ZGlmZiAtLWdpdCBhLy5ienJpZ25vcmUgYi8uYnpyaWdub3JlCmluZGV4IDQ2M2U5ODMuLjM3NmYwMGYgMTAwNjQ0Ci0tLSBhLy5ienJpZ25vcmUKKysrIGIvLmJ6cmlnbm9yZQpAQCAtMTEsMjcgKzExLDEyIEBACiBidWlsZAogTWFrZWZpbGUucHJlCiBwbGF0Zm9ybQorcHlidWlsZGRpci50eHQKIHB5Y29uZmlnLmgKIGxpYnB5dGhvbiouYQogcHl0aG9uLmV4ZQotQ1A5MzYuVFhUCi1TSElGVF9KSVNYMDIxMy5UWFQKLUpPSEFCLlRYVAotRVVDLUpQLlRYVAotTm9ybWFsaXphdGlvblRlc3QtMy4yLjAudHh0Ci1Ob3JtYWxpemF0aW9uVGVzdC50eHQKLUJJRzUuVFhUCi1CSUc1SEtTQ1MtMjAwNC5UWFQKLUNQOTQ5LlRYVAotRVVDLUNOLlRYVAotQklHNUhLU0NTLlRYVAotU0hJRlRKSVMuVFhUCi1FVUMtS1IuVFhUCi1FVUMtSklTWDAyMTMuVFhUCi1DUDkzMi5UWFQKLUNQOTUwLlRYVAorcHl0aG9uLWdkYi5weQogcmVmbG9nLnR4dAotZ2ItMTgwMzAtMjAwMC54bWwKIHRhZ3MKIFRBR1MKIC5nZGJfaGlzdG9yeQpAQCAtNDcsNSArMzIsOCBAQAogTW9kdWxlcy9jb25maWcuYwogTW9kdWxlcy9sZF9zb19haXgKIFBhcnNlci9wZ2VuCitQYXJzZXIvcGdlbi5zdGFtcAorTGliL3Rlc3QvZGF0YS8qCiBMaWIvbGliMnRvMy9HcmFtbWFyKi5waWNrbGUKIExpYi9saWIydG8zL1BhdHRlcm5HcmFtbWFyKi5waWNrbGUKK19fcHljYWNoZV9fCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDNkMGU3Ci0tLSAvZGV2L251bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDQ0IEBACisqLmNvdmVyCisqLm8KKyoub3JpZworKi5weWMKKyoucHlkCisqLnB5bworKi5yZWoKKyp+CitEb2MvYnVpbGQvCitEb2MvdG9vbHMvZG9jdXRpbHMvCitEb2MvdG9vbHMvamluamEyLworRG9jL3Rvb2xzL3B5Z21lbnRzLworRG9jL3Rvb2xzL3NwaGlueC8KK0xpYi9saWIydG8zLyoucGlja2xlCitNYWtlZmlsZQorTWFrZWZpbGUucHJlCitNaXNjL3B5dGhvbi5wYworTW9kdWxlcy9TZXR1cAorTW9kdWxlcy9TZXR1cC5jb25maWcKK01vZHVsZXMvU2V0dXAubG9jYWwKK01vZHVsZXMvY29uZmlnLmMKK01vZHVsZXMvbGRfc29fYWl4CitQQ2J1aWxkLyouYnNjCitQQ2J1aWxkLyouZGxsCitQQ2J1aWxkLyouZXhlCitQQ2J1aWxkLyouZXhwCitQQ2J1aWxkLyoubGliCitQQ2J1aWxkLyoubmNiCitQQ2J1aWxkLyoubworUENidWlsZC8qLnBkYgorUENidWlsZC9XaW4zMi10ZW1wLSoKK1BhcnNlci9wZ2VuCitQYXJzZXIvcGdlbi5zdGFtcAorX19weWNhY2hlX18KK2F1dG9tNHRlLmNhY2hlCitidWlsZC8KK2NvbmZpZy5sb2cKK2NvbmZpZy5zdGF0dXMKK2xpYnB5dGhvbiouYQorcHlidWlsZGRpci50eHQKK3B5Y29uZmlnLmgKK3B5dGhvbgorcHl0aG9uLWdkYi5weQordGFncwpkaWZmIC0tZ2l0IGEvLmhnaWdub3JlIGIvLmhnaWdub3JlCmluZGV4IDMzZTZjYWEuLmU1ZTE0OWYgMTAwNjQ0Ci0tLSBhLy5oZ2lnbm9yZQorKysgYi8uaGdpZ25vcmUKQEAgLTEsNDAgKzEsMjMgQEAKIC5nZGJfaGlzdG9yeQogLnB1cmlmeQotLnN2bgotQklHNS5UWFQKLUJJRzVIS1NDUy0yMDA0LlRYVAotQklHNUhLU0NTLlRYVAotQ1A5MzIuVFhUCi1DUDkzNi5UWFQKLUNQOTQ5LlRYVAotQ1A5NTAuVFhUCi1FVUMtQ04uVFhUCi1FVUMtSklTWDAyMTMuVFhUCi1FVUMtSlAuVFhUCi1FVUMtS1IuVFhUCi1KT0hBQi5UWFQKKy5zdm4vCiBNYWtlZmlsZSQKIE1ha2VmaWxlLnByZSQKLU5vcm1hbGl6YXRpb25UZXN0LTMuMi4wLnR4dAotTm9ybWFsaXphdGlvblRlc3QudHh0Ci1TSElGVEpJUy5UWFQKLVNISUZUX0pJU1gwMjEzLlRYVAotVEFHUwotYXV0b200dGUuY2FjaGUKLWJ1aWxkCi1idWlsZG5vCitUQUdTJAorYXV0b200dGUuY2FjaGUkCitidWlsZC8KK2J1aWxkbm8kCiBjb25maWcuY2FjaGUKIGNvbmZpZy5sb2cKIGNvbmZpZy5zdGF0dXMKIGNvbmZpZy5zdGF0dXMubGluZW5vCiBkYl9ob21lCi1nYi0xODAzMC0yMDAwLnhtbAotcGxhdGZvcm0KLXB5Y29uZmlnLmgKLXB5dGhvbgotcHl0aG9uLmV4ZQotcmVmbG9nLnR4dAotdGFncworcGxhdGZvcm0kCitweWNvbmZpZy5oJAorcHl0aG9uJAorcHl0aG9uLmV4ZSQKK3JlZmxvZy50eHQkCit0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKIERvYy90b29scy9zcGhpbngvCiBEb2MvdG9vbHMvZG9jdXRpbHMvCkBAIC00MiwxNSArMjUsMjEgQEAKIERvYy90b29scy9qaW5qYTIvCiBEb2MvdG9vbHMvcHlnbWVudHMvCiBNaXNjL3B5dGhvbi5wYwotTW9kdWxlcy9TZXR1cAorTW9kdWxlcy9TZXR1cCQKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCiBNb2R1bGVzL2NvbmZpZy5jCi1QYXJzZXIvcGdlbgotY29yZQogTW9kdWxlcy9sZF9zb19haXgkCitQYXJzZXIvcGdlbiQKK1BhcnNlci9wZ2VuLnN0YW1wJAorXmNvcmUKK15weXRob24tZ2RiLnB5CitecHl0aG9uLmV4ZS1nZGIucHkKK15weWJ1aWxkZGlyLnR4dAorCiBzeW50YXg6IGdsb2IKIGxpYnB5dGhvbiouYQorKi5zd3AKICoubwogKi5weWMKICoucHlvCkBAIC02MCw2ICs0OSw4IEBACiAqLnJlagogKn4KIExpYi9saWIydG8zLyoucGlja2xlCitMaWIvdGVzdC9kYXRhLyoKK01pc2MvKi53cHUKIFBDL3B5dGhvbl9udCouaAogUEMvcHl0aG9ubnRfcmMqLmgKIFBDLyoub2JqCkBAIC03MiwzICs2Myw1IEBACiBQQ2J1aWxkLyoubmNiCiBQQ2J1aWxkLyouYnNjCiBQQ2J1aWxkL1dpbjMyLXRlbXAtKgorX19weWNhY2hlX18KK01vZHVsZXMvX3Rlc3RlbWJlZApkaWZmIC0tZ2l0IGEvLmhndGFncyBiLy5oZ3RhZ3MKaW5kZXggNzIwYTUzMy4uNjQyN2U0MSAxMDA2NDQKLS0tIGEvLmhndGFncworKysgYi8uaGd0YWdzCkBAIC03NSwzICs3NSwxMyBAQAogOTYwZWZhMzI3YzVkOWMxOGRmOTk1NDM3YjBhYzU1MGNiODljOWY4NSB2My4xLjIKIGQxOGU5ZDcxZjM2OWQ4MjExZjZhYzg3MjUyYzZkMzIxMWY5YmQwOWYgdjMuMS4zcmMxCiBhNGY3NTc3M2MwMDYwY2VlMzhiMGJiNjUxYTdhYmE2ZjU2YjBlOTk2IHYzLjEuMworYjM3Yjc4MzQ3NTc0OTJkMDA5Yjk5Y2YwY2E0ZDQyZDIxNTNkN2ZhYyB2My4yYTEKKzU2ZDQzNzNjZWNiNzNjOGI0NTEyNmJhN2IwNDViM2M3YjNmOTRiMGIgdjMuMmEyCitkYTAxMmQ5YTJjMjNkMTQ0ZTM5OWQyZTAxYTU1YjhhODNhZDk0NTczIHYzLjJhMworZDkyYTViODUwZjVlNTY4MDhiZWRjMDE3MjM5MDZlZDY0YzVlNmUyZSB2My4yYTQKK2I2MzVjZWE5NDE5NTc4MGM4NzE2ZTIzNjQ3OWFmMzE5YmNjMjYyNTMgdjMuMmIxCitlM2FmNWYzYTc5MDRjMGQ1MzQzZWM5NjMzZWE2NmU3YWNmZDIzYTY2IHYzLjJiMgorODY1ZDViMjRiZjI4Y2E0MWI1MzZiZWZjMzI2NDA3YzAzZTc0YTRkNSB2My4ycmMxCithY2YzZTI0ZGQwZDBkZmQxZTIwYzkwN2Q2OTZkM2RhOTY1YThmNTZmIHYzLjJyYzIKKzE4YzFmNTI4OTY1MDFjN2VlMTNiMDM4NDU0YTM5YWNiNDVhODc5NzkgdjMuMnJjMworYTIyMmEwMTVlMjhkOGFlOWFmMzg5OTI1OGRjNmMxNWMzZDQwYWRkMCB2My4yCmRpZmYgLS1naXQgYS9EZW1vL1JFQURNRSBiL0RlbW8vUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDE1MGQ2Li4wMDAwMDAwCi0tLSBhL0RlbW8vUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdmFyaW91cyBkZW1vbnN0cmF0aW9ucyBvZiB3aGF0IHlvdSBjYW4gZG8gd2l0aAotUHl0aG9uLiAgVGhleSB3ZXJlIGFsbCB3cml0dGVuIGJ5IG1lIGV4Y2VwdCB3aGVyZSBleHBsaWNpdGx5IHN0YXRlZAotb3RoZXJ3aXNlIC0tIGluIGdlbmVyYWwsIGRlbW9zIGNvbnRyaWJ1dGVkIGJ5IG90aGVycyBlbmRzIHVwIGluIHRoZQotLi4vQ29udHJpYiBkaXJlY3RvcnksIHVubGVzcyBJIHRoaW5rIHRoZXkncmUgb2YgdXRtb3N0IGdlbmVyYWwKLWltcG9ydGFuY2UgKGxpa2UgTWF0dCBDb253YXkncyBUayBkZW1vcykuCi0KLUEgZmFpciBudW1iZXIgb2YgdXRpbGl0aWVzIHRoYXQgYXJlIHVzZWZ1bCB3aGVuIHdoaWxlIGRldmVsb3BpbmcKLVB5dGhvbiBjb2RlIGNhbiBiZSBmb3VuZCBpbiB0aGUgLi4vVG9vbHMgZGlyZWN0b3J5IC0tIHNvbWUgb2YgdGhlc2UKLWNhbiBhbHNvIGJlIGNvbnNpZGVyZWQgZ29vZCBleGFtcGxlcyBvZiBob3cgdG8gd3JpdGUgUHl0aG9uIGNvZGUuCi0KLUZpbmFsbHksIGluIG9yZGVyIHRvIHNhdmUgZGlzayBzcGFjZSBhbmQgbmV0IGJhbmR3aWR0aCwgbm90IGFsbAotc3ViZGlyZWN0b3JpZXMgbGlzdGVkIGhlcmUgYXJlIGRpc3RyaWJ1dGVkLiAgVGhleSBhcmUgbGlzdGVkIGp1c3QKLWluIGNhc2UgSSBjaGFuZ2UgbXkgbWluZCBhYm91dCB0aGVtLgotCi0KLWNnaSAgICAgICAgICAgICBDR0kgZXhhbXBsZXMgKHNlZSBhbHNvIC4uL1Rvb2xzL2ZhcXdpei8uKQotCi1jbGFzc2VzCQlTb21lIGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgY2xhc3Nlcy4KLQotY29tcGFyaXNvbnMJQSBzZXQgb2YgcmVzcG9uc2VzIHRvIGEgcmVhbGx5IG9sZCBsYW5ndWFnZS1jb21wYXJpc29uCi0JCWNoYWxsZW5nZS4KLQotY3Vyc2VzCQlBIHNldCBvZiBjdXJzZXMgZGVtb3MuCi0KLWVtYmVkCQlBbiBleGFtcGxlIG9mIGVtYmVkZGluZyBQeXRob24gaW4gYW5vdGhlciBhcHBsaWNhdGlvbgotCQkoc2VlIGFsc28gcHlzdnIpLgotCi1pbXB1dGlsCQlEZW1vbnN0cmF0aW9uIHN1YmNsYXNzZXMgb2YgaW1wdXRpbC5JbXBvcnRlci4KLQotbWQ1dGVzdAkJVGVzdCBwcm9ncmFtIGZvciB0aGUgb3B0aW9uYWwgbWQ1IG1vZHVsZS4KLQotbWV0YWNsYXNzZXMJVGhlIGNvZGUgZnJvbSB0aGUgMS41IG1ldGFjbGFzc2VzIHBhcGVyIG9uIHRoZSB3ZWIuCi0KLXBhcnNlcgkJRXhhbXBsZSB1c2luZyB0aGUgcGFyc2VyIG1vZHVsZS4KLQotcGRpc3QJCU9sZCwgdW5maW5pc2hlZCBjb2RlIG1lc3Npbmcgd2l0aCBDVlMsIFJDUyBhbmQgcmVtb3RlCi0JCWZpbGVzLgotCi1weXN2cgkJQW4gZXhhbXBsZSBvZiBlbWJlZGRpbmcgUHl0aG9uIGluIGEgdGhyZWFkZWQKLQkJYXBwbGljYXRpb24uCi0KLXJwYwkJQSBzZXQgb2YgY2xhc3NlcyBmb3IgYnVpbGRpbmcgY2xpZW50cyBhbmQgc2VydmVycyBmb3IKLQkJU3VuIFJQQy4KLQotc2NyaXB0cwkJU29tZSB1c2VmdWwgUHl0aG9uIHNjcmlwdHMgdGhhdCBJIHB1dCBpbiBteSBiaW4KLQkJZGlyZWN0b3J5LiAgTm8gb3B0aW9uYWwgYnVpbHQtaW4gbW9kdWxlcyBuZWVkZWQuCi0KLXNvY2tldHMJCUV4YW1wbGVzIGZvciB0aGUgbmV3IGJ1aWx0LWluIG1vZHVsZSAnc29ja2V0Jy4KLQotdGhyZWFkcwkJRGVtb3MgdGhhdCB1c2UgdGhlICd0aHJlYWQnIG1vZHVsZS4gIChDdXJyZW50bHkgdGhlc2UKLQkJb25seSBydW4gb24gU0dJcywgYnV0IHRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlLikKLQotdGl4CQlEZW1vcyB1c2luZyB0aGUgVGl4IHdpZGdldCBzZXQgYWRkaXRpb24gdG8gVGtpbnRlci4KLQotdGtpbnRlcgkJRGVtb3MgdXNpbmcgdGhlIFRrIGludGVyZmFjZSAoaW5jbHVkaW5nIE1hdHQgQ29ud2F5J3MKLQkJZXhjZWxsZW50IHNldCBvZiBkZW1vcykuCi0KLXhtbAkJU29tZSBYTUwgZGVtb3MuCi0KLXpsaWIJCVNvbWUgZGVtb3MgZm9yIHRoZSB6bGliIG1vZHVsZSAoc2VlIGFsc28gdGhlIHN0YW5kYXJkCi0JCWxpYnJhcnkgbW9kdWxlIGd6aXAucHkpLgpkaWZmIC0tZ2l0IGEvRGVtby9jZ2kvUkVBRE1FIGIvRGVtby9jZ2kvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDYzMWI2Li4wMDAwMDAwCi0tLSBhL0RlbW8vY2dpL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLUNHSSBFeGFtcGxlcwotLS0tLS0tLS0tLS0tCi0KLUhlcmUgYXJlIHNvbWUgZXhhbXBsZSBDR0kgcHJvZ3JhbXMuCi0KLWNnaTAuc2ggLS0gQSBzaGVsbCBzY3JpcHQgdG8gdGVzdCB5b3VyIHNlcnZlciBpcyBjb25maWd1cmVkIGZvciBDR0kKLWNnaTEucHkgLS0gQSBQeXRob24gc2NyaXB0IHRvIHRlc3QgeW91ciBzZXJ2ZXIgaXMgY29uZmlndXJlZCBmb3IgQ0dJCi1jZ2kyLnB5IC0tIEEgUHl0aG9uIHNjcmlwdCBzaG93aW5nIGhvdyB0byBwYXJzZSBhIGZvcm0KLWNnaTMucHkgLS0gQSBQeXRob24gc2NyaXB0IGZvciBkcml2aW5nIGFuIGFyYml0cmFyeSBDR0kgYXBwbGljYXRpb24KLXdpa2kucHkgLS0gU2FtcGxlIENHSSBhcHBsaWNhdGlvbjogYSBtaW5pbWFsIFdpa2kgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL0RlbW8vY2dpL2NnaTAuc2ggYi9EZW1vL2NnaS9jZ2kwLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA1Y2VmY2QzLi4wMDAwMDAwCi0tLSBhL0RlbW8vY2dpL2NnaTAuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMhIC9iaW4vc2gKLQotIyBJZiB5b3UgY2FuJ3QgZ2V0IHRoaXMgdG8gd29yaywgeW91ciB3ZWIgc2VydmVyIGlzbid0IHNldCB1cCByaWdodAotCi1lY2hvIENvbnRlbnQtdHlwZTogdGV4dC9wbGFpbgotZWNobwotZWNobyBIZWxsbyB3b3JsZAotZWNobyBUaGlzIGlzIGNnaTAuc2gKZGlmZiAtLWdpdCBhL0RlbW8vY2dpL2NnaTEucHkgYi9EZW1vL2NnaS9jZ2kxLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4NDJmZWYyLi4wMDAwMDAwCi0tLSBhL0RlbW8vY2dpL2NnaTEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jIS91c3IvbG9jYWwvYmluL3B5dGhvbgotCi0iIiJDR0kgdGVzdCAxIC0gY2hlY2sgc2VydmVyIHNldHVwLiIiIgotCi0jIFVudGlsIHlvdSBnZXQgdGhpcyB0byB3b3JrLCB5b3VyIHdlYiBzZXJ2ZXIgaXNuJ3Qgc2V0IHVwIHJpZ2h0IG9yCi0jIHlvdXIgUHl0aG9uIGlzbid0IHNldCB1cCByaWdodC4KLQotIyBJZiBjZ2kwLnNoIHdvcmtzIGJ1dCBjZ2kxLnB5IGRvZXNuJ3QsIGNoZWNrIHRoZSAjISBsaW5lIGFuZCB0aGUgZmlsZQotIyBwZXJtaXNzaW9ucy4gIFRoZSBkb2NzIGZvciB0aGUgY2dpLnB5IG1vZHVsZSBoYXZlIGRlYnVnZ2luZyB0aXBzLgotCi1wcmludCgiQ29udGVudC10eXBlOiB0ZXh0L2h0bWwiKQotcHJpbnQoKQotcHJpbnQoIjxoMT5IZWxsbyB3b3JsZDwvaDE+IikKLXByaW50KCI8cD5UaGlzIGlzIGNnaTEucHkiKQpkaWZmIC0tZ2l0IGEvRGVtby9jZ2kvY2dpMi5weSBiL0RlbW8vY2dpL2NnaTIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFkNTgyMmMuLjAwMDAwMDAKLS0tIGEvRGVtby9jZ2kvY2dpMi5weQorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCi0KLSIiIkNHSSB0ZXN0IDIgLSBiYXNpYyB1c2Ugb2YgY2dpIG1vZHVsZS4iIiIKLQotaW1wb3J0IGNnaXRiOyBjZ2l0Yi5lbmFibGUoKQotCi1pbXBvcnQgY2dpCi0KLWRlZiBtYWluKCk6Ci0gICAgZm9ybSA9IGNnaS5GaWVsZFN0b3JhZ2UoKQotICAgIHByaW50KCJDb250ZW50LXR5cGU6IHRleHQvaHRtbCIpCi0gICAgcHJpbnQoKQotICAgIGlmIG5vdCBmb3JtOgotICAgICAgICBwcmludCgiPGgxPk5vIEZvcm0gS2V5czwvaDE+IikKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiPGgxPkZvcm0gS2V5czwvaDE+IikKLSAgICAgICAgZm9yIGtleSBpbiBmb3JtLmtleXMoKToKLSAgICAgICAgICAgIHZhbHVlID0gZm9ybVtrZXldLnZhbHVlCi0gICAgICAgICAgICBwcmludCgiPHA+IiwgY2dpLmVzY2FwZShrZXkpLCAiOiIsIGNnaS5lc2NhcGUodmFsdWUpKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9jZ2kvY2dpMy5weSBiL0RlbW8vY2dpL2NnaTMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGEzNDIxYjUuLjAwMDAwMDAKLS0tIGEvRGVtby9jZ2kvY2dpMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCi0KLSIiIkNHSSB0ZXN0IDMgKHBlcnNpc3RlbnQgZGF0YSkuIiIiCi0KLWltcG9ydCBjZ2l0YjsgY2dpdGIuZW5hYmxlKCkKLQotZnJvbSB3aWtpIGltcG9ydCBtYWluCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL2NnaS93aWtpLnB5IGIvRGVtby9jZ2kvd2lraS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI5NzExMy4uMDAwMDAwMAotLS0gYS9EZW1vL2NnaS93aWtpLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLSIiIldpa2kgbWFpbiBwcm9ncmFtLiAgSW1wb3J0ZWQgYW5kIHJ1biBieSBjZ2kzLnB5LiIiIgotCi1pbXBvcnQgb3MsIHJlLCBjZ2ksIHN5cywgdGVtcGZpbGUKLWVzY2FwZSA9IGNnaS5lc2NhcGUKLQotZGVmIG1haW4oKToKLSAgICBmb3JtID0gY2dpLkZpZWxkU3RvcmFnZSgpCi0gICAgcHJpbnQoIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sIikKLSAgICBwcmludCgpCi0gICAgY21kID0gZm9ybS5nZXR2YWx1ZSgiY21kIiwgInZpZXciKQotICAgIHBhZ2UgPSBmb3JtLmdldHZhbHVlKCJwYWdlIiwgIkZyb250UGFnZSIpCi0gICAgd2lraSA9IFdpa2lQYWdlKHBhZ2UpCi0gICAgbWV0aG9kID0gZ2V0YXR0cih3aWtpLCAnY21kXycgKyBjbWQsIE5vbmUpIG9yIHdpa2kuY21kX3ZpZXcKLSAgICBtZXRob2QoZm9ybSkKLQotY2xhc3MgV2lraVBhZ2U6Ci0KLSAgICBob21lZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCi0gICAgc2NyaXB0dXJsID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbm90IHNlbGYuaXN3aWtpd29yZChuYW1lKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBhZ2UgbmFtZSBpcyBub3QgYSB3aWtpIHdvcmQiKQotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYubG9hZCgpCi0KLSAgICBkZWYgY21kX3ZpZXcoc2VsZiwgZm9ybSk6Ci0gICAgICAgIHByaW50KCI8aDE+IiwgZXNjYXBlKHNlbGYuc3BsaXR3aWtpd29yZChzZWxmLm5hbWUpKSwgIjwvaDE+IikKLSAgICAgICAgcHJpbnQoIjxwPiIpCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuZGF0YS5zcGxpdGxpbmVzKCk6Ci0gICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIjxwPiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KHNlbGYuZm9ybWF0bGluZShsaW5lKSkKLSAgICAgICAgcHJpbnQoIjxocj4iKQotICAgICAgICBwcmludCgiPHA+Iiwgc2VsZi5ta2xpbmsoImVkaXQiLCBzZWxmLm5hbWUsICJFZGl0IHRoaXMgcGFnZSIpICsgIjsiKQotICAgICAgICBwcmludChzZWxmLm1rbGluaygidmlldyIsICJGcm9udFBhZ2UiLCAiZ28gdG8gZnJvbnQgcGFnZSIpICsgIi4iKQotCi0gICAgZGVmIGZvcm1hdGxpbmUoc2VsZiwgbGluZSk6Ci0gICAgICAgIHdvcmRzID0gW10KLSAgICAgICAgZm9yIHdvcmQgaW4gcmUuc3BsaXQoJyhcVyspJywgbGluZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLmlzd2lraXdvcmQod29yZCk6Ci0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5ta2ZpbGUod29yZCkpOgotICAgICAgICAgICAgICAgICAgICB3b3JkID0gc2VsZi5ta2xpbmsoInZpZXciLCB3b3JkLCB3b3JkKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHdvcmQgPSBzZWxmLm1rbGluaygibmV3Iiwgd29yZCwgd29yZCArICIqIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgd29yZCA9IGVzY2FwZSh3b3JkKQotICAgICAgICAgICAgd29yZHMuYXBwZW5kKHdvcmQpCi0gICAgICAgIHJldHVybiAiIi5qb2luKHdvcmRzKQotCi0gICAgZGVmIGNtZF9lZGl0KHNlbGYsIGZvcm0sIGxhYmVsPSJDaGFuZ2UiKToKLSAgICAgICAgcHJpbnQoIjxoMT4iLCBsYWJlbCwgc2VsZi5uYW1lLCAiPC9oMT4iKQotICAgICAgICBwcmludCgnPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiVzIj4nICUgc2VsZi5zY3JpcHR1cmwpCi0gICAgICAgIHMgPSAnPHRleHRhcmVhIGNvbHM9IjcwIiByb3dzPSIyMCIgbmFtZT0idGV4dCI+JXM8L3RleHRhcmVhPicKLSAgICAgICAgcHJpbnQocyAlIHNlbGYuZGF0YSkKLSAgICAgICAgcHJpbnQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9ImNyZWF0ZSI+JykKLSAgICAgICAgcHJpbnQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSIlcyI+JyAlIHNlbGYubmFtZSkKLSAgICAgICAgcHJpbnQoJzxicj4nKQotICAgICAgICBwcmludCgnPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IiVzIFBhZ2UiPicgJSBsYWJlbCkKLSAgICAgICAgcHJpbnQoIjwvZm9ybT4iKQotCi0gICAgZGVmIGNtZF9jcmVhdGUoc2VsZiwgZm9ybSk6Ci0gICAgICAgIHNlbGYuZGF0YSA9IGZvcm0uZ2V0dmFsdWUoInRleHQiLCAiIikuc3RyaXAoKQotICAgICAgICBlcnJvciA9IHNlbGYuc3RvcmUoKQotICAgICAgICBpZiBlcnJvcjoKLSAgICAgICAgICAgIHByaW50KCI8aDE+SSdtIHNvcnJ5LiAgVGhhdCBkaWRuJ3Qgd29yazwvaDE+IikKLSAgICAgICAgICAgIHByaW50KCI8cD5BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHdyaXRlIHRoZSBmaWxlOiIpCi0gICAgICAgICAgICBwcmludCgiPHA+IiwgZXNjYXBlKGVycm9yKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVXNlIGEgcmVkaXJlY3QgZGlyZWN0aXZlLCB0byBhdm9pZCAicmVsb2FkIHBhZ2UiIHByb2JsZW1zCi0gICAgICAgICAgICBwcmludCgiPGhlYWQ+IikKLSAgICAgICAgICAgIHMgPSAnPG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMTsgVVJMPSVzIj4nCi0gICAgICAgICAgICBwcmludChzICUgKHNlbGYuc2NyaXB0dXJsICsgIj9jbWQ9dmlldyZwYWdlPSIgKyBzZWxmLm5hbWUpKQotICAgICAgICAgICAgcHJpbnQoIjxoZWFkPiIpCi0gICAgICAgICAgICBwcmludCgiPGgxPk9LPC9oMT4iKQotICAgICAgICAgICAgcHJpbnQoIjxwPklmIG5vdGhpbmcgaGFwcGVucywgcGxlYXNlIGNsaWNrIGhlcmU6IiwgZW5kPScgJykKLSAgICAgICAgICAgIHByaW50KHNlbGYubWtsaW5rKCJ2aWV3Iiwgc2VsZi5uYW1lLCBzZWxmLm5hbWUpKQotCi0gICAgZGVmIGNtZF9uZXcoc2VsZiwgZm9ybSk6Ci0gICAgICAgIHNlbGYuY21kX2VkaXQoZm9ybSwgbGFiZWw9IkNyZWF0ZSIpCi0KLSAgICBkZWYgaXN3aWtpd29yZChzZWxmLCB3b3JkKToKLSAgICAgICAgcmV0dXJuIHJlLm1hdGNoKCJbQS1aXVthLXpdKyhbQS1aXVthLXpdKikrIiwgd29yZCkKLQotICAgIGRlZiBzcGxpdHdpa2l3b3JkKHNlbGYsIHdvcmQpOgotICAgICAgICBjaGFycyA9IFtdCi0gICAgICAgIGZvciBjIGluIHdvcmQ6Ci0gICAgICAgICAgICBpZiBjaGFycyBhbmQgYy5pc3VwcGVyKCk6Ci0gICAgICAgICAgICAgICAgY2hhcnMuYXBwZW5kKCcgJykKLSAgICAgICAgICAgIGNoYXJzLmFwcGVuZChjKQotICAgICAgICByZXR1cm4gIiIuam9pbihjaGFycykKLQotICAgIGRlZiBta2ZpbGUoc2VsZiwgbmFtZT1Ob25lKToKLSAgICAgICAgaWYgbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHNlbGYuaG9tZWRpciwgbmFtZSArICIudHh0IikKLQotICAgIGRlZiBta2xpbmsoc2VsZiwgY21kLCBwYWdlLCB0ZXh0KToKLSAgICAgICAgbGluayA9IHNlbGYuc2NyaXB0dXJsICsgIj9jbWQ9IiArIGNtZCArICImcGFnZT0iICsgcGFnZQotICAgICAgICByZXR1cm4gJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKGxpbmssIHRleHQpCi0KLSAgICBkZWYgbG9hZChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5ta2ZpbGUoKSkKLSAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBkYXRhID0gIiIKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgZGVmIHN0b3JlKHNlbGYpOgotICAgICAgICBkYXRhID0gc2VsZi5kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYubWtmaWxlKCksICJ3IikKLSAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIGlmIGRhdGEgYW5kIG5vdCBkYXRhLmVuZHN3aXRoKCdcbicpOgotICAgICAgICAgICAgICAgIGYud3JpdGUoJ1xuJykKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgcmV0dXJuICIiCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHJldHVybiAiSU9FcnJvcjogJXMiICUgc3RyKGVycikKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9Db21wbGV4LnB5IGIvRGVtby9jbGFzc2VzL0NvbXBsZXgucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY0YzU2ZDQuLjAwMDAwMDAKLS0tIGEvRGVtby9jbGFzc2VzL0NvbXBsZXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMTQgKzAsMCBAQAotIyBDb21wbGV4IG51bWJlcnMKLSMgLS0tLS0tLS0tLS0tLS0tCi0KLSMgW05vdyB0aGF0IFB5dGhvbiBoYXMgYSBjb21wbGV4IGRhdGEgdHlwZSBidWlsdC1pbiwgdGhpcyBpcyBub3QgdmVyeQotIyB1c2VmdWwsIGJ1dCBpdCdzIHN0aWxsIGEgbmljZSBleGFtcGxlIGNsYXNzXQotCi0jIFRoaXMgbW9kdWxlIHJlcHJlc2VudHMgY29tcGxleCBudW1iZXJzIGFzIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgQ29tcGxleC4KLSMgQSBDb21wbGV4IGluc3RhbmNlIHogaGFzIHR3byBkYXRhIGF0dHJpYnVlcywgei5yZSAodGhlIHJlYWwgcGFydCkgYW5kIHouaW0KLSMgKHRoZSBpbWFnaW5hcnkgcGFydCkuICBJbiBmYWN0LCB6LnJlIGFuZCB6LmltIGNhbiBoYXZlIGFueSB2YWx1ZSAtLSBhbGwKLSMgYXJpdGhtZXRpYyBvcGVyYXRvcnMgd29yayByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIHoucmUgYW5kIHouaW0gKGFzIGxvbmcKLSMgYXMgdGhleSBzdXBwb3J0IG51bWVyaWNhbCBvcGVyYXRpb25zKS4KLSMKLSMgVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZXhpc3QgKENvbXBsZXggaXMgYWN0dWFsbHkgYSBjbGFzcyk6Ci0jIENvbXBsZXgoW3JlIFssaW1dKSAtPiBjcmVhdGVzIGEgY29tcGxleCBudW1iZXIgZnJvbSBhIHJlYWwgYW5kIGFuIGltYWdpbmFyeSBwYXJ0Ci0jIElzQ29tcGxleCh6KSAtPiB0cnVlIGlmZiB6IGlzIGEgY29tcGxleCBudW1iZXIgKD09IGhhcyAucmUgYW5kIC5pbSBhdHRyaWJ1dGVzKQotIyBUb0NvbXBsZXgoeikgLT4gYSBjb21wbGV4IG51bWJlciBlcXVhbCB0byB6OyB6IGl0c2VsZiBpZiBJc0NvbXBsZXgoeikgaXMgdHJ1ZQotIyAgICAgICAgICAgICAgICAgaWYgeiBpcyBhIHR1cGxlKHJlLCBpbSkgaXQgd2lsbCBhbHNvIGJlIGNvbnZlcnRlZAotIyBQb2xhclRvQ29tcGxleChbciBbLHBoaSBbLGZ1bGxjaXJjbGVdXV0pIC0+Ci0jICAgICAgIHRoZSBjb21wbGV4IG51bWJlciB6IGZvciB3aGljaCByID09IHoucmFkaXVzKCkgYW5kIHBoaSA9PSB6LmFuZ2xlKGZ1bGxjaXJjbGUpCi0jICAgICAgIChyIGFuZCBwaGkgZGVmYXVsdCB0byAwKQotIyBleHAoeikgLT4gcmV0dXJucyB0aGUgY29tcGxleCBleHBvbmVudGlhbCBvZiB6LiBFcXVpdmFsZW50IHRvIHBvdyhtYXRoLmUseikuCi0jCi0jIENvbXBsZXggbnVtYmVycyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKLSMgei5hYnMoKSAtPiBhYnNvbHV0ZSB2YWx1ZSBvZiB6Ci0jIHoucmFkaXVzKCkgPT0gei5hYnMoKQotIyB6LmFuZ2xlKFtmdWxsY2lyY2xlXSkgLT4gYW5nbGUgZnJvbSBwb3NpdGl2ZSBYIGF4aXM7IGZ1bGxjaXJjbGUgZ2l2ZXMgdW5pdHMKLSMgei5waGkoW2Z1bGxjaXJjbGVdKSA9PSB6LmFuZ2xlKGZ1bGxjaXJjbGUpCi0jCi0jIFRoZXNlIHN0YW5kYXJkIGZ1bmN0aW9ucyBhbmQgdW5hcnkgb3BlcmF0b3JzIGFjY2VwdCBjb21wbGV4IGFyZ3VtZW50czoKLSMgYWJzKHopCi0jIC16Ci0jICt6Ci0jIG5vdCB6Ci0jIHJlcHIoeikgPT0gYHpgCi0jIHN0cih6KQotIyBoYXNoKHopIC0+IGEgY29tYmluYXRpb24gb2YgaGFzaCh6LnJlKSBhbmQgaGFzaCh6LmltKSBzdWNoIHRoYXQgaWYgei5pbSBpcyB6ZXJvCi0jICAgICAgICAgICAgdGhlIHJlc3VsdCBlcXVhbHMgaGFzaCh6LnJlKQotIyBOb3RlIHRoYXQgaGV4KHopIGFuZCBvY3QoeikgYXJlIG5vdCBkZWZpbmVkLgotIwotIyBUaGVzZSBjb252ZXJzaW9ucyBhY2NlcHQgY29tcGxleCBhcmd1bWVudHMgb25seSBpZiB0aGVpciBpbWFnaW5hcnkgcGFydCBpcyB6ZXJvOgotIyBpbnQoeikKLSMgZmxvYXQoeikKLSMKLSMgVGhlIGZvbGxvd2luZyBvcGVyYXRvcnMgYWNjZXB0IHR3byBjb21wbGV4IG51bWJlcnMsIG9yIG9uZSBjb21wbGV4IG51bWJlcgotIyBhbmQgb25lIHJlYWwgbnVtYmVyIChpbnQsIGxvbmcgb3IgZmxvYXQpOgotIyB6MSArIHoyCi0jIHoxIC0gejIKLSMgejEgKiB6MgotIyB6MSAvIHoyCi0jIHBvdyh6MSwgejIpCi0jIGNtcCh6MSwgejIpCi0jIE5vdGUgdGhhdCB6MSAlIHoyIGFuZCBkaXZtb2QoejEsIHoyKSBhcmUgbm90IGRlZmluZWQsCi0jIG5vciBhcmUgc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9ucy4KLSMKLSMgVGhlIHN0YW5kYXJkIG1vZHVsZSBtYXRoIGRvZXMgbm90IHN1cHBvcnQgY29tcGxleCBudW1iZXJzLgotIyBUaGUgY21hdGggbW9kdWxlcyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgotIwotIyBJZGVhOgotIyBhZGQgYSBjbGFzcyBQb2xhcihyLCBwaGkpIGFuZCBtaXhlZC1tb2RlIGFyaXRobWV0aWMgd2hpY2gKLSMgY2hvb3NlcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSB0eXBlIGZvciB0aGUgcmVzdWx0OgotIyBDb21wbGV4IGZvciArLC0sY21wCi0jIFBvbGFyICAgZm9yICosLyxwb3cKLQotaW1wb3J0IG1hdGgKLWltcG9ydCBzeXMKLQotdHdvcGkgPSBtYXRoLnBpKjIuMAotaGFsZnBpID0gbWF0aC5waS8yLjAKLQotZGVmIElzQ29tcGxleChvYmopOgotICAgIHJldHVybiBoYXNhdHRyKG9iaiwgJ3JlJykgYW5kIGhhc2F0dHIob2JqLCAnaW0nKQotCi1kZWYgVG9Db21wbGV4KG9iaik6Ci0gICAgaWYgSXNDb21wbGV4KG9iaik6Ci0gICAgICAgIHJldHVybiBvYmoKLSAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCB0dXBsZSk6Ci0gICAgICAgIHJldHVybiBDb21wbGV4KCpvYmopCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIENvbXBsZXgob2JqKQotCi1kZWYgUG9sYXJUb0NvbXBsZXgociA9IDAsIHBoaSA9IDAsIGZ1bGxjaXJjbGUgPSB0d29waSk6Ci0gICAgcGhpID0gcGhpICogKHR3b3BpIC8gZnVsbGNpcmNsZSkKLSAgICByZXR1cm4gQ29tcGxleChtYXRoLmNvcyhwaGkpKnIsIG1hdGguc2luKHBoaSkqcikKLQotZGVmIFJlKG9iaik6Ci0gICAgaWYgSXNDb21wbGV4KG9iaik6Ci0gICAgICAgIHJldHVybiBvYmoucmUKLSAgICByZXR1cm4gb2JqCi0KLWRlZiBJbShvYmopOgotICAgIGlmIElzQ29tcGxleChvYmopOgotICAgICAgICByZXR1cm4gb2JqLmltCi0gICAgcmV0dXJuIDAKLQotY2xhc3MgQ29tcGxleDoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZT0wLCBpbT0wKToKLSAgICAgICAgX3JlID0gMAotICAgICAgICBfaW0gPSAwCi0gICAgICAgIGlmIElzQ29tcGxleChyZSk6Ci0gICAgICAgICAgICBfcmUgPSByZS5yZQotICAgICAgICAgICAgX2ltID0gcmUuaW0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9yZSA9IHJlCi0gICAgICAgIGlmIElzQ29tcGxleChpbSk6Ci0gICAgICAgICAgICBfcmUgPSBfcmUgLSBpbS5pbQotICAgICAgICAgICAgX2ltID0gX2ltICsgaW0ucmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIF9pbSA9IF9pbSArIGltCi0gICAgICAgICMgdGhpcyBjbGFzcyBpcyBpbW11dGFibGUsIHNvIHNldHRpbmcgc2VsZi5yZSBkaXJlY3RseSBpcwotICAgICAgICAjIG5vdCBwb3NzaWJsZS4KLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncmUnXSA9IF9yZQotICAgICAgICBzZWxmLl9fZGljdF9fWydpbSddID0gX2ltCi0KLSAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0NvbXBsZXggbnVtYmVycyBhcmUgaW1tdXRhYmxlJykKLQotICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuaW06Ci0gICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLnJlKQotICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi5yZSwgc2VsZi5pbSkpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmltOgotICAgICAgICAgICAgcmV0dXJuICdDb21wbGV4KCVyKScgJSAoc2VsZi5yZSwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJ0NvbXBsZXgoJXIsICVyKScgJSAoc2VsZi5yZSwgc2VsZi5pbSkKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5pbToKLSAgICAgICAgICAgIHJldHVybiByZXByKHNlbGYucmUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gJ0NvbXBsZXgoJXIsICVyKScgJSAoc2VsZi5yZSwgc2VsZi5pbSkKLQotICAgIGRlZiBfX25lZ19fKHNlbGYpOgotICAgICAgICByZXR1cm4gQ29tcGxleCgtc2VsZi5yZSwgLXNlbGYuaW0pCi0KLSAgICBkZWYgX19wb3NfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2Fic19fKHNlbGYpOgotICAgICAgICByZXR1cm4gbWF0aC5oeXBvdChzZWxmLnJlLCBzZWxmLmltKQotCi0gICAgZGVmIF9faW50X18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuaW06Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBjb252ZXJ0IENvbXBsZXggd2l0aCBub256ZXJvIGltIHRvIGludCIpCi0gICAgICAgIHJldHVybiBpbnQoc2VsZi5yZSkKLQotICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuaW06Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBjb252ZXJ0IENvbXBsZXggd2l0aCBub256ZXJvIGltIHRvIGZsb2F0IikKLSAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYucmUpCi0KLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIG90aGVyID0gVG9Db21wbGV4KG90aGVyKQotICAgICAgICByZXR1cm4gY21wKChzZWxmLnJlLCBzZWxmLmltKSwgKG90aGVyLnJlLCBvdGhlci5pbSkpCi0KLSAgICBkZWYgX19yY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IFRvQ29tcGxleChvdGhlcikKLSAgICAgICAgcmV0dXJuIGNtcChvdGhlciwgc2VsZikKLQotICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZi5yZSA9PSBzZWxmLmltID09IDApCi0KLSAgICBhYnMgPSByYWRpdXMgPSBfX2Fic19fCi0KLSAgICBkZWYgYW5nbGUoc2VsZiwgZnVsbGNpcmNsZSA9IHR3b3BpKToKLSAgICAgICAgcmV0dXJuIChmdWxsY2lyY2xlL3R3b3BpKSAqICgoaGFsZnBpIC0gbWF0aC5hdGFuMihzZWxmLnJlLCBzZWxmLmltKSkgJSB0d29waSkKLQotICAgIHBoaSA9IGFuZ2xlCi0KLSAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIG90aGVyID0gVG9Db21wbGV4KG90aGVyKQotICAgICAgICByZXR1cm4gQ29tcGxleChzZWxmLnJlICsgb3RoZXIucmUsIHNlbGYuaW0gKyBvdGhlci5pbSkKLQotICAgIF9fcmFkZF9fID0gX19hZGRfXwotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IFRvQ29tcGxleChvdGhlcikKLSAgICAgICAgcmV0dXJuIENvbXBsZXgoc2VsZi5yZSAtIG90aGVyLnJlLCBzZWxmLmltIC0gb3RoZXIuaW0pCi0KLSAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IFRvQ29tcGxleChvdGhlcikKLSAgICAgICAgcmV0dXJuIG90aGVyIC0gc2VsZgotCi0gICAgZGVmIF9fbXVsX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBvdGhlciA9IFRvQ29tcGxleChvdGhlcikKLSAgICAgICAgcmV0dXJuIENvbXBsZXgoc2VsZi5yZSpvdGhlci5yZSAtIHNlbGYuaW0qb3RoZXIuaW0sCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmUqb3RoZXIuaW0gKyBzZWxmLmltKm90aGVyLnJlKQotCi0gICAgX19ybXVsX18gPSBfX211bF9fCi0KLSAgICBkZWYgX19kaXZfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIG90aGVyID0gVG9Db21wbGV4KG90aGVyKQotICAgICAgICBkID0gZmxvYXQob3RoZXIucmUqb3RoZXIucmUgKyBvdGhlci5pbSpvdGhlci5pbSkKLSAgICAgICAgaWYgbm90IGQ6IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCdDb21wbGV4IGRpdmlzaW9uJykKLSAgICAgICAgcmV0dXJuIENvbXBsZXgoKHNlbGYucmUqb3RoZXIucmUgKyBzZWxmLmltKm90aGVyLmltKSAvIGQsCi0gICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmltKm90aGVyLnJlIC0gc2VsZi5yZSpvdGhlci5pbSkgLyBkKQotCi0gICAgZGVmIF9fcmRpdl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgb3RoZXIgPSBUb0NvbXBsZXgob3RoZXIpCi0gICAgICAgIHJldHVybiBvdGhlciAvIHNlbGYKLQotICAgIGRlZiBfX3Bvd19fKHNlbGYsIG4sIHo9Tm9uZSk6Ci0gICAgICAgIGlmIHogaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0NvbXBsZXggZG9lcyBub3Qgc3VwcG9ydCB0ZXJuYXJ5IHBvdygpJykKLSAgICAgICAgaWYgSXNDb21wbGV4KG4pOgotICAgICAgICAgICAgaWYgbi5pbToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmltOiByYWlzZSBUeXBlRXJyb3IoJ0NvbXBsZXggdG8gdGhlIENvbXBsZXggcG93ZXInKQotICAgICAgICAgICAgICAgIGVsc2U6IHJldHVybiBleHAobWF0aC5sb2coc2VsZi5yZSkqbikKLSAgICAgICAgICAgIG4gPSBuLnJlCi0gICAgICAgIHIgPSBwb3coc2VsZi5hYnMoKSwgbikKLSAgICAgICAgcGhpID0gbipzZWxmLmFuZ2xlKCkKLSAgICAgICAgcmV0dXJuIENvbXBsZXgobWF0aC5jb3MocGhpKSpyLCBtYXRoLnNpbihwaGkpKnIpCi0KLSAgICBkZWYgX19ycG93X18oc2VsZiwgYmFzZSk6Ci0gICAgICAgIGJhc2UgPSBUb0NvbXBsZXgoYmFzZSkKLSAgICAgICAgcmV0dXJuIHBvdyhiYXNlLCBzZWxmKQotCi1kZWYgZXhwKHopOgotICAgIHIgPSBtYXRoLmV4cCh6LnJlKQotICAgIHJldHVybiBDb21wbGV4KG1hdGguY29zKHouaW0pKnIsbWF0aC5zaW4oei5pbSkqcikKLQotCi1kZWYgY2hlY2tvcChleHByLCBhLCBiLCB2YWx1ZSwgZnV6eiA9IDFlLTYpOgotICAgIHByaW50KCcgICAgICAgJywgYSwgJ2FuZCcsIGIsIGVuZD0nICcpCi0gICAgdHJ5OgotICAgICAgICByZXN1bHQgPSBldmFsKGV4cHIpCi0gICAgZXhjZXB0OgotICAgICAgICByZXN1bHQgPSBzeXMuZXhjX2luZm8oKVswXQotICAgIHByaW50KCctPicsIHJlc3VsdCkKLSAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgc3RyKSBvciBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICBvayA9IChyZXN1bHQgPT0gdmFsdWUpCi0gICAgZWxzZToKLSAgICAgICAgb2sgPSBhYnMocmVzdWx0IC0gdmFsdWUpIDw9IGZ1enoKLSAgICBpZiBub3Qgb2s6Ci0gICAgICAgIHByaW50KCchIVx0ISFcdCEhIHNob3VsZCBiZScsIHZhbHVlLCAnZGlmZicsIGFicyhyZXN1bHQgLSB2YWx1ZSkpCi0KLWRlZiB0ZXN0KCk6Ci0gICAgcHJpbnQoJ3Rlc3QgY29uc3RydWN0b3JzJykKLSAgICBjb25zdHJ1Y3Rvcl90ZXN0ID0gKAotICAgICAgICAjICJleHBlY3QiIGlzIGFuIGFycmF5IFtyZSxpbV0gImdvdCIgdGhlIENvbXBsZXguCi0gICAgICAgICAgICAoICgwLDApLCBDb21wbGV4KCkgKSwKLSAgICAgICAgICAgICggKDAsMCksIENvbXBsZXgoKSApLAotICAgICAgICAgICAgKCAoMSwwKSwgQ29tcGxleCgxKSApLAotICAgICAgICAgICAgKCAoMCwxKSwgQ29tcGxleCgwLDEpICksCi0gICAgICAgICAgICAoICgxLDIpLCBDb21wbGV4KENvbXBsZXgoMSwyKSkgKSwKLSAgICAgICAgICAgICggKDEsMyksIENvbXBsZXgoQ29tcGxleCgxLDIpLDEpICksCi0gICAgICAgICAgICAoICgwLDApLCBDb21wbGV4KDAsQ29tcGxleCgwLDApKSApLAotICAgICAgICAgICAgKCAoMyw0KSwgQ29tcGxleCgzLENvbXBsZXgoNCkpICksCi0gICAgICAgICAgICAoICgtMSwzKSwgQ29tcGxleCgxLENvbXBsZXgoMywyKSkgKSwKLSAgICAgICAgICAgICggKC03LDYpLCBDb21wbGV4KENvbXBsZXgoMSwyKSxDb21wbGV4KDQsOCkpICkgKQotICAgIGNudCA9IFswLDBdCi0gICAgZm9yIHQgaW4gY29uc3RydWN0b3JfdGVzdDoKLSAgICAgICAgY250WzBdICs9IDEKLSAgICAgICAgaWYgKCh0WzBdWzBdIT10WzFdLnJlKW9yKHRbMF1bMV0hPXRbMV0uaW0pKToKLSAgICAgICAgICAgIHByaW50KCIgICAgICAgIGV4cGVjdGVkIiwgdFswXSwgImdvdCIsIHRbMV0pCi0gICAgICAgICAgICBjbnRbMV0gKz0gMQotICAgIHByaW50KCIgICIsIGNudFsxXSwgIm9mIiwgY250WzBdLCAidGVzdHMgZmFpbGVkIikKLSAgICAjIHRlc3Qgb3BlcmF0b3JzCi0gICAgdGVzdHN1aXRlID0gewotICAgICAgICAgICAgJ2ErYic6IFsKLSAgICAgICAgICAgICAgICAgICAgKDEsIDEwLCAxMSksCi0gICAgICAgICAgICAgICAgICAgICgxLCBDb21wbGV4KDAsMTApLCBDb21wbGV4KDEsMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMCwxMCksIDEsIENvbXBsZXgoMSwxMCkpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLDEwKSwgQ29tcGxleCgxKSwgQ29tcGxleCgxLDEwKSksCi0gICAgICAgICAgICAgICAgICAgIChDb21wbGV4KDEpLCBDb21wbGV4KDAsMTApLCBDb21wbGV4KDEsMTApKSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYS1iJzogWwotICAgICAgICAgICAgICAgICAgICAoMSwgMTAsIC05KSwKLSAgICAgICAgICAgICAgICAgICAgKDEsIENvbXBsZXgoMCwxMCksIENvbXBsZXgoMSwtMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMCwxMCksIDEsIENvbXBsZXgoLTEsMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMCwxMCksIENvbXBsZXgoMSksIENvbXBsZXgoLTEsMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMSksIENvbXBsZXgoMCwxMCksIENvbXBsZXgoMSwtMTApKSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYSpiJzogWwotICAgICAgICAgICAgICAgICAgICAoMSwgMTAsIDEwKSwKLSAgICAgICAgICAgICAgICAgICAgKDEsIENvbXBsZXgoMCwxMCksIENvbXBsZXgoMCwgMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMCwxMCksIDEsIENvbXBsZXgoMCwxMCkpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLDEwKSwgQ29tcGxleCgxKSwgQ29tcGxleCgwLDEwKSksCi0gICAgICAgICAgICAgICAgICAgIChDb21wbGV4KDEpLCBDb21wbGV4KDAsMTApLCBDb21wbGV4KDAsMTApKSwKLSAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAnYS9iJzogWwotICAgICAgICAgICAgICAgICAgICAoMS4sIDEwLCAwLjEpLAotICAgICAgICAgICAgICAgICAgICAoMSwgQ29tcGxleCgwLDEwKSwgQ29tcGxleCgwLCAtMC4xKSksCi0gICAgICAgICAgICAgICAgICAgIChDb21wbGV4KDAsIDEwKSwgMSwgQ29tcGxleCgwLCAxMCkpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLCAxMCksIENvbXBsZXgoMSksIENvbXBsZXgoMCwgMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMSksIENvbXBsZXgoMCwxMCksIENvbXBsZXgoMCwgLTAuMSkpLAotICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICdwb3coYSxiKSc6IFsKLSAgICAgICAgICAgICAgICAgICAgKDEsIDEwLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgKDEsIENvbXBsZXgoMCwxMCksIDEpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLDEwKSwgMSwgQ29tcGxleCgwLDEwKSksCi0gICAgICAgICAgICAgICAgICAgIChDb21wbGV4KDAsMTApLCBDb21wbGV4KDEpLCBDb21wbGV4KDAsMTApKSwKLSAgICAgICAgICAgICAgICAgICAgKENvbXBsZXgoMSksIENvbXBsZXgoMCwxMCksIDEpLAotICAgICAgICAgICAgICAgICAgICAoMiwgQ29tcGxleCg0LDApLCAxNiksCi0gICAgICAgICAgICBdLAotICAgICAgICAgICAgJ2NtcChhLGIpJzogWwotICAgICAgICAgICAgICAgICAgICAoMSwgMTAsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgKDEsIENvbXBsZXgoMCwxMCksIDEpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLDEwKSwgMSwgLTEpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgwLDEwKSwgQ29tcGxleCgxKSwgLTEpLAotICAgICAgICAgICAgICAgICAgICAoQ29tcGxleCgxKSwgQ29tcGxleCgwLDEwKSwgMSksCi0gICAgICAgICAgICBdLAotICAgIH0KLSAgICBmb3IgZXhwciBpbiBzb3J0ZWQodGVzdHN1aXRlKToKLSAgICAgICAgcHJpbnQoZXhwciArICc6JykKLSAgICAgICAgdCA9IChleHByLCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gdGVzdHN1aXRlW2V4cHJdOgotICAgICAgICAgICAgY2hlY2tvcCgqKHQraXRlbSkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9EYXRlcy5weSBiL0RlbW8vY2xhc3Nlcy9EYXRlcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTFiMDU0Zi4uMDAwMDAwMAotLS0gYS9EZW1vL2NsYXNzZXMvRGF0ZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotIyBDbGFzcyBEYXRlIHN1cHBsaWVzIGRhdGUgb2JqZWN0cyB0aGF0IHN1cHBvcnQgZGF0ZSBhcml0aG1ldGljLgotIwotIyBEYXRlKG1vbnRoLGRheSx5ZWFyKSByZXR1cm5zIGEgRGF0ZSBvYmplY3QuICBBbiBpbnN0YW5jZSBwcmludHMgYXMsCi0jIGUuZy4sICdNb24gMTYgQXVnIDE5OTMnLgotIwotIyBBZGRpdGlvbiwgc3VidHJhY3Rpb24sIGNvbXBhcmlzb24gb3BlcmF0b3JzLCBtaW4sIG1heCwgYW5kIHNvcnRpbmcKLSMgYWxsIHdvcmsgYXMgZXhwZWN0ZWQgZm9yIGRhdGUgb2JqZWN0czogIGludCtkYXRlIG9yIGRhdGUraW50IHJldHVybnMKLSMgdGhlIGRhdGUgYGludCcgZGF5cyBmcm9tIGBkYXRlJzsgZGF0ZStkYXRlIHJhaXNlcyBhbiBleGNlcHRpb247Ci0jIGRhdGUtaW50IHJldHVybnMgdGhlIGRhdGUgYGludCcgZGF5cyBiZWZvcmUgYGRhdGUnOyBkYXRlMi1kYXRlMSByZXR1cm5zCi0jIGFuIGludGVnZXIsIHRoZSBudW1iZXIgb2YgZGF5cyBmcm9tIGRhdGUxIHRvIGRhdGUyOyBpbnQtZGF0ZSByYWlzZXMgYW4KLSMgZXhjZXB0aW9uOyBkYXRlMSA8IGRhdGUyIGlzIHRydWUgaWZmIGRhdGUxIG9jY3VycyBiZWZvcmUgZGF0ZTIgKCYKLSMgc2ltaWxhcmx5IGZvciBvdGhlciBjb21wYXJpc29ucyk7IG1pbihkYXRlMSxkYXRlMikgaXMgdGhlIGVhcmxpZXIgb2YKLSMgdGhlIHR3byBkYXRlcyBhbmQgbWF4KGRhdGUxLGRhdGUyKSB0aGUgbGF0ZXI7IGFuZCBkYXRlIG9iamVjdHMgY2FuIGJlCi0jIHVzZWQgYXMgZGljdGlvbmFyeSBrZXlzLgotIwotIyBEYXRlIG9iamVjdHMgc3VwcG9ydCBvbmUgdmlzaWJsZSBtZXRob2QsIGRhdGUud2Vla2RheSgpLiAgVGhpcyByZXR1cm5zCi0jIHRoZSBkYXkgb2YgdGhlIHdlZWsgdGhlIGRhdGUgZmFsbHMgb24sIGFzIGEgc3RyaW5nLgotIwotIyBEYXRlIG9iamVjdHMgYWxzbyBoYXZlIDQgcmVhZC1vbmx5IGRhdGEgYXR0cmlidXRlczoKLSMgICAubW9udGggIGluIDEuLjEyCi0jICAgLmRheSAgICBpbiAxLi4zMQotIyAgIC55ZWFyICAgaW50IG9yIGxvbmcgaW50Ci0jICAgLm9yZCAgICB0aGUgb3JkaW5hbCBvZiB0aGUgZGF0ZSByZWxhdGl2ZSB0byBhbiBhcmJpdHJhcnkgc3RhcmluZyBwb2ludAotIwotIyBUaGUgRGF0ZXMgbW9kdWxlIGFsc28gc3VwcGxpZXMgZnVuY3Rpb24gdG9kYXkoKSwgd2hpY2ggcmV0dXJucyB0aGUKLSMgY3VycmVudCBkYXRlIGFzIGEgZGF0ZSBvYmplY3QuCi0jCi0jIFRob3NlIGVudHJhbmNlZCBieSBjYWxlbmRhciB0cml2aWEgd2lsbCBiZSBkaXNhcHBvaW50ZWQsIGFzIG5vIGF0dGVtcHQKLSMgaGFzIGJlZW4gbWFkZSB0byBhY2NvbW1vZGF0ZSB0aGUgSnVsaWFuIChldGMpIHN5c3RlbS4gIE9uIHRoZSBvdGhlcgotIyBoYW5kLCBhdCBsZWFzdCB0aGlzIHBhY2thZ2Uga25vd3MgdGhhdCAyMDAwIGlzIGEgbGVhcCB5ZWFyIGJ1dCAyMTAwCi0jIGlzbid0LCBhbmQgd29ya3MgZmluZSBmb3IgeWVhcnMgd2l0aCBhIGh1bmRyZWQgZGVjaW1hbCBkaWdpdHMgPHdpbms+LgotCi0jIFRpbSBQZXRlcnMgICB0aW1Aa3NyLmNvbQotIyBub3Qgc3BlYWtpbmcgZm9yIEtlbmRhbGwgU3F1YXJlIFJlc2VhcmNoIENvcnAKLQotIyBBZGFwdGVkIHRvIFB5dGhvbiAxLjEgKHdoZXJlIHNvbWUgaGFja3MgdG8gb3ZlcmNvbWUgY29lcmNpb24gYXJlIHVubmVjZXNzYXJ5KQotIyBieSBHdWlkbyB2YW4gUm9zc3VtCi0KLSMgTm90ZSB0aGF0IGFzIG9mIFB5dGhvbiAyLjMsIGEgZGF0ZXRpbWUgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBzdGFyZGFyZAotIyBsaWJyYXJ5LgotCi0jIHZpOnNldCB0YWJzaXplPTg6Ci0KLV9NT05USF9OQU1FUyA9IFsgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywKLSAgICAgICAgICAgICAgICAgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLAotICAgICAgICAgICAgICAgICAnTm92ZW1iZXInLCAnRGVjZW1iZXInIF0KLQotX0RBWV9OQU1FUyA9IFsgJ0ZyaWRheScsICdTYXR1cmRheScsICdTdW5kYXknLCAnTW9uZGF5JywKLSAgICAgICAgICAgICAgICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScgXQotCi1fREFZU19JTl9NT05USCA9IFsgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSBdCi0KLV9EQVlTX0JFRk9SRV9NT05USCA9IFtdCi1kYm0gPSAwCi1mb3IgZGltIGluIF9EQVlTX0lOX01PTlRIOgotICAgIF9EQVlTX0JFRk9SRV9NT05USC5hcHBlbmQoZGJtKQotICAgIGRibSA9IGRibSArIGRpbQotZGVsIGRibSwgZGltCi0KLV9JTlRfVFlQRVMgPSB0eXBlKDEpLCB0eXBlKDEpCi0KLWRlZiBfaXNfbGVhcCh5ZWFyKTogICAgICAgICAgICMgMSBpZiBsZWFwIHllYXIsIGVsc2UgMAotICAgIGlmIHllYXIgJSA0ICE9IDA6IHJldHVybiAwCi0gICAgaWYgeWVhciAlIDQwMCA9PSAwOiByZXR1cm4gMQotICAgIHJldHVybiB5ZWFyICUgMTAwICE9IDAKLQotZGVmIF9kYXlzX2luX3llYXIoeWVhcik6ICAgICAgIyBudW1iZXIgb2YgZGF5cyBpbiB5ZWFyCi0gICAgcmV0dXJuIDM2NSArIF9pc19sZWFwKHllYXIpCi0KLWRlZiBfZGF5c19iZWZvcmVfeWVhcih5ZWFyKTogICMgbnVtYmVyIG9mIGRheXMgYmVmb3JlIHllYXIKLSAgICByZXR1cm4geWVhciozNjUgKyAoeWVhciszKS8vNCAtICh5ZWFyKzk5KS8vMTAwICsgKHllYXIrMzk5KS8vNDAwCi0KLWRlZiBfZGF5c19pbl9tb250aChtb250aCwgeWVhcik6ICAgICAgIyBudW1iZXIgb2YgZGF5cyBpbiBtb250aCBvZiB5ZWFyCi0gICAgaWYgbW9udGggPT0gMiBhbmQgX2lzX2xlYXAoeWVhcik6IHJldHVybiAyOQotICAgIHJldHVybiBfREFZU19JTl9NT05USFttb250aC0xXQotCi1kZWYgX2RheXNfYmVmb3JlX21vbnRoKG1vbnRoLCB5ZWFyKTogICMgbnVtYmVyIG9mIGRheXMgaW4geWVhciBiZWZvcmUgbW9udGgKLSAgICByZXR1cm4gX0RBWVNfQkVGT1JFX01PTlRIW21vbnRoLTFdICsgKG1vbnRoID4gMiBhbmQgX2lzX2xlYXAoeWVhcikpCi0KLWRlZiBfZGF0ZTJudW0oZGF0ZSk6ICAgICAgICAgICMgY29tcHV0ZSBvcmRpbmFsIG9mIGRhdGUubW9udGgsZGF5LHllYXIKLSAgICByZXR1cm4gX2RheXNfYmVmb3JlX3llYXIoZGF0ZS55ZWFyKSArIFwKLSAgICAgICAgICAgX2RheXNfYmVmb3JlX21vbnRoKGRhdGUubW9udGgsIGRhdGUueWVhcikgKyBcCi0gICAgICAgICAgIGRhdGUuZGF5Ci0KLV9ESTQwMFkgPSBfZGF5c19iZWZvcmVfeWVhcig0MDApICAgICAgIyBudW1iZXIgb2YgZGF5cyBpbiA0MDAgeWVhcnMKLQotZGVmIF9udW0yZGF0ZShuKTogICAgICAgICAgICAgIyByZXR1cm4gZGF0ZSB3aXRoIG9yZGluYWwgbgotICAgIGlmIHR5cGUobikgbm90IGluIF9JTlRfVFlQRVM6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXJndW1lbnQgbXVzdCBiZSBpbnRlZ2VyOiAlcicgJSB0eXBlKG4pKQotCi0gICAgYW5zID0gRGF0ZSgxLDEsMSkgICAjIGFyZ3VtZW50cyBpcnJlbGV2YW50OyBqdXN0IGdldHRpbmcgYSBEYXRlIG9iagotICAgIGRlbCBhbnMub3JkLCBhbnMubW9udGgsIGFucy5kYXksIGFucy55ZWFyICMgdW4taW5pdGlhbGl6ZSBpdAotICAgIGFucy5vcmQgPSBuCi0KLSAgICBuNDAwID0gKG4tMSkvL19ESTQwMFkgICAgICAgICAgICAgICAgIyAjIG9mIDQwMC15ZWFyIGJsb2NrcyBwcmVjZWRpbmcKLSAgICB5ZWFyLCBuID0gNDAwICogbjQwMCwgbiAtIF9ESTQwMFkgKiBuNDAwCi0gICAgbW9yZSA9IG4gLy8gMzY1Ci0gICAgZGJ5ID0gX2RheXNfYmVmb3JlX3llYXIobW9yZSkKLSAgICBpZiBkYnkgPj0gbjoKLSAgICAgICAgbW9yZSA9IG1vcmUgLSAxCi0gICAgICAgIGRieSA9IGRieSAtIF9kYXlzX2luX3llYXIobW9yZSkKLSAgICB5ZWFyLCBuID0geWVhciArIG1vcmUsIGludChuIC0gZGJ5KQotCi0gICAgdHJ5OiB5ZWFyID0gaW50KHllYXIpICAgICAgICAgICAgICAgIyBjaG9wIHRvIGludCwgaWYgaXQgZml0cwotICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcik6IHBhc3MKLQotICAgIG1vbnRoID0gbWluKG4vLzI5ICsgMSwgMTIpCi0gICAgZGJtID0gX2RheXNfYmVmb3JlX21vbnRoKG1vbnRoLCB5ZWFyKQotICAgIGlmIGRibSA+PSBuOgotICAgICAgICBtb250aCA9IG1vbnRoIC0gMQotICAgICAgICBkYm0gPSBkYm0gLSBfZGF5c19pbl9tb250aChtb250aCwgeWVhcikKLQotICAgIGFucy5tb250aCwgYW5zLmRheSwgYW5zLnllYXIgPSBtb250aCwgbi1kYm0sIHllYXIKLSAgICByZXR1cm4gYW5zCi0KLWRlZiBfbnVtMmRheShuKTogICAgICAjIHJldHVybiB3ZWVrZGF5IG5hbWUgb2YgZGF5IHdpdGggb3JkaW5hbCBuCi0gICAgcmV0dXJuIF9EQVlfTkFNRVNbIGludChuICUgNykgXQotCi0KLWNsYXNzIERhdGU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vbnRoLCBkYXksIHllYXIpOgotICAgICAgICBpZiBub3QgMSA8PSBtb250aCA8PSAxMjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ21vbnRoIG11c3QgYmUgaW4gMS4uMTI6ICVyJyAlIChtb250aCwpKQotICAgICAgICBkaW0gPSBfZGF5c19pbl9tb250aChtb250aCwgeWVhcikKLSAgICAgICAgaWYgbm90IDEgPD0gZGF5IDw9IGRpbToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2RheSBtdXN0IGJlIGluIDEuLiVyOiAlcicgJSAoZGltLCBkYXkpKQotICAgICAgICBzZWxmLm1vbnRoLCBzZWxmLmRheSwgc2VsZi55ZWFyID0gbW9udGgsIGRheSwgeWVhcgotICAgICAgICBzZWxmLm9yZCA9IF9kYXRlMm51bShzZWxmKQotCi0gICAgIyBkb24ndCBhbGxvdyBzZXR0aW5nIGV4aXN0aW5nIGF0dHJpYnV0ZXMKLSAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYuX19kaWN0X186Ci0gICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigncmVhZC1vbmx5IGF0dHJpYnV0ZSAnICsgbmFtZSkKLSAgICAgICAgc2VsZi5fX2RpY3RfX1tuYW1lXSA9IHZhbHVlCi0KLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBjbXAoc2VsZi5vcmQsIG90aGVyLm9yZCkKLQotICAgICMgZGVmaW5lIGEgaGFzaCBmdW5jdGlvbiBzbyBkYXRlcyBjYW4gYmUgdXNlZCBhcyBkaWN0aW9uYXJ5IGtleXMKLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKHNlbGYub3JkKQotCi0gICAgIyBwcmludCBhcywgZS5nLiwgTW9uIDE2IEF1ZyAxOTkzCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJyUuM3MgJTJkICUuM3MgJXInICUgKAotICAgICAgICAgICAgICBzZWxmLndlZWtkYXkoKSwKLSAgICAgICAgICAgICAgc2VsZi5kYXksCi0gICAgICAgICAgICAgIF9NT05USF9OQU1FU1tzZWxmLm1vbnRoLTFdLAotICAgICAgICAgICAgICBzZWxmLnllYXIpCi0KLSAgICAjIFB5dGhvbiAxLjEgY29lcmNlcyBuZWl0aGVyIGludCtkYXRlIG5vciBkYXRlK2ludAotICAgIGRlZiBfX2FkZF9fKHNlbGYsIG4pOgotICAgICAgICBpZiB0eXBlKG4pIG5vdCBpbiBfSU5UX1RZUEVTOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdjYW5cJ3QgYWRkICVyIHRvIGRhdGUnICUgdHlwZShuKSkKLSAgICAgICAgcmV0dXJuIF9udW0yZGF0ZShzZWxmLm9yZCArIG4pCi0gICAgX19yYWRkX18gPSBfX2FkZF9fICMgaGFuZGxlIGludCtkYXRlCi0KLSAgICAjIFB5dGhvbiAxLjEgY29lcmNlcyBuZWl0aGVyIGRhdGUtaW50IG5vciBkYXRlLWRhdGUKLSAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIHR5cGUob3RoZXIpIGluIF9JTlRfVFlQRVM6ICAgICAgICAgICAjIGRhdGUtaW50Ci0gICAgICAgICAgICByZXR1cm4gX251bTJkYXRlKHNlbGYub3JkIC0gb3RoZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5vcmQgLSBvdGhlci5vcmQgICAgICAgICAjIGRhdGUtZGF0ZQotCi0gICAgIyBjb21wbGFpbiBhYm91dCBpbnQtZGF0ZQotICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2FuXCd0IHN1YnRyYWN0IGRhdGUgZnJvbSBpbnRlZ2VyJykKLQotICAgIGRlZiB3ZWVrZGF5KHNlbGYpOgotICAgICAgICByZXR1cm4gX251bTJkYXkoc2VsZi5vcmQpCi0KLWRlZiB0b2RheSgpOgotICAgIGltcG9ydCB0aW1lCi0gICAgbG9jYWwgPSB0aW1lLmxvY2FsdGltZSh0aW1lLnRpbWUoKSkKLSAgICByZXR1cm4gRGF0ZShsb2NhbFsxXSwgbG9jYWxbMl0sIGxvY2FsWzBdKQotCi1jbGFzcyBEYXRlVGVzdEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1kZWYgdGVzdChmaXJzdHllYXIsIGxhc3R5ZWFyKToKLSAgICBhID0gRGF0ZSg5LDMwLDE5MTMpCi0gICAgYiA9IERhdGUoOSwzMCwxOTE0KQotICAgIGlmIHJlcHIoYSkgIT0gJ1R1ZSAzMCBTZXAgMTkxMyc6Ci0gICAgICAgIHJhaXNlIERhdGVUZXN0RXJyb3IoJ19fcmVwcl9fIGZhaWx1cmUnKQotICAgIGlmIChub3QgYSA8IGIpIG9yIGEgPT0gYiBvciBhID4gYiBvciBiICE9IGI6Ci0gICAgICAgIHJhaXNlIERhdGVUZXN0RXJyb3IoJ19fY21wX18gZmFpbHVyZScpCi0gICAgaWYgYSszNjUgIT0gYiBvciAzNjUrYSAhPSBiOgotICAgICAgICByYWlzZSBEYXRlVGVzdEVycm9yKCdfX2FkZF9fIGZhaWx1cmUnKQotICAgIGlmIGItYSAhPSAzNjUgb3IgYi0zNjUgIT0gYToKLSAgICAgICAgcmFpc2UgRGF0ZVRlc3RFcnJvcignX19zdWJfXyBmYWlsdXJlJykKLSAgICB0cnk6Ci0gICAgICAgIHggPSAxIC0gYQotICAgICAgICByYWlzZSBEYXRlVGVzdEVycm9yKCdpbnQtZGF0ZSBzaG91bGQgaGF2ZSBmYWlsZWQnKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICB0cnk6Ci0gICAgICAgIHggPSBhICsgYgotICAgICAgICByYWlzZSBEYXRlVGVzdEVycm9yKCdkYXRlK2RhdGUgc2hvdWxkIGhhdmUgZmFpbGVkJykKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgaWYgYS53ZWVrZGF5KCkgIT0gJ1R1ZXNkYXknOgotICAgICAgICByYWlzZSBEYXRlVGVzdEVycm9yKCd3ZWVrZGF5KCkgZmFpbHVyZScpCi0gICAgaWYgbWF4KGEsYikgaXMgbm90IGIgb3IgbWluKGEsYikgaXMgbm90IGE6Ci0gICAgICAgIHJhaXNlIERhdGVUZXN0RXJyb3IoJ21pbi9tYXggZmFpbHVyZScpCi0gICAgZCA9IHthLTE6YiwgYjphKzF9Ci0gICAgaWYgZFtiLTM2Nl0gIT0gYiBvciBkW2ErKGItYSldICE9IERhdGUoMTAsMSwxOTEzKToKLSAgICAgICAgcmFpc2UgRGF0ZVRlc3RFcnJvcignZGljdGlvbmFyeSBmYWlsdXJlJykKLQotICAgICMgdmVyaWZ5IGRhdGU8LT5udW1iZXIgY29udmVyc2lvbnMgZm9yIGZpcnN0IGFuZCBsYXN0IGRheXMgZm9yCi0gICAgIyBhbGwgeWVhcnMgaW4gZmlyc3R5ZWFyIC4uIGxhc3R5ZWFyCi0KLSAgICBsb3JkID0gX2RheXNfYmVmb3JlX3llYXIoZmlyc3R5ZWFyKQotICAgIHkgPSBmaXJzdHllYXIKLSAgICB3aGlsZSB5IDw9IGxhc3R5ZWFyOgotICAgICAgICBmb3JkID0gbG9yZCArIDEKLSAgICAgICAgbG9yZCA9IGZvcmQgKyBfZGF5c19pbl95ZWFyKHkpIC0gMQotICAgICAgICBmZCwgbGQgPSBEYXRlKDEsMSx5KSwgRGF0ZSgxMiwzMSx5KQotICAgICAgICBpZiAoZmQub3JkLGxkLm9yZCkgIT0gKGZvcmQsbG9yZCk6Ci0gICAgICAgICAgICByYWlzZSBEYXRlVGVzdEVycm9yKCdkYXRlLT5udW0gZmFpbGVkJywgeSkKLSAgICAgICAgZmQsIGxkID0gX251bTJkYXRlKGZvcmQpLCBfbnVtMmRhdGUobG9yZCkKLSAgICAgICAgaWYgKDEsMSx5LDEyLDMxLHkpICE9IFwKLSAgICAgICAgICAgKGZkLm1vbnRoLGZkLmRheSxmZC55ZWFyLGxkLm1vbnRoLGxkLmRheSxsZC55ZWFyKToKLSAgICAgICAgICAgIHJhaXNlIERhdGVUZXN0RXJyb3IoJ251bS0+ZGF0ZSBmYWlsZWQnLCB5KQotICAgICAgICB5ID0geSArIDEKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KDE4NTAsIDIxNTApCmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvRGJtLnB5IGIvRGVtby9jbGFzc2VzL0RibS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjkzMWU5My4uMDAwMDAwMAotLS0gYS9EZW1vL2NsYXNzZXMvRGJtLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotIyBBIHdyYXBwZXIgYXJvdW5kIHRoZSAob3B0aW9uYWwpIGJ1aWx0LWluIGNsYXNzIGRibSwgc3VwcG9ydGluZyBrZXlzCi0jIGFuZCB2YWx1ZXMgb2YgYWxtb3N0IGFueSB0eXBlIGluc3RlYWQgb2YganVzdCBzdHJpbmcuCi0jIChBY3R1YWxseSwgdGhpcyB3b3JrcyBvbmx5IGZvciBrZXlzIGFuZCB2YWx1ZXMgdGhhdCBjYW4gYmUgcmVhZCBiYWNrCi0jIGNvcnJlY3RseSBhZnRlciBiZWluZyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcuKQotCi0KLWNsYXNzIERibToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZSwgcGVybSk6Ci0gICAgICAgIGltcG9ydCBkYm0ubmRibQotICAgICAgICBzZWxmLmRiID0gZGJtLm5kYm0ub3BlbihmaWxlbmFtZSwgbW9kZSwgcGVybSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcyA9ICcnCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6Ci0gICAgICAgICAgICB0ID0gcmVwcihrZXkpICsgJzogJyArIHJlcHIoc2VsZltrZXldKQotICAgICAgICAgICAgaWYgczogdCA9ICcsICcgKyB0Ci0gICAgICAgICAgICBzID0gcyArIHQKLSAgICAgICAgcmV0dXJuICd7JyArIHMgKyAnfScKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuZGIpCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIGV2YWwoc2VsZi5kYltyZXByKGtleSldKQotCi0gICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgotICAgICAgICBzZWxmLmRiW3JlcHIoa2V5KV0gPSByZXByKHZhbHVlKQotCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIGRlbCBzZWxmLmRiW3JlcHIoa2V5KV0KLQotICAgIGRlZiBrZXlzKHNlbGYpOgotICAgICAgICByZXMgPSBbXQotICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGIua2V5cygpOgotICAgICAgICAgICAgcmVzLmFwcGVuZChldmFsKGtleSkpCi0gICAgICAgIHJldHVybiByZXMKLQotICAgIGRlZiBoYXNfa2V5KHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiByZXByKGtleSkgaW4gc2VsZi5kYgotCi0KLWRlZiB0ZXN0KCk6Ci0gICAgZCA9IERibSgnQGRibScsICdydycsIDBvNjAwKQotICAgIHByaW50KGQpCi0gICAgd2hpbGUgMToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAga2V5ID0gZXZhbChpbnB1dCgna2V5OiAnKSkKLSAgICAgICAgICAgIGlmIGtleSBpbiBkOgotICAgICAgICAgICAgICAgIHZhbHVlID0gZFtrZXldCi0gICAgICAgICAgICAgICAgcHJpbnQoJ2N1cnJlbnRseTonLCB2YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gZXZhbChpbnB1dCgndmFsdWU6ICcpKQotICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkZWwgZFtrZXldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgIHByaW50KCcnKQotICAgICAgICAgICAgcHJpbnQoZCkKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgcHJpbnQoJ1tlb2ZdJykKLSAgICAgICAgICAgIGJyZWFrCi0gICAgcHJpbnQoZCkKLQotCi10ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9SRUFETUUgYi9EZW1vL2NsYXNzZXMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWJjMjg5Li4wMDAwMDAwCi0tLSBhL0RlbW8vY2xhc3Nlcy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1FeGFtcGxlcyBvZiBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHNwZWNpYWwgb3BlcmF0b3JzIChzZWUgcmVmZXJlbmNlIG1hbnVhbCk6Ci0KLUNvbXBsZXgucHkJQ29tcGxleCBudW1iZXJzCi1EYXRlcy5weQlEYXRlIG1hbmlwdWxhdGlvbiBwYWNrYWdlIGJ5IFRpbSBQZXRlcnMKLURibS5weQkJV3JhcHBlciBhcm91bmQgYnVpbHQtaW4gZGJtLCBzdXBwb3J0aW5nCWFyYml0cmFyeSB2YWx1ZXMKLVJhbmdlLnB5CUV4YW1wbGUgb2YgYSBnZW5lcmF0b3I6IHJlLWltcGxlbWVudCBidWlsdC1pbiByYW5nZSgpCi1SZXYucHkJCVlpZWxkIHRoZSByZXZlcnNlIG9mIGEgc2VxdWVuY2UKLVZlYy5weQkJQSBzaW1wbGUgdmVjdG9yIGNsYXNzCi1iaXR2ZWMucHkJQSBiaXQtdmVjdG9yIGNsYXNzIGJ5IEphbi1IZWluIEJcInVocm1hbgotCi0oRm9yIHN0cmFpZ2h0Zm9yd2FyZCBleGFtcGxlcyBvZiBiYXNpYyBjbGFzcyBmZWF0dXJlcywgc3VjaCBhcyB1c2Ugb2YKLW1ldGhvZHMgYW5kIGluaGVyaXRhbmNlLCBzZWUgdGhlIGxpYnJhcnkgY29kZS4pCmRpZmYgLS1naXQgYS9EZW1vL2NsYXNzZXMvUmFuZ2UucHkgYi9EZW1vL2NsYXNzZXMvUmFuZ2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGEwY2VmNzQuLjAwMDAwMDAKLS0tIGEvRGVtby9jbGFzc2VzL1JhbmdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotIiIiRXhhbXBsZSBvZiBhIGdlbmVyYXRvcjogcmUtaW1wbGVtZW50IHRoZSBidWlsdC1pbiByYW5nZSBmdW5jdGlvbgotd2l0aG91dCBhY3R1YWxseSBjb25zdHJ1Y3RpbmcgdGhlIGxpc3Qgb2YgdmFsdWVzLgotCi1PbGRTdHlsZVJhbmdlIGlzIGNvZGVkIGluIHRoZSB3YXkgcmVxdWlyZWQgdG8gd29yayBpbiBhICdmb3InIGxvb3AgYmVmb3JlCi1pdGVyYXRvcnMgd2VyZSBpbnRyb2R1Y2VkIGludG8gdGhlIGxhbmd1YWdlOyB1c2luZyBfX2dldGl0ZW1fXyBhbmQgX19sZW5fXyAuCi0KLSIiIgotZGVmIGhhbmRsZWFyZ3MoYXJnbGlzdCk6Ci0gICAgIiIiVGFrZSBsaXN0IG9mIGFyZ3VtZW50cyBhbmQgZXh0cmFjdC9jcmVhdGUgcHJvcGVyIHN0YXJ0LCBzdG9wLCBhbmQgc3RlcAotICAgIHZhbHVlcyBhbmQgcmV0dXJuIGluIGEgdHVwbGUiIiIKLSAgICB0cnk6Ci0gICAgICAgIGlmIGxlbihhcmdsaXN0KSA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIDAsIGludChhcmdsaXN0WzBdKSwgMQotICAgICAgICBlbGlmIGxlbihhcmdsaXN0KSA9PSAyOgotICAgICAgICAgICAgcmV0dXJuIGludChhcmdsaXN0WzBdKSwgaW50KGFyZ2xpc3RbMV0pLCAxCi0gICAgICAgIGVsaWYgbGVuKGFyZ2xpc3QpID09IDM6Ci0gICAgICAgICAgICBpZiBhcmdsaXN0WzJdID09IDA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RlcCBhcmd1bWVudCBtdXN0IG5vdCBiZSB6ZXJvIikKLSAgICAgICAgICAgIHJldHVybiB0dXBsZShpbnQoeCkgZm9yIHggaW4gYXJnbGlzdCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmFuZ2UoKSBhY2NlcHRzIDEtMyBhcmd1bWVudHMsIGdpdmVuIiwgbGVuKGFyZ2xpc3QpKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmFuZ2UoKSBhcmd1bWVudHMgbXVzdCBiZSBudW1iZXJzIG9yIHN0cmluZ3MgIgotICAgICAgICAicmVwcmVzZW50aW5nIG51bWJlcnMiKQotCi1kZWYgZ2VucmFuZ2UoKmEpOgotICAgICIiIkZ1bmN0aW9uIHRvIGltcGxlbWVudCAncmFuZ2UnIGFzIGEgZ2VuZXJhdG9yIiIiCi0gICAgc3RhcnQsIHN0b3AsIHN0ZXAgPSBoYW5kbGVhcmdzKGEpCi0gICAgdmFsdWUgPSBzdGFydAotICAgIHdoaWxlIHZhbHVlIDwgc3RvcDoKLSAgICAgICAgeWllbGQgdmFsdWUKLSAgICAgICAgdmFsdWUgKz0gc3RlcAotCi1jbGFzcyBvbGRyYW5nZToKLSAgICAiIiJDbGFzcyBpbXBsZW1lbnRpbmcgYSByYW5nZSBvYmplY3QuCi0gICAgVG8gdGhlIHVzZXIgdGhlIGluc3RhbmNlcyBmZWVsIGxpa2UgaW1tdXRhYmxlIHNlcXVlbmNlcwotICAgIChhbmQgeW91IGNhbid0IGNvbmNhdGVuYXRlIG9yIHNsaWNlIHRoZW0pCi0KLSAgICBEb25lIHVzaW5nIHRoZSBvbGQgd2F5IChwcmUtaXRlcmF0b3JzOyBfX2xlbl9fIGFuZCBfX2dldGl0ZW1fXykgdG8gaGF2ZSBhbgotICAgIG9iamVjdCBiZSB1c2VkIGJ5IGEgJ2ZvcicgbG9vcC4KLQotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphKToKLSAgICAgICAgIiIiIEluaXRpYWxpemUgc3RhcnQsIHN0b3AsIGFuZCBzdGVwIHZhbHVlcyBhbG9uZyB3aXRoIGNhbGN1bGF0aW5nIHRoZQotICAgICAgICBudWJtZXIgb2YgdmFsdWVzICh3aGF0IF9fbGVuX18gd2lsbCByZXR1cm4pIGluIHRoZSByYW5nZSIiIgotICAgICAgICBzZWxmLnN0YXJ0LCBzZWxmLnN0b3AsIHNlbGYuc3RlcCA9IGhhbmRsZWFyZ3MoYSkKLSAgICAgICAgc2VsZi5sZW4gPSBtYXgoMCwgKHNlbGYuc3RvcCAtIHNlbGYuc3RhcnQpIC8vIHNlbGYuc3RlcCkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiaW1wbGVtZW50IHJlcHIoeCkgd2hpY2ggaXMgYWxzbyB1c2VkIGJ5IHByaW50IiIiCi0gICAgICAgIHJldHVybiAncmFuZ2UoJXIsICVyLCAlciknICUgKHNlbGYuc3RhcnQsIHNlbGYuc3RvcCwgc2VsZi5zdGVwKQotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgICIiImltcGxlbWVudCBsZW4oeCkiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYubGVuCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6Ci0gICAgICAgICIiImltcGxlbWVudCB4W2ldIiIiCi0gICAgICAgIGlmIDAgPD0gaSA8PSBzZWxmLmxlbjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnN0YXJ0ICsgc2VsZi5zdGVwICogaQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcigncmFuZ2VbaV0gaW5kZXggb3V0IG9mIHJhbmdlJykKLQotCi1kZWYgdGVzdCgpOgotICAgIGltcG9ydCB0aW1lLCBidWlsdGlucwotICAgICNKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrCi0gICAgY29ycmVjdF9yZXN1bHQgPSBidWlsdGlucy5yYW5nZSg1LCAxMDAsIDMpCi0gICAgb2xkcmFuZ2VfcmVzdWx0ID0gbGlzdChvbGRyYW5nZSg1LCAxMDAsIDMpKQotICAgIGdlbnJhbmdlX3Jlc3VsdCA9IGxpc3QoZ2VucmFuZ2UoNSwgMTAwLCAzKSkKLSAgICBpZiBnZW5yYW5nZV9yZXN1bHQgIT0gY29ycmVjdF9yZXN1bHQgb3Igb2xkcmFuZ2VfcmVzdWx0ICE9IGNvcnJlY3RfcmVzdWx0OgotICAgICAgICByYWlzZSBFeGNlcHRpb24oImVycm9yIGluIGltcGxlbWVudGF0aW9uOlxuY29ycmVjdCAgID0gJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlxub2xkLXN0eWxlID0gJXNcbmdlbmVyYXRvciA9ICVzIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGNvcnJlY3RfcmVzdWx0LCBvbGRyYW5nZV9yZXN1bHQsIGdlbnJhbmdlX3Jlc3VsdCkpCi0gICAgcHJpbnQoIlRpbWluZ3MgZm9yIHJhbmdlKDEwMDApOiIpCi0gICAgdDEgPSB0aW1lLnRpbWUoKQotICAgIGZvciBpIGluIG9sZHJhbmdlKDEwMDApOgotICAgICAgICBwYXNzCi0gICAgdDIgPSB0aW1lLnRpbWUoKQotICAgIGZvciBpIGluIGdlbnJhbmdlKDEwMDApOgotICAgICAgICBwYXNzCi0gICAgdDMgPSB0aW1lLnRpbWUoKQotICAgIGZvciBpIGluIGJ1aWx0aW5zLnJhbmdlKDEwMDApOgotICAgICAgICBwYXNzCi0gICAgdDQgPSB0aW1lLnRpbWUoKQotICAgIHByaW50KHQyLXQxLCAnc2VjIChvbGQtc3R5bGUgY2xhc3MpJykKLSAgICBwcmludCh0My10MiwgJ3NlYyAoZ2VuZXJhdG9yKScpCi0gICAgcHJpbnQodDQtdDMsICdzZWMgKGJ1aWx0LWluKScpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9SZXYucHkgYi9EZW1vL2NsYXNzZXMvUmV2LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3ZmQ3OGUwLi4wMDAwMDAwCi0tLSBhL0RlbW8vY2xhc3Nlcy9SZXYucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0nJycKLUEgY2xhc3Mgd2hpY2ggcHJlc2VudHMgdGhlIHJldmVyc2Ugb2YgYSBzZXF1ZW5jZSB3aXRob3V0IGR1cGxpY2F0aW5nIGl0LgotRnJvbTogIlN0ZXZlbiBELiBNYWpld3NraSIgPHNkbTdnQGVsdmlzLm1lZC52aXJnaW5pYS5lZHU+Ci0KLUl0IHdvcmtzIG9uIG11dGFibGUgb3IgaW5tdXRhYmxlIHNlcXVlbmNlcy4KLQotPj4+IGNoYXJzID0gbGlzdChSZXYoJ0hlbGxvIFdvcmxkIScpKQotPj4+IHByaW50ICcnLmpvaW4oY2hhcnMpCi0hZGxyb1cgb2xsZUgKLQotVGhlIC5mb3J3IGlzIHNvIHlvdSBjYW4gdXNlIGFub255bW91cyBzZXF1ZW5jZXMgaW4gX19pbml0X18sIGFuZCBzdGlsbAota2VlcCBhIHJlZmVyZW5jZSB0aGUgZm9yd2FyZCBzZXF1ZW5jZS4gKQotSWYgeW91IGdpdmUgaXQgYSBub24tYW5vbnltb3VzIG11dGFibGUgc2VxdWVuY2UsIHRoZSByZXZlcnNlIHNlcXVlbmNlCi13aWxsIHRyYWNrIHRoZSB1cGRhdGVkIHZhbHVlcy4gKCBidXQgbm90IHJlYXNzaWdubWVudCEgLSBhbm90aGVyCi1nb29kIHJlYXNvbiB0byB1c2UgYW5vbnltb3VzIHZhbHVlcyBpbiBjcmVhdGluZyB0aGUgc2VxdWVuY2UgdG8gYXZvaWQKLWNvbmZ1c2lvbi4gTWF5YmUgaXQgc2hvdWxkIGJlIGNoYW5nZSB0byBjb3B5IGlucHV0IHNlcXVlbmNlIHRvIGJyZWFrCi10aGUgY29ubmVjdGlvbiBjb21wbGV0ZWx5ID8gKQotCi0+Pj4gbm5uID0gcmFuZ2UoMykKLT4+PiBybm4gPSBSZXYobm5uKQotPj4+IGZvciBuIGluIHJubjogcHJpbnQgbgotLi4uCi0yCi0xCi0wCi0+Pj4gZm9yIG4gaW4gcmFuZ2UoNCwgNik6IG5ubi5hcHBlbmQobikgICAjIHVwZGF0ZSBubm4KLS4uLgotPj4+IGZvciBuIGluIHJubjogcHJpbnQgbiAgICAgIyBwcmludHMgcmV2ZXJzZWQgdXBkYXRlZCB2YWx1ZXMKLS4uLgotNQotNAotMgotMQotMAotPj4+IG5ubiA9IG5ublsxOi0xXQotPj4+IG5ubgotWzEsIDIsIDRdCi0+Pj4gZm9yIG4gaW4gcm5uOiBwcmludCBuICAgICAjIHByaW50cyByZXZlcnNlZCB2YWx1ZXMgb2Ygb2xkIG5ubgotLi4uCi01Ci00Ci0yCi0xCi0wCi0KLSMKLT4+PiBXSCA9IFJldignSGVsbG8gV29ybGQhJykKLT4+PiBwcmludCBXSC5mb3J3LCBXSC5iYWNrCi1IZWxsbyBXb3JsZCEgIWRscm9XIG9sbGVICi0+Pj4gbm5uID0gUmV2KHJhbmdlKDEsIDEwKSkKLT4+PiBwcmludCBubm4uZm9ydwotWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldCi0+Pj4gcHJpbnQgbm5uLmJhY2sKLVs5LCA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxXQotCi0+Pj4gcnJyID0gUmV2KG5ubikKLT4+PiBycnIKLTwxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5PgotCi0nJycKLQotY2xhc3MgUmV2OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXEpOgotICAgICAgICBzZWxmLmZvcncgPSBzZXEKLSAgICAgICAgc2VsZi5iYWNrID0gc2VsZgotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5mb3J3KQotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGopOgotICAgICAgICByZXR1cm4gc2VsZi5mb3J3Wy0oaiArIDEpXQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBzZXEgPSBzZWxmLmZvcncKLSAgICAgICAgaWYgaXNpbnN0YW5jZShzZXEsIGxpc3QpOgotICAgICAgICAgICAgd3JhcCA9ICdbXScKLSAgICAgICAgICAgIHNlcCA9ICcsICcKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlcSwgdHVwbGUpOgotICAgICAgICAgICAgd3JhcCA9ICcoKScKLSAgICAgICAgICAgIHNlcCA9ICcsICcKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlcSwgc3RyKToKLSAgICAgICAgICAgIHdyYXAgPSAnJwotICAgICAgICAgICAgc2VwID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHdyYXAgPSAnPD4nCi0gICAgICAgICAgICBzZXAgPSAnLCAnCi0gICAgICAgIG91dHN0cnMgPSBbc3RyKGl0ZW0pIGZvciBpdGVtIGluIHNlbGYuYmFja10KLSAgICAgICAgcmV0dXJuIHdyYXBbOjFdICsgc2VwLmpvaW4ob3V0c3RycykgKyB3cmFwWy0xOl0KLQotZGVmIF90ZXN0KCk6Ci0gICAgaW1wb3J0IGRvY3Rlc3QsIFJldgotICAgIHJldHVybiBkb2N0ZXN0LnRlc3Rtb2QoUmV2KQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIF90ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vY2xhc3Nlcy9iaXR2ZWMucHkgYi9EZW1vL2NsYXNzZXMvYml0dmVjLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2MmIyNmNjLi4wMDAwMDAwCi0tLSBhL0RlbW8vY2xhc3Nlcy9iaXR2ZWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotIwotIyB0aGlzIGlzIGEgcmF0aGVyIHN0cmljdCBpbXBsZW1lbnRhdGlvbiBvZiBhIGJpdCB2ZWN0b3IgY2xhc3MKLSMgaXQgaXMgYWNjZXNzZWQgdGhlIHNhbWUgd2F5IGFzIGFuIGFycmF5IG9mIHB5dGhvbi1pbnRzLCBleGNlcHQKLSMgdGhlIHZhbHVlIG11c3QgYmUgMCBvciAxCi0jCi0KLWltcG9ydCBzeXM7IHJwcnQgPSBzeXMuc3RkZXJyLndyaXRlICNmb3IgZGVidWdnaW5nCi0KLWNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWRlZiBfY2hlY2tfdmFsdWUodmFsdWUpOgotICAgIGlmIHR5cGUodmFsdWUpICE9IHR5cGUoMCkgb3Igbm90IDAgPD0gdmFsdWUgPCAyOgotICAgICAgICByYWlzZSBlcnJvcignYml0dmVjKCkgaXRlbXMgbXVzdCBoYXZlIGludCB2YWx1ZSAwIG9yIDEnKQotCi0KLWltcG9ydCBtYXRoCi0KLWRlZiBfY29tcHV0ZV9sZW4ocGFyYW0pOgotICAgIG1hbnQsIGwgPSBtYXRoLmZyZXhwKGZsb2F0KHBhcmFtKSkKLSAgICBiaXRtYXNrID0gMSA8PCBsCi0gICAgaWYgYml0bWFzayA8PSBwYXJhbToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignKHBhcmFtLCBsKSA9ICVyJyAlICgocGFyYW0sIGwpLCkpCi0gICAgd2hpbGUgbDoKLSAgICAgICAgYml0bWFzayA9IGJpdG1hc2sgPj4gMQotICAgICAgICBpZiBwYXJhbSAmIGJpdG1hc2s6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBsID0gbCAtIDEKLSAgICByZXR1cm4gbAotCi0KLWRlZiBfY2hlY2tfa2V5KGxlbiwga2V5KToKLSAgICBpZiB0eXBlKGtleSkgIT0gdHlwZSgwKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzZXF1ZW5jZSBzdWJzY3JpcHQgbm90IGludCcpCi0gICAgaWYga2V5IDwgMDoKLSAgICAgICAga2V5ID0ga2V5ICsgbGVuCi0gICAgaWYgbm90IDAgPD0ga2V5IDwgbGVuOgotICAgICAgICByYWlzZSBJbmRleEVycm9yKCdsaXN0IGluZGV4IG91dCBvZiByYW5nZScpCi0gICAgcmV0dXJuIGtleQotCi1kZWYgX2NoZWNrX3NsaWNlKGxlbiwgaSwgaik6Ci0gICAgI3RoZSB0eXBlIGlzIG9rLCBQeXRob24gYWxyZWFkeSBjaGVja2VkIHRoYXQKLSAgICBpLCBqID0gbWF4KGksIDApLCBtaW4obGVuLCBqKQotICAgIGlmIGkgPiBqOgotICAgICAgICBpID0gagotICAgIHJldHVybiBpLCBqCi0KLQotY2xhc3MgQml0VmVjOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICpwYXJhbXMpOgotICAgICAgICBzZWxmLl9kYXRhID0gMAotICAgICAgICBzZWxmLl9sZW4gPSAwCi0gICAgICAgIGlmIG5vdCBsZW4ocGFyYW1zKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxpZiBsZW4ocGFyYW1zKSA9PSAxOgotICAgICAgICAgICAgcGFyYW0sID0gcGFyYW1zCi0gICAgICAgICAgICBpZiB0eXBlKHBhcmFtKSA9PSB0eXBlKFtdKToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IDAKLSAgICAgICAgICAgICAgICBiaXRfbWFzayA9IDEKLSAgICAgICAgICAgICAgICBmb3IgaXRlbSBpbiBwYXJhbToKLSAgICAgICAgICAgICAgICAgICAgIyBzdHJpY3QgY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgI19jaGVja192YWx1ZShpdGVtKQotICAgICAgICAgICAgICAgICAgICBpZiBpdGVtOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSB8IGJpdF9tYXNrCi0gICAgICAgICAgICAgICAgICAgIGJpdF9tYXNrID0gYml0X21hc2sgPDwgMQotICAgICAgICAgICAgICAgIHNlbGYuX2RhdGEgPSB2YWx1ZQotICAgICAgICAgICAgICAgIHNlbGYuX2xlbiA9IGxlbihwYXJhbSkKLSAgICAgICAgICAgIGVsaWYgdHlwZShwYXJhbSkgPT0gdHlwZSgwKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbSA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCdiaXR2ZWMoKSBjYW5cJ3QgaGFuZGxlIG5lZ2F0aXZlIGxvbmdzJykKLSAgICAgICAgICAgICAgICBzZWxmLl9kYXRhID0gcGFyYW0KLSAgICAgICAgICAgICAgICBzZWxmLl9sZW4gPSBfY29tcHV0ZV9sZW4ocGFyYW0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCdiaXR2ZWMoKSByZXF1aXJlcyBhcnJheSBvciBsb25nIHBhcmFtZXRlcicpCi0gICAgICAgIGVsaWYgbGVuKHBhcmFtcykgPT0gMjoKLSAgICAgICAgICAgIHBhcmFtLCBsZW5ndGggPSBwYXJhbXMKLSAgICAgICAgICAgIGlmIHR5cGUocGFyYW0pID09IHR5cGUoMCk6Ci0gICAgICAgICAgICAgICAgaWYgcGFyYW0gPCAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcignY2FuXCd0IGhhbmRsZSBuZWdhdGl2ZSBsb25ncycpCi0gICAgICAgICAgICAgICAgc2VsZi5fZGF0YSA9IHBhcmFtCi0gICAgICAgICAgICAgICAgaWYgdHlwZShsZW5ndGgpICE9IHR5cGUoMCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCdiaXR2ZWMoKVwncyAybmQgcGFyYW1ldGVyIG11c3QgYmUgaW50JykKLSAgICAgICAgICAgICAgICBjb21wdXRlZF9sZW5ndGggPSBfY29tcHV0ZV9sZW4ocGFyYW0pCi0gICAgICAgICAgICAgICAgaWYgY29tcHV0ZWRfbGVuZ3RoID4gbGVuZ3RoOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnd2FybmluZzogYml0dmVjKCkgdmFsdWUgaXMgbG9uZ2VyIHRoYW4gdGhlIGxlbmd0aCBpbmRpY2F0ZXMsIHRydW5jYXRpbmcgdmFsdWUnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXRhID0gc2VsZi5fZGF0YSAmIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoMSA8PCBsZW5ndGgpIC0gMSkKLSAgICAgICAgICAgICAgICBzZWxmLl9sZW4gPSBsZW5ndGgKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ2JpdHZlYygpIHJlcXVpcmVzIGFycmF5IG9yIGxvbmcgcGFyYW1ldGVyJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIGVycm9yKCdiaXR2ZWMoKSByZXF1aXJlcyAwIC0tIDIgcGFyYW1ldGVyKHMpJykKLQotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBpdGVtKToKLSAgICAgICAgI19jaGVja192YWx1ZShpdGVtKQotICAgICAgICAjc2VsZltzZWxmLl9sZW46c2VsZi5fbGVuXSA9IFtpdGVtXQotICAgICAgICBzZWxmW3NlbGYuX2xlbjpzZWxmLl9sZW5dID0gXAotICAgICAgICAgICAgICAgICAgQml0VmVjKGludChub3Qgbm90IGl0ZW0pLCAxKQotCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAjX2NoZWNrX3ZhbHVlKHZhbHVlKQotICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9kYXRhCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gKH5zZWxmKS5fZGF0YQotICAgICAgICBjb3VudCA9IDAKLSAgICAgICAgd2hpbGUgZGF0YToKLSAgICAgICAgICAgIGRhdGEsIGNvdW50ID0gZGF0YSA+PiAxLCBjb3VudCArIChkYXRhICYgMSAhPSAwKQotICAgICAgICByZXR1cm4gY291bnQKLQotCi0gICAgZGVmIGluZGV4KHNlbGYsIHZhbHVlKToKLSAgICAgICAgI19jaGVja192YWx1ZSh2YWx1ZSk6Ci0gICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSAofnNlbGYpLl9kYXRhCi0gICAgICAgIGluZGV4ID0gMAotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xpc3QuaW5kZXgoeCk6IHggbm90IGluIGxpc3QnKQotICAgICAgICB3aGlsZSBub3QgKGRhdGEgJiAxKToKLSAgICAgICAgICAgIGRhdGEsIGluZGV4ID0gZGF0YSA+PiAxLCBpbmRleCArIDEKLSAgICAgICAgcmV0dXJuIGluZGV4Ci0KLQotICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIGl0ZW0pOgotICAgICAgICAjX2NoZWNrX3ZhbHVlKGl0ZW0pCi0gICAgICAgICNzZWxmW2luZGV4OmluZGV4XSA9IFtpdGVtXQotICAgICAgICBzZWxmW2luZGV4OmluZGV4XSA9IEJpdFZlYyhpbnQobm90IG5vdCBpdGVtKSwgMSkKLQotCi0gICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0KLSAgICBkZWYgcmV2ZXJzZShzZWxmKToKLSAgICAgICAgI291Y2gsIHRoaXMgb25lIGlzIGV4cGVuc2l2ZSEKLSAgICAgICAgI2ZvciBpIGluIHNlbGYuX2xlbj4+MTogc2VsZltpXSwgc2VsZltsLWldID0gc2VsZltsLWldLCBzZWxmW2ldCi0gICAgICAgIGRhdGEsIHJlc3VsdCA9IHNlbGYuX2RhdGEsIDAKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5fbGVuKToKLSAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCA8PCAoc2VsZi5fbGVuIC0gaSkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVzdWx0LCBkYXRhID0gKHJlc3VsdCA8PCAxKSB8IChkYXRhICYgMSksIGRhdGEgPj4gMQotICAgICAgICBzZWxmLl9kYXRhID0gcmVzdWx0Ci0KLQotICAgIGRlZiBzb3J0KHNlbGYpOgotICAgICAgICBjID0gc2VsZi5jb3VudCgxKQotICAgICAgICBzZWxmLl9kYXRhID0gKCgxIDw8IGMpIC0gMSkgPDwgKHNlbGYuX2xlbiAtIGMpCi0KLQotICAgIGRlZiBjb3B5KHNlbGYpOgotICAgICAgICByZXR1cm4gQml0VmVjKHNlbGYuX2RhdGEsIHNlbGYuX2xlbikKLQotCi0gICAgZGVmIHNlcShzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgZm9yIGkgaW4gc2VsZjoKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICMjcnBydCgnPGJpdHZlYyBjbGFzcyBpbnN0YW5jZSBvYmplY3Q+LicgKyAnX19yZXByX18oKVxuJykKLSAgICAgICAgcmV0dXJuICdiaXR2ZWMoJXIsICVyKScgJSAoc2VsZi5fZGF0YSwgc2VsZi5fbGVuKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIsICpyZXN0KToKLSAgICAgICAgI3JwcnQoJyVyLl9fY21wX18lclxuJyAlIChzZWxmLCAob3RoZXIsKSArIHJlc3QpKQotICAgICAgICBpZiB0eXBlKG90aGVyKSAhPSB0eXBlKHNlbGYpOgotICAgICAgICAgICAgb3RoZXIgPSBiaXR2ZWMob3RoZXIsICpyZXN0KQotICAgICAgICAjZXhwZW5zaXZlIHNvbHV0aW9uLi4uIHJlY3Vyc2l2ZSBiaW5hcnksIHdpdGggc2xpY2luZwotICAgICAgICBsZW5ndGggPSBzZWxmLl9sZW4KLSAgICAgICAgaWYgbGVuZ3RoID09IDAgb3Igb3RoZXIuX2xlbiA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIGNtcChsZW5ndGgsIG90aGVyLl9sZW4pCi0gICAgICAgIGlmIGxlbmd0aCAhPSBvdGhlci5fbGVuOgotICAgICAgICAgICAgbWluX2xlbmd0aCA9IG1pbihsZW5ndGgsIG90aGVyLl9sZW4pCi0gICAgICAgICAgICByZXR1cm4gY21wKHNlbGZbOm1pbl9sZW5ndGhdLCBvdGhlcls6bWluX2xlbmd0aF0pIG9yIFwKLSAgICAgICAgICAgICAgICAgICAgICBjbXAoc2VsZlttaW5fbGVuZ3RoOl0sIG90aGVyW21pbl9sZW5ndGg6XSkKLSAgICAgICAgI3RoZSBsZW5ndGhzIGFyZSB0aGUgc2FtZSBub3cuLi4KLSAgICAgICAgaWYgc2VsZi5fZGF0YSA9PSBvdGhlci5fZGF0YToKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIGxlbmd0aCA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIGNtcChzZWxmWzBdLCBvdGhlclswXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aCA+PiAxCi0gICAgICAgICAgICByZXR1cm4gY21wKHNlbGZbOmxlbmd0aF0sIG90aGVyWzpsZW5ndGhdKSBvciBcCi0gICAgICAgICAgICAgICAgICAgICAgY21wKHNlbGZbbGVuZ3RoOl0sIG90aGVyW2xlbmd0aDpdKQotCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgI3JwcnQoJyVyLl9fbGVuX18oKVxuJyAlIChzZWxmLCkpCi0gICAgICAgIHJldHVybiBzZWxmLl9sZW4KLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICAjcnBydCgnJXIuX19nZXRpdGVtX18oJXIpXG4nICUgKHNlbGYsIGtleSkpCi0gICAgICAgIGtleSA9IF9jaGVja19rZXkoc2VsZi5fbGVuLCBrZXkpCi0gICAgICAgIHJldHVybiBzZWxmLl9kYXRhICYgKDEgPDwga2V5KSAhPSAwCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6Ci0gICAgICAgICNycHJ0KCclci5fX3NldGl0ZW1fXyglciwgJXIpXG4nICUgKHNlbGYsIGtleSwgdmFsdWUpKQotICAgICAgICBrZXkgPSBfY2hlY2tfa2V5KHNlbGYuX2xlbiwga2V5KQotICAgICAgICAjX2NoZWNrX3ZhbHVlKHZhbHVlKQotICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgIHNlbGYuX2RhdGEgPSBzZWxmLl9kYXRhIHwgKDEgPDwga2V5KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fZGF0YSA9IHNlbGYuX2RhdGEgJiB+KDEgPDwga2V5KQotCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgICNycHJ0KCclci5fX2RlbGl0ZW1fXyglcilcbicgJSAoc2VsZiwga2V5KSkKLSAgICAgICAga2V5ID0gX2NoZWNrX2tleShzZWxmLl9sZW4sIGtleSkKLSAgICAgICAgI2VsIGNoZWFwbyBzb2x1dGlvbi4uLgotICAgICAgICBzZWxmLl9kYXRhID0gc2VsZls6a2V5XS5fZGF0YSB8IHNlbGZba2V5KzE6XS5fZGF0YSA+PiBrZXkKLSAgICAgICAgc2VsZi5fbGVuID0gc2VsZi5fbGVuIC0gMQotCi0gICAgZGVmIF9fZ2V0c2xpY2VfXyhzZWxmLCBpLCBqKToKLSAgICAgICAgI3JwcnQoJyVyLl9fZ2V0c2xpY2VfXyglciwgJXIpXG4nICUgKHNlbGYsIGksIGopKQotICAgICAgICBpLCBqID0gX2NoZWNrX3NsaWNlKHNlbGYuX2xlbiwgaSwgaikKLSAgICAgICAgaWYgaSA+PSBqOgotICAgICAgICAgICAgcmV0dXJuIEJpdFZlYygwLCAwKQotICAgICAgICBpZiBpOgotICAgICAgICAgICAgbmRhdGEgPSBzZWxmLl9kYXRhID4+IGkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5kYXRhID0gc2VsZi5fZGF0YQotICAgICAgICBubGVuZ3RoID0gaiAtIGkKLSAgICAgICAgaWYgaiAhPSBzZWxmLl9sZW46Ci0gICAgICAgICAgICAjd2UnbGwgaGF2ZSB0byBpbnZlbnQgZmFzdGVyIHZhcmlhbnRzIGhlcmUKLSAgICAgICAgICAgICNlLmcuIG1vZF8yZXhwCi0gICAgICAgICAgICBuZGF0YSA9IG5kYXRhICYgKCgxIDw8IG5sZW5ndGgpIC0gMSkKLSAgICAgICAgcmV0dXJuIEJpdFZlYyhuZGF0YSwgbmxlbmd0aCkKLQotICAgIGRlZiBfX3NldHNsaWNlX18oc2VsZiwgaSwgaiwgc2VxdWVuY2UsICpyZXN0KToKLSAgICAgICAgI3JwcnQoJyVzLl9fc2V0c2xpY2VfXyVyXG4nICUgKHNlbGYsIChpLCBqLCBzZXF1ZW5jZSkgKyByZXN0KSkKLSAgICAgICAgaSwgaiA9IF9jaGVja19zbGljZShzZWxmLl9sZW4sIGksIGopCi0gICAgICAgIGlmIHR5cGUoc2VxdWVuY2UpICE9IHR5cGUoc2VsZik6Ci0gICAgICAgICAgICBzZXF1ZW5jZSA9IGJpdHZlYyhzZXF1ZW5jZSwgKnJlc3QpCi0gICAgICAgICNzZXF1ZW5jZSBpcyBub3cgb2Ygb3VyIG93biB0eXBlCi0gICAgICAgIGxzX3BhcnQgPSBzZWxmWzppXQotICAgICAgICBtc19wYXJ0ID0gc2VsZltqOl0KLSAgICAgICAgc2VsZi5fZGF0YSA9IGxzX3BhcnQuX2RhdGEgfCBcCi0gICAgICAgICAgICAgICAgICAoKHNlcXVlbmNlLl9kYXRhIHwgXAotICAgICAgICAgICAgICAgICAgKG1zX3BhcnQuX2RhdGEgPDwgc2VxdWVuY2UuX2xlbikpIDw8IGxzX3BhcnQuX2xlbikKLSAgICAgICAgc2VsZi5fbGVuID0gc2VsZi5fbGVuIC0gaiArIGkgKyBzZXF1ZW5jZS5fbGVuCi0KLSAgICBkZWYgX19kZWxzbGljZV9fKHNlbGYsIGksIGopOgotICAgICAgICAjcnBydCgnJXIuX19kZWxzbGljZV9fKCVyLCAlcilcbicgJSAoc2VsZiwgaSwgaikpCi0gICAgICAgIGksIGogPSBfY2hlY2tfc2xpY2Uoc2VsZi5fbGVuLCBpLCBqKQotICAgICAgICBpZiBpID09IDAgYW5kIGogPT0gc2VsZi5fbGVuOgotICAgICAgICAgICAgc2VsZi5fZGF0YSwgc2VsZi5fbGVuID0gMCwgMAotICAgICAgICBlbGlmIGkgPCBqOgotICAgICAgICAgICAgc2VsZi5fZGF0YSA9IHNlbGZbOmldLl9kYXRhIHwgKHNlbGZbajpdLl9kYXRhID4+IGkpCi0gICAgICAgICAgICBzZWxmLl9sZW4gPSBzZWxmLl9sZW4gLSBqICsgaQotCi0gICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAjcnBydCgnJXIuX19hZGRfXyglcilcbicgJSAoc2VsZiwgb3RoZXIpKQotICAgICAgICByZXR2YWwgPSBzZWxmLmNvcHkoKQotICAgICAgICByZXR2YWxbc2VsZi5fbGVuOnNlbGYuX2xlbl0gPSBvdGhlcgotICAgICAgICByZXR1cm4gcmV0dmFsCi0KLSAgICBkZWYgX19tdWxfXyhzZWxmLCBtdWx0aXBsaWVyKToKLSAgICAgICAgI3JwcnQoJyVyLl9fbXVsX18oJXIpXG4nICUgKHNlbGYsIG11bHRpcGxpZXIpKQotICAgICAgICBpZiB0eXBlKG11bHRpcGxpZXIpICE9IHR5cGUoMCk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3NlcXVlbmNlIHN1YnNjcmlwdCBub3QgaW50JykKLSAgICAgICAgaWYgbXVsdGlwbGllciA8PSAwOgotICAgICAgICAgICAgcmV0dXJuIEJpdFZlYygwLCAwKQotICAgICAgICBlbGlmIG11bHRpcGxpZXIgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmNvcHkoKQotICAgICAgICAjaGFuZGxlIHNwZWNpYWwgY2FzZXMgYWxsIDAgb3IgYWxsIDEuLi4KLSAgICAgICAgaWYgc2VsZi5fZGF0YSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIEJpdFZlYygwLCBzZWxmLl9sZW4gKiBtdWx0aXBsaWVyKQotICAgICAgICBlbGlmICh+c2VsZikuX2RhdGEgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiB+Qml0VmVjKDAsIHNlbGYuX2xlbiAqIG11bHRpcGxpZXIpCi0gICAgICAgICNvdGhlcndpc2UgZWwgY2hlYXBvIGFnYWluLi4uCi0gICAgICAgIHJldHZhbCA9IEJpdFZlYygwLCAwKQotICAgICAgICB3aGlsZSBtdWx0aXBsaWVyOgotICAgICAgICAgICAgcmV0dmFsLCBtdWx0aXBsaWVyID0gcmV0dmFsICsgc2VsZiwgbXVsdGlwbGllciAtIDEKLSAgICAgICAgcmV0dXJuIHJldHZhbAotCi0gICAgZGVmIF9fYW5kX18oc2VsZiwgb3RoZXJzZXEsICpyZXN0KToKLSAgICAgICAgI3JwcnQoJyVyLl9fYW5kX18lclxuJyAlIChzZWxmLCAob3RoZXJzZXEsKSArIHJlc3QpKQotICAgICAgICBpZiB0eXBlKG90aGVyc2VxKSAhPSB0eXBlKHNlbGYpOgotICAgICAgICAgICAgb3RoZXJzZXEgPSBiaXR2ZWMob3RoZXJzZXEsICpyZXN0KQotICAgICAgICAjc2VxdWVuY2UgaXMgbm93IG9mIG91ciBvd24gdHlwZQotICAgICAgICByZXR1cm4gQml0VmVjKHNlbGYuX2RhdGEgJiBvdGhlcnNlcS5fZGF0YSwgXAotICAgICAgICAgICAgICAgICAgbWluKHNlbGYuX2xlbiwgb3RoZXJzZXEuX2xlbikpCi0KLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyc2VxLCAqcmVzdCk6Ci0gICAgICAgICNycHJ0KCclci5fX3hvcl9fJXJcbicgJSAoc2VsZiwgKG90aGVyc2VxLCkgKyByZXN0KSkKLSAgICAgICAgaWYgdHlwZShvdGhlcnNlcSkgIT0gdHlwZShzZWxmKToKLSAgICAgICAgICAgIG90aGVyc2VxID0gYml0dmVjKG90aGVyc2VxLCAqcmVzdCkKLSAgICAgICAgI3NlcXVlbmNlIGlzIG5vdyBvZiBvdXIgb3duIHR5cGUKLSAgICAgICAgcmV0dXJuIEJpdFZlYyhzZWxmLl9kYXRhIF4gb3RoZXJzZXEuX2RhdGEsIFwKLSAgICAgICAgICAgICAgICAgIG1heChzZWxmLl9sZW4sIG90aGVyc2VxLl9sZW4pKQotCi0KLSAgICBkZWYgX19vcl9fKHNlbGYsIG90aGVyc2VxLCAqcmVzdCk6Ci0gICAgICAgICNycHJ0KCclci5fX29yX18lclxuJyAlIChzZWxmLCAob3RoZXJzZXEsKSArIHJlc3QpKQotICAgICAgICBpZiB0eXBlKG90aGVyc2VxKSAhPSB0eXBlKHNlbGYpOgotICAgICAgICAgICAgb3RoZXJzZXEgPSBiaXR2ZWMob3RoZXJzZXEsICpyZXN0KQotICAgICAgICAjc2VxdWVuY2UgaXMgbm93IG9mIG91ciBvd24gdHlwZQotICAgICAgICByZXR1cm4gQml0VmVjKHNlbGYuX2RhdGEgfCBvdGhlcnNlcS5fZGF0YSwgXAotICAgICAgICAgICAgICAgICAgbWF4KHNlbGYuX2xlbiwgb3RoZXJzZXEuX2xlbikpCi0KLQotICAgIGRlZiBfX2ludmVydF9fKHNlbGYpOgotICAgICAgICAjcnBydCgnJXIuX19pbnZlcnRfXygpXG4nICUgKHNlbGYsKSkKLSAgICAgICAgcmV0dXJuIEJpdFZlYyh+c2VsZi5fZGF0YSAmICgoMSA8PCBzZWxmLl9sZW4pIC0gMSksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuX2xlbikKLQotICAgIGRlZiBfX2ludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaW50KHNlbGYuX2RhdGEpCi0KLSAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gZmxvYXQoc2VsZi5fZGF0YSkKLQotCi1iaXR2ZWMgPSBCaXRWZWMKZGlmZiAtLWdpdCBhL0RlbW8vY29tcGFyaXNvbnMvUkVBRE1FIGIvRGVtby9jb21wYXJpc29ucy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMTY2N2MuLjAwMDAwMDAKLS0tIGEvRGVtby9jb21wYXJpc29ucy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1TdWJqZWN0OiBSZTogV2hhdCBsYW5ndWFnZSB3b3VsZCB5b3UgdXNlPwotRnJvbTogVG9tIENocmlzdGlhbnNlbiA8dGNocmlzdEBtb3gucGVybC5jb20+Ci1EYXRlOiA2IE5vdiAxOTk0IDE1OjE0OjUxIEdNVAotTmV3c2dyb3VwczogY29tcC5sYW5nLnB5dGhvbixjb21wLmxhbmcudGNsLGNvbXAubGFuZy5zY2hlbWUsY29tcC5sYW5nLm1pc2MsY29tcC5sYW5nLnBlcmwKLU1lc3NhZ2UtSWQ6IDwzOWlydGIkM3Q0QGNzbmV3cy5jcy5Db2xvcmFkby5FRFU+Ci1SZWZlcmVuY2VzOiA8MzliN2hhJGo5dkB6ZW5vLm5zY2Yub3JnPiA8MzloaGpwJGxnbkBjc25ld3MuY3MuQ29sb3JhZG8uRURVPiA8MzlodnN1JGR1c0BtYXRoc2Vydi5tcHMub2hpby1zdGF0ZS5lZHU+Ci0KLVsuLi5dCi1JZiB5b3UncmUgcmVhbGx5IGludG8gYmVuY2htYXJrcywgSSdkIGxvdmUgaXQgaWYgc29tZW9uZSB3ZXJlIHRvIGNvZGUgdXAKLXRoZSBmb2xsb3dpbmcgcHJvYmxlbXMgaW4gdGNsLCBweXRob24sIGFuZCBzY2hlbWUgKGFuZCB3aGF0ZXZlciBlbHNlIHlvdSdkCi1saWtlKS4gIFNlcGFyYXRlIHZlcnNpb25zIChvbmUgb3B0aW1pemVkIGZvciBzcGVlZCwgb25lIGZvciBiZWF1dHkgOi0pIGFyZQotb2suICBQb3N0IHlvdXIgY29kZSBzbyB3ZSBjYW4gdGltZSBpdCBvbiBvdXIgb3duIHN5c3RlbXMuCi0KLTApICBGYWN0b3JpYWwgVGVzdCAgKG51bWVyaWNzIGFuZCBmdW5jdGlvbiBjYWxscykKLQotICAgICAgICAod2UgZGlkIHRoaXMgYWxyZWFkeSkKLQotMSkgIFJlZ3VsYXIgRXhwcmVzc2lvbnMgVGVzdAotCi0gICAgUmVhZCBhIGZpbGUgb2YgKGV4dGVuZGVkIHBlciBlZ3JlcCkgcmVndWxhciBleHByZXNzaW9ucyAob25lIHBlciBsaW5lKSwgCi0gICAgYW5kIGFwcGx5IHRob3NlIHRvIGFsbCBmaWxlcyB3aG9zZSBuYW1lcyBhcmUgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCi0gICAgQmFzaWNhbGx5LCBhbiAnZWdyZXAgLWYnIHNpbXVsYXRvci4gIFRlc3QgaXQgd2l0aCAyMCAidnQxMDAiIHBhdHRlcm5zCi0gICAgYWdhaW5zdCBhIGZpdmUgL2V0Yy90ZXJtY2FwIGZpbGVzLiAgVGVzdHMgdXNpbmcgbW9yZSBlbGFib3JhdGUgcGF0dGVycwotICAgIHdvdWxkIGFsc28gYmUgaW50ZXJlc3RpbmcuICBZb3VyIGNvZGUgc2hvdWxkIG5vdCBicmVhayBpZiBnaXZlbiBodW5kcmVkcwotICAgIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb3IgYmluYXJ5IGZpbGVzIHRvIHNjYW4uICAKLQotMikgIFNvcnRpbmcgVGVzdAotCi0gICAgU29ydCBhbiBpbnB1dCBmaWxlIHRoYXQgY29uc2lzdHMgb2YgbGluZXMgbGlrZSB0aGlzCi0KLSAgICAgICAgdmFyMT0yMyBvdGhlcj0xNCBkaXR0bz0yMyBmcmVkPTIKLQotICAgIHN1Y2ggdGhhdCBlYWNoIG91dHB1dCBsaW5lIGlzIHNvcnRlZCBXUlQgdG8gdGhlIG51bWJlci4gIE9yZGVyCi0gICAgb2Ygb3V0cHV0IGxpbmVzIGRvZXMgbm90IGNoYW5nZS4gIFJlc29sdmUgY29sbGlzaW9ucyB1c2luZyB0aGUKLSAgICB2YXJpYWJsZSBuYW1lLiAgIGUuZy4KLQotICAgICAgICBmcmVkPTIgb3RoZXI9MTQgZGl0dG89MjMgdmFyMT0yMyAKLQotICAgIExpbmVzIG1heSBiZSB1cCB0byBzZXZlcmFsIGtpbG9ieXRlcyBpbiBsZW5ndGggYW5kIGNvbnRhaW4KLSAgICB6aWxsaW9ucyBvZiB2YXJpYWJsZXMuCi0KLTMpICBTeXN0ZW0gVGVzdAotCi0gICAgR2l2ZW4gYSBsaXN0IG9mIGRpcmVjdG9yaWVzLCByZXBvcnQgYW55IGJvZ3VzIHN5bWJvbGljIGxpbmtzIGNvbnRhaW5lZAotICAgIGFueXdoZXJlIGluIHRob3NlIHN1YnRyZWVzLiAgQSBib2d1cyBzeW1ib2xpYyBsaW5rIGlzIG9uZSB0aGF0IGNhbm5vdAotICAgIGJlIHJlc29sdmVkIGJlY2F1c2UgaXQgcG9pbnRzIHRvIGEgbm9uZXhpc3RlbnQgb3Igb3RoZXJ3aXNlCi0gICAgdW5yZXNvbHZhYmxlIGZpbGUuICBEbyAqbm90KiB1c2UgYW4gZXh0ZXJuYWwgZmluZCBleGVjdXRhYmxlLgotICAgIERpcmVjdG9yaWVzIG1heSBiZSB2ZXJ5IHZlcnkgZGVlcC4gIFByaW50IGEgd2FybmluZyBpbW1lZGlhdGVseSBpZiB0aGUKLSAgICBzeXN0ZW0geW91J3JlIHJ1bm5pbmcgb24gZG9lc24ndCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLgotCi0KLUknbGwgcG9zdCBwZXJsIHNvbHV0aW9ucyBpZiBwZW9wbGUgcG9zdCB0aGUgb3RoZXJzLgotCi0KLS0tdG9tCi0tLSAKLVRvbSBDaHJpc3RpYW5zZW4gICAgICBQZXJsIENvbnN1bHRhbnQsIEdhbWVyLCBIaWtlciAgICAgIHRjaHJpc3RAbW94LnBlcmwuY29tCi0KLSAiQnV0IEJpbGx5ISBBICpzbWFsbCogYWxsb3dhbmNlIHByZXBhcmVzIHlvdSBmb3IgYSBsaWZldGltZSBvZiBzbWFsbAotIHNhbGFyaWVzIGFuZCBmb3IgeW91ciBTb2NpYWwgU2VjdXJpdHkgcGF5bWVudHMuIiAgICAtLUZhbWlseSBDaXJjdXMKZGlmZiAtLWdpdCBhL0RlbW8vY29tcGFyaXNvbnMvcGF0dGVybnMgYi9EZW1vL2NvbXBhcmlzb25zL3BhdHRlcm5zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmNGRhODQ2Li4wMDAwMDAwCi0tLSBhL0RlbW8vY29tcGFyaXNvbnMvcGF0dGVybnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLV5kZWYgCi1eY2xhc3MgCi1eaW1wb3J0IAotXmZyb20gCmRpZmYgLS1naXQgYS9EZW1vL2NvbXBhcmlzb25zL3JlZ2V4dGVzdC5weSBiL0RlbW8vY29tcGFyaXNvbnMvcmVnZXh0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkMmM1MzRkLi4wMDAwMDAwCi0tLSBhL0RlbW8vY29tcGFyaXNvbnMvcmVnZXh0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIDEpICBSZWd1bGFyIEV4cHJlc3Npb25zIFRlc3QKLSMKLSMgICAgIFJlYWQgYSBmaWxlIG9mIChleHRlbmRlZCBwZXIgZWdyZXApIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKG9uZSBwZXIgbGluZSksCi0jICAgICBhbmQgYXBwbHkgdGhvc2UgdG8gYWxsIGZpbGVzIHdob3NlIG5hbWVzIGFyZSBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLSMgICAgIEJhc2ljYWxseSwgYW4gJ2VncmVwIC1mJyBzaW11bGF0b3IuICBUZXN0IGl0IHdpdGggMjAgInZ0MTAwIiBwYXR0ZXJucwotIyAgICAgYWdhaW5zdCBhIGZpdmUgL2V0Yy90ZXJtY2FwIGZpbGVzLiAgVGVzdHMgdXNpbmcgbW9yZSBlbGFib3JhdGUgcGF0dGVycwotIyAgICAgd291bGQgYWxzbyBiZSBpbnRlcmVzdGluZy4gIFlvdXIgY29kZSBzaG91bGQgbm90IGJyZWFrIGlmIGdpdmVuIGh1bmRyZWRzCi0jICAgICBvZiByZWd1bGFyIGV4cHJlc3Npb25zIG9yIGJpbmFyeSBmaWxlcyB0byBzY2FuLgotCi0jIFRoaXMgaW1wbGVtZW50YXRpb246Ci0jIC0gY29tYmluZXMgYWxsIHBhdHRlcm5zIGludG8gYSBzaW5nbGUgb25lIHVzaW5nICggLi4uIHwgLi4uIHwgLi4uICkKLSMgLSByZWFkcyBwYXR0ZXJucyBmcm9tIHN0ZGluLCBzY2FucyBmaWxlcyBnaXZlbiBhcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi0jIC0gcHJvZHVjZXMgb3V0cHV0IGluIHRoZSBmb3JtYXQgPGZpbGU+OjxsaW5lbm8+OjxsaW5lPgotIyAtIGlzIG9ubHkgYWJvdXQgMi41IHRpbWVzIGFzIHNsb3cgYXMgZWdyZXAgKHRob3VnaCBJIGNvdWxkbid0IHJ1bgotIyAgIFRvbSdzIHRlc3QgLS0gdGhpcyBzeXN0ZW0sIGEgdmFuaWxsYSBTR0ksIG9ubHkgaGFzIC9ldGMvdGVybWluZm8pCi0KLWltcG9ydCBzdHJpbmcKLWltcG9ydCBzeXMKLWltcG9ydCByZQotCi1kZWYgbWFpbigpOgotICAgIHBhdHMgPSBsaXN0KG1hcChjaG9tcCwgc3lzLnN0ZGluLnJlYWRsaW5lcygpKSkKLSAgICBiaWdwYXQgPSAnKCcgKyAnfCcuam9pbihwYXRzKSArICcpJwotICAgIHByb2cgPSByZS5jb21waWxlKGJpZ3BhdCkKLQotICAgIGZvciBmaWxlIGluIHN5cy5hcmd2WzE6XToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcHJpbnQoIiVzOiAlcyIgJSAoZmlsZSwgbXNnKSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQotICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGluZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIiVzOiVzOiVzIiAlIChmaWxlLCBsaW5lbm8sIGxpbmUpLCBlbmQ9JyAnKQotCi1kZWYgY2hvbXAocyk6Ci0gICAgcmV0dXJuIHMucnN0cmlwKCdcbicpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL2NvbXBhcmlzb25zL3NvcnRpbmd0ZXN0LnB5IGIvRGVtby9jb21wYXJpc29ucy9zb3J0aW5ndGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjllZDg1NC4uMDAwMDAwMAotLS0gYS9EZW1vL2NvbXBhcmlzb25zL3NvcnRpbmd0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIDIpICBTb3J0aW5nIFRlc3QKLSMKLSMgICAgIFNvcnQgYW4gaW5wdXQgZmlsZSB0aGF0IGNvbnNpc3RzIG9mIGxpbmVzIGxpa2UgdGhpcwotIwotIyAgICAgICAgIHZhcjE9MjMgb3RoZXI9MTQgZGl0dG89MjMgZnJlZD0yCi0jCi0jICAgICBzdWNoIHRoYXQgZWFjaCBvdXRwdXQgbGluZSBpcyBzb3J0ZWQgV1JUIHRvIHRoZSBudW1iZXIuICBPcmRlcgotIyAgICAgb2Ygb3V0cHV0IGxpbmVzIGRvZXMgbm90IGNoYW5nZS4gIFJlc29sdmUgY29sbGlzaW9ucyB1c2luZyB0aGUKLSMgICAgIHZhcmlhYmxlIG5hbWUuICAgZS5nLgotIwotIyAgICAgICAgIGZyZWQ9MiBvdGhlcj0xNCBkaXR0bz0yMyB2YXIxPTIzCi0jCi0jICAgICBMaW5lcyBtYXkgYmUgdXAgdG8gc2V2ZXJhbCBraWxvYnl0ZXMgaW4gbGVuZ3RoIGFuZCBjb250YWluCi0jICAgICB6aWxsaW9ucyBvZiB2YXJpYWJsZXMuCi0KLSMgVGhpcyBpbXBsZW1lbnRhdGlvbjoKLSMgLSBSZWFkcyBzdGRpbiwgd3JpdGVzIHN0ZG91dAotIyAtIFVzZXMgYW55IGFtb3VudCBvZiB3aGl0ZXNwYWNlIHRvIHNlcGFyYXRlIGZpZWxkcwotIyAtIEFsbG93cyBzaWduZWQgbnVtYmVycwotIyAtIFRyZWF0cyBpbGxlZ2FsbHkgZm9ybWF0dGVkIGZpZWxkcyBhcyBmaWVsZD0wCi0jIC0gT3V0cHV0cyB0aGUgc29ydGVkIGZpZWxkcyB3aXRoIGV4YWN0bHkgb25lIHNwYWNlIGJldHdlZW4gdGhlbQotIyAtIEhhbmRsZXMgYmxhbmsgaW5wdXQgbGluZXMgY29ycmVjdGx5Ci0KLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi1kZWYgbWFpbigpOgotICAgIHByb2cgPSByZS5jb21waWxlKCdeKC4qKT0oWy0rXT9bMC05XSspJykKLSAgICBkZWYgbWFrZWtleShpdGVtLCBwcm9nPXByb2cpOgotICAgICAgICBtYXRjaCA9IHByb2cubWF0Y2goaXRlbSkKLSAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICB2YXIsIG51bSA9IG1hdGNoLmdyb3VwcygpCi0gICAgICAgICAgICByZXR1cm4gaW50KG51bSksIHZhcgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBCYWQgaW5wdXQgLS0gcHJldGVuZCBpdCdzIGEgdmFyIHdpdGggdmFsdWUgMAotICAgICAgICAgICAgcmV0dXJuIDAsIGl0ZW0KLSAgICBmb3IgbGluZSBpbiBzeXMuc3RkaW46Ci0gICAgICAgIGl0ZW1zID0gc29ydGVkKG1ha2VrZXkoaXRlbSkgZm9yIGl0ZW0gaW4gbGluZS5zcGxpdCgpKQotICAgICAgICBmb3IgbnVtLCB2YXIgaW4gaXRlbXM6Ci0gICAgICAgICAgICBwcmludCgiJXM9JXMiICUgKHZhciwgbnVtKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vY29tcGFyaXNvbnMvc3lzdGVtdGVzdC5weSBiL0RlbW8vY29tcGFyaXNvbnMvc3lzdGVtdGVzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTNkODQwZS4uMDAwMDAwMAotLS0gYS9EZW1vL2NvbXBhcmlzb25zL3N5c3RlbXRlc3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgMykgIFN5c3RlbSBUZXN0Ci0jCi0jICAgICBHaXZlbiBhIGxpc3Qgb2YgZGlyZWN0b3JpZXMsIHJlcG9ydCBhbnkgYm9ndXMgc3ltYm9saWMgbGlua3MgY29udGFpbmVkCi0jICAgICBhbnl3aGVyZSBpbiB0aG9zZSBzdWJ0cmVlcy4gIEEgYm9ndXMgc3ltYm9saWMgbGluayBpcyBvbmUgdGhhdCBjYW5ub3QKLSMgICAgIGJlIHJlc29sdmVkIGJlY2F1c2UgaXQgcG9pbnRzIHRvIGEgbm9uZXhpc3RlbnQgb3Igb3RoZXJ3aXNlCi0jICAgICB1bnJlc29sdmFibGUgZmlsZS4gIERvICpub3QqIHVzZSBhbiBleHRlcm5hbCBmaW5kIGV4ZWN1dGFibGUuCi0jICAgICBEaXJlY3RvcmllcyBtYXkgYmUgdmVyeSB2ZXJ5IGRlZXAuICBQcmludCBhIHdhcm5pbmcgaW1tZWRpYXRlbHkgaWYgdGhlCi0jICAgICBzeXN0ZW0geW91J3JlIHJ1bm5pbmcgb24gZG9lc24ndCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLgotCi0jIFRoaXMgaW1wbGVtZW50YXRpb246Ci0jIC0gdGFrZXMgb25lIG9wdGlvbmFsIGFyZ3VtZW50LCB1c2luZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgYXMgZGVmYXVsdAotIyAtIHVzZXMgY2hkaXIgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UKLSMgLSBzb3J0cyB0aGUgbmFtZXMgcGVyIGRpcmVjdG9yeQotIyAtIHByaW50cyBvdXRwdXQgbGluZXMgb2YgdGhlIGZvcm0gInBhdGgxIC0+IHBhdGgyIiBhcyBpdCBnb2VzCi0jIC0gcHJpbnRzIGVycm9yIG1lc3NhZ2VzIGFib3V0IGRpcmVjdG9yaWVzIGl0IGNhbid0IGxpc3Qgb3IgY2hkaXIgaW50bwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWZyb20gc3RhdCBpbXBvcnQgKgotCi1kZWYgbWFpbigpOgotICAgIHRyeToKLSAgICAgICAgIyBOb3RlOiBjYW4ndCB0ZXN0IGZvciBwcmVzZW5jZSBvZiBsc3RhdCAtLSBpdCdzIGFsd2F5cyB0aGVyZQotICAgICAgICBkdW1teSA9IG9zLnJlYWRsaW5rCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICBwcmludCgiVGhpcyBzeXN0ZW0gZG9lc24ndCBoYXZlIHN5bWJvbGljIGxpbmtzIikKLSAgICAgICAgc3lzLmV4aXQoMCkKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIHByZWZpeCA9IHN5cy5hcmd2WzFdCi0gICAgZWxzZToKLSAgICAgICAgcHJlZml4ID0gJycKLSAgICBpZiBwcmVmaXg6Ci0gICAgICAgIG9zLmNoZGlyKHByZWZpeCkKLSAgICAgICAgaWYgcHJlZml4Wy0xOl0gIT0gJy8nOiBwcmVmaXggPSBwcmVmaXggKyAnLycKLSAgICAgICAgcmVwb3J0Ym9ndXNsaW5rcyhwcmVmaXgpCi0gICAgZWxzZToKLSAgICAgICAgcmVwb3J0Ym9ndXNsaW5rcygnJykKLQotZGVmIHJlcG9ydGJvZ3VzbGlua3MocHJlZml4KToKLSAgICB0cnk6Ci0gICAgICAgIG5hbWVzID0gb3MubGlzdGRpcignLicpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoIiVzJXM6IGNhbid0IGxpc3Q6ICVzIiAlIChwcmVmaXgsICcuJywgbXNnKSkKLSAgICAgICAgcmV0dXJuCi0gICAgbmFtZXMuc29ydCgpCi0gICAgZm9yIG5hbWUgaW4gbmFtZXM6Ci0gICAgICAgIGlmIG5hbWUgPT0gb3MuY3VyZGlyIG9yIG5hbWUgPT0gb3MucGFyZGlyOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kZSA9IG9zLmxzdGF0KG5hbWUpW1NUX01PREVdCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIHByaW50KCIlcyVzOiBjYW4ndCBzdGF0OiAlcyIgJSAocHJlZml4LCBuYW1lLCBtc2cpKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgU19JU0xOSyhtb2RlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5zdGF0KG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIiVzJXMgLT4gJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgIChwcmVmaXgsIG5hbWUsIG9zLnJlYWRsaW5rKG5hbWUpKSkKLSAgICAgICAgZWxpZiBTX0lTRElSKG1vZGUpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHByaW50KCIlcyVzOiBjYW4ndCBjaGRpcjogJXMiICUgXAotICAgICAgICAgICAgICAgICAgICAgIChwcmVmaXgsIG5hbWUsIG1zZykpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXBvcnRib2d1c2xpbmtzKHByZWZpeCArIG5hbWUgKyAnLycpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKCcuLicpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9jdXJzZXMvUkVBRE1FIGIvRGVtby9jdXJzZXMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDFjNGIxLi4wMDAwMDAwCi0tLSBhL0RlbW8vY3Vyc2VzL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLVRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGRlbW9zIGFuZCB0ZXN0cyBmb3IgdGhlIGN1cnNlcyBtb2R1bGUuIAotCi1uY3Vyc2VzIGRlbW9zCi09PT09PT09PT09PT09Ci0KLVRoZXNlIGRlbW9zIGFyZSBjb252ZXJ0ZWQgZnJvbSB0aGUgQyB2ZXJzaW9ucyBpbiB0aGUgbmN1cnNlcwotZGlzdHJpYnV0aW9uLCBhbmQgd2VyZSBjb250cmlidXRlZCBieSBUaG9tYXMgR2VsbGVrdW0gPHRnQEZyZWVCU0Qub3JnPgotSSBkaWRuJ3Qgc3RyaXZlIGZvciBhIGBweXRob25pYycgc3R5bGUsIGJ1dCBibHVudGx5IGNvcGllZCB0aGUKLW9yaWdpbmFscy4gSSB3b24ndCBhdHRlbXB0IHRvIGBiZWF1dGlmeScgdGhlIHByb2dyYW0gYW55dGltZSBzb29uLCBidXQKLUkgd291bGRuJ3QgbWluZCBzb21lb25lIGVsc2UgbWFraW5nIGFuIGVmZm9ydCBpbiB0aGF0IGRpcmVjdGlvbiwgb2YKLWNvdXJzZS4KLQotbmN1cnNlcy5weSAgICAgIC0tIGN1cnJlbnRseSBvbmx5IGEgcGFuZWxzIGRlbW8KLXJhaW4ucHkgICAgICAgICAtLSByYWluZHJvcHMga2VlcCBmYWxsaW5nIG9uIG15IGRlc2t0b3AKLXRjbG9jay5weSAgICAgICAtLSBBU0NJSSBjbG9jaywgYnkgSG93YXJkIEpvbmVzCi14bWFzLnB5ICAgICAgICAgLS0gSSdtIGRyZWFtaW5nIG9mIGFuIEFTQ0lJIGNocmlzdG1hcwotCi1QbGVhc2Ugc3VibWl0IGJ1Z2ZpeGVzIGFuZCBuZXcgY29udHJpYnV0aW9ucyB0byB0aGUgUHl0aG9uIGJ1ZyB0cmFja2VyLgotCi0KLU90aGVyIGRlbW9zCi09PT09PT09PT09PQotCi1saWZlLnB5ICAgICAgICAgLS0gU2ltcGxlIGdhbWUgb2YgTGlmZQotcmVwZWF0LnB5ICAgICAgIC0tIFJlcGVhdGVkbHkgZXhlY3V0ZSBhIHNoZWxsIGNvbW1hbmQgKGxpa2Ugd2F0Y2goMSkpCmRpZmYgLS1naXQgYS9EZW1vL2N1cnNlcy9uY3Vyc2VzLnB5IGIvRGVtby9jdXJzZXMvbmN1cnNlcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkYzFhOS4uMDAwMDAwMAotLS0gYS9EZW1vL2N1cnNlcy9uY3Vyc2VzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyAkSWQkCi0jCi0jIChuKWN1cnNlcyBleGVyY2lzZXIgaW4gUHl0aG9uLCBhbiBpbnRlcmFjdGl2ZSB0ZXN0IGZvciB0aGUgY3Vyc2VzCi0jIG1vZHVsZS4gQ3VycmVudGx5LCBvbmx5IHRoZSBwYW5lbCBkZW1vcyBhcmUgcG9ydGVkLgotCi1pbXBvcnQgY3Vyc2VzCi1mcm9tIGN1cnNlcyBpbXBvcnQgcGFuZWwKLQotZGVmIHdHZXRjaGFyKHdpbiA9IE5vbmUpOgotICAgIGlmIHdpbiBpcyBOb25lOiB3aW4gPSBzdGRzY3IKLSAgICByZXR1cm4gd2luLmdldGNoKCkKLQotZGVmIEdldGNoYXIoKToKLSAgICB3R2V0Y2hhcigpCi0KLSMKLSMgUGFuZWxzIHRlc3RlcgotIwotZGVmIHdhaXRfYV93aGlsZSgpOgotICAgIGlmIG5hcF9tc2VjID09IDE6Ci0gICAgICAgIEdldGNoYXIoKQotICAgIGVsc2U6Ci0gICAgICAgIGN1cnNlcy5uYXBtcyhuYXBfbXNlYykKLQotZGVmIHNheXdoYXQodGV4dCk6Ci0gICAgc3Rkc2NyLm1vdmUoY3Vyc2VzLkxJTkVTIC0gMSwgMCkKLSAgICBzdGRzY3IuY2xydG9lb2woKQotICAgIHN0ZHNjci5hZGRzdHIodGV4dCkKLQotZGVmIG1rcGFuZWwoY29sb3IsIHJvd3MsIGNvbHMsIHRseSwgdGx4KToKLSAgICB3aW4gPSBjdXJzZXMubmV3d2luKHJvd3MsIGNvbHMsIHRseSwgdGx4KQotICAgIHBhbiA9IHBhbmVsLm5ld19wYW5lbCh3aW4pCi0gICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKLSAgICAgICAgaWYgY29sb3IgPT0gY3Vyc2VzLkNPTE9SX0JMVUU6Ci0gICAgICAgICAgICBmZyA9IGN1cnNlcy5DT0xPUl9XSElURQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmcgPSBjdXJzZXMuQ09MT1JfQkxBQ0sKLSAgICAgICAgYmcgPSBjb2xvcgotICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKGNvbG9yLCBmZywgYmcpCi0gICAgICAgIHdpbi5ia2dkc2V0KG9yZCgnICcpLCBjdXJzZXMuY29sb3JfcGFpcihjb2xvcikpCi0gICAgZWxzZToKLSAgICAgICAgd2luLmJrZ2RzZXQob3JkKCcgJyksIGN1cnNlcy5BX0JPTEQpCi0KLSAgICByZXR1cm4gcGFuCi0KLWRlZiBwZmx1c2goKToKLSAgICBwYW5lbC51cGRhdGVfcGFuZWxzKCkKLSAgICBjdXJzZXMuZG91cGRhdGUoKQotCi1kZWYgZmlsbF9wYW5lbChwYW4pOgotICAgIHdpbiA9IHBhbi53aW5kb3coKQotICAgIG51bSA9IHBhbi51c2VycHRyKClbMV0KLQotICAgIHdpbi5tb3ZlKDEsIDEpCi0gICAgd2luLmFkZHN0cigiLXBhbiVjLSIgJSBudW0pCi0gICAgd2luLmNscnRvZW9sKCkKLSAgICB3aW4uYm94KCkKLQotICAgIG1heHksIG1heHggPSB3aW4uZ2V0bWF4eXgoKQotICAgIGZvciB5IGluIHJhbmdlKDIsIG1heHkgLSAxKToKLSAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgbWF4eCAtIDEpOgotICAgICAgICAgICAgd2luLm1vdmUoeSwgeCkKLSAgICAgICAgICAgIHdpbi5hZGRjaChudW0pCi0KLWRlZiBkZW1vX3BhbmVscyh3aW4pOgotICAgIGdsb2JhbCBzdGRzY3IsIG5hcF9tc2VjLCBtb2QKLSAgICBzdGRzY3IgPSB3aW4KLSAgICBuYXBfbXNlYyA9IDEKLSAgICBtb2QgPSBbInRlc3QiLCAiVEVTVCIsICIoKiopIiwgIiooKSoiLCAiPC0tPiIsICJMQVNUIl0KLQotICAgIHN0ZHNjci5yZWZyZXNoKCkKLQotICAgIGZvciB5IGluIHJhbmdlKDAsIGN1cnNlcy5MSU5FUyAtIDEpOgotICAgICAgICBmb3IgeCBpbiByYW5nZSgwLCBjdXJzZXMuQ09MUyk6Ci0gICAgICAgICAgICBzdGRzY3IuYWRkc3RyKCIlZCIgJSAoKHkgKyB4KSAlIDEwKSkKLSAgICBmb3IgeSBpbiByYW5nZSgwLCAxKToKLSAgICAgICAgcDEgPSBta3BhbmVsKGN1cnNlcy5DT0xPUl9SRUQsCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuTElORVMgLy8gMiAtIDIsCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuQ09MUyAvLyA4ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAwKQotICAgICAgICBwMS5zZXRfdXNlcnB0cigicDEiKQotCi0gICAgICAgIHAyID0gbWtwYW5lbChjdXJzZXMuQ09MT1JfR1JFRU4sCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuTElORVMgLy8gMiArIDEsCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuQ09MUyAvLyA3LAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkxJTkVTIC8vIDQsCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuQ09MUyAvLyAxMCkKLSAgICAgICAgcDIuc2V0X3VzZXJwdHIoInAyIikKLQotICAgICAgICBwMyA9IG1rcGFuZWwoY3Vyc2VzLkNPTE9SX1lFTExPVywKLSAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5MSU5FUyAvLyA0LAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkNPTFMgLy8gMTAsCi0gICAgICAgICAgICAgICAgICAgICBjdXJzZXMuTElORVMgLy8gMiwKLSAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5DT0xTIC8vIDkpCi0gICAgICAgIHAzLnNldF91c2VycHRyKCJwMyIpCi0KLSAgICAgICAgcDQgPSBta3BhbmVsKGN1cnNlcy5DT0xPUl9CTFVFLAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkxJTkVTIC8vIDIgLSAyLAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkNPTFMgLy8gOCwKLSAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5MSU5FUyAvLyAyIC0gMiwKLSAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5DT0xTIC8vIDMpCi0gICAgICAgIHA0LnNldF91c2VycHRyKCJwNCIpCi0KLSAgICAgICAgcDUgPSBta3BhbmVsKGN1cnNlcy5DT0xPUl9NQUdFTlRBLAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkxJTkVTIC8vIDIgLSAyLAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkNPTFMgLy8gOCwKLSAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5MSU5FUyAvLyAyLAotICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLkNPTFMgLy8gMiAtIDIpCi0gICAgICAgIHA1LnNldF91c2VycHRyKCJwNSIpCi0KLSAgICAgICAgZmlsbF9wYW5lbChwMSkKLSAgICAgICAgZmlsbF9wYW5lbChwMikKLSAgICAgICAgZmlsbF9wYW5lbChwMykKLSAgICAgICAgZmlsbF9wYW5lbChwNCkKLSAgICAgICAgZmlsbF9wYW5lbChwNSkKLSAgICAgICAgcDQuaGlkZSgpCi0gICAgICAgIHA1LmhpZGUoKQotICAgICAgICBwZmx1c2goKQotICAgICAgICBzYXl3aGF0KCJwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJoMyBzMSBzMiBzNCBzNTtwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDEubW92ZSgwLCAwKQotICAgICAgICBwMy5oaWRlKCkKLSAgICAgICAgcDEuc2hvdygpCi0gICAgICAgIHAyLnNob3coKQotICAgICAgICBwNC5zaG93KCkKLSAgICAgICAgcDUuc2hvdygpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgiczE7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwMS5zaG93KCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJzMjsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHAyLnNob3coKQotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoIm0yOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDIubW92ZShjdXJzZXMuTElORVMgLy8gMyArIDEsIGN1cnNlcy5DT0xTIC8vIDgpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgiczM7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwMy5zaG93KCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJtMzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHAzLm1vdmUoY3Vyc2VzLkxJTkVTIC8vIDQgKyAxLCBjdXJzZXMuQ09MUyAvLyAxNSkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJiMzsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHAzLmJvdHRvbSgpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgiczQ7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwNC5zaG93KCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJzNTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHA1LnNob3coKQotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoInQzOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDMudG9wKCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJ0MTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHAxLnNob3coKQotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoInQyOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDIuc2hvdygpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgidDM7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwMy5zaG93KCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJ0NDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHA0LnNob3coKQotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIGZvciBpdG1wIGluIHJhbmdlKDAsIDYpOgotICAgICAgICAgICAgdzQgPSBwNC53aW5kb3coKQotICAgICAgICAgICAgdzUgPSBwNS53aW5kb3coKQotCi0gICAgICAgICAgICBzYXl3aGF0KCJtNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgICAgICB3NC5tb3ZlKGN1cnNlcy5MSU5FUyAvLyA4LCAxKQotICAgICAgICAgICAgdzQuYWRkc3RyKG1vZFtpdG1wXSkKLSAgICAgICAgICAgIHA0Lm1vdmUoY3Vyc2VzLkxJTkVTIC8vIDYsIGl0bXAgKiBjdXJzZXMuQ09MUyAvLyA4KQotICAgICAgICAgICAgdzUubW92ZShjdXJzZXMuTElORVMgLy8gNiwgMSkKLSAgICAgICAgICAgIHc1LmFkZHN0cihtb2RbaXRtcF0pCi0gICAgICAgICAgICBwZmx1c2goKQotICAgICAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICAgICAgc2F5d2hhdCgibTU7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICAgICAgdzQubW92ZShjdXJzZXMuTElORVMgLy8gNiwgMSkKLSAgICAgICAgICAgIHc0LmFkZHN0cihtb2RbaXRtcF0pCi0gICAgICAgICAgICBwNS5tb3ZlKGN1cnNlcy5MSU5FUyAvLyAzIC0gMSwgaXRtcCAqIDEwICsgNikKLSAgICAgICAgICAgIHc1Lm1vdmUoY3Vyc2VzLkxJTkVTIC8vIDgsIDEpCi0gICAgICAgICAgICB3NS5hZGRzdHIobW9kW2l0bXBdKQotICAgICAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgibTQ7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwNC5tb3ZlKGN1cnNlcy5MSU5FUyAvLyA2LCAoaXRtcCArIDEpICogY3Vyc2VzLkNPTFMgLy8gOCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJ0NTsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIHA1LnRvcCgpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgidDI7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBwMi50b3AoKQotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoInQxOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDEudG9wKCkKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJkMjsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIGRlbCBwMgotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoImgzOyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgcDMuaGlkZSgpCi0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0KLSAgICAgICAgc2F5d2hhdCgiZDE7IHByZXNzIGFueSBrZXkgdG8gY29udGludWUiKQotICAgICAgICBkZWwgcDEKLSAgICAgICAgcGZsdXNoKCkKLSAgICAgICAgd2FpdF9hX3doaWxlKCkKLQotICAgICAgICBzYXl3aGF0KCJkNDsgcHJlc3MgYW55IGtleSB0byBjb250aW51ZSIpCi0gICAgICAgIGRlbCBwNAotICAgICAgICBwZmx1c2goKQotICAgICAgICB3YWl0X2Ffd2hpbGUoKQotCi0gICAgICAgIHNheXdoYXQoImQ1OyBwcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlIikKLSAgICAgICAgZGVsIHA1Ci0gICAgICAgIHBmbHVzaCgpCi0gICAgICAgIHdhaXRfYV93aGlsZSgpCi0gICAgICAgIGlmIG5hcF9tc2VjID09IDE6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBuYXBfbXNlYyA9IDEwMAotCi0jCi0jIG9uZSBmaW5lIGRheSB0aGVyZSdsbCBiZSB0aGUgbWVudSBhdCB0aGlzIHBsYWNlCi0jCi1jdXJzZXMud3JhcHBlcihkZW1vX3BhbmVscykKZGlmZiAtLWdpdCBhL0RlbW8vY3Vyc2VzL3JhaW4ucHkgYi9EZW1vL2N1cnNlcy9yYWluLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDQ2ZTZlLi4wMDAwMDAwCi0tLSBhL0RlbW8vY3Vyc2VzL3JhaW4ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgJElkJAotIwotIyBzb21lYm9keSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIHJhbmRyYW5nZSgpcy4uLgotCi1pbXBvcnQgY3Vyc2VzCi1mcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCi0KLWRlZiBuZXh0X2ooaik6Ci0gICAgaWYgaiA9PSAwOgotICAgICAgICBqID0gNAotICAgIGVsc2U6Ci0gICAgICAgIGogLT0gMQotCi0gICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKLSAgICAgICAgeiA9IHJhbmRyYW5nZSgwLCAzKQotICAgICAgICBjb2xvciA9IGN1cnNlcy5jb2xvcl9wYWlyKHopCi0gICAgICAgIGlmIHo6Ci0gICAgICAgICAgICBjb2xvciA9IGNvbG9yIHwgY3Vyc2VzLkFfQk9MRAotICAgICAgICBzdGRzY3IuYXR0cnNldChjb2xvcikKLQotICAgIHJldHVybiBqCi0KLWRlZiBtYWluKHdpbik6Ci0gICAgIyB3ZSBrbm93IHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IGZyb20gY3Vyc2VzLndyYXBwZXIoKSBpcyBzdGRzY3IuCi0gICAgIyBJbml0aWFsaXplIGl0IGdsb2JhbGx5IGZvciBjb252ZW5pZW5jZS4KLSAgICBnbG9iYWwgc3Rkc2NyCi0gICAgc3Rkc2NyID0gd2luCi0KLSAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgotICAgICAgICBiZyA9IGN1cnNlcy5DT0xPUl9CTEFDSwotICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDEsIGN1cnNlcy5DT0xPUl9CTFVFLCBiZykKLSAgICAgICAgY3Vyc2VzLmluaXRfcGFpcigyLCBjdXJzZXMuQ09MT1JfQ1lBTiwgYmcpCi0KLSAgICBjdXJzZXMubmwoKQotICAgIGN1cnNlcy5ub2VjaG8oKQotICAgICMgWFhYIGN1cnNfc2V0KCkgYWx3YXlzIHJldHVybnMgRVJSCi0gICAgIyBjdXJzZXMuY3Vyc19zZXQoMCkKLSAgICBzdGRzY3IudGltZW91dCgwKQotCi0gICAgYyA9IGN1cnNlcy5DT0xTIC0gNAotICAgIHIgPSBjdXJzZXMuTElORVMgLSA0Ci0gICAgeHBvcyA9IFswXSAqIGMKLSAgICB5cG9zID0gWzBdICogcgotICAgIGZvciBqIGluIHJhbmdlKDQsIC0xLCAtMSk6Ci0gICAgICAgIHhwb3Nbal0gPSByYW5kcmFuZ2UoMCwgYykgKyAyCi0gICAgICAgIHlwb3Nbal0gPSByYW5kcmFuZ2UoMCwgcikgKyAyCi0KLSAgICBqID0gMAotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHggPSByYW5kcmFuZ2UoMCwgYykgKyAyCi0gICAgICAgIHkgPSByYW5kcmFuZ2UoMCwgcikgKyAyCi0KLSAgICAgICAgc3Rkc2NyLmFkZGNoKHksIHgsIG9yZCgnLicpKQotCi0gICAgICAgIHN0ZHNjci5hZGRjaCh5cG9zW2pdLCB4cG9zW2pdLCBvcmQoJ28nKSkKLQotICAgICAgICBqID0gbmV4dF9qKGopCi0gICAgICAgIHN0ZHNjci5hZGRjaCh5cG9zW2pdLCB4cG9zW2pdLCBvcmQoJ08nKSkKLQotICAgICAgICBqID0gbmV4dF9qKGopCi0gICAgICAgIHN0ZHNjci5hZGRjaCggeXBvc1tqXSAtIDEsIHhwb3Nbal0sICAgICBvcmQoJy0nKSkKLSAgICAgICAgc3Rkc2NyLmFkZHN0cih5cG9zW2pdLCAgICAgeHBvc1tqXSAtIDEsICJ8LnwiKQotICAgICAgICBzdGRzY3IuYWRkY2goIHlwb3Nbal0gKyAxLCB4cG9zW2pdLCAgICAgb3JkKCctJykpCi0KLSAgICAgICAgaiA9IG5leHRfaihqKQotICAgICAgICBzdGRzY3IuYWRkY2goIHlwb3Nbal0gLSAyLCB4cG9zW2pdLCAgICAgb3JkKCctJykpCi0gICAgICAgIHN0ZHNjci5hZGRzdHIoeXBvc1tqXSAtIDEsIHhwb3Nbal0gLSAxLCAiLyBcXCIpCi0gICAgICAgIHN0ZHNjci5hZGRzdHIoeXBvc1tqXSwgICAgIHhwb3Nbal0gLSAyLCAifCBPIHwiKQotICAgICAgICBzdGRzY3IuYWRkc3RyKHlwb3Nbal0gKyAxLCB4cG9zW2pdIC0gMSwgIlxcIC8iKQotICAgICAgICBzdGRzY3IuYWRkY2goIHlwb3Nbal0gKyAyLCB4cG9zW2pdLCAgICAgb3JkKCctJykpCi0KLSAgICAgICAgaiA9IG5leHRfaihqKQotICAgICAgICBzdGRzY3IuYWRkY2goIHlwb3Nbal0gLSAyLCB4cG9zW2pdLCAgICAgb3JkKCcgJykpCi0gICAgICAgIHN0ZHNjci5hZGRzdHIoeXBvc1tqXSAtIDEsIHhwb3Nbal0gLSAxLCAiICAgIikKLSAgICAgICAgc3Rkc2NyLmFkZHN0cih5cG9zW2pdLCAgICAgeHBvc1tqXSAtIDIsICIgICAgICIpCi0gICAgICAgIHN0ZHNjci5hZGRzdHIoeXBvc1tqXSArIDEsIHhwb3Nbal0gLSAxLCAiICAgIikKLSAgICAgICAgc3Rkc2NyLmFkZGNoKCB5cG9zW2pdICsgMiwgeHBvc1tqXSwgICAgIG9yZCgnICcpKQotCi0gICAgICAgIHhwb3Nbal0gPSB4Ci0gICAgICAgIHlwb3Nbal0gPSB5Ci0KLSAgICAgICAgY2ggPSBzdGRzY3IuZ2V0Y2goKQotICAgICAgICBpZiBjaCA9PSBvcmQoJ3EnKSBvciBjaCA9PSBvcmQoJ1EnKToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbGlmIGNoID09IG9yZCgncycpOgotICAgICAgICAgICAgc3Rkc2NyLm5vZGVsYXkoMCkKLSAgICAgICAgZWxpZiBjaCA9PSBvcmQoJyAnKToKLSAgICAgICAgICAgIHN0ZHNjci5ub2RlbGF5KDEpCi0KLSAgICAgICAgY3Vyc2VzLm5hcG1zKDUwKQotCi1jdXJzZXMud3JhcHBlcihtYWluKQpkaWZmIC0tZ2l0IGEvRGVtby9jdXJzZXMvcmVwZWF0LnB5IGIvRGVtby9jdXJzZXMvcmVwZWF0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MzM3MmM1Li4wMDAwMDAwCi0tLSBhL0RlbW8vY3Vyc2VzL3JlcGVhdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIicmVwZWF0IFstaSBTRUNPTkRTXSA8c2hlbGwtY29tbWFuZD4KLQotVGhpcyBzaW1wbGUgcHJvZ3JhbSByZXBlYXRlZGx5IChhdCAxLXNlY29uZCBpbnRlcnZhbHMpIGV4ZWN1dGVzIHRoZQotc2hlbGwgY29tbWFuZCBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCBkaXNwbGF5cyB0aGUgb3V0cHV0IChvciBhcwotbXVjaCBvZiBpdCBhcyBmaXRzIG9uIHRoZSBzY3JlZW4pLiAgSXQgdXNlcyBjdXJzZXMgdG8gcGFpbnQgZWFjaCBuZXcKLW91dHB1dCBvbiB0b3Agb2YgdGhlIG9sZCBvdXRwdXQsIHNvIHRoYXQgaWYgbm90aGluZyBjaGFuZ2VzLCB0aGUKLXNjcmVlbiBkb2Vzbid0IGNoYW5nZS4gIFRoaXMgaXMgaGFuZHkgdG8gd2F0Y2ggZm9yIGNoYW5nZXMgaW4gZS5nLiBhCi1kaXJlY3Rvcnkgb3IgcHJvY2VzcyBsaXN0aW5nLgotCi1UaGUgLWkgb3B0aW9uIGxldHMgeW91IG92ZXJyaWRlIHRoZSBzbGVlcCB0aW1lIGJldHdlZW4gZXhlY3V0aW9ucy4KLQotVG8gZW5kLCBoaXQgQ29udHJvbC1DLgotIiIiCi0KLSMgQXV0aG9yOiBHdWlkbyB2YW4gUm9zc3VtCi0KLSMgRGlzY2xhaW1lcjogdGhlcmUncyBhIExpbnV4IHByb2dyYW0gbmFtZWQgJ3dhdGNoJyB0aGF0IGRvZXMgdGhlIHNhbWUKLSMgdGhpbmcuICBIb25lc3RseSwgSSBkaWRuJ3Qga25vdyBvZiBpdHMgZXhpc3RlbmNlIHdoZW4gSSB3cm90ZSB0aGlzIQotCi0jIFRvIGRvOiBhZGQgZmVhdHVyZXMgdW50aWwgaXQgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgd2F0Y2goMSk7Ci0jIHRoZW4gY29tcGFyZSBjb2RlIHNpemUgYW5kIGRldmVsb3BtZW50IHRpbWUuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLWltcG9ydCBjdXJzZXMKLWltcG9ydCBnZXRvcHQKLQotZGVmIG1haW4oKToKLSAgICBpbnRlcnZhbCA9IDEuMAotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiaGk6IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIGVycjoKLSAgICAgICAgcHJpbnQoZXJyLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgIHByaW50KF9fZG9jX18pCi0gICAgICAgIHN5cy5leGl0KDApCi0gICAgZm9yIG9wdCwgYXJnIGluIG9wdHM6Ci0gICAgICAgIGlmIG9wdCA9PSAiLWkiOgotICAgICAgICAgICAgaW50ZXJ2YWwgPSBmbG9hdChhcmcpCi0gICAgICAgIGlmIG9wdCA9PSAiLWgiOgotICAgICAgICAgICAgcHJpbnQoX19kb2NfXykKLSAgICAgICAgICAgIHN5cy5leGl0KDApCi0gICAgY21kID0gIiAiLmpvaW4oYXJncykKLSAgICBjbWRfcmVhbGx5ID0gY21kICsgIiAyPiYxIgotICAgIHAgPSBvcy5wb3BlbihjbWRfcmVhbGx5LCAiciIpCi0gICAgdGV4dCA9IHAucmVhZCgpCi0gICAgc3RzID0gcC5jbG9zZSgpCi0gICAgdGV4dCA9IGFkZHN0cyhpbnRlcnZhbCwgY21kLCB0ZXh0LCBzdHMpCi0gICAgdyA9IGN1cnNlcy5pbml0c2NyKCkKLSAgICB0cnk6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICB3LmVyYXNlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3LmFkZHN0cih0ZXh0KQotICAgICAgICAgICAgZXhjZXB0IGN1cnNlcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB3LnJlZnJlc2goKQotICAgICAgICAgICAgdGltZS5zbGVlcChpbnRlcnZhbCkKLSAgICAgICAgICAgIHAgPSBvcy5wb3BlbihjbWRfcmVhbGx5LCAiciIpCi0gICAgICAgICAgICB0ZXh0ID0gcC5yZWFkKCkKLSAgICAgICAgICAgIHN0cyA9IHAuY2xvc2UoKQotICAgICAgICAgICAgdGV4dCA9IGFkZHN0cyhpbnRlcnZhbCwgY21kLCB0ZXh0LCBzdHMpCi0gICAgZmluYWxseToKLSAgICAgICAgY3Vyc2VzLmVuZHdpbigpCi0KLWRlZiBhZGRzdHMoaW50ZXJ2YWwsIGNtZCwgdGV4dCwgc3RzKToKLSAgICBub3cgPSB0aW1lLnN0cmZ0aW1lKCIlSDolTTolUyIpCi0gICAgdGV4dCA9ICIlcywgZXZlcnkgJWcgc2VjOiAlc1xuJXMiICUgKG5vdywgaW50ZXJ2YWwsIGNtZCwgdGV4dCkKLSAgICBpZiBzdHM6Ci0gICAgICAgIG1zZyA9ICJFeGl0IHN0YXR1czogJWQ7IHNpZ25hbDogJWQiICUgKHN0cz4+OCwgc3RzJjB4RkYpCi0gICAgICAgIGlmIHRleHQgYW5kIG5vdCB0ZXh0LmVuZHN3aXRoKCJcbiIpOgotICAgICAgICAgICAgbXNnID0gIlxuIiArIG1zZwotICAgICAgICB0ZXh0ICs9IG1zZwotICAgIHJldHVybiB0ZXh0Ci0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9jdXJzZXMvdGNsb2NrLnB5IGIvRGVtby9jdXJzZXMvdGNsb2NrLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU4ZDlhLi4wMDAwMDAwCi0tLSBhL0RlbW8vY3Vyc2VzL3RjbG9jay5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMKLSMgJElkJAotIwotIyBGcm9tIHRjbG9jay5jLCBDb3B5cmlnaHQgSG93YXJkIEpvbmVzIDxoYS5qb25lc0BpYy5hYy51az4sIFNlcHRlbWJlciAxOTk0LgotCi1mcm9tIG1hdGggaW1wb3J0ICoKLWltcG9ydCBjdXJzZXMsIHRpbWUKLQotQVNQRUNUID0gMi4yCi0KLWRlZiBzaWduKF94KToKLSAgICBpZiBfeCA8IDA6IHJldHVybiAtMQotICAgIHJldHVybiAxCi0KLWRlZiBBMlhZKGFuZ2xlLCByYWRpdXMpOgotICAgIHJldHVybiAoaW50KHJvdW5kKEFTUEVDVCAqIHJhZGl1cyAqIHNpbihhbmdsZSkpKSwKLSAgICAgICAgICAgIGludChyb3VuZChyYWRpdXMgKiBjb3MoYW5nbGUpKSkpCi0KLWRlZiBwbG90KHgsIHksIGNvbCk6Ci0gICAgc3Rkc2NyLmFkZGNoKHksIHgsIGNvbCkKLQotIyBkcmF3IGEgZGlhZ29uYWwgbGluZSB1c2luZyBCcmVzZW5oYW0ncyBhbGdvcml0aG0KLWRlZiBkbGluZShwYWlyLCBmcm9tX3gsIGZyb21feSwgeDIsIHkyLCBjaCk6Ci0gICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKLSAgICAgICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLmNvbG9yX3BhaXIocGFpcikpCi0KLSAgICBkeCA9IHgyIC0gZnJvbV94Ci0gICAgZHkgPSB5MiAtIGZyb21feQotCi0gICAgYXggPSBhYnMoZHggKiAyKQotICAgIGF5ID0gYWJzKGR5ICogMikKLQotICAgIHN4ID0gc2lnbihkeCkKLSAgICBzeSA9IHNpZ24oZHkpCi0KLSAgICB4ID0gZnJvbV94Ci0gICAgeSA9IGZyb21feQotCi0gICAgaWYgYXggPiBheToKLSAgICAgICAgZCA9IGF5IC0gYXggLy8gMgotCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBwbG90KHgsIHksIGNoKQotICAgICAgICAgICAgaWYgeCA9PSB4MjoKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgaWYgZCA+PSAwOgotICAgICAgICAgICAgICAgIHkgKz0gc3kKLSAgICAgICAgICAgICAgICBkIC09IGF4Ci0gICAgICAgICAgICB4ICs9IHN4Ci0gICAgICAgICAgICBkICs9IGF5Ci0gICAgZWxzZToKLSAgICAgICAgZCA9IGF4IC0gYXkgLy8gMgotCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBwbG90KHgsIHksIGNoKQotICAgICAgICAgICAgaWYgeSA9PSB5MjoKLSAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgaWYgZCA+PSAwOgotICAgICAgICAgICAgICAgIHggKz0gc3gKLSAgICAgICAgICAgICAgICBkIC09IGF5Ci0gICAgICAgICAgICB5ICs9IHN5Ci0gICAgICAgICAgICBkICs9IGF4Ci0KLWRlZiBtYWluKHdpbik6Ci0gICAgZ2xvYmFsIHN0ZHNjcgotICAgIHN0ZHNjciA9IHdpbgotCi0gICAgbGFzdGJlZXAgPSAtMQotICAgIG15X2JnID0gY3Vyc2VzLkNPTE9SX0JMQUNLCi0KLSAgICBzdGRzY3Iubm9kZWxheSgxKQotICAgIHN0ZHNjci50aW1lb3V0KDApCi0jICAgIGN1cnNlcy5jdXJzX3NldCgwKQotICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6Ci0gICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMSwgY3Vyc2VzLkNPTE9SX1JFRCwgbXlfYmcpCi0gICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMiwgY3Vyc2VzLkNPTE9SX01BR0VOVEEsIG15X2JnKQotICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDMsIGN1cnNlcy5DT0xPUl9HUkVFTiwgbXlfYmcpCi0KLSAgICBjeCA9IChjdXJzZXMuQ09MUyAtIDEpIC8vIDIKLSAgICBjeSA9IGN1cnNlcy5MSU5FUyAvLyAyCi0gICAgY2ggPSBtaW4oIGN5LTEsIGludChjeCAvLyBBU1BFQ1QpIC0gMSkKLSAgICBtcmFkaXVzID0gKDMgKiBjaCkgLy8gNAotICAgIGhyYWRpdXMgPSBjaCAvLyAyCi0gICAgc3JhZGl1cyA9IDUgKiBjaCAvLyA2Ci0KLSAgICBmb3IgaSBpbiByYW5nZSgwLCAxMik6Ci0gICAgICAgIHNhbmdsZSA9IChpICsgMSkgKiAyLjAgKiBwaSAvIDEyLjAKLSAgICAgICAgc2R4LCBzZHkgPSBBMlhZKHNhbmdsZSwgc3JhZGl1cykKLQotICAgICAgICBzdGRzY3IuYWRkc3RyKGN5IC0gc2R5LCBjeCArIHNkeCwgIiVkIiAlIChpICsgMSkpCi0KLSAgICBzdGRzY3IuYWRkc3RyKDAsIDAsCi0gICAgICAgICAgICAgICAgICAiQVNDSUkgQ2xvY2sgYnkgSG93YXJkIEpvbmVzIDxoYS5qb25lc0BpYy5hYy51az4sIDE5OTQiKQotCi0gICAgc3JhZGl1cyA9IG1heChzcmFkaXVzLTQsIDgpCi0KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBjdXJzZXMubmFwbXMoMTAwMCkKLQotICAgICAgICB0aW0gPSB0aW1lLnRpbWUoKQotICAgICAgICB0ID0gdGltZS5sb2NhbHRpbWUodGltKQotCi0gICAgICAgIGhvdXJzID0gdFszXSArIHRbNF0gLyA2MC4wCi0gICAgICAgIGlmIGhvdXJzID4gMTIuMDoKLSAgICAgICAgICAgIGhvdXJzIC09IDEyLjAKLQotICAgICAgICBtYW5nbGUgPSB0WzRdICogMiAqIHBpIC8gNjAuMAotICAgICAgICBtZHgsIG1keSA9IEEyWFkobWFuZ2xlLCBtcmFkaXVzKQotCi0gICAgICAgIGhhbmdsZSA9IGhvdXJzICogMiAqIHBpIC8gMTIuMAotICAgICAgICBoZHgsIGhkeSA9IEEyWFkoaGFuZ2xlLCBocmFkaXVzKQotCi0gICAgICAgIHNhbmdsZSA9IHRbNV0gKiAyICogcGkgLyA2MC4wCi0gICAgICAgIHNkeCwgc2R5ID0gQTJYWShzYW5nbGUsIHNyYWRpdXMpCi0KLSAgICAgICAgZGxpbmUoMywgY3gsIGN5LCBjeCArIG1keCwgY3kgLSBtZHksIG9yZCgnIycpKQotCi0gICAgICAgIHN0ZHNjci5hdHRyc2V0KGN1cnNlcy5BX1JFVkVSU0UpCi0gICAgICAgIGRsaW5lKDIsIGN4LCBjeSwgY3ggKyBoZHgsIGN5IC0gaGR5LCBvcmQoJy4nKSkKLSAgICAgICAgc3Rkc2NyLmF0dHJvZmYoY3Vyc2VzLkFfUkVWRVJTRSkKLQotICAgICAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgotICAgICAgICAgICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLmNvbG9yX3BhaXIoMSkpCi0KLSAgICAgICAgcGxvdChjeCArIHNkeCwgY3kgLSBzZHksIG9yZCgnTycpKQotCi0gICAgICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6Ci0gICAgICAgICAgICBzdGRzY3IuYXR0cnNldChjdXJzZXMuY29sb3JfcGFpcigwKSkKLQotICAgICAgICBzdGRzY3IuYWRkc3RyKGN1cnNlcy5MSU5FUyAtIDIsIDAsIHRpbWUuY3RpbWUodGltKSkKLSAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQotICAgICAgICBpZiAodFs1XSAlIDUpID09IDAgYW5kIHRbNV0gIT0gbGFzdGJlZXA6Ci0gICAgICAgICAgICBsYXN0YmVlcCA9IHRbNV0KLSAgICAgICAgICAgIGN1cnNlcy5iZWVwKCkKLQotICAgICAgICBjaCA9IHN0ZHNjci5nZXRjaCgpCi0gICAgICAgIGlmIGNoID09IG9yZCgncScpOgotICAgICAgICAgICAgcmV0dXJuIDAKLQotICAgICAgICBwbG90KGN4ICsgc2R4LCBjeSAtIHNkeSwgb3JkKCcgJykpCi0gICAgICAgIGRsaW5lKDAsIGN4LCBjeSwgY3ggKyBoZHgsIGN5IC0gaGR5LCBvcmQoJyAnKSkKLSAgICAgICAgZGxpbmUoMCwgY3gsIGN5LCBjeCArIG1keCwgY3kgLSBtZHksIG9yZCgnICcpKQotCi1jdXJzZXMud3JhcHBlcihtYWluKQpkaWZmIC0tZ2l0IGEvRGVtby9jdXJzZXMveG1hcy5weSBiL0RlbW8vY3Vyc2VzL3htYXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OWIzYTguLjAwMDAwMDAKLS0tIGEvRGVtby9jdXJzZXMveG1hcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDkwNiArMCwwIEBACi0jIGFzY2lpeG1hcwotIyBEZWNlbWJlciAxOTg5ICAgICAgICAgICAgIExhcnJ5IEJhcnR6ICAgICAgICAgICBJbmRpYW5hcG9saXMsIElOCi0jCi0jICRJZCQKLSMKLSMgSSdtIGRyZWFtaW5nIG9mIGFuIGFzY2lpIGNoYXJhY3Rlci1iYXNlZCBtb25vY2hyb21lIENocmlzdG1hcywKLSMgSnVzdCBsaWtlIHRoZSBvbmVzIEkgdXNlZCB0byBrbm93IQotIyBWaWEgYSBmdWxsIGR1cGxleCBjb21tdW5pY2F0aW9ucyBjaGFubmVsLAotIyBBdCA5NjAwIGJpdHMgcGVyIHNlY29uZCwKLSMgRXZlbiB0aG91Z2ggaXQncyBraW5kYSBzbG93LgotIwotIyBJJ20gZHJlYW1pbmcgb2YgYW4gYXNjaWkgY2hhcmFjdGVyLWJhc2VkIG1vbm9jaHJvbWUgQ2hyaXN0bWFzLAotIyBXaXRoIGV2J3J5IEMgcHJvZ3JhbSBJIHdyaXRlIQotIyBNYXkgeW91ciBzY3JlZW4gYmUgbWVycnkgYW5kIGJyaWdodCEKLSMgQW5kIG1heSBhbGwgeW91ciBDaHJpc3RtYXNlcyBiZSBhbWJlciBvciBncmVlbiwKLSMgKGZvciByZWR1Y2VkIGV5ZXN0cmFpbiBhbmQgaW1wcm92ZWQgdmlzaWJpbGl0eSkhCi0jCi0jCi0jIE5vdGVzIG9uIHRoZSBQeXRob24gdmVyc2lvbjoKLSMgSSB1c2VkIGEgY291cGxlIG9mIGB0cnkuLi5leGNlcHQgY3Vyc2VzLmVycm9yJyB0byBnZXQgYXJvdW5kIHNvbWUgZnVuY3Rpb25zCi0jIHJldHVybmluZyBFUlIuIFRoZSBlcnJvcnMgY29tZSBmcm9tIHVzaW5nIHdyYXBwaW5nIGZ1bmN0aW9ucyB0byBmaWxsCi0jIHdpbmRvd3MgdG8gdGhlIGxhc3QgY2hhcmFjdGVyIGNlbGwuIFRoZSBDIHZlcnNpb24gZG9lc24ndCBoYXZlIHRoaXMgcHJvYmxlbSwKLSMgaXQgc2ltcGx5IGlnbm9yZXMgYW55IHJldHVybiB2YWx1ZXMuCi0jCi0KLWltcG9ydCBjdXJzZXMKLWltcG9ydCBzeXMKLQotRlJPTVdITyA9ICJUaG9tYXMgR2VsbGVrdW0gPHRnQEZyZWVCU0Qub3JnPiIKLQotZGVmIHNldF9jb2xvcih3aW4sIGNvbG9yKToKLSAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgotICAgICAgICBuID0gY29sb3IgKyAxCi0gICAgICAgIGN1cnNlcy5pbml0X3BhaXIobiwgY29sb3IsIG15X2JnKQotICAgICAgICB3aW4uYXR0cm9mZihjdXJzZXMuQV9DT0xPUikKLSAgICAgICAgd2luLmF0dHJvbihjdXJzZXMuY29sb3JfcGFpcihuKSkKLQotZGVmIHVuc2V0X2NvbG9yKHdpbik6Ci0gICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKLSAgICAgICAgd2luLmF0dHJzZXQoY3Vyc2VzLmNvbG9yX3BhaXIoMCkpCi0KLWRlZiBsb29rX291dChtc2Vjcyk6Ci0gICAgY3Vyc2VzLm5hcG1zKG1zZWNzKQotICAgIGlmIHN0ZHNjci5nZXRjaCgpICE9IC0xOgotICAgICAgICBjdXJzZXMuYmVlcCgpCi0gICAgICAgIHN5cy5leGl0KDApCi0KLWRlZiBib3hpdCgpOgotICAgIGZvciB5IGluIHJhbmdlKDAsIDIwKToKLSAgICAgICAgc3Rkc2NyLmFkZGNoKHksIDcsIG9yZCgnfCcpKQotCi0gICAgZm9yIHggaW4gcmFuZ2UoOCwgODApOgotICAgICAgICBzdGRzY3IuYWRkY2goMTksIHgsIG9yZCgnXycpKQotCi0gICAgZm9yIHggaW4gcmFuZ2UoMCwgODApOgotICAgICAgICBzdGRzY3IuYWRkY2goMjIsIHgsIG9yZCgnXycpKQotCi0gICAgcmV0dXJuCi0KLWRlZiBzZWFzKCk6Ci0gICAgc3Rkc2NyLmFkZGNoKDQsIDEsIG9yZCgnUycpKQotICAgIHN0ZHNjci5hZGRjaCg2LCAxLCBvcmQoJ0UnKSkKLSAgICBzdGRzY3IuYWRkY2goOCwgMSwgb3JkKCdBJykpCi0gICAgc3Rkc2NyLmFkZGNoKDEwLCAxLCBvcmQoJ1MnKSkKLSAgICBzdGRzY3IuYWRkY2goMTIsIDEsIG9yZCgnTycpKQotICAgIHN0ZHNjci5hZGRjaCgxNCwgMSwgb3JkKCdOJykpCi0gICAgc3Rkc2NyLmFkZGNoKDE2LCAxLCBvcmQoIiciKSkKLSAgICBzdGRzY3IuYWRkY2goMTgsIDEsIG9yZCgnUycpKQotCi0gICAgcmV0dXJuCi0KLWRlZiBncmVldCgpOgotICAgIHN0ZHNjci5hZGRjaCgzLCA1LCBvcmQoJ0cnKSkKLSAgICBzdGRzY3IuYWRkY2goNSwgNSwgb3JkKCdSJykpCi0gICAgc3Rkc2NyLmFkZGNoKDcsIDUsIG9yZCgnRScpKQotICAgIHN0ZHNjci5hZGRjaCg5LCA1LCBvcmQoJ0UnKSkKLSAgICBzdGRzY3IuYWRkY2goMTEsIDUsIG9yZCgnVCcpKQotICAgIHN0ZHNjci5hZGRjaCgxMywgNSwgb3JkKCdJJykpCi0gICAgc3Rkc2NyLmFkZGNoKDE1LCA1LCBvcmQoJ04nKSkKLSAgICBzdGRzY3IuYWRkY2goMTcsIDUsIG9yZCgnRycpKQotICAgIHN0ZHNjci5hZGRjaCgxOSwgNSwgb3JkKCdTJykpCi0KLSAgICByZXR1cm4KLQotZGVmIGZyb213aG8oKToKLSAgICBzdGRzY3IuYWRkc3RyKDIxLCAxMywgRlJPTVdITykKLSAgICByZXR1cm4KLQotZGVmIHRyZWUoKToKLSAgICBzZXRfY29sb3IodHJlZXNjcm4sIGN1cnNlcy5DT0xPUl9HUkVFTikKLSAgICB0cmVlc2Nybi5hZGRjaCgxLCAxMSwgb3JkKCcvJykpCi0gICAgdHJlZXNjcm4uYWRkY2goMiwgMTEsIG9yZCgnLycpKQotICAgIHRyZWVzY3JuLmFkZGNoKDMsIDEwLCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg0LCA5LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg1LCA5LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg2LCA4LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg3LCA3LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg4LCA2LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg5LCA2LCBvcmQoJy8nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCgxMCwgNSwgb3JkKCcvJykpCi0gICAgdHJlZXNjcm4uYWRkY2goMTEsIDMsIG9yZCgnLycpKQotICAgIHRyZWVzY3JuLmFkZGNoKDEyLCAyLCBvcmQoJy8nKSkKLQotICAgIHRyZWVzY3JuLmFkZGNoKDEsIDEzLCBvcmQoJ1xcJykpCi0gICAgdHJlZXNjcm4uYWRkY2goMiwgMTMsIG9yZCgnXFwnKSkKLSAgICB0cmVlc2Nybi5hZGRjaCgzLCAxNCwgb3JkKCdcXCcpKQotICAgIHRyZWVzY3JuLmFkZGNoKDQsIDE1LCBvcmQoJ1xcJykpCi0gICAgdHJlZXNjcm4uYWRkY2goNSwgMTUsIG9yZCgnXFwnKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg2LCAxNiwgb3JkKCdcXCcpKQotICAgIHRyZWVzY3JuLmFkZGNoKDcsIDE3LCBvcmQoJ1xcJykpCi0gICAgdHJlZXNjcm4uYWRkY2goOCwgMTgsIG9yZCgnXFwnKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg5LCAxOCwgb3JkKCdcXCcpKQotICAgIHRyZWVzY3JuLmFkZGNoKDEwLCAxOSwgb3JkKCdcXCcpKQotICAgIHRyZWVzY3JuLmFkZGNoKDExLCAyMSwgb3JkKCdcXCcpKQotICAgIHRyZWVzY3JuLmFkZGNoKDEyLCAyMiwgb3JkKCdcXCcpKQotCi0gICAgdHJlZXNjcm4uYWRkY2goNCwgMTAsIG9yZCgnXycpKQotICAgIHRyZWVzY3JuLmFkZGNoKDQsIDE0LCBvcmQoJ18nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg4LCA3LCBvcmQoJ18nKSkKLSAgICB0cmVlc2Nybi5hZGRjaCg4LCAxNywgb3JkKCdfJykpCi0KLSAgICB0cmVlc2Nybi5hZGRzdHIoMTMsIDAsICIvLy8vLy8vLy8vLy8gXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcIikKLQotICAgIHRyZWVzY3JuLmFkZHN0cigxNCwgMTEsICJ8IHwiKQotICAgIHRyZWVzY3JuLmFkZHN0cigxNSwgMTEsICJ8X3wiKQotCi0gICAgdW5zZXRfY29sb3IodHJlZXNjcm4pCi0gICAgdHJlZXNjcm4ucmVmcmVzaCgpCi0gICAgd19kZWxfbXNnLnJlZnJlc2goKQotCi0gICAgcmV0dXJuCi0KLWRlZiBiYWxscygpOgotICAgIHRyZWVzY3JuLm92ZXJsYXkodHJlZXNjcm4yKQotCi0gICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgY3Vyc2VzLkNPTE9SX0JMVUUpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDMsIDksIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgzLCAxNSwgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDQsIDgsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg0LCAxNiwgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDUsIDcsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg1LCAxNywgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDcsIDYsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg3LCAxOCwgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDgsIDUsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg4LCAxOSwgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEwLCA0LCBvcmQoJ0AnKSkKLSAgICB0cmVlc2NybjIuYWRkY2goMTAsIDIwLCBvcmQoJ0AnKSkKLSAgICB0cmVlc2NybjIuYWRkY2goMTEsIDIsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMSwgMjIsIG9yZCgnQCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMiwgMSwgb3JkKCdAJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEyLCAyMywgb3JkKCdAJykpCi0KLSAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpCi0gICAgdHJlZXNjcm4yLnJlZnJlc2goKQotICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLSAgICByZXR1cm4KLQotZGVmIHN0YXIoKToKLSAgICB0cmVlc2NybjIuYXR0cnNldChjdXJzZXMuQV9CT0xEIHwgY3Vyc2VzLkFfQkxJTkspCi0gICAgc2V0X2NvbG9yKHRyZWVzY3JuMiwgY3Vyc2VzLkNPTE9SX1lFTExPVykKLQotICAgIHRyZWVzY3JuMi5hZGRjaCgwLCAxMiwgb3JkKCcqJykpCi0gICAgdHJlZXNjcm4yLnN0YW5kZW5kKCkKLQotICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMikKLSAgICB0cmVlc2NybjIucmVmcmVzaCgpCi0gICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgIHJldHVybgotCi1kZWYgc3RybmcxKCk6Ci0gICAgdHJlZXNjcm4yLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCB8IGN1cnNlcy5BX0JMSU5LKQotICAgIHNldF9jb2xvcih0cmVlc2NybjIsIGN1cnNlcy5DT0xPUl9XSElURSkKLQotICAgIHRyZWVzY3JuMi5hZGRjaCgzLCAxMywgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgzLCAxMiwgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDMsIDExLCBvcmQoJy4nKSkKLQotICAgIHRyZWVzY3JuMi5hdHRyb2ZmKGN1cnNlcy5BX0JPTEQgfCBjdXJzZXMuQV9CTElOSykKLSAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpCi0KLSAgICB0cmVlc2NybjIucmVmcmVzaCgpCi0gICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgIHJldHVybgotCi1kZWYgc3RybmcyKCk6Ci0gICAgdHJlZXNjcm4yLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCB8IGN1cnNlcy5BX0JMSU5LKQotICAgIHNldF9jb2xvcih0cmVlc2NybjIsIGN1cnNlcy5DT0xPUl9XSElURSkKLQotICAgIHRyZWVzY3JuMi5hZGRjaCg1LCAxNCwgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg1LCAxMywgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDUsIDEyLCBvcmQoJy4nKSkKLSAgICB0cmVlc2NybjIuYWRkY2goNSwgMTEsIG9yZCgnLCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg2LCAxMCwgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg2LCA5LCBvcmQoJzonKSkKLQotICAgIHRyZWVzY3JuMi5hdHRyb2ZmKGN1cnNlcy5BX0JPTEQgfCBjdXJzZXMuQV9CTElOSykKLSAgICB1bnNldF9jb2xvcih0cmVlc2NybjIpCi0KLSAgICB0cmVlc2NybjIucmVmcmVzaCgpCi0gICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgIHJldHVybgotCi1kZWYgc3RybmczKCk6Ci0gICAgdHJlZXNjcm4yLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCB8IGN1cnNlcy5BX0JMSU5LKQotICAgIHNldF9jb2xvcih0cmVlc2NybjIsIGN1cnNlcy5DT0xPUl9XSElURSkKLQotICAgIHRyZWVzY3JuMi5hZGRjaCg3LCAxNiwgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg3LCAxNSwgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDcsIDE0LCBvcmQoJy4nKSkKLSAgICB0cmVlc2NybjIuYWRkY2goNywgMTMsIG9yZCgnLCcpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg4LCAxMiwgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg4LCAxMSwgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDgsIDEwLCBvcmQoJy4nKSkKLSAgICB0cmVlc2NybjIuYWRkY2goOCwgOSwgb3JkKCcsJykpCi0KLSAgICB0cmVlc2NybjIuYXR0cm9mZihjdXJzZXMuQV9CT0xEIHwgY3Vyc2VzLkFfQkxJTkspCi0gICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKQotCi0gICAgdHJlZXNjcm4yLnJlZnJlc2goKQotICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLSAgICByZXR1cm4KLQotZGVmIHN0cm5nNCgpOgotICAgIHRyZWVzY3JuMi5hdHRyc2V0KGN1cnNlcy5BX0JPTEQgfCBjdXJzZXMuQV9CTElOSykKLSAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBjdXJzZXMuQ09MT1JfV0hJVEUpCi0KLSAgICB0cmVlc2NybjIuYWRkY2goOSwgMTcsIG9yZCgnXCcnKSkKLSAgICB0cmVlc2NybjIuYWRkY2goOSwgMTYsIG9yZCgnOicpKQotICAgIHRyZWVzY3JuMi5hZGRjaCg5LCAxNSwgb3JkKCcuJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDksIDE0LCBvcmQoJywnKSkKLSAgICB0cmVlc2NybjIuYWRkY2goMTAsIDEzLCBvcmQoJ1wnJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEwLCAxMiwgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEwLCAxMSwgb3JkKCcuJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEwLCAxMCwgb3JkKCcsJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDExLCA5LCBvcmQoJ1wnJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDExLCA4LCBvcmQoJzonKSkKLSAgICB0cmVlc2NybjIuYWRkY2goMTEsIDcsIG9yZCgnLicpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMSwgNiwgb3JkKCcsJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEyLCA1LCBvcmQoJ1wnJykpCi0KLSAgICB0cmVlc2NybjIuYXR0cm9mZihjdXJzZXMuQV9CT0xEIHwgY3Vyc2VzLkFfQkxJTkspCi0gICAgdW5zZXRfY29sb3IodHJlZXNjcm4yKQotCi0gICAgdHJlZXNjcm4yLnJlZnJlc2goKQotICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLSAgICByZXR1cm4KLQotZGVmIHN0cm5nNSgpOgotICAgIHRyZWVzY3JuMi5hdHRyc2V0KGN1cnNlcy5BX0JPTEQgfCBjdXJzZXMuQV9CTElOSykKLSAgICBzZXRfY29sb3IodHJlZXNjcm4yLCBjdXJzZXMuQ09MT1JfV0hJVEUpCi0KLSAgICB0cmVlc2NybjIuYWRkY2goMTEsIDE5LCBvcmQoJ1wnJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDExLCAxOCwgb3JkKCc6JykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDExLCAxNywgb3JkKCcuJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDExLCAxNiwgb3JkKCcsJykpCi0gICAgdHJlZXNjcm4yLmFkZGNoKDEyLCAxNSwgb3JkKCdcJycpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMiwgMTQsIG9yZCgnOicpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMiwgMTMsIG9yZCgnLicpKQotICAgIHRyZWVzY3JuMi5hZGRjaCgxMiwgMTIsIG9yZCgnLCcpKQotCi0gICAgdHJlZXNjcm4yLmF0dHJvZmYoY3Vyc2VzLkFfQk9MRCB8IGN1cnNlcy5BX0JMSU5LKQotICAgIHVuc2V0X2NvbG9yKHRyZWVzY3JuMikKLQotICAgICMgc2F2ZSBhIGZ1bGx5IGxpdCB0cmVlCi0gICAgdHJlZXNjcm4yLm92ZXJsYXkodHJlZXNjcm4pCi0KLSAgICB0cmVlc2NybjIucmVmcmVzaCgpCi0gICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgIHJldHVybgotCi1kZWYgYmxpbmtpdCgpOgotICAgIHRyZWVzY3JuOC50b3VjaHdpbigpCi0KLSAgICBmb3IgY3ljbGUgaW4gcmFuZ2UoNSk6Ci0gICAgICAgIGlmIGN5Y2xlID09IDA6Ci0gICAgICAgICAgICB0cmVlc2NybjMub3ZlcmxheSh0cmVlc2NybjgpCi0gICAgICAgICAgICB0cmVlc2NybjgucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBlbGlmIGN5Y2xlID09IDE6Ci0gICAgICAgICAgICB0cmVlc2NybjQub3ZlcmxheSh0cmVlc2NybjgpCi0gICAgICAgICAgICB0cmVlc2NybjgucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBlbGlmIGN5Y2xlID09IDI6Ci0gICAgICAgICAgICB0cmVlc2NybjUub3ZlcmxheSh0cmVlc2NybjgpCi0gICAgICAgICAgICB0cmVlc2NybjgucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBlbGlmIGN5Y2xlID09IDM6Ci0gICAgICAgICAgICB0cmVlc2NybjYub3ZlcmxheSh0cmVlc2NybjgpCi0gICAgICAgICAgICB0cmVlc2NybjgucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBlbGlmIGN5Y2xlID09IDQ6Ci0gICAgICAgICAgICB0cmVlc2Nybjcub3ZlcmxheSh0cmVlc2NybjgpCi0gICAgICAgICAgICB0cmVlc2NybjgucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBicmVhawotCi0gICAgICAgIHRyZWVzY3JuOC50b3VjaHdpbigpCi0KLSAgICAjIEFMTCBPTgotICAgIHRyZWVzY3JuLm92ZXJsYXkodHJlZXNjcm44KQotICAgIHRyZWVzY3JuOC5yZWZyZXNoKCkKLSAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0KLSAgICByZXR1cm4KLQotZGVmIGRlZXJfc3RlcCh3aW4sIHksIHgpOgotICAgIHdpbi5tdndpbih5LCB4KQotICAgIHdpbi5yZWZyZXNoKCkKLSAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgbG9va19vdXQoNSkKLQotZGVmIHJlaW5kZWVyKCk6Ci0gICAgeV9wb3MgPSAwCi0KLSAgICBmb3IgeF9wb3MgaW4gcmFuZ2UoNzAsIDYyLCAtMSk6Ci0gICAgICAgIGlmIHhfcG9zIDwgNjY6IHlfcG9zID0gMQotICAgICAgICBmb3IgbG9vcGVyIGluIHJhbmdlKDAsIDQpOgotICAgICAgICAgICAgZG90ZGVlcjAuYWRkY2goeV9wb3MsIHhfcG9zLCBvcmQoJy4nKSkKLSAgICAgICAgICAgIGRvdGRlZXIwLnJlZnJlc2goKQotICAgICAgICAgICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgICAgICAgICAgZG90ZGVlcjAuZXJhc2UoKQotICAgICAgICAgICAgZG90ZGVlcjAucmVmcmVzaCgpCi0gICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICBsb29rX291dCg1MCkKLQotICAgIHlfcG9zID0gMgotCi0gICAgZm9yIHhfcG9zIGluIHJhbmdlKHhfcG9zIC0gMSwgNTAsIC0xKToKLSAgICAgICAgZm9yIGxvb3BlciBpbiByYW5nZSgwLCA0KToKLSAgICAgICAgICAgIGlmIHhfcG9zIDwgNTY6Ci0gICAgICAgICAgICAgICAgeV9wb3MgPSAzCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJkZWVyMC5hZGRjaCh5X3BvcywgeF9wb3MsIG9yZCgnKicpKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBzdGFyZGVlcjAucmVmcmVzaCgpCi0gICAgICAgICAgICAgICAgd19kZWxfbXNnLnJlZnJlc2goKQotICAgICAgICAgICAgICAgIHN0YXJkZWVyMC5lcmFzZSgpCi0gICAgICAgICAgICAgICAgc3RhcmRlZXIwLnJlZnJlc2goKQotICAgICAgICAgICAgICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZG90ZGVlcjAuYWRkY2goeV9wb3MsIHhfcG9zLCBvcmQoJyonKSkKLSAgICAgICAgICAgICAgICBkb3RkZWVyMC5yZWZyZXNoKCkKLSAgICAgICAgICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0gICAgICAgICAgICAgICAgZG90ZGVlcjAuZXJhc2UoKQotICAgICAgICAgICAgICAgIGRvdGRlZXIwLnJlZnJlc2goKQotICAgICAgICAgICAgICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLQotICAgIHhfcG9zID0gNTgKLQotICAgIGZvciB5X3BvcyBpbiByYW5nZSgyLCA1KToKLSAgICAgICAgbGlsZGVlcjAudG91Y2h3aW4oKQotICAgICAgICBsaWxkZWVyMC5yZWZyZXNoKCkKLSAgICAgICAgd19kZWxfbXNnLnJlZnJlc2goKQotCi0gICAgICAgIGZvciBsb29wZXIgaW4gcmFuZ2UoMCwgNCk6Ci0gICAgICAgICAgICBkZWVyX3N0ZXAobGlsZGVlcjMsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgICAgIGRlZXJfc3RlcChsaWxkZWVyMiwgeV9wb3MsIHhfcG9zKQotICAgICAgICAgICAgZGVlcl9zdGVwKGxpbGRlZXIxLCB5X3BvcywgeF9wb3MpCi0gICAgICAgICAgICBkZWVyX3N0ZXAobGlsZGVlcjIsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgICAgIGRlZXJfc3RlcChsaWxkZWVyMywgeV9wb3MsIHhfcG9zKQotCi0gICAgICAgICAgICBsaWxkZWVyMC50b3VjaHdpbigpCi0gICAgICAgICAgICBsaWxkZWVyMC5yZWZyZXNoKCkKLSAgICAgICAgICAgIHdfZGVsX21zZy5yZWZyZXNoKCkKLQotICAgICAgICAgICAgeF9wb3MgLT0gMgotCi0gICAgeF9wb3MgPSAzNQotCi0gICAgZm9yIHlfcG9zIGluIHJhbmdlKDUsIDEwKToKLQotICAgICAgICBtaWRkZWVyMC50b3VjaHdpbigpCi0gICAgICAgIG1pZGRlZXIwLnJlZnJlc2goKQotICAgICAgICB3X2RlbF9tc2cucmVmcmVzaCgpCi0KLSAgICAgICAgZm9yIGxvb3BlciBpbiByYW5nZSgyKToKLSAgICAgICAgICAgIGRlZXJfc3RlcChtaWRkZWVyMywgeV9wb3MsIHhfcG9zKQotICAgICAgICAgICAgZGVlcl9zdGVwKG1pZGRlZXIyLCB5X3BvcywgeF9wb3MpCi0gICAgICAgICAgICBkZWVyX3N0ZXAobWlkZGVlcjEsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgICAgIGRlZXJfc3RlcChtaWRkZWVyMiwgeV9wb3MsIHhfcG9zKQotICAgICAgICAgICAgZGVlcl9zdGVwKG1pZGRlZXIzLCB5X3BvcywgeF9wb3MpCi0KLSAgICAgICAgICAgIG1pZGRlZXIwLnRvdWNod2luKCkKLSAgICAgICAgICAgIG1pZGRlZXIwLnJlZnJlc2goKQotICAgICAgICAgICAgd19kZWxfbXNnLnJlZnJlc2goKQotCi0gICAgICAgICAgICB4X3BvcyAtPSAzCi0KLSAgICBsb29rX291dCgzMDApCi0KLSAgICB5X3BvcyA9IDEKLQotICAgIGZvciB4X3BvcyBpbiByYW5nZSg4LCAxNik6Ci0gICAgICAgIGRlZXJfc3RlcChiaWdkZWVyNCwgeV9wb3MsIHhfcG9zKQotICAgICAgICBkZWVyX3N0ZXAoYmlnZGVlcjMsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgZGVlcl9zdGVwKGJpZ2RlZXIyLCB5X3BvcywgeF9wb3MpCi0gICAgICAgIGRlZXJfc3RlcChiaWdkZWVyMSwgeV9wb3MsIHhfcG9zKQotICAgICAgICBkZWVyX3N0ZXAoYmlnZGVlcjIsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgZGVlcl9zdGVwKGJpZ2RlZXIzLCB5X3BvcywgeF9wb3MpCi0gICAgICAgIGRlZXJfc3RlcChiaWdkZWVyNCwgeV9wb3MsIHhfcG9zKQotICAgICAgICBkZWVyX3N0ZXAoYmlnZGVlcjAsIHlfcG9zLCB4X3BvcykKLQotICAgIHhfcG9zIC09IDEKLQotICAgIGZvciBsb29wZXIgaW4gcmFuZ2UoMCwgNik6Ci0gICAgICAgIGRlZXJfc3RlcChsb29rZGVlcjQsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgZGVlcl9zdGVwKGxvb2tkZWVyMywgeV9wb3MsIHhfcG9zKQotICAgICAgICBkZWVyX3N0ZXAobG9va2RlZXIyLCB5X3BvcywgeF9wb3MpCi0gICAgICAgIGRlZXJfc3RlcChsb29rZGVlcjEsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgZGVlcl9zdGVwKGxvb2tkZWVyMiwgeV9wb3MsIHhfcG9zKQotICAgICAgICBkZWVyX3N0ZXAobG9va2RlZXIzLCB5X3BvcywgeF9wb3MpCi0gICAgICAgIGRlZXJfc3RlcChsb29rZGVlcjQsIHlfcG9zLCB4X3BvcykKLQotICAgIGRlZXJfc3RlcChsb29rZGVlcjAsIHlfcG9zLCB4X3BvcykKLQotICAgIGZvciB5X3BvcyBpbiByYW5nZSh5X3BvcywgMTApOgotICAgICAgICBmb3IgbG9vcGVyIGluIHJhbmdlKDAsIDIpOgotICAgICAgICAgICAgZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpCi0gICAgICAgICAgICBkZWVyX3N0ZXAoYmlnZGVlcjMsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgICAgIGRlZXJfc3RlcChiaWdkZWVyMiwgeV9wb3MsIHhfcG9zKQotICAgICAgICAgICAgZGVlcl9zdGVwKGJpZ2RlZXIxLCB5X3BvcywgeF9wb3MpCi0gICAgICAgICAgICBkZWVyX3N0ZXAoYmlnZGVlcjIsIHlfcG9zLCB4X3BvcykKLSAgICAgICAgICAgIGRlZXJfc3RlcChiaWdkZWVyMywgeV9wb3MsIHhfcG9zKQotICAgICAgICAgICAgZGVlcl9zdGVwKGJpZ2RlZXI0LCB5X3BvcywgeF9wb3MpCi0gICAgICAgIGRlZXJfc3RlcChiaWdkZWVyMCwgeV9wb3MsIHhfcG9zKQotCi0gICAgeV9wb3MgLT0gMQotCi0gICAgZGVlcl9zdGVwKGxvb2tkZWVyMywgeV9wb3MsIHhfcG9zKQotICAgIHJldHVybgotCi1kZWYgbWFpbih3aW4pOgotICAgIGdsb2JhbCBzdGRzY3IKLSAgICBzdGRzY3IgPSB3aW4KLQotICAgIGdsb2JhbCBteV9iZywgeV9wb3MsIHhfcG9zCi0gICAgZ2xvYmFsIHRyZWVzY3JuLCB0cmVlc2NybjIsIHRyZWVzY3JuMywgdHJlZXNjcm40Ci0gICAgZ2xvYmFsIHRyZWVzY3JuNSwgdHJlZXNjcm42LCB0cmVlc2NybjcsIHRyZWVzY3JuOAotICAgIGdsb2JhbCBkb3RkZWVyMCwgc3RhcmRlZXIwCi0gICAgZ2xvYmFsIGxpbGRlZXIwLCBsaWxkZWVyMSwgbGlsZGVlcjIsIGxpbGRlZXIzCi0gICAgZ2xvYmFsIG1pZGRlZXIwLCBtaWRkZWVyMSwgbWlkZGVlcjIsIG1pZGRlZXIzCi0gICAgZ2xvYmFsIGJpZ2RlZXIwLCBiaWdkZWVyMSwgYmlnZGVlcjIsIGJpZ2RlZXIzLCBiaWdkZWVyNAotICAgIGdsb2JhbCBsb29rZGVlcjAsIGxvb2tkZWVyMSwgbG9va2RlZXIyLCBsb29rZGVlcjMsIGxvb2tkZWVyNAotICAgIGdsb2JhbCB3X2hvbGlkYXksIHdfZGVsX21zZwotCi0gICAgbXlfYmcgPSBjdXJzZXMuQ09MT1JfQkxBQ0sKLSAgICAjIGN1cnNlcy5jdXJzX3NldCgwKQotCi0gICAgdHJlZXNjcm4gPSBjdXJzZXMubmV3d2luKDE2LCAyNywgMywgNTMpCi0gICAgdHJlZXNjcm4yID0gY3Vyc2VzLm5ld3dpbigxNiwgMjcsIDMsIDUzKQotICAgIHRyZWVzY3JuMyA9IGN1cnNlcy5uZXd3aW4oMTYsIDI3LCAzLCA1MykKLSAgICB0cmVlc2NybjQgPSBjdXJzZXMubmV3d2luKDE2LCAyNywgMywgNTMpCi0gICAgdHJlZXNjcm41ID0gY3Vyc2VzLm5ld3dpbigxNiwgMjcsIDMsIDUzKQotICAgIHRyZWVzY3JuNiA9IGN1cnNlcy5uZXd3aW4oMTYsIDI3LCAzLCA1MykKLSAgICB0cmVlc2NybjcgPSBjdXJzZXMubmV3d2luKDE2LCAyNywgMywgNTMpCi0gICAgdHJlZXNjcm44ID0gY3Vyc2VzLm5ld3dpbigxNiwgMjcsIDMsIDUzKQotCi0gICAgZG90ZGVlcjAgPSBjdXJzZXMubmV3d2luKDMsIDcxLCAwLCA4KQotCi0gICAgc3RhcmRlZXIwID0gY3Vyc2VzLm5ld3dpbig0LCA1NiwgMCwgOCkKLQotICAgIGxpbGRlZXIwID0gY3Vyc2VzLm5ld3dpbig3LCA1MywgMCwgOCkKLSAgICBsaWxkZWVyMSA9IGN1cnNlcy5uZXd3aW4oMiwgNCwgMCwgMCkKLSAgICBsaWxkZWVyMiA9IGN1cnNlcy5uZXd3aW4oMiwgNCwgMCwgMCkKLSAgICBsaWxkZWVyMyA9IGN1cnNlcy5uZXd3aW4oMiwgNCwgMCwgMCkKLQotICAgIG1pZGRlZXIwID0gY3Vyc2VzLm5ld3dpbigxNSwgNDIsIDAsIDgpCi0gICAgbWlkZGVlcjEgPSBjdXJzZXMubmV3d2luKDMsIDcsIDAsIDApCi0gICAgbWlkZGVlcjIgPSBjdXJzZXMubmV3d2luKDMsIDcsIDAsIDApCi0gICAgbWlkZGVlcjMgPSBjdXJzZXMubmV3d2luKDMsIDcsIDAsIDApCi0KLSAgICBiaWdkZWVyMCA9IGN1cnNlcy5uZXd3aW4oMTAsIDIzLCAwLCAwKQotICAgIGJpZ2RlZXIxID0gY3Vyc2VzLm5ld3dpbigxMCwgMjMsIDAsIDApCi0gICAgYmlnZGVlcjIgPSBjdXJzZXMubmV3d2luKDEwLCAyMywgMCwgMCkKLSAgICBiaWdkZWVyMyA9IGN1cnNlcy5uZXd3aW4oMTAsIDIzLCAwLCAwKQotICAgIGJpZ2RlZXI0ID0gY3Vyc2VzLm5ld3dpbigxMCwgMjMsIDAsIDApCi0KLSAgICBsb29rZGVlcjAgPSBjdXJzZXMubmV3d2luKDEwLCAyNSwgMCwgMCkKLSAgICBsb29rZGVlcjEgPSBjdXJzZXMubmV3d2luKDEwLCAyNSwgMCwgMCkKLSAgICBsb29rZGVlcjIgPSBjdXJzZXMubmV3d2luKDEwLCAyNSwgMCwgMCkKLSAgICBsb29rZGVlcjMgPSBjdXJzZXMubmV3d2luKDEwLCAyNSwgMCwgMCkKLSAgICBsb29rZGVlcjQgPSBjdXJzZXMubmV3d2luKDEwLCAyNSwgMCwgMCkKLQotICAgIHdfaG9saWRheSA9IGN1cnNlcy5uZXd3aW4oMSwgMjcsIDMsIDI3KQotCi0gICAgd19kZWxfbXNnID0gY3Vyc2VzLm5ld3dpbigxLCAyMCwgMjMsIDYwKQotCi0gICAgdHJ5OgotICAgICAgICB3X2RlbF9tc2cuYWRkc3RyKDAsIDAsICJIaXQgYW55IGtleSB0byBxdWl0IikKLSAgICBleGNlcHQgY3Vyc2VzLmVycm9yOgotICAgICAgICBwYXNzCi0KLSAgICB0cnk6Ci0gICAgICAgIHdfaG9saWRheS5hZGRzdHIoMCwgMCwgIkggQSBQIFAgWSAgSCBPIEwgSSBEIEEgWSBTIikKLSAgICBleGNlcHQgY3Vyc2VzLmVycm9yOgotICAgICAgICBwYXNzCi0KLSAgICAjIHNldCB1cCB0aGUgd2luZG93cyBmb3Igb3VyIHZhcmlvdXMgcmVpbmRlZXIKLSAgICBsaWxkZWVyMS5hZGRjaCgwLCAwLCBvcmQoJ1YnKSkKLSAgICBsaWxkZWVyMS5hZGRjaCgxLCAwLCBvcmQoJ0AnKSkKLSAgICBsaWxkZWVyMS5hZGRjaCgxLCAxLCBvcmQoJzwnKSkKLSAgICBsaWxkZWVyMS5hZGRjaCgxLCAyLCBvcmQoJz4nKSkKLSAgICB0cnk6Ci0gICAgICAgIGxpbGRlZXIxLmFkZGNoKDEsIDMsIG9yZCgnficpKQotICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6Ci0gICAgICAgIHBhc3MKLQotICAgIGxpbGRlZXIyLmFkZGNoKDAsIDAsIG9yZCgnVicpKQotICAgIGxpbGRlZXIyLmFkZGNoKDEsIDAsIG9yZCgnQCcpKQotICAgIGxpbGRlZXIyLmFkZGNoKDEsIDEsIG9yZCgnfCcpKQotICAgIGxpbGRlZXIyLmFkZGNoKDEsIDIsIG9yZCgnfCcpKQotICAgIHRyeToKLSAgICAgICAgbGlsZGVlcjIuYWRkY2goMSwgMywgb3JkKCd+JykpCi0gICAgZXhjZXB0IGN1cnNlcy5lcnJvcjoKLSAgICAgICAgcGFzcwotCi0gICAgbGlsZGVlcjMuYWRkY2goMCwgMCwgb3JkKCdWJykpCi0gICAgbGlsZGVlcjMuYWRkY2goMSwgMCwgb3JkKCdAJykpCi0gICAgbGlsZGVlcjMuYWRkY2goMSwgMSwgb3JkKCc+JykpCi0gICAgbGlsZGVlcjMuYWRkY2goMSwgMiwgb3JkKCc8JykpCi0gICAgdHJ5OgotICAgICAgICBsaWxkZWVyMi5hZGRjaCgxLCAzLCBvcmQoJ34nKSkgICMgWFhYCi0gICAgZXhjZXB0IGN1cnNlcy5lcnJvcjoKLSAgICAgICAgcGFzcwotCi0gICAgbWlkZGVlcjEuYWRkY2goMCwgMiwgb3JkKCd5JykpCi0gICAgbWlkZGVlcjEuYWRkY2goMCwgMywgb3JkKCd5JykpCi0gICAgbWlkZGVlcjEuYWRkY2goMSwgMiwgb3JkKCcwJykpCi0gICAgbWlkZGVlcjEuYWRkY2goMSwgMywgb3JkKCcoJykpCi0gICAgbWlkZGVlcjEuYWRkY2goMSwgNCwgb3JkKCc9JykpCi0gICAgbWlkZGVlcjEuYWRkY2goMSwgNSwgb3JkKCcpJykpCi0gICAgbWlkZGVlcjEuYWRkY2goMSwgNiwgb3JkKCd+JykpCi0gICAgbWlkZGVlcjEuYWRkY2goMiwgMywgb3JkKCdcXCcpKQotICAgIG1pZGRlZXIxLmFkZGNoKDIsIDUsIG9yZCgnLycpKQotCi0gICAgbWlkZGVlcjIuYWRkY2goMCwgMiwgb3JkKCd5JykpCi0gICAgbWlkZGVlcjIuYWRkY2goMCwgMywgb3JkKCd5JykpCi0gICAgbWlkZGVlcjIuYWRkY2goMSwgMiwgb3JkKCcwJykpCi0gICAgbWlkZGVlcjIuYWRkY2goMSwgMywgb3JkKCcoJykpCi0gICAgbWlkZGVlcjIuYWRkY2goMSwgNCwgb3JkKCc9JykpCi0gICAgbWlkZGVlcjIuYWRkY2goMSwgNSwgb3JkKCcpJykpCi0gICAgbWlkZGVlcjIuYWRkY2goMSwgNiwgb3JkKCd+JykpCi0gICAgbWlkZGVlcjIuYWRkY2goMiwgMywgb3JkKCd8JykpCi0gICAgbWlkZGVlcjIuYWRkY2goMiwgNSwgb3JkKCd8JykpCi0KLSAgICBtaWRkZWVyMy5hZGRjaCgwLCAyLCBvcmQoJ3knKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgwLCAzLCBvcmQoJ3knKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgxLCAyLCBvcmQoJzAnKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgxLCAzLCBvcmQoJygnKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgxLCA0LCBvcmQoJz0nKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgxLCA1LCBvcmQoJyknKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgxLCA2LCBvcmQoJ34nKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgyLCAzLCBvcmQoJy8nKSkKLSAgICBtaWRkZWVyMy5hZGRjaCgyLCA1LCBvcmQoJ1xcJykpCi0KLSAgICBiaWdkZWVyMS5hZGRjaCgwLCAxNywgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDAsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMS5hZGRjaCgwLCAxOSwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDAsIDIwLCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMS5hZGRjaCgxLCAxOCwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDEsIDIwLCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMS5hZGRjaCgyLCAxOSwgb3JkKCd8JykpCi0gICAgYmlnZGVlcjEuYWRkY2goMiwgMjAsIG9yZCgnXycpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDMsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMS5hZGRjaCgzLCAxOSwgb3JkKCdeJykpCi0gICAgYmlnZGVlcjEuYWRkY2goMywgMjAsIG9yZCgnMCcpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDMsIDIxLCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjEuYWRkY2goNCwgMTcsIG9yZCgnLycpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDQsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMS5hZGRjaCg0LCAxOSwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIxLmFkZGNoKDQsIDIyLCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjEuYWRkc3RyKDUsIDcsICJefn5+fn5+fn4vLyAgfn5VIikKLSAgICBiaWdkZWVyMS5hZGRzdHIoNiwgNywgIiggXFxfX19fXyggLyIpICAgICAgICMgKSkKLSAgICBiaWdkZWVyMS5hZGRzdHIoNywgOCwgIiggKSAgICAvIikKLSAgICBiaWdkZWVyMS5hZGRzdHIoOCwgOSwgIlxcXFwgICAvIikKLSAgICBiaWdkZWVyMS5hZGRzdHIoOSwgMTEsICJcXD4vPiIpCi0KLSAgICBiaWdkZWVyMi5hZGRjaCgwLCAxNywgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDAsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMi5hZGRjaCgwLCAxOSwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDAsIDIwLCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMi5hZGRjaCgxLCAxOCwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDEsIDIwLCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMi5hZGRjaCgyLCAxOSwgb3JkKCd8JykpCi0gICAgYmlnZGVlcjIuYWRkY2goMiwgMjAsIG9yZCgnXycpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDMsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMi5hZGRjaCgzLCAxOSwgb3JkKCdeJykpCi0gICAgYmlnZGVlcjIuYWRkY2goMywgMjAsIG9yZCgnMCcpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDMsIDIxLCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjIuYWRkY2goNCwgMTcsIG9yZCgnLycpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDQsIDE4LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMi5hZGRjaCg0LCAxOSwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIyLmFkZGNoKDQsIDIyLCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjIuYWRkc3RyKDUsIDcsICJefn5+fn5+fn4vLyAgfn5VIikKLSAgICBiaWdkZWVyMi5hZGRzdHIoNiwgNywgIigoIClfX19fKCAvIikgICAgICAgICMgKSkKLSAgICBiaWdkZWVyMi5hZGRzdHIoNywgNywgIiggLyAgICB8IikKLSAgICBiaWdkZWVyMi5hZGRzdHIoOCwgOCwgIlxcLyAgICB8IikKLSAgICBiaWdkZWVyMi5hZGRzdHIoOSwgOSwgInw+ICAgfD4iKQotCi0gICAgYmlnZGVlcjMuYWRkY2goMCwgMTcsIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyMy5hZGRjaCgwLCAxOCwgb3JkKCcvJykpCi0gICAgYmlnZGVlcjMuYWRkY2goMCwgMTksIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyMy5hZGRjaCgwLCAyMCwgb3JkKCcvJykpCi0gICAgYmlnZGVlcjMuYWRkY2goMSwgMTgsIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyMy5hZGRjaCgxLCAyMCwgb3JkKCcvJykpCi0gICAgYmlnZGVlcjMuYWRkY2goMiwgMTksIG9yZCgnfCcpKQotICAgIGJpZ2RlZXIzLmFkZGNoKDIsIDIwLCBvcmQoJ18nKSkKLSAgICBiaWdkZWVyMy5hZGRjaCgzLCAxOCwgb3JkKCcvJykpCi0gICAgYmlnZGVlcjMuYWRkY2goMywgMTksIG9yZCgnXicpKQotICAgIGJpZ2RlZXIzLmFkZGNoKDMsIDIwLCBvcmQoJzAnKSkKLSAgICBiaWdkZWVyMy5hZGRjaCgzLCAyMSwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIzLmFkZGNoKDQsIDE3LCBvcmQoJy8nKSkKLSAgICBiaWdkZWVyMy5hZGRjaCg0LCAxOCwgb3JkKCcvJykpCi0gICAgYmlnZGVlcjMuYWRkY2goNCwgMTksIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyMy5hZGRjaCg0LCAyMiwgb3JkKCdcXCcpKQotICAgIGJpZ2RlZXIzLmFkZHN0cig1LCA3LCAiXn5+fn5+fn5+Ly8gIH5+VSIpCi0gICAgYmlnZGVlcjMuYWRkc3RyKDYsIDYsICIoICgpX19fX18oIC8iKSAgICAgICAjICkpCi0gICAgYmlnZGVlcjMuYWRkc3RyKDcsIDYsICIvIC8gICAgICAgLyIpCi0gICAgYmlnZGVlcjMuYWRkc3RyKDgsIDUsICJ8LyAgICAgICAgICBcXCIpCi0gICAgYmlnZGVlcjMuYWRkc3RyKDksIDUsICIvPiAgICAgICAgICAgXFw+IikKLQotICAgIGJpZ2RlZXI0LmFkZGNoKDAsIDE3LCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjQuYWRkY2goMCwgMTgsIG9yZCgnLycpKQotICAgIGJpZ2RlZXI0LmFkZGNoKDAsIDE5LCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjQuYWRkY2goMCwgMjAsIG9yZCgnLycpKQotICAgIGJpZ2RlZXI0LmFkZGNoKDEsIDE4LCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjQuYWRkY2goMSwgMjAsIG9yZCgnLycpKQotICAgIGJpZ2RlZXI0LmFkZGNoKDIsIDE5LCBvcmQoJ3wnKSkKLSAgICBiaWdkZWVyNC5hZGRjaCgyLCAyMCwgb3JkKCdfJykpCi0gICAgYmlnZGVlcjQuYWRkY2goMywgMTgsIG9yZCgnLycpKQotICAgIGJpZ2RlZXI0LmFkZGNoKDMsIDE5LCBvcmQoJ14nKSkKLSAgICBiaWdkZWVyNC5hZGRjaCgzLCAyMCwgb3JkKCcwJykpCi0gICAgYmlnZGVlcjQuYWRkY2goMywgMjEsIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyNC5hZGRjaCg0LCAxNywgb3JkKCcvJykpCi0gICAgYmlnZGVlcjQuYWRkY2goNCwgMTgsIG9yZCgnLycpKQotICAgIGJpZ2RlZXI0LmFkZGNoKDQsIDE5LCBvcmQoJ1xcJykpCi0gICAgYmlnZGVlcjQuYWRkY2goNCwgMjIsIG9yZCgnXFwnKSkKLSAgICBiaWdkZWVyNC5hZGRzdHIoNSwgNywgIl5+fn5+fn5+fi8vICB+flUiKQotICAgIGJpZ2RlZXI0LmFkZHN0cig2LCA2LCAiKCApX19fX19fKCAvIikgICAgICAgIyApCi0gICAgYmlnZGVlcjQuYWRkc3RyKDcsIDUsICIoLyAgICAgICAgICBcXCIpICAgICAjICkKLSAgICBiaWdkZWVyNC5hZGRzdHIoOCwgMCwgInZfX189ICAgICAgICAgICAgIC0tLS1eIikKLQotICAgIGxvb2tkZWVyMS5hZGRzdHIoMCwgMTYsICJcXC8gICAgIFxcLyIpCi0gICAgbG9va2RlZXIxLmFkZHN0cigxLCAxNywgIlxcWS8gXFxZLyIpCi0gICAgbG9va2RlZXIxLmFkZHN0cigyLCAxOSwgIlxcPS8iKQotICAgIGxvb2tkZWVyMS5hZGRzdHIoMywgMTcsICJeXFxvIG8vXiIpCi0gICAgbG9va2RlZXIxLmFkZHN0cig0LCAxNywgIi8vKCApIikKLSAgICBsb29rZGVlcjEuYWRkc3RyKDUsIDcsICJefn5+fn5+fn4vLyBcXE8vIikKLSAgICBsb29rZGVlcjEuYWRkc3RyKDYsIDcsICIoIFxcX19fX18oIC8iKSAgICAgICMgKSkKLSAgICBsb29rZGVlcjEuYWRkc3RyKDcsIDgsICIoICkgICAgLyIpCi0gICAgbG9va2RlZXIxLmFkZHN0cig4LCA5LCAiXFxcXCAgIC8iKQotICAgIGxvb2tkZWVyMS5hZGRzdHIoOSwgMTEsICJcXD4vPiIpCi0KLSAgICBsb29rZGVlcjIuYWRkc3RyKDAsIDE2LCAiXFwvICAgICBcXC8iKQotICAgIGxvb2tkZWVyMi5hZGRzdHIoMSwgMTcsICJcXFkvIFxcWS8iKQotICAgIGxvb2tkZWVyMi5hZGRzdHIoMiwgMTksICJcXD0vIikKLSAgICBsb29rZGVlcjIuYWRkc3RyKDMsIDE3LCAiXlxcbyBvL14iKQotICAgIGxvb2tkZWVyMi5hZGRzdHIoNCwgMTcsICIvLyggKSIpCi0gICAgbG9va2RlZXIyLmFkZHN0cig1LCA3LCAiXn5+fn5+fn5+Ly8gXFxPLyIpCi0gICAgbG9va2RlZXIyLmFkZHN0cig2LCA3LCAiKCggKV9fX18oIC8iKSAgICAgICAjICkpCi0gICAgbG9va2RlZXIyLmFkZHN0cig3LCA3LCAiKCAvICAgIHwiKQotICAgIGxvb2tkZWVyMi5hZGRzdHIoOCwgOCwgIlxcLyAgICB8IikKLSAgICBsb29rZGVlcjIuYWRkc3RyKDksIDksICJ8PiAgIHw+IikKLQotICAgIGxvb2tkZWVyMy5hZGRzdHIoMCwgMTYsICJcXC8gICAgIFxcLyIpCi0gICAgbG9va2RlZXIzLmFkZHN0cigxLCAxNywgIlxcWS8gXFxZLyIpCi0gICAgbG9va2RlZXIzLmFkZHN0cigyLCAxOSwgIlxcPS8iKQotICAgIGxvb2tkZWVyMy5hZGRzdHIoMywgMTcsICJeXFxvIG8vXiIpCi0gICAgbG9va2RlZXIzLmFkZHN0cig0LCAxNywgIi8vKCApIikKLSAgICBsb29rZGVlcjMuYWRkc3RyKDUsIDcsICJefn5+fn5+fn4vLyBcXE8vIikKLSAgICBsb29rZGVlcjMuYWRkc3RyKDYsIDYsICIoICgpX19fX18oIC8iKSAgICAgICMgKSkKLSAgICBsb29rZGVlcjMuYWRkc3RyKDcsIDYsICIvIC8gICAgICAgLyIpCi0gICAgbG9va2RlZXIzLmFkZHN0cig4LCA1LCAifC8gICAgICAgICAgXFwiKQotICAgIGxvb2tkZWVyMy5hZGRzdHIoOSwgNSwgIi8+ICAgICAgICAgICBcXD4iKQotCi0gICAgbG9va2RlZXI0LmFkZHN0cigwLCAxNiwgIlxcLyAgICAgXFwvIikKLSAgICBsb29rZGVlcjQuYWRkc3RyKDEsIDE3LCAiXFxZLyBcXFkvIikKLSAgICBsb29rZGVlcjQuYWRkc3RyKDIsIDE5LCAiXFw9LyIpCi0gICAgbG9va2RlZXI0LmFkZHN0cigzLCAxNywgIl5cXG8gby9eIikKLSAgICBsb29rZGVlcjQuYWRkc3RyKDQsIDE3LCAiLy8oICkiKQotICAgIGxvb2tkZWVyNC5hZGRzdHIoNSwgNywgIl5+fn5+fn5+fi8vIFxcTy8iKQotICAgIGxvb2tkZWVyNC5hZGRzdHIoNiwgNiwgIiggKV9fX19fXyggLyIpICAgICAgIyApCi0gICAgbG9va2RlZXI0LmFkZHN0cig3LCA1LCAiKC8gICAgICAgICAgXFwiKSAgICAjICkKLSAgICBsb29rZGVlcjQuYWRkc3RyKDgsIDAsICJ2X19fPSAgICAgICAgICAgICAtLS0tXiIpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgIGN1cnNlcy5jYnJlYWsoKQotICAgIHN0ZHNjci5ub2RlbGF5KDEpCi0KLSAgICB3aGlsZSAxOgotICAgICAgICBzdGRzY3IuY2xlYXIoKQotICAgICAgICB0cmVlc2Nybi5lcmFzZSgpCi0gICAgICAgIHdfZGVsX21zZy50b3VjaHdpbigpCi0gICAgICAgIHRyZWVzY3JuLnRvdWNod2luKCkKLSAgICAgICAgdHJlZXNjcm4yLmVyYXNlKCkKLSAgICAgICAgdHJlZXNjcm4yLnRvdWNod2luKCkKLSAgICAgICAgdHJlZXNjcm44LmVyYXNlKCkKLSAgICAgICAgdHJlZXNjcm44LnRvdWNod2luKCkKLSAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQotICAgICAgICBsb29rX291dCgxNTApCi0gICAgICAgIGJveGl0KCkKLSAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQotICAgICAgICBsb29rX291dCgxNTApCi0gICAgICAgIHNlYXMoKQotICAgICAgICBzdGRzY3IucmVmcmVzaCgpCi0gICAgICAgIGdyZWV0KCkKLSAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQotICAgICAgICBsb29rX291dCgxNTApCi0gICAgICAgIGZyb213aG8oKQotICAgICAgICBzdGRzY3IucmVmcmVzaCgpCi0gICAgICAgIGxvb2tfb3V0KDE1MCkKLSAgICAgICAgdHJlZSgpCi0gICAgICAgIGxvb2tfb3V0KDE1MCkKLSAgICAgICAgYmFsbHMoKQotICAgICAgICBsb29rX291dCgxNTApCi0gICAgICAgIHN0YXIoKQotICAgICAgICBsb29rX291dCgxNTApCi0gICAgICAgIHN0cm5nMSgpCi0gICAgICAgIHN0cm5nMigpCi0gICAgICAgIHN0cm5nMygpCi0gICAgICAgIHN0cm5nNCgpCi0gICAgICAgIHN0cm5nNSgpCi0KLSAgICAgICAgIyBzZXQgdXAgdGhlIHdpbmRvd3MgZm9yIG91ciBibGlua2luZyB0cmVlcwotICAgICAgICAjCi0gICAgICAgICMgdHJlZXNjcm4zCi0gICAgICAgIHRyZWVzY3JuLm92ZXJsYXkodHJlZXNjcm4zKQotCi0gICAgICAgICMgYmFsbHMKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDQsIDE4LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDcsIDYsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjMuYWRkY2goOCwgMTksIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjMuYWRkY2goMTEsIDIyLCBvcmQoJyAnKSkKLQotICAgICAgICAjIHN0YXIKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDAsIDEyLCBvcmQoJyonKSkKLQotICAgICAgICAjIHN0cm5nMQotICAgICAgICB0cmVlc2NybjMuYWRkY2goMywgMTEsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RybmcyCi0gICAgICAgIHRyZWVzY3JuMy5hZGRjaCg1LCAxMywgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuMy5hZGRjaCg2LCAxMCwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzMKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDcsIDE2LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDcsIDE0LCBvcmQoJyAnKSkKLQotICAgICAgICAjIHN0cm5nNAotICAgICAgICB0cmVlc2NybjMuYWRkY2goMTAsIDEzLCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDEwLCAxMCwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuMy5hZGRjaCgxMSwgOCwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzUKLSAgICAgICAgdHJlZXNjcm4zLmFkZGNoKDExLCAxOCwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuMy5hZGRjaCgxMiwgMTMsIG9yZCgnICcpKQotCi0gICAgICAgICMgdHJlZXNjcm40Ci0gICAgICAgIHRyZWVzY3JuLm92ZXJsYXkodHJlZXNjcm40KQotCi0gICAgICAgICMgYmFsbHMKLSAgICAgICAgdHJlZXNjcm40LmFkZGNoKDMsIDksIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goNCwgMTYsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goNywgNiwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCg4LCAxOSwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCgxMSwgMiwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCgxMiwgMjMsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RhcgotICAgICAgICB0cmVlc2NybjQuc3RhbmRvdXQoKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goMCwgMTIsIG9yZCgnKicpKQotICAgICAgICB0cmVlc2NybjQuc3RhbmRlbmQoKQotCi0gICAgICAgICMgc3RybmcxCi0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCgzLCAxMywgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzIKLQotICAgICAgICAjIHN0cm5nMwotICAgICAgICB0cmVlc2NybjQuYWRkY2goNywgMTUsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goOCwgMTEsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3Rybmc0Ci0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCg5LCAxNiwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCgxMCwgMTIsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goMTEsIDgsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3Rybmc1Ci0gICAgICAgIHRyZWVzY3JuNC5hZGRjaCgxMSwgMTgsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjQuYWRkY2goMTIsIDE0LCBvcmQoJyAnKSkKLQotICAgICAgICAjIHRyZWVzY3JuNQotICAgICAgICB0cmVlc2Nybi5vdmVybGF5KHRyZWVzY3JuNSkKLQotICAgICAgICAjIGJhbGxzCi0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCgzLCAxNSwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCgxMCwgMjAsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjUuYWRkY2goMTIsIDEsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RhcgotICAgICAgICB0cmVlc2NybjUuYWRkY2goMCwgMTIsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RybmcxCi0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCgzLCAxMSwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzIKLSAgICAgICAgdHJlZXNjcm41LmFkZGNoKDUsIDEyLCBvcmQoJyAnKSkKLQotICAgICAgICAjIHN0cm5nMwotICAgICAgICB0cmVlc2NybjUuYWRkY2goNywgMTQsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjUuYWRkY2goOCwgMTAsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3Rybmc0Ci0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCg5LCAxNSwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCgxMCwgMTEsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjUuYWRkY2goMTEsIDcsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3Rybmc1Ci0gICAgICAgIHRyZWVzY3JuNS5hZGRjaCgxMSwgMTcsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjUuYWRkY2goMTIsIDEzLCBvcmQoJyAnKSkKLQotICAgICAgICAjIHRyZWVzY3JuNgotICAgICAgICB0cmVlc2Nybi5vdmVybGF5KHRyZWVzY3JuNikKLQotICAgICAgICAjIGJhbGxzCi0gICAgICAgIHRyZWVzY3JuNi5hZGRjaCg2LCA3LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm42LmFkZGNoKDcsIDE4LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm42LmFkZGNoKDEwLCA0LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm42LmFkZGNoKDExLCAyMywgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdGFyCi0gICAgICAgIHRyZWVzY3JuNi5zdGFuZG91dCgpCi0gICAgICAgIHRyZWVzY3JuNi5hZGRjaCgwLCAxMiwgb3JkKCcqJykpCi0gICAgICAgIHRyZWVzY3JuNi5zdGFuZGVuZCgpCi0KLSAgICAgICAgIyBzdHJuZzEKLQotICAgICAgICAjIHN0cm5nMgotICAgICAgICB0cmVlc2NybjYuYWRkY2goNSwgMTEsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RybmczCi0gICAgICAgIHRyZWVzY3JuNi5hZGRjaCg3LCAxMywgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNi5hZGRjaCg4LCA5LCBvcmQoJyAnKSkKLQotICAgICAgICAjIHN0cm5nNAotICAgICAgICB0cmVlc2NybjYuYWRkY2goOSwgMTQsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjYuYWRkY2goMTAsIDEwLCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm42LmFkZGNoKDExLCA2LCBvcmQoJyAnKSkKLQotICAgICAgICAjIHN0cm5nNQotICAgICAgICB0cmVlc2NybjYuYWRkY2goMTEsIDE2LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm42LmFkZGNoKDEyLCAxMiwgb3JkKCcgJykpCi0KLSAgICAgICAgIyAgdHJlZXNjcm43Ci0KLSAgICAgICAgdHJlZXNjcm4ub3ZlcmxheSh0cmVlc2NybjcpCi0KLSAgICAgICAgIyBiYWxscwotICAgICAgICB0cmVlc2NybjcuYWRkY2goMywgMTUsIG9yZCgnICcpKQotICAgICAgICB0cmVlc2NybjcuYWRkY2goNiwgNywgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCg3LCAxOCwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCgxMCwgNCwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCgxMSwgMjIsIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RhcgotICAgICAgICB0cmVlc2NybjcuYWRkY2goMCwgMTIsIG9yZCgnKicpKQotCi0gICAgICAgICMgc3RybmcxCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCgzLCAxMiwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzIKLSAgICAgICAgdHJlZXNjcm43LmFkZGNoKDUsIDEzLCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm43LmFkZGNoKDYsIDksIG9yZCgnICcpKQotCi0gICAgICAgICMgc3RybmczCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCg3LCAxNSwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCg4LCAxMSwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzQKLSAgICAgICAgdHJlZXNjcm43LmFkZGNoKDksIDE2LCBvcmQoJyAnKSkKLSAgICAgICAgdHJlZXNjcm43LmFkZGNoKDEwLCAxMiwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCgxMSwgOCwgb3JkKCcgJykpCi0KLSAgICAgICAgIyBzdHJuZzUKLSAgICAgICAgdHJlZXNjcm43LmFkZGNoKDExLCAxOCwgb3JkKCcgJykpCi0gICAgICAgIHRyZWVzY3JuNy5hZGRjaCgxMiwgMTQsIG9yZCgnICcpKQotCi0gICAgICAgIGxvb2tfb3V0KDE1MCkKLSAgICAgICAgcmVpbmRlZXIoKQotCi0gICAgICAgIHdfaG9saWRheS50b3VjaHdpbigpCi0gICAgICAgIHdfaG9saWRheS5yZWZyZXNoKCkKLSAgICAgICAgd19kZWxfbXNnLnJlZnJlc2goKQotCi0gICAgICAgIGxvb2tfb3V0KDUwMCkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgMjApOgotICAgICAgICAgICAgYmxpbmtpdCgpCi0KLWN1cnNlcy53cmFwcGVyKG1haW4pCmRpZmYgLS1naXQgYS9EZW1vL2VtYmVkL01ha2VmaWxlIGIvRGVtby9lbWJlZC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzExYjk1Yi4uMDAwMDAwMAotLS0gYS9EZW1vL2VtYmVkL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgZW1iZWRkZWQgUHl0aG9uIHVzZSBkZW1vLgotIyAoVGhpcyB2ZXJzaW9uIHRhaWxvcmVkIGZvciBteSBSZWQgSGF0IExpbnV4IDYuMSBzZXR1cDsKLSMgZWRpdCBsaW5lcyBtYXJrZWQgd2l0aCBYWFguKQotCi0jIFhYWCBUaGUgY29tcGlsZXIgeW91IGFyZSB1c2luZwotQ0M9CSAJZ2NjCi0KLSMgWFhYIFRvcCBvZiB0aGUgYnVpbGQgdHJlZSBhbmQgc291cmNlIHRyZWUKLWJsZGRpcj0JCS4uLy4uCi1zcmNkaXI9CQkuLi8uLgotCi0jIFB5dGhvbiB2ZXJzaW9uCi1WRVJTSU9OPQkzLjAKLQotIyBDb21waWxlciBmbGFncwotT1BUPQkJLWcKLUlOQ0xVREVTPQktSSQoc3JjZGlyKS9JbmNsdWRlIC1JJChibGRkaXIpCi1DRkxBR1M9CQkkKE9QVCkKLUNQUEZMQUdTPQkkKElOQ0xVREVTKQotCi0jIFRoZSBQeXRob24gbGlicmFyeQotTElCUFlUSE9OPQkkKGJsZGRpcikvbGlicHl0aG9uJChWRVJTSU9OKS5hCi0KLSMgWFhYIGVkaXQgTElCUyAoaW4gcGFydGljdWxhcikgdG8gbWF0Y2ggJChibGRkaXIpL01vZHVsZXMvTWFrZWZpbGUKLUxJQlM9CQktbG5zbCAtbGRsIC1scmVhZGxpbmUgLWxpZWVlIC1scHRocmVhZCAtbHV0aWwKLUxERkxBR1M9CS1YbGlua2VyIC1leHBvcnQtZHluYW1pYwotU1lTTElCUz0JLWxtCi1NT0RMSUJTPQkKLUFMTExJQlM9CSQoTElCUFlUSE9OKSAkKE1PRExJQlMpICQoTElCUykgJChTWVNMSUJTKQotCi0jIEJ1aWxkIHRoZSBkZW1vIGFwcGxpY2F0aW9ucwotYWxsOgkJZGVtbyBsb29wIGltcG9ydGV4YwotZGVtbzoJCWRlbW8ubwotCQkkKENDKSAkKExERkxBR1MpIGRlbW8ubyAkKEFMTExJQlMpIC1vIGRlbW8KLQotbG9vcDoJCWxvb3AubwotCQkkKENDKSAkKExERkxBR1MpIGxvb3AubyAkKEFMTExJQlMpIC1vIGxvb3AKLQotaW1wb3J0ZXhjOglpbXBvcnRleGMubwotCQkkKENDKSAkKExERkxBR1MpIGltcG9ydGV4Yy5vICQoQUxMTElCUykgLW8gaW1wb3J0ZXhjCi0KLSMgQWRtaW5pc3RyYXRpdmUgdGFyZ2V0cwotCi10ZXN0OgkJZGVtbwotCQkuL2RlbW8KLQotQ09NTUFORD0icHJpbnQgJ2hlbGxvIHdvcmxkJyIKLWxvb3B0ZXN0Oglsb29wCi0JCS4vbG9vcCAkKENPTU1BTkQpCi0KLWNsZWFuOgotCQktcm0gLWYgKi5vIGNvcmUKLQotY2xvYmJlcjoJY2xlYW4KLQkJLXJtIC1mICp+IEAqICcjJyogZGVtbyBsb29wIGltcG9ydGV4YwotCi1yZWFsY2xlYW46CWNsb2JiZXIKZGlmZiAtLWdpdCBhL0RlbW8vZW1iZWQvUkVBRE1FIGIvRGVtby9lbWJlZC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwZjdhZjguLjAwMDAwMDAKLS0tIGEvRGVtby9lbWJlZC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSBzaG93IGhvdyB0byBlbWJlZCB0aGUgUHl0aG9uIGludGVycHJldGVyIGluIHlvdXIgb3duCi1hcHBsaWNhdGlvbi4gIFRoZSBmaWxlIGRlbW8uYyBzaG93cyB5b3UgYWxsIHRoYXQgaXMgbmVlZGVkIGluIHlvdXIgQwotY29kZS4KLQotVG8gYnVpbGQgaXQsIHlvdSBtYXkgaGF2ZSB0byBlZGl0IHRoZSBNYWtlZmlsZToKLQotMSkgc2V0IGJsZGRpciB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBidWlsdCBQeXRob24sIGlmIGl0IGlzbid0IGluCi10aGUgc291cmNlIGRpcmVjdG9yeSAoLi4vLi4pCi0KLTIpIGNoYW5nZSB0aGUgdmFyaWFibGVzIHRoYXQgdG9nZXRoZXIgZGVmaW5lIHRoZSBsaXN0IG9mIGxpYnJhcmllcwotKE1PRExJQlMsIExJQlMsIFNZU0xJQlMpIHRvIGxpbmsgd2l0aCwgdG8gbWF0Y2ggdGhlaXIgZGVmaW5pdGlvbnMgaW4KLSQoYmxkZGlyKS9Nb2R1bGVzL01ha2VmaWxlCi0KLUFuIGFkZGl0aW9uYWwgdGVzdCBwcm9ncmFtLCBsb29wLmMsIGlzIHVzZWQgdG8gZXhwZXJpbWVudCB3aXRoIG1lbW9yeQotbGVha2FnZSBjYXVzZWQgYnkgcmVwZWF0ZWQgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBvZiB0aGUKLWludGVycHJldGVyLiAgSXQgY2FuIGJlIGJ1aWxkIGJ5IHNheWluZyAibWFrZSBsb29wIiBhbmQgdGVzdGVkIHdpdGgKLSJtYWtlIGxvb3B0ZXN0Ii4gIENvbW1hbmQgbGluZSB1c2FnZSBpcyAiLi9sb29wIDxweXRob24tY29tbWFuZD4iLAotZS5nLiAiLi9sb29wICdwcmludCAyKzInIiBzaG91bGQgc3BpdCBvdXQgYW4gZW5kbGVzcyBudW1iZXIgb2YgbGluZXMKLWNvbnRhaW5pbmcgdGhlIG51bWJlciA0LgpkaWZmIC0tZ2l0IGEvRGVtby9lbWJlZC9kZW1vLmMgYi9EZW1vL2VtYmVkL2RlbW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTlkMzljYS4uMDAwMDAwMAotLS0gYS9EZW1vL2VtYmVkL2RlbW8uYworKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qIEV4YW1wbGUgb2YgZW1iZWRkaW5nIFB5dGhvbiBpbiBhbm90aGVyIHByb2dyYW0gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1QeU9iamVjdCogUHlJbml0X3h5enp5KHZvaWQpOyAvKiBGb3J3YXJkICovCi0KLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIC8qIElnbm9yZSBwYXNzZWQtaW4gYXJnYy9hcmd2LiBJZiBkZXNpcmVkLCBjb252ZXJzaW9uCi0gICAgICAgc2hvdWxkIHVzZSBtYnN0b3djcyB0byBjb252ZXJ0IHRoZW0uICovCi0gICAgd2NoYXJfdCAqYXJnc1tdID0ge0wiZW1iZWQiLCBMImhlbGxvIiwgMH07Ci0KLSAgICAvKiBQYXNzIGFyZ3ZbMF0gdG8gdGhlIFB5dGhvbiBpbnRlcnByZXRlciAqLwotICAgIFB5X1NldFByb2dyYW1OYW1lKGFyZ3NbMF0pOwotCi0gICAgLyogQWRkIGEgc3RhdGljIG1vZHVsZSAqLwotICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoInh5enp5IiwgUHlJbml0X3h5enp5KTsKLQotICAgIC8qIEluaXRpYWxpemUgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFJlcXVpcmVkLiAqLwotICAgIFB5X0luaXRpYWxpemUoKTsKLQotICAgIC8qIERlZmluZSBzeXMuYXJndi4gIEl0IGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbiBpZiB5b3UKLSAgICAgICB3YW50IHRoaXM7IHlvdSBjYW4gYWxzbyBsZXQgaXQgdW5kZWZpbmVkIChzaW5jZSB0aGUgUHl0aG9uCi0gICAgICAgY29kZSBpcyBnZW5lcmFsbHkgbm90IGEgbWFpbiBwcm9ncmFtIGl0IGhhcyBubyBidXNpbmVzcwotICAgICAgIHRvdWNoaW5nIHN5cy5hcmd2Li4uKQotCi0gICAgICAgSWYgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRydWUsIHN5cy5wYXRoIGlzIG1vZGlmaWVkIHRvIGluY2x1ZGUKLSAgICAgICBlaXRoZXIgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzY3JpcHQgbmFtZWQgYnkgYXJndlswXSwgb3IKLSAgICAgICB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoaXMgY2FuIGJlIHJpc2t5OyBpZiB5b3UgcnVuCi0gICAgICAgYW4gYXBwbGljYXRpb24gZW1iZWRkaW5nIFB5dGhvbiBpbiBhIGRpcmVjdG9yeSBjb250cm9sbGVkIGJ5Ci0gICAgICAgc29tZW9uZSBlbHNlLCBhdHRhY2tlcnMgY291bGQgcHV0IGEgVHJvamFuLWhvcnNlIG1vZHVsZSBpbiB0aGUKLSAgICAgICBkaXJlY3RvcnkgKHNheSwgYSBmaWxlIG5hbWVkIG9zLnB5KSB0aGF0IHlvdXIgYXBwbGljYXRpb24gd291bGQKLSAgICAgICB0aGVuIGltcG9ydCBhbmQgcnVuLgotICAgICovCi0gICAgUHlTeXNfU2V0QXJndkV4KDIsIGFyZ3MsIDApOwotCi0gICAgLyogRG8gc29tZSBhcHBsaWNhdGlvbiBzcGVjaWZpYyBjb2RlICovCi0gICAgcHJpbnRmKCJIZWxsbywgYnJhdmUgbmV3IHdvcmxkXG5cbiIpOwotCi0gICAgLyogRXhlY3V0ZSBzb21lIFB5dGhvbiBzdGF0ZW1lbnRzIChpbiBtb2R1bGUgX19tYWluX18pICovCi0gICAgUHlSdW5fU2ltcGxlU3RyaW5nKCJpbXBvcnQgc3lzXG4iKTsKLSAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoInByaW50KHN5cy5idWlsdGluX21vZHVsZV9uYW1lcylcbiIpOwotICAgIFB5UnVuX1NpbXBsZVN0cmluZygicHJpbnQoc3lzLm1vZHVsZXMua2V5cygpKVxuIik7Ci0gICAgUHlSdW5fU2ltcGxlU3RyaW5nKCJwcmludChzeXMuZXhlY3V0YWJsZSlcbiIpOwotICAgIFB5UnVuX1NpbXBsZVN0cmluZygicHJpbnQoc3lzLmFyZ3YpXG4iKTsKLQotICAgIC8qIE5vdGUgdGhhdCB5b3UgY2FuIGNhbGwgYW55IHB1YmxpYyBmdW5jdGlvbiBvZiB0aGUgUHl0aG9uCi0gICAgICAgaW50ZXJwcmV0ZXIgaGVyZSwgZS5nLiBjYWxsX29iamVjdCgpLiAqLwotCi0gICAgLyogU29tZSBtb3JlIGFwcGxpY2F0aW9uIHNwZWNpZmljIGNvZGUgKi8KLSAgICBwcmludGYoIlxuR29vZGJ5ZSwgY3J1ZWwgd29ybGRcbiIpOwotCi0gICAgLyogRXhpdCwgY2xlYW5pbmcgdXAgdGhlIGludGVycHJldGVyICovCi0gICAgUHlfRXhpdCgwKTsKLSAgICAvKk5PVFJFQUNIRUQqLwotfQotCi0vKiBBIHN0YXRpYyBtb2R1bGUgKi8KLQotLyogJ3NlbGYnIGlzIG5vdCB1c2VkICovCi1zdGF0aWMgUHlPYmplY3QgKgoteHl6enlfZm9vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCogYXJncykKLXsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDQyTCk7Ci19Ci0KLXN0YXRpYyBQeU1ldGhvZERlZiB4eXp6eV9tZXRob2RzW10gPSB7Ci0gICAgeyJmb28iLCAgICAgICAgICAgICB4eXp6eV9mb28sICAgICAgTUVUSF9OT0FSR1MsCi0gICAgICJSZXR1cm4gdGhlIG1lYW5pbmcgb2YgZXZlcnl0aGluZy4ifSwKLSAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB4eXp6eW1vZHVsZSA9IHsKLSAgICB7fSwgLyogbV9iYXNlICovCi0gICAgInh5enp5IiwgIC8qIG1fbmFtZSAqLwotICAgIDAsICAvKiBtX2RvYyAqLwotICAgIDAsICAvKiBtX3NpemUgKi8KLSAgICB4eXp6eV9tZXRob2RzLCAgLyogbV9tZXRob2RzICovCi0gICAgMCwgIC8qIG1fcmVsb2FkICovCi0gICAgMCwgIC8qIG1fdHJhdmVyc2UgKi8KLSAgICAwLCAgLyogbV9jbGVhciAqLwotICAgIDAsICAvKiBtX2ZyZWUgKi8KLX07Ci0KLVB5T2JqZWN0KgotUHlJbml0X3h5enp5KHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmeHl6enltb2R1bGUpOwotfQpkaWZmIC0tZ2l0IGEvRGVtby9lbWJlZC9pbXBvcnRleGMuYyBiL0RlbW8vZW1iZWQvaW1wb3J0ZXhjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YjFkMDEuLjAwMDAwMDAKLS0tIGEvRGVtby9lbWJlZC9pbXBvcnRleGMuYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpbmNsdWRlIDxQeXRob24uaD4KLQotI2lmIDAKLWNoYXIqIGNtZCA9ICJpbXBvcnQgY29kZWNzLCBlbmNvZGluZ3MudXRmXzgsIHR5cGVzOyBwcmludCh0eXBlcykiOwotI2Vsc2UKLWNoYXIqIGNtZCA9ICJpbXBvcnQgdHlwZXM7IHByaW50KHR5cGVzKSI7Ci0jZW5kaWYKLQotaW50IG1haW4oKQotewotCXByaW50ZigiSW5pdGlhbGl6ZSBpbnRlcnByZXRlclxuIik7Ci0JUHlfSW5pdGlhbGl6ZSgpOwotCVB5RXZhbF9Jbml0VGhyZWFkcygpOwotCVB5UnVuX1NpbXBsZVN0cmluZyhjbWQpOwotCVB5X0VuZEludGVycHJldGVyKFB5VGhyZWFkU3RhdGVfR2V0KCkpOwotCi0JcHJpbnRmKCJcbkluaXRpYWxpemUgc3ViaW50ZXJwcmV0ZXJcbiIpOwotCVB5X05ld0ludGVycHJldGVyKCk7Ci0JUHlSdW5fU2ltcGxlU3RyaW5nKGNtZCk7Ci0JUHlfRmluYWxpemUoKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvRGVtby9lbWJlZC9sb29wLmMgYi9EZW1vL2VtYmVkL2xvb3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEzNDFmZC4uMDAwMDAwMAotLS0gYS9EZW1vL2VtYmVkL2xvb3AuYworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qIFNpbXBsZSBwcm9ncmFtIHRoYXQgcmVwZWF0ZWRseSBjYWxscyBQeV9Jbml0aWFsaXplKCksIGRvZXMgc29tZXRoaW5nLCBhbmQKLSAgIHRoZW4gY2FsbHMgUHlfRmluYWxpemUoKS4gIFRoaXMgc2hvdWxkIGhlbHAgZmluZGluZyBsZWFrcyByZWxhdGVkIHRvCi0gICBpbml0aWFsaXphdGlvbi4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgY291bnQgPSAtMTsKLSAgICBjaGFyICpjb21tYW5kOwotCi0gICAgaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidXNhZ2U6IGxvb3AgPHB5dGhvbi1jb21tYW5kPiBbY291bnRdXG4iKTsKLSAgICAgICAgZXhpdCgyKTsKLSAgICB9Ci0gICAgY29tbWFuZCA9IGFyZ3ZbMV07Ci0KLSAgICBpZiAoYXJnYyA9PSAzKSB7Ci0gICAgICAgIGNvdW50ID0gYXRvaShhcmd2WzJdKTsKLSAgICB9Ci0KLSAgICBQeV9TZXRQcm9ncmFtTmFtZShMImxvb3AiKTsKLQotICAgIC8qIHVuY29tbWVudCB0aGlzIGlmIHlvdSBkb24ndCB3YW50IHRvIGxvYWQgc2l0ZS5weSAqLwotICAgIC8qIFB5X05vU2l0ZUZsYWcgPSAxOyAqLwotCi0gICAgd2hpbGUgKGNvdW50ID09IC0xIHx8IC0tY291bnQgPj0gMCApIHsKLSAgICAgICAgUHlfSW5pdGlhbGl6ZSgpOwotICAgICAgICBQeVJ1bl9TaW1wbGVTdHJpbmcoY29tbWFuZCk7Ci0gICAgICAgIFB5X0ZpbmFsaXplKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvRGVtby9tZDV0ZXN0L1JFQURNRSBiL0RlbW8vbWQ1dGVzdC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNzYyMWUuLjAwMDAwMDAKLS0tIGEvRGVtby9tZDV0ZXN0L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLVRoaXMgaXMgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIHRoZSBNRDUgdGVzdCBwcm9ncmFtIGZyb20gdGhlIE1ENQotSW50ZXJuZXQgRHJhZnQgKFJpdmVzdCBhbmQgRHVzc2UsIFRoZSBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtLCAxMAotSnVseSAxOTkxKS4gIFRoZSBmaWxlICJmb28iIGNvbnRhaW5zIHRoZSBzdHJpbmcgImFiYyIgd2l0aCBubyB0cmFpbGluZwotbmV3bGluZS4KLQotV2hlbiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMsIGl0IGFjdHMgYXMgYSBmaWx0ZXIuICBXaGVuIGNhbGxlZCB3aXRoCi0iLXgiLCBpdCBleGVjdXRlcyBhIHNlbGYtdGVzdCwgYW5kIHRoZSBvdXRwdXQgc2hvdWxkIGxpdGVyYWxseSBtYXRjaAotdGhlIG91dHB1dCBnaXZlbiBpbiB0aGUgUkZDLgotCi1Db2RlIGJ5IEphbi1IZWluIEJcInVocm1hbiBhZnRlciB0aGUgb3JpZ2luYWwgaW4gQy4KZGlmZiAtLWdpdCBhL0RlbW8vbWQ1dGVzdC9mb28gYi9EZW1vL21kNXRlc3QvZm9vCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMmJhOGY4Li4wMDAwMDAwCi0tLSBhL0RlbW8vbWQ1dGVzdC9mb28KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hYmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9EZW1vL21kNXRlc3QvbWQ1ZHJpdmVyLnB5IGIvRGVtby9tZDV0ZXN0L21kNWRyaXZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggN2Y1NjFhYi4uMDAwMDAwMAotLS0gYS9EZW1vL21kNXRlc3QvbWQ1ZHJpdmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLWZyb20gaGFzaGxpYiBpbXBvcnQgbWQ1Ci1pbXBvcnQgc3RyaW5nCi1mcm9tIHN5cyBpbXBvcnQgYXJndgotCi1kZWYgTURQcmludChzdHIpOgotICAgIG91dHN0ciA9ICcnCi0gICAgZm9yIG8gaW4gc3RyOgotICAgICAgICBvdXRzdHIgPSAob3V0c3RyCi0gICAgICAgICAgICAgICAgICArIHN0cmluZy5oZXhkaWdpdHNbKG8gPj4gNCkgJiAweEZdCi0gICAgICAgICAgICAgICAgICArIHN0cmluZy5oZXhkaWdpdHNbbyAmIDB4Rl0pCi0gICAgcHJpbnQob3V0c3RyLCBlbmQ9JyAnKQotCi0KLWZyb20gdGltZSBpbXBvcnQgdGltZQotCi1kZWYgbWFrZXN0cihzdGFydCwgZW5kKToKLSAgICByZXN1bHQgPSAnJwotICAgIGZvciBpIGluIHJhbmdlKHN0YXJ0LCBlbmQgKyAxKToKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgY2hyKGkpCi0KLSAgICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIE1EVGltZVRyaWFsKCk6Ci0gICAgVEVTVF9CTE9DS19TSVpFID0gMTAwMAotICAgIFRFU1RfQkxPQ0tTID0gMTAwMDAKLQotICAgIFRFU1RfQllURVMgPSBURVNUX0JMT0NLX1NJWkUgKiBURVNUX0JMT0NLUwotCi0gICAgIyBpbml0aWFsaXplIHRlc3QgZGF0YSwgbmVlZCB0ZW1wb3Jhcnkgc3RyaW5nIGZpbGxlcgotCi0gICAgZmlsc2l6ID0gMSA8PCA4Ci0gICAgZmlsbGVyID0gbWFrZXN0cigwLCBmaWxzaXotMSkKLSAgICBkYXRhID0gZmlsbGVyICogKFRFU1RfQkxPQ0tfU0laRSAvLyBmaWxzaXopCi0gICAgZGF0YSA9IGRhdGEgKyBmaWxsZXJbOihURVNUX0JMT0NLX1NJWkUgJSBmaWxzaXopXQotCi0gICAgZGVsIGZpbHNpeiwgZmlsbGVyCi0KLQotICAgICMgc3RhcnQgdGltZXIKLSAgICBwcmludCgnTUQ1IHRpbWUgdHJpYWwuIFByb2Nlc3NpbmcnLCBURVNUX0JZVEVTLCAnY2hhcmFjdGVycy4uLicpCi0gICAgdDEgPSB0aW1lKCkKLQotICAgIG1kQ29udGV4dCA9IG1kNSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShURVNUX0JMT0NLUyk6Ci0gICAgICAgIG1kQ29udGV4dC51cGRhdGUoZGF0YSkKLQotICAgIHN0ciA9IG1kQ29udGV4dC5kaWdlc3QoKQotICAgIHQyID0gdGltZSgpCi0KLSAgICBNRFByaW50KHN0cikKLSAgICBwcmludCgnaXMgZGlnZXN0IG9mIHRlc3QgaW5wdXQuJykKLSAgICBwcmludCgnU2Vjb25kcyB0byBwcm9jZXNzIHRlc3QgaW5wdXQ6JywgdDIgLSB0MSkKLSAgICBwcmludCgnQ2hhcmFjdGVycyBwcm9jZXNzZWQgcGVyIHNlY29uZDonLCBURVNUX0JZVEVTIC8gKHQyIC0gdDEpKQotCi0KLWRlZiBNRFN0cmluZyhzdHIpOgotICAgIE1EUHJpbnQobWQ1KHN0ci5lbmNvZGUoInV0Zi04IikpLmRpZ2VzdCgpKQotICAgIHByaW50KCciJyArIHN0ciArICciJykKLQotCi1kZWYgTURGaWxlKGZpbGVuYW1lKToKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3JiJykKLSAgICBtZENvbnRleHQgPSBtZDUoKQotCi0gICAgd2hpbGUgMToKLSAgICAgICAgZGF0YSA9IGYucmVhZCgxMDI0KQotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIG1kQ29udGV4dC51cGRhdGUoZGF0YSkKLQotICAgIE1EUHJpbnQobWRDb250ZXh0LmRpZ2VzdCgpKQotICAgIHByaW50KGZpbGVuYW1lKQotCi0KLWltcG9ydCBzeXMKLQotZGVmIE1ERmlsdGVyKCk6Ci0gICAgbWRDb250ZXh0ID0gbWQ1KCkKLQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGRhdGEgPSBzeXMuc3RkaW4ucmVhZCgxNikuZW5jb2RlKCkKLSAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBtZENvbnRleHQudXBkYXRlKGRhdGEpCi0KLSAgICBNRFByaW50KG1kQ29udGV4dC5kaWdlc3QoKSkKLSAgICBwcmludCgpCi0KLQotZGVmIE1EVGVzdFN1aXRlKCk6Ci0gICAgcHJpbnQoJ01ENSB0ZXN0IHN1aXRlIHJlc3VsdHM6JykKLSAgICBNRFN0cmluZygnJykKLSAgICBNRFN0cmluZygnYScpCi0gICAgTURTdHJpbmcoJ2FiYycpCi0gICAgTURTdHJpbmcoJ21lc3NhZ2UgZGlnZXN0JykKLSAgICBNRFN0cmluZyhtYWtlc3RyKG9yZCgnYScpLCBvcmQoJ3onKSkpCi0gICAgTURTdHJpbmcobWFrZXN0cihvcmQoJ0EnKSwgb3JkKCdaJykpCi0gICAgICAgICAgICAgICsgbWFrZXN0cihvcmQoJ2EnKSwgb3JkKCd6JykpCi0gICAgICAgICAgICAgICsgbWFrZXN0cihvcmQoJzAnKSwgb3JkKCc5JykpKQotICAgIE1EU3RyaW5nKChtYWtlc3RyKG9yZCgnMScpLCBvcmQoJzknKSkgKyAnMCcpICogOCkKLQotICAgICMgQ29udGVudHMgb2YgZmlsZSBmb28gYXJlICJhYmMiCi0gICAgTURGaWxlKCdmb28nKQotCi0KLSMgSSBkb24ndCB3YW5uYSB1c2UgZ2V0b3B0KCksIHNpbmNlIEkgd2FudCB0byB1c2UgdGhlIHNhbWUgaS9mLi4uCi1kZWYgbWFpbigpOgotICAgIGlmIGxlbihhcmd2KSA9PSAxOgotICAgICAgICBNREZpbHRlcigpCi0gICAgZm9yIGFyZyBpbiBhcmd2WzE6XToKLSAgICAgICAgaWYgYXJnWzoyXSA9PSAnLXMnOgotICAgICAgICAgICAgTURTdHJpbmcoYXJnWzI6XSkKLSAgICAgICAgZWxpZiBhcmcgPT0gJy10JzoKLSAgICAgICAgICAgIE1EVGltZVRyaWFsKCkKLSAgICAgICAgZWxpZiBhcmcgPT0gJy14JzoKLSAgICAgICAgICAgIE1EVGVzdFN1aXRlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIE1ERmlsZShhcmcpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9uZXdtZXRhY2xhc3Nlcy9FaWZmZWwucHkgYi9EZW1vL25ld21ldGFjbGFzc2VzL0VpZmZlbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVmYTU4YS4uMDAwMDAwMAotLS0gYS9EZW1vL25ld21ldGFjbGFzc2VzL0VpZmZlbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0iIiJTdXBwb3J0IEVpZmZlbC1zdHlsZSBwcmVjb25kaXRpb25zIGFuZCBwb3N0Y29uZGl0aW9ucy4iIiIKLQotZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlIGFzIGZ1bmN0aW9uCi0KLWNsYXNzIEVpZmZlbEJhc2VNZXRhQ2xhc3ModHlwZSk6Ci0KLSAgICBkZWYgX19uZXdfXyhtZXRhLCBuYW1lLCBiYXNlcywgZGljdCk6Ci0gICAgICAgIG1ldGEuY29udmVydF9tZXRob2RzKGRpY3QpCi0gICAgICAgIHJldHVybiBzdXBlcihFaWZmZWxCYXNlTWV0YUNsYXNzLCBtZXRhKS5fX25ld19fKG1ldGEsIG5hbWUsIGJhc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGNvbnZlcnRfbWV0aG9kcyhjbHMsIGRpY3QpOgotICAgICAgICAiIiJSZXBsYWNlIGZ1bmN0aW9ucyBpbiBkaWN0IHdpdGggRWlmZmVsTWV0aG9kIHdyYXBwZXJzLgotCi0gICAgICAgIFRoZSBkaWN0IGlzIG1vZGlmaWVkIGluIHBsYWNlLgotCi0gICAgICAgIElmIGEgbWV0aG9kIGVuZHMgaW4gX3ByZSBvciBfcG9zdCwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBkaWN0Ci0gICAgICAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVyZSBpcyBhIGNvcnJlc3BvbmRpbmcgbWV0aG9kLgotICAgICAgICAiIiIKLSAgICAgICAgIyBmaW5kIG1ldGhvZHMgd2l0aCBwcmUgb3IgcG9zdCBjb25kaXRpb25zCi0gICAgICAgIG1ldGhvZHMgPSBbXQotICAgICAgICBmb3IgaywgdiBpbiBkaWN0Lml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBrLmVuZHN3aXRoKCdfcHJlJykgb3Igay5lbmRzd2l0aCgnX3Bvc3QnKToKLSAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2LCBmdW5jdGlvbikKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2LCBmdW5jdGlvbik6Ci0gICAgICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoaykKLSAgICAgICAgZm9yIG0gaW4gbWV0aG9kczoKLSAgICAgICAgICAgIHByZSA9IGRpY3QuZ2V0KCIlc19wcmUiICUgbSkKLSAgICAgICAgICAgIHBvc3QgPSBkaWN0LmdldCgiJXNfcG9zdCIgJSBtKQotICAgICAgICAgICAgaWYgcHJlIG9yIHBvc3Q6Ci0gICAgICAgICAgICAgICAgZGljdFtrXSA9IGNscy5tYWtlX2VpZmZlbF9tZXRob2QoZGljdFttXSwgcHJlLCBwb3N0KQotCi1jbGFzcyBFaWZmZWxNZXRhQ2xhc3MxKEVpZmZlbEJhc2VNZXRhQ2xhc3MpOgotICAgICMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlICJlaWZmZWwiIG1ldGEgY2xhc3MgdGhhdCB1c2VzIG5lc3RlZCBmdW5jdGlvbnMKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgbWFrZV9laWZmZWxfbWV0aG9kKGZ1bmMsIHByZSwgcG9zdCk6Ci0gICAgICAgIGRlZiBtZXRob2Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIGlmIHByZToKLSAgICAgICAgICAgICAgICBwcmUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgeCA9IGZ1bmMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgaWYgcG9zdDoKLSAgICAgICAgICAgICAgICBwb3N0KHNlbGYsIHgsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIHJldHVybiB4Ci0KLSAgICAgICAgaWYgZnVuYy5fX2RvY19fOgotICAgICAgICAgICAgbWV0aG9kLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KLQotICAgICAgICByZXR1cm4gbWV0aG9kCi0KLWNsYXNzIEVpZmZlbE1ldGhvZFdyYXBwZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5zdCwgZGVzY3IpOgotICAgICAgICBzZWxmLl9pbnN0ID0gaW5zdAotICAgICAgICBzZWxmLl9kZXNjciA9IGRlc2NyCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Rlc2NyLmNhbGxtZXRob2Qoc2VsZi5faW5zdCwgYXJncywga3dhcmdzKQotCi1jbGFzcyBFaWZmZWxEZXNjcmlwdG9yKG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgcHJlLCBwb3N0KToKLSAgICAgICAgc2VsZi5fZnVuYyA9IGZ1bmMKLSAgICAgICAgc2VsZi5fcHJlID0gcHJlCi0gICAgICAgIHNlbGYuX3Bvc3QgPSBwb3N0Ci0KLSAgICAgICAgc2VsZi5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KLSAgICAgICAgc2VsZi5fX2RvY19fID0gZnVuYy5fX2RvY19fCi0KLSAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIGNscyk6Ci0gICAgICAgIHJldHVybiBFaWZmZWxNZXRob2RXcmFwcGVyKG9iaiwgc2VsZikKLQotICAgIGRlZiBjYWxsbWV0aG9kKHNlbGYsIGluc3QsIGFyZ3MsIGt3YXJncyk6Ci0gICAgICAgIGlmIHNlbGYuX3ByZToKLSAgICAgICAgICAgIHNlbGYuX3ByZShpbnN0LCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIHggPSBzZWxmLl9mdW5jKGluc3QsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgc2VsZi5fcG9zdDoKLSAgICAgICAgICAgIHNlbGYuX3Bvc3QoaW5zdCwgeCwgKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICByZXR1cm4geAotCi1jbGFzcyBFaWZmZWxNZXRhQ2xhc3MyKEVpZmZlbEJhc2VNZXRhQ2xhc3MpOgotICAgICMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlICJlaWZmZWwiIG1ldGEgY2xhc3MgdGhhdCB1c2VzIGRlc2NyaXB0b3JzCi0KLSAgICBtYWtlX2VpZmZlbF9tZXRob2QgPSBFaWZmZWxEZXNjcmlwdG9yCi0KLWRlZiBfdGVzdChtZXRhY2xhc3MpOgotICAgIGNsYXNzIEVpZmZlbChtZXRhY2xhc3M9bWV0YWNsYXNzKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgVGVzdChFaWZmZWwpOgotCi0gICAgICAgIGRlZiBtKHNlbGYsIGFyZyk6Ci0gICAgICAgICAgICAiIiJNYWtlIGl0IGEgbGl0dGxlIGxhcmdlciIiIgotICAgICAgICAgICAgcmV0dXJuIGFyZyArIDEKLQotICAgICAgICBkZWYgbTIoc2VsZiwgYXJnKToKLSAgICAgICAgICAgICIiIk1ha2UgaXQgYSBsaXR0bGUgbGFyZ2VyIiIiCi0gICAgICAgICAgICByZXR1cm4gYXJnICsgMQotCi0gICAgICAgIGRlZiBtMl9wcmUoc2VsZiwgYXJnKToKLSAgICAgICAgICAgIGFzc2VydCBhcmcgPiAwCi0KLSAgICAgICAgZGVmIG0yX3Bvc3Qoc2VsZiwgcmVzdWx0LCBhcmcpOgotICAgICAgICAgICAgYXNzZXJ0IHJlc3VsdCA+IGFyZwotCi0gICAgY2xhc3MgU3ViKFRlc3QpOgotICAgICAgICBkZWYgbTIoc2VsZiwgYXJnKToKLSAgICAgICAgICAgIHJldHVybiBhcmcqKjIKLSAgICAgICAgZGVmIG0yX3Bvc3Qoc2VsZiwgUmVzdWx0LCBhcmcpOgotICAgICAgICAgICAgc3VwZXIoU3ViLCBzZWxmKS5tMl9wb3N0KFJlc3VsdCwgYXJnKQotICAgICAgICAgICAgYXNzZXJ0IFJlc3VsdCA8IDEwMAotCi0gICAgdCA9IFRlc3QoKQotICAgIHQubSgxKQotICAgIHQubTIoMSkKLSAgICB0cnk6Ci0gICAgICAgIHQubTIoMCkKLSAgICBleGNlcHQgQXNzZXJ0aW9uRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBhc3NlcnQgRmFsc2UKLQotICAgIHMgPSBTdWIoKQotICAgIHRyeToKLSAgICAgICAgcy5tMigxKQotICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKLSAgICAgICAgcGFzcyAjIHJlc3VsdCA9PSBhcmcKLSAgICBlbHNlOgotICAgICAgICBhc3NlcnQgRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIHMubTIoMTApCi0gICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgotICAgICAgICBwYXNzICMgcmVzdWx0ID09ICAxMDAKLSAgICBlbHNlOgotICAgICAgICBhc3NlcnQgRmFsc2UKLSAgICBzLm0yKDUpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgX3Rlc3QoRWlmZmVsTWV0YUNsYXNzMSkKLSAgICBfdGVzdChFaWZmZWxNZXRhQ2xhc3MyKQpkaWZmIC0tZ2l0IGEvRGVtby9uZXdtZXRhY2xhc3Nlcy9FbnVtLnB5IGIvRGVtby9uZXdtZXRhY2xhc3Nlcy9FbnVtLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmY4ZGRkLi4wMDAwMDAwCi0tLSBhL0RlbW8vbmV3bWV0YWNsYXNzZXMvRW51bS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi0iIiJFbnVtZXJhdGlvbiBtZXRhY2xhc3MuIiIiCi0KLWNsYXNzIEVudW1NZXRhY2xhc3ModHlwZSk6Ci0gICAgIiIiTWV0YWNsYXNzIGZvciBlbnVtZXJhdGlvbi4KLQotICAgIFRvIGRlZmluZSB5b3VyIG93biBlbnVtZXJhdGlvbiwgZG8gc29tZXRoaW5nIGxpa2UKLQotICAgIGNsYXNzIENvbG9yKEVudW0pOgotICAgICAgICByZWQgPSAxCi0gICAgICAgIGdyZWVuID0gMgotICAgICAgICBibHVlID0gMwotCi0gICAgTm93LCBDb2xvci5yZWQsIENvbG9yLmdyZWVuIGFuZCBDb2xvci5ibHVlIGJlaGF2ZSB0b3RhbGx5Ci0gICAgZGlmZmVyZW50OiB0aGV5IGFyZSBlbnVtZXJhdGVkIHZhbHVlcywgbm90IGludGVnZXJzLgotCi0gICAgRW51bWVyYXRpb25zIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQ7IGhvd2V2ZXIgdGhleSBjYW4gYmUKLSAgICBzdWJjbGFzc2VkLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QpOgotICAgICAgICBzdXBlcihFbnVtTWV0YWNsYXNzLCBjbHMpLl9faW5pdF9fKG5hbWUsIGJhc2VzLCBkaWN0KQotICAgICAgICBjbHMuX21lbWJlcnMgPSBbXQotICAgICAgICBmb3IgYXR0ciBpbiBkaWN0LmtleXMoKToKLSAgICAgICAgICAgIGlmIG5vdCAoYXR0ci5zdGFydHN3aXRoKCdfXycpIGFuZCBhdHRyLmVuZHN3aXRoKCdfXycpKToKLSAgICAgICAgICAgICAgICBlbnVtdmFsID0gRW51bUluc3RhbmNlKG5hbWUsIGF0dHIsIGRpY3RbYXR0cl0pCi0gICAgICAgICAgICAgICAgc2V0YXR0cihjbHMsIGF0dHIsIGVudW12YWwpCi0gICAgICAgICAgICAgICAgY2xzLl9tZW1iZXJzLmFwcGVuZChhdHRyKQotCi0gICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6Ci0gICAgICAgIGlmIG5hbWUgPT0gIl9fbWVtYmVyc19fIjoKLSAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcnMKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKLQotICAgIGRlZiBfX3JlcHJfXyhjbHMpOgotICAgICAgICBzMSA9IHMyID0gIiIKLSAgICAgICAgZW51bWJhc2VzID0gW2Jhc2UuX19uYW1lX18gZm9yIGJhc2UgaW4gY2xzLl9fYmFzZXNfXwotICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShiYXNlLCBFbnVtTWV0YWNsYXNzKSBhbmQgbm90IGJhc2UgaXMgRW51bV0KLSAgICAgICAgaWYgZW51bWJhc2VzOgotICAgICAgICAgICAgczEgPSAiKCVzKSIgJSAiLCAiLmpvaW4oZW51bWJhc2VzKQotICAgICAgICBlbnVtdmFsdWVzID0gWyIlczogJWQiICUgKHZhbCwgZ2V0YXR0cihjbHMsIHZhbCkpCi0gICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiBjbHMuX21lbWJlcnNdCi0gICAgICAgIGlmIGVudW12YWx1ZXM6Ci0gICAgICAgICAgICBzMiA9ICI6IHslc30iICUgIiwgIi5qb2luKGVudW12YWx1ZXMpCi0gICAgICAgIHJldHVybiAiJXMlcyVzIiAlIChjbHMuX19uYW1lX18sIHMxLCBzMikKLQotY2xhc3MgRnVsbEVudW1NZXRhY2xhc3MoRW51bU1ldGFjbGFzcyk6Ci0gICAgIiIiTWV0YWNsYXNzIGZvciBmdWxsIGVudW1lcmF0aW9ucy4KLQotICAgIEEgZnVsbCBlbnVtZXJhdGlvbiBkaXNwbGF5cyBhbGwgdGhlIHZhbHVlcyBkZWZpbmVkIGluIGJhc2UgY2xhc3Nlcy4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KToKLSAgICAgICAgc3VwZXIoRnVsbEVudW1NZXRhY2xhc3MsIGNscykuX19pbml0X18obmFtZSwgYmFzZXMsIGRpY3QpCi0gICAgICAgIGZvciBvYmogaW4gY2xzLl9fbXJvX186Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgRW51bU1ldGFjbGFzcyk6Ci0gICAgICAgICAgICAgICAgZm9yIGF0dHIgaW4gb2JqLl9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICAjIFhYWCBpbmVmZmljaWVudAotICAgICAgICAgICAgICAgICAgICBpZiBub3QgYXR0ciBpbiBjbHMuX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbHMuX21lbWJlcnMuYXBwZW5kKGF0dHIpCi0KLWNsYXNzIEVudW1JbnN0YW5jZShpbnQpOgotICAgICIiIkNsYXNzIHRvIHJlcHJlc2VudCBhbiBlbnVtZXJhdGlvbiB2YWx1ZS4KLQotICAgIEVudW1JbnN0YW5jZSgnQ29sb3InLCAncmVkJywgMTIpIHByaW50cyBhcyAnQ29sb3IucmVkJyBhbmQgYmVoYXZlcwotICAgIGxpa2UgdGhlIGludGVnZXIgMTIgd2hlbiBjb21wYXJlZCwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCBhcml0aG1ldGljLgotCi0gICAgWFhYIFNob3VsZCBpdCByZWNvcmQgdGhlIGFjdHVhbCBlbnVtZXJhdGlvbiByYXRoZXIgdGhhbiBqdXN0IGl0cwotICAgIG5hbWU/Ci0gICAgIiIiCi0KLSAgICBkZWYgX19uZXdfXyhjbHMsIGNsYXNzbmFtZSwgZW51bW5hbWUsIHZhbHVlKToKLSAgICAgICAgcmV0dXJuIGludC5fX25ld19fKGNscywgdmFsdWUpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgY2xhc3NuYW1lLCBlbnVtbmFtZSwgdmFsdWUpOgotICAgICAgICBzZWxmLl9fY2xhc3NuYW1lID0gY2xhc3NuYW1lCi0gICAgICAgIHNlbGYuX19lbnVtbmFtZSA9IGVudW1uYW1lCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiRW51bUluc3RhbmNlKCVzLCAlcywgJWQpIiAlIChzZWxmLl9fY2xhc3NuYW1lLCBzZWxmLl9fZW51bW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMuJXMiICUgKHNlbGYuX19jbGFzc25hbWUsIHNlbGYuX19lbnVtbmFtZSkKLQotY2xhc3MgRW51bShtZXRhY2xhc3M9RW51bU1ldGFjbGFzcyk6Ci0gICAgcGFzcwotCi1jbGFzcyBGdWxsRW51bShtZXRhY2xhc3M9RnVsbEVudW1NZXRhY2xhc3MpOgotICAgIHBhc3MKLQotZGVmIF90ZXN0KCk6Ci0KLSAgICBjbGFzcyBDb2xvcihFbnVtKToKLSAgICAgICAgcmVkID0gMQotICAgICAgICBncmVlbiA9IDIKLSAgICAgICAgYmx1ZSA9IDMKLQotICAgIHByaW50KENvbG9yLnJlZCkKLQotICAgIHByaW50KHJlcHIoQ29sb3IucmVkKSkKLSAgICBwcmludChDb2xvci5yZWQgPT0gQ29sb3IucmVkKQotICAgIHByaW50KENvbG9yLnJlZCA9PSBDb2xvci5ibHVlKQotICAgIHByaW50KENvbG9yLnJlZCA9PSAxKQotICAgIHByaW50KENvbG9yLnJlZCA9PSAyKQotCi0gICAgY2xhc3MgRXh0ZW5kZWRDb2xvcihDb2xvcik6Ci0gICAgICAgIHdoaXRlID0gMAotICAgICAgICBvcmFuZ2UgPSA0Ci0gICAgICAgIHllbGxvdyA9IDUKLSAgICAgICAgcHVycGxlID0gNgotICAgICAgICBibGFjayA9IDcKLQotICAgIHByaW50KEV4dGVuZGVkQ29sb3Iub3JhbmdlKQotICAgIHByaW50KEV4dGVuZGVkQ29sb3IucmVkKQotCi0gICAgcHJpbnQoQ29sb3IucmVkID09IEV4dGVuZGVkQ29sb3IucmVkKQotCi0gICAgY2xhc3MgT3RoZXJDb2xvcihFbnVtKToKLSAgICAgICAgd2hpdGUgPSA0Ci0gICAgICAgIGJsdWUgPSA1Ci0KLSAgICBjbGFzcyBNZXJnZWRDb2xvcihDb2xvciwgT3RoZXJDb2xvcik6Ci0gICAgICAgIHBhc3MKLQotICAgIHByaW50KE1lcmdlZENvbG9yLnJlZCkKLSAgICBwcmludChNZXJnZWRDb2xvci53aGl0ZSkKLQotICAgIHByaW50KENvbG9yKQotICAgIHByaW50KEV4dGVuZGVkQ29sb3IpCi0gICAgcHJpbnQoT3RoZXJDb2xvcikKLSAgICBwcmludChNZXJnZWRDb2xvcikKLQotZGVmIF90ZXN0MigpOgotCi0gICAgY2xhc3MgQ29sb3IoRnVsbEVudW0pOgotICAgICAgICByZWQgPSAxCi0gICAgICAgIGdyZWVuID0gMgotICAgICAgICBibHVlID0gMwotCi0gICAgcHJpbnQoQ29sb3IucmVkKQotCi0gICAgcHJpbnQocmVwcihDb2xvci5yZWQpKQotICAgIHByaW50KENvbG9yLnJlZCA9PSBDb2xvci5yZWQpCi0gICAgcHJpbnQoQ29sb3IucmVkID09IENvbG9yLmJsdWUpCi0gICAgcHJpbnQoQ29sb3IucmVkID09IDEpCi0gICAgcHJpbnQoQ29sb3IucmVkID09IDIpCi0KLSAgICBjbGFzcyBFeHRlbmRlZENvbG9yKENvbG9yKToKLSAgICAgICAgd2hpdGUgPSAwCi0gICAgICAgIG9yYW5nZSA9IDQKLSAgICAgICAgeWVsbG93ID0gNQotICAgICAgICBwdXJwbGUgPSA2Ci0gICAgICAgIGJsYWNrID0gNwotCi0gICAgcHJpbnQoRXh0ZW5kZWRDb2xvci5vcmFuZ2UpCi0gICAgcHJpbnQoRXh0ZW5kZWRDb2xvci5yZWQpCi0KLSAgICBwcmludChDb2xvci5yZWQgPT0gRXh0ZW5kZWRDb2xvci5yZWQpCi0KLSAgICBjbGFzcyBPdGhlckNvbG9yKEZ1bGxFbnVtKToKLSAgICAgICAgd2hpdGUgPSA0Ci0gICAgICAgIGJsdWUgPSA1Ci0KLSAgICBjbGFzcyBNZXJnZWRDb2xvcihDb2xvciwgT3RoZXJDb2xvcik6Ci0gICAgICAgIHBhc3MKLQotICAgIHByaW50KE1lcmdlZENvbG9yLnJlZCkKLSAgICBwcmludChNZXJnZWRDb2xvci53aGl0ZSkKLQotICAgIHByaW50KENvbG9yKQotICAgIHByaW50KEV4dGVuZGVkQ29sb3IpCi0gICAgcHJpbnQoT3RoZXJDb2xvcikKLSAgICBwcmludChNZXJnZWRDb2xvcikKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBfdGVzdCgpCi0gICAgX3Rlc3QyKCkKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL0ZJTEVTIGIvRGVtby9wYXJzZXIvRklMRVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZjU5YTMuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvRklMRVMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLURlbW8vcGFyc2VyCi1Eb2MvbGlicGFyc2VyLnRleAotTGliL0FTVC5weQotTGliL3N5bWJvbC5weQotTGliL3Rva2VuLnB5Ci1Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci9SRUFETUUgYi9EZW1vL3BhcnNlci9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1NzZkMzMuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotVGhlc2UgZmlsZXMgYXJlIGZyb20gdGhlIGxhcmdlIGV4YW1wbGUgb2YgdXNpbmcgdGhlIGBwYXJzZXInIG1vZHVsZS4gIFJlZmVyCi10byB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1JdCBhbHNvIGNvbnRhaW5zIGV4YW1wbGVzIGZvciB0aGUgQVNUIHBhcnNlci4KLQotRmlsZXM6Ci0tLS0tLS0KLQotCUZJTEVTCSAgICAgLS0gbGlzdCBvZiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHBhcnNlciBtb2R1bGUuCi0KLQlSRUFETUUJICAgICAtLSB0aGlzIGZpbGUuCi0KLQlleGFtcGxlLnB5ICAgLS0JbW9kdWxlIHRoYXQgdXNlcyB0aGUgYHBhcnNlcicgbW9kdWxlIHRvIGV4dHJhY3QKLQkJCWluZm9ybWF0aW9uIGZyb20gdGhlIHBhcnNlIHRyZWUgb2YgUHl0aG9uIHNvdXJjZQotCQkJY29kZS4KLQotCWRvY3N0cmluZy5weSAtLSBzYW1wbGUgc291cmNlIGZpbGUgY29udGFpbmluZyBvbmx5IGEgbW9kdWxlIGRvY3N0cmluZy4KLQotCXNpbXBsZS5weSAgICAtLSBzYW1wbGUgc291cmNlIGNvbnRhaW5pbmcgYSAic2hvcnQgZm9ybSIgZGVmaW5pdGlvbi4KLQotCXNvdXJjZS5weSAgICAtLQlzYW1wbGUgc291cmNlIGNvZGUgdXNlZCB0byBkZW1vbnN0cmF0ZSBhYmlsaXR5IHRvCi0JCQloYW5kbGUgbmVzdGVkIGNvbnN0cnVjdHMgZWFzaWx5IHVzaW5nIHRoZSBmdW5jdGlvbnMKLQkJCWFuZCBjbGFzc2VzIGluIGV4YW1wbGUucHkuCi0KLQl0ZXN0X3BhcnNlci5weSAgcHJvZ3JhbSB0byBwdXQgdGhlIHBhcnNlciBtb2R1bGUgdGhyb3VnaCBpdHMgcGFjZXMuCi0KLQl1bnBhcnNlLnB5CUFTVCAoMi41KSBiYXNlZCBleGFtcGxlIHRvIHJlY3JlYXRlIHNvdXJjZSBjb2RlCi0JCQlmcm9tIGFuIEFTVC4gVGhpcyBpcyBpbmNvbXBsZXRlOyBjb250cmlidXRpb25zCi0JCQlhcmUgd2VsY29tZS4KLQotRW5qb3khCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci9kb2NzdHJpbmcucHkgYi9EZW1vL3BhcnNlci9kb2NzdHJpbmcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YTI2MWIuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvZG9jc3RyaW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0iIiJTb21lIGRvY3VtZW50YXRpb24uCi0iIiIKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL2V4YW1wbGUucHkgYi9EZW1vL3BhcnNlci9leGFtcGxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmYwODgzLi4wMDAwMDAwCi0tLSBhL0RlbW8vcGFyc2VyL2V4YW1wbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotIiIiU2ltcGxlIGNvZGUgdG8gZXh0cmFjdCBjbGFzcyAmIGZ1bmN0aW9uIGRvY3N0cmluZ3MgZnJvbSBhIG1vZHVsZS4KLQotVGhpcyBjb2RlIGlzIHVzZWQgYXMgYW4gZXhhbXBsZSBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGluIHRoZQotc2VjdGlvbiBvbiB1c2luZyB0aGUgcGFyc2VyIG1vZHVsZS4gIFJlZmVyIHRvIHRoZSBtYW51YWwgZm9yIGEgdGhvcm91Z2gKLWRpc2N1c3Npb24gb2YgdGhlIG9wZXJhdGlvbiBvZiB0aGlzIGNvZGUuCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgcGFyc2VyCi1pbXBvcnQgc3ltYm9sCi1pbXBvcnQgdG9rZW4KLWltcG9ydCB0eXBlcwotCi1mcm9tIHR5cGVzIGltcG9ydCBMaXN0VHlwZSwgVHVwbGVUeXBlCi0KLQotZGVmIGdldF9kb2NzKGZpbGVOYW1lKToKLSAgICAiIiJSZXRyaWV2ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwYXJzZSB0cmVlIG9mIGEgc291cmNlIGZpbGUuCi0KLSAgICBmaWxlTmFtZQotICAgICAgICBOYW1lIG9mIHRoZSBmaWxlIHRvIHJlYWQgUHl0aG9uIHNvdXJjZSBjb2RlIGZyb20uCi0gICAgIiIiCi0gICAgc291cmNlID0gb3BlbihmaWxlTmFtZSkucmVhZCgpCi0gICAgYmFzZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG9zLnBhdGguc3BsaXRleHQoZmlsZU5hbWUpWzBdKQotICAgIGFzdCA9IHBhcnNlci5zdWl0ZShzb3VyY2UpCi0gICAgcmV0dXJuIE1vZHVsZUluZm8oYXN0LnRvdHVwbGUoKSwgYmFzZW5hbWUpCi0KLQotY2xhc3MgU3VpdGVJbmZvQmFzZToKLSAgICBfZG9jc3RyaW5nID0gJycKLSAgICBfbmFtZSA9ICcnCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdHJlZSA9IE5vbmUpOgotICAgICAgICBzZWxmLl9jbGFzc19pbmZvID0ge30KLSAgICAgICAgc2VsZi5fZnVuY3Rpb25faW5mbyA9IHt9Ci0gICAgICAgIGlmIHRyZWU6Ci0gICAgICAgICAgICBzZWxmLl9leHRyYWN0X2luZm8odHJlZSkKLQotICAgIGRlZiBfZXh0cmFjdF9pbmZvKHNlbGYsIHRyZWUpOgotICAgICAgICAjIGV4dHJhY3QgZG9jc3RyaW5nCi0gICAgICAgIGlmIGxlbih0cmVlKSA9PSAyOgotICAgICAgICAgICAgZm91bmQsIHZhcnMgPSBtYXRjaChET0NTVFJJTkdfU1RNVF9QQVRURVJOWzFdLCB0cmVlWzFdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm91bmQsIHZhcnMgPSBtYXRjaChET0NTVFJJTkdfU1RNVF9QQVRURVJOLCB0cmVlWzNdKQotICAgICAgICBpZiBmb3VuZDoKLSAgICAgICAgICAgIHNlbGYuX2RvY3N0cmluZyA9IGV2YWwodmFyc1snZG9jc3RyaW5nJ10pCi0gICAgICAgICMgZGlzY292ZXIgaW5uZXIgZGVmaW5pdGlvbnMKLSAgICAgICAgZm9yIG5vZGUgaW4gdHJlZVsxOl06Ci0gICAgICAgICAgICBmb3VuZCwgdmFycyA9IG1hdGNoKENPTVBPVU5EX1NUTVRfUEFUVEVSTiwgbm9kZSkKLSAgICAgICAgICAgIGlmIGZvdW5kOgotICAgICAgICAgICAgICAgIGNzdG10ID0gdmFyc1snY29tcG91bmQnXQotICAgICAgICAgICAgICAgIGlmIGNzdG10WzBdID09IHN5bWJvbC5mdW5jZGVmOgotICAgICAgICAgICAgICAgICAgICBuYW1lID0gY3N0bXRbMl1bMV0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnVuY3Rpb25faW5mb1tuYW1lXSA9IEZ1bmN0aW9uSW5mbyhjc3RtdCkKLSAgICAgICAgICAgICAgICBlbGlmIGNzdG10WzBdID09IHN5bWJvbC5jbGFzc2RlZjoKLSAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGNzdG10WzJdWzFdCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NsYXNzX2luZm9bbmFtZV0gPSBDbGFzc0luZm8oY3N0bXQpCi0KLSAgICBkZWYgZ2V0X2RvY3N0cmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RvY3N0cmluZwotCi0gICAgZGVmIGdldF9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQotCi0gICAgZGVmIGdldF9jbGFzc19uYW1lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5fY2xhc3NfaW5mby5rZXlzKCkpCi0KLSAgICBkZWYgZ2V0X2NsYXNzX2luZm8oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jbGFzc19pbmZvW25hbWVdCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbGFzc19pbmZvW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9mdW5jdGlvbl9pbmZvW25hbWVdCi0KLQotY2xhc3MgU3VpdGVGdW5jSW5mbzoKLSAgICAjICBNaXhpbiBjbGFzcyBwcm92aWRpbmcgYWNjZXNzIHRvIGZ1bmN0aW9uIG5hbWVzIGFuZCBpbmZvLgotCi0gICAgZGVmIGdldF9mdW5jdGlvbl9uYW1lcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5fZnVuY3Rpb25faW5mby5rZXlzKCkpCi0KLSAgICBkZWYgZ2V0X2Z1bmN0aW9uX2luZm8oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9mdW5jdGlvbl9pbmZvW25hbWVdCi0KLQotY2xhc3MgRnVuY3Rpb25JbmZvKFN1aXRlSW5mb0Jhc2UsIFN1aXRlRnVuY0luZm8pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmVlID0gTm9uZSk6Ci0gICAgICAgIHNlbGYuX25hbWUgPSB0cmVlWzJdWzFdCi0gICAgICAgIFN1aXRlSW5mb0Jhc2UuX19pbml0X18oc2VsZiwgdHJlZSBhbmQgdHJlZVstMV0gb3IgTm9uZSkKLQotCi1jbGFzcyBDbGFzc0luZm8oU3VpdGVJbmZvQmFzZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyZWUgPSBOb25lKToKLSAgICAgICAgc2VsZi5fbmFtZSA9IHRyZWVbMl1bMV0KLSAgICAgICAgU3VpdGVJbmZvQmFzZS5fX2luaXRfXyhzZWxmLCB0cmVlIGFuZCB0cmVlWy0xXSBvciBOb25lKQotCi0gICAgZGVmIGdldF9tZXRob2RfbmFtZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2Z1bmN0aW9uX2luZm8ua2V5cygpKQotCi0gICAgZGVmIGdldF9tZXRob2RfaW5mbyhzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Z1bmN0aW9uX2luZm9bbmFtZV0KLQotCi1jbGFzcyBNb2R1bGVJbmZvKFN1aXRlSW5mb0Jhc2UsIFN1aXRlRnVuY0luZm8pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmVlID0gTm9uZSwgbmFtZSA9ICI8c3RyaW5nPiIpOgotICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQotICAgICAgICBTdWl0ZUluZm9CYXNlLl9faW5pdF9fKHNlbGYsIHRyZWUpCi0gICAgICAgIGlmIHRyZWU6Ci0gICAgICAgICAgICBmb3VuZCwgdmFycyA9IG1hdGNoKERPQ1NUUklOR19TVE1UX1BBVFRFUk4sIHRyZWVbMV0pCi0gICAgICAgICAgICBpZiBmb3VuZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9kb2NzdHJpbmcgPSB2YXJzWyJkb2NzdHJpbmciXQotCi0KLWRlZiBtYXRjaChwYXR0ZXJuLCBkYXRhLCB2YXJzPU5vbmUpOgotICAgICIiIk1hdGNoIGBkYXRhJyB0byBgcGF0dGVybicsIHdpdGggdmFyaWFibGUgZXh0cmFjdGlvbi4KLQotICAgIHBhdHRlcm4KLSAgICAgICAgUGF0dGVybiB0byBtYXRjaCBhZ2FpbnN0LCBwb3NzaWJseSBjb250YWluaW5nIHZhcmlhYmxlcy4KLQotICAgIGRhdGEKLSAgICAgICAgRGF0YSB0byBiZSBjaGVja2VkIGFuZCBhZ2FpbnN0IHdoaWNoIHZhcmlhYmxlcyBhcmUgZXh0cmFjdGVkLgotCi0gICAgdmFycwotICAgICAgICBEaWN0aW9uYXJ5IG9mIHZhcmlhYmxlcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBmb3VuZC4gIElmIG5vdAotICAgICAgICBwcm92aWRlZCwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyBjcmVhdGVkLgotCi0gICAgVGhlIGBwYXR0ZXJuJyB2YWx1ZSBtYXkgY29udGFpbiB2YXJpYWJsZXMgb2YgdGhlIGZvcm0gWyd2YXJuYW1lJ10gd2hpY2gKLSAgICBhcmUgYWxsb3dlZCB0byBtYXRjaCBhbnl0aGluZy4gIFRoZSB2YWx1ZSB0aGF0IGlzIG1hdGNoZWQgaXMgcmV0dXJuZWQgYXMKLSAgICBwYXJ0IG9mIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzICd2YXJuYW1lJyB0byB0aGUgbWF0Y2hlZCB2YWx1ZS4gICd2YXJuYW1lJwotICAgIGlzIG5vdCByZXF1aXJlZCB0byBiZSBhIHN0cmluZyBvYmplY3QsIGJ1dCB1c2luZyBzdHJpbmdzIG1ha2VzIHBhdHRlcm5zCi0gICAgYW5kIHRoZSBjb2RlIHdoaWNoIHVzZXMgdGhlbSBtb3JlIHJlYWRhYmxlLgotCi0gICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBtYXRjaAotICAgIHdhcyBmb3VuZCBhbmQgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdmFyaWFibGUgbmFtZXMgdG8gdGhlaXIgYXNzb2NpYXRlZAotICAgIHZhbHVlcy4KLSAgICAiIiIKLSAgICBpZiB2YXJzIGlzIE5vbmU6Ci0gICAgICAgIHZhcnMgPSB7fQotICAgIGlmIHR5cGUocGF0dGVybikgaXMgTGlzdFR5cGU6ICAgICAgICMgJ3ZhcmlhYmxlcycgYXJlIFsndmFybmFtZSddCi0gICAgICAgIHZhcnNbcGF0dGVyblswXV0gPSBkYXRhCi0gICAgICAgIHJldHVybiAxLCB2YXJzCi0gICAgaWYgdHlwZShwYXR0ZXJuKSBpcyBub3QgVHVwbGVUeXBlOgotICAgICAgICByZXR1cm4gKHBhdHRlcm4gPT0gZGF0YSksIHZhcnMKLSAgICBpZiBsZW4oZGF0YSkgIT0gbGVuKHBhdHRlcm4pOgotICAgICAgICByZXR1cm4gMCwgdmFycwotICAgIGZvciBwYXR0ZXJuLCBkYXRhIGluIG1hcChOb25lLCBwYXR0ZXJuLCBkYXRhKToKLSAgICAgICAgc2FtZSwgdmFycyA9IG1hdGNoKHBhdHRlcm4sIGRhdGEsIHZhcnMpCi0gICAgICAgIGlmIG5vdCBzYW1lOgotICAgICAgICAgICAgYnJlYWsKLSAgICByZXR1cm4gc2FtZSwgdmFycwotCi0KLSMgIFRoaXMgcGF0dGVybiBpZGVudGlmaWVzIGNvbXBvdW5kIHN0YXRlbWVudHMsIGFsbG93aW5nIHRoZW0gdG8gYmUgcmVhZGlseQotIyAgZGlmZmVyZW50aWF0ZWQgZnJvbSBzaW1wbGUgc3RhdGVtZW50cy4KLSMKLUNPTVBPVU5EX1NUTVRfUEFUVEVSTiA9ICgKLSAgICBzeW1ib2wuc3RtdCwKLSAgICAoc3ltYm9sLmNvbXBvdW5kX3N0bXQsIFsnY29tcG91bmQnXSkKLSAgICApCi0KLQotIyAgVGhpcyBwYXR0ZXJuIHdpbGwgbWF0Y2ggYSAnc3RtdCcgbm9kZSB3aGljaCAqbWlnaHQqIHJlcHJlc2VudCBhIGRvY3N0cmluZzsKLSMgIGRvY3N0cmluZ3MgcmVxdWlyZSB0aGF0IHRoZSBzdGF0ZW1lbnQgd2hpY2ggcHJvdmlkZXMgdGhlIGRvY3N0cmluZyBiZSB0aGUKLSMgIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3Mgb3IgZnVuY3Rpb24sIHdoaWNoIHRoaXMgcGF0dGVybiBkb2VzIG5vdCBjaGVjay4KLSMKLURPQ1NUUklOR19TVE1UX1BBVFRFUk4gPSAoCi0gICAgc3ltYm9sLnN0bXQsCi0gICAgKHN5bWJvbC5zaW1wbGVfc3RtdCwKLSAgICAgKHN5bWJvbC5zbWFsbF9zdG10LAotICAgICAgKHN5bWJvbC5leHByX3N0bXQsCi0gICAgICAgKHN5bWJvbC50ZXN0bGlzdCwKLSAgICAgICAgKHN5bWJvbC50ZXN0LAotICAgICAgICAgKHN5bWJvbC5hbmRfdGVzdCwKLSAgICAgICAgICAoc3ltYm9sLm5vdF90ZXN0LAotICAgICAgICAgICAoc3ltYm9sLmNvbXBhcmlzb24sCi0gICAgICAgICAgICAoc3ltYm9sLmV4cHIsCi0gICAgICAgICAgICAgKHN5bWJvbC54b3JfZXhwciwKLSAgICAgICAgICAgICAgKHN5bWJvbC5hbmRfZXhwciwKLSAgICAgICAgICAgICAgIChzeW1ib2wuc2hpZnRfZXhwciwKLSAgICAgICAgICAgICAgICAoc3ltYm9sLmFyaXRoX2V4cHIsCi0gICAgICAgICAgICAgICAgIChzeW1ib2wudGVybSwKLSAgICAgICAgICAgICAgICAgIChzeW1ib2wuZmFjdG9yLAotICAgICAgICAgICAgICAgICAgIChzeW1ib2wucG93ZXIsCi0gICAgICAgICAgICAgICAgICAgIChzeW1ib2wuYXRvbSwKLSAgICAgICAgICAgICAgICAgICAgICh0b2tlbi5TVFJJTkcsIFsnZG9jc3RyaW5nJ10pCi0gICAgICAgICAgICAgICAgICAgICApKSkpKSkpKSkpKSkpKSkpLAotICAgICAodG9rZW4uTkVXTElORSwgJycpCi0gICAgICkpCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci9zaW1wbGUucHkgYi9EZW1vL3BhcnNlci9zaW1wbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NGUyZmUuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvc2ltcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotZGVmIGYoKTogIm1heWJlIGEgZG9jc3RyaW5nIgpkaWZmIC0tZ2l0IGEvRGVtby9wYXJzZXIvc291cmNlLnB5IGIvRGVtby9wYXJzZXIvc291cmNlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAwNjI4Li4wMDAwMDAwCi0tLSBhL0RlbW8vcGFyc2VyL3NvdXJjZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSIiIkV4bWFwbGUgZmlsZSB0byBiZSBwYXJzZWQgZm9yIHRoZSBwYXJzZXJtb2R1bGUgZXhhbXBsZS4KLQotVGhlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBleGlzdCBvbmx5IHRvIGV4aGliaXQgdGhlIGFiaWxpdHkKLW9mIHRoZSBoYW5kbGluZyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIGZyb20gbmVzdGVkIGRlZmluaXRpb25zIHVzaW5nIHBhcnNlCi10cmVlcy4gIFRoZXkgc2hvdWxkbid0IGludGVyZXN0IHlvdSBvdGhlcndpc2UhCi0iIiIKLQotY2xhc3MgU2ltcGxlOgotICAgICJUaGlzIGNsYXNzIGRvZXMgdmVyeSBsaXR0bGUuIgotCi0gICAgZGVmIG1ldGhvZChzZWxmKToKLSAgICAgICAgIlRoaXMgbWV0aG9kIGRvZXMgYWxtb3N0IG5vdGhpbmcuIgotICAgICAgICByZXR1cm4gMQotCi0gICAgY2xhc3MgTmVzdGVkOgotICAgICAgICAiVGhpcyBpcyBhIG5lc3RlZCBjbGFzcy4iCi0KLSAgICAgICAgZGVmIG5lc3RlZF9tZXRob2Qoc2VsZik6Ci0gICAgICAgICAgICAiTWV0aG9kIG9mIE5lc3RlZCBjbGFzcy4iCi0gICAgICAgICAgICBkZWYgbmVzdGVkX2Z1bmN0aW9uKCk6Ci0gICAgICAgICAgICAgICAgIkZ1bmN0aW9uIGluIG1ldGhvZCBvZiBOZXN0ZWQgY2xhc3MuIgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHJldHVybiBuZXN0ZWRfZnVuY3Rpb24KLQotZGVmIGZ1bmN0aW9uKCk6Ci0gICAgIlRoaXMgZnVuY3Rpb24gbGl2ZXMgYXQgdGhlIG1vZHVsZSBsZXZlbC4iCi0gICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3Rlc3RfcGFyc2VyLnB5IGIvRGVtby9wYXJzZXIvdGVzdF9wYXJzZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU0ZDU1NzEuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvdGVzdF9wYXJzZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jICAoRm9yY2UgdGhlIHNjcmlwdCB0byB1c2UgdGhlIGxhdGVzdCBidWlsZC4pCi0jCi0jICB0ZXN0X3BhcnNlci5weQotCi1pbXBvcnQgcGFyc2VyLCB0cmFjZWJhY2sKLQotX251bUZhaWxlZCA9IDAKLQotZGVmIHRlc3RDaHVuayh0LCBmaWxlTmFtZSk6Ci0gICAgZ2xvYmFsIF9udW1GYWlsZWQKLSAgICBwcmludCgnLS0tLScsIGZpbGVOYW1lLCBlbmQ9JyAnKQotICAgIHRyeToKLSAgICAgICAgYXN0ID0gcGFyc2VyLnN1aXRlKHQpCi0gICAgICAgIHR1cCA9IHBhcnNlci5hc3QydHVwbGUoYXN0KQotICAgICAgICAjIHRoaXMgZGlzY2FyZHMgdGhlIGZpcnN0IEFTVDsgYSBodWdlIG1lbW9yeSBzYXZpbmdzIHdoZW4gcnVubmluZwotICAgICAgICAjIGFnYWluc3QgYSBsYXJnZSBzb3VyY2UgZmlsZSBsaWtlIFRraW50ZXIucHkuCi0gICAgICAgIGFzdCA9IE5vbmUKLSAgICAgICAgbmV3ID0gcGFyc2VyLnR1cGxlMmFzdCh0dXApCi0gICAgZXhjZXB0IHBhcnNlci5QYXJzZXJFcnJvciBhcyBlcnI6Ci0gICAgICAgIHByaW50KCkKLSAgICAgICAgcHJpbnQoJ3BhcnNlciBtb2R1bGUgcmFpc2VkIGV4Y2VwdGlvbiBvbiBpbnB1dCBmaWxlJywgZmlsZU5hbWUgKyAnOicpCi0gICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICBfbnVtRmFpbGVkID0gX251bUZhaWxlZCArIDEKLSAgICBlbHNlOgotICAgICAgICBpZiB0dXAgIT0gcGFyc2VyLmFzdDJ0dXBsZShuZXcpOgotICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoJ3BhcnNlciBtb2R1bGUgZmFpbGVkIG9uIGlucHV0IGZpbGUnLCBmaWxlTmFtZSkKLSAgICAgICAgICAgIF9udW1GYWlsZWQgPSBfbnVtRmFpbGVkICsgMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJ28uay4nKQotCi1kZWYgdGVzdEZpbGUoZmlsZU5hbWUpOgotICAgIHQgPSBvcGVuKGZpbGVOYW1lKS5yZWFkKCkKLSAgICB0ZXN0Q2h1bmsodCwgZmlsZU5hbWUpCi0KLWRlZiB0ZXN0KCk6Ci0gICAgaW1wb3J0IHN5cwotICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KLSAgICBpZiBub3QgYXJnczoKLSAgICAgICAgaW1wb3J0IGdsb2IKLSAgICAgICAgYXJncyA9IGdsb2IuZ2xvYigiKi5weSIpCi0gICAgICAgIGFyZ3Muc29ydCgpCi0gICAgbGlzdChtYXAodGVzdEZpbGUsIGFyZ3MpKQotICAgIHN5cy5leGl0KF9udW1GYWlsZWQgIT0gMCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vcGFyc2VyL3RleGlwcmUuZGF0IGIvRGVtby9wYXJzZXIvdGV4aXByZS5kYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZDAzYTYuLjAwMDAwMDAKLS0tIGEvRGVtby9wYXJzZXIvdGV4aXByZS5kYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotXGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCi1AYyAlKipzdGFydCBvZiBoZWFkZXIKLUBzZXRmaWxlbmFtZSBwYXJzZXIuaW5mbwotQHNldHRpdGxlIFB5dGhvbiBQYXJzZXIgTW9kdWxlIFJlZmVyZW5jZQotQHNldGNoYXB0ZXJuZXdwYWdlIG9kZAotQGZvb3Rub3Rlc3R5bGUgZW5kCi1AYyAlKiplbmQgb2YgaGVhZGVyCi0KLUBpZmluZm8KLVRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIGludGVyZmFjZXMKLXB1Ymxpc2hlZCBieSB0aGUgb3B0aW9uYWwgQGNvZGV7cGFyc2VyfSBtb2R1bGUgYW5kIGdpdmVzIGV4YW1wbGVzIG9mCi1ob3cgdGhleSBtYXkgYmUgdXNlZC4gIEl0IGNvbnRhaW5zIHRoZSBzYW1lIHRleHQgYXMgdGhlIGNoYXB0ZXIgb24gdGhlCi1AY29kZXtwYXJzZXJ9IG1vZHVsZSBpbiB0aGUgQGNpdGV7UHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlfSwgYnV0IGlzCi1wcmVzZW50ZWQgYXMgYSBzZXBhcmF0ZSBkb2N1bWVudC4KLQotQ29weXJpZ2h0IDE5OTUtMTk5NiBieSBGcmVkIEwuIERyYWtlLCBKci4sIFJlc3RvbiwgVmlyZ2luaWEsIFVTQSwgYW5kCi1WaXJnaW5pYSBQb2x5dGVjaG5pYyBJbnN0aXR1dGUgYW5kIFN0YXRlIFVuaXZlcnNpdHksIEJsYWNrc2J1cmcsCi1WaXJnaW5pYSwgVVNBLiAgUG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIGNvcHlyaWdodCAxOTkxLTE5OTUgYnkKLVN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMuICBDb3B5aW5nIGlzCi1wZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBQeXRob24gZGlzdHJpYnV0aW9uLAotd2l0aCB0aGUgYWRkaXRpb25hbCByZXN0cmljdGlvbiB0aGF0IHRoaXMgYWRkaXRpb25hbCBub3RpY2UgYmUgaW5jbHVkZWQKLWFuZCBtYWludGFpbmVkIG9uIGFsbCBkaXN0cmlidXRlZCBjb3BpZXMuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIEZyZWQgTC4gRHJha2UsIEpyLiBhbmQKLVZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSBub3QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQotd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1GUkVEIEwuIERSQUtFLCBKUi4gQU5EIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQgU1RBVEUKLVVOSVZFUlNJVFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKLUlOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KLUVWRU5UIFNIQUxMIEZSRUQgTC4gRFJBS0UsIEpSLiBPUiBWSVJHSU5JQSBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgQU5ECi1TVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi1AZW5kIGlmaW5mbwotCi1AdGl0bGVwYWdlCi1AdGl0bGUgUHl0aG9uIFBhcnNlciBNb2R1bGUgUmVmZXJlbmNlCi1AYXV0aG9yIEZyZWQgTC4gRHJha2UsIEpyLgotCi1AYyAgVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZHMgc3RhcnQgdGhlIGNvcHlyaWdodCBwYWdlLgotQHBhZ2UKLUB2c2tpcCAwcHQgcGx1cyAxZmlsbGwKLUNvcHlyaWdodCAxOTk1LTE5OTYgYnkgRnJlZCBMLiBEcmFrZSwgSnIuLCBSZXN0b24sIFZpcmdpbmlhLCBVU0EsIGFuZAotVmlyZ2luaWEgUG9seXRlY2huaWMgSW5zdGl0dXRlIGFuZCBTdGF0ZSBVbml2ZXJzaXR5LCBCbGFja3NidXJnLAotVmlyZ2luaWEsIFVTQS4gIFBvcnRpb25zIG9mIHRoZSBzb2Z0d2FyZSBjb3B5cmlnaHQgMTk5MS0xOTk1IGJ5Ci1TdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwgVGhlIE5ldGhlcmxhbmRzLiAgQ29weWluZyBpcwotcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gUHl0aG9uIGRpc3RyaWJ1dGlvbiwKLXdpdGggdGhlIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gdGhhdCB0aGlzIGFkZGl0aW9uYWwgbm90aWNlIGJlIGluY2x1ZGVkCi1hbmQgbWFpbnRhaW5lZCBvbiBhbGwgZGlzdHJpYnV0ZWQgY29waWVzLgotCi1AY2VudGVyIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi1kb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCi1wcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Ci1ib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KLXN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWVzIG9mIEZyZWQgTC4gRHJha2UsIEpyLiBhbmQKLVZpcmdpbmlhIFBvbHl0ZWNobmljIEluc3RpdHV0ZSBhbmQgU3RhdGUgVW5pdmVyc2l0eSBub3QgYmUgdXNlZCBpbgotYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZQotd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1GUkVEIEwuIERSQUtFLCBKUi4gQU5EIFZJUkdJTklBIFBPTFlURUNITklDIElOU1RJVFVURSBBTkQgU1RBVEUKLVVOSVZFUlNJVFkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKLUlOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8KLUVWRU5UIFNIQUxMIEZSRUQgTC4gRFJBS0UsIEpSLiBPUiBWSVJHSU5JQSBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgQU5ECi1TVEFURSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi1AZW5kIHRpdGxlcGFnZQotCi0KLUBub2RlIFRvcCwgT3ZlcnZpZXcsIChkaXIpLCAoZGlyKQotQHRvcCBUaGUgUHl0aG9uIFBhcnNlciBNb2R1bGUKLQotQGlmaW5mbwotVGhpcyBmaWxlIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlcwotcHVibGlzaGVkIGJ5IHRoZSBvcHRpb25hbCBAY29kZXtwYXJzZXJ9IG1vZHVsZSBhbmQgZ2l2ZXMgZXhhbXBsZXMgb2YKLWhvdyB0aGV5IG1heSBiZSB1c2VkLiAgSXQgY29udGFpbnMgdGhlIHNhbWUgdGV4dCBhcyB0aGUgY2hhcHRlciBvbiB0aGUKLUBjb2Rle3BhcnNlcn0gbW9kdWxlIGluIHRoZSBAY2l0ZXtQeXRob24gTGlicmFyeSBSZWZlcmVuY2V9LCBidXQgaXMKLXByZXNlbnRlZCBhcyBhIHNlcGFyYXRlIGRvY3VtZW50LgotCi1UaGlzIHZlcnNpb24gY29ycmVzcG9uZHMgdG8gUHl0aG9uIHZlcnNpb24gMS40ICgxIFNlcHQuIDE5OTYpLgotCi1AZW5kIGlmaW5mbwotCi1AYyBwbGFjZWhvbGRlciBmb3IgdGhlIG1hc3RlciBtZW51IC0tIHBhdGNoZWQgYnkgdGV4aW5mby1hbGwtbWVudXMtdXBkYXRlCi1AbWVudQotQGVuZCBtZW51CmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L0ZTUHJveHkucHkgYi9EZW1vL3BkaXN0L0ZTUHJveHkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDUxMGFjNzYuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9GU1Byb3h5LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIyICswLDAgQEAKLSIiIkZpbGUgU3lzdGVtIFByb3h5LgotCi1Qcm92aWRlIGFuIE9TLW5ldXRyYWwgdmlldyBvbiBhIGZpbGUgc3lzdGVtLCBsb2NhbGx5IG9yIHJlbW90ZWx5LgotVGhlIGZ1bmN0aW9uYWxpdHkgaXMgZ2VhcmVkIHRvd2FyZHMgaW1wbGVtZW50aW5nIHNvbWUgc29ydCBvZgotcmRpc3QtbGlrZSB1dGlsaXR5IGJldHdlZW4gYSBNYWMgYW5kIGEgVU5JWCBzeXN0ZW0uCi0KLVRoZSBtb2R1bGUgZGVmaW5lcyB0aHJlZSBjbGFzc2VzOgotCi1GU1Byb3h5TG9jYWwgIC0tIHVzZWQgZm9yIGxvY2FsIGFjY2VzcwotRlNQcm94eVNlcnZlciAtLSB1c2VkIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvZiByZW1vdGUgYWNjZXNzCi1GU1Byb3h5Q2xpZW50IC0tIHVzZWQgb24gdGhlIGNsaWVudCBzaWRlIG9mIHJlbW90ZSBhY2Nlc3MKLQotVGhlIHJlbW90ZSBjbGFzc2VzIGFyZSBpbnN0YW50aWF0ZWQgd2l0aCBhbiBJUCBhZGRyZXNzIGFuZCBhbiBvcHRpb25hbAotdmVyYm9zaXR5IGZsYWcuCi0iIiIKLQotaW1wb3J0IHNlcnZlcgotaW1wb3J0IGNsaWVudAotaW1wb3J0IG1kNQotaW1wb3J0IG9zCi1pbXBvcnQgZm5tYXRjaAotZnJvbSBzdGF0IGltcG9ydCAqCi1pbXBvcnQgdGltZQotaW1wb3J0IGZubWF0Y2gKLQotaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICBpbXBvcnQgbWFjZnMKLSAgICBtYXhuYW1lbGVuID0gMzEKLWVsc2U6Ci0gICAgbWFjZnMgPSBOb25lCi0gICAgbWF4bmFtZWxlbiA9IDI1NQotCi1za2lwbmFtZXMgPSAob3MuY3VyZGlyLCBvcy5wYXJkaXIpCi0KLQotY2xhc3MgRlNQcm94eUxvY2FsOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9kaXJzdGFjayA9IFtdCi0gICAgICAgIHNlbGYuX2lnbm9yZSA9IFsnKi5weWMnXSArIHNlbGYuX3JlYWRpZ25vcmUoKQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgd2hpbGUgc2VsZi5fZGlyc3RhY2s6Ci0gICAgICAgICAgICBzZWxmLmJhY2soKQotCi0gICAgZGVmIF9yZWFkaWdub3JlKHNlbGYpOgotICAgICAgICBmaWxlID0gc2VsZi5faGlkZSgnaWdub3JlJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5faGlkZSgnc3luY3RyZWUuaWdub3JlZmlsZXMnKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgaWdub3JlID0gW10KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzogbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgaWdub3JlLmFwcGVuZChsaW5lKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGlnbm9yZQotCi0gICAgZGVmIF9oaWRkZW4oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICByZXR1cm4gbmFtZVswXSA9PSAnKCcgYW5kIG5hbWVbLTFdID09ICcpJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG5hbWVbMF0gPT0gJy4nCi0KLSAgICBkZWYgX2hpZGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICByZXR1cm4gJyglcyknICUgbmFtZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICcuJXMnICUgbmFtZQotCi0gICAgZGVmIHZpc2libGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIGxlbihuYW1lKSA+IG1heG5hbWVsZW46IHJldHVybiAwCi0gICAgICAgIGlmIG5hbWVbLTFdID09ICd+JzogcmV0dXJuIDAKLSAgICAgICAgaWYgbmFtZSBpbiBza2lwbmFtZXM6IHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX2hpZGRlbihuYW1lKTogcmV0dXJuIDAKLSAgICAgICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQobmFtZSkKLSAgICAgICAgaWYgaGVhZCBvciBub3QgdGFpbDogcmV0dXJuIDAKLSAgICAgICAgaWYgbWFjZnM6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKSBhbmQgbm90IG9zLnBhdGguaXNkaXIobmFtZSk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBmcyA9IG1hY2ZzLkZTU3BlYyhuYW1lKQotICAgICAgICAgICAgICAgICAgICBjLCB0ID0gZnMuR2V0Q3JlYXRvclR5cGUoKQotICAgICAgICAgICAgICAgICAgICBpZiB0ICE9ICdURVhUJzogcmV0dXJuIDAKLSAgICAgICAgICAgICAgICBleGNlcHQgbWFjZnMuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgICAgICBwcmludCgiKioqIiwgbmFtZSwgbXNnKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsobmFtZSk6IHJldHVybiAwCi0gICAgICAgICAgICBpZiAnXDAnIGluIG9wZW4obmFtZSwgJ3JiJykucmVhZCg1MTIpOiByZXR1cm4gMAotICAgICAgICBmb3IgaWduIGluIHNlbGYuX2lnbm9yZToKLSAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChuYW1lLCBpZ24pOiByZXR1cm4gMAotICAgICAgICByZXR1cm4gMQotCi0gICAgZGVmIGNoZWNrKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBub3Qgc2VsZi52aXNpYmxlKG5hbWUpOgotICAgICAgICAgICAgcmFpc2Ugb3MuZXJyb3IoInByb3RlY3RlZCBuYW1lICVzIiAlIHJlcHIobmFtZSkpCi0KLSAgICBkZWYgY2hlY2tmaWxlKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLmNoZWNrKG5hbWUpCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShuYW1lKToKLSAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCJub3QgYSBwbGFpbiBmaWxlICVzIiAlIHJlcHIobmFtZSkpCi0KLSAgICBkZWYgcHdkKHNlbGYpOgotICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKLQotICAgIGRlZiBjZChzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5jaGVjayhuYW1lKQotICAgICAgICBzYXZlID0gb3MuZ2V0Y3dkKCksIHNlbGYuX2lnbm9yZQotICAgICAgICBvcy5jaGRpcihuYW1lKQotICAgICAgICBzZWxmLl9kaXJzdGFjay5hcHBlbmQoc2F2ZSkKLSAgICAgICAgc2VsZi5faWdub3JlID0gc2VsZi5faWdub3JlICsgc2VsZi5fcmVhZGlnbm9yZSgpCi0KLSAgICBkZWYgYmFjayhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX2RpcnN0YWNrOgotICAgICAgICAgICAgcmFpc2Ugb3MuZXJyb3IoImVtcHR5IGRpcmVjdG9yeSBzdGFjayIpCi0gICAgICAgIGRpciwgaWdub3JlID0gc2VsZi5fZGlyc3RhY2tbLTFdCi0gICAgICAgIG9zLmNoZGlyKGRpcikKLSAgICAgICAgZGVsIHNlbGYuX2RpcnN0YWNrWy0xXQotICAgICAgICBzZWxmLl9pZ25vcmUgPSBpZ25vcmUKLQotICAgIGRlZiBfZmlsdGVyKHNlbGYsIGZpbGVzLCBwYXQgPSBOb25lKToKLSAgICAgICAgaWYgcGF0OgotICAgICAgICAgICAgZGVmIGtlZXAobmFtZSwgcGF0ID0gcGF0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gZm5tYXRjaC5mbm1hdGNoKG5hbWUsIHBhdCkKLSAgICAgICAgICAgIGZpbGVzID0gbGlzdChmaWx0ZXIoa2VlcCwgZmlsZXMpKQotICAgICAgICBmaWxlcyA9IGxpc3QoZmlsdGVyKHNlbGYudmlzaWJsZSwgZmlsZXMpKQotICAgICAgICBmaWxlcy5zb3J0KCkKLSAgICAgICAgcmV0dXJuIGZpbGVzCi0KLSAgICBkZWYgbGlzdChzZWxmLCBwYXQgPSBOb25lKToKLSAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbHRlcihmaWxlcywgcGF0KQotCi0gICAgZGVmIGxpc3RmaWxlcyhzZWxmLCBwYXQgPSBOb25lKToKLSAgICAgICAgZmlsZXMgPSBvcy5saXN0ZGlyKG9zLmN1cmRpcikKLSAgICAgICAgZmlsZXMgPSBsaXN0KGZpbHRlcihvcy5wYXRoLmlzZmlsZSwgZmlsZXMpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsdGVyKGZpbGVzLCBwYXQpCi0KLSAgICBkZWYgbGlzdHN1YmRpcnMoc2VsZiwgcGF0ID0gTm9uZSk6Ci0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihvcy5jdXJkaXIpCi0gICAgICAgIGZpbGVzID0gbGlzdChmaWx0ZXIob3MucGF0aC5pc2RpciwgZmlsZXMpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsdGVyKGZpbGVzLCBwYXQpCi0KLSAgICBkZWYgZXhpc3RzKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi52aXNpYmxlKG5hbWUpIGFuZCBvcy5wYXRoLmV4aXN0cyhuYW1lKQotCi0gICAgZGVmIGlzZGlyKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi52aXNpYmxlKG5hbWUpIGFuZCBvcy5wYXRoLmlzZGlyKG5hbWUpCi0KLSAgICBkZWYgaXNsaW5rKHNlbGYsIG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi52aXNpYmxlKG5hbWUpIGFuZCBvcy5wYXRoLmlzbGluayhuYW1lKQotCi0gICAgZGVmIGlzZmlsZShzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIHNlbGYudmlzaWJsZShuYW1lKSBhbmQgb3MucGF0aC5pc2ZpbGUobmFtZSkKLQotICAgIGRlZiBzdW0oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYuY2hlY2tmaWxlKG5hbWUpCi0gICAgICAgIEJVRkZFUlNJWkUgPSAxMDI0KjgKLSAgICAgICAgZiA9IG9wZW4obmFtZSkKLSAgICAgICAgc3VtID0gbWQ1Lm5ldygpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBidWZmZXIgPSBmLnJlYWQoQlVGRkVSU0laRSkKLSAgICAgICAgICAgIGlmIG5vdCBidWZmZXI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHN1bS51cGRhdGUoYnVmZmVyKQotICAgICAgICByZXR1cm4gc3VtLmRpZ2VzdCgpCi0KLSAgICBkZWYgc2l6ZShzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5jaGVja2ZpbGUobmFtZSkKLSAgICAgICAgcmV0dXJuIG9zLnN0YXQobmFtZSlbU1RfU0laRV0KLQotICAgIGRlZiBtdGltZShzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5jaGVja2ZpbGUobmFtZSkKLSAgICAgICAgcmV0dXJuIHRpbWUubG9jYWx0aW1lKG9zLnN0YXQobmFtZSlbU1RfTVRJTUVdKQotCi0gICAgZGVmIHN0YXQoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYuY2hlY2tmaWxlKG5hbWUpCi0gICAgICAgIHNpemUgPSBvcy5zdGF0KG5hbWUpW1NUX1NJWkVdCi0gICAgICAgIG10aW1lID0gdGltZS5sb2NhbHRpbWUob3Muc3RhdChuYW1lKVtTVF9NVElNRV0pCi0gICAgICAgIHJldHVybiBzaXplLCBtdGltZQotCi0gICAgZGVmIGluZm8oc2VsZiwgbmFtZSk6Ci0gICAgICAgIHN1bSA9IHNlbGYuc3VtKG5hbWUpCi0gICAgICAgIHNpemUgPSBvcy5zdGF0KG5hbWUpW1NUX1NJWkVdCi0gICAgICAgIG10aW1lID0gdGltZS5sb2NhbHRpbWUob3Muc3RhdChuYW1lKVtTVF9NVElNRV0pCi0gICAgICAgIHJldHVybiBzdW0sIHNpemUsIG10aW1lCi0KLSAgICBkZWYgX2xpc3Qoc2VsZiwgZnVuY3Rpb24sIGxpc3QpOgotICAgICAgICBpZiBsaXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBsaXN0ID0gc2VsZi5saXN0ZmlsZXMoKQotICAgICAgICByZXMgPSBbXQotICAgICAgICBmb3IgbmFtZSBpbiBsaXN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoKG5hbWUsIGZ1bmN0aW9uKG5hbWUpKSkKLSAgICAgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoKG5hbWUsIE5vbmUpKQotICAgICAgICByZXR1cm4gcmVzCi0KLSAgICBkZWYgc3VtbGlzdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9saXN0KHNlbGYuc3VtLCBsaXN0KQotCi0gICAgZGVmIHN0YXRsaXN0KHNlbGYsIGxpc3QgPSBOb25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3Qoc2VsZi5zdGF0LCBsaXN0KQotCi0gICAgZGVmIG10aW1lbGlzdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9saXN0KHNlbGYubXRpbWUsIGxpc3QpCi0KLSAgICBkZWYgc2l6ZWxpc3Qoc2VsZiwgbGlzdCA9IE5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbGlzdChzZWxmLnNpemUsIGxpc3QpCi0KLSAgICBkZWYgaW5mb2xpc3Qoc2VsZiwgbGlzdCA9IE5vbmUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbGlzdChzZWxmLmluZm8sIGxpc3QpCi0KLSAgICBkZWYgX2RpY3Qoc2VsZiwgZnVuY3Rpb24sIGxpc3QpOgotICAgICAgICBpZiBsaXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBsaXN0ID0gc2VsZi5saXN0ZmlsZXMoKQotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIG5hbWUgaW4gbGlzdDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBkaWN0W25hbWVdID0gZnVuY3Rpb24obmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgcmV0dXJuIGRpY3QKLQotICAgIGRlZiBzdW1kaWN0KHNlbGYsIGxpc3QgPSBOb25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZGljdChzZWxmLnN1bSwgbGlzdCkKLQotICAgIGRlZiBzaXplZGljdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmRpY3Qoc2VsZi5zaXplLCBsaXN0KQotCi0gICAgZGVmIG10aW1lZGljdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmRpY3Qoc2VsZi5tdGltZSwgbGlzdCkKLQotICAgIGRlZiBzdGF0ZGljdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmRpY3Qoc2VsZi5zdGF0LCBsaXN0KQotCi0gICAgZGVmIGluZm9kaWN0KHNlbGYsIGxpc3QgPSBOb25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2RpY3Qoc2VsZi5pbmZvLCBsaXN0KQotCi0gICAgZGVmIHJlYWQoc2VsZiwgbmFtZSwgb2Zmc2V0ID0gMCwgbGVuZ3RoID0gLTEpOgotICAgICAgICBzZWxmLmNoZWNrZmlsZShuYW1lKQotICAgICAgICBmID0gb3BlbihuYW1lKQotICAgICAgICBmLnNlZWsob2Zmc2V0KQotICAgICAgICBpZiBsZW5ndGggPT0gMDoKLSAgICAgICAgICAgIGRhdGEgPSAnJwotICAgICAgICBlbGlmIGxlbmd0aCA8IDA6Ci0gICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQobGVuZ3RoKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBjcmVhdGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHNlbGYuY2hlY2sobmFtZSkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrZmlsZShuYW1lKQotICAgICAgICAgICAgYm5hbWUgPSBuYW1lICsgJ34nCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MudW5saW5rKGJuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIG9zLnJlbmFtZShuYW1lLCBibmFtZSkKLSAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3cnKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiB3cml0ZShzZWxmLCBuYW1lLCBkYXRhLCBvZmZzZXQgPSAwKToKLSAgICAgICAgc2VsZi5jaGVja2ZpbGUobmFtZSkKLSAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3IrJykKLSAgICAgICAgZi5zZWVrKG9mZnNldCkKLSAgICAgICAgZi53cml0ZShkYXRhKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiBta2RpcihzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5jaGVjayhuYW1lKQotICAgICAgICBvcy5ta2RpcihuYW1lLCAwbzc3NykKLQotICAgIGRlZiBybWRpcihzZWxmLCBuYW1lKToKLSAgICAgICAgc2VsZi5jaGVjayhuYW1lKQotICAgICAgICBvcy5ybWRpcihuYW1lKQotCi0KLWNsYXNzIEZTUHJveHlTZXJ2ZXIoRlNQcm94eUxvY2FsLCBzZXJ2ZXIuU2VydmVyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzLCB2ZXJib3NlID0gc2VydmVyLlZFUkJPU0UpOgotICAgICAgICBGU1Byb3h5TG9jYWwuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VydmVyLlNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyZXNzLCB2ZXJib3NlKQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgc2VydmVyLlNlcnZlci5fY2xvc2Uoc2VsZikKLSAgICAgICAgRlNQcm94eUxvY2FsLl9jbG9zZShzZWxmKQotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgc2VydmVyLlNlcnZlci5fc2VydmUoc2VsZikKLSAgICAgICAgIyBSZXRyZWF0IGludG8gc3RhcnQgZGlyZWN0b3J5Ci0gICAgICAgIHdoaWxlIHNlbGYuX2RpcnN0YWNrOiBzZWxmLmJhY2soKQotCi0KLWNsYXNzIEZTUHJveHlDbGllbnQoY2xpZW50LkNsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgdmVyYm9zZSA9IGNsaWVudC5WRVJCT1NFKToKLSAgICAgICAgY2xpZW50LkNsaWVudC5fX2luaXRfXyhzZWxmLCBhZGRyZXNzLCB2ZXJib3NlKQotCi0KLWRlZiB0ZXN0KCk6Ci0gICAgaW1wb3J0IHN0cmluZwotICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIHBvcnQgPSBzdHJpbmcuYXRvaShzeXMuYXJndlsxXSkKLSAgICBlbHNlOgotICAgICAgICBwb3J0ID0gNDEyNwotICAgIHByb3h5ID0gRlNQcm94eVNlcnZlcigoJycsIHBvcnQpKQotICAgIHByb3h5Ll9zZXJ2ZXJsb29wKCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9SQ1NQcm94eS5weSBiL0RlbW8vcGRpc3QvUkNTUHJveHkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDdjM2IyNGYuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9SQ1NQcm94eS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSIiIlJDUyBQcm94eS4KLQotUHJvdmlkZSBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIG9uIFJDUyBmaWxlcywgbG9jYWxseSBvciByZW1vdGVseS4KLVRoZSBmdW5jdGlvbmFsaXR5IGlzIGdlYXJlZCB0b3dhcmRzIGltcGxlbWVudGluZyBzb21lIHNvcnQgb2YKLXJlbW90ZSBDVlMgbGlrZSB1dGlsaXR5LiAgSXQgaXMgbW9kZWxlZCBhZnRlciB0aGUgc2ltaWxhciBtb2R1bGUKLUZTUHJveHkuCi0KLVRoZSBtb2R1bGUgZGVmaW5lcyB0d28gY2xhc3NlczoKLQotUkNTUHJveHlMb2NhbCAgLS0gdXNlZCBmb3IgbG9jYWwgYWNjZXNzCi1SQ1NQcm94eVNlcnZlciAtLSB1c2VkIG9uIHRoZSBzZXJ2ZXIgc2lkZSBvZiByZW1vdGUgYWNjZXNzCi0KLVRoZSBjb3JyZXNwb25kaW5nIGNsaWVudCBjbGFzcywgUkNTUHJveHlDbGllbnQsIGlzIGRlZmluZWQgaW4gbW9kdWxlCi1yY3NjbGllbnQuCi0KLVRoZSByZW1vdGUgY2xhc3NlcyBhcmUgaW5zdGFudGlhdGVkIHdpdGggYW4gSVAgYWRkcmVzcyBhbmQgYW4gb3B0aW9uYWwKLXZlcmJvc2l0eSBmbGFnLgotIiIiCi0KLWltcG9ydCBzZXJ2ZXIKLWltcG9ydCBtZDUKLWltcG9ydCBvcwotaW1wb3J0IGZubWF0Y2gKLWltcG9ydCBzdHJpbmcKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHJjc2xpYgotCi0KLWNsYXNzIERpclN1cHBvcnQ6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2RpcnN0YWNrID0gW10KLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9jbG9zZSgpCi0KLSAgICBkZWYgX2Nsb3NlKHNlbGYpOgotICAgICAgICB3aGlsZSBzZWxmLl9kaXJzdGFjazoKLSAgICAgICAgICAgIHNlbGYuYmFjaygpCi0KLSAgICBkZWYgcHdkKHNlbGYpOgotICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKLQotICAgIGRlZiBjZChzZWxmLCBuYW1lKToKLSAgICAgICAgc2F2ZSA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKG5hbWUpCi0gICAgICAgIHNlbGYuX2RpcnN0YWNrLmFwcGVuZChzYXZlKQotCi0gICAgZGVmIGJhY2soc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9kaXJzdGFjazoKLSAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCJlbXB0eSBkaXJlY3Rvcnkgc3RhY2siKQotICAgICAgICBkaXIgPSBzZWxmLl9kaXJzdGFja1stMV0KLSAgICAgICAgb3MuY2hkaXIoZGlyKQotICAgICAgICBkZWwgc2VsZi5fZGlyc3RhY2tbLTFdCi0KLSAgICBkZWYgbGlzdHN1YmRpcnMoc2VsZiwgcGF0ID0gTm9uZSk6Ci0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihvcy5jdXJkaXIpCi0gICAgICAgIGZpbGVzID0gbGlzdChmaWx0ZXIob3MucGF0aC5pc2RpciwgZmlsZXMpKQotICAgICAgICByZXR1cm4gc2VsZi5fZmlsdGVyKGZpbGVzLCBwYXQpCi0KLSAgICBkZWYgaXNkaXIoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmlzZGlyKG5hbWUpCi0KLSAgICBkZWYgbWtkaXIoc2VsZiwgbmFtZSk6Ci0gICAgICAgIG9zLm1rZGlyKG5hbWUsIDBvNzc3KQotCi0gICAgZGVmIHJtZGlyKHNlbGYsIG5hbWUpOgotICAgICAgICBvcy5ybWRpcihuYW1lKQotCi0KLWNsYXNzIFJDU1Byb3h5TG9jYWwocmNzbGliLlJDUywgRGlyU3VwcG9ydCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHJjc2xpYi5SQ1MuX19pbml0X18oc2VsZikKLSAgICAgICAgRGlyU3VwcG9ydC5fX2luaXRfXyhzZWxmKQotCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIERpclN1cHBvcnQuX19kZWxfXyhzZWxmKQotICAgICAgICByY3NsaWIuUkNTLl9fZGVsX18oc2VsZikKLQotICAgIGRlZiBzdW1saXN0KHNlbGYsIGxpc3QgPSBOb25lKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3Qoc2VsZi5zdW0sIGxpc3QpCi0KLSAgICBkZWYgc3VtZGljdChzZWxmLCBsaXN0ID0gTm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9kaWN0KHNlbGYuc3VtLCBsaXN0KQotCi0gICAgZGVmIHN1bShzZWxmLCBuYW1lX3Jldik6Ci0gICAgICAgIGYgPSBzZWxmLl9vcGVuKG5hbWVfcmV2KQotICAgICAgICBCVUZGRVJTSVpFID0gMTAyNCo4Ci0gICAgICAgIHN1bSA9IG1kNS5uZXcoKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgYnVmZmVyID0gZi5yZWFkKEJVRkZFUlNJWkUpCi0gICAgICAgICAgICBpZiBub3QgYnVmZmVyOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzdW0udXBkYXRlKGJ1ZmZlcikKLSAgICAgICAgc2VsZi5fY2xvc2VwaXBlKGYpCi0gICAgICAgIHJldHVybiBzdW0uZGlnZXN0KCkKLQotICAgIGRlZiBnZXQoc2VsZiwgbmFtZV9yZXYpOgotICAgICAgICBmID0gc2VsZi5fb3BlbihuYW1lX3JldikKLSAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgIHNlbGYuX2Nsb3NlcGlwZShmKQotICAgICAgICByZXR1cm4gZGF0YQotCi0gICAgZGVmIHB1dChzZWxmLCBuYW1lX3JldiwgZGF0YSwgbWVzc2FnZT1Ob25lKToKLSAgICAgICAgbmFtZSwgcmV2ID0gc2VsZi5fdW5tYW5nbGUobmFtZV9yZXYpCi0gICAgICAgIGYgPSBvcGVuKG5hbWUsICd3JykKLSAgICAgICAgZi53cml0ZShkYXRhKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5jaGVja2luKG5hbWVfcmV2LCBtZXNzYWdlKQotICAgICAgICBzZWxmLl9yZW1vdmUobmFtZSkKLQotICAgIGRlZiBfbGlzdChzZWxmLCBmdW5jdGlvbiwgbGlzdCA9IE5vbmUpOgotICAgICAgICAiIiJJTlRFUk5BTDogYXBwbHkgRlVOQ1RJT04gdG8gYWxsIGZpbGVzIGluIExJU1QuCi0KLSAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgcmVzdWx0cy4KLQotICAgICAgICBUaGUgbGlzdCBkZWZhdWx0cyB0byBhbGwgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBpZiBOb25lLgotCi0gICAgICAgICIiIgotICAgICAgICBpZiBsaXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBsaXN0ID0gc2VsZi5saXN0ZmlsZXMoKQotICAgICAgICByZXMgPSBbXQotICAgICAgICBmb3IgbmFtZSBpbiBsaXN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoKG5hbWUsIGZ1bmN0aW9uKG5hbWUpKSkKLSAgICAgICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoKG5hbWUsIE5vbmUpKQotICAgICAgICByZXR1cm4gcmVzCi0KLSAgICBkZWYgX2RpY3Qoc2VsZiwgZnVuY3Rpb24sIGxpc3QgPSBOb25lKToKLSAgICAgICAgIiIiSU5URVJOQUw6IGFwcGx5IEZVTkNUSU9OIHRvIGFsbCBmaWxlcyBpbiBMSVNULgotCi0gICAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBmaWxlcyB0byByZXN1bHRzLgotCi0gICAgICAgIFRoZSBsaXN0IGRlZmF1bHRzIHRvIGFsbCBmaWxlcyBpbiB0aGUgZGlyZWN0b3J5IGlmIE5vbmUuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIGxpc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGxpc3QgPSBzZWxmLmxpc3RmaWxlcygpCi0gICAgICAgIGRpY3QgPSB7fQotICAgICAgICBmb3IgbmFtZSBpbiBsaXN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRpY3RbbmFtZV0gPSBmdW5jdGlvbihuYW1lKQotICAgICAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgSU9FcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICByZXR1cm4gZGljdAotCi0KLWNsYXNzIFJDU1Byb3h5U2VydmVyKFJDU1Byb3h5TG9jYWwsIHNlcnZlci5TZWN1cmVTZXJ2ZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MsIHZlcmJvc2UgPSBzZXJ2ZXIuVkVSQk9TRSk6Ci0gICAgICAgIFJDU1Byb3h5TG9jYWwuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VydmVyLlNlY3VyZVNlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyZXNzLCB2ZXJib3NlKQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgc2VydmVyLlNlY3VyZVNlcnZlci5fY2xvc2Uoc2VsZikKLSAgICAgICAgUkNTUHJveHlMb2NhbC5fY2xvc2Uoc2VsZikKLQotICAgIGRlZiBfc2VydmUoc2VsZik6Ci0gICAgICAgIHNlcnZlci5TZWN1cmVTZXJ2ZXIuX3NlcnZlKHNlbGYpCi0gICAgICAgICMgUmV0cmVhdCBpbnRvIHN0YXJ0IGRpcmVjdG9yeQotICAgICAgICB3aGlsZSBzZWxmLl9kaXJzdGFjazogc2VsZi5iYWNrKCkKLQotCi1kZWYgdGVzdF9zZXJ2ZXIoKToKLSAgICBpbXBvcnQgc3RyaW5nCi0gICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgcG9ydCA9IHN0cmluZy5hdG9pKHN5cy5hcmd2WzFdKQotICAgIGVsc2U6Ci0gICAgICAgIHBvcnQgPSA0MTI3Ci0gICAgcHJveHkgPSBSQ1NQcm94eVNlcnZlcigoJycsIHBvcnQpKQotICAgIHByb3h5Ll9zZXJ2ZXJsb29wKCkKLQotCi1kZWYgdGVzdCgpOgotICAgIGltcG9ydCBzeXMKLSAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdIG9yIHN5cy5hcmd2WzFdIGFuZCBzeXMuYXJndlsxXVswXSBpbiAnMDEyMzQ1Njc4OSc6Ci0gICAgICAgIHRlc3Rfc2VydmVyKCkKLSAgICAgICAgc3lzLmV4aXQoMCkKLSAgICBwcm94eSA9IFJDU1Byb3h5TG9jYWwoKQotICAgIHdoYXQgPSBzeXMuYXJndlsxXQotICAgIGlmIGhhc2F0dHIocHJveHksIHdoYXQpOgotICAgICAgICBhdHRyID0gZ2V0YXR0cihwcm94eSwgd2hhdCkKLSAgICAgICAgaWYgaGFzYXR0cihhdHRyLCAnX19jYWxsX18nKToKLSAgICAgICAgICAgIHByaW50KGF0dHIoKnN5cy5hcmd2WzI6XSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludChyZXByKGF0dHIpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIlczogbm8gc3VjaCBhdHRyaWJ1dGUiICUgd2hhdCkKLSAgICAgICAgc3lzLmV4aXQoMikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9SRUFETUUgYi9EZW1vL3BkaXN0L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmYWMyNC4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi1GaWxlc3lzdGVtLCBSQ1MgYW5kIENWUyBjbGllbnQgYW5kIHNlcnZlciBjbGFzc2VzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSoqKiBTZWUgdGhlIHNlY3VyaXR5IHdhcm5pbmcgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUhICoqKgotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyB2YXJpb3VzIG1vZHVsZXMgYW5kIGNsYXNzZXMgdGhhdCBzdXBwb3J0Ci1yZW1vdGUgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucy4KLQotQ1ZTIHN0dWZmCi0tLS0tLS0tLS0KLQotcmN2cwkJCVNjcmlwdCB0byBwdXQgaW4geW91ciBiaW4gZGlyZWN0b3J5Ci1yY3ZzLnB5CQkJUmVtb3RlIENWUyBjbGllbnQgY29tbWFuZCBsaW5lIGludGVyZmFjZQotCi1jdnNsaWIucHkJCUNWUyBhZG1pbiBmaWxlcyBjbGFzc2VzICh1c2VkIGJ5IHJyY3MpCi1jdnNsb2NrLnB5CQlDVlMgbG9ja2luZyBhbGdvcml0aG1zCi0KLVJDUyBzdHVmZgotLS0tLS0tLS0tCi0KLXJyY3MJCQlTY3JpcHQgdG8gcHV0IGluIHlvdXIgYmluIGRpcmVjdG9yeQotcnJjcy5weQkJCVJlbW90ZSBSQ1MgY2xpZW50IGNvbW1hbmQgbGluZSBpbnRlcmZhY2UKLQotcmNzY2xpZW50LnB5CQlSZXR1cm4gYW4gUkNTUHJveHlDbGllbnQgaW5zdGFuY2UKLQkJCShoYXMgcmVhc29uYWJsZSBkZWZhdWx0IHNlcnZlci9wb3J0L2RpcmVjdG9yeSkKLQotUkNTUHJveHkucHkJCVJDUyBwcm94eSBhbmQgc2VydmVyIGNsYXNzZXMgKG9uIHRvcCBvZiByY3NsaWIucHkpCi0KLXJjc2xpYi5weQkJTG9jYWwtb25seSBSQ1MgYmFzZSBjbGFzcyAoYWZmZWN0cyBzdGRvdXQgJgotCQkJbG9jYWwgd29yayBmaWxlcykKLQotRlNQcm94eSBzdHVmZgotLS0tLS0tLS0tLS0tLQotCi1zdW10cmVlLnB5CQlPbGQgZGVtbyBmb3IgRlNQcm94eQotY21wdHJlZS5weQkJRmlyc3QgRlNQcm94eSBjbGllbnQgKHVzZWQgdG8gc3luYyBmcm9tIHRoZSBNYWMpCi1GU1Byb3h5LnB5CQlGaWxlc3lzdGVtIGludGVyZmFjZSBjbGFzc2VzCi0KLUdlbmVyaWMgY2xpZW50L3NlcnZlciBzdHVmZgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNsaWVudC5weQkJQ2xpZW50IGNsYXNzCi1zZXJ2ZXIucHkJCVNlcnZlciBjbGFzcwotCi1zZWN1cml0eS5weQkJU2VjdXJpdHkgbWl4LWluIGNsYXNzIChub3QgdmVyeSBzZWN1cmUgSSB0aGluaykKLQotT3RoZXIgZ2VuZXJpYyBzdHVmZgotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1jbWRmdy5weQkJQ29tbWFuZEZyYW1lV29yayBjbGFzcwotCQkJKHVzZWQgYnkgcmN2cywgc2hvdWxkIGJlIHVzZWQgYnkgcnJjcyBhcyB3ZWxsKQotCi0KLUNsaWVudC9TZXJ2ZXIgb3BlcmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgQ2xpZW50IGFuZCBTZXJ2ZXIgY2xhc3NlcyBpbXBsZW1lbnQgYSBzaW1wbGUtbWluZGVkIFJQQyBwcm90b2NvbCwKLXVzaW5nIFB5dGhvbidzIHBpY2tsZSBtb2R1bGUgdG8gdHJhbnNmZXIgYXJndW1lbnRzLCByZXR1cm4gdmFsdWVzIGFuZAotZXhjZXB0aW9ucyB3aXRoIHRoZSBtb3N0IGdlbmVyYWxpdHkuICBUaGUgU2VydmVyIGNsYXNzIGlzIGluc3RhbnRpYXRlZAotd2l0aCBhIHBvcnQgbnVtYmVyIG9uIHdoaWNoIGl0IHNob3VsZCBsaXN0ZW4gZm9yIHJlcXVlc3RzOyB0aGUgQ2xpZW50Ci1jbGFzcyBpcyBpbnN0YW50aWF0ZWQgd2l0aCBhIGhvc3QgbmFtZSBhbmQgYSBwb3J0IG51bWJlciB3aGVyZSBpdAotc2hvdWxkIGNvbm5lY3QgdG8uICBPbmNlIGEgY2xpZW50IGlzIGNvbm5lY3RlZCwgYSBUQ1AgY29ubmVjdGlvbiBpcwotbWFpbnRhaW5lZCBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyLgotCi1UaGUgU2VydmVyIGNsYXNzIGN1cnJlbnRseSBoYW5kbGVzIG9ubHkgb25lIGNvbm5lY3Rpb24gYXQgYSB0aW1lOwotaG93ZXZlciBpdCBjb3VsZCBiZSByZXdyaXR0ZW4gdG8gYWxsb3cgdmFyaW91cyBtb2RlcyBvZiBvcGVyYXRpb25zLAotdXNpbmcgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgb3IgdGhlIHNlbGVjdCgpIHN5c3RlbSBjYWxsIGFzCi1kZXNpcmVkIHRvIHNlcnZlIG11bHRpcGxlIGNsaWVudHMgc2ltdWx0YW5lb3VzbHkgKHdoZW4gdXNpbmcgc2VsZWN0KCksCi1zdGlsbCBoYW5kbGluZyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUpLiAgVGhpcyB3b3VsZCBub3QgcmVxdWlyZQotcmV3cml0aW5nIG9mIHRoZSBDbGllbnQgY2xhc3MuICBJdCBtYXkgYWxzbyBiZSBwb3NzaWJsZSB0byBhZGFwdCB0aGUKLWNvZGUgdG8gdXNlIFVEUCBpbnN0ZWFkIG9mIFRDUCwgYnV0IHRoZW4gYm90aCBjbGFzc2VzIHdpbGwgaGF2ZSB0byBiZQotcmV3cml0dGVuIChhbmQgdW5sZXNzIGV4dGVuc2l2ZSBhY2tub3dsZWdlbWVudHMgYW5kIHJlcXVlc3Qgc2VyaWFsCi1udW1iZXJzIGFyZSB1c2VkLCB0aGUgc2VydmVyIHNob3VsZCBoYW5kbGUgZHVwbGljYXRlIHJlcXVlc3RzLCBzbyBpdHMKLXNlbWFudGljcyBzaG91bGQgYmUgaWRlbXBvdGVudCAtLSBzaHJ1ZGRlcikuCi0KLUV2ZW4gdGhvdWdoIHRoZSBGU1Byb3h5IGFuZCBSQ1NQcm94eSBtb2R1bGVzIGRlZmluZSBjbGllbnQgY2xhc3NlcywKLXRoZSBjbGllbnQgY2xhc3MgaXMgZnVsbHkgZ2VuZXJpYyAtLSB3aGF0IG1ldGhvZHMgaXQgc3VwcG9ydHMgaXMKLWRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIHNlcnZlci4gIFRoZSBzZXJ2ZXIgY2xhc3MsIGhvd2V2ZXIsIG11c3QgYmUKLWRlcml2ZWQgZnJvbS4gIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYXMgZm9sbG93czoKLQotCWZyb20gc2VydmVyIGltcG9ydCBTZXJ2ZXIKLQlmcm9tIGNsaWVudCBpbXBvcnQgQ2xpZW50Ci0KLQkjIERlZmluZSBhIGNsYXNzIHRoYXQgcGVyZm9ybXMgdGhlIG9wZXJhdGlvbnMgbG9jYWxseQotCWNsYXNzIE15Q2xhc3NMb2NhbDoKLQkJZGVmIF9faW5pdF9fKHNlbGYpOiAuLi4KLQkJZGVmIF9jbG9zZShzZWxmKTogLi4uCi0KLQkjIERlcml2ZSBhIHNlcnZlciBjbGFzcyB1c2luZyBtdWx0aXBsZSBpbmhlcml0YW5jZQotCWNsYXNzIE15Q2xhc3NTZXJ2ZXIoTXlDbGFzc0xvY2FsLCBTZXJ2ZXIpOgotCQlkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcyk6Ci0JCQkjIE11c3QgaW5pdGlhbGl6ZSBNeUNsYXNzTG9jYWwgYXMgd2VsbCBhcyBTZXJ2ZXIKLQkJCU15Q2xhc3NMb2NhbC5fX2luaXRfXyhzZWxmKQotCQkJU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHJlc3MpCi0JCWRlZiBfY2xvc2Uoc2VsZik6Ci0JCQlTZXJ2ZXIuX2Nsb3NlKCkKLQkJCU15Q2xhc3NMb2NhbC5fY2xvc2UoKQotCi0JIyBBIGR1bW15IGNsaWVudCBjbGFzcwotCWNsYXNzIE15Q2xhc3NDbGllbnQoQ2xpZW50KTogcGFzcwotCi1Ob3RlIHRoYXQgYmVjYXVzZSBNeUNsYXNzTG9jYWwgaXNuJ3QgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZgotTXlDbGFzc0NsaWVudCwgaXQgd291bGQgYWN0dWFsbHkgYmUgYmV0dGVyIHRvIHBsYWNlIGl0IGluIGEgc2VwYXJhdGUKLW1vZHVsZSBzbyB0aGUgZGVmaW5pdGlvbiBvZiBNeUNsYXNzTG9jYWwgaXNuJ3QgZXhlY3V0ZWQgd2hlbiB3ZSBvbmx5Ci1pbnN0YW50aWF0ZSBhIGNsaWVudC4KLQotVGhlIG1vZHVsZXMgY2xpZW50IGFuZCBzZXJ2ZXIgc2hvdWxkIHByb2JhYmx5IGJlIHJlbmFtZWQgdG8gQ2xpZW50IGFuZAotU2VydmVyIGluIG9yZGVyIHRvIG1hdGNoIHRoZSBjbGFzcyBuYW1lcy4KLQotCi0qKiogU2VjdXJpdHkgd2FybmluZzogdGhpcyB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQgeW91IGhhdmUgYSBmaWxlCi0kSE9NRS8ucHl0aG9uX2tleWZpbGUgYXQgdGhlIHNlcnZlciBhbmQgY2xpZW50IHNpZGUgY29udGFpbmluZyB0d28KLWNvbW1hLSBzZXBhcmF0ZWQgbnVtYmVycy4gIFRoZSBzZWN1cml0eSBzeXN0ZW0gYXQgdGhlIG1vbWVudCBtYWtlcyBubwotZ3VhcmFudGVlcyBvZiBhY3R1YWxsbmcgYmVpbmcgc2VjdXJlIC0tIGhvd2V2ZXIgaXQgcmVxdWlyZXMgdGhhdCB0aGUKLWtleSBmaWxlIGV4aXN0cyBhbmQgY29udGFpbnMgdGhlIHNhbWUgbnVtYmVycyBhdCBib3RoIGVuZHMgZm9yIHRoaXMgdG8KLXdvcmsuICAoWW91IGNhbiBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGtleWZpbGUgaW4gJFBZVEhPTl9LRVlGSUxFKS4KLUhhdmUgYSBsb29rIGF0IHRoZSBTZWN1cml0eSBjbGFzcyBpbiBzZWN1cml0eS5weSBmb3IgZGV0YWlsczsKLWJhc2ljYWxseSwgaWYgdGhlIGtleSBmaWxlIGNvbnRhaW5zICh4LCB5KSwgdGhlbiB0aGUgc2VjdXJpdHkgc2VydmVyCi1jbGFzcyBjaG9vc2VzIGEgcmFuZG9tIG51bWJlciB6ICh0aGUgY2hhbGxlbmdlKSBpbiB0aGUgcmFuZ2UKLTEwLi4xMDAwMDAgYW5kIHRoZSBjbGllbnQgbXVzdCBiZSBhYmxlIHRvIHByb2R1Y2UgcG93KHosIHgsIHkpCi0oaS5lLiB6Kip4IG1vZCB5KS4KZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY2xpZW50LnB5IGIvRGVtby9wZGlzdC9jbGllbnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGM5ZmUzNjkuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9jbGllbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTYgKzAsMCBAQAotIiIiUlBDIENsaWVudCBtb2R1bGUuIiIiCi0KLWltcG9ydCBzeXMKLWltcG9ydCBzb2NrZXQKLWltcG9ydCBwaWNrbGUKLWltcG9ydCBidWlsdGlucwotaW1wb3J0IG9zCi0KLQotIyBEZWZhdWx0IHZlcmJvc2l0eSAoMCA9IHNpbGVudCwgMSA9IHByaW50IGNvbm5lY3Rpb25zLCAyID0gcHJpbnQgcmVxdWVzdHMgdG9vKQotVkVSQk9TRSA9IDEKLQotCi1jbGFzcyBDbGllbnQ6Ci0KLSAgICAiIiJSUEMgQ2xpZW50IGNsYXNzLiAgTm8gbmVlZCB0byBkZXJpdmUgYSBjbGFzcyAtLSBpdCdzIGZ1bGx5IGdlbmVyaWMuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgdmVyYm9zZSA9IFZFUkJPU0UpOgotICAgICAgICBzZWxmLl9wcmVfaW5pdChhZGRyZXNzLCB2ZXJib3NlKQotICAgICAgICBzZWxmLl9wb3N0X2luaXQoKQotCi0gICAgZGVmIF9wcmVfaW5pdChzZWxmLCBhZGRyZXNzLCB2ZXJib3NlID0gVkVSQk9TRSk6Ci0gICAgICAgIGlmIHR5cGUoYWRkcmVzcykgPT0gdHlwZSgwKToKLSAgICAgICAgICAgIGFkZHJlc3MgPSAoJycsIGFkZHJlc3MpCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCi0gICAgICAgIHNlbGYuX3ZlcmJvc2UgPSB2ZXJib3NlCi0gICAgICAgIGlmIHNlbGYuX3ZlcmJvc2U6IHByaW50KCJDb25uZWN0aW5nIHRvICVzIC4uLiIgJSByZXByKGFkZHJlc3MpKQotICAgICAgICBzZWxmLl9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuX3NvY2tldC5jb25uZWN0KGFkZHJlc3MpCi0gICAgICAgIGlmIHNlbGYuX3ZlcmJvc2U6IHByaW50KCJDb25uZWN0ZWQuIikKLSAgICAgICAgc2VsZi5fbGFzdGlkID0gMCAjIExhc3QgaWQgZm9yIHdoaWNoIGEgcmVwbHkgaGFzIGJlZW4gcmVjZWl2ZWQKLSAgICAgICAgc2VsZi5fbmV4dGlkID0gMSAjIElkIG9mIG5leHQgcmVxdWVzdAotICAgICAgICBzZWxmLl9yZXBsaWVzID0ge30gIyBVbnByb2Nlc3NlZCByZXBsaWVzCi0gICAgICAgIHNlbGYuX3JmID0gc2VsZi5fc29ja2V0Lm1ha2VmaWxlKCdyJykKLSAgICAgICAgc2VsZi5fd2YgPSBzZWxmLl9zb2NrZXQubWFrZWZpbGUoJ3cnKQotCi0gICAgZGVmIF9wb3N0X2luaXQoc2VsZik6Ci0gICAgICAgIHNlbGYuX21ldGhvZHMgPSBzZWxmLl9jYWxsKCcubWV0aG9kcycpCi0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fY2xvc2UoKQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fcmY6IHNlbGYuX3JmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fcmYgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3dmOiBzZWxmLl93Zi5jbG9zZSgpCi0gICAgICAgIHNlbGYuX3dmID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9zb2NrZXQ6IHNlbGYuX3NvY2tldC5jbG9zZSgpCi0gICAgICAgIHNlbGYuX3NvY2tldCA9IE5vbmUKLQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKLSAgICAgICAgaWYgbmFtZSBpbiBzZWxmLl9tZXRob2RzOgotICAgICAgICAgICAgbWV0aG9kID0gX3N0dWIoc2VsZiwgbmFtZSkKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgbWV0aG9kKSAjIFhYWCBjaXJjdWxhciByZWZlcmVuY2UKLSAgICAgICAgICAgIHJldHVybiBtZXRob2QKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKLQotICAgIGRlZiBfc2V0dmVyYm9zZShzZWxmLCB2ZXJib3NlKToKLSAgICAgICAgc2VsZi5fdmVyYm9zZSA9IHZlcmJvc2UKLQotICAgIGRlZiBfY2FsbChzZWxmLCBuYW1lLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl92Y2FsbChuYW1lLCBhcmdzKQotCi0gICAgZGVmIF92Y2FsbChzZWxmLCBuYW1lLCBhcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlY3Yoc2VsZi5fdnNlbmQobmFtZSwgYXJncykpCi0KLSAgICBkZWYgX3NlbmQoc2VsZiwgbmFtZSwgKmFyZ3MpOgotICAgICAgICByZXR1cm4gc2VsZi5fdnNlbmQobmFtZSwgYXJncykKLQotICAgIGRlZiBfc2VuZF9ub3JlcGx5KHNlbGYsIG5hbWUsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3ZzZW5kKG5hbWUsIGFyZ3MsIDApCi0KLSAgICBkZWYgX3ZzZW5kX25vcmVwbHkoc2VsZiwgbmFtZSwgYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl92c2VuZChuYW1lLCBhcmdzLCAwKQotCi0gICAgZGVmIF92c2VuZChzZWxmLCBuYW1lLCBhcmdzLCB3YW50cmVwbHkgPSAxKToKLSAgICAgICAgaWQgPSBzZWxmLl9uZXh0aWQKLSAgICAgICAgc2VsZi5fbmV4dGlkID0gaWQrMQotICAgICAgICBpZiBub3Qgd2FudHJlcGx5OiBpZCA9IC1pZAotICAgICAgICByZXF1ZXN0ID0gKG5hbWUsIGFyZ3MsIGlkKQotICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMTogcHJpbnQoInNlbmRpbmcgcmVxdWVzdDogJXMiICUgcmVwcihyZXF1ZXN0KSkKLSAgICAgICAgd3AgPSBwaWNrbGUuUGlja2xlcihzZWxmLl93ZikKLSAgICAgICAgd3AuZHVtcChyZXF1ZXN0KQotICAgICAgICByZXR1cm4gaWQKLQotICAgIGRlZiBfcmVjdihzZWxmLCBpZCk6Ci0gICAgICAgIGV4Y2VwdGlvbiwgdmFsdWUsIHJpZCA9IHNlbGYuX3ZyZWN2KGlkKQotICAgICAgICBpZiByaWQgIT0gaWQ6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInJlcXVlc3QvcmVwbHkgaWQgbWlzbWF0Y2g6ICVkLyVkIiAlIChpZCwgcmlkKSkKLSAgICAgICAgaWYgZXhjZXB0aW9uIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUKLSAgICAgICAgeCA9IGV4Y2VwdGlvbgotICAgICAgICBpZiBoYXNhdHRyKGJ1aWx0aW5zLCBleGNlcHRpb24pOgotICAgICAgICAgICAgeCA9IGdldGF0dHIoYnVpbHRpbnMsIGV4Y2VwdGlvbikKLSAgICAgICAgZWxpZiBleGNlcHRpb24gaW4gKCdwb3NpeC5lcnJvcicsICdtYWMuZXJyb3InKToKLSAgICAgICAgICAgIHggPSBvcy5lcnJvcgotICAgICAgICBpZiB4ID09IGV4Y2VwdGlvbjoKLSAgICAgICAgICAgIGV4Y2VwdGlvbiA9IHgKLSAgICAgICAgcmFpc2UgZXhjZXB0aW9uKHZhbHVlKQotCi0gICAgZGVmIF92cmVjdihzZWxmLCBpZCk6Ci0gICAgICAgIHNlbGYuX2ZsdXNoKCkKLSAgICAgICAgaWYgaWQgaW4gc2VsZi5fcmVwbGllczoKLSAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2UgPiAxOiBwcmludCgicmV0cmlldmluZyBwcmV2aW91cyByZXBseSwgaWQgPSAlZCIgJSBpZCkKLSAgICAgICAgICAgIHJlcGx5ID0gc2VsZi5fcmVwbGllc1tpZF0KLSAgICAgICAgICAgIGRlbCBzZWxmLl9yZXBsaWVzW2lkXQotICAgICAgICAgICAgcmV0dXJuIHJlcGx5Ci0gICAgICAgIGFpZCA9IGFicyhpZCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2UgPiAxOiBwcmludCgid2FpdGluZyBmb3IgcmVwbHksIGlkID0gJWQiICUgaWQpCi0gICAgICAgICAgICBycCA9IHBpY2tsZS5VbnBpY2tsZXIoc2VsZi5fcmYpCi0gICAgICAgICAgICByZXBseSA9IHJwLmxvYWQoKQotICAgICAgICAgICAgZGVsIHJwCi0gICAgICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMTogcHJpbnQoImdvdCByZXBseTogJXMiICUgcmVwcihyZXBseSkpCi0gICAgICAgICAgICByaWQgPSByZXBseVsyXQotICAgICAgICAgICAgYXJpZCA9IGFicyhyaWQpCi0gICAgICAgICAgICBpZiBhcmlkID09IGFpZDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMTogcHJpbnQoImdvdCBpdCIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGx5Ci0gICAgICAgICAgICBzZWxmLl9yZXBsaWVzW3JpZF0gPSByZXBseQotICAgICAgICAgICAgaWYgYXJpZCA+IGFpZDoKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMTogcHJpbnQoImdvdCBoaWdoZXIgaWQsIGFzc3VtZSBhbGwgb2siKQotICAgICAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgaWQpCi0KLSAgICBkZWYgX2ZsdXNoKHNlbGYpOgotICAgICAgICBzZWxmLl93Zi5mbHVzaCgpCi0KLQotZnJvbSBzZWN1cml0eSBpbXBvcnQgU2VjdXJpdHkKLQotCi1jbGFzcyBTZWN1cmVDbGllbnQoQ2xpZW50LCBTZWN1cml0eSk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl9wcmVfaW5pdCgqYXJncykKLSAgICAgICAgU2VjdXJpdHkuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fd2YuZmx1c2goKQotICAgICAgICBsaW5lID0gc2VsZi5fcmYucmVhZGxpbmUoKQotICAgICAgICBjaGFsbGVuZ2UgPSBpbnQobGluZS5zdHJpcCgpKQotICAgICAgICByZXNwb25zZSA9IHNlbGYuX2VuY29kZV9jaGFsbGVuZ2UoY2hhbGxlbmdlKQotICAgICAgICBsaW5lID0gcmVwcihpbnQocmVzcG9uc2UpKQotICAgICAgICBpZiBsaW5lWy0xXSBpbiAnTGwnOiBsaW5lID0gbGluZVs6LTFdCi0gICAgICAgIHNlbGYuX3dmLndyaXRlKGxpbmUgKyAnXG4nKQotICAgICAgICBzZWxmLl93Zi5mbHVzaCgpCi0gICAgICAgIHNlbGYuX3Bvc3RfaW5pdCgpCi0KLWNsYXNzIF9zdHViOgotCi0gICAgIiIiSGVscGVyIGNsYXNzIGZvciBDbGllbnQgLS0gZWFjaCBpbnN0YW5jZSBzZXJ2ZXMgYXMgYSBtZXRob2Qgb2YgdGhlIGNsaWVudC4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGllbnQsIG5hbWUpOgotICAgICAgICBzZWxmLl9jbGllbnQgPSBjbGllbnQKLSAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9jbGllbnQuX3ZjYWxsKHNlbGYuX25hbWUsIGFyZ3MpCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L2NtZGZ3LnB5IGIvRGVtby9wZGlzdC9jbWRmdy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZWM4NTRiMS4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L2NtZGZ3LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLSJGcmFtZXdvcmsgZm9yIGNvbW1hbmQgbGluZSBpbnRlcmZhY2VzIGxpa2UgQ1ZTLiAgU2VlIGNsYXNzIENtZEZyYW1lV29yay4iCi0KLQotY2xhc3MgQ29tbWFuZEZyYW1lV29yazoKLQotICAgICIiIkZyYW1ld29yayBjbGFzcyBmb3IgY29tbWFuZCBsaW5lIGludGVyZmFjZXMgbGlrZSBDVlMuCi0KLSAgICBUaGUgZ2VuZXJhbCBjb21tYW5kIGxpbmUgc3RydWN0dXJlIGlzCi0KLSAgICAgICAgICAgIGNvbW1hbmQgW2ZsYWdzXSBzdWJjb21tYW5kIFtzdWJmbGFnc10gW2FyZ3VtZW50XSAuLi4KLQotICAgIFRoZXJlJ3MgYSBjbGFzcyB2YXJpYWJsZSBHbG9iYWxGbGFncyB3aGljaCBzcGVjaWZpZXMgdGhlCi0gICAgZ2xvYmFsIGZsYWdzIG9wdGlvbnMuICBTdWJjb21tYW5kcyBhcmUgZGVmaW5lZCBieSBkZWZpbmluZwotICAgIG1ldGhvZHMgbmFtZWQgZG9fPHN1YmNvbW1hbmQ+LiAgRmxhZ3MgZm9yIHRoZSBzdWJjb21tYW5kIGFyZQotICAgIGRlZmluZWQgYnkgZGVmaW5pbmcgY2xhc3Mgb3IgaW5zdGFuY2UgdmFyaWFibGVzIG5hbWVkCi0gICAgZmxhZ3NfPHN1YmNvbW1hbmQ+LiAgSWYgdGhlcmUncyBubyBjb21tYW5kLCBtZXRob2QgZGVmYXVsdCgpCi0gICAgaXMgY2FsbGVkLiAgVGhlIF9fZG9jX18gc3RyaW5ncyBmb3IgdGhlIGRvXyBtZXRob2RzIGFyZSB1c2VkCi0gICAgZm9yIHRoZSB1c2FnZSBtZXNzYWdlLCBwcmludGVkIGFmdGVyIHRoZSBnZW5lcmFsIHVzYWdlIG1lc3NhZ2UKLSAgICB3aGljaCBpcyB0aGUgY2xhc3MgdmFyaWFibGUgVXNhZ2VNZXNzYWdlLiAgVGhlIGNsYXNzIHZhcmlhYmxlCi0gICAgUG9zdFVzYWdlTWVzc2FnZSBpcyBwcmludGVkIGFmdGVyIGFsbCB0aGUgZG9fIG1ldGhvZHMnIF9fZG9jX18KLSAgICBzdHJpbmdzLiAgVGhlIG1ldGhvZCdzIHJldHVybiB2YWx1ZSBjYW4gYmUgYSBzdWdnZXN0ZWQgZXhpdAotICAgIHN0YXR1cy4gIFtYWFggTmVlZCB0byByZXdyaXRlIHRoaXMgdG8gY2xhcmlmeSBpdC5dCi0KLSAgICBDb21tb24gdXNhZ2UgaXMgdG8gZGVyaXZlIGEgY2xhc3MsIGluc3RhbnRpYXRlIGl0LCBhbmQgdGhlbiBjYWxsIGl0cwotICAgIHJ1bigpIG1ldGhvZDsgYnkgZGVmYXVsdCB0aGlzIHRha2VzIGl0cyBhcmd1bWVudHMgZnJvbSBzeXMuYXJndlsxOl0uCi0gICAgIiIiCi0KLSAgICBVc2FnZU1lc3NhZ2UgPSBcCi0gICAgICAidXNhZ2U6IChuYW1lKXMgW2ZsYWdzXSBzdWJjb21tYW5kIFtzdWJmbGFnc10gW2FyZ3VtZW50XSAuLi4iCi0KLSAgICBQb3N0VXNhZ2VNZXNzYWdlID0gTm9uZQotCi0gICAgR2xvYmFsRmxhZ3MgPSAnJwotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAiIiJDb25zdHJ1Y3RvciwgcHJlc2VudCBmb3IgY29tcGxldGVuZXNzLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgcnVuKHNlbGYsIGFyZ3MgPSBOb25lKToKLSAgICAgICAgIiIiUHJvY2VzcyBmbGFncywgc3ViY29tbWFuZCBhbmQgb3B0aW9ucywgdGhlbiBydW4gaXQuIiIiCi0gICAgICAgIGltcG9ydCBnZXRvcHQsIHN5cwotICAgICAgICBpZiBhcmdzIGlzIE5vbmU6IGFyZ3MgPSBzeXMuYXJndlsxOl0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgc2VsZi5HbG9iYWxGbGFncykKLSAgICAgICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi51c2FnZShtc2cpCi0gICAgICAgIHNlbGYub3B0aW9ucyhvcHRzKQotICAgICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIHNlbGYucmVhZHkoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjbWQgPSBhcmdzWzBdCi0gICAgICAgICAgICBtbmFtZSA9ICdkb18nICsgY21kCi0gICAgICAgICAgICBmbmFtZSA9ICdmbGFnc18nICsgY21kCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLCBtbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi51c2FnZSgiY29tbWFuZCAlciB1bmtub3duIiAlIChjbWQsKSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmbGFncyA9IGdldGF0dHIoc2VsZiwgZm5hbWUpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgZmxhZ3MgPSAnJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KGFyZ3NbMTpdLCBmbGFncykKLSAgICAgICAgICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnVzYWdlKAotICAgICAgICAgICAgICAgICAgICAgICAgInN1YmNvbW1hbmQgJXM6ICIgJSBjbWQgKyBzdHIobXNnKSkKLSAgICAgICAgICAgIHNlbGYucmVhZHkoKQotICAgICAgICAgICAgcmV0dXJuIG1ldGhvZChvcHRzLCBhcmdzKQotCi0gICAgZGVmIG9wdGlvbnMoc2VsZiwgb3B0cyk6Ci0gICAgICAgICIiIlByb2Nlc3MgdGhlIG9wdGlvbnMgcmV0cmlldmVkIGJ5IGdldG9wdC4KLSAgICAgICAgT3ZlcnJpZGUgdGhpcyBpZiB5b3UgaGF2ZSBhbnkgb3B0aW9ucy4iIiIKLSAgICAgICAgaWYgb3B0czoKLSAgICAgICAgICAgIHByaW50KCItIio0MCkKLSAgICAgICAgICAgIHByaW50KCJPcHRpb25zOiIpCi0gICAgICAgICAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICAgICAgICAgIHByaW50KCdvcHRpb24nLCBvLCAndmFsdWUnLCByZXByKGEpKQotICAgICAgICAgICAgcHJpbnQoIi0iKjQwKQotCi0gICAgZGVmIHJlYWR5KHNlbGYpOgotICAgICAgICAiIiJDYWxsZWQganVzdCBiZWZvcmUgY2FsbGluZyB0aGUgc3ViY29tbWFuZC4iIiIKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHVzYWdlKHNlbGYsIG1zZyA9IE5vbmUpOgotICAgICAgICAiIiJQcmludCB1c2FnZSBtZXNzYWdlLiAgUmV0dXJuIHN1aXRhYmxlIGV4aXQgY29kZSAoMikuIiIiCi0gICAgICAgIGlmIG1zZzogcHJpbnQobXNnKQotICAgICAgICBwcmludChzZWxmLlVzYWdlTWVzc2FnZSAlIHsnbmFtZSc6IHNlbGYuX19jbGFzc19fLl9fbmFtZV9ffSkKLSAgICAgICAgZG9jc3RyaW5ncyA9IHt9Ci0gICAgICAgIGMgPSBzZWxmLl9fY2xhc3NfXwotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyKGMpOgotICAgICAgICAgICAgICAgIGlmIG5hbWVbOjNdID09ICdkb18nOgotICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGRvY3N0cmluZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBnZXRhdHRyKGMsIG5hbWUpLl9fZG9jX18KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICAgICAgZG9jID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBpZiBkb2M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb2NzdHJpbmdzW25hbWVdID0gZG9jCi0gICAgICAgICAgICBpZiBub3QgYy5fX2Jhc2VzX186Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGMgPSBjLl9fYmFzZXNfX1swXQotICAgICAgICBpZiBkb2NzdHJpbmdzOgotICAgICAgICAgICAgcHJpbnQoIndoZXJlIHN1YmNvbW1hbmQgY2FuIGJlOiIpCi0gICAgICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQoZG9jc3RyaW5ncy5rZXlzKCkpOgotICAgICAgICAgICAgICAgIHByaW50KGRvY3N0cmluZ3NbbmFtZV0pCi0gICAgICAgIGlmIHNlbGYuUG9zdFVzYWdlTWVzc2FnZToKLSAgICAgICAgICAgIHByaW50KHNlbGYuUG9zdFVzYWdlTWVzc2FnZSkKLSAgICAgICAgcmV0dXJuIDIKLQotICAgIGRlZiBkZWZhdWx0KHNlbGYpOgotICAgICAgICAiIiJEZWZhdWx0IG1ldGhvZCwgY2FsbGVkIHdoZW4gbm8gc3ViY29tbWFuZCBpcyBnaXZlbi4KLSAgICAgICAgWW91IHNob3VsZCBhbHdheXMgb3ZlcnJpZGUgdGhpcy4iIiIKLSAgICAgICAgcHJpbnQoIk5vYm9keSBleHBlY3RzIHRoZSBTcGFuaXNoIElucXVpc2l0aW9uISIpCi0KLQotZGVmIHRlc3QoKToKLSAgICAiIiJUZXN0IHNjcmlwdCAtLSBjYWxsZWQgd2hlbiB0aGlzIG1vZHVsZSBpcyBydW4gYXMgYSBzY3JpcHQuIiIiCi0gICAgaW1wb3J0IHN5cwotICAgIGNsYXNzIEhlbGxvKENvbW1hbmRGcmFtZVdvcmspOgotICAgICAgICBkZWYgZG9faGVsbG8oc2VsZiwgb3B0cywgYXJncyk6Ci0gICAgICAgICAgICAiaGVsbG8gLS0gcHJpbnQgJ2hlbGxvIHdvcmxkJywgbmVlZHMgbm8gYXJndW1lbnRzIgotICAgICAgICAgICAgcHJpbnQoIkhlbGxvLCB3b3JsZCIpCi0gICAgeCA9IEhlbGxvKCkKLSAgICB0ZXN0cyA9IFsKLSAgICAgICAgICAgIFtdLAotICAgICAgICAgICAgWydoZWxsbyddLAotICAgICAgICAgICAgWydzcGFtJ10sCi0gICAgICAgICAgICBbJy14J10sCi0gICAgICAgICAgICBbJ2hlbGxvJywgJy14J10sCi0gICAgICAgICAgICBOb25lLAotICAgICAgICAgICAgXQotICAgIGZvciB0IGluIHRlc3RzOgotICAgICAgICBwcmludCgnLScqMTAsIHQsICctJyoxMCkKLSAgICAgICAgc3RzID0geC5ydW4odCkKLSAgICAgICAgcHJpbnQoIkV4aXQgc3RhdHVzOiIsIHJlcHIoc3RzKSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jbXB0cmVlLnB5IGIvRGVtby9wZGlzdC9jbXB0cmVlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMWJiZjFhLi4wMDAwMDAwCi0tLSBhL0RlbW8vcGRpc3QvY21wdHJlZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0iIiJDb21wYXJlIGxvY2FsIGFuZCByZW1vdGUgZGljdGlvbmFyaWVzIGFuZCB0cmFuc2ZlciBkaWZmZXJpbmcgZmlsZXMgLS0gbGlrZSByZGlzdC4iIiIKLQotaW1wb3J0IHN5cwotZnJvbSByZXBybGliIGltcG9ydCByZXByCi1pbXBvcnQgRlNQcm94eQotaW1wb3J0IHRpbWUKLWltcG9ydCBvcwotCi1kZWYgcmF3X2lucHV0KHByb21wdCk6Ci0gICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIHN5cy5zdGRpbi5yZWFkbGluZSgpCi0KLWRlZiBtYWluKCk6Ci0gICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICBzID0gaW5wdXQoImNoZGlyIFslc10gIiAlIHB3ZCkKLSAgICBpZiBzOgotICAgICAgICBvcy5jaGRpcihzKQotICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGhvc3QgPSBhc2soImhvc3QiLCAndm9vcm4uY3dpLm5sJykKLSAgICBwb3J0ID0gNDEyNwotICAgIHZlcmJvc2UgPSAxCi0gICAgbW9kZSA9ICcnCi0gICAgcHJpbnQoIiIiXAotTW9kZSBzaG91bGQgYmUgYSBzdHJpbmcgb2YgY2hhcmFjdGVycywgaW5kaWNhdGluZyB3aGF0IHRvIGRvIHdpdGggZGlmZmVyZW5jZXMuCi1yIC0gcmVhZCBkaWZmZXJlbnQgZmlsZXMgdG8gbG9jYWwgZmlsZSBzeXN0ZW0KLXcgLSB3cml0ZSBkaWZmZXJlbnQgZmlsZXMgdG8gcmVtb3RlIGZpbGUgc3lzdGVtCi1jIC0gY3JlYXRlIG5ldyBmaWxlcywgZWl0aGVyIHJlbW90ZSBvciBsb2NhbAotZCAtIGRlbGV0ZSBkaXNhcHBlYXJpbmcgZmlsZXMsIGVpdGhlciByZW1vdGUgb3IgbG9jYWwKLSIiIikKLSAgICBzID0gaW5wdXQoIm1vZGUgWyVzXSAiICUgbW9kZSkKLSAgICBpZiBzOiBtb2RlID0gcwotICAgIGFkZHJlc3MgPSAoaG9zdCwgcG9ydCkKLSAgICB0MSA9IHRpbWUudGltZSgpCi0gICAgbG9jYWwgPSBGU1Byb3h5LkZTUHJveHlMb2NhbCgpCi0gICAgcmVtb3RlID0gRlNQcm94eS5GU1Byb3h5Q2xpZW50KGFkZHJlc3MsIHZlcmJvc2UpCi0gICAgY29tcGFyZShsb2NhbCwgcmVtb3RlLCBtb2RlKQotICAgIHJlbW90ZS5fY2xvc2UoKQotICAgIGxvY2FsLl9jbG9zZSgpCi0gICAgdDIgPSB0aW1lLnRpbWUoKQotICAgIGR0ID0gdDItdDEKLSAgICBtaW5zLCBzZWNzID0gZGl2bW9kKGR0LCA2MCkKLSAgICBwcmludChtaW5zLCAibWludXRlcyBhbmQiLCByb3VuZChzZWNzKSwgInNlY29uZHMiKQotICAgIGlucHV0KCJbUmV0dXJuIHRvIGV4aXRdICIpCi0KLWRlZiBhc2socHJvbXB0LCBkZWZhdWx0KToKLSAgICBzID0gaW5wdXQoIiVzIFslc10gIiAlIChwcm9tcHQsIGRlZmF1bHQpKQotICAgIHJldHVybiBzIG9yIGRlZmF1bHQKLQotZGVmIGFza2ludChwcm9tcHQsIGRlZmF1bHQpOgotICAgIHMgPSBpbnB1dCgiJXMgWyVzXSAiICUgKHByb21wdCwgc3RyKGRlZmF1bHQpKSkKLSAgICBpZiBzOiByZXR1cm4gc3RyaW5nLmF0b2kocykKLSAgICByZXR1cm4gZGVmYXVsdAotCi1kZWYgY29tcGFyZShsb2NhbCwgcmVtb3RlLCBtb2RlKToKLSAgICBwcmludCgpCi0gICAgcHJpbnQoIlBXRCA9IiwgcmVwcihvcy5nZXRjd2QoKSkpCi0gICAgc3Vtc19pZCA9IHJlbW90ZS5fc2VuZCgnc3VtbGlzdCcpCi0gICAgc3ViZGlyc19pZCA9IHJlbW90ZS5fc2VuZCgnbGlzdHN1YmRpcnMnKQotICAgIHJlbW90ZS5fZmx1c2goKQotICAgIHByaW50KCJjYWxjdWxhdGluZyBsb2NhbCBzdW1zIC4uLiIpCi0gICAgbHN1bWRpY3QgPSB7fQotICAgIGZvciBuYW1lLCBpbmZvIGluIGxvY2FsLnN1bWxpc3QoKToKLSAgICAgICAgbHN1bWRpY3RbbmFtZV0gPSBpbmZvCi0gICAgcHJpbnQoImdldHRpbmcgcmVtb3RlIHN1bXMgLi4uIikKLSAgICBzdW1zID0gcmVtb3RlLl9yZWN2KHN1bXNfaWQpCi0gICAgcHJpbnQoImdvdCIsIGxlbihzdW1zKSkKLSAgICByc3VtZGljdCA9IHt9Ci0gICAgZm9yIG5hbWUsIHJzdW0gaW4gc3VtczoKLSAgICAgICAgcnN1bWRpY3RbbmFtZV0gPSByc3VtCi0gICAgICAgIGlmIG5hbWUgbm90IGluIGxzdW1kaWN0OgotICAgICAgICAgICAgcHJpbnQocmVwcihuYW1lKSwgIm9ubHkgcmVtb3RlIikKLSAgICAgICAgICAgIGlmICdyJyBpbiBtb2RlIGFuZCAnYycgaW4gbW9kZToKLSAgICAgICAgICAgICAgICByZWN2ZmlsZShsb2NhbCwgcmVtb3RlLCBuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbHN1bSA9IGxzdW1kaWN0W25hbWVdCi0gICAgICAgICAgICBpZiBsc3VtICE9IHJzdW06Ci0gICAgICAgICAgICAgICAgcHJpbnQocmVwcihuYW1lKSwgZW5kPScgJykKLSAgICAgICAgICAgICAgICBybXRpbWUgPSByZW1vdGUubXRpbWUobmFtZSkKLSAgICAgICAgICAgICAgICBsbXRpbWUgPSBsb2NhbC5tdGltZShuYW1lKQotICAgICAgICAgICAgICAgIGlmIHJtdGltZSA+IGxtdGltZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoInJlbW90ZSBuZXdlciIsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgICAgIGlmICdyJyBpbiBtb2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdmZpbGUobG9jYWwsIHJlbW90ZSwgbmFtZSkKLSAgICAgICAgICAgICAgICBlbGlmIGxtdGltZSA+IHJtdGltZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoImxvY2FsIG5ld2VyIiwgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgaWYgJ3cnIGluIG1vZGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZmlsZShsb2NhbCwgcmVtb3RlLCBuYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJzYW1lIG10aW1lIGJ1dCBkaWZmZXJlbnQgc3VtPyE/ISIsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgcHJpbnQoKQotICAgIGZvciBuYW1lIGluIGxzdW1kaWN0LmtleXMoKToKLSAgICAgICAgaWYgbm90IGxpc3QocnN1bWRpY3Qua2V5cygpKToKLSAgICAgICAgICAgIHByaW50KHJlcHIobmFtZSksICJvbmx5IGxvY2FsbHkiLCBlbmQ9JyAnKQotICAgICAgICAgICAgZmwoKQotICAgICAgICAgICAgaWYgJ3cnIGluIG1vZGUgYW5kICdjJyBpbiBtb2RlOgotICAgICAgICAgICAgICAgIHNlbmRmaWxlKGxvY2FsLCByZW1vdGUsIG5hbWUpCi0gICAgICAgICAgICBlbGlmICdyJyBpbiBtb2RlIGFuZCAnZCcgaW4gbW9kZToKLSAgICAgICAgICAgICAgICBvcy51bmxpbmsobmFtZSkKLSAgICAgICAgICAgICAgICBwcmludCgicmVtb3ZlZC4iKQotICAgICAgICAgICAgcHJpbnQoKQotICAgIHByaW50KCJnZXR0aW4gc3ViZGlycyAuLi4iKQotICAgIHN1YmRpcnMgPSByZW1vdGUuX3JlY3Yoc3ViZGlyc19pZCkKLSAgICBjb21tb24gPSBbXQotICAgIGZvciBuYW1lIGluIHN1YmRpcnM6Ci0gICAgICAgIGlmIGxvY2FsLmlzZGlyKG5hbWUpOgotICAgICAgICAgICAgcHJpbnQoIkNvbW1vbiBzdWJkaXJlY3RvcnkiLCByZXByKG5hbWUpKQotICAgICAgICAgICAgY29tbW9uLmFwcGVuZChuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoIlJlbW90ZSBzdWJkaXJlY3RvcnkiLCByZXByKG5hbWUpLCAibm90IGZvdW5kIGxvY2FsbHkiKQotICAgICAgICAgICAgaWYgJ3InIGluIG1vZGUgYW5kICdjJyBpbiBtb2RlOgotICAgICAgICAgICAgICAgIHByID0gIkNyZWF0ZSBsb2NhbCBzdWJkaXJlY3RvcnkgJXM/IFt5XSAiICUgXAotICAgICAgICAgICAgICAgICAgICAgcmVwcihuYW1lKQotICAgICAgICAgICAgICAgIGlmICd5JyBpbiBtb2RlOgotICAgICAgICAgICAgICAgICAgICBvayA9ICd5JwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG9rID0gYXNrKHByLCAieSIpCi0gICAgICAgICAgICAgICAgaWYgb2tbOjFdIGluICgneScsICdZJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxvY2FsLm1rZGlyKG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHByaW50KCJTdWJkaXJlY3RvcnkgJXMgbWFkZSIgJSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihuYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgY29tbW9uLmFwcGVuZChuYW1lKQotICAgIGxzdWJkaXJzID0gbG9jYWwubGlzdHN1YmRpcnMoKQotICAgIGZvciBuYW1lIGluIGxzdWJkaXJzOgotICAgICAgICBpZiBuYW1lIG5vdCBpbiBzdWJkaXJzOgotICAgICAgICAgICAgcHJpbnQoIkxvY2FsIHN1YmRpcmVjdG9yeSIsIHJlcHIobmFtZSksICJub3QgZm91bmQgcmVtb3RlbHkiKQotICAgIGZvciBuYW1lIGluIGNvbW1vbjoKLSAgICAgICAgcHJpbnQoIkVudGVyaW5nIHN1YmRpcmVjdG9yeSIsIHJlcHIobmFtZSkpCi0gICAgICAgIGxvY2FsLmNkKG5hbWUpCi0gICAgICAgIHJlbW90ZS5jZChuYW1lKQotICAgICAgICBjb21wYXJlKGxvY2FsLCByZW1vdGUsIG1vZGUpCi0gICAgICAgIHJlbW90ZS5iYWNrKCkKLSAgICAgICAgbG9jYWwuYmFjaygpCi0KLWRlZiBzZW5kZmlsZShsb2NhbCwgcmVtb3RlLCBuYW1lKToKLSAgICB0cnk6Ci0gICAgICAgIHJlbW90ZS5jcmVhdGUobmFtZSkKLSAgICBleGNlcHQgKElPRXJyb3IsIG9zLmVycm9yKSBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJjYW5ub3QgY3JlYXRlOiIsIG1zZykKLSAgICAgICAgcmV0dXJuCi0KLSAgICBwcmludCgic2VuZGluZyAuLi4iLCBlbmQ9JyAnKQotICAgIGZsKCkKLQotICAgIGRhdGEgPSBvcGVuKG5hbWUpLnJlYWQoKQotCi0gICAgdDEgPSB0aW1lLnRpbWUoKQotCi0gICAgcmVtb3RlLl9zZW5kX25vcmVwbHkoJ3dyaXRlJywgbmFtZSwgZGF0YSkKLSAgICByZW1vdGUuX2ZsdXNoKCkKLQotICAgIHQyID0gdGltZS50aW1lKCkKLQotICAgIGR0ID0gdDItdDEKLSAgICBwcmludChsZW4oZGF0YSksICJieXRlcyBpbiIsIHJvdW5kKGR0KSwgInNlY29uZHMiLCBlbmQ9JyAnKQotICAgIGlmIGR0OgotICAgICAgICBwcmludCgiaS5lLiIsIHJvdW5kKGxlbihkYXRhKS9kdCksICJieXRlcy9zZWMiLCBlbmQ9JyAnKQotICAgIHByaW50KCkKLQotZGVmIHJlY3ZmaWxlKGxvY2FsLCByZW1vdGUsIG5hbWUpOgotICAgIG9rID0gMAotICAgIHRyeToKLSAgICAgICAgcnYgPSByZWN2ZmlsZV9yZWFsKGxvY2FsLCByZW1vdGUsIG5hbWUpCi0gICAgICAgIG9rID0gMQotICAgICAgICByZXR1cm4gcnYKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBub3Qgb2s6Ci0gICAgICAgICAgICBwcmludCgiKioqIHJlY3ZmaWxlIG9mICVyIGZhaWxlZCwgZGVsZXRpbmciICUgKG5hbWUsKSkKLSAgICAgICAgICAgIGxvY2FsLmRlbGV0ZShuYW1lKQotCi1kZWYgcmVjdmZpbGVfcmVhbChsb2NhbCwgcmVtb3RlLCBuYW1lKToKLSAgICB0cnk6Ci0gICAgICAgIGxvY2FsLmNyZWF0ZShuYW1lKQotICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoImNhbm5vdCBjcmVhdGU6IiwgbXNnKQotICAgICAgICByZXR1cm4KLQotICAgIHByaW50KCJyZWNlaXZpbmcgLi4uIiwgZW5kPScgJykKLSAgICBmbCgpCi0KLSAgICBmID0gb3BlbihuYW1lLCAndycpCi0gICAgdDEgPSB0aW1lLnRpbWUoKQotCi0gICAgbGVuZ3RoID0gNCoxMDI0Ci0gICAgb2Zmc2V0ID0gMAotICAgIGlkID0gcmVtb3RlLl9zZW5kKCdyZWFkJywgbmFtZSwgb2Zmc2V0LCBsZW5ndGgpCi0gICAgcmVtb3RlLl9mbHVzaCgpCi0gICAgd2hpbGUgMToKLSAgICAgICAgbmV3b2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoCi0gICAgICAgIG5ld2lkID0gcmVtb3RlLl9zZW5kKCdyZWFkJywgbmFtZSwgbmV3b2Zmc2V0LCBsZW5ndGgpCi0gICAgICAgIGRhdGEgPSByZW1vdGUuX3JlY3YoaWQpCi0gICAgICAgIGlkID0gbmV3aWQKLSAgICAgICAgaWYgbm90IGRhdGE6IGJyZWFrCi0gICAgICAgIGYuc2VlayhvZmZzZXQpCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgb2Zmc2V0ID0gbmV3b2Zmc2V0Ci0gICAgc2l6ZSA9IGYudGVsbCgpCi0KLSAgICB0MiA9IHRpbWUudGltZSgpCi0gICAgZi5jbG9zZSgpCi0KLSAgICBkdCA9IHQyLXQxCi0gICAgcHJpbnQoc2l6ZSwgImJ5dGVzIGluIiwgcm91bmQoZHQpLCAic2Vjb25kcyIsIGVuZD0nICcpCi0gICAgaWYgZHQ6Ci0gICAgICAgIHByaW50KCJpLmUuIiwgaW50KHNpemUvL2R0KSwgImJ5dGVzL3NlYyIsIGVuZD0nICcpCi0gICAgcHJpbnQoKQotICAgIHJlbW90ZS5fcmVjdihpZCkgIyBpZ25vcmVkCi0KLWRlZiBmbCgpOgotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9jdnNsaWIucHkgYi9EZW1vL3BkaXN0L2N2c2xpYi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNzhlNGZiYi4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L2N2c2xpYi5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1OSArMCwwIEBACi0iIiJVdGlsaXRpZXMgZm9yIENWUyBhZG1pbmlzdHJhdGlvbi4iIiIKLQotaW1wb3J0IHN0cmluZwotaW1wb3J0IG9zCi1pbXBvcnQgdGltZQotaW1wb3J0IG1kNQotaW1wb3J0IGZubWF0Y2gKLQotaWYgbm90IGhhc2F0dHIodGltZSwgJ3RpbWV6b25lJyk6Ci0gICAgdGltZS50aW1lem9uZSA9IDAKLQotY2xhc3MgRmlsZToKLQotICAgICIiIlJlcHJlc2VudCBhIGZpbGUncyBzdGF0dXMuCi0KLSAgICBJbnN0YW5jZSB2YXJpYWJsZXM6Ci0KLSAgICBmaWxlIC0tIHRoZSBmaWxlbmFtZSAobm8gc2xhc2hlcyksIE5vbmUgaWYgdW5pbml0aWFsaXplZAotICAgIGxzZWVuIC0tIHRydWUgaWYgdGhlIGRhdGEgZm9yIHRoZSBsb2NhbCBmaWxlIGlzIHVwIHRvIGRhdGUKLSAgICBlc2VlbiAtLSB0cnVlIGlmIHRoZSBkYXRhIGZyb20gdGhlIENWUy9FbnRyaWVzIGVudHJ5IGlzIHVwIHRvIGRhdGUKLSAgICAgICAgICAgICAodGhpcyBpbXBsaWVzIHRoYXQgdGhlIGVudHJ5IG11c3QgYmUgd3JpdHRlbiBiYWNrKQotICAgIHJzZWVuIC0tIHRydWUgaWYgdGhlIGRhdGEgZm9yIHRoZSByZW1vdGUgZmlsZSBpcyB1cCB0byBkYXRlCi0gICAgcHJveHkgLS0gUkNTUHJveHkgaW5zdGFuY2UgdXNlZCB0byBjb250YWN0IHRoZSBzZXJ2ZXIsIG9yIE5vbmUKLQotICAgIE5vdGUgdGhhdCBsc2VlbiBhbmQgcnNlZW4gZG9uJ3QgbmVjZXNzYXJ5IG1lYW4gdGhhdCBhIGxvY2FsCi0gICAgb3IgcmVtb3RlIGZpbGUgKmV4aXN0cyogLS0gdGhleSBpbmRpY2F0ZSB0aGF0IHdlJ3ZlIGNoZWNrZWQgaXQuCi0gICAgSG93ZXZlciwgZXNlZW4gbWVhbnMgdGhhdCB0aGlzIGluc3RhbmNlIGNvcnJlc3BvbmRzIHRvIGFuCi0gICAgZW50cnkgaW4gdGhlIENWUy9FbnRyaWVzIGZpbGUuCi0KLSAgICBJZiBsc2VlbiBpcyB0cnVlOgotCi0gICAgbHN1bSAtLSBjaGVja3N1bSBvZiB0aGUgbG9jYWwgZmlsZSwgTm9uZSBpZiBubyBsb2NhbCBmaWxlCi0gICAgbGN0aW1lIC0tIGN0aW1lIG9mIHRoZSBsb2NhbCBmaWxlLCBOb25lIGlmIG5vIGxvY2FsIGZpbGUKLSAgICBsbXRpbWUgLS0gbXRpbWUgb2YgdGhlIGxvY2FsIGZpbGUsIE5vbmUgaWYgbm8gbG9jYWwgZmlsZQotCi0gICAgSWYgZXNlZW4gaXMgdHJ1ZToKLQotICAgIGVyZXYgLS0gcmV2aXNpb24sIE5vbmUgaWYgdGhpcyBpcyBhIG5vIHJldmlzaW9uIChub3QgJzAnKQotICAgIGVuZXcgLS0gdHJ1ZSBpZiB0aGlzIGlzIGFuIHVuY29tbWl0dGVkIGFkZGVkIGZpbGUKLSAgICBlZGVsZXRlZCAtLSB0cnVlIGlmIHRoaXMgaXMgYW4gdW5jb21taXR0ZWQgcmVtb3ZlZCBmaWxlCi0gICAgZWN0aW1lIC0tIGN0aW1lIG9mIGxhc3QgbG9jYWwgZmlsZSBjb3JyZXNwb25kaW5nIHRvIGVyZXYKLSAgICBlbXRpbWUgLS0gbXRpbWUgb2YgbGFzdCBsb2NhbCBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gZXJldgotICAgIGV4dHJhIC0tIDV0aCBzdHJpbmcgZnJvbSBDVlMvRW50cmllcyBmaWxlCi0KLSAgICBJZiByc2VlbiBpcyB0cnVlOgotCi0gICAgcnJldiAtLSByZXZpc2lvbiBvZiBoZWFkLCBOb25lIGlmIG5vbi1leGlzdGVudAotICAgIHJzdW0gLS0gY2hlY2tzdW0gb2YgdGhhdCByZXZpc2lvbiwgTm9uIGlmIG5vbi1leGlzdGVudAotCi0gICAgSWYgZXNlZW4gYW5kIHJzZWVuIGFyZSBib3RoIHRydWU6Ci0KLSAgICBlc3VtIC0tIGNoZWNrc3VtIG9mIHJldmlzaW9uIGVyZXYsIE5vbmUgaWYgbm8gcmV2aXNpb24KLQotICAgIE5vdGUKLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlID0gTm9uZSk6Ci0gICAgICAgIGlmIGZpbGUgYW5kICcvJyBpbiBmaWxlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gc2xhc2ggYWxsb3dlZCBpbiBmaWxlIikKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLmxzZWVuID0gc2VsZi5lc2VlbiA9IHNlbGYucnNlZW4gPSAwCi0gICAgICAgIHNlbGYucHJveHkgPSBOb25lCi0KLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBjbXAoc2VsZi5maWxlLCBvdGhlci5maWxlKQotCi0gICAgZGVmIGdldGxvY2FsKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmxtdGltZSwgc2VsZi5sY3RpbWUgPSBvcy5zdGF0KHNlbGYuZmlsZSlbLTI6XQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmxtdGltZSA9IHNlbGYubGN0aW1lID0gc2VsZi5sc3VtID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5sc3VtID0gbWQ1Lm5ldyhvcGVuKHNlbGYuZmlsZSkucmVhZCgpKS5kaWdlc3QoKQotICAgICAgICBzZWxmLmxzZWVuID0gMQotCi0gICAgZGVmIGdldGVudHJ5KHNlbGYsIGxpbmUpOgotICAgICAgICB3b3JkcyA9IHN0cmluZy5zcGxpdGZpZWxkcyhsaW5lLCAnLycpCi0gICAgICAgIGlmIHNlbGYuZmlsZSBhbmQgd29yZHNbMV0gIT0gc2VsZi5maWxlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmlsZSBuYW1lIG1pc21hdGNoIikKLSAgICAgICAgc2VsZi5maWxlID0gd29yZHNbMV0KLSAgICAgICAgc2VsZi5lcmV2ID0gd29yZHNbMl0KLSAgICAgICAgc2VsZi5lZGVsZXRlZCA9IDAKLSAgICAgICAgc2VsZi5lbmV3ID0gMAotICAgICAgICBzZWxmLmVjdGltZSA9IHNlbGYuZW10aW1lID0gTm9uZQotICAgICAgICBpZiBzZWxmLmVyZXZbOjFdID09ICctJzoKLSAgICAgICAgICAgIHNlbGYuZWRlbGV0ZWQgPSAxCi0gICAgICAgICAgICBzZWxmLmVyZXYgPSBzZWxmLmVyZXZbMTpdCi0gICAgICAgIGlmIHNlbGYuZXJldiA9PSAnMCc6Ci0gICAgICAgICAgICBzZWxmLmVyZXYgPSBOb25lCi0gICAgICAgICAgICBzZWxmLmVuZXcgPSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRlcyA9IHdvcmRzWzNdCi0gICAgICAgICAgICBzZWxmLmVjdGltZSA9IHVuY3RpbWUoZGF0ZXNbOjI0XSkKLSAgICAgICAgICAgIHNlbGYuZW10aW1lID0gdW5jdGltZShkYXRlc1syNTpdKQotICAgICAgICBzZWxmLmV4dHJhID0gd29yZHNbNF0KLSAgICAgICAgaWYgc2VsZi5yc2VlbjoKLSAgICAgICAgICAgIHNlbGYuZ2V0ZXN1bSgpCi0gICAgICAgIHNlbGYuZXNlZW4gPSAxCi0KLSAgICBkZWYgZ2V0cmVtb3RlKHNlbGYsIHByb3h5ID0gTm9uZSk6Ci0gICAgICAgIGlmIHByb3h5OgotICAgICAgICAgICAgc2VsZi5wcm94eSA9IHByb3h5Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucnJldiA9IHNlbGYucHJveHkuaGVhZChzZWxmLmZpbGUpCi0gICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgc2VsZi5ycmV2ID0gTm9uZQotICAgICAgICBpZiBzZWxmLnJyZXY6Ci0gICAgICAgICAgICBzZWxmLnJzdW0gPSBzZWxmLnByb3h5LnN1bShzZWxmLmZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJzdW0gPSBOb25lCi0gICAgICAgIGlmIHNlbGYuZXNlZW46Ci0gICAgICAgICAgICBzZWxmLmdldGVzdW0oKQotICAgICAgICBzZWxmLnJzZWVuID0gMQotCi0gICAgZGVmIGdldGVzdW0oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZXJldiA9PSBzZWxmLnJyZXY6Ci0gICAgICAgICAgICBzZWxmLmVzdW0gPSBzZWxmLnJzdW0KLSAgICAgICAgZWxpZiBzZWxmLmVyZXY6Ci0gICAgICAgICAgICBuYW1lID0gKHNlbGYuZmlsZSwgc2VsZi5lcmV2KQotICAgICAgICAgICAgc2VsZi5lc3VtID0gc2VsZi5wcm94eS5zdW0obmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZXN1bSA9IE5vbmUKLQotICAgIGRlZiBwdXRlbnRyeShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbGluZSBzdWl0YWJsZSBmb3IgaW5jbHVzaW9uIGluIENWUy9FbnRyaWVzLgotCi0gICAgICAgIFRoZSByZXR1cm5lZCBsaW5lIGlzIHRlcm1pbmF0ZWQgYnkgYSBuZXdsaW5lLgotICAgICAgICBJZiBubyBlbnRyeSBzaG91bGQgYmUgd3JpdHRlbiBmb3IgdGhpcyBmaWxlLAotICAgICAgICByZXR1cm4gIiIuCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5lc2VlbjoKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAgICAgIHJldiA9IHNlbGYuZXJldiBvciAnMCcKLSAgICAgICAgaWYgc2VsZi5lZGVsZXRlZDoKLSAgICAgICAgICAgIHJldiA9ICctJyArIHJldgotICAgICAgICBpZiBzZWxmLmVuZXc6Ci0gICAgICAgICAgICBkYXRlcyA9ICdJbml0aWFsICcgKyBzZWxmLmZpbGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGVzID0gZ21jdGltZShzZWxmLmVjdGltZSkgKyAnICcgKyBcCi0gICAgICAgICAgICAgICAgICAgIGdtY3RpbWUoc2VsZi5lbXRpbWUpCi0gICAgICAgIHJldHVybiAiLyVzLyVzLyVzLyVzL1xuIiAlICgKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGUsCi0gICAgICAgICAgICAgICAgcmV2LAotICAgICAgICAgICAgICAgIGRhdGVzLAotICAgICAgICAgICAgICAgIHNlbGYuZXh0cmEpCi0KLSAgICBkZWYgcmVwb3J0KHNlbGYpOgotICAgICAgICBwcmludCgnLScqNTApCi0gICAgICAgIGRlZiByKGtleSwgcmVwcj1yZXByLCBzZWxmPXNlbGYpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gcmVwcihnZXRhdHRyKHNlbGYsIGtleSkpCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAiPyIKLSAgICAgICAgICAgIHByaW50KCIlLTE1czoiICUga2V5LCB2YWx1ZSkKLSAgICAgICAgcigiZmlsZSIpCi0gICAgICAgIGlmIHNlbGYubHNlZW46Ci0gICAgICAgICAgICByKCJsc3VtIiwgaGV4aWZ5KQotICAgICAgICAgICAgcigibGN0aW1lIiwgZ21jdGltZSkKLSAgICAgICAgICAgIHIoImxtdGltZSIsIGdtY3RpbWUpCi0gICAgICAgIGlmIHNlbGYuZXNlZW46Ci0gICAgICAgICAgICByKCJlcmV2IikKLSAgICAgICAgICAgIHIoImVuZXciKQotICAgICAgICAgICAgcigiZWRlbGV0ZWQiKQotICAgICAgICAgICAgcigiZWN0aW1lIiwgZ21jdGltZSkKLSAgICAgICAgICAgIHIoImVtdGltZSIsIGdtY3RpbWUpCi0gICAgICAgIGlmIHNlbGYucnNlZW46Ci0gICAgICAgICAgICByKCJycmV2IikKLSAgICAgICAgICAgIHIoInJzdW0iLCBoZXhpZnkpCi0gICAgICAgICAgICBpZiBzZWxmLmVzZWVuOgotICAgICAgICAgICAgICAgIHIoImVzdW0iLCBoZXhpZnkpCi0KLQotY2xhc3MgQ1ZTOgotCi0gICAgIiIiUmVwcmVzZW50IHRoZSBjb250ZW50cyBvZiBhIENWUyBhZG1pbiBmaWxlIChhbmQgbW9yZSkuCi0KLSAgICBDbGFzcyB2YXJpYWJsZXM6Ci0KLSAgICBGaWxlQ2xhc3MgLS0gdGhlIGNsYXNzIHRvIGJlIGluc3RhbnRpYXRlZCBmb3IgZW50cmllcwotICAgICAgICAgICAgICAgICAodGhpcyBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIGNsYXNzIEZpbGUgYWJvdmUpCi0gICAgSWdub3JlTGlzdCAtLSBzaGVsbCBwYXR0ZXJucyBmb3IgbG9jYWwgZmlsZXMgdG8gYmUgaWdub3JlZAotCi0gICAgSW5zdGFuY2UgdmFyaWFibGVzOgotCi0gICAgZW50cmllcyAtLSBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBGaWxlIGluc3RhbmNlcyBrZXllZCBieQotICAgICAgICAgICAgICAgdGhlaXIgZmlsZSBuYW1lCi0gICAgcHJveHkgLS0gYW4gUkNTUHJveHkgaW5zdGFuY2UsIG9yIE5vbmUKLSAgICAiIiIKLQotICAgIEZpbGVDbGFzcyA9IEZpbGUKLQotICAgIElnbm9yZUxpc3QgPSBbJy4qJywgJ0AqJywgJywqJywgJyp+JywgJyoubycsICcqLmEnLCAnKi5zbycsICcqLnB5YyddCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuZW50cmllcyA9IHt9Ci0gICAgICAgIHNlbGYucHJveHkgPSBOb25lCi0KLSAgICBkZWYgc2V0cHJveHkoc2VsZiwgcHJveHkpOgotICAgICAgICBpZiBwcm94eSBpcyBzZWxmLnByb3h5OgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYucHJveHkgPSBwcm94eQotICAgICAgICBmb3IgZSBpbiBsaXN0KHNlbGYuZW50cmllcy52YWx1ZXMoKSk6Ci0gICAgICAgICAgICBlLnJzZWVuID0gMAotCi0gICAgZGVmIGdldGVudHJpZXMoc2VsZik6Ci0gICAgICAgICIiIlJlYWQgdGhlIGNvbnRlbnRzIG9mIENWUy9FbnRyaWVzIiIiCi0gICAgICAgIHNlbGYuZW50cmllcyA9IHt9Ci0gICAgICAgIGYgPSBzZWxmLmN2c29wZW4oIkVudHJpZXMiKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgICAgICBlID0gc2VsZi5GaWxlQ2xhc3MoKQotICAgICAgICAgICAgZS5nZXRlbnRyeShsaW5lKQotICAgICAgICAgICAgc2VsZi5lbnRyaWVzW2UuZmlsZV0gPSBlCi0gICAgICAgIGYuY2xvc2UoKQotCi0gICAgZGVmIHB1dGVudHJpZXMoc2VsZik6Ci0gICAgICAgICIiIldyaXRlIENWUy9FbnRyaWVzIGJhY2siIiIKLSAgICAgICAgZiA9IHNlbGYuY3Zzb3BlbigiRW50cmllcyIsICd3JykKLSAgICAgICAgZm9yIGUgaW4gbGlzdChzZWxmLnZhbHVlcygpKToKLSAgICAgICAgICAgIGYud3JpdGUoZS5wdXRlbnRyeSgpKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiBnZXRsb2NhbGZpbGVzKHNlbGYpOgotICAgICAgICBlbnRyaWVzX2tleXMgPSBzZXQoc2VsZi5lbnRyaWVzLmtleXMoKSkKLSAgICAgICAgYWRkbGlzdCA9IG9zLmxpc3RkaXIob3MuY3VyZGlyKQotICAgICAgICBmb3IgbmFtZSBpbiBhZGRsaXN0OgotICAgICAgICAgICAgaWYgbm90IHNlbGYuaWdub3JlZChuYW1lKToKLSAgICAgICAgICAgICAgICBlbnRyaWVzX2tleXMuYWRkKG5hbWUpCi0gICAgICAgIGZvciBmaWxlIGluIHNvcnRlZChlbnRyaWVzX2tleXMpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGUgPSBzZWxmLmVudHJpZXNbZmlsZV0KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBlID0gc2VsZi5lbnRyaWVzW2ZpbGVdID0gc2VsZi5GaWxlQ2xhc3MoZmlsZSkKLSAgICAgICAgICAgIGUuZ2V0bG9jYWwoKQotCi0gICAgZGVmIGdldHJlbW90ZWZpbGVzKHNlbGYsIHByb3h5ID0gTm9uZSk6Ci0gICAgICAgIGlmIHByb3h5OgotICAgICAgICAgICAgc2VsZi5wcm94eSA9IHByb3h5Ci0gICAgICAgIGlmIG5vdCBzZWxmLnByb3h5OgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJubyBSQ1MgcHJveHkiKQotICAgICAgICBhZGRsaXN0ID0gc2VsZi5wcm94eS5saXN0ZmlsZXMoKQotICAgICAgICBmb3IgZmlsZSBpbiBhZGRsaXN0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGUgPSBzZWxmLmVudHJpZXNbZmlsZV0KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBlID0gc2VsZi5lbnRyaWVzW2ZpbGVdID0gc2VsZi5GaWxlQ2xhc3MoZmlsZSkKLSAgICAgICAgICAgIGUuZ2V0cmVtb3RlKHNlbGYucHJveHkpCi0KLSAgICBkZWYgcmVwb3J0KHNlbGYpOgotICAgICAgICBmb3IgZSBpbiBsaXN0KHNlbGYudmFsdWVzKCkpOgotICAgICAgICAgICAgZS5yZXBvcnQoKQotICAgICAgICBwcmludCgnLScqNTApCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNvcnRlZChzZWxmLmVudHJpZXMua2V5cygpKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgZGVmIHZhbHVlKGtleSwgc2VsZj1zZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmVudHJpZXNba2V5XQotICAgICAgICByZXR1cm4gW3ZhbHVlKGspIGZvciBrIGluIHNlbGYua2V5cygpXQotCi0gICAgZGVmIGl0ZW1zKHNlbGYpOgotICAgICAgICBkZWYgaXRlbShrZXksIHNlbGY9c2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gKGtleSwgc2VsZi5lbnRyaWVzW2tleV0pCi0gICAgICAgIHJldHVybiBbaXRlbShrKSBmb3IgayBpbiBzZWxmLmtleXMoKV0KLQotICAgIGRlZiBjdnNleGlzdHMoc2VsZiwgZmlsZSk6Ci0gICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4oIkNWUyIsIGZpbGUpCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmV4aXN0cyhmaWxlKQotCi0gICAgZGVmIGN2c29wZW4oc2VsZiwgZmlsZSwgbW9kZSA9ICdyJyk6Ci0gICAgICAgIGZpbGUgPSBvcy5wYXRoLmpvaW4oIkNWUyIsIGZpbGUpCi0gICAgICAgIGlmICdyJyBub3QgaW4gbW9kZToKLSAgICAgICAgICAgIHNlbGYuYmFja3VwKGZpbGUpCi0gICAgICAgIHJldHVybiBvcGVuKGZpbGUsIG1vZGUpCi0KLSAgICBkZWYgYmFja3VwKHNlbGYsIGZpbGUpOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKLSAgICAgICAgICAgIGJmaWxlID0gZmlsZSArICd+JwotICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoYmZpbGUpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6IHBhc3MKLSAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlLCBiZmlsZSkKLQotICAgIGRlZiBpZ25vcmVkKHNlbGYsIGZpbGUpOgotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGUpOiByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgcGF0IGluIHNlbGYuSWdub3JlTGlzdDoKLSAgICAgICAgICAgIGlmIGZubWF0Y2guZm5tYXRjaChmaWxlLCBwYXQpOiByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLQotCi0jIGhleGlmeSBhbmQgdW5oZXhpZnkgYXJlIHVzZWZ1bCB0byBwcmludCBNRDUgY2hlY2tzdW1zIGluIGhleCBmb3JtYXQKLQotaGV4aWZ5X2Zvcm1hdCA9ICclMDJ4JyAqIDE2Ci1kZWYgaGV4aWZ5KHN1bSk6Ci0gICAgIlJldHVybiBhIGhleCByZXByZXNlbnRhdGlvbiBvZiBhIDE2LWJ5dGUgc3RyaW5nIChlLmcuIGFuIE1ENSBkaWdlc3QpIgotICAgIGlmIHN1bSBpcyBOb25lOgotICAgICAgICByZXR1cm4gIk5vbmUiCi0gICAgcmV0dXJuIGhleGlmeV9mb3JtYXQgJSB0dXBsZShtYXAob3JkLCBzdW0pKQotCi1kZWYgdW5oZXhpZnkoaGV4c3VtKToKLSAgICAiUmV0dXJuIHRoZSBvcmlnaW5hbCBmcm9tIGEgaGV4aWZpZWQgc3RyaW5nIgotICAgIGlmIGhleHN1bSA9PSAiTm9uZSI6Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgc3VtID0gJycKLSAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaGV4c3VtKSwgMik6Ci0gICAgICAgIHN1bSA9IHN1bSArIGNocihzdHJpbmcuYXRvaShoZXhzdW1baTppKzJdLCAxNikpCi0gICAgcmV0dXJuIHN1bQotCi0KLXVuY3RpbWVfbW9udGhtYXAgPSB7fQotZGVmIHVuY3RpbWUoZGF0ZSk6Ci0gICAgaWYgZGF0ZSA9PSAiTm9uZSI6IHJldHVybiBOb25lCi0gICAgaWYgbm90IHVuY3RpbWVfbW9udGhtYXA6Ci0gICAgICAgIG1vbnRocyA9IFsnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLAotICAgICAgICAgICAgICAgICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10KLSAgICAgICAgaSA9IDAKLSAgICAgICAgZm9yIG0gaW4gbW9udGhzOgotICAgICAgICAgICAgaSA9IGkrMQotICAgICAgICAgICAgdW5jdGltZV9tb250aG1hcFttXSA9IGkKLSAgICB3b3JkcyA9IHN0cmluZy5zcGxpdChkYXRlKSAjIERheSBNb24gREQgSEg6TU06U1MgWUVBUgotICAgIHllYXIgPSBzdHJpbmcuYXRvaSh3b3Jkc1s0XSkKLSAgICBtb250aCA9IHVuY3RpbWVfbW9udGhtYXBbd29yZHNbMV1dCi0gICAgZGF5ID0gc3RyaW5nLmF0b2kod29yZHNbMl0pCi0gICAgW2hoLCBtbSwgc3NdID0gbGlzdChtYXAoc3RyaW5nLmF0b2ksIHN0cmluZy5zcGxpdGZpZWxkcyh3b3Jkc1szXSwgJzonKSkpCi0gICAgc3MgPSBzcyAtIHRpbWUudGltZXpvbmUKLSAgICByZXR1cm4gdGltZS5ta3RpbWUoKHllYXIsIG1vbnRoLCBkYXksIGhoLCBtbSwgc3MsIDAsIDAsIDApKQotCi1kZWYgZ21jdGltZSh0KToKLSAgICBpZiB0IGlzIE5vbmU6IHJldHVybiAiTm9uZSIKLSAgICByZXR1cm4gdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKHQpKQotCi1kZWYgdGVzdF91bmN0aW1lKCk6Ci0gICAgbm93ID0gaW50KHRpbWUudGltZSgpKQotICAgIHQgPSB0aW1lLmdtdGltZShub3cpCi0gICAgYXQgPSB0aW1lLmFzY3RpbWUodCkKLSAgICBwcmludCgnR01UJywgbm93LCBhdCkKLSAgICBwcmludCgndGltZXpvbmUnLCB0aW1lLnRpbWV6b25lKQotICAgIHByaW50KCdsb2NhbCcsIHRpbWUuY3RpbWUobm93KSkKLSAgICB1ID0gdW5jdGltZShhdCkKLSAgICBwcmludCgndW5jdGltZSgpJywgdSkKLSAgICBndSA9IHRpbWUuZ210aW1lKHUpCi0gICAgcHJpbnQoJy0+JywgZ3UpCi0gICAgcHJpbnQodGltZS5hc2N0aW1lKGd1KSkKLQotZGVmIHRlc3QoKToKLSAgICB4ID0gQ1ZTKCkKLSAgICB4LmdldGVudHJpZXMoKQotICAgIHguZ2V0bG9jYWxmaWxlcygpCi0jIyAgICAgIHgucmVwb3J0KCkKLSAgICBpbXBvcnQgcmNzY2xpZW50Ci0gICAgcHJveHkgPSByY3NjbGllbnQub3BlbnJjc2NsaWVudCgpCi0gICAgeC5nZXRyZW1vdGVmaWxlcyhwcm94eSkKLSAgICB4LnJlcG9ydCgpCi0KLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvY3ZzbG9jay5weSBiL0RlbW8vcGRpc3QvY3ZzbG9jay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmZhYTE1ZS4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L2N2c2xvY2sucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNzkgKzAsMCBAQAotIiIiQ1ZTIGxvY2tpbmcgYWxnb3JpdGhtLgotCi1DVlMgbG9ja2luZyBzdHJhdGVneQotPT09PT09PT09PT09PT09PT09PT0KLQotQXMgcmV2ZXJzZSBlbmdpbmVlcmVkIGZyb20gdGhlIENWUyAxLjMgc291cmNlcyAoZmlsZSBsb2NrLmMpOgotCi0tIExvY2tpbmcgaXMgZG9uZSBvbiBhIHBlciByZXBvc2l0b3J5IGJhc2lzIChidXQgYSBwcm9jZXNzIGNhbiBob2xkCi13cml0ZSBsb2NrcyBmb3IgbXVsdGlwbGUgZGlyZWN0b3JpZXMpOyBhbGwgbG9jayBmaWxlcyBhcmUgcGxhY2VkIGluCi10aGUgcmVwb3NpdG9yeSBhbmQgaGF2ZSBuYW1lcyBiZWdpbm5pbmcgd2l0aCAiI2N2cy4iLgotCi0tIEJlZm9yZSBldmVuIGF0dGVtcHRpbmcgdG8gbG9jaywgYSBmaWxlICIjY3ZzLnRmbC48cGlkPiIgaXMgY3JlYXRlZAotKGFuZCByZW1vdmVkIGFnYWluKSwgdG8gdGVzdCB0aGF0IHdlIGNhbiB3cml0ZSB0aGUgcmVwb3NpdG9yeS4gIFtUaGUKLWFsZ29yaXRobSBjYW4gc3RpbGwgYmUgZm9vbGVkICgxKSBpZiB0aGUgcmVwb3NpdG9yeSdzIG1vZGUgaXMgY2hhbmdlZAotd2hpbGUgYXR0ZW1wdGluZyB0byBsb2NrOyAoMikgaWYgdGhpcyBmaWxlIGV4aXN0cyBhbmQgaXMgd3JpdGFibGUgYnV0Ci10aGUgZGlyZWN0b3J5IGlzIG5vdC5dCi0KLS0gV2hpbGUgY3JlYXRpbmcgdGhlIGFjdHVhbCByZWFkL3dyaXRlIGxvY2sgZmlsZXMgKHdoaWNoIG1heSBleGlzdCBmb3IKLWEgbG9uZyB0aW1lKSwgYSAibWV0YS1sb2NrIiBpcyBoZWxkLiAgVGhlIG1ldGEtbG9jayBpcyBhIGRpcmVjdG9yeQotbmFtZWQgIiNjdnMubG9jayIgaW4gdGhlIHJlcG9zaXRvcnkuICBUaGUgbWV0YS1sb2NrIGlzIGFsc28gaGVsZCB3aGlsZQotYSB3cml0ZSBsb2NrIGlzIGhlbGQuCi0KLS0gVG8gc2V0IGEgcmVhZCBsb2NrOgotCi0gICAgICAgIC0gYWNxdWlyZSB0aGUgbWV0YS1sb2NrCi0gICAgICAgIC0gY3JlYXRlIHRoZSBmaWxlICIjY3ZzLnJmbC48cGlkPiIKLSAgICAgICAgLSByZWxlYXNlIHRoZSBtZXRhLWxvY2sKLQotLSBUbyBzZXQgYSB3cml0ZSBsb2NrOgotCi0gICAgICAgIC0gYWNxdWlyZSB0aGUgbWV0YS1sb2NrCi0gICAgICAgIC0gY2hlY2sgdGhhdCB0aGVyZSBhcmUgbm8gZmlsZXMgY2FsbGVkICIjY3ZzLnJmbC4qIgotICAgICAgICAgICAgICAgIC0gaWYgdGhlcmUgYXJlLCByZWxlYXNlIHRoZSBtZXRhLWxvY2ssIHNsZWVwLCB0cnkgYWdhaW4KLSAgICAgICAgLSBjcmVhdGUgdGhlIGZpbGUgIiNjdnMud2ZsLjxwaWQ+IgotCi0tIFRvIHJlbGVhc2UgYSB3cml0ZSBsb2NrOgotCi0gICAgICAgIC0gcmVtb3ZlIHRoZSBmaWxlICIjY3ZzLndmbC48cGlkPiIKLSAgICAgICAgLSBybWRpciB0aGUgbWV0YS1sb2NrCi0KLS0gVG8gcmVsZWFzZSBhIHJlYWQgbG9jazoKLQotICAgICAgICAtIHJlbW92ZSB0aGUgZmlsZSAiI2N2cy5yZmwuPHBpZD4iCi0KLQotQWRkaXRpb25hbCBub3RlcwotLS0tLS0tLS0tLS0tLS0tLQotCi0tIEEgcHJvY2VzcyBzaG91bGQgcmVhZC1sb2NrIGF0IG1vc3Qgb25lIHJlcG9zaXRvcnkgYXQgYSB0aW1lLgotCi0tIEEgcHJvY2VzcyBtYXkgd3JpdGUtbG9jayBhcyBtYW55IHJlcG9zaXRvcmllcyBhcyBpdCB3aXNoZXMgKHRvIGF2b2lkCi1kZWFkbG9ja3MsIEkgcHJlc3VtZSBpdCBzaG91bGQgYWx3YXlzIGxvY2sgdGhlbSB0b3AtZG93biBpbiB0aGUKLWRpcmVjdG9yeSBoaWVyYXJjaHkpLgotCi0tIEEgcHJvY2VzcyBzaG91bGQgbWFrZSBzdXJlIGl0IHJlbW92ZXMgYWxsIGl0cyBsb2NrIGZpbGVzIGFuZAotZGlyZWN0b3JpZXMgd2hlbiBpdCBjcmFzaGVzLgotCi0tIExpbWl0YXRpb246IG9uZSB1c2VyIGlkIHNob3VsZCBub3QgYmUgY29tbWl0dGluZyBmaWxlcyBpbnRvIHRoZSBzYW1lCi1yZXBvc2l0b3J5IGF0IHRoZSBzYW1lIHRpbWUuCi0KLQotVHVybiB0aGlzIGludG8gUHl0aG9uIGNvZGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXJsID0gUmVhZExvY2socmVwb3NpdG9yeSwgd2FpdHRpbWUpCi0KLXdsID0gV3JpdGVMb2NrKHJlcG9zaXRvcnksIHdhaXR0aW1lKQotCi1saXN0ID0gTXVsdGlwbGVXcml0ZUxvY2soW3JlcG9zaXRvcnkxLCByZXBvc2l0b3J5MiwgLi4uXSwgd2FpdHRpbWUpCi0KLSIiIgotCi0KLWltcG9ydCBvcwotaW1wb3J0IHRpbWUKLWltcG9ydCBzdGF0Ci1pbXBvcnQgcHdkCi0KLQotIyBEZWZhdWx0IHdhaXQgdGltZQotREVMQVkgPSAxMAotCi0KLSMgWFhYIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIG9uIGFsbCBVbml4IHZlcnNpb25zCi1FRVhJU1QgPSAxNwotCi0KLSMgRmlsZXMgdXNlZCBmb3IgbG9ja2luZyAobXVzdCBtYXRjaCBjdnMuaCBpbiB0aGUgQ1ZTIHNvdXJjZXMpCi1DVlNMQ0sgPSAiI2N2cy5sY2siCi1DVlNSRkwgPSAiI2N2cy5yZmwuIgotQ1ZTV0ZMID0gIiNjdnMud2ZsLiIKLQotCi1jbGFzcyBFcnJvcjoKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtc2cpOgotICAgICAgICBzZWxmLm1zZyA9IG1zZwotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gcmVwcihzZWxmLm1zZykKLQotICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3RyKHNlbGYubXNnKQotCi0KLWNsYXNzIExvY2tlZChFcnJvcik6Ci0gICAgcGFzcwotCi0KLWNsYXNzIExvY2s6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwb3NpdG9yeSA9ICIuIiwgZGVsYXkgPSBERUxBWSk6Ci0gICAgICAgIHNlbGYucmVwb3NpdG9yeSA9IHJlcG9zaXRvcnkKLSAgICAgICAgc2VsZi5kZWxheSA9IGRlbGF5Ci0gICAgICAgIHNlbGYubG9ja2RpciA9IE5vbmUKLSAgICAgICAgc2VsZi5sb2NrZmlsZSA9IE5vbmUKLSAgICAgICAgcGlkID0gcmVwcihvcy5nZXRwaWQoKSkKLSAgICAgICAgc2VsZi5jdnNsY2sgPSBzZWxmLmpvaW4oQ1ZTTENLKQotICAgICAgICBzZWxmLmN2c3JmbCA9IHNlbGYuam9pbihDVlNSRkwgKyBwaWQpCi0gICAgICAgIHNlbGYuY3Zzd2ZsID0gc2VsZi5qb2luKENWU1dGTCArIHBpZCkKLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICBwcmludCgiX19kZWxfXyIpCi0gICAgICAgIHNlbGYudW5sb2NrKCkKLQotICAgIGRlZiBzZXRsb2NrZGlyKHNlbGYpOgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYubG9ja2RpciA9IHNlbGYuY3ZzbGNrCi0gICAgICAgICAgICAgICAgb3MubWtkaXIoc2VsZi5jdnNsY2ssIDBvNzc3KQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvY2tkaXIgPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgbXNnLmFyZ3NbMF0gPT0gRUVYSVNUOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdCA9IG9zLnN0YXQoc2VsZi5jdnNsY2spCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2xlZXAoc3QpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImZhaWxlZCB0byBsb2NrICVzOiAlcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcG9zaXRvcnksIG1zZykpCi0KLSAgICBkZWYgdW5sb2NrKHNlbGYpOgotICAgICAgICBzZWxmLnVubG9ja2ZpbGUoKQotICAgICAgICBzZWxmLnVubG9ja2RpcigpCi0KLSAgICBkZWYgdW5sb2NrZmlsZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5sb2NrZmlsZToKLSAgICAgICAgICAgIHByaW50KCJ1bmxpbmsiLCBzZWxmLmxvY2tmaWxlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLmxvY2tmaWxlKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYubG9ja2ZpbGUgPSBOb25lCi0KLSAgICBkZWYgdW5sb2NrZGlyKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmxvY2tkaXI6Ci0gICAgICAgICAgICBwcmludCgicm1kaXIiLCBzZWxmLmxvY2tkaXIpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5sb2NrZGlyKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHNlbGYubG9ja2RpciA9IE5vbmUKLQotICAgIGRlZiBzbGVlcChzZWxmLCBzdCk6Ci0gICAgICAgIHNsZWVwKHN0LCBzZWxmLnJlcG9zaXRvcnksIHNlbGYuZGVsYXkpCi0KLSAgICBkZWYgam9pbihzZWxmLCBuYW1lKToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLnJlcG9zaXRvcnksIG5hbWUpCi0KLQotZGVmIHNsZWVwKHN0LCByZXBvc2l0b3J5LCBkZWxheSk6Ci0gICAgaWYgZGVsYXkgPD0gMDoKLSAgICAgICAgcmFpc2UgTG9ja2VkKHN0KQotICAgIHVpZCA9IHN0W3N0YXQuU1RfVUlEXQotICAgIHRyeToKLSAgICAgICAgcHdlbnQgPSBwd2QuZ2V0cHd1aWQodWlkKQotICAgICAgICB1c2VyID0gcHdlbnRbMF0KLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHVzZXIgPSAidWlkICVkIiAlIHVpZAotICAgIHByaW50KCJbJXNdIiAlIHRpbWUuY3RpbWUodGltZS50aW1lKCkpWzExOjE5XSwgZW5kPScgJykKLSAgICBwcmludCgiV2FpdGluZyBmb3IgJXMncyBsb2NrIGluIiAlIHVzZXIsIHJlcG9zaXRvcnkpCi0gICAgdGltZS5zbGVlcChkZWxheSkKLQotCi1jbGFzcyBSZWFkTG9jayhMb2NrKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5LCBkZWxheSA9IERFTEFZKToKLSAgICAgICAgTG9jay5fX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5LCBkZWxheSkKLSAgICAgICAgb2sgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc2V0bG9ja2RpcigpCi0gICAgICAgICAgICBzZWxmLmxvY2tmaWxlID0gc2VsZi5jdnNyZmwKLSAgICAgICAgICAgIGZwID0gb3BlbihzZWxmLmxvY2tmaWxlLCAndycpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICBvayA9IDEKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBvazoKLSAgICAgICAgICAgICAgICBzZWxmLnVubG9ja2ZpbGUoKQotICAgICAgICAgICAgc2VsZi51bmxvY2tkaXIoKQotCi0KLWNsYXNzIFdyaXRlTG9jayhMb2NrKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5LCBkZWxheSA9IERFTEFZKToKLSAgICAgICAgTG9jay5fX2luaXRfXyhzZWxmLCByZXBvc2l0b3J5LCBkZWxheSkKLSAgICAgICAgc2VsZi5zZXRsb2NrZGlyKCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHVpZCA9IHNlbGYucmVhZGVyc19leGlzdCgpCi0gICAgICAgICAgICBpZiBub3QgdWlkOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLnVubG9ja2RpcigpCi0gICAgICAgICAgICBzZWxmLnNsZWVwKHVpZCkKLSAgICAgICAgc2VsZi5sb2NrZmlsZSA9IHNlbGYuY3Zzd2ZsCi0gICAgICAgIGZwID0gb3BlbihzZWxmLmxvY2tmaWxlLCAndycpCi0gICAgICAgIGZwLmNsb3NlKCkKLQotICAgIGRlZiByZWFkZXJzX2V4aXN0KHNlbGYpOgotICAgICAgICBuID0gbGVuKENWU1JGTCkKLSAgICAgICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihzZWxmLnJlcG9zaXRvcnkpOgotICAgICAgICAgICAgaWYgbmFtZVs6bl0gPT0gQ1ZTUkZMOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHNlbGYuam9pbihuYW1lKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0Ci0gICAgICAgIHJldHVybiBOb25lCi0KLQotZGVmIE11bHRpcGxlV3JpdGVMb2NrKHJlcG9zaXRvcmllcywgZGVsYXkgPSBERUxBWSk6Ci0gICAgd2hpbGUgMToKLSAgICAgICAgbG9ja3MgPSBbXQotICAgICAgICBmb3IgciBpbiByZXBvc2l0b3JpZXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbG9ja3MuYXBwZW5kKFdyaXRlTG9jayhyLCAwKSkKLSAgICAgICAgICAgIGV4Y2VwdCBMb2NrZWQgYXMgaW5zdGFuY2U6Ci0gICAgICAgICAgICAgICAgZGVsIGxvY2tzCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHNsZWVwKGluc3RhbmNlLm1zZywgciwgZGVsYXkpCi0gICAgcmV0dXJuIGxpc3QKLQotCi1kZWYgdGVzdCgpOgotICAgIGltcG9ydCBzeXMKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIHJlcG9zaXRvcnkgPSBzeXMuYXJndlsxXQotICAgIGVsc2U6Ci0gICAgICAgIHJlcG9zaXRvcnkgPSAiLiIKLSAgICBybCA9IE5vbmUKLSAgICB3bCA9IE5vbmUKLSAgICB0cnk6Ci0gICAgICAgIHByaW50KCJhdHRlbXB0aW5nIHdyaXRlIGxvY2sgLi4uIikKLSAgICAgICAgd2wgPSBXcml0ZUxvY2socmVwb3NpdG9yeSkKLSAgICAgICAgcHJpbnQoImdvdCBpdC4iKQotICAgICAgICB3bC51bmxvY2soKQotICAgICAgICBwcmludCgiYXR0ZW1wdGluZyByZWFkIGxvY2sgLi4uIikKLSAgICAgICAgcmwgPSBSZWFkTG9jayhyZXBvc2l0b3J5KQotICAgICAgICBwcmludCgiZ290IGl0LiIpCi0gICAgICAgIHJsLnVubG9jaygpCi0gICAgZmluYWxseToKLSAgICAgICAgcHJpbnQoWzFdKQotICAgICAgICBwcmludChbMl0pCi0gICAgICAgIGlmIHJsOgotICAgICAgICAgICAgcmwudW5sb2NrKCkKLSAgICAgICAgcHJpbnQoWzNdKQotICAgICAgICBpZiB3bDoKLSAgICAgICAgICAgIHdsLnVubG9jaygpCi0gICAgICAgIHByaW50KFs0XSkKLSAgICAgICAgcmwgPSBOb25lCi0gICAgICAgIHByaW50KFs1XSkKLSAgICAgICAgd2wgPSBOb25lCi0gICAgICAgIHByaW50KFs2XSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9tYWMucHkgYi9EZW1vL3BkaXN0L21hYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmViNzdlYy4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L21hYy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWltcG9ydCBzeXMKLWltcG9ydCByY3ZzCi0KLWRlZiByYXdfaW5wdXQocHJvbXB0KToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHByb21wdCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLQotZGVmIG1haW4oKToKLSAgICB3aGlsZSAxOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsaW5lID0gaW5wdXQoJyQgJykKLSAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgd29yZHMgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgaWYgbm90IHdvcmRzOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgd29yZHNbMF0gIT0gJ3JjdnMnOgotICAgICAgICAgICAgd29yZHMuaW5zZXJ0KDAsICdyY3ZzJykKLSAgICAgICAgc3lzLmFyZ3YgPSB3b3JkcwotICAgICAgICByY3ZzLm1haW4oKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9tYWtlY2hhbmdlbG9nLnB5IGIvRGVtby9wZGlzdC9tYWtlY2hhbmdlbG9nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYjY2ZThmLi4wMDAwMDAwCi0tLSBhL0RlbW8vcGRpc3QvbWFrZWNoYW5nZWxvZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSIiIlR1cm4gYSBwaWxlIG9mIFJDUyBsb2cgb3V0cHV0IGludG8gQ2hhbmdlTG9nIGZpbGUgZW50cmllcy4KLQotIiIiCi0KLWltcG9ydCBzeXMKLWltcG9ydCBzdHJpbmcKLWltcG9ydCByZQotaW1wb3J0IGdldG9wdAotaW1wb3J0IHRpbWUKLQotZGVmIG1haW4oKToKLSAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCi0gICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJncywgJ3A6JykKLSAgICBwcmVmaXggPSAnJwotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIHAgPT0gJy1wJzogcHJlZml4ID0gYQotCi0gICAgZiA9IHN5cy5zdGRpbgotICAgIGFsbHJldnMgPSBbXQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGZpbGUgPSBnZXRuZXh0ZmlsZShmKQotICAgICAgICBpZiBub3QgZmlsZTogYnJlYWsKLSAgICAgICAgcmV2cyA9IFtdCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZXYgPSBnZXRuZXh0cmV2KGYsIGZpbGUpCi0gICAgICAgICAgICBpZiBub3QgcmV2OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICByZXZzLmFwcGVuZChyZXYpCi0gICAgICAgIGlmIHJldnM6Ci0gICAgICAgICAgICBhbGxyZXZzW2xlbihhbGxyZXZzKTpdID0gcmV2cwotICAgIGFsbHJldnMuc29ydCgpCi0gICAgYWxscmV2cy5yZXZlcnNlKCkKLSAgICBmb3IgcmV2IGluIGFsbHJldnM6Ci0gICAgICAgIGZvcm1hdHJldihyZXYsIHByZWZpeCkKLQotcGFyc2VkYXRlcHJvZyA9IHJlLmNvbXBpbGUoCi0gICAgJ15kYXRlOiAoWzAtOV0rKS8oWzAtOV0rKS8oWzAtOV0rKSAnICsKLSAgICAnKFswLTldKyk6KFswLTldKyk6KFswLTldKyk7ICBhdXRob3I6IChbXiA7XSspJykKLQotYXV0aG9ybWFwID0gewotICAgICdndWlkbyc6ICdHdWlkbyB2YW4gUm9zc3VtICA8Z3VpZG9AY25yaS5yZXN0b24udmEudXM+JywKLSAgICAnamFjayc6ICdKYWNrIEphbnNlbiAgPGphY2tAY3dpLm5sPicsCi0gICAgJ3Nqb2VyZCc6ICdTam9lcmQgTXVsbGVuZGVyICA8c2pvZXJkQGN3aS5ubD4nLAotICAgIH0KLQotZGVmIGZvcm1hdHJldihyZXYsIHByZWZpeCk6Ci0gICAgZGF0ZWxpbmUsIGZpbGUsIHJldmxpbmUsIGxvZyA9IHJldgotICAgIGlmIHBhcnNlZGF0ZXByb2cubWF0Y2goZGF0ZWxpbmUpID49IDA6Ci0gICAgICAgIGZpZWxkcyA9IHBhcnNlZGF0ZXByb2cuZ3JvdXAoMSwgMiwgMywgNCwgNSwgNikKLSAgICAgICAgYXV0aG9yID0gcGFyc2VkYXRlcHJvZy5ncm91cCg3KQotICAgICAgICBpZiBhdXRob3IgaW4gYXV0aG9ybWFwOiBhdXRob3IgPSBhdXRob3JtYXBbYXV0aG9yXQotICAgICAgICB0ZmllbGRzID0gbGlzdChtYXAoc3RyaW5nLmF0b2ksIGZpZWxkcykpICsgWzAsIDAsIDBdCi0gICAgICAgIHRmaWVsZHNbNV0gPSB0ZmllbGRzWzVdIC0gdGltZS50aW1lem9uZQotICAgICAgICB0ID0gdGltZS5ta3RpbWUodHVwbGUodGZpZWxkcykpCi0gICAgICAgIHByaW50KHRpbWUuY3RpbWUodCksICcnLCBhdXRob3IpCi0gICAgICAgIHdvcmRzID0gc3RyaW5nLnNwbGl0KGxvZykKLSAgICAgICAgd29yZHNbOjBdID0gWycqJywgcHJlZml4ICsgZmlsZSArICc6J10KLSAgICAgICAgbWF4Y29sID0gNzItOAotICAgICAgICBjb2wgPSBtYXhjb2wKLSAgICAgICAgZm9yIHdvcmQgaW4gd29yZHM6Ci0gICAgICAgICAgICBpZiBjb2wgPiAwIGFuZCBjb2wgKyBsZW4od29yZCkgPj0gbWF4Y29sOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgICAgICBwcmludCgnXHQnICsgd29yZCwgZW5kPScgJykKLSAgICAgICAgICAgICAgICBjb2wgPSAtMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludCh3b3JkLCBlbmQ9JyAnKQotICAgICAgICAgICAgY29sID0gY29sICsgMSArIGxlbih3b3JkKQotICAgICAgICBwcmludCgpCi0gICAgICAgIHByaW50KCkKLQotc3RhcnRwcm9nID0gcmUuY29tcGlsZSgiXldvcmtpbmcgZmlsZTogKC4qKSQiKQotCi1kZWYgZ2V0bmV4dGZpbGUoZik6Ci0gICAgd2hpbGUgMToKLSAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZTogcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgc3RhcnRwcm9nLm1hdGNoKGxpbmUpID49IDA6Ci0gICAgICAgICAgICBmaWxlID0gc3RhcnRwcm9nLmdyb3VwKDEpCi0gICAgICAgICAgICAjIFNraXAgdW50aWwgZmlyc3QgcmV2aXNpb24KLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOiByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgIGlmIGxpbmVbOjEwXSA9PSAnPScqMTA6IHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgaWYgbGluZVs6MTBdID09ICctJyoxMDogYnJlYWsKLSMjICAgICAgICAgICAgICBwcmludCAiU2tpcHBlZCIsIGxpbmUsCi0gICAgICAgICAgICByZXR1cm4gZmlsZQotIyMgICAgICBlbHNlOgotIyMgICAgICAgICAgcHJpbnQgIklnbm9yZWQiLCBsaW5lLAotCi1kZWYgZ2V0bmV4dHJldihmLCBmaWxlKToKLSAgICAjIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UgYXJlIHBvc2l0aW9uZWQganVzdCBhZnRlciBhICctLS0nIHNlcGFyYXRvcgotICAgIHJldmxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICBkYXRlbGluZSA9IGYucmVhZGxpbmUoKQotICAgIGxvZyA9ICcnCi0gICAgd2hpbGUgMToKLSAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgaWYgbGluZVs6MTBdID09ICc9JyoxMDoKLSAgICAgICAgICAgICMgSWdub3JlIHRoZSAqbGFzdCogbG9nIGVudHJ5IGZvciBlYWNoIGZpbGUgc2luY2UgaXQKLSAgICAgICAgICAgICMgaXMgdGhlIHJldmlzaW9uIHNpbmNlIHdoaWNoIHdlIGFyZSBsb2dnaW5nLgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgbGluZVs6MTBdID09ICctJyoxMDogYnJlYWsKLSAgICAgICAgbG9nID0gbG9nICsgbGluZQotICAgIHJldHVybiBkYXRlbGluZSwgZmlsZSwgcmV2bGluZSwgbG9nCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3Jjc2J1bXAgYi9EZW1vL3BkaXN0L3Jjc2J1bXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDRmYTA3OGUuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9yY3NidW1wCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIC0qLSBweXRob24gLSotCi0jCi0jIGd1aWRvJ3MgdmVyc2lvbiwgZnJvbSByY3NidW1wLHYgMS4yIDE5OTUvMDYvMjIgMjE6Mjc6MjcgYndhcnNhdyBFeHAKLSMKLSMgUHl0aG9uIHNjcmlwdCBmb3IgYnVtcGluZyB1cCBhbiBSQ1MgbWFqb3IgcmV2aXNpb24gbnVtYmVyLgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgcmUKLWltcG9ydCByY3NsaWIKLWltcG9ydCBzdHJpbmcKLQotV0lUSExPQ0sgPSAxCi1tYWpvcnJldl9yZSA9IHJlLmNvbXBpbGUoJ15bMC05XSsnKQotCi1kaXIgPSByY3NsaWIuUkNTKCkKLQotaWYgc3lzLmFyZ3ZbMTpdOgotICAgIGZpbGVzID0gc3lzLmFyZ3ZbMTpdCi1lbHNlOgotICAgIGZpbGVzID0gZGlyLmxpc3RmaWxlcygpCi0KLWZvciBmaWxlIGluIGZpbGVzOgotICAgICMgZ2V0IHRoZSBtYWpvciByZXZudW1iZXIgb2YgdGhlIGZpbGUKLSAgICBoZWFkYnJhbmNoID0gZGlyLmluZm8oZmlsZSlbJ2hlYWQnXQotICAgIG1ham9ycmV2X3JlLm1hdGNoKGhlYWRicmFuY2gpCi0gICAgbWFqb3JyZXYgPSBzdHJpbmcuYXRvaShtYWpvcnJldl9yZS5ncm91cCgwKSkgKyAxCi0KLSAgICBpZiBub3QgZGlyLmlzbG9ja2VkKGZpbGUpOgotICAgICAgICBkaXIuY2hlY2tvdXQoZmlsZSwgV0lUSExPQ0spCi0KLSAgICBtc2cgPSAiQnVtcGluZyBtYWpvciByZXZpc2lvbiBudW1iZXIgKHRvICVkKSIgJSBtYWpvcnJldgotICAgIGRpci5jaGVja2luKChmaWxlLCAiJXMuMCIgJSBtYWpvcnJldiksIG1zZywgIi1mIikKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvcmNzY2xpZW50LnB5IGIvRGVtby9wZGlzdC9yY3NjbGllbnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ4Y2IwMDQuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9yY3NjbGllbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0iIiJDdXN0b21pemUgdGhpcyBmaWxlIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBjbGllbnQgZXRjLgotCi0oSW4gZ2VuZXJhbCwgaXQgaXMgcHJvYmFibHkgYmUgYmV0dGVyIHRvIG1ha2UgbG9jYWwgb3BlcmF0aW9uIHRoZQotZGVmYXVsdCBhbmQgdG8gcmVxdWlyZSBzb21ldGhpbmcgbGlrZSBhbiBSQ1NTRVJWRVIgZW52aXJvbm1lbnQKLXZhcmlhYmxlIHRvIGVuYWJsZSByZW1vdGUgb3BlcmF0aW9uLikKLQotIiIiCi0KLWltcG9ydCBzdHJpbmcKLWltcG9ydCBvcwotCi0jIFRoZXNlIGRlZmF1bHRzIGRvbid0IGJlbG9uZyBoZXJlIC0tIHRoZXkgc2hvdWxkIGJlIHRha2VuIGZyb20gdGhlCi0jIGVudmlyb25tZW50IG9yIGZyb20gYSBoaWRkZW4gZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKLQotSE9TVCA9ICd2b29ybi5jd2kubmwnCi1QT1JUID0gNDEyNwotVkVSQk9TRSA9IDEKLUxPQ0FMID0gMAotCi1pbXBvcnQgY2xpZW50Ci0KLQotY2xhc3MgUkNTUHJveHlDbGllbnQoY2xpZW50LlNlY3VyZUNsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgdmVyYm9zZSA9IGNsaWVudC5WRVJCT1NFKToKLSAgICAgICAgY2xpZW50LlNlY3VyZUNsaWVudC5fX2luaXRfXyhzZWxmLCBhZGRyZXNzLCB2ZXJib3NlKQotCi0KLWRlZiBvcGVucmNzY2xpZW50KG9wdHMgPSBbXSk6Ci0gICAgIm9wZW4gYW4gUkNTUHJveHkgY2xpZW50IGJhc2VkIG9uIGEgbGlzdCBvZiBvcHRpb25zIHJldHVybmVkIGJ5IGdldG9wdCIKLSAgICBpbXBvcnQgUkNTUHJveHkKLSAgICBob3N0ID0gSE9TVAotICAgIHBvcnQgPSBQT1JUCi0gICAgdmVyYm9zZSA9IFZFUkJPU0UKLSAgICBsb2NhbCA9IExPQ0FMCi0gICAgZGlyZWN0b3J5ID0gTm9uZQotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIG8gPT0gJy1oJzoKLSAgICAgICAgICAgIGhvc3QgPSBhCi0gICAgICAgICAgICBpZiAnOicgaW4gaG9zdDoKLSAgICAgICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQoaG9zdCwgJzonKQotICAgICAgICAgICAgICAgIGhvc3QsIHAgPSBob3N0WzppXSwgaG9zdFtpKzE6XQotICAgICAgICAgICAgICAgIGlmIHA6Ci0gICAgICAgICAgICAgICAgICAgIHBvcnQgPSBzdHJpbmcuYXRvaShwKQotICAgICAgICBpZiBvID09ICctcCc6Ci0gICAgICAgICAgICBwb3J0ID0gc3RyaW5nLmF0b2koYSkKLSAgICAgICAgaWYgbyA9PSAnLWQnOgotICAgICAgICAgICAgZGlyZWN0b3J5ID0gYQotICAgICAgICBpZiBvID09ICctdic6Ci0gICAgICAgICAgICB2ZXJib3NlID0gdmVyYm9zZSArIDEKLSAgICAgICAgaWYgbyA9PSAnLXEnOgotICAgICAgICAgICAgdmVyYm9zZSA9IDAKLSAgICAgICAgaWYgbyA9PSAnLUwnOgotICAgICAgICAgICAgbG9jYWwgPSAxCi0gICAgaWYgbG9jYWw6Ci0gICAgICAgIGltcG9ydCBSQ1NQcm94eQotICAgICAgICB4ID0gUkNTUHJveHkuUkNTUHJveHlMb2NhbCgpCi0gICAgZWxzZToKLSAgICAgICAgYWRkcmVzcyA9IChob3N0LCBwb3J0KQotICAgICAgICB4ID0gUkNTUHJveHlDbGllbnQoYWRkcmVzcywgdmVyYm9zZSkKLSAgICBpZiBub3QgZGlyZWN0b3J5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkaXJlY3RvcnkgPSBvcGVuKG9zLnBhdGguam9pbigiQ1ZTIiwgIlJlcG9zaXRvcnkiKSkucmVhZGxpbmUoKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGRpcmVjdG9yeVstMV0gPT0gJ1xuJzoKLSAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBkaXJlY3RvcnlbOi0xXQotICAgIGlmIGRpcmVjdG9yeToKLSAgICAgICAgeC5jZChkaXJlY3RvcnkpCi0gICAgcmV0dXJuIHgKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvcmNzbGliLnB5IGIvRGVtby9wZGlzdC9yY3NsaWIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk2OTBmM2IuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9yY3NsaWIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMzQgKzAsMCBAQAotIiIiUkNTIGludGVyZmFjZSBtb2R1bGUuCi0KLURlZmluZXMgdGhlIGNsYXNzIFJDUywgd2hpY2ggcmVwcmVzZW50cyBhIGRpcmVjdG9yeSB3aXRoIHJjcyB2ZXJzaW9uCi1maWxlcyBhbmQgKHBvc3NpYmx5KSBjb3JyZXNwb25kaW5nIHdvcmsgZmlsZXMuCi0KLSIiIgotCi0KLWltcG9ydCBmbm1hdGNoCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwotaW1wb3J0IHRlbXBmaWxlCi0KLQotY2xhc3MgUkNTOgotCi0gICAgIiIiUkNTIGludGVyZmFjZSBjbGFzcyAobG9jYWwgZmlsZXN5c3RlbSB2ZXJzaW9uKS4KLQotICAgIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGRpcmVjdG9yeSB3aXRoIHJjcyB2ZXJzaW9uCi0gICAgZmlsZXMgYW5kIChwb3NzaWJsZSkgY29ycmVzcG9uZGluZyB3b3JrIGZpbGVzLgotCi0gICAgTWV0aG9kcyBwcm92aWRlIGFjY2VzcyB0byBtb3N0IHJjcyBvcGVyYXRpb25zIHN1Y2ggYXMKLSAgICBjaGVja2luL2NoZWNrb3V0LCBhY2Nlc3MgdG8gdGhlIHJjcyBtZXRhZGF0YSAocmV2aXNpb25zLCBsb2dzLAotICAgIGJyYW5jaGVzIGV0Yy4pIGFzIHdlbGwgYXMgc29tZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMgc3VjaCBhcwotICAgIGxpc3RpbmcgYWxsIHJjcyB2ZXJzaW9uIGZpbGVzLgotCi0gICAgWFhYIEJVR1MgLyBQUk9CTEVNUwotCi0gICAgLSBUaGUgaW5zdGFuY2UgYWx3YXlzIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNvIGl0J3Mgbm90Ci0gICAgdmVyeSB1c2VmdWwgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGluc3RhbmNlIGFyb3VuZCBzaW11bHRhbmVvdXNseQotCi0gICAgIiIiCi0KLSAgICAjIENoYXJhY3RlcnMgYWxsb3dlZCBpbiB3b3JrIGZpbGUgbmFtZXMKLSAgICBva2NoYXJzID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgJy1fPSsnCi0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICIiIkNvbnN0cnVjdG9yLiIiIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgIiIiRGVzdHJ1Y3Rvci4iIiIKLSAgICAgICAgcGFzcwotCi0gICAgIyAtLS0gSW5mb3JtYXRpb25hbCBtZXRob2RzIGFib3V0IGEgc2luZ2xlIGZpbGUvcmV2aXNpb24gLS0tCi0KLSAgICBkZWYgbG9nKHNlbGYsIG5hbWVfcmV2LCBvdGhlcmZsYWdzID0gJycpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGZ1bGwgbG9nIHRleHQgZm9yIE5BTUVfUkVWIGFzIGEgc3RyaW5nLgotCi0gICAgICAgIE9wdGlvbmFsIE9USEVSRkxBR1MgYXJlIHBhc3NlZCB0byBybG9nLgotCi0gICAgICAgICIiIgotICAgICAgICBmID0gc2VsZi5fb3BlbihuYW1lX3JldiwgJ3Jsb2cgJyArIG90aGVyZmxhZ3MpCi0gICAgICAgIGRhdGEgPSBmLnJlYWQoKQotICAgICAgICBzdGF0dXMgPSBzZWxmLl9jbG9zZXBpcGUoZikKLSAgICAgICAgaWYgc3RhdHVzOgotICAgICAgICAgICAgZGF0YSA9IGRhdGEgKyAiJXM6ICVzIiAlIHN0YXR1cwotICAgICAgICBlbGlmIGRhdGFbLTFdID09ICdcbic6Ci0gICAgICAgICAgICBkYXRhID0gZGF0YVs6LTFdCi0gICAgICAgIHJldHVybiBkYXRhCi0KLSAgICBkZWYgaGVhZChzZWxmLCBuYW1lX3Jldik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgaGVhZCByZXZpc2lvbiBmb3IgTkFNRV9SRVYiIiIKLSAgICAgICAgZGljdCA9IHNlbGYuaW5mbyhuYW1lX3JldikKLSAgICAgICAgcmV0dXJuIGRpY3RbJ2hlYWQnXQotCi0gICAgZGVmIGluZm8oc2VsZiwgbmFtZV9yZXYpOgotICAgICAgICAiIiJSZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGluZm8gKGZyb20gcmxvZyAtaCkgZm9yIE5BTUVfUkVWCi0KLSAgICAgICAgVGhlIGRpY3Rpb25hcnkncyBrZXlzIGFyZSB0aGUga2V5d29yZHMgdGhhdCBybG9nIHByaW50cwotICAgICAgICAoZS5nLiAnaGVhZCcgYW5kIGl0cyB2YWx1ZXMgYXJlIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKLSAgICAgICAgKGUuZy4gJzEuMycpLgotCi0gICAgICAgIFhYWCBzeW1ib2xpYyBuYW1lcyBhbmQgbG9ja3MgYXJlIG5vdCByZXR1cm5lZAotCi0gICAgICAgICIiIgotICAgICAgICBmID0gc2VsZi5fb3BlbihuYW1lX3JldiwgJ3Jsb2cgLWgnKQotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICAgICAgaWYgbGluZVswXSA9PSAnXHQnOgotICAgICAgICAgICAgICAgICMgWFhYIGNvdWxkIGJlIGEgbG9jayBvciBzeW1ib2xpYyBuYW1lCi0gICAgICAgICAgICAgICAgIyBBbnl0aGluZyBlbHNlPwotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpID0gc3RyaW5nLmZpbmQobGluZSwgJzonKQotICAgICAgICAgICAgaWYgaSA+IDA6Ci0gICAgICAgICAgICAgICAga2V5LCB2YWx1ZSA9IGxpbmVbOmldLCBzdHJpbmcuc3RyaXAobGluZVtpKzE6XSkKLSAgICAgICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgICBzdGF0dXMgPSBzZWxmLl9jbG9zZXBpcGUoZikKLSAgICAgICAgaWYgc3RhdHVzOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihzdGF0dXMpCi0gICAgICAgIHJldHVybiBkaWN0Ci0KLSAgICAjIC0tLSBNZXRob2RzIHRoYXQgY2hhbmdlIGZpbGVzIC0tLQotCi0gICAgZGVmIGxvY2soc2VsZiwgbmFtZV9yZXYpOgotICAgICAgICAiIiJTZXQgYW4gcmNzIGxvY2sgb24gTkFNRV9SRVYuIiIiCi0gICAgICAgIG5hbWUsIHJldiA9IHNlbGYuY2hlY2tmaWxlKG5hbWVfcmV2KQotICAgICAgICBjbWQgPSAicmNzIC1sJXMgJXMiICUgKHJldiwgbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N5c3RlbShjbWQpCi0KLSAgICBkZWYgdW5sb2NrKHNlbGYsIG5hbWVfcmV2KToKLSAgICAgICAgIiIiQ2xlYXIgYW4gcmNzIGxvY2sgb24gTkFNRV9SRVYuIiIiCi0gICAgICAgIG5hbWUsIHJldiA9IHNlbGYuY2hlY2tmaWxlKG5hbWVfcmV2KQotICAgICAgICBjbWQgPSAicmNzIC11JXMgJXMiICUgKHJldiwgbmFtZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N5c3RlbShjbWQpCi0KLSAgICBkZWYgY2hlY2tvdXQoc2VsZiwgbmFtZV9yZXYsIHdpdGhsb2NrPTAsIG90aGVyZmxhZ3M9IiIpOgotICAgICAgICAiIiJDaGVjayBvdXQgTkFNRV9SRVYgdG8gaXRzIHdvcmsgZmlsZS4KLQotICAgICAgICBJZiBvcHRpb25hbCBXSVRITE9DSyBpcyBzZXQsIGNoZWNrIG91dCBsb2NrZWQsIGVsc2UgdW5sb2NrZWQuCi0KLSAgICAgICAgVGhlIG9wdGlvbmFsIE9USEVSRkxBR1MgaXMgcGFzc2VkIHRvIGNvIHdpdGhvdXQKLSAgICAgICAgaW50ZXJwcmV0YXRpb24uCi0KLSAgICAgICAgQW55IG91dHB1dCBmcm9tIGNvIGdvZXMgdG8gZGlyZWN0bHkgdG8gc3Rkb3V0LgotCi0gICAgICAgICIiIgotICAgICAgICBuYW1lLCByZXYgPSBzZWxmLmNoZWNrZmlsZShuYW1lX3JldikKLSAgICAgICAgaWYgd2l0aGxvY2s6IGxvY2tmbGFnID0gIi1sIgotICAgICAgICBlbHNlOiBsb2NrZmxhZyA9ICItdSIKLSAgICAgICAgY21kID0gJ2NvICVzJXMgJXMgJXMnICUgKGxvY2tmbGFnLCByZXYsIG90aGVyZmxhZ3MsIG5hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9zeXN0ZW0oY21kKQotCi0gICAgZGVmIGNoZWNraW4oc2VsZiwgbmFtZV9yZXYsIG1lc3NhZ2U9Tm9uZSwgb3RoZXJmbGFncz0iIik6Ci0gICAgICAgICIiIkNoZWNrIGluIE5BTUVfUkVWIGZyb20gaXRzIHdvcmsgZmlsZS4KLQotICAgICAgICBUaGUgb3B0aW9uYWwgTUVTU0FHRSBhcmd1bWVudCBiZWNvbWVzIHRoZSBjaGVja2luIG1lc3NhZ2UKLSAgICAgICAgKGRlZmF1bHQgIjxub25lPiIgaWYgTm9uZSk7IG9yIHRoZSBmaWxlIGRlc2NyaXB0aW9uIGlmIHRoaXMgaXMKLSAgICAgICAgYSBuZXcgZmlsZS4KLQotICAgICAgICBUaGUgb3B0aW9uYWwgT1RIRVJGTEFHUyBhcmd1bWVudCBpcyBwYXNzZWQgdG8gY2kgd2l0aG91dAotICAgICAgICBpbnRlcnByZXRhdGlvbi4KLQotICAgICAgICBBbnkgb3V0cHV0IGZyb20gY2kgZ29lcyB0byBkaXJlY3RseSB0byBzdGRvdXQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIG5hbWUsIHJldiA9IHNlbGYuX3VubWFuZ2xlKG5hbWVfcmV2KQotICAgICAgICBuZXcgPSBub3Qgc2VsZi5pc3ZhbGlkKG5hbWUpCi0gICAgICAgIGlmIG5vdCBtZXNzYWdlOiBtZXNzYWdlID0gIjxub25lPiIKLSAgICAgICAgaWYgbWVzc2FnZSBhbmQgbWVzc2FnZVstMV0gIT0gJ1xuJzoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgJ1xuJwotICAgICAgICBsb2NrZmxhZyA9ICItdSIKLSAgICAgICAgaWYgbmV3OgotICAgICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCi0gICAgICAgICAgICBmLndyaXRlKG1lc3NhZ2UpCi0gICAgICAgICAgICBmLmZsdXNoKCkKLSAgICAgICAgICAgIGNtZCA9ICdjaSAlcyVzIC10JXMgJXMgJXMnICUgXAotICAgICAgICAgICAgICAgICAgKGxvY2tmbGFnLCByZXYsIGYubmFtZSwgb3RoZXJmbGFncywgbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSByZS5zdWIocicoW1wiJGBdKScsIHInXFxcMScsIG1lc3NhZ2UpCi0gICAgICAgICAgICBjbWQgPSAnY2kgJXMlcyAtbSIlcyIgJXMgJXMnICUgXAotICAgICAgICAgICAgICAgICAgKGxvY2tmbGFnLCByZXYsIG1lc3NhZ2UsIG90aGVyZmxhZ3MsIG5hbWUpCi0gICAgICAgIHJldHVybiBzZWxmLl9zeXN0ZW0oY21kKQotCi0gICAgIyAtLS0gRXhwb3J0ZWQgc3VwcG9ydCBtZXRob2RzIC0tLQotCi0gICAgZGVmIGxpc3RmaWxlcyhzZWxmLCBwYXQgPSBOb25lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBhbGwgdmVyc2lvbiBmaWxlcyBtYXRjaGluZyBvcHRpb25hbCBQQVRURVJOLiIiIgotICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIob3MuY3VyZGlyKQotICAgICAgICBmaWxlcyA9IGxpc3QoZmlsdGVyKHNlbGYuX2lzcmNzLCBmaWxlcykpCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoJ1JDUycpOgotICAgICAgICAgICAgZmlsZXMyID0gb3MubGlzdGRpcignUkNTJykKLSAgICAgICAgICAgIGZpbGVzMiA9IGxpc3QoZmlsdGVyKHNlbGYuX2lzcmNzLCBmaWxlczIpKQotICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIGZpbGVzMgotICAgICAgICBmaWxlcyA9IGxpc3QobWFwKHNlbGYucmVhbG5hbWUsIGZpbGVzKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbHRlcihmaWxlcywgcGF0KQotCi0gICAgZGVmIGlzdmFsaWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIlRlc3Qgd2hldGhlciBOQU1FIGhhcyBhIHZlcnNpb24gZmlsZSBhc3NvY2lhdGVkLiIiIgotICAgICAgICBuYW1ldiA9IHNlbGYucmNzbmFtZShuYW1lKQotICAgICAgICByZXR1cm4gKG9zLnBhdGguaXNmaWxlKG5hbWV2KSBvcgotICAgICAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbignUkNTJywgbmFtZXYpKSkKLQotICAgIGRlZiByY3NuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGhuYW1lIG9mIHRoZSB2ZXJzaW9uIGZpbGUgZm9yIE5BTUUuCi0KLSAgICAgICAgVGhlIGFyZ3VtZW50IGNhbiBiZSBhIHdvcmsgZmlsZSBuYW1lIG9yIGEgdmVyc2lvbiBmaWxlIG5hbWUuCi0gICAgICAgIElmIHRoZSB2ZXJzaW9uIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSBuYW1lIG9mIHRoZSB2ZXJzaW9uCi0gICAgICAgIGZpbGUgdGhhdCB3b3VsZCBiZSBjcmVhdGVkIGJ5ICJjaSIgaXMgcmV0dXJuZWQuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2lzcmNzKG5hbWUpOiBuYW1ldiA9IG5hbWUKLSAgICAgICAgZWxzZTogbmFtZXYgPSBuYW1lICsgJyx2JwotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShuYW1ldik6IHJldHVybiBuYW1ldgotICAgICAgICBuYW1ldiA9IG9zLnBhdGguam9pbignUkNTJywgb3MucGF0aC5iYXNlbmFtZShuYW1ldikpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWV2KTogcmV0dXJuIG5hbWV2Ci0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoJ1JDUycpOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbignUkNTJywgbmFtZXYpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gbmFtZXYKLQotICAgIGRlZiByZWFsbmFtZShzZWxmLCBuYW1ldik6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcGF0aG5hbWUgb2YgdGhlIHdvcmsgZmlsZSBmb3IgTkFNRS4KLQotICAgICAgICBUaGUgYXJndW1lbnQgY2FuIGJlIGEgd29yayBmaWxlIG5hbWUgb3IgYSB2ZXJzaW9uIGZpbGUgbmFtZS4KLSAgICAgICAgSWYgdGhlIHdvcmsgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIG5hbWUgb2YgdGhlIHdvcmsgZmlsZQotICAgICAgICB0aGF0IHdvdWxkIGJlIGNyZWF0ZWQgYnkgImNvIiBpcyByZXR1cm5lZC4KLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VsZi5faXNyY3MobmFtZXYpOiBuYW1lID0gbmFtZXZbOi0yXQotICAgICAgICBlbHNlOiBuYW1lID0gbmFtZXYKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobmFtZSk6IHJldHVybiBuYW1lCi0gICAgICAgIG5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKG5hbWUpCi0gICAgICAgIHJldHVybiBuYW1lCi0KLSAgICBkZWYgaXNsb2NrZWQoc2VsZiwgbmFtZV9yZXYpOgotICAgICAgICAiIiJUZXN0IHdoZXRoZXIgRklMRSAod2hpY2ggbXVzdCBoYXZlIGEgdmVyc2lvbiBmaWxlKSBpcyBsb2NrZWQuCi0KLSAgICAgICAgWFhYIFRoaXMgZG9lcyBub3QgdGVsbCB5b3Ugd2hpY2ggcmV2aXNpb24gbnVtYmVyIGlzIGxvY2tlZCBhbmQKLSAgICAgICAgaWdub3JlcyBhbnkgcmV2aXNpb24geW91IG1heSBwYXNzIGluIChieSB2aXJ0dWUgb2YgdXNpbmcgcmxvZwotICAgICAgICAtTCAtUikuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGYgPSBzZWxmLl9vcGVuKG5hbWVfcmV2LCAncmxvZyAtTCAtUicpCi0gICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgc3RhdHVzID0gc2VsZi5fY2xvc2VwaXBlKGYpCi0gICAgICAgIGlmIHN0YXR1czoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3Ioc3RhdHVzKQotICAgICAgICBpZiBub3QgbGluZTogcmV0dXJuIE5vbmUKLSAgICAgICAgaWYgbGluZVstMV0gPT0gJ1xuJzoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgcmV0dXJuIHNlbGYucmVhbG5hbWUobmFtZV9yZXYpID09IHNlbGYucmVhbG5hbWUobGluZSkKLQotICAgIGRlZiBjaGVja2ZpbGUoc2VsZiwgbmFtZV9yZXYpOgotICAgICAgICAiIiJOb3JtYWxpemUgTkFNRV9SRVYgaW50byBhIChOQU1FLCBSRVYpIHR1cGxlLgotCi0gICAgICAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIHZlcnNpb24gZmlsZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgbmFtZSwgcmV2ID0gc2VsZi5fdW5tYW5nbGUobmFtZV9yZXYpCi0gICAgICAgIGlmIG5vdCBzZWxmLmlzdmFsaWQobmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcignbm90IGFuIHJjcyBmaWxlICVyJyAlIChuYW1lLCkpCi0gICAgICAgIHJldHVybiBuYW1lLCByZXYKLQotICAgICMgLS0tIEludGVybmFsIG1ldGhvZHMgLS0tCi0KLSAgICBkZWYgX29wZW4oc2VsZiwgbmFtZV9yZXYsIGNtZCA9ICdjbyAtcCcsIHJmbGFnID0gJy1yJyk6Ci0gICAgICAgICIiIklOVEVSTkFMOiBvcGVuIGEgcmVhZCBwaXBlIHRvIE5BTUVfUkVWIHVzaW5nIG9wdGlvbmFsIENPTU1BTkQuCi0KLSAgICAgICAgT3B0aW9uYWwgRkxBRyBpcyB1c2VkIHRvIGluZGljYXRlIHRoZSByZXZpc2lvbiAoZGVmYXVsdCAtcikuCi0KLSAgICAgICAgRGVmYXVsdCBDT01NQU5EIGlzICJjbyAtcCIuCi0KLSAgICAgICAgUmV0dXJuIGEgZmlsZSBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZSB0byB0aGUgY29tbWFuZCdzCi0gICAgICAgIG91dHB1dC4KLQotICAgICAgICAiIiIKLSAgICAgICAgbmFtZSwgcmV2ID0gc2VsZi5jaGVja2ZpbGUobmFtZV9yZXYpCi0gICAgICAgIG5hbWV2ID0gc2VsZi5yY3NuYW1lKG5hbWUpCi0gICAgICAgIGlmIHJldjoKLSAgICAgICAgICAgIGNtZCA9IGNtZCArICcgJyArIHJmbGFnICsgcmV2Ci0gICAgICAgIHJldHVybiBvcy5wb3BlbigiJXMgJXIiICUgKGNtZCwgbmFtZXYpKQotCi0gICAgZGVmIF91bm1hbmdsZShzZWxmLCBuYW1lX3Jldik6Ci0gICAgICAgICIiIklOVEVSTkFMOiBOb3JtYWxpemUgTkFNRV9SRVYgYXJndW1lbnQgdG8gKE5BTUUsIFJFVikgdHVwbGUuCi0KLSAgICAgICAgUmFpc2UgYW4gZXhjZXB0aW9uIGlmIE5BTUUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLgotCi0gICAgICAgIEEgTkFNRV9SRVYgYXJndW1lbnQgaXMgZWl0aGVyIE5BTUUgc3RyaW5nIChpbXBseWluZyBSRVY9JycpIG9yCi0gICAgICAgIGEgdHVwbGUgb2YgdGhlIGZvcm0gKE5BTUUsIFJFVikuCi0KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHR5cGUobmFtZV9yZXYpID09IHR5cGUoJycpOgotICAgICAgICAgICAgbmFtZV9yZXYgPSBuYW1lLCByZXYgPSBuYW1lX3JldiwgJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5hbWUsIHJldiA9IG5hbWVfcmV2Ci0gICAgICAgIGZvciBjIGluIHJldjoKLSAgICAgICAgICAgIGlmIGMgbm90IGluIHNlbGYub2tjaGFyczoKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJiYWQgY2hhciBpbiByZXYiKQotICAgICAgICByZXR1cm4gbmFtZV9yZXYKLQotICAgIGRlZiBfY2xvc2VwaXBlKHNlbGYsIGYpOgotICAgICAgICAiIiJJTlRFUk5BTDogQ2xvc2UgUElQRSBhbmQgcHJpbnQgaXRzIGV4aXQgc3RhdHVzIGlmIG5vbnplcm8uIiIiCi0gICAgICAgIHN0cyA9IGYuY2xvc2UoKQotICAgICAgICBpZiBub3Qgc3RzOiByZXR1cm4gTm9uZQotICAgICAgICBkZXRhaWwsIHJlYXNvbiA9IGRpdm1vZChzdHMsIDI1NikKLSAgICAgICAgaWYgcmVhc29uID09IDA6IHJldHVybiAnZXhpdCcsIGRldGFpbCAgICMgRXhpdCBzdGF0dXMKLSAgICAgICAgc2lnbmFsID0gcmVhc29uJjB4N0YKLSAgICAgICAgaWYgc2lnbmFsID09IDB4N0Y6Ci0gICAgICAgICAgICBjb2RlID0gJ3N0b3BwZWQnCi0gICAgICAgICAgICBzaWduYWwgPSBkZXRhaWwKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNvZGUgPSAna2lsbGVkJwotICAgICAgICBpZiByZWFzb24mMHg4MDoKLSAgICAgICAgICAgIGNvZGUgPSBjb2RlICsgJyhjb3JlZHVtcCknCi0gICAgICAgIHJldHVybiBjb2RlLCBzaWduYWwKLQotICAgIGRlZiBfc3lzdGVtKHNlbGYsIGNtZCk6Ci0gICAgICAgICIiIklOVEVSTkFMOiBydW4gQ09NTUFORCBpbiBhIHN1YnNoZWxsLgotCi0gICAgICAgIFN0YW5kYXJkIGlucHV0IGZvciB0aGUgY29tbWFuZCBpcyB0YWtlbiBmcm9tIC9kZXYvbnVsbC4KLQotICAgICAgICBSYWlzZSBJT0Vycm9yIHdoZW4gdGhlIGV4aXQgc3RhdHVzIGlzIG5vdCB6ZXJvLgotCi0gICAgICAgIFJldHVybiB3aGF0ZXZlciB0aGUgY2FsbGluZyBtZXRob2Qgc2hvdWxkIHJldHVybjsgbm9ybWFsbHkKLSAgICAgICAgTm9uZS4KLQotICAgICAgICBBIGRlcml2ZWQgY2xhc3MgbWF5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGFuZCByZWRlZmluZSBpdCB0bwotICAgICAgICBjYXB0dXJlIHN0ZG91dC9zdGRlcnIgb2YgdGhlIGNvbW1hbmQgYW5kIHJldHVybiBpdC4KLQotICAgICAgICAiIiIKLSAgICAgICAgY21kID0gY21kICsgIiA8L2Rldi9udWxsIgotICAgICAgICBzdHMgPSBvcy5zeXN0ZW0oY21kKQotICAgICAgICBpZiBzdHM6IHJhaXNlIElPRXJyb3IoImNvbW1hbmQgZXhpdCBzdGF0dXMgJWQiICUgc3RzKQotCi0gICAgZGVmIF9maWx0ZXIoc2VsZiwgZmlsZXMsIHBhdCA9IE5vbmUpOgotICAgICAgICAiIiJJTlRFUk5BTDogUmV0dXJuIGEgc29ydGVkIGNvcHkgb2YgdGhlIGdpdmVuIGxpc3Qgb2YgRklMRVMuCi0KLSAgICAgICAgSWYgYSBzZWNvbmQgUEFUVEVSTiBhcmd1bWVudCBpcyBnaXZlbiwgb25seSBmaWxlcyBtYXRjaGluZyBpdAotICAgICAgICBhcmUga2VwdC4gIE5vIGNoZWNrIGZvciB2YWxpZCBmaWxlbmFtZXMgaXMgbWFkZS4KLQotICAgICAgICAiIiIKLSAgICAgICAgaWYgcGF0OgotICAgICAgICAgICAgZGVmIGtlZXAobmFtZSwgcGF0ID0gcGF0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gZm5tYXRjaC5mbm1hdGNoKG5hbWUsIHBhdCkKLSAgICAgICAgICAgIGZpbGVzID0gbGlzdChmaWx0ZXIoa2VlcCwgZmlsZXMpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmlsZXMgPSBmaWxlc1s6XQotICAgICAgICBmaWxlcy5zb3J0KCkKLSAgICAgICAgcmV0dXJuIGZpbGVzCi0KLSAgICBkZWYgX3JlbW92ZShzZWxmLCBmbik6Ci0gICAgICAgICIiIklOVEVSTkFMOiByZW1vdmUgRklMRSB3aXRob3V0IGNvbXBsYWludHMuIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLnVubGluayhmbikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9pc3JjcyhzZWxmLCBuYW1lKToKLSAgICAgICAgIiIiSU5URVJOQUw6IFRlc3Qgd2hldGhlciBOQU1FIGVuZHMgaW4gJyx2Jy4iIiIKLSAgICAgICAgcmV0dXJuIG5hbWVbLTI6XSA9PSAnLHYnCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3JjdnMgYi9EZW1vL3BkaXN0L3JjdnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGY4MmEyN2EuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9yY3ZzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotaW1wb3J0IGFkZHBhY2sKLWFkZHBhY2suYWRkcGFjaygnL2hvbWUvZ3VpZG8vc3JjL3B5dGhvbi9EZW1vL3BkaXN0JykKLQotaW1wb3J0IHJjdnMKLQotcmN2cy5tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvcmN2cy5weSBiL0RlbW8vcGRpc3QvcmN2cy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGUyNTMyYS4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L3JjdnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NzYgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0iIiJSZW1vdGUgQ1ZTIC0tIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UiIiIKLQotIyBYWFggVG8gZG86Ci0jCi0jIEJ1Z3M6Ci0jIC0gaWYgdGhlIHJlbW90ZSBmaWxlIGlzIGRlbGV0ZWQsICJyY3ZzIHVwZGF0ZSIgd2lsbCBmYWlsCi0jCi0jIEZ1bmN0aW9uYWxpdHk6Ci0jIC0gY3ZzIHJtCi0jIC0gZGVzY2VuZCBpbnRvIGRpcmVjdG9yaWVzIChhbHJhZWR5IGRvbmUgZm9yIHVwZGF0ZSkKLSMgLSBjb25mbGljdCByZXNvbHV0aW9uCi0jIC0gb3RoZXIgcmVsZXZhbnQgY29tbWFuZHM/Ci0jIC0gYnJhbmNoZXMKLSMKLSMgLSBGaW5lc3NlczoKLSMgLSByZXRhaW4gZmlsZSBtb2RlJ3MgeCBiaXRzCi0jIC0gY29tcGxhaW4gd2hlbiAibm90aGluZyBrbm93biBhYm91dCBmaWxlbmFtZSIKLSMgLSBlZGl0IGxvZyBtZXNzYWdlIHRoZSB3YXkgQ1ZTIGxldHMgeW91IGVkaXQgaXQKLSMgLSBjdnMgZGlmZiAtclJFVkEgLXJSRVZCCi0jIC0gc2VuZCBtYWlsIHRoZSB3YXkgQ1ZTIHNlbmRzIGl0Ci0jCi0jIFBlcmZvcm1hbmNlOgotIyAtIGNhY2hlIHJlbW90ZSBjaGVja3N1bXMgKGZvciBldmVyeSByZXZpc2lvbiBldmVyIHNlZW4hKQotIyAtIHRyYW5zbGF0ZSBzeW1ib2xpYyByZXZpc2lvbnMgdG8gbnVtZXJpYyByZXZpc2lvbnMKLSMKLSMgUmVsaWFiaWxpdHk6Ci0jIC0gcmVtb3RlIGxvY2tpbmcKLSMKLSMgU2VjdXJpdHk6Ci0jIC0gQXV0aGVudGljYXRlZCBSUEM/Ci0KLQotZnJvbSBjdnNsaWIgaW1wb3J0IENWUywgRmlsZQotaW1wb3J0IG1kNQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIGNtZGZ3IGltcG9ydCBDb21tYW5kRnJhbWVXb3JrCi0KLQotREVGX0xPQ0FMID0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCAtbAotCi0KLWNsYXNzIE15RmlsZShGaWxlKToKLQotICAgIGRlZiBhY3Rpb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIGNvZGUgaW5kaWNhdGluZyB0aGUgdXBkYXRlIHN0YXR1cyBvZiB0aGlzIGZpbGUuCi0KLSAgICAgICAgVGhlIHBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlOgotCi0gICAgICAgICc9JyAtLSBldmVyeXRoaW5nJ3MgZmluZQotICAgICAgICAnMCcgLS0gZmlsZSBkb2Vzbid0IGV4aXN0IGFueXdoZXJlCi0gICAgICAgICc/JyAtLSBleGlzdHMgbG9jYWxseSBvbmx5Ci0gICAgICAgICdBJyAtLSBuZXcgbG9jYWxseQotICAgICAgICAnUicgLS0gZGVsZXRlZCBsb2NhbGx5Ci0gICAgICAgICdVJyAtLSBjaGFuZ2VkIHJlbW90ZWx5LCBubyBjaGFuZ2VzIGxvY2FsbHkKLSAgICAgICAgICAgICAgIChpbmNsdWRlcyBuZXcgcmVtb3RlbHkgb3IgZGVsZXRlZCByZW1vdGVseSkKLSAgICAgICAgJ00nIC0tIGNoYW5nZWQgbG9jYWxseSwgbm8gY2hhbmdlcyByZW1vdGVseQotICAgICAgICAnQycgLS0gY29uZmxpY3Q6IGNoYW5nZWQgbG9jYWxseSBhcyB3ZWxsIGFzIHJlbW90ZWx5Ci0gICAgICAgICAgICAgICAoaW5jbHVkZXMgY2FzZXMgd2hlcmUgdGhlIGZpbGUgaGFzIGJlZW4gYWRkZWQKLSAgICAgICAgICAgICAgIG9yIHJlbW92ZWQgbG9jYWxseSBhbmQgcmVtb3RlbHkpCi0gICAgICAgICdEJyAtLSBkZWxldGVkIHJlbW90ZWx5Ci0gICAgICAgICdOJyAtLSBuZXcgcmVtb3RlbHkKLSAgICAgICAgJ3InIC0tIGdldCByaWQgb2YgZW50cnkKLSAgICAgICAgJ2MnIC0tIGNyZWF0ZSBlbnRyeQotICAgICAgICAndScgLS0gdXBkYXRlIGVudHJ5Ci0KLSAgICAgICAgKGFuZCBwcm9iYWJseSBvdGhlcnMgOi0pCi0gICAgICAgICIiIgotICAgICAgICBpZiBub3Qgc2VsZi5sc2VlbjoKLSAgICAgICAgICAgIHNlbGYuZ2V0bG9jYWwoKQotICAgICAgICBpZiBub3Qgc2VsZi5yc2VlbjoKLSAgICAgICAgICAgIHNlbGYuZ2V0cmVtb3RlKCkKLSAgICAgICAgaWYgbm90IHNlbGYuZXNlZW46Ci0gICAgICAgICAgICBpZiBub3Qgc2VsZi5sc3VtOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJzdW06IHJldHVybiAnMCcgIyBOZXZlciBoZWFyZCBvZgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnTicgIyBOZXcgcmVtb3RlbHkKLSAgICAgICAgICAgIGVsc2U6ICMgc2VsZi5sc3VtCi0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucnN1bTogcmV0dXJuICc/JyAjIExvY2FsIG9ubHkKLSAgICAgICAgICAgICAgICAjIExvY2FsIGFuZCByZW1vdGUsIGJ1dCBubyBlbnRyeQotICAgICAgICAgICAgICAgIGlmIHNlbGYubHN1bSA9PSBzZWxmLnJzdW06Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnYycgIyBSZXN0b3JlIGVudHJ5IG9ubHkKLSAgICAgICAgICAgICAgICBlbHNlOiByZXR1cm4gJ0MnICMgUmVhbCBjb25mbGljdAotICAgICAgICBlbHNlOiAjIHNlbGYuZXNlZW4KLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmxzdW06Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5lZGVsZXRlZDoKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yc3VtOiByZXR1cm4gJ1InICMgUmVtb3ZlZAotICAgICAgICAgICAgICAgICAgICBlbHNlOiByZXR1cm4gJ3InICMgR2V0IHJpZCBvZiBlbnRyeQotICAgICAgICAgICAgICAgIGVsc2U6ICMgbm90IHNlbGYuZWRlbGV0ZWQKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5yc3VtOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIndhcm5pbmc6IiwgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHNlbGYuZmlsZSwgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJ3YXMgbG9zdCIpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1UnCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6IHJldHVybiAncicgIyBHZXQgcmlkIG9mIGVudHJ5Ci0gICAgICAgICAgICBlbHNlOiAjIHNlbGYubHN1bQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJzdW06Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZW5ldzogcmV0dXJuICdBJyAjIE5ldyBsb2NhbGx5Ci0gICAgICAgICAgICAgICAgICAgIGVsc2U6IHJldHVybiAnRCcgIyBEZWxldGVkIHJlbW90ZWx5Ci0gICAgICAgICAgICAgICAgZWxzZTogIyBzZWxmLnJzdW0KLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lbmV3OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sc3VtID09IHNlbGYucnN1bToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3UnCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnQycKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sc3VtID09IHNlbGYuZXN1bToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZXN1bSA9PSBzZWxmLnJzdW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc9JwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1UnCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5lc3VtID09IHNlbGYucnN1bToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnTScKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLmxzdW0gPT0gc2VsZi5yc3VtOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1JwotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdDJwotCi0gICAgZGVmIHVwZGF0ZShzZWxmKToKLSAgICAgICAgY29kZSA9IHNlbGYuYWN0aW9uKCkKLSAgICAgICAgaWYgY29kZSA9PSAnPSc6IHJldHVybgotICAgICAgICBwcmludChjb2RlLCBzZWxmLmZpbGUpCi0gICAgICAgIGlmIGNvZGUgaW4gKCdVJywgJ04nKToKLSAgICAgICAgICAgIHNlbGYuZ2V0KCkKLSAgICAgICAgZWxpZiBjb2RlID09ICdDJzoKLSAgICAgICAgICAgIHByaW50KCIlczogY29uZmxpY3QgcmVzb2x1dGlvbiBub3QgeWV0IGltcGxlbWVudGVkIiAlIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZSkKLSAgICAgICAgZWxpZiBjb2RlID09ICdEJzoKLSAgICAgICAgICAgIHJlbW92ZShzZWxmLmZpbGUpCi0gICAgICAgICAgICBzZWxmLmVzZWVuID0gMAotICAgICAgICBlbGlmIGNvZGUgPT0gJ3InOgotICAgICAgICAgICAgc2VsZi5lc2VlbiA9IDAKLSAgICAgICAgZWxpZiBjb2RlIGluICgnYycsICd1Jyk6Ci0gICAgICAgICAgICBzZWxmLmVzZWVuID0gMQotICAgICAgICAgICAgc2VsZi5lcmV2ID0gc2VsZi5ycmV2Ci0gICAgICAgICAgICBzZWxmLmVuZXcgPSAwCi0gICAgICAgICAgICBzZWxmLmVkZWxldGVkID0gMAotICAgICAgICAgICAgc2VsZi5lc3VtID0gc2VsZi5yc3VtCi0gICAgICAgICAgICBzZWxmLmVtdGltZSwgc2VsZi5lY3RpbWUgPSBvcy5zdGF0KHNlbGYuZmlsZSlbLTI6XQotICAgICAgICAgICAgc2VsZi5leHRyYSA9ICcnCi0KLSAgICBkZWYgY29tbWl0KHNlbGYsIG1lc3NhZ2UgPSAiIik6Ci0gICAgICAgIGNvZGUgPSBzZWxmLmFjdGlvbigpCi0gICAgICAgIGlmIGNvZGUgaW4gKCdBJywgJ00nKToKLSAgICAgICAgICAgIHNlbGYucHV0KG1lc3NhZ2UpCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBlbGlmIGNvZGUgPT0gJ1InOgotICAgICAgICAgICAgcHJpbnQoIiVzOiBjb21taXR0aW5nIHJlbW92ZXMgbm90IHlldCBpbXBsZW1lbnRlZCIgJSBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmZpbGUpCi0gICAgICAgIGVsaWYgY29kZSA9PSAnQyc6Ci0gICAgICAgICAgICBwcmludCgiJXM6IGNvbmZsaWN0IHJlc29sdXRpb24gbm90IHlldCBpbXBsZW1lbnRlZCIgJSBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmZpbGUpCi0KLSAgICBkZWYgZGlmZihzZWxmLCBvcHRzID0gW10pOgotICAgICAgICBzZWxmLmFjdGlvbigpICAgICAgICAgICAjIFRvIHVwZGF0ZSBsc2VlbiwgcnNlZW4KLSAgICAgICAgZmxhZ3MgPSAnJwotICAgICAgICByZXYgPSBzZWxmLnJyZXYKLSAgICAgICAgIyBYWFggc2hvdWxkIHN1cHBvcnQgdHdvIHJldiBvcHRpb25zIHRvbyEKLSAgICAgICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgICAgIGlmIG8gPT0gJy1yJzoKLSAgICAgICAgICAgICAgICByZXYgPSBhCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZsYWdzID0gZmxhZ3MgKyAnICcgKyBvICsgYQotICAgICAgICBpZiByZXYgPT0gc2VsZi5ycmV2IGFuZCBzZWxmLmxzdW0gPT0gc2VsZi5yc3VtOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZsYWdzID0gZmxhZ3NbMTpdCi0gICAgICAgIGZuID0gc2VsZi5maWxlCi0gICAgICAgIGRhdGEgPSBzZWxmLnByb3h5LmdldCgoZm4sIHJldikpCi0gICAgICAgIHN1bSA9IG1kNS5uZXcoZGF0YSkuZGlnZXN0KCkKLSAgICAgICAgaWYgc2VsZi5sc3VtID09IHN1bToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpbXBvcnQgdGVtcGZpbGUKLSAgICAgICAgdGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQotICAgICAgICB0Zi53cml0ZShkYXRhKQotICAgICAgICB0Zi5mbHVzaCgpCi0gICAgICAgIHByaW50KCdkaWZmICVzIC1yJXMgJXMnICUgKGZsYWdzLCByZXYsIGZuKSkKLSAgICAgICAgc3RzID0gb3Muc3lzdGVtKCdkaWZmICVzICVzICVzJyAlIChmbGFncywgdGYubmFtZSwgZm4pKQotICAgICAgICBpZiBzdHM6Ci0gICAgICAgICAgICBwcmludCgnPScqNzApCi0KLSAgICBkZWYgY29tbWl0Y2hlY2soc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmFjdGlvbigpICE9ICdDJwotCi0gICAgZGVmIHB1dChzZWxmLCBtZXNzYWdlID0gIiIpOgotICAgICAgICBwcmludCgiQ2hlY2tpbmcgaW4iLCBzZWxmLmZpbGUsICIuLi4iKQotICAgICAgICBkYXRhID0gb3BlbihzZWxmLmZpbGUpLnJlYWQoKQotICAgICAgICBpZiBub3Qgc2VsZi5lbmV3OgotICAgICAgICAgICAgc2VsZi5wcm94eS5sb2NrKHNlbGYuZmlsZSkKLSAgICAgICAgbWVzc2FnZXMgPSBzZWxmLnByb3h5LnB1dChzZWxmLmZpbGUsIGRhdGEsIG1lc3NhZ2UpCi0gICAgICAgIGlmIG1lc3NhZ2VzOgotICAgICAgICAgICAgcHJpbnQobWVzc2FnZXMpCi0gICAgICAgIHNlbGYuc2V0ZW50cnkoc2VsZi5wcm94eS5oZWFkKHNlbGYuZmlsZSksIHNlbGYubHN1bSkKLQotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIGRhdGEgPSBzZWxmLnByb3h5LmdldChzZWxmLmZpbGUpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZSwgJ3cnKQotICAgICAgICBmLndyaXRlKGRhdGEpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLnNldGVudHJ5KHNlbGYucnJldiwgc2VsZi5yc3VtKQotCi0gICAgZGVmIGxvZyhzZWxmLCBvdGhlcmZsYWdzKToKLSAgICAgICAgcHJpbnQoc2VsZi5wcm94eS5sb2coc2VsZi5maWxlLCBvdGhlcmZsYWdzKSkKLQotICAgIGRlZiBhZGQoc2VsZik6Ci0gICAgICAgIHNlbGYuZXNlZW4gPSAwICAgICAgICAgICMgV2hpbGUgd2UncmUgaGFja2luZy4uLgotICAgICAgICBzZWxmLmVzdW0gPSBzZWxmLmxzdW0KLSAgICAgICAgc2VsZi5lbXRpbWUsIHNlbGYuZWN0aW1lID0gMCwgMAotICAgICAgICBzZWxmLmVyZXYgPSAnJwotICAgICAgICBzZWxmLmVuZXcgPSAxCi0gICAgICAgIHNlbGYuZWRlbGV0ZWQgPSAwCi0gICAgICAgIHNlbGYuZXNlZW4gPSAxICAgICAgICAgICMgRG9uZQotICAgICAgICBzZWxmLmV4dHJhID0gJycKLQotICAgIGRlZiBzZXRlbnRyeShzZWxmLCBlcmV2LCBlc3VtKToKLSAgICAgICAgc2VsZi5lc2VlbiA9IDAgICAgICAgICAgIyBXaGlsZSB3ZSdyZSBoYWNraW5nLi4uCi0gICAgICAgIHNlbGYuZXN1bSA9IGVzdW0KLSAgICAgICAgc2VsZi5lbXRpbWUsIHNlbGYuZWN0aW1lID0gb3Muc3RhdChzZWxmLmZpbGUpWy0yOl0KLSAgICAgICAgc2VsZi5lcmV2ID0gZXJldgotICAgICAgICBzZWxmLmVuZXcgPSAwCi0gICAgICAgIHNlbGYuZWRlbGV0ZWQgPSAwCi0gICAgICAgIHNlbGYuZXNlZW4gPSAxICAgICAgICAgICMgRG9uZQotICAgICAgICBzZWxmLmV4dHJhID0gJycKLQotCi1TRU5ETUFJTCA9ICIvdXNyL2xpYi9zZW5kbWFpbCAtdCIKLU1BSUxGT1JNID0gIiIiVG86ICVzCi1TdWJqZWN0OiBDVlMgY2hhbmdlczogJXMKLQotLi4uTWVzc2FnZSBmcm9tIHJjdnMuLi4KLQotQ29tbWl0dGVkIGZpbGVzOgotICAgICAgICAlcwotCi1Mb2cgbWVzc2FnZToKLSAgICAgICAgJXMKLSIiIgotCi0KLWNsYXNzIFJDVlMoQ1ZTKToKLQotICAgIEZpbGVDbGFzcyA9IE15RmlsZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBDVlMuX19pbml0X18oc2VsZikKLQotICAgIGRlZiB1cGRhdGUoc2VsZiwgZmlsZXMpOgotICAgICAgICBmb3IgZSBpbiBzZWxmLndoaWNoZW50cmllcyhmaWxlcywgMSk6Ci0gICAgICAgICAgICBlLnVwZGF0ZSgpCi0KLSAgICBkZWYgY29tbWl0KHNlbGYsIGZpbGVzLCBtZXNzYWdlID0gIiIpOgotICAgICAgICBsaXN0ID0gc2VsZi53aGljaGVudHJpZXMoZmlsZXMpCi0gICAgICAgIGlmIG5vdCBsaXN0OiByZXR1cm4KLSAgICAgICAgb2sgPSAxCi0gICAgICAgIGZvciBlIGluIGxpc3Q6Ci0gICAgICAgICAgICBpZiBub3QgZS5jb21taXRjaGVjaygpOgotICAgICAgICAgICAgICAgIG9rID0gMAotICAgICAgICBpZiBub3Qgb2s6Ci0gICAgICAgICAgICBwcmludCgiY29ycmVjdCBhYm92ZSBlcnJvcnMgZmlyc3QiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBtZXNzYWdlOgotICAgICAgICAgICAgbWVzc2FnZSA9IGlucHV0KCJPbmUtbGluZXI6ICIpCi0gICAgICAgIGNvbW1pdHRlZCA9IFtdCi0gICAgICAgIGZvciBlIGluIGxpc3Q6Ci0gICAgICAgICAgICBpZiBlLmNvbW1pdChtZXNzYWdlKToKLSAgICAgICAgICAgICAgICBjb21taXR0ZWQuYXBwZW5kKGUuZmlsZSkKLSAgICAgICAgc2VsZi5tYWlsaW5mbyhjb21taXR0ZWQsIG1lc3NhZ2UpCi0KLSAgICBkZWYgbWFpbGluZm8oc2VsZiwgZmlsZXMsIG1lc3NhZ2UgPSAiIik6Ci0gICAgICAgIHRvd2hvbSA9ICJzam9lcmRAY3dpLm5sLCBqYWNrQGN3aS5ubCIgIyBYWFgKLSAgICAgICAgbWFpbHRleHQgPSBNQUlMRk9STSAlICh0b3dob20sICcgJy5qb2luKGZpbGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnLmpvaW4oZmlsZXMpLCBtZXNzYWdlKQotICAgICAgICBwcmludCgnLScqNzApCi0gICAgICAgIHByaW50KG1haWx0ZXh0KQotICAgICAgICBwcmludCgnLScqNzApCi0gICAgICAgIG9rID0gaW5wdXQoIk9LIHRvIG1haWwgdG8gJXM/ICIgJSB0b3dob20pCi0gICAgICAgIGlmIG9rLmxvd2VyKCkuc3RyaXAoKSBpbiAoJ3knLCAneWUnLCAneWVzJyk6Ci0gICAgICAgICAgICBwID0gb3MucG9wZW4oU0VORE1BSUwsICJ3IikKLSAgICAgICAgICAgIHAud3JpdGUobWFpbHRleHQpCi0gICAgICAgICAgICBzdHMgPSBwLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIHN0czoKLSAgICAgICAgICAgICAgICBwcmludCgiU2VuZG1haWwgZXhpdCBzdGF0dXMgJXMiICUgc3RyKHN0cykpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCJNYWlsIHNlbnQuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCJObyBtYWlsIHNlbnQuIikKLQotICAgIGRlZiByZXBvcnQoc2VsZiwgZmlsZXMpOgotICAgICAgICBmb3IgZSBpbiBzZWxmLndoaWNoZW50cmllcyhmaWxlcyk6Ci0gICAgICAgICAgICBlLnJlcG9ydCgpCi0KLSAgICBkZWYgZGlmZihzZWxmLCBmaWxlcywgb3B0cyk6Ci0gICAgICAgIGZvciBlIGluIHNlbGYud2hpY2hlbnRyaWVzKGZpbGVzKToKLSAgICAgICAgICAgIGUuZGlmZihvcHRzKQotCi0gICAgZGVmIGFkZChzZWxmLCBmaWxlcyk6Ci0gICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiJ2N2cyBhZGQnIG5lZWRzIGF0IGxlYXN0IG9uZSBmaWxlIikKLSAgICAgICAgbGlzdCA9IFtdCi0gICAgICAgIGZvciBlIGluIHNlbGYud2hpY2hlbnRyaWVzKGZpbGVzLCAxKToKLSAgICAgICAgICAgIGUuYWRkKCkKLQotICAgIGRlZiBybShzZWxmLCBmaWxlcyk6Ci0gICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiJ2N2cyBybScgbmVlZHMgYXQgbGVhc3Qgb25lIGZpbGUiKQotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIidjdnMgcm0nIG5vdCB5ZXQgaW1sZW1lbnRlZCIpCi0KLSAgICBkZWYgbG9nKHNlbGYsIGZpbGVzLCBvcHRzKToKLSAgICAgICAgZmxhZ3MgPSAnJwotICAgICAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyArICcgJyArIG8gKyBhCi0gICAgICAgIGZvciBlIGluIHNlbGYud2hpY2hlbnRyaWVzKGZpbGVzKToKLSAgICAgICAgICAgIGUubG9nKGZsYWdzKQotCi0gICAgZGVmIHdoaWNoZW50cmllcyhzZWxmLCBmaWxlcywgbG9jYWxmaWxlc3RvbyA9IDApOgotICAgICAgICBpZiBmaWxlczoKLSAgICAgICAgICAgIGxpc3QgPSBbXQotICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZSBpbiBzZWxmLmVudHJpZXM6Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBzZWxmLmVudHJpZXNbZmlsZV0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlID0gc2VsZi5GaWxlQ2xhc3MoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5lbnRyaWVzW2ZpbGVdID0gZQotICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXN0ID0gbGlzdChzZWxmLmVudHJpZXMudmFsdWVzKCkpCi0gICAgICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLnByb3h5Lmxpc3RmaWxlcygpOgotICAgICAgICAgICAgICAgIGlmIGZpbGUgaW4gc2VsZi5lbnRyaWVzOgotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGUgPSBzZWxmLkZpbGVDbGFzcyhmaWxlKQotICAgICAgICAgICAgICAgIHNlbGYuZW50cmllc1tmaWxlXSA9IGUKLSAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChlKQotICAgICAgICAgICAgaWYgbG9jYWxmaWxlc3RvbzoKLSAgICAgICAgICAgICAgICBmb3IgZmlsZSBpbiBvcy5saXN0ZGlyKG9zLmN1cmRpcik6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGZpbGUgbm90IGluIHNlbGYuZW50cmllcyBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFuZCBub3Qgc2VsZi5pZ25vcmVkKGZpbGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgZSA9IHNlbGYuRmlsZUNsYXNzKGZpbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVudHJpZXNbZmlsZV0gPSBlCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChlKQotICAgICAgICAgICAgbGlzdC5zb3J0KCkKLSAgICAgICAgaWYgc2VsZi5wcm94eToKLSAgICAgICAgICAgIGZvciBlIGluIGxpc3Q6Ci0gICAgICAgICAgICAgICAgaWYgZS5wcm94eSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBlLnByb3h5ID0gc2VsZi5wcm94eQotICAgICAgICByZXR1cm4gbGlzdAotCi0KLWNsYXNzIHJjdnMoQ29tbWFuZEZyYW1lV29yayk6Ci0KLSAgICBHbG9iYWxGbGFncyA9ICdkOmg6cDpxdkwnCi0gICAgVXNhZ2VNZXNzYWdlID0gXAotInVzYWdlOiByY3ZzIFstZCBkaXJlY3RvcnldIFstaCBob3N0XSBbLXAgcG9ydF0gWy1xXSBbLXZdIFtzdWJjb21tYW5kIGFyZyAuLi5dIgotICAgIFBvc3RVc2FnZU1lc3NhZ2UgPSBcCi0gICAgICAgICAgICAiSWYgbm8gc3ViY29tbWFuZCBpcyBnaXZlbiwgdGhlIHN0YXR1cyBvZiBhbGwgZmlsZXMgaXMgbGlzdGVkIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAiIiJDb25zdHJ1Y3Rvci4iIiIKLSAgICAgICAgQ29tbWFuZEZyYW1lV29yay5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnByb3h5ID0gTm9uZQotICAgICAgICBzZWxmLmN2cyA9IFJDVlMoKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnByb3h5OgotICAgICAgICAgICAgc2VsZi5wcm94eS5fY2xvc2UoKQotICAgICAgICBzZWxmLnByb3h5ID0gTm9uZQotCi0gICAgZGVmIHJlY3Vyc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIob3MuY3VyZGlyKQotICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gb3MuY3VyZGlyIG9yIG5hbWUgPT0gb3MucGFyZGlyOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBuYW1lID09ICJDVlMiOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihuYW1lKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsobmFtZSk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHByaW50KCItLS0gZW50ZXJpbmcgc3ViZGlyZWN0b3J5IiwgbmFtZSwgIi0tLSIpCi0gICAgICAgICAgICBvcy5jaGRpcihuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoIkNWUyIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXygpLnJ1bigpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWN1cnNlKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIob3MucGFyZGlyKQotICAgICAgICAgICAgICAgIHByaW50KCItLS0gbGVmdCBzdWJkaXJlY3RvcnkiLCBuYW1lLCAiLS0tIikKLQotICAgIGRlZiBvcHRpb25zKHNlbGYsIG9wdHMpOgotICAgICAgICBzZWxmLm9wdHMgPSBvcHRzCi0KLSAgICBkZWYgcmVhZHkoc2VsZik6Ci0gICAgICAgIGltcG9ydCByY3NjbGllbnQKLSAgICAgICAgc2VsZi5wcm94eSA9IHJjc2NsaWVudC5vcGVucmNzY2xpZW50KHNlbGYub3B0cykKLSAgICAgICAgc2VsZi5jdnMuc2V0cHJveHkoc2VsZi5wcm94eSkKLSAgICAgICAgc2VsZi5jdnMuZ2V0ZW50cmllcygpCi0KLSAgICBkZWYgZGVmYXVsdChzZWxmKToKLSAgICAgICAgc2VsZi5jdnMucmVwb3J0KFtdKQotCi0gICAgZGVmIGRvX3JlcG9ydChzZWxmLCBvcHRzLCBmaWxlcyk6Ci0gICAgICAgIHNlbGYuY3ZzLnJlcG9ydChmaWxlcykKLQotICAgIGRlZiBkb191cGRhdGUoc2VsZiwgb3B0cywgZmlsZXMpOgotICAgICAgICAiIiJ1cGRhdGUgWy1sXSBbLVJdIFtmaWxlXSAuLi4iIiIKLSAgICAgICAgbG9jYWwgPSBERUZfTE9DQUwKLSAgICAgICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgICAgIGlmIG8gPT0gJy1sJzogbG9jYWwgPSAxCi0gICAgICAgICAgICBpZiBvID09ICctUic6IGxvY2FsID0gMAotICAgICAgICBzZWxmLmN2cy51cGRhdGUoZmlsZXMpCi0gICAgICAgIHNlbGYuY3ZzLnB1dGVudHJpZXMoKQotICAgICAgICBpZiBub3QgbG9jYWwgYW5kIG5vdCBmaWxlczoKLSAgICAgICAgICAgIHNlbGYucmVjdXJzZSgpCi0gICAgZmxhZ3NfdXBkYXRlID0gJy1sUicKLSAgICBkb191cCA9IGRvX3VwZGF0ZQotICAgIGZsYWdzX3VwID0gZmxhZ3NfdXBkYXRlCi0KLSAgICBkZWYgZG9fY29tbWl0KHNlbGYsIG9wdHMsIGZpbGVzKToKLSAgICAgICAgIiIiY29tbWl0IFstbSBtZXNzYWdlXSBbZmlsZV0gLi4uIiIiCi0gICAgICAgIG1lc3NhZ2UgPSAiIgotICAgICAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICAgICAgaWYgbyA9PSAnLW0nOiBtZXNzYWdlID0gYQotICAgICAgICBzZWxmLmN2cy5jb21taXQoZmlsZXMsIG1lc3NhZ2UpCi0gICAgICAgIHNlbGYuY3ZzLnB1dGVudHJpZXMoKQotICAgIGZsYWdzX2NvbW1pdCA9ICdtOicKLSAgICBkb19jb20gPSBkb19jb21taXQKLSAgICBmbGFnc19jb20gPSBmbGFnc19jb21taXQKLQotICAgIGRlZiBkb19kaWZmKHNlbGYsIG9wdHMsIGZpbGVzKToKLSAgICAgICAgIiIiZGlmZiBbZGlmZmxhZ3NdIFtmaWxlXSAuLi4iIiIKLSAgICAgICAgc2VsZi5jdnMuZGlmZihmaWxlcywgb3B0cykKLSAgICBmbGFnc19kaWZmID0gJ2NiaXR3Y2VmaG5scjpzRDpTOicKLSAgICBkb19kaWYgPSBkb19kaWZmCi0gICAgZmxhZ3NfZGlmID0gZmxhZ3NfZGlmZgotCi0gICAgZGVmIGRvX2FkZChzZWxmLCBvcHRzLCBmaWxlcyk6Ci0gICAgICAgICIiImFkZCBmaWxlIC4uLiIiIgotICAgICAgICBpZiBub3QgZmlsZXM6Ci0gICAgICAgICAgICBwcmludCgiJ3JjdnMgYWRkJyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZmlsZSIpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5jdnMuYWRkKGZpbGVzKQotICAgICAgICBzZWxmLmN2cy5wdXRlbnRyaWVzKCkKLQotICAgIGRlZiBkb19yZW1vdmUoc2VsZiwgb3B0cywgZmlsZXMpOgotICAgICAgICAiIiJyZW1vdmUgZmlsZSAuLi4iIiIKLSAgICAgICAgaWYgbm90IGZpbGVzOgotICAgICAgICAgICAgcHJpbnQoIidyY3ZzIHJlbW92ZScgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGZpbGUiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuY3ZzLnJlbW92ZShmaWxlcykKLSAgICAgICAgc2VsZi5jdnMucHV0ZW50cmllcygpCi0gICAgZG9fcm0gPSBkb19yZW1vdmUKLQotICAgIGRlZiBkb19sb2coc2VsZiwgb3B0cywgZmlsZXMpOgotICAgICAgICAiIiJsb2cgW3Jsb2ctb3B0aW9uc10gW2ZpbGVdIC4uLiIiIgotICAgICAgICBzZWxmLmN2cy5sb2coZmlsZXMsIG9wdHMpCi0gICAgZmxhZ3NfbG9nID0gJ2JoTE5SdGQ6czpWOnI6JwotCi0KLWRlZiByZW1vdmUoZm4pOgotICAgIHRyeToKLSAgICAgICAgb3MudW5saW5rKGZuKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcGFzcwotCi0KLWRlZiBtYWluKCk6Ci0gICAgciA9IHJjdnMoKQotICAgIHRyeToKLSAgICAgICAgci5ydW4oKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHIuY2xvc2UoKQotCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3JyY3MgYi9EZW1vL3BkaXN0L3JyY3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDMxZmMyYzUuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9ycmNzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotaW1wb3J0IGFkZHBhY2sKLWFkZHBhY2suYWRkcGFjaygnL2hvbWUvZ3VpZG8vc3JjL3B5dGhvbi9EZW1vL3BkaXN0JykKLQotaW1wb3J0IHJyY3MKLQotcnJjcy5tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vcGRpc3QvcnJjcy5weSBiL0RlbW8vcGRpc3QvcnJjcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjQ3ZWNjNS4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L3JyY3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0iUmVtb3RlIFJDUyAtLSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWltcG9ydCBnZXRvcHQKLWltcG9ydCBzdHJpbmcKLWltcG9ydCBtZDUKLWltcG9ydCB0ZW1wZmlsZQotZnJvbSByY3NjbGllbnQgaW1wb3J0IG9wZW5yY3NjbGllbnQKLQotZGVmIG1haW4oKToKLSAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgb3B0cywgcmVzdCA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaDpwOmQ6cXZMJykKLSAgICAgICAgaWYgbm90IHJlc3Q6Ci0gICAgICAgICAgICBjbWQgPSAnaGVhZCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNtZCwgcmVzdCA9IHJlc3RbMF0sIHJlc3RbMTpdCi0gICAgICAgIGlmIGNtZCBub3QgaW4gY29tbWFuZHM6Ci0gICAgICAgICAgICByYWlzZSBnZXRvcHQuZXJyb3IoInVua25vd24gY29tbWFuZCIpCi0gICAgICAgIGNvcHRzZXQsIGZ1bmMgPSBjb21tYW5kc1tjbWRdCi0gICAgICAgIGNvcHRzLCBmaWxlcyA9IGdldG9wdC5nZXRvcHQocmVzdCwgY29wdHNldCkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludCgidXNhZ2U6IHJyY3MgW29wdGlvbnNdIGNvbW1hbmQgW29wdGlvbnNdIFtmaWxlXSAuLi4iKQotICAgICAgICBwcmludCgid2hlcmUgY29tbWFuZCBjYW4gYmU6IikKLSAgICAgICAgcHJpbnQoIiAgICAgIGNpfHB1dCAgICAgICMgY2hlY2tpbiB0aGUgZ2l2ZW4gZmlsZXMiKQotICAgICAgICBwcmludCgiICAgICAgY298Z2V0ICAgICAgIyBjaGVja291dCIpCi0gICAgICAgIHByaW50KCIgICAgICBpbmZvICAgICAgICAjIHByaW50IGhlYWRlciBpbmZvIikKLSAgICAgICAgcHJpbnQoIiAgICAgIGhlYWQgICAgICAgICMgcHJpbnQgcmV2aXNpb24gb2YgaGVhZCBicmFuY2giKQotICAgICAgICBwcmludCgiICAgICAgbGlzdCAgICAgICAgIyBsaXN0IGZpbGVuYW1lIGlmIHZhbGlkIikKLSAgICAgICAgcHJpbnQoIiAgICAgIGxvZyAgICAgICAgICMgcHJpbnQgZnVsbCBsb2ciKQotICAgICAgICBwcmludCgiICAgICAgZGlmZiAgICAgICAgIyBkaWZmIHJjcyBmaWxlIGFuZCB3b3JrIGZpbGUiKQotICAgICAgICBwcmludCgiaWYgbm8gZmlsZXMgYXJlIGdpdmVuLCBhbGwgcmVtb3RlIHJjcyBmaWxlcyBhcmUgYXNzdW1lZCIpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgeCA9IG9wZW5yY3NjbGllbnQob3B0cykKLSAgICBpZiBub3QgZmlsZXM6Ci0gICAgICAgIGZpbGVzID0geC5saXN0ZmlsZXMoKQotICAgIGZvciBmbiBpbiBmaWxlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYyh4LCBjb3B0cywgZm4pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgb3MuZXJyb3IpIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KCIlczogJXMiICUgKGZuLCBtc2cpKQotCi1kZWYgY2hlY2tpbih4LCBjb3B0cywgZm4pOgotICAgIGYgPSBvcGVuKGZuKQotICAgIGRhdGEgPSBmLnJlYWQoKQotICAgIGYuY2xvc2UoKQotICAgIG5ldyA9IG5vdCB4LmlzdmFsaWQoZm4pCi0gICAgaWYgbm90IG5ldyBhbmQgc2FtZSh4LCBjb3B0cywgZm4sIGRhdGEpOgotICAgICAgICBwcmludCgiJXM6IHVuY2hhbmdlZCBzaW5jZSBsYXN0IGNoZWNraW4iICUgZm4pCi0gICAgICAgIHJldHVybgotICAgIHByaW50KCJDaGVja2luZyBpbiIsIGZuLCAiLi4uIikKLSAgICBtZXNzYWdlID0gYXNrbG9nbWVzc2FnZShuZXcpCi0gICAgbWVzc2FnZXMgPSB4LnB1dChmbiwgZGF0YSwgbWVzc2FnZSkKLSAgICBpZiBtZXNzYWdlczoKLSAgICAgICAgcHJpbnQobWVzc2FnZXMpCi0KLWRlZiBjaGVja291dCh4LCBjb3B0cywgZm4pOgotICAgIGRhdGEgPSB4LmdldChmbikKLSAgICBmID0gb3BlbihmbiwgJ3cnKQotICAgIGYud3JpdGUoZGF0YSkKLSAgICBmLmNsb3NlKCkKLQotZGVmIGxvY2soeCwgY29wdHMsIGZuKToKLSAgICB4LmxvY2soZm4pCi0KLWRlZiB1bmxvY2soeCwgY29wdHMsIGZuKToKLSAgICB4LnVubG9jayhmbikKLQotZGVmIGluZm8oeCwgY29wdHMsIGZuKToKLSAgICBpbmZvX2RpY3QgPSB4LmluZm8oZm4pCi0gICAgZm9yIGtleSBpbiBzb3J0ZWQoaW5mb19kaWN0LmtleXMoKSk6Ci0gICAgICAgIHByaW50KGtleSArICc6JywgaW5mb19kaWN0W2tleV0pCi0gICAgcHJpbnQoJz0nKjcwKQotCi1kZWYgaGVhZCh4LCBjb3B0cywgZm4pOgotICAgIGhlYWQgPSB4LmhlYWQoZm4pCi0gICAgcHJpbnQoZm4sIGhlYWQpCi0KLWRlZiBsaXN0KHgsIGNvcHRzLCBmbik6Ci0gICAgaWYgeC5pc3ZhbGlkKGZuKToKLSAgICAgICAgcHJpbnQoZm4pCi0KLWRlZiBsb2coeCwgY29wdHMsIGZuKToKLSAgICBmbGFncyA9ICcnCi0gICAgZm9yIG8sIGEgaW4gY29wdHM6Ci0gICAgICAgIGZsYWdzID0gZmxhZ3MgKyAnICcgKyBvICsgYQotICAgIGZsYWdzID0gZmxhZ3NbMTpdCi0gICAgbWVzc2FnZXMgPSB4LmxvZyhmbiwgZmxhZ3MpCi0gICAgcHJpbnQobWVzc2FnZXMpCi0KLWRlZiBkaWZmKHgsIGNvcHRzLCBmbik6Ci0gICAgaWYgc2FtZSh4LCBjb3B0cywgZm4pOgotICAgICAgICByZXR1cm4KLSAgICBmbGFncyA9ICcnCi0gICAgZm9yIG8sIGEgaW4gY29wdHM6Ci0gICAgICAgIGZsYWdzID0gZmxhZ3MgKyAnICcgKyBvICsgYQotICAgIGZsYWdzID0gZmxhZ3NbMTpdCi0gICAgZGF0YSA9IHguZ2V0KGZuKQotICAgIHRmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgICB0Zi53cml0ZShkYXRhKQotICAgIHRmLmZsdXNoKCkKLSAgICBwcmludCgnZGlmZiAlcyAtciVzICVzJyAlIChmbGFncywgeC5oZWFkKGZuKSwgZm4pKQotICAgIHN0cyA9IG9zLnN5c3RlbSgnZGlmZiAlcyAlcyAlcycgJSAoZmxhZ3MsIHRmLm5hbWUsIGZuKSkKLSAgICBpZiBzdHM6Ci0gICAgICAgIHByaW50KCc9Jyo3MCkKLQotZGVmIHNhbWUoeCwgY29wdHMsIGZuLCBkYXRhID0gTm9uZSk6Ci0gICAgaWYgZGF0YSBpcyBOb25lOgotICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQotICAgIGxzdW0gPSBtZDUubmV3KGRhdGEpLmRpZ2VzdCgpCi0gICAgcnN1bSA9IHguc3VtKGZuKQotICAgIHJldHVybiBsc3VtID09IHJzdW0KLQotZGVmIGFza2xvZ21lc3NhZ2UobmV3KToKLSAgICBpZiBuZXc6Ci0gICAgICAgIHByaW50KCJlbnRlciBkZXNjcmlwdGlvbiwiLCBlbmQ9JyAnKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJlbnRlciBsb2cgbWVzc2FnZSwiLCBlbmQ9JyAnKQotICAgIHByaW50KCJ0ZXJtaW5hdGUgd2l0aCBzaW5nbGUgJy4nIG9yIGVuZCBvZiBmaWxlOiIpCi0gICAgaWYgbmV3OgotICAgICAgICBwcmludCgiTk9URTogVGhpcyBpcyBOT1QgdGhlIGxvZyBtZXNzYWdlISIpCi0gICAgbWVzc2FnZSA9ICIiCi0gICAgd2hpbGUgMToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiPj4gIikKLSAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lID09ICcuXG4nOiBicmVhawotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIGxpbmUKLSAgICByZXR1cm4gbWVzc2FnZQotCi1kZWYgcmVtb3ZlKGZuKToKLSAgICB0cnk6Ci0gICAgICAgIG9zLnVubGluayhmbikKLSAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgIHBhc3MKLQotY29tbWFuZHMgPSB7Ci0gICAgICAgICdjaSc6ICgnJywgY2hlY2tpbiksCi0gICAgICAgICdwdXQnOiAoJycsIGNoZWNraW4pLAotICAgICAgICAnY28nOiAoJycsIGNoZWNrb3V0KSwKLSAgICAgICAgJ2dldCc6ICgnJywgY2hlY2tvdXQpLAotICAgICAgICAnaW5mbyc6ICgnJywgaW5mbyksCi0gICAgICAgICdoZWFkJzogKCcnLCBoZWFkKSwKLSAgICAgICAgJ2xpc3QnOiAoJycsIGxpc3QpLAotICAgICAgICAnbG9jayc6ICgnJywgbG9jayksCi0gICAgICAgICd1bmxvY2snOiAoJycsIHVubG9jayksCi0gICAgICAgICdsb2cnOiAoJ2JoTFJ0ZDpsOnI6czp3OlY6JywgbG9nKSwKLSAgICAgICAgJ2RpZmYnOiAoJ2MnLCBkaWZmKSwKLSAgICAgICAgfQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9zZWN1cml0eS5weSBiL0RlbW8vcGRpc3Qvc2VjdXJpdHkucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGZmZGJlMmQuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9zZWN1cml0eS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLWNsYXNzIFNlY3VyaXR5OgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgZW52ID0gb3MuZW52aXJvbgotICAgICAgICBpZiAnUFlUSE9OX0tFWUZJTEUnIGluIGVudjoKLSAgICAgICAgICAgIGtleWZpbGUgPSBlbnZbJ1BZVEhPTl9LRVlGSUxFJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGtleWZpbGUgPSAnLnB5dGhvbl9rZXlmaWxlJwotICAgICAgICAgICAgaWYgJ0hPTUUnIGluIGVudjoKLSAgICAgICAgICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGVudlsnSE9NRSddLCBrZXlmaWxlKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGtleWZpbGUpOgotICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgICAgICAgICBmb3IgZGlyIGluIHN5cy5wYXRoOgotICAgICAgICAgICAgICAgICAgICBrZiA9IG9zLnBhdGguam9pbihkaXIsIGtleWZpbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGtmKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGUgPSBrZgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fa2V5ID0gZXZhbChvcGVuKGtleWZpbGUpLnJlYWRsaW5lKCkpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigicHl0aG9uIGtleWZpbGUgJXM6IGNhbm5vdCBvcGVuIiAlIGtleWZpbGUpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2NoYWxsZW5nZShzZWxmKToKLSAgICAgICAgaW1wb3J0IHJhbmRvbQotICAgICAgICByZXR1cm4gcmFuZG9tLnJhbmRpbnQoMTAwLCAxMDAwMDApCi0KLSAgICBkZWYgX2NvbXBhcmVfY2hhbGxlbmdlX3Jlc3BvbnNlKHNlbGYsIGNoYWxsZW5nZSwgcmVzcG9uc2UpOgotICAgICAgICByZXR1cm4gc2VsZi5fZW5jb2RlX2NoYWxsZW5nZShjaGFsbGVuZ2UpID09IHJlc3BvbnNlCi0KLSAgICBkZWYgX2VuY29kZV9jaGFsbGVuZ2Uoc2VsZiwgY2hhbGxlbmdlKToKLSAgICAgICAgcCwgbSA9IHNlbGYuX2tleQotICAgICAgICByZXR1cm4gcG93KGludChjaGFsbGVuZ2UpLCBwLCBtKQpkaWZmIC0tZ2l0IGEvRGVtby9wZGlzdC9zZXJ2ZXIucHkgYi9EZW1vL3BkaXN0L3NlcnZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYjM5NDNmZi4uMDAwMDAwMAotLS0gYS9EZW1vL3BkaXN0L3NlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0iIiJSUEMgU2VydmVyIG1vZHVsZS4iIiIKLQotaW1wb3J0IHN5cwotaW1wb3J0IHNvY2tldAotaW1wb3J0IHBpY2tsZQotZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCi1mcm9tIHJlcHJsaWIgaW1wb3J0IHJlcHIKLQotCi0jIERlZmF1bHQgdmVyYm9zaXR5ICgwID0gc2lsZW50LCAxID0gcHJpbnQgY29ubmVjdGlvbnMsIDIgPSBwcmludCByZXF1ZXN0cyB0b28pCi1WRVJCT1NFID0gMQotCi0KLWNsYXNzIFNlcnZlcjoKLQotICAgICIiIlJQQyBTZXJ2ZXIgY2xhc3MuICBEZXJpdmUgYSBjbGFzcyB0byBpbXBsZW1lbnQgYSBwYXJ0aWN1bGFyIHNlcnZpY2UuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcywgdmVyYm9zZSA9IFZFUkJPU0UpOgotICAgICAgICBpZiB0eXBlKGFkZHJlc3MpID09IHR5cGUoMCk6Ci0gICAgICAgICAgICBhZGRyZXNzID0gKCcnLCBhZGRyZXNzKQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gYWRkcmVzcwotICAgICAgICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQotICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCi0gICAgICAgIHNlbGYuX3NvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5fc29ja2V0LmJpbmQoYWRkcmVzcykKLSAgICAgICAgc2VsZi5fc29ja2V0Lmxpc3RlbigxKQotICAgICAgICBzZWxmLl9saXN0ZW5pbmcgPSAxCi0KLSAgICBkZWYgX3NldHZlcmJvc2Uoc2VsZiwgdmVyYm9zZSk6Ci0gICAgICAgIHNlbGYuX3ZlcmJvc2UgPSB2ZXJib3NlCi0KLSAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fY2xvc2UoKQotCi0gICAgZGVmIF9jbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fbGlzdGVuaW5nID0gMAotICAgICAgICBpZiBzZWxmLl9zb2NrZXQ6Ci0gICAgICAgICAgICBzZWxmLl9zb2NrZXQuY2xvc2UoKQotICAgICAgICBzZWxmLl9zb2NrZXQgPSBOb25lCi0KLSAgICBkZWYgX3NlcnZlcmxvb3Aoc2VsZik6Ci0gICAgICAgIHdoaWxlIHNlbGYuX2xpc3RlbmluZzoKLSAgICAgICAgICAgIHNlbGYuX3NlcnZlKCkKLQotICAgIGRlZiBfc2VydmUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX3ZlcmJvc2U6IHByaW50KCJXYWl0IGZvciBjb25uZWN0aW9uIC4uLiIpCi0gICAgICAgIGNvbm4sIGFkZHJlc3MgPSBzZWxmLl9zb2NrZXQuYWNjZXB0KCkKLSAgICAgICAgaWYgc2VsZi5fdmVyYm9zZTogcHJpbnQoIkFjY2VwdGVkIGNvbm5lY3Rpb24gZnJvbSAlcyIgJSByZXByKGFkZHJlc3MpKQotICAgICAgICBpZiBub3Qgc2VsZi5fdmVyaWZ5KGNvbm4sIGFkZHJlc3MpOgotICAgICAgICAgICAgcHJpbnQoIioqKiBDb25uZWN0aW9uIGZyb20gJXMgcmVmdXNlZCIgJSByZXByKGFkZHJlc3MpKQotICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcmYgPSBjb25uLm1ha2VmaWxlKCdyJykKLSAgICAgICAgd2YgPSBjb25uLm1ha2VmaWxlKCd3JykKLSAgICAgICAgb2sgPSAxCi0gICAgICAgIHdoaWxlIG9rOgotICAgICAgICAgICAgd2YuZmx1c2goKQotICAgICAgICAgICAgaWYgc2VsZi5fdmVyYm9zZSA+IDE6IHByaW50KCJXYWl0IGZvciBuZXh0IHJlcXVlc3QgLi4uIikKLSAgICAgICAgICAgIG9rID0gc2VsZi5fZG9yZXF1ZXN0KHJmLCB3ZikKLQotICAgIF92YWxpZCA9IFsnMTkyLjE2LjIwMS4qJywgJzE5Mi4xNi4xOTcuKicsICcxMzIuMTUxLjEuKicsICcxMjkuNi42NC4qJ10KLQotICAgIGRlZiBfdmVyaWZ5KHNlbGYsIGNvbm4sIGFkZHJlc3MpOgotICAgICAgICBob3N0LCBwb3J0ID0gYWRkcmVzcwotICAgICAgICBmb3IgcGF0IGluIHNlbGYuX3ZhbGlkOgotICAgICAgICAgICAgaWYgZm5tYXRjaChob3N0LCBwYXQpOiByZXR1cm4gMQotICAgICAgICByZXR1cm4gMAotCi0gICAgZGVmIF9kb3JlcXVlc3Qoc2VsZiwgcmYsIHdmKToKLSAgICAgICAgcnAgPSBwaWNrbGUuVW5waWNrbGVyKHJmKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXF1ZXN0ID0gcnAubG9hZCgpCi0gICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIHNlbGYuX3ZlcmJvc2UgPiAxOiBwcmludCgiR290IHJlcXVlc3Q6ICVzIiAlIHJlcHIocmVxdWVzdCkpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1ldGhvZG5hbWUsIGFyZ3MsIGlkID0gcmVxdWVzdAotICAgICAgICAgICAgaWYgJy4nIGluIG1ldGhvZG5hbWU6Ci0gICAgICAgICAgICAgICAgcmVwbHkgPSAoTm9uZSwgc2VsZi5fc3BlY2lhbChtZXRob2RuYW1lLCBhcmdzKSwgaWQpCi0gICAgICAgICAgICBlbGlmIG1ldGhvZG5hbWVbMF0gPT0gJ18nOgotICAgICAgICAgICAgICAgIHJhaXNlIE5hbWVFcnJvcigiaWxsZWdhbCBtZXRob2QgbmFtZSAlcyIgJSByZXByKG1ldGhvZG5hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZG5hbWUpCi0gICAgICAgICAgICAgICAgcmVwbHkgPSAoTm9uZSwgbWV0aG9kKCphcmdzKSwgaWQpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJlcGx5ID0gKHN5cy5leGNfaW5mbygpWzoyXSwgaWQpCi0gICAgICAgIGlmIGlkIDwgMCBhbmQgcmVwbHlbOjJdID09IChOb25lLCBOb25lKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2UgPiAxOiBwcmludCgiU3VwcHJlc3MgcmVwbHkiKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgc2VsZi5fdmVyYm9zZSA+IDE6IHByaW50KCJTZW5kIHJlcGx5OiAlcyIgJSByZXByKHJlcGx5KSkKLSAgICAgICAgd3AgPSBwaWNrbGUuUGlja2xlcih3ZikKLSAgICAgICAgd3AuZHVtcChyZXBseSkKLSAgICAgICAgcmV0dXJuIDEKLQotICAgIGRlZiBfc3BlY2lhbChzZWxmLCBtZXRob2RuYW1lLCBhcmdzKToKLSAgICAgICAgaWYgbWV0aG9kbmFtZSA9PSAnLm1ldGhvZHMnOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19tZXRob2RzJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fbWV0aG9kcyA9IHR1cGxlKHNlbGYuX2xpc3RtZXRob2RzKCkpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5fbWV0aG9kcwotICAgICAgICByYWlzZSBOYW1lRXJyb3IoInVucmVjb2duaXplZCBzcGVjaWFsIG1ldGhvZCBuYW1lICVzIiAlIHJlcHIobWV0aG9kbmFtZSkpCi0KLSAgICBkZWYgX2xpc3RtZXRob2RzKHNlbGYsIGNsPU5vbmUpOgotICAgICAgICBpZiBub3QgY2w6IGNsID0gc2VsZi5fX2NsYXNzX18KLSAgICAgICAgbmFtZXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gY2wuX19kaWN0X18ua2V5cygpIGlmIHhbMF0gIT0gJ18nXSkKLSAgICAgICAgZm9yIGJhc2UgaW4gY2wuX19iYXNlc19fOgotICAgICAgICAgICAgYmFzZW5hbWVzID0gc2VsZi5fbGlzdG1ldGhvZHMoYmFzZSkKLSAgICAgICAgICAgIGJhc2VuYW1lcyA9IGxpc3QoZmlsdGVyKGxhbWJkYSB4LCBuYW1lcz1uYW1lczogeCBub3QgaW4gbmFtZXMsIGJhc2VuYW1lcykpCi0gICAgICAgICAgICBuYW1lc1tsZW4obmFtZXMpOl0gPSBiYXNlbmFtZXMKLSAgICAgICAgcmV0dXJuIG5hbWVzCi0KLQotZnJvbSBzZWN1cml0eSBpbXBvcnQgU2VjdXJpdHkKLQotCi1jbGFzcyBTZWN1cmVTZXJ2ZXIoU2VydmVyLCBTZWN1cml0eSk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBTZXJ2ZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIFNlY3VyaXR5Ll9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgX3ZlcmlmeShzZWxmLCBjb25uLCBhZGRyZXNzKToKLSAgICAgICAgaW1wb3J0IHN0cmluZwotICAgICAgICBjaGFsbGVuZ2UgPSBzZWxmLl9nZW5lcmF0ZV9jaGFsbGVuZ2UoKQotICAgICAgICBjb25uLnNlbmQoIiVkXG4iICUgY2hhbGxlbmdlKQotICAgICAgICByZXNwb25zZSA9ICIiCi0gICAgICAgIHdoaWxlICJcbiIgbm90IGluIHJlc3BvbnNlIGFuZCBsZW4ocmVzcG9uc2UpIDwgMTAwOgotICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdigxMDApCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVzcG9uc2UgPSByZXNwb25zZSArIGRhdGEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzcG9uc2UgPSBzdHJpbmcuYXRvbChzdHJpbmcuc3RyaXAocmVzcG9uc2UpKQotICAgICAgICBleGNlcHQgc3RyaW5nLmF0b2xfZXJyb3I6Ci0gICAgICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMDoKLSAgICAgICAgICAgICAgICBwcmludCgiSW52YWxpZCByZXNwb25zZSBzeW50YXgiLCByZXByKHJlc3BvbnNlKSkKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGlmIG5vdCBzZWxmLl9jb21wYXJlX2NoYWxsZW5nZV9yZXNwb25zZShjaGFsbGVuZ2UsIHJlc3BvbnNlKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2UgPiAwOgotICAgICAgICAgICAgICAgIHByaW50KCJJbnZhbGlkIHJlc3BvbnNlIHZhbHVlIiwgcmVwcihyZXNwb25zZSkpCi0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxmLl92ZXJib3NlID4gMToKLSAgICAgICAgICAgIHByaW50KCJSZXNwb25zZSBtYXRjaGVzIGNoYWxsZW5nZS4gIEdvIGFoZWFkISIpCi0gICAgICAgIHJldHVybiAxCmRpZmYgLS1naXQgYS9EZW1vL3BkaXN0L3N1bXRyZWUucHkgYi9EZW1vL3BkaXN0L3N1bXRyZWUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkyZTc3NzEuLjAwMDAwMDAKLS0tIGEvRGVtby9wZGlzdC9zdW10cmVlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotaW1wb3J0IHRpbWUKLWltcG9ydCBzeXMKLWltcG9ydCBGU1Byb3h5Ci0KLWRlZiBtYWluKCk6Ci0gICAgdDEgPSB0aW1lLnRpbWUoKQotICAgICNwcm94eSA9IEZTUHJveHkuRlNQcm94eUNsaWVudCgoJ3Zvb3JuLmN3aS5ubCcsIDQxMjcpKQotICAgIHByb3h5ID0gRlNQcm94eS5GU1Byb3h5TG9jYWwoKQotICAgIHN1bXRyZWUocHJveHkpCi0gICAgcHJveHkuX2Nsb3NlKCkKLSAgICB0MiA9IHRpbWUudGltZSgpCi0gICAgcHJpbnQodDItdDEsICJzZWNvbmRzIikKLSAgICBzeXMuc3Rkb3V0LndyaXRlKCJbUmV0dXJuIHRvIGV4aXRdICIpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgc3lzLnN0ZGluLnJlYWRsaW5lKCkKLQotZGVmIHN1bXRyZWUocHJveHkpOgotICAgIHByaW50KCJQV0QgPSIsIHByb3h5LnB3ZCgpKQotICAgIGZpbGVzID0gcHJveHkubGlzdGZpbGVzKCkKLSAgICBwcm94eS5pbmZvbGlzdChmaWxlcykKLSAgICBzdWJkaXJzID0gcHJveHkubGlzdHN1YmRpcnMoKQotICAgIGZvciBuYW1lIGluIHN1YmRpcnM6Ci0gICAgICAgIHByb3h5LmNkKG5hbWUpCi0gICAgICAgIHN1bXRyZWUocHJveHkpCi0gICAgICAgIHByb3h5LmJhY2soKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vcHlzdnIvTWFrZWZpbGUgYi9EZW1vL3B5c3ZyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGI5ZjNlLi4wMDAwMDAwCi0tLSBhL0RlbW8vcHlzdnIvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0jIE1ha2VmaWxlIGZvciAncHlzdnInIGFwcGxpY2F0aW9uIGVtYmVkZGluZyBQeXRob24uCi0jIFRhaWxvcmVkIGZvciBQeXRob24gMS41YTMgb3IgbGF0ZXIuCi0jIFNvbWUgZGV0YWlscyBhcmUgc3BlY2lmaWMgZm9yIFNvbGFyaXMgb3IgQ05SSS4KLSMgQWxzbyBzZWUgIyMgY29tbWVudHMgZm9yIHRhaWxvcmluZy4KLQotIyBXaGljaCBDIGNvbXBpbGVyCi1DQz1nY2MKLSMjUFVSSUZZPS91c3IvbG9jYWwvcHVyZS9wdXJpZnkKLUxJTktDQz0kKFBVUklGWSkgJChDQykKLQotIyBPcHRpbWl6YXRpb24gcHJlZmVyZW5jZXMKLU9QVD0tZwotCi0jIFdoaWNoIFB5dGhvbiB2ZXJzaW9uIHdlJ3JlIHVzaW5nCi1WRVI9Mi4yCi0KLSMgRXhwcmVzc2lvbnMgdXNpbmcgdGhlIGFib3ZlIGRlZmluaXRpb25zCi1QWVZFUj1weXRob24kKFZFUikKLQotIyBVc2UgdGhlc2UgZGVmcyB3aGVuIGNvbXBpbGluZyBhZ2FpbnN0IGluc3RhbGxlZCBQeXRob24KLSMjSU5TVD0vdXNyL2xvY2FsCi0jI1BZQz0kKElOU1QpL2xpYi8kKFBZVkVSKS9jb25maWcKLSMjUFlJTkNMPS1JJChJTlNUKS9pbmNsdWRlLyQoUFlWRVIpIC1JJChQWUMpCi0jI1BZTElCUz0kKFBZQykvbGliJChQWVZFUikuYQotCi0jIFVzZSB0aGVzZSBkZWZzIHdoZW4gY29tcGlsaW5nIGFnYWluc3QgYnVpbHQgUHl0aG9uCi1QTEFUPWxpbnV4Ci1QWUlOQ0w9LUkuLi8uLi9JbmNsdWRlIC1JLi4vLi4vJChQTEFUKQotUFlMSUJTPS4uLy4uLyQoUExBVCkvbGliJChQWVZFUikuYQotCi0jIExpYnJhcmllcyB0byBsaW5rIHdpdGggLS0gdmVyeSBpbnN0YWxsYXRpb24gZGVwZW5kZW50Ci0jIChTZWUgTElCUz0gaW4gTW9kdWxlcy9NYWtlZmlsZSBpbiBidWlsZCB0cmVlKQotUkxMSUJTPS1scmVhZGxpbmUgLWx0ZXJtY2FwCi1PVEhFUkxJQlM9LWxuc2wgLWxwdGhyZWFkIC1sZGwgLWxtIC1sZGIgLWx1dGlsCi0KLSMgQ29tcGlsYXRpb24gYW5kIGxpbmsgZmxhZ3MgLS0gbm8gbmVlZCB0byBjaGFuZ2Ugbm9ybWFsbHkKLUNGTEFHUz0kKE9QVCkKLUNQUEZMQUdTPSQoUFlJTkNMKQotTElCUz0kKFBZTElCUykgJChSTExJQlMpICQoT1RIRVJMSUJTKQotCi0jIERlZmF1bHQgcG9ydCBmb3IgdGhlIHB5c3ZyIGFwcGxpY2F0aW9uCi1QT1JUPTQwMDAKLQotIyBEZWZhdWx0IHRhcmdldAotYWxsOiBweXN2cgotCi0jIFRhcmdldCB0byBidWlsZCBweXN2cgotcHlzdnI6IHB5c3ZyLm8gJChQWU9CSlMpICQoUFlMSUJTKQotCSQoTElOS0NDKSBweXN2ci5vICQoTElCUykgLW8gcHlzdnIKLQotIyBUYXJnZXQgdG8gYnVpbGQgYW5kIHJ1biBweXN2cgotcnVuOiBweXN2cgotCXB5c3ZyICQoUE9SVCkKLQotIyBUYXJnZXQgdG8gY2xlYW4gdXAgdGhlIGRpcmVjdG9yeQotY2xlYW46Ci0JLXJtIC1mIHB5c3ZyICoubyAqfiBjb3JlCmRpZmYgLS1naXQgYS9EZW1vL3B5c3ZyL1JFQURNRSBiL0RlbW8vcHlzdnIvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTY0ZTM4Li4wMDAwMDAwCi0tLSBhL0RlbW8vcHlzdnIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1UaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBtdWx0aS10aHJlYWRlZCBDIGFwcGxpY2F0aW9uIGVtYmVkZGluZyBhCi1QeXRob24gaW50ZXJwcmV0ZXIuCi0KLVRoZSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIGlzIGEgbXVsdGktdGhyZWFkZWQgdGVsbmV0LWxpa2Ugc2VydmVyIHRoYXQKLXByb3ZpZGVzIHlvdSB3aXRoIGEgUHl0aG9uIHByb21wdCAoaW5zdGVhZCBvZiBhIHNoZWxsIHByb21wdCkuCi0KLVRoZSBmaWxlIHB5c3ZyLnB5IGlzIGEgcHJvdG90eXBlIGluIFB5dGhvbi4KLQotVEhJUyBBUFBMSUNBVElPTiBJUyBOT1QgU0VDVVJFIC0tIE9OTFkgVVNFIElUIEZPUiBURVNUSU5HIQpkaWZmIC0tZ2l0IGEvRGVtby9weXN2ci9weXN2ci5jIGIvRGVtby9weXN2ci9weXN2ci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MDZjZDJhLi4wMDAwMDAwCi0tLSBhL0RlbW8vcHlzdnIvcHlzdnIuYworKysgL2Rldi9udWxsCkBAIC0xLDM3MCArMCwwIEBACi0vKiBBIG11bHRpLXRocmVhZGVkIHRlbG5ldC1saWtlIHNlcnZlciB0aGF0IGdpdmVzIGEgUHl0aG9uIHByb21wdC4KLQotVXNhZ2U6IHB5c3ZyIFtwb3J0XQotCi1Gb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgb25seSBhY2NlcHRzIHJlcXVlc3RzIGZyb20gdGhlIGN1cnJlbnQgaG9zdC4KLVRoaXMgY2FuIHN0aWxsIGJlIGluc2VjdXJlLCBidXQgcmVzdHJpY3RzIHZpb2xhdGlvbnMgZnJvbSBwZW9wbGUgd2hvCi1jYW4gbG9nIGluIG9uIHlvdXIgbWFjaGluZS4gIFVzZSB3aXRoIGNhdXRpb24hCi0KLSovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0KLS8qIFhYWCBVbXBmaC4KLSAgIFB5dGhvbi5oIGRlZmluZXMgYSB0eXBlZGVmIGRlc3RydWN0b3IsIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHB0aHJlYWQuaC4KLSAgIFNvIFB5dGhvbi5oIG11c3QgYmUgaW5jbHVkZWQgYWZ0ZXIgcHRocmVhZC5oLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiBpbnQgUHlfVmVyYm9zZUZsYWc7Ci0KLSNpZm5kZWYgUE9SVAotI2RlZmluZSBQT1JUIDQwMDAKLSNlbmRpZgotCi1zdHJ1Y3Qgd29ya29yZGVyIHsKLSAgICBpbnQgY29ubjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLX07Ci0KLS8qIEZvcndhcmQgKi8KLXN0YXRpYyB2b2lkIGluaXRfcHl0aG9uKHZvaWQpOwotc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCk7Ci1zdGF0aWMgdm9pZCBvcHJvZ25hbWUodm9pZCk7Ci1zdGF0aWMgdm9pZCBtYWluX3RocmVhZChpbnQpOwotc3RhdGljIHZvaWQgY3JlYXRlX3RocmVhZChpbnQsIHN0cnVjdCBzb2NrYWRkcl9pbiAqKTsKLXN0YXRpYyB2b2lkICpzZXJ2aWNlX3RocmVhZChzdHJ1Y3Qgd29ya29yZGVyICopOwotc3RhdGljIHZvaWQgcnVuX2ludGVycHJldGVyKEZJTEUgKiwgRklMRSAqKTsKLXN0YXRpYyBpbnQgcnVuX2NvbW1hbmQoY2hhciAqLCBQeU9iamVjdCAqKTsKLXN0YXRpYyB2b2lkIHBzKHZvaWQpOwotCi1zdGF0aWMgY2hhciAqcHJvZ25hbWUgPSAicHlzdnIiOwotCi1zdGF0aWMgUHlUaHJlYWRTdGF0ZSAqZ3RzdGF0ZTsKLQotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IHBvcnQgPSBQT1JUOwotICAgIGludCBjOwotCi0gICAgaWYgKGFyZ2MgPiAwICYmIGFyZ3ZbMF0gIT0gTlVMTCAmJiBhcmd2WzBdWzBdICE9ICdcMCcpCi0gICAgICAgIHByb2duYW1lID0gYXJndlswXTsKLQotICAgIHdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAidiIpKSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgIGNhc2UgJ3YnOgotICAgICAgICAgICAgUHlfVmVyYm9zZUZsYWcrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7Ci0gICAgICAgIGlmIChvcHRpbmQrMSA8IGFyZ2MpIHsKLSAgICAgICAgICAgIG9wcm9nbmFtZSgpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ0b28gbWFueSBhcmd1bWVudHNcbiIpOwotICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgfQotICAgICAgICBwb3J0ID0gYXRvaShhcmd2W29wdGluZF0pOwotICAgICAgICBpZiAocG9ydCA8PSAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJhZCBwb3J0ICglcylcbiIsIGFyZ3Zbb3B0aW5kXSk7Ci0gICAgICAgICAgICB1c2FnZSgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbWFpbl90aHJlYWQocG9ydCk7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIkJ5ZS5cbiIpOwotCi0gICAgZXhpdCgwKTsKLX0KLQotc3RhdGljIGNoYXIgdXNhZ2VfbGluZVtdID0gInVzYWdlOiAlcyBbcG9ydF1cbiI7Ci0KLXN0YXRpYyB2b2lkCi11c2FnZSh2b2lkKQotewotICAgIGZwcmludGYoc3RkZXJyLCB1c2FnZV9saW5lLCBwcm9nbmFtZSk7Ci0gICAgZXhpdCgyKTsKLX0KLQotc3RhdGljIHZvaWQKLW1haW5fdGhyZWFkKGludCBwb3J0KQotewotICAgIGludCBzb2NrLCBjb25uLCBzaXplLCBpOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyLCBjbGllbnRhZGRyOwotCi0gICAgc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7Ci0gICAgaWYgKHNvY2sgPCAwKSB7Ci0gICAgICAgIG9wcm9nbmFtZSgpOwotICAgICAgICBwZXJyb3IoImNhbid0IGNyZWF0ZSBzb2NrZXQiKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSNpZmRlZiBTT19SRVVTRUFERFIKLSAgICBpID0gMTsKLSAgICBzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKGNoYXIgKikgJmksIHNpemVvZiBpKTsKLSNlbmRpZgotCi0gICAgbWVtc2V0KChjaGFyICopJmFkZHIsICdcMCcsIHNpemVvZiBhZGRyKTsKLSAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKLSAgICBhZGRyLnNpbl9hZGRyLnNfYWRkciA9IDBMOwotICAgIGlmIChiaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mIGFkZHIpIDwgMCkgewotICAgICAgICBvcHJvZ25hbWUoKTsKLSAgICAgICAgcGVycm9yKCJjYW4ndCBiaW5kIHNvY2tldCB0byBhZGRyZXNzIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKGxpc3Rlbihzb2NrLCA1KSA8IDApIHsKLSAgICAgICAgb3Byb2duYW1lKCk7Ci0gICAgICAgIHBlcnJvcigiY2FuJ3QgbGlzdGVuIG9uIHNvY2tldCIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGZwcmludGYoc3RkZXJyLCAiTGlzdGVuaW5nIG9uIHBvcnQgJWQuLi5cbiIsIHBvcnQpOwotCi0gICAgZm9yIChpID0gMDsgOyBpKyspIHsKLSAgICAgICAgc2l6ZSA9IHNpemVvZiBjbGllbnRhZGRyOwotICAgICAgICBtZW1zZXQoKGNoYXIgKikgJmNsaWVudGFkZHIsICdcMCcsIHNpemUpOwotICAgICAgICBjb25uID0gYWNjZXB0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmNsaWVudGFkZHIsICZzaXplKTsKLSAgICAgICAgaWYgKGNvbm4gPCAwKSB7Ci0gICAgICAgICAgICBvcHJvZ25hbWUoKTsKLSAgICAgICAgICAgIHBlcnJvcigiY2FuJ3QgYWNjZXB0IGNvbm5lY3Rpb24gZnJvbSBzb2NrZXQiKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplID0gc2l6ZW9mIGFkZHI7Ci0gICAgICAgIG1lbXNldCgoY2hhciAqKSAmYWRkciwgJ1wwJywgc2l6ZSk7Ci0gICAgICAgIGlmIChnZXRzb2NrbmFtZShjb25uLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZzaXplKSA8IDApIHsKLSAgICAgICAgICAgIG9wcm9nbmFtZSgpOwotICAgICAgICAgICAgcGVycm9yKCJjYW4ndCBnZXQgc29ja2V0IG5hbWUgb2YgY29ubmVjdGlvbiIpOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2xpZW50YWRkci5zaW5fYWRkci5zX2FkZHIgIT0gYWRkci5zaW5fYWRkci5zX2FkZHIpIHsKLSAgICAgICAgICAgIG9wcm9nbmFtZSgpOwotICAgICAgICAgICAgcGVycm9yKCJjb25uZWN0aW9uIGZyb20gbm9uLWxvY2FsIGhvc3QgcmVmdXNlZCIpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoYWRkcj0lbHgsIGNsaWVudGFkZHI9JWx4KVxuIiwKLSAgICAgICAgICAgICAgICBudG9obChhZGRyLnNpbl9hZGRyLnNfYWRkciksCi0gICAgICAgICAgICAgICAgbnRvaGwoY2xpZW50YWRkci5zaW5fYWRkci5zX2FkZHIpKTsKLSAgICAgICAgICAgIGNsb3NlKGNvbm4pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPT0gNCkgewotICAgICAgICAgICAgY2xvc2UoY29ubik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjcmVhdGVfdGhyZWFkKGNvbm4sICZjbGllbnRhZGRyKTsKLSAgICB9Ci0KLSAgICBjbG9zZShzb2NrKTsKLQotICAgIGlmIChndHN0YXRlKSB7Ci0gICAgICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkKGd0c3RhdGUpOwotICAgICAgICBndHN0YXRlID0gTlVMTDsKLSAgICAgICAgUHlfRmluYWxpemUoKTsKLSAgICAgICAgLyogQW5kIGEgc2Vjb25kIHRpbWUsIGp1c3QgYmVjYXVzZSB3ZSBjYW4uICovCi0gICAgICAgIFB5X0ZpbmFsaXplKCk7IC8qIFRoaXMgc2hvdWxkIGJlIGhhcm1sZXNzLiAqLwotICAgIH0KLSAgICBleGl0KDApOwotfQotCi1zdGF0aWMgdm9pZAotY3JlYXRlX3RocmVhZChpbnQgY29ubiwgc3RydWN0IHNvY2thZGRyX2luICphZGRyKQotewotICAgIHN0cnVjdCB3b3Jrb3JkZXIgKndvcms7Ci0gICAgcHRocmVhZF90IHRkYXRhOwotCi0gICAgd29yayA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHdvcmtvcmRlcikpOwotICAgIGlmICh3b3JrID09IE5VTEwpIHsKLSAgICAgICAgb3Byb2duYW1lKCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeSBmb3IgdGhyZWFkLlxuIik7Ci0gICAgICAgIGNsb3NlKGNvbm4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHdvcmstPmNvbm4gPSBjb25uOwotICAgIHdvcmstPmFkZHIgPSAqYWRkcjsKLQotICAgIGluaXRfcHl0aG9uKCk7Ci0KLSAgICBpZiAocHRocmVhZF9jcmVhdGUoJnRkYXRhLCBOVUxMLCAodm9pZCAqKXNlcnZpY2VfdGhyZWFkLCB3b3JrKSA8IDApIHsKLSAgICAgICAgb3Byb2duYW1lKCk7Ci0gICAgICAgIHBlcnJvcigiY2FuJ3QgY3JlYXRlIG5ldyB0aHJlYWQiKTsKLSAgICAgICAgY2xvc2UoY29ubik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAocHRocmVhZF9kZXRhY2godGRhdGEpIDwgMCkgewotICAgICAgICBvcHJvZ25hbWUoKTsKLSAgICAgICAgcGVycm9yKCJjYW4ndCBkZXRhY2ggZnJvbSB0aHJlYWQiKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBQeVRocmVhZFN0YXRlICp0aGVfdHN0YXRlOwotc3RhdGljIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqdGhlX2ludGVycDsKLXN0YXRpYyBQeU9iamVjdCAqdGhlX2J1aWx0aW5zOwotCi1zdGF0aWMgdm9pZAotaW5pdF9weXRob24odm9pZCkKLXsKLSAgICBpZiAoZ3RzdGF0ZSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5X0luaXRpYWxpemUoKTsgLyogSW5pdGlhbGl6ZSB0aGUgaW50ZXJwcmV0ZXIgKi8KLSAgICBQeUV2YWxfSW5pdFRocmVhZHMoKTsgLyogQ3JlYXRlIChhbmQgYWNxdWlyZSkgdGhlIGludGVycHJldGVyIGxvY2sgKi8KLSAgICBndHN0YXRlID0gUHlFdmFsX1NhdmVUaHJlYWQoKTsgLyogUmVsZWFzZSB0aGUgdGhyZWFkIHN0YXRlICovCi19Ci0KLXN0YXRpYyB2b2lkICoKLXNlcnZpY2VfdGhyZWFkKHN0cnVjdCB3b3Jrb3JkZXIgKndvcmspCi17Ci0gICAgRklMRSAqaW5wdXQsICpvdXRwdXQ7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIlN0YXJ0IHRocmVhZCBmb3IgY29ubmVjdGlvbiAlZC5cbiIsIHdvcmstPmNvbm4pOwotCi0gICAgcHMoKTsKLQotICAgIGlucHV0ID0gZmRvcGVuKHdvcmstPmNvbm4sICJyIik7Ci0gICAgaWYgKGlucHV0ID09IE5VTEwpIHsKLSAgICAgICAgb3Byb2duYW1lKCk7Ci0gICAgICAgIHBlcnJvcigiY2FuJ3QgY3JlYXRlIGlucHV0IHN0cmVhbSIpOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi0gICAgb3V0cHV0ID0gZmRvcGVuKHdvcmstPmNvbm4sICJ3Iik7Ci0gICAgaWYgKG91dHB1dCA9PSBOVUxMKSB7Ci0gICAgICAgIG9wcm9nbmFtZSgpOwotICAgICAgICBwZXJyb3IoImNhbid0IGNyZWF0ZSBvdXRwdXQgc3RyZWFtIik7Ci0gICAgICAgIGZjbG9zZShpbnB1dCk7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBzZXR2YnVmKGlucHV0LCBOVUxMLCBfSU9OQkYsIDApOwotICAgIHNldHZidWYob3V0cHV0LCBOVUxMLCBfSU9OQkYsIDApOwotCi0gICAgcnVuX2ludGVycHJldGVyKGlucHV0LCBvdXRwdXQpOwotCi0gICAgZmNsb3NlKGlucHV0KTsKLSAgICBmY2xvc2Uob3V0cHV0KTsKLQotICBkb25lOgotICAgIGZwcmludGYoc3RkZXJyLCAiRW5kIHRocmVhZCBmb3IgY29ubmVjdGlvbiAlZC5cbiIsIHdvcmstPmNvbm4pOwotICAgIGNsb3NlKHdvcmstPmNvbm4pOwotICAgIGZyZWUod29yayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1vcHJvZ25hbWUodm9pZCkKLXsKLSAgICBpbnQgc2F2ZSA9IGVycm5vOwotICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICIsIHByb2duYW1lKTsKLSAgICBlcnJubyA9IHNhdmU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1ydW5faW50ZXJwcmV0ZXIoRklMRSAqaW5wdXQsIEZJTEUgKm91dHB1dCkKLXsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7Ci0gICAgUHlPYmplY3QgKm5ld19zdGRpbiwgKm5ld19zdGRvdXQ7Ci0gICAgUHlPYmplY3QgKm1haW5tb2QsICpnbG9iYWxzOwotICAgIGNoYXIgYnVmZmVyWzEwMDBdOwotICAgIGNoYXIgKnAsICpxOwotICAgIGludCBuLCBlbmQ7Ci0KLSAgICBQeUV2YWxfQWNxdWlyZUxvY2soKTsKLSAgICB0c3RhdGUgPSBQeV9OZXdJbnRlcnByZXRlcigpOwotICAgIGlmICh0c3RhdGUgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKG91dHB1dCwgIlNvcnJ5IC0tIGNhbid0IGNyZWF0ZSBhbiBpbnRlcnByZXRlclxuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtYWlubW9kID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwotICAgIGdsb2JhbHMgPSBQeU1vZHVsZV9HZXREaWN0KG1haW5tb2QpOwotICAgIFB5X0lOQ1JFRihnbG9iYWxzKTsKLQotICAgIG5ld19zdGRpbiA9IFB5RmlsZV9Gcm9tRmlsZShpbnB1dCwgIjxzb2NrZXQtaW4+IiwgInIiLCBOVUxMKTsKLSAgICBuZXdfc3Rkb3V0ID0gUHlGaWxlX0Zyb21GaWxlKG91dHB1dCwgIjxzb2NrZXQtb3V0PiIsICJ3IiwgTlVMTCk7Ci0KLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGluIiwgbmV3X3N0ZGluKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIG5ld19zdGRvdXQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgbmV3X3N0ZG91dCk7Ci0KLSAgICBmb3IgKG4gPSAxOyAhUHlFcnJfT2NjdXJyZWQoKTsgbisrKSB7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgZnByaW50ZihvdXRwdXQsICIlZD4gIiwgbik7Ci0gICAgICAgIHAgPSBmZ2V0cyhidWZmZXIsIHNpemVvZiBidWZmZXIsIGlucHV0KTsKLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChwWzBdID09ICdcMzc3JyAmJiBwWzFdID09ICdcMzU0JykKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHEgPSBzdHJyY2hyKHAsICdccicpOwotICAgICAgICBpZiAocSAmJiBxWzFdID09ICdcbicgJiYgcVsyXSA9PSAnXDAnKSB7Ci0gICAgICAgICAgICAqcSsrID0gJ1xuJzsKLSAgICAgICAgICAgICpxKysgPSAnXDAnOwotICAgICAgICB9Ci0KLSAgICAgICAgd2hpbGUgKCpwICYmIGlzc3BhY2UoKnApKQotICAgICAgICAgICAgcCsrOwotICAgICAgICBpZiAocFswXSA9PSAnIycgfHwgcFswXSA9PSAnXDAnKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZW5kID0gcnVuX2NvbW1hbmQoYnVmZmVyLCBnbG9iYWxzKTsKLSAgICAgICAgaWYgKGVuZCA8IDApCi0gICAgICAgICAgICBQeUVycl9QcmludCgpOwotCi0gICAgICAgIGlmIChlbmQpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBQeV9YREVDUkVGKGdsb2JhbHMpOwotICAgIFB5X1hERUNSRUYobmV3X3N0ZGluKTsKLSAgICBQeV9YREVDUkVGKG5ld19zdGRvdXQpOwotCi0gICAgUHlfRW5kSW50ZXJwcmV0ZXIodHN0YXRlKTsKLSAgICBQeUV2YWxfUmVsZWFzZUxvY2soKTsKLQotICAgIGZwcmludGYob3V0cHV0LCAiR29vZGJ5ZSFcbiIpOwotfQotCi1zdGF0aWMgaW50Ci1ydW5fY29tbWFuZChjaGFyICpidWZmZXIsIFB5T2JqZWN0ICpnbG9iYWxzKQotewotICAgIFB5T2JqZWN0ICptLCAqZCwgKnY7Ci0gICAgZnByaW50ZihzdGRlcnIsICJydW5fY29tbWFuZDogJXMiLCBidWZmZXIpOwotICAgIGlmIChzdHJjaHIoYnVmZmVyLCAnXG4nKSA9PSBOVUxMKQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gICAgdiA9IFB5UnVuX1N0cmluZyhidWZmZXIsIFB5X3NpbmdsZV9pbnB1dCwgZ2xvYmFscywgZ2xvYmFscyk7Ci0gICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSA9PSBQeUV4Y19TeXN0ZW1FeGl0KSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICAgICAgUHlFcnJfUHJpbnQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFB5X0RFQ1JFRih2KTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXBzKHZvaWQpCi17Ci0gICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAicHMgLWwgLXAgJWQgPC9kZXYvbnVsbCB8IHNlZCAxZFxuIiwgZ2V0cGlkKCkpOwotICAgIHN5c3RlbShidWZmZXIpOwotfQpkaWZmIC0tZ2l0IGEvRGVtby9weXN2ci9weXN2ci5weSBiL0RlbW8vcHlzdnIvcHlzdnIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlOTRkYmUuLjAwMDAwMDAKLS0tIGEvRGVtby9weXN2ci9weXN2ci5weQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSIiIkEgbXVsdGktdGhyZWFkZWQgdGVsbmV0LWxpa2Ugc2VydmVyIHRoYXQgZ2l2ZXMgYSBQeXRob24gcHJvbXB0LgotCi1UaGlzIGlzIHJlYWxseSBhIHByb3RvdHlwZSBmb3IgdGhlIHNhbWUgdGhpbmcgaW4gQy4KLQotVXNhZ2U6IHB5c3ZyLnB5IFtwb3J0XQotCi1Gb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgb25seSBhY2NlcHRzIHJlcXVlc3RzIGZyb20gdGhlIGN1cnJlbnQgaG9zdC4KLVRoaXMgY2FuIHN0aWxsIGJlIGluc2VjdXJlLCBidXQgcmVzdHJpY3RzIHZpb2xhdGlvbnMgZnJvbSBwZW9wbGUgd2hvCi1jYW4gbG9nIGluIG9uIHlvdXIgbWFjaGluZS4gIFVzZSB3aXRoIGNhdXRpb24hCi0KLSIiIgotCi1pbXBvcnQgc3lzLCBvcywgc3RyaW5nLCBnZXRvcHQsIF90aHJlYWQsIHNvY2tldCwgdHJhY2ViYWNrCi0KLVBPUlQgPSA0MDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERlZmF1bHQgcG9ydAotCi1kZWYgbWFpbigpOgotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiIikKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKLSAgICAgICAgICAgIHJhaXNlIGdldG9wdC5lcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzLiIpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHVzYWdlKG1zZykKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBwYXNzCi0gICAgaWYgYXJnczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcG9ydCA9IHN0cmluZy5hdG9pKGFyZ3NbMF0pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHVzYWdlKG1zZykKLSAgICBlbHNlOgotICAgICAgICBwb3J0ID0gUE9SVAotICAgIG1haW5fdGhyZWFkKHBvcnQpCi0KLWRlZiB1c2FnZShtc2c9Tm9uZSk6Ci0gICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKLSAgICBpZiBtc2c6Ci0gICAgICAgIHByaW50KG1zZykKLSAgICBwcmludCgiXG4iLCBfX2RvY19fLCBlbmQ9JyAnKQotICAgIHN5cy5leGl0KDIpCi0KLWRlZiBtYWluX3RocmVhZChwb3J0KToKLSAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgIHNvY2suYmluZCgoIiIsIHBvcnQpKQotICAgIHNvY2subGlzdGVuKDUpCi0gICAgcHJpbnQoIkxpc3RlbmluZyBvbiBwb3J0IiwgcG9ydCwgIi4uLiIpCi0gICAgd2hpbGUgMToKLSAgICAgICAgKGNvbm4sIGFkZHIpID0gc29jay5hY2NlcHQoKQotICAgICAgICBpZiBhZGRyWzBdICE9IGNvbm4uZ2V0c29ja25hbWUoKVswXToKLSAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgcHJpbnQoIlJlZnVzaW5nIGNvbm5lY3Rpb24gZnJvbSBub24tbG9jYWwgaG9zdCIsIGFkZHJbMF0sICIuIikKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChzZXJ2aWNlX3RocmVhZCwgKGNvbm4sIGFkZHIpKQotICAgICAgICBkZWwgY29ubiwgYWRkcgotCi1kZWYgc2VydmljZV90aHJlYWQoY29ubiwgYWRkcik6Ci0gICAgKGNhZGRyLCBjcG9ydCkgPSBhZGRyCi0gICAgcHJpbnQoIlRocmVhZCAlcyBoYXMgY29ubmVjdGlvbiBmcm9tICVzLlxuIiAlIChzdHIoX3RocmVhZC5nZXRfaWRlbnQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWRkciksIGVuZD0nICcpCi0gICAgc3RkaW4gPSBjb25uLm1ha2VmaWxlKCJyIikKLSAgICBzdGRvdXQgPSBjb25uLm1ha2VmaWxlKCJ3IiwgMCkKLSAgICBydW5faW50ZXJwcmV0ZXIoc3RkaW4sIHN0ZG91dCkKLSAgICBwcmludCgiVGhyZWFkICVzIGlzIGRvbmUuXG4iICUgc3RyKF90aHJlYWQuZ2V0X2lkZW50KCkpLCBlbmQ9JyAnKQotCi1kZWYgcnVuX2ludGVycHJldGVyKHN0ZGluLCBzdGRvdXQpOgotICAgIGdsb2JhbHMgPSB7fQotICAgIHRyeToKLSAgICAgICAgc3RyKHN5cy5wczEpCi0gICAgZXhjZXB0OgotICAgICAgICBzeXMucHMxID0gIj4+PiAiCi0gICAgc291cmNlID0gIiIKLSAgICB3aGlsZSAxOgotICAgICAgICBzdGRvdXQud3JpdGUoc3lzLnBzMSkKLSAgICAgICAgbGluZSA9IHN0ZGluLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbGluZVs6Ml0gPT0gJ1wzNzdcMzU0JzoKLSAgICAgICAgICAgIGxpbmUgPSAiIgotICAgICAgICBpZiBub3QgbGluZSBhbmQgbm90IHNvdXJjZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGxpbmVbLTI6XSA9PSAnXHJcbic6Ci0gICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdICsgJ1xuJwotICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyBsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvZGUgPSBjb21waWxlX2NvbW1hbmQoc291cmNlKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgc291cmNlID0gIiIKLSAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oU3ludGF4RXJyb3IsIGVyciwgTm9uZSwgZmlsZT1zdGRvdXQpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBub3QgY29kZToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHNvdXJjZSA9ICIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJ1bl9jb21tYW5kKGNvZGUsIHN0ZGluLCBzdGRvdXQsIGdsb2JhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0IGFzIGhvdzoKLSAgICAgICAgICAgIGlmIGhvdzoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGhvdyA9IHN0cihob3cpCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBob3cgPSAiIgotICAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgiRXhpdCAlc1xuIiAlIGhvdykKLSAgICAgICAgICAgIGJyZWFrCi0gICAgc3Rkb3V0LndyaXRlKCJcbkdvb2RieWUuXG4iKQotCi1kZWYgcnVuX2NvbW1hbmQoY29kZSwgc3RkaW4sIHN0ZG91dCwgZ2xvYmFscyk6Ci0gICAgc2F2ZSA9IHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIgPSBzdGRvdXQKLSAgICAgICAgc3lzLnN0ZGluID0gc3RkaW4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYyhjb2RlLCBnbG9iYWxzKQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdCBhcyBob3c6Ci0gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGhvdykud2l0aF90cmFjZWJhY2soc3lzLmV4Y19pbmZvKClbMl0pCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBpZiB0YjogdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKHR5cGUsIHZhbHVlLCB0YikKLSAgICAgICAgICAgIGRlbCB0YgotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVyciA9IHNhdmUKLQotZnJvbSBjb2RlIGltcG9ydCBjb21waWxlX2NvbW1hbmQKLQotbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3JwYy9NQU5JRkVTVCBiL0RlbW8vcnBjL01BTklGRVNUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjVmM2ViLi4wMDAwMDAwCi0tLSBhL0RlbW8vcnBjL01BTklGRVNUCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotICAgRmlsZSBOYW1lCQlBcmNoaXZlICMJRGVzY3JpcHRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gTUFOSUZFU1QgICAgICAgICAgICAgICAgICAgMQlUaGlzIHNoaXBwaW5nIGxpc3QKLSBSRUFETUUgICAgICAgICAgICAgICAgICAgICAxCQotIFQucHkgICAgICAgICAgICAgICAgICAgICAgIDEJCi0gbW91bnRjbGllbnQucHkgICAgICAgICAgICAgMQkKLSBuZnNjbGllbnQucHkgICAgICAgICAgICAgICAxCQotIHJwYy5weSAgICAgICAgICAgICAgICAgICAgIDEJCi0gdGVzdCAgICAgICAgICAgICAgICAgICAgICAgMQotIHhkci5weSAgICAgICAgICAgICAgICAgICAgIDEJCmRpZmYgLS1naXQgYS9EZW1vL3JwYy9SRUFETUUgYi9EZW1vL3JwYy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3OTQ4YTMuLjAwMDAwMDAKLS0tIGEvRGVtby9ycGMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotVGhpcyBpcyBhIFB5dGhvbiBpbnRlcmZhY2UgdG8gU3VuIFJQQywgZGVzaWduZWQgYW5kIGltcGxlbWVudGVkIG1vc3RseQotYnkgcmVhZGluZyB0aGUgSW50ZXJuZXQgUkZDcyBhYm91dCB0aGUgc3ViamVjdC4KLQotKioqIE5PVEU6IHhkci5weSBoYXMgZXZvbHZlZCBpbnRvIHRoZSBzdGFuZGFyZCBtb2R1bGUgeGRybGliLnB5ICoqKgotCi1UaGVyZSBhcmUgdHdvIGxpYnJhcnkgbW9kdWxlcywgeGRyLnB5IGFuZCBycGMucHksIGFuZCBzZXZlcmFsIGV4YW1wbGUKLWNsaWVudHM6IG1vdW50Y2xpZW50LnB5LCBuZnNjbGllbnQucHksIGFuZCBybnVzZXJzY2xpZW50LnB5LAotaW1wbGVtZW50aW5nIHRoZSBORlMgTW91bnQgcHJvdG9jb2wsIChwYXJ0IG9mKSB0aGUgTkZTIHByb3RvY29sLCBhbmQKLXRoZSAicm51c2VycyIgcHJvdG9jb2wgKHVzZWQgYnkgcnVzZXJzKDEpKSwgcmVzcGVjdGl2ZWx5LiAgVGhlIGxhdHRlcgotZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgYnJvYWRjYXN0IHZpYSB0aGUgUG9ydCBtYXBwZXIncyBDQUxMSVQKLXByb2NlZHVyZS4KLQotVGhlcmUgaXMgYWxzbyBhIHdheSB0byBjcmVhdGUgc2VydmVycyBpbiBQeXRob24uCi0KLVRvIHRlc3QgdGhlIG5mcyBjbGllbnQsIHJ1biBpdCBmcm9tIHRoZSBzaGVsbCB3aXRoIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0KLSAgcHl0aG9uIC1jICdpbXBvcnQgbmZzY2xpZW50OyBuZnNjbGllbnQudGVzdCgpJyBbaG9zdG5hbWUgW2ZpbGVzeXN0ZW1uYW1lXV0KLQotV2hlbiBjYWxsZWQgd2l0aG91dCBhIGZpbGVzeXN0ZW1uYW1lLCBpdCBsaXN0cyB0aGUgZmlsZXN5c3RlbXMgYXQgdGhlCi1ob3N0OyBkZWZhdWx0IGhvc3QgaXMgdGhlIGxvY2FsIG1hY2hpbmUuCi0KLU90aGVyIGNsaWVudHMgYXJlIHRlc3RlZCBzaW1pbGFybHkuCi0KLUZvciBob3N0bmFtZSwgdXNlIGUuZy4gd3VhcmNoaXZlLnd1c3RsLmVkdSBvciBnYXRla2VlcGVyLmRlYy5jb20gKHR3bwotaG9zdHMgdGhhdCBhcmUga25vd24gdG8gZXhwb3J0IE5GUyBmaWxlc3lzdGVtcyB3aXRoIGxpdHRsZSByZXN0cmljdGlvbnMpLgotCi1UaGVyZSBhcmUgbm93IHR3byBkaWZmZXJlbnQgUlBDIGNvbXBpbGVyczoKLQotMSkgV2ltIExld2lzIHJwY2dlbi5weSBmb3VuZCBvbiBodHRwOi8vd3d3Lm9tbmlncm91cC5jb20vfndpbWwvc29mdC9zdGFsZS1pbmRleC5odG1sI3B5dGhvbi4gCi0KLTIpIFBldGVyIMVzdHJhbmRzIHJwY2dlbi5weSwgd2hpY2ggaXMgcGFydCBvZiAicHluZnMiIChodHRwOi8vd3d3LmNlbmRpby5zZS9+cGV0ZXIvcHluZnMvKS4gCmRpZmYgLS1naXQgYS9EZW1vL3JwYy9ULnB5IGIvRGVtby9ycGMvVC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMyNTUwNy4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy9ULnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBTaW1wbGUgaW50ZXJmYWNlIHRvIHJlcG9ydCBleGVjdXRpb24gdGltZXMgb2YgcHJvZ3JhbSBmcmFnbWVudHMuCi0jIENhbGwgVFNUQVJUKCkgdG8gcmVzZXQgdGhlIHRpbWVyLCBUU1RPUCguLi4pIHRvIHJlcG9ydCB0aW1lcy4KLQotaW1wb3J0IHN5cywgb3MsIHRpbWUKLQotZGVmIFRTVEFSVCgpOgotICAgIGdsb2JhbCB0MCwgdDEKLSAgICB1LCBzLCBjdSwgY3MgPSBvcy50aW1lcygpCi0gICAgdDAgPSB1K2N1LCBzK2NzLCB0aW1lLnRpbWUoKQotCi1kZWYgVFNUT1AoKmxhYmVsKToKLSAgICBnbG9iYWwgdDAsIHQxCi0gICAgdSwgcywgY3UsIGNzID0gb3MudGltZXMoKQotICAgIHQxID0gdStjdSwgcytjcywgdGltZS50aW1lKCkKLSAgICB0dCA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMyk6Ci0gICAgICAgIHR0LmFwcGVuZCh0MVtpXSAtIHQwW2ldKQotICAgIFt1LCBzLCByXSA9IHR0Ci0gICAgbXNnID0gJycKLSAgICBmb3IgeCBpbiBsYWJlbDogbXNnID0gbXNnICsgKHggKyAnICcpCi0gICAgbXNnID0gbXNnICsgJyVyIHVzZXIsICVyIHN5cywgJXIgcmVhbFxuJyAlICh1LCBzLCByKQotICAgIHN5cy5zdGRlcnIud3JpdGUobXNnKQpkaWZmIC0tZ2l0IGEvRGVtby9ycGMvbW91bnRjbGllbnQucHkgYi9EZW1vL3JwYy9tb3VudGNsaWVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE3OTdkZi4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy9tb3VudGNsaWVudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIwMiArMCwwIEBACi0jIE1vdW50IFJQQyBjbGllbnQgLS0gUkZDIDEwOTQgKE5GUyksIEFwcGVuZGl4IEEKLQotIyBUaGlzIG1vZHVsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHdyaXRlIHlvdXIgb3duIFJQQyBjbGllbnQgaW4gUHl0aG9uLgotIyBXaGVuIHRoaXMgZXhhbXBsZSB3YXMgd3JpdHRlbiwgdGhlcmUgd2FzIG5vIFJQQyBjb21waWxlciBmb3IKLSMgUHl0aG9uLiBXaXRob3V0IHN1Y2ggYSBjb21waWxlciwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGNsYXNzZXMKLSMgZGVyaXZlZCBmcm9tIFBhY2tlciBhbmQgVW5wYWNrZXIgdG8gaGFuZGxlIHRoZSBkYXRhIHR5cGVzIGZvciB0aGUKLSMgc2VydmVyIHlvdSB3YW50IHRvIGludGVyZmFjZSB0by4gIFlvdSB0aGVuIHdyaXRlIHRoZSBjbGllbnQgY2xhc3MuCi0jIElmIHlvdSB3YW50IHRvIHN1cHBvcnQgYm90aCB0aGUgVENQIGFuZCB0aGUgVURQIHZlcnNpb24gb2YgYQotIyBwcm90b2NvbCwgdXNlIG11bHRpcGxlIGluaGVyaXRhbmNlIGFzIHNob3duIGJlbG93LgotCi0KLWltcG9ydCBycGMKLWZyb20gcnBjIGltcG9ydCBQYWNrZXIsIFVucGFja2VyLCBUQ1BDbGllbnQsIFVEUENsaWVudAotCi0KLSMgUHJvZ3JhbSBudW1iZXIgYW5kIHZlcnNpb24gZm9yIHRoZSBtb3VudCBwcm90b2NvbAotTU9VTlRQUk9HID0gMTAwMDA1Ci1NT1VOVFZFUlMgPSAxCi0KLSMgU2l6ZSBvZiB0aGUgJ2ZoYW5kbGUnIG9wYXF1ZSBzdHJ1Y3R1cmUKLUZIU0laRSA9IDMyCi0KLQotIyBQYWNrZXIgZGVyaXZlZCBjbGFzcyBmb3IgTW91bnQgcHJvdG9jb2wgY2xpZW50cy4KLSMgVGhlIG9ubHkgdGhpbmcgd2UgbmVlZCB0byBwYWNrIGJleW9uZCBiYXNpYyB0eXBlcyBpcyBhbiAnZmhhbmRsZScKLQotY2xhc3MgTW91bnRQYWNrZXIoUGFja2VyKToKLQotICAgIGRlZiBwYWNrX2ZoYW5kbGUoc2VsZiwgZmhhbmRsZSk6Ci0gICAgICAgIHNlbGYucGFja19mb3BhcXVlKEZIU0laRSwgZmhhbmRsZSkKLQotCi0jIFVucGFja2VyIGRlcml2ZWQgY2xhc3MgZm9yIE1vdW50IHByb3RvY29sIGNsaWVudHMuCi0jIFRoZSBpbXBvcnRhbnQgdHlwZXMgd2UgbmVlZCB0byB1bnBhY2sgYXJlIGZoYW5kbGUsIGZoc3RhdHVzLAotIyBtb3VudGxpc3QgYW5kIGV4cG9ydGxpc3Q7IG1vdW50c3RydWN0LCBleHBvcnRzdHJ1Y3QgYW5kIGdyb3VwcyBhcmUKLSMgdXNlZCB0byB1bnBhY2sgY29tcG9uZW50cyBvZiBtb3VudGxpc3QgYW5kIGV4cG9ydGxpc3QgYW5kIHRoZQotIyBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGFzIGZ1bmN0aW9uIGFyZ3VtZW50IHRvIHRoZQotIyBnZW5lcmljIHVucGFja19saXN0IGZ1bmN0aW9uLgotCi1jbGFzcyBNb3VudFVucGFja2VyKFVucGFja2VyKToKLQotICAgIGRlZiB1bnBhY2tfZmhhbmRsZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYudW5wYWNrX2ZvcGFxdWUoRkhTSVpFKQotCi0gICAgZGVmIHVucGFja19maHN0YXR1cyhzZWxmKToKLSAgICAgICAgc3RhdHVzID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIGlmIHN0YXR1cyA9PSAwOgotICAgICAgICAgICAgZmggPSBzZWxmLnVucGFja19maGFuZGxlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZoID0gTm9uZQotICAgICAgICByZXR1cm4gc3RhdHVzLCBmaAotCi0gICAgZGVmIHVucGFja19tb3VudGxpc3Qoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVucGFja19saXN0KHNlbGYudW5wYWNrX21vdW50c3RydWN0KQotCi0gICAgZGVmIHVucGFja19tb3VudHN0cnVjdChzZWxmKToKLSAgICAgICAgaG9zdG5hbWUgPSBzZWxmLnVucGFja19zdHJpbmcoKQotICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLnVucGFja19zdHJpbmcoKQotICAgICAgICByZXR1cm4gKGhvc3RuYW1lLCBkaXJlY3RvcnkpCi0KLSAgICBkZWYgdW5wYWNrX2V4cG9ydGxpc3Qoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVucGFja19saXN0KHNlbGYudW5wYWNrX2V4cG9ydHN0cnVjdCkKLQotICAgIGRlZiB1bnBhY2tfZXhwb3J0c3RydWN0KHNlbGYpOgotICAgICAgICBmaWxlc3lzID0gc2VsZi51bnBhY2tfc3RyaW5nKCkKLSAgICAgICAgZ3JvdXBzID0gc2VsZi51bnBhY2tfZ3JvdXBzKCkKLSAgICAgICAgcmV0dXJuIChmaWxlc3lzLCBncm91cHMpCi0KLSAgICBkZWYgdW5wYWNrX2dyb3VwcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYudW5wYWNrX2xpc3Qoc2VsZi51bnBhY2tfc3RyaW5nKQotCi0KLSMgVGhlc2UgYXJlIHRoZSBwcm9jZWR1cmVzIHNwZWNpZmljIHRvIHRoZSBNb3VudCBjbGllbnQgY2xhc3MuCi0jIFRoaW5rIG9mIHRoaXMgYXMgYSBkZXJpdmVkIGNsYXNzIG9mIGVpdGhlciBUQ1BDbGllbnQgb3IgVURQQ2xpZW50LgotCi1jbGFzcyBQYXJ0aWFsTW91bnRDbGllbnQ6Ci0KLSAgICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBDbGllbnQuX19pbml0X18gdG8gaW5pdGlhbGl6ZQotICAgICMgc2VsZi5wYWNrZXIgYW5kIHNlbGYudW5wYWNrZXIKLSAgICBkZWYgYWRkcGFja2VycyhzZWxmKToKLSAgICAgICAgc2VsZi5wYWNrZXIgPSBNb3VudFBhY2tlcigpCi0gICAgICAgIHNlbGYudW5wYWNrZXIgPSBNb3VudFVucGFja2VyKCcnKQotCi0gICAgIyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgQ2xpZW50Ll9faW5pdF9fIHRvIGJpbmQgdGhlIHNvY2tldAotICAgICMgdG8gYSBwYXJ0aWN1bGFyIG5ldHdvcmsgaW50ZXJmYWNlIGFuZCBwb3J0LiAgV2UgdXNlIHRoZQotICAgICMgZGVmYXVsdCBuZXR3b3JrIGludGVyZmFjZSwgYnV0IGlmIHdlJ3JlIHJ1bm5pbmcgYXMgcm9vdCwKLSAgICAjIHdlIHdhbnQgdG8gYmluZCB0byBhIHJlc2VydmVkIHBvcnQKLSAgICBkZWYgYmluZHNvY2tldChzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHVpZCA9IG9zLmdldHVpZCgpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHVpZCA9IDEKLSAgICAgICAgaWYgdWlkID09IDA6Ci0gICAgICAgICAgICBwb3J0ID0gcnBjLmJpbmRyZXN2cG9ydChzZWxmLnNvY2ssICcnKQotICAgICAgICAgICAgIyAncG9ydCcgaXMgbm90IHVzZWQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc29jay5iaW5kKCgnJywgMCkpCi0KLSAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGNvdWdoIHVwIGEgc3VpdGFibGUKLSAgICAjIGF1dGhlbnRpY2F0aW9uIG9iamVjdCBmb3IgYSBjYWxsIHRvIHByb2NlZHVyZSAncHJvYycuCi0gICAgZGVmIG1rY3JlZChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jcmVkIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNyZWQgPSBycGMuQVVUSF9VTklYLCBycGMubWFrZV9hdXRoX3VuaXhfZGVmYXVsdCgpCi0gICAgICAgIHJldHVybiBzZWxmLmNyZWQKLQotICAgICMgVGhlIG1ldGhvZHMgTW50LCBEdW1wIGV0Yy4gZWFjaCBpbXBsZW1lbnQgb25lIFJlbW90ZQotICAgICMgUHJvY2VkdXJlIENhbGwuICBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyBzZWxmLm1ha2VfY2FsbCgpCi0gICAgIyB3aXRoIGFzIGFyZ3VtZW50czoKLSAgICAjCi0gICAgIyAtIHRoZSBwcm9jZWR1cmUgbnVtYmVyCi0gICAgIyAtIHRoZSBhcmd1bWVudHMgKG9yIE5vbmUpCi0gICAgIyAtIHRoZSAicGFja2VyIiBmdW5jdGlvbiBmb3IgdGhlIGFyZ3VtZW50cyAob3IgTm9uZSkKLSAgICAjIC0gdGhlICJ1bnBhY2tlciIgZnVuY3Rpb24gZm9yIHRoZSByZXR1cm4gdmFsdWUgKG9yIE5vbmUpCi0gICAgIwotICAgICMgVGhlIHBhY2tlciBhbmQgdW5wYWNrZXIgZnVuY3Rpb24sIGlmIG5vdCBOb25lLCAqbXVzdCogYmUKLSAgICAjIG1ldGhvZHMgb2Ygc2VsZi5wYWNrZXIgYW5kIHNlbGYudW5wYWNrZXIsIHJlc3BlY3RpdmVseS4KLSAgICAjIEEgdmFsdWUgb2YgTm9uZSBtZWFucyB0aGF0IHRoZXJlIGFyZSBubyBhcmd1bWVudHMgb3IgaXMgbm8KLSAgICAjIHJldHVybiB2YWx1ZSwgcmVzcGVjdGl2ZWx5LgotICAgICMKLSAgICAjIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBtYWtlX2NhbGwoKSBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20KLSAgICAjIHRoZSByZW1vdGUgcHJvY2VkdXJlIGNhbGwsIGFzIHVucGFja2VkIGJ5IHRoZSAidW5wYWNrZXIiCi0gICAgIyBmdW5jdGlvbiwgb3IgTm9uZSBpZiB0aGUgdW5wYWNrZXIgZnVuY3Rpb24gaXMgTm9uZS4KLSAgICAjCi0gICAgIyAoRXZlbiBpZiB5b3UgZXhwZWN0IGEgcmVzdWx0IG9mIE5vbmUsIHlvdSBzaG91bGQgc3RpbGwKLSAgICAjIHJldHVybiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gbWFrZV9jYWxsKCksIHNpbmNlIHRoaXMgbWF5IGJlCi0gICAgIyBuZWVkZWQgYnkgYSBicm9hZGNhc3RpbmcgdmVyc2lvbiBvZiB0aGUgY2xhc3MuKQotICAgICMKLSAgICAjIElmIHRoZSBjYWxsIGZhaWxzLCBtYWtlX2NhbGwoKSByYWlzZXMgYW4gZXhjZXB0aW9uCi0gICAgIyAodGhpcyBpbmNsdWRlcyB0aW1lLW91dHMgYW5kIGludmFsaWQgcmVzdWx0cykuCi0gICAgIwotICAgICMgTm90ZSB0aGF0IChhdCBsZWFzdCB3aXRoIHRoZSBVRFAgcHJvdG9jb2wpIHRoZXJlIGlzIG5vCi0gICAgIyBndWFyYW50ZWUgdGhhdCBhIGNhbGwgaXMgZXhlY3V0ZWQgYXQgbW9zdCBvbmNlLiAgV2hlbiB5b3UgZG8KLSAgICAjIGdldCBhIHJlcGx5LCB5b3Uga25vdyBpdCBoYXMgYmVlbiBleGVjdXRlZCBhdCBsZWFzdCBvbmNlOwotICAgICMgd2hlbiB5b3UgZG9uJ3QgZ2V0IGEgcmVwbHksIHlvdSBrbm93IG5vdGhpbmcuCi0KLSAgICBkZWYgTW50KHNlbGYsIGRpcmVjdG9yeSk6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbCgxLCBkaXJlY3RvcnksIFwKLSAgICAgICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3N0cmluZywgXAotICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrZXIudW5wYWNrX2Zoc3RhdHVzKQotCi0gICAgZGVmIER1bXAoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbCgyLCBOb25lLCBcCi0gICAgICAgICAgICAgICAgTm9uZSwgc2VsZi51bnBhY2tlci51bnBhY2tfbW91bnRsaXN0KQotCi0gICAgZGVmIFVtbnQoc2VsZiwgZGlyZWN0b3J5KToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKDMsIGRpcmVjdG9yeSwgXAotICAgICAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfc3RyaW5nLCBOb25lKQotCi0gICAgZGVmIFVtbnRhbGwoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbCg0LCBOb25lLCBOb25lLCBOb25lKQotCi0gICAgZGVmIEV4cG9ydChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKDUsIE5vbmUsIFwKLSAgICAgICAgICAgICAgICBOb25lLCBzZWxmLnVucGFja2VyLnVucGFja19leHBvcnRsaXN0KQotCi0KLSMgV2UgdHVybiB0aGUgcGFydGlhbCBNb3VudCBjbGllbnQgaW50byBhIGZ1bGwgb25lIGZvciBlaXRoZXIgcHJvdG9jb2wKLSMgYnkgdXNlIG9mIG11bHRpcGxlIGluaGVyaXRhbmNlLiAgKEluIGdlbmVyYWwsIHdoZW4gY2xhc3MgQyBoYXMgYmFzZQotIyBjbGFzc2VzIEIxLi4uQm4sIGlmIHggaXMgYW4gaW5zdGFuY2Ugb2YgY2xhc3MgQywgbWV0aG9kcyBvZiB4IGFyZQotIyBzZWFyY2hlZCBmaXJzdCBpbiBDLCB0aGVuIGluIEIxLCB0aGVuIGluIEIyLCAuLi4sIGZpbmFsbHkgaW4gQm4uKQotCi1jbGFzcyBUQ1BNb3VudENsaWVudChQYXJ0aWFsTW91bnRDbGllbnQsIFRDUENsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCk6Ci0gICAgICAgIFRDUENsaWVudC5fX2luaXRfXyhzZWxmLCBob3N0LCBNT1VOVFBST0csIE1PVU5UVkVSUykKLQotCi1jbGFzcyBVRFBNb3VudENsaWVudChQYXJ0aWFsTW91bnRDbGllbnQsIFVEUENsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCk6Ci0gICAgICAgIFVEUENsaWVudC5fX2luaXRfXyhzZWxmLCBob3N0LCBNT1VOVFBST0csIE1PVU5UVkVSUykKLQotCi0jIEEgbGl0dGxlIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIE1vdW50IGNsaWVudC4gIFRoaXMgdGFrZXMgYSBob3N0IGFzCi0jIGNvbW1hbmQgbGluZSBhcmd1bWVudCAoZGVmYXVsdCB0aGUgbG9jYWwgbWFjaGluZSksIHByaW50cyBpdHMgZXhwb3J0Ci0jIGxpc3QsIGFuZCBhdHRlbXB0cyB0byBtb3VudCBhbmQgdW5tb3VudCBlYWNoIGV4cG9ydGVkIGZpbGVzIHN5c3RlbS4KLSMgQW4gb3B0aW9uYWwgZmlyc3QgYXJndW1lbnQgb2YgLXQgb3IgLXUgc3BlY2lmaWVzIHRoZSBwcm90b2NvbCB0byB1c2UKLSMgKFRDUCBvciBVRFApLCBkZWZhdWx0IGlzIFVEUC4KLQotZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLmFyZ3ZbMTpdIGFuZCBzeXMuYXJndlsxXSA9PSAnLXQnOgotICAgICAgICBDID0gVENQTW91bnRDbGllbnQKLSAgICAgICAgZGVsIHN5cy5hcmd2WzFdCi0gICAgZWxpZiBzeXMuYXJndlsxOl0gYW5kIHN5cy5hcmd2WzFdID09ICctdSc6Ci0gICAgICAgIEMgPSBVRFBNb3VudENsaWVudAotICAgICAgICBkZWwgc3lzLmFyZ3ZbMV0KLSAgICBlbHNlOgotICAgICAgICBDID0gVURQTW91bnRDbGllbnQKLSAgICBpZiBzeXMuYXJndlsxOl06IGhvc3QgPSBzeXMuYXJndlsxXQotICAgIGVsc2U6IGhvc3QgPSAnJwotICAgIG1jbCA9IEMoaG9zdCkKLSAgICBsaXN0ID0gbWNsLkV4cG9ydCgpCi0gICAgZm9yIGl0ZW0gaW4gbGlzdDoKLSAgICAgICAgcHJpbnQoaXRlbSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbWNsLk1udChpdGVtWzBdKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwcmludCgnU29ycnknKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgbWNsLlVtbnQoaXRlbVswXSkKZGlmZiAtLWdpdCBhL0RlbW8vcnBjL25mc2NsaWVudC5weSBiL0RlbW8vcnBjL25mc2NsaWVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI5MWNlMC4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy9uZnNjbGllbnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDEgKzAsMCBAQAotIyBORlMgUlBDIGNsaWVudCAtLSBSRkMgMTA5NAotCi0jIFhYWCBUaGlzIGlzIG5vdCB5ZXQgY29tcGxldGUuCi0jIFhYWCBPbmx5IEdFVEFUVFIsIFNFVFRUUiwgTE9PS1VQIGFuZCBSRUFERElSIGFyZSBzdXBwb3J0ZWQuCi0KLSMgKFNlZSBtb3VudGNsaWVudC5weSBmb3Igc29tZSBoaW50cyBvbiBob3cgdG8gd3JpdGUgUlBDIGNsaWVudHMgaW4KLSMgUHl0aG9uIGluIGdlbmVyYWwpCi0KLWltcG9ydCBycGMKLWZyb20gcnBjIGltcG9ydCBVRFBDbGllbnQsIFRDUENsaWVudAotZnJvbSBtb3VudGNsaWVudCBpbXBvcnQgRkhTSVpFLCBNb3VudFBhY2tlciwgTW91bnRVbnBhY2tlcgotCi1ORlNfUFJPR1JBTSA9IDEwMDAwMwotTkZTX1ZFUlNJT04gPSAyCi0KLSMgZW51bSBzdGF0Ci1ORlNfT0sgPSAwCi0jICguLi5tYW55IGVycm9yIHZhbHVlcy4uLikKLQotIyBlbnVtIGZ0eXBlCi1ORk5PTiA9IDAKLU5GUkVHID0gMQotTkZESVIgPSAyCi1ORkJMSyA9IDMKLU5GQ0hSID0gNAotTkZMTksgPSA1Ci0KLQotY2xhc3MgTkZTUGFja2VyKE1vdW50UGFja2VyKToKLQotICAgIGRlZiBwYWNrX3NhdHRyYXJncyhzZWxmLCBzYSk6Ci0gICAgICAgIGZpbGUsIGF0dHJpYnV0ZXMgPSBzYQotICAgICAgICBzZWxmLnBhY2tfZmhhbmRsZShmaWxlKQotICAgICAgICBzZWxmLnBhY2tfc2F0dHIoYXR0cmlidXRlcykKLQotICAgIGRlZiBwYWNrX3NhdHRyKHNlbGYsIHNhKToKLSAgICAgICAgbW9kZSwgdWlkLCBnaWQsIHNpemUsIGF0aW1lLCBtdGltZSA9IHNhCi0gICAgICAgIHNlbGYucGFja191aW50KG1vZGUpCi0gICAgICAgIHNlbGYucGFja191aW50KHVpZCkKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoZ2lkKQotICAgICAgICBzZWxmLnBhY2tfdWludChzaXplKQotICAgICAgICBzZWxmLnBhY2tfdGltZXZhbChhdGltZSkKLSAgICAgICAgc2VsZi5wYWNrX3RpbWV2YWwobXRpbWUpCi0KLSAgICBkZWYgcGFja19kaXJvcGFyZ3Moc2VsZiwgZGEpOgotICAgICAgICBkaXIsIG5hbWUgPSBkYQotICAgICAgICBzZWxmLnBhY2tfZmhhbmRsZShkaXIpCi0gICAgICAgIHNlbGYucGFja19zdHJpbmcobmFtZSkKLQotICAgIGRlZiBwYWNrX3JlYWRkaXJhcmdzKHNlbGYsIHJhKToKLSAgICAgICAgZGlyLCBjb29raWUsIGNvdW50ID0gcmEKLSAgICAgICAgc2VsZi5wYWNrX2ZoYW5kbGUoZGlyKQotICAgICAgICBzZWxmLnBhY2tfdWludChjb29raWUpCi0gICAgICAgIHNlbGYucGFja191aW50KGNvdW50KQotCi0gICAgZGVmIHBhY2tfdGltZXZhbChzZWxmLCB0dik6Ci0gICAgICAgIHNlY3MsIHVzZWNzID0gdHYKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoc2VjcykKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQodXNlY3MpCi0KLQotY2xhc3MgTkZTVW5wYWNrZXIoTW91bnRVbnBhY2tlcik6Ci0KLSAgICBkZWYgdW5wYWNrX3JlYWRkaXJyZXMoc2VsZik6Ci0gICAgICAgIHN0YXR1cyA9IHNlbGYudW5wYWNrX2VudW0oKQotICAgICAgICBpZiBzdGF0dXMgPT0gTkZTX09LOgotICAgICAgICAgICAgZW50cmllcyA9IHNlbGYudW5wYWNrX2xpc3Qoc2VsZi51bnBhY2tfZW50cnkpCi0gICAgICAgICAgICBlb2YgPSBzZWxmLnVucGFja19ib29sKCkKLSAgICAgICAgICAgIHJlc3QgPSAoZW50cmllcywgZW9mKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdCA9IE5vbmUKLSAgICAgICAgcmV0dXJuIChzdGF0dXMsIHJlc3QpCi0KLSAgICBkZWYgdW5wYWNrX2VudHJ5KHNlbGYpOgotICAgICAgICBmaWxlaWQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgbmFtZSA9IHNlbGYudW5wYWNrX3N0cmluZygpCi0gICAgICAgIGNvb2tpZSA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICByZXR1cm4gKGZpbGVpZCwgbmFtZSwgY29va2llKQotCi0gICAgZGVmIHVucGFja19kaXJvcHJlcyhzZWxmKToKLSAgICAgICAgc3RhdHVzID0gc2VsZi51bnBhY2tfZW51bSgpCi0gICAgICAgIGlmIHN0YXR1cyA9PSBORlNfT0s6Ci0gICAgICAgICAgICBmaCA9IHNlbGYudW5wYWNrX2ZoYW5kbGUoKQotICAgICAgICAgICAgZmEgPSBzZWxmLnVucGFja19mYXR0cigpCi0gICAgICAgICAgICByZXN0ID0gKGZoLCBmYSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3QgPSBOb25lCi0gICAgICAgIHJldHVybiAoc3RhdHVzLCByZXN0KQotCi0gICAgZGVmIHVucGFja19hdHRyc3RhdChzZWxmKToKLSAgICAgICAgc3RhdHVzID0gc2VsZi51bnBhY2tfZW51bSgpCi0gICAgICAgIGlmIHN0YXR1cyA9PSBORlNfT0s6Ci0gICAgICAgICAgICBhdHRyaWJ1dGVzID0gc2VsZi51bnBhY2tfZmF0dHIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXR0cmlidXRlcyA9IE5vbmUKLSAgICAgICAgcmV0dXJuIHN0YXR1cywgYXR0cmlidXRlcwotCi0gICAgZGVmIHVucGFja19mYXR0cihzZWxmKToKLSAgICAgICAgdHlwZSA9IHNlbGYudW5wYWNrX2VudW0oKQotICAgICAgICBtb2RlID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIG5saW5rID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHVpZCA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBnaWQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgc2l6ZSA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBibG9ja3NpemUgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgcmRldiA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBibG9ja3MgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgZnNpZCA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBmaWxlaWQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgYXRpbWUgPSBzZWxmLnVucGFja190aW1ldmFsKCkKLSAgICAgICAgbXRpbWUgPSBzZWxmLnVucGFja190aW1ldmFsKCkKLSAgICAgICAgY3RpbWUgPSBzZWxmLnVucGFja190aW1ldmFsKCkKLSAgICAgICAgcmV0dXJuICh0eXBlLCBtb2RlLCBubGluaywgdWlkLCBnaWQsIHNpemUsIGJsb2Nrc2l6ZSwgXAotICAgICAgICAgICAgICAgIHJkZXYsIGJsb2NrcywgZnNpZCwgZmlsZWlkLCBhdGltZSwgbXRpbWUsIGN0aW1lKQotCi0gICAgZGVmIHVucGFja190aW1ldmFsKHNlbGYpOgotICAgICAgICBzZWNzID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHVzZWNzID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHJldHVybiAoc2VjcywgdXNlY3MpCi0KLQotY2xhc3MgTkZTQ2xpZW50KFVEUENsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCk6Ci0gICAgICAgIFVEUENsaWVudC5fX2luaXRfXyhzZWxmLCBob3N0LCBORlNfUFJPR1JBTSwgTkZTX1ZFUlNJT04pCi0KLSAgICBkZWYgYWRkcGFja2VycyhzZWxmKToKLSAgICAgICAgc2VsZi5wYWNrZXIgPSBORlNQYWNrZXIoKQotICAgICAgICBzZWxmLnVucGFja2VyID0gTkZTVW5wYWNrZXIoJycpCi0KLSAgICBkZWYgbWtjcmVkKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNyZWQgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY3JlZCA9IHJwYy5BVVRIX1VOSVgsIHJwYy5tYWtlX2F1dGhfdW5peF9kZWZhdWx0KCkKLSAgICAgICAgcmV0dXJuIHNlbGYuY3JlZAotCi0gICAgZGVmIEdldGF0dHIoc2VsZiwgZmgpOgotICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMSwgZmgsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX2ZoYW5kbGUsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2VyLnVucGFja19hdHRyc3RhdCkKLQotICAgIGRlZiBTZXRhdHRyKHNlbGYsIHNhKToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKDIsIHNhLCBcCi0gICAgICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja19zYXR0cmFyZ3MsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2VyLnVucGFja19hdHRyc3RhdCkKLQotICAgICMgUm9vdCgpIGlzIG9ic29sZXRlCi0KLSAgICBkZWYgTG9va3VwKHNlbGYsIGRhKToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKDQsIGRhLCBcCi0gICAgICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja19kaXJvcGFyZ3MsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2VyLnVucGFja19kaXJvcHJlcykKLQotICAgICMgLi4uCi0KLSAgICBkZWYgUmVhZGRpcihzZWxmLCByYSk6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbCgxNiwgcmEsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3JlYWRkaXJhcmdzLCBcCi0gICAgICAgICAgICAgICAgc2VsZi51bnBhY2tlci51bnBhY2tfcmVhZGRpcnJlcykKLQotICAgICMgU2hvcnRoYW5kIHRvIGdldCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5Ci0gICAgZGVmIExpc3RkaXIoc2VsZiwgZGlyKToKLSAgICAgICAgbGlzdCA9IFtdCi0gICAgICAgIHJhID0gKGRpciwgMCwgMjAwMCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIChzdGF0dXMsIHJlc3QpID0gc2VsZi5SZWFkZGlyKHJhKQotICAgICAgICAgICAgaWYgc3RhdHVzICE9IE5GU19PSzoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZW50cmllcywgZW9mID0gcmVzdAotICAgICAgICAgICAgbGFzdF9jb29raWUgPSBOb25lCi0gICAgICAgICAgICBmb3IgZmlsZWlkLCBuYW1lLCBjb29raWUgaW4gZW50cmllczoKLSAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZWlkLCBuYW1lKSkKLSAgICAgICAgICAgICAgICBsYXN0X2Nvb2tpZSA9IGNvb2tpZQotICAgICAgICAgICAgaWYgZW9mIG9yIGxhc3RfY29va2llIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJhID0gKHJhWzBdLCBsYXN0X2Nvb2tpZSwgcmFbMl0pCi0gICAgICAgIHJldHVybiBsaXN0Ci0KLQotZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOiBob3N0ID0gc3lzLmFyZ3ZbMV0KLSAgICBlbHNlOiBob3N0ID0gJycKLSAgICBpZiBzeXMuYXJndlsyOl06IGZpbGVzeXMgPSBzeXMuYXJndlsyXQotICAgIGVsc2U6IGZpbGVzeXMgPSBOb25lCi0gICAgZnJvbSBtb3VudGNsaWVudCBpbXBvcnQgVURQTW91bnRDbGllbnQsIFRDUE1vdW50Q2xpZW50Ci0gICAgbWNsID0gVENQTW91bnRDbGllbnQoaG9zdCkKLSAgICBpZiBmaWxlc3lzIGlzIE5vbmU6Ci0gICAgICAgIGxpc3QgPSBtY2wuRXhwb3J0KCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdDoKLSAgICAgICAgICAgIHByaW50KGl0ZW0pCi0gICAgICAgIHJldHVybgotICAgIHNmID0gbWNsLk1udChmaWxlc3lzKQotICAgIHByaW50KHNmKQotICAgIGZoID0gc2ZbMV0KLSAgICBpZiBmaDoKLSAgICAgICAgbmNsID0gTkZTQ2xpZW50KGhvc3QpCi0gICAgICAgIGF0dHJzdGF0ID0gbmNsLkdldGF0dHIoZmgpCi0gICAgICAgIHByaW50KGF0dHJzdGF0KQotICAgICAgICBsaXN0ID0gbmNsLkxpc3RkaXIoZmgpCi0gICAgICAgIGZvciBpdGVtIGluIGxpc3Q6IHByaW50KGl0ZW0pCi0gICAgICAgIG1jbC5VbW50KGZpbGVzeXMpCmRpZmYgLS1naXQgYS9EZW1vL3JwYy9ybnVzZXJzY2xpZW50LnB5IGIvRGVtby9ycGMvcm51c2Vyc2NsaWVudC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhYmVmZS4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy9ybnVzZXJzY2xpZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyBSZW1vdGUgbnVzZXJzIGNsaWVudCBpbnRlcmZhY2UKLQotaW1wb3J0IHJwYwotZnJvbSBycGMgaW1wb3J0IFBhY2tlciwgVW5wYWNrZXIsIFVEUENsaWVudCwgQnJvYWRjYXN0VURQQ2xpZW50Ci0KLQotY2xhc3MgUm51c2Vyc1BhY2tlcihQYWNrZXIpOgotICAgIGRlZiBwYWNrX3V0bXAoc2VsZiwgdWkpOgotICAgICAgICB1dF9saW5lLCB1dF9uYW1lLCB1dF9ob3N0LCB1dF90aW1lID0gdXRtcAotICAgICAgICBzZWxmLnBhY2tfc3RyaW5nKHV0X2xpbmUpCi0gICAgICAgIHNlbGYucGFja19zdHJpbmcodXRfbmFtZSkKLSAgICAgICAgc2VsZi5wYWNrX3N0cmluZyh1dF9ob3N0KQotICAgICAgICBzZWxmLnBhY2tfaW50KHV0X3RpbWUpCi0gICAgZGVmIHBhY2tfdXRtcGlkbGUoc2VsZiwgdWkpOgotICAgICAgICB1aV9pdG1wLCB1aV9pZGxlID0gdWkKLSAgICAgICAgc2VsZi5wYWNrX3V0bXAodWlfdXRtcCkKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQodWlfaWRsZSkKLSAgICBkZWYgcGFja191dG1waWRsZWFycihzZWxmLCBsaXN0KToKLSAgICAgICAgc2VsZi5wYWNrX2FycmF5KGxpc3QsIHNlbGYucGFja19pdG1waWRsZSkKLQotCi1jbGFzcyBSbnVzZXJzVW5wYWNrZXIoVW5wYWNrZXIpOgotICAgIGRlZiB1bnBhY2tfdXRtcChzZWxmKToKLSAgICAgICAgdXRfbGluZSA9IHNlbGYudW5wYWNrX3N0cmluZygpCi0gICAgICAgIHV0X25hbWUgPSBzZWxmLnVucGFja19zdHJpbmcoKQotICAgICAgICB1dF9ob3N0ID0gc2VsZi51bnBhY2tfc3RyaW5nKCkKLSAgICAgICAgdXRfdGltZSA9IHNlbGYudW5wYWNrX2ludCgpCi0gICAgICAgIHJldHVybiB1dF9saW5lLCB1dF9uYW1lLCB1dF9ob3N0LCB1dF90aW1lCi0gICAgZGVmIHVucGFja191dG1waWRsZShzZWxmKToKLSAgICAgICAgdWlfdXRtcCA9IHNlbGYudW5wYWNrX3V0bXAoKQotICAgICAgICB1aV9pZGxlID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHJldHVybiB1aV91dG1wLCB1aV9pZGxlCi0gICAgZGVmIHVucGFja191dG1waWRsZWFycihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYudW5wYWNrX2FycmF5KHNlbGYudW5wYWNrX3V0bXBpZGxlKQotCi0KLWNsYXNzIFBhcnRpYWxSbnVzZXJzQ2xpZW50OgotCi0gICAgZGVmIGFkZHBhY2tlcnMoc2VsZik6Ci0gICAgICAgIHNlbGYucGFja2VyID0gUm51c2Vyc1BhY2tlcigpCi0gICAgICAgIHNlbGYudW5wYWNrZXIgPSBSbnVzZXJzVW5wYWNrZXIoJycpCi0KLSAgICBkZWYgTnVtKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMSwgTm9uZSwgTm9uZSwgc2VsZi51bnBhY2tlci51bnBhY2tfaW50KQotCi0gICAgZGVmIE5hbWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMiwgTm9uZSwgXAotICAgICAgICAgICAgICAgIE5vbmUsIHNlbGYudW5wYWNrZXIudW5wYWNrX3V0bXBpZGxlYXJyKQotCi0gICAgZGVmIEFsbG5hbWVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMywgTm9uZSwgXAotICAgICAgICAgICAgICAgIE5vbmUsIHNlbGYudW5wYWNrZXIudW5wYWNrX3V0bXBpZGxlYXJyKQotCi0KLWNsYXNzIFJudXNlcnNDbGllbnQoUGFydGlhbFJudXNlcnNDbGllbnQsIFVEUENsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCk6Ci0gICAgICAgIFVEUENsaWVudC5fX2luaXRfXyhzZWxmLCBob3N0LCAxMDAwMDIsIDIpCi0KLQotY2xhc3MgQnJvYWRjYXN0Um51c2Vyc0NsaWVudChQYXJ0aWFsUm51c2Vyc0NsaWVudCwgQnJvYWRjYXN0VURQQ2xpZW50KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiY2FzdGFkZHIpOgotICAgICAgICBCcm9hZGNhc3RVRFBDbGllbnQuX19pbml0X18oc2VsZiwgYmNhc3RhZGRyLCAxMDAwMDIsIDIpCi0KLQotZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgbm90IHN5cy5hcmd2WzE6XToKLSAgICAgICAgdGVzdGJjYXN0KCkKLSAgICAgICAgcmV0dXJuCi0gICAgZWxzZToKLSAgICAgICAgaG9zdCA9IHN5cy5hcmd2WzFdCi0gICAgYyA9IFJudXNlcnNDbGllbnQoaG9zdCkKLSAgICBsaXN0ID0gYy5OYW1lcygpCi0gICAgZm9yIChsaW5lLCBuYW1lLCBob3N0LCB0aW1lKSwgaWRsZSBpbiBsaXN0OgotICAgICAgICBsaW5lID0gc3RyaXAwKGxpbmUpCi0gICAgICAgIG5hbWUgPSBzdHJpcDAobmFtZSkKLSAgICAgICAgaG9zdCA9IHN0cmlwMChob3N0KQotICAgICAgICBwcmludCgiJXIgJXIgJXIgJXMgJXMiICUgKG5hbWUsIGhvc3QsIGxpbmUsIHRpbWUsIGlkbGUpKQotCi1kZWYgdGVzdGJjYXN0KCk6Ci0gICAgYyA9IEJyb2FkY2FzdFJudXNlcnNDbGllbnQoJzxicm9hZGNhc3Q+JykKLSAgICBkZWYgbGlzdGl0KGxpc3QsIGZyb21hZGRyKToKLSAgICAgICAgaG9zdCwgcG9ydCA9IGZyb21hZGRyCi0gICAgICAgIHByaW50KGhvc3QgKyAnXHQ6JywgZW5kPScgJykKLSAgICAgICAgZm9yIChsaW5lLCBuYW1lLCBob3N0LCB0aW1lKSwgaWRsZSBpbiBsaXN0OgotICAgICAgICAgICAgcHJpbnQoc3RyaXAwKG5hbWUpLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCi0gICAgYy5zZXRfcmVwbHlfaGFuZGxlcihsaXN0aXQpCi0gICAgYWxsID0gYy5OYW1lcygpCi0gICAgcHJpbnQoJ1RvdGFsIENvdW50OicsIGxlbihhbGwpKQotCi1kZWYgc3RyaXAwKHMpOgotICAgIHdoaWxlIHMgYW5kIHNbLTFdID09ICdcMCc6IHMgPSBzWzotMV0KLSAgICByZXR1cm4gcwotCi10ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vcnBjL3JwYy5weSBiL0RlbW8vcnBjL3JwYy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiMzAxNy4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy9ycGMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4OTAgKzAsMCBAQAotIyBTdW4gUlBDIHZlcnNpb24gMiAtLSBSRkMxMDU3LgotCi0jIFhYWCBUaGVyZSBzaG91bGQgYmUgc2VwYXJhdGUgZXhjZXB0aW9ucyBmb3IgdGhlIHZhcmlvdXMgcmVhc29ucyB3aHkKLSMgWFhYIGFuIFJQQyBjYW4gZmFpbCwgcmF0aGVyIHRoYW4gdXNpbmcgUnVudGltZUVycm9yIGZvciBldmVyeXRoaW5nCi0KLSMgWFhYIE5lZWQgdG8gdXNlIGNsYXNzIGJhc2VkIGV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gc3RyaW5nIGV4Y2VwdGlvbnMKLQotIyBYWFggVGhlIFVEUCB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbCByZXNlbmRzIHJlcXVlc3RzIHdoZW4gaXQgZG9lcwotIyBYWFggbm90IHJlY2VpdmUgYSB0aW1lbHkgcmVwbHkgLS0gdXNlIG9ubHkgZm9yIGlkZW1wb3RlbnQgY2FsbHMhCi0KLSMgWFhYIFRoZXJlIGlzIG5vIHByb3Zpc2lvbiBmb3IgY2FsbCB0aW1lb3V0IG9uIFRDUCBjb25uZWN0aW9ucwotCi1pbXBvcnQgeGRyCi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQgb3MKLQotUlBDVkVSU0lPTiA9IDIKLQotQ0FMTCA9IDAKLVJFUExZID0gMQotCi1BVVRIX05VTEwgPSAwCi1BVVRIX1VOSVggPSAxCi1BVVRIX1NIT1JUID0gMgotQVVUSF9ERVMgPSAzCi0KLU1TR19BQ0NFUFRFRCA9IDAKLU1TR19ERU5JRUQgPSAxCi0KLVNVQ0NFU1MgPSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFJQQyBleGVjdXRlZCBzdWNjZXNzZnVsbHkKLVBST0dfVU5BVkFJTCAgPSAxICAgICAgICAgICAgICAgICAgICAgICAjIHJlbW90ZSBoYXNuJ3QgZXhwb3J0ZWQgcHJvZ3JhbQotUFJPR19NSVNNQVRDSCA9IDIgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3RlIGNhbid0IHN1cHBvcnQgdmVyc2lvbiAjCi1QUk9DX1VOQVZBSUwgID0gMyAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9ncmFtIGNhbid0IHN1cHBvcnQgcHJvY2VkdXJlCi1HQVJCQUdFX0FSR1MgID0gNCAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9jZWR1cmUgY2FuJ3QgZGVjb2RlIHBhcmFtcwotCi1SUENfTUlTTUFUQ0ggPSAwICAgICAgICAgICAgICAgICAgICAgICAgIyBSUEMgdmVyc2lvbiBudW1iZXIgIT0gMgotQVVUSF9FUlJPUiA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVtb3RlIGNhbid0IGF1dGhlbnRpY2F0ZSBjYWxsZXIKLQotQVVUSF9CQURDUkVEICAgICAgPSAxICAgICAgICAgICAgICAgICAgICMgYmFkIGNyZWRlbnRpYWxzIChzZWFsIGJyb2tlbikKLUFVVEhfUkVKRUNURURDUkVEID0gMiAgICAgICAgICAgICAgICAgICAjIGNsaWVudCBtdXN0IGJlZ2luIG5ldyBzZXNzaW9uCi1BVVRIX0JBRFZFUkYgICAgICA9IDMgICAgICAgICAgICAgICAgICAgIyBiYWQgdmVyaWZpZXIgKHNlYWwgYnJva2VuKQotQVVUSF9SRUpFQ1RFRFZFUkYgPSA0ICAgICAgICAgICAgICAgICAgICMgdmVyaWZpZXIgZXhwaXJlZCBvciByZXBsYXllZAotQVVUSF9UT09XRUFLICAgICAgPSA1ICAgICAgICAgICAgICAgICAgICMgcmVqZWN0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMKLQotCi1jbGFzcyBQYWNrZXIoeGRyLlBhY2tlcik6Ci0KLSAgICBkZWYgcGFja19hdXRoKHNlbGYsIGF1dGgpOgotICAgICAgICBmbGF2b3IsIHN0dWZmID0gYXV0aAotICAgICAgICBzZWxmLnBhY2tfZW51bShmbGF2b3IpCi0gICAgICAgIHNlbGYucGFja19vcGFxdWUoc3R1ZmYpCi0KLSAgICBkZWYgcGFja19hdXRoX3VuaXgoc2VsZiwgc3RhbXAsIG1hY2hpbmVuYW1lLCB1aWQsIGdpZCwgZ2lkcyk6Ci0gICAgICAgIHNlbGYucGFja191aW50KHN0YW1wKQotICAgICAgICBzZWxmLnBhY2tfc3RyaW5nKG1hY2hpbmVuYW1lKQotICAgICAgICBzZWxmLnBhY2tfdWludCh1aWQpCi0gICAgICAgIHNlbGYucGFja191aW50KGdpZCkKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQobGVuKGdpZHMpKQotICAgICAgICBmb3IgaSBpbiBnaWRzOgotICAgICAgICAgICAgc2VsZi5wYWNrX3VpbnQoaSkKLQotICAgIGRlZiBwYWNrX2NhbGxoZWFkZXIoc2VsZiwgeGlkLCBwcm9nLCB2ZXJzLCBwcm9jLCBjcmVkLCB2ZXJmKToKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoeGlkKQotICAgICAgICBzZWxmLnBhY2tfZW51bShDQUxMKQotICAgICAgICBzZWxmLnBhY2tfdWludChSUENWRVJTSU9OKQotICAgICAgICBzZWxmLnBhY2tfdWludChwcm9nKQotICAgICAgICBzZWxmLnBhY2tfdWludCh2ZXJzKQotICAgICAgICBzZWxmLnBhY2tfdWludChwcm9jKQotICAgICAgICBzZWxmLnBhY2tfYXV0aChjcmVkKQotICAgICAgICBzZWxmLnBhY2tfYXV0aCh2ZXJmKQotICAgICAgICAjIENhbGxlciBtdXN0IGFkZCBwcm9jZWR1cmUtc3BlY2lmaWMgcGFydCBvZiBjYWxsCi0KLSAgICBkZWYgcGFja19yZXBseWhlYWRlcihzZWxmLCB4aWQsIHZlcmYpOgotICAgICAgICBzZWxmLnBhY2tfdWludCh4aWQpCi0gICAgICAgIHNlbGYucGFja19lbnVtKFJFUExZKQotICAgICAgICBzZWxmLnBhY2tfdWludChNU0dfQUNDRVBURUQpCi0gICAgICAgIHNlbGYucGFja19hdXRoKHZlcmYpCi0gICAgICAgIHNlbGYucGFja19lbnVtKFNVQ0NFU1MpCi0gICAgICAgICMgQ2FsbGVyIG11c3QgYWRkIHByb2NlZHVyZS1zcGVjaWZpYyBwYXJ0IG9mIHJlcGx5Ci0KLQotIyBFeGNlcHRpb25zCi1jbGFzcyBCYWRSUENGb3JtYXQoRXhjZXB0aW9uKTogcGFzcwotY2xhc3MgQmFkUlBDVmVyc2lvbihFeGNlcHRpb24pOiBwYXNzCi1jbGFzcyBHYXJiYWdlQXJncyhFeGNlcHRpb24pOiBwYXNzCi0KLWNsYXNzIFVucGFja2VyKHhkci5VbnBhY2tlcik6Ci0KLSAgICBkZWYgdW5wYWNrX2F1dGgoc2VsZik6Ci0gICAgICAgIGZsYXZvciA9IHNlbGYudW5wYWNrX2VudW0oKQotICAgICAgICBzdHVmZiA9IHNlbGYudW5wYWNrX29wYXF1ZSgpCi0gICAgICAgIHJldHVybiAoZmxhdm9yLCBzdHVmZikKLQotICAgIGRlZiB1bnBhY2tfY2FsbGhlYWRlcihzZWxmKToKLSAgICAgICAgeGlkID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHRlbXAgPSBzZWxmLnVucGFja19lbnVtKCkKLSAgICAgICAgaWYgdGVtcCAhPSBDQUxMOgotICAgICAgICAgICAgcmFpc2UgQmFkUlBDRm9ybWF0KCdubyBDQUxMIGJ1dCAlcicgJSAodGVtcCwpKQotICAgICAgICB0ZW1wID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIGlmIHRlbXAgIT0gUlBDVkVSU0lPTjoKLSAgICAgICAgICAgIHJhaXNlIEJhZFJQQ1ZlcnNpb24oJ2JhZCBSUEMgdmVyc2lvbiAlcicgJSAodGVtcCwpKQotICAgICAgICBwcm9nID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHZlcnMgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgcHJvYyA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBjcmVkID0gc2VsZi51bnBhY2tfYXV0aCgpCi0gICAgICAgIHZlcmYgPSBzZWxmLnVucGFja19hdXRoKCkKLSAgICAgICAgcmV0dXJuIHhpZCwgcHJvZywgdmVycywgcHJvYywgY3JlZCwgdmVyZgotICAgICAgICAjIENhbGxlciBtdXN0IGFkZCBwcm9jZWR1cmUtc3BlY2lmaWMgcGFydCBvZiBjYWxsCi0KLSAgICBkZWYgdW5wYWNrX3JlcGx5aGVhZGVyKHNlbGYpOgotICAgICAgICB4aWQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgbXR5cGUgPSBzZWxmLnVucGFja19lbnVtKCkKLSAgICAgICAgaWYgbXR5cGUgIT0gUkVQTFk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ25vIFJFUExZIGJ1dCAlcicgJSAobXR5cGUsKSkKLSAgICAgICAgc3RhdCA9IHNlbGYudW5wYWNrX2VudW0oKQotICAgICAgICBpZiBzdGF0ID09IE1TR19ERU5JRUQ6Ci0gICAgICAgICAgICBzdGF0ID0gc2VsZi51bnBhY2tfZW51bSgpCi0gICAgICAgICAgICBpZiBzdGF0ID09IFJQQ19NSVNNQVRDSDoKLSAgICAgICAgICAgICAgICBsb3cgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgICAgICAgICBoaWdoID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNU0dfREVOSUVEOiBSUENfTUlTTUFUQ0g6ICVyJyAlICgobG93LCBoaWdoKSwpKQotICAgICAgICAgICAgaWYgc3RhdCA9PSBBVVRIX0VSUk9SOgotICAgICAgICAgICAgICAgIHN0YXQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ01TR19ERU5JRUQ6IEFVVEhfRVJST1I6ICVyJyAlIChzdGF0LCkpCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ01TR19ERU5JRUQ6ICVyJyAlIChzdGF0LCkpCi0gICAgICAgIGlmIHN0YXQgIT0gTVNHX0FDQ0VQVEVEOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdOZWl0aGVyIE1TR19ERU5JRUQgbm9yIE1TR19BQ0NFUFRFRDogJXInICUgKHN0YXQsKSkKLSAgICAgICAgdmVyZiA9IHNlbGYudW5wYWNrX2F1dGgoKQotICAgICAgICBzdGF0ID0gc2VsZi51bnBhY2tfZW51bSgpCi0gICAgICAgIGlmIHN0YXQgPT0gUFJPR19VTkFWQUlMOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYWxsIGZhaWxlZDogUFJPR19VTkFWQUlMJykKLSAgICAgICAgaWYgc3RhdCA9PSBQUk9HX01JU01BVENIOgotICAgICAgICAgICAgbG93ID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgICAgICBoaWdoID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NhbGwgZmFpbGVkOiBQUk9HX01JU01BVENIOiAlcicgJSAoKGxvdywgaGlnaCksKSkKLSAgICAgICAgaWYgc3RhdCA9PSBQUk9DX1VOQVZBSUw6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NhbGwgZmFpbGVkOiBQUk9DX1VOQVZBSUwnKQotICAgICAgICBpZiBzdGF0ID09IEdBUkJBR0VfQVJHUzoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2FsbCBmYWlsZWQ6IEdBUkJBR0VfQVJHUycpCi0gICAgICAgIGlmIHN0YXQgIT0gU1VDQ0VTUzoKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2FsbCBmYWlsZWQ6ICVyJyAlIChzdGF0LCkpCi0gICAgICAgIHJldHVybiB4aWQsIHZlcmYKLSAgICAgICAgIyBDYWxsZXIgbXVzdCBnZXQgcHJvY2VkdXJlLXNwZWNpZmljIHBhcnQgb2YgcmVwbHkKLQotCi0jIFN1YnJvdXRpbmVzIHRvIGNyZWF0ZSBvcGFxdWUgYXV0aGVudGljYXRpb24gb2JqZWN0cwotCi1kZWYgbWFrZV9hdXRoX251bGwoKToKLSAgICByZXR1cm4gJycKLQotZGVmIG1ha2VfYXV0aF91bml4KHNlZWQsIGhvc3QsIHVpZCwgZ2lkLCBncm91cHMpOgotICAgIHAgPSBQYWNrZXIoKQotICAgIHAucGFja19hdXRoX3VuaXgoc2VlZCwgaG9zdCwgdWlkLCBnaWQsIGdyb3VwcykKLSAgICByZXR1cm4gcC5nZXRfYnVmKCkKLQotZGVmIG1ha2VfYXV0aF91bml4X2RlZmF1bHQoKToKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gb3MgaW1wb3J0IGdldHVpZCwgZ2V0Z2lkCi0gICAgICAgIHVpZCA9IGdldHVpZCgpCi0gICAgICAgIGdpZCA9IGdldGdpZCgpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICB1aWQgPSBnaWQgPSAwCi0gICAgaW1wb3J0IHRpbWUKLSAgICByZXR1cm4gbWFrZV9hdXRoX3VuaXgoaW50KHRpbWUudGltZSgpLXVuaXhfZXBvY2goKSksIFwKLSAgICAgICAgICAgICAgc29ja2V0LmdldGhvc3RuYW1lKCksIHVpZCwgZ2lkLCBbXSkKLQotX3VuaXhfZXBvY2ggPSAtMQotZGVmIHVuaXhfZXBvY2goKToKLSAgICAiIiJWZXJ5IHBhaW5mdWwgY2FsY3VsYXRpb24gb2Ygd2hlbiB0aGUgVW5peCBFcG9jaCBpcy4KLQotICAgIFRoaXMgaXMgZGVmaW5lZCBhcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRpbWUudGltZSgpIG9uIEphbiAxc3QsCi0gICAgMTk3MCwgMDA6MDA6MDAgR01ULgotCi0gICAgT24gYSBVbml4IHN5c3RlbSwgdGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiAwLjAuICBPbiBhIE1hYywgdGhlCi0gICAgY2FsY3VsYXRpb25zIGFyZSBuZWVkZWQgLS0gYW5kIGhhcmQgYmVjYXVzZSBvZiBpbnRlZ2VyIG92ZXJmbG93Ci0gICAgYW5kIG90aGVyIGxpbWl0YXRpb25zLgotCi0gICAgIiIiCi0gICAgZ2xvYmFsIF91bml4X2Vwb2NoCi0gICAgaWYgX3VuaXhfZXBvY2ggPj0gMDogcmV0dXJuIF91bml4X2Vwb2NoCi0gICAgaW1wb3J0IHRpbWUKLSAgICBub3cgPSB0aW1lLnRpbWUoKQotICAgIGxvY2FsdCA9IHRpbWUubG9jYWx0aW1lKG5vdykgICAgICAgICMgKHksIG0sIGQsIGhoLCBtbSwgc3MsIC4uLiwgLi4uLCAuLi4pCi0gICAgZ210ID0gdGltZS5nbXRpbWUobm93KQotICAgIG9mZnNldCA9IHRpbWUubWt0aW1lKGxvY2FsdCkgLSB0aW1lLm1rdGltZShnbXQpCi0gICAgeSwgbSwgZCwgaGgsIG1tLCBzcyA9IDE5NzAsIDEsIDEsIDAsIDAsIDAKLSAgICBvZmZzZXQsIHNzID0gZGl2bW9kKHNzICsgb2Zmc2V0LCA2MCkKLSAgICBvZmZzZXQsIG1tID0gZGl2bW9kKG1tICsgb2Zmc2V0LCA2MCkKLSAgICBvZmZzZXQsIGhoID0gZGl2bW9kKGhoICsgb2Zmc2V0LCAyNCkKLSAgICBkID0gZCArIG9mZnNldAotICAgIF91bml4X2Vwb2NoID0gdGltZS5ta3RpbWUoKHksIG0sIGQsIGhoLCBtbSwgc3MsIDAsIDAsIDApKQotICAgIHByaW50KCJVbml4IGVwb2NoOiIsIHRpbWUuY3RpbWUoX3VuaXhfZXBvY2gpKQotICAgIHJldHVybiBfdW5peF9lcG9jaAotCi0KLSMgQ29tbW9uIGJhc2UgY2xhc3MgZm9yIGNsaWVudHMKLQotY2xhc3MgQ2xpZW50OgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHByb2csIHZlcnMsIHBvcnQpOgotICAgICAgICBzZWxmLmhvc3QgPSBob3N0Ci0gICAgICAgIHNlbGYucHJvZyA9IHByb2cKLSAgICAgICAgc2VsZi52ZXJzID0gdmVycwotICAgICAgICBzZWxmLnBvcnQgPSBwb3J0Ci0gICAgICAgIHNlbGYubWFrZXNvY2tldCgpICMgQXNzaWducyB0byBzZWxmLnNvY2sKLSAgICAgICAgc2VsZi5iaW5kc29ja2V0KCkKLSAgICAgICAgc2VsZi5jb25uc29ja2V0KCkKLSAgICAgICAgc2VsZi5sYXN0eGlkID0gMCAjIFhYWCBzaG91bGQgYmUgbW9yZSByYW5kb20/Ci0gICAgICAgIHNlbGYuYWRkcGFja2VycygpCi0gICAgICAgIHNlbGYuY3JlZCA9IE5vbmUKLSAgICAgICAgc2VsZi52ZXJmID0gTm9uZQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQotCi0gICAgZGVmIG1ha2Vzb2NrZXQoc2VsZik6Ci0gICAgICAgICMgVGhpcyBNVVNUIGJlIG92ZXJyaWRkZW4KLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdtYWtlc29ja2V0IG5vdCBkZWZpbmVkJykKLQotICAgIGRlZiBjb25uc29ja2V0KHNlbGYpOgotICAgICAgICAjIE92ZXJyaWRlIHRoaXMgaWYgeW91IGRvbid0IHdhbnQvbmVlZCBhIGNvbm5lY3Rpb24KLSAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLQotICAgIGRlZiBiaW5kc29ja2V0KHNlbGYpOgotICAgICAgICAjIE92ZXJyaWRlIHRoaXMgdG8gYmluZCB0byBhIGRpZmZlcmVudCBwb3J0IChlLmcuIHJlc2VydmVkKQotICAgICAgICBzZWxmLnNvY2suYmluZCgoJycsIDApKQotCi0gICAgZGVmIGFkZHBhY2tlcnMoc2VsZik6Ci0gICAgICAgICMgT3ZlcnJpZGUgdGhpcyB0byB1c2UgZGVyaXZlZCBjbGFzc2VzIGZyb20gUGFja2VyL1VucGFja2VyCi0gICAgICAgIHNlbGYucGFja2VyID0gUGFja2VyKCkKLSAgICAgICAgc2VsZi51bnBhY2tlciA9IFVucGFja2VyKCcnKQotCi0gICAgZGVmIG1ha2VfY2FsbChzZWxmLCBwcm9jLCBhcmdzLCBwYWNrX2Z1bmMsIHVucGFja19mdW5jKToKLSAgICAgICAgIyBEb24ndCBub3JtYWxseSBvdmVycmlkZSB0aGlzIChidXQgc2VlIEJyb2FkY2FzdCkKLSAgICAgICAgaWYgcGFja19mdW5jIGlzIE5vbmUgYW5kIGFyZ3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ25vbi1udWxsIGFyZ3Mgd2l0aCBudWxsIHBhY2tfZnVuYycpCi0gICAgICAgIHNlbGYuc3RhcnRfY2FsbChwcm9jKQotICAgICAgICBpZiBwYWNrX2Z1bmM6Ci0gICAgICAgICAgICBwYWNrX2Z1bmMoYXJncykKLSAgICAgICAgc2VsZi5kb19jYWxsKCkKLSAgICAgICAgaWYgdW5wYWNrX2Z1bmM6Ci0gICAgICAgICAgICByZXN1bHQgPSB1bnBhY2tfZnVuYygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXN1bHQgPSBOb25lCi0gICAgICAgIHNlbGYudW5wYWNrZXIuZG9uZSgpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBzdGFydF9jYWxsKHNlbGYsIHByb2MpOgotICAgICAgICAjIERvbid0IG92ZXJyaWRlIHRoaXMKLSAgICAgICAgc2VsZi5sYXN0eGlkID0geGlkID0gc2VsZi5sYXN0eGlkICsgMQotICAgICAgICBjcmVkID0gc2VsZi5ta2NyZWQoKQotICAgICAgICB2ZXJmID0gc2VsZi5ta3ZlcmYoKQotICAgICAgICBwID0gc2VsZi5wYWNrZXIKLSAgICAgICAgcC5yZXNldCgpCi0gICAgICAgIHAucGFja19jYWxsaGVhZGVyKHhpZCwgc2VsZi5wcm9nLCBzZWxmLnZlcnMsIHByb2MsIGNyZWQsIHZlcmYpCi0KLSAgICBkZWYgZG9fY2FsbChzZWxmKToKLSAgICAgICAgIyBUaGlzIE1VU1QgYmUgb3ZlcnJpZGRlbgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2RvX2NhbGwgbm90IGRlZmluZWQnKQotCi0gICAgZGVmIG1rY3JlZChzZWxmKToKLSAgICAgICAgIyBPdmVycmlkZSB0aGlzIHRvIHVzZSBtb3JlIHBvd2VyZnVsIGNyZWRlbnRpYWxzCi0gICAgICAgIGlmIHNlbGYuY3JlZCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5jcmVkID0gKEFVVEhfTlVMTCwgbWFrZV9hdXRoX251bGwoKSkKLSAgICAgICAgcmV0dXJuIHNlbGYuY3JlZAotCi0gICAgZGVmIG1rdmVyZihzZWxmKToKLSAgICAgICAgIyBPdmVycmlkZSB0aGlzIHRvIHVzZSBhIG1vcmUgcG93ZXJmdWwgdmVyaWZpZXIKLSAgICAgICAgaWYgc2VsZi52ZXJmIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnZlcmYgPSAoQVVUSF9OVUxMLCBtYWtlX2F1dGhfbnVsbCgpKQotICAgICAgICByZXR1cm4gc2VsZi52ZXJmCi0KLSAgICBkZWYgY2FsbF8wKHNlbGYpOiAgICAgICAgICAgICAgICMgUHJvY2VkdXJlIDAgaXMgYWx3YXlzIGxpa2UgdGhpcwotICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMCwgTm9uZSwgTm9uZSwgTm9uZSkKLQotCi0jIFJlY29yZC1NYXJraW5nIHN0YW5kYXJkIHN1cHBvcnQKLQotZGVmIHNlbmRmcmFnKHNvY2ssIGxhc3QsIGZyYWcpOgotICAgIHggPSBsZW4oZnJhZykKLSAgICBpZiBsYXN0OiB4ID0geCB8IDB4ODAwMDAwMDAKLSAgICBoZWFkZXIgPSAoY2hyKGludCh4Pj4yNCAmIDB4ZmYpKSArIGNocihpbnQoeD4+MTYgJiAweGZmKSkgKyBcCi0gICAgICAgICAgICAgIGNocihpbnQoeD4+OCAmIDB4ZmYpKSArIGNocihpbnQoeCAmIDB4ZmYpKSkKLSAgICBzb2NrLnNlbmQoaGVhZGVyICsgZnJhZykKLQotZGVmIHNlbmRyZWNvcmQoc29jaywgcmVjb3JkKToKLSAgICBzZW5kZnJhZyhzb2NrLCAxLCByZWNvcmQpCi0KLWRlZiByZWN2ZnJhZyhzb2NrKToKLSAgICBoZWFkZXIgPSBzb2NrLnJlY3YoNCkKLSAgICBpZiBsZW4oaGVhZGVyKSA8IDQ6Ci0gICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgeCA9IGludChvcmQoaGVhZGVyWzBdKSk8PDI0IHwgb3JkKGhlYWRlclsxXSk8PDE2IHwgXAotICAgICAgICBvcmQoaGVhZGVyWzJdKTw8OCB8IG9yZChoZWFkZXJbM10pCi0gICAgbGFzdCA9ICgoeCAmIDB4ODAwMDAwMDApICE9IDApCi0gICAgbiA9IGludCh4ICYgMHg3ZmZmZmZmZikKLSAgICBmcmFnID0gJycKLSAgICB3aGlsZSBuID4gMDoKLSAgICAgICAgYnVmID0gc29jay5yZWN2KG4pCi0gICAgICAgIGlmIG5vdCBidWY6IHJhaXNlIEVPRkVycm9yCi0gICAgICAgIG4gPSBuIC0gbGVuKGJ1ZikKLSAgICAgICAgZnJhZyA9IGZyYWcgKyBidWYKLSAgICByZXR1cm4gbGFzdCwgZnJhZwotCi1kZWYgcmVjdnJlY29yZChzb2NrKToKLSAgICByZWNvcmQgPSAnJwotICAgIGxhc3QgPSAwCi0gICAgd2hpbGUgbm90IGxhc3Q6Ci0gICAgICAgIGxhc3QsIGZyYWcgPSByZWN2ZnJhZyhzb2NrKQotICAgICAgICByZWNvcmQgPSByZWNvcmQgKyBmcmFnCi0gICAgcmV0dXJuIHJlY29yZAotCi0KLSMgVHJ5IHRvIGJpbmQgdG8gYSByZXNlcnZlZCBwb3J0IChtdXN0IGJlIHJvb3QpCi0KLWxhc3RfcmVzdl9wb3J0X3RyaWVkID0gTm9uZQotZGVmIGJpbmRyZXN2cG9ydChzb2NrLCBob3N0KToKLSAgICBnbG9iYWwgbGFzdF9yZXN2X3BvcnRfdHJpZWQKLSAgICBGSVJTVCwgTEFTVCA9IDYwMCwgMTAyNCAjIFJhbmdlIG9mIHBvcnRzIHRvIHRyeQotICAgIGlmIGxhc3RfcmVzdl9wb3J0X3RyaWVkIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCBvcwotICAgICAgICBsYXN0X3Jlc3ZfcG9ydF90cmllZCA9IEZJUlNUICsgb3MuZ2V0cGlkKCkgJSAoTEFTVC1GSVJTVCkKLSAgICBmb3IgaSBpbiByYW5nZShsYXN0X3Jlc3ZfcG9ydF90cmllZCwgTEFTVCkgKyBcCi0gICAgICAgICAgICAgIHJhbmdlKEZJUlNULCBsYXN0X3Jlc3ZfcG9ydF90cmllZCk6Ci0gICAgICAgIGxhc3RfcmVzdl9wb3J0X3RyaWVkID0gaQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzb2NrLmJpbmQoKGhvc3QsIGkpKQotICAgICAgICAgICAgcmV0dXJuIGxhc3RfcmVzdl9wb3J0X3RyaWVkCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKLSAgICAgICAgICAgIChlcnJubywgbXNnKSA9IGUKLSAgICAgICAgICAgIGlmIGVycm5vICE9IDExNDoKLSAgICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJybm8sIG1zZykKLSAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NhblwndCBhc3NpZ24gcmVzZXJ2ZWQgcG9ydCcpCi0KLQotIyBDbGllbnQgdXNpbmcgVENQIHRvIGEgc3BlY2lmaWMgcG9ydAotCi1jbGFzcyBSYXdUQ1BDbGllbnQoQ2xpZW50KToKLQotICAgIGRlZiBtYWtlc29ja2V0KHNlbGYpOgotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0KLSAgICBkZWYgZG9fY2FsbChzZWxmKToKLSAgICAgICAgY2FsbCA9IHNlbGYucGFja2VyLmdldF9idWYoKQotICAgICAgICBzZW5kcmVjb3JkKHNlbGYuc29jaywgY2FsbCkKLSAgICAgICAgcmVwbHkgPSByZWN2cmVjb3JkKHNlbGYuc29jaykKLSAgICAgICAgdSA9IHNlbGYudW5wYWNrZXIKLSAgICAgICAgdS5yZXNldChyZXBseSkKLSAgICAgICAgeGlkLCB2ZXJmID0gdS51bnBhY2tfcmVwbHloZWFkZXIoKQotICAgICAgICBpZiB4aWQgIT0gc2VsZi5sYXN0eGlkOgotICAgICAgICAgICAgIyBDYW4ndCByZWFsbHkgaGFwcGVuIHNpbmNlIHRoaXMgaXMgVENQLi4uCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3dyb25nIHhpZCBpbiByZXBseSAlciBpbnN0ZWFkIG9mICVyJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhpZCwgc2VsZi5sYXN0eGlkKSkKLQotCi0jIENsaWVudCB1c2luZyBVRFAgdG8gYSBzcGVjaWZpYyBwb3J0Ci0KLWNsYXNzIFJhd1VEUENsaWVudChDbGllbnQpOgotCi0gICAgZGVmIG1ha2Vzb2NrZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQotCi0gICAgZGVmIGRvX2NhbGwoc2VsZik6Ci0gICAgICAgIGNhbGwgPSBzZWxmLnBhY2tlci5nZXRfYnVmKCkKLSAgICAgICAgc2VsZi5zb2NrLnNlbmQoY2FsbCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBzZWxlY3QgaW1wb3J0IHNlbGVjdAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwcmludCgnV0FSTklORzogc2VsZWN0IG5vdCBmb3VuZCwgUlBDIG1heSBoYW5nJykKLSAgICAgICAgICAgIHNlbGVjdCA9IE5vbmUKLSAgICAgICAgQlVGU0laRSA9IDgxOTIgIyBNYXggVURQIGJ1ZmZlciBzaXplCi0gICAgICAgIHRpbWVvdXQgPSAxCi0gICAgICAgIGNvdW50ID0gNQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgciwgdywgeCA9IFtzZWxmLnNvY2tdLCBbXSwgW10KLSAgICAgICAgICAgIGlmIHNlbGVjdDoKLSAgICAgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0KHIsIHcsIHgsIHRpbWVvdXQpCi0gICAgICAgICAgICBpZiBzZWxmLnNvY2sgbm90IGluIHI6Ci0gICAgICAgICAgICAgICAgY291bnQgPSBjb3VudCAtIDEKLSAgICAgICAgICAgICAgICBpZiBjb3VudCA8IDA6IHJhaXNlIFJ1bnRpbWVFcnJvcigndGltZW91dCcpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDI1OiB0aW1lb3V0ID0gdGltZW91dCAqMgotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnUkVTRU5EJywgdGltZW91dCwgY291bnQKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZChjYWxsKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXBseSA9IHNlbGYuc29jay5yZWN2KEJVRlNJWkUpCi0gICAgICAgICAgICB1ID0gc2VsZi51bnBhY2tlcgotICAgICAgICAgICAgdS5yZXNldChyZXBseSkKLSAgICAgICAgICAgIHhpZCwgdmVyZiA9IHUudW5wYWNrX3JlcGx5aGVhZGVyKCkKLSAgICAgICAgICAgIGlmIHhpZCAhPSBzZWxmLmxhc3R4aWQ6Ci0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICdCQUQgeGlkJwotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhawotCi0KLSMgQ2xpZW50IHVzaW5nIFVEUCBicm9hZGNhc3QgdG8gYSBzcGVjaWZpYyBwb3J0Ci0KLWNsYXNzIFJhd0Jyb2FkY2FzdFVEUENsaWVudChSYXdVRFBDbGllbnQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGJjYXN0YWRkciwgcHJvZywgdmVycywgcG9ydCk6Ci0gICAgICAgIFJhd1VEUENsaWVudC5fX2luaXRfXyhzZWxmLCBiY2FzdGFkZHIsIHByb2csIHZlcnMsIHBvcnQpCi0gICAgICAgIHNlbGYucmVwbHlfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgc2VsZi50aW1lb3V0ID0gMzAKLQotICAgIGRlZiBjb25uc29ja2V0KHNlbGYpOgotICAgICAgICAjIERvbid0IGNvbm5lY3QgLS0gdXNlIHNlbmR0bwotICAgICAgICBzZWxmLnNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0JST0FEQ0FTVCwgMSkKLQotICAgIGRlZiBzZXRfcmVwbHlfaGFuZGxlcihzZWxmLCByZXBseV9oYW5kbGVyKToKLSAgICAgICAgc2VsZi5yZXBseV9oYW5kbGVyID0gcmVwbHlfaGFuZGxlcgotCi0gICAgZGVmIHNldF90aW1lb3V0KHNlbGYsIHRpbWVvdXQpOgotICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0ICMgVXNlIE5vbmUgZm9yIGluZmluaXRlIHRpbWVvdXQKLQotICAgIGRlZiBtYWtlX2NhbGwoc2VsZiwgcHJvYywgYXJncywgcGFja19mdW5jLCB1bnBhY2tfZnVuYyk6Ci0gICAgICAgIGlmIHBhY2tfZnVuYyBpcyBOb25lIGFuZCBhcmdzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdub24tbnVsbCBhcmdzIHdpdGggbnVsbCBwYWNrX2Z1bmMnKQotICAgICAgICBzZWxmLnN0YXJ0X2NhbGwocHJvYykKLSAgICAgICAgaWYgcGFja19mdW5jOgotICAgICAgICAgICAgcGFja19mdW5jKGFyZ3MpCi0gICAgICAgIGNhbGwgPSBzZWxmLnBhY2tlci5nZXRfYnVmKCkKLSAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhjYWxsLCAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcm9tIHNlbGVjdCBpbXBvcnQgc2VsZWN0Ci0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHByaW50KCdXQVJOSU5HOiBzZWxlY3Qgbm90IGZvdW5kLCBicm9hZGNhc3Qgd2lsbCBoYW5nJykKLSAgICAgICAgICAgIHNlbGVjdCA9IE5vbmUKLSAgICAgICAgQlVGU0laRSA9IDgxOTIgIyBNYXggVURQIGJ1ZmZlciBzaXplIChmb3IgcmVwbHkpCi0gICAgICAgIHJlcGxpZXMgPSBbXQotICAgICAgICBpZiB1bnBhY2tfZnVuYyBpcyBOb25lOgotICAgICAgICAgICAgZGVmIGR1bW15KCk6IHBhc3MKLSAgICAgICAgICAgIHVucGFja19mdW5jID0gZHVtbXkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHIsIHcsIHggPSBbc2VsZi5zb2NrXSwgW10sIFtdCi0gICAgICAgICAgICBpZiBzZWxlY3Q6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi50aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3QociwgdywgeCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0KHIsIHcsIHgsIHNlbGYudGltZW91dCkKLSAgICAgICAgICAgIGlmIHNlbGYuc29jayBub3QgaW4gcjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVwbHksIGZyb21hZGRyID0gc2VsZi5zb2NrLnJlY3Zmcm9tKEJVRlNJWkUpCi0gICAgICAgICAgICB1ID0gc2VsZi51bnBhY2tlcgotICAgICAgICAgICAgdS5yZXNldChyZXBseSkKLSAgICAgICAgICAgIHhpZCwgdmVyZiA9IHUudW5wYWNrX3JlcGx5aGVhZGVyKCkKLSAgICAgICAgICAgIGlmIHhpZCAhPSBzZWxmLmxhc3R4aWQ6Ci0jIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICdCQUQgeGlkJwotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICByZXBseSA9IHVucGFja19mdW5jKCkKLSAgICAgICAgICAgIHNlbGYudW5wYWNrZXIuZG9uZSgpCi0gICAgICAgICAgICByZXBsaWVzLmFwcGVuZCgocmVwbHksIGZyb21hZGRyKSkKLSAgICAgICAgICAgIGlmIHNlbGYucmVwbHlfaGFuZGxlcjoKLSAgICAgICAgICAgICAgICBzZWxmLnJlcGx5X2hhbmRsZXIocmVwbHksIGZyb21hZGRyKQotICAgICAgICByZXR1cm4gcmVwbGllcwotCi0KLSMgUG9ydCBtYXBwZXIgaW50ZXJmYWNlCi0KLSMgUHJvZ3JhbSBudW1iZXIsIHZlcnNpb24gYW5kIChmaXhlZCEpIHBvcnQgbnVtYmVyCi1QTUFQX1BST0cgPSAxMDAwMDAKLVBNQVBfVkVSUyA9IDIKLVBNQVBfUE9SVCA9IDExMQotCi0jIFByb2NlZHVyZSBudW1iZXJzCi1QTUFQUFJPQ19OVUxMID0gMCAgICAgICAgICAgICAgICAgICAgICAgIyAodm9pZCkgLT4gdm9pZAotUE1BUFBST0NfU0VUID0gMSAgICAgICAgICAgICAgICAgICAgICAgICMgKG1hcHBpbmcpIC0+IGJvb2wKLVBNQVBQUk9DX1VOU0VUID0gMiAgICAgICAgICAgICAgICAgICAgICAjIChtYXBwaW5nKSAtPiBib29sCi1QTUFQUFJPQ19HRVRQT1JUID0gMyAgICAgICAgICAgICAgICAgICAgIyAobWFwcGluZykgLT4gdW5zaWduZWQgaW50Ci1QTUFQUFJPQ19EVU1QID0gNCAgICAgICAgICAgICAgICAgICAgICAgIyAodm9pZCkgLT4gcG1hcGxpc3QKLVBNQVBQUk9DX0NBTExJVCA9IDUgICAgICAgICAgICAgICAgICAgICAjIChjYWxsX2FyZ3MpIC0+IGNhbGxfcmVzdWx0Ci0KLSMgQSBtYXBwaW5nIGlzIChwcm9nLCB2ZXJzLCBwcm90LCBwb3J0KSBhbmQgcHJvdCBpcyBvbmUgb2Y6Ci0KLUlQUFJPVE9fVENQID0gNgotSVBQUk9UT19VRFAgPSAxNwotCi0jIEEgcG1hcGxpc3QgaXMgYSB2YXJpYWJsZS1sZW5ndGggbGlzdCBvZiBtYXBwaW5ncywgYXMgZm9sbG93czoKLSMgZWl0aGVyICgxLCBtYXBwaW5nLCBwbWFwbGlzdCkgb3IgKDApLgotCi0jIEEgY2FsbF9hcmdzIGlzIChwcm9nLCB2ZXJzLCBwcm9jLCBhcmdzKSB3aGVyZSBhcmdzIGlzIG9wYXF1ZTsKLSMgYSBjYWxsX3Jlc3VsdCBpcyAocG9ydCwgcmVzKSB3aGVyZSByZXMgaXMgb3BhcXVlLgotCi0KLWNsYXNzIFBvcnRNYXBwZXJQYWNrZXIoUGFja2VyKToKLQotICAgIGRlZiBwYWNrX21hcHBpbmcoc2VsZiwgbWFwcGluZyk6Ci0gICAgICAgIHByb2csIHZlcnMsIHByb3QsIHBvcnQgPSBtYXBwaW5nCi0gICAgICAgIHNlbGYucGFja191aW50KHByb2cpCi0gICAgICAgIHNlbGYucGFja191aW50KHZlcnMpCi0gICAgICAgIHNlbGYucGFja191aW50KHByb3QpCi0gICAgICAgIHNlbGYucGFja191aW50KHBvcnQpCi0KLSAgICBkZWYgcGFja19wbWFwbGlzdChzZWxmLCBsaXN0KToKLSAgICAgICAgc2VsZi5wYWNrX2xpc3QobGlzdCwgc2VsZi5wYWNrX21hcHBpbmcpCi0KLSAgICBkZWYgcGFja19jYWxsX2FyZ3Moc2VsZiwgY2EpOgotICAgICAgICBwcm9nLCB2ZXJzLCBwcm9jLCBhcmdzID0gY2EKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQocHJvZykKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQodmVycykKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQocHJvYykKLSAgICAgICAgc2VsZi5wYWNrX29wYXF1ZShhcmdzKQotCi0KLWNsYXNzIFBvcnRNYXBwZXJVbnBhY2tlcihVbnBhY2tlcik6Ci0KLSAgICBkZWYgdW5wYWNrX21hcHBpbmcoc2VsZik6Ci0gICAgICAgIHByb2cgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgdmVycyA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBwcm90ID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHBvcnQgPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgcmV0dXJuIHByb2csIHZlcnMsIHByb3QsIHBvcnQKLQotICAgIGRlZiB1bnBhY2tfcG1hcGxpc3Qoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnVucGFja19saXN0KHNlbGYudW5wYWNrX21hcHBpbmcpCi0KLSAgICBkZWYgdW5wYWNrX2NhbGxfcmVzdWx0KHNlbGYpOgotICAgICAgICBwb3J0ID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHJlcyA9IHNlbGYudW5wYWNrX29wYXF1ZSgpCi0gICAgICAgIHJldHVybiBwb3J0LCByZXMKLQotCi1jbGFzcyBQYXJ0aWFsUG9ydE1hcHBlckNsaWVudDoKLQotICAgIGRlZiBhZGRwYWNrZXJzKHNlbGYpOgotICAgICAgICBzZWxmLnBhY2tlciA9IFBvcnRNYXBwZXJQYWNrZXIoKQotICAgICAgICBzZWxmLnVucGFja2VyID0gUG9ydE1hcHBlclVucGFja2VyKCcnKQotCi0gICAgZGVmIFNldChzZWxmLCBtYXBwaW5nKToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKFBNQVBQUk9DX1NFVCwgbWFwcGluZywgXAotICAgICAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfbWFwcGluZywgXAotICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrZXIudW5wYWNrX3VpbnQpCi0KLSAgICBkZWYgVW5zZXQoc2VsZiwgbWFwcGluZyk6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbChQTUFQUFJPQ19VTlNFVCwgbWFwcGluZywgXAotICAgICAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfbWFwcGluZywgXAotICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrZXIudW5wYWNrX3VpbnQpCi0KLSAgICBkZWYgR2V0cG9ydChzZWxmLCBtYXBwaW5nKToKLSAgICAgICAgcmV0dXJuIHNlbGYubWFrZV9jYWxsKFBNQVBQUk9DX0dFVFBPUlQsIG1hcHBpbmcsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX21hcHBpbmcsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2VyLnVucGFja191aW50KQotCi0gICAgZGVmIER1bXAoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbChQTUFQUFJPQ19EVU1QLCBOb25lLCBcCi0gICAgICAgICAgICAgICAgTm9uZSwgXAotICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrZXIudW5wYWNrX3BtYXBsaXN0KQotCi0gICAgZGVmIENhbGxpdChzZWxmLCBjYSk6Ci0gICAgICAgIHJldHVybiBzZWxmLm1ha2VfY2FsbChQTUFQUFJPQ19DQUxMSVQsIGNhLCBcCi0gICAgICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja19jYWxsX2FyZ3MsIFwKLSAgICAgICAgICAgICAgICBzZWxmLnVucGFja2VyLnVucGFja19jYWxsX3Jlc3VsdCkKLQotCi1jbGFzcyBUQ1BQb3J0TWFwcGVyQ2xpZW50KFBhcnRpYWxQb3J0TWFwcGVyQ2xpZW50LCBSYXdUQ1BDbGllbnQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QpOgotICAgICAgICBSYXdUQ1BDbGllbnQuX19pbml0X18oc2VsZiwgXAotICAgICAgICAgICAgICAgIGhvc3QsIFBNQVBfUFJPRywgUE1BUF9WRVJTLCBQTUFQX1BPUlQpCi0KLQotY2xhc3MgVURQUG9ydE1hcHBlckNsaWVudChQYXJ0aWFsUG9ydE1hcHBlckNsaWVudCwgUmF3VURQQ2xpZW50KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0KToKLSAgICAgICAgUmF3VURQQ2xpZW50Ll9faW5pdF9fKHNlbGYsIFwKLSAgICAgICAgICAgICAgICBob3N0LCBQTUFQX1BST0csIFBNQVBfVkVSUywgUE1BUF9QT1JUKQotCi0KLWNsYXNzIEJyb2FkY2FzdFVEUFBvcnRNYXBwZXJDbGllbnQoUGFydGlhbFBvcnRNYXBwZXJDbGllbnQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3QnJvYWRjYXN0VURQQ2xpZW50KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiY2FzdGFkZHIpOgotICAgICAgICBSYXdCcm9hZGNhc3RVRFBDbGllbnQuX19pbml0X18oc2VsZiwgXAotICAgICAgICAgICAgICAgIGJjYXN0YWRkciwgUE1BUF9QUk9HLCBQTUFQX1ZFUlMsIFBNQVBfUE9SVCkKLQotCi0jIEdlbmVyaWMgY2xpZW50cyB0aGF0IGZpbmQgdGhlaXIgc2VydmVyIHRocm91Z2ggdGhlIFBvcnQgbWFwcGVyCi0KLWNsYXNzIFRDUENsaWVudChSYXdUQ1BDbGllbnQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHByb2csIHZlcnMpOgotICAgICAgICBwbWFwID0gVENQUG9ydE1hcHBlckNsaWVudChob3N0KQotICAgICAgICBwb3J0ID0gcG1hcC5HZXRwb3J0KChwcm9nLCB2ZXJzLCBJUFBST1RPX1RDUCwgMCkpCi0gICAgICAgIHBtYXAuY2xvc2UoKQotICAgICAgICBpZiBwb3J0ID09IDA6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3Byb2dyYW0gbm90IHJlZ2lzdGVyZWQnKQotICAgICAgICBSYXdUQ1BDbGllbnQuX19pbml0X18oc2VsZiwgaG9zdCwgcHJvZywgdmVycywgcG9ydCkKLQotCi1jbGFzcyBVRFBDbGllbnQoUmF3VURQQ2xpZW50KToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwcm9nLCB2ZXJzKToKLSAgICAgICAgcG1hcCA9IFVEUFBvcnRNYXBwZXJDbGllbnQoaG9zdCkKLSAgICAgICAgcG9ydCA9IHBtYXAuR2V0cG9ydCgocHJvZywgdmVycywgSVBQUk9UT19VRFAsIDApKQotICAgICAgICBwbWFwLmNsb3NlKCkKLSAgICAgICAgaWYgcG9ydCA9PSAwOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdwcm9ncmFtIG5vdCByZWdpc3RlcmVkJykKLSAgICAgICAgUmF3VURQQ2xpZW50Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHByb2csIHZlcnMsIHBvcnQpCi0KLQotY2xhc3MgQnJvYWRjYXN0VURQQ2xpZW50KENsaWVudCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYmNhc3RhZGRyLCBwcm9nLCB2ZXJzKToKLSAgICAgICAgc2VsZi5wbWFwID0gQnJvYWRjYXN0VURQUG9ydE1hcHBlckNsaWVudChiY2FzdGFkZHIpCi0gICAgICAgIHNlbGYucG1hcC5zZXRfcmVwbHlfaGFuZGxlcihzZWxmLm15X3JlcGx5X2hhbmRsZXIpCi0gICAgICAgIHNlbGYucHJvZyA9IHByb2cKLSAgICAgICAgc2VsZi52ZXJzID0gdmVycwotICAgICAgICBzZWxmLnVzZXJfcmVwbHlfaGFuZGxlciA9IE5vbmUKLSAgICAgICAgc2VsZi5hZGRwYWNrZXJzKCkKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5wbWFwLmNsb3NlKCkKLQotICAgIGRlZiBzZXRfcmVwbHlfaGFuZGxlcihzZWxmLCByZXBseV9oYW5kbGVyKToKLSAgICAgICAgc2VsZi51c2VyX3JlcGx5X2hhbmRsZXIgPSByZXBseV9oYW5kbGVyCi0KLSAgICBkZWYgc2V0X3RpbWVvdXQoc2VsZiwgdGltZW91dCk6Ci0gICAgICAgIHNlbGYucG1hcC5zZXRfdGltZW91dCh0aW1lb3V0KQotCi0gICAgZGVmIG15X3JlcGx5X2hhbmRsZXIoc2VsZiwgcmVwbHksIGZyb21hZGRyKToKLSAgICAgICAgcG9ydCwgcmVzID0gcmVwbHkKLSAgICAgICAgc2VsZi51bnBhY2tlci5yZXNldChyZXMpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYudW5wYWNrX2Z1bmMoKQotICAgICAgICBzZWxmLnVucGFja2VyLmRvbmUoKQotICAgICAgICBzZWxmLnJlcGxpZXMuYXBwZW5kKChyZXN1bHQsIGZyb21hZGRyKSkKLSAgICAgICAgaWYgc2VsZi51c2VyX3JlcGx5X2hhbmRsZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnVzZXJfcmVwbHlfaGFuZGxlcihyZXN1bHQsIGZyb21hZGRyKQotCi0gICAgZGVmIG1ha2VfY2FsbChzZWxmLCBwcm9jLCBhcmdzLCBwYWNrX2Z1bmMsIHVucGFja19mdW5jKToKLSAgICAgICAgc2VsZi5wYWNrZXIucmVzZXQoKQotICAgICAgICBpZiBwYWNrX2Z1bmM6Ci0gICAgICAgICAgICBwYWNrX2Z1bmMoYXJncykKLSAgICAgICAgaWYgdW5wYWNrX2Z1bmMgaXMgTm9uZToKLSAgICAgICAgICAgIGRlZiBkdW1teSgpOiBwYXNzCi0gICAgICAgICAgICBzZWxmLnVucGFja19mdW5jID0gZHVtbXkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYudW5wYWNrX2Z1bmMgPSB1bnBhY2tfZnVuYwotICAgICAgICBzZWxmLnJlcGxpZXMgPSBbXQotICAgICAgICBwYWNrZWRfYXJncyA9IHNlbGYucGFja2VyLmdldF9idWYoKQotICAgICAgICBkdW1teV9yZXBsaWVzID0gc2VsZi5wbWFwLkNhbGxpdCggXAotICAgICAgICAgICAgICAgIChzZWxmLnByb2csIHNlbGYudmVycywgcHJvYywgcGFja2VkX2FyZ3MpKQotICAgICAgICByZXR1cm4gc2VsZi5yZXBsaWVzCi0KLQotIyBTZXJ2ZXIgY2xhc3NlcwotCi0jIFRoZXNlIGFyZSBub3Qgc3ltbWV0cmljIHRvIHRoZSBDbGllbnQgY2xhc3NlcwotIyBYWFggTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIHByb3ZpZGUgYXV0aG9yaXphdGlvbiBob29rcyB5ZXQKLQotY2xhc3MgU2VydmVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHByb2csIHZlcnMsIHBvcnQpOgotICAgICAgICBzZWxmLmhvc3QgPSBob3N0ICMgU2hvdWxkIG5vcm1hbGx5IGJlICcnIGZvciBkZWZhdWx0IGludGVyZmFjZQotICAgICAgICBzZWxmLnByb2cgPSBwcm9nCi0gICAgICAgIHNlbGYudmVycyA9IHZlcnMKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydCAjIFNob3VsZCBub3JtYWxseSBiZSAwIGZvciByYW5kb20gcG9ydAotICAgICAgICBzZWxmLm1ha2Vzb2NrZXQoKSAjIEFzc2lnbnMgdG8gc2VsZi5zb2NrIGFuZCBzZWxmLnByb3QKLSAgICAgICAgc2VsZi5iaW5kc29ja2V0KCkKLSAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2suZ2V0c29ja25hbWUoKQotICAgICAgICBzZWxmLmFkZHBhY2tlcnMoKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYpOgotICAgICAgICBtYXBwaW5nID0gc2VsZi5wcm9nLCBzZWxmLnZlcnMsIHNlbGYucHJvdCwgc2VsZi5wb3J0Ci0gICAgICAgIHAgPSBUQ1BQb3J0TWFwcGVyQ2xpZW50KHNlbGYuaG9zdCkKLSAgICAgICAgaWYgbm90IHAuU2V0KG1hcHBpbmcpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWdpc3RlciBmYWlsZWQnKQotCi0gICAgZGVmIHVucmVnaXN0ZXIoc2VsZik6Ci0gICAgICAgIG1hcHBpbmcgPSBzZWxmLnByb2csIHNlbGYudmVycywgc2VsZi5wcm90LCBzZWxmLnBvcnQKLSAgICAgICAgcCA9IFRDUFBvcnRNYXBwZXJDbGllbnQoc2VsZi5ob3N0KQotICAgICAgICBpZiBub3QgcC5VbnNldChtYXBwaW5nKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigndW5yZWdpc3RlciBmYWlsZWQnKQotCi0gICAgZGVmIGhhbmRsZShzZWxmLCBjYWxsKToKLSAgICAgICAgIyBEb24ndCB1c2UgdW5wYWNrX2hlYWRlciBidXQgcGFyc2UgdGhlIGhlYWRlciBwaWVjZXdpc2UKLSAgICAgICAgIyBYWFggSSBoYXZlIG5vIGlkZWEgaWYgSSBhbSB1c2luZyB0aGUgcmlnaHQgZXJyb3IgcmVzcG9uc2VzIQotICAgICAgICBzZWxmLnVucGFja2VyLnJlc2V0KGNhbGwpCi0gICAgICAgIHNlbGYucGFja2VyLnJlc2V0KCkKLSAgICAgICAgeGlkID0gc2VsZi51bnBhY2tlci51bnBhY2tfdWludCgpCi0gICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludCh4aWQpCi0gICAgICAgIHRlbXAgPSBzZWxmLnVucGFja2VyLnVucGFja19lbnVtKCkKLSAgICAgICAgaWYgdGVtcCAhPSBDQUxMOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUgIyBOb3Qgd29ydGh5IG9mIGEgcmVwbHkKLSAgICAgICAgc2VsZi5wYWNrZXIucGFja191aW50KFJFUExZKQotICAgICAgICB0ZW1wID0gc2VsZi51bnBhY2tlci51bnBhY2tfdWludCgpCi0gICAgICAgIGlmIHRlbXAgIT0gUlBDVkVSU0lPTjoKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChNU0dfREVOSUVEKQotICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja191aW50KFJQQ19NSVNNQVRDSCkKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChSUENWRVJTSU9OKQotICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja191aW50KFJQQ1ZFUlNJT04pCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5wYWNrZXIuZ2V0X2J1ZigpCi0gICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChNU0dfQUNDRVBURUQpCi0gICAgICAgIHNlbGYucGFja2VyLnBhY2tfYXV0aCgoQVVUSF9OVUxMLCBtYWtlX2F1dGhfbnVsbCgpKSkKLSAgICAgICAgcHJvZyA9IHNlbGYudW5wYWNrZXIudW5wYWNrX3VpbnQoKQotICAgICAgICBpZiBwcm9nICE9IHNlbGYucHJvZzoKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChQUk9HX1VOQVZBSUwpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5wYWNrZXIuZ2V0X2J1ZigpCi0gICAgICAgIHZlcnMgPSBzZWxmLnVucGFja2VyLnVucGFja191aW50KCkKLSAgICAgICAgaWYgdmVycyAhPSBzZWxmLnZlcnM6Ci0gICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3VpbnQoUFJPR19NSVNNQVRDSCkKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChzZWxmLnZlcnMpCi0gICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3VpbnQoc2VsZi52ZXJzKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFja2VyLmdldF9idWYoKQotICAgICAgICBwcm9jID0gc2VsZi51bnBhY2tlci51bnBhY2tfdWludCgpCi0gICAgICAgIG1ldGhuYW1lID0gJ2hhbmRsZV8nICsgcmVwcihwcm9jKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCBtZXRobmFtZSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja191aW50KFBST0NfVU5BVkFJTCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnBhY2tlci5nZXRfYnVmKCkKLSAgICAgICAgY3JlZCA9IHNlbGYudW5wYWNrZXIudW5wYWNrX2F1dGgoKQotICAgICAgICB2ZXJmID0gc2VsZi51bnBhY2tlci51bnBhY2tfYXV0aCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1ldGgoKSAjIFVucGFjayBhcmdzLCBjYWxsIHR1cm5fYXJvdW5kKCksIHBhY2sgcmVwbHkKLSAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgR2FyYmFnZUFyZ3MpOgotICAgICAgICAgICAgIyBUb28gZmV3IG9yIHRvbyBtYW55IGFyZ3VtZW50cwotICAgICAgICAgICAgc2VsZi5wYWNrZXIucmVzZXQoKQotICAgICAgICAgICAgc2VsZi5wYWNrZXIucGFja191aW50KHhpZCkKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChSRVBMWSkKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfdWludChNU0dfQUNDRVBURUQpCi0gICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX2F1dGgoKEFVVEhfTlVMTCwgbWFrZV9hdXRoX251bGwoKSkpCi0gICAgICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3VpbnQoR0FSQkFHRV9BUkdTKQotICAgICAgICByZXR1cm4gc2VsZi5wYWNrZXIuZ2V0X2J1ZigpCi0KLSAgICBkZWYgdHVybl9hcm91bmQoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudW5wYWNrZXIuZG9uZSgpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBHYXJiYWdlQXJncwotICAgICAgICBzZWxmLnBhY2tlci5wYWNrX3VpbnQoU1VDQ0VTUykKLQotICAgIGRlZiBoYW5kbGVfMChzZWxmKTogIyBIYW5kbGUgTlVMTCBtZXNzYWdlCi0gICAgICAgIHNlbGYudHVybl9hcm91bmQoKQotCi0gICAgZGVmIG1ha2Vzb2NrZXQoc2VsZik6Ci0gICAgICAgICMgVGhpcyBNVVNUIGJlIG92ZXJyaWRkZW4KLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdtYWtlc29ja2V0IG5vdCBkZWZpbmVkJykKLQotICAgIGRlZiBiaW5kc29ja2V0KHNlbGYpOgotICAgICAgICAjIE92ZXJyaWRlIHRoaXMgdG8gYmluZCB0byBhIGRpZmZlcmVudCBwb3J0IChlLmcuIHJlc2VydmVkKQotICAgICAgICBzZWxmLnNvY2suYmluZCgoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQotCi0gICAgZGVmIGFkZHBhY2tlcnMoc2VsZik6Ci0gICAgICAgICMgT3ZlcnJpZGUgdGhpcyB0byB1c2UgZGVyaXZlZCBjbGFzc2VzIGZyb20gUGFja2VyL1VucGFja2VyCi0gICAgICAgIHNlbGYucGFja2VyID0gUGFja2VyKCkKLSAgICAgICAgc2VsZi51bnBhY2tlciA9IFVucGFja2VyKCcnKQotCi0KLWNsYXNzIFRDUFNlcnZlcihTZXJ2ZXIpOgotCi0gICAgZGVmIG1ha2Vzb2NrZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5wcm90ID0gSVBQUk9UT19UQ1AKLQotICAgIGRlZiBsb29wKHNlbGYpOgotICAgICAgICBzZWxmLnNvY2subGlzdGVuKDApCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzZWxmLnNlc3Npb24oc2VsZi5zb2NrLmFjY2VwdCgpKQotCi0gICAgZGVmIHNlc3Npb24oc2VsZiwgY29ubmVjdGlvbik6Ci0gICAgICAgIHNvY2ssIChob3N0LCBwb3J0KSA9IGNvbm5lY3Rpb24KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjYWxsID0gcmVjdnJlY29yZChzb2NrKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICBwcmludCgnc29ja2V0IGVycm9yOicsIG1zZykKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcmVwbHkgPSBzZWxmLmhhbmRsZShjYWxsKQotICAgICAgICAgICAgaWYgcmVwbHkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VuZHJlY29yZChzb2NrLCByZXBseSkKLQotICAgIGRlZiBmb3JraW5nbG9vcChzZWxmKToKLSAgICAgICAgIyBMaWtlIGxvb3AgYnV0IHVzZXMgZm9ya3Nlc3Npb24oKQotICAgICAgICBzZWxmLnNvY2subGlzdGVuKDApCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBzZWxmLmZvcmtzZXNzaW9uKHNlbGYuc29jay5hY2NlcHQoKSkKLQotICAgIGRlZiBmb3Jrc2Vzc2lvbihzZWxmLCBjb25uZWN0aW9uKToKLSAgICAgICAgIyBMaWtlIHNlc3Npb24gYnV0IGZvcmtzIG9mZiBhIHN1YnByb2Nlc3MKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgICMgV2FpdCBmb3IgZGVjZWFzZWQgY2hpbGRyZW4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoMCwgMSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBwaWQgPSBOb25lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgaWYgcGlkOiAjIFBhcmVudAotICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25bMF0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgIyBDaGlsZAotICAgICAgICAgICAgc2VsZi5zZXNzaW9uKGNvbm5lY3Rpb24pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBkb24ndCBmYWxsIHRocm91Z2ggaW4gdGhlIHBhcmVudAotICAgICAgICAgICAgaWYgcGlkID09IDA6Ci0gICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKLQotCi1jbGFzcyBVRFBTZXJ2ZXIoU2VydmVyKToKLQotICAgIGRlZiBtYWtlc29ja2V0KHNlbGYpOgotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKLSAgICAgICAgc2VsZi5wcm90ID0gSVBQUk9UT19VRFAKLQotICAgIGRlZiBsb29wKHNlbGYpOgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc2VsZi5zZXNzaW9uKCkKLQotICAgIGRlZiBzZXNzaW9uKHNlbGYpOgotICAgICAgICBjYWxsLCBob3N0X3BvcnQgPSBzZWxmLnNvY2sucmVjdmZyb20oODE5MikKLSAgICAgICAgcmVwbHkgPSBzZWxmLmhhbmRsZShjYWxsKQotICAgICAgICBpZiByZXBseSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuc29jay5zZW5kdG8ocmVwbHksIGhvc3RfcG9ydCkKLQotCi0jIFNpbXBsZSB0ZXN0IHByb2dyYW0gLS0gZHVtcCBsb2NhbCBwb3J0bWFwcGVyIHN0YXR1cwotCi1kZWYgdGVzdCgpOgotICAgIHBtYXAgPSBVRFBQb3J0TWFwcGVyQ2xpZW50KCcnKQotICAgIGxpc3QgPSBwbWFwLkR1bXAoKQotICAgIGxpc3Quc29ydCgpCi0gICAgZm9yIHByb2csIHZlcnMsIHByb3QsIHBvcnQgaW4gbGlzdDoKLSAgICAgICAgcHJpbnQocHJvZywgdmVycywgZW5kPScgJykKLSAgICAgICAgaWYgcHJvdCA9PSBJUFBST1RPX1RDUDogcHJpbnQoJ3RjcCcsIGVuZD0nICcpCi0gICAgICAgIGVsaWYgcHJvdCA9PSBJUFBST1RPX1VEUDogcHJpbnQoJ3VkcCcsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KHByb3QsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHBvcnQpCi0KLQotIyBUZXN0IHByb2dyYW0gZm9yIGJyb2FkY2FzdCBvcGVyYXRpb24gLS0gZHVtcCBldmVyeWJvZHkncyBwb3J0bWFwcGVyIHN0YXR1cwotCi1kZWYgdGVzdGJjYXN0KCk6Ci0gICAgaW1wb3J0IHN5cwotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgYmNhc3RhZGRyID0gc3lzLmFyZ3ZbMV0KLSAgICBlbHNlOgotICAgICAgICBiY2FzdGFkZHIgPSAnPGJyb2FkY2FzdD4nCi0gICAgZGVmIHJoKHJlcGx5LCBmcm9tYWRkcik6Ci0gICAgICAgIGhvc3QsIHBvcnQgPSBmcm9tYWRkcgotICAgICAgICBwcmludChob3N0ICsgJ1x0JyArIHJlcHIocmVwbHkpKQotICAgIHBtYXAgPSBCcm9hZGNhc3RVRFBQb3J0TWFwcGVyQ2xpZW50KGJjYXN0YWRkcikKLSAgICBwbWFwLnNldF9yZXBseV9oYW5kbGVyKHJoKQotICAgIHBtYXAuc2V0X3RpbWVvdXQoNSkKLSAgICByZXBsaWVzID0gcG1hcC5HZXRwb3J0KCgxMDAwMDIsIDEsIElQUFJPVE9fVURQLCAwKSkKLQotCi0jIFRlc3QgcHJvZ3JhbSBmb3Igc2VydmVyLCB3aXRoIGNvcnJlc3BvbmRpbmcgY2xpZW50Ci0jIE9uIG1hY2hpbmUgQTogcHl0aG9uIC1jICdpbXBvcnQgcnBjOyBycGMudGVzdHN2cigpJwotIyBPbiBtYWNoaW5lIEI6IHB5dGhvbiAtYyAnaW1wb3J0IHJwYzsgcnBjLnRlc3RjbHQoKScgQQotIyAoQSBtYXkgYmUgPT0gQikKLQotZGVmIHRlc3RzdnIoKToKLSAgICAjIFNpbXBsZSB0ZXN0IGNsYXNzIC0tIHByb2MgMSBkb3VibGVzIGl0cyBzdHJpbmcgYXJndW1lbnQgYXMgcmVwbHkKLSAgICBjbGFzcyBTKFVEUFNlcnZlcik6Ci0gICAgICAgIGRlZiBoYW5kbGVfMShzZWxmKToKLSAgICAgICAgICAgIGFyZyA9IHNlbGYudW5wYWNrZXIudW5wYWNrX3N0cmluZygpCi0gICAgICAgICAgICBzZWxmLnR1cm5fYXJvdW5kKCkKLSAgICAgICAgICAgIHByaW50KCdSUEMgZnVuY3Rpb24gMSBjYWxsZWQsIGFyZycsIHJlcHIoYXJnKSkKLSAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfc3RyaW5nKGFyZyArIGFyZykKLSAgICAjCi0gICAgcyA9IFMoJycsIDB4MjAwMDAwMDAsIDEsIDApCi0gICAgdHJ5OgotICAgICAgICBzLnVucmVnaXN0ZXIoKQotICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgbXNnOgotICAgICAgICBwcmludCgnUnVudGltZUVycm9yOicsIG1zZywgJyhpZ25vcmVkKScpCi0gICAgcy5yZWdpc3RlcigpCi0gICAgcHJpbnQoJ1NlcnZpY2Ugc3RhcnRlZC4uLicpCi0gICAgdHJ5OgotICAgICAgICBzLmxvb3AoKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHMudW5yZWdpc3RlcigpCi0gICAgICAgIHByaW50KCdTZXJ2aWNlIGludGVycnVwdGVkLicpCi0KLQotZGVmIHRlc3RjbHQoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOiBob3N0ID0gc3lzLmFyZ3ZbMV0KLSAgICBlbHNlOiBob3N0ID0gJycKLSAgICAjIENsaWVudCBmb3IgYWJvdmUgc2VydmVyCi0gICAgY2xhc3MgQyhVRFBDbGllbnQpOgotICAgICAgICBkZWYgY2FsbF8xKHNlbGYsIGFyZyk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5tYWtlX2NhbGwoMSwgYXJnLCBcCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucGFja2VyLnBhY2tfc3RyaW5nLCBcCi0gICAgICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrZXIudW5wYWNrX3N0cmluZykKLSAgICBjID0gQyhob3N0LCAweDIwMDAwMDAwLCAxKQotICAgIHByaW50KCdtYWtpbmcgY2FsbC4uLicpCi0gICAgcmVwbHkgPSBjLmNhbGxfMSgnaGVsbG8sIHdvcmxkLCAnKQotICAgIHByaW50KCdjYWxsIHJldHVybmVkJywgcmVwcihyZXBseSkpCmRpZmYgLS1naXQgYS9EZW1vL3JwYy90ZXN0IGIvRGVtby9ycGMvdGVzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmEyMjBmMi4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy90ZXN0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotOiAke1BZVEhPTj1weXRob259Ci06ICR7U0VSVkVSPWNoYXJvbi5jd2kubmx9Ci0KLXNldCAteGUKLQotJFBZVEhPTiAtYyAnZnJvbSBycGMgaW1wb3J0IHRlc3Q7IHRlc3QoKScKLSRQWVRIT04gLWMgJ2Zyb20gcnBjIGltcG9ydCB0ZXN0OyB0ZXN0KCknICR7U0VSVkVSfQotCi0kUFlUSE9OIC1jICdmcm9tIHJwYyBpbXBvcnQgdGVzdHN2cjsgdGVzdHN2cigpJyAmCi1QSUQ9JCEKLXNsZWVwIDIKLSRQWVRIT04gLWMgJ2Zyb20gcnBjIGltcG9ydCB0ZXN0Y2x0OyB0ZXN0Y2x0KCknCi1raWxsIC0yICRQSUQKLQotJFBZVEhPTiAtYyAnZnJvbSBtb3VudGNsaWVudCBpbXBvcnQgdGVzdDsgdGVzdCgpJwotJFBZVEhPTiAtYyAnZnJvbSBtb3VudGNsaWVudCBpbXBvcnQgdGVzdDsgdGVzdCgpJyBnYXRla2VlcGVyLmRlYy5jb20KLQotJFBZVEhPTiAtYyAnZnJvbSBuZnNjbGllbnQgaW1wb3J0IHRlc3Q7IHRlc3QoKScKLSRQWVRIT04gLWMgJ2Zyb20gbmZzY2xpZW50IGltcG9ydCB0ZXN0OyB0ZXN0KCknIGdhdGVrZWVwZXIuZGVjLmNvbQotJFBZVEhPTiAtYyAnZnJvbSBuZnNjbGllbnQgaW1wb3J0IHRlc3Q7IHRlc3QoKScgZ2F0ZWtlZXBlci5kZWMuY29tIC9hcmNoaXZlCi0KLSRQWVRIT04gLWMgJ2Zyb20gcm51c2Vyc2NsaWVudCBpbXBvcnQgdGVzdDsgdGVzdCgpJyAnJwotCi0kUFlUSE9OIC1jICdmcm9tIHJwYyBpbXBvcnQgdGVzdGJjYXN0OyB0ZXN0YmNhc3QoKScKZGlmZiAtLWdpdCBhL0RlbW8vcnBjL3hkci5weSBiL0RlbW8vcnBjL3hkci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ1ZjljMy4uMDAwMDAwMAotLS0gYS9EZW1vL3JwYy94ZHIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotIyBJbXBsZW1lbnQgKGEgc3Vic2V0IG9mKSBTdW4gWERSIC0tIFJGQzEwMTQuCi0KLQotdHJ5OgotICAgIGltcG9ydCBzdHJ1Y3QKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBzdHJ1Y3QgPSBOb25lCi0KLQotTG9uZyA9IHR5cGUoMCkKLQotCi1jbGFzcyBQYWNrZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYucmVzZXQoKQotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBzZWxmLmJ1ZiA9ICcnCi0KLSAgICBkZWYgZ2V0X2J1ZihzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYnVmCi0KLSAgICBkZWYgcGFja191aW50KHNlbGYsIHgpOgotICAgICAgICBzZWxmLmJ1ZiA9IHNlbGYuYnVmICsgXAotICAgICAgICAgICAgICAgIChjaHIoaW50KHg+PjI0ICYgMHhmZikpICsgY2hyKGludCh4Pj4xNiAmIDB4ZmYpKSArIFwKLSAgICAgICAgICAgICAgICAgY2hyKGludCh4Pj44ICYgMHhmZikpICsgY2hyKGludCh4ICYgMHhmZikpKQotICAgIGlmIHN0cnVjdCBhbmQgc3RydWN0LnBhY2soJ2wnLCAxKSA9PSAnXDBcMFwwXDEnOgotICAgICAgICBkZWYgcGFja191aW50KHNlbGYsIHgpOgotICAgICAgICAgICAgaWYgdHlwZSh4KSA9PSBMb25nOgotICAgICAgICAgICAgICAgIHggPSBpbnQoKHggKyAweDgwMDAwMDAwKSAlIDB4MTAwMDAwMDAwIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gMHg4MDAwMDAwMCkKLSAgICAgICAgICAgIHNlbGYuYnVmID0gc2VsZi5idWYgKyBzdHJ1Y3QucGFjaygnbCcsIHgpCi0KLSAgICBwYWNrX2ludCA9IHBhY2tfdWludAotCi0gICAgcGFja19lbnVtID0gcGFja19pbnQKLQotICAgIGRlZiBwYWNrX2Jvb2woc2VsZiwgeCk6Ci0gICAgICAgIGlmIHg6IHNlbGYuYnVmID0gc2VsZi5idWYgKyAnXDBcMFwwXDEnCi0gICAgICAgIGVsc2U6IHNlbGYuYnVmID0gc2VsZi5idWYgKyAnXDBcMFwwXDAnCi0KLSAgICBkZWYgcGFja191aHlwZXIoc2VsZiwgeCk6Ci0gICAgICAgIHNlbGYucGFja191aW50KGludCh4Pj4zMiAmIDB4ZmZmZmZmZmYpKQotICAgICAgICBzZWxmLnBhY2tfdWludChpbnQoeCAmIDB4ZmZmZmZmZmYpKQotCi0gICAgcGFja19oeXBlciA9IHBhY2tfdWh5cGVyCi0KLSAgICBkZWYgcGFja19mbG9hdChzZWxmLCB4KToKLSAgICAgICAgIyBYWFgKLSAgICAgICAgc2VsZi5idWYgPSBzZWxmLmJ1ZiArIHN0cnVjdC5wYWNrKCdmJywgeCkKLQotICAgIGRlZiBwYWNrX2RvdWJsZShzZWxmLCB4KToKLSAgICAgICAgIyBYWFgKLSAgICAgICAgc2VsZi5idWYgPSBzZWxmLmJ1ZiArIHN0cnVjdC5wYWNrKCdkJywgeCkKLQotICAgIGRlZiBwYWNrX2ZzdHJpbmcoc2VsZiwgbiwgcyk6Ci0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZnN0cmluZyBzaXplIG11c3QgYmUgbm9ubmVnYXRpdmUnKQotICAgICAgICBuID0gKChuICsgMykvLzQpKjQKLSAgICAgICAgZGF0YSA9IHNbOm5dCi0gICAgICAgIGRhdGEgPSBkYXRhICsgKG4gLSBsZW4oZGF0YSkpICogJ1wwJwotICAgICAgICBzZWxmLmJ1ZiA9IHNlbGYuYnVmICsgZGF0YQotCi0gICAgcGFja19mb3BhcXVlID0gcGFja19mc3RyaW5nCi0KLSAgICBkZWYgcGFja19zdHJpbmcoc2VsZiwgcyk6Ci0gICAgICAgIG4gPSBsZW4ocykKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQobikKLSAgICAgICAgc2VsZi5wYWNrX2ZzdHJpbmcobiwgcykKLQotICAgIHBhY2tfb3BhcXVlID0gcGFja19zdHJpbmcKLQotICAgIGRlZiBwYWNrX2xpc3Qoc2VsZiwgbGlzdCwgcGFja19pdGVtKToKLSAgICAgICAgZm9yIGl0ZW0gaW4gbGlzdDoKLSAgICAgICAgICAgIHNlbGYucGFja191aW50KDEpCi0gICAgICAgICAgICBwYWNrX2l0ZW0oaXRlbSkKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoMCkKLQotICAgIGRlZiBwYWNrX2ZhcnJheShzZWxmLCBuLCBsaXN0LCBwYWNrX2l0ZW0pOgotICAgICAgICBpZiBsZW4obGlzdCkgIT0gbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dyb25nIGFycmF5IHNpemUnKQotICAgICAgICBmb3IgaXRlbSBpbiBsaXN0OgotICAgICAgICAgICAgcGFja19pdGVtKGl0ZW0pCi0KLSAgICBkZWYgcGFja19hcnJheShzZWxmLCBsaXN0LCBwYWNrX2l0ZW0pOgotICAgICAgICBuID0gbGVuKGxpc3QpCi0gICAgICAgIHNlbGYucGFja191aW50KG4pCi0gICAgICAgIHNlbGYucGFja19mYXJyYXkobiwgbGlzdCwgcGFja19pdGVtKQotCi0KLWNsYXNzIFVucGFja2VyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgotICAgICAgICBzZWxmLnJlc2V0KGRhdGEpCi0KLSAgICBkZWYgcmVzZXQoc2VsZiwgZGF0YSk6Ci0gICAgICAgIHNlbGYuYnVmID0gZGF0YQotICAgICAgICBzZWxmLnBvcyA9IDAKLQotICAgIGRlZiBkb25lKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnBvcyA8IGxlbihzZWxmLmJ1Zik6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3VuZXh0cmFjdGVkIGRhdGEgcmVtYWlucycpCi0KLSAgICBkZWYgdW5wYWNrX3VpbnQoc2VsZik6Ci0gICAgICAgIGkgPSBzZWxmLnBvcwotICAgICAgICBzZWxmLnBvcyA9IGogPSBpKzQKLSAgICAgICAgZGF0YSA9IHNlbGYuYnVmW2k6al0KLSAgICAgICAgaWYgbGVuKGRhdGEpIDwgNDoKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgIHggPSBpbnQob3JkKGRhdGFbMF0pKTw8MjQgfCBvcmQoZGF0YVsxXSk8PDE2IHwgXAotICAgICAgICAgICAgICAgIG9yZChkYXRhWzJdKTw8OCB8IG9yZChkYXRhWzNdKQotICAgICAgICAjIFJldHVybiBhIFB5dGhvbiBsb25nIG9ubHkgaWYgdGhlIHZhbHVlIGlzIG5vdCByZXByZXNlbnRhYmxlCi0gICAgICAgICMgYXMgYSBub25uZWdhdGl2ZSBQeXRob24gaW50Ci0gICAgICAgIGlmIHggPCAweDgwMDAwMDAwOiB4ID0gaW50KHgpCi0gICAgICAgIHJldHVybiB4Ci0gICAgaWYgc3RydWN0IGFuZCBzdHJ1Y3QudW5wYWNrKCdsJywgJ1wwXDBcMFwxJykgPT0gMToKLSAgICAgICAgZGVmIHVucGFja191aW50KHNlbGYpOgotICAgICAgICAgICAgaSA9IHNlbGYucG9zCi0gICAgICAgICAgICBzZWxmLnBvcyA9IGogPSBpKzQKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmJ1ZltpOmpdCi0gICAgICAgICAgICBpZiBsZW4oZGF0YSkgPCA0OgotICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnbCcsIGRhdGEpCi0KLSAgICBkZWYgdW5wYWNrX2ludChzZWxmKToKLSAgICAgICAgeCA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBpZiB4ID49IDB4ODAwMDAwMDA6IHggPSB4IC0gMHgxMDAwMDAwMDAKLSAgICAgICAgcmV0dXJuIGludCh4KQotCi0gICAgdW5wYWNrX2VudW0gPSB1bnBhY2tfaW50Ci0KLSAgICB1bnBhY2tfYm9vbCA9IHVucGFja19pbnQKLQotICAgIGRlZiB1bnBhY2tfdWh5cGVyKHNlbGYpOgotICAgICAgICBoaSA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICBsbyA9IHNlbGYudW5wYWNrX3VpbnQoKQotICAgICAgICByZXR1cm4gaW50KGhpKTw8MzIgfCBsbwotCi0gICAgZGVmIHVucGFja19oeXBlcihzZWxmKToKLSAgICAgICAgeCA9IHNlbGYudW5wYWNrX3VoeXBlcigpCi0gICAgICAgIGlmIHggPj0gMHg4MDAwMDAwMDAwMDAwMDAwOiB4ID0geCAtIDB4MTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgICAgcmV0dXJuIHgKLQotICAgIGRlZiB1bnBhY2tfZmxvYXQoc2VsZik6Ci0gICAgICAgICMgWFhYCi0gICAgICAgIGkgPSBzZWxmLnBvcwotICAgICAgICBzZWxmLnBvcyA9IGogPSBpKzQKLSAgICAgICAgZGF0YSA9IHNlbGYuYnVmW2k6al0KLSAgICAgICAgaWYgbGVuKGRhdGEpIDwgNDoKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCdmJywgZGF0YSlbMF0KLQotICAgIGRlZiB1bnBhY2tfZG91YmxlKHNlbGYpOgotICAgICAgICAjIFhYWAotICAgICAgICBpID0gc2VsZi5wb3MKLSAgICAgICAgc2VsZi5wb3MgPSBqID0gaSs4Ci0gICAgICAgIGRhdGEgPSBzZWxmLmJ1ZltpOmpdCi0gICAgICAgIGlmIGxlbihkYXRhKSA8IDg6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgotICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnZCcsIGRhdGEpWzBdCi0KLSAgICBkZWYgdW5wYWNrX2ZzdHJpbmcoc2VsZiwgbik6Ci0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZnN0cmluZyBzaXplIG11c3QgYmUgbm9ubmVnYXRpdmUnKQotICAgICAgICBpID0gc2VsZi5wb3MKLSAgICAgICAgaiA9IGkgKyAobiszKS8vNCo0Ci0gICAgICAgIGlmIGogPiBsZW4oc2VsZi5idWYpOgotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgc2VsZi5wb3MgPSBqCi0gICAgICAgIHJldHVybiBzZWxmLmJ1ZltpOmkrbl0KLQotICAgIHVucGFja19mb3BhcXVlID0gdW5wYWNrX2ZzdHJpbmcKLQotICAgIGRlZiB1bnBhY2tfc3RyaW5nKHNlbGYpOgotICAgICAgICBuID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgIHJldHVybiBzZWxmLnVucGFja19mc3RyaW5nKG4pCi0KLSAgICB1bnBhY2tfb3BhcXVlID0gdW5wYWNrX3N0cmluZwotCi0gICAgZGVmIHVucGFja19saXN0KHNlbGYsIHVucGFja19pdGVtKToKLSAgICAgICAgbGlzdCA9IFtdCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICB4ID0gc2VsZi51bnBhY2tfdWludCgpCi0gICAgICAgICAgICBpZiB4ID09IDA6IGJyZWFrCi0gICAgICAgICAgICBpZiB4ICE9IDE6Ci0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCcwIG9yIDEgZXhwZWN0ZWQsIGdvdCAlcicgJSAoeCwgKSkKLSAgICAgICAgICAgIGl0ZW0gPSB1bnBhY2tfaXRlbSgpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChpdGVtKQotICAgICAgICByZXR1cm4gbGlzdAotCi0gICAgZGVmIHVucGFja19mYXJyYXkoc2VsZiwgbiwgdW5wYWNrX2l0ZW0pOgotICAgICAgICBsaXN0ID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCh1bnBhY2tfaXRlbSgpKQotICAgICAgICByZXR1cm4gbGlzdAotCi0gICAgZGVmIHVucGFja19hcnJheShzZWxmLCB1bnBhY2tfaXRlbSk6Ci0gICAgICAgIG4gPSBzZWxmLnVucGFja191aW50KCkKLSAgICAgICAgcmV0dXJuIHNlbGYudW5wYWNrX2ZhcnJheShuLCB1bnBhY2tfaXRlbSkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9SRUFETUUgYi9EZW1vL3NjcmlwdHMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTdiOWI3Li4wMDAwMDAwCi0tLSBhL0RlbW8vc2NyaXB0cy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGNvbGxlY3Rpb24gb2YgZXhlY3V0YWJsZSBQeXRob24gc2NyaXB0cy4KLQotU2VlIGFsc28gdGhlIFRvb2xzL3NjcmlwdHMgZGlyZWN0b3J5IQotCi1iZWVyLnB5CQkJUHJpbnQgdGhlIGNsYXNzaWMgJ2JvdHRsZXMgb2YgYmVlcicgbGlzdC4KLWVxZml4LnB5CQlGaXggLnB5IGZpbGVzIHRvIHVzZSB0aGUgY29ycmVjdCBlcXVhbGl0eSB0ZXN0IG9wZXJhdG9yCi1mYWN0LnB5CQkJRmFjdG9yaXplIG51bWJlcnMKLWZpbmQtdW5hbWUucHkJCVNlYXJjaCBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIHVzaW5nIHJlZ2V4cHMKLWZyb20ucHkJCQlTdW1tYXJpemUgbWFpbGJveAotbHB3YXRjaC5weQkJV2F0Y2ggQlNEIGxpbmUgcHJpbnRlciBxdWV1ZXMKLW1ha2VkaXIucHkJCUxpa2UgbWtkaXIgLXAKLW1hcmtvdi5weQkJTWFya292IGNoYWluIHNpbXVsYXRpb24gb2Ygd29yZHMgb3IgY2hhcmFjdGVycwotbWJveGNvbnZlcnQucHkJCUNvbnZlcnQgTUggb3IgTU1ERiBtYWlsYm94ZXMgdG8gdW5peCBtYWlsYm94IGZvcm1hdAotbW9yc2UucHkJCVByb2R1Y2UgbW9yc2UgY29kZSAoYXMgYW4gQUlGRiBmaWxlKQotbmV3c2xpc3QucHkJCUxpc3QgYWxsIG5ld3Nncm91cHMgb24gYSBOTlRQIHNlcnZlciBhcyBIVE1MIHBhZ2VzCi1waS5weQkJCVByaW50IGFsbCBkaWdpdHMgb2YgcGkgLS0gZ2l2ZW4gZW5vdWdoIHRpbWUgYW5kIG1lbW9yeQotcHAucHkJCQlFbXVsYXRlIHNvbWUgUGVybCBjb21tYW5kIGxpbmUgb3B0aW9ucwotcHJpbWVzLnB5CQlQcmludCBwcmltZSBudW1iZXJzCi1xdWVlbnMucHkJCURpamtzdHJhJ3Mgc29sdXRpb24gdG8gV2lydGgncyAiTiBRdWVlbnMgcHJvYmxlbSIKLXNjcmlwdC5weQkJRXF1aXZhbGVudCB0byBCU0Qgc2NyaXB0KDEpIC0tIGJ5IFN0ZWVuIEx1bWhvbHQKLXVuYmlydGhkYXkucHkJCVByaW50IHVuYmlydGhkYXkgY291bnQKLXVwZGF0ZS5weQkJVXBkYXRlIGEgYnVuY2ggb2YgZmlsZXMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0LgpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2VxZml4LnB5IGIvRGVtby9zY3JpcHRzL2VxZml4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0N2MwMGQzLi4wMDAwMDAwCi0tLSBhL0RlbW8vc2NyaXB0cy9lcWZpeC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5OCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgRml4IFB5dGhvbiBzb3VyY2UgZmlsZXMgdG8gdXNlIHRoZSBuZXcgZXF1YWxpdHkgdGVzdCBvcGVyYXRvciwgaS5lLiwKLSMgICAgICAgaWYgeCA9IHk6IC4uLgotIyBpcyBjaGFuZ2VkIHRvCi0jICAgICAgIGlmIHggPT0geTogLi4uCi0jIFRoZSBzY3JpcHQgY29ycmVjdGx5IHRva2VuaXplcyB0aGUgUHl0aG9uIHByb2dyYW0gdG8gcmVsaWFibHkKLSMgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhc3NpZ25tZW50cyBhbmQgZXF1YWxpdHkgdGVzdHMuCi0jCi0jIENvbW1hbmQgbGluZSBhcmd1bWVudHMgYXJlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHRvIGJlIHByb2Nlc3NlZC4KLSMgRGlyZWN0b3JpZXMgYXJlIHNlYXJjaGVkIHJlY3Vyc2l2ZWx5IGZvciBmaWxlcyB3aG9zZSBuYW1lIGxvb2tzCi0jIGxpa2UgYSBweXRob24gbW9kdWxlLgotIyBTeW1ib2xpYyBsaW5rcyBhcmUgYWx3YXlzIGlnbm9yZWQgKGV4Y2VwdCBhcyBleHBsaWNpdCBkaXJlY3RvcnkKLSMgYXJndW1lbnRzKS4gIE9mIGNvdXJzZSwgdGhlIG9yaWdpbmFsIGZpbGUgaXMga2VwdCBhcyBhIGJhY2stdXAKLSMgKHdpdGggYSAifiIgYXR0YWNoZWQgdG8gaXRzIG5hbWUpLgotIyBJdCBjb21wbGFpbnMgYWJvdXQgYmluYXJpZXMgKGZpbGVzIGNvbnRhaW5pbmcgbnVsbCBieXRlcykKLSMgYW5kIGFib3V0IGZpbGVzIHRoYXQgYXJlIG9zdGVuc2libHkgbm90IFB5dGhvbiBmaWxlczogaWYgdGhlIGZpcnN0Ci0jIGxpbmUgc3RhcnRzIHdpdGggJyMhJyBhbmQgZG9lcyBub3QgY29udGFpbiB0aGUgc3RyaW5nICdweXRob24nLgotIwotIyBDaGFuZ2VzIG1hZGUgYXJlIHJlcG9ydGVkIHRvIHN0ZG91dCBpbiBhIGRpZmYtbGlrZSBmb3JtYXQuCi0jCi0jIFVuZG91YnRlZGx5IHlvdSBjYW4gZG8gdGhpcyB1c2luZyBmaW5kIGFuZCBzZWQgb3IgcGVybCwgYnV0IHRoaXMgaXMKLSMgYSBuaWNlIGV4YW1wbGUgb2YgUHl0aG9uIGNvZGUgdGhhdCByZWN1cnNlcyBkb3duIGEgZGlyZWN0b3J5IHRyZWUKLSMgYW5kIHVzZXMgcmVndWxhciBleHByZXNzaW9ucy4gIEFsc28gbm90ZSBzZXZlcmFsIHN1YnRsZXRpZXMgbGlrZQotIyBwcmVzZXJ2aW5nIHRoZSBmaWxlJ3MgbW9kZSBhbmQgYXZvaWRpbmcgdG8gZXZlbiB3cml0ZSBhIHRlbXAgZmlsZQotIyB3aGVuIG5vIGNoYW5nZXMgYXJlIG5lZWRlZCBmb3IgYSBmaWxlLgotIwotIyBOQjogYnkgY2hhbmdpbmcgb25seSB0aGUgZnVuY3Rpb24gZml4bGluZSgpIHlvdSBjYW4gdHVybiB0aGlzCi0jIGludG8gYSBwcm9ncmFtIGZvciBhIGRpZmZlcmVudCBjaGFuZ2UgdG8gUHl0aG9uIHByb2dyYW1zLi4uCi0KLWltcG9ydCBzeXMKLWltcG9ydCByZQotaW1wb3J0IG9zCi1mcm9tIHN0YXQgaW1wb3J0ICoKLWltcG9ydCBzdHJpbmcKLQotZXJyID0gc3lzLnN0ZGVyci53cml0ZQotZGJnID0gZXJyCi1yZXAgPSBzeXMuc3Rkb3V0LndyaXRlCi0KLWRlZiBtYWluKCk6Ci0gICAgYmFkID0gMAotICAgIGlmIG5vdCBzeXMuYXJndlsxOl06ICMgTm8gYXJndW1lbnRzCi0gICAgICAgIGVycigndXNhZ2U6ICcgKyBzeXMuYXJndlswXSArICcgZmlsZS1vci1kaXJlY3RvcnkgLi4uXG4nKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdOgotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGFyZyk6Ci0gICAgICAgICAgICBpZiByZWN1cnNlZG93bihhcmcpOiBiYWQgPSAxCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2xpbmsoYXJnKToKLSAgICAgICAgICAgIGVycihhcmcgKyAnOiB3aWxsIG5vdCBwcm9jZXNzIHN5bWJvbGljIGxpbmtzXG4nKQotICAgICAgICAgICAgYmFkID0gMQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgZml4KGFyZyk6IGJhZCA9IDEKLSAgICBzeXMuZXhpdChiYWQpCi0KLWlzcHl0aG9ucHJvZyA9IHJlLmNvbXBpbGUoJ15bYS16QS1aMC05X10rXC5weSQnKQotZGVmIGlzcHl0aG9uKG5hbWUpOgotICAgIHJldHVybiBpc3B5dGhvbnByb2cubWF0Y2gobmFtZSkgPj0gMAotCi1kZWYgcmVjdXJzZWRvd24oZGlybmFtZSk6Ci0gICAgZGJnKCdyZWN1cnNlZG93biglcilcbicgJSAoZGlybmFtZSwpKQotICAgIGJhZCA9IDAKLSAgICB0cnk6Ci0gICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIGVycignJXM6IGNhbm5vdCBsaXN0IGRpcmVjdG9yeTogJXJcbicgJSAoZGlybmFtZSwgbXNnKSkKLSAgICAgICAgcmV0dXJuIDEKLSAgICBuYW1lcy5zb3J0KCkKLSAgICBzdWJkaXJzID0gW10KLSAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgaWYgbmFtZSBpbiAob3MuY3VyZGlyLCBvcy5wYXJkaXIpOiBjb250aW51ZQotICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQotICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmdWxsbmFtZSk6IHBhc3MKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKToKLSAgICAgICAgICAgIHN1YmRpcnMuYXBwZW5kKGZ1bGxuYW1lKQotICAgICAgICBlbGlmIGlzcHl0aG9uKG5hbWUpOgotICAgICAgICAgICAgaWYgZml4KGZ1bGxuYW1lKTogYmFkID0gMQotICAgIGZvciBmdWxsbmFtZSBpbiBzdWJkaXJzOgotICAgICAgICBpZiByZWN1cnNlZG93bihmdWxsbmFtZSk6IGJhZCA9IDEKLSAgICByZXR1cm4gYmFkCi0KLWRlZiBmaXgoZmlsZW5hbWUpOgotIyMgICAgICBkYmcoJ2ZpeCglcilcbicgJSAoZGlybmFtZSwpKQotICAgIHRyeToKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgIGVycignJXM6IGNhbm5vdCBvcGVuOiAlclxuJyAlIChmaWxlbmFtZSwgbXNnKSkKLSAgICAgICAgcmV0dXJuIDEKLSAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKLSAgICB0ZW1wbmFtZSA9IG9zLnBhdGguam9pbihoZWFkLCAnQCcgKyB0YWlsKQotICAgIGcgPSBOb25lCi0gICAgIyBJZiB3ZSBmaW5kIGEgbWF0Y2gsIHdlIHJld2luZCB0aGUgZmlsZSBhbmQgc3RhcnQgb3ZlciBidXQKLSAgICAjIG5vdyBjb3B5IGV2ZXJ5dGhpbmcgdG8gYSB0ZW1wIGZpbGUuCi0gICAgbGluZW5vID0gMAotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKLSAgICAgICAgaWYgZyBpcyBOb25lIGFuZCAnXDAnIGluIGxpbmU6Ci0gICAgICAgICAgICAjIENoZWNrIGZvciBiaW5hcnkgZmlsZXMKLSAgICAgICAgICAgIGVycihmaWxlbmFtZSArICc6IGNvbnRhaW5zIG51bGwgYnl0ZXM7IG5vdCBmaXhlZFxuJykKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbGluZW5vID09IDEgYW5kIGcgaXMgTm9uZSBhbmQgbGluZVs6Ml0gPT0gJyMhJzoKLSAgICAgICAgICAgICMgQ2hlY2sgZm9yIG5vbi1QeXRob24gc2NyaXB0cwotICAgICAgICAgICAgd29yZHMgPSBzdHJpbmcuc3BsaXQobGluZVsyOl0pCi0gICAgICAgICAgICBpZiB3b3JkcyBhbmQgcmUuc2VhcmNoKCdbcFBdeXRob24nLCB3b3Jkc1swXSkgPCAwOgotICAgICAgICAgICAgICAgIG1zZyA9IGZpbGVuYW1lICsgJzogJyArIHdvcmRzWzBdCi0gICAgICAgICAgICAgICAgbXNnID0gbXNnICsgJyBzY3JpcHQ7IG5vdCBmaXhlZFxuJwotICAgICAgICAgICAgICAgIGVycihtc2cpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgd2hpbGUgbGluZVstMjpdID09ICdcXFxuJzoKLSAgICAgICAgICAgIG5leHRsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbmV4dGxpbmU6IGJyZWFrCi0gICAgICAgICAgICBsaW5lID0gbGluZSArIG5leHRsaW5lCi0gICAgICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCi0gICAgICAgIG5ld2xpbmUgPSBmaXhsaW5lKGxpbmUpCi0gICAgICAgIGlmIG5ld2xpbmUgIT0gbGluZToKLSAgICAgICAgICAgIGlmIGcgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBvcGVuKHRlbXBuYW1lLCAndycpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgZXJyKCclczogY2Fubm90IGNyZWF0ZTogJXJcbicgJSAodGVtcG5hbWUsIG1zZykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICAgICAgZi5zZWVrKDApCi0gICAgICAgICAgICAgICAgbGluZW5vID0gMAotICAgICAgICAgICAgICAgIHJlcChmaWxlbmFtZSArICc6XG4nKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgcmVzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcKLSAgICAgICAgICAgIHJlcChyZXByKGxpbmVubykgKyAnXG4nKQotICAgICAgICAgICAgcmVwKCc8ICcgKyBsaW5lKQotICAgICAgICAgICAgcmVwKCc+ICcgKyBuZXdsaW5lKQotICAgICAgICBpZiBnIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgZy53cml0ZShuZXdsaW5lKQotCi0gICAgIyBFbmQgb2YgZmlsZQotICAgIGYuY2xvc2UoKQotICAgIGlmIG5vdCBnOiByZXR1cm4gMCAjIE5vIGNoYW5nZXMKLQotICAgICMgRmluaXNoaW5nIHRvdWNoIC0tIG1vdmUgZmlsZXMKLQotICAgICMgRmlyc3QgY29weSB0aGUgZmlsZSdzIG1vZGUgdG8gdGhlIHRlbXAgZmlsZQotICAgIHRyeToKLSAgICAgICAgc3RhdGJ1ZiA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIGVycignJXM6IHdhcm5pbmc6IGNobW9kIGZhaWxlZCAoJXIpXG4nICUgKHRlbXBuYW1lLCBtc2cpKQotICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgotICAgIHRyeToKLSAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBiYWNrdXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCi0gICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCi0gICAgdHJ5OgotICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKLSAgICAgICAgcmV0dXJuIDEKLSAgICAjIFJldHVybiBzdWNjZXMKLSAgICByZXR1cm4gMAotCi0KLWZyb20gdG9rZW5pemUgaW1wb3J0IHRva2VucHJvZwotCi1tYXRjaCA9IHsnaWYnOic6JywgJ2VsaWYnOic6JywgJ3doaWxlJzonOicsICdyZXR1cm4nOidcbicsIFwKLSAgICAgICAgICcoJzonKScsICdbJzonXScsICd7JzonfScsICdgJzonYCd9Ci0KLWRlZiBmaXhsaW5lKGxpbmUpOgotICAgICMgUXVpY2sgY2hlY2sgZm9yIGVhc3kgY2FzZQotICAgIGlmICc9JyBub3QgaW4gbGluZTogcmV0dXJuIGxpbmUKLQotICAgIGksIG4gPSAwLCBsZW4obGluZSkKLSAgICBzdGFjayA9IFtdCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIGogPSB0b2tlbnByb2cubWF0Y2gobGluZSwgaSkKLSAgICAgICAgaWYgaiA8IDA6Ci0gICAgICAgICAgICAjIEEgYmFkIHRva2VuOyBmb3JnZXQgYWJvdXQgdGhlIHJlc3Qgb2YgdGhpcyBsaW5lCi0gICAgICAgICAgICBwcmludCgnKFN5bnRheCBlcnJvcjopJykKLSAgICAgICAgICAgIHByaW50KGxpbmUsIGVuZD0nICcpCi0gICAgICAgICAgICByZXR1cm4gbGluZQotICAgICAgICBhLCBiID0gdG9rZW5wcm9nLnJlZ3NbM10gIyBMb2NhdGlvbiBvZiB0aGUgdG9rZW4gcHJvcGVyCi0gICAgICAgIHRva2VuID0gbGluZVthOmJdCi0gICAgICAgIGkgPSBpK2oKLSAgICAgICAgaWYgc3RhY2sgYW5kIHRva2VuID09IHN0YWNrWy0xXToKLSAgICAgICAgICAgIGRlbCBzdGFja1stMV0KLSAgICAgICAgZWxpZiB0b2tlbiBpbiBtYXRjaDoKLSAgICAgICAgICAgIHN0YWNrLmFwcGVuZChtYXRjaFt0b2tlbl0pCi0gICAgICAgIGVsaWYgdG9rZW4gPT0gJz0nIGFuZCBzdGFjazoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzphXSArICc9PScgKyBsaW5lW2I6XQotICAgICAgICAgICAgaSwgbiA9IGEgKyBsZW4oJz09JyksIGxlbihsaW5lKQotICAgICAgICBlbGlmIHRva2VuID09ICc9PScgYW5kIG5vdCBzdGFjazoKLSAgICAgICAgICAgIHByaW50KCcoV2FybmluZzogXCc9PVwnIGF0IHRvcCBsZXZlbDopJykKLSAgICAgICAgICAgIHByaW50KGxpbmUsIGVuZD0nICcpCi0gICAgcmV0dXJuIGxpbmUKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9mYWN0LnB5IGIvRGVtby9zY3JpcHRzL2ZhY3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDcxZmNkYTIuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL2ZhY3QucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgRmFjdG9yaXplIG51bWJlcnMuCi0jIFRoZSBhbGdvcml0aG0gaXMgbm90IGVmZmljaWVudCwgYnV0IGVhc3kgdG8gdW5kZXJzdGFuZC4KLSMgSWYgdGhlcmUgYXJlIGxhcmdlIGZhY3RvcnMsIGl0IHdpbGwgdGFrZSBmb3JldmVyIHRvIGZpbmQgdGhlbSwKLSMgYmVjYXVzZSB3ZSB0cnkgYWxsIG9kZCBudW1iZXJzIGJldHdlZW4gMyBhbmQgc3FydChuKS4uLgotCi1pbXBvcnQgc3lzCi1mcm9tIG1hdGggaW1wb3J0IHNxcnQKLQotZGVmIGZhY3Qobik6Ci0gICAgaWYgbiA8IDE6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ZhY3QoKSBhcmd1bWVudCBzaG91bGQgYmUgPj0gMScpCi0gICAgaWYgbiA9PSAxOgotICAgICAgICByZXR1cm4gW10gICMgc3BlY2lhbCBjYXNlCi0gICAgcmVzID0gW10KLSAgICAjIFRyZWF0IGV2ZW4gZmFjdG9ycyBzcGVjaWFsLCBzbyB3ZSBjYW4gdXNlIGkgKz0gMiBsYXRlcgotICAgIHdoaWxlIG4gJSAyID09IDA6Ci0gICAgICAgIHJlcy5hcHBlbmQoMikKLSAgICAgICAgbiAvLz0gMgotICAgICMgVHJ5IG9kZCBudW1iZXJzIHVwIHRvIHNxcnQobikKLSAgICBsaW1pdCA9IHNxcnQobisxKQotICAgIGkgPSAzCi0gICAgd2hpbGUgaSA8PSBsaW1pdDoKLSAgICAgICAgaWYgbiAlIGkgPT0gMDoKLSAgICAgICAgICAgIHJlcy5hcHBlbmQoaSkKLSAgICAgICAgICAgIG4gLy89IGkKLSAgICAgICAgICAgIGxpbWl0ID0gc3FydChuKzEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpICs9IDIKLSAgICBpZiBuICE9IDE6Ci0gICAgICAgIHJlcy5hcHBlbmQobikKLSAgICByZXR1cm4gcmVzCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6Ci0gICAgICAgIHNvdXJjZSA9IHN5cy5hcmd2WzE6XQotICAgIGVsc2U6Ci0gICAgICAgIHNvdXJjZSA9IGl0ZXIoaW5wdXQsICcnKQotICAgIGZvciBhcmcgaW4gc291cmNlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuID0gaW50KGFyZykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwcmludChhcmcsICdpcyBub3QgYW4gaW50ZWdlcicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludChuLCBmYWN0KG4pKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2Zyb20ucHkgYi9EZW1vL3NjcmlwdHMvZnJvbS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzIzZTY4NC4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvZnJvbS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBQcmludCBGcm9tIGFuZCBTdWJqZWN0IG9mIG1lc3NhZ2VzIGluICRNQUlMLgotIyBFeHRlbnNpb24gdG8gbXVsdGlwbGUgbWFpbGJveGVzIGFuZCBvdGhlciBiZWxscyAmIHdoaXN0bGVzIGFyZSBsZWZ0Ci0jIGFzIGV4ZXJjaXNlcyBmb3IgdGhlIHJlYWRlci4KLQotaW1wb3J0IHN5cywgb3MKLQotIyBPcGVuIG1haWxib3ggZmlsZS4gIEV4aXRzIHdpdGggZXhjZXB0aW9uIHdoZW4gdGhpcyBmYWlscy4KLQotdHJ5OgotICAgIG1haWxib3ggPSBvcy5lbnZpcm9uWydNQUlMJ10KLWV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEtleUVycm9yKToKLSAgICBzeXMuc3RkZXJyLndyaXRlKCdObyBlbnZpcm9ubWVudCB2YXJpYWJsZSAkTUFJTFxuJykKLSAgICBzeXMuZXhpdCgyKQotCi10cnk6Ci0gICAgbWFpbCA9IG9wZW4obWFpbGJveCkKLWV4Y2VwdCBJT0Vycm9yOgotICAgIHN5cy5leGl0KCdDYW5ub3Qgb3BlbiBtYWlsYm94IGZpbGU6ICcgKyBtYWlsYm94KQotCi13aGlsZSAxOgotICAgIGxpbmUgPSBtYWlsLnJlYWRsaW5lKCkKLSAgICBpZiBub3QgbGluZToKLSAgICAgICAgYnJlYWsgIyBFT0YKLSAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0Zyb20gJyk6Ci0gICAgICAgICMgU3RhcnQgb2YgbWVzc2FnZSBmb3VuZAotICAgICAgICBwcmludChsaW5lWzotMV0sIGVuZD0nICcpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBsaW5lID0gbWFpbC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZSBvciBsaW5lID09ICdcbic6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnU3ViamVjdDogJyk6Ci0gICAgICAgICAgICAgICAgcHJpbnQocmVwcihsaW5lWzk6LTFdKSwgZW5kPScgJykKLSAgICAgICAgcHJpbnQoKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL2xwd2F0Y2gucHkgYi9EZW1vL3NjcmlwdHMvbHB3YXRjaC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTBiM2VjZi4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvbHB3YXRjaC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgV2F0Y2ggbGluZSBwcmludGVyIHF1ZXVlKHMpLgotIyBJbnRlbmRlZCBmb3IgQlNEIDQuMyBscHEuCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHRpbWUKLQotREVGX1BSSU5URVIgPSAncHNjJwotREVGX0RFTEFZID0gMTAKLQotZGVmIG1haW4oKToKLSAgICBkZWxheSA9IERFRl9ERUxBWSAjIFhYWCBVc2UgZ2V0b3B0KCkgbGF0ZXIKLSAgICB0cnk6Ci0gICAgICAgIHRoaXN1c2VyID0gb3MuZW52aXJvblsnTE9HTkFNRSddCi0gICAgZXhjZXB0OgotICAgICAgICB0aGlzdXNlciA9IG9zLmVudmlyb25bJ1VTRVInXQotICAgIHByaW50ZXJzID0gc3lzLmFyZ3ZbMTpdCi0gICAgaWYgcHJpbnRlcnM6Ci0gICAgICAgICMgU3RyaXAgJy1QJyBmcm9tIHByaW50ZXIgbmFtZXMganVzdCBpbiBjYXNlCi0gICAgICAgICMgdGhlIHVzZXIgc3BlY2lmaWVkIGl0Li4uCi0gICAgICAgIGZvciBpLCBuYW1lIGluIGVudW1lcmF0ZShwcmludGVycyk6Ci0gICAgICAgICAgICBpZiBuYW1lWzoyXSA9PSAnLVAnOgotICAgICAgICAgICAgICAgIHByaW50ZXJzW2ldID0gbmFtZVsyOl0KLSAgICBlbHNlOgotICAgICAgICBpZiAnUFJJTlRFUicgaW4gb3MuZW52aXJvbjoKLSAgICAgICAgICAgIHByaW50ZXJzID0gW29zLmVudmlyb25bJ1BSSU5URVInXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50ZXJzID0gW0RFRl9QUklOVEVSXQotCi0gICAgY2xlYXJob21lID0gb3MucG9wZW4oJ2NsZWFyJywgJ3InKS5yZWFkKCkKLQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHRleHQgPSBjbGVhcmhvbWUKLSAgICAgICAgZm9yIG5hbWUgaW4gcHJpbnRlcnM6Ci0gICAgICAgICAgICB0ZXh0ICs9IG1ha2VzdGF0dXMobmFtZSwgdGhpc3VzZXIpICsgJ1xuJwotICAgICAgICBwcmludCh0ZXh0KQotICAgICAgICB0aW1lLnNsZWVwKGRlbGF5KQotCi1kZWYgbWFrZXN0YXR1cyhuYW1lLCB0aGlzdXNlcik6Ci0gICAgcGlwZSA9IG9zLnBvcGVuKCdscHEgLVAnICsgbmFtZSArICcgMj4mMScsICdyJykKLSAgICBsaW5lcyA9IFtdCi0gICAgdXNlcnMgPSB7fQotICAgIGFoZWFkYnl0ZXMgPSAwCi0gICAgYWhlYWRqb2JzID0gMAotICAgIHVzZXJzZWVuID0gRmFsc2UKLSAgICB0b3RhbGJ5dGVzID0gMAotICAgIHRvdGFsam9icyA9IDAKLSAgICBmb3IgbGluZSBpbiBwaXBlOgotICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgbiA9IGxlbihmaWVsZHMpCi0gICAgICAgIGlmIGxlbihmaWVsZHMpID49IDYgYW5kIGZpZWxkc1tuLTFdID09ICdieXRlcyc6Ci0gICAgICAgICAgICByYW5rLCB1c2VyLCBqb2IgPSBmaWVsZHNbMDozXQotICAgICAgICAgICAgZmlsZXMgPSBmaWVsZHNbMzotMl0KLSAgICAgICAgICAgIGJ5dGVzID0gaW50KGZpZWxkc1tuLTJdKQotICAgICAgICAgICAgaWYgdXNlciA9PSB0aGlzdXNlcjoKLSAgICAgICAgICAgICAgICB1c2Vyc2VlbiA9IFRydWUKLSAgICAgICAgICAgIGVsaWYgbm90IHVzZXJzZWVuOgotICAgICAgICAgICAgICAgIGFoZWFkYnl0ZXMgKz0gYnl0ZXMKLSAgICAgICAgICAgICAgICBhaGVhZGpvYnMgKz0gMQotICAgICAgICAgICAgdG90YWxieXRlcyArPSBieXRlcwotICAgICAgICAgICAgdG90YWxqb2JzICs9IDEKLSAgICAgICAgICAgIHVqb2JzLCB1Ynl0ZXMgPSB1c2Vycy5nZXQodXNlciwgKDAsIDApKQotICAgICAgICAgICAgdWpvYnMgKz0gMQotICAgICAgICAgICAgdWJ5dGVzICs9IGJ5dGVzCi0gICAgICAgICAgICB1c2Vyc1t1c2VyXSA9IHVqb2JzLCB1Ynl0ZXMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGZpZWxkcyBhbmQgZmllbGRzWzBdICE9ICdSYW5rJzoKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnbm8gZW50cmllcyc6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBuYW1lICsgJzogaWRsZScKLSAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTIyOl0gPT0gJyBpcyByZWFkeSBhbmQgcHJpbnRpbmcnOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gbmFtZQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQotCi0gICAgaWYgdG90YWxqb2JzOgotICAgICAgICBsaW5lID0gJyVkIEsnICUgKCh0b3RhbGJ5dGVzKzEwMjMpIC8vIDEwMjQpCi0gICAgICAgIGlmIHRvdGFsam9icyAhPSBsZW4odXNlcnMpOgotICAgICAgICAgICAgbGluZSArPSAnICglZCBqb2JzKScgJSB0b3RhbGpvYnMKLSAgICAgICAgaWYgbGVuKHVzZXJzKSA9PSAxOgotICAgICAgICAgICAgbGluZSArPSAnIGZvciAlcycgJSBuZXh0KGl0ZXIodXNlcnMpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZSArPSAnIGZvciAlZCB1c2VycycgJSBsZW4odXNlcnMpCi0gICAgICAgICAgICBpZiB1c2Vyc2VlbjoKLSAgICAgICAgICAgICAgICBpZiBhaGVhZGpvYnMgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgbGluZSArPSAnICglcyBmaXJzdCknICUgdGhpc3VzZXIKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsaW5lICs9ICcgKCVkIEsgYmVmb3JlICVzKScgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAoYWhlYWRieXRlcysxMDIzKSAvLyAxMDI0LCB0aGlzdXNlcikKLSAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0KLSAgICBzdHMgPSBwaXBlLmNsb3NlKCkKLSAgICBpZiBzdHM6Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnbHBxIGV4aXQgc3RhdHVzICVyJyAlIChzdHMsKSkKLSAgICByZXR1cm4gJzogJy5qb2luKGxpbmVzKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRyeToKLSAgICAgICAgbWFpbigpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbWFrZWRpci5weSBiL0RlbW8vc2NyaXB0cy9tYWtlZGlyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3MDk1ODY4Li4wMDAwMDAwCi0tLSBhL0RlbW8vc2NyaXB0cy9tYWtlZGlyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIExpa2UgbWtkaXIsIGJ1dCBhbHNvIG1ha2UgaW50ZXJtZWRpYXRlIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc2FyeS4KLSMgSXQgaXMgbm90IGFuIGVycm9yIGlmIHRoZSBnaXZlbiBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgKGFzIGxvbmcKLSMgYXMgaXQgaXMgYSBkaXJlY3RvcnkpLgotIyBFcnJvcnMgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseSAtLSB5b3UganVzdCBnZXQgYSBQeXRob24gZXhjZXB0aW9uLgotCi1pbXBvcnQgc3lzLCBvcwotCi1kZWYgbWFpbigpOgotICAgIGZvciBwIGluIHN5cy5hcmd2WzE6XToKLSAgICAgICAgbWFrZWRpcnMocCkKLQotZGVmIG1ha2VkaXJzKHApOgotICAgIGlmIHAgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKHApOgotICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChwKQotICAgICAgICBtYWtlZGlycyhoZWFkKQotICAgICAgICBvcy5ta2RpcihwLCAwbzc3NykKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9tYm94Y29udmVydC5weSBiL0RlbW8vc2NyaXB0cy9tYm94Y29udmVydC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmU0NGYwNi4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvbWJveGNvbnZlcnQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIENvbnZlcnQgIE1IIGRpcmVjdG9yaWVzICgxIG1lc3NhZ2UgcGVyIGZpbGUpIG9yIE1NREYgbWFpbGJveGVzICg0eF5BCi0jIGRlbGltaXRlZCkgdG8gdW5peCBtYWlsYm94IChGcm9tIC4uLiBkZWxpbWl0ZWQpIG9uIHN0ZG91dC4KLSMgSWYgLWYgaXMgZ2l2ZW4sIGZpbGVzIGNvbnRhaW4gb25lIG1lc3NhZ2UgcGVyIGZpbGUgKGUuZy4gTUggbWVzc2FnZXMpCi0KLWltcG9ydCByZmM4MjIKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgb3MKLWltcG9ydCBzdGF0Ci1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgcmUKLQotZGVmIG1haW4oKToKLSAgICBkb2ZpbGUgPSBtbWRmCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdmJykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXNcbicgJSBtc2cpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyA9PSAnLWYnOgotICAgICAgICAgICAgZG9maWxlID0gbWVzc2FnZQotICAgIGlmIG5vdCBhcmdzOgotICAgICAgICBhcmdzID0gWyctJ10KLSAgICBzdHMgPSAwCi0gICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICBpZiBhcmcgPT0gJy0nIG9yIGFyZyA9PSAnJzoKLSAgICAgICAgICAgIHN0cyA9IGRvZmlsZShzeXMuc3RkaW4pIG9yIHN0cwotICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoYXJnKToKLSAgICAgICAgICAgIHN0cyA9IG1oKGFyZykgb3Igc3RzCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2ZpbGUoYXJnKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmID0gb3BlbihhcmcpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6ICVzXG4nICUgKGFyZywgbXNnKSkKLSAgICAgICAgICAgICAgICBzdHMgPSAxCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHN0cyA9IGRvZmlsZShmKSBvciBzdHMKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IG5vdCBmb3VuZFxuJyAlIGFyZykKLSAgICAgICAgICAgIHN0cyA9IDEKLSAgICBpZiBzdHM6Ci0gICAgICAgIHN5cy5leGl0KHN0cykKLQotbnVtZXJpYyA9IHJlLmNvbXBpbGUoJ1sxLTldWzAtOV0qJykKLQotZGVmIG1oKGRpcik6Ci0gICAgc3RzID0gMAotICAgIG1zZ3MgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBmb3IgbXNnIGluIG1zZ3M6Ci0gICAgICAgIGlmIG51bWVyaWMubWF0Y2gobXNnKSAhPSBsZW4obXNnKToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGZuID0gb3MucGF0aC5qb2luKGRpciwgbXNnKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gb3BlbihmbikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6ICVzXG4nICUgKGZuLCBtc2cpKQotICAgICAgICAgICAgc3RzID0gMQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgc3RzID0gbWVzc2FnZShmKSBvciBzdHMKLSAgICByZXR1cm4gc3RzCi0KLWRlZiBtbWRmKGYpOgotICAgIHN0cyA9IDAKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbGluZSA9PSAnXDFcMVwxXDFcbic6Ci0gICAgICAgICAgICBzdHMgPSBtZXNzYWdlKGYsIGxpbmUpIG9yIHN0cwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgJ0JhZCBsaW5lIGluIE1NRkQgbWFpbGJveDogJXJcbicgJSAobGluZSwpKQotICAgIHJldHVybiBzdHMKLQotY291bnRlciA9IDAgIyBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgTWVzc2FnZS1JRCBoZWFkZXJzCi0KLWRlZiBtZXNzYWdlKGYsIGRlbGltaXRlciA9ICcnKToKLSAgICBzdHMgPSAwCi0gICAgIyBQYXJzZSBSRkM4MjIgaGVhZGVyCi0gICAgbSA9IHJmYzgyMi5NZXNzYWdlKGYpCi0gICAgIyBXcml0ZSB1bml4IGhlYWRlciBsaW5lCi0gICAgZnVsbG5hbWUsIGVtYWlsID0gbS5nZXRhZGRyKCdGcm9tJykKLSAgICB0dCA9IG0uZ2V0ZGF0ZSgnRGF0ZScpCi0gICAgaWYgdHQ6Ci0gICAgICAgIHQgPSB0aW1lLm1rdGltZSh0dCkKLSAgICBlbHNlOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKAotICAgICAgICAgICAgICAgICdVbnBhcnNlYWJsZSBkYXRlOiAlclxuJyAlIChtLmdldCgnRGF0ZScpLCkpCi0gICAgICAgIHQgPSBvcy5mc3RhdChmLmZpbGVubygpKVtzdGF0LlNUX01USU1FXQotICAgIHByaW50KCdGcm9tJywgZW1haWwsIHRpbWUuY3RpbWUodCkpCi0gICAgIyBDb3B5IFJGQzgyMiBoZWFkZXIKLSAgICBmb3IgbGluZSBpbiBtLmhlYWRlcnM6Ci0gICAgICAgIHByaW50KGxpbmUsIGVuZD0nICcpCi0gICAgIyBJbnZlbnQgTWVzc2FnZS1JRCBoZWFkZXIgaWYgbm9uZSBpcyBwcmVzZW50Ci0gICAgaWYgJ21lc3NhZ2UtaWQnIG5vdCBpbiBtOgotICAgICAgICBnbG9iYWwgY291bnRlcgotICAgICAgICBjb3VudGVyID0gY291bnRlciArIDEKLSAgICAgICAgbXNnaWQgPSAiPCVzLiVkPiIgJSAoaGV4KHQpLCBjb3VudGVyKQotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJBZGRpbmcgTWVzc2FnZS1JRCAlcyAoRnJvbSAlcylcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChtc2dpZCwgZW1haWwpKQotICAgICAgICBwcmludCgiTWVzc2FnZS1JRDoiLCBtc2dpZCkKLSAgICBwcmludCgpCi0gICAgIyBDb3B5IGJvZHkKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmUgPT0gZGVsaW1pdGVyOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdVbmV4cGVjdGVkIEVPRiBpbiBtZXNzYWdlXG4nKQotICAgICAgICAgICAgc3RzID0gMQotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbGluZVs6NV0gPT0gJ0Zyb20gJzoKLSAgICAgICAgICAgIGxpbmUgPSAnPicgKyBsaW5lCi0gICAgICAgIHByaW50KGxpbmUsIGVuZD0nICcpCi0gICAgIyBQcmludCB0cmFpbGluZyBuZXdsaW5lCi0gICAgcHJpbnQoKQotICAgIHJldHVybiBzdHMKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9tb3JzZS5weSBiL0RlbW8vc2NyaXB0cy9tb3JzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWFhY2FhMS4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvbW9yc2UucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIERBSCBzaG91bGQgYmUgdGhyZWUgRE9Ucy4KLSMgU3BhY2UgYmV0d2VlbiBET1RzIGFuZCBEQUhzIHNob3VsZCBiZSBvbmUgRE9ULgotIyBTcGFjZSBiZXR3ZWVuIHR3byBsZXR0ZXJzIHNob3VsZCBiZSBvbmUgREFILgotIyBTcGFjZSBiZXR3ZWVuIHR3byB3b3JkcyBzaG91bGQgYmUgRE9UIERBSCBEQUguCi0KLWltcG9ydCBzeXMsIG1hdGgsIGFpZmMKLWZyb20gY29udGV4dGxpYiBpbXBvcnQgY2xvc2luZwotCi1ET1QgPSAzMAotREFIID0gMyAqIERPVAotT0NUQVZFID0gMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgMSA9PSA0NDEgSHosIDIgPT0gODgyIEh6LCAuLi4KLQotbW9yc2V0YWIgPSB7Ci0gICAgICAgICdBJzogJy4tJywgICAgICAgICAgICAgICdhJzogJy4tJywKLSAgICAgICAgJ0InOiAnLS4uLicsICAgICAgICAgICAgJ2InOiAnLS4uLicsCi0gICAgICAgICdDJzogJy0uLS4nLCAgICAgICAgICAgICdjJzogJy0uLS4nLAotICAgICAgICAnRCc6ICctLi4nLCAgICAgICAgICAgICAnZCc6ICctLi4nLAotICAgICAgICAnRSc6ICcuJywgICAgICAgICAgICAgICAnZSc6ICcuJywKLSAgICAgICAgJ0YnOiAnLi4tLicsICAgICAgICAgICAgJ2YnOiAnLi4tLicsCi0gICAgICAgICdHJzogJy0tLicsICAgICAgICAgICAgICdnJzogJy0tLicsCi0gICAgICAgICdIJzogJy4uLi4nLCAgICAgICAgICAgICdoJzogJy4uLi4nLAotICAgICAgICAnSSc6ICcuLicsICAgICAgICAgICAgICAnaSc6ICcuLicsCi0gICAgICAgICdKJzogJy4tLS0nLCAgICAgICAgICAgICdqJzogJy4tLS0nLAotICAgICAgICAnSyc6ICctLi0nLCAgICAgICAgICAgICAnayc6ICctLi0nLAotICAgICAgICAnTCc6ICcuLS4uJywgICAgICAgICAgICAnbCc6ICcuLS4uJywKLSAgICAgICAgJ00nOiAnLS0nLCAgICAgICAgICAgICAgJ20nOiAnLS0nLAotICAgICAgICAnTic6ICctLicsICAgICAgICAgICAgICAnbic6ICctLicsCi0gICAgICAgICdPJzogJy0tLScsICAgICAgICAgICAgICdvJzogJy0tLScsCi0gICAgICAgICdQJzogJy4tLS4nLCAgICAgICAgICAgICdwJzogJy4tLS4nLAotICAgICAgICAnUSc6ICctLS4tJywgICAgICAgICAgICAncSc6ICctLS4tJywKLSAgICAgICAgJ1InOiAnLi0uJywgICAgICAgICAgICAgJ3InOiAnLi0uJywKLSAgICAgICAgJ1MnOiAnLi4uJywgICAgICAgICAgICAgJ3MnOiAnLi4uJywKLSAgICAgICAgJ1QnOiAnLScsICAgICAgICAgICAgICAgJ3QnOiAnLScsCi0gICAgICAgICdVJzogJy4uLScsICAgICAgICAgICAgICd1JzogJy4uLScsCi0gICAgICAgICdWJzogJy4uLi0nLCAgICAgICAgICAgICd2JzogJy4uLi0nLAotICAgICAgICAnVyc6ICcuLS0nLCAgICAgICAgICAgICAndyc6ICcuLS0nLAotICAgICAgICAnWCc6ICctLi4tJywgICAgICAgICAgICAneCc6ICctLi4tJywKLSAgICAgICAgJ1knOiAnLS4tLScsICAgICAgICAgICAgJ3knOiAnLS4tLScsCi0gICAgICAgICdaJzogJy0tLi4nLCAgICAgICAgICAgICd6JzogJy0tLi4nLAotICAgICAgICAnMCc6ICctLS0tLScsICAgICAgICAgICAnLCc6ICctLS4uLS0nLAotICAgICAgICAnMSc6ICcuLS0tLScsICAgICAgICAgICAnLic6ICcuLS4tLi0nLAotICAgICAgICAnMic6ICcuLi0tLScsICAgICAgICAgICAnPyc6ICcuLi0tLi4nLAotICAgICAgICAnMyc6ICcuLi4tLScsICAgICAgICAgICAnOyc6ICctLi0uLS4nLAotICAgICAgICAnNCc6ICcuLi4uLScsICAgICAgICAgICAnOic6ICctLS0uLi4nLAotICAgICAgICAnNSc6ICcuLi4uLicsICAgICAgICAgICAiJyI6ICcuLS0tLS4nLAotICAgICAgICAnNic6ICctLi4uLicsICAgICAgICAgICAnLSc6ICctLi4uLi0nLAotICAgICAgICAnNyc6ICctLS4uLicsICAgICAgICAgICAnLyc6ICctLi4tLicsCi0gICAgICAgICc4JzogJy0tLS4uJywgICAgICAgICAgICcoJzogJy0uLS0uLScsCi0gICAgICAgICc5JzogJy0tLS0uJywgICAgICAgICAgICcpJzogJy0uLS0uLScsCi0gICAgICAgICcgJzogJyAnLCAgICAgICAgICAgICAgICdfJzogJy4uLS0uLScsCi19Ci0KLW5vd2F2ZSA9IGInXDAnICogMjAwCi0KLSMgSWYgd2UgcGxheSBhdCA0NC4xIGtIeiAod2hpY2ggd2UgZG8pLCB0aGVuIGlmIHdlIHByb2R1Y2Ugb25lIHNpbmUKLSMgd2F2ZSBpbiAxMDAgc2FtcGxlcywgd2UgZ2V0IGEgdG9uZSBvZiA0NDEgSHouICBJZiB3ZSBwcm9kdWNlIHR3bwotIyBzaW5lIHdhdmVzIGluIHRoZXNlIDEwMCBzYW1wbGVzLCB3ZSBnZXQgYSB0b25lIG9mIDg4MiBIei4gIDg4MiBIegotIyBhcHBlYXJzIHRvIGJlIGEgbmljZSBvbmUgZm9yIHBsYXlpbmcgbW9yc2UgY29kZS4KLWRlZiBta3dhdmUob2N0YXZlKToKLSAgICBzaW5ld2F2ZSA9IGJ5dGVhcnJheSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKLSAgICAgICAgdmFsID0gaW50KG1hdGguc2luKG1hdGgucGkgKiBpICogb2N0YXZlIC8gNTAuMCkgKiAzMDAwMCkKLSAgICAgICAgc2luZXdhdmUuZXh0ZW5kKFsodmFsID4+IDgpICYgMjU1LCB2YWwgJiAyNTVdKQotICAgIHJldHVybiBieXRlcyhzaW5ld2F2ZSkKLQotZGVmYXVsdHdhdmUgPSBta3dhdmUoT0NUQVZFKQotCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCBnZXRvcHQKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ286cDonKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1VzYWdlICcgKyBzeXMuYXJndlswXSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyBbIC1vIG91dGZpbGUgXSBbIC1wIG9jdGF2ZSBdIFsgd29yZHMgXSAuLi5cbicpCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgd2F2ZSA9IGRlZmF1bHR3YXZlCi0gICAgb3V0ZmlsZSA9ICdtb3JzZS5haWZjJwotICAgIGZvciBvLCBhIGluIG9wdHM6Ci0gICAgICAgIGlmIG8gPT0gJy1vJzoKLSAgICAgICAgICAgIG91dGZpbGUgPSBhCi0gICAgICAgIGlmIG8gPT0gJy1wJzoKLSAgICAgICAgICAgIHdhdmUgPSBta3dhdmUoaW50KGEpKQotICAgIHdpdGggY2xvc2luZyhhaWZjLm9wZW4ob3V0ZmlsZSwgJ3cnKSkgYXMgZnA6Ci0gICAgICAgIGZwLnNldGZyYW1lcmF0ZSg0NDEwMCkKLSAgICAgICAgZnAuc2V0c2FtcHdpZHRoKDIpCi0gICAgICAgIGZwLnNldG5jaGFubmVscygxKQotICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgc291cmNlID0gWycgJy5qb2luKGFyZ3MpXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc291cmNlID0gaXRlcihzeXMuc3RkaW4ucmVhZGxpbmUsICcnKQotICAgICAgICBmb3IgbGluZSBpbiBzb3VyY2U6Ci0gICAgICAgICAgICBtbGluZSA9IG1vcnNlKGxpbmUpCi0gICAgICAgICAgICBwbGF5KG1saW5lLCBmcCwgd2F2ZSkKLQotIyBDb252ZXJ0IGEgc3RyaW5nIHRvIG1vcnNlIGNvZGUgd2l0aCBcMDAxIGJldHdlZW4gdGhlIGNoYXJhY3RlcnMgaW4KLSMgdGhlIHN0cmluZy4KLWRlZiBtb3JzZShsaW5lKToKLSAgICByZXMgPSAnJwotICAgIGZvciBjIGluIGxpbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlcyArPSBtb3JzZXRhYltjXSArICdcMDAxJwotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgcmV0dXJuIHJlcwotCi0jIFBsYXkgYSBsaW5lIG9mIG1vcnNlIGNvZGUuCi1kZWYgcGxheShsaW5lLCBmcCwgd2F2ZSk6Ci0gICAgZm9yIGMgaW4gbGluZToKLSAgICAgICAgaWYgYyA9PSAnLic6Ci0gICAgICAgICAgICBzaW5lKGZwLCBET1QsIHdhdmUpCi0gICAgICAgIGVsaWYgYyA9PSAnLSc6Ci0gICAgICAgICAgICBzaW5lKGZwLCBEQUgsIHdhdmUpCi0gICAgICAgIGVsc2U6ICAgICAgICAgICAgICAgICAgICMgc3BhY2UKLSAgICAgICAgICAgIHBhdXNlKGZwLCBEQUggKyBET1QpCi0gICAgICAgIHBhdXNlKGZwLCBET1QpCi0KLWRlZiBzaW5lKGZwLCBsZW5ndGgsIHdhdmUpOgotICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6Ci0gICAgICAgIGZwLndyaXRlZnJhbWVzcmF3KHdhdmUpCi0KLWRlZiBwYXVzZShmcCwgbGVuZ3RoKToKLSAgICBmb3IgaSBpbiByYW5nZShsZW5ndGgpOgotICAgICAgICBmcC53cml0ZWZyYW1lc3Jhdyhub3dhdmUpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbmV3c2xpc3QuZG9jIGIvRGVtby9zY3JpcHRzL25ld3NsaXN0LmRvYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODdmZDliYS4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvbmV3c2xpc3QuZG9jCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVdTTElTVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PT09PT09PSAgICAKLSAgICAgICAgICAgIEEgcHJvZ3JhbSB0byBhc3Npc3QgSFRUUCBicm93c2luZyBvZiBuZXdzZ3JvdXBzCi0gICAgICAgICAgICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1XV1cgYnJvd3NlcnMgc3VjaCBhcyBOQ1NBIE1vc2FpYyBhbGxvdyB0aGUgdXNlciB0byByZWFkIG5ld3Nncm91cAotYXJ0aWNsZXMgYnkgc3BlY2lmeWluZyB0aGUgZ3JvdXAgbmFtZSBpbiBhIFVSTCBlZyAnbmV3czpjb21wLmFuc3dlcnMnLgotCi1UbyBicm93c2UgdGhyb3VnaCBtYW55IGdyb3VwcywgdGhvdWdoLCAoYW5kIHRoZXJlIGFyZSBzZXZlcmFsIHRob3VzYW5kCi1vZiB0aGVtKSB5b3UgcmVhbGx5IG5lZWQgYSBwYWdlIG9yIHBhZ2VzIGNvbnRhaW5pbmcgbGlua3MgdG8gYWxsIHRoZQotZ3JvdXBzLiBUaGVyZSBhcmUgc29tZSBnb29kIG9uZXMgb3V0IHRoZXJlLCBmb3IgZXhhbXBsZSwKLQotICAgIGh0dHA6Ly9pbmZvLmNlcm4uY2gvaHlwZXJ0ZXh0L0RhdGFTb3VyY2VzL05ld3MvR3JvdXBzL092ZXJ2aWV3Lmh0bWwKLQotaXMgdGhlIHN0YW5kYXJkIG9uZSBhdCBDRVJOLCBidXQgaXQgb25seSBzaG93cyB0aGUgZ3JvdXBzIGF2YWlsYWJsZSB0aGVyZSwKLXdoaWNoIG1heSBiZSByYXRoZXIgZGlmZmVyZW50IGZyb20gdGhvc2UgYXZhaWxhYmxlIG9uIHlvdXIgbWFjaGluZS4KLQotTmV3c2xpc3QgaXMgYSBwcm9ncmFtIHdoaWNoIGNyZWF0ZXMgYSBoaWVyYXJjaHkgb2YgcGFnZXMgZm9yIHlvdSBiYXNlZAotb24gdGhlIGdyb3VwcyBhdmFpbGFibGUgZnJvbSBZT1VSIHNlcnZlci4gSXQgaXMgd3JpdHRlbiBpbiBweXRob24gLSBhCi1zcGxlbmRpZCBpbnRlcnByZXRlZCBvYmplY3Qtb3JpZW50ZWQgbGFuZ3VhZ2Ugd2hpY2ggSSBzdWdnZXN0IHlvdSBnZXQKLXJpZ2h0IG5vdyBmcm9tIHRoZSBkaXJlY3RvcnkgL3B1Yi9weXRob24gYXQgZnRwLmN3aS5ubCwgaWYgeW91IGhhdmVuJ3QKLWFscmVhZHkgZ290IGl0LgotCi1Zb3Ugc2hvdWxkIGJlIGFibGUgdG8gc2VlIHNvbWUgc2FtcGxlIG91dHB1dCBieSBsb29raW5nIGF0OgotICAgaHR0cDovL3BlbGljYW4uY2wuY2FtLmFjLnVrL25ld3NwYWdlL3Jvb3QuaHRtbAotCi1EZXNjcmlwdGlvbnMgb2YgbmV3c2dyb3VwcyBjYW4gYmUgYWRkZWQgZnJvbSBhIGZpbGUgd2l0aCBvbmUgZ3JvdXAKLXBlciBsaW5lLiBlZzoKLQotCWFsdC5mb28gICBBcnRpY2xlcyBhYm91dCBmb28KLQljb21wLmJhciAgUHJvZ3JhbW1pbmcgaW4gJ2JhcicgYW5kIHJlbGF0ZWQgbGFuZ3VhZ2VzCi0KLUEgc3VpdGFibGUgbGlzdCBkZXRhaWxpbmcgbW9zdCBncm91cHMgY2FuIGJlIGZvdW5kIGF0IGZ0cC51dS5uZXQgaW4KLS91dW5ldC1pbmZvL25ld3Nncm91cHMuZ3ouCi0KLU1ha2Ugc3VyZSB5b3UgcmVhZCB0aGUgaW5mb3JtYXRpb24gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UgYW5kCi1jb25maWd1cmUgdGhlIHZhcmlhYmxlcyBiZWZvcmUgcnVubmluZy4KLQotSW4gYWRkaXRpb24gdG8gcHl0aG9uLCB5b3UgbmVlZDoKLQotCUFuIE5OVFAtYmFzZWQgbmV3cyBmZWVkLgotCUEgZGlyZWN0b3J5IGluIHdoaWNoIHRvIHB1dCB0aGUgcGFnZXMuCi0KLVRoZSBwcm9ncmFtbWluZyBpcyBub3QgdmVyeSBiZWF1dGlmdWwsIGJ1dCBpdCB3b3JrcyEgIEl0IGNvbWVzIHdpdGggbm8KLXdhcnJhbnR5LCBleHByZXNzIG9yIGltcGxpZWQsIGJ1dCB3aXRoIHRoZSBob3BlIHRoYXQgc29tZSBvdGhlcnMgbWF5Ci1maW5kIGl0IHVzZWZ1bC4KLQotQ29tbWVudHMsIGltcHJvdmVtZW50cyAmIHN1Z2dlc3Rpb25zIHdlbGNvbWVkLgotUXVlbnRpbiBTdGFmZm9yZC1GcmFzZXIKLQotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgUXVlbnRpbiBTdGFmZm9yZC1GcmFzZXIKLSAgICAgICAgICAgIGh0dHA6Ly9wZWxpY2FuLmNsLmNhbS5hYy51ay9wZW9wbGUvcXMxMDEvbWUuaHRtbAotIAotIENhbWJyaWRnZSBVbml2ZXJzaXR5IENvbXB1dGVyIExhYiAgICAgICAgUmFuayBYZXJveCBDYW1icmlkZ2UgRXVyb1BBUkMKLSBxczEwMUBjbC5jYW0uYWMudWsgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFzZXJAZXVyb3BhcmMueGVyb3guY29tCi0gVGVsOiArNDQgMjIzIDMzNDQxMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVsOiArNDQgMjIzIDM0MTUyMQotIEZheDogKzQ0IDIyMyAzMzQ2NzkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZheDogKzQ0IDIyMyAzNDE1MTAKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkgYi9EZW1vL3NjcmlwdHMvbmV3c2xpc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDljZWExYjQuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL25ld3NsaXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE5ld3NsaXN0ICAkUmV2aXNpb24kCi0jCi0jIFN5bnRheDoKLSMgICAgbmV3c2xpc3QgWyAtYSBdCi0jCi0jIFRoaXMgaXMgYSBwcm9ncmFtIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeSBmdWxsIG9mIEhUTUwgcGFnZXMKLSMgd2hpY2ggYmV0d2VlbiB0aGVtIGNvbnRhaW4gbGlua3MgdG8gYWxsIHRoZSBuZXdzZ3JvdXBzIGF2YWlsYWJsZQotIyBvbiB5b3VyIHNlcnZlci4KLSMKLSMgVGhlIC1hIG9wdGlvbiBjYXVzZXMgYSBjb21wbGV0ZSBsaXN0IG9mIGFsbCBncm91cHMgdG8gYmUgcmVhZCBmcm9tCi0jIHRoZSBzZXJ2ZXIgcmF0aGVyIHRoYW4ganVzdCB0aGUgb25lcyB3aGljaCBoYXZlIGFwcGVhcmVkIHNpbmNlIGxhc3QKLSMgZXhlY3V0aW9uLiBUaGlzIHJlY3JlYXRlcyB0aGUgbG9jYWwgbGlzdCBmcm9tIHNjcmF0Y2guIFVzZSB0aGlzIG9uCi0jIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHRoZSBwcm9ncmFtLCBhbmQgZnJvbSB0aW1lIHRvIHRpbWUgdGhlcmVhZnRlci4KLSMgICBXaGVuIG5ldyBncm91cHMgYXJlIGZpcnN0IGNyZWF0ZWQgdGhleSBtYXkgYXBwZWFyIG9uIHlvdXIgc2VydmVyIGFzCi0jIGVtcHR5IGdyb3Vwcy4gQnkgZGVmYXVsdCwgZW1wdHkgZ3JvdXBzIGFyZSBpZ25vcmVkIGJ5IHRoZSAtYSBvcHRpb24uCi0jIEhvd2V2ZXIsIHRoZXNlIG5ldyBncm91cHMgd2lsbCBub3QgYmUgY3JlYXRlZCBhZ2FpbiwgYW5kIHNvIHdpbGwgbm90Ci0jIGFwcGVhciBpbiB0aGUgc2VydmVyJ3MgbGlzdCBvZiAnbmV3IGdyb3VwcycgYXQgYSBsYXRlciBkYXRlLiBIZW5jZSBpdAotIyB3b24ndCBhcHBlYXIgdW50aWwgeW91IGRvIGEgJy1hJyBhZnRlciBzb21lIGFydGljbGVzIGhhdmUgYXBwZWFyZWQuCi0jCi0jIEkgc2hvdWxkIHJlYWxseSBrZWVwIGEgbGlzdCBvZiBpZ25vcmVkIGVtcHR5IGdyb3VwcyBhbmQgcmUtY2hlY2sgdGhlbQotIyBmb3IgYXJ0aWNsZXMgb24gZXZlcnkgcnVuLCBidXQgSSBoYXZlbid0IGdvdCBhcm91bmQgdG8gaXQgeWV0LgotIwotIyBUaGlzIGFzc3VtZXMgYW4gTk5UUCBuZXdzIGZlZWQuCi0jCi0jIEZlZWwgZnJlZSB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgdGhpcyBjb2RlIGZvcgotIyBub24tY29tbWVyY2lhbCB1c2UuIElmIHlvdSBtYWtlIGFueSB1c2VmdWwgbW9kaWZpY2F0aW9ucywgbGV0IG1lCi0jIGtub3chCi0jCi0jIChjKSBRdWVudGluIFN0YWZmb3JkLUZyYXNlciAxOTk0Ci0jIGZyYXNlckBldXJvcGFyYy54ZXJveC5jb20gICAgICAgICAgICAgICAgICAgICBxczEwMUBjbC5jYW0uYWMudWsKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotaW1wb3J0IHN5cywgbm50cGxpYiwgbWFyc2hhbCwgdGltZSwgb3MKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ2hlY2sgdGhlc2UgdmFyaWFibGVzIGJlZm9yZSBydW5uaW5nISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0KLSMgVG9wIGRpcmVjdG9yeS4KLSMgRmlsZW5hbWVzIHdoaWNoIGRvbid0IHN0YXJ0IHdpdGggLyBhcmUgdGFrZW4gYXMgYmVpbmcgcmVsYXRpdmUgdG8gdGhpcy4KLXRvcGRpciA9IG9zLnBhdGguZXhwYW5kdXNlcignfi9uZXdzcGFnZScpCi0KLSMgVGhlIG5hbWUgb2YgeW91ciBOTlRQIGhvc3QKLSMgZWcuCi0jICAgIG5ld3Nob3N0ID0gJ25udHAtc2Vydi5jbC5jYW0uYWMudWsnCi0jIG9yIHVzZSBmb2xsb3dpbmcgdG8gZ2V0IHRoZSBuYW1lIGZyb20gdGhlIE5OVFBTRVJWRVIgZW52aXJvbm1lbnQKLSMgdmFyaWFibGU6Ci0jICAgIG5ld3Nob3N0ID0gb3MuZW52aXJvblsnTk5UUFNFUlZFUiddCi1uZXdzaG9zdCA9ICduZXdzLmV4YW1wbGUuY29tJwotCi0jIFRoZSBmaWxlbmFtZSBmb3IgYSBsb2NhbCBjYWNoZSBvZiB0aGUgbmV3c2dyb3VwIGxpc3QKLXRyZWVmaWxlID0gJ2dyb3VwdHJlZScKLQotIyBUaGUgZmlsZW5hbWUgZm9yIGRlc2NyaXB0aW9ucyBvZiBuZXdzZ3JvdXBzCi0jIEkgZm91bmQgYSBzdWl0YWJsZSBvbmUgYXQgZnRwLnV1Lm5ldCBpbiAvdXVuZXQtaW5mby9uZXdncm91cHMuZ3oKLSMgWW91IGNhbiBzZXQgdGhpcyB0byAnJyBpZiB5b3UgZG9uJ3Qgd2lzaCB0byB1c2Ugb25lLgotZGVzY2ZpbGUgPSAnbmV3c2dyb3VwcycKLQotIyBUaGUgZGlyZWN0b3J5IGluIHdoaWNoIEhUTUwgcGFnZXMgc2hvdWxkIGJlIGNyZWF0ZWQKLSMgZWcuCi0jICAgcGFnZWRpciAgPSAnL3Vzci9sb2NhbC9saWIvaHRtbC9uZXdzcGFnZScKLSMgICBwYWdlZGlyICA9ICdwYWdlcycKLXBhZ2VkaXIgID0gdG9wZGlyCi0KLSMgVGhlIGh0bWwgcHJlZml4IHdoaWNoIHdpbGwgcmVmZXIgdG8gdGhpcyBkaXJlY3RvcnkKLSMgZWcuCi0jICAgaHR0cHByZWYgPSAnL25ld3NwYWdlLycsCi0jIG9yIGxlYXZlIGJsYW5rIGZvciByZWxhdGl2ZSBsaW5rcyBiZXR3ZWVuIHBhZ2VzOiAoUmVjb21tZW5kZWQpCi0jICAgaHR0cHByZWYgPSAnJwotaHR0cHByZWYgPSAnJwotCi0jIFRoZSBuYW1lIG9mIHRoZSAncm9vdCcgbmV3cyBwYWdlIGluIHRoaXMgZGlyZWN0b3J5LgotIyBBIC5odG1sIHN1ZmZpeCB3aWxsIGJlIGFkZGVkLgotcm9vdHBhZ2UgPSAncm9vdCcKLQotIyBTZXQgc2tpcGVtcHR5IHRvIDAgaWYgeW91IHdpc2ggdG8gc2VlIGxpbmtzIHRvIGVtcHR5IGdyb3VwcyBhcyB3ZWxsLgotIyBPbmx5IGFmZmVjdHMgdGhlIC1hIG9wdGlvbi4KLXNraXBlbXB0eSA9IDEKLQotIyBwYWdlbGlua2ljb24gY2FuIGNvbnRhaW4gaHRtbCB0byBwdXQgYW4gaWNvbiBhZnRlciBsaW5rcyB0bwotIyBmdXJ0aGVyIHBhZ2VzLiBUaGlzIGhlbHBzIHRvIG1ha2UgaW1wb3J0YW50IGxpbmtzIHN0YW5kIG91dC4KLSMgU2V0IHRvICcnIGlmIG5vdCB3YW50ZWQsIG9yICcuLi4nIGlzIHF1aXRlIGEgZ29vZCBvbmUuCi1wYWdlbGlua2ljb24gPSAnLi4uIDxpbWcgc3JjPSJodHRwOi8vcGVsaWNhbi5jbC5jYW0uYWMudWsvaWNvbnMvcGFnZS54Ym0iPiAnCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExlc3MgaW1wb3J0YW50IHBlcnNvbmFsIHByZWZlcmVuY2VzOgotCi0jIFN1Ymxpc3RzaXplIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGUgd2lsbCBhcHBlYXIgYXMKLSMgYW4gaW5kZW50ZWQgc3ViLWxpc3QgYmVmb3JlIHRoZSB3aG9sZSB0aGluZyBpcyBtb3ZlZCBvbnRvIGEgZGlmZmVyZW50Ci0jIHBhZ2UuIFRoZSBzbWFsbGVyIHRoaXMgaXMsIHRoZSBtb3JlIHBhZ2VzIHlvdSB3aWxsIGhhdmUsIGJ1dCB0aGUKLSMgc2hvcnRlciBlYWNoIHdpbGwgYmUuCi1zdWJsaXN0c2l6ZSA9IDQKLQotIyBUaGF0IHNob3VsZCBiZSBhbGwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWZvciBkaXIgaW4gb3MuY3VyZGlyLCBvcy5lbnZpcm9uWydIT01FJ106Ci0gICAgcmNmaWxlID0gb3MucGF0aC5qb2luKGRpciwgJy5uZXdzbGlzdHJjLnB5JykKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhyY2ZpbGUpOgotICAgICAgICBwcmludChyY2ZpbGUpCi0gICAgICAgIGV4ZWMob3BlbihyY2ZpbGUpLnJlYWQoKSkKLSAgICAgICAgYnJlYWsKLQotZnJvbSBubnRwbGliIGltcG9ydCBOTlRQCi1mcm9tIHN0YXQgaW1wb3J0ICoKLQotcmNzcmV2ID0gJyRSZXZpc2lvbiQnCi1yY3NyZXYgPSAnICcuam9pbihbcyBmb3IgcyBpbiByY3NyZXYuc3BsaXQoKSBpZiAnJCcgbm90IGluIHNdKQotZGVzYyA9IHt9Ci0KLSMgTWFrZSAocG9zc2libHkpIHJlbGF0aXZlIGZpbGVuYW1lcyBpbnRvIGFic29sdXRlIG9uZXMKLXRyZWVmaWxlID0gb3MucGF0aC5qb2luKHRvcGRpcix0cmVlZmlsZSkKLWRlc2NmaWxlID0gb3MucGF0aC5qb2luKHRvcGRpcixkZXNjZmlsZSkKLXBhZ2UgPSBvcy5wYXRoLmpvaW4odG9wZGlyLHBhZ2VkaXIpCi0KLSMgRmlyc3QgdGhlIGJpdHMgZm9yIGNyZWF0aW5nIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIEFkZHRvdHJlZSBjcmVhdGVzL2F1Z21lbnRzIGEgdHJlZSBmcm9tIGEgbGlzdCBvZiBncm91cCBuYW1lcwotZGVmIGFkZHRvdHJlZSh0cmVlLCBncm91cHMpOgotICAgIHByaW50KCdVcGRhdGluZyB0cmVlLi4uJykKLSAgICBmb3IgaSBpbiBncm91cHM6Ci0gICAgICAgIHBhcnRzID0gaS5zcGxpdCgnLicpCi0gICAgICAgIG1ha2VsZWFmKHRyZWUsIHBhcnRzKQotCi0jIE1ha2VsZWFmIG1ha2VzIGEgbGVhZiBhbmQgdGhlIGJyYW5jaCBsZWFkaW5nIHRvIGl0IGlmIG5lY2Vzc2FyeQotZGVmIG1ha2VsZWFmKHRyZWUscGF0aCk6Ci0gICAgaiA9IHBhdGhbMF0KLSAgICBsID0gbGVuKHBhdGgpCi0KLSAgICBpZiBqIG5vdCBpbiB0cmVlOgotICAgICAgICB0cmVlW2pdID0ge30KLSAgICBpZiBsID09IDE6Ci0gICAgICAgIHRyZWVbal1bJy4nXSA9ICcuJwotICAgIGlmIGwgPiAxOgotICAgICAgICBtYWtlbGVhZih0cmVlW2pdLHBhdGhbMTpdKQotCi0jIFRoZW4gdGhlIGJpdHMgZm9yIG91dHB1dHRpbmcgdHJlZXMgYXMgcGFnZXMgLS0tLS0tLS0tLS0tLS0tLQotCi0jIENyZWF0ZXBhZ2UgY3JlYXRlcyBhbiBIVE1MIGZpbGUgbmFtZWQgPHJvb3Q+Lmh0bWwgY29udGFpbmluZyBsaW5rcwotIyB0byB0aG9zZSBncm91cHMgYmVnaW5uaW5nIHdpdGggPHJvb3Q+LgotCi1kZWYgY3JlYXRlcGFnZShyb290LCB0cmVlLCBwKToKLSAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYWdlZGlyLCByb290KycuaHRtbCcpCi0gICAgaWYgcm9vdCA9PSByb290cGFnZToKLSAgICAgICAgZGV0YWlsID0gJycKLSAgICBlbHNlOgotICAgICAgICBkZXRhaWwgPSAnIHVuZGVyICcgKyByb290Ci0gICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGY6Ci0gICAgICAgICMgZi53cml0ZSgnQ29udGVudC1UeXBlOiB0ZXh0L2h0bWxcbicpCi0gICAgICAgIGYud3JpdGUoJzxodG1sPlxuPGhlYWQ+XG4nKQotICAgICAgICBmLndyaXRlKCc8dGl0bGU+TmV3c2dyb3VwcyBhdmFpbGFibGUlczwvdGl0bGU+XG4nICUgZGV0YWlsKQotICAgICAgICBmLndyaXRlKCc8L2hlYWQ+XG48Ym9keT5cbicpCi0gICAgICAgIGYud3JpdGUoJzxoMT5OZXdzZ3JvdXBzIGF2YWlsYWJsZSVzPC9oMT5cbicgJSBkZXRhaWwpCi0gICAgICAgIGYud3JpdGUoJzxhIGhyZWY9IiVzJXMuaHRtbCI+QmFjayB0byB0b3AgbGV2ZWw8L2E+PHA+XG4nICUKLSAgICAgICAgICAgICAgICAoaHR0cHByZWYsIHJvb3RwYWdlKSkKLSAgICAgICAgcHJpbnR0cmVlKGYsIHRyZWUsIDAsIHApCi0gICAgICAgIGYud3JpdGUoJ1xuPHA+JykKLSAgICAgICAgZi53cml0ZSgiPGk+VGhpcyBwYWdlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBieSAnbmV3c2xpc3QnIHYuICVzLiIgJQotICAgICAgICAgICAgICAgIHJjc3JldikKLSAgICAgICAgZi53cml0ZSh0aW1lLmN0aW1lKHRpbWUudGltZSgpKSArICc8L2k+XG4nKQotICAgICAgICBmLndyaXRlKCc8L2JvZHk+XG48L2h0bWw+XG4nKQotCi0jIFByaW50dHJlZSBwcmludHMgdGhlIGdyb3VwcyBhcyBhIGJ1bGxldGVkIGxpc3QuICBHcm91cHMgd2l0aAotIyBtb3JlIHRoYW4gPHN1Ymxpc3RzaXplPiBzdWJncm91cHMgd2lsbCBiZSBwdXQgb24gYSBzZXBhcmF0ZSBwYWdlLgotIyBPdGhlciBzZXRzIG9mIHN1Ymdyb3VwcyBhcmUganVzdCBpbmRlbnRlZC4KLQotZGVmIHByaW50dHJlZShmLCB0cmVlLCBpbmRlbnQsIHApOgotICAgIGwgPSBsZW4odHJlZSkKLQotICAgIGlmIGwgPiBzdWJsaXN0c2l6ZSBhbmQgaW5kZW50ID4gMDoKLSAgICAgICAgIyBDcmVhdGUgYSBuZXcgcGFnZSBhbmQgYSBsaW5rIHRvIGl0Ci0gICAgICAgIGYud3JpdGUoJzxsaT48Yj48YSBocmVmPSIlcyVzLmh0bWwiPicgJSAoaHR0cHByZWYsIHBbMTpdKSkKLSAgICAgICAgZi53cml0ZShwWzE6XSArICcuKicpCi0gICAgICAgIGYud3JpdGUoJzwvYT48L2I+JXNcbicgJSBwYWdlbGlua2ljb24pCi0gICAgICAgIGNyZWF0ZXBhZ2UocFsxOl0sIHRyZWUsIHApCi0gICAgICAgIHJldHVybgotCi0gICAga2wgPSBzb3J0ZWQodHJlZS5rZXlzKCkpCi0KLSAgICBpZiBsID4gMToKLSAgICAgICAgaWYgaW5kZW50ID4gMDoKLSAgICAgICAgICAgICMgQ3JlYXRlIGEgc3ViLWxpc3QKLSAgICAgICAgICAgIGYud3JpdGUoJzxsaT4lc1xuPHVsPicgJSBwWzE6XSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgQ3JlYXRlIGEgbWFpbiBsaXN0Ci0gICAgICAgICAgICBmLndyaXRlKCc8dWw+JykKLSAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgMQotCi0gICAgZm9yIGkgaW4ga2w6Ci0gICAgICAgIGlmIGkgPT0gJy4nOgotICAgICAgICAgICAgIyBPdXRwdXQgYSBuZXdzZ3JvdXAKLSAgICAgICAgICAgIGYud3JpdGUoJzxsaT48YSBocmVmPSJuZXdzOiVzIj4lczwvYT4gJyAlIChwWzE6XSwgcFsxOl0pKQotICAgICAgICAgICAgaWYgcFsxOl0gaW4gZGVzYzoKLSAgICAgICAgICAgICAgICBmLndyaXRlKCcgICAgIDxpPiVzPC9pPlxuJyAlIGRlc2NbcFsxOl1dKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmLndyaXRlKCdcbicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIE91dHB1dCBhIGhpZXJhcmNoeQotICAgICAgICAgICAgcHJpbnR0cmVlKGYsIHRyZWVbaV0sIGluZGVudCwgcCsnLicraSkKLQotICAgIGlmIGwgPiAxOgotICAgICAgICBmLndyaXRlKCdcbjwvdWw+JykKLQotIyBSZWFkaW5nIGRlc2NyaXB0aW9ucyBmaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jIFRoaXMgcmV0dXJucyBhIGRpY3QgbWFwcGluZyBncm91cCBuYW1lIHRvIGl0cyBkZXNjcmlwdGlvbgotCi1kZWYgcmVhZGRlc2MoZGVzY2ZpbGUpOgotICAgIGdsb2JhbCBkZXNjCi0gICAgZGVzYyA9IHt9Ci0KLSAgICBpZiBkZXNjZmlsZSA9PSAnJzoKLSAgICAgICAgcmV0dXJuCi0KLSAgICB0cnk6Ci0gICAgICAgIHdpdGggb3BlbihkZXNjZmlsZSwgJ3InKSBhcyBkOgotICAgICAgICAgICAgcHJpbnQoJ1JlYWRpbmcgZGVzY3JpcHRpb25zLi4uJykKLSAgICAgICAgICAgIGZvciBsIGluIGQ6Ci0gICAgICAgICAgICAgICAgYml0cyA9IGwuc3BsaXQoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZ3JwID0gYml0c1swXQotICAgICAgICAgICAgICAgICAgICBkc2MgPSAnICcuam9pbihiaXRzWzE6XSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGRzYykgPiAxOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVzY1tncnBdID0gZHNjCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcHJpbnQoJ0ZhaWxlZCB0byBvcGVuIGRlc2NyaXB0aW9uIGZpbGUgJyArIGRlc2NmaWxlKQotICAgICAgICByZXR1cm4KLQotIyBDaGVjayB0aGF0IG91cHV0IGRpcmVjdG9yeSBleGlzdHMsIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBhbmQgb2ZmZXIgdG8gY3JlYXRlIGl0IGlmIG5vdAotCi1kZWYgY2hlY2tvcGRpcihwYWdlZGlyKToKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihwYWdlZGlyKToKLSAgICAgICAgcHJpbnQoJ0RpcmVjdG9yeSAlcyBkb2VzIG5vdCBleGlzdC4nICUgcGFnZWRpcikKLSAgICAgICAgcHJpbnQoJ1NoYWxsIEkgY3JlYXRlIGl0IGZvciB5b3U/ICh5L24pJykKLSAgICAgICAgaWYgc3lzLnN0ZGluLnJlYWRsaW5lKClbMF0gPT0gJ3knOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKHBhZ2VkaXIsIDBvNzc3KQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHByaW50KCdTb3JyeSAtIGZhaWxlZCEnKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCgnT0suIEV4aXRpbmcuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSMgUmVhZCBhbmQgd3JpdGUgY3VycmVudCBsb2NhbCB0cmVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZGVmIHJlYWRsb2NhbGxpc3QodHJlZWZpbGUpOgotICAgIHByaW50KCdSZWFkaW5nIGN1cnJlbnQgbG9jYWwgZ3JvdXAgbGlzdC4uLicpCi0gICAgdHJlZSA9IHt9Ci0gICAgdHJ5OgotICAgICAgICB0cmVldGltZSA9IHRpbWUubG9jYWx0aW1lKG9zLnN0YXQodHJlZWZpbGUpW1NUX01USU1FXSkKLSAgICBleGNlcHQ6Ci0gICAgICAgIHByaW50KCdcbioqKiBGYWlsZWQgdG8gb3BlbiBsb2NhbCBncm91cCBjYWNoZSAnK3RyZWVmaWxlKQotICAgICAgICBwcmludCgnSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZSBydW4gbmV3c2xpc3QsIHRoZW4nKQotICAgICAgICBwcmludCgndXNlIHRoZSAtYSBvcHRpb24gdG8gY3JlYXRlIGl0LicpCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgdHJlZWRhdGUgPSAnJTAyZCUwMmQlMDJkJyAlICh0cmVldGltZVswXSAlIDEwMCwgdHJlZXRpbWVbMV0sIHRyZWV0aW1lWzJdKQotICAgIHRyeToKLSAgICAgICAgd2l0aCBvcGVuKHRyZWVmaWxlLCAncmInKSBhcyBkdW1wOgotICAgICAgICAgICAgdHJlZSA9IG1hcnNoYWwubG9hZChkdW1wKQotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBwcmludCgnQ2Fubm90IG9wZW4gbG9jYWwgZ3JvdXAgbGlzdCAnICsgdHJlZWZpbGUpCi0gICAgcmV0dXJuICh0cmVlLCB0cmVlZGF0ZSkKLQotZGVmIHdyaXRlbG9jYWxsaXN0KHRyZWVmaWxlLCB0cmVlKToKLSAgICB0cnk6Ci0gICAgICAgIHdpdGggb3Blbih0cmVlZmlsZSwgJ3diJykgYXMgZHVtcDoKLSAgICAgICAgICAgIGdyb3VwcyA9IG1hcnNoYWwuZHVtcCh0cmVlLCBkdW1wKQotICAgICAgICBwcmludCgnU2F2ZWQgbGlzdCB0byAlc1xuJyAlIHRyZWVmaWxlKQotICAgIGV4Y2VwdDoKLSAgICAgICAgcHJpbnQoJ1NvcnJ5IC0gZmFpbGVkIHRvIHdyaXRlIHRvIGxvY2FsIGdyb3VwIGNhY2hlJywgdHJlZWZpbGUpCi0gICAgICAgIHByaW50KCdEb2VzIGl0IChvciBpdHMgZGlyZWN0b3J5KSBoYXZlIHRoZSBjb3JyZWN0IHBlcm1pc3Npb25zPycpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLSMgUmV0dXJuIGxpc3Qgb2YgYWxsIGdyb3VwcyBvbiBzZXJ2ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZGVmIGdldGFsbGdyb3VwcyhzZXJ2ZXIpOgotICAgIHByaW50KCdHZXR0aW5nIGxpc3Qgb2YgYWxsIGdyb3Vwcy4uLicpCi0gICAgdHJlZWRhdGUgPSAnMDEwMTAxJwotICAgIGluZm8gPSBzZXJ2ZXIubGlzdCgpWzFdCi0gICAgZ3JvdXBzID0gW10KLSAgICBwcmludCgnUHJvY2Vzc2luZy4uLicpCi0gICAgaWYgc2tpcGVtcHR5OgotICAgICAgICBwcmludCgnXG5JZ25vcmluZyBmb2xsb3dpbmcgZW1wdHkgZ3JvdXBzOicpCi0gICAgZm9yIGkgaW4gaW5mbzoKLSAgICAgICAgZ3JwbmFtZSA9IGlbMF0uc3BsaXQoKVswXQotICAgICAgICBpZiBza2lwZW1wdHkgYW5kIGludChpWzFdKSA8IGludChpWzJdKToKLSAgICAgICAgICAgIHByaW50KGdycG5hbWUuZGVjb2RlKCkgKyAnICcsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBncm91cHMuYXBwZW5kKGdycG5hbWUuZGVjb2RlKCkpCi0gICAgcHJpbnQoJ1xuJykKLSAgICBpZiBza2lwZW1wdHk6Ci0gICAgICAgIHByaW50KCcoRW5kIG9mIGVtcHR5IGdyb3VwcyknKQotICAgIHJldHVybiBncm91cHMKLQotIyBSZXR1cm4gbGlzdCBvZiBuZXcgZ3JvdXBzIG9uIHNlcnZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1kZWYgZ2V0bmV3Z3JvdXBzKHNlcnZlciwgdHJlZWRhdGUpOgotICAgIHByaW50KCdHZXR0aW5nIGxpc3Qgb2YgbmV3IGdyb3VwcyBzaW5jZSBzdGFydCBvZiAlcy4uLicgJSB0cmVlZGF0ZSwgZW5kPScgJykKLSAgICBpbmZvID0gc2VydmVyLm5ld2dyb3Vwcyh0cmVlZGF0ZSwgJzAwMDAwMScpWzFdCi0gICAgcHJpbnQoJ2dvdCAlZC4nICUgbGVuKGluZm8pKQotICAgIHByaW50KCdQcm9jZXNzaW5nLi4uJywgZW5kPScgJykKLSAgICBncm91cHMgPSBbXQotICAgIGZvciBpIGluIGluZm86Ci0gICAgICAgIGdycG5hbWUgPSBpLnNwbGl0KClbMF0KLSAgICAgICAgZ3JvdXBzLmFwcGVuZChncnBuYW1lLmRlY29kZSgpKQotICAgIHByaW50KCdEb25lJykKLSAgICByZXR1cm4gZ3JvdXBzCi0KLSMgTm93IHRoZSBtYWluIHByb2dyYW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotZGVmIG1haW4oKToKLSAgICB0cmVlID0ge30KLQotICAgICMgQ2hlY2sgdGhhdCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHMKLSAgICBjaGVja29wZGlyKHBhZ2VkaXIpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KCdDb25uZWN0aW5nIHRvICVzLi4uJyAlIG5ld3Nob3N0KQotICAgICAgICBpZiBzeXMudmVyc2lvblswXSA9PSAnMCc6Ci0gICAgICAgICAgICBzID0gTk5UUC5pbml0KG5ld3Nob3N0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcyA9IE5OVFAobmV3c2hvc3QpCi0gICAgICAgIGNvbm5lY3RlZCA9IFRydWUKLSAgICBleGNlcHQgKG5udHBsaWIuZXJyb3JfdGVtcCwgbm50cGxpYi5lcnJvcl9wZXJtKSBhcyB4OgotICAgICAgICBwcmludCgnRXJyb3IgY29ubmVjdGluZyB0byBob3N0OicsIHgpCi0gICAgICAgIHByaW50KCdJXCdsbCB0cnkgdG8gdXNlIGp1c3QgdGhlIGxvY2FsIGxpc3QuJykKLSAgICAgICAgY29ubmVjdGVkID0gRmFsc2UKLQotICAgICMgSWYgLWEgaXMgc3BlY2lmaWVkLCByZWFkIHRoZSBmdWxsIGxpc3Qgb2YgZ3JvdXBzIGZyb20gc2VydmVyCi0gICAgaWYgY29ubmVjdGVkIGFuZCBsZW4oc3lzLmFyZ3YpID4gMSBhbmQgc3lzLmFyZ3ZbMV0gPT0gJy1hJzoKLSAgICAgICAgZ3JvdXBzID0gZ2V0YWxsZ3JvdXBzKHMpCi0KLSAgICAjIE90aGVyd2lzZSBqdXN0IHJlYWQgdGhlIGxvY2FsIGZpbGUgYW5kIHRoZW4gYWRkCi0gICAgIyBncm91cHMgY3JlYXRlZCBzaW5jZSBsb2NhbCBmaWxlIGxhc3QgbW9kaWZpZWQuCi0gICAgZWxzZToKLQotICAgICAgICAodHJlZSwgdHJlZWRhdGUpID0gcmVhZGxvY2FsbGlzdCh0cmVlZmlsZSkKLSAgICAgICAgaWYgY29ubmVjdGVkOgotICAgICAgICAgICAgZ3JvdXBzID0gZ2V0bmV3Z3JvdXBzKHMsIHRyZWVkYXRlKQotCi0gICAgaWYgY29ubmVjdGVkOgotICAgICAgICBhZGR0b3RyZWUodHJlZSwgZ3JvdXBzKQotICAgICAgICB3cml0ZWxvY2FsbGlzdCh0cmVlZmlsZSx0cmVlKQotCi0gICAgIyBSZWFkIGdyb3VwIGRlc2NyaXB0aW9ucwotICAgIHJlYWRkZXNjKGRlc2NmaWxlKQotCi0gICAgcHJpbnQoJ0NyZWF0aW5nIHBhZ2VzLi4uJykKLSAgICBjcmVhdGVwYWdlKHJvb3RwYWdlLCB0cmVlLCAnJykKLSAgICBwcmludCgnRG9uZScpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCi0KLSMgVGhhdCdzIGFsbCBmb2xrcwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3BpLnB5IGIvRGVtby9zY3JpcHRzL3BpLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwNzQwY2QwLi4wMDAwMDAwCi0tLSBhL0RlbW8vc2NyaXB0cy9waS5weQorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBQcmludCBkaWdpdHMgb2YgcGkgZm9yZXZlci4KLSMKLSMgVGhlIGFsZ29yaXRobSwgdXNpbmcgUHl0aG9uJ3MgJ2xvbmcnIGludGVnZXJzICgiYmlnbnVtcyIpLCB3b3JrcwotIyB3aXRoIGNvbnRpbnVlZCBmcmFjdGlvbnMsIGFuZCB3YXMgY29uY2VpdmVkIGJ5IExhbWJlcnQgTWVlcnRlbnMuCi0jCi0jIFNlZSBhbHNvIHRoZSBBQkMgUHJvZ3JhbW1lcidzIEhhbmRib29rLCBieSBHZXVydHMsIE1lZXJ0ZW5zICYgUGVtYmVydG9uLAotIyBwdWJsaXNoZWQgYnkgUHJlbnRpY2UtSGFsbCAoVUspIEx0ZC4sIDE5OTAuCi0KLWltcG9ydCBzeXMKLQotZGVmIG1haW4oKToKLSAgICBrLCBhLCBiLCBhMSwgYjEgPSAyLCA0LCAxLCAxMiwgNAotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICMgTmV4dCBhcHByb3hpbWF0aW9uCi0gICAgICAgIHAsIHEsIGsgPSBrKmssIDIqaysxLCBrKzEKLSAgICAgICAgYSwgYiwgYTEsIGIxID0gYTEsIGIxLCBwKmErcSphMSwgcCpiK3EqYjEKLSAgICAgICAgIyBQcmludCBjb21tb24gZGlnaXRzCi0gICAgICAgIGQsIGQxID0gYS8vYiwgYTEvL2IxCi0gICAgICAgIHdoaWxlIGQgPT0gZDE6Ci0gICAgICAgICAgICBvdXRwdXQoZCkKLSAgICAgICAgICAgIGEsIGExID0gMTAqKGElYiksIDEwKihhMSViMSkKLSAgICAgICAgICAgIGQsIGQxID0gYS8vYiwgYTEvL2IxCi0KLWRlZiBvdXRwdXQoZCk6Ci0gICAgIyBVc2Ugd3JpdGUoKSB0byBhdm9pZCBzcGFjZXMgYmV0d2VlbiB0aGUgZGlnaXRzCi0gICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZCkpCi0gICAgIyBGbHVzaCBzbyB0aGUgb3V0cHV0IGlzIHNlZW4gaW1tZWRpYXRlbHkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy9wcC5weSBiL0RlbW8vc2NyaXB0cy9wcC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmM5NDhmNy4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvcHAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEVtdWxhdGUgc29tZSBQZXJsIGNvbW1hbmQgbGluZSBvcHRpb25zLgotIyBVc2FnZTogcHAgWy1hXSBbLWNdIFstZF0gWy1lIHNjcmlwdGxpbmVdIFstRiBmaWVsZHNlcF0gWy1uXSBbLXBdIFtmaWxlXSAuLi4KLSMgV2hlcmUgdGhlIG9wdGlvbnMgbWVhbiB0aGUgZm9sbG93aW5nOgotIyAgIC1hICAgICAgICAgICAgOiB0b2dldGhlciB3aXRoIC1uIG9yIC1wLCBzcGxpdHMgZWFjaCBsaW5lIGludG8gbGlzdCBGCi0jICAgLWMgICAgICAgICAgICA6IGNoZWNrIHN5bnRheCBvbmx5LCBkbyBub3QgZXhlY3V0ZSBhbnkgY29kZQotIyAgIC1kICAgICAgICAgICAgOiBydW4gdGhlIHNjcmlwdCB1bmRlciB0aGUgZGVidWdnZXIsIHBkYgotIyAgIC1lIHNjcmlwdGxpbmUgOiBnaXZlcyBvbmUgbGluZSBvZiB0aGUgUHl0aG9uIHNjcmlwdDsgbWF5IGJlIHJlcGVhdGVkCi0jICAgLUYgZmllbGRzZXAgICA6IHNldHMgdGhlIGZpZWxkIHNlcGFyYXRvciBmb3IgdGhlIC1hIG9wdGlvbiBbbm90IGluIFBlcmxdCi0jICAgLW4gICAgICAgICAgICA6IHJ1bnMgdGhlIHNjcmlwdCBmb3IgZWFjaCBsaW5lIG9mIGlucHV0Ci0jICAgLXAgICAgICAgICAgICA6IHByaW50cyB0aGUgbGluZSBhZnRlciB0aGUgc2NyaXB0IGhhcyBydW4KLSMgV2hlbiBubyBzY3JpcHQgbGluZXMgaGF2ZSBiZWVuIHBhc3NlZCwgdGhlIGZpcnN0IGZpbGUgYXJndW1lbnQKLSMgY29udGFpbnMgdGhlIHNjcmlwdC4gIFdpdGggLW4gb3IgLXAsIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZQotIyByZWFkIGFzIGlucHV0IHRvIHRoZSBzY3JpcHQsIGxpbmUgYnkgbGluZS4gIElmIGEgZmlsZSBpcyAnLScKLSMgb3IgbWlzc2luZywgc3RhbmRhcmQgaW5wdXQgaXMgcmVhZC4KLQotIyBYWFggVG8gZG86Ci0jIC0gYWRkIC1pIGV4dGVuc2lvbiBvcHRpb24gKGNoYW5nZSBmaWxlcyBpbiBwbGFjZSkKLSMgLSBtYWtlIGEgc2luZ2xlIGxvb3Agb3ZlciB0aGUgZmlsZXMgYW5kIGxpbmVzIChjaGFuZ2VzIGVmZmVjdCBvZiAnYnJlYWsnKT8KLSMgLSBhZGQgYW4gb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHJlY29yZCBzZXBhcmF0b3IKLSMgLSBleGNlcHQgZm9yIC1uLy1wLCBydW4gZGlyZWN0bHkgZnJvbSB0aGUgZmlsZSBpZiBhdCBhbGwgcG9zc2libGUKLQotaW1wb3J0IHN5cwotaW1wb3J0IGdldG9wdAotCi1GUyA9ICcnCi1TQ1JJUFQgPSBbXQotQUZMQUcgPSAwCi1DRkxBRyA9IDAKLURGTEFHID0gMAotTkZMQUcgPSAwCi1QRkxBRyA9IDAKLQotdHJ5OgotICAgIG9wdGxpc3QsIEFSR1MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2FjZGU6RjpucCcpCi1leGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICBzeXMuc3RkZXJyLndyaXRlKCclczogJXNcbicgJSAoc3lzLmFyZ3ZbMF0sIG1zZykpCi0gICAgc3lzLmV4aXQoMikKLQotZm9yIG9wdGlvbiwgb3B0YXJnIGluIG9wdGxpc3Q6Ci0gICAgaWYgb3B0aW9uID09ICctYSc6Ci0gICAgICAgIEFGTEFHID0gMQotICAgIGVsaWYgb3B0aW9uID09ICctYyc6Ci0gICAgICAgIENGTEFHID0gMQotICAgIGVsaWYgb3B0aW9uID09ICctZCc6Ci0gICAgICAgIERGTEFHID0gMQotICAgIGVsaWYgb3B0aW9uID09ICctZSc6Ci0gICAgICAgIGZvciBsaW5lIGluIG9wdGFyZy5zcGxpdCgnXG4nKToKLSAgICAgICAgICAgIFNDUklQVC5hcHBlbmQobGluZSkKLSAgICBlbGlmIG9wdGlvbiA9PSAnLUYnOgotICAgICAgICBGUyA9IG9wdGFyZwotICAgIGVsaWYgb3B0aW9uID09ICctbic6Ci0gICAgICAgIE5GTEFHID0gMQotICAgICAgICBQRkxBRyA9IDAKLSAgICBlbGlmIG9wdGlvbiA9PSAnLXAnOgotICAgICAgICBORkxBRyA9IDEKLSAgICAgICAgUEZMQUcgPSAxCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQob3B0aW9uLCAnbm90IHJlY29nbml6ZWQ/Pz8nKQotCi1pZiBub3QgQVJHUzogQVJHUy5hcHBlbmQoJy0nKQotCi1pZiBub3QgU0NSSVBUOgotICAgIGlmIEFSR1NbMF0gPT0gJy0nOgotICAgICAgICBmcCA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIGZwID0gb3BlbihBUkdTWzBdLCAncicpCi0gICAgd2hpbGUgMToKLSAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgIFNDUklQVC5hcHBlbmQobGluZVs6LTFdKQotICAgIGRlbCBmcAotICAgIGRlbCBBUkdTWzBdCi0gICAgaWYgbm90IEFSR1M6IEFSR1MuYXBwZW5kKCctJykKLQotaWYgQ0ZMQUc6Ci0gICAgcHJvbG9ndWUgPSBbJ2lmIDA6J10KLSAgICBlcGlsb2d1ZSA9IFtdCi1lbGlmIE5GTEFHOgotICAgICMgTm90ZSB0aGF0IGl0IGlzIG9uIHB1cnBvc2UgdGhhdCBBRkxBRyBhbmQgUEZMQUcgYXJlCi0gICAgIyB0ZXN0ZWQgZHluYW1pY2FsbHkgZWFjaCB0aW1lIHRocm91Z2ggdGhlIGxvb3AKLSAgICBwcm9sb2d1ZSA9IFsKLSAgICAgICAgICAgICdMSU5FQ09VTlQgPSAwJywKLSAgICAgICAgICAgICdmb3IgRklMRSBpbiBBUkdTOicsCi0gICAgICAgICAgICAnICAgXHRpZiBGSUxFID09IFwnLVwnOicsCi0gICAgICAgICAgICAnICAgXHQgICBcdEZQID0gc3lzLnN0ZGluJywKLSAgICAgICAgICAgICcgICBcdGVsc2U6JywKLSAgICAgICAgICAgICcgICBcdCAgIFx0RlAgPSBvcGVuKEZJTEUsIFwnclwnKScsCi0gICAgICAgICAgICAnICAgXHRMSU5FTk8gPSAwJywKLSAgICAgICAgICAgICcgICBcdHdoaWxlIDE6JywKLSAgICAgICAgICAgICcgICBcdCAgIFx0TElORSA9IEZQLnJlYWRsaW5lKCknLAotICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBub3QgTElORTogYnJlYWsnLAotICAgICAgICAgICAgJyAgIFx0ICAgXHRMSU5FTk8gPSBMSU5FTk8gKyAxJywKLSAgICAgICAgICAgICcgICBcdCAgIFx0TElORUNPVU5UID0gTElORUNPVU5UICsgMScsCi0gICAgICAgICAgICAnICAgXHQgICBcdEwgPSBMSU5FWzotMV0nLAotICAgICAgICAgICAgJyAgIFx0ICAgXHRhZmxhZyA9IEFGTEFHJywKLSAgICAgICAgICAgICcgICBcdCAgIFx0aWYgYWZsYWc6JywKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRpZiBGUzogRiA9IEwuc3BsaXQoRlMpJywKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRlbHNlOiBGID0gTC5zcGxpdCgpJwotICAgICAgICAgICAgXQotICAgIGVwaWxvZ3VlID0gWwotICAgICAgICAgICAgJyAgIFx0ICAgXHRpZiBub3QgUEZMQUc6IGNvbnRpbnVlJywKLSAgICAgICAgICAgICcgICBcdCAgIFx0aWYgYWZsYWc6JywKLSAgICAgICAgICAgICcgICBcdCAgIFx0ICAgXHRpZiBGUzogcHJpbnQoRlMuam9pbihGKSknLAotICAgICAgICAgICAgJyAgIFx0ICAgXHQgICBcdGVsc2U6IHByaW50KFwnIFwnLmpvaW4oRikpJywKLSAgICAgICAgICAgICcgICBcdCAgIFx0ZWxzZTogcHJpbnQoTCknLAotICAgICAgICAgICAgXQotZWxzZToKLSAgICBwcm9sb2d1ZSA9IFsnaWYgMTonXQotICAgIGVwaWxvZ3VlID0gW10KLQotIyBOb3RlIHRoYXQgd2UgaW5kZW50IHVzaW5nIHRhYnMgb25seSwgc28gdGhhdCBhbnkgaW5kZW50YXRpb24gc3R5bGUKLSMgdXNlZCBpbiAnY29tbWFuZCcgd2lsbCBjb21lIG91dCByaWdodCBhZnRlciByZS1pbmRlbnRhdGlvbi4KLQotcHJvZ3JhbSA9ICdcbicuam9pbihwcm9sb2d1ZSkgKyAnXG4nCi1mb3IgbGluZSBpbiBTQ1JJUFQ6Ci0gICAgcHJvZ3JhbSArPSAnICAgXHQgICBcdCcgKyBsaW5lICsgJ1xuJwotcHJvZ3JhbSArPSAnXG4nLmpvaW4oZXBpbG9ndWUpICsgJ1xuJwotCi1pZiBERkxBRzoKLSAgICBpbXBvcnQgcGRiCi0gICAgcGRiLnJ1bihwcm9ncmFtKQotZWxzZToKLSAgICBleGVjKHByb2dyYW0pCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvcHJpbWVzLnB5IGIvRGVtby9zY3JpcHRzL3ByaW1lcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDkyNGFhYi4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvcHJpbWVzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFByaW50IHByaW1lIG51bWJlcnMgaW4gYSBnaXZlbiByYW5nZQotCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCBzeXMKLSAgICBtaW4sIG1heCA9IDIsIDB4N2ZmZmZmZmYKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIG1pbiA9IGludChldmFsKHN5cy5hcmd2WzFdKSkKLSAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICAgICAgbWF4ID0gaW50KGV2YWwoc3lzLmFyZ3ZbMl0pKQotICAgIHByaW1lcyhtaW4sIG1heCkKLQotZGVmIHByaW1lcyhtaW4sIG1heCk6Ci0gICAgaWYgMiA+PSBtaW46IHByaW50KDIpCi0gICAgcHJpbWVzID0gWzJdCi0gICAgaSA9IDMKLSAgICB3aGlsZSBpIDw9IG1heDoKLSAgICAgICAgZm9yIHAgaW4gcHJpbWVzOgotICAgICAgICAgICAgaWYgaSVwID09IDAgb3IgcCpwID4gaTogYnJlYWsKLSAgICAgICAgaWYgaSVwICE9IDA6Ci0gICAgICAgICAgICBwcmltZXMuYXBwZW5kKGkpCi0gICAgICAgICAgICBpZiBpID49IG1pbjogcHJpbnQoaSkKLSAgICAgICAgaSA9IGkrMgotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3NjcmlwdC5weSBiL0RlbW8vc2NyaXB0cy9zY3JpcHQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGI0OTBiMTcuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL3NjcmlwdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBzY3JpcHQucHkgLS0gTWFrZSB0eXBlc2NyaXB0IG9mIHRlcm1pbmFsIHNlc3Npb24uCi0jIFVzYWdlOgotIyAgICAgICAtYSAgICAgIEFwcGVuZCB0byB0eXBlc2NyaXB0LgotIyAgICAgICAtcCAgICAgIFVzZSBQeXRob24gYXMgc2hlbGwuCi0jIEF1dGhvcjogU3RlZW4gTHVtaG9sdC4KLQotCi1pbXBvcnQgb3MsIHRpbWUsIHN5cywgZ2V0b3B0Ci1pbXBvcnQgcHR5Ci0KLWRlZiByZWFkKGZkKToKLSAgICBkYXRhID0gb3MucmVhZChmZCwgMTAyNCkKLSAgICBzY3JpcHQud3JpdGUoZGF0YSkKLSAgICByZXR1cm4gZGF0YQotCi1zaGVsbCA9ICdzaCcKLWZpbGVuYW1lID0gJ3R5cGVzY3JpcHQnCi1tb2RlID0gJ3diJwotaWYgJ1NIRUxMJyBpbiBvcy5lbnZpcm9uOgotICAgIHNoZWxsID0gb3MuZW52aXJvblsnU0hFTEwnXQotCi10cnk6Ci0gICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYXAnKQotZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgcHJpbnQoJyVzOiAlcycgJSAoc3lzLmFyZ3ZbMF0sIG1zZykpCi0gICAgc3lzLmV4aXQoMikKLQotZm9yIG8sIGEgaW4gb3B0czoKLSAgICBpZiBvID09ICctYSc6Ci0gICAgICAgIG1vZGUgPSAnYWInCi0gICAgZWxpZiBvID09ICctcCc6Ci0gICAgICAgIHNoZWxsID0gJ3B5dGhvbicKLQotc2NyaXB0ID0gb3BlbihmaWxlbmFtZSwgbW9kZSkKLQotc3lzLnN0ZG91dC53cml0ZSgnU2NyaXB0IHN0YXJ0ZWQsIGZpbGUgaXMgJXNcbicgJSBmaWxlbmFtZSkKLXNjcmlwdC53cml0ZSgoJ1NjcmlwdCBzdGFydGVkIG9uICVzXG4nICUgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkpLmVuY29kZSgpKQotcHR5LnNwYXduKHNoZWxsLCByZWFkKQotc2NyaXB0LndyaXRlKCgnU2NyaXB0IGRvbmUgb24gJXNcbicgJSB0aW1lLmN0aW1lKHRpbWUudGltZSgpKSkuZW5jb2RlKCkpCi1zeXMuc3Rkb3V0LndyaXRlKCdTY3JpcHQgZG9uZSwgZmlsZSBpcyAlc1xuJyAlIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3RvYWlmZi5weSBiL0RlbW8vc2NyaXB0cy90b2FpZmYucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlOWJlMjMuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL3RvYWlmZi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0iIiJDb252ZXJ0ICJhcmJpdHJhcnkiIHNvdW5kIGZpbGVzIHRvIEFJRkYgKEFwcGxlIGFuZCBTR0kncyBhdWRpbyBmb3JtYXQpLgotCi1JbnB1dCBtYXkgYmUgY29tcHJlc3NlZC4KLVVuY29tcHJlc3NlZCBmaWxlIHR5cGUgbWF5IGJlIEFJRkYsIFdBViwgVk9DLCA4U1ZYLCBOZVhUL1N1biwgYW5kIG90aGVycy4KLUFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaWYgdGhlIGZpbGUgaXMgbm90IG9mIGEgcmVjb2duaXplZCB0eXBlLgotUmV0dXJuZWQgZmlsZW5hbWUgaXMgZWl0aGVyIHRoZSBpbnB1dCBmaWxlbmFtZSBvciBhIHRlbXBvcmFyeSBmaWxlbmFtZTsKLWluIHRoZSBsYXR0ZXIgY2FzZSB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgaXQgaXMgcmVtb3ZlZC4KLU90aGVyIHRlbXBvcmFyeSBmaWxlcyB1c2VkIGFyZSByZW1vdmVkIGJ5IHRoZSBmdW5jdGlvbi4KLSIiIgotCi1pbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHBpcGVzCi1pbXBvcnQgc25kaGRyCi0KLV9fYWxsX18gPSBbImVycm9yIiwgInRvYWlmZiJdCi0KLXRhYmxlID0ge30KLQotdCA9IHBpcGVzLlRlbXBsYXRlKCkKLXQuYXBwZW5kKCdzb3ggLXQgYXUgLSAtdCBhaWZmIC1yIDgwMDAgLScsICctLScpCi10YWJsZVsnYXUnXSA9IHQKLQotIyBYWFggVGhlIGZvbGxvd2luZyBpcyBhY3R1YWxseSBzdWItb3B0aW1hbC4KLSMgWFhYIFRoZSBIQ09NIHNhbXBsaW5nIHJhdGUgY2FuIGJlIDIyaywgMjJrLzIsIDIyay8zIG9yIDIyay80LgotIyBYWFggV2UgbXVzdCBmb3JjZSB0aGUgb3V0cHV0IHNhbXBsaW5nIHJhdGUgZWxzZSB0aGUgU0dJIHdvbid0IHBsYXkKLSMgWFhYIGZpbGVzIHNhbXBsZWQgYXQgNS41ayBvciA3LjMzM2s7IGhvd2V2ZXIgdGhpcyBtZWFucyB0aGF0IGZpbGVzCi0jIFhYWCBzYW1wbGVkIGF0IDExayBhcmUgdW5uZWNlc3NhcmlseSBleHBhbmRlZC4KLSMgWFhYIFNpbWlsYXIgY29tbWVudHMgYXBwbHkgdG8gc29tZSBvdGhlciBmaWxlIHR5cGVzLgotdCA9IHBpcGVzLlRlbXBsYXRlKCkKLXQuYXBwZW5kKCdzb3ggLXQgaGNvbSAtIC10IGFpZmYgLXIgMjIwNTAgLScsICctLScpCi10YWJsZVsnaGNvbSddID0gdAotCi10ID0gcGlwZXMuVGVtcGxhdGUoKQotdC5hcHBlbmQoJ3NveCAtdCB2b2MgLSAtdCBhaWZmIC1yIDExMDI1IC0nLCAnLS0nKQotdGFibGVbJ3ZvYyddID0gdAotCi10ID0gcGlwZXMuVGVtcGxhdGUoKQotdC5hcHBlbmQoJ3NveCAtdCB3YXYgLSAtdCBhaWZmIC0nLCAnLS0nKQotdGFibGVbJ3dhdiddID0gdAotCi10ID0gcGlwZXMuVGVtcGxhdGUoKQotdC5hcHBlbmQoJ3NveCAtdCA4c3Z4IC0gLXQgYWlmZiAtciAxNjAwMCAtJywgJy0tJykKLXRhYmxlWyc4c3Z4J10gPSB0Ci0KLXQgPSBwaXBlcy5UZW1wbGF0ZSgpCi10LmFwcGVuZCgnc294IC10IHNuZHQgLSAtdCBhaWZmIC1yIDE2MDAwIC0nLCAnLS0nKQotdGFibGVbJ3NuZHQnXSA9IHQKLQotdCA9IHBpcGVzLlRlbXBsYXRlKCkKLXQuYXBwZW5kKCdzb3ggLXQgc25kciAtIC10IGFpZmYgLXIgMTYwMDAgLScsICctLScpCi10YWJsZVsnc25kciddID0gdAotCi11bmNvbXByZXNzID0gcGlwZXMuVGVtcGxhdGUoKQotdW5jb21wcmVzcy5hcHBlbmQoJ3VuY29tcHJlc3MnLCAnLS0nKQotCi0KLWNsYXNzIGVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1kZWYgdG9haWZmKGZpbGVuYW1lKToKLSAgICB0ZW1wcyA9IFtdCi0gICAgcmV0ID0gTm9uZQotICAgIHRyeToKLSAgICAgICAgcmV0ID0gX3RvYWlmZihmaWxlbmFtZSwgdGVtcHMpCi0gICAgZmluYWxseToKLSAgICAgICAgZm9yIHRlbXAgaW4gdGVtcHNbOl06Ci0gICAgICAgICAgICBpZiB0ZW1wICE9IHJldDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHRlbXBzLnJlbW92ZSh0ZW1wKQotICAgIHJldHVybiByZXQKLQotZGVmIF90b2FpZmYoZmlsZW5hbWUsIHRlbXBzKToKLSAgICBpZiBmaWxlbmFtZVstMjpdID09ICcuWic6Ci0gICAgICAgIChmZCwgZm5hbWUpID0gdGVtcGZpbGUubWtzdGVtcCgpCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICB0ZW1wcy5hcHBlbmQoZm5hbWUpCi0gICAgICAgIHN0cyA9IHVuY29tcHJlc3MuY29weShmaWxlbmFtZSwgZm5hbWUpCi0gICAgICAgIGlmIHN0czoKLSAgICAgICAgICAgIHJhaXNlIGVycm9yKGZpbGVuYW1lICsgJzogdW5jb21wcmVzcyBmYWlsZWQnKQotICAgIGVsc2U6Ci0gICAgICAgIGZuYW1lID0gZmlsZW5hbWUKLSAgICB0cnk6Ci0gICAgICAgIGZ0eXBlID0gc25kaGRyLndoYXRoZHIoZm5hbWUpCi0gICAgICAgIGlmIGZ0eXBlOgotICAgICAgICAgICAgZnR5cGUgPSBmdHlwZVswXSAjIEFsbCB3ZSdyZSBpbnRlcmVzdGVkIGluCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICBpZiB0eXBlKG1zZykgPT0gdHlwZSgoKSkgYW5kIGxlbihtc2cpID09IDIgYW5kIFwKLSAgICAgICAgICAgICAgICB0eXBlKG1zZy5hcmdzWzBdKSA9PSB0eXBlKDApIGFuZCB0eXBlKG1zZy5hcmdzWzFdKSA9PSB0eXBlKCcnKToKLSAgICAgICAgICAgIG1zZyA9IG1zZy5hcmdzWzFdCi0gICAgICAgIGlmIHR5cGUobXNnKSAhPSB0eXBlKCcnKToKLSAgICAgICAgICAgIG1zZyA9IHJlcHIobXNnKQotICAgICAgICByYWlzZSBlcnJvcihmaWxlbmFtZSArICc6ICcgKyBtc2cpCi0gICAgaWYgZnR5cGUgPT0gJ2FpZmYnOgotICAgICAgICByZXR1cm4gZm5hbWUKLSAgICBpZiBmdHlwZSBpcyBOb25lIG9yIG5vdCBmdHlwZSBpbiB0YWJsZToKLSAgICAgICAgcmFpc2UgZXJyb3IoJyVzOiB1bnN1cHBvcnRlZCBhdWRpbyBmaWxlIHR5cGUgJXInICUgKGZpbGVuYW1lLCBmdHlwZSkpCi0gICAgKGZkLCB0ZW1wKSA9IHRlbXBmaWxlLm1rc3RlbXAoKQotICAgIG9zLmNsb3NlKGZkKQotICAgIHRlbXBzLmFwcGVuZCh0ZW1wKQotICAgIHN0cyA9IHRhYmxlW2Z0eXBlXS5jb3B5KGZuYW1lLCB0ZW1wKQotICAgIGlmIHN0czoKLSAgICAgICAgcmFpc2UgZXJyb3IoZmlsZW5hbWUgKyAnOiBjb252ZXJzaW9uIHRvIGFpZmYgZmFpbGVkJykKLSAgICByZXR1cm4gdGVtcApkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL3VuYmlydGhkYXkucHkgYi9EZW1vL3NjcmlwdHMvdW5iaXJ0aGRheS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWY1OGY4Zi4uMDAwMDAwMAotLS0gYS9EZW1vL3NjcmlwdHMvdW5iaXJ0aGRheS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ2FsY3VsYXRlIHlvdXIgdW5iaXJ0aGRheSBjb3VudCAoc2VlIEFsaWNlIGluIFdvbmRlcmxhbmQpLgotIyBUaGlzIGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBkYXlzIGZyb20geW91ciBiaXJ0aCB1bnRpbCB0b2RheQotIyB0aGF0IHdlcmVuJ3QgeW91ciBiaXJ0aGRheS4gIChUaGUgZGF5IHlvdSB3ZXJlIGJvcm4gaXMgbm90IGNvdW50ZWQpLgotIyBMZWFwIHllYXJzIG1ha2UgaXQgaW50ZXJlc3RpbmcuCi0KLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgY2FsZW5kYXIKLQotZGVmIG1haW4oKToKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIHllYXIgPSBpbnQoc3lzLmFyZ3ZbMV0pCi0gICAgZWxzZToKLSAgICAgICAgeWVhciA9IGludChpbnB1dCgnSW4gd2hpY2ggeWVhciB3ZXJlIHlvdSBib3JuPyAnKSkKLSAgICBpZiAwIDw9IHllYXIgPCAxMDA6Ci0gICAgICAgIHByaW50KCJJJ2xsIGFzc3VtZSB0aGF0IGJ5IiwgeWVhciwgZW5kPScgJykKLSAgICAgICAgeWVhciA9IHllYXIgKyAxOTAwCi0gICAgICAgIHByaW50KCd5b3UgbWVhbicsIHllYXIsICdhbmQgbm90IHRoZSBlYXJseSBDaHJpc3RpYW4gZXJhJykKLSAgICBlbGlmIG5vdCAoMTg1MCA8PSB5ZWFyIDw9IHRpbWUubG9jYWx0aW1lKClbMF0pOgotICAgICAgICBwcmludCgiSXQncyBoYXJkIHRvIGJlbGlldmUgeW91IHdlcmUgYm9ybiBpbiIsIHllYXIpCi0gICAgICAgIHJldHVybgotCi0gICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICBtb250aCA9IGludChzeXMuYXJndlsyXSkKLSAgICBlbHNlOgotICAgICAgICBtb250aCA9IGludChpbnB1dCgnQW5kIGluIHdoaWNoIG1vbnRoPyAoMS0xMikgJykpCi0gICAgaWYgbm90ICgxIDw9IG1vbnRoIDw9IDEyKToKLSAgICAgICAgcHJpbnQoJ1RoZXJlIGlzIG5vIG1vbnRoIG51bWJlcmVkJywgbW9udGgpCi0gICAgICAgIHJldHVybgotCi0gICAgaWYgc3lzLmFyZ3ZbMzpdOgotICAgICAgICBkYXkgPSBpbnQoc3lzLmFyZ3ZbM10pCi0gICAgZWxzZToKLSAgICAgICAgZGF5ID0gaW50KGlucHV0KCdBbmQgb24gd2hhdCBkYXkgb2YgdGhhdCBtb250aD8gKDEtMzEpICcpKQotICAgIGlmIG1vbnRoID09IDIgYW5kIGNhbGVuZGFyLmlzbGVhcCh5ZWFyKToKLSAgICAgICAgbWF4ZGF5ID0gMjkKLSAgICBlbHNlOgotICAgICAgICBtYXhkYXkgPSBjYWxlbmRhci5tZGF5c1ttb250aF0KLSAgICBpZiBub3QgKDEgPD0gZGF5IDw9IG1heGRheSk6Ci0gICAgICAgIHByaW50KCdUaGVyZSBhcmUgbm8nLCBkYXksICdkYXlzIGluIHRoYXQgbW9udGghJykKLSAgICAgICAgcmV0dXJuCi0KLSAgICBiZGF5dHVwbGUgPSAoeWVhciwgbW9udGgsIGRheSkKLSAgICBiZGF5ZGF0ZSA9IG1rZGF0ZShiZGF5dHVwbGUpCi0gICAgcHJpbnQoJ1lvdSB3ZXJlIGJvcm4gb24nLCBmb3JtYXQoYmRheXR1cGxlKSkKLQotICAgIHRvZGF5dHVwbGUgPSB0aW1lLmxvY2FsdGltZSgpWzozXQotICAgIHRvZGF5ZGF0ZSA9IG1rZGF0ZSh0b2RheXR1cGxlKQotICAgIHByaW50KCdUb2RheSBpcycsIGZvcm1hdCh0b2RheXR1cGxlKSkKLQotICAgIGlmIGJkYXl0dXBsZSA+IHRvZGF5dHVwbGU6Ci0gICAgICAgIHByaW50KCdZb3UgYXJlIGEgdGltZSB0cmF2ZWxlci4gIEdvIGJhY2sgdG8gdGhlIGZ1dHVyZSEnKQotICAgICAgICByZXR1cm4KLQotICAgIGlmIGJkYXl0dXBsZSA9PSB0b2RheXR1cGxlOgotICAgICAgICBwcmludCgnWW91IHdlcmUgYm9ybiB0b2RheS4gIEhhdmUgYSBuaWNlIGxpZmUhJykKLSAgICAgICAgcmV0dXJuCi0KLSAgICBkYXlzID0gdG9kYXlkYXRlIC0gYmRheWRhdGUKLSAgICBwcmludCgnWW91IGhhdmUgbGl2ZWQnLCBkYXlzLCAnZGF5cycpCi0KLSAgICBhZ2UgPSAwCi0gICAgZm9yIHkgaW4gcmFuZ2UoeWVhciwgdG9kYXl0dXBsZVswXSArIDEpOgotICAgICAgICBpZiBiZGF5dHVwbGUgPCAoeSwgbW9udGgsIGRheSkgPD0gdG9kYXl0dXBsZToKLSAgICAgICAgICAgIGFnZSA9IGFnZSArIDEKLQotICAgIHByaW50KCdZb3UgYXJlJywgYWdlLCAneWVhcnMgb2xkJykKLQotICAgIGlmIHRvZGF5dHVwbGVbMTpdID09IGJkYXl0dXBsZVsxOl06Ci0gICAgICAgIHByaW50KCdDb25ncmF0dWxhdGlvbnMhICBUb2RheSBpcyB5b3VyJywgbnRoKGFnZSksICdiaXJ0aGRheScpCi0gICAgICAgIHByaW50KCdZZXN0ZXJkYXkgd2FzIHlvdXInLCBlbmQ9JyAnKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdUb2RheSBpcyB5b3VyJywgZW5kPScgJykKLSAgICBwcmludChudGgoZGF5cyAtIGFnZSksICd1bmJpcnRoZGF5JykKLQotZGVmIGZvcm1hdChkYXRlKToKLSAgICAoeWVhciwgbW9udGgsIGRheSkgPSBkYXRlCi0gICAgcmV0dXJuICclZCAlcyAlZCcgJSAoZGF5LCBjYWxlbmRhci5tb250aF9uYW1lW21vbnRoXSwgeWVhcikKLQotZGVmIG50aChuKToKLSAgICBpZiBuID09IDE6IHJldHVybiAnMXN0JwotICAgIGlmIG4gPT0gMjogcmV0dXJuICcybmQnCi0gICAgaWYgbiA9PSAzOiByZXR1cm4gJzNyZCcKLSAgICByZXR1cm4gJyVkdGgnICUgbgotCi1kZWYgbWtkYXRlKGRhdGUpOgotICAgICMgSmFudWFyeSAxc3QsIGluIDAgQS5ELiBpcyBhcmJpdHJhcmlseSBkZWZpbmVkIHRvIGJlIGRheSAxLAotICAgICMgZXZlbiB0aG91Z2ggdGhhdCBkYXkgbmV2ZXIgYWN0dWFsbHkgZXhpc3RlZCBhbmQgdGhlIGNhbGVuZGFyCi0gICAgIyB3YXMgZGlmZmVyZW50IHRoZW4uLi4KLSAgICAoeWVhciwgbW9udGgsIGRheSkgPSBkYXRlCi0gICAgZGF5cyA9IHllYXIqMzY1ICAgICAgICAgICAgICAgICAgIyB5ZWFycywgcm91Z2hseQotICAgIGRheXMgPSBkYXlzICsgKHllYXIrMykvLzQgICAgICAgICMgcGx1cyBsZWFwIHllYXJzLCByb3VnaGx5Ci0gICAgZGF5cyA9IGRheXMgLSAoeWVhcis5OSkvLzEwMCAgICAgIyBtaW51cyBub24tbGVhcCB5ZWFycyBldmVyeSBjZW50dXJ5Ci0gICAgZGF5cyA9IGRheXMgKyAoeWVhciszOTkpLy80MDAgICAgIyBwbHVzIGxlYXAgeWVhcnMgZXZlcnkgNCBjZW50aXJ1ZXMKLSAgICBmb3IgaSBpbiByYW5nZSgxLCBtb250aCk6Ci0gICAgICAgIGlmIGkgPT0gMiBhbmQgY2FsZW5kYXIuaXNsZWFwKHllYXIpOgotICAgICAgICAgICAgZGF5cyA9IGRheXMgKyAyOQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF5cyA9IGRheXMgKyBjYWxlbmRhci5tZGF5c1tpXQotICAgIGRheXMgPSBkYXlzICsgZGF5Ci0gICAgcmV0dXJuIGRheXMKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc2NyaXB0cy91cGRhdGUucHkgYi9EZW1vL3NjcmlwdHMvdXBkYXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkNDllNGIzLi4wMDAwMDAwCi0tLSBhL0RlbW8vc2NyaXB0cy91cGRhdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgVXBkYXRlIGEgYnVuY2ggb2YgZmlsZXMgYWNjb3JkaW5nIHRvIGEgc2NyaXB0LgotIyBUaGUgaW5wdXQgZmlsZSBjb250YWlucyBsaW5lcyBvZiB0aGUgZm9ybSA8ZmlsZW5hbWU+OjxsaW5lbm8+Ojx0ZXh0PiwKLSMgbWVhbmluZyB0aGF0IHRoZSBnaXZlbiBsaW5lIG9mIHRoZSBnaXZlbiBmaWxlIGlzIHRvIGJlIHJlcGxhY2VkCi0jIGJ5IHRoZSBnaXZlbiB0ZXh0LiAgVGhpcyBpcyB1c2VmdWwgZm9yIHBlcmZvcm1pbmcgZ2xvYmFsIHN1YnN0aXR1dGlvbnMKLSMgb24gZ3JlcCBvdXRwdXQ6Ci0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IHJlCi0KLXBhdCA9ICdeKFteOiBcdFxuXSspOihbMS05XVswLTldKik6JwotcHJvZyA9IHJlLmNvbXBpbGUocGF0KQotCi1jbGFzcyBGaWxlT2JqOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSk6Ci0gICAgICAgIHNlbGYuZmlsZW5hbWUgPSBmaWxlbmFtZQotICAgICAgICBzZWxmLmNoYW5nZWQgPSAwCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYubGluZXMgPSBvcGVuKGZpbGVuYW1lLCAncicpLnJlYWRsaW5lcygpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KCcqKiogQ2FuXCd0IG9wZW4gIiVzIjonICUgZmlsZW5hbWUsIG1zZykKLSAgICAgICAgICAgIHNlbGYubGluZXMgPSBOb25lCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcHJpbnQoJ2RpZmZpbmcnLCBzZWxmLmZpbGVuYW1lKQotCi0gICAgZGVmIGZpbmlzaChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuY2hhbmdlZDoKLSAgICAgICAgICAgIHByaW50KCdubyBjaGFuZ2VzIHRvJywgc2VsZi5maWxlbmFtZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5maWxlbmFtZSwgc2VsZi5maWxlbmFtZSArICd+JykKLSAgICAgICAgICAgIGZwID0gb3BlbihzZWxmLmZpbGVuYW1lLCAndycpCi0gICAgICAgIGV4Y2VwdCAob3MuZXJyb3IsIElPRXJyb3IpIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KCcqKiogQ2FuXCd0IHJld3JpdGUgIiVzIjonICUgc2VsZi5maWxlbmFtZSwgbXNnKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHByaW50KCd3cml0aW5nJywgc2VsZi5maWxlbmFtZSkKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lczoKLSAgICAgICAgICAgIGZwLndyaXRlKGxpbmUpCi0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5jaGFuZ2VkID0gMAotCi0gICAgZGVmIHByb2Nlc3Moc2VsZiwgbGluZW5vLCByZXN0KToKLSAgICAgICAgaWYgc2VsZi5saW5lcyBpcyBOb25lOgotICAgICAgICAgICAgcHJpbnQoJyhub3QgcHJvY2Vzc2VkKTogJXM6JXM6JXMnICUgKAotICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUsIGxpbmVubywgcmVzdCksIGVuZD0nICcpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaSA9IGV2YWwobGluZW5vKSAtIDEKLSAgICAgICAgaWYgbm90IDAgPD0gaSA8IGxlbihzZWxmLmxpbmVzKToKLSAgICAgICAgICAgIHByaW50KCcqKiogTGluZSBudW1iZXIgb3V0IG9mIHJhbmdlOiAlczolczolcycgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlbmFtZSwgbGluZW5vLCByZXN0KSwgZW5kPScgJykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLmxpbmVzW2ldID09IHJlc3Q6Ci0gICAgICAgICAgICBwcmludCgnKG5vIGNoYW5nZSk6ICVzOiVzOiVzJyAlICgKLSAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVuYW1lLCBsaW5lbm8sIHJlc3QpLCBlbmQ9JyAnKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBzZWxmLmNoYW5nZWQ6Ci0gICAgICAgICAgICBzZWxmLmNoYW5nZWQgPSAxCi0gICAgICAgIHByaW50KCclc2MlcycgJSAobGluZW5vLCBsaW5lbm8pKQotICAgICAgICBwcmludCgnPCcsIHNlbGYubGluZXNbaV0sIGVuZD0nICcpCi0gICAgICAgIHByaW50KCctLS0nKQotICAgICAgICBzZWxmLmxpbmVzW2ldID0gcmVzdAotICAgICAgICBwcmludCgnPicsIHNlbGYubGluZXNbaV0sIGVuZD0nICcpCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4oc3lzLmFyZ3ZbMV0sICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcHJpbnQoJ0NhblwndCBvcGVuICIlcyI6JyAlIHN5cy5hcmd2WzFdLCBtc2cpCi0gICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgIGVsc2U6Ci0gICAgICAgIGZwID0gc3lzLnN0ZGluCi0gICAgY3VyZmlsZSA9IE5vbmUKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgIGlmIGN1cmZpbGU6IGN1cmZpbGUuZmluaXNoKCkKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIG4gPSBwcm9nLm1hdGNoKGxpbmUpCi0gICAgICAgIGlmIG4gPCAwOgotICAgICAgICAgICAgcHJpbnQoJ0Z1bm55IGxpbmU6JywgbGluZSwgZW5kPScgJykKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSBwcm9nLmdyb3VwKDEsIDIpCi0gICAgICAgIGlmIG5vdCBjdXJmaWxlIG9yIGZpbGVuYW1lICE9IGN1cmZpbGUuZmlsZW5hbWU6Ci0gICAgICAgICAgICBpZiBjdXJmaWxlOiBjdXJmaWxlLmZpbmlzaCgpCi0gICAgICAgICAgICBjdXJmaWxlID0gRmlsZU9iaihmaWxlbmFtZSkKLSAgICAgICAgY3VyZmlsZS5wcm9jZXNzKGxpbmVubywgbGluZVtuOl0pCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvd2gucHkgYi9EZW1vL3NjcmlwdHMvd2gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGI5YjA5ZWYuLjAwMDAwMDAKLS0tIGEvRGVtby9zY3JpcHRzL3doLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jIFRoaXMgaXMgaGVyZSBzbyBJIGNhbiB1c2UgJ3doJyBpbnN0ZWFkIG9mICd3aGljaCcgaW4gJ34vYmluL2dlbmVyaWNfcHl0aG9uJwotaW1wb3J0IHdoaWNoCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvUkVBRE1FIGIvRGVtby9zb2NrZXRzL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJhN2MyMy4uMDAwMDAwMAotLS0gYS9EZW1vL3NvY2tldHMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgc29tZSBkZW1vbnN0cmF0aW9ucyBvZiB0aGUgc29ja2V0IG1vZHVsZToKLQotYnJvYWRjYXN0LnB5CSAJQnJvYWRjYXN0IHRoZSB0aW1lIHRvIHJhZGlvLnB5LgotZWNob3N2ci5weQkJQWJvdXQgdGhlIHNpbXBsZXN0IFRDUCBzZXJ2ZXIgcG9zc2libGUuCi1maW5nZXIucHkJCUNsaWVudCBmb3IgdGhlICdmaW5nZXInIHByb3RvY29sLgotZnRwLnB5CQkJQSB2ZXJ5IHNpbXBsZSBmdHAgY2xpZW50LgotZ29waGVyLnB5CQlBIHNpbXBsZSBnb3BoZXIgY2xpZW50LgotbWNhc3QucHkJCUlQdjQvdjYgbXVsdGljYXN0IGV4YW1wbGUKLXJhZGlvLnB5CQlSZWNlaXZlIHRpbWUgYnJvYWRjYXN0cyBmcm9tIGJyb2FkY2FzdC5weS4KLXRlbG5ldC5weQkJQ2xpZW50IGZvciB0aGUgJ3RlbG5ldCcgcHJvdG9jb2wuCi10aHJvdWdocHV0LnB5CQlDbGllbnQgYW5kIHNlcnZlciB0byBtZWFzdXJlIFRDUCB0aHJvdWdocHV0LgotdW5peGNsaWVudC5weQkJVW5peCBzb2NrZXQgZXhhbXBsZSwgY2xpZW50IHNpZGUKLXVuaXhzZXJ2ZXIucHkJCVVuaXggc29ja2V0IGV4YW1wbGUsIHNlcnZlciBzaWRlCi11ZHBlY2hvLnB5CQlDbGllbnQgYW5kIHNlcnZlciBmb3IgdGhlIFVEUCBlY2hvIHByb3RvY29sLgpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL2Jyb2FkY2FzdC5weSBiL0RlbW8vc29ja2V0cy9icm9hZGNhc3QucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDZkMmIxZTguLjAwMDAwMDAKLS0tIGEvRGVtby9zb2NrZXRzL2Jyb2FkY2FzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSMgU2VuZCBVRFAgYnJvYWRjYXN0IHBhY2tldHMKLQotTVlQT1JUID0gNTAwMDAKLQotaW1wb3J0IHN5cywgdGltZQotZnJvbSBzb2NrZXQgaW1wb3J0ICoKLQotcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKQotcy5iaW5kKCgnJywgMCkpCi1zLnNldHNvY2tvcHQoU09MX1NPQ0tFVCwgU09fQlJPQURDQVNULCAxKQotCi13aGlsZSAxOgotICAgIGRhdGEgPSByZXByKHRpbWUudGltZSgpKSArICdcbicKLSAgICBzLnNlbmR0byhkYXRhLCAoJzxicm9hZGNhc3Q+JywgTVlQT1JUKSkKLSAgICB0aW1lLnNsZWVwKDIpCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvZWNob3N2ci5weSBiL0RlbW8vc29ja2V0cy9lY2hvc3ZyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3ZGU2MzkxLi4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy9lY2hvc3ZyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBhbiAnZWNobycgdGNwIHNlcnZlcjogZWNobyBhbGwgZGF0YSBpdCByZWNlaXZlcy4KLSMKLSMgVGhpcyBpcyB0aGUgc2ltcGxlc3QgcG9zc2libGUgc2VydmVyLCBzZXJ2aWNpbmcgYSBzaW5nbGUgcmVxdWVzdCBvbmx5LgotCi1pbXBvcnQgc3lzCi1mcm9tIHNvY2tldCBpbXBvcnQgKgotCi0jIFRoZSBzdGFuZGFyZCBlY2hvIHBvcnQgaXNuJ3QgdmVyeSB1c2VmdWwsIGl0IHJlcXVpcmVzIHJvb3QgcGVybWlzc2lvbnMhCi0jIEVDSE9fUE9SVCA9IDcKLUVDSE9fUE9SVCA9IDUwMDAwICsgNwotQlVGU0laRSA9IDEwMjQKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKLSAgICAgICAgcG9ydCA9IGludChldmFsKHN5cy5hcmd2WzFdKSkKLSAgICBlbHNlOgotICAgICAgICBwb3J0ID0gRUNIT19QT1JUCi0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICBzLmJpbmQoKCcnLCBwb3J0KSkKLSAgICBzLmxpc3RlbigxKQotICAgIGNvbm4sIChyZW1vdGVob3N0LCByZW1vdGVwb3J0KSA9IHMuYWNjZXB0KCkKLSAgICBwcmludCgnY29ubmVjdGVkIGJ5JywgcmVtb3RlaG9zdCwgcmVtb3RlcG9ydCkKLSAgICB3aGlsZSAxOgotICAgICAgICBkYXRhID0gY29ubi5yZWN2KEJVRlNJWkUpCi0gICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgY29ubi5zZW5kKGRhdGEpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL2Zpbmdlci5weSBiL0RlbW8vc29ja2V0cy9maW5nZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU4YjllZDIuLjAwMDAwMDAKLS0tIGEvRGVtby9zb2NrZXRzL2Zpbmdlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBQeXRob24gaW50ZXJmYWNlIHRvIHRoZSBJbnRlcm5ldCBmaW5nZXIgZGFlbW9uLgotIwotIyBVc2FnZTogZmluZ2VyIFtvcHRpb25zXSBbdXNlcl1bQGhvc3RdIC4uLgotIwotIyBJZiBubyBob3N0IGlzIGdpdmVuLCB0aGUgZmluZ2VyIGRhZW1vbiBvbiB0aGUgbG9jYWwgaG9zdCBpcyBjb250YWN0ZWQuCi0jIE9wdGlvbnMgYXJlIHBhc3NlZCB1bmludGVycHJldGVkIHRvIHRoZSBmaW5nZXIgZGFlbW9uIQotCi0KLWltcG9ydCBzeXMsIHN0cmluZwotZnJvbSBzb2NrZXQgaW1wb3J0ICoKLQotCi0jIEhhcmRjb2RlIHRoZSBudW1iZXIgb2YgdGhlIGZpbmdlciBwb3J0IGhlcmUuCi0jIEl0J3Mgbm90IGxpa2VseSB0byBjaGFuZ2Ugc29vbi4uLgotIwotRklOR0VSX1BPUlQgPSA3OQotCi0KLSMgRnVuY3Rpb24gdG8gZG8gb25lIHJlbW90ZSBmaW5nZXIgaW52b2NhdGlvbi4KLSMgT3V0cHV0IGdvZXMgZGlyZWN0bHkgdG8gc3Rkb3V0IChhbHRob3VnaCB0aGlzIGNhbiBiZSBjaGFuZ2VkKS4KLSMKLWRlZiBmaW5nZXIoaG9zdCwgYXJncyk6Ci0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICBzLmNvbm5lY3QoKGhvc3QsIEZJTkdFUl9QT1JUKSkKLSAgICBzLnNlbmQoYXJncyArICdcbicpCi0gICAgd2hpbGUgMToKLSAgICAgICAgYnVmID0gcy5yZWN2KDEwMjQpCi0gICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUoYnVmKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0KLSMgTWFpbiBmdW5jdGlvbjogYXJndW1lbnQgcGFyc2luZy4KLSMKLWRlZiBtYWluKCk6Ci0gICAgb3B0aW9ucyA9ICcnCi0gICAgaSA9IDEKLSAgICB3aGlsZSBpIDwgbGVuKHN5cy5hcmd2KSBhbmQgc3lzLmFyZ3ZbaV1bOjFdID09ICctJzoKLSAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgKyBzeXMuYXJndltpXSArICcgJwotICAgICAgICBpID0gaSsxCi0gICAgYXJncyA9IHN5cy5hcmd2W2k6XQotICAgIGlmIG5vdCBhcmdzOgotICAgICAgICBhcmdzID0gWycnXQotICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgaWYgJ0AnIGluIGFyZzoKLSAgICAgICAgICAgIGF0ID0gc3RyaW5nLmluZGV4KGFyZywgJ0AnKQotICAgICAgICAgICAgaG9zdCA9IGFyZ1thdCsxOl0KLSAgICAgICAgICAgIGFyZyA9IGFyZ1s6YXRdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBob3N0ID0gJycKLSAgICAgICAgZmluZ2VyKGhvc3QsIG9wdGlvbnMgKyBhcmcpCi0KLQotIyBDYWxsIHRoZSBtYWluIGZ1bmN0aW9uLgotIwotbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvZnRwLnB5IGIvRGVtby9zb2NrZXRzL2Z0cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWVhOTljNy4uMDAwMDAwMAotLS0gYS9EZW1vL3NvY2tldHMvZnRwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLSMgQSBzaW1wbGUgRlRQIGNsaWVudC4KLSMKLSMgVGhlIGluZm9ybWF0aW9uIHRvIHdyaXRlIHRoaXMgcHJvZ3JhbSB3YXMgZ2F0aGVyZWQgZnJvbSBSRkMgOTU5LAotIyBidXQgdGhpcyBpcyBub3QgYSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiEgIFlldCBpdCBzaG93cyBob3cgYSBzaW1wbGUKLSMgRlRQIGNsaWVudCBjYW4gYmUgYnVpbHQsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gZXh0ZW5kIGl0IHRvIHN1aXQKLSMgaXQgdG8geW91ciBuZWVkcy4uLgotIwotIyBIb3cgaXQgd29ya3MgKGFzc3VtaW5nIHlvdSd2ZSByZWFkIHRoZSBSRkMpOgotIwotIyBVc2VyIGNvbW1hbmRzIGFyZSBwYXNzZWQgdW5pbnRlcnByZXRlZCB0byB0aGUgc2VydmVyLiAgSG93ZXZlciwgdGhlCi0jIHVzZXIgbmV2ZXIgbmVlZHMgdG8gc2VuZCBhIFBPUlQgY29tbWFuZC4gIFJhdGhlciwgdGhlIGNsaWVudCBvcGVucyBhCi0jIHBvcnQgcmlnaHQgYXdheSBhbmQgc2VuZHMgdGhlIGFwcHJvcHJpYXRlIFBPUlQgY29tbWFuZCB0byB0aGUgc2VydmVyLgotIyBXaGVuIGEgcmVzcG9uc2UgY29kZSAxNTAgaXMgcmVjZWl2ZWQsIHRoaXMgcG9ydCBpcyB1c2VkIHRvIHJlY2VpdmUKLSMgdGhlIGRhdGEgKHdoaWNoIGlzIHdyaXR0ZW4gdG8gc3Rkb3V0IGluIHRoaXMgdmVyc2lvbiksIGFuZCB3aGVuIHRoZQotIyBkYXRhIGlzIGV4aGF1c3RlZCwgYSBuZXcgcG9ydCBpcyBvcGVuZWQgYW5kIGEgY29ycmVzcG9uZGluZyBQT1JUCi0jIGNvbW1hbmQgc2VudC4gIEluIG9yZGVyIHRvIGF2b2lkIGVycm9ycyB3aGVuIHJldXNpbmcgcG9ydHMgcXVpY2tseQotIyAoYW5kIGJlY2F1c2UgdGhlcmUgaXMgbm8gcy5nZXRzb2NrbmFtZSgpIG1ldGhvZCBpbiBQeXRob24geWV0KSB3ZQotIyBjeWNsZSB0aHJvdWdoIGEgbnVtYmVyIG9mIHBvcnRzIGluIHRoZSA1MDAwMCByYW5nZS4KLQotCi1pbXBvcnQgc3lzLCBwb3NpeCwgc3RyaW5nCi1mcm9tIHNvY2tldCBpbXBvcnQgKgotCi0KLUJVRlNJWkUgPSAxMDI0Ci0KLSMgRGVmYXVsdCBwb3J0IG51bWJlcnMgdXNlZCBieSB0aGUgRlRQIHByb3RvY29sLgotIwotRlRQX1BPUlQgPSAyMQotRlRQX0RBVEFfUE9SVCA9IEZUUF9QT1JUIC0gMQotCi0jIENoYW5nZSB0aGUgZGF0YSBwb3J0IHRvIHNvbWV0aGluZyBub3QgbmVlZGluZyByb290IHBlcm1pc3Npb25zLgotIwotRlRQX0RBVEFfUE9SVCA9IEZUUF9EQVRBX1BPUlQgKyA1MDAwMAotCi0KLSMgTWFpbiBwcm9ncmFtIChjYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUpLgotIwotZGVmIG1haW4oKToKLSAgICBob3N0bmFtZSA9IHN5cy5hcmd2WzFdCi0gICAgY29udHJvbChob3N0bmFtZSkKLQotCi0jIENvbnRyb2wgcHJvY2VzcyAodXNlciBpbnRlcmZhY2UgYW5kIHVzZXIgcHJvdG9jb2wgaW50ZXJwcmV0ZXIpLgotIwotZGVmIGNvbnRyb2woaG9zdG5hbWUpOgotICAgICMKLSAgICAjIENyZWF0ZSBjb250cm9sIGNvbm5lY3Rpb24KLSAgICAjCi0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICBzLmNvbm5lY3QoKGhvc3RuYW1lLCBGVFBfUE9SVCkpCi0gICAgZiA9IHMubWFrZWZpbGUoJ3InKSAjIFJlYWRpbmcgdGhlIHJlcGxpZXMgaXMgZWFzaWVyIGZyb20gYSBmaWxlLi4uCi0gICAgIwotICAgICMgQ29udHJvbCBsb29wCi0gICAgIwotICAgIHIgPSBOb25lCi0gICAgd2hpbGUgMToKLSAgICAgICAgY29kZSA9IGdldHJlcGx5KGYpCi0gICAgICAgIGlmIGNvZGUgaW4gKCcyMjEnLCAnRU9GJyk6IGJyZWFrCi0gICAgICAgIGlmIGNvZGUgPT0gJzE1MCc6Ci0gICAgICAgICAgICBnZXRkYXRhKHIpCi0gICAgICAgICAgICBjb2RlID0gZ2V0cmVwbHkoZikKLSAgICAgICAgICAgIHIgPSBOb25lCi0gICAgICAgIGlmIG5vdCByOgotICAgICAgICAgICAgciA9IG5ld2RhdGFwb3J0KHMsIGYpCi0gICAgICAgIGNtZCA9IGdldGNvbW1hbmQoKQotICAgICAgICBpZiBub3QgY21kOiBicmVhawotICAgICAgICBzLnNlbmQoY21kICsgJ1xyXG4nKQotCi0KLSMgQ3JlYXRlIGEgbmV3IGRhdGEgcG9ydCBhbmQgc2VuZCBhIFBPUlQgY29tbWFuZCB0byB0aGUgc2VydmVyIGZvciBpdC4KLSMgKEN5Y2xlIHRocm91Z2ggYSBudW1iZXIgb2YgcG9ydHMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCByZXVzaW5nCi0jIGEgcG9ydCB3aXRoaW4gYSBzaG9ydCB0aW1lLikKLSMKLW5leHRwb3J0ID0gMAotIwotZGVmIG5ld2RhdGFwb3J0KHMsIGYpOgotICAgIGdsb2JhbCBuZXh0cG9ydAotICAgIHBvcnQgPSBuZXh0cG9ydCArIEZUUF9EQVRBX1BPUlQKLSAgICBuZXh0cG9ydCA9IChuZXh0cG9ydCsxKSAlIDE2Ci0gICAgciA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICByLmJpbmQoKGdldGhvc3RieW5hbWUoZ2V0aG9zdG5hbWUoKSksIHBvcnQpKQotICAgIHIubGlzdGVuKDEpCi0gICAgc2VuZHBvcnRjbWQocywgZiwgcG9ydCkKLSAgICByZXR1cm4gcgotCi0KLSMgU2VuZCBhbiBhcHByb3ByaWF0ZSBwb3J0IGNvbW1hbmQuCi0jCi1kZWYgc2VuZHBvcnRjbWQocywgZiwgcG9ydCk6Ci0gICAgaG9zdG5hbWUgPSBnZXRob3N0bmFtZSgpCi0gICAgaG9zdGFkZHIgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgIGhieXRlcyA9IHN0cmluZy5zcGxpdGZpZWxkcyhob3N0YWRkciwgJy4nKQotICAgIHBieXRlcyA9IFtyZXByKHBvcnQvLzI1NiksIHJlcHIocG9ydCUyNTYpXQotICAgIGJ5dGVzID0gaGJ5dGVzICsgcGJ5dGVzCi0gICAgY21kID0gJ1BPUlQgJyArIHN0cmluZy5qb2luZmllbGRzKGJ5dGVzLCAnLCcpCi0gICAgcy5zZW5kKGNtZCArICdcclxuJykKLSAgICBjb2RlID0gZ2V0cmVwbHkoZikKLQotCi0jIFByb2Nlc3MgYW4gZnRwIHJlcGx5IGFuZCByZXR1cm4gdGhlIDMtZGlnaXQgcmVwbHkgY29kZSAoYXMgYSBzdHJpbmcpLgotIyBUaGUgcmVwbHkgc2hvdWxkIGJlIGEgbGluZSBvZiB0ZXh0IHN0YXJ0aW5nIHdpdGggYSAzLWRpZ2l0IG51bWJlci4KLSMgSWYgdGhlIDR0aCBjaGFyIGlzICctJywgaXQgaXMgYSBtdWx0aS1saW5lIHJlcGx5IGFuZCBpcwotIyB0ZXJtaW5hdGUgYnkgYSBsaW5lIHN0YXJ0aW5nIHdpdGggdGhlIHNhbWUgMy1kaWdpdCBudW1iZXIuCi0jIEFueSB0ZXh0IHdoaWxlIHJlY2VpdmluZyB0aGUgcmVwbHkgaXMgZWNob2VkIHRvIHRoZSBmaWxlLgotIwotZGVmIGdldHJlcGx5KGYpOgotICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICBpZiBub3QgbGluZTogcmV0dXJuICdFT0YnCi0gICAgcHJpbnQobGluZSwgZW5kPScgJykKLSAgICBjb2RlID0gbGluZVs6M10KLSAgICBpZiBsaW5lWzM6NF0gPT0gJy0nOgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrICMgUmVhbGx5IGFuIGVycm9yCi0gICAgICAgICAgICBwcmludChsaW5lLCBlbmQ9JyAnKQotICAgICAgICAgICAgaWYgbGluZVs6M10gPT0gY29kZSBhbmQgbGluZVszOjRdICE9ICctJzogYnJlYWsKLSAgICByZXR1cm4gY29kZQotCi0KLSMgR2V0IHRoZSBkYXRhIGZyb20gdGhlIGRhdGEgY29ubmVjdGlvbi4KLSMKLWRlZiBnZXRkYXRhKHIpOgotICAgIHByaW50KCcoYWNjZXB0aW5nIGRhdGEgY29ubmVjdGlvbiknKQotICAgIGNvbm4sIGhvc3QgPSByLmFjY2VwdCgpCi0gICAgcHJpbnQoJyhkYXRhIGNvbm5lY3Rpb24gYWNjZXB0ZWQpJykKLSAgICB3aGlsZSAxOgotICAgICAgICBkYXRhID0gY29ubi5yZWN2KEJVRlNJWkUpCi0gICAgICAgIGlmIG5vdCBkYXRhOiBicmVhawotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKGRhdGEpCi0gICAgcHJpbnQoJyhlbmQgb2YgZGF0YSBjb25uZWN0aW9uKScpCi0KLWRlZiByYXdfaW5wdXQocHJvbXB0KToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHByb21wdCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLQotIyBHZXQgYSBjb21tYW5kIGZyb20gdGhlIHVzZXIuCi0jCi1kZWYgZ2V0Y29tbWFuZCgpOgotICAgIHRyeToKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBpbnB1dCgnZnRwLnB5PiAnKQotICAgICAgICAgICAgaWYgbGluZTogcmV0dXJuIGxpbmUKLSAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgIHJldHVybiAnJwotCi0KLSMgQ2FsbCB0aGUgbWFpbiBwcm9ncmFtLgotIwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy9nb3BoZXIucHkgYi9EZW1vL3NvY2tldHMvZ29waGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMjg3MzE5Li4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy9nb3BoZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEEgc2ltcGxlIGdvcGhlciBjbGllbnQuCi0jCi0jIFVzYWdlOiBnb3BoZXIgWyBbc2VsZWN0b3JdIGhvc3QgW3BvcnRdIF0KLQotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgc29ja2V0Ci0KLSMgRGVmYXVsdCBzZWxlY3RvciwgaG9zdCBhbmQgcG9ydAotREVGX1NFTEVDVE9SID0gJycKLURFRl9IT1NUICAgICA9ICdnb3BoZXIubWljcm8udW1uLmVkdScKLURFRl9QT1JUICAgICA9IDcwCi0KLSMgUmVjb2duaXplZCBmaWxlIHR5cGVzCi1UX1RFWFRGSUxFICA9ICcwJwotVF9NRU5VICAgICAgPSAnMScKLVRfQ1NPICAgICAgID0gJzInCi1UX0VSUk9SICAgICA9ICczJwotVF9CSU5IRVggICAgPSAnNCcKLVRfRE9TICAgICAgID0gJzUnCi1UX1VVRU5DT0RFICA9ICc2JwotVF9TRUFSQ0ggICAgPSAnNycKLVRfVEVMTkVUICAgID0gJzgnCi1UX0JJTkFSWSAgICA9ICc5JwotVF9SRURVTkRBTlQgPSAnKycKLVRfU09VTkQgICAgID0gJ3MnCi0KLSMgRGljdGlvbmFyeSBtYXBwaW5nIHR5cGVzIHRvIHN0cmluZ3MKLXR5cGVuYW1lID0geycwJzogJzxURVhUPicsICcxJzogJzxESVI+JywgJzInOiAnPENTTz4nLCAnMyc6ICc8RVJST1I+JywgXAotICAgICAgICAnNCc6ICc8QklOSEVYPicsICc1JzogJzxET1M+JywgJzYnOiAnPFVVRU5DT0RFPicsICc3JzogJzxTRUFSQ0g+JywgXAotICAgICAgICAnOCc6ICc8VEVMTkVUPicsICc5JzogJzxCSU5BUlk+JywgJysnOiAnPFJFRFVOREFOVD4nLCAncyc6ICc8U09VTkQ+J30KLQotIyBPZnQtdXNlZCBjaGFyYWN0ZXJzIGFuZCBzdHJpbmdzCi1DUkxGID0gJ1xyXG4nCi1UQUIgPSAnXHQnCi0KLSMgT3BlbiBhIFRDUCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gaG9zdCBhbmQgcG9ydAotZGVmIG9wZW5fc29ja2V0KGhvc3QsIHBvcnQpOgotICAgIGlmIG5vdCBwb3J0OgotICAgICAgICBwb3J0ID0gREVGX1BPUlQKLSAgICBlbGlmIHR5cGUocG9ydCkgPT0gdHlwZSgnJyk6Ci0gICAgICAgIHBvcnQgPSBpbnQocG9ydCkKLSAgICBzID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0gICAgcmV0dXJuIHMKLQotIyBTZW5kIGEgc2VsZWN0b3IgdG8gYSBnaXZlbiBob3N0IGFuZCBwb3J0LCByZXR1cm4gYSBmaWxlIHdpdGggdGhlIHJlcGx5Ci1kZWYgc2VuZF9yZXF1ZXN0KHNlbGVjdG9yLCBob3N0LCBwb3J0KToKLSAgICBzID0gb3Blbl9zb2NrZXQoaG9zdCwgcG9ydCkKLSAgICBzLnNlbmQoc2VsZWN0b3IgKyBDUkxGKQotICAgIHMuc2h1dGRvd24oMSkKLSAgICByZXR1cm4gcy5tYWtlZmlsZSgncicpCi0KLSMgR2V0IGEgbWVudSBpbiB0aGUgZm9ybSBvZiBhIGxpc3Qgb2YgZW50cmllcwotZGVmIGdldF9tZW51KHNlbGVjdG9yLCBob3N0LCBwb3J0KToKLSAgICBmID0gc2VuZF9yZXF1ZXN0KHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIGxpc3QgPSBbXQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICBwcmludCgnKFVuZXhwZWN0ZWQgRU9GIGZyb20gc2VydmVyKScpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgaWYgbGluZSA9PSAnLic6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgIHByaW50KCcoRW1wdHkgbGluZSBmcm9tIHNlcnZlciknKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHlwZWNoYXIgPSBsaW5lWzBdCi0gICAgICAgIHBhcnRzID0gbGluZVsxOl0uc3BsaXQoVEFCKQotICAgICAgICBpZiBsZW4ocGFydHMpIDwgNDoKLSAgICAgICAgICAgIHByaW50KCcoQmFkIGxpbmUgZnJvbSBzZXJ2ZXI6ICVyKScgJSAobGluZSwpKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgbGVuKHBhcnRzKSA+IDQ6Ci0gICAgICAgICAgICBwcmludCgnKEV4dHJhIGluZm8gZnJvbSBzZXJ2ZXI6ICVyKScgJSAocGFydHNbNDpdLCkpCi0gICAgICAgIHBhcnRzLmluc2VydCgwLCB0eXBlY2hhcikKLSAgICAgICAgbGlzdC5hcHBlbmQocGFydHMpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIGxpc3QKLQotIyBHZXQgYSB0ZXh0IGZpbGUgYXMgYSBsaXN0IG9mIGxpbmVzLCB3aXRoIHRyYWlsaW5nIENSTEYgc3RyaXBwZWQKLWRlZiBnZXRfdGV4dGZpbGUoc2VsZWN0b3IsIGhvc3QsIHBvcnQpOgotICAgIGxpc3QgPSBbXQotICAgIGdldF9hbHRfdGV4dGZpbGUoc2VsZWN0b3IsIGhvc3QsIHBvcnQsIGxpc3QuYXBwZW5kKQotICAgIHJldHVybiBsaXN0Ci0KLSMgR2V0IGEgdGV4dCBmaWxlIGFuZCBwYXNzIGVhY2ggbGluZSB0byBhIGZ1bmN0aW9uLCB3aXRoIHRyYWlsaW5nIENSTEYgc3RyaXBwZWQKLWRlZiBnZXRfYWx0X3RleHRmaWxlKHNlbGVjdG9yLCBob3N0LCBwb3J0LCBmdW5jKToKLSAgICBmID0gc2VuZF9yZXF1ZXN0KHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICBwcmludCgnKFVuZXhwZWN0ZWQgRU9GIGZyb20gc2VydmVyKScpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgaWYgbGluZSA9PSAnLic6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBsaW5lWzoyXSA9PSAnLi4nOgotICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdCi0gICAgICAgIGZ1bmMobGluZSkKLSAgICBmLmNsb3NlKCkKLQotIyBHZXQgYSBiaW5hcnkgZmlsZSBhcyBvbmUgc29saWQgZGF0YSBibG9jawotZGVmIGdldF9iaW5hcnkoc2VsZWN0b3IsIGhvc3QsIHBvcnQpOgotICAgIGYgPSBzZW5kX3JlcXVlc3Qoc2VsZWN0b3IsIGhvc3QsIHBvcnQpCi0gICAgZGF0YSA9IGYucmVhZCgpCi0gICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIGRhdGEKLQotIyBHZXQgYSBiaW5hcnkgZmlsZSBhbmQgcGFzcyBlYWNoIGJsb2NrIHRvIGEgZnVuY3Rpb24KLWRlZiBnZXRfYWx0X2JpbmFyeShzZWxlY3RvciwgaG9zdCwgcG9ydCwgZnVuYywgYmxvY2tzaXplKToKLSAgICBmID0gc2VuZF9yZXF1ZXN0KHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGRhdGEgPSBmLnJlYWQoYmxvY2tzaXplKQotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZ1bmMoZGF0YSkKLQotIyBBICp2ZXJ5KiBzaW1wbGUgaW50ZXJhY3RpdmUgYnJvd3NlcgotCi0jIEJyb3dzZXIgbWFpbiBjb21tYW5kLCBoYXMgZGVmYXVsdCBhcmd1bWVudHMKLWRlZiBicm93c2VyKCphcmdzKToKLSAgICBzZWxlY3RvciA9IERFRl9TRUxFQ1RPUgotICAgIGhvc3QgPSBERUZfSE9TVAotICAgIHBvcnQgPSBERUZfUE9SVAotICAgIG4gPSBsZW4oYXJncykKLSAgICBpZiBuID4gMCBhbmQgYXJnc1swXToKLSAgICAgICAgc2VsZWN0b3IgPSBhcmdzWzBdCi0gICAgaWYgbiA+IDEgYW5kIGFyZ3NbMV06Ci0gICAgICAgIGhvc3QgPSBhcmdzWzFdCi0gICAgaWYgbiA+IDIgYW5kIGFyZ3NbMl06Ci0gICAgICAgIHBvcnQgPSBhcmdzWzJdCi0gICAgaWYgbiA+IDM6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigndG9vIG1hbnkgYXJncycpCi0gICAgdHJ5OgotICAgICAgICBicm93c2VfbWVudShzZWxlY3RvciwgaG9zdCwgcG9ydCkKLSAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoJ1NvY2tldCBlcnJvcjonLCBtc2cpCi0gICAgICAgIHN5cy5leGl0KDEpCi0gICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICBwcmludCgnXG5bR29vZGJ5ZV0nKQotCi0jIEJyb3dzZSBhIG1lbnUKLWRlZiBicm93c2VfbWVudShzZWxlY3RvciwgaG9zdCwgcG9ydCk6Ci0gICAgbGlzdCA9IGdldF9tZW51KHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHByaW50KCctLS0tLSBNRU5VIC0tLS0tJykKLSAgICAgICAgcHJpbnQoJ1NlbGVjdG9yOicsIHJlcHIoc2VsZWN0b3IpKQotICAgICAgICBwcmludCgnSG9zdDonLCBob3N0LCAnIFBvcnQ6JywgcG9ydCkKLSAgICAgICAgcHJpbnQoKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obGlzdCkpOgotICAgICAgICAgICAgaXRlbSA9IGxpc3RbaV0KLSAgICAgICAgICAgIHR5cGVjaGFyLCBkZXNjcmlwdGlvbiA9IGl0ZW1bMF0sIGl0ZW1bMV0KLSAgICAgICAgICAgIHByaW50KHJlcHIoaSsxKS5yanVzdCgzKSArICc6JywgZGVzY3JpcHRpb24sIGVuZD0nICcpCi0gICAgICAgICAgICBpZiB0eXBlY2hhciBpbiB0eXBlbmFtZToKLSAgICAgICAgICAgICAgICBwcmludCh0eXBlbmFtZVt0eXBlY2hhcl0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCc8VFlQRT0nICsgcmVwcih0eXBlY2hhcikgKyAnPicpCi0gICAgICAgIHByaW50KCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzdHIgPSBpbnB1dCgnQ2hvaWNlIFtDUiA9PSB1cCBhIGxldmVsXTogJykKLSAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgICAgICAgICBwcmludCgpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBub3Qgc3RyOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNob2ljZSA9IGludChzdHIpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBwcmludCgnQ2hvaWNlIG11c3QgYmUgYSBudW1iZXI7IHRyeSBhZ2FpbjonKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBub3QgMCA8IGNob2ljZSA8PSBsZW4obGlzdCk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ0Nob2ljZSBvdXQgb2YgcmFuZ2U7IHRyeSBhZ2FpbjonKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhawotICAgICAgICBpdGVtID0gbGlzdFtjaG9pY2UtMV0KLSAgICAgICAgdHlwZWNoYXIgPSBpdGVtWzBdCi0gICAgICAgIFtpX3NlbGVjdG9yLCBpX2hvc3QsIGlfcG9ydF0gPSBpdGVtWzI6NV0KLSAgICAgICAgaWYgdHlwZWNoYXIgaW4gdHlwZWJyb3dzZXI6Ci0gICAgICAgICAgICBicm93c2VyZnVuYyA9IHR5cGVicm93c2VyW3R5cGVjaGFyXQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGJyb3dzZXJmdW5jKGlfc2VsZWN0b3IsIGlfaG9zdCwgaV9wb3J0KQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBzb2NrZXQuZXJyb3IpOgotICAgICAgICAgICAgICAgIHQsIHYsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgICAgICBwcmludCgnKioqJywgdCwgJzonLCB2KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJ1Vuc3VwcG9ydGVkIG9iamVjdCB0eXBlJykKLQotIyBCcm93c2UgYSB0ZXh0IGZpbGUKLWRlZiBicm93c2VfdGV4dGZpbGUoc2VsZWN0b3IsIGhvc3QsIHBvcnQpOgotICAgIHggPSBOb25lCi0gICAgdHJ5OgotICAgICAgICBwID0gb3MucG9wZW4oJyR7UEFHRVItbW9yZX0nLCAndycpCi0gICAgICAgIHggPSBTYXZlTGluZXMocCkKLSAgICAgICAgZ2V0X2FsdF90ZXh0ZmlsZShzZWxlY3RvciwgaG9zdCwgcG9ydCwgeC53cml0ZWxuKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoJ0lPRXJyb3I6JywgbXNnKQotICAgIGlmIHg6Ci0gICAgICAgIHguY2xvc2UoKQotICAgIGYgPSBvcGVuX3NhdmVmaWxlKCkKLSAgICBpZiBub3QgZjoKLSAgICAgICAgcmV0dXJuCi0gICAgeCA9IFNhdmVMaW5lcyhmKQotICAgIHRyeToKLSAgICAgICAgZ2V0X2FsdF90ZXh0ZmlsZShzZWxlY3RvciwgaG9zdCwgcG9ydCwgeC53cml0ZWxuKQotICAgICAgICBwcmludCgnRG9uZS4nKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQoJ0lPRXJyb3I6JywgbXNnKQotICAgIHguY2xvc2UoKQotCi1kZWYgcmF3X2lucHV0KHByb21wdCk6Ci0gICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIHN5cy5zdGRpbi5yZWFkbGluZSgpCi0KLSMgQnJvd3NlIGEgc2VhcmNoIGluZGV4Ci1kZWYgYnJvd3NlX3NlYXJjaChzZWxlY3RvciwgaG9zdCwgcG9ydCk6Ci0gICAgd2hpbGUgMToKLSAgICAgICAgcHJpbnQoJy0tLS0tIFNFQVJDSCAtLS0tLScpCi0gICAgICAgIHByaW50KCdTZWxlY3RvcjonLCByZXByKHNlbGVjdG9yKSkKLSAgICAgICAgcHJpbnQoJ0hvc3Q6JywgaG9zdCwgJyBQb3J0OicsIHBvcnQpCi0gICAgICAgIHByaW50KCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcXVlcnkgPSBpbnB1dCgnUXVlcnkgW0NSID09IHVwIGEgbGV2ZWxdOiAnKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICBwcmludCgpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBxdWVyeSA9IHF1ZXJ5LnN0cmlwKCkKLSAgICAgICAgaWYgbm90IHF1ZXJ5OgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgJ1x0JyBpbiBxdWVyeToKLSAgICAgICAgICAgIHByaW50KCdTb3JyeSwgcXVlcmllcyBjYW5ub3QgY29udGFpbiB0YWJzJykKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGJyb3dzZV9tZW51KHNlbGVjdG9yICsgVEFCICsgcXVlcnksIGhvc3QsIHBvcnQpCi0KLSMgIkJyb3dzZSIgdGVsbmV0LWJhc2VkIGluZm9ybWF0aW9uLCBpLmUuIG9wZW4gYSB0ZWxuZXQgc2Vzc2lvbgotZGVmIGJyb3dzZV90ZWxuZXQoc2VsZWN0b3IsIGhvc3QsIHBvcnQpOgotICAgIGlmIHNlbGVjdG9yOgotICAgICAgICBwcmludCgnTG9nIGluIGFzJywgcmVwcihzZWxlY3RvcikpCi0gICAgaWYgdHlwZShwb3J0KSAhPSB0eXBlKCcnKToKLSAgICAgICAgcG9ydCA9IHJlcHIocG9ydCkKLSAgICBzdHMgPSBvcy5zeXN0ZW0oJ3NldCAteDsgZXhlYyB0ZWxuZXQgJyArIGhvc3QgKyAnICcgKyBwb3J0KQotICAgIGlmIHN0czoKLSAgICAgICAgcHJpbnQoJ0V4aXQgc3RhdHVzOicsIHN0cykKLQotIyAiQnJvd3NlIiBhIGJpbmFyeSBmaWxlLCBpLmUuIHNhdmUgaXQgdG8gYSBmaWxlCi1kZWYgYnJvd3NlX2JpbmFyeShzZWxlY3RvciwgaG9zdCwgcG9ydCk6Ci0gICAgZiA9IG9wZW5fc2F2ZWZpbGUoKQotICAgIGlmIG5vdCBmOgotICAgICAgICByZXR1cm4KLSAgICB4ID0gU2F2ZVdpdGhQcm9ncmVzcyhmKQotICAgIGdldF9hbHRfYmluYXJ5KHNlbGVjdG9yLCBob3N0LCBwb3J0LCB4LndyaXRlLCA4KjEwMjQpCi0gICAgeC5jbG9zZSgpCi0KLSMgIkJyb3dzZSIgYSBzb3VuZCBmaWxlLCBpLmUuIHBsYXkgaXQgb3Igc2F2ZSBpdAotZGVmIGJyb3dzZV9zb3VuZChzZWxlY3RvciwgaG9zdCwgcG9ydCk6Ci0gICAgYnJvd3NlX2JpbmFyeShzZWxlY3RvciwgaG9zdCwgcG9ydCkKLQotIyBEaWN0aW9uYXJ5IG1hcHBpbmcgdHlwZXMgdG8gYnJvd3NlciBmdW5jdGlvbnMKLXR5cGVicm93c2VyID0geycwJzogYnJvd3NlX3RleHRmaWxlLCAnMSc6IGJyb3dzZV9tZW51LCBcCi0gICAgICAgICc0JzogYnJvd3NlX2JpbmFyeSwgJzUnOiBicm93c2VfYmluYXJ5LCAnNic6IGJyb3dzZV90ZXh0ZmlsZSwgXAotICAgICAgICAnNyc6IGJyb3dzZV9zZWFyY2gsIFwKLSAgICAgICAgJzgnOiBicm93c2VfdGVsbmV0LCAnOSc6IGJyb3dzZV9iaW5hcnksICdzJzogYnJvd3NlX3NvdW5kfQotCi0jIENsYXNzIHVzZWQgdG8gc2F2ZSBsaW5lcywgYXBwZW5kaW5nIGEgbmV3bGluZSB0byBlYWNoIGxpbmUKLWNsYXNzIFNhdmVMaW5lczoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZik6Ci0gICAgICAgIHNlbGYuZiA9IGYKLSAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKLSAgICAgICAgc2VsZi5mLndyaXRlKGxpbmUgKyAnXG4nKQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc3RzID0gc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgaWYgc3RzOgotICAgICAgICAgICAgcHJpbnQoJ0V4aXQgc3RhdHVzOicsIHN0cykKLQotIyBDbGFzcyB1c2VkIHRvIHNhdmUgZGF0YSB3aGlsZSBzaG93aW5nIHByb2dyZXNzCi1jbGFzcyBTYXZlV2l0aFByb2dyZXNzOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmKToKLSAgICAgICAgc2VsZi5mID0gZgotICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIycpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBzZWxmLmYud3JpdGUoZGF0YSkKLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHByaW50KCkKLSAgICAgICAgc3RzID0gc2VsZi5mLmNsb3NlKCkKLSAgICAgICAgaWYgc3RzOgotICAgICAgICAgICAgcHJpbnQoJ0V4aXQgc3RhdHVzOicsIHN0cykKLQotIyBBc2sgZm9yIGFuZCBvcGVuIGEgc2F2ZSBmaWxlLCBvciByZXR1cm4gTm9uZSBpZiBub3QgdG8gc2F2ZQotZGVmIG9wZW5fc2F2ZWZpbGUoKToKLSAgICB0cnk6Ci0gICAgICAgIHNhdmVmaWxlID0gaW5wdXQoIFwKLSAgICAnU2F2ZSBhcyBmaWxlIFtDUiA9PSBkb25cJ3Qgc2F2ZTsgfHBpcGVsaW5lIG9yIH51c2VyLy4uLiBPS106ICcpCi0gICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICBwcmludCgpCi0gICAgICAgIHJldHVybiBOb25lCi0gICAgc2F2ZWZpbGUgPSBzYXZlZmlsZS5zdHJpcCgpCi0gICAgaWYgbm90IHNhdmVmaWxlOgotICAgICAgICByZXR1cm4gTm9uZQotICAgIGlmIHNhdmVmaWxlWzBdID09ICd8JzoKLSAgICAgICAgY21kID0gc2F2ZWZpbGVbMTpdLnN0cmlwKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcCA9IG9zLnBvcGVuKGNtZCwgJ3cnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBwcmludChyZXByKGNtZCksICc6JywgbXNnKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcHJpbnQoJ1BpcGluZyB0aHJvdWdoJywgcmVwcihjbWQpLCAnLi4uJykKLSAgICAgICAgcmV0dXJuIHAKLSAgICBpZiBzYXZlZmlsZVswXSA9PSAnfic6Ci0gICAgICAgIHNhdmVmaWxlID0gb3MucGF0aC5leHBhbmR1c2VyKHNhdmVmaWxlKQotICAgIHRyeToKLSAgICAgICAgZiA9IG9wZW4oc2F2ZWZpbGUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KHJlcHIoc2F2ZWZpbGUpLCAnOicsIG1zZykKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBwcmludCgnU2F2aW5nIHRvJywgcmVwcihzYXZlZmlsZSksICcuLi4nKQotICAgIHJldHVybiBmCi0KLSMgVGVzdCBwcm9ncmFtCi1kZWYgdGVzdCgpOgotICAgIGlmIHN5cy5hcmd2WzQ6XToKLSAgICAgICAgcHJpbnQoJ3VzYWdlOiBnb3BoZXIgWyBbc2VsZWN0b3JdIGhvc3QgW3BvcnRdIF0nKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGVsaWYgc3lzLmFyZ3ZbMzpdOgotICAgICAgICBicm93c2VyKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSwgc3lzLmFyZ3ZbM10pCi0gICAgZWxpZiBzeXMuYXJndlsyOl06Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBvcnQgPSBpbnQoc3lzLmFyZ3ZbMl0pCi0gICAgICAgICAgICBzZWxlY3RvciA9ICcnCi0gICAgICAgICAgICBob3N0ID0gc3lzLmFyZ3ZbMV0KLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBzZWxlY3RvciA9IHN5cy5hcmd2WzFdCi0gICAgICAgICAgICBob3N0ID0gc3lzLmFyZ3ZbMl0KLSAgICAgICAgICAgIHBvcnQgPSAnJwotICAgICAgICBicm93c2VyKHNlbGVjdG9yLCBob3N0LCBwb3J0KQotICAgIGVsaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBicm93c2VyKCcnLCBzeXMuYXJndlsxXSkKLSAgICBlbHNlOgotICAgICAgICBicm93c2VyKCkKLQotIyBDYWxsIHRoZSB0ZXN0IHByb2dyYW0gYXMgYSBtYWluIHByb2dyYW0KLXRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3JhZGlvLnB5IGIvRGVtby9zb2NrZXRzL3JhZGlvLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmYTRjZTc1Li4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy9yYWRpby5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMgUmVjZWl2ZSBVRFAgcGFja2V0cyB0cmFuc21pdHRlZCBieSBhIGJyb2FkY2FzdGluZyBzZXJ2aWNlCi0KLU1ZUE9SVCA9IDUwMDAwCi0KLWltcG9ydCBzeXMKLWZyb20gc29ja2V0IGltcG9ydCAqCi0KLXMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSkKLXMuYmluZCgoJycsIE1ZUE9SVCkpCi0KLXdoaWxlIDE6Ci0gICAgZGF0YSwgd2hlcmVmcm9tID0gcy5yZWN2ZnJvbSgxNTAwLCAwKQotICAgIHN5cy5zdGRlcnIud3JpdGUocmVwcih3aGVyZWZyb20pICsgJ1xuJykKLSAgICBzeXMuc3Rkb3V0LndyaXRlKGRhdGEpCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvcnB5dGhvbi5weSBiL0RlbW8vc29ja2V0cy9ycHl0aG9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiNjU0ZGMyLi4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy9ycHl0aG9uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFJlbW90ZSBweXRob24gY2xpZW50LgotIyBFeGVjdXRlIFB5dGhvbiBjb21tYW5kcyByZW1vdGVseSBhbmQgc2VuZCBvdXRwdXQgYmFjay4KLQotaW1wb3J0IHN5cwotaW1wb3J0IHN0cmluZwotZnJvbSBzb2NrZXQgaW1wb3J0ICoKLQotUE9SVCA9IDQxMjcKLUJVRlNJWkUgPSAxMDI0Ci0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA8IDM6Ci0gICAgICAgIHByaW50KCJ1c2FnZTogcnB5dGhvbiBob3N0IGNvbW1hbmQiKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGhvc3QgPSBzeXMuYXJndlsxXQotICAgIHBvcnQgPSBQT1JUCi0gICAgaSA9IHN0cmluZy5maW5kKGhvc3QsICc6JykKLSAgICBpZiBpID49IDA6Ci0gICAgICAgIHBvcnQgPSBzdHJpbmcuYXRvaShwb3J0W2krMTpdKQotICAgICAgICBob3N0ID0gaG9zdFs6aV0KLSAgICBjb21tYW5kID0gc3RyaW5nLmpvaW4oc3lzLmFyZ3ZbMjpdKQotICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0pCi0gICAgcy5jb25uZWN0KChob3N0LCBwb3J0KSkKLSAgICBzLnNlbmQoY29tbWFuZCkKLSAgICBzLnNodXRkb3duKDEpCi0gICAgcmVwbHkgPSAnJwotICAgIHdoaWxlIDE6Ci0gICAgICAgIGRhdGEgPSBzLnJlY3YoQlVGU0laRSkKLSAgICAgICAgaWYgbm90IGRhdGE6IGJyZWFrCi0gICAgICAgIHJlcGx5ID0gcmVwbHkgKyBkYXRhCi0gICAgcHJpbnQocmVwbHksIGVuZD0nICcpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3JweXRob25kLnB5IGIvRGVtby9zb2NrZXRzL3JweXRob25kLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkNzQ1Y2M3Li4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy9ycHl0aG9uZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBSZW1vdGUgcHl0aG9uIHNlcnZlci4KLSMgRXhlY3V0ZSBQeXRob24gY29tbWFuZHMgcmVtb3RlbHkgYW5kIHNlbmQgb3V0cHV0IGJhY2suCi0jIFdBUk5JTkc6IFRoaXMgdmVyc2lvbiBoYXMgYSBnYXBpbmcgc2VjdXJpdHkgaG9sZSAtLSBpdCBhY2NlcHRzIHJlcXVlc3RzCi0jIGZyb20gYW55IGhvc3Qgb24gdGhlIEludGVybmV0IQotCi1pbXBvcnQgc3lzCi1mcm9tIHNvY2tldCBpbXBvcnQgKgotaW1wb3J0IGlvCi1pbXBvcnQgdHJhY2ViYWNrCi0KLVBPUlQgPSA0MTI3Ci1CVUZTSVpFID0gMTAyNAotCi1kZWYgbWFpbigpOgotICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgotICAgICAgICBwb3J0ID0gaW50KGV2YWwoc3lzLmFyZ3ZbMV0pKQotICAgIGVsc2U6Ci0gICAgICAgIHBvcnQgPSBQT1JUCi0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICBzLmJpbmQoKCcnLCBwb3J0KSkKLSAgICBzLmxpc3RlbigxKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGNvbm4sIChyZW1vdGVob3N0LCByZW1vdGVwb3J0KSA9IHMuYWNjZXB0KCkKLSAgICAgICAgcHJpbnQoJ2Nvbm5lY3RlZCBieScsIHJlbW90ZWhvc3QsIHJlbW90ZXBvcnQpCi0gICAgICAgIHJlcXVlc3QgPSAnJwotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0ICsgZGF0YQotICAgICAgICByZXBseSA9IGV4ZWN1dGUocmVxdWVzdCkKLSAgICAgICAgY29ubi5zZW5kKHJlcGx5KQotICAgICAgICBjb25uLmNsb3NlKCkKLQotZGVmIGV4ZWN1dGUocmVxdWVzdCk6Ci0gICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKLSAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVyciA9IGZha2VmaWxlID0gaW8uU3RyaW5nSU8oKQotICAgIHRyeToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYyhyZXF1ZXN0LCB7fSwge30pCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMTAwKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKLSAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAotICAgIHJldHVybiBmYWtlZmlsZS5nZXR2YWx1ZSgpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3RlbG5ldC5weSBiL0RlbW8vc29ja2V0cy90ZWxuZXQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAzODAzNmZmLi4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy90ZWxuZXQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIE1pbmltYWwgaW50ZXJmYWNlIHRvIHRoZSBJbnRlcm5ldCB0ZWxuZXQgcHJvdG9jb2wuCi0jCi0jIEl0IHJlZnVzZXMgYWxsIHRlbG5ldCBvcHRpb25zIGFuZCBkb2VzIG5vdCByZWNvZ25pemUgYW55IG9mIHRoZSBvdGhlcgotIyB0ZWxuZXQgY29tbWFuZHMsIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCB0byBjb25uZWN0IGluIGxpbmUtYnktbGluZSBtb2RlLgotIyBJdCdzIGFsc28gdXNlZnVsIHRvIHBsYXkgd2l0aCBhIG51bWJlciBvZiBvdGhlciBzZXJ2aWNlcywKLSMgbGlrZSB0aW1lLCBmaW5nZXIsIHNtdHAgYW5kIGV2ZW4gZnRwLgotIwotIyBVc2FnZTogdGVsbmV0IGhvc3QgW3BvcnRdCi0jCi0jIFRoZSBwb3J0IG1heSBiZSBhIHNlcnZpY2UgbmFtZSBvciBhIGRlY2ltYWwgcG9ydCBudW1iZXI7Ci0jIGl0IGRlZmF1bHRzIHRvICd0ZWxuZXQnLgotCi0KLWltcG9ydCBzeXMsIHBvc2l4LCB0aW1lCi1mcm9tIHNvY2tldCBpbXBvcnQgKgotCi1CVUZTSVpFID0gMTAyNAotCi0jIFRlbG5ldCBwcm90b2NvbCBjaGFyYWN0ZXJzCi0KLUlBQyAgPSBjaHIoMjU1KSAjIEludGVycHJldCBhcyBjb21tYW5kCi1ET05UID0gY2hyKDI1NCkKLURPICAgPSBjaHIoMjUzKQotV09OVCA9IGNocigyNTIpCi1XSUxMID0gY2hyKDI1MSkKLQotZGVmIG1haW4oKToKLSAgICBob3N0ID0gc3lzLmFyZ3ZbMV0KLSAgICB0cnk6Ci0gICAgICAgIGhvc3RhZGRyID0gZ2V0aG9zdGJ5bmFtZShob3N0KQotICAgIGV4Y2VwdCBlcnJvcjoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzeXMuYXJndlsxXSArICc6IGJhZCBob3N0IG5hbWVcbicpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgIwotICAgIGlmIGxlbihzeXMuYXJndikgPiAyOgotICAgICAgICBzZXJ2bmFtZSA9IHN5cy5hcmd2WzJdCi0gICAgZWxzZToKLSAgICAgICAgc2Vydm5hbWUgPSAndGVsbmV0JwotICAgICMKLSAgICBpZiAnMCcgPD0gc2Vydm5hbWVbOjFdIDw9ICc5JzoKLSAgICAgICAgcG9ydCA9IGV2YWwoc2Vydm5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcG9ydCA9IGdldHNlcnZieW5hbWUoc2Vydm5hbWUsICd0Y3AnKQotICAgICAgICBleGNlcHQgZXJyb3I6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHNlcnZuYW1lICsgJzogYmFkIHRjcCBzZXJ2aWNlIG5hbWVcbicpCi0gICAgICAgICAgICBzeXMuZXhpdCgyKQotICAgICMKLSAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKQotICAgICMKLSAgICB0cnk6Ci0gICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0gICAgZXhjZXB0IGVycm9yIGFzIG1zZzoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnY29ubmVjdCBmYWlsZWQ6ICcgKyByZXByKG1zZykgKyAnXG4nKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgICMKLSAgICBwaWQgPSBwb3NpeC5mb3JrKCkKLSAgICAjCi0gICAgaWYgcGlkID09IDA6Ci0gICAgICAgICMgY2hpbGQgLS0gcmVhZCBzdGRpbiwgd3JpdGUgc29ja2V0Ci0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHMuc2VuZChsaW5lKQotICAgIGVsc2U6Ci0gICAgICAgICMgcGFyZW50IC0tIHJlYWQgc29ja2V0LCB3cml0ZSBzdGRvdXQKLSAgICAgICAgaWFjID0gMCAgICAgICAgICMgSW50ZXJwcmV0IG5leHQgY2hhciBhcyBjb21tYW5kCi0gICAgICAgIG9wdCA9ICcnICAgICAgICAjIEludGVycHJldCBuZXh0IGNoYXIgYXMgb3B0aW9uCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBkYXRhID0gcy5yZWN2KEJVRlNJWkUpCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAjIEVPRjsga2lsbCBjaGlsZCBhbmQgZXhpdAotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICcoQ2xvc2VkIGJ5IHJlbW90ZSBob3N0KVxuJykKLSAgICAgICAgICAgICAgICBwb3NpeC5raWxsKHBpZCwgOSkKLSAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQotICAgICAgICAgICAgY2xlYW5kYXRhID0gJycKLSAgICAgICAgICAgIGZvciBjIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgaWYgb3B0OgotICAgICAgICAgICAgICAgICAgICBwcmludChvcmQoYykpCi0gICAgICAgICAgICAgICAgICAgIHMuc2VuZChvcHQgKyBjKQotICAgICAgICAgICAgICAgICAgICBvcHQgPSAnJwotICAgICAgICAgICAgICAgIGVsaWYgaWFjOgotICAgICAgICAgICAgICAgICAgICBpYWMgPSAwCi0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gSUFDOgotICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW5kYXRhID0gY2xlYW5kYXRhICsgYwotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgaW4gKERPLCBET05UKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gRE86IHByaW50KCcoRE8pJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IHByaW50KCcoRE9OVCknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0ID0gSUFDICsgV09OVAotICAgICAgICAgICAgICAgICAgICBlbGlmIGMgaW4gKFdJTEwsIFdPTlQpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYyA9PSBXSUxMOiBwcmludCgnKFdJTEwpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6IHByaW50KCcoV09OVCknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0ID0gSUFDICsgRE9OVAotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyhjb21tYW5kKScsIG9yZChjKSkKLSAgICAgICAgICAgICAgICBlbGlmIGMgPT0gSUFDOgotICAgICAgICAgICAgICAgICAgICBpYWMgPSAxCi0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoSUFDKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY2xlYW5kYXRhID0gY2xlYW5kYXRhICsgYwotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShjbGVhbmRhdGEpCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotCi10cnk6Ci0gICAgbWFpbigpCi1leGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgcGFzcwpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3Rocm91Z2hwdXQucHkgYi9EZW1vL3NvY2tldHMvdGhyb3VnaHB1dC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjQyNDRhYS4uMDAwMDAwMAotLS0gYS9EZW1vL3NvY2tldHMvdGhyb3VnaHB1dC5weQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBUZXN0IG5ldHdvcmsgdGhyb3VnaHB1dC4KLSMKLSMgVXNhZ2U6Ci0jIDEpIG9uIGhvc3RfQTogdGhyb3VnaHB1dCAtcyBbcG9ydF0gICAgICAgICAgICAgICAgICAgICMgc3RhcnQgYSBzZXJ2ZXIKLSMgMikgb24gaG9zdF9COiB0aHJvdWdocHV0IC1jICBjb3VudCBob3N0X0EgW3BvcnRdICAgICAgIyBzdGFydCBhIGNsaWVudAotIwotIyBUaGUgc2VydmVyIHdpbGwgc2VydmljZSBtdWx0aXBsZSBjbGllbnRzIHVudGlsIGl0IGlzIGtpbGxlZC4KLSMKLSMgVGhlIGNsaWVudCBwZXJmb3JtcyBvbmUgdHJhbnNmZXIgb2YgY291bnQqQlVGU0laRSBieXRlcyBhbmQKLSMgbWVhc3VyZXMgdGhlIHRpbWUgaXQgdGFrZXMgKHJvdW5kdHJpcCEpLgotCi0KLWltcG9ydCBzeXMsIHRpbWUKLWZyb20gc29ja2V0IGltcG9ydCAqCi0KLU1ZX1BPUlQgPSA1MDAwMCArIDQyCi0KLUJVRlNJWkUgPSAxMDI0Ci0KLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKLSAgICAgICAgdXNhZ2UoKQotICAgIGlmIHN5cy5hcmd2WzFdID09ICctcyc6Ci0gICAgICAgIHNlcnZlcigpCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAnLWMnOgotICAgICAgICBjbGllbnQoKQotICAgIGVsc2U6Ci0gICAgICAgIHVzYWdlKCkKLQotCi1kZWYgdXNhZ2UoKToKLSAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgotICAgIHByaW50KCdVc2FnZTogICAgKG9uIGhvc3RfQSkgdGhyb3VnaHB1dCAtcyBbcG9ydF0nKQotICAgIHByaW50KCdhbmQgdGhlbjogKG9uIGhvc3RfQikgdGhyb3VnaHB1dCAtYyBjb3VudCBob3N0X0EgW3BvcnRdJykKLSAgICBzeXMuZXhpdCgyKQotCi0KLWRlZiBzZXJ2ZXIoKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMjoKLSAgICAgICAgcG9ydCA9IGV2YWwoc3lzLmFyZ3ZbMl0pCi0gICAgZWxzZToKLSAgICAgICAgcG9ydCA9IE1ZX1BPUlQKLSAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKQotICAgIHMuYmluZCgoJycsIHBvcnQpKQotICAgIHMubGlzdGVuKDEpCi0gICAgcHJpbnQoJ1NlcnZlciByZWFkeS4uLicpCi0gICAgd2hpbGUgMToKLSAgICAgICAgY29ubiwgKGhvc3QsIHJlbW90ZXBvcnQpID0gcy5hY2NlcHQoKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGRlbCBkYXRhCi0gICAgICAgIGNvbm4uc2VuZCgnT0tcbicpCi0gICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICBwcmludCgnRG9uZSB3aXRoJywgaG9zdCwgJ3BvcnQnLCByZW1vdGVwb3J0KQotCi0KLWRlZiBjbGllbnQoKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgNDoKLSAgICAgICAgdXNhZ2UoKQotICAgIGNvdW50ID0gaW50KGV2YWwoc3lzLmFyZ3ZbMl0pKQotICAgIGhvc3QgPSBzeXMuYXJndlszXQotICAgIGlmIGxlbihzeXMuYXJndikgPiA0OgotICAgICAgICBwb3J0ID0gZXZhbChzeXMuYXJndls0XSkKLSAgICBlbHNlOgotICAgICAgICBwb3J0ID0gTVlfUE9SVAotICAgIHRlc3RkYXRhID0gJ3gnICogKEJVRlNJWkUtMSkgKyAnXG4nCi0gICAgdDEgPSB0aW1lLnRpbWUoKQotICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0pCi0gICAgdDIgPSB0aW1lLnRpbWUoKQotICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCi0gICAgdDMgPSB0aW1lLnRpbWUoKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IGNvdW50OgotICAgICAgICBpID0gaSsxCi0gICAgICAgIHMuc2VuZCh0ZXN0ZGF0YSkKLSAgICBzLnNodXRkb3duKDEpICMgU2VuZCBFT0YKLSAgICB0NCA9IHRpbWUudGltZSgpCi0gICAgZGF0YSA9IHMucmVjdihCVUZTSVpFKQotICAgIHQ1ID0gdGltZS50aW1lKCkKLSAgICBwcmludChkYXRhKQotICAgIHByaW50KCdSYXcgdGltZXJzOicsIHQxLCB0MiwgdDMsIHQ0LCB0NSkKLSAgICBwcmludCgnSW50ZXJ2YWxzOicsIHQyLXQxLCB0My10MiwgdDQtdDMsIHQ1LXQ0KQotICAgIHByaW50KCdUb3RhbDonLCB0NS10MSkKLSAgICBwcmludCgnVGhyb3VnaHB1dDonLCByb3VuZCgoQlVGU0laRSpjb3VudCowLjAwMSkgLyAodDUtdDEpLCAzKSwgZW5kPScgJykKLSAgICBwcmludCgnSy9zZWMuJykKLQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vc29ja2V0cy91ZHBlY2hvLnB5IGIvRGVtby9zb2NrZXRzL3VkcGVjaG8ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk5NjZmZDguLjAwMDAwMDAKLS0tIGEvRGVtby9zb2NrZXRzL3VkcGVjaG8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQ2xpZW50IGFuZCBzZXJ2ZXIgZm9yIHVkcCAoZGF0YWdyYW0pIGVjaG8uCi0jCi0jIFVzYWdlOiB1ZHBlY2hvIC1zIFtwb3J0XSAgICAgICAgICAgICh0byBzdGFydCBhIHNlcnZlcikKLSMgb3I6ICAgIHVkcGVjaG8gLWMgaG9zdCBbcG9ydF0gPGZpbGUgKGNsaWVudCkKLQotaW1wb3J0IHN5cwotZnJvbSBzb2NrZXQgaW1wb3J0ICoKLQotRUNIT19QT1JUID0gNTAwMDAgKyA3Ci1CVUZTSVpFID0gMTAyNAotCi1kZWYgbWFpbigpOgotICAgIGlmIGxlbihzeXMuYXJndikgPCAyOgotICAgICAgICB1c2FnZSgpCi0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gJy1zJzoKLSAgICAgICAgc2VydmVyKCkKLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICctYyc6Ci0gICAgICAgIGNsaWVudCgpCi0gICAgZWxzZToKLSAgICAgICAgdXNhZ2UoKQotCi1kZWYgdXNhZ2UoKToKLSAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgotICAgIHByaW50KCdVc2FnZTogdWRwZWNobyAtcyBbcG9ydF0gICAgICAgICAgICAoc2VydmVyKScpCi0gICAgcHJpbnQoJ29yOiAgICB1ZHBlY2hvIC1jIGhvc3QgW3BvcnRdIDxmaWxlIChjbGllbnQpJykKLSAgICBzeXMuZXhpdCgyKQotCi1kZWYgc2VydmVyKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA+IDI6Ci0gICAgICAgIHBvcnQgPSBldmFsKHN5cy5hcmd2WzJdKQotICAgIGVsc2U6Ci0gICAgICAgIHBvcnQgPSBFQ0hPX1BPUlQKLSAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0pCi0gICAgcy5iaW5kKCgnJywgcG9ydCkpCi0gICAgcHJpbnQoJ3VkcCBlY2hvIHNlcnZlciByZWFkeScpCi0gICAgd2hpbGUgMToKLSAgICAgICAgZGF0YSwgYWRkciA9IHMucmVjdmZyb20oQlVGU0laRSkKLSAgICAgICAgcHJpbnQoJ3NlcnZlciByZWNlaXZlZCAlciBmcm9tICVyJyAlIChkYXRhLCBhZGRyKSkKLSAgICAgICAgcy5zZW5kdG8oZGF0YSwgYWRkcikKLQotZGVmIGNsaWVudCgpOgotICAgIGlmIGxlbihzeXMuYXJndikgPCAzOgotICAgICAgICB1c2FnZSgpCi0gICAgaG9zdCA9IHN5cy5hcmd2WzJdCi0gICAgaWYgbGVuKHN5cy5hcmd2KSA+IDM6Ci0gICAgICAgIHBvcnQgPSBldmFsKHN5cy5hcmd2WzNdKQotICAgIGVsc2U6Ci0gICAgICAgIHBvcnQgPSBFQ0hPX1BPUlQKLSAgICBhZGRyID0gaG9zdCwgcG9ydAotICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSkKLSAgICBzLmJpbmQoKCcnLCAwKSkKLSAgICBwcmludCgndWRwIGVjaG8gY2xpZW50IHJlYWR5LCByZWFkaW5nIHN0ZGluJykKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBwcmludCgnYWRkciA9ICcsIGFkZHIpCi0gICAgICAgIHMuc2VuZHRvKGJ5dGVzKGxpbmUsICdhc2NpaScpLCBhZGRyKQotICAgICAgICBkYXRhLCBmcm9tYWRkciA9IHMucmVjdmZyb20oQlVGU0laRSkKLSAgICAgICAgcHJpbnQoJ2NsaWVudCByZWNlaXZlZCAlciBmcm9tICVyJyAlIChkYXRhLCBmcm9tYWRkcikpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3VuaWNhc3QucHkgYi9EZW1vL3NvY2tldHMvdW5pY2FzdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQxNWUzYy4uMDAwMDAwMAotLS0gYS9EZW1vL3NvY2tldHMvdW5pY2FzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSMgU2VuZCBVRFAgYnJvYWRjYXN0IHBhY2tldHMKLQotTVlQT1JUID0gNTAwMDAKLQotaW1wb3J0IHN5cywgdGltZQotZnJvbSBzb2NrZXQgaW1wb3J0ICoKLQotcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNKQotcy5iaW5kKCgnJywgMCkpCi0KLXdoaWxlIDE6Ci0gICAgZGF0YSA9IHJlcHIodGltZS50aW1lKCkpICsgJ1xuJwotICAgIHMuc2VuZHRvKGRhdGEsICgnJywgTVlQT1JUKSkKLSAgICB0aW1lLnNsZWVwKDIpCmRpZmYgLS1naXQgYS9EZW1vL3NvY2tldHMvdW5peGNsaWVudC5weSBiL0RlbW8vc29ja2V0cy91bml4Y2xpZW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTg3ZWVkLi4wMDAwMDAwCi0tLSBhL0RlbW8vc29ja2V0cy91bml4Y2xpZW50LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotIyBFY2hvIGNsaWVudCBkZW1vIHVzaW5nIFVuaXggc29ja2V0cwotIyBQaWV0IHZhbiBPb3N0cnVtCi0KLWZyb20gc29ja2V0IGltcG9ydCAqCi0KLUZJTEUgPSAndW5peC1zb2NrZXQnCi1zID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNKQotcy5jb25uZWN0KEZJTEUpCi1zLnNlbmQoYidIZWxsbywgd29ybGQnKQotZGF0YSA9IHMucmVjdigxMDI0KQotcy5jbG9zZSgpCi1wcmludCgnUmVjZWl2ZWQnLCByZXByKGRhdGEpKQpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL3VuaXhzZXJ2ZXIucHkgYi9EZW1vL3NvY2tldHMvdW5peHNlcnZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNjOWM0Zi4uMDAwMDAwMAotLS0gYS9EZW1vL3NvY2tldHMvdW5peHNlcnZlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMgRWNobyBzZXJ2ZXIgZGVtbyB1c2luZyBVbml4IHNvY2tldHMgKGhhbmRsZXMgb25lIGNvbm5lY3Rpb24gb25seSkKLSMgUGlldCB2YW4gT29zdHJ1bQotCi1pbXBvcnQgb3MKLWZyb20gc29ja2V0IGltcG9ydCAqCi0KLUZJTEUgPSAndW5peC1zb2NrZXQnCi1zID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNKQotcy5iaW5kKEZJTEUpCi0KLXByaW50KCdTb2NrIG5hbWUgaXM6IFsnK3MuZ2V0c29ja25hbWUoKSsnXScpCi0KLSMgV2FpdCBmb3IgYSBjb25uZWN0aW9uCi1zLmxpc3RlbigxKQotY29ubiwgYWRkciA9IHMuYWNjZXB0KCkKLQotd2hpbGUgVHJ1ZToKLSAgICBkYXRhID0gY29ubi5yZWN2KDEwMjQpCi0gICAgaWYgbm90IGRhdGE6Ci0gICAgICAgIGJyZWFrCi0gICAgY29ubi5zZW5kKGRhdGEpCi0KLWNvbm4uY2xvc2UoKQotb3MudW5saW5rKEZJTEUpCmRpZmYgLS1naXQgYS9EZW1vL3RocmVhZHMvQ29yb3V0aW5lLnB5IGIvRGVtby90aHJlYWRzL0Nvcm91dGluZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjkwZmFkYy4uMDAwMDAwMAotLS0gYS9EZW1vL3RocmVhZHMvQ29yb3V0aW5lLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSMgQ29yb3V0aW5lIGltcGxlbWVudGF0aW9uIHVzaW5nIFB5dGhvbiB0aHJlYWRzLgotIwotIyBDb21iaW5lcyBpZGVhcyBmcm9tIEd1aWRvJ3MgR2VuZXJhdG9yIG1vZHVsZSwgYW5kIGZyb20gdGhlIGNvcm91dGluZQotIyBmZWF0dXJlcyBvZiBJY29uIGFuZCBTaW11bGEgNjcuCi0jCi0jIFRvIHJ1biBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIGFzIGNvcm91dGluZXMsIHlvdSBuZWVkIHRvIGNyZWF0ZQotIyBhIENvcm91dGluZSBvYmplY3QgdG8gY29udHJvbCB0aGVtOgotIyAgICBjbyA9IENvcm91dGluZSgpCi0jIGFuZCB0aGVuICdjcmVhdGUnIGEgc3Vic2lkaWFyeSBvYmplY3QgZm9yIGVhY2ggZnVuY3Rpb24gaW4gdGhlCi0jIGNvbGxlY3Rpb246Ci0jICAgIGNvZjEgPSBjby5jcmVhdGUoZjEgWywgYXJnMSwgYXJnMiwgLi4uXSkgIyBbXSBtZWFucyBvcHRpb25hbCwKLSMgICAgY29mMiA9IGNvLmNyZWF0ZShmMiBbLCBhcmcxLCBhcmcyLCAuLi5dKSAjLi4uIG5vdCBsaXN0Ci0jICAgIGNvZjMgPSBjby5jcmVhdGUoZjMgWywgYXJnMSwgYXJnMiwgLi4uXSkKLSMgZXRjLiAgVGhlIGZ1bmN0aW9ucyBuZWVkIG5vdCBiZSBkaXN0aW5jdDsgJ2NyZWF0ZSdpbmcgdGhlIHNhbWUKLSMgZnVuY3Rpb24gbXVsdGlwbGUgdGltZXMgZ2l2ZXMgeW91IGluZGVwZW5kZW50IGluc3RhbmNlcyBvZiB0aGUKLSMgZnVuY3Rpb24uCi0jCi0jIFRvIHN0YXJ0IHRoZSBjb3JvdXRpbmVzIHJ1bm5pbmcsIHVzZSBjby50cmFuIG9uIG9uZSBvZiB0aGUgY3JlYXRlJ2QKLSMgZnVuY3Rpb25zOyBlLmcuLCBjby50cmFuKGNvZjIpLiAgVGhlIHJvdXRpbmUgdGhhdCBmaXJzdCBleGVjdXRlcwotIyBjby50cmFuIGlzIGNhbGxlZCB0aGUgIm1haW4gY29yb3V0aW5lIi4gIEl0J3Mgc3BlY2lhbCBpbiBzZXZlcmFsCi0jIHJlc3BlY3RzOiAgaXQgZXhpc3RlZCBiZWZvcmUgeW91IGNyZWF0ZWQgdGhlIENvcm91dGluZSBvYmplY3Q7IGlmIGFueSBvZgotIyB0aGUgY3JlYXRlJ2QgY29yb3V0aW5lcyBleGl0cyAoZG9lcyBhIHJldHVybiwgb3Igc3VmZmVycyBhbiB1bmhhbmRsZWQKLSMgZXhjZXB0aW9uKSwgRWFybHlFeGl0IGVycm9yIGlzIHJhaXNlZCBpbiB0aGUgbWFpbiBjb3JvdXRpbmU7IGFuZCB0aGUKLSMgY28uZGV0YWNoKCkgbWV0aG9kIHRyYW5zZmVycyBjb250cm9sIGRpcmVjdGx5IHRvIHRoZSBtYWluIGNvcm91dGluZQotIyAoeW91IGNhbid0IHVzZSBjby50cmFuKCkgZm9yIHRoaXMgYmVjYXVzZSB0aGUgbWFpbiBjb3JvdXRpbmUgZG9lc24ndAotIyBoYXZlIGEgbmFtZSAuLi4pLgotIwotIyBDb3JvdXRpbmUgb2JqZWN0cyBzdXBwb3J0IHRoZXNlIG1ldGhvZHM6Ci0jCi0jIGhhbmRsZSA9IC5jcmVhdGUoZnVuYyBbLCBhcmcxLCBhcmcyLCAuLi5dKQotIyAgICBDcmVhdGVzIGEgY29yb3V0aW5lIGZvciBhbiBpbnZvY2F0aW9uIG9mIGZ1bmMoYXJnMSwgYXJnMiwgLi4uKSwKLSMgICAgYW5kIHJldHVybnMgYSBoYW5kbGUgKCJuYW1lIikgZm9yIHRoZSBjb3JvdXRpbmUgc28gY3JlYXRlZC4gIFRoZQotIyAgICBoYW5kbGUgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBpbiBhIHN1YnNlcXVlbnQgLnRyYW4oKS4KLSMKLSMgLnRyYW4odGFyZ2V0LCBkYXRhPU5vbmUpCi0jICAgIFRyYW5zZmVyIGNvbnRyb2wgdG8gdGhlIGNyZWF0ZSdkIGNvcm91dGluZSAidGFyZ2V0Iiwgb3B0aW9uYWxseQotIyAgICBwYXNzaW5nIGl0IGFuIGFyYml0cmFyeSBwaWVjZSBvZiBkYXRhLiBUbyB0aGUgY29yb3V0aW5lIEEgdGhhdCBkb2VzCi0jICAgIHRoZSAudHJhbiwgLnRyYW4gYWN0cyBsaWtlIGFuIG9yZGluYXJ5IGZ1bmN0aW9uIGNhbGw6ICBhbm90aGVyCi0jICAgIGNvcm91dGluZSBCIGNhbiAudHJhbiBiYWNrIHRvIGl0IGxhdGVyLCBhbmQgaWYgaXQgZG9lcyBBJ3MgLnRyYW4KLSMgICAgcmV0dXJucyB0aGUgJ2RhdGEnIGFyZ3VtZW50IHBhc3NlZCB0byBCJ3MgdHJhbi4gIEUuZy4sCi0jCi0jICAgIGluIGNvcm91dGluZSBjb0EgICBpbiBjb3JvdXRpbmUgY29DICAgIGluIGNvcm91dGluZSBjb0IKLSMgICAgICB4ID0gY28udHJhbihjb0MpICAgY28udHJhbihjb0IpICAgICAgICBjby50cmFuKGNvQSwxMikKLSMgICAgICBwcmludCB4ICMgMTIKLSMKLSMgICAgVGhlIGRhdGEtcGFzc2luZyBmZWF0dXJlIGlzIHRha2VuIGZyb20gSWNvbiwgYW5kIGdyZWF0bHkgY3V0cwotIyAgICB0aGUgbmVlZCB0byB1c2UgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgaW50ZXItY29yb3V0aW5lIGNvbW11bmljYXRpb24uCi0jCi0jIC5iYWNrKCBkYXRhPU5vbmUgKQotIyAgICBUaGUgc2FtZSBhcyAudHJhbihpbnZva2VyLCBkYXRhPU5vbmUpLCB3aGVyZSAnaW52b2tlcicgaXMgdGhlCi0jICAgIGNvcm91dGluZSB0aGF0IG1vc3QgcmVjZW50bHkgLnRyYW4nZWQgY29udHJvbCB0byB0aGUgY29yb3V0aW5lCi0jICAgIGRvaW5nIHRoZSAuYmFjay4gIFRoaXMgaXMgYWtpbiB0byBJY29uJ3MgIiZzb3VyY2UiLgotIwotIyAuZGV0YWNoKCBkYXRhPU5vbmUgKQotIyAgICBUaGUgc2FtZSBhcyAudHJhbihtYWluLCBkYXRhPU5vbmUpLCB3aGVyZSAnbWFpbicgaXMgdGhlCi0jICAgICh1bm5hbWVhYmxlISkgY29yb3V0aW5lIHRoYXQgc3RhcnRlZCBpdCBhbGwuICAnbWFpbicgaGFzIGFsbCB0aGUKLSMgICAgcmlnaHRzIG9mIGFueSBvdGhlciBjb3JvdXRpbmU6ICB1cG9uIHJlY2VpdmluZyBjb250cm9sLCBpdCBjYW4KLSMgICAgLnRyYW4gdG8gYW4gYXJiaXRyYXJ5IGNvcm91dGluZSBvZiBpdHMgY2hvb3NpbmcsIGdvIC5iYWNrIHRvCi0jICAgIHRoZSAuZGV0YWNoJ2VyLCBvciAua2lsbCB0aGUgd2hvbGUgdGhpbmcuCi0jCi0jIC5raWxsKCkKLSMgICAgRGVzdHJveSBhbGwgdGhlIGNvcm91dGluZXMsIGFuZCByZXR1cm4gY29udHJvbCB0byB0aGUgbWFpbgotIyAgICBjb3JvdXRpbmUuICBOb25lIG9mIHRoZSBjcmVhdGUnZWQgY29yb3V0aW5lcyBjYW4gYmUgcmVzdW1lZCBhZnRlciBhCi0jICAgIC5raWxsKCkuICBBbiBFYXJseUV4aXQgZXhjZXB0aW9uIGRvZXMgYSAua2lsbCgpIGF1dG9tYXRpY2FsbHkuICBJdCdzCi0jICAgIGEgZ29vZCBpZGVhIHRvIC5raWxsKCkgY29yb3V0aW5lcyB5b3UncmUgZG9uZSB3aXRoLCBzaW5jZSB0aGUKLSMgICAgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBjb25zdW1lcyBhIHRocmVhZCBmb3IgZWFjaCBjb3JvdXRpbmUgdGhhdAotIyAgICBtYXkgYmUgcmVzdW1lZC4KLQotaW1wb3J0IF90aHJlYWQgYXMgdGhyZWFkCi1pbXBvcnQgc3luYwotCi1jbGFzcyBfQ29FdmVudDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYyk6Ci0gICAgICAgIHNlbGYuZiA9IGZ1bmMKLSAgICAgICAgc2VsZi5lID0gc3luYy5ldmVudCgpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZiBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICdtYWluIGNvcm91dGluZScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAnY29yb3V0aW5lIGZvciBmdW5jICcgKyBzZWxmLmYuX19uYW1lX18KLQotICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGlkKHNlbGYpCi0KLSAgICBkZWYgX19jbXBfXyh4LHkpOgotICAgICAgICByZXR1cm4gY21wKGlkKHgpLCBpZCh5KSkKLQotICAgIGRlZiByZXN1bWUoc2VsZik6Ci0gICAgICAgIHNlbGYuZS5wb3N0KCkKLQotICAgIGRlZiB3YWl0KHNlbGYpOgotICAgICAgICBzZWxmLmUud2FpdCgpCi0gICAgICAgIHNlbGYuZS5jbGVhcigpCi0KLWNsYXNzIEtpbGxlZChFeGNlcHRpb24pOiBwYXNzCi1jbGFzcyBFYXJseUV4aXQoRXhjZXB0aW9uKTogcGFzcwotCi1jbGFzcyBDb3JvdXRpbmU6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmFjdGl2ZSA9IHNlbGYubWFpbiA9IF9Db0V2ZW50KE5vbmUpCi0gICAgICAgIHNlbGYuaW52b2tlZGJ5ID0ge3NlbGYubWFpbjogTm9uZX0KLSAgICAgICAgc2VsZi5raWxsZWQgPSAwCi0gICAgICAgIHNlbGYudmFsdWUgID0gTm9uZQotICAgICAgICBzZWxmLnRlcm1pbmF0ZWRfYnkgPSBOb25lCi0KLSAgICBkZWYgY3JlYXRlKHNlbGYsIGZ1bmMsICphcmdzKToKLSAgICAgICAgbWUgPSBfQ29FdmVudChmdW5jKQotICAgICAgICBzZWxmLmludm9rZWRieVttZV0gPSBOb25lCi0gICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHNlbGYuX3N0YXJ0LCAobWUsKSArIGFyZ3MpCi0gICAgICAgIHJldHVybiBtZQotCi0gICAgZGVmIF9zdGFydChzZWxmLCBtZSwgKmFyZ3MpOgotICAgICAgICBtZS53YWl0KCkKLSAgICAgICAgaWYgbm90IHNlbGYua2lsbGVkOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgbWUuZigqYXJncykKLSAgICAgICAgICAgICAgICBleGNlcHQgS2lsbGVkOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtpbGxlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXJtaW5hdGVkX2J5ID0gbWUKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5raWxsKCkKLQotICAgIGRlZiBraWxsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmtpbGxlZDoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigna2lsbCgpIGNhbGxlZCBvbiBkZWFkIGNvcm91dGluZXMnKQotICAgICAgICBzZWxmLmtpbGxlZCA9IDEKLSAgICAgICAgZm9yIGNvcm91dGluZSBpbiBzZWxmLmludm9rZWRieS5rZXlzKCk6Ci0gICAgICAgICAgICBjb3JvdXRpbmUucmVzdW1lKCkKLQotICAgIGRlZiBiYWNrKHNlbGYsIGRhdGE9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRyYW4oIHNlbGYuaW52b2tlZGJ5W3NlbGYuYWN0aXZlXSwgZGF0YSApCi0KLSAgICBkZWYgZGV0YWNoKHNlbGYsIGRhdGE9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnRyYW4oIHNlbGYubWFpbiwgZGF0YSApCi0KLSAgICBkZWYgdHJhbihzZWxmLCB0YXJnZXQsIGRhdGE9Tm9uZSk6Ci0gICAgICAgIGlmIHRhcmdldCBub3QgaW4gc2VsZi5pbnZva2VkYnk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJy50cmFuIHRhcmdldCAlciBpcyBub3QgYW4gYWN0aXZlIGNvcm91dGluZScgJSAodGFyZ2V0LCkpCi0gICAgICAgIGlmIHNlbGYua2lsbGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCcudHJhbiB0YXJnZXQgJXIgaXMga2lsbGVkJyAlICh0YXJnZXQsKSkKLSAgICAgICAgc2VsZi52YWx1ZSA9IGRhdGEKLSAgICAgICAgbWUgPSBzZWxmLmFjdGl2ZQotICAgICAgICBzZWxmLmludm9rZWRieVt0YXJnZXRdID0gbWUKLSAgICAgICAgc2VsZi5hY3RpdmUgPSB0YXJnZXQKLSAgICAgICAgdGFyZ2V0LnJlc3VtZSgpCi0KLSAgICAgICAgbWUud2FpdCgpCi0gICAgICAgIGlmIHNlbGYua2lsbGVkOgotICAgICAgICAgICAgaWYgc2VsZi5tYWluIGlzIG5vdCBtZToKLSAgICAgICAgICAgICAgICByYWlzZSBLaWxsZWQKLSAgICAgICAgICAgIGlmIHNlbGYudGVybWluYXRlZF9ieSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICByYWlzZSBFYXJseUV4aXQoJyVyIHRlcm1pbmF0ZWQgZWFybHknICUgKHNlbGYudGVybWluYXRlZF9ieSwpKQotCi0gICAgICAgIHJldHVybiBzZWxmLnZhbHVlCi0KLSMgZW5kIG9mIG1vZHVsZQpkaWZmIC0tZ2l0IGEvRGVtby90aHJlYWRzL0dlbmVyYXRvci5weSBiL0RlbW8vdGhyZWFkcy9HZW5lcmF0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMjk2M2YuLjAwMDAwMDAKLS0tIGEvRGVtby90aHJlYWRzL0dlbmVyYXRvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLSMgR2VuZXJhdG9yIGltcGxlbWVudGF0aW9uIHVzaW5nIHRocmVhZHMKLQotaW1wb3J0IF90aHJlYWQgYXMgdGhyZWFkCi1pbXBvcnQgc3lzCi0KLWNsYXNzIEtpbGxlZChFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgR2VuZXJhdG9yOgotICAgICMgQ29uc3RydWN0b3IKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgYXJncyk6Ci0gICAgICAgIHNlbGYuZ2V0bG9jayA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKLSAgICAgICAgc2VsZi5wdXRsb2NrID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQotICAgICAgICBzZWxmLmdldGxvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYucHV0bG9jay5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5mdW5jID0gZnVuYwotICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCi0gICAgICAgIHNlbGYuZG9uZSA9IDAKLSAgICAgICAgc2VsZi5raWxsZWQgPSAwCi0gICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHNlbGYuX3N0YXJ0LCAoKSkKLQotICAgICMgSW50ZXJuYWwgcm91dGluZQotICAgIGRlZiBfc3RhcnQoc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYucHV0bG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtpbGxlZDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZnVuYyhzZWxmLCAqc2VsZi5hcmdzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBLaWxsZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmtpbGxlZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAxCi0gICAgICAgICAgICAgICAgc2VsZi5nZXRsb2NrLnJlbGVhc2UoKQotCi0gICAgIyBDYWxsZWQgYnkgcHJvZHVjZXIgZm9yIGVhY2ggdmFsdWU7IHJhaXNlIEtpbGxlZCBpZiBubyBtb3JlIG5lZWRlZAotICAgIGRlZiBwdXQoc2VsZiwgdmFsdWUpOgotICAgICAgICBpZiBzZWxmLmtpbGxlZDoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigncHV0KCkgY2FsbGVkIG9uIGtpbGxlZCBnZW5lcmF0b3InKQotICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKLSAgICAgICAgc2VsZi5nZXRsb2NrLnJlbGVhc2UoKSAgIyBSZXN1bWUgY29uc3VtZXIgdGhyZWFkCi0gICAgICAgIHNlbGYucHV0bG9jay5hY3F1aXJlKCkgICMgV2FpdCBmb3IgbmV4dCBnZXQoKSBjYWxsCi0gICAgICAgIGlmIHNlbGYua2lsbGVkOgotICAgICAgICAgICAgcmFpc2UgS2lsbGVkCi0KLSAgICAjIENhbGxlZCBieSBwcm9kdWNlciB0byBnZXQgbmV4dCB2YWx1ZTsgcmFpc2UgRU9GRXJyb3IgaWYgbm8gbW9yZQotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYua2lsbGVkOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdnZXQoKSBjYWxsZWQgb24ga2lsbGVkIGdlbmVyYXRvcicpCi0gICAgICAgIHNlbGYucHV0bG9jay5yZWxlYXNlKCkgICMgUmVzdW1lIHByb2R1Y2VyIHRocmVhZAotICAgICAgICBzZWxmLmdldGxvY2suYWNxdWlyZSgpICAjIFdhaXQgZm9yIHZhbHVlIHRvIGFwcGVhcgotICAgICAgICBpZiBzZWxmLmRvbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvciAgIyBTYXkgdGhlcmUgYXJlIG5vIG1vcmUgdmFsdWVzCi0gICAgICAgIHJldHVybiBzZWxmLnZhbHVlCi0KLSAgICAjIENhbGxlZCBieSBjb25zdW1lciBpZiBubyBtb3JlIHZhbHVlcyB3YW50ZWQKLSAgICBkZWYga2lsbChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5raWxsZWQ6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2tpbGwoKSBjYWxsZWQgb24ga2lsbGVkIGdlbmVyYXRvcicpCi0gICAgICAgIHNlbGYua2lsbGVkID0gMQotICAgICAgICBzZWxmLnB1dGxvY2sucmVsZWFzZSgpCi0KLSAgICAjIENsb25lIGNvbnN0cnVjdG9yCi0gICAgZGVmIGNsb25lKHNlbGYpOgotICAgICAgICByZXR1cm4gR2VuZXJhdG9yKHNlbGYuZnVuYywgc2VsZi5hcmdzKQotCi1kZWYgcGkoZyk6Ci0gICAgaywgYSwgYiwgYTEsIGIxID0gMiwgNCwgMSwgMTIsIDQKLSAgICB3aGlsZSAxOgotICAgICAgICAjIE5leHQgYXBwcm94aW1hdGlvbgotICAgICAgICBwLCBxLCBrID0gayprLCAyKmsrMSwgaysxCi0gICAgICAgIGEsIGIsIGExLCBiMSA9IGExLCBiMSwgcCphK3EqYTEsIHAqYitxKmIxCi0gICAgICAgICMgUHJpbnQgY29tbW9uIGRpZ2l0cwotICAgICAgICBkLCBkMSA9IGEvL2IsIGExLy9iMQotICAgICAgICB3aGlsZSBkID09IGQxOgotICAgICAgICAgICAgZy5wdXQoaW50KGQpKQotICAgICAgICAgICAgYSwgYTEgPSAxMCooYSViKSwgMTAqKGExJWIxKQotICAgICAgICAgICAgZCwgZDEgPSBhLy9iLCBhMS8vYjEKLQotZGVmIHRlc3QoKToKLSAgICBnID0gR2VuZXJhdG9yKHBpLCAoKSkKLSAgICBnLmtpbGwoKQotICAgIGcgPSBHZW5lcmF0b3IocGksICgpKQotICAgIGZvciBpIGluIHJhbmdlKDEwKTogcHJpbnQoZy5nZXQoKSwgZW5kPScgJykKLSAgICBwcmludCgpCi0gICAgaCA9IGcuY2xvbmUoKQotICAgIGcua2lsbCgpCi0gICAgd2hpbGUgMToKLSAgICAgICAgcHJpbnQoaC5nZXQoKSwgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0KLXRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby90aHJlYWRzL1JFQURNRSBiL0RlbW8vdGhyZWFkcy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzk1MjEuLjAwMDAwMDAKLS0tIGEvRGVtby90aHJlYWRzL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHNvbWUgZGVtb25zdHJhdGlvbnMgb2YgdGhlIHRocmVhZCBtb2R1bGUuCi0KLVRoZXNlIGFyZSBtb3N0bHkgInByb29mIG9mIGNvbmNlcHQiIHR5cGUgYXBwbGljYXRpb25zOgotCi1HZW5lcmF0b3IucHkJR2VuZXJhdG9yIGNsYXNzIGltcGxlbWVudGVkIHdpdGggdGhyZWFkcy4KLXN5bmMucHkJCUNvbmRpdGlvbiB2YXJpYWJsZXMgcHJpbWl0aXZlcyBieSBUaW0gUGV0ZXJzLgotdGVsbmV0LnB5CVZlcnNpb24gb2YgLi4vc29ja2V0cy90ZWxuZXQucHkgdXNpbmcgdGhyZWFkcy4KLQotQ29yb3V0aW5lLnB5CUNvcm91dGluZXMgdXNpbmcgdGhyZWFkcywgYnkgVGltIFBldGVycyAoMjIgTWF5IDk0KQotZmNtcC5weQkJRXhhbXBsZSBvZiBhYm92ZSwgYnkgVGltCi1zcXVhc2hlci5weQlBbm90aGVyIGV4YW1wbGUgb2YgYWJvdmUsIGFsc28gYnkgVGltCmRpZmYgLS1naXQgYS9EZW1vL3RocmVhZHMvZmNtcC5weSBiL0RlbW8vdGhyZWFkcy9mY21wLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzJlM2VkLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGhyZWFkcy9mY21wLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotIyBDb3JvdXRpbmUgZXhhbXBsZTogIGNvbnRyb2xsaW5nIG11bHRpcGxlIGluc3RhbmNlcyBvZiBhIHNpbmdsZSBmdW5jdGlvbgotCi1mcm9tIENvcm91dGluZSBpbXBvcnQgKgotCi0jIGZyaW5nZSB2aXNpdHMgYSBuZXN0ZWQgbGlzdCBpbiBpbm9yZGVyLCBhbmQgZGV0YWNoZXMgZm9yIGVhY2ggbm9uLWxpc3QKLSMgZWxlbWVudDsgcmFpc2VzIEVhcmx5RXhpdCBhZnRlciB0aGUgbGlzdCBpcyBleGhhdXN0ZWQKLWRlZiBmcmluZ2UoY28sIGxpc3QpOgotICAgIGZvciB4IGluIGxpc3Q6Ci0gICAgICAgIGlmIHR5cGUoeCkgaXMgdHlwZShbXSk6Ci0gICAgICAgICAgICBmcmluZ2UoY28sIHgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjby5iYWNrKHgpCi0KLWRlZiBwcmludGlub3JkZXIobGlzdCk6Ci0gICAgY28gPSBDb3JvdXRpbmUoKQotICAgIGYgPSBjby5jcmVhdGUoZnJpbmdlLCBjbywgbGlzdCkKLSAgICB0cnk6Ci0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBwcmludChjby50cmFuKGYpLCBlbmQ9JyAnKQotICAgIGV4Y2VwdCBFYXJseUV4aXQ6Ci0gICAgICAgIHBhc3MKLSAgICBwcmludCgpCi0KLXByaW50aW5vcmRlcihbMSwyLDNdKSAgIyAxIDIgMwotcHJpbnRpbm9yZGVyKFtbW1sxLFsyXV1dLDNdXSkgIyBkaXR0bwoteCA9IFswLCAxLCBbMiwgWzNdXSwgWzQsNV0sIFtbWzZdXV0gXQotcHJpbnRpbm9yZGVyKHgpICMgMCAxIDIgMyA0IDUgNgotCi0jIGZjbXAgbGV4aWNvZ3JhcGhpY2FsbHkgY29tcGFyZXMgdGhlIGZyaW5nZXMgb2YgdHdvIG5lc3RlZCBsaXN0cwotZGVmIGZjbXAobDEsIGwyKToKLSAgICBjbzEgPSBDb3JvdXRpbmUoKTsgZjEgPSBjbzEuY3JlYXRlKGZyaW5nZSwgY28xLCBsMSkKLSAgICBjbzIgPSBDb3JvdXRpbmUoKTsgZjIgPSBjbzIuY3JlYXRlKGZyaW5nZSwgY28yLCBsMikKLSAgICB3aGlsZSAxOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2MSA9IGNvMS50cmFuKGYxKQotICAgICAgICBleGNlcHQgRWFybHlFeGl0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHYyID0gY28yLnRyYW4oZjIpCi0gICAgICAgICAgICBleGNlcHQgRWFybHlFeGl0OgotICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICBjbzIua2lsbCgpCi0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdjIgPSBjbzIudHJhbihmMikKLSAgICAgICAgZXhjZXB0IEVhcmx5RXhpdDoKLSAgICAgICAgICAgIGNvMS5raWxsKCkKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIGlmIHYxICE9IHYyOgotICAgICAgICAgICAgY28xLmtpbGwoKTsgY28yLmtpbGwoKQotICAgICAgICAgICAgcmV0dXJuIGNtcCh2MSx2MikKLQotcHJpbnQoZmNtcChyYW5nZSg3KSwgeCkpICAjICAwOyBmcmluZ2VzIGFyZSBlcXVhbAotcHJpbnQoZmNtcChyYW5nZSg2KSwgeCkpICAjIC0xOyAxc3QgbGlzdCBlbmRzIGVhcmx5Ci1wcmludChmY21wKHgsIHJhbmdlKDYpKSkgICMgIDE7IDJuZCBsaXN0IGVuZHMgZWFybHkKLXByaW50KGZjbXAocmFuZ2UoOCksIHgpKSAgIyAgMTsgMm5kIGxpc3QgZW5kcyBlYXJseQotcHJpbnQoZmNtcCh4LCByYW5nZSg4KSkpICAjIC0xOyAxc3QgbGlzdCBlbmRzIGVhcmx5Ci1wcmludChmY21wKFsxLFtbMl0sOF1dLAotICAgICAgICAgICBbW1sxXSwyXSw4XSkpICAjICAwCi1wcmludChmY21wKFsxLFtbM10sOF1dLAotICAgICAgICAgICBbW1sxXSwyXSw4XSkpICAjICAxCi1wcmludChmY21wKFsxLFtbMl0sOF1dLAotICAgICAgICAgICBbW1sxXSwyXSw5XSkpICAjIC0xCi0KLSMgZW5kIG9mIGV4YW1wbGUKZGlmZiAtLWdpdCBhL0RlbW8vdGhyZWFkcy9maW5kLnB5IGIvRGVtby90aHJlYWRzL2ZpbmQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNGVmN2QuLjAwMDAwMDAKLS0tIGEvRGVtby90aHJlYWRzL2ZpbmQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotIyBBIHBhcmFsbGVsaXplZCAiZmluZCgxKSIgdXNpbmcgdGhlIHRocmVhZCBtb2R1bGUuCi0KLSMgVGhpcyBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiBhIHdvcmsgcXVldWUgYW5kIHdvcmtlciB0aHJlYWRzLgotIyBJdCByZWFsbHkgZG9lcyBkbyBtb3JlIHN0YXRzL3NlYyB3aGVuIHVzaW5nIG11bHRpcGxlIHRocmVhZHMsCi0jIGFsdGhvdWdoIHRoZSBpbXByb3ZlbWVudCBpcyBvbmx5IGFib3V0IDIwLTMwIHBlcmNlbnQuCi0jIChUaGF0IHdhcyA4IHllYXJzIGFnby4gIEluIDIwMDIsIG9uIExpbnV4LCBJIGNhbid0IG1lYXN1cmUKLSMgYSBzcGVlZHVwLiA6LSggKQotCi0jIEknbSB0b28gbGF6eSB0byB3cml0ZSBhIGNvbW1hbmQgbGluZSBwYXJzZXIgZm9yIHRoZSBmdWxsIGZpbmQoMSkKLSMgY29tbWFuZCBsaW5lIHN5bnRheCwgc28gdGhlIHByZWRpY2F0ZSBpdCBzZWFyY2hlcyBmb3IgaXMgd2lyZWQtaW4sCi0jIHNlZSBmdW5jdGlvbiBzZWxlY3RvcigpIGJlbG93LiAgKEl0IGN1cnJlbnRseSBzZWFyY2hlcyBmb3IgZmlsZXMgd2l0aAotIyB3b3JsZCB3cml0ZSBwZXJtaXNzaW9uLikKLQotIyBVc2FnZTogcGFyZmluZC5weSBbLXcgbndvcmtlcnNdIFtkaXJlY3RvcnldIC4uLgotIyBEZWZhdWx0IG53b3JrZXJzIGlzIDQKLQotCi1pbXBvcnQgc3lzCi1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgdGltZQotaW1wb3J0IG9zCi1mcm9tIHN0YXQgaW1wb3J0ICoKLWltcG9ydCBfdGhyZWFkIGFzIHRocmVhZAotCi0KLSMgV29yayBxdWV1ZSBjbGFzcy4gIFVzYWdlOgotIyAgIHdxID0gV29ya1EoKQotIyAgIHdxLmFkZHdvcmsoZnVuYywgKGFyZzEsIGFyZzIsIC4uLikpICMgb25lIG9yIG1vcmUgY2FsbHMKLSMgICB3cS5ydW4obndvcmtlcnMpCi0jIFRoZSB3b3JrIGlzIGRvbmUgd2hlbiB3cS5ydW4oKSBjb21wbGV0ZXMuCi0jIFRoZSBmdW5jdGlvbiBjYWxscyBleGVjdXRlZCBieSB0aGUgd29ya2VycyBtYXkgYWRkIG1vcmUgd29yay4KLSMgRG9uJ3QgdXNlIGtleWJvYXJkIGludGVycnVwdHMhCi0KLWNsYXNzIFdvcmtROgotCi0gICAgIyBJbnZhcmlhbnRzOgotCi0gICAgIyAtIGJ1c3kgYW5kIHdvcmsgYXJlIG9ubHkgbW9kaWZpZWQgd2hlbiBtdXRleCBpcyBsb2NrZWQKLSAgICAjIC0gbGVuKHdvcmspIGlzIHRoZSBudW1iZXIgb2Ygam9icyByZWFkeSB0byBiZSB0YWtlbgotICAgICMgLSBidXN5IGlzIHRoZSBudW1iZXIgb2Ygam9icyBiZWluZyBkb25lCi0gICAgIyAtIHRvZG8gaXMgbG9ja2VkIGlmZiB0aGVyZSBpcyBubyB3b3JrIGFuZCBzb21lYm9keSBpcyBidXN5Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYubXV0ZXggPSB0aHJlYWQuYWxsb2NhdGUoKQotICAgICAgICBzZWxmLnRvZG8gPSB0aHJlYWQuYWxsb2NhdGUoKQotICAgICAgICBzZWxmLnRvZG8uYWNxdWlyZSgpCi0gICAgICAgIHNlbGYud29yayA9IFtdCi0gICAgICAgIHNlbGYuYnVzeSA9IDAKLQotICAgIGRlZiBhZGR3b3JrKHNlbGYsIGZ1bmMsIGFyZ3MpOgotICAgICAgICBqb2IgPSAoZnVuYywgYXJncykKLSAgICAgICAgc2VsZi5tdXRleC5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi53b3JrLmFwcGVuZChqb2IpCi0gICAgICAgIHNlbGYubXV0ZXgucmVsZWFzZSgpCi0gICAgICAgIGlmIGxlbihzZWxmLndvcmspID09IDE6Ci0gICAgICAgICAgICBzZWxmLnRvZG8ucmVsZWFzZSgpCi0KLSAgICBkZWYgX2dldHdvcmsoc2VsZik6Ci0gICAgICAgIHNlbGYudG9kby5hY3F1aXJlKCkKLSAgICAgICAgc2VsZi5tdXRleC5hY3F1aXJlKCkKLSAgICAgICAgaWYgc2VsZi5idXN5ID09IDAgYW5kIGxlbihzZWxmLndvcmspID09IDA6Ci0gICAgICAgICAgICBzZWxmLm11dGV4LnJlbGVhc2UoKQotICAgICAgICAgICAgc2VsZi50b2RvLnJlbGVhc2UoKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgam9iID0gc2VsZi53b3JrWzBdCi0gICAgICAgIGRlbCBzZWxmLndvcmtbMF0KLSAgICAgICAgc2VsZi5idXN5ID0gc2VsZi5idXN5ICsgMQotICAgICAgICBzZWxmLm11dGV4LnJlbGVhc2UoKQotICAgICAgICBpZiBsZW4oc2VsZi53b3JrKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLnRvZG8ucmVsZWFzZSgpCi0gICAgICAgIHJldHVybiBqb2IKLQotICAgIGRlZiBfZG9uZXdvcmsoc2VsZik6Ci0gICAgICAgIHNlbGYubXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuYnVzeSA9IHNlbGYuYnVzeSAtIDEKLSAgICAgICAgaWYgc2VsZi5idXN5ID09IDAgYW5kIGxlbihzZWxmLndvcmspID09IDA6Ci0gICAgICAgICAgICBzZWxmLnRvZG8ucmVsZWFzZSgpCi0gICAgICAgIHNlbGYubXV0ZXgucmVsZWFzZSgpCi0KLSAgICBkZWYgX3dvcmtlcihzZWxmKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjAwMDAxKSAgICAgIyBMZXQgb3RoZXIgdGhyZWFkcyBydW4KLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGpvYiA9IHNlbGYuX2dldHdvcmsoKQotICAgICAgICAgICAgaWYgbm90IGpvYjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZnVuYywgYXJncyA9IGpvYgotICAgICAgICAgICAgZnVuYygqYXJncykKLSAgICAgICAgICAgIHNlbGYuX2RvbmV3b3JrKCkKLQotICAgIGRlZiBydW4oc2VsZiwgbndvcmtlcnMpOgotICAgICAgICBpZiBub3Qgc2VsZi53b3JrOgotICAgICAgICAgICAgcmV0dXJuICMgTm90aGluZyB0byBkbwotICAgICAgICBmb3IgaSBpbiByYW5nZShud29ya2Vycy0xKToKLSAgICAgICAgICAgIHRocmVhZC5zdGFydF9uZXcoc2VsZi5fd29ya2VyLCAoKSkKLSAgICAgICAgc2VsZi5fd29ya2VyKCkKLSAgICAgICAgc2VsZi50b2RvLmFjcXVpcmUoKQotCi0KLSMgTWFpbiBwcm9ncmFtCi0KLWRlZiBtYWluKCk6Ci0gICAgbndvcmtlcnMgPSA0Ci0gICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnLXc6JykKLSAgICBmb3Igb3B0LCBhcmcgaW4gb3B0czoKLSAgICAgICAgaWYgb3B0ID09ICctdyc6Ci0gICAgICAgICAgICBud29ya2VycyA9IGludChhcmcpCi0gICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgIGFyZ3MgPSBbb3MuY3VyZGlyXQotCi0gICAgd3EgPSBXb3JrUSgpCi0gICAgZm9yIGRpciBpbiBhcmdzOgotICAgICAgICB3cS5hZGR3b3JrKGZpbmQsIChkaXIsIHNlbGVjdG9yLCB3cSkpCi0KLSAgICB0MSA9IHRpbWUudGltZSgpCi0gICAgd3EucnVuKG53b3JrZXJzKQotICAgIHQyID0gdGltZS50aW1lKCkKLQotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1RvdGFsIHRpbWUgJXIgc2VjLlxuJyAlICh0Mi10MSkpCi0KLQotIyBUaGUgcHJlZGljYXRlIC0tIGRlZmluZXMgd2hhdCBmaWxlcyB3ZSBsb29rIGZvci4KLSMgRmVlbCBmcmVlIHRvIGNoYW5nZSB0aGlzIHRvIHN1aXQgeW91ciBwdXJwb3NlCi0KLWRlZiBzZWxlY3RvcihkaXIsIG5hbWUsIGZ1bGxuYW1lLCBzdGF0KToKLSAgICAjIExvb2sgZm9yIHdvcmxkIHdyaXRhYmxlIGZpbGVzIHRoYXQgYXJlIG5vdCBzeW1saW5rcwotICAgIHJldHVybiAoc3RhdFtTVF9NT0RFXSAmIDBvMDAyKSAhPSAwIGFuZCBub3QgU19JU0xOSyhzdGF0W1NUX01PREVdKQotCi0KLSMgVGhlIGZpbmQgcHJvY2VkdXJlIC0tIGNhbGxzIHdxLmFkZHdvcmsoKSBmb3Igc3ViZGlyZWN0b3JpZXMKLQotZGVmIGZpbmQoZGlyLCBwcmVkLCB3cSk6Ci0gICAgdHJ5OgotICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KHJlcHIoZGlyKSwgJzonLCBtc2cpCi0gICAgICAgIHJldHVybgotICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICBpZiBuYW1lIG5vdCBpbiAob3MuY3VyZGlyLCBvcy5wYXJkaXIpOgotICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN0YXQgPSBvcy5sc3RhdChmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQocmVwcihmdWxsbmFtZSksICc6JywgbXNnKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBwcmVkKGRpciwgbmFtZSwgZnVsbG5hbWUsIHN0YXQpOgotICAgICAgICAgICAgICAgIHByaW50KGZ1bGxuYW1lKQotICAgICAgICAgICAgaWYgU19JU0RJUihzdGF0W1NUX01PREVdKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc21vdW50KGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgd3EuYWRkd29yayhmaW5kLCAoZnVsbG5hbWUsIHByZWQsIHdxKSkKLQotCi0jIENhbGwgdGhlIG1haW4gcHJvZ3JhbQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGhyZWFkcy9zcXVhc2hlci5weSBiL0RlbW8vdGhyZWFkcy9zcXVhc2hlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViMWIxZC4uMDAwMDAwMAotLS0gYS9EZW1vL3RocmVhZHMvc3F1YXNoZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotIyBDb3JvdXRpbmUgZXhhbXBsZTogIGdlbmVyYWwgY29yb3V0aW5lIHRyYW5zZmVycwotIwotIyBUaGUgcHJvZ3JhbSBpcyBhIHZhcmlhdGlvbiBvZiBhIFNpbXVsYSA2NyBwcm9ncmFtIGR1ZSB0byBEYWhsICYgSG9hcmUsCi0jIChEYWhsL0RpamtzdHJhL0hvYXJlLCBTdHJ1Y3R1cmVkIFByb2dyYW1taW5nOyBBY2FkZW1pYyBQcmVzcywgMTk3MikKLSMgd2hvIGluIHR1cm4gY3JlZGl0IHRoZSBvcmlnaW5hbCBleGFtcGxlIHRvIENvbndheS4KLSMKLSMgV2UgaGF2ZSBhIG51bWJlciBvZiBpbnB1dCBsaW5lcywgdGVybWluYXRlZCBieSBhIDAgYnl0ZS4gIFRoZSBwcm9ibGVtCi0jIGlzIHRvIHNxdWFzaCB0aGVtIHRvZ2V0aGVyIGludG8gb3V0cHV0IGxpbmVzIGNvbnRhaW5pbmcgNzIgY2hhcmFjdGVycwotIyBlYWNoLiAgQSBzZW1pY29sb24gbXVzdCBiZSBhZGRlZCBiZXR3ZWVuIGlucHV0IGxpbmVzLiAgUnVucyBvZiBibGFua3MKLSMgYW5kIHRhYnMgaW4gaW5wdXQgbGluZXMgbXVzdCBiZSBzcXVhc2hlZCBpbnRvIHNpbmdsZSBibGFua3MuCi0jIE9jY3VycmVuY2VzIG9mICIqKiIgaW4gaW5wdXQgbGluZXMgbXVzdCBiZSByZXBsYWNlZCBieSAiXiIuCi0jCi0jIEhlcmUncyBhIHRlc3QgY2FzZToKLQotdGVzdCA9ICIiIlwKLSAgIGQgICAgPSAgIHNxcnQoYioqMiAgLSAgNCphKmMpCi10d29hICAgID0gICAyKmEKLSAgIEwgICAgPSAgIC1iL3R3b2EKLSAgIFIgICAgPSAgIGQvdHdvYQotICBBMSAgICA9ICAgTCArIFIKLSAgQTIgICAgPSAgIEwgLSBSXDAKLSIiIgotCi0jIFRoZSBwcm9ncmFtIHNob3VsZCBwcmludDoKLQotIyBkID0gc3FydChiXjIgLSA0KmEqYyk7dHdvYSA9IDIqYTsgTCA9IC1iL3R3b2E7IFIgPSBkL3R3b2E7IEExID0gTCArIFI7Ci0jQTIgPSBMIC0gUgotI2RvbmUKLQotIyBnZXRsaW5lOiBkZWxpdmVycyB0aGUgbmV4dCBpbnB1dCBsaW5lIHRvIGl0cyBpbnZva2VyCi0jIGRpc2Fzc2VtYmxlcjogZ3JhYnMgaW5wdXQgbGluZXMgZnJvbSBnZXRsaW5lLCBhbmQgZGVsaXZlcnMgdGhlbSBvbmUKLSMgICAgY2hhcmFjdGVyIGF0IGEgdGltZSB0byBzcXVhc2hlciwgYWxzbyBpbnNlcnRpbmcgYSBzZW1pY29sb24gaW50bwotIyAgICB0aGUgc3RyZWFtIGJldHdlZW4gbGluZXMKLSMgc3F1YXNoZXI6ICBncmFicyBjaGFyYWN0ZXJzIGZyb20gZGlzYXNzZW1ibGVyIGFuZCBwYXNzZXMgdGhlbSBvbiB0bwotIyAgICBhc3NlbWJsZXIsIGZpcnN0IHJlcGxhY2luZyAiKioiIHdpdGggIl4iIGFuZCBzcXVhc2hpbmcgcnVucyBvZgotIyAgICB3aGl0ZXNwYWNlCi0jIGFzc2VtYmxlcjogZ3JhYnMgY2hhcmFjdGVycyBmcm9tIHNxdWFzaGVyIGFuZCBwYWNrcyB0aGVtIGludG8gbGluZXMKLSMgICAgd2l0aCA3MiBjaGFyYWN0ZXIgZWFjaCwgZGVsaXZlcmluZyBlYWNoIHN1Y2ggbGluZSB0byBwdXRsaW5lOwotIyAgICB3aGVuIGl0IHNlZXMgYSBudWxsIGJ5dGUsIHBhc3NlcyB0aGUgbGFzdCBsaW5lIHRvIHB1dGxpbmUgYW5kCi0jICAgIHRoZW4ga2lsbHMgYWxsIHRoZSBjb3JvdXRpbmVzCi0jIHB1dGxpbmU6IGdyYWJzIGxpbmVzIGZyb20gYXNzZW1ibGVyLCBhbmQganVzdCBwcmludHMgdGhlbQotCi1mcm9tIENvcm91dGluZSBpbXBvcnQgKgotCi1kZWYgZ2V0bGluZSh0ZXh0KToKLSAgICBmb3IgbGluZSBpbiBzdHJpbmcuc3BsaXRmaWVsZHModGV4dCwgJ1xuJyk6Ci0gICAgICAgIGNvLnRyYW4oY29kaXNhc3NlbWJsZXIsIGxpbmUpCi0KLWRlZiBkaXNhc3NlbWJsZXIoKToKLSAgICB3aGlsZSAxOgotICAgICAgICBjYXJkID0gY28udHJhbihjb2dldGxpbmUpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihjYXJkKSk6Ci0gICAgICAgICAgICBjby50cmFuKGNvc3F1YXNoZXIsIGNhcmRbaV0pCi0gICAgICAgIGNvLnRyYW4oY29zcXVhc2hlciwgJzsnKQotCi1kZWYgc3F1YXNoZXIoKToKLSAgICB3aGlsZSAxOgotICAgICAgICBjaCA9IGNvLnRyYW4oY29kaXNhc3NlbWJsZXIpCi0gICAgICAgIGlmIGNoID09ICcqJzoKLSAgICAgICAgICAgIGNoMiA9IGNvLnRyYW4oY29kaXNhc3NlbWJsZXIpCi0gICAgICAgICAgICBpZiBjaDIgPT0gJyonOgotICAgICAgICAgICAgICAgIGNoID0gJ14nCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvLnRyYW4oY29hc3NlbWJsZXIsIGNoKQotICAgICAgICAgICAgICAgIGNoID0gY2gyCi0gICAgICAgIGlmIGNoIGluICcgXHQnOgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBjaDIgPSBjby50cmFuKGNvZGlzYXNzZW1ibGVyKQotICAgICAgICAgICAgICAgIGlmIGNoMiBub3QgaW4gJyBcdCc6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBjby50cmFuKGNvYXNzZW1ibGVyLCAnICcpCi0gICAgICAgICAgICBjaCA9IGNoMgotICAgICAgICBjby50cmFuKGNvYXNzZW1ibGVyLCBjaCkKLQotZGVmIGFzc2VtYmxlcigpOgotICAgIGxpbmUgPSAnJwotICAgIHdoaWxlIDE6Ci0gICAgICAgIGNoID0gY28udHJhbihjb3NxdWFzaGVyKQotICAgICAgICBpZiBjaCA9PSAnXDAnOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbGVuKGxpbmUpID09IDcyOgotICAgICAgICAgICAgY28udHJhbihjb3B1dGxpbmUsIGxpbmUpCi0gICAgICAgICAgICBsaW5lID0gJycKLSAgICAgICAgbGluZSA9IGxpbmUgKyBjaAotICAgIGxpbmUgPSBsaW5lICsgJyAnICogKDcyIC0gbGVuKGxpbmUpKQotICAgIGNvLnRyYW4oY29wdXRsaW5lLCBsaW5lKQotICAgIGNvLmtpbGwoKQotCi1kZWYgcHV0bGluZSgpOgotICAgIHdoaWxlIDE6Ci0gICAgICAgIGxpbmUgPSBjby50cmFuKGNvYXNzZW1ibGVyKQotICAgICAgICBwcmludChsaW5lKQotCi1pbXBvcnQgc3RyaW5nCi1jbyA9IENvcm91dGluZSgpCi1jb2dldGxpbmUgPSBjby5jcmVhdGUoZ2V0bGluZSwgdGVzdCkKLWNvcHV0bGluZSA9IGNvLmNyZWF0ZShwdXRsaW5lKQotY29hc3NlbWJsZXIgPSBjby5jcmVhdGUoYXNzZW1ibGVyKQotY29kaXNhc3NlbWJsZXIgPSBjby5jcmVhdGUoZGlzYXNzZW1ibGVyKQotY29zcXVhc2hlciA9IGNvLmNyZWF0ZShzcXVhc2hlcikKLQotY28udHJhbihjb3B1dGxpbmUpCi1wcmludCgnZG9uZScpCi0KLSMgZW5kIG9mIGV4YW1wbGUKZGlmZiAtLWdpdCBhL0RlbW8vdGhyZWFkcy9zeW5jLnB5IGIvRGVtby90aHJlYWRzL3N5bmMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwZmZmMmUuLjAwMDAwMDAKLS0tIGEvRGVtby90aHJlYWRzL3N5bmMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1OTkgKzAsMCBAQAotIyBEZWZpbmVzIGNsYXNzZXMgdGhhdCBwcm92aWRlIHN5bmNocm9uaXphdGlvbiBvYmplY3RzLiAgTm90ZSB0aGF0IHVzZSBvZgotIyB0aGlzIG1vZHVsZSByZXF1aXJlcyB0aGF0IHlvdXIgUHl0aG9uIHN1cHBvcnQgdGhyZWFkcy4KLSMKLSMgICAgY29uZGl0aW9uKGxvY2s9Tm9uZSkgICAgICAgIyBhIFBPU0lYLWxpa2UgY29uZGl0aW9uLXZhcmlhYmxlIG9iamVjdAotIyAgICBiYXJyaWVyKG4pICAgICAgICAgICAgICAgICAjIGFuIG4tdGhyZWFkIGJhcnJpZXIKLSMgICAgZXZlbnQoKSAgICAgICAgICAgICAgICAgICAgIyBhbiBldmVudCBvYmplY3QKLSMgICAgc2VtYXBob3JlKG49MSkgICAgICAgICAgICAgIyBhIHNlbWFwaG9yZSBvYmplY3QsIHdpdGggaW5pdGlhbCBjb3VudCBuCi0jICAgIG1yc3coKSAgICAgICAgICAgICAgICAgICAgICMgYSBtdWx0aXBsZS1yZWFkZXIgc2luZ2xlLXdyaXRlciBsb2NrCi0jCi0jIENPTkRJVElPTlMKLSMKLSMgQSBjb25kaXRpb24gb2JqZWN0IGlzIGNyZWF0ZWQgdmlhCi0jICAgaW1wb3J0IHRoaXNfbW9kdWxlCi0jICAgeW91cl9jb25kaXRpb25fb2JqZWN0ID0gdGhpc19tb2R1bGUuY29uZGl0aW9uKGxvY2s9Tm9uZSkKLSMKLSMgQXMgZXhwbGFpbmVkIGJlbG93LCBhIGNvbmRpdGlvbiBvYmplY3QgaGFzIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQsCi0jIHVzZWQgaW4gdGhlIHByb3RvY29sIHRvIHByb3RlY3QgY29uZGl0aW9uIGRhdGEuICBZb3UgY2FuIHNwZWNpZnkgYQotIyBsb2NrIHRvIHVzZSBpbiB0aGUgY29uc3RydWN0b3IsIGVsc2UgdGhlIGNvbnN0cnVjdG9yIHdpbGwgYWxsb2NhdGUKLSMgYW4gYW5vbnltb3VzIGxvY2sgZm9yIHlvdS4gIFNwZWNpZnlpbmcgYSBsb2NrIGV4cGxpY2l0bHkgY2FuIGJlIHVzZWZ1bAotIyB3aGVuIG1vcmUgdGhhbiBvbmUgY29uZGl0aW9uIGtleXMgb2ZmIHRoZSBzYW1lIHNldCBvZiBzaGFyZWQgZGF0YS4KLSMKLSMgTWV0aG9kczoKLSMgICAuYWNxdWlyZSgpCi0jICAgICAgYWNxdWlyZSB0aGUgbG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmRpdGlvbgotIyAgIC5yZWxlYXNlKCkKLSMgICAgICByZWxlYXNlIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZGl0aW9uCi0jICAgLndhaXQoKQotIyAgICAgIGJsb2NrIHRoZSB0aHJlYWQgdW50aWwgc3VjaCB0aW1lIGFzIHNvbWUgb3RoZXIgdGhyZWFkIGRvZXMgYQotIyAgICAgIC5zaWduYWwgb3IgLmJyb2FkY2FzdCBvbiB0aGUgc2FtZSBjb25kaXRpb24sIGFuZCByZWxlYXNlIHRoZQotIyAgICAgIGxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25kaXRpb24uICBUaGUgbG9jayBhc3NvY2lhdGVkIHdpdGgKLSMgICAgICB0aGUgY29uZGl0aW9uIE1VU1QgYmUgaW4gdGhlIGFjcXVpcmVkIHN0YXRlIGF0IHRoZSB0aW1lCi0jICAgICAgLndhaXQgaXMgaW52b2tlZC4KLSMgICAuc2lnbmFsKCkKLSMgICAgICB3YWtlIHVwIGV4YWN0bHkgb25lIHRocmVhZCAoaWYgYW55KSB0aGF0IHByZXZpb3VzbHkgZGlkIGEgLndhaXQKLSMgICAgICBvbiB0aGUgY29uZGl0aW9uOyB0aGF0IHRocmVhZCB3aWxsIGF3YWtlbiB3aXRoIHRoZSBsb2NrIGFzc29jaWF0ZWQKLSMgICAgICB3aXRoIHRoZSBjb25kaXRpb24gaW4gdGhlIGFjcXVpcmVkIHN0YXRlLiAgSWYgbm8gdGhyZWFkcyBhcmUKLSMgICAgICAud2FpdCdpbmcsIHRoaXMgaXMgYSBub3AuICBJZiBtb3JlIHRoYW4gb25lIHRocmVhZCBpcyAud2FpdCdpbmcgb24KLSMgICAgICB0aGUgY29uZGl0aW9uLCBhbnkgb2YgdGhlbSBtYXkgYmUgYXdha2VuZWQuCi0jICAgLmJyb2FkY2FzdCgpCi0jICAgICAgd2FrZSB1cCBhbGwgdGhyZWFkcyAoaWYgYW55KSB0aGF0IGFyZSAud2FpdCdpbmcgb24gdGhlIGNvbmRpdGlvbjsKLSMgICAgICB0aGUgdGhyZWFkcyBhcmUgd29rZW4gdXAgc2VyaWFsbHksIGVhY2ggd2l0aCB0aGUgbG9jayBpbiB0aGUKLSMgICAgICBhY3F1aXJlZCBzdGF0ZSwgc28gc2hvdWxkIC5yZWxlYXNlKCkgYXMgc29vbiBhcyBwb3NzaWJsZS4gIElmIG5vCi0jICAgICAgdGhyZWFkcyBhcmUgLndhaXQnaW5nLCB0aGlzIGlzIGEgbm9wLgotIwotIyAgICAgIE5vdGUgdGhhdCBpZiBhIHRocmVhZCBkb2VzIGEgLndhaXQgKndoaWxlKiBhIHNpZ25hbC9icm9hZGNhc3QgaXMKLSMgICAgICBpbiBwcm9ncmVzcywgaXQncyBndWFyYW50ZWVlZCB0byBibG9jayB1bnRpbCBhIHN1YnNlcXVlbnQKLSMgICAgICBzaWduYWwvYnJvYWRjYXN0LgotIwotIyAgICAgIFNlY3JldCBmZWF0dXJlOiAgYGJyb2FkY2FzdCcgYWN0dWFsbHkgdGFrZXMgYW4gaW50ZWdlciBhcmd1bWVudCwKLSMgICAgICBhbmQgd2lsbCB3YWtlIHVwIGV4YWN0bHkgdGhhdCBtYW55IHdhaXRpbmcgdGhyZWFkcyAob3IgdGhlIHRvdGFsCi0jICAgICAgbnVtYmVyIHdhaXRpbmcsIGlmIHRoYXQncyBsZXNzKS4gIFVzZSBvZiB0aGlzIGlzIGR1YmlvdXMsIHRob3VnaCwKLSMgICAgICBhbmQgcHJvYmFibHkgd29uJ3QgYmUgc3VwcG9ydGVkIGlmIHRoaXMgZm9ybSBvZiBjb25kaXRpb24gaXMKLSMgICAgICByZWltcGxlbWVudGVkIGluIEMuCi0jCi0jIERJRkZFUkVOQ0VTIEZST00gUE9TSVgKLSMKLSMgKyBBIHNlcGFyYXRlIG11dGV4IGlzIG5vdCBuZWVkZWQgdG8gZ3VhcmQgY29uZGl0aW9uIGRhdGEuICBJbnN0ZWFkLCBhCi0jICAgY29uZGl0aW9uIG9iamVjdCBjYW4gKG11c3QpIGJlIC5hY3F1aXJlJ2VkIGFuZCAucmVsZWFzZSdlZCBkaXJlY3RseS4KLSMgICBUaGlzIGVsaW1pbmF0ZXMgYSBjb21tb24gZXJyb3IgaW4gdXNpbmcgUE9TSVggY29uZGl0aW9ucy4KLSMKLSMgKyBCZWNhdXNlIG9mIGltcGxlbWVudGF0aW9uIGRpZmZpY3VsdGllcywgYSBQT1NJWCBgc2lnbmFsJyB3YWtlcyB1cAotIyAgIF9hdCBsZWFzdF8gb25lIC53YWl0J2luZyB0aHJlYWQuICBSYWNlIGNvbmRpdGlvbnMgbWFrZSBpdCBkaWZmaWN1bHQKLSMgICB0byBzdG9wIHRoYXQuICBUaGlzIGltcGxlbWVudGF0aW9uIGd1YXJhbnRlZXMgdG8gd2FrZSB1cCBvbmx5IG9uZSwKLSMgICBidXQgeW91IHByb2JhYmx5IHNob3VsZG4ndCByZWx5IG9uIHRoYXQuCi0jCi0jIFBST1RPQ09MCi0jCi0jIENvbmRpdGlvbiBvYmplY3RzIGFyZSB1c2VkIHRvIGJsb2NrIHRocmVhZHMgdW50aWwgInNvbWUgY29uZGl0aW9uIiBpcwotIyB0cnVlLiAgRS5nLiwgYSB0aHJlYWQgbWF5IHdpc2ggdG8gd2FpdCB1bnRpbCBhIHByb2R1Y2VyIHB1bXBzIG91dCBkYXRhCi0jIGZvciBpdCB0byBjb25zdW1lLCBvciBhIHNlcnZlciBtYXkgd2lzaCB0byB3YWl0IHVudGlsIHNvbWVvbmUgcmVxdWVzdHMKLSMgaXRzIHNlcnZpY2VzLCBvciBwZXJoYXBzIGEgd2hvbGUgYnVuY2ggb2YgdGhyZWFkcyB3YW50IHRvIHdhaXQgdW50aWwgYQotIyBwcmVjZWRpbmcgcGFzcyBvdmVyIHRoZSBkYXRhIGlzIGNvbXBsZXRlLiAgRWFybHkgbW9kZWxzIGZvciBjb25kaXRpb25zCi0jIHJlbGllZCBvbiBzb21lIG90aGVyIHRocmVhZCBmaWd1cmluZyBvdXQgd2hlbiBhIGJsb2NrZWQgdGhyZWFkJ3MKLSMgY29uZGl0aW9uIHdhcyB0cnVlLCBhbmQgbWFkZSB0aGUgb3RoZXIgdGhyZWFkIHJlc3BvbnNpYmxlIGJvdGggZm9yCi0jIHdha2luZyB1cCB0aGUgYmxvY2tlZCB0aHJlYWQgYW5kIGd1YXJhbnRlZWluZyB0aGF0IGl0IHdva2UgdXAgd2l0aCBhbGwKLSMgZGF0YSBpbiBhIGNvcnJlY3Qgc3RhdGUuICBUaGlzIHByb3ZlZCB0byBiZSB2ZXJ5IGRlbGljYXRlIGluIHByYWN0aWNlLAotIyBhbmQgZ2F2ZSBjb25kaXRpb25zIGEgYmFkIG5hbWUgaW4gc29tZSBjaXJjbGVzLgotIwotIyBUaGUgUE9TSVggbW9kZWwgYWRkcmVzc2VzIHRoZXNlIHByb2JsZW1zIGJ5IG1ha2luZyBhIHRocmVhZCByZXNwb25zaWJsZQotIyBmb3IgZW5zdXJpbmcgdGhhdCBpdHMgb3duIHN0YXRlIGlzIGNvcnJlY3Qgd2hlbiBpdCB3YWtlcywgYW5kIHJlbGllcwotIyBvbiBhIHJpZ2lkIHByb3RvY29sIHRvIG1ha2UgdGhpcyBlYXN5OyBzbyBsb25nIGFzIHlvdSBzdGljayB0byB0aGUKLSMgcHJvdG9jb2wsIFBPU0lYIGNvbmRpdGlvbnMgYXJlIGVhc3kgdG8gImdldCByaWdodCI6Ci0jCi0jICBBKSBUaGUgdGhyZWFkIHRoYXQncyB3YWl0aW5nIGZvciBzb21lIGFyYml0cmFyaWx5LWNvbXBsZXggY29uZGl0aW9uCi0jICAgICAoQUNDKSB0byBiZWNvbWUgdHJ1ZSBkb2VzOgotIwotIyAgICAgY29uZGl0aW9uLmFjcXVpcmUoKQotIyAgICAgd2hpbGUgbm90IChjb2RlIHRvIGV2YWx1YXRlIHRoZSBBQ0MpOgotIyAgICAgICAgICAgY29uZGl0aW9uLndhaXQoKQotIyAgICAgICAgICAgIyBUaGF0IGJsb2NrcyB0aGUgdGhyZWFkLCAqYW5kKiByZWxlYXNlcyB0aGUgbG9jay4gIFdoZW4gYQotIyAgICAgICAgICAgIyBjb25kaXRpb24uc2lnbmFsKCkgaGFwcGVucywgaXQgd2lsbCB3YWtlIHVwIHNvbWUgdGhyZWFkIHRoYXQKLSMgICAgICAgICAgICMgZGlkIGEgLndhaXQsICphbmQqIGFjcXVpcmUgdGhlIGxvY2sgYWdhaW4gYmVmb3JlIC53YWl0Ci0jICAgICAgICAgICAjIHJldHVybnMuCi0jICAgICAgICAgICAjCi0jICAgICAgICAgICAjIEJlY2F1c2UgdGhlIGxvY2sgaXMgYWNxdWlyZWQgYXQgdGhpcyBwb2ludCwgdGhlIHN0YXRlIHVzZWQKLSMgICAgICAgICAgICMgaW4gZXZhbHVhdGluZyB0aGUgQUNDIGlzIGZyb3plbiwgc28gaXQncyBzYWZlIHRvIGdvIGJhY2sgJgotIyAgICAgICAgICAgIyByZWV2YWx1YXRlIHRoZSBBQ0MuCi0jCi0jICAgICAjIEF0IHRoaXMgcG9pbnQsIEFDQyBpcyB0cnVlLCBhbmQgdGhlIHRocmVhZCBoYXMgdGhlIGNvbmRpdGlvbgotIyAgICAgIyBsb2NrZWQuCi0jICAgICAjIFNvIGNvZGUgaGVyZSBjYW4gc2FmZWx5IG11Y2sgd2l0aCB0aGUgc2hhcmVkIHN0YXRlIHRoYXQKLSMgICAgICMgd2VudCBpbnRvIGV2YWx1YXRpbmcgdGhlIEFDQyAtLSBpZiBpdCB3YW50cyB0by4KLSMgICAgICMgV2hlbiBkb25lIG11Y2tpbmcgd2l0aCB0aGUgc2hhcmVkIHN0YXRlLCBkbwotIyAgICAgY29uZGl0aW9uLnJlbGVhc2UoKQotIwotIyAgQikgVGhyZWFkcyB0aGF0IGFyZSBtdWNraW5nIHdpdGggc2hhcmVkIHN0YXRlIHRoYXQgbWF5IGFmZmVjdCB0aGUKLSMgICAgIEFDQyBkbzoKLSMKLSMgICAgIGNvbmRpdGlvbi5hY3F1aXJlKCkKLSMgICAgICMgbXVjayB3aXRoIHNoYXJlZCBzdGF0ZQotIyAgICAgY29uZGl0aW9uLnJlbGVhc2UoKQotIyAgICAgaWYgaXQncyBwb3NzaWJsZSB0aGF0IEFDQyBpcyB0cnVlIG5vdzoKLSMgICAgICAgICBjb25kaXRpb24uc2lnbmFsKCkgIyBvciAuYnJvYWRjYXN0KCkKLSMKLSMgICAgIE5vdGU6ICBZb3UgbWF5IHByZWZlciB0byBwdXQgdGhlICJpZiIgY2xhdXNlIGJlZm9yZSB0aGUgcmVsZWFzZSgpLgotIyAgICAgVGhhdCdzIGZpbmUsIGJ1dCBkbyBub3RlIHRoYXQgYW55b25lIHdhaXRpbmcgb24gdGhlIHNpZ25hbCB3aWxsCi0jICAgICBzdGF5IGJsb2NrZWQgdW50aWwgdGhlIHJlbGVhc2UoKSBpcyBkb25lIChzaW5jZSBhY3F1aXJpbmcgdGhlCi0jICAgICBjb25kaXRpb24gaXMgcGFydCBvZiB3aGF0IC53YWl0KCkgZG9lcyBiZWZvcmUgaXQgcmV0dXJucykuCi0jCi0jIFRSSUNLIE9GIFRIRSBUUkFERQotIwotIyBXaXRoIHNpbXBsZXIgZm9ybXMgb2YgY29uZGl0aW9ucywgaXQgY2FuIGJlIGltcG9zc2libGUgdG8ga25vdyB3aGVuCi0jIGEgdGhyZWFkIHRoYXQncyBzdXBwb3NlZCB0byBkbyBhIC53YWl0IGhhcyBhY3R1YWxseSBkb25lIGl0LiAgQnV0Ci0jIGJlY2F1c2UgdGhpcyBmb3JtIG9mIGNvbmRpdGlvbiByZWxlYXNlcyBhIGxvY2sgYXMgX3BhcnRfIG9mIGRvaW5nIGEKLSMgd2FpdCwgdGhlIHN0YXRlIG9mIHRoYXQgbG9jayBjYW4gYmUgdXNlZCB0byBndWFyYW50ZWUgaXQuCi0jCi0jIEUuZy4sIHN1cHBvc2UgdGhyZWFkIEEgc3Bhd25zIHRocmVhZCBCIGFuZCBsYXRlciB3YW50cyB0byB3YWl0IGZvciBCIHRvCi0jIGNvbXBsZXRlOgotIwotIyBJbiBBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW4gQjoKLSMKLSMgQl9kb25lID0gY29uZGl0aW9uKCkgICAgICAgICAgICAgIC4uLiBkbyB3b3JrIC4uLgotIyBCX2RvbmUuYWNxdWlyZSgpICAgICAgICAgICAgICAgICAgQl9kb25lLmFjcXVpcmUoKTsgQl9kb25lLnJlbGVhc2UoKQotIyBzcGF3biBCICAgICAgICAgICAgICAgICAgICAgICAgICAgQl9kb25lLnNpZ25hbCgpCi0jIC4uLiBzb21lIHRpbWUgbGF0ZXIgLi4uICAgICAgICAgICAuLi4gYW5kIEIgZXhpdHMgLi4uCi0jIEJfZG9uZS53YWl0KCkKLSMKLSMgQmVjYXVzZSBCX2RvbmUgd2FzIGluIHRoZSBhY3F1aXJlJ2Qgc3RhdGUgYXQgdGhlIHRpbWUgQiB3YXMgc3Bhd25lZCwKLSMgQidzIGF0dGVtcHQgdG8gYWNxdWlyZSBCX2RvbmUgY2FuJ3Qgc3VjY2VlZCB1bnRpbCBBIGhhcyBkb25lIGl0cwotIyBCX2RvbmUud2FpdCgpICh3aGljaCByZWxlYXNlcyBCX2RvbmUpLiAgU28gQidzIEJfZG9uZS5zaWduYWwoKSBpcwotIyBndWFyYW50ZWVkIHRvIGJlIHNlZW4gYnkgdGhlIC53YWl0KCkuICBXaXRob3V0IHRoZSBsb2NrIHRyaWNrLCBCCi0jIG1heSBzaWduYWwgYmVmb3JlIEEgLndhaXRzLCBhbmQgdGhlbiBBIHdvdWxkIHdhaXQgZm9yZXZlci4KLSMKLSMgQkFSUklFUlMKLSMKLSMgQSBiYXJyaWVyIG9iamVjdCBpcyBjcmVhdGVkIHZpYQotIyAgIGltcG9ydCB0aGlzX21vZHVsZQotIyAgIHlvdXJfYmFycmllciA9IHRoaXNfbW9kdWxlLmJhcnJpZXIobnVtX3RocmVhZHMpCi0jCi0jIE1ldGhvZHM6Ci0jICAgLmVudGVyKCkKLSMgICAgICB0aGUgdGhyZWFkIGJsb2NrcyB1bnRpbCBudW1fdGhyZWFkcyB0aHJlYWRzIGluIGFsbCBoYXZlIGRvbmUKLSMgICAgICAuZW50ZXIoKS4gIFRoZW4gdGhlIG51bV90aHJlYWRzIHRocmVhZHMgdGhhdCAuZW50ZXInZWQgcmVzdW1lLAotIyAgICAgIGFuZCB0aGUgYmFycmllciByZXNldHMgdG8gY2FwdHVyZSB0aGUgbmV4dCBudW1fdGhyZWFkcyB0aHJlYWRzCi0jICAgICAgdGhhdCAuZW50ZXIgaXQuCi0jCi0jIEVWRU5UUwotIwotIyBBbiBldmVudCBvYmplY3QgaXMgY3JlYXRlZCB2aWEKLSMgICBpbXBvcnQgdGhpc19tb2R1bGUKLSMgICB5b3VyX2V2ZW50ID0gdGhpc19tb2R1bGUuZXZlbnQoKQotIwotIyBBbiBldmVudCBoYXMgdHdvIHN0YXRlcywgYHBvc3RlZCcgYW5kIGBjbGVhcmVkJy4gIEFuIGV2ZW50IGlzCi0jIGNyZWF0ZWQgaW4gdGhlIGNsZWFyZWQgc3RhdGUuCi0jCi0jIE1ldGhvZHM6Ci0jCi0jICAgLnBvc3QoKQotIyAgICAgIFB1dCB0aGUgZXZlbnQgaW4gdGhlIHBvc3RlZCBzdGF0ZSwgYW5kIHJlc3VtZSBhbGwgdGhyZWFkcwotIyAgICAgIC53YWl0J2luZyBvbiB0aGUgZXZlbnQgKGlmIGFueSkuCi0jCi0jICAgLmNsZWFyKCkKLSMgICAgICBQdXQgdGhlIGV2ZW50IGluIHRoZSBjbGVhcmVkIHN0YXRlLgotIwotIyAgIC5pc19wb3N0ZWQoKQotIyAgICAgIFJldHVybnMgMCBpZiB0aGUgZXZlbnQgaXMgaW4gdGhlIGNsZWFyZWQgc3RhdGUsIG9yIDEgaWYgdGhlIGV2ZW50Ci0jICAgICAgaXMgaW4gdGhlIHBvc3RlZCBzdGF0ZS4KLSMKLSMgICAud2FpdCgpCi0jICAgICAgSWYgdGhlIGV2ZW50IGlzIGluIHRoZSBwb3N0ZWQgc3RhdGUsIHJldHVybnMgaW1tZWRpYXRlbHkuCi0jICAgICAgSWYgdGhlIGV2ZW50IGlzIGluIHRoZSBjbGVhcmVkIHN0YXRlLCBibG9ja3MgdGhlIGNhbGxpbmcgdGhyZWFkCi0jICAgICAgdW50aWwgdGhlIGV2ZW50IGlzIC5wb3N0J2VkIGJ5IGFub3RoZXIgdGhyZWFkLgotIwotIyBOb3RlIHRoYXQgYW4gZXZlbnQsIG9uY2UgcG9zdGVkLCByZW1haW5zIHBvc3RlZCB1bnRpbCBleHBsaWNpdGx5Ci0jIGNsZWFyZWQuICBSZWxhdGl2ZSB0byBjb25kaXRpb25zLCB0aGlzIGlzIGJvdGggdGhlIHN0cmVuZ3RoICYgd2Vha25lc3MKLSMgb2YgZXZlbnRzLiAgSXQncyBhIHN0cmVuZ3RoIGJlY2F1c2UgdGhlIC5wb3N0J2luZyB0aHJlYWQgZG9lc24ndCBoYXZlIHRvCi0jIHdvcnJ5IGFib3V0IHdoZXRoZXIgdGhlIHRocmVhZHMgaXQncyB0cnlpbmcgdG8gY29tbXVuaWNhdGUgd2l0aCBoYXZlCi0jIGFscmVhZHkgZG9uZSBhIC53YWl0IChhIGNvbmRpdGlvbiAuc2lnbmFsIGlzIHNlZW4gb25seSBieSB0aHJlYWRzIHRoYXQKLSMgZG8gYSAud2FpdCBfcHJpb3JfIHRvIHRoZSAuc2lnbmFsOyBhIC5zaWduYWwgZG9lcyBub3QgcGVyc2lzdCkuICBCdXQKLSMgaXQncyBhIHdlYWtuZXNzIGJlY2F1c2UgLmNsZWFyJ2luZyBhbiBldmVudCBpcyBlcnJvci1wcm9uZTogIGl0J3MgZWFzeQotIyB0byBtaXN0YWtlbmx5IC5jbGVhciBhbiBldmVudCBiZWZvcmUgYWxsIHRoZSB0aHJlYWRzIHlvdSBpbnRlbmRlZCB0bwotIyBzZWUgdGhlIGV2ZW50IGdldCBhcm91bmQgdG8gLndhaXQnaW5nIG9uIGl0LiAgQnV0IHNvIGxvbmcgYXMgeW91IGRvbid0Ci0jIG5lZWQgdG8gLmNsZWFyIGFuIGV2ZW50LCBldmVudHMgYXJlIGVhc3kgdG8gdXNlIHNhZmVseS4KLSMKLSMgU0VNQVBIT1JFUwotIwotIyBBIHNlbWFwaG9yZSBvYmplY3QgaXMgY3JlYXRlZCB2aWEKLSMgICBpbXBvcnQgdGhpc19tb2R1bGUKLSMgICB5b3VyX3NlbWFwaG9yZSA9IHRoaXNfbW9kdWxlLnNlbWFwaG9yZShjb3VudD0xKQotIwotIyBBIHNlbWFwaG9yZSBoYXMgYW4gaW50ZWdlciBjb3VudCBhc3NvY2lhdGVkIHdpdGggaXQuICBUaGUgaW5pdGlhbCB2YWx1ZQotIyBvZiB0aGUgY291bnQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb25hbCBhcmd1bWVudCAod2hpY2ggZGVmYXVsdHMgdG8KLSMgMSkgcGFzc2VkIHRvIHRoZSBzZW1hcGhvcmUgY29uc3RydWN0b3IuCi0jCi0jIE1ldGhvZHM6Ci0jCi0jICAgLnAoKQotIyAgICAgIElmIHRoZSBzZW1hcGhvcmUncyBjb3VudCBpcyBncmVhdGVyIHRoYW4gMCwgZGVjcmVtZW50cyB0aGUgY291bnQKLSMgICAgICBieSAxIGFuZCByZXR1cm5zLgotIyAgICAgIEVsc2UgaWYgdGhlIHNlbWFwaG9yZSdzIGNvdW50IGlzIDAsIGJsb2NrcyB0aGUgY2FsbGluZyB0aHJlYWQKLSMgICAgICB1bnRpbCBhIHN1YnNlcXVlbnQgLnYoKSBpbmNyZWFzZXMgdGhlIGNvdW50LiAgV2hlbiB0aGF0IGhhcHBlbnMsCi0jICAgICAgdGhlIGNvdW50IHdpbGwgYmUgZGVjcmVtZW50ZWQgYnkgMSBhbmQgdGhlIGNhbGxpbmcgdGhyZWFkIHJlc3VtZWQuCi0jCi0jICAgLnYoKQotIyAgICAgIEluY3JlbWVudHMgdGhlIHNlbWFwaG9yZSdzIGNvdW50IGJ5IDEsIGFuZCB3YWtlcyB1cCBhIHRocmVhZCAoaWYKLSMgICAgICBhbnkpIGJsb2NrZWQgYnkgYSAucCgpLiAgSXQncyBhbiAoZGV0ZWN0ZWQpIGVycm9yIGZvciBhIC52KCkgdG8KLSMgICAgICBpbmNyZWFzZSB0aGUgc2VtYXBob3JlJ3MgY291bnQgdG8gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgaW5pdGlhbAotIyAgICAgIGNvdW50LgotIwotIyBNVUxUSVBMRS1SRUFERVIgU0lOR0xFLVdSSVRFUiBMT0NLUwotIwotIyBBIG1yc3cgbG9jayBpcyBjcmVhdGVkIHZpYQotIyAgIGltcG9ydCB0aGlzX21vZHVsZQotIyAgIHlvdXJfbXJzd19sb2NrID0gdGhpc19tb2R1bGUubXJzdygpCi0jCi0jIFRoaXMga2luZCBvZiBsb2NrIGlzIG9mdGVuIHVzZWZ1bCB3aXRoIGNvbXBsZXggc2hhcmVkIGRhdGEgc3RydWN0dXJlcy4KLSMgVGhlIG9iamVjdCBsZXRzIGFueSBudW1iZXIgb2YgInJlYWRlcnMiIHByb2NlZWQsIHNvIGxvbmcgYXMgbm8gdGhyZWFkCi0jIHdpc2hlcyB0byAid3JpdGUiLiAgV2hlbiBhIChvbmUgb3IgbW9yZSkgdGhyZWFkIGRlY2xhcmVzIGl0cyBpbnRlbnRpb24KLSMgdG8gIndyaXRlIiAoZS5nLiwgdG8gdXBkYXRlIGEgc2hhcmVkIHN0cnVjdHVyZSksIGFsbCBjdXJyZW50IHJlYWRlcnMKLSMgYXJlIGFsbG93ZWQgdG8gZmluaXNoLCBhbmQgdGhlbiBhIHdyaXRlciBnZXRzIGV4Y2x1c2l2ZSBhY2Nlc3M7IGFsbAotIyBvdGhlciByZWFkZXJzICYgd3JpdGVycyBhcmUgYmxvY2tlZCB1bnRpbCB0aGUgY3VycmVudCB3cml0ZXIgY29tcGxldGVzLgotIyBGaW5hbGx5LCBpZiBzb21lIHRocmVhZCBpcyB3YWl0aW5nIHRvIHdyaXRlIGFuZCBhbm90aGVyIGlzIHdhaXRpbmcgdG8KLSMgcmVhZCwgdGhlIHdyaXRlciB0YWtlcyBwcmVjZWRlbmNlLgotIwotIyBNZXRob2RzOgotIwotIyAgIC5yZWFkX2luKCkKLSMgICAgICBJZiBubyB0aHJlYWQgaXMgd3JpdGluZyBvciB3YWl0aW5nIHRvIHdyaXRlLCByZXR1cm5zIGltbWVkaWF0ZWx5LgotIyAgICAgIEVsc2UgYmxvY2tzIHVudGlsIG5vIHRocmVhZCBpcyB3cml0aW5nIG9yIHdhaXRpbmcgdG8gd3JpdGUuICBTbwotIyAgICAgIGxvbmcgYXMgc29tZSB0aHJlYWQgaGFzIGNvbXBsZXRlZCBhIC5yZWFkX2luIGJ1dCBub3QgYSAucmVhZF9vdXQsCi0jICAgICAgd3JpdGVycyBhcmUgYmxvY2tlZC4KLSMKLSMgICAucmVhZF9vdXQoKQotIyAgICAgIFVzZSBzb21ldGltZSBhZnRlciBhIC5yZWFkX2luIHRvIGRlY2xhcmUgdGhhdCB0aGUgdGhyZWFkIGlzIGRvbmUKLSMgICAgICByZWFkaW5nLiAgV2hlbiBhbGwgdGhyZWFkcyBjb21wbGV0ZSByZWFkaW5nLCBhIHdyaXRlciBjYW4gcHJvY2VlZC4KLSMKLSMgICAud3JpdGVfaW4oKQotIyAgICAgIElmIG5vIHRocmVhZCBpcyB3cml0aW5nIChoYXMgY29tcGxldGVkIGEgLndyaXRlX2luLCBidXQgaGFzbid0IHlldAotIyAgICAgIGRvbmUgYSAud3JpdGVfb3V0KSBvciByZWFkaW5nIChzaW1pbGFybHkpLCByZXR1cm5zIGltbWVkaWF0ZWx5LgotIyAgICAgIEVsc2UgYmxvY2tzIHRoZSBjYWxsaW5nIHRocmVhZCwgYW5kIHRocmVhZHMgd2FpdGluZyB0byByZWFkLCB1bnRpbAotIyAgICAgIHRoZSBjdXJyZW50IHdyaXRlciBjb21wbGV0ZXMgd3JpdGluZyBvciBhbGwgdGhlIGN1cnJlbnQgcmVhZGVycwotIyAgICAgIGNvbXBsZXRlIHJlYWRpbmc7IGlmIHRoZW4gbW9yZSB0aGFuIG9uZSB0aHJlYWQgaXMgd2FpdGluZyB0bwotIyAgICAgIHdyaXRlLCBvbmUgb2YgdGhlbSBpcyBhbGxvd2VkIHRvIHByb2NlZWQsIGJ1dCB3aGljaCBvbmUgaXMgbm90Ci0jICAgICAgc3BlY2lmaWVkLgotIwotIyAgIC53cml0ZV9vdXQoKQotIyAgICAgIFVzZSBzb21ldGltZSBhZnRlciBhIC53cml0ZV9pbiB0byBkZWNsYXJlIHRoYXQgdGhlIHRocmVhZCBpcyBkb25lCi0jICAgICAgd3JpdGluZy4gIFRoZW4gaWYgc29tZSBvdGhlciB0aHJlYWQgaXMgd2FpdGluZyB0byB3cml0ZSwgaXQncwotIyAgICAgIGFsbG93ZWQgdG8gcHJvY2VlZC4gIEVsc2UgYWxsIHRocmVhZHMgKGlmIGFueSkgd2FpdGluZyB0byByZWFkIGFyZQotIyAgICAgIGFsbG93ZWQgdG8gcHJvY2VlZC4KLSMKLSMgICAud3JpdGVfdG9fcmVhZCgpCi0jICAgICAgVXNlIGluc3RlYWQgb2YgYSAud3JpdGVfaW4gdG8gZGVjbGFyZSB0aGF0IHRoZSB0aHJlYWQgaXMgZG9uZQotIyAgICAgIHdyaXRpbmcgYnV0IHdhbnRzIHRvIGNvbnRpbnVlIHJlYWRpbmcgd2l0aG91dCBvdGhlciB3cml0ZXJzCi0jICAgICAgaW50ZXJ2ZW5pbmcuICBJZiB0aGVyZSBhcmUgb3RoZXIgdGhyZWFkcyB3YWl0aW5nIHRvIHdyaXRlLCB0aGV5Ci0jICAgICAgYXJlIGFsbG93ZWQgdG8gcHJvY2VlZCBvbmx5IGlmIHRoZSBjdXJyZW50IHRocmVhZCBjYWxscwotIyAgICAgIC5yZWFkX291dDsgdGhyZWFkcyB3YWl0aW5nIHRvIHJlYWQgYXJlIG9ubHkgYWxsb3dlZCB0byBwcm9jZWVkCi0jICAgICAgaWYgdGhlcmUgYXJlIGFyZSBubyB0aHJlYWRzIHdhaXRpbmcgdG8gd3JpdGUuICAoVGhpcyBpcyBhCi0jICAgICAgd2Vha25lc3Mgb2YgdGhlIGludGVyZmFjZSEpCi0KLWltcG9ydCBfdGhyZWFkIGFzIHRocmVhZAotCi1jbGFzcyBjb25kaXRpb246Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSk6Ci0gICAgICAgICMgdGhlIGxvY2sgYWN0dWFsbHkgdXNlZCBieSAuYWNxdWlyZSgpIGFuZCAucmVsZWFzZSgpCi0gICAgICAgIGlmIGxvY2sgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYubXV0ZXggPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJykgYW5kIFwKLSAgICAgICAgICAgICAgIGhhc2F0dHIobG9jaywgJ3JlbGVhc2UnKToKLSAgICAgICAgICAgICAgICBzZWxmLm11dGV4ID0gbG9jawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2NvbmRpdGlvbiBjb25zdHJ1Y3RvciByZXF1aXJlcyAnIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhIGxvY2sgYXJndW1lbnQnKQotCi0gICAgICAgICMgbG9jayB1c2VkIHRvIGJsb2NrIHRocmVhZHMgdW50aWwgYSBzaWduYWwKLSAgICAgICAgc2VsZi5jaGVja291dCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKLSAgICAgICAgc2VsZi5jaGVja291dC5hY3F1aXJlKCkKLQotICAgICAgICAjIGludGVybmFsIGNyaXRpY2FsLXNlY3Rpb24gbG9jaywgJiB0aGUgZGF0YSBpdCBwcm90ZWN0cwotICAgICAgICBzZWxmLmlkbG9jayA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKLSAgICAgICAgc2VsZi5pZCA9IDAKLSAgICAgICAgc2VsZi53YWl0aW5nID0gMCAgIyBudW0gd2FpdGVycyBzdWJqZWN0IHRvIGN1cnJlbnQgcmVsZWFzZQotICAgICAgICBzZWxmLnBlbmRpbmcgPSAwICAjIG51bSB3YWl0ZXJzIGF3YWl0aW5nIG5leHQgc2lnbmFsCi0gICAgICAgIHNlbGYudG9yZWxlYXNlID0gMCAgICAgICMgbnVtIHdhaXRlcnMgdG8gcmVsZWFzZQotICAgICAgICBzZWxmLnJlbGVhc2luZyA9IDAgICAgICAjIDEgaWZmIHJlbGVhc2UgaXMgaW4gcHJvZ3Jlc3MKLQotICAgIGRlZiBhY3F1aXJlKHNlbGYpOgotICAgICAgICBzZWxmLm11dGV4LmFjcXVpcmUoKQotCi0gICAgZGVmIHJlbGVhc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYubXV0ZXgucmVsZWFzZSgpCi0KLSAgICBkZWYgd2FpdChzZWxmKToKLSAgICAgICAgbXV0ZXgsIGNoZWNrb3V0LCBpZGxvY2sgPSBzZWxmLm11dGV4LCBzZWxmLmNoZWNrb3V0LCBzZWxmLmlkbG9jawotICAgICAgICBpZiBub3QgbXV0ZXgubG9ja2VkKCk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb25kaXRpb24gbXVzdCBiZSAuYWNxdWlyZSdkIHdoZW4gLndhaXQoKSBpbnZva2VkIikKLQotICAgICAgICBpZGxvY2suYWNxdWlyZSgpCi0gICAgICAgIG15aWQgPSBzZWxmLmlkCi0gICAgICAgIHNlbGYucGVuZGluZyA9IHNlbGYucGVuZGluZyArIDEKLSAgICAgICAgaWRsb2NrLnJlbGVhc2UoKQotCi0gICAgICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBjaGVja291dC5hY3F1aXJlKCk7IGlkbG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIGlmIG15aWQgPCBzZWxmLmlkOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBjaGVja291dC5yZWxlYXNlKCk7IGlkbG9jay5yZWxlYXNlKCkKLQotICAgICAgICBzZWxmLndhaXRpbmcgPSBzZWxmLndhaXRpbmcgLSAxCi0gICAgICAgIHNlbGYudG9yZWxlYXNlID0gc2VsZi50b3JlbGVhc2UgLSAxCi0gICAgICAgIGlmIHNlbGYudG9yZWxlYXNlOgotICAgICAgICAgICAgY2hlY2tvdXQucmVsZWFzZSgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJlbGVhc2luZyA9IDAKLSAgICAgICAgICAgIGlmIHNlbGYud2FpdGluZyA9PSBzZWxmLnBlbmRpbmcgPT0gMDoKLSAgICAgICAgICAgICAgICBzZWxmLmlkID0gMAotICAgICAgICBpZGxvY2sucmVsZWFzZSgpCi0gICAgICAgIG11dGV4LmFjcXVpcmUoKQotCi0gICAgZGVmIHNpZ25hbChzZWxmKToKLSAgICAgICAgc2VsZi5icm9hZGNhc3QoMSkKLQotICAgIGRlZiBicm9hZGNhc3Qoc2VsZiwgbnVtID0gLTEpOgotICAgICAgICBpZiBudW0gPCAtMToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJy5icm9hZGNhc3QgY2FsbGVkIHdpdGggbnVtICVyJyAlIChudW0sKSkKLSAgICAgICAgaWYgbnVtID09IDA6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5pZGxvY2suYWNxdWlyZSgpCi0gICAgICAgIGlmIHNlbGYucGVuZGluZzoKLSAgICAgICAgICAgIHNlbGYud2FpdGluZyA9IHNlbGYud2FpdGluZyArIHNlbGYucGVuZGluZwotICAgICAgICAgICAgc2VsZi5wZW5kaW5nID0gMAotICAgICAgICAgICAgc2VsZi5pZCA9IHNlbGYuaWQgKyAxCi0gICAgICAgIGlmIG51bSA9PSAtMToKLSAgICAgICAgICAgIHNlbGYudG9yZWxlYXNlID0gc2VsZi53YWl0aW5nCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnRvcmVsZWFzZSA9IG1pbiggc2VsZi53YWl0aW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudG9yZWxlYXNlICsgbnVtICkKLSAgICAgICAgaWYgc2VsZi50b3JlbGVhc2UgYW5kIG5vdCBzZWxmLnJlbGVhc2luZzoKLSAgICAgICAgICAgIHNlbGYucmVsZWFzaW5nID0gMQotICAgICAgICAgICAgc2VsZi5jaGVja291dC5yZWxlYXNlKCkKLSAgICAgICAgc2VsZi5pZGxvY2sucmVsZWFzZSgpCi0KLWNsYXNzIGJhcnJpZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgotICAgICAgICBzZWxmLm4gPSBuCi0gICAgICAgIHNlbGYudG9nbyA9IG4KLSAgICAgICAgc2VsZi5mdWxsID0gY29uZGl0aW9uKCkKLQotICAgIGRlZiBlbnRlcihzZWxmKToKLSAgICAgICAgZnVsbCA9IHNlbGYuZnVsbAotICAgICAgICBmdWxsLmFjcXVpcmUoKQotICAgICAgICBzZWxmLnRvZ28gPSBzZWxmLnRvZ28gLSAxCi0gICAgICAgIGlmIHNlbGYudG9nbzoKLSAgICAgICAgICAgIGZ1bGwud2FpdCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnRvZ28gPSBzZWxmLm4KLSAgICAgICAgICAgIGZ1bGwuYnJvYWRjYXN0KCkKLSAgICAgICAgZnVsbC5yZWxlYXNlKCkKLQotY2xhc3MgZXZlbnQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnN0YXRlICA9IDAKLSAgICAgICAgc2VsZi5wb3N0ZWQgPSBjb25kaXRpb24oKQotCi0gICAgZGVmIHBvc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucG9zdGVkLmFjcXVpcmUoKQotICAgICAgICBzZWxmLnN0YXRlID0gMQotICAgICAgICBzZWxmLnBvc3RlZC5icm9hZGNhc3QoKQotICAgICAgICBzZWxmLnBvc3RlZC5yZWxlYXNlKCkKLQotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgc2VsZi5wb3N0ZWQuYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuc3RhdGUgPSAwCi0gICAgICAgIHNlbGYucG9zdGVkLnJlbGVhc2UoKQotCi0gICAgZGVmIGlzX3Bvc3RlZChzZWxmKToKLSAgICAgICAgc2VsZi5wb3N0ZWQuYWNxdWlyZSgpCi0gICAgICAgIGFuc3dlciA9IHNlbGYuc3RhdGUKLSAgICAgICAgc2VsZi5wb3N0ZWQucmVsZWFzZSgpCi0gICAgICAgIHJldHVybiBhbnN3ZXIKLQotICAgIGRlZiB3YWl0KHNlbGYpOgotICAgICAgICBzZWxmLnBvc3RlZC5hY3F1aXJlKCkKLSAgICAgICAgaWYgbm90IHNlbGYuc3RhdGU6Ci0gICAgICAgICAgICBzZWxmLnBvc3RlZC53YWl0KCkKLSAgICAgICAgc2VsZi5wb3N0ZWQucmVsZWFzZSgpCi0KLWNsYXNzIHNlbWFwaG9yZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY291bnQ9MSk6Ci0gICAgICAgIGlmIGNvdW50IDw9IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdzZW1hcGhvcmUgY291bnQgJWQ7IG11c3QgYmUgPj0gMScgJSBjb3VudCkKLSAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50Ci0gICAgICAgIHNlbGYubWF4Y291bnQgPSBjb3VudAotICAgICAgICBzZWxmLm5vbnplcm8gPSBjb25kaXRpb24oKQotCi0gICAgZGVmIHAoc2VsZik6Ci0gICAgICAgIHNlbGYubm9uemVyby5hY3F1aXJlKCkKLSAgICAgICAgd2hpbGUgc2VsZi5jb3VudCA9PSAwOgotICAgICAgICAgICAgc2VsZi5ub256ZXJvLndhaXQoKQotICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCAtIDEKLSAgICAgICAgc2VsZi5ub256ZXJvLnJlbGVhc2UoKQotCi0gICAgZGVmIHYoc2VsZik6Ci0gICAgICAgIHNlbGYubm9uemVyby5hY3F1aXJlKCkKLSAgICAgICAgaWYgc2VsZi5jb3VudCA9PSBzZWxmLm1heGNvdW50OgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLnYoKSB0cmllZCB0byByYWlzZSBzZW1hcGhvcmUgY291bnQgYWJvdmUgJyBcCi0gICAgICAgICAgICAgICAgICAnaW5pdGlhbCB2YWx1ZSAlcicgJSBzZWxmLm1heGNvdW50KQotICAgICAgICBzZWxmLmNvdW50ID0gc2VsZi5jb3VudCArIDEKLSAgICAgICAgc2VsZi5ub256ZXJvLnNpZ25hbCgpCi0gICAgICAgIHNlbGYubm9uemVyby5yZWxlYXNlKCkKLQotY2xhc3MgbXJzdzoKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICMgY3JpdGljYWwtc2VjdGlvbiBsb2NrICYgdGhlIGRhdGEgaXQgcHJvdGVjdHMKLSAgICAgICAgc2VsZi5yd09LID0gdGhyZWFkLmFsbG9jYXRlX2xvY2soKQotICAgICAgICBzZWxmLm5yID0gMCAgIyBudW1iZXIgcmVhZGVycyBhY3RpdmVseSByZWFkaW5nIChub3QganVzdCB3YWl0aW5nKQotICAgICAgICBzZWxmLm53ID0gMCAgIyBudW1iZXIgd3JpdGVycyBlaXRoZXIgd2FpdGluZyB0byB3cml0ZSBvciB3cml0aW5nCi0gICAgICAgIHNlbGYud3JpdGluZyA9IDAgICMgMSBpZmYgc29tZSB0aHJlYWQgaXMgd3JpdGluZwotCi0gICAgICAgICMgY29uZGl0aW9ucwotICAgICAgICBzZWxmLnJlYWRPSyAgPSBjb25kaXRpb24oc2VsZi5yd09LKSAgIyBPSyB0byB1bmJsb2NrIHJlYWRlcnMKLSAgICAgICAgc2VsZi53cml0ZU9LID0gY29uZGl0aW9uKHNlbGYucndPSykgICMgT0sgdG8gdW5ibG9jayB3cml0ZXJzCi0KLSAgICBkZWYgcmVhZF9pbihzZWxmKToKLSAgICAgICAgc2VsZi5yd09LLmFjcXVpcmUoKQotICAgICAgICB3aGlsZSBzZWxmLm53OgotICAgICAgICAgICAgc2VsZi5yZWFkT0sud2FpdCgpCi0gICAgICAgIHNlbGYubnIgPSBzZWxmLm5yICsgMQotICAgICAgICBzZWxmLnJ3T0sucmVsZWFzZSgpCi0KLSAgICBkZWYgcmVhZF9vdXQoc2VsZik6Ci0gICAgICAgIHNlbGYucndPSy5hY3F1aXJlKCkKLSAgICAgICAgaWYgc2VsZi5uciA8PSAwOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLnJlYWRfb3V0KCkgaW52b2tlZCB3aXRob3V0IGFuIGFjdGl2ZSByZWFkZXInKQotICAgICAgICBzZWxmLm5yID0gc2VsZi5uciAtIDEKLSAgICAgICAgaWYgc2VsZi5uciA9PSAwOgotICAgICAgICAgICAgc2VsZi53cml0ZU9LLnNpZ25hbCgpCi0gICAgICAgIHNlbGYucndPSy5yZWxlYXNlKCkKLQotICAgIGRlZiB3cml0ZV9pbihzZWxmKToKLSAgICAgICAgc2VsZi5yd09LLmFjcXVpcmUoKQotICAgICAgICBzZWxmLm53ID0gc2VsZi5udyArIDEKLSAgICAgICAgd2hpbGUgc2VsZi53cml0aW5nIG9yIHNlbGYubnI6Ci0gICAgICAgICAgICBzZWxmLndyaXRlT0sud2FpdCgpCi0gICAgICAgIHNlbGYud3JpdGluZyA9IDEKLSAgICAgICAgc2VsZi5yd09LLnJlbGVhc2UoKQotCi0gICAgZGVmIHdyaXRlX291dChzZWxmKToKLSAgICAgICAgc2VsZi5yd09LLmFjcXVpcmUoKQotICAgICAgICBpZiBub3Qgc2VsZi53cml0aW5nOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignLndyaXRlX291dCgpIGludm9rZWQgd2l0aG91dCBhbiBhY3RpdmUgd3JpdGVyJykKLSAgICAgICAgc2VsZi53cml0aW5nID0gMAotICAgICAgICBzZWxmLm53ID0gc2VsZi5udyAtIDEKLSAgICAgICAgaWYgc2VsZi5udzoKLSAgICAgICAgICAgIHNlbGYud3JpdGVPSy5zaWduYWwoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5yZWFkT0suYnJvYWRjYXN0KCkKLSAgICAgICAgc2VsZi5yd09LLnJlbGVhc2UoKQotCi0gICAgZGVmIHdyaXRlX3RvX3JlYWQoc2VsZik6Ci0gICAgICAgIHNlbGYucndPSy5hY3F1aXJlKCkKLSAgICAgICAgaWYgbm90IHNlbGYud3JpdGluZzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJy53cml0ZV90b19yZWFkKCkgaW52b2tlZCB3aXRob3V0IGFuIGFjdGl2ZSB3cml0ZXInKQotICAgICAgICBzZWxmLndyaXRpbmcgPSAwCi0gICAgICAgIHNlbGYubncgPSBzZWxmLm53IC0gMQotICAgICAgICBzZWxmLm5yID0gc2VsZi5uciArIDEKLSAgICAgICAgaWYgbm90IHNlbGYubnc6Ci0gICAgICAgICAgICBzZWxmLnJlYWRPSy5icm9hZGNhc3QoKQotICAgICAgICBzZWxmLnJ3T0sucmVsZWFzZSgpCi0KLSMgVGhlIHJlc3Qgb2YgdGhlIGZpbGUgaXMgYSB0ZXN0IGNhc2UsIHRoYXQgcnVucyBhIG51bWJlciBvZiBwYXJhbGxlbGl6ZWQKLSMgcXVpY2tzb3J0cyBpbiBwYXJhbGxlbC4gIElmIGl0IHdvcmtzLCB5b3UnbGwgZ2V0IGFib3V0IDYwMCBsaW5lcyBvZgotIyB0cmFjaW5nIG91dHB1dCwgd2l0aCBhIGxpbmUgbGlrZQotIyAgICAgdGVzdCBwYXNzZWQhIDIwOSB0aHJlYWRzIGNyZWF0ZWQgaW4gYWxsCi0jIGFzIHRoZSBsYXN0IGxpbmUuICBUaGUgY29udGVudCBhbmQgb3JkZXIgb2YgcHJlY2VkaW5nIGxpbmVzIHdpbGwKLSMgdmFyeSBhY3Jvc3MgcnVucy4KLQotZGVmIF9uZXdfdGhyZWFkKGZ1bmMsICphcmdzKToKLSAgICBnbG9iYWwgVElECi0gICAgdGlkLmFjcXVpcmUoKTsgaWQgPSBUSUQgPSBUSUQrMTsgdGlkLnJlbGVhc2UoKQotICAgIGlvLmFjcXVpcmUoKTsgYWxpdmUuYXBwZW5kKGlkKTsgXAotICAgICAgICAgICAgICAgICAgcHJpbnQoJ3N0YXJ0aW5nIHRocmVhZCcsIGlkLCAnLS0nLCBsZW4oYWxpdmUpLCAnYWxpdmUnKTsgXAotICAgICAgICAgICAgICAgICAgaW8ucmVsZWFzZSgpCi0gICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQoIGZ1bmMsIChpZCwpICsgYXJncyApCi0KLWRlZiBfcXNvcnQodGlkLCBhLCBsLCByLCBmaW5pc2hlZCk6Ci0gICAgIyBzb3J0IGFbbDpyXTsgcG9zdCBmaW5pc2hlZCB3aGVuIGRvbmUKLSAgICBpby5hY3F1aXJlKCk7IHByaW50KCd0aHJlYWQnLCB0aWQsICdxc29ydCcsIGwsIHIpOyBpby5yZWxlYXNlKCkKLSAgICBpZiByLWwgPiAxOgotICAgICAgICBwaXZvdCA9IGFbbF0KLSAgICAgICAgaiA9IGwrMSAgICMgbWFrZSBhW2w6al0gPD0gcGl2b3QsIGFuZCBhW2o6cl0gPiBwaXZvdAotICAgICAgICBmb3IgaSBpbiByYW5nZShqLCByKToKLSAgICAgICAgICAgIGlmIGFbaV0gPD0gcGl2b3Q6Ci0gICAgICAgICAgICAgICAgYVtqXSwgYVtpXSA9IGFbaV0sIGFbal0KLSAgICAgICAgICAgICAgICBqID0gaiArIDEKLSAgICAgICAgYVtsXSwgYVtqLTFdID0gYVtqLTFdLCBwaXZvdAotCi0gICAgICAgIGxfc3ViYXJyYXlfc29ydGVkID0gZXZlbnQoKQotICAgICAgICByX3N1YmFycmF5X3NvcnRlZCA9IGV2ZW50KCkKLSAgICAgICAgX25ld190aHJlYWQoX3Fzb3J0LCBhLCBsLCBqLTEsIGxfc3ViYXJyYXlfc29ydGVkKQotICAgICAgICBfbmV3X3RocmVhZChfcXNvcnQsIGEsIGosIHIsICAgcl9zdWJhcnJheV9zb3J0ZWQpCi0gICAgICAgIGxfc3ViYXJyYXlfc29ydGVkLndhaXQoKQotICAgICAgICByX3N1YmFycmF5X3NvcnRlZC53YWl0KCkKLQotICAgIGlvLmFjcXVpcmUoKTsgcHJpbnQoJ3RocmVhZCcsIHRpZCwgJ3Fzb3J0IGRvbmUnKTsgXAotICAgICAgICAgICAgICAgICAgYWxpdmUucmVtb3ZlKHRpZCk7IGlvLnJlbGVhc2UoKQotICAgIGZpbmlzaGVkLnBvc3QoKQotCi1kZWYgX3JhbmRhcnJheSh0aWQsIGEsIGZpbmlzaGVkKToKLSAgICBpby5hY3F1aXJlKCk7IHByaW50KCd0aHJlYWQnLCB0aWQsICdyYW5kb21pemluZyBhcnJheScpOyBcCi0gICAgICAgICAgICAgICAgICBpby5yZWxlYXNlKCkKLSAgICBmb3IgaSBpbiByYW5nZSgxLCBsZW4oYSkpOgotICAgICAgICB3aC5hY3F1aXJlKCk7IGogPSByYW5kaW50KDAsaSk7IHdoLnJlbGVhc2UoKQotICAgICAgICBhW2ldLCBhW2pdID0gYVtqXSwgYVtpXQotICAgIGlvLmFjcXVpcmUoKTsgcHJpbnQoJ3RocmVhZCcsIHRpZCwgJ3JhbmRvbWl6aW5nIGRvbmUnKTsgXAotICAgICAgICAgICAgICAgICAgYWxpdmUucmVtb3ZlKHRpZCk7IGlvLnJlbGVhc2UoKQotICAgIGZpbmlzaGVkLnBvc3QoKQotCi1kZWYgX2NoZWNrX3NvcnQoYSk6Ci0gICAgaWYgYSAhPSByYW5nZShsZW4oYSkpOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdhIG5vdCBzb3J0ZWQnLCBhKQotCi1kZWYgX3J1bl9vbmVfc29ydCh0aWQsIGEsIGJhciwgZG9uZSk6Ci0gICAgIyByYW5kb21pemUgYSwgYW5kIHF1aWNrc29ydCBpdAotICAgICMgZm9yIHZhcmlldHksIGFsbCB0aGUgdGhyZWFkcyBydW5uaW5nIHRoaXMgZW50ZXIgYSBiYXJyaWVyCi0gICAgIyBhdCB0aGUgZW5kLCBhbmQgcG9zdCBgZG9uZScgYWZ0ZXIgdGhlIGJhcnJpZXIgZXhpdHMKLSAgICBpby5hY3F1aXJlKCk7IHByaW50KCd0aHJlYWQnLCB0aWQsICdyYW5kb21pemluZycsIGEpOyBcCi0gICAgICAgICAgICAgICAgICBpby5yZWxlYXNlKCkKLSAgICBmaW5pc2hlZCA9IGV2ZW50KCkKLSAgICBfbmV3X3RocmVhZChfcmFuZGFycmF5LCBhLCBmaW5pc2hlZCkKLSAgICBmaW5pc2hlZC53YWl0KCkKLQotICAgIGlvLmFjcXVpcmUoKTsgcHJpbnQoJ3RocmVhZCcsIHRpZCwgJ3NvcnRpbmcnLCBhKTsgaW8ucmVsZWFzZSgpCi0gICAgZmluaXNoZWQuY2xlYXIoKQotICAgIF9uZXdfdGhyZWFkKF9xc29ydCwgYSwgMCwgbGVuKGEpLCBmaW5pc2hlZCkKLSAgICBmaW5pc2hlZC53YWl0KCkKLSAgICBfY2hlY2tfc29ydChhKQotCi0gICAgaW8uYWNxdWlyZSgpOyBwcmludCgndGhyZWFkJywgdGlkLCAnZW50ZXJpbmcgYmFycmllcicpOyBcCi0gICAgICAgICAgICAgICAgICBpby5yZWxlYXNlKCkKLSAgICBiYXIuZW50ZXIoKQotICAgIGlvLmFjcXVpcmUoKTsgcHJpbnQoJ3RocmVhZCcsIHRpZCwgJ2xlYXZpbmcgYmFycmllcicpOyBcCi0gICAgICAgICAgICAgICAgICBpby5yZWxlYXNlKCkKLSAgICBpby5hY3F1aXJlKCk7IGFsaXZlLnJlbW92ZSh0aWQpOyBpby5yZWxlYXNlKCkKLSAgICBiYXIuZW50ZXIoKSAjIG1ha2Ugc3VyZSB0aGV5J3ZlIGFsbCByZW1vdmVkIHRoZW1zZWx2ZXMgZnJvbSBhbGl2ZQotICAgICAgICAgICAgICAgICMjICBiZWZvcmUgJ2RvbmUnIGlzIHBvc3RlZAotICAgIGJhci5lbnRlcigpICMganVzdCB0byBiZSBjcnVlbAotICAgIGRvbmUucG9zdCgpCi0KLWRlZiB0ZXN0KCk6Ci0gICAgZ2xvYmFsIFRJRCwgdGlkLCBpbywgd2gsIHJhbmRpbnQsIGFsaXZlCi0gICAgaW1wb3J0IHJhbmRvbQotICAgIHJhbmRpbnQgPSByYW5kb20ucmFuZGludAotCi0gICAgVElEID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aHJlYWQgSUQgKDEsIDIsIC4uLikKLSAgICB0aWQgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpICAgICAgICAjIGZvciBjaGFuZ2luZyBUSUQKLSAgICBpbyAgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpICAgICAgICAjIGZvciBwcmludGluZywgYW5kICdhbGl2ZScKLSAgICB3aCAgPSB0aHJlYWQuYWxsb2NhdGVfbG9jaygpICAgICAgICAjIGZvciBjYWxscyB0byByYW5kb20KLSAgICBhbGl2ZSA9IFtdICAgICAgICAgICAgICAgICAgICAgICAgICAjIElEcyBvZiBhY3RpdmUgdGhyZWFkcwotCi0gICAgTlNPUlRTID0gNQotICAgIGFycmF5cyA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoTlNPUlRTKToKLSAgICAgICAgYXJyYXlzLmFwcGVuZCggcmFuZ2UoIChpKzEpKjEwICkgKQotCi0gICAgYmFyID0gYmFycmllcihOU09SVFMpCi0gICAgZmluaXNoZWQgPSBldmVudCgpCi0gICAgZm9yIGkgaW4gcmFuZ2UoTlNPUlRTKToKLSAgICAgICAgX25ld190aHJlYWQoX3J1bl9vbmVfc29ydCwgYXJyYXlzW2ldLCBiYXIsIGZpbmlzaGVkKQotICAgIGZpbmlzaGVkLndhaXQoKQotCi0gICAgcHJpbnQoJ2FsbCB0aHJlYWRzIGRvbmUsIGFuZCBjaGVja2luZyByZXN1bHRzIC4uLicpCi0gICAgaWYgYWxpdmU6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3RocmVhZHMgc3RpbGwgYWxpdmUgYXQgZW5kJywgYWxpdmUpCi0gICAgZm9yIGkgaW4gcmFuZ2UoTlNPUlRTKToKLSAgICAgICAgYSA9IGFycmF5c1tpXQotICAgICAgICBpZiBsZW4oYSkgIT0gKGkrMSkqMTA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdsZW5ndGggb2YgYXJyYXknLCBpLCAnc2NyZXdlZCB1cCcpCi0gICAgICAgIF9jaGVja19zb3J0KGEpCi0KLSAgICBwcmludCgndGVzdCBwYXNzZWQhJywgVElELCAndGhyZWFkcyBjcmVhdGVkIGluIGFsbCcpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdCgpCi0KLSMgZW5kIG9mIG1vZHVsZQpkaWZmIC0tZ2l0IGEvRGVtby90aHJlYWRzL3RlbG5ldC5weSBiL0RlbW8vdGhyZWFkcy90ZWxuZXQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZTQ5MDUuLjAwMDAwMDAKLS0tIGEvRGVtby90aHJlYWRzL3RlbG5ldC5weQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0jIE1pbmltYWwgaW50ZXJmYWNlIHRvIHRoZSBJbnRlcm5ldCB0ZWxuZXQgcHJvdG9jb2wuCi0jCi0jICoqKiBtb2RpZmllZCB0byB1c2UgdGhyZWFkcyAqKioKLSMKLSMgSXQgcmVmdXNlcyBhbGwgdGVsbmV0IG9wdGlvbnMgYW5kIGRvZXMgbm90IHJlY29nbml6ZSBhbnkgb2YgdGhlIG90aGVyCi0jIHRlbG5ldCBjb21tYW5kcywgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIHRvIGNvbm5lY3QgaW4gbGluZS1ieS1saW5lIG1vZGUuCi0jIEl0J3MgYWxzbyB1c2VmdWwgdG8gcGxheSB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIHNlcnZpY2VzLAotIyBsaWtlIHRpbWUsIGZpbmdlciwgc210cCBhbmQgZXZlbiBmdHAuCi0jCi0jIFVzYWdlOiB0ZWxuZXQgaG9zdCBbcG9ydF0KLSMKLSMgVGhlIHBvcnQgbWF5IGJlIGEgc2VydmljZSBuYW1lIG9yIGEgZGVjaW1hbCBwb3J0IG51bWJlcjsKLSMgaXQgZGVmYXVsdHMgdG8gJ3RlbG5ldCcuCi0KLQotaW1wb3J0IHN5cywgb3MsIHRpbWUKLWZyb20gc29ja2V0IGltcG9ydCAqCi1pbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKLQotQlVGU0laRSA9IDgqMTAyNAotCi0jIFRlbG5ldCBwcm90b2NvbCBjaGFyYWN0ZXJzCi0KLUlBQyAgPSBjaHIoMjU1KSAjIEludGVycHJldCBhcyBjb21tYW5kCi1ET05UID0gY2hyKDI1NCkKLURPICAgPSBjaHIoMjUzKQotV09OVCA9IGNocigyNTIpCi1XSUxMID0gY2hyKDI1MSkKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgndXNhZ2U6IHRlbG5ldCBob3N0bmFtZSBbcG9ydF1cbicpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgaG9zdCA9IHN5cy5hcmd2WzFdCi0gICAgdHJ5OgotICAgICAgICBob3N0YWRkciA9IGdldGhvc3RieW5hbWUoaG9zdCkKLSAgICBleGNlcHQgZXJyb3I6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc3lzLmFyZ3ZbMV0gKyAnOiBiYWQgaG9zdCBuYW1lXG4nKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgICMKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMjoKLSAgICAgICAgc2Vydm5hbWUgPSBzeXMuYXJndlsyXQotICAgIGVsc2U6Ci0gICAgICAgIHNlcnZuYW1lID0gJ3RlbG5ldCcKLSAgICAjCi0gICAgaWYgJzAnIDw9IHNlcnZuYW1lWzoxXSA8PSAnOSc6Ci0gICAgICAgIHBvcnQgPSBldmFsKHNlcnZuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBvcnQgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCAndGNwJykKLSAgICAgICAgZXhjZXB0IGVycm9yOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShzZXJ2bmFtZSArICc6IGJhZCB0Y3Agc2VydmljZSBuYW1lXG4nKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICAjCi0gICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSkKLSAgICAjCi0gICAgdHJ5OgotICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQotICAgIGV4Y2VwdCBlcnJvciBhcyBtc2c6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ2Nvbm5lY3QgZmFpbGVkOiAlclxuJyAlIChtc2csKSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAjCi0gICAgdGhyZWFkLnN0YXJ0X25ldyhjaGlsZCwgKHMsKSkKLSAgICBwYXJlbnQocykKLQotZGVmIHBhcmVudChzKToKLSAgICAjIHJlYWQgc29ja2V0LCB3cml0ZSBzdGRvdXQKLSAgICBpYWMgPSAwICAgICAgICAgIyBJbnRlcnByZXQgbmV4dCBjaGFyIGFzIGNvbW1hbmQKLSAgICBvcHQgPSAnJyAgICAgICAgIyBJbnRlcnByZXQgbmV4dCBjaGFyIGFzIG9wdGlvbgotICAgIHdoaWxlIDE6Ci0gICAgICAgIGRhdGEsIGR1bW15ID0gcy5yZWN2ZnJvbShCVUZTSVpFKQotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICMgRU9GIC0tIGV4aXQKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICcoQ2xvc2VkIGJ5IHJlbW90ZSBob3N0KVxuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgIGNsZWFuZGF0YSA9ICcnCi0gICAgICAgIGZvciBjIGluIGRhdGE6Ci0gICAgICAgICAgICBpZiBvcHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnQob3JkKGMpKQotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAnKHJlcGx5aW5nOiAlciknICUgKG9wdCtjLCkKLSAgICAgICAgICAgICAgICBzLnNlbmQob3B0ICsgYykKLSAgICAgICAgICAgICAgICBvcHQgPSAnJwotICAgICAgICAgICAgZWxpZiBpYWM6Ci0gICAgICAgICAgICAgICAgaWFjID0gMAotICAgICAgICAgICAgICAgIGlmIGMgPT0gSUFDOgotICAgICAgICAgICAgICAgICAgICBjbGVhbmRhdGEgPSBjbGVhbmRhdGEgKyBjCi0gICAgICAgICAgICAgICAgZWxpZiBjIGluIChETywgRE9OVCk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gRE86IHByaW50KCcoRE8pJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgZWxzZTogcHJpbnQoJyhET05UKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgICAgIG9wdCA9IElBQyArIFdPTlQKLSAgICAgICAgICAgICAgICBlbGlmIGMgaW4gKFdJTEwsIFdPTlQpOgotICAgICAgICAgICAgICAgICAgICBpZiBjID09IFdJTEw6IHByaW50KCcoV0lMTCknLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgICAgICBlbHNlOiBwcmludCgnKFdPTlQpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICAgICAgb3B0ID0gSUFDICsgRE9OVAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoY29tbWFuZCknLCBvcmQoYykpCi0gICAgICAgICAgICBlbGlmIGMgPT0gSUFDOgotICAgICAgICAgICAgICAgIGlhYyA9IDEKLSAgICAgICAgICAgICAgICBwcmludCgnKElBQyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjbGVhbmRhdGEgPSBjbGVhbmRhdGEgKyBjCi0gICAgICAgIHN5cy5zdGRvdXQud3JpdGUoY2xlYW5kYXRhKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSMjICAgICAgICAgICAgICBwcmludCAnT3V0OicsIHJlcHIoY2xlYW5kYXRhKQotCi1kZWYgY2hpbGQocyk6Ci0gICAgIyByZWFkIHN0ZGluLCB3cml0ZSBzb2NrZXQKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSMjICAgICAgICAgICAgICBwcmludCAnR290OicsIHJlcHIobGluZSkKLSAgICAgICAgaWYgbm90IGxpbmU6IGJyZWFrCi0gICAgICAgIHMuc2VuZChsaW5lKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L0lOU1RBTEwudHh0IGIvRGVtby90aXgvSU5TVEFMTC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzBiNjguLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvSU5TVEFMTC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0kSWQkCi0KLUluc3RhbGxpbmcgVGl4LnB5Ci0tLS0tLS0tLS0tLS0tLS0tCi0KLTApIFRvIHVzZSBUaXgucHksIHlvdSBuZWVkIFRjbC9UayAoVjguMy4zKSwgVGl4IChWOC4xLjEpIGFuZCBQeXRob24gKFYyLjEuMSkuCi0gICBUaXgucHkgaGFzIGJlZW4gd3JpdHRlbiBhbmQgdGVzdGVkIG9uIGEgSW50ZWwgUGVudGl1bSBydW5uaW5nIFJIIExpbnV4IDUuMgotICAgYW5kIE1hbmRyYWtlIExpbnV4IDcuMCBhbmQgV2luZG93cyB3aXRoIHRoZSBhYm92ZSBtZW50aW9uZWQgcGFja2FnZXMuCi0KLSAgIE9sZGVyIHZlcnNpb25zLCBlLmcuIFRpeCA0LjEgYW5kIFRrIDguMCwgbWlnaHQgYWxzbyB3b3JrLgotCi0gICBUaGVyZSBpcyBub3RoaW5nIE9TLXNwZWNpZmljIGluIFRpeC5weSBpdHNlbGYgc28gaXQgc2hvdWxkIHdvcmsgb24KLSAgIGFueSBtYWNoaW5lIHdpdGggVGl4IGFuZCBQeXRob24gaW5zdGFsbGVkLiBZb3UgY2FuIGdldCBUY2wgYW5kIFRrCi0gICBmcm9tIGh0dHA6Ly9kZXYuc2NyaXB0aWNzLmNvbSBhbmQgVGl4IGZyb20gaHR0cDovL3RpeC5zb3VyY2Vmb3JnZS5uZXQuCi0KLTEpIEJ1aWxkIGFuZCBpbnN0YWxsIFRjbC9UayA4LjMuIEJ1aWxkIGFuZCBpbnN0YWxsIFRpeCA4LjEuCi0gICBFbnN1cmUgdGhhdCBUaXggaXMgcHJvcGVybHkgaW5zdGFsbGVkIGJ5IHJ1bm5pbmcgdGl4d2lzaCBhbmQgZXhlY3V0aW5nCi0gICB0aGUgZGVtbyBwcm9ncmFtcy4gVW5kZXIgVW5peCwgdXNlIHRoZSAtLWVuYWJsZS1zaGFyZWQgY29uZmlndXJlIG9wdGlvbgotICAgZm9yIGFsbCB0aHJlZS4gV2UgcmVjb21tZW5kIHRjbDguMy4zIGZvciB0aGlzIHJlbGVhc2Ugb2YgVGl4LnB5LgotCi0yYSkgSWYgeW91IGhhdmUgYSBkaXN0cmlidXRpb24gbGlrZSBBY3RpdmVTdGF0ZSB3aXRoIGEgdGNsIHN1YmRpcmVjdG9yeQotICAgb2YgJFBZVEhPTkhPTUUsIHdoaWNoIGNvbnRhaW5zIHRoZSBkaXJlY3RvcmllcyB0Y2w4LjMgYW5kIHRrOC4zLAotICAgbWFrZSBhIGRpcmVjdG9yeSB0aXg4LjEgYXMgd2VsbC4gUmVjdXJzaXZlbHkgY29weSB0aGUgZmlsZXMgZnJvbQotICAgPHRpeD4vbGlicmFyeSB0byAkUFlUSE9OSE9NRS9saWIvdGl4OC4xLCBhbmQgY29weSB0aGUgZHluYW1pYyBsaWJyYXJ5Ci0gICAodGl4ODE4My5kbGwgb3IgbGlidGl4OC4xLjguMy5zbykgdG8gdGhlIHNhbWUgcGxhY2UgYXMgdGhlIHRjbCBkeW5hbWljCi0gICBsaWJyYXJpZXMgICgkUFlUSE9OSE9NRS9EbGxzIG9yIGxpYi9weXRob24tMi4xL2xpYi1keW5sb2FkKS4gSW4gdGhpcwotICAgY2FzZSB5b3UgYXJlIGFsbCBpbnN0YWxsZWQsIGFuZCB5b3UgY2FuIHNraXAgdG8gdGhlIGVuZC4KLQotMmIpIE1vZGlmeSBNb2R1bGVzL1NldHVwLmRpc3QgYW5kIHNldHVwLnB5IHRvIGNoYW5nZSB0aGUgdmVyc2lvbiBvZiB0aGUgCi0gICB0aXggbGlicmFyeSBmcm9tIHRpeDQuMS44LjAgdG8gdGl4OC4xLjguMwotICAgVGhlc2UgbW9kaWZpZWQgZmlsZXMgY2FuIGJlIHVzZWQgZm9yIFRraW50ZXIgd2l0aCBvciB3aXRob3V0IFRpeC4KLSAgIAotMykgVGhlIGRlZmF1bHQgaXMgdG8gYnVpbGQgZHluYW1pY2FsbHksIGFuZCB1c2UgdGhlIFRjbCAncGFja2FnZSByZXF1aXJlJy4KLSAgIFRvIGJ1aWxkIHN0YXRpY2FsbHksIG1vZGlmeSB0aGUgTW9kdWxlcy9TZXR1cCBmaWxlIHRvIGxpbmsgaW4gdGhlIFRpeCAKLSAgIGxpYnJhcnkgYWNjb3JkaW5nIHRvIHRoZSBjb21tZW50cyBpbiB0aGUgZmlsZS4gT24gTGludXggdGhpcyBsb29rcyBsaWtlOgotCi0jICoqKiBBbHdheXMgdW5jb21tZW50IHRoaXMgKGxlYXZlIHRoZSBsZWFkaW5nIHVuZGVyc2NvcmUgaW4hKToKLV90a2ludGVyIF90a2ludGVyLmMgdGthcHBpbml0LmMgLURXSVRIX0FQUElOSVQgXAotIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IHRvIHJlZmxlY3Qgd2hlcmUgeW91ciBUY2wvVGsgbGlicmFyaWVzIGFyZToKLQktTC91c3IvbG9jYWwvbGliIFwKLSMgKioqIFVuY29tbWVudCBhbmQgZWRpdCB0byByZWZsZWN0IHdoZXJlIHlvdXIgVGNsL1RrIGhlYWRlcnMgYXJlOgotCS1JL3Vzci9sb2NhbC9pbmNsdWRlIFwKLSMgKioqIFVuY29tbWVudCBhbmQgZWRpdCB0byByZWZsZWN0IHdoZXJlIHlvdXIgWDExIGhlYWRlciBmaWxlcyBhcmU6Ci0JLUkvdXNyL1gxMVI2L2luY2x1ZGUgXAotIyAqKiogT3IgdW5jb21tZW50IHRoaXMgZm9yIFNvbGFyaXM6Ci0jCS1JL3Vzci9vcGVud2luL2luY2x1ZGUgXAotIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IGZvciBCTFQgZXh0ZW5zaW9uIG9ubHk6Ci0jCS1EV0lUSF9CTFQgLUkvdXNyL2xvY2FsL2JsdC9ibHQ4LjAtdW5vZmYvaW5jbHVkZSAtbEJMVDguMCBcCi0jICoqKiBVbmNvbW1lbnQgYW5kIGVkaXQgZm9yIFBJTCAoVGtJbWFnaW5nKSBleHRlbnNpb24gb25seToKLSMgICAgIChTZWUgaHR0cDovL3d3dy5weXRob253YXJlLmNvbS9wcm9kdWN0cy9waWwvIGZvciBtb3JlIGluZm8pCi0jCS1EV0lUSF9QSUwgLUkuLi9FeHRlbnNpb25zL0ltYWdpbmcvbGliSW1hZ2luZyAgdGtJbWFnaW5nLmMgXAotIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IGZvciBUT0dMIGV4dGVuc2lvbiBvbmx5OgotIwktRFdJVEhfVE9HTCB0b2dsLmMgXAotIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IGZvciBUaXggZXh0ZW5zaW9uIG9ubHk6Ci0JLURXSVRIX1RJWCAtbHRpeDguMS44LjMgXAotIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IHRvIHJlZmxlY3QgeW91ciBUY2wvVGsgdmVyc2lvbnM6Ci0JLWx0azguMyAtbHRjbDguMyBcCi0jICoqKiBVbmNvbW1lbnQgYW5kIGVkaXQgdG8gcmVmbGVjdCB3aGVyZSB5b3VyIFgxMSBsaWJyYXJpZXMgYXJlOgotCS1ML3Vzci9YMTFSNi9saWIgXAotIyAqKiogT3IgdW5jb21tZW50IHRoaXMgZm9yIFNvbGFyaXM6Ci0jCS1ML3Vzci9vcGVud2luL2xpYiBcCi0jICoqKiBVbmNvbW1lbnQgdGhlc2UgZm9yIFRPR0wgZXh0ZW5zaW9uIG9ubHk6Ci0jCS1sR0wgLWxHTFUgLWxYZXh0IC1sWG11IFwKLSMgKioqIFVuY29tbWVudCBmb3IgQUlYOgotIwktbGxkIFwKLSMgKioqIEFsd2F5cyB1bmNvbW1lbnQgdGhpczsgWDExIGxpYnJhcmllcyB0byBsaW5rIHdpdGg6Ci0JLWxYMTEKLQotNCkgUmVidWlsZCBQeXRob24gYW5kIHJlaW5zdGFsbC4KLQotWW91IHNob3VsZCBub3cgaGF2ZSBhIHdvcmtpbmcgVGl4IGltcGxlbWVudGF0aW9uIGluIFB5dGhvbi4gVG8gc2VlIGlmIGFsbAotaXMgYXMgaXQgc2hvdWxkIGJlLCBydW4gdGhlICd0aXh3aWRnZXRzLnB5JyBzY3JpcHQgaW4gdGhlIERlbW8vdGl4IGRpcmVjdG9yeS4KLVVuZGVyIFggd2luZG93cywgZG8KLQkvdXNyL2xvY2FsL2Jpbi9weXRob24gRGVtby90aXgvdGl4d2lkZ2V0cy5weQotCi1JZiB0aGlzIGRvZXMgbm90IHdvcmssIHlvdSBtYXkgbmVlZCB0byB0ZWxsIHB5dGhvbiB3aGVyZSB0byBmaW5kCi10aGUgVGNsLCBUayBhbmQgVGl4IGxpYnJhcnkgZmlsZXMuIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZQotVENMX0xJQlJBUlksIFRLX0xJQlJBUlkgYW5kIFRJWF9MSUJSQVJZIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVHJ5IHRoaXM6Ci0KLQllbnYgCVRDTF9MSUJSQVJZPS91c3IvbG9jYWwvbGliL3RjbDguMyBcCi0JCVRLX0xJQlJBUlk9L3Vzci9sb2NhbC9saWIvdGs4LjMgXAotCQlUSVhfTElCUkFSWT0vdXNyL2xvY2FsL2xpYi90aXg4LjEgXAotCQkvdXNyL2xvY2FsL2Jpbi9weXRob24gRGVtby90aXgvdGl4d2lkZ2V0cy5weQotCi0KLUlmIHlvdSBmaW5kIGFueSBidWdzIG9yIGhhdmUgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50LCBwbGVhc2UgcmVwb3J0IHRoZW0KLXZpYSBodHRwOi8vdGl4LnNvdXJjZWZvcmdlLm5ldAotCi0KZGlmZiAtLWdpdCBhL0RlbW8vdGl4L1JFQURNRS50eHQgYi9EZW1vL3RpeC9SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDE5NmFjLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L1JFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi1BYm91dCBUaXgucHkKLS0tLS0tLS0tLS0tCi0KLVRpeC5weSBpcyBiYXNlZCBvbiBhbiBpZGVhIG9mIEplYW4tTWFyYyBMdWdyaW4gKGx1Z3JpbkBtcy5jb20pIHdobyB3cm90ZQotcHl0aXggKGFub3RoZXIgUHl0aG9uLVRpeCBtYXJyaWFnZSkuIFRpeCB3aWRnZXRzIGFyZSBhbiBhdHRyYWN0aXZlIGFuZAotdXNlZnVsIGV4dGVuc2lvbiB0byBUay4gU2VlIGh0dHA6Ly90aXguc291cmNlZm9yZ2UubmV0Ci1mb3IgbW9yZSBkZXRhaWxzIGFib3V0IFRpeCBhbmQgaG93IHRvIGdldCBpdC4KLQotRmVhdHVyZXM6Ci0JMSkgSXQgaXMgYWxtb3N0IGNvbXBsZXRlLgotCTIpIFRpeCB3aWRnZXRzIGFyZSByZXByZXNlbnRlZCBieSBjbGFzc2VzIGluIFB5dGhvbi4gU3ViLXdpZGdldHMKLQkgICBhcmUgbWVtYmVycyBvZiB0aGUgbWVnYS13aWRnZXQgY2xhc3MuIEZvciBleGFtcGxlLCBpZiBhCi0JICAgcGFydGljdWxhciBUaXhXaWRnZXQgKGUuZy4gU2Nyb2xsZWRUZXh0KSBoYXMgYW4gZW1iZWRkZWQgd2lkZ2V0Ci0JICAgKFRleHQgaW4gdGhpcyBjYXNlKSwgaXQgaXMgcG9zc2libGUgdG8gY2FsbCB0aGUgbWV0aG9kcyBvZiB0aGUKLQkgICBjaGlsZCBkaXJlY3RseS4KLQkzKSBUaGUgbWVtYmVycyBvZiB0aGUgY2xhc3MgYXJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS4gSW4gdGhlIGNhc2UKLQkgICBvZiB3aWRnZXRzIGxpa2UgQnV0dG9uQm94LCB0aGUgbWVtYmVycyBhcmUgYWRkZWQgZHluYW1pY2FsbHkuCi0KLQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9hYm91dC54cG0gYi9EZW1vL3RpeC9iaXRtYXBzL2Fib3V0LnhwbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzNmZmNjMC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2Fib3V0LnhwbQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qIFhQTSAqLwotc3RhdGljIGNoYXIgKiBhYm91dF94cG1bXSA9IHsKLSI1MCA0MCA3IDEiLAotIiAJcyBOb25lCWMgTm9uZSIsCi0iLgljIGJsYWNrIiwKLSJYCWMgd2hpdGUiLAotIm8JYyBncmF5NzAiLAotIk8JYyBuYXZ5IiwKLSIrCWMgcmVkIiwKLSJACWMgeWVsbG93IiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgICAgICAgICIsCi0iICAgICAgLi5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvby4gICAgICAgICAiLAotIiAgICAgIC5Yb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vWG8uICAgICAgICAgIiwKLSIgICAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvb1hvLiAgICAgICAgICIsCi0iICAgICAuLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29Yby4gICAgICAgICAiLAotIiAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG9Yby4rKysrICAgICAiLAotIiAgICAgLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvWG8rKysgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5YbysrKysrICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG8rKysrKysgICAgICAiLAotIiAgICAgLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvKysrICAgKyAgICAgIiwKLSIgICAgIC5PT09PT0BAQEBAT09PT09PT09PT09PT09PT09PTy5YbysrLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT0BPT09PT0BPT09PT09PT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09AT09PT09PT09PT09PT09PT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PQE9PT09AQE9PT0BPT09AT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT0BPT09PT0BPT09PQE9AT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09AT09PT09AT09PT09AT09PT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PQE9PT09PQE9PT09PQE9PT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT0BPT09PT0BPT09PQE9AT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09AT09PT0BAQE9PQE9PT0BPT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5Yb1hvLiAgICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG9Yby4gICAgICAgICAiLAotIiAgICAgLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvWG8uICAgICAgICAgIiwKLSIgICAgIC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PTy5Yby4uICAgICAgICAgICIsCi0iICAgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG8gICAgICAgICAgICAiLAotIiAgICAgIE9PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlguICAgICAgICAgICAgIiwKLSIgICAgICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9ib2xkLnhibSBiL0RlbW8vdGl4L2JpdG1hcHMvYm9sZC54Ym0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGViZmY4ZDEuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy9ib2xkLnhibQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSBib2xkX3dpZHRoIDE2Ci0jZGVmaW5lIGJvbGRfaGVpZ2h0IDE2Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBib2xkX2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4MDcsIDB4ZmMsIDB4MGYsIDB4MTgsIDB4MWMsIDB4MTgsIDB4MTgsCi0gICAweDE4LCAweDE4LCAweDE4LCAweDFjLCAweGY4LCAweDBmLCAweGY4LCAweDBmLCAweDE4LCAweDE4LCAweDE4LCAweDMwLAotICAgMHgxOCwgMHgzMCwgMHgxOCwgMHgzOCwgMHhmYywgMHgzZiwgMHhmYywgMHgxZn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL2NhcGl0YWwueGJtIGIvRGVtby90aXgvYml0bWFwcy9jYXBpdGFsLnhibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmI0ZTA3MC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2NhcGl0YWwueGJtCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5lIGNhcGl0YWxfd2lkdGggMTYKLSNkZWZpbmUgY2FwaXRhbF9oZWlnaHQgMTYKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhcGl0YWxfYml0c1tdID0gewotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHgwOCwgMHgzMCwgMHgwYywgMHgzMCwgMHgwNiwKLSAgIDB4MzAsIDB4MDMsIDB4YjAsIDB4MDEsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4YjAsIDB4MDMsCi0gICAweDMwLCAweDA3LCAweDMwLCAweDBlLCAweDMwLCAweDFjLCAweDAwLCAweDAwfTsKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L2JpdG1hcHMvY2VudGVyai54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2NlbnRlcmoueGJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5ZDJjMDY0Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvY2VudGVyai54Ym0KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNkZWZpbmUgY2VudGVyal93aWR0aCAxNgotI2RlZmluZSBjZW50ZXJqX2hlaWdodCAxNgotc3RhdGljIHVuc2lnbmVkIGNoYXIgY2VudGVyal9iaXRzW10gPSB7Ci0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYwLCAweDNlLCAweDAwLCAweDAwLCAweGMwLCAweDBkLAotICAgMHgwMCwgMHgwMCwgMHg1OCwgMHg3NywgMHgwMCwgMHgwMCwgMHhiMCwgMHgzYiwgMHgwMCwgMHgwMCwgMHhkYywgMHhmNywKLSAgIDB4MDAsIDB4MDAsIDB4ZjAsIDB4M2UsIDB4MDAsIDB4MDAsIDB4ZDgsIDB4N2V9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9jb21ib2JveC54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2NvbWJvYm94LnhibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjU5NDdmNS4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2NvbWJvYm94LnhibQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNkZWZpbmUgY29tYm9ib3hfd2lkdGggMzIKLSNkZWZpbmUgY29tYm9ib3hfaGVpZ2h0IDMyCi1zdGF0aWMgdW5zaWduZWQgY2hhciBjb21ib2JveF9iaXRzW10gPSB7Ci0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHhmYywgMHhmZiwgMHhmZiwgMHgzZSwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyYSwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyYSwKLSAgIDB4MDQsIDB4MDAsIDB4ODAsIDB4MmEsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MmIsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4M2UsCi0gICAweDA4LCAweDAwLCAweDAwLCAweDIwLCAweDA4LCAweDAwLCAweDAwLCAweDNlLCAweDA4LCAweDAwLCAweDAwLCAweDJhLAotICAgMHgyOCwgMHg0OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgyMiwKLSAgIDB4MDgsIDB4MDAsIDB4MDAsIDB4MjIsIDB4MjgsIDB4NDksIDB4MTIsIDB4MjIsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MjIsCi0gICAweDA4LCAweDAwLCAweDAwLCAweDIyLCAweDA4LCAweDAwLCAweDAwLCAweDIyLCAweDI4LCAweDQ5LCAweDAyLCAweDIyLAotICAgMHgwOCwgMHgwMCwgMHgwMCwgMHgzZSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgyYSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgyYSwKLSAgIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL2NvbWJvYm94LnhwbSBiL0RlbW8vdGl4L2JpdG1hcHMvY29tYm9ib3gueHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkMDIzNGFiLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvY29tYm9ib3gueHBtCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyogWFBNICovCi1zdGF0aWMgY2hhciAqIGNvbWJvYm94X3hwbVtdID0gewotIjUwIDQwIDYgMSIsCi0iIAlzIE5vbmUJYyBOb25lIiwKLSIuCWMgYmxhY2siLAotIlgJYyB3aGl0ZSIsCi0ibwljICNGRkZGODA4MDgwODAiLAotIk8JYyBncmF5NzAiLAotIisJYyAjODA4MDAwMDA4MDgwIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIFhYWFhYWFggICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29YICBYICAuICAuICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vWCAgWCAgLiAgLiAgIiwKLSIgICAub29vby5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb1ggIFggIC4gIC4gICIsCi0iICAgLm9vLm8uLm9vLm8ub28uby5vb29vb29vb29vb29vb29vb29YICBYICAuICAuICAiLAotIiAgIC5vLi5vLm8uby5vby5vby5vby5vb29vb29vb29vb29vb29vWCAgWCAuLi4gLiAgIiwKLSIgICAub28ub28ub28uby5vby5vb28ub29vb29vb29vb29vb29vb1ggIFggIC4gIC4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29YICBYICAgICAuICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCAgWC4uLi4uLiAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggICIsCi0iICAgWC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAiLAotIiAgIFguT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09YLk9PT09YLiAgIiwKLSIgICBYLk8rT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PWC5PWCBPWC4gICIsCi0iICAgWC5PKytPT08rT08rKytPT09PT09PT09PT09PT09PT09PT09PT1guWCAuLlguICAiLAotIiAgIFguTytPK08rT09PK08rT09PT09PT09PT09PT09PT09PT09PT09YLk9PT09YLiAgIiwKLSIgICBYLk8rK09PTytPTysrK09PT09PT09PT09PT09PT09PT09PT09PWC5PT09PWC4gICIsCi0iICAgWC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1guWFhYWFguICAiLAotIiAgIFguTy4uLi4uWC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uT09YLlggIC5YLiAgIiwKLSIgICBYLk9YLi4uWFhYLlguWFguWFguLi4uLi4uLi4uLi4uLi4uLk9PWC5YICAuWC4gICIsCi0iICAgWC5PWC5YLi5YLi5YLlhYLi5YWC5YLi4uLi4uLi4uLi4uLi5PT1guWCAgLlguICAiLAotIiAgIFguTy5YLi4uWC4uWC5YLi4uWC4uWC4uLi4uLi4uLi4uLi4uT09YLlggIC5YLiAgIiwKLSIgICBYLk9PT09PT09PT09PT09PT09PT09PT09PTytPT09PT09PT09PWC5YICAuWC4gICIsCi0iICAgWC5PT09PT09PT08rT09PK09PT09PK09PT08rT09PT09PT09PT1guWCAgLlguICAiLAotIiAgIFguTysrK09PK09PK08rT08rK08rK09PK09PK09PT09PT09PT09YLlguLi5YLiAgIiwKLSIgICBYLk9PK09PKytPTytPK09PK09PTytPTytPKytPT09PT09PT09PWC5PT09PWC4gICIsCi0iICAgWC5PT09PT09PTytPT09PTysrT08rT09PT09PT09PT09PT09PT1guT09PT1guICAiLAotIiAgIFguT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09YLlggIC5YLiAgIiwKLSIgICBYLk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PWC5PIC5PWC4gICIsCi0iICAgWC5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1guT09PT1guICAiLAotIiAgIFguWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLlhYWFhYLiAgIiwKLSIgICBYLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9jb21ib2JveC54cG0uMSBiL0RlbW8vdGl4L2JpdG1hcHMvY29tYm9ib3gueHBtLjEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDYzNzkyYTQuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy9jb21ib2JveC54cG0uMQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qIFhQTSAqLwotc3RhdGljIGNoYXIgKiBjb21ib2JveF94cG1bXSA9IHsKLSI1MCA0MCA0IDEiLAotIiAJcyBOb25lCWMgTm9uZSIsCi0iLgljIGJsYWNrIiwKLSJYCWMgI0ZGRkY4MDgwODA4MCIsCi0ibwljIGdyYXk3MCIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAuLi4uLi4uICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLiAgLiAgLiAgLiAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWC4gIC4gIC4gIC4gICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFguICAuICAuICAuICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLiAgLiAgLiAgLiAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWC4gIC4gLi4uIC4gICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFguICAuICAuICAuICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLiAgLiAgICAgLiAgIiwKLSIgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIC4uLi4uLi4gICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC5vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5vLm9vb29vLiAgIiwKLSIgICAuby4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uby5vb29vby4gICIsCi0iICAgLm8uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLm8ub29vb28uICAiLAotIiAgIC5vLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5vLm9vb29vLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vLm9vb29vLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vLm9vb29vLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vLm9vb29vLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vLm9vb29vLiAgIiwKLSIgICAub29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5vb29vby4gICIsCi0iICAgLm9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28ub29vb28uICAiLAotIiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L2JpdG1hcHMvZHJpdmVhLnhibSBiL0RlbW8vdGl4L2JpdG1hcHMvZHJpdmVhLnhibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggODNjNjM2Yy4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2RyaXZlYS54Ym0KKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jZGVmaW5lIGRyaXZlYV93aWR0aCAzMgotI2RlZmluZSBkcml2ZWFfaGVpZ2h0IDMyCi1zdGF0aWMgdW5zaWduZWQgY2hhciBkcml2ZWFfYml0c1tdID0gewotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHhmOCwgMHhmZiwgMHhmZiwgMHgxZiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhhOCwgMHhhYSwgMHhhYSwgMHgxYSwKLSAgIDB4NDgsIDB4NTUsIDB4ZDUsIDB4MWQsIDB4YTgsIDB4YWEsIDB4YWEsIDB4MWIsIDB4NDgsIDB4NTUsIDB4NTUsIDB4MWQsCi0gICAweGE4LCAweGZhLCAweGFmLCAweDFhLCAweGM4LCAweGZmLCAweGZmLCAweDFkLCAweGE4LCAweGZhLCAweGFmLCAweDFhLAotICAgMHg0OCwgMHg1NSwgMHg1NSwgMHgxZCwgMHhhOCwgMHhhYSwgMHhhYSwgMHgxYSwgMHg0OCwgMHg1NSwgMHg1NSwgMHgxZCwKLSAgIDB4YTgsIDB4YWEsIDB4YWEsIDB4MWEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MWYsCi0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9kcml2ZWEueHBtIGIvRGVtby90aXgvYml0bWFwcy9kcml2ZWEueHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0ZDI3NGI5Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvZHJpdmVhLnhwbQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qIFhQTSAqLwotc3RhdGljIGNoYXIgKiBkcml2ZWFfeHBtW10gPSB7Ci0vKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjaGFyc19wZXJfcGl4ZWwgKi8KLSIzMiAzMiA1IDEiLAotLyogY29sb3JzICovCi0iIAlzIE5vbmUJYyBOb25lIiwKLSIuCWMgIzAwMDAwMDAwMDAwMCIsCi0iWAljIHdoaXRlIiwKLSJvCWMgI2MwMDBjMDAwYzAwMCIsCi0iTwljICM4MDAwODAwMDgwMDAiLAotLyogcGl4ZWxzICovCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vb29vb29PLiAgICIsCi0iICAgLlhvb29vb29vb29vb29vb29vby4ub29vTy4gICAiLAotIiAgIC5Yb29vb29vb29vb29vb29vb28uLm9vb08uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vb29vb29PLiAgICIsCi0iICAgLlhvb29vb29vby4uLi4uLi5vb29vb29vTy4gICAiLAotIiAgIC5Yb28uLi4uLi4uLi4uLi4uLi4uLi4ub08uICAgIiwKLSIgICAuWG9vb29vb29vLi4uLi4uLm9vb29vb29PLiAgICIsCi0iICAgLlhvb29vb29vb29vb29vb29vb29vb29vTy4gICAiLAotIiAgIC5Yb29vb29vb29vb29vb29vb29vb29vb08uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vb29vb29PLiAgICIsCi0iICAgLlhvb29vb29vb29vb29vb29vb29vb29vTy4gICAiLAotIiAgIC5vT09PT09PT09PT09PT09PT09PT09PT08uICAgIiwKLSIgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL2V4aXQueHBtIGIvRGVtby90aXgvYml0bWFwcy9leGl0LnhwbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTA1YTA3Yi4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2V4aXQueHBtCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogWFBNICovCi1zdGF0aWMgY2hhciAqIGV4aXRfeHBtW10gPSB7Ci0iNTAgNDAgNSAxIiwKLSIgCXMgTm9uZQljIE5vbmUiLAotIi4JYyBibGFjayIsCi0iWAljIHdoaXRlIiwKLSJvCWMgIzAwMDA4MDgwMDAwMCIsCi0iTwljIHllbGxvdyIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICAgICAiLAotIiAgICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFguICAgICAgIiwKLSIgICAgIC5Yb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb29vb29vb29vb29vb29vb29vb09vb29vb29vb29vb1guICAgICAgIiwKLSIgICAgIC5Yb29vb29vb29vb29vb29vb29vb29vb29PT29vb29vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vb29vb29vb29vb29vb29vb29vT09Pb29vb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb09PT09PT09PT09PT09PT09PT09PT09vb29vb29vb1guICAgICAgIiwKLSIgICAgIC5Yb29vb29PT09PT09PT09PT09PT09PT09PT09PT29vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vT09PT09PT09PT09PT09PT09PT09PT09Pb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb09PT09PT09PT09PT09PT09PT09PT09PT09vb29vb1guICAgICAgIiwKLSIgICAgIC5Yb29vb29PT09PT09PT09PT09PT09PT09PT09PT09vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vT09PT09PT09PT09PT09PT09PT09PT09vb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb09PT09PT09PT09PT09PT09PT09PT09vb29vb29vb1guICAgICAgIiwKLSIgICAgIC5Yb29vb29vb29vb29vb29vb29vb29vb29PT09vb29vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vb29vb29vb29vb29vb29vb29vT09vb29vb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb29vb29vb29vb29vb29vb29vb09vb29vb29vb29vb1guICAgICAgIiwKLSIgICAgIC5Yb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29YLiAgICAgICIsCi0iICAgICAuWG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vWC4gICAgICAiLAotIiAgICAgLlhvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb1guICAgICAgIiwKLSIgICAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYLiAgICAgICIsCi0iICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifTsKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L2JpdG1hcHMvZmlsZWJveC54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2ZpbGVib3gueGJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjOGY3YWMyLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvZmlsZWJveC54Ym0KKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0jZGVmaW5lIGZpbGVib3hfd2lkdGggMzIKLSNkZWZpbmUgZmlsZWJveF9oZWlnaHQgMzIKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGZpbGVib3hfYml0c1tdID0gewotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZmYsIDB4ZmYsIDB4M2YsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MjAsCi0gICAweGU0LCAweGZmLCAweGZmLCAweDI3LCAweDI0LCAweDAwLCAweDAwLCAweDI0LCAweDI0LCAweDAwLCAweDAwLCAweDI0LAotICAgMHhlNCwgMHhmZiwgMHhmZiwgMHgyNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwgMHhlNCwgMHg3ZiwgMHhmZSwgMHgyNywKLSAgIDB4MjQsIDB4NTAsIDB4MDIsIDB4MjUsIDB4MjQsIDB4NDAsIDB4MDIsIDB4MjQsIDB4MjQsIDB4NTAsIDB4MDIsIDB4MjUsCi0gICAweDI0LCAweDQwLCAweDAyLCAweDI0LCAweDI0LCAweDUwLCAweDAyLCAweDI1LCAweDI0LCAweDQwLCAweDAyLCAweDI0LAotICAgMHgyNCwgMHg1MCwgMHgwMiwgMHgyNSwgMHhlNCwgMHg3ZiwgMHhmZSwgMHgyNywgMHgwNCwgMHgwMCwgMHgwMCwgMHgyMCwKLSAgIDB4ZTQsIDB4ZmYsIDB4ZmYsIDB4MjcsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MjQsCi0gICAweGU0LCAweGZmLCAweGZmLCAweDI3LCAweDA0LCAweDAwLCAweDAwLCAweDIwLCAweGZjLCAweGZmLCAweGZmLCAweDNmLAotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9maWxlYm94LnhwbSBiL0RlbW8vdGl4L2JpdG1hcHMvZmlsZWJveC54cG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDczNzdlZTYuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy9maWxlYm94LnhwbQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIFhQTSAqLwotc3RhdGljIGNoYXIgKiBmaWxlYm94X3hwbVtdID0gewotIjUwIDQwIDYgMSIsCi0iIAlzIE5vbmUJYyBOb25lIiwKLSIuCWMgd2hpdGUiLAotIlgJYyBncmF5ODAiLAotIm8JYyBibGFjayIsCi0iTwljICNGRkZGODA4MDgwODAiLAotIisJYyBncmF5NzAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICIsCi0iICAgLlhYb29Yb29Yb1hvb1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAiLAotIiAgIC5YWG9vWG9vWG9Yb29YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICIsCi0iICAgLlhYb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5YWG8gICAiLAotIiAgIC5YWG9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWFhvICAgIiwKLSIgICAuWFhvT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhYbyAgICIsCi0iICAgLlhYLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5YWG8gICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICIsCi0iICAgLlhYb29vb29vb29vb29vb29vby5YWFhYb29vb29vb29vb29vb29vby5YWG8gICAiLAotIiAgIC5YWG8rKysrKysrKysrKysrKysuWFhYWG8rKysrKysrKysrKysrKysuWFhvICAgIiwKLSIgICAuWFhvKysrKysrKysrKysrKysrLlhYWFhvKysrKysrKysrKysrKysrLlhYbyAgICIsCi0iICAgLlhYbysrKysrKysrKysrKysrKy5YWFhYbysrKysrKysrKysrKysrKy5YWG8gICAiLAotIiAgIC5YWG8rKysrKysrKysrKysrKysuWFhYWG8rKysrKysrKysrKysrKysuWFhvICAgIiwKLSIgICAuWFhvKysrKysrKysrKysrKysrLlhYWFhvKysrKysrKysrKysrKysrLlhYbyAgICIsCi0iICAgLlhYbysrKysrKysrKysrKysrKy5YWFhYbysrKysrKysrKysrKysrKy5YWG8gICAiLAotIiAgIC5YWG8rKysrKysrKysrKysrKysuWFhYWG8rKysrKysrKysrKysrKysuWFhvICAgIiwKLSIgICAuWFhvKysrKysrKysrKysrKysrLlhYWFhvKysrKysrKysrKysrKysrLlhYbyAgICIsCi0iICAgLlhYbysrKysrKysrKysrKysrKy5YWFhYbysrKysrKysrKysrKysrKy5YWG8gICAiLAotIiAgIC5YWG8rKysrKysrKysrKysrKysuWFhYWG8rKysrKysrKysrKysrKysuWFhvICAgIiwKLSIgICAuWFhvKysrKysrKysrKysrKysrLlhYWFhvKysrKysrKysrKysrKysrLlhYbyAgICIsCi0iICAgLlhYLi4uLi4uLi4uLi4uLi4uLi5YWFhYLi4uLi4uLi4uLi4uLi4uLi5YWG8gICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgIiwKLSIgICAuWFhvb1hvb1hvWG9vWG9YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICIsCi0iICAgLlhYb29Yb29Yb1hvb1hvWG9vWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgIiwKLSIgICAuWFhvb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vby5YbyAgICIsCi0iICAgLlhYb09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT08uWG8gICAiLAotIiAgIC5YWG9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PLlhvICAgIiwKLSIgICAuWFguLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi5YbyAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAiLAotIiAgIC5vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL2l0YWxpYy54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2l0YWxpYy54Ym0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDE2OWMzY2IuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy9pdGFsaWMueGJtCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jZGVmaW5lIGl0YWxpY193aWR0aCAxNgotI2RlZmluZSBpdGFsaWNfaGVpZ2h0IDE2Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBpdGFsaWNfYml0c1tdID0gewotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgzZiwgMHg4MCwgMHgzZiwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwNiwKLSAgIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDMsIDB4ODAsIDB4MDEsIDB4ODAsIDB4MDEsIDB4YzAsIDB4MDAsIDB4YzAsIDB4MDAsCi0gICAweDYwLCAweDAwLCAweDYwLCAweDAwLCAweGZjLCAweDAxLCAweGZjLCAweDAxfTsKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L2JpdG1hcHMvanVzdGlmeS54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2p1c3RpZnkueGJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYmE2NjBhLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvanVzdGlmeS54Ym0KKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNkZWZpbmUganVzdGlmeV93aWR0aCAxNgotI2RlZmluZSBqdXN0aWZ5X2hlaWdodCAxNgotc3RhdGljIHVuc2lnbmVkIGNoYXIganVzdGlmeV9iaXRzW10gPSB7Ci0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGVjLCAweGRiLCAweDAwLCAweDAwLCAweDdjLCAweGRiLAotICAgMHgwMCwgMHgwMCwgMHhiYywgMHhmNywgMHgwMCwgMHgwMCwgMHhkYywgMHhkZSwgMHgwMCwgMHgwMCwgMHg2YywgMHhkZiwKLSAgIDB4MDAsIDB4MDAsIDB4NmMsIDB4ZWYsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4ZGZ9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9sZWZ0ai54Ym0gYi9EZW1vL3RpeC9iaXRtYXBzL2xlZnRqLnhibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNWY4ZTAwNi4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL2xlZnRqLnhibQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSBsZWZ0al93aWR0aCAxNgotI2RlZmluZSBsZWZ0al9oZWlnaHQgMTYKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGxlZnRqX2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4Y2MsIDB4NmQsIDB4MDAsIDB4MDAsIDB4ZGMsIDB4MDEsCi0gICAweDAwLCAweDAwLCAweGVjLCAweDBlLCAweDAwLCAweDAwLCAweGZjLCAweDdlLCAweDAwLCAweDAwLCAweGRjLCAweDAzLAotICAgMHgwMCwgMHgwMCwgMHg2YywgMHgzYiwgMHgwMCwgMHgwMCwgMHg2YywgMHgxZn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL25ldHcueGJtIGIvRGVtby90aXgvYml0bWFwcy9uZXR3LnhibQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTY4NGQ2NS4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL25ldHcueGJtCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotI2RlZmluZSBuZXR3X3dpZHRoIDMyCi0jZGVmaW5lIG5ldHdfaGVpZ2h0IDMyCi1zdGF0aWMgdW5zaWduZWQgY2hhciBuZXR3X2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsCi0gICAweDAwLCAweDAwLCAweGZhLCAweDVmLCAweDAwLCAweDAwLCAweDBhLCAweDUwLCAweDAwLCAweDAwLCAweDBhLCAweDUyLAotICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg1MiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwYSwgMHg1MCwKLSAgIDB4MDAsIDB4MDAsIDB4NGEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTAsCi0gICAweDAwLCAweDAwLCAweGZhLCAweDVmLCAweDAwLCAweDAwLCAweDAyLCAweDQwLCAweGZlLCAweDdmLCAweDUyLCAweDU1LAotICAgMHgwMiwgMHg0MCwgMHhhYSwgMHg2YSwgMHhmYSwgMHg1ZiwgMHhmZSwgMHg3ZiwgMHgwYSwgMHg1MCwgMHhmZSwgMHg3ZiwKLSAgIDB4MGEsIDB4NTIsIDB4ODAsIDB4MDAsIDB4MGEsIDB4NTIsIDB4ODAsIDB4MDAsIDB4OGEsIDB4NTEsIDB4ODAsIDB4MDAsCi0gICAweDBhLCAweDUwLCAweDgwLCAweDAwLCAweDRhLCAweDUwLCAweDgwLCAweDAwLCAweDBhLCAweDUwLCAweGUwLCAweDAzLAotICAgMHgwYSwgMHg1MCwgMHgyMCwgMHgwMiwgMHhmYSwgMHhkZiwgMHgzZiwgMHgwMywgMHgwMiwgMHg0MCwgMHhhMCwgMHgwMiwKLSAgIDB4NTIsIDB4NTUsIDB4ZTAsIDB4MDMsIDB4YWEsIDB4NmEsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsCi0gICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L2JpdG1hcHMvbmV0dy54cG0gYi9EZW1vL3RpeC9iaXRtYXBzL25ldHcueHBtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmZmY2NTkzLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvbmV0dy54cG0KKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKiBYUE0gKi8KLXN0YXRpYyBjaGFyICogbmV0d194cG1bXSA9IHsKLS8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNoYXJzX3Blcl9waXhlbCAqLwotIjMyIDMyIDcgMSIsCi0vKiBjb2xvcnMgKi8KLSIgCXMgTm9uZQljIE5vbmUiLAotIi4JYyAjMDAwMDAwMDAwMDAwIiwKLSJYCWMgd2hpdGUiLAotIm8JYyAjYzAwMGMwMDBjMDAwIiwKLSJPCWMgIzQwNDA0MCIsCi0iKwljIGJsdWUiLAotIkAJYyByZWQiLAotLyogcGl4ZWxzICovCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgLi4uLi4uLi4uLi4uLi4gIiwKLSIgICAgICAgICAgICAgICAgIC5YWFhYWFhYWFhYWFguICIsCi0iICAgICAgICAgICAgICAgICAuWG9vb29vb29vb29PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLi4uLi4uLlhvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby4rKysrbytYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG8uKysrK28rWG9PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLisrb28rK1hvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby4rKysrKytYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG8uK28rKysrWG9PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLisrKysrK1hvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby5YWFhYWFhYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG9vb29vb29vb29PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvQG9vby4uLi5vTy4gIiwKLSIgLi4uLi4uLi4uLi4uLi4gIC5Yb29vb29vb29vb08uICIsCi0iIC5YWFhYWFhYWFhYWFguICAuWG9vb29vb29vb29PLiAiLAotIiAuWG9vb29vb29vb29PLiAgLk9PT09PT09PT09PTy4gIiwKLSIgLlhvLi4uLi4uLlhvTy4gIC4uLi4uLi4uLi4uLi4uICIsCi0iIC5Yby4rKysrbytYb08uICAgICAgICBAICAgICAgICAiLAotIiAuWG8uKysrK28rWG9PLiAgICAgICAgQCAgICAgICAgIiwKLSIgLlhvLisrb28rK1hvTy4gICAgICAgIEAgICAgICAgICIsCi0iIC5Yby4rKysrKytYb08uICAgICAgICBAICAgICAgICAiLAotIiAuWG8uK28rKysrWG9PLiAgICAgICAgQCAgICAgICAgIiwKLSIgLlhvLisrKysrK1hvTy4gICAgICAuLi4uLiAgICAgICIsCi0iIC5Yby5YWFhYWFhYb08uICAgICAgLlhYWC4gICAgICAiLAotIiAuWG9vb29vb29vb29PLkBAQEBAQC5YIE8uICAgICAgIiwKLSIgLlhvQG9vby4uLi5vTy4gICAgICAuT09PLiAgICAgICIsCi0iIC5Yb29vb29vb29vb08uICAgICAgLi4uLi4gICAgICAiLAotIiAuWG9vb29vb29vb29PLiAgICAgICAgICAgICAgICAgIiwKLSIgLk9PT09PT09PT09PTy4gICAgICAgICAgICAgICAgICIsCi0iIC4uLi4uLi4uLi4uLi4uICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL29wdG1lbnUueHBtIGIvRGVtby90aXgvYml0bWFwcy9vcHRtZW51LnhwbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjNiYWI4MS4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9iaXRtYXBzL29wdG1lbnUueHBtCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyogWFBNICovCi1zdGF0aWMgY2hhciAqIG9wdG1lbnVfeHBtW10gPSB7Ci0iNTAgNDAgNSAxIiwKLSIgCXMgTm9uZQljIE5vbmUiLAotIi4JYyB3aGl0ZSIsCi0iWAljIGdyYXk4MCIsCi0ibwljIGdyYXk1MCIsCi0iTwljIGJsYWNrIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYT1hPWFhPWFhPWFhYWE9PWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWE9YT1hYT1hPWFhYT1hYT1hYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYT1hYT1hYT1hYWE9YWFhPWFhYWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWE9YWFhPWFhPT1hYT1hPWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYby4uLi4uLi4uLi4uLi5vICAgIiwKLSIgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLm8gICAgICAgICAgICAgbyAgICIsCi0iICAgLi5YWFhPWFhYWFhPWFhYWFhYWFhPWFhYWFhYWE9vICAgICAgICAgICAgIG8gICAiLAotIiAgIC4uWFhPWE9YT1hYT1hPWFhYT1hYT1hYWFhYWFhPbyAgICAgLi4uLi4uICBvICAgIiwKLSIgICAuLlhYWE9YWFhPWFhPWFhYT1hYWE9YWFhYWFhYT28gICAgIC4gICAgbyAgbyAgICIsCi0iICAgLi5YWE9YWFhPWFhYT1hPWFhPWFhPWFhYWFhYWE9vICAgICAuICAgIG8gIG8gICAiLAotIiAgIC4uWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhPbyAgICAgLm9vb29vICBvICAgIiwKLSIgICAuT09PT09PT09PT09PT09PT09PT09PT09PT09PT28gICAgICAgICAgICAgbyAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgIG8gICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYb29vb29vb29vb29vb29vICAgIiwKLSIgICAuWFhYWE9YWFhYWE9YWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWE9YWFhYWFhYWFhPWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYT1hYT1hYT1hPWE9YWFhYWFhYWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWFhPWFhPWE9YWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhPWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWE9YT1hYWFhYWFhPWE9YWFhYWE9YWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYWE9YT1hPWFhPWFhYWFhPWFhPWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWE9YWE9YT1hPWFhYT1hPWE9YWE9YWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWE9YWFhYT1hYT1hYWE9YWE9YWFhYT1hYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIC5YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYbyAgICAgICAgICAgICAgICAgIiwKLSIgICAuWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWG8gICAgICAgICAgICAgICAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhvICAgICAgICAgICAgICAgICAiLAotIiAgIG9vb29vb29vb29vb29vb29vb29vb29vb29vb29vbyAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ9OwpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy9yaWdodGoueGJtIGIvRGVtby90aXgvYml0bWFwcy9yaWdodGoueGJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxZDQzOGUwLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvcmlnaHRqLnhibQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSByaWdodGpfd2lkdGggMTYKLSNkZWZpbmUgcmlnaHRqX2hlaWdodCAxNgotc3RhdGljIHVuc2lnbmVkIGNoYXIgcmlnaHRqX2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4ZGIsIDB4MDAsIDB4MDAsIDB4NzAsIDB4ZGIsCi0gICAweDAwLCAweDAwLCAweDAwLCAweGVmLCAweDAwLCAweDAwLCAweGQ4LCAweGRlLCAweDAwLCAweDAwLCAweGMwLCAweGRkLAotICAgMHgwMCwgMHgwMCwgMHhhMCwgMHhlZiwgMHgwMCwgMHgwMCwgMHhkOCwgMHhkZX07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL3NlbGVjdC54cG0gYi9EZW1vL3RpeC9iaXRtYXBzL3NlbGVjdC54cG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM5MmU1YTAuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy9zZWxlY3QueHBtCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyogWFBNICovCi1zdGF0aWMgY2hhciAqIHNlbGVjdF94cG1bXSA9IHsKLSI1MCA0MCA5IDEiLAotIiAJcyBOb25lCWMgTm9uZSIsCi0iLgljIGJsYWNrIiwKLSJYCWMgZ3JheTk1IiwKLSJvCWMgZ3JheTUwIiwKLSJPCWMgZ3JheTcwIiwKLSIrCWMgbmF2eSIsCi0iQAljICMwMDAwODA4MDAwMDAiLAotIiMJYyAjODA4MDAwMDAwMDAwIiwKLSIkCWMgd2hpdGUiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgIiwKLSIgIC5YWFhYWFhYWFhYb29vb29vb29vb29vWFhYWFhYWFhYWFhvWFhYWFhYWFhYWC4gICIsCi0iICAuWCAgICAgICAgIG9vT09PT09PT09PT1hYICAgICAgICAgb1ggICAgICAgIG8uICAiLAotIiAgLlggICAgICAgICBvb09PT09PT09PT09YWCAgICAgICAgIG9YICAgICAgICBvLiAgIiwKLSIgIC5YICAgKysrKyAgb29PT09PT09PT09PWFggIC4uLiAgICBvWCAgQCAgICAgby4gICIsCi0iICAuWCAgKysrKysgIG9vT09PT09PT09PT1hYIC4gICAuICAgb1ggIEBAQCAgIG8uICAiLAotIiAgLlggKysrICAgKyBvb09PT09PT09PT09YWCAuICAgIC4gIG9YIEAgIEAgICBvLiAgIiwKLSIgIC5YICsgICAgICsgb29PTyMjIyMjT09PWFggLiAgICAuICBvWCBAICBAICAgby4gICIsCi0iICAuWCArICAgICArIG9vT08jT09PIyNPT1hYIC4gICAgICAgb1ggQCAgIEAgIG8uICAiLAotIiAgLlggKyAgICAgKyBvb08jI09PT08jI09YWCAuICAgICAgIG9YIEAgICAgQCBvLiAgIiwKLSIgIC5YICsrICAgKysgb29PIyMjT09PI09PWFggLiAgICAgICBvWCBAICAgIEAgby4gICIsCi0iICAuWCArKysrKysrIG9vTyMjIyMjIyNPT1hYIC4gICAgICAgb1ggQCAgICBAIG8uICAiLAotIiAgLlggKyAgICAgKyBvb08jI08jT08jT09YWCAuICAgICAgIG9YIEAgICAgQCBvLiAgIiwKLSIgIC5YICsgICAgKysgb29PIyNPT09PTyNPWFggLiAgICAuICBvWCBAICAgIEAgby4gICIsCi0iICAuWCArICAgICArIG9vT08jT09PT08jT1hYIC4gICAgLiAgb1ggQCAgIEBAIG8uICAiLAotIiAgLlggKyAgICArKyBvb09PI09PT09PI09YWCAgLi4uLiAgIG9YIEBAQEBAICBvLiAgIiwKLSIgIC5YICAgICAgICAgb29PTyMjIyMjI09PWFggICAgICAgICBvWCAgICAgICAgby4gICIsCi0iICAuWCAgICAgICAgIG9vT09PT09PT09PT1hYICAgICAgICAkb1ggICAgICAgIG8uICAiLAotIiAgLlhvb29vb29vb29vb1hYWFhYWFhYWFhYb29vb29vb29vb29Yb29vb29vb29vLiAgIiwKLSIgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9iaXRtYXBzL3RpeC5naWYgYi9EZW1vL3RpeC9iaXRtYXBzL3RpeC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGU3ZDUxYTAuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvYml0bWFwcy90aXguZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRGVtby90aXgvYml0bWFwcy91bmRlcmxpbmUueGJtIGIvRGVtby90aXgvYml0bWFwcy91bmRlcmxpbmUueGJtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmMDdiYjQ2Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L2JpdG1hcHMvdW5kZXJsaW5lLnhibQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotI2RlZmluZSB1bmRlcmxpbmVfd2lkdGggMTYKLSNkZWZpbmUgdW5kZXJsaW5lX2hlaWdodCAxNgotc3RhdGljIHVuc2lnbmVkIGNoYXIgdW5kZXJsaW5lX2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MzgsIDB4MWMsIDB4MzgsIDB4MWMsCi0gICAweDMwLCAweDBjLCAweDMwLCAweDBjLCAweDMwLCAweDBjLCAweDMwLCAweDBjLCAweDMwLCAweDBjLCAweDcwLCAweDBlLAotICAgMHhmMCwgMHgwZiwgMHhlMCwgMHgwNywgMHgwMCwgMHgwMCwgMHhmOCwgMHgxZn07CmRpZmYgLS1naXQgYS9EZW1vL3RpeC9ncmlkLnB5IGIvRGVtby90aXgvZ3JpZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDI2OGYwNy4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9ncmlkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyMjCi1pbXBvcnQgdGtpbnRlci50aXggYXMgdGsKLWZyb20gcHByaW50IGltcG9ydCBwcHJpbnQKLQotcj0gdGsuVGsoKQotci50aXRsZSgidGVzdCIpCi0KLWw9dGsuTGFiZWwociwgbmFtZT0iYV9sYWJlbCIpCi1sLnBhY2soKQotCi1jbGFzcyBNeUdyaWQodGsuR3JpZCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIGt3YXJnc1snZWRpdG5vdGlmeSddPSBzZWxmLmVkaXRub3RpZnkKLSAgICAgICAgdGsuR3JpZC5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCi0gICAgZGVmIGVkaXRub3RpZnkoc2VsZiwgeCwgeSk6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLWcgPSBNeUdyaWQociwgbmFtZT0iYV9ncmlkIiwKLXNlbGVjdHVuaXQ9ImNlbGwiKQotZy5wYWNrKGZpbGw9dGsuQk9USCkKLWZvciB4IGluIHJhbmdlKDUpOgotICAgIGZvciB5IGluIHJhbmdlKDUpOgotICAgICAgICBnLnNldCh4LHksdGV4dD1zdHIoKHgseSkpKQotCi1jID0gdGsuQnV0dG9uKHIsIHRleHQ9IkNsb3NlIiwgY29tbWFuZD1yLmRlc3Ryb3kpCi1jLnBhY2soKQotCi10ay5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0JhbGxvb24ucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0JhbGxvb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGJjMjVhMmUuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvc2FtcGxlcy9CYWxsb29uLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeEJhbGxvb24gd2lkZ2V0LCB3aGljaCBwcm92aWRlcwotIyBhIGludGVyZXN0aW5nIHdheSB0byBnaXZlIGhlbHAgdGlwcyBhYm91dCBlbGVtZW50cyBpbiB5b3VyIHVzZXIgaW50ZXJmYWNlLgotIyBZb3VyIGNhbiBkaXNwbGF5IHRoZSBoZWxwIG1lc3NhZ2UgaW4gYSAiYmFsbG9vbiIgYW5kIGEgc3RhdHVzIGJhciB3aWRnZXQuCi0jCi0KLWltcG9ydCB0a2ludGVyLnRpeAotCi1UQ0xfQUxMX0VWRU5UUyAgICAgICAgICA9IDAKLQotZGVmIFJ1blNhbXBsZSAocm9vdCk6Ci0gICAgYmFsbG9vbiA9IERlbW9CYWxsb29uKHJvb3QpCi0gICAgYmFsbG9vbi5tYWlubG9vcCgpCi0gICAgYmFsbG9vbi5kZXN0cm95KCkKLQotY2xhc3MgRGVtb0JhbGxvb246Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHcpOgotICAgICAgICBzZWxmLnJvb3QgPSB3Ci0gICAgICAgIHNlbGYuZXhpdCA9IC0xCi0KLSAgICAgICAgeiA9IHcud2luZm9fdG9wbGV2ZWwoKQotICAgICAgICB6LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgbGFtYmRhIHNlbGY9c2VsZjogc2VsZi5xdWl0Y21kKCkpCi0KLSAgICAgICAgc3RhdHVzID0gdGtpbnRlci50aXguTGFiZWwodywgd2lkdGg9NDAsIHJlbGllZj10a2ludGVyLnRpeC5TVU5LRU4sIGJkPTEpCi0gICAgICAgIHN0YXR1cy5wYWNrKHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlksIHBhZHg9MiwgcGFkeT0xKQotCi0gICAgICAgICMgQ3JlYXRlIHR3byBteXN0ZXJpb3VzIHdpZGdldHMgdGhhdCBuZWVkIGJhbGxvb24gaGVscAotICAgICAgICBidXR0b24xID0gdGtpbnRlci50aXguQnV0dG9uKHcsIHRleHQ9J1NvbWV0aGluZyBVbmV4cGVjdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXRjbWQpCi0gICAgICAgIGJ1dHRvbjIgPSB0a2ludGVyLnRpeC5CdXR0b24odywgdGV4dD0nU29tZXRoaW5nIEVsc2UgVW5leHBlY3RlZCcpCi0gICAgICAgIGJ1dHRvbjJbJ2NvbW1hbmQnXSA9IGxhbWJkYSB3PWJ1dHRvbjI6IHcuZGVzdHJveSgpCi0gICAgICAgIGJ1dHRvbjEucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTEpCi0gICAgICAgIGJ1dHRvbjIucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTEpCi0KLSAgICAgICAgIyBDcmVhdGUgdGhlIGJhbGxvb24gd2lkZ2V0IGFuZCBhc3NvY2lhdGUgaXQgd2l0aCB0aGUgd2lkZ2V0cyB0aGF0IHdlIHdhbnQKLSAgICAgICAgIyB0byBwcm92aWRlIHRpcHMgZm9yOgotICAgICAgICBiID0gdGtpbnRlci50aXguQmFsbG9vbih3LCBzdGF0dXNiYXI9c3RhdHVzKQotCi0gICAgICAgIGIuYmluZF93aWRnZXQoYnV0dG9uMSwgYmFsbG9vbm1zZz0nQ2xvc2UgV2luZG93JywKLSAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNtc2c9J1ByZXNzIHRoaXMgYnV0dG9uIHRvIGNsb3NlIHRoaXMgd2luZG93JykKLSAgICAgICAgYi5iaW5kX3dpZGdldChidXR0b24yLCBiYWxsb29ubXNnPSdTZWxmLWRlc3RydWN0IGJ1dHRvbicsCi0gICAgICAgICAgICAgICAgICAgICAgc3RhdHVzbXNnPSdQcmVzcyB0aGlzIGJ1dHRvbiBhbmQgaXQgd2lsbCBkZXN0cm95IGl0c2VsZicpCi0KLSAgICBkZWYgcXVpdGNtZCAoc2VsZik6Ci0gICAgICAgIHNlbGYuZXhpdCA9IDAKLQotICAgIGRlZiBtYWlubG9vcChzZWxmKToKLSAgICAgICAgZm91bmRFdmVudCA9IDEKLSAgICAgICAgd2hpbGUgc2VsZi5leGl0IDwgMCBhbmQgZm91bmRFdmVudCA+IDA6Ci0gICAgICAgICAgICBmb3VuZEV2ZW50ID0gc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICByb290ID0gdGtpbnRlci50aXguVGsoKQotICAgIFJ1blNhbXBsZShyb290KQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9CdG5Cb3gucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0J0bkJveC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2I5ZWU0Yi4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL0J0bkJveC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMgLSotbW9kZTogcHl0aG9uOyBmaWxsLWNvbHVtbjogNzU7IHRhYi13aWR0aDogODsgY29kaW5nOiBpc28tbGF0aW4tMS11bml4IC0qLQotIwotIyAkSWQkCi0jCi0jIFRpeCBEZW1vc3RyYXRpb24gUHJvZ3JhbQotIwotIyBUaGlzIHNhbXBsZSBwcm9ncmFtIGlzIHN0cnVjdHVyZWQgaW4gc3VjaCBhIHdheSBzbyB0aGF0IGl0IGNhbiBiZQotIyBleGVjdXRlZCBmcm9tIHRoZSBUaXggZGVtbyBwcm9ncmFtICJ0aXh3aWRnZXRzLnB5IjogaXQgbXVzdCBoYXZlIGEKLSMgcHJvY2VkdXJlIGNhbGxlZCAiUnVuU2FtcGxlIi4gSXQgc2hvdWxkIGFsc28gaGF2ZSB0aGUgImlmIiBzdGF0bWVudAotIyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSBzbyB0aGF0IGl0IGNhbiBiZSBydW4gYXMgYSBzdGFuZGFsb25lCi0jIHByb2dyYW0uCi0KLSMgVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZSB0aXhCdXR0b25Cb3ggd2lkZ2V0LCB3aGljaCBpcyBhCi0jIGdyb3VwIG9mIFRLIGJ1dHRvbnMuIFlvdSBjYW4gdXNlIGl0IHRvIG1hbmFnZSB0aGUgYnV0dG9ucyBpbiBhIGRpYWxvZyBib3gsCi0jIGZvciBleGFtcGxlLgotIwotCi1pbXBvcnQgdGtpbnRlci50aXgKLQotZGVmIFJ1blNhbXBsZSh3KToKLSAgICAjIENyZWF0ZSB0aGUgbGFiZWwgb24gdGhlIHRvcCBvZiB0aGUgZGlhbG9nIGJveAotICAgICMKLSAgICB0b3AgPSB0a2ludGVyLnRpeC5MYWJlbCh3LCBwYWR4PTIwLCBwYWR5PTEwLCBiZD0xLCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELAotICAgICAgICAgICAgICAgICAgICBhbmNob3I9dGtpbnRlci50aXguQ0VOVEVSLCB0ZXh0PSdUaGlzIGRpYWxvZyBib3ggaXNcbiBhIGRlbW9uc3RyYXRpb24gb2YgdGhlXG4gdGl4QnV0dG9uQm94IHdpZGdldCcpCi0KLSAgICAjIENyZWF0ZSB0aGUgYnV0dG9uIGJveCBhbmQgYWRkIGEgZmV3IGJ1dHRvbnMgaW4gaXQuIFNldCB0aGUKLSAgICAjIC13aWR0aCBvZiBhbGwgdGhlIGJ1dHRvbnMgdG8gdGhlIHNhbWUgdmFsdWUgc28gdGhhdCB0aGV5Ci0gICAgIyBhcHBlYXIgaW4gdGhlIHNhbWUgc2l6ZS4KLSAgICAjCi0gICAgIyBOb3RlIHRoYXQgdGhlIC10ZXh0LCAtdW5kZXJsaW5lLCAtY29tbWFuZCBhbmQgLXdpZHRoIG9wdGlvbnMgYXJlIGFsbAotICAgICMgc3RhbmRhcmQgb3B0aW9ucyBvZiB0aGUgYnV0dG9uIHdpZGdldHMuCi0gICAgIwotICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh3LCBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5IT1JJWk9OVEFMKQotICAgIGJveC5hZGQoJ29rJywgdGV4dD0nT0snLCB1bmRlcmxpbmU9MCwgd2lkdGg9NSwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogdy5kZXN0cm95KCkpCi0gICAgYm94LmFkZCgnY2xvc2UnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NSwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogdy5kZXN0cm95KCkpCi0gICAgYm94LnBhY2soc2lkZT10a2ludGVyLnRpeC5CT1RUT00sIGZpbGw9dGtpbnRlci50aXguWCkKLSAgICB0b3AucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICByb290ID0gdGtpbnRlci50aXguVGsoKQotICAgIFJ1blNhbXBsZShyb290KQotICAgIHJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9DbXBJbWcucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0NtcEltZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYWQ0OTE4MS4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL0NtcEltZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE5NiArMCwwIEBACi0jIC0qLW1vZGU6IHB5dGhvbjsgZmlsbC1jb2x1bW46IDc1OyB0YWItd2lkdGg6IDg7IGNvZGluZzogaXNvLWxhdGluLTEtdW5peCAtKi0KLSMKLSMgJElkJAotIwotIyBUaXggRGVtb3N0cmF0aW9uIFByb2dyYW0KLSMKLSMgVGhpcyBzYW1wbGUgcHJvZ3JhbSBpcyBzdHJ1Y3R1cmVkIGluIHN1Y2ggYSB3YXkgc28gdGhhdCBpdCBjYW4gYmUKLSMgZXhlY3V0ZWQgZnJvbSB0aGUgVGl4IGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSI6IGl0IG11c3QgaGF2ZSBhCi0jIHByb2NlZHVyZSBjYWxsZWQgIlJ1blNhbXBsZSIuIEl0IHNob3VsZCBhbHNvIGhhdmUgdGhlICJpZiIgc3RhdG1lbnQKLSMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGFzIGEgc3RhbmRhbG9uZQotIyBwcm9ncmFtLgotCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgY29tcG91bmQgaW1hZ2VzOiBpdCB1c2VzIGNvbXBvdW5kCi0jIGltYWdlcyB0byBkaXNwbGF5IGEgdGV4dCBzdHJpbmcgdG9nZXRoZXIgd2l0aCBhIHBpeG1hcCBpbnNpZGUKLSMgYnV0dG9ucwotIwotCi1pbXBvcnQgdGtpbnRlci50aXgKLQotbmV0d29ya19waXhtYXAgPSAiIiIvKiBYUE0gKi8KLXN0YXRpYyBjaGFyICogbmV0d194cG1bXSA9IHsKLS8qIHdpZHRoIGhlaWdodCBuY29sb3JzIGNoYXJzX3Blcl9waXhlbCAqLwotIjMyIDMyIDcgMSIsCi0vKiBjb2xvcnMgKi8KLSIgICAgICAgcyBOb25lICBjIE5vbmUiLAotIi4gICAgICBjICMwMDAwMDAwMDAwMDAiLAotIlggICAgICBjIHdoaXRlIiwKLSJvICAgICAgYyAjYzAwMGMwMDBjMDAwIiwKLSJPICAgICAgYyAjNDA0MDQwIiwKLSIrICAgICAgYyBibHVlIiwKLSJAICAgICAgYyByZWQiLAotLyogcGl4ZWxzICovCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgLi4uLi4uLi4uLi4uLi4gIiwKLSIgICAgICAgICAgICAgICAgIC5YWFhYWFhYWFhYWFguICIsCi0iICAgICAgICAgICAgICAgICAuWG9vb29vb29vb29PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLi4uLi4uLlhvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby4rKysrbytYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG8uKysrK28rWG9PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLisrb28rK1hvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby4rKysrKytYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG8uK28rKysrWG9PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvLisrKysrK1hvTy4gIiwKLSIgICAgICAgICAgICAgICAgIC5Yby5YWFhYWFhYb08uICIsCi0iICAgICAgICAgICAgICAgICAuWG9vb29vb29vb29PLiAiLAotIiAgICAgICAgICAgICAgICAgLlhvQG9vby4uLi5vTy4gIiwKLSIgLi4uLi4uLi4uLi4uLi4gIC5Yb29vb29vb29vb08uICIsCi0iIC5YWFhYWFhYWFhYWFguICAuWG9vb29vb29vb29PLiAiLAotIiAuWG9vb29vb29vb29PLiAgLk9PT09PT09PT09PTy4gIiwKLSIgLlhvLi4uLi4uLlhvTy4gIC4uLi4uLi4uLi4uLi4uICIsCi0iIC5Yby4rKysrbytYb08uICAgICAgICBAICAgICAgICAiLAotIiAuWG8uKysrK28rWG9PLiAgICAgICAgQCAgICAgICAgIiwKLSIgLlhvLisrb28rK1hvTy4gICAgICAgIEAgICAgICAgICIsCi0iIC5Yby4rKysrKytYb08uICAgICAgICBAICAgICAgICAiLAotIiAuWG8uK28rKysrWG9PLiAgICAgICAgQCAgICAgICAgIiwKLSIgLlhvLisrKysrK1hvTy4gICAgICAuLi4uLiAgICAgICIsCi0iIC5Yby5YWFhYWFhYb08uICAgICAgLlhYWC4gICAgICAiLAotIiAuWG9vb29vb29vb29PLkBAQEBAQC5YIE8uICAgICAgIiwKLSIgLlhvQG9vby4uLi5vTy4gICAgICAuT09PLiAgICAgICIsCi0iIC5Yb29vb29vb29vb08uICAgICAgLi4uLi4gICAgICAiLAotIiAuWG9vb29vb29vb29PLiAgICAgICAgICAgICAgICAgIiwKLSIgLk9PT09PT09PT09PTy4gICAgICAgICAgICAgICAgICIsCi0iIC4uLi4uLi4uLi4uLi4uICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIn07Ci0iIiIKLQotaGFyZF9kaXNrX3BpeG1hcCA9ICIiIi8qIFhQTSAqLwotc3RhdGljIGNoYXIgKiBkcml2ZWFfeHBtW10gPSB7Ci0vKiB3aWR0aCBoZWlnaHQgbmNvbG9ycyBjaGFyc19wZXJfcGl4ZWwgKi8KLSIzMiAzMiA1IDEiLAotLyogY29sb3JzICovCi0iICAgICAgIHMgTm9uZSAgYyBOb25lIiwKLSIuICAgICAgYyAjMDAwMDAwMDAwMDAwIiwKLSJYICAgICAgYyB3aGl0ZSIsCi0ibyAgICAgIGMgI2MwMDBjMDAwYzAwMCIsCi0iTyAgICAgIGMgIzgwMDA4MDAwODAwMCIsCi0vKiBwaXhlbHMgKi8KLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgICIsCi0iICAgLlhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYby4gICAiLAotIiAgIC5Yb29vb29vb29vb29vb29vb29vb29vb08uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vLi5vb29PLiAgICIsCi0iICAgLlhvb29vb29vb29vb29vb29vby4ub29vTy4gICAiLAotIiAgIC5Yb29vb29vb29vb29vb29vb29vb29vb08uICAgIiwKLSIgICAuWG9vb29vb29vLi4uLi4uLm9vb29vb29PLiAgICIsCi0iICAgLlhvby4uLi4uLi4uLi4uLi4uLi4uLi5vTy4gICAiLAotIiAgIC5Yb29vb29vb28uLi4uLi4ub29vb29vb08uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vb29vb29PLiAgICIsCi0iICAgLlhvb29vb29vb29vb29vb29vb29vb29vTy4gICAiLAotIiAgIC5Yb29vb29vb29vb29vb29vb29vb29vb08uICAgIiwKLSIgICAuWG9vb29vb29vb29vb29vb29vb29vb29PLiAgICIsCi0iICAgLm9PT09PT09PT09PT09PT09PT09PT09PTy4gICAiLAotIiAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiwKLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAifTsKLSIiIgotCi1uZXR3b3JrX2JpdG1hcCA9ICIiIgotI2RlZmluZSBuZXR3X3dpZHRoIDMyCi0jZGVmaW5lIG5ldHdfaGVpZ2h0IDMyCi1zdGF0aWMgdW5zaWduZWQgY2hhciBuZXR3X2JpdHNbXSA9IHsKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MDIsIDB4NDAsCi0gICAweDAwLCAweDAwLCAweGZhLCAweDVmLCAweDAwLCAweDAwLCAweDBhLCAweDUwLCAweDAwLCAweDAwLCAweDBhLCAweDUyLAotICAgMHgwMCwgMHgwMCwgMHgwYSwgMHg1MiwgMHgwMCwgMHgwMCwgMHg4YSwgMHg1MSwgMHgwMCwgMHgwMCwgMHgwYSwgMHg1MCwKLSAgIDB4MDAsIDB4MDAsIDB4NGEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4NTAsCi0gICAweDAwLCAweDAwLCAweGZhLCAweDVmLCAweDAwLCAweDAwLCAweDAyLCAweDQwLCAweGZlLCAweDdmLCAweDUyLCAweDU1LAotICAgMHgwMiwgMHg0MCwgMHhhYSwgMHg2YSwgMHhmYSwgMHg1ZiwgMHhmZSwgMHg3ZiwgMHgwYSwgMHg1MCwgMHhmZSwgMHg3ZiwKLSAgIDB4MGEsIDB4NTIsIDB4ODAsIDB4MDAsIDB4MGEsIDB4NTIsIDB4ODAsIDB4MDAsIDB4OGEsIDB4NTEsIDB4ODAsIDB4MDAsCi0gICAweDBhLCAweDUwLCAweDgwLCAweDAwLCAweDRhLCAweDUwLCAweDgwLCAweDAwLCAweDBhLCAweDUwLCAweGUwLCAweDAzLAotICAgMHgwYSwgMHg1MCwgMHgyMCwgMHgwMiwgMHhmYSwgMHhkZiwgMHgzZiwgMHgwMywgMHgwMiwgMHg0MCwgMHhhMCwgMHgwMiwKLSAgIDB4NTIsIDB4NTUsIDB4ZTAsIDB4MDMsIDB4YWEsIDB4NmEsIDB4MDAsIDB4MDAsIDB4ZmUsIDB4N2YsIDB4MDAsIDB4MDAsCi0gICAweGZlLCAweDdmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLSIiIgotCi1oYXJkX2Rpc2tfYml0bWFwID0gIiIiCi0jZGVmaW5lIGRyaXZlYV93aWR0aCAzMgotI2RlZmluZSBkcml2ZWFfaGVpZ2h0IDMyCi1zdGF0aWMgdW5zaWduZWQgY2hhciBkcml2ZWFfYml0c1tdID0gewotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHhmOCwgMHhmZiwgMHhmZiwgMHgxZiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgxOCwgMHhhOCwgMHhhYSwgMHhhYSwgMHgxYSwKLSAgIDB4NDgsIDB4NTUsIDB4ZDUsIDB4MWQsIDB4YTgsIDB4YWEsIDB4YWEsIDB4MWIsIDB4NDgsIDB4NTUsIDB4NTUsIDB4MWQsCi0gICAweGE4LCAweGZhLCAweGFmLCAweDFhLCAweGM4LCAweGZmLCAweGZmLCAweDFkLCAweGE4LCAweGZhLCAweGFmLCAweDFhLAotICAgMHg0OCwgMHg1NSwgMHg1NSwgMHgxZCwgMHhhOCwgMHhhYSwgMHhhYSwgMHgxYSwgMHg0OCwgMHg1NSwgMHg1NSwgMHgxZCwKLSAgIDB4YTgsIDB4YWEsIDB4YWEsIDB4MWEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MWYsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4MWYsCi0gICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLSAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9OwotIiIiCi0KLWRlZiBSdW5TYW1wbGUodyk6Ci0gICAgdy5pbWcwID0gdGtpbnRlci50aXguSW1hZ2UoJ3BpeG1hcCcsIGRhdGE9bmV0d29ya19waXhtYXApCi0gICAgaWYgbm90IHcuaW1nMDoKLSAgICAgICAgdy5pbWcwID0gdGtpbnRlci50aXguSW1hZ2UoJ2JpdG1hcCcsIGRhdGE9bmV0d29ya19iaXRtYXApCi0gICAgdy5pbWcxID0gdGtpbnRlci50aXguSW1hZ2UoJ3BpeG1hcCcsIGRhdGE9aGFyZF9kaXNrX3BpeG1hcCkKLSAgICBpZiBub3Qgdy5pbWcwOgotICAgICAgICB3LmltZzEgPSB0a2ludGVyLnRpeC5JbWFnZSgnYml0bWFwJywgZGF0YT1oYXJkX2Rpc2tfYml0bWFwKQotCi0gICAgaGRkID0gdGtpbnRlci50aXguQnV0dG9uKHcsIHBhZHg9NCwgcGFkeT0xLCB3aWR0aD0xMjApCi0gICAgbmV0ID0gdGtpbnRlci50aXguQnV0dG9uKHcsIHBhZHg9NCwgcGFkeT0xLCB3aWR0aD0xMjApCi0KLSAgICAjIENyZWF0ZSB0aGUgZmlyc3QgaW1hZ2U6IHdlIGNyZWF0ZSBhIGxpbmUsIHRoZW4gcHV0IGEgc3RyaW5nLAotICAgICMgYSBzcGFjZSBhbmQgYSBpbWFnZSBpbnRvIHRoaXMgbGluZSwgZnJvbSBsZWZ0IHRvIHJpZ2h0LgotICAgICMgVGhlIHJlc3VsdDogd2UgaGF2ZSBhIG9uZS1saW5lIGltYWdlIHRoYXQgY29uc2lzdHMgb2YgdGhyZWUKLSAgICAjIGluZGl2aWR1YWwgaXRlbXMKLSAgICAjCi0gICAgIyBUaGUgdGsuY2FsbHMgc2hvdWxkIGJlIG1ldGhvZHMgaW4gVGl4IC4uLgotICAgIHcuaGRkX2ltZyA9IHRraW50ZXIudGl4LkltYWdlKCdjb21wb3VuZCcsIHdpbmRvdz1oZGQpCi0gICAgdy5oZGRfaW1nLnRrLmNhbGwoc3RyKHcuaGRkX2ltZyksICdhZGQnLCAnbGluZScpCi0gICAgdy5oZGRfaW1nLnRrLmNhbGwoc3RyKHcuaGRkX2ltZyksICdhZGQnLCAndGV4dCcsICctdGV4dCcsICdIYXJkIERpc2snLAotICAgICAgICAgICAgICAgICAgICAnLXVuZGVybGluZScsICcwJykKLSAgICB3LmhkZF9pbWcudGsuY2FsbChzdHIody5oZGRfaW1nKSwgJ2FkZCcsICdzcGFjZScsICctd2lkdGgnLCAnNycpCi0gICAgdy5oZGRfaW1nLnRrLmNhbGwoc3RyKHcuaGRkX2ltZyksICdhZGQnLCAnaW1hZ2UnLCAnLWltYWdlJywgdy5pbWcxKQotCi0gICAgIyBQdXQgdGhpcyBpbWFnZSBpbnRvIHRoZSBmaXJzdCBidXR0b24KLSAgICAjCi0gICAgaGRkWydpbWFnZSddID0gdy5oZGRfaW1nCi0KLSAgICAjIE5leHQgYnV0dG9uCi0gICAgdy5uZXRfaW1nID0gdGtpbnRlci50aXguSW1hZ2UoJ2NvbXBvdW5kJywgd2luZG93PW5ldCkKLSAgICB3Lm5ldF9pbWcudGsuY2FsbChzdHIody5uZXRfaW1nKSwgJ2FkZCcsICdsaW5lJykKLSAgICB3Lm5ldF9pbWcudGsuY2FsbChzdHIody5uZXRfaW1nKSwgJ2FkZCcsICd0ZXh0JywgJy10ZXh0JywgJ05ldHdvcmsnLAotICAgICAgICAgICAgICAgICAgICAnLXVuZGVybGluZScsICcwJykKLSAgICB3Lm5ldF9pbWcudGsuY2FsbChzdHIody5uZXRfaW1nKSwgJ2FkZCcsICdzcGFjZScsICctd2lkdGgnLCAnNycpCi0gICAgdy5uZXRfaW1nLnRrLmNhbGwoc3RyKHcubmV0X2ltZyksICdhZGQnLCAnaW1hZ2UnLCAnLWltYWdlJywgdy5pbWcwKQotCi0gICAgIyBQdXQgdGhpcyBpbWFnZSBpbnRvIHRoZSBmaXJzdCBidXR0b24KLSAgICAjCi0gICAgbmV0WydpbWFnZSddID0gdy5uZXRfaW1nCi0KLSAgICBjbG9zZSA9IHRraW50ZXIudGl4LkJ1dHRvbih3LCBwYWR5PTEsIHRleHQ9J0Nsb3NlJywKLSAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1sYW1iZGEgdz13OiB3LmRlc3Ryb3koKSkKLQotICAgIGhkZC5wYWNrKHNpZGU9dGtpbnRlci50aXguTEVGVCwgcGFkeD0xMCwgcGFkeT0xMCwgZmlsbD10a2ludGVyLnRpeC5ZLCBleHBhbmQ9MSkKLSAgICBuZXQucGFjayhzaWRlPXRraW50ZXIudGl4LkxFRlQsIHBhZHg9MTAsIHBhZHk9MTAsIGZpbGw9dGtpbnRlci50aXguWSwgZXhwYW5kPTEpCi0gICAgY2xvc2UucGFjayhzaWRlPXRraW50ZXIudGl4LkxFRlQsIHBhZHg9MTAsIHBhZHk9MTAsIGZpbGw9dGtpbnRlci50aXguWSwgZXhwYW5kPTEpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcm9vdCA9IHRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKLSAgICByb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQ29tYm9Cb3gucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0NvbWJvQm94LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4MGQ3OGYyLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L3NhbXBsZXMvQ29tYm9Cb3gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeENvbWJvQm94IHdpZGdldCwgd2hpY2ggaXMgY2xvc2UKLSMgdG8gdGhlIE1TIFdpbmRvdyBDb21ibyBCb3ggY29udHJvbC4KLSMKLWltcG9ydCB0a2ludGVyLnRpeAotCi1kZWYgUnVuU2FtcGxlKHcpOgotICAgIGdsb2JhbCBkZW1vX21vbnRoLCBkZW1vX3llYXIKLQotICAgIHRvcCA9IHRraW50ZXIudGl4LkZyYW1lKHcsIGJkPTEsIHJlbGllZj10a2ludGVyLnRpeC5SQUlTRUQpCi0KLSAgICBkZW1vX21vbnRoID0gdGtpbnRlci50aXguU3RyaW5nVmFyKCkKLSAgICBkZW1vX3llYXIgPSB0a2ludGVyLnRpeC5TdHJpbmdWYXIoKQotCi0gICAgIyAkdy50b3AuYSBpcyBhIGRyb3AtZG93biBjb21ibyBib3guIEl0IGlzIG5vdCBlZGl0YWJsZSAtLSB3aG8gd2FudHMKLSAgICAjIHRvIGludmVudCBuZXcgbW9udGhzPwotICAgICMKLSAgICAjIFtIaW50XSBUaGUgLW9wdGlvbnMgc3dpdGNoIHNldHMgdGhlIG9wdGlvbnMgb2YgdGhlIHN1YndpZGdldHMuCi0gICAgIyBbSGludF0gV2Ugc2V0IHRoZSBsYWJlbC53aWR0aCBzdWJ3aWRnZXQgb3B0aW9uIG9mIGJvdGggY29tYm9ib3hlcyB0bwotICAgICMgICAgICAgIGJlIDEwIHNvIHRoYXQgdGhlaXIgbGFiZWxzIGFwcGVhciB0byBiZSBhbGlnbmVkLgotICAgICMKLSAgICBhID0gdGtpbnRlci50aXguQ29tYm9Cb3godG9wLCBsYWJlbD0iTW9udGg6ICIsIGRyb3Bkb3duPTEsCi0gICAgICAgIGNvbW1hbmQ9c2VsZWN0X21vbnRoLCBlZGl0YWJsZT0wLCB2YXJpYWJsZT1kZW1vX21vbnRoLAotICAgICAgICBvcHRpb25zPSdsaXN0Ym94LmhlaWdodCA2IGxhYmVsLndpZHRoIDEwIGxhYmVsLmFuY2hvciBlJykKLQotICAgICMgJHcudG9wLmIgaXMgYSBub24tZHJvcC1kb3duIGNvbWJvIGJveC4gSXQgaXMgbm90IGVkaXRhYmxlOiB3ZSBwcm92aWRlCi0gICAgIyBmb3VyIGNob2ljZXMgZm9yIHRoZSB1c2VyLCBidXQgaGUgY2FuIGVudGVyIGFuIGFsdGVybmF0aXZlIHllYXIgaWYgaGUKLSAgICAjIHdhbnRzIHRvLgotICAgICMKLSAgICAjIFtIaW50XSBVc2UgdGhlIHBhZFkgYW5kIGFuY2hvciBvcHRpb25zIG9mIHRoZSBsYWJlbCBzdWJ3aWRnZXQgdG8KLSAgICAjICAgICAgICBhbGlnbiB0aGUgbGFiZWwgd2l0aCB0aGUgZW50cnkgc3Vid2lkZ2V0LgotICAgICMgW0hpbnRdIE5vdGljZSB0aGF0IHlvdSBzaG91bGQgdXNlIHBhZFkgKHRoZSBOQU1FIG9mIHRoZSBvcHRpb24pIGFuZCBub3QKLSAgICAjICAgICAgICBwYWR5ICh0aGUgU1dJVENIIG9mIHRoZSBvcHRpb24pLgotICAgICMKLSAgICBiID0gdGtpbnRlci50aXguQ29tYm9Cb3godG9wLCBsYWJlbD0iWWVhcjogIiwgZHJvcGRvd249MCwKLSAgICAgICAgY29tbWFuZD1zZWxlY3RfeWVhciwgZWRpdGFibGU9MSwgdmFyaWFibGU9ZGVtb195ZWFyLAotICAgICAgICBvcHRpb25zPSdsaXN0Ym94LmhlaWdodCA0IGxhYmVsLnBhZFkgNSBsYWJlbC53aWR0aCAxMCBsYWJlbC5hbmNob3IgbmUnKQotCi0gICAgYS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBhbmNob3I9dGtpbnRlci50aXguVykKLSAgICBiLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGFuY2hvcj10a2ludGVyLnRpeC5XKQotCi0gICAgYS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnSmFudWFyeScpCi0gICAgYS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnRmVicnVhcnknKQotICAgIGEuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ01hcmNoJykKLSAgICBhLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdBcHJpbCcpCi0gICAgYS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnTWF5JykKLSAgICBhLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdKdW5lJykKLSAgICBhLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdKdWx5JykKLSAgICBhLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdBdWd1c3QnKQotICAgIGEuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ1NlcHRlbWJlcicpCi0gICAgYS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnT2N0b2JlcicpCi0gICAgYS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnTm92ZW1iZXInKQotICAgIGEuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0RlY2VtYmVyJykKLQotICAgIGIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE5OTInKQotICAgIGIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE5OTMnKQotICAgIGIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE5OTQnKQotICAgIGIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE5OTUnKQotICAgIGIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE5OTYnKQotCi0gICAgIyBVc2UgInRpeFNldFNpbGVudCIgdG8gc2V0IHRoZSB2YWx1ZXMgb2YgdGhlIGNvbWJvIGJveCBpZiB5b3UKLSAgICAjIGRvbid0IHdhbnQgeW91ciAtY29tbWFuZCBwcm9jZWR1cmVzIChjYng6c2VsZWN0X21vbnRoIGFuZAotICAgICMgY2J4OnNlbGVjdF95ZWFyKSB0byBiZSBjYWxsZWQuCi0gICAgIwotICAgIGEuc2V0X3NpbGVudCgnSmFudWFyeScpCi0gICAgYi5zZXRfc2lsZW50KCcxOTk1JykKLQotICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh3LCBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5IT1JJWk9OVEFMKQotICAgIGJveC5hZGQoJ29rJywgdGV4dD0nT2snLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogb2tfY29tbWFuZCh3KSkKLSAgICBib3guYWRkKCdjYW5jZWwnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogdy5kZXN0cm95KCkpCi0gICAgYm94LnBhY2soc2lkZT10a2ludGVyLnRpeC5CT1RUT00sIGZpbGw9dGtpbnRlci50aXguWCkKLSAgICB0b3AucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSkKLQotZGVmIHNlbGVjdF9tb250aChldmVudD1Ob25lKToKLSAgICAjIHRpeERlbW86U3RhdHVzICJNb250aCA9ICVzIiAlIGRlbW9fbW9udGguZ2V0KCkKLSAgICBwYXNzCi0KLWRlZiBzZWxlY3RfeWVhcihldmVudD1Ob25lKToKLSAgICAjIHRpeERlbW86U3RhdHVzICJZZWFyID0gJXMiICUgZGVtb195ZWFyLmdldCgpCi0gICAgcGFzcwotCi1kZWYgb2tfY29tbWFuZCh3KToKLSAgICAjIHRpeERlbW86U3RhdHVzICJNb250aCA9ICVzLCBZZWFyPSAlcyIgJSAoZGVtb19tb250aC5nZXQoKSwgZGVtb195ZWFyLmdldCgpKQotICAgIHcuZGVzdHJveSgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcm9vdCA9IHRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKLSAgICByb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvQ29udHJvbC5weSBiL0RlbW8vdGl4L3NhbXBsZXMvQ29udHJvbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZmJjNWU2NC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL0NvbnRyb2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeENvbnRyb2wgd2lkZ2V0IC0tIGl0IGlzIGFuCi0jIGVudHJ5IHdpZGdldCB3aXRoIHVwL2Rvd24gYXJyb3cgYnV0dG9ucy4gWW91IGNhbiB1c2UgdGhlIGFycm93IGJ1dHRvbnMKLSMgdG8gYWRqdXN0IHRoZSB2YWx1ZSBpbnNpZGUgdGhlIGVudHJ5IHdpZGdldC4KLSMKLSMgVGhpcyBleGFtcGxlIHByb2dyYW0gdXNlcyB0aHJlZSBDb250cm9sIHdpZGdldHMuIE9uZSBsZXRzIHlvdSBzZWxlY3QKLSMgaW50ZWdlciB2YWx1ZXM7IG9uZSBsZXRzIHlvdSBzZWxlY3QgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIGFuZCB0aGUgbGFzdAotIyBvbmUgbGV0cyB5b3Ugc2VsZWN0IGEgZmV3IG5hbWVzLgotCi1pbXBvcnQgdGtpbnRlci50aXgKLQotVENMX0FMTF9FVkVOVFMgICAgICAgICAgPSAwCi0KLWRlZiBSdW5TYW1wbGUgKHJvb3QpOgotICAgIGNvbnRyb2wgPSBEZW1vQ29udHJvbChyb290KQotICAgIGNvbnRyb2wubWFpbmxvb3AoKQotICAgIGNvbnRyb2wuZGVzdHJveSgpCi0KLWNsYXNzIERlbW9Db250cm9sOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3KToKLSAgICAgICAgc2VsZi5yb290ID0gdwotICAgICAgICBzZWxmLmV4aXQgPSAtMQotCi0gICAgICAgIGdsb2JhbCBkZW1vX21ha2VyLCBkZW1vX3RocnVzdCwgZGVtb19udW1fZW5naW5lcwotCi0gICAgICAgIGRlbW9fbWFrZXIgPSB0a2ludGVyLnRpeC5TdHJpbmdWYXIoKQotICAgICAgICBkZW1vX3RocnVzdCA9IHRraW50ZXIudGl4LkRvdWJsZVZhcigpCi0gICAgICAgIGRlbW9fbnVtX2VuZ2luZXMgPSB0a2ludGVyLnRpeC5JbnRWYXIoKQotICAgICAgICBkZW1vX21ha2VyLnNldCgnUCZXJykKLSAgICAgICAgZGVtb190aHJ1c3Quc2V0KDIwMDAwLjApCi0gICAgICAgIGRlbW9fbnVtX2VuZ2luZXMuc2V0KDIpCi0KLSAgICAgICAgdG9wID0gdGtpbnRlci50aXguRnJhbWUodywgYmQ9MSwgcmVsaWVmPXRraW50ZXIudGl4LlJBSVNFRCkKLQotICAgICAgICAjICR3LnRvcC5hIGFsbG93cyBvbmx5IGludGVnZXIgdmFsdWVzCi0gICAgICAgICMKLSAgICAgICAgIyBbSGludF0gVGhlIC1vcHRpb25zIHN3aXRjaCBzZXRzIHRoZSBvcHRpb25zIG9mIHRoZSBzdWJ3aWRnZXRzLgotICAgICAgICAjIFtIaW50XSBXZSBzZXQgdGhlIGxhYmVsLndpZHRoIHN1YndpZGdldCBvcHRpb24gb2YgdGhlIENvbnRyb2xzIHRvCi0gICAgICAgICMgICAgICAgIGJlIDE2IHNvIHRoYXQgdGhlaXIgbGFiZWxzIGFwcGVhciB0byBiZSBhbGlnbmVkLgotICAgICAgICAjCi0gICAgICAgIGEgPSB0a2ludGVyLnRpeC5Db250cm9sKHRvcCwgbGFiZWw9J051bWJlciBvZiBFbmdpbmVzOiAnLCBpbnRlZ2VyPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1kZW1vX251bV9lbmdpbmVzLCBtaW49MSwgbWF4PTQsCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPSdlbnRyeS53aWR0aCAxMCBsYWJlbC53aWR0aCAyMCBsYWJlbC5hbmNob3IgZScpCi0KLSAgICAgICAgYiA9IHRraW50ZXIudGl4LkNvbnRyb2wodG9wLCBsYWJlbD0nVGhydXN0OiAnLCBpbnRlZ2VyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW49JzEwMDAwLjAnLCBtYXg9JzYwMDAwLjAnLCBzdGVwPTUwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPWRlbW9fdGhydXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz0nZW50cnkud2lkdGggMTAgbGFiZWwud2lkdGggMjAgbGFiZWwuYW5jaG9yIGUnKQotCi0gICAgICAgIGMgPSB0a2ludGVyLnRpeC5Db250cm9sKHRvcCwgbGFiZWw9J0VuZ2luZSBNYWtlcjogJywgdmFsdWU9J1AmVycsCi0gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1kZW1vX21ha2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz0nZW50cnkud2lkdGggMTAgbGFiZWwud2lkdGggMjAgbGFiZWwuYW5jaG9yIGUnKQotCi0gICAgICAgICMgV2UgY2FuJ3QgZGVmaW5lIHRoZXNlIGluIHRoZSBpbml0IGJlY2F1c2UgdGhlIHdpZGdldCAnYycgZG9lc24ndAotICAgICAgICAjIGV4aXN0IHlldCBhbmQgd2UgbmVlZCB0byByZWZlcmVuY2UgaXQKLSAgICAgICAgY1snaW5jcmNtZCddID0gbGFtYmRhIHc9YzogYWRqdXN0X21ha2VyKHcsIDEpCi0gICAgICAgIGNbJ2RlY3JjbWQnXSA9IGxhbWJkYSB3PWM6IGFkanVzdF9tYWtlcih3LCAtMSkKLSAgICAgICAgY1sndmFsaWRhdGVjbWQnXSA9IGxhbWJkYSB3PWM6IHZhbGlkYXRlX21ha2VyKHcpCi0KLSAgICAgICAgYS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBhbmNob3I9dGtpbnRlci50aXguVykKLSAgICAgICAgYi5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBhbmNob3I9dGtpbnRlci50aXguVykKLSAgICAgICAgYy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBhbmNob3I9dGtpbnRlci50aXguVykKLQotICAgICAgICBib3ggPSB0a2ludGVyLnRpeC5CdXR0b25Cb3godywgb3JpZW50YXRpb249dGtpbnRlci50aXguSE9SSVpPTlRBTCkKLSAgICAgICAgYm94LmFkZCgnb2snLCB0ZXh0PSdPaycsIHVuZGVybGluZT0wLCB3aWR0aD02LAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5va2NtZCkKLSAgICAgICAgYm94LmFkZCgnY2FuY2VsJywgdGV4dD0nQ2FuY2VsJywgdW5kZXJsaW5lPTAsIHdpZHRoPTYsCi0gICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXRjbWQpCi0gICAgICAgIGJveC5wYWNrKHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgICAgIHRvcC5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIGV4cGFuZD0xKQotCi0gICAgZGVmIG9rY21kIChzZWxmKToKLSAgICAgICAgIyB0aXhEZW1vOlN0YXR1cyAiU2VsZWN0ZWQgJWQgb2YgJXMgZW5naW5lcyBlYWNoIG9mIHRocnVzdCAlZCIsIChkZW1vX251bV9lbmdpbmVzLmdldCgpLCBkZW1vX21ha2VyLmdldCgpLCBkZW1vX3RocnVzdC5nZXQoKSkKLSAgICAgICAgc2VsZi5xdWl0Y21kKCkKLQotICAgIGRlZiBxdWl0Y21kIChzZWxmKToKLSAgICAgICAgc2VsZi5leGl0ID0gMAotCi0gICAgZGVmIG1haW5sb29wKHNlbGYpOgotICAgICAgICB3aGlsZSBzZWxmLmV4aXQgPCAwOgotICAgICAgICAgICAgc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotbWFrZXJfbGlzdCA9IFsnUCZXJywgJ0dFJywgJ1JvbGxzIFJveWNlJ10KLQotZGVmIGFkanVzdF9tYWtlcih3LCBpbmMpOgotICAgIGkgPSBtYWtlcl9saXN0LmluZGV4KGRlbW9fbWFrZXIuZ2V0KCkpCi0gICAgaSA9IGkgKyBpbmMKLSAgICBpZiBpID49IGxlbihtYWtlcl9saXN0KToKLSAgICAgICAgaSA9IDAKLSAgICBlbGlmIGkgPCAwOgotICAgICAgICBpID0gbGVuKG1ha2VyX2xpc3QpIC0gMQotCi0gICAgIyBJbiBUY2wvVGl4IHdlIHNob3VsZCByZXR1cm4gdGhlIHN0cmluZyBtYWtlcl9saXN0W2ldLiBXZSBjYW4ndAotICAgICMgZG8gdGhhdCBpbiBUa2ludGVyIHNvIHdlIHNldCB0aGUgZ2xvYmFsIHZhcmlhYmxlLiAoVGhpcyB3b3JrcykuCi0gICAgZGVtb19tYWtlci5zZXQobWFrZXJfbGlzdFtpXSkKLQotZGVmIHZhbGlkYXRlX21ha2VyKHcpOgotICAgIHRyeToKLSAgICAgICAgaSA9IG1ha2VyX2xpc3QuaW5kZXgoZGVtb19tYWtlci5nZXQoKSkKLSAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgIyBXb3JrcyBoZXJlIHRob3VnaC4gV2h5ID8gQmVhdHMgbWUuCi0gICAgICAgIHJldHVybiBtYWtlcl9saXN0WzBdCi0gICAgIyBXb3JrcyBoZXJlIHRob3VnaC4gV2h5ID8gQmVhdHMgbWUuCi0gICAgcmV0dXJuIG1ha2VyX2xpc3RbaV0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICByb290ID0gdGtpbnRlci50aXguVGsoKQotICAgIFJ1blNhbXBsZShyb290KQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9EaXJMaXN0LnB5IGIvRGVtby90aXgvc2FtcGxlcy9EaXJMaXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2ZDI4Y2EzLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L3NhbXBsZXMvRGlyTGlzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIC0qLW1vZGU6IHB5dGhvbjsgZmlsbC1jb2x1bW46IDc1OyB0YWItd2lkdGg6IDg7IGNvZGluZzogaXNvLWxhdGluLTEtdW5peCAtKi0KLSMKLSMgICAgICAgJElkJAotIwotIyBUaXggRGVtb3N0cmF0aW9uIFByb2dyYW0KLSMKLSMgVGhpcyBzYW1wbGUgcHJvZ3JhbSBpcyBzdHJ1Y3R1cmVkIGluIHN1Y2ggYSB3YXkgc28gdGhhdCBpdCBjYW4gYmUKLSMgZXhlY3V0ZWQgZnJvbSB0aGUgVGl4IGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSI6ICBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbSB1c2luZyB0aXh3aXNoLgotCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgdGl4RGlyTGlzdCB3aWRnZXQgLS0geW91IGNhbgotIyB1c2UgaXQgZm9yIHRoZSB1c2VyIHRvIHNlbGVjdCBhIGRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGFuIGluc3RhbGxhdGlvbgotIyBwcm9ncmFtIGNhbiB1c2UgdGhlIHRpeERpckxpc3Qgd2lkZ2V0IHRvIGFzayB0aGUgdXNlciB0byBzZWxlY3QgdGhlCi0jIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgZm9yIGFuIGFwcGxpY2F0aW9uLgotIwotCi1pbXBvcnQgdGtpbnRlci50aXgsIG9zLCBjb3B5Ci1mcm9tIHRraW50ZXIuY29uc3RhbnRzIGltcG9ydCAqCi0KLVRDTF9BTExfRVZFTlRTICAgICAgICAgID0gMAotCi1kZWYgUnVuU2FtcGxlIChyb290KToKLSAgICBkaXJsaXN0ID0gRGVtb0Rpckxpc3Qocm9vdCkKLSAgICBkaXJsaXN0Lm1haW5sb29wKCkKLSAgICBkaXJsaXN0LmRlc3Ryb3koKQotCi1jbGFzcyBEZW1vRGlyTGlzdDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdyk6Ci0gICAgICAgIHNlbGYucm9vdCA9IHcKLSAgICAgICAgc2VsZi5leGl0ID0gLTEKLQotICAgICAgICB6ID0gdy53aW5mb190b3BsZXZlbCgpCi0gICAgICAgIHoud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBsYW1iZGEgc2VsZj1zZWxmOiBzZWxmLnF1aXRjbWQoKSkKLQotICAgICAgICAjIENyZWF0ZSB0aGUgdGl4RGlyTGlzdCBhbmQgdGhlIHRpeExhYmVsRW50cnkgd2lkZ2V0cyBvbiB0aGUgb24gdGhlIHRvcAotICAgICAgICAjIG9mIHRoZSBkaWFsb2cgYm94Ci0KLSAgICAgICAgIyBiZyA9IHJvb3QudGsuZXZhbCgndGl4IG9wdGlvbiBnZXQgYmcnKQotICAgICAgICAjIGFkZGluZyBiZz1iZyBjcmFzaGVzIFdpbmRvd3MgcHl0aG9udyB0azguMy4zIFB5dGhvbiAyLjEuMAotCi0gICAgICAgIHRvcCA9IHRraW50ZXIudGl4LkZyYW1lKCB3LCByZWxpZWY9UkFJU0VELCBiZD0xKQotCi0gICAgICAgICMgQ3JlYXRlIHRoZSBEaXJMaXN0IHdpZGdldC4gQnkgZGVmYXVsdCBpdCB3aWxsIHNob3cgdGhlIGN1cnJlbnQKLSAgICAgICAgIyBkaXJlY3RvcnkKLSAgICAgICAgIwotICAgICAgICAjCi0gICAgICAgIHRvcC5kaXIgPSB0a2ludGVyLnRpeC5EaXJMaXN0KHRvcCkKLSAgICAgICAgdG9wLmRpci5obGlzdFsnd2lkdGgnXSA9IDQwCi0KLSAgICAgICAgIyBXaGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlICIuLiIgYnV0dG9uLCB0aGUgc2VsZWN0ZWQgZGlyZWN0b3J5Ci0gICAgICAgICMgaXMgInRyYW5zZmVycmVkIiBpbnRvIHRoZSBlbnRyeSB3aWRnZXQKLSAgICAgICAgIwotICAgICAgICB0b3AuYnRuID0gdGtpbnRlci50aXguQnV0dG9uKHRvcCwgdGV4dCA9ICIgID4+ICAiLCBwYWR5ID0gMCkKLQotICAgICAgICAjIFdlIHVzZSBhIExhYmVsRW50cnkgdG8gaG9sZCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4gVGhlIHVzZXIKLSAgICAgICAgIyBjYW4gY2hvb3NlIGZyb20gdGhlIERpckxpc3Qgd2lkZ2V0LCBvciBoZSBjYW4gdHlwZSBpbiB0aGUgZGlyZWN0b3J5Ci0gICAgICAgICMgbWFudWFsbHkKLSAgICAgICAgIwotICAgICAgICB0b3AuZW50ID0gdGtpbnRlci50aXguTGFiZWxFbnRyeSh0b3AsIGxhYmVsPSJJbnN0YWxsYXRpb24gRGlyZWN0b3J5OiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzaWRlID0gJ3RvcCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9ICcnJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LndpZHRoIDQwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuYW5jaG9yIHcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJycpCi0KLSAgICAgICAgZm9udCA9IHNlbGYucm9vdC50ay5ldmFsKCd0aXggb3B0aW9uIGdldCBmaXhlZF9mb250JykKLSAgICAgICAgIyBmb250ID0gc2VsZi5yb290Lm1hc3Rlci50aXhfb3B0aW9uX2dldCgnZml4ZWRfZm9udCcpCi0gICAgICAgIHRvcC5lbnQuZW50cnlbJ2ZvbnQnXSA9IGZvbnQKLQotICAgICAgICBzZWxmLmRsaXN0X2RpciA9IGNvcHkuY29weShvcy5jdXJkaXIpCi0gICAgICAgICMgVGhpcyBzaG91bGQgd29yayBzZXR0aW5nIHRoZSBlbnRyeSdzIHRleHR2YXJpYWJsZQotICAgICAgICB0b3AuZW50LmVudHJ5Wyd0ZXh0dmFyaWFibGUnXSA9IHNlbGYuZGxpc3RfZGlyCi0gICAgICAgIHRvcC5idG5bJ2NvbW1hbmQnXSA9IGxhbWJkYSBkaXI9dG9wLmRpciwgZW50PXRvcC5lbnQsIHNlbGY9c2VsZjogXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvcHlfbmFtZShkaXIsZW50KQotCi0gICAgICAgICMgdG9wLmVudC5lbnRyeS5pbnNlcnQoMCwndGl4JytyZXByKHNlbGYpKQotICAgICAgICB0b3AuZW50LmVudHJ5LmJpbmQoJzxSZXR1cm4+JywgbGFtYmRhIHNlbGY9c2VsZjogc2VsZi5va2NtZCAoKSApCi0KLSAgICAgICAgdG9wLnBhY2soIGV4cGFuZD0neWVzJywgZmlsbD0nYm90aCcsIHNpZGU9VE9QKQotICAgICAgICB0b3AuZGlyLnBhY2soIGV4cGFuZD0xLCBmaWxsPUJPVEgsIHBhZHg9NCwgcGFkeT00LCBzaWRlPUxFRlQpCi0gICAgICAgIHRvcC5idG4ucGFjayggYW5jaG9yPSdzJywgcGFkeD00LCBwYWR5PTQsIHNpZGU9TEVGVCkKLSAgICAgICAgdG9wLmVudC5wYWNrKCBleHBhbmQ9MSwgZmlsbD1YLCBhbmNob3I9J3MnLCBwYWR4PTQsIHBhZHk9NCwgc2lkZT1MRUZUKQotCi0gICAgICAgICMgVXNlIGEgQnV0dG9uQm94IHRvIGhvbGQgdGhlIGJ1dHRvbnMuCi0gICAgICAgICMKLSAgICAgICAgYm94ID0gdGtpbnRlci50aXguQnV0dG9uQm94ICh3LCBvcmllbnRhdGlvbj0naG9yaXpvbnRhbCcpCi0gICAgICAgIGJveC5hZGQgKCdvaycsIHRleHQ9J09rJywgdW5kZXJsaW5lPTAsIHdpZHRoPTYsCi0gICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gbGFtYmRhIHNlbGY9c2VsZjogc2VsZi5va2NtZCAoKSApCi0gICAgICAgIGJveC5hZGQgKCdjYW5jZWwnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgPSBsYW1iZGEgc2VsZj1zZWxmOiBzZWxmLnF1aXRjbWQgKCkgKQotCi0gICAgICAgIGJveC5wYWNrKCBhbmNob3I9J3MnLCBmaWxsPSd4Jywgc2lkZT1CT1RUT00pCi0KLSAgICBkZWYgY29weV9uYW1lIChzZWxmLCBkaXIsIGVudCk6Ci0gICAgICAgICMgVGhpcyBzaG91bGQgd29yayBhcyBpdCBpcyB0aGUgZW50cnkncyB0ZXh0dmFyaWFibGUKLSAgICAgICAgc2VsZi5kbGlzdF9kaXIgPSBkaXIuY2dldCgndmFsdWUnKQotICAgICAgICAjIGJ1dCBpdCBpc24ndCBzbyBJJ2xsIGRvIGl0IG1hbnVhbGx5Ci0gICAgICAgIGVudC5lbnRyeS5kZWxldGUoMCwnZW5kJykKLSAgICAgICAgZW50LmVudHJ5Lmluc2VydCgwLCBzZWxmLmRsaXN0X2RpcikKLQotICAgIGRlZiBva2NtZCAoc2VsZik6Ci0gICAgICAgICMgdGl4RGVtbzpTdGF0dXMgIllvdSBoYXZlIHNlbGVjdGVkIHRoZSBkaXJlY3RvcnkiICsgc2VsZi5kbGlzdF9kaXIKLSAgICAgICAgc2VsZi5xdWl0Y21kKCkKLQotICAgIGRlZiBxdWl0Y21kIChzZWxmKToKLSAgICAgICAgc2VsZi5leGl0ID0gMAotCi0gICAgZGVmIG1haW5sb29wKHNlbGYpOgotICAgICAgICB3aGlsZSBzZWxmLmV4aXQgPCAwOgotICAgICAgICAgICAgc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotIyBUaGlzICJpZiIgc3RhdGVtZW50IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGlzIHNjcmlwdCBmaWxlIGluc2lkZSBvcgotIyBvdXRzaWRlIG9mIHRoZSBtYWluIGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSIuCi0jCi1pZiBfX25hbWVfXz09ICdfX21haW5fXycgOgotICAgIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3gsIHRyYWNlYmFjawotCi0gICAgdHJ5OgotICAgICAgICByb290PXRraW50ZXIudGl4LlRrKCkKLSAgICAgICAgUnVuU2FtcGxlKHJvb3QpCi0gICAgZXhjZXB0OgotICAgICAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHRleHQgPSAiRXJyb3IgcnVubmluZyB0aGUgZGVtbyBzY3JpcHQ6XG4iCi0gICAgICAgIGZvciBsaW5lIGluIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKHQsdix0Yik6Ci0gICAgICAgICAgICB0ZXh0ID0gdGV4dCArIGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBkID0gdGtpbnRlci5tZXNzYWdlYm94LnNob3dlcnJvciAoICdUaXggRGVtbyBFcnJvcicsIHRleHQpCmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL0RpclRyZWUucHkgYi9EZW1vL3RpeC9zYW1wbGVzL0RpclRyZWUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDU0MTFkZWQuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvc2FtcGxlcy9EaXJUcmVlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLSMgLSotbW9kZTogcHl0aG9uOyBmaWxsLWNvbHVtbjogNzU7IHRhYi13aWR0aDogODsgY29kaW5nOiBpc28tbGF0aW4tMS11bml4IC0qLQotIwotIyAgICAgICAkSWQkCi0jCi0jIFRpeCBEZW1vc3RyYXRpb24gUHJvZ3JhbQotIwotIyBUaGlzIHNhbXBsZSBwcm9ncmFtIGlzIHN0cnVjdHVyZWQgaW4gc3VjaCBhIHdheSBzbyB0aGF0IGl0IGNhbiBiZQotIyBleGVjdXRlZCBmcm9tIHRoZSBUaXggZGVtbyBwcm9ncmFtICJ0aXh3aWRnZXRzLnB5IjogIGl0IG11c3QgaGF2ZSBhCi0jIHByb2NlZHVyZSBjYWxsZWQgIlJ1blNhbXBsZSIuIEl0IHNob3VsZCBhbHNvIGhhdmUgdGhlICJpZiIgc3RhdG1lbnQKLSMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGFzIGEgc3RhbmRhbG9uZQotIyBwcm9ncmFtIHVzaW5nIHRpeHdpc2guCi0KLSMgVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHRoZSB0aXhEaXJUcmVlIHdpZGdldCAtLSB5b3UgY2FuCi0jIHVzZSBpdCBmb3IgdGhlIHVzZXIgdG8gc2VsZWN0IGEgZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgYW4gaW5zdGFsbGF0aW9uCi0jIHByb2dyYW0gY2FuIHVzZSB0aGUgdGl4RGlyVHJlZSB3aWRnZXQgdG8gYXNrIHRoZSB1c2VyIHRvIHNlbGVjdCB0aGUKLSMgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBmb3IgYW4gYXBwbGljYXRpb24uCi0jCi0KLWltcG9ydCB0a2ludGVyLnRpeCwgb3MsIGNvcHkKLWZyb20gdGtpbnRlci5jb25zdGFudHMgaW1wb3J0ICoKLQotVENMX0FMTF9FVkVOVFMgICAgICAgICAgPSAwCi0KLWRlZiBSdW5TYW1wbGUgKHJvb3QpOgotICAgIGRpcnRyZWUgPSBEZW1vRGlyVHJlZShyb290KQotICAgIGRpcnRyZWUubWFpbmxvb3AoKQotICAgIGRpcnRyZWUuZGVzdHJveSgpCi0KLWNsYXNzIERlbW9EaXJUcmVlOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3KToKLSAgICAgICAgc2VsZi5yb290ID0gdwotICAgICAgICBzZWxmLmV4aXQgPSAtMQotCi0gICAgICAgIHogPSB3LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgei53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYucXVpdGNtZCgpKQotCi0gICAgICAgICMgQ3JlYXRlIHRoZSB0aXhEaXJUcmVlIGFuZCB0aGUgdGl4TGFiZWxFbnRyeSB3aWRnZXRzIG9uIHRoZSBvbiB0aGUgdG9wCi0gICAgICAgICMgb2YgdGhlIGRpYWxvZyBib3gKLQotICAgICAgICAjIGJnID0gcm9vdC50ay5ldmFsKCd0aXggb3B0aW9uIGdldCBiZycpCi0gICAgICAgICMgYWRkaW5nIGJnPWJnIGNyYXNoZXMgV2luZG93cyBweXRob253IHRrOC4zLjMgUHl0aG9uIDIuMS4wCi0KLSAgICAgICAgdG9wID0gdGtpbnRlci50aXguRnJhbWUoIHcsIHJlbGllZj1SQUlTRUQsIGJkPTEpCi0KLSAgICAgICAgIyBDcmVhdGUgdGhlIERpclRyZWUgd2lkZ2V0LiBCeSBkZWZhdWx0IGl0IHdpbGwgc2hvdyB0aGUgY3VycmVudAotICAgICAgICAjIGRpcmVjdG9yeQotICAgICAgICAjCi0gICAgICAgICMKLSAgICAgICAgdG9wLmRpciA9IHRraW50ZXIudGl4LkRpclRyZWUodG9wKQotICAgICAgICB0b3AuZGlyLmhsaXN0Wyd3aWR0aCddID0gNDAKLQotICAgICAgICAjIFdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgIi4uIiBidXR0b24sIHRoZSBzZWxlY3RlZCBkaXJlY3RvcnkKLSAgICAgICAgIyBpcyAidHJhbnNmZXJyZWQiIGludG8gdGhlIGVudHJ5IHdpZGdldAotICAgICAgICAjCi0gICAgICAgIHRvcC5idG4gPSB0a2ludGVyLnRpeC5CdXR0b24odG9wLCB0ZXh0ID0gIiAgPj4gICIsIHBhZHkgPSAwKQotCi0gICAgICAgICMgV2UgdXNlIGEgTGFiZWxFbnRyeSB0byBob2xkIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LiBUaGUgdXNlcgotICAgICAgICAjIGNhbiBjaG9vc2UgZnJvbSB0aGUgRGlyVHJlZSB3aWRnZXQsIG9yIGhlIGNhbiB0eXBlIGluIHRoZSBkaXJlY3RvcnkKLSAgICAgICAgIyBtYW51YWxseQotICAgICAgICAjCi0gICAgICAgIHRvcC5lbnQgPSB0a2ludGVyLnRpeC5MYWJlbEVudHJ5KHRvcCwgbGFiZWw9Ikluc3RhbGxhdGlvbiBEaXJlY3Rvcnk6IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHNpZGUgPSAndG9wJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gJycnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkud2lkdGggNDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5hbmNob3IgdwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnJykKLQotICAgICAgICBzZWxmLmRsaXN0X2RpciA9IGNvcHkuY29weShvcy5jdXJkaXIpCi0gICAgICAgIHRvcC5lbnQuZW50cnlbJ3RleHR2YXJpYWJsZSddID0gc2VsZi5kbGlzdF9kaXIKLSAgICAgICAgdG9wLmJ0blsnY29tbWFuZCddID0gbGFtYmRhIGRpcj10b3AuZGlyLCBlbnQ9dG9wLmVudCwgc2VsZj1zZWxmOiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29weV9uYW1lKGRpcixlbnQpCi0KLSAgICAgICAgdG9wLmVudC5lbnRyeS5iaW5kKCc8UmV0dXJuPicsIGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYub2tjbWQgKCkgKQotCi0gICAgICAgIHRvcC5wYWNrKCBleHBhbmQ9J3llcycsIGZpbGw9J2JvdGgnLCBzaWRlPVRPUCkKLSAgICAgICAgdG9wLmRpci5wYWNrKCBleHBhbmQ9MSwgZmlsbD1CT1RILCBwYWR4PTQsIHBhZHk9NCwgc2lkZT1MRUZUKQotICAgICAgICB0b3AuYnRuLnBhY2soIGFuY2hvcj0ncycsIHBhZHg9NCwgcGFkeT00LCBzaWRlPUxFRlQpCi0gICAgICAgIHRvcC5lbnQucGFjayggZXhwYW5kPTEsIGZpbGw9WCwgYW5jaG9yPSdzJywgcGFkeD00LCBwYWR5PTQsIHNpZGU9TEVGVCkKLQotICAgICAgICAjIFVzZSBhIEJ1dHRvbkJveCB0byBob2xkIHRoZSBidXR0b25zLgotICAgICAgICAjCi0gICAgICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCAodywgb3JpZW50YXRpb249J2hvcml6b250YWwnKQotICAgICAgICBib3guYWRkICgnb2snLCB0ZXh0PSdPaycsIHVuZGVybGluZT0wLCB3aWR0aD02LAotICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYub2tjbWQgKCkgKQotICAgICAgICBib3guYWRkICgnY2FuY2VsJywgdGV4dD0nQ2FuY2VsJywgdW5kZXJsaW5lPTAsIHdpZHRoPTYsCi0gICAgICAgICAgICAgICAgICAgICBjb21tYW5kID0gbGFtYmRhIHNlbGY9c2VsZjogc2VsZi5xdWl0Y21kICgpICkKLQotICAgICAgICBib3gucGFjayggYW5jaG9yPSdzJywgZmlsbD0neCcsIHNpZGU9Qk9UVE9NKQotCi0gICAgZGVmIGNvcHlfbmFtZSAoc2VsZiwgZGlyLCBlbnQpOgotICAgICAgICAjIFRoaXMgc2hvdWxkIHdvcmsgYXMgaXQgaXMgdGhlIGVudHJ5J3MgdGV4dHZhcmlhYmxlCi0gICAgICAgIHNlbGYuZGxpc3RfZGlyID0gZGlyLmNnZXQoJ3ZhbHVlJykKLSAgICAgICAgIyBidXQgaXQgaXNuJ3Qgc28gSSdsbCBkbyBpdCBtYW51YWxseQotICAgICAgICBlbnQuZW50cnkuZGVsZXRlKDAsJ2VuZCcpCi0gICAgICAgIGVudC5lbnRyeS5pbnNlcnQoMCwgc2VsZi5kbGlzdF9kaXIpCi0KLSAgICBkZWYgb2tjbWQgKHNlbGYpOgotICAgICAgICAjIHRpeERlbW86U3RhdHVzICJZb3UgaGF2ZSBzZWxlY3RlZCB0aGUgZGlyZWN0b3J5IiArIHNlbGYuZGxpc3RfZGlyCi0gICAgICAgIHNlbGYucXVpdGNtZCgpCi0KLSAgICBkZWYgcXVpdGNtZCAoc2VsZik6Ci0gICAgICAgICMgdGl4RGVtbzpTdGF0dXMgIllvdSBoYXZlIHNlbGVjdGVkIHRoZSBkaXJlY3RvcnkiICsgc2VsZi5kbGlzdF9kaXIKLSAgICAgICAgc2VsZi5leGl0ID0gMAotCi0gICAgZGVmIG1haW5sb29wKHNlbGYpOgotICAgICAgICB3aGlsZSBzZWxmLmV4aXQgPCAwOgotICAgICAgICAgICAgc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotIyBUaGlzICJpZiIgc3RhdGVtZW50IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGlzIHNjcmlwdCBmaWxlIGluc2lkZSBvcgotIyBvdXRzaWRlIG9mIHRoZSBtYWluIGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSIuCi0jCi1pZiBfX25hbWVfXz09ICdfX21haW5fXycgOgotICAgIHJvb3Q9dGtpbnRlci50aXguVGsoKQotICAgIFJ1blNhbXBsZShyb290KQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9Ob3RlQm9vay5weSBiL0RlbW8vdGl4L3NhbXBsZXMvTm90ZUJvb2sucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ4YjVmYTguLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvc2FtcGxlcy9Ob3RlQm9vay5weQorKysgL2Rldi9udWxsCkBAIC0xLDExOSArMCwwIEBACi0jIC0qLW1vZGU6IHB5dGhvbjsgZmlsbC1jb2x1bW46IDc1OyB0YWItd2lkdGg6IDg7IGNvZGluZzogaXNvLWxhdGluLTEtdW5peCAtKi0KLSMKLSMgJElkJAotIwotIyBUaXggRGVtb3N0cmF0aW9uIFByb2dyYW0KLSMKLSMgVGhpcyBzYW1wbGUgcHJvZ3JhbSBpcyBzdHJ1Y3R1cmVkIGluIHN1Y2ggYSB3YXkgc28gdGhhdCBpdCBjYW4gYmUKLSMgZXhlY3V0ZWQgZnJvbSB0aGUgVGl4IGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSI6IGl0IG11c3QgaGF2ZSBhCi0jIHByb2NlZHVyZSBjYWxsZWQgIlJ1blNhbXBsZSIuIEl0IHNob3VsZCBhbHNvIGhhdmUgdGhlICJpZiIgc3RhdG1lbnQKLSMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGFzIGEgc3RhbmRhbG9uZQotIyBwcm9ncmFtLgotCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgdGl4Tm90ZUJvb2sgd2lkZ2V0LCB3aGljaCBhbGxvd3MKLSMgeW91IHRvIGxheSBvdXQgeW91ciBpbnRlcmZhY2UgdXNpbmcgYSAibm90ZWJvb2siIG1ldGFwaG9yZQotIwotaW1wb3J0IHRraW50ZXIudGl4Ci0KLWRlZiBSdW5TYW1wbGUodyk6Ci0gICAgZ2xvYmFsIHJvb3QKLSAgICByb290ID0gdwotCi0gICAgIyBXZSB1c2UgdGhlc2Ugb3B0aW9ucyB0byBzZXQgdGhlIHNpemVzIG9mIHRoZSBzdWJ3aWRnZXRzIGluc2lkZSB0aGUKLSAgICAjIG5vdGVib29rLCBzbyB0aGF0IHRoZXkgYXJlIHdlbGwtYWxpZ25lZCBvbiB0aGUgc2NyZWVuLgotICAgIHByZWZpeCA9IHRraW50ZXIudGl4Lk9wdGlvbk5hbWUodykKLSAgICBpZiBwcmVmaXg6Ci0gICAgICAgIHByZWZpeCA9ICcqJytwcmVmaXgKLSAgICBlbHNlOgotICAgICAgICBwcmVmaXggPSAnJwotICAgIHcub3B0aW9uX2FkZChwcmVmaXgrJypUaXhDb250cm9sKmVudHJ5LndpZHRoJywgMTApCi0gICAgdy5vcHRpb25fYWRkKHByZWZpeCsnKlRpeENvbnRyb2wqbGFiZWwud2lkdGgnLCAxOCkKLSAgICB3Lm9wdGlvbl9hZGQocHJlZml4KycqVGl4Q29udHJvbCpsYWJlbC5hbmNob3InLCB0a2ludGVyLnRpeC5FKQotICAgIHcub3B0aW9uX2FkZChwcmVmaXgrJypUaXhOb3RlQm9vayp0YWdQYWRYJywgOCkKLQotICAgICMgQ3JlYXRlIHRoZSBub3RlYm9vayB3aWRnZXQgYW5kIHNldCBpdHMgYmFja3BhZ2Vjb2xvciB0byBncmF5LgotICAgICMgTm90ZSB0aGF0IHRoZSAtYmFja3BhZ2Vjb2xvciBvcHRpb24gYmVsb25ncyB0byB0aGUgIm5iZnJhbWUiCi0gICAgIyBzdWJ3aWRnZXQuCi0gICAgbmIgPSB0a2ludGVyLnRpeC5Ob3RlQm9vayh3LCBuYW1lPSduYicsIGlwYWR4PTYsIGlwYWR5PTYpCi0gICAgbmJbJ2JnJ10gPSAnZ3JheScKLSAgICBuYi5uYmZyYW1lWydiYWNrcGFnZWNvbG9yJ10gPSAnZ3JheScKLQotICAgICMgQ3JlYXRlIHRoZSB0d28gdGFicyBvbiB0aGUgbm90ZWJvb2suIFRoZSAtdW5kZXJsaW5lIG9wdGlvbgotICAgICMgcHV0cyBhIHVuZGVybGluZSBvbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBsYWJlbHMgb2YgdGhlIHRhYnMuCi0gICAgIyBLZXlib2FyZCBhY2NlbGVyYXRvcnMgd2lsbCBiZSBkZWZpbmVkIGF1dG9tYXRpY2FsbHkgYWNjb3JkaW5nCi0gICAgIyB0byB0aGUgdW5kZXJsaW5lZCBjaGFyYWN0ZXIuCi0gICAgbmIuYWRkKCdoYXJkX2Rpc2snLCBsYWJlbD0iSGFyZCBEaXNrIiwgdW5kZXJsaW5lPTApCi0gICAgbmIuYWRkKCduZXR3b3JrJywgbGFiZWw9Ik5ldHdvcmsiLCB1bmRlcmxpbmU9MCkKLQotICAgIG5iLnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD01LCBwYWR5PTUgLHNpZGU9dGtpbnRlci50aXguVE9QKQotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIENyZWF0ZSB0aGUgZmlyc3QgcGFnZQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBDcmVhdGUgdHdvIGZyYW1lczogb25lIGZvciB0aGUgY29tbW9uIGJ1dHRvbnMsIG9uZSBmb3IgdGhlCi0gICAgIyBvdGhlciB3aWRnZXRzCi0gICAgIwotICAgIHRhYj1uYi5oYXJkX2Rpc2sKLSAgICBmID0gdGtpbnRlci50aXguRnJhbWUodGFiKQotICAgIGNvbW1vbiA9IHRraW50ZXIudGl4LkZyYW1lKHRhYikKLQotICAgIGYucGFjayhzaWRlPXRraW50ZXIudGl4LkxFRlQsIHBhZHg9MiwgcGFkeT0yLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIGV4cGFuZD0xKQotICAgIGNvbW1vbi5wYWNrKHNpZGU9dGtpbnRlci50aXguUklHSFQsIHBhZHg9MiwgZmlsbD10a2ludGVyLnRpeC5ZKQotCi0gICAgYSA9IHRraW50ZXIudGl4LkNvbnRyb2woZiwgdmFsdWU9MTIsICAgbGFiZWw9J0FjY2VzcyB0aW1lOiAnKQotICAgIHcgPSB0a2ludGVyLnRpeC5Db250cm9sKGYsIHZhbHVlPTQwMCwgIGxhYmVsPSdXcml0ZSBUaHJvdWdocHV0OiAnKQotICAgIHIgPSB0a2ludGVyLnRpeC5Db250cm9sKGYsIHZhbHVlPTQwMCwgIGxhYmVsPSdSZWFkIFRocm91Z2hwdXQ6ICcpCi0gICAgYyA9IHRraW50ZXIudGl4LkNvbnRyb2woZiwgdmFsdWU9MTAyMSwgbGFiZWw9J0NhcGFjaXR5OiAnKQotCi0gICAgYS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgdy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgci5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgYy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0KLSAgICAjIENyZWF0ZSB0aGUgY29tbW9uIGJ1dHRvbnMKLSAgICBjcmVhdGVDb21tb25CdXR0b25zKGNvbW1vbikKLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBDcmVhdGUgdGhlIHNlY29uZCBwYWdlCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIHRhYiA9IG5iLm5ldHdvcmsKLQotICAgIGYgPSB0a2ludGVyLnRpeC5GcmFtZSh0YWIpCi0gICAgY29tbW9uID0gdGtpbnRlci50aXguRnJhbWUodGFiKQotCi0gICAgZi5wYWNrKHNpZGU9dGtpbnRlci50aXguTEVGVCwgcGFkeD0yLCBwYWR5PTIsIGZpbGw9dGtpbnRlci50aXguQk9USCwgZXhwYW5kPTEpCi0gICAgY29tbW9uLnBhY2soc2lkZT10a2ludGVyLnRpeC5SSUdIVCwgcGFkeD0yLCBmaWxsPXRraW50ZXIudGl4LlkpCi0KLSAgICBhID0gdGtpbnRlci50aXguQ29udHJvbChmLCB2YWx1ZT0xMiwgICBsYWJlbD0nQWNjZXNzIHRpbWU6ICcpCi0gICAgdyA9IHRraW50ZXIudGl4LkNvbnRyb2woZiwgdmFsdWU9NDAwLCAgbGFiZWw9J1dyaXRlIFRocm91Z2hwdXQ6ICcpCi0gICAgciA9IHRraW50ZXIudGl4LkNvbnRyb2woZiwgdmFsdWU9NDAwLCAgbGFiZWw9J1JlYWQgVGhyb3VnaHB1dDogJykKLSAgICBjID0gdGtpbnRlci50aXguQ29udHJvbChmLCB2YWx1ZT0xMDIxLCBsYWJlbD0nQ2FwYWNpdHk6ICcpCi0gICAgdSA9IHRraW50ZXIudGl4LkNvbnRyb2woZiwgdmFsdWU9MTAsICAgbGFiZWw9J1VzZXJzOiAnKQotCi0gICAgYS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgdy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgci5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgYy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgdS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0KLSAgICBjcmVhdGVDb21tb25CdXR0b25zKGNvbW1vbikKLQotZGVmIGRvRGVzdHJveSgpOgotICAgIGdsb2JhbCByb290Ci0gICAgcm9vdC5kZXN0cm95KCkKLQotZGVmIGNyZWF0ZUNvbW1vbkJ1dHRvbnMobWFzdGVyKToKLSAgICBvayA9IHRraW50ZXIudGl4LkJ1dHRvbihtYXN0ZXIsIG5hbWU9J29rJywgdGV4dD0nT0snLCB3aWR0aD02LAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9ZG9EZXN0cm95KQotICAgIGNhbmNlbCA9IHRraW50ZXIudGl4LkJ1dHRvbihtYXN0ZXIsIG5hbWU9J2NhbmNlbCcsCi0gICAgICAgICAgICAgICAgICAgIHRleHQ9J0NhbmNlbCcsIHdpZHRoPTYsCi0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9ZG9EZXN0cm95KQotCi0gICAgb2sucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0yLCBwYWR5PTIpCi0gICAgY2FuY2VsLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MiwgcGFkeT0yKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHJvb3QgPSB0a2ludGVyLnRpeC5UaygpCi0gICAgUnVuU2FtcGxlKHJvb3QpCi0gICAgcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL09wdE1lbnUucHkgYi9EZW1vL3RpeC9zYW1wbGVzL09wdE1lbnUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQxZGQ0NmQuLjAwMDAwMDAKLS0tIGEvRGVtby90aXgvc2FtcGxlcy9PcHRNZW51LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeE9wdGlvbk1lbnUgd2lkZ2V0IC0tIHlvdSBjYW4KLSMgdXNlIGl0IGZvciB0aGUgdXNlciB0byBjaG9vc2UgZnJvbSBhIGZpeGVkIHNldCBvZiBvcHRpb25zCi0jCi1pbXBvcnQgdGtpbnRlci50aXgKLQotb3B0aW9ucyA9IHsndGV4dCc6J1BsYWluIFRleHQnLCAncG9zdCc6J1Bvc3RTY3JpcHQnLCAnaHRtbCc6J0hUTUwnLAotICAgICAgICAgICAndGV4JzonTGFUZVgnLCAncnRmJzonUmljaCBUZXh0IEZvcm1hdCd9Ci0KLWRlZiBSdW5TYW1wbGUodyk6Ci0gICAgZ2xvYmFsIGRlbW9fb3B0X2Zyb20sIGRlbW9fb3B0X3RvCi0KLSAgICBkZW1vX29wdF9mcm9tID0gdGtpbnRlci50aXguU3RyaW5nVmFyKCkKLSAgICBkZW1vX29wdF90byA9IHRraW50ZXIudGl4LlN0cmluZ1ZhcigpCi0KLSAgICB0b3AgPSB0a2ludGVyLnRpeC5GcmFtZSh3LCBiZD0xLCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VEKQotCi0gICAgZnJvbV9maWxlID0gdGtpbnRlci50aXguT3B0aW9uTWVudSh0b3AsIGxhYmVsPSJGcm9tIEZpbGUgRm9ybWF0IDogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1kZW1vX29wdF9mcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSAnbGFiZWwud2lkdGggIDE5IGxhYmVsLmFuY2hvciBlIG1lbnVidXR0b24ud2lkdGggMTUnKQotCi0gICAgdG9fZmlsZSA9IHRraW50ZXIudGl4Lk9wdGlvbk1lbnUodG9wLCBsYWJlbD0iVG8gRmlsZSBGb3JtYXQgOiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1kZW1vX29wdF90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz0nbGFiZWwud2lkdGggIDE5IGxhYmVsLmFuY2hvciBlIG1lbnVidXR0b24ud2lkdGggMTUnKQotCi0gICAgIyBBZGQgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRvIHRoZSB0d28gT3B0aW9uTWVudSB3aWRnZXRzCi0gICAgIwotICAgICMgW0hpbnRdIFlvdSBoYXZlIHRvIGFkZCB0aGUgb3B0aW9ucyBmaXJzdCBiZWZvcmUgeW91IHNldCB0aGUKLSAgICAjICAgICAgICBnbG9iYWwgdmFyaWFibGVzICJkZW1vX29wdF9mcm9tIiBhbmQgImRlbW9fb3B0X3RvIi4gT3RoZXJ3aXNlCi0gICAgIyAgICAgICAgdGhlIE9wdGlvbk1lbnUgd2lkZ2V0IHdpbGwgY29tcGxhaW4gYWJvdXQgInVua25vd24gb3B0aW9ucyIhCi0gICAgIwotICAgIGZvciBvcHQgaW4gb3B0aW9ucy5rZXlzKCk6Ci0gICAgICAgIGZyb21fZmlsZS5hZGRfY29tbWFuZChvcHQsIGxhYmVsPW9wdGlvbnNbb3B0XSkKLSAgICAgICAgdG9fZmlsZS5hZGRfY29tbWFuZChvcHQsIGxhYmVsPW9wdGlvbnNbb3B0XSkKLQotICAgIGRlbW9fb3B0X2Zyb20uc2V0KCdodG1sJykKLSAgICBkZW1vX29wdF90by5zZXQoJ3Bvc3QnKQotCi0gICAgZnJvbV9maWxlLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGFuY2hvcj10a2ludGVyLnRpeC5XLCBwYWR5PTMsIHBhZHg9NikKLSAgICB0b19maWxlLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGFuY2hvcj10a2ludGVyLnRpeC5XLCBwYWR5PTMsIHBhZHg9NikKLQotICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh3LCBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5IT1JJWk9OVEFMKQotICAgIGJveC5hZGQoJ29rJywgdGV4dD0nT2snLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogb2tfY29tbWFuZCh3KSkKLSAgICBib3guYWRkKCdjYW5jZWwnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogdy5kZXN0cm95KCkpCi0gICAgYm94LnBhY2soc2lkZT10a2ludGVyLnRpeC5CT1RUT00sIGZpbGw9dGtpbnRlci50aXguWCkKLSAgICB0b3AucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSkKLQotZGVmIG9rX2NvbW1hbmQodyk6Ci0gICAgIyB0aXhEZW1vOlN0YXR1cyAiQ29udmVydCBmaWxlIGZyb20gJXMgdG8gJXMiICUgKCBkZW1vX29wdF9mcm9tLmdldCgpLCBkZW1vX29wdF90by5nZXQoKSkKLSAgICB3LmRlc3Ryb3koKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHJvb3QgPSB0a2ludGVyLnRpeC5UaygpCi0gICAgUnVuU2FtcGxlKHJvb3QpCi0gICAgcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RpeC9zYW1wbGVzL1BhbmVkV2luLnB5IGIvRGVtby90aXgvc2FtcGxlcy9QYW5lZFdpbi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMWZmYzQ3MC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL1BhbmVkV2luLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbS4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeFBhbmVkV2luZG93IHdpZGdldC4gVGhpcyBwcm9ncmFtCi0jIGlzIGEgZHVtbXkgbmV3cyByZWFkZXI6IHRoZSB1c2VyIGNhbiBhZGp1c3QgdGhlIHNpemVzIG9mIHRoZSBsaXN0Ci0jIG9mIGFydGljYWwgbmFtZXMgYW5kIHRoZSBzaXplIG9mIHRoZSB0ZXh0IHdpZGdldCB0aGF0IHNob3dzIHRoZSBib2R5Ci0jIG9mIHRoZSBhcnRpY2xlLgotCi1pbXBvcnQgdGtpbnRlci50aXgKLQotVENMX0FMTF9FVkVOVFMgICAgICAgICAgPSAwCi0KLWRlZiBSdW5TYW1wbGUgKHJvb3QpOgotICAgIHBhbmVkd2luID0gRGVtb1BhbmVkd2luKHJvb3QpCi0gICAgcGFuZWR3aW4ubWFpbmxvb3AoKQotICAgIHBhbmVkd2luLmRlc3Ryb3koKQotCi1jbGFzcyBEZW1vUGFuZWR3aW46Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHcpOgotICAgICAgICBzZWxmLnJvb3QgPSB3Ci0gICAgICAgIHNlbGYuZXhpdCA9IC0xCi0KLSAgICAgICAgeiA9IHcud2luZm9fdG9wbGV2ZWwoKQotICAgICAgICB6LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgbGFtYmRhIHNlbGY9c2VsZjogc2VsZi5xdWl0Y21kKCkpCi0KLSAgICAgICAgZ3JvdXAgPSB0a2ludGVyLnRpeC5MYWJlbEVudHJ5KHcsIGxhYmVsPSdOZXdzZ3JvdXA6Jywgb3B0aW9ucz0nZW50cnkud2lkdGggMjUnKQotICAgICAgICBncm91cC5lbnRyeS5pbnNlcnQoMCwnY29tcC5sYW5nLnB5dGhvbicpCi0gICAgICAgIHBhbmUgPSB0a2ludGVyLnRpeC5QYW5lZFdpbmRvdyh3LCBvcmllbnRhdGlvbj0ndmVydGljYWwnKQotCi0gICAgICAgIHAxID0gcGFuZS5hZGQoJ2xpc3QnLCBtaW49NzAsIHNpemU9MTAwKQotICAgICAgICBwMiA9IHBhbmUuYWRkKCd0ZXh0JywgbWluPTcwKQotICAgICAgICBsaXN0ID0gdGtpbnRlci50aXguU2Nyb2xsZWRMaXN0Qm94KHAxKQotICAgICAgICBsaXN0Lmxpc3Rib3hbJ3dpZHRoJ10gPSA4MAotICAgICAgICBsaXN0Lmxpc3Rib3hbJ2hlaWdodCddID0gNQotICAgICAgICB0ZXh0ID0gdGtpbnRlci50aXguU2Nyb2xsZWRUZXh0KHAyKQotICAgICAgICB0ZXh0LnRleHRbJ3dpZHRoJ10gPSA4MAotICAgICAgICB0ZXh0LnRleHRbJ2hlaWdodCddID0gMjAKLQotICAgICAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIiAgMTIzMjQgUmU6IFRraW50ZXIgaXMgZ29vZCBmb3IgeW91ciBoZWFsdGgiKQotICAgICAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIisgMTIzMjUgUmU6IFRraW50ZXIgaXMgZ29vZCBmb3IgeW91ciBoZWFsdGgiKQotICAgICAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIisgMTIzMjYgUmU6IFRpeCBpcyBldmVuIGJldHRlciBmb3IgeW91ciBoZWFsdGggKFdhczogVGtpbnRlciBpcyBnb29kLi4uKSIpCi0gICAgICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAiICAxMjMyNyBSZTogVGl4IGlzIGV2ZW4gYmV0dGVyIGZvciB5b3VyIGhlYWx0aCAoV2FzOiBUa2ludGVyIGlzIGdvb2QuLi4pIikKLSAgICAgICAgbGlzdC5saXN0Ym94Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICIrIDEyMzI4IFJlOiBUaXggaXMgZXZlbiBiZXR0ZXIgZm9yIHlvdXIgaGVhbHRoIChXYXM6IFRraW50ZXIgaXMgZ29vZC4uLikiKQotICAgICAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIiAgMTIzMjkgUmU6IFRpeCBpcyBldmVuIGJldHRlciBmb3IgeW91ciBoZWFsdGggKFdhczogVGtpbnRlciBpcyBnb29kLi4uKSIpCi0gICAgICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAiKyAxMjMzMCBSZTogVGl4IGlzIGV2ZW4gYmV0dGVyIGZvciB5b3VyIGhlYWx0aCAoV2FzOiBUa2ludGVyIGlzIGdvb2QuLi4pIikKLQotICAgICAgICB0ZXh0LnRleHRbJ2JnJ10gPSBsaXN0Lmxpc3Rib3hbJ2JnJ10KLSAgICAgICAgdGV4dC50ZXh0Wyd3cmFwJ10gPSAnbm9uZScKLSAgICAgICAgdGV4dC50ZXh0Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICIiIgotICAgIE1vbiwgMTkgSnVuIDE5OTUgMTE6Mzk6NTIgICAgICAgIGNvbXAubGFuZy5weXRob24gICAgICAgICAgICAgIFRocmVhZCAgIDM0IG9mICAyMjAKLSAgICBMaW5lcyAzNTMgICAgICAgQSBuZXcgd2F5IHRvIHB1dCB0ZXh0IGFuZCBiaXRtYXBzIHRvZ2V0aGVyIGlObyByZXNwb25zZXMKLSAgICBpb2lAYmx1ZS5zZWFzLnVwZW5uLmVkdSAgICAgICAgICAgICAgICBJb2kgSy4gTGFtIGF0IFVuaXZlcnNpdHkgb2YgUGVubnN5bHZhbmlhCi0KLSAgICBIaSwKLQotICAgIEkgaGF2ZSBpbXBsZW1lbnRlZCBhIG5ldyBpbWFnZSB0eXBlIGNhbGxlZCAiY29tcG91bmQiLiBJdCBhbGxvd3MgeW91Ci0gICAgdG8gZ2x1ZSB0b2dldGhlciBhIGJ1bmNoIG9mIGJpdG1hcHMsIGltYWdlcyBhbmQgdGV4dCBzdHJpbmdzIHRvZ2V0aGVyCi0gICAgdG8gZm9ybSBhIGJpZ2dlciBpbWFnZS4gVGhlbiB5b3UgY2FuIHVzZSB0aGlzIGltYWdlIHdpdGggd2lkZ2V0cyB0aGF0Ci0gICAgc3VwcG9ydCB0aGUgLWltYWdlIG9wdGlvbi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gZGlzcGxheSBhIHRleHQgc3RyaW5nIHN0cmluZwotICAgIHRvZ2V0aGVyIHdpdGggYSBiaXRtYXAsIGF0IHRoZSBzYW1lIHRpbWUsIGluc2lkZSBhIFRLIGJ1dHRvbiB3aWRnZXQuCi0gICAgIiIiKQotICAgICAgICB0ZXh0LnRleHRbJ3N0YXRlJ10gPSAnZGlzYWJsZWQnCi0KLSAgICAgICAgbGlzdC5wYWNrKGV4cGFuZD0xLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIHBhZHg9NCwgcGFkeT02KQotICAgICAgICB0ZXh0LnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD00LCBwYWR5PTYpCi0KLSAgICAgICAgZ3JvdXAucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0zLCBwYWR5PTMsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICAgICAgcGFuZS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTMsIHBhZHk9MywgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSkKLQotICAgICAgICBib3ggPSB0a2ludGVyLnRpeC5CdXR0b25Cb3godywgb3JpZW50YXRpb249dGtpbnRlci50aXguSE9SSVpPTlRBTCkKLSAgICAgICAgYm94LmFkZCgnb2snLCB0ZXh0PSdPaycsIHVuZGVybGluZT0wLCB3aWR0aD02LAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0Y21kKQotICAgICAgICBib3guYWRkKCdjYW5jZWwnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdGNtZCkKLSAgICAgICAgYm94LnBhY2soc2lkZT10a2ludGVyLnRpeC5CT1RUT00sIGZpbGw9dGtpbnRlci50aXguWCkKLQotICAgIGRlZiBxdWl0Y21kIChzZWxmKToKLSAgICAgICAgc2VsZi5leGl0ID0gMAotCi0gICAgZGVmIG1haW5sb29wKHNlbGYpOgotICAgICAgICB3aGlsZSBzZWxmLmV4aXQgPCAwOgotICAgICAgICAgICAgc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICByb290ID0gdGtpbnRlci50aXguVGsoKQotICAgIFJ1blNhbXBsZShyb290KQpkaWZmIC0tZ2l0IGEvRGVtby90aXgvc2FtcGxlcy9Qb3BNZW51LnB5IGIvRGVtby90aXgvc2FtcGxlcy9Qb3BNZW51LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjYjc1ZDg1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L3NhbXBsZXMvUG9wTWVudS5weQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLSMgLSotbW9kZTogcHl0aG9uOyBmaWxsLWNvbHVtbjogNzU7IHRhYi13aWR0aDogODsgY29kaW5nOiBpc28tbGF0aW4tMS11bml4IC0qLQotIwotIyAgICAgICAkSWQkCi0jCi0jIFRpeCBEZW1vc3RyYXRpb24gUHJvZ3JhbQotIwotIyBUaGlzIHNhbXBsZSBwcm9ncmFtIGlzIHN0cnVjdHVyZWQgaW4gc3VjaCBhIHdheSBzbyB0aGF0IGl0IGNhbiBiZQotIyBleGVjdXRlZCBmcm9tIHRoZSBUaXggZGVtbyBwcm9ncmFtICJ0aXh3aWRnZXRzLnB5IjogaXQgbXVzdCBoYXZlIGEKLSMgcHJvY2VkdXJlIGNhbGxlZCAiUnVuU2FtcGxlIi4gSXQgc2hvdWxkIGFsc28gaGF2ZSB0aGUgImlmIiBzdGF0bWVudAotIyBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSBzbyB0aGF0IGl0IGNhbiBiZSBydW4gYXMgYSBzdGFuZGFsb25lCi0jIHByb2dyYW0gdXNpbmcgdGl4d2lzaC4KLQotIyBUaGlzIGZpbGUgZGVtb25zdHJhdGVzIHRoZSB1c2Ugb2YgdGhlIHRpeFBvcHVwTWVudSB3aWRnZXQuCi0jCi1pbXBvcnQgdGtpbnRlci50aXgKLQotZGVmIFJ1blNhbXBsZSh3KToKLSAgICAjIFdlIGNyZWF0ZSB0aGUgZnJhbWUgYW5kIHRoZSBidXR0b24sIHRoZW4gd2UnbGwgYmluZCB0aGUgUG9wdXBNZW51Ci0gICAgIyB0byBib3RoIHdpZGdldHMuIFRoZSByZXN1bHQgaXMsIHdoZW4geW91IHByZXNzIHRoZSByaWdodCBtb3VzZQotICAgICMgYnV0dG9uIG92ZXIgJHcudG9wIG9yICR3LnRvcC5idXQsIHRoZSBQb3B1cE1lbnUgd2lsbCBjb21lIHVwLgotICAgICMKLSAgICB0b3AgPSB0a2ludGVyLnRpeC5GcmFtZSh3LCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELCBiZD0xKQotICAgIGJ1dCA9IHRraW50ZXIudGl4LkJ1dHRvbih0b3AsIHRleHQ9J1ByZXNzIHRoZSByaWdodCBtb3VzZSBidXR0b24gb3ZlciB0aGlzIGJ1dHRvbiBvciBpdHMgc3Vycm91bmRpbmcgYXJlYScpCi0gICAgYnV0LnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD01MCwgcGFkeT01MCkKLQotICAgIHAgPSB0a2ludGVyLnRpeC5Qb3B1cE1lbnUodG9wLCB0aXRsZT0nUG9wdXAgVGVzdCcpCi0gICAgcC5iaW5kX3dpZGdldCh0b3ApCi0gICAgcC5iaW5kX3dpZGdldChidXQpCi0KLSAgICAjIFNldCB0aGUgZW50cmllcyBpbnNpZGUgdGhlIFBvcHVwTWVudSB3aWRnZXQuCi0gICAgIyBbSGludF0gWW91IGhhdmUgdG8gbWFuaXB1bGF0ZSB0aGUgIm1lbnUiIHN1YndpZGdldC4KLSAgICAjICAgICAgICAkdy50b3AucCBpdHNlbGYgaXMgTk9UIGEgbWVudSB3aWRnZXQuCi0gICAgIyBbSGludF0gV2F0Y2ggY2FyZWZ1bGx5IGhvdyB0aGUgc3ViLW1lbnUgaXMgY3JlYXRlZAotICAgICMKLSAgICBwLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J0Rlc2t0b3AnLCB1bmRlcmxpbmU9MCkKLSAgICBwLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J1NlbGVjdCcsIHVuZGVybGluZT0wKQotICAgIHAubWVudS5hZGRfY29tbWFuZChsYWJlbD0nRmluZCcsIHVuZGVybGluZT0wKQotICAgIHAubWVudS5hZGRfY29tbWFuZChsYWJlbD0nU3lzdGVtJywgdW5kZXJsaW5lPTEpCi0gICAgcC5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSdIZWxwJywgdW5kZXJsaW5lPTApCi0gICAgbTEgPSB0a2ludGVyLnRpeC5NZW51KHAubWVudSkKLSAgICBtMS5hZGRfY29tbWFuZChsYWJlbD0nSGVsbG8nKQotICAgIHAubWVudS5hZGRfY2FzY2FkZShsYWJlbD0nTW9yZScsIG1lbnU9bTEpCi0KLSAgICBidXQucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD00MCwgcGFkeT01MCkKLQotICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh3LCBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5IT1JJWk9OVEFMKQotICAgIGJveC5hZGQoJ29rJywgdGV4dD0nT2snLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIHc9dzogdy5kZXN0cm95KCkpCi0gICAgYm94LmFkZCgnY2FuY2VsJywgdGV4dD0nQ2FuY2VsJywgdW5kZXJsaW5lPTAsIHdpZHRoPTYsCi0gICAgICAgICAgICBjb21tYW5kPWxhbWJkYSB3PXc6IHcuZGVzdHJveSgpKQotICAgIGJveC5wYWNrKHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgdG9wLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGZpbGw9dGtpbnRlci50aXguQk9USCwgZXhwYW5kPTEpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcm9vdCA9IHRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKLSAgICByb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0MS5weSBiL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0MS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYmY0NjAyMC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL1NITGlzdDEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiOiBpdCBtdXN0IGhhdmUgYQotIyBwcm9jZWR1cmUgY2FsbGVkICJSdW5TYW1wbGUiLiBJdCBzaG91bGQgYWxzbyBoYXZlIHRoZSAiaWYiIHN0YXRtZW50Ci0jIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHNvIHRoYXQgaXQgY2FuIGJlIHJ1biBhcyBhIHN0YW5kYWxvbmUKLSMgcHJvZ3JhbSB1c2luZyB0aXh3aXNoLgotCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIHVzZSBvZiB0aGUgdGl4U2Nyb2xsZWRITGlzdCB3aWRnZXQuCi0jCi0KLWltcG9ydCB0a2ludGVyLnRpeAotCi1UQ0xfQUxMX0VWRU5UUyAgICAgICAgICA9IDAKLQotZGVmIFJ1blNhbXBsZSAocm9vdCk6Ci0gICAgc2hsaXN0ID0gRGVtb1NITGlzdChyb290KQotICAgIHNobGlzdC5tYWlubG9vcCgpCi0gICAgc2hsaXN0LmRlc3Ryb3koKQotCi1jbGFzcyBEZW1vU0hMaXN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3KToKLSAgICAgICAgc2VsZi5yb290ID0gdwotICAgICAgICBzZWxmLmV4aXQgPSAtMQotCi0gICAgICAgIHogPSB3LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgei53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYucXVpdGNtZCgpKQotCi0gICAgICAgICMgV2UgY3JlYXRlIHRoZSBmcmFtZSBhbmQgdGhlIFNjcm9sbGVkSExpc3Qgd2lkZ2V0Ci0gICAgICAgICMgYXQgdGhlIHRvcCBvZiB0aGUgZGlhbG9nIGJveAotICAgICAgICAjCi0gICAgICAgIHRvcCA9IHRraW50ZXIudGl4LkZyYW1lKCB3LCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELCBiZD0xKQotCi0gICAgICAgICMgUHV0IGEgc2ltcGxlIGhpZXJhY2h5IGludG8gdGhlIEhMaXN0ICh0d28gbGV2ZWxzKS4gVXNlIGNvbG9ycyBhbmQKLSAgICAgICAgIyBzZXBhcmF0b3Igd2lkZ2V0cyAoZnJhbWVzKSB0byBtYWtlIHRoZSBsaXN0IGxvb2sgZmFuY3kKLSAgICAgICAgIwotICAgICAgICB0b3AuYSA9IHRraW50ZXIudGl4LlNjcm9sbGVkSExpc3QodG9wKQotICAgICAgICB0b3AuYS5wYWNrKCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTEwLCBwYWR5PTEwLCBzaWRlPXRraW50ZXIudGl4LlRPUCkKLQotICAgICAgICAjIFRoaXMgaXMgb3VyIGxpdHRsZSByZWxhdGlvbmFsIGRhdGFiYXNlCi0gICAgICAgICMKLSAgICAgICAgYm9zc2VzID0gWwotICAgICAgICAgICAgKCdqZWZmJywgICdKZWZmIFdheG1hbicpLAotICAgICAgICAgICAgKCdqb2huJywgICdKb2huIExlZScpLAotICAgICAgICAgICAgKCdwZXRlcicsICdQZXRlciBLZW5zb24nKQotICAgICAgICBdCi0KLSAgICAgICAgZW1wbG95ZWVzID0gWwotICAgICAgICAgICAgKCdhbGV4JywgICdqb2huJywgICdBbGV4IEtlbGxtYW4nKSwKLSAgICAgICAgICAgICgnYWxhbicsICAnam9obicsICAnQWxhbiBBZGFtcycpLAotICAgICAgICAgICAgKCdhbmR5JywgICdwZXRlcicsICdBbmRyZWFzIENyYXdmb3JkJyksCi0gICAgICAgICAgICAoJ2RvdWcnLCAgJ2plZmYnLCAgJ0RvdWdsYXMgQmxvb20nKSwKLSAgICAgICAgICAgICgnam9uJywgICAncGV0ZXInLCAnSm9uIEJhcmFraScpLAotICAgICAgICAgICAgKCdjaHJpcycsICdqZWZmJywgICdDaHJpcyBHZW9mZnJleScpLAotICAgICAgICAgICAgKCdjaHVjaycsICdqZWZmJywgICdDaHVjayBNY0xlYW4nKQotICAgICAgICBdCi0KLSAgICAgICAgaGxpc3Q9dG9wLmEuaGxpc3QKLQotICAgICAgICAjIExldCBjb25maWd1cmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIEhMaXN0IHN1YndpZGdldAotICAgICAgICAjCi0gICAgICAgIGhsaXN0LmNvbmZpZyggc2VwYXJhdG9yPScuJywgd2lkdGg9MjUsIGRyYXdicmFuY2g9MCwgaW5kZW50PTEwKQotCi0gICAgICAgIGNvdW50PTAKLSAgICAgICAgZm9yIGJvc3MsbmFtZSBpbiBib3NzZXMgOgotICAgICAgICAgICAgaWYgY291bnQgOgotICAgICAgICAgICAgICAgIGY9dGtpbnRlci50aXguRnJhbWUoaGxpc3QsIG5hbWU9J3NlcCVkJyAlIGNvdW50LCBoZWlnaHQ9Miwgd2lkdGg9MTUwLAotICAgICAgICAgICAgICAgICAgICBiZD0yLCByZWxpZWY9dGtpbnRlci50aXguU1VOS0VOICkKLQotICAgICAgICAgICAgICAgIGhsaXN0LmFkZF9jaGlsZCggaXRlbXR5cGU9dGtpbnRlci50aXguV0lORE9XLAotICAgICAgICAgICAgICAgICAgICB3aW5kb3c9Ziwgc3RhdGU9dGtpbnRlci50aXguRElTQUJMRUQgKQotCi0gICAgICAgICAgICBobGlzdC5hZGQoYm9zcywgaXRlbXR5cGU9dGtpbnRlci50aXguVEVYVCwgdGV4dD1uYW1lKQotICAgICAgICAgICAgY291bnQgPSBjb3VudCsxCi0KLQotICAgICAgICBmb3IgcGVyc29uLGJvc3MsbmFtZSBpbiBlbXBsb3llZXMgOgotICAgICAgICAgICAgIyAnLicgaXMgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIgd2UgY2hvc2UgYWJvdmUKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIGtleT0gYm9zcyAgICArICcuJyAgICAgKyBwZXJzb24KLSAgICAgICAgICAgICMgICAgXl5eXiAgICAgICAgICAgICAgICBeXl5eXl4KLSAgICAgICAgICAgICMgICAgcGFyZW50IGVudHJ5UGF0aCAvICBjaGlsZCdzIG5hbWUKLQotICAgICAgICAgICAgaGxpc3QuYWRkKCBrZXksIHRleHQ9bmFtZSApCi0KLSAgICAgICAgICAgICMgW0hpbnRdIE1ha2Ugc3VyZSB0aGUga2V5cyAoZS5nLiAnYm9zcy5wZXJzb24nKSB5b3UgY2hvb3NlCi0gICAgICAgICAgICAjICAgIGFyZSB1bmlxdWUgbmFtZXMuIElmIHlvdSBjYW5ub3QgYmUgc3VyZSBvZiB0aGlzIChiZWNhdXNlIG9mCi0gICAgICAgICAgICAjICAgIHRoZSBzdHJ1Y3R1cmUgb2YgeW91ciBkYXRhYmFzZSwgZS5nLikgeW91IGNhbiB1c2UgdGhlCi0gICAgICAgICAgICAjICAgICJhZGRfY2hpbGQiIGNvbW1hbmQgaW5zdGVhZDoKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgICMgIGhsaXN0LmFkZGNoaWxkKCBib3NzLCAgdGV4dD1uYW1lKQotICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgIF5eXl4KLSAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICBwYXJlbnQgZW50cnlQYXRoCi0KLQotICAgICAgICAjIFVzZSBhIEJ1dHRvbkJveCB0byBob2xkIHRoZSBidXR0b25zLgotICAgICAgICAjCi0gICAgICAgIGJveD0gdGtpbnRlci50aXguQnV0dG9uQm94KHRvcCwgb3JpZW50YXRpb249dGtpbnRlci50aXguSE9SSVpPTlRBTCApCi0gICAgICAgIGJveC5hZGQoICdvaycsICB0ZXh0PSdPaycsIHVuZGVybGluZT0wLCAgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLm9rY21kKQotCi0gICAgICAgIGJveC5hZGQoICdjYW5jZWwnLCB0ZXh0PSdDYW5jZWwnLCB1bmRlcmxpbmU9MCwgd2lkdGg9NiwKLSAgICAgICAgICAgIGNvbW1hbmQgPSBzZWxmLnF1aXRjbWQpCi0KLSAgICAgICAgYm94LnBhY2soIHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgICAgIHRvcC5wYWNrKCBzaWRlPXRraW50ZXIudGl4LlRPUCwgICAgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSApCi0KLSAgICBkZWYgb2tjbWQgKHNlbGYpOgotICAgICAgICBzZWxmLnF1aXRjbWQoKQotCi0gICAgZGVmIHF1aXRjbWQgKHNlbGYpOgotICAgICAgICBzZWxmLmV4aXQgPSAwCi0KLSAgICBkZWYgbWFpbmxvb3Aoc2VsZik6Ci0gICAgICAgIHdoaWxlIHNlbGYuZXhpdCA8IDA6Ci0gICAgICAgICAgICBzZWxmLnJvb3QudGsuZG9vbmVldmVudChUQ0xfQUxMX0VWRU5UUykKLQotICAgIGRlZiBkZXN0cm95IChzZWxmKToKLSAgICAgICAgc2VsZi5yb290LmRlc3Ryb3koKQotCi0KLSMgVGhpcyAiaWYiIHN0YXRlbWVudCBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhpcyBzY3JpcHQgZmlsZSBpbnNpZGUgb3IKLSMgb3V0c2lkZSBvZiB0aGUgbWFpbiBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiLgotIwotaWYgX19uYW1lX189PSAnX19tYWluX18nIDoKLSAgICByb290PXRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0Mi5weSBiL0RlbW8vdGl4L3NhbXBsZXMvU0hMaXN0Mi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzcwYzc2NS4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL1NITGlzdDIucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotIyAtKi1tb2RlOiBweXRob247IGZpbGwtY29sdW1uOiA3NTsgdGFiLXdpZHRoOiA4OyBjb2Rpbmc6IGlzby1sYXRpbi0xLXVuaXggLSotCi0jCi0jICRJZCQKLSMKLSMgVGl4IERlbW9zdHJhdGlvbiBQcm9ncmFtCi0jCi0jIFRoaXMgc2FtcGxlIHByb2dyYW0gaXMgc3RydWN0dXJlZCBpbiBzdWNoIGEgd2F5IHNvIHRoYXQgaXQgY2FuIGJlCi0jIGV4ZWN1dGVkIGZyb20gdGhlIFRpeCBkZW1vIHByb2dyYW0gInRpeHdpZGdldCI6IGl0IG11c3QgaGF2ZSBhCi0jIHByb2NlZHVyZSBjYWxsZWQgIlJ1blNhbXBsZSIuIEl0IHNob3VsZCBhbHNvIGhhdmUgdGhlICJpZiIgc3RhdG1lbnQKLSMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGFzIGEgc3RhbmRhbG9uZQotIyBwcm9ncmFtIHVzaW5nIHRpeHdpc2guCi0KLSMgVGhpcyBmaWxlIGRlbW9uc3RyYXRlcyBob3cgdG8gdXNlIG11bHRpcGxlIGNvbHVtbnMgYW5kIG11bHRpcGxlIHN0eWxlcwotIyBpbiB0aGUgdGl4SExpc3Qgd2lkZ2V0Ci0jCi0jIEluIGEgdGl4SExpc3Qgd2lkZ2V0LCB5b3UgY2FuIGhhdmUgb25lIG9yZSBtb3JlIGNvbHVtbnMuCi0jCi0KLWltcG9ydCB0a2ludGVyLnRpeAotCi1UQ0xfQUxMX0VWRU5UUyAgICAgICAgICA9IDAKLQotZGVmIFJ1blNhbXBsZSAocm9vdCk6Ci0gICAgc2hsaXN0ID0gRGVtb1NITGlzdChyb290KQotICAgIHNobGlzdC5tYWlubG9vcCgpCi0gICAgc2hsaXN0LmRlc3Ryb3koKQotCi1jbGFzcyBEZW1vU0hMaXN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3KToKLSAgICAgICAgc2VsZi5yb290ID0gdwotICAgICAgICBzZWxmLmV4aXQgPSAtMQotCi0gICAgICAgIHogPSB3LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgei53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYucXVpdGNtZCgpKQotCi0gICAgICAgICMgV2UgY3JlYXRlIHRoZSBmcmFtZSBhbmQgdGhlIFNjcm9sbGVkSExpc3Qgd2lkZ2V0Ci0gICAgICAgICMgYXQgdGhlIHRvcCBvZiB0aGUgZGlhbG9nIGJveAotICAgICAgICAjCi0gICAgICAgIHRvcCA9IHRraW50ZXIudGl4LkZyYW1lKCB3LCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELCBiZD0xKQotCi0gICAgICAgICMgUHV0IGEgc2ltcGxlIGhpZXJhY2h5IGludG8gdGhlIEhMaXN0ICh0d28gbGV2ZWxzKS4gVXNlIGNvbG9ycyBhbmQKLSAgICAgICAgIyBzZXBhcmF0b3Igd2lkZ2V0cyAoZnJhbWVzKSB0byBtYWtlIHRoZSBsaXN0IGxvb2sgZmFuY3kKLSAgICAgICAgIwotICAgICAgICB0b3AuYSA9IHRraW50ZXIudGl4LlNjcm9sbGVkSExpc3QodG9wLCBvcHRpb25zPSdobGlzdC5jb2x1bW5zIDMgaGxpc3QuaGVhZGVyIDEnICkKLSAgICAgICAgdG9wLmEucGFjayggZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD0xMCwgcGFkeT0xMCwgc2lkZT10a2ludGVyLnRpeC5UT1ApCi0KLSAgICAgICAgaGxpc3Q9dG9wLmEuaGxpc3QKLQotICAgICAgICAjIENyZWF0ZSB0aGUgdGl0bGUgZm9yIHRoZSBITGlzdCB3aWRnZXQKLSAgICAgICAgIyAgICAgICA+PiBOb3RpY2UgdGhhdCB3ZSBoYXZlIHNldCB0aGUgaGxpc3QuaGVhZGVyIHN1YndpZGdldCBvcHRpb24gdG8gdHJ1ZQotICAgICAgICAjICAgICAgc28gdGhhdCB0aGUgaGVhZGVyIGlzIGRpc3BsYXllZAotICAgICAgICAjCi0KLSAgICAgICAgYm9sZGZvbnQ9aGxpc3QudGsuY2FsbCgndGl4Jywnb3B0aW9uJywnZ2V0JywnYm9sZF9mb250JykKLQotICAgICAgICAjIEZpcnN0IHNvbWUgc3R5bGVzIGZvciB0aGUgaGVhZGVycwotICAgICAgICBzdHlsZT17fQotICAgICAgICBzdHlsZVsnaGVhZGVyJ10gPSB0a2ludGVyLnRpeC5EaXNwbGF5U3R5bGUodGtpbnRlci50aXguVEVYVCwgcmVmd2luZG93PWhsaXN0LAotICAgICAgICAgICAgYW5jaG9yPXRraW50ZXIudGl4LkNFTlRFUiwgcGFkeD04LCBwYWR5PTIsIGZvbnQgPSBib2xkZm9udCApCi0KLSAgICAgICAgaGxpc3QuaGVhZGVyX2NyZWF0ZSgwLCBpdGVtdHlwZT10a2ludGVyLnRpeC5URVhULCB0ZXh0PSdOYW1lJywKLSAgICAgICAgICAgIHN0eWxlPXN0eWxlWydoZWFkZXInXSkKLSAgICAgICAgaGxpc3QuaGVhZGVyX2NyZWF0ZSgxLCBpdGVtdHlwZT10a2ludGVyLnRpeC5URVhULCB0ZXh0PSdQb3NpdGlvbicsCi0gICAgICAgICAgICBzdHlsZT1zdHlsZVsnaGVhZGVyJ10pCi0KLSAgICAgICAgIyBOb3RpY2UgdGhhdCB3ZSB1c2UgMyBjb2x1bW5zIGluIHRoZSBobGlzdCB3aWRnZXQuIFRoaXMgd2F5IHdoZW4gdGhlIHVzZXIKLSAgICAgICAgIyBleHBhbmRzIHRoZSB3aW5kb3dzIHdpZGUsIHRoZSByaWdodCBzaWRlIG9mIHRoZSBoZWFkZXIgZG9lc24ndCBsb29rCi0gICAgICAgICMgY2hvcHBlZCBvZmYuIFRoZSBmb2xsb3dpbmcgbGluZSBlbnN1cmVzIHRoYXQgdGhlIDMgY29sdW1uIGhlYWRlciBpcwotICAgICAgICAjIG5vdCBzaG93biB1bmxlc3MgdGhlIGhsaXN0IHdpbmRvdyBpcyB3aWRlciB0aGFuIGl0cyBjb250ZW50cy4KLSAgICAgICAgIwotICAgICAgICBobGlzdC5jb2x1bW5fd2lkdGgoMiwwKQotCi0gICAgICAgICMgVGhpcyBpcyBvdXIgbGl0dGxlIHJlbGF0aW9uYWwgZGF0YWJhc2UKLSAgICAgICAgIwotICAgICAgICBib3NzID0gKCdkb2UnLCAnSm9obiBEb2UnLCAgICAgICdEaXJlY3RvcicpCi0KLSAgICAgICAgbWFuYWdlcnMgPSBbCi0gICAgICAgICAgICAoJ2plZmYnLCAgJ0plZmYgV2F4bWFuJywgICAgJ01hbmFnZXInKSwKLSAgICAgICAgICAgICgnam9obicsICAnSm9obiBMZWUnLCAgICAgICAgICAgICAgICdNYW5hZ2VyJyksCi0gICAgICAgICAgICAoJ3BldGVyJywgJ1BldGVyIEtlbnNvbicsICAgJ01hbmFnZXInKQotICAgICAgICBdCi0KLSAgICAgICAgZW1wbG95ZWVzID0gWwotICAgICAgICAgICAgKCdhbGV4JywgICdqb2huJywgICAnQWxleCBLZWxsbWFuJywgICAgICAgICAnQ2xlcmsnKSwKLSAgICAgICAgICAgICgnYWxhbicsICAnam9obicsICAgICAgICdBbGFuIEFkYW1zJywgICAgICAgICAgICAgICAnQ2xlcmsnKSwKLSAgICAgICAgICAgICgnYW5keScsICAncGV0ZXInLCAgICAgICdBbmRyZWFzIENyYXdmb3JkJywgJ1NhbGVzbWFuJyksCi0gICAgICAgICAgICAoJ2RvdWcnLCAgJ2plZmYnLCAgICAgICAnRG91Z2xhcyBCbG9vbScsICAgICdDbGVyaycpLAotICAgICAgICAgICAgKCdqb24nLCAgICdwZXRlcicsICAgICAgJ0pvbiBCYXJha2knLCAgICAgICAgICAgICAgICdTYWxlc21hbicpLAotICAgICAgICAgICAgKCdjaHJpcycsICdqZWZmJywgICAgICAgJ0NocmlzIEdlb2ZmcmV5JywgICAnQ2xlcmsnKSwKLSAgICAgICAgICAgICgnY2h1Y2snLCAnamVmZicsICAgICAgICdDaHVjayBNY0xlYW4nLCAgICAgICAgICAgICAnQ2xlYW5lcicpCi0gICAgICAgIF0KLQotICAgICAgICBzdHlsZVsnbWdyX25hbWUnXSA9IHRraW50ZXIudGl4LkRpc3BsYXlTdHlsZSh0a2ludGVyLnRpeC5URVhULCByZWZ3aW5kb3c9aGxpc3QpCi0KLSAgICAgICAgc3R5bGVbJ21ncl9wb3NuJ10gPSB0a2ludGVyLnRpeC5EaXNwbGF5U3R5bGUodGtpbnRlci50aXguVEVYVCwgcGFkeD04LCByZWZ3aW5kb3c9aGxpc3QpCi0KLSAgICAgICAgc3R5bGVbJ2VtcGxfbmFtZSddID0gdGtpbnRlci50aXguRGlzcGxheVN0eWxlKHRraW50ZXIudGl4LlRFWFQsIHJlZndpbmRvdz1obGlzdCkKLQotICAgICAgICBzdHlsZVsnZW1wbF9wb3NuJ10gPSB0a2ludGVyLnRpeC5EaXNwbGF5U3R5bGUodGtpbnRlci50aXguVEVYVCwgcGFkeD04LCByZWZ3aW5kb3c9aGxpc3QpCi0KLSAgICAgICAgIyBMZXQgY29uZmlndXJlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBITGlzdCBzdWJ3aWRnZXQKLSAgICAgICAgIwotICAgICAgICBobGlzdC5jb25maWcoc2VwYXJhdG9yPScuJywgd2lkdGg9MjUsIGRyYXdicmFuY2g9MCwgaW5kZW50PTEwKQotICAgICAgICBobGlzdC5jb2x1bW5fd2lkdGgoMCwgY2hhcnM9MjApCi0KLSAgICAgICAgIyBDcmVhdGUgdGhlIGJvc3MKLSAgICAgICAgIwotICAgICAgICBobGlzdC5hZGQgKCcuJywgICAgICAgICAgIGl0ZW10eXBlPXRraW50ZXIudGl4LlRFWFQsIHRleHQ9Ym9zc1sxXSwKLSAgICAgICAgICAgIHN0eWxlPXN0eWxlWydtZ3JfbmFtZSddKQotICAgICAgICBobGlzdC5pdGVtX2NyZWF0ZSgnLicsIDEsIGl0ZW10eXBlPXRraW50ZXIudGl4LlRFWFQsIHRleHQ9Ym9zc1syXSwKLSAgICAgICAgICAgIHN0eWxlPXN0eWxlWydtZ3JfcG9zbiddKQotCi0gICAgICAgICMgQ3JlYXRlIHRoZSBtYW5hZ2VycwotICAgICAgICAjCi0KLSAgICAgICAgZm9yIGtleSxuYW1lLHBvc24gaW4gbWFuYWdlcnMgOgotICAgICAgICAgICAgZT0gJy4nKyBrZXkKLSAgICAgICAgICAgIGhsaXN0LmFkZChlLCBpdGVtdHlwZT10a2ludGVyLnRpeC5URVhULCB0ZXh0PW5hbWUsCi0gICAgICAgICAgICAgICAgc3R5bGU9c3R5bGVbJ21ncl9uYW1lJ10pCi0gICAgICAgICAgICBobGlzdC5pdGVtX2NyZWF0ZShlLCAxLCBpdGVtdHlwZT10a2ludGVyLnRpeC5URVhULCB0ZXh0PXBvc24sCi0gICAgICAgICAgICAgICAgc3R5bGU9c3R5bGVbJ21ncl9wb3NuJ10pCi0KLQotICAgICAgICBmb3Iga2V5LG1ncixuYW1lLHBvc24gaW4gZW1wbG95ZWVzIDoKLSAgICAgICAgICAgICMgIi4iIGlzIHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyIHdlIGNob3NlIGFib3ZlCi0KLSAgICAgICAgICAgIGVudHJ5cGF0aCA9ICcuJyArIG1nciAgICAgICAgKyAnLicgKyBrZXkKLQotICAgICAgICAgICAgIyAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eICBeXl5eXl5eXl5eXl5eXl4KLSAgICAgICAgICAgICMgICAgICAgcGFyZW50IGVudHJ5UGF0aCAvIGNoaWxkJ3MgbmFtZQotCi0gICAgICAgICAgICBobGlzdC5hZGQoZW50cnlwYXRoLCB0ZXh0PW5hbWUsIHN0eWxlPXN0eWxlWydlbXBsX25hbWUnXSkKLSAgICAgICAgICAgIGhsaXN0Lml0ZW1fY3JlYXRlKGVudHJ5cGF0aCwgMSwgaXRlbXR5cGU9dGtpbnRlci50aXguVEVYVCwKLSAgICAgICAgICAgICAgICB0ZXh0ID0gcG9zbiwgc3R5bGUgPSBzdHlsZVsnZW1wbF9wb3NuJ10gKQotCi0KLSAgICAgICAgIyBVc2UgYSBCdXR0b25Cb3ggdG8gaG9sZCB0aGUgYnV0dG9ucy4KLSAgICAgICAgIwotICAgICAgICBib3g9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh0b3AsIG9yaWVudGF0aW9uPXRraW50ZXIudGl4LkhPUklaT05UQUwgKQotICAgICAgICBib3guYWRkKCAnb2snLCAgdGV4dD0nT2snLCB1bmRlcmxpbmU9MCwgIHdpZHRoPTYsCi0gICAgICAgICAgICBjb21tYW5kID0gc2VsZi5va2NtZCApCi0KLSAgICAgICAgYm94LmFkZCggJ2NhbmNlbCcsIHRleHQ9J0NhbmNlbCcsIHVuZGVybGluZT0wLCB3aWR0aD02LAotICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYucXVpdGNtZCApCi0KLSAgICAgICAgYm94LnBhY2soIHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgICAgIHRvcC5wYWNrKCBzaWRlPXRraW50ZXIudGl4LlRPUCwgICAgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSApCi0KLSAgICBkZWYgb2tjbWQgKHNlbGYpOgotICAgICAgICBzZWxmLnF1aXRjbWQoKQotCi0gICAgZGVmIHF1aXRjbWQgKHNlbGYpOgotICAgICAgICBzZWxmLmV4aXQgPSAwCi0KLSAgICBkZWYgbWFpbmxvb3Aoc2VsZik6Ci0gICAgICAgIHdoaWxlIHNlbGYuZXhpdCA8IDA6Ci0gICAgICAgICAgICBzZWxmLnJvb3QudGsuZG9vbmVldmVudChUQ0xfQUxMX0VWRU5UUykKLQotICAgIGRlZiBkZXN0cm95IChzZWxmKToKLSAgICAgICAgc2VsZi5yb290LmRlc3Ryb3koKQotCi0KLSMgVGhpcyAiaWYiIHN0YXRlbWVudCBtYWtlcyBpdCBwb3NzaWJsZSB0byBydW4gdGhpcyBzY3JpcHQgZmlsZSBpbnNpZGUgb3IKLSMgb3V0c2lkZSBvZiB0aGUgbWFpbiBkZW1vIHByb2dyYW0gInRpeHdpZGdldHMucHkiLgotIwotaWYgX19uYW1lX189PSAnX19tYWluX18nIDoKLSAgICByb290PXRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3NhbXBsZXMvVHJlZS5weSBiL0RlbW8vdGl4L3NhbXBsZXMvVHJlZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTQ2ZmY2MC4uMDAwMDAwMAotLS0gYS9EZW1vL3RpeC9zYW1wbGVzL1RyZWUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jIC0qLW1vZGU6IHB5dGhvbjsgZmlsbC1jb2x1bW46IDc1OyB0YWItd2lkdGg6IDg7IGNvZGluZzogaXNvLWxhdGluLTEtdW5peCAtKi0KLSMKLSMgJElkJAotIwotIyBUaXggRGVtb3N0cmF0aW9uIFByb2dyYW0KLSMKLSMgVGhpcyBzYW1wbGUgcHJvZ3JhbSBpcyBzdHJ1Y3R1cmVkIGluIHN1Y2ggYSB3YXkgc28gdGhhdCBpdCBjYW4gYmUKLSMgZXhlY3V0ZWQgZnJvbSB0aGUgVGl4IGRlbW8gcHJvZ3JhbSAidGl4d2lkZ2V0cy5weSI6IGl0IG11c3QgaGF2ZSBhCi0jIHByb2NlZHVyZSBjYWxsZWQgIlJ1blNhbXBsZSIuIEl0IHNob3VsZCBhbHNvIGhhdmUgdGhlICJpZiIgc3RhdG1lbnQKLSMgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgc28gdGhhdCBpdCBjYW4gYmUgcnVuIGFzIGEgc3RhbmRhbG9uZQotIyBwcm9ncmFtLgotCi0jIFRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgVGl4VHJlZSB3aWRnZXQgdG8gZGlzcGxheQotIyBkeW5hbWljIGhpZXJhY2hpY2FsIGRhdGEgKHRoZSBmaWxlcyBpbiB0aGUgVW5peCBmaWxlIHN5c3RlbSkKLSMKLQotaW1wb3J0IHRraW50ZXIudGl4LCBvcwotCi1kZWYgUnVuU2FtcGxlKHcpOgotICAgIHRvcCA9IHRraW50ZXIudGl4LkZyYW1lKHcsIHJlbGllZj10a2ludGVyLnRpeC5SQUlTRUQsIGJkPTEpCi0gICAgdHJlZSA9IHRraW50ZXIudGl4LlRyZWUodG9wLCBvcHRpb25zPSdzZXBhcmF0b3IgIi8iJykKLSAgICB0cmVlLnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD0xMCwgcGFkeT0xMCwgc2lkZT10a2ludGVyLnRpeC5MRUZUKQotICAgIHRyZWVbJ29wZW5jbWQnXSA9IGxhbWJkYSBkaXI9Tm9uZSwgdz10cmVlOiBvcGVuZGlyKHcsIGRpcikKLQotICAgICMgVGhlIC8gZGlyZWN0b3J5IGlzIGFkZGVkIGluIHRoZSAib3BlbiIgbW9kZS4gVGhlIHVzZXIgY2FuIG9wZW4gaXQKLSAgICAjIGFuZCB0aGVuIGJyb3dzZSBpdHMgc3ViZGlyZWN0b3JpZXMgLi4uCi0gICAgYWRkZGlyKHRyZWUsICIvIikKLQotICAgIGJveCA9IHRraW50ZXIudGl4LkJ1dHRvbkJveCh3LCBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5IT1JJWk9OVEFMKQotICAgIGJveC5hZGQoJ29rJywgdGV4dD0nT2snLCB1bmRlcmxpbmU9MCwgY29tbWFuZD13LmRlc3Ryb3ksIHdpZHRoPTYpCi0gICAgYm94LmFkZCgnY2FuY2VsJywgdGV4dD0nQ2FuY2VsJywgdW5kZXJsaW5lPTAsIGNvbW1hbmQ9dy5kZXN0cm95LCB3aWR0aD02KQotICAgIGJveC5wYWNrKHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgdG9wLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGZpbGw9dGtpbnRlci50aXguQk9USCwgZXhwYW5kPTEpCi0KLWRlZiBhZGRkaXIodHJlZSwgZGlyKToKLSAgICBpZiBkaXIgPT0gJy8nOgotICAgICAgICB0ZXh0ID0gJy8nCi0gICAgZWxzZToKLSAgICAgICAgdGV4dCA9IG9zLnBhdGguYmFzZW5hbWUoZGlyKQotICAgIHRyZWUuaGxpc3QuYWRkKGRpciwgaXRlbXR5cGU9dGtpbnRlci50aXguSU1BR0VURVhULCB0ZXh0PXRleHQsCi0gICAgICAgICAgICAgICAgICAgaW1hZ2U9dHJlZS50ay5jYWxsKCd0aXgnLCAnZ2V0aW1hZ2UnLCAnZm9sZGVyJykpCi0gICAgdHJ5OgotICAgICAgICBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgdHJlZS5zZXRtb2RlKGRpciwgJ29wZW4nKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgIyBObyByZWFkIHBlcm1pc3Npb24gPwotICAgICAgICBwYXNzCi0KLSMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgcHJlc3NlcyB0aGUgKCspIGluZGljYXRvciBvcgotIyBkb3VibGUgY2xpY2tzIG9uIGEgZGlyZWN0b3J5IHdob3NlIG1vZGUgaXMgIm9wZW4iLiBJdCBsb2FkcyB0aGUgZmlsZXMKLSMgaW5zaWRlIHRoYXQgZGlyZWN0b3J5IGludG8gdGhlIFRyZWUgd2lkZ2V0LgotIwotIyBOb3RlIHdlIGRpZG4ndCBzcGVjaWZ5IHRoZSBjbG9zZWNtZCBvcHRpb24gZm9yIHRoZSBUcmVlIHdpZGdldCwgc28gaXQKLSMgcGVyZm9ybXMgdGhlIGRlZmF1bHQgYWN0aW9uIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgKC0pIGluZGljYXRvciBvcgotIyBkb3VibGUgY2xpY2tzIG9uIGEgZGlyZWN0b3J5IHdob3NlIG1vZGUgaXMgImNsb3NlIjogaGlkZSBhbGwgb2YgaXRzIGNoaWxkCi0jIGVudHJpZXMKLWRlZiBvcGVuZGlyKHRyZWUsIGRpcik6Ci0gICAgZW50cmllcyA9IHRyZWUuaGxpc3QuaW5mb19jaGlsZHJlbihkaXIpCi0gICAgaWYgZW50cmllczoKLSAgICAgICAgIyBXZSBoYXZlIGFscmVhZHkgbG9hZGVkIHRoaXMgZGlyZWN0b3J5LiBMZXQncyBqdXN0Ci0gICAgICAgICMgc2hvdyBhbGwgdGhlIGNoaWxkIGVudHJpZXMKLSAgICAgICAgIwotICAgICAgICAjIE5vdGU6IHNpbmNlIHdlIGxvYWQgdGhlIGRpcmVjdG9yeSBvbmx5IG9uY2UsIGl0IHdpbGwgbm90IGJlCi0gICAgICAgICMgICAgICAgcmVmcmVzaGVkIGlmIHRoZSB5b3UgYWRkIG9yIHJlbW92ZSBmaWxlcyBmcm9tIHRoaXMKLSAgICAgICAgIyAgICAgICBkaXJlY3RvcnkuCi0gICAgICAgICMKLSAgICAgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6Ci0gICAgICAgICAgICB0cmVlLmhsaXN0LnNob3dfZW50cnkoZW50cnkpCi0gICAgZmlsZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihkaXIgKyAnLycgKyBmaWxlKToKLSAgICAgICAgICAgIGFkZGRpcih0cmVlLCBkaXIgKyAnLycgKyBmaWxlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJlZS5obGlzdC5hZGQoZGlyICsgJy8nICsgZmlsZSwgaXRlbXR5cGU9dGtpbnRlci50aXguSU1BR0VURVhULCB0ZXh0PWZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZT10cmVlLnRrLmNhbGwoJ3RpeCcsICdnZXRpbWFnZScsICdmaWxlJykpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcm9vdCA9IHRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5TYW1wbGUocm9vdCkKLSAgICByb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGl4L3RpeHdpZGdldHMucHkgYi9EZW1vL3RpeC90aXh3aWRnZXRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MmJjZWRjLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGl4L3RpeHdpZGdldHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAyICswLDAgQEAKLSMgLSotbW9kZTogcHl0aG9uOyBmaWxsLWNvbHVtbjogNzU7IHRhYi13aWR0aDogODsgY29kaW5nOiBpc28tbGF0aW4tMS11bml4IC0qLQotIwotIyAkSWQkCi0jCi0jIHRpeHdpZGdldHMucHkgLS0KLSMKLSMgICAgICAgRm9yIFRpeCwgc2VlIGh0dHA6Ly90aXguc291cmNlZm9yZ2UubmV0Ci0jCi0jICAgICAgIFRoaXMgaXMgYSBkZW1vIHByb2dyYW0gb2Ygc29tZSBvZiB0aGUgVGl4IHdpZGdldHMgYXZhaWxhYmxlIGluIFB5dGhvbi4KLSMgICAgICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIFB5dGhvbiAmIFRpeCBwcm9wZXJseSwgeW91IGNhbiBleGVjdXRlIHRoaXMgYXMKLSMKLSMgICAgICAgICAgICAgICAlIHB5dGhvbiB0aXh3aWRnZXRzLnB5Ci0jCi0KLWltcG9ydCBvcywgb3MucGF0aCwgc3lzLCB0a2ludGVyLnRpeAotZnJvbSB0a2ludGVyLmNvbnN0YW50cyBpbXBvcnQgKgotaW1wb3J0IHRyYWNlYmFjaywgdGtpbnRlci5tZXNzYWdlYm94Ci0KLVRDTF9ET05UX1dBSVQgICAgICAgICAgID0gMTw8MQotVENMX1dJTkRPV19FVkVOVFMgICAgICAgPSAxPDwyCi1UQ0xfRklMRV9FVkVOVFMgICAgICAgICA9IDE8PDMKLVRDTF9USU1FUl9FVkVOVFMgICAgICAgID0gMTw8NAotVENMX0lETEVfRVZFTlRTICAgICAgICAgPSAxPDw1Ci1UQ0xfQUxMX0VWRU5UUyAgICAgICAgICA9IDAKLQotY2xhc3MgRGVtbzoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdG9wKToKLSAgICAgICAgc2VsZi5yb290ID0gdG9wCi0gICAgICAgIHNlbGYuZXhpdCA9IC0xCi0KLSAgICAgICAgc2VsZi5kaXIgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICMgc2NyaXB0IGRpcmVjdG9yeQotICAgICAgICBzZWxmLmJhbGxvb24gPSBOb25lICAgICAgICAgICAgICAgICAgICAgIyBiYWxsb29uIHdpZGdldAotICAgICAgICBzZWxmLnVzZUJhbGxvb25zID0gdGtpbnRlci50aXguU3RyaW5nVmFyKCkKLSAgICAgICAgc2VsZi51c2VCYWxsb29ucy5zZXQoJzAnKQotICAgICAgICBzZWxmLnN0YXR1c2JhciA9IE5vbmUgICAgICAgICAgICAgICAgICAgIyBzdGF0dXMgYmFyIHdpZGdldAotICAgICAgICBzZWxmLndlbG1zZyA9IE5vbmUgICAgICAgICAgICAgICAgICAgICAgIyBNc2cgd2lkZ2V0Ci0gICAgICAgIHNlbGYud2VsZm9udCA9ICcnICAgICAgICAgICAgICAgICAgICAgICAjIGZvbnQgbmFtZQotICAgICAgICBzZWxmLndlbHNpemUgPSAnJyAgICAgICAgICAgICAgICAgICAgICAgIyBmb250IHNpemUKLQotICAgICAgICBwcm9nbmFtZSA9IHN5cy5hcmd2WzBdCi0gICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocHJvZ25hbWUpCi0gICAgICAgIGlmIGRpcm5hbWUgYW5kIGRpcm5hbWUgIT0gb3MuY3VyZGlyOgotICAgICAgICAgICAgc2VsZi5kaXIgPSBkaXJuYW1lCi0gICAgICAgICAgICBpbmRleCA9IC0xCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc3lzLnBhdGgpKToKLSAgICAgICAgICAgICAgICBwID0gc3lzLnBhdGhbaV0KLSAgICAgICAgICAgICAgICBpZiBwIGluICgiIiwgb3MuY3VyZGlyKToKLSAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpCi0gICAgICAgICAgICBpZiBpbmRleCA+PSAwOgotICAgICAgICAgICAgICAgIHN5cy5wYXRoW2luZGV4XSA9IGRpcm5hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmRpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBzZWxmLmRpcisnL3NhbXBsZXMnKQotCi0gICAgZGVmIE1rTWFpbk1lbnUoc2VsZik6Ci0gICAgICAgIHRvcCA9IHNlbGYucm9vdAotICAgICAgICB3ID0gdGtpbnRlci50aXguRnJhbWUodG9wLCBiZD0yLCByZWxpZWY9UkFJU0VEKQotICAgICAgICBmaWxlID0gdGtpbnRlci50aXguTWVudWJ1dHRvbih3LCB0ZXh0PSdGaWxlJywgdW5kZXJsaW5lPTAsIHRha2Vmb2N1cz0wKQotICAgICAgICBoZWxwID0gdGtpbnRlci50aXguTWVudWJ1dHRvbih3LCB0ZXh0PSdIZWxwJywgdW5kZXJsaW5lPTAsIHRha2Vmb2N1cz0wKQotICAgICAgICBmaWxlLnBhY2soc2lkZT1MRUZUKQotICAgICAgICBoZWxwLnBhY2soc2lkZT1SSUdIVCkKLSAgICAgICAgZm0gPSB0a2ludGVyLnRpeC5NZW51KGZpbGUsIHRlYXJvZmY9MCkKLSAgICAgICAgZmlsZVsnbWVudSddID0gZm0KLSAgICAgICAgaG0gPSB0a2ludGVyLnRpeC5NZW51KGhlbHAsIHRlYXJvZmY9MCkKLSAgICAgICAgaGVscFsnbWVudSddID0gaG0KLQotICAgICAgICBmbS5hZGRfY29tbWFuZChsYWJlbD0nRXhpdCcsIHVuZGVybGluZT0xLAotICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYucXVpdGNtZCAoKSApCi0gICAgICAgIGhtLmFkZF9jaGVja2J1dHRvbihsYWJlbD0nQmFsbG9vbkhlbHAnLCB1bmRlcmxpbmU9MCwgY29tbWFuZD1Ub2dnbGVIZWxwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9c2VsZi51c2VCYWxsb29ucykKLSAgICAgICAgIyBUaGUgdHJhY2UgdmFyaWFibGUgb3B0aW9uIGRvZXNuJ3Qgc2VlbSB0byB3b3JrLCBpbnN0ZWFkIEkgdXNlICdjb21tYW5kJwotICAgICAgICAjdy50ay5jYWxsKCd0cmFjZScsICd2YXJpYWJsZScsIHNlbGYudXNlQmFsbG9vbnMsICd3JywgVG9nZ2xlSGVscCkpCi0KLSAgICAgICAgcmV0dXJuIHcKLQotICAgIGRlZiBNa01haW5Ob3RlYm9vayhzZWxmKToKLSAgICAgICAgdG9wID0gc2VsZi5yb290Ci0gICAgICAgIHcgPSB0a2ludGVyLnRpeC5Ob3RlQm9vayh0b3AsIGlwYWR4PTUsIGlwYWR5PTUsIG9wdGlvbnM9IiIiCi0gICAgICAgIHRhZ1BhZFggNgotICAgICAgICB0YWdQYWRZIDQKLSAgICAgICAgYm9yZGVyV2lkdGggMgotICAgICAgICAiIiIpCi0gICAgICAgICMgVGhpcyBtYXkgYmUgcmVxdWlyZWQgaWYgdGhlcmUgaXMgbm8gKkJhY2tncm91bmQgb3B0aW9uCi0gICAgICAgIHRvcFsnYmcnXSA9IHdbJ2JnJ10KLQotICAgICAgICB3LmFkZCgnd2VsJywgbGFiZWw9J1dlbGNvbWUnLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgY3JlYXRlY21kPWxhbWJkYSB3PXcsIG5hbWU9J3dlbCc6IE1rV2VsY29tZSh3LCBuYW1lKSkKLSAgICAgICAgdy5hZGQoJ2NobycsIGxhYmVsPSdDaG9vc2VycycsIHVuZGVybGluZT0wLAotICAgICAgICAgICAgICBjcmVhdGVjbWQ9bGFtYmRhIHc9dywgbmFtZT0nY2hvJzogTWtDaG9vc2Vycyh3LCBuYW1lKSkKLSAgICAgICAgdy5hZGQoJ3NjcicsIGxhYmVsPSdTY3JvbGxlZCBXaWRnZXRzJywgdW5kZXJsaW5lPTAsCi0gICAgICAgICAgICAgIGNyZWF0ZWNtZD1sYW1iZGEgdz13LCBuYW1lPSdzY3InOiBNa1Njcm9sbCh3LCBuYW1lKSkKLSAgICAgICAgdy5hZGQoJ21ncicsIGxhYmVsPSdNYW5hZ2VyIFdpZGdldHMnLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgY3JlYXRlY21kPWxhbWJkYSB3PXcsIG5hbWU9J21ncic6IE1rTWFuYWdlcih3LCBuYW1lKSkKLSAgICAgICAgdy5hZGQoJ2RpcicsIGxhYmVsPSdEaXJlY3RvcnkgTGlzdCcsIHVuZGVybGluZT0wLAotICAgICAgICAgICAgICBjcmVhdGVjbWQ9bGFtYmRhIHc9dywgbmFtZT0nZGlyJzogTWtEaXJMaXN0KHcsIG5hbWUpKQotICAgICAgICB3LmFkZCgnZXhwJywgbGFiZWw9J1J1biBTYW1wbGUgUHJvZ3JhbXMnLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgY3JlYXRlY21kPWxhbWJkYSB3PXcsIG5hbWU9J2V4cCc6IE1rU2FtcGxlKHcsIG5hbWUpKQotICAgICAgICByZXR1cm4gdwotCi0gICAgZGVmIE1rTWFpblN0YXR1cyhzZWxmKToKLSAgICAgICAgZ2xvYmFsIGRlbW8KLSAgICAgICAgdG9wID0gc2VsZi5yb290Ci0KLSAgICAgICAgdyA9IHRraW50ZXIudGl4LkZyYW1lKHRvcCwgcmVsaWVmPXRraW50ZXIudGl4LlJBSVNFRCwgYmQ9MSkKLSAgICAgICAgZGVtby5zdGF0dXNiYXIgPSB0a2ludGVyLnRpeC5MYWJlbCh3LCByZWxpZWY9dGtpbnRlci50aXguU1VOS0VOLCBiZD0xKQotICAgICAgICBkZW1vLnN0YXR1c2Jhci5mb3JtKHBhZHg9MywgcGFkeT0zLCBsZWZ0PTAsIHJpZ2h0PSclNzAnKQotICAgICAgICByZXR1cm4gdwotCi0gICAgZGVmIGJ1aWxkKHNlbGYpOgotICAgICAgICByb290ID0gc2VsZi5yb290Ci0gICAgICAgIHogPSByb290LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgei53bV90aXRsZSgnVGl4IFdpZGdldCBEZW1vbnN0cmF0aW9uJykKLSAgICAgICAgaWYgei53aW5mb19zY3JlZW53aWR0aCgpIDw9IDgwMDoKLSAgICAgICAgICAgIHouZ2VvbWV0cnkoJzc5MHg1OTArMTArMTAnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgei5nZW9tZXRyeSgnODkweDY0MCsxMCsxMCcpCi0gICAgICAgIGRlbW8uYmFsbG9vbiA9IHRraW50ZXIudGl4LkJhbGxvb24ocm9vdCkKLSAgICAgICAgZnJhbWUxID0gc2VsZi5Na01haW5NZW51KCkKLSAgICAgICAgZnJhbWUyID0gc2VsZi5Na01haW5Ob3RlYm9vaygpCi0gICAgICAgIGZyYW1lMyA9IHNlbGYuTWtNYWluU3RhdHVzKCkKLSAgICAgICAgZnJhbWUxLnBhY2soc2lkZT1UT1AsIGZpbGw9WCkKLSAgICAgICAgZnJhbWUzLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKLSAgICAgICAgZnJhbWUyLnBhY2soc2lkZT1UT1AsIGV4cGFuZD0xLCBmaWxsPUJPVEgsIHBhZHg9NCwgcGFkeT00KQotICAgICAgICBkZW1vLmJhbGxvb25bJ3N0YXR1c2JhciddID0gZGVtby5zdGF0dXNiYXIKLSAgICAgICAgei53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIGxhbWJkYSBzZWxmPXNlbGY6IHNlbGYucXVpdGNtZCgpKQotCi0gICAgICAgICMgVG8gc2hvdyBUY2wgZXJyb3JzIC0gdW5jb21tZW50IHRoaXMgdG8gc2VlIHRoZSBsaXN0Ym94IGJ1Zy4KLSAgICAgICAgIyBUa2ludGVyIGRlZmluZXMgYSBUY2wgdGtlcnJvciBwcm9jZWR1cmUgdGhhdCBpbiBlZmZlY3QKLSAgICAgICAgIyBzaWxlbmNlcyBhbGwgYmFja2dyb3VuZCBUY2wgZXJyb3IgcmVwb3J0aW5nLgotICAgICAgICAjIHJvb3QudGsuZXZhbCgnaWYge1tpbmZvIGNvbW1hbmRzIHRrZXJyb3JdICE9ICIifSB7cmVuYW1lIHRrZXJyb3IgcHl0a2Vycm9yfScpCi0gICAgZGVmIHF1aXRjbWQgKHNlbGYpOgotICAgICAgICAiIiJRdWl0IG91ciBtYWlubG9vcC4gSXQgaXMgdXAgdG8geW91IHRvIGNhbGwgcm9vdC5kZXN0cm95KCkgYWZ0ZXIuIiIiCi0gICAgICAgIHNlbGYuZXhpdCA9IDAKLQotICAgIGRlZiBsb29wKHNlbGYpOgotICAgICAgICAiIiJUaGlzIGlzIGFuIGV4cGxpY3QgcmVwbGFjZW1lbnQgZm9yIF90a2ludGVyIG1haW5sb29wKCkKLSAgICAgICAgSXQgbGV0cyB5b3UgY2F0Y2gga2V5Ym9hcmQgaW50ZXJydXB0cyBlYXNpZXIsIGFuZCBhdm9pZHMKLSAgICAgICAgdGhlIDIwIG1zZWMuIGRlYWQgc2xlZXAoKSB3aGljaCBidXJucyBhIGNvbnN0YW50IENQVS4iIiIKLSAgICAgICAgd2hpbGUgc2VsZi5leGl0IDwgMDoKLSAgICAgICAgICAgICMgVGhlcmUgYXJlIDIgd2hpbGVzIGhlcmUuIFRoZSBvdXRlciBvbmUgbGV0cyB5b3UgY29udGludWUKLSAgICAgICAgICAgICMgYWZ0ZXIgYSBeQyBpbnRlcnJ1cHQuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSByZXBsYWNlbWVudCBmb3IgX3RraW50ZXIgbWFpbmxvb3AoKQotICAgICAgICAgICAgICAgICMgSXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBuZXh0IFRjbCBldmVudCB1c2luZyBzZWxlY3QuCi0gICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5leGl0IDwgMDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290LnRrLmRvb25lZXZlbnQoVENMX0FMTF9FVkVOVFMpCi0gICAgICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgICAgICAjIFRraW50ZXIgdXNlcyBTeXN0ZW1FeGl0IHRvIGV4aXQKLSAgICAgICAgICAgICAgICAjcHJpbnQgJ0V4aXQnCi0gICAgICAgICAgICAgICAgc2VsZi5leGl0ID0gMQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIGlmIHRraW50ZXIubWVzc2FnZWJveC5hc2txdWVzdGlvbiAoJ0ludGVycnVwdCcsICdSZWFsbHkgUXVpdD8nKSA9PSAneWVzJzoKLSAgICAgICAgICAgICAgICAgICAgIyBzZWxmLnRrLmV2YWwoJ2V4aXQnKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4aXQgPSAxCi0gICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgIyBPdGhlcndpc2UgaXQncyBzb21lIG90aGVyIGVycm9yIC0gYmUgbmljZSBhbmQgc2F5IHdoeQotICAgICAgICAgICAgICAgIHQsIHYsIHRiID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgICAgICB0ZXh0ID0gIiIKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbih0LHYsdGIpOgotICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICAgICAgdHJ5OiB0a2ludGVyLm1lc3NhZ2Vib3guc2hvd2Vycm9yICgnRXJyb3InLCB0ZXh0KQotICAgICAgICAgICAgICAgIGV4Y2VwdDogcGFzcwotICAgICAgICAgICAgICAgIHNlbGYuZXhpdCA9IDEKLSAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KDEpCi0KLSAgICBkZWYgZGVzdHJveSAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKLQotZGVmIFJ1bk1haW4ocm9vdCk6Ci0gICAgZ2xvYmFsIGRlbW8KLQotICAgIGRlbW8gPSBEZW1vKHJvb3QpCi0KLSAgICBkZW1vLmJ1aWxkKCkKLSAgICBkZW1vLmxvb3AoKQotICAgIGRlbW8uZGVzdHJveSgpCi0KLSMgVGFicwotZGVmIE1rV2VsY29tZShuYiwgbmFtZSk6Ci0gICAgdyA9IG5iLnBhZ2UobmFtZSkKLSAgICBiYXIgPSBNa1dlbGNvbWVCYXIodykKLSAgICB0ZXh0ID0gTWtXZWxjb21lVGV4dCh3KQotICAgIGJhci5wYWNrKHNpZGU9VE9QLCBmaWxsPVgsIHBhZHg9MiwgcGFkeT0yKQotICAgIHRleHQucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKLQotZGVmIE1rV2VsY29tZUJhcih0b3ApOgotICAgIGdsb2JhbCBkZW1vCi0KLSAgICB3ID0gdGtpbnRlci50aXguRnJhbWUodG9wLCBiZD0yLCByZWxpZWY9dGtpbnRlci50aXguR1JPT1ZFKQotICAgIGIxID0gdGtpbnRlci50aXguQ29tYm9Cb3godywgY29tbWFuZD1sYW1iZGEgdz10b3A6IE1haW5UZXh0Rm9udCh3KSkKLSAgICBiMiA9IHRraW50ZXIudGl4LkNvbWJvQm94KHcsIGNvbW1hbmQ9bGFtYmRhIHc9dG9wOiBNYWluVGV4dEZvbnQodykpCi0gICAgYjEuZW50cnlbJ3dpZHRoJ10gPSAxNQotICAgIGIxLnNsaXN0Ym94Lmxpc3Rib3hbJ2hlaWdodCddID0gMwotICAgIGIyLmVudHJ5Wyd3aWR0aCddID0gNAotICAgIGIyLnNsaXN0Ym94Lmxpc3Rib3hbJ2hlaWdodCddID0gMwotCi0gICAgZGVtby53ZWxmb250ID0gYjEKLSAgICBkZW1vLndlbHNpemUgPSBiMgotCi0gICAgYjEuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0NvdXJpZXInKQotICAgIGIxLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdIZWx2ZXRpY2EnKQotICAgIGIxLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdMdWNpZGEnKQotICAgIGIxLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdUaW1lcyBSb21hbicpCi0KLSAgICBiMi5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnOCcpCi0gICAgYjIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzEwJykKLSAgICBiMi5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnMTInKQotICAgIGIyLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICcxNCcpCi0gICAgYjIuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJzE4JykKLQotICAgIGIxLnBpY2soMSkKLSAgICBiMi5waWNrKDMpCi0KLSAgICBiMS5wYWNrKHNpZGU9dGtpbnRlci50aXguTEVGVCwgcGFkeD00LCBwYWR5PTQpCi0gICAgYjIucGFjayhzaWRlPXRraW50ZXIudGl4LkxFRlQsIHBhZHg9NCwgcGFkeT00KQotCi0gICAgZGVtby5iYWxsb29uLmJpbmRfd2lkZ2V0KGIxLCBtc2c9J0Nob29zZVxuYSBmb250JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzbXNnPSdDaG9vc2UgYSBmb250IGZvciB0aGlzIHBhZ2UnKQotICAgIGRlbW8uYmFsbG9vbi5iaW5kX3dpZGdldChiMiwgbXNnPSdQb2ludCBzaXplJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzbXNnPSdDaG9vc2UgdGhlIGZvbnQgc2l6ZSBmb3IgdGhpcyBwYWdlJykKLSAgICByZXR1cm4gdwotCi1kZWYgTWtXZWxjb21lVGV4dCh0b3ApOgotICAgIGdsb2JhbCBkZW1vCi0KLSAgICB3ID0gdGtpbnRlci50aXguU2Nyb2xsZWRXaW5kb3codG9wLCBzY3JvbGxiYXI9J2F1dG8nKQotICAgIHdpbiA9IHcud2luZG93Ci0gICAgdGV4dCA9ICdXZWxjb21lIHRvIFRJWCBpbiBQeXRob24nCi0gICAgdGl0bGUgPSB0a2ludGVyLnRpeC5MYWJlbCh3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgYmQ9MCwgd2lkdGg9MzAsIGFuY2hvcj10a2ludGVyLnRpeC5OLCB0ZXh0PXRleHQpCi0gICAgbXNnID0gdGtpbnRlci50aXguTWVzc2FnZSh3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgYmQ9MCwgd2lkdGg9NDAwLCBhbmNob3I9dGtpbnRlci50aXguTiwKLSAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdUaXggaXMgYSBzZXQgb2YgbWVnYS13aWRnZXRzIGJhc2VkIG9uIFRLLiBUaGlzIHByb2dyYW0gXAotZGVtb25zdHJhdGVzIHRoZSB3aWRnZXRzIGluIHRoZSBUaXggd2lkZ2V0IHNldC4gWW91IGNhbiBjaG9vc2UgdGhlIHBhZ2VzIFwKLWluIHRoaXMgd2luZG93IHRvIGxvb2sgYXQgdGhlIGNvcnJlc3BvbmRpbmcgd2lkZ2V0cy4gXG5cblwKLVRvIHF1aXQgdGhpcyBwcm9ncmFtLCBjaG9vc2UgdGhlICJGaWxlIHwgRXhpdCIgY29tbWFuZC5cblxuXAotRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwOi8vdGl4LnNvdXJjZWZvcmdlLm5ldC4nKQotICAgIHRpdGxlLnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD0xMCwgcGFkeT0xMCkKLSAgICBtc2cucGFjayhleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTEwLCBwYWR5PTEwKQotICAgIGRlbW8ud2VsbXNnID0gbXNnCi0gICAgcmV0dXJuIHcKLQotZGVmIE1haW5UZXh0Rm9udCh3KToKLSAgICBnbG9iYWwgZGVtbwotCi0gICAgaWYgbm90IGRlbW8ud2VsbXNnOgotICAgICAgICByZXR1cm4KLSAgICBmb250ID0gZGVtby53ZWxmb250Wyd2YWx1ZSddCi0gICAgcG9pbnQgPSBkZW1vLndlbHNpemVbJ3ZhbHVlJ10KLSAgICBpZiBmb250ID09ICdUaW1lcyBSb21hbic6Ci0gICAgICAgIGZvbnQgPSAndGltZXMnCi0gICAgZm9udHN0ciA9ICclcyAlcycgJSAoZm9udCwgcG9pbnQpCi0gICAgZGVtby53ZWxtc2dbJ2ZvbnQnXSA9IGZvbnRzdHIKLQotZGVmIFRvZ2dsZUhlbHAoKToKLSAgICBpZiBkZW1vLnVzZUJhbGxvb25zLmdldCgpID09ICcxJzoKLSAgICAgICAgZGVtby5iYWxsb29uWydzdGF0ZSddID0gJ2JvdGgnCi0gICAgZWxzZToKLSAgICAgICAgZGVtby5iYWxsb29uWydzdGF0ZSddID0gJ25vbmUnCi0KLWRlZiBNa0Nob29zZXJzKG5iLCBuYW1lKToKLSAgICB3ID0gbmIucGFnZShuYW1lKQotICAgIG9wdGlvbnMgPSAibGFiZWwucGFkWCA0IgotCi0gICAgdGlsID0gdGtpbnRlci50aXguTGFiZWxGcmFtZSh3LCBsYWJlbD0nQ2hvb3NlciBXaWRnZXRzJywgb3B0aW9ucz1vcHRpb25zKQotICAgIGNieCA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J3RpeENvbWJvQm94Jywgb3B0aW9ucz1vcHRpb25zKQotICAgIGN0bCA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J3RpeENvbnRyb2wnLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgc2VsID0gdGtpbnRlci50aXguTGFiZWxGcmFtZSh3LCBsYWJlbD0ndGl4U2VsZWN0Jywgb3B0aW9ucz1vcHRpb25zKQotICAgIG9wdCA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J3RpeE9wdGlvbk1lbnUnLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgZmlsID0gdGtpbnRlci50aXguTGFiZWxGcmFtZSh3LCBsYWJlbD0ndGl4RmlsZUVudHJ5Jywgb3B0aW9ucz1vcHRpb25zKQotICAgIGZieCA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J3RpeEZpbGVTZWxlY3RCb3gnLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgdGJyID0gdGtpbnRlci50aXguTGFiZWxGcmFtZSh3LCBsYWJlbD0nVG9vbCBCYXInLCBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICBNa1RpdGxlKHRpbC5mcmFtZSkKLSAgICBNa0NvbWJvKGNieC5mcmFtZSkKLSAgICBNa0NvbnRyb2woY3RsLmZyYW1lKQotICAgIE1rU2VsZWN0KHNlbC5mcmFtZSkKLSAgICBNa09wdE1lbnUob3B0LmZyYW1lKQotICAgIE1rRmlsZUVudChmaWwuZnJhbWUpCi0gICAgTWtGaWxlQm94KGZieC5mcmFtZSkKLSAgICBNa1Rvb2xCYXIodGJyLmZyYW1lKQotCi0gICAgIyBGaXJzdCBjb2x1bW46IGNvbUJveCBhbmQgc2VsZWN0b3IKLSAgICBjYnguZm9ybSh0b3A9MCwgbGVmdD0wLCByaWdodD0nJTMzJykKLSAgICBzZWwuZm9ybShsZWZ0PTAsIHJpZ2h0PScmJytzdHIoY2J4KSwgdG9wPWNieCkKLSAgICBvcHQuZm9ybShsZWZ0PTAsIHJpZ2h0PScmJytzdHIoY2J4KSwgdG9wPXNlbCwgYm90dG9tPS0xKQotCi0gICAgIyBTZWNvbmQgY29sdW1uOiB0aXRsZSAuLiBldGMKLSAgICB0aWwuZm9ybShsZWZ0PWNieCwgdG9wPTAscmlnaHQ9JyU2NicpCi0gICAgY3RsLmZvcm0obGVmdD1jYngsIHJpZ2h0PScmJytzdHIodGlsKSwgdG9wPXRpbCkKLSAgICBmaWwuZm9ybShsZWZ0PWNieCwgcmlnaHQ9JyYnK3N0cih0aWwpLCB0b3A9Y3RsKQotICAgIHRici5mb3JtKGxlZnQ9Y2J4LCByaWdodD0nJicrc3RyKHRpbCksIHRvcD1maWwsIGJvdHRvbT0tMSkKLQotICAgICMKLSAgICAjIFRoaXJkIGNvbHVtbjogZmlsZSBzZWxlY3Rpb24KLSAgICBmYnguZm9ybShyaWdodD0tMSwgdG9wPTAsIGxlZnQ9JyU2NicpCi0KLWRlZiBNa0NvbWJvKHcpOgotICAgIG9wdGlvbnM9ImxhYmVsLndpZHRoICVkIGxhYmVsLmFuY2hvciAlcyBlbnRyeS53aWR0aCAlZCIgJSAoMTAsIHRraW50ZXIudGl4LkUsIDE0KQotCi0gICAgc3RhdGljID0gdGtpbnRlci50aXguQ29tYm9Cb3godywgbGFiZWw9J1N0YXRpYycsIGVkaXRhYmxlPTAsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBlZGl0YWJsZSA9IHRraW50ZXIudGl4LkNvbWJvQm94KHcsIGxhYmVsPSdFZGl0YWJsZScsIGVkaXRhYmxlPTEsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBoaXN0b3J5ID0gdGtpbnRlci50aXguQ29tYm9Cb3godywgbGFiZWw9J0hpc3RvcnknLCBlZGl0YWJsZT0xLCBoaXN0b3J5PTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I9dGtpbnRlci50aXguRSwgb3B0aW9ucz1vcHRpb25zKQotICAgIHN0YXRpYy5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnSmFudWFyeScpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdGZWJydWFyeScpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdNYXJjaCcpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdBcHJpbCcpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdNYXknKQotICAgIHN0YXRpYy5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnSnVuZScpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdKdWx5JykKLSAgICBzdGF0aWMuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0F1Z3VzdCcpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdTZXB0ZW1iZXInKQotICAgIHN0YXRpYy5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnT2N0b2JlcicpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdOb3ZlbWJlcicpCi0gICAgc3RhdGljLmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdEZWNlbWJlcicpCi0KLSAgICBlZGl0YWJsZS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnQW5nb2xhJykKLSAgICBlZGl0YWJsZS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnQmFuZ2xhZGVzaCcpCi0gICAgZWRpdGFibGUuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0NoaW5hJykKLSAgICBlZGl0YWJsZS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnRGVubWFyaycpCi0gICAgZWRpdGFibGUuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0VjdWFkb3InKQotCi0gICAgaGlzdG9yeS5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnL3Vzci9iaW4va3NoJykKLSAgICBoaXN0b3J5Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICcvdXNyL2xvY2FsL2xpYi9weXRob24nKQotICAgIGhpc3RvcnkuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJy92YXIvYWRtJykKLQotICAgIHN0YXRpYy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTUsIHBhZHk9MykKLSAgICBlZGl0YWJsZS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTUsIHBhZHk9MykKLSAgICBoaXN0b3J5LnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9NSwgcGFkeT0zKQotCi1zdGF0ZXMgPSBbJ0JlbmdhbCcsICdEZWxoaScsICdLYXJuYXRha2EnLCAnVGFtaWwgTmFkdSddCi0KLWRlZiBzcGluX2NtZCh3LCBpbmMpOgotICAgIGlkeCA9IHN0YXRlcy5pbmRleChkZW1vX3NwaW50eHQuZ2V0KCkpICsgaW5jCi0gICAgaWYgaWR4IDwgMDoKLSAgICAgICAgaWR4ID0gbGVuKHN0YXRlcykgLSAxCi0gICAgZWxpZiBpZHggPj0gbGVuKHN0YXRlcyk6Ci0gICAgICAgIGlkeCA9IDAKLSMgZm9sbG93aW5nIGRvZXNuJ3Qgd29yay4KLSMgICAgcmV0dXJuIHN0YXRlc1tpZHhdCi0gICAgZGVtb19zcGludHh0LnNldChzdGF0ZXNbaWR4XSkgICAgICAgIyB0aGlzIHdvcmtzCi0KLWRlZiBzcGluX3ZhbGlkYXRlKHcpOgotICAgIGdsb2JhbCBzdGF0ZXMsIGRlbW9fc3BpbnR4dAotCi0gICAgdHJ5OgotICAgICAgICBpID0gc3RhdGVzLmluZGV4KGRlbW9fc3BpbnR4dC5nZXQoKSkKLSAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgcmV0dXJuIHN0YXRlc1swXQotICAgIHJldHVybiBzdGF0ZXNbaV0KLSAgICAjIHdoeSB0aGlzIHByb2NlZHVyZSB3b3JrcyBhcyBvcHBvc2VkIHRvIHRoZSBwcmV2aW91cyBvbmUgYmVhdHMgbWUuCi0KLWRlZiBNa0NvbnRyb2wodyk6Ci0gICAgZ2xvYmFsIGRlbW9fc3BpbnR4dAotCi0gICAgb3B0aW9ucz0ibGFiZWwud2lkdGggJWQgbGFiZWwuYW5jaG9yICVzIGVudHJ5LndpZHRoICVkIiAlICgxMCwgdGtpbnRlci50aXguRSwgMTMpCi0KLSAgICBkZW1vX3NwaW50eHQgPSB0a2ludGVyLnRpeC5TdHJpbmdWYXIoKQotICAgIGRlbW9fc3BpbnR4dC5zZXQoc3RhdGVzWzBdKQotICAgIHNpbXBsZSA9IHRraW50ZXIudGl4LkNvbnRyb2wodywgbGFiZWw9J051bWJlcnMnLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgc3BpbnR4dCA9IHRraW50ZXIudGl4LkNvbnRyb2wodywgbGFiZWw9J1N0YXRlcycsIHZhcmlhYmxlPWRlbW9fc3BpbnR4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz1vcHRpb25zKQotICAgIHNwaW50eHRbJ2luY3JjbWQnXSA9IGxhbWJkYSB3PXNwaW50eHQ6IHNwaW5fY21kKHcsIDEpCi0gICAgc3BpbnR4dFsnZGVjcmNtZCddID0gbGFtYmRhIHc9c3BpbnR4dDogc3Bpbl9jbWQodywgLTEpCi0gICAgc3BpbnR4dFsndmFsaWRhdGVjbWQnXSA9IGxhbWJkYSB3PXNwaW50eHQ6IHNwaW5fdmFsaWRhdGUodykKLQotICAgIHNpbXBsZS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTUsIHBhZHk9MykKLSAgICBzcGludHh0LnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9NSwgcGFkeT0zKQotCi1kZWYgTWtTZWxlY3Qodyk6Ci0gICAgb3B0aW9ucyA9ICJsYWJlbC5hbmNob3IgJXMiICUgdGtpbnRlci50aXguQ0VOVEVSCi0KLSAgICBzZWwxID0gdGtpbnRlci50aXguU2VsZWN0KHcsIGxhYmVsPSdNZXJlIE1vcnRhbHMnLCBhbGxvd3plcm89MSwgcmFkaW89MSwKLSAgICAgICAgICAgICAgICAgICAgICBvcmllbnRhdGlvbj10a2ludGVyLnRpeC5WRVJUSUNBTCwKLSAgICAgICAgICAgICAgICAgICAgICBsYWJlbHNpZGU9dGtpbnRlci50aXguVE9QLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucykKLSAgICBzZWwyID0gdGtpbnRlci50aXguU2VsZWN0KHcsIGxhYmVsPSdHZWVrcycsIGFsbG93emVybz0xLCByYWRpbz0wLAotICAgICAgICAgICAgICAgICAgICAgIG9yaWVudGF0aW9uPXRraW50ZXIudGl4LlZFUlRJQ0FMLAotICAgICAgICAgICAgICAgICAgICAgIGxhYmVsc2lkZT0gdGtpbnRlci50aXguVE9QLAotICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9b3B0aW9ucykKLQotICAgIHNlbDEuYWRkKCdlYXQnLCB0ZXh0PSdFYXQnKQotICAgIHNlbDEuYWRkKCd3b3JrJywgdGV4dD0nV29yaycpCi0gICAgc2VsMS5hZGQoJ3BsYXknLCB0ZXh0PSdQbGF5JykKLSAgICBzZWwxLmFkZCgncGFydHknLCB0ZXh0PSdQYXJ0eScpCi0gICAgc2VsMS5hZGQoJ3NsZWVwJywgdGV4dD0nU2xlZXAnKQotCi0gICAgc2VsMi5hZGQoJ2VhdCcsIHRleHQ9J0VhdCcpCi0gICAgc2VsMi5hZGQoJ3Byb2cxJywgdGV4dD0nUHJvZ3JhbScpCi0gICAgc2VsMi5hZGQoJ3Byb2cyJywgdGV4dD0nUHJvZ3JhbScpCi0gICAgc2VsMi5hZGQoJ3Byb2czJywgdGV4dD0nUHJvZ3JhbScpCi0gICAgc2VsMi5hZGQoJ3NsZWVwJywgdGV4dD0nU2xlZXAnKQotCi0gICAgc2VsMS5wYWNrKHNpZGU9dGtpbnRlci50aXguTEVGVCwgcGFkeD01LCBwYWR5PTMsIGZpbGw9dGtpbnRlci50aXguWCkKLSAgICBzZWwyLnBhY2soc2lkZT10a2ludGVyLnRpeC5MRUZULCBwYWR4PTUsIHBhZHk9MywgZmlsbD10a2ludGVyLnRpeC5YKQotCi1kZWYgTWtPcHRNZW51KHcpOgotICAgIG9wdGlvbnM9J21lbnVidXR0b24ud2lkdGggMTUgbGFiZWwuYW5jaG9yICVzJyAlIHRraW50ZXIudGl4LkUKLQotICAgIG0gPSB0a2ludGVyLnRpeC5PcHRpb25NZW51KHcsIGxhYmVsPSdGaWxlIEZvcm1hdCA6ICcsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBtLmFkZF9jb21tYW5kKCd0ZXh0JywgbGFiZWw9J1BsYWluIFRleHQnKQotICAgIG0uYWRkX2NvbW1hbmQoJ3Bvc3QnLCBsYWJlbD0nUG9zdFNjcmlwdCcpCi0gICAgbS5hZGRfY29tbWFuZCgnZm9ybWF0JywgbGFiZWw9J0Zvcm1hdHRlZCBUZXh0JykKLSAgICBtLmFkZF9jb21tYW5kKCdodG1sJywgbGFiZWw9J0hUTUwnKQotICAgIG0uYWRkX2NvbW1hbmQoJ3NlcCcpCi0gICAgbS5hZGRfY29tbWFuZCgndGV4JywgbGFiZWw9J0xhVGVYJykKLSAgICBtLmFkZF9jb21tYW5kKCdydGYnLCBsYWJlbD0nUmljaCBUZXh0IEZvcm1hdCcpCi0KLSAgICBtLnBhY2soZmlsbD10a2ludGVyLnRpeC5YLCBwYWR4PTUsIHBhZHk9MykKLQotZGVmIE1rRmlsZUVudCh3KToKLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nUHJlc3MgdGhlICJvcGVuIGZpbGUiIGljb24gYnV0dG9uIGFuZCBhIFRpeEZpbGVTZWxlY3REaWFsb2cgd2lsbCBwb3B1cC4nKQotICAgIGVudCA9IHRraW50ZXIudGl4LkZpbGVFbnRyeSh3LCBsYWJlbD0nU2VsZWN0IGEgZmlsZSA6ICcpCi0gICAgbXNnLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIGV4cGFuZD0xLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIHBhZHg9MywgcGFkeT0zKQotICAgIGVudC5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBmaWxsPXRraW50ZXIudGl4LlgsIHBhZHg9MywgcGFkeT0zKQotCi1kZWYgTWtGaWxlQm94KHcpOgotICAgICIiIlRoZSBGaWxlU2VsZWN0Qm94IGlzIGEgTW90aWYtc3R5bGUgYm94IHdpdGggdmFyaW91cyBlbmhhbmNlbWVudHMuCi0gICAgRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB0d28gbGlzdGJveGVzCi0gICAgYW5kIHlvdXIgcGFzdCBzZWxlY3Rpb25zIGFyZSByZWNvcmRlZC4KLSAgICAiIiIKLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIFRpeCBGaWxlU2VsZWN0Qm94IGlzIGEgTW90aWYtc3R5bGUgYm94IHdpdGggdmFyaW91cyBlbmhhbmNlbWVudHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGFkanVzdCB0aGUgc2l6ZSBvZiB0aGUgdHdvIGxpc3Rib3hlcyBhbmQgeW91ciBwYXN0IHNlbGVjdGlvbnMgYXJlIHJlY29yZGVkLicpCi0gICAgYm94ID0gdGtpbnRlci50aXguRmlsZVNlbGVjdEJveCh3KQotICAgIG1zZy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTMsIHBhZHk9MykKLSAgICBib3gucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZmlsbD10a2ludGVyLnRpeC5YLCBwYWR4PTMsIHBhZHk9MykKLQotZGVmIE1rVG9vbEJhcih3KToKLSAgICAiIiJUaGUgU2VsZWN0IHdpZGdldCBpcyBhbHNvIGdvb2QgZm9yIGFycmFuZ2luZyBidXR0b25zIGluIGEgdG9vbCBiYXIuCi0gICAgIiIiCi0gICAgZ2xvYmFsIGRlbW8KLQotICAgIG9wdGlvbnM9J2ZyYW1lLmJvcmRlcldpZHRoIDEnCi0KLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIFNlbGVjdCB3aWRnZXQgaXMgYWxzbyBnb29kIGZvciBhcnJhbmdpbmcgYnV0dG9ucyBpbiBhIHRvb2wgYmFyLicpCi0gICAgYmFyID0gdGtpbnRlci50aXguRnJhbWUodywgYmQ9MiwgcmVsaWVmPXRraW50ZXIudGl4LlJBSVNFRCkKLSAgICBmb250ID0gdGtpbnRlci50aXguU2VsZWN0KHcsIGFsbG93emVybz0xLCByYWRpbz0wLCBsYWJlbD0nJywgb3B0aW9ucz1vcHRpb25zKQotICAgIHBhcmEgPSB0a2ludGVyLnRpeC5TZWxlY3QodywgYWxsb3d6ZXJvPTAsIHJhZGlvPTEsIGxhYmVsPScnLCBvcHRpb25zPW9wdGlvbnMpCi0KLSAgICBmb250LmFkZCgnYm9sZCcsIGJpdG1hcD0nQCcgKyBkZW1vLmRpciArICcvYml0bWFwcy9ib2xkLnhibScpCi0gICAgZm9udC5hZGQoJ2l0YWxpYycsIGJpdG1hcD0nQCcgKyBkZW1vLmRpciArICcvYml0bWFwcy9pdGFsaWMueGJtJykKLSAgICBmb250LmFkZCgndW5kZXJsaW5lJywgYml0bWFwPSdAJyArIGRlbW8uZGlyICsgJy9iaXRtYXBzL3VuZGVybGluZS54Ym0nKQotICAgIGZvbnQuYWRkKCdjYXBpdGFsJywgYml0bWFwPSdAJyArIGRlbW8uZGlyICsgJy9iaXRtYXBzL2NhcGl0YWwueGJtJykKLQotICAgIHBhcmEuYWRkKCdsZWZ0JywgYml0bWFwPSdAJyArIGRlbW8uZGlyICsgJy9iaXRtYXBzL2xlZnRqLnhibScpCi0gICAgcGFyYS5hZGQoJ3JpZ2h0JywgYml0bWFwPSdAJyArIGRlbW8uZGlyICsgJy9iaXRtYXBzL3JpZ2h0ai54Ym0nKQotICAgIHBhcmEuYWRkKCdjZW50ZXInLCBiaXRtYXA9J0AnICsgZGVtby5kaXIgKyAnL2JpdG1hcHMvY2VudGVyai54Ym0nKQotICAgIHBhcmEuYWRkKCdqdXN0aWZ5JywgYml0bWFwPSdAJyArIGRlbW8uZGlyICsgJy9iaXRtYXBzL2p1c3RpZnkueGJtJykKLQotICAgIG1zZy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTMsIHBhZHk9MykKLSAgICBiYXIucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZmlsbD10a2ludGVyLnRpeC5YLCBwYWR4PTMsIHBhZHk9MykKLSAgICBmb250LnBhY2soeydpbic6YmFyfSwgc2lkZT10a2ludGVyLnRpeC5MRUZULCBwYWR4PTMsIHBhZHk9MykKLSAgICBwYXJhLnBhY2soeydpbic6YmFyfSwgc2lkZT10a2ludGVyLnRpeC5MRUZULCBwYWR4PTMsIHBhZHk9MykKLQotZGVmIE1rVGl0bGUodyk6Ci0gICAgbXNnID0gdGtpbnRlci50aXguTWVzc2FnZSh3LAotICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj10a2ludGVyLnRpeC5GTEFULCB3aWR0aD0yNDAsIGFuY2hvcj10a2ludGVyLnRpeC5OLAotICAgICAgICAgICAgICAgICAgICAgIHRleHQ9J1RoZXJlIGFyZSBtYW55IHR5cGVzIG9mICJjaG9vc2VyIiB3aWRnZXRzIHRoYXQgYWxsb3cgdGhlIHVzZXIgdG8gaW5wdXQgZGlmZmVyZW50IHR5cGVzIG9mIGluZm9ybWF0aW9uJykKLSAgICBtc2cucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD0zLCBwYWR5PTMpCi0KLWRlZiBNa1Njcm9sbChuYiwgbmFtZSk6Ci0gICAgdyA9IG5iLnBhZ2UobmFtZSkKLSAgICBvcHRpb25zPSdsYWJlbC5wYWRYIDQnCi0KLSAgICBzbHMgPSB0a2ludGVyLnRpeC5MYWJlbEZyYW1lKHcsIGxhYmVsPSdUaXguU2Nyb2xsZWRMaXN0Qm94Jywgb3B0aW9ucz1vcHRpb25zKQotICAgIHN3biA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J1RpeC5TY3JvbGxlZFdpbmRvdycsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBzdHggPSB0a2ludGVyLnRpeC5MYWJlbEZyYW1lKHcsIGxhYmVsPSdUaXguU2Nyb2xsZWRUZXh0Jywgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgTWtTTGlzdChzbHMuZnJhbWUpCi0gICAgTWtTV2luZG93KHN3bi5mcmFtZSkKLSAgICBNa1NUZXh0KHN0eC5mcmFtZSkKLQotICAgIHNscy5mb3JtKHRvcD0wLCBsZWZ0PTAsIHJpZ2h0PSclMzMnLCBib3R0b209LTEpCi0gICAgc3duLmZvcm0odG9wPTAsIGxlZnQ9c2xzLCByaWdodD0nJTY2JywgYm90dG9tPS0xKQotICAgIHN0eC5mb3JtKHRvcD0wLCBsZWZ0PXN3biwgcmlnaHQ9LTEsIGJvdHRvbT0tMSkKLQotCi1kZWYgTWtTTGlzdCh3KToKLSAgICAiIiJUaGlzIFRpeFNjcm9sbGVkTGlzdEJveCBpcyBjb25maWd1cmVkIHNvIHRoYXQgaXQgdXNlcyBzY3JvbGxiYXJzCi0gICAgb25seSB3aGVuIGl0IGlzIG5lY2Vzc2FyeS4gVXNlIHRoZSBoYW5kbGVzIHRvIHJlc2l6ZSB0aGUgbGlzdGJveCBhbmQKLSAgICB3YXRjaCB0aGUgc2Nyb2xsYmFycyBhdXRvbWF0aWNhbGx5IGFwcGVhciBhbmQgZGlzYXBwZWFyLiAgIiIiCi0gICAgdG9wID0gdGtpbnRlci50aXguRnJhbWUodywgd2lkdGg9MzAwLCBoZWlnaHQ9MzMwKQotICAgIGJvdCA9IHRraW50ZXIudGl4LkZyYW1lKHcpCi0gICAgbXNnID0gdGtpbnRlci50aXguTWVzc2FnZSh0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTIwMCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhpcyBUaXhTY3JvbGxlZExpc3RCb3ggaXMgY29uZmlndXJlZCBzbyB0aGF0IGl0IHVzZXMgc2Nyb2xsYmFycyBvbmx5IHdoZW4gaXQgaXMgbmVjZXNzYXJ5LiBVc2UgdGhlIGhhbmRsZXMgdG8gcmVzaXplIHRoZSBsaXN0Ym94IGFuZCB3YXRjaCB0aGUgc2Nyb2xsYmFycyBhdXRvbWF0aWNhbGx5IGFwcGVhciBhbmQgZGlzYXBwZWFyLicpCi0KLSAgICBsaXN0ID0gdGtpbnRlci50aXguU2Nyb2xsZWRMaXN0Qm94KHRvcCwgc2Nyb2xsYmFyPSdhdXRvJykKLSAgICBsaXN0LnBsYWNlKHg9NTAsIHk9MTUwLCB3aWR0aD0xMjAsIGhlaWdodD04MCkKLSAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ0FsYWJhbWEnKQotICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnQ2FsaWZvcm5pYScpCi0gICAgbGlzdC5saXN0Ym94Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICdNb250YW5hJykKLSAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ05ldyBKZXJzZXknKQotICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnTmV3IFlvcmsnKQotICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAnUGVubnN5bHZhbmlhJykKLSAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJ1dhc2hpbmd0b24nKQotCi0gICAgcmggPSB0a2ludGVyLnRpeC5SZXNpemVIYW5kbGUodG9wLCBiZz0nYmxhY2snLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzaXplPTgsIGdyaWRkZWQ9MSwgbWlud2lkdGg9NTAsIG1pbmhlaWdodD0zMCkKLSAgICBidG4gPSB0a2ludGVyLnRpeC5CdXR0b24oYm90LCB0ZXh0PSdSZXNldCcsIGNvbW1hbmQ9bGFtYmRhIHc9cmgsIHg9bGlzdDogU0xpc3RfcmVzZXQodyx4KSkKLSAgICB0b3AucHJvcGFnYXRlKDApCi0gICAgbXNnLnBhY2soZmlsbD10a2ludGVyLnRpeC5YKQotICAgIGJ0bi5wYWNrKGFuY2hvcj10a2ludGVyLnRpeC5DRU5URVIpCi0gICAgdG9wLnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICBib3QucGFjayhmaWxsPXRraW50ZXIudGl4LkJPVEgpCi0gICAgbGlzdC5iaW5kKCc8TWFwPicsIGZ1bmM9bGFtYmRhIGFyZz0wLCByaD1yaCwgbGlzdD1saXN0OgotICAgICAgICAgICAgICBsaXN0LnRrLmNhbGwoJ3RpeERvV2hlbklkbGUnLCBzdHIocmgpLCAnYXR0YWNod2lkZ2V0Jywgc3RyKGxpc3QpKSkKLQotZGVmIFNMaXN0X3Jlc2V0KHJoLCBsaXN0KToKLSAgICBsaXN0LnBsYWNlKHg9NTAsIHk9MTUwLCB3aWR0aD0xMjAsIGhlaWdodD04MCkKLSAgICBsaXN0LnVwZGF0ZSgpCi0gICAgcmguYXR0YWNoX3dpZGdldChsaXN0KQotCi1kZWYgTWtTV2luZG93KHcpOgotICAgICIiIlRoZSBTY3JvbGxlZFdpbmRvdyB3aWRnZXQgYWxsb3dzIHlvdSB0byBzY3JvbGwgYW55IGtpbmQgb2YgVGsKLSAgICB3aWRnZXQuIEl0IGlzIG1vcmUgdmVyc2F0aWxlIHRoYW4gYSBzY3JvbGxlZCBjYW52YXMgd2lkZ2V0LgotICAgICIiIgotICAgIGdsb2JhbCBkZW1vCi0KLSAgICB0ZXh0ID0gJ1RoZSBUaXggU2Nyb2xsZWRXaW5kb3cgd2lkZ2V0IGFsbG93cyB5b3UgdG8gc2Nyb2xsIGFueSBraW5kIG9mIFRrIHdpZGdldC4gSXQgaXMgbW9yZSB2ZXJzYXRpbGUgdGhhbiBhIHNjcm9sbGVkIGNhbnZhcyB3aWRnZXQuJwotCi0gICAgZmlsZSA9IG9zLnBhdGguam9pbihkZW1vLmRpciwgJ2JpdG1hcHMnLCAndGl4LmdpZicpCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGZpbGUpOgotICAgICAgICB0ZXh0ICs9ICcgKEltYWdlIG1pc3NpbmcpJwotCi0gICAgdG9wID0gdGtpbnRlci50aXguRnJhbWUodywgd2lkdGg9MzMwLCBoZWlnaHQ9MzMwKQotICAgIGJvdCA9IHRraW50ZXIudGl4LkZyYW1lKHcpCi0gICAgbXNnID0gdGtpbnRlci50aXguTWVzc2FnZSh0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTIwMCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD10ZXh0KQotCi0gICAgd2luID0gdGtpbnRlci50aXguU2Nyb2xsZWRXaW5kb3codG9wLCBzY3JvbGxiYXI9J2F1dG8nKQotCi0gICAgaW1hZ2UxID0gd2luLndpbmRvdy5pbWFnZV9jcmVhdGUoJ3Bob3RvJywgZmlsZT1maWxlKQotICAgIGxibCA9IHRraW50ZXIudGl4LkxhYmVsKHdpbi53aW5kb3csIGltYWdlPWltYWdlMSkKLSAgICBsYmwucGFjayhleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RIKQotCi0gICAgd2luLnBsYWNlKHg9MzAsIHk9MTUwLCB3aWR0aD0xOTAsIGhlaWdodD0xMjApCi0KLSAgICByaCA9IHRraW50ZXIudGl4LlJlc2l6ZUhhbmRsZSh0b3AsIGJnPSdibGFjaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj10a2ludGVyLnRpeC5SQUlTRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNpemU9OCwgZ3JpZGRlZD0xLCBtaW53aWR0aD01MCwgbWluaGVpZ2h0PTMwKQotICAgIGJ0biA9IHRraW50ZXIudGl4LkJ1dHRvbihib3QsIHRleHQ9J1Jlc2V0JywgY29tbWFuZD1sYW1iZGEgdz1yaCwgeD13aW46IFNXaW5kb3dfcmVzZXQodyx4KSkKLSAgICB0b3AucHJvcGFnYXRlKDApCi0gICAgbXNnLnBhY2soZmlsbD10a2ludGVyLnRpeC5YKQotICAgIGJ0bi5wYWNrKGFuY2hvcj10a2ludGVyLnRpeC5DRU5URVIpCi0gICAgdG9wLnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICBib3QucGFjayhmaWxsPXRraW50ZXIudGl4LkJPVEgpCi0KLSAgICB3aW4uYmluZCgnPE1hcD4nLCBmdW5jPWxhbWJkYSBhcmc9MCwgcmg9cmgsIHdpbj13aW46Ci0gICAgICAgICAgICAgd2luLnRrLmNhbGwoJ3RpeERvV2hlbklkbGUnLCBzdHIocmgpLCAnYXR0YWNod2lkZ2V0Jywgc3RyKHdpbikpKQotCi1kZWYgU1dpbmRvd19yZXNldChyaCwgd2luKToKLSAgICB3aW4ucGxhY2UoeD0zMCwgeT0xNTAsIHdpZHRoPTE5MCwgaGVpZ2h0PTEyMCkKLSAgICB3aW4udXBkYXRlKCkKLSAgICByaC5hdHRhY2hfd2lkZ2V0KHdpbikKLQotZGVmIE1rU1RleHQodyk6Ci0gICAgIiIiVGhlIFRpeFNjcm9sbGVkV2luZG93IHdpZGdldCBhbGxvd3MgeW91IHRvIHNjcm9sbCBhbnkga2luZCBvZiBUawotICAgIHdpZGdldC4gSXQgaXMgbW9yZSB2ZXJzYXRpbGUgdGhhbiBhIHNjcm9sbGVkIGNhbnZhcyB3aWRnZXQuIiIiCi0gICAgdG9wID0gdGtpbnRlci50aXguRnJhbWUodywgd2lkdGg9MzMwLCBoZWlnaHQ9MzMwKQotICAgIGJvdCA9IHRraW50ZXIudGl4LkZyYW1lKHcpCi0gICAgbXNnID0gdGtpbnRlci50aXguTWVzc2FnZSh0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTIwMCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIFRpeCBTY3JvbGxlZFdpbmRvdyB3aWRnZXQgYWxsb3dzIHlvdSB0byBzY3JvbGwgYW55IGtpbmQgb2YgVGsgd2lkZ2V0LiBJdCBpcyBtb3JlIHZlcnNhdGlsZSB0aGFuIGEgc2Nyb2xsZWQgY2FudmFzIHdpZGdldC4nKQotCi0gICAgd2luID0gdGtpbnRlci50aXguU2Nyb2xsZWRUZXh0KHRvcCwgc2Nyb2xsYmFyPSdhdXRvJykKLSAgICB3aW4udGV4dFsnd3JhcCddID0gJ25vbmUnCi0gICAgd2luLnRleHQuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgJycnV2hlbiAtc2Nyb2xsYmFyIGlzIHNldCB0byAiYXV0byIsIHRoZQotc2Nyb2xsYmFycyBhcmUgc2hvd24gb25seSB3aGVuIG5lZWRlZC4KLUFkZGl0aW9uYWwgbW9kaWZpZXJzIGNhbiBiZSB1c2VkIHRvIGZvcmNlIGEKLXNjcm9sbGJhciB0byBiZSBzaG93biBvciBoaWRkZW4uIEZvciBleGFtcGxlLAotImF1dG8gLXkiIG1lYW5zIHRoZSBob3Jpem9udGFsIHNjcm9sbGJhcgotc2hvdWxkIGJlIHNob3duIHdoZW4gbmVlZGVkIGJ1dCB0aGUgdmVydGljYWwKLXNjcm9sbGJhciBzaG91bGQgYWx3YXlzIGJlIGhpZGRlbjsKLSJhdXRvICt4IiBtZWFucyB0aGUgdmVydGljYWwgc2Nyb2xsYmFyCi1zaG91bGQgYmUgc2hvd24gd2hlbiBuZWVkZWQgYnV0IHRoZSBob3Jpem9udGFsCi1zY3JvbGxiYXIgc2hvdWxkIGFsd2F5cyBiZSBzaG93biwgYW5kIHNvIG9uLicnJwotKQotICAgIHdpbi5wbGFjZSh4PTMwLCB5PTE1MCwgd2lkdGg9MTkwLCBoZWlnaHQ9MTAwKQotCi0gICAgcmggPSB0a2ludGVyLnRpeC5SZXNpemVIYW5kbGUodG9wLCBiZz0nYmxhY2snLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9dGtpbnRlci50aXguUkFJU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVzaXplPTgsIGdyaWRkZWQ9MSwgbWlud2lkdGg9NTAsIG1pbmhlaWdodD0zMCkKLSAgICBidG4gPSB0a2ludGVyLnRpeC5CdXR0b24oYm90LCB0ZXh0PSdSZXNldCcsIGNvbW1hbmQ9bGFtYmRhIHc9cmgsIHg9d2luOiBTVGV4dF9yZXNldCh3LHgpKQotICAgIHRvcC5wcm9wYWdhdGUoMCkKLSAgICBtc2cucGFjayhmaWxsPXRraW50ZXIudGl4LlgpCi0gICAgYnRuLnBhY2soYW5jaG9yPXRraW50ZXIudGl4LkNFTlRFUikKLSAgICB0b3AucGFjayhleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RIKQotICAgIGJvdC5wYWNrKGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICB3aW4uYmluZCgnPE1hcD4nLCBmdW5jPWxhbWJkYSBhcmc9MCwgcmg9cmgsIHdpbj13aW46Ci0gICAgICAgICAgICAgd2luLnRrLmNhbGwoJ3RpeERvV2hlbklkbGUnLCBzdHIocmgpLCAnYXR0YWNod2lkZ2V0Jywgc3RyKHdpbikpKQotCi1kZWYgU1RleHRfcmVzZXQocmgsIHdpbik6Ci0gICAgd2luLnBsYWNlKHg9MzAsIHk9MTUwLCB3aWR0aD0xOTAsIGhlaWdodD0xMjApCi0gICAgd2luLnVwZGF0ZSgpCi0gICAgcmguYXR0YWNoX3dpZGdldCh3aW4pCi0KLWRlZiBNa01hbmFnZXIobmIsIG5hbWUpOgotICAgIHcgPSBuYi5wYWdlKG5hbWUpCi0gICAgb3B0aW9ucz0nbGFiZWwucGFkWCA0JwotCi0gICAgcGFuZSA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J1RpeC5QYW5lZFdpbmRvdycsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBub3RlID0gdGtpbnRlci50aXguTGFiZWxGcmFtZSh3LCBsYWJlbD0nVGl4Lk5vdGVCb29rJywgb3B0aW9ucz1vcHRpb25zKQotCi0gICAgTWtQYW5lZFdpbmRvdyhwYW5lLmZyYW1lKQotICAgIE1rTm90ZUJvb2sobm90ZS5mcmFtZSkKLQotICAgIHBhbmUuZm9ybSh0b3A9MCwgbGVmdD0wLCByaWdodD1ub3RlLCBib3R0b209LTEpCi0gICAgbm90ZS5mb3JtKHRvcD0wLCByaWdodD0tMSwgYm90dG9tPS0xKQotCi1kZWYgTWtQYW5lZFdpbmRvdyh3KToKLSAgICAiIiJUaGUgUGFuZWRXaW5kb3cgd2lkZ2V0IGFsbG93cyB0aGUgdXNlciB0byBpbnRlcmFjdGl2ZWx5IG1hbmlwdWxhdGUKLSAgICB0aGUgc2l6ZXMgb2Ygc2V2ZXJhbCBwYW5lcy4gVGhlIHBhbmVzIGNhbiBiZSBhcnJhbmdlZCBlaXRoZXIgdmVydGljYWxseQotICAgIG9yIGhvcml6b250YWxseS4KLSAgICAiIiIKLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIFBhbmVkV2luZG93IHdpZGdldCBhbGxvd3MgdGhlIHVzZXIgdG8gaW50ZXJhY3RpdmVseSBtYW5pcHVsYXRlIHRoZSBzaXplcyBvZiBzZXZlcmFsIHBhbmVzLiBUaGUgcGFuZXMgY2FuIGJlIGFycmFuZ2VkIGVpdGhlciB2ZXJ0aWNhbGx5IG9yIGhvcml6b250YWxseS4nKQotICAgIGdyb3VwID0gdGtpbnRlci50aXguTGFiZWxFbnRyeSh3LCBsYWJlbD0nTmV3c2dyb3VwOicsIG9wdGlvbnM9J2VudHJ5LndpZHRoIDI1JykKLSAgICBncm91cC5lbnRyeS5pbnNlcnQoMCwnY29tcC5sYW5nLnB5dGhvbicpCi0gICAgcGFuZSA9IHRraW50ZXIudGl4LlBhbmVkV2luZG93KHcsIG9yaWVudGF0aW9uPSd2ZXJ0aWNhbCcpCi0KLSAgICBwMSA9IHBhbmUuYWRkKCdsaXN0JywgbWluPTcwLCBzaXplPTEwMCkKLSAgICBwMiA9IHBhbmUuYWRkKCd0ZXh0JywgbWluPTcwKQotICAgIGxpc3QgPSB0a2ludGVyLnRpeC5TY3JvbGxlZExpc3RCb3gocDEpCi0gICAgdGV4dCA9IHRraW50ZXIudGl4LlNjcm9sbGVkVGV4dChwMikKLQotICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAiICAxMjMyNCBSZTogVGtpbnRlciBpcyBnb29kIGZvciB5b3VyIGhlYWx0aCIpCi0gICAgbGlzdC5saXN0Ym94Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICIrIDEyMzI1IFJlOiBUa2ludGVyIGlzIGdvb2QgZm9yIHlvdXIgaGVhbHRoIikKLSAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIisgMTIzMjYgUmU6IFRpeCBpcyBldmVuIGJldHRlciBmb3IgeW91ciBoZWFsdGggKFdhczogVGtpbnRlciBpcyBnb29kLi4uKSIpCi0gICAgbGlzdC5saXN0Ym94Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICIgIDEyMzI3IFJlOiBUaXggaXMgZXZlbiBiZXR0ZXIgZm9yIHlvdXIgaGVhbHRoIChXYXM6IFRraW50ZXIgaXMgZ29vZC4uLikiKQotICAgIGxpc3QubGlzdGJveC5pbnNlcnQodGtpbnRlci50aXguRU5ELCAiKyAxMjMyOCBSZTogVGl4IGlzIGV2ZW4gYmV0dGVyIGZvciB5b3VyIGhlYWx0aCAoV2FzOiBUa2ludGVyIGlzIGdvb2QuLi4pIikKLSAgICBsaXN0Lmxpc3Rib3guaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIiAgMTIzMjkgUmU6IFRpeCBpcyBldmVuIGJldHRlciBmb3IgeW91ciBoZWFsdGggKFdhczogVGtpbnRlciBpcyBnb29kLi4uKSIpCi0gICAgbGlzdC5saXN0Ym94Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsICIrIDEyMzMwIFJlOiBUaXggaXMgZXZlbiBiZXR0ZXIgZm9yIHlvdXIgaGVhbHRoIChXYXM6IFRraW50ZXIgaXMgZ29vZC4uLikiKQotCi0gICAgdGV4dC50ZXh0WydiZyddID0gbGlzdC5saXN0Ym94WydiZyddCi0gICAgdGV4dC50ZXh0Wyd3cmFwJ10gPSAnbm9uZScKLSAgICB0ZXh0LnRleHQuaW5zZXJ0KHRraW50ZXIudGl4LkVORCwgIiIiCi1Nb24sIDE5IEp1biAxOTk1IDExOjM5OjUyICAgICAgICBjb21wLmxhbmcucHl0aG9uICAgICAgICAgICAgICBUaHJlYWQgICAzNCBvZiAgMjIwCi1MaW5lcyAzNTMgICAgICAgQSBuZXcgd2F5IHRvIHB1dCB0ZXh0IGFuZCBiaXRtYXBzIHRvZ2V0aGVyIGlObyByZXNwb25zZXMKLWlvaUBibHVlLnNlYXMudXBlbm4uZWR1ICAgICAgICAgICAgICAgIElvaSBLLiBMYW0gYXQgVW5pdmVyc2l0eSBvZiBQZW5uc3lsdmFuaWEKLQotSGksCi0KLUkgaGF2ZSBpbXBsZW1lbnRlZCBhIG5ldyBpbWFnZSB0eXBlIGNhbGxlZCAiY29tcG91bmQiLiBJdCBhbGxvd3MgeW91Ci10byBnbHVlIHRvZ2V0aGVyIGEgYnVuY2ggb2YgYml0bWFwcywgaW1hZ2VzIGFuZCB0ZXh0IHN0cmluZ3MgdG9nZXRoZXIKLXRvIGZvcm0gYSBiaWdnZXIgaW1hZ2UuIFRoZW4geW91IGNhbiB1c2UgdGhpcyBpbWFnZSB3aXRoIHdpZGdldHMgdGhhdAotc3VwcG9ydCB0aGUgLWltYWdlIG9wdGlvbi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gZGlzcGxheSBhIHRleHQgc3RyaW5nIHN0cmluZwotdG9nZXRoZXIgd2l0aCBhIGJpdG1hcCwgYXQgdGhlIHNhbWUgdGltZSwgaW5zaWRlIGEgVEsgYnV0dG9uIHdpZGdldC4KLSIiIikKLSAgICBsaXN0LnBhY2soZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD00LCBwYWR5PTYpCi0gICAgdGV4dC5wYWNrKGV4cGFuZD0xLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIHBhZHg9NCwgcGFkeT02KQotCi0gICAgbXNnLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MywgcGFkeT0zLCBmaWxsPXRraW50ZXIudGl4LkJPVEgpCi0gICAgZ3JvdXAucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0zLCBwYWR5PTMsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICBwYW5lLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MywgcGFkeT0zLCBmaWxsPXRraW50ZXIudGl4LkJPVEgsIGV4cGFuZD0xKQotCi1kZWYgTWtOb3RlQm9vayh3KToKLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIE5vdGVCb29rIHdpZGdldCBhbGxvd3MgeW91IHRvIGxheW91dCBhIGNvbXBsZXggaW50ZXJmYWNlIGludG8gaW5kaXZpZHVhbCBwYWdlcy4nKQotICAgICMgcHJlZml4ID0gVGl4Lk9wdGlvbk5hbWUodykKLSAgICAjIGlmIG5vdCBwcmVmaXg6IHByZWZpeCA9ICcnCi0gICAgIyB3Lm9wdGlvbl9hZGQoJyonICsgcHJlZml4ICsgJypUaXhOb3RlQm9vayp0YWdQYWRYJywgOCkKLSAgICBvcHRpb25zID0gImVudHJ5LndpZHRoICVkIGxhYmVsLndpZHRoICVkIGxhYmVsLmFuY2hvciAlcyIgJSAoMTAsIDE4LCB0a2ludGVyLnRpeC5FKQotCi0gICAgbmIgPSB0a2ludGVyLnRpeC5Ob3RlQm9vayh3LCBpcGFkeD02LCBpcGFkeT02LCBvcHRpb25zPW9wdGlvbnMpCi0gICAgbmIuYWRkKCdoYXJkX2Rpc2snLCBsYWJlbD0iSGFyZCBEaXNrIiwgdW5kZXJsaW5lPTApCi0gICAgbmIuYWRkKCduZXR3b3JrJywgbGFiZWw9Ik5ldHdvcmsiLCB1bmRlcmxpbmU9MCkKLQotICAgICMgRnJhbWUgZm9yIHRoZSBidXR0b25zIHRoYXQgYXJlIHByZXNlbnQgb24gYWxsIHBhZ2VzCi0gICAgY29tbW9uID0gdGtpbnRlci50aXguRnJhbWUobmIuaGFyZF9kaXNrKQotICAgIGNvbW1vbi5wYWNrKHNpZGU9dGtpbnRlci50aXguUklHSFQsIHBhZHg9MiwgcGFkeT0yLCBmaWxsPXRraW50ZXIudGl4LlkpCi0gICAgQ3JlYXRlQ29tbW9uQnV0dG9ucyhjb21tb24pCi0KLSAgICAjIFdpZGdldHMgYmVsb25naW5nIG9ubHkgdG8gdGhpcyBwYWdlCi0gICAgYSA9IHRraW50ZXIudGl4LkNvbnRyb2wobmIuaGFyZF9kaXNrLCB2YWx1ZT0xMiwgbGFiZWw9J0FjY2VzcyBUaW1lOiAnKQotICAgIHcgPSB0a2ludGVyLnRpeC5Db250cm9sKG5iLmhhcmRfZGlzaywgdmFsdWU9NDAwLCBsYWJlbD0nV3JpdGUgVGhyb3VnaHB1dDogJykKLSAgICByID0gdGtpbnRlci50aXguQ29udHJvbChuYi5oYXJkX2Rpc2ssIHZhbHVlPTQwMCwgbGFiZWw9J1JlYWQgVGhyb3VnaHB1dDogJykKLSAgICBjID0gdGtpbnRlci50aXguQ29udHJvbChuYi5oYXJkX2Rpc2ssIHZhbHVlPTEwMjEsIGxhYmVsPSdDYXBhY2l0eTogJykKLSAgICBhLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MjAsIHBhZHk9MikKLSAgICB3LnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MjAsIHBhZHk9MikKLSAgICByLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MjAsIHBhZHk9MikKLSAgICBjLnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MjAsIHBhZHk9MikKLQotICAgIGNvbW1vbiA9IHRraW50ZXIudGl4LkZyYW1lKG5iLm5ldHdvcmspCi0gICAgY29tbW9uLnBhY2soc2lkZT10a2ludGVyLnRpeC5SSUdIVCwgcGFkeD0yLCBwYWR5PTIsIGZpbGw9dGtpbnRlci50aXguWSkKLSAgICBDcmVhdGVDb21tb25CdXR0b25zKGNvbW1vbikKLQotICAgIGEgPSB0a2ludGVyLnRpeC5Db250cm9sKG5iLm5ldHdvcmssIHZhbHVlPTEyLCBsYWJlbD0nQWNjZXNzIFRpbWU6ICcpCi0gICAgdyA9IHRraW50ZXIudGl4LkNvbnRyb2wobmIubmV0d29yaywgdmFsdWU9NDAwLCBsYWJlbD0nV3JpdGUgVGhyb3VnaHB1dDogJykKLSAgICByID0gdGtpbnRlci50aXguQ29udHJvbChuYi5uZXR3b3JrLCB2YWx1ZT00MDAsIGxhYmVsPSdSZWFkIFRocm91Z2hwdXQ6ICcpCi0gICAgYyA9IHRraW50ZXIudGl4LkNvbnRyb2wobmIubmV0d29yaywgdmFsdWU9MTAyMSwgbGFiZWw9J0NhcGFjaXR5OiAnKQotICAgIHUgPSB0a2ludGVyLnRpeC5Db250cm9sKG5iLm5ldHdvcmssIHZhbHVlPTEwLCBsYWJlbD0nVXNlcnM6ICcpCi0gICAgYS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgdy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgci5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgYy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0gICAgdS5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIwLCBwYWR5PTIpCi0KLSAgICBtc2cucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0zLCBwYWR5PTMsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICBuYi5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBleHBhbmQ9MSkKLQotZGVmIENyZWF0ZUNvbW1vbkJ1dHRvbnMoZik6Ci0gICAgb2sgPSB0a2ludGVyLnRpeC5CdXR0b24oZiwgdGV4dD0nT0snLCB3aWR0aCA9IDYpCi0gICAgY2FuY2VsID0gdGtpbnRlci50aXguQnV0dG9uKGYsIHRleHQ9J0NhbmNlbCcsIHdpZHRoID0gNikKLSAgICBvay5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBwYWR4PTIsIHBhZHk9MikKLSAgICBjYW5jZWwucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0yLCBwYWR5PTIpCi0KLWRlZiBNa0Rpckxpc3QobmIsIG5hbWUpOgotICAgIHcgPSBuYi5wYWdlKG5hbWUpCi0gICAgb3B0aW9ucyA9ICJsYWJlbC5wYWRYIDQiCi0KLSAgICBkaXIgPSB0a2ludGVyLnRpeC5MYWJlbEZyYW1lKHcsIGxhYmVsPSdUaXguRGlyTGlzdCcsIG9wdGlvbnM9b3B0aW9ucykKLSAgICBmc2JveCA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUodywgbGFiZWw9J1RpeC5FeEZpbGVTZWxlY3RCb3gnLCBvcHRpb25zPW9wdGlvbnMpCi0gICAgTWtEaXJMaXN0V2lkZ2V0KGRpci5mcmFtZSkKLSAgICBNa0V4RmlsZVdpZGdldChmc2JveC5mcmFtZSkKLSAgICBkaXIuZm9ybSh0b3A9MCwgbGVmdD0wLCByaWdodD0nJTQwJywgYm90dG9tPS0xKQotICAgIGZzYm94LmZvcm0odG9wPTAsIGxlZnQ9JyU0MCcsIHJpZ2h0PS0xLCBib3R0b209LTEpCi0KLWRlZiBNa0Rpckxpc3RXaWRnZXQodyk6Ci0gICAgIiIiVGhlIFRpeERpckxpc3Qgd2lkZ2V0IGdpdmVzIGEgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaWxlCi0gICAgc3lzdGVtIGRpcmVjdG9yeSBhbmQgbWFrZXMgaXQgZWFzeSBmb3IgdGhlIHVzZXIgdG8gY2hvb3NlIGFuZCBhY2Nlc3MKLSAgICBkaXJlY3Rvcmllcy4KLSAgICAiIiIKLSAgICBtc2cgPSB0a2ludGVyLnRpeC5NZXNzYWdlKHcsCi0gICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LkZMQVQsIHdpZHRoPTI0MCwgYW5jaG9yPXRraW50ZXIudGl4Lk4sCi0gICAgICAgICAgICAgICAgICAgICAgdGV4dD0nVGhlIFRpeCBEaXJMaXN0IHdpZGdldCBnaXZlcyBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlsZSBzeXN0ZW0gZGlyZWN0b3J5IGFuZCBtYWtlcyBpdCBlYXN5IGZvciB0aGUgdXNlciB0byBjaG9vc2UgYW5kIGFjY2VzcyBkaXJlY3Rvcmllcy4nKQotICAgIGRpcmxpc3QgPSB0a2ludGVyLnRpeC5EaXJMaXN0KHcsIG9wdGlvbnM9J2hsaXN0LnBhZFkgMSBobGlzdC53aWR0aCAyNSBobGlzdC5oZWlnaHQgMTYnKQotICAgIG1zZy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTMsIHBhZHk9MykKLSAgICBkaXJsaXN0LnBhY2soc2lkZT10a2ludGVyLnRpeC5UT1AsIHBhZHg9MywgcGFkeT0zKQotCi1kZWYgTWtFeEZpbGVXaWRnZXQodyk6Ci0gICAgIiIiVGhlIFRpeEV4RmlsZVNlbGVjdEJveCB3aWRnZXQgaXMgbW9yZSB1c2VyIGZyaWVuZGx5IHRoYW4gdGhlIE1vdGlmCi0gICAgc3R5bGUgRmlsZVNlbGVjdEJveC4gICIiIgotICAgIG1zZyA9IHRraW50ZXIudGl4Lk1lc3NhZ2UodywKLSAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9dGtpbnRlci50aXguRkxBVCwgd2lkdGg9MjQwLCBhbmNob3I9dGtpbnRlci50aXguTiwKLSAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdUaGUgVGl4IEV4RmlsZVNlbGVjdEJveCB3aWRnZXQgaXMgbW9yZSB1c2VyIGZyaWVuZGx5IHRoYW4gdGhlIE1vdGlmIHN0eWxlIEZpbGVTZWxlY3RCb3guJykKLSAgICAjIFRoZXJlJ3MgYSBidWcgaW4gdGhlIENvbWJvQm94ZXMgLSB0aGUgc2Nyb2xsZWRsaXN0Ym94IGlzIGRlc3Ryb3llZAotICAgIGJveCA9IHRraW50ZXIudGl4LkV4RmlsZVNlbGVjdEJveCh3LCBiZD0yLCByZWxpZWY9dGtpbnRlci50aXguUkFJU0VEKQotICAgIG1zZy5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTMsIHBhZHk9MykKLSAgICBib3gucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgcGFkeD0zLCBwYWR5PTMpCi0KLSMjIwotIyMjIExpc3Qgb2YgYWxsIHRoZSBkZW1vcyB3ZSB3YW50IHRvIHNob3cgb2ZmCi1jb21tZW50cyA9IHsnd2lkZ2V0JyA6ICdXaWRnZXQgRGVtb3MnLCAnaW1hZ2UnIDogJ0ltYWdlIERlbW9zJ30KLXNhbXBsZXMgPSB7J0JhbGxvb24nICAgICAgICAgICAgOiAnQmFsbG9vbicsCi0gICAgICAgICAgICdCdXR0b24gQm94JyAgICAgICAgIDogJ0J0bkJveCcsCi0gICAgICAgICAgICdDb21ibyBCb3gnICAgICAgICAgIDogJ0NvbWJvQm94JywKLSAgICAgICAgICAgJ0NvbXBvdW5kIEltYWdlJyAgICAgOiAnQ21wSW1nJywKLSAgICAgICAgICAgJ0RpcmVjdG9yeSBMaXN0JyAgICAgOiAnRGlyTGlzdCcsCi0gICAgICAgICAgICdEaXJlY3RvcnkgVHJlZScgICAgIDogJ0RpclRyZWUnLAotICAgICAgICAgICAnQ29udHJvbCcgICAgICAgICAgICA6ICdDb250cm9sJywKLSAgICAgICAgICAgJ05vdGVib29rJyAgICAgICAgICAgOiAnTm90ZUJvb2snLAotICAgICAgICAgICAnT3B0aW9uIE1lbnUnICAgICAgICA6ICdPcHRNZW51JywKLSAgICAgICAgICAgJ1BhbmVkIFdpbmRvdycgICAgICAgOiAnUGFuZWRXaW4nLAotICAgICAgICAgICAnUG9wdXAgTWVudScgICAgICAgICA6ICdQb3BNZW51JywKLSAgICAgICAgICAgJ1Njcm9sbGVkSExpc3QgKDEpJyAgOiAnU0hMaXN0MScsCi0gICAgICAgICAgICdTY3JvbGxlZEhMaXN0ICgyKScgIDogJ1NITGlzdDInLAotICAgICAgICAgICAnVHJlZSAoZHluYW1pYyknICAgICA6ICdUcmVlJwotfQotCi0jIFRoZXJlIGFyZSBzdGlsbCBhIGxvdCBvZiBkZW1vcyB0byBiZSB0cmFuc2xhdGVkOgotIyMgICAgICBzZXQgcm9vdCB7Ci0jIyAgICAgICAgICB7ZCAiRmlsZSBTZWxlY3RvcnMiICAgICAgICAgZmlsZSAgICB9Ci0jIyAgICAgICAgICB7ZCAiSGllcmFjaGljYWwgTGlzdEJveCIgICAgaGxpc3QgICB9Ci0jIyAgICAgICAgICB7ZCAiVGFidWxhciBMaXN0Qm94IiAgICAgICAgdGxpc3QgICB7YyB0aXhUTGlzdH19Ci0jIyAgICAgICAgICB7ZCAiR3JpZCBXaWRnZXQiICAgICAgICAgICAgZ3JpZCAgICB7YyB0aXhHcmlkfX0KLSMjICAgICAgICAgIHtkICJNYW5hZ2VyIFdpZGdldHMiICAgICAgICBtYW5hZ2VyIH0KLSMjICAgICAgICAgIHtkICJTY3JvbGxlZCBXaWRnZXRzIiAgICAgICBzY3JvbGwgIH0KLSMjICAgICAgICAgIHtkICJNaXNjZWxsYW5lb3VzIFdpZGdldHMiICBtaXNjICAgIH0KLSMjICAgICAgICAgIHtkICJJbWFnZSBUeXBlcyIgICAgICAgICAgICBpbWFnZSAgIH0KLSMjICAgICAgfQotIyMKLSMjICAgICAgc2V0IGltYWdlIHsKLSMjICAgICAgICAgIHtkICJDb21wb3VuZCBJbWFnZSIgICAgICAgICBjbXBpbWcgIH0KLSMjICAgICAgICAgIHtkICJYUE0gSW1hZ2UiICAgICAgICAgICAgICB4cG0gICAgIHtpIHBpeG1hcH19Ci0jIyAgICAgIH0KLSMjCi0jIyAgICAgIHNldCBjbXBpbWcgewotIyNkb25lICAgICAge2YgIkluIEJ1dHRvbnMiICAgICAgICAgICAgIENtcEltZy50Y2wgICAgICB9Ci0jIyAgICAgICAgICB7ZiAiSW4gTm90ZUJvb2siICAgICAgICAgICAgQ21wSW1nMi50Y2wgICAgIH0KLSMjICAgICAgICAgIHtmICJOb3RlYm9vayBDb2xvciBUYWJzIiAgICBDbXBJbWc0LnRjbCAgICAgfQotIyMgICAgICAgICAge2YgIkljb25zIiAgICAgICAgICAgICAgICAgIENtcEltZzMudGNsICAgICB9Ci0jIyAgICAgIH0KLSMjCi0jIyAgICAgIHNldCB4cG0gewotIyMgICAgICAgICAge2YgIkluIEJ1dHRvbiIgICAgICAgICAgICAgIFhwbS50Y2wgICAgICAgICB7aSBwaXhtYXB9fQotIyMgICAgICAgICAge2YgIkluIE1lbnUiICAgICAgICAgICAgICAgIFhwbTEudGNsICAgICAgICB7aSBwaXhtYXB9fQotIyMgICAgICB9Ci0jIwotIyMgICAgICBzZXQgZmlsZSB7Ci0jI2FkZGVkICAgICB7ZiBEaXJMaXN0ICAgICAgICAgICAgICAgICAgICAgICAgICBEaXJMaXN0LnRjbCAgICAgfQotIyNhZGRlZCAgICAge2YgRGlyVHJlZSAgICAgICAgICAgICAgICAgICAgICAgICAgRGlyVHJlZS50Y2wgICAgIH0KLSMjICAgICAgICAgIHtmIERpclNlbGVjdERpYWxvZyAgICAgICAgICAgICAgICAgIERpckRsZy50Y2wgICAgICB9Ci0jIyAgICAgICAgICB7ZiBFeEZpbGVTZWxlY3REaWFsb2cgICAgICAgICAgICAgICBFRmlsZURsZy50Y2wgICAgfQotIyMgICAgICAgICAge2YgRmlsZVNlbGVjdERpYWxvZyAgICAgICAgICAgICAgICAgRmlsZURsZy50Y2wgICAgIH0KLSMjICAgICAgICAgIHtmIEZpbGVFbnRyeSAgICAgICAgICAgICAgICAgICAgICAgIEZpbGVFbnQudGNsICAgICB9Ci0jIyAgICAgIH0KLSMjCi0jIyAgICAgIHNldCBobGlzdCB7Ci0jIyAgICAgICAgICB7ZiBITGlzdCAgICAgICAgICAgICAgICAgICAgSExpc3QxLnRjbCAgICAgIH0KLSMjICAgICAgICAgIHtmIENoZWNrTGlzdCAgICAgICAgICAgICAgICBDaGtMaXN0LnRjbCAgICAge2MgdGl4Q2hlY2tMaXN0fX0KLSMjZG9uZSAgICAgIHtmICJTY3JvbGxlZEhMaXN0ICgxKSIgICAgICBTSExpc3QudGNsICAgICAgfQotIyNkb25lICAgICAge2YgIlNjcm9sbGVkSExpc3QgKDIpIiAgICAgIFNITGlzdDIudGNsICAgICB9Ci0jI2RvbmUgICAgICB7ZiBUcmVlICAgICAgICAgICAgICAgICAgICAgVHJlZS50Y2wgICAgICAgIH0KLSMjZG9uZSAgICAgIHtmICJUcmVlIChEeW5hbWljKSIgICAgICAgICBEeW5UcmVlLnRjbCAgICAge3Ygd2lufX0KLSMjICAgICAgfQotIyMKLSMjICAgICAgc2V0IHRsaXN0IHsKLSMjICAgICAgICAgIHtmICJTY3JvbGxlZFRMaXN0ICgxKSIgICAgICBTVExpc3QxLnRjbCAgICAge2MgdGl4VExpc3R9fQotIyMgICAgICAgICAge2YgIlNjcm9sbGVkVExpc3QgKDIpIiAgICAgIFNUTGlzdDIudGNsICAgICB7YyB0aXhUTGlzdH19Ci0jIyAgICAgIH0KLSMjICAgICAgZ2xvYmFsIHRjbF9wbGF0Zm9ybQotIyMgICAgICAjICBUaGlzIGRlbW8gaGFuZ3Mgd2luZG93cwotIyMgICAgICBpZiB7JHRjbF9wbGF0Zm9ybShwbGF0Zm9ybSkgIT0gIndpbmRvd3MifSB7Ci0jI25hICAgIGxhcHBlbmQgdGxpc3QgICAgIHtmICJUTGlzdCBGaWxlIFZpZXdlciIgICAgICAgIFNUTGlzdDMudGNsICAgICB7YyB0aXhUTGlzdH19Ci0jIyAgICAgIH0KLSMjCi0jIyAgICAgIHNldCBncmlkIHsKLSMjbmEgICAgICAgIHtmICJTaW1wbGUgR3JpZCIgICAgICAgICAgICBTR3JpZDAudGNsICAgICAge2MgdGl4R3JpZH19Ci0jI25hICAgICAgICB7ZiAiU2Nyb2xsZWRHcmlkIiAgICAgICAgICAgU0dyaWQxLnRjbCAgICAgIHtjIHRpeEdyaWR9fQotIyNuYSAgICAgICAge2YgIkVkaXRhYmxlIEdyaWQiICAgICAgICAgIEVkaXRHcmlkLnRjbCAgICB7YyB0aXhHcmlkfX0KLSMjICAgICAgfQotIyMKLSMjICAgICAgc2V0IHNjcm9sbCB7Ci0jIyAgICAgICAgICB7ZiBTY3JvbGxlZExpc3RCb3ggICAgICAgICAgU0xpc3RCb3gudGNsICAgIH0KLSMjICAgICAgICAgIHtmIFNjcm9sbGVkVGV4dCAgICAgICAgICAgICBTVGV4dC50Y2wgICAgICAgfQotIyMgICAgICAgICAge2YgU2Nyb2xsZWRXaW5kb3cgICAgICAgICAgIFNXaW5kb3cudGNsICAgICB9Ci0jI25hICAgICAgICB7ZiAiQ2FudmFzIE9iamVjdCBWaWV3IiAgICAgQ09ialZpZXcudGNsICAgIHtjIHRpeENPYmpWaWV3fX0KLSMjICAgICAgfQotIyMKLSMjICAgICAgc2V0IG1hbmFnZXIgewotIyMgICAgICAgICAge2YgTGlzdE5vdGVCb29rICAgICAgICAgICAgIExpc3ROQksudGNsICAgICB9Ci0jI2RvbmUgICAgICB7ZiBOb3RlQm9vayAgICAgICAgICAgICAgICAgTm90ZUJvb2sudGNsICAgIH0KLSMjZG9uZSAgICAgIHtmIFBhbmVkV2luZG93ICAgICAgICAgICAgICBQYW5lZFdpbi50Y2wgICAgfQotIyMgICAgICB9Ci0jIwotIyMgICAgICBzZXQgbWlzYyB7Ci0jI2RvbmUgICAgICB7ZiBCYWxsb29uICAgICAgICAgICAgICAgICAgQmFsbG9vbi50Y2wgICAgIH0KLSMjZG9uZSAgICAgIHtmIEJ1dHRvbkJveCAgICAgICAgICAgICAgICBCdG5Cb3gudGNsICAgICAgfQotIyNkb25lICAgICAge2YgQ29tYm9Cb3ggICAgICAgICAgICAgICAgIENvbWJvQm94LnRjbCAgICB9Ci0jI2RvbmUgICAgICB7ZiBDb250cm9sICAgICAgICAgICAgICAgICAgQ29udHJvbC50Y2wgICAgIH0KLSMjICAgICAgICAgIHtmIExhYmVsRW50cnkgICAgICAgICAgICAgICBMYWJFbnRyeS50Y2wgICAgfQotIyMgICAgICAgICAge2YgTGFiZWxGcmFtZSAgICAgICAgICAgICAgIExhYkZyYW1lLnRjbCAgICB9Ci0jIyAgICAgICAgICB7ZiBNZXRlciAgICAgICAgICAgICAgICAgICAgTWV0ZXIudGNsICAgICAgIHtjIHRpeE1ldGVyfX0KLSMjZG9uZSAgICAgIHtmIE9wdGlvbk1lbnUgICAgICAgICAgICAgICBPcHRNZW51LnRjbCAgICAgfQotIyNkb25lICAgICAge2YgUG9wdXBNZW51ICAgICAgICAgICAgICAgIFBvcE1lbnUudGNsICAgICB9Ci0jIyAgICAgICAgICB7ZiBTZWxlY3QgICAgICAgICAgICAgICAgICAgU2VsZWN0LnRjbCAgICAgIH0KLSMjICAgICAgICAgIHtmIFN0ZEJ1dHRvbkJveCAgICAgICAgICAgICBTdGRCQm94LnRjbCAgICAgfQotIyMgICAgICB9Ci0jIwotCi1zdHlwZXMgPSB7fQotc3R5cGVzWyd3aWRnZXQnXSA9IFsnQmFsbG9vbicsICdCdXR0b24gQm94JywgJ0NvbWJvIEJveCcsICdDb250cm9sJywKLSAgICAgICAgICAgICAgICAgICAgJ0RpcmVjdG9yeSBMaXN0JywgJ0RpcmVjdG9yeSBUcmVlJywKLSAgICAgICAgICAgICAgICAgICAgJ05vdGVib29rJywgJ09wdGlvbiBNZW51JywgJ1BvcHVwIE1lbnUnLCAnUGFuZWQgV2luZG93JywKLSAgICAgICAgICAgICAgICAgICAgJ1Njcm9sbGVkSExpc3QgKDEpJywgJ1Njcm9sbGVkSExpc3QgKDIpJywgJ1RyZWUgKGR5bmFtaWMpJ10KLXN0eXBlc1snaW1hZ2UnXSA9IFsnQ29tcG91bmQgSW1hZ2UnXQotCi1kZWYgTWtTYW1wbGUobmIsIG5hbWUpOgotICAgIHcgPSBuYi5wYWdlKG5hbWUpCi0gICAgb3B0aW9ucyA9ICJsYWJlbC5wYWRYIDQiCi0KLSAgICBwYW5lID0gdGtpbnRlci50aXguUGFuZWRXaW5kb3codywgb3JpZW50YXRpb249J2hvcml6b250YWwnKQotICAgIHBhbmUucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCkKLSAgICBmMSA9IHBhbmUuYWRkKCdsaXN0JywgZXhwYW5kPScxJykKLSAgICBmMiA9IHBhbmUuYWRkKCd0ZXh0JywgZXhwYW5kPSc1JykKLSAgICBmMVsncmVsaWVmJ10gPSAnZmxhdCcKLSAgICBmMlsncmVsaWVmJ10gPSAnZmxhdCcKLQotICAgIGxhYiA9IHRraW50ZXIudGl4LkxhYmVsRnJhbWUoZjEsIGxhYmVsPSdTZWxlY3QgYSBzYW1wbGUgcHJvZ3JhbTonKQotICAgIGxhYi5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTUsIHBhZHk9NSkKLSAgICBsYWIxID0gdGtpbnRlci50aXguTGFiZWxGcmFtZShmMiwgbGFiZWw9J1NvdXJjZTonKQotICAgIGxhYjEucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTEsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD01LCBwYWR5PTUpCi0KLSAgICBzbGIgPSB0a2ludGVyLnRpeC5UcmVlKGxhYi5mcmFtZSwgb3B0aW9ucz0naGxpc3Qud2lkdGggMjAnKQotICAgIHNsYi5wYWNrKHNpZGU9dGtpbnRlci50aXguVE9QLCBleHBhbmQ9MSwgZmlsbD10a2ludGVyLnRpeC5CT1RILCBwYWR4PTUpCi0KLSAgICBzdGV4dCA9IHRraW50ZXIudGl4LlNjcm9sbGVkVGV4dChsYWIxLmZyYW1lLCBuYW1lPSdzdGV4dCcpCi0gICAgZm9udCA9IHJvb3QudGsuZXZhbCgndGl4IG9wdGlvbiBnZXQgZml4ZWRfZm9udCcpCi0gICAgc3RleHQudGV4dC5jb25maWcoZm9udD1mb250KQotCi0gICAgZnJhbWUgPSB0a2ludGVyLnRpeC5GcmFtZShsYWIxLmZyYW1lLCBuYW1lPSdmcmFtZScpCi0KLSAgICBydW4gPSB0a2ludGVyLnRpeC5CdXR0b24oZnJhbWUsIHRleHQ9J1J1biAuLi4nLCBuYW1lPSdydW4nKQotICAgIHZpZXcgPSB0a2ludGVyLnRpeC5CdXR0b24oZnJhbWUsIHRleHQ9J1ZpZXcgU291cmNlIC4uLicsIG5hbWU9J3ZpZXcnKQotICAgIHJ1bi5wYWNrKHNpZGU9dGtpbnRlci50aXguTEVGVCwgZXhwYW5kPTAsIGZpbGw9dGtpbnRlci50aXguTk9ORSkKLSAgICB2aWV3LnBhY2soc2lkZT10a2ludGVyLnRpeC5MRUZULCBleHBhbmQ9MCwgZmlsbD10a2ludGVyLnRpeC5OT05FKQotCi0gICAgc3RleHQudGV4dFsnYmcnXSA9IHNsYi5obGlzdFsnYmcnXQotICAgIHN0ZXh0LnRleHRbJ3N0YXRlJ10gPSAnZGlzYWJsZWQnCi0gICAgc3RleHQudGV4dFsnd3JhcCddID0gJ25vbmUnCi0gICAgc3RleHQudGV4dFsnd2lkdGgnXSA9IDgwCi0KLSAgICBmcmFtZS5wYWNrKHNpZGU9dGtpbnRlci50aXguQk9UVE9NLCBleHBhbmQ9MCwgZmlsbD10a2ludGVyLnRpeC5YLCBwYWR4PTcpCi0gICAgc3RleHQucGFjayhzaWRlPXRraW50ZXIudGl4LlRPUCwgZXhwYW5kPTAsIGZpbGw9dGtpbnRlci50aXguQk9USCwgcGFkeD03KQotCi0gICAgc2xiLmhsaXN0WydzZXBhcmF0b3InXSA9ICcuJwotICAgIHNsYi5obGlzdFsnd2lkdGgnXSA9IDI1Ci0gICAgc2xiLmhsaXN0WydkcmF3YnJhbmNoJ10gPSAwCi0gICAgc2xiLmhsaXN0WydpbmRlbnQnXSA9IDEwCi0gICAgc2xiLmhsaXN0Wyd3aWRlc2VsZWN0J10gPSAxCi0gICAgc2xiLmhsaXN0Wydjb21tYW5kJ10gPSBsYW1iZGEgYXJncz0wLCB3PXcsc2xiPXNsYixzdGV4dD1zdGV4dCxydW49cnVuLHZpZXc9dmlldzogU2FtcGxlX0FjdGlvbih3LCBzbGIsIHN0ZXh0LCBydW4sIHZpZXcsICdydW4nKQotICAgIHNsYi5obGlzdFsnYnJvd3NlY21kJ10gPSBsYW1iZGEgYXJncz0wLCB3PXcsc2xiPXNsYixzdGV4dD1zdGV4dCxydW49cnVuLHZpZXc9dmlldzogU2FtcGxlX0FjdGlvbih3LCBzbGIsIHN0ZXh0LCBydW4sIHZpZXcsICdicm93c2UnKQotCi0gICAgcnVuWydjb21tYW5kJ10gICAgICA9IGxhbWJkYSBhcmdzPTAsIHc9dyxzbGI9c2xiLHN0ZXh0PXN0ZXh0LHJ1bj1ydW4sdmlldz12aWV3OiBTYW1wbGVfQWN0aW9uKHcsIHNsYiwgc3RleHQsIHJ1biwgdmlldywgJ3J1bicpCi0gICAgdmlld1snY29tbWFuZCddID0gbGFtYmRhIGFyZ3M9MCwgdz13LHNsYj1zbGIsc3RleHQ9c3RleHQscnVuPXJ1bix2aWV3PXZpZXc6IFNhbXBsZV9BY3Rpb24odywgc2xiLCBzdGV4dCwgcnVuLCB2aWV3LCAndmlldycpCi0KLSAgICBmb3IgdHlwZSBpbiBbJ3dpZGdldCcsICdpbWFnZSddOgotICAgICAgICBpZiB0eXBlICE9ICd3aWRnZXQnOgotICAgICAgICAgICAgeCA9IHRraW50ZXIudGl4LkZyYW1lKHNsYi5obGlzdCwgYmQ9MiwgaGVpZ2h0PTIsIHdpZHRoPTE1MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPXRraW50ZXIudGl4LlNVTktFTiwgYmc9c2xiLmhsaXN0WydiZyddKQotICAgICAgICAgICAgc2xiLmhsaXN0LmFkZF9jaGlsZChpdGVtdHlwZT10a2ludGVyLnRpeC5XSU5ET1csIHdpbmRvdz14LCBzdGF0ZT0nZGlzYWJsZWQnKQotICAgICAgICB4ID0gc2xiLmhsaXN0LmFkZF9jaGlsZChpdGVtdHlwZT10a2ludGVyLnRpeC5URVhULCBzdGF0ZT0nZGlzYWJsZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PWNvbW1lbnRzW3R5cGVdKQotICAgICAgICBmb3Iga2V5IGluIHN0eXBlc1t0eXBlXToKLSAgICAgICAgICAgIHNsYi5obGlzdC5hZGRfY2hpbGQoeCwgaXRlbXR5cGU9dGtpbnRlci50aXguVEVYVCwgZGF0YT1rZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9a2V5KQotICAgIHNsYi5obGlzdC5zZWxlY3Rpb25fY2xlYXIoKQotCi0gICAgcnVuWydzdGF0ZSddID0gJ2Rpc2FibGVkJwotICAgIHZpZXdbJ3N0YXRlJ10gPSAnZGlzYWJsZWQnCi0KLWRlZiBTYW1wbGVfQWN0aW9uKHcsIHNsYiwgc3RleHQsIHJ1biwgdmlldywgYWN0aW9uKToKLSAgICBnbG9iYWwgZGVtbwotCi0gICAgaGxpc3QgPSBzbGIuaGxpc3QKLSAgICBhbmNob3IgPSBobGlzdC5pbmZvX2FuY2hvcigpCi0gICAgaWYgbm90IGFuY2hvcjoKLSAgICAgICAgcnVuWydzdGF0ZSddID0gJ2Rpc2FibGVkJwotICAgICAgICB2aWV3WydzdGF0ZSddID0gJ2Rpc2FibGVkJwotICAgIGVsaWYgbm90IGhsaXN0LmluZm9fcGFyZW50KGFuY2hvcik6Ci0gICAgICAgICMgYSBjb21tZW50Ci0gICAgICAgIHJldHVybgotCi0gICAgcnVuWydzdGF0ZSddID0gJ25vcm1hbCcKLSAgICB2aWV3WydzdGF0ZSddID0gJ25vcm1hbCcKLSAgICBrZXkgPSBobGlzdC5pbmZvX2RhdGEoYW5jaG9yKQotICAgIHRpdGxlID0ga2V5Ci0gICAgcHJvZyA9IHNhbXBsZXNba2V5XQotCi0gICAgaWYgYWN0aW9uID09ICdydW4nOgotICAgICAgICBleGVjKCdpbXBvcnQgJyArIHByb2cpCi0gICAgICAgIHcgPSB0a2ludGVyLnRpeC5Ub3BsZXZlbCgpCi0gICAgICAgIHcudGl0bGUodGl0bGUpCi0gICAgICAgIHJ0biA9IGV2YWwocHJvZyArICcuUnVuU2FtcGxlJykKLSAgICAgICAgcnRuKHcpCi0gICAgZWxpZiBhY3Rpb24gPT0gJ3ZpZXcnOgotICAgICAgICB3ID0gdGtpbnRlci50aXguVG9wbGV2ZWwoKQotICAgICAgICB3LnRpdGxlKCdTb3VyY2UgdmlldzogJyArIHRpdGxlKQotICAgICAgICBMb2FkRmlsZSh3LCBkZW1vLmRpciArICcvc2FtcGxlcy8nICsgcHJvZyArICcucHknKQotICAgIGVsaWYgYWN0aW9uID09ICdicm93c2UnOgotICAgICAgICBSZWFkRmlsZShzdGV4dC50ZXh0LCBkZW1vLmRpciArICcvc2FtcGxlcy8nICsgcHJvZyArICcucHknKQotCi1kZWYgTG9hZEZpbGUodywgZm5hbWUpOgotICAgIGdsb2JhbCByb290Ci0gICAgYiA9IHRraW50ZXIudGl4LkJ1dHRvbih3LCB0ZXh0PSdDbG9zZScsIGNvbW1hbmQ9dy5kZXN0cm95KQotICAgIHQgPSB0a2ludGVyLnRpeC5TY3JvbGxlZFRleHQodykKLSAgICAjICAgIGIuZm9ybShsZWZ0PTAsIGJvdHRvbT0wLCBwYWR4PTQsIHBhZHk9NCkKLSAgICAjICAgIHQuZm9ybShsZWZ0PTAsIGJvdHRvbT1iLCByaWdodD0nLTAnLCB0b3A9MCkKLSAgICB0LnBhY2soKQotICAgIGIucGFjaygpCi0KLSAgICBmb250ID0gcm9vdC50ay5ldmFsKCd0aXggb3B0aW9uIGdldCBmaXhlZF9mb250JykKLSAgICB0LnRleHQuY29uZmlnKGZvbnQ9Zm9udCkKLSAgICB0LnRleHRbJ2JkJ10gPSAyCi0gICAgdC50ZXh0Wyd3cmFwJ10gPSAnbm9uZScKLQotICAgIFJlYWRGaWxlKHQudGV4dCwgZm5hbWUpCi0KLWRlZiBSZWFkRmlsZSh3LCBmbmFtZSk6Ci0gICAgb2xkX3N0YXRlID0gd1snc3RhdGUnXQotICAgIHdbJ3N0YXRlJ10gPSAnbm9ybWFsJwotICAgIHcuZGVsZXRlKCcwLjAnLCB0a2ludGVyLnRpeC5FTkQpCi0KLSAgICB0cnk6Ci0gICAgICAgIGYgPSBvcGVuKGZuYW1lKQotICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKLSAgICAgICAgZm9yIHMgaW4gbGluZXM6Ci0gICAgICAgICAgICB3Lmluc2VydCh0a2ludGVyLnRpeC5FTkQsIHMpCi0gICAgICAgIGYuY2xvc2UoKQotICAgIGZpbmFsbHk6Ci0jICAgICAgIHcuc2VlKCcxLjAnKQotICAgICAgICB3WydzdGF0ZSddID0gb2xkX3N0YXRlCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgcm9vdCA9IHRraW50ZXIudGl4LlRrKCkKLSAgICBSdW5NYWluKHJvb3QpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvUkVBRE1FIGIvRGVtby90a2ludGVyL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzlmMThkZi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotU2V2ZXJhbCBjb2xsZWN0aW9ucyBvZiBleGFtcGxlIGNvZGUgZm9yIFRraW50ZXIuCi0KLVNlZSB0aGUgdG9wbGV2ZWwgUkVBRE1FIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuCi1Ua2ludGVyIGFuZCBfdGtpbnRlciwgaG93IHRvIGVuYWJsZSB0aGUgUHl0aG9uIFRrIGludGVyZmFjZSwgYW5kIHdoZXJlCi10byBnZXQgTWF0dCBDb253YXkncyBsaWZlc2F2ZXIgZG9jdW1lbnQuCi0KLVN1YmRpcmVjdG9yaWVzOgotCi1ndWlkbwkJbXkgb3JpZ2luYWwgZXhhbXBsZSBzZXQgKGZhaXJseSByYW5kb20gY29sbGVjdGlvbikKLW1hdHQJCU1hdHQgQ29ud2F5J3MgZXhhbXBsZXMsIHRvIGdvIHdpdGggaGlzIGxpZmVzYXZlciBkb2N1bWVudAotdHRrICAgICAgICAgRXhhbXBsZXMgdXNpbmcgdGhlIHR0ayBtb2R1bGUKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9hdHRyX2RpYWxvZy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9hdHRyX2RpYWxvZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI5YTU1OC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vYXR0cl9kaWFsb2cucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotCi0jIFRoZSBvcHRpb25zIG9mIGEgd2lkZ2V0IGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzCi0jIG9mIHRoZSBQYWNrIGFuZCBXaWRnZXQgZGlhbG9nczoKLSMKLSMgRGlhbG9nLmN1cnJlbnQ6IHtuYW1lOiB2YWx1ZX0KLSMgLS0gY2hhbmdlcyBkdXJpbmcgV2lkZ2V0J3MgbGlmZXRpbWUKLSMKLSMgRGlhbG9nLm9wdGlvbnM6IHtuYW1lOiAoZGVmYXVsdCwga2xhc3MpfQotIyAtLSBkZXBlbmRzIG9uIHdpZGdldCBjbGFzcyBvbmx5Ci0jCi0jIERpYWxvZy5jbGFzc2VzOiB7a2xhc3M6ICh2MCwgdjEsIHYyLCAuLi4pIHwgJ2Jvb2xlYW4nIHwgJ290aGVyJ30KLSMgLS0gdG90YWxseSBzdGF0aWMsIHRob3VnaCBkaWZmZXJlbnQgYmV0d2VlbiBQYWNrRGlhbG9nIGFuZCBXaWRnZXREaWFsb2cKLSMgICAgKGJ1dCBldmVuIHRoYXQgY291bGQgYmUgdW5pZmllZCkKLQotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLQotY2xhc3MgT3B0aW9uOgotCi0gICAgdmFyY2xhc3MgPSBTdHJpbmdWYXIgICAgICAgICAgICAjIE1heSBiZSBvdmVycmlkZGVuCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGlhbG9nLCBvcHRpb24pOgotICAgICAgICBzZWxmLmRpYWxvZyA9IGRpYWxvZwotICAgICAgICBzZWxmLm9wdGlvbiA9IG9wdGlvbgotICAgICAgICBzZWxmLm1hc3RlciA9IGRpYWxvZy50b3AKLSAgICAgICAgc2VsZi5kZWZhdWx0LCBzZWxmLmtsYXNzID0gZGlhbG9nLm9wdGlvbnNbb3B0aW9uXQotICAgICAgICBzZWxmLnZhciA9IHNlbGYudmFyY2xhc3Moc2VsZi5tYXN0ZXIpCi0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShzZWxmLm1hc3RlcikKLSAgICAgICAgc2VsZi5mcmFtZS5wYWNrKGZpbGw9WCkKLSAgICAgICAgc2VsZi5sYWJlbCA9IExhYmVsKHNlbGYuZnJhbWUsIHRleHQ9KG9wdGlvbiArICI6IikpCi0gICAgICAgIHNlbGYubGFiZWwucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYudXBkYXRlKCkKLSAgICAgICAgc2VsZi5hZGRvcHRpb24oKQotCi0gICAgZGVmIHJlZnJlc2goc2VsZik6Ci0gICAgICAgIHNlbGYuZGlhbG9nLnJlZnJlc2goKQotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0KLSAgICBkZWYgdXBkYXRlKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmLmRpYWxvZy5jdXJyZW50W3NlbGYub3B0aW9uXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmN1cnJlbnQgPSBzZWxmLmRlZmF1bHQKLSAgICAgICAgc2VsZi52YXIuc2V0KHNlbGYuY3VycmVudCkKLQotICAgIGRlZiBzZXQoc2VsZiwgZT1Ob25lKTogICAgICAgICAgIyBTaG91bGQgYmUgb3ZlcnJpZGRlbgotICAgICAgICBwYXNzCi0KLQotY2xhc3MgQm9vbGVhbk9wdGlvbihPcHRpb24pOgotCi0gICAgdmFyY2xhc3MgPSBCb29sZWFuVmFyCi0KLSAgICBkZWYgYWRkb3B0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmJ1dHRvbiA9IENoZWNrYnV0dG9uKHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdvbi9vZmYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252YWx1ZT0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmdmFsdWU9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYudmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPVJBSVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuc2V0KQotICAgICAgICBzZWxmLmJ1dHRvbi5wYWNrKHNpZGU9UklHSFQpCi0KLQotY2xhc3MgRW51bU9wdGlvbihPcHRpb24pOgotCi0gICAgZGVmIGFkZG9wdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5idXR0b24gPSBNZW51YnV0dG9uKHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dmFyaWFibGU9c2VsZi52YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0yKQotICAgICAgICBzZWxmLmJ1dHRvbi5wYWNrKHNpZGU9UklHSFQpCi0gICAgICAgIHNlbGYubWVudSA9IE1lbnUoc2VsZi5idXR0b24pCi0gICAgICAgIHNlbGYuYnV0dG9uWydtZW51J10gPSBzZWxmLm1lbnUKLSAgICAgICAgZm9yIHYgaW4gc2VsZi5kaWFsb2cuY2xhc3Nlc1tzZWxmLmtsYXNzXToKLSAgICAgICAgICAgIHNlbGYubWVudS5hZGRfcmFkaW9idXR0b24oCi0gICAgICAgICAgICAgICAgbGFiZWw9diwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLnZhciwKLSAgICAgICAgICAgICAgICB2YWx1ZT12LAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5zZXQpCi0KLQotY2xhc3MgU3RyaW5nT3B0aW9uKE9wdGlvbik6Ci0KLSAgICBkZWYgYWRkb3B0aW9uKHNlbGYpOgotICAgICAgICBzZWxmLmVudHJ5ID0gRW50cnkoc2VsZi5mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR2YXJpYWJsZT1zZWxmLnZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPVNVTktFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPTIpCi0gICAgICAgIHNlbGYuZW50cnkucGFjayhzaWRlPVJJR0hULCBmaWxsPVgsIGV4cGFuZD0xKQotICAgICAgICBzZWxmLmVudHJ5LmJpbmQoJzxSZXR1cm4+Jywgc2VsZi5zZXQpCi0KLQotY2xhc3MgUmVhZG9ubHlPcHRpb24oT3B0aW9uKToKLQotICAgIGRlZiBhZGRvcHRpb24oc2VsZik6Ci0gICAgICAgIHNlbGYubGFiZWwgPSBMYWJlbChzZWxmLmZyYW1lLCB0ZXh0dmFyaWFibGU9c2VsZi52YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3I9RSkKLSAgICAgICAgc2VsZi5sYWJlbC5wYWNrKHNpZGU9UklHSFQpCi0KLQotY2xhc3MgRGlhbG9nOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcik6Ci0gICAgICAgIHNlbGYubWFzdGVyID0gbWFzdGVyCi0gICAgICAgIHNlbGYuZml4Y2xhc3NlcygpCi0gICAgICAgIHNlbGYucmVmcmVzaCgpCi0gICAgICAgIHNlbGYudG9wID0gVG9wbGV2ZWwoc2VsZi5tYXN0ZXIpCi0gICAgICAgIHNlbGYudG9wLnRpdGxlKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fKQotICAgICAgICBzZWxmLnRvcC5taW5zaXplKDEsIDEpCi0gICAgICAgIHNlbGYuYWRkY2hvaWNlcygpCi0KLSAgICBkZWYgcmVmcmVzaChzZWxmKTogcGFzcyAgICAgICAgICMgTXVzdCBvdmVycmlkZQotCi0gICAgZGVmIGZpeGNsYXNzZXMoc2VsZik6IHBhc3MgICAgICAjIE1heSBvdmVycmlkZQotCi0gICAgZGVmIGFkZGNob2ljZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hvaWNlcyA9IHt9Ci0gICAgICAgIGxpc3QgPSBbXQotICAgICAgICBmb3IgaywgZGMgaW4gc2VsZi5vcHRpb25zLml0ZW1zKCk6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCgoaywgZGMpKQotICAgICAgICBsaXN0LnNvcnQoKQotICAgICAgICBmb3IgaywgKGQsIGMpIGluIGxpc3Q6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgY2wgPSBzZWxmLmNsYXNzZXNbY10KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBjbCA9ICd1bmtub3duJwotICAgICAgICAgICAgaWYgdHlwZShjbCkgaXMgdHVwbGU6Ci0gICAgICAgICAgICAgICAgY2wgPSBzZWxmLmVudW1vcHRpb24KLSAgICAgICAgICAgIGVsaWYgY2wgPT0gJ2Jvb2xlYW4nOgotICAgICAgICAgICAgICAgIGNsID0gc2VsZi5ib29sZWFub3B0aW9uCi0gICAgICAgICAgICBlbGlmIGNsID09ICdyZWFkb25seSc6Ci0gICAgICAgICAgICAgICAgY2wgPSBzZWxmLnJlYWRvbmx5b3B0aW9uCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNsID0gc2VsZi5zdHJpbmdvcHRpb24KLSAgICAgICAgICAgIHNlbGYuY2hvaWNlc1trXSA9IGNsKHNlbGYsIGspCi0KLSAgICAjIE11c3Qgb3ZlcnJpZGU6Ci0gICAgb3B0aW9ucyA9IHt9Ci0gICAgY2xhc3NlcyA9IHt9Ci0KLSAgICAjIE1heSBvdmVycmlkZToKLSAgICBib29sZWFub3B0aW9uID0gQm9vbGVhbk9wdGlvbgotICAgIHN0cmluZ29wdGlvbiA9IFN0cmluZ09wdGlvbgotICAgIGVudW1vcHRpb24gPSBFbnVtT3B0aW9uCi0gICAgcmVhZG9ubHlvcHRpb24gPSBSZWFkb25seU9wdGlvbgotCi0KLWNsYXNzIFBhY2tEaWFsb2coRGlhbG9nKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aWRnZXQpOgotICAgICAgICBzZWxmLndpZGdldCA9IHdpZGdldAotICAgICAgICBEaWFsb2cuX19pbml0X18oc2VsZiwgd2lkZ2V0KQotCi0gICAgZGVmIHJlZnJlc2goc2VsZik6Ci0gICAgICAgIHNlbGYuY3VycmVudCA9IHNlbGYud2lkZ2V0LmluZm8oKQotICAgICAgICBzZWxmLmN1cnJlbnRbJy5jbGFzcyddID0gc2VsZi53aWRnZXQud2luZm9fY2xhc3MoKQotICAgICAgICBzZWxmLmN1cnJlbnRbJy5uYW1lJ10gPSBzZWxmLndpZGdldC5fdwotCi0gICAgY2xhc3MgcGFja29wdGlvbjogIyBNaXgtaW4gY2xhc3MKLSAgICAgICAgZGVmIHNldChzZWxmLCBlPU5vbmUpOgotICAgICAgICAgICAgc2VsZi5jdXJyZW50ID0gc2VsZi52YXIuZ2V0KCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy53aWRnZXQucGFjaygqKntzZWxmLm9wdGlvbjogc2VsZi5jdXJyZW50fSkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICAgICAgICAgIHNlbGYucmVmcmVzaCgpCi0KLSAgICBjbGFzcyBib29sZWFub3B0aW9uKHBhY2tvcHRpb24sIEJvb2xlYW5PcHRpb24pOiBwYXNzCi0gICAgY2xhc3MgZW51bW9wdGlvbihwYWNrb3B0aW9uLCBFbnVtT3B0aW9uKTogcGFzcwotICAgIGNsYXNzIHN0cmluZ29wdGlvbihwYWNrb3B0aW9uLCBTdHJpbmdPcHRpb24pOiBwYXNzCi0gICAgY2xhc3MgcmVhZG9ubHlvcHRpb24ocGFja29wdGlvbiwgUmVhZG9ubHlPcHRpb24pOiBwYXNzCi0KLSAgICBvcHRpb25zID0gewotICAgICAgICAgICAgJy5jbGFzcyc6IChOb25lLCAnQ2xhc3MnKSwKLSAgICAgICAgICAgICcubmFtZSc6IChOb25lLCAnTmFtZScpLAotICAgICAgICAgICAgJ2FmdGVyJzogKE5vbmUsICdXaWRnZXQnKSwKLSAgICAgICAgICAgICdhbmNob3InOiAoJ2NlbnRlcicsICdBbmNob3InKSwKLSAgICAgICAgICAgICdiZWZvcmUnOiAoTm9uZSwgJ1dpZGdldCcpLAotICAgICAgICAgICAgJ2V4cGFuZCc6ICgnbm8nLCAnQm9vbGVhbicpLAotICAgICAgICAgICAgJ2ZpbGwnOiAoJ25vbmUnLCAnRmlsbCcpLAotICAgICAgICAgICAgJ2luJzogKE5vbmUsICdXaWRnZXQnKSwKLSAgICAgICAgICAgICdpcGFkeCc6ICgwLCAnUGFkJyksCi0gICAgICAgICAgICAnaXBhZHknOiAoMCwgJ1BhZCcpLAotICAgICAgICAgICAgJ3BhZHgnOiAoMCwgJ1BhZCcpLAotICAgICAgICAgICAgJ3BhZHknOiAoMCwgJ1BhZCcpLAotICAgICAgICAgICAgJ3NpZGUnOiAoJ3RvcCcsICdTaWRlJyksCi0gICAgICAgICAgICB9Ci0KLSAgICBjbGFzc2VzID0gewotICAgICAgICAgICAgJ0FuY2hvcic6IChOLCBORSwgRSwgU0UsIFMsIFNXLCBXLCBOVywgQ0VOVEVSKSwKLSAgICAgICAgICAgICdCb29sZWFuJzogJ2Jvb2xlYW4nLAotICAgICAgICAgICAgJ0NsYXNzJzogJ3JlYWRvbmx5JywKLSAgICAgICAgICAgICdFeHBhbmQnOiAnYm9vbGVhbicsCi0gICAgICAgICAgICAnRmlsbCc6IChOT05FLCBYLCBZLCBCT1RIKSwKLSAgICAgICAgICAgICdOYW1lJzogJ3JlYWRvbmx5JywKLSAgICAgICAgICAgICdQYWQnOiAncGl4ZWwnLAotICAgICAgICAgICAgJ1NpZGUnOiAoVE9QLCBSSUdIVCwgQk9UVE9NLCBMRUZUKSwKLSAgICAgICAgICAgICdXaWRnZXQnOiAncmVhZG9ubHknLAotICAgICAgICAgICAgfQotCi1jbGFzcyBSZW1vdGVQYWNrRGlhbG9nKFBhY2tEaWFsb2cpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgYXBwLCB3aWRnZXQpOgotICAgICAgICBzZWxmLm1hc3RlciA9IG1hc3RlcgotICAgICAgICBzZWxmLmFwcCA9IGFwcAotICAgICAgICBzZWxmLndpZGdldCA9IHdpZGdldAotICAgICAgICBzZWxmLnJlZnJlc2goKQotICAgICAgICBzZWxmLnRvcCA9IFRvcGxldmVsKHNlbGYubWFzdGVyKQotICAgICAgICBzZWxmLnRvcC50aXRsZShzZWxmLmFwcCArICcgUGFja0RpYWxvZycpCi0gICAgICAgIHNlbGYudG9wLm1pbnNpemUoMSwgMSkKLSAgICAgICAgc2VsZi5hZGRjaG9pY2VzKCkKLQotICAgIGRlZiByZWZyZXNoKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3b3JkcyA9IHNlbGYubWFzdGVyLnRrLnNwbGl0bGlzdCgKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXN0ZXIuc2VuZChzZWxmLmFwcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFjaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luZm8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0KSkKLSAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHdvcmRzKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSB3b3Jkc1tpXVsxOl0KLSAgICAgICAgICAgIHZhbHVlID0gd29yZHNbaSsxXQotICAgICAgICAgICAgZGljdFtrZXldID0gdmFsdWUKLSAgICAgICAgZGljdFsnLmNsYXNzJ10gPSBzZWxmLm1hc3Rlci5zZW5kKHNlbGYuYXBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbmZvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGFzcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndpZGdldCkKLSAgICAgICAgZGljdFsnLm5hbWUnXSA9IHNlbGYud2lkZ2V0Ci0gICAgICAgIHNlbGYuY3VycmVudCA9IGRpY3QKLQotICAgIGNsYXNzIHJlbW90ZXBhY2tvcHRpb246ICMgTWl4LWluIGNsYXNzCi0gICAgICAgIGRlZiBzZXQoc2VsZiwgZT1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IHNlbGYudmFyLmdldCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cubWFzdGVyLnNlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy5hcHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAncGFjaycsCi0gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnJywKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlhbG9nLndpZGdldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICctJytzZWxmLm9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlhbG9nLm1hc3Rlci50ay5tZXJnZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50KSkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICAgICAgICAgIHNlbGYucmVmcmVzaCgpCi0KLSAgICBjbGFzcyBib29sZWFub3B0aW9uKHJlbW90ZXBhY2tvcHRpb24sIEJvb2xlYW5PcHRpb24pOiBwYXNzCi0gICAgY2xhc3MgZW51bW9wdGlvbihyZW1vdGVwYWNrb3B0aW9uLCBFbnVtT3B0aW9uKTogcGFzcwotICAgIGNsYXNzIHN0cmluZ29wdGlvbihyZW1vdGVwYWNrb3B0aW9uLCBTdHJpbmdPcHRpb24pOiBwYXNzCi0gICAgY2xhc3MgcmVhZG9ubHlvcHRpb24ocmVtb3RlcGFja29wdGlvbiwgUmVhZG9ubHlPcHRpb24pOiBwYXNzCi0KLQotY2xhc3MgV2lkZ2V0RGlhbG9nKERpYWxvZyk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgd2lkZ2V0KToKLSAgICAgICAgc2VsZi53aWRnZXQgPSB3aWRnZXQKLSAgICAgICAgc2VsZi5rbGFzcyA9IHdpZGdldC53aW5mb19jbGFzcygpCi0gICAgICAgIERpYWxvZy5fX2luaXRfXyhzZWxmLCB3aWRnZXQpCi0KLSAgICBkZWYgZml4Y2xhc3NlcyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5rbGFzcyBpbiBzZWxmLmFkZGNsYXNzZXM6Ci0gICAgICAgICAgICBjbGFzc2VzID0ge30KLSAgICAgICAgICAgIGZvciBjIGluIChzZWxmLmNsYXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGRjbGFzc2VzW3NlbGYua2xhc3NdKToKLSAgICAgICAgICAgICAgICBmb3IgayBpbiBjLmtleXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xhc3Nlc1trXSA9IGNba10KLSAgICAgICAgICAgIHNlbGYuY2xhc3NlcyA9IGNsYXNzZXMKLQotICAgIGRlZiByZWZyZXNoKHNlbGYpOgotICAgICAgICBzZWxmLmNvbmZpZ3VyYXRpb24gPSBzZWxmLndpZGdldC5jb25maWcoKQotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0gICAgICAgIHNlbGYuY3VycmVudFsnLmNsYXNzJ10gPSBzZWxmLndpZGdldC53aW5mb19jbGFzcygpCi0gICAgICAgIHNlbGYuY3VycmVudFsnLm5hbWUnXSA9IHNlbGYud2lkZ2V0Ll93Ci0KLSAgICBkZWYgdXBkYXRlKHNlbGYpOgotICAgICAgICBzZWxmLmN1cnJlbnQgPSB7fQotICAgICAgICBzZWxmLm9wdGlvbnMgPSB7fQotICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmNvbmZpZ3VyYXRpb24uaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGxlbih2KSA+IDQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50W2tdID0gdls0XQotICAgICAgICAgICAgICAgIHNlbGYub3B0aW9uc1trXSA9IHZbM10sIHZbMl0gIyBkZWZhdWx0LCBrbGFzcwotICAgICAgICBzZWxmLm9wdGlvbnNbJy5jbGFzcyddID0gKE5vbmUsICdDbGFzcycpCi0gICAgICAgIHNlbGYub3B0aW9uc1snLm5hbWUnXSA9IChOb25lLCAnTmFtZScpCi0KLSAgICBjbGFzcyB3aWRnZXRvcHRpb246ICMgTWl4LWluIGNsYXNzCi0gICAgICAgIGRlZiBzZXQoc2VsZiwgZT1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IHNlbGYudmFyLmdldCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cud2lkZ2V0W3NlbGYub3B0aW9uXSA9IHNlbGYuY3VycmVudAotICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgICAgICAgICAgc2VsZi5yZWZyZXNoKCkKLQotICAgIGNsYXNzIGJvb2xlYW5vcHRpb24od2lkZ2V0b3B0aW9uLCBCb29sZWFuT3B0aW9uKTogcGFzcwotICAgIGNsYXNzIGVudW1vcHRpb24od2lkZ2V0b3B0aW9uLCBFbnVtT3B0aW9uKTogcGFzcwotICAgIGNsYXNzIHN0cmluZ29wdGlvbih3aWRnZXRvcHRpb24sIFN0cmluZ09wdGlvbik6IHBhc3MKLSAgICBjbGFzcyByZWFkb25seW9wdGlvbih3aWRnZXRvcHRpb24sIFJlYWRvbmx5T3B0aW9uKTogcGFzcwotCi0gICAgIyBVbml2ZXJzYWwgY2xhc3NlcwotICAgIGNsYXNzZXMgPSB7Ci0gICAgICAgICAgICAnQW5jaG9yJzogKE4sIE5FLCBFLCBTRSwgUywgU1csIFcsIE5XLCBDRU5URVIpLAotICAgICAgICAgICAgJ0FzcGVjdCc6ICdpbnRlZ2VyJywKLSAgICAgICAgICAgICdCYWNrZ3JvdW5kJzogJ2NvbG9yJywKLSAgICAgICAgICAgICdCaXRtYXAnOiAnYml0bWFwJywKLSAgICAgICAgICAgICdCb3JkZXJXaWR0aCc6ICdwaXhlbCcsCi0gICAgICAgICAgICAnQ2xhc3MnOiAncmVhZG9ubHknLAotICAgICAgICAgICAgJ0Nsb3NlRW5vdWdoJzogJ2RvdWJsZScsCi0gICAgICAgICAgICAnQ29tbWFuZCc6ICdjb21tYW5kJywKLSAgICAgICAgICAgICdDb25maW5lJzogJ2Jvb2xlYW4nLAotICAgICAgICAgICAgJ0N1cnNvcic6ICdjdXJzb3InLAotICAgICAgICAgICAgJ0N1cnNvcldpZHRoJzogJ3BpeGVsJywKLSAgICAgICAgICAgICdEaXNhYmxlZEZvcmVncm91bmQnOiAnY29sb3InLAotICAgICAgICAgICAgJ0V4cG9ydFNlbGVjdGlvbic6ICdib29sZWFuJywKLSAgICAgICAgICAgICdGb250JzogJ2ZvbnQnLAotICAgICAgICAgICAgJ0ZvcmVncm91bmQnOiAnY29sb3InLAotICAgICAgICAgICAgJ0Zyb20nOiAnaW50ZWdlcicsCi0gICAgICAgICAgICAnR2VvbWV0cnknOiAnZ2VvbWV0cnknLAotICAgICAgICAgICAgJ0hlaWdodCc6ICdwaXhlbCcsCi0gICAgICAgICAgICAnSW5zZXJ0V2lkdGgnOiAndGltZScsCi0gICAgICAgICAgICAnSnVzdGlmeSc6IChMRUZULCBDRU5URVIsIFJJR0hUKSwKLSAgICAgICAgICAgICdMYWJlbCc6ICdzdHJpbmcnLAotICAgICAgICAgICAgJ0xlbmd0aCc6ICdwaXhlbCcsCi0gICAgICAgICAgICAnTWVudU5hbWUnOiAnd2lkZ2V0JywKLSAgICAgICAgICAgICdOYW1lJzogJ3JlYWRvbmx5JywKLSAgICAgICAgICAgICdPZmZUaW1lJzogJ3RpbWUnLAotICAgICAgICAgICAgJ09uVGltZSc6ICd0aW1lJywKLSAgICAgICAgICAgICdPcmllbnQnOiAoSE9SSVpPTlRBTCwgVkVSVElDQUwpLAotICAgICAgICAgICAgJ1BhZCc6ICdwaXhlbCcsCi0gICAgICAgICAgICAnUmVsaWVmJzogKFJBSVNFRCwgU1VOS0VOLCBGTEFULCBSSURHRSwgR1JPT1ZFKSwKLSAgICAgICAgICAgICdSZXBlYXREZWxheSc6ICd0aW1lJywKLSAgICAgICAgICAgICdSZXBlYXRJbnRlcnZhbCc6ICd0aW1lJywKLSAgICAgICAgICAgICdTY3JvbGxDb21tYW5kJzogJ2NvbW1hbmQnLAotICAgICAgICAgICAgJ1Njcm9sbEluY3JlbWVudCc6ICdwaXhlbCcsCi0gICAgICAgICAgICAnU2Nyb2xsUmVnaW9uJzogJ3JlY3RhbmdsZScsCi0gICAgICAgICAgICAnU2hvd1ZhbHVlJzogJ2Jvb2xlYW4nLAotICAgICAgICAgICAgJ1NldEdyaWQnOiAnYm9vbGVhbicsCi0gICAgICAgICAgICAnU2xpZGVyZm9yZWdyb3VuZCc6ICdjb2xvcicsCi0gICAgICAgICAgICAnU2xpZGVyTGVuZ3RoJzogJ3BpeGVsJywKLSAgICAgICAgICAgICdUZXh0JzogJ3N0cmluZycsCi0gICAgICAgICAgICAnVGlja0ludGVydmFsJzogJ2ludGVnZXInLAotICAgICAgICAgICAgJ1RvJzogJ2ludGVnZXInLAotICAgICAgICAgICAgJ1VuZGVybGluZSc6ICdpbmRleCcsCi0gICAgICAgICAgICAnVmFyaWFibGUnOiAndmFyaWFibGUnLAotICAgICAgICAgICAgJ1ZhbHVlJzogJ3N0cmluZycsCi0gICAgICAgICAgICAnV2lkdGgnOiAncGl4ZWwnLAotICAgICAgICAgICAgJ1dyYXAnOiAoTk9ORSwgQ0hBUiwgV09SRCksCi0gICAgICAgICAgICB9Ci0KLSAgICAjIENsYXNzZXMgdGhhdCAobWF5KSBkaWZmZXIgcGVyIHdpZGdldCB0eXBlCi0gICAgX3RyaXN0YXRlID0geydTdGF0ZSc6IChOT1JNQUwsIEFDVElWRSwgRElTQUJMRUQpfQotICAgIF9iaXN0YXRlID0geydTdGF0ZSc6IChOT1JNQUwsIERJU0FCTEVEKX0KLSAgICBhZGRjbGFzc2VzID0gewotICAgICAgICAgICAgJ0J1dHRvbic6IF90cmlzdGF0ZSwKLSAgICAgICAgICAgICdSYWRpb2J1dHRvbic6IF90cmlzdGF0ZSwKLSAgICAgICAgICAgICdDaGVja2J1dHRvbic6IF90cmlzdGF0ZSwKLSAgICAgICAgICAgICdFbnRyeSc6IF9iaXN0YXRlLAotICAgICAgICAgICAgJ1RleHQnOiBfYmlzdGF0ZSwKLSAgICAgICAgICAgICdNZW51YnV0dG9uJzogX3RyaXN0YXRlLAotICAgICAgICAgICAgJ1NsaWRlcic6IF9iaXN0YXRlLAotICAgICAgICAgICAgfQotCi0KLWNsYXNzIFJlbW90ZVdpZGdldERpYWxvZyhXaWRnZXREaWFsb2cpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3RlciwgYXBwLCB3aWRnZXQpOgotICAgICAgICBzZWxmLmFwcCA9IGFwcAotICAgICAgICBzZWxmLndpZGdldCA9IHdpZGdldAotICAgICAgICBzZWxmLmtsYXNzID0gbWFzdGVyLnNlbmQoc2VsZi5hcHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2luZm8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0KQotICAgICAgICBEaWFsb2cuX19pbml0X18oc2VsZiwgbWFzdGVyKQotCi0gICAgZGVmIHJlZnJlc2goc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGl0ZW1zID0gc2VsZi5tYXN0ZXIudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgICAgICAgICBzZWxmLm1hc3Rlci5zZW5kKHNlbGYuYXBwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcnKSkKLSAgICAgICAgZXhjZXB0IFRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KG1zZykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIGl0ZW0gaW4gaXRlbXM6Ci0gICAgICAgICAgICB3b3JkcyA9IHNlbGYubWFzdGVyLnRrLnNwbGl0bGlzdChpdGVtKQotICAgICAgICAgICAga2V5ID0gd29yZHNbMF1bMTpdCi0gICAgICAgICAgICB2YWx1ZSA9IChrZXksKSArIHdvcmRzWzE6XQotICAgICAgICAgICAgZGljdFtrZXldID0gdmFsdWUKLSAgICAgICAgc2VsZi5jb25maWd1cmF0aW9uID0gZGljdAotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0gICAgICAgIHNlbGYuY3VycmVudFsnLmNsYXNzJ10gPSBzZWxmLmtsYXNzCi0gICAgICAgIHNlbGYuY3VycmVudFsnLm5hbWUnXSA9IHNlbGYud2lkZ2V0Ci0KLSAgICBjbGFzcyByZW1vdGV3aWRnZXRvcHRpb246ICMgTWl4LWluIGNsYXNzCi0gICAgICAgIGRlZiBzZXQoc2VsZiwgZT1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuY3VycmVudCA9IHNlbGYudmFyLmdldCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cubWFzdGVyLnNlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy5hcHAsCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRpYWxvZy53aWRnZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICctJytzZWxmLm9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudCkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICAgICAgICAgIHNlbGYucmVmcmVzaCgpCi0KLSAgICBjbGFzcyBib29sZWFub3B0aW9uKHJlbW90ZXdpZGdldG9wdGlvbiwgQm9vbGVhbk9wdGlvbik6IHBhc3MKLSAgICBjbGFzcyBlbnVtb3B0aW9uKHJlbW90ZXdpZGdldG9wdGlvbiwgRW51bU9wdGlvbik6IHBhc3MKLSAgICBjbGFzcyBzdHJpbmdvcHRpb24ocmVtb3Rld2lkZ2V0b3B0aW9uLCBTdHJpbmdPcHRpb24pOiBwYXNzCi0gICAgY2xhc3MgcmVhZG9ubHlvcHRpb24ocmVtb3Rld2lkZ2V0b3B0aW9uLCBSZWFkb25seU9wdGlvbik6IHBhc3MKLQotCi1kZWYgdGVzdCgpOgotICAgIGltcG9ydCBzeXMKLSAgICByb290ID0gVGsoKQotICAgIHJvb3QubWluc2l6ZSgxLCAxKQotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgcmVtb3RldGVzdChyb290LCBzeXMuYXJndlsxXSkKLSAgICBlbHNlOgotICAgICAgICBmcmFtZSA9IEZyYW1lKHJvb3QsIG5hbWU9J2ZyYW1lJykKLSAgICAgICAgZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBidXR0b24gPSBCdXR0b24oZnJhbWUsIG5hbWU9J2J1dHRvbicsIHRleHQ9J2J1dHRvbicpCi0gICAgICAgIGJ1dHRvbi5wYWNrKGV4cGFuZD0xKQotICAgICAgICBjYW52YXMgPSBDYW52YXMoZnJhbWUsIG5hbWU9J2NhbnZhcycpCi0gICAgICAgIGNhbnZhcy5wYWNrKCkKLSAgICAgICAgZnBkID0gUGFja0RpYWxvZyhmcmFtZSkKLSAgICAgICAgZndkID0gV2lkZ2V0RGlhbG9nKGZyYW1lKQotICAgICAgICBicGQgPSBQYWNrRGlhbG9nKGJ1dHRvbikKLSAgICAgICAgYndkID0gV2lkZ2V0RGlhbG9nKGJ1dHRvbikKLSAgICAgICAgY3BkID0gUGFja0RpYWxvZyhjYW52YXMpCi0gICAgICAgIGN3ZCA9IFdpZGdldERpYWxvZyhjYW52YXMpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0KLWRlZiByZW1vdGV0ZXN0KHJvb3QsIGFwcCk6Ci0gICAgZnJvbSBsaXN0dHJlZSBpbXBvcnQgbGlzdHRyZWUKLSAgICBsaXN0ID0gbGlzdHRyZWUocm9vdCwgYXBwKQotICAgIGxpc3QuYmluZCgnPEFueS1Eb3VibGUtMT4nLCBvcGVuZGlhbG9ncykKLSAgICBsaXN0LmFwcCA9IGFwcCAgICAgICAgICAgICAgICAgICMgUGFzcyBpdCBvbiB0byBoYW5kbGVyCi0KLWRlZiBvcGVuZGlhbG9ncyhlKToKLSAgICBsaXN0ID0gZS53aWRnZXQKLSAgICBzZWwgPSBsaXN0LmN1cnNlbGVjdGlvbigpCi0gICAgZm9yIGkgaW4gc2VsOgotICAgICAgICBpdGVtID0gbGlzdC5nZXQoaSkKLSAgICAgICAgd2lkZ2V0ID0gaXRlbS5zcGxpdCgpWzBdCi0gICAgICAgIFJlbW90ZVdpZGdldERpYWxvZyhsaXN0LCBsaXN0LmFwcCwgd2lkZ2V0KQotICAgICAgICBpZiB3aWRnZXQgPT0gJy4nOiBjb250aW51ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBSZW1vdGVQYWNrRGlhbG9nKGxpc3QsIGxpc3QuYXBwLCB3aWRnZXQpCi0gICAgICAgIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBwcmludChtc2cpCi0KLXRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2Jyb3duaWFuLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2Jyb3duaWFuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWIzZTY3Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9icm93bmlhbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSMgQnJvd25pYW4gbW90aW9uIC0tIGFuIGV4YW1wbGUgb2YgYSBtdWx0aS10aHJlYWRlZCBUa2ludGVyIHByb2dyYW0uCi0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHRpbWUKLWltcG9ydCBzeXMKLQotV0lEVEggPSA0MDAKLUhFSUdIVCA9IDMwMAotU0lHTUEgPSAxMAotQlVaWiA9IDIKLVJBRElVUyA9IDIKLUxBTUJEQSA9IDEwCi1GSUxMID0gJ3JlZCcKLQotc3RvcCA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2V0IHdoZW4gbWFpbiBsb29wIGV4aXRzCi0KLWRlZiBwYXJ0aWNsZShjYW52YXMpOgotICAgIHIgPSBSQURJVVMKLSAgICB4ID0gcmFuZG9tLmdhdXNzKFdJRFRILzIuMCwgU0lHTUEpCi0gICAgeSA9IHJhbmRvbS5nYXVzcyhIRUlHSFQvMi4wLCBTSUdNQSkKLSAgICBwID0gY2FudmFzLmNyZWF0ZV9vdmFsKHgtciwgeS1yLCB4K3IsIHkrciwgZmlsbD1GSUxMKQotICAgIHdoaWxlIG5vdCBzdG9wOgotICAgICAgICBkeCA9IHJhbmRvbS5nYXVzcygwLCBCVVpaKQotICAgICAgICBkeSA9IHJhbmRvbS5nYXVzcygwLCBCVVpaKQotICAgICAgICBkdCA9IHJhbmRvbS5leHBvdmFyaWF0ZShMQU1CREEpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNhbnZhcy5tb3ZlKHAsIGR4LCBkeSkKLSAgICAgICAgZXhjZXB0IFRjbEVycm9yOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdGltZS5zbGVlcChkdCkKLQotZGVmIG1haW4oKToKLSAgICBnbG9iYWwgc3RvcAotICAgIHJvb3QgPSBUaygpCi0gICAgY2FudmFzID0gQ2FudmFzKHJvb3QsIHdpZHRoPVdJRFRILCBoZWlnaHQ9SEVJR0hUKQotICAgIGNhbnZhcy5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKLSAgICBucCA9IDMwCi0gICAgaWYgc3lzLmFyZ3ZbMTpdOgotICAgICAgICBucCA9IGludChzeXMuYXJndlsxXSkKLSAgICBmb3IgaSBpbiByYW5nZShucCk6Ci0gICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1wYXJ0aWNsZSwgYXJncz0oY2FudmFzLCkpCi0gICAgICAgIHQuc3RhcnQoKQotICAgIHRyeToKLSAgICAgICAgcm9vdC5tYWlubG9vcCgpCi0gICAgZmluYWxseToKLSAgICAgICAgc3RvcCA9IDEKLQotbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vYnJvd25pYW4yLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2Jyb3duaWFuMi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxZDQzYS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vYnJvd25pYW4yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotIyBCcm93bmlhbiBtb3Rpb24gLS0gYW4gZXhhbXBsZSBvZiBhIE5PTiBtdWx0aS10aHJlYWRlZCBUa2ludGVyIHByb2dyYW0gOykKLSMgQnkgTWljaGVsZSBTaW1vbmlhdG8sIGluc3BpcmVkIGJ5IGJyb3duaWFuLnB5Ci0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHN5cwotCi1XSURUSCA9IDQwMAotSEVJR0hUID0gMzAwCi1TSUdNQSA9IDEwCi1CVVpaID0gMgotUkFESVVTID0gMgotTEFNQkRBID0gMTAKLUZJTEwgPSAncmVkJwotCi1zdG9wID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXQgd2hlbiBtYWluIGxvb3AgZXhpdHMKLXJvb3QgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1haW4gd2luZG93Ci0KLWRlZiBwYXJ0aWNsZShjYW52YXMpOiAgICAgICAgICAgICAgICAgICAjIHBhcnRpY2xlID0gaXRlcmF0b3Igb3ZlciB0aGUgbW92ZXMKLSAgICByID0gUkFESVVTCi0gICAgeCA9IHJhbmRvbS5nYXVzcyhXSURUSC8yLjAsIFNJR01BKQotICAgIHkgPSByYW5kb20uZ2F1c3MoSEVJR0hULzIuMCwgU0lHTUEpCi0gICAgcCA9IGNhbnZhcy5jcmVhdGVfb3ZhbCh4LXIsIHktciwgeCtyLCB5K3IsIGZpbGw9RklMTCkKLSAgICB3aGlsZSBub3Qgc3RvcDoKLSAgICAgICAgZHggPSByYW5kb20uZ2F1c3MoMCwgQlVaWikKLSAgICAgICAgZHkgPSByYW5kb20uZ2F1c3MoMCwgQlVaWikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY2FudmFzLm1vdmUocCwgZHgsIGR5KQotICAgICAgICBleGNlcHQgVGNsRXJyb3I6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi1kZWYgbW92ZShwYXJ0aWNsZSk6ICMgbW92ZSB0aGUgcGFydGljbGUgYXQgcmFuZG9tIHRpbWUKLSAgICBwYXJ0aWNsZS5uZXh0KCkKLSAgICBkdCA9IHJhbmRvbS5leHBvdmFyaWF0ZShMQU1CREEpCi0gICAgcm9vdC5hZnRlcihpbnQoZHQqMTAwMCksIG1vdmUsIHBhcnRpY2xlKQotCi1kZWYgbWFpbigpOgotICAgIGdsb2JhbCByb290LCBzdG9wCi0gICAgcm9vdCA9IFRrKCkKLSAgICBjYW52YXMgPSBDYW52YXMocm9vdCwgd2lkdGg9V0lEVEgsIGhlaWdodD1IRUlHSFQpCi0gICAgY2FudmFzLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD0xKQotICAgIG5wID0gMzAKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIG5wID0gaW50KHN5cy5hcmd2WzFdKQotICAgIGZvciBpIGluIHJhbmdlKG5wKTogICAgICAgICAgICAgICAgICAjIHN0YXJ0IHRoZSBkYW5jZQotICAgICAgICBtb3ZlKHBhcnRpY2xlKGNhbnZhcykpCi0gICAgdHJ5OgotICAgICAgICByb290Lm1haW5sb29wKCkKLSAgICBmaW5hbGx5OgotICAgICAgICBzdG9wID0gMQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2NhbnZhc2V2ZW50cy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9jYW52YXNldmVudHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZWIwY2EuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2NhbnZhc2V2ZW50cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0KLSMgU2luY2UgQ2FudmFzLkdyb3VwIGlzIG5vIGxvbmdlciBwcmVzZW50LCB0aGUgZm9sbG93aW5nIGNsYXNzIHJlcHJvZHVjZXMKLSMgYSBzdWJzZXQgb2YgdGhlIG9sZCBHcm91cCBjbGFzcyB0aGF0IGlzIHVzZWQgYnkgdGhpcyBhcHAuCi0KLWNsYXNzIEdyb3VwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYW52YXMsIHRhZz1Ob25lKToKLSAgICAgICAgaWYgdGFnIGlzIE5vbmU6Ci0gICAgICAgICAgICB0YWcgPSAnR3JvdXAlZCcgJSBpZChzZWxmKQotCi0gICAgICAgIHNlbGYudGFnID0gc2VsZi5pZCA9IHRhZwotICAgICAgICBzZWxmLmNhbnZhcyA9IGNhbnZhcwotICAgICAgICBzZWxmLmNhbnZhcy5kdGFnKHNlbGYudGFnKQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnRhZwotCi0gICAgZGVmIF9kbyhzZWxmLCBjbWQsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuY2FudmFzLnRrLmNhbGwoc2VsZi5jYW52YXMuX3csIGNtZCwgc2VsZi50YWcsICphcmdzKQotCi0gICAgZGVmIGFkZHRhZ193aXRodGFnKHNlbGYsIHRhZ09ySWQpOgotICAgICAgICBzZWxmLl9kbygnYWRkdGFnJywgJ3dpdGh0YWcnLCB0YWdPcklkKQotCi0gICAgZGVmIGJpbmQoc2VsZiwgc2VxdWVuY2U9Tm9uZSwgY29tbWFuZD1Ob25lLCBhZGQ9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmNhbnZhcy50YWdfYmluZChzZWxmLmlkLCBzZXF1ZW5jZSwgY29tbWFuZCwgYWRkKQotCi0gICAgZGVmIG1vdmUoc2VsZiwgeF9hbW91bnQsIHlfYW1vdW50KToKLSAgICAgICAgc2VsZi5fZG8oJ21vdmUnLCB4X2Ftb3VudCwgeV9hbW91bnQpCi0KLSAgICBkZWYgZHRhZyhzZWxmLCB0YWdUb0RlbGV0ZT1Ob25lKToKLSAgICAgICAgc2VsZi5fZG8oJ2R0YWcnLCB0YWdUb0RlbGV0ZSkKLQotICAgIGRlZiB0a3JhaXNlKHNlbGYsIGFib3ZlVGhpcz1Ob25lKToKLSAgICAgICAgc2VsZi5fZG8oJ3JhaXNlJywgYWJvdmVUaGlzKQotCi0KLWNsYXNzIE9iamVjdDoKLQotICAgICIiIkJhc2UgY2xhc3MgZm9yIGNvbXBvc2l0ZSBncmFwaGljYWwgb2JqZWN0cy4KLQotICAgIE9iamVjdHMgYmVsb25nIHRvIGEgY2FudmFzLCBhbmQgY2FuIGJlIG1vdmVkIGFyb3VuZCBvbiB0aGUgY2FudmFzLgotICAgIFRoZXkgYWxzbyBiZWxvbmcgdG8gYXQgbW9zdCBvbmUgYGBwaWxlJycgb2Ygb2JqZWN0cywgYW5kIGNhbiBiZQotICAgIHRyYW5zZmVycmVkIGJldHdlZW4gcGlsZXMgKG9yIHJlbW92ZWQgZnJvbSB0aGVpciBwaWxlKS4KLQotICAgIE9iamVjdHMgaGF2ZSBhIGNhbm9uaWNhbCBgYHgsIHknJyBwb3NpdGlvbiB3aGljaCBpcyBtb3ZlZCB3aGVuIHRoZQotICAgIG9iamVjdCBpcyBtb3ZlZC4gIFdoZXJlIHRoZSBvYmplY3QgaXMgcmVsYXRpdmUgdG8gdGhpcyBwb3NpdGlvbgotICAgIGRlcGVuZHMgb24gdGhlIG9iamVjdDsgZm9yIHNpbXBsZSBvYmplY3RzLCBpdCBtYXkgYmUgdGhlaXIgY2VudGVyLgotCi0gICAgT2JqZWN0cyBoYXZlIG1vdXNlIHNlbnNpdGl2aXR5LiAgVGhleSBjYW4gYmUgY2xpY2tlZCwgZHJhZ2dlZCBhbmQKLSAgICBkb3VibGUtY2xpY2tlZC4gIFRoZSBiZWhhdmlvciBtYXkgYWN0dWFsbHkgZGV0ZXJtaW5lZCBieSB0aGUgcGlsZQotICAgIHRoZXkgYXJlIGluLgotCi0gICAgQWxsIGluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIHB1YmxpYyBzaW5jZSB0aGUgZGVyaXZlZCBjbGFzcyBtYXkKLSAgICBuZWVkIHRoZW0uCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgY2FudmFzLCB4PTAsIHk9MCwgZmlsbD0ncmVkJywgdGV4dD0nb2JqZWN0Jyk6Ci0gICAgICAgIHNlbGYuY2FudmFzID0gY2FudmFzCi0gICAgICAgIHNlbGYueCA9IHgKLSAgICAgICAgc2VsZi55ID0geQotICAgICAgICBzZWxmLnBpbGUgPSBOb25lCi0gICAgICAgIHNlbGYuZ3JvdXAgPSBHcm91cChzZWxmLmNhbnZhcykKLSAgICAgICAgc2VsZi5jcmVhdGVpdGVtcyhmaWxsLCB0ZXh0KQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5ncm91cCkKLQotICAgIGRlZiBjcmVhdGVpdGVtcyhzZWxmLCBmaWxsLCB0ZXh0KToKLSAgICAgICAgc2VsZi5fX292YWwgPSBzZWxmLmNhbnZhcy5jcmVhdGVfb3ZhbChzZWxmLnggLSAyMCwgc2VsZi55IC0gMTAsCi0gICAgICAgICAgICBzZWxmLnggKyAyMCwgc2VsZi55ICsgMjAsIGZpbGw9ZmlsbCwgd2lkdGg9MykKLSAgICAgICAgc2VsZi5ncm91cC5hZGR0YWdfd2l0aHRhZyhzZWxmLl9fb3ZhbCkKLSAgICAgICAgc2VsZi5fX3RleHQgPSBzZWxmLmNhbnZhcy5jcmVhdGVfdGV4dChzZWxmLngsIHNlbGYueSwgdGV4dD10ZXh0KQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKHNlbGYuX190ZXh0KQotCi0gICAgZGVmIG1vdmVieShzZWxmLCBkeCwgZHkpOgotICAgICAgICBpZiBkeCA9PSBkeSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZ3JvdXAubW92ZShkeCwgZHkpCi0gICAgICAgIHNlbGYueCA9IHNlbGYueCArIGR4Ci0gICAgICAgIHNlbGYueSA9IHNlbGYueSArIGR5Ci0KLSAgICBkZWYgbW92ZXRvKHNlbGYsIHgsIHkpOgotICAgICAgICBzZWxmLm1vdmVieSh4IC0gc2VsZi54LCB5IC0gc2VsZi55KQotCi0gICAgZGVmIHRyYW5zZmVyKHNlbGYsIHBpbGUpOgotICAgICAgICBpZiBzZWxmLnBpbGU6Ci0gICAgICAgICAgICBzZWxmLnBpbGUuZGVsZXRlKHNlbGYpCi0gICAgICAgICAgICBzZWxmLnBpbGUgPSBOb25lCi0gICAgICAgIHNlbGYucGlsZSA9IHBpbGUKLSAgICAgICAgaWYgc2VsZi5waWxlOgotICAgICAgICAgICAgc2VsZi5waWxlLmFkZChzZWxmKQotCi0gICAgZGVmIHRrcmFpc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuZ3JvdXAudGtyYWlzZSgpCi0KLQotY2xhc3MgQm90dG9tKE9iamVjdCk6Ci0gICAgIiIiQW4gb2JqZWN0IHRvIHNlcnZlIGFzIHRoZSBib3R0b20gb2YgYSBwaWxlLiIiIgotCi0gICAgZGVmIGNyZWF0ZWl0ZW1zKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fX292YWwgPSBzZWxmLmNhbnZhcy5jcmVhdGVfb3ZhbChzZWxmLnggLSAyMCwgc2VsZi55IC0gMTAsCi0gICAgICAgICAgICBzZWxmLnggKyAyMCwgc2VsZi55ICsgMTAsIGZpbGw9J2dyYXknLCBvdXRsaW5lPScnKQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKHNlbGYuX19vdmFsKQotCi0KLWNsYXNzIFBpbGU6Ci0gICAgIiIiQSBncm91cCBvZiBncmFwaGljYWwgb2JqZWN0cy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYW52YXMsIHgsIHksIHRhZz1Ob25lKToKLSAgICAgICAgc2VsZi5jYW52YXMgPSBjYW52YXMKLSAgICAgICAgc2VsZi54ID0geAotICAgICAgICBzZWxmLnkgPSB5Ci0gICAgICAgIHNlbGYub2JqZWN0cyA9IFtdCi0gICAgICAgIHNlbGYuYm90dG9tID0gQm90dG9tKHNlbGYuY2FudmFzLCBzZWxmLngsIHNlbGYueSkKLSAgICAgICAgc2VsZi5ncm91cCA9IEdyb3VwKHNlbGYuY2FudmFzLCB0YWc9dGFnKQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKHNlbGYuYm90dG9tLmdyb3VwKQotICAgICAgICBzZWxmLmJpbmRoYW5kbGVycygpCi0KLSAgICBkZWYgYmluZGhhbmRsZXJzKHNlbGYpOgotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzwxPicsIHNlbGYuY2xpY2toYW5kbGVyKQotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzxEb3VibGUtMT4nLCBzZWxmLmRvdWJsZWNsaWNraGFuZGxlcikKLQotICAgIGRlZiBhZGQoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgc2VsZi5vYmplY3RzLmFwcGVuZChvYmplY3QpCi0gICAgICAgIHNlbGYuZ3JvdXAuYWRkdGFnX3dpdGh0YWcob2JqZWN0Lmdyb3VwKQotICAgICAgICBzZWxmLnBvc2l0aW9uKG9iamVjdCkKLQotICAgIGRlZiBkZWxldGUoc2VsZiwgb2JqZWN0KToKLSAgICAgICAgb2JqZWN0Lmdyb3VwLmR0YWcoc2VsZi5ncm91cCkKLSAgICAgICAgc2VsZi5vYmplY3RzLnJlbW92ZShvYmplY3QpCi0KLSAgICBkZWYgcG9zaXRpb24oc2VsZiwgb2JqZWN0KToKLSAgICAgICAgb2JqZWN0LnRrcmFpc2UoKQotICAgICAgICBpID0gc2VsZi5vYmplY3RzLmluZGV4KG9iamVjdCkKLSAgICAgICAgb2JqZWN0Lm1vdmV0byhzZWxmLnggKyBpKjQsIHNlbGYueSArIGkqOCkKLQotICAgIGRlZiBjbGlja2hhbmRsZXIoc2VsZiwgZXZlbnQpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgZG91YmxlY2xpY2toYW5kbGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgcGFzcwotCi0KLWNsYXNzIE1vdmluZ1BpbGUoUGlsZSk6Ci0KLSAgICBkZWYgYmluZGhhbmRsZXJzKHNlbGYpOgotICAgICAgICBQaWxlLmJpbmRoYW5kbGVycyhzZWxmKQotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzxCMS1Nb3Rpb24+Jywgc2VsZi5tb3Rpb25oYW5kbGVyKQotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+Jywgc2VsZi5yZWxlYXNlaGFuZGxlcikKLQotICAgIG1vdmV0aGlzID0gTm9uZQotCi0gICAgZGVmIGNsaWNraGFuZGxlcihzZWxmLCBldmVudCk6Ci0gICAgICAgIHRhZ3MgPSBzZWxmLmNhbnZhcy5nZXR0YWdzKCdjdXJyZW50JykKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYub2JqZWN0cykpOgotICAgICAgICAgICAgbyA9IHNlbGYub2JqZWN0c1tpXQotICAgICAgICAgICAgaWYgby5ncm91cC50YWcgaW4gdGFnczoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tb3ZldGhpcyA9IE5vbmUKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLm1vdmV0aGlzID0gc2VsZi5vYmplY3RzW2k6XQotICAgICAgICBmb3IgbyBpbiBzZWxmLm1vdmV0aGlzOgotICAgICAgICAgICAgby50a3JhaXNlKCkKLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLQotICAgIGRvdWJsZWNsaWNraGFuZGxlciA9IGNsaWNraGFuZGxlcgotCi0gICAgZGVmIG1vdGlvbmhhbmRsZXIoc2VsZiwgZXZlbnQpOgotICAgICAgICBpZiBub3Qgc2VsZi5tb3ZldGhpczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkeCA9IGV2ZW50LnggLSBzZWxmLmxhc3R4Ci0gICAgICAgIGR5ID0gZXZlbnQueSAtIHNlbGYubGFzdHkKLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLSAgICAgICAgZm9yIG8gaW4gc2VsZi5tb3ZldGhpczoKLSAgICAgICAgICAgIG8ubW92ZWJ5KGR4LCBkeSkKLQotICAgIGRlZiByZWxlYXNlaGFuZGxlcihzZWxmLCBldmVudCk6Ci0gICAgICAgIG9iamVjdHMgPSBzZWxmLm1vdmV0aGlzCi0gICAgICAgIGlmIG5vdCBvYmplY3RzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYubW92ZXRoaXMgPSBOb25lCi0gICAgICAgIHNlbGYuZmluaXNobW92ZShvYmplY3RzKQotCi0gICAgZGVmIGZpbmlzaG1vdmUoc2VsZiwgb2JqZWN0cyk6Ci0gICAgICAgIGZvciBvIGluIG9iamVjdHM6Ci0gICAgICAgICAgICBzZWxmLnBvc2l0aW9uKG8pCi0KLQotY2xhc3MgUGlsZTEoTW92aW5nUGlsZSk6Ci0KLSAgICB4ID0gNTAKLSAgICB5ID0gNTAKLSAgICB0YWcgPSAncDEnCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGVtbyk6Ci0gICAgICAgIHNlbGYuZGVtbyA9IGRlbW8KLSAgICAgICAgTW92aW5nUGlsZS5fX2luaXRfXyhzZWxmLCBzZWxmLmRlbW8uY2FudmFzLCBzZWxmLngsIHNlbGYueSwgc2VsZi50YWcpCi0KLSAgICBkZWYgZG91YmxlY2xpY2toYW5kbGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbyA9IHNlbGYub2JqZWN0c1stMV0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgby50cmFuc2ZlcihzZWxmLm90aGVyKCkpCi0gICAgICAgIE1vdmluZ1BpbGUuZG91YmxlY2xpY2toYW5kbGVyKHNlbGYsIGV2ZW50KQotCi0gICAgZGVmIG90aGVyKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5kZW1vLnAyCi0KLSAgICBkZWYgZmluaXNobW92ZShzZWxmLCBvYmplY3RzKToKLSAgICAgICAgbyA9IG9iamVjdHNbMF0KLSAgICAgICAgcCA9IHNlbGYub3RoZXIoKQotICAgICAgICB4LCB5ID0gby54LCBvLnkKLSAgICAgICAgaWYgKHgtcC54KSoqMiArICh5LXAueSkqKjIgPCAoeC1zZWxmLngpKioyICsgKHktc2VsZi55KSoqMjoKLSAgICAgICAgICAgIGZvciBvIGluIG9iamVjdHM6Ci0gICAgICAgICAgICAgICAgby50cmFuc2ZlcihwKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgTW92aW5nUGlsZS5maW5pc2htb3ZlKHNlbGYsIG9iamVjdHMpCi0KLWNsYXNzIFBpbGUyKFBpbGUxKToKLQotICAgIHggPSAxNTAKLSAgICB5ID0gNTAKLSAgICB0YWcgPSAncDInCi0KLSAgICBkZWYgb3RoZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmRlbW8ucDEKLQotCi1jbGFzcyBEZW1vOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcik6Ci0gICAgICAgIHNlbGYubWFzdGVyID0gbWFzdGVyCi0gICAgICAgIHNlbGYuY2FudmFzID0gQ2FudmFzKG1hc3RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjAwLCBoZWlnaHQ9MjAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kPSd5ZWxsb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9U1VOS0VOLCBib3JkZXJ3aWR0aD0yKQotICAgICAgICBzZWxmLmNhbnZhcy5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYucDEgPSBQaWxlMShzZWxmKQotICAgICAgICBzZWxmLnAyID0gUGlsZTIoc2VsZikKLSAgICAgICAgbzEgPSBPYmplY3Qoc2VsZi5jYW52YXMsIGZpbGw9J3JlZCcsIHRleHQ9J28xJykKLSAgICAgICAgbzIgPSBPYmplY3Qoc2VsZi5jYW52YXMsIGZpbGw9J2dyZWVuJywgdGV4dD0nbzInKQotICAgICAgICBvMyA9IE9iamVjdChzZWxmLmNhbnZhcywgZmlsbD0nbGlnaHQgYmx1ZScsIHRleHQ9J28zJykKLSAgICAgICAgbzEudHJhbnNmZXIoc2VsZi5wMSkKLSAgICAgICAgbzIudHJhbnNmZXIoc2VsZi5wMSkKLSAgICAgICAgbzMudHJhbnNmZXIoc2VsZi5wMikKLQotCi0jIE1haW4gZnVuY3Rpb24sIHJ1biB3aGVuIGludm9rZWQgYXMgYSBzdGFuZC1hbG9uZSBQeXRob24gcHJvZ3JhbS4KLQotZGVmIG1haW4oKToKLSAgICByb290ID0gVGsoKQotICAgIGRlbW8gPSBEZW1vKHJvb3QpCi0gICAgcm9vdC5wcm90b2NvbCgnV01fREVMRVRFX1dJTkRPVycsIHJvb3QucXVpdCkKLSAgICByb290Lm1haW5sb29wKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9kaWFsb2cucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vZGlhbG9nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYTRhOTM5Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9kaWFsb2cucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGRpYWxvZyBib3hlcyB3aXRoIGEgdGV4dCBtZXNzYWdlLAotIyBvcHRpb25hbCBiaXRtYXAsIGFuZCBhbnkgbnVtYmVyIG9mIGJ1dHRvbnMuCi0jIENmLiBPdXN0ZXJob3V0LCBUY2wgYW5kIHRoZSBUayBUb29sa2l0LCBGaWdzLiAyNy4yLTMsIHBwLiAyNjktMjcwLgotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWltcG9ydCBzeXMKLQotCi1kZWYgZGlhbG9nKG1hc3RlciwgdGl0bGUsIHRleHQsIGJpdG1hcCwgZGVmYXVsdCwgKmFyZ3MpOgotCi0gICAgIyAxLiBDcmVhdGUgdGhlIHRvcC1sZXZlbCB3aW5kb3cgYW5kIGRpdmlkZSBpdCBpbnRvIHRvcAotICAgICMgYW5kIGJvdHRvbSBwYXJ0cy4KLQotICAgIHcgPSBUb3BsZXZlbChtYXN0ZXIsIGNsYXNzXz0nRGlhbG9nJykKLSAgICB3LnRpdGxlKHRpdGxlKQotICAgIHcuaWNvbm5hbWUoJ0RpYWxvZycpCi0KLSAgICB0b3AgPSBGcmFtZSh3LCByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0xKQotICAgIHRvcC5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgpCi0gICAgYm90ID0gRnJhbWUodywgcmVsaWVmPVJBSVNFRCwgYm9yZGVyd2lkdGg9MSkKLSAgICBib3QucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1CT1RIKQotCi0gICAgIyAyLiBGaWxsIHRoZSB0b3AgcGFydCB3aXRoIHRoZSBiaXRtYXAgYW5kIG1lc3NhZ2UuCi0KLSAgICBtc2cgPSBNZXNzYWdlKHRvcCwgd2lkdGg9JzNpJywgdGV4dD10ZXh0KQotICAgIG1zZy5wYWNrKHNpZGU9UklHSFQsIGV4cGFuZD0xLCBmaWxsPUJPVEgsIHBhZHg9JzNtJywgcGFkeT0nM20nKQotICAgIGlmIGJpdG1hcDoKLSAgICAgICAgYm0gPSBMYWJlbCh0b3AsIGJpdG1hcD1iaXRtYXApCi0gICAgICAgIGJtLnBhY2soc2lkZT1MRUZULCBwYWR4PSczbScsIHBhZHk9JzNtJykKLQotICAgICMgMy4gQ3JlYXRlIGEgcm93IG9mIGJ1dHRvbnMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZGlhbG9nLgotCi0gICAgdmFyID0gSW50VmFyKCkKLSAgICBidXR0b25zID0gW10KLSAgICBpID0gMAotICAgIGZvciBidXQgaW4gYXJnczoKLSAgICAgICAgYiA9IEJ1dHRvbihib3QsIHRleHQ9YnV0LCBjb21tYW5kPWxhbWJkYSB2PXZhcixpPWk6IHYuc2V0KGkpKQotICAgICAgICBidXR0b25zLmFwcGVuZChiKQotICAgICAgICBpZiBpID09IGRlZmF1bHQ6Ci0gICAgICAgICAgICBiZCA9IEZyYW1lKGJvdCwgcmVsaWVmPVNVTktFTiwgYm9yZGVyd2lkdGg9MSkKLSAgICAgICAgICAgIGJkLnBhY2soc2lkZT1MRUZULCBleHBhbmQ9MSwgcGFkeD0nM20nLCBwYWR5PScybScpCi0gICAgICAgICAgICBiLmxpZnQoKQotICAgICAgICAgICAgYi5wYWNrIChpbl89YmQsIHNpZGU9TEVGVCwKLSAgICAgICAgICAgICAgICAgICAgcGFkeD0nMm0nLCBwYWR5PScybScsIGlwYWR4PScybScsIGlwYWR5PScxbScpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBiLnBhY2sgKHNpZGU9TEVGVCwgZXhwYW5kPTEsCi0gICAgICAgICAgICAgICAgICAgIHBhZHg9JzNtJywgcGFkeT0nM20nLCBpcGFkeD0nMm0nLCBpcGFkeT0nMW0nKQotICAgICAgICBpID0gaSsxCi0KLSAgICAjIDQuIFNldCB1cCBhIGJpbmRpbmcgZm9yIDxSZXR1cm4+LCBpZiB0aGVyZSdzIGEgZGVmYXVsdCwKLSAgICAjIHNldCBhIGdyYWIsIGFuZCBjbGFpbSB0aGUgZm9jdXMgdG9vLgotCi0gICAgaWYgZGVmYXVsdCA+PSAwOgotICAgICAgICB3LmJpbmQoJzxSZXR1cm4+JywKLSAgICAgICAgICAgICAgIGxhbWJkYSBlLCBiPWJ1dHRvbnNbZGVmYXVsdF0sIHY9dmFyLCBpPWRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAoYi5mbGFzaCgpLAotICAgICAgICAgICAgICAgIHYuc2V0KGkpKSkKLQotICAgIG9sZEZvY3VzID0gdy5mb2N1c19nZXQoKQotICAgIHcuZ3JhYl9zZXQoKQotICAgIHcuZm9jdXNfc2V0KCkKLQotICAgICMgNS4gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcmVzcG9uZCwgdGhlbiByZXN0b3JlIHRoZSBmb2N1cwotICAgICMgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGJ1dHRvbi4KLQotICAgIHcud2FpdHZhcih2YXIpCi0gICAgdy5kZXN0cm95KCkKLSAgICBpZiBvbGRGb2N1czogb2xkRm9jdXMuZm9jdXNfc2V0KCkKLSAgICByZXR1cm4gdmFyLmdldCgpCi0KLSMgVGhlIHJlc3QgaXMgdGhlIHRlc3QgcHJvZ3JhbS4KLQotZGVmIGdvKCk6Ci0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgJ05vdCBSZXNwb25kaW5nJywKLSAgICAgICAgICAgICAgICJUaGUgZmlsZSBzZXJ2ZXIgaXNuJ3QgcmVzcG9uZGluZyByaWdodCBub3c7ICIKLSAgICAgICAgICAgICAgICJJJ2xsIGtlZXAgdHJ5aW5nLiIsCi0gICAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgJ09LJykKLSAgICBwcmludCgncHJlc3NlZCBidXR0b24nLCBpKQotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwKLSAgICAgICAgICAgICAgICdGaWxlIE1vZGlmaWVkJywKLSAgICAgICAgICAgICAgICdGaWxlICJ0Y2wuaCIgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgJwotICAgICAgICAgICAgICAgJ3RoZSBsYXN0IHRpbWUgaXQgd2FzIHNhdmVkLiAnCi0gICAgICAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2F2ZSBpdCBiZWZvcmUgZXhpdGluZyB0aGUgYXBwbGljYXRpb24/JywKLSAgICAgICAgICAgICAgICd3YXJuaW5nJywKLSAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAnU2F2ZSBGaWxlJywKLSAgICAgICAgICAgICAgICdEaXNjYXJkIENoYW5nZXMnLAotICAgICAgICAgICAgICAgJ1JldHVybiBUbyBFZGl0b3InKQotICAgIHByaW50KCdwcmVzc2VkIGJ1dHRvbicsIGkpCi0KLWRlZiB0ZXN0KCk6Ci0gICAgaW1wb3J0IHN5cwotICAgIGdsb2JhbCBtYWluV2lkZ2V0Ci0gICAgbWFpbldpZGdldCA9IEZyYW1lKCkKLSAgICBQYWNrLmNvbmZpZyhtYWluV2lkZ2V0KQotICAgIHN0YXJ0ID0gQnV0dG9uKG1haW5XaWRnZXQsIHRleHQ9J1ByZXNzIEhlcmUgVG8gU3RhcnQnLCBjb21tYW5kPWdvKQotICAgIHN0YXJ0LnBhY2soKQotICAgIGVuZGl0ID0gQnV0dG9uKG1haW5XaWRnZXQsIHRleHQ9IkV4aXQiLCBjb21tYW5kPXN5cy5leGl0KQotICAgIGVuZGl0LnBhY2soZmlsbD1CT1RIKQotICAgIG1haW5XaWRnZXQubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2VsZWN0cm9ucy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9lbGVjdHJvbnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGI1YzllYzAuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2VsZWN0cm9ucy5weQorKysgL2Rldi9udWxsCkBAIC0xLDkxICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBTaW11bGF0ZSAiZWxlY3Ryb25zIiBtaWdyYXRpbmcgYWNyb3NzIHRoZSBzY3JlZW4uCi0jIEFuIG9wdGlvbmFsIGJpdG1hcCBmaWxlIGluIGNhbiBiZSBpbiB0aGUgYmFja2dyb3VuZC4KLSMKLSMgVXNhZ2U6IGVsZWN0cm9ucyBbbiBbYml0bWFwZmlsZV1dCi0jCi0jIG4gaXMgdGhlIG51bWJlciBvZiBlbGVjdHJvbnMgdG8gYW5pbWF0ZTsgZGVmYXVsdCBpcyAzMC4KLSMKLSMgVGhlIGJpdG1hcCBmaWxlIGNhbiBiZSBhbnkgWDExIGJpdG1hcCBmaWxlIChsb29rIGluCi0jIC91c3IvaW5jbHVkZS9YMTEvYml0bWFwcyBmb3Igc2FtcGxlcyk7IGl0IGlzIGRpc3BsYXllZCBhcyB0aGUKLSMgYmFja2dyb3VuZCBvZiB0aGUgYW5pbWF0aW9uLiAgRGVmYXVsdCBpcyBubyBiaXRtYXAuCi0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotaW1wb3J0IHJhbmRvbQotCi0KLSMgVGhlIGdyYXBoaWNhbCBpbnRlcmZhY2UKLWNsYXNzIEVsZWN0cm9uczoKLQotICAgICMgQ3JlYXRlIG91ciBvYmplY3RzCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG4sIGJpdG1hcCA9IE5vbmUpOgotICAgICAgICBzZWxmLm4gPSBuCi0gICAgICAgIHNlbGYudGsgPSB0ayA9IFRrKCkKLSAgICAgICAgc2VsZi5jYW52YXMgPSBjID0gQ2FudmFzKHRrKQotICAgICAgICBjLnBhY2soKQotICAgICAgICB3aWR0aCwgaGVpZ2h0ID0gdGsuZ2V0aW50KGNbJ3dpZHRoJ10pLCB0ay5nZXRpbnQoY1snaGVpZ2h0J10pCi0KLSAgICAgICAgIyBBZGQgYmFja2dyb3VuZCBiaXRtYXAKLSAgICAgICAgaWYgYml0bWFwOgotICAgICAgICAgICAgc2VsZi5iaXRtYXAgPSBjLmNyZWF0ZV9iaXRtYXAod2lkdGgvMiwgaGVpZ2h0LzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXA9Yml0bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZD0nYmx1ZScpCi0KLSAgICAgICAgc2VsZi5waWVjZXMgPSBbXQotICAgICAgICB4MSwgeTEsIHgyLCB5MiA9IDEwLDcwLDE0LDc0Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgotICAgICAgICAgICAgcCA9IGMuY3JlYXRlX292YWwoeDEsIHkxLCB4MiwgeTIsIGZpbGw9J3JlZCcpCi0gICAgICAgICAgICBzZWxmLnBpZWNlcy5hcHBlbmQocCkKLSAgICAgICAgICAgIHkxLCB5MiA9IHkxICsyLCB5MiArIDIKLSAgICAgICAgc2VsZi50ay51cGRhdGUoKQotCi0gICAgZGVmIHJhbmRvbV9tb3ZlKHNlbGYsIG4pOgotICAgICAgICBjID0gc2VsZi5jYW52YXMKLSAgICAgICAgZm9yIHAgaW4gc2VsZi5waWVjZXM6Ci0gICAgICAgICAgICB4ID0gcmFuZG9tLmNob2ljZShyYW5nZSgtMiw0KSkKLSAgICAgICAgICAgIHkgPSByYW5kb20uY2hvaWNlKHJhbmdlKC0zLDQpKQotICAgICAgICAgICAgYy5tb3ZlKHAsIHgsIHkpCi0gICAgICAgIHNlbGYudGsudXBkYXRlKCkKLQotICAgICMgUnVuIC0tIGFsbG93IDUwMCBtb3ZlbWVucwotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUwMCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5yYW5kb21fbW92ZShzZWxmLm4pCi0gICAgICAgIGV4Y2VwdCBUY2xFcnJvcjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnRrLmRlc3Ryb3koKQotICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLQotCi0jIE1haW4gcHJvZ3JhbQotZGVmIG1haW4oKToKLSAgICBpbXBvcnQgc3lzCi0KLSAgICAjIEZpcnN0IGFyZ3VtZW50IGlzIG51bWJlciBvZiBlbGVjdHJvbnMsIGRlZmF1bHQgMzAKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIG4gPSBpbnQoc3lzLmFyZ3ZbMV0pCi0gICAgZWxzZToKLSAgICAgICAgbiA9IDMwCi0KLSAgICAjIFNlY29uZCBhcmd1bWVudCBpcyBiaXRtYXAgZmlsZSwgZGVmYXVsdCBub25lCi0gICAgaWYgc3lzLmFyZ3ZbMjpdOgotICAgICAgICBiaXRtYXAgPSBzeXMuYXJndlsyXQotICAgICAgICAjIFJldmVyc2UgbWVhbmluZyBvZiBsZWFkaW5nICdAJyBjb21wYXJlZCB0byBUawotICAgICAgICBpZiBiaXRtYXBbMF0gPT0gJ0AnOiBiaXRtYXAgPSBiaXRtYXBbMTpdCi0gICAgICAgIGVsc2U6IGJpdG1hcCA9ICdAJyArIGJpdG1hcAotICAgIGVsc2U6Ci0gICAgICAgIGJpdG1hcCA9IE5vbmUKLQotICAgICMgQ3JlYXRlIHRoZSBncmFwaGljYWwgb2JqZWN0cy4uLgotICAgIGggPSBFbGVjdHJvbnMobiwgYml0bWFwKQotCi0gICAgIyAuLi5hbmQgcnVuIQotICAgIGgucnVuKCkKLQotCi0jIENhbGwgbWFpbiB3aGVuIHJ1biBhcyBzY3JpcHQKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vaGVsbG8ucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vaGVsbG8ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYxMGZiN2EuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2hlbGxvLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyBEaXNwbGF5IGhlbGxvLCB3b3JsZCBpbiBhIGJ1dHRvbjsgY2xpY2tpbmcgaXQgcXVpdHMgdGhlIHByb2dyYW0KLQotaW1wb3J0IHN5cwotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLWRlZiBtYWluKCk6Ci0gICAgcm9vdCA9IFRrKCkKLSAgICBidXR0b24gPSBCdXR0b24ocm9vdCkKLSAgICBidXR0b25bJ3RleHQnXSA9ICdIZWxsbywgd29ybGQnCi0gICAgYnV0dG9uWydjb21tYW5kJ10gPSBxdWl0X2NhbGxiYWNrICAgICAgICMgU2VlIGJlbG93Ci0gICAgYnV0dG9uLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1kZWYgcXVpdF9jYWxsYmFjaygpOgotICAgIHN5cy5leGl0KDApCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2ltYWdlZHJhdy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9pbWFnZWRyYXcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGExNjg4MzEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2ltYWdlZHJhdy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSIiIkRyYXcgb24gdG9wIG9mIGFuIGltYWdlIiIiCi0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotaW1wb3J0IHN5cwotCi1kZWYgbWFpbigpOgotICAgIGZpbGVuYW1lID0gc3lzLmFyZ3ZbMV0KLSAgICByb290ID0gVGsoKQotICAgIGltZyA9IFBob3RvSW1hZ2UoZmlsZT1maWxlbmFtZSkKLSAgICB3LCBoID0gaW1nLndpZHRoKCksIGltZy5oZWlnaHQoKQotICAgIGNhbnYgPSBDYW52YXMocm9vdCwgd2lkdGg9dywgaGVpZ2h0PWgpCi0gICAgY2Fudi5jcmVhdGVfaW1hZ2UoMCwgMCwgYW5jaG9yPU5XLCBpbWFnZT1pbWcpCi0gICAgY2Fudi5wYWNrKCkKLSAgICBjYW52LmJpbmQoJzxCdXR0b24tMT4nLCBibG9iKQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1kZWYgYmxvYihldmVudCk6Ci0gICAgeCwgeSA9IGV2ZW50LngsIGV2ZW50LnkKLSAgICBjYW52ID0gZXZlbnQud2lkZ2V0Ci0gICAgciA9IDUKLSAgICBjYW52LmNyZWF0ZV9vdmFsKHgtciwgeS1yLCB4K3IsIHkrciwgZmlsbD0ncmVkJywgb3V0bGluZT0iIikKLQotbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2V2aWV3LnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2ltYWdldmlldy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjc2ODU4YS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vaW1hZ2V2aWV3LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi1pbXBvcnQgc3lzCi0KLWRlZiBtYWluKCk6Ci0gICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQotICAgIHJvb3QgPSBUaygpCi0gICAgaW1nID0gUGhvdG9JbWFnZShmaWxlPWZpbGVuYW1lKQotICAgIGxhYmVsID0gTGFiZWwocm9vdCwgaW1hZ2U9aW1nKQotICAgIGxhYmVsLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9raWxsLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL2tpbGwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM2Y2FiYTYuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2tpbGwucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIFRraW50ZXIgaW50ZXJmYWNlIHRvIExpbnV4IGBraWxsJyBjb21tYW5kLgotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWZyb20gc3RyaW5nIGltcG9ydCBzcGxpdGZpZWxkcwotZnJvbSBzdHJpbmcgaW1wb3J0IHNwbGl0Ci1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IG9zCi0KLWNsYXNzIEJhckJ1dHRvbihNZW51YnV0dG9uKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqY25mKToKLSAgICAgICAgTWVudWJ1dHRvbi5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqY25mKQotICAgICAgICBzZWxmLnBhY2soc2lkZT1MRUZUKQotICAgICAgICBzZWxmLm1lbnUgPSBNZW51KHNlbGYsIG5hbWU9J21lbnUnKQotICAgICAgICBzZWxmWydtZW51J10gPSBzZWxmLm1lbnUKLQotY2xhc3MgS2lsbChGcmFtZSk6Ci0gICAgIyBMaXN0IG9mIChuYW1lLCBvcHRpb24sIHBpZF9jb2x1bW4pCi0gICAgZm9ybWF0X2xpc3QgPSBbKCdEZWZhdWx0JywgJycsIDApLAotICAgICAgICAgICAgICAgICAgICgnTG9uZycsICctbCcsIDIpLAotICAgICAgICAgICAgICAgICAgICgnVXNlcicsICctdScsIDEpLAotICAgICAgICAgICAgICAgICAgICgnSm9icycsICctaicsIDEpLAotICAgICAgICAgICAgICAgICAgICgnU2lnbmFsJywgJy1zJywgMSksCi0gICAgICAgICAgICAgICAgICAgKCdNZW1vcnknLCAnLW0nLCAwKSwKLSAgICAgICAgICAgICAgICAgICAoJ1ZNJywgJy12JywgMCksCi0gICAgICAgICAgICAgICAgICAgKCdIZXgnLCAnLVgnLCAwKV0KLSAgICBkZWYga2lsbChzZWxmLCBzZWxlY3RlZCk6Ci0gICAgICAgIGMgPSBzZWxmLmZvcm1hdF9saXN0W3NlbGYuZm9ybWF0LmdldCgpXVsyXQotICAgICAgICBwaWQgPSBzcGxpdChzZWxlY3RlZClbY10KLSAgICAgICAgb3Muc3lzdGVtKCdraWxsIC05ICcgKyBwaWQpCi0gICAgICAgIHNlbGYuZG9fdXBkYXRlKCkKLSAgICBkZWYgZG9fdXBkYXRlKHNlbGYpOgotICAgICAgICBuYW1lLCBvcHRpb24sIGNvbHVtbiA9IHNlbGYuZm9ybWF0X2xpc3Rbc2VsZi5mb3JtYXQuZ2V0KCldCi0gICAgICAgIHMgPSBzdWJwcm9jZXNzLmdldG91dHB1dCgncHMgLXcgJyArIG9wdGlvbikKLSAgICAgICAgbGlzdCA9IHNwbGl0ZmllbGRzKHMsICdcbicpCi0gICAgICAgIHNlbGYuaGVhZGVyLnNldChsaXN0WzBdKQotICAgICAgICBkZWwgbGlzdFswXQotICAgICAgICB5ID0gc2VsZi5mcmFtZS52c2Nyb2xsLmdldCgpWzBdCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdC5kZWxldGUoMCwgQXRFbmQoKSkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGlzdDoKLSAgICAgICAgICAgIHNlbGYuZnJhbWUubGlzdC5pbnNlcnQoMCwgbGluZSkKLSAgICAgICAgc2VsZi5mcmFtZS5saXN0Lnl2aWV3KGludCh5KSkKLSAgICBkZWYgZG9fbW90aW9uKHNlbGYsIGUpOgotICAgICAgICBlLndpZGdldC5zZWxlY3RfY2xlYXIoMCwgRU5EKQotICAgICAgICBlLndpZGdldC5zZWxlY3Rfc2V0KGUud2lkZ2V0Lm5lYXJlc3QoZS55KSkKLSAgICBkZWYgZG9fbGVhdmUoc2VsZiwgZSk6Ci0gICAgICAgIGUud2lkZ2V0LnNlbGVjdF9jbGVhcigwLCBFTkQpCi0gICAgZGVmIGRvXzEoc2VsZiwgZSk6Ci0gICAgICAgIHNlbGYua2lsbChlLndpZGdldC5nZXQoZS53aWRnZXQubmVhcmVzdChlLnkpKSkKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqY25mKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyLCBjbmYpCi0gICAgICAgIHNlbGYucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmJhciA9IEZyYW1lKHNlbGYsIG5hbWU9J2JhcicsIHJlbGllZj1SQUlTRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGg9MikKLSAgICAgICAgc2VsZi5iYXIucGFjayhmaWxsPVgpCi0gICAgICAgIHNlbGYuYmFyLmZpbGUgPSBCYXJCdXR0b24oc2VsZi5iYXIsIHRleHQ9J0ZpbGUnKQotICAgICAgICBzZWxmLmJhci5maWxlLm1lbnUuYWRkX2NvbW1hbmQoCi0gICAgICAgICAgICAgICAgbGFiZWw9J1F1aXQnLCBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5iYXIudmlldyA9IEJhckJ1dHRvbihzZWxmLmJhciwgdGV4dD0nVmlldycpCi0gICAgICAgIHNlbGYuZm9ybWF0ID0gSW50VmFyKHNlbGYpCi0gICAgICAgIHNlbGYuZm9ybWF0LnNldCgyKQotICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGxlbihzZWxmLmZvcm1hdF9saXN0KSk6Ci0gICAgICAgICAgICBzZWxmLmJhci52aWV3Lm1lbnUuYWRkX3JhZGlvYnV0dG9uKAotICAgICAgICAgICAgICAgICAgICBsYWJlbD1zZWxmLmZvcm1hdF9saXN0W251bV1bMF0sCi0gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5kb191cGRhdGUsCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICB2YWx1ZT1udW0pCi0gICAgICAgICNzZWxmLmJhci52aWV3Lm1lbnUuYWRkX3NlcGFyYXRvcigpCi0gICAgICAgICNYWFggLi4uCi0gICAgICAgIHNlbGYuYmFyLnRrX21lbnVCYXIoc2VsZi5iYXIuZmlsZSwgc2VsZi5iYXIudmlldykKLSAgICAgICAgc2VsZi5mcmFtZSA9IEZyYW1lKHNlbGYsIHJlbGllZj1SQUlTRUQsIGJvcmRlcndpZHRoPTIpCi0gICAgICAgIHNlbGYuZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmhlYWRlciA9IFN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZyYW1lLmxhYmVsID0gTGFiZWwoc2VsZi5mcmFtZSwgcmVsaWVmPUZMQVQsIGFuY2hvcj1OVywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0dmFyaWFibGU9c2VsZi5oZWFkZXIpCi0gICAgICAgIHNlbGYuZnJhbWUubGFiZWwucGFjayhmaWxsPVgpCi0gICAgICAgIHNlbGYuZnJhbWUudnNjcm9sbCA9IFNjcm9sbGJhcihzZWxmLmZyYW1lLCBvcmllbnQ9VkVSVElDQUwpCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdCA9IExpc3Rib3goc2VsZi5mcmFtZSwgcmVsaWVmPVNVTktFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RiYWNrZ3JvdW5kPScjZWVkNWI3JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rib3JkZXJ3aWR0aD0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlzY3JvbGw9c2VsZi5mcmFtZS52c2Nyb2xsLnNldCkKLSAgICAgICAgc2VsZi5mcmFtZS52c2Nyb2xsWydjb21tYW5kJ10gPSBzZWxmLmZyYW1lLmxpc3QueXZpZXcKLSAgICAgICAgc2VsZi5mcmFtZS52c2Nyb2xsLnBhY2soc2lkZT1SSUdIVCwgZmlsbD1ZKQotICAgICAgICBzZWxmLmZyYW1lLmxpc3QucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLnVwZGF0ZSA9IEJ1dHRvbihzZWxmLCB0ZXh0PSJVcGRhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuZG9fdXBkYXRlKQotICAgICAgICBzZWxmLnVwZGF0ZS5wYWNrKGV4cGFuZD0xLCBmaWxsPVgpCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdC5iaW5kKCc8TW90aW9uPicsIHNlbGYuZG9fbW90aW9uKQotICAgICAgICBzZWxmLmZyYW1lLmxpc3QuYmluZCgnPExlYXZlPicsIHNlbGYuZG9fbGVhdmUpCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdC5iaW5kKCc8MT4nLCBzZWxmLmRvXzEpCi0gICAgICAgIHNlbGYuZG9fdXBkYXRlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBraWxsID0gS2lsbChOb25lLCBib3JkZXJ3aWR0aD01KQotICAgIGtpbGwud2luZm9fdG9wbGV2ZWwoKS50aXRsZSgnVGtpbnRlciBQcm9jZXNzIEtpbGxlcicpCi0gICAga2lsbC53aW5mb190b3BsZXZlbCgpLm1pbnNpemUoMSwgMSkKLSAgICBraWxsLm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9saXN0dHJlZS5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9saXN0dHJlZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGRiNWI2MC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vbGlzdHRyZWUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIExpc3QgYSByZW1vdGUgYXBwJ3Mgd2lkZ2V0IHRyZWUgKG5hbWVzIGFuZCBjbGFzc2VzIG9ubHkpCi0KLWltcG9ydCBzeXMKLQotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLWRlZiBsaXN0dHJlZShtYXN0ZXIsIGFwcCk6Ci0gICAgbGlzdCA9IExpc3Rib3gobWFzdGVyLCBuYW1lPSdsaXN0JykKLSAgICBsaXN0LnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICBsaXN0bm9kZXMobGlzdCwgYXBwLCAnLicsIDApCi0gICAgcmV0dXJuIGxpc3QKLQotZGVmIGxpc3Rub2RlcyhsaXN0LCBhcHAsIHdpZGdldCwgbGV2ZWwpOgotICAgIGtsYXNzID0gbGlzdC5zZW5kKGFwcCwgJ3dpbmZvJywgJ2NsYXNzJywgd2lkZ2V0KQotICAgIGxpc3QuaW5zZXJ0KEVORCwgJyVzICglcyknICUgKHdpZGdldCwga2xhc3MpKQotICAgIGNoaWxkcmVuID0gbGlzdC50ay5zcGxpdGxpc3QoCi0gICAgICAgICAgICBsaXN0LnNlbmQoYXBwLCAnd2luZm8nLCAnY2hpbGRyZW4nLCB3aWRnZXQpKQotICAgIGZvciBjIGluIGNoaWxkcmVuOgotICAgICAgICBsaXN0bm9kZXMobGlzdCwgYXBwLCBjLCBsZXZlbCsxKQotCi1kZWYgbWFpbigpOgotICAgIGlmIG5vdCBzeXMuYXJndlsxOl06Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ1VzYWdlOiBsaXN0dHJlZSBhcHBuYW1lXG4nKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIGFwcCA9IHN5cy5hcmd2WzFdCi0gICAgdGsgPSBUaygpCi0gICAgdGsubWluc2l6ZSgxLCAxKQotICAgIGYgPSBGcmFtZSh0aywgbmFtZT0nZicpCi0gICAgZi5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgbGlzdCA9IGxpc3R0cmVlKGYsIGFwcCkKLSAgICB0ay5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vbWFucGFnZS5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9tYW5wYWdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTBjNjc1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9tYW5wYWdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLSMgV2lkZ2V0IHRvIGRpc3BsYXkgYSBtYW4gcGFnZQotCi1pbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN5cwotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWZyb20gdGtpbnRlci5mb250IGltcG9ydCBGb250Ci1mcm9tIHRraW50ZXIuc2Nyb2xsZWR0ZXh0IGltcG9ydCBTY3JvbGxlZFRleHQKLQotIyBYWFggUmVjb2duaXppbmcgZm9vdGVycyBpcyBzeXN0ZW0gZGVwZW5kZW50Ci0jIChUaGlzIG9uZSB3b3JrcyBmb3IgSVJJWCA1LjIgYW5kIFNvbGFyaXMgMi4yKQotZm9vdGVycHJvZyA9IHJlLmNvbXBpbGUoCi0gICAgICAgICdeICAgICBQYWdlIFsxLTldWzAtOV0qWyBcdF0rXHxeLipMYXN0IGNoYW5nZTouKlsxLTldWzAtOV0qXG4nKQotZW1wdHlwcm9nID0gcmUuY29tcGlsZSgnXlsgXHRdKlxuJykKLXVscHJvZyA9IHJlLmNvbXBpbGUoJ15bIFx0XSpbWHYhX11bWHYhXyBcdF0qXG4nKQotCi0KLWNsYXNzIEVkaXRhYmxlTWFuUGFnZShTY3JvbGxlZFRleHQpOgotICAgICIiIkJhc2ljIE1hbiBQYWdlIGNsYXNzIC0tIGRvZXMgbm90IGRpc2FibGUgZWRpdGluZy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKipjbmYpOgotICAgICAgICBTY3JvbGxlZFRleHQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAqKmNuZikKLQotICAgICAgICBib2xkID0gRm9udChmb250PXNlbGZbJ2ZvbnQnXSkuY29weSgpCi0gICAgICAgIGJvbGQuY29uZmlnKHdlaWdodD0nYm9sZCcpCi0gICAgICAgIGl0YWxpYyA9IEZvbnQoZm9udD1zZWxmWydmb250J10pLmNvcHkoKQotICAgICAgICBpdGFsaWMuY29uZmlnKHNsYW50PSdpdGFsaWMnKQotCi0gICAgICAgICMgRGVmaW5lIHRhZ3MgZm9yIGZvcm1hdHRpbmcgc3R5bGVzCi0gICAgICAgIHNlbGYudGFnX2NvbmZpZygnWCcsIHVuZGVybGluZT0xKQotICAgICAgICBzZWxmLnRhZ19jb25maWcoJyEnLCBmb250PWJvbGQpCi0gICAgICAgIHNlbGYudGFnX2NvbmZpZygnXycsIGZvbnQ9aXRhbGljKQotCi0gICAgICAgICMgU2V0IHN0YXRlIHRvIGlkbGUKLSAgICAgICAgc2VsZi5mcCA9IE5vbmUKLSAgICAgICAgc2VsZi5saW5lbm8gPSAwCi0KLSAgICBkZWYgYnVzeShzZWxmKToKLSAgICAgICAgIiIiVGVzdCB3aGV0aGVyIHdlIGFyZSBidXN5IHBhcnNpbmcgYSBmaWxlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5mcCAhPSBOb25lCi0KLSAgICBkZWYga2lsbChzZWxmKToKLSAgICAgICAgIiIiRW5zdXJlIHdlJ3JlIG5vdCBidXN5LiIiIgotICAgICAgICBpZiBzZWxmLmJ1c3koKToKLSAgICAgICAgICAgIHNlbGYuX2VuZHBhcnNlcigpCi0KLSAgICBkZWYgYXN5bmNwYXJzZWZpbGUoc2VsZiwgZnApOgotICAgICAgICAiIiJQYXJzZSBhIGZpbGUsIGluIHRoZSBiYWNrZ3JvdW5kLiIiIgotICAgICAgICBzZWxmLl9zdGFydHBhcnNlcihmcCkKLSAgICAgICAgc2VsZi50ay5jcmVhdGVmaWxlaGFuZGxlcihmcCwgUkVBREFCTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZWhhbmRsZXIpCi0KLSAgICBwYXJzZWZpbGUgPSBhc3luY3BhcnNlZmlsZSAgICMgQWxpYXMKLQotICAgIGRlZiBfZmlsZWhhbmRsZXIoc2VsZiwgZnAsIG1hc2spOgotICAgICAgICAiIiJJL08gaGFuZGxlciB1c2VkIGJ5IGJhY2tncm91bmQgcGFyc2luZy4iIiIKLSAgICAgICAgbmV4dGxpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IG5leHRsaW5lOgotICAgICAgICAgICAgc2VsZi5fZW5kcGFyc2VyKCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9wYXJzZWxpbmUobmV4dGxpbmUpCi0KLSAgICBkZWYgc3luY3BhcnNlZmlsZShzZWxmLCBmcCk6Ci0gICAgICAgICIiIlBhcnNlIGEgZmlsZSwgbm93IChjYW5ub3QgYmUgYWJvcnRlZCkuIiIiCi0gICAgICAgIHNlbGYuX3N0YXJ0cGFyc2VyKGZwKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgbmV4dGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbmV4dGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlbGluZShuZXh0bGluZSkKLSAgICAgICAgc2VsZi5fZW5kcGFyc2VyKCkKLQotICAgIGRlZiBfc3RhcnRwYXJzZXIoc2VsZiwgZnApOgotICAgICAgICAiIiJJbml0aWFsaXplIHBhcnNpbmcgZnJvbSBhIHBhcnRpY3VsYXIgZmlsZSAtLSBtdXN0IG5vdCBiZSBidXN5LiIiIgotICAgICAgICBpZiBzZWxmLmJ1c3koKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc3RhcnRwYXJzZXI6IHN0aWxsIGJ1c3knKQotICAgICAgICBmcC5maWxlbm8oKSAgICAgICAgICAgICAjIFRlc3QgZm9yIGZpbGUtbmVzcwotICAgICAgICBzZWxmLmZwID0gZnAKLSAgICAgICAgc2VsZi5saW5lbm8gPSAwCi0gICAgICAgIHNlbGYub2sgPSAwCi0gICAgICAgIHNlbGYuZW1wdHkgPSAwCi0gICAgICAgIHNlbGYuYnVmZmVyID0gTm9uZQotICAgICAgICBzYXZlc3RhdGUgPSBzZWxmWydzdGF0ZSddCi0gICAgICAgIHNlbGZbJ3N0YXRlJ10gPSBOT1JNQUwKLSAgICAgICAgc2VsZi5kZWxldGUoJzEuMCcsIEVORCkKLSAgICAgICAgc2VsZlsnc3RhdGUnXSA9IHNhdmVzdGF0ZQotCi0gICAgZGVmIF9lbmRwYXJzZXIoc2VsZik6Ci0gICAgICAgICIiIkVuZCBwYXJzaW5nIC0tIG11c3QgYmUgYnVzeSwgbmVlZCBub3QgYmUgYXQgRU9GLiIiIgotICAgICAgICBpZiBub3Qgc2VsZi5idXN5KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2VuZHBhcnNlcjogbm90IGJ1c3knKQotICAgICAgICBpZiBzZWxmLmJ1ZmZlcjoKLSAgICAgICAgICAgIHNlbGYuX3BhcnNlbGluZSgnJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi50ay5kZWxldGVmaWxlaGFuZGxlcihzZWxmLmZwKQotICAgICAgICBleGNlcHQgVGNsRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuZnAuY2xvc2UoKQotICAgICAgICBzZWxmLmZwID0gTm9uZQotICAgICAgICBkZWwgc2VsZi5vaywgc2VsZi5lbXB0eSwgc2VsZi5idWZmZXIKLQotICAgIGRlZiBfcGFyc2VsaW5lKHNlbGYsIG5leHRsaW5lKToKLSAgICAgICAgIiIiUGFyc2UgYSBzaW5nbGUgbGluZS4iIiIKLSAgICAgICAgaWYgbm90IHNlbGYuYnVmZmVyOgotICAgICAgICAgICAgIyBTYXZlIHRoaXMgbGluZSAtLSB3ZSBuZWVkIG9uZSBsaW5lIHJlYWQtYWhlYWQKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbmV4dGxpbmUKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBlbXB0eXByb2cubWF0Y2goc2VsZi5idWZmZXIpOgotICAgICAgICAgICAgIyBCdWZmZXJlZCBsaW5lIHdhcyBlbXB0eSAtLSBzZXQgYSBmbGFnCi0gICAgICAgICAgICBzZWxmLmVtcHR5ID0gMQotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBuZXh0bGluZQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRleHRsaW5lID0gc2VsZi5idWZmZXIKLSAgICAgICAgaWYgdWxwcm9nLm1hdGNoKG5leHRsaW5lKToKLSAgICAgICAgICAgICMgTmV4dCBsaW5lIGlzIHByb3BlcnRpZXMgZm9yIGJ1ZmZlcmVkIGxpbmUKLSAgICAgICAgICAgIHByb3BsaW5lID0gbmV4dGxpbmUKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBOZXh0IGxpbmUgaXMgcmVhZC1haGVhZAotICAgICAgICAgICAgcHJvcGxpbmUgPSBOb25lCi0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IG5leHRsaW5lCi0gICAgICAgIGlmIG5vdCBzZWxmLm9rOgotICAgICAgICAgICAgIyBGaXJzdCBub24gYmxhbmsgbGluZSBhZnRlciBmb290ZXIgbXVzdCBiZSBoZWFkZXIKLSAgICAgICAgICAgICMgLS0gc2tpcCB0aGF0IHRvbwotICAgICAgICAgICAgc2VsZi5vayA9IDEKLSAgICAgICAgICAgIHNlbGYuZW1wdHkgPSAwCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgZm9vdGVycHJvZy5tYXRjaCh0ZXh0bGluZSk6Ci0gICAgICAgICAgICAjIEZvb3RlciAtLSBzdGFydCBza2lwcGluZyB1bnRpbCBuZXh0IG5vbi1ibGFuayBsaW5lCi0gICAgICAgICAgICBzZWxmLm9rID0gMAotICAgICAgICAgICAgc2VsZi5lbXB0eSA9IDAKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzYXZlc3RhdGUgPSBzZWxmWydzdGF0ZSddCi0gICAgICAgIHNlbGZbJ3N0YXRlJ10gPSBOT1JNQUwKLSAgICAgICAgaWYgVGtWZXJzaW9uID49IDQuMDoKLSAgICAgICAgICAgIHNlbGYubWFya19zZXQoJ2luc2VydCcsICdlbmQtMWMnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tYXJrX3NldCgnaW5zZXJ0JywgRU5EKQotICAgICAgICBpZiBzZWxmLmVtcHR5OgotICAgICAgICAgICAgIyBPbmUgb3IgbW9yZSBwcmV2aW91cyBsaW5lcyB3ZXJlIGVtcHR5Ci0gICAgICAgICAgICAjIC0tIGluc2VydCBvbmUgYmxhbmsgbGluZSBpbiB0aGUgdGV4dAotICAgICAgICAgICAgc2VsZi5faW5zZXJ0X3Byb3AoJ1xuJykKLSAgICAgICAgICAgIHNlbGYubGluZW5vID0gc2VsZi5saW5lbm8gKyAxCi0gICAgICAgICAgICBzZWxmLmVtcHR5ID0gMAotICAgICAgICBpZiBub3QgcHJvcGxpbmU6Ci0gICAgICAgICAgICAjIE5vIHByb3BlcnRpZXMKLSAgICAgICAgICAgIHNlbGYuX2luc2VydF9wcm9wKHRleHRsaW5lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBTZWFyY2ggZm9yIHByb3BlcnRpZXMKLSAgICAgICAgICAgIHAgPSAnJwotICAgICAgICAgICAgaiA9IDAKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4ocHJvcGxpbmUpLCBsZW4odGV4dGxpbmUpKSk6Ci0gICAgICAgICAgICAgICAgaWYgcHJvcGxpbmVbaV0gIT0gcDoKLSAgICAgICAgICAgICAgICAgICAgaWYgaiA8IGk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnNlcnRfcHJvcCh0ZXh0bGluZVtqOmldLCBwKQotICAgICAgICAgICAgICAgICAgICAgICAgaiA9IGkKLSAgICAgICAgICAgICAgICAgICAgcCA9IHByb3BsaW5lW2ldCi0gICAgICAgICAgICBzZWxmLl9pbnNlcnRfcHJvcCh0ZXh0bGluZVtqOl0pCi0gICAgICAgIHNlbGYubGluZW5vID0gc2VsZi5saW5lbm8gKyAxCi0gICAgICAgIHNlbGZbJ3N0YXRlJ10gPSBzYXZlc3RhdGUKLQotICAgIGRlZiBfaW5zZXJ0X3Byb3Aoc2VsZiwgc3RyLCBwcm9wID0gJyAnKToKLSAgICAgICAgIiIiSW5zZXJ0IGEgc3RyaW5nIGF0IHRoZSBlbmQsIHdpdGggYXQgbW9zdCBvbmUgcHJvcGVydHkgKHRhZykuIiIiCi0gICAgICAgIGhlcmUgPSBzZWxmLmluZGV4KEF0SW5zZXJ0KCkpCi0gICAgICAgIHNlbGYuaW5zZXJ0KEF0SW5zZXJ0KCksIHN0cikKLSAgICAgICAgaWYgVGtWZXJzaW9uIDw9IDQuMDoKLSAgICAgICAgICAgIHRhZ3MgPSBzZWxmLnRhZ19uYW1lcyhoZXJlKQotICAgICAgICAgICAgZm9yIHRhZyBpbiB0YWdzOgotICAgICAgICAgICAgICAgIHNlbGYudGFnX3JlbW92ZSh0YWcsIGhlcmUsIEF0SW5zZXJ0KCkpCi0gICAgICAgIGlmIHByb3AgIT0gJyAnOgotICAgICAgICAgICAgc2VsZi50YWdfYWRkKHByb3AsIGhlcmUsIEF0SW5zZXJ0KCkpCi0KLQotY2xhc3MgUmVhZG9ubHlNYW5QYWdlKEVkaXRhYmxlTWFuUGFnZSk6Ci0gICAgIiIiUmVhZG9ubHkgTWFuIFBhZ2UgY2xhc3MgLS0gZGlzYWJsZXMgZWRpdGluZywgb3RoZXJ3aXNlIHRoZSBzYW1lLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCAqKmNuZik6Ci0gICAgICAgIGNuZlsnc3RhdGUnXSA9IERJU0FCTEVECi0gICAgICAgIEVkaXRhYmxlTWFuUGFnZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqY25mKQotCi0jIEFsaWFzCi1NYW5QYWdlID0gUmVhZG9ubHlNYW5QYWdlCi0KLSMgdXNhZ2U6IE1hblBhZ2UgW21hbnBhZ2VdOyBvciBNYW5QYWdlIFstZl0gZmlsZQotIyAtZiBtZWFucyB0aGF0IHRoZSBmaWxlIGlzIG5yb2ZmIC1tYW4gb3V0cHV0IHJ1biB0aHJvdWdoIHVsIC1pCi1kZWYgbWFpbigpOgotICAgICMgWFhYIFRoaXMgZGlyZWN0b3J5IG1heSBiZSBkaWZmZXJlbnQgb24geW91ciBzeXN0ZW0KLSAgICBNQU5ESVIgPSAnJwotICAgIERFRkFVTFRQQUdFID0gJ1RjbCcKLSAgICBmb3JtYXR0ZWQgPSAwCi0gICAgaWYgc3lzLmFyZ3ZbMTpdIGFuZCBzeXMuYXJndlsxXSA9PSAnLWYnOgotICAgICAgICBmb3JtYXR0ZWQgPSAxCi0gICAgICAgIGRlbCBzeXMuYXJndlsxXQotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgbmFtZSA9IHN5cy5hcmd2WzFdCi0gICAgZWxzZToKLSAgICAgICAgbmFtZSA9IERFRkFVTFRQQUdFCi0gICAgaWYgbm90IGZvcm1hdHRlZDoKLSAgICAgICAgaWYgbmFtZVstMjotMV0gIT0gJy4nOgotICAgICAgICAgICAgbmFtZSA9IG5hbWUgKyAnLm4nCi0gICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oTUFORElSLCBuYW1lKQotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC5taW5zaXplKDEsIDEpCi0gICAgbWFucGFnZSA9IE1hblBhZ2Uocm9vdCwgcmVsaWVmPVNVTktFTiwgYm9yZGVyd2lkdGg9MikKLSAgICBtYW5wYWdlLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICBpZiBmb3JtYXR0ZWQ6Ci0gICAgICAgIGZwID0gb3BlbihuYW1lLCAncicpCi0gICAgZWxzZToKLSAgICAgICAgZnAgPSBvcy5wb3BlbignbnJvZmYgLW1hbiAtYyAlcyB8IHVsIC1pJyAlIG5hbWUsICdyJykKLSAgICBtYW5wYWdlLnBhcnNlZmlsZShmcCkKLSAgICByb290Lm1haW5sb29wKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9tYm94LnB5IGIvRGVtby90a2ludGVyL2d1aWRvL21ib3gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDc1NGEzMTIuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL21ib3gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyODYgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIFNjYW4gTUggZm9sZGVyLCBkaXNwbGF5IHJlc3VsdHMgaW4gd2luZG93Ci0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgbWFpbGJveAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLWZyb20gZGlhbG9nIGltcG9ydCBkaWFsb2cKLQotTUJPWFBBVEggPSBvcy5lbnZpcm9uWydIT01FJ10gKyAnL01haWwnCi0KLWRlZiBtYWluKCk6Ci0gICAgZ2xvYmFsIHJvb3QsIHRrLCB0b3AsIG1pZCwgYm90Ci0gICAgZ2xvYmFsIGZvbGRlcmJveCwgZm9sZGVybWVudSwgc2NhbmJveCwgc2Nhbm1lbnUsIHZpZXdlcgotICAgIGdsb2JhbCBmb2xkZXIsIHNlcQotICAgIGdsb2JhbCBtaCwgbWhmCi0KLSAgICAjIFBhcnNlIGNvbW1hbmQgbGluZSBvcHRpb25zCi0KLSAgICBmb2xkZXIgPSAnaW5ib3gnCi0gICAgc2VxID0gJ2FsbCcKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJycpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KG1zZykKLSAgICAgICAgc3lzLmV4aXQoMikKLSAgICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgICAgIGlmIGFyZ1s6MV0gPT0gJysnOgotICAgICAgICAgICAgZm9sZGVyID0gYXJnWzE6XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VxID0gYXJnCi0KLSAgICAjIEluaXRpYWxpemUgTUgKLQotICAgIG1oID0gbWFpbGJveC5NSChNQk9YUEFUSCkKLSAgICBtaGYgPSBtaC5nZXRfZm9sZGVyKGZvbGRlcikKLQotICAgICMgQnVpbGQgd2lkZ2V0IGhpZXJhcmNoeQotCi0gICAgcm9vdCA9IFRrKCkKLSAgICB0ayA9IHJvb3QudGsKLQotICAgIHRvcCA9IEZyYW1lKHJvb3QpCi0gICAgdG9wLnBhY2soeydleHBhbmQnOiAxLCAnZmlsbCc6ICdib3RoJ30pCi0KLSAgICAjIEJ1aWxkIHJpZ2h0IHBhcnQ6IGZvbGRlciBsaXN0Ci0KLSAgICByaWdodCA9IEZyYW1lKHRvcCkKLSAgICByaWdodC5wYWNrKHsnZmlsbCc6ICd5JywgJ3NpZGUnOiAncmlnaHQnfSkKLQotICAgIGZvbGRlcmJhciA9IFNjcm9sbGJhcihyaWdodCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMn0pCi0gICAgZm9sZGVyYmFyLnBhY2soeydmaWxsJzogJ3knLCAnc2lkZSc6ICdyaWdodCd9KQotCi0gICAgZm9sZGVyYm94ID0gTGlzdGJveChyaWdodCwgeydleHBvcnRzZWxlY3Rpb24nOiAwfSkKLSAgICBmb2xkZXJib3gucGFjayh7J2V4cGFuZCc6IDEsICdmaWxsJzogJ2JvdGgnLCAnc2lkZSc6ICdsZWZ0J30pCi0KLSAgICBmb2xkZXJtZW51ID0gTWVudShyb290KQotICAgIGZvbGRlcm1lbnUuYWRkKCdjb21tYW5kJywKLSAgICAgICAgICAgICAgICAgICB7J2xhYmVsJzogJ09wZW4gRm9sZGVyJywKLSAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOiBvcGVuX2ZvbGRlcn0pCi0gICAgZm9sZGVybWVudS5hZGQoJ3NlcGFyYXRvcicpCi0gICAgZm9sZGVybWVudS5hZGQoJ2NvbW1hbmQnLAotICAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiAnUXVpdCcsCi0gICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogJ2V4aXQnfSkKLSAgICBmb2xkZXJtZW51LmJpbmQoJzxCdXR0b25SZWxlYXNlLTM+JywgZm9sZGVyX3VucG9zdCkKLQotICAgIGZvbGRlcmJveFsneXNjcm9sbGNvbW1hbmQnXSA9IChmb2xkZXJiYXIsICdzZXQnKQotICAgIGZvbGRlcmJhclsnY29tbWFuZCddID0gKGZvbGRlcmJveCwgJ3l2aWV3JykKLSAgICBmb2xkZXJib3guYmluZCgnPERvdWJsZS0xPicsIG9wZW5fZm9sZGVyLCAxKQotICAgIGZvbGRlcmJveC5iaW5kKCc8Mz4nLCBmb2xkZXJfcG9zdCkKLQotICAgICMgQnVpbGQgbGVmdCBwYXJ0OiBzY2FuIGxpc3QKLQotICAgIGxlZnQgPSBGcmFtZSh0b3ApCi0gICAgbGVmdC5wYWNrKHsnZXhwYW5kJzogMSwgJ2ZpbGwnOiAnYm90aCcsICdzaWRlJzogJ2xlZnQnfSkKLQotICAgIHNjYW5iYXIgPSBTY3JvbGxiYXIobGVmdCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMn0pCi0gICAgc2NhbmJhci5wYWNrKHsnZmlsbCc6ICd5JywgJ3NpZGUnOiAncmlnaHQnfSkKLQotICAgIHNjYW5ib3ggPSBMaXN0Ym94KGxlZnQsIHsnZm9udCc6ICdmaXhlZCd9KQotICAgIHNjYW5ib3gucGFjayh7J2V4cGFuZCc6IDEsICdmaWxsJzogJ2JvdGgnLCAnc2lkZSc6ICdsZWZ0J30pCi0KLSAgICBzY2FubWVudSA9IE1lbnUocm9vdCkKLSAgICBzY2FubWVudS5hZGQoJ2NvbW1hbmQnLAotICAgICAgICAgICAgICAgICB7J2xhYmVsJzogJ09wZW4gTWVzc2FnZScsCi0gICAgICAgICAgICAgICAgICAnY29tbWFuZCc6IG9wZW5fbWVzc2FnZX0pCi0gICAgc2Nhbm1lbnUuYWRkKCdjb21tYW5kJywKLSAgICAgICAgICAgICAgICAgeydsYWJlbCc6ICdSZW1vdmUgTWVzc2FnZScsCi0gICAgICAgICAgICAgICAgICAnY29tbWFuZCc6IHJlbW92ZV9tZXNzYWdlfSkKLSAgICBzY2FubWVudS5hZGQoJ2NvbW1hbmQnLAotICAgICAgICAgICAgICAgICB7J2xhYmVsJzogJ1JlZmlsZSBNZXNzYWdlJywKLSAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogcmVmaWxlX21lc3NhZ2V9KQotICAgIHNjYW5tZW51LmFkZCgnc2VwYXJhdG9yJykKLSAgICBzY2FubWVudS5hZGQoJ2NvbW1hbmQnLAotICAgICAgICAgICAgICAgICB7J2xhYmVsJzogJ1F1aXQnLAotICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOiAnZXhpdCd9KQotICAgIHNjYW5tZW51LmJpbmQoJzxCdXR0b25SZWxlYXNlLTM+Jywgc2Nhbl91bnBvc3QpCi0KLSAgICBzY2FuYm94Wyd5c2Nyb2xsY29tbWFuZCddID0gKHNjYW5iYXIsICdzZXQnKQotICAgIHNjYW5iYXJbJ2NvbW1hbmQnXSA9IChzY2FuYm94LCAneXZpZXcnKQotICAgIHNjYW5ib3guYmluZCgnPERvdWJsZS0xPicsIG9wZW5fbWVzc2FnZSkKLSAgICBzY2FuYm94LmJpbmQoJzwzPicsIHNjYW5fcG9zdCkKLQotICAgICMgU2VwYXJhdG9yIGJldHdlZW4gbWlkZGxlIGFuZCBib3R0b20gcGFydAotCi0gICAgcnVsZTIgPSBGcmFtZShyb290LCB7J2JnJzogJ2JsYWNrJ30pCi0gICAgcnVsZTIucGFjayh7J2ZpbGwnOiAneCd9KQotCi0gICAgIyBCdWlsZCBib3R0b20gcGFydDogY3VycmVudCBtZXNzYWdlCi0KLSAgICBib3QgPSBGcmFtZShyb290KQotICAgIGJvdC5wYWNrKHsnZXhwYW5kJzogMSwgJ2ZpbGwnOiAnYm90aCd9KQotICAgICMKLSAgICB2aWV3ZXIgPSBOb25lCi0KLSAgICAjIFdpbmRvdyBtYW5hZ2VyIGNvbW1hbmRzCi0KLSAgICByb290Lm1pbnNpemUoODAwLCAxKSAjIE1ha2Ugd2luZG93IHJlc2l6YWJsZQotCi0gICAgIyBGaWxsIGZvbGRlcmJveCB3aXRoIHRleHQKLQotICAgIHNldGZvbGRlcnMoKQotCi0gICAgIyBGaWxsIHNjYW5ib3ggd2l0aCB0ZXh0Ci0KLSAgICByZXNjYW4oKQotCi0gICAgIyBFbnRlciBtYWlubG9vcAotCi0gICAgcm9vdC5tYWlubG9vcCgpCi0KLWRlZiBmb2xkZXJfcG9zdChlKToKLSAgICB4LCB5ID0gZS54X3Jvb3QsIGUueV9yb290Ci0gICAgZm9sZGVybWVudS5wb3N0KHggLSAxMCwgeSAtIDEwKQotICAgIGZvbGRlcm1lbnUuZ3JhYl9zZXQoKQotCi1kZWYgZm9sZGVyX3VucG9zdChlKToKLSAgICB0ay5jYWxsKCd1cGRhdGUnLCAnaWRsZXRhc2tzJykKLSAgICBmb2xkZXJtZW51LmdyYWJfcmVsZWFzZSgpCi0gICAgZm9sZGVybWVudS51bnBvc3QoKQotICAgIGZvbGRlcm1lbnUuaW52b2tlKCdhY3RpdmUnKQotCi1kZWYgc2Nhbl9wb3N0KGUpOgotICAgIHgsIHkgPSBlLnhfcm9vdCwgZS55X3Jvb3QKLSAgICBzY2FubWVudS5wb3N0KHggLSAxMCwgeSAtIDEwKQotICAgIHNjYW5tZW51LmdyYWJfc2V0KCkKLQotZGVmIHNjYW5fdW5wb3N0KGUpOgotICAgIHRrLmNhbGwoJ3VwZGF0ZScsICdpZGxldGFza3MnKQotICAgIHNjYW5tZW51LmdyYWJfcmVsZWFzZSgpCi0gICAgc2Nhbm1lbnUudW5wb3N0KCkKLSAgICBzY2FubWVudS5pbnZva2UoJ2FjdGl2ZScpCi0KLXNjYW5wYXJzZXIgPSByZS5jb21waWxlKCdeICooWzAtOV0rKScpCi0KLWRlZiBvcGVuX2ZvbGRlcihlPU5vbmUpOgotICAgIGdsb2JhbCBmb2xkZXIsIG1oZgotICAgIHNlbCA9IGZvbGRlcmJveC5jdXJzZWxlY3Rpb24oKQotICAgIGlmIGxlbihzZWwpICE9IDE6Ci0gICAgICAgIGlmIGxlbihzZWwpID4gMToKLSAgICAgICAgICAgIG1zZyA9ICJQbGVhc2Ugb3BlbiBvbmUgZm9sZGVyIGF0IGEgdGltZSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICJQbGVhc2Ugc2VsZWN0IGEgZm9sZGVyIHRvIG9wZW4iCi0gICAgICAgIGRpYWxvZyhyb290LCAiQ2FuJ3QgT3BlbiBGb2xkZXIiLCBtc2csICIiLCAwLCAiT0siKQotICAgICAgICByZXR1cm4KLSAgICBpID0gc2VsWzBdCi0gICAgZm9sZGVyID0gZm9sZGVyYm94LmdldChpKQotICAgIG1oZiA9IG1oLmdldF9mb2xkZXIoZm9sZGVyKQotICAgIHJlc2NhbigpCi0KLWRlZiBvcGVuX21lc3NhZ2UoZT1Ob25lKToKLSAgICBnbG9iYWwgdmlld2VyCi0gICAgc2VsID0gc2NhbmJveC5jdXJzZWxlY3Rpb24oKQotICAgIGlmIGxlbihzZWwpICE9IDE6Ci0gICAgICAgIGlmIGxlbihzZWwpID4gMToKLSAgICAgICAgICAgIG1zZyA9ICJQbGVhc2Ugb3BlbiBvbmUgbWVzc2FnZSBhdCBhIHRpbWUiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtc2cgPSAiUGxlYXNlIHNlbGVjdCBhIG1lc3NhZ2UgdG8gb3BlbiIKLSAgICAgICAgZGlhbG9nKHJvb3QsICJDYW4ndCBPcGVuIE1lc3NhZ2UiLCBtc2csICIiLCAwLCAiT0siKQotICAgICAgICByZXR1cm4KLSAgICBjdXJzb3IgPSBzY2FuYm94WydjdXJzb3InXQotICAgIHNjYW5ib3hbJ2N1cnNvciddID0gJ3dhdGNoJwotICAgIHRrLmNhbGwoJ3VwZGF0ZScsICdpZGxldGFza3MnKQotICAgIGkgPSBzZWxbMF0KLSAgICBsaW5lID0gc2NhbmJveC5nZXQoaSkKLSAgICBtID0gc2NhbnBhcnNlci5tYXRjaChsaW5lKQotICAgIGlmIG06Ci0gICAgICAgIG51bSA9IGludChtLmdyb3VwKDEpKQotICAgICAgICBtID0gbWhmLmdldF9tZXNzYWdlKG51bSkKLSAgICAgICAgaWYgdmlld2VyOiB2aWV3ZXIuZGVzdHJveSgpCi0gICAgICAgIGZyb20gbWltZXZpZXdlciBpbXBvcnQgTWltZVZpZXdlcgotICAgICAgICB2aWV3ZXIgPSBNaW1lVmlld2VyKGJvdCwgJyslcy8lZCcgJSAoZm9sZGVyLCBudW0pLCBtKQotICAgICAgICB2aWV3ZXIucGFjaygpCi0gICAgICAgIHZpZXdlci5zaG93KCkKLSAgICBzY2FuYm94WydjdXJzb3InXSA9IGN1cnNvcgotCi1kZWYgaW50ZXJlc3RpbmdoZWFkZXIoaGVhZGVyKToKLSAgICByZXR1cm4gaGVhZGVyICE9ICdyZWNlaXZlZCcKLQotZGVmIHJlbW92ZV9tZXNzYWdlKGU9Tm9uZSk6Ci0gICAgaXRvcCA9IHNjYW5ib3gubmVhcmVzdCgwKQotICAgIHNlbCA9IHNjYW5ib3guY3Vyc2VsZWN0aW9uKCkKLSAgICBpZiBub3Qgc2VsOgotICAgICAgICBkaWFsb2cocm9vdCwgIk5vIE1lc3NhZ2UgVG8gUmVtb3ZlIiwKLSAgICAgICAgICAgICAgICJQbGVhc2Ugc2VsZWN0IGEgbWVzc2FnZSB0byByZW1vdmUiLCAiIiwgMCwgIk9LIikKLSAgICAgICAgcmV0dXJuCi0gICAgdG9kbyA9IFtdCi0gICAgZm9yIGkgaW4gc2VsOgotICAgICAgICBsaW5lID0gc2NhbmJveC5nZXQoaSkKLSAgICAgICAgbSA9IHNjYW5wYXJzZXIubWF0Y2gobGluZSkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIHRvcmVtb3ZlID0gaW50KG0uZ3JvdXAoMSkpCi0gICAgICAgICAgICB0b2RvLmFwcGVuZCh0b3JlbW92ZSkKLSAgICAgICAgICAgIG1oZi5yZW1vdmUodG9yZW1vdmUpCi0gICAgcmVzY2FuKCkKLSAgICBmaXhmb2N1cyhtaW4odG9kbyksIGl0b3ApCi0KLWxhc3RyZWZpbGUgPSAnJwotdG9mb2xkZXIgPSBOb25lCi1kZWYgcmVmaWxlX21lc3NhZ2UoZT1Ob25lKToKLSAgICBnbG9iYWwgbGFzdHJlZmlsZSwgdG9mb2xkZXIKLSAgICBpdG9wID0gc2NhbmJveC5uZWFyZXN0KDApCi0gICAgc2VsID0gc2NhbmJveC5jdXJzZWxlY3Rpb24oKQotICAgIGlmIG5vdCBzZWw6Ci0gICAgICAgIGRpYWxvZyhyb290LCAiTm8gTWVzc2FnZSBUbyBSZWZpbGUiLAotICAgICAgICAgICAgICAgIlBsZWFzZSBzZWxlY3QgYSBtZXNzYWdlIHRvIHJlZmlsZSIsICIiLCAwLCAiT0siKQotICAgICAgICByZXR1cm4KLSAgICBmb2xkZXJzZWwgPSBmb2xkZXJib3guY3Vyc2VsZWN0aW9uKCkKLSAgICBpZiBsZW4oZm9sZGVyc2VsKSAhPSAxOgotICAgICAgICBpZiBub3QgZm9sZGVyc2VsOgotICAgICAgICAgICAgbXNnID0gIlBsZWFzZSBzZWxlY3QgYSBmb2xkZXIgdG8gcmVmaWxlIHRvIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gIlBsZWFzZSBzZWxlY3QgZXhhY3RseSBvbmUgZm9sZGVyIHRvIHJlZmlsZSB0byIKLSAgICAgICAgZGlhbG9nKHJvb3QsICJObyBGb2xkZXIgVG8gUmVmaWxlIiwgbXNnLCAiIiwgMCwgIk9LIikKLSAgICAgICAgcmV0dXJuCi0gICAgcmVmaWxldG8gPSBmb2xkZXJib3guZ2V0KGZvbGRlcnNlbFswXSkKLSAgICB0b2RvID0gW10KLSAgICBmb3IgaSBpbiBzZWw6Ci0gICAgICAgIGxpbmUgPSBzY2FuYm94LmdldChpKQotICAgICAgICBtID0gc2NhbnBhcnNlci5tYXRjaChsaW5lKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgdG9kby5hcHBlbmQoaW50KG0uZ3JvdXAoMSkpKQotICAgIGlmIGxhc3RyZWZpbGUgIT0gcmVmaWxldG8gb3Igbm90IHRvZm9sZGVyOgotICAgICAgICBsYXN0cmVmaWxlID0gcmVmaWxldG8KLSAgICAgICAgdG9mb2xkZXIgPSBOb25lCi0gICAgICAgIHRvZm9sZGVyID0gbWguZ2V0X2ZvbGRlcihsYXN0cmVmaWxlKQotICAgIG1oZi5yZWZpbGVtZXNzYWdlcyh0b2RvLCB0b2ZvbGRlcikKLSAgICByZXNjYW4oKQotICAgIGZpeGZvY3VzKG1pbih0b2RvKSwgaXRvcCkKLQotZGVmIGZpeGZvY3VzKG5lYXIsIGl0b3ApOgotICAgIG4gPSBzY2FuYm94LnNpemUoKQotICAgIGZvciBpIGluIHJhbmdlKG4pOgotICAgICAgICBsaW5lID0gc2NhbmJveC5nZXQocmVwcihpKSkKLSAgICAgICAgbSA9IHNjYW5wYXJzZXIubWF0Y2gobGluZSkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIG51bSA9IGludChtLmdyb3VwKDEpKQotICAgICAgICAgICAgaWYgbnVtID49IG5lYXI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBpID0gJ2VuZCcKLSAgICBzY2FuYm94Lnl2aWV3KGl0b3ApCi0KLWRlZiBzZXRmb2xkZXJzKCk6Ci0gICAgZm9sZGVyYm94LmRlbGV0ZSgwLCAnZW5kJykKLSAgICBmb3IgZm4gaW4gbWgubGlzdF9mb2xkZXJzKCk6Ci0gICAgICAgIGZvbGRlcmJveC5pbnNlcnQoJ2VuZCcsIGZuKQotCi1kZWYgcmVzY2FuKCk6Ci0gICAgZ2xvYmFsIHZpZXdlcgotICAgIGlmIHZpZXdlcjoKLSAgICAgICAgdmlld2VyLmRlc3Ryb3koKQotICAgICAgICB2aWV3ZXIgPSBOb25lCi0gICAgc2NhbmJveC5kZWxldGUoMCwgJ2VuZCcpCi0gICAgZm9yIGxpbmUgaW4gc2NhbmZvbGRlcihmb2xkZXIsIHNlcSk6Ci0gICAgICAgIHNjYW5ib3guaW5zZXJ0KCdlbmQnLCBsaW5lKQotCi1kZWYgc2NhbmZvbGRlcihmb2xkZXIgPSAnaW5ib3gnLCBzZXF1ZW5jZSA9ICdhbGwnKToKLSAgICByZXR1cm4gW2xpbmVbOi0xXSBmb3IgbGluZSBpbgotICAgICAgICAgICAgb3MucG9wZW4oJ3NjYW4gKyVzICVzJyAlIChmb2xkZXIsIHNlcXVlbmNlKSwgJ3InKS5yZWFkbGluZXMoKV0KLQotbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vbWltZXZpZXdlci5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9taW1ldmlld2VyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiYWJlZDhmLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9taW1ldmlld2VyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24zCi0KLSMgVmlldyBhIHNpbmdsZSBNSU1FIG11bHRpcGFydCBtZXNzYWdlLgotIyBEaXNwbGF5IGVhY2ggcGFydCBhcyBhIGJveC4KLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgbWFpbGJveAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi1mcm9tIHRraW50ZXIuc2Nyb2xsZWR0ZXh0IGltcG9ydCBTY3JvbGxlZFRleHQKLQotTUJPWFBBVEggPSBvcy5lbnZpcm9uWydIT01FJ10gKyAnL01haWwnCi0KLWNsYXNzIEVycm9yKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi1kZWYgZ2V0Y3VycmVudChzZWxmKToKLSAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgbWVzc2FnZS4gIFJhaXNlIEVycm9yIHdoZW4gdGhlcmUgaXMgbm9uZS4iIiIKLSAgICBzZXFzID0gc2VsZi5nZXRfc2VxdWVuY2VzKCkKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBtYXgoc2Vxc1snY3VyJ10pCi0gICAgZXhjZXB0IChWYWx1ZUVycm9yLCBLZXlFcnJvcik6Ci0gICAgICAgIHJhaXNlIEVycm9yKCJubyBjdXIgbWVzc2FnZSIpCi0KLQotY2xhc3MgTWltZVZpZXdlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZSwgbXNnKToKLSAgICAgICAgc2VsZi50aXRsZSA9IHRpdGxlCi0gICAgICAgIHNlbGYubXNnID0gbXNnCi0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShwYXJlbnQsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDJ9KQotICAgICAgICBzZWxmLmZyYW1lLnBhY2tpbmcgPSB7J2V4cGFuZCc6IDAsICdmaWxsJzogJ2JvdGgnfQotICAgICAgICBzZWxmLmJ1dHRvbiA9IENoZWNrYnV0dG9uKHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndGV4dCc6IHRpdGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOiBzZWxmLnRvZ2dsZX0pCi0gICAgICAgIHNlbGYuYnV0dG9uLnBhY2soeydhbmNob3InOiAndyd9KQotICAgICAgICBoZWFkZXJ0ZXh0ID0gW10KLSAgICAgICAgZm9yIGl0ZW0gaW4gbXNnLml0ZW1zKCk6Ci0gICAgICAgICAgICBoZWFkZXJ0ZXh0LmFwcGVuZCgiJXM6ICVzIiAlIGl0ZW0pCi0gICAgICAgIGhlYWRlcnRleHQgPSAnXG4nLmpvaW4oaGVhZGVydGV4dCkKLSAgICAgICAgaGVpZ2h0ID0gY291bnRsaW5lcyhoZWFkZXJ0ZXh0LCA0KQotICAgICAgICBpZiBoZWlnaHQ6Ci0gICAgICAgICAgICBzZWxmLmh0ZXh0ID0gU2Nyb2xsZWRUZXh0KHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2hlaWdodCc6IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiA4MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JhcCc6ICdub25lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsaWVmJzogJ3JhaXNlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JkJzogMn0pCi0gICAgICAgICAgICBzZWxmLmh0ZXh0LnBhY2tpbmcgPSB7J2V4cGFuZCc6IDEsICdmaWxsJzogJ2JvdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhZnRlcic6IHNlbGYuYnV0dG9ufQotICAgICAgICAgICAgc2VsZi5odGV4dC5pbnNlcnQoJ2VuZCcsIGhlYWRlcnRleHQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmh0ZXh0ID0gRnJhbWUoc2VsZi5mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3JlbGllZic6ICdyYWlzZWQnLCAnYmQnOiAyfSkKLSAgICAgICAgICAgIHNlbGYuaHRleHQucGFja2luZyA9IHsnc2lkZSc6ICd0b3AnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcGFkeSc6IDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOiAneCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FmdGVyJzogc2VsZi5idXR0b259Ci0gICAgICAgIGJvZHkgPSBtc2cuZ2V0X3BheWxvYWQoKQotICAgICAgICBpZiB0eXBlKGJvZHkpID09IHN0cjoKLSAgICAgICAgICAgIHNlbGYucGFkID0gTm9uZQotICAgICAgICAgICAgaGVpZ2h0ID0gY291bnRsaW5lcyhib2R5LCAxMCkKLSAgICAgICAgICAgIGlmIGhlaWdodDoKLSAgICAgICAgICAgICAgICBzZWxmLmJ0ZXh0ID0gU2Nyb2xsZWRUZXh0KHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydoZWlnaHQnOiBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCc6IDgwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JhcCc6ICdub25lJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGllZic6ICdyYWlzZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmQnOiAyfSkKLSAgICAgICAgICAgICAgICBzZWxmLmJ0ZXh0LnBhY2tpbmcgPSB7J2V4cGFuZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzogJ2JvdGgnfQotICAgICAgICAgICAgICAgIHNlbGYuYnRleHQuaW5zZXJ0KCdlbmQnLCBib2R5KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmJ0ZXh0ID0gTm9uZQotICAgICAgICAgICAgc2VsZi5wYXJ0cyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYucGFkID0gRnJhbWUoc2VsZi5mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydyZWxpZWYnOiAnZmxhdCcsICdiZCc6IDJ9KQotICAgICAgICAgICAgc2VsZi5wYWQucGFja2luZyA9IHsnc2lkZSc6ICdsZWZ0JywgJ2lwYWR4JzogMTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzogJ3knLCAnYWZ0ZXInOiBzZWxmLmh0ZXh0fQotICAgICAgICAgICAgc2VsZi5wYXJ0cyA9IFtdCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYm9keSkpOgotICAgICAgICAgICAgICAgIHAgPSBNaW1lVmlld2VyKHNlbGYuZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVzLiVkJyAlICh0aXRsZSwgaSsxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5W2ldKQotICAgICAgICAgICAgICAgIHNlbGYucGFydHMuYXBwZW5kKHApCi0gICAgICAgICAgICBzZWxmLmJ0ZXh0ID0gTm9uZQotICAgICAgICBzZWxmLmNvbGxhcHNlZCA9IDEKLSAgICBkZWYgcGFjayhzZWxmKToKLSAgICAgICAgc2VsZi5mcmFtZS5wYWNrKHNlbGYuZnJhbWUucGFja2luZykKLSAgICBkZWYgZGVzdHJveShzZWxmKToKLSAgICAgICAgc2VsZi5mcmFtZS5kZXN0cm95KCkKLSAgICBkZWYgc2hvdyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jb2xsYXBzZWQ6Ci0gICAgICAgICAgICBzZWxmLmJ1dHRvbi5pbnZva2UoKQotICAgIGRlZiB0b2dnbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuY29sbGFwc2VkOgotICAgICAgICAgICAgc2VsZi5leHBsb2RlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY29sbGFwc2UoKQotICAgIGRlZiBjb2xsYXBzZShzZWxmKToKLSAgICAgICAgc2VsZi5jb2xsYXBzZWQgPSAxCi0gICAgICAgIGZvciBjb21wIGluIHNlbGYuaHRleHQsIHNlbGYuYnRleHQsIHNlbGYucGFkOgotICAgICAgICAgICAgaWYgY29tcDoKLSAgICAgICAgICAgICAgICBjb21wLmZvcmdldCgpCi0gICAgICAgIGlmIHNlbGYucGFydHM6Ci0gICAgICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRzOgotICAgICAgICAgICAgICAgIHBhcnQuZnJhbWUuZm9yZ2V0KCkKLSAgICAgICAgc2VsZi5mcmFtZS5wYWNrKHsnZXhwYW5kJzogMH0pCi0gICAgZGVmIGV4cGxvZGUoc2VsZik6Ci0gICAgICAgIHNlbGYuY29sbGFwc2VkID0gMAotICAgICAgICBmb3IgY29tcCBpbiBzZWxmLmh0ZXh0LCBzZWxmLmJ0ZXh0LCBzZWxmLnBhZDoKLSAgICAgICAgICAgIGlmIGNvbXA6IGNvbXAucGFjayhjb21wLnBhY2tpbmcpCi0gICAgICAgIGlmIHNlbGYucGFydHM6Ci0gICAgICAgICAgICBmb3IgcGFydCBpbiBzZWxmLnBhcnRzOgotICAgICAgICAgICAgICAgIHBhcnQucGFjaygpCi0gICAgICAgIHNlbGYuZnJhbWUucGFjayh7J2V4cGFuZCc6IDF9KQotCi1kZWYgY291bnRsaW5lcyhzdHIsIGxpbWl0KToKLSAgICBpID0gMAotICAgIG4gPSAwCi0gICAgd2hpbGUgIG4gPCBsaW1pdDoKLSAgICAgICAgaSA9IHN0ci5maW5kKCdcbicsIGkpCi0gICAgICAgIGlmIGkgPCAwOiBicmVhawotICAgICAgICBuID0gbisxCi0gICAgICAgIGkgPSBpKzEKLSAgICByZXR1cm4gbgotCi1kZWYgbWFpbigpOgotICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJycpCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgcGFzcwotICAgIG1lc3NhZ2UgPSBOb25lCi0gICAgZm9sZGVyID0gJ2luYm94JwotICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgaWYgYXJnWzoxXSA9PSAnKyc6Ci0gICAgICAgICAgICBmb2xkZXIgPSBhcmdbMTpdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtZXNzYWdlID0gaW50KGFyZykKLQotICAgIG1oID0gbWFpbGJveC5NSChNQk9YUEFUSCkKLSAgICBmID0gbWguZ2V0X2ZvbGRlcihmb2xkZXIpCi0gICAgaWYgbWVzc2FnZSBpcyBOb25lOgotICAgICAgICBtZXNzYWdlID0gZ2V0Y3VycmVudChmKQotICAgIG0gPSBtYWlsYm94Lk1ITWVzc2FnZShmLmdldChtZXNzYWdlKSkKLQotICAgIHJvb3QgPSBUaygpCi0gICAgdGsgPSByb290LnRrCi0KLSAgICB0b3AgPSBNaW1lVmlld2VyKHJvb3QsICcrJXMvJWQnICUgKGZvbGRlciwgbWVzc2FnZSksIG0pCi0gICAgdG9wLnBhY2soKQotICAgIHRvcC5zaG93KCkKLQotICAgIHJvb3QubWluc2l6ZSgxLCAxKQotCi0gICAgdGsubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL25ld21lbnViYXJkZW1vLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL25ld21lbnViYXJkZW1vLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWM0ZTY0Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9uZXdtZW51YmFyZGVtby5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIiUGxheSB3aXRoIHRoZSBuZXcgVGsgOC4wIHRvcGxldmVsIG1lbnUgb3B0aW9uLiIiIgotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotY2xhc3MgQXBwOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcik6Ci0gICAgICAgIHNlbGYubWFzdGVyID0gbWFzdGVyCi0KLSAgICAgICAgc2VsZi5tZW51YmFyID0gTWVudShzZWxmLm1hc3RlcikKLQotICAgICAgICBzZWxmLmZpbGVtZW51ID0gTWVudShzZWxmLm1lbnViYXIpCi0KLSAgICAgICAgc2VsZi5maWxlbWVudS5hZGRfY29tbWFuZChsYWJlbD0iTmV3IikKLSAgICAgICAgc2VsZi5maWxlbWVudS5hZGRfY29tbWFuZChsYWJlbD0iT3Blbi4uLiIpCi0gICAgICAgIHNlbGYuZmlsZW1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IkNsb3NlIikKLSAgICAgICAgc2VsZi5maWxlbWVudS5hZGRfc2VwYXJhdG9yKCkKLSAgICAgICAgc2VsZi5maWxlbWVudS5hZGRfY29tbWFuZChsYWJlbD0iUXVpdCIsIGNvbW1hbmQ9c2VsZi5tYXN0ZXIucXVpdCkKLQotICAgICAgICBzZWxmLmVkaXRtZW51ID0gTWVudShzZWxmLm1lbnViYXIpCi0KLSAgICAgICAgc2VsZi5lZGl0bWVudS5hZGRfY29tbWFuZChsYWJlbD0iQ3V0IikKLSAgICAgICAgc2VsZi5lZGl0bWVudS5hZGRfY29tbWFuZChsYWJlbD0iQ29weSIpCi0gICAgICAgIHNlbGYuZWRpdG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IlBhc3RlIikKLQotICAgICAgICBzZWxmLmhlbHBtZW51ID0gTWVudShzZWxmLm1lbnViYXIsIG5hbWU9J2hlbHAnKQotCi0gICAgICAgIHNlbGYuaGVscG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IkFib3V0Li4uIikKLQotICAgICAgICBzZWxmLm1lbnViYXIuYWRkX2Nhc2NhZGUobGFiZWw9IkZpbGUiLCBtZW51PXNlbGYuZmlsZW1lbnUpCi0gICAgICAgIHNlbGYubWVudWJhci5hZGRfY2FzY2FkZShsYWJlbD0iRWRpdCIsIG1lbnU9c2VsZi5lZGl0bWVudSkKLSAgICAgICAgc2VsZi5tZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSJIZWxwIiwgbWVudT1zZWxmLmhlbHBtZW51KQotCi0gICAgICAgIHNlbGYudG9wID0gVG9wbGV2ZWwobWVudT1zZWxmLm1lbnViYXIpCi0KLSAgICAgICAgIyBSZXN0IG9mIGFwcCBnb2VzIGhlcmUuLi4KLQotZGVmIG1haW4oKToKLSAgICByb290ID0gVGsoKQotICAgIHJvb3Qud2l0aGRyYXcoKQotICAgIGFwcCA9IEFwcChyb290KQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL29wdGlvbm1lbnUucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vb3B0aW9ubWVudS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU3MmFhNS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vb3B0aW9ubWVudS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSMgb3B0aW9uIG1lbnUgc2FtcGxlIChGcmVkcmlrIEx1bmRoLCBTZXB0ZW1iZXIgMTk5NykKLQotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLXJvb3QgPSBUaygpCi0KLSMKLSMgc3RhbmRhcmQgdXNhZ2UKLQotdmFyMSAgPSBTdHJpbmdWYXIoKQotdmFyMS5zZXQoIk9uZSIpICMgZGVmYXVsdCBzZWxlY3Rpb24KLQotbWVudTEgPSBPcHRpb25NZW51KHJvb3QsIHZhcjEsICJPbmUiLCAiVHdvIiwgIlRocmVlIikKLW1lbnUxLnBhY2soKQotCi0jCi0jIGluaXRpYWxpemUgZnJvbSBhIHNlcXVlbmNlCi0KLUNIT0lDRVMgPSAiQWFoIiwgIkJlZSIsICJDZWUiLCAiRGVlIiwgIkVmZiIKLQotdmFyMiAgPSBTdHJpbmdWYXIoKQotdmFyMi5zZXQoQ0hPSUNFU1swXSkKLQotbWVudTIgPSBPcHRpb25NZW51KHJvb3QsIHZhcjIsICpDSE9JQ0VTKQotbWVudTIucGFjaygpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3BhaW50LnB5IGIvRGVtby90a2ludGVyL2d1aWRvL3BhaW50LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWYyMzUzLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9wYWludC5weQorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAgQEAKLSIiIiJQYWludCBwcm9ncmFtIGJ5IERhdmUgTWljaGVsbC4KLQotU3ViamVjdDogdGtpbnRlciAicGFpbnQiIGV4YW1wbGUKLUZyb206IERhdmUgTWl0Y2hlbGwgPGRhdmVtQG1hZ25ldC5jb20+Ci1UbzogcHl0aG9uLWxpc3RAY3dpLm5sCi1EYXRlOiBGcmksIDIzIEphbiAxOTk4IDEyOjE4OjA1IC0wNTAwIChFU1QpCi0KLSAgTm90IHRvbyBsb25nIGFnbyAobGFzdCB3ZWVrIG1heWJlPykgc29tZW9uZSBwb3N0ZWQgYSByZXF1ZXN0Ci1mb3IgYW4gZXhhbXBsZSBvZiBhIHBhaW50IHByb2dyYW0gdXNpbmcgVGtpbnRlci4gVHJ5IGFzIEkgbWlnaHQKLUkgY2FuJ3Qgc2VlbSB0byBmaW5kIGl0IGluIHRoZSBhcmNoaXZlLCBzbyBpJ2xsIGp1c3QgcG9zdCBtaW5lCi1oZXJlIGFuZCBob3BlIHRoYXQgdGhlIHBlcnNvbiB3aG8gcmVxdWVzdGVkIGl0IHNlZXMgdGhpcyEKLQotICBBbGwgdGhpcyBkb2VzIGlzIHB1dCB1cCBhIGNhbnZhcyBhbmQgZHJhdyBhIHNtb290aCBibGFjayBsaW5lCi13aGVuZXZlciB5b3UgaGF2ZSB0aGUgbW91c2UgYnV0dG9uIGRvd24sIGJ1dCBob3BlZnVsbHkgaXQgd2lsbAotYmUgZW5vdWdoIHRvIHN0YXJ0IHdpdGguLiBJdCB3b3VsZCBiZSBlYXN5IGVub3VnaCB0byBhZGQgc29tZQotb3B0aW9ucyBsaWtlIG90aGVyIHNoYXBlcyBvciBjb2xvcnMuLi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW91cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZlIG1pdGNoZWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXZlbUBtYWduZXQuY29tCi0iIiIKLQotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLSIiInBhaW50LnB5OiBub3QgZXhhY3RseSBhIHBhaW50IHByb2dyYW0uLiBqdXN0IGEgc21vb3RoIGxpbmUgZHJhd2luZyBkZW1vLiIiIgotCi1iMSA9ICJ1cCIKLXhvbGQsIHlvbGQgPSBOb25lLCBOb25lCi0KLWRlZiBtYWluKCk6Ci0gICAgcm9vdCA9IFRrKCkKLSAgICBkcmF3aW5nX2FyZWEgPSBDYW52YXMocm9vdCkKLSAgICBkcmF3aW5nX2FyZWEucGFjaygpCi0gICAgZHJhd2luZ19hcmVhLmJpbmQoIjxNb3Rpb24+IiwgbW90aW9uKQotICAgIGRyYXdpbmdfYXJlYS5iaW5kKCI8QnV0dG9uUHJlc3MtMT4iLCBiMWRvd24pCi0gICAgZHJhd2luZ19hcmVhLmJpbmQoIjxCdXR0b25SZWxlYXNlLTE+IiwgYjF1cCkKLSAgICByb290Lm1haW5sb29wKCkKLQotZGVmIGIxZG93bihldmVudCk6Ci0gICAgZ2xvYmFsIGIxCi0gICAgYjEgPSAiZG93biIgICAgICAgICAgICMgeW91IG9ubHkgd2FudCB0byBkcmF3IHdoZW4gdGhlIGJ1dHRvbiBpcyBkb3duCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSAiTW90aW9uIiBldmVudHMgaGFwcGVuIC1hbGwgdGhlIHRpbWUtCi0KLWRlZiBiMXVwKGV2ZW50KToKLSAgICBnbG9iYWwgYjEsIHhvbGQsIHlvbGQKLSAgICBiMSA9ICJ1cCIKLSAgICB4b2xkID0gTm9uZSAgICAgICAgICAgIyByZXNldCB0aGUgbGluZSB3aGVuIHlvdSBsZXQgZ28gb2YgdGhlIGJ1dHRvbgotICAgIHlvbGQgPSBOb25lCi0KLWRlZiBtb3Rpb24oZXZlbnQpOgotICAgIGlmIGIxID09ICJkb3duIjoKLSAgICAgICAgZ2xvYmFsIHhvbGQsIHlvbGQKLSAgICAgICAgaWYgeG9sZCBpcyBub3QgTm9uZSBhbmQgeW9sZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGV2ZW50LndpZGdldC5jcmVhdGVfbGluZSh4b2xkLHlvbGQsZXZlbnQueCxldmVudC55LHNtb290aD1UUlVFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGhlcmUncyB3aGVyZSB5b3UgZHJhdyBpdC4gc21vb3RoLiBuZWF0LgotICAgICAgICB4b2xkID0gZXZlbnQueAotICAgICAgICB5b2xkID0gZXZlbnQueQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3JtdC5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9ybXQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDM1MGQ2MGIuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3JtdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSMgQSBQeXRob24gcHJvZ3JhbSBpbXBsZW1lbnRpbmcgcm10LCBhbiBhcHBsaWNhdGlvbiBmb3IgcmVtb3RlbHkKLSMgY29udHJvbGxpbmcgb3RoZXIgVGsgYXBwbGljYXRpb25zLgotIyBDZi4gT3VzdGVyaG91dCwgVGNsIGFuZCB0aGUgVGsgVG9vbGtpdCwgRmlncy4gMjcuNS04LCBwcC4gMjczLTI3Ni4KLQotIyBOb3RlIHRoYXQgYmVjYXVzZSBvZiBmb3J3YXJkIHJlZmVyZW5jZXMgaW4gdGhlIG9yaWdpbmFsLCB3ZQotIyBzb21ldGltZXMgZGVsYXkgYmluZGluZ3MgdW50aWwgYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgcHJvY2VkdXJlIGlzCi0jIGRlZmluZWQuICBXZSBhbHNvIGludHJvZHVjZSBuYW1lcyBmb3Igc29tZSB1bm5hbWVkIGNvZGUgYmxvY2tzIGluCi0jIHRoZSBvcmlnaW5hbCBiZWNhdXNlIG9mIHJlc3RyaWN0aW9ucyBvbiBsYW1iZGEgZm9ybXMgaW4gUHl0aG9uLgotCi0jIFhYWCBUaGlzIHNob3VsZCBiZSB3cml0dGVuIGluIGEgbW9yZSBQeXRob24tbGlrZSBzdHlsZSEhIQotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWltcG9ydCBzeXMKLQotIyAxLiBDcmVhdGUgYmFzaWMgYXBwbGljYXRpb24gc3RydWN0dXJlOiBtZW51IGJhciBvbiB0b3Agb2YKLSMgdGV4dCB3aWRnZXQsIHNjcm9sbGJhciBvbiByaWdodC4KLQotcm9vdCA9IFRrKCkKLXRrID0gcm9vdC50awotbUJhciA9IEZyYW1lKHJvb3QsIHJlbGllZj1SQUlTRUQsIGJvcmRlcndpZHRoPTIpCi1tQmFyLnBhY2soZmlsbD1YKQotCi1mID0gRnJhbWUocm9vdCkKLWYucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotcyA9IFNjcm9sbGJhcihmLCByZWxpZWY9RkxBVCkKLXMucGFjayhzaWRlPVJJR0hULCBmaWxsPVkpCi10ID0gVGV4dChmLCByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0yLCB5c2Nyb2xsY29tbWFuZD1zLnNldCwgc2V0Z3JpZD0xKQotdC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKLXQudGFnX2NvbmZpZygnYm9sZCcpCi1zWydjb21tYW5kJ10gPSB0Lnl2aWV3Ci0KLXJvb3QudGl0bGUoJ1RrIFJlbW90ZSBDb250cm9sbGVyJykKLXJvb3QuaWNvbm5hbWUoJ1RrIFJlbW90ZScpCi0KLSMgMi4gQ3JlYXRlIG1lbnUgYnV0dG9uIGFuZCBtZW51cy4KLQotZmlsZSA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nRmlsZScsIHVuZGVybGluZT0wKQotZmlsZS5wYWNrKHNpZGU9TEVGVCkKLWZpbGVfbSA9IE1lbnUoZmlsZSkKLWZpbGVbJ21lbnUnXSA9IGZpbGVfbQotZmlsZV9tX2FwcHMgPSBNZW51KGZpbGVfbSwgdGVhcm9mZj0wKQotZmlsZV9tLmFkZF9jYXNjYWRlKGxhYmVsPSdTZWxlY3QgQXBwbGljYXRpb24nLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgICAgICBtZW51PWZpbGVfbV9hcHBzKQotZmlsZV9tLmFkZF9jb21tYW5kKGxhYmVsPSdRdWl0JywgdW5kZXJsaW5lPTAsIGNvbW1hbmQ9c3lzLmV4aXQpCi0KLSMgMy4gQ3JlYXRlIGJpbmRpbmdzIGZvciB0ZXh0IHdpZGdldCB0byBhbGxvdyBjb21tYW5kcyB0byBiZQotIyBlbnRlcmVkIGFuZCBpbmZvcm1hdGlvbiB0byBiZSBzZWxlY3RlZC4gIE5ldyBjaGFyYWN0ZXJzCi0jIGNhbiBvbmx5IGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhlIHRleHQgKGNhbid0IGV2ZXIgbW92ZQotIyBpbnNlcnRpb24gcG9pbnQpLgotCi1kZWYgc2luZ2xlMShlKToKLSAgICB4ID0gZS54Ci0gICAgeSA9IGUueQotICAgIHQuc2V0dmFyKCd0a19wcml2KHNlbGVjdE1vZGUpJywgJ2NoYXInKQotICAgIHQubWFya19zZXQoJ2FuY2hvcicsIEF0KHgsIHkpKQotICAgICMgU2hvdWxkIGZvY3VzIFcKLXQuYmluZCgnPDE+Jywgc2luZ2xlMSkKLQotZGVmIGRvdWJsZTEoZSk6Ci0gICAgeCA9IGUueAotICAgIHkgPSBlLnkKLSAgICB0LnNldHZhcigndGtfcHJpdihzZWxlY3RNb2RlKScsICd3b3JkJykKLSAgICB0LnRrX3RleHRTZWxlY3RUbyhBdCh4LCB5KSkKLXQuYmluZCgnPERvdWJsZS0xPicsIGRvdWJsZTEpCi0KLWRlZiB0cmlwbGUxKGUpOgotICAgIHggPSBlLngKLSAgICB5ID0gZS55Ci0gICAgdC5zZXR2YXIoJ3RrX3ByaXYoc2VsZWN0TW9kZSknLCAnbGluZScpCi0gICAgdC50a190ZXh0U2VsZWN0VG8oQXQoeCwgeSkpCi10LmJpbmQoJzxUcmlwbGUtMT4nLCB0cmlwbGUxKQotCi1kZWYgcmV0dXJua2V5KGUpOgotICAgIHQuaW5zZXJ0KEF0SW5zZXJ0KCksICdcbicpCi0gICAgaW52b2tlKCkKLXQuYmluZCgnPFJldHVybj4nLCByZXR1cm5rZXkpCi0KLWRlZiBjb250cm9sdihlKToKLSAgICB0Lmluc2VydChBdEluc2VydCgpLCB0LnNlbGVjdGlvbl9nZXQoKSkKLSAgICB0Lnl2aWV3X3BpY2twbGFjZShBdEluc2VydCgpKQotICAgIGlmIHQuaW5kZXgoQXRJbnNlcnQoKSlbLTI6XSA9PSAnLjAnOgotICAgICAgICBpbnZva2UoKQotdC5iaW5kKCc8Q29udHJvbC12PicsIGNvbnRyb2x2KQotCi0jIDQuIFByb2NlZHVyZSB0byBiYWNrc3BhY2Ugb3ZlciBvbmUgY2hhcmFjdGVyLCBhcyBsb25nIGFzCi0jIHRoZSBjaGFyYWN0ZXIgaXNuJ3QgcGFydCBvZiB0aGUgcHJvbXB0LgotCi1kZWYgYmFja3NwYWNlKGUpOgotICAgIGlmIHQuaW5kZXgoJ3Byb21wdEVuZCcpICE9IHQuaW5kZXgoJ2luc2VydCAtIDEgY2hhcicpOgotICAgICAgICB0LmRlbGV0ZSgnaW5zZXJ0IC0gMSBjaGFyJywgQXRJbnNlcnQoKSkKLSAgICAgICAgdC55dmlld19waWNrcGxhY2UoQXRJbnNlcnQoKSkKLXQuYmluZCgnPEJhY2tTcGFjZT4nLCBiYWNrc3BhY2UpCi10LmJpbmQoJzxDb250cm9sLWg+JywgYmFja3NwYWNlKQotdC5iaW5kKCc8RGVsZXRlPicsIGJhY2tzcGFjZSkKLQotCi0jIDUuIFByb2NlZHVyZSB0aGF0J3MgaW52b2tlZCB3aGVuIHJldHVybiBpcyB0eXBlZDogIGlmCi0jIHRoZXJlJ3Mgbm90IHlldCBhIGNvbXBsZXRlIGNvbW1hbmQgKGUuZy4gYnJhY2VzIGFyZSBvcGVuKQotIyB0aGVuIGRvIG5vdGhpbmcuICBPdGhlcndpc2UsIGV4ZWN1dGUgY29tbWFuZCAobG9jYWxseSBvcgotIyByZW1vdGVseSksIG91dHB1dCB0aGUgcmVzdWx0IG9yIGVycm9yIG1lc3NhZ2UsIGFuZCBpc3N1ZQotIyBhIG5ldyBwcm9tcHQuCi0KLWRlZiBpbnZva2UoKToKLSAgICBjbWQgPSB0LmdldCgncHJvbXB0RW5kICsgMSBjaGFyJywgQXRJbnNlcnQoKSkKLSAgICBpZiB0LmdldGJvb2xlYW4odGsuY2FsbCgnaW5mbycsICdjb21wbGV0ZScsIGNtZCkpOiAjIFhYWAotICAgICAgICBpZiBhcHAgPT0gcm9vdC53aW5mb19uYW1lKCk6Ci0gICAgICAgICAgICBtc2cgPSB0ay5jYWxsKCdldmFsJywgY21kKSAjIFhYWAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbXNnID0gdC5zZW5kKGFwcCwgY21kKQotICAgICAgICBpZiBtc2c6Ci0gICAgICAgICAgICB0Lmluc2VydChBdEluc2VydCgpLCBtc2cgKyAnXG4nKQotICAgICAgICBwcm9tcHQoKQotICAgIHQueXZpZXdfcGlja3BsYWNlKEF0SW5zZXJ0KCkpCi0KLWRlZiBwcm9tcHQoKToKLSAgICB0Lmluc2VydChBdEluc2VydCgpLCBhcHAgKyAnOiAnKQotICAgIHQubWFya19zZXQoJ3Byb21wdEVuZCcsICdpbnNlcnQgLSAxIGNoYXInKQotICAgIHQudGFnX2FkZCgnYm9sZCcsICdpbnNlcnQgbGluZXN0YXJ0JywgJ3Byb21wdEVuZCcpCi0KLSMgNi4gUHJvY2VkdXJlIHRvIHNlbGVjdCBhIG5ldyBhcHBsaWNhdGlvbi4gIEFsc28gY2hhbmdlcwotIyB0aGUgcHJvbXB0IG9uIHRoZSBjdXJyZW50IGNvbW1hbmQgbGluZSB0byByZWZsZWN0IHRoZSBuZXcKLSMgbmFtZS4KLQotZGVmIG5ld0FwcChhcHBOYW1lKToKLSAgICBnbG9iYWwgYXBwCi0gICAgYXBwID0gYXBwTmFtZQotICAgIHQuZGVsZXRlKCdwcm9tcHRFbmQgbGluZXN0YXJ0JywgJ3Byb21wdEVuZCcpCi0gICAgdC5pbnNlcnQoJ3Byb21wdEVuZCcsIGFwcE5hbWUgKyAnOicpCi0gICAgdC50YWdfYWRkKCdib2xkJywgJ3Byb21wdEVuZCBsaW5lc3RhcnQnLCAncHJvbXB0RW5kJykKLQotZGVmIGZpbGxBcHBzTWVudSgpOgotICAgIGZpbGVfbV9hcHBzLmFkZCgnY29tbWFuZCcpCi0gICAgZmlsZV9tX2FwcHMuZGVsZXRlKDAsICdsYXN0JykKLSAgICBuYW1lcyA9IHJvb3Qud2luZm9faW50ZXJwcygpCi0gICAgbmFtZXMgPSBsaXN0KG5hbWVzKSAjIGNvbnZlcnQgdHVwbGUgdG8gbGlzdAotICAgIG5hbWVzLnNvcnQoKQotICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByb290LnNlbmQobmFtZSwgJ3dpbmZvIG5hbWUgLicpCi0gICAgICAgIGV4Y2VwdCBUY2xFcnJvcjoKLSAgICAgICAgICAgICMgSW5vcGVyYXRpdmUgd2luZG93IC0tIGlnbm9yZSBpdAotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmlsZV9tX2FwcHMuYWRkX2NvbW1hbmQoCi0gICAgICAgICAgICAgICAgbGFiZWw9bmFtZSwKLSAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYSBuYW1lPW5hbWU6IG5ld0FwcChuYW1lKSkKLQotZmlsZV9tX2FwcHNbJ3Bvc3Rjb21tYW5kJ10gPSBmaWxsQXBwc01lbnUKLW1CYXIudGtfbWVudUJhcihmaWxlKQotCi0jIDcuIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24uCi0KLWFwcCA9IHJvb3Qud2luZm9fbmFtZSgpCi1wcm9tcHQoKQotdC5mb2N1cygpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3NoZWxsX3dpbmRvdy5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9zaGVsbF93aW5kb3cucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YTA0MDEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3NoZWxsX3dpbmRvdy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotZnJvbSB0a2ludGVyLnNjcm9sbGVkdGV4dCBpbXBvcnQgU2Nyb2xsZWRUZXh0Ci1mcm9tIHRraW50ZXIuZGlhbG9nIGltcG9ydCBEaWFsb2cKLWltcG9ydCBzaWduYWwKLQotQlVGU0laRSA9IDUxMgotCi1jbGFzcyBTaGVsbFdpbmRvdyhTY3JvbGxlZFRleHQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBzaGVsbD1Ob25lLCAqKmNuZik6Ci0gICAgICAgIGlmIG5vdCBzaGVsbDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzaGVsbCA9IG9zLmVudmlyb25bJ1NIRUxMJ10KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBzaGVsbCA9ICcvYmluL3NoJwotICAgICAgICAgICAgc2hlbGwgPSBzaGVsbCArICcgLWknCi0gICAgICAgIGFyZ3MgPSBzaGVsbC5zcGxpdCgpCi0gICAgICAgIHNoZWxsID0gYXJnc1swXQotCi0gICAgICAgIFNjcm9sbGVkVGV4dC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqY25mKQotICAgICAgICBzZWxmLnBvcyA9ICcxLjAnCi0gICAgICAgIHNlbGYuYmluZCgnPFJldHVybj4nLCBzZWxmLmlucHV0aGFuZGxlcikKLSAgICAgICAgc2VsZi5iaW5kKCc8Q29udHJvbC1jPicsIHNlbGYuc2lnaW50KQotICAgICAgICBzZWxmLmJpbmQoJzxDb250cm9sLXQ+Jywgc2VsZi5zaWd0ZXJtKQotICAgICAgICBzZWxmLmJpbmQoJzxDb250cm9sLWs+Jywgc2VsZi5zaWdraWxsKQotICAgICAgICBzZWxmLmJpbmQoJzxDb250cm9sLWQ+Jywgc2VsZi5zZW5kZW9mKQotCi0gICAgICAgIHNlbGYucGlkLCBzZWxmLmZyb21jaGlsZCwgc2VsZi50b2NoaWxkID0gc3Bhd24oc2hlbGwsIGFyZ3MpCi0gICAgICAgIHNlbGYudGsuY3JlYXRlZmlsZWhhbmRsZXIoc2VsZi5mcm9tY2hpbGQsIFJFQURBQkxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3V0cHV0aGFuZGxlcikKLQotICAgIGRlZiBvdXRwdXRoYW5kbGVyKHNlbGYsIGZpbGUsIG1hc2spOgotICAgICAgICBkYXRhID0gb3MucmVhZChmaWxlLCBCVUZTSVpFKS5kZWNvZGUoKQotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIHNlbGYudGsuZGVsZXRlZmlsZWhhbmRsZXIoZmlsZSkKLSAgICAgICAgICAgIHBpZCwgc3RzID0gb3Mud2FpdHBpZChzZWxmLnBpZCwgMCkKLSAgICAgICAgICAgIHByaW50KCdwaWQnLCBwaWQsICdzdGF0dXMnLCBzdHMpCi0gICAgICAgICAgICBzZWxmLnBpZCA9IE5vbmUKLSAgICAgICAgICAgIGRldGFpbCA9IHN0cz4+OAotICAgICAgICAgICAgY2F1c2UgPSBzdHMgJiAweGZmCi0gICAgICAgICAgICBpZiBjYXVzZSA9PSAwOgotICAgICAgICAgICAgICAgIG1zZyA9ICJleGl0IHN0YXR1cyAlZCIgJSBkZXRhaWwKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbXNnID0gImtpbGxlZCBieSBzaWduYWwgJWQiICUgKGNhdXNlICYgMHg3ZikKLSAgICAgICAgICAgICAgICBpZiBjYXVzZSAmIDB4ODA6Ci0gICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgLS0gY29yZSBkdW1wZWQiCi0gICAgICAgICAgICBEaWFsb2coc2VsZi5tYXN0ZXIsCi0gICAgICAgICAgICAgICAgICAgdGV4dD1tc2csCi0gICAgICAgICAgICAgICAgICAgdGl0bGU9IkV4aXQgc3RhdHVzIiwKLSAgICAgICAgICAgICAgICAgICBiaXRtYXA9J3dhcm5pbmcnLAotICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9MCwKLSAgICAgICAgICAgICAgICAgICBzdHJpbmdzPSgnT0snLCkpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5pbnNlcnQoRU5ELCBkYXRhKQotICAgICAgICBzZWxmLnBvcyA9IHNlbGYuaW5kZXgoImVuZCAtIDEgY2hhciIpCi0gICAgICAgIHNlbGYueXZpZXdfcGlja3BsYWNlKEVORCkKLQotICAgIGRlZiBpbnB1dGhhbmRsZXIoc2VsZiwgKmFyZ3MpOgotICAgICAgICBpZiBub3Qgc2VsZi5waWQ6Ci0gICAgICAgICAgICBzZWxmLm5vX3Byb2Nlc3MoKQotICAgICAgICAgICAgcmV0dXJuICJicmVhayIKLSAgICAgICAgc2VsZi5pbnNlcnQoRU5ELCAiXG4iKQotICAgICAgICBsaW5lID0gc2VsZi5nZXQoc2VsZi5wb3MsICJlbmQgLSAxIGNoYXIiKQotICAgICAgICBzZWxmLnBvcyA9IHNlbGYuaW5kZXgoRU5EKQotICAgICAgICBvcy53cml0ZShzZWxmLnRvY2hpbGQsIGxpbmUuZW5jb2RlKCkpCi0gICAgICAgIHJldHVybiAiYnJlYWsiCi0KLSAgICBkZWYgc2VuZGVvZihzZWxmLCAqYXJncyk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnBpZDoKLSAgICAgICAgICAgIHNlbGYubm9fcHJvY2VzcygpCi0gICAgICAgICAgICByZXR1cm4gImJyZWFrIgotICAgICAgICBvcy5jbG9zZShzZWxmLnRvY2hpbGQpCi0gICAgICAgIHJldHVybiAiYnJlYWsiCi0KLSAgICBkZWYgc2VuZHNpZyhzZWxmLCBzaWcpOgotICAgICAgICBpZiBub3Qgc2VsZi5waWQ6Ci0gICAgICAgICAgICBzZWxmLm5vX3Byb2Nlc3MoKQotICAgICAgICAgICAgcmV0dXJuICJicmVhayIKLSAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnKQotICAgICAgICByZXR1cm4gImJyZWFrIgotCi0gICAgZGVmIHNpZ2ludChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmLnNlbmRzaWcoc2lnbmFsLlNJR0lOVCkKLQotICAgIGRlZiBzaWdxdWl0KHNlbGYsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuc2VuZHNpZyhzaWduYWwuU0lHUVVJVCkKLQotICAgIGRlZiBzaWd0ZXJtKHNlbGYsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuc2VuZHNpZyhzaWduYWwuU0lHVEVSTSkKLQotICAgIGRlZiBzaWdraWxsKHNlbGYsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuc2VuZHNpZyhzaWduYWwuU0lHS0lMTCkKLQotICAgIGRlZiBub19wcm9jZXNzKHNlbGYpOgotICAgICAgICBEaWFsb2coc2VsZi5tYXN0ZXIsCi0gICAgICAgICAgICAgICB0ZXh0PSJObyBhY3RpdmUgcHJvY2VzcyIsCi0gICAgICAgICAgICAgICB0aXRsZT0iTm8gcHJvY2VzcyIsCi0gICAgICAgICAgICAgICBiaXRtYXA9J2Vycm9yJywKLSAgICAgICAgICAgICAgIGRlZmF1bHQ9MCwKLSAgICAgICAgICAgICAgIHN0cmluZ3M9KCdPSycsKSkKLQotTUFYRkQgPSAxMDAgICAgICMgTWF4IG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIChvcy5nZXRkdGFibGVzaXplKCk/Pz8pCi0KLWRlZiBzcGF3bihwcm9nLCBhcmdzKToKLSAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IG9zLnBpcGUoKQotICAgIGMycHJlYWQsIGMycHdyaXRlID0gb3MucGlwZSgpCi0gICAgcGlkID0gb3MuZm9yaygpCi0gICAgaWYgcGlkID09IDA6Ci0gICAgICAgICMgQ2hpbGQKLSAgICAgICAgZm9yIGkgaW4gMCwgMSwgMjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5jbG9zZShpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgaWYgb3MuZHVwKHAyY3JlYWQpICE9IDA6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdwb3BlbjI6IGJhZCByZWFkIGR1cFxuJykKLSAgICAgICAgaWYgb3MuZHVwKGMycHdyaXRlKSAhPSAxOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgncG9wZW4yOiBiYWQgd3JpdGUgZHVwXG4nKQotICAgICAgICBpZiBvcy5kdXAoYzJwd3JpdGUpICE9IDI6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdwb3BlbjI6IGJhZCB3cml0ZSBkdXBcbicpCi0gICAgICAgIG9zLmNsb3NlcmFuZ2UoMywgTUFYRkQpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9zLmV4ZWN2cChwcm9nLCBhcmdzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnZXhlY3ZwIGZhaWxlZFxuJykKLSAgICAgICAgICAgIG9zLl9leGl0KDEpCi0gICAgb3MuY2xvc2UocDJjcmVhZCkKLSAgICBvcy5jbG9zZShjMnB3cml0ZSkKLSAgICByZXR1cm4gcGlkLCBjMnByZWFkLCBwMmN3cml0ZQotCi1kZWYgdGVzdCgpOgotICAgIHNoZWxsID0gJyAnLmpvaW4oc3lzLmFyZ3ZbMTogXSkKLSAgICByb290ID0gVGsoKQotICAgIHJvb3QubWluc2l6ZSgxLCAxKQotICAgIGlmIHNoZWxsOgotICAgICAgICB3ID0gU2hlbGxXaW5kb3cocm9vdCwgc2hlbGw9c2hlbGwpCi0gICAgZWxzZToKLSAgICAgICAgdyA9IFNoZWxsV2luZG93KHJvb3QpCi0gICAgdy5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgdy5mb2N1c19zZXQoKQotICAgIHcudGsubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3NvbGl0YWlyZS5weSBiL0RlbW8vdGtpbnRlci9ndWlkby9zb2xpdGFpcmUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQzMTA2ZTEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3NvbGl0YWlyZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDYyNiArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSIiIlNvbGl0YWlyZSBnYW1lLCBtdWNoIGxpa2UgdGhlIG9uZSB0aGF0IGNvbWVzIHdpdGggTVMgV2luZG93cy4KLQotTGltaXRhdGlvbnM6Ci0KLS0gTm8gY3V0ZSBncmFwaGljYWwgaW1hZ2VzIGZvciB0aGUgcGxheWluZyBjYXJkcyBmYWNlcyBvciBiYWNrcy4KLS0gTm8gc2NvcmluZyBvciB0aW1lci4KLS0gTm8gdW5kby4KLS0gTm8gb3B0aW9uIHRvIHR1cm4gMyBjYXJkcyBhdCBhIHRpbWUuCi0tIE5vIGtleWJvYXJkIHNob3J0Y3V0cy4KLS0gTGVzcyBmYW5jeSBhbmltYXRpb24gd2hlbiB5b3Ugd2luLgotLSBUaGUgZGV0ZXJtaW5hdGlvbiBvZiB3aGljaCBzdGFjayB5b3UgZHJhZyB0byBpcyBtb3JlIHJlbGF4ZWQuCi0KLUFwb2xvZ3k6Ci0KLUknbSBub3QgbXVjaCBvZiBhIGNhcmQgcGxheWVyLCBzbyBteSB0ZXJtaW5vbG9neSBpbiB0aGVzZSBjb21tZW50cyBtYXkKLWF0IHRpbWVzIGJlIGEgbGl0dGxlIHVudXN1YWwuICBJZiB5b3UgaGF2ZSBzdWdnZXN0aW9ucywgcGxlYXNlIGxldCBtZQota25vdyEKLQotIiIiCi0KLSMgSW1wb3J0cwotCi1pbXBvcnQgcmFuZG9tCi0KLWZyb20gdGtpbnRlciBpbXBvcnQgKgotZnJvbSBjYW52YXNldmVudHMgaW1wb3J0IEdyb3VwCi0KLQotIyBDb25zdGFudHMgZGV0ZXJtaW5pbmcgdGhlIHNpemUgYW5kIGxheS1vdXQgb2YgY2FyZHMgYW5kIHN0YWNrcy4gIFdlCi0jIHdvcmsgaW4gYSAiZ3JpZCIgd2hlcmUgZWFjaCBjYXJkL3N0YWNrIGlzIHN1cnJvdW5kZWQgYnkgTUFSR0lOCi0jIHBpeGVscyBvZiBzcGFjZSBvbiBlYWNoIHNpZGUsIHNvIGFkamFjZW50IHN0YWNrcyBhcmUgc2VwYXJhdGVkIGJ5Ci0jIDIqTUFSR0lOIHBpeGVscy4gIE9GRlNFVCBpcyB0aGUgb2Zmc2V0IHVzZWQgZm9yIGRpc3BsYXlpbmcgdGhlCi0jIGZhY2UgZG93biBjYXJkcyBpbiB0aGUgcm93IHN0YWNrcy4KLQotQ0FSRFdJRFRIID0gMTAwCi1DQVJESEVJR0hUID0gMTUwCi1NQVJHSU4gPSAxMAotWFNQQUNJTkcgPSBDQVJEV0lEVEggKyAyKk1BUkdJTgotWVNQQUNJTkcgPSBDQVJESEVJR0hUICsgNCpNQVJHSU4KLU9GRlNFVCA9IDUKLQotIyBUaGUgYmFja2dyb3VuZCBjb2xvciwgZ3JlZW4gdG8gbG9vayBsaWtlIGEgcGxheWluZyB0YWJsZS4gIFRoZQotIyBzdGFuZGFyZCBncmVlbiBpcyB3YXkgdG9vIGJyaWdodCwgYW5kIGRhcmsgZ3JlZW4gaXMgd2F5IHRvIGRhcmssIHNvCi0jIHdlIHVzZSBzb21ldGhpbmcgaW4gYmV0d2Vlbi4gIChUaGVyZSBhcmUgYSBmZXcgbW9yZSBjb2xvcnMgdGhhdAotIyBjb3VsZCBiZSBjdXN0b21pemVkLCBidXQgdGhleSBhcmUgbGVzcyBjb250cm92ZXJzaWFsLikKLQotQkFDS0dST1VORCA9ICcjMDcwJwotCi0KLSMgU3VpdHMgYW5kIGNvbG9ycy4gIFRoZSB2YWx1ZXMgb2YgdGhlIHN5bWJvbGljIHN1aXQgbmFtZXMgYXJlIHRoZQotIyBzdHJpbmdzIHVzZWQgdG8gZGlzcGxheSB0aGVtICh5b3UgY2hhbmdlIHRoZXNlIGFuZCBWQUxOQU1FUyB0bwotIyBpbnRlcm5hdGlvbmFsaXplIHRoZSBnYW1lKS4gIFRoZSBDT0xPUiBkaWN0aW9uYXJ5IG1hcHMgc3VpdCBuYW1lcyB0bwotIyBjb2xvcnMgKHJlZCBhbmQgYmxhY2spIHdoaWNoIG11c3QgYmUgVGsgY29sb3IgbmFtZXMuICBUaGUga2V5cygpIG9mCi0jIHRoZSBDT0xPUiBkaWN0aW9uYXJ5IGNvbnZlbmllbnRseSBwcm92aWRlcyB1cyB3aXRoIGEgbGlzdCBvZiBhbGwKLSMgc3VpdHMgKGluIGFyYml0cmFyeSBvcmRlcikuCi0KLUhFQVJUUyA9ICdIZWFydCcKLURJQU1PTkRTID0gJ0RpYW1vbmQnCi1DTFVCUyA9ICdDbHViJwotU1BBREVTID0gJ1NwYWRlJwotCi1SRUQgPSAncmVkJwotQkxBQ0sgPSAnYmxhY2snCi0KLUNPTE9SID0ge30KLWZvciBzIGluIChIRUFSVFMsIERJQU1PTkRTKToKLSAgICBDT0xPUltzXSA9IFJFRAotZm9yIHMgaW4gKENMVUJTLCBTUEFERVMpOgotICAgIENPTE9SW3NdID0gQkxBQ0sKLQotQUxMU1VJVFMgPSBsaXN0KENPTE9SLmtleXMoKSkKLU5TVUlUUyA9IGxlbihBTExTVUlUUykKLQotCi0jIENhcmQgdmFsdWVzIGFyZSAxLTEzLiAgV2UgYWxzbyBkZWZpbmUgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBwaWN0dXJlCi0jIGNhcmRzLiAgQUxMVkFMVUVTIGlzIGEgbGlzdCBvZiBhbGwgY2FyZCB2YWx1ZXMuCi0KLUFDRSA9IDEKLUpBQ0sgPSAxMQotUVVFRU4gPSAxMgotS0lORyA9IDEzCi1BTExWQUxVRVMgPSByYW5nZSgxLCAxNCkgIyAob25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCB2YWx1ZSkKLU5WQUxVRVMgPSBsZW4oQUxMVkFMVUVTKQotCi0KLSMgVkFMTkFNRVMgaXMgYSBsaXN0IHRoYXQgbWFwcyBhIGNhcmQgdmFsdWUgdG8gc3RyaW5nLiAgSXQgY29udGFpbnMgYQotIyBkdW1teSBlbGVtZW50IGF0IGluZGV4IDAgc28gaXQgY2FuIGJlIGluZGV4ZWQgZGlyZWN0bHkgd2l0aCB0aGUgY2FyZAotIyB2YWx1ZS4KLQotVkFMTkFNRVMgPSBbIiIsICJBIl0gKyBsaXN0KG1hcChzdHIsIHJhbmdlKDIsIDExKSkpICsgWyJKIiwgIlEiLCAiSyJdCi0KLQotIyBTb2xpdGFpcmUgY29uc3RhbnRzLiAgVGhlIG9ubHkgb25lIEkgY2FuIHRoaW5rIG9mIGlzIHRoZSBudW1iZXIgb2YKLSMgcm93IHN0YWNrcy4KLQotTlJPV1MgPSA3Ci0KLQotIyBUaGUgcmVzdCBvZiB0aGUgcHJvZ3JhbSBjb25zaXN0cyBvZiBjbGFzcyBkZWZpbml0aW9ucy4gIFRoZXNlIGFyZQotIyBmdXJ0aGVyIGRlc2NyaWJlZCBpbiB0aGVpciBkb2N1bWVudGF0aW9uIHN0cmluZ3MuCi0KLQotY2xhc3MgQ2FyZDoKLQotICAgICIiIkEgcGxheWluZyBjYXJkLgotCi0gICAgQSBjYXJkIGRvZXNuJ3QgcmVjb3JkIHRvIHdoaWNoIHN0YWNrIGl0IGJlbG9uZ3M7IG9ubHkgdGhlIHN0YWNrCi0gICAgcmVjb3JkcyB0aGlzIChpdCB0dXJucyBvdXQgdGhhdCB3ZSBhbHdheXMga25vdyB0aGlzIGZyb20gdGhlCi0gICAgY29udGV4dCwgYW5kIHRoaXMgc2F2ZXMgYSBgYGRvdWJsZSB1cGRhdGUnJyB3aXRoIHBvdGVudGlhbCBmb3IKLSAgICBpbmNvbnNpc3RlbmNpZXMpLgotCi0gICAgUHVibGljIG1ldGhvZHM6Ci0KLSAgICBtb3ZldG8oeCwgeSkgLS0gbW92ZSB0aGUgY2FyZCB0byBhbiBhYnNvbHV0ZSBwb3NpdGlvbgotICAgIG1vdmVieShkeCwgZHkpIC0tIG1vdmUgdGhlIGNhcmQgYnkgYSByZWxhdGl2ZSBvZmZzZXQKLSAgICB0a3JhaXNlKCkgLS0gcmFpc2UgdGhlIGNhcmQgdG8gdGhlIHRvcCBvZiBpdHMgc3RhY2sKLSAgICBzaG93ZmFjZSgpLCBzaG93YmFjaygpIC0tIHR1cm4gdGhlIGNhcmQgZmFjZSB1cCBvciBkb3duICYgcmFpc2UgaXQKLQotICAgIFB1YmxpYyByZWFkLW9ubHkgaW5zdGFuY2UgdmFyaWFibGVzOgotCi0gICAgc3VpdCwgdmFsdWUsIGNvbG9yIC0tIHRoZSBjYXJkJ3Mgc3VpdCwgdmFsdWUgYW5kIGNvbG9yCi0gICAgZmFjZV9zaG93biAtLSB0cnVlIHdoZW4gdGhlIGNhcmQgaXMgc2hvd24gZmFjZSB1cCwgZWxzZSBmYWxzZQotCi0gICAgU2VtaS1wdWJsaWMgcmVhZC1vbmx5IGluc3RhbmNlIHZhcmlhYmxlcyAoWFhYIHNob3VsZCBiZSBtYWRlCi0gICAgcHJpdmF0ZSk6Ci0KLSAgICBncm91cCAtLSB0aGUgQ2FudmFzLkdyb3VwIHJlcHJlc2VudGluZyB0aGUgY2FyZAotICAgIHgsIHkgLS0gdGhlIHBvc2l0aW9uIG9mIHRoZSBjYXJkJ3MgdG9wIGxlZnQgY29ybmVyCi0KLSAgICBQcml2YXRlIGluc3RhbmNlIHZhcmlhYmxlczoKLQotICAgIF9fYmFjaywgX19yZWN0LCBfX3RleHQgLS0gdGhlIGNhbnZhcyBpdGVtcyBtYWtpbmcgdXAgdGhlIGNhcmQKLQotICAgIChUbyBzaG93IHRoZSBjYXJkIGZhY2UgdXAsIHRoZSB0ZXh0IGl0ZW0gaXMgcGxhY2VkIGluIGZyb250IG9mCi0gICAgcmVjdCBhbmQgdGhlIGJhY2sgaXMgcGxhY2VkIGJlaGluZCBpdC4gIFRvIHNob3cgaXQgZmFjZSBkb3duLCB0aGlzCi0gICAgaXMgcmV2ZXJzZWQuICBUaGUgY2FyZCBpcyBjcmVhdGVkIGZhY2UgZG93bi4pCi0KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdWl0LCB2YWx1ZSwgY2FudmFzKToKLSAgICAgICAgIiIiQ2FyZCBjb25zdHJ1Y3Rvci4KLQotICAgICAgICBBcmd1bWVudHMgYXJlIHRoZSBjYXJkJ3Mgc3VpdCBhbmQgdmFsdWUsIGFuZCB0aGUgY2FudmFzIHdpZGdldC4KLQotICAgICAgICBUaGUgY2FyZCBpcyBjcmVhdGVkIGF0IHBvc2l0aW9uICgwLCAwKSwgd2l0aCBpdHMgZmFjZSBkb3duCi0gICAgICAgIChhZGRpbmcgaXQgdG8gYSBzdGFjayB3aWxsIHBvc2l0aW9uIGl0IGFjY29yZGluZyB0byB0aGF0Ci0gICAgICAgIHN0YWNrJ3MgcnVsZXMpLgotCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLnN1aXQgPSBzdWl0Ci0gICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQotICAgICAgICBzZWxmLmNvbG9yID0gQ09MT1Jbc3VpdF0KLSAgICAgICAgc2VsZi5mYWNlX3Nob3duID0gMAotCi0gICAgICAgIHNlbGYueCA9IHNlbGYueSA9IDAKLSAgICAgICAgc2VsZi5jYW52YXMgPSBjYW52YXMKLSAgICAgICAgc2VsZi5ncm91cCA9IEdyb3VwKGNhbnZhcykKLQotICAgICAgICB0ZXh0ID0gIiVzICAlcyIgJSAoVkFMTkFNRVNbdmFsdWVdLCBzdWl0KQotICAgICAgICBzZWxmLl9fdGV4dCA9IGNhbnZhcy5jcmVhdGVfdGV4dChDQVJEV0lEVEggLy8gMiwgMCwgYW5jaG9yPU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9c2VsZi5jb2xvciwgdGV4dD10ZXh0KQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKHNlbGYuX190ZXh0KQotCi0gICAgICAgIHNlbGYuX19yZWN0ID0gY2FudmFzLmNyZWF0ZV9yZWN0YW5nbGUoMCwgMCwgQ0FSRFdJRFRILCBDQVJESEVJR0hULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGxpbmU9J2JsYWNrJywgZmlsbD0nd2hpdGUnKQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKHNlbGYuX19yZWN0KQotCi0gICAgICAgIHNlbGYuX19iYWNrID0gY2FudmFzLmNyZWF0ZV9yZWN0YW5nbGUoTUFSR0lOLCBNQVJHSU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FSRFdJRFRIIC0gTUFSR0lOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBUkRIRUlHSFQgLSBNQVJHSU4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZT0nYmxhY2snLCBmaWxsPSdibHVlJykKLSAgICAgICAgc2VsZi5ncm91cC5hZGR0YWdfd2l0aHRhZyhzZWxmLl9fYmFjaykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGZvciBkZWJ1ZyBwcmludCBzdGF0ZW1lbnRzLiIiIgotICAgICAgICByZXR1cm4gIkNhcmQoJXIsICVyKSIgJSAoc2VsZi5zdWl0LCBzZWxmLnZhbHVlKQotCi0gICAgZGVmIG1vdmV0byhzZWxmLCB4LCB5KToKLSAgICAgICAgIiIiTW92ZSB0aGUgY2FyZCB0byBhYnNvbHV0ZSBwb3NpdGlvbiAoeCwgeSkuIiIiCi0gICAgICAgIHNlbGYubW92ZWJ5KHggLSBzZWxmLngsIHkgLSBzZWxmLnkpCi0KLSAgICBkZWYgbW92ZWJ5KHNlbGYsIGR4LCBkeSk6Ci0gICAgICAgICIiIk1vdmUgdGhlIGNhcmQgYnkgKGR4LCBkeSkuIiIiCi0gICAgICAgIHNlbGYueCA9IHNlbGYueCArIGR4Ci0gICAgICAgIHNlbGYueSA9IHNlbGYueSArIGR5Ci0gICAgICAgIHNlbGYuZ3JvdXAubW92ZShkeCwgZHkpCi0KLSAgICBkZWYgdGtyYWlzZShzZWxmKToKLSAgICAgICAgIiIiUmFpc2UgdGhlIGNhcmQgYWJvdmUgYWxsIG90aGVyIG9iamVjdHMgaW4gaXRzIGNhbnZhcy4iIiIKLSAgICAgICAgc2VsZi5ncm91cC50a3JhaXNlKCkKLQotICAgIGRlZiBzaG93ZmFjZShzZWxmKToKLSAgICAgICAgIiIiVHVybiB0aGUgY2FyZCdzIGZhY2UgdXAuIiIiCi0gICAgICAgIHNlbGYudGtyYWlzZSgpCi0gICAgICAgIHNlbGYuY2FudmFzLnRhZ19yYWlzZShzZWxmLl9fcmVjdCkKLSAgICAgICAgc2VsZi5jYW52YXMudGFnX3JhaXNlKHNlbGYuX190ZXh0KQotICAgICAgICBzZWxmLmZhY2Vfc2hvd24gPSAxCi0KLSAgICBkZWYgc2hvd2JhY2soc2VsZik6Ci0gICAgICAgICIiIlR1cm4gdGhlIGNhcmQncyBmYWNlIGRvd24uIiIiCi0gICAgICAgIHNlbGYudGtyYWlzZSgpCi0gICAgICAgIHNlbGYuY2FudmFzLnRhZ19yYWlzZShzZWxmLl9fcmVjdCkKLSAgICAgICAgc2VsZi5jYW52YXMudGFnX3JhaXNlKHNlbGYuX19iYWNrKQotICAgICAgICBzZWxmLmZhY2Vfc2hvd24gPSAwCi0KLQotY2xhc3MgU3RhY2s6Ci0KLSAgICAiIiJBIGdlbmVyaWMgc3RhY2sgb2YgY2FyZHMuCi0KLSAgICBUaGlzIGlzIHVzZWQgYXMgYSBiYXNlIGNsYXNzIGZvciBhbGwgb3RoZXIgc3RhY2tzIChlLmcuIHRoZSBkZWNrLAotICAgIHRoZSBzdWl0IHN0YWNrcywgYW5kIHRoZSByb3cgc3RhY2tzKS4KLQotICAgIFB1YmxpYyBtZXRob2RzOgotCi0gICAgYWRkKGNhcmQpIC0tIGFkZCBhIGNhcmQgdG8gdGhlIHN0YWNrCi0gICAgZGVsZXRlKGNhcmQpIC0tIGRlbGV0ZSBhIGNhcmQgZnJvbSB0aGUgc3RhY2sKLSAgICBzaG93dG9wKCkgLS0gc2hvdyB0aGUgdG9wIGNhcmQgKGlmIGFueSkgZmFjZSB1cAotICAgIGRlYWwoKSAtLSBkZWxldGUgYW5kIHJldHVybiB0aGUgdG9wIGNhcmQsIG9yIE5vbmUgaWYgZW1wdHkKLQotICAgIE1ldGhvZCB0aGF0IHN1YmNsYXNzZXMgbWF5IG92ZXJyaWRlOgotCi0gICAgcG9zaXRpb24oY2FyZCkgLS0gbW92ZSB0aGUgY2FyZCB0byBpdHMgcHJvcGVyICh4LCB5KSBwb3NpdGlvbgotCi0gICAgICAgIFRoZSBkZWZhdWx0IHBvc2l0aW9uKCkgbWV0aG9kIHBsYWNlcyBhbGwgY2FyZHMgYXQgdGhlIHN0YWNrJ3MKLSAgICAgICAgb3duICh4LCB5KSBwb3NpdGlvbi4KLQotICAgIHVzZXJjbGlja2hhbmRsZXIoKSwgdXNlcmRvdWJsZWNsaWNraGFuZGxlcigpIC0tIGNhbGxlZCB0byBkbwotICAgIHN1YmNsYXNzIHNwZWNpZmljIHRoaW5ncyBvbiBzaW5nbGUgYW5kIGRvdWJsZSBjbGlja3MKLQotICAgICAgICBUaGUgZGVmYXVsdCB1c2VyIChzaW5nbGUpIGNsaWNrIGhhbmRsZXIgc2hvd3MgdGhlIHRvcCBjYXJkCi0gICAgICAgIGZhY2UgdXAuICBUaGUgZGVmYXVsdCB1c2VyIGRvdWJsZSBjbGljayBoYW5kbGVyIGNhbGxzIHRoZSB1c2VyCi0gICAgICAgIHNpbmdsZSBjbGljayBoYW5kbGVyLgotCi0gICAgdXNlcm1vdmVoYW5kbGVyKGNhcmRzKSAtLSBjYWxsZWQgdG8gY29tcGxldGUgYSBzdWJwaWxlIG1vdmUKLQotICAgICAgICBUaGUgZGVmYXVsdCB1c2VyIG1vdmUgaGFuZGxlciBtb3ZlcyBhbGwgbW92ZWQgY2FyZHMgYmFjayB0bwotICAgICAgICB0aGVpciBvcmlnaW5hbCBwb3NpdGlvbiAoYnkgY2FsbGluZyB0aGUgcG9zaXRpb24oKSBtZXRob2QpLgotCi0gICAgUHJpdmF0ZSBtZXRob2RzOgotCi0gICAgY2xpY2toYW5kbGVyKGV2ZW50KSwgZG91YmxlY2xpY2toYW5kbGVyKGV2ZW50KSwKLSAgICBtb3Rpb25oYW5kbGVyKGV2ZW50KSwgcmVsZWFzZWhhbmRsZXIoZXZlbnQpIC0tIGV2ZW50IGhhbmRsZXJzCi0KLSAgICAgICAgVGhlIGRlZmF1bHQgZXZlbnQgaGFuZGxlcnMgdHVybiB0aGUgdG9wIGNhcmQgb2YgdGhlIHN0YWNrIHdpdGgKLSAgICAgICAgaXRzIGZhY2UgdXAgb24gYSAoc2luZ2xlIG9yIGRvdWJsZSkgY2xpY2ssIGFuZCBhbHNvIHN1cHBvcnQKLSAgICAgICAgbW92aW5nIGEgc3VicGlsZSBhcm91bmQuCi0KLSAgICBzdGFydG1vdmluZyhldmVudCkgLS0gYmVnaW4gYSBtb3ZlIG9wZXJhdGlvbgotICAgIGZpbmlzaG1vdmluZygpIC0tIGZpbmlzaCBhIG1vdmUgb3BlcmF0aW9uCi0KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5LCBnYW1lPU5vbmUpOgotICAgICAgICAiIiJTdGFjayBjb25zdHJ1Y3Rvci4KLQotICAgICAgICBBcmd1bWVudHMgYXJlIHRoZSBzdGFjaydzIG5vbWluYWwgeCBhbmQgeSBwb3NpdGlvbiAodGhlIHRvcAotICAgICAgICBsZWZ0IGNvcm5lciBvZiB0aGUgZmlyc3QgY2FyZCBwbGFjZWQgaW4gdGhlIHN0YWNrKSwgYW5kIHRoZQotICAgICAgICBnYW1lIG9iamVjdCAod2hpY2ggaXMgdXNlZCB0byBnZXQgdGhlIGNhbnZhczsgc3ViY2xhc3NlcyB1c2UKLSAgICAgICAgdGhlIGdhbWUgb2JqZWN0IHRvIGZpbmQgb3RoZXIgc3RhY2tzKS4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi54ID0geAotICAgICAgICBzZWxmLnkgPSB5Ci0gICAgICAgIHNlbGYuZ2FtZSA9IGdhbWUKLSAgICAgICAgc2VsZi5jYXJkcyA9IFtdCi0gICAgICAgIHNlbGYuZ3JvdXAgPSBHcm91cChzZWxmLmdhbWUuY2FudmFzKQotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzwxPicsIHNlbGYuY2xpY2toYW5kbGVyKQotICAgICAgICBzZWxmLmdyb3VwLmJpbmQoJzxEb3VibGUtMT4nLCBzZWxmLmRvdWJsZWNsaWNraGFuZGxlcikKLSAgICAgICAgc2VsZi5ncm91cC5iaW5kKCc8QjEtTW90aW9uPicsIHNlbGYubW90aW9uaGFuZGxlcikKLSAgICAgICAgc2VsZi5ncm91cC5iaW5kKCc8QnV0dG9uUmVsZWFzZS0xPicsIHNlbGYucmVsZWFzZWhhbmRsZXIpCi0gICAgICAgIHNlbGYubWFrZWJvdHRvbSgpCi0KLSAgICBkZWYgbWFrZWJvdHRvbShzZWxmKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgZm9yIGRlYnVnIHByaW50IHN0YXRlbWVudHMuIiIiCi0gICAgICAgIHJldHVybiAiJXMoJWQsICVkKSIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYueCwgc2VsZi55KQotCi0gICAgIyBQdWJsaWMgbWV0aG9kcwotCi0gICAgZGVmIGFkZChzZWxmLCBjYXJkKToKLSAgICAgICAgc2VsZi5jYXJkcy5hcHBlbmQoY2FyZCkKLSAgICAgICAgY2FyZC50a3JhaXNlKCkKLSAgICAgICAgc2VsZi5wb3NpdGlvbihjYXJkKQotICAgICAgICBzZWxmLmdyb3VwLmFkZHRhZ193aXRodGFnKGNhcmQuZ3JvdXApCi0KLSAgICBkZWYgZGVsZXRlKHNlbGYsIGNhcmQpOgotICAgICAgICBzZWxmLmNhcmRzLnJlbW92ZShjYXJkKQotICAgICAgICBjYXJkLmdyb3VwLmR0YWcoc2VsZi5ncm91cCkKLQotICAgIGRlZiBzaG93dG9wKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNhcmRzOgotICAgICAgICAgICAgc2VsZi5jYXJkc1stMV0uc2hvd2ZhY2UoKQotCi0gICAgZGVmIGRlYWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmNhcmRzOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgY2FyZCA9IHNlbGYuY2FyZHNbLTFdCi0gICAgICAgIHNlbGYuZGVsZXRlKGNhcmQpCi0gICAgICAgIHJldHVybiBjYXJkCi0KLSAgICAjIFN1YmNsYXNzIG92ZXJyaWRhYmxlIG1ldGhvZHMKLQotICAgIGRlZiBwb3NpdGlvbihzZWxmLCBjYXJkKToKLSAgICAgICAgY2FyZC5tb3ZldG8oc2VsZi54LCBzZWxmLnkpCi0KLSAgICBkZWYgdXNlcmNsaWNraGFuZGxlcihzZWxmKToKLSAgICAgICAgc2VsZi5zaG93dG9wKCkKLQotICAgIGRlZiB1c2VyZG91YmxlY2xpY2toYW5kbGVyKHNlbGYpOgotICAgICAgICBzZWxmLnVzZXJjbGlja2hhbmRsZXIoKQotCi0gICAgZGVmIHVzZXJtb3ZlaGFuZGxlcihzZWxmLCBjYXJkcyk6Ci0gICAgICAgIGZvciBjYXJkIGluIGNhcmRzOgotICAgICAgICAgICAgc2VsZi5wb3NpdGlvbihjYXJkKQotCi0gICAgIyBFdmVudCBoYW5kbGVycwotCi0gICAgZGVmIGNsaWNraGFuZGxlcihzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuZmluaXNobW92aW5nKCkgICAgICAgICAgICAgIyBJbiBjYXNlIHdlIGxvc3QgYW4gZXZlbnQKLSAgICAgICAgc2VsZi51c2VyY2xpY2toYW5kbGVyKCkKLSAgICAgICAgc2VsZi5zdGFydG1vdmluZyhldmVudCkKLQotICAgIGRlZiBtb3Rpb25oYW5kbGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5rZWVwbW92aW5nKGV2ZW50KQotCi0gICAgZGVmIHJlbGVhc2VoYW5kbGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5rZWVwbW92aW5nKGV2ZW50KQotICAgICAgICBzZWxmLmZpbmlzaG1vdmluZygpCi0KLSAgICBkZWYgZG91YmxlY2xpY2toYW5kbGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5maW5pc2htb3ZpbmcoKSAgICAgICAgICAgICAjIEluIGNhc2Ugd2UgbG9zdCBhbiBldmVudAotICAgICAgICBzZWxmLnVzZXJkb3VibGVjbGlja2hhbmRsZXIoKQotICAgICAgICBzZWxmLnN0YXJ0bW92aW5nKGV2ZW50KQotCi0gICAgIyBNb3ZlIGludGVybmFscwotCi0gICAgbW92aW5nID0gTm9uZQotCi0gICAgZGVmIHN0YXJ0bW92aW5nKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5tb3ZpbmcgPSBOb25lCi0gICAgICAgIHRhZ3MgPSBzZWxmLmdhbWUuY2FudmFzLmdldHRhZ3MoJ2N1cnJlbnQnKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5jYXJkcykpOgotICAgICAgICAgICAgY2FyZCA9IHNlbGYuY2FyZHNbaV0KLSAgICAgICAgICAgIGlmIGNhcmQuZ3JvdXAudGFnIGluIHRhZ3M6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBub3QgY2FyZC5mYWNlX3Nob3duOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYubW92aW5nID0gc2VsZi5jYXJkc1tpOl0KLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLSAgICAgICAgZm9yIGNhcmQgaW4gc2VsZi5tb3Zpbmc6Ci0gICAgICAgICAgICBjYXJkLnRrcmFpc2UoKQotCi0gICAgZGVmIGtlZXBtb3Zpbmcoc2VsZiwgZXZlbnQpOgotICAgICAgICBpZiBub3Qgc2VsZi5tb3Zpbmc6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZHggPSBldmVudC54IC0gc2VsZi5sYXN0eAotICAgICAgICBkeSA9IGV2ZW50LnkgLSBzZWxmLmxhc3R5Ci0gICAgICAgIHNlbGYubGFzdHggPSBldmVudC54Ci0gICAgICAgIHNlbGYubGFzdHkgPSBldmVudC55Ci0gICAgICAgIGlmIGR4IG9yIGR5OgotICAgICAgICAgICAgZm9yIGNhcmQgaW4gc2VsZi5tb3Zpbmc6Ci0gICAgICAgICAgICAgICAgY2FyZC5tb3ZlYnkoZHgsIGR5KQotCi0gICAgZGVmIGZpbmlzaG1vdmluZyhzZWxmKToKLSAgICAgICAgY2FyZHMgPSBzZWxmLm1vdmluZwotICAgICAgICBzZWxmLm1vdmluZyA9IE5vbmUKLSAgICAgICAgaWYgY2FyZHM6Ci0gICAgICAgICAgICBzZWxmLnVzZXJtb3ZlaGFuZGxlcihjYXJkcykKLQotCi1jbGFzcyBEZWNrKFN0YWNrKToKLQotICAgICIiIlRoZSBkZWNrIGlzIGEgc3RhY2sgd2l0aCBzdXBwb3J0IGZvciBzaHVmZmxpbmcuCi0KLSAgICBOZXcgbWV0aG9kczoKLQotICAgIGZpbGwoKSAtLSBjcmVhdGUgdGhlIHBsYXlpbmcgY2FyZHMKLSAgICBzaHVmZmxlKCkgLS0gc2h1ZmZsZSB0aGUgcGxheWluZyBjYXJkcwotCi0gICAgQSBzaW5nbGUgY2xpY2sgbW92ZXMgdGhlIHRvcCBjYXJkIHRvIHRoZSBnYW1lJ3Mgb3BlbiBkZWNrIGFuZAotICAgIG1vdmVzIGl0IGZhY2UgdXA7IGlmIHdlJ3JlIG91dCBvZiBjYXJkcywgaXQgbW92ZXMgdGhlIG9wZW4gZGVjawotICAgIGJhY2sgdG8gdGhlIGRlY2suCi0KLSAgICAiIiIKLQotICAgIGRlZiBtYWtlYm90dG9tKHNlbGYpOgotICAgICAgICBib3R0b20gPSBzZWxmLmdhbWUuY2FudmFzLmNyZWF0ZV9yZWN0YW5nbGUoc2VsZi54LCBzZWxmLnksCi0gICAgICAgICAgICBzZWxmLnggKyBDQVJEV0lEVEgsIHNlbGYueSArIENBUkRIRUlHSFQsIG91dGxpbmU9J2JsYWNrJywKLSAgICAgICAgICAgIGZpbGw9QkFDS0dST1VORCkKLSAgICAgICAgc2VsZi5ncm91cC5hZGR0YWdfd2l0aHRhZyhib3R0b20pCi0KLSAgICBkZWYgZmlsbChzZWxmKToKLSAgICAgICAgZm9yIHN1aXQgaW4gQUxMU1VJVFM6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gQUxMVkFMVUVTOgotICAgICAgICAgICAgICAgIHNlbGYuYWRkKENhcmQoc3VpdCwgdmFsdWUsIHNlbGYuZ2FtZS5jYW52YXMpKQotCi0gICAgZGVmIHNodWZmbGUoc2VsZik6Ci0gICAgICAgIG4gPSBsZW4oc2VsZi5jYXJkcykKLSAgICAgICAgbmV3Y2FyZHMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5kcGVybShuKToKLSAgICAgICAgICAgIG5ld2NhcmRzLmFwcGVuZChzZWxmLmNhcmRzW2ldKQotICAgICAgICBzZWxmLmNhcmRzID0gbmV3Y2FyZHMKLQotICAgIGRlZiB1c2VyY2xpY2toYW5kbGVyKHNlbGYpOgotICAgICAgICBvcGVuZGVjayA9IHNlbGYuZ2FtZS5vcGVuZGVjawotICAgICAgICBjYXJkID0gc2VsZi5kZWFsKCkKLSAgICAgICAgaWYgbm90IGNhcmQ6Ci0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIGNhcmQgPSBvcGVuZGVjay5kZWFsKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgY2FyZDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLmFkZChjYXJkKQotICAgICAgICAgICAgICAgIGNhcmQuc2hvd2JhY2soKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5nYW1lLm9wZW5kZWNrLmFkZChjYXJkKQotICAgICAgICAgICAgY2FyZC5zaG93ZmFjZSgpCi0KLQotZGVmIHJhbmRwZXJtKG4pOgotICAgICIiIkZ1bmN0aW9uIHJldHVybmluZyBhIHJhbmRvbSBwZXJtdXRhdGlvbiBvZiByYW5nZShuKS4iIiIKLSAgICByID0gbGlzdChyYW5nZShuKSkKLSAgICB4ID0gW10KLSAgICB3aGlsZSByOgotICAgICAgICBpID0gcmFuZG9tLmNob2ljZShyKQotICAgICAgICB4LmFwcGVuZChpKQotICAgICAgICByLnJlbW92ZShpKQotICAgIHJldHVybiB4Ci0KLQotY2xhc3MgT3BlblN0YWNrKFN0YWNrKToKLQotICAgIGRlZiBhY2NlcHRhYmxlKHNlbGYsIGNhcmRzKToKLSAgICAgICAgcmV0dXJuIDAKLQotICAgIGRlZiB1c2VybW92ZWhhbmRsZXIoc2VsZiwgY2FyZHMpOgotICAgICAgICBjYXJkID0gY2FyZHNbMF0KLSAgICAgICAgc3RhY2sgPSBzZWxmLmdhbWUuY2xvc2VzdHN0YWNrKGNhcmQpCi0gICAgICAgIGlmIG5vdCBzdGFjayBvciBzdGFjayBpcyBzZWxmIG9yIG5vdCBzdGFjay5hY2NlcHRhYmxlKGNhcmRzKToKLSAgICAgICAgICAgIFN0YWNrLnVzZXJtb3ZlaGFuZGxlcihzZWxmLCBjYXJkcykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBjYXJkIGluIGNhcmRzOgotICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlKGNhcmQpCi0gICAgICAgICAgICAgICAgc3RhY2suYWRkKGNhcmQpCi0gICAgICAgICAgICBzZWxmLmdhbWUud2luY2hlY2soKQotCi0gICAgZGVmIHVzZXJkb3VibGVjbGlja2hhbmRsZXIoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmNhcmRzOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGNhcmQgPSBzZWxmLmNhcmRzWy0xXQotICAgICAgICBpZiBub3QgY2FyZC5mYWNlX3Nob3duOgotICAgICAgICAgICAgc2VsZi51c2VyY2xpY2toYW5kbGVyKCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBmb3IgcyBpbiBzZWxmLmdhbWUuc3VpdHM6Ci0gICAgICAgICAgICBpZiBzLmFjY2VwdGFibGUoW2NhcmRdKToKLSAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZShjYXJkKQotICAgICAgICAgICAgICAgIHMuYWRkKGNhcmQpCi0gICAgICAgICAgICAgICAgc2VsZi5nYW1lLndpbmNoZWNrKCkKLSAgICAgICAgICAgICAgICBicmVhawotCi0KLWNsYXNzIFN1aXRTdGFjayhPcGVuU3RhY2spOgotCi0gICAgZGVmIG1ha2Vib3R0b20oc2VsZik6Ci0gICAgICAgIGJvdHRvbSA9IHNlbGYuZ2FtZS5jYW52YXMuY3JlYXRlX3JlY3RhbmdsZShzZWxmLngsIHNlbGYueSwKLSAgICAgICAgICAgIHNlbGYueCArIENBUkRXSURUSCwgc2VsZi55ICsgQ0FSREhFSUdIVCwgb3V0bGluZT0nYmxhY2snLCBmaWxsPScnKQotCi0gICAgZGVmIHVzZXJjbGlja2hhbmRsZXIoc2VsZik6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiB1c2VyZG91YmxlY2xpY2toYW5kbGVyKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgYWNjZXB0YWJsZShzZWxmLCBjYXJkcyk6Ci0gICAgICAgIGlmIGxlbihjYXJkcykgIT0gMToKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGNhcmQgPSBjYXJkc1swXQotICAgICAgICBpZiBub3Qgc2VsZi5jYXJkczoKLSAgICAgICAgICAgIHJldHVybiBjYXJkLnZhbHVlID09IEFDRQotICAgICAgICB0b3BjYXJkID0gc2VsZi5jYXJkc1stMV0KLSAgICAgICAgcmV0dXJuIGNhcmQuc3VpdCA9PSB0b3BjYXJkLnN1aXQgYW5kIGNhcmQudmFsdWUgPT0gdG9wY2FyZC52YWx1ZSArIDEKLQotCi1jbGFzcyBSb3dTdGFjayhPcGVuU3RhY2spOgotCi0gICAgZGVmIGFjY2VwdGFibGUoc2VsZiwgY2FyZHMpOgotICAgICAgICBjYXJkID0gY2FyZHNbMF0KLSAgICAgICAgaWYgbm90IHNlbGYuY2FyZHM6Ci0gICAgICAgICAgICByZXR1cm4gY2FyZC52YWx1ZSA9PSBLSU5HCi0gICAgICAgIHRvcGNhcmQgPSBzZWxmLmNhcmRzWy0xXQotICAgICAgICBpZiBub3QgdG9wY2FyZC5mYWNlX3Nob3duOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgcmV0dXJuIGNhcmQuY29sb3IgIT0gdG9wY2FyZC5jb2xvciBhbmQgY2FyZC52YWx1ZSA9PSB0b3BjYXJkLnZhbHVlIC0gMQotCi0gICAgZGVmIHBvc2l0aW9uKHNlbGYsIGNhcmQpOgotICAgICAgICB5ID0gc2VsZi55Ci0gICAgICAgIGZvciBjIGluIHNlbGYuY2FyZHM6Ci0gICAgICAgICAgICBpZiBjID09IGNhcmQ6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGMuZmFjZV9zaG93bjoKLSAgICAgICAgICAgICAgICB5ID0geSArIDIqTUFSR0lOCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHkgPSB5ICsgT0ZGU0VUCi0gICAgICAgIGNhcmQubW92ZXRvKHNlbGYueCwgeSkKLQotCi1jbGFzcyBTb2xpdGFpcmU6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyKToKLSAgICAgICAgc2VsZi5tYXN0ZXIgPSBtYXN0ZXIKLQotICAgICAgICBzZWxmLmNhbnZhcyA9IENhbnZhcyhzZWxmLm1hc3RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD1CQUNLR1JPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHR0aGlja25lc3M9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9TlJPV1MqWFNQQUNJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0zKllTUEFDSU5HICsgMjAgKyBNQVJHSU4pCi0gICAgICAgIHNlbGYuY2FudmFzLnBhY2soZmlsbD1CT1RILCBleHBhbmQ9VFJVRSkKLQotICAgICAgICBzZWxmLmRlYWxidXR0b24gPSBCdXR0b24oc2VsZi5jYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSJEZWFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hsaWdodHRoaWNrbmVzcz0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD1CQUNLR1JPVU5ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlYmFja2dyb3VuZD0iZ3JlZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmRlYWwpCi0gICAgICAgIHNlbGYuY2FudmFzLmNyZWF0ZV93aW5kb3coTUFSR0lOLCAzICogWVNQQUNJTkcgKyAyMCwKLSAgICAgICAgICAgIHdpbmRvdz1zZWxmLmRlYWxidXR0b24sIGFuY2hvcj1TVykKLQotICAgICAgICB4ID0gTUFSR0lOCi0gICAgICAgIHkgPSBNQVJHSU4KLQotICAgICAgICBzZWxmLmRlY2sgPSBEZWNrKHgsIHksIHNlbGYpCi0KLSAgICAgICAgeCA9IHggKyBYU1BBQ0lORwotICAgICAgICBzZWxmLm9wZW5kZWNrID0gT3BlblN0YWNrKHgsIHksIHNlbGYpCi0KLSAgICAgICAgeCA9IHggKyBYU1BBQ0lORwotICAgICAgICBzZWxmLnN1aXRzID0gW10KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTlNVSVRTKToKLSAgICAgICAgICAgIHggPSB4ICsgWFNQQUNJTkcKLSAgICAgICAgICAgIHNlbGYuc3VpdHMuYXBwZW5kKFN1aXRTdGFjayh4LCB5LCBzZWxmKSkKLQotICAgICAgICB4ID0gTUFSR0lOCi0gICAgICAgIHkgPSB5ICsgWVNQQUNJTkcKLQotICAgICAgICBzZWxmLnJvd3MgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShOUk9XUyk6Ci0gICAgICAgICAgICBzZWxmLnJvd3MuYXBwZW5kKFJvd1N0YWNrKHgsIHksIHNlbGYpKQotICAgICAgICAgICAgeCA9IHggKyBYU1BBQ0lORwotCi0gICAgICAgIHNlbGYub3BlbnN0YWNrcyA9IFtzZWxmLm9wZW5kZWNrXSArIHNlbGYuc3VpdHMgKyBzZWxmLnJvd3MKLQotICAgICAgICBzZWxmLmRlY2suZmlsbCgpCi0gICAgICAgIHNlbGYuZGVhbCgpCi0KLSAgICBkZWYgd2luY2hlY2soc2VsZik6Ci0gICAgICAgIGZvciBzIGluIHNlbGYuc3VpdHM6Ci0gICAgICAgICAgICBpZiBsZW4ocy5jYXJkcykgIT0gTlZBTFVFUzoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi53aW4oKQotICAgICAgICBzZWxmLmRlYWwoKQotCi0gICAgZGVmIHdpbihzZWxmKToKLSAgICAgICAgIiIiU3R1cGlkIGFuaW1hdGlvbiB3aGVuIHlvdSB3aW4uIiIiCi0gICAgICAgIGNhcmRzID0gW10KLSAgICAgICAgZm9yIHMgaW4gc2VsZi5vcGVuc3RhY2tzOgotICAgICAgICAgICAgY2FyZHMgPSBjYXJkcyArIHMuY2FyZHMKLSAgICAgICAgd2hpbGUgY2FyZHM6Ci0gICAgICAgICAgICBjYXJkID0gcmFuZG9tLmNob2ljZShjYXJkcykKLSAgICAgICAgICAgIGNhcmRzLnJlbW92ZShjYXJkKQotICAgICAgICAgICAgc2VsZi5hbmltYXRlZG1vdmV0byhjYXJkLCBzZWxmLmRlY2spCi0KLSAgICBkZWYgYW5pbWF0ZWRtb3ZldG8oc2VsZiwgY2FyZCwgZGVzdCk6Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwLCAwLCAtMSk6Ci0gICAgICAgICAgICBkeCwgZHkgPSAoZGVzdC54LWNhcmQueCkvL2ksIChkZXN0LnktY2FyZC55KS8vaQotICAgICAgICAgICAgY2FyZC5tb3ZlYnkoZHgsIGR5KQotICAgICAgICAgICAgc2VsZi5tYXN0ZXIudXBkYXRlX2lkbGV0YXNrcygpCi0KLSAgICBkZWYgY2xvc2VzdHN0YWNrKHNlbGYsIGNhcmQpOgotICAgICAgICBjbG9zZXN0ID0gTm9uZQotICAgICAgICBjZGlzdCA9IDk5OTk5OTk5OQotICAgICAgICAjIFNpbmNlIHdlIG9ubHkgY29tcGFyZSBkaXN0YW5jZXMsCi0gICAgICAgICMgd2UgZG9uJ3QgYm90aGVyIHRvIHRha2UgdGhlIHNxdWFyZSByb290LgotICAgICAgICBmb3Igc3RhY2sgaW4gc2VsZi5vcGVuc3RhY2tzOgotICAgICAgICAgICAgZGlzdCA9IChzdGFjay54IC0gY2FyZC54KSoqMiArIChzdGFjay55IC0gY2FyZC55KSoqMgotICAgICAgICAgICAgaWYgZGlzdCA8IGNkaXN0OgotICAgICAgICAgICAgICAgIGNsb3Nlc3QgPSBzdGFjawotICAgICAgICAgICAgICAgIGNkaXN0ID0gZGlzdAotICAgICAgICByZXR1cm4gY2xvc2VzdAotCi0gICAgZGVmIGRlYWwoc2VsZik6Ci0gICAgICAgIHNlbGYucmVzZXQoKQotICAgICAgICBzZWxmLmRlY2suc2h1ZmZsZSgpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKE5ST1dTKToKLSAgICAgICAgICAgIGZvciByIGluIHNlbGYucm93c1tpOl06Ci0gICAgICAgICAgICAgICAgY2FyZCA9IHNlbGYuZGVjay5kZWFsKCkKLSAgICAgICAgICAgICAgICByLmFkZChjYXJkKQotICAgICAgICBmb3IgciBpbiBzZWxmLnJvd3M6Ci0gICAgICAgICAgICByLnNob3d0b3AoKQotCi0gICAgZGVmIHJlc2V0KHNlbGYpOgotICAgICAgICBmb3Igc3RhY2sgaW4gc2VsZi5vcGVuc3RhY2tzOgotICAgICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICAgICBjYXJkID0gc3RhY2suZGVhbCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGNhcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc2VsZi5kZWNrLmFkZChjYXJkKQotICAgICAgICAgICAgICAgIGNhcmQuc2hvd2JhY2soKQotCi0KLSMgTWFpbiBmdW5jdGlvbiwgcnVuIHdoZW4gaW52b2tlZCBhcyBhIHN0YW5kLWFsb25lIFB5dGhvbiBwcm9ncmFtLgotCi1kZWYgbWFpbigpOgotICAgIHJvb3QgPSBUaygpCi0gICAgZ2FtZSA9IFNvbGl0YWlyZShyb290KQotICAgIHJvb3QucHJvdG9jb2woJ1dNX0RFTEVURV9XSU5ET1cnLCByb290LnF1aXQpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vc3ZraWxsLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL3N2a2lsbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTYzYTMyYi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vc3ZraWxsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBUa2ludGVyIGludGVyZmFjZSB0byBTWVNWIGBwcycgYW5kIGBraWxsJyBjb21tYW5kcy4KLQotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLWlmIFRrVmVyc2lvbiA8IDQuMDoKLSAgICByYWlzZSBJbXBvcnRFcnJvcigiVGhpcyB2ZXJzaW9uIG9mIHN2a2lsbCByZXF1aXJlcyBUayA0LjAgb3IgbGF0ZXIiKQotCi1pbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IG9zCi0KLXVzZXIgPSBvcy5lbnZpcm9uWydMT0dOQU1FJ10KLQotY2xhc3MgQmFyQnV0dG9uKE1lbnVidXR0b24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKipjbmYpOgotICAgICAgICBNZW51YnV0dG9uLl9faW5pdF9fKHNlbGYsIG1hc3RlciwgKipjbmYpCi0gICAgICAgIHNlbGYucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYubWVudSA9IE1lbnUoc2VsZiwgbmFtZT0nbWVudScpCi0gICAgICAgIHNlbGZbJ21lbnUnXSA9IHNlbGYubWVudQotCi1jbGFzcyBLaWxsKEZyYW1lKToKLSAgICAjIExpc3Qgb2YgKG5hbWUsIG9wdGlvbiwgcGlkX2NvbHVtbikKLSAgICB2aWV3X2xpc3QgPSBbCi0gICAgICAgICAgICAoJ0RlZmF1bHQnLCAnJyksCi0gICAgICAgICAgICAoJ0V2ZXJ5ICgtZSknLCAnLWUnKSwKLSAgICAgICAgICAgICgnTm9uIHByb2Nlc3MgZ3JvdXAgbGVhZGVycyAoLWQpJywgJy1kJyksCi0gICAgICAgICAgICAoJ05vbiBsZWFkZXJzIHdpdGggdHR5ICgtYSknLCAnLWEnKSwKLSAgICAgICAgICAgICgnRm9yIHRoaXMgdXNlciAoLXUgJXMpJyAlIHVzZXIsICctdSAlcycgJSB1c2VyKSwKLSAgICAgICAgICAgIF0KLSAgICBmb3JtYXRfbGlzdCA9IFsKLSAgICAgICAgICAgICgnRGVmYXVsdCcsICcnLCAwKSwKLSAgICAgICAgICAgICgnTG9uZyAoLWwpJywgJy1sJywgMyksCi0gICAgICAgICAgICAoJ0Z1bGwgKC1mKScsICctZicsIDEpLAotICAgICAgICAgICAgKCdGdWxsIExvbmcgKC1mIC1sKScsICctbCAtZicsIDMpLAotICAgICAgICAgICAgKCdTZXNzaW9uIGFuZCBncm91cCBJRCAoLWopJywgJy1qJywgMCksCi0gICAgICAgICAgICAoJ1NjaGVkdWxlciBwcm9wZXJ0aWVzICgtYyknLCAnLWMnLCAwKSwKLSAgICAgICAgICAgIF0KLSAgICBkZWYga2lsbChzZWxmLCBzZWxlY3RlZCk6Ci0gICAgICAgIGMgPSBzZWxmLmZvcm1hdF9saXN0W3NlbGYuZm9ybWF0LmdldCgpXVsyXQotICAgICAgICBwaWQgPSBzZWxlY3RlZC5zcGxpdCgpW2NdCi0gICAgICAgIG9zLnN5c3RlbSgna2lsbCAtOSAnICsgcGlkKQotICAgICAgICBzZWxmLmRvX3VwZGF0ZSgpCi0gICAgZGVmIGRvX3VwZGF0ZShzZWxmKToKLSAgICAgICAgZm9ybWF0ID0gc2VsZi5mb3JtYXRfbGlzdFtzZWxmLmZvcm1hdC5nZXQoKV1bMV0KLSAgICAgICAgdmlldyA9IHNlbGYudmlld19saXN0W3NlbGYudmlldy5nZXQoKV1bMV0KLSAgICAgICAgcyA9IHN1YnByb2Nlc3MuZ2V0b3V0cHV0KCdwcyAlcyAlcycgJSAodmlldywgZm9ybWF0KSkKLSAgICAgICAgbGlzdCA9IHMuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5oZWFkZXIuc2V0KGxpc3RbMF0gKyAnICAgICAgICAgICcpCi0gICAgICAgIGRlbCBsaXN0WzBdCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdC5kZWxldGUoMCwgQXRFbmQoKSkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGlzdDoKLSAgICAgICAgICAgIHNlbGYuZnJhbWUubGlzdC5pbnNlcnQoMCwgbGluZSkKLSAgICBkZWYgZG9fbW90aW9uKHNlbGYsIGUpOgotICAgICAgICBlLndpZGdldC5zZWxlY3RfY2xlYXIoJzAnLCAnZW5kJykKLSAgICAgICAgZS53aWRnZXQuc2VsZWN0X3NldChlLndpZGdldC5uZWFyZXN0KGUueSkpCi0gICAgZGVmIGRvX2xlYXZlKHNlbGYsIGUpOgotICAgICAgICBlLndpZGdldC5zZWxlY3RfY2xlYXIoJzAnLCAnZW5kJykKLSAgICBkZWYgZG9fMShzZWxmLCBlKToKLSAgICAgICAgc2VsZi5raWxsKGUud2lkZ2V0LmdldChlLndpZGdldC5uZWFyZXN0KGUueSkpKQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgKipjbmYpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICoqY25mKQotICAgICAgICBzZWxmLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5iYXIgPSBGcmFtZShzZWxmLCBuYW1lPSdiYXInLCByZWxpZWY9UkFJU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPTIpCi0gICAgICAgIHNlbGYuYmFyLnBhY2soZmlsbD1YKQotICAgICAgICBzZWxmLmJhci5maWxlID0gQmFyQnV0dG9uKHNlbGYuYmFyLCB0ZXh0PSdGaWxlJykKLSAgICAgICAgc2VsZi5iYXIuZmlsZS5tZW51LmFkZF9jb21tYW5kKAotICAgICAgICAgICAgICAgIGxhYmVsPSdRdWl0JywgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuYmFyLnZpZXcgPSBCYXJCdXR0b24oc2VsZi5iYXIsIHRleHQ9J1ZpZXcnKQotICAgICAgICBzZWxmLmJhci5mb3JtYXQgPSBCYXJCdXR0b24oc2VsZi5iYXIsIHRleHQ9J0Zvcm1hdCcpCi0gICAgICAgIHNlbGYudmlldyA9IEludFZhcihzZWxmKQotICAgICAgICBzZWxmLnZpZXcuc2V0KDApCi0gICAgICAgIHNlbGYuZm9ybWF0ID0gSW50VmFyKHNlbGYpCi0gICAgICAgIHNlbGYuZm9ybWF0LnNldCgwKQotICAgICAgICBmb3IgbnVtIGluIHJhbmdlKGxlbihzZWxmLnZpZXdfbGlzdCkpOgotICAgICAgICAgICAgbGFiZWwsIG9wdGlvbiA9IHNlbGYudmlld19saXN0W251bV0KLSAgICAgICAgICAgIHNlbGYuYmFyLnZpZXcubWVudS5hZGRfcmFkaW9idXR0b24oCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsPWxhYmVsLAotICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuZG9fdXBkYXRlLAotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLnZpZXcsCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlPW51bSkKLSAgICAgICAgZm9yIG51bSBpbiByYW5nZShsZW4oc2VsZi5mb3JtYXRfbGlzdCkpOgotICAgICAgICAgICAgbGFiZWwsIG9wdGlvbiwgY29sID0gc2VsZi5mb3JtYXRfbGlzdFtudW1dCi0gICAgICAgICAgICBzZWxmLmJhci5mb3JtYXQubWVudS5hZGRfcmFkaW9idXR0b24oCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsPWxhYmVsLAotICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuZG9fdXBkYXRlLAotICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgdmFsdWU9bnVtKQotICAgICAgICBzZWxmLmJhci50a19tZW51QmFyKHNlbGYuYmFyLmZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYXIudmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJhci5mb3JtYXQpCi0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShzZWxmLCByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0yKQotICAgICAgICBzZWxmLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5oZWFkZXIgPSBTdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5mcmFtZS5sYWJlbCA9IExhYmVsKAotICAgICAgICAgICAgICAgIHNlbGYuZnJhbWUsIHJlbGllZj1GTEFULCBhbmNob3I9TlcsIGJvcmRlcndpZHRoPTAsCi0gICAgICAgICAgICAgICAgdGV4dHZhcmlhYmxlPXNlbGYuaGVhZGVyKQotICAgICAgICBzZWxmLmZyYW1lLmxhYmVsLnBhY2soZmlsbD1ZLCBhbmNob3I9VykKLSAgICAgICAgc2VsZi5mcmFtZS52c2Nyb2xsID0gU2Nyb2xsYmFyKHNlbGYuZnJhbWUsIG9yaWVudD1WRVJUSUNBTCkKLSAgICAgICAgc2VsZi5mcmFtZS5saXN0ID0gTGlzdGJveCgKLSAgICAgICAgICAgICAgICBzZWxmLmZyYW1lLAotICAgICAgICAgICAgICAgIHJlbGllZj1TVU5LRU4sCi0gICAgICAgICAgICAgICAgd2lkdGg9NDAsIGhlaWdodD0xMCwKLSAgICAgICAgICAgICAgICBzZWxlY3RiYWNrZ3JvdW5kPScjZWVkNWI3JywKLSAgICAgICAgICAgICAgICBzZWxlY3Rib3JkZXJ3aWR0aD0wLAotICAgICAgICAgICAgICAgIHNlbGVjdG1vZGU9QlJPV1NFLAotICAgICAgICAgICAgICAgIHlzY3JvbGw9c2VsZi5mcmFtZS52c2Nyb2xsLnNldCkKLSAgICAgICAgc2VsZi5mcmFtZS52c2Nyb2xsWydjb21tYW5kJ10gPSBzZWxmLmZyYW1lLmxpc3QueXZpZXcKLSAgICAgICAgc2VsZi5mcmFtZS52c2Nyb2xsLnBhY2soc2lkZT1SSUdIVCwgZmlsbD1ZKQotICAgICAgICBzZWxmLmZyYW1lLmxpc3QucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLnVwZGF0ZSA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdVcGRhdGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuZG9fdXBkYXRlKQotICAgICAgICBzZWxmLnVwZGF0ZS5wYWNrKGZpbGw9WCkKLSAgICAgICAgc2VsZi5mcmFtZS5saXN0LmJpbmQoJzxNb3Rpb24+Jywgc2VsZi5kb19tb3Rpb24pCi0gICAgICAgIHNlbGYuZnJhbWUubGlzdC5iaW5kKCc8TGVhdmU+Jywgc2VsZi5kb19sZWF2ZSkKLSAgICAgICAgc2VsZi5mcmFtZS5saXN0LmJpbmQoJzwxPicsIHNlbGYuZG9fMSkKLSAgICAgICAgc2VsZi5kb191cGRhdGUoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGtpbGwgPSBLaWxsKE5vbmUsIGJvcmRlcndpZHRoPTUpCi0gICAga2lsbC53aW5mb190b3BsZXZlbCgpLnRpdGxlKCdUa2ludGVyIFByb2Nlc3MgS2lsbGVyIChTWVNWKScpCi0gICAga2lsbC53aW5mb190b3BsZXZlbCgpLm1pbnNpemUoMSwgMSkKLSAgICBraWxsLm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby9zd2l0Y2gucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vc3dpdGNoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjQzOTI1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9ndWlkby9zd2l0Y2gucHkKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0jIFNob3cgaG93IHRvIGRvIHN3aXRjaGFibGUgcGFuZWxzLgotCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotY2xhc3MgQXBwOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcD1Ob25lLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIGlmIHRvcCBpcyBOb25lOgotICAgICAgICAgICAgaWYgbWFzdGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdG9wID0gVGsoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0b3AgPSBUb3BsZXZlbChtYXN0ZXIpCi0gICAgICAgIHNlbGYudG9wID0gdG9wCi0gICAgICAgIHNlbGYuYnV0dG9uZnJhbWUgPSBGcmFtZSh0b3ApCi0gICAgICAgIHNlbGYuYnV0dG9uZnJhbWUucGFjaygpCi0gICAgICAgIHNlbGYucGFuZWxmcmFtZSA9IEZyYW1lKHRvcCwgIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUpCi0gICAgICAgIHNlbGYucGFuZWxmcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYucGFuZWxzID0ge30KLSAgICAgICAgc2VsZi5jdXJwYW5lbCA9IE5vbmUKLQotICAgIGRlZiBhZGRwYW5lbChzZWxmLCBuYW1lLCBrbGFzcyk6Ci0gICAgICAgIGJ1dHRvbiA9IEJ1dHRvbihzZWxmLmJ1dHRvbmZyYW1lLCB0ZXh0PW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYSBzZWxmPXNlbGYsIG5hbWU9bmFtZTogc2VsZi5zaG93KG5hbWUpKQotICAgICAgICBidXR0b24ucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIGZyYW1lID0gRnJhbWUoc2VsZi5wYW5lbGZyYW1lKQotICAgICAgICBpbnN0YW5jZSA9IGtsYXNzKGZyYW1lKQotICAgICAgICBzZWxmLnBhbmVsc1tuYW1lXSA9IChidXR0b24sIGZyYW1lLCBpbnN0YW5jZSkKLSAgICAgICAgaWYgc2VsZi5jdXJwYW5lbCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5zaG93KG5hbWUpCi0KLSAgICBkZWYgc2hvdyhzZWxmLCBuYW1lKToKLSAgICAgICAgKGJ1dHRvbiwgZnJhbWUsIGluc3RhbmNlKSA9IHNlbGYucGFuZWxzW25hbWVdCi0gICAgICAgIGlmIHNlbGYuY3VycGFuZWw6Ci0gICAgICAgICAgICBzZWxmLmN1cnBhbmVsLnBhY2tfZm9yZ2V0KCkKLSAgICAgICAgc2VsZi5jdXJwYW5lbCA9IGZyYW1lCi0gICAgICAgIGZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotCi1jbGFzcyBMYWJlbFBhbmVsOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZSk6Ci0gICAgICAgIHNlbGYubGFiZWwgPSBMYWJlbChmcmFtZSwgdGV4dD0iSGVsbG8gd29ybGQiKQotICAgICAgICBzZWxmLmxhYmVsLnBhY2soKQotCi1jbGFzcyBCdXR0b25QYW5lbDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWUpOgotICAgICAgICBzZWxmLmJ1dHRvbiA9IEJ1dHRvbihmcmFtZSwgdGV4dD0iUHJlc3MgbWUiKQotICAgICAgICBzZWxmLmJ1dHRvbi5wYWNrKCkKLQotZGVmIG1haW4oKToKLSAgICBhcHAgPSBBcHAoKQotICAgIGFwcC5hZGRwYW5lbCgibGFiZWwiLCBMYWJlbFBhbmVsKQotICAgIGFwcC5hZGRwYW5lbCgiYnV0dG9uIiwgQnV0dG9uUGFuZWwpCi0gICAgYXBwLnRvcC5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vdGttYW4ucHkgYi9EZW1vL3RraW50ZXIvZ3VpZG8vdGttYW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDFiYWVkODguLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3RrbWFuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjY3ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBUayBtYW4gcGFnZSBicm93c2VyIC0tIGN1cnJlbnRseSBvbmx5IHNob3dzIHRoZSBUY2wvVGsgbWFuIHBhZ2VzCi0KLWltcG9ydCBvcwotaW1wb3J0IHJlCi1pbXBvcnQgc3lzCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotZnJvbSBtYW5wYWdlIGltcG9ydCBNYW5QYWdlCi0KLU1BTk5ESVJMSVNUID0gWycvdXNyL2xvY2FsL21hbi9tYW5uJywgJy91c3Ivc2hhcmUvbWFuL21hbm4nXQotTUFOM0RJUkxJU1QgPSBbJy91c3IvbG9jYWwvbWFuL21hbjMnLCAnL3Vzci9zaGFyZS9tYW4vbWFuMyddCi0KLWZvdW5kbWFubmRpciA9IDAKLWZvciBkaXIgaW4gTUFOTkRJUkxJU1Q6Ci0gICAgaWYgb3MucGF0aC5leGlzdHMoZGlyKToKLSAgICAgICAgTUFOTkRJUiA9IGRpcgotICAgICAgICBmb3VuZG1hbm5kaXIgPSAxCi0KLWZvdW5kbWFuM2RpciA9IDAKLWZvciBkaXIgaW4gTUFOM0RJUkxJU1Q6Ci0gICAgaWYgb3MucGF0aC5leGlzdHMoZGlyKToKLSAgICAgICAgTUFOM0RJUiA9IGRpcgotICAgICAgICBmb3VuZG1hbjNkaXIgPSAgMQotCi1pZiBub3QgZm91bmRtYW5uZGlyIG9yIG5vdCBmb3VuZG1hbjNkaXI6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgnXG4nKQotICAgIGlmIG5vdCBmb3VuZG1hbm5kaXI6Ci0gICAgICAgIG1zZyA9ICIiIlwKLUZhaWxlZCB0byBmaW5kIG1hbm4gZGlyZWN0b3J5LgotUGxlYXNlIGFkZCB0aGUgY29ycmVjdCBlbnRyeSB0byB0aGUgTUFOTkRJUkxJU1QKLWF0IHRoZSB0b3Agb2YgJXMgc2NyaXB0LiIiIiAlIFwKLXN5cy5hcmd2WzBdCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG5cbiIgJSBtc2cpCi0gICAgaWYgbm90IGZvdW5kbWFuM2RpcjoKLSAgICAgICAgbXNnID0gIiIiXAotRmFpbGVkIHRvIGZpbmQgbWFuMyBkaXJlY3RvcnkuCi1QbGVhc2UgYWRkIHRoZSBjb3JyZWN0IGVudHJ5IHRvIHRoZSBNQU4zRElSTElTVAotYXQgdGhlIHRvcCBvZiAlcyBzY3JpcHQuIiIiICUgXAotc3lzLmFyZ3ZbMF0KLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXNcblxuIiAlIG1zZykKLSAgICBzeXMuZXhpdCgxKQotCi1kZWwgZm91bmRtYW5uZGlyCi1kZWwgZm91bmRtYW4zZGlyCi0KLWRlZiBsaXN0bWFucGFnZXMobWFuZGlyKToKLSAgICBmaWxlcyA9IG9zLmxpc3RkaXIobWFuZGlyKQotICAgIG5hbWVzID0gW10KLSAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgaWYgZmlsZVstMjotMV0gPT0gJy4nIGFuZCAgKGZpbGVbLTFdIGluICdsbjEyMzQ1Njc4OScpOgotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGZpbGVbOi0yXSkKLSAgICBuYW1lcy5zb3J0KCkKLSAgICByZXR1cm4gbmFtZXMKLQotY2xhc3MgU2VsZWN0aW9uQm94OgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgc2VsZi5jaG9pY2VzID0gW10KLQotICAgICAgICBzZWxmLmZyYW1lID0gRnJhbWUobWFzdGVyLCBuYW1lPSJmcmFtZSIpCi0gICAgICAgIHNlbGYuZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLm1hc3RlciA9IHNlbGYuZnJhbWUubWFzdGVyCi0gICAgICAgIHNlbGYuc3ViZnJhbWUgPSBGcmFtZShzZWxmLmZyYW1lLCBuYW1lPSJzdWJmcmFtZSIpCi0gICAgICAgIHNlbGYuc3ViZnJhbWUucGFjayhleHBhbmQ9MCwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmxlZnRzdWJmcmFtZSA9IEZyYW1lKHNlbGYuc3ViZnJhbWUsIG5hbWU9J2xlZnRzdWJmcmFtZScpCi0gICAgICAgIHNlbGYubGVmdHN1YmZyYW1lLnBhY2soc2lkZT1MRUZULCBleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLnJpZ2h0c3ViZnJhbWUgPSBGcmFtZShzZWxmLnN1YmZyYW1lLCBuYW1lPSdyaWdodHN1YmZyYW1lJykKLSAgICAgICAgc2VsZi5yaWdodHN1YmZyYW1lLnBhY2soc2lkZT1SSUdIVCwgZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5jaGFwdGVydmFyID0gU3RyaW5nVmFyKG1hc3RlcikKLSAgICAgICAgc2VsZi5jaGFwdGVyID0gTWVudWJ1dHRvbihzZWxmLnJpZ2h0c3ViZnJhbWUsIG5hbWU9J2NoYXB0ZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9J0RpcmVjdG9yeScsIHJlbGllZj1SQUlTRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGg9MikKLSAgICAgICAgc2VsZi5jaGFwdGVyLnBhY2soc2lkZT1UT1ApCi0gICAgICAgIHNlbGYuY2hhcHRlcm1lbnUgPSBNZW51KHNlbGYuY2hhcHRlciwgbmFtZT0nY2hhcHRlcm1lbnUnKQotICAgICAgICBzZWxmLmNoYXB0ZXJtZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nQyBmdW5jdGlvbnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1NQU4zRElSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmNoYXB0ZXJ2YXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5uZXdjaGFwdGVyKQotICAgICAgICBzZWxmLmNoYXB0ZXJtZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nVGNsL1RrIGZ1bmN0aW9ucycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPU1BTk5ESVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuY2hhcHRlcnZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLm5ld2NoYXB0ZXIpCi0gICAgICAgIHNlbGYuY2hhcHRlclsnbWVudSddID0gc2VsZi5jaGFwdGVybWVudQotICAgICAgICBzZWxmLmxpc3Rib3ggPSBMaXN0Ym94KHNlbGYucmlnaHRzdWJmcmFtZSwgbmFtZT0nbGlzdGJveCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsaWVmPVNVTktFTiwgYm9yZGVyd2lkdGg9MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0yMCwgaGVpZ2h0PTUpCi0gICAgICAgIHNlbGYubGlzdGJveC5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYubDEgPSBCdXR0b24oc2VsZi5sZWZ0c3ViZnJhbWUsIG5hbWU9J2wxJywKLSAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdEaXNwbGF5IG1hbnVhbCBwYWdlIG5hbWVkOicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmVudHJ5X2NiKQotICAgICAgICBzZWxmLmwxLnBhY2soc2lkZT1UT1ApCi0gICAgICAgIHNlbGYuZW50cnkgPSBFbnRyeShzZWxmLmxlZnRzdWJmcmFtZSwgbmFtZT0nZW50cnknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj1TVU5LRU4sIGJvcmRlcndpZHRoPTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjApCi0gICAgICAgIHNlbGYuZW50cnkucGFjayhleHBhbmQ9MCwgZmlsbD1YKQotICAgICAgICBzZWxmLmwyZnJhbWUgPSBGcmFtZShzZWxmLmxlZnRzdWJmcmFtZSwgbmFtZT0nbDJmcmFtZScpCi0gICAgICAgIHNlbGYubDJmcmFtZS5wYWNrKGV4cGFuZD0wLCBmaWxsPU5PTkUpCi0gICAgICAgIHNlbGYubDIgPSBCdXR0b24oc2VsZi5sMmZyYW1lLCBuYW1lPSdsMicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nU2VhcmNoIHJlZ2V4cDonLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5zZWFyY2hfY2IpCi0gICAgICAgIHNlbGYubDIucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYuY2FzZXZhciA9IEJvb2xlYW5WYXIoKQotICAgICAgICBzZWxmLmNhc2VzZW5zZSA9IENoZWNrYnV0dG9uKHNlbGYubDJmcmFtZSwgbmFtZT0nY2FzZXNlbnNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSdDYXNlIHNlbnNpdGl2ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9c2VsZi5jYXNldmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj1GTEFUKQotICAgICAgICBzZWxmLmNhc2VzZW5zZS5wYWNrKHNpZGU9TEVGVCkKLSAgICAgICAgc2VsZi5zZWFyY2ggPSBFbnRyeShzZWxmLmxlZnRzdWJmcmFtZSwgbmFtZT0nc2VhcmNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxpZWY9U1VOS0VOLCBib3JkZXJ3aWR0aD0yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPTIwKQotICAgICAgICBzZWxmLnNlYXJjaC5wYWNrKGV4cGFuZD0wLCBmaWxsPVgpCi0gICAgICAgIHNlbGYudGl0bGUgPSBMYWJlbChzZWxmLmxlZnRzdWJmcmFtZSwgbmFtZT0ndGl0bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nKG5vbmUpJykKLSAgICAgICAgc2VsZi50aXRsZS5wYWNrKHNpZGU9Qk9UVE9NKQotICAgICAgICBzZWxmLnRleHQgPSBNYW5QYWdlKHNlbGYuZnJhbWUsIG5hbWU9J3RleHQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj1TVU5LRU4sIGJvcmRlcndpZHRoPTIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD1OT05FLCB3aWR0aD03MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RiYWNrZ3JvdW5kPSdwaW5rJykKLSAgICAgICAgc2VsZi50ZXh0LnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmVudHJ5LmJpbmQoJzxSZXR1cm4+Jywgc2VsZi5lbnRyeV9jYikKLSAgICAgICAgc2VsZi5zZWFyY2guYmluZCgnPFJldHVybj4nLCBzZWxmLnNlYXJjaF9jYikKLSAgICAgICAgc2VsZi5saXN0Ym94LmJpbmQoJzxEb3VibGUtMT4nLCBzZWxmLmxpc3Rib3hfY2IpCi0KLSAgICAgICAgc2VsZi5lbnRyeS5iaW5kKCc8VGFiPicsIHNlbGYuZW50cnlfdGFiKQotICAgICAgICBzZWxmLnNlYXJjaC5iaW5kKCc8VGFiPicsIHNlbGYuc2VhcmNoX3RhYikKLSAgICAgICAgc2VsZi50ZXh0LmJpbmQoJzxUYWI+Jywgc2VsZi50ZXh0X3RhYikKLQotICAgICAgICBzZWxmLmVudHJ5LmZvY3VzX3NldCgpCi0KLSAgICAgICAgc2VsZi5jaGFwdGVydmFyLnNldChNQU5ORElSKQotICAgICAgICBzZWxmLm5ld2NoYXB0ZXIoKQotCi0gICAgZGVmIG5ld2NoYXB0ZXIoc2VsZik6Ci0gICAgICAgIG1hbmRpciA9IHNlbGYuY2hhcHRlcnZhci5nZXQoKQotICAgICAgICBzZWxmLmNob2ljZXMgPSBbXQotICAgICAgICBzZWxmLmFkZGxpc3QobGlzdG1hbnBhZ2VzKG1hbmRpcikpCi0KLSAgICBkZWYgYWRkY2hvaWNlKHNlbGYsIGNob2ljZSk6Ci0gICAgICAgIGlmIGNob2ljZSBub3QgaW4gc2VsZi5jaG9pY2VzOgotICAgICAgICAgICAgc2VsZi5jaG9pY2VzLmFwcGVuZChjaG9pY2UpCi0gICAgICAgICAgICBzZWxmLmNob2ljZXMuc29ydCgpCi0gICAgICAgIHNlbGYudXBkYXRlKCkKLQotICAgIGRlZiBhZGRsaXN0KHNlbGYsIGxpc3QpOgotICAgICAgICBzZWxmLmNob2ljZXNbbGVuKHNlbGYuY2hvaWNlcyk6XSA9IGxpc3QKLSAgICAgICAgc2VsZi5jaG9pY2VzLnNvcnQoKQotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0KLSAgICBkZWYgZW50cnlfY2Ioc2VsZiwgKmUpOgotICAgICAgICBzZWxmLnVwZGF0ZSgpCi0KLSAgICBkZWYgbGlzdGJveF9jYihzZWxmLCBlKToKLSAgICAgICAgc2VsZWN0aW9uID0gc2VsZi5saXN0Ym94LmN1cnNlbGVjdGlvbigpCi0gICAgICAgIGlmIHNlbGVjdGlvbiBhbmQgbGVuKHNlbGVjdGlvbikgPT0gMToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLmxpc3Rib3guZ2V0KHNlbGVjdGlvblswXSkKLSAgICAgICAgICAgIHNlbGYuc2hvd19wYWdlKG5hbWUpCi0KLSAgICBkZWYgc2VhcmNoX2NiKHNlbGYsICplKToKLSAgICAgICAgc2VsZi5zZWFyY2hfc3RyaW5nKHNlbGYuc2VhcmNoLmdldCgpKQotCi0gICAgZGVmIGVudHJ5X3RhYihzZWxmLCBlKToKLSAgICAgICAgc2VsZi5zZWFyY2guZm9jdXNfc2V0KCkKLQotICAgIGRlZiBzZWFyY2hfdGFiKHNlbGYsIGUpOgotICAgICAgICBzZWxmLmVudHJ5LmZvY3VzX3NldCgpCi0KLSAgICBkZWYgdGV4dF90YWIoc2VsZiwgZSk6Ci0gICAgICAgIHNlbGYuZW50cnkuZm9jdXNfc2V0KCkKLQotICAgIGRlZiB1cGRhdGVsaXN0KHNlbGYpOgotICAgICAgICBrZXkgPSBzZWxmLmVudHJ5LmdldCgpCi0gICAgICAgIG9rID0gbGlzdChmaWx0ZXIobGFtYmRhIG5hbWUsIGtleT1rZXksIG49bGVuKGtleSk6IG5hbWVbOm5dPT1rZXksCi0gICAgICAgICAgICAgICAgIHNlbGYuY2hvaWNlcykpCi0gICAgICAgIGlmIG5vdCBvazoKLSAgICAgICAgICAgIHNlbGYuZnJhbWUuYmVsbCgpCi0gICAgICAgIHNlbGYubGlzdGJveC5kZWxldGUoMCwgQXRFbmQoKSkKLSAgICAgICAgZXhhY3RtYXRjaCA9IDAKLSAgICAgICAgZm9yIGl0ZW0gaW4gb2s6Ci0gICAgICAgICAgICBpZiBpdGVtID09IGtleTogZXhhY3RtYXRjaCA9IDEKLSAgICAgICAgICAgIHNlbGYubGlzdGJveC5pbnNlcnQoQXRFbmQoKSwgaXRlbSkKLSAgICAgICAgaWYgZXhhY3RtYXRjaDoKLSAgICAgICAgICAgIHJldHVybiBrZXkKLSAgICAgICAgbiA9IHNlbGYubGlzdGJveC5zaXplKCkKLSAgICAgICAgaWYgbiA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubGlzdGJveC5nZXQoMCkKLSAgICAgICAgIyBFbHNlIHJldHVybiBOb25lLCBtZWFuaW5nIG5vdCBhIHVuaXF1ZSBzZWxlY3Rpb24KLQotICAgIGRlZiB1cGRhdGUoc2VsZik6Ci0gICAgICAgIG5hbWUgPSBzZWxmLnVwZGF0ZWxpc3QoKQotICAgICAgICBpZiBuYW1lOgotICAgICAgICAgICAgc2VsZi5zaG93X3BhZ2UobmFtZSkKLSAgICAgICAgICAgIHNlbGYuZW50cnkuZGVsZXRlKDAsIEF0RW5kKCkpCi0gICAgICAgICAgICBzZWxmLnVwZGF0ZWxpc3QoKQotCi0gICAgZGVmIHNob3dfcGFnZShzZWxmLCBuYW1lKToKLSAgICAgICAgZmlsZSA9ICclcy8lcy4/JyAlIChzZWxmLmNoYXB0ZXJ2YXIuZ2V0KCksIG5hbWUpCi0gICAgICAgIGZwID0gb3MucG9wZW4oJ25yb2ZmIC1tYW4gLWMgJXMgfCB1bCAtaScgJSBmaWxlLCAncicpCi0gICAgICAgIHNlbGYudGV4dC5raWxsKCkKLSAgICAgICAgc2VsZi50aXRsZVsndGV4dCddID0gbmFtZQotICAgICAgICBzZWxmLnRleHQucGFyc2VmaWxlKGZwKQotCi0gICAgZGVmIHNlYXJjaF9zdHJpbmcoc2VsZiwgc2VhcmNoKToKLSAgICAgICAgaWYgbm90IHNlYXJjaDoKLSAgICAgICAgICAgIHNlbGYuZnJhbWUuYmVsbCgpCi0gICAgICAgICAgICBwcmludCgnRW1wdHkgc2VhcmNoIHN0cmluZycpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IHNlbGYuY2FzZXZhci5nZXQoKToKLSAgICAgICAgICAgIG1hcCA9IHJlLklHTk9SRUNBU0UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1hcCA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbWFwOgotICAgICAgICAgICAgICAgIHByb2cgPSByZS5jb21waWxlKHNlYXJjaCwgbWFwKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcm9nID0gcmUuY29tcGlsZShzZWFyY2gpCi0gICAgICAgIGV4Y2VwdCByZS5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBzZWxmLmZyYW1lLmJlbGwoKQotICAgICAgICAgICAgcHJpbnQoJ1JlZ2V4IGVycm9yOicsIG1zZykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBoZXJlID0gc2VsZi50ZXh0LmluZGV4KEF0SW5zZXJ0KCkpCi0gICAgICAgIGxpbmVubyA9IGludChoZXJlWzpoZXJlLmZpbmQoJy4nKV0pCi0gICAgICAgIGVuZCA9IHNlbGYudGV4dC5pbmRleChBdEVuZCgpKQotICAgICAgICBlbmRsaW5lbm8gPSBpbnQoZW5kWzplbmQuZmluZCgnLicpXSkKLSAgICAgICAgd3JhcGxpbmVubyA9IGxpbmVubwotICAgICAgICBmb3VuZCA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKLSAgICAgICAgICAgIGlmIGxpbmVubyA+IGVuZGxpbmVubzoKLSAgICAgICAgICAgICAgICBpZiB3cmFwbGluZW5vIDw9IDA6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgZW5kbGluZW5vID0gd3JhcGxpbmVubwotICAgICAgICAgICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgICAgICAgICB3cmFwbGluZW5vID0gMAotICAgICAgICAgICAgbGluZSA9IHNlbGYudGV4dC5nZXQoJyVkLjAgbGluZXN0YXJ0JyAlIGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclZC4wIGxpbmVlbmQnICUgbGluZW5vKQotICAgICAgICAgICAgaSA9IHByb2cuc2VhcmNoKGxpbmUpCi0gICAgICAgICAgICBpZiBpOgotICAgICAgICAgICAgICAgIGZvdW5kID0gMQotICAgICAgICAgICAgICAgIG4gPSBtYXgoMSwgbGVuKGkuZ3JvdXAoMCkpKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXh0LnRhZ19yZW1vdmUoJ3NlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0U2VsRmlyc3QoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRTZWxMYXN0KCkpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFRjbEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgc2VsZi50ZXh0LnRhZ19hZGQoJ3NlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVkLiVkJyAlIChsaW5lbm8sIGkuc3RhcnQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVkLiVkJyAlIChsaW5lbm8sIGkuc3RhcnQoKStuKSkKLSAgICAgICAgICAgICAgICBzZWxmLnRleHQubWFya19zZXQoQXRJbnNlcnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVkLiVkJyAlIChsaW5lbm8sIGkuc3RhcnQoKSkpCi0gICAgICAgICAgICAgICAgc2VsZi50ZXh0Lnl2aWV3X3BpY2twbGFjZShBdEluc2VydCgpKQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIG5vdCBmb3VuZDoKLSAgICAgICAgICAgIHNlbGYuZnJhbWUuYmVsbCgpCi0KLWRlZiBtYWluKCk6Ci0gICAgcm9vdCA9IFRrKCkKLSAgICBzYiA9IFNlbGVjdGlvbkJveChyb290KQotICAgIGlmIHN5cy5hcmd2WzE6XToKLSAgICAgICAgc2Iuc2hvd19wYWdlKHN5cy5hcmd2WzFdKQotICAgIHJvb3QubWluc2l6ZSgxLCAxKQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1tYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9ndWlkby93aXNoLnB5IGIvRGVtby90a2ludGVyL2d1aWRvL3dpc2gucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDMzMjUwMWQuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3dpc2gucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIFRoaXMgaXMgYWJvdXQgYWxsIGl0IHJlcXVpcmVzIHRvIHdyaXRlIGEgd2lzaCBzaGVsbCBpbiBQeXRob24hCi0KLWltcG9ydCBfdGtpbnRlcgotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi0KLXRrID0gX3RraW50ZXIuY3JlYXRlKG9zLmVudmlyb25bJ0RJU1BMQVknXSwgJ3dpc2gnLCAnVGsnLCAxLCAxKQotdGsuY2FsbCgndXBkYXRlJykKLQotY21kID0gJycKLQotd2hpbGUgVHJ1ZToKLSAgICBpZiBjbWQ6Ci0gICAgICAgIHByb21wdCA9ICcnCi0gICAgZWxzZToKLSAgICAgICAgcHJvbXB0ID0gJyUgJwotICAgIHRyeToKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICBicmVhawotICAgIGV4Y2VwdCBFT0ZFcnJvcjoKLSAgICAgICAgYnJlYWsKLSAgICBjbWQgKz0gbGluZQotICAgIGlmIHRrLmdldGJvb2xlYW4odGsuY2FsbCgnaW5mbycsICdjb21wbGV0ZScsIGNtZCkpOgotICAgICAgICB0ay5yZWNvcmQobGluZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzdWx0ID0gdGsuY2FsbCgnZXZhbCcsIGNtZCkKLSAgICAgICAgZXhjZXB0IF90a2ludGVyLlRjbEVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHByaW50KCdUY2xFcnJvcjonLCBtc2cpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiByZXN1bHQ6IHByaW50KHJlc3VsdCkKLSAgICAgICAgY21kID0gJycKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0LzAwLUhFTExPLVdPUkxELnB5IGIvRGVtby90a2ludGVyL21hdHQvMDAtSEVMTE8tV09STEQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNDA5MmEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvMDAtSEVMTE8tV09STEQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBub3RlIHRoYXQgdGhlcmUgaXMgbm8gZXhwbGljaXQgY2FsbCB0byBzdGFydCBUay4KLSMgVGtpbnRlciBpcyBzbWFydCBlbm91Z2ggdG8gc3RhcnQgdGhlIHN5c3RlbSBpZiBpdCdzIG5vdCBhbHJlYWR5IGdvaW5nLgotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuaGlfdGhlcmUgPSBCdXR0b24oc2VsZiwgdGV4dD0nSGVsbG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5wcmludGl0KQotICAgICAgICBzZWxmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L1JFQURNRSBiL0RlbW8vdGtpbnRlci9tYXR0L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZDMwMi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBzb21lIGFkLWhvYyBleGFtcGxlcyBvZiBUa2ludGVyIHdpZGdldAotY3JlYXRpb24uIFRoZSBmaWxlcyBuYW1lZCAKLQotCQkqLXNpbXBsZS5weQotCi1hcmUgdGhlIG9uZXMgdG8gc3RhcnQgd2l0aCBpZiB5b3UncmUgbG9va2luZyBmb3IgYSBiYXJlLWJvbmVzIHVzYWdlIG9mCi1hIHdpZGdldC4gVGhlIG90aGVyIGZpbGVzIGFyZSBtZWFudCB0byBzaG93IGNvbW1vbiB1c2FnZSBwYXR0ZXJzIHRoYXQKLWFyZSBhIHRhZCBtb3JlIGludm9sdmVkLiAKLQotSWYgeW91IGhhdmUgYSBzdWdnZXN0aW9uIGZvciBhbiBleGFtcGxlIHByb2dyYW0sIHBsZWFzZSBzZW5kIG1haWwgdG8gCi0JCi0JY29ud2F5QHZpcmdpbmlhLmVkdQotCi1hbmQgSSdsbCBpbmNsdWRlIGl0LgotCi0KLW1hdHQKLQotVE9ETwotLS0tLS0tLQotVGhlIFggc2VsZWN0aW9uCi1EaWFsb2cgQm94ZXMKLU1vcmUgY2FudmFzIGV4YW1wbGVzCi1NZXNzYWdlIHdpZGdldHMKLVRleHQgRWRpdG9ycwotU2Nyb2xsYmFycwotTGlzdGJveGVzCi0KLQotCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC9hbmltYXRpb24tc2ltcGxlLnB5IGIvRGVtby90a2ludGVyL21hdHQvYW5pbWF0aW9uLXNpbXBsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDEyMGQ2Ni4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9hbmltYXRpb24tc2ltcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLSMgVGhpcyBwcm9ncmFtIHNob3dzIGhvdyB0byB1c2UgdGhlICJhZnRlciIgZnVuY3Rpb24gdG8gbWFrZSBhbmltYXRpb24uCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBwcmludGl0KHNlbGYpOgotICAgICAgICBwcmludCgiaGkiKQotCi0gICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6Ci0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmRyYXcgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0KLSAgICAgICAgIyBhbGwgb2YgdGhlc2Ugd29yay4uCi0gICAgICAgIHNlbGYuZHJhdy5jcmVhdGVfcmVjdGFuZ2xlKDAsIDAsIDEwLCAxMCwgdGFncz0idGhpbmciLCBmaWxsPSJibHVlIikKLSAgICAgICAgc2VsZi5kcmF3LnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIG1vdmVUaGluZyhzZWxmLCAqYXJncyk6Ci0gICAgICAgICMgbW92ZSAxLzEwIG9mIGFuIGluY2ggZXZlcnkgMS8xMCBzZWMgKDEiIHBlciBzZWNvbmQsIHNtb290aGx5KQotICAgICAgICBzZWxmLmRyYXcubW92ZSgidGhpbmciLCAiMC4wMWkiLCAiMC4wMWkiKQotICAgICAgICBzZWxmLmFmdGVyKDEwLCBzZWxmLm1vdmVUaGluZykKLQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotICAgICAgICBzZWxmLmFmdGVyKDEwLCBzZWxmLm1vdmVUaGluZykKLQotCi10ZXN0ID0gVGVzdCgpCi0KLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvYW5pbWF0aW9uLXctdmVsb2NpdHktY3RybC5weSBiL0RlbW8vdGtpbnRlci9tYXR0L2FuaW1hdGlvbi13LXZlbG9jaXR5LWN0cmwucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4MzA5Y2EuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvYW5pbWF0aW9uLXctdmVsb2NpdHktY3RybC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIHRoaXMgaXMgdGhlIHNhbWUgYXMgc2ltcGxlLWRlbW8tMS5weSwgYnV0IHVzZXMKLSMgc3ViY2xhc3NpbmcuCi0jIG5vdGUgdGhhdCB0aGVyZSBpcyBubyBleHBsaWNpdCBjYWxsIHRvIHN0YXJ0IFRrLgotIyBUa2ludGVyIGlzIHNtYXJ0IGVub3VnaCB0byBzdGFydCB0aGUgc3lzdGVtIGlmIGl0J3Mgbm90IGFscmVhZHkgZ29pbmcuCi0KLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIHByaW50aXQoc2VsZik6Ci0gICAgICAgIHByaW50KCJoaSIpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5RVUlUID0gQnV0dG9uKHNlbGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPUJPVEgpCi0KLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiKQotCi0gICAgICAgIHNlbGYuc3BlZWQgPSBTY2FsZShzZWxmLCBvcmllbnQ9SE9SSVpPTlRBTCwgZnJvbV89LTEwMCwgdG89MTAwKQotCi0gICAgICAgIHNlbGYuc3BlZWQucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQotCi0gICAgICAgICMgYWxsIG9mIHRoZXNlIHdvcmsuLgotICAgICAgICBzZWxmLmRyYXcuY3JlYXRlX3JlY3RhbmdsZSgwLCAwLCAxMCwgMTAsIHRhZ3M9InRoaW5nIiwgZmlsbD0iYmx1ZSIpCi0gICAgICAgIHNlbGYuZHJhdy5wYWNrKHNpZGU9TEVGVCkKLQotICAgIGRlZiBtb3ZlVGhpbmcoc2VsZiwgKmFyZ3MpOgotICAgICAgICB2ZWxvY2l0eSA9IHNlbGYuc3BlZWQuZ2V0KCkKLSAgICAgICAgc3RyID0gZmxvYXQodmVsb2NpdHkpIC8gMTAwMC4wCi0gICAgICAgIHN0ciA9ICIlcmkiICUgKHN0ciwpCi0gICAgICAgIHNlbGYuZHJhdy5tb3ZlKCJ0aGluZyIsICBzdHIsIHN0cikKLSAgICAgICAgc2VsZi5hZnRlcigxMCwgc2VsZi5tb3ZlVGhpbmcpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0gICAgICAgIHNlbGYuYWZ0ZXIoMTAsIHNlbGYubW92ZVRoaW5nKQotCi0KLXRlc3QgPSBUZXN0KCkKLQotdGVzdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC9iaW5kLXctbXVsdC1jYWxscy1wLXR5cGUucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9iaW5kLXctbXVsdC1jYWxscy1wLXR5cGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYTdjMzcuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvYmluZC13LW11bHQtY2FsbHMtcC10eXBlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLSMgVGhpcyBwcm9ncmFtICBzaG93cyBob3cgdG8gdXNlIGEgc2ltcGxlIHR5cGUtaW4gYm94Ci0KLWNsYXNzIEFwcChGcmFtZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBzZWxmLnBhY2soKQotCi0gICAgICAgIHNlbGYuZW50cnl0aGluZ3kgPSBFbnRyeSgpCi0gICAgICAgIHNlbGYuZW50cnl0aGluZ3kucGFjaygpCi0KLSAgICAgICAgIyBhbmQgaGVyZSB3ZSBnZXQgYSBjYWxsYmFjayB3aGVuIHRoZSB1c2VyIGhpdHMgcmV0dXJuLiB3ZSBjb3VsZAotICAgICAgICAjIG1ha2UgdGhlIGtleSB0aGF0IHRyaWdnZXJzIHRoZSBjYWxsYmFjayBhbnl0aGluZyB3ZSB3YW50ZWQgdG8uCi0gICAgICAgICMgb3RoZXIgdHlwaWNhbCBvcHRpb25zIG1pZ2h0IGJlIDxLZXktVGFiPiBvciA8S2V5PiAoZm9yIGFueXRoaW5nKQotICAgICAgICBzZWxmLmVudHJ5dGhpbmd5LmJpbmQoJzxLZXktUmV0dXJuPicsIHNlbGYucHJpbnRfY29udGVudHMpCi0KLSAgICAgICAgIyBOb3RlIHRoYXQgaGVyZSBpcyB3aGVyZSB3ZSBiaW5kIGEgY29tcGxldGVseSBkaWZmZXJlbnQgY2FsbGJhY2sgdG8KLSAgICAgICAgIyB0aGUgc2FtZSBldmVudC4gV2UgcGFzcyAiKyIgaGVyZSB0byBpbmRpY2F0ZSB0aGF0IHdlIHdpc2ggdG8gQURECi0gICAgICAgICMgdGhpcyBjYWxsYmFjayB0byB0aGUgbGlzdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudCB0eXBlLgotICAgICAgICAjIE5vdCBzcGVjaWZ5aW5nICIrIiB3b3VsZCBzaW1wbHkgb3ZlcnJpZGUgd2hhdGV2ZXIgY2FsbGJhY2sgd2FzCi0gICAgICAgICMgZGVmaW5lZCBvbiB0aGlzIGV2ZW50LgotICAgICAgICBzZWxmLmVudHJ5dGhpbmd5LmJpbmQoJzxLZXktUmV0dXJuPicsIHNlbGYucHJpbnRfc29tZXRoaW5nX2Vsc2UsICIrIikKLQotICAgIGRlZiBwcmludF9jb250ZW50cyhzZWxmLCBldmVudCk6Ci0gICAgICAgIHByaW50KCJoaS4gY29udGVudHMgb2YgZW50cnkgaXMgbm93IC0tLS0+Iiwgc2VsZi5lbnRyeXRoaW5neS5nZXQoKSkKLQotCi0gICAgZGVmIHByaW50X3NvbWV0aGluZ19lbHNlKHNlbGYsIGV2ZW50KToKLSAgICAgICAgcHJpbnQoImhpLiBOb3cgZG9pbmcgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IikKLQotCi1yb290ID0gQXBwKCkKLXJvb3QubWFzdGVyLnRpdGxlKCJGb28iKQotcm9vdC5tYWlubG9vcCgpCi0KLQotCi0jIHNlY3JldCB0aXAgZm9yIGV4cGVydHM6IGlmIHlvdSBwYXNzICphbnkqIG5vbi1mYWxzZSB2YWx1ZSBhcwotIyB0aGUgdGhpcmQgcGFyYW1ldGVyIHRvIGJpbmQoKSwgVGtpbnRlci5weSB3aWxsIGFjY3VtdWxhdGUKLSMgY2FsbGJhY2tzIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmcuIEkgdXNlICIrIiBoZXJlIGJlY2F1c2UgdGhhdCdzCi0jIHRoZSBUayBub3RhdGlvbiBmb3IgZ2V0dGluZyB0aGlzIHNvcnQgb2YgYmVoYXZpb3IuIFRoZSBwZXJmZWN0IEdVSQotIyBpbnRlcmZhY2Ugd291bGQgdXNlIGEgbGVzcyBvYnNjdXJlIG5vdGF0aW9uLgpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvY2FudmFzLWRlbW8tc2ltcGxlLnB5IGIvRGVtby90a2ludGVyL21hdHQvY2FudmFzLWRlbW8tc2ltcGxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjJjMTdiLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1kZW1vLXNpbXBsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIHRoaXMgcHJvZ3JhbSBjcmVhdGVzIGEgY2FudmFzIGFuZCBwdXRzIGEgc2luZ2xlIHBvbHlnb24gb24gdGhlIGNhbnZhcwotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5RVUlULnBhY2soc2lkZT1CT1RUT00sIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmRyYXcgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0KLSAgICAgICAgIyBzZWUgdGhlIG90aGVyIGRlbW9zIGZvciBvdGhlciB3YXlzIG9mIHNwZWNpZnlpbmcgY29vcmRzIGZvciBhIHBvbHlnb24KLSAgICAgICAgc2VsZi5kcmF3LmNyZWF0ZV9yZWN0YW5nbGUoMCwgMCwgIjNpIiwgIjNpIiwgZmlsbD0iYmxhY2siKQotCi0gICAgICAgIHNlbGYuZHJhdy5wYWNrKHNpZGU9TEVGVCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1ncmlkZGluZy5weSBiL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1ncmlkZGluZy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmY5ZDIzYS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtZ3JpZGRpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyB0aGlzIGlzIHRoZSBzYW1lIGFzIHNpbXBsZS1kZW1vLTEucHksIGJ1dCB1c2VzCi0jIHN1YmNsYXNzaW5nLgotIyBub3RlIHRoYXQgdGhlcmUgaXMgbm8gZXhwbGljaXQgY2FsbCB0byBzdGFydCBUay4KLSMgVGtpbnRlciBpcyBzbWFydCBlbm91Z2ggdG8gc3RhcnQgdGhlIHN5c3RlbSBpZiBpdCdzIG5vdCBhbHJlYWR5IGdvaW5nLgotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kPSd3aGl0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPUJPVEgpCi0KLSAgICAgICAgc2VsZi5jYW52YXNPYmplY3QgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0gICAgICAgIHNlbGYuY2FudmFzT2JqZWN0LnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIG1vdXNlRG93bihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgY2FudmFzIHggYW5kIHkgdGFrZSB0aGUgc2NyZWVuIGNvb3JkcyBmcm9tIHRoZSBldmVudCBhbmQgdHJhbnNsYXRlCi0gICAgICAgICMgdGhlbSBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgY2FudmFzIG9iamVjdAotICAgICAgICBzZWxmLnN0YXJ0eCA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3goZXZlbnQueCwgc2VsZi5ncmlkZGluZ1NpemUpCi0gICAgICAgIHNlbGYuc3RhcnR5ID0gc2VsZi5jYW52YXNPYmplY3QuY2FudmFzeShldmVudC55LCBzZWxmLmdyaWRkaW5nU2l6ZSkKLQotICAgIGRlZiBtb3VzZU1vdGlvbihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgY2FudmFzIHggYW5kIHkgdGFrZSB0aGUgc2NyZWVuIGNvb3JkcyBmcm9tIHRoZSBldmVudCBhbmQgdHJhbnNsYXRlCi0gICAgICAgICMgdGhlbSBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgY2FudmFzIG9iamVjdAotICAgICAgICB4ID0gc2VsZi5jYW52YXNPYmplY3QuY2FudmFzeChldmVudC54LCBzZWxmLmdyaWRkaW5nU2l6ZSkKLSAgICAgICAgeSA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3koZXZlbnQueSwgc2VsZi5ncmlkZGluZ1NpemUpCi0KLSAgICAgICAgaWYgKHNlbGYuc3RhcnR4ICE9IGV2ZW50LngpICBhbmQgKHNlbGYuc3RhcnR5ICE9IGV2ZW50LnkpIDoKLSAgICAgICAgICAgIHNlbGYuY2FudmFzT2JqZWN0LmRlbGV0ZShzZWxmLnJ1YmJlcmJhbmRCb3gpCi0gICAgICAgICAgICBzZWxmLnJ1YmJlcmJhbmRCb3ggPSBzZWxmLmNhbnZhc09iamVjdC5jcmVhdGVfcmVjdGFuZ2xlKAotICAgICAgICAgICAgICAgIHNlbGYuc3RhcnR4LCBzZWxmLnN0YXJ0eSwgeCwgeSkKLSAgICAgICAgICAgICMgdGhpcyBmbHVzaGVzIHRoZSBvdXRwdXQsIG1ha2luZyBzdXJlIHRoYXQKLSAgICAgICAgICAgICMgdGhlIHJlY3RhbmdsZSBtYWtlcyBpdCB0byB0aGUgc2NyZWVuCi0gICAgICAgICAgICAjIGJlZm9yZSB0aGUgbmV4dCBldmVudCBpcyBoYW5kbGVkCi0gICAgICAgICAgICBzZWxmLnVwZGF0ZV9pZGxldGFza3MoKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi0gICAgICAgICMgdGhpcyBpcyBhICJ0YWdPcklkIiBmb3IgdGhlIHJlY3RhbmdsZSB3ZSBkcmF3IG9uIHRoZSBjYW52YXMKLSAgICAgICAgc2VsZi5ydWJiZXJiYW5kQm94ID0gTm9uZQotCi0gICAgICAgICMgdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgZ3JpZGRpbmcgc3F1YXJlcwotICAgICAgICBzZWxmLmdyaWRkaW5nU2l6ZSA9IDUwCi0KLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5jYW52YXNPYmplY3QsICI8QnV0dG9uLTE+Iiwgc2VsZi5tb3VzZURvd24pCi0gICAgICAgIFdpZGdldC5iaW5kKHNlbGYuY2FudmFzT2JqZWN0LCAiPEJ1dHRvbjEtTW90aW9uPiIsIHNlbGYubW91c2VNb3Rpb24pCi0KLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1tb3Zpbmctb3ItY3JlYXRpbmcucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtbW92aW5nLW9yLWNyZWF0aW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGQ2NGY3Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1tb3Zpbmctb3ItY3JlYXRpbmcucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyB0aGlzIGZpbGUgZGVtb25zdHJhdGVzIGEgbW9yZSBzb3BoaXN0aWNhdGVkIG1vdmVtZW50IC0tCi0jIG1vdmUgZG90cyBvciBjcmVhdGUgbmV3IG9uZXMgaWYgeW91IGNsaWNrIG91dHNpZGUgdGhlIGRvdHMKLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyMjIyBFdmVudCBjYWxsYmFja3MgZm9yIFRIRSBDQU5WQVMgKG5vdCB0aGUgc3R1ZmYgZHJhd24gb24gaXQpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgIGRlZiBtb3VzZURvd24oc2VsZiwgZXZlbnQpOgotICAgICAgICAjIHNlZSBpZiB3ZSdyZSBpbnNpZGUgYSBkb3QuIElmIHdlIGFyZSwgaXQKLSAgICAgICAgIyBnZXRzIHRhZ2dlZCBhcyBDVVJSRU5UIGZvciBmcmVlIGJ5IHRrLgotICAgICAgICBpZiBub3QgZXZlbnQud2lkZ2V0LmZpbmRfd2l0aHRhZyhDVVJSRU5UKToKLSAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gZG90IGhlcmUsIHNvIHdlIGNhbiBtYWtlIG9uZSwKLSAgICAgICAgICAgICMgYW5kIGJpbmQgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciB0byBpdC4KLSAgICAgICAgICAgICMgLS0tLS0tCi0gICAgICAgICAgICAjIGNyZWF0ZSBhIGRvdCwgYW5kIG1hcmsgaXQgYXMgQ1VSUkVOVAotICAgICAgICAgICAgZnJlZCA9IHNlbGYuZHJhdy5jcmVhdGVfb3ZhbCgKLSAgICAgICAgICAgICAgICBldmVudC54IC0gMTAsIGV2ZW50LnkgLTEwLCBldmVudC54ICsxMCwgZXZlbnQueSArIDEwLAotICAgICAgICAgICAgICAgIGZpbGw9ImdyZWVuIiwgdGFncz1DVVJSRU5UKQotCi0gICAgICAgICAgICBzZWxmLmRyYXcudGFnX2JpbmQoZnJlZCwgIjxBbnktRW50ZXI+Iiwgc2VsZi5tb3VzZUVudGVyKQotICAgICAgICAgICAgc2VsZi5kcmF3LnRhZ19iaW5kKGZyZWQsICI8QW55LUxlYXZlPiIsIHNlbGYubW91c2VMZWF2ZSkKLQotICAgICAgICBzZWxmLmxhc3R4ID0gZXZlbnQueAotICAgICAgICBzZWxmLmxhc3R5ID0gZXZlbnQueQotCi0gICAgZGVmIG1vdXNlTW92ZShzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuZHJhdy5tb3ZlKENVUlJFTlQsIGV2ZW50LnggLSBzZWxmLmxhc3R4LCBldmVudC55IC0gc2VsZi5sYXN0eSkKLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMjIyMgRXZlbnQgY2FsbGJhY2tzIGZvciBjYW52YXMgSVRFTVMgKHN0dWZmIGRyYXduIG9uIHRoZSBjYW52YXMpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgIGRlZiBtb3VzZUVudGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgIyB0aGUgQ1VSUkVOVCB0YWcgaXMgYXBwbGllZCB0byB0aGUgb2JqZWN0IHRoZSBjdXJzb3IgaXMgb3Zlci4KLSAgICAgICAgIyB0aGlzIGhhcHBlbnMgYXV0b21hdGljYWxseS4KLSAgICAgICAgc2VsZi5kcmF3Lml0ZW1jb25maWcoQ1VSUkVOVCwgZmlsbD0icmVkIikKLQotICAgIGRlZiBtb3VzZUxlYXZlKHNlbGYsIGV2ZW50KToKLSAgICAgICAgIyB0aGUgQ1VSUkVOVCB0YWcgaXMgYXBwbGllZCB0byB0aGUgb2JqZWN0IHRoZSBjdXJzb3IgaXMgb3Zlci4KLSAgICAgICAgIyB0aGlzIGhhcHBlbnMgYXV0b21hdGljYWxseS4KLSAgICAgICAgc2VsZi5kcmF3Lml0ZW1jb25maWcoQ1VSUkVOVCwgZmlsbD0iYmx1ZSIpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5RVUlUID0gQnV0dG9uKHNlbGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmRyYXcgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0gICAgICAgIHNlbGYuZHJhdy5wYWNrKHNpZGU9TEVGVCkKLQotICAgICAgICBXaWRnZXQuYmluZChzZWxmLmRyYXcsICI8MT4iLCBzZWxmLm1vdXNlRG93bikKLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5kcmF3LCAiPEIxLU1vdGlvbj4iLCBzZWxmLm1vdXNlTW92ZSkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotdGVzdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtbW92aW5nLXctbW91c2UucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtbW92aW5nLXctbW91c2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDcyNGYuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvY2FudmFzLW1vdmluZy13LW1vdXNlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLSMgdGhpcyBmaWxlIGRlbW9uc3RyYXRlcyB0aGUgbW92ZW1lbnQgb2YgYSBzaW5nbGUgY2FudmFzIGl0ZW0gdW5kZXIgbW91c2UgY29udHJvbAotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIyMjIEV2ZW50IGNhbGxiYWNrcyBmb3IgVEhFIENBTlZBUyAobm90IHRoZSBzdHVmZiBkcmF3biBvbiBpdCkKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgZGVmIG1vdXNlRG93bihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgcmVtZW1iZXIgd2hlcmUgdGhlIG1vdXNlIHdlbnQgZG93bgotICAgICAgICBzZWxmLmxhc3R4ID0gZXZlbnQueAotICAgICAgICBzZWxmLmxhc3R5ID0gZXZlbnQueQotCi0gICAgZGVmIG1vdXNlTW92ZShzZWxmLCBldmVudCk6Ci0gICAgICAgICMgd2hhdGV2ZXIgdGhlIG1vdXNlIGlzIG92ZXIgZ2V0cyB0YWdnZWQgYXMgQ1VSUkVOVCBmb3IgZnJlZSBieSB0ay4KLSAgICAgICAgc2VsZi5kcmF3Lm1vdmUoQ1VSUkVOVCwgZXZlbnQueCAtIHNlbGYubGFzdHgsIGV2ZW50LnkgLSBzZWxmLmxhc3R5KQotICAgICAgICBzZWxmLmxhc3R4ID0gZXZlbnQueAotICAgICAgICBzZWxmLmxhc3R5ID0gZXZlbnQueQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyMjIyBFdmVudCBjYWxsYmFja3MgZm9yIGNhbnZhcyBJVEVNUyAoc3R1ZmYgZHJhd24gb24gdGhlIGNhbnZhcykKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgZGVmIG1vdXNlRW50ZXIoc2VsZiwgZXZlbnQpOgotICAgICAgICAjIHRoZSBDVVJSRU5UIHRhZyBpcyBhcHBsaWVkIHRvIHRoZSBvYmplY3QgdGhlIGN1cnNvciBpcyBvdmVyLgotICAgICAgICAjIHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5LgotICAgICAgICBzZWxmLmRyYXcuaXRlbWNvbmZpZyhDVVJSRU5ULCBmaWxsPSJyZWQiKQotCi0gICAgZGVmIG1vdXNlTGVhdmUoc2VsZiwgZXZlbnQpOgotICAgICAgICAjIHRoZSBDVVJSRU5UIHRhZyBpcyBhcHBsaWVkIHRvIHRoZSBvYmplY3QgdGhlIGN1cnNvciBpcyBvdmVyLgotICAgICAgICAjIHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5LgotICAgICAgICBzZWxmLmRyYXcuaXRlbWNvbmZpZyhDVVJSRU5ULCBmaWxsPSJibHVlIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5RVUlULnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYuZHJhdyA9IENhbnZhcyhzZWxmLCB3aWR0aD0iNWkiLCBoZWlnaHQ9IjVpIikKLSAgICAgICAgc2VsZi5kcmF3LnBhY2soc2lkZT1MRUZUKQotCi0gICAgICAgIGZyZWQgPSBzZWxmLmRyYXcuY3JlYXRlX292YWwoMCwgMCwgMjAsIDIwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9ImdyZWVuIiwgdGFncz0ic2VsZWN0ZWQiKQotCi0gICAgICAgIHNlbGYuZHJhdy50YWdfYmluZChmcmVkLCAiPEFueS1FbnRlcj4iLCBzZWxmLm1vdXNlRW50ZXIpCi0gICAgICAgIHNlbGYuZHJhdy50YWdfYmluZChmcmVkLCAiPEFueS1MZWF2ZT4iLCBzZWxmLm1vdXNlTGVhdmUpCi0KLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5kcmF3LCAiPDE+Iiwgc2VsZi5tb3VzZURvd24pCi0gICAgICAgIFdpZGdldC5iaW5kKHNlbGYuZHJhdywgIjxCMS1Nb3Rpb24+Iiwgc2VsZi5tb3VzZU1vdmUpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvY2FudmFzLW11bHQtaXRlbS1zZWwucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtbXVsdC1pdGVtLXNlbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg3NWI0NC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtbXVsdC1pdGVtLXNlbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIGFsbG93cyBtb3ZpbmcgZG90cyB3aXRoIG11bHRpcGxlIHNlbGVjdGlvbi4KLQotU0VMRUNURURfQ09MT1IgPSAicmVkIgotVU5TRUxFQ1RFRF9DT0xPUiA9ICJibHVlIgotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIyMjIEV2ZW50IGNhbGxiYWNrcyBmb3IgVEhFIENBTlZBUyAobm90IHRoZSBzdHVmZiBkcmF3biBvbiBpdCkKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgZGVmIG1vdXNlRG93bihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgc2VlIGlmIHdlJ3JlIGluc2lkZSBhIGRvdC4gSWYgd2UgYXJlLCBpdAotICAgICAgICAjIGdldHMgdGFnZ2VkIGFzIENVUlJFTlQgZm9yIGZyZWUgYnkgdGsuCi0KLSAgICAgICAgaWYgbm90IGV2ZW50LndpZGdldC5maW5kX3dpdGh0YWcoQ1VSUkVOVCk6Ci0gICAgICAgICAgICAjIHdlIGNsaWNrZWQgb3V0c2lkZSBvZiBhbGwgZG90cyBvbiB0aGUgY2FudmFzLiB1bnNlbGVjdCBhbGwuCi0KLSAgICAgICAgICAgICMgcmUtY29sb3IgZXZlcnl0aGluZyBiYWNrIHRvIGFuIHVuc2VsZWN0ZWQgY29sb3IKLSAgICAgICAgICAgIHNlbGYuZHJhdy5pdGVtY29uZmlnKCJzZWxlY3RlZCIsIGZpbGw9VU5TRUxFQ1RFRF9DT0xPUikKLSAgICAgICAgICAgICMgdW5zZWxlY3QgZXZlcnl0aGluZwotICAgICAgICAgICAgc2VsZi5kcmF3LmR0YWcoInNlbGVjdGVkIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgbWFyayBhcyAic2VsZWN0ZWQiIHRoZSB0aGluZyB0aGUgY3Vyc29yIGlzIHVuZGVyCi0gICAgICAgICAgICBzZWxmLmRyYXcuYWRkdGFnKCJzZWxlY3RlZCIsICJ3aXRodGFnIiwgQ1VSUkVOVCkKLSAgICAgICAgICAgICMgY29sb3IgaXQgYXMgc2VsZWN0ZWQKLSAgICAgICAgICAgIHNlbGYuZHJhdy5pdGVtY29uZmlnKCJzZWxlY3RlZCIsIGZpbGw9U0VMRUNURURfQ09MT1IpCi0KLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLQotCi0gICAgZGVmIG1vdXNlTW92ZShzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuZHJhdy5tb3ZlKCJzZWxlY3RlZCIsIGV2ZW50LnggLSBzZWxmLmxhc3R4LCBldmVudC55IC0gc2VsZi5sYXN0eSkKLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLQotICAgIGRlZiBtYWtlTmV3RG90KHNlbGYpOgotICAgICAgICAjIGNyZWF0ZSBhIGRvdCwgYW5kIG1hcmsgaXQgYXMgY3VycmVudAotICAgICAgICBmcmVkID0gc2VsZi5kcmF3LmNyZWF0ZV9vdmFsKDAsIDAsIDIwLCAyMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVNFTEVDVEVEX0NPTE9SLCB0YWdzPUNVUlJFTlQpCi0gICAgICAgICMgYW5kIG1ha2UgaXQgc2VsZWN0ZWQKLSAgICAgICAgc2VsZi5kcmF3LmFkZHRhZygic2VsZWN0ZWQiLCAid2l0aHRhZyIsIENVUlJFTlQpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5RVUlUID0gQnV0dG9uKHNlbGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0KLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIG1ha2UgdGhlIGNhbnZhcyBhbmQgYmluZCBzb21lIGJlaGF2aW9yIHRvIGl0Ci0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiKQotICAgICAgICBXaWRnZXQuYmluZChzZWxmLmRyYXcsICI8MT4iLCBzZWxmLm1vdXNlRG93bikKLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5kcmF3LCAiPEIxLU1vdGlvbj4iLCBzZWxmLm1vdXNlTW92ZSkKLQotICAgICAgICAjIGFuZCBvdGhlciB0aGluZ3MuLi4uLgotICAgICAgICBzZWxmLmJ1dHRvbiA9IEJ1dHRvbihzZWxmLCB0ZXh0PSJtYWtlIGEgbmV3IGRvdCIsIGZvcmVncm91bmQ9ImJsdWUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYubWFrZU5ld0RvdCkKLQotICAgICAgICBtZXNzYWdlID0gKCIlcyBkb3RzIGFyZSBzZWxlY3RlZCBhbmQgY2FuIGJlIGRyYWdnZWQuXG4iCi0gICAgICAgICAgICAgICAgICAgIiVzIGFyZSBub3Qgc2VsZWN0ZWQuXG4iCi0gICAgICAgICAgICAgICAgICAgIkNsaWNrIGluIGEgZG90IHRvIHNlbGVjdCBpdC5cbiIKLSAgICAgICAgICAgICAgICAgICAiQ2xpY2sgb24gZW1wdHkgc3BhY2UgdG8gZGVzZWxlY3QgYWxsIGRvdHMuIgotICAgICAgICAgICAgICAgICAgICkgJSAoU0VMRUNURURfQ09MT1IsIFVOU0VMRUNURURfQ09MT1IpCi0gICAgICAgIHNlbGYubGFiZWwgPSBNZXNzYWdlKHNlbGYsIHdpZHRoPSI1aSIsIHRleHQ9bWVzc2FnZSkKLQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmxhYmVsLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCwgZXhwYW5kPTEpCi0gICAgICAgIHNlbGYuYnV0dG9uLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKLSAgICAgICAgc2VsZi5kcmF3LnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy1yZWFkaW5nLXRhZy1pbmZvLnB5IGIvRGVtby90a2ludGVyL21hdHQvY2FudmFzLXJlYWRpbmctdGFnLWluZm8ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWYwYTEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvY2FudmFzLXJlYWRpbmctdGFnLWluZm8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5RVUlULnBhY2soc2lkZT1CT1RUT00sIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmRyYXdpbmcgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0KLSAgICAgICAgIyBtYWtlIGEgc2hhcGUKLSAgICAgICAgcGdvbiA9IHNlbGYuZHJhd2luZy5jcmVhdGVfcG9seWdvbigKLSAgICAgICAgICAgIDEwLCAxMCwgMTEwLCAxMCwgMTEwLCAxMTAsIDEwICwgMTEwLAotICAgICAgICAgICAgZmlsbD0icmVkIiwgdGFncz0oIndlZWUiLCAiZm9vIiwgImdyb28iKSkKLQotICAgICAgICAjIHRoaXMgaXMgaG93IHlvdSBxdWVyeSBhbiBvYmplY3QgZm9yIGl0cyBhdHRyaWJ1dGVzCi0gICAgICAgICMgY29uZmlnIG9wdGlvbnMgRk9SIENBTlZBUyBJVEVNUyBhbHdheXMgY29tZSBiYWNrIGluIHR1cGxlcyBvZiBsZW5ndGggNS4KLSAgICAgICAgIyAwIGF0dHJpYnV0ZSBuYW1lCi0gICAgICAgICMgMSBCTEFOSwotICAgICAgICAjIDIgQkxBTksKLSAgICAgICAgIyAzIGRlZmF1bHQgdmFsdWUKLSAgICAgICAgIyA0IGN1cnJlbnQgdmFsdWUKLSAgICAgICAgIyB0aGUgYmxhbmsgc3BvdHMgYXJlIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZSBjb25maWcgY29tbWFuZCB0aGF0Ci0gICAgICAgICMgaXMgdXNlZCBmb3Igd2lkZ2V0cy4gKHJlbWVtYmVyLCB0aGlzIGlzIGZvciBJVEVNUyBkcmF3bgotICAgICAgICAjIG9uIGEgY2FudmFzIHdpZGdldCwgbm90IHdpZGdldHMpCi0gICAgICAgIG9wdGlvbl92YWx1ZSA9IHNlbGYuZHJhd2luZy5pdGVtY29uZmlnKHBnb24sICJzdGlwcGxlIikKLSAgICAgICAgcHJpbnQoInBnb24ncyBjdXJyZW50IHN0aXBwbGUgdmFsdWUgaXMgLS0+Iiwgb3B0aW9uX3ZhbHVlWzRdLCAiPC0tIikKLSAgICAgICAgb3B0aW9uX3ZhbHVlID0gc2VsZi5kcmF3aW5nLml0ZW1jb25maWcocGdvbiwgICJmaWxsIikKLSAgICAgICAgcHJpbnQoInBnb24ncyBjdXJyZW50IGZpbGwgdmFsdWUgaXMgLS0+Iiwgb3B0aW9uX3ZhbHVlWzRdLCAiPC0tIikKLSAgICAgICAgcHJpbnQoIiAgd2hlbiBoZSBpcyB1c3VhbGx5IGNvbG9yZWQgLS0+Iiwgb3B0aW9uX3ZhbHVlWzNdLCAiPC0tIikKLQotICAgICAgICAjIyBoZXJlIHdlIHByaW50IG91dCBhbGwgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb2JqZWN0Ci0gICAgICAgIG9wdGlvbl92YWx1ZSA9IHNlbGYuZHJhd2luZy5pdGVtY29uZmlnKHBnb24sICAidGFncyIpCi0gICAgICAgIHByaW50KCJwZ29uJ3MgdGFncyBhcmUiLCBvcHRpb25fdmFsdWVbNF0pCi0KLSAgICAgICAgc2VsZi5kcmF3aW5nLnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi0KLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvY2FudmFzLXctd2lkZ2V0LWRyYXctZWwucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtdy13aWRnZXQtZHJhdy1lbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E5NjU4My4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtdy13aWRnZXQtZHJhdy1lbC5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIHRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIGNyZWF0aW9uIG9mIHdpZGdldHMgYXMgcGFydCBvZiBhIGNhbnZhcyBvYmplY3QKLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIHByaW50aGkoc2VsZik6Ci0gICAgICAgIHByaW50KCJoaSIpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5RVUlUID0gQnV0dG9uKHNlbGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPUJPVEgpCi0KLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiKQotCi0gICAgICAgIHNlbGYuYnV0dG9uID0gQnV0dG9uKHNlbGYsIHRleHQ9InRoaXMgaXMgYSBidXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucHJpbnRoaSkKLQotICAgICAgICAjIG5vdGUgaGVyZSB0aGUgY29vcmRzIGFyZSBnaXZlbiBpbiBwaXhlbHMgKGZvcm0gdGhlCi0gICAgICAgICMgdXBwZXIgcmlnaHQgYW5kIGNvcm5lciBvZiB0aGUgd2luZG93LCBhcyB1c3VhbCBmb3IgWCkKLSAgICAgICAgIyBidXQgbWlnaHQganVzdCBoYXZlIHdlbGwgYmVlbiBnaXZlbiBpbiBpbmNoZXMgb3IgcG9pbnRzIG9yCi0gICAgICAgICMgd2hhdGV2ZXIuLi51c2UgdGhlICJhbmNob3IiIG9wdGlvbiB0byBjb250cm9sIHdoYXQgcG9pbnQgb2YgdGhlCi0gICAgICAgICMgd2lkZ2V0IChpbiB0aGlzIGNhc2UgdGhlIGJ1dHRvbikgZ2V0cyBtYXBwZWQgdG8gdGhlIGdpdmVuIHgsIHkuCi0gICAgICAgICMgeW91IGNhbiBzcGVjaWZ5IGNvcm5lcnMsIGVkZ2VzLCBjZW50ZXIsIGV0Yy4uLgotICAgICAgICBzZWxmLmRyYXcuY3JlYXRlX3dpbmRvdygzMDAsIDMwMCwgd2luZG93PXNlbGYuYnV0dG9uKQotCi0gICAgICAgIHNlbGYuZHJhdy5wYWNrKHNpZGU9TEVGVCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy13aXRoLXNjcm9sbGJhcnMucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9jYW52YXMtd2l0aC1zY3JvbGxiYXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzU2ODFhLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L2NhbnZhcy13aXRoLXNjcm9sbGJhcnMucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBUaGlzIGV4YW1wbGUgcHJvZ3JhbSBjcmVhdGVzIGEgc2Nyb2xpbmcgY2FudmFzLCBhbmQgZGVtb25zdHJhdGVzCi0jIGhvdyB0byB0aWUgc2Nyb2xsYmFycyBhbmQgY2FudnNlcyB0b2dldGhlci4gVGhlIG1lY2hhbmlzbQotIyBpcyBhbmFsb2d1cyBmb3IgbGlzdGJveGVzIGFuZCBvdGhlciB3aWRnZXRzIHdpdGgKLSMgInhzY3JvbGwiIGFuZCAieXNjcm9sbCIgY29uZmlndXJhdGlvbiBvcHRpb25zLgotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLnF1ZXN0aW9uID0gTGFiZWwoc2VsZiwgdGV4dD0iQ2FuIEZpbmQgVGhlIEJMVUUgU3F1YXJlPz8/Pz8/IikKLSAgICAgICAgc2VsZi5xdWVzdGlvbi5wYWNrKCkKLQotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGJhY2tncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9MywgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPUJPVEgpCi0gICAgICAgIHNwYWNlciA9IEZyYW1lKHNlbGYsIGhlaWdodD0iMC4yNWkiKQotICAgICAgICBzcGFjZXIucGFjayhzaWRlPUJPVFRPTSkKLQotICAgICAgICAjIG5vdGljZSB0aGF0IHRoZSBzY3JvbGwgcmVnaW9uICgyMCIgeCAyMCIpIGlzIGxhcmdlciB0aGFuCi0gICAgICAgICMgZGlzcGxheWVkIHNpemUgb2YgdGhlIHdpZGdldCAoNSIgeCA1IikKLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0id2hpdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xscmVnaW9uPSgwLCAwLCAiMjBpIiwgIjIwaSIpKQotCi0gICAgICAgIHNlbGYuZHJhdy5zY3JvbGxYID0gU2Nyb2xsYmFyKHNlbGYsIG9yaWVudD1IT1JJWk9OVEFMKQotICAgICAgICBzZWxmLmRyYXcuc2Nyb2xsWSA9IFNjcm9sbGJhcihzZWxmLCBvcmllbnQ9VkVSVElDQUwpCi0KLSAgICAgICAgIyBub3cgdGllIHRoZSB0aHJlZSB0b2dldGhlci4gVGhpcyBpcyBzdGFuZGFyZCBib2lsZXJwbGF0ZSB0ZXh0Ci0gICAgICAgIHNlbGYuZHJhd1sneHNjcm9sbGNvbW1hbmQnXSA9IHNlbGYuZHJhdy5zY3JvbGxYLnNldAotICAgICAgICBzZWxmLmRyYXdbJ3lzY3JvbGxjb21tYW5kJ10gPSBzZWxmLmRyYXcuc2Nyb2xsWS5zZXQKLSAgICAgICAgc2VsZi5kcmF3LnNjcm9sbFhbJ2NvbW1hbmQnXSA9IHNlbGYuZHJhdy54dmlldwotICAgICAgICBzZWxmLmRyYXcuc2Nyb2xsWVsnY29tbWFuZCddID0gc2VsZi5kcmF3Lnl2aWV3Ci0KLSAgICAgICAgIyBkcmF3IHNvbWV0aGluZy4gTm90ZSB0aGF0IHRoZSBmaXJzdCBzcXVhcmUKLSAgICAgICAgIyBpcyB2aXNpYmxlLCBidXQgeW91IG5lZWQgdG8gc2Nyb2xsIHRvIHNlZSB0aGUgc2Vjb25kIG9uZS4KLSAgICAgICAgc2VsZi5kcmF3LmNyZWF0ZV9yZWN0YW5nbGUoMCwgMCwgIjMuNWkiLCAiMy41aSIsIGZpbGw9ImJsYWNrIikKLSAgICAgICAgc2VsZi5kcmF3LmNyZWF0ZV9yZWN0YW5nbGUoIjEwaSIsICIxMGkiLCAiMTMuNWkiLCAiMTMuNWkiLCBmaWxsPSJibHVlIikKLQotICAgICAgICAjIHBhY2sgJ2VtIHVwCi0gICAgICAgIHNlbGYuZHJhdy5zY3JvbGxYLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKLSAgICAgICAgc2VsZi5kcmF3LnNjcm9sbFkucGFjayhzaWRlPVJJR0hULCBmaWxsPVkpCi0gICAgICAgIHNlbGYuZHJhdy5wYWNrKHNpZGU9TEVGVCkKLQotCi0gICAgZGVmIHNjcm9sbENhbnZhc1goc2VsZiwgKmFyZ3MpOgotICAgICAgICBwcmludCgic2Nyb2xsaW5nIiwgYXJncykKLSAgICAgICAgcHJpbnQoc2VsZi5kcmF3LnNjcm9sbFguZ2V0KCkpCi0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2RpYWxvZy1ib3gucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9kaWFsb2ctYm94LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMGI4ODI1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L2RpYWxvZy1ib3gucHkKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWZyb20gdGtpbnRlci5kaWFsb2cgaW1wb3J0IERpYWxvZwotCi0jIHRoaXMgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBhIGJ1dHRvbiBpbiBpdAotIyB0aGF0IGNhbiBjcmVhdGUgbmV3IHdpbmRvd3MKLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIHByaW50aXQoc2VsZik6Ci0gICAgICAgIHByaW50KCJoaSIpCi0KLSAgICBkZWYgbWFrZVdpbmRvdyhzZWxmKToKLSAgICAgICAgIiIiQ3JlYXRlIGEgdG9wLWxldmVsIGRpYWxvZyB3aXRoIHNvbWUgYnV0dG9ucy4KLQotICAgICAgICBUaGlzIHVzZXMgdGhlIERpYWxvZyBjbGFzcywgd2hpY2ggaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgVGNsL1RrCi0gICAgICAgIHRrX2RpYWxvZyBzY3JpcHQuICBUaGUgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSB1c2VyIGNsaWNrcyAneWVzJwotICAgICAgICBvciAxIGlmIHRoZSB1c2VyIGNsaWNrcyAnbm8nLgotICAgICAgICAiIiIKLSAgICAgICAgIyB0aGUgcGFyYW1ldGVycyB0byB0aGlzIGNhbGwgYXJlIGFzIGZvbGxvd3M6Ci0gICAgICAgIGQgPSBEaWFsb2coCi0gICAgICAgICAgICBzZWxmLCAgICAgICAgICAgICAgICAgICAgICAgIyMgbmFtZSBvZiBhIHRvcGxldmVsIHdpbmRvdwotICAgICAgICAgICAgdGl0bGU9ImZyZWQgdGhlIGRpYWxvZyBib3giLCMjIHRpdGxlIG9uIHRoZSB3aW5kb3cKLSAgICAgICAgICAgIHRleHQ9ImNsaWNrIG9uIGEgY2hvaWNlIiwgICAjIyBtZXNzYWdlIHRvIGFwcGVhciBpbiB3aW5kb3cKLSAgICAgICAgICAgIGJpdG1hcD0iaW5mbyIsICAgICAgICAgICAgICAjIyBiaXRtYXAgKGlmIGFueSkgdG8gYXBwZWFyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIGlmIG5vbmUsIHVzZSAiIgotICAgICAgICAgICAgIyAgICAgbGVnYWwgdmFsdWVzIGhlcmUgYXJlOgotICAgICAgICAgICAgIyAgICAgIHN0cmluZyAgICAgIHdoYXQgaXQgbG9va3MgbGlrZQotICAgICAgICAgICAgIyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICMgICAgICBlcnJvciAgICAgICBhIGNpcmNsZSB3aXRoIGEgc2xhc2ggdGhyb3VnaCBpdAotICAgICAgICAgICAgIyAgICAgIGdyZXkyNSAgICAgIGdyZXkgc3F1YXJlCi0gICAgICAgICAgICAjICAgICAgZ3JleTUwICAgICAgZGFya2VyIGdyZXkgc3F1YXJlCi0gICAgICAgICAgICAjICAgICAgaG91cmdsYXNzICAgdXNlIGZvciAid2FpdC4uIgotICAgICAgICAgICAgIyAgICAgIGluZm8gICAgICAgIGEgbGFyZ2UsIGxvd2VyIGNhc2UgImkiCi0gICAgICAgICAgICAjICAgICAgcXVlc3RoZWFkICAgYSBodW1hbiBoZWFkIHdpdGggYSAiPyIgaW4gaXQKLSAgICAgICAgICAgICMgICAgICBxdWVzdGlvbiAgICBhIGxhcmdlICI/IgotICAgICAgICAgICAgIyAgICAgIHdhcm5pbmcgICAgIGEgbGFyZ2UgIiEiCi0gICAgICAgICAgICAjICAgICAgICBAZm5hbWUgICAgWCBiaXRtYXAgd2hlcmUgZm5hbWUgaXMgdGhlIHBhdGggdG8gdGhlIGZpbGUKLSAgICAgICAgICAgICMKLSAgICAgICAgICAgIGRlZmF1bHQ9MCwgICAgIyB0aGUgaW5kZXggb2YgdGhlIGRlZmF1bHQgYnV0dG9uIGNob2ljZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBoaXR0aW5nIHJldHVybiBzZWxlY3RzIHRoaXMKLSAgICAgICAgICAgIHN0cmluZ3M9KCJ5ZXMiLCAibm8iKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2YWx1ZXMgb2YgdGhlICdzdHJpbmdzJyBrZXkgYXJlIHRoZSBsYWJlbHMgZm9yIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGJ1dHRvbnMgdGhhdCBhcHBlYXIgbGVmdCB0byByaWdodCBpbiB0aGUgZGlhbG9nIGJveAotICAgICAgICByZXR1cm4gZC5udW0KLQotCi0gICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6Ci0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuaGlfdGhlcmUgPSBCdXR0b24oc2VsZiwgdGV4dD0nTWFrZSBhIE5ldyBXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5tYWtlV2luZG93KQotICAgICAgICBzZWxmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYud2luZG93bnVtID0gMAotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2VudHJ5LXNpbXBsZS5weSBiL0RlbW8vdGtpbnRlci9tYXR0L2VudHJ5LXNpbXBsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1NWRmNS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9lbnRyeS1zaW1wbGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLWltcG9ydCBzdHJpbmcKLQotIyBUaGlzIHByb2dyYW0gIHNob3dzIGhvdyB0byB1c2UgYSBzaW1wbGUgdHlwZS1pbiBib3gKLQotY2xhc3MgQXBwKEZyYW1lKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIHNlbGYucGFjaygpCi0KLSAgICAgICAgc2VsZi5lbnRyeXRoaW5neSA9IEVudHJ5KCkKLSAgICAgICAgc2VsZi5lbnRyeXRoaW5neS5wYWNrKCkKLQotICAgICAgICAjIGFuZCBoZXJlIHdlIGdldCBhIGNhbGxiYWNrIHdoZW4gdGhlIHVzZXIgaGl0cyByZXR1cm4uIHdlIGNvdWxkCi0gICAgICAgICMgbWFrZSB0aGUga2V5IHRoYXQgdHJpZ2dlcnMgdGhlIGNhbGxiYWNrIGFueXRoaW5nIHdlIHdhbnRlZCB0by4KLSAgICAgICAgIyBvdGhlciB0eXBpY2FsIG9wdGlvbnMgbWlnaHQgYmUgPEtleS1UYWI+IG9yIDxLZXk+IChmb3IgYW55dGhpbmcpCi0gICAgICAgIHNlbGYuZW50cnl0aGluZ3kuYmluZCgnPEtleS1SZXR1cm4+Jywgc2VsZi5wcmludF9jb250ZW50cykKLQotICAgIGRlZiBwcmludF9jb250ZW50cyhzZWxmLCBldmVudCk6Ci0gICAgICAgIHByaW50KCJoaS4gY29udGVudHMgb2YgZW50cnkgaXMgbm93IC0tLS0+Iiwgc2VsZi5lbnRyeXRoaW5neS5nZXQoKSkKLQotcm9vdCA9IEFwcCgpCi1yb290Lm1hc3Rlci50aXRsZSgiRm9vIikKLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvZW50cnktd2l0aC1zaGFyZWQtdmFyaWFibGUucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9lbnRyeS13aXRoLXNoYXJlZC12YXJpYWJsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2Q5M2RhNy4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9lbnRyeS13aXRoLXNoYXJlZC12YXJpYWJsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIFRoaXMgcHJvZ3JhbSAgc2hvd3MgaG93IHRvIG1ha2UgYSB0eXBlaW4gYm94IHNoYWRvdyBhIHByb2dyYW0gdmFyaWFibGUuCi0KLWNsYXNzIEFwcChGcmFtZSk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBzZWxmLnBhY2soKQotCi0gICAgICAgIHNlbGYuZW50cnl0aGluZ3kgPSBFbnRyeShzZWxmKQotICAgICAgICBzZWxmLmVudHJ5dGhpbmd5LnBhY2soKQotCi0gICAgICAgIHNlbGYuYnV0dG9uID0gQnV0dG9uKHNlbGYsIHRleHQ9IlVwcGVyY2FzZSBUaGUgRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYudXBwZXIpCi0gICAgICAgIHNlbGYuYnV0dG9uLnBhY2soKQotCi0gICAgICAgICMgaGVyZSB3ZSBoYXZlIHRoZSB0ZXh0IGluIHRoZSBlbnRyeSB3aWRnZXQgdGllZCB0byBhIHZhcmlhYmxlLgotICAgICAgICAjIGNoYW5nZXMgaW4gdGhlIHZhcmlhYmxlIGFyZSBlY2hvZWQgaW4gdGhlIHdpZGdldCBhbmQgdmljZSB2ZXJzYS4KLSAgICAgICAgIyBWZXJ5IGhhbmR5LgotICAgICAgICAjIHRoZXJlIGFyZSBvdGhlciBWYXJpYWJsZSB0eXBlcy4gU2VlIFRraW50ZXIucHkgZm9yIGFsbAotICAgICAgICAjIHRoZSBvdGhlciB2YXJpYWJsZSB0eXBlcyB0aGF0IGNhbiBiZSBzaGFkb3dlZAotICAgICAgICBzZWxmLmNvbnRlbnRzID0gU3RyaW5nVmFyKCkKLSAgICAgICAgc2VsZi5jb250ZW50cy5zZXQoInRoaXMgaXMgYSB2YXJpYWJsZSIpCi0gICAgICAgIHNlbGYuZW50cnl0aGluZ3kuY29uZmlnKHRleHR2YXJpYWJsZT1zZWxmLmNvbnRlbnRzKQotCi0gICAgICAgICMgYW5kIGhlcmUgd2UgZ2V0IGEgY2FsbGJhY2sgd2hlbiB0aGUgdXNlciBoaXRzIHJldHVybi4gd2UgY291bGQKLSAgICAgICAgIyBtYWtlIHRoZSBrZXkgdGhhdCB0cmlnZ2VycyB0aGUgY2FsbGJhY2sgYW55dGhpbmcgd2Ugd2FudGVkIHRvLgotICAgICAgICAjIG90aGVyIHR5cGljYWwgb3B0aW9ucyBtaWdodCBiZSA8S2V5LVRhYj4gb3IgPEtleT4gKGZvciBhbnl0aGluZykKLSAgICAgICAgc2VsZi5lbnRyeXRoaW5neS5iaW5kKCc8S2V5LVJldHVybj4nLCBzZWxmLnByaW50X2NvbnRlbnRzKQotCi0gICAgZGVmIHVwcGVyKHNlbGYpOgotICAgICAgICAjIG5vdGljZSBoZXJlLCB3ZSBkb24ndCBhY3R1YWxseSByZWZlciB0byB0aGUgZW50cnkgYm94LgotICAgICAgICAjIHdlIGp1c3Qgb3BlcmF0ZSBvbiB0aGUgc3RyaW5nIHZhcmlhYmxlIGFuZCB3ZQotICAgICAgICAjIGJlY2F1c2UgaXQncyBiZWluZyBsb29rZWQgYXQgYnkgdGhlIGVudHJ5IHdpZGdldCwgY2hhbmdpbmcKLSAgICAgICAgIyB0aGUgdmFyaWFibGUgY2hhbmdlcyB0aGUgZW50cnkgd2lkZ2V0IGRpc3BsYXkgYXV0b21hdGljYWxseS4KLSAgICAgICAgIyB0aGUgc3RyYW5nZSBnZXQvc2V0IG9wZXJhdG9ycyBhcmUgY2x1bmt5LCB0cnVlLi4uCi0gICAgICAgIHN0ciA9IHNlbGYuY29udGVudHMuZ2V0KCkudXBwZXIoKQotICAgICAgICBzZWxmLmNvbnRlbnRzLnNldChzdHIpCi0KLSAgICBkZWYgcHJpbnRfY29udGVudHMoc2VsZiwgZXZlbnQpOgotICAgICAgICBwcmludCgiaGkuIGNvbnRlbnRzIG9mIGVudHJ5IGlzIG5vdyAtLS0tPiIsIHNlbGYuY29udGVudHMuZ2V0KCkpCi0KLXJvb3QgPSBBcHAoKQotcm9vdC5tYXN0ZXIudGl0bGUoIkZvbyIpCi1yb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L2tpbGxpbmctd2luZG93LXctd20ucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9raWxsaW5nLXdpbmRvdy13LXdtLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDAzNGQxLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L2tpbGxpbmctd2luZG93LXctd20ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBUaGlzIGZpbGUgc2hvd3MgaG93IHRvIHRyYXAgdGhlIGtpbGxpbmcgb2YgYSB3aW5kb3cKLSMgd2hlbiB0aGUgdXNlciB1c2VzIHdpbmRvdyBtYW5hZ2VyIG1lbnVzICh0eXAuIHVwcGVyIGxlZnQgaGFuZCBjb3JuZXIKLSMgbWVudSBpbiB0aGUgZGVjb3JhdGlvbiBib3JkZXIpLgotCi0KLSMjIyAqKioqKioqIHRoaXMgaXNuJ3QgcmVhbGx5IGNhbGxlZCAtLSByZWFkIHRoZSBjb21tZW50cwotZGVmIG15X2RlbGV0ZV9jYWxsYmFjaygpOgotICAgIHByaW50KCJ3aG9vcHMgLS0gdHJpZWQgdG8gZGVsZXRlIG1lISIpCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBkZWF0aEhhbmRsZXIoc2VsZiwgZXZlbnQpOgotICAgICAgICBwcmludChzZWxmLCAiaXMgbm93IGdldHRpbmcgbnVrZWQuIHBlcmZvcm1pbmcgc29tZSBzYXZlIGhlcmUuLi4uIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuaGlfdGhlcmUgPSBCdXR0b24oc2VsZiwgdGV4dD0nSGVsbG8nKQotICAgICAgICBzZWxmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi0gICAgICAgICMjIwotICAgICAgICAjIyMgIFBSRVZFTlQgV00ga2lsbHMgZnJvbSBoYXBwZW5pbmcKLSAgICAgICAgIyMjCi0KLSAgICAgICAgIyB0aGUgZG9jcyB3b3VsZCBoYXZlIHlvdSBkbyB0aGlzOgotCi0jICAgICAgIHNlbGYubWFzdGVyLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgbXlfZGVsZXRlX2NhbGxiYWNrKQotCi0gICAgICAgICMgdW5mb3J0dW5hdGVseSwgc29tZSB3aW5kb3cgbWFuYWdlcnMgd2lsbCBub3Qgc2VuZCB0aGlzIHJlcXVlc3QgdG8gYSB3aW5kb3cuCi0gICAgICAgICMgdGhlICJwcm90b2NvbCIgZnVuY3Rpb24gc2VlbXMgaW5jYXBhYmxlIG9mIHRyYXBwaW5nIHRoZXNlICJhZ2dyZXNzaXZlIiB3aW5kb3cga2lsbHMuCi0gICAgICAgICMgdGhpcyBsaW5lIG9mIGNvZGUgY2F0Y2hlcyBldmVyeXRoaW5nLCB0aG8uIFRoZSB3aW5kb3cgaXMgZGVsZXRlZCwgYnV0IHlvdSBoYXZlIGEgY2hhbmNlCi0gICAgICAgICMgb2YgY2xlYW5pbmcgdXAgZmlyc3QuCi0gICAgICAgIHNlbGYuYmluZF9hbGwoIjxEZXN0cm95PiIsIHNlbGYuZGVhdGhIYW5kbGVyKQotCi0KLXRlc3QgPSBUZXN0KCkKLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvbWVudS1hbGwtdHlwZXMtb2YtZW50cmllcy5weSBiL0RlbW8vdGtpbnRlci9tYXR0L21lbnUtYWxsLXR5cGVzLW9mLWVudHJpZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0ZjE2MmUuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvbWVudS1hbGwtdHlwZXMtb2YtZW50cmllcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI0NCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBzb21lIHZvY2FidWxhcnkgdG8ga2VlcCBmcm9tIGdldHRpbmcgY29uZnVzZWQuIFRoaXMgdGVybWlub2xvZ3kKLSMgaXMgc29tZXRoaW5nIEkgY29va2VkIHVwIGZvciB0aGlzIGZpbGUsIGJ1dCBmb2xsb3dzIHRoZSBtYW4gcGFnZXMKLSMgcHJldHR5IGNsb3NlbHkKLSMKLSMKLSMKLSMgICAgICAgVGhpcyBpcyBhIE1FTlVCVVRUT04KLSMgICAgICAgVgotIyArLS0tLS0tLS0tLS0tLSsKLSMgfCAgICAgICAgICAgICB8Ci0jCi0jICstLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLSsrLS0tLS0tLS0tLS0tKwotIyB8ICAgICAgICAgICAgfHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHwKLSMgfCAgRmlsZSAgICAgIHx8ICBFZGl0ICAgICAgfHwgT3B0aW9ucyAgICB8ICAgPC0tLS0tLS0tIHRoZSBNRU5VQkFSCi0jIHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHx8ICAgICAgICAgICAgfAotIyArLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLSsKLSMgfCBOZXcuLi4gICAgICAgICB8Ci0jIHwgT3Blbi4uLiAgICAgICAgfAotIyB8IFByaW50ICAgICAgICAgIHwKLSMgfCAgICAgICAgICAgICAgICB8ICA8LS0tLS0tLS0gVGhpcyBpcyBhIE1FTlUuIFRoZSBsaW5lcyBvZiB0ZXh0IGluIHRoZSBtZW51IGFyZQotIyB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVOVSBFTlRSSUVTCi0jIHwgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLSsKLSMgfCBPcGVuIEZpbGVzID4gICB8IGZpbGUxICAgICAgICAgfAotIyB8ICAgICAgICAgICAgICAgIHwgZmlsZTIgICAgICAgICB8Ci0jIHwgICAgICAgICAgICAgICAgfCBhbm90aGVyIGZpbGUgIHwgPC0tLS0tLSB0aGlzIGNhc2NhZGluZyBwYXJ0IGlzIGFsc28gYSBNRU5VCi0jICstLS0tLS0tLS0tLS0tLS0tfCAgICAgICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotIyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKwotCi0KLQotIyBzb21lIG1pc2NlbGxhbmVvdXMgY2FsbGJhY2tzCi1kZWYgbmV3X2ZpbGUoKToKLSAgICBwcmludCgib3BlbmluZyBuZXcgZmlsZSIpCi0KLWRlZiBvcGVuX2ZpbGUoKToKLSAgICBwcmludCgib3BlbmluZyBPTEQgZmlsZSIpCi0KLWRlZiBwcmludF9zb21ldGhpbmcoKToKLSAgICBwcmludCgicGlja2VkIGEgbWVudSBpdGVtIikKLQotCi0KLWFuY2hvdmllcyA9IDAKLQotZGVmIHByaW50X2FuY2hvdmllcygpOgotICAgIGdsb2JhbCBhbmNob3ZpZXMKLSAgICBhbmNob3ZpZXMgPSBub3QgYW5jaG92aWVzCi0gICAgcHJpbnQoImFuY2hvdmllcz8iLCBhbmNob3ZpZXMpCi0KLWRlZiBtYWtlQ29tbWFuZE1lbnUoKToKLSAgICAjIG1ha2UgbWVudSBidXR0b24KLSAgICBDb21tYW5kX2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nU2ltcGxlIEJ1dHRvbiBDb21tYW5kcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVybGluZT0wKQotICAgIENvbW1hbmRfYnV0dG9uLnBhY2soc2lkZT1MRUZULCBwYWR4PSIybSIpCi0KLSAgICAjIG1ha2UgdGhlIHB1bGxkb3duIHBhcnQgb2YgdGhlIEZpbGUgbWVudS4gVGhlIHBhcmFtZXRlciBwYXNzZWQgaXMgdGhlIG1hc3Rlci4KLSAgICAjIHdlIGF0dGFjaCBpdCB0byB0aGUgYnV0dG9uIGFzIGEgcHl0aG9uIGF0dHJpYnV0ZSBjYWxsZWQgIm1lbnUiIGJ5IGNvbnZlbnRpb24uCi0gICAgIyBob3BlZnVsbHkgdGhpcyBpc24ndCB0b28gY29uZnVzaW5nLi4uCi0gICAgQ29tbWFuZF9idXR0b24ubWVudSA9IE1lbnUoQ29tbWFuZF9idXR0b24pCi0KLSAgICAjIGp1c3QgdG8gYmUgY3V0ZSwgbGV0J3MgZGlzYWJsZSB0aGUgdW5kbyBvcHRpb246Ci0gICAgQ29tbWFuZF9idXR0b24ubWVudS5hZGRfY29tbWFuZChsYWJlbD0iVW5kbyIpCi0gICAgIyB1bmRvIGlzIHRoZSAwdGggZW50cnkuLi4KLSAgICBDb21tYW5kX2J1dHRvbi5tZW51LmVudHJ5Y29uZmlnKDAsIHN0YXRlPURJU0FCTEVEKQotCi0gICAgQ29tbWFuZF9idXR0b24ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nTmV3Li4uJywgdW5kZXJsaW5lPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPW5ld19maWxlKQotICAgIENvbW1hbmRfYnV0dG9uLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J09wZW4uLi4nLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9b3Blbl9maWxlKQotICAgIENvbW1hbmRfYnV0dG9uLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J0RpZmZlcmVudCBGb250JywgdW5kZXJsaW5lPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PSctKi1oZWx2ZXRpY2EtKi1yLSotKi0qLTE4MC0qLSotKi0qLSotKicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXByaW50X3NvbWV0aGluZykKLQotICAgICMgd2UgY2FuIG1ha2UgYml0bWFwcyBiZSBtZW51IGVudHJpZXMgdG9vLiBGaWxlIGZvcm1hdCBpcyBYMTEgYml0bWFwLgotICAgICMgaWYgeW91IHVzZSBYViwgc2F2ZSBpdCB1bmRlciBYMTEgYml0bWFwIGZvcm1hdC4gZHVoLXVoLiwuLgotICAgIENvbW1hbmRfYnV0dG9uLm1lbnUuYWRkX2NvbW1hbmQoCi0gICAgICAgIGJpdG1hcD0iaW5mbyIpCi0gICAgICAgICNiaXRtYXA9J0AvaG9tZS9tamM0eS9kaWxiZXJ0L3Byb2plY3Quc3RhdHVzLmlzLmRvb21lZC5sYXN0LnBhbmVsLmJtJykKLQotICAgICMgdGhpcyBpcyBqdXN0IGEgbGluZQotICAgIENvbW1hbmRfYnV0dG9uLm1lbnUuYWRkKCdzZXBhcmF0b3InKQotCi0gICAgIyBjaGFuZ2UgdGhlIGNvbG9yCi0gICAgQ29tbWFuZF9idXR0b24ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nUXVpdCcsIHVuZGVybGluZT0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZWJhY2tncm91bmQ9J2dyZWVuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9Q29tbWFuZF9idXR0b24ucXVpdCkKLQotICAgICMgc2V0IHVwIGEgcG9pbnRlciBmcm9tIHRoZSBmaWxlIG1lbnVidXR0b24gYmFjayB0byB0aGUgZmlsZSBtZW51Ci0gICAgQ29tbWFuZF9idXR0b25bJ21lbnUnXSA9IENvbW1hbmRfYnV0dG9uLm1lbnUKLQotICAgIHJldHVybiBDb21tYW5kX2J1dHRvbgotCi0KLQotZGVmIG1ha2VDYXNjYWRlTWVudSgpOgotICAgICMgbWFrZSBtZW51IGJ1dHRvbgotICAgIENhc2NhZGVfYnV0dG9uID0gTWVudWJ1dHRvbihtQmFyLCB0ZXh0PSdDYXNjYWRpbmcgTWVudXMnLCB1bmRlcmxpbmU9MCkKLSAgICBDYXNjYWRlX2J1dHRvbi5wYWNrKHNpZGU9TEVGVCwgcGFkeD0iMm0iKQotCi0gICAgIyB0aGUgcHJpbWFyeSBwdWxsZG93bgotICAgIENhc2NhZGVfYnV0dG9uLm1lbnUgPSBNZW51KENhc2NhZGVfYnV0dG9uKQotCi0gICAgIyB0aGlzIGlzIHRoZSBtZW51IHRoYXQgY2FzY2FkZXMgZnJvbSB0aGUgcHJpbWFyeSBwdWxsZG93bi4uLi4KLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMgPSBNZW51KENhc2NhZGVfYnV0dG9uLm1lbnUpCi0KLSAgICAjIC4uLmFuZCB0aGlzIGlzIGEgbWVudSB0aGF0IGNhc2NhZGVzIGZyb20gdGhhdC4KLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMud2VpcmRvbmVzID0gTWVudShDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMpCi0KLSAgICAjIHRoZW4geW91IGRlZmluZSB0aGUgbWVudXMgZnJvbSB0aGUgZGVlcGVzdCBsZXZlbCBvbiB1cC4KLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMud2VpcmRvbmVzLmFkZF9jb21tYW5kKGxhYmVsPSdhdmFjYWRvJykKLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMud2VpcmRvbmVzLmFkZF9jb21tYW5kKGxhYmVsPSdiZWxnaWFuIGVuZGl2ZScpCi0gICAgQ2FzY2FkZV9idXR0b24ubWVudS5jaG9pY2VzLndlaXJkb25lcy5hZGRfY29tbWFuZChsYWJlbD0nYmVlZmFyb25pJykKLQotICAgICMgZGVmaW5pdGlvbiBvZiB0aGUgbWVudSBvbmUgbGV2ZWwgdXAuLi4KLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMuYWRkX2NvbW1hbmQobGFiZWw9J0Nob2NvbGF0ZScpCi0gICAgQ2FzY2FkZV9idXR0b24ubWVudS5jaG9pY2VzLmFkZF9jb21tYW5kKGxhYmVsPSdWYW5pbGxhJykKLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMuYWRkX2NvbW1hbmQobGFiZWw9J1R1dHRpRnJ1aXRpJykKLSAgICBDYXNjYWRlX2J1dHRvbi5tZW51LmNob2ljZXMuYWRkX2NvbW1hbmQobGFiZWw9J1dvcEJvcGFMb29wQmFwQUJvcEJhbUJvb20nKQotICAgIENhc2NhZGVfYnV0dG9uLm1lbnUuY2hvaWNlcy5hZGRfY29tbWFuZChsYWJlbD0nUm9ja3kgUm9hZCcpCi0gICAgQ2FzY2FkZV9idXR0b24ubWVudS5jaG9pY2VzLmFkZF9jb21tYW5kKGxhYmVsPSdCdWJibGVHdW0nKQotICAgIENhc2NhZGVfYnV0dG9uLm1lbnUuY2hvaWNlcy5hZGRfY2FzY2FkZSgKLSAgICAgICAgbGFiZWw9J1dlaXJkIEZsYXZvcnMnLAotICAgICAgICBtZW51PUNhc2NhZGVfYnV0dG9uLm1lbnUuY2hvaWNlcy53ZWlyZG9uZXMpCi0KLSAgICAjIGFuZCBmaW5hbGx5LCB0aGUgZGVmaW5pdGlvbiBmb3IgdGhlIHRvcCBsZXZlbAotICAgIENhc2NhZGVfYnV0dG9uLm1lbnUuYWRkX2Nhc2NhZGUobGFiZWw9J21vcmUgY2hvaWNlcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW51PUNhc2NhZGVfYnV0dG9uLm1lbnUuY2hvaWNlcykKLQotICAgIENhc2NhZGVfYnV0dG9uWydtZW51J10gPSBDYXNjYWRlX2J1dHRvbi5tZW51Ci0KLSAgICByZXR1cm4gQ2FzY2FkZV9idXR0b24KLQotZGVmIG1ha2VDaGVja2J1dHRvbk1lbnUoKToKLSAgICBnbG9iYWwgZnJlZAotICAgICMgbWFrZSBtZW51IGJ1dHRvbgotICAgIENoZWNrYnV0dG9uX2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nQ2hlY2tidXR0b24gTWVudXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lPTApCi0gICAgQ2hlY2tidXR0b25fYnV0dG9uLnBhY2soc2lkZT1MRUZULCBwYWR4PScybScpCi0KLSAgICAjIHRoZSBwcmltYXJ5IHB1bGxkb3duCi0gICAgQ2hlY2tidXR0b25fYnV0dG9uLm1lbnUgPSBNZW51KENoZWNrYnV0dG9uX2J1dHRvbikKLQotICAgICMgYW5kIGFsbCB0aGUgY2hlY2sgYnV0dG9ucy4gTm90ZSB0aGF0IHRoZSAidmFyaWFibGUiICJvbnZhbHVlIiBhbmQgIm9mZnZhbHVlIiBvcHRpb25zCi0gICAgIyBhcmUgbm90IHN1cHBvcnRlZCBjb3JyZWN0bHkgYXQgcHJlc2VudC4gWW91IGhhdmUgdG8gZG8gYWxsIHlvdXIgYXBwbGljYXRpb24KLSAgICAjIHdvcmsgdGhyb3VnaCB0aGUgY2FsYmFjay4KLSAgICBDaGVja2J1dHRvbl9idXR0b24ubWVudS5hZGRfY2hlY2tidXR0b24obGFiZWw9J1BlcHBlcm9uaScpCi0gICAgQ2hlY2tidXR0b25fYnV0dG9uLm1lbnUuYWRkX2NoZWNrYnV0dG9uKGxhYmVsPSdTYXVzYWdlJykKLSAgICBDaGVja2J1dHRvbl9idXR0b24ubWVudS5hZGRfY2hlY2tidXR0b24obGFiZWw9J0V4dHJhIENoZWVzZScpCi0KLSAgICAjIHNvIGhlcmUncyBhIGNhbGxiYWNrCi0gICAgQ2hlY2tidXR0b25fYnV0dG9uLm1lbnUuYWRkX2NoZWNrYnV0dG9uKGxhYmVsPSdBbmNob3Z5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1wcmludF9hbmNob3ZpZXMpCi0KLSAgICAjIGFuZCBzdGFydCB3aXRoIGFuY2hvdmllcyBzZWxlY3RlZCB0byBiZSBvbi4gRG8gdGhpcyBieQotICAgICMgY2FsbGluZyBpbnZva2Ugb24gdGhpcyBtZW51IG9wdGlvbi4gVG8gcmVmZXIgdG8gdGhlICJhbmNob3Z5IiBtZW51Ci0gICAgIyBlbnRyeSB3ZSBuZWVkIHRvIGtub3cgaXQncyBpbmRleC4gVG8gZG8gdGhpcywgd2UgdXNlIHRoZSBpbmRleCBtZXRob2QKLSAgICAjIHdoaWNoIHRha2VzIGFyZ3VtZW50cyBvZiBzZXZlcmFsIGZvcm1zOgotICAgICMKLSAgICAjIGFyZ3VtZW50ICAgICAgICB3aGF0IGl0IGRvZXMKLSAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBhIG51bWJlciAgICAgICAgLS0gdGhpcyBpcyB1c2VsZXNzLgotICAgICMgImxhc3QiICAgICAgICAgIC0tIGxhc3Qgb3B0aW9uIGluIHRoZSBtZW51Ci0gICAgIyAibm9uZSIgICAgICAgICAgLS0gdXNlZCB3aXRoIHRoZSBhY3RpdmF0ZSBjb21tYW5kLiBzZWUgdGhlIG1hbiBwYWdlIG9uIG1lbnVzCi0gICAgIyAiYWN0aXZlIiAgICAgICAgLS0gdGhlIGN1cnJlbnRseSBhY3RpdmUgbWVudSBvcHRpb24uIEEgbWVudSBvcHRpb24gaXMgbWFkZSBhY3RpdmUKLSAgICAjICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlICdhY3RpdmF0ZScgbWV0aG9kCi0gICAgIyAiQG51bWJlciIgICAgICAgLS0gd2hlcmUgJ251bWJlcicgaXMgYW4gaW50ZWdlciBhbmQgaXMgdHJlYXRlZCBsaWtlIGEgeSBjb29yZGluYXRlIGluIHBpeGVscwotICAgICMgc3RyaW5nIHBhdHRlcm4gIC0tIHRoaXMgaXMgdGhlIG9wdGlvbiB1c2VkIGJlbG93LCBhbmQgYXR0ZW1wdHMgdG8gbWF0Y2ggImxhYmVscyIgdXNpbmcgdGhlCi0gICAgIyAgICAgICAgICAgICAgICAgICAgcnVsZXMgb2YgVGNsX1N0cmluZ01hdGNoCi0gICAgQ2hlY2tidXR0b25fYnV0dG9uLm1lbnUuaW52b2tlKENoZWNrYnV0dG9uX2J1dHRvbi5tZW51LmluZGV4KCdBbmNob3Z5JykpCi0KLSAgICAjIHNldCB1cCBhIHBvaW50ZXIgZnJvbSB0aGUgZmlsZSBtZW51YnV0dG9uIGJhY2sgdG8gdGhlIGZpbGUgbWVudQotICAgIENoZWNrYnV0dG9uX2J1dHRvblsnbWVudSddID0gQ2hlY2tidXR0b25fYnV0dG9uLm1lbnUKLQotICAgIHJldHVybiBDaGVja2J1dHRvbl9idXR0b24KLQotCi1kZWYgbWFrZVJhZGlvYnV0dG9uTWVudSgpOgotICAgICMgbWFrZSBtZW51IGJ1dHRvbgotICAgIFJhZGlvYnV0dG9uX2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nUmFkaW9idXR0b24gTWVudXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZXJsaW5lPTApCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLnBhY2soc2lkZT1MRUZULCBwYWR4PScybScpCi0KLSAgICAjIHRoZSBwcmltYXJ5IHB1bGxkb3duCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUgPSBNZW51KFJhZGlvYnV0dG9uX2J1dHRvbikKLQotICAgICMgYW5kIGFsbCB0aGUgUmFkaW8gYnV0dG9ucy4gTm90ZSB0aGF0IHRoZSAidmFyaWFibGUiICJvbnZhbHVlIiBhbmQgIm9mZnZhbHVlIiBvcHRpb25zCi0gICAgIyBhcmUgbm90IHN1cHBvcnRlZCBjb3JyZWN0bHkgYXQgcHJlc2VudC4gWW91IGhhdmUgdG8gZG8gYWxsIHlvdXIgYXBwbGljYXRpb24KLSAgICAjIHdvcmsgdGhyb3VnaCB0aGUgY2FsYmFjay4KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGRfcmFkaW9idXR0b24obGFiZWw9J1JlcHVibGljYW4nKQotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5tZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nRGVtb2NyYXQnKQotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5tZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nTGliZXJ0YXJpYW4nKQotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5tZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nQ29tbWllJykKLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGRfcmFkaW9idXR0b24obGFiZWw9J0ZhY2lzdCcpCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPSdMYWJvciBQYXJ0eScpCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPSdUb3JpZScpCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPSdJbmRlcGVuZGVudCcpCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPSdBbmFyY2hpc3QnKQotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5tZW51LmFkZF9yYWRpb2J1dHRvbihsYWJlbD0nTm8gT3BpbmlvbicpCi0KLSAgICAjIHNldCB1cCBhIHBvaW50ZXIgZnJvbSB0aGUgZmlsZSBtZW51YnV0dG9uIGJhY2sgdG8gdGhlIGZpbGUgbWVudQotICAgIFJhZGlvYnV0dG9uX2J1dHRvblsnbWVudSddID0gUmFkaW9idXR0b25fYnV0dG9uLm1lbnUKLQotICAgIHJldHVybiBSYWRpb2J1dHRvbl9idXR0b24KLQotCi1kZWYgbWFrZURpc2FibGVkTWVudSgpOgotICAgIER1bW15X2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nRGVhZCBNZW51JywgdW5kZXJsaW5lPTApCi0gICAgRHVtbXlfYnV0dG9uLnBhY2soc2lkZT1MRUZULCBwYWR4PScybScpCi0KLSAgICAjIHRoaXMgaXMgdGhlIHN0YW5kYXJkIHdheSBvZiB0dXJuaW5nIG9mZiBhIHdob2xlIG1lbnUKLSAgICBEdW1teV9idXR0b25bInN0YXRlIl0gPSBESVNBQkxFRAotICAgIHJldHVybiBEdW1teV9idXR0b24KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMjIE1haW4gc3RhcnRzIGhlcmUgLi4uCi1yb290ID0gVGsoKQotCi0KLSMgbWFrZSBhIG1lbnUgYmFyCi1tQmFyID0gRnJhbWUocm9vdCwgcmVsaWVmPVJBSVNFRCwgYm9yZGVyd2lkdGg9MikKLW1CYXIucGFjayhmaWxsPVgpCi0KLUNvbW1hbmRfYnV0dG9uICAgICA9IG1ha2VDb21tYW5kTWVudSgpCi1DYXNjYWRlX2J1dHRvbiAgICAgPSBtYWtlQ2FzY2FkZU1lbnUoKQotQ2hlY2tidXR0b25fYnV0dG9uID0gbWFrZUNoZWNrYnV0dG9uTWVudSgpCi1SYWRpb2J1dHRvbl9idXR0b24gPSBtYWtlUmFkaW9idXR0b25NZW51KCkKLU5vTWVudSAgICAgICAgICAgICA9IG1ha2VEaXNhYmxlZE1lbnUoKQotCi0jIGZpbmFsbHksIGluc3RhbGwgdGhlIGJ1dHRvbnMgaW4gdGhlIG1lbnUgYmFyLgotIyBUaGlzIGFsbG93cyBmb3Igc2Nhbm5pbmcgZnJvbSBvbmUgbWVudWJ1dHRvbiB0byB0aGUgbmV4dC4KLW1CYXIudGtfbWVudUJhcihDb21tYW5kX2J1dHRvbiwgQ2FzY2FkZV9idXR0b24sIENoZWNrYnV0dG9uX2J1dHRvbiwgUmFkaW9idXR0b25fYnV0dG9uLCBOb01lbnUpCi0KLQotcm9vdC50aXRsZSgnbWVudSBkZW1vJykKLXJvb3QuaWNvbm5hbWUoJ21lbnUgZGVtbycpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvbWVudS1zaW1wbGUucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9tZW51LXNpbXBsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzMzAzZi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9tZW51LXNpbXBsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBzb21lIHZvY2FidWxhcnkgdG8ga2VlcCBmcm9tIGdldHRpbmcgY29uZnVzZWQuIFRoaXMgdGVybWlub2xvZ3kKLSMgaXMgc29tZXRoaW5nIEkgY29va2VkIHVwIGZvciB0aGlzIGZpbGUsIGJ1dCBmb2xsb3dzIHRoZSBtYW4gcGFnZXMKLSMgcHJldHR5IGNsb3NlbHkKLSMKLSMKLSMKLSMgICAgICAgVGhpcyBpcyBhIE1FTlVCVVRUT04KLSMgICAgICAgVgotIyArLS0tLS0tLS0tLS0tLSsKLSMgfCAgICAgICAgICAgICB8Ci0jCi0jICstLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLSsrLS0tLS0tLS0tLS0tKwotIyB8ICAgICAgICAgICAgfHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHwKLSMgfCAgRmlsZSAgICAgIHx8ICBFZGl0ICAgICAgfHwgT3B0aW9ucyAgICB8ICAgPC0tLS0tLS0tIHRoZSBNRU5VQkFSCi0jIHwgICAgICAgICAgICB8fCAgICAgICAgICAgIHx8ICAgICAgICAgICAgfAotIyArLS0tLS0tLS0tLS0tKystLS0tLS0tLS0tLS0rKy0tLS0tLS0tLS0tLSsKLSMgfCBOZXcuLi4gICAgICAgICB8Ci0jIHwgT3Blbi4uLiAgICAgICAgfAotIyB8IFByaW50ICAgICAgICAgIHwKLSMgfCAgICAgICAgICAgICAgICB8ICA8LS0tLS0tIFRoaXMgaXMgYSBNRU5VLiBUaGUgbGluZXMgb2YgdGV4dCBpbiB0aGUgbWVudSBhcmUKLSMgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBNRU5VIEVOVFJJRVMKLSMgfCAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0tKwotIyB8IE9wZW4gRmlsZXMgPiAgIHwgZmlsZTEgICAgICAgICB8Ci0jIHwgICAgICAgICAgICAgICAgfCBmaWxlMiAgICAgICAgIHwKLSMgfCAgICAgICAgICAgICAgICB8IGFub3RoZXIgZmlsZSAgfCA8LS0tLS0tIHRoaXMgY2FzY2FkaW5nIHBhcnQgaXMgYWxzbyBhIE1FTlUKLSMgKy0tLS0tLS0tLS0tLS0tLS18ICAgICAgICAgICAgICAgfAotIyAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8Ci0jICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKLSMgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAotIyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0rCi0KLQotCi1kZWYgbmV3X2ZpbGUoKToKLSAgICBwcmludCgib3BlbmluZyBuZXcgZmlsZSIpCi0KLQotZGVmIG9wZW5fZmlsZSgpOgotICAgIHByaW50KCJvcGVuaW5nIE9MRCBmaWxlIikKLQotCi1kZWYgbWFrZUZpbGVNZW51KCk6Ci0gICAgIyBtYWtlIG1lbnUgYnV0dG9uIDogIkZpbGUiCi0gICAgRmlsZV9idXR0b24gPSBNZW51YnV0dG9uKG1CYXIsIHRleHQ9J0ZpbGUnLCB1bmRlcmxpbmU9MCkKLSAgICBGaWxlX2J1dHRvbi5wYWNrKHNpZGU9TEVGVCwgcGFkeD0iMW0iKQotICAgIEZpbGVfYnV0dG9uLm1lbnUgPSBNZW51KEZpbGVfYnV0dG9uKQotCi0gICAgIyBhZGQgYW4gaXRlbS4gVGhlIGZpcnN0IHBhcmFtIGlzIGEgbWVudSBlbnRyeSB0eXBlLAotICAgICMgbXVzdCBiZSBvbmUgb2Y6ICJjYXNjYWRlIiwgImNoZWNrYnV0dG9uIiwgImNvbW1hbmQiLCAicmFkaW9idXR0b24iLCAic2VwYXJhdG9yIgotICAgICMgc2VlIG1lbnUtZGVtby0yLnB5IGZvciBleGFtcGxlcyBvZiB1c2UKLSAgICBGaWxlX2J1dHRvbi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSdOZXcuLi4nLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9bmV3X2ZpbGUpCi0KLQotICAgIEZpbGVfYnV0dG9uLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J09wZW4uLi4nLCB1bmRlcmxpbmU9MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9b3Blbl9maWxlKQotCi0gICAgRmlsZV9idXR0b24ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nUXVpdCcsIHVuZGVybGluZT0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD0nZXhpdCcpCi0KLSAgICAjIHNldCB1cCBhIHBvaW50ZXIgZnJvbSB0aGUgZmlsZSBtZW51YnV0dG9uIGJhY2sgdG8gdGhlIGZpbGUgbWVudQotICAgIEZpbGVfYnV0dG9uWydtZW51J10gPSBGaWxlX2J1dHRvbi5tZW51Ci0KLSAgICByZXR1cm4gRmlsZV9idXR0b24KLQotCi0KLWRlZiBtYWtlRWRpdE1lbnUoKToKLSAgICBFZGl0X2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nRWRpdCcsIHVuZGVybGluZT0wKQotICAgIEVkaXRfYnV0dG9uLnBhY2soc2lkZT1MRUZULCBwYWR4PSIxbSIpCi0gICAgRWRpdF9idXR0b24ubWVudSA9IE1lbnUoRWRpdF9idXR0b24pCi0KLSAgICAjIGp1c3QgdG8gYmUgY3V0ZSwgbGV0J3MgZGlzYWJsZSB0aGUgdW5kbyBvcHRpb246Ci0gICAgRWRpdF9idXR0b24ubWVudS5hZGQoJ2NvbW1hbmQnLCBsYWJlbD0iVW5kbyIpCi0gICAgIyBTaW5jZSB0aGUgdGVhci1vZmYgYmFyIGlzIHRoZSAwdGggZW50cnksCi0gICAgIyB1bmRvIGlzIHRoZSAxc3QgZW50cnkuLi4KLSAgICBFZGl0X2J1dHRvbi5tZW51LmVudHJ5Y29uZmlnKDEsIHN0YXRlPURJU0FCTEVEKQotCi0gICAgIyBhbmQgdGhlc2UgYXJlIGp1c3QgZm9yIHNob3cuIE5vICJjb21tYW5kIiBjYWxsYmFja3MgYXR0YWNoZWQuCi0gICAgRWRpdF9idXR0b24ubWVudS5hZGRfY29tbWFuZChsYWJlbD0iQ3V0IikKLSAgICBFZGl0X2J1dHRvbi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSJDb3B5IikKLSAgICBFZGl0X2J1dHRvbi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSJQYXN0ZSIpCi0KLSAgICAjIHNldCB1cCBhIHBvaW50ZXIgZnJvbSB0aGUgZmlsZSBtZW51YnV0dG9uIGJhY2sgdG8gdGhlIGZpbGUgbWVudQotICAgIEVkaXRfYnV0dG9uWydtZW51J10gPSBFZGl0X2J1dHRvbi5tZW51Ci0KLSAgICByZXR1cm4gRWRpdF9idXR0b24KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMjIyMgTWFpbiBzdGFydHMgaGVyZSAuLi4KLXJvb3QgPSBUaygpCi0KLQotIyBtYWtlIGEgbWVudSBiYXIKLW1CYXIgPSBGcmFtZShyb290LCByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0yKQotbUJhci5wYWNrKGZpbGw9WCkKLQotRmlsZV9idXR0b24gPSBtYWtlRmlsZU1lbnUoKQotRWRpdF9idXR0b24gPSBtYWtlRWRpdE1lbnUoKQotCi0jIGZpbmFsbHksIGluc3RhbGwgdGhlIGJ1dHRvbnMgaW4gdGhlIG1lbnUgYmFyLgotIyBUaGlzIGFsbG93cyBmb3Igc2Nhbm5pbmcgZnJvbSBvbmUgbWVudWJ1dHRvbiB0byB0aGUgbmV4dC4KLW1CYXIudGtfbWVudUJhcihGaWxlX2J1dHRvbiwgRWRpdF9idXR0b24pCi0KLXJvb3QudGl0bGUoJ21lbnUgZGVtbycpCi1yb290Lmljb25uYW1lKCdwYWNrZXInKQotCi1yb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L25vdC13aGF0LXlvdS1taWdodC10aGluay0xLnB5IGIvRGVtby90a2ludGVyL21hdHQvbm90LXdoYXQteW91LW1pZ2h0LXRoaW5rLTEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1YzY1YzguLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvbm90LXdoYXQteW91LW1pZ2h0LXRoaW5rLTEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLQotICAgICAgICBzZWxmLkdwYW5lbCA9IEZyYW1lKHNlbGYsIHdpZHRoPScxaScsIGhlaWdodD0nMWknLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ9J2dyZWVuJykKLSAgICAgICAgc2VsZi5HcGFuZWwucGFjayhzaWRlPUxFRlQpCi0KLSAgICAgICAgIyBhIFFVSVQgYnV0dG9uCi0gICAgICAgIHNlbGYuR3BhbmVsLlFVSVQgPSBCdXR0b24oc2VsZi5HcGFuZWwsIHRleHQ9J1FVSVQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuR3BhbmVsLlFVSVQucGFjayhzaWRlPUxFRlQpCi0KLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1hc3Rlci50aXRsZSgncGFja2VyIGRlbW8nKQotdGVzdC5tYXN0ZXIuaWNvbm5hbWUoJ3BhY2tlcicpCi0KLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvbm90LXdoYXQteW91LW1pZ2h0LXRoaW5rLTIucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9ub3Qtd2hhdC15b3UtbWlnaHQtdGhpbmstMi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUxMjA2My4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9ub3Qtd2hhdC15b3UtbWlnaHQtdGhpbmstMi5weQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotCi0gICAgICAgIHNlbGYuR3BhbmVsID0gRnJhbWUoc2VsZiwgd2lkdGg9JzFpJywgaGVpZ2h0PScxaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0nZ3JlZW4nKQotCi0gICAgICAgICMgdGhpcyBsaW5lIHR1cm5zIG9mZiB0aGUgcmVjYWxjdWxhdGlvbiBvZiBnZW9tZXRyeSBieSBtYXN0ZXJzLgotICAgICAgICBzZWxmLkdwYW5lbC5wcm9wYWdhdGUoMCkKLQotICAgICAgICBzZWxmLkdwYW5lbC5wYWNrKHNpZGU9TEVGVCkKLQotICAgICAgICAjIGEgUVVJVCBidXR0b24KLSAgICAgICAgc2VsZi5HcGFuZWwuUVVJVCA9IEJ1dHRvbihzZWxmLkdwYW5lbCwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuR3BhbmVsLlFVSVQucGFjayhzaWRlPUxFRlQpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLQotdGVzdC5tYXN0ZXIudGl0bGUoJ3BhY2tlciBkZW1vJykKLXRlc3QubWFzdGVyLmljb25uYW1lKCdwYWNrZXInKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L3BhY2tlci1hbmQtcGxhY2VyLXRvZ2V0aGVyLnB5IGIvRGVtby90a2ludGVyL21hdHQvcGFja2VyLWFuZC1wbGFjZXItdG9nZXRoZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZjZjNDUuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvcGFja2VyLWFuZC1wbGFjZXItdG9nZXRoZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBUaGlzIGlzIGEgcHJvZ3JhbSB0aGF0IHRlc3RzIHRoZSBwbGFjZXIgZ2VvbSBtYW5hZ2VyIGluIGNvbmp1bmN0aW9uIHdpdGgKLSMgdGhlIHBhY2tlci4gVGhlIGJhY2tncm91bmQgKGdyZWVuKSBpcyBwYWNrZWQsIHdoaWxlIHRoZSB3aWRnZXQgaW5zaWRlIGlzIHBsYWNlZAotCi0KLWRlZiBkb19tb3Rpb24oZXZlbnQpOgotICAgIGFwcC5idXR0b24ucGxhY2UoeD1ldmVudC54LCB5PWV2ZW50LnkpCi0KLWRlZiBkb3RoaXMoKToKLSAgICBwcmludCgnY2FsbGluZyBtZSEnKQotCi1kZWYgY3JlYXRlV2lkZ2V0cyh0b3ApOgotICAgICMgbWFrZSBhIGZyYW1lLiBOb3RlIHRoYXQgdGhlIHdpZGdldCBpcyAyMDAgeCAyMDAKLSAgICAjIGFuZCB0aGUgd2luZG93IGNvbnRhaW5pbmcgaXMgNDAweDQwMC4gV2UgZG8gdGhpcwotICAgICMgc2ltcGx5IHRvIHNob3cgdGhhdCB0aGlzIGlzIHBvc3NpYmxlLiBUaGUgcmVzdCBvZiB0aGUKLSAgICAjIGFyZWEgaXMgaW5hY2Nlc3NzaWJsZS4KLSAgICBmID0gRnJhbWUodG9wLCB3aWR0aD0yMDAsIGhlaWdodD0yMDAsIGJhY2tncm91bmQ9J2dyZWVuJykKLQotICAgICMgbm90ZSB0aGF0IHdlIHVzZSBhIGRpZmZlcmVudCBtYW5hZ2VyIGhlcmUuCi0gICAgIyBUaGlzIHdheSwgdGhlIHRvcCBsZXZlbCBmcmFtZSB3aWRnZXQgcmVzaXplcyB3aGVuIHRoZQotICAgICMgYXBwbGljYXRpb24gd2luZG93IGRvZXMuCi0gICAgZi5wYWNrKGZpbGw9Qk9USCwgZXhwYW5kPTEpCi0KLSAgICAjIG5vdyBtYWtlIGEgYnV0dG9uCi0gICAgZi5idXR0b24gPSBCdXR0b24oZiwgZm9yZWdyb3VuZD0ncmVkJywgdGV4dD0nYW1hemluZycsIGNvbW1hbmQ9ZG90aGlzKQotCi0gICAgIyBhbmQgcGxhY2UgaXQgc28gdGhhdCB0aGUgbncgY29ybmVyIGlzCi0gICAgIyAxLzIgd2F5IGFsb25nIHRoZSB0b3AgWCBlZGdlIG9mIGl0cycgcGFyZW50Ci0gICAgZi5idXR0b24ucGxhY2UocmVseD0wLjUsIHJlbHk9MC4wLCBhbmNob3I9TlcpCi0KLSAgICAjIGFsbG93IHRoZSB1c2VyIHRvIG1vdmUgdGhlIGJ1dHRvbiBTVUlULXN0eWxlLgotICAgIGYuYmluZCgnPENvbnRyb2wtU2hpZnQtTW90aW9uPicsIGRvX21vdGlvbikKLQotICAgIHJldHVybiBmCi0KLXJvb3QgPSBUaygpCi1hcHAgPSBjcmVhdGVXaWRnZXRzKHJvb3QpCi1yb290Lmdlb21ldHJ5KCI0MDB4NDAwIikKLXJvb3QubWF4c2l6ZSgxMDAwLCAxMDAwKQotcm9vdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC9wYWNrZXItc2ltcGxlLnB5IGIvRGVtby90a2ludGVyL21hdHQvcGFja2VyLXNpbXBsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmNjFkNS4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9wYWNrZXItc2ltcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIHByaW50aXQoc2VsZik6Ci0gICAgICAgIHByaW50KHNlbGYuaGlfdGhlcmVbImNvbW1hbmQiXSkKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmhpX3RoZXJlID0gQnV0dG9uKHNlbGYsIHRleHQ9J0hlbGxvJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucHJpbnRpdCkKLSAgICAgICAgc2VsZi5oaV90aGVyZS5wYWNrKHNpZGU9TEVGVCkKLQotICAgICAgICAjIG5vdGUgaG93IFBhY2tlciBkZWZhdWx0cyB0byBzaWRlPVRPUAotCi0gICAgICAgIHNlbGYuZ3V5MiA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdidXR0b24gMicpCi0gICAgICAgIHNlbGYuZ3V5Mi5wYWNrKCkKLQotICAgICAgICBzZWxmLmd1eTMgPSBCdXR0b24oc2VsZiwgdGV4dD0nYnV0dG9uIDMnKQotICAgICAgICBzZWxmLmd1eTMucGFjaygpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvcGxhY2VyLXNpbXBsZS5weSBiL0RlbW8vdGtpbnRlci9tYXR0L3BsYWNlci1zaW1wbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiZTBkZTkuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvcGxhY2VyLXNpbXBsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIFRoaXMgaXMgYSBwcm9ncmFtIHRoYXQgdGVzdHMgdGhlIHBsYWNlciBnZW9tIG1hbmFnZXIKLQotZGVmIGRvX21vdGlvbihldmVudCk6Ci0gICAgYXBwLmJ1dHRvbi5wbGFjZSh4PWV2ZW50LngsIHk9ZXZlbnQueSkKLQotZGVmIGRvdGhpcygpOgotICAgIHByaW50KCdjYWxsaW5nIG1lIScpCi0KLWRlZiBjcmVhdGVXaWRnZXRzKHRvcCk6Ci0gICAgIyBtYWtlIGEgZnJhbWUuIE5vdGUgdGhhdCB0aGUgd2lkZ2V0IGlzIDIwMCB4IDIwMAotICAgICMgYW5kIHRoZSB3aW5kb3cgY29udGFpbmluZyBpcyA0MDB4NDAwLiBXZSBkbyB0aGlzCi0gICAgIyBzaW1wbHkgdG8gc2hvdyB0aGF0IHRoaXMgaXMgcG9zc2libGUuIFRoZSByZXN0IG9mIHRoZQotICAgICMgYXJlYSBpcyBpbmFjY2Vzc3NpYmxlLgotICAgIGYgPSBGcmFtZSh0b3AsIHdpZHRoPTIwMCwgaGVpZ2h0PTIwMCwgYmFja2dyb3VuZD0nZ3JlZW4nKQotCi0gICAgIyBwbGFjZSBpdCBzbyB0aGUgdXBwZXIgbGVmdCBoYW5kIGNvcm5lciBvZgotICAgICMgdGhlIGZyYW1lIGlzIGluIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZgotICAgICMgdGhlIHBhcmVudAotICAgIGYucGxhY2UocmVseD0wLjAsIHJlbHk9MC4wKQotCi0gICAgIyBub3cgbWFrZSBhIGJ1dHRvbgotICAgIGYuYnV0dG9uID0gQnV0dG9uKGYsIGZvcmVncm91bmQ9J3JlZCcsIHRleHQ9J2FtYXppbmcnLCBjb21tYW5kPWRvdGhpcykKLQotICAgICMgYW5kIHBsYWNlIGl0IHNvIHRoYXQgdGhlIG53IGNvcm5lciBpcwotICAgICMgMS8yIHdheSBhbG9uZyB0aGUgdG9wIFggZWRnZSBvZiBpdHMnIHBhcmVudAotICAgIGYuYnV0dG9uLnBsYWNlKHJlbHg9MC41LCByZWx5PTAuMCwgYW5jaG9yPU5XKQotCi0gICAgIyBhbGxvdyB0aGUgdXNlciB0byBtb3ZlIHRoZSBidXR0b24gU1VJVC1zdHlsZS4KLSAgICBmLmJpbmQoJzxDb250cm9sLVNoaWZ0LU1vdGlvbj4nLCBkb19tb3Rpb24pCi0KLSAgICByZXR1cm4gZgotCi1yb290ID0gVGsoKQotYXBwID0gY3JlYXRlV2lkZ2V0cyhyb290KQotcm9vdC5nZW9tZXRyeSgiNDAweDQwMCIpCi1yb290Lm1heHNpemUoMTAwMCwgMTAwMCkKLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvcG9uZy1kZW1vLTEucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9wb25nLWRlbW8tMS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJhNWRjMC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9wb25nLWRlbW8tMS5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0KLWNsYXNzIFBvbmcoRnJhbWUpOgotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5RVUlULnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgpCi0KLSAgICAgICAgIyMgVGhlIHBsYXlpbmcgZmllbGQKLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiKQotCi0gICAgICAgICMjIFRoZSBzcGVlZCBjb250cm9sIGZvciB0aGUgYmFsbAotICAgICAgICBzZWxmLnNwZWVkID0gU2NhbGUoc2VsZiwgb3JpZW50PUhPUklaT05UQUwsIGxhYmVsPSJiYWxsIHNwZWVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fPS0xMDAsIHRvPTEwMCkKLQotICAgICAgICBzZWxmLnNwZWVkLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKLQotICAgICAgICAjIFRoZSBiYWxsCi0gICAgICAgIHNlbGYuYmFsbCA9IHNlbGYuZHJhdy5jcmVhdGVfb3ZhbCgiMGkiLCAiMGkiLCAiMC4xMGkiLCAiMC4xMGkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD0icmVkIikKLSAgICAgICAgc2VsZi54ID0gMC4wNQotICAgICAgICBzZWxmLnkgPSAwLjA1Ci0gICAgICAgIHNlbGYudmVsb2NpdHlfeCA9IDAuMwotICAgICAgICBzZWxmLnZlbG9jaXR5X3kgPSAwLjUKLQotICAgICAgICBzZWxmLmRyYXcucGFjayhzaWRlPUxFRlQpCi0KLSAgICBkZWYgbW92ZUJhbGwoc2VsZiwgKmFyZ3MpOgotICAgICAgICBpZiAoc2VsZi54ID4gNS4wKSBvciAoc2VsZi54IDwgMC4wKToKLSAgICAgICAgICAgIHNlbGYudmVsb2NpdHlfeCA9IC0xLjAgKiBzZWxmLnZlbG9jaXR5X3gKLSAgICAgICAgaWYgKHNlbGYueSA+IDUuMCkgb3IgKHNlbGYueSA8IDAuMCk6Ci0gICAgICAgICAgICBzZWxmLnZlbG9jaXR5X3kgPSAtMS4wICogc2VsZi52ZWxvY2l0eV95Ci0KLSAgICAgICAgZGVsdGF4ID0gKHNlbGYudmVsb2NpdHlfeCAqIHNlbGYuc3BlZWQuZ2V0KCkgLyAxMDAuMCkKLSAgICAgICAgZGVsdGF5ID0gKHNlbGYudmVsb2NpdHlfeSAqIHNlbGYuc3BlZWQuZ2V0KCkgLyAxMDAuMCkKLSAgICAgICAgc2VsZi54ID0gc2VsZi54ICsgZGVsdGF4Ci0gICAgICAgIHNlbGYueSA9IHNlbGYueSArIGRlbHRheQotCi0gICAgICAgIHNlbGYuZHJhdy5tb3ZlKHNlbGYuYmFsbCwgICIlcmkiICUgZGVsdGF4LCAiJXJpIiAlIGRlbHRheSkKLSAgICAgICAgc2VsZi5hZnRlcigxMCwgc2VsZi5tb3ZlQmFsbCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLSAgICAgICAgc2VsZi5hZnRlcigxMCwgc2VsZi5tb3ZlQmFsbCkKLQotCi1nYW1lID0gUG9uZygpCi0KLWdhbWUubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvcHJpbnRpbmctY29vcmRzLW9mLWl0ZW1zLnB5IGIvRGVtby90a2ludGVyL21hdHQvcHJpbnRpbmctY29vcmRzLW9mLWl0ZW1zLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzFhNjBkLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L3ByaW50aW5nLWNvb3Jkcy1vZi1pdGVtcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIHRoaXMgZmlsZSBkZW1vbnN0cmF0ZXMgdGhlIGNyZWF0aW9uIG9mIHdpZGdldHMgYXMgcGFydCBvZiBhIGNhbnZhcyBvYmplY3QKLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyMjIyBFdmVudCBjYWxsYmFja3MgZm9yIFRIRSBDQU5WQVMgKG5vdCB0aGUgc3R1ZmYgZHJhd24gb24gaXQpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgIGRlZiBtb3VzZURvd24oc2VsZiwgZXZlbnQpOgotICAgICAgICAjIHNlZSBpZiB3ZSdyZSBpbnNpZGUgYSBkb3QuIElmIHdlIGFyZSwgaXQKLSAgICAgICAgIyBnZXRzIHRhZ2dlZCBhcyBDVVJSRU5UIGZvciBmcmVlIGJ5IHRrLgotCi0gICAgICAgIGlmIG5vdCBldmVudC53aWRnZXQuZmluZF93aXRodGFnKENVUlJFTlQpOgotICAgICAgICAgICAgIyB0aGVyZSBpcyBubyBkb3QgaGVyZSwgc28gd2UgY2FuIG1ha2Ugb25lLAotICAgICAgICAgICAgIyBhbmQgYmluZCBzb21lIGludGVyZXN0aW5nIGJlaGF2aW9yIHRvIGl0LgotICAgICAgICAgICAgIyAtLS0tLS0KLSAgICAgICAgICAgICMgY3JlYXRlIGEgZG90LCBhbmQgbWFyayBpdCBhcyBjdXJyZW50Ci0gICAgICAgICAgICBmcmVkID0gc2VsZi5kcmF3LmNyZWF0ZV9vdmFsKAotICAgICAgICAgICAgICAgIGV2ZW50LnggLSAxMCwgZXZlbnQueSAtMTAsIGV2ZW50LnggKzEwLCBldmVudC55ICsgMTAsCi0gICAgICAgICAgICAgICAgZmlsbD0iZ3JlZW4iKQotICAgICAgICAgICAgc2VsZi5kcmF3LnRhZ19iaW5kKGZyZWQsICI8RW50ZXI+Iiwgc2VsZi5tb3VzZUVudGVyKQotICAgICAgICAgICAgc2VsZi5kcmF3LnRhZ19iaW5kKGZyZWQsICI8TGVhdmU+Iiwgc2VsZi5tb3VzZUxlYXZlKQotICAgICAgICBzZWxmLmxhc3R4ID0gZXZlbnQueAotICAgICAgICBzZWxmLmxhc3R5ID0gZXZlbnQueQotCi0gICAgZGVmIG1vdXNlTW92ZShzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuZHJhdy5tb3ZlKENVUlJFTlQsIGV2ZW50LnggLSBzZWxmLmxhc3R4LCBldmVudC55IC0gc2VsZi5sYXN0eSkKLSAgICAgICAgc2VsZi5sYXN0eCA9IGV2ZW50LngKLSAgICAgICAgc2VsZi5sYXN0eSA9IGV2ZW50LnkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMjIyMgRXZlbnQgY2FsbGJhY2tzIGZvciBjYW52YXMgSVRFTVMgKHN0dWZmIGRyYXduIG9uIHRoZSBjYW52YXMpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgIGRlZiBtb3VzZUVudGVyKHNlbGYsIGV2ZW50KToKLSAgICAgICAgIyB0aGUgImN1cnJlbnQiIHRhZyBpcyBhcHBsaWVkIHRvIHRoZSBvYmplY3QgdGhlIGN1cnNvciBpcyBvdmVyLgotICAgICAgICAjIHRoaXMgaGFwcGVucyBhdXRvbWF0aWNhbGx5LgotICAgICAgICBzZWxmLmRyYXcuaXRlbWNvbmZpZyhDVVJSRU5ULCBmaWxsPSJyZWQiKQotICAgICAgICBwcmludChsaXN0KHNlbGYuZHJhdy5jb29yZHMoQ1VSUkVOVCkpKQotCi0gICAgZGVmIG1vdXNlTGVhdmUoc2VsZiwgZXZlbnQpOgotICAgICAgICAjIHRoZSAiY3VycmVudCIgdGFnIGlzIGFwcGxpZWQgdG8gdGhlIG9iamVjdCB0aGUgY3Vyc29yIGlzIG92ZXIuCi0gICAgICAgICMgdGhpcyBoYXBwZW5zIGF1dG9tYXRpY2FsbHkuCi0gICAgICAgIHNlbGYuZHJhdy5pdGVtY29uZmlnKENVUlJFTlQsIGZpbGw9ImJsdWUiKQotCi0gICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6Ci0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5kcmF3ID0gQ2FudmFzKHNlbGYsIHdpZHRoPSI1aSIsIGhlaWdodD0iNWkiKQotICAgICAgICBzZWxmLmRyYXcucGFjayhzaWRlPUxFRlQpCi0KLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5kcmF3LCAiPDE+Iiwgc2VsZi5tb3VzZURvd24pCi0gICAgICAgIFdpZGdldC5iaW5kKHNlbGYuZHJhdywgIjxCMS1Nb3Rpb24+Iiwgc2VsZi5tb3VzZU1vdmUpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvcmFkaW9idXR0b24tc2ltcGxlLnB5IGIvRGVtby90a2ludGVyL21hdHQvcmFkaW9idXR0b24tc2ltcGxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjcxOWI4Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L3JhZGlvYnV0dG9uLXNpbXBsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi0jIFRoaXMgaXMgYSBkZW1vIHByb2dyYW0gdGhhdCBzaG93cyBob3cgdG8KLSMgY3JlYXRlIHJhZGlvIGJ1dHRvbnMgYW5kIGhvdyB0byBnZXQgb3RoZXIgd2lkZ2V0cyB0bwotIyBzaGFyZSB0aGUgaW5mb3JtYXRpb24gaW4gYSByYWRpbyBidXR0b24uCi0jCi0jIFRoZXJlIGFyZSBvdGhlciB3YXlzIG9mIGRvaW5nIHRoaXMgdG9vLCBidXQKLSMgdGhlICJ2YXJpYWJsZSIgb3B0aW9uIG9mIHJhZGlvYnV0dG9ucyBzZWVtcyB0byBiZSB0aGUgZWFzaWVzdC4KLSMKLSMgbm90ZSBob3cgZWFjaCBidXR0b24gaGFzIGEgdmFsdWUgaXQgc2V0cyB0aGUgdmFyaWFibGUgdG8gYXMgaXQgZ2V0cyBoaXQuCi0KLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIHByaW50aXQoc2VsZik6Ci0gICAgICAgIHByaW50KCJoaSIpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLQotICAgICAgICBzZWxmLmZsYXZvciA9IFN0cmluZ1ZhcigpCi0gICAgICAgIHNlbGYuZmxhdm9yLnNldCgiY2hvY29sYXRlIikKLQotICAgICAgICBzZWxmLnJhZGlvZnJhbWUgPSBGcmFtZShzZWxmKQotICAgICAgICBzZWxmLnJhZGlvZnJhbWUucGFjaygpCi0KLSAgICAgICAgIyAndGV4dCcgaXMgdGhlIGxhYmVsCi0gICAgICAgICMgJ3ZhcmlhYmxlJyBpcyB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgdGhhdCBhbGwgdGhlc2UgcmFkaW8gYnV0dG9ucyBzaGFyZQotICAgICAgICAjICd2YWx1ZScgaXMgdGhlIHZhbHVlIHRoaXMgdmFyaWFibGUgdGFrZXMgb24gd2hlbiB0aGUgcmFkaW8gYnV0dG9uIGlzIHNlbGVjdGVkCi0gICAgICAgICMgJ2FuY2hvcicgbWFrZXMgdGhlIHRleHQgYXBwZWFyIGxlZnQganVzdGlmaWVkIChkZWZhdWx0IGlzIGNlbnRlcmVkLiBpY2spCi0gICAgICAgIHNlbGYucmFkaW9mcmFtZS5jaG9jID0gUmFkaW9idXR0b24oCi0gICAgICAgICAgICBzZWxmLnJhZGlvZnJhbWUsIHRleHQ9IkNob2NvbGF0ZSBGbGF2b3IiLAotICAgICAgICAgICAgdmFyaWFibGU9c2VsZi5mbGF2b3IsIHZhbHVlPSJjaG9jb2xhdGUiLAotICAgICAgICAgICAgYW5jaG9yPVcpCi0gICAgICAgIHNlbGYucmFkaW9mcmFtZS5jaG9jLnBhY2soZmlsbD1YKQotCi0gICAgICAgIHNlbGYucmFkaW9mcmFtZS5zdHJhdyA9IFJhZGlvYnV0dG9uKAotICAgICAgICAgICAgc2VsZi5yYWRpb2ZyYW1lLCB0ZXh0PSJTdHJhd2JlcnJ5IEZsYXZvciIsCi0gICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmZsYXZvciwgdmFsdWU9InN0cmF3YmVycnkiLAotICAgICAgICAgICAgYW5jaG9yPVcpCi0gICAgICAgIHNlbGYucmFkaW9mcmFtZS5zdHJhdy5wYWNrKGZpbGw9WCkKLQotICAgICAgICBzZWxmLnJhZGlvZnJhbWUubGVtb24gPSBSYWRpb2J1dHRvbigKLSAgICAgICAgICAgIHNlbGYucmFkaW9mcmFtZSwgdGV4dD0iTGVtb24gRmxhdm9yIiwKLSAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZmxhdm9yLCB2YWx1ZT0ibGVtb24iLAotICAgICAgICAgICAgYW5jaG9yPVcpCi0gICAgICAgIHNlbGYucmFkaW9mcmFtZS5sZW1vbi5wYWNrKGZpbGw9WCkKLQotICAgICAgICAjIHRoaXMgaXMgYSB0ZXh0IGVudHJ5IHRoYXQgbGV0cyB5b3UgdHlwZSBpbiB0aGUgbmFtZSBvZiBhIGZsYXZvciB0b28uCi0gICAgICAgIHNlbGYuZW50cnkgPSBFbnRyeShzZWxmLCB0ZXh0dmFyaWFibGU9c2VsZi5mbGF2b3IpCi0gICAgICAgIHNlbGYuZW50cnkucGFjayhmaWxsPVgpCi0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1CT1RIKQotCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLQotdGVzdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC9ydWJiZXItYmFuZC1ib3gtZGVtby0xLnB5IGIvRGVtby90a2ludGVyL21hdHQvcnViYmVyLWJhbmQtYm94LWRlbW8tMS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg1MjZkOC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC9ydWJiZXItYmFuZC1ib3gtZGVtby0xLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBwcmludGl0KHNlbGYpOgotICAgICAgICBwcmludCgiaGkiKQotCi0gICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6Ci0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQ9J3doaXRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9MywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLSAgICAgICAgc2VsZi5RVUlULnBhY2soc2lkZT1CT1RUT00sIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLmNhbnZhc09iamVjdCA9IENhbnZhcyhzZWxmLCB3aWR0aD0iNWkiLCBoZWlnaHQ9IjVpIikKLSAgICAgICAgc2VsZi5jYW52YXNPYmplY3QucGFjayhzaWRlPUxFRlQpCi0KLSAgICBkZWYgbW91c2VEb3duKHNlbGYsIGV2ZW50KToKLSAgICAgICAgIyBjYW52YXMgeCBhbmQgeSB0YWtlIHRoZSBzY3JlZW4gY29vcmRzIGZyb20gdGhlIGV2ZW50IGFuZCB0cmFuc2xhdGUKLSAgICAgICAgIyB0aGVtIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBjYW52YXMgb2JqZWN0Ci0gICAgICAgIHNlbGYuc3RhcnR4ID0gc2VsZi5jYW52YXNPYmplY3QuY2FudmFzeChldmVudC54KQotICAgICAgICBzZWxmLnN0YXJ0eSA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3koZXZlbnQueSkKLQotICAgIGRlZiBtb3VzZU1vdGlvbihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgY2FudmFzIHggYW5kIHkgdGFrZSB0aGUgc2NyZWVuIGNvb3JkcyBmcm9tIHRoZSBldmVudCBhbmQgdHJhbnNsYXRlCi0gICAgICAgICMgdGhlbSBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgY2FudmFzIG9iamVjdAotICAgICAgICB4ID0gc2VsZi5jYW52YXNPYmplY3QuY2FudmFzeChldmVudC54KQotICAgICAgICB5ID0gc2VsZi5jYW52YXNPYmplY3QuY2FudmFzeShldmVudC55KQotCi0gICAgICAgIGlmIChzZWxmLnN0YXJ0eCAhPSBldmVudC54KSAgYW5kIChzZWxmLnN0YXJ0eSAhPSBldmVudC55KSA6Ci0gICAgICAgICAgICBzZWxmLmNhbnZhc09iamVjdC5kZWxldGUoc2VsZi5ydWJiZXJiYW5kQm94KQotICAgICAgICAgICAgc2VsZi5ydWJiZXJiYW5kQm94ID0gc2VsZi5jYW52YXNPYmplY3QuY3JlYXRlX3JlY3RhbmdsZSgKLSAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0eCwgc2VsZi5zdGFydHksIHgsIHkpCi0gICAgICAgICAgICAjIHRoaXMgZmx1c2hlcyB0aGUgb3V0cHV0LCBtYWtpbmcgc3VyZSB0aGF0Ci0gICAgICAgICAgICAjIHRoZSByZWN0YW5nbGUgbWFrZXMgaXQgdG8gdGhlIHNjcmVlbgotICAgICAgICAgICAgIyBiZWZvcmUgdGhlIG5leHQgZXZlbnQgaXMgaGFuZGxlZAotICAgICAgICAgICAgc2VsZi51cGRhdGVfaWRsZXRhc2tzKCkKLQotICAgIGRlZiBtb3VzZVVwKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5jYW52YXNPYmplY3QuZGVsZXRlKHNlbGYucnViYmVyYmFuZEJveCkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSk6Ci0gICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlcikKLSAgICAgICAgUGFjay5jb25maWcoc2VsZikKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotICAgICAgICAjIHRoaXMgaXMgYSAidGFnT3JJZCIgZm9yIHRoZSByZWN0YW5nbGUgd2UgZHJhdyBvbiB0aGUgY2FudmFzCi0gICAgICAgIHNlbGYucnViYmVyYmFuZEJveCA9IE5vbmUKLQotICAgICAgICAjIGFuZCB0aGUgYmluZGluZ3MgdGhhdCBtYWtlIGl0IHdvcmsuLgotICAgICAgICBXaWRnZXQuYmluZChzZWxmLmNhbnZhc09iamVjdCwgIjxCdXR0b24tMT4iLCBzZWxmLm1vdXNlRG93bikKLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5jYW52YXNPYmplY3QsICI8QnV0dG9uMS1Nb3Rpb24+Iiwgc2VsZi5tb3VzZU1vdGlvbikKLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5jYW52YXNPYmplY3QsICI8QnV0dG9uMS1CdXR0b25SZWxlYXNlPiIsIHNlbGYubW91c2VVcCkKLQotCi10ZXN0ID0gVGVzdCgpCi0KLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvcnViYmVyLWxpbmUtZGVtby0xLnB5IGIvRGVtby90a2ludGVyL21hdHQvcnViYmVyLWxpbmUtZGVtby0xLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmM0ODgyLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L3J1YmJlci1saW5lLWRlbW8tMS5weQorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgotCi1jbGFzcyBUZXN0KEZyYW1lKToKLSAgICBkZWYgcHJpbnRpdChzZWxmKToKLSAgICAgICAgcHJpbnQoImhpIikKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kPSd3aGl0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPUJPVEgpCi0KLSAgICAgICAgc2VsZi5jYW52YXNPYmplY3QgPSBDYW52YXMoc2VsZiwgd2lkdGg9IjVpIiwgaGVpZ2h0PSI1aSIpCi0gICAgICAgIHNlbGYuY2FudmFzT2JqZWN0LnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIG1vdXNlRG93bihzZWxmLCBldmVudCk6Ci0gICAgICAgICMgY2FudmFzIHggYW5kIHkgdGFrZSB0aGUgc2NyZWVuIGNvb3JkcyBmcm9tIHRoZSBldmVudCBhbmQgdHJhbnNsYXRlCi0gICAgICAgICMgdGhlbSBpbnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgY2FudmFzIG9iamVjdAotICAgICAgICBzZWxmLnN0YXJ0eCA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3goZXZlbnQueCkKLSAgICAgICAgc2VsZi5zdGFydHkgPSBzZWxmLmNhbnZhc09iamVjdC5jYW52YXN5KGV2ZW50LnkpCi0KLSAgICBkZWYgbW91c2VNb3Rpb24oc2VsZiwgZXZlbnQpOgotICAgICAgICAjIGNhbnZhcyB4IGFuZCB5IHRha2UgdGhlIHNjcmVlbiBjb29yZHMgZnJvbSB0aGUgZXZlbnQgYW5kIHRyYW5zbGF0ZQotICAgICAgICAjIHRoZW0gaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGNhbnZhcyBvYmplY3QKLSAgICAgICAgeCA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3goZXZlbnQueCkKLSAgICAgICAgeSA9IHNlbGYuY2FudmFzT2JqZWN0LmNhbnZhc3koZXZlbnQueSkKLQotICAgICAgICBpZiAoc2VsZi5zdGFydHggIT0gZXZlbnQueCkgIGFuZCAoc2VsZi5zdGFydHkgIT0gZXZlbnQueSkgOgotICAgICAgICAgICAgc2VsZi5jYW52YXNPYmplY3QuZGVsZXRlKHNlbGYucnViYmVyYmFuZExpbmUpCi0gICAgICAgICAgICBzZWxmLnJ1YmJlcmJhbmRMaW5lID0gc2VsZi5jYW52YXNPYmplY3QuY3JlYXRlX2xpbmUoCi0gICAgICAgICAgICAgICAgc2VsZi5zdGFydHgsIHNlbGYuc3RhcnR5LCB4LCB5KQotICAgICAgICAgICAgIyB0aGlzIGZsdXNoZXMgdGhlIG91dHB1dCwgbWFraW5nIHN1cmUgdGhhdAotICAgICAgICAgICAgIyB0aGUgcmVjdGFuZ2xlIG1ha2VzIGl0IHRvIHRoZSBzY3JlZW4KLSAgICAgICAgICAgICMgYmVmb3JlIHRoZSBuZXh0IGV2ZW50IGlzIGhhbmRsZWQKLSAgICAgICAgICAgIHNlbGYudXBkYXRlX2lkbGV0YXNrcygpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0gICAgICAgICMgdGhpcyBpcyBhICJ0YWdPcklkIiBmb3IgdGhlIHJlY3RhbmdsZSB3ZSBkcmF3IG9uIHRoZSBjYW52YXMKLSAgICAgICAgc2VsZi5ydWJiZXJiYW5kTGluZSA9IE5vbmUKLSAgICAgICAgV2lkZ2V0LmJpbmQoc2VsZi5jYW52YXNPYmplY3QsICI8QnV0dG9uLTE+Iiwgc2VsZi5tb3VzZURvd24pCi0gICAgICAgIFdpZGdldC5iaW5kKHNlbGYuY2FudmFzT2JqZWN0LCAiPEJ1dHRvbjEtTW90aW9uPiIsIHNlbGYubW91c2VNb3Rpb24pCi0KLQotdGVzdCA9IFRlc3QoKQotCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L3NsaWRlci1kZW1vLTEucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9zbGlkZXItZGVtby0xLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODdmOGEzLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L3NsaWRlci1kZW1vLTEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBzaG93cyBob3cgdG8gbWFrZSBhIHNsaWRlciwgc2V0IGFuZCBnZXQgaXRzIHZhbHVlIHVuZGVyIHByb2dyYW0gY29udHJvbAotCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBwcmludF92YWx1ZShzZWxmLCB2YWwpOgotICAgICAgICBwcmludCgic2xpZGVyIG5vdyBhdCIsIHZhbCkKLQotICAgIGRlZiByZXNldChzZWxmKToKLSAgICAgICAgc2VsZi5zbGlkZXIuc2V0KDApCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5zbGlkZXIgPSBTY2FsZShzZWxmLCBmcm9tXz0wLCB0bz0xMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PUhPUklaT05UQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoPSIzaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9ImhhcHB5IHNsaWRlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnByaW50X3ZhbHVlKQotCi0gICAgICAgIHNlbGYucmVzZXQgPSBCdXR0b24oc2VsZiwgdGV4dD0ncmVzZXQgc2xpZGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucmVzZXQpCi0KLSAgICAgICAgc2VsZi5RVUlUID0gQnV0dG9uKHNlbGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnF1aXQpCi0KLSAgICAgICAgc2VsZi5zbGlkZXIucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYucmVzZXQucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYuUVVJVC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RIKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L3N1YmNsYXNzLWV4aXN0aW5nLXdpZGdldHMucHkgYi9EZW1vL3RraW50ZXIvbWF0dC9zdWJjbGFzcy1leGlzdGluZy13aWRnZXRzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTk3ZjM1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci9tYXR0L3N1YmNsYXNzLWV4aXN0aW5nLXdpZGdldHMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyBUaGlzIGlzIGEgcHJvZ3JhbSB0aGF0IG1ha2VzIGEgc2ltcGxlIHR3byBidXR0b24gYXBwbGljYXRpb24KLQotCi1jbGFzcyBOZXdfQnV0dG9uKEJ1dHRvbik6Ci0gICAgZGVmIGNhbGxiYWNrKHNlbGYpOgotICAgICAgICBwcmludChzZWxmLmNvdW50ZXIpCi0gICAgICAgIHNlbGYuY291bnRlciA9IHNlbGYuY291bnRlciArIDEKLQotZGVmIGNyZWF0ZVdpZGdldHModG9wKToKLSAgICBmID0gRnJhbWUodG9wKQotICAgIGYucGFjaygpCi0gICAgZi5RVUlUID0gQnV0dG9uKGYsIHRleHQ9J1FVSVQnLCBmb3JlZ3JvdW5kPSdyZWQnLCBjb21tYW5kPXRvcC5xdWl0KQotCi0gICAgZi5RVUlULnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgpCi0KLSAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgZi5oaV90aGVyZSA9IE5ld19CdXR0b24oZiwgdGV4dD0nSGVsbG8nKQotICAgICMgd2UgZG8gdGhpcyBvbiBhIGRpZmZlcmVudCBsaW5lIGJlY2F1c2Ugd2UgbmVlZCB0byByZWZlcmVuY2UgZi5oaV90aGVyZQotICAgIGYuaGlfdGhlcmUuY29uZmlnKGNvbW1hbmQ9Zi5oaV90aGVyZS5jYWxsYmFjaykKLSAgICBmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotICAgIGYuaGlfdGhlcmUuY291bnRlciA9IDQzCi0KLQotcm9vdCA9IFRrKCkKLWNyZWF0ZVdpZGdldHMocm9vdCkKLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL21hdHQvdHdvLXJhZGlvLWdyb3Vwcy5weSBiL0RlbW8vdGtpbnRlci9tYXR0L3R3by1yYWRpby1ncm91cHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4YjYxYjEuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvdHdvLXJhZGlvLWdyb3Vwcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyAgICAgICBUaGUgd2F5IHRvIHRoaW5rIGFib3V0IHRoaXMgaXMgdGhhdCBlYWNoIHJhZGlvIGJ1dHRvbiBtZW51Ci0jICAgICAgIGNvbnRyb2xzIGEgZGlmZmVyZW50IHZhcmlhYmxlIC0tIGNsaWNraW5nIG9uIG9uZSBvZiB0aGUKLSMgICAgICAgbXV0dWFsbHkgZXhjbHVzaXZlIGNob2ljZXMgaW4gYSByYWRpb2J1dHRvbiBhc3NpZ25zIHNvbWUgdmFsdWUKLSMgICAgICAgdG8gYW4gYXBwbGljYXRpb24gdmFyaWFibGUgeW91IHByb3ZpZGUuIFdoZW4geW91IGRlZmluZSBhCi0jICAgICAgIHJhZGlvYnV0dG9uIG1lbnUgY2hvaWNlLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHNwZWNpZnlpbmcgdGhlCi0jICAgICAgIG5hbWUgb2YgYSB2YXJhaWJsZSBhbmQgdmFsdWUgdG8gYXNzaWduIHRvIHRoYXQgdmFyaWFibGUgd2hlbgotIyAgICAgICB0aGF0IGNob2ljZSBpcyBzZWxlY3RlZC4gVGhpcyBjbGV2ZXIgbWVjaGFuaXNtIHJlbGlldmVzIHlvdSwKLSMgICAgICAgdGhlIHByb2dyYW1tZXIsIGZyb20gaGF2aW5nIHRvIHdyaXRlIGEgZHVtYiBjYWxsYmFjayB0aGF0Ci0jICAgICAgIHByb2JhYmx5IHdvdWxkbid0IGhhdmUgZG9uZSBhbnl0aGluZyBtb3JlIHRoYW4gYW4gYXNzaWdubWVudAotIyAgICAgICBhbnl3YXkuIFRoZSBUa2ludGVyIG9wdGlvbnMgZm9yIHRoaXMgZm9sbG93IHRoZWlyIFRrCi0jICAgICAgIGNvdW50ZXJwYXJ0czoKLSMgICAgICAgeyJ2YXJpYWJsZSIgOiBteV9mbGF2b3JfdmFyaWFibGUsICJ2YWx1ZSIgOiAic3RyYXdiZXJyeSJ9Ci0jICAgICAgIHdoZXJlIG15X2ZsYXZvcl92YXJpYWJsZSBpcyBhbiBpbnN0YW5jZSBvZiBvbmUgb2YgdGhlCi0jICAgICAgIHN1YmNsYXNzZXMgb2YgVmFyaWFibGUsIHByb3ZpZGVkIGluIFRraW50ZXIucHkgKHRoZXJlIGlzCi0jICAgICAgIFN0cmluZ1ZhcigpLCBJbnRWYXIoKSwgRG91YmxlVmFyKCkgYW5kIEJvb2xlYW5WYXIoKSB0byBjaG9vc2UKLSMgICAgICAgZnJvbSkKLQotCi0KLWRlZiBtYWtlUG9saXRpY2FsUGFydGllcyh2YXIpOgotICAgICMgbWFrZSBtZW51IGJ1dHRvbgotICAgIFJhZGlvYnV0dG9uX2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nUG9saXRpY2FsIFBhcnR5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVybGluZT0wKQotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5wYWNrKHNpZGU9TEVGVCwgcGFkeD0nMm0nKQotCi0gICAgIyB0aGUgcHJpbWFyeSBwdWxsZG93bgotICAgIFJhZGlvYnV0dG9uX2J1dHRvbi5tZW51ID0gTWVudShSYWRpb2J1dHRvbl9idXR0b24pCi0KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGRfcmFkaW9idXR0b24obGFiZWw9J1JlcHVibGljYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT12YXIsIHZhbHVlPTEpCi0KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGQoJ3JhZGlvYnV0dG9uJywgeydsYWJlbCc6ICdEZW1vY3JhdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmFyaWFibGUnIDogdmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyA6IDJ9KQotCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkKCdyYWRpb2J1dHRvbicsIHsnbGFiZWwnOiAnTGliZXJ0YXJpYW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhcmlhYmxlJyA6IHZhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZScgOiAzfSkKLQotICAgIHZhci5zZXQoMikKLQotICAgICMgc2V0IHVwIGEgcG9pbnRlciBmcm9tIHRoZSBmaWxlIG1lbnVidXR0b24gYmFjayB0byB0aGUgZmlsZSBtZW51Ci0gICAgUmFkaW9idXR0b25fYnV0dG9uWydtZW51J10gPSBSYWRpb2J1dHRvbl9idXR0b24ubWVudQotCi0gICAgcmV0dXJuIFJhZGlvYnV0dG9uX2J1dHRvbgotCi0KLWRlZiBtYWtlRmxhdm9ycyh2YXIpOgotICAgICMgbWFrZSBtZW51IGJ1dHRvbgotICAgIFJhZGlvYnV0dG9uX2J1dHRvbiA9IE1lbnVidXR0b24obUJhciwgdGV4dD0nRmxhdm9ycycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU9MCkKLSAgICBSYWRpb2J1dHRvbl9idXR0b24ucGFjayhzaWRlPUxFRlQsIHBhZHg9JzJtJykKLQotICAgICMgdGhlIHByaW1hcnkgcHVsbGRvd24KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudSA9IE1lbnUoUmFkaW9idXR0b25fYnV0dG9uKQotCi0gICAgUmFkaW9idXR0b25fYnV0dG9uLm1lbnUuYWRkX3JhZGlvYnV0dG9uKGxhYmVsPSdTdHJhd2JlcnJ5JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9dmFyLCB2YWx1ZT0nU3RyYXdiZXJyeScpCi0KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGRfcmFkaW9idXR0b24obGFiZWw9J0Nob2NvbGF0ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXZhciwgdmFsdWU9J0Nob2NvbGF0ZScpCi0KLSAgICBSYWRpb2J1dHRvbl9idXR0b24ubWVudS5hZGRfcmFkaW9idXR0b24obGFiZWw9J1JvY2t5IFJvYWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT12YXIsIHZhbHVlPSdSb2NreSBSb2FkJykKLQotICAgICMgY2hvb3NlIGEgZGVmYXVsdAotICAgIHZhci5zZXQoIkNob2NvbGF0ZSIpCi0KLSAgICAjIHNldCB1cCBhIHBvaW50ZXIgZnJvbSB0aGUgZmlsZSBtZW51YnV0dG9uIGJhY2sgdG8gdGhlIGZpbGUgbWVudQotICAgIFJhZGlvYnV0dG9uX2J1dHRvblsnbWVudSddID0gUmFkaW9idXR0b25fYnV0dG9uLm1lbnUKLQotICAgIHJldHVybiBSYWRpb2J1dHRvbl9idXR0b24KLQotCi1kZWYgcHJpbnRTdHVmZigpOgotICAgIHByaW50KCJwYXJ0eSBpcyIsIHBhcnR5LmdldCgpKQotICAgIHByaW50KCJmbGF2b3IgaXMiLCBmbGF2b3IuZ2V0KCkpCi0gICAgcHJpbnQoKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMjIE1haW4gc3RhcnRzIGhlcmUgLi4uCi1yb290ID0gVGsoKQotCi0KLSMgbWFrZSBhIG1lbnUgYmFyCi1tQmFyID0gRnJhbWUocm9vdCwgcmVsaWVmPVJBSVNFRCwgYm9yZGVyd2lkdGg9MikKLW1CYXIucGFjayhmaWxsPVgpCi0KLSMgbWFrZSB0d28gYXBwbGljYXRpb24gdmFyaWFibGVzLAotIyBvbmUgdG8gY29udHJvbCBlYWNoIHJhZGlvIGJ1dHRvbiBzZXQKLXBhcnR5ID0gSW50VmFyKCkKLWZsYXZvciA9IFN0cmluZ1ZhcigpCi0KLVJhZGlvYnV0dG9uX2J1dHRvbiA9IG1ha2VQb2xpdGljYWxQYXJ0aWVzKHBhcnR5KQotUmFkaW9idXR0b25fYnV0dG9uMiA9IG1ha2VGbGF2b3JzKGZsYXZvcikKLQotIyBmaW5hbGx5LCBpbnN0YWxsIHRoZSBidXR0b25zIGluIHRoZSBtZW51IGJhci4KLSMgVGhpcyBhbGxvd3MgZm9yIHNjYW5uaW5nIGZyb20gb25lIG1lbnVidXR0b24gdG8gdGhlIG5leHQuCi1tQmFyLnRrX21lbnVCYXIoUmFkaW9idXR0b25fYnV0dG9uLCBSYWRpb2J1dHRvbl9idXR0b24yKQotCi1iID0gQnV0dG9uKHJvb3QsIHRleHQ9InByaW50IHBhcnR5IGFuZCBmbGF2b3IiLCBmb3JlZ3JvdW5kPSJyZWQiLAotICAgICAgICAgICBjb21tYW5kPXByaW50U3R1ZmYpCi1iLnBhY2soc2lkZT1UT1ApCi0KLXJvb3QudGl0bGUoJ21lbnUgZGVtbycpCi1yb290Lmljb25uYW1lKCdtZW51IGRlbW8nKQotCi1yb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L3dpbmRvdy1jcmVhdGlvbi1tb3JlLnB5IGIvRGVtby90a2ludGVyL21hdHQvd2luZG93LWNyZWF0aW9uLW1vcmUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYzhiNzAuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvd2luZG93LWNyZWF0aW9uLW1vcmUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotIyB0aGlzIHNob3dzIGhvdyB0byBjcmVhdGUgYSBuZXcgd2luZG93IHdpdGggYSBidXR0b24gaW4gaXQKLSMgdGhhdCBjYW4gY3JlYXRlIG5ldyB3aW5kb3dzCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBwcmludGl0KHNlbGYpOgotICAgICAgICBwcmludCgiaGkiKQotCi0gICAgZGVmIG1ha2VXaW5kb3coc2VsZik6Ci0gICAgICAgIGZyZWQgPSBUb3BsZXZlbCgpCi0gICAgICAgIGZyZWQubGFiZWwgPSBCdXR0b24oZnJlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PSJUaGlzIGlzIHdpbmRvdyBudW1iZXIgJWQuIiAlIHNlbGYud2luZG93bnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5tYWtlV2luZG93KQotICAgICAgICBmcmVkLmxhYmVsLnBhY2soKQotICAgICAgICBzZWxmLndpbmRvd251bSA9IHNlbGYud2luZG93bnVtICsgMQotCi0gICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6Ci0gICAgICAgIHNlbGYuUVVJVCA9IEJ1dHRvbihzZWxmLCB0ZXh0PSdRVUlUJywgZm9yZWdyb3VuZD0ncmVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5xdWl0KQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuaGlfdGhlcmUgPSBCdXR0b24oc2VsZiwgdGV4dD0nTWFrZSBhIE5ldyBXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5tYWtlV2luZG93KQotICAgICAgICBzZWxmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLndpbmRvd251bSA9IDAKLSAgICAgICAgc2VsZi5jcmVhdGVXaWRnZXRzKCkKLQotdGVzdCA9IFRlc3QoKQotdGVzdC5tYWlubG9vcCgpCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvbWF0dC93aW5kb3ctY3JlYXRpb24tc2ltcGxlLnB5IGIvRGVtby90a2ludGVyL21hdHQvd2luZG93LWNyZWF0aW9uLXNpbXBsZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjVlNjIzMC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvbWF0dC93aW5kb3ctY3JlYXRpb24tc2ltcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotZnJvbSB0a2ludGVyIGltcG9ydCAqCi0KLSMgdGhpcyBzaG93cyBob3cgdG8gc3Bhd24gb2ZmIG5ldyB3aW5kb3dzIGF0IGEgYnV0dG9uIHByZXNzCi0KLWNsYXNzIFRlc3QoRnJhbWUpOgotICAgIGRlZiBwcmludGl0KHNlbGYpOgotICAgICAgICBwcmludCgiaGkiKQotCi0gICAgZGVmIG1ha2VXaW5kb3coc2VsZik6Ci0gICAgICAgIGZyZWQgPSBUb3BsZXZlbCgpCi0gICAgICAgIGZyZWQubGFiZWwgPSBMYWJlbChmcmVkLCB0ZXh0PSJIZXJlJ3MgYSBuZXcgd2luZG93IikKLSAgICAgICAgZnJlZC5sYWJlbC5wYWNrKCkKLQotICAgIGRlZiBjcmVhdGVXaWRnZXRzKHNlbGYpOgotICAgICAgICBzZWxmLlFVSVQgPSBCdXR0b24oc2VsZiwgdGV4dD0nUVVJVCcsIGZvcmVncm91bmQ9J3JlZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucXVpdCkKLQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICAjIGEgaGVsbG8gYnV0dG9uCi0gICAgICAgIHNlbGYuaGlfdGhlcmUgPSBCdXR0b24oc2VsZiwgdGV4dD0nTWFrZSBhIE5ldyBXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5tYWtlV2luZG93KQotICAgICAgICBzZWxmLmhpX3RoZXJlLnBhY2soc2lkZT1MRUZUKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lKToKLSAgICAgICAgRnJhbWUuX19pbml0X18oc2VsZiwgbWFzdGVyKQotICAgICAgICBQYWNrLmNvbmZpZyhzZWxmKQotICAgICAgICBzZWxmLmNyZWF0ZVdpZGdldHMoKQotCi10ZXN0ID0gVGVzdCgpCi10ZXN0Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci9tYXR0L3dpbmRvdy1jcmVhdGlvbi13LWxvY2F0aW9uLnB5IGIvRGVtby90a2ludGVyL21hdHQvd2luZG93LWNyZWF0aW9uLXctbG9jYXRpb24ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODIzNjcuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL21hdHQvd2luZG93LWNyZWF0aW9uLXctbG9jYXRpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKLQotaW1wb3J0IHN5cwotIyNzeXMucGF0aC5hcHBlbmQoIi91c2Vycy9tamM0eS9wcm9qZWN0cy9weXRob24vdGtpbnRlci91dGlscyIpCi0jI2Zyb20gVGtpbnRlclV0aWxzICBpbXBvcnQgKgotCi0jIHRoaXMgc2hvd3MgaG93IHRvIGNyZWF0ZSBhIG5ldyB3aW5kb3cgd2l0aCBhIGJ1dHRvbiBpbiBpdCB0aGF0Ci0jIGNhbiBjcmVhdGUgbmV3IHdpbmRvd3MKLQotY2xhc3MgUXVpdEJ1dHRvbihCdXR0b24pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXIsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIGlmICJ0ZXh0IiBub3QgaW4ga3dhcmdzOgotICAgICAgICAgICAga3dhcmdzWyJ0ZXh0Il0gPSAiUVVJVCIKLSAgICAgICAgaWYgImNvbW1hbmQiIG5vdCBpbiBrd2FyZ3M6Ci0gICAgICAgICAgICBrd2FyZ3NbImNvbW1hbmQiXSA9IG1hc3Rlci5xdWl0Ci0gICAgICAgIEJ1dHRvbi5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICphcmdzLCAqKmt3YXJncykKLQotY2xhc3MgVGVzdChGcmFtZSk6Ci0gICAgZGVmIG1ha2VXaW5kb3coc2VsZiwgKmFyZ3MpOgotICAgICAgICBmcmVkID0gVG9wbGV2ZWwoKQotCi0gICAgICAgIGZyZWQubGFiZWwgPSBDYW52YXMgKGZyZWQsIHdpZHRoPSIyaSIsIGhlaWdodD0iMmkiKQotCi0gICAgICAgIGZyZWQubGFiZWwuY3JlYXRlX2xpbmUoIjAiLCAiMCIsICIyaSIsICIyaSIpCi0gICAgICAgIGZyZWQubGFiZWwuY3JlYXRlX2xpbmUoIjAiLCAiMmkiLCAiMmkiLCAiMCIpCi0gICAgICAgIGZyZWQubGFiZWwucGFjaygpCi0KLSAgICAgICAgIyNjZW50ZXJXaW5kb3coZnJlZCwgc2VsZi5tYXN0ZXIpCi0KLSAgICBkZWYgY3JlYXRlV2lkZ2V0cyhzZWxmKToKLSAgICAgICAgc2VsZi5RVUlUID0gUXVpdEJ1dHRvbihzZWxmKQotICAgICAgICBzZWxmLlFVSVQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCkKLQotICAgICAgICBzZWxmLm1ha2VXaW5kb3cgPSBCdXR0b24oc2VsZiwgdGV4dD0nTWFrZSBhIE5ldyBXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9NTAsIGhlaWdodD0yMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5tYWtlV2luZG93KQotICAgICAgICBzZWxmLm1ha2VXaW5kb3cucGFjayhzaWRlPUxFRlQpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUpOgotICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBtYXN0ZXIpCi0gICAgICAgIFBhY2suY29uZmlnKHNlbGYpCi0gICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCi0KLXRlc3QgPSBUZXN0KCkKLXRlc3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9jb21ib190aGVtZXMucHkgYi9EZW1vL3RraW50ZXIvdHRrL2NvbWJvX3RoZW1lcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlZWUyZC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvdHRrL2NvbWJvX3RoZW1lcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSIiIlR0ayBUaGVtZSBTZWxlY3Rvci4KLQotQWx0aG91Z2ggaXQgaXMgYSB0aGVtZSBzZWxlY3RvciwgeW91IHdvbid0IG5vdGljZSBtYW55IGNoYW5nZXMgc2luY2UKLXRoZXJlIGlzIG9ubHkgYSBjb21ib2JveCBhbmQgYSBmcmFtZSBhcm91bmQuCi0iIiIKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi0KLWNsYXNzIEFwcCh0dGsuRnJhbWUpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYpCi0KLSAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZSgpCi0gICAgICAgIHNlbGYuX3NldHVwX3dpZGdldHMoKQotCi0gICAgZGVmIF9jaGFuZ2VfdGhlbWUoc2VsZiwgZXZlbnQpOgotICAgICAgICBpZiBldmVudC53aWRnZXQuY3VycmVudCgpOiAjIHZhbHVlICMwIGlzIG5vdCBhIHRoZW1lCi0gICAgICAgICAgICBuZXd0aGVtZSA9IGV2ZW50LndpZGdldC5nZXQoKQotICAgICAgICAgICAgIyBjaGFuZ2UgdG8gdGhlIG5ldyB0aGVtZSBhbmQgcmVmcmVzaCBhbGwgdGhlIHdpZGdldHMKLSAgICAgICAgICAgIHNlbGYuc3R5bGUudGhlbWVfdXNlKG5ld3RoZW1lKQotCi0gICAgZGVmIF9zZXR1cF93aWRnZXRzKHNlbGYpOgotICAgICAgICB0aGVtZXMgPSBsaXN0KHNlbGYuc3R5bGUudGhlbWVfbmFtZXMoKSkKLSAgICAgICAgdGhlbWVzLmluc2VydCgwLCAiUGljayBhIHRoZW1lIikKLSAgICAgICAgIyBDcmVhdGUgYSByZWFkb25seSBDb21ib2JveCB3aGljaCB3aWxsIGRpc3BsYXkgNCB2YWx1ZXMgYXQgbWF4LAotICAgICAgICAjIHdoaWNoIHdpbGwgY2F1c2UgaXQgdG8gY3JlYXRlIGEgc2Nyb2xsYmFyIGlmIHRoZXJlIGFyZSBtb3JlCi0gICAgICAgICMgdGhhbiA0IHZhbHVlcyBpbiB0b3RhbC4KLSAgICAgICAgdGhlbWVzX2NvbWJvID0gdHRrLkNvbWJvYm94KHNlbGYsIHZhbHVlcz10aGVtZXMsIHN0YXRlPSJyZWFkb25seSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9NCkKLSAgICAgICAgdGhlbWVzX2NvbWJvLnNldCh0aGVtZXNbMF0pICMgc2V0cyB0aGUgY29tYm9ib3ggdmFsdWUgdG8gIlBpY2sgYSB0aGVtZSIKLSAgICAgICAgIyBDb21ib2JveCB3aWRnZXQgZ2VuZXJhdGVzIGEgPDxDb21ib2JveFNlbGVjdGVkPj4gdmlydHVhbCBldmVudAotICAgICAgICAjIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhbiBlbGVtZW50LiBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBhZnRlcgotICAgICAgICAjIHRoZSBsaXN0Ym94IGlzIHVucG9zdGVkIChhZnRlciB5b3Ugc2VsZWN0IGFuIGl0ZW0sIHRoZSBjb21ib2JveCdzCi0gICAgICAgICMgbGlzdGJveCBkaXNhcHBlYXJzLCB0aGVuIGl0IGlzIHNhaWQgdGhhdCBsaXN0Ym94IGlzIG5vdyB1bnBvc3RlZCkuCi0gICAgICAgIHRoZW1lc19jb21iby5iaW5kKCI8PENvbWJvYm94U2VsZWN0ZWQ+PiIsIHNlbGYuX2NoYW5nZV90aGVtZSkKLSAgICAgICAgdGhlbWVzX2NvbWJvLnBhY2soZmlsbD0neCcpCi0KLSAgICAgICAgc2VsZi5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKLQotCi1kZWYgbWFpbigpOgotICAgIGFwcCA9IEFwcCgpCi0gICAgYXBwLm1hc3Rlci50aXRsZSgiVHRrIENvbWJvYm94IikKLSAgICBhcHAubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9kaXJicm93c2VyLnB5IGIvRGVtby90a2ludGVyL3R0ay9kaXJicm93c2VyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWNkZGI1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci90dGsvZGlyYnJvd3Nlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLSIiIkEgZGlyZWN0b3J5IGJyb3dzZXIgdXNpbmcgVHRrIFRyZWV2aWV3LgotCi1CYXNlZCBvbiB0aGUgZGVtbyBmb3VuZCBpbiBUayA4LjUgbGlicmFyeS9kZW1vcy9icm93c2UKLSIiIgotaW1wb3J0IG9zCi1pbXBvcnQgZ2xvYgotaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi0KLWRlZiBwb3B1bGF0ZV90cmVlKHRyZWUsIG5vZGUpOgotICAgIGlmIHRyZWUuc2V0KG5vZGUsICJ0eXBlIikgIT0gJ2RpcmVjdG9yeSc6Ci0gICAgICAgIHJldHVybgotCi0gICAgcGF0aCA9IHRyZWUuc2V0KG5vZGUsICJmdWxscGF0aCIpCi0gICAgdHJlZS5kZWxldGUoKnRyZWUuZ2V0X2NoaWxkcmVuKG5vZGUpKQotCi0gICAgcGFyZW50ID0gdHJlZS5wYXJlbnQobm9kZSkKLSAgICBzcGVjaWFsX2RpcnMgPSBbXSBpZiBwYXJlbnQgZWxzZSBnbG9iLmdsb2IoJy4nKSArIGdsb2IuZ2xvYignLi4nKQotCi0gICAgZm9yIHAgaW4gc3BlY2lhbF9kaXJzICsgb3MubGlzdGRpcihwYXRoKToKLSAgICAgICAgcHR5cGUgPSBOb25lCi0gICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocGF0aCwgcCkucmVwbGFjZSgnXFwnLCAnLycpCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIocCk6IHB0eXBlID0gImRpcmVjdG9yeSIKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzZmlsZShwKTogcHR5cGUgPSAiZmlsZSIKLQotICAgICAgICBmbmFtZSA9IG9zLnBhdGguc3BsaXQocClbMV0KLSAgICAgICAgaWQgPSB0cmVlLmluc2VydChub2RlLCAiZW5kIiwgdGV4dD1mbmFtZSwgdmFsdWVzPVtwLCBwdHlwZV0pCi0KLSAgICAgICAgaWYgcHR5cGUgPT0gJ2RpcmVjdG9yeSc6Ci0gICAgICAgICAgICBpZiBmbmFtZSBub3QgaW4gKCcuJywgJy4uJyk6Ci0gICAgICAgICAgICAgICAgdHJlZS5pbnNlcnQoaWQsIDAsIHRleHQ9ImR1bW15IikKLSAgICAgICAgICAgICAgICB0cmVlLml0ZW0oaWQsIHRleHQ9Zm5hbWUpCi0gICAgICAgIGVsaWYgcHR5cGUgPT0gJ2ZpbGUnOgotICAgICAgICAgICAgc2l6ZSA9IG9zLnN0YXQocCkuc3Rfc2l6ZQotICAgICAgICAgICAgdHJlZS5zZXQoaWQsICJzaXplIiwgIiVkIGJ5dGVzIiAlIHNpemUpCi0KLQotZGVmIHBvcHVsYXRlX3Jvb3RzKHRyZWUpOgotICAgIGRpciA9IG9zLnBhdGguYWJzcGF0aCgnLicpLnJlcGxhY2UoJ1xcJywgJy8nKQotICAgIG5vZGUgPSB0cmVlLmluc2VydCgnJywgJ2VuZCcsIHRleHQ9ZGlyLCB2YWx1ZXM9W2RpciwgImRpcmVjdG9yeSJdKQotICAgIHBvcHVsYXRlX3RyZWUodHJlZSwgbm9kZSkKLQotZGVmIHVwZGF0ZV90cmVlKGV2ZW50KToKLSAgICB0cmVlID0gZXZlbnQud2lkZ2V0Ci0gICAgcG9wdWxhdGVfdHJlZSh0cmVlLCB0cmVlLmZvY3VzKCkpCi0KLWRlZiBjaGFuZ2VfZGlyKGV2ZW50KToKLSAgICB0cmVlID0gZXZlbnQud2lkZ2V0Ci0gICAgbm9kZSA9IHRyZWUuZm9jdXMoKQotICAgIGlmIHRyZWUucGFyZW50KG5vZGUpOgotICAgICAgICBwYXRoID0gb3MucGF0aC5hYnNwYXRoKHRyZWUuc2V0KG5vZGUsICJmdWxscGF0aCIpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgb3MuY2hkaXIocGF0aCkKLSAgICAgICAgICAgIHRyZWUuZGVsZXRlKHRyZWUuZ2V0X2NoaWxkcmVuKCcnKSkKLSAgICAgICAgICAgIHBvcHVsYXRlX3Jvb3RzKHRyZWUpCi0KLWRlZiBhdXRvc2Nyb2xsKHNiYXIsIGZpcnN0LCBsYXN0KToKLSAgICAiIiJIaWRlIGFuZCBzaG93IHNjcm9sbGJhciBhcyBuZWVkZWQuIiIiCi0gICAgZmlyc3QsIGxhc3QgPSBmbG9hdChmaXJzdCksIGZsb2F0KGxhc3QpCi0gICAgaWYgZmlyc3QgPD0gMCBhbmQgbGFzdCA+PSAxOgotICAgICAgICBzYmFyLmdyaWRfcmVtb3ZlKCkKLSAgICBlbHNlOgotICAgICAgICBzYmFyLmdyaWQoKQotICAgIHNiYXIuc2V0KGZpcnN0LCBsYXN0KQotCi1yb290ID0gdGtpbnRlci5UaygpCi0KLXZzYiA9IHR0ay5TY3JvbGxiYXIob3JpZW50PSJ2ZXJ0aWNhbCIpCi1oc2IgPSB0dGsuU2Nyb2xsYmFyKG9yaWVudD0iaG9yaXpvbnRhbCIpCi0KLXRyZWUgPSB0dGsuVHJlZXZpZXcoY29sdW1ucz0oImZ1bGxwYXRoIiwgInR5cGUiLCAic2l6ZSIpLAotICAgIGRpc3BsYXljb2x1bW5zPSJzaXplIiwgeXNjcm9sbGNvbW1hbmQ9bGFtYmRhIGYsIGw6IGF1dG9zY3JvbGwodnNiLCBmLCBsKSwKLSAgICB4c2Nyb2xsY29tbWFuZD1sYW1iZGEgZiwgbDphdXRvc2Nyb2xsKGhzYiwgZiwgbCkpCi0KLXZzYlsnY29tbWFuZCddID0gdHJlZS55dmlldwotaHNiWydjb21tYW5kJ10gPSB0cmVlLnh2aWV3Ci0KLXRyZWUuaGVhZGluZygiIzAiLCB0ZXh0PSJEaXJlY3RvcnkgU3RydWN0dXJlIiwgYW5jaG9yPSd3JykKLXRyZWUuaGVhZGluZygic2l6ZSIsIHRleHQ9IkZpbGUgU2l6ZSIsIGFuY2hvcj0ndycpCi10cmVlLmNvbHVtbigic2l6ZSIsIHN0cmV0Y2g9MCwgd2lkdGg9MTAwKQotCi1wb3B1bGF0ZV9yb290cyh0cmVlKQotdHJlZS5iaW5kKCc8PFRyZWV2aWV3T3Blbj4+JywgdXBkYXRlX3RyZWUpCi10cmVlLmJpbmQoJzxEb3VibGUtQnV0dG9uLTE+JywgY2hhbmdlX2RpcikKLQotIyBBcnJhbmdlIHRoZSB0cmVlIGFuZCBpdHMgc2Nyb2xsYmFycyBpbiB0aGUgdG9wbGV2ZWwKLXRyZWUuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnN3ZScpCi12c2IuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0nbnMnKQotaHNiLmdyaWQoY29sdW1uPTAsIHJvdz0xLCBzdGlja3k9J2V3JykKLXJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgd2VpZ2h0PTEpCi1yb290LmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQotCi1yb290Lm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlLmdpZiBiL0RlbW8vdGtpbnRlci90dGsvaW1nL2Nsb3NlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThjZjZjNy4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9hY3RpdmUuZ2lmIGIvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2VfYWN0aXZlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGI3ZjM5Mi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9hY3RpdmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9pbWcvY2xvc2VfcHJlc3NlZC5naWYgYi9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9wcmVzc2VkLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYxNjk1NC4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvdHRrL2ltZy9jbG9zZV9wcmVzc2VkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvbGlzdGJveF9zY3JvbGxjbWQucHkgYi9EZW1vL3RraW50ZXIvdHRrL2xpc3Rib3hfc2Nyb2xsY21kLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWZhZjYzLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci90dGsvbGlzdGJveF9zY3JvbGxjbWQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0iIiJTYW1wbGUgdGFrZW4gZnJvbTogaHR0cDovL3d3dy50a2RvY3MuY29tL3R1dG9yaWFsL21vcmV3aWRnZXRzLmh0bWwgYW5kCi1jb252ZXJ0ZWQgdG8gUHl0aG9uLCBtYWlubHkgdG8gZGVtb25zdHJhdGUgeHNjcm9sbGNvbW1hbmQgb3B0aW9uLgotCi1ncmlkIFt0azo6bGlzdGJveCAubCAteXNjcm9sbGNvbW1hbmQgIi5zIHNldCIgLWhlaWdodCA1XSAtY29sdW1uIDAgLXJvdyAwIC1zdGlja3kgbndlcwotZ3JpZCBbdHRrOjpzY3JvbGxiYXIgLnMgLWNvbW1hbmQgIi5sIHl2aWV3IiAtb3JpZW50IHZlcnRpY2FsXSAtY29sdW1uIDEgLXJvdyAwIC1zdGlja3kgbnMKLWdyaWQgW3R0azo6bGFiZWwgLnN0YXQgLXRleHQgIlN0YXR1cyBtZXNzYWdlIGhlcmUiIC1hbmNob3Igd10gLWNvbHVtbiAwIC1yb3cgMSAtc3RpY2t5IHdlCi1ncmlkIFt0dGs6OnNpemVncmlwIC5zel0gLWNvbHVtbiAxIC1yb3cgMSAtc3RpY2t5IHNlCi1ncmlkIGNvbHVtbmNvbmZpZ3VyZSAuIDAgLXdlaWdodCAxOyBncmlkIHJvd2NvbmZpZ3VyZSAuIDAgLXdlaWdodCAxCi1mb3Ige3NldCBpIDB9IHskaTwxMDB9IHtpbmNyIGl9IHsKLSAgIC5sIGluc2VydCBlbmQgIkxpbmUgJGkgb2YgMTAwIgotICAgfQotIiIiCi1pbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKLQotcm9vdCA9IHRraW50ZXIuVGsoKQotCi1sID0gdGtpbnRlci5MaXN0Ym94KGhlaWdodD01KQotbC5ncmlkKGNvbHVtbj0wLCByb3c9MCwgc3RpY2t5PSdud2VzJykKLQotcyA9IHR0ay5TY3JvbGxiYXIoY29tbWFuZD1sLnl2aWV3LCBvcmllbnQ9J3ZlcnRpY2FsJykKLWxbJ3lzY3JvbGxjb21tYW5kJ10gPSBzLnNldAotcy5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3RpY2t5PSJucyIpCi0KLXN0YXQgPSB0dGsuTGFiZWwodGV4dD0iU3RhdHVzIG1lc3NhZ2UgaGVyZSIsIGFuY2hvcj0ndycpCi1zdGF0LmdyaWQoY29sdW1uPTAsIHJvdz0xLCBzdGlja3k9J3dlJykKLQotc3ogPSB0dGsuU2l6ZWdyaXAoKQotc3ouZ3JpZChjb2x1bW49MSwgcm93PTEsIHN0aWNreT0nc2UnKQotCi1yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQotcm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKLQotZm9yIGkgaW4gcmFuZ2UoMTAwKToKLSAgICBsLmluc2VydCgnZW5kJywgIkxpbmUgJWQgb2YgMTAwIiAlIGkpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9tYWNfc2VhcmNoZW50cnkucHkgYi9EZW1vL3RraW50ZXIvdHRrL21hY19zZWFyY2hlbnRyeS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdiMWVhZi4uMDAwMDAwMAotLS0gYS9EZW1vL3RraW50ZXIvdHRrL21hY19zZWFyY2hlbnRyeS5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIk1hYyBzdHlsZSBzZWFyY2ggd2lkZ2V0Ci0KLVRyYW5zbGF0ZWQgZnJvbSBUY2wgY29kZSBieSBTY2hlbHRlIEJyb24sIGh0dHA6Ly93aWtpLnRjbC50ay8xODE4OAotIiIiCi1pbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKLQotcm9vdCA9IHRraW50ZXIuVGsoKQotCi1kYXRhID0gIiIiCi1SMGxHT0RsaEtnQWFBT2ZuQUZkWlZsbGJXRnBjV1Z0ZFdseGVXMTFmWEY5aFhtQmlYMlpuWldocFoybHJhR3h1YTI1d2JYSjAKLWNYUjJjM1YzZEhaNGRYaDZkM3grZTMxL2ZINkFmWVNHZzRlSmhvaUtoNHFNaVl1TmlvMlBqSG1VcW5xVnEzeVhyWkdUa0pLVQota1grYXNKU1drMzJjdUpXWGxJR2NzNWFZbFg2ZXVaZVpsb09ldFppYWw0U2Z0cHFibUlXZ3Q0R2h2WWFodUlLaXZwdWRtWWVpCi11WU9qdjV5ZW00aWp1b1Nrd0lXbHdZbWx1NTZnbllhbXdwK2hub2VudzR1bnZhQ2luNGlveEpDbnVaeWtySW1weFptbHNvYXEKLXpJMnB2Nktrb1pHb3VvcXF4cHFtczRlcnphT2xvbzZxd1l1cng1S3F1NXVudElpc3pxU21vNUNyd295c3lKZXF0cE9ydkp5bwotdFpHc3c0MnR5cFNzdmFhb3BaS3R4Sld0dnA2cXQ0K3V5NmVwcHBPdXhaQ3Z6S2lxcDVxdXVaU3Z4b3l4MDZtcnFKV3d4NDJ5Ci0xSkt4enBtd3dhcXNxWmF4eUk2ejFacXh3cXV0cXBPeno0KzAxcXl1cTU2eXZwaXp5cFMwMEptMHk1VzEwWnExekphMjByQ3kKLXJwdTN6cWl6d2JHenI2QzN5Wnk0ejdLMHNhRzR5cDI1MExPMXNxSzV5NTY2MForNzBxTzd6S3k0eGFDODA2Uzh6YmE0dGFHOQotMUtXOXpxNjZ4Nis3eUxpNnQ2Uy8xckM4eXJtN3VMTzh4TEc5eTdxOHViUzl4YWJCMmFuQjA3Syt6TFcreHJPL3phN0N6clRBCi16cmpBeUxYQno3N0J2YmJDMEsvRzJMakQwYm5FMHJMSzI4VEd3OGJJeGNMTDA3dlAyOEhOMjhyTXljdk95ci9UMzhEVTRjblIKLTJzL1J6dEhUME5MVTBjVFk1TXJXNU12WDVkSFgyYzNaNTliWTFkUGI1TmJiM2RMZTdOdmQydDNmM05YaDc5N2czZDNqNWRubAotOU9QbDRlVG00K0xuNnR6bzl1WG41T2JvNWVEcDhlZnA1dUhxOHVYcTdlanE1K25yNk9QczlPdnU2dW51OE8zdjYrdnc4Kzd3Ci03ZXp4OU8veDd2RHk3L0h6OE8vMTkvUDE4dlQzOC9MMytmYjQ5UGY1OXZYNi9majY5L2I3L3ZuNytQcjgrZmY5Ly92OSt2ei8KLSsvNy8vUC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8veUgvQzA1RlZGTkRRVkJGTWk0d0F3RUFBQUFoK1FRSlpBRC9BQ3dDCi1BQUlBS0FBV0FBQUkvZ0QvQ1J6NGJ3VUdDZzhlUUZqSXNHSERCdzRpVExBUWdxQkZnaXN1ZVBDaXlKT3BVeUJEaWhScHlwTWkKLUx4OHFhTGhJTUl5R0ZaNXNBVXNtalpyTm16aHpXcE8yREpndFR5c3FmR0RweG9NYlc4ZWtlUXNYenR5NHAxQ2pSalVYcnBzMwotYXNKc3VjbFE0dUtLU2JhbU1SM24xSnpaczJqUmtoMUh6dXhWWFg4eTRDRFlBd3F1YStESW5WclJ3TUdKVTJrRHAzMUtUaHkxCi1YR1dHRGx4aGkxclRQQVVJQ0JCQW9FQWVzb0l6bjZWbTY4TUtnVkFVSGZ0bXpoT0NCQ3RRd1FLU29BQmd6Wm5KZFNNbXlJUEEKLUZiQ290ZFVRQUloTmE5QjZEUENBR2JaYWMrU293VklNUlZlNHB3a0E0R3BxRGx3dUFBbU1aeDRuVHRmbmYxbU81SkVETnk0NgotTUhKa3hRRURnS0M0OXJQandDMGJxR2FadU9vWkFLakJQRTROZ0F6VXZZY1dPYzBRWkY5MWltQW5DREhKNUpGQUFKTjBJMkJhCi00aVJEVUMvZ09FVk5Ed0lVY0VBQkNBZ0FBQVRVVElnV09NQllSRnA4MGdoaUFRSUlWQUFFQXdKSVlJMkpablVqaTBYU1lBWU8KLU5jc1FBOHd5MGhDVHdBQVNYR09pT05GY3hBdHBUb2tUSHpuZmlMTU5NQWtjQU11RTQzakRDMHZMZUdPV2UyUjVvNHNuMUxnSAotR3prV3N2VFBNZ0VPYUE0MzNBZzRUampNdURrUU1OaTB0WjEyc3FXb0owSEFUTVBOZmZBWlo2VTB3TEF5cUo2MlJHb0xMcmhJCi1hcW1scHp3YUVBQWgrUVFKWkFEL0FDd0FBQUFBS2dBYUFBQUkvZ0QvQ1J3NDBKRWhRb0VDK2ZHamNPSENNUkFqUmt4RHNLTEYKLWY1WWNBY0lENTgyWmp5QkRKaG1aWklqSklVeVNFREhpQk1oRmdocnRkTm5SQWdTSG16aHo2c1RaUWNTTElUeCtDSG41YnhTawotTno1TUNNR3k1NUNqVFZDamJ1SkV0U3JWUTN1d3FEQlJRd3JGaTQ3NlNISHhvdzhxWGNlbVZiUEd0bTIxdDNDblRhUDI3Smd1Ci1WSHR1aUlqQnN1SW1Ra1JpaUVFRlRObzJjT1RNS1Y3TXVMRTVjTjY4UVVPR1Nnd0tHMUVxSnFKRFk4K3JadDhVanh0TnVuVGoKLWNZM0RnWk9XUzQ2S0lGZ0dqaUkwWklzcWFxTk5qV2pnWU1VcHg4QWRjM3YyYW9zTk1BSTFEYnF5STlXeWNPYjRJQWdnUUVBQgotQTNsUUJ4ZXQvVEc0Y01wSS90SHdZZVNmSXp4TTB1VEtOczdVZ0FRcllMMWFrYURBNyszYnVlVnFZNE5KbFVoSWNRTE5ZeDhFCi1BSVEwMW13alRROERlTkFkZm91TkE4NDQwR0JDUXhKWTNNRUdENnA0WTg0NENRQ0FpemNTZ3BNTEFBbEF1SjAzcU95UVJCUjMKLW5FSEVLK0JNR0tJdWk0a0REQUFJUEtpaVl1U1lTTVFRUkNEQ3hoaXppUE1ZQmdEa0VhRWFBR1FBM1krTWpVUE9MRm9Nb1VVaAotY0t4UkM0bmdlSUxpSDhRa2swY0NBVXpTRFpXcHpiTEVFMUV3Z2djWXFXQ2oyRE5BREZEQUFRVWdJQUFBRUZEREptUFlxTkpGCi1GMXM0Y3NjVG1DRGpEVGpkU1BPSEJRZ2dVQUVRREFnZ2dUV0RQb1lNSmtGb1VkUm1kZHl5aldMZVVMTU1NY0FzSXcweDR3a00KLUlNRTFnMjV6eXhwSHhGWVVIbXlJZ2d3NEg0b2pJVG5maUxNTk1Ba2NBQXViNEJRamloUmRER1RKSG12YzRRbzF3RDZJbWplNgotZUlMYmorQlE0d3F1NVEzRUNTSjBGT0tLTXR2NG1CZzMzUHc0empiS3VCSUlFMXhZcElraGRRUWl5aTdPdEF1Y2o2ZHQ0OHd1Ci1vdFFoQlJhNlZ2U0pJUndoSWtvdHZnUlR6TVVZWjZ4eE1jajRRa3NwZUtEeHhSaEVtVWZJSFdqQWdRY2lqRURpc3N1WHZDeXoKLXpIN1E4WVFVUnhEaFVzbi9iQ0luUjNBRUxmVFFaQlJ0OUJCSmtDR0ZGVmhNd1ROQmxuQkNTQ0dFSUpRUUlBa2xaTVhXUkJBUgotUlJSV0VOSHdSUUVCQURzPSIiIgotCi0KLXMxID0gdGtpbnRlci5QaG90b0ltYWdlKCJzZWFyY2gxIiwgZGF0YT1kYXRhLCBmb3JtYXQ9ImdpZiAtaW5kZXggMCIpCi1zMiA9IHRraW50ZXIuUGhvdG9JbWFnZSgic2VhcmNoMiIsIGRhdGE9ZGF0YSwgZm9ybWF0PSJnaWYgLWluZGV4IDEiKQotCi1zdHlsZSA9IHR0ay5TdHlsZSgpCi0KLXN0eWxlLmVsZW1lbnRfY3JlYXRlKCJTZWFyY2guZmllbGQiLCAiaW1hZ2UiLCAic2VhcmNoMSIsCi0gICAgKCJmb2N1cyIsICJzZWFyY2gyIiksIGJvcmRlcj1bMjIsIDcsIDE0XSwgc3RpY2t5PSJldyIpCi0KLXN0eWxlLmxheW91dCgiU2VhcmNoLmVudHJ5IiwgWwotICAgICgiU2VhcmNoLmZpZWxkIiwgeyJzdGlja3kiOiAibnN3ZSIsICJib3JkZXIiOiAxLCAiY2hpbGRyZW4iOgotICAgICAgICBbKCJFbnRyeS5wYWRkaW5nIiwgeyJzdGlja3kiOiAibnN3ZSIsICJjaGlsZHJlbiI6Ci0gICAgICAgICAgICBbKCJFbnRyeS50ZXh0YXJlYSIsIHsic3RpY2t5IjogIm5zd2UifSldCi0gICAgICAgIH0pXQotICAgIH0pXQotKQotCi1zdHlsZS5jb25maWd1cmUoIlNlYXJjaC5lbnRyeSIsIGJhY2tncm91bmQ9IiNiMmIyYjIiKQotCi1yb290LmNvbmZpZ3VyZShiYWNrZ3JvdW5kPSIjYjJiMmIyIikKLQotZTEgPSB0dGsuRW50cnkoc3R5bGU9IlNlYXJjaC5lbnRyeSIsIHdpZHRoPTIwKQotZTIgPSB0dGsuRW50cnkoc3R5bGU9IlNlYXJjaC5lbnRyeSIsIHdpZHRoPTIwKQotCi1lMS5ncmlkKHBhZHg9MTAsIHBhZHk9MTApCi1lMi5ncmlkKHBhZHg9MTAsIHBhZHk9MTApCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9ub3RlYm9va19jbG9zZWJ0bi5weSBiL0RlbW8vdGtpbnRlci90dGsvbm90ZWJvb2tfY2xvc2VidG4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNjVmMDkuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL3R0ay9ub3RlYm9va19jbG9zZWJ0bi5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIkEgVHRrIE5vdGVib29rIHdpdGggY2xvc2UgYnV0dG9ucy4KLQotQmFzZWQgb24gYW4gZXhhbXBsZSBieSBwYXR0aG95dHMsIGh0dHA6Ly9wYXN0ZS50Y2xlcnMudGsvODk2Ci0iIiIKLWltcG9ydCBvcwotaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi0KLXJvb3QgPSB0a2ludGVyLlRrKCkKLQotaW1nZGlyID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdpbWcnKQotaTEgPSB0a2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZSIsIGZpbGU9b3MucGF0aC5qb2luKGltZ2RpciwgJ2Nsb3NlLmdpZicpKQotaTIgPSB0a2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZWFjdGl2ZSIsCi0gICAgZmlsZT1vcy5wYXRoLmpvaW4oaW1nZGlyLCAnY2xvc2VfYWN0aXZlLmdpZicpKQotaTMgPSB0a2ludGVyLlBob3RvSW1hZ2UoImltZ19jbG9zZXByZXNzZWQiLAotICAgIGZpbGU9b3MucGF0aC5qb2luKGltZ2RpciwgJ2Nsb3NlX3ByZXNzZWQuZ2lmJykpCi0KLXN0eWxlID0gdHRrLlN0eWxlKCkKLQotc3R5bGUuZWxlbWVudF9jcmVhdGUoImNsb3NlIiwgImltYWdlIiwgImltZ19jbG9zZSIsCi0gICAgKCJhY3RpdmUiLCAicHJlc3NlZCIsICIhZGlzYWJsZWQiLCAiaW1nX2Nsb3NlcHJlc3NlZCIpLAotICAgICgiYWN0aXZlIiwgIiFkaXNhYmxlZCIsICJpbWdfY2xvc2VhY3RpdmUiKSwgYm9yZGVyPTgsIHN0aWNreT0nJykKLQotc3R5bGUubGF5b3V0KCJCdXR0b25Ob3RlYm9vayIsIFsoIkJ1dHRvbk5vdGVib29rLmNsaWVudCIsIHsic3RpY2t5IjogIm5zd2UifSldKQotc3R5bGUubGF5b3V0KCJCdXR0b25Ob3RlYm9vay5UYWIiLCBbCi0gICAgKCJCdXR0b25Ob3RlYm9vay50YWIiLCB7InN0aWNreSI6ICJuc3dlIiwgImNoaWxkcmVuIjoKLSAgICAgICAgWygiQnV0dG9uTm90ZWJvb2sucGFkZGluZyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogIm5zd2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6Ci0gICAgICAgICAgICBbKCJCdXR0b25Ob3RlYm9vay5mb2N1cyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogIm5zd2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoaWxkcmVuIjoKLSAgICAgICAgICAgICAgICBbKCJCdXR0b25Ob3RlYm9vay5sYWJlbCIsIHsic2lkZSI6ICJsZWZ0IiwgInN0aWNreSI6ICcnfSksCi0gICAgICAgICAgICAgICAgICgiQnV0dG9uTm90ZWJvb2suY2xvc2UiLCB7InNpZGUiOiAibGVmdCIsICJzdGlja3kiOiAnJ30pXQotICAgICAgICAgICAgfSldCi0gICAgICAgIH0pXQotICAgIH0pXQotKQotCi1kZWYgYnRuX3ByZXNzKGV2ZW50KToKLSAgICB4LCB5LCB3aWRnZXQgPSBldmVudC54LCBldmVudC55LCBldmVudC53aWRnZXQKLSAgICBlbGVtID0gd2lkZ2V0LmlkZW50aWZ5KHgsIHkpCi0gICAgaW5kZXggPSB3aWRnZXQuaW5kZXgoIkAlZCwlZCIgJSAoeCwgeSkpCi0KLSAgICBpZiAiY2xvc2UiIGluIGVsZW06Ci0gICAgICAgIHdpZGdldC5zdGF0ZShbJ3ByZXNzZWQnXSkKLSAgICAgICAgd2lkZ2V0LnByZXNzZWRfaW5kZXggPSBpbmRleAotCi1kZWYgYnRuX3JlbGVhc2UoZXZlbnQpOgotICAgIHgsIHksIHdpZGdldCA9IGV2ZW50LngsIGV2ZW50LnksIGV2ZW50LndpZGdldAotCi0gICAgaWYgbm90IHdpZGdldC5pbnN0YXRlKFsncHJlc3NlZCddKToKLSAgICAgICAgcmV0dXJuCi0KLSAgICBlbGVtID0gIHdpZGdldC5pZGVudGlmeSh4LCB5KQotICAgIGluZGV4ID0gd2lkZ2V0LmluZGV4KCJAJWQsJWQiICUgKHgsIHkpKQotCi0gICAgaWYgImNsb3NlIiBpbiBlbGVtIGFuZCB3aWRnZXQucHJlc3NlZF9pbmRleCA9PSBpbmRleDoKLSAgICAgICAgd2lkZ2V0LmZvcmdldChpbmRleCkKLSAgICAgICAgd2lkZ2V0LmV2ZW50X2dlbmVyYXRlKCI8PE5vdGVib29rQ2xvc2VkVGFiPj4iKQotCi0gICAgd2lkZ2V0LnN0YXRlKFsiIXByZXNzZWQiXSkKLSAgICB3aWRnZXQucHJlc3NlZF9pbmRleCA9IE5vbmUKLQotCi1yb290LmJpbmRfY2xhc3MoIlROb3RlYm9vayIsICI8QnV0dG9uUHJlc3MtMT4iLCBidG5fcHJlc3MsIFRydWUpCi1yb290LmJpbmRfY2xhc3MoIlROb3RlYm9vayIsICI8QnV0dG9uUmVsZWFzZS0xPiIsIGJ0bl9yZWxlYXNlKQotCi0jIGNyZWF0ZSBhIHR0ayBub3RlYm9vayB3aXRoIG91ciBjdXN0b20gc3R5bGUsIGFuZCBhZGQgc29tZSB0YWJzIHRvIGl0Ci1uYiA9IHR0ay5Ob3RlYm9vayh3aWR0aD0yMDAsIGhlaWdodD0yMDAsIHN0eWxlPSJCdXR0b25Ob3RlYm9vayIpCi1uYi5wcmVzc2VkX2luZGV4ID0gTm9uZQotZjEgPSB0a2ludGVyLkZyYW1lKG5iLCBiYWNrZ3JvdW5kPSJyZWQiKQotZjIgPSB0a2ludGVyLkZyYW1lKG5iLCBiYWNrZ3JvdW5kPSJncmVlbiIpCi1mMyA9IHRraW50ZXIuRnJhbWUobmIsIGJhY2tncm91bmQ9ImJsdWUiKQotbmIuYWRkKGYxLCB0ZXh0PSdSZWQnLCBwYWRkaW5nPTMpCi1uYi5hZGQoZjIsIHRleHQ9J0dyZWVuJywgcGFkZGluZz0zKQotbmIuYWRkKGYzLCB0ZXh0PSdCbHVlJywgcGFkZGluZz0zKQotbmIucGFjayhleHBhbmQ9MSwgZmlsbD0nYm90aCcpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9wbGFzdGlrX3RoZW1lLnB5IGIvRGVtby90a2ludGVyL3R0ay9wbGFzdGlrX3RoZW1lLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzY4YmI1Li4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci90dGsvcGxhc3Rpa190aGVtZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0iIiJUaGlzIGRlbW9uc3RyYXRlcyBnb29kIHBhcnQgb2YgdGhlIHN5bnRheCBhY2NlcHRlZCBieSB0aGVtZV9jcmVhdGUuCi0KLVRoaXMgaXMgYSB0cmFuc2xhdGlvbiBvZiBwbGFzdGlrLnRjbCB0byBweXRob24uCi1Zb3Ugd2lsbCBuZWVkIHRoZSBpbWFnZXMgdXNlZCBieSB0aGUgcGxhc3RpayB0aGVtZSB0byB0ZXN0IHRoaXMuIFRoZQotaW1hZ2VzIChhbmQgb3RoZXIgdGlsZSB0aGVtZXMpIGNhbiBiZSByZXRyaXZlZCBieSBkb2luZzoKLQotJCBjdnMgLXozIC1kOnBzZXJ2ZXI6YW5vbnltb3VzQHRrdGFibGUuY3ZzLnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC90a3RhYmxlIFwKLSAgY28gdGlsZS10aGVtZXMKLQotVG8gdGVzdCB0aGlzIG1vZHVsZSB5b3Ugc2hvdWxkIGRvLCBmb3IgZXhhbXBsZToKLQotaW1wb3J0IFRraW50ZXIKLWltcG9ydCBwbGFzdGlrX3RoZW1lCi0KLXJvb3QgPSBUa2ludGVyLlRrKCkKLXBsYXN0aWtfdGhlbWUuaW5zdGFsbChwbGFzdGlrX2ltYWdlX2RpcikKLS4uLgotCi1XaGVyZSBwbGFzdGlrX2ltYWdlX2RpciBjb250YWlucyB0aGUgcGF0aCB0byB0aGUgaW1hZ2VzIGRpcmVjdG9yeSB1c2VkIGJ5Ci10aGUgcGxhc3RpayB0aGVtZSwgc29tZXRoaW5nIGxpa2U6IHRpbGUtdGhlbWVzL3BsYXN0aWsvcGxhc3RpawotIiIiCi1pbXBvcnQgb3MKLWltcG9ydCBnbG9iCi1mcm9tIHRraW50ZXIgaW1wb3J0IHR0aywgUGhvdG9JbWFnZQotCi1fX2FsbF9fID0gWydpbnN0YWxsJ10KLQotY29sb3JzID0gewotICAgICJmcmFtZSI6ICIjZWZlZmVmIiwKLSAgICAiZGlzYWJsZWRmZyI6ICIjYWFhYWFhIiwKLSAgICAic2VsZWN0YmciOiAiIzY1N2E5ZSIsCi0gICAgInNlbGVjdGZnIjogIiNmZmZmZmYiCi0gICAgfQotCi1pbWdzID0ge30KLWRlZiBfbG9hZF9pbWdzKGltZ2Rpcik6Ci0gICAgaW1nZGlyID0gb3MucGF0aC5leHBhbmR1c2VyKGltZ2RpcikKLSAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihpbWdkaXIpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIiVyIGlzIG5vdCBhIGRpcmVjdG9yeSwgY2FuJ3QgbG9hZCBpbWFnZXMiICUgaW1nZGlyKQotICAgIGZvciBmIGluIGdsb2IuZ2xvYigiJXMvKi5naWYiICUgaW1nZGlyKToKLSAgICAgICAgaW1nID0gb3MucGF0aC5zcGxpdChmKVsxXQotICAgICAgICBuYW1lID0gaW1nWzotNF0KLSAgICAgICAgaW1nc1tuYW1lXSA9IFBob3RvSW1hZ2UobmFtZSwgZmlsZT1mLCBmb3JtYXQ9ImdpZjg5IikKLQotZGVmIGluc3RhbGwoaW1nZGlyKToKLSAgICBfbG9hZF9pbWdzKGltZ2RpcikKLSAgICBzdHlsZSA9IHR0ay5TdHlsZSgpCi0gICAgc3R5bGUudGhlbWVfY3JlYXRlKCJwbGFzdGlrIiwgImRlZmF1bHQiLCBzZXR0aW5ncz17Ci0gICAgICAgICIuIjogewotICAgICAgICAgICAgImNvbmZpZ3VyZSI6Ci0gICAgICAgICAgICAgICAgeyJiYWNrZ3JvdW5kIjogY29sb3JzWydmcmFtZSddLAotICAgICAgICAgICAgICAgICAidHJvdWdoY29sb3IiOiBjb2xvcnNbJ2ZyYW1lJ10sCi0gICAgICAgICAgICAgICAgICJzZWxlY3RiYWNrZ3JvdW5kIjogY29sb3JzWydzZWxlY3RiZyddLAotICAgICAgICAgICAgICAgICAic2VsZWN0Zm9yZWdyb3VuZCI6IGNvbG9yc1snc2VsZWN0ZmcnXSwKLSAgICAgICAgICAgICAgICAgImZpZWxkYmFja2dyb3VuZCI6IGNvbG9yc1snZnJhbWUnXSwKLSAgICAgICAgICAgICAgICAgImZvbnQiOiAiVGtEZWZhdWx0Rm9udCIsCi0gICAgICAgICAgICAgICAgICJib3JkZXJ3aWR0aCI6IDF9LAotICAgICAgICAgICAgIm1hcCI6IHsiZm9yZWdyb3VuZCI6IFsoImRpc2FibGVkIiwgY29sb3JzWydkaXNhYmxlZGZnJ10pXX0KLSAgICAgICAgfSwKLQotICAgICAgICAiVmVydGljYWwuVFNjcm9sbGJhciI6IHsibGF5b3V0IjogWwotICAgICAgICAgICAgKCJWZXJ0aWNhbC5TY3JvbGxiYXIudXBhcnJvdyIsIHsic2lkZSI6ICJ0b3AiLCAic3RpY2t5IjogJyd9KSwKLSAgICAgICAgICAgICgiVmVydGljYWwuU2Nyb2xsYmFyLmRvd25hcnJvdyIsIHsic2lkZSI6ICJib3R0b20iLCAic3RpY2t5IjogJyd9KSwKLSAgICAgICAgICAgICgiVmVydGljYWwuU2Nyb2xsYmFyLnVwYXJyb3ciLCB7InNpZGUiOiAiYm90dG9tIiwgInN0aWNreSI6ICcnfSksCi0gICAgICAgICAgICAoIlZlcnRpY2FsLlNjcm9sbGJhci50cm91Z2giLCB7InN0aWNreSI6ICJucyIsICJjaGlsZHJlbiI6Ci0gICAgICAgICAgICAgICAgWygiVmVydGljYWwuU2Nyb2xsYmFyLnRodW1iIiwgeyJleHBhbmQiOiAxLCAidW5pdCI6IDEsCi0gICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6IFsoIlZlcnRpY2FsLlNjcm9sbGJhci5ncmlwIiwgeyJzdGlja3kiOiAnJ30pXQotICAgICAgICAgICAgICAgIH0pXQotICAgICAgICAgICAgfSldCi0gICAgICAgIH0sCi0KLSAgICAgICAgIkhvcml6b250YWwuVFNjcm9sbGJhciI6IHsibGF5b3V0IjogWwotICAgICAgICAgICAgKCJIb3Jpem9udGFsLlNjcm9sbGJhci5sZWZ0YXJyb3ciLCB7InNpZGUiOiAibGVmdCIsICJzdGlja3kiOiAnJ30pLAotICAgICAgICAgICAgKCJIb3Jpem9udGFsLlNjcm9sbGJhci5yaWdodGFycm93IiwKLSAgICAgICAgICAgICAgICB7InNpZGUiOiAicmlnaHQiLCAic3RpY2t5IjogJyd9KSwKLSAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIubGVmdGFycm93IiwKLSAgICAgICAgICAgICAgICB7InNpZGUiOiAicmlnaHQiLCAic3RpY2t5IjogJyd9KSwKLSAgICAgICAgICAgICgiSG9yaXpvbnRhbC5TY3JvbGxiYXIudHJvdWdoIiwgeyJzdGlja3kiOiAiZXciLCAiY2hpbGRyZW4iOgotICAgICAgICAgICAgICAgIFsoIkhvcml6b250YWwuU2Nyb2xsYmFyLnRodW1iIiwgeyJleHBhbmQiOiAxLCAidW5pdCI6IDEsCi0gICAgICAgICAgICAgICAgICAgICJjaGlsZHJlbiI6IFsoIkhvcml6b250YWwuU2Nyb2xsYmFyLmdyaXAiLCB7InN0aWNreSI6ICcnfSldCi0gICAgICAgICAgICAgICAgfSldCi0gICAgICAgICAgICB9KV0KLSAgICAgICAgfSwKLQotICAgICAgICAiVEJ1dHRvbiI6IHsKLSAgICAgICAgICAgICJjb25maWd1cmUiOiB7IndpZHRoIjogMTAsICJhbmNob3IiOiAiY2VudGVyIn0sCi0gICAgICAgICAgICAibGF5b3V0IjogWwotICAgICAgICAgICAgICAgICgiQnV0dG9uLmJ1dHRvbiIsIHsiY2hpbGRyZW4iOgotICAgICAgICAgICAgICAgICAgICBbKCJCdXR0b24uZm9jdXMiLCB7ImNoaWxkcmVuIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsoIkJ1dHRvbi5wYWRkaW5nIiwgeyJjaGlsZHJlbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiQnV0dG9uLmxhYmVsIiwgeyJzaWRlIjogImxlZnQiLCAiZXhwYW5kIjogMX0pXQotICAgICAgICAgICAgICAgICAgICAgICAgfSldCi0gICAgICAgICAgICAgICAgICAgIH0pXQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0KLSAgICAgICAgIlRvb2xidXR0b24iOiB7Ci0gICAgICAgICAgICAiY29uZmlndXJlIjogeyJhbmNob3IiOiAiY2VudGVyIn0sCi0gICAgICAgICAgICAibGF5b3V0IjogWwotICAgICAgICAgICAgICAgICgiVG9vbGJ1dHRvbi5ib3JkZXIiLCB7ImNoaWxkcmVuIjoKLSAgICAgICAgICAgICAgICAgICAgWygiVG9vbGJ1dHRvbi5idXR0b24iLCB7ImNoaWxkcmVuIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsoIlRvb2xidXR0b24ucGFkZGluZyIsIHsiY2hpbGRyZW4iOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoIlRvb2xidXR0b24ubGFiZWwiLCB7InNpZGUiOiJsZWZ0IiwgImV4cGFuZCI6MX0pXQotICAgICAgICAgICAgICAgICAgICAgICAgfSldCi0gICAgICAgICAgICAgICAgICAgIH0pXQotICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICBdCi0gICAgICAgIH0sCi0KLSAgICAgICAgIlRNZW51YnV0dG9uIjogeyJsYXlvdXQiOiBbCi0gICAgICAgICAgICAoIk1lbnVidXR0b24uYnV0dG9uIiwgeyJjaGlsZHJlbiI6Ci0gICAgICAgICAgICAgICAgWygiTWVudWJ1dHRvbi5pbmRpY2F0b3IiLCB7InNpZGUiOiAicmlnaHQifSksCi0gICAgICAgICAgICAgICAgICgiTWVudWJ1dHRvbi5mb2N1cyIsIHsiY2hpbGRyZW4iOgotICAgICAgICAgICAgICAgICAgICBbKCJNZW51YnV0dG9uLnBhZGRpbmciLCB7ImNoaWxkcmVuIjoKLSAgICAgICAgICAgICAgICAgICAgICAgIFsoIk1lbnVidXR0b24ubGFiZWwiLCB7InNpZGUiOiAibGVmdCIsICJleHBhbmQiOiAxfSldCi0gICAgICAgICAgICAgICAgICAgIH0pXQotICAgICAgICAgICAgICAgIH0pXQotICAgICAgICAgICAgfSldCi0gICAgICAgIH0sCi0KLSAgICAgICAgIlROb3RlYm9vayI6IHsiY29uZmlndXJlIjogeyJ0YWJtYXJnaW5zIjogWzAsIDIsIDAsIDBdfX0sCi0gICAgICAgICJUTm90ZWJvb2sudGFiIjogewotICAgICAgICAgICAgImNvbmZpZ3VyZSI6IHsicGFkZGluZyI6IFs2LCAyLCA2LCAyXSwgImV4cGFuZCI6IFswLCAwLCAyXX0sCi0gICAgICAgICAgICAibWFwIjogeyJleHBhbmQiOiBbKCJzZWxlY3RlZCIsIFsxLCAyLCA0LCAyXSldfQotICAgICAgICB9LAotICAgICAgICAiVHJlZXZpZXciOiB7ImNvbmZpZ3VyZSI6IHsicGFkZGluZyI6IDB9fSwKLQotICAgICAgICAjIGVsZW1lbnRzCi0gICAgICAgICJCdXR0b24uYnV0dG9uIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2J1dHRvbi1uJywKLSAgICAgICAgICAgICAgICAoInByZXNzZWQiLCAnYnV0dG9uLXAnKSwgKCJhY3RpdmUiLCAnYnV0dG9uLWgnKSwKLSAgICAgICAgICAgICAgICB7ImJvcmRlciI6IFs0LCAxMF0sICJwYWRkaW5nIjogNCwgInN0aWNreSI6ImV3bnMifQotICAgICAgICAgICAgKQotICAgICAgICB9LAotCi0gICAgICAgICJUb29sYnV0dG9uLmJ1dHRvbiI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICd0YnV0dG9uLW4nLAotICAgICAgICAgICAgICAgICgic2VsZWN0ZWQiLCAndGJ1dHRvbi1wJyksICgicHJlc3NlZCIsICd0YnV0dG9uLXAnKSwKLSAgICAgICAgICAgICAgICAoImFjdGl2ZSIsICd0YnV0dG9uLWgnKSwKLSAgICAgICAgICAgICAgICB7ImJvcmRlciI6IFs0LCA5XSwgInBhZGRpbmciOiAzLCAic3RpY2t5IjogIm5ld3MifQotICAgICAgICAgICAgKQotICAgICAgICB9LAotCi0gICAgICAgICJDaGVja2J1dHRvbi5pbmRpY2F0b3IiOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnY2hlY2stbnUnLAotICAgICAgICAgICAgICAgICgnYWN0aXZlJywgJ3NlbGVjdGVkJywgJ2NoZWNrLWhjJyksCi0gICAgICAgICAgICAgICAgKCdwcmVzc2VkJywgJ3NlbGVjdGVkJywgJ2NoZWNrLXBjJyksCi0gICAgICAgICAgICAgICAgKCdhY3RpdmUnLCAnY2hlY2staHUnKSwKLSAgICAgICAgICAgICAgICAoInNlbGVjdGVkIiwgJ2NoZWNrLW5jJyksCi0gICAgICAgICAgICAgICAgeyJzdGlja3kiOiAnJ30KLSAgICAgICAgICAgICkKLSAgICAgICAgfSwKLQotICAgICAgICAiUmFkaW9idXR0b24uaW5kaWNhdG9yIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ3JhZGlvLW51JywKLSAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdzZWxlY3RlZCcsICdyYWRpby1oYycpLAotICAgICAgICAgICAgICAgICgncHJlc3NlZCcsICdzZWxlY3RlZCcsICdyYWRpby1wYycpLAotICAgICAgICAgICAgICAgICgnYWN0aXZlJywgJ3JhZGlvLWh1JyksICgnc2VsZWN0ZWQnLCAncmFkaW8tbmMnKSwKLSAgICAgICAgICAgICAgICB7InN0aWNreSI6ICcnfQotICAgICAgICAgICAgKQotICAgICAgICB9LAotCi0gICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci50aHVtYiI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICdoc2ItbicsIHsiYm9yZGVyIjogMywgInN0aWNreSI6ICJldyJ9KQotICAgICAgICB9LAotCi0gICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci5ncmlwIjogeyJlbGVtZW50IGNyZWF0ZSI6ICgiaW1hZ2UiLCAnaHNiLWcnKX0sCi0gICAgICAgICJIb3Jpem9udGFsLlNjcm9sbGJhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICdoc2ItdCcpfSwKLSAgICAgICAgIlZlcnRpY2FsLlNjcm9sbGJhci50aHVtYiI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICd2c2ItbicsIHsiYm9yZGVyIjogMywgInN0aWNreSI6ICJucyJ9KQotICAgICAgICB9LAotICAgICAgICAiVmVydGljYWwuU2Nyb2xsYmFyLmdyaXAiOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICd2c2ItZycpfSwKLSAgICAgICAgIlZlcnRpY2FsLlNjcm9sbGJhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjogKCJpbWFnZSIsICd2c2ItdCcpfSwKLSAgICAgICAgIlNjcm9sbGJhci51cGFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93dXAtbicsICgicHJlc3NlZCIsICdhcnJvd3VwLXAnKSwgeyJzdGlja3kiOiAnJ30pCi0gICAgICAgIH0sCi0gICAgICAgICJTY3JvbGxiYXIuZG93bmFycm93IjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2Fycm93ZG93bi1uJywKLSAgICAgICAgICAgICgicHJlc3NlZCIsICdhcnJvd2Rvd24tcCcpLCB7J3N0aWNreSc6ICcnfSkKLSAgICAgICAgfSwKLSAgICAgICAgIlNjcm9sbGJhci5sZWZ0YXJyb3ciOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3dsZWZ0LW4nLAotICAgICAgICAgICAgKCJwcmVzc2VkIiwgJ2Fycm93bGVmdC1wJyksIHsnc3RpY2t5JzogJyd9KQotICAgICAgICB9LAotICAgICAgICAiU2Nyb2xsYmFyLnJpZ2h0YXJyb3ciOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3dyaWdodC1uJywgKCJwcmVzc2VkIiwgJ2Fycm93cmlnaHQtcCcpLAotICAgICAgICAgICAgeydzdGlja3knOiAnJ30pCi0gICAgICAgIH0sCi0KLSAgICAgICAgIkhvcml6b250YWwuU2NhbGUuc2xpZGVyIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2hzbGlkZXItbicsIHsnc3RpY2t5JzogJyd9KQotICAgICAgICB9LAotICAgICAgICAiSG9yaXpvbnRhbC5TY2FsZS50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnaHNsaWRlci10Jywgeydib3JkZXInOiAxLCAncGFkZGluZyc6IDB9KQotICAgICAgICB9LAotICAgICAgICAiVmVydGljYWwuU2NhbGUuc2xpZGVyIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ3ZzbGlkZXItbicsIHsnc3RpY2t5JzogJyd9KQotICAgICAgICB9LAotICAgICAgICAiVmVydGljYWwuU2NhbGUudHJvdWdoIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ3ZzbGlkZXItdCcsIHsnYm9yZGVyJzogMSwgJ3BhZGRpbmcnOiAwfSkKLSAgICAgICAgfSwKLQotICAgICAgICAiRW50cnkuZmllbGQiOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnZW50cnktbicsCi0gICAgICAgICAgICAgICAgKCJmb2N1cyIsICdlbnRyeS1mJyksCi0gICAgICAgICAgICAgICAgeydib3JkZXInOiAyLCAncGFkZGluZyc6IFszLCA0XSwgJ3N0aWNreSc6ICduZXdzJ30KLSAgICAgICAgICAgICkKLSAgICAgICAgfSwKLQotICAgICAgICAiTGFiZWxmcmFtZS5ib3JkZXIiOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnYm9yZGVyJywgeydib3JkZXInOiA0LCAncGFkZGluZyc6IDQsICdzdGlja3knOiAnbmV3cyd9KQotICAgICAgICB9LAotCi0gICAgICAgICJNZW51YnV0dG9uLmJ1dHRvbiI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICdjb21iby1yJywKLSAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdjb21iby1yYScpLAotICAgICAgICAgICAgICAgIHsnc3RpY2t5JzogJ25ld3MnLCAnYm9yZGVyJzogWzQsIDYsIDI0LCAxNV0sCi0gICAgICAgICAgICAgICAgICdwYWRkaW5nJzogWzQsIDQsIDVdfQotICAgICAgICAgICAgKQotICAgICAgICB9LAotICAgICAgICAiTWVudWJ1dHRvbi5pbmRpY2F0b3IiOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnYXJyb3ctZCcsIHsic3RpY2t5IjogImUiLCAiYm9yZGVyIjogWzE1LCAwLCAwLCAwXX0pCi0gICAgICAgIH0sCi0KLSAgICAgICAgIkNvbWJvYm94LmZpZWxkIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2NvbWJvLW4nLAotICAgICAgICAgICAgICAgICgncmVhZG9ubHknLCAnYWN0aXZlJywgJ2NvbWJvLXJhJyksCi0gICAgICAgICAgICAgICAgKCdmb2N1cycsICdhY3RpdmUnLCAnY29tYm8tZmEnKSwKLSAgICAgICAgICAgICAgICAoJ2FjdGl2ZScsICdjb21iby1hJyksICgnIXJlYWRvbmx5JywgJ2ZvY3VzJywgJ2NvbWJvLWYnKSwKLSAgICAgICAgICAgICAgICAoJ3JlYWRvbmx5JywgJ2NvbWJvLXInKSwKLSAgICAgICAgICAgICAgICB7J2JvcmRlcic6IFs0LCA2LCAyNCwgMTVdLCAncGFkZGluZyc6IFs0LCA0LCA1XSwKLSAgICAgICAgICAgICAgICAgJ3N0aWNreSc6ICduZXdzJ30KLSAgICAgICAgICAgICkKLSAgICAgICAgfSwKLSAgICAgICAgIkNvbWJvYm94LmRvd25hcnJvdyI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICdhcnJvdy1kJywgeydzdGlja3knOiAnZScsICdib3JkZXInOiBbMTUsIDAsIDAsIDBdfSkKLSAgICAgICAgIH0sCi0KLSAgICAgICAgIk5vdGVib29rLmNsaWVudCI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICdub3RlYm9vay1jJywgeydib3JkZXInOiA0fSkKLSAgICAgICAgfSwKLSAgICAgICAgIk5vdGVib29rLnRhYiI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICdub3RlYm9vay10bicsCi0gICAgICAgICAgICAgICAgKCJzZWxlY3RlZCIsICdub3RlYm9vay10cycpLCAoImFjdGl2ZSIsICdub3RlYm9vay10YScpLAotICAgICAgICAgICAgICAgIHsncGFkZGluZyc6IFswLCAyLCAwLCAwXSwgJ2JvcmRlcic6IFs0LCAxMCwgNCwgMTBdfQotICAgICAgICAgICAgKQotICAgICAgICB9LAotCi0gICAgICAgICJQcm9ncmVzc2Jhci50cm91Z2giOiB7ImVsZW1lbnQgY3JlYXRlIjoKLSAgICAgICAgICAgICgiaW1hZ2UiLCAnaHByb2dyZXNzLXQnLCB7J2JvcmRlcic6IDJ9KQotICAgICAgICB9LAotICAgICAgICAiSG9yaXpvbnRhbC5Qcm9ncmVzc2Jhci5wYmFyIjogeyJlbGVtZW50IGNyZWF0ZSI6Ci0gICAgICAgICAgICAoImltYWdlIiwgJ2hwcm9ncmVzcy1iJywgeydib3JkZXInOiBbMiwgOV19KQotICAgICAgICB9LAotICAgICAgICAiVmVydGljYWwuUHJvZ3Jlc3NiYXIucGJhciI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICd2cHJvZ3Jlc3MtYicsIHsnYm9yZGVyJzogWzksIDJdfSkKLSAgICAgICAgfSwKLQotICAgICAgICAiVHJlZWhlYWRpbmcuY2VsbCI6IHsiZWxlbWVudCBjcmVhdGUiOgotICAgICAgICAgICAgKCJpbWFnZSIsICd0cmVlLW4nLAotICAgICAgICAgICAgICAgICgicHJlc3NlZCIsICd0cmVlLXAnKSwKLSAgICAgICAgICAgICAgICB7J2JvcmRlcic6IFs0LCAxMF0sICdwYWRkaW5nJzogNCwgJ3N0aWNreSc6ICduZXdzJ30KLSAgICAgICAgICAgICkKLSAgICAgICAgfQotCi0gICAgfSkKLSAgICBzdHlsZS50aGVtZV91c2UoInBsYXN0aWsiKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay9yb3VuZGZyYW1lLnB5IGIvRGVtby90a2ludGVyL3R0ay9yb3VuZGZyYW1lLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTM2ODVhLi4wMDAwMDAwCi0tLSBhL0RlbW8vdGtpbnRlci90dGsvcm91bmRmcmFtZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0iIiJUdGsgRnJhbWUgd2l0aCByb3VuZGVkIGNvcm5lcnMuCi0KLUJhc2VkIG9uIGFuIGV4YW1wbGUgYnkgQnJ5YW4gT2FrbGV5LCBmb3VuZCBhdDogaHR0cDovL3dpa2kudGNsLnRrLzIwMTUyIiIiCi1pbXBvcnQgdGtpbnRlcgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKLQotcm9vdCA9IHRraW50ZXIuVGsoKQotCi1pbWcxID0gdGtpbnRlci5QaG90b0ltYWdlKCJmcmFtZUZvY3VzQm9yZGVyIiwgZGF0YT0iIiIKLVIwbEdPRGxoUUFCQUFQY0FBSHgrZk1UQ3hLU2lwT1RpNUpTU2xOVFMxTFN5dFBUeTlJeUtqTXpLekt5cQotck96cTdKeWFuTnphM0x5NnZQejYvSVNDaE1UR3hLU21wT1RtNUpTV2xOVFcxTFMydFBUMjlJeU9qTXpPCi16S3l1ck96dTdKeWVuTnplM0x5K3ZQeisvT2tBS09VQTVJRUFFbndBQUFDdVFBQ1VBQUZCQUFCK0FGWWQKLVFBQzBBQUJCQUFCK0FJak1BdUVFQUJJTkFBQUFBSE1nQVFBQUFBQUFBQUFBQUtqU3hPSUVKQklJcFFBQQotc1JnQk1PNEFBSkFBQUh3Q0FIQUFBQVVBQUpFQUFId0FBUCtlRVA4Q1ovOEFpZjhBQUcwQkRBVUFBSkVBCi1BSHdBQUlYWUFPZnhBSUVTQUh3QUFBQkFNUUFiTUJaR01BQUFJRWdnSlFNQUlBQUFBQUFBZnFnYVhFU0kKLTVCZEJFZ0IrQUdnQUxHRUFBQllBQUFBQUFBQ3NOd0FFQUFBTUx3QUFBSDYxTVFCSUFBQkNNOEIrQUFBVQotQUFBQUFBQUFwUUFBc2Y4QnJ2OEFsUDhBUWY4QWZ2OEF6UDhBMVA4QVFmOEFmZ0FBckFBQUJBQUFEQUFBCi1BQUNRREFEakFBQVNBQUFBQUFDQUFBRFZBQlpCQUFCK0FMak13T0lFaHhJTlVBQUFBTklnQU9ZQUFJRUEKLUFId0FBR2pTQUdFRUFCWUlBQUFBQUVvQkIrTUFBSUVBQUh3Q0FDQUJBSnNBQUZBQUFBQUFBR2pKQUdHTAotQUFGQkZnQitBR21JQUFBUUFBQkhBQUIrQVBRb0FPRS9BQklBQUFBQUFBRFFBQURqQUFBU0FBQUFBUGlGCi1BUGNyQUJLREFBQjhBQmdBR080QUFKQUFxWHdBQUhBQUFBVUFBSkVBQUh3QUFQOEFBUDhBQVA4QUFQOEEKLUFHMHBJd1czQUpHU0FIeDhBRW9jSS9RQUFJQ3BBSHdBQUFBMFNBQms2eGFERWdCOEFBRC8vd0QvL3dELwotL3dELy8yZ0FBR0VBQUJZQUFBQUFBQUMwL0FIajVBQVNFZ0FBQUFBMDFnQmtXQUNEVEFCOEFGZjQzUFQzCi01SUFTRW53QUFPQVlkK1B1TUJLUVR3QjhBR2dBRUdHMzVSYVNFZ0I4QU9qL05PTC9aQkwvZ3dEL2ZNa2MKLXE0c0E1VUdwRW40QUFJZzAyeEJrLzBlRC8zNThmeC80aUFEazVRQVNFZ0FBQUFMbkhBQmtBQUNEcVFCOAotQU15SU5BUmtaQTJEZ3dCOGZCQUJITDBBQUVVQXFRQUFBSUF4S09NQVB4SXdBQUFBQUlTY0FPUHhBQklTCi1BQUFBQUlJQW5Rd0EvMElBUjNjQUFDd0FBQUFBUUFCQUFBQUkvd0EvQ0J4SXNLREJnd2dUS2x6SXNLRkQKLWd4Y2VObnhBc2FMRml4Z3pVcnpBc1dQRkN3OGtEZ3k1RWVRRGtCeFBvbHlwc21YS2x4MWhYblM0OFVFSAotQ3dvb01DREFnSUpPQ2p4OTlnejZrK2pRbmtXUjlsUmdZWURKa0FrL0RsQWdJTUlDWmxpemF0M0t0YXRYCi1yQXNpQ05EZ3RDSkNsUWtvRk1ncXN1M0FyQmtvWkRnQTh1REpBd2s0YkdEbXRtOUJaZ2NZekswNzhtNEQKLUNnZjQrbDBza05rR0NnM29VaFI0ZDRHQ0RJb1pNMlpXUU1FQ3laUXZMTWdnSWJQbXpRSXlmQ1o1WWNNRQotQXdGTW4vYkxMSUtCQ1J0TUhsalFRY0RWMlpxWlRSRFFZZldGQXdNcVVKQU52Qzh6QmhVV2JEaTVZVUFCCi1Cc3lidDJWR29VS0gzQWNtZFArSW0xMjd4T2NKaWgrb1hzRURkdk9MdVFmSU1HQkQ5UXdCbHNPbnpjQkQKLWhmcnN1VmZlZmd6SlI1OTlBK0NuSDRIYjlmY2ZndTI5eDZCSUJnS1lZSDREVG9qUWMvNVpHR0dHR2hwVQotSVlJS2doZ2lRUncrR0tDRUp4Wkl3WHdXbHRoaVF5bDZLT0NNTHNKSUlvWTRMbFFqaERmMm1OQ0k5L0VvCi01SVlPMnNqaWtYKzllR0NSQ3pMNVY1SkFMaWxsWTA3R2FPU1ZiMUc1b29rekVubGhsRngrOE9PWFpiNlYKLTVZNWtjbmxtY2tHbUthYU1hWnJwSlp4V1hqbm5sbVcrK1dHZFpxNVpYUUVldEttbmx4UGdsNmVVWWhKcQotS0tPSTBpbW5vTmJGMlNjRkhRSkp3Vzk5VHNCQUFBVllXRUFBSEVRQVpvaTFjUURxQUFlRVYwRUFDcFQvCi1KcWNBQ2dSUUFXNnVOV0NiWUtjeXlFd0dEQmdRd2EydFRsQkJBaFlJUU1GZWpDNUFnUUFXSk5EQUJLM3kKLWxvRURFakNnVjYvYU9jWUJBd3A0a0lGNnJWa1hnQUVjOElRWlZpZkNCUlFIR3F5YTIzSEdJcHNUQmdTVQotT3NGWC9QYnJWVmpwWXNDQUJBNGtRQ3hIdTExb2dBUVVJT0F3QVRwQkxERlFGRTlzY2NVWVMwd0F4RDVoCi00REFDRkVnZ2JBSGszalZCQS9ndFRJSEhFQURnOHNzd3h5enp6RFFEQUFFRUNHQVFzZ0hpVGlzWlJlc04KLWdMSUhCaWp3TFFFWWVQengwa3czN2ZUU1NqdU1yN1pNemZjZ1laVVppNThER3NUS3diZGdheXQyMkdTUAotYlhiWVkzTWdnUUlhT05EekFKOFI5a0ZsUWhlUVFBQU9XR0NBQVJyd2R0MjNCbjhIN3ZmZ2dCTXVlT0VHCi1XT0JCQUFrVTBFQjlvQkdVZFhJRlpKQkFCQUVFc1BqbW1uZk8rZWVlaC81NUJCRWswUGgvRThROW1lUXEKLWJiREFCQU4wMEVBREZSUlErKzIyNTQ3NzdycjNqcnZqRlRUUXdRQ3B6N3U2UVJ1dDUvb0V6QS9nL1BQUQotUnkvOTlOSXovL29HclpwVVVFQUFPdz09IiIiKQotCi1pbWcyID0gdGtpbnRlci5QaG90b0ltYWdlKCJmcmFtZUJvcmRlciIsIGRhdGE9IiIiCi1SMGxHT0RsaFFBQkFBUGNBQUh4K2ZNVEN4S1NpcE9UaTVKU1NsTlRTMUxTeXRQVHk5SXlLak16S3pLeXEKLXJPenE3Snlhbk56YTNMeTZ2UHo2L0lTQ2hNVEd4S1NtcE9UbTVKU1dsTlRXMUxTMnRQVDI5SXlPak16Twotekt5dXJPenU3Snllbk56ZTNMeSt2UHorL09rQUtPVUE1SUVBRW53QUFBQ3VRQUNVQUFGQkFBQitBRllkCi1RQUMwQUFCQkFBQitBSWpNQXVFRUFCSU5BQUFBQUhNZ0FRQUFBQUFBQUFBQUFLalN4T0lFSkJJSXBRQUEKLXNSZ0JNTzRBQUpBQUFId0NBSEFBQUFVQUFKRUFBSHdBQVArZUVQOENaLzhBaWY4QUFHMEJEQVVBQUpFQQotQUh3QUFJWFlBT2Z4QUlFU0FId0FBQUJBTVFBYk1CWkdNQUFBSUVnZ0pRTUFJQUFBQUFBQWZxZ2FYRVNJCi01QmRCRWdCK0FHZ0FMR0VBQUJZQUFBQUFBQUNzTndBRUFBQU1Md0FBQUg2MU1RQklBQUJDTThCK0FBQVUKLUFBQUFBQUFBcFFBQXNmOEJydjhBbFA4QVFmOEFmdjhBelA4QTFQOEFRZjhBZmdBQXJBQUFCQUFBREFBQQotQUFDUURBRGpBQUFTQUFBQUFBQ0FBQURWQUJaQkFBQitBTGpNd09JRWh4SU5VQUFBQU5JZ0FPWUFBSUVBCi1BSHdBQUdqU0FHRUVBQllJQUFBQUFFb0JCK01BQUlFQUFId0NBQ0FCQUpzQUFGQUFBQUFBQUdqSkFHR0wKLUFBRkJGZ0IrQUdtSUFBQVFBQUJIQUFCK0FQUW9BT0UvQUJJQUFBQUFBQURRQUFEakFBQVNBQUFBQVBpRgotQVBjckFCS0RBQUI4QUJnQUdPNEFBSkFBcVh3QUFIQUFBQVVBQUpFQUFId0FBUDhBQVA4QUFQOEFBUDhBCi1BRzBwSXdXM0FKR1NBSHg4QUVvY0kvUUFBSUNwQUh3QUFBQTBTQUJrNnhhREVnQjhBQUQvL3dELy93RC8KLS93RC8vMmdBQUdFQUFCWUFBQUFBQUFDMC9BSGo1QUFTRWdBQUFBQTAxZ0JrV0FDRFRBQjhBRmY0M1BUMwotNUlBU0Vud0FBT0FZZCtQdU1CS1FUd0I4QUdnQUVHRzM1UmFTRWdCOEFPai9OT0wvWkJML2d3RC9mTWtjCi1xNHNBNVVHcEVuNEFBSWcwMnhCay8wZUQvMzU4ZngvNGlBRGs1UUFTRWdBQUFBTG5IQUJrQUFDRHFRQjgKLUFNeUlOQVJrWkEyRGd3QjhmQkFCSEwwQUFFVUFxUUFBQUlBeEtPTUFQeEl3QUFBQUFJU2NBT1B4QUJJUwotQUFBQUFJSUFuUXdBLzBJQVIzY0FBQ3dBQUFBQVFBQkFBQUFJL3dBL0NCeElzS0RCZ3dnVEtseklzS0ZECi1neGNlTm54QXNhTEZpeGd6VXJ6QXNXUEZDdzhrRGd5NUVlUURrQnhQb2x5cHNtWEtseDFoWG5TNDhVRUgKLUN3b29NQ0RBZ0lKT0NqeDk5Z3o2aytqUW5rV1I5bFJnWVlESmtBay9EbEFnSU1JQ2tWZ0hMb2dnUUlQVAotaWdoVkpxQlFJS3ZaZ2hrb1pEZ0E4dURKQXdrNGJEaExkK0FCQm12YmpuemJnTUtCdW9BL2JLRFFnQzFGCi1nVzhYS01nUU9IQUJCUXNNSTc2d0lJT0V4bzBGWkloTThzS0dDUVlDWUE0Y3djQ0VEU1lQTE9nZzRPcm8KLXVoTUVkT0I4NGNDQUNoUmVCMlpRWWNHR2t4c0dGR0NnR3pDRkNoMVFINWpRSVczeHVnd1N6RDRRdklJSAotNHMvUFVnaVFZY0NHNEJrQzVQL09icGFCaHdyZXExOG5iM1o3OSs4RHdvOW5MOUk4ZXZqV3NkT1g2RDU5Ci1mUEg3MVhlZWYva0Z5QjkzL3NsbjRFUDJFYmplZ2czMUI1K0NFRExVSUg0UFZxaVFoT0FCcUtGQ0Y2cW4KLTM0Y0hjZmpmZkNRYUZPSnRHYVpZa0lrVXVsalFpZ1hLK0NLQ0UzcG80MEEwdHJnampEcnUrRUdQSS82SQotWTRjbzdraWtrQU1CbWFTTlN6TDVnWk5TRGprZ2hrWGFhR0lCSGp3cFk0Z1RoSmVsakZ0MldTV1lNUXBaCi01cGd1VW5DbGVoUzR0dU1FREFSUWdIOEZCTUJCQkV4R3dJR2RBeHl3WEFVQktIQ1prQUlvRUVBRnAzM1cKLVFHbDQ3WmdCQXdaRXdLaWdFMVNRZ0FVQ1VEQ1hpd3RRSUlBRkNUUXdnYUNyWmVDQUJBeklsZUlHSERELwotb0lBSEdVem5tWEFCR01BQlQ0eHBtQllCSEdnQUtHcTFaYnBwVGhnQUc4RUVBVzYxS3dZTVNPQkFBcGR5Ci1wTnAvQmtoQUFRTGNFcUNUdCtBQ0pXNjQ1STVyTHJnRWVPc1RCdHdpUUlFRWxSWmc2MXNUTkJCZXRoU3cKLUN3RUEvUGJyNzc4QUJ5d3dBQkJBZ0FBRzd4cEFxNm1HVVVUZEFQWjZZSUFDc1JLQUFidnRacXp4eGh4bgotakRHM3liYktGSGYzNlpWWXB1RTVvSUdoSE1UcWNxc3d2eXh6ekRTL0hETUhFaWlnZ1FNTER4Q1pYaDhrCi1CbkVCQ1FUZ2dBVUdHS0NCMGt0cjBQVFRURWZ0dE5SUVQyMkFCUjRFa0VBQkRYZ25HVUVuMzFaQUJnbEUKLUVFQUFXYWVOOXRwcXQ4MzIyMjFIRUVFQ1c2TTN3YytIZ2EzU0JndE1PREJBQncwMFVFRUJneGRPK09HRwotSjQ3NDRvWnpYVUVESFF4d043RjVHN1FSZFh4UG9Qa0FuSGZ1K2VlZ2h3NjY1bjF2SUtoSkJRVUVBRHM9IiIiKQotCi1zdHlsZSA9IHR0ay5TdHlsZSgpCi0KLXN0eWxlLmVsZW1lbnRfY3JlYXRlKCJSb3VuZGVkRnJhbWUiLCAiaW1hZ2UiLCAiZnJhbWVCb3JkZXIiLAotICAgICgiZm9jdXMiLCAiZnJhbWVGb2N1c0JvcmRlciIpLCBib3JkZXI9MTYsIHN0aWNreT0ibnNldyIpCi0KLXN0eWxlLmxheW91dCgiUm91bmRlZEZyYW1lIiwgWygiUm91bmRlZEZyYW1lIiwgeyJzdGlja3kiOiAibnNldyJ9KV0pCi1zdHlsZS5jb25maWd1cmUoIlRFbnRyeSIsIGJvcmRlcndpZHRoPTApCi0KLWZyYW1lID0gdHRrLkZyYW1lKHN0eWxlPSJSb3VuZGVkRnJhbWUiLCBwYWRkaW5nPTEwKQotZnJhbWUucGFjayhmaWxsPSd4JykKLQotZnJhbWUyID0gdHRrLkZyYW1lKHN0eWxlPSJSb3VuZGVkRnJhbWUiLCBwYWRkaW5nPTEwKQotZnJhbWUyLnBhY2soZmlsbD0nYm90aCcsIGV4cGFuZD0xKQotCi1lbnRyeSA9IHR0ay5FbnRyeShmcmFtZSwgdGV4dD0nVGVzdCcpCi1lbnRyeS5wYWNrKGZpbGw9J3gnKQotZW50cnkuYmluZCgiPEZvY3VzSW4+IiwgbGFtYmRhIGV2dDogZnJhbWUuc3RhdGUoWyJmb2N1cyJdKSkKLWVudHJ5LmJpbmQoIjxGb2N1c091dD4iLCBsYW1iZGEgZXZ0OiBmcmFtZS5zdGF0ZShbIiFmb2N1cyJdKSkKLQotdGV4dCA9IHRraW50ZXIuVGV4dChmcmFtZTIsIGJvcmRlcndpZHRoPTAsIGJnPSJ3aGl0ZSIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wKQotdGV4dC5wYWNrKGZpbGw9J2JvdGgnLCBleHBhbmQ9MSkKLXRleHQuYmluZCgiPEZvY3VzSW4+IiwgbGFtYmRhIGV2dDogZnJhbWUyLnN0YXRlKFsiZm9jdXMiXSkpCi10ZXh0LmJpbmQoIjxGb2N1c091dD4iLCBsYW1iZGEgZXZ0OiBmcmFtZTIuc3RhdGUoWyIhZm9jdXMiXSkpCi0KLXJvb3QubWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay90aGVtZV9zZWxlY3Rvci5weSBiL0RlbW8vdGtpbnRlci90dGsvdGhlbWVfc2VsZWN0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5YzVhNzIuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL3R0ay90aGVtZV9zZWxlY3Rvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLSIiIlR0ayBUaGVtZSBTZWxlY3RvciB2Mi4KLQotVGhpcyBpcyBhbiBpbXByb3ZlbWVudCBmcm9tIHRoZSBvdGhlciB0aGVtZSBzZWxlY3RvciAodGhlbWVzX2NvbWJvLnB5KQotc2luY2Ugbm93IHlvdSBjYW4gbm90aWNlIHRoZW1lIGNoYW5nZXMgaW4gVHRrIENvbWJvYm94LCBUdGsgRnJhbWUsCi1UdGsgTGFiZWwgYW5kIFR0ayBCdXR0b24uCi0iIiIKLWltcG9ydCB0a2ludGVyCi1mcm9tIHRraW50ZXIgaW1wb3J0IHR0awotCi1jbGFzcyBBcHAodHRrLkZyYW1lKToKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHR0ay5GcmFtZS5fX2luaXRfXyhzZWxmLCBib3JkZXJ3aWR0aD0zKQotCi0gICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQotCi0gICAgICAgICMgWFhYIElkZWFsbHkgSSB3b3VsZG4ndCB3YW50IHRvIGNyZWF0ZSBhIFRraW50ZXIuSW50VmFyIHRvIG1ha2UKLSAgICAgICAgIyAgICAgaXQgd29ya3Mgd2l0aCBDaGVja2J1dHRvbiB2YXJpYWJsZSBvcHRpb24uCi0gICAgICAgIHNlbGYudGhlbWVfYXV0b2NoYW5nZSA9IHRraW50ZXIuSW50VmFyKHNlbGYsIDApCi0gICAgICAgIHNlbGYuX3NldHVwX3dpZGdldHMoKQotCi0gICAgZGVmIF9jaGFuZ2VfdGhlbWUoc2VsZik6Ci0gICAgICAgIHNlbGYuc3R5bGUudGhlbWVfdXNlKHNlbGYudGhlbWVzX2NvbWJvLmdldCgpKQotCi0gICAgZGVmIF90aGVtZV9zZWxfY2hhbmdlZChzZWxmLCB3aWRnZXQpOgotICAgICAgICBpZiBzZWxmLnRoZW1lX2F1dG9jaGFuZ2UuZ2V0KCk6Ci0gICAgICAgICAgICBzZWxmLl9jaGFuZ2VfdGhlbWUoKQotCi0gICAgZGVmIF9zZXR1cF93aWRnZXRzKHNlbGYpOgotICAgICAgICB0aGVtZXNfbGJsID0gdHRrLkxhYmVsKHNlbGYsIHRleHQ9IlRoZW1lcyIpCi0KLSAgICAgICAgdGhlbWVzID0gc2VsZi5zdHlsZS50aGVtZV9uYW1lcygpCi0gICAgICAgIHNlbGYudGhlbWVzX2NvbWJvID0gdHRrLkNvbWJvYm94KHNlbGYsIHZhbHVlcz10aGVtZXMsIHN0YXRlPSJyZWFkb25seSIpCi0gICAgICAgIHNlbGYudGhlbWVzX2NvbWJvLnNldCh0aGVtZXNbMF0pCi0gICAgICAgIHNlbGYudGhlbWVzX2NvbWJvLmJpbmQoIjw8Q29tYm9ib3hTZWxlY3RlZD4+Iiwgc2VsZi5fdGhlbWVfc2VsX2NoYW5nZWQpCi0KLSAgICAgICAgY2hhbmdlX2J0biA9IHR0ay5CdXR0b24oc2VsZiwgdGV4dD0nQ2hhbmdlIFRoZW1lJywKLSAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5fY2hhbmdlX3RoZW1lKQotCi0gICAgICAgIHRoZW1lX2NoYW5nZV9jaGVja2J0biA9IHR0ay5DaGVja2J1dHRvbihzZWxmLAotICAgICAgICAgICAgdGV4dD0iQ2hhbmdlIHRoZW1lcyB3aGVuIGNvbWJvYm94IGl0ZW0gaXMgYWN0aXZhdGVkIiwKLSAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYudGhlbWVfYXV0b2NoYW5nZSkKLQotICAgICAgICB0aGVtZXNfbGJsLmdyaWQoaXBhZHg9Niwgc3RpY2t5PSJ3IikKLSAgICAgICAgc2VsZi50aGVtZXNfY29tYm8uZ3JpZChyb3c9MCwgY29sdW1uPTEsIHBhZHg9Niwgc3RpY2t5PSJldyIpCi0gICAgICAgIGNoYW5nZV9idG4uZ3JpZChyb3c9MCwgY29sdW1uPTIsIHBhZHg9Niwgc3RpY2t5PSJlIikKLSAgICAgICAgdGhlbWVfY2hhbmdlX2NoZWNrYnRuLmdyaWQocm93PTEsIGNvbHVtbnNwYW49Mywgc3RpY2t5PSJ3IiwgcGFkeT02KQotCi0gICAgICAgIHRvcCA9IHNlbGYud2luZm9fdG9wbGV2ZWwoKQotICAgICAgICB0b3Aucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQotICAgICAgICB0b3AuY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQotICAgICAgICBzZWxmLmNvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MSkKLSAgICAgICAgc2VsZi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PSJuc2V3IiwgY29sdW1uc3Bhbj0zLCByb3dzcGFuPTIpCi0KLQotZGVmIG1haW4oKToKLSAgICBhcHAgPSBBcHAoKQotICAgIGFwcC5tYXN0ZXIudGl0bGUoIlRoZW1lIFNlbGVjdG9yIikKLSAgICBhcHAubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay90cmVldmlld19tdWx0aWNvbHVtbi5weSBiL0RlbW8vdGtpbnRlci90dGsvdHJlZXZpZXdfbXVsdGljb2x1bW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNzIyMzcuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL3R0ay90cmVldmlld19tdWx0aWNvbHVtbi5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi0iIiJEZW1vIGJhc2VkIG9uIHRoZSBkZW1vIG1jbGlzdCBpbmNsdWRlZCB3aXRoIHRrIHNvdXJjZSBkaXN0cmlidXRpb24uIiIiCi1pbXBvcnQgdGtpbnRlcgotaW1wb3J0IHRraW50ZXIuZm9udAotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKLQotdHJlZV9jb2x1bW5zID0gKCJjb3VudHJ5IiwgImNhcGl0YWwiLCAiY3VycmVuY3kiKQotdHJlZV9kYXRhID0gWwotICAgICgiQXJnZW50aW5hIiwgICAgICAiQnVlbm9zIEFpcmVzIiwgICAgICJBUlMiKSwKLSAgICAoIkF1c3RyYWxpYSIsICAgICAgIkNhbmJlcnJhIiwgICAgICAgICAiQVVEIiksCi0gICAgKCJCcmF6aWwiLCAgICAgICAgICJCcmF6aWxpYSIsICAgICAgICAgIkJSTCIpLAotICAgICgiQ2FuYWRhIiwgICAgICAgICAiT3R0YXdhIiwgICAgICAgICAgICJDQUQiKSwKLSAgICAoIkNoaW5hIiwgICAgICAgICAgIkJlaWppbmciLCAgICAgICAgICAiQ05ZIiksCi0gICAgKCJGcmFuY2UiLCAgICAgICAgICJQYXJpcyIsICAgICAgICAgICAgIkVVUiIpLAotICAgICgiR2VybWFueSIsICAgICAgICAiQmVybGluIiwgICAgICAgICAgICJFVVIiKSwKLSAgICAoIkluZGlhIiwgICAgICAgICAgIk5ldyBEZWxoaSIsICAgICAgICAiSU5SIiksCi0gICAgKCJJdGFseSIsICAgICAgICAgICJSb21lIiwgICAgICAgICAgICAgIkVVUiIpLAotICAgICgiSmFwYW4iLCAgICAgICAgICAiVG9reW8iLCAgICAgICAgICAgICJKUFkiKSwKLSAgICAoIk1leGljbyIsICAgICAgICAgIk1leGljbyBDaXR5IiwgICAgICAiTVhOIiksCi0gICAgKCJSdXNzaWEiLCAgICAgICAgICJNb3Njb3ciLCAgICAgICAgICAgIlJVQiIpLAotICAgICgiU291dGggQWZyaWNhIiwgICAiUHJldG9yaWEiLCAgICAgICAgICJaQVIiKSwKLSAgICAoIlVuaXRlZCBLaW5nZG9tIiwgIkxvbmRvbiIsICAgICAgICAgICAiR0JQIiksCi0gICAgKCJVbml0ZWQgU3RhdGVzIiwgICJXYXNoaW5ndG9uLCBELkMuIiwgIlVTRCIpCi0gICAgXQotCi1kZWYgc29ydGJ5KHRyZWUsIGNvbCwgZGVzY2VuZGluZyk6Ci0gICAgIiIiU29ydCB0cmVlIGNvbnRlbnRzIHdoZW4gYSBjb2x1bW4gaXMgY2xpY2tlZCBvbi4iIiIKLSAgICAjIGdyYWIgdmFsdWVzIHRvIHNvcnQKLSAgICBkYXRhID0gWyh0cmVlLnNldChjaGlsZCwgY29sKSwgY2hpbGQpIGZvciBjaGlsZCBpbiB0cmVlLmdldF9jaGlsZHJlbignJyldCi0KLSAgICAjIHJlb3JkZXIgZGF0YQotICAgIGRhdGEuc29ydChyZXZlcnNlPWRlc2NlbmRpbmcpCi0gICAgZm9yIGluZHgsIGl0ZW0gaW4gZW51bWVyYXRlKGRhdGEpOgotICAgICAgICB0cmVlLm1vdmUoaXRlbVsxXSwgJycsIGluZHgpCi0KLSAgICAjIHN3aXRjaCB0aGUgaGVhZGluZyBzbyB0aGF0IGl0IHdpbGwgc29ydCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uCi0gICAgdHJlZS5oZWFkaW5nKGNvbCwKLSAgICAgICAgY29tbWFuZD1sYW1iZGEgY29sPWNvbDogc29ydGJ5KHRyZWUsIGNvbCwgaW50KG5vdCBkZXNjZW5kaW5nKSkpCi0KLWNsYXNzIEFwcChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi50cmVlID0gTm9uZQotICAgICAgICBzZWxmLl9zZXR1cF93aWRnZXRzKCkKLSAgICAgICAgc2VsZi5fYnVpbGRfdHJlZSgpCi0KLSAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6Ci0gICAgICAgIG1zZyA9IHR0ay5MYWJlbCh3cmFwbGVuZ3RoPSI0aSIsIGp1c3RpZnk9ImxlZnQiLCBhbmNob3I9Im4iLAotICAgICAgICAgICAgcGFkZGluZz0oMTAsIDIsIDEwLCA2KSwKLSAgICAgICAgICAgIHRleHQ9KCJUdGsgaXMgdGhlIG5ldyBUayB0aGVtZWQgd2lkZ2V0IHNldC4gT25lIG9mIHRoZSB3aWRnZXRzIGl0ICIKLSAgICAgICAgICAgICAgICAgICJpbmNsdWRlcyBpcyBhIHRyZWUgd2lkZ2V0LCB3aGljaCBjYW4gYmUgY29uZmlndXJlZCB0byAiCi0gICAgICAgICAgICAgICAgICAiZGlzcGxheSBtdWx0aXBsZSBjb2x1bW5zIG9mIGluZm9ybWF0aW9uYWwgZGF0YSB3aXRob3V0ICIKLSAgICAgICAgICAgICAgICAgICJkaXNwbGF5aW5nIHRoZSB0cmVlIGl0c2VsZi4gVGhpcyBpcyBhIHNpbXBsZSB3YXkgdG8gYnVpbGQgIgotICAgICAgICAgICAgICAgICAgImEgbGlzdGJveCB0aGF0IGhhcyBtdWx0aXBsZSBjb2x1bW5zLiBDbGlja2luZyBvbiB0aGUgIgotICAgICAgICAgICAgICAgICAgImhlYWRpbmcgZm9yIGEgY29sdW1uIHdpbGwgc29ydCB0aGUgZGF0YSBieSB0aGF0IGNvbHVtbi4gIgotICAgICAgICAgICAgICAgICAgIllvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIGJ5IGRyYWdnaW5nICIKLSAgICAgICAgICAgICAgICAgICJ0aGUgYm91bmRhcnkgYmV0d2VlbiB0aGVtLiIpKQotICAgICAgICBtc2cucGFjayhmaWxsPSd4JykKLQotICAgICAgICBjb250YWluZXIgPSB0dGsuRnJhbWUoKQotICAgICAgICBjb250YWluZXIucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpCi0KLSAgICAgICAgIyBYWFggU291bmRzIGxpa2UgYSBnb29kIHN1cHBvcnQgY2xhc3Mgd291bGQgYmUgb25lIGZvciBjb25zdHJ1Y3RpbmcKLSAgICAgICAgIyAgICAgYSB0cmVldmlldyB3aXRoIHNjcm9sbGJhcnMuCi0gICAgICAgIHNlbGYudHJlZSA9IHR0ay5UcmVldmlldyhjb2x1bW5zPXRyZWVfY29sdW1ucywgc2hvdz0iaGVhZGluZ3MiKQotICAgICAgICB2c2IgPSB0dGsuU2Nyb2xsYmFyKG9yaWVudD0idmVydGljYWwiLCBjb21tYW5kPXNlbGYudHJlZS55dmlldykKLSAgICAgICAgaHNiID0gdHRrLlNjcm9sbGJhcihvcmllbnQ9Imhvcml6b250YWwiLCBjb21tYW5kPXNlbGYudHJlZS54dmlldykKLSAgICAgICAgc2VsZi50cmVlLmNvbmZpZ3VyZSh5c2Nyb2xsY29tbWFuZD12c2Iuc2V0LCB4c2Nyb2xsY29tbWFuZD1oc2Iuc2V0KQotICAgICAgICBzZWxmLnRyZWUuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnNldycsIGluXz1jb250YWluZXIpCi0gICAgICAgIHZzYi5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3RpY2t5PSducycsIGluXz1jb250YWluZXIpCi0gICAgICAgIGhzYi5ncmlkKGNvbHVtbj0wLCByb3c9MSwgc3RpY2t5PSdldycsIGluXz1jb250YWluZXIpCi0KLSAgICAgICAgY29udGFpbmVyLmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQotICAgICAgICBjb250YWluZXIuZ3JpZF9yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCi0KLSAgICBkZWYgX2J1aWxkX3RyZWUoc2VsZik6Ci0gICAgICAgIGZvciBjb2wgaW4gdHJlZV9jb2x1bW5zOgotICAgICAgICAgICAgc2VsZi50cmVlLmhlYWRpbmcoY29sLCB0ZXh0PWNvbC50aXRsZSgpLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhIGM9Y29sOiBzb3J0Ynkoc2VsZi50cmVlLCBjLCAwKSkKLSAgICAgICAgICAgICMgWFhYIHRrRm9udC5Gb250KCkubWVhc3VyZSBleHBlY3RlZCBhcmdzIGFyZSBpbmNvcnJlY3QgYWNjb3JkaW5nCi0gICAgICAgICAgICAjICAgICB0byB0aGUgVGsgZG9jcwotICAgICAgICAgICAgc2VsZi50cmVlLmNvbHVtbihjb2wsIHdpZHRoPXRraW50ZXIuZm9udC5Gb250KCkubWVhc3VyZShjb2wudGl0bGUoKSkpCi0KLSAgICAgICAgZm9yIGl0ZW0gaW4gdHJlZV9kYXRhOgotICAgICAgICAgICAgc2VsZi50cmVlLmluc2VydCgnJywgJ2VuZCcsIHZhbHVlcz1pdGVtKQotCi0gICAgICAgICAgICAjIGFkanVzdCBjb2x1bW5zIGxlbmdodHMgaWYgbmVjZXNzYXJ5Ci0gICAgICAgICAgICBmb3IgaW5keCwgdmFsIGluIGVudW1lcmF0ZShpdGVtKToKLSAgICAgICAgICAgICAgICBpbGVuID0gdGtpbnRlci5mb250LkZvbnQoKS5tZWFzdXJlKHZhbCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLnRyZWUuY29sdW1uKHRyZWVfY29sdW1uc1tpbmR4XSwgd2lkdGg9Tm9uZSkgPCBpbGVuOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnRyZWUuY29sdW1uKHRyZWVfY29sdW1uc1tpbmR4XSwgd2lkdGg9aWxlbikKLQotZGVmIG1haW4oKToKLSAgICByb290ID0gdGtpbnRlci5UaygpCi0gICAgcm9vdC53bV90aXRsZSgiTXVsdGktQ29sdW1uIExpc3QiKQotICAgIHJvb3Qud21faWNvbm5hbWUoIm1jbGlzdCIpCi0KLSAgICBpbXBvcnQgcGxhc3Rpa190aGVtZQotICAgIHRyeToKLSAgICAgICAgcGxhc3Rpa190aGVtZS5pbnN0YWxsKCd+L3RpbGUtdGhlbWVzL3BsYXN0aWsvcGxhc3RpaycpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgaW1wb3J0IHdhcm5pbmdzCi0gICAgICAgIHdhcm5pbmdzLndhcm4oInBsYXN0aWsgdGhlbWUgYmVpbmcgdXNlZCB3aXRob3V0IGltYWdlcyIpCi0KLSAgICBhcHAgPSBBcHAoKQotICAgIHJvb3QubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL3R0ay90dGtjYWxlbmRhci5weSBiL0RlbW8vdGtpbnRlci90dGsvdHRrY2FsZW5kYXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMzVmMWYuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL3R0ay90dGtjYWxlbmRhci5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0iIiIKLVNpbXBsZSBjYWxlbmRhciB1c2luZyB0dGsgVHJlZXZpZXcgdG9nZXRoZXIgd2l0aCBjYWxlbmRhciBhbmQgZGF0ZXRpbWUKLWNsYXNzZXMuCi0iIiIKLWltcG9ydCBjYWxlbmRhcgotaW1wb3J0IHRraW50ZXIKLWltcG9ydCB0a2ludGVyLmZvbnQKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCi0KLWRlZiBnZXRfY2FsZW5kYXIobG9jYWxlLCBmd2RheSk6Ci0gICAgIyBpbnN0YW50aWF0ZSBwcm9wZXIgY2FsZW5kYXIgY2xhc3MKLSAgICBpZiBsb2NhbGUgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIGNhbGVuZGFyLlRleHRDYWxlbmRhcihmd2RheSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gY2FsZW5kYXIuTG9jYWxlVGV4dENhbGVuZGFyKGZ3ZGF5LCBsb2NhbGUpCi0KLWNsYXNzIENhbGVuZGFyKHR0ay5GcmFtZSk6Ci0gICAgIyBYWFggVG9EbzogY2dldCBhbmQgY29uZmlndXJlCi0KLSAgICBkYXRldGltZSA9IGNhbGVuZGFyLmRhdGV0aW1lLmRhdGV0aW1lCi0gICAgdGltZWRlbHRhID0gY2FsZW5kYXIuZGF0ZXRpbWUudGltZWRlbHRhCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsICoqa3cpOgotICAgICAgICAiIiIKLSAgICAgICAgV0lER0VULVNQRUNJRklDIE9QVElPTlMKLQotICAgICAgICAgICAgbG9jYWxlLCBmaXJzdHdlZWtkYXksIHllYXIsIG1vbnRoLCBzZWxlY3RiYWNrZ3JvdW5kLAotICAgICAgICAgICAgc2VsZWN0Zm9yZWdyb3VuZAotICAgICAgICAiIiIKLSAgICAgICAgIyByZW1vdmUgY3VzdG9tIG9wdGlvbnMgZnJvbSBrdyBiZWZvcmUgaW5pdGlhbGl6YXRpbmcgdHRrLkZyYW1lCi0gICAgICAgIGZ3ZGF5ID0ga3cucG9wKCdmaXJzdHdlZWtkYXknLCBjYWxlbmRhci5NT05EQVkpCi0gICAgICAgIHllYXIgPSBrdy5wb3AoJ3llYXInLCBzZWxmLmRhdGV0aW1lLm5vdygpLnllYXIpCi0gICAgICAgIG1vbnRoID0ga3cucG9wKCdtb250aCcsIHNlbGYuZGF0ZXRpbWUubm93KCkubW9udGgpCi0gICAgICAgIGxvY2FsZSA9IGt3LnBvcCgnbG9jYWxlJywgTm9uZSkKLSAgICAgICAgc2VsX2JnID0ga3cucG9wKCdzZWxlY3RiYWNrZ3JvdW5kJywgJyNlY2ZmYzQnKQotICAgICAgICBzZWxfZmcgPSBrdy5wb3AoJ3NlbGVjdGZvcmVncm91bmQnLCAnIzA1NjQwZScpCi0KLSAgICAgICAgc2VsZi5fZGF0ZSA9IHNlbGYuZGF0ZXRpbWUoeWVhciwgbW9udGgsIDEpCi0gICAgICAgIHNlbGYuX3NlbGVjdGlvbiA9IE5vbmUgIyBubyBkYXRlIHNlbGVjdGVkCi0KLSAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlciwgKiprdykKLQotICAgICAgICBzZWxmLl9jYWwgPSBnZXRfY2FsZW5kYXIobG9jYWxlLCBmd2RheSkKLQotICAgICAgICBzZWxmLl9fc2V0dXBfc3R5bGVzKCkgICAgICAgIyBjcmVhdGVzIGN1c3RvbSBzdHlsZXMKLSAgICAgICAgc2VsZi5fX3BsYWNlX3dpZGdldHMoKSAgICAgICMgcGFjay9ncmlkIHVzZWQgd2lkZ2V0cwotICAgICAgICBzZWxmLl9fY29uZmlnX2NhbGVuZGFyKCkgICAgIyBhZGp1c3QgY2FsZW5kYXIgY29sdW1ucyBhbmQgc2V0dXAgdGFncwotICAgICAgICAjIGNvbmZpZ3VyZSBhIGNhbnZhcywgYW5kIHByb3BlciBiaW5kaW5ncywgZm9yIHNlbGVjdGluZyBkYXRlcwotICAgICAgICBzZWxmLl9fc2V0dXBfc2VsZWN0aW9uKHNlbF9iZywgc2VsX2ZnKQotCi0gICAgICAgICMgc3RvcmUgaXRlbXMgaWRzLCB1c2VkIGZvciBpbnNlcnRpb24gbGF0ZXIKLSAgICAgICAgc2VsZi5faXRlbXMgPSBbc2VsZi5fY2FsZW5kYXIuaW5zZXJ0KCcnLCAnZW5kJywgdmFsdWVzPScnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKDYpXQotICAgICAgICAjIGluc2VydCBkYXRlcyBpbiB0aGUgY3VycmVudGx5IGVtcHR5IGNhbGVuZGFyCi0gICAgICAgIHNlbGYuX2J1aWxkX2NhbGVuZGFyKCkKLQotICAgICAgICAjIHNldCB0aGUgbWluaW1hbCBzaXplIGZvciB0aGUgd2lkZ2V0Ci0gICAgICAgIHNlbGYuX2NhbGVuZGFyLmJpbmQoJzxNYXA+Jywgc2VsZi5fX21pbnNpemUpCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaXRlbSwgdmFsdWUpOgotICAgICAgICBpZiBpdGVtIGluICgneWVhcicsICdtb250aCcpOgotICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImF0dHJpYnV0ZSAnJXMnIGlzIG5vdCB3cml0ZWFibGUiICUgaXRlbSkKLSAgICAgICAgZWxpZiBpdGVtID09ICdzZWxlY3RiYWNrZ3JvdW5kJzoKLSAgICAgICAgICAgIHNlbGYuX2NhbnZhc1snYmFja2dyb3VuZCddID0gdmFsdWUKLSAgICAgICAgZWxpZiBpdGVtID09ICdzZWxlY3Rmb3JlZ3JvdW5kJzoKLSAgICAgICAgICAgIHNlbGYuX2NhbnZhcy5pdGVtY29uZmlndXJlKHNlbGYuX2NhbnZhcy50ZXh0LCBpdGVtPXZhbHVlKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHRrLkZyYW1lLl9fc2V0aXRlbV9fKHNlbGYsIGl0ZW0sIHZhbHVlKQotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGl0ZW0pOgotICAgICAgICBpZiBpdGVtIGluICgneWVhcicsICdtb250aCcpOgotICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZGF0ZSwgaXRlbSkKLSAgICAgICAgZWxpZiBpdGVtID09ICdzZWxlY3RiYWNrZ3JvdW5kJzoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYW52YXNbJ2JhY2tncm91bmQnXQotICAgICAgICBlbGlmIGl0ZW0gPT0gJ3NlbGVjdGZvcmVncm91bmQnOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhbnZhcy5pdGVtY2dldChzZWxmLl9jYW52YXMudGV4dCwgJ2ZpbGwnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgciA9IHR0ay50Y2xvYmpzX3RvX3B5KHtpdGVtOiB0dGsuRnJhbWUuX19nZXRpdGVtX18oc2VsZiwgaXRlbSl9KQotICAgICAgICAgICAgcmV0dXJuIHJbaXRlbV0KLQotICAgIGRlZiBfX3NldHVwX3N0eWxlcyhzZWxmKToKLSAgICAgICAgIyBjdXN0b20gdHRrIHN0eWxlcwotICAgICAgICBzdHlsZSA9IHR0ay5TdHlsZShzZWxmLm1hc3RlcikKLSAgICAgICAgYXJyb3dfbGF5b3V0ID0gbGFtYmRhIGRpcjogKAotICAgICAgICAgICAgWygnQnV0dG9uLmZvY3VzJywgeydjaGlsZHJlbic6IFsoJ0J1dHRvbi4lc2Fycm93JyAlIGRpciwgTm9uZSldfSldCi0gICAgICAgICkKLSAgICAgICAgc3R5bGUubGF5b3V0KCdMLlRCdXR0b24nLCBhcnJvd19sYXlvdXQoJ2xlZnQnKSkKLSAgICAgICAgc3R5bGUubGF5b3V0KCdSLlRCdXR0b24nLCBhcnJvd19sYXlvdXQoJ3JpZ2h0JykpCi0KLSAgICBkZWYgX19wbGFjZV93aWRnZXRzKHNlbGYpOgotICAgICAgICAjIGhlYWRlciBmcmFtZSBhbmQgaXRzIHdpZGdldHMKLSAgICAgICAgaGZyYW1lID0gdHRrLkZyYW1lKHNlbGYpCi0gICAgICAgIGxidG4gPSB0dGsuQnV0dG9uKGhmcmFtZSwgc3R5bGU9J0wuVEJ1dHRvbicsIGNvbW1hbmQ9c2VsZi5fcHJldl9tb250aCkKLSAgICAgICAgcmJ0biA9IHR0ay5CdXR0b24oaGZyYW1lLCBzdHlsZT0nUi5UQnV0dG9uJywgY29tbWFuZD1zZWxmLl9uZXh0X21vbnRoKQotICAgICAgICBzZWxmLl9oZWFkZXIgPSB0dGsuTGFiZWwoaGZyYW1lLCB3aWR0aD0xNSwgYW5jaG9yPSdjZW50ZXInKQotICAgICAgICAjIHRoZSBjYWxlbmRhcgotICAgICAgICBzZWxmLl9jYWxlbmRhciA9IHR0ay5UcmVldmlldyhzaG93PScnLCBzZWxlY3Rtb2RlPSdub25lJywgaGVpZ2h0PTcpCi0KLSAgICAgICAgIyBwYWNrIHRoZSB3aWRnZXRzCi0gICAgICAgIGhmcmFtZS5wYWNrKGluXz1zZWxmLCBzaWRlPSd0b3AnLCBwYWR5PTQsIGFuY2hvcj0nY2VudGVyJykKLSAgICAgICAgbGJ0bi5ncmlkKGluXz1oZnJhbWUpCi0gICAgICAgIHNlbGYuX2hlYWRlci5ncmlkKGluXz1oZnJhbWUsIGNvbHVtbj0xLCByb3c9MCwgcGFkeD0xMikKLSAgICAgICAgcmJ0bi5ncmlkKGluXz1oZnJhbWUsIGNvbHVtbj0yLCByb3c9MCkKLSAgICAgICAgc2VsZi5fY2FsZW5kYXIucGFjayhpbl89c2VsZiwgZXhwYW5kPTEsIGZpbGw9J2JvdGgnLCBzaWRlPSdib3R0b20nKQotCi0gICAgZGVmIF9fY29uZmlnX2NhbGVuZGFyKHNlbGYpOgotICAgICAgICBjb2xzID0gc2VsZi5fY2FsLmZvcm1hdHdlZWtoZWFkZXIoMykuc3BsaXQoKQotICAgICAgICBzZWxmLl9jYWxlbmRhclsnY29sdW1ucyddID0gY29scwotICAgICAgICBzZWxmLl9jYWxlbmRhci50YWdfY29uZmlndXJlKCdoZWFkZXInLCBiYWNrZ3JvdW5kPSdncmV5OTAnKQotICAgICAgICBzZWxmLl9jYWxlbmRhci5pbnNlcnQoJycsICdlbmQnLCB2YWx1ZXM9Y29scywgdGFnPSdoZWFkZXInKQotICAgICAgICAjIGFkanVzdCBpdHMgY29sdW1ucyB3aWR0aAotICAgICAgICBmb250ID0gdGtpbnRlci5mb250LkZvbnQoKQotICAgICAgICBtYXh3aWR0aCA9IG1heChmb250Lm1lYXN1cmUoY29sKSBmb3IgY29sIGluIGNvbHMpCi0gICAgICAgIGZvciBjb2wgaW4gY29sczoKLSAgICAgICAgICAgIHNlbGYuX2NhbGVuZGFyLmNvbHVtbihjb2wsIHdpZHRoPW1heHdpZHRoLCBtaW53aWR0aD1tYXh3aWR0aCwKLSAgICAgICAgICAgICAgICBhbmNob3I9J2UnKQotCi0gICAgZGVmIF9fc2V0dXBfc2VsZWN0aW9uKHNlbGYsIHNlbF9iZywgc2VsX2ZnKToKLSAgICAgICAgc2VsZi5fZm9udCA9IHRraW50ZXIuZm9udC5Gb250KCkKLSAgICAgICAgc2VsZi5fY2FudmFzID0gY2FudmFzID0gdGtpbnRlci5DYW52YXMoc2VsZi5fY2FsZW5kYXIsCi0gICAgICAgICAgICBiYWNrZ3JvdW5kPXNlbF9iZywgYm9yZGVyd2lkdGg9MCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCi0gICAgICAgIGNhbnZhcy50ZXh0ID0gY2FudmFzLmNyZWF0ZV90ZXh0KDAsIDAsIGZpbGw9c2VsX2ZnLCBhbmNob3I9J3cnKQotCi0gICAgICAgIGNhbnZhcy5iaW5kKCc8QnV0dG9uUHJlc3MtMT4nLCBsYW1iZGEgZXZ0OiBjYW52YXMucGxhY2VfZm9yZ2V0KCkpCi0gICAgICAgIHNlbGYuX2NhbGVuZGFyLmJpbmQoJzxDb25maWd1cmU+JywgbGFtYmRhIGV2dDogY2FudmFzLnBsYWNlX2ZvcmdldCgpKQotICAgICAgICBzZWxmLl9jYWxlbmRhci5iaW5kKCc8QnV0dG9uUHJlc3MtMT4nLCBzZWxmLl9wcmVzc2VkKQotCi0gICAgZGVmIF9fbWluc2l6ZShzZWxmLCBldnQpOgotICAgICAgICB3aWR0aCwgaGVpZ2h0ID0gc2VsZi5fY2FsZW5kYXIubWFzdGVyLmdlb21ldHJ5KCkuc3BsaXQoJ3gnKQotICAgICAgICBoZWlnaHQgPSBoZWlnaHRbOmhlaWdodC5pbmRleCgnKycpXQotICAgICAgICBzZWxmLl9jYWxlbmRhci5tYXN0ZXIubWluc2l6ZSh3aWR0aCwgaGVpZ2h0KQotCi0gICAgZGVmIF9idWlsZF9jYWxlbmRhcihzZWxmKToKLSAgICAgICAgeWVhciwgbW9udGggPSBzZWxmLl9kYXRlLnllYXIsIHNlbGYuX2RhdGUubW9udGgKLQotICAgICAgICAjIHVwZGF0ZSBoZWFkZXIgdGV4dCAoTW9udGgsIFlFQVIpCi0gICAgICAgIGhlYWRlciA9IHNlbGYuX2NhbC5mb3JtYXRtb250aG5hbWUoeWVhciwgbW9udGgsIDApCi0gICAgICAgIHNlbGYuX2hlYWRlclsndGV4dCddID0gaGVhZGVyLnRpdGxlKCkKLQotICAgICAgICAjIHVwZGF0ZSBjYWxlbmRhciBzaG93biBkYXRlcwotICAgICAgICBjYWwgPSBzZWxmLl9jYWwubW9udGhkYXlzY2FsZW5kYXIoeWVhciwgbW9udGgpCi0gICAgICAgIGZvciBpbmR4LCBpdGVtIGluIGVudW1lcmF0ZShzZWxmLl9pdGVtcyk6Ci0gICAgICAgICAgICB3ZWVrID0gY2FsW2luZHhdIGlmIGluZHggPCBsZW4oY2FsKSBlbHNlIFtdCi0gICAgICAgICAgICBmbXRfd2VlayA9IFsoJyUwMmQnICUgZGF5KSBpZiBkYXkgZWxzZSAnJyBmb3IgZGF5IGluIHdlZWtdCi0gICAgICAgICAgICBzZWxmLl9jYWxlbmRhci5pdGVtKGl0ZW0sIHZhbHVlcz1mbXRfd2VlaykKLQotICAgIGRlZiBfc2hvd19zZWxlY3Rpb24oc2VsZiwgdGV4dCwgYmJveCk6Ci0gICAgICAgICIiIkNvbmZpZ3VyZSBjYW52YXMgZm9yIGEgbmV3IHNlbGVjdGlvbi4iIiIKLSAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCA9IGJib3gKLQotICAgICAgICB0ZXh0dyA9IHNlbGYuX2ZvbnQubWVhc3VyZSh0ZXh0KQotCi0gICAgICAgIGNhbnZhcyA9IHNlbGYuX2NhbnZhcwotICAgICAgICBjYW52YXMuY29uZmlndXJlKHdpZHRoPXdpZHRoLCBoZWlnaHQ9aGVpZ2h0KQotICAgICAgICBjYW52YXMuY29vcmRzKGNhbnZhcy50ZXh0LCB3aWR0aCAtIHRleHR3LCBoZWlnaHQgLyAyIC0gMSkKLSAgICAgICAgY2FudmFzLml0ZW1jb25maWd1cmUoY2FudmFzLnRleHQsIHRleHQ9dGV4dCkKLSAgICAgICAgY2FudmFzLnBsYWNlKGluXz1zZWxmLl9jYWxlbmRhciwgeD14LCB5PXkpCi0KLSAgICAjIENhbGxiYWNrcwotCi0gICAgZGVmIF9wcmVzc2VkKHNlbGYsIGV2dCk6Ci0gICAgICAgICIiIkNsaWNrZWQgc29tZXdoZXJlIGluIHRoZSBjYWxlbmRhci4iIiIKLSAgICAgICAgeCwgeSwgd2lkZ2V0ID0gZXZ0LngsIGV2dC55LCBldnQud2lkZ2V0Ci0gICAgICAgIGl0ZW0gPSB3aWRnZXQuaWRlbnRpZnlfcm93KHkpCi0gICAgICAgIGNvbHVtbiA9IHdpZGdldC5pZGVudGlmeV9jb2x1bW4oeCkKLQotICAgICAgICBpZiBub3QgY29sdW1uIG9yIG5vdCBpdGVtIGluIHNlbGYuX2l0ZW1zOgotICAgICAgICAgICAgIyBjbGlja2VkIGluIHRoZSB3ZWVrZGF5cyByb3cgb3IganVzdCBvdXRzaWRlIHRoZSBjb2x1bW5zCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpdGVtX3ZhbHVlcyA9IHdpZGdldC5pdGVtKGl0ZW0pWyd2YWx1ZXMnXQotICAgICAgICBpZiBub3QgbGVuKGl0ZW1fdmFsdWVzKTogIyByb3cgaXMgZW1wdHkgZm9yIHRoaXMgbW9udGgKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHRleHQgPSBpdGVtX3ZhbHVlc1tpbnQoY29sdW1uWzFdKSAtIDFdCi0gICAgICAgIGlmIG5vdCB0ZXh0OiAjIGRhdGUgaXMgZW1wdHkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGJib3ggPSB3aWRnZXQuYmJveChpdGVtLCBjb2x1bW4pCi0gICAgICAgIGlmIG5vdCBiYm94OiAjIGNhbGVuZGFyIG5vdCB2aXNpYmxlIHlldAotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgIyB1cGRhdGUgYW5kIHRoZW4gc2hvdyBzZWxlY3Rpb24KLSAgICAgICAgdGV4dCA9ICclMDJkJyAlIHRleHQKLSAgICAgICAgc2VsZi5fc2VsZWN0aW9uID0gKHRleHQsIGl0ZW0sIGNvbHVtbikKLSAgICAgICAgc2VsZi5fc2hvd19zZWxlY3Rpb24odGV4dCwgYmJveCkKLQotICAgIGRlZiBfcHJldl9tb250aChzZWxmKToKLSAgICAgICAgIiIiVXBkYXRlZCBjYWxlbmRhciB0byBzaG93IHRoZSBwcmV2aW91cyBtb250aC4iIiIKLSAgICAgICAgc2VsZi5fY2FudmFzLnBsYWNlX2ZvcmdldCgpCi0KLSAgICAgICAgc2VsZi5fZGF0ZSA9IHNlbGYuX2RhdGUgLSBzZWxmLnRpbWVkZWx0YShkYXlzPTEpCi0gICAgICAgIHNlbGYuX2RhdGUgPSBzZWxmLmRhdGV0aW1lKHNlbGYuX2RhdGUueWVhciwgc2VsZi5fZGF0ZS5tb250aCwgMSkKLSAgICAgICAgc2VsZi5fYnVpbGRfY2FsZW5kYXIoKSAjIHJlY29uc3R1Y3QgY2FsZW5kYXIKLQotICAgIGRlZiBfbmV4dF9tb250aChzZWxmKToKLSAgICAgICAgIiIiVXBkYXRlIGNhbGVuZGFyIHRvIHNob3cgdGhlIG5leHQgbW9udGguIiIiCi0gICAgICAgIHNlbGYuX2NhbnZhcy5wbGFjZV9mb3JnZXQoKQotCi0gICAgICAgIHllYXIsIG1vbnRoID0gc2VsZi5fZGF0ZS55ZWFyLCBzZWxmLl9kYXRlLm1vbnRoCi0gICAgICAgIHNlbGYuX2RhdGUgPSBzZWxmLl9kYXRlICsgc2VsZi50aW1lZGVsdGEoCi0gICAgICAgICAgICBkYXlzPWNhbGVuZGFyLm1vbnRocmFuZ2UoeWVhciwgbW9udGgpWzFdICsgMSkKLSAgICAgICAgc2VsZi5fZGF0ZSA9IHNlbGYuZGF0ZXRpbWUoc2VsZi5fZGF0ZS55ZWFyLCBzZWxmLl9kYXRlLm1vbnRoLCAxKQotICAgICAgICBzZWxmLl9idWlsZF9jYWxlbmRhcigpICMgcmVjb25zdHJ1Y3QgY2FsZW5kYXIKLQotICAgICMgUHJvcGVydGllcwotCi0gICAgQHByb3BlcnR5Ci0gICAgZGVmIHNlbGVjdGlvbihzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIGEgZGF0ZXRpbWUgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IHNlbGVjdGVkIGRhdGUuIiIiCi0gICAgICAgIGlmIG5vdCBzZWxmLl9zZWxlY3Rpb246Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIHllYXIsIG1vbnRoID0gc2VsZi5fZGF0ZS55ZWFyLCBzZWxmLl9kYXRlLm1vbnRoCi0gICAgICAgIHJldHVybiBzZWxmLmRhdGV0aW1lKHllYXIsIG1vbnRoLCBpbnQoc2VsZi5fc2VsZWN0aW9uWzBdKSkKLQotZGVmIHRlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgcm9vdCA9IHRraW50ZXIuVGsoKQotICAgIHJvb3QudGl0bGUoJ1R0ayBDYWxlbmRhcicpCi0gICAgdHRrY2FsID0gQ2FsZW5kYXIoZmlyc3R3ZWVrZGF5PWNhbGVuZGFyLlNVTkRBWSkKLSAgICB0dGtjYWwucGFjayhleHBhbmQ9MSwgZmlsbD0nYm90aCcpCi0KLSAgICBpZiAnd2luJyBub3QgaW4gc3lzLnBsYXRmb3JtOgotICAgICAgICBzdHlsZSA9IHR0ay5TdHlsZSgpCi0gICAgICAgIHN0eWxlLnRoZW1lX3VzZSgnY2xhbScpCi0KLSAgICByb290Lm1haW5sb29wKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL0RlbW8vdGtpbnRlci90dGsvd2lkZ2V0X3N0YXRlLnB5IGIvRGVtby90a2ludGVyL3R0ay93aWRnZXRfc3RhdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2OGYxM2IuLjAwMDAwMDAKLS0tIGEvRGVtby90a2ludGVyL3R0ay93aWRnZXRfc3RhdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0iIiJTYW1wbGUgZGVtbyBzaG93aW5nIHdpZGdldCBzdGF0ZXMgYW5kIHNvbWUgZm9udCBzdHlsaW5nLiIiIgotZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKLQotc3RhdGVzID0gWydhY3RpdmUnLCAnZGlzYWJsZWQnLCAnZm9jdXMnLCAncHJlc3NlZCcsICdzZWxlY3RlZCcsCi0gICAgICAgICAgJ2JhY2tncm91bmQnLCAncmVhZG9ubHknLCAnYWx0ZXJuYXRlJywgJ2ludmFsaWQnXQotCi1mb3Igc3RhdGUgaW4gc3RhdGVzWzpdOgotICAgIHN0YXRlcy5hcHBlbmQoIiEiICsgc3RhdGUpCi0KLWRlZiByZXNldF9zdGF0ZSh3aWRnZXQpOgotICAgIG5vc3RhdGUgPSBzdGF0ZXNbbGVuKHN0YXRlcykgLy8gMjpdCi0gICAgd2lkZ2V0LnN0YXRlKG5vc3RhdGUpCi0KLWNsYXNzIEFwcCh0dGsuRnJhbWUpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aXRsZT1Ob25lKToKLSAgICAgICAgdHRrLkZyYW1lLl9faW5pdF9fKHNlbGYsIGJvcmRlcndpZHRoPTYpCi0gICAgICAgIHNlbGYubWFzdGVyLnRpdGxlKHRpdGxlKQotCi0gICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQotCi0gICAgICAgICMgZ2V0IGRlZmF1bHQgZm9udCBzaXplIGFuZCBmYW1pbHkKLSAgICAgICAgYnRuX2ZvbnQgPSBzZWxmLnN0eWxlLmxvb2t1cCgiVEJ1dHRvbiIsICJmb250IikKLSAgICAgICAgZnNpemUgPSBzdHIoc2VsZi50ay5ldmFsKCJmb250IGNvbmZpZ3VyZSAlcyAtc2l6ZSIgJSBidG5fZm9udCkpCi0gICAgICAgIHNlbGYuZm9udF9mYW1pbHkgPSBzZWxmLnRrLmV2YWwoImZvbnQgY29uZmlndXJlICVzIC1mYW1pbHkiICUgYnRuX2ZvbnQpCi0gICAgICAgIGlmICcgJyBpbiBzZWxmLmZvbnRfZmFtaWx5OgotICAgICAgICAgICAgc2VsZi5mb250X2ZhbWlseSA9ICd7JXN9JyAlIHNlbGYuZm9udF9mYW1pbHkKLSAgICAgICAgc2VsZi5mc2l6ZV9wcmVmaXggPSBmc2l6ZVswXSBpZiBmc2l6ZVswXSA9PSAnLScgZWxzZSAnJwotICAgICAgICBzZWxmLmJhc2VfZnNpemUgPSBpbnQoZnNpemVbMSBpZiBmc2l6ZVswXSA9PSAnLScgZWxzZSAwOl0pCi0KLSAgICAgICAgIyBhIGxpc3QgdG8gaG9sZCBhbGwgdGhlIHdpZGdldHMgdGhhdCB3aWxsIGhhdmUgdGhlaXIgc3RhdGVzIGNoYW5nZWQKLSAgICAgICAgc2VsZi51cGRhdGVfd2lkZ2V0cyA9IFtdCi0KLSAgICAgICAgc2VsZi5fc2V0dXBfd2lkZ2V0cygpCi0KLSAgICBkZWYgX3NldF9mb250KHNlbGYsIGV4dHJhPTApOgotICAgICAgICBzZWxmLnN0eWxlLmNvbmZpZ3VyZSgiVEJ1dHRvbiIsIGZvbnQ9IiVzICVzJWQiICUgKHNlbGYuZm9udF9mYW1pbHksCi0gICAgICAgICAgICBzZWxmLmZzaXplX3ByZWZpeCwgc2VsZi5iYXNlX2ZzaXplICsgZXh0cmEpKQotCi0gICAgZGVmIF9uZXdfc3RhdGUoc2VsZiwgd2lkZ2V0LCBuZXd0ZXh0KToKLSAgICAgICAgd2lkZ2V0ID0gc2VsZi5uYW1ldG93aWRnZXQod2lkZ2V0KQotCi0gICAgICAgIGlmIG5vdCBuZXd0ZXh0OgotICAgICAgICAgICAgZ29vZHN0YXRlcyA9IFsiZGlzYWJsZWQiXQotICAgICAgICAgICAgZm9udF9leHRyYSA9IDAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgc2V0IHdpZGdldCBzdGF0ZSBhY2NvcmRpbmcgdG8gd2hhdCBoYXMgYmVlbiBlbnRlcmVkIGluIHRoZSBlbnRyeQotICAgICAgICAgICAgbmV3c3RhdGVzID0gc2V0KG5ld3RleHQuc3BsaXQoKSkgIyBlbGltaW5hdGUgZHVwbGljYXRlcwotCi0gICAgICAgICAgICAjIGtlZXAgb25seSB0aGUgdmFsaWQgc3RhdGVzCi0gICAgICAgICAgICBnb29kc3RhdGVzID0gW3N0YXRlIGZvciBzdGF0ZSBpbiBuZXdzdGF0ZXMgaWYgc3RhdGUgaW4gc3RhdGVzXQotICAgICAgICAgICAgIyBkZWZpbmUgYSBuZXcgZm9udCBzaXplIGJhc2VkIG9uIGFtb3VudCBvZiBzdGF0ZXMKLSAgICAgICAgICAgIGZvbnRfZXh0cmEgPSAyICogbGVuKGdvb2RzdGF0ZXMpCi0KLSAgICAgICAgIyBzZXQgbmV3IHdpZGdldCBzdGF0ZQotICAgICAgICBmb3Igd2lkZ2V0IGluIHNlbGYudXBkYXRlX3dpZGdldHM6Ci0gICAgICAgICAgICByZXNldF9zdGF0ZSh3aWRnZXQpICMgcmVtb3ZlIGFueSBwcmV2aW91cyBzdGF0ZSBmcm9tIHRoZSB3aWRnZXQKLSAgICAgICAgICAgIHdpZGdldC5zdGF0ZShnb29kc3RhdGVzKQotCi0gICAgICAgICMgdXBkYXRlIFR0ayBCdXR0b24gZm9udCBzaXplCi0gICAgICAgIHNlbGYuX3NldF9mb250KGZvbnRfZXh0cmEpCi0gICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgX3NldHVwX3dpZGdldHMoc2VsZik6Ci0gICAgICAgIGJ0biA9IHR0ay5CdXR0b24oc2VsZiwgdGV4dD0nRW50ZXIgc3RhdGVzIGFuZCB3YXRjaCcpCi0KLSAgICAgICAgZW50cnkgPSB0dGsuRW50cnkoc2VsZiwgY3Vyc29yPSd4dGVybScsIHZhbGlkYXRlPSJrZXkiKQotICAgICAgICBlbnRyeVsndmFsaWRhdGVjb21tYW5kJ10gPSAoc2VsZi5yZWdpc3RlcihzZWxmLl9uZXdfc3RhdGUpLCAnJVcnLCAnJVAnKQotICAgICAgICBlbnRyeS5mb2N1cygpCi0KLSAgICAgICAgc2VsZi51cGRhdGVfd2lkZ2V0cy5hcHBlbmQoYnRuKQotICAgICAgICBlbnRyeS52YWxpZGF0ZSgpCi0KLSAgICAgICAgZW50cnkucGFjayhmaWxsPSd4JywgcGFkeD02KQotICAgICAgICBidG4ucGFjayhzaWRlPSdsZWZ0JywgcGFkeT02LCBwYWR4PTYsIGFuY2hvcj0nbicpCi0gICAgICAgIHNlbGYucGFjayhmaWxsPSdib3RoJywgZXhwYW5kPTEpCi0KLQotZGVmIG1haW4oKToKLSAgICBhcHAgPSBBcHAoIldpZGdldCBTdGF0ZSBUZXN0ZXIiKQotICAgIGFwcC5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19JX2RvbnRsaWtlX3RpbHRkZW1vLnB5IGIvRGVtby90dXJ0bGUvdGRlbW9fSV9kb250bGlrZV90aWx0ZGVtby5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4NjUyYy4uMDAwMDAwMAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19JX2RvbnRsaWtlX3RpbHRkZW1vLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotIyEvdXNyL2Jpbi9weXRob24KLSIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKLQotICAgICB0ZGVtby1JX2RvbnRfbGlrZV90aWx0ZGVtby5weQotCi1EZW1vc3RyYXRlcwotICAoYSkgdXNlIG9mIGEgdGlsdGVkIGVsbGlwc2UgYXMKLSAgICAgIHR1cnRsZSBzaGFwZQotICAoYikgc3RhbXBpbmcgdGhhdCBzaGFwZQotCi1XZSBjYW4gcmVtb3ZlIGl0LCBpZiB5b3UgZG9uJ3QgbGlrZSBpdC4KLSAgICAgIFdpdGhvdXQgdXNpbmcgcmVzZXQoKSA7LSkKLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSIiIgotZnJvbSB0dXJ0bGUgaW1wb3J0ICoKLWltcG9ydCB0aW1lCi0KLWRlZiBtYWluKCk6Ci0gICAgcmVzZXQoKQotICAgIHNoYXBlKCJjaXJjbGUiKQotICAgIHJlc2l6ZW1vZGUoInVzZXIiKQotCi0gICAgcHUoKTsgYmsoMjQqMTgvNi4yODMpOyBydCg5MCk7IHBkKCkKLSAgICB0aWx0KDQ1KQotCi0gICAgcHUoKQotCi0gICAgdHVydGxlc2l6ZSgxNiwxMCw1KQotICAgIGNvbG9yKCJyZWQiLCAidmlvbGV0IikKLSAgICBmb3IgaSBpbiByYW5nZSgxOCk6Ci0gICAgICAgIGZkKDI0KQotICAgICAgICBsdCgyMCkKLSAgICAgICAgc3RhbXAoKQotICAgIGNvbG9yKCJyZWQiLCAiIikKLSAgICBmb3IgaSBpbiByYW5nZSgxOCk6Ci0gICAgICAgIGZkKDI0KQotICAgICAgICBsdCgyMCkKLSAgICAgICAgc3RhbXAoKQotCi0gICAgdGlsdCgtMTUpCi0gICAgdHVydGxlc2l6ZSgzLCAxLCA0KQotICAgIGNvbG9yKCJibHVlIiwgInllbGxvdyIpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMTcpOgotICAgICAgICBmZCgyNCkKLSAgICAgICAgbHQoMjApCi0gICAgICAgIGlmIGklMiA9PSAwOgotICAgICAgICAgICAgc3RhbXAoKQotICAgIHRpbWUuc2xlZXAoMSkKLSAgICB3aGlsZSB1bmRvYnVmZmVyZW50cmllcygpOgotICAgICAgICB1bmRvKCkKLSAgICBodCgpCi0gICAgd3JpdGUoIk9LLCBPVkVSISIsIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE4LCAiYm9sZCIpKQotICAgIHJldHVybiAiRG9uZSEiCi0KLWlmIF9fbmFtZV9fPT0iX19tYWluX18iOgotICAgIG1zZyA9IG1haW4oKQotICAgIHByaW50KG1zZykKLSMgICAgbWFpbmxvb3AoKQpkaWZmIC0tZ2l0IGEvRGVtby94bWwvZWxlbV9jb3VudC5weSBiL0RlbW8veG1sL2VsZW1fY291bnQucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5ZDZjYTkuLjAwMDAwMDAKLS0tIGEvRGVtby94bWwvZWxlbV9jb3VudC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLSIiIgotQSBzaW1wbGUgZGVtbyB0aGF0IHJlYWRzIGluIGFuIFhNTCBkb2N1bWVudCBhbmQgZGlzcGxheXMgdGhlIG51bWJlciBvZgotZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBhIHRhbGx5IG9mIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzIGJ5IG5hbWUuCi0iIiIKLQotaW1wb3J0IHN5cwotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVmYXVsdGRpY3QKLQotZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlciwgaGFuZGxlcgotCi1jbGFzcyBGYW5jeUNvdW50ZXIoaGFuZGxlci5Db250ZW50SGFuZGxlcik6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2VsZW1zID0gMAotICAgICAgICBzZWxmLl9hdHRycyA9IDAKLSAgICAgICAgc2VsZi5fZWxlbV90eXBlcyA9IGRlZmF1bHRkaWN0KGludCkKLSAgICAgICAgc2VsZi5fYXR0cl90eXBlcyA9IGRlZmF1bHRkaWN0KGludCkKLQotICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgbmFtZSwgYXR0cnMpOgotICAgICAgICBzZWxmLl9lbGVtcyArPSAxCi0gICAgICAgIHNlbGYuX2F0dHJzICs9IGxlbihhdHRycykKLSAgICAgICAgc2VsZi5fZWxlbV90eXBlc1tuYW1lXSArPSAxCi0KLSAgICAgICAgZm9yIG5hbWUgaW4gYXR0cnMua2V5cygpOgotICAgICAgICAgICAgc2VsZi5fYXR0cl90eXBlc1tuYW1lXSArPSAxCi0KLSAgICBkZWYgZW5kRG9jdW1lbnQoc2VsZik6Ci0gICAgICAgIHByaW50KCJUaGVyZSB3ZXJlIiwgc2VsZi5fZWxlbXMsICJlbGVtZW50cy4iKQotICAgICAgICBwcmludCgiVGhlcmUgd2VyZSIsIHNlbGYuX2F0dHJzLCAiYXR0cmlidXRlcy4iKQotCi0gICAgICAgIHByaW50KCItLS1FTEVNRU5UIFRZUEVTIikKLSAgICAgICAgZm9yIHBhaXIgaW4gIHNlbGYuX2VsZW1fdHlwZXMuaXRlbXMoKToKLSAgICAgICAgICAgIHByaW50KCIlMjBzICVkIiAlIHBhaXIpCi0KLSAgICAgICAgcHJpbnQoIi0tLUFUVFJJQlVURSBUWVBFUyIpCi0gICAgICAgIGZvciBwYWlyIGluICBzZWxmLl9hdHRyX3R5cGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBwcmludCgiJTIwcyAlZCIgJSBwYWlyKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHBhcnNlciA9IG1ha2VfcGFyc2VyKCkKLSAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoRmFuY3lDb3VudGVyKCkpCi0gICAgcGFyc2VyLnBhcnNlKHN5cy5hcmd2WzFdKQpkaWZmIC0tZ2l0IGEvRGVtby94bWwvcm91bmR0cmlwLnB5IGIvRGVtby94bWwvcm91bmR0cmlwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDFjMDA5Li4wMDAwMDAwCi0tLSBhL0RlbW8veG1sL3JvdW5kdHJpcC5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSIiIgotQSBzaW1wbGUgZGVtbyB0aGF0IHJlYWRzIGluIGFuIFhNTCBkb2N1bWVudCBhbmQgc3BpdHMgb3V0IGFuIGVxdWl2YWxlbnQsCi1idXQgbm90IG5lY2Vzc2FyaWx5IGlkZW50aWNhbCwgZG9jdW1lbnQuCi0iIiIKLQotaW1wb3J0IHN5cwotCi1mcm9tIHhtbC5zYXggaW1wb3J0IHNheHV0aWxzLCBoYW5kbGVyLCBtYWtlX3BhcnNlcgotCi0jIC0tLSBUaGUgQ29udGVudEhhbmRsZXIKLQotY2xhc3MgQ29udGVudEdlbmVyYXRvcihoYW5kbGVyLkNvbnRlbnRIYW5kbGVyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQ9c3lzLnN0ZG91dCk6Ci0gICAgICAgIGhhbmRsZXIuQ29udGVudEhhbmRsZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5fb3V0ID0gb3V0Ci0KLSAgICAjIENvbnRlbnRIYW5kbGVyIG1ldGhvZHMKLQotICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgotICAgICAgICBzZWxmLl9vdXQud3JpdGUoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz5cbicpCi0KLSAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKLSAgICAgICAgc2VsZi5fb3V0LndyaXRlKCc8JyArIG5hbWUpCi0gICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIGF0dHJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoJyAlcz0iJXMiJyAlIChuYW1lLCBzYXh1dGlscy5lc2NhcGUodmFsdWUpKSkKLSAgICAgICAgc2VsZi5fb3V0LndyaXRlKCc+JykKLQotICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLl9vdXQud3JpdGUoJzwvJXM+JyAlIG5hbWUpCi0KLSAgICBkZWYgY2hhcmFjdGVycyhzZWxmLCBjb250ZW50KToKLSAgICAgICAgc2VsZi5fb3V0LndyaXRlKHNheHV0aWxzLmVzY2FwZShjb250ZW50KSkKLQotICAgIGRlZiBpZ25vcmFibGVXaGl0ZXNwYWNlKHNlbGYsIGNvbnRlbnQpOgotICAgICAgICBzZWxmLl9vdXQud3JpdGUoY29udGVudCkKLQotICAgIGRlZiBwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oc2VsZiwgdGFyZ2V0LCBkYXRhKToKLSAgICAgICAgc2VsZi5fb3V0LndyaXRlKCc8PyVzICVzPz4nICUgKHRhcmdldCwgZGF0YSkpCi0KLSMgLS0tIFRoZSBtYWluIHByb2dyYW0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCi0gICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKENvbnRlbnRHZW5lcmF0b3IoKSkKLSAgICBwYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCmRpZmYgLS1naXQgYS9EZW1vL3htbC9yc3MyaHRtbC5weSBiL0RlbW8veG1sL3JzczJodG1sLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWNkMTU0Li4wMDAwMDAwCi0tLSBhL0RlbW8veG1sL3JzczJodG1sLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotIiIiCi1BIGRlbW8gdGhhdCByZWFkcyBpbiBhbiBSU1MgWE1MIGRvY3VtZW50IGFuZCBlbWl0cyBhbiBIVE1MIGZpbGUgY29udGFpbmluZwotYSBsaXN0IG9mIHRoZSBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZSBmZWVkLgotIiIiCi0KLWltcG9ydCBzeXMKLWltcG9ydCBjb2RlY3MKLQotZnJvbSB4bWwuc2F4IGltcG9ydCBtYWtlX3BhcnNlciwgaGFuZGxlcgotCi0jIC0tLSBUZW1wbGF0ZXMKLQotdG9wID0gIiIiXAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KLTxodG1sPgotPGhlYWQ+Ci0gIDx0aXRsZT4lczwvdGl0bGU+Ci0gIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KLTwvaGVhZD4KLQotPGJvZHk+Ci08aDE+JXM8L2gxPgotIiIiCi0KLWJvdHRvbSA9ICIiIgotPC91bD4KLQotPGhyPgotPGFkZHJlc3M+Ci1Db252ZXJ0ZWQgdG8gSFRNTCBieSByc3MyaHRtbC5weS4KLTwvYWRkcmVzcz4KLQotPC9ib2R5PgotPC9odG1sPgotIiIiCi0KLSMgLS0tIFRoZSBDb250ZW50SGFuZGxlcgotCi1jbGFzcyBSU1NIYW5kbGVyKGhhbmRsZXIuQ29udGVudEhhbmRsZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dD1zeXMuc3Rkb3V0KToKLSAgICAgICAgaGFuZGxlci5Db250ZW50SGFuZGxlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLl9vdXQgPSBvdXQKLQotICAgICAgICBzZWxmLl90ZXh0ID0gIiIKLSAgICAgICAgc2VsZi5fcGFyZW50ID0gTm9uZQotICAgICAgICBzZWxmLl9saXN0X3N0YXJ0ZWQgPSBGYWxzZQotICAgICAgICBzZWxmLl90aXRsZSA9IE5vbmUKLSAgICAgICAgc2VsZi5fbGluayA9IE5vbmUKLSAgICAgICAgc2VsZi5fZGVzY3IgPSAiIgotCi0gICAgIyBDb250ZW50SGFuZGxlciBtZXRob2RzCi0KLSAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKLSAgICAgICAgaWYgbmFtZSA9PSAiY2hhbm5lbCIgb3IgbmFtZSA9PSAiaW1hZ2UiIG9yIG5hbWUgPT0gIml0ZW0iOgotICAgICAgICAgICAgc2VsZi5fcGFyZW50ID0gbmFtZQotCi0gICAgICAgIHNlbGYuX3RleHQgPSAiIgotCi0gICAgZGVmIGVuZEVsZW1lbnQoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGlmIHNlbGYuX3BhcmVudCA9PSAiY2hhbm5lbCI6Ci0gICAgICAgICAgICBpZiBuYW1lID09ICJ0aXRsZSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKHRvcCAlIChzZWxmLl90ZXh0LCBzZWxmLl90ZXh0KSkKLSAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiZGVzY3JpcHRpb24iOgotICAgICAgICAgICAgICAgIHNlbGYuX291dC53cml0ZSgiPHA+JXM8L3A+XG4iICUgc2VsZi5fdGV4dCkKLQotICAgICAgICBlbGlmIHNlbGYuX3BhcmVudCA9PSAiaXRlbSI6Ci0gICAgICAgICAgICBpZiBuYW1lID09ICJ0aXRsZSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdGl0bGUgPSBzZWxmLl90ZXh0Ci0gICAgICAgICAgICBlbGlmIG5hbWUgPT0gImxpbmsiOgotICAgICAgICAgICAgICAgIHNlbGYuX2xpbmsgPSBzZWxmLl90ZXh0Ci0gICAgICAgICAgICBlbGlmIG5hbWUgPT0gImRlc2NyaXB0aW9uIjoKLSAgICAgICAgICAgICAgICBzZWxmLl9kZXNjciA9IHNlbGYuX3RleHQKLSAgICAgICAgICAgIGVsaWYgbmFtZSA9PSAiaXRlbSI6Ci0gICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2xpc3Rfc3RhcnRlZDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3V0LndyaXRlKCI8dWw+XG4iKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9saXN0X3N0YXJ0ZWQgPSBUcnVlCi0KLSAgICAgICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoJyAgPGxpPjxhIGhyZWY9IiVzIj4lczwvYT4gJXNcbicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fbGluaywgc2VsZi5fdGl0bGUsIHNlbGYuX2Rlc2NyKSkKLQotICAgICAgICAgICAgICAgIHNlbGYuX3RpdGxlID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpbmsgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fZGVzY3IgPSAiIgotCi0gICAgICAgIGlmIG5hbWUgPT0gInJzcyI6Ci0gICAgICAgICAgICBzZWxmLl9vdXQud3JpdGUoYm90dG9tKQotCi0gICAgZGVmIGNoYXJhY3RlcnMoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIHNlbGYuX3RleHQgPSBzZWxmLl90ZXh0ICsgY29udGVudAotCi0jIC0tLSBNYWluIHByb2dyYW0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBwYXJzZXIgPSBtYWtlX3BhcnNlcigpCi0gICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKFJTU0hhbmRsZXIoKSkKLSAgICBwYXJzZXIucGFyc2Uoc3lzLmFyZ3ZbMV0pCmRpZmYgLS1naXQgYS9EZW1vL3psaWIvbWluaWd6aXAucHkgYi9EZW1vL3psaWIvbWluaWd6aXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDI4ZDhiMjYuLjAwMDAwMDAKLS0tIGEvRGVtby96bGliL21pbmlnemlwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBEZW1vIHByb2dyYW0gZm9yIHpsaWI7IGl0IGNvbXByZXNzZXMgb3IgZGVjb21wcmVzc2VzIGZpbGVzLCBidXQgKmRvZXNuJ3QqCi0jIGRlbGV0ZSB0aGUgb3JpZ2luYWwuICBUaGlzIGRvZXNuJ3Qgc3VwcG9ydCBhbGwgb2YgZ3ppcCdzIG9wdGlvbnMuCi0jCi0jIFRoZSAnZ3ppcCcgbW9kdWxlIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHByb3ZpZGVzIGEgbW9yZSBjb21wbGV0ZQotIyBpbXBsZW1lbnRhdGlvbiBvZiBnemlwLWZvcm1hdCBmaWxlcy4KLQotaW1wb3J0IHpsaWIsIHN5cywgb3MKLQotRlRFWFQsIEZIQ1JDLCBGRVhUUkEsIEZOQU1FLCBGQ09NTUVOVCA9IDEsIDIsIDQsIDgsIDE2Ci0KLWRlZiB3cml0ZTMyKG91dHB1dCwgdmFsdWUpOgotICAgIG91dHB1dC53cml0ZShjaHIodmFsdWUgJiAyNTUpKSA7IHZhbHVlPXZhbHVlIC8vIDI1NgotICAgIG91dHB1dC53cml0ZShjaHIodmFsdWUgJiAyNTUpKSA7IHZhbHVlPXZhbHVlIC8vIDI1NgotICAgIG91dHB1dC53cml0ZShjaHIodmFsdWUgJiAyNTUpKSA7IHZhbHVlPXZhbHVlIC8vIDI1NgotICAgIG91dHB1dC53cml0ZShjaHIodmFsdWUgJiAyNTUpKQotCi1kZWYgcmVhZDMyKGlucHV0KToKLSAgICB2ID0gb3JkKGlucHV0LnJlYWQoMSkpCi0gICAgdiArPSAob3JkKGlucHV0LnJlYWQoMSkpIDw8IDggKQotICAgIHYgKz0gKG9yZChpbnB1dC5yZWFkKDEpKSA8PCAxNikKLSAgICB2ICs9IChvcmQoaW5wdXQucmVhZCgxKSkgPDwgMjQpCi0gICAgcmV0dXJuIHYKLQotZGVmIGNvbXByZXNzIChmaWxlbmFtZSwgaW5wdXQsIG91dHB1dCk6Ci0gICAgb3V0cHV0LndyaXRlKCdcMDM3XDIxM1wwMTAnKSAgICAgICAgIyBXcml0ZSB0aGUgaGVhZGVyLCAuLi4KLSAgICBvdXRwdXQud3JpdGUoY2hyKEZOQU1FKSkgICAgICAgICAgICAjIC4uLiBmbGFnIGJ5dGUgLi4uCi0KLSAgICBzdGF0dmFsID0gb3Muc3RhdChmaWxlbmFtZSkgICAgICAgICAgICMgLi4uIG1vZGlmaWNhdGlvbiB0aW1lIC4uLgotICAgIG10aW1lID0gc3RhdHZhbFs4XQotICAgIHdyaXRlMzIob3V0cHV0LCBtdGltZSkKLSAgICBvdXRwdXQud3JpdGUoJ1wwMDInKSAgICAgICAgICAgICAgICAjIC4uLiBzbG93ZXN0IGNvbXByZXNzaW9uIGFsZy4gLi4uCi0gICAgb3V0cHV0LndyaXRlKCdcMzc3JykgICAgICAgICAgICAgICAgIyAuLi4gT1MgKD11bmtub3duKSAuLi4KLSAgICBvdXRwdXQud3JpdGUoZmlsZW5hbWUrJ1wwMDAnKSAgICAgICAjIC4uLiBvcmlnaW5hbCBmaWxlbmFtZSAuLi4KLQotICAgIGNyY3ZhbCA9IHpsaWIuY3JjMzIoIiIpCi0gICAgY29tcG9iaiA9IHpsaWIuY29tcHJlc3NvYmooOSwgemxpYi5ERUZMQVRFRCwgLXpsaWIuTUFYX1dCSVRTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliLkRFRl9NRU1fTEVWRUwsIDApCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZGF0YSA9IGlucHV0LnJlYWQoMTAyNCkKLSAgICAgICAgaWYgZGF0YSA9PSAiIjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGNyY3ZhbCA9IHpsaWIuY3JjMzIoZGF0YSwgY3JjdmFsKQotICAgICAgICBvdXRwdXQud3JpdGUoY29tcG9iai5jb21wcmVzcyhkYXRhKSkKLSAgICBvdXRwdXQud3JpdGUoY29tcG9iai5mbHVzaCgpKQotICAgIHdyaXRlMzIob3V0cHV0LCBjcmN2YWwpICAgICAgICAgICAgICMgLi4uIHRoZSBDUkMgLi4uCi0gICAgd3JpdGUzMihvdXRwdXQsIHN0YXR2YWxbNl0pICAgICAgICAgIyBhbmQgdGhlIGZpbGUgc2l6ZS4KLQotZGVmIGRlY29tcHJlc3MgKGlucHV0LCBvdXRwdXQpOgotICAgIG1hZ2ljID0gaW5wdXQucmVhZCgyKQotICAgIGlmIG1hZ2ljICE9ICdcMDM3XDIxMyc6Ci0gICAgICAgIHByaW50KCdOb3QgYSBnemlwcGVkIGZpbGUnKQotICAgICAgICBzeXMuZXhpdCgwKQotICAgIGlmIG9yZChpbnB1dC5yZWFkKDEpKSAhPSA4OgotICAgICAgICBwcmludCgnVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QnKQotICAgICAgICBzeXMuZXhpdCgwKQotICAgIGZsYWcgPSBvcmQoaW5wdXQucmVhZCgxKSkKLSAgICBpbnB1dC5yZWFkKDQrMSsxKSAgICAgICAgICAgICAgICAgICAjIERpc2NhcmQgbW9kaWZpY2F0aW9uIHRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBleHRyYSBmbGFncywgYW5kIE9TIGJ5dGUuCi0gICAgaWYgZmxhZyAmIEZFWFRSQToKLSAgICAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgZXh0cmEgZmllbGQsIGlmIHByZXNlbnQKLSAgICAgICAgeGxlbiA9IG9yZChpbnB1dC5yZWFkKDEpKQotICAgICAgICB4bGVuICs9IDI1NipvcmQoaW5wdXQucmVhZCgxKSkKLSAgICAgICAgaW5wdXQucmVhZCh4bGVuKQotICAgIGlmIGZsYWcgJiBGTkFNRToKLSAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgcyA9IGlucHV0LnJlYWQoMSkKLSAgICAgICAgICAgIGlmIHMgPT0gJ1wwJzogYnJlYWsKLSAgICBpZiBmbGFnICYgRkNPTU1FTlQ6Ci0gICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyBhIGNvbW1lbnQKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHM9aW5wdXQucmVhZCgxKQotICAgICAgICAgICAgaWYgcz09J1wwJzogYnJlYWsKLSAgICBpZiBmbGFnICYgRkhDUkM6Ci0gICAgICAgIGlucHV0LnJlYWQoMikgICAgICAgICAgICAgICAgICAgIyBSZWFkICYgZGlzY2FyZCB0aGUgMTYtYml0IGhlYWRlciBDUkMKLQotICAgIGRlY29tcG9iaiA9IHpsaWIuZGVjb21wcmVzc29iaigtemxpYi5NQVhfV0JJVFMpCi0gICAgY3JjdmFsID0gemxpYi5jcmMzMigiIikKLSAgICBsZW5ndGggPSAwCi0gICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgZGF0YT1pbnB1dC5yZWFkKDEwMjQpCi0gICAgICAgIGlmIGRhdGEgPT0gIiI6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBkZWNvbXBkYXRhID0gZGVjb21wb2JqLmRlY29tcHJlc3MoZGF0YSkKLSAgICAgICAgb3V0cHV0LndyaXRlKGRlY29tcGRhdGEpCi0gICAgICAgIGxlbmd0aCArPSBsZW4oZGVjb21wZGF0YSkKLSAgICAgICAgY3JjdmFsID0gemxpYi5jcmMzMihkZWNvbXBkYXRhLCBjcmN2YWwpCi0KLSAgICBkZWNvbXBkYXRhID0gZGVjb21wb2JqLmZsdXNoKCkKLSAgICBvdXRwdXQud3JpdGUoZGVjb21wZGF0YSkKLSAgICBsZW5ndGggKz0gbGVuKGRlY29tcGRhdGEpCi0gICAgY3JjdmFsID0gemxpYi5jcmMzMihkZWNvbXBkYXRhLCBjcmN2YWwpCi0KLSAgICAjIFdlJ3ZlIHJlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgc28gd2UgaGF2ZSB0byByZXdpbmQgaW4gb3JkZXIKLSAgICAjIHRvIHJlcmVhZCB0aGUgOCBieXRlcyBjb250YWluaW5nIHRoZSBDUkMgYW5kIHRoZSBmaWxlIHNpemUuICBUaGUKLSAgICAjIGRlY29tcHJlc3NvciBpcyBzbWFydCBhbmQga25vd3Mgd2hlbiB0byBzdG9wLCBzbyBmZWVkaW5nIGl0Ci0gICAgIyBleHRyYSBkYXRhIGlzIGhhcm1sZXNzLgotICAgIGlucHV0LnNlZWsoLTgsIDIpCi0gICAgY3JjMzIgPSByZWFkMzIoaW5wdXQpCi0gICAgaXNpemUgPSByZWFkMzIoaW5wdXQpCi0gICAgaWYgY3JjMzIgIT0gY3JjdmFsOgotICAgICAgICBwcmludCgnQ1JDIGNoZWNrIGZhaWxlZC4nKQotICAgIGlmIGlzaXplICE9IGxlbmd0aDoKLSAgICAgICAgcHJpbnQoJ0luY29ycmVjdCBsZW5ndGggb2YgZGF0YSBwcm9kdWNlZCcpCi0KLWRlZiBtYWluKCk6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSE9MjoKLSAgICAgICAgcHJpbnQoJ1VzYWdlOiBtaW5pZ3ppcC5weSA8ZmlsZW5hbWU+JykKLSAgICAgICAgcHJpbnQoJyAgVGhlIGZpbGUgd2lsbCBiZSBjb21wcmVzc2VkIG9yIGRlY29tcHJlc3NlZC4nKQotICAgICAgICBzeXMuZXhpdCgwKQotCi0gICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQotICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCcuZ3onKToKLSAgICAgICAgY29tcHJlc3NpbmcgPSBGYWxzZQotICAgICAgICBvdXRwdXRuYW1lID0gZmlsZW5hbWVbOi0zXQotICAgIGVsc2U6Ci0gICAgICAgIGNvbXByZXNzaW5nID0gVHJ1ZQotICAgICAgICBvdXRwdXRuYW1lID0gZmlsZW5hbWUgKyAnLmd6JwotCi0gICAgaW5wdXQgPSBvcGVuKGZpbGVuYW1lLCAncmInKQotICAgIG91dHB1dCA9IG9wZW4ob3V0cHV0bmFtZSwgJ3diJykKLQotICAgIGlmIGNvbXByZXNzaW5nOgotICAgICAgICBjb21wcmVzcyhmaWxlbmFtZSwgaW5wdXQsIG91dHB1dCkKLSAgICBlbHNlOgotICAgICAgICBkZWNvbXByZXNzKGlucHV0LCBvdXRwdXQpCi0KLSAgICBpbnB1dC5jbG9zZSgpCi0gICAgb3V0cHV0LmNsb3NlKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0RlbW8vemxpYi96bGliZGVtby5weSBiL0RlbW8vemxpYi96bGliZGVtby5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTM0NjNkZC4uMDAwMDAwMAotLS0gYS9EZW1vL3psaWIvemxpYmRlbW8ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotIyBUYWtlcyBhbiBvcHRpb25hbCBmaWxlbmFtZSwgZGVmYXVsdGluZyB0byB0aGlzIGZpbGUgaXRzZWxmLgotIyBSZWFkcyB0aGUgZmlsZSBhbmQgY29tcHJlc3NlcyB0aGUgY29udGVudCB1c2luZyBsZXZlbCAxIGFuZCBsZXZlbCA5Ci0jIGNvbXByZXNzaW9uLCBwcmludGluZyBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMuCi0KLWltcG9ydCB6bGliLCBzeXMKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKLSAgICAgICAgZmlsZW5hbWUgPSBzeXMuYXJndlsxXQotICAgIGVsc2U6Ci0gICAgICAgIGZpbGVuYW1lID0gc3lzLmFyZ3ZbMF0KLSAgICBwcmludCgnUmVhZGluZycsIGZpbGVuYW1lKQotCi0gICAgZiA9IG9wZW4oZmlsZW5hbWUsICdyYicpICAgICAgICAgICAjIEdldCB0aGUgZGF0YSB0byBjb21wcmVzcwotICAgIHMgPSBmLnJlYWQoKQotICAgIGYuY2xvc2UoKQotCi0gICAgIyBGaXJzdCwgd2UnbGwgY29tcHJlc3MgdGhlIHN0cmluZyBpbiBvbmUgc3RlcAotICAgIGNvbXB0ZXh0ID0gemxpYi5jb21wcmVzcyhzLCAxKQotICAgIGRlY29tcCA9IHpsaWIuZGVjb21wcmVzcyhjb21wdGV4dCkKLQotICAgIHByaW50KCcxLXN0ZXAgY29tcHJlc3Npb246IChsZXZlbCAxKScpCi0gICAgcHJpbnQoJyAgICBPcmlnaW5hbDonLCBsZW4ocyksICdDb21wcmVzc2VkOicsIGxlbihjb21wdGV4dCksIGVuZD0nICcpCi0gICAgcHJpbnQoJ1VuY29tcHJlc3NlZDonLCBsZW4oZGVjb21wKSkKLQotICAgICMgTm93LCBsZXQncyBjb21wcmVzcyB0aGUgc3RyaW5nIGluIHN0YWdlczsgc2V0IGNodW5rIHRvIHdvcmsgaW4gc21hbGxlciBzdGVwcwotCi0gICAgY2h1bmsgPSAyNTYKLSAgICBjb21wcmVzc29yID0gemxpYi5jb21wcmVzc29iaig5KQotICAgIGRlY29tcHJlc3NvciA9IHpsaWIuZGVjb21wcmVzc29iaigpCi0gICAgY29tcHRleHQgPSBkZWNvbXAgPSAnJwotICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihzKSwgY2h1bmspOgotICAgICAgICBjb21wdGV4dCA9IGNvbXB0ZXh0K2NvbXByZXNzb3IuY29tcHJlc3Moc1tpOmkrY2h1bmtdKQotICAgICMgRG9uJ3QgZm9yZ2V0IHRvIGNhbGwgZmx1c2goKSEhCi0gICAgY29tcHRleHQgPSBjb21wdGV4dCArIGNvbXByZXNzb3IuZmx1c2goKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGNvbXB0ZXh0KSwgY2h1bmspOgotICAgICAgICBkZWNvbXAgPSBkZWNvbXAgKyBkZWNvbXByZXNzb3IuZGVjb21wcmVzcyhjb21wdGV4dFtpOmkrY2h1bmtdKQotICAgIGRlY29tcD1kZWNvbXArZGVjb21wcmVzc29yLmZsdXNoKCkKLQotICAgIHByaW50KCdQcm9ncmVzc2l2ZSBjb21wcmVzc2lvbiAobGV2ZWwgOSk6JykKLSAgICBwcmludCgnICAgIE9yaWdpbmFsOicsIGxlbihzKSwgJ0NvbXByZXNzZWQ6JywgbGVuKGNvbXB0ZXh0KSwgZW5kPScgJykKLSAgICBwcmludCgnVW5jb21wcmVzc2VkOicsIGxlbihkZWNvbXApKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvRG9jL0FDS1MudHh0IGIvRG9jL0FDS1MudHh0CmluZGV4IDczZDRlMTMuLjdmNjdkMzYgMTAwNjQ0Ci0tLSBhL0RvYy9BQ0tTLnR4dAorKysgYi9Eb2MvQUNLUy50eHQKQEAgLTEyMCw2ICsxMjAsNyBAQAogICAgKiBSb2JlcnQgTGVobWFubgogICAgKiBNYXJjLUFuZHLDqSBMZW1idXJnCiAgICAqIFJvc3MgTGlnaHQKKyAgICogR2VkaW1pbmFzIExpa3RhcmFzCiAgICAqIFVsZiBBLiBMaW5kZ3JlbgogICAgKiBFdmVyZXR0IExpcG1hbgogICAgKiBNaXJrbyBMaXNzCkBAIC0yMTMsNiArMjE0LDcgQEAKICAgICogTWF0cyBXaWNobWFubgogICAgKiBHZXJyeSBXaWVuZXIKICAgICogVGltb3RoeSBXaWxkCisgICAqIFBhdWwgV2lua2xlcgogICAgKiBDb2xsaW4gV2ludGVyCiAgICAqIEJsYWtlIFdpbnRvbgogICAgKiBEYW4gV29sZmUKZGlmZiAtLWdpdCBhL0RvYy9NYWtlZmlsZSBiL0RvYy9NYWtlZmlsZQppbmRleCA4ZmNmNTM4Li5hMWZmZTYzIDEwMDY0NAotLS0gYS9Eb2MvTWFrZWZpbGUKKysrIGIvRG9jL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiAJQGVjaG8gIiAgaHRtbGhlbHAgICB0byBtYWtlIEhUTUwgZmlsZXMgYW5kIGEgSFRNTCBoZWxwIHByb2plY3QiCiAJQGVjaG8gIiAgbGF0ZXggICAgICB0byBtYWtlIExhVGVYIGZpbGVzLCB5b3UgY2FuIHNldCBQQVBFUj1hNCBvciBQQVBFUj1sZXR0ZXIiCiAJQGVjaG8gIiAgdGV4dCAgICAgICB0byBtYWtlIHBsYWluIHRleHQgZmlsZXMiCisJQGVjaG8gIiAgZXB1YiAgICAgICB0byBtYWtlIEVQVUIgZmlsZXMiCiAJQGVjaG8gIiAgY2hhbmdlcyAgICB0byBtYWtlIGFuIG92ZXJ2aWV3IG92ZXIgYWxsIGNoYW5nZWQvYWRkZWQvZGVwcmVjYXRlZCBpdGVtcyIKIAlAZWNobyAiICBsaW5rY2hlY2sgIHRvIGNoZWNrIGFsbCBleHRlcm5hbCBsaW5rcyBmb3IgaW50ZWdyaXR5IgogCUBlY2hvICIgIGNvdmVyYWdlICAgdG8gY2hlY2sgZG9jdW1lbnRhdGlvbiBjb3ZlcmFnZSBmb3IgbGlicmFyeSBhbmQgQyBBUEkiCkBAIC0zNCwxMiArMzUsMTMgQEAKIAlAZWNobyAiICBkaXN0ICAgICAgIHRvIGNyZWF0ZSBhIFwiZGlzdFwiIGRpcmVjdG9yeSB3aXRoIGFyY2hpdmVkIGRvY3MgZm9yIGRvd25sb2FkIgogCUBlY2hvICIgIHN1c3BpY2lvdXMgdG8gY2hlY2sgZm9yIHN1c3BpY2lvdXMgbWFya3VwIGluIG91dHB1dCB0ZXh0IgogCUBlY2hvICIgIGNoZWNrICAgICAgdG8gcnVuIGEgY2hlY2sgZm9yIGZyZXF1ZW50IG1hcmt1cCBlcnJvcnMiCisJQGVjaG8gIiAgc2VydmUgICAgICB0byBzZXJ2ZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgbG9jYWxob3N0ICg4MDAwKSIKIAogIyBOb3RlOiBpZiB5b3UgdXBkYXRlIHZlcnNpb25zIGhlcmUsIGRvIHRoZSBzYW1lIGluIG1ha2UuYmF0IGFuZCBSRUFETUUudHh0CiBjaGVja291dDoKIAlAaWYgWyAhIC1kIHRvb2xzL3NwaGlueCBdOyB0aGVuIFwKIAkgIGVjaG8gIkNoZWNraW5nIG91dCBTcGhpbnguLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9TcGhpbngtMC42LjUvc3BoaW54IHRvb2xzL3NwaGlueDsgXAorCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvU3BoaW54LTEuMC43L3NwaGlueCB0b29scy9zcGhpbng7IFwKIAlmaQogCUBpZiBbICEgLWQgdG9vbHMvZG9jdXRpbHMgXTsgdGhlbiBcCiAJICBlY2hvICJDaGVja2luZyBvdXQgRG9jdXRpbHMuLi4iOyBcCkBAIC04MCw2ICs4MiwxMCBAQAogdGV4dDogYnVpbGQKIAlAZWNobyAiQnVpbGQgZmluaXNoZWQ7IHRoZSB0ZXh0IGZpbGVzIGFyZSBpbiBidWlsZC90ZXh0LiIKIAorZXB1YjogQlVJTERFUiA9IGVwdWIKK2VwdWI6IGJ1aWxkCisJQGVjaG8gIkJ1aWxkIGZpbmlzaGVkOyB0aGUgZXB1YiBmaWxlcyBhcmUgaW4gYnVpbGQvZXB1Yi4iCisKIGNoYW5nZXM6IEJVSUxERVIgPSBjaGFuZ2VzCiBjaGFuZ2VzOiBidWlsZAogCUBlY2hvICJUaGUgb3ZlcnZpZXcgZmlsZSBpcyBpbiBidWlsZC9jaGFuZ2VzLiIKQEAgLTE1Nyw5ICsxNjMsMjMgQEAKIAljcCBidWlsZC9sYXRleC9kb2NzLXBkZi56aXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnppcAogCWNwIGJ1aWxkL2xhdGV4L2RvY3MtcGRmLnRhci5iejIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnRhci5iejIKIAorCSMgYXJjaGl2ZSB0aGUgZXB1YiBidWlsZAorCXJtIC1yZiBidWlsZC9lcHViCisJbWFrZSBlcHViCisJbWtkaXIgLXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCisJY3AgLXBQUiBidWlsZC9lcHViLyouZXB1YiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIvCisJdGFyIC1DIGRpc3QgLWNmIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIgcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1YgorCWJ6aXAyIC05IC1rIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIKKwkoY2QgZGlzdDsgemlwIC1xIC1yIC05IHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIuemlwIHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIpCisJcm0gLXIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCisJcm0gZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViLnRhcgorCiBjaGVjazoKIAkkKFBZVEhPTikgdG9vbHMvcnN0bGludC5weSAtaSB0b29scwogCitzZXJ2ZToKKwkuLi9Ub29scy9zY3JpcHRzL3NlcnZlLnB5IGJ1aWxkL2h0bWwKKwogIyBUYXJnZXRzIGZvciBkYWlseSBhdXRvbWF0ZWQgZG9jIGJ1aWxkCiAKICMgZm9yIGRldmVsb3BtZW50IHJlbGVhc2VzOiBhbHdheXMgYnVpbGQKZGlmZiAtLWdpdCBhL0RvYy9SRUFETUUudHh0IGIvRG9jL1JFQURNRS50eHQKaW5kZXggN2E1NjFjMC4uNTBjMTk5ZSAxMDA2NDQKLS0tIGEvRG9jL1JFQURNRS50eHQKKysrIGIvRG9jL1JFQURNRS50eHQKQEAgLTU0LDYgKzU0LDkgQEAKIAogICogInRleHQiLCB3aGljaCBidWlsZHMgYSBwbGFpbiB0ZXh0IGZpbGUgZm9yIGVhY2ggc291cmNlIGZpbGUuCiAKKyAqICJlcHViIiwgd2hpY2ggYnVpbGRzIGFuIEVQVUIgZG9jdW1lbnQsIHN1aXRhYmxlIHRvIGJlIHZpZXdlZCBvbiBlLWJvb2sKKyAgIHJlYWRlcnMuCisKICAqICJsaW5rY2hlY2siLCB3aGljaCBjaGVja3MgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMgdG8gc2VlIHdoZXRoZXIgdGhleSBhcmUKICAgIGJyb2tlbiwgcmVkaXJlY3RlZCBvciBtYWxmb3JtZWQsIGFuZCBvdXRwdXRzIHRoaXMgaW5mb3JtYXRpb24gdG8gc3Rkb3V0IGFzCiAgICB3ZWxsIGFzIGEgcGxhaW4tdGV4dCAoLnR4dCkgZmlsZS4KQEAgLTc4LDcgKzgxLDcgQEAKIAogWW91J2xsIG5lZWQgdG8gaW5zdGFsbCB0aGUgU3BoaW54IHBhY2thZ2UsIGVpdGhlciBieSBjaGVja2luZyBpdCBvdXQgdmlhIDo6CiAKLSAgIHN2biBjbyBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvU3BoaW54LTAuNi41L3NwaGlueCB0b29scy9zcGhpbngKKyAgIHN2biBjbyBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvU3BoaW54LTEuMC43L3NwaGlueCB0b29scy9zcGhpbngKIAogb3IgYnkgaW5zdGFsbGluZyBpdCBmcm9tIFB5UEkuCiAKQEAgLTEzMiw3ICsxMzUsNyBAQAogYXMgbG9uZyBhcyB5b3UgZG9uJ3QgY2hhbmdlIG9yIHJlbW92ZSB0aGUgY29weXJpZ2h0IG5vdGljZToKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ29weXJpZ2h0IChjKSAyMDAwLTIwMDggUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIENvcHlyaWdodCAoYykgMjAwMCBCZU9wZW4uY29tLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2Fic3RyYWN0LnJzdCBiL0RvYy9jLWFwaS9hYnN0cmFjdC5yc3QKaW5kZXggYWJhODA0ZC4uYWQ1Mzg4MSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2Fic3RyYWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvYWJzdHJhY3QucnN0CkBAIC0xMiw3ICsxMiw3IEBACiB3aWxsIHJhaXNlIGEgUHl0aG9uIGV4Y2VwdGlvbi4KIAogSXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGVzZSBmdW5jdGlvbnMgb24gb2JqZWN0cyB0aGF0IGFyZSBub3QgcHJvcGVybHkKLWluaXRpYWxpemVkLCBzdWNoIGFzIGEgbGlzdCBvYmplY3QgdGhhdCBoYXMgYmVlbiBjcmVhdGVkIGJ5IDpjZnVuYzpgUHlMaXN0X05ld2AsCitpbml0aWFsaXplZCwgc3VjaCBhcyBhIGxpc3Qgb2JqZWN0IHRoYXQgaGFzIGJlZW4gY3JlYXRlZCBieSA6YzpmdW5jOmBQeUxpc3RfTmV3YCwKIGJ1dCB3aG9zZSBpdGVtcyBoYXZlIG5vdCBiZWVuIHNldCB0byBzb21lIG5vbi1cIGBgTlVMTGBgIHZhbHVlIHlldC4KIAogLi4gdG9jdHJlZTo6CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYWxsb2NhdGlvbi5yc3QgYi9Eb2MvYy1hcGkvYWxsb2NhdGlvbi5yc3QKaW5kZXggYjY0MzgxYi4uZThmNjBiZiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2FsbG9jYXRpb24ucnN0CisrKyBiL0RvYy9jLWFwaS9hbGxvY2F0aW9uLnJzdApAQCAtNiwxMyArNiwxMyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIF9QeU9iamVjdF9OZXcoUHlUeXBlT2JqZWN0ICp0eXBlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBfUHlPYmplY3RfTmV3KFB5VHlwZU9iamVjdCAqdHlwZSkKIAogCi0uLiBjZnVuY3Rpb246OiBQeVZhck9iamVjdCogX1B5T2JqZWN0X05ld1ZhcihQeVR5cGVPYmplY3QgKnR5cGUsIFB5X3NzaXplX3Qgc2l6ZSkKKy4uIGM6ZnVuY3Rpb246OiBQeVZhck9iamVjdCogX1B5T2JqZWN0X05ld1ZhcihQeVR5cGVPYmplY3QgKnR5cGUsIFB5X3NzaXplX3Qgc2l6ZSkKIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfSW5pdChQeU9iamVjdCAqb3AsIFB5VHlwZU9iamVjdCAqdHlwZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfSW5pdChQeU9iamVjdCAqb3AsIFB5VHlwZU9iamVjdCAqdHlwZSkKIAogICAgSW5pdGlhbGl6ZSBhIG5ld2x5LWFsbG9jYXRlZCBvYmplY3QgKm9wKiB3aXRoIGl0cyB0eXBlIGFuZCBpbml0aWFsCiAgICByZWZlcmVuY2UuICBSZXR1cm5zIHRoZSBpbml0aWFsaXplZCBvYmplY3QuICBJZiAqdHlwZSogaW5kaWNhdGVzIHRoYXQgdGhlCkBAIC0yMSwxMyArMjEsMTMgQEAKICAgIGFmZmVjdGVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5VmFyT2JqZWN0KiBQeU9iamVjdF9Jbml0VmFyKFB5VmFyT2JqZWN0ICpvcCwgUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogUHlWYXJPYmplY3QqIFB5T2JqZWN0X0luaXRWYXIoUHlWYXJPYmplY3QgKm9wLCBQeVR5cGVPYmplY3QgKnR5cGUsIFB5X3NzaXplX3Qgc2l6ZSkKIAotICAgVGhpcyBkb2VzIGV2ZXJ5dGhpbmcgOmNmdW5jOmBQeU9iamVjdF9Jbml0YCBkb2VzLCBhbmQgYWxzbyBpbml0aWFsaXplcyB0aGUKKyAgIFRoaXMgZG9lcyBldmVyeXRoaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0luaXRgIGRvZXMsIGFuZCBhbHNvIGluaXRpYWxpemVzIHRoZQogICAgbGVuZ3RoIGluZm9ybWF0aW9uIGZvciBhIHZhcmlhYmxlLXNpemUgb2JqZWN0LgogCiAKLS4uIGNmdW5jdGlvbjo6IFRZUEUqIFB5T2JqZWN0X05ldyhUWVBFLCBQeVR5cGVPYmplY3QgKnR5cGUpCisuLiBjOmZ1bmN0aW9uOjogVFlQRSogUHlPYmplY3RfTmV3KFRZUEUsIFB5VHlwZU9iamVjdCAqdHlwZSkKIAogICAgQWxsb2NhdGUgYSBuZXcgUHl0aG9uIG9iamVjdCB1c2luZyB0aGUgQyBzdHJ1Y3R1cmUgdHlwZSAqVFlQRSogYW5kIHRoZQogICAgUHl0aG9uIHR5cGUgb2JqZWN0ICp0eXBlKi4gIEZpZWxkcyBub3QgZGVmaW5lZCBieSB0aGUgUHl0aG9uIG9iamVjdCBoZWFkZXIKQEAgLTM2LDcgKzM2LDcgQEAKICAgIHRoZSB0eXBlIG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBUWVBFKiBQeU9iamVjdF9OZXdWYXIoVFlQRSwgUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogVFlQRSogUHlPYmplY3RfTmV3VmFyKFRZUEUsIFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBzaXplKQogCiAgICBBbGxvY2F0ZSBhIG5ldyBQeXRob24gb2JqZWN0IHVzaW5nIHRoZSBDIHN0cnVjdHVyZSB0eXBlICpUWVBFKiBhbmQgdGhlCiAgICBQeXRob24gdHlwZSBvYmplY3QgKnR5cGUqLiAgRmllbGRzIG5vdCBkZWZpbmVkIGJ5IHRoZSBQeXRob24gb2JqZWN0IGhlYWRlcgpAQCAtNDgsMjQgKzQ4LDI0IEBACiAgICBpbXByb3ZpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVuY3kuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeU9iamVjdF9EZWwoUHlPYmplY3QgKm9wKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlPYmplY3RfRGVsKFB5T2JqZWN0ICpvcCkKIAotICAgUmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCB0byBhbiBvYmplY3QgdXNpbmcgOmNmdW5jOmBQeU9iamVjdF9OZXdgIG9yCi0gICA6Y2Z1bmM6YFB5T2JqZWN0X05ld1ZhcmAuICBUaGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBmcm9tIHRoZQorICAgUmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCB0byBhbiBvYmplY3QgdXNpbmcgOmM6ZnVuYzpgUHlPYmplY3RfTmV3YCBvcgorICAgOmM6ZnVuYzpgUHlPYmplY3RfTmV3VmFyYC4gIFRoaXMgaXMgbm9ybWFsbHkgY2FsbGVkIGZyb20gdGhlCiAgICA6YXR0cjpgdHBfZGVhbGxvY2AgaGFuZGxlciBzcGVjaWZpZWQgaW4gdGhlIG9iamVjdCdzIHR5cGUuICBUaGUgZmllbGRzIG9mCiAgICB0aGUgb2JqZWN0IHNob3VsZCBub3QgYmUgYWNjZXNzZWQgYWZ0ZXIgdGhpcyBjYWxsIGFzIHRoZSBtZW1vcnkgaXMgbm8KICAgIGxvbmdlciBhIHZhbGlkIFB5dGhvbiBvYmplY3QuCiAKIAotLi4gY3Zhcjo6IFB5T2JqZWN0IF9QeV9Ob25lU3RydWN0CisuLiBjOnZhcjo6IFB5T2JqZWN0IF9QeV9Ob25lU3RydWN0CiAKICAgIE9iamVjdCB3aGljaCBpcyB2aXNpYmxlIGluIFB5dGhvbiBhcyBgYE5vbmVgYC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQKLSAgIHVzaW5nIHRoZSA6Y21hY3JvOmBQeV9Ob25lYCBtYWNybywgd2hpY2ggZXZhbHVhdGVzIHRvIGEgcG9pbnRlciB0byB0aGlzCisgICB1c2luZyB0aGUgOmM6bWFjcm86YFB5X05vbmVgIG1hY3JvLCB3aGljaCBldmFsdWF0ZXMgdG8gYSBwb2ludGVyIHRvIHRoaXMKICAgIG9iamVjdC4KIAogCiAuLiBzZWVhbHNvOjoKIAotICAgOmNmdW5jOmBQeU1vZHVsZV9DcmVhdGVgCisgICA6YzpmdW5jOmBQeU1vZHVsZV9DcmVhdGVgCiAgICAgICBUbyBhbGxvY2F0ZSBhbmQgY3JlYXRlIGV4dGVuc2lvbiBtb2R1bGVzLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYXJnLnJzdCBiL0RvYy9jLWFwaS9hcmcucnN0CmluZGV4IDIxY2ViZTkuLmQ0ZGRhN2MgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9hcmcucnN0CisrKyBiL0RvYy9jLWFwaS9hcmcucnN0CkBAIC05LDggKzksOCBAQAogbWV0aG9kcy4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzIGFyZSBhdmFpbGFibGUgaW4KIDpyZWY6YGV4dGVuZGluZy1pbmRleGAuCiAKLVRoZSBmaXJzdCB0aHJlZSBvZiB0aGVzZSBmdW5jdGlvbnMgZGVzY3JpYmVkLCA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLAotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBhbmQgOmNmdW5jOmBQeUFyZ19QYXJzZWAsIGFsbCB1c2UgKmZvcm1hdAorVGhlIGZpcnN0IHRocmVlIG9mIHRoZXNlIGZ1bmN0aW9ucyBkZXNjcmliZWQsIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLAorOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCwgYW5kIDpjOmZ1bmM6YFB5QXJnX1BhcnNlYCwgYWxsIHVzZSAqZm9ybWF0CiBzdHJpbmdzKiB3aGljaCBhcmUgdXNlZCB0byB0ZWxsIHRoZSBmdW5jdGlvbiBhYm91dCB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzLiAgVGhlCiBmb3JtYXQgc3RyaW5ncyB1c2UgdGhlIHNhbWUgc3ludGF4IGZvciBlYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucy4KIApAQCAtMzUsMjMgKzM1LDIzIEBACiBhcmVhLiAgQWxzbywgeW91IHdvbid0IGhhdmUgdG8gcmVsZWFzZSBhbnkgbWVtb3J5IHlvdXJzZWxmLCBleGNlcHQgd2l0aCB0aGUKIGBgZXNgYCwgYGBlcyNgYCwgYGBldGBgIGFuZCBgYGV0I2BgIGZvcm1hdHMuCiAKLUhvd2V2ZXIsIHdoZW4gYSA6Y3R5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIGdldHMgZmlsbGVkLCB0aGUgdW5kZXJseWluZworSG93ZXZlciwgd2hlbiBhIDpjOnR5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIGdldHMgZmlsbGVkLCB0aGUgdW5kZXJseWluZwogYnVmZmVyIGlzIGxvY2tlZCBzbyB0aGF0IHRoZSBjYWxsZXIgY2FuIHN1YnNlcXVlbnRseSB1c2UgdGhlIGJ1ZmZlciBldmVuCi1pbnNpZGUgYSA6Y3R5cGU6YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIGJsb2NrIHdpdGhvdXQgdGhlIHJpc2sgb2YgbXV0YWJsZSBkYXRhCitpbnNpZGUgYSA6Yzp0eXBlOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCBibG9jayB3aXRob3V0IHRoZSByaXNrIG9mIG11dGFibGUgZGF0YQogYmVpbmcgcmVzaXplZCBvciBkZXN0cm95ZWQuICBBcyBhIHJlc3VsdCwgKip5b3UgaGF2ZSB0byBjYWxsKioKLTpjZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAgYWZ0ZXIgeW91IGhhdmUgZmluaXNoZWQgcHJvY2Vzc2luZyB0aGUgZGF0YSAob3IKKzpjOmZ1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIGFmdGVyIHlvdSBoYXZlIGZpbmlzaGVkIHByb2Nlc3NpbmcgdGhlIGRhdGEgKG9yCiBpbiBhbnkgZWFybHkgYWJvcnQgY2FzZSkuCiAKIFVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLCBidWZmZXJzIGFyZSBub3QgTlVMLXRlcm1pbmF0ZWQuCiAKIC4uIG5vdGU6OgogICAgRm9yIGFsbCBgYCNgYCB2YXJpYW50cyBvZiBmb3JtYXRzIChgYHMjYGAsIGBgeSNgYCwgZXRjLiksIHRoZSB0eXBlIG9mCi0gICB0aGUgbGVuZ3RoIGFyZ3VtZW50IChpbnQgb3IgOmN0eXBlOmBQeV9zc2l6ZV90YCkgaXMgY29udHJvbGxlZCBieQotICAgZGVmaW5pbmcgdGhlIG1hY3JvIDpjbWFjcm86YFBZX1NTSVpFX1RfQ0xFQU5gIGJlZm9yZSBpbmNsdWRpbmcKKyAgIHRoZSBsZW5ndGggYXJndW1lbnQgKGludCBvciA6Yzp0eXBlOmBQeV9zc2l6ZV90YCkgaXMgY29udHJvbGxlZCBieQorICAgZGVmaW5pbmcgdGhlIG1hY3JvIDpjOm1hY3JvOmBQWV9TU0laRV9UX0NMRUFOYCBiZWZvcmUgaW5jbHVkaW5nCiAgICA6ZmlsZTpgUHl0aG9uLmhgLiAgSWYgdGhlIG1hY3JvIHdhcyBkZWZpbmVkLCBsZW5ndGggaXMgYQotICAgOmN0eXBlOmBQeV9zc2l6ZV90YCByYXRoZXIgdGhhbiBhbiA6Y3R5cGU6YGludGAuIFRoaXMgYmVoYXZpb3Igd2lsbCBjaGFuZ2UKLSAgIGluIGEgZnV0dXJlIFB5dGhvbiB2ZXJzaW9uIHRvIG9ubHkgc3VwcG9ydCA6Y3R5cGU6YFB5X3NzaXplX3RgIGFuZAotICAgZHJvcCA6Y3R5cGU6YGludGAgc3VwcG9ydC4gSXQgaXMgYmVzdCB0byBhbHdheXMgZGVmaW5lIDpjbWFjcm86YFBZX1NTSVpFX1RfQ0xFQU5gLgorICAgOmM6dHlwZTpgUHlfc3NpemVfdGAgcmF0aGVyIHRoYW4gYW4gOmM6dHlwZTpgaW50YC4gVGhpcyBiZWhhdmlvciB3aWxsIGNoYW5nZQorICAgaW4gYSBmdXR1cmUgUHl0aG9uIHZlcnNpb24gdG8gb25seSBzdXBwb3J0IDpjOnR5cGU6YFB5X3NzaXplX3RgIGFuZAorICAgZHJvcCA6Yzp0eXBlOmBpbnRgIHN1cHBvcnQuIEl0IGlzIGJlc3QgdG8gYWx3YXlzIGRlZmluZSA6YzptYWNybzpgUFlfU1NJWkVfVF9DTEVBTmAuCiAKIAogYGBzYGAgKDpjbGFzczpgc3RyYCkgW2NvbnN0IGNoYXIgXCpdCkBAIC02NiwxNyArNjYsMTcgQEAKICAgIC4uIG5vdGU6OgogICAgICAgVGhpcyBmb3JtYXQgZG9lcyBub3QgYWNjZXB0IGJ5dGVzLWxpa2Ugb2JqZWN0cy4gIElmIHlvdSB3YW50IHRvIGFjY2VwdAogICAgICAgZmlsZXN5c3RlbSBwYXRocyBhbmQgY29udmVydCB0aGVtIHRvIEMgY2hhcmFjdGVyIHN0cmluZ3MsIGl0IGlzCi0gICAgICBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYGBPJmBgIGZvcm1hdCB3aXRoIDpjZnVuYzpgUHlVbmljb2RlX0ZTQ29udmVydGVyYAorICAgICAgcHJlZmVyYWJsZSB0byB1c2UgdGhlIGBgTyZgYCBmb3JtYXQgd2l0aCA6YzpmdW5jOmBQeVVuaWNvZGVfRlNDb252ZXJ0ZXJgCiAgICAgICBhcyAqY29udmVydGVyKi4KIAogYGBzKmBgICg6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAgb3IgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0KSBbUHlfYnVmZmVyXQogICAgVGhpcyBmb3JtYXQgYWNjZXB0cyBVbmljb2RlIG9iamVjdHMgYXMgd2VsbCBhcyBvYmplY3RzIHN1cHBvcnRpbmcgdGhlCiAgICBidWZmZXIgcHJvdG9jb2wuCi0gICBJdCBmaWxscyBhIDpjdHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAgIEl0IGZpbGxzIGEgOmM6dHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KICAgIEluIHRoaXMgY2FzZSB0aGUgcmVzdWx0aW5nIEMgc3RyaW5nIG1heSBjb250YWluIGVtYmVkZGVkIE5VTCBieXRlcy4KICAgIFVuaWNvZGUgb2JqZWN0cyBhcmUgY29udmVydGVkIHRvIEMgc3RyaW5ncyB1c2luZyBgYCd1dGYtOCdgYCBlbmNvZGluZy4KIAotYGBzI2BgICg6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgIG9yIHJlYWQtb25seSBidWZmZXIgY29tcGF0aWJsZSBvYmplY3QpIFtjb25zdCBjaGFyIFwqLCBpbnQgb3IgOmN0eXBlOmBQeV9zc2l6ZV90YF0KK2BgcyNgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBvciByZWFkLW9ubHkgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0KSBbY29uc3QgY2hhciBcKiwgaW50IG9yIDpjOnR5cGU6YFB5X3NzaXplX3RgXQogICAgTGlrZSBgYHMqYGAsIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgYWNjZXB0IG11dGFibGUgYnVmZmVyLWxpa2Ugb2JqZWN0cwogICAgc3VjaCBhcyA6Y2xhc3M6YGJ5dGVhcnJheWAuICBUaGUgcmVzdWx0IGlzIHN0b3JlZCBpbnRvIHR3byBDIHZhcmlhYmxlcywKICAgIHRoZSBmaXJzdCBvbmUgYSBwb2ludGVyIHRvIGEgQyBzdHJpbmcsIHRoZSBzZWNvbmQgb25lIGl0cyBsZW5ndGguCkBAIC04OSw3ICs4OSw3IEBACiAKIGBgeipgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgLCBidWZmZXIgY29tcGF0aWJsZSBvYmplY3Qgb3IgYGBOb25lYGApIFtQeV9idWZmZXJdCiAgICBMaWtlIGBgcypgYCwgYnV0IHRoZSBQeXRob24gb2JqZWN0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZQotICAgYGBidWZgYCBtZW1iZXIgb2YgdGhlIDpjdHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgaXMgc2V0IHRvICpOVUxMKi4KKyAgIGBgYnVmYGAgbWVtYmVyIG9mIHRoZSA6Yzp0eXBlOmBQeV9idWZmZXJgIHN0cnVjdHVyZSBpcyBzZXQgdG8gKk5VTEwqLgogCiBgYHojYGAgKDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AsIHJlYWQtb25seSBidWZmZXIgY29tcGF0aWJsZSBvYmplY3Qgb3IgYGBOb25lYGApIFtjb25zdCBjaGFyIFwqLCBpbnRdCiAgICBMaWtlIGBgcyNgYCwgYnV0IHRoZSBQeXRob24gb2JqZWN0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDCkBAIC0xMTMsMTkgKzExMywyMSBAQAogYGBTYGAgKDpjbGFzczpgYnl0ZXNgKSBbUHlCeXRlc09iamVjdCBcKl0KICAgIFJlcXVpcmVzIHRoYXQgdGhlIFB5dGhvbiBvYmplY3QgaXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsIHdpdGhvdXQKICAgIGF0dGVtcHRpbmcgYW55IGNvbnZlcnNpb24uICBSYWlzZXMgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGUgb2JqZWN0IGlzIG5vdAotICAgYSBieXRlcyBvYmplY3QuICBUaGUgQyB2YXJpYWJsZSBtYXkgYWxzbyBiZSBkZWNsYXJlZCBhcyA6Y3R5cGU6YFB5T2JqZWN0XCpgLgorICAgYSBieXRlcyBvYmplY3QuICBUaGUgQyB2YXJpYWJsZSBtYXkgYWxzbyBiZSBkZWNsYXJlZCBhcyA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogYGBZYGAgKDpjbGFzczpgYnl0ZWFycmF5YCkgW1B5Qnl0ZUFycmF5T2JqZWN0IFwqXQogICAgUmVxdWlyZXMgdGhhdCB0aGUgUHl0aG9uIG9iamVjdCBpcyBhIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3QsIHdpdGhvdXQKICAgIGF0dGVtcHRpbmcgYW55IGNvbnZlcnNpb24uICBSYWlzZXMgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGUgb2JqZWN0IGlzIG5vdAotICAgYSA6Y2xhc3M6YGJ5dGVhcnJheWAgb2JqZWN0LiBUaGUgQyB2YXJpYWJsZSBtYXkgYWxzbyBiZSBkZWNsYXJlZCBhcyA6Y3R5cGU6YFB5T2JqZWN0XCpgLgorICAgYSA6Y2xhc3M6YGJ5dGVhcnJheWAgb2JqZWN0LiBUaGUgQyB2YXJpYWJsZSBtYXkgYWxzbyBiZSBkZWNsYXJlZCBhcyA6Yzp0eXBlOmBQeU9iamVjdFwqYC4KIAogYGB1YGAgKDpjbGFzczpgc3RyYCkgW1B5X1VOSUNPREUgXCpdCiAgICBDb252ZXJ0IGEgUHl0aG9uIFVuaWNvZGUgb2JqZWN0IHRvIGEgQyBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgYnVmZmVyIG9mCi0gICBVbmljb2RlIGNoYXJhY3RlcnMuICBZb3UgbXVzdCBwYXNzIHRoZSBhZGRyZXNzIG9mIGEgOmN0eXBlOmBQeV9VTklDT0RFYAorICAgVW5pY29kZSBjaGFyYWN0ZXJzLiAgWW91IG11c3QgcGFzcyB0aGUgYWRkcmVzcyBvZiBhIDpjOnR5cGU6YFB5X1VOSUNPREVgCiAgICBwb2ludGVyIHZhcmlhYmxlLCB3aGljaCB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBwb2ludGVyIHRvIGFuIGV4aXN0aW5nCi0gICBVbmljb2RlIGJ1ZmZlci4gIFBsZWFzZSBub3RlIHRoYXQgdGhlIHdpZHRoIG9mIGEgOmN0eXBlOmBQeV9VTklDT0RFYAorICAgVW5pY29kZSBidWZmZXIuICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSB3aWR0aCBvZiBhIDpjOnR5cGU6YFB5X1VOSUNPREVgCiAgICBjaGFyYWN0ZXIgZGVwZW5kcyBvbiBjb21waWxhdGlvbiBvcHRpb25zIChpdCBpcyBlaXRoZXIgMTYgb3IgMzIgYml0cykuCisgICBUaGUgUHl0aG9uIHN0cmluZyBtdXN0IG5vdCBjb250YWluIGVtYmVkZGVkIE5VTCBjaGFyYWN0ZXJzOyBpZiBpdCBkb2VzLAorICAgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKICAgIC4uIG5vdGU6OgogICAgICAgU2luY2UgYGB1YGAgZG9lc24ndCBnaXZlIHlvdSBiYWNrIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgYW5kIGl0CkBAIC0xMzgsNTUgKzE0MCwzOCBAQAogCiBgYFpgYCAoOmNsYXNzOmBzdHJgIG9yIGBgTm9uZWBgKSBbUHlfVU5JQ09ERSBcKl0KICAgIExpa2UgYGB1YGAsIGJ1dCB0aGUgUHl0aG9uIG9iamVjdCBtYXkgYWxzbyBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSB0aGUKLSAgIDpjdHlwZTpgUHlfVU5JQ09ERWAgcG9pbnRlciBpcyBzZXQgdG8gKk5VTEwqLgorICAgOmM6dHlwZTpgUHlfVU5JQ09ERWAgcG9pbnRlciBpcyBzZXQgdG8gKk5VTEwqLgogCiBgYFojYGAgKDpjbGFzczpgc3RyYCBvciBgYE5vbmVgYCkgW1B5X1VOSUNPREUgXCosIGludF0KICAgIExpa2UgYGB1I2BgLCBidXQgdGhlIFB5dGhvbiBvYmplY3QgbWF5IGFsc28gYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2UgdGhlCi0gICA6Y3R5cGU6YFB5X1VOSUNPREVgIHBvaW50ZXIgaXMgc2V0IHRvICpOVUxMKi4KKyAgIDpjOnR5cGU6YFB5X1VOSUNPREVgIHBvaW50ZXIgaXMgc2V0IHRvICpOVUxMKi4KIAogYGBVYGAgKDpjbGFzczpgc3RyYCkgW1B5VW5pY29kZU9iamVjdCBcKl0KICAgIFJlcXVpcmVzIHRoYXQgdGhlIFB5dGhvbiBvYmplY3QgaXMgYSBVbmljb2RlIG9iamVjdCwgd2l0aG91dCBhdHRlbXB0aW5nCiAgICBhbnkgY29udmVyc2lvbi4gIFJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZSBvYmplY3QgaXMgbm90IGEgVW5pY29kZQotICAgb2JqZWN0LiAgVGhlIEMgdmFyaWFibGUgbWF5IGFsc28gYmUgZGVjbGFyZWQgYXMgOmN0eXBlOmBQeU9iamVjdFwqYC4KLQotYGB0I2BgICg6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIG9yIHJlYWQtb25seSBjaGFyYWN0ZXIgYnVmZmVyKSBbY2hhciBcKiwgaW50XQotICAgTGlrZSBgYHMjYGAsIGJ1dCBhY2NlcHRzIGFueSBvYmplY3Qgd2hpY2ggaW1wbGVtZW50cyB0aGUgcmVhZC1vbmx5IGJ1ZmZlcgotICAgaW50ZXJmYWNlLiAgVGhlIDpjdHlwZTpgY2hhclwqYCB2YXJpYWJsZSBpcyBzZXQgdG8gcG9pbnQgdG8gdGhlIGZpcnN0IGJ5dGUgb2YKLSAgIHRoZSBidWZmZXIsIGFuZCB0aGUgOmN0eXBlOmBpbnRgIGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuICBPbmx5Ci0gICBzaW5nbGUtc2VnbWVudCBidWZmZXIgb2JqZWN0cyBhcmUgYWNjZXB0ZWQ7IDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkIGZvciBhbGwKLSAgIG90aGVycy4KLQotYGB3YGAgKDpjbGFzczpgYnl0ZWFycmF5YCBvciByZWFkLXdyaXRlIGNoYXJhY3RlciBidWZmZXIpIFtjaGFyIFwqXQotICAgU2ltaWxhciB0byBgYHlgYCwgYnV0IGFjY2VwdHMgYW55IG9iamVjdCB3aGljaCBpbXBsZW1lbnRzIHRoZSByZWFkLXdyaXRlIGJ1ZmZlcgotICAgaW50ZXJmYWNlLiAgVGhlIGNhbGxlciBtdXN0IGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgYnkgb3RoZXIgbWVhbnMsCi0gICBvciB1c2UgYGB3I2BgIGluc3RlYWQuICBPbmx5IHNpbmdsZS1zZWdtZW50IGJ1ZmZlciBvYmplY3RzIGFyZSBhY2NlcHRlZDsKLSAgIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkIGZvciBhbGwgb3RoZXJzLgorICAgb2JqZWN0LiAgVGhlIEMgdmFyaWFibGUgbWF5IGFsc28gYmUgZGVjbGFyZWQgYXMgOmM6dHlwZTpgUHlPYmplY3RcKmAuCiAKIGBgdypgYCAoOmNsYXNzOmBieXRlYXJyYXlgIG9yIHJlYWQtd3JpdGUgYnl0ZS1vcmllbnRlZCBidWZmZXIpIFtQeV9idWZmZXJdCi0gICBUaGlzIGlzIHRvIGBgd2BgIHdoYXQgYGB5KmBgIGlzIHRvIGBgeWBgLgotCi1gYHcjYGAgKDpjbGFzczpgYnl0ZWFycmF5YCBvciByZWFkLXdyaXRlIGNoYXJhY3RlciBidWZmZXIpIFtjaGFyIFwqLCBpbnRdCi0gICBMaWtlIGBgeSNgYCwgYnV0IGFjY2VwdHMgYW55IG9iamVjdCB3aGljaCBpbXBsZW1lbnRzIHRoZSByZWFkLXdyaXRlIGJ1ZmZlcgotICAgaW50ZXJmYWNlLiAgVGhlIDpjdHlwZTpgY2hhciBcKmAgdmFyaWFibGUgaXMgc2V0IHRvIHBvaW50IHRvIHRoZSBmaXJzdCBieXRlCi0gICBvZiB0aGUgYnVmZmVyLCBhbmQgdGhlIDpjdHlwZTpgaW50YCBpcyBzZXQgdG8gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLgotICAgT25seSBzaW5nbGUtc2VnbWVudCBidWZmZXIgb2JqZWN0cyBhcmUgYWNjZXB0ZWQ7IDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkCi0gICBmb3IgYWxsIG90aGVycy4KKyAgIFRoaXMgZm9ybWF0IGFjY2VwdHMgYW55IG9iamVjdCB3aGljaCBpbXBsZW1lbnRzIHRoZSByZWFkLXdyaXRlIGJ1ZmZlcgorICAgaW50ZXJmYWNlLiBJdCBmaWxscyBhIDpjOnR5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuCisgICBUaGUgYnVmZmVyIG1heSBjb250YWluIGVtYmVkZGVkIG51bGwgYnl0ZXMuIFRoZSBjYWxsZXIgaGF2ZSB0byBjYWxsCisgICA6YzpmdW5jOmBQeUJ1ZmZlcl9SZWxlYXNlYCB3aGVuIGl0IGlzIGRvbmUgd2l0aCB0aGUgYnVmZmVyLgogCiBgYGVzYGAgKDpjbGFzczpgc3RyYCkgW2NvbnN0IGNoYXIgXCplbmNvZGluZywgY2hhciBcKlwqYnVmZmVyXQogICAgVGhpcyB2YXJpYW50IG9uIGBgc2BgIGlzIHVzZWQgZm9yIGVuY29kaW5nIFVuaWNvZGUgaW50byBhIGNoYXJhY3RlciBidWZmZXIuCiAgICBJdCBvbmx5IHdvcmtzIGZvciBlbmNvZGVkIGRhdGEgd2l0aG91dCBlbWJlZGRlZCBOVUwgYnl0ZXMuCiAKICAgIFRoaXMgZm9ybWF0IHJlcXVpcmVzIHR3byBhcmd1bWVudHMuICBUaGUgZmlyc3QgaXMgb25seSB1c2VkIGFzIGlucHV0LCBhbmQKLSAgIG11c3QgYmUgYSA6Y3R5cGU6YGNvbnN0IGNoYXJcKmAgd2hpY2ggcG9pbnRzIHRvIHRoZSBuYW1lIG9mIGFuIGVuY29kaW5nIGFzIGEKKyAgIG11c3QgYmUgYSA6Yzp0eXBlOmBjb25zdCBjaGFyXCpgIHdoaWNoIHBvaW50cyB0byB0aGUgbmFtZSBvZiBhbiBlbmNvZGluZyBhcyBhCiAgICBOVUwtdGVybWluYXRlZCBzdHJpbmcsIG9yICpOVUxMKiwgaW4gd2hpY2ggY2FzZSBgYCd1dGYtOCdgYCBlbmNvZGluZyBpcyB1c2VkLgogICAgQW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbmFtZWQgZW5jb2RpbmcgaXMgbm90IGtub3duIHRvIFB5dGhvbi4gIFRoZQotICAgc2Vjb25kIGFyZ3VtZW50IG11c3QgYmUgYSA6Y3R5cGU6YGNoYXJcKlwqYDsgdGhlIHZhbHVlIG9mIHRoZSBwb2ludGVyIGl0CisgICBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIDpjOnR5cGU6YGNoYXJcKlwqYDsgdGhlIHZhbHVlIG9mIHRoZSBwb2ludGVyIGl0CiAgICByZWZlcmVuY2VzIHdpbGwgYmUgc2V0IHRvIGEgYnVmZmVyIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBhcmd1bWVudCB0ZXh0LgogICAgVGhlIHRleHQgd2lsbCBiZSBlbmNvZGVkIGluIHRoZSBlbmNvZGluZyBzcGVjaWZpZWQgYnkgdGhlIGZpcnN0IGFyZ3VtZW50LgogCi0gICA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHdpbGwgYWxsb2NhdGUgYSBidWZmZXIgb2YgdGhlIG5lZWRlZCBzaXplLCBjb3B5IHRoZQorICAgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgd2lsbCBhbGxvY2F0ZSBhIGJ1ZmZlciBvZiB0aGUgbmVlZGVkIHNpemUsIGNvcHkgdGhlCiAgICBlbmNvZGVkIGRhdGEgaW50byB0aGlzIGJ1ZmZlciBhbmQgYWRqdXN0ICpcKmJ1ZmZlciogdG8gcmVmZXJlbmNlIHRoZSBuZXdseQotICAgYWxsb2NhdGVkIHN0b3JhZ2UuICBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDpjZnVuYzpgUHlNZW1fRnJlZWAgdG8KKyAgIGFsbG9jYXRlZCBzdG9yYWdlLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyA6YzpmdW5jOmBQeU1lbV9GcmVlYCB0bwogICAgZnJlZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBhZnRlciB1c2UuCiAKIGBgZXRgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWApIFtjb25zdCBjaGFyIFwqZW5jb2RpbmcsIGNoYXIgXCpcKmJ1ZmZlcl0KQEAgLTIwMCwxMCArMTg1LDEwIEBACiAgICBjaGFyYWN0ZXJzLgogCiAgICBJdCByZXF1aXJlcyB0aHJlZSBhcmd1bWVudHMuICBUaGUgZmlyc3QgaXMgb25seSB1c2VkIGFzIGlucHV0LCBhbmQgbXVzdCBiZSBhCi0gICA6Y3R5cGU6YGNvbnN0IGNoYXJcKmAgd2hpY2ggcG9pbnRzIHRvIHRoZSBuYW1lIG9mIGFuIGVuY29kaW5nIGFzIGEKKyAgIDpjOnR5cGU6YGNvbnN0IGNoYXJcKmAgd2hpY2ggcG9pbnRzIHRvIHRoZSBuYW1lIG9mIGFuIGVuY29kaW5nIGFzIGEKICAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZywgb3IgKk5VTEwqLCBpbiB3aGljaCBjYXNlIGBgJ3V0Zi04J2BgIGVuY29kaW5nIGlzIHVzZWQuCiAgICBBbiBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBuYW1lZCBlbmNvZGluZyBpcyBub3Qga25vd24gdG8gUHl0aG9uLiAgVGhlCi0gICBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIDpjdHlwZTpgY2hhclwqXCpgOyB0aGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXQKKyAgIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgOmM6dHlwZTpgY2hhclwqXCpgOyB0aGUgdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXQKICAgIHJlZmVyZW5jZXMgd2lsbCBiZSBzZXQgdG8gYSBidWZmZXIgd2l0aCB0aGUgY29udGVudHMgb2YgdGhlIGFyZ3VtZW50IHRleHQuCiAgICBUaGUgdGV4dCB3aWxsIGJlIGVuY29kZWQgaW4gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBieSB0aGUgZmlyc3QgYXJndW1lbnQuCiAgICBUaGUgdGhpcmQgYXJndW1lbnQgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYW4gaW50ZWdlcjsgdGhlIHJlZmVyZW5jZWQgaW50ZWdlcgpAQCAtMjE0LDEwICsxOTksMTAgQEAKICAgIElmICpcKmJ1ZmZlciogcG9pbnRzIGEgKk5VTEwqIHBvaW50ZXIsIHRoZSBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGEgYnVmZmVyIG9mCiAgICB0aGUgbmVlZGVkIHNpemUsIGNvcHkgdGhlIGVuY29kZWQgZGF0YSBpbnRvIHRoaXMgYnVmZmVyIGFuZCBzZXQgKlwqYnVmZmVyKiB0bwogICAgcmVmZXJlbmNlIHRoZSBuZXdseSBhbGxvY2F0ZWQgc3RvcmFnZS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcKLSAgIDpjZnVuYzpgUHlNZW1fRnJlZWAgdG8gZnJlZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBhZnRlciB1c2FnZS4KKyAgIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgIHRvIGZyZWUgdGhlIGFsbG9jYXRlZCBidWZmZXIgYWZ0ZXIgdXNhZ2UuCiAKICAgIElmICpcKmJ1ZmZlciogcG9pbnRzIHRvIGEgbm9uLSpOVUxMKiBwb2ludGVyIChhbiBhbHJlYWR5IGFsbG9jYXRlZCBidWZmZXIpLAotICAgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB3aWxsIHVzZSB0aGlzIGxvY2F0aW9uIGFzIHRoZSBidWZmZXIgYW5kIGludGVycHJldCB0aGUKKyAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHdpbGwgdXNlIHRoaXMgbG9jYXRpb24gYXMgdGhlIGJ1ZmZlciBhbmQgaW50ZXJwcmV0IHRoZQogICAgaW5pdGlhbCB2YWx1ZSBvZiAqXCpidWZmZXJfbGVuZ3RoKiBhcyB0aGUgYnVmZmVyIHNpemUuICBJdCB3aWxsIHRoZW4gY29weSB0aGUKICAgIGVuY29kZWQgZGF0YSBpbnRvIHRoZSBidWZmZXIgYW5kIE5VTC10ZXJtaW5hdGUgaXQuICBJZiB0aGUgYnVmZmVyIGlzIG5vdCBsYXJnZQogICAgZW5vdWdoLCBhIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgc2V0LgpAQCAtMjM1LDYyICsyMjAsNjIgQEAKIAogYGBiYGAgKDpjbGFzczpgaW50YCkgW3Vuc2lnbmVkIGNoYXJdCiAgICBDb252ZXJ0IGEgbm9ubmVnYXRpdmUgUHl0aG9uIGludGVnZXIgdG8gYW4gdW5zaWduZWQgdGlueSBpbnQsIHN0b3JlZCBpbiBhIEMKLSAgIDpjdHlwZTpgdW5zaWduZWQgY2hhcmAuCisgICA6Yzp0eXBlOmB1bnNpZ25lZCBjaGFyYC4KIAogYGBCYGAgKDpjbGFzczpgaW50YCkgW3Vuc2lnbmVkIGNoYXJdCiAgICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSB0aW55IGludCB3aXRob3V0IG92ZXJmbG93IGNoZWNraW5nLCBzdG9yZWQgaW4gYSBDCi0gICA6Y3R5cGU6YHVuc2lnbmVkIGNoYXJgLgorICAgOmM6dHlwZTpgdW5zaWduZWQgY2hhcmAuCiAKIGBgaGBgICg6Y2xhc3M6YGludGApIFtzaG9ydCBpbnRdCi0gICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBDIDpjdHlwZTpgc2hvcnQgaW50YC4KKyAgIENvbnZlcnQgYSBQeXRob24gaW50ZWdlciB0byBhIEMgOmM6dHlwZTpgc2hvcnQgaW50YC4KIAogYGBIYGAgKDpjbGFzczpgaW50YCkgW3Vuc2lnbmVkIHNob3J0IGludF0KLSAgIENvbnZlcnQgYSBQeXRob24gaW50ZWdlciB0byBhIEMgOmN0eXBlOmB1bnNpZ25lZCBzaG9ydCBpbnRgLCB3aXRob3V0IG92ZXJmbG93CisgICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBDIDpjOnR5cGU6YHVuc2lnbmVkIHNob3J0IGludGAsIHdpdGhvdXQgb3ZlcmZsb3cKICAgIGNoZWNraW5nLgogCiBgYGlgYCAoOmNsYXNzOmBpbnRgKSBbaW50XQotICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgcGxhaW4gQyA6Y3R5cGU6YGludGAuCisgICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBwbGFpbiBDIDpjOnR5cGU6YGludGAuCiAKIGBgSWBgICg6Y2xhc3M6YGludGApIFt1bnNpZ25lZCBpbnRdCi0gICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBDIDpjdHlwZTpgdW5zaWduZWQgaW50YCwgd2l0aG91dCBvdmVyZmxvdworICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgLCB3aXRob3V0IG92ZXJmbG93CiAgICBjaGVja2luZy4KIAogYGBsYGAgKDpjbGFzczpgaW50YCkgW2xvbmcgaW50XQotICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Y3R5cGU6YGxvbmcgaW50YC4KKyAgIENvbnZlcnQgYSBQeXRob24gaW50ZWdlciB0byBhIEMgOmM6dHlwZTpgbG9uZyBpbnRgLgogCiBgYGtgYCAoOmNsYXNzOmBpbnRgKSBbdW5zaWduZWQgbG9uZ10KLSAgIENvbnZlcnQgYSBQeXRob24gaW50ZWdlciB0byBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCB3aXRob3V0CisgICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBDIDpjOnR5cGU6YHVuc2lnbmVkIGxvbmdgIHdpdGhvdXQKICAgIG92ZXJmbG93IGNoZWNraW5nLgogCiBgYExgYCAoOmNsYXNzOmBpbnRgKSBbUFlfTE9OR19MT05HXQotICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Y3R5cGU6YGxvbmcgbG9uZ2AuICBUaGlzIGZvcm1hdCBpcyBvbmx5Ci0gICBhdmFpbGFibGUgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCA6Y3R5cGU6YGxvbmcgbG9uZ2AgKG9yIDpjdHlwZTpgX2ludDY0YCBvbgorICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Yzp0eXBlOmBsb25nIGxvbmdgLiAgVGhpcyBmb3JtYXQgaXMgb25seQorICAgYXZhaWxhYmxlIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgOmM6dHlwZTpgbG9uZyBsb25nYCAob3IgOmM6dHlwZTpgX2ludDY0YCBvbgogICAgV2luZG93cykuCiAKIGBgS2BgICg6Y2xhc3M6YGludGApIFt1bnNpZ25lZCBQWV9MT05HX0xPTkddCi0gICBDb252ZXJ0IGEgUHl0aG9uIGludGVnZXIgdG8gYSBDIDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYAorICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgCiAgICB3aXRob3V0IG92ZXJmbG93IGNoZWNraW5nLiAgVGhpcyBmb3JtYXQgaXMgb25seSBhdmFpbGFibGUgb24gcGxhdGZvcm1zIHRoYXQKLSAgIHN1cHBvcnQgOmN0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIChvciA6Y3R5cGU6YHVuc2lnbmVkIF9pbnQ2NGAgb24gV2luZG93cykuCisgICBzdXBwb3J0IDpjOnR5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgKG9yIDpjOnR5cGU6YHVuc2lnbmVkIF9pbnQ2NGAgb24gV2luZG93cykuCiAKIGBgbmBgICg6Y2xhc3M6YGludGApIFtQeV9zc2l6ZV90XQotICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Y3R5cGU6YFB5X3NzaXplX3RgLgorICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyIHRvIGEgQyA6Yzp0eXBlOmBQeV9zc2l6ZV90YC4KIAogYGBjYGAgKDpjbGFzczpgYnl0ZXNgIG9mIGxlbmd0aCAxKSBbY2hhcl0KICAgIENvbnZlcnQgYSBQeXRob24gYnl0ZSwgcmVwcmVzZW50ZWQgYXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgb2YgbGVuZ3RoIDEsCi0gICB0byBhIEMgOmN0eXBlOmBjaGFyYC4KKyAgIHRvIGEgQyA6Yzp0eXBlOmBjaGFyYC4KIAogYGBDYGAgKDpjbGFzczpgc3RyYCBvZiBsZW5ndGggMSkgW2ludF0KICAgIENvbnZlcnQgYSBQeXRob24gY2hhcmFjdGVyLCByZXByZXNlbnRlZCBhcyBhIDpjbGFzczpgc3RyYCBvYmplY3Qgb2YKLSAgIGxlbmd0aCAxLCB0byBhIEMgOmN0eXBlOmBpbnRgLgorICAgbGVuZ3RoIDEsIHRvIGEgQyA6Yzp0eXBlOmBpbnRgLgogCiBgYGZgYCAoOmNsYXNzOmBmbG9hdGApIFtmbG9hdF0KLSAgIENvbnZlcnQgYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGEgQyA6Y3R5cGU6YGZsb2F0YC4KKyAgIENvbnZlcnQgYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGEgQyA6Yzp0eXBlOmBmbG9hdGAuCiAKIGBgZGBgICg6Y2xhc3M6YGZsb2F0YCkgW2RvdWJsZV0KLSAgIENvbnZlcnQgYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHRvIGEgQyA6Y3R5cGU6YGRvdWJsZWAuCisgICBDb252ZXJ0IGEgUHl0aG9uIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBhIEMgOmM6dHlwZTpgZG91YmxlYC4KIAogYGBEYGAgKDpjbGFzczpgY29tcGxleGApIFtQeV9jb21wbGV4XQotICAgQ29udmVydCBhIFB5dGhvbiBjb21wbGV4IG51bWJlciB0byBhIEMgOmN0eXBlOmBQeV9jb21wbGV4YCBzdHJ1Y3R1cmUuCisgICBDb252ZXJ0IGEgUHl0aG9uIGNvbXBsZXggbnVtYmVyIHRvIGEgQyA6Yzp0eXBlOmBQeV9jb21wbGV4YCBzdHJ1Y3R1cmUuCiAKIE90aGVyIG9iamVjdHMKIC0tLS0tLS0tLS0tLS0KQEAgLTMwMywyMCArMjg4LDIwIEBACiBgYE8hYGAgKG9iamVjdCkgWyp0eXBlb2JqZWN0KiwgUHlPYmplY3QgXCpdCiAgICBTdG9yZSBhIFB5dGhvbiBvYmplY3QgaW4gYSBDIG9iamVjdCBwb2ludGVyLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGBgT2BgLCBidXQKICAgIHRha2VzIHR3byBDIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIHRoZSBhZGRyZXNzIG9mIGEgUHl0aG9uIHR5cGUgb2JqZWN0LCB0aGUKLSAgIHNlY29uZCBpcyB0aGUgYWRkcmVzcyBvZiB0aGUgQyB2YXJpYWJsZSAob2YgdHlwZSA6Y3R5cGU6YFB5T2JqZWN0XCpgKSBpbnRvIHdoaWNoCisgICBzZWNvbmQgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIEMgdmFyaWFibGUgKG9mIHR5cGUgOmM6dHlwZTpgUHlPYmplY3RcKmApIGludG8gd2hpY2gKICAgIHRoZSBvYmplY3QgcG9pbnRlciBpcyBzdG9yZWQuICBJZiB0aGUgUHl0aG9uIG9iamVjdCBkb2VzIG5vdCBoYXZlIHRoZSByZXF1aXJlZAogICAgdHlwZSwgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKIGBgTyZgYCAob2JqZWN0KSBbKmNvbnZlcnRlciosICphbnl0aGluZypdCiAgICBDb252ZXJ0IGEgUHl0aG9uIG9iamVjdCB0byBhIEMgdmFyaWFibGUgdGhyb3VnaCBhICpjb252ZXJ0ZXIqIGZ1bmN0aW9uLiAgVGhpcwogICAgdGFrZXMgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgZnVuY3Rpb24sIHRoZSBzZWNvbmQgaXMgdGhlIGFkZHJlc3Mgb2YgYSBDCi0gICB2YXJpYWJsZSAob2YgYXJiaXRyYXJ5IHR5cGUpLCBjb252ZXJ0ZWQgdG8gOmN0eXBlOmB2b2lkIFwqYC4gIFRoZSAqY29udmVydGVyKgorICAgdmFyaWFibGUgKG9mIGFyYml0cmFyeSB0eXBlKSwgY29udmVydGVkIHRvIDpjOnR5cGU6YHZvaWQgXCpgLiAgVGhlICpjb252ZXJ0ZXIqCiAgICBmdW5jdGlvbiBpbiB0dXJuIGlzIGNhbGxlZCBhcyBmb2xsb3dzOjoKIAogICAgICAgc3RhdHVzID0gY29udmVydGVyKG9iamVjdCwgYWRkcmVzcyk7CiAKICAgIHdoZXJlICpvYmplY3QqIGlzIHRoZSBQeXRob24gb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCBhbmQgKmFkZHJlc3MqIGlzIHRoZQotICAgOmN0eXBlOmB2b2lkXCpgIGFyZ3VtZW50IHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgOmNmdW5jOmBQeUFyZ19QYXJzZVwqYCBmdW5jdGlvbi4KKyAgIDpjOnR5cGU6YHZvaWRcKmAgYXJndW1lbnQgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVwqYCBmdW5jdGlvbi4KICAgIFRoZSByZXR1cm5lZCAqc3RhdHVzKiBzaG91bGQgYmUgYGAxYGAgZm9yIGEgc3VjY2Vzc2Z1bCBjb252ZXJzaW9uIGFuZCBgYDBgYCBpZgogICAgdGhlIGNvbnZlcnNpb24gaGFzIGZhaWxlZC4gIFdoZW4gdGhlIGNvbnZlcnNpb24gZmFpbHMsIHRoZSAqY29udmVydGVyKiBmdW5jdGlvbgogICAgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgbGVhdmUgdGhlIGNvbnRlbnQgb2YgKmFkZHJlc3MqIHVubW9kaWZpZWQuCkBAIC0zNDgsMTMgKzMzMywxMyBAQAogICAgSW5kaWNhdGVzIHRoYXQgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMgaW4gdGhlIFB5dGhvbiBhcmd1bWVudCBsaXN0IGFyZSBvcHRpb25hbC4KICAgIFRoZSBDIHZhcmlhYmxlcyBjb3JyZXNwb25kaW5nIHRvIG9wdGlvbmFsIGFyZ3VtZW50cyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8KICAgIHRoZWlyIGRlZmF1bHQgdmFsdWUgLS0tIHdoZW4gYW4gb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90IHNwZWNpZmllZCwKLSAgIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgZG9lcyBub3QgdG91Y2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBjb3JyZXNwb25kaW5nIEMKKyAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGRvZXMgbm90IHRvdWNoIHRoZSBjb250ZW50cyBvZiB0aGUgY29ycmVzcG9uZGluZyBDCiAgICB2YXJpYWJsZShzKS4KIAogYGA6YGAKICAgIFRoZSBsaXN0IG9mIGZvcm1hdCB1bml0cyBlbmRzIGhlcmU7IHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIGNvbG9uIGlzIHVzZWQgYXMgdGhlCiAgICBmdW5jdGlvbiBuYW1lIGluIGVycm9yIG1lc3NhZ2VzICh0aGUgImFzc29jaWF0ZWQgdmFsdWUiIG9mIHRoZSBleGNlcHRpb24gdGhhdAotICAgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCByYWlzZXMpLgorICAgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgcmFpc2VzKS4KIAogYGA7YGAKICAgIFRoZSBsaXN0IG9mIGZvcm1hdCB1bml0cyBlbmRzIGhlcmU7IHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIHNlbWljb2xvbiBpcyB1c2VkIGFzCkBAIC0zNzIsNDMgKzM1Nyw1MiBAQAogCiBGb3IgdGhlIGNvbnZlcnNpb24gdG8gc3VjY2VlZCwgdGhlICphcmcqIG9iamVjdCBtdXN0IG1hdGNoIHRoZSBmb3JtYXQKIGFuZCB0aGUgZm9ybWF0IG11c3QgYmUgZXhoYXVzdGVkLiAgT24gc3VjY2VzcywgdGhlCi06Y2Z1bmM6YFB5QXJnX1BhcnNlXCpgIGZ1bmN0aW9ucyByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHRoZXkgcmV0dXJuCis6YzpmdW5jOmBQeUFyZ19QYXJzZVwqYCBmdW5jdGlvbnMgcmV0dXJuIHRydWUsIG90aGVyd2lzZSB0aGV5IHJldHVybgogZmFsc2UgYW5kIHJhaXNlIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4gV2hlbiB0aGUKLTpjZnVuYzpgUHlBcmdfUGFyc2VcKmAgZnVuY3Rpb25zIGZhaWwgZHVlIHRvIGNvbnZlcnNpb24gZmFpbHVyZSBpbiBvbmUKKzpjOmZ1bmM6YFB5QXJnX1BhcnNlXCpgIGZ1bmN0aW9ucyBmYWlsIGR1ZSB0byBjb252ZXJzaW9uIGZhaWx1cmUgaW4gb25lCiBvZiB0aGUgZm9ybWF0IHVuaXRzLCB0aGUgdmFyaWFibGVzIGF0IHRoZSBhZGRyZXNzZXMgY29ycmVzcG9uZGluZyB0byB0aGF0CiBhbmQgdGhlIGZvbGxvd2luZyBmb3JtYXQgdW5pdHMgYXJlIGxlZnQgdW50b3VjaGVkLgogCiBBUEkgRnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICphcmdzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlBcmdfUGFyc2VUdXBsZShQeU9iamVjdCAqYXJncywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIFBhcnNlIHRoZSBwYXJhbWV0ZXJzIG9mIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBvbmx5IHBvc2l0aW9uYWwgcGFyYW1ldGVycyBpbnRvCiAgICBsb2NhbCB2YXJpYWJsZXMuICBSZXR1cm5zIHRydWUgb24gc3VjY2Vzczsgb24gZmFpbHVyZSwgaXQgcmV0dXJucyBmYWxzZSBhbmQKICAgIHJhaXNlcyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUFyZ19WYVBhcnNlKFB5T2JqZWN0ICphcmdzLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5QXJnX1ZhUGFyc2UoUHlPYmplY3QgKmFyZ3MsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKIAotICAgSWRlbnRpY2FsIHRvIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSB2YV9saXN0IHJhdGhlcgorICAgSWRlbnRpY2FsIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEgdmFfbGlzdCByYXRoZXIKICAgIHRoYW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdywgY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyICprZXl3b3Jkc1tdLCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3LCBjb25zdCBjaGFyICpmb3JtYXQsIGNoYXIgKmtleXdvcmRzW10sIC4uLikKIAogICAgUGFyc2UgdGhlIHBhcmFtZXRlcnMgb2YgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGJvdGggcG9zaXRpb25hbCBhbmQga2V5d29yZAogICAgcGFyYW1ldGVycyBpbnRvIGxvY2FsIHZhcmlhYmxlcy4gIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlLCBpdAogICAgcmV0dXJucyBmYWxzZSBhbmQgcmFpc2VzIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzKFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3csIGNvbnN0IGNoYXIgKmZvcm1hdCwgY2hhciAqa2V5d29yZHNbXSwgdmFfbGlzdCB2YXJncykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdywgY29uc3QgY2hhciAqZm9ybWF0LCBjaGFyICprZXl3b3Jkc1tdLCB2YV9saXN0IHZhcmdzKQogCi0gICBJZGVudGljYWwgdG8gOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEKKyAgIElkZW50aWNhbCB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBleGNlcHQgdGhhdCBpdCBhY2NlcHRzIGEKICAgIHZhX2xpc3QgcmF0aGVyIHRoYW4gYSB2YXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopCisKKyAgIEVuc3VyZSB0aGF0IHRoZSBrZXlzIGluIHRoZSBrZXl3b3JkcyBhcmd1bWVudCBkaWN0aW9uYXJ5IGFyZSBzdHJpbmdzLiAgVGhpcworICAgaXMgb25seSBuZWVkZWQgaWYgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCBpcyBub3QgdXNlZCwgc2luY2UgdGhlCisgICBsYXR0ZXIgYWxyZWFkeSBkb2VzIHRoaXMgY2hlY2suCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIFhYWCBkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQKLS4uIGNmdW5jdGlvbjo6IGludCBQeUFyZ19QYXJzZShQeU9iamVjdCAqYXJncywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5QXJnX1BhcnNlKFB5T2JqZWN0ICphcmdzLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgRnVuY3Rpb24gdXNlZCB0byBkZWNvbnN0cnVjdCB0aGUgYXJndW1lbnQgbGlzdHMgb2YgIm9sZC1zdHlsZSIgZnVuY3Rpb25zIC0tLQogICAgdGhlc2UgYXJlIGZ1bmN0aW9ucyB3aGljaCB1c2UgdGhlIDpjb25zdDpgTUVUSF9PTERBUkdTYCBwYXJhbWV0ZXIgcGFyc2luZwpAQCAtNDE4LDcgKzQxMiw3IEBACiAgICBob3dldmVyLCBhbmQgbWF5IGNvbnRpbnVlIHRvIGJlIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlBcmdfVW5wYWNrVHVwbGUoUHlPYmplY3QgKmFyZ3MsIGNvbnN0IGNoYXIgKm5hbWUsIFB5X3NzaXplX3QgbWluLCBQeV9zc2l6ZV90IG1heCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUFyZ19VbnBhY2tUdXBsZShQeU9iamVjdCAqYXJncywgY29uc3QgY2hhciAqbmFtZSwgUHlfc3NpemVfdCBtaW4sIFB5X3NzaXplX3QgbWF4LCAuLi4pCiAKICAgIEEgc2ltcGxlciBmb3JtIG9mIHBhcmFtZXRlciByZXRyaWV2YWwgd2hpY2ggZG9lcyBub3QgdXNlIGEgZm9ybWF0IHN0cmluZyB0bwogICAgc3BlY2lmeSB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cy4gIEZ1bmN0aW9ucyB3aGljaCB1c2UgdGhpcyBtZXRob2QgdG8gcmV0cmlldmUKQEAgLTQyNyw3ICs0MjEsNyBAQAogICAgKmFyZ3MqOyBpdCBtdXN0IGFjdHVhbGx5IGJlIGEgdHVwbGUuICBUaGUgbGVuZ3RoIG9mIHRoZSB0dXBsZSBtdXN0IGJlIGF0IGxlYXN0CiAgICAqbWluKiBhbmQgbm8gbW9yZSB0aGFuICptYXgqOyAqbWluKiBhbmQgKm1heCogbWF5IGJlIGVxdWFsLiAgQWRkaXRpb25hbAogICAgYXJndW1lbnRzIG11c3QgYmUgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbiwgZWFjaCBvZiB3aGljaCBzaG91bGQgYmUgYSBwb2ludGVyIHRvIGEKLSAgIDpjdHlwZTpgUHlPYmplY3RcKmAgdmFyaWFibGU7IHRoZXNlIHdpbGwgYmUgZmlsbGVkIGluIHdpdGggdGhlIHZhbHVlcyBmcm9tCisgICA6Yzp0eXBlOmBQeU9iamVjdFwqYCB2YXJpYWJsZTsgdGhlc2Ugd2lsbCBiZSBmaWxsZWQgaW4gd2l0aCB0aGUgdmFsdWVzIGZyb20KICAgICphcmdzKjsgdGhleSB3aWxsIGNvbnRhaW4gYm9ycm93ZWQgcmVmZXJlbmNlcy4gIFRoZSB2YXJpYWJsZXMgd2hpY2ggY29ycmVzcG9uZAogICAgdG8gb3B0aW9uYWwgcGFyYW1ldGVycyBub3QgZ2l2ZW4gYnkgKmFyZ3MqIHdpbGwgbm90IGJlIGZpbGxlZCBpbjsgdGhlc2Ugc2hvdWxkCiAgICBiZSBpbml0aWFsaXplZCBieSB0aGUgY2FsbGVyLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzIGFuZCBmYWxzZSBpZgpAQCAtNDUwLDggKzQ0NCw4IEBACiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgIH0KIAotICAgVGhlIGNhbGwgdG8gOmNmdW5jOmBQeUFyZ19VbnBhY2tUdXBsZWAgaW4gdGhpcyBleGFtcGxlIGlzIGVudGlyZWx5IGVxdWl2YWxlbnQgdG8KLSAgIHRoaXMgY2FsbCB0byA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOjoKKyAgIFRoZSBjYWxsIHRvIDpjOmZ1bmM6YFB5QXJnX1VucGFja1R1cGxlYCBpbiB0aGlzIGV4YW1wbGUgaXMgZW50aXJlbHkgZXF1aXZhbGVudCB0bworICAgdGhpcyBjYWxsIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOjoKIAogICAgICAgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPOnJlZiIsICZvYmplY3QsICZjYWxsYmFjaykKIApAQCAtNDYwLDE0ICs0NTQsMTQgQEAKIEJ1aWxkaW5nIHZhbHVlcwogLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9CdWlsZFZhbHVlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9CdWlsZFZhbHVlKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBDcmVhdGUgYSBuZXcgdmFsdWUgYmFzZWQgb24gYSBmb3JtYXQgc3RyaW5nIHNpbWlsYXIgdG8gdGhvc2UgYWNjZXB0ZWQgYnkgdGhlCi0gICA6Y2Z1bmM6YFB5QXJnX1BhcnNlXCpgIGZhbWlseSBvZiBmdW5jdGlvbnMgYW5kIGEgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgUmV0dXJucworICAgOmM6ZnVuYzpgUHlBcmdfUGFyc2VcKmAgZmFtaWx5IG9mIGZ1bmN0aW9ucyBhbmQgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMuICBSZXR1cm5zCiAgICB0aGUgdmFsdWUgb3IgKk5VTEwqIGluIHRoZSBjYXNlIG9mIGFuIGVycm9yOyBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYKICAgICpOVUxMKiBpcyByZXR1cm5lZC4KIAotICAgOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCBkb2VzIG5vdCBhbHdheXMgYnVpbGQgYSB0dXBsZS4gIEl0IGJ1aWxkcyBhIHR1cGxlIG9ubHkgaWYKKyAgIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIGRvZXMgbm90IGFsd2F5cyBidWlsZCBhIHR1cGxlLiAgSXQgYnVpbGRzIGEgdHVwbGUgb25seSBpZgogICAgaXRzIGZvcm1hdCBzdHJpbmcgY29udGFpbnMgdHdvIG9yIG1vcmUgZm9ybWF0IHVuaXRzLiAgSWYgdGhlIGZvcm1hdCBzdHJpbmcgaXMKICAgIGVtcHR5LCBpdCByZXR1cm5zIGBgTm9uZWBgOyBpZiBpdCBjb250YWlucyBleGFjdGx5IG9uZSBmb3JtYXQgdW5pdCwgaXQgcmV0dXJucwogICAgd2hhdGV2ZXIgb2JqZWN0IGlzIGRlc2NyaWJlZCBieSB0aGF0IGZvcm1hdCB1bml0LiAgVG8gZm9yY2UgaXQgdG8gcmV0dXJuIGEgdHVwbGUKQEAgLTQ3NiwxMCArNDcwLDEwIEBACiAgICBXaGVuIG1lbW9yeSBidWZmZXJzIGFyZSBwYXNzZWQgYXMgcGFyYW1ldGVycyB0byBzdXBwbHkgZGF0YSB0byBidWlsZCBvYmplY3RzLCBhcwogICAgZm9yIHRoZSBgYHNgYCBhbmQgYGBzI2BgIGZvcm1hdHMsIHRoZSByZXF1aXJlZCBkYXRhIGlzIGNvcGllZC4gIEJ1ZmZlcnMgcHJvdmlkZWQKICAgIGJ5IHRoZSBjYWxsZXIgYXJlIG5ldmVyIHJlZmVyZW5jZWQgYnkgdGhlIG9iamVjdHMgY3JlYXRlZCBieQotICAgOmNmdW5jOmBQeV9CdWlsZFZhbHVlYC4gIEluIG90aGVyIHdvcmRzLCBpZiB5b3VyIGNvZGUgaW52b2tlcyA6Y2Z1bmM6YG1hbGxvY2AKLSAgIGFuZCBwYXNzZXMgdGhlIGFsbG9jYXRlZCBtZW1vcnkgdG8gOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCwgeW91ciBjb2RlIGlzCi0gICByZXNwb25zaWJsZSBmb3IgY2FsbGluZyA6Y2Z1bmM6YGZyZWVgIGZvciB0aGF0IG1lbW9yeSBvbmNlCi0gICA6Y2Z1bmM6YFB5X0J1aWxkVmFsdWVgIHJldHVybnMuCisgICA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYC4gIEluIG90aGVyIHdvcmRzLCBpZiB5b3VyIGNvZGUgaW52b2tlcyA6YzpmdW5jOmBtYWxsb2NgCisgICBhbmQgcGFzc2VzIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHRvIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgLCB5b3VyIGNvZGUgaXMKKyAgIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDpjOmZ1bmM6YGZyZWVgIGZvciB0aGF0IG1lbW9yeSBvbmNlCisgICA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCByZXR1cm5zLgogCiAgICBJbiB0aGUgZm9sbG93aW5nIGRlc2NyaXB0aW9uLCB0aGUgcXVvdGVkIGZvcm0gaXMgdGhlIGZvcm1hdCB1bml0OyB0aGUgZW50cnkgaW4KICAgIChyb3VuZCkgcGFyZW50aGVzZXMgaXMgdGhlIFB5dGhvbiBvYmplY3QgdHlwZSB0aGF0IHRoZSBmb3JtYXQgdW5pdCB3aWxsIHJldHVybjsKQEAgLTUyMiw3MiArNTE2LDcwIEBACiAgICAgICBhbmQgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKICAgIGBgVWBgICg6Y2xhc3M6YHN0cmAgb3IgYGBOb25lYGApIFtjaGFyIFwqXQotICAgICAgQ29udmVydCBhIG51bGwtdGVybWluYXRlZCBDIHN0cmluZyB0byBhIFB5dGhvbiB1bmljb2RlIG9iamVjdC4gSWYgdGhlIEMgc3RyaW5nCi0gICAgICBwb2ludGVyIGlzICpOVUxMKiwgYGBOb25lYGAgaXMgdXNlZC4KKyAgICAgIFNhbWUgYXMgYGBzYGAuCiAKICAgIGBgVSNgYCAoOmNsYXNzOmBzdHJgIG9yIGBgTm9uZWBgKSBbY2hhciBcKiwgaW50XQotICAgICAgQ29udmVydCBhIEMgc3RyaW5nIGFuZCBpdHMgbGVuZ3RoIHRvIGEgUHl0aG9uIHVuaWNvZGUgb2JqZWN0LiBJZiB0aGUgQyBzdHJpbmcKLSAgICAgIHBvaW50ZXIgaXMgKk5VTEwqLCB0aGUgbGVuZ3RoIGlzIGlnbm9yZWQgYW5kIGBgTm9uZWBgIGlzIHJldHVybmVkLgorICAgICAgU2FtZSBhcyBgYHMjYGAuCiAKICAgIGBgaWBgICg6Y2xhc3M6YGludGApIFtpbnRdCi0gICAgICBDb252ZXJ0IGEgcGxhaW4gQyA6Y3R5cGU6YGludGAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCisgICAgICBDb252ZXJ0IGEgcGxhaW4gQyA6Yzp0eXBlOmBpbnRgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgogCiAgICBgYGJgYCAoOmNsYXNzOmBpbnRgKSBbY2hhcl0KLSAgICAgIENvbnZlcnQgYSBwbGFpbiBDIDpjdHlwZTpgY2hhcmAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCisgICAgICBDb252ZXJ0IGEgcGxhaW4gQyA6Yzp0eXBlOmBjaGFyYCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4KIAogICAgYGBoYGAgKDpjbGFzczpgaW50YCkgW3Nob3J0IGludF0KLSAgICAgIENvbnZlcnQgYSBwbGFpbiBDIDpjdHlwZTpgc2hvcnQgaW50YCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4KKyAgICAgIENvbnZlcnQgYSBwbGFpbiBDIDpjOnR5cGU6YHNob3J0IGludGAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCiAKICAgIGBgbGBgICg6Y2xhc3M6YGludGApIFtsb25nIGludF0KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgbG9uZyBpbnRgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgorICAgICAgQ29udmVydCBhIEMgOmM6dHlwZTpgbG9uZyBpbnRgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgogCiAgICBgYEJgYCAoOmNsYXNzOmBpbnRgKSBbdW5zaWduZWQgY2hhcl0KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgdW5zaWduZWQgY2hhcmAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBjaGFyYCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4KIAogICAgYGBIYGAgKDpjbGFzczpgaW50YCkgW3Vuc2lnbmVkIHNob3J0IGludF0KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgdW5zaWduZWQgc2hvcnQgaW50YCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4KKyAgICAgIENvbnZlcnQgYSBDIDpjOnR5cGU6YHVuc2lnbmVkIHNob3J0IGludGAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCiAKICAgIGBgSWBgICg6Y2xhc3M6YGludGApIFt1bnNpZ25lZCBpbnRdCi0gICAgICBDb252ZXJ0IGEgQyA6Y3R5cGU6YHVuc2lnbmVkIGludGAgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgogCiAgICBgYGtgYCAoOmNsYXNzOmBpbnRgKSBbdW5zaWduZWQgbG9uZ10KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgdW5zaWduZWQgbG9uZ2AgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nYCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4KIAogICAgYGBMYGAgKDpjbGFzczpgaW50YCkgW1BZX0xPTkdfTE9OR10KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgbG9uZyBsb25nYCB0byBhIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4gT25seSBhdmFpbGFibGUKLSAgICAgIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgOmN0eXBlOmBsb25nIGxvbmdgIChvciA6Y3R5cGU6YF9pbnQ2NGAgb24KKyAgICAgIENvbnZlcnQgYSBDIDpjOnR5cGU6YGxvbmcgbG9uZ2AgdG8gYSBQeXRob24gaW50ZWdlciBvYmplY3QuIE9ubHkgYXZhaWxhYmxlCisgICAgICBvbiBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0IDpjOnR5cGU6YGxvbmcgbG9uZ2AgKG9yIDpjOnR5cGU6YF9pbnQ2NGAgb24KICAgICAgIFdpbmRvd3MpLgogCiAgICBgYEtgYCAoOmNsYXNzOmBpbnRgKSBbdW5zaWduZWQgUFlfTE9OR19MT05HXQotICAgICAgQ29udmVydCBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LiBPbmx5Ci0gICAgICBhdmFpbGFibGUgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgKG9yCi0gICAgICA6Y3R5cGU6YHVuc2lnbmVkIF9pbnQ2NGAgb24gV2luZG93cykuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIHRvIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LiBPbmx5CisgICAgICBhdmFpbGFibGUgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nIGxvbmdgIChvcgorICAgICAgOmM6dHlwZTpgdW5zaWduZWQgX2ludDY0YCBvbiBXaW5kb3dzKS4KIAogICAgYGBuYGAgKDpjbGFzczpgaW50YCkgW1B5X3NzaXplX3RdCi0gICAgICBDb252ZXJ0IGEgQyA6Y3R5cGU6YFB5X3NzaXplX3RgIHRvIGEgUHl0aG9uIGludGVnZXIuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmBQeV9zc2l6ZV90YCB0byBhIFB5dGhvbiBpbnRlZ2VyLgogCiAgICBgYGNgYCAoOmNsYXNzOmBieXRlc2Agb2YgbGVuZ3RoIDEpIFtjaGFyXQotICAgICAgQ29udmVydCBhIEMgOmN0eXBlOmBpbnRgIHJlcHJlc2VudGluZyBhIGJ5dGUgdG8gYSBQeXRob24gOmNsYXNzOmBieXRlc2Agb2JqZWN0IG9mCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmBpbnRgIHJlcHJlc2VudGluZyBhIGJ5dGUgdG8gYSBQeXRob24gOmNsYXNzOmBieXRlc2Agb2JqZWN0IG9mCiAgICAgICBsZW5ndGggMS4KIAogICAgYGBDYGAgKDpjbGFzczpgc3RyYCBvZiBsZW5ndGggMSkgW2ludF0KLSAgICAgIENvbnZlcnQgYSBDIDpjdHlwZTpgaW50YCByZXByZXNlbnRpbmcgYSBjaGFyYWN0ZXIgdG8gUHl0aG9uIDpjbGFzczpgc3RyYAorICAgICAgQ29udmVydCBhIEMgOmM6dHlwZTpgaW50YCByZXByZXNlbnRpbmcgYSBjaGFyYWN0ZXIgdG8gUHl0aG9uIDpjbGFzczpgc3RyYAogICAgICAgb2JqZWN0IG9mIGxlbmd0aCAxLgogCiAgICBgYGRgYCAoOmNsYXNzOmBmbG9hdGApIFtkb3VibGVdCi0gICAgICBDb252ZXJ0IGEgQyA6Y3R5cGU6YGRvdWJsZWAgdG8gYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorICAgICAgQ29udmVydCBhIEMgOmM6dHlwZTpgZG91YmxlYCB0byBhIFB5dGhvbiBmbG9hdGluZyBwb2ludCBudW1iZXIuCiAKICAgIGBgZmBgICg6Y2xhc3M6YGZsb2F0YCkgW2Zsb2F0XQotICAgICAgQ29udmVydCBhIEMgOmN0eXBlOmBmbG9hdGAgdG8gYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorICAgICAgQ29udmVydCBhIEMgOmM6dHlwZTpgZmxvYXRgIHRvIGEgUHl0aG9uIGZsb2F0aW5nIHBvaW50IG51bWJlci4KIAogICAgYGBEYGAgKDpjbGFzczpgY29tcGxleGApIFtQeV9jb21wbGV4IFwqXQotICAgICAgQ29udmVydCBhIEMgOmN0eXBlOmBQeV9jb21wbGV4YCBzdHJ1Y3R1cmUgdG8gYSBQeXRob24gY29tcGxleCBudW1iZXIuCisgICAgICBDb252ZXJ0IGEgQyA6Yzp0eXBlOmBQeV9jb21wbGV4YCBzdHJ1Y3R1cmUgdG8gYSBQeXRob24gY29tcGxleCBudW1iZXIuCiAKICAgIGBgT2BgIChvYmplY3QpIFtQeU9iamVjdCBcKl0KICAgICAgIFBhc3MgYSBQeXRob24gb2JqZWN0IHVudG91Y2hlZCAoZXhjZXB0IGZvciBpdHMgcmVmZXJlbmNlIGNvdW50LCB3aGljaCBpcwogICAgICAgaW5jcmVtZW50ZWQgYnkgb25lKS4gIElmIHRoZSBvYmplY3QgcGFzc2VkIGluIGlzIGEgKk5VTEwqIHBvaW50ZXIsIGl0IGlzIGFzc3VtZWQKICAgICAgIHRoYXQgdGhpcyB3YXMgY2F1c2VkIGJlY2F1c2UgdGhlIGNhbGwgcHJvZHVjaW5nIHRoZSBhcmd1bWVudCBmb3VuZCBhbiBlcnJvciBhbmQKLSAgICAgIHNldCBhbiBleGNlcHRpb24uIFRoZXJlZm9yZSwgOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCB3aWxsIHJldHVybiAqTlVMTCogYnV0IHdvbid0CisgICAgICBzZXQgYW4gZXhjZXB0aW9uLiBUaGVyZWZvcmUsIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIHdpbGwgcmV0dXJuICpOVUxMKiBidXQgd29uJ3QKICAgICAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4gIElmIG5vIGV4Y2VwdGlvbiBoYXMgYmVlbiByYWlzZWQgeWV0LCA6ZXhjOmBTeXN0ZW1FcnJvcmAgaXMKICAgICAgIHNldC4KIApAQCAtNjAxLDcgKzU5Myw3IEBACiAKICAgIGBgTyZgYCAob2JqZWN0KSBbKmNvbnZlcnRlciosICphbnl0aGluZypdCiAgICAgICBDb252ZXJ0ICphbnl0aGluZyogdG8gYSBQeXRob24gb2JqZWN0IHRocm91Z2ggYSAqY29udmVydGVyKiBmdW5jdGlvbi4gIFRoZQotICAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggKmFueXRoaW5nKiAod2hpY2ggc2hvdWxkIGJlIGNvbXBhdGlibGUgd2l0aCA6Y3R5cGU6YHZvaWQKKyAgICAgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoICphbnl0aGluZyogKHdoaWNoIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggOmM6dHlwZTpgdm9pZAogICAgICAgXCpgKSBhcyBpdHMgYXJndW1lbnQgYW5kIHNob3VsZCByZXR1cm4gYSAibmV3IiBQeXRob24gb2JqZWN0LCBvciAqTlVMTCogaWYgYW4KICAgICAgIGVycm9yIG9jY3VycmVkLgogCkBAIC02MTksNyArNjExLDcgQEAKICAgIElmIHRoZXJlIGlzIGFuIGVycm9yIGluIHRoZSBmb3JtYXQgc3RyaW5nLCB0aGUgOmV4YzpgU3lzdGVtRXJyb3JgIGV4Y2VwdGlvbiBpcwogICAgc2V0IGFuZCAqTlVMTCogcmV0dXJuZWQuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9WYUJ1aWxkVmFsdWUoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9WYUJ1aWxkVmFsdWUoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogCi0gICBJZGVudGljYWwgdG8gOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHZhX2xpc3QKKyAgIElkZW50aWNhbCB0byA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHZhX2xpc3QKICAgIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9ib29sLnJzdCBiL0RvYy9jLWFwaS9ib29sLnJzdAppbmRleCA0NDc5YmM2Li5hOWZiMzQyIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYm9vbC5yc3QKKysrIGIvRG9jL2MtYXBpL2Jvb2wucnN0CkBAIC0xMSwzNiArMTEsMzYgQEAKIGFyZSBhdmFpbGFibGUsIGhvd2V2ZXIuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5Qm9vbF9DaGVjayhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCb29sX0NoZWNrKFB5T2JqZWN0ICpvKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqbyogaXMgb2YgdHlwZSA6Y2RhdGE6YFB5Qm9vbF9UeXBlYC4KKyAgIFJldHVybiB0cnVlIGlmICpvKiBpcyBvZiB0eXBlIDpjOmRhdGE6YFB5Qm9vbF9UeXBlYC4KIAogCi0uLiBjdmFyOjogUHlPYmplY3QqIFB5X0ZhbHNlCisuLiBjOnZhcjo6IFB5T2JqZWN0KiBQeV9GYWxzZQogCiAgICBUaGUgUHl0aG9uIGBgRmFsc2VgYCBvYmplY3QuICBUaGlzIG9iamVjdCBoYXMgbm8gbWV0aG9kcy4gIEl0IG5lZWRzIHRvIGJlCiAgICB0cmVhdGVkIGp1c3QgbGlrZSBhbnkgb3RoZXIgb2JqZWN0IHdpdGggcmVzcGVjdCB0byByZWZlcmVuY2UgY291bnRzLgogCiAKLS4uIGN2YXI6OiBQeU9iamVjdCogUHlfVHJ1ZQorLi4gYzp2YXI6OiBQeU9iamVjdCogUHlfVHJ1ZQogCiAgICBUaGUgUHl0aG9uIGBgVHJ1ZWBgIG9iamVjdC4gIFRoaXMgb2JqZWN0IGhhcyBubyBtZXRob2RzLiAgSXQgbmVlZHMgdG8gYmUgdHJlYXRlZAogICAganVzdCBsaWtlIGFueSBvdGhlciBvYmplY3Qgd2l0aCByZXNwZWN0IHRvIHJlZmVyZW5jZSBjb3VudHMuCiAKIAotLi4gY21hY3JvOjogUHlfUkVUVVJOX0ZBTFNFCisuLiBjOm1hY3JvOjogUHlfUkVUVVJOX0ZBTFNFCiAKICAgIFJldHVybiA6Y29uc3Q6YFB5X0ZhbHNlYCBmcm9tIGEgZnVuY3Rpb24sIHByb3Blcmx5IGluY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlCiAgICBjb3VudC4KIAogCi0uLiBjbWFjcm86OiBQeV9SRVRVUk5fVFJVRQorLi4gYzptYWNybzo6IFB5X1JFVFVSTl9UUlVFCiAKICAgIFJldHVybiA6Y29uc3Q6YFB5X1RydWVgIGZyb20gYSBmdW5jdGlvbiwgcHJvcGVybHkgaW5jcmVtZW50aW5nIGl0cyByZWZlcmVuY2UKICAgIGNvdW50LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJvb2xfRnJvbUxvbmcobG9uZyB2KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJvb2xfRnJvbUxvbmcobG9uZyB2KQogCiAgICBSZXR1cm4gYSBuZXcgcmVmZXJlbmNlIHRvIDpjb25zdDpgUHlfVHJ1ZWAgb3IgOmNvbnN0OmBQeV9GYWxzZWAgZGVwZW5kaW5nIG9uIHRoZQogICAgdHJ1dGggdmFsdWUgb2YgKnYqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2J1ZmZlci5yc3QgYi9Eb2MvYy1hcGkvYnVmZmVyLnJzdAppbmRleCAwOTRmN2YyLi41YTM0YmMwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYnVmZmVyLnJzdAorKysgYi9Eb2MvYy1hcGkvYnVmZmVyLnJzdApAQCAtNTAsMTIgKzUwLDEyIEBACiBUaGVyZSBhcmUgdHdvIHdheXMgZm9yIGEgY29uc3VtZXIgb2YgdGhlIGJ1ZmZlciBpbnRlcmZhY2UgdG8gYWNxdWlyZSBhIGJ1ZmZlcgogb3ZlciBhIHRhcmdldCBvYmplY3Q6CiAKLSogY2FsbCA6Y2Z1bmM6YFB5T2JqZWN0X0dldEJ1ZmZlcmAgd2l0aCB0aGUgcmlnaHQgcGFyYW1ldGVyczsKKyogY2FsbCA6YzpmdW5jOmBQeU9iamVjdF9HZXRCdWZmZXJgIHdpdGggdGhlIHJpZ2h0IHBhcmFtZXRlcnM7CiAKLSogY2FsbCA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIChvciBvbmUgb2YgaXRzIHNpYmxpbmdzKSB3aXRoIG9uZSBvZiB0aGUKKyogY2FsbCA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCAob3Igb25lIG9mIGl0cyBzaWJsaW5ncykgd2l0aCBvbmUgb2YgdGhlCiAgIGBgeSpgYCwgYGB3KmBgIG9yIGBgcypgYCA6cmVmOmBmb3JtYXQgY29kZXMgPGFyZy1wYXJzaW5nPmAuCiAKLUluIGJvdGggY2FzZXMsIDpjZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAgbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgYnVmZmVyCitJbiBib3RoIGNhc2VzLCA6YzpmdW5jOmBQeUJ1ZmZlcl9SZWxlYXNlYCBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBidWZmZXIKIGlzbid0IG5lZWRlZCBhbnltb3JlLiAgRmFpbHVyZSB0byBkbyBzbyBjb3VsZCBsZWFkIHRvIHZhcmlvdXMgaXNzdWVzIHN1Y2ggYXMKIHJlc291cmNlIGxlYWtzLgogCkBAIC03Myw1NSArNzMsNTUgQEAKIGluIGl0cyBuYXRpdmUsIGluLW1lbW9yeSBmb3JtYXQuCiAKIENvbnRyYXJ5IHRvIG1vc3QgZGF0YSB0eXBlcyBleHBvc2VkIGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIsIGJ1ZmZlcnMKLWFyZSBub3QgOmN0eXBlOmBQeU9iamVjdGAgcG9pbnRlcnMgYnV0IHJhdGhlciBzaW1wbGUgQyBzdHJ1Y3R1cmVzLiAgVGhpcworYXJlIG5vdCA6Yzp0eXBlOmBQeU9iamVjdGAgcG9pbnRlcnMgYnV0IHJhdGhlciBzaW1wbGUgQyBzdHJ1Y3R1cmVzLiAgVGhpcwogYWxsb3dzIHRoZW0gdG8gYmUgY3JlYXRlZCBhbmQgY29waWVkIHZlcnkgc2ltcGx5LiAgV2hlbiBhIGdlbmVyaWMgd3JhcHBlcgogYXJvdW5kIGEgYnVmZmVyIGlzIG5lZWRlZCwgYSA6cmVmOmBtZW1vcnl2aWV3IDxtZW1vcnl2aWV3LW9iamVjdHM+YCBvYmplY3QKIGNhbiBiZSBjcmVhdGVkLgogCiAKLS4uIGN0eXBlOjogUHlfYnVmZmVyCisuLiBjOnR5cGU6OiBQeV9idWZmZXIKIAotICAgLi4gY21lbWJlcjo6IHZvaWQgKmJ1ZgorICAgLi4gYzptZW1iZXI6OiB2b2lkICpidWYKIAogICAgICAgQSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgbWVtb3J5IGZvciB0aGUgb2JqZWN0LgogCi0gICAuLiBjbWVtYmVyOjogUHlfc3NpemVfdCBsZW4KKyAgIC4uIGM6bWVtYmVyOjogUHlfc3NpemVfdCBsZW4KICAgICAgIDpub2luZGV4OgogCiAgICAgICBUaGUgdG90YWwgbGVuZ3RoIG9mIHRoZSBtZW1vcnkgaW4gYnl0ZXMuCiAKLSAgIC4uIGNtZW1iZXI6OiBpbnQgcmVhZG9ubHkKKyAgIC4uIGM6bWVtYmVyOjogaW50IHJlYWRvbmx5CiAKICAgICAgIEFuIGluZGljYXRvciBvZiB3aGV0aGVyIHRoZSBidWZmZXIgaXMgcmVhZCBvbmx5LgogCi0gICAuLiBjbWVtYmVyOjogY29uc3QgY2hhciAqZm9ybWF0CisgICAuLiBjOm1lbWJlcjo6IGNvbnN0IGNoYXIgKmZvcm1hdAogICAgICAgOm5vaW5kZXg6CiAKICAgICAgIEEgKk5VTEwqIHRlcm1pbmF0ZWQgc3RyaW5nIGluIDptb2Q6YHN0cnVjdGAgbW9kdWxlIHN0eWxlIHN5bnRheCBnaXZpbmcKICAgICAgIHRoZSBjb250ZW50cyBvZiB0aGUgZWxlbWVudHMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGJ1ZmZlci4gIElmIHRoaXMgaXMKICAgICAgICpOVUxMKiwgYGAiQiJgYCAodW5zaWduZWQgYnl0ZXMpIGlzIGFzc3VtZWQuCiAKLSAgIC4uIGNtZW1iZXI6OiBpbnQgbmRpbQorICAgLi4gYzptZW1iZXI6OiBpbnQgbmRpbQogCiAgICAgICBUaGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgdGhlIG1lbW9yeSByZXByZXNlbnRzIGFzIGEgbXVsdGktZGltZW5zaW9uYWwKLSAgICAgIGFycmF5LiAgSWYgaXQgaXMgMCwgOmNkYXRhOmBzdHJpZGVzYCBhbmQgOmNkYXRhOmBzdWJvZmZzZXRzYCBtdXN0IGJlCisgICAgICBhcnJheS4gIElmIGl0IGlzIDAsIDpjOmRhdGE6YHN0cmlkZXNgIGFuZCA6YzpkYXRhOmBzdWJvZmZzZXRzYCBtdXN0IGJlCiAgICAgICAqTlVMTCouCiAKLSAgIC4uIGNtZW1iZXI6OiBQeV9zc2l6ZV90ICpzaGFwZQorICAgLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90ICpzaGFwZQogCi0gICAgICBBbiBhcnJheSBvZiA6Y3R5cGU6YFB5X3NzaXplX3RgXHMgdGhlIGxlbmd0aCBvZiA6Y2RhdGE6YG5kaW1gIGdpdmluZyB0aGUKKyAgICAgIEFuIGFycmF5IG9mIDpjOnR5cGU6YFB5X3NzaXplX3RgXHMgdGhlIGxlbmd0aCBvZiA6YzpkYXRhOmBuZGltYCBnaXZpbmcgdGhlCiAgICAgICBzaGFwZSBvZiB0aGUgbWVtb3J5IGFzIGEgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkuICBOb3RlIHRoYXQKICAgICAgIGBgKCgqc2hhcGUpWzBdICogLi4uICogKCpzaGFwZSlbbmRpbXMtMV0pKml0ZW1zaXplYGAgc2hvdWxkIGJlIGVxdWFsIHRvCi0gICAgICA6Y2RhdGE6YGxlbmAuCisgICAgICA6YzpkYXRhOmBsZW5gLgogCi0gICAuLiBjbWVtYmVyOjogUHlfc3NpemVfdCAqc3RyaWRlcworICAgLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90ICpzdHJpZGVzCiAKLSAgICAgIEFuIGFycmF5IG9mIDpjdHlwZTpgUHlfc3NpemVfdGBccyB0aGUgbGVuZ3RoIG9mIDpjZGF0YTpgbmRpbWAgZ2l2aW5nIHRoZQorICAgICAgQW4gYXJyYXkgb2YgOmM6dHlwZTpgUHlfc3NpemVfdGBccyB0aGUgbGVuZ3RoIG9mIDpjOmRhdGE6YG5kaW1gIGdpdmluZyB0aGUKICAgICAgIG51bWJlciBvZiBieXRlcyB0byBza2lwIHRvIGdldCB0byBhIG5ldyBlbGVtZW50IGluIGVhY2ggZGltZW5zaW9uLgogCi0gICAuLiBjbWVtYmVyOjogUHlfc3NpemVfdCAqc3Vib2Zmc2V0cworICAgLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90ICpzdWJvZmZzZXRzCiAKLSAgICAgIEFuIGFycmF5IG9mIDpjdHlwZTpgUHlfc3NpemVfdGBccyB0aGUgbGVuZ3RoIG9mIDpjZGF0YTpgbmRpbWAuICBJZiB0aGVzZQorICAgICAgQW4gYXJyYXkgb2YgOmM6dHlwZTpgUHlfc3NpemVfdGBccyB0aGUgbGVuZ3RoIG9mIDpjOmRhdGE6YG5kaW1gLiAgSWYgdGhlc2UKICAgICAgIHN1Ym9mZnNldCBudW1iZXJzIGFyZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCwgdGhlbiB0aGUgdmFsdWUgc3RvcmVkCiAgICAgICBhbG9uZyB0aGUgaW5kaWNhdGVkIGRpbWVuc2lvbiBpcyBhIHBvaW50ZXIgYW5kIHRoZSBzdWJvZmZzZXQgdmFsdWUKICAgICAgIGRpY3RhdGVzIGhvdyBtYW55IGJ5dGVzIHRvIGFkZCB0byB0aGUgcG9pbnRlciBhZnRlciBkZS1yZWZlcmVuY2luZy4gQQpAQCAtMTQ2LDE2ICsxNDYsMTYgQEAKICAgICAgICAgICAgfQogCiAKLSAgIC4uIGNtZW1iZXI6OiBQeV9zc2l6ZV90IGl0ZW1zaXplCisgICAuLiBjOm1lbWJlcjo6IFB5X3NzaXplX3QgaXRlbXNpemUKIAogICAgICAgVGhpcyBpcyBhIHN0b3JhZ2UgZm9yIHRoZSBpdGVtc2l6ZSAoaW4gYnl0ZXMpIG9mIGVhY2ggZWxlbWVudCBvZiB0aGUKICAgICAgIHNoYXJlZCBtZW1vcnkuIEl0IGlzIHRlY2huaWNhbGx5IHVuLW5lY2Vzc2FyeSBhcyBpdCBjYW4gYmUgb2J0YWluZWQKLSAgICAgIHVzaW5nIDpjZnVuYzpgUHlCdWZmZXJfU2l6ZUZyb21Gb3JtYXRgLCBob3dldmVyIGFuIGV4cG9ydGVyIG1heSBrbm93CisgICAgICB1c2luZyA6YzpmdW5jOmBQeUJ1ZmZlcl9TaXplRnJvbUZvcm1hdGAsIGhvd2V2ZXIgYW4gZXhwb3J0ZXIgbWF5IGtub3cKICAgICAgIHRoaXMgaW5mb3JtYXRpb24gd2l0aG91dCBwYXJzaW5nIHRoZSBmb3JtYXQgc3RyaW5nIGFuZCBpdCBpcyBuZWNlc3NhcnkKICAgICAgIHRvIGtub3cgdGhlIGl0ZW1zaXplIGZvciBwcm9wZXIgaW50ZXJwcmV0YXRpb24gb2Ygc3RyaWRpbmcuIFRoZXJlZm9yZSwKICAgICAgIHN0b3JpbmcgaXQgaXMgbW9yZSBjb252ZW5pZW50IGFuZCBmYXN0ZXIuCiAKLSAgIC4uIGNtZW1iZXI6OiB2b2lkICppbnRlcm5hbAorICAgLi4gYzptZW1iZXI6OiB2b2lkICppbnRlcm5hbAogCiAgICAgICBUaGlzIGlzIGZvciB1c2UgaW50ZXJuYWxseSBieSB0aGUgZXhwb3J0aW5nIG9iamVjdC4gRm9yIGV4YW1wbGUsIHRoaXMKICAgICAgIG1pZ2h0IGJlIHJlLWNhc3QgYXMgYW4gaW50ZWdlciBieSB0aGUgZXhwb3J0ZXIgYW5kIHVzZWQgdG8gc3RvcmUgZmxhZ3MKQEAgLTE2OCwzMiArMTY4LDMyIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfQ2hlY2tCdWZmZXIoUHlPYmplY3QgKm9iaikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfQ2hlY2tCdWZmZXIoUHlPYmplY3QgKm9iaikKIAogICAgUmV0dXJuIDEgaWYgKm9iaiogc3VwcG9ydHMgdGhlIGJ1ZmZlciBpbnRlcmZhY2Ugb3RoZXJ3aXNlIDAuICBXaGVuIDEgaXMKLSAgIHJldHVybmVkLCBpdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IDpjZnVuYzpgUHlPYmplY3RfR2V0QnVmZmVyYCB3aWxsCisgICByZXR1cm5lZCwgaXQgZG9lc24ndCBndWFyYW50ZWUgdGhhdCA6YzpmdW5jOmBQeU9iamVjdF9HZXRCdWZmZXJgIHdpbGwKICAgIHN1Y2NlZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0dldEJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfR2V0QnVmZmVyKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQogCiAgICAgICBFeHBvcnQgYSB2aWV3IG92ZXIgc29tZSBpbnRlcm5hbCBkYXRhIGZyb20gdGhlIHRhcmdldCBvYmplY3QgKm9iaiouCiAgICAgICAqb2JqKiBtdXN0IG5vdCBiZSBOVUxMLCBhbmQgKnZpZXcqIG11c3QgcG9pbnQgdG8gYW4gZXhpc3RpbmcKLSAgICAgIDpjdHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgKG1vc3QgdXNlcyBvZgorICAgICAgOmM6dHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgYWxsb2NhdGVkIGJ5IHRoZSBjYWxsZXIgKG1vc3QgdXNlcyBvZgogICAgICAgdGhpcyBmdW5jdGlvbiB3aWxsIHNpbXBseSBkZWNsYXJlIGEgbG9jYWwgdmFyaWFibGUgb2YgdHlwZQotICAgICAgOmN0eXBlOmBQeV9idWZmZXJgKS4gIFRoZSAqZmxhZ3MqIGFyZ3VtZW50IGlzIGEgYml0IGZpZWxkIGluZGljYXRpbmcKKyAgICAgIDpjOnR5cGU6YFB5X2J1ZmZlcmApLiAgVGhlICpmbGFncyogYXJndW1lbnQgaXMgYSBiaXQgZmllbGQgaW5kaWNhdGluZwogICAgICAgd2hhdCBraW5kIG9mIGJ1ZmZlciBpcyByZXF1ZXN0ZWQuICBUaGUgYnVmZmVyIGludGVyZmFjZSBhbGxvd3MKICAgICAgIGZvciBjb21wbGljYXRlZCBtZW1vcnkgbGF5b3V0IHBvc3NpYmlsaXRpZXM7IGhvd2V2ZXIsIHNvbWUgY2FsbGVycwogICAgICAgd29uJ3Qgd2FudCB0byBoYW5kbGUgYWxsIHRoZSBjb21wbGV4aXR5IGFuZCBpbnN0ZWFkIHJlcXVlc3QgYSBzaW1wbGUKLSAgICAgIHZpZXcgb2YgdGhlIHRhcmdldCBvYmplY3QgKHVzaW5nIDpjbWFjcm86YFB5QlVGX1NJTVBMRWAgZm9yIGEgcmVhZC1vbmx5Ci0gICAgICB2aWV3IGFuZCA6Y21hY3JvOmBQeUJVRl9XUklUQUJMRWAgZm9yIGEgcmVhZC13cml0ZSB2aWV3KS4KKyAgICAgIHZpZXcgb2YgdGhlIHRhcmdldCBvYmplY3QgKHVzaW5nIDpjOm1hY3JvOmBQeUJVRl9TSU1QTEVgIGZvciBhIHJlYWQtb25seQorICAgICAgdmlldyBhbmQgOmM6bWFjcm86YFB5QlVGX1dSSVRBQkxFYCBmb3IgYSByZWFkLXdyaXRlIHZpZXcpLgogCiAgICAgICBTb21lIGV4cG9ydGVycyBtYXkgbm90IGJlIGFibGUgdG8gc2hhcmUgbWVtb3J5IGluIGV2ZXJ5IHBvc3NpYmxlIHdheSBhbmQKICAgICAgIG1heSBuZWVkIHRvIHJhaXNlIGVycm9ycyB0byBzaWduYWwgdG8gc29tZSBjb25zdW1lcnMgdGhhdCBzb21ldGhpbmcgaXMKICAgICAgIGp1c3Qgbm90IHBvc3NpYmxlLiBUaGVzZSBlcnJvcnMgc2hvdWxkIGJlIGEgOmV4YzpgQnVmZmVyRXJyb3JgIHVubGVzcwogICAgICAgdGhlcmUgaXMgYW5vdGhlciBlcnJvciB0aGF0IGlzIGFjdHVhbGx5IGNhdXNpbmcgdGhlIHByb2JsZW0uIFRoZQogICAgICAgZXhwb3J0ZXIgY2FuIHVzZSBmbGFncyBpbmZvcm1hdGlvbiB0byBzaW1wbGlmeSBob3cgbXVjaCBvZiB0aGUKLSAgICAgIDpjZGF0YTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgaXMgZmlsbGVkIGluIHdpdGggbm9uLWRlZmF1bHQgdmFsdWVzIGFuZC9vcgorICAgICAgOmM6ZGF0YTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgaXMgZmlsbGVkIGluIHdpdGggbm9uLWRlZmF1bHQgdmFsdWVzIGFuZC9vcgogICAgICAgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIG9iamVjdCBjYW4ndCBzdXBwb3J0IGEgc2ltcGxlciB2aWV3IG9mIGl0cyBtZW1vcnkuCiAKICAgICAgIE9uIHN1Y2Nlc3MsIDAgaXMgcmV0dXJuZWQgYW5kIHRoZSAqdmlldyogc3RydWN0dXJlIGlzIGZpbGxlZCB3aXRoIHVzZWZ1bApAQCAtMjAyLDcgKzIwMiw3IEBACiAKICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBwb3NzaWJsZSB2YWx1ZXMgdG8gdGhlICpmbGFncyogYXJndW1lbnRzLgogCi0gICAgICAuLiBjbWFjcm86OiBQeUJVRl9TSU1QTEUKKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9TSU1QTEUKIAogICAgICAgICAgVGhpcyBpcyB0aGUgZGVmYXVsdCBmbGFnLiAgVGhlIHJldHVybmVkIGJ1ZmZlciBleHBvc2VzIGEgcmVhZC1vbmx5CiAgICAgICAgICBtZW1vcnkgYXJlYS4gIFRoZSBmb3JtYXQgb2YgZGF0YSBpcyBhc3N1bWVkIHRvIGJlIHJhdyB1bnNpZ25lZCBieXRlcywKQEAgLTIxMCw0NyArMjEwLDQ1IEBACiAgICAgICAgICBjb25zdGFudC4gIEl0IG5ldmVyIG5lZWRzIHRvIGJlICd8J2QgdG8gdGhlIG90aGVycy4gIFRoZSBleHBvcnRlciB3aWxsCiAgICAgICAgICByYWlzZSBhbiBlcnJvciBpZiBpdCBjYW5ub3QgcHJvdmlkZSBzdWNoIGEgY29udGlndW91cyBidWZmZXIgb2YgYnl0ZXMuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX1dSSVRBQkxFCisgICAgICAuLiBjOm1hY3JvOjogUHlCVUZfV1JJVEFCTEUKIAotICAgICAgICAgTGlrZSA6Y21hY3JvOmBQeUJVRl9TSU1QTEVgLCBidXQgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyB3cml0YWJsZS4gIElmCisgICAgICAgICBMaWtlIDpjOm1hY3JvOmBQeUJVRl9TSU1QTEVgLCBidXQgdGhlIHJldHVybmVkIGJ1ZmZlciBpcyB3cml0YWJsZS4gIElmCiAgICAgICAgICB0aGUgZXhwb3J0ZXIgZG9lc24ndCBzdXBwb3J0IHdyaXRhYmxlIGJ1ZmZlcnMsIGFuIGVycm9yIGlzIHJhaXNlZC4KIAotICAgICAgLi4gY21hY3JvOjogUHlCVUZfU1RSSURFUworICAgICAgLi4gYzptYWNybzo6IFB5QlVGX1NUUklERVMKIAotICAgICAgICAgVGhpcyBpbXBsaWVzIDpjbWFjcm86YFB5QlVGX05EYC4gIFRoZSByZXR1cm5lZCBidWZmZXIgbXVzdCBwcm92aWRlCisgICAgICAgICBUaGlzIGltcGxpZXMgOmM6bWFjcm86YFB5QlVGX05EYC4gIFRoZSByZXR1cm5lZCBidWZmZXIgbXVzdCBwcm92aWRlCiAgICAgICAgICBzdHJpZGVzIGluZm9ybWF0aW9uIChpLmUuIHRoZSBzdHJpZGVzIGNhbm5vdCBiZSBOVUxMKS4gIFRoaXMgd291bGQgYmUKICAgICAgICAgIHVzZWQgd2hlbiB0aGUgY29uc3VtZXIgY2FuIGhhbmRsZSBzdHJpZGVkLCBkaXNjb250aWd1b3VzIGFycmF5cy4KICAgICAgICAgIEhhbmRsaW5nIHN0cmlkZXMgYXV0b21hdGljYWxseSBhc3N1bWVzIHlvdSBjYW4gaGFuZGxlIHNoYXBlLiAgVGhlCiAgICAgICAgICBleHBvcnRlciBjYW4gcmFpc2UgYW4gZXJyb3IgaWYgYSBzdHJpZGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhIGlzCiAgICAgICAgICBub3QgcG9zc2libGUgKGkuZS4gd2l0aG91dCB0aGUgc3Vib2Zmc2V0cykuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX05ECisgICAgICAuLiBjOm1hY3JvOjogUHlCVUZfTkQKIAogICAgICAgICAgVGhlIHJldHVybmVkIGJ1ZmZlciBtdXN0IHByb3ZpZGUgc2hhcGUgaW5mb3JtYXRpb24uICBUaGUgbWVtb3J5IHdpbGwgYmUKICAgICAgICAgIGFzc3VtZWQgQy1zdHlsZSBjb250aWd1b3VzIChsYXN0IGRpbWVuc2lvbiB2YXJpZXMgdGhlIGZhc3Rlc3QpLiAgVGhlCiAgICAgICAgICBleHBvcnRlciBtYXkgcmFpc2UgYW4gZXJyb3IgaWYgaXQgY2Fubm90IHByb3ZpZGUgdGhpcyBraW5kIG9mCiAgICAgICAgICBjb250aWd1b3VzIGJ1ZmZlci4gIElmIHRoaXMgaXMgbm90IGdpdmVuIHRoZW4gc2hhcGUgd2lsbCBiZSAqTlVMTCouCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX0NfQ09OVElHVU9VUwotCi0gICAgICAuLiBjbWFjcm86OiBQeUJVRl9GX0NPTlRJR1VPVVMKLQotICAgICAgLi4gY21hY3JvOjogUHlCVUZfQU5ZX0NPTlRJR1VPVVMKKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9DX0NPTlRJR1VPVVMKKyAgICAgICAgICAgICAgICAgIFB5QlVGX0ZfQ09OVElHVU9VUworICAgICAgICAgICAgICAgICAgUHlCVUZfQU5ZX0NPTlRJR1VPVVMKIAogICAgICAgICAgVGhlc2UgZmxhZ3MgaW5kaWNhdGUgdGhhdCB0aGUgY29udGlndWl0eSByZXR1cm5lZCBidWZmZXIgbXVzdCBiZQogICAgICAgICAgcmVzcGVjdGl2ZWx5LCBDLWNvbnRpZ3VvdXMgKGxhc3QgZGltZW5zaW9uIHZhcmllcyB0aGUgZmFzdGVzdCksIEZvcnRyYW4KICAgICAgICAgIGNvbnRpZ3VvdXMgKGZpcnN0IGRpbWVuc2lvbiB2YXJpZXMgdGhlIGZhc3Rlc3QpIG9yIGVpdGhlciBvbmUuICBBbGwgb2YKLSAgICAgICAgIHRoZXNlIGZsYWdzIGltcGx5IDpjbWFjcm86YFB5QlVGX1NUUklERVNgIGFuZCBndWFyYW50ZWUgdGhhdCB0aGUKKyAgICAgICAgIHRoZXNlIGZsYWdzIGltcGx5IDpjOm1hY3JvOmBQeUJVRl9TVFJJREVTYCBhbmQgZ3VhcmFudGVlIHRoYXQgdGhlCiAgICAgICAgICBzdHJpZGVzIGJ1ZmZlciBpbmZvIHN0cnVjdHVyZSB3aWxsIGJlIGZpbGxlZCBpbiBjb3JyZWN0bHkuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX0lORElSRUNUCisgICAgICAuLiBjOm1hY3JvOjogUHlCVUZfSU5ESVJFQ1QKIAogICAgICAgICAgVGhpcyBmbGFnIGluZGljYXRlcyB0aGUgcmV0dXJuZWQgYnVmZmVyIG11c3QgaGF2ZSBzdWJvZmZzZXRzCiAgICAgICAgICBpbmZvcm1hdGlvbiAod2hpY2ggY2FuIGJlIE5VTEwgaWYgbm8gc3Vib2Zmc2V0cyBhcmUgbmVlZGVkKS4gIFRoaXMgY2FuCiAgICAgICAgICBiZSB1c2VkIHdoZW4gdGhlIGNvbnN1bWVyIGNhbiBoYW5kbGUgaW5kaXJlY3QgYXJyYXkgcmVmZXJlbmNpbmcgaW1wbGllZAotICAgICAgICAgYnkgdGhlc2Ugc3Vib2Zmc2V0cy4gVGhpcyBpbXBsaWVzIDpjbWFjcm86YFB5QlVGX1NUUklERVNgLgorICAgICAgICAgYnkgdGhlc2Ugc3Vib2Zmc2V0cy4gVGhpcyBpbXBsaWVzIDpjOm1hY3JvOmBQeUJVRl9TVFJJREVTYC4KIAotICAgICAgLi4gY21hY3JvOjogUHlCVUZfRk9STUFUCisgICAgICAuLiBjOm1hY3JvOjogUHlCVUZfRk9STUFUCiAKICAgICAgICAgIFRoZSByZXR1cm5lZCBidWZmZXIgbXVzdCBoYXZlIHRydWUgZm9ybWF0IGluZm9ybWF0aW9uIGlmIHRoaXMgZmxhZyBpcwogICAgICAgICAgcHJvdmlkZWQuICBUaGlzIHdvdWxkIGJlIHVzZWQgd2hlbiB0aGUgY29uc3VtZXIgaXMgZ29pbmcgdG8gYmUgY2hlY2tpbmcKQEAgLTI1OSw2OCArMjU3LDY4IEBACiAgICAgICAgICBleHBsaWNpdGx5IHJlcXVlc3RlZCB0aGVuIHRoZSBmb3JtYXQgbXVzdCBiZSByZXR1cm5lZCBhcyAqTlVMTCogKHdoaWNoCiAgICAgICAgICBtZWFucyBgYCdCJ2BgLCBvciB1bnNpZ25lZCBieXRlcykuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX1NUUklERUQKKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9TVFJJREVECiAKICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYChQeUJVRl9TVFJJREVTIHwgUHlCVUZfV1JJVEFCTEUpYGAuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX1NUUklERURfUk8KKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9TVFJJREVEX1JPCiAKICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYChQeUJVRl9TVFJJREVTKWBgLgogCi0gICAgICAuLiBjbWFjcm86OiBQeUJVRl9SRUNPUkRTCisgICAgICAuLiBjOm1hY3JvOjogUHlCVUZfUkVDT1JEUwogCiAgICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGAoUHlCVUZfU1RSSURFUyB8IFB5QlVGX0ZPUk1BVCB8CiAgICAgICAgICBQeUJVRl9XUklUQUJMRSlgYC4KIAotICAgICAgLi4gY21hY3JvOjogUHlCVUZfUkVDT1JEU19STworICAgICAgLi4gYzptYWNybzo6IFB5QlVGX1JFQ09SRFNfUk8KIAogICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgKFB5QlVGX1NUUklERVMgfCBQeUJVRl9GT1JNQVQpYGAuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX0ZVTEwKKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9GVUxMCiAKICAgICAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYChQeUJVRl9JTkRJUkVDVCB8IFB5QlVGX0ZPUk1BVCB8CiAgICAgICAgICBQeUJVRl9XUklUQUJMRSlgYC4KIAotICAgICAgLi4gY21hY3JvOjogUHlCVUZfRlVMTF9STworICAgICAgLi4gYzptYWNybzo6IFB5QlVGX0ZVTExfUk8KIAogICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgKFB5QlVGX0lORElSRUNUIHwgUHlCVUZfRk9STUFUKWBgLgogCi0gICAgICAuLiBjbWFjcm86OiBQeUJVRl9DT05USUcKKyAgICAgIC4uIGM6bWFjcm86OiBQeUJVRl9DT05USUcKIAogICAgICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgKFB5QlVGX05EIHwgUHlCVUZfV1JJVEFCTEUpYGAuCiAKLSAgICAgIC4uIGNtYWNybzo6IFB5QlVGX0NPTlRJR19STworICAgICAgLi4gYzptYWNybzo6IFB5QlVGX0NPTlRJR19STwogCiAgICAgICAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGAoUHlCVUZfTkQpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUJ1ZmZlcl9SZWxlYXNlKFB5X2J1ZmZlciAqdmlldykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5QnVmZmVyX1JlbGVhc2UoUHlfYnVmZmVyICp2aWV3KQogCiAgICBSZWxlYXNlIHRoZSBidWZmZXIgKnZpZXcqLiAgVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBpcyBubwogICAgbG9uZ2VyIGJlaW5nIHVzZWQgYXMgaXQgbWF5IGZyZWUgbWVtb3J5IGZyb20gaXQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeUJ1ZmZlcl9TaXplRnJvbUZvcm1hdChjb25zdCBjaGFyICopCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeUJ1ZmZlcl9TaXplRnJvbUZvcm1hdChjb25zdCBjaGFyICopCiAKLSAgIFJldHVybiB0aGUgaW1wbGllZCA6Y2RhdGE6YH5QeV9idWZmZXIuaXRlbXNpemVgIGZyb20gdGhlIHN0cnVjdC1zdHlwZQotICAgOmNkYXRhOmB+UHlfYnVmZmVyLmZvcm1hdGAuCisgICBSZXR1cm4gdGhlIGltcGxpZWQgOmM6ZGF0YTpgflB5X2J1ZmZlci5pdGVtc2l6ZWAgZnJvbSB0aGUgc3RydWN0LXN0eXBlCisgICA6YzpkYXRhOmB+UHlfYnVmZmVyLmZvcm1hdGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5QnVmZmVyX0lzQ29udGlndW91cyhQeV9idWZmZXIgKnZpZXcsIGNoYXIgZm9ydHJhbikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCdWZmZXJfSXNDb250aWd1b3VzKFB5X2J1ZmZlciAqdmlldywgY2hhciBmb3J0cmFuKQogCiAgICBSZXR1cm4gMSBpZiB0aGUgbWVtb3J5IGRlZmluZWQgYnkgdGhlICp2aWV3KiBpcyBDLXN0eWxlICgqZm9ydHJhbiogaXMKICAgIGBgJ0MnYGApIG9yIEZvcnRyYW4tc3R5bGUgKCpmb3J0cmFuKiBpcyBgYCdGJ2BgKSBjb250aWd1b3VzIG9yIGVpdGhlciBvbmUKICAgICgqZm9ydHJhbiogaXMgYGAnQSdgYCkuICBSZXR1cm4gMCBvdGhlcndpc2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXMoaW50IG5kaW0sIFB5X3NzaXplX3QgKnNoYXBlLCBQeV9zc2l6ZV90ICpzdHJpZGVzLCBQeV9zc2l6ZV90IGl0ZW1zaXplLCBjaGFyIGZvcnRyYW4pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUJ1ZmZlcl9GaWxsQ29udGlndW91c1N0cmlkZXMoaW50IG5kaW0sIFB5X3NzaXplX3QgKnNoYXBlLCBQeV9zc2l6ZV90ICpzdHJpZGVzLCBQeV9zc2l6ZV90IGl0ZW1zaXplLCBjaGFyIGZvcnRyYW4pCiAKICAgIEZpbGwgdGhlICpzdHJpZGVzKiBhcnJheSB3aXRoIGJ5dGUtc3RyaWRlcyBvZiBhIGNvbnRpZ3VvdXMgKEMtc3R5bGUgaWYKICAgICpmb3J0cmFuKiBpcyBgYCdDJ2BgIG9yIEZvcnRyYW4tc3R5bGUgaWYgKmZvcnRyYW4qIGlzIGBgJ0YnYGAgYXJyYXkgb2YgdGhlCiAgICBnaXZlbiBzaGFwZSB3aXRoIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMgcGVyIGVsZW1lbnQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5QnVmZmVyX0ZpbGxJbmZvKFB5X2J1ZmZlciAqdmlldywgUHlPYmplY3QgKm9iaiwgdm9pZCAqYnVmLCBQeV9zc2l6ZV90IGxlbiwgaW50IHJlYWRvbmx5LCBpbnQgaW5mb2ZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ1ZmZlcl9GaWxsSW5mbyhQeV9idWZmZXIgKnZpZXcsIFB5T2JqZWN0ICpvYmosIHZvaWQgKmJ1ZiwgUHlfc3NpemVfdCBsZW4sIGludCByZWFkb25seSwgaW50IGluZm9mbGFncykKIAogICAgRmlsbCBpbiBhIGJ1ZmZlci1pbmZvIHN0cnVjdHVyZSwgKnZpZXcqLCBjb3JyZWN0bHkgZm9yIGFuIGV4cG9ydGVyIHRoYXQgY2FuCiAgICBvbmx5IHNoYXJlIGEgY29udGlndW91cyBjaHVuayBvZiBtZW1vcnkgb2YgInVuc2lnbmVkIGJ5dGVzIiBvZiB0aGUgZ2l2ZW4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9ieXRlYXJyYXkucnN0IGIvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKaW5kZXggNWUxMWQ4YS4uOTVkZWQ5NiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKKysrIGIvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKQEAgLTgsMjcgKzgsMjcgQEAKIC4uIGluZGV4Ojogb2JqZWN0OiBieXRlYXJyYXkKIAogCi0uLiBjdHlwZTo6IFB5Qnl0ZUFycmF5T2JqZWN0CisuLiBjOnR5cGU6OiBQeUJ5dGVBcnJheU9iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhIFB5dGhvbiBieXRlYXJyYXkgb2JqZWN0LgorICAgVGhpcyBzdWJ0eXBlIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIGJ5dGVhcnJheSBvYmplY3QuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUJ5dGVBcnJheV9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUJ5dGVBcnJheV9UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBieXRlYXJyYXkgdHlwZTsKKyAgIFRoaXMgaW5zdGFuY2Ugb2YgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRzIHRoZSBQeXRob24gYnl0ZWFycmF5IHR5cGU7CiAgICBpdCBpcyB0aGUgc2FtZSBvYmplY3QgYXMgOmNsYXNzOmBieXRlYXJyYXlgIGluIHRoZSBQeXRob24gbGF5ZXIuCiAKIAogVHlwZSBjaGVjayBtYWNyb3MKIF5eXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUJ5dGVBcnJheV9DaGVjayhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCeXRlQXJyYXlfQ2hlY2soUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgKm8qIGlzIGEgYnl0ZWFycmF5IG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBhCiAgICBzdWJ0eXBlIG9mIHRoZSBieXRlYXJyYXkgdHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlCeXRlQXJyYXlfQ2hlY2tFeGFjdChQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCeXRlQXJyYXlfQ2hlY2tFeGFjdChQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSBieXRlYXJyYXkgb2JqZWN0LCBidXQgbm90IGFuIGluc3RhbmNlIG9mIGEKICAgIHN1YnR5cGUgb2YgdGhlIGJ5dGVhcnJheSB0eXBlLgpAQCAtMzcsNyArMzcsNyBAQAogRGlyZWN0IEFQSSBmdW5jdGlvbnMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gYSBuZXcgYnl0ZWFycmF5IG9iamVjdCBmcm9tIGFueSBvYmplY3QsICpvKiwgdGhhdCBpbXBsZW1lbnRzIHRoZQogICAgYnVmZmVyIHByb3RvY29sLgpAQCAtNDUsMjkgKzQ1LDI5IEBACiAgICAuLiBYWFggZXhwYW5kIGFib3V0IHRoZSBidWZmZXIgcHJvdG9jb2wsIGF0IGxlYXN0IHNvbWV3aGVyZQogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICpzdHJpbmcsIFB5X3NzaXplX3QgbGVuKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICpzdHJpbmcsIFB5X3NzaXplX3QgbGVuKQogCiAgICBDcmVhdGUgYSBuZXcgYnl0ZWFycmF5IG9iamVjdCBmcm9tICpzdHJpbmcqIGFuZCBpdHMgbGVuZ3RoLCAqbGVuKi4gIE9uCiAgICBmYWlsdXJlLCAqTlVMTCogaXMgcmV0dXJuZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Qnl0ZUFycmF5X0NvbmNhdChQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Qnl0ZUFycmF5X0NvbmNhdChQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIpCiAKICAgIENvbmNhdCBieXRlYXJyYXlzICphKiBhbmQgKmIqIGFuZCByZXR1cm4gYSBuZXcgYnl0ZWFycmF5IHdpdGggdGhlIHJlc3VsdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5Qnl0ZUFycmF5X1NpemUoUHlPYmplY3QgKmJ5dGVhcnJheSkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5Qnl0ZUFycmF5X1NpemUoUHlPYmplY3QgKmJ5dGVhcnJheSkKIAogICAgUmV0dXJuIHRoZSBzaXplIG9mICpieXRlYXJyYXkqIGFmdGVyIGNoZWNraW5nIGZvciBhICpOVUxMKiBwb2ludGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5Qnl0ZUFycmF5X0FzU3RyaW5nKFB5T2JqZWN0ICpieXRlYXJyYXkpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlQXJyYXlfQXNTdHJpbmcoUHlPYmplY3QgKmJ5dGVhcnJheSkKIAogICAgUmV0dXJuIHRoZSBjb250ZW50cyBvZiAqYnl0ZWFycmF5KiBhcyBhIGNoYXIgYXJyYXkgYWZ0ZXIgY2hlY2tpbmcgZm9yIGEKICAgICpOVUxMKiBwb2ludGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUJ5dGVBcnJheV9SZXNpemUoUHlPYmplY3QgKmJ5dGVhcnJheSwgUHlfc3NpemVfdCBsZW4pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Qnl0ZUFycmF5X1Jlc2l6ZShQeU9iamVjdCAqYnl0ZWFycmF5LCBQeV9zc2l6ZV90IGxlbikKIAogICAgUmVzaXplIHRoZSBpbnRlcm5hbCBidWZmZXIgb2YgKmJ5dGVhcnJheSogdG8gKmxlbiouCiAKQEAgLTc2LDExICs3NiwxMSBAQAogCiBUaGVzZSBtYWNyb3MgdHJhZGUgc2FmZXR5IGZvciBzcGVlZCBhbmQgdGhleSBkb24ndCBjaGVjayBwb2ludGVycy4KIAotLi4gY2Z1bmN0aW9uOjogY2hhciogUHlCeXRlQXJyYXlfQVNfU1RSSU5HKFB5T2JqZWN0ICpieXRlYXJyYXkpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlQXJyYXlfQVNfU1RSSU5HKFB5T2JqZWN0ICpieXRlYXJyYXkpCiAKLSAgIE1hY3JvIHZlcnNpb24gb2YgOmNmdW5jOmBQeUJ5dGVBcnJheV9Bc1N0cmluZ2AuCisgICBNYWNybyB2ZXJzaW9uIG9mIDpjOmZ1bmM6YFB5Qnl0ZUFycmF5X0FzU3RyaW5nYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKFB5T2JqZWN0ICpieXRlYXJyYXkpCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeUJ5dGVBcnJheV9HRVRfU0laRShQeU9iamVjdCAqYnl0ZWFycmF5KQogCi0gICBNYWNybyB2ZXJzaW9uIG9mIDpjZnVuYzpgUHlCeXRlQXJyYXlfU2l6ZWAuCisgICBNYWNybyB2ZXJzaW9uIG9mIDpjOmZ1bmM6YFB5Qnl0ZUFycmF5X1NpemVgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2J5dGVzLnJzdCBiL0RvYy9jLWFwaS9ieXRlcy5yc3QKaW5kZXggYWJkODc0NC4uMTJlYzgwYyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J5dGVzLnJzdAorKysgYi9Eb2MvYy1hcGkvYnl0ZXMucnN0CkBAIC0xMSw0NiArMTEsNDYgQEAKIC4uIGluZGV4Ojogb2JqZWN0OiBieXRlcwogCiAKLS4uIGN0eXBlOjogUHlCeXRlc09iamVjdAorLi4gYzp0eXBlOjogUHlCeXRlc09iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhIFB5dGhvbiBieXRlcyBvYmplY3QuCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gYnl0ZXMgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlCeXRlc19UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUJ5dGVzX1R5cGUKIAotICAgVGhpcyBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGJ5dGVzIHR5cGU7IGl0CisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGJ5dGVzIHR5cGU7IGl0CiAgICBpcyB0aGUgc2FtZSBvYmplY3QgYXMgOmNsYXNzOmBieXRlc2AgaW4gdGhlIFB5dGhvbiBsYXllci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlCeXRlc19DaGVjayhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlCeXRlc19DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSBieXRlcyBvYmplY3Qgb3IgYW4gaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlCiAgICBvZiB0aGUgYnl0ZXMgdHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlCeXRlc19DaGVja0V4YWN0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ5dGVzX0NoZWNrRXhhY3QoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgKm8qIGlzIGEgYnl0ZXMgb2JqZWN0LCBidXQgbm90IGFuIGluc3RhbmNlIG9mIGEKICAgIHN1YnR5cGUgb2YgdGhlIGJ5dGVzIHR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Qnl0ZXNfRnJvbVN0cmluZyhjb25zdCBjaGFyICp2KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVzX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqdikKIAogICAgUmV0dXJuIGEgbmV3IGJ5dGVzIG9iamVjdCB3aXRoIGEgY29weSBvZiB0aGUgc3RyaW5nICp2KiBhcyB2YWx1ZSBvbiBzdWNjZXNzLAogICAgYW5kICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhlIHBhcmFtZXRlciAqdiogbXVzdCBub3QgYmUgKk5VTEwqOyBpdCB3aWxsIG5vdCBiZQogICAgY2hlY2tlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICp2LCBQeV9zc2l6ZV90IGxlbikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShjb25zdCBjaGFyICp2LCBQeV9zc2l6ZV90IGxlbikKIAogICAgUmV0dXJuIGEgbmV3IGJ5dGVzIG9iamVjdCB3aXRoIGEgY29weSBvZiB0aGUgc3RyaW5nICp2KiBhcyB2YWx1ZSBhbmQgbGVuZ3RoCiAgICAqbGVuKiBvbiBzdWNjZXNzLCBhbmQgKk5VTEwqIG9uIGZhaWx1cmUuICBJZiAqdiogaXMgKk5VTEwqLCB0aGUgY29udGVudHMgb2YKICAgIHRoZSBieXRlcyBvYmplY3QgYXJlIHVuaW5pdGlhbGl6ZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Qnl0ZXNfRnJvbUZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCi0gICBUYWtlIGEgQyA6Y2Z1bmM6YHByaW50ZmBcIC1zdHlsZSAqZm9ybWF0KiBzdHJpbmcgYW5kIGEgdmFyaWFibGUgbnVtYmVyIG9mCisgICBUYWtlIGEgQyA6YzpmdW5jOmBwcmludGZgXCAtc3R5bGUgKmZvcm1hdCogc3RyaW5nIGFuZCBhIHZhcmlhYmxlIG51bWJlciBvZgogICAgYXJndW1lbnRzLCBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBQeXRob24gYnl0ZXMgb2JqZWN0IGFuZCByZXR1cm4KICAgIGEgYnl0ZXMgb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBmb3JtYXR0ZWQgaW50byBpdC4gIFRoZSB2YXJpYWJsZSBhcmd1bWVudHMKICAgIG11c3QgYmUgQyB0eXBlcyBhbmQgbXVzdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gdGhlIGZvcm1hdCBjaGFyYWN0ZXJzIGluIHRoZQpAQCAtMTEwLDQ0ICsxMTAsNDQgQEAKICAgIGNvcGllZCBhcy1pcyB0byB0aGUgcmVzdWx0IHN0cmluZywgYW5kIGFueSBleHRyYSBhcmd1bWVudHMgZGlzY2FyZGVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVzX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YXJncykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKLSAgIElkZW50aWNhbCB0byA6ZnVuYzpgUHlCeXRlc19Gcm9tRm9ybWF0YCBleGNlcHQgdGhhdCBpdCB0YWtlcyBleGFjdGx5IHR3bworICAgSWRlbnRpY2FsIHRvIDpjOmZ1bmM6YFB5Qnl0ZXNfRnJvbUZvcm1hdGAgZXhjZXB0IHRoYXQgaXQgdGFrZXMgZXhhY3RseSB0d28KICAgIGFyZ3VtZW50cy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUJ5dGVzX0Zyb21PYmplY3QoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0aGUgYnl0ZXMgcmVwcmVzZW50YXRpb24gb2Ygb2JqZWN0ICpvKiB0aGF0IGltcGxlbWVudHMgdGhlIGJ1ZmZlcgogICAgcHJvdG9jb2wuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeUJ5dGVzX1NpemUoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeUJ5dGVzX1NpemUoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBieXRlcyBpbiBieXRlcyBvYmplY3QgKm8qLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlCeXRlc19HRVRfU0laRShQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5Qnl0ZXNfR0VUX1NJWkUoUHlPYmplY3QgKm8pCiAKLSAgIE1hY3JvIGZvcm0gb2YgOmNmdW5jOmBQeUJ5dGVzX1NpemVgIGJ1dCB3aXRob3V0IGVycm9yIGNoZWNraW5nLgorICAgTWFjcm8gZm9ybSBvZiA6YzpmdW5jOmBQeUJ5dGVzX1NpemVgIGJ1dCB3aXRob3V0IGVycm9yIGNoZWNraW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5Qnl0ZXNfQXNTdHJpbmcoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlc19Bc1N0cmluZyhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIGEgTlVMLXRlcm1pbmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpvKi4gIFRoZSBwb2ludGVyCiAgICByZWZlcnMgdG8gdGhlIGludGVybmFsIGJ1ZmZlciBvZiAqbyosIG5vdCBhIGNvcHkuICBUaGUgZGF0YSBtdXN0IG5vdCBiZQogICAgbW9kaWZpZWQgaW4gYW55IHdheSwgdW5sZXNzIHRoZSBzdHJpbmcgd2FzIGp1c3QgY3JlYXRlZCB1c2luZwogICAgYGBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpYGAuIEl0IG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkLiAgSWYKLSAgICpvKiBpcyBub3QgYSBzdHJpbmcgb2JqZWN0IGF0IGFsbCwgOmNmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nYCByZXR1cm5zICpOVUxMKgorICAgKm8qIGlzIG5vdCBhIHN0cmluZyBvYmplY3QgYXQgYWxsLCA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nYCByZXR1cm5zICpOVUxMKgogICAgYW5kIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5Qnl0ZXNfQVNfU1RSSU5HKFB5T2JqZWN0ICpzdHJpbmcpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlc19BU19TVFJJTkcoUHlPYmplY3QgKnN0cmluZykKIAotICAgTWFjcm8gZm9ybSBvZiA6Y2Z1bmM6YFB5Qnl0ZXNfQXNTdHJpbmdgIGJ1dCB3aXRob3V0IGVycm9yIGNoZWNraW5nLgorICAgTWFjcm8gZm9ybSBvZiA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nYCBidXQgd2l0aG91dCBlcnJvciBjaGVja2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoUHlPYmplY3QgKm9iaiwgY2hhciAqKmJ1ZmZlciwgUHlfc3NpemVfdCAqbGVuZ3RoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShQeU9iamVjdCAqb2JqLCBjaGFyICoqYnVmZmVyLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiAKICAgIFJldHVybiBhIE5VTC10ZXJtaW5hdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0ICpvYmoqCiAgICB0aHJvdWdoIHRoZSBvdXRwdXQgdmFyaWFibGVzICpidWZmZXIqIGFuZCAqbGVuZ3RoKi4KQEAgLTE1OCwxMSArMTU4LDExIEBACiAgICBUaGUgYnVmZmVyIHJlZmVycyB0byBhbiBpbnRlcm5hbCBzdHJpbmcgYnVmZmVyIG9mICpvYmoqLCBub3QgYSBjb3B5LiBUaGUgZGF0YQogICAgbXVzdCBub3QgYmUgbW9kaWZpZWQgaW4gYW55IHdheSwgdW5sZXNzIHRoZSBzdHJpbmcgd2FzIGp1c3QgY3JlYXRlZCB1c2luZwogICAgYGBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpYGAuICBJdCBtdXN0IG5vdCBiZSBkZWFsbG9jYXRlZC4gIElmCi0gICAqc3RyaW5nKiBpcyBub3QgYSBzdHJpbmcgb2JqZWN0IGF0IGFsbCwgOmNmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZWAKKyAgICpzdHJpbmcqIGlzIG5vdCBhIHN0cmluZyBvYmplY3QgYXQgYWxsLCA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZWAKICAgIHJldHVybnMgYGAtMWBgIGFuZCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5Qnl0ZXNfQ29uY2F0KFB5T2JqZWN0ICoqYnl0ZXMsIFB5T2JqZWN0ICpuZXdwYXJ0KQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlCeXRlc19Db25jYXQoUHlPYmplY3QgKipieXRlcywgUHlPYmplY3QgKm5ld3BhcnQpCiAKICAgIENyZWF0ZSBhIG5ldyBieXRlcyBvYmplY3QgaW4gKlwqYnl0ZXMqIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICpuZXdwYXJ0KgogICAgYXBwZW5kZWQgdG8gKmJ5dGVzKjsgdGhlIGNhbGxlciB3aWxsIG93biB0aGUgbmV3IHJlZmVyZW5jZS4gIFRoZSByZWZlcmVuY2UgdG8KQEAgLTE3MSwxNCArMTcxLDE0IEBACiAgICBvZiAqXCpieXRlcyogd2lsbCBiZSBzZXQgdG8gKk5VTEwqOyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIHdpbGwgYmUgc2V0LgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlCeXRlc19Db25jYXRBbmREZWwoUHlPYmplY3QgKipieXRlcywgUHlPYmplY3QgKm5ld3BhcnQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUJ5dGVzX0NvbmNhdEFuZERlbChQeU9iamVjdCAqKmJ5dGVzLCBQeU9iamVjdCAqbmV3cGFydCkKIAogICAgQ3JlYXRlIGEgbmV3IHN0cmluZyBvYmplY3QgaW4gKlwqYnl0ZXMqIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICpuZXdwYXJ0KgogICAgYXBwZW5kZWQgdG8gKmJ5dGVzKi4gIFRoaXMgdmVyc2lvbiBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YKICAgICpuZXdwYXJ0Ki4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqYnl0ZXMsIFB5X3NzaXplX3QgbmV3c2l6ZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgX1B5Qnl0ZXNfUmVzaXplKFB5T2JqZWN0ICoqYnl0ZXMsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIAogICAgQSB3YXkgdG8gcmVzaXplIGEgYnl0ZXMgb2JqZWN0IGV2ZW4gdGhvdWdoIGl0IGlzICJpbW11dGFibGUiLiBPbmx5IHVzZSB0aGlzCiAgICB0byBidWlsZCB1cCBhIGJyYW5kIG5ldyBieXRlcyBvYmplY3Q7IGRvbid0IHVzZSB0aGlzIGlmIHRoZSBieXRlcyBtYXkgYWxyZWFkeQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NhcHN1bGUucnN0IGIvRG9jL2MtYXBpL2NhcHN1bGUucnN0CmluZGV4IDI5MzkzMTQuLjZmNjI1MGYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jYXBzdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvY2Fwc3VsZS5yc3QKQEAgLTEwLDMzICsxMCwzMyBAQAogUmVmZXIgdG8gOnJlZjpgdXNpbmctY2Fwc3VsZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZXNlIG9iamVjdHMuCiAKIAotLi4gY3R5cGU6OiBQeUNhcHN1bGUKKy4uIGM6dHlwZTo6IFB5Q2Fwc3VsZQogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhbiBvcGFxdWUgdmFsdWUsIHVzZWZ1bCBmb3IgQwotICAgZXh0ZW5zaW9uIG1vZHVsZXMgd2hvIG5lZWQgdG8gcGFzcyBhbiBvcGFxdWUgdmFsdWUgKGFzIGEgOmN0eXBlOmB2b2lkXCpgCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYW4gb3BhcXVlIHZhbHVlLCB1c2VmdWwgZm9yIEMKKyAgIGV4dGVuc2lvbiBtb2R1bGVzIHdobyBuZWVkIHRvIHBhc3MgYW4gb3BhcXVlIHZhbHVlIChhcyBhIDpjOnR5cGU6YHZvaWRcKmAKICAgIHBvaW50ZXIpIHRocm91Z2ggUHl0aG9uIGNvZGUgdG8gb3RoZXIgQyBjb2RlLiAgSXQgaXMgb2Z0ZW4gdXNlZCB0byBtYWtlIGEgQwogICAgZnVuY3Rpb24gcG9pbnRlciBkZWZpbmVkIGluIG9uZSBtb2R1bGUgYXZhaWxhYmxlIHRvIG90aGVyIG1vZHVsZXMsIHNvIHRoZQogICAgcmVndWxhciBpbXBvcnQgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIGFjY2VzcyBDIEFQSXMgZGVmaW5lZCBpbiBkeW5hbWljYWxseQogICAgbG9hZGVkIG1vZHVsZXMuCiAKLS4uIGN0eXBlOjogUHlDYXBzdWxlX0Rlc3RydWN0b3IKKy4uIGM6dHlwZTo6IFB5Q2Fwc3VsZV9EZXN0cnVjdG9yCiAKICAgIFRoZSB0eXBlIG9mIGEgZGVzdHJ1Y3RvciBjYWxsYmFjayBmb3IgYSBjYXBzdWxlLiAgRGVmaW5lZCBhczo6CiAKICAgICAgIHR5cGVkZWYgdm9pZCAoKlB5Q2Fwc3VsZV9EZXN0cnVjdG9yKShQeU9iamVjdCAqKTsKIAotICAgU2VlIDpjZnVuYzpgUHlDYXBzdWxlX05ld2AgZm9yIHRoZSBzZW1hbnRpY3Mgb2YgUHlDYXBzdWxlX0Rlc3RydWN0b3IKKyAgIFNlZSA6YzpmdW5jOmBQeUNhcHN1bGVfTmV3YCBmb3IgdGhlIHNlbWFudGljcyBvZiBQeUNhcHN1bGVfRGVzdHJ1Y3RvcgogICAgY2FsbGJhY2tzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCiAKLSAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjdHlwZTpgUHlDYXBzdWxlYC4KKyAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjOnR5cGU6YFB5Q2Fwc3VsZWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2Fwc3VsZV9OZXcodm9pZCAqcG9pbnRlciwgY29uc3QgY2hhciAqbmFtZSwgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3RvcikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDYXBzdWxlX05ldyh2b2lkICpwb2ludGVyLCBjb25zdCBjaGFyICpuYW1lLCBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cnVjdG9yKQogCi0gICBDcmVhdGUgYSA6Y3R5cGU6YFB5Q2Fwc3VsZWAgZW5jYXBzdWxhdGluZyB0aGUgKnBvaW50ZXIqLiAgVGhlICpwb2ludGVyKgorICAgQ3JlYXRlIGEgOmM6dHlwZTpgUHlDYXBzdWxlYCBlbmNhcHN1bGF0aW5nIHRoZSAqcG9pbnRlciouICBUaGUgKnBvaW50ZXIqCiAgICBhcmd1bWVudCBtYXkgbm90IGJlICpOVUxMKi4KIAogICAgT24gZmFpbHVyZSwgc2V0IGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuICpOVUxMKi4KQEAgLTUwLDkxICs1MCw5MSBAQAogCiAgICBJZiB0aGlzIGNhcHN1bGUgd2lsbCBiZSBzdG9yZWQgYXMgYW4gYXR0cmlidXRlIG9mIGEgbW9kdWxlLCB0aGUgKm5hbWUqIHNob3VsZAogICAgYmUgc3BlY2lmaWVkIGFzIGBgbW9kdWxlbmFtZS5hdHRyaWJ1dGVuYW1lYGAuICBUaGlzIHdpbGwgZW5hYmxlIG90aGVyIG1vZHVsZXMKLSAgIHRvIGltcG9ydCB0aGUgY2Fwc3VsZSB1c2luZyA6Y2Z1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgLgorICAgdG8gaW1wb3J0IHRoZSBjYXBzdWxlIHVzaW5nIDpjOmZ1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9HZXRQb2ludGVyKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9HZXRQb2ludGVyKFB5T2JqZWN0ICpjYXBzdWxlLCBjb25zdCBjaGFyICpuYW1lKQogCiAgICBSZXRyaWV2ZSB0aGUgKnBvaW50ZXIqIHN0b3JlZCBpbiB0aGUgY2Fwc3VsZS4gIE9uIGZhaWx1cmUsIHNldCBhbiBleGNlcHRpb24KICAgIGFuZCByZXR1cm4gKk5VTEwqLgogCiAgICBUaGUgKm5hbWUqIHBhcmFtZXRlciBtdXN0IGNvbXBhcmUgZXhhY3RseSB0byB0aGUgbmFtZSBzdG9yZWQgaW4gdGhlIGNhcHN1bGUuCiAgICBJZiB0aGUgbmFtZSBzdG9yZWQgaW4gdGhlIGNhcHN1bGUgaXMgKk5VTEwqLCB0aGUgKm5hbWUqIHBhc3NlZCBpbiBtdXN0IGFsc28KLSAgIGJlICpOVUxMKi4gIFB5dGhvbiB1c2VzIHRoZSBDIGZ1bmN0aW9uIDpjZnVuYzpgc3RyY21wYCB0byBjb21wYXJlIGNhcHN1bGUKKyAgIGJlICpOVUxMKi4gIFB5dGhvbiB1c2VzIHRoZSBDIGZ1bmN0aW9uIDpjOmZ1bmM6YHN0cmNtcGAgdG8gY29tcGFyZSBjYXBzdWxlCiAgICBuYW1lcy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSkKKy4uIGM6ZnVuY3Rpb246OiBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBQeUNhcHN1bGVfR2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSkKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IGRlc3RydWN0b3Igc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuCiAgICBleGNlcHRpb24gYW5kIHJldHVybiAqTlVMTCouCiAKICAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBkZXN0cnVjdG9yLiAgVGhpcyBtYWtlcyBhICpOVUxMKgotICAgcmV0dXJuIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKLSAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKyAgIHJldHVybiBjb2RlIHNvbWV3aGF0IGFtYmlndW91czsgdXNlIDpjOmZ1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCBvcgorICAgOmM6ZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkKiBQeUNhcHN1bGVfR2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeUNhcHN1bGVfR2V0Q29udGV4dChQeU9iamVjdCAqY2Fwc3VsZSkKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IGNvbnRleHQgc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuCiAgICBleGNlcHRpb24gYW5kIHJldHVybiAqTlVMTCouCiAKICAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBjb250ZXh0LiAgVGhpcyBtYWtlcyBhICpOVUxMKgotICAgcmV0dXJuIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKLSAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKyAgIHJldHVybiBjb2RlIHNvbWV3aGF0IGFtYmlndW91czsgdXNlIDpjOmZ1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCBvcgorICAgOmM6ZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KIAogCi0uLiBjZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeUNhcHN1bGVfR2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSkKKy4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeUNhcHN1bGVfR2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSkKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IG5hbWUgc3RvcmVkIGluIHRoZSBjYXBzdWxlLiAgT24gZmFpbHVyZSwgc2V0IGFuIGV4Y2VwdGlvbgogICAgYW5kIHJldHVybiAqTlVMTCouCiAKICAgIEl0IGlzIGxlZ2FsIGZvciBhIGNhcHN1bGUgdG8gaGF2ZSBhICpOVUxMKiBuYW1lLiAgVGhpcyBtYWtlcyBhICpOVUxMKiByZXR1cm4KLSAgIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmNmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgb3IKLSAgIDpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIGRpc2FtYmlndWF0ZS4KKyAgIGNvZGUgc29tZXdoYXQgYW1iaWd1b3VzOyB1c2UgOmM6ZnVuYzpgUHlDYXBzdWxlX0lzVmFsaWRgIG9yCisgICA6YzpmdW5jOmBQeUVycl9PY2N1cnJlZGAgdG8gZGlzYW1iaWd1YXRlLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKQogCiAgICBJbXBvcnQgYSBwb2ludGVyIHRvIGEgQyBvYmplY3QgZnJvbSBhIGNhcHN1bGUgYXR0cmlidXRlIGluIGEgbW9kdWxlLiAgVGhlCiAgICAqbmFtZSogcGFyYW1ldGVyIHNob3VsZCBzcGVjaWZ5IHRoZSBmdWxsIG5hbWUgdG8gdGhlIGF0dHJpYnV0ZSwgYXMgaW4KICAgIGBgbW9kdWxlLmF0dHJpYnV0ZWBgLiAgVGhlICpuYW1lKiBzdG9yZWQgaW4gdGhlIGNhcHN1bGUgbXVzdCBtYXRjaCB0aGlzCiAgICBzdHJpbmcgZXhhY3RseS4gIElmICpub19ibG9jayogaXMgdHJ1ZSwgaW1wb3J0IHRoZSBtb2R1bGUgd2l0aG91dCBibG9ja2luZwotICAgKHVzaW5nIDpjZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9ja2ApLiAgSWYgKm5vX2Jsb2NrKiBpcyBmYWxzZSwKLSAgIGltcG9ydCB0aGUgbW9kdWxlIGNvbnZlbnRpb25hbGx5ICh1c2luZyA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZWApLgorICAgKHVzaW5nIDpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tgKS4gIElmICpub19ibG9jayogaXMgZmFsc2UsCisgICBpbXBvcnQgdGhlIG1vZHVsZSBjb252ZW50aW9uYWxseSAodXNpbmcgOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYCkuCiAKICAgIFJldHVybiB0aGUgY2Fwc3VsZSdzIGludGVybmFsICpwb2ludGVyKiBvbiBzdWNjZXNzLiAgT24gZmFpbHVyZSwgc2V0IGFuCi0gICBleGNlcHRpb24gYW5kIHJldHVybiAqTlVMTCouICBIb3dldmVyLCBpZiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgIGZhaWxlZCB0bworICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gKk5VTEwqLiAgSG93ZXZlciwgaWYgOmM6ZnVuYzpgUHlDYXBzdWxlX0ltcG9ydGAgZmFpbGVkIHRvCiAgICBpbXBvcnQgdGhlIG1vZHVsZSwgYW5kICpub19ibG9jayogd2FzIHRydWUsIG5vIGV4Y2VwdGlvbiBpcyBzZXQuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfSXNWYWxpZChQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX0lzVmFsaWQoUHlPYmplY3QgKmNhcHN1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIERldGVybWluZXMgd2hldGhlciBvciBub3QgKmNhcHN1bGUqIGlzIGEgdmFsaWQgY2Fwc3VsZS4gIEEgdmFsaWQgY2Fwc3VsZSBpcwotICAgbm9uLSpOVUxMKiwgcGFzc2VzIDpjZnVuYzpgUHlDYXBzdWxlX0NoZWNrRXhhY3RgLCBoYXMgYSBub24tKk5VTEwqIHBvaW50ZXIKKyAgIG5vbi0qTlVMTCosIHBhc3NlcyA6YzpmdW5jOmBQeUNhcHN1bGVfQ2hlY2tFeGFjdGAsIGhhcyBhIG5vbi0qTlVMTCogcG9pbnRlcgogICAgc3RvcmVkIGluIGl0LCBhbmQgaXRzIGludGVybmFsIG5hbWUgbWF0Y2hlcyB0aGUgKm5hbWUqIHBhcmFtZXRlci4gIChTZWUKLSAgIDpjZnVuYzpgUHlDYXBzdWxlX0dldFBvaW50ZXJgIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgY2Fwc3VsZSBuYW1lcyBhcmUKKyAgIDpjOmZ1bmM6YFB5Q2Fwc3VsZV9HZXRQb2ludGVyYCBmb3IgaW5mb3JtYXRpb24gb24gaG93IGNhcHN1bGUgbmFtZXMgYXJlCiAgICBjb21wYXJlZC4pCiAKLSAgIEluIG90aGVyIHdvcmRzLCBpZiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9Jc1ZhbGlkYCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgY2FsbHMgdG8KLSAgIGFueSBvZiB0aGUgYWNjZXNzb3JzIChhbnkgZnVuY3Rpb24gc3RhcnRpbmcgd2l0aCA6Y2Z1bmM6YFB5Q2Fwc3VsZV9HZXRgKSBhcmUKKyAgIEluIG90aGVyIHdvcmRzLCBpZiA6YzpmdW5jOmBQeUNhcHN1bGVfSXNWYWxpZGAgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNhbGxzIHRvCisgICBhbnkgb2YgdGhlIGFjY2Vzc29ycyAoYW55IGZ1bmN0aW9uIHN0YXJ0aW5nIHdpdGggOmM6ZnVuYzpgUHlDYXBzdWxlX0dldGApIGFyZQogICAgZ3VhcmFudGVlZCB0byBzdWNjZWVkLgogCiAgICBSZXR1cm4gYSBub256ZXJvIHZhbHVlIGlmIHRoZSBvYmplY3QgaXMgdmFsaWQgYW5kIG1hdGNoZXMgdGhlIG5hbWUgcGFzc2VkIGluLgogICAgUmV0dXJuIDAgb3RoZXJ3aXNlLiAgVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBmYWlsLgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldENvbnRleHQoUHlPYmplY3QgKmNhcHN1bGUsIHZvaWQgKmNvbnRleHQpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q2Fwc3VsZV9TZXRDb250ZXh0KFB5T2JqZWN0ICpjYXBzdWxlLCB2b2lkICpjb250ZXh0KQogCiAgICBTZXQgdGhlIGNvbnRleHQgcG9pbnRlciBpbnNpZGUgKmNhcHN1bGUqIHRvICpjb250ZXh0Ki4KIAogICAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJldHVybiBub256ZXJvIGFuZCBzZXQgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcihQeU9iamVjdCAqY2Fwc3VsZSwgUHlDYXBzdWxlX0Rlc3RydWN0b3IgZGVzdHJ1Y3RvcikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldERlc3RydWN0b3IoUHlPYmplY3QgKmNhcHN1bGUsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RydWN0b3IpCiAKICAgIFNldCB0aGUgZGVzdHJ1Y3RvciBpbnNpZGUgKmNhcHN1bGUqIHRvICpkZXN0cnVjdG9yKi4KIAogICAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJldHVybiBub256ZXJvIGFuZCBzZXQgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfU2V0TmFtZShQeU9iamVjdCAqY2Fwc3VsZSwgY29uc3QgY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldE5hbWUoUHlPYmplY3QgKmNhcHN1bGUsIGNvbnN0IGNoYXIgKm5hbWUpCiAKICAgIFNldCB0aGUgbmFtZSBpbnNpZGUgKmNhcHN1bGUqIHRvICpuYW1lKi4gIElmIG5vbi0qTlVMTCosIHRoZSBuYW1lIG11c3QKICAgIG91dGxpdmUgdGhlIGNhcHN1bGUuICBJZiB0aGUgcHJldmlvdXMgKm5hbWUqIHN0b3JlZCBpbiB0aGUgY2Fwc3VsZSB3YXMgbm90CkBAIC0xNDIsNyArMTQyLDcgQEAKIAogICAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gIFJldHVybiBub256ZXJvIGFuZCBzZXQgYW4gZXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhcHN1bGVfU2V0UG9pbnRlcihQeU9iamVjdCAqY2Fwc3VsZSwgdm9pZCAqcG9pbnRlcikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDYXBzdWxlX1NldFBvaW50ZXIoUHlPYmplY3QgKmNhcHN1bGUsIHZvaWQgKnBvaW50ZXIpCiAKICAgIFNldCB0aGUgdm9pZCBwb2ludGVyIGluc2lkZSAqY2Fwc3VsZSogdG8gKnBvaW50ZXIqLiAgVGhlIHBvaW50ZXIgbWF5IG5vdCBiZQogICAgKk5VTEwqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NlbGwucnN0IGIvRG9jL2MtYXBpL2NlbGwucnN0CmluZGV4IDM1NjJlZDkuLjQyNzI1OWMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jZWxsLnJzdAorKysgYi9Eb2MvYy1hcGkvY2VsbC5yc3QKQEAgLTE1LDM5ICsxNSwzOSBAQAogQ2VsbCBvYmplY3RzIGFyZSBub3QgbGlrZWx5IHRvIGJlIHVzZWZ1bCBlbHNld2hlcmUuCiAKIAotLi4gY3R5cGU6OiBQeUNlbGxPYmplY3QKKy4uIGM6dHlwZTo6IFB5Q2VsbE9iamVjdAogCiAgICBUaGUgQyBzdHJ1Y3R1cmUgdXNlZCBmb3IgY2VsbCBvYmplY3RzLgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlDZWxsX1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5Q2VsbF9UeXBlCiAKICAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGNlbGwgb2JqZWN0cy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlDZWxsX0NoZWNrKG9iKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNlbGxfQ2hlY2sob2IpCiAKICAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgYSBjZWxsIG9iamVjdDsgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2VsbF9OZXcoUHlPYmplY3QgKm9iKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNlbGxfTmV3KFB5T2JqZWN0ICpvYikKIAogICAgQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgY2VsbCBvYmplY3QgY29udGFpbmluZyB0aGUgdmFsdWUgKm9iKi4gVGhlIHBhcmFtZXRlciBtYXkKICAgIGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDZWxsX0dldChQeU9iamVjdCAqY2VsbCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDZWxsX0dldChQeU9iamVjdCAqY2VsbCkKIAogICAgUmV0dXJuIHRoZSBjb250ZW50cyBvZiB0aGUgY2VsbCAqY2VsbCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2VsbF9HRVQoUHlPYmplY3QgKmNlbGwpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2VsbF9HRVQoUHlPYmplY3QgKmNlbGwpCiAKICAgIFJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIGNlbGwgKmNlbGwqLCBidXQgd2l0aG91dCBjaGVja2luZyB0aGF0ICpjZWxsKiBpcwogICAgbm9uLSpOVUxMKiBhbmQgYSBjZWxsIG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlDZWxsX1NldChQeU9iamVjdCAqY2VsbCwgUHlPYmplY3QgKnZhbHVlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNlbGxfU2V0KFB5T2JqZWN0ICpjZWxsLCBQeU9iamVjdCAqdmFsdWUpCiAKICAgIFNldCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGwgb2JqZWN0ICpjZWxsKiB0byAqdmFsdWUqLiAgVGhpcyByZWxlYXNlcyB0aGUKICAgIHJlZmVyZW5jZSB0byBhbnkgY3VycmVudCBjb250ZW50IG9mIHRoZSBjZWxsLiAqdmFsdWUqIG1heSBiZSAqTlVMTCouICAqY2VsbCoKQEAgLTU1LDcgKzU1LDcgQEAKICAgIHN1Y2Nlc3MsIGBgMGBgIHdpbGwgYmUgcmV0dXJuZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUNlbGxfU0VUKFB5T2JqZWN0ICpjZWxsLCBQeU9iamVjdCAqdmFsdWUpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUNlbGxfU0VUKFB5T2JqZWN0ICpjZWxsLCBQeU9iamVjdCAqdmFsdWUpCiAKICAgIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBjZWxsIG9iamVjdCAqY2VsbCogdG8gKnZhbHVlKi4gIE5vIHJlZmVyZW5jZSBjb3VudHMgYXJlCiAgICBhZGp1c3RlZCwgYW5kIG5vIGNoZWNrcyBhcmUgbWFkZSBmb3Igc2FmZXR5OyAqY2VsbCogbXVzdCBiZSBub24tKk5VTEwqIGFuZCBtdXN0CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29iamVjdC5yc3QgYi9Eb2MvYy1hcGkvY29iamVjdC5yc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNjVhOTguLjAwMDAwMDAKLS0tIGEvRG9jL2MtYXBpL2NvYmplY3QucnN0CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLi4gaGlnaGxpZ2h0bGFuZzo6IGMKLQotLi4gX2NvYmplY3RzOgotCi1DT2JqZWN0cwotLS0tLS0tLS0KLQotLi4gaW5kZXg6OiBvYmplY3Q6IENPYmplY3QKLQotCi0uLiB3YXJuaW5nOjoKLQotICAgVGhlIENPYmplY3QgQVBJIGlzIGRlcHJlY2F0ZWQgYXMgb2YgUHl0aG9uIDMuMS4gIFBsZWFzZSBzd2l0Y2ggdG8gdGhlIG5ldwotICAgOnJlZjpgY2Fwc3VsZXNgIEFQSS4KLQotLi4gY3R5cGU6OiBQeUNPYmplY3QKLQotICAgVGhpcyBzdWJ0eXBlIG9mIDpjdHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYW4gb3BhcXVlIHZhbHVlLCB1c2VmdWwgZm9yIEMKLSAgIGV4dGVuc2lvbiBtb2R1bGVzIHdobyBuZWVkIHRvIHBhc3MgYW4gb3BhcXVlIHZhbHVlIChhcyBhIDpjdHlwZTpgdm9pZFwqYAotICAgcG9pbnRlcikgdGhyb3VnaCBQeXRob24gY29kZSB0byBvdGhlciBDIGNvZGUuICBJdCBpcyBvZnRlbiB1c2VkIHRvIG1ha2UgYSBDCi0gICBmdW5jdGlvbiBwb2ludGVyIGRlZmluZWQgaW4gb25lIG1vZHVsZSBhdmFpbGFibGUgdG8gb3RoZXIgbW9kdWxlcywgc28gdGhlCi0gICByZWd1bGFyIGltcG9ydCBtZWNoYW5pc20gY2FuIGJlIHVzZWQgdG8gYWNjZXNzIEMgQVBJcyBkZWZpbmVkIGluIGR5bmFtaWNhbGx5Ci0gICBsb2FkZWQgbW9kdWxlcy4KLQotCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlDT2JqZWN0X0NoZWNrKFB5T2JqZWN0ICpwKQotCi0gICBSZXR1cm4gdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgYSA6Y3R5cGU6YFB5Q09iamVjdGAuCi0KLQotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q09iamVjdF9Gcm9tVm9pZFB0cih2b2lkKiBjb2JqLCB2b2lkICgqZGVzdHIpKHZvaWQgKikpCi0KLSAgIENyZWF0ZSBhIDpjdHlwZTpgUHlDT2JqZWN0YCBmcm9tIHRoZSBgYHZvaWQgKmBgICpjb2JqKi4gIFRoZSAqZGVzdHIqIGZ1bmN0aW9uCi0gICB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBvYmplY3QgaXMgcmVjbGFpbWVkLCB1bmxlc3MgaXQgaXMgKk5VTEwqLgotCi0KLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjKHZvaWQqIGNvYmosIHZvaWQqIGRlc2MsIHZvaWQgKCpkZXN0cikodm9pZCAqLCB2b2lkICopKQotCi0gICBDcmVhdGUgYSA6Y3R5cGU6YFB5Q09iamVjdGAgZnJvbSB0aGUgOmN0eXBlOmB2b2lkIFwqYCAqY29iaiouICBUaGUgKmRlc3RyKgotICAgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgb2JqZWN0IGlzIHJlY2xhaW1lZC4gVGhlICpkZXNjKiBhcmd1bWVudCBjYW4KLSAgIGJlIHVzZWQgdG8gcGFzcyBleHRyYSBjYWxsYmFjayBkYXRhIGZvciB0aGUgZGVzdHJ1Y3RvciBmdW5jdGlvbi4KLQotCi0uLiBjZnVuY3Rpb246OiB2b2lkKiBQeUNPYmplY3RfQXNWb2lkUHRyKFB5T2JqZWN0KiBzZWxmKQotCi0gICBSZXR1cm4gdGhlIG9iamVjdCA6Y3R5cGU6YHZvaWQgXCpgIHRoYXQgdGhlIDpjdHlwZTpgUHlDT2JqZWN0YCAqc2VsZiogd2FzCi0gICBjcmVhdGVkIHdpdGguCi0KLQotLi4gY2Z1bmN0aW9uOjogdm9pZCogUHlDT2JqZWN0X0dldERlc2MoUHlPYmplY3QqIHNlbGYpCi0KLSAgIFJldHVybiB0aGUgZGVzY3JpcHRpb24gOmN0eXBlOmB2b2lkIFwqYCB0aGF0IHRoZSA6Y3R5cGU6YFB5Q09iamVjdGAgKnNlbGYqIHdhcwotICAgY3JlYXRlZCB3aXRoLgotCi0KLS4uIGNmdW5jdGlvbjo6IGludCBQeUNPYmplY3RfU2V0Vm9pZFB0cihQeU9iamVjdCogc2VsZiwgdm9pZCogY29iaikKLQotICAgU2V0IHRoZSB2b2lkIHBvaW50ZXIgaW5zaWRlICpzZWxmKiB0byAqY29iaiouIFRoZSA6Y3R5cGU6YFB5Q09iamVjdGAgbXVzdCBub3QKLSAgIGhhdmUgYW4gYXNzb2NpYXRlZCBkZXN0cnVjdG9yLiBSZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvZGUucnN0IGIvRG9jL2MtYXBpL2NvZGUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYzQyNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvYy1hcGkvY29kZS5yc3QKQEAgLTAsMCArMSw1MCBAQAorLi4gaGlnaGxpZ2h0bGFuZzo6IGMKKworLi4gX2NvZGVvYmplY3RzOgorCitDb2RlIE9iamVjdHMKKy0tLS0tLS0tLS0tLQorCisuLiBzZWN0aW9uYXV0aG9yOjogSmVmZnJleSBZYXNza2luIDxqeWFzc2tpbkBnbWFpbC5jb20+CisKKworLi4gaW5kZXg6OgorICAgb2JqZWN0OiBjb2RlCisKK0NvZGUgb2JqZWN0cyBhcmUgYSBsb3ctbGV2ZWwgZGV0YWlsIG9mIHRoZSBDUHl0aG9uIGltcGxlbWVudGF0aW9uLgorRWFjaCBvbmUgcmVwcmVzZW50cyBhIGNodW5rIG9mIGV4ZWN1dGFibGUgY29kZSB0aGF0IGhhc24ndCB5ZXQgYmVlbgorYm91bmQgaW50byBhIGZ1bmN0aW9uLgorCisuLiBjOnR5cGU6OiBQeUNvZGVPYmplY3QKKworICAgVGhlIEMgc3RydWN0dXJlIG9mIHRoZSBvYmplY3RzIHVzZWQgdG8gZGVzY3JpYmUgY29kZSBvYmplY3RzLiAgVGhlCisgICBmaWVsZHMgb2YgdGhpcyB0eXBlIGFyZSBzdWJqZWN0IHRvIGNoYW5nZSBhdCBhbnkgdGltZS4KKworCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUNvZGVfVHlwZQorCisgICBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50aW5nIHRoZSBQeXRob24KKyAgIDpjbGFzczpgY29kZWAgdHlwZS4KKworCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZV9DaGVjayhQeU9iamVjdCAqY28pCisKKyAgIFJldHVybiB0cnVlIGlmICpjbyogaXMgYSA6Y2xhc3M6YGNvZGVgIG9iamVjdAorCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZV9HZXROdW1GcmVlKFB5T2JqZWN0ICpjbykKKworICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZnJlZSB2YXJpYWJsZXMgaW4gKmNvKi4KKworLi4gYzpmdW5jdGlvbjo6IFB5Q29kZU9iamVjdCAqUHlDb2RlX05ldyhpbnQgYXJnY291bnQsIGludCBubG9jYWxzLCBpbnQgc3RhY2tzaXplLCBpbnQgZmxhZ3MsIFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqY29uc3RzLCBQeU9iamVjdCAqbmFtZXMsIFB5T2JqZWN0ICp2YXJuYW1lcywgUHlPYmplY3QgKmZyZWV2YXJzLCBQeU9iamVjdCAqY2VsbHZhcnMsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKm5hbWUsIGludCBmaXJzdGxpbmVubywgUHlPYmplY3QgKmxub3RhYikKKworICAgUmV0dXJuIGEgbmV3IGNvZGUgb2JqZWN0LiAgSWYgeW91IG5lZWQgYSBkdW1teSBjb2RlIG9iamVjdCB0bworICAgY3JlYXRlIGEgZnJhbWUsIHVzZSA6YzpmdW5jOmBQeUNvZGVfTmV3RW1wdHlgIGluc3RlYWQuICBDYWxsaW5nCisgICA6YzpmdW5jOmBQeUNvZGVfTmV3YCBkaXJlY3RseSBjYW4gYmluZCB5b3UgdG8gYSBwcmVjaXNlIFB5dGhvbgorICAgdmVyc2lvbiBzaW5jZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYnl0ZWNvZGUgY2hhbmdlcyBvZnRlbi4KKworCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZV9OZXdFbXB0eShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVuY25hbWUsIGludCBmaXJzdGxpbmVubykKKworICAgUmV0dXJuIGEgbmV3IGVtcHR5IGNvZGUgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBmaWxlbmFtZSwKKyAgIGZ1bmN0aW9uIG5hbWUsIGFuZCBmaXJzdCBsaW5lIG51bWJlci4gIEl0IGlzIGlsbGVnYWwgdG8KKyAgIDpmdW5jOmBleGVjYCBvciA6ZnVuYzpgZXZhbGAgdGhlIHJlc3VsdGluZyBjb2RlIG9iamVjdC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb2RlYy5yc3QgYi9Eb2MvYy1hcGkvY29kZWMucnN0CmluZGV4IDI1OTdkMzguLjgyMDdhZTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb2RlYy5yc3QKKysrIGIvRG9jL2MtYXBpL2NvZGVjLnJzdApAQCAtMywxOSArMywxOSBAQAogQ29kZWMgcmVnaXN0cnkgYW5kIHN1cHBvcnQgZnVuY3Rpb25zCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5Q29kZWNfUmVnaXN0ZXIoUHlPYmplY3QgKnNlYXJjaF9mdW5jdGlvbikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDb2RlY19SZWdpc3RlcihQeU9iamVjdCAqc2VhcmNoX2Z1bmN0aW9uKQogCiAgICBSZWdpc3RlciBhIG5ldyBjb2RlYyBzZWFyY2ggZnVuY3Rpb24uCiAKICAgIEFzIHNpZGUgZWZmZWN0LCB0aGlzIHRyaWVzIHRvIGxvYWQgdGhlIDptb2Q6YGVuY29kaW5nc2AgcGFja2FnZSwgaWYgbm90IHlldAogICAgZG9uZSwgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgYWx3YXlzIGZpcnN0IGluIHRoZSBsaXN0IG9mIHNlYXJjaCBmdW5jdGlvbnMuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVjX0tub3duRW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZWNfS25vd25FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZykKIAogICAgUmV0dXJuIGBgMWBgIG9yIGBgMGBgIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZXJlIGlzIGEgcmVnaXN0ZXJlZCBjb2RlYyBmb3IKICAgIHRoZSBnaXZlbiAqZW5jb2RpbmcqLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19FbmNvZGUoUHlPYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19FbmNvZGUoUHlPYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgR2VuZXJpYyBjb2RlYyBiYXNlZCBlbmNvZGluZyBBUEkuCiAKQEAgLTI0LDcgKzI0LDcgQEAKICAgIGJlICpOVUxMKiB0byB1c2UgdGhlIGRlZmF1bHQgbWV0aG9kIGRlZmluZWQgZm9yIHRoZSBjb2RlYy4gIFJhaXNlcyBhCiAgICA6ZXhjOmBMb29rdXBFcnJvcmAgaWYgbm8gZW5jb2RlciBjYW4gYmUgZm91bmQuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0RlY29kZShQeU9iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBHZW5lcmljIGNvZGVjIGJhc2VkIGRlY29kaW5nIEFQSS4KIApAQCAtNDIsMjcgKzQyLDI3IEBACiBlZmZlY3RpdmVseSBjYXNlLWluc2Vuc2l0aXZlLiAgSWYgbm8gY29kZWMgaXMgZm91bmQsIGEgOmV4YzpgS2V5RXJyb3JgIGlzIHNldAogYW5kICpOVUxMKiByZXR1cm5lZC4KIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfRW5jb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19FbmNvZGVyKGNvbnN0IGNoYXIgKmVuY29kaW5nKQogCiAgICBHZXQgYW4gZW5jb2RlciBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0RlY29kZXIoY29uc3QgY2hhciAqZW5jb2RpbmcpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfRGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZykKIAogICAgR2V0IGEgZGVjb2RlciBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRW5jb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBHZXQgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIG9iamVjdCBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2Rlcihjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBHZXQgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgIG9iamVjdCBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVJlYWRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVJlYWRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBHZXQgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVdyaXRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1N0cmVhbVdyaXRlcihjb25zdCBjaGFyICplbmNvZGluZywgUHlPYmplY3QgKnN0cmVhbSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBHZXQgYSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgZmFjdG9yeSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuICplbmNvZGluZyouCiAKQEAgLTcwLDcgKzcwLDcgQEAKIFJlZ2lzdHJ5IEFQSSBmb3IgVW5pY29kZSBlbmNvZGluZyBlcnJvciBoYW5kbGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNvZGVjX1JlZ2lzdGVyRXJyb3IoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmVycm9yKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNvZGVjX1JlZ2lzdGVyRXJyb3IoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmVycm9yKQogCiAgICBSZWdpc3RlciB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gKmVycm9yKiB1bmRlciB0aGUgZ2l2ZW4gKm5hbWUqLgogICAgVGhpcyBjYWxsYmFjayBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSBhIGNvZGVjIHdoZW4gaXQgZW5jb3VudGVycwpAQCAtODksMjkgKzg5LDI5IEBACiAKICAgIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24gZXJyb3IuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0xvb2t1cEVycm9yKGNvbnN0IGNoYXIgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfTG9va3VwRXJyb3IoY29uc3QgY2hhciAqbmFtZSkKIAogICAgTG9va3VwIHRoZSBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBmdW5jdGlvbiByZWdpc3RlcmVkIHVuZGVyICpuYW1lKi4gIEFzIGEKICAgIHNwZWNpYWwgY2FzZSAqTlVMTCogY2FuIGJlIHBhc3NlZCwgaW4gd2hpY2ggY2FzZSB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sKICAgIGZvciAic3RyaWN0IiB3aWxsIGJlIHJldHVybmVkLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19TdHJpY3RFcnJvcnMoUHlPYmplY3QgKmV4YykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19TdHJpY3RFcnJvcnMoUHlPYmplY3QgKmV4YykKIAogICAgUmFpc2UgKmV4YyogYXMgYW4gZXhjZXB0aW9uLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19JZ25vcmVFcnJvcnMoUHlPYmplY3QgKmV4YykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19JZ25vcmVFcnJvcnMoUHlPYmplY3QgKmV4YykKIAogICAgSWdub3JlIHRoZSB1bmljb2RlIGVycm9yLCBza2lwcGluZyB0aGUgZmF1bHR5IGlucHV0LgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19SZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQogCiAgICBSZXBsYWNlIHRoZSB1bmljb2RlIGVuY29kZSBlcnJvciB3aXRoIGBgP2BgIG9yIGBgVStGRkZEYGAuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKIAogICAgUmVwbGFjZSB0aGUgdW5pY29kZSBlbmNvZGUgZXJyb3Igd2l0aCBYTUwgY2hhcmFjdGVyIHJlZmVyZW5jZXMuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMoUHlPYmplY3QgKmV4YykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCiAKICAgIFJlcGxhY2UgdGhlIHVuaWNvZGUgZW5jb2RlIGVycm9yIHdpdGggYmFja3NsYXNoIGVzY2FwZXMgKGBgXHhgYCwgYGBcdWBgIGFuZAogICAgYGBcVWBgKS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb21wbGV4LnJzdCBiL0RvYy9jLWFwaS9jb21wbGV4LnJzdAppbmRleCAwYmNkZjRkLi40M2RmZTU2IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29tcGxleC5yc3QKKysrIGIvRG9jL2MtYXBpL2NvbXBsZXgucnN0CkBAIC0yMSw3ICsyMSw3IEBACiBwb2ludGVycy4gIFRoaXMgaXMgY29uc2lzdGVudCB0aHJvdWdob3V0IHRoZSBBUEkuCiAKIAotLi4gY3R5cGU6OiBQeV9jb21wbGV4CisuLiBjOnR5cGU6OiBQeV9jb21wbGV4CiAKICAgIFRoZSBDIHN0cnVjdHVyZSB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgdmFsdWUgcG9ydGlvbiBvZiBhIFB5dGhvbiBjb21wbGV4CiAgICBudW1iZXIgb2JqZWN0LiAgTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGZvciBkZWFsaW5nIHdpdGggY29tcGxleCBudW1iZXIgb2JqZWN0cwpAQCAtMzQsMzkgKzM0LDM5IEBACiAgICAgICB9IFB5X2NvbXBsZXg7CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfY29tcGxleCBfUHlfY19zdW0oUHlfY29tcGxleCBsZWZ0LCBQeV9jb21wbGV4IHJpZ2h0KQorLi4gYzpmdW5jdGlvbjo6IFB5X2NvbXBsZXggX1B5X2Nfc3VtKFB5X2NvbXBsZXggbGVmdCwgUHlfY29tcGxleCByaWdodCkKIAotICAgUmV0dXJuIHRoZSBzdW0gb2YgdHdvIGNvbXBsZXggbnVtYmVycywgdXNpbmcgdGhlIEMgOmN0eXBlOmBQeV9jb21wbGV4YAorICAgUmV0dXJuIHRoZSBzdW0gb2YgdHdvIGNvbXBsZXggbnVtYmVycywgdXNpbmcgdGhlIEMgOmM6dHlwZTpgUHlfY29tcGxleGAKICAgIHJlcHJlc2VudGF0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X2NvbXBsZXggX1B5X2NfZGlmZihQeV9jb21wbGV4IGxlZnQsIFB5X2NvbXBsZXggcmlnaHQpCisuLiBjOmZ1bmN0aW9uOjogUHlfY29tcGxleCBfUHlfY19kaWZmKFB5X2NvbXBsZXggbGVmdCwgUHlfY29tcGxleCByaWdodCkKIAogICAgUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGNvbXBsZXggbnVtYmVycywgdXNpbmcgdGhlIEMKLSAgIDpjdHlwZTpgUHlfY29tcGxleGAgcmVwcmVzZW50YXRpb24uCisgICA6Yzp0eXBlOmBQeV9jb21wbGV4YCByZXByZXNlbnRhdGlvbi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9jb21wbGV4IF9QeV9jX25lZyhQeV9jb21wbGV4IGNvbXBsZXgpCisuLiBjOmZ1bmN0aW9uOjogUHlfY29tcGxleCBfUHlfY19uZWcoUHlfY29tcGxleCBjb21wbGV4KQogCiAgICBSZXR1cm4gdGhlIG5lZ2F0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlciAqY29tcGxleCosIHVzaW5nIHRoZSBDCi0gICA6Y3R5cGU6YFB5X2NvbXBsZXhgIHJlcHJlc2VudGF0aW9uLgorICAgOmM6dHlwZTpgUHlfY29tcGxleGAgcmVwcmVzZW50YXRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfY29tcGxleCBfUHlfY19wcm9kKFB5X2NvbXBsZXggbGVmdCwgUHlfY29tcGxleCByaWdodCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9jb21wbGV4IF9QeV9jX3Byb2QoUHlfY29tcGxleCBsZWZ0LCBQeV9jb21wbGV4IHJpZ2h0KQogCi0gICBSZXR1cm4gdGhlIHByb2R1Y3Qgb2YgdHdvIGNvbXBsZXggbnVtYmVycywgdXNpbmcgdGhlIEMgOmN0eXBlOmBQeV9jb21wbGV4YAorICAgUmV0dXJuIHRoZSBwcm9kdWN0IG9mIHR3byBjb21wbGV4IG51bWJlcnMsIHVzaW5nIHRoZSBDIDpjOnR5cGU6YFB5X2NvbXBsZXhgCiAgICByZXByZXNlbnRhdGlvbi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9jb21wbGV4IF9QeV9jX3F1b3QoUHlfY29tcGxleCBkaXZpZGVuZCwgUHlfY29tcGxleCBkaXZpc29yKQorLi4gYzpmdW5jdGlvbjo6IFB5X2NvbXBsZXggX1B5X2NfcXVvdChQeV9jb21wbGV4IGRpdmlkZW5kLCBQeV9jb21wbGV4IGRpdmlzb3IpCiAKLSAgIFJldHVybiB0aGUgcXVvdGllbnQgb2YgdHdvIGNvbXBsZXggbnVtYmVycywgdXNpbmcgdGhlIEMgOmN0eXBlOmBQeV9jb21wbGV4YAorICAgUmV0dXJuIHRoZSBxdW90aWVudCBvZiB0d28gY29tcGxleCBudW1iZXJzLCB1c2luZyB0aGUgQyA6Yzp0eXBlOmBQeV9jb21wbGV4YAogICAgcmVwcmVzZW50YXRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfY29tcGxleCBfUHlfY19wb3coUHlfY29tcGxleCBudW0sIFB5X2NvbXBsZXggZXhwKQorLi4gYzpmdW5jdGlvbjo6IFB5X2NvbXBsZXggX1B5X2NfcG93KFB5X2NvbXBsZXggbnVtLCBQeV9jb21wbGV4IGV4cCkKIAotICAgUmV0dXJuIHRoZSBleHBvbmVudGlhdGlvbiBvZiAqbnVtKiBieSAqZXhwKiwgdXNpbmcgdGhlIEMgOmN0eXBlOmBQeV9jb21wbGV4YAorICAgUmV0dXJuIHRoZSBleHBvbmVudGlhdGlvbiBvZiAqbnVtKiBieSAqZXhwKiwgdXNpbmcgdGhlIEMgOmM6dHlwZTpgUHlfY29tcGxleGAKICAgIHJlcHJlc2VudGF0aW9uLgogCiAKQEAgLTc0LDUyICs3NCw1MiBAQAogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIAotLi4gY3R5cGU6OiBQeUNvbXBsZXhPYmplY3QKKy4uIGM6dHlwZTo6IFB5Q29tcGxleE9iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhIFB5dGhvbiBjb21wbGV4IG51bWJlciBvYmplY3QuCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gY29tcGxleCBudW1iZXIgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlDb21wbGV4X1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5Q29tcGxleF9UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBjb21wbGV4IG51bWJlcgorICAgVGhpcyBpbnN0YW5jZSBvZiA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBjb21wbGV4IG51bWJlcgogICAgdHlwZS4gSXQgaXMgdGhlIHNhbWUgb2JqZWN0IGFzIDpjbGFzczpgY29tcGxleGAgaW4gdGhlIFB5dGhvbiBsYXllci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlDb21wbGV4X0NoZWNrKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNvbXBsZXhfQ2hlY2soUHlPYmplY3QgKnApCiAKLSAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjdHlwZTpgUHlDb21wbGV4T2JqZWN0YCBvciBhIHN1YnR5cGUgb2YKLSAgIDpjdHlwZTpgUHlDb21wbGV4T2JqZWN0YC4KKyAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjOnR5cGU6YFB5Q29tcGxleE9iamVjdGAgb3IgYSBzdWJ0eXBlIG9mCisgICA6Yzp0eXBlOmBQeUNvbXBsZXhPYmplY3RgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNvbXBsZXhfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlDb21wbGV4X0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCiAKLSAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjdHlwZTpgUHlDb21wbGV4T2JqZWN0YCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YKLSAgIDpjdHlwZTpgUHlDb21wbGV4T2JqZWN0YC4KKyAgIFJldHVybiB0cnVlIGlmIGl0cyBhcmd1bWVudCBpcyBhIDpjOnR5cGU6YFB5Q29tcGxleE9iamVjdGAsIGJ1dCBub3QgYSBzdWJ0eXBlIG9mCisgICA6Yzp0eXBlOmBQeUNvbXBsZXhPYmplY3RgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KFB5X2NvbXBsZXggdikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb21wbGV4X0Zyb21DQ29tcGxleChQeV9jb21wbGV4IHYpCiAKLSAgIENyZWF0ZSBhIG5ldyBQeXRob24gY29tcGxleCBudW1iZXIgb2JqZWN0IGZyb20gYSBDIDpjdHlwZTpgUHlfY29tcGxleGAgdmFsdWUuCisgICBDcmVhdGUgYSBuZXcgUHl0aG9uIGNvbXBsZXggbnVtYmVyIG9iamVjdCBmcm9tIGEgQyA6Yzp0eXBlOmBQeV9jb21wbGV4YCB2YWx1ZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb21wbGV4X0Zyb21Eb3VibGVzKGRvdWJsZSByZWFsLCBkb3VibGUgaW1hZykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlDb21wbGV4X0Zyb21Eb3VibGVzKGRvdWJsZSByZWFsLCBkb3VibGUgaW1hZykKIAotICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlDb21wbGV4T2JqZWN0YCBvYmplY3QgZnJvbSAqcmVhbCogYW5kICppbWFnKi4KKyAgIFJldHVybiBhIG5ldyA6Yzp0eXBlOmBQeUNvbXBsZXhPYmplY3RgIG9iamVjdCBmcm9tICpyZWFsKiBhbmQgKmltYWcqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeUNvbXBsZXhfUmVhbEFzRG91YmxlKFB5T2JqZWN0ICpvcCkKKy4uIGM6ZnVuY3Rpb246OiBkb3VibGUgUHlDb21wbGV4X1JlYWxBc0RvdWJsZShQeU9iamVjdCAqb3ApCiAKLSAgIFJldHVybiB0aGUgcmVhbCBwYXJ0IG9mICpvcCogYXMgYSBDIDpjdHlwZTpgZG91YmxlYC4KKyAgIFJldHVybiB0aGUgcmVhbCBwYXJ0IG9mICpvcCogYXMgYSBDIDpjOnR5cGU6YGRvdWJsZWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogZG91YmxlIFB5Q29tcGxleF9JbWFnQXNEb3VibGUoUHlPYmplY3QgKm9wKQorLi4gYzpmdW5jdGlvbjo6IGRvdWJsZSBQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKFB5T2JqZWN0ICpvcCkKIAotICAgUmV0dXJuIHRoZSBpbWFnaW5hcnkgcGFydCBvZiAqb3AqIGFzIGEgQyA6Y3R5cGU6YGRvdWJsZWAuCisgICBSZXR1cm4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mICpvcCogYXMgYSBDIDpjOnR5cGU6YGRvdWJsZWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfY29tcGxleCBQeUNvbXBsZXhfQXNDQ29tcGxleChQeU9iamVjdCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogUHlfY29tcGxleCBQeUNvbXBsZXhfQXNDQ29tcGxleChQeU9iamVjdCAqb3ApCiAKLSAgIFJldHVybiB0aGUgOmN0eXBlOmBQeV9jb21wbGV4YCB2YWx1ZSBvZiB0aGUgY29tcGxleCBudW1iZXIgKm9wKi4KKyAgIFJldHVybiB0aGUgOmM6dHlwZTpgUHlfY29tcGxleGAgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyICpvcCouCiAKICAgIElmICpvcCogaXMgbm90IGEgUHl0aG9uIGNvbXBsZXggbnVtYmVyIG9iamVjdCBidXQgaGFzIGEgOm1ldGg6YF9fY29tcGxleF9fYAogICAgbWV0aG9kLCB0aGlzIG1ldGhvZCB3aWxsIGZpcnN0IGJlIGNhbGxlZCB0byBjb252ZXJ0ICpvcCogdG8gYSBQeXRob24gY29tcGxleApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdCBiL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKaW5kZXggZDcyODU5OS4uNjU5MDRlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdAorKysgYi9Eb2MvYy1hcGkvY29uY3JldGUucnN0CkBAIC0xMSw3ICsxMSw3IEBACiBQYXNzaW5nIHRoZW0gYW4gb2JqZWN0IG9mIHRoZSB3cm9uZyB0eXBlIGlzIG5vdCBhIGdvb2QgaWRlYTsgaWYgeW91IHJlY2VpdmUgYW4KIG9iamVjdCBmcm9tIGEgUHl0aG9uIHByb2dyYW0gYW5kIHlvdSBhcmUgbm90IHN1cmUgdGhhdCBpdCBoYXMgdGhlIHJpZ2h0IHR5cGUsCiB5b3UgbXVzdCBwZXJmb3JtIGEgdHlwZSBjaGVjayBmaXJzdDsgZm9yIGV4YW1wbGUsIHRvIGNoZWNrIHRoYXQgYW4gb2JqZWN0IGlzIGEKLWRpY3Rpb25hcnksIHVzZSA6Y2Z1bmM6YFB5RGljdF9DaGVja2AuICBUaGUgY2hhcHRlciBpcyBzdHJ1Y3R1cmVkIGxpa2UgdGhlCitkaWN0aW9uYXJ5LCB1c2UgOmM6ZnVuYzpgUHlEaWN0X0NoZWNrYC4gIFRoZSBjaGFwdGVyIGlzIHN0cnVjdHVyZWQgbGlrZSB0aGUKICJmYW1pbHkgdHJlZSIgb2YgUHl0aG9uIG9iamVjdCB0eXBlcy4KIAogLi4gd2FybmluZzo6CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgIG1lbW9yeXZpZXcucnN0CiAgICB3ZWFrcmVmLnJzdAogICAgY2Fwc3VsZS5yc3QKLSAgIGNvYmplY3QucnN0CiAgICBjZWxsLnJzdAogICAgZ2VuLnJzdAogICAgZGF0ZXRpbWUucnN0CisgICBjb2RlLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0IGIvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0CmluZGV4IGFkM2YyZmEuLmRmYzBhM2EgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdAorKysgYi9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QKQEAgLTgsMjAgKzgsMjAgQEAKIEZ1bmN0aW9ucyBmb3IgbnVtYmVyIGNvbnZlcnNpb24gYW5kIGZvcm1hdHRlZCBzdHJpbmcgb3V0cHV0LgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9TX3NucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IHNpemUsICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPU19zbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXplLCAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIE91dHB1dCBub3QgbW9yZSB0aGFuICpzaXplKiBieXRlcyB0byAqc3RyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcKICAgICpmb3JtYXQqIGFuZCB0aGUgZXh0cmEgYXJndW1lbnRzLiBTZWUgdGhlIFVuaXggbWFuIHBhZ2UgOm1hbnBhZ2U6YHNucHJpbnRmKDIpYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPU192c25wcmludGYoY2hhciAqc3RyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9TX3ZzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiAKICAgIE91dHB1dCBub3QgbW9yZSB0aGFuICpzaXplKiBieXRlcyB0byAqc3RyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcKICAgICpmb3JtYXQqIGFuZCB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdCAqdmEqLiBVbml4IG1hbiBwYWdlCiAgICA6bWFucGFnZTpgdnNucHJpbnRmKDIpYC4KIAotOmNmdW5jOmBQeU9TX3NucHJpbnRmYCBhbmQgOmNmdW5jOmBQeU9TX3ZzbnByaW50ZmAgd3JhcCB0aGUgU3RhbmRhcmQgQyBsaWJyYXJ5Ci1mdW5jdGlvbnMgOmNmdW5jOmBzbnByaW50ZmAgYW5kIDpjZnVuYzpgdnNucHJpbnRmYC4gVGhlaXIgcHVycG9zZSBpcyB0bworOmM6ZnVuYzpgUHlPU19zbnByaW50ZmAgYW5kIDpjOmZ1bmM6YFB5T1NfdnNucHJpbnRmYCB3cmFwIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnkKK2Z1bmN0aW9ucyA6YzpmdW5jOmBzbnByaW50ZmAgYW5kIDpjOmZ1bmM6YHZzbnByaW50ZmAuIFRoZWlyIHB1cnBvc2UgaXMgdG8KIGd1YXJhbnRlZSBjb25zaXN0ZW50IGJlaGF2aW9yIGluIGNvcm5lciBjYXNlcywgd2hpY2ggdGhlIFN0YW5kYXJkIEMgZnVuY3Rpb25zIGRvCiBub3QuCiAKQEAgLTMwLDcgKzMwLDcgQEAKIEJvdGggZnVuY3Rpb25zIHJlcXVpcmUgdGhhdCBgYHN0ciAhPSBOVUxMYGAsIGBgc2l6ZSA+IDBgYCBhbmQgYGBmb3JtYXQgIT0KIE5VTExgYC4KIAotSWYgdGhlIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSA6Y2Z1bmM6YHZzbnByaW50ZmAgYW5kIHRoZSBidWZmZXIgc2l6ZSBuZWVkZWQgdG8KK0lmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IGhhdmUgOmM6ZnVuYzpgdnNucHJpbnRmYCBhbmQgdGhlIGJ1ZmZlciBzaXplIG5lZWRlZCB0bwogYXZvaWQgdHJ1bmNhdGlvbiBleGNlZWRzICpzaXplKiBieSBtb3JlIHRoYW4gNTEyIGJ5dGVzLCBQeXRob24gYWJvcnRzIHdpdGggYQogKlB5X0ZhdGFsRXJyb3IqLgogCkBAIC01MSwyNCArNTEsOSBAQAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSBsb2NhbGUtaW5kZXBlbmRlbnQgc3RyaW5nIHRvIG51bWJlciBjb252ZXJzaW9ucy4KIAogCi0uLiBjZnVuY3Rpb246OiBkb3VibGUgUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKKy4uIGM6ZnVuY3Rpb246OiBkb3VibGUgUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0IGNoYXIgKnMsIGNoYXIgKiplbmRwdHIsIFB5T2JqZWN0ICpvdmVyZmxvd19leGNlcHRpb24pCiAKLSAgIENvbnZlcnQgYSBzdHJpbmcgdG8gYSA6Y3R5cGU6YGRvdWJsZWAuIFRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIHRoZSBTdGFuZGFyZCBDCi0gICBmdW5jdGlvbiA6Y2Z1bmM6YHN0cnRvZGAgZG9lcyBpbiB0aGUgQyBsb2NhbGUuIEl0IGRvZXMgdGhpcyB3aXRob3V0IGNoYW5naW5nIHRoZQotICAgY3VycmVudCBsb2NhbGUsIHNpbmNlIHRoYXQgd291bGQgbm90IGJlIHRocmVhZC1zYWZlLgotCi0gICA6Y2Z1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBzaG91bGQgdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHJlYWRpbmcgY29uZmlndXJhdGlvbgotICAgZmlsZXMgb3Igb3RoZXIgbm9uLXVzZXIgaW5wdXQgdGhhdCBzaG91bGQgYmUgbG9jYWxlIGluZGVwZW5kZW50LgotCi0gICBTZWUgdGhlIFVuaXggbWFuIHBhZ2UgOm1hbnBhZ2U6YHN0cnRvZCgyKWAgZm9yIGRldGFpbHMuCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjEKLSAgICAgIFVzZSA6Y2Z1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgaW5zdGVhZC4KLQotCi0uLiBjZnVuY3Rpb246OiBkb3VibGUgUHlPU19zdHJpbmdfdG9fZG91YmxlKGNvbnN0IGNoYXIgKnMsIGNoYXIgKiplbmRwdHIsIFB5T2JqZWN0ICpvdmVyZmxvd19leGNlcHRpb24pCi0KLSAgIENvbnZlcnQgYSBzdHJpbmcgYGBzYGAgdG8gYSA6Y3R5cGU6YGRvdWJsZWAsIHJhaXNpbmcgYSBQeXRob24KKyAgIENvbnZlcnQgYSBzdHJpbmcgYGBzYGAgdG8gYSA6Yzp0eXBlOmBkb3VibGVgLCByYWlzaW5nIGEgUHl0aG9uCiAgICBleGNlcHRpb24gb24gZmFpbHVyZS4gIFRoZSBzZXQgb2YgYWNjZXB0ZWQgc3RyaW5ncyBjb3JyZXNwb25kcyB0bwogICAgdGhlIHNldCBvZiBzdHJpbmdzIGFjY2VwdGVkIGJ5IFB5dGhvbidzIDpmdW5jOmBmbG9hdGAgY29uc3RydWN0b3IsCiAgICBleGNlcHQgdGhhdCBgYHNgYCBtdXN0IG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4KQEAgLTEwMCwyMyArODUsOSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAotLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19hc2NpaV9mb3JtYXRkKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgZG91YmxlIGQpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlPU19kb3VibGVfdG9fc3RyaW5nKGRvdWJsZSB2YWwsIGNoYXIgZm9ybWF0X2NvZGUsIGludCBwcmVjaXNpb24sIGludCBmbGFncywgaW50ICpwdHlwZSkKIAotICAgQ29udmVydCBhIDpjdHlwZTpgZG91YmxlYCB0byBhIHN0cmluZyB1c2luZyB0aGUgYGAnLidgYCBhcyB0aGUgZGVjaW1hbAotICAgc2VwYXJhdG9yLiAqZm9ybWF0KiBpcyBhIDpjZnVuYzpgcHJpbnRmYFwgLXN0eWxlIGZvcm1hdCBzdHJpbmcgc3BlY2lmeWluZyB0aGUKLSAgIG51bWJlciBmb3JtYXQuIEFsbG93ZWQgY29udmVyc2lvbiBjaGFyYWN0ZXJzIGFyZSBgYCdlJ2BgLCBgYCdFJ2BgLCBgYCdmJ2BgLAotICAgYGAnRidgYCwgYGAnZydgYCBhbmQgYGAnRydgYC4KLQotICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gKmJ1ZmZlciogd2l0aCB0aGUgY29udmVydGVkIHN0cmluZyBvciBOVUxMIGlmCi0gICB0aGUgY29udmVyc2lvbiBmYWlsZWQuCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjEKLSAgICAgVXNlIDpjZnVuYzpgUHlPU19kb3VibGVfdG9fc3RyaW5nYCBpbnN0ZWFkLgotCi0KLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5T1NfZG91YmxlX3RvX3N0cmluZyhkb3VibGUgdmFsLCBjaGFyIGZvcm1hdF9jb2RlLCBpbnQgcHJlY2lzaW9uLCBpbnQgZmxhZ3MsIGludCAqcHR5cGUpCi0KLSAgIENvbnZlcnQgYSA6Y3R5cGU6YGRvdWJsZWAgKnZhbCogdG8gYSBzdHJpbmcgdXNpbmcgc3VwcGxpZWQKKyAgIENvbnZlcnQgYSA6Yzp0eXBlOmBkb3VibGVgICp2YWwqIHRvIGEgc3RyaW5nIHVzaW5nIHN1cHBsaWVkCiAgICAqZm9ybWF0X2NvZGUqLCAqcHJlY2lzaW9uKiwgYW5kICpmbGFncyouCiAKICAgICpmb3JtYXRfY29kZSogbXVzdCBiZSBvbmUgb2YgYGAnZSdgYCwgYGAnRSdgYCwgYGAnZidgYCwgYGAnRidgYCwKQEAgLTEzNCw3ICsxMDUsNyBAQAogICAgICBsaWtlIGFuIGludGVnZXIuCiAKICAgICogKlB5X0RUU0ZfQUxUKiBtZWFucyB0byBhcHBseSAiYWx0ZXJuYXRlIiBmb3JtYXR0aW5nIHJ1bGVzLiAgU2VlIHRoZQotICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOmNmdW5jOmBQeU9TX3NucHJpbnRmYCBgYCcjJ2BgIHNwZWNpZmllciBmb3IKKyAgICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDpjOmZ1bmM6YFB5T1Nfc25wcmludGZgIGBgJyMnYGAgc3BlY2lmaWVyIGZvcgogICAgICBkZXRhaWxzLgogCiAgICBJZiAqcHR5cGUqIGlzIG5vbi1OVUxMLCB0aGVuIHRoZSB2YWx1ZSBpdCBwb2ludHMgdG8gd2lsbCBiZSBzZXQgdG8gb25lIG9mCkBAIC0xNDMsMjggKzExNCwxOCBAQAogCiAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcG9pbnRlciB0byAqYnVmZmVyKiB3aXRoIHRoZSBjb252ZXJ0ZWQgc3RyaW5nIG9yCiAgICAqTlVMTCogaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBmcmVlaW5nIHRoZQotICAgcmV0dXJuZWQgc3RyaW5nIGJ5IGNhbGxpbmcgOmNmdW5jOmBQeU1lbV9GcmVlYC4KKyAgIHJldHVybmVkIHN0cmluZyBieSBjYWxsaW5nIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0uLiBjZnVuY3Rpb246OiBkb3VibGUgUHlPU19hc2NpaV9hdG9mKGNvbnN0IGNoYXIgKm5wdHIpCi0KLSAgIENvbnZlcnQgYSBzdHJpbmcgdG8gYSA6Y3R5cGU6YGRvdWJsZWAgaW4gYSBsb2NhbGUtaW5kZXBlbmRlbnQgd2F5LgotCi0gICBTZWUgdGhlIFVuaXggbWFuIHBhZ2UgOm1hbnBhZ2U6YGF0b2YoMilgIGZvciBkZXRhaWxzLgotCi0gICAuLiBkZXByZWNhdGVkOjogMy4xCi0gICAgICBVc2UgOmNmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGluc3RlYWQuCi0KLQotLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19zdHJpY21wKGNoYXIgKnMxLCBjaGFyICpzMikKKy4uIGM6ZnVuY3Rpb246OiBjaGFyKiBQeU9TX3N0cmljbXAoY2hhciAqczEsIGNoYXIgKnMyKQogCiAgICBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Ygc3RyaW5ncy4gVGhlIGZ1bmN0aW9uIHdvcmtzIGFsbW9zdAotICAgaWRlbnRpY2FsbHkgdG8gOmNmdW5jOmBzdHJjbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCisgICBpZGVudGljYWxseSB0byA6YzpmdW5jOmBzdHJjbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogY2hhciogUHlPU19zdHJuaWNtcChjaGFyICpzMSwgY2hhciAqczIsIFB5X3NzaXplX3QgIHNpemUpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlPU19zdHJuaWNtcChjaGFyICpzMSwgY2hhciAqczIsIFB5X3NzaXplX3QgIHNpemUpCiAKICAgIENhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbiBvZiBzdHJpbmdzLiBUaGUgZnVuY3Rpb24gd29ya3MgYWxtb3N0Ci0gICBpZGVudGljYWxseSB0byA6Y2Z1bmM6YHN0cm5jbXBgIGV4Y2VwdCB0aGF0IGl0IGlnbm9yZXMgdGhlIGNhc2UuCisgICBpZGVudGljYWxseSB0byA6YzpmdW5jOmBzdHJuY21wYCBleGNlcHQgdGhhdCBpdCBpZ25vcmVzIHRoZSBjYXNlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2RhdGV0aW1lLnJzdCBiL0RvYy9jLWFwaS9kYXRldGltZS5yc3QKaW5kZXggNjUxNWJhYi4uZmNkMTM5NSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2RhdGV0aW1lLnJzdAorKysgYi9Eb2MvYy1hcGkvZGF0ZXRpbWUucnN0CkBAIC04LDkzICs4LDkzIEBACiBWYXJpb3VzIGRhdGUgYW5kIHRpbWUgb2JqZWN0cyBhcmUgc3VwcGxpZWQgYnkgdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUuCiBCZWZvcmUgdXNpbmcgYW55IG9mIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGhlYWRlciBmaWxlIDpmaWxlOmBkYXRldGltZS5oYCBtdXN0IGJlCiBpbmNsdWRlZCBpbiB5b3VyIHNvdXJjZSAobm90ZSB0aGF0IHRoaXMgaXMgbm90IGluY2x1ZGVkIGJ5IDpmaWxlOmBQeXRob24uaGApLAotYW5kIHRoZSBtYWNybyA6Y21hY3JvOmBQeURhdGVUaW1lX0lNUE9SVGAgbXVzdCBiZSBpbnZva2VkLCB1c3VhbGx5IGFzIHBhcnQgb2YKK2FuZCB0aGUgbWFjcm8gOmM6bWFjcm86YFB5RGF0ZVRpbWVfSU1QT1JUYCBtdXN0IGJlIGludm9rZWQsIHVzdWFsbHkgYXMgcGFydCBvZgogdGhlIG1vZHVsZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbi4gIFRoZSBtYWNybyBwdXRzIGEgcG9pbnRlciB0byBhIEMgc3RydWN0dXJlCi1pbnRvIGEgc3RhdGljIHZhcmlhYmxlLCA6Y2RhdGE6YFB5RGF0ZVRpbWVBUElgLCB0aGF0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZworaW50byBhIHN0YXRpYyB2YXJpYWJsZSwgOmM6ZGF0YTpgUHlEYXRlVGltZUFQSWAsIHRoYXQgaXMgdXNlZCBieSB0aGUgZm9sbG93aW5nCiBtYWNyb3MuCiAKIFR5cGUtY2hlY2sgbWFjcm9zOgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlX0NoZWNrKFB5T2JqZWN0ICpvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEYXRlX0NoZWNrKFB5T2JqZWN0ICpvYikKIAotICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjZGF0YTpgUHlEYXRlVGltZV9EYXRlVHlwZWAgb3IgYSBzdWJ0eXBlIG9mCi0gICA6Y2RhdGE6YFB5RGF0ZVRpbWVfRGF0ZVR5cGVgLiAgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmM6ZGF0YTpgUHlEYXRlVGltZV9EYXRlVHlwZWAgb3IgYSBzdWJ0eXBlIG9mCisgICA6YzpkYXRhOmBQeURhdGVUaW1lX0RhdGVUeXBlYC4gICpvYiogbXVzdCBub3QgYmUgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeURhdGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqb2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvYikKIAotICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjZGF0YTpgUHlEYXRlVGltZV9EYXRlVHlwZWAuICpvYiogbXVzdCBub3QgYmUKKyAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgb2YgdHlwZSA6YzpkYXRhOmBQeURhdGVUaW1lX0RhdGVUeXBlYC4gKm9iKiBtdXN0IG5vdCBiZQogICAgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX0NoZWNrKFB5T2JqZWN0ICpvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9DaGVjayhQeU9iamVjdCAqb2IpCiAKLSAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgb2YgdHlwZSA6Y2RhdGE6YFB5RGF0ZVRpbWVfRGF0ZVRpbWVUeXBlYCBvciBhIHN1YnR5cGUgb2YKLSAgIDpjZGF0YTpgUHlEYXRlVGltZV9EYXRlVGltZVR5cGVgLiAgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmM6ZGF0YTpgUHlEYXRlVGltZV9EYXRlVGltZVR5cGVgIG9yIGEgc3VidHlwZSBvZgorICAgOmM6ZGF0YTpgUHlEYXRlVGltZV9EYXRlVGltZVR5cGVgLiAgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfQ2hlY2tFeGFjdChQeU9iamVjdCAqb2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfQ2hlY2tFeGFjdChQeU9iamVjdCAqb2IpCiAKLSAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgb2YgdHlwZSA6Y2RhdGE6YFB5RGF0ZVRpbWVfRGF0ZVRpbWVUeXBlYC4gKm9iKiBtdXN0IG5vdAorICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjOmRhdGE6YFB5RGF0ZVRpbWVfRGF0ZVRpbWVUeXBlYC4gKm9iKiBtdXN0IG5vdAogICAgYmUgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVRpbWVfQ2hlY2soUHlPYmplY3QgKm9iKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVRpbWVfQ2hlY2soUHlPYmplY3QgKm9iKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmNkYXRhOmBQeURhdGVUaW1lX1RpbWVUeXBlYCBvciBhIHN1YnR5cGUgb2YKLSAgIDpjZGF0YTpgUHlEYXRlVGltZV9UaW1lVHlwZWAuICAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KKyAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgb2YgdHlwZSA6YzpkYXRhOmBQeURhdGVUaW1lX1RpbWVUeXBlYCBvciBhIHN1YnR5cGUgb2YKKyAgIDpjOmRhdGE6YFB5RGF0ZVRpbWVfVGltZVR5cGVgLiAgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VGltZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUaW1lX0NoZWNrRXhhY3QoUHlPYmplY3QgKm9iKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmNkYXRhOmBQeURhdGVUaW1lX1RpbWVUeXBlYC4gKm9iKiBtdXN0IG5vdCBiZQorICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjOmRhdGE6YFB5RGF0ZVRpbWVfVGltZVR5cGVgLiAqb2IqIG11c3Qgbm90IGJlCiAgICAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGVsdGFfQ2hlY2soUHlPYmplY3QgKm9iKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURlbHRhX0NoZWNrKFB5T2JqZWN0ICpvYikKIAotICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjZGF0YTpgUHlEYXRlVGltZV9EZWx0YVR5cGVgIG9yIGEgc3VidHlwZSBvZgotICAgOmNkYXRhOmBQeURhdGVUaW1lX0RlbHRhVHlwZWAuICAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KKyAgIFJldHVybiB0cnVlIGlmICpvYiogaXMgb2YgdHlwZSA6YzpkYXRhOmBQeURhdGVUaW1lX0RlbHRhVHlwZWAgb3IgYSBzdWJ0eXBlIG9mCisgICA6YzpkYXRhOmBQeURhdGVUaW1lX0RlbHRhVHlwZWAuICAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEZWx0YV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEZWx0YV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvYikKIAotICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBvZiB0eXBlIDpjZGF0YTpgUHlEYXRlVGltZV9EZWx0YVR5cGVgLiAqb2IqIG11c3Qgbm90IGJlCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmM6ZGF0YTpgUHlEYXRlVGltZV9EZWx0YVR5cGVgLiAqb2IqIG11c3Qgbm90IGJlCiAgICAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VFpJbmZvX0NoZWNrKFB5T2JqZWN0ICpvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUWkluZm9fQ2hlY2soUHlPYmplY3QgKm9iKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmNkYXRhOmBQeURhdGVUaW1lX1RaSW5mb1R5cGVgIG9yIGEgc3VidHlwZSBvZgotICAgOmNkYXRhOmBQeURhdGVUaW1lX1RaSW5mb1R5cGVgLiAgKm9iKiBtdXN0IG5vdCBiZSAqTlVMTCouCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmM6ZGF0YTpgUHlEYXRlVGltZV9UWkluZm9UeXBlYCBvciBhIHN1YnR5cGUgb2YKKyAgIDpjOmRhdGE6YFB5RGF0ZVRpbWVfVFpJbmZvVHlwZWAuICAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlUWkluZm9fQ2hlY2tFeGFjdChQeU9iamVjdCAqb2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VFpJbmZvX0NoZWNrRXhhY3QoUHlPYmplY3QgKm9iKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmNkYXRhOmBQeURhdGVUaW1lX1RaSW5mb1R5cGVgLiAqb2IqIG11c3Qgbm90IGJlCisgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIG9mIHR5cGUgOmM6ZGF0YTpgUHlEYXRlVGltZV9UWkluZm9UeXBlYC4gKm9iKiBtdXN0IG5vdCBiZQogICAgKk5VTEwqLgogCiAKIE1hY3JvcyB0byBjcmVhdGUgb2JqZWN0czoKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGF0ZV9Gcm9tRGF0ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURhdGVfRnJvbURhdGUoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSkKIAogICAgUmV0dXJuIGEgYGBkYXRldGltZS5kYXRlYGAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCB5ZWFyLCBtb250aCBhbmQgZGF5LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURhdGVUaW1lX0Zyb21EYXRlQW5kVGltZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCwgaW50IHVzZWNvbmQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGF0ZVRpbWVfRnJvbURhdGVBbmRUaW1lKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgdXNlY29uZCkKIAogICAgUmV0dXJuIGEgYGBkYXRldGltZS5kYXRldGltZWBgIG9iamVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgeWVhciwgbW9udGgsIGRheSwgaG91ciwKICAgIG1pbnV0ZSwgc2Vjb25kIGFuZCBtaWNyb3NlY29uZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlUaW1lX0Zyb21UaW1lKGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgdXNlY29uZCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlUaW1lX0Zyb21UaW1lKGludCBob3VyLCBpbnQgbWludXRlLCBpbnQgc2Vjb25kLCBpbnQgdXNlY29uZCkKIAogICAgUmV0dXJuIGEgYGBkYXRldGltZS50aW1lYGAgb2JqZWN0IHdpdGggdGhlIHNwZWNpZmllZCBob3VyLCBtaW51dGUsIHNlY29uZCBhbmQKICAgIG1pY3Jvc2Vjb25kLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlbHRhX0Zyb21EU1UoaW50IGRheXMsIGludCBzZWNvbmRzLCBpbnQgdXNlY29uZHMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGVsdGFfRnJvbURTVShpbnQgZGF5cywgaW50IHNlY29uZHMsIGludCB1c2Vjb25kcykKIAogICAgUmV0dXJuIGEgYGBkYXRldGltZS50aW1lZGVsdGFgYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBudW1iZXIgb2YgZGF5cywKICAgIHNlY29uZHMgYW5kIG1pY3Jvc2Vjb25kcy4gIE5vcm1hbGl6YXRpb24gaXMgcGVyZm9ybWVkIHNvIHRoYXQgdGhlIHJlc3VsdGluZwpAQCAtMTAzLDgyICsxMDMsODIgQEAKIAogCiBNYWNyb3MgdG8gZXh0cmFjdCBmaWVsZHMgZnJvbSBkYXRlIG9iamVjdHMuICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZgotOmNkYXRhOmBQeURhdGVUaW1lX0RhdGVgLCBpbmNsdWRpbmcgc3ViY2xhc3NlcyAoc3VjaCBhcwotOmNkYXRhOmBQeURhdGVUaW1lX0RhdGVUaW1lYCkuICBUaGUgYXJndW1lbnQgbXVzdCBub3QgYmUgKk5VTEwqLCBhbmQgdGhlIHR5cGUgaXMKKzpjOmRhdGE6YFB5RGF0ZVRpbWVfRGF0ZWAsIGluY2x1ZGluZyBzdWJjbGFzc2VzIChzdWNoIGFzCis6YzpkYXRhOmBQeURhdGVUaW1lX0RhdGVUaW1lYCkuICBUaGUgYXJndW1lbnQgbXVzdCBub3QgYmUgKk5VTEwqLCBhbmQgdGhlIHR5cGUgaXMKIG5vdCBjaGVja2VkOgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9HRVRfWUVBUihQeURhdGVUaW1lX0RhdGUgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfR0VUX1lFQVIoUHlEYXRlVGltZV9EYXRlICpvKQogCiAgICBSZXR1cm4gdGhlIHllYXIsIGFzIGEgcG9zaXRpdmUgaW50LgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX0dFVF9NT05USChQeURhdGVUaW1lX0RhdGUgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfR0VUX01PTlRIKFB5RGF0ZVRpbWVfRGF0ZSAqbykKIAogICAgUmV0dXJuIHRoZSBtb250aCwgYXMgYW4gaW50IGZyb20gMSB0aHJvdWdoIDEyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX0dFVF9EQVkoUHlEYXRlVGltZV9EYXRlICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX0dFVF9EQVkoUHlEYXRlVGltZV9EYXRlICpvKQogCiAgICBSZXR1cm4gdGhlIGRheSwgYXMgYW4gaW50IGZyb20gMSB0aHJvdWdoIDMxLgogCiAKIE1hY3JvcyB0byBleHRyYWN0IGZpZWxkcyBmcm9tIGRhdGV0aW1lIG9iamVjdHMuICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhbgotaW5zdGFuY2Ugb2YgOmNkYXRhOmBQeURhdGVUaW1lX0RhdGVUaW1lYCwgaW5jbHVkaW5nIHN1YmNsYXNzZXMuIFRoZSBhcmd1bWVudAoraW5zdGFuY2Ugb2YgOmM6ZGF0YTpgUHlEYXRlVGltZV9EYXRlVGltZWAsIGluY2x1ZGluZyBzdWJjbGFzc2VzLiBUaGUgYXJndW1lbnQKIG11c3Qgbm90IGJlICpOVUxMKiwgYW5kIHRoZSB0eXBlIGlzIG5vdCBjaGVja2VkOgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9IT1VSKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfREFURV9HRVRfSE9VUihQeURhdGVUaW1lX0RhdGVUaW1lICpvKQogCiAgICBSZXR1cm4gdGhlIGhvdXIsIGFzIGFuIGludCBmcm9tIDAgdGhyb3VnaCAyMy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9NSU5VVEUoUHlEYXRlVGltZV9EYXRlVGltZSAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9NSU5VVEUoUHlEYXRlVGltZV9EYXRlVGltZSAqbykKIAogICAgUmV0dXJuIHRoZSBtaW51dGUsIGFzIGFuIGludCBmcm9tIDAgdGhyb3VnaCA1OS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9TRUNPTkQoUHlEYXRlVGltZV9EYXRlVGltZSAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9TRUNPTkQoUHlEYXRlVGltZV9EYXRlVGltZSAqbykKIAogICAgUmV0dXJuIHRoZSBzZWNvbmQsIGFzIGFuIGludCBmcm9tIDAgdGhyb3VnaCA1OS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9EQVRFX0dFVF9NSUNST1NFQ09ORChQeURhdGVUaW1lX0RhdGVUaW1lICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX0RBVEVfR0VUX01JQ1JPU0VDT05EKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKm8pCiAKICAgIFJldHVybiB0aGUgbWljcm9zZWNvbmQsIGFzIGFuIGludCBmcm9tIDAgdGhyb3VnaCA5OTk5OTkuCiAKIAogTWFjcm9zIHRvIGV4dHJhY3QgZmllbGRzIGZyb20gdGltZSBvYmplY3RzLiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YKLTpjZGF0YTpgUHlEYXRlVGltZV9UaW1lYCwgaW5jbHVkaW5nIHN1YmNsYXNzZXMuIFRoZSBhcmd1bWVudCBtdXN0IG5vdCBiZSAqTlVMTCosCis6YzpkYXRhOmBQeURhdGVUaW1lX1RpbWVgLCBpbmNsdWRpbmcgc3ViY2xhc3Nlcy4gVGhlIGFyZ3VtZW50IG11c3Qgbm90IGJlICpOVUxMKiwKIGFuZCB0aGUgdHlwZSBpcyBub3QgY2hlY2tlZDoKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfVElNRV9HRVRfSE9VUihQeURhdGVUaW1lX1RpbWUgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfVElNRV9HRVRfSE9VUihQeURhdGVUaW1lX1RpbWUgKm8pCiAKICAgIFJldHVybiB0aGUgaG91ciwgYXMgYW4gaW50IGZyb20gMCB0aHJvdWdoIDIzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX1RJTUVfR0VUX01JTlVURShQeURhdGVUaW1lX1RpbWUgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfVElNRV9HRVRfTUlOVVRFKFB5RGF0ZVRpbWVfVGltZSAqbykKIAogICAgUmV0dXJuIHRoZSBtaW51dGUsIGFzIGFuIGludCBmcm9tIDAgdGhyb3VnaCA1OS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEYXRlVGltZV9USU1FX0dFVF9TRUNPTkQoUHlEYXRlVGltZV9UaW1lICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX1RJTUVfR0VUX1NFQ09ORChQeURhdGVUaW1lX1RpbWUgKm8pCiAKICAgIFJldHVybiB0aGUgc2Vjb25kLCBhcyBhbiBpbnQgZnJvbSAwIHRocm91Z2ggNTkuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGF0ZVRpbWVfVElNRV9HRVRfTUlDUk9TRUNPTkQoUHlEYXRlVGltZV9UaW1lICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURhdGVUaW1lX1RJTUVfR0VUX01JQ1JPU0VDT05EKFB5RGF0ZVRpbWVfVGltZSAqbykKIAogICAgUmV0dXJuIHRoZSBtaWNyb3NlY29uZCwgYXMgYW4gaW50IGZyb20gMCB0aHJvdWdoIDk5OTk5OS4KIAogCiBNYWNyb3MgZm9yIHRoZSBjb252ZW5pZW5jZSBvZiBtb2R1bGVzIGltcGxlbWVudGluZyB0aGUgREIgQVBJOgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEYXRlVGltZV9Gcm9tVGltZXN0YW1wKFB5T2JqZWN0ICphcmdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURhdGVUaW1lX0Zyb21UaW1lc3RhbXAoUHlPYmplY3QgKmFyZ3MpCiAKICAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IGBgZGF0ZXRpbWUuZGF0ZXRpbWVgYCBvYmplY3QgZ2l2ZW4gYW4gYXJndW1lbnQgdHVwbGUKICAgIHN1aXRhYmxlIGZvciBwYXNzaW5nIHRvIGBgZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCgpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGF0ZV9Gcm9tVGltZXN0YW1wKFB5T2JqZWN0ICphcmdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURhdGVfRnJvbVRpbWVzdGFtcChQeU9iamVjdCAqYXJncykKIAogICAgQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgYGBkYXRldGltZS5kYXRlYGAgb2JqZWN0IGdpdmVuIGFuIGFyZ3VtZW50IHR1cGxlCiAgICBzdWl0YWJsZSBmb3IgcGFzc2luZyB0byBgYGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpYGAuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZGVzY3JpcHRvci5yc3QgYi9Eb2MvYy1hcGkvZGVzY3JpcHRvci5yc3QKaW5kZXggNWRiMjU3MC4uYzhmNmZhNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2Rlc2NyaXB0b3IucnN0CisrKyBiL0RvYy9jLWFwaS9kZXNjcmlwdG9yLnJzdApAQCAtMTAsMzEgKzEwLDMxIEBACiAKIC4uIFhYWCBkb2N1bWVudCB0aGVzZSEKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeVByb3BlcnR5X1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5UHJvcGVydHlfVHlwZQogCiAgICBUaGUgdHlwZSBvYmplY3QgZm9yIHRoZSBidWlsdC1pbiBkZXNjcmlwdG9yIHR5cGVzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld0dldFNldChQeVR5cGVPYmplY3QgKnR5cGUsIHN0cnVjdCBQeUdldFNldERlZiAqZ2V0c2V0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld0dldFNldChQeVR5cGVPYmplY3QgKnR5cGUsIHN0cnVjdCBQeUdldFNldERlZiAqZ2V0c2V0KQogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld01lbWJlcihQeVR5cGVPYmplY3QgKnR5cGUsIHN0cnVjdCBQeU1lbWJlckRlZiAqbWV0aCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEZXNjcl9OZXdNZW1iZXIoUHlUeXBlT2JqZWN0ICp0eXBlLCBzdHJ1Y3QgUHlNZW1iZXJEZWYgKm1ldGgpCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGVzY3JfTmV3TWV0aG9kKFB5VHlwZU9iamVjdCAqdHlwZSwgc3RydWN0IFB5TWV0aG9kRGVmICptZXRoKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld01ldGhvZChQeVR5cGVPYmplY3QgKnR5cGUsIHN0cnVjdCBQeU1ldGhvZERlZiAqbWV0aCkKIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEZXNjcl9OZXdXcmFwcGVyKFB5VHlwZU9iamVjdCAqdHlwZSwgc3RydWN0IHdyYXBwZXJiYXNlICp3cmFwcGVyLCB2b2lkICp3cmFwcGVkKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld1dyYXBwZXIoUHlUeXBlT2JqZWN0ICp0eXBlLCBzdHJ1Y3Qgd3JhcHBlcmJhc2UgKndyYXBwZXIsIHZvaWQgKndyYXBwZWQpCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU1ldGhvZERlZiAqbWV0aG9kKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURlc2NyX05ld0NsYXNzTWV0aG9kKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlNZXRob2REZWYgKm1ldGhvZCkKIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEZXNjcl9Jc0RhdGEoUHlPYmplY3QgKmRlc2NyKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURlc2NyX0lzRGF0YShQeU9iamVjdCAqZGVzY3IpCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBkZXNjcmlwdG9yIG9iamVjdHMgKmRlc2NyKiBkZXNjcmliZXMgYSBkYXRhIGF0dHJpYnV0ZSwgb3IKICAgIGZhbHNlIGlmIGl0IGRlc2NyaWJlcyBhIG1ldGhvZC4gICpkZXNjciogbXVzdCBiZSBhIGRlc2NyaXB0b3Igb2JqZWN0OyB0aGVyZSBpcwogICAgbm8gZXJyb3IgY2hlY2tpbmcuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5V3JhcHBlcl9OZXcoUHlPYmplY3QgKiwgUHlPYmplY3QgKikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlXcmFwcGVyX05ldyhQeU9iamVjdCAqLCBQeU9iamVjdCAqKQpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2RpY3QucnN0IGIvRG9jL2MtYXBpL2RpY3QucnN0CmluZGV4IDVkMzU1ZDEuLjZkZjg0ZTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9kaWN0LnJzdAorKysgYi9Eb2MvYy1hcGkvZGljdC5yc3QKQEAgLTgsMTI1ICs4LDEyNSBAQAogLi4gaW5kZXg6OiBvYmplY3Q6IGRpY3Rpb25hcnkKIAogCi0uLiBjdHlwZTo6IFB5RGljdE9iamVjdAorLi4gYzp0eXBlOjogUHlEaWN0T2JqZWN0CiAKLSAgIFRoaXMgc3VidHlwZSBvZiA6Y3R5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIGRpY3Rpb25hcnkgb2JqZWN0LgorICAgVGhpcyBzdWJ0eXBlIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIGRpY3Rpb25hcnkgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlEaWN0X1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5RGljdF9UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBkaWN0aW9uYXJ5CisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGRpY3Rpb25hcnkKICAgIHR5cGUuICBUaGlzIGlzIHRoZSBzYW1lIG9iamVjdCBhcyA6Y2xhc3M6YGRpY3RgIGluIHRoZSBQeXRob24gbGF5ZXIuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9DaGVjayhQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X0NoZWNrKFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqcCogaXMgYSBkaWN0IG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBhIHN1YnR5cGUgb2YgdGhlIGRpY3QKICAgIHR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgZGljdCBvYmplY3QsIGJ1dCBub3QgYW4gaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlIG9mCiAgICB0aGUgZGljdCB0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfTmV3KCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X05ldygpCiAKICAgIFJldHVybiBhIG5ldyBlbXB0eSBkaWN0aW9uYXJ5LCBvciAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0UHJveHlfTmV3KFB5T2JqZWN0ICpkaWN0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RQcm94eV9OZXcoUHlPYmplY3QgKmRpY3QpCiAKICAgIFJldHVybiBhIHByb3h5IG9iamVjdCBmb3IgYSBtYXBwaW5nIHdoaWNoIGVuZm9yY2VzIHJlYWQtb25seSBiZWhhdmlvci4KICAgIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCB0byBjcmVhdGUgYSBwcm94eSB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiB0aGUKICAgIGRpY3Rpb25hcnkgZm9yIG5vbi1keW5hbWljIGNsYXNzIHR5cGVzLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlEaWN0X0NsZWFyKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlEaWN0X0NsZWFyKFB5T2JqZWN0ICpwKQogCiAgICBFbXB0eSBhbiBleGlzdGluZyBkaWN0aW9uYXJ5IG9mIGFsbCBrZXktdmFsdWUgcGFpcnMuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9Db250YWlucyhQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X0NvbnRhaW5zKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5KQogCiAgICBEZXRlcm1pbmUgaWYgZGljdGlvbmFyeSAqcCogY29udGFpbnMgKmtleSouICBJZiBhbiBpdGVtIGluICpwKiBpcyBtYXRjaGVzCiAgICAqa2V5KiwgcmV0dXJuIGBgMWBgLCBvdGhlcndpc2UgcmV0dXJuIGBgMGBgLiAgT24gZXJyb3IsIHJldHVybiBgYC0xYGAuCiAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBga2V5IGluIHBgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X0NvcHkoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9Db3B5KFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gYSBuZXcgZGljdGlvbmFyeSB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyAqcCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9TZXRJdGVtKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqdmFsKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKnZhbCkKIAogICAgSW5zZXJ0ICp2YWx1ZSogaW50byB0aGUgZGljdGlvbmFyeSAqcCogd2l0aCBhIGtleSBvZiAqa2V5Ki4gICprZXkqIG11c3QgYmUKICAgIDp0ZXJtOmBoYXNoYWJsZWA7IGlmIGl0IGlzbid0LCA6ZXhjOmBUeXBlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLiBSZXR1cm4KICAgIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWwpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWwpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeVVuaWNvZGVfRnJvbVN0cmluZygpCiAKICAgIEluc2VydCAqdmFsdWUqIGludG8gdGhlIGRpY3Rpb25hcnkgKnAqIHVzaW5nICprZXkqIGFzIGEga2V5LiAqa2V5KiBzaG91bGQKLSAgIGJlIGEgOmN0eXBlOmBjaGFyXCpgLiAgVGhlIGtleSBvYmplY3QgaXMgY3JlYXRlZCB1c2luZworICAgYmUgYSA6Yzp0eXBlOmBjaGFyXCpgLiAgVGhlIGtleSBvYmplY3QgaXMgY3JlYXRlZCB1c2luZwogICAgYGBQeVVuaWNvZGVfRnJvbVN0cmluZyhrZXkpYGAuICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgb24KICAgIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9EZWxJdGVtKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSkKIAogICAgUmVtb3ZlIHRoZSBlbnRyeSBpbiBkaWN0aW9uYXJ5ICpwKiB3aXRoIGtleSAqa2V5Ki4gKmtleSogbXVzdCBiZSBoYXNoYWJsZTsKICAgIGlmIGl0IGlzbid0LCA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzIG9yIGBgLTFgYAogICAgb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnAsIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnAsIGNoYXIgKmtleSkKIAogICAgUmVtb3ZlIHRoZSBlbnRyeSBpbiBkaWN0aW9uYXJ5ICpwKiB3aGljaCBoYXMgYSBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBzdHJpbmcKICAgICprZXkqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9HZXRJdGVtKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfR2V0SXRlbShQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSkKIAogICAgUmV0dXJuIHRoZSBvYmplY3QgZnJvbSBkaWN0aW9uYXJ5ICpwKiB3aGljaCBoYXMgYSBrZXkgKmtleSouICBSZXR1cm4gKk5VTEwqCiAgICBpZiB0aGUga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCBidXQgKndpdGhvdXQqIHNldHRpbmcgYW4gZXhjZXB0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihQeU9iamVjdCAqcCwgUHlPYmplY3QgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICprZXkpCiAKLSAgIFZhcmlhbnQgb2YgOmNmdW5jOmBQeURpY3RfR2V0SXRlbWAgdGhhdCBkb2VzIG5vdCBzdXBwcmVzcworICAgVmFyaWFudCBvZiA6YzpmdW5jOmBQeURpY3RfR2V0SXRlbWAgdGhhdCBkb2VzIG5vdCBzdXBwcmVzcwogICAgZXhjZXB0aW9ucy4gUmV0dXJuICpOVUxMKiAqKndpdGgqKiBhbiBleGNlcHRpb24gc2V0IGlmIGFuIGV4Y2VwdGlvbgogICAgb2NjdXJyZWQuICBSZXR1cm4gKk5VTEwqICoqd2l0aG91dCoqIGFuIGV4Y2VwdGlvbiBzZXQgaWYgdGhlIGtleQogICAgd2Fzbid0IHByZXNlbnQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpwLCBjb25zdCBjaGFyICprZXkpCiAKLSAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgOmNmdW5jOmBQeURpY3RfR2V0SXRlbWAsIGJ1dCAqa2V5KiBpcyBzcGVjaWZpZWQgYXMgYQotICAgOmN0eXBlOmBjaGFyXCpgLCByYXRoZXIgdGhhbiBhIDpjdHlwZTpgUHlPYmplY3RcKmAuCisgICBUaGlzIGlzIHRoZSBzYW1lIGFzIDpjOmZ1bmM6YFB5RGljdF9HZXRJdGVtYCwgYnV0ICprZXkqIGlzIHNwZWNpZmllZCBhcyBhCisgICA6Yzp0eXBlOmBjaGFyXCpgLCByYXRoZXIgdGhhbiBhIDpjOnR5cGU6YFB5T2JqZWN0XCpgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeURpY3RfSXRlbXMoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9JdGVtcyhQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIGEgOmN0eXBlOmBQeUxpc3RPYmplY3RgIGNvbnRhaW5pbmcgYWxsIHRoZSBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LgorICAgUmV0dXJuIGEgOmM6dHlwZTpgUHlMaXN0T2JqZWN0YCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X0tleXMoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9LZXlzKFB5T2JqZWN0ICpwKQogCi0gICBSZXR1cm4gYSA6Y3R5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGtleXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KKyAgIFJldHVybiBhIDpjOnR5cGU6YFB5TGlzdE9iamVjdGAgY29udGFpbmluZyBhbGwgdGhlIGtleXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X1ZhbHVlcyhQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X1ZhbHVlcyhQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIGEgOmN0eXBlOmBQeUxpc3RPYmplY3RgIGNvbnRhaW5pbmcgYWxsIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGljdGlvbmFyeQorICAgUmV0dXJuIGEgOmM6dHlwZTpgUHlMaXN0T2JqZWN0YCBjb250YWluaW5nIGFsbCB0aGUgdmFsdWVzIGZyb20gdGhlIGRpY3Rpb25hcnkKICAgICpwKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5RGljdF9TaXplKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlEaWN0X1NpemUoUHlPYmplY3QgKnApCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogbGVuCiAKQEAgLTEzNCwxNCArMTM0LDE0IEBACiAgICBgYGxlbihwKWBgIG9uIGEgZGljdGlvbmFyeS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEaWN0X05leHQoUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgKnBwb3MsIFB5T2JqZWN0ICoqcGtleSwgUHlPYmplY3QgKipwdmFsdWUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9OZXh0KFB5T2JqZWN0ICpwLCBQeV9zc2l6ZV90ICpwcG9zLCBQeU9iamVjdCAqKnBrZXksIFB5T2JqZWN0ICoqcHZhbHVlKQogCiAgICBJdGVyYXRlIG92ZXIgYWxsIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgZGljdGlvbmFyeSAqcCouICBUaGUKLSAgIDpjdHlwZTpgUHlfc3NpemVfdGAgcmVmZXJyZWQgdG8gYnkgKnBwb3MqIG11c3QgYmUgaW5pdGlhbGl6ZWQgdG8gYGAwYGAKKyAgIDpjOnR5cGU6YFB5X3NzaXplX3RgIHJlZmVycmVkIHRvIGJ5ICpwcG9zKiBtdXN0IGJlIGluaXRpYWxpemVkIHRvIGBgMGBgCiAgICBwcmlvciB0byB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIHRvIHN0YXJ0IHRoZSBpdGVyYXRpb247IHRoZQogICAgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGZvciBlYWNoIHBhaXIgaW4gdGhlIGRpY3Rpb25hcnksIGFuZCBmYWxzZSBvbmNlIGFsbAogICAgcGFpcnMgaGF2ZSBiZWVuIHJlcG9ydGVkLiAgVGhlIHBhcmFtZXRlcnMgKnBrZXkqIGFuZCAqcHZhbHVlKiBzaG91bGQgZWl0aGVyCi0gICBwb2ludCB0byA6Y3R5cGU6YFB5T2JqZWN0XCpgIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggZWFjaCBrZXkKKyAgIHBvaW50IHRvIDpjOnR5cGU6YFB5T2JqZWN0XCpgIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUgZmlsbGVkIGluIHdpdGggZWFjaCBrZXkKICAgIGFuZCB2YWx1ZSwgcmVzcGVjdGl2ZWx5LCBvciBtYXkgYmUgKk5VTEwqLiAgQW55IHJlZmVyZW5jZXMgcmV0dXJuZWQgdGhyb3VnaAogICAgdGhlbSBhcmUgYm9ycm93ZWQuICAqcHBvcyogc2hvdWxkIG5vdCBiZSBhbHRlcmVkIGR1cmluZyBpdGVyYXRpb24uIEl0cwogICAgdmFsdWUgcmVwcmVzZW50cyBvZmZzZXRzIHdpdGhpbiB0aGUgaW50ZXJuYWwgZGljdGlvbmFyeSBzdHJ1Y3R1cmUsIGFuZApAQCAtMTgwLDIzICsxODAsMjMgQEAKICAgICAgIH0KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEaWN0X01lcmdlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG92ZXJyaWRlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfTWVyZ2UoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ZlcnJpZGUpCiAKICAgIEl0ZXJhdGUgb3ZlciBtYXBwaW5nIG9iamVjdCAqYiogYWRkaW5nIGtleS12YWx1ZSBwYWlycyB0byBkaWN0aW9uYXJ5ICphKi4KLSAgICpiKiBtYXkgYmUgYSBkaWN0aW9uYXJ5LCBvciBhbnkgb2JqZWN0IHN1cHBvcnRpbmcgOmZ1bmM6YFB5TWFwcGluZ19LZXlzYAotICAgYW5kIDpmdW5jOmBQeU9iamVjdF9HZXRJdGVtYC4gSWYgKm92ZXJyaWRlKiBpcyB0cnVlLCBleGlzdGluZyBwYWlycyBpbiAqYSoKKyAgICpiKiBtYXkgYmUgYSBkaWN0aW9uYXJ5LCBvciBhbnkgb2JqZWN0IHN1cHBvcnRpbmcgOmM6ZnVuYzpgUHlNYXBwaW5nX0tleXNgCisgICBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfR2V0SXRlbWAuIElmICpvdmVycmlkZSogaXMgdHJ1ZSwgZXhpc3RpbmcgcGFpcnMgaW4gKmEqCiAgICB3aWxsIGJlIHJlcGxhY2VkIGlmIGEgbWF0Y2hpbmcga2V5IGlzIGZvdW5kIGluICpiKiwgb3RoZXJ3aXNlIHBhaXJzIHdpbGwKICAgIG9ubHkgYmUgYWRkZWQgaWYgdGhlcmUgaXMgbm90IGEgbWF0Y2hpbmcga2V5IGluICphKi4gUmV0dXJuIGBgMGBgIG9uCiAgICBzdWNjZXNzIG9yIGBgLTFgYCBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlEaWN0X1VwZGF0ZShQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RGljdF9VcGRhdGUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiKQogCiAgICBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgUHlEaWN0X01lcmdlKGEsIGIsIDEpYGAgaW4gQywgb3IgYGBhLnVwZGF0ZShiKWBgIGluCiAgICBQeXRob24uICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RGljdF9NZXJnZUZyb21TZXEyKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqc2VxMiwgaW50IG92ZXJyaWRlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfTWVyZ2VGcm9tU2VxMihQeU9iamVjdCAqYSwgUHlPYmplY3QgKnNlcTIsIGludCBvdmVycmlkZSkKIAogICAgVXBkYXRlIG9yIG1lcmdlIGludG8gZGljdGlvbmFyeSAqYSosIGZyb20gdGhlIGtleS12YWx1ZSBwYWlycyBpbiAqc2VxMiouCiAgICAqc2VxMiogbXVzdCBiZSBhbiBpdGVyYWJsZSBvYmplY3QgcHJvZHVjaW5nIGl0ZXJhYmxlIG9iamVjdHMgb2YgbGVuZ3RoIDIsCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggZjQ2NWM1OC4uNGM5NDZjMSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtOSwxMiArOSwxMiBAQAogCiBUaGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIgd2lsbCBsZXQgeW91IGhhbmRsZSBhbmQgcmFpc2UgUHl0aG9uCiBleGNlcHRpb25zLiAgSXQgaXMgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgc29tZSBvZiB0aGUgYmFzaWNzIG9mIFB5dGhvbgotZXhjZXB0aW9uIGhhbmRsaW5nLiAgSXQgd29ya3Mgc29tZXdoYXQgbGlrZSB0aGUgVW5peCA6Y2RhdGE6YGVycm5vYCB2YXJpYWJsZToKK2V4Y2VwdGlvbiBoYW5kbGluZy4gIEl0IHdvcmtzIHNvbWV3aGF0IGxpa2UgdGhlIFVuaXggOmM6ZGF0YTpgZXJybm9gIHZhcmlhYmxlOgogdGhlcmUgaXMgYSBnbG9iYWwgaW5kaWNhdG9yIChwZXIgdGhyZWFkKSBvZiB0aGUgbGFzdCBlcnJvciB0aGF0IG9jY3VycmVkLiAgTW9zdAogZnVuY3Rpb25zIGRvbid0IGNsZWFyIHRoaXMgb24gc3VjY2VzcywgYnV0IHdpbGwgc2V0IGl0IHRvIGluZGljYXRlIHRoZSBjYXVzZSBvZgogdGhlIGVycm9yIG9uIGZhaWx1cmUuICBNb3N0IGZ1bmN0aW9ucyBhbHNvIHJldHVybiBhbiBlcnJvciBpbmRpY2F0b3IsIHVzdWFsbHkKICpOVUxMKiBpZiB0aGV5IGFyZSBzdXBwb3NlZCB0byByZXR1cm4gYSBwb2ludGVyLCBvciBgYC0xYGAgaWYgdGhleSByZXR1cm4gYW4KLWludGVnZXIgKGV4Y2VwdGlvbjogdGhlIDpjZnVuYzpgUHlBcmdfXCpgIGZ1bmN0aW9ucyByZXR1cm4gYGAxYGAgZm9yIHN1Y2Nlc3MgYW5kCitpbnRlZ2VyIChleGNlcHRpb246IHRoZSA6YzpmdW5jOmBQeUFyZ19cKmAgZnVuY3Rpb25zIHJldHVybiBgYDFgYCBmb3Igc3VjY2VzcyBhbmQKIGBgMGBgIGZvciBmYWlsdXJlKS4KIAogV2hlbiBhIGZ1bmN0aW9uIG11c3QgZmFpbCBiZWNhdXNlIHNvbWUgZnVuY3Rpb24gaXQgY2FsbGVkIGZhaWxlZCwgaXQgZ2VuZXJhbGx5CkBAIC0zNSw3ICszNSw3IEBACiAgICBFaXRoZXIgYWxwaGFiZXRpY2FsIG9yIHNvbWUga2luZCBvZiBzdHJ1Y3R1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUVycl9QcmludEV4KGludCBzZXRfc3lzX2xhc3RfdmFycykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1ByaW50RXgoaW50IHNldF9zeXNfbGFzdF92YXJzKQogCiAgICBQcmludCBhIHN0YW5kYXJkIHRyYWNlYmFjayB0byBgYHN5cy5zdGRlcnJgYCBhbmQgY2xlYXIgdGhlIGVycm9yIGluZGljYXRvci4KICAgIENhbGwgdGhpcyBmdW5jdGlvbiBvbmx5IHdoZW4gdGhlIGVycm9yIGluZGljYXRvciBpcyBzZXQuICAoT3RoZXJ3aXNlIGl0IHdpbGwKQEAgLTQ2LDM1ICs0NiwzNSBAQAogICAgdHlwZSwgdmFsdWUgYW5kIHRyYWNlYmFjayBvZiB0aGUgcHJpbnRlZCBleGNlcHRpb24sIHJlc3BlY3RpdmVseS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX1ByaW50KCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1ByaW50KCkKIAogICAgQWxpYXMgZm9yIGBgUHlFcnJfUHJpbnRFeCgxKWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9PY2N1cnJlZCgpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX09jY3VycmVkKCkKIAogICAgVGVzdCB3aGV0aGVyIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMgc2V0LiAgSWYgc2V0LCByZXR1cm4gdGhlIGV4Y2VwdGlvbiAqdHlwZSoKLSAgICh0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGxhc3QgY2FsbCB0byBvbmUgb2YgdGhlIDpjZnVuYzpgUHlFcnJfU2V0XCpgCi0gICBmdW5jdGlvbnMgb3IgdG8gOmNmdW5jOmBQeUVycl9SZXN0b3JlYCkuICBJZiBub3Qgc2V0LCByZXR1cm4gKk5VTEwqLiAgWW91IGRvIG5vdAotICAgb3duIGEgcmVmZXJlbmNlIHRvIHRoZSByZXR1cm4gdmFsdWUsIHNvIHlvdSBkbyBub3QgbmVlZCB0byA6Y2Z1bmM6YFB5X0RFQ1JFRmAKKyAgICh0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGxhc3QgY2FsbCB0byBvbmUgb2YgdGhlIDpjOmZ1bmM6YFB5RXJyX1NldFwqYAorICAgZnVuY3Rpb25zIG9yIHRvIDpjOmZ1bmM6YFB5RXJyX1Jlc3RvcmVgKS4gIElmIG5vdCBzZXQsIHJldHVybiAqTlVMTCouICBZb3UgZG8gbm90CisgICBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybiB2YWx1ZSwgc28geW91IGRvIG5vdCBuZWVkIHRvIDpjOmZ1bmM6YFB5X0RFQ1JFRmAKICAgIGl0LgogCiAgICAuLiBub3RlOjoKIAogICAgICAgRG8gbm90IGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB0byBhIHNwZWNpZmljIGV4Y2VwdGlvbjsgdXNlCi0gICAgICA6Y2Z1bmM6YFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXNgIGluc3RlYWQsIHNob3duIGJlbG93LiAgKFRoZSBjb21wYXJpc29uIGNvdWxkCisgICAgICA6YzpmdW5jOmBQeUVycl9FeGNlcHRpb25NYXRjaGVzYCBpbnN0ZWFkLCBzaG93biBiZWxvdy4gIChUaGUgY29tcGFyaXNvbiBjb3VsZAogICAgICAgZWFzaWx5IGZhaWwgc2luY2UgdGhlIGV4Y2VwdGlvbiBtYXkgYmUgYW4gaW5zdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzLCBpbiB0aGUKICAgICAgIGNhc2Ugb2YgYSBjbGFzcyBleGNlcHRpb24sIG9yIGl0IG1heSB0aGUgYSBzdWJjbGFzcyBvZiB0aGUgZXhwZWN0ZWQgZXhjZXB0aW9uLikKIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeU9iamVjdCAqZXhjKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5T2JqZWN0ICpleGMpCiAKICAgIEVxdWl2YWxlbnQgdG8gYGBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlFcnJfT2NjdXJyZWQoKSwgZXhjKWBgLiAgVGhpcwogICAgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIGFjdHVhbGx5IHNldDsgYSBtZW1vcnkgYWNjZXNzCiAgICB2aW9sYXRpb24gd2lsbCBvY2N1ciBpZiBubyBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlPYmplY3QgKmdpdmVuLCBQeU9iamVjdCAqZXhjKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMoUHlPYmplY3QgKmdpdmVuLCBQeU9iamVjdCAqZXhjKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgKmdpdmVuKiBleGNlcHRpb24gbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGluICpleGMqLiAgSWYKICAgICpleGMqIGlzIGEgY2xhc3Mgb2JqZWN0LCB0aGlzIGFsc28gcmV0dXJucyB0cnVlIHdoZW4gKmdpdmVuKiBpcyBhbiBpbnN0YW5jZQpAQCAtODIsMjIgKzgyLDIyIEBACiAgICByZWN1cnNpdmVseSBpbiBzdWJ0dXBsZXMpIGFyZSBzZWFyY2hlZCBmb3IgYSBtYXRjaC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbihQeU9iamVjdCoqZXhjLCBQeU9iamVjdCoqdmFsLCBQeU9iamVjdCoqdGIpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oUHlPYmplY3QqKmV4YywgUHlPYmplY3QqKnZhbCwgUHlPYmplY3QqKnRiKQogCi0gICBVbmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgOmNmdW5jOmBQeUVycl9GZXRjaGAgYmVsb3cKKyAgIFVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcywgdGhlIHZhbHVlcyByZXR1cm5lZCBieSA6YzpmdW5jOmBQeUVycl9GZXRjaGAgYmVsb3cKICAgIGNhbiBiZSAidW5ub3JtYWxpemVkIiwgbWVhbmluZyB0aGF0IGBgKmV4Y2BgIGlzIGEgY2xhc3Mgb2JqZWN0IGJ1dCBgYCp2YWxgYCBpcwogICAgbm90IGFuIGluc3RhbmNlIG9mIHRoZSAgc2FtZSBjbGFzcy4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUKICAgIHRoZSBjbGFzcyBpbiB0aGF0IGNhc2UuICBJZiB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQsIG5vdGhpbmcgaGFwcGVucy4KICAgIFRoZSBkZWxheWVkIG5vcm1hbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX0NsZWFyKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX0NsZWFyKCkKIAogICAgQ2xlYXIgdGhlIGVycm9yIGluZGljYXRvci4gIElmIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMgbm90IHNldCwgdGhlcmUgaXMgbm8KICAgIGVmZmVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXJyX0ZldGNoKFB5T2JqZWN0ICoqcHR5cGUsIFB5T2JqZWN0ICoqcHZhbHVlLCBQeU9iamVjdCAqKnB0cmFjZWJhY2spCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9GZXRjaChQeU9iamVjdCAqKnB0eXBlLCBQeU9iamVjdCAqKnB2YWx1ZSwgUHlPYmplY3QgKipwdHJhY2ViYWNrKQogCiAgICBSZXRyaWV2ZSB0aGUgZXJyb3IgaW5kaWNhdG9yIGludG8gdGhyZWUgdmFyaWFibGVzIHdob3NlIGFkZHJlc3NlcyBhcmUgcGFzc2VkLgogICAgSWYgdGhlIGVycm9yIGluZGljYXRvciBpcyBub3Qgc2V0LCBzZXQgYWxsIHRocmVlIHZhcmlhYmxlcyB0byAqTlVMTCouICBJZiBpdCBpcwpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgICBieSBjb2RlIHRoYXQgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZXJyb3IgaW5kaWNhdG9yIHRlbXBvcmFyaWx5LgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFcnJfUmVzdG9yZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdHJhY2ViYWNrKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfUmVzdG9yZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdHJhY2ViYWNrKQogCiAgICBTZXQgIHRoZSBlcnJvciBpbmRpY2F0b3IgZnJvbSB0aGUgdGhyZWUgb2JqZWN0cy4gIElmIHRoZSBlcnJvciBpbmRpY2F0b3IgaXMKICAgIGFscmVhZHkgc2V0LCBpdCBpcyBjbGVhcmVkIGZpcnN0LiAgSWYgdGhlIG9iamVjdHMgYXJlICpOVUxMKiwgdGhlIGVycm9yCkBAIC0xMjUsMTA3ICsxMjUsMTI5IEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBub3JtYWxseSBvbmx5IHVzZWQgYnkgY29kZSB0aGF0IG5lZWRzIHRvIHNhdmUgYW5kIHJlc3RvcmUgdGhlCi0gICAgICBlcnJvciBpbmRpY2F0b3IgdGVtcG9yYXJpbHk7IHVzZSA6Y2Z1bmM6YFB5RXJyX0ZldGNoYCB0byBzYXZlIHRoZSBjdXJyZW50CisgICAgICBlcnJvciBpbmRpY2F0b3IgdGVtcG9yYXJpbHk7IHVzZSA6YzpmdW5jOmBQeUVycl9GZXRjaGAgdG8gc2F2ZSB0aGUgY3VycmVudAogICAgICAgZXhjZXB0aW9uIHN0YXRlLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0U3RyaW5nKFB5T2JqZWN0ICp0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0U3RyaW5nKFB5T2JqZWN0ICp0eXBlLCBjb25zdCBjaGFyICptZXNzYWdlKQogCiAgICBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiB3YXkgdG8gc2V0IHRoZSBlcnJvciBpbmRpY2F0b3IuICBUaGUgZmlyc3QgYXJndW1lbnQKICAgIHNwZWNpZmllcyB0aGUgZXhjZXB0aW9uIHR5cGU7IGl0IGlzIG5vcm1hbGx5IG9uZSBvZiB0aGUgc3RhbmRhcmQgZXhjZXB0aW9ucywKLSAgIGUuZy4gOmNkYXRhOmBQeUV4Y19SdW50aW1lRXJyb3JgLiAgWW91IG5lZWQgbm90IGluY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50LgotICAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBlcnJvciBtZXNzYWdlOyBpdCBpcyBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgb2JqZWN0LgorICAgZS5nLiA6YzpkYXRhOmBQeUV4Y19SdW50aW1lRXJyb3JgLiAgWW91IG5lZWQgbm90IGluY3JlbWVudCBpdHMgcmVmZXJlbmNlIGNvdW50LgorICAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhbiBlcnJvciBtZXNzYWdlOyBpdCBpcyBkZWNvZGVkIGZyb20gYGAndXRmLThgYCcuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUVycl9TZXRPYmplY3QoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp2YWx1ZSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1NldE9iamVjdChQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlKQogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gOmNmdW5jOmBQeUVycl9TZXRTdHJpbmdgIGJ1dCBsZXRzIHlvdSBzcGVjaWZ5IGFuCisgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0U3RyaW5nYCBidXQgbGV0cyB5b3Ugc3BlY2lmeSBhbgogICAgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3QgZm9yIHRoZSAidmFsdWUiIG9mIHRoZSBleGNlcHRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX0Zvcm1hdChQeU9iamVjdCAqZXhjZXB0aW9uLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfRm9ybWF0KFB5T2JqZWN0ICpleGNlcHRpb24sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGVycm9yIGluZGljYXRvciBhbmQgcmV0dXJucyAqTlVMTCouICAqZXhjZXB0aW9uKgogICAgc2hvdWxkIGJlIGEgUHl0aG9uIGV4Y2VwdGlvbiBjbGFzcy4gIFRoZSAqZm9ybWF0KiBhbmQgc3Vic2VxdWVudAogICAgcGFyYW1ldGVycyBoZWxwIGZvcm1hdCB0aGUgZXJyb3IgbWVzc2FnZTsgdGhleSBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYW5kCi0gICB2YWx1ZXMgYXMgaW4gOmNmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAuCisgICB2YWx1ZXMgYXMgaW4gOmM6ZnVuYzpgUHlVbmljb2RlX0Zyb21Gb3JtYXRgLiAqZm9ybWF0KiBpcyBhbiBBU0NJSS1lbmNvZGVkCisgICBzdHJpbmcuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUVycl9TZXROb25lKFB5T2JqZWN0ICp0eXBlKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0Tm9uZShQeU9iamVjdCAqdHlwZSkKIAogICAgVGhpcyBpcyBhIHNob3J0aGFuZCBmb3IgYGBQeUVycl9TZXRPYmplY3QodHlwZSwgUHlfTm9uZSlgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlFcnJfQmFkQXJndW1lbnQoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9CYWRBcmd1bWVudCgpCiAKICAgIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yIGBgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgbWVzc2FnZSlgYCwgd2hlcmUKICAgICptZXNzYWdlKiBpbmRpY2F0ZXMgdGhhdCBhIGJ1aWx0LWluIG9wZXJhdGlvbiB3YXMgaW52b2tlZCB3aXRoIGFuIGlsbGVnYWwKICAgIGFyZ3VtZW50LiAgSXQgaXMgbW9zdGx5IGZvciBpbnRlcm5hbCB1c2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX05vTWVtb3J5KCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTm9NZW1vcnkoKQogCiAgICBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciBgYFB5RXJyX1NldE5vbmUoUHlFeGNfTWVtb3J5RXJyb3IpYGA7IGl0IHJldHVybnMgKk5VTEwqCiAgICBzbyBhbiBvYmplY3QgYWxsb2NhdGlvbiBmdW5jdGlvbiBjYW4gd3JpdGUgYGByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTtgYCB3aGVuIGl0CiAgICBydW5zIG91dCBvZiBtZW1vcnkuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqdHlwZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICp0eXBlKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogc3RyZXJyb3IoKQogCiAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gYSBDIGxpYnJhcnkgZnVuY3Rpb24KLSAgIGhhcyByZXR1cm5lZCBhbiBlcnJvciBhbmQgc2V0IHRoZSBDIHZhcmlhYmxlIDpjZGF0YTpgZXJybm9gLiAgSXQgY29uc3RydWN0cyBhCi0gICB0dXBsZSBvYmplY3Qgd2hvc2UgZmlyc3QgaXRlbSBpcyB0aGUgaW50ZWdlciA6Y2RhdGE6YGVycm5vYCB2YWx1ZSBhbmQgd2hvc2UKLSAgIHNlY29uZCBpdGVtIGlzIHRoZSBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UgKGdvdHRlbiBmcm9tIDpjZnVuYzpgc3RyZXJyb3JgKSwKKyAgIGhhcyByZXR1cm5lZCBhbiBlcnJvciBhbmQgc2V0IHRoZSBDIHZhcmlhYmxlIDpjOmRhdGE6YGVycm5vYC4gIEl0IGNvbnN0cnVjdHMgYQorICAgdHVwbGUgb2JqZWN0IHdob3NlIGZpcnN0IGl0ZW0gaXMgdGhlIGludGVnZXIgOmM6ZGF0YTpgZXJybm9gIHZhbHVlIGFuZCB3aG9zZQorICAgc2Vjb25kIGl0ZW0gaXMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZSAoZ290dGVuIGZyb20gOmM6ZnVuYzpgc3RyZXJyb3JgKSwKICAgIGFuZCB0aGVuIGNhbGxzIGBgUHlFcnJfU2V0T2JqZWN0KHR5cGUsIG9iamVjdClgYC4gIE9uIFVuaXgsIHdoZW4gdGhlCi0gICA6Y2RhdGE6YGVycm5vYCB2YWx1ZSBpcyA6Y29uc3Q6YEVJTlRSYCwgaW5kaWNhdGluZyBhbiBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCwKLSAgIHRoaXMgY2FsbHMgOmNmdW5jOmBQeUVycl9DaGVja1NpZ25hbHNgLCBhbmQgaWYgdGhhdCBzZXQgdGhlIGVycm9yIGluZGljYXRvciwKKyAgIDpjOmRhdGE6YGVycm5vYCB2YWx1ZSBpcyA6Y29uc3Q6YEVJTlRSYCwgaW5kaWNhdGluZyBhbiBpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCwKKyAgIHRoaXMgY2FsbHMgOmM6ZnVuYzpgUHlFcnJfQ2hlY2tTaWduYWxzYCwgYW5kIGlmIHRoYXQgc2V0IHRoZSBlcnJvciBpbmRpY2F0b3IsCiAgICBsZWF2ZXMgaXQgc2V0IHRvIHRoYXQuICBUaGUgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgKk5VTEwqLCBzbyBhIHdyYXBwZXIKICAgIGZ1bmN0aW9uIGFyb3VuZCBhIHN5c3RlbSBjYWxsIGNhbiB3cml0ZSBgYHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8odHlwZSk7YGAKICAgIHdoZW4gdGhlIHN5c3RlbSBjYWxsIHJldHVybnMgYW4gZXJyb3IuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKLSAgIFNpbWlsYXIgdG8gOmNmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9gLCB3aXRoIHRoZSBhZGRpdGlvbmFsIGJlaGF2aW9yIHRoYXQgaWYKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vYCwgd2l0aCB0aGUgYWRkaXRpb25hbCBiZWhhdmlvciB0aGF0IGlmCiAgICAqZmlsZW5hbWUqIGlzIG5vdCAqTlVMTCosIGl0IGlzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgKnR5cGUqIGFzIGEgdGhpcmQKICAgIHBhcmFtZXRlci4gIEluIHRoZSBjYXNlIG9mIGV4Y2VwdGlvbnMgc3VjaCBhcyA6ZXhjOmBJT0Vycm9yYCBhbmQgOmV4YzpgT1NFcnJvcmAsCiAgICB0aGlzIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIGluc3RhbmNlLgorICAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcKKyAgICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tV2luZG93c0VycihpbnQgaWVycikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoaW50IGllcnIpCiAKICAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byByYWlzZSA6ZXhjOmBXaW5kb3dzRXJyb3JgLiBJZiBjYWxsZWQgd2l0aAotICAgKmllcnIqIG9mIDpjZGF0YTpgMGAsIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGEgY2FsbCB0byA6Y2Z1bmM6YEdldExhc3RFcnJvcmAKLSAgIGlzIHVzZWQgaW5zdGVhZC4gIEl0IGNhbGxzIHRoZSBXaW4zMiBmdW5jdGlvbiA6Y2Z1bmM6YEZvcm1hdE1lc3NhZ2VgIHRvIHJldHJpZXZlCi0gICB0aGUgV2luZG93cyBkZXNjcmlwdGlvbiBvZiBlcnJvciBjb2RlIGdpdmVuIGJ5ICppZXJyKiBvciA6Y2Z1bmM6YEdldExhc3RFcnJvcmAsCisgICAqaWVyciogb2YgOmM6ZGF0YTpgMGAsIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGEgY2FsbCB0byA6YzpmdW5jOmBHZXRMYXN0RXJyb3JgCisgICBpcyB1c2VkIGluc3RlYWQuICBJdCBjYWxscyB0aGUgV2luMzIgZnVuY3Rpb24gOmM6ZnVuYzpgRm9ybWF0TWVzc2FnZWAgdG8gcmV0cmlldmUKKyAgIHRoZSBXaW5kb3dzIGRlc2NyaXB0aW9uIG9mIGVycm9yIGNvZGUgZ2l2ZW4gYnkgKmllcnIqIG9yIDpjOmZ1bmM6YEdldExhc3RFcnJvcmAsCiAgICB0aGVuIGl0IGNvbnN0cnVjdHMgYSB0dXBsZSBvYmplY3Qgd2hvc2UgZmlyc3QgaXRlbSBpcyB0aGUgKmllcnIqIHZhbHVlIGFuZCB3aG9zZQogICAgc2Vjb25kIGl0ZW0gaXMgdGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZSAoZ290dGVuIGZyb20KLSAgIDpjZnVuYzpgRm9ybWF0TWVzc2FnZWApLCBhbmQgdGhlbiBjYWxscyBgYFB5RXJyX1NldE9iamVjdChQeUV4Y19XaW5kb3dzRXJyb3IsCisgICA6YzpmdW5jOmBGb3JtYXRNZXNzYWdlYCksIGFuZCB0aGVuIGNhbGxzIGBgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1dpbmRvd3NFcnJvciwKICAgIG9iamVjdClgYC4gVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyAqTlVMTCouIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeU9iamVjdCAqdHlwZSwgaW50IGllcnIpCiAKLSAgIFNpbWlsYXIgdG8gOmNmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycmAsIHdpdGggYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJgLCB3aXRoIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyCiAgICBzcGVjaWZ5aW5nIHRoZSBleGNlcHRpb24gdHlwZSB0byBiZSByYWlzZWQuIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoaW50IGllcnIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShpbnQgaWVyciwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKLSAgIFNpbWlsYXIgdG8gOmNmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycmAsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVoYXZpb3IgdGhhdAorICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycmAsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVoYXZpb3IgdGhhdAogICAgaWYgKmZpbGVuYW1lKiBpcyBub3QgKk5VTEwqLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mCi0gICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGFzIGEgdGhpcmQgcGFyYW1ldGVyLiBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisgICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGFzIGEgdGhpcmQgcGFyYW1ldGVyLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlCisgICBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgQXZhaWxhYmlsaXR5OgorICAgV2luZG93cy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBjaGFyICpmaWxlbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoUHlPYmplY3QgKnR5cGUsIGludCBpZXJyLCBjaGFyICpmaWxlbmFtZSkKIAotICAgU2ltaWxhciB0byA6Y2Z1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lYCwgd2l0aCBhbiBhZGRpdGlvbmFsCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lYCwgd2l0aCBhbiBhZGRpdGlvbmFsCiAgICBwYXJhbWV0ZXIgc3BlY2lmeWluZyB0aGUgZXhjZXB0aW9uIHR5cGUgdG8gYmUgcmFpc2VkLiBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUVycl9CYWRJbnRlcm5hbENhbGwoKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisKKyAgIFNldCBmaWxlLCBsaW5lLCBhbmQgb2Zmc2V0IGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBleGNlcHRpb24uICBJZiB0aGUKKyAgIGN1cnJlbnQgZXhjZXB0aW9uIGlzIG5vdCBhIDpleGM6YFN5bnRheEVycm9yYCwgdGhlbiBpdCBzZXRzIGFkZGl0aW9uYWwKKyAgIGF0dHJpYnV0ZXMsIHdoaWNoIG1ha2UgdGhlIGV4Y2VwdGlvbiBwcmludGluZyBzdWJzeXN0ZW0gdGhpbmsgdGhlIGV4Y2VwdGlvbgorICAgaXMgYSA6ZXhjOmBTeW50YXhFcnJvcmAuICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCisgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb24oY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCisKKyAgIExpa2UgOmM6ZnVuYzpgUHlFcnJfU3ludGF4TG9jYXRpb25FeGNgLCBidXQgdGhlIGNvbF9vZmZzZXQgcGFyYW1ldGVyIGlzCisgICBvbWl0dGVkLgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpCiAKICAgIFRoaXMgaXMgYSBzaG9ydGhhbmQgZm9yIGBgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCBtZXNzYWdlKWBgLAogICAgd2hlcmUgKm1lc3NhZ2UqIGluZGljYXRlcyB0aGF0IGFuIGludGVybmFsIG9wZXJhdGlvbiAoZS5nLiBhIFB5dGhvbi9DIEFQSQpAQCAtMjMzLDEzICsyNTUsMTMgQEAKICAgIHVzZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4KFB5T2JqZWN0ICpjYXRlZ29yeSwgY2hhciAqbWVzc2FnZSwgaW50IHN0YWNrbGV2ZWwpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeChQeU9iamVjdCAqY2F0ZWdvcnksIGNoYXIgKm1lc3NhZ2UsIGludCBzdGFja19sZXZlbCkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2UuICBUaGUgKmNhdGVnb3J5KiBhcmd1bWVudCBpcyBhIHdhcm5pbmcgY2F0ZWdvcnkgKHNlZQotICAgYmVsb3cpIG9yICpOVUxMKjsgdGhlICptZXNzYWdlKiBhcmd1bWVudCBpcyBhIG1lc3NhZ2Ugc3RyaW5nLiAgKnN0YWNrbGV2ZWwqIGlzIGEKKyAgIGJlbG93KSBvciAqTlVMTCo7IHRoZSAqbWVzc2FnZSogYXJndW1lbnQgaXMgYW4gVVRGLTggZW5jb2RlZCBzdHJpbmcuICAqc3RhY2tfbGV2ZWwqIGlzIGEKICAgIHBvc2l0aXZlIG51bWJlciBnaXZpbmcgYSBudW1iZXIgb2Ygc3RhY2sgZnJhbWVzOyB0aGUgd2FybmluZyB3aWxsIGJlIGlzc3VlZCBmcm9tCi0gICB0aGUgIGN1cnJlbnRseSBleGVjdXRpbmcgbGluZSBvZiBjb2RlIGluIHRoYXQgc3RhY2sgZnJhbWUuICBBICpzdGFja2xldmVsKiBvZiAxCi0gICBpcyB0aGUgZnVuY3Rpb24gY2FsbGluZyA6Y2Z1bmM6YFB5RXJyX1dhcm5FeGAsIDIgaXMgIHRoZSBmdW5jdGlvbiBhYm92ZSB0aGF0LAorICAgdGhlICBjdXJyZW50bHkgZXhlY3V0aW5nIGxpbmUgb2YgY29kZSBpbiB0aGF0IHN0YWNrIGZyYW1lLiAgQSAqc3RhY2tfbGV2ZWwqIG9mIDEKKyAgIGlzIHRoZSBmdW5jdGlvbiBjYWxsaW5nIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeGAsIDIgaXMgIHRoZSBmdW5jdGlvbiBhYm92ZSB0aGF0LAogICAgYW5kIHNvIGZvcnRoLgogCiAgICBUaGlzIGZ1bmN0aW9uIG5vcm1hbGx5IHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSB0byAqc3lzLnN0ZGVycio7IGhvd2V2ZXIsIGl0IGlzCkBAIC0yNTEsMzUgKzI3Myw0NSBAQAogICAgaXMgcmFpc2VkLiAgKEl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciBhIHdhcm5pbmcgbWVzc2FnZSBpcwogICAgYWN0dWFsbHkgcHJpbnRlZCwgbm9yIHdoYXQgdGhlIHJlYXNvbiBpcyBmb3IgdGhlIGV4Y2VwdGlvbjsgdGhpcyBpcwogICAgaW50ZW50aW9uYWwuKSAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCwgdGhlIGNhbGxlciBzaG91bGQgZG8gaXRzIG5vcm1hbAotICAgZXhjZXB0aW9uIGhhbmRsaW5nIChmb3IgZXhhbXBsZSwgOmNmdW5jOmBQeV9ERUNSRUZgIG93bmVkIHJlZmVyZW5jZXMgYW5kIHJldHVybgorICAgZXhjZXB0aW9uIGhhbmRsaW5nIChmb3IgZXhhbXBsZSwgOmM6ZnVuYzpgUHlfREVDUkVGYCBvd25lZCByZWZlcmVuY2VzIGFuZCByZXR1cm4KICAgIGFuIGVycm9yIHZhbHVlKS4KIAotICAgV2FybmluZyBjYXRlZ29yaWVzIG11c3QgYmUgc3ViY2xhc3NlcyBvZiA6Y2RhdGE6YFdhcm5pbmdgOyB0aGUgZGVmYXVsdCB3YXJuaW5nCi0gICBjYXRlZ29yeSBpcyA6Y2RhdGE6YFJ1bnRpbWVXYXJuaW5nYC4gIFRoZSBzdGFuZGFyZCBQeXRob24gd2FybmluZyBjYXRlZ29yaWVzIGFyZQorICAgV2FybmluZyBjYXRlZ29yaWVzIG11c3QgYmUgc3ViY2xhc3NlcyBvZiA6YzpkYXRhOmBXYXJuaW5nYDsgdGhlIGRlZmF1bHQgd2FybmluZworICAgY2F0ZWdvcnkgaXMgOmM6ZGF0YTpgUnVudGltZVdhcm5pbmdgLiAgVGhlIHN0YW5kYXJkIFB5dGhvbiB3YXJuaW5nIGNhdGVnb3JpZXMgYXJlCiAgICBhdmFpbGFibGUgYXMgZ2xvYmFsIHZhcmlhYmxlcyB3aG9zZSBuYW1lcyBhcmUgYGBQeUV4Y19gYCBmb2xsb3dlZCBieSB0aGUgUHl0aG9uCi0gICBleGNlcHRpb24gbmFtZS4gVGhlc2UgaGF2ZSB0aGUgdHlwZSA6Y3R5cGU6YFB5T2JqZWN0XCpgOyB0aGV5IGFyZSBhbGwgY2xhc3MKLSAgIG9iamVjdHMuIFRoZWlyIG5hbWVzIGFyZSA6Y2RhdGE6YFB5RXhjX1dhcm5pbmdgLCA6Y2RhdGE6YFB5RXhjX1VzZXJXYXJuaW5nYCwKLSAgIDpjZGF0YTpgUHlFeGNfVW5pY29kZVdhcm5pbmdgLCA6Y2RhdGE6YFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZ2AsCi0gICA6Y2RhdGE6YFB5RXhjX1N5bnRheFdhcm5pbmdgLCA6Y2RhdGE6YFB5RXhjX1J1bnRpbWVXYXJuaW5nYCwgYW5kCi0gICA6Y2RhdGE6YFB5RXhjX0Z1dHVyZVdhcm5pbmdgLiAgOmNkYXRhOmBQeUV4Y19XYXJuaW5nYCBpcyBhIHN1YmNsYXNzIG9mCi0gICA6Y2RhdGE6YFB5RXhjX0V4Y2VwdGlvbmA7IHRoZSBvdGhlciB3YXJuaW5nIGNhdGVnb3JpZXMgYXJlIHN1YmNsYXNzZXMgb2YKLSAgIDpjZGF0YTpgUHlFeGNfV2FybmluZ2AuCisgICBleGNlcHRpb24gbmFtZS4gVGhlc2UgaGF2ZSB0aGUgdHlwZSA6Yzp0eXBlOmBQeU9iamVjdFwqYDsgdGhleSBhcmUgYWxsIGNsYXNzCisgICBvYmplY3RzLiBUaGVpciBuYW1lcyBhcmUgOmM6ZGF0YTpgUHlFeGNfV2FybmluZ2AsIDpjOmRhdGE6YFB5RXhjX1VzZXJXYXJuaW5nYCwKKyAgIDpjOmRhdGE6YFB5RXhjX1VuaWNvZGVXYXJuaW5nYCwgOmM6ZGF0YTpgUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nYCwKKyAgIDpjOmRhdGE6YFB5RXhjX1N5bnRheFdhcm5pbmdgLCA6YzpkYXRhOmBQeUV4Y19SdW50aW1lV2FybmluZ2AsIGFuZAorICAgOmM6ZGF0YTpgUHlFeGNfRnV0dXJlV2FybmluZ2AuICA6YzpkYXRhOmBQeUV4Y19XYXJuaW5nYCBpcyBhIHN1YmNsYXNzIG9mCisgICA6YzpkYXRhOmBQeUV4Y19FeGNlcHRpb25gOyB0aGUgb3RoZXIgd2FybmluZyBjYXRlZ29yaWVzIGFyZSBzdWJjbGFzc2VzIG9mCisgICA6YzpkYXRhOmBQeUV4Y19XYXJuaW5nYC4KIAogICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IHdhcm5pbmcgY29udHJvbCwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUKICAgIDptb2Q6YHdhcm5pbmdzYCBtb2R1bGUgYW5kIHRoZSA6b3B0aW9uOmAtV2Agb3B0aW9uIGluIHRoZSBjb21tYW5kIGxpbmUKICAgIGRvY3VtZW50YXRpb24uICBUaGVyZSBpcyBubyBDIEFQSSBmb3Igd2FybmluZyBjb250cm9sLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdChQeU9iamVjdCAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKIAogICAgSXNzdWUgYSB3YXJuaW5nIG1lc3NhZ2Ugd2l0aCBleHBsaWNpdCBjb250cm9sIG92ZXIgYWxsIHdhcm5pbmcgYXR0cmlidXRlcy4gIFRoaXMKICAgIGlzIGEgc3RyYWlnaHRmb3J3YXJkIHdyYXBwZXIgYXJvdW5kIHRoZSBQeXRob24gZnVuY3Rpb24KICAgIDpmdW5jOmB3YXJuaW5ncy53YXJuX2V4cGxpY2l0YCwgc2VlIHRoZXJlIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgVGhlICptb2R1bGUqCiAgICBhbmQgKnJlZ2lzdHJ5KiBhcmd1bWVudHMgbWF5IGJlIHNldCB0byAqTlVMTCogdG8gZ2V0IHRoZSBkZWZhdWx0IGVmZmVjdAotICAgZGVzY3JpYmVkIHRoZXJlLgorICAgZGVzY3JpYmVkIHRoZXJlLiAqbWVzc2FnZSogYW5kICptb2R1bGUqIGFyZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MsCisgICAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZworICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RXJyX0NoZWNrU2lnbmFscygpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5Gb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LCBQeV9zc2l6ZV90IHN0YWNrX2xldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKworICAgRnVuY3Rpb24gc2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9XYXJuRXhgLCBidXQgdXNlCisgICA6YzpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAgdG8gZm9ybWF0IHRoZSB3YXJuaW5nIG1lc3NhZ2UuICAqZm9ybWF0KiBpcworICAgYW4gQVNDSUktZW5jb2RlZCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX0NoZWNrU2lnbmFscygpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIG1vZHVsZTogc2lnbmFsCkBAIC0yOTYsMjEgKzMyOCwyMSBAQAogICAgY2xlYXJlZCBpZiBpdCB3YXMgcHJldmlvdXNseSBzZXQuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUVycl9TZXRJbnRlcnJ1cHQoKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU2V0SW50ZXJydXB0KCkKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBTSUdJTlQKICAgICAgIHNpbmdsZTogS2V5Ym9hcmRJbnRlcnJ1cHQgKGJ1aWx0LWluIGV4Y2VwdGlvbikKIAogICAgVGhpcyBmdW5jdGlvbiBzaW11bGF0ZXMgdGhlIGVmZmVjdCBvZiBhIDpjb25zdDpgU0lHSU5UYCBzaWduYWwgYXJyaXZpbmcgLS0tIHRoZQotICAgbmV4dCB0aW1lIDpjZnVuYzpgUHlFcnJfQ2hlY2tTaWduYWxzYCBpcyBjYWxsZWQsICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgd2lsbAorICAgbmV4dCB0aW1lIDpjOmZ1bmM6YFB5RXJyX0NoZWNrU2lnbmFsc2AgaXMgY2FsbGVkLCAgOmV4YzpgS2V5Ym9hcmRJbnRlcnJ1cHRgIHdpbGwKICAgIGJlIHJhaXNlZC4gIEl0IG1heSBiZSBjYWxsZWQgd2l0aG91dCBob2xkaW5nIHRoZSBpbnRlcnByZXRlciBsb2NrLgogCiAgICAuLiAlIFhYWCBUaGlzIHdhcyBkZXNjcmliZWQgYXMgb2Jzb2xldGUsIGJ1dCBpcyB1c2VkIGluCiAgICAuLiAlIF90aHJlYWQuaW50ZXJydXB0X21haW4oKSAodXNlZCBmcm9tIElETEUpLCBzbyBpdCdzIHN0aWxsIG5lZWRlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTaWduYWxfU2V0V2FrZXVwRmQoaW50IGZkKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNpZ25hbF9TZXRXYWtldXBGZChpbnQgZmQpCiAKICAgIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBzcGVjaWZpZXMgYSBmaWxlIGRlc2NyaXB0b3IgdG8gd2hpY2ggYSBgYCdcMCdgYCBieXRlIHdpbGwKICAgIGJlIHdyaXR0ZW4gd2hlbmV2ZXIgYSBzaWduYWwgaXMgcmVjZWl2ZWQuICBJdCByZXR1cm5zIHRoZSBwcmV2aW91cyBzdWNoIGZpbGUKQEAgLTMyMCwxMyArMzUyLDEzIEBACiAgICBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRocmVhZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKIAogICAgVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhjZXB0aW9uIG9iamVjdC4gVGhlICpuYW1lKgogICAgYXJndW1lbnQgbXVzdCBiZSB0aGUgbmFtZSBvZiB0aGUgbmV3IGV4Y2VwdGlvbiwgYSBDIHN0cmluZyBvZiB0aGUgZm9ybQogICAgYGBtb2R1bGUuY2xhc3NgYC4gIFRoZSAqYmFzZSogYW5kICpkaWN0KiBhcmd1bWVudHMgYXJlIG5vcm1hbGx5ICpOVUxMKi4gIFRoaXMKICAgIGNyZWF0ZXMgYSBjbGFzcyBvYmplY3QgZGVyaXZlZCBmcm9tIDpleGM6YEV4Y2VwdGlvbmAgKGFjY2Vzc2libGUgaW4gQyBhcwotICAgOmNkYXRhOmBQeUV4Y19FeGNlcHRpb25gKS4KKyAgIDpjOmRhdGE6YFB5RXhjX0V4Y2VwdGlvbmApLgogCiAgICBUaGUgOmF0dHI6YF9fbW9kdWxlX19gIGF0dHJpYnV0ZSBvZiB0aGUgbmV3IGNsYXNzIGlzIHNldCB0byB0aGUgZmlyc3QgcGFydCAodXAKICAgIHRvIHRoZSBsYXN0IGRvdCkgb2YgdGhlICpuYW1lKiBhcmd1bWVudCwgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIHNldCB0byB0aGUgbGFzdApAQCAtMzM1LDcgKzM2NywxNiBAQAogICAgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGRpY3Rpb25hcnkgb2YgY2xhc3MgdmFyaWFibGVzIGFuZCBtZXRob2RzLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICpvYmopCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MoY2hhciAqbmFtZSwgY2hhciAqZG9jLCBQeU9iamVjdCAqYmFzZSwgUHlPYmplY3QgKmRpY3QpCisKKyAgIFNhbWUgYXMgOmM6ZnVuYzpgUHlFcnJfTmV3RXhjZXB0aW9uYCwgZXhjZXB0IHRoYXQgdGhlIG5ldyBleGNlcHRpb24gY2xhc3MgY2FuCisgICBlYXNpbHkgYmUgZ2l2ZW4gYSBkb2NzdHJpbmc6IElmICpkb2MqIGlzIG5vbi0qTlVMTCosIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUKKyAgIGRvY3N0cmluZyBmb3IgdGhlIGV4Y2VwdGlvbiBjbGFzcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKFB5T2JqZWN0ICpvYmopCiAKICAgIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gYGBzeXMuc3RkZXJyYGAgd2hlbiBhbgogICAgZXhjZXB0aW9uIGhhcyBiZWVuIHNldCBidXQgaXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGludGVycHJldGVyIHRvIGFjdHVhbGx5CkBAIC0zNTAsMjAgKzM5MSwyMCBAQAogRXhjZXB0aW9uIE9iamVjdHMKID09PT09PT09PT09PT09PT09CiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2soUHlPYmplY3QgKmV4KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2soUHlPYmplY3QgKmV4KQogCiAgICBSZXR1cm4gdGhlIHRyYWNlYmFjayBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiBhcyBhIG5ldyByZWZlcmVuY2UsIGFzCiAgICBhY2Nlc3NpYmxlIGZyb20gUHl0aG9uIHRocm91Z2ggOmF0dHI6YF9fdHJhY2ViYWNrX19gLiAgSWYgdGhlcmUgaXMgbm8KICAgIHRyYWNlYmFjayBhc3NvY2lhdGVkLCB0aGlzIHJldHVybnMgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2soUHlPYmplY3QgKmV4LCBQeU9iamVjdCAqdGIpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayhQeU9iamVjdCAqZXgsIFB5T2JqZWN0ICp0YikKIAogICAgU2V0IHRoZSB0cmFjZWJhY2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGNlcHRpb24gdG8gKnRiKi4gIFVzZSBgYFB5X05vbmVgYCB0bwogICAgY2xlYXIgaXQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXhjZXB0aW9uX0dldENvbnRleHQoUHlPYmplY3QgKmV4KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV4Y2VwdGlvbl9HZXRDb250ZXh0KFB5T2JqZWN0ICpleCkKIAogICAgUmV0dXJuIHRoZSBjb250ZXh0IChhbm90aGVyIGV4Y2VwdGlvbiBpbnN0YW5jZSBkdXJpbmcgd2hvc2UgaGFuZGxpbmcgKmV4KiB3YXMKICAgIHJhaXNlZCkgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGNlcHRpb24gYXMgYSBuZXcgcmVmZXJlbmNlLCBhcyBhY2Nlc3NpYmxlIGZyb20KQEAgLTM3MSwxNCArNDEyLDE0IEBACiAgICByZXR1cm5zICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXhjZXB0aW9uX1NldENvbnRleHQoUHlPYmplY3QgKmV4LCBQeU9iamVjdCAqY3R4KQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFeGNlcHRpb25fU2V0Q29udGV4dChQeU9iamVjdCAqZXgsIFB5T2JqZWN0ICpjdHgpCiAKICAgIFNldCB0aGUgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiB0byAqY3R4Ki4gIFVzZSAqTlVMTCogdG8gY2xlYXIKICAgIGl0LiAgVGhlcmUgaXMgbm8gdHlwZSBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCAqY3R4KiBpcyBhbiBleGNlcHRpb24gaW5zdGFuY2UuCiAgICBUaGlzIHN0ZWFscyBhIHJlZmVyZW5jZSB0byAqY3R4Ki4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlFeGNlcHRpb25fR2V0Q2F1c2UoUHlPYmplY3QgKmV4KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV4Y2VwdGlvbl9HZXRDYXVzZShQeU9iamVjdCAqZXgpCiAKICAgIFJldHVybiB0aGUgY2F1c2UgKGFub3RoZXIgZXhjZXB0aW9uIGluc3RhbmNlIHNldCBieSBgYHJhaXNlIC4uLiBmcm9tIC4uLmBgKQogICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGNlcHRpb24gYXMgYSBuZXcgcmVmZXJlbmNlLCBhcyBhY2Nlc3NpYmxlIGZyb20gUHl0aG9uCkBAIC0zODYsNyArNDI3LDcgQEAKICAgICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXhjZXB0aW9uX1NldENhdXNlKFB5T2JqZWN0ICpleCwgUHlPYmplY3QgKmN0eCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXhjZXB0aW9uX1NldENhdXNlKFB5T2JqZWN0ICpleCwgUHlPYmplY3QgKmN0eCkKIAogICAgU2V0IHRoZSBjYXVzZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiB0byAqY3R4Ki4gIFVzZSAqTlVMTCogdG8gY2xlYXIKICAgIGl0LiAgVGhlcmUgaXMgbm8gdHlwZSBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCAqY3R4KiBpcyBhbiBleGNlcHRpb24gaW5zdGFuY2UuCkBAIC00MDAsNzEgKzQ0MSw3MyBAQAogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIG1vZGlmeSBVbmljb2RlIGV4Y2VwdGlvbnMgZnJvbSBDLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpvYmplY3QsIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKm9iamVjdCwgUHlfc3NpemVfdCBsZW5ndGgsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBjb25zdCBjaGFyICpyZWFzb24pCiAKICAgIENyZWF0ZSBhIDpjbGFzczpgVW5pY29kZURlY29kZUVycm9yYCBvYmplY3Qgd2l0aCB0aGUgYXR0cmlidXRlcyAqZW5jb2RpbmcqLAotICAgKm9iamVjdCosICpsZW5ndGgqLCAqc3RhcnQqLCAqZW5kKiBhbmQgKnJlYXNvbiouCisgICAqb2JqZWN0KiwgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4gKmVuY29kaW5nKiBhbmQgKnJlYXNvbiogYXJlCisgICBVVEYtOCBlbmNvZGVkIHN0cmluZ3MuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUoY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IFB5X1VOSUNPREUgKm9iamVjdCwgUHlfc3NpemVfdCBsZW5ndGgsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBjb25zdCBjaGFyICpyZWFzb24pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZShjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKIAogICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlRW5jb2RlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICplbmNvZGluZyosCi0gICAqb2JqZWN0KiwgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4KKyAgICpvYmplY3QqLCAqbGVuZ3RoKiwgKnN0YXJ0KiwgKmVuZCogYW5kICpyZWFzb24qLiAqZW5jb2RpbmcqIGFuZCAqcmVhc29uKiBhcmUKKyAgIFVURi04IGVuY29kZWQgc3RyaW5ncy4KIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZShjb25zdCBQeV9VTklDT0RFICpvYmplY3QsIFB5X3NzaXplX3QgbGVuZ3RoLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9DcmVhdGUoY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKIAogICAgQ3JlYXRlIGEgOmNsYXNzOmBVbmljb2RlVHJhbnNsYXRlRXJyb3JgIG9iamVjdCB3aXRoIHRoZSBhdHRyaWJ1dGVzICpvYmplY3QqLAotICAgKmxlbmd0aCosICpzdGFydCosICplbmQqIGFuZCAqcmVhc29uKi4KKyAgICpsZW5ndGgqLCAqc3RhcnQqLCAqZW5kKiBhbmQgKnJlYXNvbiouICpyZWFzb24qIGlzIGFuIFVURi04IGVuY29kZWQgc3RyaW5nLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcoUHlPYmplY3QgKmV4YykKLSAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhQeU9iamVjdCAqZXhjKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyhQeU9iamVjdCAqZXhjKQorICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhQeU9iamVjdCAqZXhjKQogCiAgICBSZXR1cm4gdGhlICplbmNvZGluZyogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0LgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCi0gICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCi0gICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdChQeU9iamVjdCAqZXhjKQorICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QoUHlPYmplY3QgKmV4YykKKyAgICAgICAgICAgICAgICBQeU9iamVjdCogUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0KFB5T2JqZWN0ICpleGMpCiAKICAgIFJldHVybiB0aGUgKm9iamVjdCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0LgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCi0gICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCi0gICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKnN0YXJ0KQorICAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICpzdGFydCkKKyAgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqc3RhcnQpCiAKICAgIEdldCB0aGUgKnN0YXJ0KiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QgYW5kIHBsYWNlIGl0IGludG8KICAgICpcKnN0YXJ0Ki4gICpzdGFydCogbXVzdCBub3QgYmUgKk5VTEwqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbgogICAgZmFpbHVyZS4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0KFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3Qgc3RhcnQpCi0gICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBzdGFydCkKLSAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQorICAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQorICAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IHN0YXJ0KQogCiAgICBTZXQgdGhlICpzdGFydCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IHRvICpzdGFydCouICBSZXR1cm4KICAgIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbiBmYWlsdXJlLgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgKmVuZCkKLSAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCAqZW5kKQotICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCisgICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCisgICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90ICplbmQpCiAKICAgIEdldCB0aGUgKmVuZCogYXR0cmlidXRlIG9mIHRoZSBnaXZlbiBleGNlcHRpb24gb2JqZWN0IGFuZCBwbGFjZSBpdCBpbnRvCiAgICAqXCplbmQqLiAgKmVuZCogbXVzdCBub3QgYmUgKk5VTEwqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbgogICAgZmFpbHVyZS4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IGVuZCkKLSAgICAgICAgICAgICAgIGludCBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBlbmQpCi0gICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgZW5kKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQoUHlPYmplY3QgKmV4YywgUHlfc3NpemVfdCBlbmQpCisgICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZChQeU9iamVjdCAqZXhjLCBQeV9zc2l6ZV90IGVuZCkKKyAgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kKFB5T2JqZWN0ICpleGMsIFB5X3NzaXplX3QgZW5kKQogCiAgICBTZXQgdGhlICplbmQqIGF0dHJpYnV0ZSBvZiB0aGUgZ2l2ZW4gZXhjZXB0aW9uIG9iamVjdCB0byAqZW5kKi4gIFJldHVybiBgYDBgYAogICAgb24gc3VjY2VzcywgYGAtMWBgIG9uIGZhaWx1cmUuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKLSAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKLSAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uKFB5T2JqZWN0ICpleGMpCisgICAgICAgICAgICAgICAgUHlPYmplY3QqIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbihQeU9iamVjdCAqZXhjKQorICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24oUHlPYmplY3QgKmV4YykKIAogICAgUmV0dXJuIHRoZSAqcmVhc29uKiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24oUHlPYmplY3QgKmV4YywgY29uc3QgY2hhciAqcmVhc29uKQotICAgICAgICAgICAgICAgaW50IFB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbihQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpyZWFzb24pCi0gICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKKyAgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKKyAgICAgICAgICAgICAgICBpbnQgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKnJlYXNvbikKIAogICAgU2V0IHRoZSAqcmVhc29uKiBhdHRyaWJ1dGUgb2YgdGhlIGdpdmVuIGV4Y2VwdGlvbiBvYmplY3QgdG8gKnJlYXNvbiouICBSZXR1cm4KICAgIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYCBvbiBmYWlsdXJlLgpAQCAtNDc4LDEyICs1MjEsMTIgQEAKIHJlY3Vyc2l2ZSBjb2RlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGludm9rZSBQeXRob24gY29kZSAod2hpY2ggdHJhY2tzIGl0cwogcmVjdXJzaW9uIGRlcHRoIGF1dG9tYXRpY2FsbHkpLgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfRW50ZXJSZWN1cnNpdmVDYWxsKGNoYXIgKndoZXJlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoY2hhciAqd2hlcmUpCiAKICAgIE1hcmtzIGEgcG9pbnQgd2hlcmUgYSByZWN1cnNpdmUgQy1sZXZlbCBjYWxsIGlzIGFib3V0IHRvIGJlIHBlcmZvcm1lZC4KIAogICAgSWYgOmNvbnN0OmBVU0VfU1RBQ0tDSEVDS2AgaXMgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlIHRoZSBPUwotICAgc3RhY2sgb3ZlcmZsb3dlZCB1c2luZyA6Y2Z1bmM6YFB5T1NfQ2hlY2tTdGFja2AuICBJbiB0aGlzIGlzIHRoZSBjYXNlLCBpdAorICAgc3RhY2sgb3ZlcmZsb3dlZCB1c2luZyA6YzpmdW5jOmBQeU9TX0NoZWNrU3RhY2tgLiAgSW4gdGhpcyBpcyB0aGUgY2FzZSwgaXQKICAgIHNldHMgYSA6ZXhjOmBNZW1vcnlFcnJvcmAgYW5kIHJldHVybnMgYSBub256ZXJvIHZhbHVlLgogCiAgICBUaGUgZnVuY3Rpb24gdGhlbiBjaGVja3MgaWYgdGhlIHJlY3Vyc2lvbiBsaW1pdCBpcyByZWFjaGVkLiAgSWYgdGhpcyBpcyB0aGUKQEAgLTQ5NCwxMCArNTM3LDM5IEBACiAgICBjb25jYXRlbmF0ZWQgdG8gdGhlIDpleGM6YFJ1bnRpbWVFcnJvcmAgbWVzc2FnZSBjYXVzZWQgYnkgdGhlIHJlY3Vyc2lvbiBkZXB0aAogICAgbGltaXQuCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpCiAKLSAgIEVuZHMgYSA6Y2Z1bmM6YFB5X0VudGVyUmVjdXJzaXZlQ2FsbGAuICBNdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoCi0gICAqc3VjY2Vzc2Z1bCogaW52b2NhdGlvbiBvZiA6Y2Z1bmM6YFB5X0VudGVyUmVjdXJzaXZlQ2FsbGAuCisgICBFbmRzIGEgOmM6ZnVuYzpgUHlfRW50ZXJSZWN1cnNpdmVDYWxsYC4gIE11c3QgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2gKKyAgICpzdWNjZXNzZnVsKiBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YFB5X0VudGVyUmVjdXJzaXZlQ2FsbGAuCisKK1Byb3Blcmx5IGltcGxlbWVudGluZyA6YXR0cjpgdHBfcmVwcmAgZm9yIGNvbnRhaW5lciB0eXBlcyByZXF1aXJlcworc3BlY2lhbCByZWN1cnNpb24gaGFuZGxpbmcuICBJbiBhZGRpdGlvbiB0byBwcm90ZWN0aW5nIHRoZSBzdGFjaywKKzphdHRyOmB0cF9yZXByYCBhbHNvIG5lZWRzIHRvIHRyYWNrIG9iamVjdHMgdG8gcHJldmVudCBjeWNsZXMuICBUaGUKK2ZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGZhY2lsaXRhdGUgdGhpcyBmdW5jdGlvbmFsaXR5LiAgRWZmZWN0aXZlbHksCit0aGVzZSBhcmUgdGhlIEMgZXF1aXZhbGVudCB0byA6ZnVuYzpgcmVwcmxpYi5yZWN1cnNpdmVfcmVwcmAuCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfUmVwckVudGVyKFB5T2JqZWN0ICpvYmplY3QpCisKKyAgIENhbGxlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSA6YXR0cjpgdHBfcmVwcmAgaW1wbGVtZW50YXRpb24gdG8KKyAgIGRldGVjdCBjeWNsZXMuCisKKyAgIElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEKKyAgIHBvc2l0aXZlIGludGVnZXIuICBJbiB0aGF0IGNhc2UgdGhlIDphdHRyOmB0cF9yZXByYCBpbXBsZW1lbnRhdGlvbgorICAgc2hvdWxkIHJldHVybiBhIHN0cmluZyBvYmplY3QgaW5kaWNhdGluZyBhIGN5Y2xlLiAgQXMgZXhhbXBsZXMsCisgICA6Y2xhc3M6YGRpY3RgIG9iamVjdHMgcmV0dXJuIGBgey4uLn1gYCBhbmQgOmNsYXNzOmBsaXN0YCBvYmplY3RzCisgICByZXR1cm4gYGBbLi4uXWBgLgorCisgICBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIHRoZSByZWN1cnNpb24gbGltaXQKKyAgIGlzIHJlYWNoZWQuICBJbiB0aGF0IGNhc2UgdGhlIDphdHRyOmB0cF9yZXByYCBpbXBsZW1lbnRhdGlvbiBzaG91bGQKKyAgIHR5cGljYWxseSByZXR1cm4gYGBOVUxMYGAuCisKKyAgIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMgemVybyBhbmQgdGhlIDphdHRyOmB0cF9yZXByYAorICAgaW1wbGVtZW50YXRpb24gY2FuIGNvbnRpbnVlIG5vcm1hbGx5LgorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9SZXByTGVhdmUoUHlPYmplY3QgKm9iamVjdCkKKworICAgRW5kcyBhIDpjOmZ1bmM6YFB5X1JlcHJFbnRlcmAuICBNdXN0IGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoCisgICBpbnZvY2F0aW9uIG9mIDpjOmZ1bmM6YFB5X1JlcHJFbnRlcmAgdGhhdCByZXR1cm5zIHplcm8uCiAKIAogLi4gX3N0YW5kYXJkZXhjZXB0aW9uczoKQEAgLTUwNyw2OCArNTc5LDY4IEBACiAKIEFsbCBzdGFuZGFyZCBQeXRob24gZXhjZXB0aW9ucyBhcmUgYXZhaWxhYmxlIGFzIGdsb2JhbCB2YXJpYWJsZXMgd2hvc2UgbmFtZXMgYXJlCiBgYFB5RXhjX2BgIGZvbGxvd2VkIGJ5IHRoZSBQeXRob24gZXhjZXB0aW9uIG5hbWUuICBUaGVzZSBoYXZlIHRoZSB0eXBlCi06Y3R5cGU6YFB5T2JqZWN0XCpgOyB0aGV5IGFyZSBhbGwgY2xhc3Mgb2JqZWN0cy4gIEZvciBjb21wbGV0ZW5lc3MsIGhlcmUgYXJlIGFsbAorOmM6dHlwZTpgUHlPYmplY3RcKmA7IHRoZXkgYXJlIGFsbCBjbGFzcyBvYmplY3RzLiAgRm9yIGNvbXBsZXRlbmVzcywgaGVyZSBhcmUgYWxsCiB0aGUgdmFyaWFibGVzOgogCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgQyBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiBOYW1lICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT0rCi18IDpjZGF0YTpgUHlFeGNfQmFzZUV4Y2VwdGlvbmAgICAgICAgfCA6ZXhjOmBCYXNlRXhjZXB0aW9uYCAgICAgICB8IFwoMSkgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX0V4Y2VwdGlvbmAgICAgICAgICAgIHwgOmV4YzpgRXhjZXB0aW9uYCAgICAgICAgICAgfCBcKDEpICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19Bcml0aG1ldGljRXJyb3JgICAgICB8IDpleGM6YEFyaXRobWV0aWNFcnJvcmAgICAgIHwgXCgxKSAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfTG9va3VwRXJyb3JgICAgICAgICAgfCA6ZXhjOmBMb29rdXBFcnJvcmAgICAgICAgICB8IFwoMSkgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX0Fzc2VydGlvbkVycm9yYCAgICAgIHwgOmV4YzpgQXNzZXJ0aW9uRXJyb3JgICAgICAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19BdHRyaWJ1dGVFcnJvcmAgICAgICB8IDpleGM6YEF0dHJpYnV0ZUVycm9yYCAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfRU9GRXJyb3JgICAgICAgICAgICAgfCA6ZXhjOmBFT0ZFcnJvcmAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX0Vudmlyb25tZW50RXJyb3JgICAgIHwgOmV4YzpgRW52aXJvbm1lbnRFcnJvcmAgICAgfCBcKDEpICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3JgICB8IDpleGM6YEZsb2F0aW5nUG9pbnRFcnJvcmAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfSU9FcnJvcmAgICAgICAgICAgICAgfCA6ZXhjOmBJT0Vycm9yYCAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX0ltcG9ydEVycm9yYCAgICAgICAgIHwgOmV4YzpgSW1wb3J0RXJyb3JgICAgICAgICAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19JbmRleEVycm9yYCAgICAgICAgICB8IDpleGM6YEluZGV4RXJyb3JgICAgICAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfS2V5RXJyb3JgICAgICAgICAgICAgfCA6ZXhjOmBLZXlFcnJvcmAgICAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX0tleWJvYXJkSW50ZXJydXB0YCAgIHwgOmV4YzpgS2V5Ym9hcmRJbnRlcnJ1cHRgICAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19NZW1vcnlFcnJvcmAgICAgICAgICB8IDpleGM6YE1lbW9yeUVycm9yYCAgICAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfTmFtZUVycm9yYCAgICAgICAgICAgfCA6ZXhjOmBOYW1lRXJyb3JgICAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3JgIHwgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19PU0Vycm9yYCAgICAgICAgICAgICB8IDpleGM6YE9TRXJyb3JgICAgICAgICAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfT3ZlcmZsb3dFcnJvcmAgICAgICAgfCA6ZXhjOmBPdmVyZmxvd0Vycm9yYCAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX1JlZmVyZW5jZUVycm9yYCAgICAgIHwgOmV4YzpgUmVmZXJlbmNlRXJyb3JgICAgICAgfCBcKDIpICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19SdW50aW1lRXJyb3JgICAgICAgICB8IDpleGM6YFJ1bnRpbWVFcnJvcmAgICAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfU3ludGF4RXJyb3JgICAgICAgICAgfCA6ZXhjOmBTeW50YXhFcnJvcmAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX1N5c3RlbUVycm9yYCAgICAgICAgIHwgOmV4YzpgU3lzdGVtRXJyb3JgICAgICAgICAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19TeXN0ZW1FeGl0YCAgICAgICAgICB8IDpleGM6YFN5c3RlbUV4aXRgICAgICAgICAgIHwgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfVHlwZUVycm9yYCAgICAgICAgICAgfCA6ZXhjOmBUeXBlRXJyb3JgICAgICAgICAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwotfCA6Y2RhdGE6YFB5RXhjX1ZhbHVlRXJyb3JgICAgICAgICAgIHwgOmV4YzpgVmFsdWVFcnJvcmAgICAgICAgICAgfCAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgOmNkYXRhOmBQeUV4Y19XaW5kb3dzRXJyb3JgICAgICAgICB8IDpleGM6YFdpbmRvd3NFcnJvcmAgICAgICAgIHwgXCgzKSAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCi18IDpjZGF0YTpgUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3JgICAgfCA6ZXhjOmBaZXJvRGl2aXNpb25FcnJvcmAgICB8ICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCBDIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiBOYW1lICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09KworfCA6YzpkYXRhOmBQeUV4Y19CYXNlRXhjZXB0aW9uYCAgICAgICB8IDpleGM6YEJhc2VFeGNlcHRpb25gICAgICAgIHwgXCgxKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19FeGNlcHRpb25gICAgICAgICAgICB8IDpleGM6YEV4Y2VwdGlvbmAgICAgICAgICAgIHwgXCgxKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19Bcml0aG1ldGljRXJyb3JgICAgICB8IDpleGM6YEFyaXRobWV0aWNFcnJvcmAgICAgIHwgXCgxKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19Mb29rdXBFcnJvcmAgICAgICAgICB8IDpleGM6YExvb2t1cEVycm9yYCAgICAgICAgIHwgXCgxKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19Bc3NlcnRpb25FcnJvcmAgICAgICB8IDpleGM6YEFzc2VydGlvbkVycm9yYCAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19BdHRyaWJ1dGVFcnJvcmAgICAgICB8IDpleGM6YEF0dHJpYnV0ZUVycm9yYCAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19FT0ZFcnJvcmAgICAgICAgICAgICB8IDpleGM6YEVPRkVycm9yYCAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19FbnZpcm9ubWVudEVycm9yYCAgICB8IDpleGM6YEVudmlyb25tZW50RXJyb3JgICAgIHwgXCgxKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3JgICB8IDpleGM6YEZsb2F0aW5nUG9pbnRFcnJvcmAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19JT0Vycm9yYCAgICAgICAgICAgICB8IDpleGM6YElPRXJyb3JgICAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19JbXBvcnRFcnJvcmAgICAgICAgICB8IDpleGM6YEltcG9ydEVycm9yYCAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19JbmRleEVycm9yYCAgICAgICAgICB8IDpleGM6YEluZGV4RXJyb3JgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19LZXlFcnJvcmAgICAgICAgICAgICB8IDpleGM6YEtleUVycm9yYCAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19LZXlib2FyZEludGVycnVwdGAgICB8IDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19NZW1vcnlFcnJvcmAgICAgICAgICB8IDpleGM6YE1lbW9yeUVycm9yYCAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19OYW1lRXJyb3JgICAgICAgICAgICB8IDpleGM6YE5hbWVFcnJvcmAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yYCB8IDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19PU0Vycm9yYCAgICAgICAgICAgICB8IDpleGM6YE9TRXJyb3JgICAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19PdmVyZmxvd0Vycm9yYCAgICAgICB8IDpleGM6YE92ZXJmbG93RXJyb3JgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19SZWZlcmVuY2VFcnJvcmAgICAgICB8IDpleGM6YFJlZmVyZW5jZUVycm9yYCAgICAgIHwgXCgyKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19SdW50aW1lRXJyb3JgICAgICAgICB8IDpleGM6YFJ1bnRpbWVFcnJvcmAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19TeW50YXhFcnJvcmAgICAgICAgICB8IDpleGM6YFN5bnRheEVycm9yYCAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19TeXN0ZW1FcnJvcmAgICAgICAgICB8IDpleGM6YFN5c3RlbUVycm9yYCAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19TeXN0ZW1FeGl0YCAgICAgICAgICB8IDpleGM6YFN5c3RlbUV4aXRgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19UeXBlRXJyb3JgICAgICAgICAgICB8IDpleGM6YFR5cGVFcnJvcmAgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19WYWx1ZUVycm9yYCAgICAgICAgICB8IDpleGM6YFZhbHVlRXJyb3JgICAgICAgICAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19XaW5kb3dzRXJyb3JgICAgICAgICB8IDpleGM6YFdpbmRvd3NFcnJvcmAgICAgICAgIHwgXCgzKSAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKworfCA6YzpkYXRhOmBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcmAgICB8IDpleGM6YFplcm9EaXZpc2lvbkVycm9yYCAgIHwgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IFB5RXhjX0Jhc2VFeGNlcHRpb24KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9maWxlLnJzdCBiL0RvYy9jLWFwaS9maWxlLnJzdAppbmRleCBjYzg1MWU2Li5jNWE0YTU5IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZmlsZS5yc3QKKysrIGIvRG9jL2MtYXBpL2ZpbGUucnN0CkBAIC04LDcgKzgsNyBAQAogLi4gaW5kZXg6OiBvYmplY3Q6IGZpbGUKIAogVGhlc2UgQVBJcyBhcmUgYSBtaW5pbWFsIGVtdWxhdGlvbiBvZiB0aGUgUHl0aG9uIDIgQyBBUEkgZm9yIGJ1aWx0LWluIGZpbGUKLW9iamVjdHMsIHdoaWNoIHVzZWQgdG8gcmVseSBvbiB0aGUgYnVmZmVyZWQgSS9PICg6Y3R5cGU6YEZJTEVcKmApIHN1cHBvcnQKK29iamVjdHMsIHdoaWNoIHVzZWQgdG8gcmVseSBvbiB0aGUgYnVmZmVyZWQgSS9PICg6Yzp0eXBlOmBGSUxFXCpgKSBzdXBwb3J0CiBmcm9tIHRoZSBDIHN0YW5kYXJkIGxpYnJhcnkuICBJbiBQeXRob24gMywgZmlsZXMgYW5kIHN0cmVhbXMgdXNlIHRoZSBuZXcKIDptb2Q6YGlvYCBtb2R1bGUsIHdoaWNoIGRlZmluZXMgc2V2ZXJhbCBsYXllcnMgb3ZlciB0aGUgbG93LWxldmVsIHVuYnVmZmVyZWQKIEkvTyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93IGFyZQpAQCAtMTcsMTMgKzE3LDE0IEBACiB0aGUgOm1vZDpgaW9gIEFQSXMgaW5zdGVhZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCisuLiBjOmZ1bmN0aW9uOjogUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNoYXIgKmVuY29kaW5nLCBjaGFyICplcnJvcnMsIGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogCiAgICBDcmVhdGUgYSBQeXRob24gZmlsZSBvYmplY3QgZnJvbSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGFuIGFscmVhZHkKICAgIG9wZW5lZCBmaWxlICpmZCouICBUaGUgYXJndW1lbnRzICpuYW1lKiwgKmVuY29kaW5nKiwgKmVycm9ycyogYW5kICpuZXdsaW5lKgogICAgY2FuIGJlICpOVUxMKiB0byB1c2UgdGhlIGRlZmF1bHRzOyAqYnVmZmVyaW5nKiBjYW4gYmUgKi0xKiB0byB1c2UgdGhlCi0gICBkZWZhdWx0LiAgUmV0dXJuICpOVUxMKiBvbiBmYWlsdXJlLiAgRm9yIGEgbW9yZSBjb21wcmVoZW5zaXZlIGRlc2NyaXB0aW9uIG9mCi0gICB0aGUgYXJndW1lbnRzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIDpmdW5jOmBpby5vcGVuYCBmdW5jdGlvbiBkb2N1bWVudGF0aW9uLgorICAgZGVmYXVsdC4gKm5hbWUqIGlzIGlnbm9yZWQgYW5kIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIFJldHVybgorICAgKk5VTEwqIG9uIGZhaWx1cmUuIEZvciBhIG1vcmUgY29tcHJlaGVuc2l2ZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzLAorICAgcGxlYXNlIHJlZmVyIHRvIHRoZSA6ZnVuYzpgaW8ub3BlbmAgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gd2FybmluZzo6CiAKQEAgLTMxLDE3ICszMiwyMCBAQAogICAgICBPUy1sZXZlbCBmaWxlIGRlc2NyaXB0b3JzIGNhbiBwcm9kdWNlIHZhcmlvdXMgaXNzdWVzIChzdWNoIGFzIHVuZXhwZWN0ZWQKICAgICAgb3JkZXJpbmcgb2YgZGF0YSkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBJZ25vcmUgKm5hbWUqIGF0dHJpYnV0ZS4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IoUHlPYmplY3QgKnApCiAKLSAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCAqcCogYXMgYW4gOmN0eXBlOmBpbnRgLiAgSWYgdGhlCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IoUHlPYmplY3QgKnApCisKKyAgIFJldHVybiB0aGUgZmlsZSBkZXNjcmlwdG9yIGFzc29jaWF0ZWQgd2l0aCAqcCogYXMgYW4gOmM6dHlwZTpgaW50YC4gIElmIHRoZQogICAgb2JqZWN0IGlzIGFuIGludGVnZXIsIGl0cyB2YWx1ZSBpcyByZXR1cm5lZC4gIElmIG5vdCwgdGhlCiAgICBvYmplY3QncyA6bWV0aDpgZmlsZW5vYCBtZXRob2QgaXMgY2FsbGVkIGlmIGl0IGV4aXN0czsgdGhlIG1ldGhvZCBtdXN0IHJldHVybgogICAgYW4gaW50ZWdlciwgd2hpY2ggaXMgcmV0dXJuZWQgYXMgdGhlIGZpbGUgZGVzY3JpcHRvciB2YWx1ZS4gIFNldHMgYW4KICAgIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGaWxlX0dldExpbmUoUHlPYmplY3QgKnAsIGludCBuKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZpbGVfR2V0TGluZShQeU9iamVjdCAqcCwgaW50IG4pCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBFT0ZFcnJvciAoYnVpbHQtaW4gZXhjZXB0aW9uKQogCkBAIC01NSw3ICs1OSw3IEBACiAgICByYWlzZWQgaWYgdGhlIGVuZCBvZiB0aGUgZmlsZSBpcyByZWFjaGVkIGltbWVkaWF0ZWx5LgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUZpbGVfV3JpdGVPYmplY3QoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKnAsIGludCBmbGFncykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGaWxlX1dyaXRlT2JqZWN0KFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwLCBpbnQgZmxhZ3MpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9QUklOVF9SQVcKIApAQCAtNjUsNyArNjksNyBAQAogICAgYXBwcm9wcmlhdGUgZXhjZXB0aW9uIHdpbGwgYmUgc2V0LgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUZpbGVfV3JpdGVTdHJpbmcoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RmlsZV9Xcml0ZVN0cmluZyhjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqcCkKIAogICAgV3JpdGUgc3RyaW5nICpzKiB0byBmaWxlIG9iamVjdCAqcCouICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgb24KICAgIGZhaWx1cmU7IHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gd2lsbCBiZSBzZXQuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmxvYXQucnN0IGIvRG9jL2MtYXBpL2Zsb2F0LnJzdAppbmRleCA5Mzc2OWFhLi43NTdlZmQzIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZmxvYXQucnN0CisrKyBiL0RvYy9jLWFwaS9mbG9hdC5yc3QKQEAgLTgsNzAgKzgsNzAgQEAKIC4uIGluZGV4Ojogb2JqZWN0OiBmbG9hdGluZyBwb2ludAogCiAKLS4uIGN0eXBlOjogUHlGbG9hdE9iamVjdAorLi4gYzp0eXBlOjogUHlGbG9hdE9iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhIFB5dGhvbiBmbG9hdGluZyBwb2ludCBvYmplY3QuCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gZmxvYXRpbmcgcG9pbnQgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlGbG9hdF9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUZsb2F0X1R5cGUKIAotICAgVGhpcyBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGZsb2F0aW5nIHBvaW50CisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGZsb2F0aW5nIHBvaW50CiAgICB0eXBlLiAgVGhpcyBpcyB0aGUgc2FtZSBvYmplY3QgYXMgOmNsYXNzOmBmbG9hdGAgaW4gdGhlIFB5dGhvbiBsYXllci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlGbG9hdF9DaGVjayhQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGbG9hdF9DaGVjayhQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmN0eXBlOmBQeUZsb2F0T2JqZWN0YCBvciBhIHN1YnR5cGUgb2YKLSAgIDpjdHlwZTpgUHlGbG9hdE9iamVjdGAuCisgICBSZXR1cm4gdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgYSA6Yzp0eXBlOmBQeUZsb2F0T2JqZWN0YCBvciBhIHN1YnR5cGUgb2YKKyAgIDpjOnR5cGU6YFB5RmxvYXRPYmplY3RgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUZsb2F0X0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RmxvYXRfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmN0eXBlOmBQeUZsb2F0T2JqZWN0YCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YKLSAgIDpjdHlwZTpgUHlGbG9hdE9iamVjdGAuCisgICBSZXR1cm4gdHJ1ZSBpZiBpdHMgYXJndW1lbnQgaXMgYSA6Yzp0eXBlOmBQeUZsb2F0T2JqZWN0YCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YKKyAgIDpjOnR5cGU6YFB5RmxvYXRPYmplY3RgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZsb2F0X0Zyb21TdHJpbmcoUHlPYmplY3QgKnN0cikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlGbG9hdF9Gcm9tU3RyaW5nKFB5T2JqZWN0ICpzdHIpCiAKLSAgIENyZWF0ZSBhIDpjdHlwZTpgUHlGbG9hdE9iamVjdGAgb2JqZWN0IGJhc2VkIG9uIHRoZSBzdHJpbmcgdmFsdWUgaW4gKnN0ciosIG9yCisgICBDcmVhdGUgYSA6Yzp0eXBlOmBQeUZsb2F0T2JqZWN0YCBvYmplY3QgYmFzZWQgb24gdGhlIHN0cmluZyB2YWx1ZSBpbiAqc3RyKiwgb3IKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIHYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RmxvYXRfRnJvbURvdWJsZShkb3VibGUgdikKIAotICAgQ3JlYXRlIGEgOmN0eXBlOmBQeUZsb2F0T2JqZWN0YCBvYmplY3QgZnJvbSAqdiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLgorICAgQ3JlYXRlIGEgOmM6dHlwZTpgUHlGbG9hdE9iamVjdGAgb2JqZWN0IGZyb20gKnYqLCBvciAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBkb3VibGUgUHlGbG9hdF9Bc0RvdWJsZShQeU9iamVjdCAqcHlmbG9hdCkKKy4uIGM6ZnVuY3Rpb246OiBkb3VibGUgUHlGbG9hdF9Bc0RvdWJsZShQeU9iamVjdCAqcHlmbG9hdCkKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGRvdWJsZWAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpweWZsb2F0Ki4gIElmCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YGRvdWJsZWAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpweWZsb2F0Ki4gIElmCiAgICAqcHlmbG9hdCogaXMgbm90IGEgUHl0aG9uIGZsb2F0aW5nIHBvaW50IG9iamVjdCBidXQgaGFzIGEgOm1ldGg6YF9fZmxvYXRfX2AKICAgIG1ldGhvZCwgdGhpcyBtZXRob2Qgd2lsbCBmaXJzdCBiZSBjYWxsZWQgdG8gY29udmVydCAqcHlmbG9hdCogaW50byBhIGZsb2F0LgogCiAKLS4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeUZsb2F0X0FTX0RPVUJMRShQeU9iamVjdCAqcHlmbG9hdCkKKy4uIGM6ZnVuY3Rpb246OiBkb3VibGUgUHlGbG9hdF9BU19ET1VCTEUoUHlPYmplY3QgKnB5ZmxvYXQpCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmBkb3VibGVgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlmbG9hdCosIGJ1dAorICAgUmV0dXJuIGEgQyA6Yzp0eXBlOmBkb3VibGVgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlmbG9hdCosIGJ1dAogICAgd2l0aG91dCBlcnJvciBjaGVja2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGbG9hdF9HZXRJbmZvKHZvaWQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RmxvYXRfR2V0SW5mbyh2b2lkKQogCiAgICBSZXR1cm4gYSBzdHJ1Y3RzZXEgaW5zdGFuY2Ugd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICBwcmVjaXNpb24sIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIGEgZmxvYXQuIEl0J3MgYSB0aGluIHdyYXBwZXIKICAgIGFyb3VuZCB0aGUgaGVhZGVyIGZpbGUgOmZpbGU6YGZsb2F0LmhgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeUZsb2F0X0dldE1heCgpCisuLiBjOmZ1bmN0aW9uOjogZG91YmxlIFB5RmxvYXRfR2V0TWF4KCkKIAotICAgUmV0dXJuIHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgZmluaXRlIGZsb2F0ICpEQkxfTUFYKiBhcyBDIDpjdHlwZTpgZG91YmxlYC4KKyAgIFJldHVybiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIGZpbml0ZSBmbG9hdCAqREJMX01BWCogYXMgQyA6Yzp0eXBlOmBkb3VibGVgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGRvdWJsZSBQeUZsb2F0X0dldE1pbigpCisuLiBjOmZ1bmN0aW9uOjogZG91YmxlIFB5RmxvYXRfR2V0TWluKCkKIAotICAgUmV0dXJuIHRoZSBtaW5pbXVtIG5vcm1hbGl6ZWQgcG9zaXRpdmUgZmxvYXQgKkRCTF9NSU4qIGFzIEMgOmN0eXBlOmBkb3VibGVgLgorICAgUmV0dXJuIHRoZSBtaW5pbXVtIG5vcm1hbGl6ZWQgcG9zaXRpdmUgZmxvYXQgKkRCTF9NSU4qIGFzIEMgOmM6dHlwZTpgZG91YmxlYC4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RmxvYXRfQ2xlYXJGcmVlTGlzdCgpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RmxvYXRfQ2xlYXJGcmVlTGlzdCgpCiAKICAgIENsZWFyIHRoZSBmbG9hdCBmcmVlIGxpc3QuIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY291bGQgbm90CiAgICBiZSBmcmVlZC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9mdW5jdGlvbi5yc3QgYi9Eb2MvYy1hcGkvZnVuY3Rpb24ucnN0CmluZGV4IDM1MTJmZTIuLjMxODA1ZmQgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9mdW5jdGlvbi5yc3QKKysrIGIvRG9jL2MtYXBpL2Z1bmN0aW9uLnJzdApAQCAtMTAsMjYgKzEwLDI2IEBACiBUaGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25zIHNwZWNpZmljIHRvIFB5dGhvbiBmdW5jdGlvbnMuCiAKIAotLi4gY3R5cGU6OiBQeUZ1bmN0aW9uT2JqZWN0CisuLiBjOnR5cGU6OiBQeUZ1bmN0aW9uT2JqZWN0CiAKICAgIFRoZSBDIHN0cnVjdHVyZSB1c2VkIGZvciBmdW5jdGlvbnMuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUZ1bmN0aW9uX1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5RnVuY3Rpb25fVHlwZQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogTWV0aG9kVHlwZSAoaW4gbW9kdWxlIHR5cGVzKQogCi0gICBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIDpjdHlwZTpgUHlUeXBlT2JqZWN0YCBhbmQgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGZ1bmN0aW9uCisgICBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgYW5kIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBmdW5jdGlvbgogICAgdHlwZS4gIEl0IGlzIGV4cG9zZWQgdG8gUHl0aG9uIHByb2dyYW1tZXJzIGFzIGBgdHlwZXMuRnVuY3Rpb25UeXBlYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RnVuY3Rpb25fQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RnVuY3Rpb25fQ2hlY2soUHlPYmplY3QgKm8pCiAKLSAgIFJldHVybiB0cnVlIGlmICpvKiBpcyBhIGZ1bmN0aW9uIG9iamVjdCAoaGFzIHR5cGUgOmNkYXRhOmBQeUZ1bmN0aW9uX1R5cGVgKS4KKyAgIFJldHVybiB0cnVlIGlmICpvKiBpcyBhIGZ1bmN0aW9uIG9iamVjdCAoaGFzIHR5cGUgOmM6ZGF0YTpgUHlGdW5jdGlvbl9UeXBlYCkuCiAgICBUaGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGdW5jdGlvbl9OZXcoUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpnbG9iYWxzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZ1bmN0aW9uX05ldyhQeU9iamVjdCAqY29kZSwgUHlPYmplY3QgKmdsb2JhbHMpCiAKICAgIFJldHVybiBhIG5ldyBmdW5jdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb2RlIG9iamVjdCAqY29kZSouICpnbG9iYWxzKgogICAgbXVzdCBiZSBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBhY2Nlc3NpYmxlIHRvIHRoZSBmdW5jdGlvbi4KQEAgLTM4LDMwICszOCwzMCBAQAogICAgb2JqZWN0LCB0aGUgYXJndW1lbnQgZGVmYXVsdHMgYW5kIGNsb3N1cmUgYXJlIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RnVuY3Rpb25fR2V0Q29kZShQeU9iamVjdCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RnVuY3Rpb25fR2V0Q29kZShQeU9iamVjdCAqb3ApCiAKICAgIFJldHVybiB0aGUgY29kZSBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGdW5jdGlvbl9HZXRHbG9iYWxzKFB5T2JqZWN0ICpvcCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlGdW5jdGlvbl9HZXRHbG9iYWxzKFB5T2JqZWN0ICpvcCkKIAogICAgUmV0dXJuIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGdW5jdGlvbl9HZXRNb2R1bGUoUHlPYmplY3QgKm9wKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZ1bmN0aW9uX0dldE1vZHVsZShQeU9iamVjdCAqb3ApCiAKICAgIFJldHVybiB0aGUgKl9fbW9kdWxlX18qIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0ICpvcCouIFRoaXMgaXMgbm9ybWFsbHkKICAgIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1vZHVsZSBuYW1lLCBidXQgY2FuIGJlIHNldCB0byBhbnkgb3RoZXIgb2JqZWN0IGJ5CiAgICBQeXRob24gY29kZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlGdW5jdGlvbl9HZXREZWZhdWx0cyhQeU9iamVjdCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMoUHlPYmplY3QgKm9wKQogCiAgICBSZXR1cm4gdGhlIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4gVGhpcyBjYW4gYmUgYQogICAgdHVwbGUgb2YgYXJndW1lbnRzIG9yICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyhQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICpkZWZhdWx0cykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGdW5jdGlvbl9TZXREZWZhdWx0cyhQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICpkZWZhdWx0cykKIAogICAgU2V0IHRoZSBhcmd1bWVudCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGZ1bmN0aW9uIG9iamVjdCAqb3AqLiAqZGVmYXVsdHMqIG11c3QgYmUKICAgICpQeV9Ob25lKiBvciBhIHR1cGxlLgpAQCAtNjksMTMgKzY5LDEzIEBACiAgICBSYWlzZXMgOmV4YzpgU3lzdGVtRXJyb3JgIGFuZCByZXR1cm5zIGBgLTFgYCBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZ1bmN0aW9uX0dldENsb3N1cmUoUHlPYmplY3QgKm9wKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZ1bmN0aW9uX0dldENsb3N1cmUoUHlPYmplY3QgKm9wKQogCiAgICBSZXR1cm4gdGhlIGNsb3N1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4gVGhpcyBjYW4gYmUgKk5VTEwqCiAgICBvciBhIHR1cGxlIG9mIGNlbGwgb2JqZWN0cy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlGdW5jdGlvbl9TZXRDbG9zdXJlKFB5T2JqZWN0ICpvcCwgUHlPYmplY3QgKmNsb3N1cmUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RnVuY3Rpb25fU2V0Q2xvc3VyZShQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICpjbG9zdXJlKQogCiAgICBTZXQgdGhlIGNsb3N1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4gKmNsb3N1cmUqIG11c3QgYmUKICAgICpQeV9Ob25lKiBvciBhIHR1cGxlIG9mIGNlbGwgb2JqZWN0cy4KQEAgLTgzLDEzICs4MywxMyBAQAogICAgUmFpc2VzIDpleGM6YFN5c3RlbUVycm9yYCBhbmQgcmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlGdW5jdGlvbl9HZXRBbm5vdGF0aW9ucyhQeU9iamVjdCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKlB5RnVuY3Rpb25fR2V0QW5ub3RhdGlvbnMoUHlPYmplY3QgKm9wKQogCiAgICBSZXR1cm4gdGhlIGFubm90YXRpb25zIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QgKm9wKi4gVGhpcyBjYW4gYmUgYQogICAgbXV0YWJsZSBkaWN0aW9uYXJ5IG9yICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyhQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICphbm5vdGF0aW9ucykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyhQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICphbm5vdGF0aW9ucykKIAogICAgU2V0IHRoZSBhbm5vdGF0aW9ucyBmb3IgdGhlIGZ1bmN0aW9uIG9iamVjdCAqb3AqLiAqYW5ub3RhdGlvbnMqCiAgICBtdXN0IGJlIGEgZGljdGlvbmFyeSBvciAqUHlfTm9uZSouCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZ2NzdXBwb3J0LnJzdCBiL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CmluZGV4IDFhMjgwYzguLjM4NzVmZjIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9nY3N1cHBvcnQucnN0CkBAIC0yNywzMiArMjcsMzIgQEAKIAogQ29uc3RydWN0b3JzIGZvciBjb250YWluZXIgdHlwZXMgbXVzdCBjb25mb3JtIHRvIHR3byBydWxlczoKIAotIy4gVGhlIG1lbW9yeSBmb3IgdGhlIG9iamVjdCBtdXN0IGJlIGFsbG9jYXRlZCB1c2luZyA6Y2Z1bmM6YFB5T2JqZWN0X0dDX05ld2AKLSAgIG9yIDpjZnVuYzpgUHlPYmplY3RfR0NfTmV3VmFyYC4KKyMuIFRoZSBtZW1vcnkgZm9yIHRoZSBvYmplY3QgbXVzdCBiZSBhbGxvY2F0ZWQgdXNpbmcgOmM6ZnVuYzpgUHlPYmplY3RfR0NfTmV3YAorICAgb3IgOmM6ZnVuYzpgUHlPYmplY3RfR0NfTmV3VmFyYC4KIAogIy4gT25jZSBhbGwgdGhlIGZpZWxkcyB3aGljaCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIG90aGVyIGNvbnRhaW5lcnMgYXJlCi0gICBpbml0aWFsaXplZCwgaXQgbXVzdCBjYWxsIDpjZnVuYzpgUHlPYmplY3RfR0NfVHJhY2tgLgorICAgaW5pdGlhbGl6ZWQsIGl0IG11c3QgY2FsbCA6YzpmdW5jOmBQeU9iamVjdF9HQ19UcmFja2AuCiAKIAotLi4gY2Z1bmN0aW9uOjogVFlQRSogUHlPYmplY3RfR0NfTmV3KFRZUEUsIFB5VHlwZU9iamVjdCAqdHlwZSkKKy4uIGM6ZnVuY3Rpb246OiBUWVBFKiBQeU9iamVjdF9HQ19OZXcoVFlQRSwgUHlUeXBlT2JqZWN0ICp0eXBlKQogCi0gICBBbmFsb2dvdXMgdG8gOmNmdW5jOmBQeU9iamVjdF9OZXdgIGJ1dCBmb3IgY29udGFpbmVyIG9iamVjdHMgd2l0aCB0aGUKKyAgIEFuYWxvZ291cyB0byA6YzpmdW5jOmBQeU9iamVjdF9OZXdgIGJ1dCBmb3IgY29udGFpbmVyIG9iamVjdHMgd2l0aCB0aGUKICAgIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX0dDYCBmbGFnIHNldC4KIAogCi0uLiBjZnVuY3Rpb246OiBUWVBFKiBQeU9iamVjdF9HQ19OZXdWYXIoVFlQRSwgUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogVFlQRSogUHlPYmplY3RfR0NfTmV3VmFyKFRZUEUsIFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBzaXplKQogCi0gICBBbmFsb2dvdXMgdG8gOmNmdW5jOmBQeU9iamVjdF9OZXdWYXJgIGJ1dCBmb3IgY29udGFpbmVyIG9iamVjdHMgd2l0aCB0aGUKKyAgIEFuYWxvZ291cyB0byA6YzpmdW5jOmBQeU9iamVjdF9OZXdWYXJgIGJ1dCBmb3IgY29udGFpbmVyIG9iamVjdHMgd2l0aCB0aGUKICAgIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX0dDYCBmbGFnIHNldC4KIAogCi0uLiBjZnVuY3Rpb246OiBUWVBFKiBQeU9iamVjdF9HQ19SZXNpemUoVFlQRSwgUHlWYXJPYmplY3QgKm9wLCBQeV9zc2l6ZV90IG5ld3NpemUpCisuLiBjOmZ1bmN0aW9uOjogVFlQRSogUHlPYmplY3RfR0NfUmVzaXplKFRZUEUsIFB5VmFyT2JqZWN0ICpvcCwgUHlfc3NpemVfdCBuZXdzaXplKQogCi0gICBSZXNpemUgYW4gb2JqZWN0IGFsbG9jYXRlZCBieSA6Y2Z1bmM6YFB5T2JqZWN0X05ld1ZhcmAuICBSZXR1cm5zIHRoZQorICAgUmVzaXplIGFuIG9iamVjdCBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlPYmplY3RfTmV3VmFyYC4gIFJldHVybnMgdGhlCiAgICByZXNpemVkIG9iamVjdCBvciAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5T2JqZWN0X0dDX1RyYWNrKFB5T2JqZWN0ICpvcCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5T2JqZWN0X0dDX1RyYWNrKFB5T2JqZWN0ICpvcCkKIAogICAgQWRkcyB0aGUgb2JqZWN0ICpvcCogdG8gdGhlIHNldCBvZiBjb250YWluZXIgb2JqZWN0cyB0cmFja2VkIGJ5IHRoZQogICAgY29sbGVjdG9yLiAgVGhlIGNvbGxlY3RvciBjYW4gcnVuIGF0IHVuZXhwZWN0ZWQgdGltZXMgc28gb2JqZWN0cyBtdXN0IGJlCkBAIC02MSw0NCArNjEsNDQgQEAKICAgIGVuZCBvZiB0aGUgY29uc3RydWN0b3IuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBfUHlPYmplY3RfR0NfVFJBQ0soUHlPYmplY3QgKm9wKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgX1B5T2JqZWN0X0dDX1RSQUNLKFB5T2JqZWN0ICpvcCkKIAotICAgQSBtYWNybyB2ZXJzaW9uIG9mIDpjZnVuYzpgUHlPYmplY3RfR0NfVHJhY2tgLiAgSXQgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgorICAgQSBtYWNybyB2ZXJzaW9uIG9mIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX1RyYWNrYC4gIEl0IHNob3VsZCBub3QgYmUgdXNlZCBmb3IKICAgIGV4dGVuc2lvbiBtb2R1bGVzLgogCiBTaW1pbGFybHksIHRoZSBkZWFsbG9jYXRvciBmb3IgdGhlIG9iamVjdCBtdXN0IGNvbmZvcm0gdG8gYSBzaW1pbGFyIHBhaXIgb2YKIHJ1bGVzOgogCiAjLiBCZWZvcmUgZmllbGRzIHdoaWNoIHJlZmVyIHRvIG90aGVyIGNvbnRhaW5lcnMgYXJlIGludmFsaWRhdGVkLAotICAgOmNmdW5jOmBQeU9iamVjdF9HQ19VblRyYWNrYCBtdXN0IGJlIGNhbGxlZC4KKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX1VuVHJhY2tgIG11c3QgYmUgY2FsbGVkLgogCi0jLiBUaGUgb2JqZWN0J3MgbWVtb3J5IG11c3QgYmUgZGVhbGxvY2F0ZWQgdXNpbmcgOmNmdW5jOmBQeU9iamVjdF9HQ19EZWxgLgorIy4gVGhlIG9iamVjdCdzIG1lbW9yeSBtdXN0IGJlIGRlYWxsb2NhdGVkIHVzaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX0RlbGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeU9iamVjdF9HQ19EZWwodm9pZCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU9iamVjdF9HQ19EZWwodm9pZCAqb3ApCiAKLSAgIFJlbGVhc2VzIG1lbW9yeSBhbGxvY2F0ZWQgdG8gYW4gb2JqZWN0IHVzaW5nIDpjZnVuYzpgUHlPYmplY3RfR0NfTmV3YCBvcgotICAgOmNmdW5jOmBQeU9iamVjdF9HQ19OZXdWYXJgLgorICAgUmVsZWFzZXMgbWVtb3J5IGFsbG9jYXRlZCB0byBhbiBvYmplY3QgdXNpbmcgOmM6ZnVuYzpgUHlPYmplY3RfR0NfTmV3YCBvcgorICAgOmM6ZnVuYzpgUHlPYmplY3RfR0NfTmV3VmFyYC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5T2JqZWN0X0dDX1VuVHJhY2sodm9pZCAqb3ApCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU9iamVjdF9HQ19VblRyYWNrKHZvaWQgKm9wKQogCiAgICBSZW1vdmUgdGhlIG9iamVjdCAqb3AqIGZyb20gdGhlIHNldCBvZiBjb250YWluZXIgb2JqZWN0cyB0cmFja2VkIGJ5IHRoZQotICAgY29sbGVjdG9yLiAgTm90ZSB0aGF0IDpjZnVuYzpgUHlPYmplY3RfR0NfVHJhY2tgIGNhbiBiZSBjYWxsZWQgYWdhaW4gb24KKyAgIGNvbGxlY3Rvci4gIE5vdGUgdGhhdCA6YzpmdW5jOmBQeU9iamVjdF9HQ19UcmFja2AgY2FuIGJlIGNhbGxlZCBhZ2FpbiBvbgogICAgdGhpcyBvYmplY3QgdG8gYWRkIGl0IGJhY2sgdG8gdGhlIHNldCBvZiB0cmFja2VkIG9iamVjdHMuICBUaGUgZGVhbGxvY2F0b3IKICAgICg6YXR0cjpgdHBfZGVhbGxvY2AgaGFuZGxlcikgc2hvdWxkIGNhbGwgdGhpcyBmb3IgdGhlIG9iamVjdCBiZWZvcmUgYW55IG9mCiAgICB0aGUgZmllbGRzIHVzZWQgYnkgdGhlIDphdHRyOmB0cF90cmF2ZXJzZWAgaGFuZGxlciBiZWNvbWUgaW52YWxpZC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIF9QeU9iamVjdF9HQ19VTlRSQUNLKFB5T2JqZWN0ICpvcCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIF9QeU9iamVjdF9HQ19VTlRSQUNLKFB5T2JqZWN0ICpvcCkKIAotICAgQSBtYWNybyB2ZXJzaW9uIG9mIDpjZnVuYzpgUHlPYmplY3RfR0NfVW5UcmFja2AuICBJdCBzaG91bGQgbm90IGJlIHVzZWQgZm9yCisgICBBIG1hY3JvIHZlcnNpb24gb2YgOmM6ZnVuYzpgUHlPYmplY3RfR0NfVW5UcmFja2AuICBJdCBzaG91bGQgbm90IGJlIHVzZWQgZm9yCiAgICBleHRlbnNpb24gbW9kdWxlcy4KIAogVGhlIDphdHRyOmB0cF90cmF2ZXJzZWAgaGFuZGxlciBhY2NlcHRzIGEgZnVuY3Rpb24gcGFyYW1ldGVyIG9mIHRoaXMgdHlwZToKIAogCi0uLiBjdHlwZTo6IGludCAoKnZpc2l0cHJvYykoUHlPYmplY3QgKm9iamVjdCwgdm9pZCAqYXJnKQorLi4gYzp0eXBlOjogaW50ICgqdmlzaXRwcm9jKShQeU9iamVjdCAqb2JqZWN0LCB2b2lkICphcmcpCiAKICAgIFR5cGUgb2YgdGhlIHZpc2l0b3IgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSA6YXR0cjpgdHBfdHJhdmVyc2VgIGhhbmRsZXIuCiAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIGFuIG9iamVjdCB0byB0cmF2ZXJzZSBhcyAqb2JqZWN0KiBhbmQKQEAgLTExMCw3ICsxMTAsNyBAQAogVGhlIDphdHRyOmB0cF90cmF2ZXJzZWAgaGFuZGxlciBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlOgogCiAKLS4uIGN0eXBlOjogaW50ICgqdHJhdmVyc2Vwcm9jKShQeU9iamVjdCAqc2VsZiwgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCisuLiBjOnR5cGU6OiBpbnQgKCp0cmF2ZXJzZXByb2MpKFB5T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIAogICAgVHJhdmVyc2FsIGZ1bmN0aW9uIGZvciBhIGNvbnRhaW5lciBvYmplY3QuICBJbXBsZW1lbnRhdGlvbnMgbXVzdCBjYWxsIHRoZQogICAgKnZpc2l0KiBmdW5jdGlvbiBmb3IgZWFjaCBvYmplY3QgZGlyZWN0bHkgY29udGFpbmVkIGJ5ICpzZWxmKiwgd2l0aCB0aGUKQEAgLTExOSwxMiArMTE5LDEyIEBACiAgICBvYmplY3QgYXJndW1lbnQuICBJZiAqdmlzaXQqIHJldHVybnMgYSBub24temVybyB2YWx1ZSB0aGF0IHZhbHVlIHNob3VsZCBiZQogICAgcmV0dXJuZWQgaW1tZWRpYXRlbHkuCiAKLVRvIHNpbXBsaWZ5IHdyaXRpbmcgOmF0dHI6YHRwX3RyYXZlcnNlYCBoYW5kbGVycywgYSA6Y2Z1bmM6YFB5X1ZJU0lUYCBtYWNybyBpcworVG8gc2ltcGxpZnkgd3JpdGluZyA6YXR0cjpgdHBfdHJhdmVyc2VgIGhhbmRsZXJzLCBhIDpjOmZ1bmM6YFB5X1ZJU0lUYCBtYWNybyBpcwogcHJvdmlkZWQuICBJbiBvcmRlciB0byB1c2UgdGhpcyBtYWNybywgdGhlIDphdHRyOmB0cF90cmF2ZXJzZWAgaW1wbGVtZW50YXRpb24KIG11c3QgbmFtZSBpdHMgYXJndW1lbnRzIGV4YWN0bHkgKnZpc2l0KiBhbmQgKmFyZyo6CiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9WSVNJVChQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1ZJU0lUKFB5T2JqZWN0ICpvKQogCiAgICBDYWxsIHRoZSAqdmlzaXQqIGNhbGxiYWNrLCB3aXRoIGFyZ3VtZW50cyAqbyogYW5kICphcmcqLiBJZiAqdmlzaXQqIHJldHVybnMKICAgIGEgbm9uLXplcm8gdmFsdWUsIHRoZW4gcmV0dXJuIGl0LiAgVXNpbmcgdGhpcyBtYWNybywgOmF0dHI6YHRwX3RyYXZlcnNlYApAQCAtMTM4LDE1ICsxMzgsMTUgQEAKICAgICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KIAotVGhlIDphdHRyOmB0cF9jbGVhcmAgaGFuZGxlciBtdXN0IGJlIG9mIHRoZSA6Y3R5cGU6YGlucXVpcnlgIHR5cGUsIG9yICpOVUxMKgorVGhlIDphdHRyOmB0cF9jbGVhcmAgaGFuZGxlciBtdXN0IGJlIG9mIHRoZSA6Yzp0eXBlOmBpbnF1aXJ5YCB0eXBlLCBvciAqTlVMTCoKIGlmIHRoZSBvYmplY3QgaXMgaW1tdXRhYmxlLgogCiAKLS4uIGN0eXBlOjogaW50ICgqaW5xdWlyeSkoUHlPYmplY3QgKnNlbGYpCisuLiBjOnR5cGU6OiBpbnQgKCppbnF1aXJ5KShQeU9iamVjdCAqc2VsZikKIAogICAgRHJvcCByZWZlcmVuY2VzIHRoYXQgbWF5IGhhdmUgY3JlYXRlZCByZWZlcmVuY2UgY3ljbGVzLiAgSW1tdXRhYmxlIG9iamVjdHMKICAgIGRvIG5vdCBoYXZlIHRvIGRlZmluZSB0aGlzIG1ldGhvZCBzaW5jZSB0aGV5IGNhbiBuZXZlciBkaXJlY3RseSBjcmVhdGUKICAgIHJlZmVyZW5jZSBjeWNsZXMuICBOb3RlIHRoYXQgdGhlIG9iamVjdCBtdXN0IHN0aWxsIGJlIHZhbGlkIGFmdGVyIGNhbGxpbmcKLSAgIHRoaXMgbWV0aG9kIChkb24ndCBqdXN0IGNhbGwgOmNmdW5jOmBQeV9ERUNSRUZgIG9uIGEgcmVmZXJlbmNlKS4gIFRoZQorICAgdGhpcyBtZXRob2QgKGRvbid0IGp1c3QgY2FsbCA6YzpmdW5jOmBQeV9ERUNSRUZgIG9uIGEgcmVmZXJlbmNlKS4gIFRoZQogICAgY29sbGVjdG9yIHdpbGwgY2FsbCB0aGlzIG1ldGhvZCBpZiBpdCBkZXRlY3RzIHRoYXQgdGhpcyBvYmplY3QgaXMgaW52b2x2ZWQKICAgIGluIGEgcmVmZXJlbmNlIGN5Y2xlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2dlbi5yc3QgYi9Eb2MvYy1hcGkvZ2VuLnJzdAppbmRleCAwZDM3ODlhLi4zM2NkMjdhIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZ2VuLnJzdAorKysgYi9Eb2MvYy1hcGkvZ2VuLnJzdApAQCAtNywzMSArNywzMSBAQAogCiBHZW5lcmF0b3Igb2JqZWN0cyBhcmUgd2hhdCBQeXRob24gdXNlcyB0byBpbXBsZW1lbnQgZ2VuZXJhdG9yIGl0ZXJhdG9ycy4gVGhleQogYXJlIG5vcm1hbGx5IGNyZWF0ZWQgYnkgaXRlcmF0aW5nIG92ZXIgYSBmdW5jdGlvbiB0aGF0IHlpZWxkcyB2YWx1ZXMsIHJhdGhlcgotdGhhbiBleHBsaWNpdGx5IGNhbGxpbmcgOmNmdW5jOmBQeUdlbl9OZXdgLgordGhhbiBleHBsaWNpdGx5IGNhbGxpbmcgOmM6ZnVuYzpgUHlHZW5fTmV3YC4KIAogCi0uLiBjdHlwZTo6IFB5R2VuT2JqZWN0CisuLiBjOnR5cGU6OiBQeUdlbk9iamVjdAogCiAgICBUaGUgQyBzdHJ1Y3R1cmUgdXNlZCBmb3IgZ2VuZXJhdG9yIG9iamVjdHMuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUdlbl9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUdlbl9UeXBlCiAKICAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGdlbmVyYXRvciBvYmplY3RzCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5R2VuX0NoZWNrKG9iKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUdlbl9DaGVjayhvYikKIAogICAgUmV0dXJuIHRydWUgaWYgKm9iKiBpcyBhIGdlbmVyYXRvciBvYmplY3Q7ICpvYiogbXVzdCBub3QgYmUgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUdlbl9DaGVja0V4YWN0KG9iKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUdlbl9DaGVja0V4YWN0KG9iKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqJ3MgdHlwZSBpcyAqUHlHZW5fVHlwZSogaXMgYSBnZW5lcmF0b3Igb2JqZWN0OyAqb2IqIG11c3Qgbm90CiAgICBiZSAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5R2VuX05ldyhQeUZyYW1lT2JqZWN0ICpmcmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlHZW5fTmV3KFB5RnJhbWVPYmplY3QgKmZyYW1lKQogCiAgICBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBnZW5lcmF0b3Igb2JqZWN0IGJhc2VkIG9uIHRoZSAqZnJhbWUqIG9iamVjdC4gQQogICAgcmVmZXJlbmNlIHRvICpmcmFtZSogaXMgc3RvbGVuIGJ5IHRoaXMgZnVuY3Rpb24uIFRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbXBvcnQucnN0IGIvRG9jL2MtYXBpL2ltcG9ydC5yc3QKaW5kZXggZmY3OTExMi4uY2Y0ODM2MyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ltcG9ydC5yc3QKKysrIGIvRG9jL2MtYXBpL2ltcG9ydC5yc3QKQEAgLTYsMTQgKzYsMTQgQEAKID09PT09PT09PT09PT09PT09CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydE1vZHVsZShjb25zdCBjaGFyICpuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBwYWNrYWdlIHZhcmlhYmxlOyBfX2FsbF9fCiAgICAgICBzaW5nbGU6IF9fYWxsX18gKHBhY2thZ2UgdmFyaWFibGUpCiAgICAgICBzaW5nbGU6IG1vZHVsZXMgKGluIG1vZHVsZSBzeXMpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4YCBiZWxvdywKKyAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeGAgYmVsb3csCiAgICBsZWF2aW5nIHRoZSAqZ2xvYmFscyogYW5kICpsb2NhbHMqIGFyZ3VtZW50cyBzZXQgdG8gKk5VTEwqIGFuZCAqbGV2ZWwqIHNldAogICAgdG8gMC4gIFdoZW4gdGhlICpuYW1lKgogICAgYXJndW1lbnQgY29udGFpbnMgYSBkb3QgKHdoZW4gaXQgc3BlY2lmaWVzIGEgc3VibW9kdWxlIG9mIGEgcGFja2FnZSksIHRoZQpAQCAtMjgsMTggKzI4LDE4IEBACiAgICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyB1c2VzIGFic29sdXRlIGltcG9ydHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2soY29uc3QgY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jayhjb25zdCBjaGFyICpuYW1lKQogCi0gICBUaGlzIHZlcnNpb24gb2YgOmNmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgIGRvZXMgbm90IGJsb2NrLiBJdCdzIGludGVuZGVkCisgICBUaGlzIHZlcnNpb24gb2YgOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYCBkb2VzIG5vdCBibG9jay4gSXQncyBpbnRlbmRlZAogICAgdG8gYmUgdXNlZCBpbiBDIGZ1bmN0aW9ucyB0aGF0IGltcG9ydCBvdGhlciBtb2R1bGVzIHRvIGV4ZWN1dGUgYSBmdW5jdGlvbi4KICAgIFRoZSBpbXBvcnQgbWF5IGJsb2NrIGlmIGFub3RoZXIgdGhyZWFkIGhvbGRzIHRoZSBpbXBvcnQgbG9jay4gVGhlIGZ1bmN0aW9uCi0gICA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tgIG5ldmVyIGJsb2Nrcy4gSXQgZmlyc3QgdHJpZXMgdG8gZmV0Y2gKLSAgIHRoZSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcyBhbmQgZmFsbHMgYmFjayB0byA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZWAKKyAgIDpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tgIG5ldmVyIGJsb2Nrcy4gSXQgZmlyc3QgdHJpZXMgdG8gZmV0Y2gKKyAgIHRoZSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcyBhbmQgZmFsbHMgYmFjayB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgCiAgICB1bmxlc3MgdGhlIGxvY2sgaXMgaGVsZCwgaW4gd2hpY2ggY2FzZSB0aGUgZnVuY3Rpb24gd2lsbCByYWlzZSBhbgogICAgOmV4YzpgSW1wb3J0RXJyb3JgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0KQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IF9faW1wb3J0X18KIApAQCAtNTQsMTAgKzU0LDEwIEBACiAgICB3YXMgZ2l2ZW4uCiAKICAgIEZhaWxpbmcgaW1wb3J0cyByZW1vdmUgaW5jb21wbGV0ZSBtb2R1bGUgb2JqZWN0cywgbGlrZSB3aXRoCi0gICA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZWAuCisgICA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0LCBpbnQgbGV2ZWwpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeU9iamVjdCAqZnJvbWxpc3QsIGludCBsZXZlbCkKIAogICAgSW1wb3J0IGEgbW9kdWxlLiAgVGhpcyBpcyBiZXN0IGRlc2NyaWJlZCBieSByZWZlcnJpbmcgdG8gdGhlIGJ1aWx0LWluIFB5dGhvbgogICAgZnVuY3Rpb24gOmZ1bmM6YF9faW1wb3J0X19gLCBhcyB0aGUgc3RhbmRhcmQgOmZ1bmM6YF9faW1wb3J0X19gIGZ1bmN0aW9uIGNhbGxzCkBAIC02OSw3ICs2OSw3IEBACiAgICB0b3AtbGV2ZWwgcGFja2FnZSwgdW5sZXNzIGEgbm9uLWVtcHR5ICpmcm9tbGlzdCogd2FzIGdpdmVuLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnQoUHlPYmplY3QgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydChQeU9iamVjdCAqbmFtZSkKIAogICAgVGhpcyBpcyBhIGhpZ2hlci1sZXZlbCBpbnRlcmZhY2UgdGhhdCBjYWxscyB0aGUgY3VycmVudCAiaW1wb3J0IGhvb2sKICAgIGZ1bmN0aW9uIiAod2l0aCBhbiBleHBsaWNpdCAqbGV2ZWwqIG9mIDAsIG1lYW5pbmcgYWJzb2x1dGUgaW1wb3J0KS4gIEl0CkBAIC04MCwxMyArODAsMTMgQEAKICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHVzZXMgYWJzb2x1dGUgaW1wb3J0cy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfUmVsb2FkTW9kdWxlKFB5T2JqZWN0ICptKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9SZWxvYWRNb2R1bGUoUHlPYmplY3QgKm0pCiAKICAgIFJlbG9hZCBhIG1vZHVsZS4gIFJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIHJlbG9hZGVkIG1vZHVsZSwgb3IgKk5VTEwqIHdpdGgKICAgIGFuIGV4Y2VwdGlvbiBzZXQgb24gZmFpbHVyZSAodGhlIG1vZHVsZSBzdGlsbCBleGlzdHMgaW4gdGhpcyBjYXNlKS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfQWRkTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0FkZE1vZHVsZShjb25zdCBjaGFyICpuYW1lKQogCiAgICBSZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgY29ycmVzcG9uZGluZyB0byBhIG1vZHVsZSBuYW1lLiAgVGhlICpuYW1lKiBhcmd1bWVudAogICAgbWF5IGJlIG9mIHRoZSBmb3JtIGBgcGFja2FnZS5tb2R1bGVgYC4gRmlyc3QgY2hlY2sgdGhlIG1vZHVsZXMgZGljdGlvbmFyeSBpZgpAQCAtOTYsMTIgKzk2LDEyIEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBsb2FkIG9yIGltcG9ydCB0aGUgbW9kdWxlOyBpZiB0aGUgbW9kdWxlIHdhc24ndCBhbHJlYWR5Ci0gICAgICBsb2FkZWQsIHlvdSB3aWxsIGdldCBhbiBlbXB0eSBtb2R1bGUgb2JqZWN0LiBVc2UgOmNmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgCisgICAgICBsb2FkZWQsIHlvdSB3aWxsIGdldCBhbiBlbXB0eSBtb2R1bGUgb2JqZWN0LiBVc2UgOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYAogICAgICAgb3Igb25lIG9mIGl0cyB2YXJpYW50cyB0byBpbXBvcnQgYSBtb2R1bGUuICBQYWNrYWdlIHN0cnVjdHVyZXMgaW1wbGllZCBieSBhCiAgICAgICBkb3R0ZWQgbmFtZSBmb3IgKm5hbWUqIGFyZSBub3QgY3JlYXRlZCBpZiBub3QgYWxyZWFkeSBwcmVzZW50LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBjb21waWxlCiAKQEAgLTExMCwzMiArMTEwLDYxIEBACiAgICA6ZnVuYzpgY29tcGlsZWAsIGxvYWQgdGhlIG1vZHVsZS4gIFJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBvYmplY3QsCiAgICBvciAqTlVMTCogd2l0aCBhbiBleGNlcHRpb24gc2V0IGlmIGFuIGVycm9yIG9jY3VycmVkLiAgKm5hbWUqCiAgICBpcyByZW1vdmVkIGZyb20gOmF0dHI6YHN5cy5tb2R1bGVzYCBpbiBlcnJvciBjYXNlcywgZXZlbiBpZiAqbmFtZSogd2FzIGFscmVhZHkKLSAgIGluIDphdHRyOmBzeXMubW9kdWxlc2Agb24gZW50cnkgdG8gOmNmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZWAuICBMZWF2aW5nCisgICBpbiA6YXR0cjpgc3lzLm1vZHVsZXNgIG9uIGVudHJ5IHRvIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlYC4gIExlYXZpbmcKICAgIGluY29tcGxldGVseSBpbml0aWFsaXplZCBtb2R1bGVzIGluIDphdHRyOmBzeXMubW9kdWxlc2AgaXMgZGFuZ2Vyb3VzLCBhcyBpbXBvcnRzIG9mCiAgICBzdWNoIG1vZHVsZXMgaGF2ZSBubyB3YXkgdG8ga25vdyB0aGF0IHRoZSBtb2R1bGUgb2JqZWN0IGlzIGFuIHVua25vd24gKGFuZAogICAgcHJvYmFibHkgZGFtYWdlZCB3aXRoIHJlc3BlY3QgdG8gdGhlIG1vZHVsZSBhdXRob3IncyBpbnRlbnRzKSBzdGF0ZS4KIAorICAgVGhlIG1vZHVsZSdzIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIHdpbGwgYmUgc2V0IHRvIHRoZSBjb2RlIG9iamVjdCdzCisgICA6YzptZW1iZXI6YGNvX2ZpbGVuYW1lYC4KKwogICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlbG9hZCB0aGUgbW9kdWxlIGlmIGl0IHdhcyBhbHJlYWR5IGltcG9ydGVkLiAgU2VlCi0gICA6Y2Z1bmM6YFB5SW1wb3J0X1JlbG9hZE1vZHVsZWAgZm9yIHRoZSBpbnRlbmRlZCB3YXkgdG8gcmVsb2FkIGEgbW9kdWxlLgorICAgOmM6ZnVuYzpgUHlJbXBvcnRfUmVsb2FkTW9kdWxlYCBmb3IgdGhlIGludGVuZGVkIHdheSB0byByZWxvYWQgYSBtb2R1bGUuCiAKICAgIElmICpuYW1lKiBwb2ludHMgdG8gYSBkb3R0ZWQgbmFtZSBvZiB0aGUgZm9ybSBgYHBhY2thZ2UubW9kdWxlYGAsIGFueSBwYWNrYWdlCiAgICBzdHJ1Y3R1cmVzIG5vdCBhbHJlYWR5IGNyZWF0ZWQgd2lsbCBzdGlsbCBub3QgYmUgY3JlYXRlZC4KIAorICAgU2VlIGFsc28gOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeGAgYW5kCisgICA6YzpmdW5jOmBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXNgLgogCi0uLiBjZnVuY3Rpb246OiBsb25nIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyKCkKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbywgY2hhciAqcGF0aG5hbWUpCisKKyAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVgLCBidXQgdGhlIDphdHRyOmBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mCisgICB0aGUgbW9kdWxlIG9iamVjdCBpcyBzZXQgdG8gKnBhdGhuYW1lKiBpZiBpdCBpcyBub24tYGBOVUxMYGAuCisKKyAgIFNlZSBhbHNvIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lc2AuCisKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSwgY2hhciAqY3BhdGhuYW1lKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXhgLCBidXQgdGhlIDphdHRyOmBfX2NhY2hlZF9fYAorICAgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgb2JqZWN0IGlzIHNldCB0byAqY3BhdGhuYW1lKiBpZiBpdCBpcworICAgbm9uLWBgTlVMTGBgLiAgT2YgdGhlIHRocmVlIGZ1bmN0aW9ucywgdGhpcyBpcyB0aGUgcHJlZmVycmVkIG9uZSB0byB1c2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBjOmZ1bmN0aW9uOjogbG9uZyBQeUltcG9ydF9HZXRNYWdpY051bWJlcigpCiAKICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciBQeXRob24gYnl0ZWNvZGUgZmlsZXMgKGEuay5hLiA6ZmlsZTpgLnB5Y2AgYW5kCiAgICA6ZmlsZTpgLnB5b2AgZmlsZXMpLiAgVGhlIG1hZ2ljIG51bWJlciBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgZmlyc3QgZm91ciBieXRlcwogICAgb2YgdGhlIGJ5dGVjb2RlIGZpbGUsIGluIGxpdHRsZS1lbmRpYW4gYnl0ZSBvcmRlci4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpCisuLiBjOmZ1bmN0aW9uOjogY29uc3QgY2hhciAqIFB5SW1wb3J0X0dldE1hZ2ljVGFnKCkKKworICAgUmV0dXJuIHRoZSBtYWdpYyB0YWcgc3RyaW5nIGZvciA6cGVwOmAzMTQ3YCBmb3JtYXQgUHl0aG9uIGJ5dGVjb2RlIGZpbGUKKyAgIG5hbWVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCkKIAogICAgUmV0dXJuIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHRoZSBtb2R1bGUgYWRtaW5pc3RyYXRpb24gKGEuay5hLgogICAgYGBzeXMubW9kdWxlc2BgKS4gIE5vdGUgdGhhdCB0aGlzIGlzIGEgcGVyLWludGVycHJldGVyIHZhcmlhYmxlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9HZXRJbXBvcnRlcihQeU9iamVjdCAqcGF0aCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfR2V0SW1wb3J0ZXIoUHlPYmplY3QgKnBhdGgpCiAKICAgIFJldHVybiBhbiBpbXBvcnRlciBvYmplY3QgZm9yIGEgOmRhdGE6YHN5cy5wYXRoYC86YXR0cjpgcGtnLl9fcGF0aF9fYCBpdGVtCiAgICAqcGF0aCosIHBvc3NpYmx5IGJ5IGZldGNoaW5nIGl0IGZyb20gdGhlIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAKQEAgLTE0Niw0MSArMTc1LDQxIEBACiAgICB0byB0aGUgaW1wb3J0ZXIgb2JqZWN0LgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgX1B5SW1wb3J0X0luaXQoKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgX1B5SW1wb3J0X0luaXQoKQogCiAgICBJbml0aWFsaXplIHRoZSBpbXBvcnQgbWVjaGFuaXNtLiAgRm9yIGludGVybmFsIHVzZSBvbmx5LgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlJbXBvcnRfQ2xlYW51cCgpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUltcG9ydF9DbGVhbnVwKCkKIAogICAgRW1wdHkgdGhlIG1vZHVsZSB0YWJsZS4gIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIF9QeUltcG9ydF9GaW5pKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIF9QeUltcG9ydF9GaW5pKCkKIAogICAgRmluYWxpemUgdGhlIGltcG9ydCBtZWNoYW5pc20uICBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uKGNoYXIgKiwgY2hhciAqKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbihjaGFyICosIGNoYXIgKikKIAogICAgRm9yIGludGVybmFsIHVzZSBvbmx5LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24oY2hhciAqLCBjaGFyICopCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbihjaGFyICosIGNoYXIgKikKIAogICAgRm9yIGludGVybmFsIHVzZSBvbmx5LgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNoYXIgKm5hbWUpCiAKICAgIExvYWQgYSBmcm96ZW4gbW9kdWxlIG5hbWVkICpuYW1lKi4gIFJldHVybiBgYDFgYCBmb3Igc3VjY2VzcywgYGAwYGAgaWYgdGhlCiAgICBtb2R1bGUgaXMgbm90IGZvdW5kLCBhbmQgYGAtMWBgIHdpdGggYW4gZXhjZXB0aW9uIHNldCBpZiB0aGUgaW5pdGlhbGl6YXRpb24KICAgIGZhaWxlZC4gIFRvIGFjY2VzcyB0aGUgaW1wb3J0ZWQgbW9kdWxlIG9uIGEgc3VjY2Vzc2Z1bCBsb2FkLCB1c2UKLSAgIDpjZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYC4gIChOb3RlIHRoZSBtaXNub21lciAtLS0gdGhpcyBmdW5jdGlvbiB3b3VsZAorICAgOmM6ZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYC4gIChOb3RlIHRoZSBtaXNub21lciAtLS0gdGhpcyBmdW5jdGlvbiB3b3VsZAogICAgcmVsb2FkIHRoZSBtb2R1bGUgaWYgaXQgd2FzIGFscmVhZHkgaW1wb3J0ZWQuKQogCiAKLS4uIGN0eXBlOjogc3RydWN0IF9mcm96ZW4KKy4uIGM6dHlwZTo6IHN0cnVjdCBfZnJvemVuCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBmcmVlemUgdXRpbGl0eQogCkBAIC0xOTYsMzAgKzIyNSwzMCBAQAogICAgICAgfTsKIAogCi0uLiBjdmFyOjogc3RydWN0IF9mcm96ZW4qIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMKKy4uIGM6dmFyOjogc3RydWN0IF9mcm96ZW4qIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXMKIAotICAgVGhpcyBwb2ludGVyIGlzIGluaXRpYWxpemVkIHRvIHBvaW50IHRvIGFuIGFycmF5IG9mIDpjdHlwZTpgc3RydWN0IF9mcm96ZW5gCisgICBUaGlzIHBvaW50ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2YgOmM6dHlwZTpgc3RydWN0IF9mcm96ZW5gCiAgICByZWNvcmRzLCB0ZXJtaW5hdGVkIGJ5IG9uZSB3aG9zZSBtZW1iZXJzIGFyZSBhbGwgKk5VTEwqIG9yIHplcm8uICBXaGVuIGEgZnJvemVuCiAgICBtb2R1bGUgaXMgaW1wb3J0ZWQsIGl0IGlzIHNlYXJjaGVkIGluIHRoaXMgdGFibGUuICBUaGlyZC1wYXJ0eSBjb2RlIGNvdWxkIHBsYXkKICAgIHRyaWNrcyB3aXRoIHRoaXMgdG8gcHJvdmlkZSBhIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYihjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCogKCppbml0ZnVuYykodm9pZCkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QqICgqaW5pdGZ1bmMpKHZvaWQpKQogCiAgICBBZGQgYSBzaW5nbGUgbW9kdWxlIHRvIHRoZSBleGlzdGluZyB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLiAgVGhpcyBpcyBhCi0gICBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA6Y2Z1bmM6YFB5SW1wb3J0X0V4dGVuZEluaXR0YWJgLCByZXR1cm5pbmcgYGAtMWBgIGlmCisgICBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA6YzpmdW5jOmBQeUltcG9ydF9FeHRlbmRJbml0dGFiYCwgcmV0dXJuaW5nIGBgLTFgYCBpZgogICAgdGhlIHRhYmxlIGNvdWxkIG5vdCBiZSBleHRlbmRlZC4gIFRoZSBuZXcgbW9kdWxlIGNhbiBiZSBpbXBvcnRlZCBieSB0aGUgbmFtZQogICAgKm5hbWUqLCBhbmQgdXNlcyB0aGUgZnVuY3Rpb24gKmluaXRmdW5jKiBhcyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkCiAgICBvbiB0aGUgZmlyc3QgYXR0ZW1wdGVkIGltcG9ydC4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKLSAgIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisgICA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4KIAogCi0uLiBjdHlwZTo6IHN0cnVjdCBfaW5pdHRhYgorLi4gYzp0eXBlOjogc3RydWN0IF9pbml0dGFiCiAKICAgIFN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIGVudHJ5IGluIHRoZSBsaXN0IG9mIGJ1aWx0LWluIG1vZHVsZXMuICBFYWNoIG9mCiAgICB0aGVzZSBzdHJ1Y3R1cmVzIGdpdmVzIHRoZSBuYW1lIGFuZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgYSBtb2R1bGUgYnVpbHQKICAgIGludG8gdGhlIGludGVycHJldGVyLiAgUHJvZ3JhbXMgd2hpY2ggZW1iZWQgUHl0aG9uIG1heSB1c2UgYW4gYXJyYXkgb2YgdGhlc2UKLSAgIHN0cnVjdHVyZXMgaW4gY29uanVuY3Rpb24gd2l0aCA6Y2Z1bmM6YFB5SW1wb3J0X0V4dGVuZEluaXR0YWJgIHRvIHByb3ZpZGUKKyAgIHN0cnVjdHVyZXMgaW4gY29uanVuY3Rpb24gd2l0aCA6YzpmdW5jOmBQeUltcG9ydF9FeHRlbmRJbml0dGFiYCB0byBwcm92aWRlCiAgICBhZGRpdGlvbmFsIGJ1aWx0LWluIG1vZHVsZXMuICBUaGUgc3RydWN0dXJlIGlzIGRlZmluZWQgaW4KICAgIDpmaWxlOmBJbmNsdWRlL2ltcG9ydC5oYCBhczo6CiAKQEAgLTIyOSwxMSArMjU4LDExIEBACiAgICAgICB9OwogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUltcG9ydF9FeHRlbmRJbml0dGFiKHN0cnVjdCBfaW5pdHRhYiAqbmV3dGFiKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUltcG9ydF9FeHRlbmRJbml0dGFiKHN0cnVjdCBfaW5pdHRhYiAqbmV3dGFiKQogCiAgICBBZGQgYSBjb2xsZWN0aW9uIG9mIG1vZHVsZXMgdG8gdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuICBUaGUgKm5ld3RhYioKICAgIGFycmF5IG11c3QgZW5kIHdpdGggYSBzZW50aW5lbCBlbnRyeSB3aGljaCBjb250YWlucyAqTlVMTCogZm9yIHRoZSA6YXR0cjpgbmFtZWAKICAgIGZpZWxkOyBmYWlsdXJlIHRvIHByb3ZpZGUgdGhlIHNlbnRpbmVsIHZhbHVlIGNhbiByZXN1bHQgaW4gYSBtZW1vcnkgZmF1bHQuCiAgICBSZXR1cm5zIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIGlmIGluc3VmZmljaWVudCBtZW1vcnkgY291bGQgYmUgYWxsb2NhdGVkIHRvCiAgICBleHRlbmQgdGhlIGludGVybmFsIHRhYmxlLiAgSW4gdGhlIGV2ZW50IG9mIGZhaWx1cmUsIG5vIG1vZHVsZXMgYXJlIGFkZGVkIHRvIHRoZQotICAgaW50ZXJuYWwgdGFibGUuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCisgICBpbnRlcm5hbCB0YWJsZS4gIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW5pdC5yc3QgYi9Eb2MvYy1hcGkvaW5pdC5yc3QKaW5kZXggN2U5ZDQ0Yy4uZTUwYzQxNyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2luaXQucnN0CisrKyBiL0RvYy9jLWFwaS9pbml0LnJzdApAQCAtMTIsMTMgKzEyLDExIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9Jbml0aWFsaXplKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0luaXRpYWxpemUoKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IFB5X1NldFByb2dyYW1OYW1lKCkKICAgICAgIHNpbmdsZTogUHlFdmFsX0luaXRUaHJlYWRzKCkKLSAgICAgIHNpbmdsZTogUHlFdmFsX1JlbGVhc2VMb2NrKCkKLSAgICAgIHNpbmdsZTogUHlFdmFsX0FjcXVpcmVMb2NrKCkKICAgICAgIHNpbmdsZTogbW9kdWxlcyAoaW4gbW9kdWxlIHN5cykKICAgICAgIHNpbmdsZTogcGF0aCAoaW4gbW9kdWxlIHN5cykKICAgICAgIG1vZHVsZTogYnVpbHRpbnMKQEAgLTMxLDM4ICsyOSwzNyBAQAogCiAgICBJbml0aWFsaXplIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBJbiBhbiBhcHBsaWNhdGlvbiBlbWJlZGRpbmcgIFB5dGhvbiwgdGhpcwogICAgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgYW55IG90aGVyIFB5dGhvbi9DIEFQSSBmdW5jdGlvbnM7IHdpdGggdGhlCi0gICBleGNlcHRpb24gb2YgOmNmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAsIDpjZnVuYzpgUHlFdmFsX0luaXRUaHJlYWRzYCwKLSAgIDpjZnVuYzpgUHlFdmFsX1JlbGVhc2VMb2NrYCwgYW5kIDpjZnVuYzpgUHlFdmFsX0FjcXVpcmVMb2NrYC4gVGhpcyBpbml0aWFsaXplcworICAgZXhjZXB0aW9uIG9mIDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCBhbmQgOmM6ZnVuYzpgUHlfU2V0UGF0aGAuICBUaGlzIGluaXRpYWxpemVzCiAgICB0aGUgdGFibGUgb2YgbG9hZGVkIG1vZHVsZXMgKGBgc3lzLm1vZHVsZXNgYCksIGFuZCBjcmVhdGVzIHRoZSBmdW5kYW1lbnRhbAogICAgbW9kdWxlcyA6bW9kOmBidWlsdGluc2AsIDptb2Q6YF9fbWFpbl9fYCBhbmQgOm1vZDpgc3lzYC4gIEl0IGFsc28gaW5pdGlhbGl6ZXMKICAgIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGggKGBgc3lzLnBhdGhgYCkuIEl0IGRvZXMgbm90IHNldCBgYHN5cy5hcmd2YGA7IHVzZQotICAgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgIGZvciB0aGF0LiAgVGhpcyBpcyBhIG5vLW9wIHdoZW4gY2FsbGVkIGZvciBhIHNlY29uZCB0aW1lCi0gICAod2l0aG91dCBjYWxsaW5nIDpjZnVuYzpgUHlfRmluYWxpemVgIGZpcnN0KS4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZTsgaXQgaXMgYQorICAgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCBmb3IgdGhhdC4gIFRoaXMgaXMgYSBuby1vcCB3aGVuIGNhbGxlZCBmb3IgYSBzZWNvbmQgdGltZQorICAgKHdpdGhvdXQgY2FsbGluZyA6YzpmdW5jOmBQeV9GaW5hbGl6ZWAgZmlyc3QpLiAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlOyBpdCBpcyBhCiAgICBmYXRhbCBlcnJvciBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9Jbml0aWFsaXplRXgoaW50IGluaXRzaWdzKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfSW5pdGlhbGl6ZUV4KGludCBpbml0c2lncykKIAotICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAgaWYgKmluaXRzaWdzKiBpcyAxLiBJZgorICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgIGlmICppbml0c2lncyogaXMgMS4gSWYKICAgICppbml0c2lncyogaXMgMCwgaXQgc2tpcHMgaW5pdGlhbGl6YXRpb24gcmVnaXN0cmF0aW9uIG9mIHNpZ25hbCBoYW5kbGVycywgd2hpY2gKICAgIG1pZ2h0IGJlIHVzZWZ1bCB3aGVuIFB5dGhvbiBpcyBlbWJlZGRlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfSXNJbml0aWFsaXplZCgpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X0lzSW5pdGlhbGl6ZWQoKQogCiAgICBSZXR1cm4gdHJ1ZSAobm9uemVybykgd2hlbiB0aGUgUHl0aG9uIGludGVycHJldGVyIGhhcyBiZWVuIGluaXRpYWxpemVkLCBmYWxzZQotICAgKHplcm8pIGlmIG5vdC4gIEFmdGVyIDpjZnVuYzpgUHlfRmluYWxpemVgIGlzIGNhbGxlZCwgdGhpcyByZXR1cm5zIGZhbHNlIHVudGlsCi0gICA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgIGlzIGNhbGxlZCBhZ2Fpbi4KKyAgICh6ZXJvKSBpZiBub3QuICBBZnRlciA6YzpmdW5jOmBQeV9GaW5hbGl6ZWAgaXMgY2FsbGVkLCB0aGlzIHJldHVybnMgZmFsc2UgdW50aWwKKyAgIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgIGlzIGNhbGxlZCBhZ2Fpbi4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5X0ZpbmFsaXplKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0ZpbmFsaXplKCkKIAotICAgVW5kbyBhbGwgaW5pdGlhbGl6YXRpb25zIG1hZGUgYnkgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCBhbmQgc3Vic2VxdWVudCB1c2Ugb2YKKyAgIFVuZG8gYWxsIGluaXRpYWxpemF0aW9ucyBtYWRlIGJ5IDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgIGFuZCBzdWJzZXF1ZW50IHVzZSBvZgogICAgUHl0aG9uL0MgQVBJIGZ1bmN0aW9ucywgYW5kIGRlc3Ryb3kgYWxsIHN1Yi1pbnRlcnByZXRlcnMgKHNlZQotICAgOmNmdW5jOmBQeV9OZXdJbnRlcnByZXRlcmAgYmVsb3cpIHRoYXQgd2VyZSBjcmVhdGVkIGFuZCBub3QgeWV0IGRlc3Ryb3llZCBzaW5jZQotICAgdGhlIGxhc3QgY2FsbCB0byA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgLiAgSWRlYWxseSwgdGhpcyBmcmVlcyBhbGwgbWVtb3J5CisgICA6YzpmdW5jOmBQeV9OZXdJbnRlcnByZXRlcmAgYmVsb3cpIHRoYXQgd2VyZSBjcmVhdGVkIGFuZCBub3QgeWV0IGRlc3Ryb3llZCBzaW5jZQorICAgdGhlIGxhc3QgY2FsbCB0byA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4gIElkZWFsbHksIHRoaXMgZnJlZXMgYWxsIG1lbW9yeQogICAgYWxsb2NhdGVkIGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGlzIGlzIGEgbm8tb3Agd2hlbiBjYWxsZWQgZm9yIGEgc2Vjb25kCi0gICB0aW1lICh3aXRob3V0IGNhbGxpbmcgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCBhZ2FpbiBmaXJzdCkuICBUaGVyZSBpcyBubyByZXR1cm4KKyAgIHRpbWUgKHdpdGhvdXQgY2FsbGluZyA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCBhZ2FpbiBmaXJzdCkuICBUaGVyZSBpcyBubyByZXR1cm4KICAgIHZhbHVlOyBlcnJvcnMgZHVyaW5nIGZpbmFsaXphdGlvbiBhcmUgaWdub3JlZC4KIAogICAgVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuIGVtYmVkZGluZyBhcHBsaWNhdGlvbgpAQCAtODEsMjYgKzc4LDI2IEBACiAgICBwbGVhc2UgcmVwb3J0IGl0KS4gIE1lbW9yeSB0aWVkIHVwIGluIGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIGlzIG5vdAogICAgZnJlZWQuICBTb21lIG1lbW9yeSBhbGxvY2F0ZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMgbWF5IG5vdCBiZSBmcmVlZC4gIFNvbWUKICAgIGV4dGVuc2lvbnMgbWF5IG5vdCB3b3JrIHByb3Blcmx5IGlmIHRoZWlyIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXMgY2FsbGVkIG1vcmUKLSAgIHRoYW4gb25jZTsgdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGFwcGxpY2F0aW9uIGNhbGxzIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAgYW5kCi0gICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBtb3JlIHRoYW4gb25jZS4KKyAgIHRoYW4gb25jZTsgdGhpcyBjYW4gaGFwcGVuIGlmIGFuIGFwcGxpY2F0aW9uIGNhbGxzIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgIGFuZAorICAgOmM6ZnVuYzpgUHlfRmluYWxpemVgIG1vcmUgdGhhbiBvbmNlLgogCiAKIFByb2Nlc3Mtd2lkZSBwYXJhbWV0ZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PQogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHJvZ3JhbU5hbWUod2NoYXJfdCAqbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1NldFByb2dyYW1OYW1lKHdjaGFyX3QgKm5hbWUpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogUHlfSW5pdGlhbGl6ZSgpCiAgICAgICBzaW5nbGU6IG1haW4oKQogICAgICAgc2luZ2xlOiBQeV9HZXRQYXRoKCkKIAotICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgIGlzIGNhbGxlZCBmb3IKKyAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAgaXMgY2FsbGVkIGZvcgogICAgdGhlIGZpcnN0IHRpbWUsIGlmIGl0IGlzIGNhbGxlZCBhdCBhbGwuICBJdCB0ZWxscyB0aGUgaW50ZXJwcmV0ZXIgdGhlIHZhbHVlCi0gICBvZiB0aGUgYGBhcmd2WzBdYGAgYXJndW1lbnQgdG8gdGhlIDpjZnVuYzpgbWFpbmAgZnVuY3Rpb24gb2YgdGhlIHByb2dyYW0KKyAgIG9mIHRoZSBgYGFyZ3ZbMF1gYCBhcmd1bWVudCB0byB0aGUgOmM6ZnVuYzpgbWFpbmAgZnVuY3Rpb24gb2YgdGhlIHByb2dyYW0KICAgIChjb252ZXJ0ZWQgdG8gd2lkZSBjaGFyYWN0ZXJzKS4KLSAgIFRoaXMgaXMgdXNlZCBieSA6Y2Z1bmM6YFB5X0dldFBhdGhgIGFuZCBzb21lIG90aGVyIGZ1bmN0aW9ucyBiZWxvdyB0byBmaW5kCisgICBUaGlzIGlzIHVzZWQgYnkgOmM6ZnVuYzpgUHlfR2V0UGF0aGAgYW5kIHNvbWUgb3RoZXIgZnVuY3Rpb25zIGJlbG93IHRvIGZpbmQKICAgIHRoZSBQeXRob24gcnVuLXRpbWUgbGlicmFyaWVzIHJlbGF0aXZlIHRvIHRoZSBpbnRlcnByZXRlciBleGVjdXRhYmxlLiAgVGhlCiAgICBkZWZhdWx0IHZhbHVlIGlzIGBgJ3B5dGhvbidgYC4gIFRoZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYQogICAgemVyby10ZXJtaW5hdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyBpbiBzdGF0aWMgc3RvcmFnZSB3aG9zZSBjb250ZW50cyB3aWxsIG5vdApAQCAtMTA4LDIwICsxMDUsMjAgQEAKICAgIGludGVycHJldGVyIHdpbGwgY2hhbmdlIHRoZSBjb250ZW50cyBvZiB0aGlzIHN0b3JhZ2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogd2NoYXIqIFB5X0dldFByb2dyYW1OYW1lKCkKKy4uIGM6ZnVuY3Rpb246OiB3Y2hhciogUHlfR2V0UHJvZ3JhbU5hbWUoKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogUHlfU2V0UHJvZ3JhbU5hbWUoKQogCi0gICBSZXR1cm4gdGhlIHByb2dyYW0gbmFtZSBzZXQgd2l0aCA6Y2Z1bmM6YFB5X1NldFByb2dyYW1OYW1lYCwgb3IgdGhlIGRlZmF1bHQuCisgICBSZXR1cm4gdGhlIHByb2dyYW0gbmFtZSBzZXQgd2l0aCA6YzpmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAsIG9yIHRoZSBkZWZhdWx0LgogICAgVGhlIHJldHVybmVkIHN0cmluZyBwb2ludHMgaW50byBzdGF0aWMgc3RvcmFnZTsgdGhlIGNhbGxlciBzaG91bGQgbm90IG1vZGlmeSBpdHMKICAgIHZhbHVlLgogCiAKLS4uIGNmdW5jdGlvbjo6IHdjaGFyX3QqIFB5X0dldFByZWZpeCgpCisuLiBjOmZ1bmN0aW9uOjogd2NoYXJfdCogUHlfR2V0UHJlZml4KCkKIAogICAgUmV0dXJuIHRoZSAqcHJlZml4KiBmb3IgaW5zdGFsbGVkIHBsYXRmb3JtLWluZGVwZW5kZW50IGZpbGVzLiBUaGlzIGlzIGRlcml2ZWQKICAgIHRocm91Z2ggYSBudW1iZXIgb2YgY29tcGxpY2F0ZWQgcnVsZXMgZnJvbSB0aGUgcHJvZ3JhbSBuYW1lIHNldCB3aXRoCi0gICA6Y2Z1bmM6YFB5X1NldFByb2dyYW1OYW1lYCBhbmQgc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGZvciBleGFtcGxlLCBpZiB0aGUKKyAgIDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCBhbmQgc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGZvciBleGFtcGxlLCBpZiB0aGUKICAgIHByb2dyYW0gbmFtZSBpcyBgYCcvdXNyL2xvY2FsL2Jpbi9weXRob24nYGAsIHRoZSBwcmVmaXggaXMgYGAnL3Vzci9sb2NhbCdgYC4gVGhlCiAgICByZXR1cm5lZCBzdHJpbmcgcG9pbnRzIGludG8gc3RhdGljIHN0b3JhZ2U7IHRoZSBjYWxsZXIgc2hvdWxkIG5vdCBtb2RpZnkgaXRzCiAgICB2YWx1ZS4gIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIDptYWtldmFyOmBwcmVmaXhgIHZhcmlhYmxlIGluIHRoZSB0b3AtbGV2ZWwKQEAgLTEzMCwxMSArMTI3LDExIEBACiAgICBJdCBpcyBvbmx5IHVzZWZ1bCBvbiBVbml4LiAgU2VlIGFsc28gdGhlIG5leHQgZnVuY3Rpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogd2NoYXJfdCogUHlfR2V0RXhlY1ByZWZpeCgpCisuLiBjOmZ1bmN0aW9uOjogd2NoYXJfdCogUHlfR2V0RXhlY1ByZWZpeCgpCiAKICAgIFJldHVybiB0aGUgKmV4ZWMtcHJlZml4KiBmb3IgaW5zdGFsbGVkIHBsYXRmb3JtLSpkZXBlbmRlbnQqIGZpbGVzLiAgVGhpcyBpcwogICAgZGVyaXZlZCB0aHJvdWdoIGEgbnVtYmVyIG9mIGNvbXBsaWNhdGVkIHJ1bGVzIGZyb20gdGhlIHByb2dyYW0gbmFtZSBzZXQgd2l0aAotICAgOmNmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAgYW5kIHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBmb3IgZXhhbXBsZSwgaWYgdGhlCisgICA6YzpmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAgYW5kIHNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzOyBmb3IgZXhhbXBsZSwgaWYgdGhlCiAgICBwcm9ncmFtIG5hbWUgaXMgYGAnL3Vzci9sb2NhbC9iaW4vcHl0aG9uJ2BgLCB0aGUgZXhlYy1wcmVmaXggaXMKICAgIGBgJy91c3IvbG9jYWwnYGAuICBUaGUgcmV0dXJuZWQgc3RyaW5nIHBvaW50cyBpbnRvIHN0YXRpYyBzdG9yYWdlOyB0aGUgY2FsbGVyCiAgICBzaG91bGQgbm90IG1vZGlmeSBpdHMgdmFsdWUuICBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSA6bWFrZXZhcjpgZXhlY19wcmVmaXhgCkBAIC0xNjUsNyArMTYyLDcgQEAKICAgIHBsYXRmb3JtLgogCiAKLS4uIGNmdW5jdGlvbjo6IHdjaGFyX3QqIFB5X0dldFByb2dyYW1GdWxsUGF0aCgpCisuLiBjOmZ1bmN0aW9uOjogd2NoYXJfdCogUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBQeV9TZXRQcm9ncmFtTmFtZSgpCkBAIC0xNzMsMTkgKzE3MCwyMCBAQAogCiAgICBSZXR1cm4gdGhlIGZ1bGwgcHJvZ3JhbSBuYW1lIG9mIHRoZSBQeXRob24gZXhlY3V0YWJsZTsgdGhpcyBpcyAgY29tcHV0ZWQgYXMgYQogICAgc2lkZS1lZmZlY3Qgb2YgZGVyaXZpbmcgdGhlIGRlZmF1bHQgbW9kdWxlIHNlYXJjaCBwYXRoICBmcm9tIHRoZSBwcm9ncmFtIG5hbWUKLSAgIChzZXQgYnkgOmNmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAgYWJvdmUpLiBUaGUgcmV0dXJuZWQgc3RyaW5nIHBvaW50cyBpbnRvCisgICAoc2V0IGJ5IDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCBhYm92ZSkuIFRoZSByZXR1cm5lZCBzdHJpbmcgcG9pbnRzIGludG8KICAgIHN0YXRpYyBzdG9yYWdlOyB0aGUgY2FsbGVyIHNob3VsZCBub3QgbW9kaWZ5IGl0cyB2YWx1ZS4gIFRoZSB2YWx1ZSBpcyBhdmFpbGFibGUKICAgIHRvIFB5dGhvbiBjb2RlIGFzIGBgc3lzLmV4ZWN1dGFibGVgYC4KIAogCi0uLiBjZnVuY3Rpb246OiB3Y2hhcl90KiBQeV9HZXRQYXRoKCkKKy4uIGM6ZnVuY3Rpb246OiB3Y2hhcl90KiBQeV9HZXRQYXRoKCkKIAogICAgLi4gaW5kZXg6OgogICAgICAgdHJpcGxlOiBtb2R1bGU7IHNlYXJjaDsgcGF0aAogICAgICAgc2luZ2xlOiBwYXRoIChpbiBtb2R1bGUgc3lzKQorICAgICAgc2luZ2xlOiBQeV9TZXRQYXRoKCkKIAogICAgUmV0dXJuIHRoZSBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aDsgdGhpcyBpcyBjb21wdXRlZCBmcm9tIHRoZSBwcm9ncmFtIG5hbWUKLSAgIChzZXQgYnkgOmNmdW5jOmBQeV9TZXRQcm9ncmFtTmFtZWAgYWJvdmUpIGFuZCBzb21lIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyAgIChzZXQgYnkgOmM6ZnVuYzpgUHlfU2V0UHJvZ3JhbU5hbWVgIGFib3ZlKSBhbmQgc29tZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICBUaGUgcmV0dXJuZWQgc3RyaW5nIGNvbnNpc3RzIG9mIGEgc2VyaWVzIG9mIGRpcmVjdG9yeSBuYW1lcyBzZXBhcmF0ZWQgYnkgYQogICAgcGxhdGZvcm0gZGVwZW5kZW50IGRlbGltaXRlciBjaGFyYWN0ZXIuICBUaGUgZGVsaW1pdGVyIGNoYXJhY3RlciBpcyBgYCc6J2BgCiAgICBvbiBVbml4IGFuZCBNYWMgT1MgWCwgYGAnOydgYCBvbiBXaW5kb3dzLiAgVGhlIHJldHVybmVkIHN0cmluZyBwb2ludHMgaW50bwpAQCAtMTk3LDcgKzE5NSwyNiBAQAogICAgLi4gWFhYIHNob3VsZCBnaXZlIHRoZSBleGFjdCBydWxlcwogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5X0dldFZlcnNpb24oKQorLi4gYzpmdW5jdGlvbjo6ICB2b2lkIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqKQorCisgICAuLiBpbmRleDo6CisgICAgICB0cmlwbGU6IG1vZHVsZTsgc2VhcmNoOyBwYXRoCisgICAgICBzaW5nbGU6IHBhdGggKGluIG1vZHVsZSBzeXMpCisgICAgICBzaW5nbGU6IFB5X0dldFBhdGgoKQorCisgICBTZXQgdGhlIGRlZmF1bHQgbW9kdWxlIHNlYXJjaCBwYXRoLiAgSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlCisgICA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCwgdGhlbiA6YzpmdW5jOmBQeV9HZXRQYXRoYCB3b24ndCBhdHRlbXB0IHRvIGNvbXB1dGUgYQorICAgZGVmYXVsdCBzZWFyY2ggcGF0aCBidXQgdXNlcyB0aGUgb25lIHByb3ZpZGVkIGluc3RlYWQuICBUaGlzIGlzIHVzZWZ1bCBpZgorICAgUHl0aG9uIGlzIGVtYmVkZGVkIGJ5IGFuIGFwcGxpY2F0aW9uIHRoYXQgaGFzIGZ1bGwga25vd2xlZGdlIG9mIHRoZSBsb2NhdGlvbgorICAgb2YgYWxsIG1vZHVsZXMuICBUaGUgcGF0aCBjb21wb25lbnRzIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucy4KKworICAgVGhpcyBhbHNvIGNhdXNlcyA6ZGF0YTpgc3lzLmV4ZWN1dGFibGVgIHRvIGJlIHNldCBvbmx5IHRvIHRoZSByYXcgcHJvZ3JhbQorICAgbmFtZSAoc2VlIDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCkgYW5kIGZvciA6ZGF0YTpgc3lzLnByZWZpeGAgYW5kCisgICA6ZGF0YTpgc3lzLmV4ZWNfcHJlZml4YCB0byBiZSBlbXB0eS4gIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gbW9kaWZ5IHRoZXNlCisgICBpZiByZXF1aXJlZCBhZnRlciBjYWxsaW5nIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLgorCisKKy4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeV9HZXRWZXJzaW9uKCkKIAogICAgUmV0dXJuIHRoZSB2ZXJzaW9uIG9mIHRoaXMgUHl0aG9uIGludGVycHJldGVyLiAgVGhpcyBpcyBhIHN0cmluZyB0aGF0IGxvb2tzCiAgICBzb21ldGhpbmcgbGlrZSA6OgpAQCAtMjEyLDcgKzIyOSw3IEBACiAgICBtb2RpZnkgaXRzIHZhbHVlLiAgVGhlIHZhbHVlIGlzIGF2YWlsYWJsZSB0byBQeXRob24gY29kZSBhcyA6ZGF0YTpgc3lzLnZlcnNpb25gLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5X0dldFBsYXRmb3JtKCkKKy4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeV9HZXRQbGF0Zm9ybSgpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBwbGF0Zm9ybSAoaW4gbW9kdWxlIHN5cykKIApAQCAtMjI1LDcgKzI0Miw3IEBACiAgICB0byBQeXRob24gY29kZSBhcyBgYHN5cy5wbGF0Zm9ybWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5X0dldENvcHlyaWdodCgpCisuLiBjOmZ1bmN0aW9uOjogY29uc3QgY2hhciogUHlfR2V0Q29weXJpZ2h0KCkKIAogICAgUmV0dXJuIHRoZSBvZmZpY2lhbCBjb3B5cmlnaHQgc3RyaW5nIGZvciB0aGUgY3VycmVudCBQeXRob24gdmVyc2lvbiwgZm9yIGV4YW1wbGUKIApAQCAtMjM3LDcgKzI1NCw3IEBACiAgICB2YWx1ZS4gIFRoZSB2YWx1ZSBpcyBhdmFpbGFibGUgdG8gUHl0aG9uIGNvZGUgYXMgYGBzeXMuY29weXJpZ2h0YGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogY29uc3QgY2hhciogUHlfR2V0Q29tcGlsZXIoKQorLi4gYzpmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5X0dldENvbXBpbGVyKCkKIAogICAgUmV0dXJuIGFuIGluZGljYXRpb24gb2YgdGhlIGNvbXBpbGVyIHVzZWQgdG8gYnVpbGQgdGhlIGN1cnJlbnQgUHl0aG9uIHZlcnNpb24sCiAgICBpbiBzcXVhcmUgYnJhY2tldHMsIGZvciBleGFtcGxlOjoKQEAgLTI1MSw3ICsyNjgsNyBAQAogICAgYGBzeXMudmVyc2lvbmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5X0dldEJ1aWxkSW5mbygpCisuLiBjOmZ1bmN0aW9uOjogY29uc3QgY2hhciogUHlfR2V0QnVpbGRJbmZvKCkKIAogICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXF1ZW5jZSBudW1iZXIgYW5kIGJ1aWxkIGRhdGUgYW5kIHRpbWUgIG9mIHRoZQogICAgY3VycmVudCBQeXRob24gaW50ZXJwcmV0ZXIgaW5zdGFuY2UsIGZvciBleGFtcGxlIDo6CkBAIC0yNjUsNyArMjgyLDcgQEAKICAgIGBgc3lzLnZlcnNpb25gYC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3ZFeChpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YsIGludCB1cGRhdGVwYXRoKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlTeXNfU2V0QXJndkV4KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndiwgaW50IHVwZGF0ZXBhdGgpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogbWFpbigpCkBAIC0yNzMsMTIgKzI5MCwxMiBAQAogICAgICAgc2luZ2xlOiBhcmd2IChpbiBtb2R1bGUgc3lzKQogCiAgICBTZXQgOmRhdGE6YHN5cy5hcmd2YCBiYXNlZCBvbiAqYXJnYyogYW5kICphcmd2Ki4gIFRoZXNlIHBhcmFtZXRlcnMgYXJlCi0gICBzaW1pbGFyIHRvIHRob3NlIHBhc3NlZCB0byB0aGUgcHJvZ3JhbSdzIDpjZnVuYzpgbWFpbmAgZnVuY3Rpb24gd2l0aCB0aGUKKyAgIHNpbWlsYXIgdG8gdGhvc2UgcGFzc2VkIHRvIHRoZSBwcm9ncmFtJ3MgOmM6ZnVuYzpgbWFpbmAgZnVuY3Rpb24gd2l0aCB0aGUKICAgIGRpZmZlcmVuY2UgdGhhdCB0aGUgZmlyc3QgZW50cnkgc2hvdWxkIHJlZmVyIHRvIHRoZSBzY3JpcHQgZmlsZSB0byBiZQogICAgZXhlY3V0ZWQgcmF0aGVyIHRoYW4gdGhlIGV4ZWN1dGFibGUgaG9zdGluZyB0aGUgUHl0aG9uIGludGVycHJldGVyLiAgSWYgdGhlcmUKICAgIGlzbid0IGEgc2NyaXB0IHRoYXQgd2lsbCBiZSBydW4sIHRoZSBmaXJzdCBlbnRyeSBpbiAqYXJndiogY2FuIGJlIGFuIGVtcHR5CiAgICBzdHJpbmcuICBJZiB0aGlzIGZ1bmN0aW9uIGZhaWxzIHRvIGluaXRpYWxpemUgOmRhdGE6YHN5cy5hcmd2YCwgYSBmYXRhbAotICAgY29uZGl0aW9uIGlzIHNpZ25hbGxlZCB1c2luZyA6Y2Z1bmM6YFB5X0ZhdGFsRXJyb3JgLgorICAgY29uZGl0aW9uIGlzIHNpZ25hbGxlZCB1c2luZyA6YzpmdW5jOmBQeV9GYXRhbEVycm9yYC4KIAogICAgSWYgKnVwZGF0ZXBhdGgqIGlzIHplcm8sIHRoaXMgaXMgYWxsIHRoZSBmdW5jdGlvbiBkb2VzLiAgSWYgKnVwZGF0ZXBhdGgqCiAgICBpcyBub24temVybywgdGhlIGZ1bmN0aW9uIGFsc28gbW9kaWZpZXMgOmRhdGE6YHN5cy5wYXRoYCBhY2NvcmRpbmcgdG8gdGhlCkBAIC0zMDAsNyArMzE3LDcgQEAKIAogICAgICAgT24gdmVyc2lvbnMgYmVmb3JlIDMuMS4zLCB5b3UgY2FuIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IGJ5IG1hbnVhbGx5CiAgICAgICBwb3BwaW5nIHRoZSBmaXJzdCA6ZGF0YTpgc3lzLnBhdGhgIGVsZW1lbnQgYWZ0ZXIgaGF2aW5nIGNhbGxlZAotICAgICAgOmNmdW5jOmBQeVN5c19TZXRBcmd2YCwgZm9yIGV4YW1wbGUgdXNpbmc6OgorICAgICAgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndmAsIGZvciBleGFtcGxlIHVzaW5nOjoKIAogICAgICAgICAgUHlSdW5fU2ltcGxlU3RyaW5nKCJpbXBvcnQgc3lzOyBzeXMucGF0aC5wb3AoMClcbiIpOwogCkBAIC0zMTAsMTIgKzMyNywxMiBAQAogICAgICAgY2hlY2sgdy8gR3VpZG8uCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1NldEFyZ3YoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCi0gICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHdpdGggKnVwZGF0ZXBhdGgqIHNldCB0byAxLgorICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjOmZ1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aCAqdXBkYXRlcGF0aCogc2V0IHRvIDEuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKmhvbWUpCiAKICAgIFNldCB0aGUgZGVmYXVsdCAiaG9tZSIgZGlyZWN0b3J5LCB0aGF0IGlzLCB0aGUgbG9jYXRpb24gb2YgdGhlIHN0YW5kYXJkCiAgICBQeXRob24gbGlicmFyaWVzLiAgU2VlIDplbnZ2YXI6YFBZVEhPTkhPTUVgIGZvciB0aGUgbWVhbmluZyBvZiB0aGUKQEAgLTMyNywxMCArMzQ0LDEwIEBACiAgICB0aGlzIHN0b3JhZ2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogd19jaGFyKiBQeV9HZXRQeXRob25Ib21lKCkKKy4uIGM6ZnVuY3Rpb246OiB3X2NoYXIqIFB5X0dldFB5dGhvbkhvbWUoKQogCiAgICBSZXR1cm4gdGhlIGRlZmF1bHQgImhvbWUiLCB0aGF0IGlzLCB0aGUgdmFsdWUgc2V0IGJ5IGEgcHJldmlvdXMgY2FsbCB0bwotICAgOmNmdW5jOmBQeV9TZXRQeXRob25Ib21lYCwgb3IgdGhlIHZhbHVlIG9mIHRoZSA6ZW52dmFyOmBQWVRIT05IT01FYAorICAgOmM6ZnVuYzpgUHlfU2V0UHl0aG9uSG9tZWAsIG9yIHRoZSB2YWx1ZSBvZiB0aGUgOmVudnZhcjpgUFlUSE9OSE9NRWAKICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIGl0IGlzIHNldC4KIAogCkBAIC0zNTIsMTIgKzM2OSwxMiBAQAogdHdvIHRocmVhZHMgc2ltdWx0YW5lb3VzbHkgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHNhbWUgb2JqZWN0LCB0aGUKIHJlZmVyZW5jZSBjb3VudCBjb3VsZCBlbmQgdXAgYmVpbmcgaW5jcmVtZW50ZWQgb25seSBvbmNlIGluc3RlYWQgb2YgdHdpY2UuCiAKLS4uIGluZGV4Ojogc2luZ2xlOiBzZXRjaGVja2ludGVydmFsKCkgKGluIG1vZHVsZSBzeXMpCisuLiBpbmRleDo6IHNpbmdsZTogc2V0c3dpdGNoaW50ZXJ2YWwoKSAoaW4gbW9kdWxlIHN5cykKIAogVGhlcmVmb3JlLCB0aGUgcnVsZSBleGlzdHMgdGhhdCBvbmx5IHRoZSB0aHJlYWQgdGhhdCBoYXMgYWNxdWlyZWQgdGhlCiA6dGVybTpgR0lMYCBtYXkgb3BlcmF0ZSBvbiBQeXRob24gb2JqZWN0cyBvciBjYWxsIFB5dGhvbi9DIEFQSSBmdW5jdGlvbnMuCiBJbiBvcmRlciB0byBlbXVsYXRlIGNvbmN1cnJlbmN5IG9mIGV4ZWN1dGlvbiwgdGhlIGludGVycHJldGVyIHJlZ3VsYXJseQotdHJpZXMgdG8gc3dpdGNoIHRocmVhZHMgKHNlZSA6ZnVuYzpgc3lzLnNldGNoZWNraW50ZXJ2YWxgKS4gIFRoZSBsb2NrIGlzIGFsc28KK3RyaWVzIHRvIHN3aXRjaCB0aHJlYWRzIChzZWUgOmZ1bmM6YHN5cy5zZXRzd2l0Y2hpbnRlcnZhbGApLiAgVGhlIGxvY2sgaXMgYWxzbwogcmVsZWFzZWQgYXJvdW5kIHBvdGVudGlhbGx5IGJsb2NraW5nIEkvTyBvcGVyYXRpb25zIGxpa2UgcmVhZGluZyBvciB3cml0aW5nCiBhIGZpbGUsIHNvIHRoYXQgb3RoZXIgUHl0aG9uIHRocmVhZHMgY2FuIHJ1biBpbiB0aGUgbWVhbnRpbWUuCiAKQEAgLTM2Niw5ICszODMsOSBAQAogICAgc2luZ2xlOiBQeVRocmVhZFN0YXRlCiAKIFRoZSBQeXRob24gaW50ZXJwcmV0ZXIga2VlcHMgc29tZSB0aHJlYWQtc3BlY2lmaWMgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24KLWluc2lkZSBhIGRhdGEgc3RydWN0dXJlIGNhbGxlZCA6Y3R5cGU6YFB5VGhyZWFkU3RhdGVgLiAgVGhlcmUncyBhbHNvIG9uZQotZ2xvYmFsIHZhcmlhYmxlIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IDpjdHlwZTpgUHlUaHJlYWRTdGF0ZWA6IGl0IGNhbgotYmUgcmV0cmlldmVkIHVzaW5nIDpjZnVuYzpgUHlUaHJlYWRTdGF0ZV9HZXRgLgoraW5zaWRlIGEgZGF0YSBzdHJ1Y3R1cmUgY2FsbGVkIDpjOnR5cGU6YFB5VGhyZWFkU3RhdGVgLiAgVGhlcmUncyBhbHNvIG9uZQorZ2xvYmFsIHZhcmlhYmxlIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IDpjOnR5cGU6YFB5VGhyZWFkU3RhdGVgOiBpdCBjYW4KK2JlIHJldHJpZXZlZCB1c2luZyA6YzpmdW5jOmBQeVRocmVhZFN0YXRlX0dldGAuCiAKIFJlbGVhc2luZyB0aGUgR0lMIGZyb20gZXh0ZW5zaW9uIGNvZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM5Miw4ICs0MDksOCBAQAogICAgc2luZ2xlOiBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICBzaW5nbGU6IFB5X0VORF9BTExPV19USFJFQURTCiAKLVRoZSA6Y21hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCBtYWNybyBvcGVucyBhIG5ldyBibG9jayBhbmQgZGVjbGFyZXMgYQotaGlkZGVuIGxvY2FsIHZhcmlhYmxlOyB0aGUgOmNtYWNybzpgUHlfRU5EX0FMTE9XX1RIUkVBRFNgIG1hY3JvIGNsb3NlcyB0aGUKK1RoZSA6YzptYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AgbWFjcm8gb3BlbnMgYSBuZXcgYmxvY2sgYW5kIGRlY2xhcmVzIGEKK2hpZGRlbiBsb2NhbCB2YXJpYWJsZTsgdGhlIDpjOm1hY3JvOmBQeV9FTkRfQUxMT1dfVEhSRUFEU2AgbWFjcm8gY2xvc2VzIHRoZQogYmxvY2suICBUaGVzZSB0d28gbWFjcm9zIGFyZSBzdGlsbCBhdmFpbGFibGUgd2hlbiBQeXRob24gaXMgY29tcGlsZWQgd2l0aG91dAogdGhyZWFkIHN1cHBvcnQgKHRoZXkgc2ltcGx5IGhhdmUgYW4gZW1wdHkgZXhwYW5zaW9uKS4KIApAQCAtNDQzLDcgKzQ2MCw3IEBACiBBUEkuICBXaGVuIHlvdSBhcmUgZG9uZSwgeW91IHNob3VsZCByZXNldCB0aGUgdGhyZWFkIHN0YXRlIHBvaW50ZXIsIHJlbGVhc2UKIHRoZSBHSUwsIGFuZCBmaW5hbGx5IGZyZWUgdGhlIHRocmVhZCBzdGF0ZSBkYXRhIHN0cnVjdHVyZS4KIAotVGhlIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZCA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgZnVuY3Rpb25zIGRvCitUaGUgOmM6ZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZCA6YzpmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGZ1bmN0aW9ucyBkbwogYWxsIG9mIHRoZSBhYm92ZSBhdXRvbWF0aWNhbGx5LiAgVGhlIHR5cGljYWwgaWRpb20gZm9yIGNhbGxpbmcgaW50byBQeXRob24KIGZyb20gYSBDIHRocmVhZCBpczo6CiAKQEAgLTQ1NywxNCArNDc0LDE0IEBACiAgICAvKiBSZWxlYXNlIHRoZSB0aHJlYWQuIE5vIFB5dGhvbiBBUEkgYWxsb3dlZCBiZXlvbmQgdGhpcyBwb2ludC4gKi8KICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnc3RhdGUpOwogCi1Ob3RlIHRoYXQgdGhlIDpjZnVuYzpgUHlHSUxTdGF0ZV9cKmAgZnVuY3Rpb25zIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9uZSBnbG9iYWwKLWludGVycHJldGVyIChjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgOmNmdW5jOmBQeV9Jbml0aWFsaXplYCkuICBQeXRob24KK05vdGUgdGhhdCB0aGUgOmM6ZnVuYzpgUHlHSUxTdGF0ZV9cKmAgZnVuY3Rpb25zIGFzc3VtZSB0aGVyZSBpcyBvbmx5IG9uZSBnbG9iYWwKK2ludGVycHJldGVyIChjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWApLiAgUHl0aG9uCiBzdXBwb3J0cyB0aGUgY3JlYXRpb24gb2YgYWRkaXRpb25hbCBpbnRlcnByZXRlcnMgKHVzaW5nCi06Y2Z1bmM6YFB5X05ld0ludGVycHJldGVyYCksIGJ1dCBtaXhpbmcgbXVsdGlwbGUgaW50ZXJwcmV0ZXJzIGFuZCB0aGUKLTpjZnVuYzpgUHlHSUxTdGF0ZV9cKmAgQVBJIGlzIHVuc3VwcG9ydGVkLgorOmM6ZnVuYzpgUHlfTmV3SW50ZXJwcmV0ZXJgKSwgYnV0IG1peGluZyBtdWx0aXBsZSBpbnRlcnByZXRlcnMgYW5kIHRoZQorOmM6ZnVuYzpgUHlHSUxTdGF0ZV9cKmAgQVBJIGlzIHVuc3VwcG9ydGVkLgogCiBBbm90aGVyIGltcG9ydGFudCB0aGluZyB0byBub3RlIGFib3V0IHRocmVhZHMgaXMgdGhlaXIgYmVoYXZpb3VyIGluIHRoZSBmYWNlCi1vZiB0aGUgQyA6Y2Z1bmM6YGZvcmtgIGNhbGwuIE9uIG1vc3Qgc3lzdGVtcyB3aXRoIDpjZnVuYzpgZm9ya2AsIGFmdGVyIGEKK29mIHRoZSBDIDpjOmZ1bmM6YGZvcmtgIGNhbGwuIE9uIG1vc3Qgc3lzdGVtcyB3aXRoIDpjOmZ1bmM6YGZvcmtgLCBhZnRlciBhCiBwcm9jZXNzIGZvcmtzIG9ubHkgdGhlIHRocmVhZCB0aGF0IGlzc3VlZCB0aGUgZm9yayB3aWxsIGV4aXN0LiBUaGF0IGFsc28KIG1lYW5zIGFueSBsb2NrcyBoZWxkIGJ5IG90aGVyIHRocmVhZHMgd2lsbCBuZXZlciBiZSByZWxlYXNlZC4gUHl0aG9uIHNvbHZlcwogdGhpcyBmb3IgOmZ1bmM6YG9zLmZvcmtgIGJ5IGFjcXVpcmluZyB0aGUgbG9ja3MgaXQgdXNlcyBpbnRlcm5hbGx5IGJlZm9yZQpAQCAtNDcyLDEyICs0ODksMTIgQEAKIDpyZWY6YGxvY2stb2JqZWN0c2AgaW4gdGhlIGNoaWxkLiBXaGVuIGV4dGVuZGluZyBvciBlbWJlZGRpbmcgUHl0aG9uLCB0aGVyZQogaXMgbm8gd2F5IHRvIGluZm9ybSBQeXRob24gb2YgYWRkaXRpb25hbCAobm9uLVB5dGhvbikgbG9ja3MgdGhhdCBuZWVkIHRvIGJlCiBhY3F1aXJlZCBiZWZvcmUgb3IgcmVzZXQgYWZ0ZXIgYSBmb3JrLiBPUyBmYWNpbGl0aWVzIHN1Y2ggYXMKLTpjZnVuYzpgcHRocmVhZF9hdGZvcmtgIHdvdWxkIG5lZWQgdG8gYmUgdXNlZCB0byBhY2NvbXBsaXNoIHRoZSBzYW1lIHRoaW5nLgotQWRkaXRpb25hbGx5LCB3aGVuIGV4dGVuZGluZyBvciBlbWJlZGRpbmcgUHl0aG9uLCBjYWxsaW5nIDpjZnVuYzpgZm9ya2AKKzpjOmZ1bmM6YHB0aHJlYWRfYXRmb3JrYCB3b3VsZCBuZWVkIHRvIGJlIHVzZWQgdG8gYWNjb21wbGlzaCB0aGUgc2FtZSB0aGluZy4KK0FkZGl0aW9uYWxseSwgd2hlbiBleHRlbmRpbmcgb3IgZW1iZWRkaW5nIFB5dGhvbiwgY2FsbGluZyA6YzpmdW5jOmBmb3JrYAogZGlyZWN0bHkgcmF0aGVyIHRoYW4gdGhyb3VnaCA6ZnVuYzpgb3MuZm9ya2AgKGFuZCByZXR1cm5pbmcgdG8gb3IgY2FsbGluZwogaW50byBQeXRob24pIG1heSByZXN1bHQgaW4gYSBkZWFkbG9jayBieSBvbmUgb2YgUHl0aG9uJ3MgaW50ZXJuYWwgbG9ja3MKIGJlaW5nIGhlbGQgYnkgYSB0aHJlYWQgdGhhdCBpcyBkZWZ1bmN0IGFmdGVyIHRoZSBmb3JrLgotOmNmdW5jOmBQeU9TX0FmdGVyRm9ya2AgdHJpZXMgdG8gcmVzZXQgdGhlIG5lY2Vzc2FyeSBsb2NrcywgYnV0IGlzIG5vdAorOmM6ZnVuYzpgUHlPU19BZnRlckZvcmtgIHRyaWVzIHRvIHJlc2V0IHRoZSBuZWNlc3NhcnkgbG9ja3MsIGJ1dCBpcyBub3QKIGFsd2F5cyBhYmxlIHRvLgogCiAKQEAgLTQ4Nyw3ICs1MDQsNyBAQAogVGhlc2UgYXJlIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgdHlwZXMgYW5kIGZ1bmN0aW9ucyB3aGVuIHdyaXRpbmcgQyBleHRlbnNpb24KIGNvZGUsIG9yIHdoZW4gZW1iZWRkaW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXI6CiAKLS4uIGN0eXBlOjogUHlJbnRlcnByZXRlclN0YXRlCisuLiBjOnR5cGU6OiBQeUludGVycHJldGVyU3RhdGUKIAogICAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBzaGFyZWQgYnkgYSBudW1iZXIgb2YgY29vcGVyYXRpbmcKICAgIHRocmVhZHMuICBUaHJlYWRzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBpbnRlcnByZXRlciBzaGFyZSB0aGVpciBtb2R1bGUKQEAgLTUwMCwzMSArNTE3LDMwIEBACiAgICBpbnRlcnByZXRlciB0aGV5IGJlbG9uZy4KIAogCi0uLiBjdHlwZTo6IFB5VGhyZWFkU3RhdGUKKy4uIGM6dHlwZTo6IFB5VGhyZWFkU3RhdGUKIAogICAgVGhpcyBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiBhIHNpbmdsZSB0aHJlYWQuICBUaGUgb25seSBwdWJsaWMKLSAgIGRhdGEgbWVtYmVyIGlzIDpjdHlwZTpgUHlJbnRlcnByZXRlclN0YXRlIFwqYDphdHRyOmBpbnRlcnBgLCB3aGljaCBwb2ludHMgdG8KKyAgIGRhdGEgbWVtYmVyIGlzIDpjOnR5cGU6YFB5SW50ZXJwcmV0ZXJTdGF0ZSBcKmA6YXR0cjpgaW50ZXJwYCwgd2hpY2ggcG9pbnRzIHRvCiAgICB0aGlzIHRocmVhZCdzIGludGVycHJldGVyIHN0YXRlLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0luaXRUaHJlYWRzKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9Jbml0VGhyZWFkcygpCiAKICAgIC4uIGluZGV4OjoKLSAgICAgIHNpbmdsZTogUHlFdmFsX1JlbGVhc2VMb2NrKCkKKyAgICAgIHNpbmdsZTogUHlFdmFsX0FjcXVpcmVUaHJlYWQoKQogICAgICAgc2luZ2xlOiBQeUV2YWxfUmVsZWFzZVRocmVhZCgpCiAgICAgICBzaW5nbGU6IFB5RXZhbF9TYXZlVGhyZWFkKCkKICAgICAgIHNpbmdsZTogUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKQogCiAgICBJbml0aWFsaXplIGFuZCBhY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gIEl0IHNob3VsZCBiZSBjYWxsZWQgaW4gdGhlCiAgICBtYWluIHRocmVhZCBiZWZvcmUgY3JlYXRpbmcgYSBzZWNvbmQgdGhyZWFkIG9yIGVuZ2FnaW5nIGluIGFueSBvdGhlciB0aHJlYWQKLSAgIG9wZXJhdGlvbnMgc3VjaCBhcyA6Y2Z1bmM6YFB5RXZhbF9SZWxlYXNlTG9ja2Agb3IKLSAgIGBgUHlFdmFsX1JlbGVhc2VUaHJlYWQodHN0YXRlKWBgLiBJdCBpcyBub3QgbmVlZGVkIGJlZm9yZSBjYWxsaW5nCi0gICA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBvciA6Y2Z1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkYC4KKyAgIG9wZXJhdGlvbnMgc3VjaCBhcyBgYFB5RXZhbF9SZWxlYXNlVGhyZWFkKHRzdGF0ZSlgYC4gSXQgaXMgbm90IG5lZWRlZCBiZWZvcmUKKyAgIGNhbGxpbmcgOmM6ZnVuYzpgUHlFdmFsX1NhdmVUaHJlYWRgIG9yIDpjOmZ1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkYC4KIAotICAgLi4gaW5kZXg6OiBzaW5nbGU6IFB5X0luaXRpYWxpemUoKQorICAgVGhpcyBpcyBhIG5vLW9wIHdoZW4gY2FsbGVkIGZvciBhIHNlY29uZCB0aW1lLgogCi0gICBUaGlzIGlzIGEgbm8tb3Agd2hlbiBjYWxsZWQgZm9yIGEgc2Vjb25kIHRpbWUuICBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbgotICAgYmVmb3JlIGNhbGxpbmcgOmNmdW5jOmBQeV9Jbml0aWFsaXplYC4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGlzIGZ1bmN0aW9uIGNhbm5vdCBiZSBjYWxsZWQgYmVmb3JlIDpjOmZ1bmM6YFB5X0luaXRpYWxpemUoKWAgYW55bW9yZS4KIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IF90aHJlYWQKIApAQCAtNTM3LDcgKzU1Myw3IEBACiAgICAgICB3aGVuIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrLCBpdCBhbHNvIGFjcXVpcmVzCiAgICAgICBpdC4gIEJlZm9yZSB0aGUgUHl0aG9uIDptb2Q6YF90aHJlYWRgIG1vZHVsZSBjcmVhdGVzIGEgbmV3IHRocmVhZCwga25vd2luZwogICAgICAgdGhhdCBlaXRoZXIgaXQgaGFzIHRoZSBsb2NrIG9yIHRoZSBsb2NrIGhhc24ndCBiZWVuIGNyZWF0ZWQgeWV0LCBpdCBjYWxscwotICAgICAgOmNmdW5jOmBQeUV2YWxfSW5pdFRocmVhZHNgLiAgV2hlbiB0aGlzIGNhbGwgcmV0dXJucywgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CisgICAgICA6YzpmdW5jOmBQeUV2YWxfSW5pdFRocmVhZHNgLiAgV2hlbiB0aGlzIGNhbGwgcmV0dXJucywgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICAgICB0aGUgbG9jayBoYXMgYmVlbiBjcmVhdGVkIGFuZCB0aGF0IHRoZSBjYWxsaW5nIHRocmVhZCBoYXMgYWNxdWlyZWQgaXQuCiAKICAgICAgIEl0IGlzICoqbm90Kiogc2FmZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gd2hlbiBpdCBpcyB1bmtub3duIHdoaWNoIHRocmVhZCAoaWYKQEAgLTU0NiwxNSArNTYyLDE1IEBACiAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkKCkKIAotICAgUmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIDpjZnVuYzpgUHlFdmFsX0luaXRUaHJlYWRzYCBoYXMgYmVlbiBjYWxsZWQuICBUaGlzCisgICBSZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUgaWYgOmM6ZnVuYzpgUHlFdmFsX0luaXRUaHJlYWRzYCBoYXMgYmVlbiBjYWxsZWQuICBUaGlzCiAgICBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgaG9sZGluZyB0aGUgR0lMLCBhbmQgdGhlcmVmb3JlIGNhbiBiZSB1c2VkIHRvCiAgICBhdm9pZCBjYWxscyB0byB0aGUgbG9ja2luZyBBUEkgd2hlbiBydW5uaW5nIHNpbmdsZS10aHJlYWRlZC4gIFRoaXMgZnVuY3Rpb24gaXMKICAgIG5vdCBhdmFpbGFibGUgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlFdmFsX1NhdmVUaHJlYWQoKQorLi4gYzpmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5RXZhbF9TYXZlVGhyZWFkKCkKIAogICAgUmVsZWFzZSB0aGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgKGlmIGl0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHRocmVhZAogICAgc3VwcG9ydCBpcyBlbmFibGVkKSBhbmQgcmVzZXQgdGhlIHRocmVhZCBzdGF0ZSB0byAqTlVMTCosIHJldHVybmluZyB0aGUKQEAgLTU2Myw3ICs1NzksNyBAQAogICAgd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuKQogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogCiAgICBBY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayAoaWYgaXQgaGFzIGJlZW4gY3JlYXRlZCBhbmQgdGhyZWFkCiAgICBzdXBwb3J0IGlzIGVuYWJsZWQpIGFuZCBzZXQgdGhlIHRocmVhZCBzdGF0ZSB0byAqdHN0YXRlKiwgd2hpY2ggbXVzdCBub3QgYmUKQEAgLTU3MiwyMyArNTg4LDIzIEBACiAgICB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4pCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9HZXQoKQorLi4gYzpmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5VGhyZWFkU3RhdGVfR2V0KCkKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZS4gIFRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBtdXN0IGJlIGhlbGQuCiAgICBXaGVuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSBpcyAqTlVMTCosIHRoaXMgaXNzdWVzIGEgZmF0YWwgZXJyb3IgKHNvIHRoYXQKICAgIHRoZSBjYWxsZXIgbmVlZG4ndCBjaGVjayBmb3IgKk5VTEwqKS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeVRocmVhZFN0YXRlX1N3YXAoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQorLi4gYzpmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5VGhyZWFkU3RhdGVfU3dhcChQeVRocmVhZFN0YXRlICp0c3RhdGUpCiAKICAgIFN3YXAgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHdpdGggdGhlIHRocmVhZCBzdGF0ZSBnaXZlbiBieSB0aGUgYXJndW1lbnQKICAgICp0c3RhdGUqLCB3aGljaCBtYXkgYmUgKk5VTEwqLiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZAogICAgYW5kIGlzIG5vdCByZWxlYXNlZC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZUluaXRUaHJlYWRzKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZUluaXRUaHJlYWRzKCkKIAotICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSA6Y2Z1bmM6YFB5T1NfQWZ0ZXJGb3JrYCB0byBlbnN1cmUgdGhhdCBuZXdseQorICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSA6YzpmdW5jOmBQeU9TX0FmdGVyRm9ya2AgdG8gZW5zdXJlIHRoYXQgbmV3bHkKICAgIGNyZWF0ZWQgY2hpbGQgcHJvY2Vzc2VzIGRvbid0IGhvbGQgbG9ja3MgcmVmZXJyaW5nIHRvIHRocmVhZHMgd2hpY2gKICAgIGFyZSBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KIApAQCAtNTk2LDcxICs2MTIsNzEgQEAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHVzZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSwgYW5kIGFyZSBub3QgY29tcGF0aWJsZQogd2l0aCBzdWItaW50ZXJwcmV0ZXJzOgogCi0uLiBjZnVuY3Rpb246OiBQeUdJTFN0YXRlX1NUQVRFIFB5R0lMU3RhdGVfRW5zdXJlKCkKKy4uIGM6ZnVuY3Rpb246OiBQeUdJTFN0YXRlX1NUQVRFIFB5R0lMU3RhdGVfRW5zdXJlKCkKIAogICAgRW5zdXJlIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHJlYWR5IHRvIGNhbGwgdGhlIFB5dGhvbiBDIEFQSSByZWdhcmRsZXNzCiAgICBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiBQeXRob24sIG9yIG9mIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gVGhpcyBtYXkKICAgIGJlIGNhbGxlZCBhcyBtYW55IHRpbWVzIGFzIGRlc2lyZWQgYnkgYSB0aHJlYWQgYXMgbG9uZyBhcyBlYWNoIGNhbGwgaXMKLSAgIG1hdGNoZWQgd2l0aCBhIGNhbGwgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLiBJbiBnZW5lcmFsLCBvdGhlcgotICAgdGhyZWFkLXJlbGF0ZWQgQVBJcyBtYXkgYmUgdXNlZCBiZXR3ZWVuIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZAotICAgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzIGFzIGxvbmcgYXMgdGhlIHRocmVhZCBzdGF0ZSBpcyByZXN0b3JlZCB0bworICAgbWF0Y2hlZCB3aXRoIGEgY2FsbCB0byA6YzpmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgLiBJbiBnZW5lcmFsLCBvdGhlcgorICAgdGhyZWFkLXJlbGF0ZWQgQVBJcyBtYXkgYmUgdXNlZCBiZXR3ZWVuIDpjOmZ1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBhbmQKKyAgIDpjOmZ1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgY2FsbHMgYXMgbG9uZyBhcyB0aGUgdGhyZWFkIHN0YXRlIGlzIHJlc3RvcmVkIHRvCiAgICBpdHMgcHJldmlvdXMgc3RhdGUgYmVmb3JlIHRoZSBSZWxlYXNlKCkuICBGb3IgZXhhbXBsZSwgbm9ybWFsIHVzYWdlIG9mIHRoZQotICAgOmNtYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AgYW5kIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNyb3MgaXMKKyAgIDpjOm1hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCBhbmQgOmM6bWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNyb3MgaXMKICAgIGFjY2VwdGFibGUuCiAKICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb3BhcXVlICJoYW5kbGUiIHRvIHRoZSB0aHJlYWQgc3RhdGUgd2hlbgotICAgOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgd2FzIGNhbGxlZCwgYW5kIG11c3QgYmUgcGFzc2VkIHRvCi0gICA6Y2Z1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgdG8gZW5zdXJlIFB5dGhvbiBpcyBsZWZ0IGluIHRoZSBzYW1lIHN0YXRlLiBFdmVuCisgICA6YzpmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgd2FzIGNhbGxlZCwgYW5kIG11c3QgYmUgcGFzc2VkIHRvCisgICA6YzpmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIHRvIGVuc3VyZSBQeXRob24gaXMgbGVmdCBpbiB0aGUgc2FtZSBzdGF0ZS4gRXZlbgogICAgdGhvdWdoIHJlY3Vyc2l2ZSBjYWxscyBhcmUgYWxsb3dlZCwgdGhlc2UgaGFuZGxlcyAqY2Fubm90KiBiZSBzaGFyZWQgLSBlYWNoCi0gICB1bmlxdWUgY2FsbCB0byA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBtdXN0IHNhdmUgdGhlIGhhbmRsZSBmb3IgaXRzIGNhbGwKLSAgIHRvIDpjZnVuYzpgUHlHSUxTdGF0ZV9SZWxlYXNlYC4KKyAgIHVuaXF1ZSBjYWxsIHRvIDpjOmZ1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBtdXN0IHNhdmUgdGhlIGhhbmRsZSBmb3IgaXRzIGNhbGwKKyAgIHRvIDpjOmZ1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAuCiAKICAgIFdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMsIHRoZSBjdXJyZW50IHRocmVhZCB3aWxsIGhvbGQgdGhlIEdJTCBhbmQgYmUgYWJsZQogICAgdG8gY2FsbCBhcmJpdHJhcnkgUHl0aG9uIGNvZGUuICBGYWlsdXJlIGlzIGEgZmF0YWwgZXJyb3IuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUdJTFN0YXRlX1JlbGVhc2UoUHlHSUxTdGF0ZV9TVEFURSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5R0lMU3RhdGVfUmVsZWFzZShQeUdJTFN0YXRlX1NUQVRFKQogCiAgICBSZWxlYXNlIGFueSByZXNvdXJjZXMgcHJldmlvdXNseSBhY3F1aXJlZC4gIEFmdGVyIHRoaXMgY2FsbCwgUHl0aG9uJ3Mgc3RhdGUgd2lsbAotICAgYmUgdGhlIHNhbWUgYXMgaXQgd2FzIHByaW9yIHRvIHRoZSBjb3JyZXNwb25kaW5nIDpjZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGNhbGwKKyAgIGJlIHRoZSBzYW1lIGFzIGl0IHdhcyBwcmlvciB0byB0aGUgY29ycmVzcG9uZGluZyA6YzpmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgY2FsbAogICAgKGJ1dCBnZW5lcmFsbHkgdGhpcyBzdGF0ZSB3aWxsIGJlIHVua25vd24gdG8gdGhlIGNhbGxlciwgaGVuY2UgdGhlIHVzZSBvZiB0aGUKICAgIEdJTFN0YXRlIEFQSSkuCiAKLSAgIEV2ZXJ5IGNhbGwgdG8gOmNmdW5jOmBQeUdJTFN0YXRlX0Vuc3VyZWAgbXVzdCBiZSBtYXRjaGVkIGJ5IGEgY2FsbCB0bwotICAgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIG9uIHRoZSBzYW1lIHRocmVhZC4KKyAgIEV2ZXJ5IGNhbGwgdG8gOmM6ZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIG11c3QgYmUgbWF0Y2hlZCBieSBhIGNhbGwgdG8KKyAgIDpjOmZ1bmM6YFB5R0lMU3RhdGVfUmVsZWFzZWAgb24gdGhlIHNhbWUgdGhyZWFkLgogCiAKIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBub3JtYWxseSB1c2VkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb247IGxvb2sgZm9yCiBleGFtcGxlIHVzYWdlIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KIAogCi0uLiBjbWFjcm86OiBQeV9CRUdJTl9BTExPV19USFJFQURTCisuLiBjOm1hY3JvOjogUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogCiAgICBUaGlzIG1hY3JvIGV4cGFuZHMgdG8gYGB7IFB5VGhyZWFkU3RhdGUgKl9zYXZlOyBfc2F2ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7YGAuCiAgICBOb3RlIHRoYXQgaXQgY29udGFpbnMgYW4gb3BlbmluZyBicmFjZTsgaXQgbXVzdCBiZSBtYXRjaGVkIHdpdGggYSBmb2xsb3dpbmcKLSAgIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCBtYWNyby4gIFNlZSBhYm92ZSBmb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mIHRoaXMKKyAgIDpjOm1hY3JvOmBQeV9FTkRfQUxMT1dfVEhSRUFEU2AgbWFjcm8uICBTZWUgYWJvdmUgZm9yIGZ1cnRoZXIgZGlzY3Vzc2lvbiBvZiB0aGlzCiAgICBtYWNyby4gIEl0IGlzIGEgbm8tb3Agd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCiAKIAotLi4gY21hY3JvOjogUHlfRU5EX0FMTE9XX1RIUkVBRFMKKy4uIGM6bWFjcm86OiBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICBUaGlzIG1hY3JvIGV4cGFuZHMgdG8gYGBQeUV2YWxfUmVzdG9yZVRocmVhZChfc2F2ZSk7IH1gYC4gTm90ZSB0aGF0IGl0IGNvbnRhaW5zCiAgICBhIGNsb3NpbmcgYnJhY2U7IGl0IG11c3QgYmUgbWF0Y2hlZCB3aXRoIGFuIGVhcmxpZXIKLSAgIDpjbWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIG1hY3JvLiAgU2VlIGFib3ZlIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24gb2YKKyAgIDpjOm1hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCBtYWNyby4gIFNlZSBhYm92ZSBmb3IgZnVydGhlciBkaXNjdXNzaW9uIG9mCiAgICB0aGlzIG1hY3JvLiAgSXQgaXMgYSBuby1vcCB3aGVuIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KIAogCi0uLiBjbWFjcm86OiBQeV9CTE9DS19USFJFQURTCisuLiBjOm1hY3JvOjogUHlfQkxPQ0tfVEhSRUFEUwogCiAgICBUaGlzIG1hY3JvIGV4cGFuZHMgdG8gYGBQeUV2YWxfUmVzdG9yZVRocmVhZChfc2F2ZSk7YGA6IGl0IGlzIGVxdWl2YWxlbnQgdG8KLSAgIDpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYCB3aXRob3V0IHRoZSBjbG9zaW5nIGJyYWNlLiAgSXQgaXMgYSBuby1vcCB3aGVuCisgICA6YzptYWNybzpgUHlfRU5EX0FMTE9XX1RIUkVBRFNgIHdpdGhvdXQgdGhlIGNsb3NpbmcgYnJhY2UuICBJdCBpcyBhIG5vLW9wIHdoZW4KICAgIHRocmVhZCBzdXBwb3J0IGlzIGRpc2FibGVkIGF0IGNvbXBpbGUgdGltZS4KIAogCi0uLiBjbWFjcm86OiBQeV9VTkJMT0NLX1RIUkVBRFMKKy4uIGM6bWFjcm86OiBQeV9VTkJMT0NLX1RIUkVBRFMKIAogICAgVGhpcyBtYWNybyBleHBhbmRzIHRvIGBgX3NhdmUgPSBQeUV2YWxfU2F2ZVRocmVhZCgpO2BgOiBpdCBpcyBlcXVpdmFsZW50IHRvCi0gICA6Y21hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCB3aXRob3V0IHRoZSBvcGVuaW5nIGJyYWNlIGFuZCB2YXJpYWJsZQorICAgOmM6bWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgIHdpdGhvdXQgdGhlIG9wZW5pbmcgYnJhY2UgYW5kIHZhcmlhYmxlCiAgICBkZWNsYXJhdGlvbi4gIEl0IGlzIGEgbm8tb3Agd2hlbiB0aHJlYWQgc3VwcG9ydCBpcyBkaXNhYmxlZCBhdCBjb21waWxlIHRpbWUuCiAKIApAQCAtNjcyLDQ3ICs2ODgsNDcgQEAKIGJlZW4gY3JlYXRlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeUludGVycHJldGVyU3RhdGUqIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcoKQorLi4gYzpmdW5jdGlvbjo6IFB5SW50ZXJwcmV0ZXJTdGF0ZSogUHlJbnRlcnByZXRlclN0YXRlX05ldygpCiAKICAgIENyZWF0ZSBhIG5ldyBpbnRlcnByZXRlciBzdGF0ZSBvYmplY3QuICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbmVlZCBub3QKICAgIGJlIGhlbGQsIGJ1dCBtYXkgYmUgaGVsZCBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gc2VyaWFsaXplIGNhbGxzIHRvIHRoaXMKICAgIGZ1bmN0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQogCiAgICBSZXNldCBhbGwgaW5mb3JtYXRpb24gaW4gYW4gaW50ZXJwcmV0ZXIgc3RhdGUgb2JqZWN0LiAgVGhlIGdsb2JhbCBpbnRlcnByZXRlcgogICAgbG9jayBtdXN0IGJlIGhlbGQuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZShQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKIAogICAgRGVzdHJveSBhbiBpbnRlcnByZXRlciBzdGF0ZSBvYmplY3QuICBUaGUgZ2xvYmFsIGludGVycHJldGVyIGxvY2sgbmVlZCBub3QgYmUKICAgIGhlbGQuICBUaGUgaW50ZXJwcmV0ZXIgc3RhdGUgbXVzdCBoYXZlIGJlZW4gcmVzZXQgd2l0aCBhIHByZXZpb3VzIGNhbGwgdG8KLSAgIDpjZnVuYzpgUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyYC4KKyAgIDpjOmZ1bmM6YFB5SW50ZXJwcmV0ZXJTdGF0ZV9DbGVhcmAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCisuLiBjOmZ1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiAKICAgIENyZWF0ZSBhIG5ldyB0aHJlYWQgc3RhdGUgb2JqZWN0IGJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gaW50ZXJwcmV0ZXIgb2JqZWN0LgogICAgVGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG5lZWQgbm90IGJlIGhlbGQsIGJ1dCBtYXkgYmUgaGVsZCBpZiBpdCBpcwogICAgbmVjZXNzYXJ5IHRvIHNlcmlhbGl6ZSBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlUaHJlYWRTdGF0ZV9DbGVhcihQeVRocmVhZFN0YXRlICp0c3RhdGUpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIAogICAgUmVzZXQgYWxsIGluZm9ybWF0aW9uIGluIGEgdGhyZWFkIHN0YXRlIG9iamVjdC4gIFRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jawogICAgbXVzdCBiZSBoZWxkLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlUaHJlYWRTdGF0ZV9EZWxldGUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlUaHJlYWRTdGF0ZV9EZWxldGUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogCiAgICBEZXN0cm95IGEgdGhyZWFkIHN0YXRlIG9iamVjdC4gIFRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBuZWVkIG5vdCBiZSBoZWxkLgogICAgVGhlIHRocmVhZCBzdGF0ZSBtdXN0IGhhdmUgYmVlbiByZXNldCB3aXRoIGEgcHJldmlvdXMgY2FsbCB0bwotICAgOmNmdW5jOmBQeVRocmVhZFN0YXRlX0NsZWFyYC4KKyAgIDpjOmZ1bmM6YFB5VGhyZWFkU3RhdGVfQ2xlYXJgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVRocmVhZFN0YXRlX0dldERpY3QoKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVRocmVhZFN0YXRlX0dldERpY3QoKQogCiAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGluIHdoaWNoIGV4dGVuc2lvbnMgY2FuIHN0b3JlIHRocmVhZC1zcGVjaWZpYyBzdGF0ZQogICAgaW5mb3JtYXRpb24uICBFYWNoIGV4dGVuc2lvbiBzaG91bGQgdXNlIGEgdW5pcXVlIGtleSB0byB1c2UgdG8gc3RvcmUgc3RhdGUgaW4KQEAgLTcyMSw3ICs3MzcsNyBAQAogICAgdGhlIGNhbGxlciBzaG91bGQgYXNzdW1lIG5vIGN1cnJlbnQgdGhyZWFkIHN0YXRlIGlzIGF2YWlsYWJsZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4Yyhsb25nIGlkLCBQeU9iamVjdCAqZXhjKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKGxvbmcgaWQsIFB5T2JqZWN0ICpleGMpCiAKICAgIEFzeW5jaHJvbm91c2x5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBhIHRocmVhZC4gVGhlICppZCogYXJndW1lbnQgaXMgdGhlIHRocmVhZAogICAgaWQgb2YgdGhlIHRhcmdldCB0aHJlYWQ7ICpleGMqIGlzIHRoZSBleGNlcHRpb24gb2JqZWN0IHRvIGJlIHJhaXNlZC4gVGhpcwpAQCAtNzMyLDE4ICs3NDgsMTggQEAKICAgIGV4Y2VwdGlvbiAoaWYgYW55KSBmb3IgdGhlIHRocmVhZCBpcyBjbGVhcmVkLiBUaGlzIHJhaXNlcyBubyBleGNlcHRpb25zLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX0FjcXVpcmVUaHJlYWQoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogCiAgICBBY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBhbmQgc2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSB0bwogICAgKnRzdGF0ZSosIHdoaWNoIHNob3VsZCBub3QgYmUgKk5VTEwqLiAgVGhlIGxvY2sgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgogICAgSWYgdGhpcyB0aHJlYWQgYWxyZWFkeSBoYXMgdGhlIGxvY2ssIGRlYWRsb2NrIGVuc3Vlcy4KIAotICAgOmNmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAgaXMgYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gd2hpY2ggaXMgYWx3YXlzCisgICA6YzpmdW5jOmBQeUV2YWxfUmVzdG9yZVRocmVhZGAgaXMgYSBoaWdoZXItbGV2ZWwgZnVuY3Rpb24gd2hpY2ggaXMgYWx3YXlzCiAgICBhdmFpbGFibGUgKGV2ZW4gd2hlbiB0aHJlYWQgc3VwcG9ydCBpc24ndCBlbmFibGVkIG9yIHdoZW4gdGhyZWFkcyBoYXZlCiAgICBub3QgYmVlbiBpbml0aWFsaXplZCkuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZVRocmVhZChQeVRocmVhZFN0YXRlICp0c3RhdGUpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZVRocmVhZChQeVRocmVhZFN0YXRlICp0c3RhdGUpCiAKICAgIFJlc2V0IHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSB0byAqTlVMTCogYW5kIHJlbGVhc2UgdGhlIGdsb2JhbCBpbnRlcnByZXRlcgogICAgbG9jay4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllciBhbmQgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjdXJyZW50CkBAIC03NTEsMjkgKzc2NywyOSBAQAogICAgdGhhdCBpdCByZXByZXNlbnRzIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSAtLS0gaWYgaXQgaXNuJ3QsIGEgZmF0YWwgZXJyb3IgaXMKICAgIHJlcG9ydGVkLgogCi0gICA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBpcyBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3aGljaCBpcyBhbHdheXMKKyAgIDpjOmZ1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBpcyBhIGhpZ2hlci1sZXZlbCBmdW5jdGlvbiB3aGljaCBpcyBhbHdheXMKICAgIGF2YWlsYWJsZSAoZXZlbiB3aGVuIHRocmVhZCBzdXBwb3J0IGlzbid0IGVuYWJsZWQgb3Igd2hlbiB0aHJlYWRzIGhhdmUKICAgIG5vdCBiZWVuIGluaXRpYWxpemVkKS4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9BY3F1aXJlTG9jaygpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUV2YWxfQWNxdWlyZUxvY2soKQogCiAgICBBY3F1aXJlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllci4KICAgIElmIHRoaXMgdGhyZWFkIGFscmVhZHkgaGFzIHRoZSBsb2NrLCBhIGRlYWRsb2NrIGVuc3Vlcy4KIAotICAgLi4gd2FybmluZzo6Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuICBQbGVhc2UgdXNlCi0gICAgICA6Y2Z1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkYCBvciA6Y2Z1bmM6YFB5RXZhbF9BY3F1aXJlVGhyZWFkYAorICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1cGRhdGUgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgUGxlYXNlIHVzZQorICAgICAgOmM6ZnVuYzpgUHlFdmFsX1Jlc3RvcmVUaHJlYWRgIG9yIDpjOmZ1bmM6YFB5RXZhbF9BY3F1aXJlVGhyZWFkYAogICAgICAgaW5zdGVhZC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5RXZhbF9SZWxlYXNlTG9jaygpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUV2YWxfUmVsZWFzZUxvY2soKQogCiAgICBSZWxlYXNlIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBsb2NrIG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgZWFybGllci4KIAotICAgLi4gd2FybmluZzo6Ci0gICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuICBQbGVhc2UgdXNlCi0gICAgICA6Y2Z1bmM6YFB5RXZhbF9TYXZlVGhyZWFkYCBvciA6Y2Z1bmM6YFB5RXZhbF9SZWxlYXNlVGhyZWFkYAorICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1cGRhdGUgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlLiAgUGxlYXNlIHVzZQorICAgICAgOmM6ZnVuYzpgUHlFdmFsX1NhdmVUaHJlYWRgIG9yIDpjOmZ1bmM6YFB5RXZhbF9SZWxlYXNlVGhyZWFkYAogICAgICAgaW5zdGVhZC4KIAogCkBAIC03ODQsMTEgKzgwMCwxMSBAQAogYXJlIGNhc2VzIHdoZXJlIHlvdSBuZWVkIHRvIGNyZWF0ZSBzZXZlcmFsIGluZGVwZW5kZW50IGludGVycHJldGVycyBpbiB0aGUKIHNhbWUgcHJvY2VzcyBhbmQgcGVyaGFwcyBldmVuIGluIHRoZSBzYW1lIHRocmVhZC4gIFN1Yi1pbnRlcnByZXRlcnMgYWxsb3cKIHlvdSB0byBkbyB0aGF0LiAgWW91IGNhbiBzd2l0Y2ggYmV0d2VlbiBzdWItaW50ZXJwcmV0ZXJzIHVzaW5nIHRoZQotOmNmdW5jOmBQeVRocmVhZFN0YXRlX1N3YXBgIGZ1bmN0aW9uLiAgWW91IGNhbiBjcmVhdGUgYW5kIGRlc3Ryb3kgdGhlbQorOmM6ZnVuYzpgUHlUaHJlYWRTdGF0ZV9Td2FwYCBmdW5jdGlvbi4gIFlvdSBjYW4gY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0KIHVzaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5X05ld0ludGVycHJldGVyKCkKKy4uIGM6ZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlKiBQeV9OZXdJbnRlcnByZXRlcigpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIG1vZHVsZTogYnVpbHRpbnMKQEAgLTgzMCwxMyArODQ2LDEzIEBACiAgICBhbmQgZmlsbGVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgY29weTsgdGhlIGV4dGVuc2lvbidzIGBgaW5pdGBgIGZ1bmN0aW9uIGlzCiAgICBub3QgY2FsbGVkLiAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gd2hhdCBoYXBwZW5zIHdoZW4gYW4gZXh0ZW5zaW9uIGlzCiAgICBpbXBvcnRlZCBhZnRlciB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZW4gY29tcGxldGVseSByZS1pbml0aWFsaXplZCBieSBjYWxsaW5nCi0gICA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBhbmQgOmNmdW5jOmBQeV9Jbml0aWFsaXplYDsgaW4gdGhhdCBjYXNlLCB0aGUgZXh0ZW5zaW9uJ3MKKyAgIDpjOmZ1bmM6YFB5X0ZpbmFsaXplYCBhbmQgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWA7IGluIHRoYXQgY2FzZSwgdGhlIGV4dGVuc2lvbidzCiAgICBgYGluaXRtb2R1bGVgYCBmdW5jdGlvbiAqaXMqIGNhbGxlZCBhZ2Fpbi4KIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IGNsb3NlKCkgKGluIG1vZHVsZSBvcykKIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5X0VuZEludGVycHJldGVyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0VuZEludGVycHJldGVyKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IFB5X0ZpbmFsaXplKCkKIApAQCAtODQ1LDcgKzg2MSw3IEBACiAgICBzdGF0ZXMgYmVsb3cuICBXaGVuIHRoZSBjYWxsIHJldHVybnMsIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSBpcyAqTlVMTCouICBBbGwKICAgIHRocmVhZCBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW50ZXJwcmV0ZXIgYXJlIGRlc3Ryb3llZC4gIChUaGUgZ2xvYmFsCiAgICBpbnRlcnByZXRlciBsb2NrIG11c3QgYmUgaGVsZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBpcyBzdGlsbCBoZWxkCi0gICB3aGVuIGl0IHJldHVybnMuKSAgOmNmdW5jOmBQeV9GaW5hbGl6ZWAgd2lsbCBkZXN0cm95IGFsbCBzdWItaW50ZXJwcmV0ZXJzIHRoYXQKKyAgIHdoZW4gaXQgcmV0dXJucy4pICA6YzpmdW5jOmBQeV9GaW5hbGl6ZWAgd2lsbCBkZXN0cm95IGFsbCBzdWItaW50ZXJwcmV0ZXJzIHRoYXQKICAgIGhhdmVuJ3QgYmVlbiBleHBsaWNpdGx5IGRlc3Ryb3llZCBhdCB0aGF0IHBvaW50LgogCiAKQEAgLTg2NiwxMSArODgyLDExIEBACiBieSBzdWNoIG9iamVjdHMgbWF5IGFmZmVjdCB0aGUgd3JvbmcgKHN1Yi0paW50ZXJwcmV0ZXIncyBkaWN0aW9uYXJ5IG9mIGxvYWRlZAogbW9kdWxlcy4KIAotQWxzbyBub3RlIHRoYXQgY29tYmluaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIDpjZnVuYzpgUHlHSUxTdGF0ZV9cKmAgQVBJcworQWxzbyBub3RlIHRoYXQgY29tYmluaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIDpjOmZ1bmM6YFB5R0lMU3RhdGVfXCpgIEFQSXMKIGlzIGRlbGljYXRlLCBiZWNvbWUgdGhlc2UgQVBJcyBhc3N1bWUgYSBiaWplY3Rpb24gYmV0d2VlbiBQeXRob24gdGhyZWFkIHN0YXRlcwogYW5kIE9TLWxldmVsIHRocmVhZHMsIGFuIGFzc3VtcHRpb24gYnJva2VuIGJ5IHRoZSBwcmVzZW5jZSBvZiBzdWItaW50ZXJwcmV0ZXJzLgogSXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGRvbid0IHN3aXRjaCBzdWItaW50ZXJwcmV0ZXJzIGJldHdlZW4gYSBwYWlyCi1vZiBtYXRjaGluZyA6Y2Z1bmM6YFB5R0lMU3RhdGVfRW5zdXJlYCBhbmQgOmNmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzLgorb2YgbWF0Y2hpbmcgOmM6ZnVuYzpgUHlHSUxTdGF0ZV9FbnN1cmVgIGFuZCA6YzpmdW5jOmBQeUdJTFN0YXRlX1JlbGVhc2VgIGNhbGxzLgogRnVydGhlcm1vcmUsIGV4dGVuc2lvbnMgKHN1Y2ggYXMgOm1vZDpgY3R5cGVzYCkgdXNpbmcgdGhlc2UgQVBJcyB0byBhbGxvdyBjYWxsaW5nCiBvZiBQeXRob24gY29kZSBmcm9tIG5vbi1QeXRob24gY3JlYXRlZCB0aHJlYWRzIHdpbGwgcHJvYmFibHkgYmUgYnJva2VuIHdoZW4gdXNpbmcKIHN1Yi1pbnRlcnByZXRlcnMuCkBAIC04OTIsNyArOTA4LDcgQEAKIG1haW4gdGhyZWFkIHdoZXJlIGl0IGhhcyBwb3NzZXNzaW9uIG9mIHRoZSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayBhbmQgY2FuCiBwZXJmb3JtIGFueSBQeXRob24gQVBJIGNhbGxzLgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfQWRkUGVuZGluZ0NhbGwoaW50ICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9BZGRQZW5kaW5nQ2FsbChpbnQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9BZGRQZW5kaW5nQ2FsbCgpCiAKQEAgLTkzNywxMCArOTUzLDEwIEBACiBQeXRob24tbGV2ZWwgdHJhY2UgZnVuY3Rpb25zIGluIHByZXZpb3VzIHZlcnNpb25zLgogCiAKLS4uIGN0eXBlOjogaW50ICgqUHlfdHJhY2VmdW5jKShQeU9iamVjdCAqb2JqLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwgaW50IHdoYXQsIFB5T2JqZWN0ICphcmcpCisuLiBjOnR5cGU6OiBpbnQgKCpQeV90cmFjZWZ1bmMpKFB5T2JqZWN0ICpvYmosIFB5RnJhbWVPYmplY3QgKmZyYW1lLCBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIAotICAgVGhlIHR5cGUgb2YgdGhlIHRyYWNlIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgdXNpbmcgOmNmdW5jOmBQeUV2YWxfU2V0UHJvZmlsZWAgYW5kCi0gICA6Y2Z1bmM6YFB5RXZhbF9TZXRUcmFjZWAuIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdGhlIG9iamVjdCBwYXNzZWQgdG8gdGhlCisgICBUaGUgdHlwZSBvZiB0aGUgdHJhY2UgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1c2luZyA6YzpmdW5jOmBQeUV2YWxfU2V0UHJvZmlsZWAgYW5kCisgICA6YzpmdW5jOmBQeUV2YWxfU2V0VHJhY2VgLiBUaGUgZmlyc3QgcGFyYW1ldGVyIGlzIHRoZSBvYmplY3QgcGFzc2VkIHRvIHRoZQogICAgcmVnaXN0cmF0aW9uIGZ1bmN0aW9uIGFzICpvYmoqLCAqZnJhbWUqIGlzIHRoZSBmcmFtZSBvYmplY3QgdG8gd2hpY2ggdGhlIGV2ZW50CiAgICBwZXJ0YWlucywgKndoYXQqIGlzIG9uZSBvZiB0aGUgY29uc3RhbnRzIDpjb25zdDpgUHlUcmFjZV9DQUxMYCwKICAgIDpjb25zdDpgUHlUcmFjZV9FWENFUFRJT05gLCA6Y29uc3Q6YFB5VHJhY2VfTElORWAsIDpjb25zdDpgUHlUcmFjZV9SRVRVUk5gLApAQCAtOTY4LDE4ICs5ODQsMTggQEAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIAotLi4gY3Zhcjo6IGludCBQeVRyYWNlX0NBTEwKKy4uIGM6dmFyOjogaW50IFB5VHJhY2VfQ0FMTAogCi0gICBUaGUgdmFsdWUgb2YgdGhlICp3aGF0KiBwYXJhbWV0ZXIgdG8gYSA6Y3R5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb24gd2hlbiBhIG5ldworICAgVGhlIHZhbHVlIG9mIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIGEgOmM6dHlwZTpgUHlfdHJhY2VmdW5jYCBmdW5jdGlvbiB3aGVuIGEgbmV3CiAgICBjYWxsIHRvIGEgZnVuY3Rpb24gb3IgbWV0aG9kIGlzIGJlaW5nIHJlcG9ydGVkLCBvciBhIG5ldyBlbnRyeSBpbnRvIGEgZ2VuZXJhdG9yLgogICAgTm90ZSB0aGF0IHRoZSBjcmVhdGlvbiBvZiB0aGUgaXRlcmF0b3IgZm9yIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIG5vdCByZXBvcnRlZAogICAgYXMgdGhlcmUgaXMgbm8gY29udHJvbCB0cmFuc2ZlciB0byB0aGUgUHl0aG9uIGJ5dGVjb2RlIGluIHRoZSBjb3JyZXNwb25kaW5nCiAgICBmcmFtZS4KIAogCi0uLiBjdmFyOjogaW50IFB5VHJhY2VfRVhDRVBUSU9OCisuLiBjOnZhcjo6IGludCBQeVRyYWNlX0VYQ0VQVElPTgogCi0gICBUaGUgdmFsdWUgb2YgdGhlICp3aGF0KiBwYXJhbWV0ZXIgdG8gYSA6Y3R5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb24gd2hlbiBhbgorICAgVGhlIHZhbHVlIG9mIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIGEgOmM6dHlwZTpgUHlfdHJhY2VmdW5jYCBmdW5jdGlvbiB3aGVuIGFuCiAgICBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoaXMgdmFsdWUgZm9yCiAgICAqd2hhdCogd2hlbiBhZnRlciBhbnkgYnl0ZWNvZGUgaXMgcHJvY2Vzc2VkIGFmdGVyIHdoaWNoIHRoZSBleGNlcHRpb24gYmVjb21lcwogICAgc2V0IHdpdGhpbiB0aGUgZnJhbWUgYmVpbmcgZXhlY3V0ZWQuICBUaGUgZWZmZWN0IG9mIHRoaXMgaXMgdGhhdCBhcyBleGNlcHRpb24KQEAgLTk4OCwzNyArMTAwNCwzNyBAQAogICAgdGhlc2UgZXZlbnRzOyB0aGV5IGFyZSBub3QgbmVlZGVkIGJ5IHRoZSBwcm9maWxlci4KIAogCi0uLiBjdmFyOjogaW50IFB5VHJhY2VfTElORQorLi4gYzp2YXI6OiBpbnQgUHlUcmFjZV9MSU5FCiAKICAgIFRoZSB2YWx1ZSBwYXNzZWQgYXMgdGhlICp3aGF0KiBwYXJhbWV0ZXIgdG8gYSB0cmFjZSBmdW5jdGlvbiAoYnV0IG5vdCBhCiAgICBwcm9maWxpbmcgZnVuY3Rpb24pIHdoZW4gYSBsaW5lLW51bWJlciBldmVudCBpcyBiZWluZyByZXBvcnRlZC4KIAogCi0uLiBjdmFyOjogaW50IFB5VHJhY2VfUkVUVVJOCisuLiBjOnZhcjo6IGludCBQeVRyYWNlX1JFVFVSTgogCi0gICBUaGUgdmFsdWUgZm9yIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIDpjdHlwZTpgUHlfdHJhY2VmdW5jYCBmdW5jdGlvbnMgd2hlbiBhCisgICBUaGUgdmFsdWUgZm9yIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIDpjOnR5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb25zIHdoZW4gYQogICAgY2FsbCBpcyByZXR1cm5pbmcgd2l0aG91dCBwcm9wYWdhdGluZyBhbiBleGNlcHRpb24uCiAKIAotLi4gY3Zhcjo6IGludCBQeVRyYWNlX0NfQ0FMTAorLi4gYzp2YXI6OiBpbnQgUHlUcmFjZV9DX0NBTEwKIAotICAgVGhlIHZhbHVlIGZvciB0aGUgKndoYXQqIHBhcmFtZXRlciB0byA6Y3R5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb25zIHdoZW4gYSBDCisgICBUaGUgdmFsdWUgZm9yIHRoZSAqd2hhdCogcGFyYW1ldGVyIHRvIDpjOnR5cGU6YFB5X3RyYWNlZnVuY2AgZnVuY3Rpb25zIHdoZW4gYSBDCiAgICBmdW5jdGlvbiBpcyBhYm91dCB0byBiZSBjYWxsZWQuCiAKIAotLi4gY3Zhcjo6IGludCBQeVRyYWNlX0NfRVhDRVBUSU9OCisuLiBjOnZhcjo6IGludCBQeVRyYWNlX0NfRVhDRVBUSU9OCiAKLSAgIFRoZSB2YWx1ZSBmb3IgdGhlICp3aGF0KiBwYXJhbWV0ZXIgdG8gOmN0eXBlOmBQeV90cmFjZWZ1bmNgIGZ1bmN0aW9ucyB3aGVuIGEgQworICAgVGhlIHZhbHVlIGZvciB0aGUgKndoYXQqIHBhcmFtZXRlciB0byA6Yzp0eXBlOmBQeV90cmFjZWZ1bmNgIGZ1bmN0aW9ucyB3aGVuIGEgQwogICAgZnVuY3Rpb24gaGFzIHJhaXNlZCBhbiBleGNlcHRpb24uCiAKIAotLi4gY3Zhcjo6IGludCBQeVRyYWNlX0NfUkVUVVJOCisuLiBjOnZhcjo6IGludCBQeVRyYWNlX0NfUkVUVVJOCiAKLSAgIFRoZSB2YWx1ZSBmb3IgdGhlICp3aGF0KiBwYXJhbWV0ZXIgdG8gOmN0eXBlOmBQeV90cmFjZWZ1bmNgIGZ1bmN0aW9ucyB3aGVuIGEgQworICAgVGhlIHZhbHVlIGZvciB0aGUgKndoYXQqIHBhcmFtZXRlciB0byA6Yzp0eXBlOmBQeV90cmFjZWZ1bmNgIGZ1bmN0aW9ucyB3aGVuIGEgQwogICAgZnVuY3Rpb24gaGFzIHJldHVybmVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlFdmFsX1NldFByb2ZpbGUoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmopCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUV2YWxfU2V0UHJvZmlsZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaikKIAogICAgU2V0IHRoZSBwcm9maWxlciBmdW5jdGlvbiB0byAqZnVuYyouICBUaGUgKm9iaiogcGFyYW1ldGVyIGlzIHBhc3NlZCB0byB0aGUKICAgIGZ1bmN0aW9uIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBtYXkgYmUgYW55IFB5dGhvbiBvYmplY3QsIG9yICpOVUxMKi4gIElmCkBAIC0xMDI4LDEzICsxMDQ0LDEzIEBACiAgICBldmVudHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUV2YWxfU2V0VHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmopCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUV2YWxfU2V0VHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmopCiAKICAgIFNldCB0aGUgdHJhY2luZyBmdW5jdGlvbiB0byAqZnVuYyouICBUaGlzIGlzIHNpbWlsYXIgdG8KLSAgIDpjZnVuYzpgUHlFdmFsX1NldFByb2ZpbGVgLCBleGNlcHQgdGhlIHRyYWNpbmcgZnVuY3Rpb24gZG9lcyByZWNlaXZlIGxpbmUtbnVtYmVyCisgICA6YzpmdW5jOmBQeUV2YWxfU2V0UHJvZmlsZWAsIGV4Y2VwdCB0aGUgdHJhY2luZyBmdW5jdGlvbiBkb2VzIHJlY2VpdmUgbGluZS1udW1iZXIKICAgIGV2ZW50cy4KIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRDYWxsU3RhdHMoUHlPYmplY3QgKnNlbGYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRDYWxsU3RhdHMoUHlPYmplY3QgKnNlbGYpCiAKICAgIFJldHVybiBhIHR1cGxlIG9mIGZ1bmN0aW9uIGNhbGwgY291bnRzLiAgVGhlcmUgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGZvciB0aGUKICAgIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHR1cGxlOgpAQCAtMTA4NiwyNSArMTEwMiwyNSBAQAogVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGludGVuZGVkIHRvIGJlIHVzZWQgYnkgYWR2YW5jZWQgZGVidWdnaW5nIHRvb2xzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5SW50ZXJwcmV0ZXJTdGF0ZSogUHlJbnRlcnByZXRlclN0YXRlX0hlYWQoKQorLi4gYzpmdW5jdGlvbjo6IFB5SW50ZXJwcmV0ZXJTdGF0ZSogUHlJbnRlcnByZXRlclN0YXRlX0hlYWQoKQogCiAgICBSZXR1cm4gdGhlIGludGVycHJldGVyIHN0YXRlIG9iamVjdCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCBvZiBhbGwgc3VjaCBvYmplY3RzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5SW50ZXJwcmV0ZXJTdGF0ZSogUHlJbnRlcnByZXRlclN0YXRlX05leHQoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCisuLiBjOmZ1bmN0aW9uOjogUHlJbnRlcnByZXRlclN0YXRlKiBQeUludGVycHJldGVyU3RhdGVfTmV4dChQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKIAogICAgUmV0dXJuIHRoZSBuZXh0IGludGVycHJldGVyIHN0YXRlIG9iamVjdCBhZnRlciAqaW50ZXJwKiBmcm9tIHRoZSBsaXN0IG9mIGFsbAogICAgc3VjaCBvYmplY3RzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUgKiBQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZChQeUludGVycHJldGVyU3RhdGUgKmludGVycCkKKy4uIGM6ZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlICogUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWQoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiAKLSAgIFJldHVybiB0aGUgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCA6Y3R5cGU6YFB5VGhyZWFkU3RhdGVgIG9iamVjdCBpbiB0aGUgbGlzdCBvZgorICAgUmV0dXJuIHRoZSBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IDpjOnR5cGU6YFB5VGhyZWFkU3RhdGVgIG9iamVjdCBpbiB0aGUgbGlzdCBvZgogICAgdGhyZWFkcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVycHJldGVyICppbnRlcnAqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5VGhyZWFkU3RhdGUqIFB5VGhyZWFkU3RhdGVfTmV4dChQeVRocmVhZFN0YXRlICp0c3RhdGUpCisuLiBjOmZ1bmN0aW9uOjogUHlUaHJlYWRTdGF0ZSogUHlUaHJlYWRTdGF0ZV9OZXh0KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIAogICAgUmV0dXJuIHRoZSBuZXh0IHRocmVhZCBzdGF0ZSBvYmplY3QgYWZ0ZXIgKnRzdGF0ZSogZnJvbSB0aGUgbGlzdCBvZiBhbGwgc3VjaAotICAgb2JqZWN0cyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgOmN0eXBlOmBQeUludGVycHJldGVyU3RhdGVgIG9iamVjdC4KKyAgIG9iamVjdHMgYmVsb25naW5nIHRvIHRoZSBzYW1lIDpjOnR5cGU6YFB5SW50ZXJwcmV0ZXJTdGF0ZWAgb2JqZWN0LgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW50cm8ucnN0IGIvRG9jL2MtYXBpL2ludHJvLnJzdAppbmRleCBjMDA4YjVjLi44M2I5OGY5IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW50cm8ucnN0CisrKyBiL0RvYy9jLWFwaS9pbnRyby5yc3QKQEAgLTg4LDE1ICs4OCwxNSBAQAogLi4gaW5kZXg6OiBvYmplY3Q6IHR5cGUKIAogTW9zdCBQeXRob24vQyBBUEkgZnVuY3Rpb25zIGhhdmUgb25lIG9yIG1vcmUgYXJndW1lbnRzIGFzIHdlbGwgYXMgYSByZXR1cm4gdmFsdWUKLW9mIHR5cGUgOmN0eXBlOmBQeU9iamVjdFwqYC4gIFRoaXMgdHlwZSBpcyBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIGRhdGEgdHlwZQorb2YgdHlwZSA6Yzp0eXBlOmBQeU9iamVjdFwqYC4gIFRoaXMgdHlwZSBpcyBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIGRhdGEgdHlwZQogcmVwcmVzZW50aW5nIGFuIGFyYml0cmFyeSBQeXRob24gb2JqZWN0LiAgU2luY2UgYWxsIFB5dGhvbiBvYmplY3QgdHlwZXMgYXJlCiB0cmVhdGVkIHRoZSBzYW1lIHdheSBieSB0aGUgUHl0aG9uIGxhbmd1YWdlIGluIG1vc3Qgc2l0dWF0aW9ucyAoZS5nLiwKIGFzc2lnbm1lbnRzLCBzY29wZSBydWxlcywgYW5kIGFyZ3VtZW50IHBhc3NpbmcpLCBpdCBpcyBvbmx5IGZpdHRpbmcgdGhhdCB0aGV5CiBzaG91bGQgYmUgcmVwcmVzZW50ZWQgYnkgYSBzaW5nbGUgQyB0eXBlLiAgQWxtb3N0IGFsbCBQeXRob24gb2JqZWN0cyBsaXZlIG9uIHRoZQogaGVhcDogeW91IG5ldmVyIGRlY2xhcmUgYW4gYXV0b21hdGljIG9yIHN0YXRpYyB2YXJpYWJsZSBvZiB0eXBlCi06Y3R5cGU6YFB5T2JqZWN0YCwgb25seSBwb2ludGVyIHZhcmlhYmxlcyBvZiB0eXBlIDpjdHlwZTpgUHlPYmplY3RcKmAgY2FuICBiZQorOmM6dHlwZTpgUHlPYmplY3RgLCBvbmx5IHBvaW50ZXIgdmFyaWFibGVzIG9mIHR5cGUgOmM6dHlwZTpgUHlPYmplY3RcKmAgY2FuICBiZQogZGVjbGFyZWQuICBUaGUgc29sZSBleGNlcHRpb24gYXJlIHRoZSB0eXBlIG9iamVjdHM7IHNpbmNlIHRoZXNlIG11c3QgbmV2ZXIgYmUKLWRlYWxsb2NhdGVkLCB0aGV5IGFyZSB0eXBpY2FsbHkgc3RhdGljIDpjdHlwZTpgUHlUeXBlT2JqZWN0YCBvYmplY3RzLgorZGVhbGxvY2F0ZWQsIHRoZXkgYXJlIHR5cGljYWxseSBzdGF0aWMgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCBvYmplY3RzLgogCiBBbGwgUHl0aG9uIG9iamVjdHMgKGV2ZW4gUHl0aG9uIGludGVnZXJzKSBoYXZlIGEgOmRmbjpgdHlwZWAgYW5kIGEKIDpkZm46YHJlZmVyZW5jZSBjb3VudGAuICBBbiBvYmplY3QncyB0eXBlIGRldGVybWluZXMgd2hhdCBraW5kIG9mIG9iamVjdCBpdCBpcwpAQCAtMTI3LDggKzEyNyw4IEBACiAgICBzaW5nbGU6IFB5X0RFQ1JFRigpCiAKIFJlZmVyZW5jZSBjb3VudHMgYXJlIGFsd2F5cyBtYW5pcHVsYXRlZCBleHBsaWNpdGx5LiAgVGhlIG5vcm1hbCB3YXkgaXMgIHRvIHVzZQotdGhlIG1hY3JvIDpjZnVuYzpgUHlfSU5DUkVGYCB0byBpbmNyZW1lbnQgYW4gb2JqZWN0J3MgcmVmZXJlbmNlIGNvdW50IGJ5IG9uZSwKLWFuZCA6Y2Z1bmM6YFB5X0RFQ1JFRmAgdG8gZGVjcmVtZW50IGl0IGJ5ICAgb25lLiAgVGhlIDpjZnVuYzpgUHlfREVDUkVGYCBtYWNybwordGhlIG1hY3JvIDpjOmZ1bmM6YFB5X0lOQ1JFRmAgdG8gaW5jcmVtZW50IGFuIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudCBieSBvbmUsCithbmQgOmM6ZnVuYzpgUHlfREVDUkVGYCB0byBkZWNyZW1lbnQgaXQgYnkgICBvbmUuICBUaGUgOmM6ZnVuYzpgUHlfREVDUkVGYCBtYWNybwogaXMgY29uc2lkZXJhYmx5IG1vcmUgY29tcGxleCB0aGFuIHRoZSBpbmNyZWYgb25lLCBzaW5jZSBpdCBtdXN0IGNoZWNrIHdoZXRoZXIKIHRoZSByZWZlcmVuY2UgY291bnQgYmVjb21lcyB6ZXJvIGFuZCB0aGVuIGNhdXNlIHRoZSBvYmplY3QncyBkZWFsbG9jYXRvciB0byBiZQogY2FsbGVkLiBUaGUgZGVhbGxvY2F0b3IgaXMgYSBmdW5jdGlvbiBwb2ludGVyIGNvbnRhaW5lZCBpbiB0aGUgb2JqZWN0J3MgdHlwZQpAQCAtMTU5LDEzICsxNTksMTMgQEAKIGNvbmNlaXZhYmx5IHJlbW92ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGxpc3QsIGRlY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50CiBhbmQgcG9zc2libGUgZGVhbGxvY2F0aW5nIGl0LiBUaGUgcmVhbCBkYW5nZXIgaXMgdGhhdCBpbm5vY2VudC1sb29raW5nCiBvcGVyYXRpb25zIG1heSBpbnZva2UgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIHdoaWNoIGNvdWxkIGRvIHRoaXM7IHRoZXJlIGlzIGEgY29kZQotcGF0aCB3aGljaCBhbGxvd3MgY29udHJvbCB0byBmbG93IGJhY2sgdG8gdGhlIHVzZXIgZnJvbSBhIDpjZnVuYzpgUHlfREVDUkVGYCwgc28KK3BhdGggd2hpY2ggYWxsb3dzIGNvbnRyb2wgdG8gZmxvdyBiYWNrIHRvIHRoZSB1c2VyIGZyb20gYSA6YzpmdW5jOmBQeV9ERUNSRUZgLCBzbwogYWxtb3N0IGFueSBvcGVyYXRpb24gaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzLgogCiBBIHNhZmUgYXBwcm9hY2ggaXMgdG8gYWx3YXlzIHVzZSB0aGUgZ2VuZXJpYyBvcGVyYXRpb25zIChmdW5jdGlvbnMgIHdob3NlIG5hbWUKIGJlZ2lucyB3aXRoIGBgUHlPYmplY3RfYGAsIGBgUHlOdW1iZXJfYGAsIGBgUHlTZXF1ZW5jZV9gYCBvciBgYFB5TWFwcGluZ19gYCkuCiBUaGVzZSBvcGVyYXRpb25zIGFsd2F5cyBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0IHRoZXkgcmV0dXJuLgotVGhpcyBsZWF2ZXMgdGhlIGNhbGxlciB3aXRoIHRoZSByZXNwb25zaWJpbGl0eSB0byBjYWxsIDpjZnVuYzpgUHlfREVDUkVGYCB3aGVuCitUaGlzIGxlYXZlcyB0aGUgY2FsbGVyIHdpdGggdGhlIHJlc3BvbnNpYmlsaXR5IHRvIGNhbGwgOmM6ZnVuYzpgUHlfREVDUkVGYCB3aGVuCiB0aGV5IGFyZSBkb25lIHdpdGggdGhlIHJlc3VsdDsgdGhpcyBzb29uIGJlY29tZXMgc2Vjb25kIG5hdHVyZS4KIAogCkBAIC0xODAsNyArMTgwLDcgQEAKIHJlZmVyZW5jZSIgbWVhbnMgYmVpbmcgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgUHlfREVDUkVGIG9uIGl0IHdoZW4gdGhlCiByZWZlcmVuY2UgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gIE93bmVyc2hpcCBjYW4gYWxzbyBiZSB0cmFuc2ZlcnJlZCwgbWVhbmluZyB0aGF0CiB0aGUgY29kZSB0aGF0IHJlY2VpdmVzIG93bmVyc2hpcCBvZiB0aGUgcmVmZXJlbmNlIHRoZW4gYmVjb21lcyByZXNwb25zaWJsZSBmb3IKLWV2ZW50dWFsbHkgZGVjcmVmJ2luZyBpdCBieSBjYWxsaW5nIDpjZnVuYzpgUHlfREVDUkVGYCBvciA6Y2Z1bmM6YFB5X1hERUNSRUZgCitldmVudHVhbGx5IGRlY3JlZidpbmcgaXQgYnkgY2FsbGluZyA6YzpmdW5jOmBQeV9ERUNSRUZgIG9yIDpjOmZ1bmM6YFB5X1hERUNSRUZgCiB3aGVuIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC0tLW9yIHBhc3Npbmcgb24gdGhpcyByZXNwb25zaWJpbGl0eSAodXN1YWxseSB0byBpdHMKIGNhbGxlcikuIFdoZW4gYSBmdW5jdGlvbiBwYXNzZXMgb3duZXJzaGlwIG9mIGEgcmVmZXJlbmNlIG9uIHRvIGl0cyBjYWxsZXIsIHRoZQogY2FsbGVyIGlzIHNhaWQgdG8gcmVjZWl2ZSBhICpuZXcqIHJlZmVyZW5jZS4gIFdoZW4gbm8gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLApAQCAtMTk4LDcgKzE5OCw3IEBACiAgICBzaW5nbGU6IFB5VHVwbGVfU2V0SXRlbSgpCiAKIEZldyBmdW5jdGlvbnMgc3RlYWwgcmVmZXJlbmNlczsgdGhlIHR3byBub3RhYmxlIGV4Y2VwdGlvbnMgYXJlCi06Y2Z1bmM6YFB5TGlzdF9TZXRJdGVtYCBhbmQgOmNmdW5jOmBQeVR1cGxlX1NldEl0ZW1gLCB3aGljaCAgc3RlYWwgYSByZWZlcmVuY2UKKzpjOmZ1bmM6YFB5TGlzdF9TZXRJdGVtYCBhbmQgOmM6ZnVuYzpgUHlUdXBsZV9TZXRJdGVtYCwgd2hpY2ggIHN0ZWFsIGEgcmVmZXJlbmNlCiB0byB0aGUgaXRlbSAoYnV0IG5vdCB0byB0aGUgdHVwbGUgb3IgbGlzdCBpbnRvIHdoaWNoIHRoZSBpdGVtIGlzIHB1dCEpLiAgVGhlc2UKIGZ1bmN0aW9ucyB3ZXJlIGRlc2lnbmVkIHRvIHN0ZWFsIGEgcmVmZXJlbmNlIGJlY2F1c2Ugb2YgYSBjb21tb24gaWRpb20gZm9yCiBwb3B1bGF0aW5nIGEgdHVwbGUgb3IgbGlzdCB3aXRoIG5ld2x5IGNyZWF0ZWQgb2JqZWN0czsgZm9yIGV4YW1wbGUsIHRoZSBjb2RlIHRvCkBAIC0yMTIsMjEgKzIxMiwyMSBAQAogICAgUHlUdXBsZV9TZXRJdGVtKHQsIDEsIFB5TG9uZ19Gcm9tTG9uZygyTCkpOwogICAgUHlUdXBsZV9TZXRJdGVtKHQsIDIsIFB5U3RyaW5nX0Zyb21TdHJpbmcoInRocmVlIikpOwogCi1IZXJlLCA6Y2Z1bmM6YFB5TG9uZ19Gcm9tTG9uZ2AgcmV0dXJucyBhIG5ldyByZWZlcmVuY2Ugd2hpY2ggaXMgaW1tZWRpYXRlbHkKLXN0b2xlbiBieSA6Y2Z1bmM6YFB5VHVwbGVfU2V0SXRlbWAuICBXaGVuIHlvdSB3YW50IHRvIGtlZXAgdXNpbmcgYW4gb2JqZWN0Ci1hbHRob3VnaCB0aGUgcmVmZXJlbmNlIHRvIGl0IHdpbGwgYmUgc3RvbGVuLCB1c2UgOmNmdW5jOmBQeV9JTkNSRUZgIHRvIGdyYWIKK0hlcmUsIDpjOmZ1bmM6YFB5TG9uZ19Gcm9tTG9uZ2AgcmV0dXJucyBhIG5ldyByZWZlcmVuY2Ugd2hpY2ggaXMgaW1tZWRpYXRlbHkKK3N0b2xlbiBieSA6YzpmdW5jOmBQeVR1cGxlX1NldEl0ZW1gLiAgV2hlbiB5b3Ugd2FudCB0byBrZWVwIHVzaW5nIGFuIG9iamVjdAorYWx0aG91Z2ggdGhlIHJlZmVyZW5jZSB0byBpdCB3aWxsIGJlIHN0b2xlbiwgdXNlIDpjOmZ1bmM6YFB5X0lOQ1JFRmAgdG8gZ3JhYgogYW5vdGhlciByZWZlcmVuY2UgYmVmb3JlIGNhbGxpbmcgdGhlIHJlZmVyZW5jZS1zdGVhbGluZyBmdW5jdGlvbi4KIAotSW5jaWRlbnRhbGx5LCA6Y2Z1bmM6YFB5VHVwbGVfU2V0SXRlbWAgaXMgdGhlICpvbmx5KiB3YXkgdG8gc2V0IHR1cGxlIGl0ZW1zOwotOmNmdW5jOmBQeVNlcXVlbmNlX1NldEl0ZW1gIGFuZCA6Y2Z1bmM6YFB5T2JqZWN0X1NldEl0ZW1gIHJlZnVzZSB0byBkbyB0aGlzCitJbmNpZGVudGFsbHksIDpjOmZ1bmM6YFB5VHVwbGVfU2V0SXRlbWAgaXMgdGhlICpvbmx5KiB3YXkgdG8gc2V0IHR1cGxlIGl0ZW1zOworOmM6ZnVuYzpgUHlTZXF1ZW5jZV9TZXRJdGVtYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfU2V0SXRlbWAgcmVmdXNlIHRvIGRvIHRoaXMKIHNpbmNlIHR1cGxlcyBhcmUgYW4gaW1tdXRhYmxlIGRhdGEgdHlwZS4gIFlvdSBzaG91bGQgb25seSB1c2UKLTpjZnVuYzpgUHlUdXBsZV9TZXRJdGVtYCBmb3IgdHVwbGVzIHRoYXQgeW91IGFyZSBjcmVhdGluZyB5b3Vyc2VsZi4KKzpjOmZ1bmM6YFB5VHVwbGVfU2V0SXRlbWAgZm9yIHR1cGxlcyB0aGF0IHlvdSBhcmUgY3JlYXRpbmcgeW91cnNlbGYuCiAKLUVxdWl2YWxlbnQgY29kZSBmb3IgcG9wdWxhdGluZyBhIGxpc3QgY2FuIGJlIHdyaXR0ZW4gdXNpbmcgOmNmdW5jOmBQeUxpc3RfTmV3YAotYW5kIDpjZnVuYzpgUHlMaXN0X1NldEl0ZW1gLgorRXF1aXZhbGVudCBjb2RlIGZvciBwb3B1bGF0aW5nIGEgbGlzdCBjYW4gYmUgd3JpdHRlbiB1c2luZyA6YzpmdW5jOmBQeUxpc3RfTmV3YAorYW5kIDpjOmZ1bmM6YFB5TGlzdF9TZXRJdGVtYC4KIAogSG93ZXZlciwgaW4gcHJhY3RpY2UsIHlvdSB3aWxsIHJhcmVseSB1c2UgdGhlc2Ugd2F5cyBvZiBjcmVhdGluZyBhbmQgcG9wdWxhdGluZwotYSB0dXBsZSBvciBsaXN0LiAgVGhlcmUncyBhIGdlbmVyaWMgZnVuY3Rpb24sIDpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAsIHRoYXQgY2FuCithIHR1cGxlIG9yIGxpc3QuICBUaGVyZSdzIGEgZ2VuZXJpYyBmdW5jdGlvbiwgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAsIHRoYXQgY2FuCiBjcmVhdGUgbW9zdCBjb21tb24gb2JqZWN0cyBmcm9tIEMgdmFsdWVzLCBkaXJlY3RlZCBieSBhIDpkZm46YGZvcm1hdCBzdHJpbmdgLgogRm9yIGV4YW1wbGUsIHRoZSBhYm92ZSB0d28gYmxvY2tzIG9mIGNvZGUgY291bGQgYmUgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZwogKHdoaWNoIGFsc28gdGFrZXMgY2FyZSBvZiB0aGUgZXJyb3IgY2hlY2tpbmcpOjoKQEAgLTIzNiw3ICsyMzYsNyBAQAogICAgdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoaWlzKSIsIDEsIDIsICJ0aHJlZSIpOwogICAgbGlzdCA9IFB5X0J1aWxkVmFsdWUoIltpaXNdIiwgMSwgMiwgInRocmVlIik7CiAKLUl0IGlzIG11Y2ggbW9yZSBjb21tb24gdG8gdXNlIDpjZnVuYzpgUHlPYmplY3RfU2V0SXRlbWAgYW5kIGZyaWVuZHMgd2l0aCBpdGVtcworSXQgaXMgbXVjaCBtb3JlIGNvbW1vbiB0byB1c2UgOmM6ZnVuYzpgUHlPYmplY3RfU2V0SXRlbWAgYW5kIGZyaWVuZHMgd2l0aCBpdGVtcwogd2hvc2UgcmVmZXJlbmNlcyB5b3UgYXJlIG9ubHkgYm9ycm93aW5nLCBsaWtlIGFyZ3VtZW50cyB0aGF0IHdlcmUgcGFzc2VkIGluIHRvCiB0aGUgZnVuY3Rpb24geW91IGFyZSB3cml0aW5nLiAgSW4gdGhhdCBjYXNlLCB0aGVpciBiZWhhdmlvdXIgcmVnYXJkaW5nIHJlZmVyZW5jZQogY291bnRzIGlzIG11Y2ggc2FuZXIsIHNpbmNlIHlvdSBkb24ndCBoYXZlIHRvIGluY3JlbWVudCBhIHJlZmVyZW5jZSBjb3VudCBzbyB5b3UKQEAgLTI3MCwxNSArMjcwLDE1IEBACiB5b3Ugb3duZXJzaGlwIG9mIHRoZSByZWZlcmVuY2UuIFRoZSByZWFzb24gaXMgc2ltcGxlOiBpbiBtYW55IGNhc2VzLCB0aGUKIHJldHVybmVkIG9iamVjdCBpcyBjcmVhdGVkICBvbiB0aGUgZmx5LCBhbmQgdGhlIHJlZmVyZW5jZSB5b3UgZ2V0IGlzIHRoZSBvbmx5CiByZWZlcmVuY2UgdG8gdGhlICBvYmplY3QuICBUaGVyZWZvcmUsIHRoZSBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBvYmplY3QKLXJlZmVyZW5jZXMsIGxpa2UgOmNmdW5jOmBQeU9iamVjdF9HZXRJdGVtYCBhbmQgIDpjZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCwKK3JlZmVyZW5jZXMsIGxpa2UgOmM6ZnVuYzpgUHlPYmplY3RfR2V0SXRlbWAgYW5kICA6YzpmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gLAogYWx3YXlzIHJldHVybiBhIG5ldyByZWZlcmVuY2UgKHRoZSBjYWxsZXIgYmVjb21lcyB0aGUgb3duZXIgb2YgdGhlIHJlZmVyZW5jZSkuCiAKIEl0IGlzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgd2hldGhlciB5b3Ugb3duIGEgcmVmZXJlbmNlIHJldHVybmVkICBieSBhCiBmdW5jdGlvbiBkZXBlbmRzIG9uIHdoaWNoIGZ1bmN0aW9uIHlvdSBjYWxsIG9ubHkgLS0tICp0aGUgcGx1bWFnZSogKHRoZSB0eXBlIG9mCiB0aGUgb2JqZWN0IHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24pICpkb2Vzbid0IGVudGVyIGludG8gaXQhKgotVGh1cywgaWYgeW91ICBleHRyYWN0IGFuIGl0ZW0gZnJvbSBhIGxpc3QgdXNpbmcgOmNmdW5jOmBQeUxpc3RfR2V0SXRlbWAsIHlvdQorVGh1cywgaWYgeW91ICBleHRyYWN0IGFuIGl0ZW0gZnJvbSBhIGxpc3QgdXNpbmcgOmM6ZnVuYzpgUHlMaXN0X0dldEl0ZW1gLCB5b3UKIGRvbid0IG93biB0aGUgcmVmZXJlbmNlIC0tLSBidXQgaWYgeW91IG9idGFpbiB0aGUgc2FtZSBpdGVtIGZyb20gdGhlIHNhbWUgbGlzdAotdXNpbmcgOmNmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gICh3aGljaCBoYXBwZW5zIHRvIHRha2UgZXhhY3RseSB0aGUgc2FtZQordXNpbmcgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCAod2hpY2ggaGFwcGVucyB0byB0YWtlIGV4YWN0bHkgdGhlIHNhbWUKIGFyZ3VtZW50cyksIHlvdSBkbyBvd24gYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIG9iamVjdC4KIAogLi4gaW5kZXg6OgpAQCAtMjg2LDggKzI4Niw4IEBACiAgICBzaW5nbGU6IFB5U2VxdWVuY2VfR2V0SXRlbSgpCiAKIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBob3cgeW91IGNvdWxkIHdyaXRlIGEgZnVuY3Rpb24gdGhhdCBjb21wdXRlcyB0aGUgc3VtIG9mCi10aGUgaXRlbXMgaW4gYSBsaXN0IG9mIGludGVnZXJzOyBvbmNlIHVzaW5nICA6Y2Z1bmM6YFB5TGlzdF9HZXRJdGVtYCwgYW5kIG9uY2UKLXVzaW5nIDpjZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYC4gOjoKK3RoZSBpdGVtcyBpbiBhIGxpc3Qgb2YgaW50ZWdlcnM7IG9uY2UgdXNpbmcgIDpjOmZ1bmM6YFB5TGlzdF9HZXRJdGVtYCwgYW5kIG9uY2UKK3VzaW5nIDpjOmZ1bmM6YFB5U2VxdWVuY2VfR2V0SXRlbWAuIDo6CiAKICAgIGxvbmcKICAgIHN1bV9saXN0KFB5T2JqZWN0ICpsaXN0KQpAQCAtMzQwLDggKzM0MCw4IEBACiAtLS0tLQogCiBUaGVyZSBhcmUgZmV3IG90aGVyIGRhdGEgdHlwZXMgdGhhdCBwbGF5IGEgc2lnbmlmaWNhbnQgcm9sZSBpbiAgdGhlIFB5dGhvbi9DCi1BUEk7IG1vc3QgYXJlIHNpbXBsZSBDIHR5cGVzIHN1Y2ggYXMgOmN0eXBlOmBpbnRgLCAgOmN0eXBlOmBsb25nYCwKLTpjdHlwZTpgZG91YmxlYCBhbmQgOmN0eXBlOmBjaGFyXCpgLiAgQSBmZXcgc3RydWN0dXJlIHR5cGVzICBhcmUgdXNlZCB0bworQVBJOyBtb3N0IGFyZSBzaW1wbGUgQyB0eXBlcyBzdWNoIGFzIDpjOnR5cGU6YGludGAsICA6Yzp0eXBlOmBsb25nYCwKKzpjOnR5cGU6YGRvdWJsZWAgYW5kIDpjOnR5cGU6YGNoYXJcKmAuICBBIGZldyBzdHJ1Y3R1cmUgdHlwZXMgIGFyZSB1c2VkIHRvCiBkZXNjcmliZSBzdGF0aWMgdGFibGVzIHVzZWQgdG8gbGlzdCB0aGUgZnVuY3Rpb25zIGV4cG9ydGVkICBieSBhIG1vZHVsZSBvciB0aGUKIGRhdGEgYXR0cmlidXRlcyBvZiBhIG5ldyBvYmplY3QgdHlwZSwgYW5kIGFub3RoZXIgaXMgdXNlZCB0byBkZXNjcmliZSB0aGUgdmFsdWUKIG9mIGEgY29tcGxleCBudW1iZXIuICBUaGVzZSB3aWxsICBiZSBkaXNjdXNzZWQgdG9nZXRoZXIgd2l0aCB0aGUgZnVuY3Rpb25zIHRoYXQKQEAgLTM3MCw3ICszNzAsNyBAQAogQSBmZXcgZnVuY3Rpb25zIHJldHVybiBhIEJvb2xlYW4gdHJ1ZS9mYWxzZSByZXN1bHQsIHdpdGggZmFsc2UgaW5kaWNhdGluZyBhbgogZXJyb3IuICBWZXJ5IGZldyBmdW5jdGlvbnMgcmV0dXJuIG5vIGV4cGxpY2l0IGVycm9yIGluZGljYXRvciBvciBoYXZlIGFuCiBhbWJpZ3VvdXMgcmV0dXJuIHZhbHVlLCBhbmQgcmVxdWlyZSBleHBsaWNpdCB0ZXN0aW5nIGZvciBlcnJvcnMgd2l0aAotOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAuICBUaGVzZSBleGNlcHRpb25zIGFyZSBhbHdheXMgZXhwbGljaXRseSBkb2N1bWVudGVkLgorOmM6ZnVuYzpgUHlFcnJfT2NjdXJyZWRgLiAgVGhlc2UgZXhjZXB0aW9ucyBhcmUgYWx3YXlzIGV4cGxpY2l0bHkgZG9jdW1lbnRlZC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBQeUVycl9TZXRTdHJpbmcoKQpAQCAtMzc5LDExICszNzksMTEgQEAKIEV4Y2VwdGlvbiBzdGF0ZSBpcyBtYWludGFpbmVkIGluIHBlci10aHJlYWQgc3RvcmFnZSAodGhpcyBpcyAgZXF1aXZhbGVudCB0bwogdXNpbmcgZ2xvYmFsIHN0b3JhZ2UgaW4gYW4gdW50aHJlYWRlZCBhcHBsaWNhdGlvbikuICBBICB0aHJlYWQgY2FuIGJlIGluIG9uZSBvZgogdHdvIHN0YXRlczogYW4gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCwgb3Igbm90LiBUaGUgZnVuY3Rpb24KLTpjZnVuYzpgUHlFcnJfT2NjdXJyZWRgIGNhbiBiZSB1c2VkIHRvIGNoZWNrIGZvciB0aGlzOiBpdCByZXR1cm5zIGEgYm9ycm93ZWQKKzpjOmZ1bmM6YFB5RXJyX09jY3VycmVkYCBjYW4gYmUgdXNlZCB0byBjaGVjayBmb3IgdGhpczogaXQgcmV0dXJucyBhIGJvcnJvd2VkCiByZWZlcmVuY2UgdG8gdGhlIGV4Y2VwdGlvbiB0eXBlIG9iamVjdCB3aGVuIGFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQsIGFuZAogKk5VTEwqIG90aGVyd2lzZS4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiBmdW5jdGlvbnMgdG8gc2V0IHRoZSBleGNlcHRpb24gc3RhdGU6Ci06Y2Z1bmM6YFB5RXJyX1NldFN0cmluZ2AgaXMgdGhlIG1vc3QgY29tbW9uICh0aG91Z2ggbm90IHRoZSBtb3N0IGdlbmVyYWwpCi1mdW5jdGlvbiB0byBzZXQgdGhlIGV4Y2VwdGlvbiBzdGF0ZSwgYW5kIDpjZnVuYzpgUHlFcnJfQ2xlYXJgIGNsZWFycyB0aGUKKzpjOmZ1bmM6YFB5RXJyX1NldFN0cmluZ2AgaXMgdGhlIG1vc3QgY29tbW9uICh0aG91Z2ggbm90IHRoZSBtb3N0IGdlbmVyYWwpCitmdW5jdGlvbiB0byBzZXQgdGhlIGV4Y2VwdGlvbiBzdGF0ZSwgYW5kIDpjOmZ1bmM6YFB5RXJyX0NsZWFyYCBjbGVhcnMgdGhlCiBleGNlcHRpb24gc3RhdGUuCiAKIFRoZSBmdWxsIGV4Y2VwdGlvbiBzdGF0ZSBjb25zaXN0cyBvZiB0aHJlZSBvYmplY3RzIChhbGwgb2Ygd2hpY2ggY2FuICBiZQpAQCAtNDE5LDcgKzQxOSw3IEBACiAuLiBpbmRleDo6IHNpbmdsZTogc3VtX3NlcXVlbmNlKCkKIAogQSBzaW1wbGUgZXhhbXBsZSBvZiBkZXRlY3RpbmcgZXhjZXB0aW9ucyBhbmQgcGFzc2luZyB0aGVtIG9uIGlzIHNob3duIGluIHRoZQotOmNmdW5jOmBzdW1fc2VxdWVuY2VgIGV4YW1wbGUgYWJvdmUuICBJdCBzbyBoYXBwZW5zIHRoYXQgdGhhdCBleGFtcGxlIGRvZXNuJ3QKKzpjOmZ1bmM6YHN1bV9zZXF1ZW5jZWAgZXhhbXBsZSBhYm92ZS4gIEl0IHNvIGhhcHBlbnMgdGhhdCB0aGF0IGV4YW1wbGUgZG9lc24ndAogbmVlZCB0byBjbGVhbiB1cCBhbnkgb3duZWQgcmVmZXJlbmNlcyB3aGVuIGl0IGRldGVjdHMgYW4gZXJyb3IuICBUaGUgZm9sbG93aW5nCiBleGFtcGxlIGZ1bmN0aW9uIHNob3dzIHNvbWUgZXJyb3IgY2xlYW51cC4gIEZpcnN0LCB0byByZW1pbmQgeW91IHdoeSB5b3UgbGlrZQogUHl0aG9uLCB3ZSBzaG93IHRoZSBlcXVpdmFsZW50IFB5dGhvbiBjb2RlOjoKQEAgLTQ4NiwxMCArNDg2LDEwIEBACiAgICBzaW5nbGU6IFB5X1hERUNSRUYoKQogCiBUaGlzIGV4YW1wbGUgcmVwcmVzZW50cyBhbiBlbmRvcnNlZCB1c2Ugb2YgdGhlIGBgZ290b2BgIHN0YXRlbWVudCAgaW4gQyEKLUl0IGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgOmNmdW5jOmBQeUVycl9FeGNlcHRpb25NYXRjaGVzYCBhbmQKLTpjZnVuYzpgUHlFcnJfQ2xlYXJgIHRvIGhhbmRsZSBzcGVjaWZpYyBleGNlcHRpb25zLCBhbmQgdGhlIHVzZSBvZgotOmNmdW5jOmBQeV9YREVDUkVGYCB0byBkaXNwb3NlIG9mIG93bmVkIHJlZmVyZW5jZXMgdGhhdCBtYXkgYmUgKk5VTEwqIChub3RlIHRoZQotYGAnWCdgYCBpbiB0aGUgbmFtZTsgOmNmdW5jOmBQeV9ERUNSRUZgIHdvdWxkIGNyYXNoIHdoZW4gY29uZnJvbnRlZCB3aXRoIGEKK0l0IGlsbHVzdHJhdGVzIHRoZSB1c2Ugb2YgOmM6ZnVuYzpgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlc2AgYW5kCis6YzpmdW5jOmBQeUVycl9DbGVhcmAgdG8gaGFuZGxlIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGFuZCB0aGUgdXNlIG9mCis6YzpmdW5jOmBQeV9YREVDUkVGYCB0byBkaXNwb3NlIG9mIG93bmVkIHJlZmVyZW5jZXMgdGhhdCBtYXkgYmUgKk5VTEwqIChub3RlIHRoZQorYGAnWCdgYCBpbiB0aGUgbmFtZTsgOmM6ZnVuYzpgUHlfREVDUkVGYCB3b3VsZCBjcmFzaCB3aGVuIGNvbmZyb250ZWQgd2l0aCBhCiAqTlVMTCogcmVmZXJlbmNlKS4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB2YXJpYWJsZXMgdXNlZCB0byBob2xkIG93bmVkCiByZWZlcmVuY2VzIGFyZSBpbml0aWFsaXplZCB0byAqTlVMTCogZm9yIHRoaXMgdG8gd29yazsgbGlrZXdpc2UsIHRoZSBwcm9wb3NlZAogcmV0dXJuIHZhbHVlIGlzIGluaXRpYWxpemVkIHRvIGBgLTFgYCAoZmFpbHVyZSkgYW5kIG9ubHkgc2V0IHRvIHN1Y2Nlc3MgYWZ0ZXIKQEAgLTUxNCwyMCArNTE0LDIwIEBACiAgICB0cmlwbGU6IG1vZHVsZTsgc2VhcmNoOyBwYXRoCiAgICBzaW5nbGU6IHBhdGggKGluIG1vZHVsZSBzeXMpCiAKLVRoZSBiYXNpYyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyA6Y2Z1bmM6YFB5X0luaXRpYWxpemVgLiBUaGlzIGluaXRpYWxpemVzCitUaGUgYmFzaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gaXMgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWAuIFRoaXMgaW5pdGlhbGl6ZXMKIHRoZSB0YWJsZSBvZiBsb2FkZWQgbW9kdWxlcywgYW5kIGNyZWF0ZXMgdGhlIGZ1bmRhbWVudGFsIG1vZHVsZXMKIDptb2Q6YGJ1aWx0aW5zYCwgOm1vZDpgX19tYWluX19gLCBhbmQgOm1vZDpgc3lzYC4gIEl0IGFsc28KIGluaXRpYWxpemVzIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGggKGBgc3lzLnBhdGhgYCkuCiAKLS4uIGluZGV4Ojogc2luZ2xlOiBQeVN5c19TZXRBcmd2KCkKKy4uIGluZGV4Ojogc2luZ2xlOiBQeVN5c19TZXRBcmd2RXgoKQogCi06Y2Z1bmM6YFB5X0luaXRpYWxpemVgIGRvZXMgbm90IHNldCB0aGUgInNjcmlwdCBhcmd1bWVudCBsaXN0IiAgKGBgc3lzLmFyZ3ZgYCkuCi1JZiB0aGlzIHZhcmlhYmxlIGlzIG5lZWRlZCBieSBQeXRob24gY29kZSB0aGF0ICB3aWxsIGJlIGV4ZWN1dGVkIGxhdGVyLCBpdCBtdXN0Ci1iZSBzZXQgZXhwbGljaXRseSB3aXRoIGEgY2FsbCB0byAgYGBQeVN5c19TZXRBcmd2KGFyZ2MsIGFyZ3YpYGAgc3Vic2VxdWVudCB0bwotdGhlIGNhbGwgdG8gOmNmdW5jOmBQeV9Jbml0aWFsaXplYC4KKzpjOmZ1bmM6YFB5X0luaXRpYWxpemVgIGRvZXMgbm90IHNldCB0aGUgInNjcmlwdCBhcmd1bWVudCBsaXN0IiAgKGBgc3lzLmFyZ3ZgYCkuCitJZiB0aGlzIHZhcmlhYmxlIGlzIG5lZWRlZCBieSBQeXRob24gY29kZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgbGF0ZXIsIGl0IG11c3QKK2JlIHNldCBleHBsaWNpdGx5IHdpdGggYSBjYWxsIHRvICBgYFB5U3lzX1NldEFyZ3ZFeChhcmdjLCBhcmd2LCB1cGRhdGVwYXRoKWBgCithZnRlciB0aGUgY2FsbCB0byA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4KIAogT24gbW9zdCBzeXN0ZW1zIChpbiBwYXJ0aWN1bGFyLCBvbiBVbml4IGFuZCBXaW5kb3dzLCBhbHRob3VnaCB0aGUgZGV0YWlscyBhcmUKLXNsaWdodGx5IGRpZmZlcmVudCksIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAgY2FsY3VsYXRlcyB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoCitzbGlnaHRseSBkaWZmZXJlbnQpLCA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCBjYWxjdWxhdGVzIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGgKIGJhc2VkIHVwb24gaXRzIGJlc3QgZ3Vlc3MgZm9yIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RhbmRhcmQgUHl0aG9uIGludGVycHJldGVyCiBleGVjdXRhYmxlLCBhc3N1bWluZyB0aGF0IHRoZSBQeXRob24gbGlicmFyeSBpcyBmb3VuZCBpbiBhIGZpeGVkIGxvY2F0aW9uCiByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIGludGVycHJldGVyIGV4ZWN1dGFibGUuICBJbiBwYXJ0aWN1bGFyLCBpdCBsb29rcyBmb3IgYQpAQCAtNTUxLDIyICs1NTEsMjIgQEAKICAgIHNpbmdsZTogUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKCkKIAogVGhlIGVtYmVkZGluZyBhcHBsaWNhdGlvbiBjYW4gc3RlZXIgdGhlIHNlYXJjaCBieSBjYWxsaW5nCi1gYFB5X1NldFByb2dyYW1OYW1lKGZpbGUpYGAgKmJlZm9yZSogY2FsbGluZyAgOmNmdW5jOmBQeV9Jbml0aWFsaXplYC4gIE5vdGUgdGhhdAorYGBQeV9TZXRQcm9ncmFtTmFtZShmaWxlKWBgICpiZWZvcmUqIGNhbGxpbmcgIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLiAgTm90ZSB0aGF0CiA6ZW52dmFyOmBQWVRIT05IT01FYCBzdGlsbCBvdmVycmlkZXMgdGhpcyBhbmQgOmVudnZhcjpgUFlUSE9OUEFUSGAgaXMgc3RpbGwKIGluc2VydGVkIGluIGZyb250IG9mIHRoZSBzdGFuZGFyZCBwYXRoLiAgQW4gYXBwbGljYXRpb24gdGhhdCByZXF1aXJlcyB0b3RhbAotY29udHJvbCBoYXMgdG8gcHJvdmlkZSBpdHMgb3duIGltcGxlbWVudGF0aW9uIG9mIDpjZnVuYzpgUHlfR2V0UGF0aGAsCi06Y2Z1bmM6YFB5X0dldFByZWZpeGAsIDpjZnVuYzpgUHlfR2V0RXhlY1ByZWZpeGAsIGFuZAotOmNmdW5jOmBQeV9HZXRQcm9ncmFtRnVsbFBhdGhgIChhbGwgZGVmaW5lZCBpbiA6ZmlsZTpgTW9kdWxlcy9nZXRwYXRoLmNgKS4KK2NvbnRyb2wgaGFzIHRvIHByb3ZpZGUgaXRzIG93biBpbXBsZW1lbnRhdGlvbiBvZiA6YzpmdW5jOmBQeV9HZXRQYXRoYCwKKzpjOmZ1bmM6YFB5X0dldFByZWZpeGAsIDpjOmZ1bmM6YFB5X0dldEV4ZWNQcmVmaXhgLCBhbmQKKzpjOmZ1bmM6YFB5X0dldFByb2dyYW1GdWxsUGF0aGAgKGFsbCBkZWZpbmVkIGluIDpmaWxlOmBNb2R1bGVzL2dldHBhdGguY2ApLgogCiAuLiBpbmRleDo6IHNpbmdsZTogUHlfSXNJbml0aWFsaXplZCgpCiAKIFNvbWV0aW1lcywgaXQgaXMgZGVzaXJhYmxlIHRvICJ1bmluaXRpYWxpemUiIFB5dGhvbi4gIEZvciBpbnN0YW5jZSwgIHRoZQogYXBwbGljYXRpb24gbWF5IHdhbnQgdG8gc3RhcnQgb3ZlciAobWFrZSBhbm90aGVyIGNhbGwgdG8KLTpjZnVuYzpgUHlfSW5pdGlhbGl6ZWApIG9yIHRoZSBhcHBsaWNhdGlvbiBpcyBzaW1wbHkgZG9uZSB3aXRoIGl0cyAgdXNlIG9mCis6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCkgb3IgdGhlIGFwcGxpY2F0aW9uIGlzIHNpbXBseSBkb25lIHdpdGggaXRzICB1c2Ugb2YKIFB5dGhvbiBhbmQgd2FudHMgdG8gZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IFB5dGhvbi4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZAotYnkgY2FsbGluZyA6Y2Z1bmM6YFB5X0ZpbmFsaXplYC4gIFRoZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5X0lzSW5pdGlhbGl6ZWRgIHJldHVybnMKK2J5IGNhbGxpbmcgOmM6ZnVuYzpgUHlfRmluYWxpemVgLiAgVGhlIGZ1bmN0aW9uIDpjOmZ1bmM6YFB5X0lzSW5pdGlhbGl6ZWRgIHJldHVybnMKIHRydWUgaWYgUHl0aG9uIGlzIGN1cnJlbnRseSBpbiB0aGUgaW5pdGlhbGl6ZWQgc3RhdGUuICBNb3JlIGluZm9ybWF0aW9uIGFib3V0Ci10aGVzZSBmdW5jdGlvbnMgaXMgZ2l2ZW4gaW4gYSBsYXRlciBjaGFwdGVyLiBOb3RpY2UgdGhhdCA6Y2Z1bmM6YFB5X0ZpbmFsaXplYAordGhlc2UgZnVuY3Rpb25zIGlzIGdpdmVuIGluIGEgbGF0ZXIgY2hhcHRlci4gTm90aWNlIHRoYXQgOmM6ZnVuYzpgUHlfRmluYWxpemVgCiBkb2VzICpub3QqIGZyZWUgYWxsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdGhlIFB5dGhvbiBpbnRlcnByZXRlciwgZS5nLiBtZW1vcnkKIGFsbG9jYXRlZCBieSBleHRlbnNpb24gbW9kdWxlcyBjdXJyZW50bHkgY2Fubm90IGJlIHJlbGVhc2VkLgogCkBAIC01ODYsMTEgKzU4NiwxMSBAQAogYWxsb2NhdG9yLCBvciBsb3ctbGV2ZWwgcHJvZmlsaW5nIG9mIHRoZSBtYWluIGludGVycHJldGVyIGxvb3AuICBPbmx5IHRoZSBtb3N0CiBmcmVxdWVudGx5LXVzZWQgYnVpbGRzIHdpbGwgYmUgZGVzY3JpYmVkIGluIHRoZSByZW1haW5kZXIgb2YgdGhpcyBzZWN0aW9uLgogCi1Db21waWxpbmcgdGhlIGludGVycHJldGVyIHdpdGggdGhlIDpjbWFjcm86YFB5X0RFQlVHYCBtYWNybyBkZWZpbmVkIHByb2R1Y2VzCi13aGF0IGlzIGdlbmVyYWxseSBtZWFudCBieSAiYSBkZWJ1ZyBidWlsZCIgb2YgUHl0aG9uLiA6Y21hY3JvOmBQeV9ERUJVR2AgaXMKK0NvbXBpbGluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCB0aGUgOmM6bWFjcm86YFB5X0RFQlVHYCBtYWNybyBkZWZpbmVkIHByb2R1Y2VzCit3aGF0IGlzIGdlbmVyYWxseSBtZWFudCBieSAiYSBkZWJ1ZyBidWlsZCIgb2YgUHl0aG9uLiA6YzptYWNybzpgUHlfREVCVUdgIGlzCiBlbmFibGVkIGluIHRoZSBVbml4IGJ1aWxkIGJ5IGFkZGluZyA6b3B0aW9uOmAtLXdpdGgtcHlkZWJ1Z2AgdG8gdGhlCiA6ZmlsZTpgY29uZmlndXJlYCBjb21tYW5kLiAgSXQgaXMgYWxzbyBpbXBsaWVkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGUKLW5vdC1QeXRob24tc3BlY2lmaWMgOmNtYWNybzpgX0RFQlVHYCBtYWNyby4gIFdoZW4gOmNtYWNybzpgUHlfREVCVUdgIGlzIGVuYWJsZWQKK25vdC1QeXRob24tc3BlY2lmaWMgOmM6bWFjcm86YF9ERUJVR2AgbWFjcm8uICBXaGVuIDpjOm1hY3JvOmBQeV9ERUJVR2AgaXMgZW5hYmxlZAogaW4gdGhlIFVuaXggYnVpbGQsIGNvbXBpbGVyIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZC4KIAogSW4gYWRkaXRpb24gdG8gdGhlIHJlZmVyZW5jZSBjb3VudCBkZWJ1Z2dpbmcgZGVzY3JpYmVkIGJlbG93LCB0aGUgZm9sbG93aW5nCkBAIC02MTksMTEgKzYxOSwxMSBAQAogCiBUaGVyZSBtYXkgYmUgYWRkaXRpb25hbCBjaGVja3Mgbm90IG1lbnRpb25lZCBoZXJlLgogCi1EZWZpbmluZyA6Y21hY3JvOmBQeV9UUkFDRV9SRUZTYCBlbmFibGVzIHJlZmVyZW5jZSB0cmFjaW5nLiAgV2hlbiBkZWZpbmVkLCBhCitEZWZpbmluZyA6YzptYWNybzpgUHlfVFJBQ0VfUkVGU2AgZW5hYmxlcyByZWZlcmVuY2UgdHJhY2luZy4gIFdoZW4gZGVmaW5lZCwgYQogY2lyY3VsYXIgZG91Ymx5IGxpbmtlZCBsaXN0IG9mIGFjdGl2ZSBvYmplY3RzIGlzIG1haW50YWluZWQgYnkgYWRkaW5nIHR3byBleHRyYQotZmllbGRzIHRvIGV2ZXJ5IDpjdHlwZTpgUHlPYmplY3RgLiAgVG90YWwgYWxsb2NhdGlvbnMgYXJlIHRyYWNrZWQgYXMgd2VsbC4gIFVwb24KK2ZpZWxkcyB0byBldmVyeSA6Yzp0eXBlOmBQeU9iamVjdGAuICBUb3RhbCBhbGxvY2F0aW9ucyBhcmUgdHJhY2tlZCBhcyB3ZWxsLiAgVXBvbgogZXhpdCwgYWxsIGV4aXN0aW5nIHJlZmVyZW5jZXMgYXJlIHByaW50ZWQuICAoSW4gaW50ZXJhY3RpdmUgbW9kZSB0aGlzIGhhcHBlbnMKLWFmdGVyIGV2ZXJ5IHN0YXRlbWVudCBydW4gYnkgdGhlIGludGVycHJldGVyLikgIEltcGxpZWQgYnkgOmNtYWNybzpgUHlfREVCVUdgLgorYWZ0ZXIgZXZlcnkgc3RhdGVtZW50IHJ1biBieSB0aGUgaW50ZXJwcmV0ZXIuKSAgSW1wbGllZCBieSA6YzptYWNybzpgUHlfREVCVUdgLgogCiBQbGVhc2UgcmVmZXIgdG8gOmZpbGU6YE1pc2MvU3BlY2lhbEJ1aWxkcy50eHRgIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbgogZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaXRlci5yc3QgYi9Eb2MvYy1hcGkvaXRlci5yc3QKaW5kZXggYmE3ZTllMy4uM2YwZjU1NCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2l0ZXIucnN0CisrKyBiL0RvYy9jLWFwaS9pdGVyLnJzdApAQCAtNywxMiArNywxMiBAQAogCiBUaGVyZSBhcmUgb25seSBhIGNvdXBsZSBvZiBmdW5jdGlvbnMgc3BlY2lmaWNhbGx5IGZvciB3b3JraW5nIHdpdGggaXRlcmF0b3JzLgogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlJdGVyX0NoZWNrKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUl0ZXJfQ2hlY2soUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSBvYmplY3QgKm8qIHN1cHBvcnRzIHRoZSBpdGVyYXRvciBwcm90b2NvbC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlJdGVyX05leHQoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SXRlcl9OZXh0KFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gdGhlIG5leHQgdmFsdWUgZnJvbSB0aGUgaXRlcmF0aW9uICpvKi4gIElmIHRoZSBvYmplY3QgaXMgYW4gaXRlcmF0b3IsCiAgICB0aGlzIHJldHJpZXZlcyB0aGUgbmV4dCB2YWx1ZSBmcm9tIHRoZSBpdGVyYXRpb24sIGFuZCByZXR1cm5zICpOVUxMKiB3aXRoIG5vCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaXRlcmF0b3IucnN0IGIvRG9jL2MtYXBpL2l0ZXJhdG9yLnJzdAppbmRleCA4NjY1MDgwLi44MmNiNGViIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaXRlcmF0b3IucnN0CisrKyBiL0RvYy9jLWFwaS9pdGVyYXRvci5yc3QKQEAgLTEyLDM3ICsxMiwzNyBAQAogc2VudGluZWwgdmFsdWUgaXMgcmV0dXJuZWQuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeVNlcUl0ZXJfVHlwZQorLi4gYzp2YXI6OiBQeVR5cGVPYmplY3QgUHlTZXFJdGVyX1R5cGUKIAotICAgVHlwZSBvYmplY3QgZm9yIGl0ZXJhdG9yIG9iamVjdHMgcmV0dXJuZWQgYnkgOmNmdW5jOmBQeVNlcUl0ZXJfTmV3YCBhbmQgdGhlCisgICBUeXBlIG9iamVjdCBmb3IgaXRlcmF0b3Igb2JqZWN0cyByZXR1cm5lZCBieSA6YzpmdW5jOmBQeVNlcUl0ZXJfTmV3YCBhbmQgdGhlCiAgICBvbmUtYXJndW1lbnQgZm9ybSBvZiB0aGUgOmZ1bmM6YGl0ZXJgIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciBidWlsdC1pbiBzZXF1ZW5jZQogICAgdHlwZXMuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U2VxSXRlcl9DaGVjayhvcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXFJdGVyX0NoZWNrKG9wKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdHlwZSBvZiAqb3AqIGlzIDpjZGF0YTpgUHlTZXFJdGVyX1R5cGVgLgorICAgUmV0dXJuIHRydWUgaWYgdGhlIHR5cGUgb2YgKm9wKiBpcyA6YzpkYXRhOmBQeVNlcUl0ZXJfVHlwZWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxSXRlcl9OZXcoUHlPYmplY3QgKnNlcSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXFJdGVyX05ldyhQeU9iamVjdCAqc2VxKQogCiAgICBSZXR1cm4gYW4gaXRlcmF0b3IgdGhhdCB3b3JrcyB3aXRoIGEgZ2VuZXJhbCBzZXF1ZW5jZSBvYmplY3QsICpzZXEqLiAgVGhlCiAgICBpdGVyYXRpb24gZW5kcyB3aGVuIHRoZSBzZXF1ZW5jZSByYWlzZXMgOmV4YzpgSW5kZXhFcnJvcmAgZm9yIHRoZSBzdWJzY3JpcHRpbmcKICAgIG9wZXJhdGlvbi4KIAogCi0uLiBjdmFyOjogUHlUeXBlT2JqZWN0IFB5Q2FsbEl0ZXJfVHlwZQorLi4gYzp2YXI6OiBQeVR5cGVPYmplY3QgUHlDYWxsSXRlcl9UeXBlCiAKLSAgIFR5cGUgb2JqZWN0IGZvciBpdGVyYXRvciBvYmplY3RzIHJldHVybmVkIGJ5IDpjZnVuYzpgUHlDYWxsSXRlcl9OZXdgIGFuZCB0aGUKKyAgIFR5cGUgb2JqZWN0IGZvciBpdGVyYXRvciBvYmplY3RzIHJldHVybmVkIGJ5IDpjOmZ1bmM6YFB5Q2FsbEl0ZXJfTmV3YCBhbmQgdGhlCiAgICB0d28tYXJndW1lbnQgZm9ybSBvZiB0aGUgOmZ1bmM6YGl0ZXJgIGJ1aWx0LWluIGZ1bmN0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhbGxJdGVyX0NoZWNrKG9wKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNhbGxJdGVyX0NoZWNrKG9wKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdHlwZSBvZiAqb3AqIGlzIDpjZGF0YTpgUHlDYWxsSXRlcl9UeXBlYC4KKyAgIFJldHVybiB0cnVlIGlmIHRoZSB0eXBlIG9mICpvcCogaXMgOmM6ZGF0YTpgUHlDYWxsSXRlcl9UeXBlYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlDYWxsSXRlcl9OZXcoUHlPYmplY3QgKmNhbGxhYmxlLCBQeU9iamVjdCAqc2VudGluZWwpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5Q2FsbEl0ZXJfTmV3KFB5T2JqZWN0ICpjYWxsYWJsZSwgUHlPYmplY3QgKnNlbnRpbmVsKQogCiAgICBSZXR1cm4gYSBuZXcgaXRlcmF0b3IuICBUaGUgZmlyc3QgcGFyYW1ldGVyLCAqY2FsbGFibGUqLCBjYW4gYmUgYW55IFB5dGhvbgogICAgY2FsbGFibGUgb2JqZWN0IHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIG5vIHBhcmFtZXRlcnM7IGVhY2ggY2FsbCB0byBpdCBzaG91bGQKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9saXN0LnJzdCBiL0RvYy9jLWFwaS9saXN0LnJzdAppbmRleCA0ZTNkNTAwLi5mZWI5MDE1IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbGlzdC5yc3QKKysrIGIvRG9jL2MtYXBpL2xpc3QucnN0CkBAIC04LDMwICs4LDMwIEBACiAuLiBpbmRleDo6IG9iamVjdDogbGlzdAogCiAKLS4uIGN0eXBlOjogUHlMaXN0T2JqZWN0CisuLiBjOnR5cGU6OiBQeUxpc3RPYmplY3QKIAotICAgVGhpcyBzdWJ0eXBlIG9mIDpjdHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gbGlzdCBvYmplY3QuCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gbGlzdCBvYmplY3QuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUxpc3RfVHlwZQorLi4gYzp2YXI6OiBQeVR5cGVPYmplY3QgUHlMaXN0X1R5cGUKIAotICAgVGhpcyBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGxpc3QgdHlwZS4KKyAgIFRoaXMgaW5zdGFuY2Ugb2YgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRzIHRoZSBQeXRob24gbGlzdCB0eXBlLgogICAgVGhpcyBpcyB0aGUgc2FtZSBvYmplY3QgYXMgOmNsYXNzOmBsaXN0YCBpbiB0aGUgUHl0aG9uIGxheWVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfQ2hlY2soUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TGlzdF9DaGVjayhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgbGlzdCBvYmplY3Qgb3IgYW4gaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlIG9mIHRoZSBsaXN0CiAgICB0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlMaXN0X0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiB0cnVlIGlmICpwKiBpcyBhIGxpc3Qgb2JqZWN0LCBidXQgbm90IGFuIGluc3RhbmNlIG9mIGEgc3VidHlwZSBvZgogICAgdGhlIGxpc3QgdHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X05ldyhQeV9zc2l6ZV90IGxlbikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X05ldyhQeV9zc2l6ZV90IGxlbikKIAogICAgUmV0dXJuIGEgbmV3IGxpc3Qgb2YgbGVuZ3RoICpsZW4qIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogCkBAIC0zOSwxMSArMzksMTEgQEAKIAogICAgICAgSWYgKmxlbiogaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSByZXR1cm5lZCBsaXN0IG9iamVjdCdzIGl0ZW1zIGFyZQogICAgICAgc2V0IHRvIGBgTlVMTGBgLiAgVGh1cyB5b3UgY2Fubm90IHVzZSBhYnN0cmFjdCBBUEkgZnVuY3Rpb25zIHN1Y2ggYXMKLSAgICAgIDpjZnVuYzpgUHlTZXF1ZW5jZV9TZXRJdGVtYCAgb3IgZXhwb3NlIHRoZSBvYmplY3QgdG8gUHl0aG9uIGNvZGUgYmVmb3JlCi0gICAgICBzZXR0aW5nIGFsbCBpdGVtcyB0byBhIHJlYWwgb2JqZWN0IHdpdGggOmNmdW5jOmBQeUxpc3RfU2V0SXRlbWAuCisgICAgICA6YzpmdW5jOmBQeVNlcXVlbmNlX1NldEl0ZW1gICBvciBleHBvc2UgdGhlIG9iamVjdCB0byBQeXRob24gY29kZSBiZWZvcmUKKyAgICAgIHNldHRpbmcgYWxsIGl0ZW1zIHRvIGEgcmVhbCBvYmplY3Qgd2l0aCA6YzpmdW5jOmBQeUxpc3RfU2V0SXRlbWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeUxpc3RfU2l6ZShQeU9iamVjdCAqbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TGlzdF9TaXplKFB5T2JqZWN0ICpsaXN0KQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGxlbgogCkBAIC01MSwxMiArNTEsMTIgQEAKICAgIGBgbGVuKGxpc3QpYGAgb24gYSBsaXN0IG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TGlzdF9HRVRfU0laRShQeU9iamVjdCAqbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TGlzdF9HRVRfU0laRShQeU9iamVjdCAqbGlzdCkKIAotICAgTWFjcm8gZm9ybSBvZiA6Y2Z1bmM6YFB5TGlzdF9TaXplYCB3aXRob3V0IGVycm9yIGNoZWNraW5nLgorICAgTWFjcm8gZm9ybSBvZiA6YzpmdW5jOmBQeUxpc3RfU2l6ZWAgd2l0aG91dCBlcnJvciBjaGVja2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X0dldEl0ZW0oUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgaW5kZXgpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TGlzdF9HZXRJdGVtKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGluZGV4KQogCiAgICBSZXR1cm4gdGhlIG9iamVjdCBhdCBwb3NpdGlvbiAqaW5kZXgqIGluIHRoZSBsaXN0IHBvaW50ZWQgdG8gYnkgKmxpc3QqLiAgVGhlCiAgICBwb3NpdGlvbiBtdXN0IGJlIHBvc2l0aXZlLCBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QgaXMgbm90CkBAIC02NCwxMiArNjQsMTIgQEAKICAgIDpleGM6YEluZGV4RXJyb3JgIGV4Y2VwdGlvbi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X0dFVF9JVEVNKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGkpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TGlzdF9HRVRfSVRFTShQeU9iamVjdCAqbGlzdCwgUHlfc3NpemVfdCBpKQogCi0gICBNYWNybyBmb3JtIG9mIDpjZnVuYzpgUHlMaXN0X0dldEl0ZW1gIHdpdGhvdXQgZXJyb3IgY2hlY2tpbmcuCisgICBNYWNybyBmb3JtIG9mIDpjOmZ1bmM6YFB5TGlzdF9HZXRJdGVtYCB3aXRob3V0IGVycm9yIGNoZWNraW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfU2V0SXRlbShQeU9iamVjdCAqbGlzdCwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QgKml0ZW0pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TGlzdF9TZXRJdGVtKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCAqaXRlbSkKIAogICAgU2V0IHRoZSBpdGVtIGF0IGluZGV4ICppbmRleCogaW4gbGlzdCB0byAqaXRlbSouICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcwogICAgb3IgYGAtMWBgIG9uIGZhaWx1cmUuCkBAIC04MCwzNCArODAsMzQgQEAKICAgICAgIGFuIGl0ZW0gYWxyZWFkeSBpbiB0aGUgbGlzdCBhdCB0aGUgYWZmZWN0ZWQgcG9zaXRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeUxpc3RfU0VUX0lURU0oUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUxpc3RfU0VUX0lURU0oUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm8pCiAKLSAgIE1hY3JvIGZvcm0gb2YgOmNmdW5jOmBQeUxpc3RfU2V0SXRlbWAgd2l0aG91dCBlcnJvciBjaGVja2luZy4gVGhpcyBpcworICAgTWFjcm8gZm9ybSBvZiA6YzpmdW5jOmBQeUxpc3RfU2V0SXRlbWAgd2l0aG91dCBlcnJvciBjaGVja2luZy4gVGhpcyBpcwogICAgbm9ybWFsbHkgb25seSB1c2VkIHRvIGZpbGwgaW4gbmV3IGxpc3RzIHdoZXJlIHRoZXJlIGlzIG5vIHByZXZpb3VzIGNvbnRlbnQuCiAKICAgIC4uIG5vdGU6OgogCiAgICAgICBUaGlzIG1hY3JvICJzdGVhbHMiIGEgcmVmZXJlbmNlIHRvICppdGVtKiwgYW5kLCB1bmxpa2UKLSAgICAgIDpjZnVuYzpgUHlMaXN0X1NldEl0ZW1gLCBkb2VzICpub3QqIGRpc2NhcmQgYSByZWZlcmVuY2UgdG8gYW55IGl0ZW0gdGhhdAorICAgICAgOmM6ZnVuYzpgUHlMaXN0X1NldEl0ZW1gLCBkb2VzICpub3QqIGRpc2NhcmQgYSByZWZlcmVuY2UgdG8gYW55IGl0ZW0gdGhhdAogICAgICAgaXMgYmVpbmcgcmVwbGFjZWQ7IGFueSByZWZlcmVuY2UgaW4gKmxpc3QqIGF0IHBvc2l0aW9uICppKiB3aWxsIGJlCiAgICAgICBsZWFrZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TGlzdF9JbnNlcnQoUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0ICppdGVtKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUxpc3RfSW5zZXJ0KFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGluZGV4LCBQeU9iamVjdCAqaXRlbSkKIAogICAgSW5zZXJ0IHRoZSBpdGVtICppdGVtKiBpbnRvIGxpc3QgKmxpc3QqIGluIGZyb250IG9mIGluZGV4ICppbmRleCouICBSZXR1cm4KICAgIGBgMGBgIGlmIHN1Y2Nlc3NmdWw7IHJldHVybiBgYC0xYGAgYW5kIHNldCBhbiBleGNlcHRpb24gaWYgdW5zdWNjZXNzZnVsLgogICAgQW5hbG9nb3VzIHRvIGBgbGlzdC5pbnNlcnQoaW5kZXgsIGl0ZW0pYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TGlzdF9BcHBlbmQoUHlPYmplY3QgKmxpc3QsIFB5T2JqZWN0ICppdGVtKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUxpc3RfQXBwZW5kKFB5T2JqZWN0ICpsaXN0LCBQeU9iamVjdCAqaXRlbSkKIAogICAgQXBwZW5kIHRoZSBvYmplY3QgKml0ZW0qIGF0IHRoZSBlbmQgb2YgbGlzdCAqbGlzdCouIFJldHVybiBgYDBgYCBpZgogICAgc3VjY2Vzc2Z1bDsgcmV0dXJuIGBgLTFgYCBhbmQgc2V0IGFuIGV4Y2VwdGlvbiBpZiB1bnN1Y2Nlc3NmdWwuICBBbmFsb2dvdXMKICAgIHRvIGBgbGlzdC5hcHBlbmQoaXRlbSlgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X0dldFNsaWNlKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGxvdywgUHlfc3NpemVfdCBoaWdoKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxpc3RfR2V0U2xpY2UoUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgbG93LCBQeV9zc2l6ZV90IGhpZ2gpCiAKICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIG9iamVjdHMgaW4gKmxpc3QqIGNvbnRhaW5pbmcgdGhlIG9iamVjdHMgKmJldHdlZW4qICpsb3cqCiAgICBhbmQgKmhpZ2gqLiAgUmV0dXJuICpOVUxMKiBhbmQgc2V0IGFuIGV4Y2VwdGlvbiBpZiB1bnN1Y2Nlc3NmdWwuICBBbmFsb2dvdXMKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgc3VwcG9ydGVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfU2V0U2xpY2UoUHlPYmplY3QgKmxpc3QsIFB5X3NzaXplX3QgbG93LCBQeV9zc2l6ZV90IGhpZ2gsIFB5T2JqZWN0ICppdGVtbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlMaXN0X1NldFNsaWNlKFB5T2JqZWN0ICpsaXN0LCBQeV9zc2l6ZV90IGxvdywgUHlfc3NpemVfdCBoaWdoLCBQeU9iamVjdCAqaXRlbWxpc3QpCiAKICAgIFNldCB0aGUgc2xpY2Ugb2YgKmxpc3QqIGJldHdlZW4gKmxvdyogYW5kICpoaWdoKiB0byB0aGUgY29udGVudHMgb2YKICAgICppdGVtbGlzdCouICBBbmFsb2dvdXMgdG8gYGBsaXN0W2xvdzpoaWdoXSA9IGl0ZW1saXN0YGAuIFRoZSAqaXRlbWxpc3QqIG1heQpAQCAtMTI0LDE5ICsxMjQsMTkgQEAKICAgIHNsaWNpbmcgZnJvbSBQeXRob24sIGFyZSBub3Qgc3VwcG9ydGVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfU29ydChQeU9iamVjdCAqbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlMaXN0X1NvcnQoUHlPYmplY3QgKmxpc3QpCiAKICAgIFNvcnQgdGhlIGl0ZW1zIG9mICpsaXN0KiBpbiBwbGFjZS4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24KICAgIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBsaXN0LnNvcnQoKWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxpc3RfUmV2ZXJzZShQeU9iamVjdCAqbGlzdCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlMaXN0X1JldmVyc2UoUHlPYmplY3QgKmxpc3QpCiAKICAgIFJldmVyc2UgdGhlIGl0ZW1zIG9mICpsaXN0KiBpbiBwbGFjZS4gIFJldHVybiBgYDBgYCBvbiBzdWNjZXNzLCBgYC0xYGAgb24KICAgIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGBgbGlzdC5yZXZlcnNlKClgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMaXN0X0FzVHVwbGUoUHlPYmplY3QgKmxpc3QpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TGlzdF9Bc1R1cGxlKFB5T2JqZWN0ICpsaXN0KQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IHR1cGxlCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9sb25nLnJzdCBiL0RvYy9jLWFwaS9sb25nLnJzdAppbmRleCA5ZjhlM2M1Li5iMjI5NWUwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbG9uZy5yc3QKKysrIGIvRG9jL2MtYXBpL2xvbmcucnN0CkBAIC0xMCwzMiArMTAsMzIgQEAKIAogQWxsIGludGVnZXJzIGFyZSBpbXBsZW1lbnRlZCBhcyAibG9uZyIgaW50ZWdlciBvYmplY3RzIG9mIGFyYml0cmFyeSBzaXplLgogCi0uLiBjdHlwZTo6IFB5TG9uZ09iamVjdAorLi4gYzp0eXBlOjogUHlMb25nT2JqZWN0CiAKLSAgIFRoaXMgc3VidHlwZSBvZiA6Y3R5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgorICAgVGhpcyBzdWJ0eXBlIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIGludGVnZXIgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlMb25nX1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5TG9uZ19UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBpbnRlZ2VyIHR5cGUuCisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIGludGVnZXIgdHlwZS4KICAgIFRoaXMgaXMgdGhlIHNhbWUgb2JqZWN0IGFzIDpjbGFzczpgaW50YCBpbiB0aGUgUHl0aG9uIGxheWVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUxvbmdfQ2hlY2soUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TG9uZ19DaGVjayhQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmN0eXBlOmBQeUxvbmdPYmplY3RgIG9yIGEgc3VidHlwZSBvZgotICAgOmN0eXBlOmBQeUxvbmdPYmplY3RgLgorICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBvciBhIHN1YnR5cGUgb2YKKyAgIDpjOnR5cGU6YFB5TG9uZ09iamVjdGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TG9uZ19DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUxvbmdfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKIAotICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmN0eXBlOmBQeUxvbmdPYmplY3RgLCBidXQgbm90IGEgc3VidHlwZSBvZgotICAgOmN0eXBlOmBQeUxvbmdPYmplY3RgLgorICAgUmV0dXJuIHRydWUgaWYgaXRzIGFyZ3VtZW50IGlzIGEgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YKKyAgIDpjOnR5cGU6YFB5TG9uZ09iamVjdGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tTG9uZyhsb25nIHYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tTG9uZyhsb25nIHYpCiAKLSAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IGZyb20gKnYqLCBvciAqTlVMTCogb24gZmFpbHVyZS4KKyAgIFJldHVybiBhIG5ldyA6Yzp0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tICp2Kiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAKICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGtlZXBzIGFuIGFycmF5IG9mIGludGVnZXIgb2JqZWN0cyBmb3IgYWxsIGludGVnZXJzCiAgICBiZXR3ZWVuIGBgLTVgYCBhbmQgYGAyNTZgYCwgd2hlbiB5b3UgY3JlYXRlIGFuIGludCBpbiB0aGF0IHJhbmdlIHlvdSBhY3R1YWxseQpAQCAtNDQsNDcgKzQ0LDQ3IEBACiAgICB1bmRlZmluZWQuIDotKQogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyh1bnNpZ25lZCBsb25nIHYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHVuc2lnbmVkIGxvbmcgdikKIAotICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3QgZnJvbSBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCwgb3IKKyAgIFJldHVybiBhIG5ldyA6Yzp0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tIGEgQyA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nYCwgb3IKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCB2KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCB2KQogCi0gICBSZXR1cm4gYSBuZXcgOmN0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tIGEgQyA6Y3R5cGU6YFB5X3NzaXplX3RgLCBvcgorICAgUmV0dXJuIGEgbmV3IDpjOnR5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IGZyb20gYSBDIDpjOnR5cGU6YFB5X3NzaXplX3RgLCBvcgogICAgKk5VTEwqIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU2l6ZV90KHNpemVfdCB2KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVNpemVfdChzaXplX3QgdikKIAotICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3QgZnJvbSBhIEMgOmN0eXBlOmBzaXplX3RgLCBvcgorICAgUmV0dXJuIGEgbmV3IDpjOnR5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IGZyb20gYSBDIDpjOnR5cGU6YHNpemVfdGAsIG9yCiAgICAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MT05HX0xPTkcgdikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MT05HX0xPTkcgdikKIAotICAgUmV0dXJuIGEgbmV3IDpjdHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3QgZnJvbSBhIEMgOmN0eXBlOmBsb25nIGxvbmdgLCBvciAqTlVMTCoKKyAgIFJldHVybiBhIG5ldyA6Yzp0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tIGEgQyA6Yzp0eXBlOmBsb25nIGxvbmdgLCBvciAqTlVMTCoKICAgIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZyh1bnNpZ25lZCBQWV9MT05HX0xPTkcgdikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nKHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB2KQogCi0gICBSZXR1cm4gYSBuZXcgOmN0eXBlOmBQeUxvbmdPYmplY3RgIG9iamVjdCBmcm9tIGEgQyA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AsCisgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3QgZnJvbSBhIEMgOmM6dHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCwKICAgIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbURvdWJsZShkb3VibGUgdikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Eb3VibGUoZG91YmxlIHYpCiAKLSAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgb2JqZWN0IGZyb20gdGhlIGludGVnZXIgcGFydCBvZiAqdiosIG9yCisgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBvYmplY3QgZnJvbSB0aGUgaW50ZWdlciBwYXJ0IG9mICp2Kiwgb3IKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVN0cmluZyhjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCiAKLSAgIFJldHVybiBhIG5ldyA6Y3R5cGU6YFB5TG9uZ09iamVjdGAgYmFzZWQgb24gdGhlIHN0cmluZyB2YWx1ZSBpbiAqc3RyKiwgd2hpY2gKKyAgIFJldHVybiBhIG5ldyA6Yzp0eXBlOmBQeUxvbmdPYmplY3RgIGJhc2VkIG9uIHRoZSBzdHJpbmcgdmFsdWUgaW4gKnN0ciosIHdoaWNoCiAgICBpcyBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJhZGl4IGluICpiYXNlKi4gIElmICpwZW5kKiBpcyBub24tKk5VTEwqLAotICAgYGAqcGVuZGBgIHdpbGwgcG9pbnQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbiAqc3RyKiB3aGljaCBmb2xsb3dzIHRoZQorICAgKlwqcGVuZCogd2lsbCBwb2ludCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluICpzdHIqIHdoaWNoIGZvbGxvd3MgdGhlCiAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgbnVtYmVyLiAgSWYgKmJhc2UqIGlzIGBgMGBgLCB0aGUgcmFkaXggd2lsbCBiZQogICAgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgbGVhZGluZyBjaGFyYWN0ZXJzIG9mICpzdHIqOiBpZiAqc3RyKiBzdGFydHMgd2l0aAogICAgYGAnMHgnYGAgb3IgYGAnMFgnYGAsIHJhZGl4IDE2IHdpbGwgYmUgdXNlZDsgaWYgKnN0ciogc3RhcnRzIHdpdGggYGAnMG8nYGAgb3IKQEAgLTk0LDg1ICs5NCwxMDEgQEAKICAgIGlnbm9yZWQuICBJZiB0aGVyZSBhcmUgbm8gZGlnaXRzLCA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Vbmljb2RlKFB5X1VOSUNPREUgKnUsIFB5X3NzaXplX3QgbGVuZ3RoLCBpbnQgYmFzZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21Vbmljb2RlKFB5X1VOSUNPREUgKnUsIFB5X3NzaXplX3QgbGVuZ3RoLCBpbnQgYmFzZSkKIAogICAgQ29udmVydCBhIHNlcXVlbmNlIG9mIFVuaWNvZGUgZGlnaXRzIHRvIGEgUHl0aG9uIGludGVnZXIgdmFsdWUuICBUaGUgVW5pY29kZQotICAgc3RyaW5nIGlzIGZpcnN0IGVuY29kZWQgdG8gYSBieXRlIHN0cmluZyB1c2luZyA6Y2Z1bmM6YFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsYAotICAgYW5kIHRoZW4gY29udmVydGVkIHVzaW5nIDpjZnVuYzpgUHlMb25nX0Zyb21TdHJpbmdgLgorICAgc3RyaW5nIGlzIGZpcnN0IGVuY29kZWQgdG8gYSBieXRlIHN0cmluZyB1c2luZyA6YzpmdW5jOmBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbGAKKyAgIGFuZCB0aGVuIGNvbnZlcnRlZCB1c2luZyA6YzpmdW5jOmBQeUxvbmdfRnJvbVN0cmluZ2AuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tVm9pZFB0cih2b2lkICpwKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUxvbmdfRnJvbVZvaWRQdHIodm9pZCAqcCkKIAogICAgQ3JlYXRlIGEgUHl0aG9uIGludGVnZXIgZnJvbSB0aGUgcG9pbnRlciAqcCouIFRoZSBwb2ludGVyIHZhbHVlIGNhbiBiZQotICAgcmV0cmlldmVkIGZyb20gdGhlIHJlc3VsdGluZyB2YWx1ZSB1c2luZyA6Y2Z1bmM6YFB5TG9uZ19Bc1ZvaWRQdHJgLgorICAgcmV0cmlldmVkIGZyb20gdGhlIHJlc3VsdGluZyB2YWx1ZSB1c2luZyA6YzpmdW5jOmBQeUxvbmdfQXNWb2lkUHRyYC4KIAogCiAuLiBYWFggYWxpYXMgUHlMb25nX0FTX0xPTkcgKGZvciBub3cpCi0uLiBjZnVuY3Rpb246OiBsb25nIFB5TG9uZ19Bc0xvbmcoUHlPYmplY3QgKnB5bG9uZykKKy4uIGM6ZnVuY3Rpb246OiBsb25nIFB5TG9uZ19Bc0xvbmcoUHlPYmplY3QgKnB5bG9uZykKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBMT05HX01BWAogICAgICAgc2luZ2xlOiBPdmVyZmxvd0Vycm9yIChidWlsdC1pbiBleGNlcHRpb24pCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgKnB5bG9uZyouICBJZgorICAgUmV0dXJuIGEgQyA6Yzp0eXBlOmBsb25nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgKnB5bG9uZyouICBJZgogICAgKnB5bG9uZyogaXMgZ3JlYXRlciB0aGFuIDpjb25zdDpgTE9OR19NQVhgLCByYWlzZSBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCwKICAgIGFuZCByZXR1cm4gLTEuIENvbnZlcnQgbm9uLWxvbmcgb2JqZWN0cyBhdXRvbWF0aWNhbGx5IHRvIGxvbmcgZmlyc3QsCiAgICBhbmQgcmV0dXJuIC0xIGlmIHRoYXQgcmFpc2VzIGV4Y2VwdGlvbnMuCiAKLS4uIGNmdW5jdGlvbjo6IGxvbmcgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICpweWxvbmcsIGludCogb3ZlcmZsb3cpCisuLiBjOmZ1bmN0aW9uOjogbG9uZyBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coUHlPYmplY3QgKnB5bG9uZywgaW50ICpvdmVyZmxvdykKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGxvbmdgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4gIElmCi0gICAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gOmNvbnN0OmBMT05HX01BWGAsIHJldHVybiAtMSBhbmQKLSAgIHNldCBgKm92ZXJmbG93YCB0byAxIChmb3Igb3ZlcmZsb3cpIG9yIC0xIChmb3IgdW5kZXJmbG93KS4KLSAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgYmVjYXVzZSBvZiB0eXBlIGVycm9ycywgYWxzbyByZXR1cm4gLTEuCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YGxvbmdgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZgorICAgKnB5bG9uZyouICBJZiAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gOmNvbnN0OmBMT05HX01BWGAgb3IgbGVzcworICAgdGhhbiA6Y29uc3Q6YExPTkdfTUlOYCwgc2V0ICpcKm92ZXJmbG93KiB0byBgYDFgYCBvciBgYC0xYGAsCisgICByZXNwZWN0aXZlbHksIGFuZCByZXR1cm4gYGAtMWBgOyBvdGhlcndpc2UsIHNldCAqXCpvdmVyZmxvdyogdG8KKyAgIGBgMGBgLiAgSWYgYW55IG90aGVyIGV4Y2VwdGlvbiBvY2N1cnMgKGZvciBleGFtcGxlIGEgVHlwZUVycm9yIG9yCisgICBNZW1vcnlFcnJvciksIHRoZW4gYGAtMWBgIHdpbGwgYmUgcmV0dXJuZWQgYW5kICpcKm92ZXJmbG93KiB3aWxsCisgICBiZSBgYDBgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnB5bG9uZykKKy4uIGM6ZnVuY3Rpb246OiBQWV9MT05HX0xPTkcgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqcHlsb25nLCBpbnQgKm92ZXJmbG93KQorCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YGxvbmcgbG9uZ2AgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mCisgICAqcHlsb25nKi4gIElmICpweWxvbmcqIGlzIGdyZWF0ZXIgdGhhbiA6Y29uc3Q6YFBZX0xMT05HX01BWGAgb3IgbGVzcworICAgdGhhbiA6Y29uc3Q6YFBZX0xMT05HX01JTmAsIHNldCAqXCpvdmVyZmxvdyogdG8gYGAxYGAgb3IgYGAtMWBgLAorICAgcmVzcGVjdGl2ZWx5LCBhbmQgcmV0dXJuIGBgLTFgYDsgb3RoZXJ3aXNlLCBzZXQgKlwqb3ZlcmZsb3cqIHRvCisgICBgYDBgYC4gIElmIGFueSBvdGhlciBleGNlcHRpb24gb2NjdXJzIChmb3IgZXhhbXBsZSBhIFR5cGVFcnJvciBvcgorICAgTWVtb3J5RXJyb3IpLCB0aGVuIGBgLTFgYCB3aWxsIGJlIHJldHVybmVkIGFuZCAqXCpvdmVyZmxvdyogd2lsbAorICAgYmUgYGAwYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TG9uZ19Bc1NzaXplX3QoUHlPYmplY3QgKnB5bG9uZykKIAogICAgLi4gaW5kZXg6OgogICAgICAgc2luZ2xlOiBQWV9TU0laRV9UX01BWAogICAgICAgc2luZ2xlOiBPdmVyZmxvd0Vycm9yIChidWlsdC1pbiBleGNlcHRpb24pCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmBQeV9zc2l6ZV90YCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgKnB5bG9uZyouCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YFB5X3NzaXplX3RgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4KICAgIElmICpweWxvbmcqIGlzIGdyZWF0ZXIgdGhhbiA6Y29uc3Q6YFBZX1NTSVpFX1RfTUFYYCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAKICAgIGlzIHJhaXNlZCBhbmQgYGAtMWBgIHdpbGwgYmUgcmV0dXJuZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogdW5zaWduZWQgbG9uZyBQeUxvbmdfQXNVbnNpZ25lZExvbmcoUHlPYmplY3QgKnB5bG9uZykKKy4uIGM6ZnVuY3Rpb246OiB1bnNpZ25lZCBsb25nIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhQeU9iamVjdCAqcHlsb25nKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IFVMT05HX01BWAogICAgICAgc2luZ2xlOiBPdmVyZmxvd0Vycm9yIChidWlsdC1pbiBleGNlcHRpb24pCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgKnB5bG9uZyouCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YHVuc2lnbmVkIGxvbmdgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4KICAgIElmICpweWxvbmcqIGlzIGdyZWF0ZXIgdGhhbiA6Y29uc3Q6YFVMT05HX01BWGAsIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzCiAgICByYWlzZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogc2l6ZV90IFB5TG9uZ19Bc1NpemVfdChQeU9iamVjdCAqcHlsb25nKQorLi4gYzpmdW5jdGlvbjo6IHNpemVfdCBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnB5bG9uZykKIAotICAgUmV0dXJuIGEgOmN0eXBlOmBzaXplX3RgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4gIElmCi0gICAqcHlsb25nKiBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gdmFsdWUgZm9yIGEgOmN0eXBlOmBzaXplX3RgLCBhbgorICAgUmV0dXJuIGEgOmM6dHlwZTpgc2l6ZV90YCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgKnB5bG9uZyouICBJZgorICAgKnB5bG9uZyogaXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHZhbHVlIGZvciBhIDpjOnR5cGU6YHNpemVfdGAsIGFuCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUFlfTE9OR19MT05HIFB5TG9uZ19Bc0xvbmdMb25nKFB5T2JqZWN0ICpweWxvbmcpCisuLiBjOmZ1bmN0aW9uOjogUFlfTE9OR19MT05HIFB5TG9uZ19Bc0xvbmdMb25nKFB5T2JqZWN0ICpweWxvbmcpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogT3ZlcmZsb3dFcnJvciAoYnVpbHQtaW4gZXhjZXB0aW9uKQogCi0gICBSZXR1cm4gYSBDIDpjdHlwZTpgbG9uZyBsb25nYCBmcm9tIGEgUHl0aG9uIGludGVnZXIuICBJZiAqcHlsb25nKgotICAgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgOmN0eXBlOmBsb25nIGxvbmdgLCBhbgorICAgUmV0dXJuIGEgQyA6Yzp0eXBlOmBsb25nIGxvbmdgIGZyb20gYSBQeXRob24gaW50ZWdlci4gIElmICpweWxvbmcqCisgICBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYSA6Yzp0eXBlOmBsb25nIGxvbmdgLCBhbgogICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaXMgcmFpc2VkIGFuZCBgYC0xYGAgaXMgcmV0dXJuZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogdW5zaWduZWQgUFlfTE9OR19MT05HIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcoUHlPYmplY3QgKnB5bG9uZykKKy4uIGM6ZnVuY3Rpb246OiB1bnNpZ25lZCBQWV9MT05HX0xPTkcgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhQeU9iamVjdCAqcHlsb25nKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IE92ZXJmbG93RXJyb3IgKGJ1aWx0LWluIGV4Y2VwdGlvbikKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgZnJvbSBhIFB5dGhvbiBpbnRlZ2VyLiBJZgotICAgKnB5bG9uZyogY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGFuIDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCwKKyAgIFJldHVybiBhIEMgOmM6dHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCBmcm9tIGEgUHl0aG9uIGludGVnZXIuIElmCisgICAqcHlsb25nKiBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgYXMgYW4gOmM6dHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCwKICAgIGFuIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzIHJhaXNlZCBhbmQgYGAodW5zaWduZWQgbG9uZyBsb25nKS0xYGAgaXMKICAgIHJldHVybmVkLgogCkBAIC0xODAsMjggKzE5NiwyOCBAQAogICAgICAgQSBuZWdhdGl2ZSAqcHlsb25nKiBub3cgcmFpc2VzIDpleGM6YE92ZXJmbG93RXJyb3JgLCBub3QgOmV4YzpgVHlwZUVycm9yYC4KIAogCi0uLiBjZnVuY3Rpb246OiB1bnNpZ25lZCBsb25nIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soUHlPYmplY3QgKmlvKQorLi4gYzpmdW5jdGlvbjo6IHVuc2lnbmVkIGxvbmcgUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqaW8pCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCBmcm9tIGEgUHl0aG9uIGludGVnZXIsIHdpdGhvdXQgY2hlY2tpbmcgZm9yCisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YHVuc2lnbmVkIGxvbmdgIGZyb20gYSBQeXRob24gaW50ZWdlciwgd2l0aG91dCBjaGVja2luZyBmb3IKICAgIG92ZXJmbG93LgogCiAKLS4uIGNmdW5jdGlvbjo6IHVuc2lnbmVkIFBZX0xPTkdfTE9ORyBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nTWFzayhQeU9iamVjdCAqaW8pCisuLiBjOmZ1bmN0aW9uOjogdW5zaWduZWQgUFlfTE9OR19MT05HIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICppbykKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgZnJvbSBhIFB5dGhvbiBpbnRlZ2VyLCB3aXRob3V0CisgICBSZXR1cm4gYSBDIDpjOnR5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgZnJvbSBhIFB5dGhvbiBpbnRlZ2VyLCB3aXRob3V0CiAgICBjaGVja2luZyBmb3Igb3ZlcmZsb3cuCiAKIAotLi4gY2Z1bmN0aW9uOjogZG91YmxlIFB5TG9uZ19Bc0RvdWJsZShQeU9iamVjdCAqcHlsb25nKQorLi4gYzpmdW5jdGlvbjo6IGRvdWJsZSBQeUxvbmdfQXNEb3VibGUoUHlPYmplY3QgKnB5bG9uZykKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YGRvdWJsZWAgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpweWxvbmcqLiAgSWYKLSAgICpweWxvbmcqIGNhbm5vdCBiZSBhcHByb3hpbWF0ZWx5IHJlcHJlc2VudGVkIGFzIGEgOmN0eXBlOmBkb3VibGVgLCBhbgorICAgUmV0dXJuIGEgQyA6Yzp0eXBlOmBkb3VibGVgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiAqcHlsb25nKi4gIElmCisgICAqcHlsb25nKiBjYW5ub3QgYmUgYXBwcm94aW1hdGVseSByZXByZXNlbnRlZCBhcyBhIDpjOnR5cGU6YGRvdWJsZWAsIGFuCiAgICA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCBgYC0xLjBgYCB3aWxsIGJlIHJldHVybmVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5TG9uZ19Bc1ZvaWRQdHIoUHlPYmplY3QgKnB5bG9uZykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeUxvbmdfQXNWb2lkUHRyKFB5T2JqZWN0ICpweWxvbmcpCiAKLSAgIENvbnZlcnQgYSBQeXRob24gaW50ZWdlciAqcHlsb25nKiB0byBhIEMgOmN0eXBlOmB2b2lkYCBwb2ludGVyLgorICAgQ29udmVydCBhIFB5dGhvbiBpbnRlZ2VyICpweWxvbmcqIHRvIGEgQyA6Yzp0eXBlOmB2b2lkYCBwb2ludGVyLgogICAgSWYgKnB5bG9uZyogY2Fubm90IGJlIGNvbnZlcnRlZCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQuICBUaGlzCi0gICBpcyBvbmx5IGFzc3VyZWQgdG8gcHJvZHVjZSBhIHVzYWJsZSA6Y3R5cGU6YHZvaWRgIHBvaW50ZXIgZm9yIHZhbHVlcyBjcmVhdGVkCi0gICB3aXRoIDpjZnVuYzpgUHlMb25nX0Zyb21Wb2lkUHRyYC4KKyAgIGlzIG9ubHkgYXNzdXJlZCB0byBwcm9kdWNlIGEgdXNhYmxlIDpjOnR5cGU6YHZvaWRgIHBvaW50ZXIgZm9yIHZhbHVlcyBjcmVhdGVkCisgICB3aXRoIDpjOmZ1bmM6YFB5TG9uZ19Gcm9tVm9pZFB0cmAuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QgYi9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKaW5kZXggNWIyZGUxNC4uMGVmMjk2MSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21hcHBpbmcucnN0CisrKyBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdApAQCAtNiwxMyArNiwxMyBAQAogPT09PT09PT09PT09PT09PQogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIGBgMWBgIGlmIHRoZSBvYmplY3QgcHJvdmlkZXMgbWFwcGluZyBwcm90b2NvbCwgYW5kIGBgMGBgIG90aGVyd2lzZS4gIFRoaXMKICAgIGZ1bmN0aW9uIGFsd2F5cyBzdWNjZWVkcy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5TWFwcGluZ19TaXplKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlNYXBwaW5nX1NpemUoUHlPYmplY3QgKm8pCiAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IFB5TWFwcGluZ19MZW5ndGgoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogbGVuCkBAIC0yMiw1OCArMjIsNTggQEAKICAgIGV4cHJlc3Npb24gYGBsZW4obylgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKIAogICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QgKmtleSogZnJvbSB0aGUgb2JqZWN0ICpvKi4gUmV0dXJuIGBgLTFgYCBvbgogICAgZmFpbHVyZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYGRlbCBvW2tleV1gYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0RlbEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19EZWxJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKIAogICAgT24gc3VjY2VzcywgcmV0dXJuIGBgMWBgIGlmIHRoZSBtYXBwaW5nIG9iamVjdCBoYXMgdGhlIGtleSAqa2V5KiBhbmQgYGAwYGAKICAgIG90aGVyd2lzZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBrZXkgaW4gb2BgLgogICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TWFwcGluZ19IYXNLZXkoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19IYXNLZXkoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiBgYDFgYCBpZiB0aGUgbWFwcGluZyBvYmplY3QgaGFzIHRoZSBrZXkgKmtleSogYW5kIGBgMGBgIG90aGVyd2lzZS4gIFRoaXMKICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBga2V5IGluIG9gYC4gIFRoaXMgZnVuY3Rpb24gYWx3YXlzCiAgICBzdWNjZWVkcy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0tleXMoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19LZXlzKFB5T2JqZWN0ICpvKQogCiAgICBPbiBzdWNjZXNzLCByZXR1cm4gYSBsaXN0IG9mIHRoZSBrZXlzIGluIG9iamVjdCAqbyouICBPbiBmYWlsdXJlLCByZXR1cm4gKk5VTEwqLgogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxpc3Qoby5rZXlzKCkpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19WYWx1ZXMoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19WYWx1ZXMoUHlPYmplY3QgKm8pCiAKICAgIE9uIHN1Y2Nlc3MsIHJldHVybiBhIGxpc3Qgb2YgdGhlIHZhbHVlcyBpbiBvYmplY3QgKm8qLiAgT24gZmFpbHVyZSwgcmV0dXJuCiAgICAqTlVMTCouIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8udmFsdWVzKCkpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFwcGluZ19JdGVtcyhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0l0ZW1zKFB5T2JqZWN0ICpvKQogCiAgICBPbiBzdWNjZXNzLCByZXR1cm4gYSBsaXN0IG9mIHRoZSBpdGVtcyBpbiBvYmplY3QgKm8qLCB3aGVyZSBlYWNoIGl0ZW0gaXMgYSB0dXBsZQogICAgY29udGFpbmluZyBhIGtleS12YWx1ZSBwYWlyLiAgT24gZmFpbHVyZSwgcmV0dXJuICpOVUxMKi4gVGhpcyBpcyBlcXVpdmFsZW50IHRvCiAgICB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8uaXRlbXMoKSlgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKIAogICAgUmV0dXJuIGVsZW1lbnQgb2YgKm8qIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCAqa2V5KiBvciAqTlVMTCogb24gZmFpbHVyZS4KICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgb1trZXldYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXksIFB5T2JqZWN0ICp2KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5LCBQeU9iamVjdCAqdikKIAogICAgTWFwIHRoZSBvYmplY3QgKmtleSogdG8gdGhlIHZhbHVlICp2KiBpbiBvYmplY3QgKm8qLiBSZXR1cm5zIGBgLTFgYCBvbiBmYWlsdXJlLgogICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG9ba2V5XSA9IHZgYC4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXJzaGFsLnJzdCBiL0RvYy9jLWFwaS9tYXJzaGFsLnJzdAppbmRleCAwNGIwYjg4Li5kYTQwMmE4IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFyc2hhbC5yc3QKKysrIGIvRG9jL2MtYXBpL21hcnNoYWwucnN0CkBAIC0xOSwyMCArMTksMjAgQEAKICpQeV9NQVJTSEFMX1ZFUlNJT04qIGluZGljYXRlcyB0aGUgY3VycmVudCBmaWxlIGZvcm1hdCAoY3VycmVudGx5IDIpLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlNYXJzaGFsX1dyaXRlTG9uZ1RvRmlsZShsb25nIHZhbHVlLCBGSUxFICpmaWxlLCBpbnQgdmVyc2lvbikKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUobG9uZyB2YWx1ZSwgRklMRSAqZmlsZSwgaW50IHZlcnNpb24pCiAKLSAgIE1hcnNoYWwgYSA6Y3R5cGU6YGxvbmdgIGludGVnZXIsICp2YWx1ZSosIHRvICpmaWxlKi4gIFRoaXMgd2lsbCBvbmx5IHdyaXRlCisgICBNYXJzaGFsIGEgOmM6dHlwZTpgbG9uZ2AgaW50ZWdlciwgKnZhbHVlKiwgdG8gKmZpbGUqLiAgVGhpcyB3aWxsIG9ubHkgd3JpdGUKICAgIHRoZSBsZWFzdC1zaWduaWZpY2FudCAzMiBiaXRzIG9mICp2YWx1ZSo7IHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlCi0gICBuYXRpdmUgOmN0eXBlOmBsb25nYCB0eXBlLiAgKnZlcnNpb24qIGluZGljYXRlcyB0aGUgZmlsZSBmb3JtYXQuCisgICBuYXRpdmUgOmM6dHlwZTpgbG9uZ2AgdHlwZS4gICp2ZXJzaW9uKiBpbmRpY2F0ZXMgdGhlIGZpbGUgZm9ybWF0LgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICp2YWx1ZSwgRklMRSAqZmlsZSwgaW50IHZlcnNpb24pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUoUHlPYmplY3QgKnZhbHVlLCBGSUxFICpmaWxlLCBpbnQgdmVyc2lvbikKIAogICAgTWFyc2hhbCBhIFB5dGhvbiBvYmplY3QsICp2YWx1ZSosIHRvICpmaWxlKi4KICAgICp2ZXJzaW9uKiBpbmRpY2F0ZXMgdGhlIGZpbGUgZm9ybWF0LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIGludCB2ZXJzaW9uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb1N0cmluZyhQeU9iamVjdCAqdmFsdWUsIGludCB2ZXJzaW9uKQogCiAgICBSZXR1cm4gYSBzdHJpbmcgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG1hcnNoYWxsZWQgcmVwcmVzZW50YXRpb24gb2YgKnZhbHVlKi4KICAgICp2ZXJzaW9uKiBpbmRpY2F0ZXMgdGhlIGZpbGUgZm9ybWF0LgpAQCAtNDcsMzEgKzQ3LDMxIEBACiB3cml0dGVuIHVzaW5nIHRoZXNlIHJvdXRpbmVzPwogCiAKLS4uIGNmdW5jdGlvbjo6IGxvbmcgUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoRklMRSAqZmlsZSkKKy4uIGM6ZnVuY3Rpb246OiBsb25nIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKEZJTEUgKmZpbGUpCiAKLSAgIFJldHVybiBhIEMgOmN0eXBlOmBsb25nYCBmcm9tIHRoZSBkYXRhIHN0cmVhbSBpbiBhIDpjdHlwZTpgRklMRVwqYCBvcGVuZWQKKyAgIFJldHVybiBhIEMgOmM6dHlwZTpgbG9uZ2AgZnJvbSB0aGUgZGF0YSBzdHJlYW0gaW4gYSA6Yzp0eXBlOmBGSUxFXCpgIG9wZW5lZAogICAgZm9yIHJlYWRpbmcuICBPbmx5IGEgMzItYml0IHZhbHVlIGNhbiBiZSByZWFkIGluIHVzaW5nIHRoaXMgZnVuY3Rpb24sCi0gICByZWdhcmRsZXNzIG9mIHRoZSBuYXRpdmUgc2l6ZSBvZiA6Y3R5cGU6YGxvbmdgLgorICAgcmVnYXJkbGVzcyBvZiB0aGUgbmF0aXZlIHNpemUgb2YgOmM6dHlwZTpgbG9uZ2AuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShGSUxFICpmaWxlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoRklMRSAqZmlsZSkKIAotICAgUmV0dXJuIGEgQyA6Y3R5cGU6YHNob3J0YCBmcm9tIHRoZSBkYXRhIHN0cmVhbSBpbiBhIDpjdHlwZTpgRklMRVwqYCBvcGVuZWQKKyAgIFJldHVybiBhIEMgOmM6dHlwZTpgc2hvcnRgIGZyb20gdGhlIGRhdGEgc3RyZWFtIGluIGEgOmM6dHlwZTpgRklMRVwqYCBvcGVuZWQKICAgIGZvciByZWFkaW5nLiAgT25seSBhIDE2LWJpdCB2YWx1ZSBjYW4gYmUgcmVhZCBpbiB1c2luZyB0aGlzIGZ1bmN0aW9uLAotICAgcmVnYXJkbGVzcyBvZiB0aGUgbmF0aXZlIHNpemUgb2YgOmN0eXBlOmBzaG9ydGAuCisgICByZWdhcmRsZXNzIG9mIHRoZSBuYXRpdmUgc2l6ZSBvZiA6Yzp0eXBlOmBzaG9ydGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbUZpbGUoRklMRSAqZmlsZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICpmaWxlKQogCi0gICBSZXR1cm4gYSBQeXRob24gb2JqZWN0IGZyb20gdGhlIGRhdGEgc3RyZWFtIGluIGEgOmN0eXBlOmBGSUxFXCpgIG9wZW5lZCBmb3IKKyAgIFJldHVybiBhIFB5dGhvbiBvYmplY3QgZnJvbSB0aGUgZGF0YSBzdHJlYW0gaW4gYSA6Yzp0eXBlOmBGSUxFXCpgIG9wZW5lZCBmb3IKICAgIHJlYWRpbmcuICBPbiBlcnJvciwgc2V0cyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uICg6ZXhjOmBFT0ZFcnJvcmAgb3IKICAgIDpleGM6YFR5cGVFcnJvcmApIGFuZCByZXR1cm5zICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGUoRklMRSAqZmlsZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRMYXN0T2JqZWN0RnJvbUZpbGUoRklMRSAqZmlsZSkKIAotICAgUmV0dXJuIGEgUHl0aG9uIG9iamVjdCBmcm9tIHRoZSBkYXRhIHN0cmVhbSBpbiBhIDpjdHlwZTpgRklMRVwqYCBvcGVuZWQgZm9yCi0gICByZWFkaW5nLiAgVW5saWtlIDpjZnVuYzpgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZWAsIHRoaXMgZnVuY3Rpb24KKyAgIFJldHVybiBhIFB5dGhvbiBvYmplY3QgZnJvbSB0aGUgZGF0YSBzdHJlYW0gaW4gYSA6Yzp0eXBlOmBGSUxFXCpgIG9wZW5lZCBmb3IKKyAgIHJlYWRpbmcuICBVbmxpa2UgOmM6ZnVuYzpgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZWAsIHRoaXMgZnVuY3Rpb24KICAgIGFzc3VtZXMgdGhhdCBubyBmdXJ0aGVyIG9iamVjdHMgd2lsbCBiZSByZWFkIGZyb20gdGhlIGZpbGUsIGFsbG93aW5nIGl0IHRvCiAgICBhZ2dyZXNzaXZlbHkgbG9hZCBmaWxlIGRhdGEgaW50byBtZW1vcnkgc28gdGhhdCB0aGUgZGUtc2VyaWFsaXphdGlvbiBjYW4KICAgIG9wZXJhdGUgZnJvbSBkYXRhIGluIG1lbW9yeSByYXRoZXIgdGhhbiByZWFkaW5nIGEgYnl0ZSBhdCBhIHRpbWUgZnJvbSB0aGUKQEAgLTgwLDcgKzgwLDcgQEAKICAgICg6ZXhjOmBFT0ZFcnJvcmAgb3IgOmV4YzpgVHlwZUVycm9yYCkgYW5kIHJldHVybnMgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY2hhciAqc3RyaW5nLCBQeV9zc2l6ZV90IGxlbikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNoYXIgKnN0cmluZywgUHlfc3NpemVfdCBsZW4pCiAKICAgIFJldHVybiBhIFB5dGhvbiBvYmplY3QgZnJvbSB0aGUgZGF0YSBzdHJlYW0gaW4gYSBjaGFyYWN0ZXIgYnVmZmVyCiAgICBjb250YWluaW5nICpsZW4qIGJ5dGVzIHBvaW50ZWQgdG8gYnkgKnN0cmluZyouICBPbiBlcnJvciwgc2V0cyB0aGUKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tZW1vcnkucnN0IGIvRG9jL2MtYXBpL21lbW9yeS5yc3QKaW5kZXggODFkN2NkOS4uYjgwYjNkNSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21lbW9yeS5yc3QKKysrIGIvRG9jL2MtYXBpL21lbW9yeS5yc3QKQEAgLTQ3LDggKzQ3LDggQEAKICAgIHNpbmdsZTogZnJlZSgpCiAKIFRvIGF2b2lkIG1lbW9yeSBjb3JydXB0aW9uLCBleHRlbnNpb24gd3JpdGVycyBzaG91bGQgbmV2ZXIgdHJ5IHRvIG9wZXJhdGUgb24KLVB5dGhvbiBvYmplY3RzIHdpdGggdGhlIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgQyBsaWJyYXJ5OiA6Y2Z1bmM6YG1hbGxvY2AsCi06Y2Z1bmM6YGNhbGxvY2AsIDpjZnVuYzpgcmVhbGxvY2AgYW5kIDpjZnVuYzpgZnJlZWAuICBUaGlzIHdpbGwgcmVzdWx0IGluICBtaXhlZAorUHl0aG9uIG9iamVjdHMgd2l0aCB0aGUgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoZSBDIGxpYnJhcnk6IDpjOmZ1bmM6YG1hbGxvY2AsCis6YzpmdW5jOmBjYWxsb2NgLCA6YzpmdW5jOmByZWFsbG9jYCBhbmQgOmM6ZnVuYzpgZnJlZWAuICBUaGlzIHdpbGwgcmVzdWx0IGluICBtaXhlZAogY2FsbHMgYmV0d2VlbiB0aGUgQyBhbGxvY2F0b3IgYW5kIHRoZSBQeXRob24gbWVtb3J5IG1hbmFnZXIgd2l0aCBmYXRhbAogY29uc2VxdWVuY2VzLCBiZWNhdXNlIHRoZXkgaW1wbGVtZW50IGRpZmZlcmVudCBhbGdvcml0aG1zIGFuZCBvcGVyYXRlIG9uCiBkaWZmZXJlbnQgaGVhcHMuICBIb3dldmVyLCBvbmUgbWF5IHNhZmVseSBhbGxvY2F0ZSBhbmQgcmVsZWFzZSBtZW1vcnkgYmxvY2tzCkBAIC05NCw2NSArOTQsNjUgQEAKIG1lbW9yeSBmcm9tIHRoZSBQeXRob24gaGVhcDoKIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9NYWxsb2Moc2l6ZV90IG4pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fTWFsbG9jKHNpemVfdCBuKQogCi0gICBBbGxvY2F0ZXMgKm4qIGJ5dGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciBvZiB0eXBlIDpjdHlwZTpgdm9pZFwqYCB0byB0aGUKKyAgIEFsbG9jYXRlcyAqbiogYnl0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIG9mIHR5cGUgOmM6dHlwZTpgdm9pZFwqYCB0byB0aGUKICAgIGFsbG9jYXRlZCBtZW1vcnksIG9yICpOVUxMKiBpZiB0aGUgcmVxdWVzdCBmYWlscy4gUmVxdWVzdGluZyB6ZXJvIGJ5dGVzIHJldHVybnMKLSAgIGEgZGlzdGluY3Qgbm9uLSpOVUxMKiBwb2ludGVyIGlmIHBvc3NpYmxlLCBhcyBpZiA6Y2Z1bmM6YFB5TWVtX01hbGxvYygxKWAgaGFkCisgICBhIGRpc3RpbmN0IG5vbi0qTlVMTCogcG9pbnRlciBpZiBwb3NzaWJsZSwgYXMgaWYgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jKDEpYCBoYWQKICAgIGJlZW4gY2FsbGVkIGluc3RlYWQuIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIGluIGFueSB3YXkuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCogUHlNZW1fUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKKy4uIGM6ZnVuY3Rpb246OiB2b2lkKiBQeU1lbV9SZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuKQogCiAgICBSZXNpemVzIHRoZSBtZW1vcnkgYmxvY2sgcG9pbnRlZCB0byBieSAqcCogdG8gKm4qIGJ5dGVzLiBUaGUgY29udGVudHMgd2lsbCBiZQogICAgdW5jaGFuZ2VkIHRvIHRoZSBtaW5pbXVtIG9mIHRoZSBvbGQgYW5kIHRoZSBuZXcgc2l6ZXMuIElmICpwKiBpcyAqTlVMTCosIHRoZQotICAgY2FsbCBpcyBlcXVpdmFsZW50IHRvIDpjZnVuYzpgUHlNZW1fTWFsbG9jKG4pYDsgZWxzZSBpZiAqbiogaXMgZXF1YWwgdG8gemVybywKKyAgIGNhbGwgaXMgZXF1aXZhbGVudCB0byA6YzpmdW5jOmBQeU1lbV9NYWxsb2MobilgOyBlbHNlIGlmICpuKiBpcyBlcXVhbCB0byB6ZXJvLAogICAgdGhlIG1lbW9yeSBibG9jayBpcyByZXNpemVkIGJ1dCBpcyBub3QgZnJlZWQsIGFuZCB0aGUgcmV0dXJuZWQgcG9pbnRlciBpcwogICAgbm9uLSpOVUxMKi4gIFVubGVzcyAqcCogaXMgKk5VTEwqLCBpdCBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwKLSAgIHRvIDpjZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6Y2Z1bmM6YFB5TWVtX1JlYWxsb2NgLiBJZiB0aGUgcmVxdWVzdCBmYWlscywKLSAgIDpjZnVuYzpgUHlNZW1fUmVhbGxvY2AgcmV0dXJucyAqTlVMTCogYW5kICpwKiByZW1haW5zIGEgdmFsaWQgcG9pbnRlciB0byB0aGUKKyAgIHRvIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AuIElmIHRoZSByZXF1ZXN0IGZhaWxzLAorICAgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AgcmV0dXJucyAqTlVMTCogYW5kICpwKiByZW1haW5zIGEgdmFsaWQgcG9pbnRlciB0byB0aGUKICAgIHByZXZpb3VzIG1lbW9yeSBhcmVhLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlNZW1fRnJlZSh2b2lkICpwKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fRnJlZSh2b2lkICpwKQogCiAgICBGcmVlcyB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgKnAqLCB3aGljaCBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhCi0gICBwcmV2aW91cyBjYWxsIHRvIDpjZnVuYzpgUHlNZW1fTWFsbG9jYCBvciA6Y2Z1bmM6YFB5TWVtX1JlYWxsb2NgLiAgT3RoZXJ3aXNlLCBvcgotICAgaWYgOmNmdW5jOmBQeU1lbV9GcmVlKHApYCBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB1bmRlZmluZWQgYmVoYXZpb3Igb2NjdXJzLiBJZgorICAgcHJldmlvdXMgY2FsbCB0byA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLiAgT3RoZXJ3aXNlLCBvcgorICAgaWYgOmM6ZnVuYzpgUHlNZW1fRnJlZShwKWAgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdW5kZWZpbmVkIGJlaGF2aW9yIG9jY3Vycy4gSWYKICAgICpwKiBpcyAqTlVMTCosIG5vIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQuCiAKIFRoZSBmb2xsb3dpbmcgdHlwZS1vcmllbnRlZCBtYWNyb3MgYXJlIHByb3ZpZGVkIGZvciBjb252ZW5pZW5jZS4gIE5vdGUgIHRoYXQKICpUWVBFKiByZWZlcnMgdG8gYW55IEMgdHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBUWVBFKiBQeU1lbV9OZXcoVFlQRSwgc2l6ZV90IG4pCisuLiBjOmZ1bmN0aW9uOjogVFlQRSogUHlNZW1fTmV3KFRZUEUsIHNpemVfdCBuKQogCi0gICBTYW1lIGFzIDpjZnVuYzpgUHlNZW1fTWFsbG9jYCwgYnV0IGFsbG9jYXRlcyBgYChuICogc2l6ZW9mKFRZUEUpKWBgIGJ5dGVzIG9mCi0gICBtZW1vcnkuICBSZXR1cm5zIGEgcG9pbnRlciBjYXN0IHRvIDpjdHlwZTpgVFlQRVwqYC4gIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQorICAgU2FtZSBhcyA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLCBidXQgYWxsb2NhdGVzIGBgKG4gKiBzaXplb2YoVFlQRSkpYGAgYnl0ZXMgb2YKKyAgIG1lbW9yeS4gIFJldHVybnMgYSBwb2ludGVyIGNhc3QgdG8gOmM6dHlwZTpgVFlQRVwqYC4gIFRoZSBtZW1vcnkgd2lsbCBub3QgaGF2ZQogICAgYmVlbiBpbml0aWFsaXplZCBpbiBhbnkgd2F5LgogCiAKLS4uIGNmdW5jdGlvbjo6IFRZUEUqIFB5TWVtX1Jlc2l6ZSh2b2lkICpwLCBUWVBFLCBzaXplX3QgbikKKy4uIGM6ZnVuY3Rpb246OiBUWVBFKiBQeU1lbV9SZXNpemUodm9pZCAqcCwgVFlQRSwgc2l6ZV90IG4pCiAKLSAgIFNhbWUgYXMgOmNmdW5jOmBQeU1lbV9SZWFsbG9jYCwgYnV0IHRoZSBtZW1vcnkgYmxvY2sgaXMgcmVzaXplZCB0byBgYChuICoKLSAgIHNpemVvZihUWVBFKSlgYCBieXRlcy4gIFJldHVybnMgYSBwb2ludGVyIGNhc3QgdG8gOmN0eXBlOmBUWVBFXCpgLiBPbiByZXR1cm4sCisgICBTYW1lIGFzIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLCBidXQgdGhlIG1lbW9yeSBibG9jayBpcyByZXNpemVkIHRvIGBgKG4gKgorICAgc2l6ZW9mKFRZUEUpKWBgIGJ5dGVzLiAgUmV0dXJucyBhIHBvaW50ZXIgY2FzdCB0byA6Yzp0eXBlOmBUWVBFXCpgLiBPbiByZXR1cm4sCiAgICAqcCogd2lsbCBiZSBhIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkgYXJlYSwgb3IgKk5VTEwqIGluIHRoZSBldmVudCBvZgogICAgZmFpbHVyZS4gIFRoaXMgaXMgYSBDIHByZXByb2Nlc3NvciBtYWNybzsgcCBpcyBhbHdheXMgcmVhc3NpZ25lZC4gIFNhdmUKICAgIHRoZSBvcmlnaW5hbCB2YWx1ZSBvZiBwIHRvIGF2b2lkIGxvc2luZyBtZW1vcnkgd2hlbiBoYW5kbGluZyBlcnJvcnMuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeU1lbV9EZWwodm9pZCAqcCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX0RlbCh2b2lkICpwKQogCi0gICBTYW1lIGFzIDpjZnVuYzpgUHlNZW1fRnJlZWAuCisgICBTYW1lIGFzIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgLgogCiBJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBtYWNybyBzZXRzIGFyZSBwcm92aWRlZCBmb3IgY2FsbGluZyB0aGUgUHl0aG9uIG1lbW9yeQogYWxsb2NhdG9yIGRpcmVjdGx5LCB3aXRob3V0IGludm9sdmluZyB0aGUgQyBBUEkgZnVuY3Rpb25zIGxpc3RlZCBhYm92ZS4gSG93ZXZlciwKIG5vdGUgdGhhdCB0aGVpciB1c2UgZG9lcyBub3QgcHJlc2VydmUgYmluYXJ5IGNvbXBhdGliaWxpdHkgYWNyb3NzIFB5dGhvbgogdmVyc2lvbnMgYW5kIGlzIHRoZXJlZm9yZSBkZXByZWNhdGVkIGluIGV4dGVuc2lvbiBtb2R1bGVzLgogCi06Y2Z1bmM6YFB5TWVtX01BTExPQ2AsIDpjZnVuYzpgUHlNZW1fUkVBTExPQ2AsIDpjZnVuYzpgUHlNZW1fRlJFRWAuCis6YzpmdW5jOmBQeU1lbV9NQUxMT0NgLCA6YzpmdW5jOmBQeU1lbV9SRUFMTE9DYCwgOmM6ZnVuYzpgUHlNZW1fRlJFRWAuCiAKLTpjZnVuYzpgUHlNZW1fTkVXYCwgOmNmdW5jOmBQeU1lbV9SRVNJWkVgLCA6Y2Z1bmM6YFB5TWVtX0RFTGAuCis6YzpmdW5jOmBQeU1lbV9ORVdgLCA6YzpmdW5jOmBQeU1lbV9SRVNJWkVgLCA6YzpmdW5jOmBQeU1lbV9ERUxgLgogCiAKIC4uIF9tZW1vcnlleGFtcGxlczoKQEAgLTIwMSw4ICsyMDEsOCBAQAogICAgZnJlZShidWYxKTsgICAgICAgLyogRmF0YWwgLS0gc2hvdWxkIGJlIFB5TWVtX0RlbCgpICAqLwogCiBJbiBhZGRpdGlvbiB0byB0aGUgZnVuY3Rpb25zIGFpbWVkIGF0IGhhbmRsaW5nIHJhdyBtZW1vcnkgYmxvY2tzIGZyb20gdGhlIFB5dGhvbgotaGVhcCwgb2JqZWN0cyBpbiBQeXRob24gYXJlIGFsbG9jYXRlZCBhbmQgcmVsZWFzZWQgd2l0aCA6Y2Z1bmM6YFB5T2JqZWN0X05ld2AsCi06Y2Z1bmM6YFB5T2JqZWN0X05ld1ZhcmAgYW5kIDpjZnVuYzpgUHlPYmplY3RfRGVsYC4KK2hlYXAsIG9iamVjdHMgaW4gUHl0aG9uIGFyZSBhbGxvY2F0ZWQgYW5kIHJlbGVhc2VkIHdpdGggOmM6ZnVuYzpgUHlPYmplY3RfTmV3YCwKKzpjOmZ1bmM6YFB5T2JqZWN0X05ld1ZhcmAgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X0RlbGAuCiAKIFRoZXNlIHdpbGwgYmUgZXhwbGFpbmVkIGluIHRoZSBuZXh0IGNoYXB0ZXIgb24gZGVmaW5pbmcgYW5kIGltcGxlbWVudGluZyBuZXcKIG9iamVjdCB0eXBlcyBpbiBDLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21lbW9yeXZpZXcucnN0IGIvRG9jL2MtYXBpL21lbW9yeXZpZXcucnN0CmluZGV4IDkwMDNkM2UuLjM0ZWNkMTIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tZW1vcnl2aWV3LnJzdAorKysgYi9Eb2MvYy1hcGkvbWVtb3J5dmlldy5yc3QKQEAgLTEzLDIyICsxMywyMiBAQAogYW55IG90aGVyIG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QoUHlPYmplY3QgKm9iaikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCAqUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QoUHlPYmplY3QgKm9iaikKIAogICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3QgZnJvbSBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyB0aGUgYnVmZmVyIGludGVyZmFjZS4KICAgIElmICpvYmoqIHN1cHBvcnRzIHdyaXRhYmxlIGJ1ZmZlciBleHBvcnRzLCB0aGUgbWVtb3J5dmlldyBvYmplY3Qgd2lsbCBiZQogICAgcmVhZGFibGUgYW5kIHdyaXRhYmxlLCBvdGhlciBpdCB3aWxsIGJlIHJlYWQtb25seS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoUHlfYnVmZmVyICp2aWV3KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcihQeV9idWZmZXIgKnZpZXcpCiAKICAgIENyZWF0ZSBhIG1lbW9yeXZpZXcgb2JqZWN0IHdyYXBwaW5nIHRoZSBnaXZlbiBidWZmZXIgc3RydWN0dXJlICp2aWV3Ki4KICAgIFRoZSBtZW1vcnl2aWV3IG9iamVjdCB0aGVuIG93bnMgdGhlIGJ1ZmZlciByZXByZXNlbnRlZCBieSAqdmlldyosIHdoaWNoCi0gICBtZWFucyB5b3Ugc2hvdWxkbid0IHRyeSB0byBjYWxsIDpjZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAgeW91cnNlbGY6IGl0CisgICBtZWFucyB5b3Ugc2hvdWxkbid0IHRyeSB0byBjYWxsIDpjOmZ1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIHlvdXJzZWxmOiBpdAogICAgd2lsbCBiZSBkb25lIG9uIGRlYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5dmlldyBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QgKlB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzKFB5T2JqZWN0ICpvYmosIGludCBidWZmZXJ0eXBlLCBjaGFyIG9yZGVyKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeU1lbW9yeVZpZXdfR2V0Q29udGlndW91cyhQeU9iamVjdCAqb2JqLCBpbnQgYnVmZmVydHlwZSwgY2hhciBvcmRlcikKIAogICAgQ3JlYXRlIGEgbWVtb3J5dmlldyBvYmplY3QgdG8gYSBjb250aWd1b3VzIGNodW5rIG9mIG1lbW9yeSAoaW4gZWl0aGVyCiAgICAnQycgb3IgJ0Ynb3J0cmFuICpvcmRlciopIGZyb20gYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgYnVmZmVyCkBAIC0zNywxMyArMzcsMTMgQEAKICAgIG5ldyBieXRlcyBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TWVtb3J5Vmlld19DaGVjayhQeU9iamVjdCAqb2JqKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1lbW9yeVZpZXdfQ2hlY2soUHlPYmplY3QgKm9iaikKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqb2JqKiBpcyBhIG1lbW9yeXZpZXcgb2JqZWN0LiAgSXQgaXMgbm90CiAgICBjdXJyZW50bHkgYWxsb3dlZCB0byBjcmVhdGUgc3ViY2xhc3NlcyBvZiA6Y2xhc3M6YG1lbW9yeXZpZXdgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X2J1ZmZlciAqUHlNZW1vcnlWaWV3X0dFVF9CVUZGRVIoUHlPYmplY3QgKm9iaikKKy4uIGM6ZnVuY3Rpb246OiBQeV9idWZmZXIgKlB5TWVtb3J5Vmlld19HRVRfQlVGRkVSKFB5T2JqZWN0ICpvYmopCiAKICAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBzdHJ1Y3R1cmUgd3JhcHBlZCBieSB0aGUgZ2l2ZW4KICAgIG1lbW9yeXZpZXcgb2JqZWN0LiAgVGhlIG9iamVjdCAqKm11c3QqKiBiZSBhIG1lbW9yeXZpZXcgaW5zdGFuY2U7CmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWV0aG9kLnJzdCBiL0RvYy9jLWFwaS9tZXRob2QucnN0CmluZGV4IGQ4YjJlZDguLjI3Zjk1NzYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tZXRob2QucnN0CisrKyBiL0RvYy9jLWFwaS9tZXRob2QucnN0CkBAIC03LDM4ICs3LDM4IEBACiAKIC4uIGluZGV4Ojogb2JqZWN0OiBpbnN0YW5jZW1ldGhvZAogCi1BbiBpbnN0YW5jZSBtZXRob2QgaXMgYSB3cmFwcGVyIGZvciBhIDpjZGF0YTpgUHlDRnVuY3Rpb25gIGFuZCB0aGUgbmV3IHdheQotdG8gYmluZCBhIDpjZGF0YTpgUHlDRnVuY3Rpb25gIHRvIGEgY2xhc3Mgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZm9ybWVyIGNhbGwKK0FuIGluc3RhbmNlIG1ldGhvZCBpcyBhIHdyYXBwZXIgZm9yIGEgOmM6ZGF0YTpgUHlDRnVuY3Rpb25gIGFuZCB0aGUgbmV3IHdheQordG8gYmluZCBhIDpjOmRhdGE6YFB5Q0Z1bmN0aW9uYCB0byBhIGNsYXNzIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGZvcm1lciBjYWxsCiBgYFB5TWV0aG9kX05ldyhmdW5jLCBOVUxMLCBjbGFzcylgYC4KIAogCi0uLiBjdmFyOjogUHlUeXBlT2JqZWN0IFB5SW5zdGFuY2VNZXRob2RfVHlwZQorLi4gYzp2YXI6OiBQeVR5cGVPYmplY3QgUHlJbnN0YW5jZU1ldGhvZF9UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBpbnN0YW5jZQorICAgVGhpcyBpbnN0YW5jZSBvZiA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBpbnN0YW5jZQogICAgbWV0aG9kIHR5cGUuIEl0IGlzIG5vdCBleHBvc2VkIHRvIFB5dGhvbiBwcm9ncmFtcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlJbnN0YW5jZU1ldGhvZF9DaGVjayhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbnN0YW5jZU1ldGhvZF9DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgKm8qIGlzIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgKGhhcyB0eXBlCi0gICA6Y2RhdGE6YFB5SW5zdGFuY2VNZXRob2RfVHlwZWApLiAgVGhlIHBhcmFtZXRlciBtdXN0IG5vdCBiZSAqTlVMTCouCisgICA6YzpkYXRhOmBQeUluc3RhbmNlTWV0aG9kX1R5cGVgKS4gIFRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUluc3RhbmNlTWV0aG9kX05ldyhQeU9iamVjdCAqZnVuYykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbnN0YW5jZU1ldGhvZF9OZXcoUHlPYmplY3QgKmZ1bmMpCiAKICAgIFJldHVybiBhIG5ldyBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0LCB3aXRoICpmdW5jKiBiZWluZyBhbnkgY2FsbGFibGUgb2JqZWN0CiAgICAqZnVuYyogaXMgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgbWV0aG9kIGlzCiAgICBjYWxsZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5SW5zdGFuY2VNZXRob2RfRnVuY3Rpb24oUHlPYmplY3QgKmltKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUluc3RhbmNlTWV0aG9kX0Z1bmN0aW9uKFB5T2JqZWN0ICppbSkKIAogICAgUmV0dXJuIHRoZSBmdW5jdGlvbiBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBtZXRob2QgKmltKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbnN0YW5jZU1ldGhvZF9HRVRfRlVOQ1RJT04oUHlPYmplY3QgKmltKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihQeU9iamVjdCAqaW0pCiAKLSAgIE1hY3JvIHZlcnNpb24gb2YgOmNmdW5jOmBQeUluc3RhbmNlTWV0aG9kX0Z1bmN0aW9uYCB3aGljaCBhdm9pZHMgZXJyb3IgY2hlY2tpbmcuCisgICBNYWNybyB2ZXJzaW9uIG9mIDpjOmZ1bmM6YFB5SW5zdGFuY2VNZXRob2RfRnVuY3Rpb25gIHdoaWNoIGF2b2lkcyBlcnJvciBjaGVja2luZy4KIAogCiAuLiBfbWV0aG9kLW9iamVjdHM6CkBAIC01Myw0OCArNTMsNDggQEAKIG5vIGxvbmdlciBhdmFpbGFibGUuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeU1ldGhvZF9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeU1ldGhvZF9UeXBlCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBNZXRob2RUeXBlIChpbiBtb2R1bGUgdHlwZXMpCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBtZXRob2QgdHlwZS4gIFRoaXMKKyAgIFRoaXMgaW5zdGFuY2Ugb2YgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRzIHRoZSBQeXRob24gbWV0aG9kIHR5cGUuICBUaGlzCiAgICBpcyBleHBvc2VkIHRvIFB5dGhvbiBwcm9ncmFtcyBhcyBgYHR5cGVzLk1ldGhvZFR5cGVgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNZXRob2RfQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWV0aG9kX0NoZWNrKFB5T2JqZWN0ICpvKQogCi0gICBSZXR1cm4gdHJ1ZSBpZiAqbyogaXMgYSBtZXRob2Qgb2JqZWN0IChoYXMgdHlwZSA6Y2RhdGE6YFB5TWV0aG9kX1R5cGVgKS4gIFRoZQorICAgUmV0dXJuIHRydWUgaWYgKm8qIGlzIGEgbWV0aG9kIG9iamVjdCAoaGFzIHR5cGUgOmM6ZGF0YTpgUHlNZXRob2RfVHlwZWApLiAgVGhlCiAgICBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1ldGhvZF9OZXcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1ldGhvZF9OZXcoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpzZWxmKQogCiAgICBSZXR1cm4gYSBuZXcgbWV0aG9kIG9iamVjdCwgd2l0aCAqZnVuYyogYmVpbmcgYW55IGNhbGxhYmxlIG9iamVjdCBhbmQgKnNlbGYqCiAgICB0aGUgaW5zdGFuY2UgdGhlIG1ldGhvZCBzaG91bGQgYmUgYm91bmQuICpmdW5jKiBpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICBiZSBjYWxsZWQgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZC4gKnNlbGYqIG11c3Qgbm90IGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNZXRob2RfRnVuY3Rpb24oUHlPYmplY3QgKm1ldGgpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWV0aG9kX0Z1bmN0aW9uKFB5T2JqZWN0ICptZXRoKQogCiAgICBSZXR1cm4gdGhlIGZ1bmN0aW9uIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG1ldGhvZCAqbWV0aCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TWV0aG9kX0dFVF9GVU5DVElPTihQeU9iamVjdCAqbWV0aCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNZXRob2RfR0VUX0ZVTkNUSU9OKFB5T2JqZWN0ICptZXRoKQogCi0gICBNYWNybyB2ZXJzaW9uIG9mIDpjZnVuYzpgUHlNZXRob2RfRnVuY3Rpb25gIHdoaWNoIGF2b2lkcyBlcnJvciBjaGVja2luZy4KKyAgIE1hY3JvIHZlcnNpb24gb2YgOmM6ZnVuYzpgUHlNZXRob2RfRnVuY3Rpb25gIHdoaWNoIGF2b2lkcyBlcnJvciBjaGVja2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNZXRob2RfU2VsZihQeU9iamVjdCAqbWV0aCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNZXRob2RfU2VsZihQeU9iamVjdCAqbWV0aCkKIAogICAgUmV0dXJuIHRoZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhlIG1ldGhvZCAqbWV0aCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TWV0aG9kX0dFVF9TRUxGKFB5T2JqZWN0ICptZXRoKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1ldGhvZF9HRVRfU0VMRihQeU9iamVjdCAqbWV0aCkKIAotICAgTWFjcm8gdmVyc2lvbiBvZiA6Y2Z1bmM6YFB5TWV0aG9kX1NlbGZgIHdoaWNoIGF2b2lkcyBlcnJvciBjaGVja2luZy4KKyAgIE1hY3JvIHZlcnNpb24gb2YgOmM6ZnVuYzpgUHlNZXRob2RfU2VsZmAgd2hpY2ggYXZvaWRzIGVycm9yIGNoZWNraW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU1ldGhvZF9DbGVhckZyZWVMaXN0KCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNZXRob2RfQ2xlYXJGcmVlTGlzdCgpCiAKICAgIENsZWFyIHRoZSBmcmVlIGxpc3QuIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGZyZWVkIGl0ZW1zLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdCBiL0RvYy9jLWFwaS9tb2R1bGUucnN0CmluZGV4IDEyODE2YzkuLmZmZDY4ZTMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9tb2R1bGUucnN0CisrKyBiL0RvYy9jLWFwaS9tb2R1bGUucnN0CkBAIC0xMCwyNiArMTAsMjYgQEAKIFRoZXJlIGFyZSBvbmx5IGEgZmV3IGZ1bmN0aW9ucyBzcGVjaWFsIHRvIG1vZHVsZSBvYmplY3RzLgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlNb2R1bGVfVHlwZQorLi4gYzp2YXI6OiBQeVR5cGVPYmplY3QgUHlNb2R1bGVfVHlwZQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogTW9kdWxlVHlwZSAoaW4gbW9kdWxlIHR5cGVzKQogCi0gICBUaGlzIGluc3RhbmNlIG9mIDpjdHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRzIHRoZSBQeXRob24gbW9kdWxlIHR5cGUuICBUaGlzCisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIG1vZHVsZSB0eXBlLiAgVGhpcwogICAgaXMgZXhwb3NlZCB0byBQeXRob24gcHJvZ3JhbXMgYXMgYGB0eXBlcy5Nb2R1bGVUeXBlYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TW9kdWxlX0NoZWNrKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9DaGVjayhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgbW9kdWxlIG9iamVjdCwgb3IgYSBzdWJ0eXBlIG9mIGEgbW9kdWxlIG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgbW9kdWxlIG9iamVjdCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YKLSAgIDpjZGF0YTpgUHlNb2R1bGVfVHlwZWAuCisgICA6YzpkYXRhOmBQeU1vZHVsZV9UeXBlYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfTmV3KGNvbnN0IGNoYXIgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQpAQCAtNDEsMTggKzQxLDE4IEBACiAgICB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYSA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfR2V0RGljdChQeU9iamVjdCAqbW9kdWxlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9HZXREaWN0KFB5T2JqZWN0ICptb2R1bGUpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBfX2RpY3RfXyAobW9kdWxlIGF0dHJpYnV0ZSkKIAogICAgUmV0dXJuIHRoZSBkaWN0aW9uYXJ5IG9iamVjdCB0aGF0IGltcGxlbWVudHMgKm1vZHVsZSoncyBuYW1lc3BhY2U7IHRoaXMgb2JqZWN0CiAgICBpcyB0aGUgc2FtZSBhcyB0aGUgOmF0dHI6YF9fZGljdF9fYCBhdHRyaWJ1dGUgb2YgdGhlIG1vZHVsZSBvYmplY3QuICBUaGlzCiAgICBmdW5jdGlvbiBuZXZlciBmYWlscy4gIEl0IGlzIHJlY29tbWVuZGVkIGV4dGVuc2lvbnMgdXNlIG90aGVyCi0gICA6Y2Z1bmM6YFB5TW9kdWxlX1wqYCBhbmQgOmNmdW5jOmBQeU9iamVjdF9cKmAgZnVuY3Rpb25zIHJhdGhlciB0aGFuIGRpcmVjdGx5CisgICA6YzpmdW5jOmBQeU1vZHVsZV9cKmAgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X1wqYCBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gZGlyZWN0bHkKICAgIG1hbmlwdWxhdGUgYSBtb2R1bGUncyA6YXR0cjpgX19kaWN0X19gLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5TW9kdWxlX0dldE5hbWUoUHlPYmplY3QgKm1vZHVsZSkKKy4uIGM6ZnVuY3Rpb246OiBjaGFyKiBQeU1vZHVsZV9HZXROYW1lKFB5T2JqZWN0ICptb2R1bGUpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogX19uYW1lX18gKG1vZHVsZSBhdHRyaWJ1dGUpCkBAIC02MiwyOSArNjIsNDIgQEAKICAgIG9yIGlmIGl0IGlzIG5vdCBhIHN0cmluZywgOmV4YzpgU3lzdGVtRXJyb3JgIGlzIHJhaXNlZCBhbmQgKk5VTEwqIGlzIHJldHVybmVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNoYXIqIFB5TW9kdWxlX0dldEZpbGVuYW1lKFB5T2JqZWN0ICptb2R1bGUpCisuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlNb2R1bGVfR2V0RmlsZW5hbWUoUHlPYmplY3QgKm1vZHVsZSkKKworICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdGAgYnV0IHJldHVybiB0aGUgZmlsZW5hbWUKKyAgIGVuY29kZWQgdG8gJ3V0Zi04Jy4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgOmM6ZnVuYzpgUHlNb2R1bGVfR2V0RmlsZW5hbWVgIHJhaXNlcyA6Yzp0eXBlOmBVbmljb2RlRW5jb2RlRXJyb3JgIG9uCisgICAgICB1bmVuY29kYWJsZSBmaWxlbmFtZXMsIHVzZSA6YzpmdW5jOmBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdGAgaW5zdGVhZC4KKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICptb2R1bGUpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogX19maWxlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAgICAgICBzaW5nbGU6IFN5c3RlbUVycm9yIChidWlsdC1pbiBleGNlcHRpb24pCiAKICAgIFJldHVybiB0aGUgbmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoICptb2R1bGUqIHdhcyBsb2FkZWQgdXNpbmcgKm1vZHVsZSoncwotICAgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuICBJZiB0aGlzIGlzIG5vdCBkZWZpbmVkLCBvciBpZiBpdCBpcyBub3QgYSBzdHJpbmcsCi0gICByYWlzZSA6ZXhjOmBTeXN0ZW1FcnJvcmAgYW5kIHJldHVybiAqTlVMTCouCisgICA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZS4gIElmIHRoaXMgaXMgbm90IGRlZmluZWQsIG9yIGlmIGl0IGlzIG5vdCBhCisgICB1bmljb2RlIHN0cmluZywgcmFpc2UgOmV4YzpgU3lzdGVtRXJyb3JgIGFuZCByZXR1cm4gKk5VTEwqOyBvdGhlcndpc2UgcmV0dXJuCisgICBhIHJlZmVyZW5jZSB0byBhIDpjOnR5cGU6YFB5VW5pY29kZU9iamVjdGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQqIFB5TW9kdWxlX0dldFN0YXRlKFB5T2JqZWN0ICptb2R1bGUpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNb2R1bGVfR2V0U3RhdGUoUHlPYmplY3QgKm1vZHVsZSkKIAogICAgUmV0dXJuIHRoZSAic3RhdGUiIG9mIHRoZSBtb2R1bGUsIHRoYXQgaXMsIGEgcG9pbnRlciB0byB0aGUgYmxvY2sgb2YgbWVtb3J5CiAgICBhbGxvY2F0ZWQgYXQgbW9kdWxlIGNyZWF0aW9uIHRpbWUsIG9yICpOVUxMKi4gIFNlZQotICAgOmNtZW1iZXI6YFB5TW9kdWxlRGVmLm1fc2l6ZWAuCisgICA6YzptZW1iZXI6YFB5TW9kdWxlRGVmLm1fc2l6ZWAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlNb2R1bGVEZWYqIFB5TW9kdWxlX0dldERlZihQeU9iamVjdCAqbW9kdWxlKQorLi4gYzpmdW5jdGlvbjo6IFB5TW9kdWxlRGVmKiBQeU1vZHVsZV9HZXREZWYoUHlPYmplY3QgKm1vZHVsZSkKIAotICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgOmN0eXBlOmBQeU1vZHVsZURlZmAgc3RydWN0IGZyb20gd2hpY2ggdGhlIG1vZHVsZSB3YXMKKyAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIDpjOnR5cGU6YFB5TW9kdWxlRGVmYCBzdHJ1Y3QgZnJvbSB3aGljaCB0aGUgbW9kdWxlIHdhcwogICAgY3JlYXRlZCwgb3IgKk5VTEwqIGlmIHRoZSBtb2R1bGUgd2Fzbid0IGNyZWF0ZWQgd2l0aAotICAgOmNmdW5jOmBQeU1vZHVsZV9DcmVhdGVgLgorICAgOmM6ZnVuYzpgUHlNb2R1bGVfQ3JlYXRlYC4KIAogCiBJbml0aWFsaXppbmcgQyBtb2R1bGVzCkBAIC05MiwxNCArMTA1LDE0IEBACiAKIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSB1c2VkIGluIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1vZHVsZV9DcmVhdGUoUHlNb2R1bGVEZWYgKm1vZHVsZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlKFB5TW9kdWxlRGVmICptb2R1bGUpCiAKICAgIENyZWF0ZSBhIG5ldyBtb2R1bGUgb2JqZWN0LCBnaXZlbiB0aGUgZGVmaW5pdGlvbiBpbiAqbW9kdWxlKi4gIFRoaXMgYmVoYXZlcwotICAgbGlrZSA6Y2Z1bmM6YFB5TW9kdWxlX0NyZWF0ZTJgIHdpdGggKm1vZHVsZV9hcGlfdmVyc2lvbiogc2V0IHRvCisgICBsaWtlIDpjOmZ1bmM6YFB5TW9kdWxlX0NyZWF0ZTJgIHdpdGggKm1vZHVsZV9hcGlfdmVyc2lvbiogc2V0IHRvCiAgICA6Y29uc3Q6YFBZVEhPTl9BUElfVkVSU0lPTmAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX0NyZWF0ZTIoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IG1vZHVsZV9hcGlfdmVyc2lvbikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNb2R1bGVfQ3JlYXRlMihQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgbW9kdWxlX2FwaV92ZXJzaW9uKQogCiAgICBDcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCwgZ2l2ZW4gdGhlIGRlZmluaXRpb24gaW4gKm1vZHVsZSosIGFzc3VtaW5nIHRoZQogICAgQVBJIHZlcnNpb24gKm1vZHVsZV9hcGlfdmVyc2lvbiouICBJZiB0aGF0IHZlcnNpb24gZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KQEAgLTEwNyw4OSArMTIwLDg5IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBNb3N0IHVzZXMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgOmNmdW5jOmBQeU1vZHVsZV9DcmVhdGVgCisgICAgICBNb3N0IHVzZXMgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNpbmcgOmM6ZnVuYzpgUHlNb2R1bGVfQ3JlYXRlYAogICAgICAgaW5zdGVhZDsgb25seSB1c2UgdGhpcyBpZiB5b3UgYXJlIHN1cmUgeW91IG5lZWQgaXQuCiAKIAotLi4gY3R5cGU6OiBQeU1vZHVsZURlZgorLi4gYzp0eXBlOjogUHlNb2R1bGVEZWYKIAogICAgVGhpcyBzdHJ1Y3QgaG9sZHMgYWxsIGluZm9ybWF0aW9uIHRoYXQgaXMgbmVlZGVkIHRvIGNyZWF0ZSBhIG1vZHVsZSBvYmplY3QuCiAgICBUaGVyZSBpcyB1c3VhbGx5IG9ubHkgb25lIHN0YXRpYyB2YXJpYWJsZSBvZiB0aGF0IHR5cGUgZm9yIGVhY2ggbW9kdWxlLCB3aGljaAotICAgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCBhbmQgdGhlbiBwYXNzZWQgdG8gOmNmdW5jOmBQeU1vZHVsZV9DcmVhdGVgIGluIHRoZQorICAgaXMgc3RhdGljYWxseSBpbml0aWFsaXplZCBhbmQgdGhlbiBwYXNzZWQgdG8gOmM6ZnVuYzpgUHlNb2R1bGVfQ3JlYXRlYCBpbiB0aGUKICAgIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KIAotICAgLi4gY21lbWJlcjo6IFB5TW9kdWxlRGVmX0Jhc2UgbV9iYXNlCisgICAuLiBjOm1lbWJlcjo6IFB5TW9kdWxlRGVmX0Jhc2UgbV9iYXNlCiAKICAgICAgIEFsd2F5cyBpbml0aWFsaXplIHRoaXMgbWVtYmVyIHRvIDpjb25zdDpgUHlNb2R1bGVEZWZfSEVBRF9JTklUYC4KIAotICAgLi4gY21lbWJlcjo6IGNoYXIqIG1fbmFtZQorICAgLi4gYzptZW1iZXI6OiBjaGFyKiBtX25hbWUKIAogICAgICAgTmFtZSBmb3IgdGhlIG5ldyBtb2R1bGUuCiAKLSAgIC4uIGNtZW1iZXI6OiBjaGFyKiBtX2RvYworICAgLi4gYzptZW1iZXI6OiBjaGFyKiBtX2RvYwogCiAgICAgICBEb2NzdHJpbmcgZm9yIHRoZSBtb2R1bGU7IHVzdWFsbHkgYSBkb2NzdHJpbmcgdmFyaWFibGUgY3JlYXRlZCB3aXRoCi0gICAgICA6Y2Z1bmM6YFB5RG9jX1NUUlZBUmAgaXMgdXNlZC4KKyAgICAgIDpjOmZ1bmM6YFB5RG9jX1NUUlZBUmAgaXMgdXNlZC4KIAotICAgLi4gY21lbWJlcjo6IFB5X3NzaXplX3QgbV9zaXplCisgICAuLiBjOm1lbWJlcjo6IFB5X3NzaXplX3QgbV9zaXplCiAKICAgICAgIElmIHRoZSBtb2R1bGUgb2JqZWN0IG5lZWRzIGFkZGl0aW9uYWwgbWVtb3J5LCB0aGlzIHNob3VsZCBiZSBzZXQgdG8gdGhlCiAgICAgICBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGU7IGEgcG9pbnRlciB0byB0aGUgYmxvY2sgb2YgbWVtb3J5IGNhbiBiZQotICAgICAgcmV0cmlldmVkIHdpdGggOmNmdW5jOmBQeU1vZHVsZV9HZXRTdGF0ZWAuICBJZiBubyBtZW1vcnkgaXMgbmVlZGVkLCBzZXQKKyAgICAgIHJldHJpZXZlZCB3aXRoIDpjOmZ1bmM6YFB5TW9kdWxlX0dldFN0YXRlYC4gIElmIG5vIG1lbW9yeSBpcyBuZWVkZWQsIHNldAogICAgICAgdGhpcyB0byBgYC0xYGAuCiAKICAgICAgIFRoaXMgbWVtb3J5IHNob3VsZCBiZSB1c2VkLCByYXRoZXIgdGhhbiBzdGF0aWMgZ2xvYmFscywgdG8gaG9sZCBwZXItbW9kdWxlCiAgICAgICBzdGF0ZSwgc2luY2UgaXQgaXMgdGhlbiBzYWZlIGZvciB1c2UgaW4gbXVsdGlwbGUgc3ViLWludGVycHJldGVycy4gIEl0IGlzCi0gICAgICBmcmVlZCB3aGVuIHRoZSBtb2R1bGUgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLCBhZnRlciB0aGUgOmNtZW1iZXI6YG1fZnJlZWAKKyAgICAgIGZyZWVkIHdoZW4gdGhlIG1vZHVsZSBvYmplY3QgaXMgZGVhbGxvY2F0ZWQsIGFmdGVyIHRoZSA6YzptZW1iZXI6YG1fZnJlZWAKICAgICAgIGZ1bmN0aW9uIGhhcyBiZWVuIGNhbGxlZCwgaWYgcHJlc2VudC4KIAotICAgLi4gY21lbWJlcjo6IFB5TWV0aG9kRGVmKiBtX21ldGhvZHMKKyAgIC4uIGM6bWVtYmVyOjogUHlNZXRob2REZWYqIG1fbWV0aG9kcwogCiAgICAgICBBIHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zLCBkZXNjcmliZWQgYnkKLSAgICAgIDpjdHlwZTpgUHlNZXRob2REZWZgIHZhbHVlcy4gIENhbiBiZSAqTlVMTCogaWYgbm8gZnVuY3Rpb25zIGFyZSBwcmVzZW50LgorICAgICAgOmM6dHlwZTpgUHlNZXRob2REZWZgIHZhbHVlcy4gIENhbiBiZSAqTlVMTCogaWYgbm8gZnVuY3Rpb25zIGFyZSBwcmVzZW50LgogCi0gICAuLiBjbWVtYmVyOjogaW5xdWlyeSBtX3JlbG9hZAorICAgLi4gYzptZW1iZXI6OiBpbnF1aXJ5IG1fcmVsb2FkCiAKICAgICAgIEN1cnJlbnRseSB1bnVzZWQsIHNob3VsZCBiZSAqTlVMTCouCiAKLSAgIC4uIGNtZW1iZXI6OiB0cmF2ZXJzZXByb2MgbV90cmF2ZXJzZQorICAgLi4gYzptZW1iZXI6OiB0cmF2ZXJzZXByb2MgbV90cmF2ZXJzZQogCiAgICAgICBBIHRyYXZlcnNhbCBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyBHQyB0cmF2ZXJzYWwgb2YgdGhlIG1vZHVsZSBvYmplY3QsIG9yCiAgICAgICAqTlVMTCogaWYgbm90IG5lZWRlZC4KIAotICAgLi4gY21lbWJlcjo6IGlucXVpcnkgbV9jbGVhcgorICAgLi4gYzptZW1iZXI6OiBpbnF1aXJ5IG1fY2xlYXIKIAogICAgICAgQSBjbGVhciBmdW5jdGlvbiB0byBjYWxsIGR1cmluZyBHQyBjbGVhcmluZyBvZiB0aGUgbW9kdWxlIG9iamVjdCwgb3IKICAgICAgICpOVUxMKiBpZiBub3QgbmVlZGVkLgogCi0gICAuLiBjbWVtYmVyOjogZnJlZWZ1bmMgbV9mcmVlCisgICAuLiBjOm1lbWJlcjo6IGZyZWVmdW5jIG1fZnJlZQogCiAgICAgICBBIGZ1bmN0aW9uIHRvIGNhbGwgZHVyaW5nIGRlYWxsb2NhdGlvbiBvZiB0aGUgbW9kdWxlIG9iamVjdCwgb3IgKk5VTEwqIGlmCiAgICAgICBub3QgbmVlZGVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9BZGRPYmplY3QoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1vZHVsZV9BZGRPYmplY3QoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKQogCiAgICBBZGQgYW4gb2JqZWN0IHRvICptb2R1bGUqIGFzICpuYW1lKi4gIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiB3aGljaCBjYW4KICAgIGJlIHVzZWQgZnJvbSB0aGUgbW9kdWxlJ3MgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBUaGlzIHN0ZWFscyBhIHJlZmVyZW5jZSB0bwogICAgKnZhbHVlKi4gIFJldHVybiBgYC0xYGAgb24gZXJyb3IsIGBgMGBgIG9uIHN1Y2Nlc3MuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZEludENvbnN0YW50KFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUsIGxvbmcgdmFsdWUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZEludENvbnN0YW50KFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUsIGxvbmcgdmFsdWUpCiAKICAgIEFkZCBhbiBpbnRlZ2VyIGNvbnN0YW50IHRvICptb2R1bGUqIGFzICpuYW1lKi4gIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gY2FuIGJlCiAgICB1c2VkIGZyb20gdGhlIG1vZHVsZSdzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiBSZXR1cm4gYGAtMWBgIG9uIGVycm9yLCBgYDBgYCBvbgogICAgc3VjY2Vzcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQoUHlPYmplY3QgKm1vZHVsZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KFB5T2JqZWN0ICptb2R1bGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQogCiAgICBBZGQgYSBzdHJpbmcgY29uc3RhbnQgdG8gKm1vZHVsZSogYXMgKm5hbWUqLiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYW4gYmUKICAgIHVzZWQgZnJvbSB0aGUgbW9kdWxlJ3MgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICBUaGUgc3RyaW5nICp2YWx1ZSogbXVzdCBiZQogICAgbnVsbC10ZXJtaW5hdGVkLiAgUmV0dXJuIGBgLTFgYCBvbiBlcnJvciwgYGAwYGAgb24gc3VjY2Vzcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQWRkSW50TWFjcm8oUHlPYmplY3QgKm1vZHVsZSwgbWFjcm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZEludE1hY3JvKFB5T2JqZWN0ICptb2R1bGUsIG1hY3JvKQogCiAgICBBZGQgYW4gaW50IGNvbnN0YW50IHRvICptb2R1bGUqLiBUaGUgbmFtZSBhbmQgdGhlIHZhbHVlIGFyZSB0YWtlbiBmcm9tCiAgICAqbWFjcm8qLiBGb3IgZXhhbXBsZSBgYFB5TW9kdWxlX0FkZEludE1hY3JvKG1vZHVsZSwgQUZfSU5FVClgYCBhZGRzIHRoZSBpbnQKQEAgLTE5Nyw2ICsyMTAsNiBAQAogICAgUmV0dXJuIGBgLTFgYCBvbiBlcnJvciwgYGAwYGAgb24gc3VjY2Vzcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlNb2R1bGVfQWRkU3RyaW5nTWFjcm8oUHlPYmplY3QgKm1vZHVsZSwgbWFjcm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TW9kdWxlX0FkZFN0cmluZ01hY3JvKFB5T2JqZWN0ICptb2R1bGUsIG1hY3JvKQogCiAgICBBZGQgYSBzdHJpbmcgY29uc3RhbnQgdG8gKm1vZHVsZSouCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbm9uZS5yc3QgYi9Eb2MvYy1hcGkvbm9uZS5yc3QKaW5kZXggNzBlMmMwNC4uYjlhYzI2OSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL25vbmUucnN0CisrKyBiL0RvYy9jLWFwaS9ub25lLnJzdApAQCAtNywyMCArNywyMCBAQAogCiAuLiBpbmRleDo6IG9iamVjdDogTm9uZQogCi1Ob3RlIHRoYXQgdGhlIDpjdHlwZTpgUHlUeXBlT2JqZWN0YCBmb3IgYGBOb25lYGAgaXMgbm90IGRpcmVjdGx5IGV4cG9zZWQgaW4gdGhlCitOb3RlIHRoYXQgdGhlIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgZm9yIGBgTm9uZWBgIGlzIG5vdCBkaXJlY3RseSBleHBvc2VkIGluIHRoZQogUHl0aG9uL0MgQVBJLiAgU2luY2UgYGBOb25lYGAgaXMgYSBzaW5nbGV0b24sIHRlc3RpbmcgZm9yIG9iamVjdCBpZGVudGl0eSAodXNpbmcKLWBgPT1gYCBpbiBDKSBpcyBzdWZmaWNpZW50LiBUaGVyZSBpcyBubyA6Y2Z1bmM6YFB5Tm9uZV9DaGVja2AgZnVuY3Rpb24gZm9yIHRoZQorYGA9PWBgIGluIEMpIGlzIHN1ZmZpY2llbnQuIFRoZXJlIGlzIG5vIDpjOmZ1bmM6YFB5Tm9uZV9DaGVja2AgZnVuY3Rpb24gZm9yIHRoZQogc2FtZSByZWFzb24uCiAKIAotLi4gY3Zhcjo6IFB5T2JqZWN0KiBQeV9Ob25lCisuLiBjOnZhcjo6IFB5T2JqZWN0KiBQeV9Ob25lCiAKICAgIFRoZSBQeXRob24gYGBOb25lYGAgb2JqZWN0LCBkZW5vdGluZyBsYWNrIG9mIHZhbHVlLiAgVGhpcyBvYmplY3QgaGFzIG5vIG1ldGhvZHMuCiAgICBJdCBuZWVkcyB0byBiZSB0cmVhdGVkIGp1c3QgbGlrZSBhbnkgb3RoZXIgb2JqZWN0IHdpdGggcmVzcGVjdCB0byByZWZlcmVuY2UKICAgIGNvdW50cy4KIAogCi0uLiBjbWFjcm86OiBQeV9SRVRVUk5fTk9ORQorLi4gYzptYWNybzo6IFB5X1JFVFVSTl9OT05FCiAKLSAgIFByb3Blcmx5IGhhbmRsZSByZXR1cm5pbmcgOmNkYXRhOmBQeV9Ob25lYCBmcm9tIHdpdGhpbiBhIEMgZnVuY3Rpb24gKHRoYXQgaXMsCisgICBQcm9wZXJseSBoYW5kbGUgcmV0dXJuaW5nIDpjOmRhdGE6YFB5X05vbmVgIGZyb20gd2l0aGluIGEgQyBmdW5jdGlvbiAodGhhdCBpcywKICAgIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIE5vbmUgYW5kIHJldHVybiBpdC4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbnVtYmVyLnJzdCBiL0RvYy9jLWFwaS9udW1iZXIucnN0CmluZGV4IDU3ZWYyOTMuLmVkYTcyMmQgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9udW1iZXIucnN0CisrKyBiL0RvYy9jLWFwaS9udW1iZXIucnN0CkBAIC02LDM3ICs2LDM3IEBACiA9PT09PT09PT09PT09PT0KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlOdW1iZXJfQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5TnVtYmVyX0NoZWNrKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmIHRoZSBvYmplY3QgKm8qIHByb3ZpZGVzIG51bWVyaWMgcHJvdG9jb2xzLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgogICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgc3VjY2VlZHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0FkZChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfQWRkKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYWRkaW5nICpvMSogYW5kICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbzEgKyBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9TdWJ0cmFjdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfU3VidHJhY3QoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBzdWJ0cmFjdGluZyAqbzIqIGZyb20gKm8xKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGlzIGlzCiAgICB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvMSAtIG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX011bHRpcGx5KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9NdWx0aXBseShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nICpvMSogYW5kICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcwogICAgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbzEgKiBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9GbG9vckRpdmlkZShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfRmxvb3JEaXZpZGUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybiB0aGUgZmxvb3Igb2YgKm8xKiBkaXZpZGVkIGJ5ICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcwogICAgZXF1aXZhbGVudCB0byB0aGUgImNsYXNzaWMiIGRpdmlzaW9uIG9mIGludGVnZXJzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9UcnVlRGl2aWRlKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9UcnVlRGl2aWRlKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm4gYSByZWFzb25hYmxlIGFwcHJveGltYXRpb24gZm9yIHRoZSBtYXRoZW1hdGljYWwgdmFsdWUgb2YgKm8xKiBkaXZpZGVkIGJ5CiAgICAqbzIqLCBvciAqTlVMTCogb24gZmFpbHVyZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgImFwcHJveGltYXRlIiBiZWNhdXNlIGJpbmFyeQpAQCAtNDUsMTMgKzQ1LDEzIEBACiAgICBwYXNzZWQgdHdvIGludGVnZXJzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9SZW1haW5kZXIoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1JlbWFpbmRlcihQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGRpdmlkaW5nICpvMSogYnkgKm8yKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGlzIGlzCiAgICB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvMSAlIG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0Rpdm1vZChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfRGl2bW9kKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGRpdm1vZAogCkBAIC01OSwyOSArNTksMjkgQEAKICAgIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGRpdm1vZChvMSwgbzIpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1Bvd2VyKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yLCBQeU9iamVjdCAqbzMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1Bvd2VyKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yLCBQeU9iamVjdCAqbzMpCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogcG93CiAKICAgIFNlZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YHBvd2AuIFJldHVybnMgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZQogICAgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBwb3cobzEsIG8yLCBvMylgYCwgd2hlcmUgKm8zKiBpcyBvcHRpb25hbC4KLSAgIElmICpvMyogaXMgdG8gYmUgaWdub3JlZCwgcGFzcyA6Y2RhdGE6YFB5X05vbmVgIGluIGl0cyBwbGFjZSAocGFzc2luZyAqTlVMTCogZm9yCisgICBJZiAqbzMqIGlzIHRvIGJlIGlnbm9yZWQsIHBhc3MgOmM6ZGF0YTpgUHlfTm9uZWAgaW4gaXRzIHBsYWNlIChwYXNzaW5nICpOVUxMKiBmb3IKICAgICpvMyogd291bGQgY2F1c2UgYW4gaWxsZWdhbCBtZW1vcnkgYWNjZXNzKS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfTmVnYXRpdmUoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX05lZ2F0aXZlKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAqbyogb24gc3VjY2Vzcywgb3IgKk5VTEwqIG9uIGZhaWx1cmUuIFRoaXMgaXMgdGhlCiAgICBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYC1vYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1Bvc2l0aXZlKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9Qb3NpdGl2ZShQeU9iamVjdCAqbykKIAogICAgUmV0dXJucyAqbyogb24gc3VjY2Vzcywgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZQogICAgUHl0aG9uIGV4cHJlc3Npb24gYGArb2BgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9BYnNvbHV0ZShQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfQWJzb2x1dGUoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogYWJzCiAKQEAgLTg5LDcxICs4OSw3MSBAQAogICAgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgYWJzKG8pYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0ludmVydChQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW52ZXJ0KFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIHRoZSBiaXR3aXNlIG5lZ2F0aW9uIG9mICpvKiBvbiBzdWNjZXNzLCBvciAqTlVMTCogb24gZmFpbHVyZS4gIFRoaXMgaXMKICAgIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYH5vYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0xzaGlmdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfTHNoaWZ0KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbGVmdCBzaGlmdGluZyAqbzEqIGJ5ICpvMiogb24gc3VjY2Vzcywgb3IgKk5VTEwqIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvMSA8PCBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9Sc2hpZnQoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1JzaGlmdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHJpZ2h0IHNoaWZ0aW5nICpvMSogYnkgKm8yKiBvbiBzdWNjZXNzLCBvciAqTlVMTCogb24KICAgIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG8xID4+IG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0FuZChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfQW5kKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSAiYml0d2lzZSBhbmQiIG9mICpvMSogYW5kICpvMiogb24gc3VjY2VzcyBhbmQgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG8xICYgbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfWG9yKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9Yb3IoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlICJiaXR3aXNlIGV4Y2x1c2l2ZSBvciIgb2YgKm8xKiBieSAqbzIqIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbgogICAgZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbzEgXiBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9PcihQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfT3IoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlICJiaXR3aXNlIG9yIiBvZiAqbzEqIGFuZCAqbzIqIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvMSB8IG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VBZGQoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VBZGQoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgKm8xKiBhbmQgKm8yKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGUgb3BlcmF0aW9uCiAgICBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCiAgICBzdGF0ZW1lbnQgYGBvMSArPSBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlU3VidHJhY3QoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHN1YnRyYWN0aW5nICpvMiogZnJvbSAqbzEqLCBvciAqTlVMTCogb24gZmFpbHVyZS4gIFRoZQogICAgb3BlcmF0aW9uIGlzIGRvbmUgKmluLXBsYWNlKiB3aGVuICpvMSogc3VwcG9ydHMgaXQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCiAgICB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG8xIC09IG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgKm8xKiBhbmQgKm8yKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGUKICAgIG9wZXJhdGlvbiBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZgogICAgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBvMSAqPSBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgbWF0aGVtYXRpY2FsIGZsb29yIG9mIGRpdmlkaW5nICpvMSogYnkgKm8yKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgKmluLXBsYWNlKiB3aGVuICpvMSogc3VwcG9ydHMgaXQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50CiAgICBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG8xIC8vPSBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybiBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIG1hdGhlbWF0aWNhbCB2YWx1ZSBvZiAqbzEqIGRpdmlkZWQgYnkKICAgICpvMiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhlIHJldHVybiB2YWx1ZSBpcyAiYXBwcm94aW1hdGUiIGJlY2F1c2UgYmluYXJ5CkBAIC0xNjIsNzIgKzE2Miw2MCBAQAogICAgcGFzc2VkIHR3byBpbnRlZ2Vycy4gIFRoZSBvcGVyYXRpb24gaXMgZG9uZSAqaW4tcGxhY2UqIHdoZW4gKm8xKiBzdXBwb3J0cyBpdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcihQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGRpdmlkaW5nICpvMSogYnkgKm8yKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGUKICAgIG9wZXJhdGlvbiBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZgogICAgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBvMSAlPSBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlUG93ZXIoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIsIFB5T2JqZWN0ICpvMykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVBvd2VyKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yLCBQeU9iamVjdCAqbzMpCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogcG93CiAKICAgIFNlZSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YHBvd2AuIFJldHVybnMgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGUgb3BlcmF0aW9uCiAgICBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCi0gICBzdGF0ZW1lbnQgYGBvMSAqKj0gbzJgYCB3aGVuIG8zIGlzIDpjZGF0YTpgUHlfTm9uZWAsIG9yIGFuIGluLXBsYWNlIHZhcmlhbnQgb2YKLSAgIGBgcG93KG8xLCBvMiwgbzMpYGAgb3RoZXJ3aXNlLiBJZiAqbzMqIGlzIHRvIGJlIGlnbm9yZWQsIHBhc3MgOmNkYXRhOmBQeV9Ob25lYAorICAgc3RhdGVtZW50IGBgbzEgKio9IG8yYGAgd2hlbiBvMyBpcyA6YzpkYXRhOmBQeV9Ob25lYCwgb3IgYW4gaW4tcGxhY2UgdmFyaWFudCBvZgorICAgYGBwb3cobzEsIG8yLCBvMylgYCBvdGhlcndpc2UuIElmICpvMyogaXMgdG8gYmUgaWdub3JlZCwgcGFzcyA6YzpkYXRhOmBQeV9Ob25lYAogICAgaW4gaXRzIHBsYWNlIChwYXNzaW5nICpOVUxMKiBmb3IgKm8zKiB3b3VsZCBjYXVzZSBhbiBpbGxlZ2FsIG1lbW9yeSBhY2Nlc3MpLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSByZXN1bHQgb2YgbGVmdCBzaGlmdGluZyAqbzEqIGJ5ICpvMiogb24gc3VjY2Vzcywgb3IgKk5VTEwqIG9uCiAgICBmYWlsdXJlLiAgVGhlIG9wZXJhdGlvbiBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBvMSA8PD0gbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVJzaGlmdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZVJzaGlmdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHJpZ2h0IHNoaWZ0aW5nICpvMSogYnkgKm8yKiBvbiBzdWNjZXNzLCBvciAqTlVMTCogb24KICAgIGZhaWx1cmUuICBUaGUgb3BlcmF0aW9uIGlzIGRvbmUgKmluLXBsYWNlKiB3aGVuICpvMSogc3VwcG9ydHMgaXQuICBUaGlzIGlzIHRoZQogICAgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG8xID4+PSBvMmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlQW5kKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlQW5kKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm5zIHRoZSAiYml0d2lzZSBhbmQiIG9mICpvMSogYW5kICpvMiogb24gc3VjY2VzcyBhbmQgKk5VTEwqIG9uIGZhaWx1cmUuIFRoZQogICAgb3BlcmF0aW9uIGlzIGRvbmUgKmluLXBsYWNlKiB3aGVuICpvMSogc3VwcG9ydHMgaXQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mCiAgICB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG8xICY9IG8yYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VYb3IoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0luUGxhY2VYb3IoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlICJiaXR3aXNlIGV4Y2x1c2l2ZSBvciIgb2YgKm8xKiBieSAqbzIqIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbgogICAgZmFpbHVyZS4gIFRoZSBvcGVyYXRpb24gaXMgZG9uZSAqaW4tcGxhY2UqIHdoZW4gKm8xKiBzdXBwb3J0cyBpdC4gIFRoaXMgaXMgdGhlCiAgICBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgbzEgXj0gbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5QbGFjZU9yKFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JblBsYWNlT3IoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCiAKICAgIFJldHVybnMgdGhlICJiaXR3aXNlIG9yIiBvZiAqbzEqIGFuZCAqbzIqIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhlCiAgICBvcGVyYXRpb24gaXMgZG9uZSAqaW4tcGxhY2UqIHdoZW4gKm8xKiBzdXBwb3J0cyBpdC4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YKICAgIHRoZSBQeXRob24gc3RhdGVtZW50IGBgbzEgfD0gbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW50KFB5T2JqZWN0ICpvKQotCi0gICBSZXR1cm5zIHRoZSAqbyogY29udmVydGVkIHRvIGFuIGludGVnZXIgb2JqZWN0IG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbgotICAgZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgaW50KG8pYGAuCi0KLSAgIC4uIG5vdGU6OgotCi0gICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiB0aGUgdHJhbnNpdGlvbmFsIDpmaWxlOmBpbnRvYmplY3QuaGAKLSAgICAgaGVhZGVyIGZpbGUuICBJdCB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiBQeXRob24gMy4xLiAgVXNlCi0gICAgIHRoZSA6Y2Z1bmM6YFB5TnVtYmVyX0xvbmdgIGZ1bmN0aW9uIGluc3RlYWQuCi0KLQotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0xvbmcoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0xvbmcoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogaW50CiAKQEAgLTIzNSw3ICsyMjMsNyBAQAogICAgZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgaW50KG8pYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX0Zsb2F0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9GbG9hdChQeU9iamVjdCAqbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBmbG9hdAogCkBAIC0yNDMsMjIgKzIzMSwyMiBAQAogICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBmbG9hdChvKWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU51bWJlcl9JbmRleChQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlOdW1iZXJfSW5kZXgoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybnMgdGhlICpvKiBjb252ZXJ0ZWQgdG8gYSBQeXRob24gaW50IG9uIHN1Y2Nlc3Mgb3IgKk5VTEwqIHdpdGggYQogICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gcmFpc2VkIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1RvQmFzZShQeU9iamVjdCAqbiwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TnVtYmVyX1RvQmFzZShQeU9iamVjdCAqbiwgaW50IGJhc2UpCiAKICAgIFJldHVybnMgdGhlIGludGVnZXIgKm4qIGNvbnZlcnRlZCB0byAqYmFzZSogYXMgYSBzdHJpbmcgd2l0aCBhIGJhc2UKICAgIG1hcmtlciBvZiBgYCcwYidgYCwgYGAnMG8nYGAsIG9yIGBgJzB4J2BgIGlmIGFwcGxpY2FibGUuICBXaGVuCiAgICAqYmFzZSogaXMgbm90IDIsIDgsIDEwLCBvciAxNiwgdGhlIGZvcm1hdCBpcyBgYCd4I251bSdgYCB3aGVyZSB4IGlzIHRoZQogICAgYmFzZS4gSWYgKm4qIGlzIG5vdCBhbiBpbnQgb2JqZWN0LCBpdCBpcyBjb252ZXJ0ZWQgd2l0aAotICAgOmNmdW5jOmBQeU51bWJlcl9JbmRleGAgZmlyc3QuCisgICA6YzpmdW5jOmBQeU51bWJlcl9JbmRleGAgZmlyc3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeU51bWJlcl9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpleGMpCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeU51bWJlcl9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpleGMpCiAKICAgIFJldHVybnMgKm8qIGNvbnZlcnRlZCB0byBhIFB5X3NzaXplX3QgdmFsdWUgaWYgKm8qIGNhbiBiZSBpbnRlcnByZXRlZCBhcyBhbgogICAgaW50ZWdlci4gSWYgKm8qIGNhbiBiZSBjb252ZXJ0ZWQgdG8gYSBQeXRob24gaW50IGJ1dCB0aGUgYXR0ZW1wdCB0bwpAQCAtMjY5LDcgKzI1Nyw3IEBACiAgICBpbnRlZ2VyIG9yICpQWV9TU0laRV9UX01BWCogZm9yIGEgcG9zaXRpdmUgaW50ZWdlci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlJbmRleF9DaGVjayhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlJbmRleF9DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJucyBUcnVlIGlmICpvKiBpcyBhbiBpbmRleCBpbnRlZ2VyIChoYXMgdGhlIG5iX2luZGV4IHNsb3Qgb2YgIHRoZQogICAgdHBfYXNfbnVtYmVyIHN0cnVjdHVyZSBmaWxsZWQgaW4pLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL29iamJ1ZmZlci5yc3QgYi9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdAppbmRleCA3MjhkMzgzLi5lN2Y0ZmRlIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdAorKysgYi9Eb2MvYy1hcGkvb2JqYnVmZmVyLnJzdApAQCAtMTIsMTMgKzEyLDEzIEBACiB5b3UgY29udHJvbCBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGUgcmVzb3VyY2VzIGFjcXVpcmVkIHdoZW4gYSBidWZmZXIgaXMKIGV4cG9ydGVkLgogCi1UaGVyZWZvcmUsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNhbGwgOmNmdW5jOmBQeU9iamVjdF9HZXRCdWZmZXJgCitUaGVyZWZvcmUsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNhbGwgOmM6ZnVuYzpgUHlPYmplY3RfR2V0QnVmZmVyYAogKG9yIHRoZSBgYHkqYGAgb3IgYGB3KmBgIDpyZWY6YGZvcm1hdCBjb2RlcyA8YXJnLXBhcnNpbmc+YCB3aXRoIHRoZQotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmYW1pbHkgb2YgZnVuY3Rpb25zKSB0byBnZXQgYSBidWZmZXIgdmlldyBvdmVyCi1hbiBvYmplY3QsIGFuZCA6Y2Z1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIHdoZW4gdGhlIGJ1ZmZlciB2aWV3IGNhbiBiZSByZWxlYXNlZC4KKzpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGZhbWlseSBvZiBmdW5jdGlvbnMpIHRvIGdldCBhIGJ1ZmZlciB2aWV3IG92ZXIKK2FuIG9iamVjdCwgYW5kIDpjOmZ1bmM6YFB5QnVmZmVyX1JlbGVhc2VgIHdoZW4gdGhlIGJ1ZmZlciB2aWV3IGNhbiBiZSByZWxlYXNlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfQXNDaGFyQnVmZmVyKFB5T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKipidWZmZXIsIFB5X3NzaXplX3QgKmJ1ZmZlcl9sZW4pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICoqYnVmZmVyLCBQeV9zc2l6ZV90ICpidWZmZXJfbGVuKQogCiAgICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIHJlYWQtb25seSBtZW1vcnkgbG9jYXRpb24gdXNhYmxlIGFzIGNoYXJhY3Rlci1iYXNlZAogICAgaW5wdXQuICBUaGUgKm9iaiogYXJndW1lbnQgbXVzdCBzdXBwb3J0IHRoZSBzaW5nbGUtc2VnbWVudCBjaGFyYWN0ZXIgYnVmZmVyCkBAIC0yNyw3ICsyNyw3IEBACiAgICA6ZXhjOmBUeXBlRXJyb3JgIG9uIGVycm9yLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Bc1JlYWRCdWZmZXIoUHlPYmplY3QgKm9iaiwgY29uc3Qgdm9pZCAqKmJ1ZmZlciwgUHlfc3NpemVfdCAqYnVmZmVyX2xlbikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfQXNSZWFkQnVmZmVyKFB5T2JqZWN0ICpvYmosIGNvbnN0IHZvaWQgKipidWZmZXIsIFB5X3NzaXplX3QgKmJ1ZmZlcl9sZW4pCiAKICAgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgcmVhZC1vbmx5IG1lbW9yeSBsb2NhdGlvbiBjb250YWluaW5nIGFyYml0cmFyeSBkYXRhLgogICAgVGhlICpvYmoqIGFyZ3VtZW50IG11c3Qgc3VwcG9ydCB0aGUgc2luZ2xlLXNlZ21lbnQgcmVhZGFibGUgYnVmZmVyCkBAIC0zNiwxMyArMzYsMTMgQEAKICAgIDpleGM6YFR5cGVFcnJvcmAgb24gZXJyb3IuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmICpvKiBzdXBwb3J0cyB0aGUgc2luZ2xlLXNlZ21lbnQgcmVhZGFibGUgYnVmZmVyIGludGVyZmFjZS4KICAgIE90aGVyd2lzZSByZXR1cm5zIGBgMGBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKipidWZmZXIsIFB5X3NzaXplX3QgKmJ1ZmZlcl9sZW4pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0FzV3JpdGVCdWZmZXIoUHlPYmplY3QgKm9iaiwgdm9pZCAqKmJ1ZmZlciwgUHlfc3NpemVfdCAqYnVmZmVyX2xlbikKIAogICAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSB3cml0YWJsZSBtZW1vcnkgbG9jYXRpb24uICBUaGUgKm9iaiogYXJndW1lbnQgbXVzdAogICAgc3VwcG9ydCB0aGUgc2luZ2xlLXNlZ21lbnQsIGNoYXJhY3RlciBidWZmZXIgaW50ZXJmYWNlLiAgT24gc3VjY2VzcywKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9vYmplY3QucnN0IGIvRG9jL2MtYXBpL29iamVjdC5yc3QKaW5kZXggZmQzYTZkMi4uZDBkNDVhZCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL29iamVjdC5yc3QKKysrIGIvRG9jL2MtYXBpL29iamVjdC5yc3QKQEAgLTYsNyArNiw3IEBACiA9PT09PT09PT09PT09PT0KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfUHJpbnQoUHlPYmplY3QgKm8sIEZJTEUgKmZwLCBpbnQgZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvLCBGSUxFICpmcCwgaW50IGZsYWdzKQogCiAgICBQcmludCBhbiBvYmplY3QgKm8qLCBvbiBmaWxlICpmcCouICBSZXR1cm5zIGBgLTFgYCBvbiBlcnJvci4gIFRoZSBmbGFncyBhcmd1bWVudAogICAgaXMgdXNlZCB0byBlbmFibGUgY2VydGFpbiBwcmludGluZyBvcHRpb25zLiAgVGhlIG9ubHkgb3B0aW9uIGN1cnJlbnRseSBzdXBwb3J0ZWQKQEAgLTE0LDM1ICsxNCwzNSBAQAogICAgaW5zdGVhZCBvZiB0aGUgOmZ1bmM6YHJlcHJgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9IYXNBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqYXR0cl9uYW1lKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9IYXNBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqYXR0cl9uYW1lKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmICpvKiBoYXMgdGhlIGF0dHJpYnV0ZSAqYXR0cl9uYW1lKiwgYW5kIGBgMGBgIG90aGVyd2lzZS4gIFRoaXMKICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgaGFzYXR0cihvLCBhdHRyX25hbWUpYGAuICBUaGlzIGZ1bmN0aW9uCiAgICBhbHdheXMgc3VjY2VlZHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmICpvKiBoYXMgdGhlIGF0dHJpYnV0ZSAqYXR0cl9uYW1lKiwgYW5kIGBgMGBgIG90aGVyd2lzZS4gIFRoaXMKICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgaGFzYXR0cihvLCBhdHRyX25hbWUpYGAuICBUaGlzIGZ1bmN0aW9uCiAgICBhbHdheXMgc3VjY2VlZHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICphdHRyX25hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICphdHRyX25hbWUpCiAKICAgIFJldHJpZXZlIGFuIGF0dHJpYnV0ZSBuYW1lZCAqYXR0cl9uYW1lKiBmcm9tIG9iamVjdCAqbyouIFJldHVybnMgdGhlIGF0dHJpYnV0ZQogICAgdmFsdWUgb24gc3VjY2Vzcywgb3IgKk5VTEwqIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24KICAgIGV4cHJlc3Npb24gYGBvLmF0dHJfbmFtZWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSkKIAogICAgUmV0cmlldmUgYW4gYXR0cmlidXRlIG5hbWVkICphdHRyX25hbWUqIGZyb20gb2JqZWN0ICpvKi4gUmV0dXJucyB0aGUgYXR0cmlidXRlCiAgICB2YWx1ZSBvbiBzdWNjZXNzLCBvciAqTlVMTCogb24gZmFpbHVyZS4gVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uCiAgICBleHByZXNzaW9uIGBgby5hdHRyX25hbWVgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpuYW1lKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKm5hbWUpCiAKICAgIEdlbmVyaWMgYXR0cmlidXRlIGdldHRlciBmdW5jdGlvbiB0aGF0IGlzIG1lYW50IHRvIGJlIHB1dCBpbnRvIGEgdHlwZQogICAgb2JqZWN0J3MgYGB0cF9nZXRhdHRyb2BgIHNsb3QuICBJdCBsb29rcyBmb3IgYSBkZXNjcmlwdG9yIGluIHRoZSBkaWN0aW9uYXJ5CkBAIC01MiwyMSArNTIsMjEgQEAKICAgIGRlc2NyaXB0b3JzIGRvbid0LiAgT3RoZXJ3aXNlLCBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgaXMgcmFpc2VkLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9TZXRBdHRyKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfU2V0QXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpCiAKICAgIFNldCB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBuYW1lZCAqYXR0cl9uYW1lKiwgZm9yIG9iamVjdCAqbyosIHRvIHRoZSB2YWx1ZQogICAgKnYqLiBSZXR1cm5zIGBgLTFgYCBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudAogICAgYGBvLmF0dHJfbmFtZSA9IHZgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdikKIAogICAgU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG5hbWVkICphdHRyX25hbWUqLCBmb3Igb2JqZWN0ICpvKiwgdG8gdGhlIHZhbHVlCiAgICAqdiouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50CiAgICBgYG8uYXR0cl9uYW1lID0gdmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9HZW5lcmljU2V0QXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2YWx1ZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfR2VuZXJpY1NldEF0dHIoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqdmFsdWUpCiAKICAgIEdlbmVyaWMgYXR0cmlidXRlIHNldHRlciBmdW5jdGlvbiB0aGF0IGlzIG1lYW50IHRvIGJlIHB1dCBpbnRvIGEgdHlwZQogICAgb2JqZWN0J3MgYGB0cF9zZXRhdHRyb2BgIHNsb3QuICBJdCBsb29rcyBmb3IgYSBkYXRhIGRlc2NyaXB0b3IgaW4gdGhlCkBAIC03NiwxOSArNzYsMTkgQEAKICAgIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBpcyByYWlzZWQgYW5kIGBgLTFgYCBpcyByZXR1cm5lZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfRGVsQXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKmF0dHJfbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfRGVsQXR0cihQeU9iamVjdCAqbywgUHlPYmplY3QgKmF0dHJfbmFtZSkKIAogICAgRGVsZXRlIGF0dHJpYnV0ZSBuYW1lZCAqYXR0cl9uYW1lKiwgZm9yIG9iamVjdCAqbyouIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG8uYXR0cl9uYW1lYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfRGVsQXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lKQogCiAgICBEZWxldGUgYXR0cmlidXRlIG5hbWVkICphdHRyX25hbWUqLCBmb3Igb2JqZWN0ICpvKi4gUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBkZWwgby5hdHRyX25hbWVgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfUmljaENvbXBhcmUoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIsIGludCBvcGlkKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9SaWNoQ29tcGFyZShQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMiwgaW50IG9waWQpCiAKICAgIENvbXBhcmUgdGhlIHZhbHVlcyBvZiAqbzEqIGFuZCAqbzIqIHVzaW5nIHRoZSBvcGVyYXRpb24gc3BlY2lmaWVkIGJ5ICpvcGlkKiwKICAgIHdoaWNoIG11c3QgYmUgb25lIG9mIDpjb25zdDpgUHlfTFRgLCA6Y29uc3Q6YFB5X0xFYCwgOmNvbnN0OmBQeV9FUWAsCkBAIC05OCw3ICs5OCw3IEBACiAgICB0byAqb3BpZCouIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBjb21wYXJpc29uIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIsIGludCBvcGlkKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIsIGludCBvcGlkKQogCiAgICBDb21wYXJlIHRoZSB2YWx1ZXMgb2YgKm8xKiBhbmQgKm8yKiB1c2luZyB0aGUgb3BlcmF0aW9uIHNwZWNpZmllZCBieSAqb3BpZCosCiAgICB3aGljaCBtdXN0IGJlIG9uZSBvZiA6Y29uc3Q6YFB5X0xUYCwgOmNvbnN0OmBQeV9MRWAsIDpjb25zdDpgUHlfRVFgLApAQCAtMTA5LDEwICsxMDksMTAgQEAKICAgICpvcGlkKi4KIAogLi4gbm90ZTo6Ci0gICBJZiAqbzEqIGFuZCAqbzIqIGFyZSB0aGUgc2FtZSBvYmplY3QsIDpjZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVCb29sYAorICAgSWYgKm8xKiBhbmQgKm8yKiBhcmUgdGhlIHNhbWUgb2JqZWN0LCA6YzpmdW5jOmBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2xgCiAgICB3aWxsIGFsd2F5cyByZXR1cm4gYGAxYGAgZm9yIDpjb25zdDpgUHlfRVFgIGFuZCBgYDBgYCBmb3IgOmNvbnN0OmBQeV9ORWAuCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9SZXByKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9SZXByKFB5T2JqZWN0ICpvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IHJlcHIKIApAQCAtMTIxLDE4ICsxMjEsMTggQEAKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgcmVwcihvKWBgLiAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgcmVwcmAgYnVpbHQtaW4gZnVuY3Rpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0FTQ0lJKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9BU0NJSShQeU9iamVjdCAqbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBhc2NpaQogCi0gICBBcyA6Y2Z1bmM6YFB5T2JqZWN0X1JlcHJgLCBjb21wdXRlIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIG9iamVjdCAqbyosIGJ1dAorICAgQXMgOmM6ZnVuYzpgUHlPYmplY3RfUmVwcmAsIGNvbXB1dGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygb2JqZWN0ICpvKiwgYnV0CiAgICBlc2NhcGUgdGhlIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgcmV0dXJuZWQgYnkKLSAgIDpjZnVuYzpgUHlPYmplY3RfUmVwcmAgd2l0aCBgYFx4YGAsIGBgXHVgYCBvciBgYFxVYGAgZXNjYXBlcy4gIFRoaXMgZ2VuZXJhdGVzCi0gICBhIHN0cmluZyBzaW1pbGFyIHRvIHRoYXQgcmV0dXJuZWQgYnkgOmNmdW5jOmBQeU9iamVjdF9SZXByYCBpbiBQeXRob24gMi4KKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X1JlcHJgIHdpdGggYGBceGBgLCBgYFx1YGAgb3IgYGBcVWBgIGVzY2FwZXMuICBUaGlzIGdlbmVyYXRlcworICAgYSBzdHJpbmcgc2ltaWxhciB0byB0aGF0IHJldHVybmVkIGJ5IDpjOmZ1bmM6YFB5T2JqZWN0X1JlcHJgIGluIFB5dGhvbiAyLgogICAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgYXNjaWlgIGJ1aWx0LWluIGZ1bmN0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9TdHIoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X1N0cihQeU9iamVjdCAqbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBzdHIKIApAQCAtMTQxLDIwICsxNDEsMjEgQEAKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgc3RyKG8pYGAuICBDYWxsZWQgYnkgdGhlIDpmdW5jOmBzdHJgIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICBhbmQsIHRoZXJlZm9yZSwgYnkgdGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9CeXRlcyhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogYnl0ZXMKIAotICAgQ29tcHV0ZSBhIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9mIG9iamVjdCAqbyouICAqTlVMTCogaXMgcmV0dXJuZWQgb24gZmFpbHVyZQotICAgYW5kIGEgYnl0ZXMgb2JqZWN0IG9uIHN1Y2Nlc3MuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uCi0gICBgYGJ5dGVzKG8pYGAuCisgICBDb21wdXRlIGEgYnl0ZXMgcmVwcmVzZW50YXRpb24gb2Ygb2JqZWN0ICpvKi4gICpOVUxMKiBpcyByZXR1cm5lZCBvbgorICAgZmFpbHVyZSBhbmQgYSBieXRlcyBvYmplY3Qgb24gc3VjY2Vzcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uCisgICBleHByZXNzaW9uIGBgYnl0ZXMobylgYCwgd2hlbiAqbyogaXMgbm90IGFuIGludGVnZXIuICBVbmxpa2UgYGBieXRlcyhvKWBgLAorICAgYSBUeXBlRXJyb3IgaXMgcmFpc2VkIHdoZW4gKm8qIGlzIGFuIGludGVnZXIgaW5zdGVhZCBvZiBhIHplcm8taW5pdGlhbGl6ZWQKKyAgIGJ5dGVzIG9iamVjdC4KIAotCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfSXNJbnN0YW5jZShQeU9iamVjdCAqaW5zdCwgUHlPYmplY3QgKmNscykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfSXNJbnN0YW5jZShQeU9iamVjdCAqaW5zdCwgUHlPYmplY3QgKmNscykKIAogICAgUmV0dXJucyBgYDFgYCBpZiAqaW5zdCogaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzICpjbHMqIG9yIGEgc3ViY2xhc3Mgb2YKICAgICpjbHMqLCBvciBgYDBgYCBpZiBub3QuICBPbiBlcnJvciwgcmV0dXJucyBgYC0xYGAgYW5kIHNldHMgYW4gZXhjZXB0aW9uLiAgSWYKLSAgICpjbHMqIGlzIGEgdHlwZSBvYmplY3QgcmF0aGVyIHRoYW4gYSBjbGFzcyBvYmplY3QsIDpjZnVuYzpgUHlPYmplY3RfSXNJbnN0YW5jZWAKKyAgICpjbHMqIGlzIGEgdHlwZSBvYmplY3QgcmF0aGVyIHRoYW4gYSBjbGFzcyBvYmplY3QsIDpjOmZ1bmM6YFB5T2JqZWN0X0lzSW5zdGFuY2VgCiAgICByZXR1cm5zIGBgMWBgIGlmICppbnN0KiBpcyBvZiB0eXBlICpjbHMqLiAgSWYgKmNscyogaXMgYSB0dXBsZSwgdGhlIGNoZWNrIHdpbGwKICAgIGJlIGRvbmUgYWdhaW5zdCBldmVyeSBlbnRyeSBpbiAqY2xzKi4gVGhlIHJlc3VsdCB3aWxsIGJlIGBgMWBgIHdoZW4gYXQgbGVhc3Qgb25lCiAgICBvZiB0aGUgY2hlY2tzIHJldHVybnMgYGAxYGAsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGBgMGBgLiBJZiAqaW5zdCogaXMgbm90IGEKQEAgLTE3MCwxMyArMTcxLDEzIEBACiA6Y2xhc3M6YEFgIGlmIGl0IGluaGVyaXRzIGZyb20gOmNsYXNzOmBBYCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gIElmCiBlaXRoZXIgaXMgbm90IGEgY2xhc3Mgb2JqZWN0LCBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20gaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlCiBjbGFzcyByZWxhdGlvbnNoaXAgb2YgdGhlIHR3byBvYmplY3RzLiAgV2hlbiB0ZXN0aW5nIGlmICpCKiBpcyBhIHN1YmNsYXNzIG9mCi0qQSosIGlmICpBKiBpcyAqQiosIDpjZnVuYzpgUHlPYmplY3RfSXNTdWJjbGFzc2AgcmV0dXJucyB0cnVlLiAgSWYgKkEqIGFuZCAqQioKKypBKiwgaWYgKkEqIGlzICpCKiwgOmM6ZnVuYzpgUHlPYmplY3RfSXNTdWJjbGFzc2AgcmV0dXJucyB0cnVlLiAgSWYgKkEqIGFuZCAqQioKIGFyZSBkaWZmZXJlbnQgb2JqZWN0cywgKkIqJ3MgOmF0dHI6YF9fYmFzZXNfX2AgYXR0cmlidXRlIGlzIHNlYXJjaGVkIGluIGEKIGRlcHRoLWZpcnN0IGZhc2hpb24gZm9yICpBKiAtLS0gdGhlIHByZXNlbmNlIG9mIHRoZSA6YXR0cjpgX19iYXNlc19fYCBhdHRyaWJ1dGUKIGlzIGNvbnNpZGVyZWQgc3VmZmljaWVudCBmb3IgdGhpcyBkZXRlcm1pbmF0aW9uLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Jc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Jc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmIHRoZSBjbGFzcyAqZGVyaXZlZCogaXMgaWRlbnRpY2FsIHRvIG9yIGRlcml2ZWQgZnJvbSB0aGUgY2xhc3MKICAgICpjbHMqLCBvdGhlcndpc2UgcmV0dXJucyBgYDBgYC4gIEluIGNhc2Ugb2YgYW4gZXJyb3IsIHJldHVybnMgYGAtMWBgLiBJZiAqY2xzKgpAQCAtMTg2LDEzICsxODcsMTMgQEAKICAgIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICpvKQogCiAgICBEZXRlcm1pbmUgaWYgdGhlIG9iamVjdCAqbyogaXMgY2FsbGFibGUuICBSZXR1cm4gYGAxYGAgaWYgdGhlIG9iamVjdCBpcyBjYWxsYWJsZQogICAgYW5kIGBgMGBgIG90aGVyd2lzZS4gIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsKFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGwoUHlPYmplY3QgKmNhbGxhYmxlX29iamVjdCwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlX29iamVjdCosIHdpdGggYXJndW1lbnRzIGdpdmVuIGJ5IHRoZQogICAgdHVwbGUgKmFyZ3MqLCBhbmQgbmFtZWQgYXJndW1lbnRzIGdpdmVuIGJ5IHRoZSBkaWN0aW9uYXJ5ICprdyouIElmIG5vIG5hbWVkCkBAIC0yMDIsNyArMjAzLDcgQEAKICAgIGBgY2FsbGFibGVfb2JqZWN0KCphcmdzLCAqKmt3KWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsT2JqZWN0KFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsIFB5T2JqZWN0ICphcmdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsT2JqZWN0KFB5T2JqZWN0ICpjYWxsYWJsZV9vYmplY3QsIFB5T2JqZWN0ICphcmdzKQogCiAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCAqY2FsbGFibGVfb2JqZWN0Kiwgd2l0aCBhcmd1bWVudHMgZ2l2ZW4gYnkgdGhlCiAgICB0dXBsZSAqYXJncyouICBJZiBubyBhcmd1bWVudHMgYXJlIG5lZWRlZCwgdGhlbiAqYXJncyogbWF5IGJlICpOVUxMKi4gIFJldHVybnMKQEAgLTIxMCw1NCArMjExLDU4IEBACiAgICBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBjYWxsYWJsZV9vYmplY3QoKmFyZ3MpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCBhIGNhbGxhYmxlIFB5dGhvbiBvYmplY3QgKmNhbGxhYmxlKiwgd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDIGFyZ3VtZW50cy4KLSAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCBzdHlsZSBmb3JtYXQKKyAgIFRoZSBDIGFyZ3VtZW50cyBhcmUgZGVzY3JpYmVkIHVzaW5nIGEgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgc3R5bGUgZm9ybWF0CiAgICBzdHJpbmcuICBUaGUgZm9ybWF0IG1heSBiZSAqTlVMTCosIGluZGljYXRpbmcgdGhhdCBubyBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLgogICAgUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgY2FsbGFibGUoKmFyZ3MpYGAuIE5vdGUgdGhhdCBpZiB5b3Ugb25seQotICAgcGFzcyA6Y3R5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLCA6Y2Z1bmM6YFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NgIGlzIGEKKyAgIHBhc3MgOmM6dHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3NgIGlzIGEKICAgIGZhc3RlciBhbHRlcm5hdGl2ZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkICptZXRob2QqIG9mIG9iamVjdCAqbyogd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDCi0gICBhcmd1bWVudHMuICBUaGUgQyBhcmd1bWVudHMgYXJlIGRlc2NyaWJlZCBieSBhIDpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZm9ybWF0CisgICBhcmd1bWVudHMuICBUaGUgQyBhcmd1bWVudHMgYXJlIGRlc2NyaWJlZCBieSBhIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIGZvcm1hdAogICAgc3RyaW5nIHRoYXQgc2hvdWxkICBwcm9kdWNlIGEgdHVwbGUuICBUaGUgZm9ybWF0IG1heSBiZSAqTlVMTCosIGluZGljYXRpbmcgdGhhdAogICAgbm8gYXJndW1lbnRzIGFyZSBwcm92aWRlZC4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIG9uIHN1Y2Nlc3MsIG9yICpOVUxMKgogICAgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgby5tZXRob2QoYXJncylgYC4KLSAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjdHlwZTpgUHlPYmplY3QgXCpgIGFyZ3MsCi0gICA6Y2Z1bmM6YFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzYCBpcyBhIGZhc3RlciBhbHRlcm5hdGl2ZS4KKyAgIE5vdGUgdGhhdCBpZiB5b3Ugb25seSBwYXNzIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBhcmdzLAorICAgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3NgIGlzIGEgZmFzdGVyIGFsdGVybmF0aXZlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwgLi4uLCBOVUxMKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwgLi4uLCBOVUxMKQogCiAgICBDYWxsIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCAqY2FsbGFibGUqLCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCi0gICA6Y3R5cGU6YFB5T2JqZWN0XCpgIGFyZ3VtZW50cy4gIFRoZSBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIGFzIGEgdmFyaWFibGUgbnVtYmVyCisgICA6Yzp0eXBlOmBQeU9iamVjdFwqYCBhcmd1bWVudHMuICBUaGUgYXJndW1lbnRzIGFyZSBwcm92aWRlZCBhcyBhIHZhcmlhYmxlIG51bWJlcgogICAgb2YgcGFyYW1ldGVycyBmb2xsb3dlZCBieSAqTlVMTCouIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBvbiBzdWNjZXNzLCBvcgogICAgKk5VTEwqIG9uIGZhaWx1cmUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqbmFtZSwgLi4uLCBOVUxMKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhQeU9iamVjdCAqbywgUHlPYmplY3QgKm5hbWUsIC4uLiwgTlVMTCkKIAogICAgQ2FsbHMgYSBtZXRob2Qgb2YgdGhlIG9iamVjdCAqbyosIHdoZXJlIHRoZSBuYW1lIG9mIHRoZSBtZXRob2QgaXMgZ2l2ZW4gYXMgYQogICAgUHl0aG9uIHN0cmluZyBvYmplY3QgaW4gKm5hbWUqLiAgSXQgaXMgY2FsbGVkIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKLSAgIDpjdHlwZTpgUHlPYmplY3RcKmAgYXJndW1lbnRzLiAgVGhlIGFyZ3VtZW50cyBhcmUgcHJvdmlkZWQgYXMgYSB2YXJpYWJsZSBudW1iZXIKKyAgIDpjOnR5cGU6YFB5T2JqZWN0XCpgIGFyZ3VtZW50cy4gIFRoZSBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIGFzIGEgdmFyaWFibGUgbnVtYmVyCiAgICBvZiBwYXJhbWV0ZXJzIGZvbGxvd2VkIGJ5ICpOVUxMKi4gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIG9uIHN1Y2Nlc3MsIG9yCiAgICAqTlVMTCogb24gZmFpbHVyZS4KIAogCi0uLiBjZnVuY3Rpb246OiBsb25nIFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlfaGFzaF90IFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogaGFzaAogCiAgICBDb21wdXRlIGFuZCByZXR1cm4gdGhlIGhhc2ggdmFsdWUgb2YgYW4gb2JqZWN0ICpvKi4gIE9uIGZhaWx1cmUsIHJldHVybiBgYC0xYGAuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGhhc2gobylgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSByZXR1cm4gdHlwZSBpcyBub3cgUHlfaGFzaF90LiAgVGhpcyBpcyBhIHNpZ25lZCBpbnRlZ2VyIHRoZSBzYW1lIHNpemUKKyAgICAgIGFzIFB5X3NzaXplX3QuCiAKLS4uIGNmdW5jdGlvbjo6IGxvbmcgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICpvKQorCisuLiBjOmZ1bmN0aW9uOjogUHlfaGFzaF90IFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqbykKIAogICAgU2V0IGEgOmV4YzpgVHlwZUVycm9yYCBpbmRpY2F0aW5nIHRoYXQgYGB0eXBlKG8pYGAgaXMgbm90IGhhc2hhYmxlIGFuZCByZXR1cm4gYGAtMWBgLgogICAgVGhpcyBmdW5jdGlvbiByZWNlaXZlcyBzcGVjaWFsIHRyZWF0bWVudCB3aGVuIHN0b3JlZCBpbiBhIGBgdHBfaGFzaGBgIHNsb3QsCkBAIC0yNjUsMjEgKzI3MCwyMSBAQAogICAgaGFzaGFibGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5T2JqZWN0X0lzVHJ1ZShQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfSXNUcnVlKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIGBgMWBgIGlmIHRoZSBvYmplY3QgKm8qIGlzIGNvbnNpZGVyZWQgdG8gYmUgdHJ1ZSwgYW5kIGBgMGBgIG90aGVyd2lzZS4KICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBub3Qgbm90IG9gYC4gIE9uIGZhaWx1cmUsIHJldHVybgogICAgYGAtMWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9Ob3QoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X05vdChQeU9iamVjdCAqbykKIAogICAgUmV0dXJucyBgYDBgYCBpZiB0aGUgb2JqZWN0ICpvKiBpcyBjb25zaWRlcmVkIHRvIGJlIHRydWUsIGFuZCBgYDFgYCBvdGhlcndpc2UuCiAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbm90IG9gYC4gIE9uIGZhaWx1cmUsIHJldHVybgogICAgYGAtMWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9UeXBlKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9UeXBlKFB5T2JqZWN0ICpvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IHR5cGUKIApAQCAtMjg4LDE3ICsyOTMsMTcgQEAKICAgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgdHlwZShvKWBgLiBUaGlzIGZ1bmN0aW9uIGluY3JlbWVudHMgdGhlCiAgICByZWZlcmVuY2UgY291bnQgb2YgdGhlIHJldHVybiB2YWx1ZS4gVGhlcmUncyByZWFsbHkgbm8gcmVhc29uIHRvIHVzZSB0aGlzCiAgICBmdW5jdGlvbiBpbnN0ZWFkIG9mIHRoZSBjb21tb24gZXhwcmVzc2lvbiBgYG8tPm9iX3R5cGVgYCwgd2hpY2ggcmV0dXJucyBhCi0gICBwb2ludGVyIG9mIHR5cGUgOmN0eXBlOmBQeVR5cGVPYmplY3RcKmAsIGV4Y2VwdCB3aGVuIHRoZSBpbmNyZW1lbnRlZCByZWZlcmVuY2UKKyAgIHBvaW50ZXIgb2YgdHlwZSA6Yzp0eXBlOmBQeVR5cGVPYmplY3RcKmAsIGV4Y2VwdCB3aGVuIHRoZSBpbmNyZW1lbnRlZCByZWZlcmVuY2UKICAgIGNvdW50IGlzIG5lZWRlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfVHlwZUNoZWNrKFB5T2JqZWN0ICpvLCBQeVR5cGVPYmplY3QgKnR5cGUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X1R5cGVDaGVjayhQeU9iamVjdCAqbywgUHlUeXBlT2JqZWN0ICp0eXBlKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgb2JqZWN0ICpvKiBpcyBvZiB0eXBlICp0eXBlKiBvciBhIHN1YnR5cGUgb2YgKnR5cGUqLiAgQm90aAogICAgcGFyYW1ldGVycyBtdXN0IGJlIG5vbi0qTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeU9iamVjdF9MZW5ndGgoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeU9iamVjdF9MZW5ndGgoUHlPYmplY3QgKm8pCiAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IFB5T2JqZWN0X1NpemUoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogbGVuCkBAIC0zMDgsMzQgKzMxMywzNCBAQAogICAgcmV0dXJuZWQuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxlbihvKWBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9HZXRJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9HZXRJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQogCiAgICBSZXR1cm4gZWxlbWVudCBvZiAqbyogY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0ICprZXkqIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBvW2tleV1gYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfU2V0SXRlbShQeU9iamVjdCAqbywgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X1NldEl0ZW0oUHlPYmplY3QgKm8sIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2KQogCiAgICBNYXAgdGhlIG9iamVjdCAqa2V5KiB0byB0aGUgdmFsdWUgKnYqLiAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlCiAgICBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgb1trZXldID0gdmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeU9iamVjdF9EZWxJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9EZWxJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQogCiAgICBEZWxldGUgdGhlIG1hcHBpbmcgZm9yICprZXkqIGZyb20gKm8qLiAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4gVGhpcyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBkZWwgb1trZXldYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0RpcihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfRGlyKFB5T2JqZWN0ICpvKQogCiAgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgZGlyKG8pYGAsIHJldHVybmluZyBhIChwb3NzaWJseQogICAgZW1wdHkpIGxpc3Qgb2Ygc3RyaW5ncyBhcHByb3ByaWF0ZSBmb3IgdGhlIG9iamVjdCBhcmd1bWVudCwgb3IgKk5VTEwqIGlmIHRoZXJlCiAgICB3YXMgYW4gZXJyb3IuICBJZiB0aGUgYXJndW1lbnQgaXMgKk5VTEwqLCB0aGlzIGlzIGxpa2UgdGhlIFB5dGhvbiBgYGRpcigpYGAsCiAgICByZXR1cm5pbmcgdGhlIG5hbWVzIG9mIHRoZSBjdXJyZW50IGxvY2FsczsgaW4gdGhpcyBjYXNlLCBpZiBubyBleGVjdXRpb24gZnJhbWUKLSAgIGlzIGFjdGl2ZSB0aGVuICpOVUxMKiBpcyByZXR1cm5lZCBidXQgOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAgd2lsbCByZXR1cm4gZmFsc2UuCisgICBpcyBhY3RpdmUgdGhlbiAqTlVMTCogaXMgcmV0dXJuZWQgYnV0IDpjOmZ1bmM6YFB5RXJyX09jY3VycmVkYCB3aWxsIHJldHVybiBmYWxzZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2V0SXRlcihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2V0SXRlcihQeU9iamVjdCAqbykKIAogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGl0ZXIobylgYC4gSXQgcmV0dXJucyBhIG5ldwogICAgaXRlcmF0b3IgZm9yIHRoZSBvYmplY3QgYXJndW1lbnQsIG9yIHRoZSBvYmplY3QgIGl0c2VsZiBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9yZWZjb3VudGluZy5yc3QgYi9Eb2MvYy1hcGkvcmVmY291bnRpbmcucnN0CmluZGV4IGMwZjRjYTEuLjRmNTEyZWMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9yZWZjb3VudGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL3JlZmNvdW50aW5nLnJzdApAQCAtMTEsMjIgKzExLDIyIEBACiBvYmplY3RzLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfSU5DUkVGKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfSU5DUkVGKFB5T2JqZWN0ICpvKQogCiAgICBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3Igb2JqZWN0ICpvKi4gIFRoZSBvYmplY3QgbXVzdCBub3QgYmUgKk5VTEwqOyBpZgotICAgeW91IGFyZW4ndCBzdXJlIHRoYXQgaXQgaXNuJ3QgKk5VTEwqLCB1c2UgOmNmdW5jOmBQeV9YSU5DUkVGYC4KKyAgIHlvdSBhcmVuJ3Qgc3VyZSB0aGF0IGl0IGlzbid0ICpOVUxMKiwgdXNlIDpjOmZ1bmM6YFB5X1hJTkNSRUZgLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfWElOQ1JFRihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1hJTkNSRUYoUHlPYmplY3QgKm8pCiAKICAgIEluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBvYmplY3QgKm8qLiAgVGhlIG9iamVjdCBtYXkgYmUgKk5VTEwqLCBpbgogICAgd2hpY2ggY2FzZSB0aGUgbWFjcm8gaGFzIG5vIGVmZmVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5X0RFQ1JFRihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0RFQ1JFRihQeU9iamVjdCAqbykKIAogICAgRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIG9iamVjdCAqbyouICBUaGUgb2JqZWN0IG11c3Qgbm90IGJlICpOVUxMKjsgaWYKLSAgIHlvdSBhcmVuJ3Qgc3VyZSB0aGF0IGl0IGlzbid0ICpOVUxMKiwgdXNlIDpjZnVuYzpgUHlfWERFQ1JFRmAuICBJZiB0aGUgcmVmZXJlbmNlCisgICB5b3UgYXJlbid0IHN1cmUgdGhhdCBpdCBpc24ndCAqTlVMTCosIHVzZSA6YzpmdW5jOmBQeV9YREVDUkVGYC4gIElmIHRoZSByZWZlcmVuY2UKICAgIGNvdW50IHJlYWNoZXMgemVybywgdGhlIG9iamVjdCdzIHR5cGUncyBkZWFsbG9jYXRpb24gZnVuY3Rpb24gKHdoaWNoIG11c3Qgbm90IGJlCiAgICAqTlVMTCopIGlzIGludm9rZWQuCiAKQEAgLTM2LDI1ICszNiwyNSBAQAogICAgICAgd2hlbiBhIGNsYXNzIGluc3RhbmNlIHdpdGggYSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kIGlzIGRlYWxsb2NhdGVkKS4gIFdoaWxlCiAgICAgICBleGNlcHRpb25zIGluIHN1Y2ggY29kZSBhcmUgbm90IHByb3BhZ2F0ZWQsIHRoZSBleGVjdXRlZCBjb2RlIGhhcyBmcmVlIGFjY2VzcyB0bwogICAgICAgYWxsIFB5dGhvbiBnbG9iYWwgdmFyaWFibGVzLiAgVGhpcyBtZWFucyB0aGF0IGFueSBvYmplY3QgdGhhdCBpcyByZWFjaGFibGUgZnJvbQotICAgICAgYSBnbG9iYWwgdmFyaWFibGUgc2hvdWxkIGJlIGluIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgOmNmdW5jOmBQeV9ERUNSRUZgIGlzCisgICAgICBhIGdsb2JhbCB2YXJpYWJsZSBzaG91bGQgYmUgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSA6YzpmdW5jOmBQeV9ERUNSRUZgIGlzCiAgICAgICBpbnZva2VkLiAgRm9yIGV4YW1wbGUsIGNvZGUgdG8gZGVsZXRlIGFuIG9iamVjdCBmcm9tIGEgbGlzdCBzaG91bGQgY29weSBhCiAgICAgICByZWZlcmVuY2UgdG8gdGhlIGRlbGV0ZWQgb2JqZWN0IGluIGEgdGVtcG9yYXJ5IHZhcmlhYmxlLCB1cGRhdGUgdGhlIGxpc3QgZGF0YQotICAgICAgc3RydWN0dXJlLCBhbmQgdGhlbiBjYWxsIDpjZnVuYzpgUHlfREVDUkVGYCBmb3IgdGhlIHRlbXBvcmFyeSB2YXJpYWJsZS4KKyAgICAgIHN0cnVjdHVyZSwgYW5kIHRoZW4gY2FsbCA6YzpmdW5jOmBQeV9ERUNSRUZgIGZvciB0aGUgdGVtcG9yYXJ5IHZhcmlhYmxlLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfWERFQ1JFRihQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1hERUNSRUYoUHlPYmplY3QgKm8pCiAKICAgIERlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBvYmplY3QgKm8qLiAgVGhlIG9iamVjdCBtYXkgYmUgKk5VTEwqLCBpbgogICAgd2hpY2ggY2FzZSB0aGUgbWFjcm8gaGFzIG5vIGVmZmVjdDsgb3RoZXJ3aXNlIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgZm9yCi0gICA6Y2Z1bmM6YFB5X0RFQ1JFRmAsIGFuZCB0aGUgc2FtZSB3YXJuaW5nIGFwcGxpZXMuCisgICA6YzpmdW5jOmBQeV9ERUNSRUZgLCBhbmQgdGhlIHNhbWUgd2FybmluZyBhcHBsaWVzLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlfQ0xFQVIoUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9DTEVBUihQeU9iamVjdCAqbykKIAogICAgRGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgZm9yIG9iamVjdCAqbyouICBUaGUgb2JqZWN0IG1heSBiZSAqTlVMTCosIGluCiAgICB3aGljaCBjYXNlIHRoZSBtYWNybyBoYXMgbm8gZWZmZWN0OyBvdGhlcndpc2UgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBmb3IKLSAgIDpjZnVuYzpgUHlfREVDUkVGYCwgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50IGlzIGFsc28gc2V0IHRvICpOVUxMKi4gIFRoZSB3YXJuaW5nCi0gICBmb3IgOmNmdW5jOmBQeV9ERUNSRUZgIGRvZXMgbm90IGFwcGx5IHdpdGggcmVzcGVjdCB0byB0aGUgb2JqZWN0IHBhc3NlZCBiZWNhdXNlCisgICA6YzpmdW5jOmBQeV9ERUNSRUZgLCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnQgaXMgYWxzbyBzZXQgdG8gKk5VTEwqLiAgVGhlIHdhcm5pbmcKKyAgIGZvciA6YzpmdW5jOmBQeV9ERUNSRUZgIGRvZXMgbm90IGFwcGx5IHdpdGggcmVzcGVjdCB0byB0aGUgb2JqZWN0IHBhc3NlZCBiZWNhdXNlCiAgICB0aGUgbWFjcm8gY2FyZWZ1bGx5IHVzZXMgYSB0ZW1wb3JhcnkgdmFyaWFibGUgYW5kIHNldHMgdGhlIGFyZ3VtZW50IHRvICpOVUxMKgogICAgYmVmb3JlIGRlY3JlbWVudGluZyBpdHMgcmVmZXJlbmNlIGNvdW50LgogCkBAIC02NCwxMCArNjQsMTAgQEAKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGZvciBydW50aW1lIGR5bmFtaWMgZW1iZWRkaW5nIG9mIFB5dGhvbjoKIGBgUHlfSW5jUmVmKFB5T2JqZWN0ICpvKWBgLCBgYFB5X0RlY1JlZihQeU9iamVjdCAqbylgYC4gVGhleSBhcmUKLXNpbXBseSBleHBvcnRlZCBmdW5jdGlvbiB2ZXJzaW9ucyBvZiA6Y2Z1bmM6YFB5X1hJTkNSRUZgIGFuZAotOmNmdW5jOmBQeV9YREVDUkVGYCwgcmVzcGVjdGl2ZWx5Lgorc2ltcGx5IGV4cG9ydGVkIGZ1bmN0aW9uIHZlcnNpb25zIG9mIDpjOmZ1bmM6YFB5X1hJTkNSRUZgIGFuZAorOmM6ZnVuYzpgUHlfWERFQ1JFRmAsIHJlc3BlY3RpdmVseS4KIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgb3IgbWFjcm9zIGFyZSBvbmx5IGZvciB1c2Ugd2l0aGluIHRoZSBpbnRlcnByZXRlciBjb3JlOgotOmNmdW5jOmBfUHlfRGVhbGxvY2AsIDpjZnVuYzpgX1B5X0ZvcmdldFJlZmVyZW5jZWAsIDpjZnVuYzpgX1B5X05ld1JlZmVyZW5jZWAsCi1hcyB3ZWxsIGFzIHRoZSBnbG9iYWwgdmFyaWFibGUgOmNkYXRhOmBfUHlfUmVmVG90YWxgLgorOmM6ZnVuYzpgX1B5X0RlYWxsb2NgLCA6YzpmdW5jOmBfUHlfRm9yZ2V0UmVmZXJlbmNlYCwgOmM6ZnVuYzpgX1B5X05ld1JlZmVyZW5jZWAsCithcyB3ZWxsIGFzIHRoZSBnbG9iYWwgdmFyaWFibGUgOmM6ZGF0YTpgX1B5X1JlZlRvdGFsYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3JlZmxlY3Rpb24ucnN0IGIvRG9jL2MtYXBpL3JlZmxlY3Rpb24ucnN0CmluZGV4IDRmNDZjN2YuLjk2ODkzNjUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9yZWZsZWN0aW9uLnJzdAorKysgYi9Eb2MvYy1hcGkvcmVmbGVjdGlvbi5yc3QKQEAgLTUsNDAgKzUsNDUgQEAKIFJlZmxlY3Rpb24KID09PT09PT09PT0KIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRCdWlsdGlucygpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRCdWlsdGlucygpCiAKICAgIFJldHVybiBhIGRpY3Rpb25hcnkgb2YgdGhlIGJ1aWx0aW5zIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBmcmFtZSwKICAgIG9yIHRoZSBpbnRlcnByZXRlciBvZiB0aGUgdGhyZWFkIHN0YXRlIGlmIG5vIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRMb2NhbHMoKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfR2V0TG9jYWxzKCkKIAogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBvZiB0aGUgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBmcmFtZSwKICAgIG9yICpOVUxMKiBpZiBubyBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfR2V0R2xvYmFscygpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9HZXRHbG9iYWxzKCkKIAogICAgUmV0dXJuIGEgZGljdGlvbmFyeSBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZnJhbWUsCiAgICBvciAqTlVMTCogaWYgbm8gZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeUZyYW1lT2JqZWN0KiBQeUV2YWxfR2V0RnJhbWUoKQorLi4gYzpmdW5jdGlvbjo6IFB5RnJhbWVPYmplY3QqIFB5RXZhbF9HZXRGcmFtZSgpCiAKICAgIFJldHVybiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUncyBmcmFtZSwgd2hpY2ggaXMgKk5VTEwqIGlmIG5vIGZyYW1lIGlzCiAgICBjdXJyZW50bHkgZXhlY3V0aW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5RXZhbF9HZXRGdW5jTmFtZShQeU9iamVjdCAqZnVuYykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKFB5RnJhbWVPYmplY3QgKmZyYW1lKQorCisgICBSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIHRoYXQgKmZyYW1lKiBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLgorCisKKy4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeUV2YWxfR2V0RnVuY05hbWUoUHlPYmplY3QgKmZ1bmMpCiAKICAgIFJldHVybiB0aGUgbmFtZSBvZiAqZnVuYyogaWYgaXQgaXMgYSBmdW5jdGlvbiwgY2xhc3Mgb3IgaW5zdGFuY2Ugb2JqZWN0LCBlbHNlIHRoZQogICAgbmFtZSBvZiAqZnVuYypccyB0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5RXZhbF9HZXRGdW5jRGVzYyhQeU9iamVjdCAqZnVuYykKKy4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeUV2YWxfR2V0RnVuY0Rlc2MoUHlPYmplY3QgKmZ1bmMpCiAKICAgIFJldHVybiBhIGRlc2NyaXB0aW9uIHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mICpmdW5jKi4KICAgIFJldHVybiB2YWx1ZXMgaW5jbHVkZSAiKCkiIGZvciBmdW5jdGlvbnMgYW5kIG1ldGhvZHMsICIgY29uc3RydWN0b3IiLAogICAgIiBpbnN0YW5jZSIsIGFuZCAiIG9iamVjdCIuICBDb25jYXRlbmF0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mCi0gICA6Y2Z1bmM6YFB5RXZhbF9HZXRGdW5jTmFtZWAsIHRoZSByZXN1bHQgd2lsbCBiZSBhIGRlc2NyaXB0aW9uIG9mCisgICA6YzpmdW5jOmBQeUV2YWxfR2V0RnVuY05hbWVgLCB0aGUgcmVzdWx0IHdpbGwgYmUgYSBkZXNjcmlwdGlvbiBvZgogICAgKmZ1bmMqLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdCBiL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QKaW5kZXggZDg2MzE3Ny4uNTk5MDc0YyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdAorKysgYi9Eb2MvYy1hcGkvc2VxdWVuY2UucnN0CkBAIC02LDEzICs2LDEzIEBACiA9PT09PT09PT09PT09PT09PQogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0NoZWNrKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0NoZWNrKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gYGAxYGAgaWYgdGhlIG9iamVjdCBwcm92aWRlcyBzZXF1ZW5jZSBwcm90b2NvbCwgYW5kIGBgMGBgIG90aGVyd2lzZS4KICAgIFRoaXMgZnVuY3Rpb24gYWx3YXlzIHN1Y2NlZWRzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXF1ZW5jZV9TaXplKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXF1ZW5jZV9TaXplKFB5T2JqZWN0ICpvKQogICAgICAgICAgICAgICAgUHlfc3NpemVfdCBQeVNlcXVlbmNlX0xlbmd0aChQeU9iamVjdCAqbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBsZW4KQEAgLTIyLDk2ICsyMiw5NiBAQAogICAgUHl0aG9uIGV4cHJlc3Npb24gYGBsZW4obylgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9Db25jYXQoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxdWVuY2VfQ29uY2F0KFB5T2JqZWN0ICpvMSwgUHlPYmplY3QgKm8yKQogCiAgICBSZXR1cm4gdGhlIGNvbmNhdGVuYXRpb24gb2YgKm8xKiBhbmQgKm8yKiBvbiBzdWNjZXNzLCBhbmQgKk5VTEwqIG9uIGZhaWx1cmUuCiAgICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG8xICsgbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9SZXBlYXQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgY291bnQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxdWVuY2VfUmVwZWF0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGNvdW50KQogCiAgICBSZXR1cm4gdGhlIHJlc3VsdCBvZiByZXBlYXRpbmcgc2VxdWVuY2Ugb2JqZWN0ICpvKiAqY291bnQqIHRpbWVzLCBvciAqTlVMTCogb24KICAgIGZhaWx1cmUuICBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG8gKiBjb3VudGBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0luUGxhY2VDb25jYXQoUHlPYmplY3QgKm8xLCBQeU9iamVjdCAqbzIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdChQeU9iamVjdCAqbzEsIFB5T2JqZWN0ICpvMikKIAogICAgUmV0dXJuIHRoZSBjb25jYXRlbmF0aW9uIG9mICpvMSogYW5kICpvMiogb24gc3VjY2VzcywgYW5kICpOVUxMKiBvbiBmYWlsdXJlLgogICAgVGhlIG9wZXJhdGlvbiBpcyBkb25lICppbi1wbGFjZSogd2hlbiAqbzEqIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudAogICAgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbzEgKz0gbzJgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGNvdW50KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgY291bnQpCiAKICAgIFJldHVybiB0aGUgcmVzdWx0IG9mIHJlcGVhdGluZyBzZXF1ZW5jZSBvYmplY3QgKm8qICpjb3VudCogdGltZXMsIG9yICpOVUxMKiBvbgogICAgZmFpbHVyZS4gIFRoZSBvcGVyYXRpb24gaXMgZG9uZSAqaW4tcGxhY2UqIHdoZW4gKm8qIHN1cHBvcnRzIGl0LiAgVGhpcyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgbyAqPSBjb3VudGBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0dldEl0ZW0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9HZXRJdGVtKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpCiAKICAgIFJldHVybiB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YKICAgIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9baV1gYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9HZXRTbGljZShQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpMSwgUHlfc3NpemVfdCBpMikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9HZXRTbGljZShQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpMSwgUHlfc3NpemVfdCBpMikKIAogICAgUmV0dXJuIHRoZSBzbGljZSBvZiBzZXF1ZW5jZSBvYmplY3QgKm8qIGJldHdlZW4gKmkxKiBhbmQgKmkyKiwgb3IgKk5VTEwqIG9uCiAgICBmYWlsdXJlLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG9baTE6aTJdYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U2VxdWVuY2VfU2V0SXRlbShQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqdikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXF1ZW5jZV9TZXRJdGVtKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0ICp2KQogCiAgICBBc3NpZ24gb2JqZWN0ICp2KiB0byB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKi4gIFJldHVybnMgYGAtMWBgIG9uIGZhaWx1cmUuICBUaGlzCiAgICBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG9baV0gPSB2YGAuICBUaGlzIGZ1bmN0aW9uICpkb2VzCiAgICBub3QqIHN0ZWFsIGEgcmVmZXJlbmNlIHRvICp2Ki4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXF1ZW5jZV9EZWxJdGVtKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5U2VxdWVuY2VfRGVsSXRlbShQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpKQogCiAgICBEZWxldGUgdGhlICppKlwgdGggZWxlbWVudCBvZiBvYmplY3QgKm8qLiAgUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlCiAgICBlcXVpdmFsZW50IG9mIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9baV1gYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXF1ZW5jZV9TZXRTbGljZShQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpMSwgUHlfc3NpemVfdCBpMiwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5U2VxdWVuY2VfU2V0U2xpY2UoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaTEsIFB5X3NzaXplX3QgaTIsIFB5T2JqZWN0ICp2KQogCiAgICBBc3NpZ24gdGhlIHNlcXVlbmNlIG9iamVjdCAqdiogdG8gdGhlIHNsaWNlIGluIHNlcXVlbmNlIG9iamVjdCAqbyogZnJvbSAqaTEqIHRvCiAgICAqaTIqLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYG9baTE6aTJdID0gdmBgLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0RlbFNsaWNlKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkxLCBQeV9zc2l6ZV90IGkyKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0RlbFNsaWNlKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkxLCBQeV9zc2l6ZV90IGkyKQogCiAgICBEZWxldGUgdGhlIHNsaWNlIGluIHNlcXVlbmNlIG9iamVjdCAqbyogZnJvbSAqaTEqIHRvICppMiouICBSZXR1cm5zIGBgLTFgYCBvbgogICAgZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBkZWwgb1tpMTppMl1gYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5U2VxdWVuY2VfQ291bnQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2YWx1ZSkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5U2VxdWVuY2VfQ291bnQoUHlPYmplY3QgKm8sIFB5T2JqZWN0ICp2YWx1ZSkKIAogICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgKnZhbHVlKiBpbiAqbyosIHRoYXQgaXMsIHJldHVybiB0aGUgbnVtYmVyCiAgICBvZiBrZXlzIGZvciB3aGljaCBgYG9ba2V5XSA9PSB2YWx1ZWBgLiAgT24gZmFpbHVyZSwgcmV0dXJuIGBgLTFgYC4gIFRoaXMgaXMKICAgIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgby5jb3VudCh2YWx1ZSlgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXF1ZW5jZV9Db250YWlucyhQeU9iamVjdCAqbywgUHlPYmplY3QgKnZhbHVlKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNlcXVlbmNlX0NvbnRhaW5zKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdmFsdWUpCiAKICAgIERldGVybWluZSBpZiAqbyogY29udGFpbnMgKnZhbHVlKi4gIElmIGFuIGl0ZW0gaW4gKm8qIGlzIGVxdWFsIHRvICp2YWx1ZSosCiAgICByZXR1cm4gYGAxYGAsIG90aGVyd2lzZSByZXR1cm4gYGAwYGAuIE9uIGVycm9yLCByZXR1cm4gYGAtMWBgLiAgVGhpcyBpcwogICAgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGB2YWx1ZSBpbiBvYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeVNlcXVlbmNlX0luZGV4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdmFsdWUpCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeVNlcXVlbmNlX0luZGV4KFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqdmFsdWUpCiAKICAgIFJldHVybiB0aGUgZmlyc3QgaW5kZXggKmkqIGZvciB3aGljaCBgYG9baV0gPT0gdmFsdWVgYC4gIE9uIGVycm9yLCByZXR1cm4KICAgIGBgLTFgYC4gICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYG8uaW5kZXgodmFsdWUpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxdWVuY2VfTGlzdChQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9MaXN0KFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gYSBsaXN0IG9iamVjdCB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBhcmJpdHJhcnkgc2VxdWVuY2UgKm8qLiAgVGhlCiAgICByZXR1cm5lZCBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbmV3LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX1R1cGxlKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX1R1cGxlKFB5T2JqZWN0ICpvKQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IHR1cGxlCiAKQEAgLTEyMSw0MiArMTIxLDQyIEBACiAgICBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYHR1cGxlKG8pYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5U2VxdWVuY2VfRmFzdChQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9GYXN0KFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICptKQogCiAgICBSZXR1cm5zIHRoZSBzZXF1ZW5jZSAqbyogYXMgYSB0dXBsZSwgdW5sZXNzIGl0IGlzIGFscmVhZHkgYSB0dXBsZSBvciBsaXN0LCBpbgotICAgd2hpY2ggY2FzZSAqbyogaXMgcmV0dXJuZWQuICBVc2UgOmNmdW5jOmBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU1gIHRvIGFjY2VzcyB0aGUKKyAgIHdoaWNoIGNhc2UgKm8qIGlzIHJldHVybmVkLiAgVXNlIDpjOmZ1bmM6YFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTWAgdG8gYWNjZXNzIHRoZQogICAgbWVtYmVycyBvZiB0aGUgcmVzdWx0LiAgUmV0dXJucyAqTlVMTCogb24gZmFpbHVyZS4gIElmIHRoZSBvYmplY3QgaXMgbm90IGEKICAgIHNlcXVlbmNlLCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYCB3aXRoICptKiBhcyB0aGUgbWVzc2FnZSB0ZXh0LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpCiAKICAgIFJldHVybiB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKiwgYXNzdW1pbmcgdGhhdCAqbyogd2FzIHJldHVybmVkIGJ5Ci0gICA6Y2Z1bmM6YFB5U2VxdWVuY2VfRmFzdGAsICpvKiBpcyBub3QgKk5VTEwqLCBhbmQgdGhhdCAqaSogaXMgd2l0aGluIGJvdW5kcy4KKyAgIDpjOmZ1bmM6YFB5U2VxdWVuY2VfRmFzdGAsICpvKiBpcyBub3QgKk5VTEwqLCBhbmQgdGhhdCAqaSogaXMgd2l0aGluIGJvdW5kcy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCoqIFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCoqIFB5U2VxdWVuY2VfRmFzdF9JVEVNUyhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRoZSB1bmRlcmx5aW5nIGFycmF5IG9mIFB5T2JqZWN0IHBvaW50ZXJzLiAgQXNzdW1lcyB0aGF0ICpvKiB3YXMgcmV0dXJuZWQKLSAgIGJ5IDpjZnVuYzpgUHlTZXF1ZW5jZV9GYXN0YCBhbmQgKm8qIGlzIG5vdCAqTlVMTCouCisgICBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX0Zhc3RgIGFuZCAqbyogaXMgbm90ICpOVUxMKi4KIAogICAgTm90ZSwgaWYgYSBsaXN0IGdldHMgcmVzaXplZCwgdGhlIHJlYWxsb2NhdGlvbiBtYXkgcmVsb2NhdGUgdGhlIGl0ZW1zIGFycmF5LgogICAgU28sIG9ubHkgdXNlIHRoZSB1bmRlcmx5aW5nIGFycmF5IHBvaW50ZXIgaW4gY29udGV4dHMgd2hlcmUgdGhlIHNlcXVlbmNlCiAgICBjYW5ub3QgY2hhbmdlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0lURU0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlTZXF1ZW5jZV9JVEVNKFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGkpCiAKICAgIFJldHVybiB0aGUgKmkqXCB0aCBlbGVtZW50IG9mICpvKiBvciAqTlVMTCogb24gZmFpbHVyZS4gTWFjcm8gZm9ybSBvZgotICAgOmNmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gIGJ1dCB3aXRob3V0IGNoZWNraW5nIHRoYXQKLSAgIDpjZnVuYzpgUHlTZXF1ZW5jZV9DaGVjayhvKWAgaXMgdHJ1ZSBhbmQgd2l0aG91dCBhZGp1c3RtZW50IGZvciBuZWdhdGl2ZQorICAgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCBidXQgd2l0aG91dCBjaGVja2luZyB0aGF0CisgICA6YzpmdW5jOmBQeVNlcXVlbmNlX0NoZWNrKG8pYCBpcyB0cnVlIGFuZCB3aXRob3V0IGFkanVzdG1lbnQgZm9yIG5lZ2F0aXZlCiAgICBpbmRpY2VzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgKm8qLCBhc3N1bWluZyB0aGF0ICpvKiB3YXMgcmV0dXJuZWQgYnkKLSAgIDpjZnVuYzpgUHlTZXF1ZW5jZV9GYXN0YCBhbmQgdGhhdCAqbyogaXMgbm90ICpOVUxMKi4gIFRoZSBzaXplIGNhbiBhbHNvIGJlCi0gICBnb3R0ZW4gYnkgY2FsbGluZyA6Y2Z1bmM6YFB5U2VxdWVuY2VfU2l6ZWAgb24gKm8qLCBidXQKLSAgIDpjZnVuYzpgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFYCBpcyBmYXN0ZXIgYmVjYXVzZSBpdCBjYW4gYXNzdW1lICpvKiBpcyBhIGxpc3QKKyAgIDpjOmZ1bmM6YFB5U2VxdWVuY2VfRmFzdGAgYW5kIHRoYXQgKm8qIGlzIG5vdCAqTlVMTCouICBUaGUgc2l6ZSBjYW4gYWxzbyBiZQorICAgZ290dGVuIGJ5IGNhbGxpbmcgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9TaXplYCBvbiAqbyosIGJ1dAorICAgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFYCBpcyBmYXN0ZXIgYmVjYXVzZSBpdCBjYW4gYXNzdW1lICpvKiBpcyBhIGxpc3QKICAgIG9yIHR1cGxlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3NldC5yc3QgYi9Eb2MvYy1hcGkvc2V0LnJzdAppbmRleCA0MzQ4MTA4Li42NmI0N2M0IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc2V0LnJzdAorKysgYi9Eb2MvYy1hcGkvc2V0LnJzdApAQCAtMTQsMjAgKzE0LDIwIEBACiAKIFRoaXMgc2VjdGlvbiBkZXRhaWxzIHRoZSBwdWJsaWMgQVBJIGZvciA6Y2xhc3M6YHNldGAgYW5kIDpjbGFzczpgZnJvemVuc2V0YAogb2JqZWN0cy4gIEFueSBmdW5jdGlvbmFsaXR5IG5vdCBsaXN0ZWQgYmVsb3cgaXMgYmVzdCBhY2Nlc3NlZCB1c2luZyB0aGUgZWl0aGVyCi10aGUgYWJzdHJhY3Qgb2JqZWN0IHByb3RvY29sIChpbmNsdWRpbmcgOmNmdW5jOmBQeU9iamVjdF9DYWxsTWV0aG9kYCwKLTpjZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVCb29sYCwgOmNmdW5jOmBQeU9iamVjdF9IYXNoYCwKLTpjZnVuYzpgUHlPYmplY3RfUmVwcmAsIDpjZnVuYzpgUHlPYmplY3RfSXNUcnVlYCwgOmNmdW5jOmBQeU9iamVjdF9QcmludGAsIGFuZAotOmNmdW5jOmBQeU9iamVjdF9HZXRJdGVyYCkgb3IgdGhlIGFic3RyYWN0IG51bWJlciBwcm90b2NvbCAoaW5jbHVkaW5nCi06Y2Z1bmM6YFB5TnVtYmVyX0FuZGAsIDpjZnVuYzpgUHlOdW1iZXJfU3VidHJhY3RgLCA6Y2Z1bmM6YFB5TnVtYmVyX09yYCwKLTpjZnVuYzpgUHlOdW1iZXJfWG9yYCwgOmNmdW5jOmBQeU51bWJlcl9JblBsYWNlQW5kYCwKLTpjZnVuYzpgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0YCwgOmNmdW5jOmBQeU51bWJlcl9JblBsYWNlT3JgLCBhbmQKLTpjZnVuYzpgUHlOdW1iZXJfSW5QbGFjZVhvcmApLgordGhlIGFic3RyYWN0IG9iamVjdCBwcm90b2NvbCAoaW5jbHVkaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxNZXRob2RgLAorOmM6ZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVCb29sYCwgOmM6ZnVuYzpgUHlPYmplY3RfSGFzaGAsCis6YzpmdW5jOmBQeU9iamVjdF9SZXByYCwgOmM6ZnVuYzpgUHlPYmplY3RfSXNUcnVlYCwgOmM6ZnVuYzpgUHlPYmplY3RfUHJpbnRgLCBhbmQKKzpjOmZ1bmM6YFB5T2JqZWN0X0dldEl0ZXJgKSBvciB0aGUgYWJzdHJhY3QgbnVtYmVyIHByb3RvY29sIChpbmNsdWRpbmcKKzpjOmZ1bmM6YFB5TnVtYmVyX0FuZGAsIDpjOmZ1bmM6YFB5TnVtYmVyX1N1YnRyYWN0YCwgOmM6ZnVuYzpgUHlOdW1iZXJfT3JgLAorOmM6ZnVuYzpgUHlOdW1iZXJfWG9yYCwgOmM6ZnVuYzpgUHlOdW1iZXJfSW5QbGFjZUFuZGAsCis6YzpmdW5jOmBQeU51bWJlcl9JblBsYWNlU3VidHJhY3RgLCA6YzpmdW5jOmBQeU51bWJlcl9JblBsYWNlT3JgLCBhbmQKKzpjOmZ1bmM6YFB5TnVtYmVyX0luUGxhY2VYb3JgKS4KIAogCi0uLiBjdHlwZTo6IFB5U2V0T2JqZWN0CisuLiBjOnR5cGU6OiBQeVNldE9iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgaXMgdXNlZCB0byBob2xkIHRoZSBpbnRlcm5hbCBkYXRhIGZvciBib3RoCi0gICA6Y2xhc3M6YHNldGAgYW5kIDpjbGFzczpgZnJvemVuc2V0YCBvYmplY3RzLiAgSXQgaXMgbGlrZSBhIDpjdHlwZTpgUHlEaWN0T2JqZWN0YAorICAgVGhpcyBzdWJ0eXBlIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCBpcyB1c2VkIHRvIGhvbGQgdGhlIGludGVybmFsIGRhdGEgZm9yIGJvdGgKKyAgIDpjbGFzczpgc2V0YCBhbmQgOmNsYXNzOmBmcm96ZW5zZXRgIG9iamVjdHMuICBJdCBpcyBsaWtlIGEgOmM6dHlwZTpgUHlEaWN0T2JqZWN0YAogICAgaW4gdGhhdCBpdCBpcyBhIGZpeGVkIHNpemUgZm9yIHNtYWxsIHNldHMgKG11Y2ggbGlrZSB0dXBsZSBzdG9yYWdlKSBhbmQgd2lsbAogICAgcG9pbnQgdG8gYSBzZXBhcmF0ZSwgdmFyaWFibGUgc2l6ZWQgYmxvY2sgb2YgbWVtb3J5IGZvciBtZWRpdW0gYW5kIGxhcmdlIHNpemVkCiAgICBzZXRzIChtdWNoIGxpa2UgbGlzdCBzdG9yYWdlKS4gTm9uZSBvZiB0aGUgZmllbGRzIG9mIHRoaXMgc3RydWN0dXJlIHNob3VsZCBiZQpAQCAtMzUsNDkgKzM1LDQ5IEBACiAgICB0aGUgZG9jdW1lbnRlZCBBUEkgcmF0aGVyIHRoYW4gYnkgbWFuaXB1bGF0aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIHN0cnVjdHVyZS4KIAogCi0uLiBjdmFyOjogUHlUeXBlT2JqZWN0IFB5U2V0X1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5U2V0X1R5cGUKIAotICAgVGhpcyBpcyBhbiBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50aW5nIHRoZSBQeXRob24KKyAgIFRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCByZXByZXNlbnRpbmcgdGhlIFB5dGhvbgogICAgOmNsYXNzOmBzZXRgIHR5cGUuCiAKIAotLi4gY3Zhcjo6IFB5VHlwZU9iamVjdCBQeUZyb3plblNldF9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeUZyb3plblNldF9UeXBlCiAKLSAgIFRoaXMgaXMgYW4gaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudGluZyB0aGUgUHl0aG9uCisgICBUaGlzIGlzIGFuIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50aW5nIHRoZSBQeXRob24KICAgIDpjbGFzczpgZnJvemVuc2V0YCB0eXBlLgogCiBUaGUgZm9sbG93aW5nIHR5cGUgY2hlY2sgbWFjcm9zIHdvcmsgb24gcG9pbnRlcnMgdG8gYW55IFB5dGhvbiBvYmplY3QuIExpa2V3aXNlLAogdGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB3b3JrIHdpdGggYW55IGl0ZXJhYmxlIFB5dGhvbiBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U2V0X0NoZWNrKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNldF9DaGVjayhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgOmNsYXNzOmBzZXRgIG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBhIHN1YnR5cGUuCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUZyb3plblNldF9DaGVjayhQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlGcm96ZW5TZXRfQ2hlY2soUHlPYmplY3QgKnApCiAKICAgIFJldHVybiB0cnVlIGlmICpwKiBpcyBhIDpjbGFzczpgZnJvemVuc2V0YCBvYmplY3Qgb3IgYW4gaW5zdGFuY2Ugb2YgYQogICAgc3VidHlwZS4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5QW55U2V0X0NoZWNrKFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUFueVNldF9DaGVjayhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgOmNsYXNzOmBzZXRgIG9iamVjdCwgYSA6Y2xhc3M6YGZyb3plbnNldGAgb2JqZWN0LCBvciBhbgogICAgaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUFueVNldF9DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeUFueVNldF9DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqcCogaXMgYSA6Y2xhc3M6YHNldGAgb2JqZWN0IG9yIGEgOmNsYXNzOmBmcm96ZW5zZXRgIG9iamVjdCBidXQKICAgIG5vdCBhbiBpbnN0YW5jZSBvZiBhIHN1YnR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5RnJvemVuU2V0X0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RnJvemVuU2V0X0NoZWNrRXhhY3QoUHlPYmplY3QgKnApCiAKICAgIFJldHVybiB0cnVlIGlmICpwKiBpcyBhIDpjbGFzczpgZnJvemVuc2V0YCBvYmplY3QgYnV0IG5vdCBhbiBpbnN0YW5jZSBvZiBhCiAgICBzdWJ0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNldF9OZXcoUHlPYmplY3QgKml0ZXJhYmxlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNldF9OZXcoUHlPYmplY3QgKml0ZXJhYmxlKQogCiAgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBzZXRgIGNvbnRhaW5pbmcgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgKml0ZXJhYmxlKi4gIFRoZQogICAgKml0ZXJhYmxlKiBtYXkgYmUgKk5VTEwqIHRvIGNyZWF0ZSBhIG5ldyBlbXB0eSBzZXQuICBSZXR1cm4gdGhlIG5ldyBzZXQgb24KQEAgLTg2LDcgKzg2LDcgQEAKICAgIChgYGM9c2V0KHMpYGApLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZyb3plblNldF9OZXcoUHlPYmplY3QgKml0ZXJhYmxlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUZyb3plblNldF9OZXcoUHlPYmplY3QgKml0ZXJhYmxlKQogCiAgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBmcm96ZW5zZXRgIGNvbnRhaW5pbmcgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgKml0ZXJhYmxlKi4KICAgIFRoZSAqaXRlcmFibGUqIG1heSBiZSAqTlVMTCogdG8gY3JlYXRlIGEgbmV3IGVtcHR5IGZyb3plbnNldC4gIFJldHVybiB0aGUgbmV3CkBAIC05OCw3ICs5OCw3IEBACiBvciA6Y2xhc3M6YGZyb3plbnNldGAgb3IgaW5zdGFuY2VzIG9mIHRoZWlyIHN1YnR5cGVzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXRfU2l6ZShQeU9iamVjdCAqYW55c2V0KQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlTZXRfU2l6ZShQeU9iamVjdCAqYW55c2V0KQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IGxlbgogCkBAIC0xMDcsMTIgKzEwNywxMiBAQAogICAgOmNsYXNzOmBzZXRgLCA6Y2xhc3M6YGZyb3plbnNldGAsIG9yIGFuIGluc3RhbmNlIG9mIGEgc3VidHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5U2V0X0dFVF9TSVpFKFB5T2JqZWN0ICphbnlzZXQpCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeVNldF9HRVRfU0laRShQeU9iamVjdCAqYW55c2V0KQogCi0gICBNYWNybyBmb3JtIG9mIDpjZnVuYzpgUHlTZXRfU2l6ZWAgd2l0aG91dCBlcnJvciBjaGVja2luZy4KKyAgIE1hY3JvIGZvcm0gb2YgOmM6ZnVuYzpgUHlTZXRfU2l6ZWAgd2l0aG91dCBlcnJvciBjaGVja2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXRfQ29udGFpbnMoUHlPYmplY3QgKmFueXNldCwgUHlPYmplY3QgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXRfQ29udGFpbnMoUHlPYmplY3QgKmFueXNldCwgUHlPYmplY3QgKmtleSkKIAogICAgUmV0dXJuIDEgaWYgZm91bmQsIDAgaWYgbm90IGZvdW5kLCBhbmQgLTEgaWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQuICBVbmxpa2UKICAgIHRoZSBQeXRob24gOm1ldGg6YF9fY29udGFpbnNfX2AgbWV0aG9kLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkKQEAgLTEyMSwxMCArMTIxLDEwIEBACiAgICA6Y2xhc3M6YHNldGAsIDpjbGFzczpgZnJvemVuc2V0YCwgb3IgYW4gaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVNldF9BZGQoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXRfQWRkKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICprZXkpCiAKICAgIEFkZCAqa2V5KiB0byBhIDpjbGFzczpgc2V0YCBpbnN0YW5jZS4gIEFsc28gd29ya3Mgd2l0aCA6Y2xhc3M6YGZyb3plbnNldGAKLSAgIGluc3RhbmNlcyAobGlrZSA6Y2Z1bmM6YFB5VHVwbGVfU2V0SXRlbWAgaXQgY2FuIGJlIHVzZWQgdG8gZmlsbC1pbiB0aGUgdmFsdWVzCisgICBpbnN0YW5jZXMgKGxpa2UgOmM6ZnVuYzpgUHlUdXBsZV9TZXRJdGVtYCBpdCBjYW4gYmUgdXNlZCB0byBmaWxsLWluIHRoZSB2YWx1ZXMKICAgIG9mIGJyYW5kIG5ldyBmcm96ZW5zZXRzIGJlZm9yZSB0aGV5IGFyZSBleHBvc2VkIHRvIG90aGVyIGNvZGUpLiAgUmV0dXJuIDAgb24KICAgIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gUmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZSAqa2V5KiBpcwogICAgdW5oYXNoYWJsZS4gUmFpc2UgYSA6ZXhjOmBNZW1vcnlFcnJvcmAgaWYgdGhlcmUgaXMgbm8gcm9vbSB0byBncm93LiAgUmFpc2UgYQpAQCAtMTM2LDcgKzEzNiw3IEBACiBzdWJ0eXBlcyBidXQgbm90IGZvciBpbnN0YW5jZXMgb2YgOmNsYXNzOmBmcm96ZW5zZXRgIG9yIGl0cyBzdWJ0eXBlcy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXRfRGlzY2FyZChQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNldF9EaXNjYXJkKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICprZXkpCiAKICAgIFJldHVybiAxIGlmIGZvdW5kIGFuZCByZW1vdmVkLCAwIGlmIG5vdCBmb3VuZCAobm8gYWN0aW9uIHRha2VuKSwgYW5kIC0xIGlmIGFuCiAgICBlcnJvciBpcyBlbmNvdW50ZXJlZC4gIERvZXMgbm90IHJhaXNlIDpleGM6YEtleUVycm9yYCBmb3IgbWlzc2luZyBrZXlzLiAgUmFpc2UgYQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YHNldGAgb3IgaXRzIHN1YnR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5U2V0X1BvcChQeU9iamVjdCAqc2V0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNldF9Qb3AoUHlPYmplY3QgKnNldCkKIAogICAgUmV0dXJuIGEgbmV3IHJlZmVyZW5jZSB0byBhbiBhcmJpdHJhcnkgb2JqZWN0IGluIHRoZSAqc2V0KiwgYW5kIHJlbW92ZXMgdGhlCiAgICBvYmplY3QgZnJvbSB0aGUgKnNldCouICBSZXR1cm4gKk5VTEwqIG9uIGZhaWx1cmUuICBSYWlzZSA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlCkBAIC0xNTQsNiArMTU0LDYgQEAKICAgIDpjbGFzczpgc2V0YCBvciBpdHMgc3VidHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTZXRfQ2xlYXIoUHlPYmplY3QgKnNldCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTZXRfQ2xlYXIoUHlPYmplY3QgKnNldCkKIAogICAgRW1wdHkgYW4gZXhpc3Rpbmcgc2V0IG9mIGFsbCBlbGVtZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zbGljZS5yc3QgYi9Eb2MvYy1hcGkvc2xpY2UucnN0CmluZGV4IGYzM2NkNTMuLmUxNTdkZjIgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9zbGljZS5yc3QKKysrIGIvRG9jL2MtYXBpL3NsaWNlLnJzdApAQCAtNiwxOCArNiwxOCBAQAogLS0tLS0tLS0tLS0tLQogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlTbGljZV9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeVNsaWNlX1R5cGUKIAogICAgVGhlIHR5cGUgb2JqZWN0IGZvciBzbGljZSBvYmplY3RzLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyA6Y2xhc3M6YHNsaWNlYCBpbiB0aGUKICAgIFB5dGhvbiBsYXllci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlTbGljZV9DaGVjayhQeU9iamVjdCAqb2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5U2xpY2VfQ2hlY2soUHlPYmplY3QgKm9iKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIGEgc2xpY2Ugb2JqZWN0OyAqb2IqIG11c3Qgbm90IGJlICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlTbGljZV9OZXcoUHlPYmplY3QgKnN0YXJ0LCBQeU9iamVjdCAqc3RvcCwgUHlPYmplY3QgKnN0ZXApCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5U2xpY2VfTmV3KFB5T2JqZWN0ICpzdGFydCwgUHlPYmplY3QgKnN0b3AsIFB5T2JqZWN0ICpzdGVwKQogCiAgICBSZXR1cm4gYSBuZXcgc2xpY2Ugb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlcy4gIFRoZSAqc3RhcnQqLCAqc3RvcCosIGFuZAogICAgKnN0ZXAqIHBhcmFtZXRlcnMgYXJlIHVzZWQgYXMgdGhlIHZhbHVlcyBvZiB0aGUgc2xpY2Ugb2JqZWN0IGF0dHJpYnV0ZXMgb2YKQEAgLTI2LDcgKzI2LDcgQEAKICAgIHRoZSBuZXcgb2JqZWN0IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U2xpY2VfR2V0SW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzbGljZSwgUHlfc3NpemVfdCBsZW5ndGgsIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCBQeV9zc2l6ZV90ICpzdGVwKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVNsaWNlX0dldEluZGljZXMoUHlPYmplY3QgKnNsaWNlLCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApCiAKICAgIFJldHJpZXZlIHRoZSBzdGFydCwgc3RvcCBhbmQgc3RlcCBpbmRpY2VzIGZyb20gdGhlIHNsaWNlIG9iamVjdCAqc2xpY2UqLAogICAgYXNzdW1pbmcgYSBzZXF1ZW5jZSBvZiBsZW5ndGggKmxlbmd0aCouIFRyZWF0cyBpbmRpY2VzIGdyZWF0ZXIgdGhhbgpAQCAtMzgsMTMgKzM4LDIxIEBACiAKICAgIFlvdSBwcm9iYWJseSBkbyBub3Qgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSBwYXJhbWV0ZXIgdHlwZSBmb3IgdGhlICpzbGljZSogcGFyYW1ldGVyIHdhcyBgYFB5U2xpY2VPYmplY3QqYGAKKyAgICAgIGJlZm9yZS4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U2xpY2VfR2V0SW5kaWNlc0V4KFB5U2xpY2VPYmplY3QgKnNsaWNlLCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXAsIFB5X3NzaXplX3QgKnNsaWNlbGVuZ3RoKQogCi0gICBVc2FibGUgcmVwbGFjZW1lbnQgZm9yIDpjZnVuYzpgUHlTbGljZV9HZXRJbmRpY2VzYC4gIFJldHJpZXZlIHRoZSBzdGFydCwKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTbGljZV9HZXRJbmRpY2VzRXgoUHlPYmplY3QgKnNsaWNlLCBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXAsIFB5X3NzaXplX3QgKnNsaWNlbGVuZ3RoKQorCisgICBVc2FibGUgcmVwbGFjZW1lbnQgZm9yIDpjOmZ1bmM6YFB5U2xpY2VfR2V0SW5kaWNlc2AuICBSZXRyaWV2ZSB0aGUgc3RhcnQsCiAgICBzdG9wLCBhbmQgc3RlcCBpbmRpY2VzIGZyb20gdGhlIHNsaWNlIG9iamVjdCAqc2xpY2UqIGFzc3VtaW5nIGEgc2VxdWVuY2Ugb2YKICAgIGxlbmd0aCAqbGVuZ3RoKiwgYW5kIHN0b3JlIHRoZSBsZW5ndGggb2YgdGhlIHNsaWNlIGluICpzbGljZWxlbmd0aCouICBPdXQKICAgIG9mIGJvdW5kcyBpbmRpY2VzIGFyZSBjbGlwcGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgaGFuZGxpbmcgb2YKICAgIG5vcm1hbCBzbGljZXMuCiAKICAgIFJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBvbiBlcnJvciB3aXRoIGV4Y2VwdGlvbiBzZXQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGUgcGFyYW1ldGVyIHR5cGUgZm9yIHRoZSAqc2xpY2UqIHBhcmFtZXRlciB3YXMgYGBQeVNsaWNlT2JqZWN0KmBgCisgICAgICBiZWZvcmUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QgYi9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKaW5kZXggZGJhY2VkZi4uYmI3NDFmYiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CisrKyBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdApAQCAtMTEsMTIgKzExLDEyIEBACiAKIEFsbCBQeXRob24gb2JqZWN0cyB1bHRpbWF0ZWx5IHNoYXJlIGEgc21hbGwgbnVtYmVyIG9mIGZpZWxkcyBhdCB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gaW4gbWVtb3J5LiAgVGhlc2UgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZQotOmN0eXBlOmBQeU9iamVjdGAgYW5kIDpjdHlwZTpgUHlWYXJPYmplY3RgIHR5cGVzLCB3aGljaCBhcmUgZGVmaW5lZCwgaW4gdHVybiwKKzpjOnR5cGU6YFB5T2JqZWN0YCBhbmQgOmM6dHlwZTpgUHlWYXJPYmplY3RgIHR5cGVzLCB3aGljaCBhcmUgZGVmaW5lZCwgaW4gdHVybiwKIGJ5IHRoZSBleHBhbnNpb25zIG9mIHNvbWUgbWFjcm9zIGFsc28gdXNlZCwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBpbgogdGhlIGRlZmluaXRpb24gb2YgYWxsIG90aGVyIFB5dGhvbiBvYmplY3RzLgogCiAKLS4uIGN0eXBlOjogUHlPYmplY3QKKy4uIGM6dHlwZTo6IFB5T2JqZWN0CiAKICAgIEFsbCBvYmplY3QgdHlwZXMgYXJlIGV4dGVuc2lvbnMgb2YgdGhpcyB0eXBlLiAgVGhpcyBpcyBhIHR5cGUgd2hpY2gKICAgIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBQeXRob24gbmVlZHMgdG8gdHJlYXQgYSBwb2ludGVyIHRvIGFuIG9iamVjdCBhcyBhbgpAQCAtMjYsODggKzI2LDg4IEBACiAgICBtYWNyby4KIAogCi0uLiBjdHlwZTo6IFB5VmFyT2JqZWN0CisuLiBjOnR5cGU6OiBQeVZhck9iamVjdAogCi0gICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiA6Y3R5cGU6YFB5T2JqZWN0YCB0aGF0IGFkZHMgdGhlIDphdHRyOmBvYl9zaXplYAorICAgVGhpcyBpcyBhbiBleHRlbnNpb24gb2YgOmM6dHlwZTpgUHlPYmplY3RgIHRoYXQgYWRkcyB0aGUgOmF0dHI6YG9iX3NpemVgCiAgICBmaWVsZC4gIFRoaXMgaXMgb25seSB1c2VkIGZvciBvYmplY3RzIHRoYXQgaGF2ZSBzb21lIG5vdGlvbiBvZiAqbGVuZ3RoKi4KICAgIFRoaXMgdHlwZSBkb2VzIG5vdCBvZnRlbiBhcHBlYXIgaW4gdGhlIFB5dGhvbi9DIEFQSS4gIEl0IGNvcnJlc3BvbmRzIHRvIHRoZQogICAgZmllbGRzIGRlZmluZWQgYnkgdGhlIGV4cGFuc2lvbiBvZiB0aGUgYGBQeU9iamVjdF9WQVJfSEVBRGBgIG1hY3JvLgogCi1UaGVzZSBtYWNyb3MgYXJlIHVzZWQgaW4gdGhlIGRlZmluaXRpb24gb2YgOmN0eXBlOmBQeU9iamVjdGAgYW5kCi06Y3R5cGU6YFB5VmFyT2JqZWN0YDoKK1RoZXNlIG1hY3JvcyBhcmUgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbiBvZiA6Yzp0eXBlOmBQeU9iamVjdGAgYW5kCis6Yzp0eXBlOmBQeVZhck9iamVjdGA6CiAKIC4uIFhYWCBuZWVkIHRvIGRvY3VtZW50IFBFUCAzMTIzIGNoYW5nZXMgaGVyZQogCi0uLiBjbWFjcm86OiBQeU9iamVjdF9IRUFECisuLiBjOm1hY3JvOjogUHlPYmplY3RfSEVBRAogCiAgICBUaGlzIGlzIGEgbWFjcm8gd2hpY2ggZXhwYW5kcyB0byB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBmaWVsZHMgb2YgdGhlCi0gICA6Y3R5cGU6YFB5T2JqZWN0YCB0eXBlOyBpdCBpcyB1c2VkIHdoZW4gZGVjbGFyaW5nIG5ldyB0eXBlcyB3aGljaCByZXByZXNlbnQKKyAgIDpjOnR5cGU6YFB5T2JqZWN0YCB0eXBlOyBpdCBpcyB1c2VkIHdoZW4gZGVjbGFyaW5nIG5ldyB0eXBlcyB3aGljaCByZXByZXNlbnQKICAgIG9iamVjdHMgd2l0aG91dCBhIHZhcnlpbmcgbGVuZ3RoLiAgVGhlIHNwZWNpZmljIGZpZWxkcyBpdCBleHBhbmRzIHRvIGRlcGVuZAotICAgb24gdGhlIGRlZmluaXRpb24gb2YgOmNtYWNybzpgUHlfVFJBQ0VfUkVGU2AuICBCeSBkZWZhdWx0LCB0aGF0IG1hY3JvIGlzCi0gICBub3QgZGVmaW5lZCwgYW5kIDpjbWFjcm86YFB5T2JqZWN0X0hFQURgIGV4cGFuZHMgdG86OgorICAgb24gdGhlIGRlZmluaXRpb24gb2YgOmM6bWFjcm86YFB5X1RSQUNFX1JFRlNgLiAgQnkgZGVmYXVsdCwgdGhhdCBtYWNybyBpcworICAgbm90IGRlZmluZWQsIGFuZCA6YzptYWNybzpgUHlPYmplY3RfSEVBRGAgZXhwYW5kcyB0bzo6CiAKICAgICAgIFB5X3NzaXplX3Qgb2JfcmVmY250OwogICAgICAgUHlUeXBlT2JqZWN0ICpvYl90eXBlOwogCi0gICBXaGVuIDpjbWFjcm86YFB5X1RSQUNFX1JFRlNgIGlzIGRlZmluZWQsIGl0IGV4cGFuZHMgdG86OgorICAgV2hlbiA6YzptYWNybzpgUHlfVFJBQ0VfUkVGU2AgaXMgZGVmaW5lZCwgaXQgZXhwYW5kcyB0bzo6CiAKICAgICAgIFB5T2JqZWN0ICpfb2JfbmV4dCwgKl9vYl9wcmV2OwogICAgICAgUHlfc3NpemVfdCBvYl9yZWZjbnQ7CiAgICAgICBQeVR5cGVPYmplY3QgKm9iX3R5cGU7CiAKIAotLi4gY21hY3JvOjogUHlPYmplY3RfVkFSX0hFQUQKKy4uIGM6bWFjcm86OiBQeU9iamVjdF9WQVJfSEVBRAogCiAgICBUaGlzIGlzIGEgbWFjcm8gd2hpY2ggZXhwYW5kcyB0byB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBmaWVsZHMgb2YgdGhlCi0gICA6Y3R5cGU6YFB5VmFyT2JqZWN0YCB0eXBlOyBpdCBpcyB1c2VkIHdoZW4gZGVjbGFyaW5nIG5ldyB0eXBlcyB3aGljaAorICAgOmM6dHlwZTpgUHlWYXJPYmplY3RgIHR5cGU7IGl0IGlzIHVzZWQgd2hlbiBkZWNsYXJpbmcgbmV3IHR5cGVzIHdoaWNoCiAgICByZXByZXNlbnQgb2JqZWN0cyB3aXRoIGEgbGVuZ3RoIHRoYXQgdmFyaWVzIGZyb20gaW5zdGFuY2UgdG8gaW5zdGFuY2UuCiAgICBUaGlzIG1hY3JvIGFsd2F5cyBleHBhbmRzIHRvOjoKIAogICAgICAgUHlPYmplY3RfSEVBRAogICAgICAgUHlfc3NpemVfdCBvYl9zaXplOwogCi0gICBOb3RlIHRoYXQgOmNtYWNybzpgUHlPYmplY3RfSEVBRGAgaXMgcGFydCBvZiB0aGUgZXhwYW5zaW9uLCBhbmQgdGhhdCBpdHMgb3duCi0gICBleHBhbnNpb24gdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgZGVmaW5pdGlvbiBvZiA6Y21hY3JvOmBQeV9UUkFDRV9SRUZTYC4KKyAgIE5vdGUgdGhhdCA6YzptYWNybzpgUHlPYmplY3RfSEVBRGAgaXMgcGFydCBvZiB0aGUgZXhwYW5zaW9uLCBhbmQgdGhhdCBpdHMgb3duCisgICBleHBhbnNpb24gdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgZGVmaW5pdGlvbiBvZiA6YzptYWNybzpgUHlfVFJBQ0VfUkVGU2AuCiAKIAotLi4gY21hY3JvOjogUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpCisuLiBjOm1hY3JvOjogUHlPYmplY3RfSEVBRF9JTklUKHR5cGUpCiAKICAgIFRoaXMgaXMgYSBtYWNybyB3aGljaCBleHBhbmRzIHRvIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgYSBuZXcKLSAgIDpjdHlwZTpgUHlPYmplY3RgIHR5cGUuICBUaGlzIG1hY3JvIGV4cGFuZHMgdG86OgorICAgOmM6dHlwZTpgUHlPYmplY3RgIHR5cGUuICBUaGlzIG1hY3JvIGV4cGFuZHMgdG86OgogCiAgICAgICBfUHlPYmplY3RfRVhUUkFfSU5JVAogICAgICAgMSwgdHlwZSwKIAogCi0uLiBjbWFjcm86OiBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkKKy4uIGM6bWFjcm86OiBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkKIAogICAgVGhpcyBpcyBhIG1hY3JvIHdoaWNoIGV4cGFuZHMgdG8gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGZvciBhIG5ldwotICAgOmN0eXBlOmBQeVZhck9iamVjdGAgdHlwZSwgaW5jbHVkaW5nIHRoZSA6YXR0cjpgb2Jfc2l6ZWAgZmllbGQuCisgICA6Yzp0eXBlOmBQeVZhck9iamVjdGAgdHlwZSwgaW5jbHVkaW5nIHRoZSA6YXR0cjpgb2Jfc2l6ZWAgZmllbGQuCiAgICBUaGlzIG1hY3JvIGV4cGFuZHMgdG86OgogCiAgICAgICBfUHlPYmplY3RfRVhUUkFfSU5JVAogICAgICAgMSwgdHlwZSwgc2l6ZSwKIAogCi0uLiBjdHlwZTo6IFB5Q0Z1bmN0aW9uCisuLiBjOnR5cGU6OiBQeUNGdW5jdGlvbgogCiAgICBUeXBlIG9mIHRoZSBmdW5jdGlvbnMgdXNlZCB0byBpbXBsZW1lbnQgbW9zdCBQeXRob24gY2FsbGFibGVzIGluIEMuCi0gICBGdW5jdGlvbnMgb2YgdGhpcyB0eXBlIHRha2UgdHdvIDpjdHlwZTpgUHlPYmplY3RcKmAgcGFyYW1ldGVycyBhbmQgcmV0dXJuCisgICBGdW5jdGlvbnMgb2YgdGhpcyB0eXBlIHRha2UgdHdvIDpjOnR5cGU6YFB5T2JqZWN0XCpgIHBhcmFtZXRlcnMgYW5kIHJldHVybgogICAgb25lIHN1Y2ggdmFsdWUuICBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzICpOVUxMKiwgYW4gZXhjZXB0aW9uIHNoYWxsIGhhdmUKICAgIGJlZW4gc2V0LiAgSWYgbm90ICpOVUxMKiwgdGhlIHJldHVybiB2YWx1ZSBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcmV0dXJuCiAgICB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gYXMgZXhwb3NlZCBpbiBQeXRob24uICBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBuZXcKICAgIHJlZmVyZW5jZS4KIAogCi0uLiBjdHlwZTo6IFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzCisuLiBjOnR5cGU6OiBQeUNGdW5jdGlvbldpdGhLZXl3b3JkcwogCiAgICBUeXBlIG9mIHRoZSBmdW5jdGlvbnMgdXNlZCB0byBpbXBsZW1lbnQgUHl0aG9uIGNhbGxhYmxlcyBpbiBDIHRoYXQgdGFrZQotICAga2V5d29yZCBhcmd1bWVudHM6IHRoZXkgdGFrZSB0aHJlZSA6Y3R5cGU6YFB5T2JqZWN0XCpgIHBhcmFtZXRlcnMgYW5kIHJldHVybgotICAgb25lIHN1Y2ggdmFsdWUuICBTZWUgOmN0eXBlOmBQeUNGdW5jdGlvbmAgYWJvdmUgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSByZXR1cm4KKyAgIGtleXdvcmQgYXJndW1lbnRzOiB0aGV5IHRha2UgdGhyZWUgOmM6dHlwZTpgUHlPYmplY3RcKmAgcGFyYW1ldGVycyBhbmQgcmV0dXJuCisgICBvbmUgc3VjaCB2YWx1ZS4gIFNlZSA6Yzp0eXBlOmBQeUNGdW5jdGlvbmAgYWJvdmUgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSByZXR1cm4KICAgIHZhbHVlLgogCiAKLS4uIGN0eXBlOjogUHlNZXRob2REZWYKKy4uIGM6dHlwZTo6IFB5TWV0aG9kRGVmCiAKICAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgbWV0aG9kIG9mIGFuIGV4dGVuc2lvbiB0eXBlLiAgVGhpcyBzdHJ1Y3R1cmUgaGFzCiAgICBmb3VyIGZpZWxkczoKQEAgLTEyOCwxMCArMTI4LDEwIEBACiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogVGhlIDphdHRyOmBtbF9tZXRoYCBpcyBhIEMgZnVuY3Rpb24gcG9pbnRlci4gIFRoZSBmdW5jdGlvbnMgbWF5IGJlIG9mIGRpZmZlcmVudAotdHlwZXMsIGJ1dCB0aGV5IGFsd2F5cyByZXR1cm4gOmN0eXBlOmBQeU9iamVjdFwqYC4gIElmIHRoZSBmdW5jdGlvbiBpcyBub3Qgb2YKLXRoZSA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYCwgdGhlIGNvbXBpbGVyIHdpbGwgcmVxdWlyZSBhIGNhc3QgaW4gdGhlIG1ldGhvZCB0YWJsZS4KLUV2ZW4gdGhvdWdoIDpjdHlwZTpgUHlDRnVuY3Rpb25gIGRlZmluZXMgdGhlIGZpcnN0IHBhcmFtZXRlciBhcwotOmN0eXBlOmBQeU9iamVjdFwqYCwgaXQgaXMgY29tbW9uIHRoYXQgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgdGhlCit0eXBlcywgYnV0IHRoZXkgYWx3YXlzIHJldHVybiA6Yzp0eXBlOmBQeU9iamVjdFwqYC4gIElmIHRoZSBmdW5jdGlvbiBpcyBub3Qgb2YKK3RoZSA6Yzp0eXBlOmBQeUNGdW5jdGlvbmAsIHRoZSBjb21waWxlciB3aWxsIHJlcXVpcmUgYSBjYXN0IGluIHRoZSBtZXRob2QgdGFibGUuCitFdmVuIHRob3VnaCA6Yzp0eXBlOmBQeUNGdW5jdGlvbmAgZGVmaW5lcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGFzCis6Yzp0eXBlOmBQeU9iamVjdFwqYCwgaXQgaXMgY29tbW9uIHRoYXQgdGhlIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2VzIGEgdGhlCiBzcGVjaWZpYyBDIHR5cGUgb2YgdGhlICpzZWxmKiBvYmplY3QuCiAKIFRoZSA6YXR0cjpgbWxfZmxhZ3NgIGZpZWxkIGlzIGEgYml0ZmllbGQgd2hpY2ggY2FuIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBmbGFncy4KQEAgLTE0NSwyNyArMTQ1LDI3IEBACiAuLiBkYXRhOjogTUVUSF9WQVJBUkdTCiAKICAgIFRoaXMgaXMgdGhlIHR5cGljYWwgY2FsbGluZyBjb252ZW50aW9uLCB3aGVyZSB0aGUgbWV0aG9kcyBoYXZlIHRoZSB0eXBlCi0gICA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYC4gVGhlIGZ1bmN0aW9uIGV4cGVjdHMgdHdvIDpjdHlwZTpgUHlPYmplY3RcKmAgdmFsdWVzLgorICAgOmM6dHlwZTpgUHlDRnVuY3Rpb25gLiBUaGUgZnVuY3Rpb24gZXhwZWN0cyB0d28gOmM6dHlwZTpgUHlPYmplY3RcKmAgdmFsdWVzLgogICAgVGhlIGZpcnN0IG9uZSBpcyB0aGUgKnNlbGYqIG9iamVjdCBmb3IgbWV0aG9kczsgZm9yIG1vZHVsZSBmdW5jdGlvbnMsIGl0IGlzCiAgICB0aGUgbW9kdWxlIG9iamVjdC4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIChvZnRlbiBjYWxsZWQgKmFyZ3MqKSBpcyBhIHR1cGxlCiAgICBvYmplY3QgcmVwcmVzZW50aW5nIGFsbCBhcmd1bWVudHMuIFRoaXMgcGFyYW1ldGVyIGlzIHR5cGljYWxseSBwcm9jZXNzZWQKLSAgIHVzaW5nIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgb3IgOmNmdW5jOmBQeUFyZ19VbnBhY2tUdXBsZWAuCisgICB1c2luZyA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBvciA6YzpmdW5jOmBQeUFyZ19VbnBhY2tUdXBsZWAuCiAKIAogLi4gZGF0YTo6IE1FVEhfS0VZV09SRFMKIAotICAgTWV0aG9kcyB3aXRoIHRoZXNlIGZsYWdzIG11c3QgYmUgb2YgdHlwZSA6Y3R5cGU6YFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzYC4KKyAgIE1ldGhvZHMgd2l0aCB0aGVzZSBmbGFncyBtdXN0IGJlIG9mIHR5cGUgOmM6dHlwZTpgUHlDRnVuY3Rpb25XaXRoS2V5d29yZHNgLgogICAgVGhlIGZ1bmN0aW9uIGV4cGVjdHMgdGhyZWUgcGFyYW1ldGVyczogKnNlbGYqLCAqYXJncyosIGFuZCBhIGRpY3Rpb25hcnkgb2YKICAgIGFsbCB0aGUga2V5d29yZCBhcmd1bWVudHMuICBUaGUgZmxhZyBpcyB0eXBpY2FsbHkgY29tYmluZWQgd2l0aAogICAgOmNvbnN0OmBNRVRIX1ZBUkFSR1NgLCBhbmQgdGhlIHBhcmFtZXRlcnMgYXJlIHR5cGljYWxseSBwcm9jZXNzZWQgdXNpbmcKLSAgIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYC4KKyAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AuCiAKIAogLi4gZGF0YTo6IE1FVEhfTk9BUkdTCiAKICAgIE1ldGhvZHMgd2l0aG91dCBwYXJhbWV0ZXJzIGRvbid0IG5lZWQgdG8gY2hlY2sgd2hldGhlciBhcmd1bWVudHMgYXJlIGdpdmVuIGlmCiAgICB0aGV5IGFyZSBsaXN0ZWQgd2l0aCB0aGUgOmNvbnN0OmBNRVRIX05PQVJHU2AgZmxhZy4gIFRoZXkgbmVlZCB0byBiZSBvZiB0eXBlCi0gICA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYC4gIFRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgdHlwaWNhbGx5IG5hbWVkICpzZWxmKiBhbmQgd2lsbAorICAgOmM6dHlwZTpgUHlDRnVuY3Rpb25gLiAgVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0eXBpY2FsbHkgbmFtZWQgKnNlbGYqIGFuZCB3aWxsCiAgICBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2R1bGUgb3Igb2JqZWN0IGluc3RhbmNlLiAgSW4gYWxsIGNhc2VzIHRoZSBzZWNvbmQKICAgIHBhcmFtZXRlciB3aWxsIGJlICpOVUxMKi4KIApAQCAtMTczLDkgKzE3Myw5IEBACiAuLiBkYXRhOjogTUVUSF9PCiAKICAgIE1ldGhvZHMgd2l0aCBhIHNpbmdsZSBvYmplY3QgYXJndW1lbnQgY2FuIGJlIGxpc3RlZCB3aXRoIHRoZSA6Y29uc3Q6YE1FVEhfT2AKLSAgIGZsYWcsIGluc3RlYWQgb2YgaW52b2tpbmcgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB3aXRoIGEgYGAiTyJgYCBhcmd1bWVudC4KLSAgIFRoZXkgaGF2ZSB0aGUgdHlwZSA6Y3R5cGU6YFB5Q0Z1bmN0aW9uYCwgd2l0aCB0aGUgKnNlbGYqIHBhcmFtZXRlciwgYW5kIGEKLSAgIDpjdHlwZTpgUHlPYmplY3RcKmAgcGFyYW1ldGVyIHJlcHJlc2VudGluZyB0aGUgc2luZ2xlIGFyZ3VtZW50LgorICAgZmxhZywgaW5zdGVhZCBvZiBpbnZva2luZyA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB3aXRoIGEgYGAiTyJgYCBhcmd1bWVudC4KKyAgIFRoZXkgaGF2ZSB0aGUgdHlwZSA6Yzp0eXBlOmBQeUNGdW5jdGlvbmAsIHdpdGggdGhlICpzZWxmKiBwYXJhbWV0ZXIsIGFuZCBhCisgICA6Yzp0eXBlOmBQeU9iamVjdFwqYCBwYXJhbWV0ZXIgcmVwcmVzZW50aW5nIHRoZSBzaW5nbGUgYXJndW1lbnQuCiAKIAogVGhlc2UgdHdvIGNvbnN0YW50cyBhcmUgbm90IHVzZWQgdG8gaW5kaWNhdGUgdGhlIGNhbGxpbmcgY29udmVudGlvbiBidXQgdGhlCkBAIC0yMTksNyArMjE5LDcgQEAKICAgIHRoYW4gd3JhcHBlciBvYmplY3QgY2FsbHMuCiAKIAotLi4gY3R5cGU6OiBQeU1lbWJlckRlZgorLi4gYzp0eXBlOjogUHlNZW1iZXJEZWYKIAogICAgU3RydWN0dXJlIHdoaWNoIGRlc2NyaWJlcyBhbiBhdHRyaWJ1dGUgb2YgYSB0eXBlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGEgQwogICAgc3RydWN0IG1lbWJlci4gIEl0cyBmaWVsZHMgYXJlOgpAQCAtMjcxLDE0ICsyNzEsMTQgQEAKICAgIFRfUFlTU0laRVQgICAgICBQeV9zc2l6ZV90CiAgICA9PT09PT09PT09PT09PT0gPT09PT09PT09PT09PT09PT09CiAKLSAgIDpjbWFjcm86YFRfT0JKRUNUYCBhbmQgOmNtYWNybzpgVF9PQkpFQ1RfRVhgIGRpZmZlciBpbiB0aGF0Ci0gICA6Y21hY3JvOmBUX09CSkVDVGAgcmV0dXJucyBgYE5vbmVgYCBpZiB0aGUgbWVtYmVyIGlzICpOVUxMKiBhbmQKLSAgIDpjbWFjcm86YFRfT0JKRUNUX0VYYCByYWlzZXMgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLiAgVHJ5IHRvIHVzZQotICAgOmNtYWNybzpgVF9PQkpFQ1RfRVhgIG92ZXIgOmNtYWNybzpgVF9PQkpFQ1RgIGJlY2F1c2UgOmNtYWNybzpgVF9PQkpFQ1RfRVhgCisgICA6YzptYWNybzpgVF9PQkpFQ1RgIGFuZCA6YzptYWNybzpgVF9PQkpFQ1RfRVhgIGRpZmZlciBpbiB0aGF0CisgICA6YzptYWNybzpgVF9PQkpFQ1RgIHJldHVybnMgYGBOb25lYGAgaWYgdGhlIG1lbWJlciBpcyAqTlVMTCogYW5kCisgICA6YzptYWNybzpgVF9PQkpFQ1RfRVhgIHJhaXNlcyBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuICBUcnkgdG8gdXNlCisgICA6YzptYWNybzpgVF9PQkpFQ1RfRVhgIG92ZXIgOmM6bWFjcm86YFRfT0JKRUNUYCBiZWNhdXNlIDpjOm1hY3JvOmBUX09CSkVDVF9FWGAKICAgIGhhbmRsZXMgdXNlIG9mIHRoZSA6a2V5d29yZDpgZGVsYCBzdGF0ZW1lbnQgb24gdGhhdCBhdHRyaWJ1dGUgbW9yZSBjb3JyZWN0bHkKLSAgIHRoYW4gOmNtYWNybzpgVF9PQkpFQ1RgLgorICAgdGhhbiA6YzptYWNybzpgVF9PQkpFQ1RgLgogCi0gICA6YXR0cjpgZmxhZ3NgIGNhbiBiZSAwIGZvciB3cml0ZSBhbmQgcmVhZCBhY2Nlc3Mgb3IgOmNtYWNybzpgUkVBRE9OTFlgIGZvcgotICAgcmVhZC1vbmx5IGFjY2Vzcy4gIFVzaW5nIDpjbWFjcm86YFRfU1RSSU5HYCBmb3IgOmF0dHI6YHR5cGVgIGltcGxpZXMKLSAgIDpjbWFjcm86YFJFQURPTkxZYC4gIE9ubHkgOmNtYWNybzpgVF9PQkpFQ1RgIGFuZCA6Y21hY3JvOmBUX09CSkVDVF9FWGAKKyAgIDphdHRyOmBmbGFnc2AgY2FuIGJlIDAgZm9yIHdyaXRlIGFuZCByZWFkIGFjY2VzcyBvciA6YzptYWNybzpgUkVBRE9OTFlgIGZvcgorICAgcmVhZC1vbmx5IGFjY2Vzcy4gIFVzaW5nIDpjOm1hY3JvOmBUX1NUUklOR2AgZm9yIDphdHRyOmB0eXBlYCBpbXBsaWVzCisgICA6YzptYWNybzpgUkVBRE9OTFlgLiAgT25seSA6YzptYWNybzpgVF9PQkpFQ1RgIGFuZCA6YzptYWNybzpgVF9PQkpFQ1RfRVhgCiAgICBtZW1iZXJzIGNhbiBiZSBkZWxldGVkLiAgKFRoZXkgYXJlIHNldCB0byAqTlVMTCopLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3N5cy5yc3QgYi9Eb2MvYy1hcGkvc3lzLnJzdAppbmRleCBhZGFkZmU1Li4yNTJiZDFhIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3lzLnJzdAorKysgYi9Eb2MvYy1hcGkvc3lzLnJzdApAQCAtNiwxNiArNiwxNiBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfRmRJc0ludGVyYWN0aXZlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfRmRJc0ludGVyYWN0aXZlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAogICAgUmV0dXJuIHRydWUgKG5vbnplcm8pIGlmIHRoZSBzdGFuZGFyZCBJL08gZmlsZSAqZnAqIHdpdGggbmFtZSAqZmlsZW5hbWUqIGlzCiAgICBkZWVtZWQgaW50ZXJhY3RpdmUuICBUaGlzIGlzIHRoZSBjYXNlIGZvciBmaWxlcyBmb3Igd2hpY2ggYGBpc2F0dHkoZmlsZW5vKGZwKSlgYAotICAgaXMgdHJ1ZS4gIElmIHRoZSBnbG9iYWwgZmxhZyA6Y2RhdGE6YFB5X0ludGVyYWN0aXZlRmxhZ2AgaXMgdHJ1ZSwgdGhpcyBmdW5jdGlvbgorICAgaXMgdHJ1ZS4gIElmIHRoZSBnbG9iYWwgZmxhZyA6YzpkYXRhOmBQeV9JbnRlcmFjdGl2ZUZsYWdgIGlzIHRydWUsIHRoaXMgZnVuY3Rpb24KICAgIGFsc28gcmV0dXJucyB0cnVlIGlmIHRoZSAqZmlsZW5hbWUqIHBvaW50ZXIgaXMgKk5VTEwqIG9yIGlmIHRoZSBuYW1lIGlzIGVxdWFsIHRvCiAgICBvbmUgb2YgdGhlIHN0cmluZ3MgYGAnPHN0ZGluPidgYCBvciBgYCc/Pz8nYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeU9TX0FmdGVyRm9yaygpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeU9TX0FmdGVyRm9yaygpCiAKICAgIEZ1bmN0aW9uIHRvIHVwZGF0ZSBzb21lIGludGVybmFsIHN0YXRlIGFmdGVyIGEgcHJvY2VzcyBmb3JrOyB0aGlzIHNob3VsZCBiZQogICAgY2FsbGVkIGluIHRoZSBuZXcgcHJvY2VzcyBpZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHdpbGwgY29udGludWUgdG8gYmUgdXNlZC4KQEAgLTIzLDcgKzIzLDcgQEAKICAgIHRvIGJlIGNhbGxlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlPU19DaGVja1N0YWNrKCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPU19DaGVja1N0YWNrKCkKIAogICAgUmV0dXJuIHRydWUgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgcnVucyBvdXQgb2Ygc3RhY2sgc3BhY2UuICBUaGlzIGlzIGEgcmVsaWFibGUKICAgIGNoZWNrLCBidXQgaXMgb25seSBhdmFpbGFibGUgd2hlbiA6Y29uc3Q6YFVTRV9TVEFDS0NIRUNLYCBpcyBkZWZpbmVkIChjdXJyZW50bHkKQEAgLTMyLDIwICszMiwyMCBAQAogICAgb3duIGNvZGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPU19zaWdoYW5kbGVyX3QgUHlPU19nZXRzaWcoaW50IGkpCisuLiBjOmZ1bmN0aW9uOjogUHlPU19zaWdoYW5kbGVyX3QgUHlPU19nZXRzaWcoaW50IGkpCiAKICAgIFJldHVybiB0aGUgY3VycmVudCBzaWduYWwgaGFuZGxlciBmb3Igc2lnbmFsICppKi4gIFRoaXMgaXMgYSB0aGluIHdyYXBwZXIgYXJvdW5kCi0gICBlaXRoZXIgOmNmdW5jOmBzaWdhY3Rpb25gIG9yIDpjZnVuYzpgc2lnbmFsYC4gIERvIG5vdCBjYWxsIHRob3NlIGZ1bmN0aW9ucwotICAgZGlyZWN0bHkhIDpjdHlwZTpgUHlPU19zaWdoYW5kbGVyX3RgIGlzIGEgdHlwZWRlZiBhbGlhcyBmb3IgOmN0eXBlOmB2b2lkCisgICBlaXRoZXIgOmM6ZnVuYzpgc2lnYWN0aW9uYCBvciA6YzpmdW5jOmBzaWduYWxgLiAgRG8gbm90IGNhbGwgdGhvc2UgZnVuY3Rpb25zCisgICBkaXJlY3RseSEgOmM6dHlwZTpgUHlPU19zaWdoYW5kbGVyX3RgIGlzIGEgdHlwZWRlZiBhbGlhcyBmb3IgOmM6dHlwZTpgdm9pZAogICAgKFwqKShpbnQpYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9TX3NpZ2hhbmRsZXJfdCBQeU9TX3NldHNpZyhpbnQgaSwgUHlPU19zaWdoYW5kbGVyX3QgaCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9TX3NpZ2hhbmRsZXJfdCBQeU9TX3NldHNpZyhpbnQgaSwgUHlPU19zaWdoYW5kbGVyX3QgaCkKIAogICAgU2V0IHRoZSBzaWduYWwgaGFuZGxlciBmb3Igc2lnbmFsICppKiB0byBiZSAqaCo7IHJldHVybiB0aGUgb2xkIHNpZ25hbCBoYW5kbGVyLgotICAgVGhpcyBpcyBhIHRoaW4gd3JhcHBlciBhcm91bmQgZWl0aGVyIDpjZnVuYzpgc2lnYWN0aW9uYCBvciA6Y2Z1bmM6YHNpZ25hbGAuICBEbwotICAgbm90IGNhbGwgdGhvc2UgZnVuY3Rpb25zIGRpcmVjdGx5ISAgOmN0eXBlOmBQeU9TX3NpZ2hhbmRsZXJfdGAgaXMgYSB0eXBlZGVmCi0gICBhbGlhcyBmb3IgOmN0eXBlOmB2b2lkIChcKikoaW50KWAuCisgICBUaGlzIGlzIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBlaXRoZXIgOmM6ZnVuYzpgc2lnYWN0aW9uYCBvciA6YzpmdW5jOmBzaWduYWxgLiAgRG8KKyAgIG5vdCBjYWxsIHRob3NlIGZ1bmN0aW9ucyBkaXJlY3RseSEgIDpjOnR5cGU6YFB5T1Nfc2lnaGFuZGxlcl90YCBpcyBhIHR5cGVkZWYKKyAgIGFsaWFzIGZvciA6Yzp0eXBlOmB2b2lkIChcKikoaW50KWAuCiAKIC4uIF9zeXN0ZW1mdW5jdGlvbnM6CiAKQEAgLTU2LDM4ICs1Niw0MiBAQAogYWNjZXNzaWJsZSB0byBDIGNvZGUuICBUaGV5IGFsbCB3b3JrIHdpdGggdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIgdGhyZWFkJ3MKIDptb2Q6YHN5c2AgbW9kdWxlJ3MgZGljdCwgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSBpbnRlcm5hbCB0aHJlYWQgc3RhdGUgc3RydWN0dXJlLgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCAqUHlTeXNfR2V0T2JqZWN0KGNoYXIgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKlB5U3lzX0dldE9iamVjdChjaGFyICpuYW1lKQogCiAgICBSZXR1cm4gdGhlIG9iamVjdCAqbmFtZSogZnJvbSB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgb3IgKk5VTEwqIGlmIGl0IGRvZXMKICAgIG5vdCBleGlzdCwgd2l0aG91dCBzZXR0aW5nIGFuIGV4Y2VwdGlvbi4KIAotLi4gY2Z1bmN0aW9uOjogRklMRSAqUHlTeXNfR2V0RmlsZShjaGFyICpuYW1lLCBGSUxFICpkZWYpCisuLiBjOmZ1bmN0aW9uOjogRklMRSAqUHlTeXNfR2V0RmlsZShjaGFyICpuYW1lLCBGSUxFICpkZWYpCiAKLSAgIFJldHVybiB0aGUgOmN0eXBlOmBGSUxFKmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgKm5hbWUqIGluIHRoZQorICAgUmV0dXJuIHRoZSA6Yzp0eXBlOmBGSUxFKmAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvYmplY3QgKm5hbWUqIGluIHRoZQogICAgOm1vZDpgc3lzYCBtb2R1bGUsIG9yICpkZWYqIGlmICpuYW1lKiBpcyBub3QgaW4gdGhlIG1vZHVsZSBvciBpcyBub3QgYXNzb2NpYXRlZAotICAgd2l0aCBhIDpjdHlwZTpgRklMRSpgLgorICAgd2l0aCBhIDpjOnR5cGU6YEZJTEUqYC4KIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5U3lzX1NldE9iamVjdChjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlTeXNfU2V0T2JqZWN0KGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQogCiAgICBTZXQgKm5hbWUqIGluIHRoZSA6bW9kOmBzeXNgIG1vZHVsZSB0byAqdiogdW5sZXNzICp2KiBpcyAqTlVMTCosIGluIHdoaWNoCiAgICBjYXNlICpuYW1lKiBpcyBkZWxldGVkIGZyb20gdGhlIHN5cyBtb2R1bGUuIFJldHVybnMgYGAwYGAgb24gc3VjY2VzcywgYGAtMWBgCiAgICBvbiBlcnJvci4KIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeVN5c19SZXNldFdhcm5PcHRpb25zKCkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMoKQogCiAgICBSZXNldCA6ZGF0YTpgc3lzLndhcm5vcHRpb25zYCB0byBhbiBlbXB0eSBsaXN0LgogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5U3lzX0FkZFdhcm5PcHRpb24od2NoYXJfdCAqcykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX0FkZFdhcm5PcHRpb24od2NoYXJfdCAqcykKIAogICAgQXBwZW5kICpzKiB0byA6ZGF0YTpgc3lzLndhcm5vcHRpb25zYC4KIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeVN5c19TZXRQYXRoKHdjaGFyX3QgKnBhdGgpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZShQeU9iamVjdCAqdW5pY29kZSkKKworICAgQXBwZW5kICp1bmljb2RlKiB0byA6ZGF0YTpgc3lzLndhcm5vcHRpb25zYC4KKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlTeXNfU2V0UGF0aCh3Y2hhcl90ICpwYXRoKQogCiAgICBTZXQgOmRhdGE6YHN5cy5wYXRoYCB0byBhIGxpc3Qgb2JqZWN0IG9mIHBhdGhzIGZvdW5kIGluICpwYXRoKiB3aGljaCBzaG91bGQKICAgIGJlIGEgbGlzdCBvZiBwYXRocyBzZXBhcmF0ZWQgd2l0aCB0aGUgcGxhdGZvcm0ncyBzZWFyY2ggcGF0aCBkZWxpbWl0ZXIKICAgIChgYDpgYCBvbiBVbml4LCBgYDtgYCBvbiBXaW5kb3dzKS4KIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeVN5c19Xcml0ZVN0ZG91dChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1dyaXRlU3Rkb3V0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCiAgICBXcml0ZSB0aGUgb3V0cHV0IHN0cmluZyBkZXNjcmliZWQgYnkgKmZvcm1hdCogdG8gOmRhdGE6YHN5cy5zdGRvdXRgLiAgTm8KICAgIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZCwgZXZlbiBpZiB0cnVuY2F0aW9uIG9jY3VycyAoc2VlIGJlbG93KS4KQEAgLTEwMyw5ICsxMDcsNDAgQEAKICAgIElmIGEgcHJvYmxlbSBvY2N1cnMsIG9yIDpkYXRhOmBzeXMuc3Rkb3V0YCBpcyB1bnNldCwgdGhlIGZvcm1hdHRlZCBtZXNzYWdlCiAgICBpcyB3cml0dGVuIHRvIHRoZSByZWFsIChDIGxldmVsKSAqc3Rkb3V0Ki4KIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeVN5c19Xcml0ZVN0ZGVycihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX1dyaXRlU3RkZXJyKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogCi0gICBBcyBhYm92ZSwgYnV0IHdyaXRlIHRvIDpkYXRhOmBzeXMuc3RkZXJyYCBvciAqc3RkZXJyKiBpbnN0ZWFkLgorICAgQXMgOmM6ZnVuYzpgUHlTeXNfV3JpdGVTdGRvdXRgLCBidXQgd3JpdGUgdG8gOmRhdGE6YHN5cy5zdGRlcnJgIG9yICpzdGRlcnIqCisgICBpbnN0ZWFkLgorCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVN5c19Gb3JtYXRTdGRvdXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCisKKyAgIEZ1bmN0aW9uIHNpbWlsYXIgdG8gUHlTeXNfV3JpdGVTdGRvdXQoKSBidXQgZm9ybWF0IHRoZSBtZXNzYWdlIHVzaW5nCisgICA6YzpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdFZgIGFuZCBkb24ndCB0cnVuY2F0ZSB0aGUgbWVzc2FnZSB0byBhbgorICAgYXJiaXRyYXJ5IGxlbmd0aC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX0Zvcm1hdFN0ZGVycihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKworICAgQXMgOmM6ZnVuYzpgUHlTeXNfRm9ybWF0U3Rkb3V0YCwgYnV0IHdyaXRlIHRvIDpkYXRhOmBzeXMuc3RkZXJyYCBvciAqc3RkZXJyKgorICAgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5U3lzX0FkZFhPcHRpb24oY29uc3Qgd2NoYXJfdCAqcykKKworICAgUGFyc2UgKnMqIGFzIGEgc2V0IG9mIDpvcHRpb246YC1YYCBvcHRpb25zIGFuZCBhZGQgdGhlbSB0byB0aGUgY3VycmVudAorICAgb3B0aW9ucyBtYXBwaW5nIGFzIHJldHVybmVkIGJ5IDpjOmZ1bmM6YFB5U3lzX0dldFhPcHRpb25zYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCAqUHlTeXNfR2V0WE9wdGlvbnMoKQorCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgZGljdGlvbmFyeSBvZiA6b3B0aW9uOmAtWGAgb3B0aW9ucywgc2ltaWxhcmx5IHRvCisgICA6ZGF0YTpgc3lzLl94b3B0aW9uc2AuICBPbiBlcnJvciwgKk5VTEwqIGlzIHJldHVybmVkIGFuZCBhbiBleGNlcHRpb24gaXMKKyAgIHNldC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAogLi4gX3Byb2Nlc3Njb250cm9sOgpAQCAtMTE0LDcgKzE0OSw3IEBACiA9PT09PT09PT09PT09PT0KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5X0ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X0ZhdGFsRXJyb3IoY29uc3QgY2hhciAqbWVzc2FnZSkKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IGFib3J0KCkKIApAQCAtMTIyLDMwICsxNTcsMzAgQEAKICAgIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGEgY29uZGl0aW9uIGlzIGRldGVjdGVkIHRoYXQgd291bGQKICAgIG1ha2UgaXQgZGFuZ2Vyb3VzIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXI7IGUuZy4sIHdoZW4gdGhlCiAgICBvYmplY3QgYWRtaW5pc3RyYXRpb24gYXBwZWFycyB0byBiZSBjb3JydXB0ZWQuICBPbiBVbml4LCB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5Ci0gICBmdW5jdGlvbiA6Y2Z1bmM6YGFib3J0YCBpcyBjYWxsZWQgd2hpY2ggd2lsbCBhdHRlbXB0IHRvIHByb2R1Y2UgYSA6ZmlsZTpgY29yZWAKKyAgIGZ1bmN0aW9uIDpjOmZ1bmM6YGFib3J0YCBpcyBjYWxsZWQgd2hpY2ggd2lsbCBhdHRlbXB0IHRvIHByb2R1Y2UgYSA6ZmlsZTpgY29yZWAKICAgIGZpbGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9FeGl0KGludCBzdGF0dXMpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeV9FeGl0KGludCBzdGF0dXMpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogUHlfRmluYWxpemUoKQogICAgICAgc2luZ2xlOiBleGl0KCkKIAotICAgRXhpdCB0aGUgY3VycmVudCBwcm9jZXNzLiAgVGhpcyBjYWxscyA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBhbmQgdGhlbiBjYWxscyB0aGUKKyAgIEV4aXQgdGhlIGN1cnJlbnQgcHJvY2Vzcy4gIFRoaXMgY2FsbHMgOmM6ZnVuYzpgUHlfRmluYWxpemVgIGFuZCB0aGVuIGNhbGxzIHRoZQogICAgc3RhbmRhcmQgQyBsaWJyYXJ5IGZ1bmN0aW9uIGBgZXhpdChzdGF0dXMpYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5X0F0RXhpdCh2b2lkICgqZnVuYykgKCkpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X0F0RXhpdCh2b2lkICgqZnVuYykgKCkpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogUHlfRmluYWxpemUoKQogICAgICAgc2luZ2xlOiBjbGVhbnVwIGZ1bmN0aW9ucwogCi0gICBSZWdpc3RlciBhIGNsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IDpjZnVuYzpgUHlfRmluYWxpemVgLiAgVGhlIGNsZWFudXAKKyAgIFJlZ2lzdGVyIGEgY2xlYW51cCBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYnkgOmM6ZnVuYzpgUHlfRmluYWxpemVgLiAgVGhlIGNsZWFudXAKICAgIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzIGFuZCBzaG91bGQgcmV0dXJuIG5vIHZhbHVlLiAgQXQgbW9zdAogICAgMzIgY2xlYW51cCBmdW5jdGlvbnMgY2FuIGJlIHJlZ2lzdGVyZWQuICBXaGVuIHRoZSByZWdpc3RyYXRpb24gaXMgc3VjY2Vzc2Z1bCwKLSAgIDpjZnVuYzpgUHlfQXRFeGl0YCByZXR1cm5zIGBgMGBgOyBvbiBmYWlsdXJlLCBpdCByZXR1cm5zIGBgLTFgYC4gIFRoZSBjbGVhbnVwCisgICA6YzpmdW5jOmBQeV9BdEV4aXRgIHJldHVybnMgYGAwYGA7IG9uIGZhaWx1cmUsIGl0IHJldHVybnMgYGAtMWBgLiAgVGhlIGNsZWFudXAKICAgIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgbGFzdCBpcyBjYWxsZWQgZmlyc3QuIEVhY2ggY2xlYW51cCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZAogICAgYXQgbW9zdCBvbmNlLiAgU2luY2UgUHl0aG9uJ3MgaW50ZXJuYWwgZmluYWxpemF0aW9uIHdpbGwgaGF2ZSBjb21wbGV0ZWQgYmVmb3JlCiAgICB0aGUgY2xlYW51cCBmdW5jdGlvbiwgbm8gUHl0aG9uIEFQSXMgc2hvdWxkIGJlIGNhbGxlZCBieSAqZnVuYyouCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHVwbGUucnN0IGIvRG9jL2MtYXBpL3R1cGxlLnJzdAppbmRleCA2MTJhY2M3Li4zY2JmZTViIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdHVwbGUucnN0CisrKyBiL0RvYy9jLWFwaS90dXBsZS5yc3QKQEAgLTgsNzAgKzgsNzAgQEAKIC4uIGluZGV4Ojogb2JqZWN0OiB0dXBsZQogCiAKLS4uIGN0eXBlOjogUHlUdXBsZU9iamVjdAorLi4gYzp0eXBlOjogUHlUdXBsZU9iamVjdAogCi0gICBUaGlzIHN1YnR5cGUgb2YgOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50cyBhIFB5dGhvbiB0dXBsZSBvYmplY3QuCisgICBUaGlzIHN1YnR5cGUgb2YgOmM6dHlwZTpgUHlPYmplY3RgIHJlcHJlc2VudHMgYSBQeXRob24gdHVwbGUgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlUdXBsZV9UeXBlCisuLiBjOnZhcjo6IFB5VHlwZU9iamVjdCBQeVR1cGxlX1R5cGUKIAotICAgVGhpcyBpbnN0YW5jZSBvZiA6Y3R5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIHR1cGxlIHR5cGU7IGl0CisgICBUaGlzIGluc3RhbmNlIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgcmVwcmVzZW50cyB0aGUgUHl0aG9uIHR1cGxlIHR5cGU7IGl0CiAgICBpcyB0aGUgc2FtZSBvYmplY3QgYXMgOmNsYXNzOmB0dXBsZWAgaW4gdGhlIFB5dGhvbiBsYXllci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlUdXBsZV9DaGVjayhQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUdXBsZV9DaGVjayhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIHRydWUgaWYgKnAqIGlzIGEgdHVwbGUgb2JqZWN0IG9yIGFuIGluc3RhbmNlIG9mIGEgc3VidHlwZSBvZiB0aGUgdHVwbGUKICAgIHR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VHVwbGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUdXBsZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqcCogaXMgYSB0dXBsZSBvYmplY3QsIGJ1dCBub3QgYW4gaW5zdGFuY2Ugb2YgYSBzdWJ0eXBlIG9mIHRoZQogICAgdHVwbGUgdHlwZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlUdXBsZV9OZXcoUHlfc3NpemVfdCBsZW4pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHVwbGVfTmV3KFB5X3NzaXplX3QgbGVuKQogCiAgICBSZXR1cm4gYSBuZXcgdHVwbGUgb2JqZWN0IG9mIHNpemUgKmxlbiosIG9yICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR1cGxlX1BhY2soUHlfc3NpemVfdCBuLCAuLi4pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHVwbGVfUGFjayhQeV9zc2l6ZV90IG4sIC4uLikKIAogICAgUmV0dXJuIGEgbmV3IHR1cGxlIG9iamVjdCBvZiBzaXplICpuKiwgb3IgKk5VTEwqIG9uIGZhaWx1cmUuIFRoZSB0dXBsZSB2YWx1ZXMKICAgIGFyZSBpbml0aWFsaXplZCB0byB0aGUgc3Vic2VxdWVudCAqbiogQyBhcmd1bWVudHMgcG9pbnRpbmcgdG8gUHl0aG9uIG9iamVjdHMuCiAgICBgYFB5VHVwbGVfUGFjaygyLCBhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBQeV9CdWlsZFZhbHVlKCIoT08pIiwgYSwgYilgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VHVwbGVfU2l6ZShQeU9iamVjdCAqcCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VHVwbGVfU2l6ZShQeU9iamVjdCAqcCkKIAogICAgVGFrZSBhIHBvaW50ZXIgdG8gYSB0dXBsZSBvYmplY3QsIGFuZCByZXR1cm4gdGhlIHNpemUgb2YgdGhhdCB0dXBsZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VHVwbGVfR0VUX1NJWkUoUHlPYmplY3QgKnApCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeVR1cGxlX0dFVF9TSVpFKFB5T2JqZWN0ICpwKQogCiAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHR1cGxlICpwKiwgd2hpY2ggbXVzdCBiZSBub24tKk5VTEwqIGFuZCBwb2ludCB0byBhIHR1cGxlOwogICAgbm8gZXJyb3IgY2hlY2tpbmcgaXMgcGVyZm9ybWVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zKQogCiAgICBSZXR1cm4gdGhlIG9iamVjdCBhdCBwb3NpdGlvbiAqcG9zKiBpbiB0aGUgdHVwbGUgcG9pbnRlZCB0byBieSAqcCouICBJZiAqcG9zKiBpcwogICAgb3V0IG9mIGJvdW5kcywgcmV0dXJuICpOVUxMKiBhbmQgc2V0cyBhbiA6ZXhjOmBJbmRleEVycm9yYCBleGNlcHRpb24uCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VHVwbGVfR0VUX0lURU0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR1cGxlX0dFVF9JVEVNKFB5T2JqZWN0ICpwLCBQeV9zc2l6ZV90IHBvcykKIAotICAgTGlrZSA6Y2Z1bmM6YFB5VHVwbGVfR2V0SXRlbWAsIGJ1dCBkb2VzIG5vIGNoZWNraW5nIG9mIGl0cyBhcmd1bWVudHMuCisgICBMaWtlIDpjOmZ1bmM6YFB5VHVwbGVfR2V0SXRlbWAsIGJ1dCBkb2VzIG5vIGNoZWNraW5nIG9mIGl0cyBhcmd1bWVudHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VHVwbGVfR2V0U2xpY2UoUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgbG93LCBQeV9zc2l6ZV90IGhpZ2gpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHVwbGVfR2V0U2xpY2UoUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgbG93LCBQeV9zc2l6ZV90IGhpZ2gpCiAKICAgIFRha2UgYSBzbGljZSBvZiB0aGUgdHVwbGUgcG9pbnRlZCB0byBieSAqcCogZnJvbSAqbG93KiB0byAqaGlnaCogYW5kIHJldHVybiBpdAogICAgYXMgYSBuZXcgdHVwbGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VHVwbGVfU2V0SXRlbShQeU9iamVjdCAqcCwgUHlfc3NpemVfdCBwb3MsIFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVR1cGxlX1NldEl0ZW0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zLCBQeU9iamVjdCAqbykKIAogICAgSW5zZXJ0IGEgcmVmZXJlbmNlIHRvIG9iamVjdCAqbyogYXQgcG9zaXRpb24gKnBvcyogb2YgdGhlIHR1cGxlIHBvaW50ZWQgdG8gYnkKICAgICpwKi4gUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3MuCkBAIC04MSw5ICs4MSw5IEBACiAgICAgICBUaGlzIGZ1bmN0aW9uICJzdGVhbHMiIGEgcmVmZXJlbmNlIHRvICpvKi4KIAogCi0uLiBjZnVuY3Rpb246OiB2b2lkIFB5VHVwbGVfU0VUX0lURU0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zLCBQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5VHVwbGVfU0VUX0lURU0oUHlPYmplY3QgKnAsIFB5X3NzaXplX3QgcG9zLCBQeU9iamVjdCAqbykKIAotICAgTGlrZSA6Y2Z1bmM6YFB5VHVwbGVfU2V0SXRlbWAsIGJ1dCBkb2VzIG5vIGVycm9yIGNoZWNraW5nLCBhbmQgc2hvdWxkICpvbmx5KiBiZQorICAgTGlrZSA6YzpmdW5jOmBQeVR1cGxlX1NldEl0ZW1gLCBidXQgZG9lcyBubyBlcnJvciBjaGVja2luZywgYW5kIHNob3VsZCAqb25seSogYmUKICAgIHVzZWQgdG8gZmlsbCBpbiBicmFuZCBuZXcgdHVwbGVzLgogCiAgICAuLiBub3RlOjoKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgIFRoaXMgZnVuY3Rpb24gInN0ZWFscyIgYSByZWZlcmVuY2UgdG8gKm8qLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBfUHlUdXBsZV9SZXNpemUoUHlPYmplY3QgKipwLCBQeV9zc2l6ZV90IG5ld3NpemUpCisuLiBjOmZ1bmN0aW9uOjogaW50IF9QeVR1cGxlX1Jlc2l6ZShQeU9iamVjdCAqKnAsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIAogICAgQ2FuIGJlIHVzZWQgdG8gcmVzaXplIGEgdHVwbGUuICAqbmV3c2l6ZSogd2lsbCBiZSB0aGUgbmV3IGxlbmd0aCBvZiB0aGUgdHVwbGUuCiAgICBCZWNhdXNlIHR1cGxlcyBhcmUgKnN1cHBvc2VkKiB0byBiZSBpbW11dGFibGUsIHRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGVyZQpAQCAtMTA1LDYgKzEwNSw2IEBACiAgICByYWlzZXMgOmV4YzpgTWVtb3J5RXJyb3JgIG9yIDpleGM6YFN5c3RlbUVycm9yYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlUdXBsZV9DbGVhckZyZWVMaXN0KCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUdXBsZV9DbGVhckZyZWVMaXN0KCkKIAogICAgQ2xlYXIgdGhlIGZyZWUgbGlzdC4gUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZWQgaXRlbXMuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZS5yc3QgYi9Eb2MvYy1hcGkvdHlwZS5yc3QKaW5kZXggZDJhNTY3Ni4uYjMzODZlYSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGUucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlLnJzdApAQCAtOCw2OSArOCw3NyBAQAogLi4gaW5kZXg6OiBvYmplY3Q6IHR5cGUKIAogCi0uLiBjdHlwZTo6IFB5VHlwZU9iamVjdAorLi4gYzp0eXBlOjogUHlUeXBlT2JqZWN0CiAKICAgIFRoZSBDIHN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0cyB1c2VkIHRvIGRlc2NyaWJlIGJ1aWx0LWluIHR5cGVzLgogCiAKLS4uIGN2YXI6OiBQeU9iamVjdCogUHlUeXBlX1R5cGUKKy4uIGM6dmFyOjogUHlPYmplY3QqIFB5VHlwZV9UeXBlCiAKICAgIFRoaXMgaXMgdGhlIHR5cGUgb2JqZWN0IGZvciB0eXBlIG9iamVjdHM7IGl0IGlzIHRoZSBzYW1lIG9iamVjdCBhcwogICAgOmNsYXNzOmB0eXBlYCBpbiB0aGUgUHl0aG9uIGxheWVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVR5cGVfQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VHlwZV9DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSB0eXBlIG9iamVjdCwgaW5jbHVkaW5nIGluc3RhbmNlcyBvZiB0eXBlcwogICAgZGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCB0eXBlIG9iamVjdC4gIFJldHVybiBmYWxzZSBpbiBhbGwgb3RoZXIgY2FzZXMuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VHlwZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVR5cGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSB0eXBlIG9iamVjdCwgYnV0IG5vdCBhIHN1YnR5cGUgb2YgdGhlCiAgICBzdGFuZGFyZCB0eXBlIG9iamVjdC4gIFJldHVybiBmYWxzZSBpbiBhbGwgb3RoZXIgY2FzZXMuCiAKIAotLi4gY2Z1bmN0aW9uOjogdW5zaWduZWQgaW50IFB5VHlwZV9DbGVhckNhY2hlKCkKKy4uIGM6ZnVuY3Rpb246OiB1bnNpZ25lZCBpbnQgUHlUeXBlX0NsZWFyQ2FjaGUoKQogCiAgICBDbGVhciB0aGUgaW50ZXJuYWwgbG9va3VwIGNhY2hlLiBSZXR1cm4gdGhlIGN1cnJlbnQgdmVyc2lvbiB0YWcuCiAKKy4uIGM6ZnVuY3Rpb246OiBsb25nIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqIHR5cGUpCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlUeXBlX01vZGlmaWVkKFB5VHlwZU9iamVjdCAqdHlwZSkKKyAgIFJldHVybiB0aGUgOmF0dHI6YHRwX2ZsYWdzYCBtZW1iZXIgb2YgKnR5cGUqLiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseQorICAgbWVhbnQgZm9yIHVzZSB3aXRoIGBQeV9MSU1JVEVEX0FQSWA7IHRoZSBpbmRpdmlkdWFsIGZsYWcgYml0cyBhcmUKKyAgIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlIGFjcm9zcyBQeXRob24gcmVsZWFzZXMsIGJ1dCBhY2Nlc3MgdG8KKyAgIDphdHRyOmB0cF9mbGFnc2AgaXRzZWxmIGlzIG5vdCBwYXJ0IG9mIHRoZSBsaW1pdGVkIEFQSS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5VHlwZV9Nb2RpZmllZChQeVR5cGVPYmplY3QgKnR5cGUpCiAKICAgIEludmFsaWRhdGUgdGhlIGludGVybmFsIGxvb2t1cCBjYWNoZSBmb3IgdGhlIHR5cGUgYW5kIGFsbCBvZiBpdHMKICAgIHN1YnR5cGVzLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBhZnRlciBhbnkgbWFudWFsCiAgICBtb2RpZmljYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgb3IgYmFzZSBjbGFzc2VzIG9mIHRoZSB0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVR5cGVfSGFzRmVhdHVyZShQeU9iamVjdCAqbywgaW50IGZlYXR1cmUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VHlwZV9IYXNGZWF0dXJlKFB5T2JqZWN0ICpvLCBpbnQgZmVhdHVyZSkKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIHR5cGUgb2JqZWN0ICpvKiBzZXRzIHRoZSBmZWF0dXJlICpmZWF0dXJlKi4gIFR5cGUgZmVhdHVyZXMKICAgIGFyZSBkZW5vdGVkIGJ5IHNpbmdsZSBiaXQgZmxhZ3MuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VHlwZV9JU19HQyhQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUeXBlX0lTX0dDKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiB0aGUgdHlwZSBvYmplY3QgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlIGN5Y2xlIGRldGVjdG9yOyB0aGlzCiAgICB0ZXN0cyB0aGUgdHlwZSBmbGFnIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX0dDYC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlUeXBlX0lzU3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUeXBlX0lzU3VidHlwZShQeVR5cGVPYmplY3QgKmEsIFB5VHlwZU9iamVjdCAqYikKIAogICAgUmV0dXJuIHRydWUgaWYgKmEqIGlzIGEgc3VidHlwZSBvZiAqYiouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlUeXBlX0dlbmVyaWNBbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5X3NzaXplX3Qgbml0ZW1zKQogCiAgICBYWFg6IERvY3VtZW50LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR5cGVfR2VuZXJpY05ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlUeXBlX0dlbmVyaWNOZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiAKICAgIFhYWDogRG9jdW1lbnQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VHlwZV9SZWFkeShQeVR5cGVPYmplY3QgKnR5cGUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VHlwZV9SZWFkeShQeVR5cGVPYmplY3QgKnR5cGUpCiAKICAgIEZpbmFsaXplIGEgdHlwZSBvYmplY3QuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb24gYWxsIHR5cGUgb2JqZWN0cyB0byBmaW5pc2gKICAgIHRoZWlyIGluaXRpYWxpemF0aW9uLiAgVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWRkaW5nIGluaGVyaXRlZCBzbG90cwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0IGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CmluZGV4IDdhYTgyN2EuLjRhNjMzNWMgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKQEAgLTYsOSArNiw5IEBACiA9PT09PT09PT09PT0KIAogUGVyaGFwcyBvbmUgb2YgdGhlIG1vc3QgaW1wb3J0YW50IHN0cnVjdHVyZXMgb2YgdGhlIFB5dGhvbiBvYmplY3Qgc3lzdGVtIGlzIHRoZQotc3RydWN0dXJlIHRoYXQgZGVmaW5lcyBhIG5ldyB0eXBlOiB0aGUgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHN0cnVjdHVyZS4gIFR5cGUKLW9iamVjdHMgY2FuIGJlIGhhbmRsZWQgdXNpbmcgYW55IG9mIHRoZSA6Y2Z1bmM6YFB5T2JqZWN0X1wqYCBvcgotOmNmdW5jOmBQeVR5cGVfXCpgIGZ1bmN0aW9ucywgYnV0IGRvIG5vdCBvZmZlciBtdWNoIHRoYXQncyBpbnRlcmVzdGluZyB0byBtb3N0CitzdHJ1Y3R1cmUgdGhhdCBkZWZpbmVzIGEgbmV3IHR5cGU6IHRoZSA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIHN0cnVjdHVyZS4gIFR5cGUKK29iamVjdHMgY2FuIGJlIGhhbmRsZWQgdXNpbmcgYW55IG9mIHRoZSA6YzpmdW5jOmBQeU9iamVjdF9cKmAgb3IKKzpjOmZ1bmM6YFB5VHlwZV9cKmAgZnVuY3Rpb25zLCBidXQgZG8gbm90IG9mZmVyIG11Y2ggdGhhdCdzIGludGVyZXN0aW5nIHRvIG1vc3QKIFB5dGhvbiBhcHBsaWNhdGlvbnMuIFRoZXNlIG9iamVjdHMgYXJlIGZ1bmRhbWVudGFsIHRvIGhvdyBvYmplY3RzIGJlaGF2ZSwgc28KIHRoZXkgYXJlIHZlcnkgaW1wb3J0YW50IHRvIHRoZSBpbnRlcnByZXRlciBpdHNlbGYgYW5kIHRvIGFueSBleHRlbnNpb24gbW9kdWxlCiB0aGF0IGltcGxlbWVudHMgbmV3IHR5cGVzLgpAQCAtMjUsMjEgKzI1LDIxIEBACiBmcmVlZnVuYywgcHJpbnRmdW5jLCBnZXRhdHRyZnVuYywgZ2V0YXR0cm9mdW5jLCBzZXRhdHRyZnVuYywgc2V0YXR0cm9mdW5jLAogcmVwcmZ1bmMsIGhhc2hmdW5jCiAKLVRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmb3IgOmN0eXBlOmBQeVR5cGVPYmplY3RgIGNhbiBiZSBmb3VuZCBpbgorVGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIGNhbiBiZSBmb3VuZCBpbgogOmZpbGU6YEluY2x1ZGUvb2JqZWN0LmhgLiAgRm9yIGNvbnZlbmllbmNlIG9mIHJlZmVyZW5jZSwgdGhpcyByZXBlYXRzIHRoZQogZGVmaW5pdGlvbiBmb3VuZCB0aGVyZToKIAogLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy90eXBlc3RydWN0LmgKIAogCi1UaGUgdHlwZSBvYmplY3Qgc3RydWN0dXJlIGV4dGVuZHMgdGhlIDpjdHlwZTpgUHlWYXJPYmplY3RgIHN0cnVjdHVyZS4gVGhlCitUaGUgdHlwZSBvYmplY3Qgc3RydWN0dXJlIGV4dGVuZHMgdGhlIDpjOnR5cGU6YFB5VmFyT2JqZWN0YCBzdHJ1Y3R1cmUuIFRoZQogOmF0dHI6YG9iX3NpemVgIGZpZWxkIGlzIHVzZWQgZm9yIGR5bmFtaWMgdHlwZXMgKGNyZWF0ZWQgYnkgIDpmdW5jOmB0eXBlX25ld2AsCi11c3VhbGx5IGNhbGxlZCBmcm9tIGEgY2xhc3Mgc3RhdGVtZW50KS4gTm90ZSB0aGF0IDpjZGF0YTpgUHlUeXBlX1R5cGVgICh0aGUKK3VzdWFsbHkgY2FsbGVkIGZyb20gYSBjbGFzcyBzdGF0ZW1lbnQpLiBOb3RlIHRoYXQgOmM6ZGF0YTpgUHlUeXBlX1R5cGVgICh0aGUKIG1ldGF0eXBlKSBpbml0aWFsaXplcyA6YXR0cjpgdHBfaXRlbXNpemVgLCB3aGljaCBtZWFucyB0aGF0IGl0cyBpbnN0YW5jZXMgKGkuZS4KIHR5cGUgb2JqZWN0cykgKm11c3QqIGhhdmUgdGhlIDphdHRyOmBvYl9zaXplYCBmaWVsZC4KIAogCi0uLiBjbWVtYmVyOjogUHlPYmplY3QqIFB5T2JqZWN0Ll9vYl9uZXh0CisuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeU9iamVjdC5fb2JfbmV4dAogICAgICAgICAgICAgIFB5T2JqZWN0KiBQeU9iamVjdC5fb2JfcHJldgogCiAgICBUaGVzZSBmaWVsZHMgYXJlIG9ubHkgcHJlc2VudCB3aGVuIHRoZSBtYWNybyBgYFB5X1RSQUNFX1JFRlNgYCBpcyBkZWZpbmVkLgpAQCAtNTQsNyArNTQsNyBAQAogICAgVGhlc2UgZmllbGRzIGFyZSBub3QgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiBQeV9zc2l6ZV90IFB5T2JqZWN0Lm9iX3JlZmNudAorLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5T2JqZWN0Lm9iX3JlZmNudAogCiAgICBUaGlzIGlzIHRoZSB0eXBlIG9iamVjdCdzIHJlZmVyZW5jZSBjb3VudCwgaW5pdGlhbGl6ZWQgdG8gYGAxYGAgYnkgdGhlCiAgICBgYFB5T2JqZWN0X0hFQURfSU5JVGBgIG1hY3JvLiAgTm90ZSB0aGF0IGZvciBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0eXBlIG9iamVjdHMsCkBAIC02NSw3ICs2NSw3IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKIAotLi4gY21lbWJlcjo6IFB5VHlwZU9iamVjdCogUHlPYmplY3Qub2JfdHlwZQorLi4gYzptZW1iZXI6OiBQeVR5cGVPYmplY3QqIFB5T2JqZWN0Lm9iX3R5cGUKIAogICAgVGhpcyBpcyB0aGUgdHlwZSdzIHR5cGUsIGluIG90aGVyIHdvcmRzIGl0cyBtZXRhdHlwZS4gIEl0IGlzIGluaXRpYWxpemVkIGJ5IHRoZQogICAgYXJndW1lbnQgdG8gdGhlIGBgUHlPYmplY3RfSEVBRF9JTklUYGAgbWFjcm8sIGFuZCBpdHMgdmFsdWUgc2hvdWxkIG5vcm1hbGx5IGJlCkBAIC03OSwxNCArNzksMTQgQEAKICAgICAgIEZvb19UeXBlLm9iX3R5cGUgPSAmUHlUeXBlX1R5cGU7CiAKICAgIFRoaXMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIGFueSBpbnN0YW5jZXMgb2YgdGhlIHR5cGUgYXJlIGNyZWF0ZWQuCi0gICA6Y2Z1bmM6YFB5VHlwZV9SZWFkeWAgY2hlY2tzIGlmIDphdHRyOmBvYl90eXBlYCBpcyAqTlVMTCosIGFuZCBpZiBzbywKKyAgIDpjOmZ1bmM6YFB5VHlwZV9SZWFkeWAgY2hlY2tzIGlmIDphdHRyOmBvYl90eXBlYCBpcyAqTlVMTCosIGFuZCBpZiBzbywKICAgIGluaXRpYWxpemVzIGl0IHRvIHRoZSA6YXR0cjpgb2JfdHlwZWAgZmllbGQgb2YgdGhlIGJhc2UgY2xhc3MuCi0gICA6Y2Z1bmM6YFB5VHlwZV9SZWFkeWAgd2lsbCBub3QgY2hhbmdlIHRoaXMgZmllbGQgaWYgaXQgaXMgbm9uLXplcm8uCisgICA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIHdpbGwgbm90IGNoYW5nZSB0aGlzIGZpZWxkIGlmIGl0IGlzIG5vbi16ZXJvLgogCiAgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogUHlfc3NpemVfdCBQeVZhck9iamVjdC5vYl9zaXplCisuLiBjOm1lbWJlcjo6IFB5X3NzaXplX3QgUHlWYXJPYmplY3Qub2Jfc2l6ZQogCiAgICBGb3Igc3RhdGljYWxseSBhbGxvY2F0ZWQgdHlwZSBvYmplY3RzLCB0aGlzIHNob3VsZCBiZSBpbml0aWFsaXplZCB0byB6ZXJvLiAgRm9yCiAgICBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdHlwZSBvYmplY3RzLCB0aGlzIGZpZWxkIGhhcyBhIHNwZWNpYWwgaW50ZXJuYWwgbWVhbmluZy4KQEAgLTk0LDcgKzk0LDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX25hbWUKKy4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX25hbWUKIAogICAgUG9pbnRlciB0byBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSB0eXBlLiBGb3IgdHlwZXMKICAgIHRoYXQgYXJlIGFjY2Vzc2libGUgYXMgbW9kdWxlIGdsb2JhbHMsIHRoZSBzdHJpbmcgc2hvdWxkIGJlIHRoZSBmdWxsIG1vZHVsZQpAQCAtMTIxLDcgKzEyMSw3IEBACiAgICBUaGlzIGZpZWxkIGlzIG5vdCBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKIAotLi4gY21lbWJlcjo6IFB5X3NzaXplX3QgUHlUeXBlT2JqZWN0LnRwX2Jhc2ljc2l6ZQorLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9iYXNpY3NpemUKICAgICAgICAgICAgICBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9pdGVtc2l6ZQogCiAgICBUaGVzZSBmaWVsZHMgYWxsb3cgY2FsY3VsYXRpbmcgdGhlIHNpemUgaW4gYnl0ZXMgb2YgaW5zdGFuY2VzIG9mIHRoZSB0eXBlLgpAQCAtMTQzLDcgKzE0Myw3IEBACiAgICBmaWVsZCkuCiAKICAgIFRoZSBiYXNpYyBzaXplIGluY2x1ZGVzIHRoZSBmaWVsZHMgaW4gdGhlIGluc3RhbmNlIGRlY2xhcmVkIGJ5IHRoZSBtYWNybwotICAgOmNtYWNybzpgUHlPYmplY3RfSEVBRGAgb3IgOmNtYWNybzpgUHlPYmplY3RfVkFSX0hFQURgICh3aGljaGV2ZXIgaXMgdXNlZCB0bworICAgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIG9yIDpjOm1hY3JvOmBQeU9iamVjdF9WQVJfSEVBRGAgKHdoaWNoZXZlciBpcyB1c2VkIHRvCiAgICBkZWNsYXJlIHRoZSBpbnN0YW5jZSBzdHJ1Y3QpIGFuZCB0aGlzIGluIHR1cm4gaW5jbHVkZXMgdGhlIDphdHRyOmBfb2JfcHJldmAgYW5kCiAgICA6YXR0cjpgX29iX25leHRgIGZpZWxkcyBpZiB0aGV5IGFyZSBwcmVzZW50LiAgVGhpcyBtZWFucyB0aGF0IHRoZSBvbmx5IGNvcnJlY3QKICAgIHdheSB0byBnZXQgYW4gaW5pdGlhbGl6ZXIgZm9yIHRoZSA6YXR0cjpgdHBfYmFzaWNzaXplYCBpcyB0byB1c2UgdGhlCkBAIC0xNjMsMTQgKzE2MywxNCBAQAogICAgYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciBgYGRvdWJsZWBgKS4KIAogCi0uLiBjbWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZGVhbGxvYworLi4gYzptZW1iZXI6OiBkZXN0cnVjdG9yIFB5VHlwZU9iamVjdC50cF9kZWFsbG9jCiAKICAgIEEgcG9pbnRlciB0byB0aGUgaW5zdGFuY2UgZGVzdHJ1Y3RvciBmdW5jdGlvbi4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBkZWZpbmVkCiAgICB1bmxlc3MgdGhlIHR5cGUgZ3VhcmFudGVlcyB0aGF0IGl0cyBpbnN0YW5jZXMgd2lsbCBuZXZlciBiZSBkZWFsbG9jYXRlZCAoYXMgaXMKICAgIHRoZSBjYXNlIGZvciB0aGUgc2luZ2xldG9ucyBgYE5vbmVgYCBhbmQgYGBFbGxpcHNpc2BgKS4KIAotICAgVGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSA6Y2Z1bmM6YFB5X0RFQ1JFRmAgYW5kCi0gICA6Y2Z1bmM6YFB5X1hERUNSRUZgIG1hY3JvcyB3aGVuIHRoZSBuZXcgcmVmZXJlbmNlIGNvdW50IGlzIHplcm8uICBBdCB0aGlzIHBvaW50LAorICAgVGhlIGRlc3RydWN0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSA6YzpmdW5jOmBQeV9ERUNSRUZgIGFuZAorICAgOmM6ZnVuYzpgUHlfWERFQ1JFRmAgbWFjcm9zIHdoZW4gdGhlIG5ldyByZWZlcmVuY2UgY291bnQgaXMgemVyby4gIEF0IHRoaXMgcG9pbnQsCiAgICB0aGUgaW5zdGFuY2UgaXMgc3RpbGwgaW4gZXhpc3RlbmNlLCBidXQgdGhlcmUgYXJlIG5vIHJlZmVyZW5jZXMgdG8gaXQuICBUaGUKICAgIGRlc3RydWN0b3IgZnVuY3Rpb24gc2hvdWxkIGZyZWUgYWxsIHJlZmVyZW5jZXMgd2hpY2ggdGhlIGluc3RhbmNlIG93bnMsIGZyZWUgYWxsCiAgICBtZW1vcnkgYnVmZmVycyBvd25lZCBieSB0aGUgaW5zdGFuY2UgKHVzaW5nIHRoZSBmcmVlaW5nIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcKQEAgLTE3OSwxNSArMTc5LDE1IEBACiAgICBzdWJ0eXBhYmxlIChkb2Vzbid0IGhhdmUgdGhlIDpjb25zdDpgUHlfVFBGTEFHU19CQVNFVFlQRWAgZmxhZyBiaXQgc2V0KSwgaXQgaXMKICAgIHBlcm1pc3NpYmxlIHRvIGNhbGwgdGhlIG9iamVjdCBkZWFsbG9jYXRvciBkaXJlY3RseSBpbnN0ZWFkIG9mIHZpYQogICAgOmF0dHI6YHRwX2ZyZWVgLiAgVGhlIG9iamVjdCBkZWFsbG9jYXRvciBzaG91bGQgYmUgdGhlIG9uZSB1c2VkIHRvIGFsbG9jYXRlIHRoZQotICAgaW5zdGFuY2U7IHRoaXMgaXMgbm9ybWFsbHkgOmNmdW5jOmBQeU9iamVjdF9EZWxgIGlmIHRoZSBpbnN0YW5jZSB3YXMgYWxsb2NhdGVkCi0gICB1c2luZyA6Y2Z1bmM6YFB5T2JqZWN0X05ld2Agb3IgOmNmdW5jOmBQeU9iamVjdF9WYXJOZXdgLCBvcgotICAgOmNmdW5jOmBQeU9iamVjdF9HQ19EZWxgIGlmIHRoZSBpbnN0YW5jZSB3YXMgYWxsb2NhdGVkIHVzaW5nCi0gICA6Y2Z1bmM6YFB5T2JqZWN0X0dDX05ld2Agb3IgOmNmdW5jOmBQeU9iamVjdF9HQ19OZXdWYXJgLgorICAgaW5zdGFuY2U7IHRoaXMgaXMgbm9ybWFsbHkgOmM6ZnVuYzpgUHlPYmplY3RfRGVsYCBpZiB0aGUgaW5zdGFuY2Ugd2FzIGFsbG9jYXRlZAorICAgdXNpbmcgOmM6ZnVuYzpgUHlPYmplY3RfTmV3YCBvciA6YzpmdW5jOmBQeU9iamVjdF9WYXJOZXdgLCBvcgorICAgOmM6ZnVuYzpgUHlPYmplY3RfR0NfRGVsYCBpZiB0aGUgaW5zdGFuY2Ugd2FzIGFsbG9jYXRlZCB1c2luZworICAgOmM6ZnVuYzpgUHlPYmplY3RfR0NfTmV3YCBvciA6YzpmdW5jOmBQeU9iamVjdF9HQ19OZXdWYXJgLgogCiAgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogcHJpbnRmdW5jIFB5VHlwZU9iamVjdC50cF9wcmludAorLi4gYzptZW1iZXI6OiBwcmludGZ1bmMgUHlUeXBlT2JqZWN0LnRwX3ByaW50CiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIHByaW50IGZ1bmN0aW9uLgogCkBAIC0xOTgsNyArMTk4LDcgQEAKICAgICpOVUxMKi4gIEEgdHlwZSBzaG91bGQgbmV2ZXIgaW1wbGVtZW50IDphdHRyOmB0cF9wcmludGAgaW4gYSB3YXkgdGhhdCBwcm9kdWNlcwogICAgZGlmZmVyZW50IG91dHB1dCB0aGFuIDphdHRyOmB0cF9yZXByYCBvciA6YXR0cjpgdHBfc3RyYCB3b3VsZC4KIAotICAgVGhlIHByaW50IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyA6Y2Z1bmM6YFB5T2JqZWN0X1ByaW50YDoKKyAgIFRoZSBwcmludCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgOmM6ZnVuYzpgUHlPYmplY3RfUHJpbnRgOgogICAgYGBpbnQgdHBfcHJpbnQoUHlPYmplY3QgKnNlbGYsIEZJTEUgKmZpbGUsIGludCBmbGFncylgYC4gIFRoZSAqc2VsZiogYXJndW1lbnQgaXMKICAgIHRoZSBpbnN0YW5jZSB0byBiZSBwcmludGVkLiAgVGhlICpmaWxlKiBhcmd1bWVudCBpcyB0aGUgc3RkaW8gZmlsZSB0byB3aGljaCBpdAogICAgaXMgdG8gYmUgcHJpbnRlZC4gIFRoZSAqZmxhZ3MqIGFyZ3VtZW50IGlzIGNvbXBvc2VkIG9mIGZsYWcgYml0cy4gVGhlIG9ubHkgZmxhZwpAQCAtMjE2LDQ3ICsyMTYsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiBnZXRhdHRyZnVuYyBQeVR5cGVPYmplY3QudHBfZ2V0YXR0cgorLi4gYzptZW1iZXI6OiBnZXRhdHRyZnVuYyBQeVR5cGVPYmplY3QudHBfZ2V0YXR0cgogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSBnZXQtYXR0cmlidXRlLXN0cmluZyBmdW5jdGlvbi4KIAogICAgVGhpcyBmaWVsZCBpcyBkZXByZWNhdGVkLiAgV2hlbiBpdCBpcyBkZWZpbmVkLCBpdCBzaG91bGQgcG9pbnQgdG8gYSBmdW5jdGlvbgogICAgdGhhdCBhY3RzIHRoZSBzYW1lIGFzIHRoZSA6YXR0cjpgdHBfZ2V0YXR0cm9gIGZ1bmN0aW9uLCBidXQgdGFraW5nIGEgQyBzdHJpbmcKICAgIGluc3RlYWQgb2YgYSBQeXRob24gc3RyaW5nIG9iamVjdCB0byBnaXZlIHRoZSBhdHRyaWJ1dGUgbmFtZS4gIFRoZSBzaWduYXR1cmUgaXMKLSAgIHRoZSBzYW1lIGFzIGZvciA6Y2Z1bmM6YFB5T2JqZWN0X0dldEF0dHJTdHJpbmdgLgorICAgdGhlIHNhbWUgYXMgZm9yIDpjOmZ1bmM6YFB5T2JqZWN0X0dldEF0dHJTdHJpbmdgLgogCiAgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcyB0b2dldGhlciB3aXRoIDphdHRyOmB0cF9nZXRhdHRyb2A6IGEgc3VidHlwZQogICAgaW5oZXJpdHMgYm90aCA6YXR0cjpgdHBfZ2V0YXR0cmAgYW5kIDphdHRyOmB0cF9nZXRhdHRyb2AgZnJvbSBpdHMgYmFzZSB0eXBlIHdoZW4KICAgIHRoZSBzdWJ0eXBlJ3MgOmF0dHI6YHRwX2dldGF0dHJgIGFuZCA6YXR0cjpgdHBfZ2V0YXR0cm9gIGFyZSBib3RoICpOVUxMKi4KIAogCi0uLiBjbWVtYmVyOjogc2V0YXR0cmZ1bmMgUHlUeXBlT2JqZWN0LnRwX3NldGF0dHIKKy4uIGM6bWVtYmVyOjogc2V0YXR0cmZ1bmMgUHlUeXBlT2JqZWN0LnRwX3NldGF0dHIKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgc2V0LWF0dHJpYnV0ZS1zdHJpbmcgZnVuY3Rpb24uCiAKICAgIFRoaXMgZmllbGQgaXMgZGVwcmVjYXRlZC4gIFdoZW4gaXQgaXMgZGVmaW5lZCwgaXQgc2hvdWxkIHBvaW50IHRvIGEgZnVuY3Rpb24KICAgIHRoYXQgYWN0cyB0aGUgc2FtZSBhcyB0aGUgOmF0dHI6YHRwX3NldGF0dHJvYCBmdW5jdGlvbiwgYnV0IHRha2luZyBhIEMgc3RyaW5nCiAgICBpbnN0ZWFkIG9mIGEgUHl0aG9uIHN0cmluZyBvYmplY3QgdG8gZ2l2ZSB0aGUgYXR0cmlidXRlIG5hbWUuICBUaGUgc2lnbmF0dXJlIGlzCi0gICB0aGUgc2FtZSBhcyBmb3IgOmNmdW5jOmBQeU9iamVjdF9TZXRBdHRyU3RyaW5nYC4KKyAgIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9TZXRBdHRyU3RyaW5nYC4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMgdG9nZXRoZXIgd2l0aCA6YXR0cjpgdHBfc2V0YXR0cm9gOiBhIHN1YnR5cGUKICAgIGluaGVyaXRzIGJvdGggOmF0dHI6YHRwX3NldGF0dHJgIGFuZCA6YXR0cjpgdHBfc2V0YXR0cm9gIGZyb20gaXRzIGJhc2UgdHlwZSB3aGVuCiAgICB0aGUgc3VidHlwZSdzIDphdHRyOmB0cF9zZXRhdHRyYCBhbmQgOmF0dHI6YHRwX3NldGF0dHJvYCBhcmUgYm90aCAqTlVMTCouCiAKIAotLi4gY21lbWJlcjo6IHZvaWQqIFB5VHlwZU9iamVjdC50cF9yZXNlcnZlZAorLi4gYzptZW1iZXI6OiB2b2lkKiBQeVR5cGVPYmplY3QudHBfcmVzZXJ2ZWQKIAogICAgUmVzZXJ2ZWQgc2xvdCwgZm9ybWVybHkga25vd24gYXMgdHBfY29tcGFyZS4KIAogCi0uLiBjbWVtYmVyOjogcmVwcmZ1bmMgUHlUeXBlT2JqZWN0LnRwX3JlcHIKKy4uIGM6bWVtYmVyOjogcmVwcmZ1bmMgUHlUeXBlT2JqZWN0LnRwX3JlcHIKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiByZXByCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICA6ZnVuYzpgcmVwcmAuCiAKLSAgIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgZm9yIDpjZnVuYzpgUHlPYmplY3RfUmVwcmA7IGl0IG11c3QgcmV0dXJuIGEgc3RyaW5nCisgICBUaGUgc2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9SZXByYDsgaXQgbXVzdCByZXR1cm4gYSBzdHJpbmcKICAgIG9yIGEgVW5pY29kZSBvYmplY3QuICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSBzdHJpbmcgdGhhdCwgd2hlbgogICAgcGFzc2VkIHRvIDpmdW5jOmBldmFsYCwgZ2l2ZW4gYSBzdWl0YWJsZSBlbnZpcm9ubWVudCwgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUKICAgIHNhbWUgdmFsdWUuICBJZiB0aGlzIGlzIG5vdCBmZWFzaWJsZSwgaXQgc2hvdWxkIHJldHVybiBhIHN0cmluZyBzdGFydGluZyB3aXRoCkBAIC0yNjksNyArMjY5LDcgQEAKIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKLS4uIGNtZW1iZXI6OiBQeU51bWJlck1ldGhvZHMqIHRwX2FzX251bWJlcgorLi4gYzptZW1iZXI6OiBQeU51bWJlck1ldGhvZHMqIHRwX2FzX251bWJlcgogCiAgICBQb2ludGVyIHRvIGFuIGFkZGl0aW9uYWwgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZmllbGRzIHJlbGV2YW50IG9ubHkgdG8KICAgIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IHRoZSBudW1iZXIgcHJvdG9jb2wuICBUaGVzZSBmaWVsZHMgYXJlIGRvY3VtZW50ZWQgaW4KQEAgLTI3OSw3ICsyNzksNyBAQAogICAgaW5oZXJpdGVkIGluZGl2aWR1YWxseS4KIAogCi0uLiBjbWVtYmVyOjogUHlTZXF1ZW5jZU1ldGhvZHMqIHRwX2FzX3NlcXVlbmNlCisuLiBjOm1lbWJlcjo6IFB5U2VxdWVuY2VNZXRob2RzKiB0cF9hc19zZXF1ZW5jZQogCiAgICBQb2ludGVyIHRvIGFuIGFkZGl0aW9uYWwgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZmllbGRzIHJlbGV2YW50IG9ubHkgdG8KICAgIG9iamVjdHMgd2hpY2ggaW1wbGVtZW50IHRoZSBzZXF1ZW5jZSBwcm90b2NvbC4gIFRoZXNlIGZpZWxkcyBhcmUgZG9jdW1lbnRlZApAQCAtMjg5LDcgKzI4OSw3IEBACiAgICBhcmUgaW5oZXJpdGVkIGluZGl2aWR1YWxseS4KIAogCi0uLiBjbWVtYmVyOjogUHlNYXBwaW5nTWV0aG9kcyogdHBfYXNfbWFwcGluZworLi4gYzptZW1iZXI6OiBQeU1hcHBpbmdNZXRob2RzKiB0cF9hc19tYXBwaW5nCiAKICAgIFBvaW50ZXIgdG8gYW4gYWRkaXRpb25hbCBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBmaWVsZHMgcmVsZXZhbnQgb25seSB0bwogICAgb2JqZWN0cyB3aGljaCBpbXBsZW1lbnQgdGhlIG1hcHBpbmcgcHJvdG9jb2wuICBUaGVzZSBmaWVsZHMgYXJlIGRvY3VtZW50ZWQgaW4KQEAgLTI5OSwyNSArMjk5LDI1IEBACiAgICBhcmUgaW5oZXJpdGVkIGluZGl2aWR1YWxseS4KIAogCi0uLiBjbWVtYmVyOjogaGFzaGZ1bmMgUHlUeXBlT2JqZWN0LnRwX2hhc2gKKy4uIGM6bWVtYmVyOjogaGFzaGZ1bmMgUHlUeXBlT2JqZWN0LnRwX2hhc2gKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBoYXNoCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGltcGxlbWVudHMgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICA6ZnVuYzpgaGFzaGAuCiAKLSAgIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgZm9yIDpjZnVuYzpgUHlPYmplY3RfSGFzaGA7IGl0IG11c3QgcmV0dXJuIGEgQwotICAgbG9uZy4gIFRoZSB2YWx1ZSBgYC0xYGAgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBhcyBhIG5vcm1hbCByZXR1cm4gdmFsdWU7IHdoZW4gYW4KLSAgIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBoYXNoIHZhbHVlLCB0aGUgZnVuY3Rpb24gc2hvdWxkIHNldAotICAgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gYGAtMWBgLgorICAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBmb3IgOmM6ZnVuYzpgUHlPYmplY3RfSGFzaGA7IGl0IG11c3QgcmV0dXJuIGEKKyAgIHZhbHVlIG9mIHRoZSB0eXBlIFB5X2hhc2hfdC4gIFRoZSB2YWx1ZSBgYC0xYGAgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBhcyBhCisgICBub3JtYWwgcmV0dXJuIHZhbHVlOyB3aGVuIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGNvbXB1dGF0aW9uIG9mIHRoZSBoYXNoCisgICB2YWx1ZSwgdGhlIGZ1bmN0aW9uIHNob3VsZCBzZXQgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gYGAtMWBgLgogCi0gICBUaGlzIGZpZWxkIGNhbiBiZSBzZXQgZXhwbGljaXRseSB0byA6Y2Z1bmM6YFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZGAgdG8KKyAgIFRoaXMgZmllbGQgY2FuIGJlIHNldCBleHBsaWNpdGx5IHRvIDpjOmZ1bmM6YFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZGAgdG8KICAgIGJsb2NrIGluaGVyaXRhbmNlIG9mIHRoZSBoYXNoIG1ldGhvZCBmcm9tIGEgcGFyZW50IHR5cGUuIFRoaXMgaXMgaW50ZXJwcmV0ZWQKICAgIGFzIHRoZSBlcXVpdmFsZW50IG9mIGBgX19oYXNoX18gPSBOb25lYGAgYXQgdGhlIFB5dGhvbiBsZXZlbCwgY2F1c2luZwogICAgYGBpc2luc3RhbmNlKG8sIGNvbGxlY3Rpb25zLkhhc2hhYmxlKWBgIHRvIGNvcnJlY3RseSByZXR1cm4gYGBGYWxzZWBgLiBOb3RlCiAgICB0aGF0IHRoZSBjb252ZXJzZSBpcyBhbHNvIHRydWUgLSBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgb24gYSBjbGFzcyBhdAogICAgdGhlIFB5dGhvbiBsZXZlbCB3aWxsIHJlc3VsdCBpbiB0aGUgYGB0cF9oYXNoYGAgc2xvdCBiZWluZyBzZXQgdG8KLSAgIDpjZnVuYzpgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkYC4KKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZGAuCiAKICAgIFdoZW4gdGhpcyBmaWVsZCBpcyBub3Qgc2V0LCBhbiBhdHRlbXB0IHRvIHRha2UgdGhlIGhhc2ggb2YgdGhlCiAgICBvYmplY3QgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCkBAIC0zMjgsMzkgKzMyOCwzOSBAQAogICAgOmF0dHI6YHRwX3JpY2hjb21wYXJlYCBhbmQgOmF0dHI6YHRwX2hhc2hgIGFyZSBib3RoICpOVUxMKi4KIAogCi0uLiBjbWVtYmVyOjogdGVybmFyeWZ1bmMgUHlUeXBlT2JqZWN0LnRwX2NhbGwKKy4uIGM6bWVtYmVyOjogdGVybmFyeWZ1bmMgUHlUeXBlT2JqZWN0LnRwX2NhbGwKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyBjYWxsaW5nIHRoZSBvYmplY3QuICBUaGlzCiAgICBzaG91bGQgYmUgKk5VTEwqIGlmIHRoZSBvYmplY3QgaXMgbm90IGNhbGxhYmxlLiAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcwotICAgZm9yIDpjZnVuYzpgUHlPYmplY3RfQ2FsbGAuCisgICBmb3IgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbGAuCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiByZXByZnVuYyBQeVR5cGVPYmplY3QudHBfc3RyCisuLiBjOm1lbWJlcjo6IHJlcHJmdW5jIFB5VHlwZU9iamVjdC50cF9zdHIKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uCiAgICA6ZnVuYzpgc3RyYC4gIChOb3RlIHRoYXQgOmNsYXNzOmBzdHJgIGlzIGEgdHlwZSBub3csIGFuZCA6ZnVuYzpgc3RyYCBjYWxscyB0aGUKLSAgIGNvbnN0cnVjdG9yIGZvciB0aGF0IHR5cGUuICBUaGlzIGNvbnN0cnVjdG9yIGNhbGxzIDpjZnVuYzpgUHlPYmplY3RfU3RyYCB0byBkbwotICAgdGhlIGFjdHVhbCB3b3JrLCBhbmQgOmNmdW5jOmBQeU9iamVjdF9TdHJgIHdpbGwgY2FsbCB0aGlzIGhhbmRsZXIuKQorICAgY29uc3RydWN0b3IgZm9yIHRoYXQgdHlwZS4gIFRoaXMgY29uc3RydWN0b3IgY2FsbHMgOmM6ZnVuYzpgUHlPYmplY3RfU3RyYCB0byBkbworICAgdGhlIGFjdHVhbCB3b3JrLCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfU3RyYCB3aWxsIGNhbGwgdGhpcyBoYW5kbGVyLikKIAotICAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBmb3IgOmNmdW5jOmBQeU9iamVjdF9TdHJgOyBpdCBtdXN0IHJldHVybiBhIHN0cmluZworICAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBmb3IgOmM6ZnVuYzpgUHlPYmplY3RfU3RyYDsgaXQgbXVzdCByZXR1cm4gYSBzdHJpbmcKICAgIG9yIGEgVW5pY29kZSBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYSAiZnJpZW5kbHkiIHN0cmluZwogICAgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCwgYXMgdGhpcyBpcyB0aGUgcmVwcmVzZW50YXRpb24gdGhhdCB3aWxsIGJlIHVzZWQsCiAgICBhbW9uZyBvdGhlciB0aGluZ3MsIGJ5IHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgogCi0gICBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgOmNmdW5jOmBQeU9iamVjdF9SZXByYCBpcyBjYWxsZWQgdG8gcmV0dXJuIGEgc3RyaW5nCisgICBXaGVuIHRoaXMgZmllbGQgaXMgbm90IHNldCwgOmM6ZnVuYzpgUHlPYmplY3RfUmVwcmAgaXMgY2FsbGVkIHRvIHJldHVybiBhIHN0cmluZwogICAgcmVwcmVzZW50YXRpb24uCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiBnZXRhdHRyb2Z1bmMgUHlUeXBlT2JqZWN0LnRwX2dldGF0dHJvCisuLiBjOm1lbWJlcjo6IGdldGF0dHJvZnVuYyBQeVR5cGVPYmplY3QudHBfZ2V0YXR0cm8KIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgZ2V0LWF0dHJpYnV0ZSBmdW5jdGlvbi4KIAotICAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBmb3IgOmNmdW5jOmBQeU9iamVjdF9HZXRBdHRyYC4gIEl0IGlzIHVzdWFsbHkKLSAgIGNvbnZlbmllbnQgdG8gc2V0IHRoaXMgZmllbGQgdG8gOmNmdW5jOmBQeU9iamVjdF9HZW5lcmljR2V0QXR0cmAsIHdoaWNoCisgICBUaGUgc2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIGZvciA6YzpmdW5jOmBQeU9iamVjdF9HZXRBdHRyYC4gIEl0IGlzIHVzdWFsbHkKKyAgIGNvbnZlbmllbnQgdG8gc2V0IHRoaXMgZmllbGQgdG8gOmM6ZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJgLCB3aGljaAogICAgaW1wbGVtZW50cyB0aGUgbm9ybWFsIHdheSBvZiBsb29raW5nIGZvciBvYmplY3QgYXR0cmlidXRlcy4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMgdG9nZXRoZXIgd2l0aCA6YXR0cjpgdHBfZ2V0YXR0cmA6IGEgc3VidHlwZQpAQCAtMzY4LDEyICszNjgsMTIgQEAKICAgIHRoZSBzdWJ0eXBlJ3MgOmF0dHI6YHRwX2dldGF0dHJgIGFuZCA6YXR0cjpgdHBfZ2V0YXR0cm9gIGFyZSBib3RoICpOVUxMKi4KIAogCi0uLiBjbWVtYmVyOjogc2V0YXR0cm9mdW5jIFB5VHlwZU9iamVjdC50cF9zZXRhdHRybworLi4gYzptZW1iZXI6OiBzZXRhdHRyb2Z1bmMgUHlUeXBlT2JqZWN0LnRwX3NldGF0dHJvCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIHNldC1hdHRyaWJ1dGUgZnVuY3Rpb24uCiAKLSAgIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMgZm9yIDpjZnVuYzpgUHlPYmplY3RfU2V0QXR0cmAuICBJdCBpcyB1c3VhbGx5Ci0gICBjb252ZW5pZW50IHRvIHNldCB0aGlzIGZpZWxkIHRvIDpjZnVuYzpgUHlPYmplY3RfR2VuZXJpY1NldEF0dHJgLCB3aGljaAorICAgVGhlIHNpZ25hdHVyZSBpcyB0aGUgc2FtZSBhcyBmb3IgOmM6ZnVuYzpgUHlPYmplY3RfU2V0QXR0cmAuICBJdCBpcyB1c3VhbGx5CisgICBjb252ZW5pZW50IHRvIHNldCB0aGlzIGZpZWxkIHRvIDpjOmZ1bmM6YFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyYCwgd2hpY2gKICAgIGltcGxlbWVudHMgdGhlIG5vcm1hbCB3YXkgb2Ygc2V0dGluZyBvYmplY3QgYXR0cmlidXRlcy4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMgdG9nZXRoZXIgd2l0aCA6YXR0cjpgdHBfc2V0YXR0cmA6IGEgc3VidHlwZQpAQCAtMzgxLDcgKzM4MSw3IEBACiAgICB0aGUgc3VidHlwZSdzIDphdHRyOmB0cF9zZXRhdHRyYCBhbmQgOmF0dHI6YHRwX3NldGF0dHJvYCBhcmUgYm90aCAqTlVMTCouCiAKIAotLi4gY21lbWJlcjo6IFB5QnVmZmVyUHJvY3MqIFB5VHlwZU9iamVjdC50cF9hc19idWZmZXIKKy4uIGM6bWVtYmVyOjogUHlCdWZmZXJQcm9jcyogUHlUeXBlT2JqZWN0LnRwX2FzX2J1ZmZlcgogCiAgICBQb2ludGVyIHRvIGFuIGFkZGl0aW9uYWwgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgZmllbGRzIHJlbGV2YW50IG9ubHkgdG8gb2JqZWN0cwogICAgd2hpY2ggaW1wbGVtZW50IHRoZSBidWZmZXIgaW50ZXJmYWNlLiAgVGhlc2UgZmllbGRzIGFyZSBkb2N1bWVudGVkIGluCkBAIC0zOTEsNyArMzkxLDcgQEAKICAgIGluaGVyaXRlZCBpbmRpdmlkdWFsbHkuCiAKIAotLi4gY21lbWJlcjo6IGxvbmcgUHlUeXBlT2JqZWN0LnRwX2ZsYWdzCisuLiBjOm1lbWJlcjo6IGxvbmcgUHlUeXBlT2JqZWN0LnRwX2ZsYWdzCiAKICAgIFRoaXMgZmllbGQgaXMgYSBiaXQgbWFzayBvZiB2YXJpb3VzIGZsYWdzLiAgU29tZSBmbGFncyBpbmRpY2F0ZSB2YXJpYW50CiAgICBzZW1hbnRpY3MgZm9yIGNlcnRhaW4gc2l0dWF0aW9uczsgb3RoZXJzIGFyZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgY2VydGFpbgpAQCAtNDE0LDcgKzQxNCw3IEBACiAKICAgIFRoZSBmb2xsb3dpbmcgYml0IG1hc2tzIGFyZSBjdXJyZW50bHkgZGVmaW5lZDsgdGhlc2UgY2FuIGJlIE9SZWQgdG9nZXRoZXIgdXNpbmcKICAgIHRoZSBgYHxgYCBvcGVyYXRvciB0byBmb3JtIHRoZSB2YWx1ZSBvZiB0aGUgOmF0dHI6YHRwX2ZsYWdzYCBmaWVsZC4gIFRoZSBtYWNybwotICAgOmNmdW5jOmBQeVR5cGVfSGFzRmVhdHVyZWAgdGFrZXMgYSB0eXBlIGFuZCBhIGZsYWdzIHZhbHVlLCAqdHAqIGFuZCAqZiosIGFuZAorICAgOmM6ZnVuYzpgUHlUeXBlX0hhc0ZlYXR1cmVgIHRha2VzIGEgdHlwZSBhbmQgYSBmbGFncyB2YWx1ZSwgKnRwKiBhbmQgKmYqLCBhbmQKICAgIGNoZWNrcyB3aGV0aGVyIGBgdHAtPnRwX2ZsYWdzICYgZmBgIGlzIG5vbi16ZXJvLgogCiAKQEAgLTQzOCwyMCArNDM4LDIwIEBACiAgICAuLiBkYXRhOjogUHlfVFBGTEFHU19SRUFEWQogCiAgICAgICBUaGlzIGJpdCBpcyBzZXQgd2hlbiB0aGUgdHlwZSBvYmplY3QgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQgYnkKLSAgICAgIDpjZnVuYzpgUHlUeXBlX1JlYWR5YC4KKyAgICAgIDpjOmZ1bmM6YFB5VHlwZV9SZWFkeWAuCiAKIAogICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfUkVBRFlJTkcKIAotICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoaWxlIDpjZnVuYzpgUHlUeXBlX1JlYWR5YCBpcyBpbiB0aGUgcHJvY2VzcyBvZiBpbml0aWFsaXppbmcKKyAgICAgIFRoaXMgYml0IGlzIHNldCB3aGlsZSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIGlzIGluIHRoZSBwcm9jZXNzIG9mIGluaXRpYWxpemluZwogICAgICAgdGhlIHR5cGUgb2JqZWN0LgogCiAKICAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0hBVkVfR0MKIAogICAgICAgVGhpcyBiaXQgaXMgc2V0IHdoZW4gdGhlIG9iamVjdCBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24uICBJZiB0aGlzIGJpdAotICAgICAgaXMgc2V0LCBpbnN0YW5jZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nIDpjZnVuYzpgUHlPYmplY3RfR0NfTmV3YCBhbmQKLSAgICAgIGRlc3Ryb3llZCB1c2luZyA6Y2Z1bmM6YFB5T2JqZWN0X0dDX0RlbGAuICBNb3JlIGluZm9ybWF0aW9uIGluIHNlY3Rpb24KKyAgICAgIGlzIHNldCwgaW5zdGFuY2VzIG11c3QgYmUgY3JlYXRlZCB1c2luZyA6YzpmdW5jOmBQeU9iamVjdF9HQ19OZXdgIGFuZAorICAgICAgZGVzdHJveWVkIHVzaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX0RlbGAuICBNb3JlIGluZm9ybWF0aW9uIGluIHNlY3Rpb24KICAgICAgIDpyZWY6YHN1cHBvcnRpbmctY3ljbGUtZGV0ZWN0aW9uYC4gIFRoaXMgYml0IGFsc28gaW1wbGllcyB0aGF0IHRoZQogICAgICAgR0MtcmVsYXRlZCBmaWVsZHMgOmF0dHI6YHRwX3RyYXZlcnNlYCBhbmQgOmF0dHI6YHRwX2NsZWFyYCBhcmUgcHJlc2VudCBpbgogICAgICAgdGhlIHR5cGUgb2JqZWN0LgpAQCAtNDY1LDcgKzQ2NSw3IEBACiAgICAgICA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBR2AuCiAKIAotLi4gY21lbWJlcjo6IGNoYXIqIFB5VHlwZU9iamVjdC50cF9kb2MKKy4uIGM6bWVtYmVyOjogY2hhciogUHlUeXBlT2JqZWN0LnRwX2RvYwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgTlVMLXRlcm1pbmF0ZWQgQyBzdHJpbmcgZ2l2aW5nIHRoZSBkb2NzdHJpbmcgZm9yIHRoaXMKICAgIHR5cGUgb2JqZWN0LiAgVGhpcyBpcyBleHBvc2VkIGFzIHRoZSA6YXR0cjpgX19kb2NfX2AgYXR0cmlidXRlIG9uIHRoZSB0eXBlIGFuZApAQCAtNDc0LDcgKzQ3NCw3IEBACiAgICBUaGlzIGZpZWxkIGlzICpub3QqIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogdHJhdmVyc2Vwcm9jIFB5VHlwZU9iamVjdC50cF90cmF2ZXJzZQorLi4gYzptZW1iZXI6OiB0cmF2ZXJzZXByb2MgUHlUeXBlT2JqZWN0LnRwX3RyYXZlcnNlCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSB0cmF2ZXJzYWwgZnVuY3Rpb24gZm9yIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgaXMKICAgIG9ubHkgdXNlZCBpZiB0aGUgOmNvbnN0OmBQeV9UUEZMQUdTX0hBVkVfR0NgIGZsYWcgYml0IGlzIHNldC4gIE1vcmUgaW5mb3JtYXRpb24KQEAgLTQ4Myw4ICs0ODMsOCBAQAogCiAgICBUaGUgOmF0dHI6YHRwX3RyYXZlcnNlYCBwb2ludGVyIGlzIHVzZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRvIGRldGVjdAogICAgcmVmZXJlbmNlIGN5Y2xlcy4gQSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIG9mIGEgOmF0dHI6YHRwX3RyYXZlcnNlYCBmdW5jdGlvbgotICAgc2ltcGx5IGNhbGxzIDpjZnVuYzpgUHlfVklTSVRgIG9uIGVhY2ggb2YgdGhlIGluc3RhbmNlJ3MgbWVtYmVycyB0aGF0IGFyZSBQeXRob24KLSAgIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgdGhpcyBpcyBmdW5jdGlvbiA6Y2Z1bmM6YGxvY2FsX3RyYXZlcnNlYCBmcm9tIHRoZQorICAgc2ltcGx5IGNhbGxzIDpjOmZ1bmM6YFB5X1ZJU0lUYCBvbiBlYWNoIG9mIHRoZSBpbnN0YW5jZSdzIG1lbWJlcnMgdGhhdCBhcmUgUHl0aG9uCisgICBvYmplY3RzLiAgRm9yIGV4YW1wbGUsIHRoaXMgaXMgZnVuY3Rpb24gOmM6ZnVuYzpgbG9jYWxfdHJhdmVyc2VgIGZyb20gdGhlCiAgICA6bW9kOmBfdGhyZWFkYCBleHRlbnNpb24gbW9kdWxlOjoKIAogICAgICAgc3RhdGljIGludApAQCAtNDk2LDcgKzQ5Niw3IEBACiAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICB9CiAKLSAgIE5vdGUgdGhhdCA6Y2Z1bmM6YFB5X1ZJU0lUYCBpcyBjYWxsZWQgb25seSBvbiB0aG9zZSBtZW1iZXJzIHRoYXQgY2FuIHBhcnRpY2lwYXRlCisgICBOb3RlIHRoYXQgOmM6ZnVuYzpgUHlfVklTSVRgIGlzIGNhbGxlZCBvbmx5IG9uIHRob3NlIG1lbWJlcnMgdGhhdCBjYW4gcGFydGljaXBhdGUKICAgIGluIHJlZmVyZW5jZSBjeWNsZXMuICBBbHRob3VnaCB0aGVyZSBpcyBhbHNvIGEgYGBzZWxmLT5rZXlgYCBtZW1iZXIsIGl0IGNhbiBvbmx5CiAgICBiZSAqTlVMTCogb3IgYSBQeXRob24gc3RyaW5nIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUuCiAKQEAgLTUwNCw4ICs1MDQsOCBAQAogICAgZGVidWdnaW5nIGFpZCB5b3UgbWF5IHdhbnQgdG8gdmlzaXQgaXQgYW55d2F5IGp1c3Qgc28gdGhlIDptb2Q6YGdjYCBtb2R1bGUncwogICAgOmZ1bmM6YGdldF9yZWZlcmVudHNgIGZ1bmN0aW9uIHdpbGwgaW5jbHVkZSBpdC4KIAotICAgTm90ZSB0aGF0IDpjZnVuYzpgUHlfVklTSVRgIHJlcXVpcmVzIHRoZSAqdmlzaXQqIGFuZCAqYXJnKiBwYXJhbWV0ZXJzIHRvCi0gICA6Y2Z1bmM6YGxvY2FsX3RyYXZlcnNlYCB0byBoYXZlIHRoZXNlIHNwZWNpZmljIG5hbWVzOyBkb24ndCBuYW1lIHRoZW0ganVzdAorICAgTm90ZSB0aGF0IDpjOmZ1bmM6YFB5X1ZJU0lUYCByZXF1aXJlcyB0aGUgKnZpc2l0KiBhbmQgKmFyZyogcGFyYW1ldGVycyB0bworICAgOmM6ZnVuYzpgbG9jYWxfdHJhdmVyc2VgIHRvIGhhdmUgdGhlc2Ugc3BlY2lmaWMgbmFtZXM7IGRvbid0IG5hbWUgdGhlbSBqdXN0CiAgICBhbnl0aGluZy4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMgdG9nZXRoZXIgd2l0aCA6YXR0cjpgdHBfY2xlYXJgIGFuZCB0aGUKQEAgLTUxNCw3ICs1MTQsNyBAQAogICAgdGhlIHN1YnR5cGUuCiAKIAotLi4gY21lbWJlcjo6IGlucXVpcnkgUHlUeXBlT2JqZWN0LnRwX2NsZWFyCisuLiBjOm1lbWJlcjo6IGlucXVpcnkgUHlUeXBlT2JqZWN0LnRwX2NsZWFyCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBjbGVhciBmdW5jdGlvbiBmb3IgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLiBUaGlzIGlzIG9ubHkKICAgIHVzZWQgaWYgdGhlIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX0dDYCBmbGFnIGJpdCBpcyBzZXQuCkBAIC01NDMsNyArNTQzLDcgQEAKICAgICAgICAgICByZXR1cm4gMDsKICAgICAgIH0KIAotICAgVGhlIDpjZnVuYzpgUHlfQ0xFQVJgIG1hY3JvIHNob3VsZCBiZSB1c2VkLCBiZWNhdXNlIGNsZWFyaW5nIHJlZmVyZW5jZXMgaXMKKyAgIFRoZSA6YzpmdW5jOmBQeV9DTEVBUmAgbWFjcm8gc2hvdWxkIGJlIHVzZWQsIGJlY2F1c2UgY2xlYXJpbmcgcmVmZXJlbmNlcyBpcwogICAgZGVsaWNhdGU6ICB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjb250YWluZWQgb2JqZWN0IG11c3Qgbm90IGJlIGRlY3JlbWVudGVkIHVudGlsCiAgICBhZnRlciB0aGUgcG9pbnRlciB0byB0aGUgY29udGFpbmVkIG9iamVjdCBpcyBzZXQgdG8gKk5VTEwqLiAgVGhpcyBpcyBiZWNhdXNlCiAgICBkZWNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCBtYXkgY2F1c2UgdGhlIGNvbnRhaW5lZCBvYmplY3QgdG8gYmVjb21lIHRyYXNoLApAQCAtNTUyLDcgKzU1Miw3IEBACiAgICBjb250YWluZWQgb2JqZWN0KS4gSWYgaXQncyBwb3NzaWJsZSBmb3Igc3VjaCBjb2RlIHRvIHJlZmVyZW5jZSAqc2VsZiogYWdhaW4sCiAgICBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBwb2ludGVyIHRvIHRoZSBjb250YWluZWQgb2JqZWN0IGJlICpOVUxMKiBhdCB0aGF0IHRpbWUsCiAgICBzbyB0aGF0ICpzZWxmKiBrbm93cyB0aGUgY29udGFpbmVkIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQuICBUaGUKLSAgIDpjZnVuYzpgUHlfQ0xFQVJgIG1hY3JvIHBlcmZvcm1zIHRoZSBvcGVyYXRpb25zIGluIGEgc2FmZSBvcmRlci4KKyAgIDpjOmZ1bmM6YFB5X0NMRUFSYCBtYWNybyBwZXJmb3JtcyB0aGUgb3BlcmF0aW9ucyBpbiBhIHNhZmUgb3JkZXIuCiAKICAgIEJlY2F1c2UgdGhlIGdvYWwgb2YgOmF0dHI6YHRwX2NsZWFyYCBmdW5jdGlvbnMgaXMgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcywKICAgIGl0J3Mgbm90IG5lY2Vzc2FyeSB0byBjbGVhciBjb250YWluZWQgb2JqZWN0cyBsaWtlIFB5dGhvbiBzdHJpbmdzIG9yIFB5dGhvbgpAQCAtNTY5LDcgKzU2OSw3IEBACiAgICB0aGUgc3VidHlwZS4KIAogCi0uLiBjbWVtYmVyOjogcmljaGNtcGZ1bmMgUHlUeXBlT2JqZWN0LnRwX3JpY2hjb21wYXJlCisuLiBjOm1lbWJlcjo6IHJpY2hjbXBmdW5jIFB5VHlwZU9iamVjdC50cF9yaWNoY29tcGFyZQogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIHRoZSByaWNoIGNvbXBhcmlzb24gZnVuY3Rpb24sIHdob3NlIHNpZ25hdHVyZSBpcwogICAgYGBQeU9iamVjdCAqdHBfcmljaGNvbXBhcmUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ApYGAuCkBAIC01OTEsNyArNTkxLDcgQEAKICAgICpOVUxMKi4KIAogICAgVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIGRlZmluZWQgdG8gYmUgdXNlZCBhcyB0aGUgdGhpcmQgYXJndW1lbnQgZm9yCi0gICA6YXR0cjpgdHBfcmljaGNvbXBhcmVgIGFuZCBmb3IgOmNmdW5jOmBQeU9iamVjdF9SaWNoQ29tcGFyZWA6CisgICA6YXR0cjpgdHBfcmljaGNvbXBhcmVgIGFuZCBmb3IgOmM6ZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVgOgogCiAgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAgICB8IENvbnN0YW50ICAgICAgIHwgQ29tcGFyaXNvbiB8CkBAIC02MTAsMTMgKzYxMCwxMyBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogCiAKLS4uIGNtZW1iZXI6OiBsb25nIFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdG9mZnNldAorLi4gYzptZW1iZXI6OiBsb25nIFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdG9mZnNldAogCiAgICBJZiB0aGUgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBhcmUgd2Vha2x5IHJlZmVyZW5jZWFibGUsIHRoaXMgZmllbGQgaXMgZ3JlYXRlcgogICAgdGhhbiB6ZXJvIGFuZCBjb250YWlucyB0aGUgb2Zmc2V0IGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgdGhlIHdlYWsKICAgIHJlZmVyZW5jZSBsaXN0IGhlYWQgKGlnbm9yaW5nIHRoZSBHQyBoZWFkZXIsIGlmIHByZXNlbnQpOyB0aGlzIG9mZnNldCBpcyB1c2VkIGJ5Ci0gICA6Y2Z1bmM6YFB5T2JqZWN0X0NsZWFyV2Vha1JlZnNgIGFuZCB0aGUgOmNmdW5jOmBQeVdlYWtyZWZfXCpgIGZ1bmN0aW9ucy4gIFRoZQotICAgaW5zdGFuY2Ugc3RydWN0dXJlIG5lZWRzIHRvIGluY2x1ZGUgYSBmaWVsZCBvZiB0eXBlIDpjdHlwZTpgUHlPYmplY3RcKmAgd2hpY2ggaXMKKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X0NsZWFyV2Vha1JlZnNgIGFuZCB0aGUgOmM6ZnVuYzpgUHlXZWFrcmVmX1wqYCBmdW5jdGlvbnMuICBUaGUKKyAgIGluc3RhbmNlIHN0cnVjdHVyZSBuZWVkcyB0byBpbmNsdWRlIGEgZmllbGQgb2YgdHlwZSA6Yzp0eXBlOmBQeU9iamVjdFwqYCB3aGljaCBpcwogICAgaW5pdGlhbGl6ZWQgdG8gKk5VTEwqLgogCiAgICBEbyBub3QgY29uZnVzZSB0aGlzIGZpZWxkIHdpdGggOmF0dHI6YHRwX3dlYWtsaXN0YDsgdGhhdCBpcyB0aGUgbGlzdCBoZWFkIGZvcgpAQCAtNjQxLDE4ICs2NDEsMTggQEAKICAgIDphdHRyOmBfX3dlYWtyZWZfX2AsIHRoZSB0eXBlIGluaGVyaXRzIGl0cyA6YXR0cjpgdHBfd2Vha2xpc3RvZmZzZXRgIGZyb20gaXRzCiAgICBiYXNlIHR5cGUuCiAKLS4uIGNtZW1iZXI6OiBnZXRpdGVyZnVuYyBQeVR5cGVPYmplY3QudHBfaXRlcgorLi4gYzptZW1iZXI6OiBnZXRpdGVyZnVuYyBQeVR5cGVPYmplY3QudHBfaXRlcgogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGl0ZXJhdG9yIGZvciB0aGUgb2JqZWN0LiAgSXRzCiAgICBwcmVzZW5jZSBub3JtYWxseSBzaWduYWxzIHRoYXQgdGhlIGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgYXJlIGl0ZXJhYmxlIChhbHRob3VnaAogICAgc2VxdWVuY2VzIG1heSBiZSBpdGVyYWJsZSB3aXRob3V0IHRoaXMgZnVuY3Rpb24pLgogCi0gICBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgOmNmdW5jOmBQeU9iamVjdF9HZXRJdGVyYC4KKyAgIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyA6YzpmdW5jOmBQeU9iamVjdF9HZXRJdGVyYC4KIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKIAotLi4gY21lbWJlcjo6IGl0ZXJuZXh0ZnVuYyBQeVR5cGVPYmplY3QudHBfaXRlcm5leHQKKy4uIGM6bWVtYmVyOjogaXRlcm5leHRmdW5jIFB5VHlwZU9iamVjdC50cF9pdGVybmV4dAogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IGl0ZW0gaW4gYW4gaXRlcmF0b3IuCiAgICBXaGVuIHRoZSBpdGVyYXRvciBpcyBleGhhdXN0ZWQsIGl0IG11c3QgcmV0dXJuICpOVUxMKjsgYSA6ZXhjOmBTdG9wSXRlcmF0aW9uYApAQCAtNjY0LDE0ICs2NjQsMTQgQEAKICAgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIGl0ZXJhdG9yIGluc3RhbmNlIGl0c2VsZiAobm90IGEgbmV3IGl0ZXJhdG9yCiAgICBpbnN0YW5jZSkuCiAKLSAgIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyA6Y2Z1bmM6YFB5SXRlcl9OZXh0YC4KKyAgIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyA6YzpmdW5jOmBQeUl0ZXJfTmV4dGAuCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiBzdHJ1Y3QgUHlNZXRob2REZWYqIFB5VHlwZU9iamVjdC50cF9tZXRob2RzCisuLiBjOm1lbWJlcjo6IHN0cnVjdCBQeU1ldGhvZERlZiogUHlUeXBlT2JqZWN0LnRwX21ldGhvZHMKIAotICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIHN0YXRpYyAqTlVMTCotdGVybWluYXRlZCBhcnJheSBvZiA6Y3R5cGU6YFB5TWV0aG9kRGVmYAorICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIHN0YXRpYyAqTlVMTCotdGVybWluYXRlZCBhcnJheSBvZiA6Yzp0eXBlOmBQeU1ldGhvZERlZmAKICAgIHN0cnVjdHVyZXMsIGRlY2xhcmluZyByZWd1bGFyIG1ldGhvZHMgb2YgdGhpcyB0eXBlLgogCiAgICBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgYXJyYXksIGFuIGVudHJ5IGlzIGFkZGVkIHRvIHRoZSB0eXBlJ3MgZGljdGlvbmFyeSAoc2VlCkBAIC02ODEsOSArNjgxLDkgQEAKICAgIGRpZmZlcmVudCBtZWNoYW5pc20pLgogCiAKLS4uIGNtZW1iZXI6OiBzdHJ1Y3QgUHlNZW1iZXJEZWYqIFB5VHlwZU9iamVjdC50cF9tZW1iZXJzCisuLiBjOm1lbWJlcjo6IHN0cnVjdCBQeU1lbWJlckRlZiogUHlUeXBlT2JqZWN0LnRwX21lbWJlcnMKIAotICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIHN0YXRpYyAqTlVMTCotdGVybWluYXRlZCBhcnJheSBvZiA6Y3R5cGU6YFB5TWVtYmVyRGVmYAorICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIHN0YXRpYyAqTlVMTCotdGVybWluYXRlZCBhcnJheSBvZiA6Yzp0eXBlOmBQeU1lbWJlckRlZmAKICAgIHN0cnVjdHVyZXMsIGRlY2xhcmluZyByZWd1bGFyIGRhdGEgbWVtYmVycyAoZmllbGRzIG9yIHNsb3RzKSBvZiBpbnN0YW5jZXMgb2YKICAgIHRoaXMgdHlwZS4KIApAQCAtNjk0LDkgKzY5NCw5IEBACiAgICBkaWZmZXJlbnQgbWVjaGFuaXNtKS4KIAogCi0uLiBjbWVtYmVyOjogc3RydWN0IFB5R2V0U2V0RGVmKiBQeVR5cGVPYmplY3QudHBfZ2V0c2V0CisuLiBjOm1lbWJlcjo6IHN0cnVjdCBQeUdldFNldERlZiogUHlUeXBlT2JqZWN0LnRwX2dldHNldAogCi0gICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgc3RhdGljICpOVUxMKi10ZXJtaW5hdGVkIGFycmF5IG9mIDpjdHlwZTpgUHlHZXRTZXREZWZgCisgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGEgc3RhdGljICpOVUxMKi10ZXJtaW5hdGVkIGFycmF5IG9mIDpjOnR5cGU6YFB5R2V0U2V0RGVmYAogICAgc3RydWN0dXJlcywgZGVjbGFyaW5nIGNvbXB1dGVkIGF0dHJpYnV0ZXMgb2YgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZS4KIAogICAgRm9yIGVhY2ggZW50cnkgaW4gdGhlIGFycmF5LCBhbiBlbnRyeSBpcyBhZGRlZCB0byB0aGUgdHlwZSdzIGRpY3Rpb25hcnkgKHNlZQpAQCAtNzIxLDcgKzcyMSw3IEBACiAgICAgICB9IFB5R2V0U2V0RGVmOwogCiAKLS4uIGNtZW1iZXI6OiBQeVR5cGVPYmplY3QqIFB5VHlwZU9iamVjdC50cF9iYXNlCisuLiBjOm1lbWJlcjo6IFB5VHlwZU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2Jhc2UKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIGJhc2UgdHlwZSBmcm9tIHdoaWNoIHR5cGUgcHJvcGVydGllcyBhcmUgaW5oZXJpdGVkLiAgQXQKICAgIHRoaXMgbGV2ZWwsIG9ubHkgc2luZ2xlIGluaGVyaXRhbmNlIGlzIHN1cHBvcnRlZDsgbXVsdGlwbGUgaW5oZXJpdGFuY2UgcmVxdWlyZQpAQCAtNzMyLDEzICs3MzIsMTMgQEAKICAgIDpjbGFzczpgb2JqZWN0YCkuCiAKIAotLi4gY21lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfZGljdAorLi4gYzptZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2RpY3QKIAotICAgVGhlIHR5cGUncyBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBoZXJlIGJ5IDpjZnVuYzpgUHlUeXBlX1JlYWR5YC4KKyAgIFRoZSB0eXBlJ3MgZGljdGlvbmFyeSBpcyBzdG9yZWQgaGVyZSBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAgICBUaGlzIGZpZWxkIHNob3VsZCBub3JtYWxseSBiZSBpbml0aWFsaXplZCB0byAqTlVMTCogYmVmb3JlIFB5VHlwZV9SZWFkeSBpcwogICAgY2FsbGVkOyBpdCBtYXkgYWxzbyBiZSBpbml0aWFsaXplZCB0byBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBpbml0aWFsIGF0dHJpYnV0ZXMKLSAgIGZvciB0aGUgdHlwZS4gIE9uY2UgOmNmdW5jOmBQeVR5cGVfUmVhZHlgIGhhcyBpbml0aWFsaXplZCB0aGUgdHlwZSwgZXh0cmEKKyAgIGZvciB0aGUgdHlwZS4gIE9uY2UgOmM6ZnVuYzpgUHlUeXBlX1JlYWR5YCBoYXMgaW5pdGlhbGl6ZWQgdGhlIHR5cGUsIGV4dHJhCiAgICBhdHRyaWJ1dGVzIGZvciB0aGUgdHlwZSBtYXkgYmUgYWRkZWQgdG8gdGhpcyBkaWN0aW9uYXJ5IG9ubHkgaWYgdGhleSBkb24ndAogICAgY29ycmVzcG9uZCB0byBvdmVybG9hZGVkIG9wZXJhdGlvbnMgKGxpa2UgOm1ldGg6YF9fYWRkX19gKS4KIApAQCAtNzQ2LDcgKzc0Niw3IEBACiAgICBhcmUgaW5oZXJpdGVkIHRocm91Z2ggYSBkaWZmZXJlbnQgbWVjaGFuaXNtKS4KIAogCi0uLiBjbWVtYmVyOjogZGVzY3JnZXRmdW5jIFB5VHlwZU9iamVjdC50cF9kZXNjcl9nZXQKKy4uIGM6bWVtYmVyOjogZGVzY3JnZXRmdW5jIFB5VHlwZU9iamVjdC50cF9kZXNjcl9nZXQKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhICJkZXNjcmlwdG9yIGdldCIgZnVuY3Rpb24uCiAKQEAgLTc1OSw3ICs3NTksNyBAQAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3VidHlwZXMuCiAKIAotLi4gY21lbWJlcjo6IGRlc2Nyc2V0ZnVuYyBQeVR5cGVPYmplY3QudHBfZGVzY3Jfc2V0CisuLiBjOm1lbWJlcjo6IGRlc2Nyc2V0ZnVuYyBQeVR5cGVPYmplY3QudHBfZGVzY3Jfc2V0CiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSAiZGVzY3JpcHRvciBzZXQiIGZ1bmN0aW9uLgogCkBAIC03NzIsMTIgKzc3MiwxMiBAQAogICAgLi4gWFhYIGV4cGxhaW4uCiAKIAotLi4gY21lbWJlcjo6IGxvbmcgUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXQKKy4uIGM6bWVtYmVyOjogbG9uZyBQeVR5cGVPYmplY3QudHBfZGljdG9mZnNldAogCiAgICBJZiB0aGUgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBoYXZlIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGluc3RhbmNlIHZhcmlhYmxlcywKICAgIHRoaXMgZmllbGQgaXMgbm9uLXplcm8gYW5kIGNvbnRhaW5zIHRoZSBvZmZzZXQgaW4gdGhlIGluc3RhbmNlcyBvZiB0aGUgdHlwZSBvZgogICAgdGhlIGluc3RhbmNlIHZhcmlhYmxlIGRpY3Rpb25hcnk7IHRoaXMgb2Zmc2V0IGlzIHVzZWQgYnkKLSAgIDpjZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJgLgorICAgOmM6ZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHJgLgogCiAgICBEbyBub3QgY29uZnVzZSB0aGlzIGZpZWxkIHdpdGggOmF0dHI6YHRwX2RpY3RgOyB0aGF0IGlzIHRoZSBkaWN0aW9uYXJ5IGZvcgogICAgYXR0cmlidXRlcyBvZiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmLgpAQCAtODA1LDcgKzgwNSw3IEBACiAgICB0YWtlbiBmcm9tIHRoZSB0eXBlIG9iamVjdCwgYW5kIDphdHRyOmBvYl9zaXplYCBpcyB0YWtlbiBmcm9tIHRoZSBpbnN0YW5jZS4gIFRoZQogICAgYWJzb2x1dGUgdmFsdWUgaXMgdGFrZW4gYmVjYXVzZSBpbnRzIHVzZSB0aGUgc2lnbiBvZiA6YXR0cjpgb2Jfc2l6ZWAgdG8KICAgIHN0b3JlIHRoZSBzaWduIG9mIHRoZSBudW1iZXIuICAoVGhlcmUncyBuZXZlciBhIG5lZWQgdG8gZG8gdGhpcyBjYWxjdWxhdGlvbgotICAgeW91cnNlbGY7IGl0IGlzIGRvbmUgZm9yIHlvdSBieSA6Y2Z1bmM6YF9QeU9iamVjdF9HZXREaWN0UHRyYC4pCisgICB5b3Vyc2VsZjsgaXQgaXMgZG9uZSBmb3IgeW91IGJ5IDpjOmZ1bmM6YF9QeU9iamVjdF9HZXREaWN0UHRyYC4pCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLCBidXQgc2VlIHRoZSBydWxlcyBsaXN0ZWQgYmVsb3cuIEEgc3VidHlwZQogICAgbWF5IG92ZXJyaWRlIHRoaXMgb2Zmc2V0OyB0aGlzIG1lYW5zIHRoYXQgdGhlIHN1YnR5cGUgaW5zdGFuY2VzIHN0b3JlIHRoZQpAQCAtODI1LDcgKzgyNSw3IEBACiAgICBhZGRlZCBhcyBhIGZlYXR1cmUganVzdCBsaWtlIDphdHRyOmBfX3dlYWtyZWZfX2AgdGhvdWdoLikKIAogCi0uLiBjbWVtYmVyOjogaW5pdHByb2MgUHlUeXBlT2JqZWN0LnRwX2luaXQKKy4uIGM6bWVtYmVyOjogaW5pdHByb2MgUHlUeXBlT2JqZWN0LnRwX2luaXQKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4KIApAQCAtODUyLDcgKzg1Miw3IEBACiAgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogYWxsb2NmdW5jIFB5VHlwZU9iamVjdC50cF9hbGxvYworLi4gYzptZW1iZXI6OiBhbGxvY2Z1bmMgUHlUeXBlT2JqZWN0LnRwX2FsbG9jCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gaW5zdGFuY2UgYWxsb2NhdGlvbiBmdW5jdGlvbi4KIApAQCAtODc1LDExICs4NzUsMTEgQEAKIAogICAgVGhpcyBmaWVsZCBpcyBpbmhlcml0ZWQgYnkgc3RhdGljIHN1YnR5cGVzLCBidXQgbm90IGJ5IGR5bmFtaWMgc3VidHlwZXMKICAgIChzdWJ0eXBlcyBjcmVhdGVkIGJ5IGEgY2xhc3Mgc3RhdGVtZW50KTsgaW4gdGhlIGxhdHRlciwgdGhpcyBmaWVsZCBpcyBhbHdheXMgc2V0Ci0gICB0byA6Y2Z1bmM6YFB5VHlwZV9HZW5lcmljQWxsb2NgLCB0byBmb3JjZSBhIHN0YW5kYXJkIGhlYXAgYWxsb2NhdGlvbiBzdHJhdGVneS4KKyAgIHRvIDpjOmZ1bmM6YFB5VHlwZV9HZW5lcmljQWxsb2NgLCB0byBmb3JjZSBhIHN0YW5kYXJkIGhlYXAgYWxsb2NhdGlvbiBzdHJhdGVneS4KICAgIFRoYXQgaXMgYWxzbyB0aGUgcmVjb21tZW5kZWQgdmFsdWUgZm9yIHN0YXRpY2FsbHkgZGVmaW5lZCB0eXBlcy4KIAogCi0uLiBjbWVtYmVyOjogbmV3ZnVuYyBQeVR5cGVPYmplY3QudHBfbmV3CisuLiBjOm1lbWJlcjo6IG5ld2Z1bmMgUHlUeXBlT2JqZWN0LnRwX25ldwogCiAgICBBbiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGluc3RhbmNlIGNyZWF0aW9uIGZ1bmN0aW9uLgogCkBAIC05MDksMjIgKzkwOSwyMiBAQAogICAgd2hvc2UgOmF0dHI6YHRwX2Jhc2VgIGlzICpOVUxMKiBvciBgYCZQeUJhc2VPYmplY3RfVHlwZWBgLgogCiAKLS4uIGNtZW1iZXI6OiBkZXN0cnVjdG9yIFB5VHlwZU9iamVjdC50cF9mcmVlCisuLiBjOm1lbWJlcjo6IGRlc3RydWN0b3IgUHlUeXBlT2JqZWN0LnRwX2ZyZWUKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBkZWFsbG9jYXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCi0gICA6Y3R5cGU6YGZyZWVmdW5jYDo6CisgICA6Yzp0eXBlOmBmcmVlZnVuY2A6OgogCiAgICAgICB2b2lkIHRwX2ZyZWUodm9pZCAqKQogCi0gICBBbiBpbml0aWFsaXplciB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIHNpZ25hdHVyZSBpcyA6Y2Z1bmM6YFB5T2JqZWN0X0ZyZWVgLgorICAgQW4gaW5pdGlhbGl6ZXIgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhpcyBzaWduYXR1cmUgaXMgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAuCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN0YXRpYyBzdWJ0eXBlcywgYnV0IG5vdCBieSBkeW5hbWljIHN1YnR5cGVzCiAgICAoc3VidHlwZXMgY3JlYXRlZCBieSBhIGNsYXNzIHN0YXRlbWVudCk7IGluIHRoZSBsYXR0ZXIsIHRoaXMgZmllbGQgaXMgc2V0IHRvIGEKLSAgIGRlYWxsb2NhdG9yIHN1aXRhYmxlIHRvIG1hdGNoIDpjZnVuYzpgUHlUeXBlX0dlbmVyaWNBbGxvY2AgYW5kIHRoZSB2YWx1ZSBvZiB0aGUKKyAgIGRlYWxsb2NhdG9yIHN1aXRhYmxlIHRvIG1hdGNoIDpjOmZ1bmM6YFB5VHlwZV9HZW5lcmljQWxsb2NgIGFuZCB0aGUgdmFsdWUgb2YgdGhlCiAgICA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9HQ2AgZmxhZyBiaXQuCiAKIAotLi4gY21lbWJlcjo6IGlucXVpcnkgUHlUeXBlT2JqZWN0LnRwX2lzX2djCisuLiBjOm1lbWJlcjo6IGlucXVpcnkgUHlUeXBlT2JqZWN0LnRwX2lzX2djCiAKICAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgogCkBAIC05MzksMTMgKzkzOSwxMyBAQAogICAgICAgaW50IHRwX2lzX2djKFB5T2JqZWN0ICpzZWxmKQogCiAgICAoVGhlIG9ubHkgZXhhbXBsZSBvZiB0aGlzIGFyZSB0eXBlcyB0aGVtc2VsdmVzLiAgVGhlIG1ldGF0eXBlLAotICAgOmNkYXRhOmBQeVR5cGVfVHlwZWAsIGRlZmluZXMgdGhpcyBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHN0YXRpY2FsbHkKKyAgIDpjOmRhdGE6YFB5VHlwZV9UeXBlYCwgZGVmaW5lcyB0aGlzIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gc3RhdGljYWxseQogICAgYW5kIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB0eXBlcy4pCiAKICAgIFRoaXMgZmllbGQgaXMgaW5oZXJpdGVkIGJ5IHN1YnR5cGVzLgogCiAKLS4uIGNtZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2Jhc2VzCisuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfYmFzZXMKIAogICAgVHVwbGUgb2YgYmFzZSB0eXBlcy4KIApAQCAtOTU1LDI1ICs5NTUsMjUgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZC4KIAogCi0uLiBjbWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9tcm8KKy4uIGM6bWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9tcm8KIAogICAgVHVwbGUgY29udGFpbmluZyB0aGUgZXhwYW5kZWQgc2V0IG9mIGJhc2UgdHlwZXMsIHN0YXJ0aW5nIHdpdGggdGhlIHR5cGUgaXRzZWxmCiAgICBhbmQgZW5kaW5nIHdpdGggOmNsYXNzOmBvYmplY3RgLCBpbiBNZXRob2QgUmVzb2x1dGlvbiBPcmRlci4KIAotICAgVGhpcyBmaWVsZCBpcyBub3QgaW5oZXJpdGVkOyBpdCBpcyBjYWxjdWxhdGVkIGZyZXNoIGJ5IDpjZnVuYzpgUHlUeXBlX1JlYWR5YC4KKyAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKLS4uIGNtZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2NhY2hlCisuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgogCiAKLS4uIGNtZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX3N1YmNsYXNzZXMKKy4uIGM6bWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9zdWJjbGFzc2VzCiAKICAgIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHN1YmNsYXNzZXMuICBOb3QgaW5oZXJpdGVkLiAgSW50ZXJuYWwgdXNlIG9ubHkuCiAKIAotLi4gY21lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfd2Vha2xpc3QKKy4uIGM6bWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdAogCiAgICBXZWFrIHJlZmVyZW5jZSBsaXN0IGhlYWQsIGZvciB3ZWFrIHJlZmVyZW5jZXMgdG8gdGhpcyB0eXBlIG9iamVjdC4gIE5vdAogICAgaW5oZXJpdGVkLiAgSW50ZXJuYWwgdXNlIG9ubHkuCkBAIC05ODQsMjIgKzk4NCwyMiBAQAogc3VidHlwZXMuCiAKIAotLi4gY21lbWJlcjo6IFB5X3NzaXplX3QgUHlUeXBlT2JqZWN0LnRwX2FsbG9jcworLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9hbGxvY3MKIAogICAgTnVtYmVyIG9mIGFsbG9jYXRpb25zLgogCiAKLS4uIGNtZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9mcmVlcworLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF9mcmVlcwogCiAgICBOdW1iZXIgb2YgZnJlZXMuCiAKIAotLi4gY21lbWJlcjo6IFB5X3NzaXplX3QgUHlUeXBlT2JqZWN0LnRwX21heGFsbG9jCisuLiBjOm1lbWJlcjo6IFB5X3NzaXplX3QgUHlUeXBlT2JqZWN0LnRwX21heGFsbG9jCiAKICAgIE1heGltdW0gc2ltdWx0YW5lb3VzbHkgYWxsb2NhdGVkIG9iamVjdHMuCiAKIAotLi4gY21lbWJlcjo6IFB5VHlwZU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX25leHQKKy4uIGM6bWVtYmVyOjogUHlUeXBlT2JqZWN0KiBQeVR5cGVPYmplY3QudHBfbmV4dAogCiAgICBQb2ludGVyIHRvIHRoZSBuZXh0IHR5cGUgb2JqZWN0IHdpdGggYSBub24temVybyA6YXR0cjpgdHBfYWxsb2NzYCBmaWVsZC4KIApAQCAtMTAyMiw3ICsxMDIyLDcgQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBBbWF1cnkgRm9yZ2VvdCBkJ0FyYwogCiAKLS4uIGN0eXBlOjogUHlOdW1iZXJNZXRob2RzCisuLiBjOnR5cGU6OiBQeU51bWJlck1ldGhvZHMKIAogICAgVGhpcyBzdHJ1Y3R1cmUgaG9sZHMgcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyB3aGljaCBhbiBvYmplY3QgdXNlcyB0bwogICAgaW1wbGVtZW50IHRoZSBudW1iZXIgcHJvdG9jb2wuICBFYWNoIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIG9mCkBAIC0xMDgxLDggKzEwODEsOCBAQAogCiAgICAuLiBub3RlOjoKIAotICAgICAgVGhlIDpjZGF0YTpgbmJfcmVzZXJ2ZWRgIGZpZWxkIHNob3VsZCBhbHdheXMgYmUgYGBOVUxMYGAuICBJdAotICAgICAgd2FzIHByZXZpb3VzbHkgY2FsbGVkIDpjZGF0YTpgbmJfbG9uZ2AsIGFuZCB3YXMgcmVuYW1lZCBpbgorICAgICAgVGhlIDpjOmRhdGE6YG5iX3Jlc2VydmVkYCBmaWVsZCBzaG91bGQgYWx3YXlzIGJlIGBgTlVMTGBgLiAgSXQKKyAgICAgIHdhcyBwcmV2aW91c2x5IGNhbGxlZCA6YzpkYXRhOmBuYl9sb25nYCwgYW5kIHdhcyByZW5hbWVkIGluCiAgICAgICBQeXRob24gMy4wLjEuCiAKIApAQCAtMTA5NCwyNiArMTA5NCwyNiBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEFtYXVyeSBGb3JnZW90IGQnQXJjCiAKIAotLi4gY3R5cGU6OiBQeU1hcHBpbmdNZXRob2RzCisuLiBjOnR5cGU6OiBQeU1hcHBpbmdNZXRob2RzCiAKICAgIFRoaXMgc3RydWN0dXJlIGhvbGRzIHBvaW50ZXJzIHRvIHRoZSBmdW5jdGlvbnMgd2hpY2ggYW4gb2JqZWN0IHVzZXMgdG8KICAgIGltcGxlbWVudCB0aGUgbWFwcGluZyBwcm90b2NvbC4gIEl0IGhhcyB0aHJlZSBtZW1iZXJzOgogCi0uLiBjbWVtYmVyOjogbGVuZnVuYyBQeU1hcHBpbmdNZXRob2RzLm1wX2xlbmd0aAorLi4gYzptZW1iZXI6OiBsZW5mdW5jIFB5TWFwcGluZ01ldGhvZHMubXBfbGVuZ3RoCiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6Y2Z1bmM6YFB5TWFwcGluZ19MZW5ndGhgIGFuZAotICAgOmNmdW5jOmBQeU9iamVjdF9TaXplYCwgYW5kIGhhcyB0aGUgc2FtZSBzaWduYXR1cmUuICBUaGlzIHNsb3QgbWF5IGJlIHNldCB0bworICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjOmZ1bmM6YFB5TWFwcGluZ19MZW5ndGhgIGFuZAorICAgOmM6ZnVuYzpgUHlPYmplY3RfU2l6ZWAsIGFuZCBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlLiAgVGhpcyBzbG90IG1heSBiZSBzZXQgdG8KICAgICpOVUxMKiBpZiB0aGUgb2JqZWN0IGhhcyBubyBkZWZpbmVkIGxlbmd0aC4KIAotLi4gY21lbWJlcjo6IGJpbmFyeWZ1bmMgUHlNYXBwaW5nTWV0aG9kcy5tcF9zdWJzY3JpcHQKKy4uIGM6bWVtYmVyOjogYmluYXJ5ZnVuYyBQeU1hcHBpbmdNZXRob2RzLm1wX3N1YnNjcmlwdAogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmNmdW5jOmBQeU9iamVjdF9HZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCi0gICBzaWduYXR1cmUuICBUaGlzIHNsb3QgbXVzdCBiZSBmaWxsZWQgZm9yIHRoZSA6Y2Z1bmM6YFB5TWFwcGluZ19DaGVja2AKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeU9iamVjdF9HZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCisgICBzaWduYXR1cmUuICBUaGlzIHNsb3QgbXVzdCBiZSBmaWxsZWQgZm9yIHRoZSA6YzpmdW5jOmBQeU1hcHBpbmdfQ2hlY2tgCiAgICBmdW5jdGlvbiB0byByZXR1cm4gYGAxYGAsIGl0IGNhbiBiZSAqTlVMTCogb3RoZXJ3aXNlLgogCi0uLiBjbWVtYmVyOjogb2Jqb2JqYXJncHJvYyBQeU1hcHBpbmdNZXRob2RzLm1wX2Fzc19zdWJzY3JpcHQKKy4uIGM6bWVtYmVyOjogb2Jqb2JqYXJncHJvYyBQeU1hcHBpbmdNZXRob2RzLm1wX2Fzc19zdWJzY3JpcHQKIAotICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjZnVuYzpgUHlPYmplY3RfU2V0SXRlbWAgYW5kIGhhcyB0aGUgc2FtZQorICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjOmZ1bmM6YFB5T2JqZWN0X1NldEl0ZW1gIGFuZCBoYXMgdGhlIHNhbWUKICAgIHNpZ25hdHVyZS4gIElmIHRoaXMgc2xvdCBpcyAqTlVMTCosIHRoZSBvYmplY3QgZG9lcyBub3Qgc3VwcG9ydCBpdGVtCiAgICBhc3NpZ25tZW50LgogCkBAIC0xMTI2LDMyICsxMTI2LDMyIEBACiAuLiBzZWN0aW9uYXV0aG9yOjogQW1hdXJ5IEZvcmdlb3QgZCdBcmMKIAogCi0uLiBjdHlwZTo6IFB5U2VxdWVuY2VNZXRob2RzCisuLiBjOnR5cGU6OiBQeVNlcXVlbmNlTWV0aG9kcwogCiAgICBUaGlzIHN0cnVjdHVyZSBob2xkcyBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHdoaWNoIGFuIG9iamVjdCB1c2VzIHRvCiAgICBpbXBsZW1lbnQgdGhlIHNlcXVlbmNlIHByb3RvY29sLgogCi0uLiBjbWVtYmVyOjogbGVuZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9sZW5ndGgKKy4uIGM6bWVtYmVyOjogbGVuZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9sZW5ndGgKIAotICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjZnVuYzpgUHlTZXF1ZW5jZV9TaXplYCBhbmQgOmNmdW5jOmBQeU9iamVjdF9TaXplYCwKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX1NpemVgIGFuZCA6YzpmdW5jOmBQeU9iamVjdF9TaXplYCwKICAgIGFuZCBoYXMgdGhlIHNhbWUgc2lnbmF0dXJlLgogCi0uLiBjbWVtYmVyOjogYmluYXJ5ZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9jb25jYXQKKy4uIGM6bWVtYmVyOjogYmluYXJ5ZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9jb25jYXQKIAotICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjZnVuYzpgUHlTZXF1ZW5jZV9Db25jYXRgIGFuZCBoYXMgdGhlIHNhbWUKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX0NvbmNhdGAgYW5kIGhhcyB0aGUgc2FtZQogICAgc2lnbmF0dXJlLiAgSXQgaXMgYWxzbyB1c2VkIGJ5IHRoZSBgYCtgYCBvcGVyYXRvciwgYWZ0ZXIgdHJ5aW5nIHRoZSBudW1lcmljCiAgICBhZGRpdGlvbiB2aWEgdGhlIDphdHRyOmB0cF9hc19udW1iZXIubmJfYWRkYCBzbG90LgogCi0uLiBjbWVtYmVyOjogc3NpemVhcmdmdW5jIFB5U2VxdWVuY2VNZXRob2RzLnNxX3JlcGVhdAorLi4gYzptZW1iZXI6OiBzc2l6ZWFyZ2Z1bmMgUHlTZXF1ZW5jZU1ldGhvZHMuc3FfcmVwZWF0CiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6Y2Z1bmM6YFB5U2VxdWVuY2VfUmVwZWF0YCBhbmQgaGFzIHRoZSBzYW1lCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9SZXBlYXRgIGFuZCBoYXMgdGhlIHNhbWUKICAgIHNpZ25hdHVyZS4gIEl0IGlzIGFsc28gdXNlZCBieSB0aGUgYGAqYGAgb3BlcmF0b3IsIGFmdGVyIHRyeWluZyBudW1lcmljCiAgICBtdWx0aXBsaWNhdGlvbiB2aWEgdGhlIDphdHRyOmB0cF9hc19udW1iZXIubmJfbXVsYCBzbG90LgogCi0uLiBjbWVtYmVyOjogc3NpemVhcmdmdW5jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW0KKy4uIGM6bWVtYmVyOjogc3NpemVhcmdmdW5jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW0KIAotICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCi0gICBzaWduYXR1cmUuICBUaGlzIHNsb3QgbXVzdCBiZSBmaWxsZWQgZm9yIHRoZSA6Y2Z1bmM6YFB5U2VxdWVuY2VfQ2hlY2tgCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCBhbmQgaGFzIHRoZSBzYW1lCisgICBzaWduYXR1cmUuICBUaGlzIHNsb3QgbXVzdCBiZSBmaWxsZWQgZm9yIHRoZSA6YzpmdW5jOmBQeVNlcXVlbmNlX0NoZWNrYAogICAgZnVuY3Rpb24gdG8gcmV0dXJuIGBgMWBgLCBpdCBjYW4gYmUgKk5VTEwqIG90aGVyd2lzZS4KIAogICAgTmVnYXRpdmUgaW5kZXhlcyBhcmUgaGFuZGxlZCBhcyBmb2xsb3dzOiBpZiB0aGUgOmF0dHI6YHNxX2xlbmd0aGAgc2xvdCBpcwpAQCAtMTE1OSwyNyArMTE1OSwyNyBAQAogICAgaW5kZXggd2hpY2ggaXMgcGFzc2VkIHRvIDphdHRyOmBzcV9pdGVtYC4gIElmIDphdHRyOmBzcV9sZW5ndGhgIGlzICpOVUxMKiwKICAgIHRoZSBpbmRleCBpcyBwYXNzZWQgYXMgaXMgdG8gdGhlIGZ1bmN0aW9uLgogCi0uLiBjbWVtYmVyOjogc3NpemVvYmphcmdwcm9jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2Fzc19pdGVtCisuLiBjOm1lbWJlcjo6IHNzaXplb2JqYXJncHJvYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9hc3NfaXRlbQogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmNmdW5jOmBQeVNlcXVlbmNlX1NldEl0ZW1gIGFuZCBoYXMgdGhlIHNhbWUKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6YzpmdW5jOmBQeVNlcXVlbmNlX1NldEl0ZW1gIGFuZCBoYXMgdGhlIHNhbWUKICAgIHNpZ25hdHVyZS4gIFRoaXMgc2xvdCBtYXkgYmUgbGVmdCB0byAqTlVMTCogaWYgdGhlIG9iamVjdCBkb2VzIG5vdCBzdXBwb3J0CiAgICBpdGVtIGFzc2lnbm1lbnQuCiAKLS4uIGNtZW1iZXI6OiBvYmpvYmpwcm9jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2NvbnRhaW5zCisuLiBjOm1lbWJlcjo6IG9iam9ianByb2MgUHlTZXF1ZW5jZU1ldGhvZHMuc3FfY29udGFpbnMKIAotICAgVGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZCBieSA6Y2Z1bmM6YFB5U2VxdWVuY2VfQ29udGFpbnNgIGFuZCBoYXMgdGhlIHNhbWUKKyAgIFRoaXMgZnVuY3Rpb24gbWF5IGJlIHVzZWQgYnkgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9Db250YWluc2AgYW5kIGhhcyB0aGUgc2FtZQogICAgc2lnbmF0dXJlLiAgVGhpcyBzbG90IG1heSBiZSBsZWZ0IHRvICpOVUxMKiwgaW4gdGhpcyBjYXNlCi0gICA6Y2Z1bmM6YFB5U2VxdWVuY2VfQ29udGFpbnNgIHNpbXBseSB0cmF2ZXJzZXMgdGhlIHNlcXVlbmNlIHVudGlsIGl0IGZpbmRzIGEKKyAgIDpjOmZ1bmM6YFB5U2VxdWVuY2VfQ29udGFpbnNgIHNpbXBseSB0cmF2ZXJzZXMgdGhlIHNlcXVlbmNlIHVudGlsIGl0IGZpbmRzIGEKICAgIG1hdGNoLgogCi0uLiBjbWVtYmVyOjogYmluYXJ5ZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9pbnBsYWNlX2NvbmNhdAorLi4gYzptZW1iZXI6OiBiaW5hcnlmdW5jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2lucGxhY2VfY29uY2F0CiAKLSAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSA6Y2Z1bmM6YFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdGAgYW5kIGhhcyB0aGUgc2FtZQorICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjOmZ1bmM6YFB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdGAgYW5kIGhhcyB0aGUgc2FtZQogICAgc2lnbmF0dXJlLiAgSXQgc2hvdWxkIG1vZGlmeSBpdHMgZmlyc3Qgb3BlcmFuZCwgYW5kIHJldHVybiBpdC4KIAotLi4gY21lbWJlcjo6IHNzaXplYXJnZnVuYyBQeVNlcXVlbmNlTWV0aG9kcy5zcV9pbnBsYWNlX3JlcGVhdAorLi4gYzptZW1iZXI6OiBzc2l6ZWFyZ2Z1bmMgUHlTZXF1ZW5jZU1ldGhvZHMuc3FfaW5wbGFjZV9yZXBlYXQKIAotICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjZnVuYzpgUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0YCBhbmQgaGFzIHRoZSBzYW1lCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0YCBhbmQgaGFzIHRoZSBzYW1lCiAgICBzaWduYXR1cmUuICBJdCBzaG91bGQgbW9kaWZ5IGl0cyBmaXJzdCBvcGVyYW5kLCBhbmQgcmV0dXJuIGl0LgogCiAuLiBYWFggbmVlZCB0byBleHBsYWluIHByZWNlZGVuY2UgYmV0d2VlbiBtYXBwaW5nIGFuZCBzZXF1ZW5jZQpAQCAtMTE5OSw0MCArMTE5OSw0MCBAQAogZGF0YS4KIAogSWYgYW4gb2JqZWN0IGRvZXMgbm90IGV4cG9ydCB0aGUgYnVmZmVyIGludGVyZmFjZSwgdGhlbiBpdHMgOmF0dHI6YHRwX2FzX2J1ZmZlcmAKLW1lbWJlciBpbiB0aGUgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHN0cnVjdHVyZSBzaG91bGQgYmUgKk5VTEwqLiAgT3RoZXJ3aXNlLCB0aGUKLTphdHRyOmB0cF9hc19idWZmZXJgIHdpbGwgcG9pbnQgdG8gYSA6Y3R5cGU6YFB5QnVmZmVyUHJvY3NgIHN0cnVjdHVyZS4KK21lbWJlciBpbiB0aGUgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCBzdHJ1Y3R1cmUgc2hvdWxkIGJlICpOVUxMKi4gIE90aGVyd2lzZSwgdGhlCis6YXR0cjpgdHBfYXNfYnVmZmVyYCB3aWxsIHBvaW50IHRvIGEgOmM6dHlwZTpgUHlCdWZmZXJQcm9jc2Agc3RydWN0dXJlLgogCiAKLS4uIGN0eXBlOjogUHlCdWZmZXJQcm9jcworLi4gYzp0eXBlOjogUHlCdWZmZXJQcm9jcwogCiAgICBTdHJ1Y3R1cmUgdXNlZCB0byBob2xkIHRoZSBmdW5jdGlvbiBwb2ludGVycyB3aGljaCBkZWZpbmUgYW4gaW1wbGVtZW50YXRpb24gb2YKICAgIHRoZSBidWZmZXIgcHJvdG9jb2wuCiAKLSAgIC4uIGNtZW1iZXI6OiBnZXRidWZmZXJwcm9jIGJmX2dldGJ1ZmZlcgorICAgLi4gYzptZW1iZXI6OiBnZXRidWZmZXJwcm9jIGJmX2dldGJ1ZmZlcgogCi0gICAgICBUaGlzIHNob3VsZCBmaWxsIGEgOmN0eXBlOmBQeV9idWZmZXJgIHdpdGggdGhlIG5lY2Vzc2FyeSBkYXRhIGZvcgorICAgICAgVGhpcyBzaG91bGQgZmlsbCBhIDpjOnR5cGU6YFB5X2J1ZmZlcmAgd2l0aCB0aGUgbmVjZXNzYXJ5IGRhdGEgZm9yCiAgICAgICBleHBvcnRpbmcgdGhlIHR5cGUuICBUaGUgc2lnbmF0dXJlIG9mIDpkYXRhOmBnZXRidWZmZXJwcm9jYCBpcyBgYGludAogICAgICAgKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKWBgLiAgKm9iaiogaXMgdGhlIG9iamVjdCB0bwotICAgICAgZXhwb3J0LCAqdmlldyogaXMgdGhlIDpjdHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3QgdG8gZmlsbCwgYW5kICpmbGFncyogZ2l2ZXMKKyAgICAgIGV4cG9ydCwgKnZpZXcqIGlzIHRoZSA6Yzp0eXBlOmBQeV9idWZmZXJgIHN0cnVjdCB0byBmaWxsLCBhbmQgKmZsYWdzKiBnaXZlcwogICAgICAgdGhlIGNvbmRpdGlvbnMgdGhlIGNhbGxlciB3YW50cyB0aGUgbWVtb3J5IHVuZGVyLiAgKFNlZQotICAgICAgOmNmdW5jOmBQeU9iamVjdF9HZXRCdWZmZXJgIGZvciBhbGwgZmxhZ3MuKSAgOmNtZW1iZXI6YGJmX2dldGJ1ZmZlcmAgaXMKKyAgICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0dldEJ1ZmZlcmAgZm9yIGFsbCBmbGFncy4pICA6YzptZW1iZXI6YGJmX2dldGJ1ZmZlcmAgaXMKICAgICAgIHJlc3BvbnNpYmxlIGZvciBmaWxsaW5nICp2aWV3KiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBpbmZvcm1hdGlvbi4KLSAgICAgICg6Y2Z1bmM6YFB5QnVmZmVyX0ZpbGxWaWV3YCBjYW4gYmUgdXNlZCBpbiBzaW1wbGUgY2FzZXMuKSAgU2VlCi0gICAgICA6Y3R5cGU6YFB5X2J1ZmZlcmBccyBkb2NzIGZvciB3aGF0IG5lZWRzIHRvIGJlIGZpbGxlZCBpbi4KKyAgICAgICg6YzpmdW5jOmBQeUJ1ZmZlcl9GaWxsVmlld2AgY2FuIGJlIHVzZWQgaW4gc2ltcGxlIGNhc2VzLikgIFNlZQorICAgICAgOmM6dHlwZTpgUHlfYnVmZmVyYFxzIGRvY3MgZm9yIHdoYXQgbmVlZHMgdG8gYmUgZmlsbGVkIGluLgogCiAKLSAgIC4uIGNtZW1iZXI6OiByZWxlYXNlYnVmZmVycHJvYyBiZl9yZWxlYXNlYnVmZmVyCisgICAuLiBjOm1lbWJlcjo6IHJlbGVhc2VidWZmZXJwcm9jIGJmX3JlbGVhc2VidWZmZXIKIAogICAgICAgVGhpcyBzaG91bGQgcmVsZWFzZSB0aGUgcmVzb3VyY2VzIG9mIHRoZSBidWZmZXIuICBUaGUgc2lnbmF0dXJlIG9mCi0gICAgICA6Y2RhdGE6YHJlbGVhc2VidWZmZXJwcm9jYCBpcyBgYHZvaWQgKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldylgYC4KLSAgICAgIElmIHRoZSA6Y2RhdGE6YGJmX3JlbGVhc2VidWZmZXJgIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCAoaS5lLiBpdCBpcworICAgICAgOmM6ZGF0YTpgcmVsZWFzZWJ1ZmZlcnByb2NgIGlzIGBgdm9pZCAoUHlPYmplY3QgKm9iaiwgUHlfYnVmZmVyICp2aWV3KWBgLgorICAgICAgSWYgdGhlIDpjOmRhdGE6YGJmX3JlbGVhc2VidWZmZXJgIGZ1bmN0aW9uIGlzIG5vdCBwcm92aWRlZCAoaS5lLiBpdCBpcwogICAgICAgKk5VTEwqKSwgdGhlbiBpdCBkb2VzIG5vdCBldmVyIG5lZWQgdG8gYmUgY2FsbGVkLgogCiAgICAgICBUaGUgZXhwb3J0ZXIgb2YgdGhlIGJ1ZmZlciBpbnRlcmZhY2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbnkgbWVtb3J5Ci0gICAgICBwb2ludGVkIHRvIGluIHRoZSA6Y3R5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgdW50aWwKKyAgICAgIHBvaW50ZWQgdG8gaW4gdGhlIDpjOnR5cGU6YFB5X2J1ZmZlcmAgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgdW50aWwKICAgICAgIHJlbGVhc2VidWZmZXIgaXMgY2FsbGVkLiAgRXhwb3J0ZXJzIHdpbGwgbmVlZCB0byBkZWZpbmUgYQotICAgICAgOmNkYXRhOmBiZl9yZWxlYXNlYnVmZmVyYCBmdW5jdGlvbiBpZiB0aGV5IGNhbiByZS1hbGxvY2F0ZSB0aGVpciBtZW1vcnksCisgICAgICA6YzpkYXRhOmBiZl9yZWxlYXNlYnVmZmVyYCBmdW5jdGlvbiBpZiB0aGV5IGNhbiByZS1hbGxvY2F0ZSB0aGVpciBtZW1vcnksCiAgICAgICBzdHJpZGVzLCBzaGFwZSwgc3Vib2Zmc2V0cywgb3IgZm9ybWF0IHZhcmlhYmxlcyB3aGljaCB0aGV5IG1pZ2h0IHNoYXJlCiAgICAgICB0aHJvdWdoIHRoZSBzdHJ1Y3QgYnVmZmVyaW5mby4KIAotICAgICAgU2VlIDpjZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAuCisgICAgICBTZWUgOmM6ZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdW5pY29kZS5yc3QgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKaW5kZXggYTkxZjI1OC4uZjQ4ZWI3MyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0CisrKyBiL0RvYy9jLWFwaS91bmljb2RlLnJzdApAQCAtMTcsNzUgKzE3LDc1IEBACiBQeXRob246CiAKIAotLi4gY3R5cGU6OiBQeV9VTklDT0RFCisuLiBjOnR5cGU6OiBQeV9VTklDT0RFCiAKICAgIFRoaXMgdHlwZSByZXByZXNlbnRzIHRoZSBzdG9yYWdlIHR5cGUgd2hpY2ggaXMgdXNlZCBieSBQeXRob24gaW50ZXJuYWxseSBhcwogICAgYmFzaXMgZm9yIGhvbGRpbmcgVW5pY29kZSBvcmRpbmFscy4gIFB5dGhvbidzIGRlZmF1bHQgYnVpbGRzIHVzZSBhIDE2LWJpdCB0eXBlCi0gICBmb3IgOmN0eXBlOmBQeV9VTklDT0RFYCBhbmQgc3RvcmUgVW5pY29kZSB2YWx1ZXMgaW50ZXJuYWxseSBhcyBVQ1MyLiBJdCBpcyBhbHNvCisgICBmb3IgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYW5kIHN0b3JlIFVuaWNvZGUgdmFsdWVzIGludGVybmFsbHkgYXMgVUNTMi4gSXQgaXMgYWxzbwogICAgcG9zc2libGUgdG8gYnVpbGQgYSBVQ1M0IHZlcnNpb24gb2YgUHl0aG9uIChtb3N0IHJlY2VudCBMaW51eCBkaXN0cmlidXRpb25zIGNvbWUKICAgIHdpdGggVUNTNCBidWlsZHMgb2YgUHl0aG9uKS4gVGhlc2UgYnVpbGRzIHRoZW4gdXNlIGEgMzItYml0IHR5cGUgZm9yCi0gICA6Y3R5cGU6YFB5X1VOSUNPREVgIGFuZCBzdG9yZSBVbmljb2RlIGRhdGEgaW50ZXJuYWxseSBhcyBVQ1M0LiBPbiBwbGF0Zm9ybXMKLSAgIHdoZXJlIDpjdHlwZTpgd2NoYXJfdGAgaXMgYXZhaWxhYmxlIGFuZCBjb21wYXRpYmxlIHdpdGggdGhlIGNob3NlbiBQeXRob24KLSAgIFVuaWNvZGUgYnVpbGQgdmFyaWFudCwgOmN0eXBlOmBQeV9VTklDT0RFYCBpcyBhIHR5cGVkZWYgYWxpYXMgZm9yCi0gICA6Y3R5cGU6YHdjaGFyX3RgIHRvIGVuaGFuY2UgbmF0aXZlIHBsYXRmb3JtIGNvbXBhdGliaWxpdHkuIE9uIGFsbCBvdGhlcgotICAgcGxhdGZvcm1zLCA6Y3R5cGU6YFB5X1VOSUNPREVgIGlzIGEgdHlwZWRlZiBhbGlhcyBmb3IgZWl0aGVyIDpjdHlwZTpgdW5zaWduZWQKLSAgIHNob3J0YCAoVUNTMikgb3IgOmN0eXBlOmB1bnNpZ25lZCBsb25nYCAoVUNTNCkuCisgICA6Yzp0eXBlOmBQeV9VTklDT0RFYCBhbmQgc3RvcmUgVW5pY29kZSBkYXRhIGludGVybmFsbHkgYXMgVUNTNC4gT24gcGxhdGZvcm1zCisgICB3aGVyZSA6Yzp0eXBlOmB3Y2hhcl90YCBpcyBhdmFpbGFibGUgYW5kIGNvbXBhdGlibGUgd2l0aCB0aGUgY2hvc2VuIFB5dGhvbgorICAgVW5pY29kZSBidWlsZCB2YXJpYW50LCA6Yzp0eXBlOmBQeV9VTklDT0RFYCBpcyBhIHR5cGVkZWYgYWxpYXMgZm9yCisgICA6Yzp0eXBlOmB3Y2hhcl90YCB0byBlbmhhbmNlIG5hdGl2ZSBwbGF0Zm9ybSBjb21wYXRpYmlsaXR5LiBPbiBhbGwgb3RoZXIKKyAgIHBsYXRmb3JtcywgOmM6dHlwZTpgUHlfVU5JQ09ERWAgaXMgYSB0eXBlZGVmIGFsaWFzIGZvciBlaXRoZXIgOmM6dHlwZTpgdW5zaWduZWQKKyAgIHNob3J0YCAoVUNTMikgb3IgOmM6dHlwZTpgdW5zaWduZWQgbG9uZ2AgKFVDUzQpLgogCiBOb3RlIHRoYXQgVUNTMiBhbmQgVUNTNCBQeXRob24gYnVpbGRzIGFyZSBub3QgYmluYXJ5IGNvbXBhdGlibGUuIFBsZWFzZSBrZWVwCiB0aGlzIGluIG1pbmQgd2hlbiB3cml0aW5nIGV4dGVuc2lvbnMgb3IgaW50ZXJmYWNlcy4KIAogCi0uLiBjdHlwZTo6IFB5VW5pY29kZU9iamVjdAorLi4gYzp0eXBlOjogUHlVbmljb2RlT2JqZWN0CiAKLSAgIFRoaXMgc3VidHlwZSBvZiA6Y3R5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIFVuaWNvZGUgb2JqZWN0LgorICAgVGhpcyBzdWJ0eXBlIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRzIGEgUHl0aG9uIFVuaWNvZGUgb2JqZWN0LgogCiAKLS4uIGN2YXI6OiBQeVR5cGVPYmplY3QgUHlVbmljb2RlX1R5cGUKKy4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5VW5pY29kZV9UeXBlCiAKLSAgIFRoaXMgaW5zdGFuY2Ugb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBVbmljb2RlIHR5cGUuICBJdAorICAgVGhpcyBpbnN0YW5jZSBvZiA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgIHJlcHJlc2VudHMgdGhlIFB5dGhvbiBVbmljb2RlIHR5cGUuICBJdAogICAgaXMgZXhwb3NlZCB0byBQeXRob24gY29kZSBhcyBgYHN0cmBgLgogCiBUaGUgZm9sbG93aW5nIEFQSXMgYXJlIHJlYWxseSBDIG1hY3JvcyBhbmQgY2FuIGJlIHVzZWQgdG8gZG8gZmFzdCBjaGVja3MgYW5kIHRvCiBhY2Nlc3MgaW50ZXJuYWwgcmVhZC1vbmx5IGRhdGEgb2YgVW5pY29kZSBvYmplY3RzOgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ2hlY2soUHlPYmplY3QgKm8pCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZV9DaGVjayhQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSBVbmljb2RlIG9iamVjdCBvciBhbiBpbnN0YW5jZSBvZiBhIFVuaWNvZGUKICAgIHN1YnR5cGUuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZV9DaGVja0V4YWN0KFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ2hlY2tFeGFjdChQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCAqbyogaXMgYSBVbmljb2RlIG9iamVjdCwgYnV0IG5vdCBhbiBpbnN0YW5jZSBvZiBhCiAgICBzdWJ0eXBlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX0dFVF9TSVpFKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX0dFVF9TSVpFKFB5T2JqZWN0ICpvKQogCi0gICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG9iamVjdC4gICpvKiBoYXMgdG8gYmUgYSA6Y3R5cGU6YFB5VW5pY29kZU9iamVjdGAgKG5vdAorICAgUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBvYmplY3QuICAqbyogaGFzIHRvIGJlIGEgOmM6dHlwZTpgUHlVbmljb2RlT2JqZWN0YCAobm90CiAgICBjaGVja2VkKS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VW5pY29kZV9HRVRfREFUQV9TSVpFKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUoUHlPYmplY3QgKm8pCiAKICAgIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0J3MgaW50ZXJuYWwgYnVmZmVyIGluIGJ5dGVzLiAgKm8qIGhhcyB0byBiZSBhCi0gICA6Y3R5cGU6YFB5VW5pY29kZU9iamVjdGAgKG5vdCBjaGVja2VkKS4KKyAgIDpjOnR5cGU6YFB5VW5pY29kZU9iamVjdGAgKG5vdCBjaGVja2VkKS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9VTklDT0RFKiBQeVVuaWNvZGVfQVNfVU5JQ09ERShQeU9iamVjdCAqbykKKy4uIGM6ZnVuY3Rpb246OiBQeV9VTklDT0RFKiBQeVVuaWNvZGVfQVNfVU5JQ09ERShQeU9iamVjdCAqbykKIAotICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgaW50ZXJuYWwgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIG9iamVjdC4gICpvKgotICAgaGFzIHRvIGJlIGEgOmN0eXBlOmBQeVVuaWNvZGVPYmplY3RgIChub3QgY2hlY2tlZCkuCisgICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCA6Yzp0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIG9iamVjdC4gICpvKgorICAgaGFzIHRvIGJlIGEgOmM6dHlwZTpgUHlVbmljb2RlT2JqZWN0YCAobm90IGNoZWNrZWQpLgogCiAKLS4uIGNmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5VW5pY29kZV9BU19EQVRBKFB5T2JqZWN0ICpvKQorLi4gYzpmdW5jdGlvbjo6IGNvbnN0IGNoYXIqIFB5VW5pY29kZV9BU19EQVRBKFB5T2JqZWN0ICpvKQogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBpbnRlcm5hbCBidWZmZXIgb2YgdGhlIG9iamVjdC4gKm8qIGhhcyB0byBiZSBhCi0gICA6Y3R5cGU6YFB5VW5pY29kZU9iamVjdGAgKG5vdCBjaGVja2VkKS4KKyAgIDpjOnR5cGU6YFB5VW5pY29kZU9iamVjdGAgKG5vdCBjaGVja2VkKS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX0NsZWFyRnJlZUxpc3QoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ2xlYXJGcmVlTGlzdCgpCiAKICAgIENsZWFyIHRoZSBmcmVlIGxpc3QuIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIGZyZWVkIGl0ZW1zLgogCkBAIC05OCw1NyArOTgsNTcgQEAKIHRoZSBQeXRob24gY29uZmlndXJhdGlvbi4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU1NQQUNFKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNTUEFDRShQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYSB3aGl0ZXNwYWNlIGNoYXJhY3Rlci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU0xPV0VSKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNMT1dFUihQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYSBsb3dlcmNhc2UgY2hhcmFjdGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTVVBQRVIoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU1VQUEVSKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKmNoKiBpcyBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTVElUTEUoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU1RJVExFKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKmNoKiBpcyBhIHRpdGxlY2FzZSBjaGFyYWN0ZXIuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNMSU5FQlJFQUsoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU0xJTkVCUkVBSyhQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYSBsaW5lYnJlYWsgY2hhcmFjdGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTREVDSU1BTChQeV9VTklDT0RFIGNoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTREVDSU1BTChQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYSBkZWNpbWFsIGNoYXJhY3Rlci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU0RJR0lUKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNESUdJVChQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYSBkaWdpdCBjaGFyYWN0ZXIuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNOVU1FUklDKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNOVU1FUklDKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKmNoKiBpcyBhIG51bWVyaWMgY2hhcmFjdGVyLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTQUxQSEEoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU0FMUEhBKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKmNoKiBpcyBhbiBhbHBoYWJldGljIGNoYXJhY3Rlci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU0FMTlVNKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfSVNBTE5VTShQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gMSBvciAwIGRlcGVuZGluZyBvbiB3aGV0aGVyICpjaCogaXMgYW4gYWxwaGFudW1lcmljIGNoYXJhY3Rlci4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9JU1BSSU5UQUJMRShQeV9VTklDT0RFIGNoKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9VTklDT0RFX0lTUFJJTlRBQkxFKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiAxIG9yIDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgKmNoKiBpcyBhIHByaW50YWJsZSBjaGFyYWN0ZXIuCiAgICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlcgpAQCAtMTYyLDM0ICsxNjIsMzQgQEAKIFRoZXNlIEFQSXMgY2FuIGJlIHVzZWQgZm9yIGZhc3QgZGlyZWN0IGNoYXJhY3RlciBjb252ZXJzaW9uczoKIAogCi0uLiBjZnVuY3Rpb246OiBQeV9VTklDT0RFIFB5X1VOSUNPREVfVE9MT1dFUihQeV9VTklDT0RFIGNoKQorLi4gYzpmdW5jdGlvbjo6IFB5X1VOSUNPREUgUHlfVU5JQ09ERV9UT0xPV0VSKFB5X1VOSUNPREUgY2gpCiAKICAgIFJldHVybiB0aGUgY2hhcmFjdGVyICpjaCogY29udmVydGVkIHRvIGxvd2VyIGNhc2UuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfVU5JQ09ERSBQeV9VTklDT0RFX1RPVVBQRVIoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9VTklDT0RFIFB5X1VOSUNPREVfVE9VUFBFUihQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gdGhlIGNoYXJhY3RlciAqY2gqIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X1VOSUNPREUgUHlfVU5JQ09ERV9UT1RJVExFKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogUHlfVU5JQ09ERSBQeV9VTklDT0RFX1RPVElUTEUoUHlfVU5JQ09ERSBjaCkKIAogICAgUmV0dXJuIHRoZSBjaGFyYWN0ZXIgKmNoKiBjb252ZXJ0ZWQgdG8gdGl0bGUgY2FzZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9UT0RFQ0lNQUwoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9UT0RFQ0lNQUwoUHlfVU5JQ09ERSBjaCkKIAogICAgUmV0dXJuIHRoZSBjaGFyYWN0ZXIgKmNoKiBjb252ZXJ0ZWQgdG8gYSBkZWNpbWFsIHBvc2l0aXZlIGludGVnZXIuICBSZXR1cm4KICAgIGBgLTFgYCBpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gIFRoaXMgbWFjcm8gZG9lcyBub3QgcmFpc2UgZXhjZXB0aW9ucy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfVU5JQ09ERV9UT0RJR0lUKFB5X1VOSUNPREUgY2gpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X1VOSUNPREVfVE9ESUdJVChQeV9VTklDT0RFIGNoKQogCiAgICBSZXR1cm4gdGhlIGNoYXJhY3RlciAqY2gqIGNvbnZlcnRlZCB0byBhIHNpbmdsZSBkaWdpdCBpbnRlZ2VyLiBSZXR1cm4gYGAtMWBgIGlmCiAgICB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gIFRoaXMgbWFjcm8gZG9lcyBub3QgcmFpc2UgZXhjZXB0aW9ucy4KIAogCi0uLiBjZnVuY3Rpb246OiBkb3VibGUgUHlfVU5JQ09ERV9UT05VTUVSSUMoUHlfVU5JQ09ERSBjaCkKKy4uIGM6ZnVuY3Rpb246OiBkb3VibGUgUHlfVU5JQ09ERV9UT05VTUVSSUMoUHlfVU5JQ09ERSBjaCkKIAogICAgUmV0dXJuIHRoZSBjaGFyYWN0ZXIgKmNoKiBjb252ZXJ0ZWQgdG8gYSBkb3VibGUuIFJldHVybiBgYC0xLjBgYCBpZiB0aGlzIGlzIG5vdAogICAgcG9zc2libGUuICBUaGlzIG1hY3JvIGRvZXMgbm90IHJhaXNlIGV4Y2VwdGlvbnMuCkBAIC0yMDIsNyArMjAyLDcgQEAKIEFQSXM6CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tVW5pY29kZShjb25zdCBQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tVW5pY29kZShjb25zdCBQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IHNpemUpCiAKICAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gdGhlIFB5X1VOSUNPREUgYnVmZmVyICp1KiBvZiB0aGUgZ2l2ZW4gc2l6ZS4gKnUqCiAgICBtYXkgYmUgKk5VTEwqIHdoaWNoIGNhdXNlcyB0aGUgY29udGVudHMgdG8gYmUgdW5kZWZpbmVkLiBJdCBpcyB0aGUgdXNlcidzCkBAIC0yMTIsNyArMjEyLDcgQEAKICAgIGlzICpOVUxMKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnUsIFB5X3NzaXplX3Qgc2l6ZSkKIAogICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgZnJvbSB0aGUgY2hhciBidWZmZXIgKnUqLiAgVGhlIGJ5dGVzIHdpbGwgYmUgaW50ZXJwcmV0ZWQKICAgIGFzIGJlaW5nIFVURi04IGVuY29kZWQuICAqdSogbWF5IGFsc28gYmUgKk5VTEwqIHdoaWNoCkBAIC0yMjIsMjMgKzIyMiwyNiBAQAogICAgdGhlIHJlc3VsdGluZyBVbmljb2RlIG9iamVjdCBpcyBvbmx5IGFsbG93ZWQgd2hlbiAqdSogaXMgKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeVVuaWNvZGVfRnJvbVN0cmluZyhjb25zdCBjaGFyICp1KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0ICpQeVVuaWNvZGVfRnJvbVN0cmluZyhjb25zdCBjaGFyICp1KQogCiAgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBmcm9tIGFuIFVURi04IGVuY29kZWQgbnVsbC10ZXJtaW5hdGVkIGNoYXIgYnVmZmVyCiAgICAqdSouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUZvcm1hdChjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAotICAgVGFrZSBhIEMgOmNmdW5jOmBwcmludGZgXCAtc3R5bGUgKmZvcm1hdCogc3RyaW5nIGFuZCBhIHZhcmlhYmxlIG51bWJlciBvZgorICAgVGFrZSBhIEMgOmM6ZnVuYzpgcHJpbnRmYFwgLXN0eWxlICpmb3JtYXQqIHN0cmluZyBhbmQgYSB2YXJpYWJsZSBudW1iZXIgb2YKICAgIGFyZ3VtZW50cywgY2FsY3VsYXRlIHRoZSBzaXplIG9mIHRoZSByZXN1bHRpbmcgUHl0aG9uIHVuaWNvZGUgc3RyaW5nIGFuZCByZXR1cm4KICAgIGEgc3RyaW5nIHdpdGggdGhlIHZhbHVlcyBmb3JtYXR0ZWQgaW50byBpdC4gIFRoZSB2YXJpYWJsZSBhcmd1bWVudHMgbXVzdCBiZSBDCiAgICB0eXBlcyBhbmQgbXVzdCBjb3JyZXNwb25kIGV4YWN0bHkgdG8gdGhlIGZvcm1hdCBjaGFyYWN0ZXJzIGluIHRoZSAqZm9ybWF0KgotICAgc3RyaW5nLiAgVGhlIGZvbGxvd2luZyBmb3JtYXQgY2hhcmFjdGVycyBhcmUgYWxsb3dlZDoKKyAgIEFTQ0lJLWVuY29kZWQgc3RyaW5nLiBUaGUgZm9sbG93aW5nIGZvcm1hdCBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkOgogCisgICAuLiAlIFRoaXMgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgdGhlIHRhYmxlIGluIFB5RXJyX0Zvcm1hdC4KICAgIC4uICUgVGhlIGRlc2NyaXB0aW9ucyBmb3IgJXpkIGFuZCAlenUgYXJlIHdyb25nLCBidXQgdGhlIHRydXRoIGlzIGNvbXBsaWNhdGVkCiAgICAuLiAlIGJlY2F1c2Ugbm90IGFsbCBjb21waWxlcnMgc3VwcG9ydCB0aGUgJXogd2lkdGggbW9kaWZpZXIgLS0gd2UgZmFrZSBpdAogICAgLi4gJSB3aGVuIG5lY2Vzc2FyeSB2aWEgaW50ZXJwb2xhdGluZyBQWV9GT1JNQVRfU0laRV9ULgorICAgLi4gJSBTaW1pbGFyIGNvbW1lbnRzIGFwcGx5IHRvIHRoZSAlbGwgd2lkdGggbW9kaWZpZXIgYW5kCisgICAuLiAlIFBZX0ZPUk1BVF9MT05HX0xPTkcuCiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgRm9ybWF0IENoYXJhY3RlcnMgfCBUeXBlICAgICAgICAgICAgICAgIHwgQ29tbWVudCAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTI2MCw2ICsyNjMsMTIgQEAKICAgIHwgOmF0dHI6YCVsdWAgICAgICAgfCB1bnNpZ25lZCBsb25nICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsdSIpYGAuICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsbGRgICAgICAgfCBsb25nIGxvbmcgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsbGQiKWBgLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmF0dHI6YCVsbHVgICAgICAgfCB1bnNpZ25lZCBsb25nIGxvbmcgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVsbHUiKWBgLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmF0dHI6YCV6ZGAgICAgICAgfCBQeV9zc2l6ZV90ICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiV6ZCIpYGAuICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTI5NiwzNCArMzA1LDU5IEBACiAgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICpOVUxMKikuICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IDphdHRyOmAlU2AgICAgICAgIHwgUHlPYmplY3RcKiAgICAgICAgICB8IFRoZSByZXN1bHQgb2YgY2FsbGluZyAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBQeU9iamVjdF9TdHJgLiAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpjOmZ1bmM6YFB5T2JqZWN0X1N0cmAuICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IDphdHRyOmAlUmAgICAgICAgIHwgUHlPYmplY3RcKiAgICAgICAgICB8IFRoZSByZXN1bHQgb2YgY2FsbGluZyAgICAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBQeU9iamVjdF9SZXByYC4gICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8IDpjOmZ1bmM6YFB5T2JqZWN0X1JlcHJgLiAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKICAgIEFuIHVucmVjb2duaXplZCBmb3JtYXQgY2hhcmFjdGVyIGNhdXNlcyBhbGwgdGhlIHJlc3Qgb2YgdGhlIGZvcm1hdCBzdHJpbmcgdG8gYmUKICAgIGNvcGllZCBhcy1pcyB0byB0aGUgcmVzdWx0IHN0cmluZywgYW5kIGFueSBleHRyYSBhcmd1bWVudHMgZGlzY2FyZGVkLgogCisgICAuLiBub3RlOjoKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCisgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQorICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCi0gICBJZGVudGljYWwgdG8gOmZ1bmM6YFB5VW5pY29kZV9Gcm9tRm9ybWF0YCBleGNlcHQgdGhhdCBpdCB0YWtlcyBleGFjdGx5IHR3bworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFN1cHBvcnQgZm9yIGBgIiVsbGQiYGAgYW5kIGBgIiVsbHUiYGAgYWRkZWQuCisKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQorCisgICBJZGVudGljYWwgdG8gOmM6ZnVuYzpgUHlVbmljb2RlX0Zyb21Gb3JtYXRgIGV4Y2VwdCB0aGF0IGl0IHRha2VzIGV4YWN0bHkgdHdvCiAgICBhcmd1bWVudHMuCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1RyYW5zZm9ybURlY2ltYWxUb0FTQ0lJKFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKIAotLi4gY2Z1bmN0aW9uOjogUHlfVU5JQ09ERSogUHlVbmljb2RlX0FzVW5pY29kZShQeU9iamVjdCAqdW5pY29kZSkKKyAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGJ5IHJlcGxhY2luZyBhbGwgZGVjaW1hbCBkaWdpdHMgaW4KKyAgIDpjOnR5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gKnNpemUqIGJ5IEFTQ0lJIGRpZ2l0cyAwLS05CisgICBhY2NvcmRpbmcgdG8gdGhlaXIgZGVjaW1hbCB2YWx1ZS4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uCisgICBvY2N1cnMuCiAKLSAgIFJldHVybiBhIHJlYWQtb25seSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIG9iamVjdCdzIGludGVybmFsIDpjdHlwZTpgUHlfVU5JQ09ERWAKKworLi4gYzpmdW5jdGlvbjo6IFB5X1VOSUNPREUqIFB5VW5pY29kZV9Bc1VuaWNvZGUoUHlPYmplY3QgKnVuaWNvZGUpCisKKyAgIFJldHVybiBhIHJlYWQtb25seSBwb2ludGVyIHRvIHRoZSBVbmljb2RlIG9iamVjdCdzIGludGVybmFsIDpjOnR5cGU6YFB5X1VOSUNPREVgCiAgICBidWZmZXIsICpOVUxMKiBpZiAqdW5pY29kZSogaXMgbm90IGEgVW5pY29kZSBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlfc3NpemVfdCBQeVVuaWNvZGVfR2V0U2l6ZShQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeV9VTklDT0RFKiBQeVVuaWNvZGVfQXNVbmljb2RlQ29weShQeU9iamVjdCAqdW5pY29kZSkKKworICAgQ3JlYXRlIGEgY29weSBvZiBhIFVuaWNvZGUgc3RyaW5nIGVuZGluZyB3aXRoIGEgbnVsIGNoYXJhY3Rlci4gUmV0dXJuICpOVUxMKgorICAgYW5kIHJhaXNlIGEgOmV4YzpgTWVtb3J5RXJyb3JgIGV4Y2VwdGlvbiBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLAorICAgb3RoZXJ3aXNlIHJldHVybiBhIG5ldyBhbGxvY2F0ZWQgYnVmZmVyICh1c2UgOmM6ZnVuYzpgUHlNZW1fRnJlZWAgdG8gZnJlZSB0aGUKKyAgIGJ1ZmZlcikuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VW5pY29kZV9HZXRTaXplKFB5T2JqZWN0ICp1bmljb2RlKQogCiAgICBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgVW5pY29kZSBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChQeU9iamVjdCAqb2JqLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoUHlPYmplY3QgKm9iaiwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgQ29lcmNlIGFuIGVuY29kZWQgb2JqZWN0ICpvYmoqIHRvIGFuIFVuaWNvZGUgb2JqZWN0IGFuZCByZXR1cm4gYSByZWZlcmVuY2Ugd2l0aAogICAgaW5jcmVtZW50ZWQgcmVmY291bnQuCkBAIC0zNDAsNzcgKzM3NCwxMjUgQEAKICAgIGRlY3JlZidpbmcgdGhlIHJldHVybmVkIG9iamVjdHMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvYmopCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tT2JqZWN0KFB5T2JqZWN0ICpvYmopCiAKICAgIFNob3J0Y3V0IGZvciBgYFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChvYmosIE5VTEwsICJzdHJpY3QiKWBgIHdoaWNoIGlzIHVzZWQKICAgIHRocm91Z2hvdXQgdGhlIGludGVycHJldGVyIHdoZW5ldmVyIGNvZXJjaW9uIHRvIFVuaWNvZGUgaXMgbmVlZGVkLgogCi1JZiB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgOmN0eXBlOmB3Y2hhcl90YCBhbmQgcHJvdmlkZXMgYSBoZWFkZXIgZmlsZSB3Y2hhci5oLAorSWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIDpjOnR5cGU6YHdjaGFyX3RgIGFuZCBwcm92aWRlcyBhIGhlYWRlciBmaWxlIHdjaGFyLmgsCiBQeXRob24gY2FuIGludGVyZmFjZSBkaXJlY3RseSB0byB0aGlzIHR5cGUgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuCi1TdXBwb3J0IGlzIG9wdGltaXplZCBpZiBQeXRob24ncyBvd24gOmN0eXBlOmBQeV9VTklDT0RFYCB0eXBlIGlzIGlkZW50aWNhbCB0bwotdGhlIHN5c3RlbSdzIDpjdHlwZTpgd2NoYXJfdGAuCitTdXBwb3J0IGlzIG9wdGltaXplZCBpZiBQeXRob24ncyBvd24gOmM6dHlwZTpgUHlfVU5JQ09ERWAgdHlwZSBpcyBpZGVudGljYWwgdG8KK3RoZSBzeXN0ZW0ncyA6Yzp0eXBlOmB3Y2hhcl90YC4KIAogCiBGaWxlIFN5c3RlbSBFbmNvZGluZwogIiIiIiIiIiIiIiIiIiIiIiIiIiIKIAogVG8gZW5jb2RlIGFuZCBkZWNvZGUgZmlsZSBuYW1lcyBhbmQgb3RoZXIgZW52aXJvbm1lbnQgc3RyaW5ncywKLTpjZGF0YTpgUHlfRmlsZVN5c3RlbUVuY29kaW5nYCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZW5jb2RpbmcsIGFuZAorOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbUVuY29kaW5nYCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgZW5jb2RpbmcsIGFuZAogYGAic3Vycm9nYXRlZXNjYXBlImBgIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBlcnJvciBoYW5kbGVyICg6cGVwOmAzODNgKS4gVG8KIGVuY29kZSBmaWxlIG5hbWVzIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLCB0aGUgYGAiTyYiYGAgY29udmVydGVyIHNob3VsZCBiZQotdXNlZCwgcGFzc2luZyA6Y2Z1bmM6YFB5VW5pY29kZV9GU0NvbnZlcnRlcmAgYXMgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb246Cit1c2VkLCBwYXNzaW5nIDpjOmZ1bmM6YFB5VW5pY29kZV9GU0NvbnZlcnRlcmAgYXMgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb246CiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIG9iaiwgdm9pZCogcmVzdWx0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIG9iaiwgdm9pZCogcmVzdWx0KQogCi0gICBDb252ZXJ0ICpvYmoqIGludG8gKnJlc3VsdCosIHVzaW5nIDpjZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AsCi0gICBhbmQgdGhlIGBgInN1cnJvZ2F0ZWVzY2FwZSJgYCBlcnJvciBoYW5kbGVyLiAqcmVzdWx0KiBtdXN0IGJlIGEKLSAgIGBgUHlPYmplY3QqYGAsIHJldHVybiBhIDpmdW5jOmBieXRlc2Agb2JqZWN0IHdoaWNoIG11c3QgYmUgcmVsZWFzZWQgaWYgaXQKLSAgIGlzIG5vIGxvbmdlciB1c2VkLgorICAgUGFyc2VUdXBsZSBjb252ZXJ0ZXI6IGVuY29kZSA6Y2xhc3M6YHN0cmAgb2JqZWN0cyB0byA6Y2xhc3M6YGJ5dGVzYCB1c2luZworICAgOmM6ZnVuYzpgUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdGA7IDpjbGFzczpgYnl0ZXNgIG9iamVjdHMgYXJlIG91dHB1dCBhcy1pcy4KKyAgICpyZXN1bHQqIG11c3QgYmUgYSA6Yzp0eXBlOmBQeUJ5dGVzT2JqZWN0KmAgd2hpY2ggbXVzdCBiZSByZWxlYXNlZCB3aGVuIGl0IGlzCisgICBubyBsb25nZXIgdXNlZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKK1RvIGRlY29kZSBmaWxlIG5hbWVzIGR1cmluZyBhcmd1bWVudCBwYXJzaW5nLCB0aGUgYGAiTyYiYGAgY29udmVydGVyIHNob3VsZCBiZQordXNlZCwgcGFzc2luZyA6YzpmdW5jOmBQeVVuaWNvZGVfRlNEZWNvZGVyYCBhcyB0aGUgY29udmVyc2lvbiBmdW5jdGlvbjoKIAotICAgRGVjb2RlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB1c2luZyA6Y2RhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgCi0gICBhbmQgdGhlIGBgInN1cnJvZ2F0ZWVzY2FwZSJgYCBlcnJvciBoYW5kbGVyLgorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfRlNEZWNvZGVyKFB5T2JqZWN0KiBvYmosIHZvaWQqIHJlc3VsdCkKIAotICAgSWYgOmNkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gVVRGLTguCisgICBQYXJzZVR1cGxlIGNvbnZlcnRlcjogZGVjb2RlIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMgdG8gOmNsYXNzOmBzdHJgIHVzaW5nCisgICA6YzpmdW5jOmBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZWA7IDpjbGFzczpgc3RyYCBvYmplY3RzIGFyZSBvdXRwdXQKKyAgIGFzLWlzLiAqcmVzdWx0KiBtdXN0IGJlIGEgOmM6dHlwZTpgUHlVbmljb2RlT2JqZWN0KmAgd2hpY2ggbXVzdCBiZSByZWxlYXNlZAorICAgd2hlbiBpdCBpcyBubyBsb25nZXIgdXNlZC4KIAotICAgVXNlIDpmdW5jOmBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZWAgaWYgeW91IGtub3cgdGhlIHN0cmluZyBsZW5ndGguCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoY29uc3QgY2hhciAqcykKIAotICAgRGVjb2RlIGEgc3RyaW5nIHVzaW5nIDpjZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AgYW5kCi0gICB0aGUgYGAic3Vycm9nYXRlZXNjYXBlImBgIGVycm9yIGhhbmRsZXIuCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKIAotICAgSWYgOmNkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gVVRGLTguCisgICBEZWNvZGUgYSBzdHJpbmcgdXNpbmcgOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2AgYW5kIHRoZQorICAgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGVycm9yIGhhbmRsZXIsIG9yIGBgJ3N0cmljdCdgYCBvbiBXaW5kb3dzLgorCisgICBJZiA6YzpkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gdGhlCisgICBsb2NhbGUgZW5jb2RpbmcuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBVc2UgYGAnc3RyaWN0J2BgIGVycm9yIGhhbmRsZXIgb24gV2luZG93cy4KKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoY29uc3QgY2hhciAqcykKKworICAgRGVjb2RlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB1c2luZyA6YzpkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYAorICAgYW5kIHRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgZXJyb3IgaGFuZGxlciwgb3IgYGAnc3RyaWN0J2BgIG9uIFdpbmRvd3MuCisKKyAgIElmIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgIGlzIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZy4KKworICAgVXNlIDpjOmZ1bmM6YFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplYCBpZiB5b3Uga25vdyB0aGUgc3RyaW5nIGxlbmd0aC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFVzZSBgYCdzdHJpY3QnYGAgZXJyb3IgaGFuZGxlciBvbiBXaW5kb3dzLgorCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChQeU9iamVjdCAqdW5pY29kZSkKKworICAgRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdG8gOmM6ZGF0YTpgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZ2Agd2l0aCB0aGUKKyAgIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCBlcnJvciBoYW5kbGVyLCBvciBgYCdzdHJpY3QnYGAgb24gV2luZG93cywgYW5kIHJldHVybgorICAgOmNsYXNzOmBieXRlc2AuCisKKyAgIElmIDpjOmRhdGE6YFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmdgIGlzIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUKKyAgIGxvY2FsZSBlbmNvZGluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAogd2NoYXJfdCBTdXBwb3J0CiAiIiIiIiIiIiIiIiIiIiIKIAotOmN0eXBlOmB3Y2hhcl90YCBzdXBwb3J0IGZvciBwbGF0Zm9ybXMgd2hpY2ggc3VwcG9ydCBpdDoKKzpjOnR5cGU6YHdjaGFyX3RgIHN1cHBvcnQgZm9yIHBsYXRmb3JtcyB3aGljaCBzdXBwb3J0IGl0OgogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQogCi0gICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBmcm9tIHRoZSA6Y3R5cGU6YHdjaGFyX3RgIGJ1ZmZlciAqdyogb2YgdGhlIGdpdmVuICpzaXplKi4KKyAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGZyb20gdGhlIDpjOnR5cGU6YHdjaGFyX3RgIGJ1ZmZlciAqdyogb2YgdGhlIGdpdmVuICpzaXplKi4KICAgIFBhc3NpbmcgLTEgYXMgdGhlICpzaXplKiBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gbXVzdCBpdHNlbGYgY29tcHV0ZSB0aGUgbGVuZ3RoLAogICAgdXNpbmcgd2NzbGVuLgogICAgUmV0dXJuICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX0FzV2lkZUNoYXIoUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlLCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcihQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGUsIHdjaGFyX3QgKncsIFB5X3NzaXplX3Qgc2l6ZSkKIAotICAgQ29weSB0aGUgVW5pY29kZSBvYmplY3QgY29udGVudHMgaW50byB0aGUgOmN0eXBlOmB3Y2hhcl90YCBidWZmZXIgKncqLiAgQXQgbW9zdAotICAgKnNpemUqIDpjdHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycyBhcmUgY29waWVkIChleGNsdWRpbmcgYSBwb3NzaWJseSB0cmFpbGluZwotICAgMC10ZXJtaW5hdGlvbiBjaGFyYWN0ZXIpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgOmN0eXBlOmB3Y2hhcl90YCBjaGFyYWN0ZXJzCi0gICBjb3BpZWQgb3IgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4gIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIDpjdHlwZTpgd2NoYXJfdGAKKyAgIENvcHkgdGhlIFVuaWNvZGUgb2JqZWN0IGNvbnRlbnRzIGludG8gdGhlIDpjOnR5cGU6YHdjaGFyX3RgIGJ1ZmZlciAqdyouICBBdCBtb3N0CisgICAqc2l6ZSogOmM6dHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycyBhcmUgY29waWVkIChleGNsdWRpbmcgYSBwb3NzaWJseSB0cmFpbGluZworICAgMC10ZXJtaW5hdGlvbiBjaGFyYWN0ZXIpLiAgUmV0dXJuIHRoZSBudW1iZXIgb2YgOmM6dHlwZTpgd2NoYXJfdGAgY2hhcmFjdGVycworICAgY29waWVkIG9yIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmB3Y2hhcl90YAogICAgc3RyaW5nIG1heSBvciBtYXkgbm90IGJlIDAtdGVybWluYXRlZC4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyCi0gICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgOmN0eXBlOmB3Y2hhcl90YCBzdHJpbmcgaXMgMC10ZXJtaW5hdGVkIGluIGNhc2UgdGhpcyBpcworICAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIDpjOnR5cGU6YHdjaGFyX3RgIHN0cmluZyBpcyAwLXRlcm1pbmF0ZWQgaW4gY2FzZSB0aGlzIGlzCiAgICByZXF1aXJlZCBieSB0aGUgYXBwbGljYXRpb24uCiAKIAorLi4gYzpmdW5jdGlvbjo6IHdjaGFyX3QqIFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90ICpzaXplKQorCisgICBDb252ZXJ0IHRoZSBVbmljb2RlIG9iamVjdCB0byBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4gVGhlIG91dHB1dCBzdHJpbmcKKyAgIGFsd2F5cyBlbmRzIHdpdGggYSBudWwgY2hhcmFjdGVyLiBJZiAqc2l6ZSogaXMgbm90ICpOVUxMKiwgd3JpdGUgdGhlIG51bWJlcgorICAgb2Ygd2lkZSBjaGFyYWN0ZXJzIChleGNsdWRpbmcgdGhlIHRyYWlsaW5nIDAtdGVybWluYXRpb24gY2hhcmFjdGVyKSBpbnRvCisgICAqXCpzaXplKi4KKworICAgUmV0dXJucyBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fQWxsb2NgICh1c2UgOmM6ZnVuYzpgUHlNZW1fRnJlZWAKKyAgIHRvIGZyZWUgaXQpIG9uIHN1Y2Nlc3MuIE9uIGVycm9yLCByZXR1cm5zICpOVUxMKiwgKlwqc2l6ZSogaXMgdW5kZWZpbmVkIGFuZAorICAgcmFpc2VzIGEgOmV4YzpgTWVtb3J5RXJyb3JgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBfYnVpbHRpbmNvZGVjczoKIAogQnVpbHQtaW4gQ29kZWNzCkBAIC00MjUsOCArNTA3LDggQEAKIAogU2V0dGluZyBlbmNvZGluZyB0byAqTlVMTCogY2F1c2VzIHRoZSBkZWZhdWx0IGVuY29kaW5nIHRvIGJlIHVzZWQKIHdoaWNoIGlzIEFTQ0lJLiAgVGhlIGZpbGUgc3lzdGVtIGNhbGxzIHNob3VsZCB1c2UKLTpjZnVuYzpgUHlVbmljb2RlX0ZTQ29udmVydGVyYCBmb3IgZW5jb2RpbmcgZmlsZSBuYW1lcy4gVGhpcyB1c2VzIHRoZQotdmFyaWFibGUgOmNkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpbnRlcm5hbGx5LiBUaGlzCis6YzpmdW5jOmBQeVVuaWNvZGVfRlNDb252ZXJ0ZXJgIGZvciBlbmNvZGluZyBmaWxlIG5hbWVzLiBUaGlzIHVzZXMgdGhlCit2YXJpYWJsZSA6YzpkYXRhOmBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nYCBpbnRlcm5hbGx5LiBUaGlzCiB2YXJpYWJsZSBzaG91bGQgYmUgdHJlYXRlZCBhcyByZWFkLW9ubHk6IG9uIHNvbWUgc3lzdGVtcywgaXQgd2lsbCBiZSBhCiBwb2ludGVyIHRvIGEgc3RhdGljIHN0cmluZywgb24gb3RoZXJzLCBpdCB3aWxsIGNoYW5nZSBhdCBydW4tdGltZQogKHN1Y2ggYXMgd2hlbiB0aGUgYXBwbGljYXRpb24gaW52b2tlcyBzZXRsb2NhbGUpLgpAQCAtNDQ1LDcgKzUyNyw3IEBACiBUaGVzZSBhcmUgdGhlIGdlbmVyaWMgY29kZWMgQVBJczoKIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBieSBkZWNvZGluZyAqc2l6ZSogYnl0ZXMgb2YgdGhlIGVuY29kZWQgc3RyaW5nICpzKi4KICAgICplbmNvZGluZyogYW5kICplcnJvcnMqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgc2FtZSBuYW1lCkBAIC00NTQsMTYgKzUzNiwxNiBAQAogICAgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZShjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCiAKLSAgIEVuY29kZSB0aGUgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgKnMqIG9mIHRoZSBnaXZlbiAqc2l6ZSogYW5kIHJldHVybiBhIFB5dGhvbgorICAgRW5jb2RlIHRoZSA6Yzp0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgKnMqIG9mIHRoZSBnaXZlbiAqc2l6ZSogYW5kIHJldHVybiBhIFB5dGhvbgogICAgYnl0ZXMgb2JqZWN0LiAgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIHRoZQogICAgcGFyYW1ldGVycyBvZiB0aGUgc2FtZSBuYW1lIGluIHRoZSBVbmljb2RlIDptZXRoOmBlbmNvZGVgIG1ldGhvZC4gIFRoZSBjb2RlYwogICAgdG8gYmUgdXNlZCBpcyBsb29rZWQgdXAgdXNpbmcgdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4gIFJldHVybiAqTlVMTCogaWYgYW4KICAgIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSwgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIFB5dGhvbiBieXRlcyBvYmplY3QuCiAgICAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHNhbWUKQEAgLTQ3OCwyOCArNTYwLDI4IEBACiBUaGVzZSBhcmUgdGhlIFVURi04IGNvZGVjIEFQSXM6CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEY4KGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGOChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgYnkgZGVjb2RpbmcgKnNpemUqIGJ5dGVzIG9mIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZwogICAgKnMqLiBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgUHlfc3NpemVfdCAqY29uc3VtZWQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogCi0gICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmNmdW5jOmBQeVVuaWNvZGVfRGVjb2RlVVRGOGAuIElmCisgICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZVVURjhgLiBJZgogICAgKmNvbnN1bWVkKiBpcyBub3QgKk5VTEwqLCB0cmFpbGluZyBpbmNvbXBsZXRlIFVURi04IGJ5dGUgc2VxdWVuY2VzIHdpbGwgbm90IGJlCiAgICB0cmVhdGVkIGFzIGFuIGVycm9yLiBUaG9zZSBieXRlcyB3aWxsIG5vdCBiZSBkZWNvZGVkIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCiAgICB0aGF0IGhhdmUgYmVlbiBkZWNvZGVkIHdpbGwgYmUgc3RvcmVkIGluICpjb25zdW1lZCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVVVEY4KGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlVVRGOChjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKIAotICAgRW5jb2RlIHRoZSA6Y3R5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciAqcyogb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBVVEYtOCBhbmQKKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyICpzKiBvZiB0aGUgZ2l2ZW4gKnNpemUqIHVzaW5nIFVURi04IGFuZAogICAgcmV0dXJuIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkKICAgIHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVVRGOFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVVRGOFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKIAogICAgRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdXNpbmcgVVRGLTggYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIFB5dGhvbiBieXRlcwogICAgb2JqZWN0LiAgRXJyb3IgaGFuZGxpbmcgaXMgInN0cmljdCIuICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMKQEAgLTUxMiw3ICs1OTQsNyBAQAogVGhlc2UgYXJlIHRoZSBVVEYtMzIgY29kZWMgQVBJczoKIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjMyKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgKmJ5dGVvcmRlcikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjMyKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgKmJ5dGVvcmRlcikKIAogICAgRGVjb2RlICpzaXplKiBieXRlcyBmcm9tIGEgVVRGLTMyIGVuY29kZWQgYnVmZmVyIHN0cmluZyBhbmQgcmV0dXJuIHRoZQogICAgY29ycmVzcG9uZGluZyBVbmljb2RlIG9iamVjdC4gICplcnJvcnMqIChpZiBub24tKk5VTEwqKSBkZWZpbmVzIHRoZSBlcnJvcgpAQCAtNTQwLDE2ICs2MjIsMTYgQEAKICAgIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgaW50ICpieXRlb3JkZXIsIFB5X3NzaXplX3QgKmNvbnN1bWVkKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgaW50ICpieXRlb3JkZXIsIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogCi0gICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmNmdW5jOmBQeVVuaWNvZGVfRGVjb2RlVVRGMzJgLiBJZgotICAgKmNvbnN1bWVkKiBpcyBub3QgKk5VTEwqLCA6Y2Z1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsYCB3aWxsIG5vdCB0cmVhdAorICAgSWYgKmNvbnN1bWVkKiBpcyAqTlVMTCosIGJlaGF2ZSBsaWtlIDpjOmZ1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEYzMmAuIElmCisgICAqY29uc3VtZWQqIGlzIG5vdCAqTlVMTCosIDpjOmZ1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsYCB3aWxsIG5vdCB0cmVhdAogICAgdHJhaWxpbmcgaW5jb21wbGV0ZSBVVEYtMzIgYnl0ZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgYSBudW1iZXIgb2YgYnl0ZXMgbm90IGRpdmlzaWJsZQogICAgYnkgZm91cikgYXMgYW4gZXJyb3IuIFRob3NlIGJ5dGVzIHdpbGwgbm90IGJlIGRlY29kZWQgYW5kIHRoZSBudW1iZXIgb2YgYnl0ZXMKICAgIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgd2lsbCBiZSBzdG9yZWQgaW4gKmNvbnN1bWVkKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZVVURjMyKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgYnl0ZW9yZGVyKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlVVRGMzIoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIGludCBieXRlb3JkZXIpCiAKICAgIFJldHVybiBhIFB5dGhvbiBieXRlcyBvYmplY3QgaG9sZGluZyB0aGUgVVRGLTMyIGVuY29kZWQgdmFsdWUgb2YgdGhlIFVuaWNvZGUKICAgIGRhdGEgaW4gKnMqLiAgT3V0cHV0IGlzIHdyaXR0ZW4gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgYnl0ZSBvcmRlcjo6CkBAIC01NjcsNyArNjQ5LDcgQEAKICAgIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfQXNVVEYzMlN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVVRGMzJTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIFJldHVybiBhIFB5dGhvbiBieXRlIHN0cmluZyB1c2luZyB0aGUgVVRGLTMyIGVuY29kaW5nIGluIG5hdGl2ZSBieXRlCiAgICBvcmRlci4gVGhlIHN0cmluZyBhbHdheXMgc3RhcnRzIHdpdGggYSBCT00gbWFyay4gIEVycm9yIGhhbmRsaW5nIGlzICJzdHJpY3QiLgpAQCAtNTgwLDcgKzY2Miw3IEBACiBUaGVzZSBhcmUgdGhlIFVURi0xNiBjb2RlYyBBUElzOgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGMTYoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIGludCAqYnl0ZW9yZGVyKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVVRGMTYoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIGludCAqYnl0ZW9yZGVyKQogCiAgICBEZWNvZGUgKnNpemUqIGJ5dGVzIGZyb20gYSBVVEYtMTYgZW5jb2RlZCBidWZmZXIgc3RyaW5nIGFuZCByZXR1cm4gdGhlCiAgICBjb3JyZXNwb25kaW5nIFVuaWNvZGUgb2JqZWN0LiAgKmVycm9ycyogKGlmIG5vbi0qTlVMTCopIGRlZmluZXMgdGhlIGVycm9yCkBAIC02MDcsMTYgKzY4OSwxNiBAQAogICAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUgY29kZWMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgKmJ5dGVvcmRlciwgUHlfc3NpemVfdCAqY29uc3VtZWQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEYxNlN0YXRlZnVsKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgKmJ5dGVvcmRlciwgUHlfc3NpemVfdCAqY29uc3VtZWQpCiAKLSAgIElmICpjb25zdW1lZCogaXMgKk5VTEwqLCBiZWhhdmUgbGlrZSA6Y2Z1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEYxNmAuIElmCi0gICAqY29uc3VtZWQqIGlzIG5vdCAqTlVMTCosIDpjZnVuYzpgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWxgIHdpbGwgbm90IHRyZWF0CisgICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZVVURjE2YC4gSWYKKyAgICpjb25zdW1lZCogaXMgbm90ICpOVUxMKiwgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWxgIHdpbGwgbm90IHRyZWF0CiAgICB0cmFpbGluZyBpbmNvbXBsZXRlIFVURi0xNiBieXRlIHNlcXVlbmNlcyAoc3VjaCBhcyBhbiBvZGQgbnVtYmVyIG9mIGJ5dGVzIG9yIGEKICAgIHNwbGl0IHN1cnJvZ2F0ZSBwYWlyKSBhcyBhbiBlcnJvci4gVGhvc2UgYnl0ZXMgd2lsbCBub3QgYmUgZGVjb2RlZCBhbmQgdGhlCiAgICBudW1iZXIgb2YgYnl0ZXMgdGhhdCBoYXZlIGJlZW4gZGVjb2RlZCB3aWxsIGJlIHN0b3JlZCBpbiAqY29uc3VtZWQqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlVVRGMTYoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIGludCBieXRlb3JkZXIpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVVVEYxNihjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgaW50IGJ5dGVvcmRlcikKIAogICAgUmV0dXJuIGEgUHl0aG9uIGJ5dGVzIG9iamVjdCBob2xkaW5nIHRoZSBVVEYtMTYgZW5jb2RlZCB2YWx1ZSBvZiB0aGUgVW5pY29kZQogICAgZGF0YSBpbiAqcyouICBPdXRwdXQgaXMgd3JpdHRlbiBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyBieXRlIG9yZGVyOjoKQEAgLTYyOCwxNCArNzEwLDE0IEBACiAgICBJZiBieXRlb3JkZXIgaXMgYGAwYGAsIHRoZSBvdXRwdXQgc3RyaW5nIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggdGhlIFVuaWNvZGUgQk9NCiAgICBtYXJrIChVK0ZFRkYpLiBJbiB0aGUgb3RoZXIgdHdvIG1vZGVzLCBubyBCT00gbWFyayBpcyBwcmVwZW5kZWQuCiAKLSAgIElmICpQeV9VTklDT0RFX1dJREUqIGlzIGRlZmluZWQsIGEgc2luZ2xlIDpjdHlwZTpgUHlfVU5JQ09ERWAgdmFsdWUgbWF5IGdldAotICAgcmVwcmVzZW50ZWQgYXMgYSBzdXJyb2dhdGUgcGFpci4gSWYgaXQgaXMgbm90IGRlZmluZWQsIGVhY2ggOmN0eXBlOmBQeV9VTklDT0RFYAorICAgSWYgKlB5X1VOSUNPREVfV0lERSogaXMgZGVmaW5lZCwgYSBzaW5nbGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgdmFsdWUgbWF5IGdldAorICAgcmVwcmVzZW50ZWQgYXMgYSBzdXJyb2dhdGUgcGFpci4gSWYgaXQgaXMgbm90IGRlZmluZWQsIGVhY2ggOmM6dHlwZTpgUHlfVU5JQ09ERWAKICAgIHZhbHVlcyBpcyBpbnRlcnByZXRlZCBhcyBhbiBVQ1MtMiBjaGFyYWN0ZXIuCiAKICAgIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfQXNVVEYxNlN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVVRGMTZTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIFJldHVybiBhIFB5dGhvbiBieXRlIHN0cmluZyB1c2luZyB0aGUgVVRGLTE2IGVuY29kaW5nIGluIG5hdGl2ZSBieXRlCiAgICBvcmRlci4gVGhlIHN0cmluZyBhbHdheXMgc3RhcnRzIHdpdGggYSBCT00gbWFyay4gIEVycm9yIGhhbmRsaW5nIGlzICJzdHJpY3QiLgpAQCAtNjQ4LDIzICs3MzAsMjMgQEAKIFRoZXNlIGFyZSB0aGUgVVRGLTcgY29kZWMgQVBJczoKIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEY3KGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBieSBkZWNvZGluZyAqc2l6ZSogYnl0ZXMgb2YgdGhlIFVURi03IGVuY29kZWQgc3RyaW5nCiAgICAqcyouICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgUHlfc3NpemVfdCAqY29uc3VtZWQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWwoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMsIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogCi0gICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmNmdW5jOmBQeVVuaWNvZGVfRGVjb2RlVVRGN2AuICBJZgorICAgSWYgKmNvbnN1bWVkKiBpcyAqTlVMTCosIGJlaGF2ZSBsaWtlIDpjOmZ1bmM6YFB5VW5pY29kZV9EZWNvZGVVVEY3YC4gIElmCiAgICAqY29uc3VtZWQqIGlzIG5vdCAqTlVMTCosIHRyYWlsaW5nIGluY29tcGxldGUgVVRGLTcgYmFzZS02NCBzZWN0aW9ucyB3aWxsIG5vdAogICAgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gIFRob3NlIGJ5dGVzIHdpbGwgbm90IGJlIGRlY29kZWQgYW5kIHRoZSBudW1iZXIgb2YKICAgIGJ5dGVzIHRoYXQgaGF2ZSBiZWVuIGRlY29kZWQgd2lsbCBiZSBzdG9yZWQgaW4gKmNvbnN1bWVkKi4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZVVURjcoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBpbnQgYmFzZTY0U2V0TywgaW50IGJhc2U2NFdoaXRlU3BhY2UsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZVVURjcoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBpbnQgYmFzZTY0U2V0TywgaW50IGJhc2U2NFdoaXRlU3BhY2UsIGNvbnN0IGNoYXIgKmVycm9ycykKIAotICAgRW5jb2RlIHRoZSA6Y3R5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gc2l6ZSB1c2luZyBVVEYtNyBhbmQKKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiBzaXplIHVzaW5nIFVURi03IGFuZAogICAgcmV0dXJuIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkKICAgIHRoZSBjb2RlYy4KIApAQCAtNjgwLDIwICs3NjIsMjAgQEAKIFRoZXNlIGFyZSB0aGUgIlVuaWNvZGUgRXNjYXBlIiBjb2RlYyBBUElzOgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKICAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGJ5IGRlY29kaW5nICpzaXplKiBieXRlcyBvZiB0aGUgVW5pY29kZS1Fc2NhcGUgZW5jb2RlZAogICAgc3RyaW5nICpzKi4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlVW5pY29kZUVzY2FwZShjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVVbmljb2RlRXNjYXBlKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKIAotICAgRW5jb2RlIHRoZSA6Y3R5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gc2l6ZSB1c2luZyBVbmljb2RlLUVzY2FwZSBhbmQKKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiAqc2l6ZSogdXNpbmcgVW5pY29kZS1Fc2NhcGUgYW5kCiAgICByZXR1cm4gYSBQeXRob24gc3RyaW5nIG9iamVjdC4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlCiAgICBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKIAogICAgRW5jb2RlIGEgVW5pY29kZSBvYmplY3QgdXNpbmcgVW5pY29kZS1Fc2NhcGUgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIFB5dGhvbgogICAgc3RyaW5nIG9iamVjdC4gIEVycm9yIGhhbmRsaW5nIGlzICJzdHJpY3QiLiBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMKQEAgLTcwNiwyMCArNzg4LDIwIEBACiBUaGVzZSBhcmUgdGhlICJSYXcgVW5pY29kZSBFc2NhcGUiIGNvZGVjIEFQSXM6CiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgYnkgZGVjb2RpbmcgKnNpemUqIGJ5dGVzIG9mIHRoZSBSYXctVW5pY29kZS1Fc2NhcGUKICAgIGVuY29kZWQgc3RyaW5nICpzKi4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlUmF3VW5pY29kZUVzY2FwZShjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZVJhd1VuaWNvZGVFc2NhcGUoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKLSAgIEVuY29kZSB0aGUgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBSYXctVW5pY29kZS1Fc2NhcGUKKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiAqc2l6ZSogdXNpbmcgUmF3LVVuaWNvZGUtRXNjYXBlCiAgICBhbmQgcmV0dXJuIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5CiAgICB0aGUgY29kZWMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHVzaW5nIFJhdy1Vbmljb2RlLUVzY2FwZSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgYXMKICAgIFB5dGhvbiBzdHJpbmcgb2JqZWN0LiBFcnJvciBoYW5kbGluZyBpcyAic3RyaWN0Ii4gUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24KQEAgLTczMywyMCArODE1LDIwIEBACiBvcmRpbmFscyBhbmQgb25seSB0aGVzZSBhcmUgYWNjZXB0ZWQgYnkgdGhlIGNvZGVjcyBkdXJpbmcgZW5jb2RpbmcuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKICAgIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGJ5IGRlY29kaW5nICpzaXplKiBieXRlcyBvZiB0aGUgTGF0aW4tMSBlbmNvZGVkIHN0cmluZwogICAgKnMqLiAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUgY29kZWMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVMYXRpbjEoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVMYXRpbjEoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKLSAgIEVuY29kZSB0aGUgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBMYXRpbi0xIGFuZAorICAgRW5jb2RlIHRoZSA6Yzp0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBMYXRpbi0xIGFuZAogICAgcmV0dXJuIGEgUHl0aG9uIGJ5dGVzIG9iamVjdC4gIFJldHVybiAqTlVMTCogaWYgYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkKICAgIHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzTGF0aW4xU3RyaW5nKFB5T2JqZWN0ICp1bmljb2RlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHVzaW5nIExhdGluLTEgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIFB5dGhvbiBieXRlcwogICAgb2JqZWN0LiAgRXJyb3IgaGFuZGxpbmcgaXMgInN0cmljdCIuICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMKQEAgLTc2MCwyMCArODQyLDIwIEBACiBjb2RlcyBnZW5lcmF0ZSBlcnJvcnMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVBU0NJSShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZUFTQ0lJKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBieSBkZWNvZGluZyAqc2l6ZSogYnl0ZXMgb2YgdGhlIEFTQ0lJIGVuY29kZWQgc3RyaW5nCiAgICAqcyouICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZUFTQ0lJKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlQVNDSUkoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKLSAgIEVuY29kZSB0aGUgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBBU0NJSSBhbmQKKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiAqc2l6ZSogdXNpbmcgQVNDSUkgYW5kCiAgICByZXR1cm4gYSBQeXRob24gYnl0ZXMgb2JqZWN0LiAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieQogICAgdGhlIGNvZGVjLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfQXNBU0NJSVN0cmluZyhQeU9iamVjdCAqdW5pY29kZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHVzaW5nIEFTQ0lJIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBhcyBQeXRob24gYnl0ZXMKICAgIG9iamVjdC4gIEVycm9yIGhhbmRsaW5nIGlzICJzdHJpY3QiLiAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzCkBAIC04MDYsNyArODg4LDcgQEAKIAogVGhlc2UgYXJlIHRoZSBtYXBwaW5nIGNvZGVjIEFQSXM6CiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcChjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IHNpemUsIFB5T2JqZWN0ICptYXBwaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgUHlPYmplY3QgKm1hcHBpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKIAogICAgQ3JlYXRlIGEgVW5pY29kZSBvYmplY3QgYnkgZGVjb2RpbmcgKnNpemUqIGJ5dGVzIG9mIHRoZSBlbmNvZGVkIHN0cmluZyAqcyogdXNpbmcKICAgIHRoZSBnaXZlbiAqbWFwcGluZyogb2JqZWN0LiAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUKQEAgLTgxNiwxNCArODk4LDE0IEBACiAgICB0cmVhdGVkIGFzICJ1bmRlZmluZWQgbWFwcGluZyIuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9FbmNvZGVDaGFybWFwKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgUHlPYmplY3QgKm1hcHBpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZUNoYXJtYXAoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBQeU9iamVjdCAqbWFwcGluZywgY29uc3QgY2hhciAqZXJyb3JzKQogCi0gICBFbmNvZGUgdGhlIDpjdHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiAqc2l6ZSogdXNpbmcgdGhlIGdpdmVuCisgICBFbmNvZGUgdGhlIDpjOnR5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gKnNpemUqIHVzaW5nIHRoZSBnaXZlbgogICAgKm1hcHBpbmcqIG9iamVjdCBhbmQgcmV0dXJuIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuIFJldHVybiAqTlVMTCogaWYgYW4KICAgIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSwgUHlPYmplY3QgKm1hcHBpbmcpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUsIFB5T2JqZWN0ICptYXBwaW5nKQogCiAgICBFbmNvZGUgYSBVbmljb2RlIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gKm1hcHBpbmcqIG9iamVjdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQKICAgIGFzIFB5dGhvbiBzdHJpbmcgb2JqZWN0LiAgRXJyb3IgaGFuZGxpbmcgaXMgInN0cmljdCIuICBSZXR1cm4gKk5VTEwqIGlmIGFuCkBAIC04MzIsOSArOTE0LDkgQEAKIFRoZSBmb2xsb3dpbmcgY29kZWMgQVBJIGlzIHNwZWNpYWwgaW4gdGhhdCBtYXBzIFVuaWNvZGUgdG8gVW5pY29kZS4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXAoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBQeU9iamVjdCAqdGFibGUsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1RyYW5zbGF0ZUNoYXJtYXAoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBQeU9iamVjdCAqdGFibGUsIGNvbnN0IGNoYXIgKmVycm9ycykKIAotICAgVHJhbnNsYXRlIGEgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiBieSBhcHBseWluZyBhCisgICBUcmFuc2xhdGUgYSA6Yzp0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiBieSBhcHBseWluZyBhCiAgICBjaGFyYWN0ZXIgbWFwcGluZyAqdGFibGUqIHRvIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBVbmljb2RlIG9iamVjdC4gIFJldHVybgogICAgKk5VTEwqIHdoZW4gYW4gZXhjZXB0aW9uIHdhcyByYWlzZWQgYnkgdGhlIGNvZGVjLgogCkBAIC04NDYsNiArOTI4LDcgQEAKICAgIDpleGM6YExvb2t1cEVycm9yYCkgYXJlIGxlZnQgdW50b3VjaGVkIGFuZCBhcmUgY29waWVkIGFzLWlzLgogCiAKKwogTUJDUyBjb2RlY3MgZm9yIFdpbmRvd3MKICIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiCiAKQEAgLTg1NCwyOSArOTM3LDI4IEBACiBEQkNTKSBpcyBhIGNsYXNzIG9mIGVuY29kaW5ncywgbm90IGp1c3Qgb25lLiAgVGhlIHRhcmdldCBlbmNvZGluZyBpcyBkZWZpbmVkIGJ5CiB0aGUgdXNlciBzZXR0aW5ncyBvbiB0aGUgbWFjaGluZSBydW5uaW5nIHRoZSBjb2RlYy4KIAotCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZU1CQ1MoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVNQkNTKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBDcmVhdGUgYSBVbmljb2RlIG9iamVjdCBieSBkZWNvZGluZyAqc2l6ZSogYnl0ZXMgb2YgdGhlIE1CQ1MgZW5jb2RlZCBzdHJpbmcgKnMqLgogICAgUmV0dXJuICpOVUxMKiBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZCBieSB0aGUgY29kZWMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9EZWNvZGVNQkNTU3RhdGVmdWwoY29uc3QgY2hhciAqcywgaW50IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycywgaW50ICpjb25zdW1lZCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0RlY29kZU1CQ1NTdGF0ZWZ1bChjb25zdCBjaGFyICpzLCBpbnQgc2l6ZSwgY29uc3QgY2hhciAqZXJyb3JzLCBpbnQgKmNvbnN1bWVkKQogCi0gICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmNmdW5jOmBQeVVuaWNvZGVfRGVjb2RlTUJDU2AuIElmCi0gICAqY29uc3VtZWQqIGlzIG5vdCAqTlVMTCosIDpjZnVuYzpgUHlVbmljb2RlX0RlY29kZU1CQ1NTdGF0ZWZ1bGAgd2lsbCBub3QgZGVjb2RlCisgICBJZiAqY29uc3VtZWQqIGlzICpOVUxMKiwgYmVoYXZlIGxpa2UgOmM6ZnVuYzpgUHlVbmljb2RlX0RlY29kZU1CQ1NgLiBJZgorICAgKmNvbnN1bWVkKiBpcyBub3QgKk5VTEwqLCA6YzpmdW5jOmBQeVVuaWNvZGVfRGVjb2RlTUJDU1N0YXRlZnVsYCB3aWxsIG5vdCBkZWNvZGUKICAgIHRyYWlsaW5nIGxlYWQgYnl0ZSBhbmQgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IGhhdmUgYmVlbiBkZWNvZGVkIHdpbGwgYmUgc3RvcmVkCiAgICBpbiAqY29uc3VtZWQqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRW5jb2RlTUJDUyhjb25zdCBQeV9VTklDT0RFICpzLCBQeV9zc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmVycm9ycykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX0VuY29kZU1CQ1MoY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfc3NpemVfdCBzaXplLCBjb25zdCBjaGFyICplcnJvcnMpCiAKLSAgIEVuY29kZSB0aGUgOmN0eXBlOmBQeV9VTklDT0RFYCBidWZmZXIgb2YgdGhlIGdpdmVuICpzaXplKiB1c2luZyBNQkNTIGFuZCByZXR1cm4KKyAgIEVuY29kZSB0aGUgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYnVmZmVyIG9mIHRoZSBnaXZlbiAqc2l6ZSogdXNpbmcgTUJDUyBhbmQgcmV0dXJuCiAgICBhIFB5dGhvbiBieXRlcyBvYmplY3QuICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZQogICAgY29kZWMuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Bc01CQ1NTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Bc01CQ1NTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpCiAKICAgIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHVzaW5nIE1CQ1MgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIFB5dGhvbiBieXRlcwogICAgb2JqZWN0LiAgRXJyb3IgaGFuZGxpbmcgaXMgInN0cmljdCIuICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMKQEAgLTg5OSwxMiArOTgxLDEyIEBACiBUaGV5IGFsbCByZXR1cm4gKk5VTEwqIG9yIGBgLTFgYCBpZiBhbiBleGNlcHRpb24gb2NjdXJzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfQ29uY2F0KFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Db25jYXQoUHlPYmplY3QgKmxlZnQsIFB5T2JqZWN0ICpyaWdodCkKIAogICAgQ29uY2F0IHR3byBzdHJpbmdzIGdpdmluZyBhIG5ldyBVbmljb2RlIHN0cmluZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1NwbGl0KFB5T2JqZWN0ICpzLCBQeU9iamVjdCAqc2VwLCBQeV9zc2l6ZV90IG1heHNwbGl0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfU3BsaXQoUHlPYmplY3QgKnMsIFB5T2JqZWN0ICpzZXAsIFB5X3NzaXplX3QgbWF4c3BsaXQpCiAKICAgIFNwbGl0IGEgc3RyaW5nIGdpdmluZyBhIGxpc3Qgb2YgVW5pY29kZSBzdHJpbmdzLiAgSWYgKnNlcCogaXMgKk5VTEwqLCBzcGxpdHRpbmcKICAgIHdpbGwgYmUgZG9uZSBhdCBhbGwgd2hpdGVzcGFjZSBzdWJzdHJpbmdzLiAgT3RoZXJ3aXNlLCBzcGxpdHMgb2NjdXIgYXQgdGhlIGdpdmVuCkBAIC05MTIsMTQgKzk5NCwxNCBAQAogICAgc2V0LiAgU2VwYXJhdG9ycyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1NwbGl0bGluZXMoUHlPYmplY3QgKnMsIGludCBrZWVwZW5kKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfU3BsaXRsaW5lcyhQeU9iamVjdCAqcywgaW50IGtlZXBlbmQpCiAKICAgIFNwbGl0IGEgVW5pY29kZSBzdHJpbmcgYXQgbGluZSBicmVha3MsIHJldHVybmluZyBhIGxpc3Qgb2YgVW5pY29kZSBzdHJpbmdzLgogICAgQ1JMRiBpcyBjb25zaWRlcmVkIHRvIGJlIG9uZSBsaW5lIGJyZWFrLiAgSWYgKmtlZXBlbmQqIGlzIDAsIHRoZSBMaW5lIGJyZWFrCiAgICBjaGFyYWN0ZXJzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBzdHJpbmdzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfVHJhbnNsYXRlKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICp0YWJsZSwgY29uc3QgY2hhciAqZXJyb3JzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfVHJhbnNsYXRlKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICp0YWJsZSwgY29uc3QgY2hhciAqZXJyb3JzKQogCiAgICBUcmFuc2xhdGUgYSBzdHJpbmcgYnkgYXBwbHlpbmcgYSBjaGFyYWN0ZXIgbWFwcGluZyB0YWJsZSB0byBpdCBhbmQgcmV0dXJuIHRoZQogICAgcmVzdWx0aW5nIFVuaWNvZGUgb2JqZWN0LgpAQCAtOTM1LDIwICsxMDE3LDIwIEBACiAgICB1c2UgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxpbmcuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Kb2luKFB5T2JqZWN0ICpzZXBhcmF0b3IsIFB5T2JqZWN0ICpzZXEpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Kb2luKFB5T2JqZWN0ICpzZXBhcmF0b3IsIFB5T2JqZWN0ICpzZXEpCiAKICAgIEpvaW4gYSBzZXF1ZW5jZSBvZiBzdHJpbmdzIHVzaW5nIHRoZSBnaXZlbiAqc2VwYXJhdG9yKiBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcKICAgIFVuaWNvZGUgc3RyaW5nLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfVGFpbG1hdGNoKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICpzdWJzdHIsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBpbnQgZGlyZWN0aW9uKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfVGFpbG1hdGNoKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICpzdWJzdHIsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBpbnQgZGlyZWN0aW9uKQogCiAgICBSZXR1cm4gMSBpZiAqc3Vic3RyKiBtYXRjaGVzIGBgc3RyW3N0YXJ0OmVuZF1gYCBhdCB0aGUgZ2l2ZW4gdGFpbCBlbmQKICAgICgqZGlyZWN0aW9uKiA9PSAtMSBtZWFucyB0byBkbyBhIHByZWZpeCBtYXRjaCwgKmRpcmVjdGlvbiogPT0gMSBhIHN1ZmZpeCBtYXRjaCksCiAgICAwIG90aGVyd2lzZS4gUmV0dXJuIGBgLTFgYCBpZiBhbiBlcnJvciBvY2N1cnJlZC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VW5pY29kZV9GaW5kKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICpzdWJzdHIsIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBpbnQgZGlyZWN0aW9uKQorLi4gYzpmdW5jdGlvbjo6IFB5X3NzaXplX3QgUHlVbmljb2RlX0ZpbmQoUHlPYmplY3QgKnN0ciwgUHlPYmplY3QgKnN1YnN0ciwgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGludCBkaXJlY3Rpb24pCiAKICAgIFJldHVybiB0aGUgZmlyc3QgcG9zaXRpb24gb2YgKnN1YnN0ciogaW4gYGBzdHJbc3RhcnQ6ZW5kXWBgIHVzaW5nIHRoZSBnaXZlbgogICAgKmRpcmVjdGlvbiogKCpkaXJlY3Rpb24qID09IDEgbWVhbnMgdG8gZG8gYSBmb3J3YXJkIHNlYXJjaCwgKmRpcmVjdGlvbiogPT0gLTEgYQpAQCAtOTU3LDMyICsxMDM5LDM0IEBACiAgICBvY2N1cnJlZCBhbmQgYW4gZXhjZXB0aW9uIGhhcyBiZWVuIHNldC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VW5pY29kZV9Db3VudChQeU9iamVjdCAqc3RyLCBQeU9iamVjdCAqc3Vic3RyLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKKy4uIGM6ZnVuY3Rpb246OiBQeV9zc2l6ZV90IFB5VW5pY29kZV9Db3VudChQeU9iamVjdCAqc3RyLCBQeU9iamVjdCAqc3Vic3RyLCBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKIAogICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mICpzdWJzdHIqIGluCiAgICBgYHN0cltzdGFydDplbmRdYGAuICBSZXR1cm4gYGAtMWBgIGlmIGFuIGVycm9yIG9jY3VycmVkLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfUmVwbGFjZShQeU9iamVjdCAqc3RyLCBQeU9iamVjdCAqc3Vic3RyLCBQeU9iamVjdCAqcmVwbHN0ciwgUHlfc3NpemVfdCBtYXhjb3VudCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlVbmljb2RlX1JlcGxhY2UoUHlPYmplY3QgKnN0ciwgUHlPYmplY3QgKnN1YnN0ciwgUHlPYmplY3QgKnJlcGxzdHIsIFB5X3NzaXplX3QgbWF4Y291bnQpCiAKICAgIFJlcGxhY2UgYXQgbW9zdCAqbWF4Y291bnQqIG9jY3VycmVuY2VzIG9mICpzdWJzdHIqIGluICpzdHIqIHdpdGggKnJlcGxzdHIqIGFuZAogICAgcmV0dXJuIHRoZSByZXN1bHRpbmcgVW5pY29kZSBvYmplY3QuICptYXhjb3VudCogPT0gLTEgbWVhbnMgcmVwbGFjZSBhbGwKICAgIG9jY3VycmVuY2VzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQogCiAgICBDb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MgdGhhbiwgZXF1YWwsIGFuZCBncmVhdGVyIHRoYW4sCiAgICByZXNwZWN0aXZlbHkuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0ICp1bmksIGNoYXIgKnN0cmluZykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoUHlPYmplY3QgKnVuaSwgY2hhciAqc3RyaW5nKQogCiAgICBDb21wYXJlIGEgdW5pY29kZSBvYmplY3QsICp1bmkqLCB3aXRoICpzdHJpbmcqIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MKLSAgIHRoYW4sIGVxdWFsLCBhbmQgZ3JlYXRlciB0aGFuLCByZXNwZWN0aXZlbHkuCisgICB0aGFuLCBlcXVhbCwgYW5kIGdyZWF0ZXIgdGhhbiwgcmVzcGVjdGl2ZWx5LiBJdCBpcyBiZXN0IHRvIHBhc3Mgb25seQorICAgQVNDSUktZW5jb2RlZCBzdHJpbmdzLCBidXQgdGhlIGZ1bmN0aW9uIGludGVycHJldHMgdGhlIGlucHV0IHN0cmluZyBhcworICAgSVNPLTg4NTktMSBpZiBpdCBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycyIuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5VW5pY29kZV9SaWNoQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgIFB5T2JqZWN0ICpyaWdodCwgIGludCBvcCkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX1JpY2hDb21wYXJlKFB5T2JqZWN0ICpsZWZ0LCAgUHlPYmplY3QgKnJpZ2h0LCAgaW50IG9wKQogCiAgICBSaWNoIGNvbXBhcmUgdHdvIHVuaWNvZGUgc3RyaW5ncyBhbmQgcmV0dXJuIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCkBAIC05OTgsMTMgKzEwODIsMTMgQEAKICAgIDpjb25zdDpgUHlfTkVgLCA6Y29uc3Q6YFB5X0xUYCwgYW5kIDpjb25zdDpgUHlfTEVgLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRm9ybWF0KFB5T2JqZWN0ICpmb3JtYXQsIFB5T2JqZWN0ICphcmdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRm9ybWF0KFB5T2JqZWN0ICpmb3JtYXQsIFB5T2JqZWN0ICphcmdzKQogCiAgICBSZXR1cm4gYSBuZXcgc3RyaW5nIG9iamVjdCBmcm9tICpmb3JtYXQqIGFuZCAqYXJncyo7IHRoaXMgaXMgYW5hbG9nb3VzIHRvCiAgICBgYGZvcm1hdCAlIGFyZ3NgYC4gIFRoZSAqYXJncyogYXJndW1lbnQgbXVzdCBiZSBhIHR1cGxlLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ29udGFpbnMoUHlPYmplY3QgKmNvbnRhaW5lciwgUHlPYmplY3QgKmVsZW1lbnQpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZV9Db250YWlucyhQeU9iamVjdCAqY29udGFpbmVyLCBQeU9iamVjdCAqZWxlbWVudCkKIAogICAgQ2hlY2sgd2hldGhlciAqZWxlbWVudCogaXMgY29udGFpbmVkIGluICpjb250YWluZXIqIGFuZCByZXR1cm4gdHJ1ZSBvciBmYWxzZQogICAgYWNjb3JkaW5nbHkuCkBAIC0xMDEzLDcgKzEwOTcsNyBAQAogICAgdGhlcmUgd2FzIGFuIGVycm9yLgogCiAKLS4uIGNmdW5jdGlvbjo6IHZvaWQgUHlVbmljb2RlX0ludGVybkluUGxhY2UoUHlPYmplY3QgKipzdHJpbmcpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZShQeU9iamVjdCAqKnN0cmluZykKIAogICAgSW50ZXJuIHRoZSBhcmd1bWVudCAqXCpzdHJpbmcqIGluIHBsYWNlLiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgdGhlIGFkZHJlc3Mgb2YgYQogICAgcG9pbnRlciB2YXJpYWJsZSBwb2ludGluZyB0byBhIFB5dGhvbiB1bmljb2RlIHN0cmluZyBvYmplY3QuICBJZiB0aGVyZSBpcyBhbgpAQCAtMTAyNiwxMCArMTExMCwxMCBAQAogICAgaWYgYW5kIG9ubHkgaWYgeW91IG93bmVkIGl0IGJlZm9yZSB0aGUgY2FsbC4pCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnYpCiAKLSAgIEEgY29tYmluYXRpb24gb2YgOmNmdW5jOmBQeVVuaWNvZGVfRnJvbVN0cmluZ2AgYW5kCi0gICA6Y2Z1bmM6YFB5VW5pY29kZV9JbnRlcm5JblBsYWNlYCwgcmV0dXJuaW5nIGVpdGhlciBhIG5ldyB1bmljb2RlIHN0cmluZyBvYmplY3QKKyAgIEEgY29tYmluYXRpb24gb2YgOmM6ZnVuYzpgUHlVbmljb2RlX0Zyb21TdHJpbmdgIGFuZAorICAgOmM6ZnVuYzpgUHlVbmljb2RlX0ludGVybkluUGxhY2VgLCByZXR1cm5pbmcgZWl0aGVyIGEgbmV3IHVuaWNvZGUgc3RyaW5nIG9iamVjdAogICAgdGhhdCBoYXMgYmVlbiBpbnRlcm5lZCwgb3IgYSBuZXcgKCJvd25lZCIpIHJlZmVyZW5jZSB0byBhbiBlYXJsaWVyIGludGVybmVkCiAgICBzdHJpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUuCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QgYi9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CmluZGV4IDY2Nzg5YTkuLjI2ZTA3MTYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKKysrIGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdApAQCAtMTYsMjEgKzE2LDIxIEBACiA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBhbmQgOmNvbnN0OmBQeV9zaW5nbGVfaW5wdXRgLiAgVGhlc2UgYXJlIGRlc2NyaWJlZAogZm9sbG93aW5nIHRoZSBmdW5jdGlvbnMgd2hpY2ggYWNjZXB0IHRoZW0gYXMgcGFyYW1ldGVycy4KIAotTm90ZSBhbHNvIHRoYXQgc2V2ZXJhbCBvZiB0aGVzZSBmdW5jdGlvbnMgdGFrZSA6Y3R5cGU6YEZJTEVcKmAgcGFyYW1ldGVycy4gIE9uZQotcGFydGljdWxhciBpc3N1ZSB3aGljaCBuZWVkcyB0byBiZSBoYW5kbGVkIGNhcmVmdWxseSBpcyB0aGF0IHRoZSA6Y3R5cGU6YEZJTEVgCitOb3RlIGFsc28gdGhhdCBzZXZlcmFsIG9mIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIDpjOnR5cGU6YEZJTEVcKmAgcGFyYW1ldGVycy4gIE9uZQorcGFydGljdWxhciBpc3N1ZSB3aGljaCBuZWVkcyB0byBiZSBoYW5kbGVkIGNhcmVmdWxseSBpcyB0aGF0IHRoZSA6Yzp0eXBlOmBGSUxFYAogc3RydWN0dXJlIGZvciBkaWZmZXJlbnQgQyBsaWJyYXJpZXMgY2FuIGJlIGRpZmZlcmVudCBhbmQgaW5jb21wYXRpYmxlLiAgVW5kZXIKIFdpbmRvd3MgKGF0IGxlYXN0KSwgaXQgaXMgcG9zc2libGUgZm9yIGR5bmFtaWNhbGx5IGxpbmtlZCBleHRlbnNpb25zIHRvIGFjdHVhbGx5Ci11c2UgZGlmZmVyZW50IGxpYnJhcmllcywgc28gY2FyZSBzaG91bGQgYmUgdGFrZW4gdGhhdCA6Y3R5cGU6YEZJTEVcKmAgcGFyYW1ldGVycwordXNlIGRpZmZlcmVudCBsaWJyYXJpZXMsIHNvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHRoYXQgOmM6dHlwZTpgRklMRVwqYCBwYXJhbWV0ZXJzCiBhcmUgb25seSBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zIGlmIGl0IGlzIGNlcnRhaW4gdGhhdCB0aGV5IHdlcmUgY3JlYXRlZCBieQogdGhlIHNhbWUgbGlicmFyeSB0aGF0IHRoZSBQeXRob24gcnVudGltZSBpcyB1c2luZy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlfTWFpbihpbnQgYXJnYywgd2NoYXJfdCAqKmFyZ3YpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X01haW4oaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2KQogCiAgICBUaGUgbWFpbiBwcm9ncmFtIGZvciB0aGUgc3RhbmRhcmQgaW50ZXJwcmV0ZXIuICBUaGlzIGlzIG1hZGUKICAgIGF2YWlsYWJsZSBmb3IgcHJvZ3JhbXMgd2hpY2ggZW1iZWQgUHl0aG9uLiAgVGhlICphcmdjKiBhbmQgKmFyZ3YqCiAgICBwYXJhbWV0ZXJzIHNob3VsZCBiZSBwcmVwYXJlZCBleGFjdGx5IGFzIHRob3NlIHdoaWNoIGFyZSBwYXNzZWQgdG8KLSAgIGEgQyBwcm9ncmFtJ3MgOmNmdW5jOmBtYWluYCBmdW5jdGlvbiAoY29udmVydGVkIHRvIHdjaGFyX3QKKyAgIGEgQyBwcm9ncmFtJ3MgOmM6ZnVuYzpgbWFpbmAgZnVuY3Rpb24gKGNvbnZlcnRlZCB0byB3Y2hhcl90CiAgICBhY2NvcmRpbmcgdG8gdGhlIHVzZXIncyBsb2NhbGUpLiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUKICAgIGFyZ3VtZW50IGxpc3QgbWF5IGJlIG1vZGlmaWVkIChidXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdHJpbmdzCiAgICBwb2ludGVkIHRvIGJ5IHRoZSBhcmd1bWVudCBsaXN0IGFyZSBub3QpLiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUKQEAgLTQzLDQwICs0Myw0MSBAQAogICAgYGBQeV9JbnNwZWN0RmxhZ2BgIGlzIG5vdCBzZXQuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0FueUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9BbnlGaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlSdW5fQW55RmlsZUV4RmxhZ3NgIGJlbG93LCBsZWF2aW5nCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlSdW5fQW55RmlsZUV4RmxhZ3NgIGJlbG93LCBsZWF2aW5nCiAgICAqY2xvc2VpdCogc2V0IHRvIGBgMGBgIGFuZCAqZmxhZ3MqIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0FueUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5UnVuX0FueUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5UnVuX0FueUZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZworICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX0FueUZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZwogICAgdGhlICpjbG9zZWl0KiBhcmd1bWVudCBzZXQgdG8gYGAwYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0FueUZpbGVFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9BbnlGaWxlRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY2xvc2VpdCkKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlSdW5fQW55RmlsZUV4RmxhZ3NgIGJlbG93LCBsZWF2aW5nCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlSdW5fQW55RmlsZUV4RmxhZ3NgIGJlbG93LCBsZWF2aW5nCiAgICB0aGUgKmZsYWdzKiBhcmd1bWVudCBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVJ1bl9BbnlGaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9BbnlGaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCiAgICBJZiAqZnAqIHJlZmVycyB0byBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyYWN0aXZlIGRldmljZSAoY29uc29sZSBvcgogICAgdGVybWluYWwgaW5wdXQgb3IgVW5peCBwc2V1ZG8tdGVybWluYWwpLCByZXR1cm4gdGhlIHZhbHVlIG9mCi0gICA6Y2Z1bmM6YFB5UnVuX0ludGVyYWN0aXZlTG9vcGAsIG90aGVyd2lzZSByZXR1cm4gdGhlIHJlc3VsdCBvZgotICAgOmNmdW5jOmBQeVJ1bl9TaW1wbGVGaWxlYC4gIElmICpmaWxlbmFtZSogaXMgKk5VTEwqLCB0aGlzIGZ1bmN0aW9uIHVzZXMKLSAgIGBgIj8/PyJgYCBhcyB0aGUgZmlsZW5hbWUuCisgICA6YzpmdW5jOmBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgIDpjOmZ1bmM6YFB5UnVuX1NpbXBsZUZpbGVgLiAgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KKyAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgSWYgKmZpbGVuYW1lKiBpcyAqTlVMTCosIHRoaXMKKyAgIGZ1bmN0aW9uIHVzZXMgYGAiPz8/ImBgIGFzIHRoZSBmaWxlbmFtZS4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fU2ltcGxlU3RyaW5nKGNvbnN0IGNoYXIgKmNvbW1hbmQpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5UnVuX1NpbXBsZVN0cmluZyhjb25zdCBjaGFyICpjb21tYW5kKQogCi0gICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmNmdW5jOmBQeVJ1bl9TaW1wbGVTdHJpbmdGbGFnc2AgYmVsb3csCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3NgIGJlbG93LAogICAgbGVhdmluZyB0aGUgKlB5Q29tcGlsZXJGbGFnc1wqKiBhcmd1bWVudCBzZXQgdG8gTlVMTC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqY29tbWFuZCwgUHlDb21waWxlckZsYWdzICpmbGFncykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqY29tbWFuZCwgUHlDb21waWxlckZsYWdzICpmbGFncykKIAogICAgRXhlY3V0ZXMgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBmcm9tICpjb21tYW5kKiBpbiB0aGUgOm1vZDpgX19tYWluX19gIG1vZHVsZQogICAgYWNjb3JkaW5nIHRvIHRoZSAqZmxhZ3MqIGFyZ3VtZW50LiBJZiA6bW9kOmBfX21haW5fX2AgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgaXQKQEAgLTg5LDEwMyArOTAsMTA5IEBACiAgICBgYFB5X0luc3BlY3RGbGFnYGAgaXMgbm90IHNldC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fU2ltcGxlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5UnVuX1NpbXBsZUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCi0gICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmNmdW5jOmBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFnc2AgYmVsb3csCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3NgIGJlbG93LAogICAgbGVhdmluZyAqY2xvc2VpdCogc2V0IHRvIGBgMGBgIGFuZCAqZmxhZ3MqIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX1NpbXBsZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5UnVuX1NpbXBsZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzYCBiZWxvdywKKyAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFnc2AgYmVsb3csCiAgICBsZWF2aW5nICpjbG9zZWl0KiBzZXQgdG8gYGAwYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX1NpbXBsZUZpbGVFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9TaW1wbGVGaWxlRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY2xvc2VpdCkKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3NgIGJlbG93LAorICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzYCBiZWxvdywKICAgIGxlYXZpbmcgKmZsYWdzKiBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBjbG9zZWl0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCi0gICBTaW1pbGFyIHRvIDpjZnVuYzpgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3NgLCBidXQgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBpcyByZWFkCi0gICBmcm9tICpmcCogaW5zdGVhZCBvZiBhbiBpbi1tZW1vcnkgc3RyaW5nLiAqZmlsZW5hbWUqIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUKLSAgIGZpbGUuICBJZiAqY2xvc2VpdCogaXMgdHJ1ZSwgdGhlIGZpbGUgaXMgY2xvc2VkIGJlZm9yZSBQeVJ1bl9TaW1wbGVGaWxlRXhGbGFncwotICAgcmV0dXJucy4KKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3NgLCBidXQgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBpcyByZWFkCisgICBmcm9tICpmcCogaW5zdGVhZCBvZiBhbiBpbi1tZW1vcnkgc3RyaW5nLiAqZmlsZW5hbWUqIHNob3VsZCBiZSB0aGUgbmFtZSBvZgorICAgdGhlIGZpbGUsIGl0IGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZworICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuICBJZiAqY2xvc2VpdCogaXMgdHJ1ZSwgdGhlIGZpbGUgaXMKKyAgIGNsb3NlZCBiZWZvcmUgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MgcmV0dXJucy4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVPbmUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9JbnRlcmFjdGl2ZU9uZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3NgIGJlbG93LAorICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3NgIGJlbG93LAogICAgbGVhdmluZyAqZmxhZ3MqIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKIAogICAgUmVhZCBhbmQgZXhlY3V0ZSBhIHNpbmdsZSBzdGF0ZW1lbnQgZnJvbSBhIGZpbGUgYXNzb2NpYXRlZCB3aXRoIGFuCiAgICBpbnRlcmFjdGl2ZSBkZXZpY2UgYWNjb3JkaW5nIHRvIHRoZSAqZmxhZ3MqIGFyZ3VtZW50LiAgVGhlIHVzZXIgd2lsbCBiZQotICAgcHJvbXB0ZWQgdXNpbmcgYGBzeXMucHMxYGAgYW5kIGBgc3lzLnBzMmBgLiAgUmV0dXJucyBgYDBgYCB3aGVuIHRoZSBpbnB1dCB3YXMKKyAgIHByb21wdGVkIHVzaW5nIGBgc3lzLnBzMWBgIGFuZCBgYHN5cy5wczJgYC4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZQorICAgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKworICAgUmV0dXJucyBgYDBgYCB3aGVuIHRoZSBpbnB1dCB3YXMKICAgIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSwgYGAtMWBgIGlmIHRoZXJlIHdhcyBhbiBleGNlcHRpb24sIG9yIGFuIGVycm9yIGNvZGUKICAgIGZyb20gdGhlIDpmaWxlOmBlcnJjb2RlLmhgIGluY2x1ZGUgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIFB5dGhvbiBpZgogICAgdGhlcmUgd2FzIGEgcGFyc2UgZXJyb3IuICAoTm90ZSB0aGF0IDpmaWxlOmBlcnJjb2RlLmhgIGlzIG5vdCBpbmNsdWRlZCBieQogICAgOmZpbGU6YFB5dGhvbi5oYCwgc28gbXVzdCBiZSBpbmNsdWRlZCBzcGVjaWZpY2FsbHkgaWYgbmVlZGVkLikKIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVMb29wKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlSdW5fSW50ZXJhY3RpdmVMb29wKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3NgIGJlbG93LAorICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzYCBiZWxvdywKICAgIGxlYXZpbmcgKmZsYWdzKiBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKIAogICAgUmVhZCBhbmQgZXhlY3V0ZSBzdGF0ZW1lbnRzIGZyb20gYSBmaWxlIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmFjdGl2ZSBkZXZpY2UKICAgIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgVGhlIHVzZXIgd2lsbCBiZSBwcm9tcHRlZCB1c2luZyBgYHN5cy5wczFgYCBhbmQKLSAgIGBgc3lzLnBzMmBgLiAgUmV0dXJucyBgYDBgYCBhdCBFT0YuCisgICBgYHN5cy5wczJgYC4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCisgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIFJldHVybnMgYGAwYGAgYXQgRU9GLgogCiAKLS4uIGNmdW5jdGlvbjo6IHN0cnVjdCBfbm9kZSogUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc3RhcnQpCisuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCkKIAogICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCi0gICA6Y2Z1bmM6YFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZWAgYmVsb3csIGxlYXZpbmcgICpmaWxlbmFtZSogc2V0CisgICA6YzpmdW5jOmBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVgIGJlbG93LCBsZWF2aW5nICAqZmlsZW5hbWUqIHNldAogICAgdG8gKk5VTEwqIGFuZCAqZmxhZ3MqIHNldCB0byBgYDBgYC4KIAogCi0uLiBjZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MoIGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0LCBpbnQgZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzKCBjb25zdCBjaGFyICpzdHIsIGludCBzdGFydCwgaW50IGZsYWdzKQogCiAgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8KLSAgIDpjZnVuYzpgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lYCBiZWxvdywgbGVhdmluZyAgKmZpbGVuYW1lKiBzZXQKKyAgIDpjOmZ1bmM6YFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZWAgYmVsb3csIGxlYXZpbmcgICpmaWxlbmFtZSogc2V0CiAgICB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUoIGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgaW50IGZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IHN0cnVjdCBfbm9kZSogUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKCBjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIGludCBmbGFncykKIAogICAgUGFyc2UgUHl0aG9uIHNvdXJjZSBjb2RlIGZyb20gKnN0ciogdXNpbmcgdGhlIHN0YXJ0IHRva2VuICpzdGFydCogYWNjb3JkaW5nIHRvCiAgICB0aGUgKmZsYWdzKiBhcmd1bWVudC4gIFRoZSByZXN1bHQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgY29kZSBvYmplY3Qgd2hpY2ggY2FuCiAgICBiZSBldmFsdWF0ZWQgZWZmaWNpZW50bHkuIFRoaXMgaXMgdXNlZnVsIGlmIGEgY29kZSBmcmFnbWVudCBtdXN0IGJlIGV2YWx1YXRlZAotICAgbWFueSB0aW1lcy4KKyAgIG1hbnkgdGltZXMuICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCisgICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KIAogCi0uLiBjZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCkKKy4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCkKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3NgIGJlbG93LAorICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzYCBiZWxvdywKICAgIGxlYXZpbmcgKmZsYWdzKiBzZXQgdG8gYGAwYGAKIAogCi0uLiBjZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBpbnQgZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgaW50IGZsYWdzKQogCi0gICBTaW1pbGFyIHRvIDpjZnVuYzpgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lYCwgYnV0IHRoZSBQeXRob24KKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lYCwgYnV0IHRoZSBQeXRob24KICAgIHNvdXJjZSBjb2RlIGlzIHJlYWQgZnJvbSAqZnAqIGluc3RlYWQgb2YgYW4gaW4tbWVtb3J5IHN0cmluZy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlSdW5fU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlSdW5fU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKIAotICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjZnVuYzpgUHlSdW5fU3RyaW5nRmxhZ3NgIGJlbG93LCBsZWF2aW5nCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlSdW5fU3RyaW5nRmxhZ3NgIGJlbG93LCBsZWF2aW5nCiAgICAqZmxhZ3MqIHNldCB0byAqTlVMTCouCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5UnVuX1N0cmluZ0ZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlDb21waWxlckZsYWdzICpmbGFncykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlSdW5fU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqc3RyLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCiAgICBFeGVjdXRlIFB5dGhvbiBzb3VyY2UgY29kZSBmcm9tICpzdHIqIGluIHRoZSBjb250ZXh0IHNwZWNpZmllZCBieSB0aGUKICAgIGRpY3Rpb25hcmllcyAqZ2xvYmFscyogYW5kICpsb2NhbHMqIHdpdGggdGhlIGNvbXBpbGVyIGZsYWdzIHNwZWNpZmllZCBieQpAQCAtMTk2LDU3ICsyMDMsNzMgQEAKICAgIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVJ1bl9GaWxlKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlSdW5fRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5UnVuX0ZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZworICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX0ZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZwogICAgKmNsb3NlaXQqIHNldCB0byBgYDBgYCBhbmQgKmZsYWdzKiBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVJ1bl9GaWxlRXgoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBpbnQgY2xvc2VpdCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlSdW5fRmlsZUV4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgaW50IGNsb3NlaXQpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5UnVuX0ZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZworICAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvIDpjOmZ1bmM6YFB5UnVuX0ZpbGVFeEZsYWdzYCBiZWxvdywgbGVhdmluZwogICAgKmZsYWdzKiBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVJ1bl9GaWxlRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVJ1bl9GaWxlRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogCi0gICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmNmdW5jOmBQeVJ1bl9GaWxlRXhGbGFnc2AgYmVsb3csIGxlYXZpbmcKKyAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeVJ1bl9GaWxlRXhGbGFnc2AgYmVsb3csIGxlYXZpbmcKICAgICpjbG9zZWl0KiBzZXQgdG8gYGAwYGAuCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgaW50IGNsb3NlaXQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgaW50IGNsb3NlaXQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCiAKLSAgIFNpbWlsYXIgdG8gOmNmdW5jOmBQeVJ1bl9TdHJpbmdGbGFnc2AsIGJ1dCB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGlzIHJlYWQgZnJvbQotICAgKmZwKiBpbnN0ZWFkIG9mIGFuIGluLW1lbW9yeSBzdHJpbmcuICpmaWxlbmFtZSogc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLgotICAgSWYgKmNsb3NlaXQqIGlzIHRydWUsIHRoZSBmaWxlIGlzIGNsb3NlZCBiZWZvcmUgOmNmdW5jOmBQeVJ1bl9GaWxlRXhGbGFnc2AKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlSdW5fU3RyaW5nRmxhZ3NgLCBidXQgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBpcyByZWFkIGZyb20KKyAgICpmcCogaW5zdGVhZCBvZiBhbiBpbi1tZW1vcnkgc3RyaW5nLiAqZmlsZW5hbWUqIHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwKKyAgIGl0IGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgIElmICpjbG9zZWl0KiBpcyB0cnVlLCB0aGUgZmlsZSBpcyBjbG9zZWQgYmVmb3JlIDpjOmZ1bmM6YFB5UnVuX0ZpbGVFeEZsYWdzYAogICAgcmV0dXJucy4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogCi0gICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmNmdW5jOmBQeV9Db21waWxlU3RyaW5nRmxhZ3NgIGJlbG93LCBsZWF2aW5nCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ0ZsYWdzYCBiZWxvdywgbGVhdmluZwogICAgKmZsYWdzKiBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorCisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3NgIGJlbG93LCB3aXRoCisgICAqb3B0aW1pemUqIHNldCB0byBgYC0xYGAuCisKKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKIAogICAgUGFyc2UgYW5kIGNvbXBpbGUgdGhlIFB5dGhvbiBzb3VyY2UgY29kZSBpbiAqc3RyKiwgcmV0dXJuaW5nIHRoZSByZXN1bHRpbmcgY29kZQogICAgb2JqZWN0LiAgVGhlIHN0YXJ0IHRva2VuIGlzIGdpdmVuIGJ5ICpzdGFydCo7IHRoaXMgY2FuIGJlIHVzZWQgdG8gY29uc3RyYWluIHRoZQogICAgY29kZSB3aGljaCBjYW4gYmUgY29tcGlsZWQgYW5kIHNob3VsZCBiZSA6Y29uc3Q6YFB5X2V2YWxfaW5wdXRgLAogICAgOmNvbnN0OmBQeV9maWxlX2lucHV0YCwgb3IgOmNvbnN0OmBQeV9zaW5nbGVfaW5wdXRgLiAgVGhlIGZpbGVuYW1lIHNwZWNpZmllZCBieQogICAgKmZpbGVuYW1lKiBpcyB1c2VkIHRvIGNvbnN0cnVjdCB0aGUgY29kZSBvYmplY3QgYW5kIG1heSBhcHBlYXIgaW4gdHJhY2ViYWNrcyBvcgotICAgOmV4YzpgU3ludGF4RXJyb3JgIGV4Y2VwdGlvbiBtZXNzYWdlcy4gIFRoaXMgcmV0dXJucyAqTlVMTCogaWYgdGhlIGNvZGUgY2Fubm90Ci0gICBiZSBwYXJzZWQgb3IgY29tcGlsZWQuCisgICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KKyAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKKyAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKworICAgVGhlIGludGVnZXIgKm9wdGltaXplKiBzcGVjaWZpZXMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgY29tcGlsZXI7IGEKKyAgIHZhbHVlIG9mIGBgLTFgYCBzZWxlY3RzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGludGVycHJldGVyIGFzIGdpdmVuIGJ5CisgICA6b3B0aW9uOmAtT2Agb3B0aW9ucy4gIEV4cGxpY2l0IGxldmVscyBhcmUgYGAwYGAgKG5vIG9wdGltaXphdGlvbjsKKyAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQorICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gY2Z1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9FdmFsQ29kZShQeUNvZGVPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKLSAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6Y2Z1bmM6YFB5RXZhbF9FdmFsQ29kZUV4YCwgd2l0aCBqdXN0CisgICBUaGlzIGlzIGEgc2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gOmM6ZnVuYzpgUHlFdmFsX0V2YWxDb2RlRXhgLCB3aXRoIGp1c3QKICAgIHRoZSBjb2RlIG9iamVjdCwgYW5kIHRoZSBkaWN0aW9uYXJpZXMgb2YgZ2xvYmFsIGFuZCBsb2NhbCB2YXJpYWJsZXMuCiAgICBUaGUgb3RoZXIgYXJndW1lbnRzIGFyZSBzZXQgdG8gKk5VTEwqLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbENvZGVFeChQeUNvZGVPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKiphcmdzLCBpbnQgYXJnY291bnQsIFB5T2JqZWN0ICoqa3dzLCBpbnQga3djb3VudCwgUHlPYmplY3QgKipkZWZzLCBpbnQgZGVmY291bnQsIFB5T2JqZWN0ICpjbG9zdXJlKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbENvZGVFeChQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeU9iamVjdCAqKmFyZ3MsIGludCBhcmdjb3VudCwgUHlPYmplY3QgKiprd3MsIGludCBrd2NvdW50LCBQeU9iamVjdCAqKmRlZnMsIGludCBkZWZjb3VudCwgUHlPYmplY3QgKmNsb3N1cmUpCiAKICAgIEV2YWx1YXRlIGEgcHJlY29tcGlsZWQgY29kZSBvYmplY3QsIGdpdmVuIGEgcGFydGljdWxhciBlbnZpcm9ubWVudCBmb3IgaXRzCiAgICBldmFsdWF0aW9uLiAgVGhpcyBlbnZpcm9ubWVudCBjb25zaXN0cyBvZiBkaWN0aW9uYXJpZXMgb2YgZ2xvYmFsIGFuZCBsb2NhbApAQCAtMjU0LDEzICsyNzcsMTMgQEAKICAgIGNlbGxzLgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbEZyYW1lKFB5RnJhbWVPYmplY3QgKmYpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXZhbF9FdmFsRnJhbWUoUHlGcmFtZU9iamVjdCAqZikKIAogICAgRXZhbHVhdGUgYW4gZXhlY3V0aW9uIGZyYW1lLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW50ZXJmYWNlIHRvCiAgICBQeUV2YWxfRXZhbEZyYW1lRXgsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUV2YWxfRXZhbEZyYW1lRXgoUHlGcmFtZU9iamVjdCAqZiwgaW50IHRocm93ZmxhZykKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxGcmFtZUV4KFB5RnJhbWVPYmplY3QgKmYsIGludCB0aHJvd2ZsYWcpCiAKICAgIFRoaXMgaXMgdGhlIG1haW4sIHVudmFybmlzaGVkIGZ1bmN0aW9uIG9mIFB5dGhvbiBpbnRlcnByZXRhdGlvbi4gIEl0IGlzCiAgICBsaXRlcmFsbHkgMjAwMCBsaW5lcyBsb25nLiAgVGhlIGNvZGUgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uCkBAIC0yNzAsMzkgKzI5MywzOSBAQAogICAgOm1ldGg6YHRocm93YCBtZXRob2RzIG9mIGdlbmVyYXRvciBvYmplY3RzLgogCiAKLS4uIGNmdW5jdGlvbjo6IGludCBQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzKFB5Q29tcGlsZXJGbGFncyAqY2YpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MoUHlDb21waWxlckZsYWdzICpjZikKIAogICAgVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBmbGFncyBvZiB0aGUgY3VycmVudCBldmFsdWF0aW9uIGZyYW1lLCBhbmQgcmV0dXJucwogICAgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLgogCiAKLS4uIGN2YXI6OiBpbnQgUHlfZXZhbF9pbnB1dAorLi4gYzp2YXI6OiBpbnQgUHlfZXZhbF9pbnB1dAogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogUHlfQ29tcGlsZVN0cmluZygpCiAKICAgIFRoZSBzdGFydCBzeW1ib2wgZnJvbSB0aGUgUHl0aG9uIGdyYW1tYXIgZm9yIGlzb2xhdGVkIGV4cHJlc3Npb25zOyBmb3IgdXNlIHdpdGgKLSAgIDpjZnVuYzpgUHlfQ29tcGlsZVN0cmluZ2AuCisgICA6YzpmdW5jOmBQeV9Db21waWxlU3RyaW5nYC4KIAogCi0uLiBjdmFyOjogaW50IFB5X2ZpbGVfaW5wdXQKKy4uIGM6dmFyOjogaW50IFB5X2ZpbGVfaW5wdXQKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IFB5X0NvbXBpbGVTdHJpbmcoKQogCiAgICBUaGUgc3RhcnQgc3ltYm9sIGZyb20gdGhlIFB5dGhvbiBncmFtbWFyIGZvciBzZXF1ZW5jZXMgb2Ygc3RhdGVtZW50cyBhcyByZWFkCi0gICBmcm9tIGEgZmlsZSBvciBvdGhlciBzb3VyY2U7IGZvciB1c2Ugd2l0aCA6Y2Z1bmM6YFB5X0NvbXBpbGVTdHJpbmdgLiAgVGhpcyBpcworICAgZnJvbSBhIGZpbGUgb3Igb3RoZXIgc291cmNlOyBmb3IgdXNlIHdpdGggOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ2AuICBUaGlzIGlzCiAgICB0aGUgc3ltYm9sIHRvIHVzZSB3aGVuIGNvbXBpbGluZyBhcmJpdHJhcmlseSBsb25nIFB5dGhvbiBzb3VyY2UgY29kZS4KIAogCi0uLiBjdmFyOjogaW50IFB5X3NpbmdsZV9pbnB1dAorLi4gYzp2YXI6OiBpbnQgUHlfc2luZ2xlX2lucHV0CiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9Db21waWxlU3RyaW5nKCkKIAogICAgVGhlIHN0YXJ0IHN5bWJvbCBmcm9tIHRoZSBQeXRob24gZ3JhbW1hciBmb3IgYSBzaW5nbGUgc3RhdGVtZW50OyBmb3IgdXNlIHdpdGgKLSAgIDpjZnVuYzpgUHlfQ29tcGlsZVN0cmluZ2AuIFRoaXMgaXMgdGhlIHN5bWJvbCB1c2VkIGZvciB0aGUgaW50ZXJhY3RpdmUKKyAgIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdgLiBUaGlzIGlzIHRoZSBzeW1ib2wgdXNlZCBmb3IgdGhlIGludGVyYWN0aXZlCiAgICBpbnRlcnByZXRlciBsb29wLgogCiAKLS4uIGN0eXBlOjogc3RydWN0IFB5Q29tcGlsZXJGbGFncworLi4gYzp0eXBlOjogc3RydWN0IFB5Q29tcGlsZXJGbGFncwogCiAgICBUaGlzIGlzIHRoZSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGNvbXBpbGVyIGZsYWdzLiAgSW4gY2FzZXMgd2hlcmUgY29kZSBpcyBvbmx5CiAgICBiZWluZyBjb21waWxlZCwgaXQgaXMgcGFzc2VkIGFzIGBgaW50IGZsYWdzYGAsIGFuZCBpbiBjYXNlcyB3aGVyZSBjb2RlIGlzIGJlaW5nCkBAIC0zMTgsNyArMzQxLDcgQEAKICAgICAgIH0KIAogCi0uLiBjdmFyOjogaW50IENPX0ZVVFVSRV9ESVZJU0lPTgorLi4gYzp2YXI6OiBpbnQgQ09fRlVUVVJFX0RJVklTSU9OCiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3dlYWtyZWYucnN0IGIvRG9jL2MtYXBpL3dlYWtyZWYucnN0CmluZGV4IDhhMzYxMTAuLjZiMDUzYzggMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvYy1hcGkvd2Vha3JlZi5yc3QKQEAgLTExLDIyICsxMSwyMiBAQAogYXMgbXVjaCBhcyBpdCBjYW4uCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5V2Vha3JlZl9DaGVjayhvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlXZWFrcmVmX0NoZWNrKG9iKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIGVpdGhlciBhIHJlZmVyZW5jZSBvciBwcm94eSBvYmplY3QuCiAKIAotLi4gY2Z1bmN0aW9uOjogaW50IFB5V2Vha3JlZl9DaGVja1JlZihvYikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlXZWFrcmVmX0NoZWNrUmVmKG9iKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIGEgcmVmZXJlbmNlIG9iamVjdC4KIAogCi0uLiBjZnVuY3Rpb246OiBpbnQgUHlXZWFrcmVmX0NoZWNrUHJveHkob2IpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5V2Vha3JlZl9DaGVja1Byb3h5KG9iKQogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqb2IqIGlzIGEgcHJveHkgb2JqZWN0LgogCiAKLS4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVdlYWtyZWZfTmV3UmVmKFB5T2JqZWN0ICpvYiwgUHlPYmplY3QgKmNhbGxiYWNrKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVdlYWtyZWZfTmV3UmVmKFB5T2JqZWN0ICpvYiwgUHlPYmplY3QgKmNhbGxiYWNrKQogCiAgICBSZXR1cm4gYSB3ZWFrIHJlZmVyZW5jZSBvYmplY3QgZm9yIHRoZSBvYmplY3QgKm9iKi4gIFRoaXMgd2lsbCBhbHdheXMgcmV0dXJuCiAgICBhIG5ldyByZWZlcmVuY2UsIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0OyBhbiBleGlzdGluZwpAQCAtMzgsNyArMzgsNyBAQAogICAgKk5VTEwqLCB0aGlzIHdpbGwgcmV0dXJuICpOVUxMKiBhbmQgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlXZWFrcmVmX05ld1Byb3h5KFB5T2JqZWN0ICpvYiwgUHlPYmplY3QgKmNhbGxiYWNrKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVdlYWtyZWZfTmV3UHJveHkoUHlPYmplY3QgKm9iLCBQeU9iamVjdCAqY2FsbGJhY2spCiAKICAgIFJldHVybiBhIHdlYWsgcmVmZXJlbmNlIHByb3h5IG9iamVjdCBmb3IgdGhlIG9iamVjdCAqb2IqLiAgVGhpcyB3aWxsIGFsd2F5cwogICAgcmV0dXJuIGEgbmV3IHJlZmVyZW5jZSwgYnV0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3Q7IGFuCkBAIC01MCw3ICs1MCw3IEBACiAgICBgYE5vbmVgYCwgb3IgKk5VTEwqLCB0aGlzIHdpbGwgcmV0dXJuICpOVUxMKiBhbmQgcmFpc2UgOmV4YzpgVHlwZUVycm9yYC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlXZWFrcmVmX0dldE9iamVjdChQeU9iamVjdCAqcmVmKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVdlYWtyZWZfR2V0T2JqZWN0KFB5T2JqZWN0ICpyZWYpCiAKICAgIFJldHVybiB0aGUgcmVmZXJlbmNlZCBvYmplY3QgZnJvbSBhIHdlYWsgcmVmZXJlbmNlLCAqcmVmKi4gIElmIHRoZSByZWZlcmVudCBpcwogICAgbm8gbG9uZ2VyIGxpdmUsIHJldHVybnMgOmNvbnN0OmBQeV9Ob25lYC4KQEAgLTU4LDEyICs1OCwxMiBAQAogICAgLi4gd2FybmluZzo6CiAKICAgICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhICoqYm9ycm93ZWQgcmVmZXJlbmNlKiogdG8gdGhlIHJlZmVyZW5jZWQgb2JqZWN0LgotICAgICAgVGhpcyBtZWFucyB0aGF0IHlvdSBzaG91bGQgYWx3YXlzIGNhbGwgOmNmdW5jOmBQeV9JTkNSRUZgIG9uIHRoZSBvYmplY3QKKyAgICAgIFRoaXMgbWVhbnMgdGhhdCB5b3Ugc2hvdWxkIGFsd2F5cyBjYWxsIDpjOmZ1bmM6YFB5X0lOQ1JFRmAgb24gdGhlIG9iamVjdAogICAgICAgZXhjZXB0IGlmIHlvdSBrbm93IHRoYXQgaXQgY2Fubm90IGJlIGRlc3Ryb3llZCB3aGlsZSB5b3UgYXJlIHN0aWxsCiAgICAgICB1c2luZyBpdC4KIAogCi0uLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlXZWFrcmVmX0dFVF9PQkpFQ1QoUHlPYmplY3QgKnJlZikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlXZWFrcmVmX0dFVF9PQkpFQ1QoUHlPYmplY3QgKnJlZikKIAotICAgU2ltaWxhciB0byA6Y2Z1bmM6YFB5V2Vha3JlZl9HZXRPYmplY3RgLCBidXQgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyB0aGF0IGRvZXMgbm8KKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlXZWFrcmVmX0dldE9iamVjdGAsIGJ1dCBpbXBsZW1lbnRlZCBhcyBhIG1hY3JvIHRoYXQgZG9lcyBubwogICAgZXJyb3IgY2hlY2tpbmcuCmRpZmYgLS1naXQgYS9Eb2MvY29uZi5weSBiL0RvYy9jb25mLnB5CmluZGV4IDU5MzlmN2EuLmNlNjRmMDYgMTAwNjQ0Ci0tLSBhL0RvYy9jb25mLnB5CisrKyBiL0RvYy9jb25mLnB5CkBAIC0xLDQgKzEsMyBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICMKICMgUHl0aG9uIGRvY3VtZW50YXRpb24gYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlCiAjCkBAIC02Niw2ICs2NSw5IEBACiAjIE9wdGlvbnMgZm9yIEhUTUwgb3V0cHV0CiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK2h0bWxfdGhlbWUgPSAnZGVmYXVsdCcKK2h0bWxfdGhlbWVfb3B0aW9ucyA9IHsnY29sbGFwc2libGVzaWRlYmFyJzogVHJ1ZX0KKwogIyBJZiBub3QgJycsIGEgJ0xhc3QgdXBkYXRlZCBvbjonIHRpbWVzdGFtcCBpcyBpbnNlcnRlZCBhdCBldmVyeSBwYWdlIGJvdHRvbSwKICMgdXNpbmcgdGhlIGdpdmVuIHN0cmZ0aW1lIGZvcm1hdC4KIGh0bWxfbGFzdF91cGRhdGVkX2ZtdCA9ICclYiAlZCwgJVknCkBAIC04Niw3ICs4OCw3IEBACiB9CiAKICMgT3V0cHV0IGFuIE9wZW5TZWFyY2ggZGVzY3JpcHRpb24gZmlsZS4KLWh0bWxfdXNlX29wZW5zZWFyY2ggPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjEnCitodG1sX3VzZV9vcGVuc2VhcmNoID0gJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L3B5M2snCiAKICMgQWRkaXRpb25hbCBzdGF0aWMgZmlsZXMuCiBodG1sX3N0YXRpY19wYXRoID0gWyd0b29scy9zcGhpbnhleHQvc3RhdGljJ10KQEAgLTE1NCw3ICsxNTYsNyBAQAogbGF0ZXhfYXBwZW5kaWNlcyA9IFsnZ2xvc3NhcnknLCAnYWJvdXQnLCAnbGljZW5zZScsICdjb3B5cmlnaHQnXQogCiAjIEdldCBMYVRlWCB0byBoYW5kbGUgVW5pY29kZSBjb3JyZWN0bHkKLWxhdGV4X2VsZW1lbnRzID0geydpbnB1dGVuYyc6IHInXHVzZXBhY2thZ2VbdXRmOHhde2lucHV0ZW5jfSd9CitsYXRleF9lbGVtZW50cyA9IHsnaW5wdXRlbmMnOiByJ1x1c2VwYWNrYWdlW3V0Zjh4XXtpbnB1dGVuY30nLCAndXRmOGV4dHJhJzogJyd9CiAKICMgT3B0aW9ucyBmb3IgdGhlIGNvdmVyYWdlIGNoZWNrZXIKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvYy9jb3B5cmlnaHQucnN0IGIvRG9jL2NvcHlyaWdodC5yc3QKaW5kZXggODkzYjU0MS4uZmY2YjY3NyAxMDA2NDQKLS0tIGEvRG9jL2NvcHlyaWdodC5yc3QKKysrIGIvRG9jL2NvcHlyaWdodC5yc3QKQEAgLTQsNyArNCw3IEBACiAKIFB5dGhvbiBhbmQgdGhpcyBkb2N1bWVudGF0aW9uIGlzOgogCi1Db3B5cmlnaHQgwqkgMjAwMS0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IMKpIDIwMDEtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogQ29weXJpZ2h0IMKpIDIwMDAgQmVPcGVuLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdCBiL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKaW5kZXggZGMwNThkNS4uZjJhODc2NyAxMDA2NDQKLS0tIGEvRG9jL2RhdGEvcmVmY291bnRzLmRhdAorKysgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CkBAIC0yODEsNiArMjgxLDEyIEBACiBQeUVycl9OZXdFeGNlcHRpb246UHlPYmplY3QqOmJhc2U6MDoKIFB5RXJyX05ld0V4Y2VwdGlvbjpQeU9iamVjdCo6ZGljdDowOgogCitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jOlB5T2JqZWN0Kjo6KzE6CitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jOmNoYXIqOm5hbWU6OgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYzpjaGFyKjpkb2M6OgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYzpQeU9iamVjdCo6YmFzZTowOgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYzpQeU9iamVjdCo6ZGljdDowOgorCiBQeUVycl9Ob01lbW9yeTpQeU9iamVjdCo6Om51bGw6CiAKIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbjp2b2lkOjo6CkBAIC00OTMsNiArNDk5LDExIEBACiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpQeU9iamVjdCo6Y286MDoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y2hhcio6cGF0aG5hbWU6OgorCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q6UHlPYmplY3QqOjowOgpAQCAtNTEyLDYgKzUyMywxMyBAQAogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXg6UHlPYmplY3QqOmxvY2FsczowOj8/PwogUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXg6UHlPYmplY3QqOmZyb21saXN0OjA6Pz8/CiAKK1B5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsOlB5T2JqZWN0Kjo6KzE6CitQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbDpjaGFyKjpuYW1lOjoKK1B5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsOlB5T2JqZWN0KjpnbG9iYWxzOjA6Pz8/CitQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbDpQeU9iamVjdCo6bG9jYWxzOjA6Pz8/CitQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbDpQeU9iamVjdCo6ZnJvbWxpc3Q6MDo/Pz8KK1B5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsOmludDpsZXZlbDo6CisKIFB5SW1wb3J0X1JlbG9hZE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfUmVsb2FkTW9kdWxlOlB5T2JqZWN0KjptOjA6CiAKQEAgLTgyOCw5ICs4NDYsNiBAQAogUHlOdW1iZXJfSW5QbGFjZVhvcjpQeU9iamVjdCo6djowOgogUHlOdW1iZXJfSW5QbGFjZVhvcjpQeU9iamVjdCo6dzowOgogCi1QeU51bWJlcl9JbnQ6UHlPYmplY3QqOjorMToKLVB5TnVtYmVyX0ludDpQeU9iamVjdCo6bzowOgotCiBQeU51bWJlcl9JbnZlcnQ6UHlPYmplY3QqOjorMToKIFB5TnVtYmVyX0ludmVydDpQeU9iamVjdCo6bzowOgogCkBAIC0xMjkwLDYgKzEzMDUsOSBAQAogUHlTeXNfQWRkV2Fybk9wdGlvbjp2b2lkOjo6CiBQeVN5c19BZGRXYXJuT3B0aW9uOmNoYXIqOnM6OgogCitQeVN5c19BZGRYT3B0aW9uOnZvaWQ6OjoKK1B5U3lzX0FkZFhPcHRpb246Y29uc3Qgd2NoYXJfdCo6czo6CisKIFB5U3lzX0dldEZpbGU6RklMRSo6OjoKIFB5U3lzX0dldEZpbGU6Y2hhcio6bmFtZTo6CiBQeVN5c19HZXRGaWxlOkZJTEUqOmRlZjo6CkBAIC0xMjk3LDYgKzEzMTUsOCBAQAogUHlTeXNfR2V0T2JqZWN0OlB5T2JqZWN0Kjo6MDoKIFB5U3lzX0dldE9iamVjdDpjaGFyKjpuYW1lOjoKIAorUHlTeXNfR2V0WE9wdGlvbnM6UHlPYmplY3QqOjowOgorCiBQeVN5c19TZXRBcmd2OmludDo6OgogUHlTeXNfU2V0QXJndjppbnQ6YXJnYzo6CiBQeVN5c19TZXRBcmd2OmNoYXIqKjphcmd2OjoKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdCBiL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAppbmRleCA4MWRlMWFkLi5hN2RjNjhlIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CkBAIC0xNDcsMTEgKzE0NywxMSBAQAogSW4gYWRkaXRpb24sIHRoZSA6bW9kOmBkaXN0dXRpbHMuY29yZWAgbW9kdWxlIGV4cG9zZWQgYSBudW1iZXIgb2YgIGNsYXNzZXMgdGhhdAogbGl2ZSBlbHNld2hlcmUuCiAKLSogOmNsYXNzOmB+ZGlzdHV0aWxzLmV4dGVuc2lvbi5FeHRlbnNpb25gIGZyb20gOm1vZDpgZGlzdHV0aWxzLmV4dGVuc2lvbmAKKyogOmNsYXNzOmBFeHRlbnNpb25gIGZyb20gOm1vZDpgZGlzdHV0aWxzLmV4dGVuc2lvbmAKIAotKiA6Y2xhc3M6YH5kaXN0dXRpbHMuY21kLkNvbW1hbmRgIGZyb20gOm1vZDpgZGlzdHV0aWxzLmNtZGAKKyogOmNsYXNzOmBDb21tYW5kYCBmcm9tIDptb2Q6YGRpc3R1dGlscy5jbWRgCiAKLSogOmNsYXNzOmB+ZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uYCBmcm9tIDptb2Q6YGRpc3R1dGlscy5kaXN0YAorKiA6Y2xhc3M6YERpc3RyaWJ1dGlvbmAgZnJvbSA6bW9kOmBkaXN0dXRpbHMuZGlzdGAKIAogQSBzaG9ydCBkZXNjcmlwdGlvbiBvZiBlYWNoIG9mIHRoZXNlIGZvbGxvd3MsIGJ1dCBzZWUgdGhlIHJlbGV2YW50IG1vZHVsZSBmb3IKIHRoZSBmdWxsIHJlZmVyZW5jZS4KQEAgLTEzMTEsOCArMTMxMSw3IEBACiAgIHRoZSAibmVnYXRpdmUgYWxpYXMiIG9mIDpvcHRpb246YC0tdmVyYm9zZWAsIHRoZW4gOm9wdGlvbjpgLS1xdWlldGAgb24gdGhlCiAgIGNvbW1hbmQgbGluZSBzZXRzICp2ZXJib3NlKiB0byBmYWxzZS4KIAotLi4gWFhYIFNob3VsZCBiZSByZXBsYWNlZCB3aXRoIDptb2Q6YG9wdHBhcnNlYC4KLQorLi4gWFhYIFNob3VsZCBiZSByZXBsYWNlZCB3aXRoIG9wdHBhcnNlCiAKIC4uIGZ1bmN0aW9uOjogZmFuY3lfZ2V0b3B0KG9wdGlvbnMsIG5lZ2F0aXZlX29wdCwgb2JqZWN0LCBhcmdzKQogCkBAIC0xNjc5LDggKzE2NzgsOCBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBkaXN0dXRpbHMuY21kCi0gICA6c3lub3BzaXM6IFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzIENvbW1hbmQuIFRoaXMgY2xhc3MKLSAgICAgICAgICAgICAgaXMgc3ViY2xhc3NlZCBieSB0aGUgbW9kdWxlcyBpbiB0aGUgZGlzdHV0aWxzLmNvbW1hbmQgc3VicGFja2FnZS4KKyAgIDpzeW5vcHNpczogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgQ29tbWFuZC4gVGhpcyBjbGFzcyBpcyBzdWJjbGFzc2VkCisgICAgICAgICAgICAgIGJ5IHRoZSBtb2R1bGVzIGluIHRoZSBkaXN0dXRpbHMuY29tbWFuZCAgc3VicGFja2FnZS4KIAogCiBUaGlzIG1vZHVsZSBzdXBwbGllcyB0aGUgYWJzdHJhY3QgYmFzZSBjbGFzcyA6Y2xhc3M6YENvbW1hbmRgLgpAQCAtMTY5MCw4NCArMTY4OSwyMCBAQAogCiAgICBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBkZWZpbmluZyBjb21tYW5kIGNsYXNzZXMsIHRoZSAid29ya2VyIGJlZXMiIG9mIHRoZQogICAgRGlzdHV0aWxzLiAgQSB1c2VmdWwgYW5hbG9neSBmb3IgY29tbWFuZCBjbGFzc2VzIGlzIHRvIHRoaW5rIG9mIHRoZW0gYXMKLSAgIHN1YnJvdXRpbmVzIHdpdGggbG9jYWwgdmFyaWFibGVzIGNhbGxlZCAqb3B0aW9ucyouICBUaGUgb3B0aW9ucyBhcmUgZGVjbGFyZWQKLSAgIGluIDptZXRoOmBpbml0aWFsaXplX29wdGlvbnNgIGFuZCBkZWZpbmVkIChnaXZlbiB0aGVpciBmaW5hbCB2YWx1ZXMpIGluCi0gICA6bWV0aDpgZmluYWxpemVfb3B0aW9uc2AsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSBkZWZpbmVkIGJ5IGV2ZXJ5IGNvbW1hbmQKLSAgIGNsYXNzLiAgVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gdGhlIHR3byBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvcHRpb24gdmFsdWVzCi0gICBtaWdodCBjb21lIGZyb20gdGhlIG91dHNpZGUgd29ybGQgKGNvbW1hbmQgbGluZSwgY29uZmlnIGZpbGUsIC4uLiksIGFuZCBhbnkKLSAgIG9wdGlvbnMgZGVwZW5kZW50IG9uIG90aGVyIG9wdGlvbnMgbXVzdCBiZSBjb21wdXRlZCBhZnRlciB0aGVzZSBvdXRzaWRlCi0gICBpbmZsdWVuY2VzIGhhdmUgYmVlbiBwcm9jZXNzZWQgLS0tIGhlbmNlIDptZXRoOmBmaW5hbGl6ZV9vcHRpb25zYC4gIFRoZSBib2R5Ci0gICBvZiB0aGUgc3Vicm91dGluZSwgd2hlcmUgaXQgZG9lcyBhbGwgaXRzIHdvcmsgYmFzZWQgb24gdGhlIHZhbHVlcyBvZiBpdHMKLSAgIG9wdGlvbnMsIGlzIHRoZSA6bWV0aDpgcnVuYCBtZXRob2QsIHdoaWNoIG11c3QgYWxzbyBiZSBpbXBsZW1lbnRlZCBieSBldmVyeQotICAgY29tbWFuZCBjbGFzcy4KKyAgIHN1YnJvdXRpbmVzIHdpdGggbG9jYWwgdmFyaWFibGVzIGNhbGxlZCAqb3B0aW9ucyouICBUaGUgb3B0aW9ucyBhcmUgZGVjbGFyZWQgaW4KKyAgIDptZXRoOmBpbml0aWFsaXplX29wdGlvbnNgIGFuZCBkZWZpbmVkIChnaXZlbiB0aGVpciBmaW5hbCB2YWx1ZXMpIGluCisgICA6bWV0aDpgZmluYWxpemVfb3B0aW9uc2AsIGJvdGggb2Ygd2hpY2ggbXVzdCBiZSBkZWZpbmVkIGJ5IGV2ZXJ5IGNvbW1hbmQgY2xhc3MuCisgICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGUgdHdvIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIG9wdGlvbiB2YWx1ZXMgbWlnaHQgY29tZQorICAgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZCAoY29tbWFuZCBsaW5lLCBjb25maWcgZmlsZSwgLi4uKSwgYW5kIGFueSBvcHRpb25zCisgICBkZXBlbmRlbnQgb24gb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGNvbXB1dGVkIGFmdGVyIHRoZXNlIG91dHNpZGUgaW5mbHVlbmNlcyBoYXZlCisgICBiZWVuIHByb2Nlc3NlZCAtLS0gaGVuY2UgOm1ldGg6YGZpbmFsaXplX29wdGlvbnNgLiAgVGhlIGJvZHkgb2YgdGhlIHN1YnJvdXRpbmUsCisgICB3aGVyZSBpdCBkb2VzIGFsbCBpdHMgd29yayBiYXNlZCBvbiB0aGUgdmFsdWVzIG9mIGl0cyBvcHRpb25zLCBpcyB0aGUKKyAgIDptZXRoOmBydW5gIG1ldGhvZCwgd2hpY2ggbXVzdCBhbHNvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IGNvbW1hbmQgY2xhc3MuCiAKLSAgIFRoZSBjbGFzcyBjb25zdHJ1Y3RvciB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCAqZGlzdCosIGEgOmNsYXNzOmBEaXN0cmlidXRpb25gCisgICBUaGUgY2xhc3MgY29uc3RydWN0b3IgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgKmRpc3QqLCBhICA6Y2xhc3M6YERpc3RyaWJ1dGlvbmAKICAgIGluc3RhbmNlLgogCiAKLUNyZWF0aW5nIGEgbmV3IERpc3R1dGlscyBjb21tYW5kCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIHNlY3Rpb24gb3V0bGluZXMgdGhlIHN0ZXBzIHRvIGNyZWF0ZSBhIG5ldyBEaXN0dXRpbHMgY29tbWFuZC4KLQotQSBuZXcgY29tbWFuZCBsaXZlcyBpbiBhIG1vZHVsZSBpbiB0aGUgOm1vZDpgZGlzdHV0aWxzLmNvbW1hbmRgIHBhY2thZ2UuIFRoZXJlCi1pcyBhIHNhbXBsZSB0ZW1wbGF0ZSBpbiB0aGF0IGRpcmVjdG9yeSBjYWxsZWQgOmZpbGU6YGNvbW1hbmRfdGVtcGxhdGVgLiAgQ29weQotdGhpcyBmaWxlIHRvIGEgbmV3IG1vZHVsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5ldyBjb21tYW5kIHlvdSdyZQotaW1wbGVtZW50aW5nLiAgVGhpcyBtb2R1bGUgc2hvdWxkIGltcGxlbWVudCBhIGNsYXNzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUKLW1vZHVsZSAoYW5kIHRoZSBjb21tYW5kKS4gIFNvLCBmb3IgaW5zdGFuY2UsIHRvIGNyZWF0ZSB0aGUgY29tbWFuZAotYGBwZWVsX2JhbmFuYWBgIChzbyB0aGF0IHVzZXJzIGNhbiBydW4gYGBzZXR1cC5weSBwZWVsX2JhbmFuYWBgKSwgeW91J2QgY29weQotOmZpbGU6YGNvbW1hbmRfdGVtcGxhdGVgIHRvIDpmaWxlOmBkaXN0dXRpbHMvY29tbWFuZC9wZWVsX2JhbmFuYS5weWAsIHRoZW4gZWRpdAotaXQgc28gdGhhdCBpdCdzIGltcGxlbWVudGluZyB0aGUgY2xhc3MgOmNsYXNzOmBwZWVsX2JhbmFuYWAsIGEgc3ViY2xhc3Mgb2YKLTpjbGFzczpgZGlzdHV0aWxzLmNtZC5Db21tYW5kYC4KLQotU3ViY2xhc3NlcyBvZiA6Y2xhc3M6YENvbW1hbmRgIG11c3QgZGVmaW5lIHRoZSBmb2xsb3dpbmcgbWV0aG9kcy4KLQotLi4gbWV0aG9kOjogQ29tbWFuZC5pbml0aWFsaXplX29wdGlvbnMoKQotCi0gICBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbCB0aGUgb3B0aW9ucyB0aGF0IHRoaXMgY29tbWFuZCBzdXBwb3J0cy4gIE5vdGUgdGhhdAotICAgdGhlc2UgZGVmYXVsdHMgbWF5IGJlIG92ZXJyaWRkZW4gYnkgb3RoZXIgY29tbWFuZHMsIGJ5IHRoZSBzZXR1cCBzY3JpcHQsIGJ5Ci0gICBjb25maWcgZmlsZXMsIG9yIGJ5IHRoZSBjb21tYW5kLWxpbmUuICBUaHVzLCB0aGlzIGlzIG5vdCB0aGUgcGxhY2UgdG8gY29kZQotICAgZGVwZW5kZW5jaWVzIGJldHdlZW4gb3B0aW9uczsgZ2VuZXJhbGx5LCA6bWV0aDpgaW5pdGlhbGl6ZV9vcHRpb25zYAotICAgaW1wbGVtZW50YXRpb25zIGFyZSBqdXN0IGEgYnVuY2ggb2YgYGBzZWxmLmZvbyA9IE5vbmVgYCBhc3NpZ25tZW50cy4KLQotCi0uLiBtZXRob2Q6OiBDb21tYW5kLmZpbmFsaXplX29wdGlvbnMoKQotCi0gICBTZXQgZmluYWwgdmFsdWVzIGZvciBhbGwgdGhlIG9wdGlvbnMgdGhhdCB0aGlzIGNvbW1hbmQgc3VwcG9ydHMuIFRoaXMgaXMKLSAgIGFsd2F5cyBjYWxsZWQgYXMgbGF0ZSBhcyBwb3NzaWJsZSwgaWUuICBhZnRlciBhbnkgb3B0aW9uIGFzc2lnbm1lbnRzIGZyb20gdGhlCi0gICBjb21tYW5kLWxpbmUgb3IgZnJvbSBvdGhlciBjb21tYW5kcyBoYXZlIGJlZW4gZG9uZS4gIFRodXMsIHRoaXMgaXMgdGhlIHBsYWNlCi0gICB0byB0byBjb2RlIG9wdGlvbiBkZXBlbmRlbmNpZXM6IGlmICpmb28qIGRlcGVuZHMgb24gKmJhciosIHRoZW4gaXQgaXMgc2FmZSB0bwotICAgc2V0ICpmb28qIGZyb20gKmJhciogYXMgbG9uZyBhcyAqZm9vKiBzdGlsbCBoYXMgdGhlIHNhbWUgdmFsdWUgaXQgd2FzCi0gICBhc3NpZ25lZCBpbiA6bWV0aDpgaW5pdGlhbGl6ZV9vcHRpb25zYC4KLQotCi0uLiBtZXRob2Q6OiBDb21tYW5kLnJ1bigpCi0KLSAgIEEgY29tbWFuZCdzIHJhaXNvbiBkJ2V0cmU6IGNhcnJ5IG91dCB0aGUgYWN0aW9uIGl0IGV4aXN0cyB0byBwZXJmb3JtLCBjb250cm9sbGVkCi0gICBieSB0aGUgb3B0aW9ucyBpbml0aWFsaXplZCBpbiA6bWV0aDpgaW5pdGlhbGl6ZV9vcHRpb25zYCwgY3VzdG9taXplZCBieSBvdGhlcgotICAgY29tbWFuZHMsIHRoZSBzZXR1cCBzY3JpcHQsIHRoZSBjb21tYW5kLWxpbmUsIGFuZCBjb25maWcgZmlsZXMsIGFuZCBmaW5hbGl6ZWQgaW4KLSAgIDptZXRoOmBmaW5hbGl6ZV9vcHRpb25zYC4gIEFsbCB0ZXJtaW5hbCBvdXRwdXQgYW5kIGZpbGVzeXN0ZW0gaW50ZXJhY3Rpb24gc2hvdWxkCi0gICBiZSBkb25lIGJ5IDptZXRoOmBydW5gLgotCi0KLS4uIGF0dHJpYnV0ZTo6IENvbW1hbmQuc3ViX2NvbW1hbmRzCi0KLSAgICpzdWJfY29tbWFuZHMqIGZvcm1hbGl6ZXMgdGhlIG5vdGlvbiBvZiBhICJmYW1pbHkiIG9mIGNvbW1hbmRzLAotICAgZS5nLiBgYGluc3RhbGxgYCBhcyB0aGUgcGFyZW50IHdpdGggc3ViLWNvbW1hbmRzIGBgaW5zdGFsbF9saWJgYCwKLSAgIGBgaW5zdGFsbF9oZWFkZXJzYGAsIGV0Yy4gIFRoZSBwYXJlbnQgb2YgYSBmYW1pbHkgb2YgY29tbWFuZHMgZGVmaW5lcwotICAgKnN1Yl9jb21tYW5kcyogYXMgYSBjbGFzcyBhdHRyaWJ1dGU7IGl0J3MgYSBsaXN0IG9mIDItdHVwbGVzIGBgKGNvbW1hbmRfbmFtZSwKLSAgIHByZWRpY2F0ZSlgYCwgd2l0aCAqY29tbWFuZF9uYW1lKiBhIHN0cmluZyBhbmQgKnByZWRpY2F0ZSogYSBmdW5jdGlvbiwgYQotICAgc3RyaW5nIG9yIGBgTm9uZWBgLiAgKnByZWRpY2F0ZSogaXMgYSBtZXRob2Qgb2YgdGhlIHBhcmVudCBjb21tYW5kIHRoYXQKLSAgIGRldGVybWluZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBjb21tYW5kIGlzIGFwcGxpY2FibGUgaW4gdGhlIGN1cnJlbnQKLSAgIHNpdHVhdGlvbi4gIChFLmcuIHdlIGBgaW5zdGFsbF9oZWFkZXJzYGAgaXMgb25seSBhcHBsaWNhYmxlIGlmIHdlIGhhdmUgYW55IEMKLSAgIGhlYWRlciBmaWxlcyB0byBpbnN0YWxsLikgIElmICpwcmVkaWNhdGUqIGlzIGBgTm9uZWBgLCB0aGF0IGNvbW1hbmQgaXMgYWx3YXlzCi0gICBhcHBsaWNhYmxlLgotCi0gICAqc3ViX2NvbW1hbmRzKiBpcyB1c3VhbGx5IGRlZmluZWQgYXQgdGhlICplbmQqIG9mIGEgY2xhc3MsIGJlY2F1c2UKLSAgIHByZWRpY2F0ZXMgY2FuIGJlIG1ldGhvZHMgb2YgdGhlIGNsYXNzLCBzbyB0aGV5IG11c3QgYWxyZWFkeSBoYXZlIGJlZW4KLSAgIGRlZmluZWQuICBUaGUgY2Fub25pY2FsIGV4YW1wbGUgaXMgdGhlIDpjb21tYW5kOmBpbnN0YWxsYCBjb21tYW5kLgotCi0KIDptb2Q6YGRpc3R1dGlscy5jb21tYW5kYCAtLS0gSW5kaXZpZHVhbCBEaXN0dXRpbHMgY29tbWFuZHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMjAwNiwzICsxOTQxLDc2IEBACiBUaGlzIGlzIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiA6cGVwOmAzMDFgLgogCiAuLiAlIHRvZG8KKworOm1vZDpgZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2tgIC0tLSBDaGVjayB0aGUgbWV0YS1kYXRhIG9mIGEgcGFja2FnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBkaXN0dXRpbHMuY29tbWFuZC5jaGVjaworICAgOnN5bm9wc2lzOiBDaGVjayB0aGUgbWV0YWRhdGEgb2YgYSBwYWNrYWdlCisKKworVGhlIGBgY2hlY2tgYCBjb21tYW5kIHBlcmZvcm1zIHNvbWUgdGVzdHMgb24gdGhlIG1ldGEtZGF0YSBvZiBhIHBhY2thZ2UuCitGb3IgZXhhbXBsZSwgaXQgdmVyaWZpZXMgdGhhdCBhbGwgcmVxdWlyZWQgbWV0YS1kYXRhIGFyZSBwcm92aWRlZCBhcwordGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDpmdW5jOmBzZXR1cGAgZnVuY3Rpb24uCisKKy4uICUgdG9kbworCisKK0NyZWF0aW5nIGEgbmV3IERpc3R1dGlscyBjb21tYW5kCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gb3V0bGluZXMgdGhlIHN0ZXBzIHRvIGNyZWF0ZSBhIG5ldyBEaXN0dXRpbHMgY29tbWFuZC4KKworQSBuZXcgY29tbWFuZCBsaXZlcyBpbiBhIG1vZHVsZSBpbiB0aGUgOm1vZDpgZGlzdHV0aWxzLmNvbW1hbmRgIHBhY2thZ2UuIFRoZXJlCitpcyBhIHNhbXBsZSB0ZW1wbGF0ZSBpbiB0aGF0IGRpcmVjdG9yeSBjYWxsZWQgIDpmaWxlOmBjb21tYW5kX3RlbXBsYXRlYC4gQ29weQordGhpcyBmaWxlIHRvIGEgbmV3IG1vZHVsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5ldyBjb21tYW5kIHlvdSdyZQoraW1wbGVtZW50aW5nLiBUaGlzIG1vZHVsZSBzaG91bGQgaW1wbGVtZW50IGEgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZQorbW9kdWxlIChhbmQgdGhlIGNvbW1hbmQpLiBTbywgZm9yIGluc3RhbmNlLCB0byBjcmVhdGUgdGhlIGNvbW1hbmQKK2BgcGVlbF9iYW5hbmFgYCAoc28gdGhhdCB1c2VycyBjYW4gcnVuIGBgc2V0dXAucHkgcGVlbF9iYW5hbmFgYCksIHlvdSdkIGNvcHkKKzpmaWxlOmBjb21tYW5kX3RlbXBsYXRlYCAgdG8gOmZpbGU6YGRpc3R1dGlscy9jb21tYW5kL3BlZWxfYmFuYW5hLnB5YCwgdGhlbiBlZGl0CitpdCBzbyB0aGF0IGl0J3MgaW1wbGVtZW50aW5nIHRoZSBjbGFzcyA6Y2xhc3M6YHBlZWxfYmFuYW5hYCwgYSBzdWJjbGFzcyBvZgorOmNsYXNzOmBkaXN0dXRpbHMuY21kLkNvbW1hbmRgLgorCitTdWJjbGFzc2VzIG9mIDpjbGFzczpgQ29tbWFuZGAgbXVzdCBkZWZpbmUgdGhlIGZvbGxvd2luZyBtZXRob2RzLgorCisKKy4uIG1ldGhvZDo6IENvbW1hbmQuaW5pdGlhbGl6ZV9vcHRpb25zKCkKKworICAgU2V0IGRlZmF1bHQgdmFsdWVzIGZvciBhbGwgdGhlIG9wdGlvbnMgdGhhdCB0aGlzIGNvbW1hbmQgc3VwcG9ydHMuICBOb3RlIHRoYXQKKyAgIHRoZXNlIGRlZmF1bHRzIG1heSBiZSBvdmVycmlkZGVuIGJ5IG90aGVyIGNvbW1hbmRzLCBieSB0aGUgc2V0dXAgc2NyaXB0LCBieQorICAgY29uZmlnIGZpbGVzLCBvciBieSB0aGUgY29tbWFuZC1saW5lLiAgVGh1cywgdGhpcyBpcyBub3QgdGhlIHBsYWNlIHRvIGNvZGUKKyAgIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG9wdGlvbnM7IGdlbmVyYWxseSwgOm1ldGg6YGluaXRpYWxpemVfb3B0aW9uc2AKKyAgIGltcGxlbWVudGF0aW9ucyBhcmUganVzdCBhIGJ1bmNoIG9mIGBgc2VsZi5mb28gPSBOb25lYGAgYXNzaWdubWVudHMuCisKKworLi4gbWV0aG9kOjogQ29tbWFuZC5maW5hbGl6ZV9vcHRpb25zKCkKKworICAgU2V0IGZpbmFsIHZhbHVlcyBmb3IgYWxsIHRoZSBvcHRpb25zIHRoYXQgdGhpcyBjb21tYW5kIHN1cHBvcnRzLiBUaGlzIGlzCisgICBhbHdheXMgY2FsbGVkIGFzIGxhdGUgYXMgcG9zc2libGUsIGllLiAgYWZ0ZXIgYW55IG9wdGlvbiBhc3NpZ25tZW50cyBmcm9tIHRoZQorICAgY29tbWFuZC1saW5lIG9yIGZyb20gb3RoZXIgY29tbWFuZHMgaGF2ZSBiZWVuIGRvbmUuICBUaHVzLCB0aGlzIGlzIHRoZSBwbGFjZQorICAgdG8gdG8gY29kZSBvcHRpb24gZGVwZW5kZW5jaWVzOiBpZiAqZm9vKiBkZXBlbmRzIG9uICpiYXIqLCB0aGVuIGl0IGlzIHNhZmUgdG8KKyAgIHNldCAqZm9vKiBmcm9tICpiYXIqIGFzIGxvbmcgYXMgKmZvbyogc3RpbGwgaGFzIHRoZSBzYW1lIHZhbHVlIGl0IHdhcworICAgYXNzaWduZWQgaW4gOm1ldGg6YGluaXRpYWxpemVfb3B0aW9uc2AuCisKKworLi4gbWV0aG9kOjogQ29tbWFuZC5ydW4oKQorCisgICBBIGNvbW1hbmQncyByYWlzb24gZCdldHJlOiBjYXJyeSBvdXQgdGhlIGFjdGlvbiBpdCBleGlzdHMgdG8gcGVyZm9ybSwgY29udHJvbGxlZAorICAgYnkgdGhlIG9wdGlvbnMgaW5pdGlhbGl6ZWQgaW4gOm1ldGg6YGluaXRpYWxpemVfb3B0aW9uc2AsIGN1c3RvbWl6ZWQgYnkgb3RoZXIKKyAgIGNvbW1hbmRzLCB0aGUgc2V0dXAgc2NyaXB0LCB0aGUgY29tbWFuZC1saW5lLCBhbmQgY29uZmlnIGZpbGVzLCBhbmQgZmluYWxpemVkIGluCisgICA6bWV0aDpgZmluYWxpemVfb3B0aW9uc2AuICBBbGwgdGVybWluYWwgb3V0cHV0IGFuZCBmaWxlc3lzdGVtIGludGVyYWN0aW9uIHNob3VsZAorICAgYmUgZG9uZSBieSA6bWV0aDpgcnVuYC4KKworKnN1Yl9jb21tYW5kcyogZm9ybWFsaXplcyB0aGUgbm90aW9uIG9mIGEgImZhbWlseSIgb2YgY29tbWFuZHMsIGVnLiBgYGluc3RhbGxgYAorYXMgdGhlIHBhcmVudCB3aXRoIHN1Yi1jb21tYW5kcyBgYGluc3RhbGxfbGliYGAsIGBgaW5zdGFsbF9oZWFkZXJzYGAsIGV0Yy4gIFRoZQorcGFyZW50IG9mIGEgZmFtaWx5IG9mIGNvbW1hbmRzIGRlZmluZXMgKnN1Yl9jb21tYW5kcyogYXMgYSBjbGFzcyBhdHRyaWJ1dGU7IGl0J3MKK2EgbGlzdCBvZiAyLXR1cGxlcyBgYChjb21tYW5kX25hbWUsIHByZWRpY2F0ZSlgYCwgd2l0aCAqY29tbWFuZF9uYW1lKiBhIHN0cmluZworYW5kICpwcmVkaWNhdGUqIGEgZnVuY3Rpb24sIGEgc3RyaW5nIG9yIE5vbmUuICpwcmVkaWNhdGUqIGlzIGEgbWV0aG9kIG9mCit0aGUgcGFyZW50IGNvbW1hbmQgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWFuZCBpcworYXBwbGljYWJsZSBpbiB0aGUgY3VycmVudCBzaXR1YXRpb24uICAoRWcuIHdlIGBgaW5zdGFsbF9oZWFkZXJzYGAgaXMgb25seQorYXBwbGljYWJsZSBpZiB3ZSBoYXZlIGFueSBDIGhlYWRlciBmaWxlcyB0byBpbnN0YWxsLikgIElmICpwcmVkaWNhdGUqIGlzIE5vbmUsCit0aGF0IGNvbW1hbmQgaXMgYWx3YXlzIGFwcGxpY2FibGUuCisKKypzdWJfY29tbWFuZHMqIGlzIHVzdWFsbHkgZGVmaW5lZCBhdCB0aGUgXCplbmRcKiBvZiBhIGNsYXNzLCBiZWNhdXNlIHByZWRpY2F0ZXMKK2NhbiBiZSBtZXRob2RzIG9mIHRoZSBjbGFzcywgc28gdGhleSBtdXN0IGFscmVhZHkgaGF2ZSBiZWVuIGRlZmluZWQuICBUaGUKK2Nhbm9uaWNhbCBleGFtcGxlIGlzIHRoZSA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZC4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAppbmRleCAyNjk3YmEwLi5kMWFiN2RiIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CkBAIC0xMzksMTMgKzEzOSwxMyBAQAogY29tbWFuZHMuCiAKIAotLi4gX2NyZWF0aW5nLWR1bWI6CisuLiAuLiBfY3JlYXRpbmctZHVtYjoKIAotQ3JlYXRpbmcgZHVtYiBidWlsdCBkaXN0cmlidXRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy4uIENyZWF0aW5nIGR1bWIgYnVpbHQgZGlzdHJpYnV0aW9ucworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIFhYWCBOZWVkIHRvIGRvY3VtZW50IGFic29sdXRlIHZzLiBwcmVmaXgtcmVsYXRpdmUgcGFja2FnZXMgaGVyZSwgYnV0IGZpcnN0Ci0gICAgICAgSSBoYXZlIHRvIGltcGxlbWVudCBpdCEKKyAgIEkgaGF2ZSB0byBpbXBsZW1lbnQgaXQhCiAKIAogLi4gX2NyZWF0aW5nLXJwbXM6CkBAIC00MjUsNyArNDI1LDcgQEAKIAogICAgV2hpY2ggZm9sZGVycyBhcmUgYXZhaWxhYmxlIGRlcGVuZHMgb24gdGhlIGV4YWN0IFdpbmRvd3MgdmVyc2lvbiwgYW5kIHByb2JhYmx5CiAgICBhbHNvIHRoZSBjb25maWd1cmF0aW9uLiAgRm9yIGRldGFpbHMgcmVmZXIgdG8gTWljcm9zb2Z0J3MgZG9jdW1lbnRhdGlvbiBvZiB0aGUKLSAgIDpjZnVuYzpgU0hHZXRTcGVjaWFsRm9sZGVyUGF0aGAgZnVuY3Rpb24uCisgICA6YzpmdW5jOmBTSEdldFNwZWNpYWxGb2xkZXJQYXRoYCBmdW5jdGlvbi4KIAogCiAuLiBmdW5jdGlvbjo6IGNyZWF0ZV9zaG9ydGN1dCh0YXJnZXQsIGRlc2NyaXB0aW9uLCBmaWxlbmFtZVssIGFyZ3VtZW50c1ssIHdvcmtkaXJbLCBpY29ucGF0aFssIGljb25pbmRleF1dXV0pCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2NvbW1hbmRyZWYucnN0IGIvRG9jL2Rpc3R1dGlscy9jb21tYW5kcmVmLnJzdAppbmRleCBmYmU0MGRlLi42YTJhYzk2IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2NvbW1hbmRyZWYucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvY29tbWFuZHJlZi5yc3QKQEAgLTUzLDcgKzUzLDcgQEAKIENyZWF0aW5nIGEgc291cmNlIGRpc3RyaWJ1dGlvbjogdGhlIDpjb21tYW5kOmBzZGlzdGAgY29tbWFuZAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSoqXCpcKioqIGZyYWdtZW50IG1vdmVkIGRvd24gZnJvbSBhYm92ZTogbmVlZHMgY29udGV4dCEgKipcKlwqKioKKy4uIFhYWCBmcmFnbWVudCBtb3ZlZCBkb3duIGZyb20gYWJvdmU6IG5lZWRzIGNvbnRleHQhCiAKIFRoZSBtYW5pZmVzdCB0ZW1wbGF0ZSBjb21tYW5kcyBhcmU6CiAKQEAgLTkwLDcgKzkwLDcgQEAKIGNoYXJhY3RlciIgaXMgcGxhdGZvcm0tc3BlY2lmaWM6IG9uIFVuaXggaXQgaXMgYW55dGhpbmcgZXhjZXB0IHNsYXNoOyBvbiBXaW5kb3dzCiBhbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIG9yIGNvbG9uLgogCi0qKlwqXCoqKiBXaW5kb3dzIHN1cHBvcnQgbm90IHRoZXJlIHlldCAqKlwqXCoqKgorLi4gWFhYIFdpbmRvd3Mgc3VwcG9ydCBub3QgdGhlcmUgeWV0CiAKIC4uICUgXHNlY3Rpb257Q3JlYXRpbmcgYSBidWlsdCBkaXN0cmlidXRpb246IHRoZQogLi4gJSBccHJvdGVjdFxjb21tYW5ke2JkaXN0fSBjb21tYW5kIGZhbWlseX0KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0IGIvRG9jL2Rpc3R1dGlscy9leGFtcGxlcy5yc3QKaW5kZXggZThkMWVjOS4uYjI2ODQ4NiAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9leGFtcGxlcy5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9leGFtcGxlcy5yc3QKQEAgLTI1OCw5ICsyNTgsOCBAQAogCiAKIElmIHlvdSB1c2UgdGhlIHJlU3RydWN0dXJlZFRleHQgc3ludGF4IGluIHRoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCBmaWVsZCBhbmQKLWBkb2N1dGlscyA8aHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC8+YF8gaXMgaW5zdGFsbGVkIHlvdSBjYW4gY2hlY2sgaWYKLXRoZSBzeW50YXggaXMgZmluZSB3aXRoIHRoZSBgYGNoZWNrYGAgY29tbWFuZCwgdXNpbmcgdGhlIGBgcmVzdHJ1Y3R1cmVkdGV4dGBgCi1vcHRpb24uCitgZG9jdXRpbHNgXyAgaXMgaW5zdGFsbGVkIHlvdSBjYW4gY2hlY2sgaWYgdGhlIHN5bnRheCBpcyBmaW5lIHdpdGggdGhlCitgYGNoZWNrYGAgY29tbWFuZCwgdXNpbmcgdGhlIGBgcmVzdHJ1Y3R1cmVkdGV4dGBgIG9wdGlvbi4KIAogRm9yIGV4YW1wbGUsIGlmIHRoZSA6ZmlsZTpgc2V0dXAucHlgIHNjcmlwdCBpcyBjaGFuZ2VkIGxpa2UgdGhpczo6CiAKQEAgLTI5MSwzICsyOTAsNCBAQAogLi4gJSBcc2VjdGlvbntQdXR0aW5nIGl0IGFsbCB0b2dldGhlcn0KIAogCisuLiBfZG9jdXRpbHM6IGh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvZXh0ZW5kaW5nLnJzdCBiL0RvYy9kaXN0dXRpbHMvZXh0ZW5kaW5nLnJzdAppbmRleCA1YTcwZDAzLi45NzJmZjAyIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9leHRlbmRpbmcucnN0CkBAIC0xNSw4ICsxNSw4IEBACiBzaG91bGQgYmUgY29waWVkIGludG8gcGFja2FnZXMgaW4gYWRkaXRpb24gdG8gOmZpbGU6YC5weWAgZmlsZXMgYXMgYQogY29udmVuaWVuY2UuCiAKLU1vc3QgZGlzdHV0aWxzIGNvbW1hbmQgaW1wbGVtZW50YXRpb25zIGFyZSBzdWJjbGFzc2VzIG9mIHRoZQotOmNsYXNzOmBkaXN0dXRpbHMuY21kLkNvbW1hbmRgIGNsYXNzLiAgTmV3IGNvbW1hbmRzIG1heSBkaXJlY3RseSBpbmhlcml0IGZyb20KK01vc3QgZGlzdHV0aWxzIGNvbW1hbmQgaW1wbGVtZW50YXRpb25zIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YENvbW1hbmRgCitjbGFzcyBmcm9tIDptb2Q6YGRpc3R1dGlscy5jbWRgLiAgTmV3IGNvbW1hbmRzIG1heSBkaXJlY3RseSBpbmhlcml0IGZyb20KIDpjbGFzczpgQ29tbWFuZGAsIHdoaWxlIHJlcGxhY2VtZW50cyBvZnRlbiBkZXJpdmUgZnJvbSA6Y2xhc3M6YENvbW1hbmRgCiBpbmRpcmVjdGx5LCBkaXJlY3RseSBzdWJjbGFzc2luZyB0aGUgY29tbWFuZCB0aGV5IGFyZSByZXBsYWNpbmcuICBDb21tYW5kcyBhcmUKIHJlcXVpcmVkIHRvIGRlcml2ZSBmcm9tIDpjbGFzczpgQ29tbWFuZGAuCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAppbmRleCAyZGVhODNkLi4xNWQwYmFmIDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKQEAgLTY4LDEwICs2OCwxMCBAQAogICA6b3B0aW9uOmBwYWNrYWdlc2Agb3B0aW9ucwogCiAqIGFsbCBDIHNvdXJjZSBmaWxlcyBtZW50aW9uZWQgaW4gdGhlIDpvcHRpb246YGV4dF9tb2R1bGVzYCBvcgotICA6b3B0aW9uOmBsaWJyYXJpZXNgIG9wdGlvbnMKKyAgOm9wdGlvbjpgbGlicmFyaWVzYCBvcHRpb25zICgKIAotICAuLiBYWFggR2V0dGluZyBDIGxpYnJhcnkgc291cmNlcyBpcyBjdXJyZW50bHkgYnJva2VuIC0tIG5vCi0gICAgIDptZXRoOmBnZXRfc291cmNlX2ZpbGVzYCBtZXRob2QgaW4gOmZpbGU6YGJ1aWxkX2NsaWIucHlgIQorICAuLiBYWFggZ2V0dGluZyBDIGxpYnJhcnkgc291cmNlcyBjdXJyZW50bHkgYnJva2VuLS0tbm8KKyAgICAgICAgIDptZXRoOmBnZXRfc291cmNlX2ZpbGVzYCBtZXRob2QgaW4gOmZpbGU6YGJ1aWxkX2NsaWIucHlgIQogCiAqIHNjcmlwdHMgaWRlbnRpZmllZCBieSB0aGUgOm9wdGlvbjpgc2NyaXB0c2Agb3B0aW9uCiAgIFNlZSA6cmVmOmBkaXN0dXRpbHMtaW5zdGFsbGluZy1zY3JpcHRzYC4KZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvdXBsb2FkaW5nLnJzdCBiL0RvYy9kaXN0dXRpbHMvdXBsb2FkaW5nLnJzdAppbmRleCBmZDBjNTA4Li4xYjNjYjU4IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL3VwbG9hZGluZy5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy91cGxvYWRpbmcucnN0CkBAIC02Nyw5ICs2NywxMCBAQAogaW4gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2UgYmVzaWRlcyA6ZmlsZTpgc2V0dXAucHlgLgogCiBUbyBwcmV2ZW50IHJlZ2lzdGVyaW5nIGJyb2tlbiByZVN0cnVjdHVyZWRUZXh0IGNvbnRlbnQsIHlvdSBjYW4gdXNlIHRoZQotOnByb2dyYW06YHJzdDJodG1sYCBwcm9ncmFtIHRoYXQgaXMgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YGRvY3V0aWxzYCBwYWNrYWdlCi1hbmQgY2hlY2sgdGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIGZyb20gdGhlIGNvbW1hbmQgbGluZTo6Cis6cHJvZ3JhbTpgcnN0Mmh0bWxgIHByb2dyYW0gdGhhdCBpcyBwcm92aWRlZCBieSB0aGUgOm1vZDpgZG9jdXRpbHNgIHBhY2thZ2UgYW5kCitjaGVjayB0aGUgYGBsb25nX2Rlc2NyaXB0aW9uYGAgZnJvbSB0aGUgY29tbWFuZCBsaW5lOjoKIAogICAgICQgcHl0aG9uIHNldHVwLnB5IC0tbG9uZy1kZXNjcmlwdGlvbiB8IHJzdDJodG1sLnB5ID4gb3V0cHV0Lmh0bWwKIAotOm1vZDpgZG9jdXRpbHNgIHdpbGwgZGlzcGxheSBhIHdhcm5pbmcgaWYgdGhlcmUncyBzb21ldGhpbmcgd3Jvbmcgd2l0aCB5b3VyIHN5bnRheC4KKzptb2Q6YGRvY3V0aWxzYCB3aWxsIGRpc3BsYXkgYSB3YXJuaW5nIGlmIHRoZXJlJ3Mgc29tZXRoaW5nIHdyb25nIHdpdGggeW91cgorc3ludGF4LgpkaWZmIC0tZ2l0IGEvRG9jL2RvY3VtZW50aW5nL2J1aWxkaW5nLnJzdCBiL0RvYy9kb2N1bWVudGluZy9idWlsZGluZy5yc3QKaW5kZXggOWFiMjUxOS4uMTljZjI2YiAxMDA2NDQKLS0tIGEvRG9jL2RvY3VtZW50aW5nL2J1aWxkaW5nLnJzdAorKysgYi9Eb2MvZG9jdW1lbnRpbmcvYnVpbGRpbmcucnN0CkBAIC0xNiw5ICsxNiw5IEBACiAKICAgIG1ha2UgaHRtbAogCi10byBjaGVjayBvdXQgdGhlIG5lY2Vzc2FyeSB0b29sc2V0IGluIHRoZSBgdG9vbHMvYCBzdWJkaXJlY3RvcnkgYW5kIGJ1aWxkIHRoZQotSFRNTCBvdXRwdXQgZmlsZXMuICBUbyB2aWV3IHRoZSBnZW5lcmF0ZWQgSFRNTCwgcG9pbnQgeW91ciBmYXZvcml0ZSBicm93c2VyIGF0Ci10aGUgdG9wLWxldmVsIGluZGV4IGBidWlsZC9odG1sL2luZGV4Lmh0bWxgIGFmdGVyIHJ1bm5pbmcgIm1ha2UiLgordG8gY2hlY2sgb3V0IHRoZSBuZWNlc3NhcnkgdG9vbHNldCBpbiB0aGUgOmZpbGU6YHRvb2xzL2Agc3ViZGlyZWN0b3J5IGFuZCBidWlsZAordGhlIEhUTUwgb3V0cHV0IGZpbGVzLiAgVG8gdmlldyB0aGUgZ2VuZXJhdGVkIEhUTUwsIHBvaW50IHlvdXIgZmF2b3JpdGUgYnJvd3NlcgorYXQgdGhlIHRvcC1sZXZlbCBpbmRleCA6ZmlsZTpgYnVpbGQvaHRtbC9pbmRleC5odG1sYCBhZnRlciBydW5uaW5nICJtYWtlIi4KIAogQXZhaWxhYmxlIG1ha2UgdGFyZ2V0cyBhcmU6CiAKQEAgLTQ5LDEwICs0OSwxMCBAQAogCiAgKiAicHlkb2MtdG9waWNzIiwgd2hpY2ggYnVpbGRzIGEgUHl0aG9uIG1vZHVsZSBjb250YWluaW5nIGEgZGljdGlvbmFyeSB3aXRoCiAgICBwbGFpbiB0ZXh0IGRvY3VtZW50YXRpb24gZm9yIHRoZSBsYWJlbHMgZGVmaW5lZCBpbgotICAgYHRvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5YCAtLSBweWRvYyBuZWVkcyB0aGVzZSB0byBzaG93IHRvcGljIGFuZAorICAgOmZpbGU6YHRvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5YCAtLSBweWRvYyBuZWVkcyB0aGVzZSB0byBzaG93IHRvcGljIGFuZAogICAga2V5d29yZCBoZWxwLgogCi1BICJtYWtlIHVwZGF0ZSIgdXBkYXRlcyB0aGUgU3VidmVyc2lvbiBjaGVja291dHMgaW4gYHRvb2xzL2AuCitBICJtYWtlIHVwZGF0ZSIgdXBkYXRlcyB0aGUgU3VidmVyc2lvbiBjaGVja291dHMgaW4gOmZpbGU6YHRvb2xzL2AuCiAKIAogV2l0aG91dCBtYWtlCmRpZmYgLS1naXQgYS9Eb2MvZG9jdW1lbnRpbmcvbWFya3VwLnJzdCBiL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CmluZGV4IGJlNzcxOGQuLjFmNWIxZTMgMTAwNjQ0Ci0tLSBhL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CisrKyBiL0RvYy9kb2N1bWVudGluZy9tYXJrdXAucnN0CkBAIC0xMDcsMTEgKzEwNywxMSBAQAogCiBUaGUgZGlyZWN0aXZlcyBhcmU6CiAKLS4uIGRlc2NyaWJlOjogY2Z1bmN0aW9uCisuLiBkZXNjcmliZTo6IGM6ZnVuY3Rpb24KIAogICAgRGVzY3JpYmVzIGEgQyBmdW5jdGlvbi4gVGhlIHNpZ25hdHVyZSBzaG91bGQgYmUgZ2l2ZW4gYXMgaW4gQywgZS5nLjo6CiAKLSAgICAgIC4uIGNmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVR5cGVfR2VuZXJpY0FsbG9jKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlfc3NpemVfdCBuaXRlbXMpCisgICAgICAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykKIAogICAgVGhpcyBpcyBhbHNvIHVzZWQgdG8gZGVzY3JpYmUgZnVuY3Rpb24tbGlrZSBwcmVwcm9jZXNzb3IgbWFjcm9zLiAgVGhlIG5hbWVzCiAgICBvZiB0aGUgYXJndW1lbnRzIHNob3VsZCBiZSBnaXZlbiBzbyB0aGV5IG1heSBiZSB1c2VkIGluIHRoZSBkZXNjcmlwdGlvbi4KQEAgLTExOSwyOSArMTE5LDI5IEBACiAgICBOb3RlIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gYmFja3NsYXNoLWVzY2FwZSBhc3Rlcmlza3MgaW4gdGhlIHNpZ25hdHVyZSwKICAgIGFzIGl0IGlzIG5vdCBwYXJzZWQgYnkgdGhlIHJlU1QgaW5saW5lci4KIAotLi4gZGVzY3JpYmU6OiBjbWVtYmVyCisuLiBkZXNjcmliZTo6IGM6bWVtYmVyCiAKICAgIERlc2NyaWJlcyBhIEMgc3RydWN0IG1lbWJlci4gRXhhbXBsZSBzaWduYXR1cmU6OgogCi0gICAgICAuLiBjbWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9iYXNlcworICAgICAgLi4gYzptZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2Jhc2VzCiAKICAgIFRoZSB0ZXh0IG9mIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgaW5jbHVkZSB0aGUgcmFuZ2Ugb2YgdmFsdWVzIGFsbG93ZWQsIGhvdwogICAgdGhlIHZhbHVlIHNob3VsZCBiZSBpbnRlcnByZXRlZCwgYW5kIHdoZXRoZXIgdGhlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkLgogICAgUmVmZXJlbmNlcyB0byBzdHJ1Y3R1cmUgbWVtYmVycyBpbiB0ZXh0IHNob3VsZCB1c2UgdGhlIGBgbWVtYmVyYGAgcm9sZS4KIAotLi4gZGVzY3JpYmU6OiBjbWFjcm8KKy4uIGRlc2NyaWJlOjogYzptYWNybwogCiAgICBEZXNjcmliZXMgYSAic2ltcGxlIiBDIG1hY3JvLiAgU2ltcGxlIG1hY3JvcyBhcmUgbWFjcm9zIHdoaWNoIGFyZSB1c2VkCiAgICBmb3IgY29kZSBleHBhbnNpb24sIGJ1dCB3aGljaCBkbyBub3QgdGFrZSBhcmd1bWVudHMgc28gY2Fubm90IGJlIGRlc2NyaWJlZCBhcwogICAgZnVuY3Rpb25zLiAgVGhpcyBpcyBub3QgdG8gYmUgdXNlZCBmb3Igc2ltcGxlIGNvbnN0YW50IGRlZmluaXRpb25zLiAgRXhhbXBsZXMKLSAgIG9mIGl0cyB1c2UgaW4gdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluY2x1ZGUgOmNtYWNybzpgUHlPYmplY3RfSEVBRGAgYW5kCi0gICA6Y21hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYC4KKyAgIG9mIGl0cyB1c2UgaW4gdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluY2x1ZGUgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIGFuZAorICAgOmM6bWFjcm86YFB5X0JFR0lOX0FMTE9XX1RIUkVBRFNgLgogCi0uLiBkZXNjcmliZTo6IGN0eXBlCisuLiBkZXNjcmliZTo6IGM6dHlwZQogCiAgICBEZXNjcmliZXMgYSBDIHR5cGUuIFRoZSBzaWduYXR1cmUgc2hvdWxkIGp1c3QgYmUgdGhlIHR5cGUgbmFtZS4KIAotLi4gZGVzY3JpYmU6OiBjdmFyCisuLiBkZXNjcmliZTo6IGM6dmFyCiAKICAgIERlc2NyaWJlcyBhIGdsb2JhbCBDIHZhcmlhYmxlLiAgVGhlIHNpZ25hdHVyZSBzaG91bGQgaW5jbHVkZSB0aGUgdHlwZSwgc3VjaAogICAgYXM6OgpAQCAtMTc3LDYgKzE3NywzNyBAQAogICAgYXJlIG1vZGlmaWVkKSwgc2lkZSBlZmZlY3RzLCBhbmQgcG9zc2libGUgZXhjZXB0aW9ucy4gIEEgc21hbGwgZXhhbXBsZSBtYXkgYmUKICAgIHByb3ZpZGVkLgogCisuLiBkZXNjcmliZTo6IGRlY29yYXRvcgorCisgICBEZXNjcmliZXMgYSBkZWNvcmF0b3IgZnVuY3Rpb24uICBUaGUgc2lnbmF0dXJlIHNob3VsZCAqbm90KiByZXByZXNlbnQgdGhlCisgICBzaWduYXR1cmUgb2YgdGhlIGFjdHVhbCBmdW5jdGlvbiwgYnV0IHRoZSB1c2FnZSBhcyBhIGRlY29yYXRvci4gIEZvciBleGFtcGxlLAorICAgZ2l2ZW4gdGhlIGZ1bmN0aW9ucworCisgICAuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICAgIGRlZiByZW1vdmVuYW1lKGZ1bmMpOgorICAgICAgICAgIGZ1bmMuX19uYW1lX18gPSAnJworICAgICAgICAgIHJldHVybiBmdW5jCisKKyAgICAgIGRlZiBzZXRuZXduYW1lKG5hbWUpOgorICAgICAgICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgICAgICAgIGZ1bmMuX19uYW1lX18gPSBuYW1lCisgICAgICAgICAgICAgIHJldHVybiBmdW5jCisgICAgICAgICAgcmV0dXJuIGRlY29yYXRvcgorCisgICB0aGUgZGVzY3JpcHRpb25zIHNob3VsZCBsb29rIGxpa2UgdGhpczo6CisKKyAgICAgIC4uIGRlY29yYXRvcjo6IHJlbW92ZW5hbWUKKworICAgICAgICAgUmVtb3ZlIG5hbWUgb2YgdGhlIGRlY29yYXRlZCBmdW5jdGlvbi4KKworICAgICAgLi4gZGVjb3JhdG9yOjogc2V0bmV3bmFtZShuYW1lKQorCisgICAgICAgICBTZXQgbmFtZSBvZiB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIHRvICpuYW1lKi4KKworICAgVGhlcmUgaXMgbm8gYGBkZWNvYGAgcm9sZSB0byBsaW5rIHRvIGEgZGVjb3JhdG9yIHRoYXQgaXMgbWFya2VkIHVwIHdpdGgKKyAgIHRoaXMgZGlyZWN0aXZlOyByYXRoZXIsIHVzZSB0aGUgYGA6ZnVuYzpgYCByb2xlLgorCiAuLiBkZXNjcmliZTo6IGNsYXNzCiAKICAgIERlc2NyaWJlcyBhIGNsYXNzLiAgVGhlIHNpZ25hdHVyZSBjYW4gaW5jbHVkZSBwYXJlbnRoZXNlcyB3aXRoIHBhcmFtZXRlcnMKQEAgLTIxMSw2ICsyNDIsMTIgQEAKICAgIGRlc2NyaWJlZCBmb3IgYGBmdW5jdGlvbmBgLiAgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG5lc3RlZCBpbiBhIGNsYXNzCiAgICBtZXRob2QsIGxpa2UgaW4gdGhlIGV4YW1wbGUgYWJvdmUuCiAKKy4uIGRlc2NyaWJlOjogZGVjb3JhdG9ybWV0aG9kCisKKyAgIFNhbWUgYXMgYGBkZWNvcmF0b3JgYCwgYnV0IGZvciBkZWNvcmF0b3JzIHRoYXQgYXJlIG1ldGhvZHMuCisKKyAgIFJlZmVyIHRvIGEgZGVjb3JhdG9yIG1ldGhvZCB1c2luZyB0aGUgYGA6bWV0aDpgYCByb2xlLgorCiAuLiBkZXNjcmliZTo6IG9wY29kZQogCiAgICBEZXNjcmliZXMgYSBQeXRob24gOnRlcm06YGJ5dGVjb2RlYCBpbnN0cnVjdGlvbi4KQEAgLTM4MywyMiArNDIwLDI2IEBACiBUaGUgZm9sbG93aW5nIHJvbGVzIGNyZWF0ZSBjcm9zcy1yZWZlcmVuY2VzIHRvIEMtbGFuZ3VhZ2UgY29uc3RydWN0cyBpZiB0aGV5CiBhcmUgZGVmaW5lZCBpbiB0aGUgQVBJIGRvY3VtZW50YXRpb246CiAKLS4uIGRlc2NyaWJlOjogY2RhdGEKKy4uIGRlc2NyaWJlOjogYzpkYXRhCiAKICAgIFRoZSBuYW1lIG9mIGEgQy1sYW5ndWFnZSB2YXJpYWJsZS4KIAotLi4gZGVzY3JpYmU6OiBjZnVuYworLi4gZGVzY3JpYmU6OiBjOmZ1bmMKIAogICAgVGhlIG5hbWUgb2YgYSBDLWxhbmd1YWdlIGZ1bmN0aW9uLiBTaG91bGQgaW5jbHVkZSB0cmFpbGluZyBwYXJlbnRoZXNlcy4KIAotLi4gZGVzY3JpYmU6OiBjbWFjcm8KKy4uIGRlc2NyaWJlOjogYzptYWNybwogCiAgICBUaGUgbmFtZSBvZiBhICJzaW1wbGUiIEMgbWFjcm8sIGFzIGRlZmluZWQgYWJvdmUuCiAKLS4uIGRlc2NyaWJlOjogY3R5cGUKKy4uIGRlc2NyaWJlOjogYzp0eXBlCiAKICAgIFRoZSBuYW1lIG9mIGEgQy1sYW5ndWFnZSB0eXBlLgogCisuLiBkZXNjcmliZTo6IGM6bWVtYmVyCisKKyAgIFRoZSBuYW1lIG9mIGEgQyB0eXBlIG1lbWJlciwgYXMgZGVmaW5lZCBhYm92ZS4KKwogCiBUaGUgZm9sbG93aW5nIHJvbGUgZG9lcyBwb3NzaWJseSBjcmVhdGUgYSBjcm9zcy1yZWZlcmVuY2UsIGJ1dCBkb2VzIG5vdCByZWZlcgogdG8gb2JqZWN0czoKQEAgLTU0MSwxMCArNTgyLDYgQEAKICAgIElmIHlvdSBkb24ndCBuZWVkIHRoZSAidmFyaWFibGUgcGFydCIgaW5kaWNhdGlvbiwgdXNlIHRoZSBzdGFuZGFyZAogICAgYGBgYGNvZGVgYGBgIGluc3RlYWQuCiAKLS4uIGRlc2NyaWJlOjogdmFyCi0KLSAgIEEgUHl0aG9uIG9yIEMgdmFyaWFibGUgb3IgcGFyYW1ldGVyIG5hbWUuCi0KIAogVGhlIGZvbGxvd2luZyByb2xlcyBnZW5lcmF0ZSBleHRlcm5hbCBsaW5rczoKIApAQCAtNTkwLDYgKzYyNyw4IEBACiAKIFRoZSBgYDpyZWY6YGAgaW52b2NhdGlvbiBpcyByZXBsYWNlZCB3aXRoIHRoZSBzZWN0aW9uIHRpdGxlLgogCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJlZmVyZW5jZSBhbnkgbGFiZWwgKG5vdCBqdXN0IHNlY3Rpb24gdGl0bGVzKQoraWYgeW91IHByb3ZpZGUgdGhlIGxpbmsgdGV4dCBgYDpyZWY6YGxpbmsgdGV4dCA8cmVmZXJlbmNlLWxhYmVsPmBgYC4KIAogUGFyYWdyYXBoLWxldmVsIG1hcmt1cAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2RvY3VtZW50aW5nL3N0eWxlLnJzdCBiL0RvYy9kb2N1bWVudGluZy9zdHlsZS5yc3QKaW5kZXggYzNkZGVkOS4uZDA1NTcxMSAxMDA2NDQKLS0tIGEvRG9jL2RvY3VtZW50aW5nL3N0eWxlLnJzdAorKysgYi9Eb2MvZG9jdW1lbnRpbmcvc3R5bGUucnN0CkBAIC0xLDE0ICsxLDE4IEBACiAuLiBoaWdobGlnaHRsYW5nOjogcmVzdAogCi1TdHlsZSBHdWlkZQorU3R5bGUgZ3VpZGUKID09PT09PT09PT09CiAKIFRoZSBQeXRob24gZG9jdW1lbnRhdGlvbiBzaG91bGQgZm9sbG93IHRoZSBgQXBwbGUgUHVibGljYXRpb25zIFN0eWxlIEd1aWRlYF8KIHdoZXJldmVyIHBvc3NpYmxlLiBUaGlzIHBhcnRpY3VsYXIgc3R5bGUgZ3VpZGUgd2FzIHNlbGVjdGVkIG1vc3RseSBiZWNhdXNlIGl0CiBzZWVtcyByZWFzb25hYmxlIGFuZCBpcyBlYXN5IHRvIGdldCBvbmxpbmUuCiAKLVRvcGljcyB3aGljaCBhcmUgbm90IGNvdmVyZWQgaW4gQXBwbGUncyBzdHlsZSBndWlkZSB3aWxsIGJlIGRpc2N1c3NlZCBpbgotdGhpcyBkb2N1bWVudC4KK1RvcGljcyB3aGljaCBhcmUgZWl0aGVyIG5vdCBjb3ZlcmVkIGluIEFwcGxlJ3Mgc3R5bGUgZ3VpZGUgb3IgdHJlYXRlZAorZGlmZmVyZW50bHkgaW4gUHl0aG9uIGRvY3VtZW50YXRpb24gd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhpcworZG9jdW1lbnQuCisKK1VzZSBvZiB3aGl0ZXNwYWNlCistLS0tLS0tLS0tLS0tLS0tLQogCiBBbGwgcmVTVCBmaWxlcyB1c2UgYW4gaW5kZW50YXRpb24gb2YgMyBzcGFjZXMuICBUaGUgbWF4aW11bSBsaW5lIGxlbmd0aCBpcyA4MAogY2hhcmFjdGVycyBmb3Igbm9ybWFsIHRleHQsIGJ1dCB0YWJsZXMsIGRlZXBseSBpbmRlbnRlZCBjb2RlIHNhbXBsZXMgYW5kIGxvbmcKQEAgLTIxLDYgKzI1LDkgQEAKIGlnbm9yZXMgdGhlIHNlY29uZCBzcGFjZSwgaXQgaXMgY3VzdG9tYXJpbHkgcHV0IGluIGJ5IHNvbWUgdXNlcnMsIGZvciBleGFtcGxlCiB0byBhaWQgRW1hY3MnIGF1dG8tZmlsbCBtb2RlLgogCitGb290bm90ZXMKKy0tLS0tLS0tLQorCiBGb290bm90ZXMgYXJlIGdlbmVyYWxseSBkaXNjb3VyYWdlZCwgdGhvdWdoIHRoZXkgbWF5IGJlIHVzZWQgd2hlbiB0aGV5IGFyZSB0aGUKIGJlc3Qgd2F5IHRvIHByZXNlbnQgc3BlY2lmaWMgaW5mb3JtYXRpb24uIFdoZW4gYSBmb290bm90ZSByZWZlcmVuY2UgaXMgYWRkZWQgYXQKIHRoZSBlbmQgb2YgdGhlIHNlbnRlbmNlLCBpdCBzaG91bGQgZm9sbG93IHRoZSBzZW50ZW5jZS1lbmRpbmcgcHVuY3R1YXRpb24uIFRoZQpAQCAtMzQsNiArNDEsMzYgQEAKIAogRm9vdG5vdGVzIG1heSBhcHBlYXIgaW4gdGhlIG1pZGRsZSBvZiBzZW50ZW5jZXMgd2hlcmUgYXBwcm9wcmlhdGUuCiAKK0NhcGl0YWxpemF0aW9uCistLS0tLS0tLS0tLS0tLQorCisuLiBzaWRlYmFyOjogU2VudGVuY2UgY2FzZQorCisgICBTZW50ZW5jZSBjYXNlIGlzIGEgc2V0IG9mIGNhcGl0YWxpemF0aW9uIHJ1bGVzIHVzZWQgaW4gRW5nbGlzaAorICAgc2VudGVuY2VzOiB0aGUgZmlyc3Qgd29yZCBpcyBhbHdheXMgY2FwaXRhbGl6ZWQgYW5kIG90aGVyIHdvcmRzIGFyZQorICAgb25seSBjYXBpdGFsaXplZCBpZiB0aGVyZSBpcyBhIHNwZWNpZmljIHJ1bGUgcmVxdWlyaW5nIGl0LgorCitBcHBsZSBzdHlsZSBndWlkZSByZWNvbW1lbmRzIHRoZSB1c2Ugb2YgdGl0bGUgY2FzZSBpbiBzZWN0aW9uIHRpdGxlcy4KK0hvd2V2ZXIsIHJ1bGVzIGZvciB3aGljaCB3b3JkcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWQgaW4gdGl0bGUgY2FzZQordmFyeSBncmVhdHkgYmV0d2VlbiBwdWJsaWNhdGlvbnMuCisKK0luIFB5dGhvbiBkb2N1bWVudGF0aW9uLCB1c2Ugb2Ygc2VudGVuY2UgY2FzZSBpbiBzZWN0aW9uIHRpdGxlcyBpcworcHJlZmVyYWJsZSwgYnV0IGNvbnNpc3RlbmN5IHdpdGhpbiBhIHVuaXQgaXMgbW9yZSBpbXBvcnRhbnQgdGhhbgorZm9sbG93aW5nIHRoaXMgcnVsZS4gIElmIHlvdSBhZGQgYSBzZWN0aW9uIHRvIHRoZSBjaGFwdGVyIHdoZXJlIG1vc3QKK3NlY3Rpb25zIGFyZSBpbiB0aXRsZSBjYXNlIHlvdSBjYW4gZWl0aGVyIGNvbnZlcnQgYWxsIHRpdGxlcyB0bworc2VudGVuY2UgY2FzZSBvciB1c2UgdGhlIGRvbWluYW50IHN0eWxlIGluIHRoZSBuZXcgc2VjdGlvbiB0aXRsZS4KKworU2VudGVuY2VzIHRoYXQgc3RhcnQgd2l0aCBhIHdvcmQgZm9yIHdoaWNoIHNwZWNpZmljIHJ1bGVzIHJlcXVpcmUKK3N0YXJ0aW5nIGl0IHdpdGggYSBsb3dlciBjYXNlIGxldHRlciBzaG91bGQgYmUgYXZvaWRlZCBpbiB0aXRsZXMgYW5kCitlbHNld2hlcmUuCisKKy4uIG5vdGU6OgorCisgICBTZWN0aW9ucyB0aGF0IGRlc2NyaWJlIGEgbGlicmFyeSBtb2R1bGUgb2Z0ZW4gaGF2ZSB0aXRsZXMgaW4gdGhlCisgICBmb3JtIG9mICJtb2R1bGVuYW1lIC0tLSBTaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgbW9kdWxlLiIgIEluIHRoaXMKKyAgIGNhc2UsIHRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgY2FwaXRhbGl6ZWQgYXMgYSBzdGFuZC1hbG9uZQorICAgc2VudGVuY2UuCisKIE1hbnkgc3BlY2lhbCBuYW1lcyBhcmUgdXNlZCBpbiB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyB0aGUgbmFtZXMgb2YKIG9wZXJhdGluZyBzeXN0ZW1zLCBwcm9ncmFtbWluZyBsYW5ndWFnZXMsIHN0YW5kYXJkcyBib2RpZXMsIGFuZCB0aGUgbGlrZS4gTW9zdAogb2YgdGhlc2UgZW50aXRpZXMgYXJlIG5vdCBhc3NpZ25lZCBhbnkgc3BlY2lhbCBtYXJrdXAsIGJ1dCB0aGUgcHJlZmVycmVkCkBAIC00NCwyNiArODEsMzIgQEAKIGJlIHVzZWQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IHRocm91Z2hvdXQgdGhlIGRvY3VtZW50YXRpb246CiAKIENQVQotICAgIEZvciAiY2VudHJhbCBwcm9jZXNzaW5nIHVuaXQuIiBNYW55IHN0eWxlIGd1aWRlcyBzYXkgdGhpcyBzaG91bGQgYmUgc3BlbGxlZAotICAgIG91dCBvbiB0aGUgZmlyc3QgdXNlIChhbmQgaWYgeW91IG11c3QgdXNlIGl0LCBkbyBzbyEpLiBGb3IgdGhlIFB5dGhvbgotICAgIGRvY3VtZW50YXRpb24sIHRoaXMgYWJicmV2aWF0aW9uIHNob3VsZCBiZSBhdm9pZGVkIHNpbmNlIHRoZXJlJ3Mgbm8KLSAgICByZWFzb25hYmxlIHdheSB0byBwcmVkaWN0IHdoaWNoIG9jY3VycmVuY2Ugd2lsbCBiZSB0aGUgZmlyc3Qgc2VlbiBieSB0aGUKLSAgICByZWFkZXIuIEl0IGlzIGJldHRlciB0byB1c2UgdGhlIHdvcmQgInByb2Nlc3NvciIgaW5zdGVhZC4KKyAgIEZvciAiY2VudHJhbCBwcm9jZXNzaW5nIHVuaXQuIiBNYW55IHN0eWxlIGd1aWRlcyBzYXkgdGhpcyBzaG91bGQgYmUKKyAgIHNwZWxsZWQgb3V0IG9uIHRoZSBmaXJzdCB1c2UgKGFuZCBpZiB5b3UgbXVzdCB1c2UgaXQsIGRvIHNvISkuIEZvcgorICAgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCB0aGlzIGFiYnJldmlhdGlvbiBzaG91bGQgYmUgYXZvaWRlZCBzaW5jZQorICAgdGhlcmUncyBubyByZWFzb25hYmxlIHdheSB0byBwcmVkaWN0IHdoaWNoIG9jY3VycmVuY2Ugd2lsbCBiZSB0aGUKKyAgIGZpcnN0IHNlZW4gYnkgdGhlIHJlYWRlci4gSXQgaXMgYmV0dGVyIHRvIHVzZSB0aGUgd29yZCAicHJvY2Vzc29yIgorICAgaW5zdGVhZC4KIAogUE9TSVgKLSAgICBUaGUgbmFtZSBhc3NpZ25lZCB0byBhIHBhcnRpY3VsYXIgZ3JvdXAgb2Ygc3RhbmRhcmRzLiBUaGlzIGlzIGFsd2F5cwotICAgIHVwcGVyY2FzZS4KKyAgIFRoZSBuYW1lIGFzc2lnbmVkIHRvIGEgcGFydGljdWxhciBncm91cCBvZiBzdGFuZGFyZHMuIFRoaXMgaXMgYWx3YXlzCisgICB1cHBlcmNhc2UuCiAKIFB5dGhvbgotICAgIFRoZSBuYW1lIG9mIG91ciBmYXZvcml0ZSBwcm9ncmFtbWluZyBsYW5ndWFnZSBpcyBhbHdheXMgY2FwaXRhbGl6ZWQuCisgICBUaGUgbmFtZSBvZiBvdXIgZmF2b3JpdGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaXMgYWx3YXlzIGNhcGl0YWxpemVkLgorCityZVNUCisgICBGb3IgInJlU3RydWN0dXJlZFRleHQsIiBhbiBlYXN5IHRvIHJlYWQsIHBsYWludGV4dCBtYXJrdXAgc3ludGF4CisgICB1c2VkIHRvIHByb2R1Y2UgUHl0aG9uIGRvY3VtZW50YXRpb24uICBXaGVuIHNwZWxsZWQgb3V0LCBpdCBpcworICAgYWx3YXlzIG9uZSB3b3JkIGFuZCBib3RoIGZvcm1zIHN0YXJ0IHdpdGggYSBsb3dlciBjYXNlICdyJy4KIAogVW5pY29kZQotICAgIFRoZSBuYW1lIG9mIGEgY2hhcmFjdGVyIHNldCBhbmQgbWF0Y2hpbmcgZW5jb2RpbmcuIFRoaXMgaXMgYWx3YXlzIHdyaXR0ZW4KLSAgICBjYXBpdGFsaXplZC4KKyAgIFRoZSBuYW1lIG9mIGEgY2hhcmFjdGVyIGNvZGluZyBzeXN0ZW0uIFRoaXMgaXMgYWx3YXlzIHdyaXR0ZW4KKyAgIGNhcGl0YWxpemVkLgogCiBVbml4Ci0gICAgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZGV2ZWxvcGVkIGF0IEFUJlQgQmVsbCBMYWJzIGluIHRoZSBlYXJseQotICAgIDE5NzBzLgorICAgVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZGV2ZWxvcGVkIGF0IEFUJlQgQmVsbCBMYWJzIGluIHRoZSBlYXJseQorICAgMTk3MHMuCiAKIAogLi4gX0FwcGxlIFB1YmxpY2F0aW9ucyBTdHlsZSBHdWlkZTogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vbWFjL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9Vc2VyRXhwZXJpZW5jZS9Db25jZXB0dWFsL0FQU3R5bGVHdWlkZS9BUFNHXzIwMDkucGRmCmRpZmYgLS1naXQgYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKaW5kZXggMmVhMTI1My4uZTI2MTA0OCAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CisrKyBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdApAQCAtMjUsMTkgKzI1LDE2IEBACiAKIFNvIGlmIHlvdSBhcmUgZW1iZWRkaW5nIFB5dGhvbiwgeW91IGFyZSBwcm92aWRpbmcgeW91ciBvd24gbWFpbiBwcm9ncmFtLiAgT25lIG9mCiB0aGUgdGhpbmdzIHRoaXMgbWFpbiBwcm9ncmFtIGhhcyB0byBkbyBpcyBpbml0aWFsaXplIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBBdAotdGhlIHZlcnkgbGVhc3QsIHlvdSBoYXZlIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIDpjZnVuYzpgUHlfSW5pdGlhbGl6ZWAuICBUaGVyZSBhcmUKK3RoZSB2ZXJ5IGxlYXN0LCB5b3UgaGF2ZSB0byBjYWxsIHRoZSBmdW5jdGlvbiA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYC4gIFRoZXJlIGFyZQogb3B0aW9uYWwgY2FsbHMgdG8gcGFzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIFB5dGhvbi4gIFRoZW4gbGF0ZXIgeW91IGNhbgogY2FsbCB0aGUgaW50ZXJwcmV0ZXIgZnJvbSBhbnkgcGFydCBvZiB0aGUgYXBwbGljYXRpb24uCiAKIFRoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIHRvIGNhbGwgdGhlIGludGVycHJldGVyOiB5b3UgY2FuIHBhc3MgYSBzdHJpbmcKLWNvbnRhaW5pbmcgUHl0aG9uIHN0YXRlbWVudHMgdG8gOmNmdW5jOmBQeVJ1bl9TaW1wbGVTdHJpbmdgLCBvciB5b3UgY2FuIHBhc3MgYQorY29udGFpbmluZyBQeXRob24gc3RhdGVtZW50cyB0byA6YzpmdW5jOmBQeVJ1bl9TaW1wbGVTdHJpbmdgLCBvciB5b3UgY2FuIHBhc3MgYQogc3RkaW8gZmlsZSBwb2ludGVyIGFuZCBhIGZpbGUgbmFtZSAoZm9yIGlkZW50aWZpY2F0aW9uIGluIGVycm9yIG1lc3NhZ2VzIG9ubHkpCi10byA6Y2Z1bmM6YFB5UnVuX1NpbXBsZUZpbGVgLiAgWW91IGNhbiBhbHNvIGNhbGwgdGhlIGxvd2VyLWxldmVsIG9wZXJhdGlvbnMKK3RvIDpjOmZ1bmM6YFB5UnVuX1NpbXBsZUZpbGVgLiAgWW91IGNhbiBhbHNvIGNhbGwgdGhlIGxvd2VyLWxldmVsIG9wZXJhdGlvbnMKIGRlc2NyaWJlZCBpbiB0aGUgcHJldmlvdXMgY2hhcHRlcnMgdG8gY29uc3RydWN0IGFuZCB1c2UgUHl0aG9uIG9iamVjdHMuCiAKLUEgc2ltcGxlIGRlbW8gb2YgZW1iZWRkaW5nIFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGRpcmVjdG9yeQotOmZpbGU6YERlbW8vZW1iZWQvYCBvZiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQogCiAuLiBzZWVhbHNvOjoKIApAQCAtNjksMTIgKzY2LDEyIEBACiAgICB9CiAKIFRoZSBhYm92ZSBjb2RlIGZpcnN0IGluaXRpYWxpemVzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aAotOmNmdW5jOmBQeV9Jbml0aWFsaXplYCwgZm9sbG93ZWQgYnkgdGhlIGV4ZWN1dGlvbiBvZiBhIGhhcmQtY29kZWQgUHl0aG9uIHNjcmlwdAotdGhhdCBwcmludCB0aGUgZGF0ZSBhbmQgdGltZS4gIEFmdGVyd2FyZHMsIHRoZSA6Y2Z1bmM6YFB5X0ZpbmFsaXplYCBjYWxsIHNodXRzCis6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCwgZm9sbG93ZWQgYnkgdGhlIGV4ZWN1dGlvbiBvZiBhIGhhcmQtY29kZWQgUHl0aG9uIHNjcmlwdAordGhhdCBwcmludCB0aGUgZGF0ZSBhbmQgdGltZS4gIEFmdGVyd2FyZHMsIHRoZSA6YzpmdW5jOmBQeV9GaW5hbGl6ZWAgY2FsbCBzaHV0cwogdGhlIGludGVycHJldGVyIGRvd24sIGZvbGxvd2VkIGJ5IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0uICBJbiBhIHJlYWwgcHJvZ3JhbSwKIHlvdSBtYXkgd2FudCB0byBnZXQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSBhbm90aGVyIHNvdXJjZSwgcGVyaGFwcyBhIHRleHQtZWRpdG9yCiByb3V0aW5lLCBhIGZpbGUsIG9yIGEgZGF0YWJhc2UuICBHZXR0aW5nIHRoZSBQeXRob24gY29kZSBmcm9tIGEgZmlsZSBjYW4gYmV0dGVyCi1iZSBkb25lIGJ5IHVzaW5nIHRoZSA6Y2Z1bmM6YFB5UnVuX1NpbXBsZUZpbGVgIGZ1bmN0aW9uLCB3aGljaCBzYXZlcyB5b3UgdGhlCitiZSBkb25lIGJ5IHVzaW5nIHRoZSA6YzpmdW5jOmBQeVJ1bl9TaW1wbGVGaWxlYCBmdW5jdGlvbiwgd2hpY2ggc2F2ZXMgeW91IHRoZQogdHJvdWJsZSBvZiBhbGxvY2F0aW5nIG1lbW9yeSBzcGFjZSBhbmQgbG9hZGluZyB0aGUgZmlsZSBjb250ZW50cy4KIAogCkBAIC0xNjIsOCArMTU5LDggQEAKICAgIHBNb2R1bGUgPSBQeUltcG9ydF9JbXBvcnQocE5hbWUpOwogCiBBZnRlciBpbml0aWFsaXppbmcgdGhlIGludGVycHJldGVyLCB0aGUgc2NyaXB0IGlzIGxvYWRlZCB1c2luZwotOmNmdW5jOmBQeUltcG9ydF9JbXBvcnRgLiAgVGhpcyByb3V0aW5lIG5lZWRzIGEgUHl0aG9uIHN0cmluZyBhcyBpdHMgYXJndW1lbnQsCi13aGljaCBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgOmNmdW5jOmBQeVN0cmluZ19Gcm9tU3RyaW5nYCBkYXRhIGNvbnZlcnNpb24KKzpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydGAuICBUaGlzIHJvdXRpbmUgbmVlZHMgYSBQeXRob24gc3RyaW5nIGFzIGl0cyBhcmd1bWVudCwKK3doaWNoIGlzIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSA6YzpmdW5jOmBQeVN0cmluZ19Gcm9tU3RyaW5nYCBkYXRhIGNvbnZlcnNpb24KIHJvdXRpbmUuIDo6CiAKICAgIHBGdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhwTW9kdWxlLCBhcmd2WzJdKTsKQEAgLTE3NSw3ICsxNzIsNyBAQAogICAgUHlfWERFQ1JFRihwRnVuYyk7CiAKIE9uY2UgdGhlIHNjcmlwdCBpcyBsb2FkZWQsIHRoZSBuYW1lIHdlJ3JlIGxvb2tpbmcgZm9yIGlzIHJldHJpZXZlZCB1c2luZwotOmNmdW5jOmBQeU9iamVjdF9HZXRBdHRyU3RyaW5nYC4gIElmIHRoZSBuYW1lIGV4aXN0cywgYW5kIHRoZSBvYmplY3QgcmV0dXJuZWQgaXMKKzpjOmZ1bmM6YFB5T2JqZWN0X0dldEF0dHJTdHJpbmdgLiAgSWYgdGhlIG5hbWUgZXhpc3RzLCBhbmQgdGhlIG9iamVjdCByZXR1cm5lZCBpcwogY2FsbGFibGUsIHlvdSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGl0IGlzIGEgZnVuY3Rpb24uICBUaGUgcHJvZ3JhbSB0aGVuCiBwcm9jZWVkcyBieSBjb25zdHJ1Y3RpbmcgYSB0dXBsZSBvZiBhcmd1bWVudHMgYXMgbm9ybWFsLiAgVGhlIGNhbGwgdG8gdGhlIFB5dGhvbgogZnVuY3Rpb24gaXMgdGhlbiBtYWRlIHdpdGg6OgpAQCAtMjI5LDggKzIyNiw4IEBACiAgICAgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmRW1iTW9kdWxlKTsKICAgIH0KIAotSW5zZXJ0IHRoZSBhYm92ZSBjb2RlIGp1c3QgYWJvdmUgdGhlIDpjZnVuYzpgbWFpbmAgZnVuY3Rpb24uIEFsc28sIGluc2VydCB0aGUKLWZvbGxvd2luZyB0d28gc3RhdGVtZW50cyBiZWZvcmUgdGhlIGNhbGwgdG8gOmNmdW5jOmBQeV9Jbml0aWFsaXplYDo6CitJbnNlcnQgdGhlIGFib3ZlIGNvZGUganVzdCBhYm92ZSB0aGUgOmM6ZnVuYzpgbWFpbmAgZnVuY3Rpb24uIEFsc28sIGluc2VydCB0aGUKK2ZvbGxvd2luZyB0d28gc3RhdGVtZW50cyBiZWZvcmUgdGhlIGNhbGwgdG8gOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZWA6OgogCiAgICBudW1hcmdzID0gYXJnYzsKICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoImVtYiIsICZQeUluaXRfZW1iKTsKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAppbmRleCA2OGRjOWQ2Li5jNGNlZDFhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CkBAIC0yMCw2ICsyMCwxMyBAQAogVGhlIGNvbXBpbGF0aW9uIG9mIGFuIGV4dGVuc2lvbiBtb2R1bGUgZGVwZW5kcyBvbiBpdHMgaW50ZW5kZWQgdXNlIGFzIHdlbGwgYXMgb24KIHlvdXIgc3lzdGVtIHNldHVwOyBkZXRhaWxzIGFyZSBnaXZlbiBpbiBsYXRlciBjaGFwdGVycy4KIAorRG8gbm90ZSB0aGF0IGlmIHlvdXIgdXNlIGNhc2UgaXMgY2FsbGluZyBDIGxpYnJhcnkgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscywKK3lvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIHJhdGhlciB0aGFuIHdyaXRpbmcgY3VzdG9tCitDIGNvZGUuIE5vdCBvbmx5IGRvZXMgOm1vZDpgY3R5cGVzYCBsZXQgeW91IHdyaXRlIFB5dGhvbiBjb2RlIHRvIGludGVyZmFjZQord2l0aCBDIGNvZGUsIGJ1dCBpdCBpcyBtb3JlIHBvcnRhYmxlIGJldHdlZW4gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB0aGFuCit3cml0aW5nIGFuZCBjb21waWxpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSB3aGljaCB0eXBpY2FsbHkgdGllcyB5b3UgdG8gQ1B5dGhvbi4KKworCiAKIC4uIF9leHRlbmRpbmctc2ltcGxlZXhhbXBsZToKIApAQCAtMjgsNyArMzUsNyBAQAogCiBMZXQncyBjcmVhdGUgYW4gZXh0ZW5zaW9uIG1vZHVsZSBjYWxsZWQgYGBzcGFtYGAgKHRoZSBmYXZvcml0ZSBmb29kIG9mIE1vbnR5CiBQeXRob24gZmFucy4uLikgYW5kIGxldCdzIHNheSB3ZSB3YW50IHRvIGNyZWF0ZSBhIFB5dGhvbiBpbnRlcmZhY2UgdG8gdGhlIEMKLWxpYnJhcnkgZnVuY3Rpb24gOmNmdW5jOmBzeXN0ZW1gLiBbI11fIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBudWxsLXRlcm1pbmF0ZWQKK2xpYnJhcnkgZnVuY3Rpb24gOmM6ZnVuYzpgc3lzdGVtYC4gWyNdXyBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgbnVsbC10ZXJtaW5hdGVkCiBjaGFyYWN0ZXIgc3RyaW5nIGFzIGFyZ3VtZW50IGFuZCByZXR1cm5zIGFuIGludGVnZXIuICBXZSB3YW50IHRoaXMgZnVuY3Rpb24gdG8KIGJlIGNhbGxhYmxlIGZyb20gUHl0aG9uIGFzIGZvbGxvd3M6OgogCkBAIC01OCw4ICs2NSw4IEBACiBzaW5jZSB0aGV5IGFyZSB1c2VkIGV4dGVuc2l2ZWx5IGJ5IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIsIGBgIlB5dGhvbi5oImBgCiBpbmNsdWRlcyBhIGZldyBzdGFuZGFyZCBoZWFkZXIgZmlsZXM6IGBgPHN0ZGlvLmg+YGAsIGBgPHN0cmluZy5oPmBgLAogYGA8ZXJybm8uaD5gYCwgYW5kIGBgPHN0ZGxpYi5oPmBgLiAgSWYgdGhlIGxhdHRlciBoZWFkZXIgZmlsZSBkb2VzIG5vdCBleGlzdCBvbgoteW91ciBzeXN0ZW0sIGl0IGRlY2xhcmVzIHRoZSBmdW5jdGlvbnMgOmNmdW5jOmBtYWxsb2NgLCA6Y2Z1bmM6YGZyZWVgIGFuZAotOmNmdW5jOmByZWFsbG9jYCBkaXJlY3RseS4KK3lvdXIgc3lzdGVtLCBpdCBkZWNsYXJlcyB0aGUgZnVuY3Rpb25zIDpjOmZ1bmM6YG1hbGxvY2AsIDpjOmZ1bmM6YGZyZWVgIGFuZAorOmM6ZnVuYzpgcmVhbGxvY2AgZGlyZWN0bHkuCiAKIFRoZSBuZXh0IHRoaW5nIHdlIGFkZCB0byBvdXIgbW9kdWxlIGZpbGUgaXMgdGhlIEMgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZAogd2hlbiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBzcGFtLnN5c3RlbShzdHJpbmcpYGAgaXMgZXZhbHVhdGVkICh3ZSdsbCBzZWUKQEAgLTg5LDEyICs5NiwxMiBAQAogYXJndW1lbnRzLiAgRWFjaCBpdGVtIG9mIHRoZSB0dXBsZSBjb3JyZXNwb25kcyB0byBhbiBhcmd1bWVudCBpbiB0aGUgY2FsbCdzCiBhcmd1bWVudCBsaXN0LiAgVGhlIGFyZ3VtZW50cyBhcmUgUHl0aG9uIG9iamVjdHMgLS0tIGluIG9yZGVyIHRvIGRvIGFueXRoaW5nCiB3aXRoIHRoZW0gaW4gb3VyIEMgZnVuY3Rpb24gd2UgaGF2ZSB0byBjb252ZXJ0IHRoZW0gdG8gQyB2YWx1ZXMuICBUaGUgZnVuY3Rpb24KLTpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgaW4gdGhlIFB5dGhvbiBBUEkgY2hlY2tzIHRoZSBhcmd1bWVudCB0eXBlcyBhbmQKKzpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGluIHRoZSBQeXRob24gQVBJIGNoZWNrcyB0aGUgYXJndW1lbnQgdHlwZXMgYW5kCiBjb252ZXJ0cyB0aGVtIHRvIEMgdmFsdWVzLiAgSXQgdXNlcyBhIHRlbXBsYXRlIHN0cmluZyB0byBkZXRlcm1pbmUgdGhlIHJlcXVpcmVkCiB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIGFzIHdlbGwgYXMgdGhlIHR5cGVzIG9mIHRoZSBDIHZhcmlhYmxlcyBpbnRvIHdoaWNoIHRvCiBzdG9yZSB0aGUgY29udmVydGVkIHZhbHVlcy4gIE1vcmUgYWJvdXQgdGhpcyBsYXRlci4KIAotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCByZXR1cm5zIHRydWUgKG5vbnplcm8pIGlmIGFsbCBhcmd1bWVudHMgaGF2ZSB0aGUgcmlnaHQKKzpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHJldHVybnMgdHJ1ZSAobm9uemVybykgaWYgYWxsIGFyZ3VtZW50cyBoYXZlIHRoZSByaWdodAogdHlwZSBhbmQgaXRzIGNvbXBvbmVudHMgaGF2ZSBiZWVuIHN0b3JlZCBpbiB0aGUgdmFyaWFibGVzIHdob3NlIGFkZHJlc3NlcyBhcmUKIHBhc3NlZC4gIEl0IHJldHVybnMgZmFsc2UgKHplcm8pIGlmIGFuIGludmFsaWQgYXJndW1lbnQgbGlzdCB3YXMgcGFzc2VkLiAgSW4gdGhlCiBsYXR0ZXIgY2FzZSBpdCBhbHNvIHJhaXNlcyBhbiBhcHByb3ByaWF0ZSBleGNlcHRpb24gc28gdGhlIGNhbGxpbmcgZnVuY3Rpb24gY2FuCkBAIC0xMTksNzcgKzEyNiw3NyBAQAogCiBUaGUgUHl0aG9uIEFQSSBkZWZpbmVzIGEgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0byBzZXQgdmFyaW91cyB0eXBlcyBvZiBleGNlcHRpb25zLgogCi1UaGUgbW9zdCBjb21tb24gb25lIGlzIDpjZnVuYzpgUHlFcnJfU2V0U3RyaW5nYC4gIEl0cyBhcmd1bWVudHMgYXJlIGFuIGV4Y2VwdGlvbgorVGhlIG1vc3QgY29tbW9uIG9uZSBpcyA6YzpmdW5jOmBQeUVycl9TZXRTdHJpbmdgLiAgSXRzIGFyZ3VtZW50cyBhcmUgYW4gZXhjZXB0aW9uCiBvYmplY3QgYW5kIGEgQyBzdHJpbmcuICBUaGUgZXhjZXB0aW9uIG9iamVjdCBpcyB1c3VhbGx5IGEgcHJlZGVmaW5lZCBvYmplY3QgbGlrZQotOmNkYXRhOmBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcmAuICBUaGUgQyBzdHJpbmcgaW5kaWNhdGVzIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IKKzpjOmRhdGE6YFB5RXhjX1plcm9EaXZpc2lvbkVycm9yYC4gIFRoZSBDIHN0cmluZyBpbmRpY2F0ZXMgdGhlIGNhdXNlIG9mIHRoZSBlcnJvcgogYW5kIGlzIGNvbnZlcnRlZCB0byBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0IGFuZCBzdG9yZWQgYXMgdGhlICJhc3NvY2lhdGVkIHZhbHVlIgogb2YgdGhlIGV4Y2VwdGlvbi4KIAotQW5vdGhlciB1c2VmdWwgZnVuY3Rpb24gaXMgOmNmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9gLCB3aGljaCBvbmx5IHRha2VzIGFuCitBbm90aGVyIHVzZWZ1bCBmdW5jdGlvbiBpcyA6YzpmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9gLCB3aGljaCBvbmx5IHRha2VzIGFuCiBleGNlcHRpb24gYXJndW1lbnQgYW5kIGNvbnN0cnVjdHMgdGhlIGFzc29jaWF0ZWQgdmFsdWUgYnkgaW5zcGVjdGlvbiBvZiB0aGUKLWdsb2JhbCB2YXJpYWJsZSA6Y2RhdGE6YGVycm5vYC4gIFRoZSBtb3N0IGdlbmVyYWwgZnVuY3Rpb24gaXMKLTpjZnVuYzpgUHlFcnJfU2V0T2JqZWN0YCwgd2hpY2ggdGFrZXMgdHdvIG9iamVjdCBhcmd1bWVudHMsIHRoZSBleGNlcHRpb24gYW5kCi1pdHMgYXNzb2NpYXRlZCB2YWx1ZS4gIFlvdSBkb24ndCBuZWVkIHRvIDpjZnVuYzpgUHlfSU5DUkVGYCB0aGUgb2JqZWN0cyBwYXNzZWQKK2dsb2JhbCB2YXJpYWJsZSA6YzpkYXRhOmBlcnJub2AuICBUaGUgbW9zdCBnZW5lcmFsIGZ1bmN0aW9uIGlzCis6YzpmdW5jOmBQeUVycl9TZXRPYmplY3RgLCB3aGljaCB0YWtlcyB0d28gb2JqZWN0IGFyZ3VtZW50cywgdGhlIGV4Y2VwdGlvbiBhbmQKK2l0cyBhc3NvY2lhdGVkIHZhbHVlLiAgWW91IGRvbid0IG5lZWQgdG8gOmM6ZnVuYzpgUHlfSU5DUkVGYCB0aGUgb2JqZWN0cyBwYXNzZWQKIHRvIGFueSBvZiB0aGVzZSBmdW5jdGlvbnMuCiAKIFlvdSBjYW4gdGVzdCBub24tZGVzdHJ1Y3RpdmVseSB3aGV0aGVyIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBzZXQgd2l0aAotOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAuICBUaGlzIHJldHVybnMgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIG9iamVjdCwgb3IgKk5VTEwqCis6YzpmdW5jOmBQeUVycl9PY2N1cnJlZGAuICBUaGlzIHJldHVybnMgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIG9iamVjdCwgb3IgKk5VTEwqCiBpZiBubyBleGNlcHRpb24gaGFzIG9jY3VycmVkLiAgWW91IG5vcm1hbGx5IGRvbid0IG5lZWQgdG8gY2FsbAotOmNmdW5jOmBQeUVycl9PY2N1cnJlZGAgdG8gc2VlIHdoZXRoZXIgYW4gZXJyb3Igb2NjdXJyZWQgaW4gYSBmdW5jdGlvbiBjYWxsLAorOmM6ZnVuYzpgUHlFcnJfT2NjdXJyZWRgIHRvIHNlZSB3aGV0aGVyIGFuIGVycm9yIG9jY3VycmVkIGluIGEgZnVuY3Rpb24gY2FsbCwKIHNpbmNlIHlvdSBzaG91bGQgYmUgYWJsZSB0byB0ZWxsIGZyb20gdGhlIHJldHVybiB2YWx1ZS4KIAogV2hlbiBhIGZ1bmN0aW9uICpmKiB0aGF0IGNhbGxzIGFub3RoZXIgZnVuY3Rpb24gKmcqIGRldGVjdHMgdGhhdCB0aGUgbGF0dGVyCiBmYWlscywgKmYqIHNob3VsZCBpdHNlbGYgcmV0dXJuIGFuIGVycm9yIHZhbHVlICh1c3VhbGx5ICpOVUxMKiBvciBgYC0xYGApLiAgSXQKLXNob3VsZCAqbm90KiBjYWxsIG9uZSBvZiB0aGUgOmNmdW5jOmBQeUVycl9cKmAgZnVuY3Rpb25zIC0tLSBvbmUgaGFzIGFscmVhZHkKK3Nob3VsZCAqbm90KiBjYWxsIG9uZSBvZiB0aGUgOmM6ZnVuYzpgUHlFcnJfXCpgIGZ1bmN0aW9ucyAtLS0gb25lIGhhcyBhbHJlYWR5CiBiZWVuIGNhbGxlZCBieSAqZyouICpmKidzIGNhbGxlciBpcyB0aGVuIHN1cHBvc2VkIHRvIGFsc28gcmV0dXJuIGFuIGVycm9yCi1pbmRpY2F0aW9uIHRvICppdHMqIGNhbGxlciwgYWdhaW4gKndpdGhvdXQqIGNhbGxpbmcgOmNmdW5jOmBQeUVycl9cKmAsIGFuZCBzbyBvbgoraW5kaWNhdGlvbiB0byAqaXRzKiBjYWxsZXIsIGFnYWluICp3aXRob3V0KiBjYWxsaW5nIDpjOmZ1bmM6YFB5RXJyX1wqYCwgYW5kIHNvIG9uCiAtLS0gdGhlIG1vc3QgZGV0YWlsZWQgY2F1c2Ugb2YgdGhlIGVycm9yIHdhcyBhbHJlYWR5IHJlcG9ydGVkIGJ5IHRoZSBmdW5jdGlvbgogdGhhdCBmaXJzdCBkZXRlY3RlZCBpdC4gIE9uY2UgdGhlIGVycm9yIHJlYWNoZXMgdGhlIFB5dGhvbiBpbnRlcnByZXRlcidzIG1haW4KIGxvb3AsIHRoaXMgYWJvcnRzIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIFB5dGhvbiBjb2RlIGFuZCB0cmllcyB0byBmaW5kIGFuCiBleGNlcHRpb24gaGFuZGxlciBzcGVjaWZpZWQgYnkgdGhlIFB5dGhvbiBwcm9ncmFtbWVyLgogCiAoVGhlcmUgYXJlIHNpdHVhdGlvbnMgd2hlcmUgYSBtb2R1bGUgY2FuIGFjdHVhbGx5IGdpdmUgYSBtb3JlIGRldGFpbGVkIGVycm9yCi1tZXNzYWdlIGJ5IGNhbGxpbmcgYW5vdGhlciA6Y2Z1bmM6YFB5RXJyX1wqYCBmdW5jdGlvbiwgYW5kIGluIHN1Y2ggY2FzZXMgaXQgaXMKK21lc3NhZ2UgYnkgY2FsbGluZyBhbm90aGVyIDpjOmZ1bmM6YFB5RXJyX1wqYCBmdW5jdGlvbiwgYW5kIGluIHN1Y2ggY2FzZXMgaXQgaXMKIGZpbmUgdG8gZG8gc28uICBBcyBhIGdlbmVyYWwgcnVsZSwgaG93ZXZlciwgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBhbmQgY2FuIGNhdXNlCiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIHRvIGJlIGxvc3Q6IG1vc3Qgb3BlcmF0aW9ucyBjYW4gZmFpbAogZm9yIGEgdmFyaWV0eSBvZiByZWFzb25zLikKIAogVG8gaWdub3JlIGFuIGV4Y2VwdGlvbiBzZXQgYnkgYSBmdW5jdGlvbiBjYWxsIHRoYXQgZmFpbGVkLCB0aGUgZXhjZXB0aW9uCi1jb25kaXRpb24gbXVzdCBiZSBjbGVhcmVkIGV4cGxpY2l0bHkgYnkgY2FsbGluZyA6Y2Z1bmM6YFB5RXJyX0NsZWFyYC4gIFRoZSBvbmx5Ci10aW1lIEMgY29kZSBzaG91bGQgY2FsbCA6Y2Z1bmM6YFB5RXJyX0NsZWFyYCBpcyBpZiBpdCBkb2Vzbid0IHdhbnQgdG8gcGFzcyB0aGUKK2NvbmRpdGlvbiBtdXN0IGJlIGNsZWFyZWQgZXhwbGljaXRseSBieSBjYWxsaW5nIDpjOmZ1bmM6YFB5RXJyX0NsZWFyYC4gIFRoZSBvbmx5Cit0aW1lIEMgY29kZSBzaG91bGQgY2FsbCA6YzpmdW5jOmBQeUVycl9DbGVhcmAgaXMgaWYgaXQgZG9lc24ndCB3YW50IHRvIHBhc3MgdGhlCiBlcnJvciBvbiB0byB0aGUgaW50ZXJwcmV0ZXIgYnV0IHdhbnRzIHRvIGhhbmRsZSBpdCBjb21wbGV0ZWx5IGJ5IGl0c2VsZgogKHBvc3NpYmx5IGJ5IHRyeWluZyBzb21ldGhpbmcgZWxzZSwgb3IgcHJldGVuZGluZyBub3RoaW5nIHdlbnQgd3JvbmcpLgogCi1FdmVyeSBmYWlsaW5nIDpjZnVuYzpgbWFsbG9jYCBjYWxsIG11c3QgYmUgdHVybmVkIGludG8gYW4gZXhjZXB0aW9uIC0tLSB0aGUKLWRpcmVjdCBjYWxsZXIgb2YgOmNmdW5jOmBtYWxsb2NgIChvciA6Y2Z1bmM6YHJlYWxsb2NgKSBtdXN0IGNhbGwKLTpjZnVuYzpgUHlFcnJfTm9NZW1vcnlgIGFuZCByZXR1cm4gYSBmYWlsdXJlIGluZGljYXRvciBpdHNlbGYuICBBbGwgdGhlCi1vYmplY3QtY3JlYXRpbmcgZnVuY3Rpb25zIChmb3IgZXhhbXBsZSwgOmNmdW5jOmBQeUxvbmdfRnJvbUxvbmdgKSBhbHJlYWR5IGRvCi10aGlzLCBzbyB0aGlzIG5vdGUgaXMgb25seSByZWxldmFudCB0byB0aG9zZSB3aG8gY2FsbCA6Y2Z1bmM6YG1hbGxvY2AgZGlyZWN0bHkuCitFdmVyeSBmYWlsaW5nIDpjOmZ1bmM6YG1hbGxvY2AgY2FsbCBtdXN0IGJlIHR1cm5lZCBpbnRvIGFuIGV4Y2VwdGlvbiAtLS0gdGhlCitkaXJlY3QgY2FsbGVyIG9mIDpjOmZ1bmM6YG1hbGxvY2AgKG9yIDpjOmZ1bmM6YHJlYWxsb2NgKSBtdXN0IGNhbGwKKzpjOmZ1bmM6YFB5RXJyX05vTWVtb3J5YCBhbmQgcmV0dXJuIGEgZmFpbHVyZSBpbmRpY2F0b3IgaXRzZWxmLiAgQWxsIHRoZQorb2JqZWN0LWNyZWF0aW5nIGZ1bmN0aW9ucyAoZm9yIGV4YW1wbGUsIDpjOmZ1bmM6YFB5TG9uZ19Gcm9tTG9uZ2ApIGFscmVhZHkgZG8KK3RoaXMsIHNvIHRoaXMgbm90ZSBpcyBvbmx5IHJlbGV2YW50IHRvIHRob3NlIHdobyBjYWxsIDpjOmZ1bmM6YG1hbGxvY2AgZGlyZWN0bHkuCiAKLUFsc28gbm90ZSB0aGF0LCB3aXRoIHRoZSBpbXBvcnRhbnQgZXhjZXB0aW9uIG9mIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgYW5kCitBbHNvIG5vdGUgdGhhdCwgd2l0aCB0aGUgaW1wb3J0YW50IGV4Y2VwdGlvbiBvZiA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBhbmQKIGZyaWVuZHMsIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhbiBpbnRlZ2VyIHN0YXR1cyB1c3VhbGx5IHJldHVybiBhIHBvc2l0aXZlIHZhbHVlCiBvciB6ZXJvIGZvciBzdWNjZXNzIGFuZCBgYC0xYGAgZm9yIGZhaWx1cmUsIGxpa2UgVW5peCBzeXN0ZW0gY2FsbHMuCiAKLUZpbmFsbHksIGJlIGNhcmVmdWwgdG8gY2xlYW4gdXAgZ2FyYmFnZSAoYnkgbWFraW5nIDpjZnVuYzpgUHlfWERFQ1JFRmAgb3IKLTpjZnVuYzpgUHlfREVDUkVGYCBjYWxscyBmb3Igb2JqZWN0cyB5b3UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQpIHdoZW4geW91IHJldHVybgorRmluYWxseSwgYmUgY2FyZWZ1bCB0byBjbGVhbiB1cCBnYXJiYWdlIChieSBtYWtpbmcgOmM6ZnVuYzpgUHlfWERFQ1JFRmAgb3IKKzpjOmZ1bmM6YFB5X0RFQ1JFRmAgY2FsbHMgZm9yIG9iamVjdHMgeW91IGhhdmUgYWxyZWFkeSBjcmVhdGVkKSB3aGVuIHlvdSByZXR1cm4KIGFuIGVycm9yIGluZGljYXRvciEKIAogVGhlIGNob2ljZSBvZiB3aGljaCBleGNlcHRpb24gdG8gcmFpc2UgaXMgZW50aXJlbHkgeW91cnMuICBUaGVyZSBhcmUgcHJlZGVjbGFyZWQKIEMgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIGFsbCBidWlsdC1pbiBQeXRob24gZXhjZXB0aW9ucywgc3VjaCBhcwotOmNkYXRhOmBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcmAsIHdoaWNoIHlvdSBjYW4gdXNlIGRpcmVjdGx5LiBPZiBjb3Vyc2UsIHlvdQotc2hvdWxkIGNob29zZSBleGNlcHRpb25zIHdpc2VseSAtLS0gZG9uJ3QgdXNlIDpjZGF0YTpgUHlFeGNfVHlwZUVycm9yYCB0byBtZWFuCi10aGF0IGEgZmlsZSBjb3VsZG4ndCBiZSBvcGVuZWQgKHRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIDpjZGF0YTpgUHlFeGNfSU9FcnJvcmApLgotSWYgc29tZXRoaW5nJ3Mgd3Jvbmcgd2l0aCB0aGUgYXJndW1lbnQgbGlzdCwgdGhlIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKLWZ1bmN0aW9uIHVzdWFsbHkgcmFpc2VzIDpjZGF0YTpgUHlFeGNfVHlwZUVycm9yYC4gIElmIHlvdSBoYXZlIGFuIGFyZ3VtZW50IHdob3NlCis6YzpkYXRhOmBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcmAsIHdoaWNoIHlvdSBjYW4gdXNlIGRpcmVjdGx5LiBPZiBjb3Vyc2UsIHlvdQorc2hvdWxkIGNob29zZSBleGNlcHRpb25zIHdpc2VseSAtLS0gZG9uJ3QgdXNlIDpjOmRhdGE6YFB5RXhjX1R5cGVFcnJvcmAgdG8gbWVhbgordGhhdCBhIGZpbGUgY291bGRuJ3QgYmUgb3BlbmVkICh0aGF0IHNob3VsZCBwcm9iYWJseSBiZSA6YzpkYXRhOmBQeUV4Y19JT0Vycm9yYCkuCitJZiBzb21ldGhpbmcncyB3cm9uZyB3aXRoIHRoZSBhcmd1bWVudCBsaXN0LCB0aGUgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAKK2Z1bmN0aW9uIHVzdWFsbHkgcmFpc2VzIDpjOmRhdGE6YFB5RXhjX1R5cGVFcnJvcmAuICBJZiB5b3UgaGF2ZSBhbiBhcmd1bWVudCB3aG9zZQogdmFsdWUgbXVzdCBiZSBpbiBhIHBhcnRpY3VsYXIgcmFuZ2Ugb3IgbXVzdCBzYXRpc2Z5IG90aGVyIGNvbmRpdGlvbnMsCi06Y2RhdGE6YFB5RXhjX1ZhbHVlRXJyb3JgIGlzIGFwcHJvcHJpYXRlLgorOmM6ZGF0YTpgUHlFeGNfVmFsdWVFcnJvcmAgaXMgYXBwcm9wcmlhdGUuCiAKIFlvdSBjYW4gYWxzbyBkZWZpbmUgYSBuZXcgZXhjZXB0aW9uIHRoYXQgaXMgdW5pcXVlIHRvIHlvdXIgbW9kdWxlLiBGb3IgdGhpcywgeW91CiB1c3VhbGx5IGRlY2xhcmUgYSBzdGF0aWMgb2JqZWN0IHZhcmlhYmxlIGF0IHRoZSBiZWdpbm5pbmcgb2YgeW91ciBmaWxlOjoKIAogICAgc3RhdGljIFB5T2JqZWN0ICpTcGFtRXJyb3I7CiAKLWFuZCBpbml0aWFsaXplIGl0IGluIHlvdXIgbW9kdWxlJ3MgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKDpjZnVuYzpgUHlJbml0X3NwYW1gKQorYW5kIGluaXRpYWxpemUgaXQgaW4geW91ciBtb2R1bGUncyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoOmM6ZnVuYzpgUHlJbml0X3NwYW1gKQogd2l0aCBhbiBleGNlcHRpb24gb2JqZWN0IChsZWF2aW5nIG91dCB0aGUgZXJyb3IgY2hlY2tpbmcgZm9yIG5vdyk6OgogCiAgICBQeU1PRElOSVRfRlVOQwpAQCAtMjA4LDE0ICsyMTUsMTQgQEAKICAgIH0KIAogTm90ZSB0aGF0IHRoZSBQeXRob24gbmFtZSBmb3IgdGhlIGV4Y2VwdGlvbiBvYmplY3QgaXMgOmV4Yzpgc3BhbS5lcnJvcmAuICBUaGUKLTpjZnVuYzpgUHlFcnJfTmV3RXhjZXB0aW9uYCBmdW5jdGlvbiBtYXkgY3JlYXRlIGEgY2xhc3Mgd2l0aCB0aGUgYmFzZSBjbGFzcworOmM6ZnVuYzpgUHlFcnJfTmV3RXhjZXB0aW9uYCBmdW5jdGlvbiBtYXkgY3JlYXRlIGEgY2xhc3Mgd2l0aCB0aGUgYmFzZSBjbGFzcwogYmVpbmcgOmV4YzpgRXhjZXB0aW9uYCAodW5sZXNzIGFub3RoZXIgY2xhc3MgaXMgcGFzc2VkIGluIGluc3RlYWQgb2YgKk5VTEwqKSwKIGRlc2NyaWJlZCBpbiA6cmVmOmBibHRpbi1leGNlcHRpb25zYC4KIAotTm90ZSBhbHNvIHRoYXQgdGhlIDpjZGF0YTpgU3BhbUVycm9yYCB2YXJpYWJsZSByZXRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBuZXdseQorTm90ZSBhbHNvIHRoYXQgdGhlIDpjOmRhdGE6YFNwYW1FcnJvcmAgdmFyaWFibGUgcmV0YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgbmV3bHkKIGNyZWF0ZWQgZXhjZXB0aW9uIGNsYXNzOyB0aGlzIGlzIGludGVudGlvbmFsISAgU2luY2UgdGhlIGV4Y2VwdGlvbiBjb3VsZCBiZQogcmVtb3ZlZCBmcm9tIHRoZSBtb2R1bGUgYnkgZXh0ZXJuYWwgY29kZSwgYW4gb3duZWQgcmVmZXJlbmNlIHRvIHRoZSBjbGFzcyBpcwotbmVlZGVkIHRvIGVuc3VyZSB0aGF0IGl0IHdpbGwgbm90IGJlIGRpc2NhcmRlZCwgY2F1c2luZyA6Y2RhdGE6YFNwYW1FcnJvcmAgdG8KK25lZWRlZCB0byBlbnN1cmUgdGhhdCBpdCB3aWxsIG5vdCBiZSBkaXNjYXJkZWQsIGNhdXNpbmcgOmM6ZGF0YTpgU3BhbUVycm9yYCB0bwogYmVjb21lIGEgZGFuZ2xpbmcgcG9pbnRlci4gU2hvdWxkIGl0IGJlY29tZSBhIGRhbmdsaW5nIHBvaW50ZXIsIEMgY29kZSB3aGljaAogcmFpc2VzIHRoZSBleGNlcHRpb24gY291bGQgY2F1c2UgYSBjb3JlIGR1bXAgb3Igb3RoZXIgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuCiAKQEAgLTIyMyw3ICsyMzAsNyBAQAogc2FtcGxlLgogCiBUaGUgOmV4Yzpgc3BhbS5lcnJvcmAgZXhjZXB0aW9uIGNhbiBiZSByYWlzZWQgaW4geW91ciBleHRlbnNpb24gbW9kdWxlIHVzaW5nIGEKLWNhbGwgdG8gOmNmdW5jOmBQeUVycl9TZXRTdHJpbmdgIGFzIHNob3duIGJlbG93OjoKK2NhbGwgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0U3RyaW5nYCBhcyBzaG93biBiZWxvdzo6CiAKICAgIHN0YXRpYyBQeU9iamVjdCAqCiAgICBzcGFtX3N5c3RlbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0yNTUsMTkgKzI2MiwxOSBAQAogCiBJdCByZXR1cm5zICpOVUxMKiAodGhlIGVycm9yIGluZGljYXRvciBmb3IgZnVuY3Rpb25zIHJldHVybmluZyBvYmplY3QgcG9pbnRlcnMpCiBpZiBhbiBlcnJvciBpcyBkZXRlY3RlZCBpbiB0aGUgYXJndW1lbnQgbGlzdCwgcmVseWluZyBvbiB0aGUgZXhjZXB0aW9uIHNldCBieQotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYC4gIE90aGVyd2lzZSB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBhcmd1bWVudCBoYXMgYmVlbgotY29waWVkIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSA6Y2RhdGE6YGNvbW1hbmRgLiAgVGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBhbmQKKzpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgT3RoZXJ3aXNlIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IGhhcyBiZWVuCitjb3BpZWQgdG8gdGhlIGxvY2FsIHZhcmlhYmxlIDpjOmRhdGE6YGNvbW1hbmRgLiAgVGhpcyBpcyBhIHBvaW50ZXIgYXNzaWdubWVudCBhbmQKIHlvdSBhcmUgbm90IHN1cHBvc2VkIHRvIG1vZGlmeSB0aGUgc3RyaW5nIHRvIHdoaWNoIGl0IHBvaW50cyAoc28gaW4gU3RhbmRhcmQgQywKLXRoZSB2YXJpYWJsZSA6Y2RhdGE6YGNvbW1hbmRgIHNob3VsZCBwcm9wZXJseSBiZSBkZWNsYXJlZCBhcyBgYGNvbnN0IGNoYXIKK3RoZSB2YXJpYWJsZSA6YzpkYXRhOmBjb21tYW5kYCBzaG91bGQgcHJvcGVybHkgYmUgZGVjbGFyZWQgYXMgYGBjb25zdCBjaGFyCiAqY29tbWFuZGBgKS4KIAotVGhlIG5leHQgc3RhdGVtZW50IGlzIGEgY2FsbCB0byB0aGUgVW5peCBmdW5jdGlvbiA6Y2Z1bmM6YHN5c3RlbWAsIHBhc3NpbmcgaXQKLXRoZSBzdHJpbmcgd2UganVzdCBnb3QgZnJvbSA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOjoKK1RoZSBuZXh0IHN0YXRlbWVudCBpcyBhIGNhbGwgdG8gdGhlIFVuaXggZnVuY3Rpb24gOmM6ZnVuYzpgc3lzdGVtYCwgcGFzc2luZyBpdAordGhlIHN0cmluZyB3ZSBqdXN0IGdvdCBmcm9tIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOjoKIAogICAgc3RzID0gc3lzdGVtKGNvbW1hbmQpOwogCi1PdXIgOmZ1bmM6YHNwYW0uc3lzdGVtYCBmdW5jdGlvbiBtdXN0IHJldHVybiB0aGUgdmFsdWUgb2YgOmNkYXRhOmBzdHNgIGFzIGEKLVB5dGhvbiBvYmplY3QuICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIGZ1bmN0aW9uIDpjZnVuYzpgUHlMb25nX0Zyb21Mb25nYC4gOjoKK091ciA6ZnVuYzpgc3BhbS5zeXN0ZW1gIGZ1bmN0aW9uIG11c3QgcmV0dXJuIHRoZSB2YWx1ZSBvZiA6YzpkYXRhOmBzdHNgIGFzIGEKK1B5dGhvbiBvYmplY3QuICBUaGlzIGlzIGRvbmUgdXNpbmcgdGhlIGZ1bmN0aW9uIDpjOmZ1bmM6YFB5TG9uZ19Gcm9tTG9uZ2AuIDo6CiAKICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc3RzKTsKIApAQCAtMjc1LDE0ICsyODIsMTQgQEAKIG9uIHRoZSBoZWFwIGluIFB5dGhvbiEpCiAKIElmIHlvdSBoYXZlIGEgQyBmdW5jdGlvbiB0aGF0IHJldHVybnMgbm8gdXNlZnVsIGFyZ3VtZW50IChhIGZ1bmN0aW9uIHJldHVybmluZwotOmN0eXBlOmB2b2lkYCksIHRoZSBjb3JyZXNwb25kaW5nIFB5dGhvbiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYC4gICBZb3UKLW5lZWQgdGhpcyBpZGlvbSB0byBkbyBzbyAod2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgdGhlIDpjbWFjcm86YFB5X1JFVFVSTl9OT05FYAorOmM6dHlwZTpgdm9pZGApLCB0aGUgY29ycmVzcG9uZGluZyBQeXRob24gZnVuY3Rpb24gbXVzdCByZXR1cm4gYGBOb25lYGAuICAgWW91CituZWVkIHRoaXMgaWRpb20gdG8gZG8gc28gKHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHRoZSA6YzptYWNybzpgUHlfUkVUVVJOX05PTkVgCiBtYWNybyk6OgogCiAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICByZXR1cm4gUHlfTm9uZTsKIAotOmNkYXRhOmBQeV9Ob25lYCBpcyB0aGUgQyBuYW1lIGZvciB0aGUgc3BlY2lhbCBQeXRob24gb2JqZWN0IGBgTm9uZWBgLiAgSXQgaXMgYQorOmM6ZGF0YTpgUHlfTm9uZWAgaXMgdGhlIEMgbmFtZSBmb3IgdGhlIHNwZWNpYWwgUHl0aG9uIG9iamVjdCBgYE5vbmVgYC4gIEl0IGlzIGEKIGdlbnVpbmUgUHl0aG9uIG9iamVjdCByYXRoZXIgdGhhbiBhICpOVUxMKiBwb2ludGVyLCB3aGljaCBtZWFucyAiZXJyb3IiIGluIG1vc3QKIGNvbnRleHRzLCBhcyB3ZSBoYXZlIHNlZW4uCiAKQEAgLTI5Miw3ICsyOTksNyBAQAogVGhlIE1vZHVsZSdzIE1ldGhvZCBUYWJsZSBhbmQgSW5pdGlhbGl6YXRpb24gRnVuY3Rpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUkgcHJvbWlzZWQgdG8gc2hvdyBob3cgOmNmdW5jOmBzcGFtX3N5c3RlbWAgaXMgY2FsbGVkIGZyb20gUHl0aG9uIHByb2dyYW1zLgorSSBwcm9taXNlZCB0byBzaG93IGhvdyA6YzpmdW5jOmBzcGFtX3N5c3RlbWAgaXMgY2FsbGVkIGZyb20gUHl0aG9uIHByb2dyYW1zLgogRmlyc3QsIHdlIG5lZWQgdG8gbGlzdCBpdHMgbmFtZSBhbmQgYWRkcmVzcyBpbiBhICJtZXRob2QgdGFibGUiOjoKIAogICAgc3RhdGljIFB5TWV0aG9kRGVmIFNwYW1NZXRob2RzW10gPSB7CkBAIC0zMDYsMTYgKzMxMywxNiBAQAogTm90ZSB0aGUgdGhpcmQgZW50cnkgKGBgTUVUSF9WQVJBUkdTYGApLiAgVGhpcyBpcyBhIGZsYWcgdGVsbGluZyB0aGUgaW50ZXJwcmV0ZXIKIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdG8gYmUgdXNlZCBmb3IgdGhlIEMgZnVuY3Rpb24uICBJdCBzaG91bGQgbm9ybWFsbHkgYWx3YXlzCiBiZSBgYE1FVEhfVkFSQVJHU2BgIG9yIGBgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU2BgOyBhIHZhbHVlIG9mIGBgMGBgIG1lYW5zCi10aGF0IGFuIG9ic29sZXRlIHZhcmlhbnQgb2YgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBpcyB1c2VkLgordGhhdCBhbiBvYnNvbGV0ZSB2YXJpYW50IG9mIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGlzIHVzZWQuCiAKIFdoZW4gdXNpbmcgb25seSBgYE1FVEhfVkFSQVJHU2BgLCB0aGUgZnVuY3Rpb24gc2hvdWxkIGV4cGVjdCB0aGUgUHl0aG9uLWxldmVsCiBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbiBhcyBhIHR1cGxlIGFjY2VwdGFibGUgZm9yIHBhcnNpbmcgdmlhCi06Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOyBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZWQgYmVsb3cuCis6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYDsgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGJlbG93LgogCiBUaGUgOmNvbnN0OmBNRVRIX0tFWVdPUkRTYCBiaXQgbWF5IGJlIHNldCBpbiB0aGUgdGhpcmQgZmllbGQgaWYga2V5d29yZAogYXJndW1lbnRzIHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLiAgSW4gdGhpcyBjYXNlLCB0aGUgQyBmdW5jdGlvbiBzaG91bGQKIGFjY2VwdCBhIHRoaXJkIGBgUHlPYmplY3QgXCpgYCBwYXJhbWV0ZXIgd2hpY2ggd2lsbCBiZSBhIGRpY3Rpb25hcnkgb2Yga2V5d29yZHMuCi1Vc2UgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHRvIHBhcnNlIHRoZSBhcmd1bWVudHMgdG8gc3VjaCBhCitVc2UgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCB0byBwYXJzZSB0aGUgYXJndW1lbnRzIHRvIHN1Y2ggYQogZnVuY3Rpb24uCiAKIFRoZSBtZXRob2QgdGFibGUgbXVzdCBiZSByZWZlcmVuY2VkIGluIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBzdHJ1Y3R1cmU6OgpAQCAtMzMxLDcgKzMzOCw3IEBACiAKIFRoaXMgc3RydWN0dXJlLCBpbiB0dXJuLCBtdXN0IGJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIgaW4gdGhlIG1vZHVsZSdzCiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIFRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBtdXN0IGJlIG5hbWVkCi06Y2Z1bmM6YFB5SW5pdF9uYW1lYCwgd2hlcmUgKm5hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUsIGFuZCBzaG91bGQgYmUgdGhlCis6YzpmdW5jOmBQeUluaXRfbmFtZWAsIHdoZXJlICpuYW1lKiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLCBhbmQgc2hvdWxkIGJlIHRoZQogb25seSBub24tXCBgYHN0YXRpY2BgIGl0ZW0gZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGZpbGU6OgogCiAgICBQeU1PRElOSVRfRlVOQwpAQCAtMzQ1LDI1ICszNTIsMjUgQEAKIGRlY2xhcmVzIHRoZSBmdW5jdGlvbiBhcyBgYGV4dGVybiAiQyJgYC4KIAogV2hlbiB0aGUgUHl0aG9uIHByb2dyYW0gaW1wb3J0cyBtb2R1bGUgOm1vZDpgc3BhbWAgZm9yIHRoZSBmaXJzdCB0aW1lLAotOmNmdW5jOmBQeUluaXRfc3BhbWAgaXMgY2FsbGVkLiAoU2VlIGJlbG93IGZvciBjb21tZW50cyBhYm91dCBlbWJlZGRpbmcgUHl0aG9uLikKLUl0IGNhbGxzIDpjZnVuYzpgUHlNb2R1bGVfQ3JlYXRlYCwgd2hpY2ggcmV0dXJucyBhIG1vZHVsZSBvYmplY3QsIGFuZAorOmM6ZnVuYzpgUHlJbml0X3NwYW1gIGlzIGNhbGxlZC4gKFNlZSBiZWxvdyBmb3IgY29tbWVudHMgYWJvdXQgZW1iZWRkaW5nIFB5dGhvbi4pCitJdCBjYWxscyA6YzpmdW5jOmBQeU1vZHVsZV9DcmVhdGVgLCB3aGljaCByZXR1cm5zIGEgbW9kdWxlIG9iamVjdCwgYW5kCiBpbnNlcnRzIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdHMgaW50byB0aGUgbmV3bHkgY3JlYXRlZCBtb2R1bGUgYmFzZWQgdXBvbiB0aGUKLXRhYmxlIChhbiBhcnJheSBvZiA6Y3R5cGU6YFB5TWV0aG9kRGVmYCBzdHJ1Y3R1cmVzKSBmb3VuZCBpbiB0aGUgbW9kdWxlIGRlZmluaXRpb24uCi06Y2Z1bmM6YFB5TW9kdWxlX0NyZWF0ZWAgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZSBvYmplY3QKK3RhYmxlIChhbiBhcnJheSBvZiA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlcykgZm91bmQgaW4gdGhlIG1vZHVsZSBkZWZpbml0aW9uLgorOmM6ZnVuYzpgUHlNb2R1bGVfQ3JlYXRlYCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbW9kdWxlIG9iamVjdAogdGhhdCBpdCBjcmVhdGVzLiAgSXQgbWF5IGFib3J0IHdpdGggYSBmYXRhbCBlcnJvciBmb3IKIGNlcnRhaW4gZXJyb3JzLCBvciByZXR1cm4gKk5VTEwqIGlmIHRoZSBtb2R1bGUgY291bGQgbm90IGJlIGluaXRpYWxpemVkCiBzYXRpc2ZhY3RvcmlseS4gVGhlIGluaXQgZnVuY3Rpb24gbXVzdCByZXR1cm4gdGhlIG1vZHVsZSBvYmplY3QgdG8gaXRzIGNhbGxlciwKIHNvIHRoYXQgaXQgdGhlbiBnZXRzIGluc2VydGVkIGludG8gYGBzeXMubW9kdWxlc2BgLgogCi1XaGVuIGVtYmVkZGluZyBQeXRob24sIHRoZSA6Y2Z1bmM6YFB5SW5pdF9zcGFtYCBmdW5jdGlvbiBpcyBub3QgY2FsbGVkCi1hdXRvbWF0aWNhbGx5IHVubGVzcyB0aGVyZSdzIGFuIGVudHJ5IGluIHRoZSA6Y2RhdGE6YFB5SW1wb3J0X0luaXR0YWJgIHRhYmxlLgotVG8gYWRkIHRoZSBtb2R1bGUgdG8gdGhlIGluaXRpYWxpemF0aW9uIHRhYmxlLCB1c2UgOmNmdW5jOmBQeUltcG9ydF9BcHBlbmRJbml0dGFiYCwKK1doZW4gZW1iZWRkaW5nIFB5dGhvbiwgdGhlIDpjOmZ1bmM6YFB5SW5pdF9zcGFtYCBmdW5jdGlvbiBpcyBub3QgY2FsbGVkCithdXRvbWF0aWNhbGx5IHVubGVzcyB0aGVyZSdzIGFuIGVudHJ5IGluIHRoZSA6YzpkYXRhOmBQeUltcG9ydF9Jbml0dGFiYCB0YWJsZS4KK1RvIGFkZCB0aGUgbW9kdWxlIHRvIHRoZSBpbml0aWFsaXphdGlvbiB0YWJsZSwgdXNlIDpjOmZ1bmM6YFB5SW1wb3J0X0FwcGVuZEluaXR0YWJgLAogb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhbiBpbXBvcnQgb2YgdGhlIG1vZHVsZTo6CiAKICAgIGludAogICAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogICAgewotICAgICAgIC8qIEFkZCBhIGJ1aWx0aW4gbW9kdWxlLCBiZWZvcmUgUHlfSW5pdGlhbGl6ZSAqLworICAgICAgIC8qIEFkZCBhIGJ1aWx0LWluIG1vZHVsZSwgYmVmb3JlIFB5X0luaXRpYWxpemUgKi8KICAgICAgICBQeUltcG9ydF9BcHBlbmRJbml0dGFiKCJzcGFtIiwgUHlJbml0X3NwYW0pOwogCiAgICAgICAgLyogUGFzcyBhcmd2WzBdIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgKi8KQEAgLTM4MywxOSArMzkwLDE0IEBACiAuLiBub3RlOjoKIAogICAgUmVtb3ZpbmcgZW50cmllcyBmcm9tIGBgc3lzLm1vZHVsZXNgYCBvciBpbXBvcnRpbmcgY29tcGlsZWQgbW9kdWxlcyBpbnRvCi0gICBtdWx0aXBsZSBpbnRlcnByZXRlcnMgd2l0aGluIGEgcHJvY2VzcyAob3IgZm9sbG93aW5nIGEgOmNmdW5jOmBmb3JrYCB3aXRob3V0IGFuCi0gICBpbnRlcnZlbmluZyA6Y2Z1bmM6YGV4ZWNgKSBjYW4gY3JlYXRlIHByb2JsZW1zIGZvciBzb21lIGV4dGVuc2lvbiBtb2R1bGVzLgorICAgbXVsdGlwbGUgaW50ZXJwcmV0ZXJzIHdpdGhpbiBhIHByb2Nlc3MgKG9yIGZvbGxvd2luZyBhIDpjOmZ1bmM6YGZvcmtgIHdpdGhvdXQgYW4KKyAgIGludGVydmVuaW5nIDpjOmZ1bmM6YGV4ZWNgKSBjYW4gY3JlYXRlIHByb2JsZW1zIGZvciBzb21lIGV4dGVuc2lvbiBtb2R1bGVzLgogICAgRXh0ZW5zaW9uIG1vZHVsZSBhdXRob3JzIHNob3VsZCBleGVyY2lzZSBjYXV0aW9uIHdoZW4gaW5pdGlhbGl6aW5nIGludGVybmFsIGRhdGEKICAgIHN0cnVjdHVyZXMuCiAKIEEgbW9yZSBzdWJzdGFudGlhbCBleGFtcGxlIG1vZHVsZSBpcyBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24KIGFzIDpmaWxlOmBNb2R1bGVzL3h4bW9kdWxlLmNgLiAgVGhpcyBmaWxlIG1heSBiZSB1c2VkIGFzIGEgIHRlbXBsYXRlIG9yIHNpbXBseQotcmVhZCBhcyBhbiBleGFtcGxlLiAgVGhlIDpwcm9ncmFtOmBtb2R1bGF0b3IucHlgIHNjcmlwdCBpbmNsdWRlZCBpbiB0aGUgc291cmNlCi1kaXN0cmlidXRpb24gb3IgV2luZG93cyBpbnN0YWxsIHByb3ZpZGVzICBhIHNpbXBsZSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2UgZm9yCi1kZWNsYXJpbmcgdGhlIGZ1bmN0aW9ucyBhbmQgb2JqZWN0cyB3aGljaCBhIG1vZHVsZSBzaG91bGQgaW1wbGVtZW50LCBhbmQgY2FuCi1nZW5lcmF0ZSBhIHRlbXBsYXRlIHdoaWNoIGNhbiBiZSBmaWxsZWQgaW4uICBUaGUgc2NyaXB0IGxpdmVzIGluIHRoZQotOmZpbGU6YFRvb2xzL21vZHVsYXRvci9gIGRpcmVjdG9yeTsgc2VlIHRoZSA6ZmlsZTpgUkVBRE1FYCBmaWxlIHRoZXJlIGZvciBtb3JlCi1pbmZvcm1hdGlvbi4KK3JlYWQgYXMgYW4gZXhhbXBsZS4KIAogCiAuLiBfY29tcGlsYXRpb246CkBAIC00NTMsNyArNDU1LDcgQEAKIENhbGxpbmcgYSBQeXRob24gZnVuY3Rpb24gaXMgZWFzeS4gIEZpcnN0LCB0aGUgUHl0aG9uIHByb2dyYW0gbXVzdCBzb21laG93IHBhc3MKIHlvdSB0aGUgUHl0aG9uIGZ1bmN0aW9uIG9iamVjdC4gIFlvdSBzaG91bGQgcHJvdmlkZSBhIGZ1bmN0aW9uIChvciBzb21lIG90aGVyCiBpbnRlcmZhY2UpIHRvIGRvIHRoaXMuICBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBzYXZlIGEgcG9pbnRlciB0byB0aGUKLVB5dGhvbiBmdW5jdGlvbiBvYmplY3QgKGJlIGNhcmVmdWwgdG8gOmNmdW5jOmBQeV9JTkNSRUZgIGl0ISkgaW4gYSBnbG9iYWwKK1B5dGhvbiBmdW5jdGlvbiBvYmplY3QgKGJlIGNhcmVmdWwgdG8gOmM6ZnVuYzpgUHlfSU5DUkVGYCBpdCEpIGluIGEgZ2xvYmFsCiB2YXJpYWJsZSAtLS0gb3Igd2hlcmV2ZXIgeW91IHNlZSBmaXQuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG1pZ2h0CiBiZSBwYXJ0IG9mIGEgbW9kdWxlIGRlZmluaXRpb246OgogCkBAIC00ODIsMTAgKzQ4NCwxMCBAQAogCiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBpbnRlcnByZXRlciB1c2luZyB0aGUKIDpjb25zdDpgTUVUSF9WQVJBUkdTYCBmbGFnOyB0aGlzIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDpyZWY6YG1ldGhvZHRhYmxlYC4gIFRoZQotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmdW5jdGlvbiBhbmQgaXRzIGFyZ3VtZW50cyBhcmUgZG9jdW1lbnRlZCBpbiBzZWN0aW9uCis6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmdW5jdGlvbiBhbmQgaXRzIGFyZ3VtZW50cyBhcmUgZG9jdW1lbnRlZCBpbiBzZWN0aW9uCiA6cmVmOmBwYXJzZXR1cGxlYC4KIAotVGhlIG1hY3JvcyA6Y2Z1bmM6YFB5X1hJTkNSRUZgIGFuZCA6Y2Z1bmM6YFB5X1hERUNSRUZgIGluY3JlbWVudC9kZWNyZW1lbnQgdGhlCitUaGUgbWFjcm9zIDpjOmZ1bmM6YFB5X1hJTkNSRUZgIGFuZCA6YzpmdW5jOmBQeV9YREVDUkVGYCBpbmNyZW1lbnQvZGVjcmVtZW50IHRoZQogcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBhbmQgYXJlIHNhZmUgaW4gdGhlIHByZXNlbmNlIG9mICpOVUxMKiBwb2ludGVycwogKGJ1dCBub3RlIHRoYXQgKnRlbXAqIHdpbGwgbm90IGJlICAqTlVMTCogaW4gdGhpcyBjb250ZXh0KS4gIE1vcmUgaW5mbyBvbiB0aGVtCiBpbiBzZWN0aW9uIDpyZWY6YHJlZmNvdW50c2AuCkBAIC00OTMsMTIgKzQ5NSwxMiBAQAogLi4gaW5kZXg6OiBzaW5nbGU6IFB5T2JqZWN0X0NhbGxPYmplY3QoKQogCiBMYXRlciwgd2hlbiBpdCBpcyB0aW1lIHRvIGNhbGwgdGhlIGZ1bmN0aW9uLCB5b3UgY2FsbCB0aGUgQyBmdW5jdGlvbgotOmNmdW5jOmBQeU9iamVjdF9DYWxsT2JqZWN0YC4gIFRoaXMgZnVuY3Rpb24gaGFzIHR3byBhcmd1bWVudHMsIGJvdGggcG9pbnRlcnMgdG8KKzpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgLiAgVGhpcyBmdW5jdGlvbiBoYXMgdHdvIGFyZ3VtZW50cywgYm90aCBwb2ludGVycyB0bwogYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzOiB0aGUgUHl0aG9uIGZ1bmN0aW9uLCBhbmQgdGhlIGFyZ3VtZW50IGxpc3QuICBUaGUKIGFyZ3VtZW50IGxpc3QgbXVzdCBhbHdheXMgYmUgYSB0dXBsZSBvYmplY3QsIHdob3NlIGxlbmd0aCBpcyB0aGUgbnVtYmVyIG9mCiBhcmd1bWVudHMuICBUbyBjYWxsIHRoZSBQeXRob24gZnVuY3Rpb24gd2l0aCBubyBhcmd1bWVudHMsIHBhc3MgaW4gTlVMTCwgb3IKIGFuIGVtcHR5IHR1cGxlOyB0byBjYWxsIGl0IHdpdGggb25lIGFyZ3VtZW50LCBwYXNzIGEgc2luZ2xldG9uIHR1cGxlLgotOmNmdW5jOmBQeV9CdWlsZFZhbHVlYCByZXR1cm5zIGEgdHVwbGUgd2hlbiBpdHMgZm9ybWF0IHN0cmluZyBjb25zaXN0cyBvZiB6ZXJvCis6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCByZXR1cm5zIGEgdHVwbGUgd2hlbiBpdHMgZm9ybWF0IHN0cmluZyBjb25zaXN0cyBvZiB6ZXJvCiBvciBtb3JlIGZvcm1hdCBjb2RlcyBiZXR3ZWVuIHBhcmVudGhlc2VzLiAgRm9yIGV4YW1wbGU6OgogCiAgICBpbnQgYXJnOwpAQCAtNTEyLDI1ICs1MTQsMjUgQEAKICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QobXlfY2FsbGJhY2ssIGFyZ2xpc3QpOwogICAgUHlfREVDUkVGKGFyZ2xpc3QpOwogCi06Y2Z1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgIHJldHVybnMgYSBQeXRob24gb2JqZWN0IHBvaW50ZXI6IHRoaXMgaXMgdGhlIHJldHVybgotdmFsdWUgb2YgdGhlIFB5dGhvbiBmdW5jdGlvbi4gIDpjZnVuYzpgUHlPYmplY3RfQ2FsbE9iamVjdGAgaXMKKzpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgIHJldHVybnMgYSBQeXRob24gb2JqZWN0IHBvaW50ZXI6IHRoaXMgaXMgdGhlIHJldHVybgordmFsdWUgb2YgdGhlIFB5dGhvbiBmdW5jdGlvbi4gIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgIGlzCiAicmVmZXJlbmNlLWNvdW50LW5ldXRyYWwiIHdpdGggcmVzcGVjdCB0byBpdHMgYXJndW1lbnRzLiAgSW4gdGhlIGV4YW1wbGUgYSBuZXcKLXR1cGxlIHdhcyBjcmVhdGVkIHRvIHNlcnZlIGFzIHRoZSBhcmd1bWVudCBsaXN0LCB3aGljaCBpcyA6Y2Z1bmM6YFB5X0RFQ1JFRmBcCit0dXBsZSB3YXMgY3JlYXRlZCB0byBzZXJ2ZSBhcyB0aGUgYXJndW1lbnQgbGlzdCwgd2hpY2ggaXMgOmM6ZnVuYzpgUHlfREVDUkVGYFwKIC1lZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgY2FsbC4KIAotVGhlIHJldHVybiB2YWx1ZSBvZiA6Y2Z1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgIGlzICJuZXciOiBlaXRoZXIgaXQgaXMgYSBicmFuZAorVGhlIHJldHVybiB2YWx1ZSBvZiA6YzpmdW5jOmBQeU9iamVjdF9DYWxsT2JqZWN0YCBpcyAibmV3IjogZWl0aGVyIGl0IGlzIGEgYnJhbmQKIG5ldyBvYmplY3QsIG9yIGl0IGlzIGFuIGV4aXN0aW5nIG9iamVjdCB3aG9zZSByZWZlcmVuY2UgY291bnQgaGFzIGJlZW4KIGluY3JlbWVudGVkLiAgU28sIHVubGVzcyB5b3Ugd2FudCB0byBzYXZlIGl0IGluIGEgZ2xvYmFsIHZhcmlhYmxlLCB5b3Ugc2hvdWxkCi1zb21laG93IDpjZnVuYzpgUHlfREVDUkVGYCB0aGUgcmVzdWx0LCBldmVuIChlc3BlY2lhbGx5ISkgaWYgeW91IGFyZSBub3QKK3NvbWVob3cgOmM6ZnVuYzpgUHlfREVDUkVGYCB0aGUgcmVzdWx0LCBldmVuIChlc3BlY2lhbGx5ISkgaWYgeW91IGFyZSBub3QKIGludGVyZXN0ZWQgaW4gaXRzIHZhbHVlLgogCiBCZWZvcmUgeW91IGRvIHRoaXMsIGhvd2V2ZXIsIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayB0aGF0IHRoZSByZXR1cm4gdmFsdWUKIGlzbid0ICpOVUxMKi4gIElmIGl0IGlzLCB0aGUgUHl0aG9uIGZ1bmN0aW9uIHRlcm1pbmF0ZWQgYnkgcmFpc2luZyBhbiBleGNlcHRpb24uCi1JZiB0aGUgQyBjb2RlIHRoYXQgY2FsbGVkIDpjZnVuYzpgUHlPYmplY3RfQ2FsbE9iamVjdGAgaXMgY2FsbGVkIGZyb20gUHl0aG9uLCBpdAorSWYgdGhlIEMgY29kZSB0aGF0IGNhbGxlZCA6YzpmdW5jOmBQeU9iamVjdF9DYWxsT2JqZWN0YCBpcyBjYWxsZWQgZnJvbSBQeXRob24sIGl0CiBzaG91bGQgbm93IHJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uIHRvIGl0cyBQeXRob24gY2FsbGVyLCBzbyB0aGUgaW50ZXJwcmV0ZXIKIGNhbiBwcmludCBhIHN0YWNrIHRyYWNlLCBvciB0aGUgY2FsbGluZyBQeXRob24gY29kZSBjYW4gaGFuZGxlIHRoZSBleGNlcHRpb24uCiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBvciBkZXNpcmFibGUsIHRoZSBleGNlcHRpb24gc2hvdWxkIGJlIGNsZWFyZWQgYnkgY2FsbGluZwotOmNmdW5jOmBQeUVycl9DbGVhcmAuICBGb3IgZXhhbXBsZTo6Cis6YzpmdW5jOmBQeUVycl9DbGVhcmAuICBGb3IgZXhhbXBsZTo6CiAKICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICByZXR1cm4gTlVMTDsgLyogUGFzcyBlcnJvciBiYWNrICovCkBAIC01MzgsMTIgKzU0MCwxMiBAQAogICAgUHlfREVDUkVGKHJlc3VsdCk7CiAKIERlcGVuZGluZyBvbiB0aGUgZGVzaXJlZCBpbnRlcmZhY2UgdG8gdGhlIFB5dGhvbiBjYWxsYmFjayBmdW5jdGlvbiwgeW91IG1heSBhbHNvCi1oYXZlIHRvIHByb3ZpZGUgYW4gYXJndW1lbnQgbGlzdCB0byA6Y2Z1bmM6YFB5T2JqZWN0X0NhbGxPYmplY3RgLiAgSW4gc29tZSBjYXNlcworaGF2ZSB0byBwcm92aWRlIGFuIGFyZ3VtZW50IGxpc3QgdG8gOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE9iamVjdGAuICBJbiBzb21lIGNhc2VzCiB0aGUgYXJndW1lbnQgbGlzdCBpcyBhbHNvIHByb3ZpZGVkIGJ5IHRoZSBQeXRob24gcHJvZ3JhbSwgdGhyb3VnaCB0aGUgc2FtZQogaW50ZXJmYWNlIHRoYXQgc3BlY2lmaWVkIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIEl0IGNhbiB0aGVuIGJlIHNhdmVkIGFuZCB1c2VkCiBpbiB0aGUgc2FtZSBtYW5uZXIgYXMgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIEluIG90aGVyIGNhc2VzLCB5b3UgbWF5IGhhdmUgdG8KIGNvbnN0cnVjdCBhIG5ldyB0dXBsZSB0byBwYXNzIGFzIHRoZSBhcmd1bWVudCBsaXN0LiAgVGhlIHNpbXBsZXN0IHdheSB0byBkbyB0aGlzCi1pcyB0byBjYWxsIDpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcGFzcyBhbiBpbnRlZ3JhbAoraXMgdG8gY2FsbCA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYC4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwYXNzIGFuIGludGVncmFsCiBldmVudCBjb2RlLCB5b3UgbWlnaHQgdXNlIHRoZSBmb2xsb3dpbmcgY29kZTo6CiAKICAgIFB5T2JqZWN0ICphcmdsaXN0OwpAQCAtNTU4LDExICs1NjAsMTEgQEAKIAogTm90ZSB0aGUgcGxhY2VtZW50IG9mIGBgUHlfREVDUkVGKGFyZ2xpc3QpYGAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNhbGwsIGJlZm9yZQogdGhlIGVycm9yIGNoZWNrISAgQWxzbyBub3RlIHRoYXQgc3RyaWN0bHkgc3BlYWtpbmcgdGhpcyBjb2RlIGlzIG5vdCBjb21wbGV0ZToKLTpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAgbWF5IHJ1biBvdXQgb2YgbWVtb3J5LCBhbmQgdGhpcyBzaG91bGQgYmUgY2hlY2tlZC4KKzpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIG1heSBydW4gb3V0IG9mIG1lbW9yeSwgYW5kIHRoaXMgc2hvdWxkIGJlIGNoZWNrZWQuCiAKIFlvdSBtYXkgYWxzbyBjYWxsIGEgZnVuY3Rpb24gd2l0aCBrZXl3b3JkIGFyZ3VtZW50cyBieSB1c2luZwotOmNmdW5jOmBQeU9iamVjdF9DYWxsYCwgd2hpY2ggc3VwcG9ydHMgYXJndW1lbnRzIGFuZCBrZXl3b3JkIGFyZ3VtZW50cy4gIEFzIGluCi10aGUgYWJvdmUgZXhhbXBsZSwgd2UgdXNlIDpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAgdG8gY29uc3RydWN0IHRoZSBkaWN0aW9uYXJ5LiA6OgorOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbGAsIHdoaWNoIHN1cHBvcnRzIGFyZ3VtZW50cyBhbmQga2V5d29yZCBhcmd1bWVudHMuICBBcyBpbgordGhlIGFib3ZlIGV4YW1wbGUsIHdlIHVzZSA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCB0byBjb25zdHJ1Y3QgdGhlIGRpY3Rpb25hcnkuIDo6CiAKICAgIFB5T2JqZWN0ICpkaWN0OwogICAgLi4uCkBAIC01ODIsNyArNTg0LDcgQEAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IFB5QXJnX1BhcnNlVHVwbGUoKQogCi1UaGUgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjoKK1RoZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjoKIAogICAgaW50IFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKmFyZywgY2hhciAqZm9ybWF0LCAuLi4pOwogCkBAIC01OTIsNyArNTk0LDcgQEAKIE1hbnVhbC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIG11c3QgYmUgYWRkcmVzc2VzIG9mIHZhcmlhYmxlcyB3aG9zZSB0eXBlIGlzCiBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLgogCi1Ob3RlIHRoYXQgd2hpbGUgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBjaGVja3MgdGhhdCB0aGUgUHl0aG9uIGFyZ3VtZW50cyBoYXZlCitOb3RlIHRoYXQgd2hpbGUgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgY2hlY2tzIHRoYXQgdGhlIFB5dGhvbiBhcmd1bWVudHMgaGF2ZQogdGhlIHJlcXVpcmVkIHR5cGVzLCBpdCBjYW5ub3QgY2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBhZGRyZXNzZXMgb2YgQyB2YXJpYWJsZXMKIHBhc3NlZCB0byB0aGUgY2FsbDogaWYgeW91IG1ha2UgbWlzdGFrZXMgdGhlcmUsIHlvdXIgY29kZSB3aWxsIHByb2JhYmx5IGNyYXNoIG9yCiBhdCBsZWFzdCBvdmVyd3JpdGUgcmFuZG9tIGJpdHMgaW4gbWVtb3J5LiAgU28gYmUgY2FyZWZ1bCEKQEAgLTY3NCwxNyArNjc2LDE3IEBACiAKIC4uIGluZGV4Ojogc2luZ2xlOiBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoKQogCi1UaGUgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIGZvbGxvd3M6OgorVGhlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgZm9sbG93czo6CiAKICAgIGludCBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKmFyZywgUHlPYmplY3QgKmt3ZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCBjaGFyICprd2xpc3RbXSwgLi4uKTsKIAogVGhlICphcmcqIGFuZCAqZm9ybWF0KiBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlCi06Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGZ1bmN0aW9uLiAgVGhlICprd2RpY3QqIHBhcmFtZXRlciBpcyB0aGUgZGljdGlvbmFyeSBvZgorOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgZnVuY3Rpb24uICBUaGUgKmt3ZGljdCogcGFyYW1ldGVyIGlzIHRoZSBkaWN0aW9uYXJ5IG9mCiBrZXl3b3JkcyByZWNlaXZlZCBhcyB0aGUgdGhpcmQgcGFyYW1ldGVyIGZyb20gdGhlIFB5dGhvbiBydW50aW1lLiAgVGhlICprd2xpc3QqCiBwYXJhbWV0ZXIgaXMgYSAqTlVMTCotdGVybWluYXRlZCBsaXN0IG9mIHN0cmluZ3Mgd2hpY2ggaWRlbnRpZnkgdGhlIHBhcmFtZXRlcnM7CiB0aGUgbmFtZXMgYXJlIG1hdGNoZWQgd2l0aCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBmcm9tICpmb3JtYXQqIGZyb20gbGVmdCB0bwotcmlnaHQuICBPbiBzdWNjZXNzLCA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AgcmV0dXJucyB0cnVlLCBvdGhlcndpc2UKK3JpZ2h0LiAgT24gc3VjY2VzcywgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCByZXR1cm5zIHRydWUsIG90aGVyd2lzZQogaXQgcmV0dXJucyBmYWxzZSBhbmQgcmFpc2VzIGFuIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbi4KIAogLi4gbm90ZTo6CkBAIC03NDgsMTkgKzc1MCwxOSBAQAogQnVpbGRpbmcgQXJiaXRyYXJ5IFZhbHVlcwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgSXQgaXMgZGVjbGFyZWQKK1RoaXMgZnVuY3Rpb24gaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgSXQgaXMgZGVjbGFyZWQKIGFzIGZvbGxvd3M6OgogCiAgICBQeU9iamVjdCAqUHlfQnVpbGRWYWx1ZShjaGFyICpmb3JtYXQsIC4uLik7CiAKIEl0IHJlY29nbml6ZXMgYSBzZXQgb2YgZm9ybWF0IHVuaXRzIHNpbWlsYXIgdG8gdGhlIG9uZXMgcmVjb2duaXplZCBieQotOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCwgYnV0IHRoZSBhcmd1bWVudHMgKHdoaWNoIGFyZSBpbnB1dCB0byB0aGUgZnVuY3Rpb24sCis6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCwgYnV0IHRoZSBhcmd1bWVudHMgKHdoaWNoIGFyZSBpbnB1dCB0byB0aGUgZnVuY3Rpb24sCiBub3Qgb3V0cHV0KSBtdXN0IG5vdCBiZSBwb2ludGVycywganVzdCB2YWx1ZXMuICBJdCByZXR1cm5zIGEgbmV3IFB5dGhvbiBvYmplY3QsCiBzdWl0YWJsZSBmb3IgcmV0dXJuaW5nIGZyb20gYSBDIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIFB5dGhvbi4KIAotT25lIGRpZmZlcmVuY2Ugd2l0aCA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgOiB3aGlsZSB0aGUgbGF0dGVyIHJlcXVpcmVzIGl0cworT25lIGRpZmZlcmVuY2Ugd2l0aCA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYDogd2hpbGUgdGhlIGxhdHRlciByZXF1aXJlcyBpdHMKIGZpcnN0IGFyZ3VtZW50IHRvIGJlIGEgdHVwbGUgKHNpbmNlIFB5dGhvbiBhcmd1bWVudCBsaXN0cyBhcmUgYWx3YXlzIHJlcHJlc2VudGVkCi1hcyB0dXBsZXMgaW50ZXJuYWxseSksIDpjZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZG9lcyBub3QgYWx3YXlzIGJ1aWxkIGEgdHVwbGUuICBJdAorYXMgdHVwbGVzIGludGVybmFsbHkpLCA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCBkb2VzIG5vdCBhbHdheXMgYnVpbGQgYSB0dXBsZS4gIEl0CiBidWlsZHMgYSB0dXBsZSBvbmx5IGlmIGl0cyBmb3JtYXQgc3RyaW5nIGNvbnRhaW5zIHR3byBvciBtb3JlIGZvcm1hdCB1bml0cy4gSWYKIHRoZSBmb3JtYXQgc3RyaW5nIGlzIGVtcHR5LCBpdCByZXR1cm5zIGBgTm9uZWBgOyBpZiBpdCBjb250YWlucyBleGFjdGx5IG9uZQogZm9ybWF0IHVuaXQsIGl0IHJldHVybnMgd2hhdGV2ZXIgb2JqZWN0IGlzIGRlc2NyaWJlZCBieSB0aGF0IGZvcm1hdCB1bml0LiAgVG8KQEAgLTc5NCwxOCArNzk2LDE4IEBACiAKIEluIGxhbmd1YWdlcyBsaWtlIEMgb3IgQysrLCB0aGUgcHJvZ3JhbW1lciBpcyByZXNwb25zaWJsZSBmb3IgZHluYW1pYyBhbGxvY2F0aW9uCiBhbmQgZGVhbGxvY2F0aW9uIG9mIG1lbW9yeSBvbiB0aGUgaGVhcC4gIEluIEMsIHRoaXMgaXMgZG9uZSB1c2luZyB0aGUgZnVuY3Rpb25zCi06Y2Z1bmM6YG1hbGxvY2AgYW5kIDpjZnVuYzpgZnJlZWAuICBJbiBDKyssIHRoZSBvcGVyYXRvcnMgYGBuZXdgYCBhbmQKKzpjOmZ1bmM6YG1hbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgLiAgSW4gQysrLCB0aGUgb3BlcmF0b3JzIGBgbmV3YGAgYW5kCiBgYGRlbGV0ZWBgIGFyZSB1c2VkIHdpdGggZXNzZW50aWFsbHkgdGhlIHNhbWUgbWVhbmluZyBhbmQgd2UnbGwgcmVzdHJpY3QKIHRoZSBmb2xsb3dpbmcgZGlzY3Vzc2lvbiB0byB0aGUgQyBjYXNlLgogCi1FdmVyeSBibG9jayBvZiBtZW1vcnkgYWxsb2NhdGVkIHdpdGggOmNmdW5jOmBtYWxsb2NgIHNob3VsZCBldmVudHVhbGx5IGJlCi1yZXR1cm5lZCB0byB0aGUgcG9vbCBvZiBhdmFpbGFibGUgbWVtb3J5IGJ5IGV4YWN0bHkgb25lIGNhbGwgdG8gOmNmdW5jOmBmcmVlYC4KLUl0IGlzIGltcG9ydGFudCB0byBjYWxsIDpjZnVuYzpgZnJlZWAgYXQgdGhlIHJpZ2h0IHRpbWUuICBJZiBhIGJsb2NrJ3MgYWRkcmVzcwotaXMgZm9yZ290dGVuIGJ1dCA6Y2Z1bmM6YGZyZWVgIGlzIG5vdCBjYWxsZWQgZm9yIGl0LCB0aGUgbWVtb3J5IGl0IG9jY3VwaWVzCitFdmVyeSBibG9jayBvZiBtZW1vcnkgYWxsb2NhdGVkIHdpdGggOmM6ZnVuYzpgbWFsbG9jYCBzaG91bGQgZXZlbnR1YWxseSBiZQorcmV0dXJuZWQgdG8gdGhlIHBvb2wgb2YgYXZhaWxhYmxlIG1lbW9yeSBieSBleGFjdGx5IG9uZSBjYWxsIHRvIDpjOmZ1bmM6YGZyZWVgLgorSXQgaXMgaW1wb3J0YW50IHRvIGNhbGwgOmM6ZnVuYzpgZnJlZWAgYXQgdGhlIHJpZ2h0IHRpbWUuICBJZiBhIGJsb2NrJ3MgYWRkcmVzcworaXMgZm9yZ290dGVuIGJ1dCA6YzpmdW5jOmBmcmVlYCBpcyBub3QgY2FsbGVkIGZvciBpdCwgdGhlIG1lbW9yeSBpdCBvY2N1cGllcwogY2Fubm90IGJlIHJldXNlZCB1bnRpbCB0aGUgcHJvZ3JhbSB0ZXJtaW5hdGVzLiAgVGhpcyBpcyBjYWxsZWQgYSA6ZGZuOmBtZW1vcnkKLWxlYWtgLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIGEgcHJvZ3JhbSBjYWxscyA6Y2Z1bmM6YGZyZWVgIGZvciBhIGJsb2NrIGFuZCB0aGVuCitsZWFrYC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiBhIHByb2dyYW0gY2FsbHMgOmM6ZnVuYzpgZnJlZWAgZm9yIGEgYmxvY2sgYW5kIHRoZW4KIGNvbnRpbnVlcyB0byB1c2UgdGhlIGJsb2NrLCBpdCBjcmVhdGVzIGEgY29uZmxpY3Qgd2l0aCByZS11c2Ugb2YgdGhlIGJsb2NrCi10aHJvdWdoIGFub3RoZXIgOmNmdW5jOmBtYWxsb2NgIGNhbGwuICBUaGlzIGlzIGNhbGxlZCA6ZGZuOmB1c2luZyBmcmVlZCBtZW1vcnlgLgordGhyb3VnaCBhbm90aGVyIDpjOmZ1bmM6YG1hbGxvY2AgY2FsbC4gIFRoaXMgaXMgY2FsbGVkIDpkZm46YHVzaW5nIGZyZWVkIG1lbW9yeWAuCiBJdCBoYXMgdGhlIHNhbWUgYmFkIGNvbnNlcXVlbmNlcyBhcyByZWZlcmVuY2luZyB1bmluaXRpYWxpemVkIGRhdGEgLS0tIGNvcmUKIGR1bXBzLCB3cm9uZyByZXN1bHRzLCBteXN0ZXJpb3VzIGNyYXNoZXMuCiAKQEAgLTgyMiw3ICs4MjQsNyBAQAogaW1wb3J0YW50IHRvIHByZXZlbnQgbGVha3MgZnJvbSBoYXBwZW5pbmcgYnkgaGF2aW5nIGEgY29kaW5nIGNvbnZlbnRpb24gb3IKIHN0cmF0ZWd5IHRoYXQgbWluaW1pemVzIHRoaXMga2luZCBvZiBlcnJvcnMuCiAKLVNpbmNlIFB5dGhvbiBtYWtlcyBoZWF2eSB1c2Ugb2YgOmNmdW5jOmBtYWxsb2NgIGFuZCA6Y2Z1bmM6YGZyZWVgLCBpdCBuZWVkcyBhCitTaW5jZSBQeXRob24gbWFrZXMgaGVhdnkgdXNlIG9mIDpjOmZ1bmM6YG1hbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgLCBpdCBuZWVkcyBhCiBzdHJhdGVneSB0byBhdm9pZCBtZW1vcnkgbGVha3MgYXMgd2VsbCBhcyB0aGUgdXNlIG9mIGZyZWVkIG1lbW9yeS4gIFRoZSBjaG9zZW4KIG1ldGhvZCBpcyBjYWxsZWQgOmRmbjpgcmVmZXJlbmNlIGNvdW50aW5nYC4gIFRoZSBwcmluY2lwbGUgaXMgc2ltcGxlOiBldmVyeQogb2JqZWN0IGNvbnRhaW5zIGEgY291bnRlciwgd2hpY2ggaXMgaW5jcmVtZW50ZWQgd2hlbiBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0CkBAIC04MzQsMTEgKzgzNiwxMSBAQAogKFNvbWV0aW1lcywgcmVmZXJlbmNlIGNvdW50aW5nIGlzIGFsc28gcmVmZXJyZWQgdG8gYXMgYSBnYXJiYWdlIGNvbGxlY3Rpb24KIHN0cmF0ZWd5LCBoZW5jZSBteSB1c2Ugb2YgImF1dG9tYXRpYyIgdG8gZGlzdGluZ3Vpc2ggdGhlIHR3by4pICBUaGUgYmlnCiBhZHZhbnRhZ2Ugb2YgYXV0b21hdGljIGdhcmJhZ2UgY29sbGVjdGlvbiBpcyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3QgbmVlZCB0byBjYWxsCi06Y2Z1bmM6YGZyZWVgIGV4cGxpY2l0bHkuICAoQW5vdGhlciBjbGFpbWVkIGFkdmFudGFnZSBpcyBhbiBpbXByb3ZlbWVudCBpbiBzcGVlZAorOmM6ZnVuYzpgZnJlZWAgZXhwbGljaXRseS4gIChBbm90aGVyIGNsYWltZWQgYWR2YW50YWdlIGlzIGFuIGltcHJvdmVtZW50IGluIHNwZWVkCiBvciBtZW1vcnkgdXNhZ2UgLS0tIHRoaXMgaXMgbm8gaGFyZCBmYWN0IGhvd2V2ZXIuKSAgVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IGZvcgogQywgdGhlcmUgaXMgbm8gdHJ1bHkgcG9ydGFibGUgYXV0b21hdGljIGdhcmJhZ2UgY29sbGVjdG9yLCB3aGlsZSByZWZlcmVuY2UKLWNvdW50aW5nIGNhbiBiZSBpbXBsZW1lbnRlZCBwb3J0YWJseSAoYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb25zIDpjZnVuYzpgbWFsbG9jYAotYW5kIDpjZnVuYzpgZnJlZWAgYXJlIGF2YWlsYWJsZSAtLS0gd2hpY2ggdGhlIEMgU3RhbmRhcmQgZ3VhcmFudGVlcykuIE1heWJlIHNvbWUKK2NvdW50aW5nIGNhbiBiZSBpbXBsZW1lbnRlZCBwb3J0YWJseSAoYXMgbG9uZyBhcyB0aGUgZnVuY3Rpb25zIDpjOmZ1bmM6YG1hbGxvY2AKK2FuZCA6YzpmdW5jOmBmcmVlYCBhcmUgYXZhaWxhYmxlIC0tLSB3aGljaCB0aGUgQyBTdGFuZGFyZCBndWFyYW50ZWVzKS4gTWF5YmUgc29tZQogZGF5IGEgc3VmZmljaWVudGx5IHBvcnRhYmxlIGF1dG9tYXRpYyBnYXJiYWdlIGNvbGxlY3RvciB3aWxsIGJlIGF2YWlsYWJsZSBmb3IgQy4KIFVudGlsIHRoZW4sIHdlJ2xsIGhhdmUgdG8gbGl2ZSB3aXRoIHJlZmVyZW5jZSBjb3VudHMuCiAKQEAgLTg3Myw5ICs4NzUsOSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGVyZSBhcmUgdHdvIG1hY3JvcywgYGBQeV9JTkNSRUYoeClgYCBhbmQgYGBQeV9ERUNSRUYoeClgYCwgd2hpY2ggaGFuZGxlIHRoZQotaW5jcmVtZW50aW5nIGFuZCBkZWNyZW1lbnRpbmcgb2YgdGhlIHJlZmVyZW5jZSBjb3VudC4gOmNmdW5jOmBQeV9ERUNSRUZgIGFsc28KK2luY3JlbWVudGluZyBhbmQgZGVjcmVtZW50aW5nIG9mIHRoZSByZWZlcmVuY2UgY291bnQuIDpjOmZ1bmM6YFB5X0RFQ1JFRmAgYWxzbwogZnJlZXMgdGhlIG9iamVjdCB3aGVuIHRoZSBjb3VudCByZWFjaGVzIHplcm8uIEZvciBmbGV4aWJpbGl0eSwgaXQgZG9lc24ndCBjYWxsCi06Y2Z1bmM6YGZyZWVgIGRpcmVjdGx5IC0tLSByYXRoZXIsIGl0IG1ha2VzIGEgY2FsbCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBpbgorOmM6ZnVuYzpgZnJlZWAgZGlyZWN0bHkgLS0tIHJhdGhlciwgaXQgbWFrZXMgYSBjYWxsIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIGluCiB0aGUgb2JqZWN0J3MgOmRmbjpgdHlwZSBvYmplY3RgLiAgRm9yIHRoaXMgcHVycG9zZSAoYW5kIG90aGVycyksIGV2ZXJ5IG9iamVjdAogYWxzbyBjb250YWlucyBhIHBvaW50ZXIgdG8gaXRzIHR5cGUgb2JqZWN0LgogCkBAIC04ODMsMTMgKzg4NSwxMyBAQAogTGV0J3MgZmlyc3QgaW50cm9kdWNlIHNvbWUgdGVybXMuICBOb2JvZHkgIm93bnMiIGFuIG9iamVjdDsgaG93ZXZlciwgeW91IGNhbgogOmRmbjpgb3duIGEgcmVmZXJlbmNlYCB0byBhbiBvYmplY3QuICBBbiBvYmplY3QncyByZWZlcmVuY2UgY291bnQgaXMgbm93IGRlZmluZWQKIGFzIHRoZSBudW1iZXIgb2Ygb3duZWQgcmVmZXJlbmNlcyB0byBpdC4gIFRoZSBvd25lciBvZiBhIHJlZmVyZW5jZSBpcwotcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgOmNmdW5jOmBQeV9ERUNSRUZgIHdoZW4gdGhlIHJlZmVyZW5jZSBpcyBubyBsb25nZXIKK3Jlc3BvbnNpYmxlIGZvciBjYWxsaW5nIDpjOmZ1bmM6YFB5X0RFQ1JFRmAgd2hlbiB0aGUgcmVmZXJlbmNlIGlzIG5vIGxvbmdlcgogbmVlZGVkLiAgT3duZXJzaGlwIG9mIGEgcmVmZXJlbmNlIGNhbiBiZSB0cmFuc2ZlcnJlZC4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvCi1kaXNwb3NlIG9mIGFuIG93bmVkIHJlZmVyZW5jZTogcGFzcyBpdCBvbiwgc3RvcmUgaXQsIG9yIGNhbGwgOmNmdW5jOmBQeV9ERUNSRUZgLgorZGlzcG9zZSBvZiBhbiBvd25lZCByZWZlcmVuY2U6IHBhc3MgaXQgb24sIHN0b3JlIGl0LCBvciBjYWxsIDpjOmZ1bmM6YFB5X0RFQ1JFRmAuCiBGb3JnZXR0aW5nIHRvIGRpc3Bvc2Ugb2YgYW4gb3duZWQgcmVmZXJlbmNlIGNyZWF0ZXMgYSBtZW1vcnkgbGVhay4KIAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byA6ZGZuOmBib3Jyb3dgIFsjXV8gYSByZWZlcmVuY2UgdG8gYW4gb2JqZWN0LiAgVGhlCi1ib3Jyb3dlciBvZiBhIHJlZmVyZW5jZSBzaG91bGQgbm90IGNhbGwgOmNmdW5jOmBQeV9ERUNSRUZgLiAgVGhlIGJvcnJvd2VyIG11c3QKK2JvcnJvd2VyIG9mIGEgcmVmZXJlbmNlIHNob3VsZCBub3QgY2FsbCA6YzpmdW5jOmBQeV9ERUNSRUZgLiAgVGhlIGJvcnJvd2VyIG11c3QKIG5vdCBob2xkIG9uIHRvIHRoZSBvYmplY3QgbG9uZ2VyIHRoYW4gdGhlIG93bmVyIGZyb20gd2hpY2ggaXQgd2FzIGJvcnJvd2VkLgogVXNpbmcgYSBib3Jyb3dlZCByZWZlcmVuY2UgYWZ0ZXIgdGhlIG93bmVyIGhhcyBkaXNwb3NlZCBvZiBpdCByaXNrcyB1c2luZyBmcmVlZAogbWVtb3J5IGFuZCBzaG91bGQgYmUgYXZvaWRlZCBjb21wbGV0ZWx5LiBbI11fCkBAIC05MDMsNyArOTA1LDcgQEAKIGRpc3Bvc2VkIG9mIGl0LgogCiBBIGJvcnJvd2VkIHJlZmVyZW5jZSBjYW4gYmUgY2hhbmdlZCBpbnRvIGFuIG93bmVkIHJlZmVyZW5jZSBieSBjYWxsaW5nCi06Y2Z1bmM6YFB5X0lOQ1JFRmAuICBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgc3RhdHVzIG9mIHRoZSBvd25lciBmcm9tIHdoaWNoIHRoZQorOmM6ZnVuYzpgUHlfSU5DUkVGYC4gIFRoaXMgZG9lcyBub3QgYWZmZWN0IHRoZSBzdGF0dXMgb2YgdGhlIG93bmVyIGZyb20gd2hpY2ggdGhlCiByZWZlcmVuY2Ugd2FzIGJvcnJvd2VkIC0tLSBpdCBjcmVhdGVzIGEgbmV3IG93bmVkIHJlZmVyZW5jZSwgYW5kIGdpdmVzIGZ1bGwKIG93bmVyIHJlc3BvbnNpYmlsaXRpZXMgKHRoZSBuZXcgb3duZXIgbXVzdCBkaXNwb3NlIG9mIHRoZSByZWZlcmVuY2UgcHJvcGVybHksIGFzCiB3ZWxsIGFzIHRoZSBwcmV2aW91cyBvd25lcikuCkBAIC05MjAsMzYgKzkyMiwzNiBAQAogCiBNb3N0IGZ1bmN0aW9ucyB0aGF0IHJldHVybiBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgcGFzcyBvbiBvd25lcnNoaXAgd2l0aCB0aGUKIHJlZmVyZW5jZS4gIEluIHBhcnRpY3VsYXIsIGFsbCBmdW5jdGlvbnMgd2hvc2UgZnVuY3Rpb24gaXQgaXMgdG8gY3JlYXRlIGEgbmV3Ci1vYmplY3QsIHN1Y2ggYXMgOmNmdW5jOmBQeUxvbmdfRnJvbUxvbmdgIGFuZCA6Y2Z1bmM6YFB5X0J1aWxkVmFsdWVgLCBwYXNzCitvYmplY3QsIHN1Y2ggYXMgOmM6ZnVuYzpgUHlMb25nX0Zyb21Mb25nYCBhbmQgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAsIHBhc3MKIG93bmVyc2hpcCB0byB0aGUgcmVjZWl2ZXIuICBFdmVuIGlmIHRoZSBvYmplY3QgaXMgbm90IGFjdHVhbGx5IG5ldywgeW91IHN0aWxsCiByZWNlaXZlIG93bmVyc2hpcCBvZiBhIG5ldyByZWZlcmVuY2UgdG8gdGhhdCBvYmplY3QuICBGb3IgaW5zdGFuY2UsCi06Y2Z1bmM6YFB5TG9uZ19Gcm9tTG9uZ2AgbWFpbnRhaW5zIGEgY2FjaGUgb2YgcG9wdWxhciB2YWx1ZXMgYW5kIGNhbiByZXR1cm4gYQorOmM6ZnVuYzpgUHlMb25nX0Zyb21Mb25nYCBtYWludGFpbnMgYSBjYWNoZSBvZiBwb3B1bGFyIHZhbHVlcyBhbmQgY2FuIHJldHVybiBhCiByZWZlcmVuY2UgdG8gYSBjYWNoZWQgaXRlbS4KIAogTWFueSBmdW5jdGlvbnMgdGhhdCBleHRyYWN0IG9iamVjdHMgZnJvbSBvdGhlciBvYmplY3RzIGFsc28gdHJhbnNmZXIgb3duZXJzaGlwCi13aXRoIHRoZSByZWZlcmVuY2UsIGZvciBpbnN0YW5jZSA6Y2Z1bmM6YFB5T2JqZWN0X0dldEF0dHJTdHJpbmdgLiAgVGhlIHBpY3R1cmUKK3dpdGggdGhlIHJlZmVyZW5jZSwgZm9yIGluc3RhbmNlIDpjOmZ1bmM6YFB5T2JqZWN0X0dldEF0dHJTdHJpbmdgLiAgVGhlIHBpY3R1cmUKIGlzIGxlc3MgY2xlYXIsIGhlcmUsIGhvd2V2ZXIsIHNpbmNlIGEgZmV3IGNvbW1vbiByb3V0aW5lcyBhcmUgZXhjZXB0aW9uczoKLTpjZnVuYzpgUHlUdXBsZV9HZXRJdGVtYCwgOmNmdW5jOmBQeUxpc3RfR2V0SXRlbWAsIDpjZnVuYzpgUHlEaWN0X0dldEl0ZW1gLCBhbmQKLTpjZnVuYzpgUHlEaWN0X0dldEl0ZW1TdHJpbmdgIGFsbCByZXR1cm4gcmVmZXJlbmNlcyB0aGF0IHlvdSBib3Jyb3cgZnJvbSB0aGUKKzpjOmZ1bmM6YFB5VHVwbGVfR2V0SXRlbWAsIDpjOmZ1bmM6YFB5TGlzdF9HZXRJdGVtYCwgOmM6ZnVuYzpgUHlEaWN0X0dldEl0ZW1gLCBhbmQKKzpjOmZ1bmM6YFB5RGljdF9HZXRJdGVtU3RyaW5nYCBhbGwgcmV0dXJuIHJlZmVyZW5jZXMgdGhhdCB5b3UgYm9ycm93IGZyb20gdGhlCiB0dXBsZSwgbGlzdCBvciBkaWN0aW9uYXJ5LgogCi1UaGUgZnVuY3Rpb24gOmNmdW5jOmBQeUltcG9ydF9BZGRNb2R1bGVgIGFsc28gcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSwgZXZlbgorVGhlIGZ1bmN0aW9uIDpjOmZ1bmM6YFB5SW1wb3J0X0FkZE1vZHVsZWAgYWxzbyByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLCBldmVuCiB0aG91Z2ggaXQgbWF5IGFjdHVhbGx5IGNyZWF0ZSB0aGUgb2JqZWN0IGl0IHJldHVybnM6IHRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBhbgogb3duZWQgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgaXMgc3RvcmVkIGluIGBgc3lzLm1vZHVsZXNgYC4KIAogV2hlbiB5b3UgcGFzcyBhbiBvYmplY3QgcmVmZXJlbmNlIGludG8gYW5vdGhlciBmdW5jdGlvbiwgaW4gZ2VuZXJhbCwgdGhlCiBmdW5jdGlvbiBib3Jyb3dzIHRoZSByZWZlcmVuY2UgZnJvbSB5b3UgLS0tIGlmIGl0IG5lZWRzIHRvIHN0b3JlIGl0LCBpdCB3aWxsIHVzZQotOmNmdW5jOmBQeV9JTkNSRUZgIHRvIGJlY29tZSBhbiBpbmRlcGVuZGVudCBvd25lci4gIFRoZXJlIGFyZSBleGFjdGx5IHR3bwotaW1wb3J0YW50IGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlOiA6Y2Z1bmM6YFB5VHVwbGVfU2V0SXRlbWAgYW5kCi06Y2Z1bmM6YFB5TGlzdF9TZXRJdGVtYC4gIFRoZXNlIGZ1bmN0aW9ucyB0YWtlIG92ZXIgb3duZXJzaGlwIG9mIHRoZSBpdGVtIHBhc3NlZAotdG8gdGhlbSAtLS0gZXZlbiBpZiB0aGV5IGZhaWwhICAoTm90ZSB0aGF0IDpjZnVuYzpgUHlEaWN0X1NldEl0ZW1gIGFuZCBmcmllbmRzCis6YzpmdW5jOmBQeV9JTkNSRUZgIHRvIGJlY29tZSBhbiBpbmRlcGVuZGVudCBvd25lci4gIFRoZXJlIGFyZSBleGFjdGx5IHR3bworaW1wb3J0YW50IGV4Y2VwdGlvbnMgdG8gdGhpcyBydWxlOiA6YzpmdW5jOmBQeVR1cGxlX1NldEl0ZW1gIGFuZAorOmM6ZnVuYzpgUHlMaXN0X1NldEl0ZW1gLiAgVGhlc2UgZnVuY3Rpb25zIHRha2Ugb3ZlciBvd25lcnNoaXAgb2YgdGhlIGl0ZW0gcGFzc2VkCit0byB0aGVtIC0tLSBldmVuIGlmIHRoZXkgZmFpbCEgIChOb3RlIHRoYXQgOmM6ZnVuYzpgUHlEaWN0X1NldEl0ZW1gIGFuZCBmcmllbmRzCiBkb24ndCB0YWtlIG92ZXIgb3duZXJzaGlwIC0tLSB0aGV5IGFyZSAibm9ybWFsLiIpCiAKIFdoZW4gYSBDIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFB5dGhvbiwgaXQgYm9ycm93cyByZWZlcmVuY2VzIHRvIGl0cyBhcmd1bWVudHMKIGZyb20gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIgb3ducyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0LCBzbyB0aGUgYm9ycm93ZWQKIHJlZmVyZW5jZSdzIGxpZmV0aW1lIGlzIGd1YXJhbnRlZWQgdW50aWwgdGhlIGZ1bmN0aW9uIHJldHVybnMuICBPbmx5IHdoZW4gc3VjaCBhCiBib3Jyb3dlZCByZWZlcmVuY2UgbXVzdCBiZSBzdG9yZWQgb3IgcGFzc2VkIG9uLCBpdCBtdXN0IGJlIHR1cm5lZCBpbnRvIGFuIG93bmVkCi1yZWZlcmVuY2UgYnkgY2FsbGluZyA6Y2Z1bmM6YFB5X0lOQ1JFRmAuCityZWZlcmVuY2UgYnkgY2FsbGluZyA6YzpmdW5jOmBQeV9JTkNSRUZgLgogCiBUaGUgb2JqZWN0IHJlZmVyZW5jZSByZXR1cm5lZCBmcm9tIGEgQyBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmcm9tIFB5dGhvbiBtdXN0CiBiZSBhbiBvd25lZCByZWZlcmVuY2UgLS0tIG93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBmcm9tIHRoZSBmdW5jdGlvbiB0byBpdHMKQEAgLTk2NSw3ICs5NjcsNyBAQAogY2FuIGxlYWQgdG8gcHJvYmxlbXMuICBUaGVzZSBhbGwgaGF2ZSB0byBkbyB3aXRoIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHRoZQogaW50ZXJwcmV0ZXIsIHdoaWNoIGNhbiBjYXVzZSB0aGUgb3duZXIgb2YgYSByZWZlcmVuY2UgdG8gZGlzcG9zZSBvZiBpdC4KIAotVGhlIGZpcnN0IGFuZCBtb3N0IGltcG9ydGFudCBjYXNlIHRvIGtub3cgYWJvdXQgaXMgdXNpbmcgOmNmdW5jOmBQeV9ERUNSRUZgIG9uCitUaGUgZmlyc3QgYW5kIG1vc3QgaW1wb3J0YW50IGNhc2UgdG8ga25vdyBhYm91dCBpcyB1c2luZyA6YzpmdW5jOmBQeV9ERUNSRUZgIG9uCiBhbiB1bnJlbGF0ZWQgb2JqZWN0IHdoaWxlIGJvcnJvd2luZyBhIHJlZmVyZW5jZSB0byBhIGxpc3QgaXRlbS4gIEZvciBpbnN0YW5jZTo6CiAKICAgIHZvaWQKQEAgLTk4MSw3ICs5ODMsNyBAQAogYGBsaXN0WzFdYGAgd2l0aCB0aGUgdmFsdWUgYGAwYGAsIGFuZCBmaW5hbGx5IHByaW50cyB0aGUgYm9ycm93ZWQgcmVmZXJlbmNlLgogTG9va3MgaGFybWxlc3MsIHJpZ2h0PyAgQnV0IGl0J3Mgbm90IQogCi1MZXQncyBmb2xsb3cgdGhlIGNvbnRyb2wgZmxvdyBpbnRvIDpjZnVuYzpgUHlMaXN0X1NldEl0ZW1gLiAgVGhlIGxpc3Qgb3ducworTGV0J3MgZm9sbG93IHRoZSBjb250cm9sIGZsb3cgaW50byA6YzpmdW5jOmBQeUxpc3RfU2V0SXRlbWAuICBUaGUgbGlzdCBvd25zCiByZWZlcmVuY2VzIHRvIGFsbCBpdHMgaXRlbXMsIHNvIHdoZW4gaXRlbSAxIGlzIHJlcGxhY2VkLCBpdCBoYXMgdG8gZGlzcG9zZSBvZgogdGhlIG9yaWdpbmFsIGl0ZW0gMS4gIE5vdyBsZXQncyBzdXBwb3NlIHRoZSBvcmlnaW5hbCBpdGVtIDEgd2FzIGFuIGluc3RhbmNlIG9mIGEKIHVzZXItZGVmaW5lZCBjbGFzcywgYW5kIGxldCdzIGZ1cnRoZXIgc3VwcG9zZSB0aGF0IHRoZSBjbGFzcyBkZWZpbmVkIGEKQEAgLTk5MCw4ICs5OTIsOCBAQAogCiBTaW5jZSBpdCBpcyB3cml0dGVuIGluIFB5dGhvbiwgdGhlIDptZXRoOmBfX2RlbF9fYCBtZXRob2QgY2FuIGV4ZWN1dGUgYXJiaXRyYXJ5CiBQeXRob24gY29kZS4gIENvdWxkIGl0IHBlcmhhcHMgZG8gc29tZXRoaW5nIHRvIGludmFsaWRhdGUgdGhlIHJlZmVyZW5jZSB0bwotYGBpdGVtYGAgaW4gOmNmdW5jOmBidWdgPyAgWW91IGJldCEgIEFzc3VtaW5nIHRoYXQgdGhlIGxpc3QgcGFzc2VkIGludG8KLTpjZnVuYzpgYnVnYCBpcyBhY2Nlc3NpYmxlIHRvIHRoZSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kLCBpdCBjb3VsZCBleGVjdXRlIGEKK2BgaXRlbWBgIGluIDpjOmZ1bmM6YGJ1Z2A/ICBZb3UgYmV0ISAgQXNzdW1pbmcgdGhhdCB0aGUgbGlzdCBwYXNzZWQgaW50bworOmM6ZnVuYzpgYnVnYCBpcyBhY2Nlc3NpYmxlIHRvIHRoZSA6bWV0aDpgX19kZWxfX2AgbWV0aG9kLCBpdCBjb3VsZCBleGVjdXRlIGEKIHN0YXRlbWVudCB0byB0aGUgZWZmZWN0IG9mIGBgZGVsIGxpc3RbMF1gYCwgYW5kIGFzc3VtaW5nIHRoaXMgd2FzIHRoZSBsYXN0CiByZWZlcmVuY2UgdG8gdGhhdCBvYmplY3QsIGl0IHdvdWxkIGZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggaXQsIHRoZXJlYnkKIGludmFsaWRhdGluZyBgYGl0ZW1gYC4KQEAgLTEwMTgsOCArMTAyMCw4IEBACiB0aHJlYWRzLiAgTm9ybWFsbHksIG11bHRpcGxlIHRocmVhZHMgaW4gdGhlIFB5dGhvbiBpbnRlcnByZXRlciBjYW4ndCBnZXQgaW4gZWFjaAogb3RoZXIncyB3YXksIGJlY2F1c2UgdGhlcmUgaXMgYSBnbG9iYWwgbG9jayBwcm90ZWN0aW5nIFB5dGhvbidzIGVudGlyZSBvYmplY3QKIHNwYWNlLiAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gdGVtcG9yYXJpbHkgcmVsZWFzZSB0aGlzIGxvY2sgdXNpbmcgdGhlIG1hY3JvCi06Y21hY3JvOmBQeV9CRUdJTl9BTExPV19USFJFQURTYCwgYW5kIHRvIHJlLWFjcXVpcmUgaXQgdXNpbmcKLTpjbWFjcm86YFB5X0VORF9BTExPV19USFJFQURTYC4gIFRoaXMgaXMgY29tbW9uIGFyb3VuZCBibG9ja2luZyBJL08gY2FsbHMsIHRvCis6YzptYWNybzpgUHlfQkVHSU5fQUxMT1dfVEhSRUFEU2AsIGFuZCB0byByZS1hY3F1aXJlIGl0IHVzaW5nCis6YzptYWNybzpgUHlfRU5EX0FMTE9XX1RIUkVBRFNgLiAgVGhpcyBpcyBjb21tb24gYXJvdW5kIGJsb2NraW5nIEkvTyBjYWxscywgdG8KIGxldCBvdGhlciB0aHJlYWRzIHVzZSB0aGUgcHJvY2Vzc29yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBJL08gdG8gY29tcGxldGUuCiBPYnZpb3VzbHksIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaGFzIHRoZSBzYW1lIHByb2JsZW0gYXMgdGhlIHByZXZpb3VzIG9uZTo6CiAKQEAgLTEwNDgsMTEgKzEwNTAsMTEgQEAKIHJlZHVuZGFudCB0ZXN0cyBhbmQgdGhlIGNvZGUgd291bGQgcnVuIG1vcmUgc2xvd2x5LgogCiBJdCBpcyBiZXR0ZXIgdG8gdGVzdCBmb3IgKk5VTEwqIG9ubHkgYXQgdGhlICJzb3VyY2U6IiB3aGVuIGEgcG9pbnRlciB0aGF0IG1heSBiZQotKk5VTEwqIGlzIHJlY2VpdmVkLCBmb3IgZXhhbXBsZSwgZnJvbSA6Y2Z1bmM6YG1hbGxvY2Agb3IgZnJvbSBhIGZ1bmN0aW9uIHRoYXQKKypOVUxMKiBpcyByZWNlaXZlZCwgZm9yIGV4YW1wbGUsIGZyb20gOmM6ZnVuYzpgbWFsbG9jYCBvciBmcm9tIGEgZnVuY3Rpb24gdGhhdAogbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAotVGhlIG1hY3JvcyA6Y2Z1bmM6YFB5X0lOQ1JFRmAgYW5kIDpjZnVuYzpgUHlfREVDUkVGYCBkbyBub3QgY2hlY2sgZm9yICpOVUxMKgotcG9pbnRlcnMgLS0tIGhvd2V2ZXIsIHRoZWlyIHZhcmlhbnRzIDpjZnVuYzpgUHlfWElOQ1JFRmAgYW5kIDpjZnVuYzpgUHlfWERFQ1JFRmAKK1RoZSBtYWNyb3MgOmM6ZnVuYzpgUHlfSU5DUkVGYCBhbmQgOmM6ZnVuYzpgUHlfREVDUkVGYCBkbyBub3QgY2hlY2sgZm9yICpOVUxMKgorcG9pbnRlcnMgLS0tIGhvd2V2ZXIsIHRoZWlyIHZhcmlhbnRzIDpjOmZ1bmM6YFB5X1hJTkNSRUZgIGFuZCA6YzpmdW5jOmBQeV9YREVDUkVGYAogZG8uCiAKIFRoZSBtYWNyb3MgZm9yIGNoZWNraW5nIGZvciBhIHBhcnRpY3VsYXIgb2JqZWN0IHR5cGUgKGBgUHl0eXBlX0NoZWNrKClgYCkgZG9uJ3QKQEAgLTExMjYsNyArMTEyOCw3IEBACiAKIFB5dGhvbiBwcm92aWRlcyBhIHNwZWNpYWwgbWVjaGFuaXNtIHRvIHBhc3MgQy1sZXZlbCBpbmZvcm1hdGlvbiAocG9pbnRlcnMpIGZyb20KIG9uZSBleHRlbnNpb24gbW9kdWxlIHRvIGFub3RoZXIgb25lOiBDYXBzdWxlcy4gQSBDYXBzdWxlIGlzIGEgUHl0aG9uIGRhdGEgdHlwZQotd2hpY2ggc3RvcmVzIGEgcG9pbnRlciAoOmN0eXBlOmB2b2lkIFwqYCkuICBDYXBzdWxlcyBjYW4gb25seSBiZSBjcmVhdGVkIGFuZAord2hpY2ggc3RvcmVzIGEgcG9pbnRlciAoOmM6dHlwZTpgdm9pZCBcKmApLiAgQ2Fwc3VsZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBhbmQKIGFjY2Vzc2VkIHZpYSB0aGVpciBDIEFQSSwgYnV0IHRoZXkgY2FuIGJlIHBhc3NlZCBhcm91bmQgbGlrZSBhbnkgb3RoZXIgUHl0aG9uCiBvYmplY3QuIEluIHBhcnRpY3VsYXIsICB0aGV5IGNhbiBiZSBhc3NpZ25lZCB0byBhIG5hbWUgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSdzCiBuYW1lc3BhY2UuIE90aGVyIGV4dGVuc2lvbiBtb2R1bGVzIGNhbiB0aGVuIGltcG9ydCB0aGlzIG1vZHVsZSwgcmV0cmlldmUgdGhlCkBAIC0xMTM5LDggKzExNDEsOCBAQAogZGlmZmVyZW50IHdheXMgYmV0d2VlbiB0aGUgbW9kdWxlIHByb3ZpZGluZyB0aGUgY29kZSBhbmQgdGhlIGNsaWVudCBtb2R1bGVzLgogCiBXaGljaGV2ZXIgbWV0aG9kIHlvdSBjaG9vc2UsIGl0J3MgaW1wb3J0YW50IHRvIG5hbWUgeW91ciBDYXBzdWxlcyBwcm9wZXJseS4KLVRoZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9OZXdgIHRha2VzIGEgbmFtZSBwYXJhbWV0ZXIKLSg6Y3R5cGU6YGNvbnN0IGNoYXIgXCpgKTsgeW91J3JlIHBlcm1pdHRlZCB0byBwYXNzIGluIGEgKk5VTEwqIG5hbWUsIGJ1dAorVGhlIGZ1bmN0aW9uIDpjOmZ1bmM6YFB5Q2Fwc3VsZV9OZXdgIHRha2VzIGEgbmFtZSBwYXJhbWV0ZXIKKyg6Yzp0eXBlOmBjb25zdCBjaGFyIFwqYCk7IHlvdSdyZSBwZXJtaXR0ZWQgdG8gcGFzcyBpbiBhICpOVUxMKiBuYW1lLCBidXQKIHdlIHN0cm9uZ2x5IGVuY291cmFnZSB5b3UgdG8gc3BlY2lmeSBhIG5hbWUuICBQcm9wZXJseSBuYW1lZCBDYXBzdWxlcyBwcm92aWRlCiBhIGRlZ3JlZSBvZiBydW50aW1lIHR5cGUtc2FmZXR5OyB0aGVyZSBpcyBubyBmZWFzaWJsZSB3YXkgdG8gdGVsbCBvbmUgdW5uYW1lZAogQ2Fwc3VsZSBmcm9tIGFub3RoZXIuCkBAIC0xMTUwLDcgKzExNTIsNyBAQAogCiAgICAgbW9kdWxlbmFtZS5hdHRyaWJ1dGVuYW1lCiAKLVRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5Q2Fwc3VsZV9JbXBvcnRgIG1ha2VzIGl0IGVhc3kgdG8KK1RoZSBjb252ZW5pZW5jZSBmdW5jdGlvbiA6YzpmdW5jOmBQeUNhcHN1bGVfSW1wb3J0YCBtYWtlcyBpdCBlYXN5IHRvCiBsb2FkIGEgQyBBUEkgcHJvdmlkZWQgdmlhIGEgQ2Fwc3VsZSwgYnV0IG9ubHkgaWYgdGhlIENhcHN1bGUncyBuYW1lCiBtYXRjaGVzIHRoaXMgY29udmVudGlvbi4gIFRoaXMgYmVoYXZpb3IgZ2l2ZXMgQyBBUEkgdXNlcnMgYSBoaWdoIGRlZ3JlZQogb2YgY2VydGFpbnR5IHRoYXQgdGhlIENhcHN1bGUgdGhleSBsb2FkIGNvbnRhaW5zIHRoZSBjb3JyZWN0IEMgQVBJLgpAQCAtMTE1OCwxOSArMTE2MCwxOSBAQAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBhbiBhcHByb2FjaCB0aGF0IHB1dHMgbW9zdCBvZiB0aGUgYnVyZGVuIG9uCiB0aGUgd3JpdGVyIG9mIHRoZSBleHBvcnRpbmcgbW9kdWxlLCB3aGljaCBpcyBhcHByb3ByaWF0ZSBmb3IgY29tbW9ubHkgdXNlZAogbGlicmFyeSBtb2R1bGVzLiBJdCBzdG9yZXMgYWxsIEMgQVBJIHBvaW50ZXJzIChqdXN0IG9uZSBpbiB0aGUgZXhhbXBsZSEpIGluIGFuCi1hcnJheSBvZiA6Y3R5cGU6YHZvaWRgIHBvaW50ZXJzIHdoaWNoIGJlY29tZXMgdGhlIHZhbHVlIG9mIGEgQ2Fwc3VsZS4gVGhlIGhlYWRlcgorYXJyYXkgb2YgOmM6dHlwZTpgdm9pZGAgcG9pbnRlcnMgd2hpY2ggYmVjb21lcyB0aGUgdmFsdWUgb2YgYSBDYXBzdWxlLiBUaGUgaGVhZGVyCiBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZSBwcm92aWRlcyBhIG1hY3JvIHRoYXQgdGFrZXMgY2FyZSBvZiBpbXBvcnRpbmcKIHRoZSBtb2R1bGUgYW5kIHJldHJpZXZpbmcgaXRzIEMgQVBJIHBvaW50ZXJzOyBjbGllbnQgbW9kdWxlcyBvbmx5IGhhdmUgdG8gY2FsbAogdGhpcyBtYWNybyBiZWZvcmUgYWNjZXNzaW5nIHRoZSBDIEFQSS4KIAogVGhlIGV4cG9ydGluZyBtb2R1bGUgaXMgYSBtb2RpZmljYXRpb24gb2YgdGhlIDptb2Q6YHNwYW1gIG1vZHVsZSBmcm9tIHNlY3Rpb24KIDpyZWY6YGV4dGVuZGluZy1zaW1wbGVleGFtcGxlYC4gVGhlIGZ1bmN0aW9uIDpmdW5jOmBzcGFtLnN5c3RlbWAgZG9lcyBub3QgY2FsbAotdGhlIEMgbGlicmFyeSBmdW5jdGlvbiA6Y2Z1bmM6YHN5c3RlbWAgZGlyZWN0bHksIGJ1dCBhIGZ1bmN0aW9uCi06Y2Z1bmM6YFB5U3BhbV9TeXN0ZW1gLCB3aGljaCB3b3VsZCBvZiBjb3Vyc2UgZG8gc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgaW4KK3RoZSBDIGxpYnJhcnkgZnVuY3Rpb24gOmM6ZnVuYzpgc3lzdGVtYCBkaXJlY3RseSwgYnV0IGEgZnVuY3Rpb24KKzpjOmZ1bmM6YFB5U3BhbV9TeXN0ZW1gLCB3aGljaCB3b3VsZCBvZiBjb3Vyc2UgZG8gc29tZXRoaW5nIG1vcmUgY29tcGxpY2F0ZWQgaW4KIHJlYWxpdHkgKHN1Y2ggYXMgYWRkaW5nICJzcGFtIiB0byBldmVyeSBjb21tYW5kKS4gVGhpcyBmdW5jdGlvbgotOmNmdW5jOmBQeVNwYW1fU3lzdGVtYCBpcyBhbHNvIGV4cG9ydGVkIHRvIG90aGVyIGV4dGVuc2lvbiBtb2R1bGVzLgorOmM6ZnVuYzpgUHlTcGFtX1N5c3RlbWAgaXMgYWxzbyBleHBvcnRlZCB0byBvdGhlciBleHRlbnNpb24gbW9kdWxlcy4KIAotVGhlIGZ1bmN0aW9uIDpjZnVuYzpgUHlTcGFtX1N5c3RlbWAgaXMgYSBwbGFpbiBDIGZ1bmN0aW9uLCBkZWNsYXJlZAorVGhlIGZ1bmN0aW9uIDpjOmZ1bmM6YFB5U3BhbV9TeXN0ZW1gIGlzIGEgcGxhaW4gQyBmdW5jdGlvbiwgZGVjbGFyZWQKIGBgc3RhdGljYGAgbGlrZSBldmVyeXRoaW5nIGVsc2U6OgogCiAgICBzdGF0aWMgaW50CkBAIC0xMTc5LDcgKzExODEsNyBAQAogICAgICAgIHJldHVybiBzeXN0ZW0oY29tbWFuZCk7CiAgICB9CiAKLVRoZSBmdW5jdGlvbiA6Y2Z1bmM6YHNwYW1fc3lzdGVtYCBpcyBtb2RpZmllZCBpbiBhIHRyaXZpYWwgd2F5OjoKK1RoZSBmdW5jdGlvbiA6YzpmdW5jOmBzcGFtX3N5c3RlbWAgaXMgbW9kaWZpZWQgaW4gYSB0cml2aWFsIHdheTo6CiAKICAgIHN0YXRpYyBQeU9iamVjdCAqCiAgICBzcGFtX3N5c3RlbShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0xMjgzLDggKzEyODUsOCBAQAogICAgI2VuZGlmIC8qICFkZWZpbmVkKFB5X1NQQU1NT0RVTEVfSCkgKi8KIAogQWxsIHRoYXQgYSBjbGllbnQgbW9kdWxlIG11c3QgZG8gaW4gb3JkZXIgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bmN0aW9uCi06Y2Z1bmM6YFB5U3BhbV9TeXN0ZW1gIGlzIHRvIGNhbGwgdGhlIGZ1bmN0aW9uIChvciByYXRoZXIgbWFjcm8pCi06Y2Z1bmM6YGltcG9ydF9zcGFtYCBpbiBpdHMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb246OgorOmM6ZnVuYzpgUHlTcGFtX1N5c3RlbWAgaXMgdG8gY2FsbCB0aGUgZnVuY3Rpb24gKG9yIHJhdGhlciBtYWNybykKKzpjOmZ1bmM6YGltcG9ydF9zcGFtYCBpbiBpdHMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb246OgogCiAgICBQeU1PRElOSVRfRlVOQwogICAgUHlJbml0X2NsaWVudCh2b2lkKQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBkNDhlZmM5Li43NTgzNmM3IDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMjYsNyArMjYsNyBAQAogPT09PT09PT09PQogCiBUaGUgUHl0aG9uIHJ1bnRpbWUgc2VlcyBhbGwgUHl0aG9uIG9iamVjdHMgYXMgdmFyaWFibGVzIG9mIHR5cGUKLTpjdHlwZTpgUHlPYmplY3RcKmAuICBBIDpjdHlwZTpgUHlPYmplY3RgIGlzIG5vdCBhIHZlcnkgbWFnbmlmaWNlbnQgb2JqZWN0IC0gaXQKKzpjOnR5cGU6YFB5T2JqZWN0XCpgLiAgQSA6Yzp0eXBlOmBQeU9iamVjdGAgaXMgbm90IGEgdmVyeSBtYWduaWZpY2VudCBvYmplY3QgLSBpdAoganVzdCBjb250YWlucyB0aGUgcmVmY291bnQgYW5kIGEgcG9pbnRlciB0byB0aGUgb2JqZWN0J3MgInR5cGUgb2JqZWN0Ii4gIFRoaXMgaXMKIHdoZXJlIHRoZSBhY3Rpb24gaXM7IHRoZSB0eXBlIG9iamVjdCBkZXRlcm1pbmVzIHdoaWNoIChDKSBmdW5jdGlvbnMgZ2V0IGNhbGxlZAogd2hlbiwgZm9yIGluc3RhbmNlLCBhbiBhdHRyaWJ1dGUgZ2V0cyBsb29rZWQgdXAgb24gYW4gb2JqZWN0IG9yIGl0IGlzIG11bHRpcGxpZWQKQEAgLTk1LDcgKzk1LDcgQEAKICAgICAgICAiTm9kZHkgb2JqZWN0cyIsICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgIH07CiAKLU5vdyBpZiB5b3UgZ28gYW5kIGxvb2sgdXAgdGhlIGRlZmluaXRpb24gb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgIGluCitOb3cgaWYgeW91IGdvIGFuZCBsb29rIHVwIHRoZSBkZWZpbml0aW9uIG9mIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgaW4KIDpmaWxlOmBvYmplY3QuaGAgeW91J2xsIHNlZSB0aGF0IGl0IGhhcyBtYW55IG1vcmUgZmllbGRzIHRoYXQgdGhlIGRlZmluaXRpb24KIGFib3ZlLiAgVGhlIHJlbWFpbmluZyBmaWVsZHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcyBieSB0aGUgQyBjb21waWxlciwgYW5kCiBpdCdzIGNvbW1vbiBwcmFjdGljZSB0byBub3Qgc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHkgdW5sZXNzIHlvdSBuZWVkIHRoZW0uCkBAIC0xMTEsNyArMTExLDcgQEAKIAogYXMgdGhlIHR5cGUgb2YgYSB0eXBlIG9iamVjdCBpcyAidHlwZSIsIGJ1dCB0aGlzIGlzbid0IHN0cmljdGx5IGNvbmZvcm1pbmcgQyBhbmQKIHNvbWUgY29tcGlsZXJzIGNvbXBsYWluLiAgRm9ydHVuYXRlbHksIHRoaXMgbWVtYmVyIHdpbGwgYmUgZmlsbGVkIGluIGZvciB1cyBieQotOmNmdW5jOmBQeVR5cGVfUmVhZHlgLiA6OgorOmM6ZnVuYzpgUHlUeXBlX1JlYWR5YC4gOjoKIAogICAgIm5vZGR5Lk5vZGR5IiwgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KIApAQCAtMTMwLDcgKzEzMCw3IEBACiAgICBzaXplb2Yobm9kZHlfTm9kZHlPYmplY3QpLCAgLyogdHBfYmFzaWNzaXplICovCiAKIFRoaXMgaXMgc28gdGhhdCBQeXRob24ga25vd3MgaG93IG11Y2ggbWVtb3J5IHRvIGFsbG9jYXRlIHdoZW4geW91IGNhbGwKLTpjZnVuYzpgUHlPYmplY3RfTmV3YC4KKzpjOmZ1bmM6YFB5T2JqZWN0X05ld2AuCiAKIC4uIG5vdGU6OgogCkBAIC0xNzAsMTIgKzE3MCwxMiBAQAogRm9yIG5vdywgYWxsIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBkbyBpcyB0byBjcmVhdGUgbmV3IDpjbGFzczpgTm9kZHlgIG9iamVjdHMuCiBUbyBlbmFibGUgb2JqZWN0IGNyZWF0aW9uLCB3ZSBoYXZlIHRvIHByb3ZpZGUgYSA6YXR0cjpgdHBfbmV3YCBpbXBsZW1lbnRhdGlvbi4KIEluIHRoaXMgY2FzZSwgd2UgY2FuIGp1c3QgdXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBBUEkKLWZ1bmN0aW9uIDpjZnVuYzpgUHlUeXBlX0dlbmVyaWNOZXdgLiAgV2UnZCBsaWtlIHRvIGp1c3QgYXNzaWduIHRoaXMgdG8gdGhlCitmdW5jdGlvbiA6YzpmdW5jOmBQeVR5cGVfR2VuZXJpY05ld2AuICBXZSdkIGxpa2UgdG8ganVzdCBhc3NpZ24gdGhpcyB0byB0aGUKIDphdHRyOmB0cF9uZXdgIHNsb3QsIGJ1dCB3ZSBjYW4ndCwgZm9yIHBvcnRhYmlsaXR5IHNha2UsIE9uIHNvbWUgcGxhdGZvcm1zIG9yCiBjb21waWxlcnMsIHdlIGNhbid0IHN0YXRpY2FsbHkgaW5pdGlhbGl6ZSBhIHN0cnVjdHVyZSBtZW1iZXIgd2l0aCBhIGZ1bmN0aW9uCiBkZWZpbmVkIGluIGFub3RoZXIgQyBtb2R1bGUsIHNvLCBpbnN0ZWFkLCB3ZSdsbCBhc3NpZ24gdGhlIDphdHRyOmB0cF9uZXdgIHNsb3QKIGluIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24ganVzdCBiZWZvcmUgY2FsbGluZwotOmNmdW5jOmBQeVR5cGVfUmVhZHlgOjoKKzpjOmZ1bmM6YFB5VHlwZV9SZWFkeWA6OgogCiAgICBub2RkeV9Ob2RkeVR5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CiAgICBpZiAoUHlUeXBlX1JlYWR5KCZub2RkeV9Ob2RkeVR5cGUpIDwgMCkKQEAgLTE4NSw3ICsxODUsNyBAQAogZm9yIGEgbGF0ZXIgc2VjdGlvbiEKIAogRXZlcnl0aGluZyBlbHNlIGluIHRoZSBmaWxlIHNob3VsZCBiZSBmYW1pbGlhciwgZXhjZXB0IGZvciBzb21lIGNvZGUgaW4KLTpjZnVuYzpgUHlJbml0X25vZGR5YDo6Cis6YzpmdW5jOmBQeUluaXRfbm9kZHlgOjoKIAogICAgaWYgKFB5VHlwZV9SZWFkeSgmbm9kZHlfTm9kZHlUeXBlKSA8IDApCiAgICAgICAgcmV0dXJuOwpAQCAtMjczLDcgKzI3Myw3IEBACiAgICAoZGVzdHJ1Y3RvcilOb2RkeV9kZWFsbG9jLCAvKnRwX2RlYWxsb2MqLwogCiBUaGlzIG1ldGhvZCBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnRzIG9mIHRoZSB0d28gUHl0aG9uIGF0dHJpYnV0ZXMuIFdlIHVzZQotOmNmdW5jOmBQeV9YREVDUkVGYCBoZXJlIGJlY2F1c2UgdGhlIDphdHRyOmBmaXJzdGAgYW5kIDphdHRyOmBsYXN0YCBtZW1iZXJzCis6YzpmdW5jOmBQeV9YREVDUkVGYCBoZXJlIGJlY2F1c2UgdGhlIDphdHRyOmBmaXJzdGAgYW5kIDphdHRyOmBsYXN0YCBtZW1iZXJzCiBjb3VsZCBiZSAqTlVMTCouICBJdCB0aGVuIGNhbGxzIHRoZSA6YXR0cjpgdHBfZnJlZWAgbWVtYmVyIG9mIHRoZSBvYmplY3QncyB0eXBlCiB0byBmcmVlIHRoZSBvYmplY3QncyBtZW1vcnkuICBOb3RlIHRoYXQgdGhlIG9iamVjdCdzIHR5cGUgbWlnaHQgbm90IGJlCiA6Y2xhc3M6YE5vZGR5VHlwZWAsIGJlY2F1c2UgdGhlIG9iamVjdCBtYXkgYmUgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcy4KQEAgLTMxOSw4ICszMTksOCBAQAogdGhlIGluaXRpYWwgdmFsdWVzIG9mIGluc3RhbmNlIHZhcmlhYmxlcy4gIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZSBuZXcgbWV0aG9kCiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIG1lbWJlcnMgOmF0dHI6YGZpcnN0YCBhbmQKIDphdHRyOmBsYXN0YCBhcmUgbm90ICpOVUxMKi4gSWYgd2UgZGlkbid0IGNhcmUgd2hldGhlciB0aGUgaW5pdGlhbCB2YWx1ZXMgd2VyZQotKk5VTEwqLCB3ZSBjb3VsZCBoYXZlIHVzZWQgOmNmdW5jOmBQeVR5cGVfR2VuZXJpY05ld2AgYXMgb3VyIG5ldyBtZXRob2QsIGFzIHdlCi1kaWQgYmVmb3JlLiAgOmNmdW5jOmBQeVR5cGVfR2VuZXJpY05ld2AgaW5pdGlhbGl6ZXMgYWxsIG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZQorKk5VTEwqLCB3ZSBjb3VsZCBoYXZlIHVzZWQgOmM6ZnVuYzpgUHlUeXBlX0dlbmVyaWNOZXdgIGFzIG91ciBuZXcgbWV0aG9kLCBhcyB3ZQorZGlkIGJlZm9yZS4gIDpjOmZ1bmM6YFB5VHlwZV9HZW5lcmljTmV3YCBpbml0aWFsaXplcyBhbGwgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlCiBtZW1iZXJzIHRvICpOVUxMKi4KIAogVGhlIG5ldyBtZXRob2QgaXMgYSBzdGF0aWMgbWV0aG9kIHRoYXQgaXMgcGFzc2VkIHRoZSB0eXBlIGJlaW5nIGluc3RhbnRpYXRlZCBhbmQKQEAgLTMzMCw3ICszMzAsNyBAQAogbWV0aG9kcy4gTm90ZSB0aGF0IGlmIHRoZSB0eXBlIHN1cHBvcnRzIHN1YmNsYXNzaW5nLCB0aGUgdHlwZSBwYXNzZWQgbWF5IG5vdCBiZQogdGhlIHR5cGUgYmVpbmcgZGVmaW5lZC4gIFRoZSBuZXcgbWV0aG9kIGNhbGxzIHRoZSB0cF9hbGxvYyBzbG90IHRvIGFsbG9jYXRlCiBtZW1vcnkuIFdlIGRvbid0IGZpbGwgdGhlIDphdHRyOmB0cF9hbGxvY2Agc2xvdCBvdXJzZWx2ZXMuIFJhdGhlcgotOmNmdW5jOmBQeVR5cGVfUmVhZHlgIGZpbGxzIGl0IGZvciB1cyBieSBpbmhlcml0aW5nIGl0IGZyb20gb3VyIGJhc2UgY2xhc3MsCis6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIGZpbGxzIGl0IGZvciB1cyBieSBpbmhlcml0aW5nIGl0IGZyb20gb3VyIGJhc2UgY2xhc3MsCiB3aGljaCBpcyA6Y2xhc3M6YG9iamVjdGAgYnkgZGVmYXVsdC4gIE1vc3QgdHlwZXMgdXNlIHRoZSBkZWZhdWx0IGFsbG9jYXRpb24uCiAKIC4uIG5vdGU6OgpAQCAtNTE1LDggKzUxNSw4IEBACiAKICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qdHBfZmxhZ3MqLwogCi1XZSByZW5hbWUgOmNmdW5jOmBQeUluaXRfbm9kZHlgIHRvIDpjZnVuYzpgUHlJbml0X25vZGR5MmAgYW5kIHVwZGF0ZSB0aGUgbW9kdWxlCi1uYW1lIGluIHRoZSA6Y3R5cGU6YFB5TW9kdWxlRGVmYCBzdHJ1Y3QuCitXZSByZW5hbWUgOmM6ZnVuYzpgUHlJbml0X25vZGR5YCB0byA6YzpmdW5jOmBQeUluaXRfbm9kZHkyYCBhbmQgdXBkYXRlIHRoZSBtb2R1bGUKK25hbWUgaW4gdGhlIDpjOnR5cGU6YFB5TW9kdWxlRGVmYCBzdHJ1Y3QuCiAKIEZpbmFsbHksIHdlIHVwZGF0ZSBvdXIgOmZpbGU6YHNldHVwLnB5YCBmaWxlIHRvIGJ1aWxkIHRoZSBuZXcgbW9kdWxlOjoKIApAQCAtNTgyLDcgKzU4Miw3IEBACiBkZWxldGVkLiAgSW4gb3VyIHNldHRlciwgd2UgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIGF0dHJpYnV0ZSBpcyBkZWxldGVkIG9yIGlmIHRoZQogYXR0cmlidXRlIHZhbHVlIGlzIG5vdCBhIHN0cmluZy4KIAotV2UgY3JlYXRlIGFuIGFycmF5IG9mIDpjdHlwZTpgUHlHZXRTZXREZWZgIHN0cnVjdHVyZXM6OgorV2UgY3JlYXRlIGFuIGFycmF5IG9mIDpjOnR5cGU6YFB5R2V0U2V0RGVmYCBzdHJ1Y3R1cmVzOjoKIAogICAgc3RhdGljIFB5R2V0U2V0RGVmIE5vZGR5X2dldHNldGVyc1tdID0gewogICAgICAgIHsiZmlyc3QiLApAQCAtNjAyLDcgKzYwMiw3IEBACiAKIHRvIHJlZ2lzdGVyIG91ciBhdHRyaWJ1dGUgZ2V0dGVycyBhbmQgc2V0dGVycy4KIAotVGhlIGxhc3QgaXRlbSBpbiBhIDpjdHlwZTpgUHlHZXRTZXREZWZgIHN0cnVjdHVyZSBpcyB0aGUgY2xvc3VyZSBtZW50aW9uZWQKK1RoZSBsYXN0IGl0ZW0gaW4gYSA6Yzp0eXBlOmBQeUdldFNldERlZmAgc3RydWN0dXJlIGlzIHRoZSBjbG9zdXJlIG1lbnRpb25lZAogYWJvdmUuIEluIHRoaXMgY2FzZSwgd2UgYXJlbid0IHVzaW5nIHRoZSBjbG9zdXJlLCBzbyB3ZSBqdXN0IHBhc3MgKk5VTEwqLgogCiBXZSBhbHNvIHJlbW92ZSB0aGUgbWVtYmVyIGRlZmluaXRpb25zIGZvciB0aGVzZSBhdHRyaWJ1dGVzOjoKQEAgLTY0Nyw4ICs2NDcsOCBAQAogCiBXaXRoIHRoZXNlIGNoYW5nZXMsIHdlIGNhbiBhc3N1cmUgdGhhdCB0aGUgOmF0dHI6YGZpcnN0YCBhbmQgOmF0dHI6YGxhc3RgCiBtZW1iZXJzIGFyZSBuZXZlciAqTlVMTCogc28gd2UgY2FuIHJlbW92ZSBjaGVja3MgZm9yICpOVUxMKiB2YWx1ZXMgaW4gYWxtb3N0IGFsbAotY2FzZXMuIFRoaXMgbWVhbnMgdGhhdCBtb3N0IG9mIHRoZSA6Y2Z1bmM6YFB5X1hERUNSRUZgIGNhbGxzIGNhbiBiZSBjb252ZXJ0ZWQgdG8KLTpjZnVuYzpgUHlfREVDUkVGYCBjYWxscy4gVGhlIG9ubHkgcGxhY2Ugd2UgY2FuJ3QgY2hhbmdlIHRoZXNlIGNhbGxzIGlzIGluIHRoZQorY2FzZXMuIFRoaXMgbWVhbnMgdGhhdCBtb3N0IG9mIHRoZSA6YzpmdW5jOmBQeV9YREVDUkVGYCBjYWxscyBjYW4gYmUgY29udmVydGVkIHRvCis6YzpmdW5jOmBQeV9ERUNSRUZgIGNhbGxzLiBUaGUgb25seSBwbGFjZSB3ZSBjYW4ndCBjaGFuZ2UgdGhlc2UgY2FsbHMgaXMgaW4gdGhlCiBkZWFsbG9jYXRvciwgd2hlcmUgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZXNlCiBtZW1iZXJzIGZhaWxlZCBpbiB0aGUgY29uc3RydWN0b3IuCiAKQEAgLTcxMywxMyArNzEzLDEzIEBACiAgICB9CiAKIEZvciBlYWNoIHN1Ym9iamVjdCB0aGF0IGNhbiBwYXJ0aWNpcGF0ZSBpbiBjeWNsZXMsIHdlIG5lZWQgdG8gY2FsbCB0aGUKLTpjZnVuYzpgdmlzaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNhbCBtZXRob2QuIFRoZQotOmNmdW5jOmB2aXNpdGAgZnVuY3Rpb24gdGFrZXMgYXMgYXJndW1lbnRzIHRoZSBzdWJvYmplY3QgYW5kIHRoZSBleHRyYSBhcmd1bWVudAorOmM6ZnVuYzpgdmlzaXRgIGZ1bmN0aW9uLCB3aGljaCBpcyBwYXNzZWQgdG8gdGhlIHRyYXZlcnNhbCBtZXRob2QuIFRoZQorOmM6ZnVuYzpgdmlzaXRgIGZ1bmN0aW9uIHRha2VzIGFzIGFyZ3VtZW50cyB0aGUgc3Vib2JqZWN0IGFuZCB0aGUgZXh0cmEgYXJndW1lbnQKICphcmcqIHBhc3NlZCB0byB0aGUgdHJhdmVyc2FsIG1ldGhvZC4gIEl0IHJldHVybnMgYW4gaW50ZWdlciB2YWx1ZSB0aGF0IG11c3QgYmUKIHJldHVybmVkIGlmIGl0IGlzIG5vbi16ZXJvLgogCi1QeXRob24gcHJvdmlkZXMgYSA6Y2Z1bmM6YFB5X1ZJU0lUYCBtYWNybyB0aGF0IGF1dG9tYXRlcyBjYWxsaW5nIHZpc2l0Ci1mdW5jdGlvbnMuICBXaXRoIDpjZnVuYzpgUHlfVklTSVRgLCA6Y2Z1bmM6YE5vZGR5X3RyYXZlcnNlYCBjYW4gYmUgc2ltcGxpZmllZDo6CitQeXRob24gcHJvdmlkZXMgYSA6YzpmdW5jOmBQeV9WSVNJVGAgbWFjcm8gdGhhdCBhdXRvbWF0ZXMgY2FsbGluZyB2aXNpdAorZnVuY3Rpb25zLiAgV2l0aCA6YzpmdW5jOmBQeV9WSVNJVGAsIDpjOmZ1bmM6YE5vZGR5X3RyYXZlcnNlYCBjYW4gYmUgc2ltcGxpZmllZDo6CiAKICAgIHN0YXRpYyBpbnQKICAgIE5vZGR5X3RyYXZlcnNlKE5vZGR5ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKQEAgLTczMiw3ICs3MzIsNyBAQAogLi4gbm90ZTo6CiAKICAgIE5vdGUgdGhhdCB0aGUgOmF0dHI6YHRwX3RyYXZlcnNlYCBpbXBsZW1lbnRhdGlvbiBtdXN0IG5hbWUgaXRzIGFyZ3VtZW50cyBleGFjdGx5Ci0gICAqdmlzaXQqIGFuZCAqYXJnKiBpbiBvcmRlciB0byB1c2UgOmNmdW5jOmBQeV9WSVNJVGAuICBUaGlzIGlzIHRvIGVuY291cmFnZQorICAgKnZpc2l0KiBhbmQgKmFyZyogaW4gb3JkZXIgdG8gdXNlIDpjOmZ1bmM6YFB5X1ZJU0lUYC4gIFRoaXMgaXMgdG8gZW5jb3VyYWdlCiAgICB1bmlmb3JtaXR5IGFjcm9zcyB0aGVzZSBib3JpbmcgaW1wbGVtZW50YXRpb25zLgogCiBXZSBhbHNvIG5lZWQgdG8gcHJvdmlkZSBhIG1ldGhvZCBmb3IgY2xlYXJpbmcgYW55IHN1Ym9iamVjdHMgdGhhdCBjYW4KQEAgLTc2MiwxOCArNzYyLDE4IEBACiAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QqKXNlbGYpOwogICAgfQogCi1Ob3RpY2UgdGhlIHVzZSBvZiBhIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiA6Y2Z1bmM6YE5vZGR5X2NsZWFyYC4gV2UgdXNlIHRoZQorTm90aWNlIHRoZSB1c2Ugb2YgYSB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gOmM6ZnVuYzpgTm9kZHlfY2xlYXJgLiBXZSB1c2UgdGhlCiB0ZW1wb3JhcnkgdmFyaWFibGUgc28gdGhhdCB3ZSBjYW4gc2V0IGVhY2ggbWVtYmVyIHRvICpOVUxMKiBiZWZvcmUgZGVjcmVtZW50aW5nCiBpdHMgcmVmZXJlbmNlIGNvdW50LiAgV2UgZG8gdGhpcyBiZWNhdXNlLCBhcyB3YXMgZGlzY3Vzc2VkIGVhcmxpZXIsIGlmIHRoZQogcmVmZXJlbmNlIGNvdW50IGRyb3BzIHRvIHplcm8sIHdlIG1pZ2h0IGNhdXNlIGNvZGUgdG8gcnVuIHRoYXQgY2FsbHMgYmFjayBpbnRvCiB0aGUgb2JqZWN0LiAgSW4gYWRkaXRpb24sIGJlY2F1c2Ugd2Ugbm93IHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uLCB3ZSBhbHNvCiBoYXZlIHRvIHdvcnJ5IGFib3V0IGNvZGUgYmVpbmcgcnVuIHRoYXQgdHJpZ2dlcnMgZ2FyYmFnZSBjb2xsZWN0aW9uLiAgSWYgZ2FyYmFnZQogY29sbGVjdGlvbiBpcyBydW4sIG91ciA6YXR0cjpgdHBfdHJhdmVyc2VgIGhhbmRsZXIgY291bGQgZ2V0IGNhbGxlZC4gV2UgY2FuJ3QKLXRha2UgYSBjaGFuY2Ugb2YgaGF2aW5nIDpjZnVuYzpgTm9kZHlfdHJhdmVyc2VgIGNhbGxlZCB3aGVuIGEgbWVtYmVyJ3MgcmVmZXJlbmNlCit0YWtlIGEgY2hhbmNlIG9mIGhhdmluZyA6YzpmdW5jOmBOb2RkeV90cmF2ZXJzZWAgY2FsbGVkIHdoZW4gYSBtZW1iZXIncyByZWZlcmVuY2UKIGNvdW50IGhhcyBkcm9wcGVkIHRvIHplcm8gYW5kIGl0cyB2YWx1ZSBoYXNuJ3QgYmVlbiBzZXQgdG8gKk5VTEwqLgogCi1QeXRob24gcHJvdmlkZXMgYSA6Y2Z1bmM6YFB5X0NMRUFSYCB0aGF0IGF1dG9tYXRlcyB0aGUgY2FyZWZ1bCBkZWNyZW1lbnRpbmcgb2YKLXJlZmVyZW5jZSBjb3VudHMuICBXaXRoIDpjZnVuYzpgUHlfQ0xFQVJgLCB0aGUgOmNmdW5jOmBOb2RkeV9jbGVhcmAgZnVuY3Rpb24gY2FuCitQeXRob24gcHJvdmlkZXMgYSA6YzpmdW5jOmBQeV9DTEVBUmAgdGhhdCBhdXRvbWF0ZXMgdGhlIGNhcmVmdWwgZGVjcmVtZW50aW5nIG9mCityZWZlcmVuY2UgY291bnRzLiAgV2l0aCA6YzpmdW5jOmBQeV9DTEVBUmAsIHRoZSA6YzpmdW5jOmBOb2RkeV9jbGVhcmAgZnVuY3Rpb24gY2FuCiBiZSBzaW1wbGlmaWVkOjoKIAogICAgc3RhdGljIGludApAQCAtODI5LDcgKzgyOSw3IEBACiAKIFRoZSBwcmltYXJ5IGRpZmZlcmVuY2UgZm9yIGRlcml2ZWQgdHlwZSBvYmplY3RzIGlzIHRoYXQgdGhlIGJhc2UgdHlwZSdzIG9iamVjdAogc3RydWN0dXJlIG11c3QgYmUgdGhlIGZpcnN0IHZhbHVlLiBUaGUgYmFzZSB0eXBlIHdpbGwgYWxyZWFkeSBpbmNsdWRlIHRoZQotOmNmdW5jOmBQeU9iamVjdF9IRUFEYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0cyBzdHJ1Y3R1cmUuCis6YzpmdW5jOmBQeU9iamVjdF9IRUFEYCBhdCB0aGUgYmVnaW5uaW5nIG9mIGl0cyBzdHJ1Y3R1cmUuCiAKIFdoZW4gYSBQeXRob24gb2JqZWN0IGlzIGEgOmNsYXNzOmBTaG9kZHlgIGluc3RhbmNlLCBpdHMgKlB5T2JqZWN0XCoqIHBvaW50ZXIgY2FuCiBiZSBzYWZlbHkgY2FzdCB0byBib3RoICpQeUxpc3RPYmplY3RcKiogYW5kICpTaG9kZHlcKiouIDo6CkBAIC04NTEsMTAgKzg1MSwxMCBAQAogbWVtb3J5IGZvciB0aGUgb2JqZWN0IHdpdGggOmF0dHI6YHRwX2FsbG9jYCwgdGhhdCB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlIGJhc2UKIGNsYXNzIHdoZW4gY2FsbGluZyBpdHMgOmF0dHI6YHRwX25ld2AuCiAKLVdoZW4gZmlsbGluZyBvdXQgdGhlIDpjZnVuYzpgUHlUeXBlT2JqZWN0YCBmb3IgdGhlIDpjbGFzczpgU2hvZGR5YCB0eXBlLCB5b3Ugc2VlCi1hIHNsb3QgZm9yIDpjZnVuYzpgdHBfYmFzZWAuIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMsIHlvdSBjYW4ndAotZmlsbCB0aGF0IGZpZWxkIGRpcmVjdGx5IHdpdGggdGhlIDpjZnVuYzpgUHlMaXN0X1R5cGVgOyBpdCBjYW4gYmUgZG9uZSBsYXRlciBpbgotdGhlIG1vZHVsZSdzIDpjZnVuYzpgaW5pdGAgZnVuY3Rpb24uIDo6CitXaGVuIGZpbGxpbmcgb3V0IHRoZSA6YzpmdW5jOmBQeVR5cGVPYmplY3RgIGZvciB0aGUgOmNsYXNzOmBTaG9kZHlgIHR5cGUsIHlvdSBzZWUKK2Egc2xvdCBmb3IgOmM6ZnVuYzpgdHBfYmFzZWAuIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMsIHlvdSBjYW4ndAorZmlsbCB0aGF0IGZpZWxkIGRpcmVjdGx5IHdpdGggdGhlIDpjOmZ1bmM6YFB5TGlzdF9UeXBlYDsgaXQgY2FuIGJlIGRvbmUgbGF0ZXIgaW4KK3RoZSBtb2R1bGUncyA6YzpmdW5jOmBpbml0YCBmdW5jdGlvbi4gOjoKIAogICAgUHlNT0RJTklUX0ZVTkMKICAgIFB5SW5pdF9zaG9kZHkodm9pZCkKQEAgLTg3NCwxMiArODc0LDEyIEBACiAgICAgICAgcmV0dXJuIG07CiAgICB9CiAKLUJlZm9yZSBjYWxsaW5nIDpjZnVuYzpgUHlUeXBlX1JlYWR5YCwgdGhlIHR5cGUgc3RydWN0dXJlIG11c3QgaGF2ZSB0aGUKK0JlZm9yZSBjYWxsaW5nIDpjOmZ1bmM6YFB5VHlwZV9SZWFkeWAsIHRoZSB0eXBlIHN0cnVjdHVyZSBtdXN0IGhhdmUgdGhlCiA6YXR0cjpgdHBfYmFzZWAgc2xvdCBmaWxsZWQgaW4uIFdoZW4gd2UgYXJlIGRlcml2aW5nIGEgbmV3IHR5cGUsIGl0IGlzIG5vdAotbmVjZXNzYXJ5IHRvIGZpbGwgb3V0IHRoZSA6YXR0cjpgdHBfYWxsb2NgIHNsb3Qgd2l0aCA6Y2Z1bmM6YFB5VHlwZV9HZW5lcmljTmV3YAorbmVjZXNzYXJ5IHRvIGZpbGwgb3V0IHRoZSA6YXR0cjpgdHBfYWxsb2NgIHNsb3Qgd2l0aCA6YzpmdW5jOmBQeVR5cGVfR2VuZXJpY05ld2AKIC0tIHRoZSBhbGxvY2F0ZSBmdW5jdGlvbiBmcm9tIHRoZSBiYXNlIHR5cGUgd2lsbCBiZSBpbmhlcml0ZWQuCiAKLUFmdGVyIHRoYXQsIGNhbGxpbmcgOmNmdW5jOmBQeVR5cGVfUmVhZHlgIGFuZCBhZGRpbmcgdGhlIHR5cGUgb2JqZWN0IHRvIHRoZQorQWZ0ZXIgdGhhdCwgY2FsbGluZyA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIGFuZCBhZGRpbmcgdGhlIHR5cGUgb2JqZWN0IHRvIHRoZQogbW9kdWxlIGlzIHRoZSBzYW1lIGFzIHdpdGggdGhlIGJhc2ljIDpjbGFzczpgTm9kZHlgIGV4YW1wbGVzLgogCiAKQEAgLTg5MSw3ICs4OTEsNyBAQAogVGhpcyBzZWN0aW9uIGFpbXMgdG8gZ2l2ZSBhIHF1aWNrIGZseS1ieSBvbiB0aGUgdmFyaW91cyB0eXBlIG1ldGhvZHMgeW91IGNhbgogaW1wbGVtZW50IGFuZCB3aGF0IHRoZXkgZG8uCiAKLUhlcmUgaXMgdGhlIGRlZmluaXRpb24gb2YgOmN0eXBlOmBQeVR5cGVPYmplY3RgLCB3aXRoIHNvbWUgZmllbGRzIG9ubHkgdXNlZCBpbgorSGVyZSBpcyB0aGUgZGVmaW5pdGlvbiBvZiA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgLCB3aXRoIHNvbWUgZmllbGRzIG9ubHkgdXNlZCBpbgogZGVidWcgYnVpbGRzIG9taXR0ZWQ6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvdHlwZXN0cnVjdC5oCkBAIC05NjksOCArOTY5LDggQEAKIGV4ZWN1dGVkIG1heSBkZXRlY3QgdGhhdCBhbiBleGNlcHRpb24gaGFzIGJlZW4gc2V0LiAgVGhpcyBjYW4gbGVhZCB0byBtaXNsZWFkaW5nCiBlcnJvcnMgZnJvbSB0aGUgaW50ZXJwcmV0ZXIuICBUaGUgcHJvcGVyIHdheSB0byBwcm90ZWN0IGFnYWluc3QgdGhpcyBpcyB0byBzYXZlCiBhIHBlbmRpbmcgZXhjZXB0aW9uIGJlZm9yZSBwZXJmb3JtaW5nIHRoZSB1bnNhZmUgYWN0aW9uLCBhbmQgcmVzdG9yaW5nIGl0IHdoZW4KLWRvbmUuICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIHRoZSA6Y2Z1bmM6YFB5RXJyX0ZldGNoYCBhbmQKLTpjZnVuYzpgUHlFcnJfUmVzdG9yZWAgZnVuY3Rpb25zOjoKK2RvbmUuICBUaGlzIGNhbiBiZSBkb25lIHVzaW5nIHRoZSA6YzpmdW5jOmBQeUVycl9GZXRjaGAgYW5kCis6YzpmdW5jOmBQeUVycl9SZXN0b3JlYCBmdW5jdGlvbnM6OgogCiAgICBzdGF0aWMgdm9pZAogICAgbXlfZGVhbGxvYyhQeU9iamVjdCAqb2JqKQpAQCAtMTA2MCw4ICsxMDYwLDggQEAKIAogUHl0aG9uIHN1cHBvcnRzIHR3byBwYWlycyBvZiBhdHRyaWJ1dGUgaGFuZGxlcnM7IGEgdHlwZSB0aGF0IHN1cHBvcnRzIGF0dHJpYnV0ZXMKIG9ubHkgbmVlZHMgdG8gaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgZm9yIG9uZSBwYWlyLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBvbmUKLXBhaXIgdGFrZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhcyBhIDpjdHlwZTpgY2hhclwqYCwgd2hpbGUgdGhlIG90aGVyCi1hY2NlcHRzIGEgOmN0eXBlOmBQeU9iamVjdFwqYC4gIEVhY2ggdHlwZSBjYW4gdXNlIHdoaWNoZXZlciBwYWlyIG1ha2VzIG1vcmUKK3BhaXIgdGFrZXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBhcyBhIDpjOnR5cGU6YGNoYXJcKmAsIHdoaWxlIHRoZSBvdGhlcgorYWNjZXB0cyBhIDpjOnR5cGU6YFB5T2JqZWN0XCpgLiAgRWFjaCB0eXBlIGNhbiB1c2Ugd2hpY2hldmVyIHBhaXIgbWFrZXMgbW9yZQogc2Vuc2UgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbidzIGNvbnZlbmllbmNlLiA6OgogCiAgICBnZXRhdHRyZnVuYyAgdHBfZ2V0YXR0cjsgICAgICAgIC8qIGNoYXIgKiB2ZXJzaW9uICovCkBAIC0xMDcyLDcgKzEwNzIsNyBAQAogCiBJZiBhY2Nlc3NpbmcgYXR0cmlidXRlcyBvZiBhbiBvYmplY3QgaXMgYWx3YXlzIGEgc2ltcGxlIG9wZXJhdGlvbiAodGhpcyB3aWxsIGJlCiBleHBsYWluZWQgc2hvcnRseSksIHRoZXJlIGFyZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyB3aGljaCBjYW4gYmUgdXNlZCB0bwotcHJvdmlkZSB0aGUgOmN0eXBlOmBQeU9iamVjdFwqYCB2ZXJzaW9uIG9mIHRoZSBhdHRyaWJ1dGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuCitwcm92aWRlIHRoZSA6Yzp0eXBlOmBQeU9iamVjdFwqYCB2ZXJzaW9uIG9mIHRoZSBhdHRyaWJ1dGUgbWFuYWdlbWVudCBmdW5jdGlvbnMuCiBUaGUgYWN0dWFsIG5lZWQgZm9yIHR5cGUtc3BlY2lmaWMgYXR0cmlidXRlIGhhbmRsZXJzIGFsbW9zdCBjb21wbGV0ZWx5CiBkaXNhcHBlYXJlZCBzdGFydGluZyB3aXRoIFB5dGhvbiAyLjIsIHRob3VnaCB0aGVyZSBhcmUgbWFueSBleGFtcGxlcyB3aGljaCBoYXZlCiBub3QgYmVlbiB1cGRhdGVkIHRvIHVzZSBzb21lIG9mIHRoZSBuZXcgZ2VuZXJpYyBtZWNoYW5pc20gdGhhdCBpcyBhdmFpbGFibGUuCkBAIC0xMDg2LDcgKzEwODYsNyBAQAogTW9zdCBleHRlbnNpb24gdHlwZXMgb25seSB1c2UgKnNpbXBsZSogYXR0cmlidXRlcy4gIFNvLCB3aGF0IG1ha2VzIHRoZQogYXR0cmlidXRlcyBzaW1wbGU/ICBUaGVyZSBhcmUgb25seSBhIGNvdXBsZSBvZiBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQ6CiAKLSMuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGVzIG11c3QgYmUga25vd24gd2hlbiA6Y2Z1bmM6YFB5VHlwZV9SZWFkeWAgaXMKKyMuIFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGVzIG11c3QgYmUga25vd24gd2hlbiA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIGlzCiAgICBjYWxsZWQuCiAKICMuIE5vIHNwZWNpYWwgcHJvY2Vzc2luZyBpcyBuZWVkZWQgdG8gcmVjb3JkIHRoYXQgYW4gYXR0cmlidXRlIHdhcyBsb29rZWQgdXAgb3IKQEAgLTEwOTUsNyArMTA5NSw3IEBACiBOb3RlIHRoYXQgdGhpcyBsaXN0IGRvZXMgbm90IHBsYWNlIGFueSByZXN0cmljdGlvbnMgb24gdGhlIHZhbHVlcyBvZiB0aGUKIGF0dHJpYnV0ZXMsIHdoZW4gdGhlIHZhbHVlcyBhcmUgY29tcHV0ZWQsIG9yIGhvdyByZWxldmFudCBkYXRhIGlzIHN0b3JlZC4KIAotV2hlbiA6Y2Z1bmM6YFB5VHlwZV9SZWFkeWAgaXMgY2FsbGVkLCBpdCB1c2VzIHRocmVlIHRhYmxlcyByZWZlcmVuY2VkIGJ5IHRoZQorV2hlbiA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgIGlzIGNhbGxlZCwgaXQgdXNlcyB0aHJlZSB0YWJsZXMgcmVmZXJlbmNlZCBieSB0aGUKIHR5cGUgb2JqZWN0IHRvIGNyZWF0ZSA6dGVybTpgZGVzY3JpcHRvcmBccyB3aGljaCBhcmUgcGxhY2VkIGluIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZQogdHlwZSBvYmplY3QuICBFYWNoIGRlc2NyaXB0b3IgY29udHJvbHMgYWNjZXNzIHRvIG9uZSBhdHRyaWJ1dGUgb2YgdGhlIGluc3RhbmNlCiBvYmplY3QuICBFYWNoIG9mIHRoZSB0YWJsZXMgaXMgb3B0aW9uYWw7IGlmIGFsbCB0aHJlZSBhcmUgKk5VTEwqLCBpbnN0YW5jZXMgb2YKQEAgLTExMTAsNyArMTExMCw3IEBACiAgICBzdHJ1Y3QgUHlHZXRTZXREZWYgKnRwX2dldHNldDsKIAogSWYgOmF0dHI6YHRwX21ldGhvZHNgIGlzIG5vdCAqTlVMTCosIGl0IG11c3QgcmVmZXIgdG8gYW4gYXJyYXkgb2YKLTpjdHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZXMuICBFYWNoIGVudHJ5IGluIHRoZSB0YWJsZSBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzCis6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlcy4gIEVhY2ggZW50cnkgaW4gdGhlIHRhYmxlIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMKIHN0cnVjdHVyZTo6CiAKICAgIHR5cGVkZWYgc3RydWN0IFB5TWV0aG9kRGVmIHsKQEAgLTExOTIsOSArMTE5Miw5IEBACiBUeXBlLXNwZWNpZmljIEF0dHJpYnV0ZSBNYW5hZ2VtZW50CiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUZvciBzaW1wbGljaXR5LCBvbmx5IHRoZSA6Y3R5cGU6YGNoYXJcKmAgdmVyc2lvbiB3aWxsIGJlIGRlbW9uc3RyYXRlZCBoZXJlOyB0aGUKLXR5cGUgb2YgdGhlIG5hbWUgcGFyYW1ldGVyIGlzIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgOmN0eXBlOmBjaGFyXCpgCi1hbmQgOmN0eXBlOmBQeU9iamVjdFwqYCBmbGF2b3JzIG9mIHRoZSBpbnRlcmZhY2UuIFRoaXMgZXhhbXBsZSBlZmZlY3RpdmVseSBkb2VzCitGb3Igc2ltcGxpY2l0eSwgb25seSB0aGUgOmM6dHlwZTpgY2hhclwqYCB2ZXJzaW9uIHdpbGwgYmUgZGVtb25zdHJhdGVkIGhlcmU7IHRoZQordHlwZSBvZiB0aGUgbmFtZSBwYXJhbWV0ZXIgaXMgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSA6Yzp0eXBlOmBjaGFyXCpgCithbmQgOmM6dHlwZTpgUHlPYmplY3RcKmAgZmxhdm9ycyBvZiB0aGUgaW50ZXJmYWNlLiBUaGlzIGV4YW1wbGUgZWZmZWN0aXZlbHkgZG9lcwogdGhlIHNhbWUgdGhpbmcgYXMgdGhlIGdlbmVyaWMgZXhhbXBsZSBhYm92ZSwgYnV0IGRvZXMgbm90IHVzZSB0aGUgZ2VuZXJpYwogc3VwcG9ydCBhZGRlZCBpbiBQeXRob24gMi4yLiAgSXQgZXhwbGFpbnMgaG93IHRoZSBoYW5kbGVyIGZ1bmN0aW9ucyBhcmUKIGNhbGxlZCwgc28gdGhhdCBpZiB5b3UgZG8gbmVlZCB0byBleHRlbmQgdGhlaXIgZnVuY3Rpb25hbGl0eSwgeW91J2xsIHVuZGVyc3RhbmQKQEAgLTEyNDIsOCArMTI0Miw4IEBACiAKIFRoZSA6YXR0cjpgdHBfcmljaGNvbXBhcmVgIGhhbmRsZXIgaXMgY2FsbGVkIHdoZW4gY29tcGFyaXNvbnMgYXJlIG5lZWRlZC4gIEl0IGlzCiBhbmFsb2dvdXMgdG8gdGhlIDpyZWY6YHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIDxyaWNoY21wZnVuY3M+YCwgbGlrZQotOm1ldGg6YF9fbHRfX2AsIGFuZCBhbHNvIGNhbGxlZCBieSA6Y2Z1bmM6YFB5T2JqZWN0X1JpY2hDb21wYXJlYCBhbmQKLTpjZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVCb29sYC4KKzptZXRoOmBfX2x0X19gLCBhbmQgYWxzbyBjYWxsZWQgYnkgOmM6ZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVgIGFuZAorOmM6ZnVuYzpgUHlPYmplY3RfUmljaENvbXBhcmVCb29sYC4KIAogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0d28gUHl0aG9uIG9iamVjdHMgYW5kIHRoZSBvcGVyYXRvciBhcyBhcmd1bWVudHMsCiB3aGVyZSB0aGUgb3BlcmF0b3IgaXMgb25lIG9mIGBgUHlfRVFgYCwgYGBQeV9ORWBgLCBgYFB5X0xFYGAsIGBgUHlfR1RgYCwKQEAgLTEzMDYsOCArMTMwNiw4IEBACiAKIElmIHlvdSB3aXNoIHlvdXIgb2JqZWN0IHRvIGJlIGFibGUgdG8gYWN0IGxpa2UgYSBudW1iZXIsIGEgc2VxdWVuY2UsIG9yIGEKIG1hcHBpbmcgb2JqZWN0LCB0aGVuIHlvdSBwbGFjZSB0aGUgYWRkcmVzcyBvZiBhIHN0cnVjdHVyZSB0aGF0IGltcGxlbWVudHMgdGhlIEMKLXR5cGUgOmN0eXBlOmBQeU51bWJlck1ldGhvZHNgLCA6Y3R5cGU6YFB5U2VxdWVuY2VNZXRob2RzYCwgb3IKLTpjdHlwZTpgUHlNYXBwaW5nTWV0aG9kc2AsIHJlc3BlY3RpdmVseS4gSXQgaXMgdXAgdG8geW91IHRvIGZpbGwgaW4gdGhpcwordHlwZSA6Yzp0eXBlOmBQeU51bWJlck1ldGhvZHNgLCA6Yzp0eXBlOmBQeVNlcXVlbmNlTWV0aG9kc2AsIG9yCis6Yzp0eXBlOmBQeU1hcHBpbmdNZXRob2RzYCwgcmVzcGVjdGl2ZWx5LiBJdCBpcyB1cCB0byB5b3UgdG8gZmlsbCBpbiB0aGlzCiBzdHJ1Y3R1cmUgd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZXMuIFlvdSBjYW4gZmluZCBleGFtcGxlcyBvZiB0aGUgdXNlIG9mIGVhY2ggb2YKIHRoZXNlIGluIHRoZSA6ZmlsZTpgT2JqZWN0c2AgZGlyZWN0b3J5IG9mIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4gOjoKIApAQCAtMTMzOSwxMSArMTMzOSwxMSBAQAogICAgdGhlIGNhbGwgaXMgYGBvYmoxKCdoZWxsbycpYGAsIHRoZW4gKmFyZzEqIGlzIGBgb2JqMWBgLgogCiAjLiAqYXJnMiogaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBhcmd1bWVudHMgdG8gdGhlIGNhbGwuICBZb3UgY2FuIHVzZQotICAgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMuCisgICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB0byBleHRyYWN0IHRoZSBhcmd1bWVudHMuCiAKICMuICphcmczKiBpcyBhIGRpY3Rpb25hcnkgb2Yga2V5d29yZCBhcmd1bWVudHMgdGhhdCB3ZXJlIHBhc3NlZC4gSWYgdGhpcyBpcwogICAgbm9uLSpOVUxMKiBhbmQgeW91IHN1cHBvcnQga2V5d29yZCBhcmd1bWVudHMsIHVzZQotICAgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIHRvIGV4dHJhY3QgdGhlIGFyZ3VtZW50cy4gIElmIHlvdSBkbyBub3QKKyAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AgdG8gZXh0cmFjdCB0aGUgYXJndW1lbnRzLiAgSWYgeW91IGRvIG5vdAogICAgd2FudCB0byBzdXBwb3J0IGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGlzIGlzIG5vbi0qTlVMTCosIHJhaXNlIGEKICAgIDpleGM6YFR5cGVFcnJvcmAgd2l0aCBhIG1lc3NhZ2Ugc2F5aW5nIHRoYXQga2V5d29yZCBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQuCiAKQEAgLTE0MTcsNyArMTQxNyw3IEBACiB0aG9zZSBvYmplY3RzIHdoaWNoIGRvIG5vdCBiZW5lZml0IGJ5IHdlYWsgcmVmZXJlbmNpbmcgKHN1Y2ggYXMgbnVtYmVycykuCiAKIEZvciBhbiBvYmplY3QgdG8gYmUgd2Vha2x5IHJlZmVyZW5jYWJsZSwgdGhlIGV4dGVuc2lvbiBtdXN0IGluY2x1ZGUgYQotOmN0eXBlOmBQeU9iamVjdFwqYCBmaWVsZCBpbiB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgdXNlIG9mIHRoZSB3ZWFrCis6Yzp0eXBlOmBQeU9iamVjdFwqYCBmaWVsZCBpbiB0aGUgaW5zdGFuY2Ugc3RydWN0dXJlIGZvciB0aGUgdXNlIG9mIHRoZSB3ZWFrCiByZWZlcmVuY2UgbWVjaGFuaXNtOyBpdCBtdXN0IGJlIGluaXRpYWxpemVkIHRvICpOVUxMKiBieSB0aGUgb2JqZWN0J3MKIGNvbnN0cnVjdG9yLiAgSXQgbXVzdCBhbHNvIHNldCB0aGUgOmF0dHI6YHRwX3dlYWtsaXN0b2Zmc2V0YCBmaWVsZCBvZiB0aGUKIGNvcnJlc3BvbmRpbmcgdHlwZSBvYmplY3QgdG8gdGhlIG9mZnNldCBvZiB0aGUgZmllbGQuIEZvciBleGFtcGxlLCB0aGUgaW5zdGFuY2UKQEAgLTE0OTMsNyArMTQ5Myw3IEBACiBvZiB0aGUgZnVuY3Rpb24geW91IHdhbnQgdG8gaW1wbGVtZW50LgogCiBXaGVuIHlvdSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgdHlwZSB5b3UgYXJlCi1pbXBsZW1lbnRpbmcsIHVzZSB0aGUgOmNmdW5jOmBQeU9iamVjdF9UeXBlQ2hlY2tgIGZ1bmN0aW9uLiBBIHNhbXBsZSBvZiBpdHMgdXNlCitpbXBsZW1lbnRpbmcsIHVzZSB0aGUgOmM6ZnVuYzpgUHlPYmplY3RfVHlwZUNoZWNrYCBmdW5jdGlvbi4gQSBzYW1wbGUgb2YgaXRzIHVzZQogbWlnaHQgYmUgc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzo6CiAKICAgIGlmICghIFB5T2JqZWN0X1R5cGVDaGVjayhzb21lX29iamVjdCwgJk15VHlwZSkpIHsKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0CmluZGV4IGQxZDBjZjcuLjNmZDVlNTcgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdApAQCAtOTgsOCArOTgsOCBAQAogICAgaXQuICBDb3B5IHlvdXIgQyBzb3VyY2VzIGludG8gaXQuICBOb3RlIHRoYXQgdGhlIG1vZHVsZSBzb3VyY2UgZmlsZSBuYW1lIGRvZXMKICAgIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIG1hdGNoIHRoZSBtb2R1bGUgbmFtZSwgYnV0IHRoZSBuYW1lIG9mIHRoZQogICAgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc2hvdWxkIG1hdGNoIHRoZSBtb2R1bGUgbmFtZSAtLS0geW91IGNhbiBvbmx5IGltcG9ydCBhCi0gICBtb2R1bGUgOm1vZDpgc3BhbWAgaWYgaXRzIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGlzIGNhbGxlZCA6Y2Z1bmM6YGluaXRzcGFtYCwKLSAgIGFuZCBpdCBzaG91bGQgY2FsbCA6Y2Z1bmM6YFB5X0luaXRNb2R1bGVgIHdpdGggdGhlIHN0cmluZyBgYCJzcGFtImBgIGFzIGl0cworICAgbW9kdWxlIDptb2Q6YHNwYW1gIGlmIGl0cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQgOmM6ZnVuYzpgaW5pdHNwYW1gLAorICAgYW5kIGl0IHNob3VsZCBjYWxsIDpjOmZ1bmM6YFB5X0luaXRNb2R1bGVgIHdpdGggdGhlIHN0cmluZyBgYCJzcGFtImBgIGFzIGl0cwogICAgZmlyc3QgYXJndW1lbnQgKHVzZSB0aGUgbWluaW1hbCA6ZmlsZTpgZXhhbXBsZS5jYCBpbiB0aGlzIGRpcmVjdG9yeSBhcyBhIGd1aWRlKS4KICAgIEJ5IGNvbnZlbnRpb24sIGl0IGxpdmVzIGluIGEgZmlsZSBjYWxsZWQgOmZpbGU6YHNwYW0uY2Agb3IgOmZpbGU6YHNwYW1tb2R1bGUuY2AuCiAgICBUaGUgb3V0cHV0IGZpbGUgc2hvdWxkIGJlIGNhbGxlZCA6ZmlsZTpgc3BhbS5weWRgIChpbiBSZWxlYXNlIG1vZGUpIG9yCkBAIC0yNTksNyArMjU5LDcgQEAKIAogVGhlIGZpcnN0IGNvbW1hbmQgY3JlYXRlZCB0aHJlZSBmaWxlczogOmZpbGU6YHNwYW0ub2JqYCwgOmZpbGU6YHNwYW0uZGxsYCBhbmQKIDpmaWxlOmBzcGFtLmxpYmAuICA6ZmlsZTpgU3BhbS5kbGxgIGRvZXMgbm90IGNvbnRhaW4gYW55IFB5dGhvbiBmdW5jdGlvbnMgKHN1Y2gKLWFzIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWApLCBidXQgaXQgZG9lcyBrbm93IGhvdyB0byBmaW5kIHRoZSBQeXRob24gY29kZQorYXMgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWApLCBidXQgaXQgZG9lcyBrbm93IGhvdyB0byBmaW5kIHRoZSBQeXRob24gY29kZQogdGhhbmtzIHRvIDpmaWxlOmBweXRob25YWS5saWJgLgogCiBUaGUgc2Vjb25kIGNvbW1hbmQgY3JlYXRlZCA6ZmlsZTpgbmkuZGxsYCAoYW5kIDpmaWxlOmAub2JqYCBhbmQgOmZpbGU6YC5saWJgKSwKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZGVzaWduLnJzdCBiL0RvYy9mYXEvZGVzaWduLnJzdAppbmRleCAzODg5Nzc0Li5iOWZhZjU3IDEwMDY0NAotLS0gYS9Eb2MvZmFxL2Rlc2lnbi5yc3QKKysrIGIvRG9jL2ZhcS9kZXNpZ24ucnN0CkBAIC00MTgsMTEgKzQxOCw5IEBACiAuLiBYWFggY2hlY2sgd2hpY2ggb2YgdGhlc2UgcHJvamVjdHMgYXJlIHN0aWxsIGFsaXZlCiAKIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgcHJvZ3JhbXMgd2hpY2ggbWFrZSBpdCBlYXNpZXIgdG8gaW50ZXJtaW5nbGUgUHl0aG9uIGFuZCBDCi1jb2RlIGluIHZhcmlvdXMgd2F5cyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4gIFNlZSwgZm9yIGV4YW1wbGUsIGBQc3ljbwotPGh0dHA6Ly9wc3ljby5zb3VyY2Vmb3JnZS5uZXQvPmBfLCBgUHlyZXgKLTxodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9+Z3JlZy9weXRob24vUHlyZXgvPmBfLCBgUHlJbmxpbmUKLTxodHRwOi8vcHlpbmxpbmUuc291cmNlZm9yZ2UubmV0Lz5gXywgYFB5MkNtb2QKLTxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B5MmNtb2QvPmBfLCBhbmQgYFdlYXZlCitjb2RlIGluIHZhcmlvdXMgd2F5cyB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZS4gIFNlZSwgZm9yIGV4YW1wbGUsIGBDeXRob24KKzxodHRwOi8vY3l0aG9uLm9yZy8+YF8sIGBQeXJleAorPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L35ncmVnL3B5dGhvbi9QeXJleC8+YF8gYW5kIGBXZWF2ZQogPGh0dHA6Ly93d3cuc2NpcHkub3JnL1dlYXZlPmBfLgogCiAKQEAgLTY0OSw5ICs2NDcsMTAgQEAKIHlvdSB3b24ndCBiZSBmb29sZWQgaW50byBhY2NpZGVudGFsbHkgb3ZlcndyaXRpbmcgYSBsaXN0IHdoZW4geW91IG5lZWQgYSBzb3J0ZWQKIGNvcHkgYnV0IGFsc28gbmVlZCB0byBrZWVwIHRoZSB1bnNvcnRlZCB2ZXJzaW9uIGFyb3VuZC4KIAotSW4gUHl0aG9uIDIuNCBhIG5ldyBidWlsdGluIC0tIDpmdW5jOmBzb3J0ZWRgIC0tIGhhcyBiZWVuIGFkZGVkLiAgVGhpcyBmdW5jdGlvbgotY3JlYXRlcyBhIG5ldyBsaXN0IGZyb20gYSBwcm92aWRlZCBpdGVyYWJsZSwgc29ydHMgaXQgYW5kIHJldHVybnMgaXQuICBGb3IKLWV4YW1wbGUsIGhlcmUncyBob3cgdG8gaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIGEgZGljdGlvbmFyeSBpbiBzb3J0ZWQgb3JkZXI6OgorSW4gUHl0aG9uIDIuNCBhIG5ldyBidWlsdC1pbiBmdW5jdGlvbiAtLSA6ZnVuYzpgc29ydGVkYCAtLSBoYXMgYmVlbiBhZGRlZC4KK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBsaXN0IGZyb20gYSBwcm92aWRlZCBpdGVyYWJsZSwgc29ydHMgaXQgYW5kIHJldHVybnMKK2l0LiAgRm9yIGV4YW1wbGUsIGhlcmUncyBob3cgdG8gaXRlcmF0ZSBvdmVyIHRoZSBrZXlzIG9mIGEgZGljdGlvbmFyeSBpbiBzb3J0ZWQKK29yZGVyOjoKIAogICAgZm9yIGtleSBpbiBzb3J0ZWQobXlkaWN0KToKICAgICAgICAuLi4gIyBkbyB3aGF0ZXZlciB3aXRoIG15ZGljdFtrZXldLi4uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2V4dGVuZGluZy5yc3QgYi9Eb2MvZmFxL2V4dGVuZGluZy5yc3QKaW5kZXggNjUyN2ZmMS4uZmE4ZTZlNyAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9leHRlbmRpbmcucnN0CisrKyBiL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdApAQCAtNDUsMTAgKzQ1LDExIEBACiB2ZXJ5IGxpdHRsZSBlZmZvcnQsIGFzIGxvbmcgYXMgeW91J3JlIHJ1bm5pbmcgb24gYSBtYWNoaW5lIHdpdGggYW4KIHg4Ni1jb21wYXRpYmxlIHByb2Nlc3Nvci4KIAotYFB5cmV4IDxodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9+Z3JlZy9weXRob24vUHlyZXgvPmBfIGlzIGEgY29tcGlsZXIKLXRoYXQgYWNjZXB0cyBhIHNsaWdodGx5IG1vZGlmaWVkIGZvcm0gb2YgUHl0aG9uIGFuZCBnZW5lcmF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcKLUMgY29kZS4gIFB5cmV4IG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGFuIGV4dGVuc2lvbiB3aXRob3V0IGhhdmluZyB0byBsZWFybgotUHl0aG9uJ3MgQyBBUEkuCitgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZz5gXyBhbmQgaXRzIHJlbGF0aXZlIGBQeXJleAorPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L35ncmVnL3B5dGhvbi9QeXJleC8+YF8gYXJlIGNvbXBpbGVycwordGhhdCBhY2NlcHQgYSBzbGlnaHRseSBtb2RpZmllZCBmb3JtIG9mIFB5dGhvbiBhbmQgZ2VuZXJhdGUgdGhlIGNvcnJlc3BvbmRpbmcKK0MgY29kZS4gIEN5dGhvbiBhbmQgUHlyZXggbWFrZSBpdCBwb3NzaWJsZSB0byB3cml0ZSBhbiBleHRlbnNpb24gd2l0aG91dCBoYXZpbmcKK3RvIGxlYXJuIFB5dGhvbidzIEMgQVBJLgogCiBJZiB5b3UgbmVlZCB0byBpbnRlcmZhY2UgdG8gc29tZSBDIG9yIEMrKyBsaWJyYXJ5IGZvciB3aGljaCBubyBQeXRob24gZXh0ZW5zaW9uCiBjdXJyZW50bHkgZXhpc3RzLCB5b3UgY2FuIHRyeSB3cmFwcGluZyB0aGUgbGlicmFyeSdzIGRhdGEgdHlwZXMgYW5kIGZ1bmN0aW9ucwpAQCAtNTYsNDcgKzU3LDQ4IEBACiA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwLz5gX18sIGBDWFgKIDxodHRwOi8vY3h4LnNvdXJjZWZvcmdlLm5ldC8+YF8gYEJvb3N0CiA8aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9weXRob24vZG9jL2luZGV4Lmh0bWw+YF8sIG9yIGBXZWF2ZQotPGh0dHA6Ly93d3cuc2NpcHkub3JnL1dlYXZlPmBfIGFyZSBhbHNvIGFsdGVybmF0aXZlcyBmb3Igd3JhcHBpbmcgQysrIGxpYnJhcmllcy4KKzxodHRwOi8vd3d3LnNjaXB5Lm9yZy9XZWF2ZT5gXyBhcmUgYWxzbyBhbHRlcm5hdGl2ZXMgZm9yIHdyYXBwaW5nCitDKysgbGlicmFyaWVzLgogCiAKIEhvdyBjYW4gSSBleGVjdXRlIGFyYml0cmFyeSBQeXRob24gc3RhdGVtZW50cyBmcm9tIEM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgaGlnaGVzdC1sZXZlbCBmdW5jdGlvbiB0byBkbyB0aGlzIGlzIDpjZnVuYzpgUHlSdW5fU2ltcGxlU3RyaW5nYCB3aGljaCB0YWtlcworVGhlIGhpZ2hlc3QtbGV2ZWwgZnVuY3Rpb24gdG8gZG8gdGhpcyBpcyA6YzpmdW5jOmBQeVJ1bl9TaW1wbGVTdHJpbmdgIHdoaWNoIHRha2VzCiBhIHNpbmdsZSBzdHJpbmcgYXJndW1lbnQgdG8gYmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG1vZHVsZQogYGBfX21haW5fX2BgIGFuZCByZXR1cm5zIDAgZm9yIHN1Y2Nlc3MgYW5kIC0xIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycmVkCiAoaW5jbHVkaW5nIGBgU3ludGF4RXJyb3JgYCkuICBJZiB5b3Ugd2FudCBtb3JlIGNvbnRyb2wsIHVzZQotOmNmdW5jOmBQeVJ1bl9TdHJpbmdgOyBzZWUgdGhlIHNvdXJjZSBmb3IgOmNmdW5jOmBQeVJ1bl9TaW1wbGVTdHJpbmdgIGluCis6YzpmdW5jOmBQeVJ1bl9TdHJpbmdgOyBzZWUgdGhlIHNvdXJjZSBmb3IgOmM6ZnVuYzpgUHlSdW5fU2ltcGxlU3RyaW5nYCBpbgogYGBQeXRob24vcHl0aG9ucnVuLmNgYC4KIAogCiBIb3cgY2FuIEkgZXZhbHVhdGUgYW4gYXJiaXRyYXJ5IFB5dGhvbiBleHByZXNzaW9uIGZyb20gQz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DYWxsIHRoZSBmdW5jdGlvbiA6Y2Z1bmM6YFB5UnVuX1N0cmluZ2AgZnJvbSB0aGUgcHJldmlvdXMgcXVlc3Rpb24gd2l0aCB0aGUKLXN0YXJ0IHN5bWJvbCA6Y2RhdGE6YFB5X2V2YWxfaW5wdXRgOyBpdCBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgZXZhbHVhdGVzIGl0IGFuZAorQ2FsbCB0aGUgZnVuY3Rpb24gOmM6ZnVuYzpgUHlSdW5fU3RyaW5nYCBmcm9tIHRoZSBwcmV2aW91cyBxdWVzdGlvbiB3aXRoIHRoZQorc3RhcnQgc3ltYm9sIDpjOmRhdGE6YFB5X2V2YWxfaW5wdXRgOyBpdCBwYXJzZXMgYW4gZXhwcmVzc2lvbiwgZXZhbHVhdGVzIGl0IGFuZAogcmV0dXJucyBpdHMgdmFsdWUuCiAKIAogSG93IGRvIEkgZXh0cmFjdCBDIHZhbHVlcyBmcm9tIGEgUHl0aG9uIG9iamVjdD8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoYXQgZGVwZW5kcyBvbiB0aGUgb2JqZWN0J3MgdHlwZS4gIElmIGl0J3MgYSB0dXBsZSwgOmNmdW5jOmBQeVR1cGxlX1NpemVgCi1yZXR1cm5zIGl0cyBsZW5ndGggYW5kIDpjZnVuYzpgUHlUdXBsZV9HZXRJdGVtYCByZXR1cm5zIHRoZSBpdGVtIGF0IGEgc3BlY2lmaWVkCi1pbmRleC4gIExpc3RzIGhhdmUgc2ltaWxhciBmdW5jdGlvbnMsIDpjZnVuYzpgUHlMaXN0U2l6ZWAgYW5kCi06Y2Z1bmM6YFB5TGlzdF9HZXRJdGVtYC4KK1RoYXQgZGVwZW5kcyBvbiB0aGUgb2JqZWN0J3MgdHlwZS4gIElmIGl0J3MgYSB0dXBsZSwgOmM6ZnVuYzpgUHlUdXBsZV9TaXplYAorcmV0dXJucyBpdHMgbGVuZ3RoIGFuZCA6YzpmdW5jOmBQeVR1cGxlX0dldEl0ZW1gIHJldHVybnMgdGhlIGl0ZW0gYXQgYSBzcGVjaWZpZWQKK2luZGV4LiAgTGlzdHMgaGF2ZSBzaW1pbGFyIGZ1bmN0aW9ucywgOmM6ZnVuYzpgUHlMaXN0U2l6ZWAgYW5kCis6YzpmdW5jOmBQeUxpc3RfR2V0SXRlbWAuCiAKLUZvciBzdHJpbmdzLCA6Y2Z1bmM6YFB5U3RyaW5nX1NpemVgIHJldHVybnMgaXRzIGxlbmd0aCBhbmQKLTpjZnVuYzpgUHlTdHJpbmdfQXNTdHJpbmdgIGEgcG9pbnRlciB0byBpdHMgdmFsdWUuICBOb3RlIHRoYXQgUHl0aG9uIHN0cmluZ3MgbWF5Ci1jb250YWluIG51bGwgYnl0ZXMgc28gQydzIDpjZnVuYzpgc3RybGVuYCBzaG91bGQgbm90IGJlIHVzZWQuCitGb3Igc3RyaW5ncywgOmM6ZnVuYzpgUHlTdHJpbmdfU2l6ZWAgcmV0dXJucyBpdHMgbGVuZ3RoIGFuZAorOmM6ZnVuYzpgUHlTdHJpbmdfQXNTdHJpbmdgIGEgcG9pbnRlciB0byBpdHMgdmFsdWUuICBOb3RlIHRoYXQgUHl0aG9uIHN0cmluZ3MgbWF5Citjb250YWluIG51bGwgYnl0ZXMgc28gQydzIDpjOmZ1bmM6YHN0cmxlbmAgc2hvdWxkIG5vdCBiZSB1c2VkLgogCiBUbyB0ZXN0IHRoZSB0eXBlIG9mIGFuIG9iamVjdCwgZmlyc3QgbWFrZSBzdXJlIGl0IGlzbid0ICpOVUxMKiwgYW5kIHRoZW4gdXNlCi06Y2Z1bmM6YFB5U3RyaW5nX0NoZWNrYCwgOmNmdW5jOmBQeVR1cGxlX0NoZWNrYCwgOmNmdW5jOmBQeUxpc3RfQ2hlY2tgLCBldGMuCis6YzpmdW5jOmBQeVN0cmluZ19DaGVja2AsIDpjOmZ1bmM6YFB5VHVwbGVfQ2hlY2tgLCA6YzpmdW5jOmBQeUxpc3RfQ2hlY2tgLCBldGMuCiAKIFRoZXJlIGlzIGFsc28gYSBoaWdoLWxldmVsIEFQSSB0byBQeXRob24gb2JqZWN0cyB3aGljaCBpcyBwcm92aWRlZCBieSB0aGUKIHNvLWNhbGxlZCAnYWJzdHJhY3QnIGludGVyZmFjZSAtLSByZWFkIGBgSW5jbHVkZS9hYnN0cmFjdC5oYGAgZm9yIGZ1cnRoZXIKIGRldGFpbHMuICBJdCBhbGxvd3MgaW50ZXJmYWNpbmcgd2l0aCBhbnkga2luZCBvZiBQeXRob24gc2VxdWVuY2UgdXNpbmcgY2FsbHMKLWxpa2UgOmNmdW5jOmBQeVNlcXVlbmNlX0xlbmd0aGAsIDpjZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCwgZXRjLikgIGFzIHdlbGwgYXMKK2xpa2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9MZW5ndGhgLCA6YzpmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gLCBldGMuKSAgYXMgd2VsbCBhcwogbWFueSBvdGhlciB1c2VmdWwgcHJvdG9jb2xzLgogCiAKQEAgLTEwNSw3ICsxMDcsNyBAQAogCiBZb3UgY2FuJ3QuICBVc2UgYGB0ID0gUHlUdXBsZV9OZXcobilgYCBpbnN0ZWFkLCBhbmQgZmlsbCBpdCB3aXRoIG9iamVjdHMgdXNpbmcKIGBgUHlUdXBsZV9TZXRJdGVtKHQsIGksIG8pYGAgLS0gbm90ZSB0aGF0IHRoaXMgImVhdHMiIGEgcmVmZXJlbmNlIGNvdW50IG9mCi1gYG9gYCwgc28geW91IGhhdmUgdG8gOmNmdW5jOmBQeV9JTkNSRUZgIGl0LiAgTGlzdHMgaGF2ZSBzaW1pbGFyIGZ1bmN0aW9ucworYGBvYGAsIHNvIHlvdSBoYXZlIHRvIDpjOmZ1bmM6YFB5X0lOQ1JFRmAgaXQuICBMaXN0cyBoYXZlIHNpbWlsYXIgZnVuY3Rpb25zCiBgYFB5TGlzdF9OZXcobilgYCBhbmQgYGBQeUxpc3RfU2V0SXRlbShsLCBpLCBvKWBgLiAgTm90ZSB0aGF0IHlvdSAqbXVzdCogc2V0IGFsbAogdGhlIHR1cGxlIGl0ZW1zIHRvIHNvbWUgdmFsdWUgYmVmb3JlIHlvdSBwYXNzIHRoZSB0dXBsZSB0byBQeXRob24gY29kZSAtLQogYGBQeVR1cGxlX05ldyhuKWBgIGluaXRpYWxpemVzIHRoZW0gdG8gTlVMTCwgd2hpY2ggaXNuJ3QgYSB2YWxpZCBQeXRob24gdmFsdWUuCkBAIC0xMTQsOSArMTE2LDkgQEAKIEhvdyBkbyBJIGNhbGwgYW4gb2JqZWN0J3MgbWV0aG9kIGZyb20gQz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIDpjZnVuYzpgUHlPYmplY3RfQ2FsbE1ldGhvZGAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2FsbCBhbiBhcmJpdHJhcnkKK1RoZSA6YzpmdW5jOmBQeU9iamVjdF9DYWxsTWV0aG9kYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjYWxsIGFuIGFyYml0cmFyeQogbWV0aG9kIG9mIGFuIG9iamVjdC4gIFRoZSBwYXJhbWV0ZXJzIGFyZSB0aGUgb2JqZWN0LCB0aGUgbmFtZSBvZiB0aGUgbWV0aG9kIHRvCi1jYWxsLCBhIGZvcm1hdCBzdHJpbmcgbGlrZSB0aGF0IHVzZWQgd2l0aCA6Y2Z1bmM6YFB5X0J1aWxkVmFsdWVgLCBhbmQgdGhlCitjYWxsLCBhIGZvcm1hdCBzdHJpbmcgbGlrZSB0aGF0IHVzZWQgd2l0aCA6YzpmdW5jOmBQeV9CdWlsZFZhbHVlYCwgYW5kIHRoZQogYXJndW1lbnQgdmFsdWVzOjoKIAogICAgUHlPYmplY3QgKgpAQCAtMTI0LDcgKzEyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFyZ19mb3JtYXQsIC4uLik7CiAKIFRoaXMgd29ya3MgZm9yIGFueSBvYmplY3QgdGhhdCBoYXMgbWV0aG9kcyAtLSB3aGV0aGVyIGJ1aWx0LWluIG9yIHVzZXItZGVmaW5lZC4KLVlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGV2ZW50dWFsbHkgOmNmdW5jOmBQeV9ERUNSRUZgXCAnaW5nIHRoZSByZXR1cm4gdmFsdWUuCitZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IDpjOmZ1bmM6YFB5X0RFQ1JFRmBcICdpbmcgdGhlIHJldHVybiB2YWx1ZS4KIAogVG8gY2FsbCwgZS5nLiwgYSBmaWxlIG9iamVjdCdzICJzZWVrIiBtZXRob2Qgd2l0aCBhcmd1bWVudHMgMTAsIDAgKGFzc3VtaW5nIHRoZQogZmlsZSBvYmplY3QgcG9pbnRlciBpcyAiZiIpOjoKQEAgLTEzNyw3ICsxMzksNyBAQAogICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgIH0KIAotTm90ZSB0aGF0IHNpbmNlIDpjZnVuYzpgUHlPYmplY3RfQ2FsbE9iamVjdGAgKmFsd2F5cyogd2FudHMgYSB0dXBsZSBmb3IgdGhlCitOb3RlIHRoYXQgc2luY2UgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbE9iamVjdGAgKmFsd2F5cyogd2FudHMgYSB0dXBsZSBmb3IgdGhlCiBhcmd1bWVudCBsaXN0LCB0byBjYWxsIGEgZnVuY3Rpb24gd2l0aG91dCBhcmd1bWVudHMsIHBhc3MgIigpIiBmb3IgdGhlIGZvcm1hdCwKIGFuZCB0byBjYWxsIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQsIHN1cnJvdW5kIHRoZSBhcmd1bWVudCBpbiBwYXJlbnRoZXNlcywKIGUuZy4gIihpKSIuCkBAIC0xODgsNyArMTkwLDcgQEAKIAogICAgYXR0ciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcobW9kdWxlLCAiPGF0dHJuYW1lPiIpOwogCi1DYWxsaW5nIDpjZnVuYzpgUHlPYmplY3RfU2V0QXR0clN0cmluZ2AgdG8gYXNzaWduIHRvIHZhcmlhYmxlcyBpbiB0aGUgbW9kdWxlCitDYWxsaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X1NldEF0dHJTdHJpbmdgIHRvIGFzc2lnbiB0byB2YXJpYWJsZXMgaW4gdGhlIG1vZHVsZQogYWxzbyB3b3Jrcy4KIAogCkBAIC0yMDEsMTEgKzIwMyw3IEBACiB3aG9sZSBsb3Qgb2YgZGlmZmVyZW5jZSBiZXR3ZWVuIEMgYW5kIEMrKyAtLSBzbyB0aGUgc3RyYXRlZ3kgb2YgYnVpbGRpbmcgYSBuZXcKIFB5dGhvbiB0eXBlIGFyb3VuZCBhIEMgc3RydWN0dXJlIChwb2ludGVyKSB0eXBlIHdpbGwgYWxzbyB3b3JrIGZvciBDKysgb2JqZWN0cy4KIAotRm9yIEMrKyBsaWJyYXJpZXMsIHlvdSBjYW4gbG9vayBhdCBgU0lQCi08aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc2lwLz5gXywgYENYWAotPGh0dHA6Ly9jeHguc291cmNlZm9yZ2UubmV0Lz5gXywgYEJvb3N0Ci08aHR0cDovL3d3dy5ib29zdC5vcmcvbGlicy9weXRob24vZG9jL2luZGV4Lmh0bWw+YF8sIGBXZWF2ZQotPGh0dHA6Ly93d3cuc2NpcHkub3JnL1dlYXZlPmBfIG9yIGBTV0lHIDxodHRwOi8vd3d3LnN3aWcub3JnPmBfCitGb3IgQysrIGxpYnJhcmllcywgc2VlIDpyZWY6YGMtd3JhcHBlci1zb2Z0d2FyZWAuCiAKIAogSSBhZGRlZCBhIG1vZHVsZSB1c2luZyB0aGUgU2V0dXAgZmlsZSBhbmQgdGhlIG1ha2UgZmFpbHM7IHdoeT8KQEAgLTI3MywxNiArMjcxLDE2IEBACiBJbiBQeXRob24geW91IGNhbiB1c2UgdGhlIDptb2Q6YGNvZGVvcGAgbW9kdWxlLCB3aGljaCBhcHByb3hpbWF0ZXMgdGhlIHBhcnNlcidzCiBiZWhhdmlvciBzdWZmaWNpZW50bHkuICBJRExFIHVzZXMgdGhpcywgZm9yIGV4YW1wbGUuCiAKLVRoZSBlYXNpZXN0IHdheSB0byBkbyBpdCBpbiBDIGlzIHRvIGNhbGwgOmNmdW5jOmBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BgIChwZXJoYXBzCitUaGUgZWFzaWVzdCB3YXkgdG8gZG8gaXQgaW4gQyBpcyB0byBjYWxsIDpjOmZ1bmM6YFB5UnVuX0ludGVyYWN0aXZlTG9vcGAgKHBlcmhhcHMKIGluIGEgc2VwYXJhdGUgdGhyZWFkKSBhbmQgbGV0IHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaGFuZGxlIHRoZSBpbnB1dCBmb3IKLXlvdS4gWW91IGNhbiBhbHNvIHNldCB0aGUgOmNmdW5jOmBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyYCB0byBwb2ludCBhdCB5b3VyCit5b3UuIFlvdSBjYW4gYWxzbyBzZXQgdGhlIDpjOmZ1bmM6YFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXJgIHRvIHBvaW50IGF0IHlvdXIKIGN1c3RvbSBpbnB1dCBmdW5jdGlvbi4gU2VlIGBgTW9kdWxlcy9yZWFkbGluZS5jYGAgYW5kIGBgUGFyc2VyL215cmVhZGxpbmUuY2BgCiBmb3IgbW9yZSBoaW50cy4KIAogSG93ZXZlciBzb21ldGltZXMgeW91IGhhdmUgdG8gcnVuIHRoZSBlbWJlZGRlZCBQeXRob24gaW50ZXJwcmV0ZXIgaW4gdGhlIHNhbWUKIHRocmVhZCBhcyB5b3VyIHJlc3QgYXBwbGljYXRpb24gYW5kIHlvdSBjYW4ndCBhbGxvdyB0aGUKLTpjZnVuYzpgUHlSdW5fSW50ZXJhY3RpdmVMb29wYCB0byBzdG9wIHdoaWxlIHdhaXRpbmcgZm9yIHVzZXIgaW5wdXQuICBUaGUgb25lCi1zb2x1dGlvbiB0aGVuIGlzIHRvIGNhbGwgOmNmdW5jOmBQeVBhcnNlcl9QYXJzZVN0cmluZ2AgYW5kIHRlc3QgZm9yIGBgZS5lcnJvcmBgCis6YzpmdW5jOmBQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BgIHRvIHN0b3Agd2hpbGUgd2FpdGluZyBmb3IgdXNlciBpbnB1dC4gIFRoZSBvbmUKK3NvbHV0aW9uIHRoZW4gaXMgdG8gY2FsbCA6YzpmdW5jOmBQeVBhcnNlcl9QYXJzZVN0cmluZ2AgYW5kIHRlc3QgZm9yIGBgZS5lcnJvcmBgCiBlcXVhbCB0byBgYEVfRU9GYGAsIHdoaWNoIG1lYW5zIHRoZSBpbnB1dCBpcyBpbmNvbXBsZXRlKS4gIEhlcmUncyBhIHNhbXBsZSBjb2RlCiBmcmFnbWVudCwgdW50ZXN0ZWQsIGluc3BpcmVkIGJ5IGNvZGUgZnJvbSBBbGV4IEZhcmJlcjo6CiAKQEAgLTMxMyw4ICszMTEsOCBAQAogICAgfQogCiBBbm90aGVyIHNvbHV0aW9uIGlzIHRyeWluZyB0byBjb21waWxlIHRoZSByZWNlaXZlZCBzdHJpbmcgd2l0aAotOmNmdW5jOmBQeV9Db21waWxlU3RyaW5nYC4gSWYgaXQgY29tcGlsZXMgd2l0aG91dCBlcnJvcnMsIHRyeSB0byBleGVjdXRlIHRoZQotcmV0dXJuZWQgY29kZSBvYmplY3QgYnkgY2FsbGluZyA6Y2Z1bmM6YFB5RXZhbF9FdmFsQ29kZWAuIE90aGVyd2lzZSBzYXZlIHRoZQorOmM6ZnVuYzpgUHlfQ29tcGlsZVN0cmluZ2AuIElmIGl0IGNvbXBpbGVzIHdpdGhvdXQgZXJyb3JzLCB0cnkgdG8gZXhlY3V0ZSB0aGUKK3JldHVybmVkIGNvZGUgb2JqZWN0IGJ5IGNhbGxpbmcgOmM6ZnVuYzpgUHlFdmFsX0V2YWxDb2RlYC4gT3RoZXJ3aXNlIHNhdmUgdGhlCiBpbnB1dCBmb3IgbGF0ZXIuIElmIHRoZSBjb21waWxhdGlvbiBmYWlscywgZmluZCBvdXQgaWYgaXQncyBhbiBlcnJvciBvciBqdXN0CiBtb3JlIGlucHV0IGlzIHJlcXVpcmVkIC0gYnkgZXh0cmFjdGluZyB0aGUgbWVzc2FnZSBzdHJpbmcgZnJvbSB0aGUgZXhjZXB0aW9uCiB0dXBsZSBhbmQgY29tcGFyaW5nIGl0IHRvIHRoZSBzdHJpbmcgInVuZXhwZWN0ZWQgRU9GIHdoaWxlIHBhcnNpbmciLiAgSGVyZSBpcyBhCkBAIC0zODIsNyArMzgwLDcgQEAKICAgICAgICAgICAgaWYgKHBzMSAgPT0gcHJvbXB0IHx8ICAgICAgICAgICAgICAgICAgLyogIj4+PiAiIG9yICovCiAgICAgICAgICAgICAgICAnXG4nID09IGNvZGVbaSArIGogLSAxXSkgICAgICAgICAgIC8qICIuLi4gIiBhbmQgZG91YmxlICdcbicgKi8KICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc28gZXhlY3V0ZSBpdCAqLwotICAgICAgICAgICAgIGR1bSA9IFB5RXZhbF9FdmFsQ29kZSAoKFB5Q29kZU9iamVjdCAqKXNyYywgZ2xiLCBsb2MpOworICAgICAgICAgICAgIGR1bSA9IFB5RXZhbF9FdmFsQ29kZSAoc3JjLCBnbGIsIGxvYyk7CiAgICAgICAgICAgICAgUHlfWERFQ1JFRiAoZHVtKTsKICAgICAgICAgICAgICBQeV9YREVDUkVGIChzcmMpOwogICAgICAgICAgICAgIGZyZWUgKGNvZGUpOwpAQCAtNDQzLDcgKzQ0MSw3IEBACiBDYW4gSSBjcmVhdGUgYW4gb2JqZWN0IGNsYXNzIHdpdGggc29tZSBtZXRob2RzIGltcGxlbWVudGVkIGluIEMgYW5kIG90aGVycyBpbiBQeXRob24gKGUuZy4gdGhyb3VnaCBpbmhlcml0YW5jZSk/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUluIFB5dGhvbiAyLjIsIHlvdSBjYW4gaW5oZXJpdCBmcm9tIGJ1aWx0aW4gY2xhc3NlcyBzdWNoIGFzIDpjbGFzczpgaW50YCwKK0luIFB5dGhvbiAyLjIsIHlvdSBjYW4gaW5oZXJpdCBmcm9tIGJ1aWx0LWluIGNsYXNzZXMgc3VjaCBhcyA6Y2xhc3M6YGludGAsCiA6Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YGRpY3RgLCBldGMuCiAKIFRoZSBCb29zdCBQeXRob24gTGlicmFyeSAoQlBMLCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B5dGhvbi9kb2MvaW5kZXguaHRtbCkKQEAgLTQ2Niw4ICs0NjQsOCBAQAogNy54LCBpbiBwYXJ0aWN1bGFyLCBwcm92aWRlZCBhICJweXRob24yIiBiaW5hcnkgdGhhdCBpcyBjb21waWxlZCB3aXRoIDQtYnl0ZQogVW5pY29kZS4gIFRoaXMgb25seSBjYXVzZXMgdGhlIGxpbmsgZmFpbHVyZSBpZiB0aGUgZXh0ZW5zaW9uIHVzZXMgYW55IG9mIHRoZQogYGBQeVVuaWNvZGVfKigpYGAgZnVuY3Rpb25zLiAgSXQgaXMgYWxzbyBhIHByb2JsZW0gaWYgYW4gZXh0ZW5zaW9uIHVzZXMgYW55IG9mCi10aGUgVW5pY29kZS1yZWxhdGVkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciA6Y2Z1bmM6YFB5X0J1aWxkVmFsdWVgIChvciBzaW1pbGFyKSBvcgotcGFyYW1ldGVyIHNwZWNpZmljYXRpb25zIGZvciA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLgordGhlIFVuaWNvZGUtcmVsYXRlZCBmb3JtYXQgc3BlY2lmaWVycyBmb3IgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgKG9yIHNpbWlsYXIpIG9yCitwYXJhbWV0ZXIgc3BlY2lmaWNhdGlvbnMgZm9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLgogCiBZb3UgY2FuIGNoZWNrIHRoZSBzaXplIG9mIHRoZSBVbmljb2RlIGNoYXJhY3RlciBhIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c2luZyBieQogY2hlY2tpbmcgdGhlIHZhbHVlIG9mIHN5cy5tYXh1bmljb2RlOgpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9ndWkucnN0IGIvRG9jL2ZhcS9ndWkucnN0CmluZGV4IDAzMTc3YzkuLmU1MDJlZjggMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvZ3VpLnJzdAorKysgYi9Eb2MvZmFxL2d1aS5yc3QKQEAgLTE1LDcgKzE1LDkgQEAKIFdoYXQgcGxhdGZvcm0taW5kZXBlbmRlbnQgR1VJIHRvb2xraXRzIGV4aXN0IGZvciBQeXRob24/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1EZXBlbmRpbmcgb24gd2hhdCBwbGF0Zm9ybShzKSB5b3UgYXJlIGFpbWluZyBhdCwgdGhlcmUgYXJlIHNldmVyYWwuCitEZXBlbmRpbmcgb24gd2hhdCBwbGF0Zm9ybShzKSB5b3UgYXJlIGFpbWluZyBhdCwgdGhlcmUgYXJlIHNldmVyYWwuICBTb21lCitvZiB0aGVtIGhhdmVuJ3QgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIDMgeWV0LiAgQXQgbGVhc3QgYFRraW50ZXJgXyBhbmQgYFF0YF8KK2FyZSBrbm93biB0byBiZSBQeXRob24gMy1jb21wYXRpYmxlLgogCiAuLiBYWFggY2hlY2sgbGlua3MKIApAQCAtMjMsMTIgKzI1LDE0IEBACiAtLS0tLS0tCiAKIFN0YW5kYXJkIGJ1aWxkcyBvZiBQeXRob24gaW5jbHVkZSBhbiBvYmplY3Qtb3JpZW50ZWQgaW50ZXJmYWNlIHRvIHRoZSBUY2wvVGsKLXdpZGdldCBzZXQsIGNhbGxlZCBUa2ludGVyLiAgVGhpcyBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdCB0byBpbnN0YWxsIGFuZCB1c2UuCi1Gb3IgbW9yZSBpbmZvIGFib3V0IFRrLCBpbmNsdWRpbmcgcG9pbnRlcnMgdG8gdGhlIHNvdXJjZSwgc2VlIHRoZSBUY2wvVGsgaG9tZQotcGFnZSBhdCBodHRwOi8vd3d3LnRjbC50ay4gIFRjbC9UayBpcyBmdWxseSBwb3J0YWJsZSB0byB0aGUgTWFjT1MsIFdpbmRvd3MsIGFuZAotVW5peCBwbGF0Zm9ybXMuCit3aWRnZXQgc2V0LCBjYWxsZWQgOnJlZjpgdGtpbnRlciA8VGtpbnRlcj5gLiAgVGhpcyBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdCB0bworaW5zdGFsbCAoc2luY2UgaXQgY29tZXMgaW5jbHVkZWQgd2l0aCBtb3N0CitgYmluYXJ5IGRpc3RyaWJ1dGlvbnMgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8+YF8gb2YgUHl0aG9uKSBhbmQgdXNlLgorRm9yIG1vcmUgaW5mbyBhYm91dCBUaywgaW5jbHVkaW5nIHBvaW50ZXJzIHRvIHRoZSBzb3VyY2UsIHNlZSB0aGUKK2BUY2wvVGsgaG9tZSBwYWdlIDxodHRwOi8vd3d3LnRjbC50az5gXy4gIFRjbC9UayBpcyBmdWxseSBwb3J0YWJsZSB0byB0aGUKK01hY09TLCBXaW5kb3dzLCBhbmQgVW5peCBwbGF0Zm9ybXMuCiAKLXd4V2luZG93cword3hXaWRnZXRzCiAtLS0tLS0tLS0KIAogd3hXaWRnZXRzIChodHRwOi8vd3d3Lnd4d2lkZ2V0cy5vcmcpIGlzIGEgZnJlZSwgcG9ydGFibGUgR1VJIGNsYXNzCkBAIC00NywyMiArNTEsMjUgQEAKIHBlcm1pc3NpdmUgbGljZW5jZXMgdGhhdCBhbGxvdyB0aGVpciB1c2UgaW4gY29tbWVyY2lhbCBwcm9kdWN0cyBhcwogd2VsbCBhcyBpbiBmcmVld2FyZSBvciBzaGFyZXdhcmUuCiAKKwogUXQKIC0tLQogCi1UaGVyZSBhcmUgYmluZGluZ3MgYXZhaWxhYmxlIGZvciB0aGUgUXQgdG9vbGtpdCAoYFB5UXQKLTxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weXF0Lz5gXykgYW5kIGZvciBLREUgKFB5S0RFKS4gIElmCi15b3UncmUgd3JpdGluZyBvcGVuIHNvdXJjZSBzb2Z0d2FyZSwgeW91IGRvbid0IG5lZWQgdG8gcGF5IGZvciBQeVF0LCBidXQgaWYgeW91Ci13YW50IHRvIHdyaXRlIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucywgeW91IG11c3QgYnV5IGEgUHlRdCBsaWNlbnNlIGZyb20KLWBSaXZlcmJhbmsgQ29tcHV0aW5nIDxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51az5gXyBhbmQgKHVwIHRvIFF0IDQuNDsKLVF0IDQuNSB1cHdhcmRzIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBMR1BMIGxpY2Vuc2UpIGEgUXQgbGljZW5zZSBmcm9tIGBUcm9sbHRlY2gKLTxodHRwOi8vd3d3LnRyb2xsdGVjaC5jb20+YF8uCitUaGVyZSBhcmUgYmluZGluZ3MgYXZhaWxhYmxlIGZvciB0aGUgUXQgdG9vbGtpdCAodXNpbmcgZWl0aGVyIGBQeVF0Cis8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC8+YF8gb3IgYFB5U2lkZQorPGh0dHA6Ly93d3cucHlzaWRlLm9yZy8+YF8pIGFuZCBmb3IgS0RFIChgUHlLREUgPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5a2RlL2ludHJvPmBfXykuCitQeVF0IGlzIGN1cnJlbnRseSBtb3JlIG1hdHVyZSB0aGFuIFB5U2lkZSwgYnV0IHlvdSBtdXN0IGJ1eSBhIFB5UXQgbGljZW5zZSBmcm9tCitgUml2ZXJiYW5rIENvbXB1dGluZyA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9saWNlbnNlPmBfCitpZiB5b3Ugd2FudCB0byB3cml0ZSBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMuICBQeVNpZGUgaXMgZnJlZSBmb3IgYWxsIGFwcGxpY2F0aW9ucy4KKworUXQgNC41IHVwd2FyZHMgaXMgbGljZW5zZWQgdW5kZXIgdGhlIExHUEwgbGljZW5zZTsgYWxzbywgY29tbWVyY2lhbCBsaWNlbnNlcworYXJlIGF2YWlsYWJsZSBmcm9tIGBOb2tpYSA8aHR0cDovL3F0Lm5va2lhLmNvbS8+YF8uCiAKIEd0aysKIC0tLS0KIAogUHlHdGsgYmluZGluZ3MgZm9yIHRoZSBgR3RrKyB0b29sa2l0IDxodHRwOi8vd3d3Lmd0ay5vcmc+YF8gaGF2ZSBiZWVuCi1pbXBsZW1lbnRlZCBieSBieSBKYW1lcyBIZW5zdHJpZGdlOyBzZWUgZnRwOi8vZnRwLmd0ay5vcmcvcHViL2d0ay9weXRob24vLgoraW1wbGVtZW50ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZTsgc2VlIDxodHRwOi8vd3d3LnB5Z3RrLm9yZz4uCiAKIEZMVEsKIC0tLS0KQEAgLTkxLDE0ICs5OCwxNSBAQAogCiBgVGhlIE1hYyBwb3J0IDxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9tYWM+YF8gYnkgSmFjayBKYW5zZW4gaGFzIGEgcmljaCBhbmQKIGV2ZXItZ3Jvd2luZyBzZXQgb2YgbW9kdWxlcyB0aGF0IHN1cHBvcnQgdGhlIG5hdGl2ZSBNYWMgdG9vbGJveCBjYWxscy4gIFRoZSBwb3J0Ci1pbmNsdWRlcyBzdXBwb3J0IGZvciBNYWNPUzkgYW5kIE1hY09TIFgncyBDYXJib24gbGlicmFyaWVzLiAgQnkgaW5zdGFsbGluZyB0aGUKLWBQeU9iamMgT2JqZWN0aXZlLUMgYnJpZGdlIDxodHRwOi8vcHlvYmpjLnNvdXJjZWZvcmdlLm5ldD5gXywgUHl0aG9uIHByb2dyYW1zCi1jYW4gdXNlIE1hY09TIFgncyBDb2NvYSBsaWJyYXJpZXMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiB0aGF0IGNvbWVzIHdpdGggdGhlIE1hYwotcG9ydC4KK3N1cHBvcnRzIE1hY09TIFgncyBDYXJib24gbGlicmFyaWVzLgorCitCeSBpbnN0YWxsaW5nIHRoZSBgUHlPYmpjIE9iamVjdGl2ZS1DIGJyaWRnZQorPGh0dHA6Ly9weW9iamMuc291cmNlZm9yZ2UubmV0PmBfLCBQeXRob24gcHJvZ3JhbXMgY2FuIHVzZSBNYWNPUyBYJ3MKK0NvY29hIGxpYnJhcmllcy4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgY29tZXMgd2l0aCB0aGUgTWFjIHBvcnQuCiAKIDpyZWY6YFB5dGhvbndpbiA8d2luZG93cy1mYXE+YCBieSBNYXJrIEhhbW1vbmQgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZQotTWljcm9zb2Z0IEZvdW5kYXRpb24gQ2xhc3NlcyBhbmQgYSBQeXRob24gcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQgdXNpbmcgaXQKLXRoYXQncyB3cml0dGVuIG1vc3RseSBpbiBQeXRob24uCitNaWNyb3NvZnQgRm91bmRhdGlvbiBDbGFzc2VzIGFuZCBhIFB5dGhvbiBwcm9ncmFtbWluZyBlbnZpcm9ubWVudAordGhhdCdzIHdyaXR0ZW4gbW9zdGx5IGluIFB5dGhvbiB1c2luZyB0aGUgTUZDIGNsYXNzZXMuCiAKIAogVGtpbnRlciBxdWVzdGlvbnMKQEAgLTExMSwyMyArMTE5LDI2IEBACiBhcHBsaWNhdGlvbnMsIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBub3QgYmUgdHJ1bHkgc3RhbmQtYWxvbmUsIGFzIHRoZSBhcHBsaWNhdGlvbgogd2lsbCBzdGlsbCBuZWVkIHRoZSBUY2wgYW5kIFRrIGxpYnJhcmllcy4KIAotT25lIHNvbHV0aW9uIGlzIHRvIHNoaXAgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIHRjbCBhbmQgdGsgbGlicmFyaWVzLCBhbmQgcG9pbnQKK09uZSBzb2x1dGlvbiBpcyB0byBzaGlwIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBUY2wgYW5kIFRrIGxpYnJhcmllcywgYW5kIHBvaW50CiB0byB0aGVtIGF0IHJ1bi10aW1lIHVzaW5nIHRoZSA6ZW52dmFyOmBUQ0xfTElCUkFSWWAgYW5kIDplbnZ2YXI6YFRLX0xJQlJBUllgCiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAKIFRvIGdldCB0cnVseSBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbnMsIHRoZSBUY2wgc2NyaXB0cyB0aGF0IGZvcm0gdGhlIGxpYnJhcnkKIGhhdmUgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBhcHBsaWNhdGlvbiBhcyB3ZWxsLiBPbmUgdG9vbCBzdXBwb3J0aW5nIHRoYXQgaXMKIFNBTSAoc3RhbmQtYWxvbmUgbW9kdWxlcyksIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFRpeCBkaXN0cmlidXRpb24KLShodHRwOi8vdGl4Lm1uZS5jb20pLiAgQnVpbGQgVGl4IHdpdGggU0FNIGVuYWJsZWQsIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGNhbGwKLXRvIFRjbHNhbV9pbml0IGV0YyBpbnNpZGUgUHl0aG9uJ3MgTW9kdWxlcy90a2FwcGluaXQuYywgYW5kIGxpbmsgd2l0aCBsaWJ0Y2xzYW0KLWFuZCBsaWJ0a3NhbSAoeW91IG1pZ2h0IGluY2x1ZGUgdGhlIFRpeCBsaWJyYXJpZXMgYXMgd2VsbCkuCisoaHR0cDovL3RpeC5zb3VyY2Vmb3JnZS5uZXQvKS4KKworQnVpbGQgVGl4IHdpdGggU0FNIGVuYWJsZWQsIHBlcmZvcm0gdGhlIGFwcHJvcHJpYXRlIGNhbGwgdG8KKzpjOmZ1bmM6YFRjbHNhbV9pbml0YCwgZXRjLiBpbnNpZGUgUHl0aG9uJ3MKKzpmaWxlOmBNb2R1bGVzL3RrYXBwaW5pdC5jYCwgYW5kIGxpbmsgd2l0aCBsaWJ0Y2xzYW0gYW5kIGxpYnRrc2FtICh5b3UKK21pZ2h0IGluY2x1ZGUgdGhlIFRpeCBsaWJyYXJpZXMgYXMgd2VsbCkuCiAKIAogQ2FuIEkgaGF2ZSBUayBldmVudHMgaGFuZGxlZCB3aGlsZSB3YWl0aW5nIGZvciBJL08/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogWWVzLCBhbmQgeW91IGRvbid0IGV2ZW4gbmVlZCB0aHJlYWRzISAgQnV0IHlvdSdsbCBoYXZlIHRvIHJlc3RydWN0dXJlIHlvdXIgSS9PCi1jb2RlIGEgYml0LiAgVGsgaGFzIHRoZSBlcXVpdmFsZW50IG9mIFh0J3MgWHRBZGRJbnB1dCgpIGNhbGwsIHdoaWNoIGFsbG93cyB5b3UKK2NvZGUgYSBiaXQuICBUayBoYXMgdGhlIGVxdWl2YWxlbnQgb2YgWHQncyA6YzpmdW5jOmBYdEFkZElucHV0KClgIGNhbGwsIHdoaWNoIGFsbG93cyB5b3UKIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgVGsgbWFpbmxvb3Agd2hlbgogSS9PIGlzIHBvc3NpYmxlIG9uIGEgZmlsZSBkZXNjcmlwdG9yLiAgSGVyZSdzIHdoYXQgeW91IG5lZWQ6OgogCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2luc3RhbGxlZC5yc3QgYi9Eb2MvZmFxL2luc3RhbGxlZC5yc3QKaW5kZXggMzkwYzg1YS4uZWZlYzliZiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9pbnN0YWxsZWQucnN0CisrKyBiL0RvYy9mYXEvaW5zdGFsbGVkLnJzdApAQCAtMjQsMTQgKzI0LDE0IEBACiAgIGl0OyB5b3UnbGwgaGF2ZSB0byBmaWd1cmUgb3V0IHdobydzIGJlZW4gdXNpbmcgdGhlIG1hY2hpbmUgYW5kIG1pZ2h0IGhhdmUKICAgaW5zdGFsbGVkIGl0LgogKiBBIHRoaXJkLXBhcnR5IGFwcGxpY2F0aW9uIGluc3RhbGxlZCBvbiB0aGUgbWFjaGluZSBtaWdodCBoYXZlIGJlZW4gd3JpdHRlbiBpbgotICBQeXRob24gYW5kIGluY2x1ZGVkIGEgUHl0aG9uIGluc3RhbGxhdGlvbi4gIEZvciBhIGhvbWUgY29tcHV0ZXIsIHRoZSBtb3N0Ci0gIGNvbW1vbiBzdWNoIGFwcGxpY2F0aW9uIGlzIGBQeVNvbCA8aHR0cDovL3B5c29sZmMuc291cmNlZm9yZ2UubmV0Lz5gXywgYQotICBzb2xpdGFpcmUgZ2FtZSB0aGF0IGluY2x1ZGVzIG92ZXIgMTAwMCBkaWZmZXJlbnQgZ2FtZXMgYW5kIHZhcmlhdGlvbnMuCisgIFB5dGhvbiBhbmQgaW5jbHVkZWQgYSBQeXRob24gaW5zdGFsbGF0aW9uLiAgVGhlcmUgYXJlIG1hbnkgc3VjaCBhcHBsaWNhdGlvbnMsCisgIGZyb20gR1VJIHByb2dyYW1zIHRvIG5ldHdvcmsgc2VydmVycyBhbmQgYWRtaW5pc3RyYXRpdmUgc2NyaXB0cy4KICogU29tZSBXaW5kb3dzIG1hY2hpbmVzIGFsc28gaGF2ZSBQeXRob24gaW5zdGFsbGVkLiAgQXQgdGhpcyB3cml0aW5nIHdlJ3JlIGF3YXJlCiAgIG9mIGNvbXB1dGVycyBmcm9tIEhld2xldHQtUGFja2FyZCBhbmQgQ29tcGFxIHRoYXQgaW5jbHVkZSBQeXRob24uICBBcHBhcmVudGx5CiAgIHNvbWUgb2YgSFAvQ29tcGFxJ3MgYWRtaW5pc3RyYXRpdmUgdG9vbHMgYXJlIHdyaXR0ZW4gaW4gUHl0aG9uLgotKiBBbGwgQXBwbGUgY29tcHV0ZXJzIHJ1bm5pbmcgTWFjIE9TIFggaGF2ZSBQeXRob24gaW5zdGFsbGVkOyBpdCdzIGluY2x1ZGVkIGluCi0gIHRoZSBiYXNlIGluc3RhbGxhdGlvbi4KKyogTWFueSBVbml4LWNvbXBhdGlibGUgb3BlcmF0aW5nIHN5c3RlbXMsIHN1Y2ggYXMgTWFjIE9TIFggYW5kIHNvbWUgTGludXgKKyAgZGlzdHJpYnV0aW9ucywgaGF2ZSBQeXRob24gaW5zdGFsbGVkIGJ5IGRlZmF1bHQ7IGl0J3MgaW5jbHVkZWQgaW4gdGhlIGJhc2UKKyAgaW5zdGFsbGF0aW9uLgogCiAKIENhbiBJIGRlbGV0ZSBQeXRob24/CmRpZmYgLS1naXQgYS9Eb2MvZmFxL2xpYnJhcnkucnN0IGIvRG9jL2ZhcS9saWJyYXJ5LnJzdAppbmRleCAxODBiZDM5Li5lZTA5OWNmIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2xpYnJhcnkucnN0CisrKyBiL0RvYy9mYXEvbGlicmFyeS5yc3QKQEAgLTI1LDEwICsyNSwxMCBAQAogV2hlcmUgaXMgdGhlIG1hdGgucHkgKHNvY2tldC5weSwgcmVnZXgucHksIGV0Yy4pIHNvdXJjZSBmaWxlPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JZiB5b3UgY2FuJ3QgZmluZCBhIHNvdXJjZSBmaWxlIGZvciBhIG1vZHVsZSBpdCBtYXkgYmUgYSBidWlsdGluIG9yIGR5bmFtaWNhbGx5Ci1sb2FkZWQgbW9kdWxlIGltcGxlbWVudGVkIGluIEMsIEMrKyBvciBvdGhlciBjb21waWxlZCBsYW5ndWFnZS4gIEluIHRoaXMgY2FzZQoteW91IG1heSBub3QgaGF2ZSB0aGUgc291cmNlIGZpbGUgb3IgaXQgbWF5IGJlIHNvbWV0aGluZyBsaWtlIG1hdGhtb2R1bGUuYywKLXNvbWV3aGVyZSBpbiBhIEMgc291cmNlIGRpcmVjdG9yeSAobm90IG9uIHRoZSBQeXRob24gUGF0aCkuCitJZiB5b3UgY2FuJ3QgZmluZCBhIHNvdXJjZSBmaWxlIGZvciBhIG1vZHVsZSBpdCBtYXkgYmUgYSBidWlsdC1pbiBvcgorZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZSBpbXBsZW1lbnRlZCBpbiBDLCBDKysgb3Igb3RoZXIgY29tcGlsZWQgbGFuZ3VhZ2UuCitJbiB0aGlzIGNhc2UgeW91IG1heSBub3QgaGF2ZSB0aGUgc291cmNlIGZpbGUgb3IgaXQgbWF5IGJlIHNvbWV0aGluZyBsaWtlCittYXRobW9kdWxlLmMsIHNvbWV3aGVyZSBpbiBhIEMgc291cmNlIGRpcmVjdG9yeSAobm90IG9uIHRoZSBQeXRob24gUGF0aCkuCiAKIFRoZXJlIGFyZSAoYXQgbGVhc3QpIHRocmVlIGtpbmRzIG9mIG1vZHVsZXMgaW4gUHl0aG9uOgogCkBAIC0yODUsMTEgKzI4NSwxNSBAQAogSG93IGRvIEkgcGFyY2VsIG91dCB3b3JrIGFtb25nIGEgYnVuY2ggb2Ygd29ya2VyIHRocmVhZHM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVXNlIHRoZSA6bW9kOmBxdWV1ZWAgbW9kdWxlIHRvIGNyZWF0ZSBhIHF1ZXVlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGpvYnMuICBUaGUKLTpjbGFzczpgfnF1ZXVlLlF1ZXVlYCBjbGFzcyBtYWludGFpbnMgYSBsaXN0IG9mIG9iamVjdHMgd2l0aCBgYC5wdXQob2JqKWBgIHRvCi1hZGQgYW4gaXRlbSB0byB0aGUgcXVldWUgYW5kIGBgLmdldCgpYGAgdG8gcmV0dXJuIGFuIGl0ZW0uICBUaGUgY2xhc3Mgd2lsbCB0YWtlCi1jYXJlIG9mIHRoZSBsb2NraW5nIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhhdCBlYWNoIGpvYiBpcyBoYW5kZWQgb3V0IGV4YWN0bHkKLW9uY2UuCitUaGUgZWFzaWVzdCB3YXkgaXMgdG8gdXNlIHRoZSBuZXcgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBtb2R1bGUsCitlc3BlY2lhbGx5IHRoZSA6bW9kOmB+Y29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcmAgY2xhc3MuCisKK09yLCBpZiB5b3Ugd2FudCBmaW5lIGNvbnRyb2wgb3ZlciB0aGUgZGlzcGF0Y2hpbmcgYWxnb3JpdGhtLCB5b3UgY2FuIHdyaXRlCit5b3VyIG93biBsb2dpYyBtYW51YWxseS4gIFVzZSB0aGUgOm1vZDpgcXVldWVgIG1vZHVsZSB0byBjcmVhdGUgYSBxdWV1ZQorY29udGFpbmluZyBhIGxpc3Qgb2Ygam9icy4gIFRoZSA6Y2xhc3M6YH5xdWV1ZS5RdWV1ZWAgY2xhc3MgbWFpbnRhaW5zIGEKK2xpc3Qgb2Ygb2JqZWN0cyB3aXRoIGBgLnB1dChvYmopYGAgdG8gYWRkIGFuIGl0ZW0gdG8gdGhlIHF1ZXVlIGFuZCBgYC5nZXQoKWBgCit0byByZXR1cm4gYW4gaXRlbS4gIFRoZSBjbGFzcyB3aWxsIHRha2UgY2FyZSBvZiB0aGUgbG9ja2luZyBuZWNlc3NhcnkgdG8KK2Vuc3VyZSB0aGF0IGVhY2ggam9iIGlzIGhhbmRlZCBvdXQgZXhhY3RseSBvbmNlLgogCiBIZXJlJ3MgYSB0cml2aWFsIGV4YW1wbGU6OgogCkBAIC0zNTIsNyArMzU2LDcgQEAKIFdoYXQga2luZHMgb2YgZ2xvYmFsIHZhbHVlIG11dGF0aW9uIGFyZSB0aHJlYWQtc2FmZT8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQSBnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jayAoR0lMKSBpcyB1c2VkIGludGVybmFsbHkgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUKK0EgOnRlcm06YGdsb2JhbCBpbnRlcnByZXRlciBsb2NrYCAoR0lMKSBpcyB1c2VkIGludGVybmFsbHkgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUKIHRocmVhZCBydW5zIGluIHRoZSBQeXRob24gVk0gYXQgYSB0aW1lLiAgSW4gZ2VuZXJhbCwgUHl0aG9uIG9mZmVycyB0byBzd2l0Y2gKIGFtb25nIHRocmVhZHMgb25seSBiZXR3ZWVuIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgaG93IGZyZXF1ZW50bHkgaXQgc3dpdGNoZXMgY2FuCiBiZSBzZXQgdmlhIDpmdW5jOmBzeXMuc2V0c3dpdGNoaW50ZXJ2YWxgLiAgRWFjaCBieXRlY29kZSBpbnN0cnVjdGlvbiBhbmQKQEAgLTM2MSw3ICszNjUsNyBAQAogCiBJbiB0aGVvcnksIHRoaXMgbWVhbnMgYW4gZXhhY3QgYWNjb3VudGluZyByZXF1aXJlcyBhbiBleGFjdCB1bmRlcnN0YW5kaW5nIG9mIHRoZQogUFZNIGJ5dGVjb2RlIGltcGxlbWVudGF0aW9uLiAgSW4gcHJhY3RpY2UsIGl0IG1lYW5zIHRoYXQgb3BlcmF0aW9ucyBvbiBzaGFyZWQKLXZhcmlhYmxlcyBvZiBidWlsdGluIGRhdGEgdHlwZXMgKGludHMsIGxpc3RzLCBkaWN0cywgZXRjKSB0aGF0ICJsb29rIGF0b21pYyIKK3ZhcmlhYmxlcyBvZiBidWlsdC1pbiBkYXRhIHR5cGVzIChpbnRzLCBsaXN0cywgZGljdHMsIGV0YykgdGhhdCAibG9vayBhdG9taWMiCiByZWFsbHkgYXJlLgogCiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBhbGwgYXRvbWljIChMLCBMMSwgTDIgYXJlIGxpc3RzLCBELApAQCAtMzk1LDMyICszOTksMzQgQEAKIENhbid0IHdlIGdldCByaWQgb2YgdGhlIEdsb2JhbCBJbnRlcnByZXRlciBMb2NrPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIFhYWCBtZW50aW9uIG11bHRpcHJvY2Vzc2luZwogLi4gWFhYIGxpbmsgdG8gZGJlYXpsZXkncyB0YWxrIGFib3V0IEdJTD8KIAotVGhlIEdsb2JhbCBJbnRlcnByZXRlciBMb2NrIChHSUwpIGlzIG9mdGVuIHNlZW4gYXMgYSBoaW5kcmFuY2UgdG8gUHl0aG9uJ3MKK1RoZSA6dGVybTpgZ2xvYmFsIGludGVycHJldGVyIGxvY2tgIChHSUwpIGlzIG9mdGVuIHNlZW4gYXMgYSBoaW5kcmFuY2UgdG8gUHl0aG9uJ3MKIGRlcGxveW1lbnQgb24gaGlnaC1lbmQgbXVsdGlwcm9jZXNzb3Igc2VydmVyIG1hY2hpbmVzLCBiZWNhdXNlIGEgbXVsdGktdGhyZWFkZWQKIFB5dGhvbiBwcm9ncmFtIGVmZmVjdGl2ZWx5IG9ubHkgdXNlcyBvbmUgQ1BVLCBkdWUgdG8gdGhlIGluc2lzdGVuY2UgdGhhdAogKGFsbW9zdCkgYWxsIFB5dGhvbiBjb2RlIGNhbiBvbmx5IHJ1biB3aGlsZSB0aGUgR0lMIGlzIGhlbGQuCiAKIEJhY2sgaW4gdGhlIGRheXMgb2YgUHl0aG9uIDEuNSwgR3JlZyBTdGVpbiBhY3R1YWxseSBpbXBsZW1lbnRlZCBhIGNvbXByZWhlbnNpdmUKIHBhdGNoIHNldCAodGhlICJmcmVlIHRocmVhZGluZyIgcGF0Y2hlcykgdGhhdCByZW1vdmVkIHRoZSBHSUwgYW5kIHJlcGxhY2VkIGl0Ci13aXRoIGZpbmUtZ3JhaW5lZCBsb2NraW5nLiAgVW5mb3J0dW5hdGVseSwgZXZlbiBvbiBXaW5kb3dzICh3aGVyZSBsb2NrcyBhcmUgdmVyeQotZWZmaWNpZW50KSB0aGlzIHJhbiBvcmRpbmFyeSBQeXRob24gY29kZSBhYm91dCB0d2ljZSBhcyBzbG93IGFzIHRoZSBpbnRlcnByZXRlcgotdXNpbmcgdGhlIEdJTC4gIE9uIExpbnV4IHRoZSBwZXJmb3JtYW5jZSBsb3NzIHdhcyBldmVuIHdvcnNlIGJlY2F1c2UgcHRocmVhZAotbG9ja3MgYXJlbid0IGFzIGVmZmljaWVudC4KLQotU2luY2UgdGhlbiwgdGhlIGlkZWEgb2YgZ2V0dGluZyByaWQgb2YgdGhlIEdJTCBoYXMgb2NjYXNpb25hbGx5IGNvbWUgdXAgYnV0Ci1ub2JvZHkgaGFzIGZvdW5kIGEgd2F5IHRvIGRlYWwgd2l0aCB0aGUgZXhwZWN0ZWQgc2xvd2Rvd24sIGFuZCB1c2VycyB3aG8gZG9uJ3QKLXVzZSB0aHJlYWRzIHdvdWxkIG5vdCBiZSBoYXBweSBpZiB0aGVpciBjb2RlIHJhbiBhdCBoYWxmIGF0IHRoZSBzcGVlZC4gIEdyZWcncwotZnJlZSB0aHJlYWRpbmcgcGF0Y2ggc2V0IGhhcyBub3QgYmVlbiBrZXB0IHVwLXRvLWRhdGUgZm9yIGxhdGVyIFB5dGhvbiB2ZXJzaW9ucy4KK3dpdGggZmluZS1ncmFpbmVkIGxvY2tpbmcuICBBZGFtIE9sc2VuIHJlY2VudGx5IGRpZCBhIHNpbWlsYXIgZXhwZXJpbWVudAoraW4gaGlzIGBweXRob24tc2FmZXRocmVhZCA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi1zYWZldGhyZWFkLz5gXworcHJvamVjdC4gIFVuZm9ydHVuYXRlbHksIGJvdGggZXhwZXJpbWVudHMgZXhoaWJpdGVkIGEgc2hhcnAgZHJvcCBpbiBzaW5nbGUtdGhyZWFkCitwZXJmb3JtYW5jZSAoYXQgbGVhc3QgMzAlIHNsb3dlciksIGR1ZSB0byB0aGUgYW1vdW50IG9mIGZpbmUtZ3JhaW5lZCBsb2NraW5nCituZWNlc3NhcnkgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIHJlbW92YWwgb2YgdGhlIEdJTC4KIAogVGhpcyBkb2Vzbid0IG1lYW4gdGhhdCB5b3UgY2FuJ3QgbWFrZSBnb29kIHVzZSBvZiBQeXRob24gb24gbXVsdGktQ1BVIG1hY2hpbmVzIQogWW91IGp1c3QgaGF2ZSB0byBiZSBjcmVhdGl2ZSB3aXRoIGRpdmlkaW5nIHRoZSB3b3JrIHVwIGJldHdlZW4gbXVsdGlwbGUKLSpwcm9jZXNzZXMqIHJhdGhlciB0aGFuIG11bHRpcGxlICp0aHJlYWRzKi4gIEp1ZGljaW91cyB1c2Ugb2YgQyBleHRlbnNpb25zIHdpbGwKLWFsc28gaGVscDsgaWYgeW91IHVzZSBhIEMgZXh0ZW5zaW9uIHRvIHBlcmZvcm0gYSB0aW1lLWNvbnN1bWluZyB0YXNrLCB0aGUKLWV4dGVuc2lvbiBjYW4gcmVsZWFzZSB0aGUgR0lMIHdoaWxlIHRoZSB0aHJlYWQgb2YgZXhlY3V0aW9uIGlzIGluIHRoZSBDIGNvZGUgYW5kCi1hbGxvdyBvdGhlciB0aHJlYWRzIHRvIGdldCBzb21lIHdvcmsgZG9uZS4KKypwcm9jZXNzZXMqIHJhdGhlciB0aGFuIG11bHRpcGxlICp0aHJlYWRzKi4gIFRoZQorOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3JgIGNsYXNzIGluIHRoZSBuZXcKKzptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgbW9kdWxlIHByb3ZpZGVzIGFuIGVhc3kgd2F5IG9mIGRvaW5nIHNvOyB0aGUKKzptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIHByb3ZpZGVzIGEgbG93ZXItbGV2ZWwgQVBJIGluIGNhc2UgeW91IHdhbnQKK21vcmUgY29udHJvbCBvdmVyIGRpc3BhdGNoaW5nIG9mIHRhc2tzLgorCitKdWRpY2lvdXMgdXNlIG9mIEMgZXh0ZW5zaW9ucyB3aWxsIGFsc28gaGVscDsgaWYgeW91IHVzZSBhIEMgZXh0ZW5zaW9uIHRvCitwZXJmb3JtIGEgdGltZS1jb25zdW1pbmcgdGFzaywgdGhlIGV4dGVuc2lvbiBjYW4gcmVsZWFzZSB0aGUgR0lMIHdoaWxlIHRoZQordGhyZWFkIG9mIGV4ZWN1dGlvbiBpcyBpbiB0aGUgQyBjb2RlIGFuZCBhbGxvdyBvdGhlciB0aHJlYWRzIHRvIGdldCBzb21lIHdvcmsKK2RvbmUuICBTb21lIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlcyBzdWNoIGFzIDptb2Q6YHpsaWJgIGFuZCA6bW9kOmBoYXNobGliYAorYWxyZWFkeSBkbyB0aGlzLgogCiBJdCBoYXMgYmVlbiBzdWdnZXN0ZWQgdGhhdCB0aGUgR0lMIHNob3VsZCBiZSBhIHBlci1pbnRlcnByZXRlci1zdGF0ZSBsb2NrIHJhdGhlcgogdGhhbiB0cnVseSBnbG9iYWw7IGludGVycHJldGVycyB0aGVuIHdvdWxkbid0IGJlIGFibGUgdG8gc2hhcmUgb2JqZWN0cy4KQEAgLTUxMSw5ICs1MTcsOSBAQAogCiA6ZnVuYzpgb3MucmVhZGAgaXMgYSBsb3ctbGV2ZWwgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYSBmaWxlIGRlc2NyaXB0b3IsIGEgc21hbGwKIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBvcGVuZWQgZmlsZS4gIDpmdW5jOmBvcy5wb3BlbmAgY3JlYXRlcyBhIGhpZ2gtbGV2ZWwKLWZpbGUgb2JqZWN0LCB0aGUgc2FtZSB0eXBlIHJldHVybmVkIGJ5IHRoZSBidWlsdGluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIFRodXMsCi10byByZWFkIG4gYnl0ZXMgZnJvbSBhIHBpcGUgcCBjcmVhdGVkIHdpdGggOmZ1bmM6YG9zLnBvcGVuYCwgeW91IG5lZWQgdG8gdXNlCi1gYHAucmVhZChuKWBgLgorZmlsZSBvYmplY3QsIHRoZSBzYW1lIHR5cGUgcmV0dXJuZWQgYnkgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4KK1RodXMsIHRvIHJlYWQgbiBieXRlcyBmcm9tIGEgcGlwZSBwIGNyZWF0ZWQgd2l0aCA6ZnVuYzpgb3MucG9wZW5gLCB5b3UgbmVlZCB0bwordXNlIGBgcC5yZWFkKG4pYGAuCiAKIAogLi4gWFhYIHVwZGF0ZSB0byB1c2Ugc3VicHJvY2Vzcy4gU2VlIHRoZSA6cmVmOmBzdWJwcm9jZXNzLXJlcGxhY2VtZW50c2Agc2VjdGlvbi4KQEAgLTc1MSw3ICs3NTcsOCBAQAogSG93IGRvIEkgYXZvaWQgYmxvY2tpbmcgaW4gdGhlIGNvbm5lY3QoKSBtZXRob2Qgb2YgYSBzb2NrZXQ/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIHNlbGVjdCBtb2R1bGUgaXMgY29tbW9ubHkgdXNlZCB0byBoZWxwIHdpdGggYXN5bmNocm9ub3VzIEkvTyBvbiBzb2NrZXRzLgorVGhlIDptb2Q6YHNlbGVjdGAgbW9kdWxlIGlzIGNvbW1vbmx5IHVzZWQgdG8gaGVscCB3aXRoIGFzeW5jaHJvbm91cyBJL08gb24KK3NvY2tldHMuCiAKIFRvIHByZXZlbnQgdGhlIFRDUCBjb25uZWN0IGZyb20gYmxvY2tpbmcsIHlvdSBjYW4gc2V0IHRoZSBzb2NrZXQgdG8gbm9uLWJsb2NraW5nCiBtb2RlLiAgVGhlbiB3aGVuIHlvdSBkbyB0aGUgYGBjb25uZWN0KClgYCwgeW91IHdpbGwgZWl0aGVyIGNvbm5lY3QgaW1tZWRpYXRlbHkKQEAgLTc2NSw2ICs3NzIsMTIgQEAKIC0tIGBgMGBgIG9yIGBgZXJybm8uRUlTQ09OTmBgIGluZGljYXRlIHRoYXQgeW91J3JlIGNvbm5lY3RlZCAtLSBvciB5b3UgY2FuIHBhc3MgdGhpcwogc29ja2V0IHRvIHNlbGVjdCB0byBjaGVjayBpZiBpdCdzIHdyaXRhYmxlLgogCisuLiBub3RlOjoKKyAgIFRoZSA6bW9kOmBhc3luY29yZWAgbW9kdWxlIHByZXNlbnRzIGEgZnJhbWV3b3JrLWxpa2UgYXBwcm9hY2ggdG8gdGhlIHByb2JsZW0KKyAgIG9mIHdyaXRpbmcgbm9uLWJsb2NraW5nIG5ldHdvcmtpbmcgY29kZS4KKyAgIFRoZSB0aGlyZC1wYXJ0eSBgVHdpc3RlZCA8aHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLz5gXyBsaWJyYXJ5IGlzCisgICBhIHBvcHVsYXIgYW5kIGZlYXR1cmUtcmljaCBhbHRlcm5hdGl2ZS4KKwogCiBEYXRhYmFzZXMKID09PT09PT09PQpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9wcm9ncmFtbWluZy5yc3QgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAppbmRleCA3MjI2ZTcwLi4wN2U2ODE4IDEwMDY0NAotLS0gYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdAorKysgYi9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdApAQCAtMTI3LDkgKzEyNyw5IEBACiAKIC4uIFhYWCBzZWVtcyB0byBoYXZlIG92ZXJsYXAgd2l0aCBvdGhlciBxdWVzdGlvbnMhCiAKLWBQeXJleCA8aHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovfmdyZWcvcHl0aG9uL1B5cmV4Lz5gXyBjYW4gY29tcGlsZSBhCi1zbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIFB5dGhvbiBjb2RlIGludG8gYSBDIGV4dGVuc2lvbiwgYW5kIGNhbiBiZSB1c2VkIG9uCi1tYW55IGRpZmZlcmVudCBwbGF0Zm9ybXMuCitgQ3l0aG9uIDxodHRwOi8vY3l0aG9uLm9yZz5gXyBhbmQgYFB5cmV4IDxodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9+Z3JlZy9weXRob24vUHlyZXgvPmBfCitjYW4gY29tcGlsZSBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgUHl0aG9uIGNvZGUgaW50byBhIEMgZXh0ZW5zaW9uLCBhbmQKK2NhbiBiZSB1c2VkIG9uIG1hbnkgZGlmZmVyZW50IHBsYXRmb3Jtcy4KIAogYFBzeWNvIDxodHRwOi8vcHN5Y28uc291cmNlZm9yZ2UubmV0PmBfIGlzIGEganVzdC1pbi10aW1lIGNvbXBpbGVyIHRoYXQKIHRyYW5zbGF0ZXMgUHl0aG9uIGNvZGUgaW50byB4ODYgYXNzZW1ibHkgbGFuZ3VhZ2UuICBJZiB5b3UgY2FuIHVzZSBpdCwgUHN5Y28gY2FuCkBAIC0xNzgsOSArMTc4LDEwIEBACiAKICAgIEwyID0gbGlzdChMMVs6M10pICAjICJsaXN0IiBpcyByZWR1bmRhbnQgaWYgTDEgaXMgYSBsaXN0LgogCi1Ob3RlIHRoYXQgdGhlIGZ1bmN0aW9uYWxseS1vcmllbnRlZCBidWlsdGlucyBzdWNoIGFzIDpmdW5jOmBtYXBgLCA6ZnVuYzpgemlwYCwKLWFuZCBmcmllbmRzIGNhbiBiZSBhIGNvbnZlbmllbnQgYWNjZWxlcmF0b3IgZm9yIGxvb3BzIHRoYXQgcGVyZm9ybSBhIHNpbmdsZQotdGFzay4gIEZvciBleGFtcGxlIHRvIHBhaXIgdGhlIGVsZW1lbnRzIG9mIHR3byBsaXN0cyB0b2dldGhlcjo6CitOb3RlIHRoYXQgdGhlIGZ1bmN0aW9uYWxseS1vcmllbnRlZCBidWlsdC1pbiBmdW5jdGlvbnMgc3VjaCBhcyA6ZnVuYzpgbWFwYCwKKzpmdW5jOmB6aXBgLCBhbmQgZnJpZW5kcyBjYW4gYmUgYSBjb252ZW5pZW50IGFjY2VsZXJhdG9yIGZvciBsb29wcyB0aGF0CitwZXJmb3JtIGEgc2luZ2xlIHRhc2suICBGb3IgZXhhbXBsZSB0byBwYWlyIHRoZSBlbGVtZW50cyBvZiB0d28gbGlzdHMKK3RvZ2V0aGVyOjoKIAogICAgPj4+IGxpc3QoemlwKFsxLCAyLCAzXSwgWzQsIDUsIDZdKSkKICAgIFsoMSwgNCksICgyLCA1KSwgKDMsIDYpXQpAQCAtMjAzLDcgKzIwNCw3IEBACiBvbiBzdHJpbmcgb2JqZWN0cyA8c3RyaW5nLW1ldGhvZHM+YC4gIFVzZSByZWd1bGFyIGV4cHJlc3Npb25zIG9ubHkgd2hlbiB5b3UncmUKIG5vdCBkZWFsaW5nIHdpdGggY29uc3RhbnQgc3RyaW5nIHBhdHRlcm5zLgogCi1CZSBzdXJlIHRvIHVzZSB0aGUgOm1ldGg6YGxpc3Quc29ydGAgYnVpbHRpbiBtZXRob2QgdG8gZG8gc29ydGluZywgYW5kIHNlZSB0aGUKK0JlIHN1cmUgdG8gdXNlIHRoZSA6bWV0aDpgbGlzdC5zb3J0YCBidWlsdC1pbiBtZXRob2QgdG8gZG8gc29ydGluZywgYW5kIHNlZSB0aGUKIGBzb3J0aW5nIG1pbmktSE9XVE8gPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Ib3dUby9Tb3J0aW5nPmBfIGZvciBleGFtcGxlcwogb2YgbW9kZXJhdGVseSBhZHZhbmNlZCB1c2FnZS4gIDptZXRoOmBsaXN0LnNvcnRgIGJlYXRzIG90aGVyIHRlY2huaXF1ZXMgZm9yCiBzb3J0aW5nIGluIGFsbCBidXQgdGhlIG1vc3QgZXh0cmVtZSBjaXJjdW1zdGFuY2VzLgpAQCAtMzYxLDcgKzM2Miw3IEBACiBvbmUgaGFuZCwgcmVxdWlyaW5nIDprZXl3b3JkOmBnbG9iYWxgIGZvciBhc3NpZ25lZCB2YXJpYWJsZXMgcHJvdmlkZXMgYSBiYXIKIGFnYWluc3QgdW5pbnRlbmRlZCBzaWRlLWVmZmVjdHMuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYGBnbG9iYWxgYCB3YXMgcmVxdWlyZWQKIGZvciBhbGwgZ2xvYmFsIHJlZmVyZW5jZXMsIHlvdSdkIGJlIHVzaW5nIGBgZ2xvYmFsYGAgYWxsIHRoZSB0aW1lLiAgWW91J2QgaGF2ZQotdG8gZGVjbGFyZSBhcyBnbG9iYWwgZXZlcnkgcmVmZXJlbmNlIHRvIGEgYnVpbHRpbiBmdW5jdGlvbiBvciB0byBhIGNvbXBvbmVudCBvZgordG8gZGVjbGFyZSBhcyBnbG9iYWwgZXZlcnkgcmVmZXJlbmNlIHRvIGEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgdG8gYSBjb21wb25lbnQgb2YKIGFuIGltcG9ydGVkIG1vZHVsZS4gIFRoaXMgY2x1dHRlciB3b3VsZCBkZWZlYXQgdGhlIHVzZWZ1bG5lc3Mgb2YgdGhlIGBgZ2xvYmFsYGAKIGRlY2xhcmF0aW9uIGZvciBpZGVudGlmeWluZyBzaWRlLWVmZmVjdHMuCiAKQEAgLTk4Nyw4ICs5ODgsOCBAQAogOmZ1bmM6YGZsb2F0YC4gIGBgc3BsaXQoKWBgIHN1cHBvcnRzIGFuIG9wdGlvbmFsICJzZXAiIHBhcmFtZXRlciB3aGljaCBpcyB1c2VmdWwKIGlmIHRoZSBsaW5lIHVzZXMgc29tZXRoaW5nIG90aGVyIHRoYW4gd2hpdGVzcGFjZSBhcyBhIHNlcGFyYXRvci4KIAotRm9yIG1vcmUgY29tcGxpY2F0ZWQgaW5wdXQgcGFyc2luZywgcmVndWxhciBleHByZXNzaW9ucyBtb3JlIHBvd2VyZnVsIHRoYW4gQydzCi06Y2Z1bmM6YHNzY2FuZmAgYW5kIGJldHRlciBzdWl0ZWQgZm9yIHRoZSB0YXNrLgorRm9yIG1vcmUgY29tcGxpY2F0ZWQgaW5wdXQgcGFyc2luZywgcmVndWxhciBleHByZXNzaW9ucyBhcmUgbW9yZSBwb3dlcmZ1bAordGhhbiBDJ3MgOmM6ZnVuYzpgc3NjYW5mYCBhbmQgYmV0dGVyIHN1aXRlZCBmb3IgdGhlIHRhc2suCiAKIAogV2hhdCBkb2VzICdVbmljb2RlRGVjb2RlRXJyb3InIG9yICdVbmljb2RlRW5jb2RlRXJyb3InIGVycm9yICBtZWFuPwpAQCAtMTAzMyw3ICsxMDM0LDcgQEAKIEhvdyBkbyBJIGl0ZXJhdGUgb3ZlciBhIHNlcXVlbmNlIGluIHJldmVyc2Ugb3JkZXI/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Vc2UgdGhlIDpmdW5jOmByZXZlcnNlZGAgYnVpbHRpbiBmdW5jdGlvbiwgd2hpY2ggaXMgbmV3IGluIFB5dGhvbiAyLjQ6OgorVXNlIHRoZSA6ZnVuYzpgcmV2ZXJzZWRgIGJ1aWx0LWluIGZ1bmN0aW9uLCB3aGljaCBpcyBuZXcgaW4gUHl0aG9uIDIuNDo6CiAKICAgIGZvciB4IGluIHJldmVyc2VkKHNlcXVlbmNlKToKICAgICAgICAuLi4gIyBkbyBzb21ldGhpbmcgd2l0aCB4Li4uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3dpbmRvd3MucnN0IGIvRG9jL2ZhcS93aW5kb3dzLnJzdAppbmRleCA3Y2QxNmIwLi44YTIwOTUwIDEwMDY0NAotLS0gYS9Eb2MvZmFxL3dpbmRvd3MucnN0CisrKyBiL0RvYy9mYXEvd2luZG93cy5yc3QKQEAgLTQ0NSw3ICs0NDUsNyBAQAogSG93IGRvIEkgZW11bGF0ZSBvcy5raWxsKCkgaW4gV2luZG93cz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRvIHRlcm1pbmF0ZSBhIHByb2Nlc3MsIHlvdSBjYW4gdXNlIGN0eXBlczo6CitQcmlvciB0byBQeXRob24gMi43IGFuZCAzLjIsIHRvIHRlcm1pbmF0ZSBhIHByb2Nlc3MsIHlvdSBjYW4gdXNlIDptb2Q6YGN0eXBlc2A6OgogCiAgICBpbXBvcnQgY3R5cGVzCiAKQEAgLTQ1NSw2ICs0NTUsMTEgQEAKICAgICAgICBoYW5kbGUgPSBrZXJuZWwzMi5PcGVuUHJvY2VzcygxLCAwLCBwaWQpCiAgICAgICAgcmV0dXJuICgwICE9IGtlcm5lbDMyLlRlcm1pbmF0ZVByb2Nlc3MoaGFuZGxlLCAwKSkKIAorSW4gMi43IGFuZCAzLjIsIDpmdW5jOmBvcy5raWxsYCBpcyBpbXBsZW1lbnRlZCBzaW1pbGFyIHRvIHRoZSBhYm92ZSBmdW5jdGlvbiwKK3dpdGggdGhlIGFkZGl0aW9uYWwgZmVhdHVyZSBvZiBiZWluZyBhYmxlIHRvIHNlbmQgQ1RSTCtDIGFuZCBDVFJMK0JSRUFLCit0byBjb25zb2xlIHN1YnByb2Nlc3NlcyB3aGljaCBhcmUgZGVzaWduZWQgdG8gaGFuZGxlIHRob3NlIHNpZ25hbHMuIFNlZQorOmZ1bmM6YG9zLmtpbGxgIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKIAogV2h5IGRvZXMgb3MucGF0aC5pc2RpcigpIGZhaWwgb24gTlQgc2hhcmVkIGRpcmVjdG9yaWVzPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTM2LDcgKzU0MSw3IEBACiBUaGUgUHl0aG9uIDEuNS4qIERMTHMgKGBgcHl0aG9uMTUuZGxsYGApIGFyZSBhbGwgY29tcGlsZWQgd2l0aCBNUyBWQysrIDUuMCBhbmQKIHdpdGggbXVsdGl0aHJlYWRpbmctRExMIG9wdGlvbnMgKGBgL01EYGApLgogCi1JZiB5b3UgY2FuJ3QgY2hhbmdlIGNvbXBpbGVycyBvciBmbGFncywgdHJ5IHVzaW5nIDpjZnVuYzpgUHlfUnVuU2ltcGxlU3RyaW5nYC4KK0lmIHlvdSBjYW4ndCBjaGFuZ2UgY29tcGlsZXJzIG9yIGZsYWdzLCB0cnkgdXNpbmcgOmM6ZnVuYzpgUHlfUnVuU2ltcGxlU3RyaW5nYC4KIEEgdHJpY2sgdG8gZ2V0IGl0IHRvIHJ1biBhbiBhcmJpdHJhcnkgZmlsZSBpcyB0byBjb25zdHJ1Y3QgYSBjYWxsIHRvCiA6ZnVuYzpgZXhlY2ZpbGVgIHdpdGggdGhlIG5hbWUgb2YgeW91ciBmaWxlIGFzIGFyZ3VtZW50LgogCmRpZmYgLS1naXQgYS9Eb2MvZ2xvc3NhcnkucnN0IGIvRG9jL2dsb3NzYXJ5LnJzdAppbmRleCA3NDMxNTQ1Li5lYzhhZjYyIDEwMDY0NAotLS0gYS9Eb2MvZ2xvc3NhcnkucnN0CisrKyBiL0RvYy9nbG9zc2FyeS5yc3QKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgIDpyZWY6YDJ0bzMtcmVmZXJlbmNlYC4KIAogICAgYWJzdHJhY3QgYmFzZSBjbGFzcwotICAgICAgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChhYmJyZXZpYXRlZCBBQkNzKSBjb21wbGVtZW50IDp0ZXJtOmBkdWNrLXR5cGluZ2AgYnkKKyAgICAgIDpyZWY6YGFic3RyYWN0LWJhc2UtY2xhc3Nlc2AgY29tcGxlbWVudCA6dGVybTpgZHVjay10eXBpbmdgIGJ5CiAgICAgICBwcm92aWRpbmcgYSB3YXkgdG8gZGVmaW5lIGludGVyZmFjZXMgd2hlbiBvdGhlciB0ZWNobmlxdWVzIGxpa2UKICAgICAgIDpmdW5jOmBoYXNhdHRyYCB3b3VsZCBiZSBjbHVtc3kuIFB5dGhvbiBjb21lcyB3aXRoIG1hbnkgYnVpbHQtaW4gQUJDcyBmb3IKICAgICAgIGRhdGEgc3RydWN0dXJlcyAoaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUpLCBudW1iZXJzIChpbiB0aGUKQEAgLTU3LDExICs1NywxNCBAQAogCiAgICBieXRlY29kZQogICAgICAgUHl0aG9uIHNvdXJjZSBjb2RlIGlzIGNvbXBpbGVkIGludG8gYnl0ZWNvZGUsIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbgotICAgICAgb2YgYSBQeXRob24gcHJvZ3JhbSBpbiB0aGUgaW50ZXJwcmV0ZXIuICBUaGUgYnl0ZWNvZGUgaXMgYWxzbyBjYWNoZWQgaW4KLSAgICAgIGBgLnB5Y2BgIGFuZCBgYC5weW9gYCBmaWxlcyBzbyB0aGF0IGV4ZWN1dGluZyB0aGUgc2FtZSBmaWxlIGlzIGZhc3RlciB0aGUKLSAgICAgIHNlY29uZCB0aW1lIChyZWNvbXBpbGF0aW9uIGZyb20gc291cmNlIHRvIGJ5dGVjb2RlIGNhbiBiZSBhdm9pZGVkKS4gIFRoaXMKLSAgICAgICJpbnRlcm1lZGlhdGUgbGFuZ3VhZ2UiIGlzIHNhaWQgdG8gcnVuIG9uIGEgOnRlcm06YHZpcnR1YWwgbWFjaGluZWAKLSAgICAgIHRoYXQgZXhlY3V0ZXMgdGhlIG1hY2hpbmUgY29kZSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggYnl0ZWNvZGUuCisgICAgICBvZiBhIFB5dGhvbiBwcm9ncmFtIGluIHRoZSBDUHl0aG9uIGludGVycHJldGVyLiAgVGhlIGJ5dGVjb2RlIGlzIGFsc28KKyAgICAgIGNhY2hlZCBpbiBgYC5weWNgYCBhbmQgYGAucHlvYGAgZmlsZXMgc28gdGhhdCBleGVjdXRpbmcgdGhlIHNhbWUgZmlsZSBpcworICAgICAgZmFzdGVyIHRoZSBzZWNvbmQgdGltZSAocmVjb21waWxhdGlvbiBmcm9tIHNvdXJjZSB0byBieXRlY29kZSBjYW4gYmUKKyAgICAgIGF2b2lkZWQpLiAgVGhpcyAiaW50ZXJtZWRpYXRlIGxhbmd1YWdlIiBpcyBzYWlkIHRvIHJ1biBvbiBhCisgICAgICA6dGVybTpgdmlydHVhbCBtYWNoaW5lYCB0aGF0IGV4ZWN1dGVzIHRoZSBtYWNoaW5lIGNvZGUgY29ycmVzcG9uZGluZyB0bworICAgICAgZWFjaCBieXRlY29kZS4gRG8gbm90ZSB0aGF0IGJ5dGVjb2RlcyBhcmUgbm90IGV4cGVjdGVkIHRvIHdvcmsgYmV0d2VlbgorICAgICAgZGlmZmVyZW50IFB5dGhvbiB2aXJ0dWFsIG1hY2hpbmVzLCBub3IgdG8gYmUgc3RhYmxlIGJldHdlZW4gUHl0aG9uCisgICAgICByZWxlYXNlcy4KIAogICAgICAgQSBsaXN0IG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgICAgICA6cmVmOmB0aGUgZGlzIG1vZHVsZSA8Ynl0ZWNvZGVzPmAuCkBAIC0yMzQsNiArMjM3LDggQEAKICAgICAgIHBlcmZvcm1zIGdhcmJhZ2UgY29sbGVjdGlvbiB2aWEgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBhIGN5Y2xpYyBnYXJiYWdlCiAgICAgICBjb2xsZWN0b3IgdGhhdCBpcyBhYmxlIHRvIGRldGVjdCBhbmQgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KIAorICAgICAgLi4gaW5kZXg6OiBzaW5nbGU6IGdlbmVyYXRvcgorCiAgICBnZW5lcmF0b3IKICAgICAgIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpdGVyYXRvci4gIEl0IGxvb2tzIGxpa2UgYSBub3JtYWwgZnVuY3Rpb24KICAgICAgIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zIDprZXl3b3JkOmB5aWVsZGAgc3RhdGVtZW50cyBmb3IgcHJvZHVjaW5nIGEgc2VyaWVzCkBAIC0yNDcsNyArMjUyLDcgQEAKICAgICAgIC4uIGluZGV4Ojogc2luZ2xlOiBnZW5lcmF0b3IgZXhwcmVzc2lvbgogCiAgICBnZW5lcmF0b3IgZXhwcmVzc2lvbgotICAgICAgQW4gZXhwcmVzc2lvbiB0aGF0IHJldHVybnMgYSBnZW5lcmF0b3IuICBJdCBsb29rcyBsaWtlIGEgbm9ybWFsIGV4cHJlc3Npb24KKyAgICAgIEFuIGV4cHJlc3Npb24gdGhhdCByZXR1cm5zIGFuIGl0ZXJhdG9yLiAgSXQgbG9va3MgbGlrZSBhIG5vcm1hbCBleHByZXNzaW9uCiAgICAgICBmb2xsb3dlZCBieSBhIDprZXl3b3JkOmBmb3JgIGV4cHJlc3Npb24gZGVmaW5pbmcgYSBsb29wIHZhcmlhYmxlLCByYW5nZSwKICAgICAgIGFuZCBhbiBvcHRpb25hbCA6a2V5d29yZDpgaWZgIGV4cHJlc3Npb24uICBUaGUgY29tYmluZWQgZXhwcmVzc2lvbgogICAgICAgZ2VuZXJhdGVzIHZhbHVlcyBmb3IgYW4gZW5jbG9zaW5nIGZ1bmN0aW9uOjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgc2xvd2x5LiAgU2VlIGFsc28gOnRlcm06YGludGVyYWN0aXZlYC4KIAogICAgaXRlcmFibGUKLSAgICAgIEEgY29udGFpbmVyIG9iamVjdCBjYXBhYmxlIG9mIHJldHVybmluZyBpdHMgbWVtYmVycyBvbmUgYXQgYQorICAgICAgQW4gb2JqZWN0IGNhcGFibGUgb2YgcmV0dXJuaW5nIGl0cyBtZW1iZXJzIG9uZSBhdCBhCiAgICAgICB0aW1lLiBFeGFtcGxlcyBvZiBpdGVyYWJsZXMgaW5jbHVkZSBhbGwgc2VxdWVuY2UgdHlwZXMgKHN1Y2ggYXMKICAgICAgIDpjbGFzczpgbGlzdGAsIDpjbGFzczpgc3RyYCwgYW5kIDpjbGFzczpgdHVwbGVgKSBhbmQgc29tZSBub24tc2VxdWVuY2UKICAgICAgIHR5cGVzIGxpa2UgOmNsYXNzOmBkaWN0YCBhbmQgOmNsYXNzOmBmaWxlYCBhbmQgb2JqZWN0cyBvZiBhbnkgY2xhc3NlcyB5b3UKQEAgLTM5Nyw2ICs0MDIsMTIgQEAKICAgICAgIHRoZSA6dGVybTpgRUFGUGAgYXBwcm9hY2ggYW5kIGlzIGNoYXJhY3Rlcml6ZWQgYnkgdGhlIHByZXNlbmNlIG9mIG1hbnkKICAgICAgIDprZXl3b3JkOmBpZmAgc3RhdGVtZW50cy4KIAorICAgICAgSW4gYSBtdWx0aS10aHJlYWRlZCBlbnZpcm9ubWVudCwgdGhlIExCWUwgYXBwcm9hY2ggY2FuIHJpc2sgaW50cm9kdWNpbmcgYQorICAgICAgcmFjZSBjb25kaXRpb24gYmV0d2VlbiAidGhlIGxvb2tpbmciIGFuZCAidGhlIGxlYXBpbmciLiAgRm9yIGV4YW1wbGUsIHRoZQorICAgICAgY29kZSwgYGBpZiBrZXkgaW4gbWFwcGluZzogcmV0dXJuIG1hcHBpbmdba2V5XWBgIGNhbiBmYWlsIGlmIGFub3RoZXIKKyAgICAgIHRocmVhZCByZW1vdmVzICprZXkqIGZyb20gKm1hcHBpbmcqIGFmdGVyIHRoZSB0ZXN0LCBidXQgYmVmb3JlIHRoZSBsb29rdXAuCisgICAgICBUaGlzIGlzc3VlIGNhbiBiZSBzb2x2ZWQgd2l0aCBsb2NrcyBvciBieSB1c2luZyB0aGUgRUFGUCBhcHByb2FjaC4KKwogICAgbGlzdAogICAgICAgQSBidWlsdC1pbiBQeXRob24gOnRlcm06YHNlcXVlbmNlYC4gIERlc3BpdGUgaXRzIG5hbWUgaXQgaXMgbW9yZSBha2luCiAgICAgICB0byBhbiBhcnJheSBpbiBvdGhlciBsYW5ndWFnZXMgdGhhbiB0byBhIGxpbmtlZCBsaXN0IHNpbmNlIGFjY2VzcyB0bwpAQCAtNDE3LDkgKzQyOCwxMSBAQAogICAgICAgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkxvYWRlcmAgZm9yIGFuIDp0ZXJtOmBhYnN0cmFjdCBiYXNlIGNsYXNzYC4KIAogICAgbWFwcGluZwotICAgICAgQSBjb250YWluZXIgb2JqZWN0IChzdWNoIGFzIDpjbGFzczpgZGljdGApIHdoaWNoIHN1cHBvcnRzIGFyYml0cmFyeSBrZXkKLSAgICAgIGxvb2t1cHMgdXNpbmcgdGhlIHNwZWNpYWwgbWV0aG9kIDptZXRoOmBfX2dldGl0ZW1fX2AuICBNYXBwaW5ncyBhbHNvCi0gICAgICBzdXBwb3J0IDptZXRoOmBfX2xlbl9fYCwgOm1ldGg6YF9faXRlcl9fYCwgYW5kIDptZXRoOmBfX2NvbnRhaW5zX19gLgorICAgICAgQSBjb250YWluZXIgb2JqZWN0IHRoYXQgc3VwcG9ydHMgYXJiaXRyYXJ5IGtleSBsb29rdXBzIGFuZCBpbXBsZW1lbnRzIHRoZQorICAgICAgbWV0aG9kcyBzcGVjaWZpZWQgaW4gdGhlIDpjbGFzczpgTWFwcGluZ2Agb3IgOmNsYXNzOmBNdXRhYmxlTWFwcGluZ2AKKyAgICAgIDpyZWY6YGFic3RyYWN0IGJhc2UgY2xhc3NlcyA8YWJzdHJhY3QtYmFzZS1jbGFzc2VzPmAuIEV4YW1wbGVzIGluY2x1ZGUKKyAgICAgIDpjbGFzczpgZGljdGAsIDpjbGFzczpgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3RgLAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgYW5kIDpjbGFzczpgY29sbGVjdGlvbnMuQ291bnRlcmAuCiAKICAgIG1ldGFjbGFzcwogICAgICAgVGhlIGNsYXNzIG9mIGEgY2xhc3MuICBDbGFzcyBkZWZpbml0aW9ucyBjcmVhdGUgYSBjbGFzcyBuYW1lLCBhIGNsYXNzCkBAIC00NDAsNiArNDUzLDE0IEBACiAgICAgICBpdHMgZmlyc3QgOnRlcm06YGFyZ3VtZW50YCAod2hpY2ggaXMgdXN1YWxseSBjYWxsZWQgYGBzZWxmYGApLgogICAgICAgU2VlIDp0ZXJtOmBmdW5jdGlvbmAgYW5kIDp0ZXJtOmBuZXN0ZWQgc2NvcGVgLgogCisgICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlcgorICAgICAgTWV0aG9kIFJlc29sdXRpb24gT3JkZXIgaXMgdGhlIG9yZGVyIGluIHdoaWNoIGJhc2UgY2xhc3NlcyBhcmUgc2VhcmNoZWQKKyAgICAgIGZvciBhIG1lbWJlciBkdXJpbmcgbG9va3VwLiBTZWUgYFRoZSBQeXRob24gMi4zIE1ldGhvZCBSZXNvbHV0aW9uIE9yZGVyCisgICAgICA8aHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vPmBfLgorCisgICBNUk8KKyAgICAgIFNlZSA6dGVybTpgbWV0aG9kIHJlc29sdXRpb24gb3JkZXJgLgorCiAgICBtdXRhYmxlCiAgICAgICBNdXRhYmxlIG9iamVjdHMgY2FuIGNoYW5nZSB0aGVpciB2YWx1ZSBidXQga2VlcCB0aGVpciA6ZnVuYzpgaWRgLiAgU2VlCiAgICAgICBhbHNvIDp0ZXJtOmBpbW11dGFibGVgLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKaW5kZXggZDIwZTRhNi4uNzE4NDQ5NiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdAorKysgYi9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGUgZWFzaWVzdCB3YXkgdG8gY29tcGlsZSBvbmx5IHNvbWUgY29kZSBmb3IgMy4wIGlzIHRvIGNoZWNrIGlmCi06Y21hY3JvOmBQWV9NQUpPUl9WRVJTSU9OYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMy4gOjoKKzpjOm1hY3JvOmBQWV9NQUpPUl9WRVJTSU9OYCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMy4gOjoKIAogICAgI2lmIFBZX01BSk9SX1ZFUlNJT04gPj0gMwogICAgI2RlZmluZSBJU19QWTNLCkBAIC00NywxMiArNDcsMTIgQEAKIDIueCdzIDpmdW5jOmB1bmljb2RlYCAoYGBQeVVuaWNvZGVfKmBgKS4gIFRoZSBvbGQgOC1iaXQgc3RyaW5nIHR5cGUgaGFzIGJlY29tZQogOmZ1bmM6YGJ5dGVzYC4gIFB5dGhvbiAyLjYgYW5kIGxhdGVyIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IGhlYWRlciwKIDpmaWxlOmBieXRlc29iamVjdC5oYCwgbWFwcGluZyBgYFB5Qnl0ZXNgYCBuYW1lcyB0byBgYFB5U3RyaW5nYGAgb25lcy4gIEZvciBiZXN0Ci1jb21wYXRpYmlsaXR5IHdpdGggMy4wLCA6Y3R5cGU6YFB5VW5pY29kZWAgc2hvdWxkIGJlIHVzZWQgZm9yIHRleHR1YWwgZGF0YSBhbmQKLTpjdHlwZTpgUHlCeXRlc2AgZm9yIGJpbmFyeSBkYXRhLiAgSXQncyBhbHNvIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0Ci06Y3R5cGU6YFB5Qnl0ZXNgIGFuZCA6Y3R5cGU6YFB5VW5pY29kZWAgaW4gMy4wIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlIGxpa2UKLTpjdHlwZTpgUHlTdHJpbmdgIGFuZCA6Y3R5cGU6YFB5VW5pY29kZWAgYXJlIGluIDIueC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZQotc2hvd3MgYmVzdCBwcmFjdGljZXMgd2l0aCByZWdhcmRzIHRvIDpjdHlwZTpgUHlVbmljb2RlYCwgOmN0eXBlOmBQeVN0cmluZ2AsCi1hbmQgOmN0eXBlOmBQeUJ5dGVzYC4gOjoKK2NvbXBhdGliaWxpdHkgd2l0aCAzLjAsIDpjOnR5cGU6YFB5VW5pY29kZWAgc2hvdWxkIGJlIHVzZWQgZm9yIHRleHR1YWwgZGF0YSBhbmQKKzpjOnR5cGU6YFB5Qnl0ZXNgIGZvciBiaW5hcnkgZGF0YS4gIEl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdAorOmM6dHlwZTpgUHlCeXRlc2AgYW5kIDpjOnR5cGU6YFB5VW5pY29kZWAgaW4gMy4wIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlIGxpa2UKKzpjOnR5cGU6YFB5U3RyaW5nYCBhbmQgOmM6dHlwZTpgUHlVbmljb2RlYCBhcmUgaW4gMi54LiAgVGhlIGZvbGxvd2luZyBleGFtcGxlCitzaG93cyBiZXN0IHByYWN0aWNlcyB3aXRoIHJlZ2FyZHMgdG8gOmM6dHlwZTpgUHlVbmljb2RlYCwgOmM6dHlwZTpgUHlTdHJpbmdgLAorYW5kIDpjOnR5cGU6YFB5Qnl0ZXNgLiA6OgogCiAgICAjaW5jbHVkZSAic3RkbGliLmgiCiAgICAjaW5jbHVkZSAiUHl0aG9uLmgiCkBAIC0xMjAsNyArMTIwLDcgQEAKIE1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotUHl0aG9uIDMuMCBoYXMgYSByZXZhbXBlZCBleHRlbnNpb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHN5c3RlbS4gIChTZWUgUEVQCitQeXRob24gMy4wIGhhcyBhIHJldmFtcGVkIGV4dGVuc2lvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gc3lzdGVtLiAgKFNlZQogOnBlcDpgMzEyMWAuKSAgSW5zdGVhZCBvZiBzdG9yaW5nIG1vZHVsZSBzdGF0ZSBpbiBnbG9iYWxzLCB0aGV5IHNob3VsZCBiZSBzdG9yZWQKIGluIGFuIGludGVycHJldGVyIHNwZWNpZmljIHN0cnVjdHVyZS4gIENyZWF0aW5nIG1vZHVsZXMgdGhhdCBhY3QgY29ycmVjdGx5IGluCiBib3RoIDIueCBhbmQgMy4wIGlzIHRyaWNreS4gIFRoZSBmb2xsb3dpbmcgc2ltcGxlIGV4YW1wbGUgZGVtb25zdHJhdGVzIGhvdy4gOjoKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdCBiL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdAppbmRleCBjZGI2YThlLi44MWJiOGNhIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKKysrIGIvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CkBAIC05Nyw3ICs5Nyw3IEBACiBpbXBsZW1lbnRhdGlvbiB3b3JrcyB0aHJvdWdoIGEgcHJlY2VkZW5jZSBjaGFpbiB0aGF0IGdpdmVzIGRhdGEgZGVzY3JpcHRvcnMKIHByaW9yaXR5IG92ZXIgaW5zdGFuY2UgdmFyaWFibGVzLCBpbnN0YW5jZSB2YXJpYWJsZXMgcHJpb3JpdHkgb3ZlciBub24tZGF0YQogZGVzY3JpcHRvcnMsIGFuZCBhc3NpZ25zIGxvd2VzdCBwcmlvcml0eSB0byA6bWV0aDpgX19nZXRhdHRyX19gIGlmIHByb3ZpZGVkLiAgVGhlCi1mdWxsIEMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIDpjZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKWAgaW4KK2Z1bGwgQyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gOmM6ZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKWAgaW4KIGBPYmplY3RzL29iamVjdC5jIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9vYmplY3QuYz92aWV3PW1hcmt1cD5gX1wuCiAKIEZvciBjbGFzc2VzLCB0aGUgbWFjaGluZXJ5IGlzIGluIDptZXRoOmB0eXBlLl9fZ2V0YXR0cmlidXRlX19gIHdoaWNoIHRyYW5zZm9ybXMKQEAgLTEzMSw3ICsxMzEsNyBAQAogTm90ZSwgaW4gUHl0aG9uIDIuMiwgYGBzdXBlcihCLCBvYmopLm0oKWBgIHdvdWxkIG9ubHkgaW52b2tlIDptZXRoOmBfX2dldF9fYCBpZgogYGBtYGAgd2FzIGEgZGF0YSBkZXNjcmlwdG9yLiAgSW4gUHl0aG9uIDIuMywgbm9uLWRhdGEgZGVzY3JpcHRvcnMgYWxzbyBnZXQKIGludm9rZWQgdW5sZXNzIGFuIG9sZC1zdHlsZSBjbGFzcyBpcyBpbnZvbHZlZC4gIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZQotaW4gOmNmdW5jOmBzdXBlcl9nZXRhdHRybygpYCBpbgoraW4gOmM6ZnVuYzpgc3VwZXJfZ2V0YXR0cm8oKWAgaW4KIGBPYmplY3RzL3R5cGVvYmplY3QuYyA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvdHlwZW9iamVjdC5jP3ZpZXc9bWFya3VwPmBfCiBhbmQgYSBwdXJlIFB5dGhvbiBlcXVpdmFsZW50IGNhbiBiZSBmb3VuZCBpbiBgR3VpZG8ncyBUdXRvcmlhbGBfLgogCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogVGhlIG91dHB1dCBzdWdnZXN0cyB0aGF0IGJvdW5kIGFuZCB1bmJvdW5kIG1ldGhvZHMgYXJlIHR3byBkaWZmZXJlbnQgdHlwZXMuCiBXaGlsZSB0aGV5IGNvdWxkIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCB0aGF0IHdheSwgdGhlIGFjdHVhbCBDIGltcGxlbWVudGF0aW9uIG9mCi06Y3R5cGU6YFB5TWV0aG9kX1R5cGVgIGluCis6Yzp0eXBlOmBQeU1ldGhvZF9UeXBlYCBpbgogYE9iamVjdHMvY2xhc3NvYmplY3QuYyA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvY2xhc3NvYmplY3QuYz92aWV3PW1hcmt1cD5gXwogaXMgYSBzaW5nbGUgb2JqZWN0IHdpdGggdHdvIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlCiA6YXR0cjpgaW1fc2VsZmAgZmllbGQgaXMgc2V0IG9yIGlzICpOVUxMKiAodGhlIEMgZXF1aXZhbGVudCBvZiAqTm9uZSopLgpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2RvYW5kZG9udC5yc3QgYi9Eb2MvaG93dG8vZG9hbmRkb250LnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY1YTYyMDlkLi4wMDAwMDAwCi0tLSBhL0RvYy9ob3d0by9kb2FuZGRvbnQucnN0CisrKyAvZGV2L251bGwKQEAgLTEsMjkwICswLDAgQEAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBJZGlvbXMgYW5kIEFudGktSWRpb21zIGluIFB5dGhvbgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLTpBdXRob3I6IE1vc2hlIFphZGthCi0KLVRoaXMgZG9jdW1lbnQgaXMgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgotCi0KLS4uIHRvcGljOjogQWJzdHJhY3QKLQotICAgVGhpcyBkb2N1bWVudCBjYW4gYmUgY29uc2lkZXJlZCBhIGNvbXBhbmlvbiB0byB0aGUgdHV0b3JpYWwuIEl0IHNob3dzIGhvdyB0byB1c2UKLSAgIFB5dGhvbiwgYW5kIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgaG93ICpub3QqIHRvIHVzZSBQeXRob24uCi0KLQotTGFuZ3VhZ2UgQ29uc3RydWN0cyBZb3UgU2hvdWxkIE5vdCBVc2UKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVdoaWxlIFB5dGhvbiBoYXMgcmVsYXRpdmVseSBmZXcgZ290Y2hhcyBjb21wYXJlZCB0byBvdGhlciBsYW5ndWFnZXMsIGl0IHN0aWxsCi1oYXMgc29tZSBjb25zdHJ1Y3RzIHdoaWNoIGFyZSBvbmx5IHVzZWZ1bCBpbiBjb3JuZXIgY2FzZXMsIG9yIGFyZSBwbGFpbgotZGFuZ2Vyb3VzLgotCi0KLWZyb20gbW9kdWxlIGltcG9ydCBcKgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQotSW5zaWRlIEZ1bmN0aW9uIERlZmluaXRpb25zCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgIGlzICppbnZhbGlkKiBpbnNpZGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuIFdoaWxlIG1hbnkKLXZlcnNpb25zIG9mIFB5dGhvbiBkbyBub3QgY2hlY2sgZm9yIHRoZSBpbnZhbGlkaXR5LCBpdCBkb2VzIG5vdCBtYWtlIGl0IG1vcmUKLXZhbGlkLCBubyBtb3JlIHRoYW4gaGF2aW5nIGEgc21hcnQgbGF3eWVyIG1ha2VzIGEgbWFuIGlubm9jZW50LiBEbyBub3QgdXNlIGl0Ci1saWtlIHRoYXQgZXZlci4gRXZlbiBpbiB2ZXJzaW9ucyB3aGVyZSBpdCB3YXMgYWNjZXB0ZWQsIGl0IG1hZGUgdGhlIGZ1bmN0aW9uCi1leGVjdXRpb24gc2xvd2VyLCBiZWNhdXNlIHRoZSBjb21waWxlciBjb3VsZCBub3QgYmUgY2VydGFpbiB3aGljaCBuYW1lcyBhcmUKLWxvY2FsIGFuZCB3aGljaCBhcmUgZ2xvYmFsLiBJbiBQeXRob24gMi4xIHRoaXMgY29uc3RydWN0IGNhdXNlcyB3YXJuaW5ncywgYW5kCi1zb21ldGltZXMgZXZlbiBlcnJvcnMuCi0KLQotQXQgTW9kdWxlIExldmVsCi1eXl5eXl5eXl5eXl5eXl4KLQotV2hpbGUgaXQgaXMgdmFsaWQgdG8gdXNlIGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYCBhdCBtb2R1bGUgbGV2ZWwgaXQgaXMgdXN1YWxseQotYSBiYWQgaWRlYS4gRm9yIG9uZSwgdGhpcyBsb3NlcyBhbiBpbXBvcnRhbnQgcHJvcGVydHkgUHl0aG9uIG90aGVyd2lzZSBoYXMgLS0tCi15b3UgY2FuIGtub3cgd2hlcmUgZWFjaCB0b3BsZXZlbCBuYW1lIGlzIGRlZmluZWQgYnkgYSBzaW1wbGUgInNlYXJjaCIgZnVuY3Rpb24KLWluIHlvdXIgZmF2b3VyaXRlIGVkaXRvci4gWW91IGFsc28gb3BlbiB5b3Vyc2VsZiB0byB0cm91YmxlIGluIHRoZSBmdXR1cmUsIGlmCi1zb21lIG1vZHVsZSBncm93cyBhZGRpdGlvbmFsIGZ1bmN0aW9ucyBvciBjbGFzc2VzLgotCi1PbmUgb2YgdGhlIG1vc3QgYXdmdWwgcXVlc3Rpb24gYXNrZWQgb24gdGhlIG5ld3Nncm91cCBpcyB3aHkgdGhpcyBjb2RlOjoKLQotICAgZiA9IG9wZW4oInd3dyIpCi0gICBmLnJlYWQoKQotCi1kb2VzIG5vdCB3b3JrLiBPZiBjb3Vyc2UsIGl0IHdvcmtzIGp1c3QgZmluZSAoYXNzdW1pbmcgeW91IGhhdmUgYSBmaWxlIGNhbGxlZAotInd3dyIuKSBCdXQgaXQgZG9lcyBub3Qgd29yayBpZiBzb21ld2hlcmUgaW4gdGhlIG1vZHVsZSwgdGhlIHN0YXRlbWVudCBgYGZyb20gb3MKLWltcG9ydCAqYGAgaXMgcHJlc2VudC4gVGhlIDptb2Q6YG9zYCBtb2R1bGUgaGFzIGEgZnVuY3Rpb24gY2FsbGVkIDpmdW5jOmBvcGVuYAotd2hpY2ggcmV0dXJucyBhbiBpbnRlZ2VyLiBXaGlsZSBpdCBpcyB2ZXJ5IHVzZWZ1bCwgc2hhZG93aW5nIGJ1aWx0aW5zIGlzIG9uZSBvZgotaXRzIGxlYXN0IHVzZWZ1bCBwcm9wZXJ0aWVzLgotCi1SZW1lbWJlciwgeW91IGNhbiBuZXZlciBrbm93IGZvciBzdXJlIHdoYXQgbmFtZXMgYSBtb2R1bGUgZXhwb3J0cywgc28gZWl0aGVyCi10YWtlIHdoYXQgeW91IG5lZWQgLS0tIGBgZnJvbSBtb2R1bGUgaW1wb3J0IG5hbWUxLCBuYW1lMmBgLCBvciBrZWVwIHRoZW0gaW4gdGhlCi1tb2R1bGUgYW5kIGFjY2VzcyBvbiBhIHBlci1uZWVkIGJhc2lzIC0tLSBgYGltcG9ydCBtb2R1bGU7IHByaW50KG1vZHVsZS5uYW1lKWBgLgotCi0KLVdoZW4gSXQgSXMgSnVzdCBGaW5lCi1eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1UaGVyZSBhcmUgc2l0dWF0aW9ucyBpbiB3aGljaCBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAgaXMganVzdCBmaW5lOgotCi0qIFRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQuIEZvciBleGFtcGxlLCBgYGZyb20gbWF0aCBpbXBvcnQgKmBgIG1ha2VzIFB5dGhvbiBhbgotICBhbWF6aW5nIHNjaWVudGlmaWMgY2FsY3VsYXRvci4KLQotKiBXaGVuIGV4dGVuZGluZyBhIG1vZHVsZSBpbiBDIHdpdGggYSBtb2R1bGUgaW4gUHl0aG9uLgotCi0qIFdoZW4gdGhlIG1vZHVsZSBhZHZlcnRpc2VzIGl0c2VsZiBhcyBgYGZyb20gaW1wb3J0ICpgYCBzYWZlLgotCi0KLWZyb20gbW9kdWxlIGltcG9ydCBuYW1lMSwgbmFtZTIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBpcyBhICJkb24ndCIgd2hpY2ggaXMgbXVjaCB3ZWFrZXIgdGhhbiB0aGUgcHJldmlvdXMgImRvbid0InMgYnV0IGlzIHN0aWxsCi1zb21ldGhpbmcgeW91IHNob3VsZCBub3QgZG8gaWYgeW91IGRvbid0IGhhdmUgZ29vZCByZWFzb25zIHRvIGRvIHRoYXQuIFRoZQotcmVhc29uIGl0IGlzIHVzdWFsbHkgYmFkIGlkZWEgaXMgYmVjYXVzZSB5b3Ugc3VkZGVubHkgaGF2ZSBhbiBvYmplY3Qgd2hpY2ggbGl2ZXMKLWluIHR3byBzZXBhcmF0ZSBuYW1lc3BhY2VzLiBXaGVuIHRoZSBiaW5kaW5nIGluIG9uZSBuYW1lc3BhY2UgY2hhbmdlcywgdGhlCi1iaW5kaW5nIGluIHRoZSBvdGhlciB3aWxsIG5vdCwgc28gdGhlcmUgd2lsbCBiZSBhIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlbS4gVGhpcwotaGFwcGVucyB3aGVuLCBmb3IgZXhhbXBsZSwgb25lIG1vZHVsZSBpcyByZWxvYWRlZCwgb3IgY2hhbmdlcyB0aGUgZGVmaW5pdGlvbiBvZgotYSBmdW5jdGlvbiBhdCBydW50aW1lLgotCi1CYWQgZXhhbXBsZTo6Ci0KLSAgICMgZm9vLnB5Ci0gICBhID0gMQotCi0gICAjIGJhci5weQotICAgZnJvbSBmb28gaW1wb3J0IGEKLSAgIGlmIHNvbWV0aGluZygpOgotICAgICAgIGEgPSAyICMgZGFuZ2VyOiBmb28uYSAhPSBhCi0KLUdvb2QgZXhhbXBsZTo6Ci0KLSAgICMgZm9vLnB5Ci0gICBhID0gMQotCi0gICAjIGJhci5weQotICAgaW1wb3J0IGZvbwotICAgaWYgc29tZXRoaW5nKCk6Ci0gICAgICAgZm9vLmEgPSAyCi0KLQotZXhjZXB0OgotLS0tLS0tLQotCi1QeXRob24gaGFzIHRoZSBgYGV4Y2VwdDpgYCBjbGF1c2UsIHdoaWNoIGNhdGNoZXMgYWxsIGV4Y2VwdGlvbnMuIFNpbmNlICpldmVyeSoKLWVycm9yIGluIFB5dGhvbiByYWlzZXMgYW4gZXhjZXB0aW9uLCB1c2luZyBgYGV4Y2VwdDpgYCBjYW4gbWFrZSBtYW55Ci1wcm9ncmFtbWluZyBlcnJvcnMgbG9vayBsaWtlIHJ1bnRpbWUgcHJvYmxlbXMsIHdoaWNoIGhpbmRlcnMgdGhlIGRlYnVnZ2luZwotcHJvY2Vzcy4KLQotVGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGEgZ3JlYXQgZXhhbXBsZSBvZiB3aHkgdGhpcyBpcyBiYWQ6OgotCi0gICB0cnk6Ci0gICAgICAgZm9vID0gb3BuZSgiZmlsZSIpICMgbWlzc3BlbGxlZCAib3BlbiIKLSAgIGV4Y2VwdDoKLSAgICAgICBzeXMuZXhpdCgiY291bGQgbm90IG9wZW4gZmlsZSEiKQotCi1UaGUgc2Vjb25kIGxpbmUgdHJpZ2dlcnMgYSA6ZXhjOmBOYW1lRXJyb3JgLCB3aGljaCBpcyBjYXVnaHQgYnkgdGhlIGV4Y2VwdAotY2xhdXNlLiBUaGUgcHJvZ3JhbSB3aWxsIGV4aXQsIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSB0aGUgcHJvZ3JhbSBwcmludHMgd2lsbAotbWFrZSB5b3UgdGhpbmsgdGhlIHByb2JsZW0gaXMgdGhlIHJlYWRhYmlsaXR5IG9mIGBgImZpbGUiYGAgd2hlbiBpbiBmYWN0Ci10aGUgcmVhbCBlcnJvciBoYXMgbm90aGluZyB0byBkbyB3aXRoIGBgImZpbGUiYGAuCi0KLUEgYmV0dGVyIHdheSB0byB3cml0ZSB0aGUgYWJvdmUgaXMgOjoKLQotICAgdHJ5OgotICAgICAgIGZvbyA9IG9wbmUoImZpbGUiKQotICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgc3lzLmV4aXQoImNvdWxkIG5vdCBvcGVuIGZpbGUiKQotCi1XaGVuIHRoaXMgaXMgcnVuLCBQeXRob24gd2lsbCBwcm9kdWNlIGEgdHJhY2ViYWNrIHNob3dpbmcgdGhlIDpleGM6YE5hbWVFcnJvcmAsCi1hbmQgaXQgd2lsbCBiZSBpbW1lZGlhdGVseSBhcHBhcmVudCB3aGF0IG5lZWRzIHRvIGJlIGZpeGVkLgotCi0uLiBpbmRleDo6IGJhcmUgZXhjZXB0LCBleGNlcHQ7IGJhcmUKLQotQmVjYXVzZSBgYGV4Y2VwdDpgYCBjYXRjaGVzICphbGwqIGV4Y2VwdGlvbnMsIGluY2x1ZGluZyA6ZXhjOmBTeXN0ZW1FeGl0YCwKLTpleGM6YEtleWJvYXJkSW50ZXJydXB0YCwgYW5kIDpleGM6YEdlbmVyYXRvckV4aXRgICh3aGljaCBpcyBub3QgYW4gZXJyb3IgYW5kCi1zaG91bGQgbm90IG5vcm1hbGx5IGJlIGNhdWdodCBieSB1c2VyIGNvZGUpLCB1c2luZyBhIGJhcmUgYGBleGNlcHQ6YGAgaXMgYWxtb3N0Ci1uZXZlciBhIGdvb2QgaWRlYS4gIEluIHNpdHVhdGlvbnMgd2hlcmUgeW91IG5lZWQgdG8gY2F0Y2ggYWxsICJub3JtYWwiIGVycm9ycywKLXN1Y2ggYXMgaW4gYSBmcmFtZXdvcmsgdGhhdCBydW5zIGNhbGxiYWNrcywgeW91IGNhbiBjYXRjaCB0aGUgYmFzZSBjbGFzcyBmb3IKLWFsbCBub3JtYWwgZXhjZXB0aW9ucywgOmV4YzpgRXhjZXB0aW9uYC4KLQotCi1FeGNlcHRpb25zCi09PT09PT09PT09Ci0KLUV4Y2VwdGlvbnMgYXJlIGEgdXNlZnVsIGZlYXR1cmUgb2YgUHl0aG9uLiBZb3Ugc2hvdWxkIGxlYXJuIHRvIHJhaXNlIHRoZW0KLXdoZW5ldmVyIHNvbWV0aGluZyB1bmV4cGVjdGVkIG9jY3VycywgYW5kIGNhdGNoIHRoZW0gb25seSB3aGVyZSB5b3UgY2FuIGRvCi1zb21ldGhpbmcgYWJvdXQgdGhlbS4KLQotVGhlIGZvbGxvd2luZyBpcyBhIHZlcnkgcG9wdWxhciBhbnRpLWlkaW9tIDo6Ci0KLSAgIGRlZiBnZXRfc3RhdHVzKGZpbGUpOgotICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlKToKLSAgICAgICAgICAgcHJpbnQoImZpbGUgbm90IGZvdW5kIikKLSAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICByZXR1cm4gb3BlbihmaWxlKS5yZWFkbGluZSgpCi0KLUNvbnNpZGVyIHRoZSBjYXNlIHdoZXJlIHRoZSBmaWxlIGdldHMgZGVsZXRlZCBiZXR3ZWVuIHRoZSB0aW1lIHRoZSBjYWxsIHRvCi06ZnVuYzpgb3MucGF0aC5leGlzdHNgIGlzIG1hZGUgYW5kIHRoZSB0aW1lIDpmdW5jOmBvcGVuYCBpcyBjYWxsZWQuIEluIHRoYXQKLWNhc2UgdGhlIGxhc3QgbGluZSB3aWxsIHJhaXNlIGFuIDpleGM6YElPRXJyb3JgLiAgVGhlIHNhbWUgdGhpbmcgd291bGQgaGFwcGVuCi1pZiAqZmlsZSogZXhpc3RzIGJ1dCBoYXMgbm8gcmVhZCBwZXJtaXNzaW9uLiAgU2luY2UgdGVzdGluZyB0aGlzIG9uIGEgbm9ybWFsCi1tYWNoaW5lIG9uIGV4aXN0ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZXMgbWFrZXMgaXQgc2VlbSBidWdsZXNzLCB0aGUgdGVzdAotcmVzdWx0cyB3aWxsIHNlZW0gZmluZSwgYW5kIHRoZSBjb2RlIHdpbGwgZ2V0IHNoaXBwZWQuICBMYXRlciBhbiB1bmhhbmRsZWQKLTpleGM6YElPRXJyb3JgIChvciBwZXJoYXBzIHNvbWUgb3RoZXIgOmV4YzpgRW52aXJvbm1lbnRFcnJvcmApIGVzY2FwZXMgdG8gdGhlCi11c2VyLCB3aG8gZ2V0cyB0byB3YXRjaCB0aGUgdWdseSB0cmFjZWJhY2suCi0KLUhlcmUgaXMgYSBzb21ld2hhdCBiZXR0ZXIgd2F5IHRvIGRvIGl0LiA6OgotCi0gICBkZWYgZ2V0X3N0YXR1cyhmaWxlKToKLSAgICAgICB0cnk6Ci0gICAgICAgICAgIHJldHVybiBvcGVuKGZpbGUpLnJlYWRsaW5lKCkKLSAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgIHByaW50KCJVbmFibGUgdG8gb3BlbiBmaWxlOiB7fSIuZm9ybWF0KGVycikpCi0gICAgICAgICAgIHN5cy5leGl0KDEpCi0KLUluIHRoaXMgdmVyc2lvbiwgKmVpdGhlciogdGhlIGZpbGUgZ2V0cyBvcGVuZWQgYW5kIHRoZSBsaW5lIGlzIHJlYWQgKHNvIGl0Ci13b3JrcyBldmVuIG9uIGZsYWt5IE5GUyBvciBTTUIgY29ubmVjdGlvbnMpLCBvciBhbiBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQKLXRoYXQgcHJvdmlkZXMgYWxsIHRoZSBhdmFpbGFibGUgaW5mb3JtYXRpb24gb24gd2h5IHRoZSBvcGVuIGZhaWxlZCwgYW5kIHRoZQotYXBwbGljYXRpb24gaXMgYWJvcnRlZC4KLQotSG93ZXZlciwgZXZlbiB0aGlzIHZlcnNpb24gb2YgOmZ1bmM6YGdldF9zdGF0dXNgIG1ha2VzIHRvbyBtYW55IGFzc3VtcHRpb25zIC0tLQotdGhhdCBpdCB3aWxsIG9ubHkgYmUgdXNlZCBpbiBhIHNob3J0IHJ1bm5pbmcgc2NyaXB0LCBhbmQgbm90LCBzYXksIGluIGEgbG9uZwotcnVubmluZyBzZXJ2ZXIuIFN1cmUsIHRoZSBjYWxsZXIgY291bGQgZG8gc29tZXRoaW5nIGxpa2UgOjoKLQotICAgdHJ5OgotICAgICAgIHN0YXR1cyA9IGdldF9zdGF0dXMobG9nKQotICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgc3RhdHVzID0gTm9uZQotCi1CdXQgdGhlcmUgaXMgYSBiZXR0ZXIgd2F5LiAgWW91IHNob3VsZCB0cnkgdG8gdXNlIGFzIGZldyBgYGV4Y2VwdGBgIGNsYXVzZXMgaW4KLXlvdXIgY29kZSBhcyB5b3UgY2FuIC0tLSB0aGUgb25lcyB5b3UgZG8gdXNlIHdpbGwgdXN1YWxseSBiZSBpbnNpZGUgY2FsbHMgd2hpY2gKLXNob3VsZCBhbHdheXMgc3VjY2VlZCwgb3IgYSBjYXRjaC1hbGwgaW4gYSBtYWluIGZ1bmN0aW9uLgotCi1TbywgYW4gZXZlbiBiZXR0ZXIgdmVyc2lvbiBvZiA6ZnVuYzpgZ2V0X3N0YXR1cygpYCBpcyBwcm9iYWJseSA6OgotCi0gICBkZWYgZ2V0X3N0YXR1cyhmaWxlKToKLSAgICAgICByZXR1cm4gb3BlbihmaWxlKS5yZWFkbGluZSgpCi0KLVRoZSBjYWxsZXIgY2FuIGRlYWwgd2l0aCB0aGUgZXhjZXB0aW9uIGlmIGl0IHdhbnRzIChmb3IgZXhhbXBsZSwgaWYgaXQgdHJpZXMKLXNldmVyYWwgZmlsZXMgaW4gYSBsb29wKSwgb3IganVzdCBsZXQgdGhlIGV4Y2VwdGlvbiBmaWx0ZXIgdXB3YXJkcyB0byAqaXRzKgotY2FsbGVyLgotCi1CdXQgdGhlIGxhc3QgdmVyc2lvbiBzdGlsbCBoYXMgYSBzZXJpb3VzIHByb2JsZW0gLS0tIGR1ZSB0byBpbXBsZW1lbnRhdGlvbgotZGV0YWlscyBpbiBDUHl0aG9uLCB0aGUgZmlsZSB3b3VsZCBub3QgYmUgY2xvc2VkIHdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZAotdW50aWwgdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIGZpbmlzaGVzOyBhbmQsIHdvcnNlLCBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMKLShlLmcuLCBKeXRob24pIGl0IG1pZ2h0IG5vdCBiZSBjbG9zZWQgYXQgYWxsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvciBub3QKLWFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuCi0KLVRoZSBiZXN0IHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBgYG9wZW4oKWBgIGNhbGwgYXMgYSBjb250ZXh0Ci1tYW5hZ2VyLCB3aGljaCB3aWxsIGVuc3VyZSB0aGF0IHRoZSBmaWxlIGdldHMgY2xvc2VkIGFzIHNvb24gYXMgdGhlCi1mdW5jdGlvbiByZXR1cm5zOjoKLQotICAgZGVmIGdldF9zdGF0dXMoZmlsZSk6Ci0gICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGZwOgotICAgICAgICAgICByZXR1cm4gZnAucmVhZGxpbmUoKQotCi0KLVVzaW5nIHRoZSBCYXR0ZXJpZXMKLT09PT09PT09PT09PT09PT09PT0KLQotRXZlcnkgc28gb2Z0ZW4sIHBlb3BsZSBzZWVtIHRvIGJlIHdyaXRpbmcgc3R1ZmYgaW4gdGhlIFB5dGhvbiBsaWJyYXJ5IGFnYWluLAotdXN1YWxseSBwb29ybHkuIFdoaWxlIHRoZSBvY2Nhc2lvbmFsIG1vZHVsZSBoYXMgYSBwb29yIGludGVyZmFjZSwgaXQgaXMgdXN1YWxseQotbXVjaCBiZXR0ZXIgdG8gdXNlIHRoZSByaWNoIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGRhdGEgdHlwZXMgdGhhdCBjb21lIHdpdGgKLVB5dGhvbiB0aGFuIGludmVudGluZyB5b3VyIG93bi4KLQotQSB1c2VmdWwgbW9kdWxlIHZlcnkgZmV3IHBlb3BsZSBrbm93IGFib3V0IGlzIDptb2Q6YG9zLnBhdGhgLiBJdCAgYWx3YXlzIGhhcyB0aGUKLWNvcnJlY3QgcGF0aCBhcml0aG1ldGljIGZvciB5b3VyIG9wZXJhdGluZyBzeXN0ZW0sIGFuZCB3aWxsIHVzdWFsbHkgYmUgbXVjaAotYmV0dGVyIHRoYW4gd2hhdGV2ZXIgeW91IGNvbWUgdXAgd2l0aCB5b3Vyc2VsZi4KLQotQ29tcGFyZTo6Ci0KLSAgICMgdWdoIQotICAgcmV0dXJuIGRpcisiLyIrZmlsZQotICAgIyBiZXR0ZXIKLSAgIHJldHVybiBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlKQotCi1Nb3JlIHVzZWZ1bCBmdW5jdGlvbnMgaW4gOm1vZDpgb3MucGF0aGA6IDpmdW5jOmBiYXNlbmFtZWAsICA6ZnVuYzpgZGlybmFtZWAgYW5kCi06ZnVuYzpgc3BsaXRleHRgLgotCi1UaGVyZSBhcmUgYWxzbyBtYW55IHVzZWZ1bCBidWlsdC1pbiBmdW5jdGlvbnMgcGVvcGxlIHNlZW0gbm90IHRvIGJlIGF3YXJlIG9mCi1mb3Igc29tZSByZWFzb246IDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCBjYW4gZmluZCB0aGUgbWluaW11bS9tYXhpbXVtIG9mCi1hbnkgc2VxdWVuY2Ugd2l0aCBjb21wYXJhYmxlIHNlbWFudGljcywgZm9yIGV4YW1wbGUsIHlldCBtYW55IHBlb3BsZSB3cml0ZQotdGhlaXIgb3duIDpmdW5jOmBtYXhgLzpmdW5jOmBtaW5gLiBBbm90aGVyIGhpZ2hseSB1c2VmdWwgZnVuY3Rpb24gaXMKLTpmdW5jOmBmdW5jdG9vbHMucmVkdWNlYCB3aGljaCBjYW4gYmUgdXNlZCB0byByZXBlYXRseSBhcHBseSBhIGJpbmFyeQotb3BlcmF0aW9uIHRvIGEgc2VxdWVuY2UsIHJlZHVjaW5nIGl0IHRvIGEgc2luZ2xlIHZhbHVlLiAgRm9yIGV4YW1wbGUsIGNvbXB1dGUKLWEgZmFjdG9yaWFsIHdpdGggYSBzZXJpZXMgb2YgbXVsdGlwbHkgb3BlcmF0aW9uczo6Ci0KLSAgID4+PiBuID0gNAotICAgPj4+IGltcG9ydCBvcGVyYXRvciwgZnVuY3Rvb2xzCi0gICA+Pj4gZnVuY3Rvb2xzLnJlZHVjZShvcGVyYXRvci5tdWwsIHJhbmdlKDEsIG4rMSkpCi0gICAyNAotCi1XaGVuIGl0IGNvbWVzIHRvIHBhcnNpbmcgbnVtYmVycywgbm90ZSB0aGF0IDpmdW5jOmBmbG9hdGAsIDpmdW5jOmBpbnRgIGFuZAotOmZ1bmM6YGxvbmdgIGFsbCBhY2NlcHQgc3RyaW5nIGFyZ3VtZW50cyBhbmQgd2lsbCByZWplY3QgaWxsLWZvcm1lZCBzdHJpbmdzCi1ieSByYWlzaW5nIGFuIDpleGM6YFZhbHVlRXJyb3JgLgotCi0KLVVzaW5nIEJhY2tzbGFzaCB0byBDb250aW51ZSBTdGF0ZW1lbnRzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TaW5jZSBQeXRob24gdHJlYXRzIGEgbmV3bGluZSBhcyBhIHN0YXRlbWVudCB0ZXJtaW5hdG9yLCBhbmQgc2luY2Ugc3RhdGVtZW50cwotYXJlIG9mdGVuIG1vcmUgdGhhbiBpcyBjb21mb3J0YWJsZSB0byBwdXQgaW4gb25lIGxpbmUsIG1hbnkgcGVvcGxlIGRvOjoKLQotICAgaWYgZm9vLmJhcigpWydmaXJzdCddWzBdID09IGJhei5xdXV4KDEsIDIpWzU6OV0gYW5kIFwKLSAgICAgIGNhbGN1bGF0ZV9udW1iZXIoMTAsIDIwKSAhPSBmb3JidWxhdGUoNTAwLCAzNjApOgotICAgICAgICAgcGFzcwotCi1Zb3Ugc2hvdWxkIHJlYWxpemUgdGhhdCB0aGlzIGlzIGRhbmdlcm91czogYSBzdHJheSBzcGFjZSBhZnRlciB0aGUgYGBcYGAgd291bGQKLW1ha2UgdGhpcyBsaW5lIHdyb25nLCBhbmQgc3RyYXkgc3BhY2VzIGFyZSBub3RvcmlvdXNseSBoYXJkIHRvIHNlZSBpbiBlZGl0b3JzLgotSW4gdGhpcyBjYXNlLCBhdCBsZWFzdCBpdCB3b3VsZCBiZSBhIHN5bnRheCBlcnJvciwgYnV0IGlmIHRoZSBjb2RlIHdhczo6Ci0KLSAgIHZhbHVlID0gZm9vLmJhcigpWydmaXJzdCddWzBdKmJhei5xdXV4KDEsIDIpWzU6OV0gXAotICAgICAgICAgICArIGNhbGN1bGF0ZV9udW1iZXIoMTAsIDIwKSpmb3JidWxhdGUoNTAwLCAzNjApCi0KLXRoZW4gaXQgd291bGQganVzdCBiZSBzdWJ0bHkgd3JvbmcuCi0KLUl0IGlzIHVzdWFsbHkgbXVjaCBiZXR0ZXIgdG8gdXNlIHRoZSBpbXBsaWNpdCBjb250aW51YXRpb24gaW5zaWRlIHBhcmVudGhlc2lzOgotCi1UaGlzIHZlcnNpb24gaXMgYnVsbGV0cHJvb2Y6OgotCi0gICB2YWx1ZSA9IChmb28uYmFyKClbJ2ZpcnN0J11bMF0qYmF6LnF1dXgoMSwgMilbNTo5XQotICAgICAgICAgICArIGNhbGN1bGF0ZV9udW1iZXIoMTAsIDIwKSpmb3JidWxhdGUoNTAwLCAzNjApKQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vaW5kZXgucnN0IGIvRG9jL2hvd3RvL2luZGV4LnJzdAppbmRleCA0MTdhZTAwLi4xMWZlMTA4IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vaW5kZXgucnN0CisrKyBiL0RvYy9ob3d0by9pbmRleC5yc3QKQEAgLTE0LDExICsxNCwxMyBAQAogICAgOm1heGRlcHRoOiAxCiAKICAgIGFkdm9jYWN5LnJzdAorICAgcHlwb3J0aW5nLnJzdAogICAgY3BvcnRpbmcucnN0CiAgICBjdXJzZXMucnN0CiAgICBkZXNjcmlwdG9yLnJzdAotICAgZG9hbmRkb250LnJzdAogICAgZnVuY3Rpb25hbC5yc3QKKyAgIGxvZ2dpbmcucnN0CisgICBsb2dnaW5nLWNvb2tib29rLnJzdAogICAgcmVnZXgucnN0CiAgICBzb2NrZXRzLnJzdAogICAgc29ydGluZy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdCBiL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOThkODkyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CkBAIC0wLDAgKzEsMTAzOSBAQAorLi4gX2xvZ2dpbmctY29va2Jvb2s6CisKKz09PT09PT09PT09PT09PT0KK0xvZ2dpbmcgQ29va2Jvb2sKKz09PT09PT09PT09PT09PT0KKworOkF1dGhvcjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwIGF0IHJlZC1kb3ZlIGRvdCBjb20+CisKK1RoaXMgcGFnZSBjb250YWlucyBhIG51bWJlciBvZiByZWNpcGVzIHJlbGF0ZWQgdG8gbG9nZ2luZywgd2hpY2ggaGF2ZSBiZWVuIGZvdW5kCit1c2VmdWwgaW4gdGhlIHBhc3QuCisKKy4uIGN1cnJlbnRtb2R1bGU6OiBsb2dnaW5nCisKK1VzaW5nIGxvZ2dpbmcgaW4gbXVsdGlwbGUgbW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK011bHRpcGxlIGNhbGxzIHRvIGBgbG9nZ2luZy5nZXRMb2dnZXIoJ3NvbWVMb2dnZXInKWBgIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUKK3NhbWUgbG9nZ2VyIG9iamVjdC4gIFRoaXMgaXMgdHJ1ZSBub3Qgb25seSB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLCBidXQgYWxzbworYWNyb3NzIG1vZHVsZXMgYXMgbG9uZyBhcyBpdCBpcyBpbiB0aGUgc2FtZSBQeXRob24gaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIEl0IGlzCit0cnVlIGZvciByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIG9iamVjdDsgYWRkaXRpb25hbGx5LCBhcHBsaWNhdGlvbiBjb2RlIGNhbgorZGVmaW5lIGFuZCBjb25maWd1cmUgYSBwYXJlbnQgbG9nZ2VyIGluIG9uZSBtb2R1bGUgYW5kIGNyZWF0ZSAoYnV0IG5vdAorY29uZmlndXJlKSBhIGNoaWxkIGxvZ2dlciBpbiBhIHNlcGFyYXRlIG1vZHVsZSwgYW5kIGFsbCBsb2dnZXIgY2FsbHMgdG8gdGhlCitjaGlsZCB3aWxsIHBhc3MgdXAgdG8gdGhlIHBhcmVudC4gIEhlcmUgaXMgYSBtYWluIG1vZHVsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCBhdXhpbGlhcnlfbW9kdWxlCisKKyAgICAjIGNyZWF0ZSBsb2dnZXIgd2l0aCAnc3BhbV9hcHBsaWNhdGlvbicKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignc3BhbV9hcHBsaWNhdGlvbicpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgIyBjcmVhdGUgZmlsZSBoYW5kbGVyIHdoaWNoIGxvZ3MgZXZlbiBkZWJ1ZyBtZXNzYWdlcworICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcignc3BhbS5sb2cnKQorICAgIGZoLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisgICAgIyBjcmVhdGUgY29uc29sZSBoYW5kbGVyIHdpdGggYSBoaWdoZXIgbG9nIGxldmVsCisgICAgY2ggPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgIGNoLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgIyBjcmVhdGUgZm9ybWF0dGVyIGFuZCBhZGQgaXQgdG8gdGhlIGhhbmRsZXJzCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorICAgIGZoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAjIGFkZCB0aGUgaGFuZGxlcnMgdG8gdGhlIGxvZ2dlcgorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGZoKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNoKQorCisgICAgbG9nZ2VyLmluZm8oJ2NyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5JykKKyAgICBhID0gYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkoKQorICAgIGxvZ2dlci5pbmZvKCdjcmVhdGVkIGFuIGluc3RhbmNlIG9mIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5JykKKyAgICBsb2dnZXIuaW5mbygnY2FsbGluZyBhdXhpbGlhcnlfbW9kdWxlLkF1eGlsaWFyeS5kb19zb21ldGhpbmcnKQorICAgIGEuZG9fc29tZXRoaW5nKCkKKyAgICBsb2dnZXIuaW5mbygnZmluaXNoZWQgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkuZG9fc29tZXRoaW5nJykKKyAgICBsb2dnZXIuaW5mbygnY2FsbGluZyBhdXhpbGlhcnlfbW9kdWxlLnNvbWVfZnVuY3Rpb24oKScpCisgICAgYXV4aWxpYXJ5X21vZHVsZS5zb21lX2Z1bmN0aW9uKCkKKyAgICBsb2dnZXIuaW5mbygnZG9uZSB3aXRoIGF1eGlsaWFyeV9tb2R1bGUuc29tZV9mdW5jdGlvbigpJykKKworSGVyZSBpcyB0aGUgYXV4aWxpYXJ5IG1vZHVsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworCisgICAgIyBjcmVhdGUgbG9nZ2VyCisgICAgbW9kdWxlX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzcGFtX2FwcGxpY2F0aW9uLmF1eGlsaWFyeScpCisKKyAgICBjbGFzcyBBdXhpbGlhcnk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5LkF1eGlsaWFyeScpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCdjcmVhdGluZyBhbiBpbnN0YW5jZSBvZiBBdXhpbGlhcnknKQorICAgICAgICBkZWYgZG9fc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnZG9pbmcgc29tZXRoaW5nJykKKyAgICAgICAgICAgIGEgPSAxICsgMQorICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygnZG9uZSBkb2luZyBzb21ldGhpbmcnKQorCisgICAgZGVmIHNvbWVfZnVuY3Rpb24oKToKKyAgICAgICAgbW9kdWxlX2xvZ2dlci5pbmZvKCdyZWNlaXZlZCBhIGNhbGwgdG8gInNvbWVfZnVuY3Rpb24iJykKKworVGhlIG91dHB1dCBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgMjAwNS0wMy0yMyAyMzo0NzoxMSw2NjMgLSBzcGFtX2FwcGxpY2F0aW9uIC0gSU5GTyAtCisgICAgICAgY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkKKyAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY2NSAtIHNwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5LkF1eGlsaWFyeSAtIElORk8gLQorICAgICAgIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIEF1eGlsaWFyeQorICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjY1IC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQorICAgICAgIGNyZWF0ZWQgYW4gaW5zdGFuY2Ugb2YgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkKKyAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY2OCAtIHNwYW1fYXBwbGljYXRpb24gLSBJTkZPIC0KKyAgICAgICBjYWxsaW5nIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5LmRvX3NvbWV0aGluZworICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjY4IC0gc3BhbV9hcHBsaWNhdGlvbi5hdXhpbGlhcnkuQXV4aWxpYXJ5IC0gSU5GTyAtCisgICAgICAgZG9pbmcgc29tZXRoaW5nCisgICAgMjAwNS0wMy0yMyAyMzo0NzoxMSw2NjkgLSBzcGFtX2FwcGxpY2F0aW9uLmF1eGlsaWFyeS5BdXhpbGlhcnkgLSBJTkZPIC0KKyAgICAgICBkb25lIGRvaW5nIHNvbWV0aGluZworICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjcwIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQorICAgICAgIGZpbmlzaGVkIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5LmRvX3NvbWV0aGluZworICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjcxIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQorICAgICAgIGNhbGxpbmcgYXV4aWxpYXJ5X21vZHVsZS5zb21lX2Z1bmN0aW9uKCkKKyAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY3MiAtIHNwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5IC0gSU5GTyAtCisgICAgICAgcmVjZWl2ZWQgYSBjYWxsIHRvICdzb21lX2Z1bmN0aW9uJworICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjczIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQorICAgICAgIGRvbmUgd2l0aCBhdXhpbGlhcnlfbW9kdWxlLnNvbWVfZnVuY3Rpb24oKQorCitNdWx0aXBsZSBoYW5kbGVycyBhbmQgZm9ybWF0dGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTG9nZ2VycyBhcmUgcGxhaW4gUHl0aG9uIG9iamVjdHMuICBUaGUgOmZ1bmM6YGFkZEhhbmRsZXJgIG1ldGhvZCBoYXMgbm8gbWluaW11bQorb3IgbWF4aW11bSBxdW90YSBmb3IgdGhlIG51bWJlciBvZiBoYW5kbGVycyB5b3UgbWF5IGFkZC4gIFNvbWV0aW1lcyBpdCB3aWxsIGJlCitiZW5lZmljaWFsIGZvciBhbiBhcHBsaWNhdGlvbiB0byBsb2cgYWxsIG1lc3NhZ2VzIG9mIGFsbCBzZXZlcml0aWVzIHRvIGEgdGV4dAorZmlsZSB3aGlsZSBzaW11bHRhbmVvdXNseSBsb2dnaW5nIGVycm9ycyBvciBhYm92ZSB0byB0aGUgY29uc29sZS4gIFRvIHNldCB0aGlzCit1cCwgc2ltcGx5IGNvbmZpZ3VyZSB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMuICBUaGUgbG9nZ2luZyBjYWxscyBpbiB0aGUKK2FwcGxpY2F0aW9uIGNvZGUgd2lsbCByZW1haW4gdW5jaGFuZ2VkLiAgSGVyZSBpcyBhIHNsaWdodCBtb2RpZmljYXRpb24gdG8gdGhlCitwcmV2aW91cyBzaW1wbGUgbW9kdWxlLWJhc2VkIGNvbmZpZ3VyYXRpb24gZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NpbXBsZV9leGFtcGxlJykKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAjIGNyZWF0ZSBmaWxlIGhhbmRsZXIgd2hpY2ggbG9ncyBldmVuIGRlYnVnIG1lc3NhZ2VzCisgICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCdzcGFtLmxvZycpCisgICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIGhpZ2hlciBsb2cgbGV2ZWwKKyAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCisgICAgY2guc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKKyAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIgYW5kIGFkZCBpdCB0byB0aGUgaGFuZGxlcnMKKyAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycpCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgICMgYWRkIHRoZSBoYW5kbGVycyB0byBsb2dnZXIKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihjaCkKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihmaCkKKworICAgICMgJ2FwcGxpY2F0aW9uJyBjb2RlCisgICAgbG9nZ2VyLmRlYnVnKCdkZWJ1ZyBtZXNzYWdlJykKKyAgICBsb2dnZXIuaW5mbygnaW5mbyBtZXNzYWdlJykKKyAgICBsb2dnZXIud2Fybignd2FybiBtZXNzYWdlJykKKyAgICBsb2dnZXIuZXJyb3IoJ2Vycm9yIG1lc3NhZ2UnKQorICAgIGxvZ2dlci5jcml0aWNhbCgnY3JpdGljYWwgbWVzc2FnZScpCisKK05vdGljZSB0aGF0IHRoZSAnYXBwbGljYXRpb24nIGNvZGUgZG9lcyBub3QgY2FyZSBhYm91dCBtdWx0aXBsZSBoYW5kbGVycy4gIEFsbAordGhhdCBjaGFuZ2VkIHdhcyB0aGUgYWRkaXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgYSBuZXcgaGFuZGxlciBuYW1lZCAqZmgqLgorCitUaGUgYWJpbGl0eSB0byBjcmVhdGUgbmV3IGhhbmRsZXJzIHdpdGggaGlnaGVyLSBvciBsb3dlci1zZXZlcml0eSBmaWx0ZXJzIGNhbiBiZQordmVyeSBoZWxwZnVsIHdoZW4gd3JpdGluZyBhbmQgdGVzdGluZyBhbiBhcHBsaWNhdGlvbi4gIEluc3RlYWQgb2YgdXNpbmcgbWFueQorYGBwcmludGBgIHN0YXRlbWVudHMgZm9yIGRlYnVnZ2luZywgdXNlIGBgbG9nZ2VyLmRlYnVnYGA6IFVubGlrZSB0aGUgcHJpbnQKK3N0YXRlbWVudHMsIHdoaWNoIHlvdSB3aWxsIGhhdmUgdG8gZGVsZXRlIG9yIGNvbW1lbnQgb3V0IGxhdGVyLCB0aGUgbG9nZ2VyLmRlYnVnCitzdGF0ZW1lbnRzIGNhbiByZW1haW4gaW50YWN0IGluIHRoZSBzb3VyY2UgY29kZSBhbmQgcmVtYWluIGRvcm1hbnQgdW50aWwgeW91CituZWVkIHRoZW0gYWdhaW4uICBBdCB0aGF0IHRpbWUsIHRoZSBvbmx5IGNoYW5nZSB0aGF0IG5lZWRzIHRvIGhhcHBlbiBpcyB0bworbW9kaWZ5IHRoZSBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbG9nZ2VyIGFuZC9vciBoYW5kbGVyIHRvIGRlYnVnLgorCisuLiBfbXVsdGlwbGUtZGVzdGluYXRpb25zOgorCitMb2dnaW5nIHRvIG11bHRpcGxlIGRlc3RpbmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGV0J3Mgc2F5IHlvdSB3YW50IHRvIGxvZyB0byBjb25zb2xlIGFuZCBmaWxlIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UgZm9ybWF0cyBhbmQKK2luIGRpZmZlcmluZyBjaXJjdW1zdGFuY2VzLiBTYXkgeW91IHdhbnQgdG8gbG9nIG1lc3NhZ2VzIHdpdGggbGV2ZWxzIG9mIERFQlVHCithbmQgaGlnaGVyIHRvIGZpbGUsIGFuZCB0aG9zZSBtZXNzYWdlcyBhdCBsZXZlbCBJTkZPIGFuZCBoaWdoZXIgdG8gdGhlIGNvbnNvbGUuCitMZXQncyBhbHNvIGFzc3VtZSB0aGF0IHRoZSBmaWxlIHNob3VsZCBjb250YWluIHRpbWVzdGFtcHMsIGJ1dCB0aGUgY29uc29sZQorbWVzc2FnZXMgc2hvdWxkIG5vdC4gSGVyZSdzIGhvdyB5b3UgY2FuIGFjaGlldmUgdGhpczo6CisKKyAgIGltcG9ydCBsb2dnaW5nCisKKyAgICMgc2V0IHVwIGxvZ2dpbmcgdG8gZmlsZSAtIHNlZSBwcmV2aW91cyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMKKyAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywKKyAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAlKG5hbWUpLTEycyAlKGxldmVsbmFtZSktOHMgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSclbS0lZCAlSDolTScsCisgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPScvdGVtcC9teWFwcC5sb2cnLAorICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycpCisgICAjIGRlZmluZSBhIEhhbmRsZXIgd2hpY2ggd3JpdGVzIElORk8gbWVzc2FnZXMgb3IgaGlnaGVyIHRvIHRoZSBzeXMuc3RkZXJyCisgICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgIGNvbnNvbGUuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIyBzZXQgYSBmb3JtYXQgd2hpY2ggaXMgc2ltcGxlciBmb3IgY29uc29sZSB1c2UKKyAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKG5hbWUpLTEyczogJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykKKyAgICMgdGVsbCB0aGUgaGFuZGxlciB0byB1c2UgdGhpcyBmb3JtYXQKKyAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICMgYWRkIHRoZSBoYW5kbGVyIHRvIHRoZSByb290IGxvZ2dlcgorICAgbG9nZ2luZy5nZXRMb2dnZXIoJycpLmFkZEhhbmRsZXIoY29uc29sZSkKKworICAgIyBOb3csIHdlIGNhbiBsb2cgdG8gdGhlIHJvb3QgbG9nZ2VyLCBvciBhbnkgb3RoZXIgbG9nZ2VyLiBGaXJzdCB0aGUgcm9vdC4uLgorICAgbG9nZ2luZy5pbmZvKCdKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LicpCisKKyAgICMgTm93LCBkZWZpbmUgYSBjb3VwbGUgb2Ygb3RoZXIgbG9nZ2VycyB3aGljaCBtaWdodCByZXByZXNlbnQgYXJlYXMgaW4geW91cgorICAgIyBhcHBsaWNhdGlvbjoKKworICAgbG9nZ2VyMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteWFwcC5hcmVhMScpCisgICBsb2dnZXIyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215YXBwLmFyZWEyJykKKworICAgbG9nZ2VyMS5kZWJ1ZygnUXVpY2sgemVwaHlycyBibG93LCB2ZXhpbmcgZGFmdCBKaW0uJykKKyAgIGxvZ2dlcjEuaW5mbygnSG93IHF1aWNrbHkgZGFmdCBqdW1waW5nIHplYnJhcyB2ZXguJykKKyAgIGxvZ2dlcjIud2FybmluZygnSmFpbCB6ZXN0eSB2aXhlbiB3aG8gZ3JhYmJlZCBwYXkgZnJvbSBxdWFjay4nKQorICAgbG9nZ2VyMi5lcnJvcignVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LicpCisKK1doZW4geW91IHJ1biB0aGlzLCBvbiB0aGUgY29uc29sZSB5b3Ugd2lsbCBzZWUgOjoKKworICAgcm9vdCAgICAgICAgOiBJTkZPICAgICBKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LgorICAgbXlhcHAuYXJlYTEgOiBJTkZPICAgICBIb3cgcXVpY2tseSBkYWZ0IGp1bXBpbmcgemVicmFzIHZleC4KKyAgIG15YXBwLmFyZWEyIDogV0FSTklORyAgSmFpbCB6ZXN0eSB2aXhlbiB3aG8gZ3JhYmJlZCBwYXkgZnJvbSBxdWFjay4KKyAgIG15YXBwLmFyZWEyIDogRVJST1IgICAgVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LgorCithbmQgaW4gdGhlIGZpbGUgeW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIDo6CisKKyAgIDEwLTIyIDIyOjE5IHJvb3QgICAgICAgICBJTkZPICAgICBKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LgorICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTEgIERFQlVHICAgIFF1aWNrIHplcGh5cnMgYmxvdywgdmV4aW5nIGRhZnQgSmltLgorICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTEgIElORk8gICAgIEhvdyBxdWlja2x5IGRhZnQganVtcGluZyB6ZWJyYXMgdmV4LgorICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTIgIFdBUk5JTkcgIEphaWwgemVzdHkgdml4ZW4gd2hvIGdyYWJiZWQgcGF5IGZyb20gcXVhY2suCisgICAxMC0yMiAyMjoxOSBteWFwcC5hcmVhMiAgRVJST1IgICAgVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LgorCitBcyB5b3UgY2FuIHNlZSwgdGhlIERFQlVHIG1lc3NhZ2Ugb25seSBzaG93cyB1cCBpbiB0aGUgZmlsZS4gVGhlIG90aGVyIG1lc3NhZ2VzCithcmUgc2VudCB0byBib3RoIGRlc3RpbmF0aW9ucy4KKworVGhpcyBleGFtcGxlIHVzZXMgY29uc29sZSBhbmQgZmlsZSBoYW5kbGVycywgYnV0IHlvdSBjYW4gdXNlIGFueSBudW1iZXIgYW5kCitjb21iaW5hdGlvbiBvZiBoYW5kbGVycyB5b3UgY2hvb3NlLgorCisKK0NvbmZpZ3VyYXRpb24gc2VydmVyIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbW9kdWxlIHVzaW5nIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gc2VydmVyOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisgICAgaW1wb3J0IHRpbWUKKyAgICBpbXBvcnQgb3MKKworICAgICMgcmVhZCBpbml0aWFsIGNvbmZpZyBmaWxlCisgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZygnbG9nZ2luZy5jb25mJykKKworICAgICMgY3JlYXRlIGFuZCBzdGFydCBsaXN0ZW5lciBvbiBwb3J0IDk5OTkKKyAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDk5OTkpCisgICAgdC5zdGFydCgpCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignc2ltcGxlRXhhbXBsZScpCisKKyAgICB0cnk6CisgICAgICAgICMgbG9vcCB0aHJvdWdoIGxvZ2dpbmcgY2FsbHMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlCisgICAgICAgICMgbmV3IGNvbmZpZ3VyYXRpb25zIG1ha2UsIHVudGlsIEN0cmwrQyBpcyBwcmVzc2VkCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ2RlYnVnIG1lc3NhZ2UnKQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ2luZm8gbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnZXIud2Fybignd2FybiBtZXNzYWdlJykKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcignZXJyb3IgbWVzc2FnZScpCisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoJ2NyaXRpY2FsIG1lc3NhZ2UnKQorICAgICAgICAgICAgdGltZS5zbGVlcCg1KQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgIyBjbGVhbnVwCisgICAgICAgIGxvZ2dpbmcuY29uZmlnLnN0b3BMaXN0ZW5pbmcoKQorICAgICAgICB0LmpvaW4oKQorCitBbmQgaGVyZSBpcyBhIHNjcmlwdCB0aGF0IHRha2VzIGEgZmlsZW5hbWUgYW5kIHNlbmRzIHRoYXQgZmlsZSB0byB0aGUgc2VydmVyLAorcHJvcGVybHkgcHJlY2VkZWQgd2l0aCB0aGUgYmluYXJ5LWVuY29kZWQgbGVuZ3RoLCBhcyB0aGUgbmV3IGxvZ2dpbmcKK2NvbmZpZ3VyYXRpb246OgorCisgICAgIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisgICAgaW1wb3J0IHNvY2tldCwgc3lzLCBzdHJ1Y3QKKworICAgIHdpdGggb3BlbihzeXMuYXJndlsxXSwgJ3JiJykgYXMgZjoKKyAgICAgICAgZGF0YV90b19zZW5kID0gZi5yZWFkKCkKKworICAgIEhPU1QgPSAnbG9jYWxob3N0JworICAgIFBPUlQgPSA5OTk5CisgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICBwcmludCgnY29ubmVjdGluZy4uLicpCisgICAgcy5jb25uZWN0KChIT1NULCBQT1JUKSkKKyAgICBwcmludCgnc2VuZGluZyBjb25maWcuLi4nKQorICAgIHMuc2VuZChzdHJ1Y3QucGFjaygnPkwnLCBsZW4oZGF0YV90b19zZW5kKSkpCisgICAgcy5zZW5kKGRhdGFfdG9fc2VuZCkKKyAgICBzLmNsb3NlKCkKKyAgICBwcmludCgnY29tcGxldGUnKQorCisKK0RlYWxpbmcgd2l0aCBoYW5kbGVycyB0aGF0IGJsb2NrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZy5oYW5kbGVycworCitTb21ldGltZXMgeW91IGhhdmUgdG8gZ2V0IHlvdXIgbG9nZ2luZyBoYW5kbGVycyB0byBkbyB0aGVpciB3b3JrIHdpdGhvdXQKK2Jsb2NraW5nIHRoZSB0aHJlYWQgeW914oCZcmUgbG9nZ2luZyBmcm9tLiBUaGlzIGlzIGNvbW1vbiBpbiBXZWIgYXBwbGljYXRpb25zLAordGhvdWdoIG9mIGNvdXJzZSBpdCBhbHNvIG9jY3VycyBpbiBvdGhlciBzY2VuYXJpb3MuCisKK0EgY29tbW9uIGN1bHByaXQgd2hpY2ggZGVtb25zdHJhdGVzIHNsdWdnaXNoIGJlaGF2aW91ciBpcyB0aGUKKzpjbGFzczpgU01UUEhhbmRsZXJgOiBzZW5kaW5nIGVtYWlscyBjYW4gdGFrZSBhIGxvbmcgdGltZSwgZm9yIGEKK251bWJlciBvZiByZWFzb25zIG91dHNpZGUgdGhlIGRldmVsb3BlcuKAmXMgY29udHJvbCAoZm9yIGV4YW1wbGUsIGEgcG9vcmx5CitwZXJmb3JtaW5nIG1haWwgb3IgbmV0d29yayBpbmZyYXN0cnVjdHVyZSkuIEJ1dCBhbG1vc3QgYW55IG5ldHdvcmstYmFzZWQKK2hhbmRsZXIgY2FuIGJsb2NrOiBFdmVuIGEgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBvcGVyYXRpb24gbWF5IGRvIGEKK0ROUyBxdWVyeSB1bmRlciB0aGUgaG9vZCB3aGljaCBpcyB0b28gc2xvdyAoYW5kIHRoaXMgcXVlcnkgY2FuIGJlIGRlZXAgaW4gdGhlCitzb2NrZXQgbGlicmFyeSBjb2RlLCBiZWxvdyB0aGUgUHl0aG9uIGxheWVyLCBhbmQgb3V0c2lkZSB5b3VyIGNvbnRyb2wpLgorCitPbmUgc29sdXRpb24gaXMgdG8gdXNlIGEgdHdvLXBhcnQgYXBwcm9hY2guIEZvciB0aGUgZmlyc3QgcGFydCwgYXR0YWNoIG9ubHkgYQorOmNsYXNzOmBRdWV1ZUhhbmRsZXJgIHRvIHRob3NlIGxvZ2dlcnMgd2hpY2ggYXJlIGFjY2Vzc2VkIGZyb20KK3BlcmZvcm1hbmNlLWNyaXRpY2FsIHRocmVhZHMuIFRoZXkgc2ltcGx5IHdyaXRlIHRvIHRoZWlyIHF1ZXVlLCB3aGljaCBjYW4gYmUKK3NpemVkIHRvIGEgbGFyZ2UgZW5vdWdoIGNhcGFjaXR5IG9yIGluaXRpYWxpemVkIHdpdGggbm8gdXBwZXIgYm91bmQgdG8gdGhlaXIKK3NpemUuIFRoZSB3cml0ZSB0byB0aGUgcXVldWUgd2lsbCB0eXBpY2FsbHkgYmUgYWNjZXB0ZWQgcXVpY2tseSwgdGhvdWdoIHlvdQord2lsbCBwcm9iYWJseSBuZWVkIHRvIGNhdGNoIHRoZSA6ZXhjOmBxdWV1ZS5GdWxsYCBleGNlcHRpb24gYXMgYSBwcmVjYXV0aW9uCitpbiB5b3VyIGNvZGUuIElmIHlvdSBhcmUgYSBsaWJyYXJ5IGRldmVsb3BlciB3aG8gaGFzIHBlcmZvcm1hbmNlLWNyaXRpY2FsCit0aHJlYWRzIGluIHRoZWlyIGNvZGUsIGJlIHN1cmUgdG8gZG9jdW1lbnQgdGhpcyAodG9nZXRoZXIgd2l0aCBhIHN1Z2dlc3Rpb24gdG8KK2F0dGFjaCBvbmx5IGBgUXVldWVIYW5kbGVyc2BgIHRvIHlvdXIgbG9nZ2VycykgZm9yIHRoZSBiZW5lZml0IG9mIG90aGVyCitkZXZlbG9wZXJzIHdobyB3aWxsIHVzZSB5b3VyIGNvZGUuCisKK1RoZSBzZWNvbmQgcGFydCBvZiB0aGUgc29sdXRpb24gaXMgOmNsYXNzOmBRdWV1ZUxpc3RlbmVyYCwgd2hpY2ggaGFzIGJlZW4KK2Rlc2lnbmVkIGFzIHRoZSBjb3VudGVycGFydCB0byA6Y2xhc3M6YFF1ZXVlSGFuZGxlcmAuICBBCis6Y2xhc3M6YFF1ZXVlTGlzdGVuZXJgIGlzIHZlcnkgc2ltcGxlOiBpdOKAmXMgcGFzc2VkIGEgcXVldWUgYW5kIHNvbWUgaGFuZGxlcnMsCithbmQgaXQgZmlyZXMgdXAgYW4gaW50ZXJuYWwgdGhyZWFkIHdoaWNoIGxpc3RlbnMgdG8gaXRzIHF1ZXVlIGZvciBMb2dSZWNvcmRzCitzZW50IGZyb20gYGBRdWV1ZUhhbmRsZXJzYGAgKG9yIGFueSBvdGhlciBzb3VyY2Ugb2YgYGBMb2dSZWNvcmRzYGAsIGZvciB0aGF0CittYXR0ZXIpLiBUaGUgYGBMb2dSZWNvcmRzYGAgYXJlIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUgYW5kIHBhc3NlZCB0byB0aGUKK2hhbmRsZXJzIGZvciBwcm9jZXNzaW5nLgorCitUaGUgYWR2YW50YWdlIG9mIGhhdmluZyBhIHNlcGFyYXRlIDpjbGFzczpgUXVldWVMaXN0ZW5lcmAgY2xhc3MgaXMgdGhhdCB5b3UKK2NhbiB1c2UgdGhlIHNhbWUgaW5zdGFuY2UgdG8gc2VydmljZSBtdWx0aXBsZSBgYFF1ZXVlSGFuZGxlcnNgYC4gVGhpcyBpcyBtb3JlCityZXNvdXJjZS1mcmllbmRseSB0aGFuLCBzYXksIGhhdmluZyB0aHJlYWRlZCB2ZXJzaW9ucyBvZiB0aGUgZXhpc3RpbmcgaGFuZGxlcgorY2xhc3Nlcywgd2hpY2ggd291bGQgZWF0IHVwIG9uZSB0aHJlYWQgcGVyIGhhbmRsZXIgZm9yIG5vIHBhcnRpY3VsYXIgYmVuZWZpdC4KKworQW4gZXhhbXBsZSBvZiB1c2luZyB0aGVzZSB0d28gY2xhc3NlcyBmb2xsb3dzIChpbXBvcnRzIG9taXR0ZWQpOjoKKworICAgIHF1ZSA9IHF1ZXVlLlF1ZXVlKC0xKSAjIG5vIGxpbWl0IG9uIHNpemUKKyAgICBxdWV1ZV9oYW5kbGVyID0gUXVldWVIYW5kbGVyKHF1ZSkKKyAgICBoYW5kbGVyID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBsaXN0ZW5lciA9IFF1ZXVlTGlzdGVuZXIocXVlLCBoYW5kbGVyKQorICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgcm9vdC5hZGRIYW5kbGVyKHF1ZXVlX2hhbmRsZXIpCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUodGhyZWFkTmFtZSlzOiAlKG1lc3NhZ2UpcycpCisgICAgaGFuZGxlci5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQorICAgIGxpc3RlbmVyLnN0YXJ0KCkKKyAgICAjIFRoZSBsb2cgb3V0cHV0IHdpbGwgZGlzcGxheSB0aGUgdGhyZWFkIHdoaWNoIGdlbmVyYXRlZAorICAgICMgdGhlIGV2ZW50ICh0aGUgbWFpbiB0aHJlYWQpIHJhdGhlciB0aGFuIHRoZSBpbnRlcm5hbAorICAgICMgdGhyZWFkIHdoaWNoIG1vbml0b3JzIHRoZSBpbnRlcm5hbCBxdWV1ZS4gVGhpcyBpcyB3aGF0CisgICAgIyB5b3Ugd2FudCB0byBoYXBwZW4uCisgICAgcm9vdC53YXJuaW5nKCdMb29rIG91dCEnKQorICAgIGxpc3RlbmVyLnN0b3AoKQorCit3aGljaCwgd2hlbiBydW4sIHdpbGwgcHJvZHVjZTo6CisKKyAgICBNYWluVGhyZWFkOiBMb29rIG91dCEKKworCisuLiBfbmV0d29yay1sb2dnaW5nOgorCitTZW5kaW5nIGFuZCByZWNlaXZpbmcgbG9nZ2luZyBldmVudHMgYWNyb3NzIGEgbmV0d29yaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTGV0J3Mgc2F5IHlvdSB3YW50IHRvIHNlbmQgbG9nZ2luZyBldmVudHMgYWNyb3NzIGEgbmV0d29yaywgYW5kIGhhbmRsZSB0aGVtIGF0Cit0aGUgcmVjZWl2aW5nIGVuZC4gQSBzaW1wbGUgd2F5IG9mIGRvaW5nIHRoaXMgaXMgYXR0YWNoaW5nIGEKKzpjbGFzczpgU29ja2V0SGFuZGxlcmAgaW5zdGFuY2UgdG8gdGhlIHJvb3QgbG9nZ2VyIGF0IHRoZSBzZW5kaW5nIGVuZDo6CisKKyAgIGltcG9ydCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzCisKKyAgIHJvb3RMb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignJykKKyAgIHJvb3RMb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgIHNvY2tldEhhbmRsZXIgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIoJ2xvY2FsaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuaGFuZGxlcnMuREVGQVVMVF9UQ1BfTE9HR0lOR19QT1JUKQorICAgIyBkb24ndCBib3RoZXIgd2l0aCBhIGZvcm1hdHRlciwgc2luY2UgYSBzb2NrZXQgaGFuZGxlciBzZW5kcyB0aGUgZXZlbnQgYXMKKyAgICMgYW4gdW5mb3JtYXR0ZWQgcGlja2xlCisgICByb290TG9nZ2VyLmFkZEhhbmRsZXIoc29ja2V0SGFuZGxlcikKKworICAgIyBOb3csIHdlIGNhbiBsb2cgdG8gdGhlIHJvb3QgbG9nZ2VyLCBvciBhbnkgb3RoZXIgbG9nZ2VyLiBGaXJzdCB0aGUgcm9vdC4uLgorICAgbG9nZ2luZy5pbmZvKCdKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LicpCisKKyAgICMgTm93LCBkZWZpbmUgYSBjb3VwbGUgb2Ygb3RoZXIgbG9nZ2VycyB3aGljaCBtaWdodCByZXByZXNlbnQgYXJlYXMgaW4geW91cgorICAgIyBhcHBsaWNhdGlvbjoKKworICAgbG9nZ2VyMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteWFwcC5hcmVhMScpCisgICBsb2dnZXIyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215YXBwLmFyZWEyJykKKworICAgbG9nZ2VyMS5kZWJ1ZygnUXVpY2sgemVwaHlycyBibG93LCB2ZXhpbmcgZGFmdCBKaW0uJykKKyAgIGxvZ2dlcjEuaW5mbygnSG93IHF1aWNrbHkgZGFmdCBqdW1waW5nIHplYnJhcyB2ZXguJykKKyAgIGxvZ2dlcjIud2FybmluZygnSmFpbCB6ZXN0eSB2aXhlbiB3aG8gZ3JhYmJlZCBwYXkgZnJvbSBxdWFjay4nKQorICAgbG9nZ2VyMi5lcnJvcignVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LicpCisKK0F0IHRoZSByZWNlaXZpbmcgZW5kLCB5b3UgY2FuIHNldCB1cCBhIHJlY2VpdmVyIHVzaW5nIHRoZSA6bW9kOmBzb2NrZXRzZXJ2ZXJgCittb2R1bGUuIEhlcmUgaXMgYSBiYXNpYyB3b3JraW5nIGV4YW1wbGU6OgorCisgICBpbXBvcnQgcGlja2xlCisgICBpbXBvcnQgbG9nZ2luZworICAgaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKKyAgIGltcG9ydCBzb2NrZXRzZXJ2ZXIKKyAgIGltcG9ydCBzdHJ1Y3QKKworCisgICBjbGFzcyBMb2dSZWNvcmRTdHJlYW1IYW5kbGVyKHNvY2tldHNlcnZlci5TdHJlYW1SZXF1ZXN0SGFuZGxlcik6CisgICAgICAgIiIiSGFuZGxlciBmb3IgYSBzdHJlYW1pbmcgbG9nZ2luZyByZXF1ZXN0LgorCisgICAgICAgVGhpcyBiYXNpY2FsbHkgbG9ncyB0aGUgcmVjb3JkIHVzaW5nIHdoYXRldmVyIGxvZ2dpbmcgcG9saWN5IGlzCisgICAgICAgY29uZmlndXJlZCBsb2NhbGx5LgorICAgICAgICIiIgorCisgICAgICAgZGVmIGhhbmRsZShzZWxmKToKKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIEhhbmRsZSBtdWx0aXBsZSByZXF1ZXN0cyAtIGVhY2ggZXhwZWN0ZWQgdG8gYmUgYSA0LWJ5dGUgbGVuZ3RoLAorICAgICAgICAgICBmb2xsb3dlZCBieSB0aGUgTG9nUmVjb3JkIGluIHBpY2tsZSBmb3JtYXQuIExvZ3MgdGhlIHJlY29yZAorICAgICAgICAgICBhY2NvcmRpbmcgdG8gd2hhdGV2ZXIgcG9saWN5IGlzIGNvbmZpZ3VyZWQgbG9jYWxseS4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuY29ubmVjdGlvbi5yZWN2KDQpCisgICAgICAgICAgICAgICBpZiBsZW4oY2h1bmspIDwgNDoKKyAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgc2xlbiA9IHN0cnVjdC51bnBhY2soJz5MJywgY2h1bmspWzBdCisgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuY29ubmVjdGlvbi5yZWN2KHNsZW4pCisgICAgICAgICAgICAgICB3aGlsZSBsZW4oY2h1bmspIDwgc2xlbjoKKyAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbiAtIGxlbihjaHVuaykpCisgICAgICAgICAgICAgICBvYmogPSBzZWxmLnVuUGlja2xlKGNodW5rKQorICAgICAgICAgICAgICAgcmVjb3JkID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKG9iaikKKyAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlTG9nUmVjb3JkKHJlY29yZCkKKworICAgICAgIGRlZiB1blBpY2tsZShzZWxmLCBkYXRhKToKKyAgICAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhkYXRhKQorCisgICAgICAgZGVmIGhhbmRsZUxvZ1JlY29yZChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAjIGlmIGEgbmFtZSBpcyBzcGVjaWZpZWQsIHdlIHVzZSB0aGUgbmFtZWQgbG9nZ2VyIHJhdGhlciB0aGFuIHRoZSBvbmUKKyAgICAgICAgICAgIyBpbXBsaWVkIGJ5IHRoZSByZWNvcmQuCisgICAgICAgICAgIGlmIHNlbGYuc2VydmVyLmxvZ25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5zZXJ2ZXIubG9nbmFtZQorICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgbmFtZSA9IHJlY29yZC5uYW1lCisgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKG5hbWUpCisgICAgICAgICAgICMgTi5CLiBFVkVSWSByZWNvcmQgZ2V0cyBsb2dnZWQuIFRoaXMgaXMgYmVjYXVzZSBMb2dnZXIuaGFuZGxlCisgICAgICAgICAgICMgaXMgbm9ybWFsbHkgY2FsbGVkIEFGVEVSIGxvZ2dlci1sZXZlbCBmaWx0ZXJpbmcuIElmIHlvdSB3YW50CisgICAgICAgICAgICMgdG8gZG8gZmlsdGVyaW5nLCBkbyBpdCBhdCB0aGUgY2xpZW50IGVuZCB0byBzYXZlIHdhc3RpbmcKKyAgICAgICAgICAgIyBjeWNsZXMgYW5kIG5ldHdvcmsgYmFuZHdpZHRoIQorICAgICAgICAgICBsb2dnZXIuaGFuZGxlKHJlY29yZCkKKworICAgY2xhc3MgTG9nUmVjb3JkU29ja2V0UmVjZWl2ZXIoc29ja2V0c2VydmVyLlRocmVhZGluZ1RDUFNlcnZlcik6CisgICAgICAgIiIiCisgICAgICAgU2ltcGxlIFRDUCBzb2NrZXQtYmFzZWQgbG9nZ2luZyByZWNlaXZlciBzdWl0YWJsZSBmb3IgdGVzdGluZy4KKyAgICAgICAiIiIKKworICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCisKKyAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywKKyAgICAgICAgICAgICAgICAgICAgcG9ydD1sb2dnaW5nLmhhbmRsZXJzLkRFRkFVTFRfVENQX0xPR0dJTkdfUE9SVCwKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Mb2dSZWNvcmRTdHJlYW1IYW5kbGVyKToKKyAgICAgICAgICAgc29ja2V0c2VydmVyLlRocmVhZGluZ1RDUFNlcnZlci5fX2luaXRfXyhzZWxmLCAoaG9zdCwgcG9ydCksIGhhbmRsZXIpCisgICAgICAgICAgIHNlbGYuYWJvcnQgPSAwCisgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKKyAgICAgICAgICAgc2VsZi5sb2duYW1lID0gTm9uZQorCisgICAgICAgZGVmIHNlcnZlX3VudGlsX3N0b3BwZWQoc2VsZik6CisgICAgICAgICAgIGltcG9ydCBzZWxlY3QKKyAgICAgICAgICAgYWJvcnQgPSAwCisgICAgICAgICAgIHdoaWxlIG5vdCBhYm9ydDoKKyAgICAgICAgICAgICAgIHJkLCB3ciwgZXggPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNvY2tldC5maWxlbm8oKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICAgICBpZiByZDoKKyAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgICAgIGFib3J0ID0gc2VsZi5hYm9ydAorCisgICBkZWYgbWFpbigpOgorICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoCisgICAgICAgICAgIGZvcm1hdD0nJShyZWxhdGl2ZUNyZWF0ZWQpNWQgJShuYW1lKS0xNXMgJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykKKyAgICAgICB0Y3BzZXJ2ZXIgPSBMb2dSZWNvcmRTb2NrZXRSZWNlaXZlcigpCisgICAgICAgcHJpbnQoJ0Fib3V0IHRvIHN0YXJ0IFRDUCBzZXJ2ZXIuLi4nKQorICAgICAgIHRjcHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKKworICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICBtYWluKCkKKworRmlyc3QgcnVuIHRoZSBzZXJ2ZXIsIGFuZCB0aGVuIHRoZSBjbGllbnQuIE9uIHRoZSBjbGllbnQgc2lkZSwgbm90aGluZyBpcworcHJpbnRlZCBvbiB0aGUgY29uc29sZTsgb24gdGhlIHNlcnZlciBzaWRlLCB5b3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZTo6CisKKyAgIEFib3V0IHRvIHN0YXJ0IFRDUCBzZXJ2ZXIuLi4KKyAgICAgIDU5IHJvb3QgICAgICAgICAgICBJTkZPICAgICBKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LgorICAgICAgNTkgbXlhcHAuYXJlYTEgICAgIERFQlVHICAgIFF1aWNrIHplcGh5cnMgYmxvdywgdmV4aW5nIGRhZnQgSmltLgorICAgICAgNjkgbXlhcHAuYXJlYTEgICAgIElORk8gICAgIEhvdyBxdWlja2x5IGRhZnQganVtcGluZyB6ZWJyYXMgdmV4LgorICAgICAgNjkgbXlhcHAuYXJlYTIgICAgIFdBUk5JTkcgIEphaWwgemVzdHkgdml4ZW4gd2hvIGdyYWJiZWQgcGF5IGZyb20gcXVhY2suCisgICAgICA2OSBteWFwcC5hcmVhMiAgICAgRVJST1IgICAgVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LgorCitOb3RlIHRoYXQgdGhlcmUgYXJlIHNvbWUgc2VjdXJpdHkgaXNzdWVzIHdpdGggcGlja2xlIGluIHNvbWUgc2NlbmFyaW9zLiBJZgordGhlc2UgYWZmZWN0IHlvdSwgeW91IGNhbiB1c2UgYW4gYWx0ZXJuYXRpdmUgc2VyaWFsaXphdGlvbiBzY2hlbWUgYnkgb3ZlcnJpZGluZwordGhlIDptZXRoOmBtYWtlUGlja2xlYCBtZXRob2QgYW5kIGltcGxlbWVudGluZyB5b3VyIGFsdGVybmF0aXZlIHRoZXJlLCBhcword2VsbCBhcyBhZGFwdGluZyB0aGUgYWJvdmUgc2NyaXB0IHRvIHVzZSB5b3VyIGFsdGVybmF0aXZlIHNlcmlhbGl6YXRpb24uCisKKworLi4gX2NvbnRleHQtaW5mbzoKKworQWRkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8geW91ciBsb2dnaW5nIG91dHB1dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgeW91IHdhbnQgbG9nZ2luZyBvdXRwdXQgdG8gY29udGFpbiBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGluCithZGRpdGlvbiB0byB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlIGxvZ2dpbmcgY2FsbC4gRm9yIGV4YW1wbGUsIGluIGEKK25ldHdvcmtlZCBhcHBsaWNhdGlvbiwgaXQgbWF5IGJlIGRlc2lyYWJsZSB0byBsb2cgY2xpZW50LXNwZWNpZmljIGluZm9ybWF0aW9uCitpbiB0aGUgbG9nIChlLmcuIHJlbW90ZSBjbGllbnQncyB1c2VybmFtZSwgb3IgSVAgYWRkcmVzcykuIEFsdGhvdWdoIHlvdSBjb3VsZAordXNlIHRoZSAqZXh0cmEqIHBhcmFtZXRlciB0byBhY2hpZXZlIHRoaXMsIGl0J3Mgbm90IGFsd2F5cyBjb252ZW5pZW50IHRvIHBhc3MKK3RoZSBpbmZvcm1hdGlvbiBpbiB0aGlzIHdheS4gV2hpbGUgaXQgbWlnaHQgYmUgdGVtcHRpbmcgdG8gY3JlYXRlCis6Y2xhc3M6YExvZ2dlcmAgaW5zdGFuY2VzIG9uIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMsIHRoaXMgaXMgbm90IGEgZ29vZCBpZGVhCitiZWNhdXNlIHRoZXNlIGluc3RhbmNlcyBhcmUgbm90IGdhcmJhZ2UgY29sbGVjdGVkLiBXaGlsZSB0aGlzIGlzIG5vdCBhIHByb2JsZW0KK2luIHByYWN0aWNlLCB3aGVuIHRoZSBudW1iZXIgb2YgOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBpcyBkZXBlbmRlbnQgb24gdGhlCitsZXZlbCBvZiBncmFudWxhcml0eSB5b3Ugd2FudCB0byB1c2UgaW4gbG9nZ2luZyBhbiBhcHBsaWNhdGlvbiwgaXQgY291bGQKK2JlIGhhcmQgdG8gbWFuYWdlIGlmIHRoZSBudW1iZXIgb2YgOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBiZWNvbWVzCitlZmZlY3RpdmVseSB1bmJvdW5kZWQuCisKKworVXNpbmcgTG9nZ2VyQWRhcHRlcnMgdG8gaW1wYXJ0IGNvbnRleHR1YWwgaW5mb3JtYXRpb24KK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0FuIGVhc3kgd2F5IGluIHdoaWNoIHlvdSBjYW4gcGFzcyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIGJlIG91dHB1dCBhbG9uZword2l0aCBsb2dnaW5nIGV2ZW50IGluZm9ybWF0aW9uIGlzIHRvIHVzZSB0aGUgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBjbGFzcy4KK1RoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gbG9vayBsaWtlIGEgOmNsYXNzOmBMb2dnZXJgLCBzbyB0aGF0IHlvdSBjYW4gY2FsbAorOm1ldGg6YGRlYnVnYCwgOm1ldGg6YGluZm9gLCA6bWV0aDpgd2FybmluZ2AsIDptZXRoOmBlcnJvcmAsCis6bWV0aDpgZXhjZXB0aW9uYCwgOm1ldGg6YGNyaXRpY2FsYCBhbmQgOm1ldGg6YGxvZ2AuIFRoZXNlIG1ldGhvZHMgaGF2ZSB0aGUKK3NhbWUgc2lnbmF0dXJlcyBhcyB0aGVpciBjb3VudGVycGFydHMgaW4gOmNsYXNzOmBMb2dnZXJgLCBzbyB5b3UgY2FuIHVzZSB0aGUKK3R3byB0eXBlcyBvZiBpbnN0YW5jZXMgaW50ZXJjaGFuZ2VhYmx5LgorCitXaGVuIHlvdSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCwgeW91IHBhc3MgaXQgYQorOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlIGFuZCBhIGRpY3QtbGlrZSBvYmplY3Qgd2hpY2ggY29udGFpbnMgeW91ciBjb250ZXh0dWFsCitpbmZvcm1hdGlvbi4gV2hlbiB5b3UgY2FsbCBvbmUgb2YgdGhlIGxvZ2dpbmcgbWV0aG9kcyBvbiBhbiBpbnN0YW5jZSBvZgorOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCwgaXQgZGVsZWdhdGVzIHRoZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGluc3RhbmNlIG9mCis6Y2xhc3M6YExvZ2dlcmAgcGFzc2VkIHRvIGl0cyBjb25zdHJ1Y3RvciwgYW5kIGFycmFuZ2VzIHRvIHBhc3MgdGhlIGNvbnRleHR1YWwKK2luZm9ybWF0aW9uIGluIHRoZSBkZWxlZ2F0ZWQgY2FsbC4gSGVyZSdzIGEgc25pcHBldCBmcm9tIHRoZSBjb2RlIG9mCis6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgOjoKKworICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBEZWxlZ2F0ZSBhIGRlYnVnIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLCBhZnRlciBhZGRpbmcKKyAgICAgICAgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgYWRhcHRlciBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIG1zZywga3dhcmdzID0gc2VsZi5wcm9jZXNzKG1zZywga3dhcmdzKQorICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1Zyhtc2csICphcmdzLCAqKmt3YXJncykKKworVGhlIDptZXRoOmBwcm9jZXNzYCBtZXRob2Qgb2YgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBpcyB3aGVyZSB0aGUgY29udGV4dHVhbAoraW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlIGxvZ2dpbmcgb3V0cHV0LiBJdCdzIHBhc3NlZCB0aGUgbWVzc2FnZSBhbmQKK2tleXdvcmQgYXJndW1lbnRzIG9mIHRoZSBsb2dnaW5nIGNhbGwsIGFuZCBpdCBwYXNzZXMgYmFjayAocG90ZW50aWFsbHkpCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGVzZSB0byB1c2UgaW4gdGhlIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLiBUaGUKK2RlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgbGVhdmVzIHRoZSBtZXNzYWdlIGFsb25lLCBidXQgaW5zZXJ0cworYW4gJ2V4dHJhJyBrZXkgaW4gdGhlIGtleXdvcmQgYXJndW1lbnQgd2hvc2UgdmFsdWUgaXMgdGhlIGRpY3QtbGlrZSBvYmplY3QKK3Bhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIE9mIGNvdXJzZSwgaWYgeW91IGhhZCBwYXNzZWQgYW4gJ2V4dHJhJyBrZXl3b3JkCithcmd1bWVudCBpbiB0aGUgY2FsbCB0byB0aGUgYWRhcHRlciwgaXQgd2lsbCBiZSBzaWxlbnRseSBvdmVyd3JpdHRlbi4KKworVGhlIGFkdmFudGFnZSBvZiB1c2luZyAnZXh0cmEnIGlzIHRoYXQgdGhlIHZhbHVlcyBpbiB0aGUgZGljdC1saWtlIG9iamVjdCBhcmUKK21lcmdlZCBpbnRvIHRoZSA6Y2xhc3M6YExvZ1JlY29yZGAgaW5zdGFuY2UncyBfX2RpY3RfXywgYWxsb3dpbmcgeW91IHRvIHVzZQorY3VzdG9taXplZCBzdHJpbmdzIHdpdGggeW91ciA6Y2xhc3M6YEZvcm1hdHRlcmAgaW5zdGFuY2VzIHdoaWNoIGtub3cgYWJvdXQKK3RoZSBrZXlzIG9mIHRoZSBkaWN0LWxpa2Ugb2JqZWN0LiBJZiB5b3UgbmVlZCBhIGRpZmZlcmVudCBtZXRob2QsIGUuZy4gaWYgeW91Cit3YW50IHRvIHByZXBlbmQgb3IgYXBwZW5kIHRoZSBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHRoZSBtZXNzYWdlIHN0cmluZywKK3lvdSBqdXN0IG5lZWQgdG8gc3ViY2xhc3MgOmNsYXNzOmBMb2dnZXJBZGFwdGVyYCBhbmQgb3ZlcnJpZGUgOm1ldGg6YHByb2Nlc3NgCit0byBkbyB3aGF0IHlvdSBuZWVkLiBIZXJlJ3MgYW4gZXhhbXBsZSBzY3JpcHQgd2hpY2ggdXNlcyB0aGlzIGNsYXNzLCB3aGljaAorYWxzbyBpbGx1c3RyYXRlcyB3aGF0IGRpY3QtbGlrZSBiZWhhdmlvdXIgaXMgbmVlZGVkIGZyb20gYW4gYXJiaXRyYXJ5CisnZGljdC1saWtlJyBvYmplY3QgZm9yIHVzZSBpbiB0aGUgY29uc3RydWN0b3I6OgorCisgICBpbXBvcnQgbG9nZ2luZworCisgICBjbGFzcyBDb25uSW5mbzoKKyAgICAgICAiIiIKKyAgICAgICBBbiBleGFtcGxlIGNsYXNzIHdoaWNoIHNob3dzIGhvdyBhbiBhcmJpdHJhcnkgY2xhc3MgY2FuIGJlIHVzZWQgYXMKKyAgICAgICB0aGUgJ2V4dHJhJyBjb250ZXh0IGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcGFzc2VkIHRvIGEgTG9nZ2VyQWRhcHRlci4KKyAgICAgICAiIiIKKworICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIFRvIGFsbG93IHRoaXMgaW5zdGFuY2UgdG8gbG9vayBsaWtlIGEgZGljdC4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKKyAgICAgICAgICAgaWYgbmFtZSA9PSAnaXAnOgorICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hvaWNlKFsnMTI3LjAuMC4xJywgJzE5Mi4xNjguMC4xJ10pCisgICAgICAgICAgIGVsaWYgbmFtZSA9PSAndXNlcic6CisgICAgICAgICAgICAgICByZXN1bHQgPSBjaG9pY2UoWydqaW0nLCAnZnJlZCcsICdzaGVpbGEnXSkKKyAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX19kaWN0X18uZ2V0KG5hbWUsICc/JykKKyAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgVG8gYWxsb3cgaXRlcmF0aW9uIG92ZXIga2V5cywgd2hpY2ggd2lsbCBiZSBtZXJnZWQgaW50bworICAgICAgICAgICB0aGUgTG9nUmVjb3JkIGRpY3QgYmVmb3JlIGZvcm1hdHRpbmcgYW5kIG91dHB1dC4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIGtleXMgPSBbJ2lwJywgJ3VzZXInXQorICAgICAgICAgICBrZXlzLmV4dGVuZChzZWxmLl9fZGljdF9fLmtleXMoKSkKKyAgICAgICAgICAgcmV0dXJuIGtleXMuX19pdGVyX18oKQorCisgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKKyAgICAgICBsZXZlbHMgPSAobG9nZ2luZy5ERUJVRywgbG9nZ2luZy5JTkZPLCBsb2dnaW5nLldBUk5JTkcsIGxvZ2dpbmcuRVJST1IsIGxvZ2dpbmcuQ1JJVElDQUwpCisgICAgICAgYTEgPSBsb2dnaW5nLkxvZ2dlckFkYXB0ZXIobG9nZ2luZy5nZXRMb2dnZXIoJ2EuYi5jJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAnaXAnIDogJzEyMy4yMzEuMjMxLjEyMycsICd1c2VyJyA6ICdzaGVpbGEnIH0pCisgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpLTE1cyAlKG5hbWUpLTVzICUobGV2ZWxuYW1lKS04cyBJUDogJShpcCktMTVzIFVzZXI6ICUodXNlciktOHMgJShtZXNzYWdlKXMnKQorICAgICAgIGExLmRlYnVnKCdBIGRlYnVnIG1lc3NhZ2UnKQorICAgICAgIGExLmluZm8oJ0FuIGluZm8gbWVzc2FnZSB3aXRoICVzJywgJ3NvbWUgcGFyYW1ldGVycycpCisgICAgICAgYTIgPSBsb2dnaW5nLkxvZ2dlckFkYXB0ZXIobG9nZ2luZy5nZXRMb2dnZXIoJ2QuZS5mJyksIENvbm5JbmZvKCkpCisgICAgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICAgICBsdmwgPSBjaG9pY2UobGV2ZWxzKQorICAgICAgICAgICBsdmxuYW1lID0gbG9nZ2luZy5nZXRMZXZlbE5hbWUobHZsKQorICAgICAgICAgICBhMi5sb2cobHZsLCAnQSBtZXNzYWdlIGF0ICVzIGxldmVsIHdpdGggJWQgJXMnLCBsdmxuYW1lLCAyLCAncGFyYW1ldGVycycpCisKK1doZW4gdGhpcyBzY3JpcHQgaXMgcnVuLCB0aGUgb3V0cHV0IHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6OgorCisgICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAyMyBhLmIuYyBERUJVRyAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IHNoZWlsYSAgIEEgZGVidWcgbWVzc2FnZQorICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMjMgYS5iLmMgSU5GTyAgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBzaGVpbGEgICBBbiBpbmZvIG1lc3NhZ2Ugd2l0aCBzb21lIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDIzIGQuZS5mIENSSVRJQ0FMIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IENSSVRJQ0FMIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBJTkZPICAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBJTkZPIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBXQVJOSU5HICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBXQVJOSU5HIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBFUlJPUiAgICBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBFUlJPUiBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMzMgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIFdBUk5JTkcgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IFdBUk5JTkcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIFdBUk5JTkcgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IFdBUk5JTkcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIElORk8gICAgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogZnJlZCAgICAgQSBtZXNzYWdlIGF0IElORk8gbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIFdBUk5JTkcgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IFdBUk5JTkcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIFdBUk5JTkcgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IFdBUk5JTkcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKworCisuLiBfZmlsdGVycy1jb250ZXh0dWFsOgorCitVc2luZyBGaWx0ZXJzIHRvIGltcGFydCBjb250ZXh0dWFsIGluZm9ybWF0aW9uCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1lvdSBjYW4gYWxzbyBhZGQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBsb2cgb3V0cHV0IHVzaW5nIGEgdXNlci1kZWZpbmVkCis6Y2xhc3M6YEZpbHRlcmAuIGBgRmlsdGVyYGAgaW5zdGFuY2VzIGFyZSBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgYGBMb2dSZWNvcmRzYGAKK3Bhc3NlZCB0byB0aGVtLCBpbmNsdWRpbmcgYWRkaW5nIGFkZGl0aW9uYWwgYXR0cmlidXRlcyB3aGljaCBjYW4gdGhlbiBiZSBvdXRwdXQKK3VzaW5nIGEgc3VpdGFibGUgZm9ybWF0IHN0cmluZywgb3IgaWYgbmVlZGVkIGEgY3VzdG9tIDpjbGFzczpgRm9ybWF0dGVyYC4KKworRm9yIGV4YW1wbGUgaW4gYSB3ZWIgYXBwbGljYXRpb24sIHRoZSByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZCAob3IgYXQgbGVhc3QsCit0aGUgaW50ZXJlc3RpbmcgcGFydHMgb2YgaXQpIGNhbiBiZSBzdG9yZWQgaW4gYSB0aHJlYWRsb2NhbAorKDpjbGFzczpgdGhyZWFkaW5nLmxvY2FsYCkgdmFyaWFibGUsIGFuZCB0aGVuIGFjY2Vzc2VkIGZyb20gYSBgYEZpbHRlcmBgIHRvCithZGQsIHNheSwgaW5mb3JtYXRpb24gZnJvbSB0aGUgcmVxdWVzdCAtIHNheSwgdGhlIHJlbW90ZSBJUCBhZGRyZXNzIGFuZCByZW1vdGUKK3VzZXIncyB1c2VybmFtZSAtIHRvIHRoZSBgYExvZ1JlY29yZGBgLCB1c2luZyB0aGUgYXR0cmlidXRlIG5hbWVzICdpcCcgYW5kCisndXNlcicgYXMgaW4gdGhlIGBgTG9nZ2VyQWRhcHRlcmBgIGV4YW1wbGUgYWJvdmUuIEluIHRoYXQgY2FzZSwgdGhlIHNhbWUgZm9ybWF0CitzdHJpbmcgY2FuIGJlIHVzZWQgdG8gZ2V0IHNpbWlsYXIgb3V0cHV0IHRvIHRoYXQgc2hvd24gYWJvdmUuIEhlcmUncyBhbiBleGFtcGxlCitzY3JpcHQ6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCisKKyAgICBjbGFzcyBDb250ZXh0RmlsdGVyKGxvZ2dpbmcuRmlsdGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgaXMgYSBmaWx0ZXIgd2hpY2ggaW5qZWN0cyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGludG8gdGhlIGxvZy4KKworICAgICAgICBSYXRoZXIgdGhhbiB1c2UgYWN0dWFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24sIHdlIGp1c3QgdXNlIHJhbmRvbQorICAgICAgICBkYXRhIGluIHRoaXMgZGVtby4KKyAgICAgICAgIiIiCisKKyAgICAgICAgVVNFUlMgPSBbJ2ppbScsICdmcmVkJywgJ3NoZWlsYSddCisgICAgICAgIElQUyA9IFsnMTIzLjIzMS4yMzEuMTIzJywgJzEyNy4wLjAuMScsICcxOTIuMTY4LjAuMSddCisKKyAgICAgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorCisgICAgICAgICAgICByZWNvcmQuaXAgPSBjaG9pY2UoQ29udGV4dEZpbHRlci5JUFMpCisgICAgICAgICAgICByZWNvcmQudXNlciA9IGNob2ljZShDb250ZXh0RmlsdGVyLlVTRVJTKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgbGV2ZWxzID0gKGxvZ2dpbmcuREVCVUcsIGxvZ2dpbmcuSU5GTywgbG9nZ2luZy5XQVJOSU5HLCBsb2dnaW5nLkVSUk9SLCBsb2dnaW5nLkNSSVRJQ0FMKQorICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKS0xNXMgJShuYW1lKS01cyAlKGxldmVsbmFtZSktOHMgSVA6ICUoaXApLTE1cyBVc2VyOiAlKHVzZXIpLThzICUobWVzc2FnZSlzJykKKyAgICAgICBhMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhLmIuYycpCisgICAgICAgYTIgPSBsb2dnaW5nLmdldExvZ2dlcignZC5lLmYnKQorCisgICAgICAgZiA9IENvbnRleHRGaWx0ZXIoKQorICAgICAgIGExLmFkZEZpbHRlcihmKQorICAgICAgIGEyLmFkZEZpbHRlcihmKQorICAgICAgIGExLmRlYnVnKCdBIGRlYnVnIG1lc3NhZ2UnKQorICAgICAgIGExLmluZm8oJ0FuIGluZm8gbWVzc2FnZSB3aXRoICVzJywgJ3NvbWUgcGFyYW1ldGVycycpCisgICAgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICAgICBsdmwgPSBjaG9pY2UobGV2ZWxzKQorICAgICAgICAgICBsdmxuYW1lID0gbG9nZ2luZy5nZXRMZXZlbE5hbWUobHZsKQorICAgICAgICAgICBhMi5sb2cobHZsLCAnQSBtZXNzYWdlIGF0ICVzIGxldmVsIHdpdGggJWQgJXMnLCBsdmxuYW1lLCAyLCAncGFyYW1ldGVycycpCisKK3doaWNoLCB3aGVuIHJ1biwgcHJvZHVjZXMgc29tZXRoaW5nIGxpa2U6OgorCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwyOTIgYS5iLmMgREVCVUcgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBmcmVkICAgICBBIGRlYnVnIG1lc3NhZ2UKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBhLmIuYyBJTkZPICAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IHNoZWlsYSAgIEFuIGluZm8gbWVzc2FnZSB3aXRoIHNvbWUgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIENSSVRJQ0FMIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IENSSVRJQ0FMIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBqaW0gICAgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBERUJVRyAgICBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIEVSUk9SICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgQ1JJVElDQUwgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBqaW0gICAgICBBIG1lc3NhZ2UgYXQgQ1JJVElDQUwgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBDUklUSUNBTCBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBDUklUSUNBTCBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIERFQlVHICAgIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IERFQlVHIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCisgICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDEgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKyAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMSBkLmUuZiBERUJVRyAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycworICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAxIGQuZS5mIElORk8gICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBtZXNzYWdlIGF0IElORk8gbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKKworCisuLiBfbXVsdGlwbGUtcHJvY2Vzc2VzOgorCitMb2dnaW5nIHRvIGEgc2luZ2xlIGZpbGUgZnJvbSBtdWx0aXBsZSBwcm9jZXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbHRob3VnaCBsb2dnaW5nIGlzIHRocmVhZC1zYWZlLCBhbmQgbG9nZ2luZyB0byBhIHNpbmdsZSBmaWxlIGZyb20gbXVsdGlwbGUKK3RocmVhZHMgaW4gYSBzaW5nbGUgcHJvY2VzcyAqaXMqIHN1cHBvcnRlZCwgbG9nZ2luZyB0byBhIHNpbmdsZSBmaWxlIGZyb20KKyptdWx0aXBsZSBwcm9jZXNzZXMqIGlzICpub3QqIHN1cHBvcnRlZCwgYmVjYXVzZSB0aGVyZSBpcyBubyBzdGFuZGFyZCB3YXkgdG8KK3NlcmlhbGl6ZSBhY2Nlc3MgdG8gYSBzaW5nbGUgZmlsZSBhY3Jvc3MgbXVsdGlwbGUgcHJvY2Vzc2VzIGluIFB5dGhvbi4gSWYgeW91CituZWVkIHRvIGxvZyB0byBhIHNpbmdsZSBmaWxlIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzLCBvbmUgd2F5IG9mIGRvaW5nIHRoaXMgaXMKK3RvIGhhdmUgYWxsIHRoZSBwcm9jZXNzZXMgbG9nIHRvIGEgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCwgYW5kIGhhdmUgYSBzZXBhcmF0ZQorcHJvY2VzcyB3aGljaCBpbXBsZW1lbnRzIGEgc29ja2V0IHNlcnZlciB3aGljaCByZWFkcyBmcm9tIHRoZSBzb2NrZXQgYW5kIGxvZ3MKK3RvIGZpbGUuIChJZiB5b3UgcHJlZmVyLCB5b3UgY2FuIGRlZGljYXRlIG9uZSB0aHJlYWQgaW4gb25lIG9mIHRoZSBleGlzdGluZworcHJvY2Vzc2VzIHRvIHBlcmZvcm0gdGhpcyBmdW5jdGlvbi4pIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBkb2N1bWVudHMgdGhpcworYXBwcm9hY2ggaW4gbW9yZSBkZXRhaWwgYW5kIGluY2x1ZGVzIGEgd29ya2luZyBzb2NrZXQgcmVjZWl2ZXIgd2hpY2ggY2FuIGJlCit1c2VkIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIHlvdSB0byBhZGFwdCBpbiB5b3VyIG93biBhcHBsaWNhdGlvbnMuCisKK0lmIHlvdSBhcmUgdXNpbmcgYSByZWNlbnQgdmVyc2lvbiBvZiBQeXRob24gd2hpY2ggaW5jbHVkZXMgdGhlCis6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZSwgeW91IGNvdWxkIHdyaXRlIHlvdXIgb3duIGhhbmRsZXIgd2hpY2ggdXNlcyB0aGUKKzpjbGFzczpgTG9ja2AgY2xhc3MgZnJvbSB0aGlzIG1vZHVsZSB0byBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBmaWxlIGZyb20KK3lvdXIgcHJvY2Vzc2VzLiBUaGUgZXhpc3RpbmcgOmNsYXNzOmBGaWxlSGFuZGxlcmAgYW5kIHN1YmNsYXNzZXMgZG8gbm90IG1ha2UKK3VzZSBvZiA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIGF0IHByZXNlbnQsIHRob3VnaCB0aGV5IG1heSBkbyBzbyBpbiB0aGUgZnV0dXJlLgorTm90ZSB0aGF0IGF0IHByZXNlbnQsIHRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZSBkb2VzIG5vdCBwcm92aWRlCit3b3JraW5nIGxvY2sgZnVuY3Rpb25hbGl0eSBvbiBhbGwgcGxhdGZvcm1zIChzZWUKK2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNzcwKS4KKworLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcuaGFuZGxlcnMKKworQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSBgYFF1ZXVlYGAgYW5kIGEgOmNsYXNzOmBRdWV1ZUhhbmRsZXJgIHRvIHNlbmQKK2FsbCBsb2dnaW5nIGV2ZW50cyB0byBvbmUgb2YgdGhlIHByb2Nlc3NlcyBpbiB5b3VyIG11bHRpLXByb2Nlc3MgYXBwbGljYXRpb24uCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2NyaXB0IGRlbW9uc3RyYXRlcyBob3cgeW91IGNhbiBkbyB0aGlzOyBpbiB0aGUgZXhhbXBsZQorYSBzZXBhcmF0ZSBsaXN0ZW5lciBwcm9jZXNzIGxpc3RlbnMgZm9yIGV2ZW50cyBzZW50IGJ5IG90aGVyIHByb2Nlc3NlcyBhbmQgbG9ncwordGhlbSBhY2NvcmRpbmcgdG8gaXRzIG93biBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uIEFsdGhvdWdoIHRoZSBleGFtcGxlIG9ubHkKK2RlbW9uc3RyYXRlcyBvbmUgd2F5IG9mIGRvaW5nIGl0IChmb3IgZXhhbXBsZSwgeW91IG1heSB3YW50IHRvIHVzZSBhIGxpc3RlbmVyCit0aHJlYWQgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBsaXN0ZW5lciBwcm9jZXNzIC0tIHRoZSBpbXBsZW1lbnRhdGlvbiB3b3VsZCBiZQorYW5hbG9nb3VzKSBpdCBkb2VzIGFsbG93IGZvciBjb21wbGV0ZWx5IGRpZmZlcmVudCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25zIGZvcgordGhlIGxpc3RlbmVyIGFuZCB0aGUgb3RoZXIgcHJvY2Vzc2VzIGluIHlvdXIgYXBwbGljYXRpb24sIGFuZCBjYW4gYmUgdXNlZCBhcwordGhlIGJhc2lzIGZvciBjb2RlIG1lZXRpbmcgeW91ciBvd24gc3BlY2lmaWMgcmVxdWlyZW1lbnRzOjoKKworICAgICMgWW91J2xsIG5lZWQgdGhlc2UgaW1wb3J0cyBpbiB5b3VyIG93biBjb2RlCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKKworICAgICMgTmV4dCB0d28gaW1wb3J0IGxpbmVzIGZvciB0aGlzIGRlbW8gb25seQorICAgIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UsIHJhbmRvbQorICAgIGltcG9ydCB0aW1lCisKKyAgICAjCisgICAgIyBCZWNhdXNlIHlvdSdsbCB3YW50IHRvIGRlZmluZSB0aGUgbG9nZ2luZyBjb25maWd1cmF0aW9ucyBmb3IgbGlzdGVuZXIgYW5kIHdvcmtlcnMsIHRoZQorICAgICMgbGlzdGVuZXIgYW5kIHdvcmtlciBwcm9jZXNzIGZ1bmN0aW9ucyB0YWtlIGEgY29uZmlndXJlciBwYXJhbWV0ZXIgd2hpY2ggaXMgYSBjYWxsYWJsZQorICAgICMgZm9yIGNvbmZpZ3VyaW5nIGxvZ2dpbmcgZm9yIHRoYXQgcHJvY2Vzcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBhbHNvIHBhc3NlZCB0aGUgcXVldWUsCisgICAgIyB3aGljaCB0aGV5IHVzZSBmb3IgY29tbXVuaWNhdGlvbi4KKyAgICAjCisgICAgIyBJbiBwcmFjdGljZSwgeW91IGNhbiBjb25maWd1cmUgdGhlIGxpc3RlbmVyIGhvd2V2ZXIgeW91IHdhbnQsIGJ1dCBub3RlIHRoYXQgaW4gdGhpcworICAgICMgc2ltcGxlIGV4YW1wbGUsIHRoZSBsaXN0ZW5lciBkb2VzIG5vdCBhcHBseSBsZXZlbCBvciBmaWx0ZXIgbG9naWMgdG8gcmVjZWl2ZWQgcmVjb3Jkcy4KKyAgICAjIEluIHByYWN0aWNlLCB5b3Ugd291bGQgcHJvYmFibHkgd2FudCB0byBkbyB0aGlzIGxvZ2ljIGluIHRoZSB3b3JrZXIgcHJvY2Vzc2VzLCB0byBhdm9pZAorICAgICMgc2VuZGluZyBldmVudHMgd2hpY2ggd291bGQgYmUgZmlsdGVyZWQgb3V0IGJldHdlZW4gcHJvY2Vzc2VzLgorICAgICMKKyAgICAjIFRoZSBzaXplIG9mIHRoZSByb3RhdGVkIGZpbGVzIGlzIG1hZGUgc21hbGwgc28geW91IGNhbiBzZWUgdGhlIHJlc3VsdHMgZWFzaWx5LgorICAgIGRlZiBsaXN0ZW5lcl9jb25maWd1cmVyKCk6CisgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIoJy90bXAvbXB0ZXN0LmxvZycsICdhJywgMzAwLCAxMCkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcyAlKHByb2Nlc3NOYW1lKS0xMHMgJShuYW1lKXMgJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykKKyAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZikKKyAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGgpCisKKyAgICAjIFRoaXMgaXMgdGhlIGxpc3RlbmVyIHByb2Nlc3MgdG9wLWxldmVsIGxvb3A6IHdhaXQgZm9yIGxvZ2dpbmcgZXZlbnRzCisgICAgIyAoTG9nUmVjb3JkcylvbiB0aGUgcXVldWUgYW5kIGhhbmRsZSB0aGVtLCBxdWl0IHdoZW4geW91IGdldCBhIE5vbmUgZm9yIGEKKyAgICAjIExvZ1JlY29yZC4KKyAgICBkZWYgbGlzdGVuZXJfcHJvY2VzcyhxdWV1ZSwgY29uZmlndXJlcik6CisgICAgICAgIGNvbmZpZ3VyZXIoKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlY29yZCA9IHF1ZXVlLmdldCgpCisgICAgICAgICAgICAgICAgaWYgcmVjb3JkIGlzIE5vbmU6ICMgV2Ugc2VuZCB0aGlzIGFzIGEgc2VudGluZWwgdG8gdGVsbCB0aGUgbGlzdGVuZXIgdG8gcXVpdC4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihyZWNvcmQubmFtZSkKKyAgICAgICAgICAgICAgICBsb2dnZXIuaGFuZGxlKHJlY29yZCkgIyBObyBsZXZlbCBvciBmaWx0ZXIgbG9naWMgYXBwbGllZCAtIGp1c3QgZG8gaXQhCisgICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRyYWNlYmFjaworICAgICAgICAgICAgICAgIHByaW50ID4+IHN5cy5zdGRlcnIsICdXaG9vcHMhIFByb2JsZW06JworICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQorCisgICAgIyBBcnJheXMgdXNlZCBmb3IgcmFuZG9tIHNlbGVjdGlvbnMgaW4gdGhpcyBkZW1vCisKKyAgICBMRVZFTFMgPSBbbG9nZ2luZy5ERUJVRywgbG9nZ2luZy5JTkZPLCBsb2dnaW5nLldBUk5JTkcsCisgICAgICAgICAgICAgIGxvZ2dpbmcuRVJST1IsIGxvZ2dpbmcuQ1JJVElDQUxdCisKKyAgICBMT0dHRVJTID0gWydhLmIuYycsICdkLmUuZiddCisKKyAgICBNRVNTQUdFUyA9IFsKKyAgICAgICAgJ1JhbmRvbSBtZXNzYWdlICMxJywKKyAgICAgICAgJ1JhbmRvbSBtZXNzYWdlICMyJywKKyAgICAgICAgJ1JhbmRvbSBtZXNzYWdlICMzJywKKyAgICBdCisKKyAgICAjIFRoZSB3b3JrZXIgY29uZmlndXJhdGlvbiBpcyBkb25lIGF0IHRoZSBzdGFydCBvZiB0aGUgd29ya2VyIHByb2Nlc3MgcnVuLgorICAgICMgTm90ZSB0aGF0IG9uIFdpbmRvd3MgeW91IGNhbid0IHJlbHkgb24gZm9yayBzZW1hbnRpY3MsIHNvIGVhY2ggcHJvY2VzcworICAgICMgd2lsbCBydW4gdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBjb2RlIHdoZW4gaXQgc3RhcnRzLgorICAgIGRlZiB3b3JrZXJfY29uZmlndXJlcihxdWV1ZSk6CisgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLlF1ZXVlSGFuZGxlcihxdWV1ZSkgIyBKdXN0IHRoZSBvbmUgaGFuZGxlciBuZWVkZWQKKyAgICAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGgpCisgICAgICAgIHJvb3Quc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykgIyBzZW5kIGFsbCBtZXNzYWdlcywgZm9yIGRlbW87IG5vIG90aGVyIGxldmVsIG9yIGZpbHRlciBsb2dpYyBhcHBsaWVkLgorCisgICAgIyBUaGlzIGlzIHRoZSB3b3JrZXIgcHJvY2VzcyB0b3AtbGV2ZWwgbG9vcCwgd2hpY2gganVzdCBsb2dzIHRlbiBldmVudHMgd2l0aAorICAgICMgcmFuZG9tIGludGVydmVuaW5nIGRlbGF5cyBiZWZvcmUgdGVybWluYXRpbmcuCisgICAgIyBUaGUgcHJpbnQgbWVzc2FnZXMgYXJlIGp1c3Qgc28geW91IGtub3cgaXQncyBkb2luZyBzb21ldGhpbmchCisgICAgZGVmIHdvcmtlcl9wcm9jZXNzKHF1ZXVlLCBjb25maWd1cmVyKToKKyAgICAgICAgY29uZmlndXJlcihxdWV1ZSkKKyAgICAgICAgbmFtZSA9IG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgIHByaW50KCdXb3JrZXIgc3RhcnRlZDogJXMnICUgbmFtZSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgdGltZS5zbGVlcChyYW5kb20oKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKGNob2ljZShMT0dHRVJTKSkKKyAgICAgICAgICAgIGxldmVsID0gY2hvaWNlKExFVkVMUykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBjaG9pY2UoTUVTU0FHRVMpCisgICAgICAgICAgICBsb2dnZXIubG9nKGxldmVsLCBtZXNzYWdlKQorICAgICAgICBwcmludCgnV29ya2VyIGZpbmlzaGVkOiAlcycgJSBuYW1lKQorCisgICAgIyBIZXJlJ3Mgd2hlcmUgdGhlIGRlbW8gZ2V0cyBvcmNoZXN0cmF0ZWQuIENyZWF0ZSB0aGUgcXVldWUsIGNyZWF0ZSBhbmQgc3RhcnQKKyAgICAjIHRoZSBsaXN0ZW5lciwgY3JlYXRlIHRlbiB3b3JrZXJzIGFuZCBzdGFydCB0aGVtLCB3YWl0IGZvciB0aGVtIHRvIGZpbmlzaCwKKyAgICAjIHRoZW4gc2VuZCBhIE5vbmUgdG8gdGhlIHF1ZXVlIHRvIHRlbGwgdGhlIGxpc3RlbmVyIHRvIGZpbmlzaC4KKyAgICBkZWYgbWFpbigpOgorICAgICAgICBxdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgtMSkKKyAgICAgICAgbGlzdGVuZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9bGlzdGVuZXJfcHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShxdWV1ZSwgbGlzdGVuZXJfY29uZmlndXJlcikpCisgICAgICAgIGxpc3RlbmVyLnN0YXJ0KCkKKyAgICAgICAgd29ya2VycyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHdvcmtlciA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD13b3JrZXJfcHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShxdWV1ZSwgd29ya2VyX2NvbmZpZ3VyZXIpKQorICAgICAgICAgICAgd29ya2Vycy5hcHBlbmQod29ya2VyKQorICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgZm9yIHcgaW4gd29ya2VyczoKKyAgICAgICAgICAgIHcuam9pbigpCisgICAgICAgIHF1ZXVlLnB1dF9ub3dhaXQoTm9uZSkKKyAgICAgICAgbGlzdGVuZXIuam9pbigpCisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICBtYWluKCkKKworQSB2YXJpYW50IG9mIHRoZSBhYm92ZSBzY3JpcHQga2VlcHMgdGhlIGxvZ2dpbmcgaW4gdGhlIG1haW4gcHJvY2VzcywgaW4gYQorc2VwYXJhdGUgdGhyZWFkOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisgICAgaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKKyAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgUXVldWUKKyAgICBpbXBvcnQgcmFuZG9tCisgICAgaW1wb3J0IHRocmVhZGluZworICAgIGltcG9ydCB0aW1lCisKKyAgICBkZWYgbG9nZ2VyX3RocmVhZChxKToKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHJlY29yZCA9IHEuZ2V0KCkKKyAgICAgICAgICAgIGlmIHJlY29yZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihyZWNvcmQubmFtZSkKKyAgICAgICAgICAgIGxvZ2dlci5oYW5kbGUocmVjb3JkKQorCisKKyAgICBkZWYgd29ya2VyX3Byb2Nlc3MocSk6CisgICAgICAgIHFoID0gbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUhhbmRsZXIocSkKKyAgICAgICAgcm9vdCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgcm9vdC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICByb290LmFkZEhhbmRsZXIocWgpCisgICAgICAgIGxldmVscyA9IFtsb2dnaW5nLkRFQlVHLCBsb2dnaW5nLklORk8sIGxvZ2dpbmcuV0FSTklORywgbG9nZ2luZy5FUlJPUiwKKyAgICAgICAgICAgICAgICAgIGxvZ2dpbmcuQ1JJVElDQUxdCisgICAgICAgIGxvZ2dlcnMgPSBbJ2ZvbycsICdmb28uYmFyJywgJ2Zvby5iYXIuYmF6JywKKyAgICAgICAgICAgICAgICAgICAnc3BhbScsICdzcGFtLmhhbScsICdzcGFtLmhhbS5lZ2dzJ10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIGx2bCA9IHJhbmRvbS5jaG9pY2UobGV2ZWxzKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmFuZG9tLmNob2ljZShsb2dnZXJzKSkKKyAgICAgICAgICAgIGxvZ2dlci5sb2cobHZsLCAnTWVzc2FnZSBuby4gJWQnLCBpKQorCisgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgcSA9IFF1ZXVlKCkKKyAgICAgICAgZCA9IHsKKyAgICAgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgICAgICdkZXRhaWxlZCc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuRm9ybWF0dGVyJywKKyAgICAgICAgICAgICAgICAgICAgJ2Zvcm1hdCc6ICclKGFzY3RpbWUpcyAlKG5hbWUpLTE1cyAlKGxldmVsbmFtZSktOHMgJShwcm9jZXNzTmFtZSktMTBzICUobWVzc2FnZSlzJworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnaGFuZGxlcnMnOiB7CisgICAgICAgICAgICAgICAgJ2NvbnNvbGUnOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAnZmlsZSc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuRmlsZUhhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnbXBsb2cubG9nJywKKyAgICAgICAgICAgICAgICAgICAgJ21vZGUnOiAndycsCisgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnZGV0YWlsZWQnLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgJ2Zvb2ZpbGUnOiB7CisgICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdsb2dnaW5nLkZpbGVIYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ21wbG9nLWZvby5sb2cnLAorICAgICAgICAgICAgICAgICAgICAnbW9kZSc6ICd3JywKKyAgICAgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICdkZXRhaWxlZCcsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAnZXJyb3JzJzogeworICAgICAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5GaWxlSGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICdmaWxlbmFtZSc6ICdtcGxvZy1lcnJvcnMubG9nJywKKyAgICAgICAgICAgICAgICAgICAgJ21vZGUnOiAndycsCisgICAgICAgICAgICAgICAgICAgICdsZXZlbCc6ICdFUlJPUicsCisgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnZGV0YWlsZWQnLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2xvZ2dlcnMnOiB7CisgICAgICAgICAgICAgICAgJ2Zvbyc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnZm9vZmlsZSddCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdyb290JzogeworICAgICAgICAgICAgICAgICdsZXZlbCc6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlJywgJ2ZpbGUnLCAnZXJyb3JzJ10KKyAgICAgICAgICAgIH0sCisgICAgICAgIH0KKyAgICAgICAgd29ya2VycyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgd3AgPSBQcm9jZXNzKHRhcmdldD13b3JrZXJfcHJvY2VzcywgbmFtZT0nd29ya2VyICVkJyAlIChpICsgMSksIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgIHdvcmtlcnMuYXBwZW5kKHdwKQorICAgICAgICAgICAgd3Auc3RhcnQoKQorICAgICAgICBsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnKGQpCisgICAgICAgIGxwID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bG9nZ2VyX3RocmVhZCwgYXJncz0ocSwpKQorICAgICAgICBscC5zdGFydCgpCisgICAgICAgICMgQXQgdGhpcyBwb2ludCwgdGhlIG1haW4gcHJvY2VzcyBjb3VsZCBkbyBzb21lIHVzZWZ1bCB3b3JrIG9mIGl0cyBvd24KKyAgICAgICAgIyBPbmNlIGl0J3MgZG9uZSB0aGF0LCBpdCBjYW4gd2FpdCBmb3IgdGhlIHdvcmtlcnMgdG8gdGVybWluYXRlLi4uCisgICAgICAgIGZvciB3cCBpbiB3b3JrZXJzOgorICAgICAgICAgICAgd3Auam9pbigpCisgICAgICAgICMgQW5kIG5vdyB0ZWxsIHRoZSBsb2dnaW5nIHRocmVhZCB0byBmaW5pc2ggdXAsIHRvbworICAgICAgICBxLnB1dChOb25lKQorICAgICAgICBscC5qb2luKCkKKworVGhpcyB2YXJpYW50IHNob3dzIGhvdyB5b3UgY2FuIGUuZy4gYXBwbHkgY29uZmlndXJhdGlvbiBmb3IgcGFydGljdWxhciBsb2dnZXJzCistIGUuZy4gdGhlIGBgZm9vYGAgbG9nZ2VyIGhhcyBhIHNwZWNpYWwgaGFuZGxlciB3aGljaCBzdG9yZXMgYWxsIGV2ZW50cyBpbiB0aGUKK2BgZm9vYGAgc3Vic3lzdGVtIGluIGEgZmlsZSBgYG1wbG9nLWZvby5sb2dgYC4gVGhpcyB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcKK21hY2hpbmVyeSBpbiB0aGUgbWFpbiBwcm9jZXNzIChldmVuIHRob3VnaCB0aGUgbG9nZ2luZyBldmVudHMgYXJlIGdlbmVyYXRlZCBpbgordGhlIHdvcmtlciBwcm9jZXNzZXMpIHRvIGRpcmVjdCB0aGUgbWVzc2FnZXMgdG8gdGhlIGFwcHJvcHJpYXRlIGRlc3RpbmF0aW9ucy4KKworVXNpbmcgZmlsZSByb3RhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBzZWN0aW9uYXV0aG9yOjogRG91ZyBIZWxsbWFubiwgVmluYXkgU2FqaXAgKGNoYW5nZXMpCisuLiAoc2VlIDxodHRwOi8vYmxvZy5kb3VnaGVsbG1hbm4uY29tLzIwMDcvMDUvcHltb3R3LWxvZ2dpbmcuaHRtbD4pCisKK1NvbWV0aW1lcyB5b3Ugd2FudCB0byBsZXQgYSBsb2cgZmlsZSBncm93IHRvIGEgY2VydGFpbiBzaXplLCB0aGVuIG9wZW4gYSBuZXcKK2ZpbGUgYW5kIGxvZyB0byB0aGF0LiBZb3UgbWF5IHdhbnQgdG8ga2VlcCBhIGNlcnRhaW4gbnVtYmVyIG9mIHRoZXNlIGZpbGVzLCBhbmQKK3doZW4gdGhhdCBtYW55IGZpbGVzIGhhdmUgYmVlbiBjcmVhdGVkLCByb3RhdGUgdGhlIGZpbGVzIHNvIHRoYXQgdGhlIG51bWJlciBvZgorZmlsZXMgYW5kIHRoZSBzaXplIG9mIHRoZSBmaWxlcyBib3RoIHJlbWFpbiBib3VuZGVkLiBGb3IgdGhpcyB1c2FnZSBwYXR0ZXJuLCB0aGUKK2xvZ2dpbmcgcGFja2FnZSBwcm92aWRlcyBhIDpjbGFzczpgUm90YXRpbmdGaWxlSGFuZGxlcmA6OgorCisgICBpbXBvcnQgZ2xvYgorICAgaW1wb3J0IGxvZ2dpbmcKKyAgIGltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCisKKyAgIExPR19GSUxFTkFNRSA9ICdsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dCcKKworICAgIyBTZXQgdXAgYSBzcGVjaWZpYyBsb2dnZXIgd2l0aCBvdXIgZGVzaXJlZCBvdXRwdXQgbGV2ZWwKKyAgIG15X2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdNeUxvZ2dlcicpCisgICBteV9sb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIyBBZGQgdGhlIGxvZyBtZXNzYWdlIGhhbmRsZXIgdG8gdGhlIGxvZ2dlcgorICAgaGFuZGxlciA9IGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcigKKyAgICAgICAgICAgICAgICAgTE9HX0ZJTEVOQU1FLCBtYXhCeXRlcz0yMCwgYmFja3VwQ291bnQ9NSkKKworICAgbXlfbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKworICAgIyBMb2cgc29tZSBtZXNzYWdlcworICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgIG15X2xvZ2dlci5kZWJ1ZygnaSA9ICVkJyAlIGkpCisKKyAgICMgU2VlIHdoYXQgZmlsZXMgYXJlIGNyZWF0ZWQKKyAgIGxvZ2ZpbGVzID0gZ2xvYi5nbG9iKCclcyonICUgTE9HX0ZJTEVOQU1FKQorCisgICBmb3IgZmlsZW5hbWUgaW4gbG9nZmlsZXM6CisgICAgICAgcHJpbnQoZmlsZW5hbWUpCisKK1RoZSByZXN1bHQgc2hvdWxkIGJlIDYgc2VwYXJhdGUgZmlsZXMsIGVhY2ggd2l0aCBwYXJ0IG9mIHRoZSBsb2cgaGlzdG9yeSBmb3IgdGhlCithcHBsaWNhdGlvbjo6CisKKyAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0CisgICBsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dC4xCisgICBsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dC4yCisgICBsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dC4zCisgICBsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dC40CisgICBsb2dnaW5nX3JvdGF0aW5nZmlsZV9leGFtcGxlLm91dC41CisKK1RoZSBtb3N0IGN1cnJlbnQgZmlsZSBpcyBhbHdheXMgOmZpbGU6YGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0YCwKK2FuZCBlYWNoIHRpbWUgaXQgcmVhY2hlcyB0aGUgc2l6ZSBsaW1pdCBpdCBpcyByZW5hbWVkIHdpdGggdGhlIHN1ZmZpeAorYGAuMWBgLiBFYWNoIG9mIHRoZSBleGlzdGluZyBiYWNrdXAgZmlsZXMgaXMgcmVuYW1lZCB0byBpbmNyZW1lbnQgdGhlIHN1ZmZpeAorKGBgLjFgYCBiZWNvbWVzIGBgLjJgYCwgZXRjLikgIGFuZCB0aGUgYGAuNmBgIGZpbGUgaXMgZXJhc2VkLgorCitPYnZpb3VzbHkgdGhpcyBleGFtcGxlIHNldHMgdGhlIGxvZyBsZW5ndGggbXVjaCBtdWNoIHRvbyBzbWFsbCBhcyBhbiBleHRyZW1lCitleGFtcGxlLiAgWW91IHdvdWxkIHdhbnQgdG8gc2V0ICptYXhCeXRlcyogdG8gYW4gYXBwcm9wcmlhdGUgdmFsdWUuCisKKy4uIF96ZXJvbXEtaGFuZGxlcnM6CisKK1N1YmNsYXNzaW5nIFF1ZXVlSGFuZGxlciAtIGEgWmVyb01RIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworWW91IGNhbiB1c2UgYSA6Y2xhc3M6YFF1ZXVlSGFuZGxlcmAgc3ViY2xhc3MgdG8gc2VuZCBtZXNzYWdlcyB0byBvdGhlciBraW5kcworb2YgcXVldWVzLCBmb3IgZXhhbXBsZSBhIFplcm9NUSAncHVibGlzaCcgc29ja2V0LiBJbiB0aGUgZXhhbXBsZSBiZWxvdyx0aGUKK3NvY2tldCBpcyBjcmVhdGVkIHNlcGFyYXRlbHkgYW5kIHBhc3NlZCB0byB0aGUgaGFuZGxlciAoYXMgaXRzICdxdWV1ZScpOjoKKworICAgIGltcG9ydCB6bXEgIyB1c2luZyBweXptcSwgdGhlIFB5dGhvbiBiaW5kaW5nIGZvciBaZXJvTVEKKyAgICBpbXBvcnQganNvbiAjIGZvciBzZXJpYWxpemluZyByZWNvcmRzIHBvcnRhYmx5CisKKyAgICBjdHggPSB6bXEuQ29udGV4dCgpCisgICAgc29jayA9IHptcS5Tb2NrZXQoY3R4LCB6bXEuUFVCKSAjIG9yIHptcS5QVVNILCBvciBvdGhlciBzdWl0YWJsZSB2YWx1ZQorICAgIHNvY2suYmluZCgndGNwOi8vKjo1NTU2JykgIyBvciB3aGVyZXZlcgorCisgICAgY2xhc3MgWmVyb01RU29ja2V0SGFuZGxlcihRdWV1ZUhhbmRsZXIpOgorICAgICAgICBkZWYgZW5xdWV1ZShzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMocmVjb3JkLl9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5xdWV1ZS5zZW5kKGRhdGEpCisKKyAgICBoYW5kbGVyID0gWmVyb01RU29ja2V0SGFuZGxlcihzb2NrKQorCisKK09mIGNvdXJzZSB0aGVyZSBhcmUgb3RoZXIgd2F5cyBvZiBvcmdhbml6aW5nIHRoaXMsIGZvciBleGFtcGxlIHBhc3NpbmcgaW4gdGhlCitkYXRhIG5lZWRlZCBieSB0aGUgaGFuZGxlciB0byBjcmVhdGUgdGhlIHNvY2tldDo6CisKKyAgICBjbGFzcyBaZXJvTVFTb2NrZXRIYW5kbGVyKFF1ZXVlSGFuZGxlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmksIHNvY2t0eXBlPXptcS5QVUIsIGN0eD1Ob25lKToKKyAgICAgICAgICAgIHNlbGYuY3R4ID0gY3R4IG9yIHptcS5Db250ZXh0KCkKKyAgICAgICAgICAgIHNvY2tldCA9IHptcS5Tb2NrZXQoc2VsZi5jdHgsIHNvY2t0eXBlKQorICAgICAgICAgICAgc29ja2V0LmJpbmQodXJpKQorICAgICAgICAgICAgUXVldWVIYW5kbGVyLl9faW5pdF9fKHNlbGYsIHNvY2tldCkKKworICAgICAgICBkZWYgZW5xdWV1ZShzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgZGF0YSA9IGpzb24uZHVtcHMocmVjb3JkLl9fZGljdF9fKQorICAgICAgICAgICAgc2VsZi5xdWV1ZS5zZW5kKGRhdGEpCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5xdWV1ZS5jbG9zZSgpCisKKworU3ViY2xhc3NpbmcgUXVldWVMaXN0ZW5lciAtIGEgWmVyb01RIGV4YW1wbGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gYWxzbyBzdWJjbGFzcyA6Y2xhc3M6YFF1ZXVlTGlzdGVuZXJgIHRvIGdldCBtZXNzYWdlcyBmcm9tIG90aGVyIGtpbmRzCitvZiBxdWV1ZXMsIGZvciBleGFtcGxlIGEgWmVyb01RICdzdWJzY3JpYmUnIHNvY2tldC4gSGVyZSdzIGFuIGV4YW1wbGU6OgorCisgICAgY2xhc3MgWmVyb01RU29ja2V0TGlzdGVuZXIoUXVldWVMaXN0ZW5lcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmksICpoYW5kbGVycywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc2VsZi5jdHggPSBrd2FyZ3MuZ2V0KCdjdHgnKSBvciB6bXEuQ29udGV4dCgpCisgICAgICAgICAgICBzb2NrZXQgPSB6bXEuU29ja2V0KHNlbGYuY3R4LCB6bXEuU1VCKQorICAgICAgICAgICAgc29ja2V0LnNldHNvY2tvcHQoem1xLlNVQlNDUklCRSwgJycpICMgc3Vic2NyaWJlIHRvIGV2ZXJ5dGhpbmcKKyAgICAgICAgICAgIHNvY2tldC5jb25uZWN0KHVyaSkKKworICAgICAgICBkZWYgZGVxdWV1ZShzZWxmKToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYucXVldWUucmVjdigpCisgICAgICAgICAgICByZXR1cm4gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKGpzb24ubG9hZHMobXNnKSkKKworCisuLiBzZWVhbHNvOjoKKworICAgTW9kdWxlIDptb2Q6YGxvZ2dpbmdgCisgICAgICBBUEkgcmVmZXJlbmNlIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKyAgIE1vZHVsZSA6bW9kOmBsb2dnaW5nLmNvbmZpZ2AKKyAgICAgIENvbmZpZ3VyYXRpb24gQVBJIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKyAgIE1vZHVsZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAorICAgICAgVXNlZnVsIGhhbmRsZXJzIGluY2x1ZGVkIHdpdGggdGhlIGxvZ2dpbmcgbW9kdWxlLgorCisgICA6cmVmOmBBIGJhc2ljIGxvZ2dpbmcgdHV0b3JpYWwgPGxvZ2dpbmctYmFzaWMtdHV0b3JpYWw+YAorCisgICA6cmVmOmBBIG1vcmUgYWR2YW5jZWQgbG9nZ2luZyB0dXRvcmlhbCA8bG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbD5gCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkNjAyNAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtMCwwICsxLDEwMjYgQEAKKz09PT09PT09PT09PT0KK0xvZ2dpbmcgSE9XVE8KKz09PT09PT09PT09PT0KKworOkF1dGhvcjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwIGF0IHJlZC1kb3ZlIGRvdCBjb20+CisKKy4uIF9sb2dnaW5nLWJhc2ljLXR1dG9yaWFsOgorCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZworCitCYXNpYyBMb2dnaW5nIFR1dG9yaWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xvZ2dpbmcgaXMgYSBtZWFucyBvZiB0cmFja2luZyBldmVudHMgdGhhdCBoYXBwZW4gd2hlbiBzb21lIHNvZnR3YXJlIHJ1bnMuIFRoZQorc29mdHdhcmUncyBkZXZlbG9wZXIgYWRkcyBsb2dnaW5nIGNhbGxzIHRvIHRoZWlyIGNvZGUgdG8gaW5kaWNhdGUgdGhhdCBjZXJ0YWluCitldmVudHMgaGF2ZSBvY2N1cnJlZC4gQW4gZXZlbnQgaXMgZGVzY3JpYmVkIGJ5IGEgZGVzY3JpcHRpdmUgbWVzc2FnZSB3aGljaCBjYW4KK29wdGlvbmFsbHkgY29udGFpbiB2YXJpYWJsZSBkYXRhIChpLmUuIGRhdGEgdGhhdCBpcyBwb3RlbnRpYWxseSBkaWZmZXJlbnQgZm9yCitlYWNoIG9jY3VycmVuY2Ugb2YgdGhlIGV2ZW50KS4gRXZlbnRzIGFsc28gaGF2ZSBhbiBpbXBvcnRhbmNlIHdoaWNoIHRoZQorZGV2ZWxvcGVyIGFzY3JpYmVzIHRvIHRoZSBldmVudDsgdGhlIGltcG9ydGFuY2UgY2FuIGFsc28gYmUgY2FsbGVkIHRoZSAqbGV2ZWwqCitvciAqc2V2ZXJpdHkqLgorCitXaGVuIHRvIHVzZSBsb2dnaW5nCiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK0xvZ2dpbmcgcHJvdmlkZXMgYSBzZXQgb2YgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBzaW1wbGUgbG9nZ2luZyB1c2FnZS4gVGhlc2UKK2FyZSA6ZnVuYzpgZGVidWdgLCA6ZnVuYzpgaW5mb2AsIDpmdW5jOmB3YXJuaW5nYCwgOmZ1bmM6YGVycm9yYCBhbmQKKzpmdW5jOmBjcml0aWNhbGAuIFRvIGRldGVybWluZSB3aGVuIHRvIHVzZSBsb2dnaW5nLCBzZWUgdGhlIHRhYmxlIGJlbG93LCB3aGljaAorc3RhdGVzLCBmb3IgZWFjaCBvZiBhIHNldCBvZiBjb21tb24gdGFza3MsIHRoZSBiZXN0IHRvb2wgdG8gdXNlIGZvciBpdC4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFRhc2sgeW91IHdhbnQgdG8gcGVyZm9ybSAgICAgICAgICAgIHwgVGhlIGJlc3QgdG9vbCBmb3IgdGhlIHRhc2sgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBEaXNwbGF5IGNvbnNvbGUgb3V0cHV0IGZvciBvcmRpbmFyeSB8IDpmdW5jOmBwcmludGAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IHVzYWdlIG9mIGEgY29tbWFuZCBsaW5lIHNjcmlwdCBvciAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJlcG9ydCBldmVudHMgdGhhdCBvY2N1ciBkdXJpbmcgICAgIHwgOmZ1bmM6YGxvZ2dpbmcuaW5mb2AgKG9yICAgICAgICAgICAgIHwKK3wgbm9ybWFsIG9wZXJhdGlvbiBvZiBhIHByb2dyYW0gKGUuZy4gfCA6ZnVuYzpgbG9nZ2luZy5kZWJ1Z2AgZm9yIHZlcnkgICAgICAgfAorfCBmb3Igc3RhdHVzIG1vbml0b3Jpbmcgb3IgZmF1bHQgICAgICB8IGRldGFpbGVkIG91dHB1dCBmb3IgZGlhZ25vc3RpYyAgICAgICB8Cit8IGludmVzdGlnYXRpb24pICAgICAgICAgICAgICAgICAgICAgIHwgcHVycG9zZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBJc3N1ZSBhIHdhcm5pbmcgcmVnYXJkaW5nIGEgICAgICAgICB8IDpmdW5jOmB3YXJuaW5ncy53YXJuYCBpbiBsaWJyYXJ5ICAgICB8Cit8IHBhcnRpY3VsYXIgcnVudGltZSBldmVudCAgICAgICAgICAgIHwgY29kZSBpZiB0aGUgaXNzdWUgaXMgYXZvaWRhYmxlIGFuZCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGUgY2xpZW50IGFwcGxpY2F0aW9uIHNob3VsZCBiZSAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vZGlmaWVkIHRvIGVsaW1pbmF0ZSB0aGUgd2FybmluZyAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgbG9nZ2luZy53YXJuaW5nYCBpZiB0aGVyZSBpcyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5vdGhpbmcgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiBjYW4gZG98Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWJvdXQgdGhlIHNpdHVhdGlvbiwgYnV0IHRoZSBldmVudCAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzaG91bGQgc3RpbGwgYmUgbm90ZWQgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJlcG9ydCBhbiBlcnJvciByZWdhcmRpbmcgYSAgICAgICAgIHwgUmFpc2UgYW4gZXhjZXB0aW9uICAgICAgICAgICAgICAgICAgIHwKK3wgcGFydGljdWxhciBydW50aW1lIGV2ZW50ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFJlcG9ydCBzdXBwcmVzc2lvbiBvZiBhbiBlcnJvciAgICAgIHwgOmZ1bmM6YGxvZ2dpbmcuZXJyb3JgLCAgICAgICAgICAgICAgIHwKK3wgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbiAoZS5nLiAgfCA6ZnVuYzpgbG9nZ2luZy5leGNlcHRpb25gIG9yICAgICAgICAgfAorfCBlcnJvciBoYW5kbGVyIGluIGEgbG9uZy1ydW5uaW5nICAgICB8IDpmdW5jOmBsb2dnaW5nLmNyaXRpY2FsYCBhcyAgICAgICAgICB8Cit8IHNlcnZlciBwcm9jZXNzKSAgICAgICAgICAgICAgICAgICAgIHwgYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpYyBlcnJvciAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgYXBwbGljYXRpb24gZG9tYWluICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBsb2dnaW5nIGZ1bmN0aW9ucyBhcmUgbmFtZWQgYWZ0ZXIgdGhlIGxldmVsIG9yIHNldmVyaXR5IG9mIHRoZSBldmVudHMKK3RoZXkgYXJlIHVzZWQgdG8gdHJhY2suIFRoZSBzdGFuZGFyZCBsZXZlbHMgYW5kIHRoZWlyIGFwcGxpY2FiaWxpdHkgYXJlCitkZXNjcmliZWQgYmVsb3cgKGluIGluY3JlYXNpbmcgb3JkZXIgb2Ygc2V2ZXJpdHkpOgorCisrLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBMZXZlbCAgICAgICAgfCBXaGVuIGl0J3MgdXNlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IGBgREVCVUdgYCAgICB8IERldGFpbGVkIGluZm9ybWF0aW9uLCB0eXBpY2FsbHkgb2YgaW50ZXJlc3QgfAorfCAgICAgICAgICAgICAgfCBvbmx5IHdoZW4gZGlhZ25vc2luZyBwcm9ibGVtcy4gICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgSU5GT2BgICAgICB8IENvbmZpcm1hdGlvbiB0aGF0IHRoaW5ncyBhcmUgd29ya2luZyBhcyAgICAgfAorfCAgICAgICAgICAgICAgfCBleHBlY3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgV0FSTklOR2BgICB8IEFuIGluZGljYXRpb24gdGhhdCBzb21ldGhpbmcgdW5leHBlY3RlZCAgICAgfAorfCAgICAgICAgICAgICAgfCBoYXBwZW5lZCwgb3IgaW5kaWNhdGl2ZSBvZiBzb21lIHByb2JsZW0gaW4gIHwKK3wgICAgICAgICAgICAgIHwgdGhlIG5lYXIgZnV0dXJlIChlLmcuICdkaXNrIHNwYWNlIGxvdycpLiAgICB8Cit8ICAgICAgICAgICAgICB8IFRoZSBzb2Z0d2FyZSBpcyBzdGlsbCB3b3JraW5nIGFzIGV4cGVjdGVkLiAgfAorKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBFUlJPUmBgICAgIHwgRHVlIHRvIGEgbW9yZSBzZXJpb3VzIHByb2JsZW0sIHRoZSBzb2Z0d2FyZSB8Cit8ICAgICAgICAgICAgICB8IGhhcyBub3QgYmVlbiBhYmxlIHRvIHBlcmZvcm0gc29tZSBmdW5jdGlvbi4gfAorKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBDUklUSUNBTGBgIHwgQSBzZXJpb3VzIGVycm9yLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHByb2dyYW18Cit8ICAgICAgICAgICAgICB8IGl0c2VsZiBtYXkgYmUgdW5hYmxlIHRvIGNvbnRpbnVlIHJ1bm5pbmcuICAgfAorKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworVGhlIGRlZmF1bHQgbGV2ZWwgaXMgYGBXQVJOSU5HYGAsIHdoaWNoIG1lYW5zIHRoYXQgb25seSBldmVudHMgb2YgdGhpcyBsZXZlbAorYW5kIGFib3ZlIHdpbGwgYmUgdHJhY2tlZCwgdW5sZXNzIHRoZSBsb2dnaW5nIHBhY2thZ2UgaXMgY29uZmlndXJlZCB0byBkbworb3RoZXJ3aXNlLgorCitFdmVudHMgdGhhdCBhcmUgdHJhY2tlZCBjYW4gYmUgaGFuZGxlZCBpbiBkaWZmZXJlbnQgd2F5cy4gVGhlIHNpbXBsZXN0IHdheSBvZgoraGFuZGxpbmcgdHJhY2tlZCBldmVudHMgaXMgdG8gcHJpbnQgdGhlbSB0byB0aGUgY29uc29sZS4gQW5vdGhlciBjb21tb24gd2F5CitpcyB0byB3cml0ZSB0aGVtIHRvIGEgZGlzayBmaWxlLgorCisKKy4uIF9ob3d0by1taW5pbWFsLWV4YW1wbGU6CisKK0Egc2ltcGxlIGV4YW1wbGUKK15eXl5eXl5eXl5eXl5eXl4KKworQSB2ZXJ5IHNpbXBsZSBleGFtcGxlIGlzOjoKKworICAgaW1wb3J0IGxvZ2dpbmcKKyAgIGxvZ2dpbmcud2FybmluZygnV2F0Y2ggb3V0IScpICMgd2lsbCBwcmludCBhIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUKKyAgIGxvZ2dpbmcuaW5mbygnSSB0b2xkIHlvdSBzbycpICMgd2lsbCBub3QgcHJpbnQgYW55dGhpbmcKKworSWYgeW91IHR5cGUgdGhlc2UgbGluZXMgaW50byBhIHNjcmlwdCBhbmQgcnVuIGl0LCB5b3UnbGwgc2VlOjoKKworICAgV0FSTklORzpyb290OldhdGNoIG91dCEKKworcHJpbnRlZCBvdXQgb24gdGhlIGNvbnNvbGUuIFRoZSBgYElORk9gYCBtZXNzYWdlIGRvZXNuJ3QgYXBwZWFyIGJlY2F1c2UgdGhlCitkZWZhdWx0IGxldmVsIGlzIGBgV0FSTklOR2BgLiBUaGUgcHJpbnRlZCBtZXNzYWdlIGluY2x1ZGVzIHRoZSBpbmRpY2F0aW9uIG9mCit0aGUgbGV2ZWwgYW5kIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQgcHJvdmlkZWQgaW4gdGhlIGxvZ2dpbmcgY2FsbCwgaS5lLgorJ1dhdGNoIG91dCEnLiBEb24ndCB3b3JyeSBhYm91dCB0aGUgJ3Jvb3QnIHBhcnQgZm9yIG5vdzogaXQgd2lsbCBiZSBleHBsYWluZWQKK2xhdGVyLiBUaGUgYWN0dWFsIG91dHB1dCBjYW4gYmUgZm9ybWF0dGVkIHF1aXRlIGZsZXhpYmx5IGlmIHlvdSBuZWVkIHRoYXQ7Citmb3JtYXR0aW5nIG9wdGlvbnMgd2lsbCBhbHNvIGJlIGV4cGxhaW5lZCBsYXRlci4KKworCitMb2dnaW5nIHRvIGEgZmlsZQorXl5eXl5eXl5eXl5eXl5eXl4KKworQSB2ZXJ5IGNvbW1vbiBzaXR1YXRpb24gaXMgdGhhdCBvZiByZWNvcmRpbmcgbG9nZ2luZyBldmVudHMgaW4gYSBmaWxlLCBzbyBsZXQncworbG9vayBhdCB0aGF0IG5leHQ6OgorCisgICBpbXBvcnQgbG9nZ2luZworICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nZXhhbXBsZS5sb2cnLGxldmVsPWxvZ2dpbmcuREVCVUcpCisgICBsb2dnaW5nLmRlYnVnKCdUaGlzIG1lc3NhZ2Ugc2hvdWxkIGdvIHRvIHRoZSBsb2cgZmlsZScpCisgICBsb2dnaW5nLmluZm8oJ1NvIHNob3VsZCB0aGlzJykKKyAgIGxvZ2dpbmcud2FybmluZygnQW5kIHRoaXMsIHRvbycpCisKK0FuZCBub3cgaWYgd2Ugb3BlbiB0aGUgZmlsZSBhbmQgbG9vayBhdCB3aGF0IHdlIGhhdmUsIHdlIHNob3VsZCBmaW5kIHRoZSBsb2cKK21lc3NhZ2VzOjoKKworICAgREVCVUc6cm9vdDpUaGlzIG1lc3NhZ2Ugc2hvdWxkIGdvIHRvIHRoZSBsb2cgZmlsZQorICAgSU5GTzpyb290OlNvIHNob3VsZCB0aGlzCisgICBXQVJOSU5HOnJvb3Q6QW5kIHRoaXMsIHRvbworCitUaGlzIGV4YW1wbGUgYWxzbyBzaG93cyBob3cgeW91IGNhbiBzZXQgdGhlIGxvZ2dpbmcgbGV2ZWwgd2hpY2ggYWN0cyBhcyB0aGUKK3RocmVzaG9sZCBmb3IgdHJhY2tpbmcuIEluIHRoaXMgY2FzZSwgYmVjYXVzZSB3ZSBzZXQgdGhlIHRocmVzaG9sZCB0bworYGBERUJVR2BgLCBhbGwgb2YgdGhlIG1lc3NhZ2VzIHdlcmUgcHJpbnRlZC4KKworSWYgeW91IHdhbnQgdG8gc2V0IHRoZSBsb2dnaW5nIGxldmVsIGZyb20gYSBjb21tYW5kLWxpbmUgb3B0aW9uIHN1Y2ggYXM6OgorCisgICAtLWxvZz1JTkZPCisKK2FuZCB5b3UgaGF2ZSB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBwYXNzZWQgZm9yIGBgLS1sb2dgYCBpbiBzb21lIHZhcmlhYmxlCisqbG9nbGV2ZWwqLCB5b3UgY2FuIHVzZTo6CisKKyAgIGdldGF0dHIobG9nZ2luZywgbG9nbGV2ZWwudXBwZXIoKSkKKwordG8gZ2V0IHRoZSB2YWx1ZSB3aGljaCB5b3UnbGwgcGFzcyB0byA6ZnVuYzpgYmFzaWNDb25maWdgIHZpYSB0aGUgKmxldmVsKgorYXJndW1lbnQuIFlvdSBtYXkgd2FudCB0byBlcnJvciBjaGVjayBhbnkgdXNlciBpbnB1dCB2YWx1ZSwgcGVyaGFwcyBhcyBpbiB0aGUKK2ZvbGxvd2luZyBleGFtcGxlOjoKKworICAgIyBhc3N1bWluZyBsb2dsZXZlbCBpcyBib3VuZCB0byB0aGUgc3RyaW5nIHZhbHVlIG9idGFpbmVkIGZyb20gdGhlCisgICAjIGNvbW1hbmQgbGluZSBhcmd1bWVudC4gQ29udmVydCB0byB1cHBlciBjYXNlIHRvIGFsbG93IHRoZSB1c2VyIHRvCisgICAjIHNwZWNpZnkgLS1sb2c9REVCVUcgb3IgLS1sb2c9ZGVidWcKKyAgIG51bWVyaWNfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ2xldmVsLnVwcGVyKCksIE5vbmUpCisgICBpZiBub3QgaXNpbnN0YW5jZShudW1lcmljX2xldmVsLCBpbnQpOgorICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgbG9nIGxldmVsOiAlcycgJSBsb2dsZXZlbCkKKyAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bnVtZXJpY19sZXZlbCwgLi4uKQorCitUaGUgY2FsbCB0byA6ZnVuYzpgYmFzaWNDb25maWdgIHNob3VsZCBjb21lICpiZWZvcmUqIGFueSBjYWxscyB0byA6ZnVuYzpgZGVidWdgLAorOmZ1bmM6YGluZm9gIGV0Yy4gQXMgaXQncyBpbnRlbmRlZCBhcyBhIG9uZS1vZmYgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZmFjaWxpdHksCitvbmx5IHRoZSBmaXJzdCBjYWxsIHdpbGwgYWN0dWFsbHkgZG8gYW55dGhpbmc6IHN1YnNlcXVlbnQgY2FsbHMgYXJlIGVmZmVjdGl2ZWx5Cituby1vcHMuCisKK0lmIHlvdSBydW4gdGhlIGFib3ZlIHNjcmlwdCBzZXZlcmFsIHRpbWVzLCB0aGUgbWVzc2FnZXMgZnJvbSBzdWNjZXNzaXZlIHJ1bnMKK2FyZSBhcHBlbmRlZCB0byB0aGUgZmlsZSAqZXhhbXBsZS5sb2cqLiBJZiB5b3Ugd2FudCBlYWNoIHJ1biB0byBzdGFydCBhZnJlc2gsCitub3QgcmVtZW1iZXJpbmcgdGhlIG1lc3NhZ2VzIGZyb20gZWFybGllciBydW5zLCB5b3UgY2FuIHNwZWNpZnkgdGhlICpmaWxlbW9kZSoKK2FyZ3VtZW50LCBieSBjaGFuZ2luZyB0aGUgY2FsbCBpbiB0aGUgYWJvdmUgZXhhbXBsZSB0bzo6CisKKyAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J2V4YW1wbGUubG9nJywgZmlsZW1vZGU9J3cnLCBsZXZlbD1sb2dnaW5nLkRFQlVHKQorCitUaGUgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXMgYmVmb3JlLCBidXQgdGhlIGxvZyBmaWxlIGlzIG5vIGxvbmdlciBhcHBlbmRlZAordG8sIHNvIHRoZSBtZXNzYWdlcyBmcm9tIGVhcmxpZXIgcnVucyBhcmUgbG9zdC4KKworCitMb2dnaW5nIGZyb20gbXVsdGlwbGUgbW9kdWxlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworSWYgeW91ciBwcm9ncmFtIGNvbnNpc3RzIG9mIG11bHRpcGxlIG1vZHVsZXMsIGhlcmUncyBhbiBleGFtcGxlIG9mIGhvdyB5b3UKK2NvdWxkIG9yZ2FuaXplIGxvZ2dpbmcgaW4gaXQ6OgorCisgICAjIG15YXBwLnB5CisgICBpbXBvcnQgbG9nZ2luZworICAgaW1wb3J0IG15bGliCisKKyAgIGRlZiBtYWluKCk6CisgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT0nbXlhcHAubG9nJywgbGV2ZWw9bG9nZ2luZy5JTkZPKQorICAgICAgIGxvZ2dpbmcuaW5mbygnU3RhcnRlZCcpCisgICAgICAgbXlsaWIuZG9fc29tZXRoaW5nKCkKKyAgICAgICBsb2dnaW5nLmluZm8oJ0ZpbmlzaGVkJykKKworICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICBtYWluKCkKKworOjoKKworICAgIyBteWxpYi5weQorICAgaW1wb3J0IGxvZ2dpbmcKKworICAgZGVmIGRvX3NvbWV0aGluZygpOgorICAgICAgIGxvZ2dpbmcuaW5mbygnRG9pbmcgc29tZXRoaW5nJykKKworSWYgeW91IHJ1biAqbXlhcHAucHkqLCB5b3Ugc2hvdWxkIHNlZSB0aGlzIGluICpteWFwcC5sb2cqOjoKKworICAgSU5GTzpyb290OlN0YXJ0ZWQKKyAgIElORk86cm9vdDpEb2luZyBzb21ldGhpbmcKKyAgIElORk86cm9vdDpGaW5pc2hlZAorCit3aGljaCBpcyBob3BlZnVsbHkgd2hhdCB5b3Ugd2VyZSBleHBlY3RpbmcgdG8gc2VlLiBZb3UgY2FuIGdlbmVyYWxpemUgdGhpcyB0bworbXVsdGlwbGUgbW9kdWxlcywgdXNpbmcgdGhlIHBhdHRlcm4gaW4gKm15bGliLnB5Ki4gTm90ZSB0aGF0IGZvciB0aGlzIHNpbXBsZQordXNhZ2UgcGF0dGVybiwgeW91IHdvbid0IGtub3csIGJ5IGxvb2tpbmcgaW4gdGhlIGxvZyBmaWxlLCAqd2hlcmUqIGluIHlvdXIKK2FwcGxpY2F0aW9uIHlvdXIgbWVzc2FnZXMgY2FtZSBmcm9tLCBhcGFydCBmcm9tIGxvb2tpbmcgYXQgdGhlIGV2ZW50CitkZXNjcmlwdGlvbi4gSWYgeW91IHdhbnQgdG8gdHJhY2sgdGhlIGxvY2F0aW9uIG9mIHlvdXIgbWVzc2FnZXMsIHlvdSdsbCBuZWVkCit0byByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBiZXlvbmQgdGhlIHR1dG9yaWFsIGxldmVsIC0tIHNlZQorOnJlZjpgbG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbGAuCisKKworTG9nZ2luZyB2YXJpYWJsZSBkYXRhCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVG8gbG9nIHZhcmlhYmxlIGRhdGEsIHVzZSBhIGZvcm1hdCBzdHJpbmcgZm9yIHRoZSBldmVudCBkZXNjcmlwdGlvbiBtZXNzYWdlIGFuZAorYXBwZW5kIHRoZSB2YXJpYWJsZSBkYXRhIGFzIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGU6OgorCisgICBpbXBvcnQgbG9nZ2luZworICAgbG9nZ2luZy53YXJuaW5nKCclcyBiZWZvcmUgeW91ICVzJywgJ0xvb2snLCAnbGVhcCEnKQorCit3aWxsIGRpc3BsYXk6OgorCisgICBXQVJOSU5HOnJvb3Q6TG9vayBiZWZvcmUgeW91IGxlYXAhCisKK0FzIHlvdSBjYW4gc2VlLCBtZXJnaW5nIG9mIHZhcmlhYmxlIGRhdGEgaW50byB0aGUgZXZlbnQgZGVzY3JpcHRpb24gbWVzc2FnZQordXNlcyB0aGUgb2xkLCAlLXN0eWxlIG9mIHN0cmluZyBmb3JtYXR0aW5nLiBUaGlzIGlzIGZvciBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHk6IHRoZSBsb2dnaW5nIHBhY2thZ2UgcHJlLWRhdGVzIG5ld2VyIGZvcm1hdHRpbmcgb3B0aW9ucyBzdWNoIGFzCis6bWV0aDpgc3RyLmZvcm1hdGAgYW5kIDpjbGFzczpgc3RyaW5nLlRlbXBsYXRlYC4gVGhlc2UgbmV3ZXIgZm9ybWF0dGluZworb3B0aW9ucyAqYXJlKiBzdXBwb3J0ZWQsIGJ1dCBleHBsb3JpbmcgdGhlbSBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzCit0dXRvcmlhbC4KKworCitDaGFuZ2luZyB0aGUgZm9ybWF0IG9mIGRpc3BsYXllZCBtZXNzYWdlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVG8gY2hhbmdlIHRoZSBmb3JtYXQgd2hpY2ggaXMgdXNlZCB0byBkaXNwbGF5IG1lc3NhZ2VzLCB5b3UgbmVlZCB0bworc3BlY2lmeSB0aGUgZm9ybWF0IHlvdSB3YW50IHRvIHVzZTo6CisKKyAgIGltcG9ydCBsb2dnaW5nCisgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczolKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuREVCVUcpCisgICBsb2dnaW5nLmRlYnVnKCdUaGlzIG1lc3NhZ2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgY29uc29sZScpCisgICBsb2dnaW5nLmluZm8oJ1NvIHNob3VsZCB0aGlzJykKKyAgIGxvZ2dpbmcud2FybmluZygnQW5kIHRoaXMsIHRvbycpCisKK3doaWNoIHdvdWxkIHByaW50OjoKKworICAgREVCVUc6VGhpcyBtZXNzYWdlIHNob3VsZCBhcHBlYXIgb24gdGhlIGNvbnNvbGUKKyAgIElORk86U28gc2hvdWxkIHRoaXMKKyAgIFdBUk5JTkc6QW5kIHRoaXMsIHRvbworCitOb3RpY2UgdGhhdCB0aGUgJ3Jvb3QnIHdoaWNoIGFwcGVhcmVkIGluIGVhcmxpZXIgZXhhbXBsZXMgaGFzIGRpc2FwcGVhcmVkLiBGb3IKK2EgZnVsbCBzZXQgb2YgdGhpbmdzIHRoYXQgY2FuIGFwcGVhciBpbiBmb3JtYXQgc3RyaW5ncywgeW91IGNhbiByZWZlciB0byB0aGUKK2RvY3VtZW50YXRpb24gZm9yIDpyZWY6YGxvZ3JlY29yZC1hdHRyaWJ1dGVzYCwgYnV0IGZvciBzaW1wbGUgdXNhZ2UsIHlvdSBqdXN0CituZWVkIHRoZSAqbGV2ZWxuYW1lKiAoc2V2ZXJpdHkpLCAqbWVzc2FnZSogKGV2ZW50IGRlc2NyaXB0aW9uLCBpbmNsdWRpbmcKK3ZhcmlhYmxlIGRhdGEpIGFuZCBwZXJoYXBzIHRvIGRpc3BsYXkgd2hlbiB0aGUgZXZlbnQgb2NjdXJyZWQuIFRoaXMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLgorCisKK0Rpc3BsYXlpbmcgdGhlIGRhdGUvdGltZSBpbiBtZXNzYWdlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RvIGRpc3BsYXkgdGhlIGRhdGUgYW5kIHRpbWUgb2YgYW4gZXZlbnQsIHlvdSB3b3VsZCBwbGFjZSAnJShhc2N0aW1lKXMnIGluCit5b3VyIGZvcm1hdCBzdHJpbmc6OgorCisgICBpbXBvcnQgbG9nZ2luZworICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUoYXNjdGltZSlzICUobWVzc2FnZSlzJykKKyAgIGxvZ2dpbmcud2FybmluZygnaXMgd2hlbiB0aGlzIGV2ZW50IHdhcyBsb2dnZWQuJykKKword2hpY2ggc2hvdWxkIHByaW50IHNvbWV0aGluZyBsaWtlIHRoaXM6OgorCisgICAyMDEwLTEyLTEyIDExOjQxOjQyLDYxMiBpcyB3aGVuIHRoaXMgZXZlbnQgd2FzIGxvZ2dlZC4KKworVGhlIGRlZmF1bHQgZm9ybWF0IGZvciBkYXRlL3RpbWUgZGlzcGxheSAoc2hvd24gYWJvdmUpIGlzIElTTzg2MDEuIElmIHlvdSBuZWVkCittb3JlIGNvbnRyb2wgb3ZlciB0aGUgZm9ybWF0dGluZyBvZiB0aGUgZGF0ZS90aW1lLCBwcm92aWRlIGEgKmRhdGVmbXQqCithcmd1bWVudCB0byBgYGJhc2ljQ29uZmlnYGAsIGFzIGluIHRoaXMgZXhhbXBsZTo6CisKKyAgIGltcG9ydCBsb2dnaW5nCisgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShhc2N0aW1lKXMgJShtZXNzYWdlKXMnLCBkYXRlZm10PSclbS8lZC8lWSAlSTolTTolUyAlcCcpCisgICBsb2dnaW5nLndhcm5pbmcoJ2lzIHdoZW4gdGhpcyBldmVudCB3YXMgbG9nZ2VkLicpCisKK3doaWNoIHdvdWxkIGRpc3BsYXkgc29tZXRoaW5nIGxpa2UgdGhpczo6CisKKyAgIDEyLzEyLzIwMTAgMTE6NDY6MzYgQU0gaXMgd2hlbiB0aGlzIGV2ZW50IHdhcyBsb2dnZWQuCisKK1RoZSBmb3JtYXQgb2YgdGhlICpkYXRlZm10KiBhcmd1bWVudCBpcyB0aGUgc2FtZSBhcyBzdXBwb3J0ZWQgYnkKKzpmdW5jOmB0aW1lLnN0cmZ0aW1lYC4KKworCitOZXh0IFN0ZXBzCiteXl5eXl5eXl5eCisKK1RoYXQgY29uY2x1ZGVzIHRoZSBiYXNpYyB0dXRvcmlhbC4gSXQgc2hvdWxkIGJlIGVub3VnaCB0byBnZXQgeW91IHVwIGFuZAorcnVubmluZyB3aXRoIGxvZ2dpbmcuIFRoZXJlJ3MgYSBsb3QgbW9yZSB0aGF0IHRoZSBsb2dnaW5nIHBhY2thZ2Ugb2ZmZXJzLCBidXQKK3RvIGdldCB0aGUgYmVzdCBvdXQgb2YgaXQsIHlvdSdsbCBuZWVkIHRvIGludmVzdCBhIGxpdHRsZSBtb3JlIG9mIHlvdXIgdGltZSBpbgorcmVhZGluZyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLiBJZiB5b3UncmUgcmVhZHkgZm9yIHRoYXQsIGdyYWIgc29tZSBvZiB5b3VyCitmYXZvdXJpdGUgYmV2ZXJhZ2UgYW5kIGNhcnJ5IG9uLgorCitJZiB5b3VyIGxvZ2dpbmcgbmVlZHMgYXJlIHNpbXBsZSwgdGhlbiB1c2UgdGhlIGFib3ZlIGV4YW1wbGVzIHRvIGluY29ycG9yYXRlCitsb2dnaW5nIGludG8geW91ciBvd24gc2NyaXB0cywgYW5kIGlmIHlvdSBydW4gaW50byBwcm9ibGVtcyBvciBkb24ndAordW5kZXJzdGFuZCBzb21ldGhpbmcsIHBsZWFzZSBwb3N0IGEgcXVlc3Rpb24gb24gdGhlIGNvbXAubGFuZy5weXRob24gVXNlbmV0Citncm91cCAoYXZhaWxhYmxlIGF0IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb21wLmxhbmcucHl0aG9uKSBhbmQgeW91CitzaG91bGQgcmVjZWl2ZSBoZWxwIGJlZm9yZSB0b28gbG9uZy4KKworU3RpbGwgaGVyZT8gWW91IGNhbiBjYXJyeSBvbiByZWFkaW5nIHRoZSBuZXh0IGZldyBzZWN0aW9ucywgd2hpY2ggcHJvdmlkZSBhCitzbGlnaHRseSBtb3JlIGFkdmFuY2VkL2luLWRlcHRoIHR1dG9yaWFsIHRoYW4gdGhlIGJhc2ljIG9uZSBhYm92ZS4gQWZ0ZXIgdGhhdCwKK3lvdSBjYW4gdGFrZSBhIGxvb2sgYXQgdGhlIDpyZWY6YGxvZ2dpbmctY29va2Jvb2tgLgorCisuLiBfbG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbDoKKworCitBZHZhbmNlZCBMb2dnaW5nIFR1dG9yaWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsb2dnaW5nIGxpYnJhcnkgdGFrZXMgYSBtb2R1bGFyIGFwcHJvYWNoIGFuZCBvZmZlcnMgc2V2ZXJhbCBjYXRlZ29yaWVzCitvZiBjb21wb25lbnRzOiBsb2dnZXJzLCBoYW5kbGVycywgZmlsdGVycywgYW5kIGZvcm1hdHRlcnMuCisKKyogTG9nZ2VycyBleHBvc2UgdGhlIGludGVyZmFjZSB0aGF0IGFwcGxpY2F0aW9uIGNvZGUgZGlyZWN0bHkgdXNlcy4KKyogSGFuZGxlcnMgc2VuZCB0aGUgbG9nIHJlY29yZHMgKGNyZWF0ZWQgYnkgbG9nZ2VycykgdG8gdGhlIGFwcHJvcHJpYXRlCisgIGRlc3RpbmF0aW9uLgorKiBGaWx0ZXJzIHByb3ZpZGUgYSBmaW5lciBncmFpbmVkIGZhY2lsaXR5IGZvciBkZXRlcm1pbmluZyB3aGljaCBsb2cgcmVjb3JkcworICB0byBvdXRwdXQuCisqIEZvcm1hdHRlcnMgc3BlY2lmeSB0aGUgbGF5b3V0IG9mIGxvZyByZWNvcmRzIGluIHRoZSBmaW5hbCBvdXRwdXQuCisKK0xvZ2dpbmcgaXMgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiBpbnN0YW5jZXMgb2YgdGhlIDpjbGFzczpgTG9nZ2VyYAorY2xhc3MgKGhlcmVhZnRlciBjYWxsZWQgOmRmbjpgbG9nZ2Vyc2ApLiBFYWNoIGluc3RhbmNlIGhhcyBhIG5hbWUsIGFuZCB0aGV5IGFyZQorY29uY2VwdHVhbGx5IGFycmFuZ2VkIGluIGEgbmFtZXNwYWNlIGhpZXJhcmNoeSB1c2luZyBkb3RzIChwZXJpb2RzKSBhcworc2VwYXJhdG9ycy4gRm9yIGV4YW1wbGUsIGEgbG9nZ2VyIG5hbWVkICdzY2FuJyBpcyB0aGUgcGFyZW50IG9mIGxvZ2dlcnMKKydzY2FuLnRleHQnLCAnc2Nhbi5odG1sJyBhbmQgJ3NjYW4ucGRmJy4gTG9nZ2VyIG5hbWVzIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudCwKK2FuZCBpbmRpY2F0ZSB0aGUgYXJlYSBvZiBhbiBhcHBsaWNhdGlvbiBpbiB3aGljaCBhIGxvZ2dlZCBtZXNzYWdlIG9yaWdpbmF0ZXMuCisKK0EgZ29vZCBjb252ZW50aW9uIHRvIHVzZSB3aGVuIG5hbWluZyBsb2dnZXJzIGlzIHRvIHVzZSBhIG1vZHVsZS1sZXZlbCBsb2dnZXIsCitpbiBlYWNoIG1vZHVsZSB3aGljaCB1c2VzIGxvZ2dpbmcsIG5hbWVkIGFzIGZvbGxvd3M6OgorCisgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworVGhpcyBtZWFucyB0aGF0IGxvZ2dlciBuYW1lcyB0cmFjayB0aGUgcGFja2FnZS9tb2R1bGUgaGllcmFyY2h5LCBhbmQgaXQncworaW50dWl0aXZlbHkgb2J2aW91cyB3aGVyZSBldmVudHMgYXJlIGxvZ2dlZCBqdXN0IGZyb20gdGhlIGxvZ2dlciBuYW1lLgorCitUaGUgcm9vdCBvZiB0aGUgaGllcmFyY2h5IG9mIGxvZ2dlcnMgaXMgY2FsbGVkIHRoZSByb290IGxvZ2dlci4gVGhhdCdzIHRoZQorbG9nZ2VyIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyA6ZnVuYzpgZGVidWdgLCA6ZnVuYzpgaW5mb2AsIDpmdW5jOmB3YXJuaW5nYCwKKzpmdW5jOmBlcnJvcmAgYW5kIDpmdW5jOmBjcml0aWNhbGAsIHdoaWNoIGp1c3QgY2FsbCB0aGUgc2FtZS1uYW1lZCBtZXRob2Qgb2YKK3RoZSByb290IGxvZ2dlci4gVGhlIGZ1bmN0aW9ucyBhbmQgdGhlIG1ldGhvZHMgaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmVzLiBUaGUKK3Jvb3QgbG9nZ2VyJ3MgbmFtZSBpcyBwcmludGVkIGFzICdyb290JyBpbiB0aGUgbG9nZ2VkIG91dHB1dC4KKworSXQgaXMsIG9mIGNvdXJzZSwgcG9zc2libGUgdG8gbG9nIG1lc3NhZ2VzIHRvIGRpZmZlcmVudCBkZXN0aW5hdGlvbnMuIFN1cHBvcnQKK2lzIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdlIGZvciB3cml0aW5nIGxvZyBtZXNzYWdlcyB0byBmaWxlcywgSFRUUCBHRVQvUE9TVAorbG9jYXRpb25zLCBlbWFpbCB2aWEgU01UUCwgZ2VuZXJpYyBzb2NrZXRzLCBxdWV1ZXMsIG9yIE9TLXNwZWNpZmljIGxvZ2dpbmcKK21lY2hhbmlzbXMgc3VjaCBhcyBzeXNsb2cgb3IgdGhlIFdpbmRvd3MgTlQgZXZlbnQgbG9nLiBEZXN0aW5hdGlvbnMgYXJlIHNlcnZlZAorYnkgOmRmbjpgaGFuZGxlcmAgY2xhc3Nlcy4gWW91IGNhbiBjcmVhdGUgeW91ciBvd24gbG9nIGRlc3RpbmF0aW9uIGNsYXNzIGlmCit5b3UgaGF2ZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBub3QgbWV0IGJ5IGFueSBvZiB0aGUgYnVpbHQtaW4gaGFuZGxlciBjbGFzc2VzLgorCitCeSBkZWZhdWx0LCBubyBkZXN0aW5hdGlvbiBpcyBzZXQgZm9yIGFueSBsb2dnaW5nIG1lc3NhZ2VzLiBZb3UgY2FuIHNwZWNpZnkKK2EgZGVzdGluYXRpb24gKHN1Y2ggYXMgY29uc29sZSBvciBmaWxlKSBieSB1c2luZyA6ZnVuYzpgYmFzaWNDb25maWdgIGFzIGluIHRoZQordHV0b3JpYWwgZXhhbXBsZXMuIElmIHlvdSBjYWxsIHRoZSBmdW5jdGlvbnMgIDpmdW5jOmBkZWJ1Z2AsIDpmdW5jOmBpbmZvYCwKKzpmdW5jOmB3YXJuaW5nYCwgOmZ1bmM6YGVycm9yYCBhbmQgOmZ1bmM6YGNyaXRpY2FsYCwgdGhleSB3aWxsIGNoZWNrIHRvIHNlZQoraWYgbm8gZGVzdGluYXRpb24gaXMgc2V0OyBhbmQgaWYgb25lIGlzIG5vdCBzZXQsIHRoZXkgd2lsbCBzZXQgYSBkZXN0aW5hdGlvbgorb2YgdGhlIGNvbnNvbGUgKGBgc3lzLnN0ZGVycmBgKSBhbmQgYSBkZWZhdWx0IGZvcm1hdCBmb3IgdGhlIGRpc3BsYXllZAorbWVzc2FnZSBiZWZvcmUgZGVsZWdhdGluZyB0byB0aGUgcm9vdCBsb2dnZXIgdG8gZG8gdGhlIGFjdHVhbCBtZXNzYWdlIG91dHB1dC4KKworVGhlIGRlZmF1bHQgZm9ybWF0IHNldCBieSA6ZnVuYzpgYmFzaWNDb25maWdgIGZvciBtZXNzYWdlcyBpczo6CisKKyAgIHNldmVyaXR5OmxvZ2dlciBuYW1lOm1lc3NhZ2UKKworWW91IGNhbiBjaGFuZ2UgdGhpcyBieSBwYXNzaW5nIGEgZm9ybWF0IHN0cmluZyB0byA6ZnVuYzpgYmFzaWNDb25maWdgIHdpdGggdGhlCisqZm9ybWF0KiBrZXl3b3JkIGFyZ3VtZW50LiBGb3IgYWxsIG9wdGlvbnMgcmVnYXJkaW5nIGhvdyBhIGZvcm1hdCBzdHJpbmcgaXMKK2NvbnN0cnVjdGVkLCBzZWUgOnJlZjpgZm9ybWF0dGVyLW9iamVjdHNgLgorCisKK0xvZ2dlcnMKK15eXl5eXl4KKworOmNsYXNzOmBMb2dnZXJgIG9iamVjdHMgaGF2ZSBhIHRocmVlZm9sZCBqb2IuICBGaXJzdCwgdGhleSBleHBvc2Ugc2V2ZXJhbAorbWV0aG9kcyB0byBhcHBsaWNhdGlvbiBjb2RlIHNvIHRoYXQgYXBwbGljYXRpb25zIGNhbiBsb2cgbWVzc2FnZXMgYXQgcnVudGltZS4KK1NlY29uZCwgbG9nZ2VyIG9iamVjdHMgZGV0ZXJtaW5lIHdoaWNoIGxvZyBtZXNzYWdlcyB0byBhY3QgdXBvbiBiYXNlZCB1cG9uCitzZXZlcml0eSAodGhlIGRlZmF1bHQgZmlsdGVyaW5nIGZhY2lsaXR5KSBvciBmaWx0ZXIgb2JqZWN0cy4gIFRoaXJkLCBsb2dnZXIKK29iamVjdHMgcGFzcyBhbG9uZyByZWxldmFudCBsb2cgbWVzc2FnZXMgdG8gYWxsIGludGVyZXN0ZWQgbG9nIGhhbmRsZXJzLgorCitUaGUgbW9zdCB3aWRlbHkgdXNlZCBtZXRob2RzIG9uIGxvZ2dlciBvYmplY3RzIGZhbGwgaW50byB0d28gY2F0ZWdvcmllczoKK2NvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2Ugc2VuZGluZy4KKworVGhlc2UgYXJlIHRoZSBtb3N0IGNvbW1vbiBjb25maWd1cmF0aW9uIG1ldGhvZHM6CisKKyogOm1ldGg6YExvZ2dlci5zZXRMZXZlbGAgc3BlY2lmaWVzIHRoZSBsb3dlc3Qtc2V2ZXJpdHkgbG9nIG1lc3NhZ2UgYSBsb2dnZXIKKyAgd2lsbCBoYW5kbGUsIHdoZXJlIGRlYnVnIGlzIHRoZSBsb3dlc3QgYnVpbHQtaW4gc2V2ZXJpdHkgbGV2ZWwgYW5kIGNyaXRpY2FsCisgIGlzIHRoZSBoaWdoZXN0IGJ1aWx0LWluIHNldmVyaXR5LiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzZXZlcml0eSBsZXZlbCBpcworICBJTkZPLCB0aGUgbG9nZ2VyIHdpbGwgaGFuZGxlIG9ubHkgSU5GTywgV0FSTklORywgRVJST1IsIGFuZCBDUklUSUNBTCBtZXNzYWdlcworICBhbmQgd2lsbCBpZ25vcmUgREVCVUcgbWVzc2FnZXMuCisKKyogOm1ldGg6YExvZ2dlci5hZGRIYW5kbGVyYCBhbmQgOm1ldGg6YExvZ2dlci5yZW1vdmVIYW5kbGVyYCBhZGQgYW5kIHJlbW92ZQorICBoYW5kbGVyIG9iamVjdHMgZnJvbSB0aGUgbG9nZ2VyIG9iamVjdC4gIEhhbmRsZXJzIGFyZSBjb3ZlcmVkIGluIG1vcmUgZGV0YWlsCisgIGluIDpyZWY6YGhhbmRsZXItYmFzaWNgLgorCisqIDptZXRoOmBMb2dnZXIuYWRkRmlsdGVyYCBhbmQgOm1ldGg6YExvZ2dlci5yZW1vdmVGaWx0ZXJgIGFkZCBhbmQgcmVtb3ZlIGZpbHRlcgorICBvYmplY3RzIGZyb20gdGhlIGxvZ2dlciBvYmplY3QuICBGaWx0ZXJzIGFyZSBjb3ZlcmVkIGluIG1vcmUgZGV0YWlsIGluCisgIDpyZWY6YGZpbHRlcmAuCisKK1lvdSBkb24ndCBuZWVkIHRvIGFsd2F5cyBjYWxsIHRoZXNlIG1ldGhvZHMgb24gZXZlcnkgbG9nZ2VyIHlvdSBjcmVhdGUuIFNlZSB0aGUKK2xhc3QgdHdvIHBhcmFncmFwaHMgaW4gdGhpcyBzZWN0aW9uLgorCitXaXRoIHRoZSBsb2dnZXIgb2JqZWN0IGNvbmZpZ3VyZWQsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjcmVhdGUgbG9nIG1lc3NhZ2VzOgorCisqIDptZXRoOmBMb2dnZXIuZGVidWdgLCA6bWV0aDpgTG9nZ2VyLmluZm9gLCA6bWV0aDpgTG9nZ2VyLndhcm5pbmdgLAorICA6bWV0aDpgTG9nZ2VyLmVycm9yYCwgYW5kIDptZXRoOmBMb2dnZXIuY3JpdGljYWxgIGFsbCBjcmVhdGUgbG9nIHJlY29yZHMgd2l0aAorICBhIG1lc3NhZ2UgYW5kIGEgbGV2ZWwgdGhhdCBjb3JyZXNwb25kcyB0byB0aGVpciByZXNwZWN0aXZlIG1ldGhvZCBuYW1lcy4gVGhlCisgIG1lc3NhZ2UgaXMgYWN0dWFsbHkgYSBmb3JtYXQgc3RyaW5nLCB3aGljaCBtYXkgY29udGFpbiB0aGUgc3RhbmRhcmQgc3RyaW5nCisgIHN1YnN0aXR1dGlvbiBzeW50YXggb2YgOmNvbnN0OmAlc2AsIDpjb25zdDpgJWRgLCA6Y29uc3Q6YCVmYCwgYW5kIHNvIG9uLiAgVGhlCisgIHJlc3Qgb2YgdGhlaXIgYXJndW1lbnRzIGlzIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgY29ycmVzcG9uZCB3aXRoIHRoZQorICBzdWJzdGl0dXRpb24gZmllbGRzIGluIHRoZSBtZXNzYWdlLiAgV2l0aCByZWdhcmQgdG8gOmNvbnN0OmAqKmt3YXJnc2AsIHRoZQorICBsb2dnaW5nIG1ldGhvZHMgY2FyZSBvbmx5IGFib3V0IGEga2V5d29yZCBvZiA6Y29uc3Q6YGV4Y19pbmZvYCBhbmQgdXNlIGl0IHRvCisgIGRldGVybWluZSB3aGV0aGVyIHRvIGxvZyBleGNlcHRpb24gaW5mb3JtYXRpb24uCisKKyogOm1ldGg6YExvZ2dlci5leGNlcHRpb25gIGNyZWF0ZXMgYSBsb2cgbWVzc2FnZSBzaW1pbGFyIHRvCisgIDptZXRoOmBMb2dnZXIuZXJyb3JgLiAgVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCA6bWV0aDpgTG9nZ2VyLmV4Y2VwdGlvbmAgZHVtcHMgYQorICBzdGFjayB0cmFjZSBhbG9uZyB3aXRoIGl0LiAgQ2FsbCB0aGlzIG1ldGhvZCBvbmx5IGZyb20gYW4gZXhjZXB0aW9uIGhhbmRsZXIuCisKKyogOm1ldGg6YExvZ2dlci5sb2dgIHRha2VzIGEgbG9nIGxldmVsIGFzIGFuIGV4cGxpY2l0IGFyZ3VtZW50LiAgVGhpcyBpcyBhCisgIGxpdHRsZSBtb3JlIHZlcmJvc2UgZm9yIGxvZ2dpbmcgbWVzc2FnZXMgdGhhbiB1c2luZyB0aGUgbG9nIGxldmVsIGNvbnZlbmllbmNlCisgIG1ldGhvZHMgbGlzdGVkIGFib3ZlLCBidXQgdGhpcyBpcyBob3cgdG8gbG9nIGF0IGN1c3RvbSBsb2cgbGV2ZWxzLgorCis6ZnVuYzpgZ2V0TG9nZ2VyYCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgbG9nZ2VyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZAorbmFtZSBpZiBpdCBpcyBwcm92aWRlZCwgb3IgYGByb290YGAgaWYgbm90LiAgVGhlIG5hbWVzIGFyZSBwZXJpb2Qtc2VwYXJhdGVkCitoaWVyYXJjaGljYWwgc3RydWN0dXJlcy4gIE11bHRpcGxlIGNhbGxzIHRvIDpmdW5jOmBnZXRMb2dnZXJgIHdpdGggdGhlIHNhbWUgbmFtZQord2lsbCByZXR1cm4gYSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgbG9nZ2VyIG9iamVjdC4gIExvZ2dlcnMgdGhhdCBhcmUgZnVydGhlcgorZG93biBpbiB0aGUgaGllcmFyY2hpY2FsIGxpc3QgYXJlIGNoaWxkcmVuIG9mIGxvZ2dlcnMgaGlnaGVyIHVwIGluIHRoZSBsaXN0LgorRm9yIGV4YW1wbGUsIGdpdmVuIGEgbG9nZ2VyIHdpdGggYSBuYW1lIG9mIGBgZm9vYGAsIGxvZ2dlcnMgd2l0aCBuYW1lcyBvZgorYGBmb28uYmFyYGAsIGBgZm9vLmJhci5iYXpgYCwgYW5kIGBgZm9vLmJhbWBgIGFyZSBhbGwgZGVzY2VuZGFudHMgb2YgYGBmb29gYC4KKworTG9nZ2VycyBoYXZlIGEgY29uY2VwdCBvZiAqZWZmZWN0aXZlIGxldmVsKi4gSWYgYSBsZXZlbCBpcyBub3QgZXhwbGljaXRseSBzZXQKK29uIGEgbG9nZ2VyLCB0aGUgbGV2ZWwgb2YgaXRzIHBhcmVudCBpcyB1c2VkIGluc3RlYWQgYXMgaXRzIGVmZmVjdGl2ZSBsZXZlbC4KK0lmIHRoZSBwYXJlbnQgaGFzIG5vIGV4cGxpY2l0IGxldmVsIHNldCwgKml0cyogcGFyZW50IGlzIGV4YW1pbmVkLCBhbmQgc28gb24gLQorYWxsIGFuY2VzdG9ycyBhcmUgc2VhcmNoZWQgdW50aWwgYW4gZXhwbGljaXRseSBzZXQgbGV2ZWwgaXMgZm91bmQuIFRoZSByb290Citsb2dnZXIgYWx3YXlzIGhhcyBhbiBleHBsaWNpdCBsZXZlbCBzZXQgKGBgV0FSTklOR2BgIGJ5IGRlZmF1bHQpLiBXaGVuIGRlY2lkaW5nCit3aGV0aGVyIHRvIHByb2Nlc3MgYW4gZXZlbnQsIHRoZSBlZmZlY3RpdmUgbGV2ZWwgb2YgdGhlIGxvZ2dlciBpcyB1c2VkIHRvCitkZXRlcm1pbmUgd2hldGhlciB0aGUgZXZlbnQgaXMgcGFzc2VkIHRvIHRoZSBsb2dnZXIncyBoYW5kbGVycy4KKworQ2hpbGQgbG9nZ2VycyBwcm9wYWdhdGUgbWVzc2FnZXMgdXAgdG8gdGhlIGhhbmRsZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVpcgorYW5jZXN0b3IgbG9nZ2Vycy4gQmVjYXVzZSBvZiB0aGlzLCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBkZWZpbmUgYW5kIGNvbmZpZ3VyZQoraGFuZGxlcnMgZm9yIGFsbCB0aGUgbG9nZ2VycyBhbiBhcHBsaWNhdGlvbiB1c2VzLiBJdCBpcyBzdWZmaWNpZW50IHRvCitjb25maWd1cmUgaGFuZGxlcnMgZm9yIGEgdG9wLWxldmVsIGxvZ2dlciBhbmQgY3JlYXRlIGNoaWxkIGxvZ2dlcnMgYXMgbmVlZGVkLgorKFlvdSBjYW4sIGhvd2V2ZXIsIHR1cm4gb2ZmIHByb3BhZ2F0aW9uIGJ5IHNldHRpbmcgdGhlICpwcm9wYWdhdGUqCithdHRyaWJ1dGUgb2YgYSBsb2dnZXIgdG8gKkZhbHNlKi4pCisKKworLi4gX2hhbmRsZXItYmFzaWM6CisKK0hhbmRsZXJzCiteXl5eXl5eXgorCis6Y2xhc3M6YH5sb2dnaW5nLkhhbmRsZXJgIG9iamVjdHMgYXJlIHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyB0aGUKK2FwcHJvcHJpYXRlIGxvZyBtZXNzYWdlcyAoYmFzZWQgb24gdGhlIGxvZyBtZXNzYWdlcycgc2V2ZXJpdHkpIHRvIHRoZSBoYW5kbGVyJ3MKK3NwZWNpZmllZCBkZXN0aW5hdGlvbi4gIExvZ2dlciBvYmplY3RzIGNhbiBhZGQgemVybyBvciBtb3JlIGhhbmRsZXIgb2JqZWN0cyB0bwordGhlbXNlbHZlcyB3aXRoIGFuIDpmdW5jOmBhZGRIYW5kbGVyYCBtZXRob2QuICBBcyBhbiBleGFtcGxlIHNjZW5hcmlvLCBhbgorYXBwbGljYXRpb24gbWF5IHdhbnQgdG8gc2VuZCBhbGwgbG9nIG1lc3NhZ2VzIHRvIGEgbG9nIGZpbGUsIGFsbCBsb2cgbWVzc2FnZXMKK29mIGVycm9yIG9yIGhpZ2hlciB0byBzdGRvdXQsIGFuZCBhbGwgbWVzc2FnZXMgb2YgY3JpdGljYWwgdG8gYW4gZW1haWwgYWRkcmVzcy4KK1RoaXMgc2NlbmFyaW8gcmVxdWlyZXMgdGhyZWUgaW5kaXZpZHVhbCBoYW5kbGVycyB3aGVyZSBlYWNoIGhhbmRsZXIgaXMKK3Jlc3BvbnNpYmxlIGZvciBzZW5kaW5nIG1lc3NhZ2VzIG9mIGEgc3BlY2lmaWMgc2V2ZXJpdHkgdG8gYSBzcGVjaWZpYyBsb2NhdGlvbi4KKworVGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5jbHVkZXMgcXVpdGUgYSBmZXcgaGFuZGxlciB0eXBlcyAoc2VlCis6cmVmOmB1c2VmdWwtaGFuZGxlcnNgKTsgdGhlIHR1dG9yaWFscyB1c2UgbWFpbmx5IDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgYW5kCis6Y2xhc3M6YEZpbGVIYW5kbGVyYCBpbiBpdHMgZXhhbXBsZXMuCisKK1RoZXJlIGFyZSB2ZXJ5IGZldyBtZXRob2RzIGluIGEgaGFuZGxlciBmb3IgYXBwbGljYXRpb24gZGV2ZWxvcGVycyB0byBjb25jZXJuCit0aGVtc2VsdmVzIHdpdGguICBUaGUgb25seSBoYW5kbGVyIG1ldGhvZHMgdGhhdCBzZWVtIHJlbGV2YW50IGZvciBhcHBsaWNhdGlvbgorZGV2ZWxvcGVycyB3aG8gYXJlIHVzaW5nIHRoZSBidWlsdC1pbiBoYW5kbGVyIG9iamVjdHMgKHRoYXQgaXMsIG5vdCBjcmVhdGluZworY3VzdG9tIGhhbmRsZXJzKSBhcmUgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG1ldGhvZHM6CisKKyogVGhlIDptZXRoOmBIYW5kbGVyLnNldExldmVsYCBtZXRob2QsIGp1c3QgYXMgaW4gbG9nZ2VyIG9iamVjdHMsIHNwZWNpZmllcyB0aGUKKyAgbG93ZXN0IHNldmVyaXR5IHRoYXQgd2lsbCBiZSBkaXNwYXRjaGVkIHRvIHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbi4gIFdoeQorICBhcmUgdGhlcmUgdHdvIDpmdW5jOmBzZXRMZXZlbGAgbWV0aG9kcz8gIFRoZSBsZXZlbCBzZXQgaW4gdGhlIGxvZ2dlcgorICBkZXRlcm1pbmVzIHdoaWNoIHNldmVyaXR5IG9mIG1lc3NhZ2VzIGl0IHdpbGwgcGFzcyB0byBpdHMgaGFuZGxlcnMuICBUaGUgbGV2ZWwKKyAgc2V0IGluIGVhY2ggaGFuZGxlciBkZXRlcm1pbmVzIHdoaWNoIG1lc3NhZ2VzIHRoYXQgaGFuZGxlciB3aWxsIHNlbmQgb24uCisKKyogOmZ1bmM6YHNldEZvcm1hdHRlcmAgc2VsZWN0cyBhIEZvcm1hdHRlciBvYmplY3QgZm9yIHRoaXMgaGFuZGxlciB0byB1c2UuCisKKyogOmZ1bmM6YGFkZEZpbHRlcmAgYW5kIDpmdW5jOmByZW1vdmVGaWx0ZXJgIHJlc3BlY3RpdmVseSBjb25maWd1cmUgYW5kCisgIGRlY29uZmlndXJlIGZpbHRlciBvYmplY3RzIG9uIGhhbmRsZXJzLgorCitBcHBsaWNhdGlvbiBjb2RlIHNob3VsZCBub3QgZGlyZWN0bHkgaW5zdGFudGlhdGUgYW5kIHVzZSBpbnN0YW5jZXMgb2YKKzpjbGFzczpgSGFuZGxlcmAuICBJbnN0ZWFkLCB0aGUgOmNsYXNzOmBIYW5kbGVyYCBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgdGhhdAorZGVmaW5lcyB0aGUgaW50ZXJmYWNlIHRoYXQgYWxsIGhhbmRsZXJzIHNob3VsZCBoYXZlIGFuZCBlc3RhYmxpc2hlcyBzb21lCitkZWZhdWx0IGJlaGF2aW9yIHRoYXQgY2hpbGQgY2xhc3NlcyBjYW4gdXNlIChvciBvdmVycmlkZSkuCisKKworRm9ybWF0dGVycworXl5eXl5eXl5eXgorCitGb3JtYXR0ZXIgb2JqZWN0cyBjb25maWd1cmUgdGhlIGZpbmFsIG9yZGVyLCBzdHJ1Y3R1cmUsIGFuZCBjb250ZW50cyBvZiB0aGUgbG9nCittZXNzYWdlLiAgVW5saWtlIHRoZSBiYXNlIDpjbGFzczpgbG9nZ2luZy5IYW5kbGVyYCBjbGFzcywgYXBwbGljYXRpb24gY29kZSBtYXkKK2luc3RhbnRpYXRlIGZvcm1hdHRlciBjbGFzc2VzLCBhbHRob3VnaCB5b3UgY291bGQgbGlrZWx5IHN1YmNsYXNzIHRoZSBmb3JtYXR0ZXIKK2lmIHlvdXIgYXBwbGljYXRpb24gbmVlZHMgc3BlY2lhbCBiZWhhdmlvci4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyB0aHJlZQorb3B0aW9uYWwgYXJndW1lbnRzIC0tIGEgbWVzc2FnZSBmb3JtYXQgc3RyaW5nLCBhIGRhdGUgZm9ybWF0IHN0cmluZyBhbmQgYSBzdHlsZQoraW5kaWNhdG9yLgorCisuLiBtZXRob2Q6OiBsb2dnaW5nLkZvcm1hdHRlci5fX2luaXRfXyhmbXQ9Tm9uZSwgZGF0ZWZtdD1Ob25lLCBzdHlsZT0nJScpCisKK0lmIHRoZXJlIGlzIG5vIG1lc3NhZ2UgZm9ybWF0IHN0cmluZywgdGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZQorcmF3IG1lc3NhZ2UuICBJZiB0aGVyZSBpcyBubyBkYXRlIGZvcm1hdCBzdHJpbmcsIHRoZSBkZWZhdWx0IGRhdGUgZm9ybWF0IGlzOjoKKworICAgICVZLSVtLSVkICVIOiVNOiVTCisKK3dpdGggdGhlIG1pbGxpc2Vjb25kcyB0YWNrZWQgb24gYXQgdGhlIGVuZC4gVGhlIGBgc3R5bGVgYCBpcyBvbmUgb2YgYCVgLCAneycKK29yICckJy4gSWYgb25lIG9mIHRoZXNlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gJyUnIHdpbGwgYmUgdXNlZC4KKworSWYgdGhlIGBgc3R5bGVgYCBpcyAnJScsIHRoZSBtZXNzYWdlIGZvcm1hdCBzdHJpbmcgdXNlcworYGAlKDxkaWN0aW9uYXJ5IGtleT4pc2BgIHN0eWxlZCBzdHJpbmcgc3Vic3RpdHV0aW9uOyB0aGUgcG9zc2libGUga2V5cyBhcmUKK2RvY3VtZW50ZWQgaW4gOnJlZjpgbG9ncmVjb3JkLWF0dHJpYnV0ZXNgLiBJZiB0aGUgc3R5bGUgaXMgJ3snLCB0aGUgbWVzc2FnZQorZm9ybWF0IHN0cmluZyBpcyBhc3N1bWVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCA6bWV0aDpgc3RyLmZvcm1hdGAgKHVzaW5nCitrZXl3b3JkIGFyZ3VtZW50cyksIHdoaWxlIGlmIHRoZSBzdHlsZSBpcyAnJCcgdGhlbiB0aGUgbWVzc2FnZSBmb3JtYXQgc3RyaW5nCitzaG91bGQgY29uZm9ybSB0byB3aGF0IGlzIGV4cGVjdGVkIGJ5IDptZXRoOmBzdHJpbmcuVGVtcGxhdGUuc3Vic3RpdHV0ZWAuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBBZGRlZCB0aGUgYGBzdHlsZWBgIHBhcmFtZXRlci4KKworVGhlIGZvbGxvd2luZyBtZXNzYWdlIGZvcm1hdCBzdHJpbmcgd2lsbCBsb2cgdGhlIHRpbWUgaW4gYSBodW1hbi1yZWFkYWJsZQorZm9ybWF0LCB0aGUgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG1lc3NhZ2UsIGluIHRoYXQKK29yZGVyOjoKKworICAgICclKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcycKKworRm9ybWF0dGVycyB1c2UgYSB1c2VyLWNvbmZpZ3VyYWJsZSBmdW5jdGlvbiB0byBjb252ZXJ0IHRoZSBjcmVhdGlvbiB0aW1lIG9mIGEKK3JlY29yZCB0byBhIHR1cGxlLiBCeSBkZWZhdWx0LCA6ZnVuYzpgdGltZS5sb2NhbHRpbWVgIGlzIHVzZWQ7IHRvIGNoYW5nZSB0aGlzCitmb3IgYSBwYXJ0aWN1bGFyIGZvcm1hdHRlciBpbnN0YW5jZSwgc2V0IHRoZSBgYGNvbnZlcnRlcmBgIGF0dHJpYnV0ZSBvZiB0aGUKK2luc3RhbmNlIHRvIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYCBvcgorOmZ1bmM6YHRpbWUuZ210aW1lYC4gVG8gY2hhbmdlIGl0IGZvciBhbGwgZm9ybWF0dGVycywgZm9yIGV4YW1wbGUgaWYgeW91IHdhbnQKK2FsbCBsb2dnaW5nIHRpbWVzIHRvIGJlIHNob3duIGluIEdNVCwgc2V0IHRoZSBgYGNvbnZlcnRlcmBgIGF0dHJpYnV0ZSBpbiB0aGUKK0Zvcm1hdHRlciBjbGFzcyAodG8gYGB0aW1lLmdtdGltZWBgIGZvciBHTVQgZGlzcGxheSkuCisKKworQ29uZmlndXJpbmcgTG9nZ2luZworXl5eXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZy5jb25maWcKKworUHJvZ3JhbW1lcnMgY2FuIGNvbmZpZ3VyZSBsb2dnaW5nIGluIHRocmVlIHdheXM6CisKKzEuIENyZWF0aW5nIGxvZ2dlcnMsIGhhbmRsZXJzLCBhbmQgZm9ybWF0dGVycyBleHBsaWNpdGx5IHVzaW5nIFB5dGhvbgorICAgY29kZSB0aGF0IGNhbGxzIHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHMgbGlzdGVkIGFib3ZlLgorMi4gQ3JlYXRpbmcgYSBsb2dnaW5nIGNvbmZpZyBmaWxlIGFuZCByZWFkaW5nIGl0IHVzaW5nIHRoZSA6ZnVuYzpgZmlsZUNvbmZpZ2AKKyAgIGZ1bmN0aW9uLgorMy4gQ3JlYXRpbmcgYSBkaWN0aW9uYXJ5IG9mIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIHBhc3NpbmcgaXQKKyAgIHRvIHRoZSA6ZnVuYzpgZGljdENvbmZpZ2AgZnVuY3Rpb24uCisKK0ZvciB0aGUgcmVmZXJlbmNlIGRvY3VtZW50YXRpb24gb24gdGhlIGxhc3QgdHdvIG9wdGlvbnMsIHNlZQorOnJlZjpgbG9nZ2luZy1jb25maWctYXBpYC4gIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIGEgdmVyeSBzaW1wbGUKK2xvZ2dlciwgYSBjb25zb2xlIGhhbmRsZXIsIGFuZCBhIHNpbXBsZSBmb3JtYXR0ZXIgdXNpbmcgUHl0aG9uIGNvZGU6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKworICAgICMgY3JlYXRlIGxvZ2dlcgorICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzaW1wbGVfZXhhbXBsZScpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgYW5kIHNldCBsZXZlbCB0byBkZWJ1ZworICAgIGNoID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKKyAgICBjaC5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgIyBjcmVhdGUgZm9ybWF0dGVyCisgICAgZm9ybWF0dGVyID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMnKQorCisgICAgIyBhZGQgZm9ybWF0dGVyIHRvIGNoCisgICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKworICAgICMgYWRkIGNoIHRvIGxvZ2dlcgorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNoKQorCisgICAgIyAnYXBwbGljYXRpb24nIGNvZGUKKyAgICBsb2dnZXIuZGVidWcoJ2RlYnVnIG1lc3NhZ2UnKQorICAgIGxvZ2dlci5pbmZvKCdpbmZvIG1lc3NhZ2UnKQorICAgIGxvZ2dlci53YXJuKCd3YXJuIG1lc3NhZ2UnKQorICAgIGxvZ2dlci5lcnJvcignZXJyb3IgbWVzc2FnZScpCisgICAgbG9nZ2VyLmNyaXRpY2FsKCdjcml0aWNhbCBtZXNzYWdlJykKKworUnVubmluZyB0aGlzIG1vZHVsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgcHJvZHVjZXMgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgorCisgICAgJCBweXRob24gc2ltcGxlX2xvZ2dpbmdfbW9kdWxlLnB5CisgICAgMjAwNS0wMy0xOSAxNToxMDoyNiw2MTggLSBzaW1wbGVfZXhhbXBsZSAtIERFQlVHIC0gZGVidWcgbWVzc2FnZQorICAgIDIwMDUtMDMtMTkgMTU6MTA6MjYsNjIwIC0gc2ltcGxlX2V4YW1wbGUgLSBJTkZPIC0gaW5mbyBtZXNzYWdlCisgICAgMjAwNS0wMy0xOSAxNToxMDoyNiw2OTUgLSBzaW1wbGVfZXhhbXBsZSAtIFdBUk5JTkcgLSB3YXJuIG1lc3NhZ2UKKyAgICAyMDA1LTAzLTE5IDE1OjEwOjI2LDY5NyAtIHNpbXBsZV9leGFtcGxlIC0gRVJST1IgLSBlcnJvciBtZXNzYWdlCisgICAgMjAwNS0wMy0xOSAxNToxMDoyNiw3NzMgLSBzaW1wbGVfZXhhbXBsZSAtIENSSVRJQ0FMIC0gY3JpdGljYWwgbWVzc2FnZQorCitUaGUgZm9sbG93aW5nIFB5dGhvbiBtb2R1bGUgY3JlYXRlcyBhIGxvZ2dlciwgaGFuZGxlciwgYW5kIGZvcm1hdHRlciBuZWFybHkKK2lkZW50aWNhbCB0byB0aG9zZSBpbiB0aGUgZXhhbXBsZSBsaXN0ZWQgYWJvdmUsIHdpdGggdGhlIG9ubHkgZGlmZmVyZW5jZSBiZWluZwordGhlIG5hbWVzIG9mIHRoZSBvYmplY3RzOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisKKyAgICBsb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnKCdsb2dnaW5nLmNvbmYnKQorCisgICAgIyBjcmVhdGUgbG9nZ2VyCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3NpbXBsZUV4YW1wbGUnKQorCisgICAgIyAnYXBwbGljYXRpb24nIGNvZGUKKyAgICBsb2dnZXIuZGVidWcoJ2RlYnVnIG1lc3NhZ2UnKQorICAgIGxvZ2dlci5pbmZvKCdpbmZvIG1lc3NhZ2UnKQorICAgIGxvZ2dlci53YXJuKCd3YXJuIG1lc3NhZ2UnKQorICAgIGxvZ2dlci5lcnJvcignZXJyb3IgbWVzc2FnZScpCisgICAgbG9nZ2VyLmNyaXRpY2FsKCdjcml0aWNhbCBtZXNzYWdlJykKKworSGVyZSBpcyB0aGUgbG9nZ2luZy5jb25mIGZpbGU6OgorCisgICAgW2xvZ2dlcnNdCisgICAga2V5cz1yb290LHNpbXBsZUV4YW1wbGUKKworICAgIFtoYW5kbGVyc10KKyAgICBrZXlzPWNvbnNvbGVIYW5kbGVyCisKKyAgICBbZm9ybWF0dGVyc10KKyAgICBrZXlzPXNpbXBsZUZvcm1hdHRlcgorCisgICAgW2xvZ2dlcl9yb290XQorICAgIGxldmVsPURFQlVHCisgICAgaGFuZGxlcnM9Y29uc29sZUhhbmRsZXIKKworICAgIFtsb2dnZXJfc2ltcGxlRXhhbXBsZV0KKyAgICBsZXZlbD1ERUJVRworICAgIGhhbmRsZXJzPWNvbnNvbGVIYW5kbGVyCisgICAgcXVhbG5hbWU9c2ltcGxlRXhhbXBsZQorICAgIHByb3BhZ2F0ZT0wCisKKyAgICBbaGFuZGxlcl9jb25zb2xlSGFuZGxlcl0KKyAgICBjbGFzcz1TdHJlYW1IYW5kbGVyCisgICAgbGV2ZWw9REVCVUcKKyAgICBmb3JtYXR0ZXI9c2ltcGxlRm9ybWF0dGVyCisgICAgYXJncz0oc3lzLnN0ZG91dCwpCisKKyAgICBbZm9ybWF0dGVyX3NpbXBsZUZvcm1hdHRlcl0KKyAgICBmb3JtYXQ9JShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcworICAgIGRhdGVmbXQ9CisKK1RoZSBvdXRwdXQgaXMgbmVhcmx5IGlkZW50aWNhbCB0byB0aGF0IG9mIHRoZSBub24tY29uZmlnLWZpbGUtYmFzZWQgZXhhbXBsZTo6CisKKyAgICAkIHB5dGhvbiBzaW1wbGVfbG9nZ2luZ19jb25maWcucHkKKyAgICAyMDA1LTAzLTE5IDE1OjM4OjU1LDk3NyAtIHNpbXBsZUV4YW1wbGUgLSBERUJVRyAtIGRlYnVnIG1lc3NhZ2UKKyAgICAyMDA1LTAzLTE5IDE1OjM4OjU1LDk3OSAtIHNpbXBsZUV4YW1wbGUgLSBJTkZPIC0gaW5mbyBtZXNzYWdlCisgICAgMjAwNS0wMy0xOSAxNTozODo1NiwwNTQgLSBzaW1wbGVFeGFtcGxlIC0gV0FSTklORyAtIHdhcm4gbWVzc2FnZQorICAgIDIwMDUtMDMtMTkgMTU6Mzg6NTYsMDU1IC0gc2ltcGxlRXhhbXBsZSAtIEVSUk9SIC0gZXJyb3IgbWVzc2FnZQorICAgIDIwMDUtMDMtMTkgMTU6Mzg6NTYsMTMwIC0gc2ltcGxlRXhhbXBsZSAtIENSSVRJQ0FMIC0gY3JpdGljYWwgbWVzc2FnZQorCitZb3UgY2FuIHNlZSB0aGF0IHRoZSBjb25maWcgZmlsZSBhcHByb2FjaCBoYXMgYSBmZXcgYWR2YW50YWdlcyBvdmVyIHRoZSBQeXRob24KK2NvZGUgYXBwcm9hY2gsIG1haW5seSBzZXBhcmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUgYW5kIHRoZSBhYmlsaXR5IG9mCitub25jb2RlcnMgdG8gZWFzaWx5IG1vZGlmeSB0aGUgbG9nZ2luZyBwcm9wZXJ0aWVzLgorCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZworCitOb3RlIHRoYXQgdGhlIGNsYXNzIG5hbWVzIHJlZmVyZW5jZWQgaW4gY29uZmlnIGZpbGVzIG5lZWQgdG8gYmUgZWl0aGVyIHJlbGF0aXZlCit0byB0aGUgbG9nZ2luZyBtb2R1bGUsIG9yIGFic29sdXRlIHZhbHVlcyB3aGljaCBjYW4gYmUgcmVzb2x2ZWQgdXNpbmcgbm9ybWFsCitpbXBvcnQgbWVjaGFuaXNtcy4gVGh1cywgeW91IGNvdWxkIHVzZSBlaXRoZXIKKzpjbGFzczpgfmxvZ2dpbmcuaGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyYCAocmVsYXRpdmUgdG8gdGhlIGxvZ2dpbmcgbW9kdWxlKSBvcgorYGBteXBhY2thZ2UubXltb2R1bGUuTXlIYW5kbGVyYGAgKGZvciBhIGNsYXNzIGRlZmluZWQgaW4gcGFja2FnZSBgYG15cGFja2FnZWBgCithbmQgbW9kdWxlIGBgbXltb2R1bGVgYCwgd2hlcmUgYGBteXBhY2thZ2VgYCBpcyBhdmFpbGFibGUgb24gdGhlIFB5dGhvbiBpbXBvcnQKK3BhdGgpLgorCitJbiBQeXRob24gMy4yLCBhIG5ldyBtZWFucyBvZiBjb25maWd1cmluZyBsb2dnaW5nIGhhcyBiZWVuIGludHJvZHVjZWQsIHVzaW5nCitkaWN0aW9uYXJpZXMgdG8gaG9sZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiBUaGlzIHByb3ZpZGVzIGEgc3VwZXJzZXQgb2YgdGhlCitmdW5jdGlvbmFsaXR5IG9mIHRoZSBjb25maWctZmlsZS1iYXNlZCBhcHByb2FjaCBvdXRsaW5lZCBhYm92ZSwgYW5kIGlzIHRoZQorcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbiBtZXRob2QgZm9yIG5ldyBhcHBsaWNhdGlvbnMgYW5kIGRlcGxveW1lbnRzLiBCZWNhdXNlCithIFB5dGhvbiBkaWN0aW9uYXJ5IGlzIHVzZWQgdG8gaG9sZCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCBhbmQgc2luY2UgeW91CitjYW4gcG9wdWxhdGUgdGhhdCBkaWN0aW9uYXJ5IHVzaW5nIGRpZmZlcmVudCBtZWFucywgeW91IGhhdmUgbW9yZSBvcHRpb25zIGZvcgorY29uZmlndXJhdGlvbi4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIGEgY29uZmlndXJhdGlvbiBmaWxlIGluIEpTT04gZm9ybWF0LAorb3IsIGlmIHlvdSBoYXZlIGFjY2VzcyB0byBZQU1MIHByb2Nlc3NpbmcgZnVuY3Rpb25hbGl0eSwgYSBmaWxlIGluIFlBTUwKK2Zvcm1hdCwgdG8gcG9wdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZGljdGlvbmFyeS4gT3IsIG9mIGNvdXJzZSwgeW91IGNhbgorY29uc3RydWN0IHRoZSBkaWN0aW9uYXJ5IGluIFB5dGhvbiBjb2RlLCByZWNlaXZlIGl0IGluIHBpY2tsZWQgZm9ybSBvdmVyIGEKK3NvY2tldCwgb3IgdXNlIHdoYXRldmVyIGFwcHJvYWNoIG1ha2VzIHNlbnNlIGZvciB5b3VyIGFwcGxpY2F0aW9uLgorCitIZXJlJ3MgYW4gZXhhbXBsZSBvZiB0aGUgc2FtZSBjb25maWd1cmF0aW9uIGFzIGFib3ZlLCBpbiBZQU1MIGZvcm1hdCBmb3IKK3RoZSBuZXcgZGljdGlvbmFyeS1iYXNlZCBhcHByb2FjaDo6CisKKyAgICB2ZXJzaW9uOiAxCisgICAgZm9ybWF0dGVyczoKKyAgICAgIHNpbXBsZToKKyAgICAgICAgZm9ybWF0OiBmb3JtYXQ9JShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcworICAgIGhhbmRsZXJzOgorICAgICAgY29uc29sZToKKyAgICAgICAgY2xhc3M6IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcgorICAgICAgICBsZXZlbDogREVCVUcKKyAgICAgICAgZm9ybWF0dGVyOiBzaW1wbGUKKyAgICAgICAgc3RyZWFtOiBleHQ6Ly9zeXMuc3Rkb3V0CisgICAgbG9nZ2VyczoKKyAgICAgIHNpbXBsZUV4YW1wbGU6CisgICAgICAgIGxldmVsOiBERUJVRworICAgICAgICBoYW5kbGVyczogW2NvbnNvbGVdCisgICAgICAgIHByb3BhZ2F0ZTogbm8KKyAgICByb290OgorICAgICAgbGV2ZWw6IERFQlVHCisgICAgICBoYW5kbGVyczogW2NvbnNvbGVdCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGxvZ2dpbmcgdXNpbmcgYSBkaWN0aW9uYXJ5LCBzZWUKKzpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCisKK1doYXQgaGFwcGVucyBpZiBubyBjb25maWd1cmF0aW9uIGlzIHByb3ZpZGVkCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiBubyBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gaXMgcHJvdmlkZWQsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYSBzaXR1YXRpb24KK3doZXJlIGEgbG9nZ2luZyBldmVudCBuZWVkcyB0byBiZSBvdXRwdXQsIGJ1dCBubyBoYW5kbGVycyBjYW4gYmUgZm91bmQgdG8KK291dHB1dCB0aGUgZXZlbnQuIFRoZSBiZWhhdmlvdXIgb2YgdGhlIGxvZ2dpbmcgcGFja2FnZSBpbiB0aGVzZQorY2lyY3Vtc3RhbmNlcyBpcyBkZXBlbmRlbnQgb24gdGhlIFB5dGhvbiB2ZXJzaW9uLgorCitGb3IgdmVyc2lvbnMgb2YgUHl0aG9uIHByaW9yIHRvIDMuMiwgdGhlIGJlaGF2aW91ciBpcyBhcyBmb2xsb3dzOgorCisqIElmICpsb2dnaW5nLnJhaXNlRXhjZXB0aW9ucyogaXMgKkZhbHNlKiAocHJvZHVjdGlvbiBtb2RlKSwgdGhlIGV2ZW50IGlzCisgIHNpbGVudGx5IGRyb3BwZWQuCisKKyogSWYgKmxvZ2dpbmcucmFpc2VFeGNlcHRpb25zKiBpcyAqVHJ1ZSogKGRldmVsb3BtZW50IG1vZGUpLCBhIG1lc3NhZ2UKKyAgJ05vIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgWC5ZLlonIGlzIHByaW50ZWQgb25jZS4KKworSW4gUHl0aG9uIDMuMiBhbmQgbGF0ZXIsIHRoZSBiZWhhdmlvdXIgaXMgYXMgZm9sbG93czoKKworKiBUaGUgZXZlbnQgaXMgb3V0cHV0IHVzaW5nIGEgJ2hhbmRsZXIgb2YgbGFzdCByZXNvcnQnLCBzdG9yZWQgaW4KKyAgYGBsb2dnaW5nLmxhc3RSZXNvcnRgYC4gVGhpcyBpbnRlcm5hbCBoYW5kbGVyIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55CisgIGxvZ2dlciwgYW5kIGFjdHMgbGlrZSBhIDpjbGFzczpgfmxvZ2dpbmcuU3RyZWFtSGFuZGxlcmAgd2hpY2ggd3JpdGVzIHRoZQorICBldmVudCBkZXNjcmlwdGlvbiBtZXNzYWdlIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIGBgc3lzLnN0ZGVycmBgICh0aGVyZWZvcmUKKyAgcmVzcGVjdGluZyBhbnkgcmVkaXJlY3Rpb25zIHdoaWNoIG1heSBiZSBpbiBlZmZlY3QpLiBObyBmb3JtYXR0aW5nIGlzCisgIGRvbmUgb24gdGhlIG1lc3NhZ2UgLSBqdXN0IHRoZSBiYXJlIGV2ZW50IGRlc2NyaXB0aW9uIG1lc3NhZ2UgaXMgcHJpbnRlZC4KKyAgVGhlIGhhbmRsZXIncyBsZXZlbCBpcyBzZXQgdG8gYGBXQVJOSU5HYGAsIHNvIGFsbCBldmVudHMgYXQgdGhpcyBhbmQKKyAgZ3JlYXRlciBzZXZlcml0aWVzIHdpbGwgYmUgb3V0cHV0LgorCitUbyBvYnRhaW4gdGhlIHByZS0zLjIgYmVoYXZpb3VyLCBgYGxvZ2dpbmcubGFzdFJlc29ydGBgIGNhbiBiZSBzZXQgdG8gKk5vbmUqLgorCisuLiBfbGlicmFyeS1jb25maWc6CisKK0NvbmZpZ3VyaW5nIExvZ2dpbmcgZm9yIGEgTGlicmFyeQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1doZW4gZGV2ZWxvcGluZyBhIGxpYnJhcnkgd2hpY2ggdXNlcyBsb2dnaW5nLCB5b3Ugc2hvdWxkIHRha2UgY2FyZSB0bworZG9jdW1lbnQgaG93IHRoZSBsaWJyYXJ5IHVzZXMgbG9nZ2luZyAtIGZvciBleGFtcGxlLCB0aGUgbmFtZXMgb2YgbG9nZ2VycwordXNlZC4gU29tZSBjb25zaWRlcmF0aW9uIGFsc28gbmVlZHMgdG8gYmUgZ2l2ZW4gdG8gaXRzIGxvZ2dpbmcgY29uZmlndXJhdGlvbi4KK0lmIHRoZSB1c2luZyBhcHBsaWNhdGlvbiBkb2VzIG5vdCB1c2UgbG9nZ2luZywgYW5kIGxpYnJhcnkgY29kZSBtYWtlcyBsb2dnaW5nCitjYWxscywgdGhlbiAoYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uKSBldmVudHMgb2Ygc2V2ZXJpdHkKK2BgV0FSTklOR2BgIGFuZCBncmVhdGVyIHdpbGwgYmUgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYC4gVGhpcyBpcyByZWdhcmRlZCBhcwordGhlIGJlc3QgZGVmYXVsdCBiZWhhdmlvdXIuCisKK0lmIGZvciBzb21lIHJlYXNvbiB5b3UgKmRvbid0KiB3YW50IHRoZXNlIG1lc3NhZ2VzIHByaW50ZWQgaW4gdGhlIGFic2VuY2Ugb2YKK2FueSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gYXR0YWNoIGEgZG8tbm90aGluZyBoYW5kbGVyIHRvIHRoZSB0b3AtbGV2ZWwKK2xvZ2dlciBmb3IgeW91ciBsaWJyYXJ5LiBUaGlzIGF2b2lkcyB0aGUgbWVzc2FnZSBiZWluZyBwcmludGVkLCBzaW5jZSBhIGhhbmRsZXIKK3dpbGwgYmUgYWx3YXlzIGJlIGZvdW5kIGZvciB0aGUgbGlicmFyeSdzIGV2ZW50czogaXQganVzdCBkb2Vzbid0IHByb2R1Y2UgYW55CitvdXRwdXQuIElmIHRoZSBsaWJyYXJ5IHVzZXIgY29uZmlndXJlcyBsb2dnaW5nIGZvciBhcHBsaWNhdGlvbiB1c2UsIHByZXN1bWFibHkKK3RoYXQgY29uZmlndXJhdGlvbiB3aWxsIGFkZCBzb21lIGhhbmRsZXJzLCBhbmQgaWYgbGV2ZWxzIGFyZSBzdWl0YWJseQorY29uZmlndXJlZCB0aGVuIGxvZ2dpbmcgY2FsbHMgbWFkZSBpbiBsaWJyYXJ5IGNvZGUgd2lsbCBzZW5kIG91dHB1dCB0byB0aG9zZQoraGFuZGxlcnMsIGFzIG5vcm1hbC4KKworQSBkby1ub3RoaW5nIGhhbmRsZXIgaXMgaW5jbHVkZWQgaW4gdGhlIGxvZ2dpbmcgcGFja2FnZToKKzpjbGFzczpgfmxvZ2dpbmcuTnVsbEhhbmRsZXJgIChzaW5jZSBQeXRob24gMy4xKS4gQW4gaW5zdGFuY2Ugb2YgdGhpcyBoYW5kbGVyCitjb3VsZCBiZSBhZGRlZCB0byB0aGUgdG9wLWxldmVsIGxvZ2dlciBvZiB0aGUgbG9nZ2luZyBuYW1lc3BhY2UgdXNlZCBieSB0aGUKK2xpYnJhcnkgKCppZiogeW91IHdhbnQgdG8gcHJldmVudCB5b3VyIGxpYnJhcnkncyBsb2dnZWQgZXZlbnRzIGJlaW5nIG91dHB1dCB0bworYGBzeXMuc3RkZXJyYGAgaW4gdGhlIGFic2VuY2Ugb2YgbG9nZ2luZyBjb25maWd1cmF0aW9uKS4gSWYgYWxsIGxvZ2dpbmcgYnkgYQorbGlicmFyeSAqZm9vKiBpcyBkb25lIHVzaW5nIGxvZ2dlcnMgd2l0aCBuYW1lcyBtYXRjaGluZyAnZm9vLngnLCAnZm9vLngueScsCitldGMuIHRoZW4gdGhlIGNvZGU6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuYWRkSGFuZGxlcihsb2dnaW5nLk51bGxIYW5kbGVyKCkpCisKK3Nob3VsZCBoYXZlIHRoZSBkZXNpcmVkIGVmZmVjdC4gSWYgYW4gb3JnYW5pc2F0aW9uIHByb2R1Y2VzIGEgbnVtYmVyIG9mCitsaWJyYXJpZXMsIHRoZW4gdGhlIGxvZ2dlciBuYW1lIHNwZWNpZmllZCBjYW4gYmUgJ29yZ25hbWUuZm9vJyByYXRoZXIgdGhhbgoranVzdCAnZm9vJy4KKworKipQTEVBU0UgTk9URToqKiBJdCBpcyBzdHJvbmdseSBhZHZpc2VkIHRoYXQgeW91ICpkbyBub3QgYWRkIGFueSBoYW5kbGVycyBvdGhlcgordGhhbiogOmNsYXNzOmB+bG9nZ2luZy5OdWxsSGFuZGxlcmAgKnRvIHlvdXIgbGlicmFyeSdzIGxvZ2dlcnMqLiBUaGlzIGlzCitiZWNhdXNlIHRoZSBjb25maWd1cmF0aW9uIG9mIGhhbmRsZXJzIGlzIHRoZSBwcmVyb2dhdGl2ZSBvZiB0aGUgYXBwbGljYXRpb24KK2RldmVsb3BlciB3aG8gdXNlcyB5b3VyIGxpYnJhcnkuIFRoZSBhcHBsaWNhdGlvbiBkZXZlbG9wZXIga25vd3MgdGhlaXIgdGFyZ2V0CithdWRpZW5jZSBhbmQgd2hhdCBoYW5kbGVycyBhcmUgbW9zdCBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgYXBwbGljYXRpb246IGlmIHlvdQorYWRkIGhhbmRsZXJzICd1bmRlciB0aGUgaG9vZCcsIHlvdSBtaWdodCB3ZWxsIGludGVyZmVyZSB3aXRoIHRoZWlyIGFiaWxpdHkgdG8KK2NhcnJ5IG91dCB1bml0IHRlc3RzIGFuZCBkZWxpdmVyIGxvZ3Mgd2hpY2ggc3VpdCB0aGVpciByZXF1aXJlbWVudHMuCisKKworTG9nZ2luZyBMZXZlbHMKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSBudW1lcmljIHZhbHVlcyBvZiBsb2dnaW5nIGxldmVscyBhcmUgZ2l2ZW4gaW4gdGhlIGZvbGxvd2luZyB0YWJsZS4gVGhlc2UgYXJlCitwcmltYXJpbHkgb2YgaW50ZXJlc3QgaWYgeW91IHdhbnQgdG8gZGVmaW5lIHlvdXIgb3duIGxldmVscywgYW5kIG5lZWQgdGhlbSB0bworaGF2ZSBzcGVjaWZpYyB2YWx1ZXMgcmVsYXRpdmUgdG8gdGhlIHByZWRlZmluZWQgbGV2ZWxzLiBJZiB5b3UgZGVmaW5lIGEgbGV2ZWwKK3dpdGggdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSwgaXQgb3ZlcndyaXRlcyB0aGUgcHJlZGVmaW5lZCB2YWx1ZTsgdGhlIHByZWRlZmluZWQKK25hbWUgaXMgbG9zdC4KKworKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKK3wgTGV2ZWwgICAgICAgIHwgTnVtZXJpYyB2YWx1ZSB8CisrPT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KworfCBgYENSSVRJQ0FMYGAgfCA1MCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCit8IGBgRVJST1JgYCAgICB8IDQwICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKK3wgYGBXQVJOSU5HYGAgIHwgMzAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworfCBgYElORk9gYCAgICAgfCAyMCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCit8IGBgREVCVUdgYCAgICB8IDEwICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKK3wgYGBOT1RTRVRgYCAgIHwgMCAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCitMZXZlbHMgY2FuIGFsc28gYmUgYXNzb2NpYXRlZCB3aXRoIGxvZ2dlcnMsIGJlaW5nIHNldCBlaXRoZXIgYnkgdGhlIGRldmVsb3BlciBvcgordGhyb3VnaCBsb2FkaW5nIGEgc2F2ZWQgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBXaGVuIGEgbG9nZ2luZyBtZXRob2QgaXMgY2FsbGVkCitvbiBhIGxvZ2dlciwgdGhlIGxvZ2dlciBjb21wYXJlcyBpdHMgb3duIGxldmVsIHdpdGggdGhlIGxldmVsIGFzc29jaWF0ZWQgd2l0aAordGhlIG1ldGhvZCBjYWxsLiBJZiB0aGUgbG9nZ2VyJ3MgbGV2ZWwgaXMgaGlnaGVyIHRoYW4gdGhlIG1ldGhvZCBjYWxsJ3MsIG5vCitsb2dnaW5nIG1lc3NhZ2UgaXMgYWN0dWFsbHkgZ2VuZXJhdGVkLiBUaGlzIGlzIHRoZSBiYXNpYyBtZWNoYW5pc20gY29udHJvbGxpbmcKK3RoZSB2ZXJib3NpdHkgb2YgbG9nZ2luZyBvdXRwdXQuCisKK0xvZ2dpbmcgbWVzc2FnZXMgYXJlIGVuY29kZWQgYXMgaW5zdGFuY2VzIG9mIHRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGAKK2NsYXNzLiBXaGVuIGEgbG9nZ2VyIGRlY2lkZXMgdG8gYWN0dWFsbHkgbG9nIGFuIGV2ZW50LCBhCis6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGAgaW5zdGFuY2UgaXMgY3JlYXRlZCBmcm9tIHRoZSBsb2dnaW5nIG1lc3NhZ2UuCisKK0xvZ2dpbmcgbWVzc2FnZXMgYXJlIHN1YmplY3RlZCB0byBhIGRpc3BhdGNoIG1lY2hhbmlzbSB0aHJvdWdoIHRoZSB1c2Ugb2YKKzpkZm46YGhhbmRsZXJzYCwgd2hpY2ggYXJlIGluc3RhbmNlcyBvZiBzdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YEhhbmRsZXJgCitjbGFzcy4gSGFuZGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IGEgbG9nZ2VkIG1lc3NhZ2UgKGluIHRoZSBmb3JtCitvZiBhIDpjbGFzczpgTG9nUmVjb3JkYCkgZW5kcyB1cCBpbiBhIHBhcnRpY3VsYXIgbG9jYXRpb24gKG9yIHNldCBvZiBsb2NhdGlvbnMpCit3aGljaCBpcyB1c2VmdWwgZm9yIHRoZSB0YXJnZXQgYXVkaWVuY2UgZm9yIHRoYXQgbWVzc2FnZSAoc3VjaCBhcyBlbmQgdXNlcnMsCitzdXBwb3J0IGRlc2sgc3RhZmYsIHN5c3RlbSBhZG1pbmlzdHJhdG9ycywgZGV2ZWxvcGVycykuIEhhbmRsZXJzIGFyZSBwYXNzZWQKKzpjbGFzczpgTG9nUmVjb3JkYCBpbnN0YW5jZXMgaW50ZW5kZWQgZm9yIHBhcnRpY3VsYXIgZGVzdGluYXRpb25zLiBFYWNoIGxvZ2dlcgorY2FuIGhhdmUgemVybywgb25lIG9yIG1vcmUgaGFuZGxlcnMgYXNzb2NpYXRlZCB3aXRoIGl0ICh2aWEgdGhlCis6bWV0aDpgfkxvZ2dlci5hZGRIYW5kbGVyYCBtZXRob2Qgb2YgOmNsYXNzOmBMb2dnZXJgKS4gSW4gYWRkaXRpb24gdG8gYW55CitoYW5kbGVycyBkaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYSBsb2dnZXIsICphbGwgaGFuZGxlcnMgYXNzb2NpYXRlZCB3aXRoIGFsbAorYW5jZXN0b3JzIG9mIHRoZSBsb2dnZXIqIGFyZSBjYWxsZWQgdG8gZGlzcGF0Y2ggdGhlIG1lc3NhZ2UgKHVubGVzcyB0aGUKKypwcm9wYWdhdGUqIGZsYWcgZm9yIGEgbG9nZ2VyIGlzIHNldCB0byBhIGZhbHNlIHZhbHVlLCBhdCB3aGljaCBwb2ludCB0aGUKK3Bhc3NpbmcgdG8gYW5jZXN0b3IgaGFuZGxlcnMgc3RvcHMpLgorCitKdXN0IGFzIGZvciBsb2dnZXJzLCBoYW5kbGVycyBjYW4gaGF2ZSBsZXZlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEEgaGFuZGxlcidzCitsZXZlbCBhY3RzIGFzIGEgZmlsdGVyIGluIHRoZSBzYW1lIHdheSBhcyBhIGxvZ2dlcidzIGxldmVsIGRvZXMuIElmIGEgaGFuZGxlcgorZGVjaWRlcyB0byBhY3R1YWxseSBkaXNwYXRjaCBhbiBldmVudCwgdGhlIDptZXRoOmB+SGFuZGxlci5lbWl0YCBtZXRob2QgaXMgdXNlZAordG8gc2VuZCB0aGUgbWVzc2FnZSB0byBpdHMgZGVzdGluYXRpb24uIE1vc3QgdXNlci1kZWZpbmVkIHN1YmNsYXNzZXMgb2YKKzpjbGFzczpgSGFuZGxlcmAgd2lsbCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgOm1ldGg6YH5IYW5kbGVyLmVtaXRgLgorCisuLiBfY3VzdG9tLWxldmVsczoKKworQ3VzdG9tIExldmVscworXl5eXl5eXl5eXl5eXgorCitEZWZpbmluZyB5b3VyIG93biBsZXZlbHMgaXMgcG9zc2libGUsIGJ1dCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSwgYXMgdGhlCitleGlzdGluZyBsZXZlbHMgaGF2ZSBiZWVuIGNob3NlbiBvbiB0aGUgYmFzaXMgb2YgcHJhY3RpY2FsIGV4cGVyaWVuY2UuCitIb3dldmVyLCBpZiB5b3UgYXJlIGNvbnZpbmNlZCB0aGF0IHlvdSBuZWVkIGN1c3RvbSBsZXZlbHMsIGdyZWF0IGNhcmUgc2hvdWxkCitiZSBleGVyY2lzZWQgd2hlbiBkb2luZyB0aGlzLCBhbmQgaXQgaXMgcG9zc2libHkgKmEgdmVyeSBiYWQgaWRlYSB0byBkZWZpbmUKK2N1c3RvbSBsZXZlbHMgaWYgeW91IGFyZSBkZXZlbG9waW5nIGEgbGlicmFyeSouIFRoYXQncyBiZWNhdXNlIGlmIG11bHRpcGxlCitsaWJyYXJ5IGF1dGhvcnMgYWxsIGRlZmluZSB0aGVpciBvd24gY3VzdG9tIGxldmVscywgdGhlcmUgaXMgYSBjaGFuY2UgdGhhdAordGhlIGxvZ2dpbmcgb3V0cHV0IGZyb20gc3VjaCBtdWx0aXBsZSBsaWJyYXJpZXMgdXNlZCB0b2dldGhlciB3aWxsIGJlCitkaWZmaWN1bHQgZm9yIHRoZSB1c2luZyBkZXZlbG9wZXIgdG8gY29udHJvbCBhbmQvb3IgaW50ZXJwcmV0LCBiZWNhdXNlIGEKK2dpdmVuIG51bWVyaWMgdmFsdWUgbWlnaHQgbWVhbiBkaWZmZXJlbnQgdGhpbmdzIGZvciBkaWZmZXJlbnQgbGlicmFyaWVzLgorCisuLiBfdXNlZnVsLWhhbmRsZXJzOgorCitVc2VmdWwgSGFuZGxlcnMKKy0tLS0tLS0tLS0tLS0tLQorCitJbiBhZGRpdGlvbiB0byB0aGUgYmFzZSA6Y2xhc3M6YEhhbmRsZXJgIGNsYXNzLCBtYW55IHVzZWZ1bCBzdWJjbGFzc2VzIGFyZQorcHJvdmlkZWQ6CisKKyMuIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gc3RyZWFtcyAoZmlsZS1saWtlCisgICBvYmplY3RzKS4KKworIy4gOmNsYXNzOmBGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gZGlzayBmaWxlcy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuQmFzZVJvdGF0aW5nSGFuZGxlcmAgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGhhbmRsZXJzIHRoYXQKKyAgIHJvdGF0ZSBsb2cgZmlsZXMgYXQgYSBjZXJ0YWluIHBvaW50LiBJdCBpcyBub3QgbWVhbnQgdG8gYmUgIGluc3RhbnRpYXRlZAorICAgZGlyZWN0bHkuIEluc3RlYWQsIHVzZSA6Y2xhc3M6YH5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyYCBvcgorICAgOmNsYXNzOmB+aGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYC4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gZGlzaworICAgZmlsZXMsIHdpdGggc3VwcG9ydCBmb3IgbWF4aW11bSBsb2cgZmlsZSBzaXplcyBhbmQgbG9nIGZpbGUgcm90YXRpb24uCisKKyMuIDpjbGFzczpgfmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8KKyAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCisgICBzb2NrZXRzLgorCisjLiA6Y2xhc3M6YH5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIFVEUAorICAgc29ja2V0cy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuU01UUEhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIGEgZGVzaWduYXRlZAorICAgZW1haWwgYWRkcmVzcy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuU3lzTG9nSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBVbml4CisgICBzeXNsb2cgZGFlbW9uLCBwb3NzaWJseSBvbiBhIHJlbW90ZSBtYWNoaW5lLgorCisjLiA6Y2xhc3M6YH5oYW5kbGVycy5OVEV2ZW50TG9nSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYQorICAgV2luZG93cyBOVC8yMDAwL1hQIGV2ZW50IGxvZy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuTWVtb3J5SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBidWZmZXIKKyAgIGluIG1lbW9yeSwgd2hpY2ggaXMgZmx1c2hlZCB3aGVuZXZlciBzcGVjaWZpYyBjcml0ZXJpYSBhcmUgbWV0LgorCisjLiA6Y2xhc3M6YH5oYW5kbGVycy5IVFRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYW4gSFRUUAorICAgc2VydmVyIHVzaW5nIGVpdGhlciBgYEdFVGBgIG9yIGBgUE9TVGBgIHNlbWFudGljcy4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuV2F0Y2hlZEZpbGVIYW5kbGVyYCBpbnN0YW5jZXMgd2F0Y2ggdGhlIGZpbGUgdGhleSBhcmUKKyAgIGxvZ2dpbmcgdG8uIElmIHRoZSBmaWxlIGNoYW5nZXMsIGl0IGlzIGNsb3NlZCBhbmQgcmVvcGVuZWQgdXNpbmcgdGhlIGZpbGUKKyAgIG5hbWUuIFRoaXMgaGFuZGxlciBpcyBvbmx5IHVzZWZ1bCBvbiBVbml4LWxpa2Ugc3lzdGVtczsgV2luZG93cyBkb2VzIG5vdAorICAgc3VwcG9ydCB0aGUgdW5kZXJseWluZyBtZWNoYW5pc20gdXNlZC4KKworIy4gOmNsYXNzOmB+aGFuZGxlcnMuUXVldWVIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhIHF1ZXVlLCBzdWNoIGFzCisgICB0aG9zZSBpbXBsZW1lbnRlZCBpbiB0aGUgOm1vZDpgcXVldWVgIG9yIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlcy4KKworIy4gOmNsYXNzOmBOdWxsSGFuZGxlcmAgaW5zdGFuY2VzIGRvIG5vdGhpbmcgd2l0aCBlcnJvciBtZXNzYWdlcy4gVGhleSBhcmUgdXNlZAorICAgYnkgbGlicmFyeSBkZXZlbG9wZXJzIHdobyB3YW50IHRvIHVzZSBsb2dnaW5nLCBidXQgd2FudCB0byBhdm9pZCB0aGUgJ05vCisgICBoYW5kbGVycyBjb3VsZCBiZSBmb3VuZCBmb3IgbG9nZ2VyIFhYWCcgbWVzc2FnZSB3aGljaCBjYW4gYmUgZGlzcGxheWVkIGlmCisgICB0aGUgbGlicmFyeSB1c2VyIGhhcyBub3QgY29uZmlndXJlZCBsb2dnaW5nLiBTZWUgOnJlZjpgbGlicmFyeS1jb25maWdgIGZvcgorICAgbW9yZSBpbmZvcm1hdGlvbi4KKworLi4gdmVyc2lvbmFkZGVkOjogMy4xCisgICBUaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgVGhlIDpjbGFzczpgfmhhbmRsZXJzLlF1ZXVlSGFuZGxlcmAgY2xhc3MuCisKK1RoZSA6Y2xhc3M6YE51bGxIYW5kbGVyYCwgOmNsYXNzOmBTdHJlYW1IYW5kbGVyYCBhbmQgOmNsYXNzOmBGaWxlSGFuZGxlcmAKK2NsYXNzZXMgYXJlIGRlZmluZWQgaW4gdGhlIGNvcmUgbG9nZ2luZyBwYWNrYWdlLiBUaGUgb3RoZXIgaGFuZGxlcnMgYXJlCitkZWZpbmVkIGluIGEgc3ViLSBtb2R1bGUsIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgLiAoVGhlcmUgaXMgYWxzbyBhbm90aGVyCitzdWItbW9kdWxlLCA6bW9kOmBsb2dnaW5nLmNvbmZpZ2AsIGZvciBjb25maWd1cmF0aW9uIGZ1bmN0aW9uYWxpdHkuKQorCitMb2dnZWQgbWVzc2FnZXMgYXJlIGZvcm1hdHRlZCBmb3IgcHJlc2VudGF0aW9uIHRocm91Z2ggaW5zdGFuY2VzIG9mIHRoZQorOmNsYXNzOmBGb3JtYXR0ZXJgIGNsYXNzLiBUaGV5IGFyZSBpbml0aWFsaXplZCB3aXRoIGEgZm9ybWF0IHN0cmluZyBzdWl0YWJsZSBmb3IKK3VzZSB3aXRoIHRoZSAlIG9wZXJhdG9yIGFuZCBhIGRpY3Rpb25hcnkuCisKK0ZvciBmb3JtYXR0aW5nIG11bHRpcGxlIG1lc3NhZ2VzIGluIGEgYmF0Y2gsIGluc3RhbmNlcyBvZgorOmNsYXNzOmBCdWZmZXJpbmdGb3JtYXR0ZXJgIGNhbiBiZSB1c2VkLiBJbiBhZGRpdGlvbiB0byB0aGUgZm9ybWF0IHN0cmluZyAod2hpY2gKK2lzIGFwcGxpZWQgdG8gZWFjaCBtZXNzYWdlIGluIHRoZSBiYXRjaCksIHRoZXJlIGlzIHByb3Zpc2lvbiBmb3IgaGVhZGVyIGFuZAordHJhaWxlciBmb3JtYXQgc3RyaW5ncy4KKworV2hlbiBmaWx0ZXJpbmcgYmFzZWQgb24gbG9nZ2VyIGxldmVsIGFuZC9vciBoYW5kbGVyIGxldmVsIGlzIG5vdCBlbm91Z2gsCitpbnN0YW5jZXMgb2YgOmNsYXNzOmBGaWx0ZXJgIGNhbiBiZSBhZGRlZCB0byBib3RoIDpjbGFzczpgTG9nZ2VyYCBhbmQKKzpjbGFzczpgSGFuZGxlcmAgaW5zdGFuY2VzICh0aHJvdWdoIHRoZWlyIDptZXRoOmBhZGRGaWx0ZXJgIG1ldGhvZCkuIEJlZm9yZQorZGVjaWRpbmcgdG8gcHJvY2VzcyBhIG1lc3NhZ2UgZnVydGhlciwgYm90aCBsb2dnZXJzIGFuZCBoYW5kbGVycyBjb25zdWx0IGFsbAordGhlaXIgZmlsdGVycyBmb3IgcGVybWlzc2lvbi4gSWYgYW55IGZpbHRlciByZXR1cm5zIGEgZmFsc2UgdmFsdWUsIHRoZSBtZXNzYWdlCitpcyBub3QgcHJvY2Vzc2VkIGZ1cnRoZXIuCisKK1RoZSBiYXNpYyA6Y2xhc3M6YEZpbHRlcmAgZnVuY3Rpb25hbGl0eSBhbGxvd3MgZmlsdGVyaW5nIGJ5IHNwZWNpZmljIGxvZ2dlcgorbmFtZS4gSWYgdGhpcyBmZWF0dXJlIGlzIHVzZWQsIG1lc3NhZ2VzIHNlbnQgdG8gdGhlIG5hbWVkIGxvZ2dlciBhbmQgaXRzCitjaGlsZHJlbiBhcmUgYWxsb3dlZCB0aHJvdWdoIHRoZSBmaWx0ZXIsIGFuZCBhbGwgb3RoZXJzIGRyb3BwZWQuCisKKworLi4gX2xvZ2dpbmctZXhjZXB0aW9uczoKKworRXhjZXB0aW9ucyByYWlzZWQgZHVyaW5nIGxvZ2dpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsb2dnaW5nIHBhY2thZ2UgaXMgZGVzaWduZWQgdG8gc3dhbGxvdyBleGNlcHRpb25zIHdoaWNoIG9jY3VyIHdoaWxlIGxvZ2dpbmcKK2luIHByb2R1Y3Rpb24uIFRoaXMgaXMgc28gdGhhdCBlcnJvcnMgd2hpY2ggb2NjdXIgd2hpbGUgaGFuZGxpbmcgbG9nZ2luZyBldmVudHMKKy0gc3VjaCBhcyBsb2dnaW5nIG1pc2NvbmZpZ3VyYXRpb24sIG5ldHdvcmsgb3Igb3RoZXIgc2ltaWxhciBlcnJvcnMgLSBkbyBub3QKK2NhdXNlIHRoZSBhcHBsaWNhdGlvbiB1c2luZyBsb2dnaW5nIHRvIHRlcm1pbmF0ZSBwcmVtYXR1cmVseS4KKworOmNsYXNzOmBTeXN0ZW1FeGl0YCBhbmQgOmNsYXNzOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9ucyBhcmUgbmV2ZXIKK3N3YWxsb3dlZC4gT3RoZXIgZXhjZXB0aW9ucyB3aGljaCBvY2N1ciBkdXJpbmcgdGhlIDptZXRoOmBlbWl0YCBtZXRob2Qgb2YgYQorOmNsYXNzOmBIYW5kbGVyYCBzdWJjbGFzcyBhcmUgcGFzc2VkIHRvIGl0cyA6bWV0aDpgaGFuZGxlRXJyb3JgIG1ldGhvZC4KKworVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGhhbmRsZUVycm9yYCBpbiA6Y2xhc3M6YEhhbmRsZXJgIGNoZWNrcwordG8gc2VlIGlmIGEgbW9kdWxlLWxldmVsIHZhcmlhYmxlLCA6ZGF0YTpgcmFpc2VFeGNlcHRpb25zYCwgaXMgc2V0LiBJZiBzZXQsIGEKK3RyYWNlYmFjayBpcyBwcmludGVkIHRvIDpkYXRhOmBzeXMuc3RkZXJyYC4gSWYgbm90IHNldCwgdGhlIGV4Y2VwdGlvbiBpcyBzd2FsbG93ZWQuCisKKyoqTm90ZToqKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiA6ZGF0YTpgcmFpc2VFeGNlcHRpb25zYCBpcyBgYFRydWVgYC4gVGhpcyBpcyBiZWNhdXNlCitkdXJpbmcgZGV2ZWxvcG1lbnQsIHlvdSB0eXBpY2FsbHkgd2FudCB0byBiZSBub3RpZmllZCBvZiBhbnkgZXhjZXB0aW9ucyB0aGF0CitvY2N1ci4gSXQncyBhZHZpc2VkIHRoYXQgeW91IHNldCA6ZGF0YTpgcmFpc2VFeGNlcHRpb25zYCB0byBgYEZhbHNlYGAgZm9yIHByb2R1Y3Rpb24KK3VzYWdlLgorCisuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZworCisuLiBfYXJiaXRyYXJ5LW9iamVjdC1tZXNzYWdlczoKKworVXNpbmcgYXJiaXRyYXJ5IG9iamVjdHMgYXMgbWVzc2FnZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoZSBwcmVjZWRpbmcgc2VjdGlvbnMgYW5kIGV4YW1wbGVzLCBpdCBoYXMgYmVlbiBhc3N1bWVkIHRoYXQgdGhlIG1lc3NhZ2UKK3Bhc3NlZCB3aGVuIGxvZ2dpbmcgdGhlIGV2ZW50IGlzIGEgc3RyaW5nLiBIb3dldmVyLCB0aGlzIGlzIG5vdCB0aGUgb25seQorcG9zc2liaWxpdHkuIFlvdSBjYW4gcGFzcyBhbiBhcmJpdHJhcnkgb2JqZWN0IGFzIGEgbWVzc2FnZSwgYW5kIGl0cworOm1ldGg6YF9fc3RyX19gIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBsb2dnaW5nIHN5c3RlbSBuZWVkcyB0byBjb252ZXJ0CitpdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gSW4gZmFjdCwgaWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gYXZvaWQKK2NvbXB1dGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbHRvZ2V0aGVyIC0gZm9yIGV4YW1wbGUsIHRoZQorOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBlbWl0cyBhbiBldmVudCBieSBwaWNrbGluZyBpdCBhbmQgc2VuZGluZyBpdCBvdmVyIHRoZQord2lyZS4KKworCitPcHRpbWl6YXRpb24KKy0tLS0tLS0tLS0tLQorCitGb3JtYXR0aW5nIG9mIG1lc3NhZ2UgYXJndW1lbnRzIGlzIGRlZmVycmVkIHVudGlsIGl0IGNhbm5vdCBiZSBhdm9pZGVkLgorSG93ZXZlciwgY29tcHV0aW5nIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBsb2dnaW5nIG1ldGhvZCBjYW4gYWxzbyBiZQorZXhwZW5zaXZlLCBhbmQgeW91IG1heSB3YW50IHRvIGF2b2lkIGRvaW5nIGl0IGlmIHRoZSBsb2dnZXIgd2lsbCBqdXN0IHRocm93Cithd2F5IHlvdXIgZXZlbnQuIFRvIGRlY2lkZSB3aGF0IHRvIGRvLCB5b3UgY2FuIGNhbGwgdGhlIDptZXRoOmBpc0VuYWJsZWRGb3JgCittZXRob2Qgd2hpY2ggdGFrZXMgYSBsZXZlbCBhcmd1bWVudCBhbmQgcmV0dXJucyB0cnVlIGlmIHRoZSBldmVudCB3b3VsZCBiZQorY3JlYXRlZCBieSB0aGUgTG9nZ2VyIGZvciB0aGF0IGxldmVsIG9mIGNhbGwuIFlvdSBjYW4gd3JpdGUgY29kZSBsaWtlIHRoaXM6OgorCisgICAgaWYgbG9nZ2VyLmlzRW5hYmxlZEZvcihsb2dnaW5nLkRFQlVHKToKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdNZXNzYWdlIHdpdGggJXMsICVzJywgZXhwZW5zaXZlX2Z1bmMxKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVuc2l2ZV9mdW5jMigpKQorCitzbyB0aGF0IGlmIHRoZSBsb2dnZXIncyB0aHJlc2hvbGQgaXMgc2V0IGFib3ZlIGBgREVCVUdgYCwgdGhlIGNhbGxzIHRvCis6ZnVuYzpgZXhwZW5zaXZlX2Z1bmMxYCBhbmQgOmZ1bmM6YGV4cGVuc2l2ZV9mdW5jMmAgYXJlIG5ldmVyIG1hZGUuCisKK1RoZXJlIGFyZSBvdGhlciBvcHRpbWl6YXRpb25zIHdoaWNoIGNhbiBiZSBtYWRlIGZvciBzcGVjaWZpYyBhcHBsaWNhdGlvbnMgd2hpY2gKK25lZWQgbW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlciB3aGF0IGxvZ2dpbmcgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkLiBIZXJlJ3MgYQorbGlzdCBvZiB0aGluZ3MgeW91IGNhbiBkbyB0byBhdm9pZCBwcm9jZXNzaW5nIGR1cmluZyBsb2dnaW5nIHdoaWNoIHlvdSBkb24ndAorbmVlZDoKKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFdoYXQgeW91IGRvbid0IHdhbnQgdG8gY29sbGVjdCAgICAgICAgICAgICAgICB8IEhvdyB0byBhdm9pZCBjb2xsZWN0aW5nIGl0ICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBJbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBjYWxscyB3ZXJlIG1hZGUgZnJvbS4gfCBTZXQgYGBsb2dnaW5nLl9zcmNmaWxlYGAgdG8gYGBOb25lYGAuICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgVGhyZWFkaW5nIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgIHwgU2V0IGBgbG9nZ2luZy5sb2dUaHJlYWRzYGAgdG8gYGAwYGAuICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFByb2Nlc3MgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNldCBgYGxvZ2dpbmcubG9nUHJvY2Vzc2VzYGAgdG8gYGAwYGAuIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCitBbHNvIG5vdGUgdGhhdCB0aGUgY29yZSBsb2dnaW5nIG1vZHVsZSBvbmx5IGluY2x1ZGVzIHRoZSBiYXNpYyBoYW5kbGVycy4gSWYKK3lvdSBkb24ndCBpbXBvcnQgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgYW5kIDptb2Q6YGxvZ2dpbmcuY29uZmlnYCwgdGhleSB3b24ndAordGFrZSB1cCBhbnkgbWVtb3J5LgorCisuLiBzZWVhbHNvOjoKKworICAgTW9kdWxlIDptb2Q6YGxvZ2dpbmdgCisgICAgICBBUEkgcmVmZXJlbmNlIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKyAgIE1vZHVsZSA6bW9kOmBsb2dnaW5nLmNvbmZpZ2AKKyAgICAgIENvbmZpZ3VyYXRpb24gQVBJIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKyAgIE1vZHVsZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAorICAgICAgVXNlZnVsIGhhbmRsZXJzIGluY2x1ZGVkIHdpdGggdGhlIGxvZ2dpbmcgbW9kdWxlLgorCisgICA6cmVmOmBBIGxvZ2dpbmcgY29va2Jvb2sgPGxvZ2dpbmctY29va2Jvb2s+YAorCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9weXBvcnRpbmcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNGVmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdApAQCAtMCwwICsxLDcwMyBAQAorLi4gX3B5cG9ydGluZy1ob3d0bzoKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitQb3J0aW5nIFB5dGhvbiAyIENvZGUgdG8gUHl0aG9uIDMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis6YXV0aG9yOiBCcmV0dCBDYW5ub24KKworLi4gdG9waWM6OiBBYnN0cmFjdAorCisgICBXaXRoIFB5dGhvbiAzIGJlaW5nIHRoZSBmdXR1cmUgb2YgUHl0aG9uIHdoaWxlIFB5dGhvbiAyIGlzIHN0aWxsIGluIGFjdGl2ZQorICAgdXNlLCBpdCBpcyBnb29kIHRvIGhhdmUgeW91ciBwcm9qZWN0IGF2YWlsYWJsZSBmb3IgYm90aCBtYWpvciByZWxlYXNlcyBvZgorICAgUHl0aG9uLiBUaGlzIGd1aWRlIGlzIG1lYW50IHRvIGhlbHAgeW91IGNob29zZSB3aGljaCBzdHJhdGVneSB3b3JrcyBiZXN0CisgICBmb3IgeW91ciBwcm9qZWN0IHRvIHN1cHBvcnQgYm90aCBQeXRob24gMiAmIDMgYWxvbmcgd2l0aCBob3cgdG8gZXhlY3V0ZQorICAgdGhhdCBzdHJhdGVneS4KKworICAgSWYgeW91IGFyZSBsb29raW5nIHRvIHBvcnQgYW4gZXh0ZW5zaW9uIG1vZHVsZSBpbnN0ZWFkIG9mIHB1cmUgUHl0aG9uIGNvZGUsCisgICBwbGVhc2Ugc2VlIDpyZWY6YGNwb3J0aW5nLWhvd3RvYC4KKworCitDaG9vc2luZyBhIFN0cmF0ZWd5Cis9PT09PT09PT09PT09PT09PT09CisKK1doZW4gYSBwcm9qZWN0IG1ha2VzIHRoZSBkZWNpc2lvbiB0aGF0IGl0J3MgdGltZSB0byBzdXBwb3J0IGJvdGggUHl0aG9uIDIgJiAzLAorYSBkZWNpc2lvbiBuZWVkcyB0byBiZSBtYWRlIGFzIHRvIGhvdyB0byBnbyBhYm91dCBhY2NvbXBsaXNoaW5nIHRoYXQgZ29hbC4KK1RoZSBjaG9zZW4gc3RyYXRlZ3kgd2lsbCBkZXBlbmQgb24gaG93IGxhcmdlIHRoZSBwcm9qZWN0J3MgZXhpc3RpbmcKK2NvZGViYXNlIGlzIGFuZCBob3cgbXVjaCBkaXZlcmdlbmNlIHlvdSB3YW50IGZyb20geW91ciBQeXRob24gMiBjb2RlYmFzZSBmcm9tCit5b3VyIFB5dGhvbiAzIG9uZSAoZS5nLiwgc3RhcnRpbmcgYSBuZXcgdmVyc2lvbiB3aXRoIFB5dGhvbiAzKS4KKworSWYgeW91ciBwcm9qZWN0IGlzIGJyYW5kLW5ldyBvciBkb2VzIG5vdCBoYXZlIGEgbGFyZ2UgY29kZWJhc2UsIHRoZW4geW91IG1heQord2FudCB0byBjb25zaWRlciB3cml0aW5nL3BvcnRpbmcgOnJlZjpgYWxsIG9mIHlvdXIgY29kZSBmb3IgUHl0aG9uIDMKK2FuZCB1c2UgM3RvMiA8dXNlXzN0bzI+YCB0byBwb3J0IHlvdXIgY29kZSBmb3IgUHl0aG9uIDIuCisKK0lmIHlvdSB3b3VsZCBwcmVmZXIgdG8gbWFpbnRhaW4gYSBjb2RlYmFzZSB3aGljaCBpcyBzZW1hbnRpY2FsbHkgKiphbmQqKgorc3ludGFjdGljYWxseSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5LCB5b3UgY2FuIHdyaXRlCis6cmVmOmB1c2Vfc2FtZV9zb3VyY2VgLiBXaGlsZSB0aGlzIHRlbmRzIHRvIGxlYWQgdG8gc29tZXdoYXQgbm9uLWlkaW9tYXRpYworY29kZSwgaXQgZG9lcyBtZWFuIHlvdSBrZWVwIGEgcmFwaWQgZGV2ZWxvcG1lbnQgcHJvY2VzcyBmb3IgeW91LCB0aGUgZGV2ZWxvcGVyLgorCitGaW5hbGx5LCB5b3UgZG8gaGF2ZSB0aGUgb3B0aW9uIG9mIDpyZWY6YHVzaW5nIDJ0bzMgPHVzZV8ydG8zPmAgdG8gdHJhbnNsYXRlCitQeXRob24gMiBjb2RlIGludG8gUHl0aG9uIDMgY29kZSAod2l0aCBzb21lIG1hbnVhbCBoZWxwKS4gVGhpcyBjYW4gdGFrZSB0aGUKK2Zvcm0gb2YgYnJhbmNoaW5nIHlvdXIgY29kZSBhbmQgdXNpbmcgMnRvMyB0byBzdGFydCBhIFB5dGhvbiAzIGJyYW5jaC4gWW91IGNhbgorYWxzbyBoYXZlIHVzZXJzIHBlcmZvcm0gdGhlIHRyYW5zbGF0aW9uIGFzIGluc3RhbGxhdGlvbiB0aW1lIGF1dG9tYXRpY2FsbHkgc28KK3RoYXQgeW91IG9ubHkgaGF2ZSB0byBtYWludGFpbiBhIFB5dGhvbiAyIGNvZGViYXNlLgorCitSZWdhcmRsZXNzIG9mIHdoaWNoIGFwcHJvYWNoIHlvdSBjaG9vc2UsIHBvcnRpbmcgaXMgbm90IGFzIGhhcmQgb3IKK3RpbWUtY29uc3VtaW5nIGFzIHlvdSBtaWdodCBpbml0aWFsbHkgdGhpbmsuIFlvdSBjYW4gYWxzbyB0YWNrbGUgdGhlIHByb2JsZW0KK3BpZWNlLW1lYWwgYXMgYSBnb29kIHBvcnRpb24gb2YgcG9ydGluZyBpcyBzaW1wbHkgdXBkYXRpbmcgeW91ciBjb2RlIHRvIGZvbGxvdworY3VycmVudCBiZXN0IHByYWN0aWNlcyBpbiBhIFB5dGhvbiAyLzMgY29tcGF0aWJsZSB3YXkuCisKKworVW5pdmVyc2FsIEJpdHMgb2YgQWR2aWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUmVnYXJkbGVzcyBvZiB3aGF0IHN0cmF0ZWd5IHlvdSBwaWNrLCB0aGVyZSBhcmUgYSBmZXcgdGhpbmdzIHlvdSBzaG91bGQKK2NvbnNpZGVyLgorCitPbmUgaXMgbWFrZSBzdXJlIHlvdSBoYXZlIGEgcm9idXN0IHRlc3Qgc3VpdGUuIFlvdSBuZWVkIHRvIG1ha2Ugc3VyZSBldmVyeXRoaW5nCitjb250aW51ZXMgdG8gd29yaywganVzdCBsaWtlIHdoZW4geW91IHN1cHBvcnQgYSBuZXcgbWlub3IgdmVyc2lvbiBvZiBQeXRob24uCitUaGlzIG1lYW5zIG1ha2luZyBzdXJlIHlvdXIgdGVzdCBzdWl0ZSBpcyB0aG9yb3VnaCBhbmQgaXMgcG9ydGVkIHByb3Blcmx5CitiZXR3ZWVuIFB5dGhvbiAyICYgMy4gWW91IHdpbGwgYWxzbyBtb3N0IGxpa2VseSB3YW50IHRvIHVzZSBzb21ldGhpbmcgbGlrZSB0b3hfCit0byBhdXRvbWF0ZSB0ZXN0aW5nIGJldHdlZW4gYm90aCBhIFB5dGhvbiAyIGFuZCBQeXRob24gMyBWTS4KKworVHdvLCBvbmNlIHlvdXIgcHJvamVjdCBoYXMgUHl0aG9uIDMgc3VwcG9ydCwgbWFrZSBzdXJlIHRvIGFkZCB0aGUgcHJvcGVyCitjbGFzc2lmaWVyIG9uIHRoZSBDaGVlc2VzaG9wXyAoUHlQSV8pLiBUbyBoYXZlIHlvdXIgcHJvamVjdCBsaXN0ZWQgYXMgUHl0aG9uIDMKK2NvbXBhdGlibGUgaXQgbXVzdCBoYXZlIHRoZQorYFB5dGhvbiAzIGNsYXNzaWZpZXIgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT86YWN0aW9uPWJyb3dzZSZjPTUzMz5gXworKGZyb20KK2h0dHA6Ly90ZWNoc3BvdC56enplZWsub3JnLzIwMTEvMDEvMjQvenp6ZWVrLXMtZ3VpZGUtdG8tcHl0aG9uLTMtcG9ydGluZy8pOjoKKworICAgc2V0dXAoCisgICAgIG5hbWU9J1lvdXIgTGlicmFyeScsCisgICAgIHZlcnNpb249JzEuMCcsCisgICAgIGNsYXNzaWZpZXJzPVsKKyAgICAgICAgICMgbWFrZSBzdXJlIHRvIHVzZSA6OiBQeXRob24gKmFuZCogOjogUHl0aG9uIDo6IDMgc28KKyAgICAgICAgICMgdGhhdCBweXBpIGNhbiBsaXN0IHRoZSBwYWNrYWdlIG9uIHRoZSBweXRob24gMyBwYWdlCisgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKKyAgICAgICAgICdQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMycKKyAgICAgXSwKKyAgICAgcGFja2FnZXM9Wyd5b3VybGlicmFyeSddLAorICAgICAjIG1ha2Ugc3VyZSB0byBhZGQgY3VzdG9tX2ZpeGVycyB0byB0aGUgTUFOSUZFU1QuaW4KKyAgICAgaW5jbHVkZV9wYWNrYWdlX2RhdGE9VHJ1ZSwKKyAgICAgIyAuLi4KKyAgICkKKworCitEb2luZyBzbyB3aWxsIGNhdXNlIHlvdXIgcHJvamVjdCB0byBzaG93IHVwIGluIHRoZQorYFB5dGhvbiAzIHBhY2thZ2VzIGxpc3QKKzxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1icm93c2UmYz01MzMmc2hvdz1hbGw+YF8uIFlvdSB3aWxsIGtub3cKK3lvdSBzZXQgdGhlIGNsYXNzaWZpZXIgcHJvcGVybHkgYXMgdmlzaXRpbmcgeW91ciBwcm9qZWN0IHBhZ2Ugb24gdGhlIENoZWVzZXNob3AKK3dpbGwgc2hvdyBhIFB5dGhvbiAzIGxvZ28gaW4gdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBwYWdlLgorCitUaHJlZSwgdGhlIHNpeF8gcHJvamVjdCBwcm92aWRlcyBhIGxpYnJhcnkgd2hpY2ggaGVscHMgaXJvbiBvdXQgZGlmZmVyZW5jZXMKK2JldHdlZW4gUHl0aG9uIDIgJiAzLiBJZiB5b3UgZmluZCB0aGVyZSBpcyBhIHN0aWNreSBwb2ludCB0aGF0IGlzIGEgY29udGludWFsCitwb2ludCBvZiBjb250ZW50aW9uIGluIHlvdXIgdHJhbnNsYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgY29kZSwgY29uc2lkZXIgdXNpbmcKK2Egc291cmNlLWNvbXBhdGlibGUgc29sdXRpb24gcmVseWluZyBvbiBzaXguIElmIHlvdSBoYXZlIHRvIGNyZWF0ZSB5b3VyIG93bgorUHl0aG9uIDIvMyBjb21wYXRpYmxlIHNvbHV0aW9uLCB5b3UgY2FuIHVzZSBgYHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gM2BgIGFzIGEKK2d1YXJkLgorCitGb3VyLCByZWFkIGFsbCB0aGUgYXBwcm9hY2hlcy4gSnVzdCBiZWNhdXNlIHNvbWUgYml0IG9mIGFkdmljZSBhcHBsaWVzIHRvIG9uZQorYXBwcm9hY2ggbW9yZSB0aGFuIGFub3RoZXIgZG9lc24ndCBtZWFuIHRoYXQgc29tZSBhZHZpY2UgZG9lc24ndCBhcHBseSB0byBvdGhlcgorc3RyYXRlZ2llcy4KKworRml2ZSwgZHJvcCBzdXBwb3J0IGZvciBvbGRlciBQeXRob24gdmVyc2lvbnMgaWYgcG9zc2libGUuIGBQeXRob24gMi41YF8KK2ludHJvZHVjZWQgYSBsb3Qgb2YgdXNlZnVsIHN5bnRheCBhbmQgbGlicmFyaWVzIHdoaWNoIGhhdmUgYmVjb21lIGlkaW9tYXRpYworaW4gUHl0aG9uIDMuIGBQeXRob24gMi42YF8gaW50cm9kdWNlZCBmdXR1cmUgc3RhdGVtZW50cyB3aGljaCBtYWtlcworY29tcGF0aWJpbGl0eSBtdWNoIGVhc2llciBpZiB5b3UgYXJlIGdvaW5nIGZyb20gUHl0aG9uIDIgdG8gMy4KK2BQeXRob24gMi43YF8gY29udGludWVzIHRoZSB0cmVuZCBpbiB0aGUgc3RkbGliLiBTbyBjaG9vc2UgdGhlIG5ld2VzdCB2ZXJzaW9uCitvZiBQeXRob24gd2hpY2ggeW91IGJlbGlldmUgY2FuIGJlIHlvdXIgbWluaW11bSBzdXBwb3J0IHZlcnNpb24KK2FuZCB3b3JrIGZyb20gdGhlcmUuCisKKworLi4gX3RveDogaHR0cDovL2NvZGVzcGVhay5uZXQvdG94LworLi4gX0NoZWVzZXNob3A6CisuLiBfUHlQSTogaHR0cDovL3B5cGkucHl0aG9uLm9yZy8KKy4uIF9zaXg6IGh0dHA6Ly9wYWNrYWdlcy5weXRob24ub3JnL3NpeAorLi4gX1B5dGhvbiAyLjc6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjcueAorLi4gX1B5dGhvbiAyLjY6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjYueAorLi4gX1B5dGhvbiAyLjU6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjUueAorLi4gX1B5dGhvbiAyLjQ6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQueAorLi4gX1B5dGhvbiAyLjM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjMueAorLi4gX1B5dGhvbiAyLjI6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjIueAorCisKKy4uIF91c2VfM3RvMjoKKworUHl0aG9uIDMgYW5kIDN0bzIKKz09PT09PT09PT09PT09PT09CisKK0lmIHlvdSBhcmUgc3RhcnRpbmcgYSBuZXcgcHJvamVjdCBvciB5b3VyIGNvZGViYXNlIGlzIHNtYWxsIGVub3VnaCwgeW91IG1heQord2FudCB0byBjb25zaWRlciB3cml0aW5nIHlvdXIgY29kZSBmb3IgUHl0aG9uIDMgYW5kIGJhY2twb3J0aW5nIHRvIFB5dGhvbiAyCit1c2luZyAzdG8yXy4gVGhhbmtzIHRvIFB5dGhvbiAzIGJlaW5nIG1vcmUgc3RyaWN0IGFib3V0IHRoaW5ncyB0aGFuIFB5dGhvbiAyCisoZS5nLiwgYnl0ZXMgdnMuIHN0cmluZ3MpLCB0aGUgc291cmNlIHRyYW5zbGF0aW9uIGNhbiBiZSBlYXNpZXIgYW5kIG1vcmUKK3N0cmFpZ2h0Zm9yd2FyZCB0aGFuIGZyb20gUHl0aG9uIDIgdG8gMy4gUGx1cyBpdCBnaXZlcyB5b3UgbW9yZSBkaXJlY3QKK2V4cGVyaWVuY2UgZGV2ZWxvcGluZyBpbiBQeXRob24gMyB3aGljaCwgc2luY2UgaXQgaXMgdGhlIGZ1dHVyZSBvZiBQeXRob24sIGlzIGEKK2dvb2QgdGhpbmcgbG9uZy10ZXJtLgorCitBIGRyYXdiYWNrIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCAzdG8yIGlzIGEgdGhpcmQtcGFydHkgcHJvamVjdC4gVGhpcyBtZWFucwordGhhdCB0aGUgUHl0aG9uIGNvcmUgZGV2ZWxvcGVycyAoYW5kIHRodXMgdGhpcyBndWlkZSkgY2FuIG1ha2Ugbm8gcHJvbWlzZXMKK2Fib3V0IGhvdyB3ZWxsIDN0bzIgd29ya3MgYXQgYW55IHRpbWUuIFRoZXJlIGlzIG5vdGhpbmcgdG8gc3VnZ2VzdCwgdGhvdWdoLAordGhhdCAzdG8yIGlzIG5vdCBhIGhpZ2gtcXVhbGl0eSBwcm9qZWN0LgorCisKKy4uIF8zdG8yOiBodHRwczovL2JpdGJ1Y2tldC5vcmcvYW1lbnRham8vbGliM3RvMi9vdmVydmlldworCisKKy4uIF91c2VfMnRvMzoKKworUHl0aG9uIDIgYW5kIDJ0bzMKKz09PT09PT09PT09PT09PT09CisKK0luY2x1ZGVkIHdpdGggUHl0aG9uIHNpbmNlIDIuNiwgdGhlIDJ0bzNfIHRvb2wgKGFuZCA6bW9kOmBsaWIydG8zYCBtb2R1bGUpCitoZWxwcyB3aXRoIHBvcnRpbmcgUHl0aG9uIDIgdG8gUHl0aG9uIDMgYnkgcGVyZm9ybWluZyB2YXJpb3VzIHNvdXJjZQordHJhbnNsYXRpb25zLiBUaGlzIGlzIGEgcGVyZmVjdCBzb2x1dGlvbiBmb3IgcHJvamVjdHMgd2hpY2ggd2lzaCB0byBicmFuY2gKK3RoZWlyIFB5dGhvbiAzIGNvZGUgZnJvbSB0aGVpciBQeXRob24gMiBjb2RlYmFzZSBhbmQgbWFpbnRhaW4gdGhlbSBhcworaW5kZXBlbmRlbnQgY29kZWJhc2VzLiBZb3UgY2FuIGV2ZW4gYmVnaW4gcHJlcGFyaW5nIHRvIHVzZSB0aGlzIGFwcHJvYWNoCit0b2RheSBieSB3cml0aW5nIGZ1dHVyZS1jb21wYXRpYmxlIFB5dGhvbiBjb2RlIHdoaWNoIHdvcmtzIGNsZWFubHkgaW4KK1B5dGhvbiAyIGluIGNvbmp1bmN0aW9uIHdpdGggMnRvMzsgYWxsIHN0ZXBzIG91dGxpbmVkIGJlbG93IHdpbGwgd29yaword2l0aCBQeXRob24gMiBjb2RlIHVwIHRvIHRoZSBwb2ludCB3aGVuIHRoZSBhY3R1YWwgdXNlIG9mIDJ0bzMgb2NjdXJzLgorCitVc2Ugb2YgMnRvMyBhcyBhbiBvbi1kZW1hbmQgdHJhbnNsYXRpb24gc3RlcCBhdCBpbnN0YWxsIHRpbWUgaXMgYWxzbyBwb3NzaWJsZSwKK3ByZXZlbnRpbmcgdGhlIG5lZWQgdG8gbWFpbnRhaW4gYSBzZXBhcmF0ZSBQeXRob24gMyBjb2RlYmFzZSwgYnV0IHRoaXMgYXBwcm9hY2gKK2RvZXMgY29tZSB3aXRoIHNvbWUgZHJhd2JhY2tzLiBXaGlsZSB1c2VycyB3aWxsIG9ubHkgaGF2ZSB0byBwYXkgdGhlCit0cmFuc2xhdGlvbiBjb3N0IG9uY2UgYXQgaW5zdGFsbGF0aW9uLCB5b3UgYXMgYSBkZXZlbG9wZXIgd2lsbCBuZWVkIHRvIHBheSB0aGUKK2Nvc3QgcmVndWxhcmx5IGR1cmluZyBkZXZlbG9wbWVudC4gSWYgeW91ciBjb2RlYmFzZSBpcyBzdWZmaWNpZW50bHkgbGFyZ2UKK2Vub3VnaCB0aGVuIHRoZSB0cmFuc2xhdGlvbiBzdGVwIGVuZHMgdXAgYWN0aW5nIGxpa2UgYSBjb21waWxhdGlvbiBzdGVwLAorcm9iYmluZyB5b3Ugb2YgdGhlIHJhcGlkIGRldmVsb3BtZW50IHByb2Nlc3MgeW91IGFyZSB1c2VkIHRvIHdpdGggUHl0aG9uLgorT2J2aW91c2x5IHRoZSB0aW1lIHJlcXVpcmVkIHRvIHRyYW5zbGF0ZSBhIHByb2plY3Qgd2lsbCB2YXJ5LCBzbyBkbyBhbgorZXhwZXJpbWVudGFsIHRyYW5zbGF0aW9uIGp1c3QgdG8gc2VlIGhvdyBsb25nIGl0IHRha2VzIHRvIGV2YWx1YXRlIHdoZXRoZXIgeW91CitwcmVmZXIgdGhpcyBhcHByb2FjaCBjb21wYXJlZCB0byB1c2luZyA6cmVmOmB1c2Vfc2FtZV9zb3VyY2VgIG9yIHNpbXBseSBrZWVwaW5nCithIHNlcGFyYXRlIFB5dGhvbiAzIGNvZGViYXNlLgorCitCZWxvdyBhcmUgdGhlIHR5cGljYWwgc3RlcHMgdGFrZW4gYnkgYSBwcm9qZWN0IHdoaWNoIHVzZXMgYSAydG8zLWJhc2VkIGFwcHJvYWNoCit0byBzdXBwb3J0aW5nIFB5dGhvbiAyICYgMy4KKworCitTdXBwb3J0IFB5dGhvbiAyLjcKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBcyBhIGZpcnN0IHN0ZXAsIG1ha2Ugc3VyZSB0aGF0IHlvdXIgcHJvamVjdCBpcyBjb21wYXRpYmxlIHdpdGggYFB5dGhvbiAyLjdgXy4KK1RoaXMgaXMganVzdCBnb29kIHRvIGRvIGFzIFB5dGhvbiAyLjcgaXMgdGhlIGxhc3QgcmVsZWFzZSBvZiBQeXRob24gMiBhbmQgdGh1cword2lsbCBiZSB1c2VkIGZvciBhIHJhdGhlciBsb25nIHRpbWUuIEl0IGFsc28gYWxsb3dzIGZvciB1c2Ugb2YgdGhlIGBgLTNgYCBmbGFnCit0byBQeXRob24gdG8gaGVscCBkaXNjb3ZlciBwbGFjZXMgaW4geW91ciBjb2RlIHdoaWNoIDJ0bzMgY2Fubm90IGhhbmRsZSBidXQgYXJlCitrbm93biB0byBjYXVzZSBpc3N1ZXMuCisKK1RyeSB0byBTdXBwb3J0IGBQeXRob24gMi42YF8gYW5kIE5ld2VyIE9ubHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hpbGUgbm90IHBvc3NpYmxlIGZvciBhbGwgcHJvamVjdHMsIGlmIHlvdSBjYW4gc3VwcG9ydCBgUHl0aG9uIDIuNmBfIGFuZCBuZXdlcgorKipvbmx5KiosIHlvdXIgbGlmZSB3aWxsIGJlIG11Y2ggZWFzaWVyLiBWYXJpb3VzIGZ1dHVyZSBzdGF0ZW1lbnRzLCBzdGRsaWIKK2FkZGl0aW9ucywgZXRjLiBleGlzdCBvbmx5IGluIFB5dGhvbiAyLjYgYW5kIGxhdGVyIHdoaWNoIGdyZWF0bHkgYXNzaXN0IGluCitwb3J0aW5nIHRvIFB5dGhvbiAzLiBCdXQgaWYgeW91IHByb2plY3QgbXVzdCBrZWVwIHN1cHBvcnQgZm9yIGBQeXRob24gMi41YF8gKG9yCitldmVuIGBQeXRob24gMi40YF8pIHRoZW4gaXQgaXMgc3RpbGwgcG9zc2libGUgdG8gcG9ydCB0byBQeXRob24gMy4KKworQmVsb3cgYXJlIHRoZSBiZW5lZml0cyB5b3UgZ2FpbiBpZiB5b3Ugb25seSBoYXZlIHRvIHN1cHBvcnQgUHl0aG9uIDIuNiBhbmQKK25ld2VyLiBTb21lIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHBlcnNvbmFsIGNob2ljZSB3aGlsZSBvdGhlcnMgYXJlCisqKnN0cm9uZ2x5KiogcmVjb21tZW5kZWQgKHRoZSBvbmVzIHRoYXQgYXJlIG1vcmUgZm9yIHBlcnNvbmFsIGNob2ljZSBhcmUKK2xhYmVsZWQgYXMgc3VjaCkuICBJZiB5b3UgY29udGludWUgdG8gc3VwcG9ydCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24gdGhlbiB5b3UKK2F0IGxlYXN0IG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBzaXR1YXRpb25zIHRoYXQgdGhlc2Ugc29sdXRpb25zIGZpeC4KKworCitgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb25gYAorJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworVGhpcyBpcyBhIHBlcnNvbmFsIGNob2ljZS4gMnRvMyBoYW5kbGVzIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBwcmludAorc3RhdGVtZW50IHRvIHRoZSBwcmludCBmdW5jdGlvbiByYXRoZXIgd2VsbCBzbyB0aGlzIGlzIGFuIG9wdGlvbmFsIHN0ZXAuIFRoaXMKK2Z1dHVyZSBzdGF0ZW1lbnQgZG9lcyBoZWxwLCB0aG91Z2gsIHdpdGggZ2V0dGluZyB1c2VkIHRvIHR5cGluZworYGBwcmludCgnSGVsbG8sIFdvcmxkJylgYCBpbnN0ZWFkIG9mIGBgcHJpbnQgJ0hlbGxvLCBXb3JsZCdgYC4KKworCitgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsc2BgCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCisKK0Fub3RoZXIgcGVyc29uYWwgY2hvaWNlLiBZb3UgY2FuIGFsd2F5cyBtYXJrIHdoYXQgeW91IHdhbnQgdG8gYmUgYSAodW5pY29kZSkKK3N0cmluZyB3aXRoIGEgYGB1YGAgcHJlZml4IHRvIGdldCB0aGUgc2FtZSBlZmZlY3QuIEJ1dCByZWdhcmRsZXNzIG9mIHdoZXRoZXIKK3lvdSB1c2UgdGhpcyBmdXR1cmUgc3RhdGVtZW50IG9yIG5vdCwgeW91ICoqbXVzdCoqIG1ha2Ugc3VyZSB5b3Uga25vdyBleGFjdGx5Cit3aGljaCBQeXRob24gMiBzdHJpbmdzIHlvdSB3YW50IHRvIGJlIGJ5dGVzLCBhbmQgd2hpY2ggYXJlIHRvIGJlIHN0cmluZ3MuIFRoaXMKK21lYW5zIHlvdSBzaG91bGQsICoqYXQgbWluaW11bSoqIG1hcmsgYWxsIHN0cmluZ3MgdGhhdCBhcmUgbWVhbnQgdG8gYmUgdGV4dAorc3RyaW5ncyB3aXRoIGEgYGB1YGAgcHJlZml4IGlmIHlvdSBkbyBub3QgdXNlIHRoaXMgZnV0dXJlIHN0YXRlbWVudC4KKworCitCeXRlcyBsaXRlcmFscworJycnJycnJycnJycnJycKKworVGhpcyBpcyBhICoqdmVyeSoqIGltcG9ydGFudCBvbmUuIFRoZSBhYmlsaXR5IHRvIHByZWZpeCBQeXRob24gMiBzdHJpbmdzIHRoYXQKK2FyZSBtZWFudCB0byBjb250YWluIGJ5dGVzIHdpdGggYSBgYGJgYCBwcmVmaXggaGVscCB0byB2ZXJ5IGNsZWFybHkgZGVsaW5lYXRlCit3aGF0IGlzIGFuZCBpcyBub3QgYSBQeXRob24gMyBzdHJpbmcuIFdoZW4geW91IHJ1biAydG8zIG9uIGNvZGUsIGFsbCBQeXRob24gMgorc3RyaW5ncyBiZWNvbWUgUHl0aG9uIDMgc3RyaW5ncyAqKnVubGVzcyoqIHRoZXkgYXJlIHByZWZpeGVkIHdpdGggYGBiYGAuCisKK1RoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gYnl0ZSBsaXRlcmFscyBpbiBQeXRob24gMiBhbmQgdGhvc2UgaW4KK1B5dGhvbiAzIHRoYW5rcyB0byB0aGUgYnl0ZXMgdHlwZSBqdXN0IGJlaW5nIGFuIGFsaWFzIHRvIGBgc3RyYGAgaW4gUHl0aG9uIDIuCitQcm9iYWJseSB0aGUgYmlnZ2VzdCAiZ290Y2hhIiBpcyB0aGF0IGluZGV4aW5nIHJlc3VsdHMgaW4gZGlmZmVyZW50IHZhbHVlcy4gSW4KK1B5dGhvbiAyLCB0aGUgdmFsdWUgb2YgYGBiJ3B5J1sxXWBgIGlzIGBgJ3knYGAsIHdoaWxlIGluIFB5dGhvbiAzIGl0J3MgYGAxMjFgYC4KK1lvdSBjYW4gYXZvaWQgdGhpcyBkaXNwYXJpdHkgYnkgYWx3YXlzIHNsaWNpbmcgYXQgdGhlIHNpemUgb2YgYSBzaW5nbGUgZWxlbWVudDoKK2BgYidweSdbMToyXWBgIGlzIGBgJ3knYGAgaW4gUHl0aG9uIDIgYW5kIGBgYid5J2BgIGluIFB5dGhvbiAzIChpLmUuLCBjbG9zZQorZW5vdWdoKS4KKworWW91IGNhbm5vdCBjb25jYXRlbmF0ZSBieXRlcyBhbmQgc3RyaW5ncyBpbiBQeXRob24gMy4gQnV0IHNpbmNlIGluIFB5dGhvbgorMiBoYXMgYnl0ZXMgYWxpYXNlZCB0byBgYHN0cmBgLCBpdCB3aWxsIHN1Y2NlZWQ6IGBgYidhJyArIHUnYidgYCB3b3JrcyBpbgorUHl0aG9uIDIsIGJ1dCBgYGInYScgKyAnYidgYCBpbiBQeXRob24gMyBpcyBhIDpleGM6YFR5cGVFcnJvcmAuIEEgc2ltaWxhciBpc3N1ZQorYWxzbyBjb21lcyBhYm91dCB3aGVuIGRvaW5nIGNvbXBhcmlzb25zIGJldHdlZW4gYnl0ZXMgYW5kIHN0cmluZ3MuCisKKworU3VwcG9ydGluZyBgUHl0aG9uIDIuNWBfIGFuZCBOZXdlciBPbmx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGFyZSBzdXBwb3J0aW5nIGBQeXRob24gMi41YF8gYW5kIG5ld2VyIHRoZXJlIGFyZSBzdGlsbCBzb21lIGZlYXR1cmVzIG9mCitQeXRob24gdGhhdCB5b3UgY2FuIHV0aWxpemUuCisKKworYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydGBgCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworSW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0cyAoZS5nLiwgaW1wb3J0aW5nIGBgc3BhbS5iYWNvbmBgIGZyb20gd2l0aGluCitgYHNwYW0uZWdnc2BgIHdpdGggdGhlIHN0YXRlbWVudCBgYGltcG9ydCBiYWNvbmBgKSBkb2VzIG5vdCB3b3JrIGluIFB5dGhvbiAzLgorVGhpcyBmdXR1cmUgc3RhdGVtZW50IG1vdmVzIGF3YXkgZnJvbSB0aGF0IGFuZCBhbGxvd3MgdGhlIHVzZSBvZiBleHBsaWNpdAorcmVsYXRpdmUgaW1wb3J0cyAoZS5nLiwgYGBmcm9tIC4gaW1wb3J0IGJhY29uYGApLgorCitJbiBgUHl0aG9uIDIuNWBfIHlvdSBtdXN0IHVzZQordGhlIF9fZnV0dXJlX18gc3RhdGVtZW50IHRvIGdldCB0byB1c2UgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBhbmQgcHJldmVudAoraW1wbGljaXQgb25lcy4gSW4gYFB5dGhvbiAyLjZgXyBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIGFyZSBhdmFpbGFibGUgd2l0aG91dAordGhlIHN0YXRlbWVudCwgYnV0IHlvdSBzdGlsbCB3YW50IHRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudCB0byBwcmV2ZW50IGltcGxpY2l0CityZWxhdGl2ZSBpbXBvcnRzLiBJbiBgUHl0aG9uIDIuN2BfIHRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudCBpcyBub3QgbmVlZGVkLiBJbgorb3RoZXIgd29yZHMsIHVubGVzcyB5b3UgYXJlIG9ubHkgc3VwcG9ydGluZyBQeXRob24gMi43IG9yIGEgdmVyc2lvbiBlYXJsaWVyCit0aGFuIFB5dGhvbiAyLjUsIHVzZSB0aGUgX19mdXR1cmVfXyBzdGF0ZW1lbnQuCisKKworCitIYW5kbGUgQ29tbW9uICJHb3RjaGFzIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgYXJlIGEgZmV3IHRoaW5ncyB0aGF0IGp1c3QgY29uc2lzdGVudGx5IGNvbWUgdXAgYXMgc3RpY2tpbmcgcG9pbnRzIGZvcgorcGVvcGxlIHdoaWNoIDJ0bzMgY2Fubm90IGhhbmRsZSBhdXRvbWF0aWNhbGx5IG9yIGNhbiBlYXNpbHkgYmUgZG9uZSBpbiBQeXRob24gMgordG8gaGVscCBtb2Rlcm5pemUgeW91ciBjb2RlLgorCisKK2BgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbmBgCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworCitXaGlsZSB0aGUgZXhhY3Qgc2FtZSBvdXRjb21lIGNhbiBiZSBoYWQgYnkgdXNpbmcgdGhlIGBgLVFuZXdgYCBhcmd1bWVudCB0bworUHl0aG9uLCB1c2luZyB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQgbGlmdHMgdGhlIHJlcXVpcmVtZW50IHRoYXQgeW91ciB1c2VycyB1c2UKK3RoZSBmbGFnIHRvIGdldCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgZGl2aXNpb24gaW4gUHl0aG9uIDMKKyhlLmcuLCBgYDEvMiA9PSAwLjU7IDEvLzIgPT0gMGBgKS4KKworCisKK1NwZWNpZnkgd2hlbiBvcGVuaW5nIGEgZmlsZSBhcyBiaW5hcnkKKycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKKworVW5sZXNzIHlvdSBoYXZlIGJlZW4gd29ya2luZyBvbiBXaW5kb3dzLCB0aGVyZSBpcyBhIGNoYW5jZSB5b3UgaGF2ZSBub3QgYWx3YXlzCitib3RoZXJlZCB0byBhZGQgdGhlIGBgYmBgIG1vZGUgd2hlbiBvcGVuaW5nIGEgYmluYXJ5IGZpbGUgKGUuZy4sIGBgcmJgYCBmb3IKK2JpbmFyeSByZWFkaW5nKS4gIFVuZGVyIFB5dGhvbiAzLCBiaW5hcnkgZmlsZXMgYW5kIHRleHQgZmlsZXMgYXJlIGNsZWFybHkKK2Rpc3RpbmN0IGFuZCBtdXR1YWxseSBpbmNvbXBhdGlibGU7IHNlZSB0aGUgOm1vZDpgaW9gIG1vZHVsZSBmb3IgZGV0YWlscy4KK1RoZXJlZm9yZSwgeW91ICoqbXVzdCoqIG1ha2UgYSBkZWNpc2lvbiBvZiB3aGV0aGVyIGEgZmlsZSB3aWxsIGJlIHVzZWQgZm9yCitiaW5hcnkgYWNjZXNzIChhbGxvd2luZyB0byByZWFkIGFuZC9vciB3cml0ZSBieXRlcyBkYXRhKSBvciB0ZXh0IGFjY2VzcworKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIHVuaWNvZGUgZGF0YSkuCisKK1RleHQgZmlsZXMKKycnJycnJycnJycKKworVGV4dCBmaWxlcyBjcmVhdGVkIHVzaW5nIGBgb3BlbigpYGAgdW5kZXIgUHl0aG9uIDIgcmV0dXJuIGJ5dGUgc3RyaW5ncywKK3doaWxlIHVuZGVyIFB5dGhvbiAzIHRoZXkgcmV0dXJuIHVuaWNvZGUgc3RyaW5ncy4gIERlcGVuZGluZyBvbiB5b3VyIHBvcnRpbmcKK3N0cmF0ZWd5LCB0aGlzIGNhbiBiZSBhbiBpc3N1ZS4KKworSWYgeW91IHdhbnQgdGV4dCBmaWxlcyB0byByZXR1cm4gdW5pY29kZSBzdHJpbmdzIGluIFB5dGhvbiAyLCB5b3UgaGF2ZSB0d28KK3Bvc3NpYmlsaXRpZXM6CisKKyogVW5kZXIgUHl0aG9uIDIuNiBhbmQgaGlnaGVyLCB1c2UgOmZ1bmM6YGlvLm9wZW5gLiAgU2luY2UgOmZ1bmM6YGlvLm9wZW5gCisgIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGZ1bmN0aW9uIGluIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzLCBpdCB3aWxsCisgIGhlbHAgaXJvbiBvdXQgYW55IGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlLgorCisqIElmIHByZS0yLjYgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHRoZW4geW91IHNob3VsZCB1c2UgOmZ1bmM6YGNvZGVjcy5vcGVuYAorICBpbnN0ZWFkLiAgVGhpcyB3aWxsIG1ha2Ugc3VyZSB0aGF0IHlvdSBnZXQgYmFjayB1bmljb2RlIHN0cmluZ3MgaW4gUHl0aG9uIDIuCisKK1N1YmNsYXNzIGBgb2JqZWN0YGAKKycnJycnJycnJycnJycnJycnJycKKworTmV3LXN0eWxlIGNsYXNzZXMgaGF2ZSBiZWVuIGFyb3VuZCBzaW5jZSBgUHl0aG9uIDIuMmBfLiBZb3UgbmVlZCB0byBtYWtlIHN1cmUKK3lvdSBhcmUgc3ViY2xhc3NpbmcgZnJvbSBgYG9iamVjdGBgIHRvIGF2b2lkIG9kZCBlZGdlIGNhc2VzIGludm9sdmluZyBtZXRob2QKK3Jlc29sdXRpb24gb3JkZXIsIGV0Yy4gVGhpcyBjb250aW51ZXMgdG8gYmUgdG90YWxseSB2YWxpZCBpbiBQeXRob24gMyAoYWx0aG91Z2gKK3VubmVlZGVkIGFzIGFsbCBjbGFzc2VzIGltcGxpY2l0bHkgaW5oZXJpdCBmcm9tIGBgb2JqZWN0YGApLgorCisKK0RlYWwgV2l0aCB0aGUgQnl0ZXMvU3RyaW5nIERpY2hvdG9teQorJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCisKK09uZSBvZiB0aGUgYmlnZ2VzdCBpc3N1ZXMgcGVvcGxlIGhhdmUgd2hlbiBwb3J0aW5nIGNvZGUgdG8gUHl0aG9uIDMgaXMgaGFuZGxpbmcKK3RoZSBieXRlcy9zdHJpbmcgZGljaG90b215LiBCZWNhdXNlIFB5dGhvbiAyIGFsbG93ZWQgdGhlIGBgc3RyYGAgdHlwZSB0byBob2xkCit0ZXh0dWFsIGRhdGEsIHBlb3BsZSBoYXZlIG92ZXIgdGhlIHllYXJzIGJlZW4gcmF0aGVyIGxvb3NlIGluIHRoZWlyIGRlbGluZWF0aW9uCitvZiB3aGF0IGBgc3RyYGAgaW5zdGFuY2VzIGhlbGQgdGV4dCBjb21wYXJlZCB0byBieXRlcy4gSW4gUHl0aG9uIDMgeW91IGNhbm5vdAorYmUgc28gY2FyZS1mcmVlIGFueW1vcmUgYW5kIG5lZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBkaWZmZXJlbmNlLiBUaGUga2V5CitoYW5kbGluZyB0aGlzIGlzc3VlIHRvIHRvIG1ha2Ugc3VyZSB0aGF0ICoqZXZlcnkqKiBzdHJpbmcgbGl0ZXJhbCBpbiB5b3VyCitQeXRob24gMiBjb2RlIGlzIGVpdGhlciBzeW50YWN0aWNhbGx5IG9mIGZ1bmN0aW9uYWxseSBtYXJrZWQgYXMgZWl0aGVyIGJ5dGVzIG9yCit0ZXh0IGRhdGEuIEFmdGVyIHRoaXMgaXMgZG9uZSB5b3UgdGhlbiBuZWVkIHRvIG1ha2Ugc3VyZSB5b3VyIEFQSXMgYXJlIGRlc2lnbmVkCit0byBlaXRoZXIgaGFuZGxlIGEgc3BlY2lmaWMgdHlwZSBvciBtYWRlIHRvIGJlIHByb3Blcmx5IHBvbHltb3JwaGljLgorCisKK01hcmsgVXAgUHl0aG9uIDIgU3RyaW5nIExpdGVyYWxzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitGaXJzdCB0aGluZyB5b3UgbXVzdCBkbyBpcyBkZXNpZ25hdGUgZXZlcnkgc2luZ2xlIHN0cmluZyBsaXRlcmFsIGluIFB5dGhvbiAyCithcyBlaXRoZXIgdGV4dHVhbCBvciBieXRlcyBkYXRhLiBJZiB5b3UgYXJlIG9ubHkgc3VwcG9ydGluZyBQeXRob24gMi42IG9yCituZXdlciwgdGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkIGJ5IG1hcmtpbmcgYnl0ZXMgbGl0ZXJhbHMgd2l0aCBhIGBgYmBgIHByZWZpeAorYW5kIHRoZW4gZGVzaWduYXRpbmcgdGV4dHVhbCBkYXRhIHdpdGggYSBgYHVgYCBwcmVmaXggb3IgdXNpbmcgdGhlCitgYHVuaWNvZGVfbGl0ZXJhbHNgYCBmdXR1cmUgc3RhdGVtZW50LgorCitJZiB5b3VyIHByb2plY3Qgc3VwcG9ydHMgdmVyc2lvbnMgb2YgUHl0aG9uIHByZS1kYXRpbmcgMi42LCB0aGVuIHlvdSBzaG91bGQgdXNlCit0aGUgc2l4XyBwcm9qZWN0IGFuZCBpdHMgYGBiKClgYCBmdW5jdGlvbiB0byBkZW5vdGUgYnl0ZXMgbGl0ZXJhbHMuIEZvciB0ZXh0CitsaXRlcmFscyB5b3UgY2FuIGVpdGhlciB1c2Ugc2l4J3MgYGB1KClgYCBmdW5jdGlvbiBvciB1c2UgYSBgYHVgYCBwcmVmaXguCisKKworRGVjaWRlIHdoYXQgQVBJcyBXaWxsIEFjY2VwdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitJbiBQeXRob24gMiBpdCB3YXMgdmVyeSBlYXN5IHRvIGFjY2lkZW50YWxseSBjcmVhdGUgYW4gQVBJIHRoYXQgYWNjZXB0ZWQgYm90aAorYnl0ZXMgYW5kIHRleHR1YWwgZGF0YS4gQnV0IGluIFB5dGhvbiAzLCB0aGFua3MgdG8gdGhlIG1vcmUgc3RyaWN0IGhhbmRsaW5nIG9mCitkaXNwYXJhdGUgdHlwZXMsIHRoaXMgbG9vc2UgdXNhZ2Ugb2YgYnl0ZXMgYW5kIHRleHQgdG9nZXRoZXIgdGVuZHMgdG8gZmFpbC4KKworVGFrZSB0aGUgZGljdCBgYHtiJ2EnOiAnYnl0ZXMnLCB1J2EnOiAndGV4dCd9YGAgaW4gUHl0aG9uIDIuNi4gSXQgY3JlYXRlcyB0aGUKK2RpY3QgYGB7dSdhJzogJ3RleHQnfWBgIHNpbmNlIGBgYidhJyA9PSB1J2EnYGAuIEJ1dCBpbiBQeXRob24gMyB0aGUgZXF1aXZhbGVudAorZGljdCBjcmVhdGVzIGBge2InYSc6ICdieXRlcycsICdhJzogJ3RleHQnfWBgLCBpLmUuLCBubyBsb3N0IGRhdGEuIFNpbWlsYXIKK2lzc3VlcyBjYW4gY3JvcCB1cCB3aGVuIHRyYW5zaXRpb25pbmcgUHl0aG9uIDIgY29kZSB0byBQeXRob24gMy4KKworVGhpcyBtZWFucyB5b3UgbmVlZCB0byBjaG9vc2Ugd2hhdCBhbiBBUEkgaXMgZ29pbmcgdG8gYWNjZXB0IGFuZCBjcmVhdGUgYW5kCitjb25zaXN0ZW50bHkgc3RpY2sgdG8gdGhhdCBBUEkgaW4gYm90aCBQeXRob24gMiBhbmQgMy4KKworCitCeXRlcyAvIFVuaWNvZGUgQ29tcGFyaXNvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioKKworSW4gUHl0aG9uIDMsIG1peGluZyBieXRlcyBhbmQgdW5pY29kZSBpcyBmb3JiaWRkZW4gaW4gbW9zdCBzaXR1YXRpb25zOyBpdAord2lsbCByYWlzZSBhIDpjbGFzczpgVHlwZUVycm9yYCB3aGVyZSBQeXRob24gMiB3b3VsZCBoYXZlIGF0dGVtcHRlZCBhbiBpbXBsaWNpdAorY29lcmNpb24gYmV0d2VlbiB0eXBlcy4gIEhvd2V2ZXIsIHRoZXJlIGlzIG9uZSBjYXNlIHdoZXJlIGl0IGRvZXNuJ3QgYW5kCitpdCBjYW4gYmUgdmVyeSBtaXNsZWFkaW5nOjoKKworICAgPj4+IGIiIiA9PSAiIgorICAgRmFsc2UKKworVGhpcyBpcyBiZWNhdXNlIGFuIGVxdWFsaXR5IGNvbXBhcmlzb24gaXMgcmVxdWlyZWQgYnkgdGhlIGxhbmd1YWdlIHRvIGFsd2F5cworc3VjY2VlZCAoYW5kIHJldHVybiBgYEZhbHNlYGAgZm9yIGluY29tcGF0aWJsZSB0eXBlcykuICBIb3dldmVyLCB0aGlzIGFsc28KK21lYW5zIHRoYXQgY29kZSBpbmNvcnJlY3RseSBwb3J0ZWQgdG8gUHl0aG9uIDMgY2FuIGRpc3BsYXkgYnVnZ3kgYmVoYXZpb3VyCitpZiBzdWNoIGNvbXBhcmlzb25zIGFyZSBzaWxlbnRseSBleGVjdXRlZC4gIFRvIGRldGVjdCBzdWNoIHNpdHVhdGlvbnMsCitQeXRob24gMyBoYXMgYSBgYC1iYGAgZmxhZyB0aGF0IHdpbGwgZGlzcGxheSBhIHdhcm5pbmc6OgorCisgICAkIHB5dGhvbjMgLWIKKyAgID4+PiBiIiIgPT0gIiIKKyAgIF9fbWFpbl9fOjE6IEJ5dGVzV2FybmluZzogQ29tcGFyaXNvbiBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmcKKyAgIEZhbHNlCisKK1RvIHR1cm4gdGhlIHdhcm5pbmcgaW50byBhbiBleGNlcHRpb24sIHVzZSB0aGUgYGAtYmJgYCBmbGFnIGluc3RlYWQ6OgorCisgICAkIHB5dGhvbjMgLWJiCisgICA+Pj4gYiIiID09ICIiCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICBCeXRlc1dhcm5pbmc6IENvbXBhcmlzb24gYmV0d2VlbiBieXRlcyBhbmQgc3RyaW5nCisKKworSW5kZXhpbmcgYnl0ZXMgb2JqZWN0cworJycnJycnJycnJycnJycnJycnJycnJworCitBbm90aGVyIHBvdGVudGlhbGx5IHN1cnByaXNpbmcgY2hhbmdlIGlzIHRoZSBpbmRleGluZyBiZWhhdmlvdXIgb2YgYnl0ZXMKK29iamVjdHMgaW4gUHl0aG9uIDM6OgorCisgICA+Pj4gYiJ4eXoiWzBdCisgICAxMjAKKworSW5kZWVkLCBQeXRob24gMyBieXRlcyBvYmplY3RzIChhcyB3ZWxsIGFzIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzKQorYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2Vycy4gIEJ1dCBjb2RlIGNvbnZlcnRlZCBmcm9tIFB5dGhvbiAyIHdpbGwgb2Z0ZW4KK2Fzc3VtZSB0aGF0IGluZGV4aW5nIGEgYnl0ZXN0cmluZyBwcm9kdWNlcyBhbm90aGVyIGJ5dGVzdHJpbmcsIG5vdCBhbgoraW50ZWdlci4gIFRvIHJlY29uY2lsZSBib3RoIGJlaGF2aW91cnMsIHVzZSBzbGljaW5nOjoKKworICAgPj4+IGIieHl6IlswOjFdCisgICBiJ3gnCisgICA+Pj4gbiA9IDEKKyAgID4+PiBiInh5eiJbbjpuKzFdCisgICBiJ3knCisKK1RoZSBvbmx5IHJlbWFpbmluZyBnb3RjaGEgaXMgdGhhdCBhbiBvdXQtb2YtYm91bmRzIHNsaWNlIHJldHVybnMgYW4gZW1wdHkKK2J5dGVzIG9iamVjdCBpbnN0ZWFkIG9mIHJhaXNpbmcgYGBJbmRleEVycm9yYGA6CisKKyAgID4+PiBiInh5eiJbM10KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgIEluZGV4RXJyb3I6IGluZGV4IG91dCBvZiByYW5nZQorICAgPj4+IGIieHl6IlszOjRdCisgICBiJycKKworCitgYF9fc3RyX18oKWBgL2BgX191bmljb2RlX18oKWBgCisnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCisKK0luIFB5dGhvbiAyLCBvYmplY3RzIGNhbiBzcGVjaWZ5IGJvdGggYSBzdHJpbmcgYW5kIHVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YKK3RoZW1zZWx2ZXMuIEluIFB5dGhvbiAzLCB0aG91Z2gsIHRoZXJlIGlzIG9ubHkgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoaXMKK2JlY29tZXMgYW4gaXNzdWUgYXMgcGVvcGxlIGNhbiBpbmFkdmVydGVudGx5IGRvIHRoaW5ncyBpbiB0aGVpciBgYF9fc3RyX18oKWBgCittZXRob2RzIHdoaWNoIGhhdmUgdW5wcmVkaWN0YWJsZSByZXN1bHRzIChlLmcuLCBpbmZpbml0ZSByZWN1cnNpb24gaWYgeW91CitoYXBwZW4gdG8gdXNlIHRoZSBgYHVuaWNvZGUoc2VsZikuZW5jb2RlKCd1dGY4JylgYCBpZGlvbSBhcyB0aGUgYm9keSBvZiB5b3VyCitgYF9fc3RyX18oKWBgIG1ldGhvZCkuCisKK1RoZXJlIGFyZSB0d28gd2F5cyB0byBzb2x2ZSB0aGlzIGlzc3VlLiBPbmUgaXMgdG8gdXNlIGEgY3VzdG9tIDJ0bzMgZml4ZXIuIFRoZQorYmxvZyBwb3N0IGF0IGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTEvMS8yMi9mb3J3YXJkcy1jb21wYXRpYmxlLXB5dGhvbi8KK3NwZWNpZmllcyBob3cgdG8gZG8gdGhpcy4gVGhhdCB3aWxsIGFsbG93IDJ0bzMgdG8gY2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgYGBkZWYKK19fdW5pY29kZShzZWxmKTogLi4uYGAgdG8gYGBkZWYgX19zdHJfXyhzZWxmKTogLi4uYGAuIFRoaXMgZG9lcyByZXF1aXJlIHlvdQorZGVmaW5lIHlvdXIgYGBfX3N0cl9fKClgYCBtZXRob2QgaW4gUHl0aG9uIDIgYmVmb3JlIHlvdXIgYGBfX3VuaWNvZGVfXygpYGAKK21ldGhvZC4KKworVGhlIG90aGVyIG9wdGlvbiBpcyB0byB1c2UgYSBtaXhpbiBjbGFzcy4gVGhpcyBhbGxvd3MgeW91IHRvIG9ubHkgZGVmaW5lIGEKK2BgX191bmljb2RlX18oKWBgIG1ldGhvZCBmb3IgeW91ciBjbGFzcyBhbmQgbGV0IHRoZSBtaXhpbiBkZXJpdmUKK2BgX19zdHJfXygpYGAgZm9yIHlvdSAoY29kZSBmcm9tCitodHRwOi8vbHVjdW1yLnBvY29vLm9yZy8yMDExLzEvMjIvZm9yd2FyZHMtY29tcGF0aWJsZS1weXRob24vKTo6CisKKyAgIGltcG9ydCBzeXMKKworICAgY2xhc3MgVW5pY29kZU1peGluKG9iamVjdCk6CisKKyAgICAgIiIiTWl4aW4gY2xhc3MgdG8gaGFuZGxlIGRlZmluaW5nIHRoZSBwcm9wZXIgX19zdHJfXy9fX3VuaWNvZGVfXworICAgICBtZXRob2RzIGluIFB5dGhvbiAyIG9yIDMuIiIiCisKKyAgICAgaWYgc3lzLnZlcnNpb25faW5mb1swXSA+PSAzOiAjIFB5dGhvbiAzCisgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3VuaWNvZGVfXygpCisgICAgIGVsc2U6ICAjIFB5dGhvbiAyCisgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3VuaWNvZGVfXygpLmVuY29kZSgndXRmOCcpCisKKworICAgY2xhc3MgU3BhbShVbmljb2RlTWl4aW4pOgorCisgICAgIGRlZiBfX3VuaWNvZGVfXyhzZWxmKToKKyAgICAgICAgIHJldHVybiB1J3NwYW0tc3BhbS1iYWNvbi1zcGFtJyAgIyAydG8zIHdpbGwgcmVtb3ZlIHRoZSAndScgcHJlZml4CisKKworRG9uJ3QgSW5kZXggb24gRXhjZXB0aW9ucworJycnJycnJycnJycnJycnJycnJycnJycnJworCitJbiBQeXRob24gMiwgdGhlIGZvbGxvd2luZyB3b3JrZWQ6OgorCisgICA+Pj4gZXhjID0gRXhjZXB0aW9uKDEsIDIsIDMpCisgICA+Pj4gZXhjLmFyZ3NbMV0KKyAgIDIKKyAgID4+PiBleGNbMV0gICMgUHl0aG9uIDIgb25seSEKKyAgIDIKKworQnV0IGluIFB5dGhvbiAzLCBpbmRleGluZyBkaXJlY3RseSBvbiBhbiBleGNlcHRpb24gaXMgYW4gZXJyb3IuIFlvdSBuZWVkIHRvCittYWtlIHN1cmUgdG8gb25seSBpbmRleCBvbiB0aGUgOmF0dHI6YEJhc2VFeGNlcHRpb24uYXJnc2AgYXR0cmlidXRlIHdoaWNoIGlzIGEKK3NlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX2luaXRfX2AgbWV0aG9kLgorCitFdmVuIGJldHRlciBpcyB0byB1c2UgdGhlIGRvY3VtZW50ZWQgYXR0cmlidXRlcyB0aGUgZXhjZXB0aW9uIHByb3ZpZGVzLgorCitEb24ndCB1c2UgYGBfX2dldHNsaWNlX19gYCAmIEZyaWVuZHMKKycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJworCitCZWVuIGRlcHJlY2F0ZWQgZm9yIGEgd2hpbGUsIGJ1dCBQeXRob24gMyBmaW5hbGx5IGRyb3BzIHN1cHBvcnQgZm9yCitgYF9fZ2V0c2xpY2VfXygpYGAsIGV0Yy4gTW92ZSBjb21wbGV0ZWx5IG92ZXIgdG8gOm1ldGg6YF9fZ2V0aXRlbV9fYCBhbmQKK2ZyaWVuZHMuCisKKworVXBkYXRpbmcgZG9jdGVzdHMKKycnJycnJycnJycnJycnJycnCisKKzJ0bzNfIHdpbGwgYXR0ZW1wdCB0byBnZW5lcmF0ZSBmaXhlcyBmb3IgZG9jdGVzdHMgdGhhdCBpdCBjb21lcyBhY3Jvc3MuIEl0J3MKK25vdCBwZXJmZWN0LCB0aG91Z2guIElmIHlvdSB3cm90ZSBhIG1vbm9saXRoaWMgc2V0IG9mIGRvY3Rlc3RzIChlLmcuLCBhIHNpbmdsZQorZG9jc3RyaW5nIGNvbnRhaW5pbmcgYWxsIG9mIHlvdXIgZG9jdGVzdHMpLCB5b3Ugc2hvdWxkIGF0IGxlYXN0IGNvbnNpZGVyCiticmVha2luZyB0aGUgZG9jdGVzdHMgdXAgaW50byBzbWFsbGVyIHBpZWNlcyB0byBtYWtlIGl0IG1vcmUgbWFuYWdlYWJsZSB0byBmaXguCitPdGhlcndpc2UgaXQgbWlnaHQgdmVyeSB3ZWxsIGJlIHdvcnRoIHlvdXIgdGltZSBhbmQgZWZmb3J0IHRvIHBvcnQgeW91ciB0ZXN0cwordG8gOm1vZDpgdW5pdHRlc3RgLgorCisKK0VsaW1pbmF0ZSBgYC0zYGAgV2FybmluZ3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiB5b3UgcnVuIHlvdXIgYXBwbGljYXRpb24ncyB0ZXN0IHN1aXRlLCBydW4gaXQgdXNpbmcgdGhlIGBgLTNgYCBmbGFnIHBhc3NlZAordG8gUHl0aG9uLiBUaGlzIHdpbGwgY2F1c2UgdmFyaW91cyB3YXJuaW5ncyB0byBiZSByYWlzZWQgZHVyaW5nIGV4ZWN1dGlvbiBhYm91dAordGhpbmdzIHRoYXQgMnRvMyBjYW5ub3QgaGFuZGxlIGF1dG9tYXRpY2FsbHkgKGUuZy4sIG1vZHVsZXMgdGhhdCBoYXZlIGJlZW4KK3JlbW92ZWQpLiBUcnkgdG8gZWxpbWluYXRlIHRob3NlIHdhcm5pbmdzIHRvIG1ha2UgeW91ciBjb2RlIGV2ZW4gbW9yZSBwb3J0YWJsZQordG8gUHl0aG9uIDMuCisKKworUnVuIDJ0bzMKKy0tLS0tLS0tCisKK09uY2UgeW91IGhhdmUgbWFkZSB5b3VyIFB5dGhvbiAyIGNvZGUgZnV0dXJlLWNvbXBhdGlibGUgd2l0aCBQeXRob24gMywgaXQncwordGltZSB0byB1c2UgMnRvM18gdG8gYWN0dWFsbHkgcG9ydCB5b3VyIGNvZGUuCisKKworTWFudWFsbHkKKycnJycnJycnCisKK1RvIG1hbnVhbGx5IGNvbnZlcnQgc291cmNlIGNvZGUgdXNpbmcgMnRvM18sIHlvdSB1c2UgdGhlIGBgMnRvM2BgIHNjcmlwdCB0aGF0CitpcyBpbnN0YWxsZWQgd2l0aCBQeXRob24gMi42IGFuZCBsYXRlci46OgorCisgICAydG8zIDxkaXJlY3Rvcnkgb3IgZmlsZSB0byBjb252ZXJ0PgorCitUaGlzIHdpbGwgY2F1c2UgMnRvMyB0byB3cml0ZSBvdXQgYSBkaWZmIHdpdGggYWxsIG9mIHRoZSBmaXhlcnMgYXBwbGllZCBmb3IgdGhlCitjb252ZXJ0ZWQgc291cmNlIGNvZGUuIElmIHlvdSB3b3VsZCBsaWtlIDJ0bzMgdG8gZ28gYWhlYWQgYW5kIGFwcGx5IHRoZSBjaGFuZ2VzCit5b3UgY2FuIHBhc3MgaXQgdGhlIGBgLXdgYCBmbGFnOjoKKworICAgMnRvMyAtdyA8c3R1ZmYgdG8gY29udmVydD4KKworVGhlcmUgYXJlIG90aGVyIGZsYWdzIGF2YWlsYWJsZSB0byBjb250cm9sIGV4YWN0bHkgd2hpY2ggZml4ZXJzIGFyZSBhcHBsaWVkLAorZXRjLgorCisKK0R1cmluZyBJbnN0YWxsYXRpb24KKycnJycnJycnJycnJycnJycnJycKKworV2hlbiBhIHVzZXIgaW5zdGFsbHMgeW91ciBwcm9qZWN0IGZvciBQeXRob24gMywgeW91IGNhbiBoYXZlIGVpdGhlcgorOm1vZDpgZGlzdHV0aWxzYCBvciBEaXN0cmlidXRlXyBydW4gMnRvM18gb24geW91ciBiZWhhbGYuCitGb3IgZGlzdHV0aWxzLCB1c2UgdGhlIGZvbGxvd2luZyBpZGlvbTo6CisKKyAgIHRyeTogICMgUHl0aG9uIDMKKyAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHlfMnRvMyBhcyBidWlsZF9weQorICAgZXhjZXB0IEltcG9ydEVycm9yOiAgIyBQeXRob24gMgorICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX3B5IGltcG9ydCBidWlsZF9weQorCisgICBzZXR1cChjbWRjbGFzcyA9IHsnYnVpbGRfcHknOiBidWlsZF9weX0sCisgICAgICMgLi4uCisgICApCisKK0ZvciBEaXN0cmlidXRlOjoKKworICAgc2V0dXAodXNlXzJ0bzM9VHJ1ZSwKKyAgICAgIyAuLi4KKyAgICkKKworVGhpcyB3aWxsIGFsbG93IHlvdSB0byBub3QgaGF2ZSB0byBkaXN0cmlidXRlIGEgc2VwYXJhdGUgUHl0aG9uIDMgdmVyc2lvbiBvZgoreW91ciBwcm9qZWN0LiBJdCBkb2VzIHJlcXVpcmUsIHRob3VnaCwgdGhhdCB3aGVuIHlvdSBwZXJmb3JtIGRldmVsb3BtZW50IHRoYXQKK3lvdSBhdCBsZWFzdCBidWlsZCB5b3VyIHByb2plY3QgYW5kIHVzZSB0aGUgYnVpbHQgUHl0aG9uIDMgc291cmNlIGZvciB0ZXN0aW5nLgorCisKK1ZlcmlmeSAmIFRlc3QKKy0tLS0tLS0tLS0tLS0KKworQXQgdGhpcyBwb2ludCB5b3Ugc2hvdWxkIChob3BlZnVsbHkpIGhhdmUgeW91ciBwcm9qZWN0IGNvbnZlcnRlZCBpbiBzdWNoIGEgd2F5Cit0aGF0IGl0IHdvcmtzIGluIFB5dGhvbiAzLiBWZXJpZnkgaXQgYnkgcnVubmluZyB5b3VyIHVuaXQgdGVzdHMgYW5kIG1ha2luZyBzdXJlCitub3RoaW5nIGhhcyBnb25lIGF3cnkuIElmIHlvdSBtaXNzIHNvbWV0aGluZyB0aGVuIGZpZ3VyZSBvdXQgaG93IHRvIGZpeCBpdCBpbgorUHl0aG9uIDMsIGJhY2twb3J0IHRvIHlvdXIgUHl0aG9uIDIgY29kZSwgYW5kIHJ1biB5b3VyIGNvZGUgdGhyb3VnaCAydG8zIGFnYWluCit0byB2ZXJpZnkgdGhlIGZpeCB0cmFuc2Zvcm1zIHByb3Blcmx5LgorCisKKy4uIF8ydG8zOiBodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svbGlicmFyeS8ydG8zLmh0bWwKKy4uIF9EaXN0cmlidXRlOiBodHRwOi8vcGFja2FnZXMucHl0aG9uLm9yZy9kaXN0cmlidXRlLworCisKKy4uIF91c2Vfc2FtZV9zb3VyY2U6CisKK1B5dGhvbiAyLzMgQ29tcGF0aWJsZSBTb3VyY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworV2hpbGUgaXQgbWF5IHNlZW0gY291bnRlci1pbnR1aXRpdmUsIHlvdSBjYW4gd3JpdGUgUHl0aG9uIGNvZGUgd2hpY2ggaXMKK3NvdXJjZS1jb21wYXRpYmxlIGJldHdlZW4gUHl0aG9uIDIgJiAzLiBJdCBkb2VzIGxlYWQgdG8gY29kZSB0aGF0IGlzIG5vdAorZW50aXJlbHkgaWRpb21hdGljIFB5dGhvbiAoZS5nLiwgaGF2aW5nIHRvIGV4dHJhY3QgdGhlIGN1cnJlbnRseSByYWlzZWQKK2V4Y2VwdGlvbiBmcm9tIGBgc3lzLmV4Y19pbmZvKClbMV1gYCksIGJ1dCBpdCBjYW4gYmUgcnVuIHVuZGVyIFB5dGhvbiAyCisqKmFuZCoqIFB5dGhvbiAzIHdpdGhvdXQgdXNpbmcgMnRvM18gYXMgYSB0cmFuc2xhdGlvbiBzdGVwIChhbHRob3VnaCB0aGUgdG9vbAorc2hvdWxkIGJlIHVzZWQgdG8gaGVscCBmaW5kIHBvdGVudGlhbCBwb3J0YWJpbGl0eSBwcm9ibGVtcykuIFRoaXMgYWxsb3dzIHlvdSB0bworY29udGludWUgdG8gaGF2ZSBhIHJhcGlkIGRldmVsb3BtZW50IHByb2Nlc3MgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHlvdSBhcmUKK2RldmVsb3BpbmcgdW5kZXIgUHl0aG9uIDIgb3IgUHl0aG9uIDMuIFdoZXRoZXIgdGhpcyBhcHByb2FjaCBvciB1c2luZworOnJlZjpgdXNlXzJ0bzNgIHdvcmtzIGJlc3QgZm9yIHlvdSB3aWxsIGJlIGEgcGVyLXByb2plY3QgZGVjaXNpb24uCisKK1RvIGdldCBhIGNvbXBsZXRlIGlkZWEgb2Ygd2hhdCBpc3N1ZXMgeW91IHdpbGwgbmVlZCB0byBkZWFsIHdpdGgsIHNlZSB0aGUKK2BXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjBgXy4gT3RoZXJzIGhhdmUgcmVvcmdhbml6ZWQgdGhlIGRhdGEgaW4gb3RoZXIgZm9ybWF0cworc3VjaCBhcyBodHRwOi8vZG9jcy5weXRob25zcHJpbnRzLmNvbS9weXRob24zX3BvcnRpbmcvcHktcG9ydGluZy5odG1sIC4KKworVGhlIGZvbGxvd2luZyBhcmUgc29tZSBzdGVwcyB0byB0YWtlIHRvIHRyeSB0byBzdXBwb3J0IGJvdGggUHl0aG9uIDIgJiAzIGZyb20KK3RoZSBzYW1lIHNvdXJjZSBjb2RlLgorCisKKy4uIF9XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjA6IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcmVsZWFzZS8zLjAvd2hhdHNuZXcvMy4wLmh0bWwKKworCitGb2xsb3cgVGhlIFN0ZXBzIGZvciBVc2luZyAydG8zXworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWxsIG9mIHRoZSBzdGVwcyBvdXRsaW5lZCBpbiBob3cgdG8KKzpyZWY6YHBvcnQgUHl0aG9uIDIgY29kZSB3aXRoIDJ0bzMgPHVzZV8ydG8zPmAgYXBwbHkKK3RvIGNyZWF0aW5nIGEgUHl0aG9uIDIvMyBjb2RlYmFzZS4gVGhpcyBpbmNsdWRlcyB0cnlpbmcgb25seSBzdXBwb3J0IFB5dGhvbiAyLjYKK29yIG5ld2VyICh0aGUgOm1vZDpgX19mdXR1cmVfX2Agc3RhdGVtZW50cyB3b3JrIGluIFB5dGhvbiAzIHdpdGhvdXQgaXNzdWUpLAorZWxpbWluYXRpbmcgd2FybmluZ3MgdGhhdCBhcmUgdHJpZ2dlcmVkIGJ5IGBgLTNgYCwgZXRjLgorCitZb3Ugc2hvdWxkIGV2ZW4gY29uc2lkZXIgcnVubmluZyAydG8zXyBvdmVyIHlvdXIgY29kZSAod2l0aG91dCBjb21taXR0aW5nIHRoZQorY2hhbmdlcykuIFRoaXMgd2lsbCBsZXQgeW91IGtub3cgd2hlcmUgcG90ZW50aWFsIHBhaW4gcG9pbnRzIGFyZSB3aXRoaW4geW91cgorY29kZSBzbyB0aGF0IHlvdSBjYW4gZml4IHRoZW0gcHJvcGVybHkgYmVmb3JlIHRoZXkgYmVjb21lIGFuIGlzc3VlLgorCisKK1VzZSBzaXhfCistLS0tLS0tLQorCitUaGUgc2l4XyBwcm9qZWN0IGNvbnRhaW5zIG1hbnkgdGhpbmdzIHRvIGhlbHAgeW91IHdyaXRlIHBvcnRhYmxlIFB5dGhvbiBjb2RlLgorWW91IHNob3VsZCBtYWtlIHN1cmUgdG8gcmVhZCBpdHMgZG9jdW1lbnRhdGlvbiBmcm9tIGJlZ2lubmluZyB0byBlbmQgYW5kIHVzZQorYW55IGFuZCBhbGwgZmVhdHVyZXMgaXQgcHJvdmlkZXMuIFRoYXQgd2F5IHlvdSB3aWxsIG1pbmltaXplIGFueSBtaXN0YWtlcyB5b3UKK21pZ2h0IG1ha2UgaW4gd3JpdGluZyBjcm9zcy12ZXJzaW9uIGNvZGUuCisKKworQ2FwdHVyaW5nIHRoZSBDdXJyZW50bHkgUmFpc2VkIEV4Y2VwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbmUgY2hhbmdlIGJldHdlZW4gUHl0aG9uIDIgYW5kIDMgdGhhdCB3aWxsIHJlcXVpcmUgY2hhbmdpbmcgaG93IHlvdSBjb2RlIChpZgoreW91IHN1cHBvcnQgYFB5dGhvbiAyLjVgXyBhbmQgZWFybGllcikgaXMKK2FjY2Vzc2luZyB0aGUgY3VycmVudGx5IHJhaXNlZCBleGNlcHRpb24uICBJbiBQeXRob24gMi41IGFuZCBlYXJsaWVyIHRoZSBzeW50YXgKK3RvIGFjY2VzcyB0aGUgY3VycmVudCBleGNlcHRpb24gaXM6OgorCisgICB0cnk6CisgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICBleGNlcHQgRXhjZXB0aW9uLCBleGM6CisgICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKKyAgICAgcGFzcworCitUaGlzIHN5bnRheCBjaGFuZ2VkIGluIFB5dGhvbiAzIChhbmQgYmFja3BvcnRlZCB0byBgUHl0aG9uIDIuNmBfIGFuZCBsYXRlcikKK3RvOjoKKworICAgdHJ5OgorICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKKyAgICAgIyBJbiBQeXRob24gMywgJ2V4YycgaXMgcmVzdHJpY3RlZCB0byB0aGUgYmxvY2s7IFB5dGhvbiAyLjYgd2lsbCAibGVhayIKKyAgICAgcGFzcworCitCZWNhdXNlIG9mIHRoaXMgc3ludGF4IGNoYW5nZSB5b3UgbXVzdCBjaGFuZ2UgdG8gY2FwdHVyaW5nIHRoZSBjdXJyZW50CitleGNlcHRpb24gdG86OgorCisgICB0cnk6CisgICAgIHJhaXNlIEV4Y2VwdGlvbigpCisgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICBpbXBvcnQgc3lzCisgICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycKKyAgICAgcGFzcworCitZb3UgY2FuIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSByYWlzZWQgZXhjZXB0aW9uIGZyb20KKzpmdW5jOmBzeXMuZXhjX2luZm9gIHRoYW4gc2ltcGx5IHRoZSBjdXJyZW50IGV4Y2VwdGlvbiBpbnN0YW5jZSwgYnV0IHlvdSBtb3N0CitsaWtlbHkgZG9uJ3QgbmVlZCBpdC4KKworLi4gbm90ZTo6CisgICBJbiBQeXRob24gMywgdGhlIHRyYWNlYmFjayBpcyBhdHRhY2hlZCB0byB0aGUgZXhjZXB0aW9uIGluc3RhbmNlCisgICB0aHJvdWdoIHRoZSBgYF9fdHJhY2ViYWNrX19gYCBhdHRyaWJ1dGUuIElmIHRoZSBpbnN0YW5jZSBpcyBzYXZlZCBpbgorICAgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IHBlcnNpc3RzIG91dHNpZGUgb2YgdGhlIGBgZXhjZXB0YGAgYmxvY2ssIHRoZQorICAgdHJhY2ViYWNrIHdpbGwgY3JlYXRlIGEgcmVmZXJlbmNlIGN5Y2xlIHdpdGggdGhlIGN1cnJlbnQgZnJhbWUgYW5kIGl0cworICAgZGljdGlvbmFyeSBvZiBsb2NhbCB2YXJpYWJsZXMuICBUaGlzIHdpbGwgZGVsYXkgcmVjbGFpbWluZyBkZWFkCisgICByZXNvdXJjZXMgdW50aWwgdGhlIG5leHQgY3ljbGljIDp0ZXJtOmBnYXJiYWdlIGNvbGxlY3Rpb25gIHBhc3MuCisKKyAgIEluIFB5dGhvbiAyLCB0aGlzIHByb2JsZW0gb25seSBvY2N1cnMgaWYgeW91IHNhdmUgdGhlIHRyYWNlYmFjayBpdHNlbGYKKyAgIChlLmcuIHRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYCkKKyAgIGluIGEgdmFyaWFibGUuCisKKworT3RoZXIgUmVzb3VyY2VzCis9PT09PT09PT09PT09PT0KKworVGhlIGF1dGhvcnMgb2YgdGhlIGZvbGxvd2luZyBibG9nIHBvc3RzLCB3aWtpIHBhZ2VzLCBhbmQgYm9va3MgZGVzZXJ2ZSBzcGVjaWFsCit0aGFua3MgZm9yIG1ha2luZyBwdWJsaWMgdGhlaXIgdGlwcyBmb3IgcG9ydGluZyBQeXRob24gMiBjb2RlIHRvIFB5dGhvbiAzIChhbmQKK3RodXMgaGVscGluZyBwcm92aWRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGRvY3VtZW50KToKKworKiBodHRwOi8vcHl0aG9uM3BvcnRpbmcuY29tLworKiBodHRwOi8vZG9jcy5weXRob25zcHJpbnRzLmNvbS9weXRob24zX3BvcnRpbmcvcHktcG9ydGluZy5odG1sCisqIGh0dHA6Ly90ZWNoc3BvdC56enplZWsub3JnLzIwMTEvMDEvMjQvenp6ZWVrLXMtZ3VpZGUtdG8tcHl0aG9uLTMtcG9ydGluZy8KKyogaHR0cDovL2RhYmVhei5ibG9nc3BvdC5jb20vMjAxMS8wMS9wb3J0aW5nLXB5NjUtYW5kLW15LXN1cGVyYm9hcmQtdG8uaHRtbAorKiBodHRwOi8vbHVjdW1yLnBvY29vLm9yZy8yMDExLzEvMjIvZm9yd2FyZHMtY29tcGF0aWJsZS1weXRob24vCisqIGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTAvMi8xMS9wb3J0aW5nLXRvLXB5dGhvbi0zLWEtZ3VpZGUvCisqIGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Qb3J0aW5nUHl0aG9uVG9QeTNrCisKK0lmIHlvdSBmZWVsIHRoZXJlIGlzIHNvbWV0aGluZyBtaXNzaW5nIGZyb20gdGhpcyBkb2N1bWVudCB0aGF0IHNob3VsZCBiZSBhZGRlZCwKK3BsZWFzZSBlbWFpbCB0aGUgcHl0aG9uLXBvcnRpbmdfIG1haWxpbmcgbGlzdC4KKworLi4gX3B5dGhvbi1wb3J0aW5nOiBodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLXBvcnRpbmcKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9zb3J0aW5nLnJzdCBiL0RvYy9ob3d0by9zb3J0aW5nLnJzdAppbmRleCAzNTE3MTNmLi5kOWM3MGUyIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vc29ydGluZy5yc3QKKysrIGIvRG9jL2hvd3RvL3NvcnRpbmcucnN0CkBAIC0yMyw3ICsyMyw3IEBACiAgICAgPj4+IHNvcnRlZChbNSwgMiwgMywgMSwgNF0pCiAgICAgWzEsIDIsIDMsIDQsIDVdCiAKLVlvdSBjYW4gYWxzbyB1c2UgdGhlIDptZXRoOmBsaXN0LnNvcnRgIG1ldGhvZCBvZiBhIGxpc3QuIEl0IG1vZGlmaWVzIHRoZSBsaXN0CitZb3UgY2FuIGFsc28gdXNlIHRoZSA6bWV0aDpgbGlzdC5zb3J0YCBtZXRob2QuIEl0IG1vZGlmaWVzIHRoZSBsaXN0CiBpbi1wbGFjZSAoYW5kIHJldHVybnMgKk5vbmUqIHRvIGF2b2lkIGNvbmZ1c2lvbikuIFVzdWFsbHkgaXQncyBsZXNzIGNvbnZlbmllbnQKIHRoYW4gOmZ1bmM6YHNvcnRlZGAgLSBidXQgaWYgeW91IGRvbid0IG5lZWQgdGhlIG9yaWdpbmFsIGxpc3QsIGl0J3Mgc2xpZ2h0bHkKIG1vcmUgZWZmaWNpZW50LgpAQCAtODcsOSArODcsOSBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PQogCiBUaGUga2V5LWZ1bmN0aW9uIHBhdHRlcm5zIHNob3duIGFib3ZlIGFyZSB2ZXJ5IGNvbW1vbiwgc28gUHl0aG9uIHByb3ZpZGVzCi1jb252ZW5pZW5jZSBmdW5jdGlvbnMgdG8gbWFrZSBhY2Nlc3NvciBmdW5jdGlvbnMgZWFzaWVyIGFuZCBmYXN0ZXIuIFRoZSBvcGVyYXRvcgotbW9kdWxlIGhhcyA6ZnVuYzpgb3BlcmF0b3IuaXRlbWdldHRlcmAsIDpmdW5jOmBvcGVyYXRvci5hdHRyZ2V0dGVyYCwgYW5kCi1hbiA6ZnVuYzpgb3BlcmF0b3IubWV0aG9kY2FsbGVyYCBmdW5jdGlvbi4KK2NvbnZlbmllbmNlIGZ1bmN0aW9ucyB0byBtYWtlIGFjY2Vzc29yIGZ1bmN0aW9ucyBlYXNpZXIgYW5kIGZhc3Rlci4gVGhlCis6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGhhcyA6ZnVuYzpgfm9wZXJhdG9yLml0ZW1nZXR0ZXJgLAorOmZ1bmM6YH5vcGVyYXRvci5hdHRyZ2V0dGVyYCwgYW5kIGFuIDpmdW5jOmB+b3BlcmF0b3IubWV0aG9kY2FsbGVyYCBmdW5jdGlvbi4KIAogVXNpbmcgdGhvc2UgZnVuY3Rpb25zLCB0aGUgYWJvdmUgZXhhbXBsZXMgYmVjb21lIHNpbXBsZXIgYW5kIGZhc3RlcjoKIApAQCAtMjQ3LDYgKzI0Nyw4IEBACiAgICAgPj4+IHNvcnRlZChbNSwgMiwgNCwgMSwgM10sIGtleT1jbXBfdG9fa2V5KHJldmVyc2VfbnVtZXJpYykpCiAgICAgWzUsIDQsIDMsIDIsIDFdCiAKK0luIFB5dGhvbiAzLjIsIHRoZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKzptb2Q6YGZ1bmN0b29sc2AgbW9kdWxlIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgogCiBPZGQgYW5kIEVuZHMKID09PT09PT09PT09PQpAQCAtMjU0LDcgKzI1Niw3IEBACiAqIEZvciBsb2NhbGUgYXdhcmUgc29ydGluZywgdXNlIDpmdW5jOmBsb2NhbGUuc3RyeGZybWAgZm9yIGEga2V5IGZ1bmN0aW9uIG9yCiAgIDpmdW5jOmBsb2NhbGUuc3RyY29sbGAgZm9yIGEgY29tcGFyaXNvbiBmdW5jdGlvbi4KIAotKiBUaGUgKnJldmVyc2UqIHBhcmFtZXRlciBzdGlsbCBtYWludGFpbnMgc29ydCBzdGFiaWxpdHkgKGkuZS4gcmVjb3JkcyB3aXRoCisqIFRoZSAqcmV2ZXJzZSogcGFyYW1ldGVyIHN0aWxsIG1haW50YWlucyBzb3J0IHN0YWJpbGl0eSAoc28gdGhhdCByZWNvcmRzIHdpdGgKICAgZXF1YWwga2V5cyByZXRhaW4gdGhlIG9yaWdpbmFsIG9yZGVyKS4gSW50ZXJlc3RpbmdseSwgdGhhdCBlZmZlY3QgY2FuIGJlCiAgIHNpbXVsYXRlZCB3aXRob3V0IHRoZSBwYXJhbWV0ZXIgYnkgdXNpbmcgdGhlIGJ1aWx0aW4gOmZ1bmM6YHJldmVyc2VkYCBmdW5jdGlvbgogICB0d2ljZToKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by91bmljb2RlLnJzdCBiL0RvYy9ob3d0by91bmljb2RlLnJzdAppbmRleCAxM2VmYTc2Li43N2ZjZDI2IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QKKysrIGIvRG9jL2hvd3RvL3VuaWNvZGUucnN0CkBAIC00LDEzICs0LDExIEBACiAgIFVuaWNvZGUgSE9XVE8KICoqKioqKioqKioqKioqKioqCiAKLTpSZWxlYXNlOiAxLjExCis6UmVsZWFzZTogMS4xMgogCi1UaGlzIEhPV1RPIGRpc2N1c3NlcyBQeXRob24gMi54J3Mgc3VwcG9ydCBmb3IgVW5pY29kZSwgYW5kIGV4cGxhaW5zCitUaGlzIEhPV1RPIGRpc2N1c3NlcyBQeXRob24gc3VwcG9ydCBmb3IgVW5pY29kZSwgYW5kIGV4cGxhaW5zCiB2YXJpb3VzIHByb2JsZW1zIHRoYXQgcGVvcGxlIGNvbW1vbmx5IGVuY291bnRlciB3aGVuIHRyeWluZyB0byB3b3JrCi13aXRoIFVuaWNvZGUuICAoVGhpcyBIT1dUTyBoYXMgbm90IHlldCBiZWVuIHVwZGF0ZWQgdG8gY292ZXIgdGhlIDMueAotdmVyc2lvbnMgb2YgUHl0aG9uLikKLQord2l0aCBVbmljb2RlLgogCiBJbnRyb2R1Y3Rpb24gdG8gVW5pY29kZQogPT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTQ0LDE0ICs0MiwxNCBAQAogaG9sZCB2YWx1ZXMgcmFuZ2luZyBmcm9tIDAgdG8gMjU1LiAgQVNDSUkgY29kZXMgb25seSB3ZW50IHVwIHRvIDEyNywgc28gc29tZQogbWFjaGluZXMgYXNzaWduZWQgdmFsdWVzIGJldHdlZW4gMTI4IGFuZCAyNTUgdG8gYWNjZW50ZWQgY2hhcmFjdGVycy4gIERpZmZlcmVudAogbWFjaGluZXMgaGFkIGRpZmZlcmVudCBjb2RlcywgaG93ZXZlciwgd2hpY2ggbGVkIHRvIHByb2JsZW1zIGV4Y2hhbmdpbmcgZmlsZXMuCi1FdmVudHVhbGx5IHZhcmlvdXMgY29tbW9ubHkgdXNlZCBzZXRzIG9mIHZhbHVlcyBmb3IgdGhlIDEyOC0yNTUgcmFuZ2UgZW1lcmdlZC4KK0V2ZW50dWFsbHkgdmFyaW91cyBjb21tb25seSB1c2VkIHNldHMgb2YgdmFsdWVzIGZvciB0aGUgMTI4LS0yNTUgcmFuZ2UgZW1lcmdlZC4KIFNvbWUgd2VyZSB0cnVlIHN0YW5kYXJkcywgZGVmaW5lZCBieSB0aGUgSW50ZXJuYXRpb25hbCBTdGFuZGFyZHMgT3JnYW5pemF0aW9uLAogYW5kIHNvbWUgd2VyZSAqKmRlIGZhY3RvKiogY29udmVudGlvbnMgdGhhdCB3ZXJlIGludmVudGVkIGJ5IG9uZSBjb21wYW55IG9yCiBhbm90aGVyIGFuZCBtYW5hZ2VkIHRvIGNhdGNoIG9uLgogCiAyNTUgY2hhcmFjdGVycyBhcmVuJ3QgdmVyeSBtYW55LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4ndCBmaXQgYm90aCB0aGUgYWNjZW50ZWQKIGNoYXJhY3RlcnMgdXNlZCBpbiBXZXN0ZXJuIEV1cm9wZSBhbmQgdGhlIEN5cmlsbGljIGFscGhhYmV0IHVzZWQgZm9yIFJ1c3NpYW4KLWludG8gdGhlIDEyOC0yNTUgcmFuZ2UgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEyNyBzdWNoIGNoYXJhY3RlcnMuCitpbnRvIHRoZSAxMjgtLTI1NSByYW5nZSBiZWNhdXNlIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTI3IHN1Y2ggY2hhcmFjdGVycy4KIAogWW91IGNvdWxkIHdyaXRlIGZpbGVzIHVzaW5nIGRpZmZlcmVudCBjb2RlcyAoYWxsIHlvdXIgUnVzc2lhbiBmaWxlcyBpbiBhIGNvZGluZwogc3lzdGVtIGNhbGxlZCBLT0k4LCBhbGwgeW91ciBGcmVuY2ggZmlsZXMgaW4gYSBkaWZmZXJlbnQgY29kaW5nIHN5c3RlbSBjYWxsZWQKQEAgLTY0LDggKzYyLDggQEAKIHRvIHJlcHJlc2VudCBtYW55IGRpZmZlcmVudCBjaGFyYWN0ZXJzIGZyb20gbWFueSBkaWZmZXJlbnQgYWxwaGFiZXRzOyBhbiBpbml0aWFsCiBnb2FsIHdhcyB0byBoYXZlIFVuaWNvZGUgY29udGFpbiB0aGUgYWxwaGFiZXRzIGZvciBldmVyeSBzaW5nbGUgaHVtYW4gbGFuZ3VhZ2UuCiBJdCB0dXJucyBvdXQgdGhhdCBldmVuIDE2IGJpdHMgaXNuJ3QgZW5vdWdoIHRvIG1lZXQgdGhhdCBnb2FsLCBhbmQgdGhlIG1vZGVybgotVW5pY29kZSBzcGVjaWZpY2F0aW9uIHVzZXMgYSB3aWRlciByYW5nZSBvZiBjb2RlcywgMC0xLDExNCwxMTEgKDB4MTBmZmZmIGluCi1iYXNlLTE2KS4KK1VuaWNvZGUgc3BlY2lmaWNhdGlvbiB1c2VzIGEgd2lkZXIgcmFuZ2Ugb2YgY29kZXMsIDAgdGhyb3VnaCAxLDExNCwxMTEgKDB4MTBmZmZmCitpbiBiYXNlIDE2KS4KIAogVGhlcmUncyBhIHJlbGF0ZWQgSVNPIHN0YW5kYXJkLCBJU08gMTA2NDYuICBVbmljb2RlIGFuZCBJU08gMTA2NDYgd2VyZQogb3JpZ2luYWxseSBzZXBhcmF0ZSBlZmZvcnRzLCBidXQgdGhlIHNwZWNpZmljYXRpb25zIHdlcmUgbWVyZ2VkIHdpdGggdGhlIDEuMQpAQCAtOTAsNyArODgsNyBAQAogVGhlIFVuaWNvZGUgc3RhbmRhcmQgZGVzY3JpYmVzIGhvdyBjaGFyYWN0ZXJzIGFyZSByZXByZXNlbnRlZCBieSAqKmNvZGUKIHBvaW50cyoqLiAgQSBjb2RlIHBvaW50IGlzIGFuIGludGVnZXIgdmFsdWUsIHVzdWFsbHkgZGVub3RlZCBpbiBiYXNlIDE2LiAgSW4gdGhlCiBzdGFuZGFyZCwgYSBjb2RlIHBvaW50IGlzIHdyaXR0ZW4gdXNpbmcgdGhlIG5vdGF0aW9uIFUrMTJjYSB0byBtZWFuIHRoZQotY2hhcmFjdGVyIHdpdGggdmFsdWUgMHgxMmNhICg0ODEwIGRlY2ltYWwpLiAgVGhlIFVuaWNvZGUgc3RhbmRhcmQgY29udGFpbnMgYSBsb3QKK2NoYXJhY3RlciB3aXRoIHZhbHVlIDB4MTJjYSAoNCw4MTAgZGVjaW1hbCkuICBUaGUgVW5pY29kZSBzdGFuZGFyZCBjb250YWlucyBhIGxvdAogb2YgdGFibGVzIGxpc3RpbmcgY2hhcmFjdGVycyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBjb2RlIHBvaW50czo6CiAKICAgIDAwNjEgICAgJ2EnOyBMQVRJTiBTTUFMTCBMRVRURVIgQQpAQCAtMTE3LDEwICsxMTUsMTAgQEAKIC0tLS0tLS0tLQogCiBUbyBzdW1tYXJpemUgdGhlIHByZXZpb3VzIHNlY3Rpb246IGEgVW5pY29kZSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiBjb2RlCi1wb2ludHMsIHdoaWNoIGFyZSBudW1iZXJzIGZyb20gMCB0byAweDEwZmZmZi4gIFRoaXMgc2VxdWVuY2UgbmVlZHMgdG8gYmUKLXJlcHJlc2VudGVkIGFzIGEgc2V0IG9mIGJ5dGVzIChtZWFuaW5nLCB2YWx1ZXMgZnJvbSAwLTI1NSkgaW4gbWVtb3J5LiAgVGhlIHJ1bGVzCi1mb3IgdHJhbnNsYXRpbmcgYSBVbmljb2RlIHN0cmluZyBpbnRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgYXJlIGNhbGxlZCBhbgotKiplbmNvZGluZyoqLgorcG9pbnRzLCB3aGljaCBhcmUgbnVtYmVycyBmcm9tIDAgdGhyb3VnaCAweDEwZmZmZiAoMSwxMTQsMTExIGRlY2ltYWwpLiAgVGhpcworc2VxdWVuY2UgbmVlZHMgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYSBzZXQgb2YgYnl0ZXMgKG1lYW5pbmcsIHZhbHVlcworZnJvbSAwIHRocm91Z2ggMjU1KSBpbiBtZW1vcnkuICBUaGUgcnVsZXMgZm9yIHRyYW5zbGF0aW5nIGEgVW5pY29kZSBzdHJpbmcKK2ludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBhcmUgY2FsbGVkIGFuICoqZW5jb2RpbmcqKi4KIAogVGhlIGZpcnN0IGVuY29kaW5nIHlvdSBtaWdodCB0aGluayBvZiBpcyBhbiBhcnJheSBvZiAzMi1iaXQgaW50ZWdlcnMuICBJbiB0aGlzCiByZXByZXNlbnRhdGlvbiwgdGhlIHN0cmluZyAiUHl0aG9uIiB3b3VsZCBsb29rIGxpa2UgdGhpczo6CkBAIC0xNjQsNyArMTYyLDcgQEAKICAgIGNhc2UuKQogCiBMYXRpbi0xLCBhbHNvIGtub3duIGFzIElTTy04ODU5LTEsIGlzIGEgc2ltaWxhciBlbmNvZGluZy4gIFVuaWNvZGUgY29kZSBwb2ludHMKLTAtMjU1IGFyZSBpZGVudGljYWwgdG8gdGhlIExhdGluLTEgdmFsdWVzLCBzbyBjb252ZXJ0aW5nIHRvIHRoaXMgZW5jb2Rpbmcgc2ltcGx5CiswLS0yNTUgYXJlIGlkZW50aWNhbCB0byB0aGUgTGF0aW4tMSB2YWx1ZXMsIHNvIGNvbnZlcnRpbmcgdG8gdGhpcyBlbmNvZGluZyBzaW1wbHkKIHJlcXVpcmVzIGNvbnZlcnRpbmcgY29kZSBwb2ludHMgdG8gYnl0ZSB2YWx1ZXM7IGlmIGEgY29kZSBwb2ludCBsYXJnZXIgdGhhbiAyNTUKIGlzIGVuY291bnRlcmVkLCB0aGUgc3RyaW5nIGNhbid0IGJlIGVuY29kZWQgaW50byBMYXRpbi0xLgogCkBAIC0yMjYsOCArMjI0LDggQEAKIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04PiwgZm9yIGV4YW1wbGUuCiAKIAotUHl0aG9uIDIueCdzIFVuaWNvZGUgU3VwcG9ydAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUHl0aG9uJ3MgVW5pY29kZSBTdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT0KIAogTm93IHRoYXQgeW91J3ZlIGxlYXJuZWQgdGhlIHJ1ZGltZW50cyBvZiBVbmljb2RlLCB3ZSBjYW4gbG9vayBhdCBQeXRob24ncwogVW5pY29kZSBmZWF0dXJlcy4KQEAgLTI4NCwxMCArMjgyLDEwIEBACiBidWlsdC1pbiA6ZnVuYzpgb3JkYCBmdW5jdGlvbiB0aGF0IHRha2VzIGEgb25lLWNoYXJhY3RlciBVbmljb2RlIHN0cmluZyBhbmQKIHJldHVybnMgdGhlIGNvZGUgcG9pbnQgdmFsdWU6OgogCi0gICAgPj4+IGNocig0MDk2MCkKLSAgICAnXHVhMDAwJwotICAgID4+PiBvcmQoJ1x1YTAwMCcpCi0gICAgNDA5NjAKKyAgICA+Pj4gY2hyKDU3MzQ0KQorICAgICdcdWUwMDAnCisgICAgPj4+IG9yZCgnXHVlMDAwJykKKyAgICA1NzM0NAogCiBDb252ZXJ0aW5nIHRvIEJ5dGVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMjksNyArMzI3LDggQEAKIAogSW4gUHl0aG9uIHNvdXJjZSBjb2RlLCBzcGVjaWZpYyBVbmljb2RlIGNvZGUgcG9pbnRzIGNhbiBiZSB3cml0dGVuIHVzaW5nIHRoZQogYGBcdWBgIGVzY2FwZSBzZXF1ZW5jZSwgd2hpY2ggaXMgZm9sbG93ZWQgYnkgZm91ciBoZXggZGlnaXRzIGdpdmluZyB0aGUgY29kZQotcG9pbnQuICBUaGUgYGBcVWBgIGVzY2FwZSBzZXF1ZW5jZSBpcyBzaW1pbGFyLCBidXQgZXhwZWN0cyA4IGhleCBkaWdpdHMsIG5vdCA0OjoKK3BvaW50LiAgVGhlIGBgXFVgYCBlc2NhcGUgc2VxdWVuY2UgaXMgc2ltaWxhciwgYnV0IGV4cGVjdHMgZWlnaHQgaGV4IGRpZ2l0cywKK25vdCBmb3VyOjoKIAogICAgID4+PiBzID0gImFceGFjXHUxMjM0XHUyMGFjXFUwMDAwODAwMCIKICAgICAgICAgICAgICAgXl5eXiB0d28tZGlnaXQgaGV4IGVzY2FwZQpAQCAtNDA5LDcgKzQwOCw3IEBACiBmcm9tIHRoZSBhYm92ZSBvdXRwdXQsIGBgJ0xsJ2BgIG1lYW5zICdMZXR0ZXIsIGxvd2VyY2FzZScsIGBgJ05vJ2BgIG1lYW5zCiAiTnVtYmVyLCBvdGhlciIsIGBgJ01uJ2BgIGlzICJNYXJrLCBub25zcGFjaW5nIiwgYW5kIGBgJ1NvJ2BgIGlzICJTeW1ib2wsCiBvdGhlciIuICBTZWUKLTxodHRwOi8vdW5pY29kZS5vcmcvUHVibGljLzUuMS4wL3VjZC9VQ0QuaHRtbCNHZW5lcmFsX0NhdGVnb3J5X1ZhbHVlcz4gZm9yIGEKKzxodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI0NC8jR2VuZXJhbF9DYXRlZ29yeV9WYWx1ZXM+IGZvciBhCiBsaXN0IG9mIGNhdGVnb3J5IGNvZGVzLgogCiBSZWZlcmVuY2VzCkBAIC00NjgsMTggKzQ2NywxNyBAQAogCiBSZWFkaW5nIFVuaWNvZGUgZnJvbSBhIGZpbGUgaXMgdGhlcmVmb3JlIHNpbXBsZTo6CiAKLSAgICBmID0gb3BlbigndW5pY29kZS5yc3QnLCBlbmNvZGluZz0ndXRmLTgnKQotICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgIHByaW50KHJlcHIobGluZSkpCisgICAgd2l0aCBvcGVuKCd1bmljb2RlLnJzdCcsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBwcmludChyZXByKGxpbmUpKQogCiBJdCdzIGFsc28gcG9zc2libGUgdG8gb3BlbiBmaWxlcyBpbiB1cGRhdGUgbW9kZSwgYWxsb3dpbmcgYm90aCByZWFkaW5nIGFuZAogd3JpdGluZzo6CiAKLSAgICBmID0gb3BlbigndGVzdCcsIGVuY29kaW5nPSd1dGYtOCcsIG1vZGU9J3crJykKLSAgICBmLndyaXRlKCdcdTQ1MDAgYmxhaCBibGFoIGJsYWhcbicpCi0gICAgZi5zZWVrKDApCi0gICAgcHJpbnQocmVwcihmLnJlYWRsaW5lKClbOjFdKSkKLSAgICBmLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oJ3Rlc3QnLCBlbmNvZGluZz0ndXRmLTgnLCBtb2RlPSd3KycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ1x1NDUwMCBibGFoIGJsYWggYmxhaFxuJykKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIHByaW50KHJlcHIoZi5yZWFkbGluZSgpWzoxXSkpCiAKIFRoZSBVbmljb2RlIGNoYXJhY3RlciBVK0ZFRkYgaXMgdXNlZCBhcyBhIGJ5dGUtb3JkZXIgbWFyayAoQk9NKSwgYW5kIGlzIG9mdGVuCiB3cml0dGVuIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBmaWxlIGluIG9yZGVyIHRvIGFzc2lzdCB3aXRoIGF1dG9kZXRlY3Rpb24KQEAgLTUxNiwxNCArNTE0LDEzIEBACiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgcmlnaHQgZW5jb2RpbmcgZm9yIHlvdTo6CiAKICAgICBmaWxlbmFtZSA9ICdmaWxlbmFtZVx1NDUwMGFiYycKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgIGYud3JpdGUoJ2JsYWhcbicpCi0gICAgZi5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoJ2JsYWhcbicpCiAKIEZ1bmN0aW9ucyBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSBzdWNoIGFzIDpmdW5jOmBvcy5zdGF0YCB3aWxsIGFsc28gYWNjZXB0IFVuaWNvZGUKIGZpbGVuYW1lcy4KIAotOmZ1bmM6YG9zLmxpc3RkaXJgLCB3aGljaCByZXR1cm5zIGZpbGVuYW1lcywgcmFpc2VzIGFuIGlzc3VlOiBzaG91bGQgaXQgcmV0dXJuCitGdW5jdGlvbiA6ZnVuYzpgb3MubGlzdGRpcmAsIHdoaWNoIHJldHVybnMgZmlsZW5hbWVzLCByYWlzZXMgYW4gaXNzdWU6IHNob3VsZCBpdCByZXR1cm4KIHRoZSBVbmljb2RlIHZlcnNpb24gb2YgZmlsZW5hbWVzLCBvciBzaG91bGQgaXQgcmV0dXJuIGJ5dGUgc3RyaW5ncyBjb250YWluaW5nCiB0aGUgZW5jb2RlZCB2ZXJzaW9ucz8gIDpmdW5jOmBvcy5saXN0ZGlyYCB3aWxsIGRvIGJvdGgsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdQogcHJvdmlkZWQgdGhlIGRpcmVjdG9yeSBwYXRoIGFzIGEgYnl0ZSBzdHJpbmcgb3IgYSBVbmljb2RlIHN0cmluZy4gIElmIHlvdSBwYXNzIGEKQEAgLTU3MiwxNCArNTY5LDYgQEAKIHR3byBkaWZmZXJlbnQga2luZHMgb2Ygc3RyaW5ncy4gIFRoZXJlIGlzIG5vIGF1dG9tYXRpYyBlbmNvZGluZyBvciBkZWNvZGluZyBpZgogeW91IGRvIGUuZy4gYGBzdHIgKyBieXRlc2BgLCBhIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkIGZvciB0aGlzIGV4cHJlc3Npb24uCiAKLUl0J3MgZWFzeSB0byBtaXNzIHN1Y2ggcHJvYmxlbXMgaWYgeW91IG9ubHkgdGVzdCB5b3VyIHNvZnR3YXJlIHdpdGggZGF0YSB0aGF0Ci1kb2Vzbid0IGNvbnRhaW4gYW55IGFjY2VudHM7IGV2ZXJ5dGhpbmcgd2lsbCBzZWVtIHRvIHdvcmssIGJ1dCB0aGVyZSdzIGFjdHVhbGx5Ci1hIGJ1ZyBpbiB5b3VyIHByb2dyYW0gd2FpdGluZyBmb3IgdGhlIGZpcnN0IHVzZXIgd2hvIGF0dGVtcHRzIHRvIHVzZSBjaGFyYWN0ZXJzCi0+IDEyNy4gIEEgc2Vjb25kIHRpcCwgdGhlcmVmb3JlLCBpczoKLQotICAgIEluY2x1ZGUgY2hhcmFjdGVycyA+IDEyNyBhbmQsIGV2ZW4gYmV0dGVyLCBjaGFyYWN0ZXJzID4gMjU1IGluIHlvdXIgdGVzdAotICAgIGRhdGEuCi0KIFdoZW4gdXNpbmcgZGF0YSBjb21pbmcgZnJvbSBhIHdlYiBicm93c2VyIG9yIHNvbWUgb3RoZXIgdW50cnVzdGVkIHNvdXJjZSwgYQogY29tbW9uIHRlY2huaXF1ZSBpcyB0byBjaGVjayBmb3IgaWxsZWdhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGJlZm9yZSB1c2luZyB0aGUKIHN0cmluZyBpbiBhIGdlbmVyYXRlZCBjb21tYW5kIGxpbmUgb3Igc3RvcmluZyBpdCBpbiBhIGRhdGFiYXNlLiAgSWYgeW91J3JlIGRvaW5nCkBAIC01OTcsOCArNTg2LDggQEAKICAgICAgICAgaWYgJy8nIGluIGZpbGVuYW1lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJy8nIG5vdCBhbGxvd2VkIGluIGZpbGVuYW1lcyIpCiAgICAgICAgIHVuaWNvZGVfbmFtZSA9IGZpbGVuYW1lLmRlY29kZShlbmNvZGluZykKLSAgICAgICAgZiA9IG9wZW4odW5pY29kZV9uYW1lLCAncicpCi0gICAgICAgICMgLi4uIHJldHVybiBjb250ZW50cyBvZiBmaWxlIC4uLgorICAgICAgICB3aXRoIG9wZW4odW5pY29kZV9uYW1lLCAncicpIGFzIGY6CisgICAgICAgICAgICAjIC4uLiByZXR1cm4gY29udGVudHMgb2YgZmlsZSAuLi4KIAogSG93ZXZlciwgaWYgYW4gYXR0YWNrZXIgY291bGQgc3BlY2lmeSB0aGUgYGAnYmFzZTY0J2BgIGVuY29kaW5nLCB0aGV5IGNvdWxkIHBhc3MKIGBgJ0wyVjBZeTl3WVhOemQyUT0nYGAsIHdoaWNoIGlzIHRoZSBiYXNlLTY0IGVuY29kZWQgZm9ybSBvZiB0aGUgc3RyaW5nCkBAIC02MTMsMjcgKzYwMiwzMCBAQAogQXBwbGljYXRpb25zIGluIFB5dGhvbiIgYXJlIGF2YWlsYWJsZSBhdAogPGh0dHA6Ly9kb3dubG9hZHMuZWdlbml4LmNvbS9weXRob24vTFNNMjAwNS1EZXZlbG9waW5nLVVuaWNvZGUtYXdhcmUtYXBwbGljYXRpb25zLWluLVB5dGhvbi5wZGY+CiBhbmQgZGlzY3VzcyBxdWVzdGlvbnMgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyBhcyB3ZWxsIGFzIGhvdyB0byBpbnRlcm5hdGlvbmFsaXplCi1hbmQgbG9jYWxpemUgYW4gYXBwbGljYXRpb24uCithbmQgbG9jYWxpemUgYW4gYXBwbGljYXRpb24uICBUaGVzZSBzbGlkZXMgY292ZXIgUHl0aG9uIDIueCBvbmx5LgogCiAKLVJldmlzaW9uIEhpc3RvcnkgYW5kIEFja25vd2xlZGdlbWVudHMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0Fja25vd2xlZGdlbWVudHMKKz09PT09PT09PT09PT09PT0KIAogVGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIHdobyBoYXZlIG5vdGVkIGVycm9ycyBvciBvZmZlcmVkIHN1Z2dlc3Rpb25zIG9uCiB0aGlzIGFydGljbGU6IE5pY2hvbGFzIEJhc3RpbiwgTWFyaXVzIEdlZG1pbmFzLCBLZW50IEpvaG5zb24sIEtlbiBLcnVnbGVyLAogTWFyYy1BbmRyw6kgTGVtYnVyZywgTWFydGluIHZvbiBMw7Z3aXMsIENoYWQgV2hpdGFjcmUuCiAKLVZlcnNpb24gMS4wOiBwb3N0ZWQgQXVndXN0IDUgMjAwNS4KKy4uIGNvbW1lbnQKKyAgIFJldmlzaW9uIEhpc3RvcnkKIAotVmVyc2lvbiAxLjAxOiBwb3N0ZWQgQXVndXN0IDcgMjAwNS4gIENvcnJlY3RzIGZhY3R1YWwgYW5kIG1hcmt1cCBlcnJvcnM7IGFkZHMKLXNldmVyYWwgbGlua3MuCisgICBWZXJzaW9uIDEuMDogcG9zdGVkIEF1Z3VzdCA1IDIwMDUuCiAKLVZlcnNpb24gMS4wMjogcG9zdGVkIEF1Z3VzdCAxNiAyMDA1LiAgQ29ycmVjdHMgZmFjdHVhbCBlcnJvcnMuCisgICBWZXJzaW9uIDEuMDE6IHBvc3RlZCBBdWd1c3QgNyAyMDA1LiAgQ29ycmVjdHMgZmFjdHVhbCBhbmQgbWFya3VwIGVycm9yczsgYWRkcworICAgc2V2ZXJhbCBsaW5rcy4KIAotVmVyc2lvbiAxLjE6IEZlYi1Ob3YgMjAwOC4gIFVwZGF0ZXMgdGhlIGRvY3VtZW50IHdpdGggcmVzcGVjdCB0byBQeXRob24gMyBjaGFuZ2VzLgorICAgVmVyc2lvbiAxLjAyOiBwb3N0ZWQgQXVndXN0IDE2IDIwMDUuICBDb3JyZWN0cyBmYWN0dWFsIGVycm9ycy4KIAotVmVyc2lvbiAxLjExOiBwb3N0ZWQgSnVuZSAyMCAyMDEwLiAgTm90ZXMgdGhhdCBQeXRob24gMy54IGlzIG5vdCBjb3ZlcmVkLAotYW5kIHRoYXQgdGhlIEhPV1RPIG9ubHkgY292ZXJzIDIueC4KKyAgIFZlcnNpb24gMS4xOiBGZWItTm92IDIwMDguICBVcGRhdGVzIHRoZSBkb2N1bWVudCB3aXRoIHJlc3BlY3QgdG8gUHl0aG9uIDMgY2hhbmdlcy4KKworICAgVmVyc2lvbiAxLjExOiBwb3N0ZWQgSnVuZSAyMCAyMDEwLiAgTm90ZXMgdGhhdCBQeXRob24gMy54IGlzIG5vdCBjb3ZlcmVkLAorICAgYW5kIHRoYXQgdGhlIEhPV1RPIG9ubHkgY292ZXJzIDIueC4KIAogLi4gY29tbWVudCBEZXNjcmliZSBQeXRob24gMy54IHN1cHBvcnQgKG5ldyBzZWN0aW9uPyBuZXcgZG9jdW1lbnQ/KQogLi4gY29tbWVudCBBZGRpdGlvbmFsIHRvcGljOiBidWlsZGluZyBQeXRob24gdy8gVUNTMiBvciBVQ1M0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdCBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdAppbmRleCBjYWYwYWQ2Li5jNGFjMmIyIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKKysrIGIvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAjIC0qLSBjb2Rpbmc6IFVURi04IC0qLQogCiAgICAgaW1wb3J0IHN5cywgb3MKLSAgICBmcm9tIGNnaSBpbXBvcnQgZXNjYXBlCisgICAgZnJvbSBodG1sIGltcG9ydCBlc2NhcGUKICAgICBmcm9tIGZsdXAuc2VydmVyLmZjZ2kgaW1wb3J0IFdTR0lTZXJ2ZXIKIAogICAgIGRlZiBhcHAoZW52aXJvbiwgc3RhcnRfcmVzcG9uc2UpOgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2RicGlja2xlLnB5IGIvRG9jL2luY2x1ZGVzL2RicGlja2xlLnB5CmluZGV4IGMwMjFlYWMuLmI4OGVlODcgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9kYnBpY2tsZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZGJwaWNrbGUucHkKQEAgLTQ3LDcgKzQ3LDggQEAKIAogCiBkZWYgbWFpbigpOgotICAgIGltcG9ydCBpbywgcHByaW50CisgICAgaW1wb3J0IGlvCisgICAgaW1wb3J0IHBwcmludAogCiAgICAgIyBJbml0aWFsaXplIGFuZCBwb3B1bGF0ZSBvdXIgZGF0YWJhc2UuCiAgICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiOm1lbW9yeToiKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5CmluZGV4IDgyZTNmZmEuLjMzYzQzMGEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHNtdHBsaWIKIApkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKaW5kZXggMDM1NDQyYi4uY2M1NTI5ZSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICIiIlNlbmQgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5IGFzIGEgTUlNRSBtZXNzYWdlLiIiIgogCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzMxN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQpAQCAtMCwwICsxLDE3IEBACisjIEltcG9ydCB0aGUgZW1haWwgbW9kdWxlcyB3ZSdsbCBuZWVkCitmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgUGFyc2VyCisKKyMgIElmIHRoZSBlLW1haWwgaGVhZGVycyBhcmUgaW4gYSBmaWxlLCB1bmNvbW1lbnQgdGhpcyBsaW5lOgorI2hlYWRlcnMgPSBQYXJzZXIoKS5wYXJzZShvcGVuKG1lc3NhZ2VmaWxlLCAncicpKQorCisjICBPciBmb3IgcGFyc2luZyBoZWFkZXJzIGluIGEgc3RyaW5nLCB1c2U6CitoZWFkZXJzID0gUGFyc2VyKCkucGFyc2VzdHIoJ0Zyb206IDx1c2VyQGV4YW1wbGUuY29tPlxuJworICAgICAgICAnVG86IDxzb21lb25lX2Vsc2VAZXhhbXBsZS5jb20+XG4nCisgICAgICAgICdTdWJqZWN0OiBUZXN0IG1lc3NhZ2VcbicKKyAgICAgICAgJ1xuJworICAgICAgICAnQm9keSB3b3VsZCBnbyBoZXJlXG4nKQorCisjICBOb3cgdGhlIGhlYWRlciBpdGVtcyBjYW4gYmUgYWNjZXNzZWQgYXMgYSBkaWN0aW9uYXJ5OgorcHJpbnQoJ1RvOiAlcycgJSBoZWFkZXJzWyd0byddKQorcHJpbnQoJ0Zyb206ICVzJyAlIGhlYWRlcnNbJ2Zyb20nXSkKK3ByaW50KCdTdWJqZWN0OiAlcycgJSBoZWFkZXJzWydzdWJqZWN0J10pCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvZW1haWwtbWltZS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CmluZGV4IDdiMWMwMjguLmE5MGVkYzEgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1taW1lLnB5CkBAIC0yNyw1ICsyNyw1IEBACiAKICMgU2VuZCB0aGUgZW1haWwgdmlhIG91ciBvd24gU01UUCBzZXJ2ZXIuCiBzID0gc210cGxpYi5TTVRQKCdsb2NhbGhvc3QnKQotcy5zZW5kbWFpbChtZSwgZmFtaWx5LCBtc2cuYXNfc3RyaW5nKCkpCitzLnNlbmRfbWVzc2FnZShtc2cpCiBzLnF1aXQoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1zaW1wbGUucHkKaW5kZXggMjliZDA3OC4uMDc3NTY4ZCAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtc2ltcGxlLnB5CkBAIC0xNyw4ICsxNyw3IEBACiBtc2dbJ0Zyb20nXSA9IG1lCiBtc2dbJ1RvJ10gPSB5b3UKIAotIyBTZW5kIHRoZSBtZXNzYWdlIHZpYSBvdXIgb3duIFNNVFAgc2VydmVyLCBidXQgZG9uJ3QgaW5jbHVkZSB0aGUKLSMgZW52ZWxvcGUgaGVhZGVyLgorIyBTZW5kIHRoZSBtZXNzYWdlIHZpYSBvdXIgb3duIFNNVFAgc2VydmVyLgogcyA9IHNtdHBsaWIuU01UUCgnbG9jYWxob3N0JykKLXMuc2VuZG1haWwobWUsIFt5b3VdLCBtc2cuYXNfc3RyaW5nKCkpCitzLnNlbmRfbWVzc2FnZShtc2cpCiBzLnF1aXQoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKaW5kZXggYThmNzEyZC4uMzY1MzU0MyAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICIiIlVucGFjayBhIE1JTUUgbWVzc2FnZSBpbnRvIGEgZGlyZWN0b3J5IG9mIGZpbGVzLiIiIgogCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbWluaWRvbS1leGFtcGxlLnB5IGIvRG9jL2luY2x1ZGVzL21pbmlkb20tZXhhbXBsZS5weQppbmRleCA4ODA0OGMwLi41ZWU3NjgyIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvbWluaWRvbS1leGFtcGxlLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9taW5pZG9tLWV4YW1wbGUucHkKQEAgLTE5LDExICsxOSwxMSBAQAogZG9tID0geG1sLmRvbS5taW5pZG9tLnBhcnNlU3RyaW5nKGRvY3VtZW50KQogCiBkZWYgZ2V0VGV4dChub2RlbGlzdCk6Ci0gICAgcmMgPSAiIgorICAgIHJjID0gW10KICAgICBmb3Igbm9kZSBpbiBub2RlbGlzdDoKICAgICAgICAgaWYgbm9kZS5ub2RlVHlwZSA9PSBub2RlLlRFWFRfTk9ERToKLSAgICAgICAgICAgIHJjID0gcmMgKyBub2RlLmRhdGEKLSAgICByZXR1cm4gcmMKKyAgICAgICAgICAgIHJjLmFwcGVuZChub2RlLmRhdGEpCisgICAgcmV0dXJuICcnLmpvaW4ocmMpCiAKIGRlZiBoYW5kbGVTbGlkZXNob3coc2xpZGVzaG93KToKICAgICBwcmludCgiPGh0bWw+IikKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9iZW5jaG1hcmtzLnB5IGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKaW5kZXggNzJkNDQyNi4uYWNkZjY0MiAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkKQEAgLTUsNyArNSwxMiBAQAogIyBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogCi1pbXBvcnQgdGltZSwgc3lzLCBtdWx0aXByb2Nlc3NpbmcsIHRocmVhZGluZywgcXVldWUsIGdjCitpbXBvcnQgdGltZQoraW1wb3J0IHN5cworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHF1ZXVlCitpbXBvcnQgZ2MKIAogaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgX3RpbWVyID0gdGltZS5jbG9jawpAQCAtMTExLDcgKzExNiw3IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgogICAgICAgICAgICAgYSA9IHNlcVs1XQogCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKS10CisgICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKIAogICAgIHByaW50KGl0ZXJhdGlvbnMsICdpdGVyYXRpb25zIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQogICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQpAQCAtMTMyLDcgKzEzNyw3IEBACiAgICAgICAgICAgICBsLmFjcXVpcmUoKQogICAgICAgICAgICAgbC5yZWxlYXNlKCkKIAotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCktdAorICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0CiAKICAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKICAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKQEAgLTE2OSw3ICsxNzQsNyBAQAogICAgICAgICAgICAgYy5ub3RpZnkoKQogICAgICAgICAgICAgYy53YWl0KCkKIAotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCktdAorICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0CiAKICAgICAgICAgYy5yZWxlYXNlKCkKICAgICAgICAgcC5qb2luKCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5IGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKaW5kZXggZTM2MDcwMy4uMTU3ODQ5OCAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKQEAgLTI1LDE4ICsyNSwxOCBAQAogICAgIHJldHVybiBjYWxjdWxhdGUoKmFyZ3MpCiAKIGRlZiBtdWwoYSwgYik6Ci0gICAgdGltZS5zbGVlcCgwLjUqcmFuZG9tLnJhbmRvbSgpKQorICAgIHRpbWUuc2xlZXAoMC41ICogcmFuZG9tLnJhbmRvbSgpKQogICAgIHJldHVybiBhICogYgogCiBkZWYgcGx1cyhhLCBiKToKLSAgICB0aW1lLnNsZWVwKDAuNSpyYW5kb20ucmFuZG9tKCkpCisgICAgdGltZS5zbGVlcCgwLjUgKiByYW5kb20ucmFuZG9tKCkpCiAgICAgcmV0dXJuIGEgKyBiCiAKIGRlZiBmKHgpOgotICAgIHJldHVybiAxLjAgLyAoeC01LjApCisgICAgcmV0dXJuIDEuMCAvICh4IC0gNS4wKQogCiBkZWYgcG93Myh4KToKLSAgICByZXR1cm4geCoqMworICAgIHJldHVybiB4ICoqIDMKIAogZGVmIG5vb3AoeCk6CiAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5IGIvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CmluZGV4IGZkMzkzZjIuLjgxZGJjMzggMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvbXBfc3luY2hyb25pemUucHkKQEAgLTUsNyArNSw5IEBACiAjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAKLWltcG9ydCB0aW1lLCBzeXMsIHJhbmRvbQoraW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCByYW5kb20KIGZyb20gcXVldWUgaW1wb3J0IEVtcHR5CiAKIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgICAgICAgICAgICAgICAjIG1heSBnZXQgb3ZlcndyaXR0ZW4KQEAgLTIzNyw5ICsyMzksOSBAQAogCiAgICAgbXVsdGlwcm9jZXNzaW5nID0gbmFtZXNwYWNlCiAKLSAgICBmb3IgZnVuYyBpbiBbIHRlc3RfdmFsdWUsIHRlc3RfcXVldWUsIHRlc3RfY29uZGl0aW9uLAotICAgICAgICAgICAgICAgICAgdGVzdF9zZW1hcGhvcmUsIHRlc3Rfam9pbl90aW1lb3V0LCB0ZXN0X2V2ZW50LAotICAgICAgICAgICAgICAgICAgdGVzdF9zaGFyZWR2YWx1ZXMgXToKKyAgICBmb3IgZnVuYyBpbiBbdGVzdF92YWx1ZSwgdGVzdF9xdWV1ZSwgdGVzdF9jb25kaXRpb24sCisgICAgICAgICAgICAgICAgIHRlc3Rfc2VtYXBob3JlLCB0ZXN0X2pvaW5fdGltZW91dCwgdGVzdF9ldmVudCwKKyAgICAgICAgICAgICAgICAgdGVzdF9zaGFyZWR2YWx1ZXNdOgogCiAgICAgICAgIHByaW50KCdcblx0IyMjIyMjIyMgJXNcbicgJSBmdW5jLl9fbmFtZV9fKQogICAgICAgICBmdW5jKCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkgYi9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5CmluZGV4IDA4NzhkZTEuLjY1MTAyNGQgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF93ZWJzZXJ2ZXIucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQpAQCAtMjQsNyArMjQsNyBAQAogCiAKIGRlZiBub3RlKGZvcm1hdCwgKmFyZ3MpOgotICAgIHN5cy5zdGRlcnIud3JpdGUoJ1slc11cdCVzXG4nICUgKGN1cnJlbnRfcHJvY2VzcygpLm5hbWUsIGZvcm1hdCVhcmdzKSkKKyAgICBzeXMuc3RkZXJyLndyaXRlKCdbJXNdXHQlc1xuJyAlIChjdXJyZW50X3Byb2Nlc3MoKS5uYW1lLCBmb3JtYXQgJSBhcmdzKSkKIAogCiBjbGFzcyBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgpAQCAtNDUsNyArNDUsNyBAQAogICAgIHNlcnZlciA9IEhUVFBTZXJ2ZXIoYWRkcmVzcywgUmVxdWVzdEhhbmRsZXIpCiAKICAgICAjIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMgdG8gYWN0IGFzIHdvcmtlcnMKLSAgICBmb3IgaSBpbiByYW5nZShudW1iZXJfb2ZfcHJvY2Vzc2VzLTEpOgorICAgIGZvciBpIGluIHJhbmdlKG51bWJlcl9vZl9wcm9jZXNzZXMgLSAxKToKICAgICAgICAgUHJvY2Vzcyh0YXJnZXQ9c2VydmVfZm9yZXZlciwgYXJncz0oc2VydmVyLCkpLnN0YXJ0KCkKIAogICAgICMgbWFpbiBwcm9jZXNzIGFsc28gYWN0cyBhcyBhIHdvcmtlcgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvYWRhcHRlcl9kYXRldGltZS5weSBiL0RvYy9pbmNsdWRlcy9zcWxpdGUzL2FkYXB0ZXJfZGF0ZXRpbWUucHkKaW5kZXggNTg2OWUyMi4uYmUzMzM5NSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvYWRhcHRlcl9kYXRldGltZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvc3FsaXRlMy9hZGFwdGVyX2RhdGV0aW1lLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHNxbGl0ZTMKLWltcG9ydCBkYXRldGltZSwgdGltZQoraW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdGltZQogCiBkZWYgYWRhcHRfZGF0ZXRpbWUodHMpOgogICAgIHJldHVybiB0aW1lLm1rdGltZSh0cy50aW1ldHVwbGUoKSkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9zcWxpdGUzL2xvYWRfZXh0ZW5zaW9uLnB5IGIvRG9jL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE1YWEwZAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9zcWxpdGUzL2xvYWRfZXh0ZW5zaW9uLnB5CkBAIC0wLDAgKzEsMjYgQEAKK2ltcG9ydCBzcWxpdGUzCisKK2NvbiA9IHNxbGl0ZTMuY29ubmVjdCgiOm1lbW9yeToiKQorCisjIGVuYWJsZSBleHRlbnNpb24gbG9hZGluZworY29uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihUcnVlKQorCisjIExvYWQgdGhlIGZ1bGx0ZXh0IHNlYXJjaCBleHRlbnNpb24KK2Nvbi5leGVjdXRlKCJzZWxlY3QgbG9hZF9leHRlbnNpb24oJy4vZnRzMy5zbycpIikKKworIyBhbHRlcm5hdGl2ZWx5IHlvdSBjYW4gbG9hZCB0aGUgZXh0ZW5zaW9uIHVzaW5nIGFuIEFQSSBjYWxsOgorIyBjb24ubG9hZF9leHRlbnNpb24oIi4vZnRzMy5zbyIpCisKKyMgZGlzYWJsZSBleHRlbnNpb24gbGFvZGluZyBhZ2FpbgorY29uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihGYWxzZSkKKworIyBleGFtcGxlIGZyb20gU1FMaXRlIHdpa2kKK2Nvbi5leGVjdXRlKCJjcmVhdGUgdmlydHVhbCB0YWJsZSByZWNpcGUgdXNpbmcgZnRzMyhuYW1lLCBpbmdyZWRpZW50cykiKQorY29uLmV4ZWN1dGVzY3JpcHQoIiIiCisgICAgaW5zZXJ0IGludG8gcmVjaXBlIChuYW1lLCBpbmdyZWRpZW50cykgdmFsdWVzICgnYnJvY2NvbGkgc3RldycsICdicm9jY29saSBwZXBwZXJzIGNoZWVzZSB0b21hdG9lcycpOworICAgIGluc2VydCBpbnRvIHJlY2lwZSAobmFtZSwgaW5ncmVkaWVudHMpIHZhbHVlcyAoJ3B1bXBraW4gc3RldycsICdwdW1wa2luIG9uaW9ucyBnYXJsaWMgY2VsZXJ5Jyk7CisgICAgaW5zZXJ0IGludG8gcmVjaXBlIChuYW1lLCBpbmdyZWRpZW50cykgdmFsdWVzICgnYnJvY2NvbGkgcGllJywgJ2Jyb2Njb2xpIGNoZWVzZSBvbmlvbnMgZmxvdXInKTsKKyAgICBpbnNlcnQgaW50byByZWNpcGUgKG5hbWUsIGluZ3JlZGllbnRzKSB2YWx1ZXMgKCdwdW1wa2luIHBpZScsICdwdW1wa2luIHN1Z2FyIGZsb3VyIGJ1dHRlcicpOworICAgICIiIikKK2ZvciByb3cgaW4gY29uLmV4ZWN1dGUoInNlbGVjdCByb3dpZCwgbmFtZSwgaW5ncmVkaWVudHMgZnJvbSByZWNpcGUgd2hlcmUgbmFtZSBtYXRjaCAncGllJyIpOgorICAgIHByaW50KHJvdykKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90dXJ0bGUtc3Rhci5weSBiL0RvYy9pbmNsdWRlcy90dXJ0bGUtc3Rhci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTVkYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luY2x1ZGVzL3R1cnRsZS1zdGFyLnB5CkBAIC0wLDAgKzEsMTAgQEAKK2Zyb20gdHVydGxlIGltcG9ydCAqCitjb2xvcigncmVkJywgJ3llbGxvdycpCitiZWdpbl9maWxsKCkKK3doaWxlIFRydWU6CisgICAgZm9yd2FyZCgyMDApCisgICAgbGVmdCgxNzApCisgICAgaWYgYWJzKHBvcygpKSA8IDE6CisgICAgICAgIGJyZWFrCitlbmRfZmlsbCgpCitkb25lKCkKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy90emluZm8tZXhhbXBsZXMucHkgYi9Eb2MvaW5jbHVkZXMvdHppbmZvLWV4YW1wbGVzLnB5CmluZGV4IDUxMzI0MjkuLjNhOGNmNDcgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy90emluZm8tZXhhbXBsZXMucHkKKysrIGIvRG9jL2luY2x1ZGVzL3R6aW5mby1leGFtcGxlcy5weQpAQCAtMjcsNyArMjcsNyBAQAogICAgICIiIkZpeGVkIG9mZnNldCBpbiBtaW51dGVzIGVhc3QgZnJvbSBVVEMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lKToKLSAgICAgICAgc2VsZi5fX29mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzID0gb2Zmc2V0KQorICAgICAgICBzZWxmLl9fb2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9b2Zmc2V0KQogICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKIAogICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgpkaWZmIC0tZ2l0IGEvRG9jL2luc3RhbGwvaW5kZXgucnN0IGIvRG9jL2luc3RhbGwvaW5kZXgucnN0CmluZGV4IDQzMjg2YWMuLjI2OTJiZDIgMTAwNjQ0Ci0tLSBhL0RvYy9pbnN0YWxsL2luZGV4LnJzdAorKysgYi9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKQEAgLTY5MSw2ICs2OTEsOSBAQAogfCBsb2NhbCAgICAgICAgfCA6ZmlsZTpgc2V0dXAuY2ZnYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwoMykgIHwKICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCiAKK09uIGFsbCBwbGF0Zm9ybXMsIHRoZSAicGVyc29uYWwiIGZpbGUgY2FuIGJlIHRlbXBvcmFyaWx5IGRpc2FibGVkIGJ5CitwYXNzaW5nIHRoZSBgLS1uby11c2VyLWNmZ2Agb3B0aW9uLgorCiBOb3RlczoKIAogKDEpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS8ydG8zLnJzdCBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CmluZGV4IGRlMzEyNTEuLmIzZWZlYWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0CisrKyBiL0RvYy9saWJyYXJ5LzJ0bzMucnN0CkBAIC0xNDEsNyArMTQxLDcgQEAKIAogLi4gMnRvM2ZpeGVyOjogZXhlYwogCi0gICBDb252ZXJ0cyB0aGUgOmtleXdvcmQ6YGV4ZWNgIHN0YXRlbWVudCB0byB0aGUgOmZ1bmM6YGV4ZWNgIGZ1bmN0aW9uLgorICAgQ29udmVydHMgdGhlIGBgZXhlY2BgIHN0YXRlbWVudCB0byB0aGUgOmZ1bmM6YGV4ZWNgIGZ1bmN0aW9uLgogCiAuLiAydG8zZml4ZXI6OiBleGVjZmlsZQogCkBAIC0yNjcsNiArMjY3LDI1IEBACiAKICAgIENvbnZlcnRzIG9jdGFsIGxpdGVyYWxzIGludG8gdGhlIG5ldyBzeW50YXguCiAKKy4uIDJ0bzNmaXhlcjo6IG9wZXJhdG9yCisKKyAgIENvbnZlcnRzIGNhbGxzIHRvIHZhcmlvdXMgZnVuY3Rpb25zIGluIHRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIHRvIG90aGVyLAorICAgYnV0IGVxdWl2YWxlbnQsIGZ1bmN0aW9uIGNhbGxzLiAgV2hlbiBuZWVkZWQsIHRoZSBhcHByb3ByaWF0ZSBgYGltcG9ydGBgCisgICBzdGF0ZW1lbnRzIGFyZSBhZGRlZCwgZS5nLiBgYGltcG9ydCBjb2xsZWN0aW9uc2BgLiAgVGhlIGZvbGxvd2luZyBtYXBwaW5nCisgICBhcmUgbWFkZToKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBgYG9wZXJhdG9yLmlzQ2FsbGFibGUob2JqKWBgICAgICAgICBgYGhhc2F0dHIob2JqLCAnX19jYWxsX18nKWBgCisgICBgYG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXMob2JqKWBgICBgYG9wZXJhdG9yLmNvbnRhaW5zKG9iailgYAorICAgYGBvcGVyYXRvci5pc1NlcXVlbmNlVHlwZShvYmopYGAgICAgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuU2VxdWVuY2UpYGAKKyAgIGBgb3BlcmF0b3IuaXNNYXBwaW5nVHlwZShvYmopYGAgICAgIGBgaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLk1hcHBpbmcpYGAKKyAgIGBgb3BlcmF0b3IuaXNOdW1iZXJUeXBlKG9iailgYCAgICAgIGBgaXNpbnN0YW5jZShvYmosIG51bWJlcnMuTnVtYmVyKWBgCisgICBgYG9wZXJhdG9yLnJlcGVhdChvYmosIG4pYGAgICAgICAgICBgYG9wZXJhdG9yLm11bChvYmosIG4pYGAKKyAgIGBgb3BlcmF0b3IuaXJlcGVhdChvYmosIG4pYGAgICAgICAgIGBgb3BlcmF0b3IuaW11bChvYmosIG4pYGAKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAuLiAydG8zZml4ZXI6OiBwYXJlbgogCiAgICBBZGQgZXh0cmEgcGFyZW50aGVzaXMgd2hlcmUgdGhleSBhcmUgcmVxdWlyZWQgaW4gbGlzdCBjb21wcmVoZW5zaW9ucy4gIEZvcgpAQCAtMjc0LDcgKzI5Myw3IEBACiAKIC4uIDJ0bzNmaXhlcjo6IHByaW50CiAKLSAgIENvbnZlcnRzIHRoZSA6a2V5d29yZDpgcHJpbnRgIHN0YXRlbWVudCB0byB0aGUgOmZ1bmM6YHByaW50YCBmdW5jdGlvbi4KKyAgIENvbnZlcnRzIHRoZSBgYHByaW50YGAgc3RhdGVtZW50IHRvIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgogCiAuLiAydG8zZml4ZXI6OiByYWlzZQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9fX2Z1dHVyZV9fLnJzdCBiL0RvYy9saWJyYXJ5L19fZnV0dXJlX18ucnN0CmluZGV4IDIzNDgyMTcuLjBhY2NjYzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L19fZnV0dXJlX18ucnN0CisrKyBiL0RvYy9saWJyYXJ5L19fZnV0dXJlX18ucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogX19mdXR1cmVfXwogICAgOnN5bm9wc2lzOiBGdXR1cmUgc3RhdGVtZW50IGRlZmluaXRpb25zCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL19fZnV0dXJlX18ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIDptb2Q6YF9fZnV0dXJlX19gIGlzIGEgcmVhbCBtb2R1bGUsIGFuZCBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L19kdW1teV90aHJlYWQucnN0IGIvRG9jL2xpYnJhcnkvX2R1bW15X3RocmVhZC5yc3QKaW5kZXggNjJlNTcwOC4uODNhZWMxMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvX2R1bW15X3RocmVhZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX2R1bW15X3RocmVhZC5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBfZHVtbXlfdGhyZWFkCiAgICA6c3lub3BzaXM6IERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSBfdGhyZWFkIG1vZHVsZS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvX2R1bW15X3RocmVhZC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBkdXBsaWNhdGUgaW50ZXJmYWNlIHRvIHRoZSA6bW9kOmBfdGhyZWFkYCBtb2R1bGUuICBJdCBpcwogbWVhbnQgdG8gYmUgaW1wb3J0ZWQgd2hlbiB0aGUgOm1vZDpgX3RocmVhZGAgbW9kdWxlIGlzIG5vdCBwcm92aWRlZCBvbiBhCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9fdGhyZWFkLnJzdCBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CmluZGV4IGNiNjI0MDcuLjM2OWU5Y2QgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CkBAIC0yOCw3ICsyOCw3IEBACiA6bW9kOmBfZHVtbXlfdGhyZWFkYCBtb2R1bGUgaXMgYXZhaWxhYmxlLiBJdCBkdXBsaWNhdGVzIHRoaXMgbW9kdWxlJ3MgaW50ZXJmYWNlCiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50LgogCi1JdCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQgYW5kIGZ1bmN0aW9uczoKK0l0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCiAuLiBleGNlcHRpb246OiBlcnJvcgpAQCAtMTAzLDE4ICsxMDMsNDIgQEAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cywgc3lzdGVtcyB3aXRoIFBPU0lYIHRocmVhZHMuCiAKIAorLi4gZGF0YTo6IFRJTUVPVVRfTUFYCisKKyAgIFRoZSBtYXhpbXVtIHZhbHVlIGFsbG93ZWQgZm9yIHRoZSAqdGltZW91dCogcGFyYW1ldGVyIG9mCisgICA6bWV0aDpgTG9jay5hY3F1aXJlYC4gU3BlY2lmeWluZyBhIHRpbWVvdXQgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUgd2lsbAorICAgcmFpc2UgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIExvY2sgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAogCi0uLiBtZXRob2Q6OiBsb2NrLmFjcXVpcmUoW3dhaXRmbGFnXSkKKy4uIG1ldGhvZDo6IGxvY2suYWNxdWlyZSh3YWl0ZmxhZz0xLCB0aW1lb3V0PS0xKQogCi0gICBXaXRob3V0IHRoZSBvcHRpb25hbCBhcmd1bWVudCwgdGhpcyBtZXRob2QgYWNxdWlyZXMgdGhlIGxvY2sgdW5jb25kaXRpb25hbGx5LCBpZgorICAgV2l0aG91dCBhbnkgb3B0aW9uYWwgYXJndW1lbnQsIHRoaXMgbWV0aG9kIGFjcXVpcmVzIHRoZSBsb2NrIHVuY29uZGl0aW9uYWxseSwgaWYKICAgIG5lY2Vzc2FyeSB3YWl0aW5nIHVudGlsIGl0IGlzIHJlbGVhc2VkIGJ5IGFub3RoZXIgdGhyZWFkIChvbmx5IG9uZSB0aHJlYWQgYXQgYQotICAgdGltZSBjYW4gYWNxdWlyZSBhIGxvY2sgLS0tIHRoYXQncyB0aGVpciByZWFzb24gZm9yIGV4aXN0ZW5jZSkuICBJZiB0aGUgaW50ZWdlcgotICAgKndhaXRmbGFnKiBhcmd1bWVudCBpcyBwcmVzZW50LCB0aGUgYWN0aW9uIGRlcGVuZHMgb24gaXRzIHZhbHVlOiBpZiBpdCBpcyB6ZXJvLAotICAgdGhlIGxvY2sgaXMgb25seSBhY3F1aXJlZCBpZiBpdCBjYW4gYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nLAotICAgd2hpbGUgaWYgaXQgaXMgbm9uemVybywgdGhlIGxvY2sgaXMgYWNxdWlyZWQgdW5jb25kaXRpb25hbGx5IGFzIGJlZm9yZS4gIFRoZQotICAgcmV0dXJuIHZhbHVlIGlzIGBgVHJ1ZWBgIGlmIHRoZSBsb2NrIGlzIGFjcXVpcmVkIHN1Y2Nlc3NmdWxseSwgYGBGYWxzZWBgIGlmIG5vdC4KKyAgIHRpbWUgY2FuIGFjcXVpcmUgYSBsb2NrIC0tLSB0aGF0J3MgdGhlaXIgcmVhc29uIGZvciBleGlzdGVuY2UpLgorCisgICBJZiB0aGUgaW50ZWdlciAqd2FpdGZsYWcqIGFyZ3VtZW50IGlzIHByZXNlbnQsIHRoZSBhY3Rpb24gZGVwZW5kcyBvbiBpdHMKKyAgIHZhbHVlOiBpZiBpdCBpcyB6ZXJvLCB0aGUgbG9jayBpcyBvbmx5IGFjcXVpcmVkIGlmIGl0IGNhbiBiZSBhY3F1aXJlZAorICAgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nLCB3aGlsZSBpZiBpdCBpcyBub256ZXJvLCB0aGUgbG9jayBpcyBhY3F1aXJlZAorICAgdW5jb25kaXRpb25hbGx5IGFzIGFib3ZlLgorCisgICBJZiB0aGUgZmxvYXRpbmctcG9pbnQgKnRpbWVvdXQqIGFyZ3VtZW50IGlzIHByZXNlbnQgYW5kIHBvc2l0aXZlLCBpdAorICAgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHdhaXQgdGltZSBpbiBzZWNvbmRzIGJlZm9yZSByZXR1cm5pbmcuICBBIG5lZ2F0aXZlCisgICAqdGltZW91dCogYXJndW1lbnQgc3BlY2lmaWVzIGFuIHVuYm91bmRlZCB3YWl0LiAgWW91IGNhbm5vdCBzcGVjaWZ5CisgICBhICp0aW1lb3V0KiBpZiAqd2FpdGZsYWcqIGlzIHplcm8uCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYGBUcnVlYGAgaWYgdGhlIGxvY2sgaXMgYWNxdWlyZWQgc3VjY2Vzc2Z1bGx5LAorICAgYGBGYWxzZWBgIGlmIG5vdC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSAqdGltZW91dCogcGFyYW1ldGVyIGlzIG5ldy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIExvY2sgYWNxdWlyZXMgY2FuIG5vdyBiZSBpbnRlcnJ1cHRlZCBieSBzaWduYWxzIG9uIFBPU0lYLgogCiAKIC4uIG1ldGhvZDo6IGxvY2sucmVsZWFzZSgpCkBAIC0xNTYsMTIgKzE4MCwxMCBAQAogKiBJdCBpcyBub3QgcG9zc2libGUgdG8gaW50ZXJydXB0IHRoZSA6bWV0aDpgYWNxdWlyZWAgbWV0aG9kIG9uIGEgbG9jayAtLS0gdGhlCiAgIDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24gd2lsbCBoYXBwZW4gYWZ0ZXIgdGhlIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQuCiAKLSAgLi4gaW5kZXg6OiBwYWlyOiB0aHJlYWRzOyBJUklYCi0KICogV2hlbiB0aGUgbWFpbiB0aHJlYWQgZXhpdHMsIGl0IGlzIHN5c3RlbSBkZWZpbmVkIHdoZXRoZXIgdGhlIG90aGVyIHRocmVhZHMKLSAgc3Vydml2ZS4gIE9uIFNHSSBJUklYIHVzaW5nIHRoZSBuYXRpdmUgdGhyZWFkIGltcGxlbWVudGF0aW9uLCB0aGV5IHN1cnZpdmUuICBPbgotICBtb3N0IG90aGVyIHN5c3RlbXMsIHRoZXkgYXJlIGtpbGxlZCB3aXRob3V0IGV4ZWN1dGluZyA6a2V5d29yZDpgdHJ5YCAuLi4KLSAgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZXMgb3IgZXhlY3V0aW5nIG9iamVjdCBkZXN0cnVjdG9ycy4KKyAgc3Vydml2ZS4gIE9uIG1vc3Qgc3lzdGVtcywgdGhleSBhcmUga2lsbGVkIHdpdGhvdXQgZXhlY3V0aW5nCisgIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcyBvciBleGVjdXRpbmcgb2JqZWN0CisgIGRlc3RydWN0b3JzLgogCiAqIFdoZW4gdGhlIG1haW4gdGhyZWFkIGV4aXRzLCBpdCBkb2VzIG5vdCBkbyBhbnkgb2YgaXRzIHVzdWFsIGNsZWFudXAgKGV4Y2VwdAogICB0aGF0IDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcyBhcmUgaG9ub3JlZCksIGFuZCB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FiYy5yc3QgYi9Eb2MvbGlicmFyeS9hYmMucnN0CmluZGV4IGFhMWNjNzguLjlmYWRiZDIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FiYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWJjLnJzdApAQCAtNyw2ICs3LDEwIEBACiAuLiBzZWN0aW9uYXV0aG9yOjogR2VvcmcgQnJhbmRsCiAuLiBtdWNoIG9mIHRoZSBjb250ZW50IGFkYXB0ZWQgZnJvbSBkb2NzdHJpbmdzCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FiYy5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIGZvciBkZWZpbmluZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZQogY2xhc3NgIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOyBzZWUgdGhlIFBFUCBmb3Igd2h5IHRoaXMKIHdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlIDptb2Q6YG51bWJlcnNgIG1vZHVsZQpAQCAtMTIyLDcgKzEyNiw3IEBACiAKIEl0IGFsc28gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzOgogCi0uLiBmdW5jdGlvbjo6IGFic3RyYWN0bWV0aG9kKGZ1bmN0aW9uKQorLi4gZGVjb3JhdG9yOjogYWJzdHJhY3RtZXRob2QoZnVuY3Rpb24pCiAKICAgIEEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgbWV0aG9kcy4KIApAQCAtMTU3LDYgKzE2MSwzNiBAQAogICAgICAgbXVsdGlwbGUtaW5oZXJpdGFuY2UuCiAKIAorLi4gZGVjb3JhdG9yOjogYWJzdHJhY3RjbGFzc21ldGhvZChmdW5jdGlvbikKKworICAgQSBzdWJjbGFzcyBvZiB0aGUgYnVpbHQtaW4gOmZ1bmM6YGNsYXNzbWV0aG9kYCwgaW5kaWNhdGluZyBhbiBhYnN0cmFjdAorICAgY2xhc3NtZXRob2QuIE90aGVyd2lzZSBpdCBpcyBzaW1pbGFyIHRvIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAuCisKKyAgIFVzYWdlOjoKKworICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgICAgICAgQGFic3RyYWN0Y2xhc3NtZXRob2QKKyAgICAgICAgICBkZWYgbXlfYWJzdHJhY3RfY2xhc3NtZXRob2QoY2xzLCAuLi4pOgorICAgICAgICAgICAgICAuLi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZGVjb3JhdG9yOjogYWJzdHJhY3RzdGF0aWNtZXRob2QoZnVuY3Rpb24pCisKKyAgIEEgc3ViY2xhc3Mgb2YgdGhlIGJ1aWx0LWluIDpmdW5jOmBzdGF0aWNtZXRob2RgLCBpbmRpY2F0aW5nIGFuIGFic3RyYWN0CisgICBzdGF0aWNtZXRob2QuIE90aGVyd2lzZSBpdCBpcyBzaW1pbGFyIHRvIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAuCisKKyAgIFVzYWdlOjoKKworICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9QUJDTWV0YSk6CisgICAgICAgICAgQGFic3RyYWN0c3RhdGljbWV0aG9kCisgICAgICAgICAgZGVmIG15X2Fic3RyYWN0X3N0YXRpY21ldGhvZCguLi4pOgorICAgICAgICAgICAgICAuLi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBhYnN0cmFjdHByb3BlcnR5KGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKQogCiAgICBBIHN1YmNsYXNzIG9mIHRoZSBidWlsdC1pbiA6ZnVuYzpgcHJvcGVydHlgLCBpbmRpY2F0aW5nIGFuIGFic3RyYWN0IHByb3BlcnR5LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QgYi9Eb2MvbGlicmFyeS9haWZjLnJzdAppbmRleCAzMDQ0MzdkLi45OTliYWQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9haWZjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9haWZjLnJzdApAQCAtMTAsNiArMTAsMTAgQEAKICAgIHNpbmdsZTogQUlGRgogICAgc2luZ2xlOiBBSUZGLUMKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvYWlmYy5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBBSUZGIGFuZCBBSUZGLUMgZmlsZXMuCiBBSUZGIGlzIEF1ZGlvIEludGVyY2hhbmdlIEZpbGUgRm9ybWF0LCBhIGZvcm1hdCBmb3Igc3RvcmluZyBkaWdpdGFsIGF1ZGlvCiBzYW1wbGVzIGluIGEgZmlsZS4gIEFJRkYtQyBpcyBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIGZvcm1hdCB0aGF0IGluY2x1ZGVzIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYWxsb3MucnN0IGIvRG9jL2xpYnJhcnkvYWxsb3MucnN0CmluZGV4IGYyNWMzYjguLmJmOTE3MTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FsbG9zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hbGxvcy5yc3QKQEAgLTE1LDkgKzE1LDEyIEBACiAgICBvcy5yc3QKICAgIGlvLnJzdAogICAgdGltZS5yc3QKKyAgIGFyZ3BhcnNlLnJzdAogICAgb3B0cGFyc2UucnN0CiAgICBnZXRvcHQucnN0CiAgICBsb2dnaW5nLnJzdAorICAgbG9nZ2luZy5jb25maWcucnN0CisgICBsb2dnaW5nLmhhbmRsZXJzLnJzdAogICAgZ2V0cGFzcy5yc3QKICAgIGN1cnNlcy5yc3QKICAgIGN1cnNlcy5hc2NpaS5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWUxNzg2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CkBAIC0wLDAgKzEsMTgxNiBAQAorOm1vZDpgYXJncGFyc2VgIC0tLSBQYXJzZXIgZm9yIGNvbW1hbmQtbGluZSBvcHRpb25zLCBhcmd1bWVudHMgYW5kIHN1Yi1jb21tYW5kcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBhcmdwYXJzZQorICAgOnN5bm9wc2lzOiBDb21tYW5kLWxpbmUgb3B0aW9uIGFuZCBhcmd1bWVudC1wYXJzaW5nIGxpYnJhcnkuCisuLiBtb2R1bGVhdXRob3I6OiBTdGV2ZW4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPgorLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlbiBCZXRoYXJkIDxzdGV2ZW4uYmV0aGFyZEBnbWFpbC5jb20+CisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FyZ3BhcnNlLnB5YAorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgbWFrZXMgaXQgZWFzeSB0byB3cml0ZSB1c2VyLWZyaWVuZGx5IGNvbW1hbmQtbGluZQoraW50ZXJmYWNlcy4gVGhlIHByb2dyYW0gZGVmaW5lcyB3aGF0IGFyZ3VtZW50cyBpdCByZXF1aXJlcywgYW5kIDptb2Q6YGFyZ3BhcnNlYAord2lsbCBmaWd1cmUgb3V0IGhvdyB0byBwYXJzZSB0aG9zZSBvdXQgb2YgOmRhdGE6YHN5cy5hcmd2YC4gIFRoZSA6bW9kOmBhcmdwYXJzZWAKK21vZHVsZSBhbHNvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGhlbHAgYW5kIHVzYWdlIG1lc3NhZ2VzIGFuZCBpc3N1ZXMgZXJyb3JzCit3aGVuIHVzZXJzIGdpdmUgdGhlIHByb2dyYW0gaW52YWxpZCBhcmd1bWVudHMuCisKKworRXhhbXBsZQorLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGNvZGUgaXMgYSBQeXRob24gcHJvZ3JhbSB0aGF0IHRha2VzIGEgbGlzdCBvZiBpbnRlZ2VycyBhbmQKK3Byb2R1Y2VzIGVpdGhlciB0aGUgc3VtIG9yIHRoZSBtYXg6OgorCisgICBpbXBvcnQgYXJncGFyc2UKKworICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J1Byb2Nlc3Mgc29tZSBpbnRlZ2Vycy4nKQorICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnaW50ZWdlcnMnLCBtZXRhdmFyPSdOJywgdHlwZT1pbnQsIG5hcmdzPScrJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3InKQorICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zdW0nLCBkZXN0PSdhY2N1bXVsYXRlJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Q9c3VtLCBkZWZhdWx0PW1heCwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpJykKKworICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgIHByaW50KGFyZ3MuYWNjdW11bGF0ZShhcmdzLmludGVnZXJzKSkKKworQXNzdW1pbmcgdGhlIFB5dGhvbiBjb2RlIGFib3ZlIGlzIHNhdmVkIGludG8gYSBmaWxlIGNhbGxlZCBgYHByb2cucHlgYCwgaXQgY2FuCitiZSBydW4gYXQgdGhlIGNvbW1hbmQgbGluZSBhbmQgcHJvdmlkZXMgdXNlZnVsIGhlbHAgbWVzc2FnZXM6OgorCisgICAkIHByb2cucHkgLWgKKyAgIHVzYWdlOiBwcm9nLnB5IFstaF0gWy0tc3VtXSBOIFtOIC4uLl0KKworICAgUHJvY2VzcyBzb21lIGludGVnZXJzLgorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBOICAgICAgICAgICBhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3IKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLXN1bSAgICAgICBzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpCisKK1doZW4gcnVuIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50cywgaXQgcHJpbnRzIGVpdGhlciB0aGUgc3VtIG9yIHRoZSBtYXggb2YKK3RoZSBjb21tYW5kLWxpbmUgaW50ZWdlcnM6OgorCisgICAkIHByb2cucHkgMSAyIDMgNAorICAgNAorCisgICAkIHByb2cucHkgMSAyIDMgNCAtLXN1bQorICAgMTAKKworSWYgaW52YWxpZCBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBpc3N1ZSBhbiBlcnJvcjo6CisKKyAgICQgcHJvZy5weSBhIGIgYworICAgdXNhZ2U6IHByb2cucHkgWy1oXSBbLS1zdW1dIE4gW04gLi4uXQorICAgcHJvZy5weTogZXJyb3I6IGFyZ3VtZW50IE46IGludmFsaWQgaW50IHZhbHVlOiAnYScKKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyB3YWxrIHlvdSB0aHJvdWdoIHRoaXMgZXhhbXBsZS4KKworCitDcmVhdGluZyBhIHBhcnNlcgorXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZpcnN0IHN0ZXAgaW4gdXNpbmcgdGhlIDptb2Q6YGFyZ3BhcnNlYCBpcyBjcmVhdGluZyBhbgorOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0OjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdQcm9jZXNzIHNvbWUgaW50ZWdlcnMuJykKKworVGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdCB3aWxsIGhvbGQgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8KK3BhcnNlIHRoZSBjb21tYW5kIGxpbmUgaW50byBQeXRob24gZGF0YSB0eXBlcy4KKworCitBZGRpbmcgYXJndW1lbnRzCiteXl5eXl5eXl5eXl5eXl5eCisKK0ZpbGxpbmcgYW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBwcm9ncmFtIGFyZ3VtZW50cyBpcworZG9uZSBieSBtYWtpbmcgY2FsbHMgdG8gdGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCBtZXRob2QuCitHZW5lcmFsbHksIHRoZXNlIGNhbGxzIHRlbGwgdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGhvdyB0byB0YWtlIHRoZSBzdHJpbmdzCitvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCB0dXJuIHRoZW0gaW50byBvYmplY3RzLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgYW5kCit1c2VkIHdoZW4gOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCBpcyBjYWxsZWQuIEZvciBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ludGVnZXJzJywgbWV0YXZhcj0nTicsIHR5cGU9aW50LCBuYXJncz0nKycsCisgICAuLi4gICAgICAgICAgICAgICAgICAgICBoZWxwPSdhbiBpbnRlZ2VyIGZvciB0aGUgYWNjdW11bGF0b3InKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3VtJywgZGVzdD0nYWNjdW11bGF0ZScsIGFjdGlvbj0nc3RvcmVfY29uc3QnLAorICAgLi4uICAgICAgICAgICAgICAgICAgICAgY29uc3Q9c3VtLCBkZWZhdWx0PW1heCwKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1bSB0aGUgaW50ZWdlcnMgKGRlZmF1bHQ6IGZpbmQgdGhlIG1heCknKQorCitMYXRlciwgY2FsbGluZyA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIHdpbGwgcmV0dXJuIGFuIG9iamVjdCB3aXRoCit0d28gYXR0cmlidXRlcywgYGBpbnRlZ2Vyc2BgIGFuZCBgYGFjY3VtdWxhdGVgYC4gIFRoZSBgYGludGVnZXJzYGAgYXR0cmlidXRlCit3aWxsIGJlIGEgbGlzdCBvZiBvbmUgb3IgbW9yZSBpbnRzLCBhbmQgdGhlIGBgYWNjdW11bGF0ZWBgIGF0dHJpYnV0ZSB3aWxsIGJlCitlaXRoZXIgdGhlIDpmdW5jOmBzdW1gIGZ1bmN0aW9uLCBpZiBgYC0tc3VtYGAgd2FzIHNwZWNpZmllZCBhdCB0aGUgY29tbWFuZCBsaW5lLAorb3IgdGhlIDpmdW5jOmBtYXhgIGZ1bmN0aW9uIGlmIGl0IHdhcyBub3QuCisKKworUGFyc2luZyBhcmd1bWVudHMKK15eXl5eXl5eXl5eXl5eXl5eCisKKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHBhcnNlcyBhcmdzIHRocm91Z2ggdGhlCis6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZC4gIFRoaXMgd2lsbCBpbnNwZWN0IHRoZSBjb21tYW5kIGxpbmUsCitjb252ZXJ0IGVhY2ggYXJnIHRvIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGFuZCB0aGVuIGludm9rZSB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLgorSW4gbW9zdCBjYXNlcywgdGhpcyBtZWFucyBhIHNpbXBsZSBuYW1lc3BhY2Ugb2JqZWN0IHdpbGwgYmUgYnVpbHQgdXAgZnJvbQorYXR0cmlidXRlcyBwYXJzZWQgb3V0IG9mIHRoZSBjb21tYW5kIGxpbmU6OgorCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXN1bScsICc3JywgJy0xJywgJzQyJ10pCisgICBOYW1lc3BhY2UoYWNjdW11bGF0ZT08YnVpbHQtaW4gZnVuY3Rpb24gc3VtPiwgaW50ZWdlcnM9WzcsIC0xLCA0Ml0pCisKK0luIGEgc2NyaXB0LCA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIHdpbGwgdHlwaWNhbGx5IGJlIGNhbGxlZCB3aXRoIG5vCithcmd1bWVudHMsIGFuZCB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUKK2NvbW1hbmQtbGluZSBhcmdzIGZyb20gOmRhdGE6YHN5cy5hcmd2YC4KKworCitBcmd1bWVudFBhcnNlciBvYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogQXJndW1lbnRQYXJzZXIoW2Rlc2NyaXB0aW9uXSwgW2VwaWxvZ10sIFtwcm9nXSwgW3VzYWdlXSwgW2FkZF9oZWxwXSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBbYXJndW1lbnRfZGVmYXVsdF0sIFtwYXJlbnRzXSwgW3ByZWZpeF9jaGFyc10sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZsaWN0X2hhbmRsZXJdLCBbZm9ybWF0dGVyX2NsYXNzXSkKKworICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdC4gIEVhY2ggcGFyYW1ldGVyIGhhcyBpdHMgb3duIG1vcmUKKyAgIGRldGFpbGVkIGRlc2NyaXB0aW9uIGJlbG93LCBidXQgaW4gc2hvcnQgdGhleSBhcmU6CisKKyAgICogZGVzY3JpcHRpb25fIC0gVGV4dCB0byBkaXNwbGF5IGJlZm9yZSB0aGUgYXJndW1lbnQgaGVscC4KKworICAgKiBlcGlsb2dfIC0gVGV4dCB0byBkaXNwbGF5IGFmdGVyIHRoZSBhcmd1bWVudCBoZWxwLgorCisgICAqIGFkZF9oZWxwXyAtIEFkZCBhIC1oLy0taGVscCBvcHRpb24gdG8gdGhlIHBhcnNlci4gKGRlZmF1bHQ6IGBgVHJ1ZWBgKQorCisgICAqIGFyZ3VtZW50X2RlZmF1bHRfIC0gU2V0IHRoZSBnbG9iYWwgZGVmYXVsdCB2YWx1ZSBmb3IgYXJndW1lbnRzLgorICAgICAoZGVmYXVsdDogYGBOb25lYGApCisKKyAgICogcGFyZW50c18gLSBBIGxpc3Qgb2YgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyB3aG9zZSBhcmd1bWVudHMgc2hvdWxkCisgICAgIGFsc28gYmUgaW5jbHVkZWQuCisKKyAgICogcHJlZml4X2NoYXJzXyAtIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IHByZWZpeCBvcHRpb25hbCBhcmd1bWVudHMuCisgICAgIChkZWZhdWx0OiAnLScpCisKKyAgICogZnJvbWZpbGVfcHJlZml4X2NoYXJzXyAtIFRoZSBzZXQgb2YgY2hhcmFjdGVycyB0aGF0IHByZWZpeCBmaWxlcyBmcm9tCisgICAgIHdoaWNoIGFkZGl0aW9uYWwgYXJndW1lbnRzIHNob3VsZCBiZSByZWFkLiAoZGVmYXVsdDogYGBOb25lYGApCisKKyAgICogZm9ybWF0dGVyX2NsYXNzXyAtIEEgY2xhc3MgZm9yIGN1c3RvbWl6aW5nIHRoZSBoZWxwIG91dHB1dC4KKworICAgKiBjb25mbGljdF9oYW5kbGVyXyAtIFVzdWFsbHkgdW5uZWNlc3NhcnksIGRlZmluZXMgc3RyYXRlZ3kgZm9yIHJlc29sdmluZworICAgICBjb25mbGljdGluZyBvcHRpb25hbHMuCisKKyAgICogcHJvZ18gLSBUaGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSAoZGVmYXVsdDoKKyAgICAgOmRhdGE6YHN5cy5hcmd2WzBdYCkKKworICAgKiB1c2FnZV8gLSBUaGUgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHByb2dyYW0gdXNhZ2UgKGRlZmF1bHQ6IGdlbmVyYXRlZCkKKworVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSBob3cgZWFjaCBvZiB0aGVzZSBhcmUgdXNlZC4KKworCitkZXNjcmlwdGlvbgorXl5eXl5eXl5eXl4KKworTW9zdCBjYWxscyB0byB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3Igd2lsbCB1c2UgdGhlCitgYGRlc2NyaXB0aW9uPWBgIGtleXdvcmQgYXJndW1lbnQuICBUaGlzIGFyZ3VtZW50IGdpdmVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2YKK3doYXQgdGhlIHByb2dyYW0gZG9lcyBhbmQgaG93IGl0IHdvcmtzLiAgSW4gaGVscCBtZXNzYWdlcywgdGhlIGRlc2NyaXB0aW9uIGlzCitkaXNwbGF5ZWQgYmV0d2VlbiB0aGUgY29tbWFuZC1saW5lIHVzYWdlIHN0cmluZyBhbmQgdGhlIGhlbHAgbWVzc2FnZXMgZm9yIHRoZQordmFyaW91cyBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249J0EgZm9vIHRoYXQgYmFycycpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IGFyZ3BhcnNlLnB5IFstaF0KKworICAgQSBmb28gdGhhdCBiYXJzCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKK0J5IGRlZmF1bHQsIHRoZSBkZXNjcmlwdGlvbiB3aWxsIGJlIGxpbmUtd3JhcHBlZCBzbyB0aGF0IGl0IGZpdHMgd2l0aGluIHRoZQorZ2l2ZW4gc3BhY2UuICBUbyBjaGFuZ2UgdGhpcyBiZWhhdmlvciwgc2VlIHRoZSBmb3JtYXR0ZXJfY2xhc3NfIGFyZ3VtZW50LgorCisKK2VwaWxvZworXl5eXl5eCisKK1NvbWUgcHJvZ3JhbXMgbGlrZSB0byBkaXNwbGF5IGFkZGl0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHByb2dyYW0gYWZ0ZXIgdGhlCitkZXNjcmlwdGlvbiBvZiB0aGUgYXJndW1lbnRzLiAgU3VjaCB0ZXh0IGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgZXBpbG9nPWBgCithcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgZGVzY3JpcHRpb249J0EgZm9vIHRoYXQgYmFycycsCisgICAuLi4gICAgIGVwaWxvZz0iQW5kIHRoYXQncyBob3cgeW91J2QgZm9vIGEgYmFyIikKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogYXJncGFyc2UucHkgWy1oXQorCisgICBBIGZvbyB0aGF0IGJhcnMKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgQW5kIHRoYXQncyBob3cgeW91J2QgZm9vIGEgYmFyCisKK0FzIHdpdGggdGhlIGRlc2NyaXB0aW9uXyBhcmd1bWVudCwgdGhlIGBgZXBpbG9nPWBgIHRleHQgaXMgYnkgZGVmYXVsdAorbGluZS13cmFwcGVkLCBidXQgdGhpcyBiZWhhdmlvciBjYW4gYmUgYWRqdXN0ZWQgd2l0aCB0aGUgZm9ybWF0dGVyX2NsYXNzXworYXJndW1lbnQgdG8gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuCisKKworYWRkX2hlbHAKK15eXl5eXl5eCisKK0J5IGRlZmF1bHQsIEFyZ3VtZW50UGFyc2VyIG9iamVjdHMgYWRkIGFuIG9wdGlvbiB3aGljaCBzaW1wbHkgZGlzcGxheXMKK3RoZSBwYXJzZXIncyBoZWxwIG1lc3NhZ2UuIEZvciBleGFtcGxlLCBjb25zaWRlciBhIGZpbGUgbmFtZWQKK2BgbXlwcm9ncmFtLnB5YGAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGNvZGU6OgorCisgICBpbXBvcnQgYXJncGFyc2UKKyAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworSWYgYGAtaGBgIG9yIGBgLS1oZWxwYGAgaXMgc3VwcGxpZWQgYXQgdGhlIGNvbW1hbmQgbGluZSwgdGhlIEFyZ3VtZW50UGFyc2VyCitoZWxwIHdpbGwgYmUgcHJpbnRlZDo6CisKKyAgICQgcHl0aG9uIG15cHJvZ3JhbS5weSAtLWhlbHAKKyAgIHVzYWdlOiBteXByb2dyYW0ucHkgWy1oXSBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisKK09jY2FzaW9uYWxseSwgaXQgbWF5IGJlIHVzZWZ1bCB0byBkaXNhYmxlIHRoZSBhZGRpdGlvbiBvZiB0aGlzIGhlbHAgb3B0aW9uLgorVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcGFzc2luZyBgYEZhbHNlYGAgYXMgdGhlIGBgYWRkX2hlbHA9YGAgYXJndW1lbnQgdG8KKzpjbGFzczpgQXJndW1lbnRQYXJzZXJgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLS1mb28gRk9PXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLS1mb28gRk9PICBmb28gaGVscAorCitUaGUgaGVscCBvcHRpb24gaXMgdHlwaWNhbGx5IGBgLWgvLS1oZWxwYGAuIFRoZSBleGNlcHRpb24gdG8gdGhpcyBpcworaWYgdGhlIGBgcHJlZml4X2NoYXJzPWBgIGlzIHNwZWNpZmllZCBhbmQgZG9lcyBub3QgaW5jbHVkZSBgYCctJ2BgLCBpbgord2hpY2ggY2FzZSBgYC1oYGAgYW5kIGBgLS1oZWxwYGAgYXJlIG5vdCB2YWxpZCBvcHRpb25zLiAgSW4KK3RoaXMgY2FzZSwgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiBgYHByZWZpeF9jaGFyc2BgIGlzIHVzZWQgdG8gcHJlZml4Cit0aGUgaGVscCBvcHRpb25zOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9JysvJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbK2hdCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgK2gsICsraGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCisKK3ByZWZpeF9jaGFycworXl5eXl5eXl5eXl5eCisKK01vc3QgY29tbWFuZC1saW5lIG9wdGlvbnMgd2lsbCB1c2UgYGAnLSdgYCBhcyB0aGUgcHJlZml4LCBlLmcuIGBgLWYvLS1mb29gYC4KK1BhcnNlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgZGlmZmVyZW50IG9yIGFkZGl0aW9uYWwgcHJlZml4CitjaGFyYWN0ZXJzLCBlLmcuIGZvciBvcHRpb25zCitsaWtlIGBgK2ZgYCBvciBgYC9mb29gYCwgbWF5IHNwZWNpZnkgdGhlbSB1c2luZyB0aGUgYGBwcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQKK3RvIHRoZSBBcmd1bWVudFBhcnNlciBjb25zdHJ1Y3Rvcjo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgcHJlZml4X2NoYXJzPSctKycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnK2YnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJysrYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnK2YgWCArK2JhciBZJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWScsIGY9J1gnKQorCitUaGUgYGBwcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGAnLSdgYC4gU3VwcGx5aW5nIGEgc2V0IG9mCitjaGFyYWN0ZXJzIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBgYCctJ2BgIHdpbGwgY2F1c2UgYGAtZi8tLWZvb2BgIG9wdGlvbnMgdG8gYmUKK2Rpc2FsbG93ZWQuCisKKworZnJvbWZpbGVfcHJlZml4X2NoYXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworU29tZXRpbWVzLCBmb3IgZXhhbXBsZSB3aGVuIGRlYWxpbmcgd2l0aCBhIHBhcnRpY3VsYXJseSBsb25nIGFyZ3VtZW50IGxpc3RzLCBpdAorbWF5IG1ha2Ugc2Vuc2UgdG8ga2VlcCB0aGUgbGlzdCBvZiBhcmd1bWVudHMgaW4gYSBmaWxlIHJhdGhlciB0aGFuIHR5cGluZyBpdCBvdXQKK2F0IHRoZSBjb21tYW5kIGxpbmUuICBJZiB0aGUgYGBmcm9tZmlsZV9wcmVmaXhfY2hhcnM9YGAgYXJndW1lbnQgaXMgZ2l2ZW4gdG8gdGhlCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBjb25zdHJ1Y3RvciwgdGhlbiBhcmd1bWVudHMgdGhhdCBzdGFydCB3aXRoIGFueSBvZiB0aGUKK3NwZWNpZmllZCBjaGFyYWN0ZXJzIHdpbGwgYmUgdHJlYXRlZCBhcyBmaWxlcywgYW5kIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlCithcmd1bWVudHMgdGhleSBjb250YWluLiAgRm9yIGV4YW1wbGU6OgorCisgICA+Pj4gd2l0aCBvcGVuKCdhcmdzLnR4dCcsICd3JykgYXMgZnA6CisgICAuLi4gICAgZnAud3JpdGUoJy1mXG5iYXInKQorICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLWYnLCAnZm9vJywgJ0BhcmdzLnR4dCddKQorICAgTmFtZXNwYWNlKGY9J2JhcicpCisKK0FyZ3VtZW50cyByZWFkIGZyb20gYSBmaWxlIG11c3QgYnkgZGVmYXVsdCBiZSBvbmUgcGVyIGxpbmUgKGJ1dCBzZWUgYWxzbworOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5jb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3NgKSBhbmQgYXJlIHRyZWF0ZWQgYXMgaWYgdGhleQord2VyZSBpbiB0aGUgc2FtZSBwbGFjZSBhcyB0aGUgb3JpZ2luYWwgZmlsZSByZWZlcmVuY2luZyBhcmd1bWVudCBvbiB0aGUgY29tbWFuZAorbGluZS4gIFNvIGluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGUgZXhwcmVzc2lvbiBgYFsnLWYnLCAnZm9vJywgJ0BhcmdzLnR4dCddYGAKK2lzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byB0aGUgZXhwcmVzc2lvbiBgYFsnLWYnLCAnZm9vJywgJy1mJywgJ2JhciddYGAuCisKK1RoZSBgYGZyb21maWxlX3ByZWZpeF9jaGFycz1gYCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYE5vbmVgYCwgbWVhbmluZyB0aGF0Cithcmd1bWVudHMgd2lsbCBuZXZlciBiZSB0cmVhdGVkIGFzIGZpbGUgcmVmZXJlbmNlcy4KKworCithcmd1bWVudF9kZWZhdWx0CiteXl5eXl5eXl5eXl5eXl5eCisKK0dlbmVyYWxseSwgYXJndW1lbnQgZGVmYXVsdHMgYXJlIHNwZWNpZmllZCBlaXRoZXIgYnkgcGFzc2luZyBhIGRlZmF1bHQgdG8KKzptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCBvciBieSBjYWxsaW5nIHRoZQorOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5zZXRfZGVmYXVsdHNgIG1ldGhvZHMgd2l0aCBhIHNwZWNpZmljIHNldCBvZiBuYW1lLXZhbHVlCitwYWlycy4gIFNvbWV0aW1lcyBob3dldmVyLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHNwZWNpZnkgYSBzaW5nbGUgcGFyc2VyLXdpZGUKK2RlZmF1bHQgZm9yIGFyZ3VtZW50cy4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwYXNzaW5nIHRoZQorYGBhcmd1bWVudF9kZWZhdWx0PWBgIGtleXdvcmQgYXJndW1lbnQgdG8gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuICBGb3IgZXhhbXBsZSwKK3RvIGdsb2JhbGx5IHN1cHByZXNzIGF0dHJpYnV0ZSBjcmVhdGlvbiBvbiA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgCitjYWxscywgd2Ugc3VwcGx5IGBgYXJndW1lbnRfZGVmYXVsdD1TVVBQUkVTU2BgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFyZ3VtZW50X2RlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJzEnLCAnQkFSJ10pCisgICBOYW1lc3BhY2UoYmFyPSdCQVInLCBmb289JzEnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgTmFtZXNwYWNlKCkKKworCitwYXJlbnRzCiteXl5eXl5eCisKK1NvbWV0aW1lcywgc2V2ZXJhbCBwYXJzZXJzIHNoYXJlIGEgY29tbW9uIHNldCBvZiBhcmd1bWVudHMuIFJhdGhlciB0aGFuCityZXBlYXRpbmcgdGhlIGRlZmluaXRpb25zIG9mIHRoZXNlIGFyZ3VtZW50cywgYSBzaW5nbGUgcGFyc2VyIHdpdGggYWxsIHRoZQorc2hhcmVkIGFyZ3VtZW50cyBhbmQgcGFzc2VkIHRvIGBgcGFyZW50cz1gYCBhcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYAorY2FuIGJlIHVzZWQuICBUaGUgYGBwYXJlbnRzPWBgIGFyZ3VtZW50IHRha2VzIGEgbGlzdCBvZiA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYAorb2JqZWN0cywgY29sbGVjdHMgYWxsIHRoZSBwb3NpdGlvbmFsIGFuZCBvcHRpb25hbCBhY3Rpb25zIGZyb20gdGhlbSwgYW5kIGFkZHMKK3RoZXNlIGFjdGlvbnMgdG8gdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdCBiZWluZyBjb25zdHJ1Y3RlZDo6CisKKyAgID4+PiBwYXJlbnRfcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICA+Pj4gcGFyZW50X3BhcnNlci5hZGRfYXJndW1lbnQoJy0tcGFyZW50JywgdHlwZT1pbnQpCisKKyAgID4+PiBmb29fcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50X3BhcnNlcl0pCisgICA+Pj4gZm9vX3BhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICA+Pj4gZm9vX3BhcnNlci5wYXJzZV9hcmdzKFsnLS1wYXJlbnQnLCAnMicsICdYWFgnXSkKKyAgIE5hbWVzcGFjZShmb289J1hYWCcsIHBhcmVudD0yKQorCisgICA+Pj4gYmFyX3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF9wYXJzZXJdKQorICAgPj4+IGJhcl9wYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhcicpCisgICA+Pj4gYmFyX3BhcnNlci5wYXJzZV9hcmdzKFsnLS1iYXInLCAnWVlZJ10pCisgICBOYW1lc3BhY2UoYmFyPSdZWVknLCBwYXJlbnQ9Tm9uZSkKKworTm90ZSB0aGF0IG1vc3QgcGFyZW50IHBhcnNlcnMgd2lsbCBzcGVjaWZ5IGBgYWRkX2hlbHA9RmFsc2VgYC4gIE90aGVyd2lzZSwgdGhlCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCB3aWxsIHNlZSB0d28gYGAtaC8tLWhlbHBgYCBvcHRpb25zIChvbmUgaW4gdGhlIHBhcmVudAorYW5kIG9uZSBpbiB0aGUgY2hpbGQpIGFuZCByYWlzZSBhbiBlcnJvci4KKworLi4gbm90ZTo6CisgICBZb3UgbXVzdCBmdWxseSBpbml0aWFsaXplIHRoZSBwYXJzZXJzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdmlhIGBgcGFyZW50cz1gYC4KKyAgIElmIHlvdSBjaGFuZ2UgdGhlIHBhcmVudCBwYXJzZXJzIGFmdGVyIHRoZSBjaGlsZCBwYXJzZXIsIHRob3NlIGNoYW5nZXMgd2lsbAorICAgbm90IGJlIHJlZmxlY3RlZCBpbiB0aGUgY2hpbGQuCisKKworZm9ybWF0dGVyX2NsYXNzCiteXl5eXl5eXl5eXl5eXl4KKworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyBhbGxvdyB0aGUgaGVscCBmb3JtYXR0aW5nIHRvIGJlIGN1c3RvbWl6ZWQgYnkKK3NwZWNpZnlpbmcgYW4gYWx0ZXJuYXRlIGZvcm1hdHRpbmcgY2xhc3MuICBDdXJyZW50bHksIHRoZXJlIGFyZSB0aHJlZSBzdWNoCitjbGFzc2VzOgorCisuLiBjbGFzczo6IFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcgorICAgICAgICAgICBSYXdUZXh0SGVscEZvcm1hdHRlcgorICAgICAgICAgICBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcgorCitUaGUgZmlyc3QgdHdvIGFsbG93IG1vcmUgY29udHJvbCBvdmVyIGhvdyB0ZXh0dWFsIGRlc2NyaXB0aW9ucyBhcmUgZGlzcGxheWVkLAord2hpbGUgdGhlIGxhc3QgYXV0b21hdGljYWxseSBhZGRzIGluZm9ybWF0aW9uIGFib3V0IGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzLgorCitCeSBkZWZhdWx0LCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGxpbmUtd3JhcCB0aGUgZGVzY3JpcHRpb25fIGFuZAorZXBpbG9nXyB0ZXh0cyBpbiBjb21tYW5kLWxpbmUgaGVscCBtZXNzYWdlczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgIC4uLiAgICAgcHJvZz0nUFJPRycsCisgICAuLi4gICAgIGRlc2NyaXB0aW9uPScnJ3RoaXMgZGVzY3JpcHRpb24KKyAgIC4uLiAgICAgICAgIHdhcyBpbmRlbnRlZCB3ZWlyZAorICAgLi4uICAgICAgICAgICAgIGJ1dCB0aGF0IGlzIG9rYXknJycsCisgICAuLi4gICAgIGVwaWxvZz0nJycKKyAgIC4uLiAgICAgICAgICAgICBsaWtld2lzZSBmb3IgdGhpcyBlcGlsb2cgd2hvc2Ugd2hpdGVzcGFjZSB3aWxsCisgICAuLi4gICAgICAgICBiZSBjbGVhbmVkIHVwIGFuZCB3aG9zZSB3b3JkcyB3aWxsIGJlIHdyYXBwZWQKKyAgIC4uLiAgICAgICAgIGFjcm9zcyBhIGNvdXBsZSBsaW5lcycnJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLWhdCisKKyAgIHRoaXMgZGVzY3JpcHRpb24gd2FzIGluZGVudGVkIHdlaXJkIGJ1dCB0aGF0IGlzIG9rYXkKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgbGlrZXdpc2UgZm9yIHRoaXMgZXBpbG9nIHdob3NlIHdoaXRlc3BhY2Ugd2lsbCBiZSBjbGVhbmVkIHVwIGFuZCB3aG9zZSB3b3JkcworICAgd2lsbCBiZSB3cmFwcGVkIGFjcm9zcyBhIGNvdXBsZSBsaW5lcworCitQYXNzaW5nIDpjbGFzczpgfmFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcmAgYXMgYGBmb3JtYXR0ZXJfY2xhc3M9YGAKK2luZGljYXRlcyB0aGF0IGRlc2NyaXB0aW9uXyBhbmQgZXBpbG9nXyBhcmUgYWxyZWFkeSBjb3JyZWN0bHkgZm9ybWF0dGVkIGFuZAorc2hvdWxkIG5vdCBiZSBsaW5lLXdyYXBwZWQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAuLi4gICAgIHByb2c9J1BST0cnLAorICAgLi4uICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICAgLi4uICAgICBkZXNjcmlwdGlvbj10ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgLi4uICAgICAgICAgUGxlYXNlIGRvIG5vdCBtZXNzIHVwIHRoaXMgdGV4dCEKKyAgIC4uLiAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAuLi4gICAgICAgICAgICAgSSBoYXZlIGluZGVudGVkIGl0CisgICAuLi4gICAgICAgICAgICAgZXhhY3RseSB0aGUgd2F5CisgICAuLi4gICAgICAgICAgICAgSSB3YW50IGl0CisgICAuLi4gICAgICAgICAnJycpKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0KKworICAgUGxlYXNlIGRvIG5vdCBtZXNzIHVwIHRoaXMgdGV4dCEKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICBJIGhhdmUgaW5kZW50ZWQgaXQKKyAgICAgIGV4YWN0bHkgdGhlIHdheQorICAgICAgSSB3YW50IGl0CisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKzpjbGFzczpgUmF3VGV4dEhlbHBGb3JtYXR0ZXJgIG1haW50YWlucyB3aGl0ZXNwYWNlIGZvciBhbGwgc29ydHMgb2YgaGVscCB0ZXh0CitpbmNsdWRpbmcgYXJndW1lbnQgZGVzY3JpcHRpb25zLgorCitUaGUgb3RoZXIgZm9ybWF0dGVyIGNsYXNzIGF2YWlsYWJsZSwgOmNsYXNzOmBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcmAsCit3aWxsIGFkZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBlYWNoIG9mIHRoZSBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAuLi4gICAgIHByb2c9J1BST0cnLAorICAgLi4uICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCB0eXBlPWludCwgZGVmYXVsdD00MiwgaGVscD0nRk9PIScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JyonLCBkZWZhdWx0PVsxLCAyLCAzXSwgaGVscD0nQkFSIScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBbYmFyIFtiYXIgLi4uXV0KKworICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgYmFyICAgICAgICAgQkFSISAoZGVmYXVsdDogWzEsIDIsIDNdKQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIEZPTyAgIEZPTyEgKGRlZmF1bHQ6IDQyKQorCisKK2NvbmZsaWN0X2hhbmRsZXIKK15eXl5eXl5eXl5eXl5eXl4KKworOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyBkbyBub3QgYWxsb3cgdHdvIGFjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcHRpb24KK3N0cmluZy4gIEJ5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIG9iamVjdHMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBhbgorYXR0ZW1wdCBpcyBtYWRlIHRvIGNyZWF0ZSBhbiBhcmd1bWVudCB3aXRoIGFuIG9wdGlvbiBzdHJpbmcgdGhhdCBpcyBhbHJlYWR5IGluCit1c2U6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28nLCBoZWxwPSdvbGQgZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nbmV3IGZvbyBoZWxwJykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLgorICAgQXJndW1lbnRFcnJvcjogYXJndW1lbnQgLS1mb286IGNvbmZsaWN0aW5nIG9wdGlvbiBzdHJpbmcocyk6IC0tZm9vCisKK1NvbWV0aW1lcyAoZS5nLiB3aGVuIHVzaW5nIHBhcmVudHNfKSBpdCBtYXkgYmUgdXNlZnVsIHRvIHNpbXBseSBvdmVycmlkZSBhbnkKK29sZGVyIGFyZ3VtZW50cyB3aXRoIHRoZSBzYW1lIG9wdGlvbiBzdHJpbmcuICBUbyBnZXQgdGhpcyBiZWhhdmlvciwgdGhlIHZhbHVlCitgYCdyZXNvbHZlJ2BgIGNhbiBiZSBzdXBwbGllZCB0byB0aGUgYGBjb25mbGljdF9oYW5kbGVyPWBgIGFyZ3VtZW50IG9mCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgY29uZmxpY3RfaGFuZGxlcj0ncmVzb2x2ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCAnLS1mb28nLCBoZWxwPSdvbGQgZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nbmV3IGZvbyBoZWxwJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogUFJPRyBbLWhdIFstZiBGT09dIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLWYgRk9PICAgICAgb2xkIGZvbyBoZWxwCisgICAgLS1mb28gRk9PICAgbmV3IGZvbyBoZWxwCisKK05vdGUgdGhhdCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIG9ubHkgcmVtb3ZlIGFuIGFjdGlvbiBpZiBhbGwgb2YgaXRzCitvcHRpb24gc3RyaW5ncyBhcmUgb3ZlcnJpZGRlbi4gIFNvLCBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgdGhlIG9sZCBgYC1mLy0tZm9vYGAKK2FjdGlvbiBpcyByZXRhaW5lZCBhcyB0aGUgYGAtZmBgIGFjdGlvbiwgYmVjYXVzZSBvbmx5IHRoZSBgYC0tZm9vYGAgb3B0aW9uCitzdHJpbmcgd2FzIG92ZXJyaWRkZW4uCisKKworcHJvZworXl5eXgorCitCeSBkZWZhdWx0LCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIHVzZXMgYGBzeXMuYXJndlswXWBgIHRvIGRldGVybWluZQoraG93IHRvIGRpc3BsYXkgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gaW4gaGVscCBtZXNzYWdlcy4gIFRoaXMgZGVmYXVsdCBpcyBhbG1vc3QKK2Fsd2F5cyBkZXNpcmFibGUgYmVjYXVzZSBpdCB3aWxsIG1ha2UgdGhlIGhlbHAgbWVzc2FnZXMgbWF0Y2ggaG93IHRoZSBwcm9ncmFtIHdhcworaW52b2tlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZmlsZSBuYW1lZAorYGBteXByb2dyYW0ucHlgYCB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZTo6CisKKyAgIGltcG9ydCBhcmdwYXJzZQorICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpCisgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCitUaGUgaGVscCBmb3IgdGhpcyBwcm9ncmFtIHdpbGwgZGlzcGxheSBgYG15cHJvZ3JhbS5weWBgIGFzIHRoZSBwcm9ncmFtIG5hbWUKKyhyZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBwcm9ncmFtIHdhcyBpbnZva2VkIGZyb20pOjoKKworICAgJCBweXRob24gbXlwcm9ncmFtLnB5IC0taGVscAorICAgdXNhZ2U6IG15cHJvZ3JhbS5weSBbLWhdIFstLWZvbyBGT09dCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICQgY2QgLi4KKyAgICQgcHl0aG9uIHN1YmRpclxteXByb2dyYW0ucHkgLS1oZWxwCisgICB1c2FnZTogbXlwcm9ncmFtLnB5IFstaF0gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08gICBmb28gaGVscAorCitUbyBjaGFuZ2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yLCBhbm90aGVyIHZhbHVlIGNhbiBiZSBzdXBwbGllZCB1c2luZyB0aGUKK2BgcHJvZz1gYCBhcmd1bWVudCB0byA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdteXByb2dyYW0nKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBteXByb2dyYW0gWy1oXQorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorCitOb3RlIHRoYXQgdGhlIHByb2dyYW0gbmFtZSwgd2hldGhlciBkZXRlcm1pbmVkIGZyb20gYGBzeXMuYXJndlswXWBgIG9yIGZyb20gdGhlCitgYHByb2c9YGAgYXJndW1lbnQsIGlzIGF2YWlsYWJsZSB0byBoZWxwIG1lc3NhZ2VzIHVzaW5nIHRoZSBgYCUocHJvZylzYGAgZm9ybWF0CitzcGVjaWZpZXIuCisKKzo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdteXByb2dyYW0nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgaGVscD0nZm9vIG9mIHRoZSAlKHByb2cpcyBwcm9ncmFtJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogbXlwcm9ncmFtIFstaF0gWy0tZm9vIEZPT10KKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08gICBmb28gb2YgdGhlIG15cHJvZ3JhbSBwcm9ncmFtCisKKwordXNhZ2UKK15eXl5eCisKK0J5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGNhbGN1bGF0ZXMgdGhlIHVzYWdlIG1lc3NhZ2UgZnJvbSB0aGUKK2FyZ3VtZW50cyBpdCBjb250YWluczo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPSc/JywgaGVscD0nZm9vIGhlbHAnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPScrJywgaGVscD0nYmFyIGhlbHAnKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIFtGT09dXSBiYXIgW2JhciAuLi5dCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgICAgICBiYXIgaGVscAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBbRk9PXSAgZm9vIGhlbHAKKworVGhlIGRlZmF1bHQgbWVzc2FnZSBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBgYHVzYWdlPWBgIGtleXdvcmQgYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsIHVzYWdlPSclKHByb2cpcyBbb3B0aW9uc10nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBoZWxwPSdmb28gaGVscCcpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JysnLCBoZWxwPSdiYXIgaGVscCcpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6IFBST0cgW29wdGlvbnNdCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgICAgICBiYXIgaGVscAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBbRk9PXSAgZm9vIGhlbHAKKworVGhlIGBgJShwcm9nKXNgYCBmb3JtYXQgc3BlY2lmaWVyIGlzIGF2YWlsYWJsZSB0byBmaWxsIGluIHRoZSBwcm9ncmFtIG5hbWUgaW4KK3lvdXIgdXNhZ2UgbWVzc2FnZXMuCisKKworVGhlIGFkZF9hcmd1bWVudCgpIG1ldGhvZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnQobmFtZSBvciBmbGFncy4uLiwgW2FjdGlvbl0sIFtuYXJnc10sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25zdF0sIFtkZWZhdWx0XSwgW3R5cGVdLCBbY2hvaWNlc10sIFtyZXF1aXJlZF0sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwXSwgW21ldGF2YXJdLCBbZGVzdF0pCisKKyAgIERlZmluZSBob3cgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZ3VtZW50IHNob3VsZCBiZSBwYXJzZWQuICBFYWNoIHBhcmFtZXRlcgorICAgaGFzIGl0cyBvd24gbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBiZWxvdywgYnV0IGluIHNob3J0IHRoZXkgYXJlOgorCisgICAqIGBuYW1lIG9yIGZsYWdzYF8gLSBFaXRoZXIgYSBuYW1lIG9yIGEgbGlzdCBvZiBvcHRpb24gc3RyaW5ncywgZS5nLiBgYGZvb2BgCisgICAgIG9yIGBgLWYsIC0tZm9vYGAuCisKKyAgICogYWN0aW9uXyAtIFRoZSBiYXNpYyB0eXBlIG9mIGFjdGlvbiB0byBiZSB0YWtlbiB3aGVuIHRoaXMgYXJndW1lbnQgaXMKKyAgICAgZW5jb3VudGVyZWQgYXQgdGhlIGNvbW1hbmQgbGluZS4KKworICAgKiBuYXJnc18gLSBUaGUgbnVtYmVyIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgdGhhdCBzaG91bGQgYmUgY29uc3VtZWQuCisKKyAgICogY29uc3RfIC0gQSBjb25zdGFudCB2YWx1ZSByZXF1aXJlZCBieSBzb21lIGFjdGlvbl8gYW5kIG5hcmdzXyBzZWxlY3Rpb25zLgorCisgICAqIGRlZmF1bHRfIC0gVGhlIHZhbHVlIHByb2R1Y2VkIGlmIHRoZSBhcmd1bWVudCBpcyBhYnNlbnQgZnJvbSB0aGUKKyAgICAgY29tbWFuZCBsaW5lLgorCisgICAqIHR5cGVfIC0gVGhlIHR5cGUgdG8gd2hpY2ggdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudCBzaG91bGQgYmUgY29udmVydGVkLgorCisgICAqIGNob2ljZXNfIC0gQSBjb250YWluZXIgb2YgdGhlIGFsbG93YWJsZSB2YWx1ZXMgZm9yIHRoZSBhcmd1bWVudC4KKworICAgKiByZXF1aXJlZF8gLSBXaGV0aGVyIG9yIG5vdCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbiBtYXkgYmUgb21pdHRlZAorICAgICAob3B0aW9uYWxzIG9ubHkpLgorCisgICAqIGhlbHBfIC0gQSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBhcmd1bWVudCBkb2VzLgorCisgICAqIG1ldGF2YXJfIC0gQSBuYW1lIGZvciB0aGUgYXJndW1lbnQgaW4gdXNhZ2UgbWVzc2FnZXMuCisKKyAgICogZGVzdF8gLSBUaGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIGJlIGFkZGVkIHRvIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkKKyAgICAgOm1ldGg6YHBhcnNlX2FyZ3NgLgorCitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIGhvdyBlYWNoIG9mIHRoZXNlIGFyZSB1c2VkLgorCisKK25hbWUgb3IgZmxhZ3MKK15eXl5eXl5eXl5eXl4KKworVGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCBtZXRob2QgbXVzdCBrbm93IHdoZXRoZXIgYW4gb3B0aW9uYWwKK2FyZ3VtZW50LCBsaWtlIGBgLWZgYCBvciBgYC0tZm9vYGAsIG9yIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgbGlrZSBhIGxpc3Qgb2YKK2ZpbGVuYW1lcywgaXMgZXhwZWN0ZWQuICBUaGUgZmlyc3QgYXJndW1lbnRzIHBhc3NlZCB0bworOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIG11c3QgdGhlcmVmb3JlIGJlIGVpdGhlciBhIHNlcmllcyBvZgorZmxhZ3MsIG9yIGEgc2ltcGxlIGFyZ3VtZW50IG5hbWUuICBGb3IgZXhhbXBsZSwgYW4gb3B0aW9uYWwgYXJndW1lbnQgY291bGQKK2JlIGNyZWF0ZWQgbGlrZTo6CisKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycpCisKK3doaWxlIGEgcG9zaXRpb25hbCBhcmd1bWVudCBjb3VsZCBiZSBjcmVhdGVkIGxpa2U6OgorCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKworV2hlbiA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIGlzIGNhbGxlZCwgb3B0aW9uYWwgYXJndW1lbnRzIHdpbGwgYmUKK2lkZW50aWZpZWQgYnkgdGhlIGBgLWBgIHByZWZpeCwgYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIHdpbGwgYmUgYXNzdW1lZCB0bworYmUgcG9zaXRpb25hbDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ0JBUiddKQorICAgTmFtZXNwYWNlKGJhcj0nQkFSJywgZm9vPU5vbmUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydCQVInLCAnLS1mb28nLCAnRk9PJ10pCisgICBOYW1lc3BhY2UoYmFyPSdCQVInLCBmb289J0ZPTycpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdGT08nXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy1mIEZPT10gYmFyCisgICBQUk9HOiBlcnJvcjogdG9vIGZldyBhcmd1bWVudHMKKworCithY3Rpb24KK15eXl5eXgorCis6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBvYmplY3RzIGFzc29jaWF0ZSBjb21tYW5kLWxpbmUgYXJncyB3aXRoIGFjdGlvbnMuICBUaGVzZQorYWN0aW9ucyBjYW4gZG8ganVzdCBhYm91dCBhbnl0aGluZyB3aXRoIHRoZSBjb21tYW5kLWxpbmUgYXJncyBhc3NvY2lhdGVkIHdpdGgKK3RoZW0sIHRob3VnaCBtb3N0IGFjdGlvbnMgc2ltcGx5IGFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIG9iamVjdCByZXR1cm5lZCBieQorOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYC4gIFRoZSBgYGFjdGlvbmBgIGtleXdvcmQgYXJndW1lbnQgc3BlY2lmaWVzCitob3cgdGhlIGNvbW1hbmQtbGluZSBhcmdzIHNob3VsZCBiZSBoYW5kbGVkLiBUaGUgc3VwcG9ydGVkIGFjdGlvbnMgYXJlOgorCisqIGBgJ3N0b3JlJ2BgIC0gVGhpcyBqdXN0IHN0b3JlcyB0aGUgYXJndW1lbnQncyB2YWx1ZS4gIFRoaXMgaXMgdGhlIGRlZmF1bHQKKyAgYWN0aW9uLiBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAxJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289JzEnKQorCisqIGBgJ3N0b3JlX2NvbnN0J2BgIC0gVGhpcyBzdG9yZXMgdGhlIHZhbHVlIHNwZWNpZmllZCBieSB0aGUgY29uc3RfIGtleXdvcmQKKyAgYXJndW1lbnQuICAoTm90ZSB0aGF0IHRoZSBjb25zdF8ga2V5d29yZCBhcmd1bWVudCBkZWZhdWx0cyB0byB0aGUgcmF0aGVyCisgIHVuaGVscGZ1bCBgYE5vbmVgYC4pICBUaGUgYGAnc3RvcmVfY29uc3QnYGAgYWN0aW9uIGlzIG1vc3QgY29tbW9ubHkgdXNlZCB3aXRoCisgIG9wdGlvbmFsIGFyZ3VtZW50cyB0aGF0IHNwZWNpZnkgc29tZSBzb3J0IG9mIGZsYWcuICBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MikKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289NDIpCisKKyogYGAnc3RvcmVfdHJ1ZSdgYCBhbmQgYGAnc3RvcmVfZmFsc2UnYGAgLSBUaGVzZSBzdG9yZSB0aGUgdmFsdWVzIGBgVHJ1ZWBgIGFuZAorICBgYEZhbHNlYGAgcmVzcGVjdGl2ZWx5LiAgVGhlc2UgYXJlIHNwZWNpYWwgY2FzZXMgb2YgYGAnc3RvcmVfY29uc3QnYGAuICBGb3IKKyAgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLWZvbyAtLWJhcicuc3BsaXQoKSkKKyAgICBOYW1lc3BhY2UoYmFyPUZhbHNlLCBmb289VHJ1ZSkKKworKiBgYCdhcHBlbmQnYGAgLSBUaGlzIHN0b3JlcyBhIGxpc3QsIGFuZCBhcHBlbmRzIGVhY2ggYXJndW1lbnQgdmFsdWUgdG8gdGhlCisgIGxpc3QuICBUaGlzIGlzIHVzZWZ1bCB0byBhbGxvdyBhbiBvcHRpb24gdG8gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzLgorICBFeGFtcGxlIHVzYWdlOjoKKworICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdhcHBlbmQnKQorICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMSAtLWZvbyAyJy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZShmb289WycxJywgJzInXSkKKworKiBgYCdhcHBlbmRfY29uc3QnYGAgLSBUaGlzIHN0b3JlcyBhIGxpc3QsIGFuZCBhcHBlbmRzIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkKKyAgdGhlIGNvbnN0XyBrZXl3b3JkIGFyZ3VtZW50IHRvIHRoZSBsaXN0LiAgKE5vdGUgdGhhdCB0aGUgY29uc3RfIGtleXdvcmQKKyAgYXJndW1lbnQgZGVmYXVsdHMgdG8gYGBOb25lYGAuKSAgVGhlIGBgJ2FwcGVuZF9jb25zdCdgYCBhY3Rpb24gaXMgdHlwaWNhbGx5CisgIHVzZWZ1bCB3aGVuIG11bHRpcGxlIGFyZ3VtZW50cyBuZWVkIHRvIHN0b3JlIGNvbnN0YW50cyB0byB0aGUgc2FtZSBsaXN0LiBGb3IKKyAgZXhhbXBsZTo6CisKKyAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXN0cicsIGRlc3Q9J3R5cGVzJywgYWN0aW9uPSdhcHBlbmRfY29uc3QnLCBjb25zdD1zdHIpCisgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0taW50JywgZGVzdD0ndHlwZXMnLCBhY3Rpb249J2FwcGVuZF9jb25zdCcsIGNvbnN0PWludCkKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tc3RyIC0taW50Jy5zcGxpdCgpKQorICAgIE5hbWVzcGFjZSh0eXBlcz1bPHR5cGUgJ3N0cic+LCA8dHlwZSAnaW50Jz5dKQorCisqIGBgJ3ZlcnNpb24nYGAgLSBUaGlzIGV4cGVjdHMgYSBgYHZlcnNpb249YGAga2V5d29yZCBhcmd1bWVudCBpbiB0aGUKKyAgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIGNhbGwsIGFuZCBwcmludHMgdmVyc2lvbiBpbmZvcm1hdGlvbgorICBhbmQgZXhpdHMgd2hlbiBpbnZva2VkLgorCisgICAgPj4+IGltcG9ydCBhcmdwYXJzZQorICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMi4wJykKKyAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLXZlcnNpb24nXSkKKyAgICBQUk9HIDIuMAorCitZb3UgY2FuIGFsc28gc3BlY2lmeSBhbiBhcmJpdHJhcnkgYWN0aW9uIGJ5IHBhc3NpbmcgYW4gb2JqZWN0IHRoYXQgaW1wbGVtZW50cwordGhlIEFjdGlvbiBBUEkuICBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhpcyBpcyB0byBleHRlbmQKKzpjbGFzczpgYXJncGFyc2UuQWN0aW9uYCwgc3VwcGx5aW5nIGFuIGFwcHJvcHJpYXRlIGBgX19jYWxsX19gYCBtZXRob2QuICBUaGUKK2BgX19jYWxsX19gYCBtZXRob2Qgc2hvdWxkIGFjY2VwdCBmb3VyIHBhcmFtZXRlcnM6CisKKyogYGBwYXJzZXJgYCAtIFRoZSBBcmd1bWVudFBhcnNlciBvYmplY3Qgd2hpY2ggY29udGFpbnMgdGhpcyBhY3Rpb24uCisKKyogYGBuYW1lc3BhY2VgYCAtIFRoZSBuYW1lc3BhY2Ugb2JqZWN0IHRoYXQgd2lsbCBiZSByZXR1cm5lZCBieQorICA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgLiAgTW9zdCBhY3Rpb25zIGFkZCBhbiBhdHRyaWJ1dGUgdG8gdGhpcworICBvYmplY3QuCisKKyogYGB2YWx1ZXNgYCAtIFRoZSBhc3NvY2lhdGVkIGNvbW1hbmQtbGluZSBhcmdzLCB3aXRoIGFueSB0eXBlLWNvbnZlcnNpb25zCisgIGFwcGxpZWQuICAoVHlwZS1jb252ZXJzaW9ucyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIHR5cGVfIGtleXdvcmQgYXJndW1lbnQgdG8KKyAgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgLgorCisqIGBgb3B0aW9uX3N0cmluZ2BgIC0gVGhlIG9wdGlvbiBzdHJpbmcgdGhhdCB3YXMgdXNlZCB0byBpbnZva2UgdGhpcyBhY3Rpb24uCisgIFRoZSBgYG9wdGlvbl9zdHJpbmdgYCBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIHdpbGwgYmUgYWJzZW50IGlmIHRoZSBhY3Rpb24KKyAgaXMgYXNzb2NpYXRlZCB3aXRoIGEgcG9zaXRpb25hbCBhcmd1bWVudC4KKworQW4gZXhhbXBsZSBvZiBhIGN1c3RvbSBhY3Rpb246OgorCisgICA+Pj4gY2xhc3MgRm9vQWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisgICAuLi4gICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgLi4uICAgICAgICAgcHJpbnQoJyVyICVyICVyJyAlIChuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZykpCisgICAuLi4gICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCB2YWx1ZXMpCisgICAuLi4KKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249Rm9vQWN0aW9uKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGFjdGlvbj1Gb29BY3Rpb24pCisgICA+Pj4gYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIC0tZm9vIDInLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPU5vbmUsIGZvbz1Ob25lKSAnMScgTm9uZQorICAgTmFtZXNwYWNlKGJhcj0nMScsIGZvbz1Ob25lKSAnMicgJy0tZm9vJworICAgPj4+IGFyZ3MKKyAgIE5hbWVzcGFjZShiYXI9JzEnLCBmb289JzInKQorCisKK25hcmdzCiteXl5eXgorCitBcmd1bWVudFBhcnNlciBvYmplY3RzIHVzdWFsbHkgYXNzb2NpYXRlIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBhcmd1bWVudCB3aXRoIGEKK3NpbmdsZSBhY3Rpb24gdG8gYmUgdGFrZW4uICBUaGUgYGBuYXJnc2BgIGtleXdvcmQgYXJndW1lbnQgYXNzb2NpYXRlcyBhCitkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgd2l0aCBhIHNpbmdsZSBhY3Rpb24uICBUaGUgc3VwcG9ydGVkCit2YWx1ZXMgYXJlOgorCisqIE4gKGFuIGludGVnZXIpLiAgTiBhcmdzIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aWxsIGJlIGdhdGhlcmVkIHRvZ2V0aGVyIGludG8gYQorICBsaXN0LiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIG5hcmdzPTIpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0xKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2MgLS1mb28gYSBiJy5zcGxpdCgpKQorICAgICBOYW1lc3BhY2UoYmFyPVsnYyddLCBmb289WydhJywgJ2InXSkKKworICBOb3RlIHRoYXQgYGBuYXJncz0xYGAgcHJvZHVjZXMgYSBsaXN0IG9mIG9uZSBpdGVtLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQorICB0aGUgZGVmYXVsdCwgaW4gd2hpY2ggdGhlIGl0ZW0gaXMgcHJvZHVjZWQgYnkgaXRzZWxmLgorCisqIGBgJz8nYGAuIE9uZSBhcmcgd2lsbCBiZSBjb25zdW1lZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUgaWYgcG9zc2libGUsIGFuZAorICBwcm9kdWNlZCBhcyBhIHNpbmdsZSBpdGVtLiAgSWYgbm8gY29tbWFuZC1saW5lIGFyZyBpcyBwcmVzZW50LCB0aGUgdmFsdWUgZnJvbQorICBkZWZhdWx0XyB3aWxsIGJlIHByb2R1Y2VkLiAgTm90ZSB0aGF0IGZvciBvcHRpb25hbCBhcmd1bWVudHMsIHRoZXJlIGlzIGFuCisgIGFkZGl0aW9uYWwgY2FzZSAtIHRoZSBvcHRpb24gc3RyaW5nIGlzIHByZXNlbnQgYnV0IG5vdCBmb2xsb3dlZCBieSBhCisgIGNvbW1hbmQtbGluZSBhcmcuICBJbiB0aGlzIGNhc2UgdGhlIHZhbHVlIGZyb20gY29uc3RfIHdpbGwgYmUgcHJvZHVjZWQuICBTb21lCisgIGV4YW1wbGVzIHRvIGlsbHVzdHJhdGUgdGhpczo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBjb25zdD0nYycsIGRlZmF1bHQ9J2QnKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSdkJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYWCAtLWZvbyBZWScuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nWFgnLCBmb289J1lZJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYWCAtLWZvbycuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nWFgnLCBmb289J2MnKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj0nZCcsIGZvbz0nZCcpCisKKyAgT25lIG9mIHRoZSBtb3JlIGNvbW1vbiB1c2VzIG9mIGBgbmFyZ3M9Jz8nYGAgaXMgdG8gYWxsb3cgb3B0aW9uYWwgaW5wdXQgYW5kCisgIG91dHB1dCBmaWxlczo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIG5hcmdzPSc/JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpLAorICAgICAuLi4gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXN5cy5zdGRpbikKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ291dGZpbGUnLCBuYXJncz0nPycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3cnKSwKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1zeXMuc3Rkb3V0KQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydpbnB1dC50eHQnLCAnb3V0cHV0LnR4dCddKQorICAgICBOYW1lc3BhY2UoaW5maWxlPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSdpbnB1dC50eHQnIGVuY29kaW5nPSdVVEYtOCc+LAorICAgICAgICAgICAgICAgb3V0ZmlsZT08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nb3V0cHV0LnR4dCcgZW5jb2Rpbmc9J1VURi04Jz4pCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgTmFtZXNwYWNlKGluZmlsZT08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nPHN0ZGluPicgZW5jb2Rpbmc9J1VURi04Jz4sCisgICAgICAgICAgICAgICBvdXRmaWxlPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSc8c3Rkb3V0PicgZW5jb2Rpbmc9J1VURi04Jz4pCisKKyogYGAnKidgYC4gIEFsbCBjb21tYW5kLWxpbmUgYXJncyBwcmVzZW50IGFyZSBnYXRoZXJlZCBpbnRvIGEgbGlzdC4gIE5vdGUgdGhhdAorICBpdCBnZW5lcmFsbHkgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdG8gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgd2l0aCBgYG5hcmdzPScqJ2BgLCBidXQgbXVsdGlwbGUgb3B0aW9uYWwgYXJndW1lbnRzIHdpdGggYGBuYXJncz0nKidgYCBpcworICBwb3NzaWJsZS4gIEZvciBleGFtcGxlOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0nKicpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhcicsIG5hcmdzPScqJykKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JheicsIG5hcmdzPScqJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdhIGIgLS1mb28geCB5IC0tYmFyIDEgMicuc3BsaXQoKSkKKyAgICAgTmFtZXNwYWNlKGJhcj1bJzEnLCAnMiddLCBiYXo9WydhJywgJ2InXSwgZm9vPVsneCcsICd5J10pCisKKyogYGAnKydgYC4gSnVzdCBsaWtlIGBgJyonYGAsIGFsbCBjb21tYW5kLWxpbmUgYXJncyBwcmVzZW50IGFyZSBnYXRoZXJlZCBpbnRvIGEKKyAgbGlzdC4gIEFkZGl0aW9uYWxseSwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGdlbmVyYXRlZCBpZiB0aGVyZSB3YXNuJ3QgYXQKKyAgbGVhc3Qgb25lIGNvbW1hbmQtbGluZSBhcmcgcHJlc2VudC4gIEZvciBleGFtcGxlOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCBuYXJncz0nKycpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnYSBiJy5zcGxpdCgpKQorICAgICBOYW1lc3BhY2UoZm9vPVsnYScsICdiJ10pCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnJy5zcGxpdCgpKQorICAgICB1c2FnZTogUFJPRyBbLWhdIGZvbyBbZm9vIC4uLl0KKyAgICAgUFJPRzogZXJyb3I6IHRvbyBmZXcgYXJndW1lbnRzCisKK0lmIHRoZSBgYG5hcmdzYGAga2V5d29yZCBhcmd1bWVudCBpcyBub3QgcHJvdmlkZWQsIHRoZSBudW1iZXIgb2YgYXJncyBjb25zdW1lZAoraXMgZGV0ZXJtaW5lZCBieSB0aGUgYWN0aW9uXy4gIEdlbmVyYWxseSB0aGlzIG1lYW5zIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBhcmcKK3dpbGwgYmUgY29uc3VtZWQgYW5kIGEgc2luZ2xlIGl0ZW0gKG5vdCBhIGxpc3QpIHdpbGwgYmUgcHJvZHVjZWQuCisKKworY29uc3QKK15eXl5eCisKK1RoZSBgYGNvbnN0YGAgYXJndW1lbnQgb2YgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIGlzIHVzZWQgdG8gaG9sZAorY29uc3RhbnQgdmFsdWVzIHRoYXQgYXJlIG5vdCByZWFkIGZyb20gdGhlIGNvbW1hbmQgbGluZSBidXQgYXJlIHJlcXVpcmVkIGZvcgordGhlIHZhcmlvdXMgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgYWN0aW9ucy4gIFRoZSB0d28gbW9zdCBjb21tb24gdXNlcyBvZiBpdCBhcmU6CisKKyogV2hlbiA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgaXMgY2FsbGVkIHdpdGgKKyAgYGBhY3Rpb249J3N0b3JlX2NvbnN0J2BgIG9yIGBgYWN0aW9uPSdhcHBlbmRfY29uc3QnYGAuICBUaGVzZSBhY3Rpb25zIGFkZCB0aGUKKyAgYGBjb25zdGBgIHZhbHVlIHRvIG9uZSBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AuIFNlZSB0aGUgYWN0aW9uXyBkZXNjcmlwdGlvbiBmb3IgZXhhbXBsZXMuCisKKyogV2hlbiA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgaXMgY2FsbGVkIHdpdGggb3B0aW9uIHN0cmluZ3MKKyAgKGxpa2UgYGAtZmBgIG9yIGBgLS1mb29gYCkgYW5kIGBgbmFyZ3M9Jz8nYGAuICBUaGlzIGNyZWF0ZXMgYW4gb3B0aW9uYWwKKyAgYXJndW1lbnQgdGhhdCBjYW4gYmUgZm9sbG93ZWQgYnkgemVybyBvciBvbmUgY29tbWFuZC1saW5lIGFyZ3MuCisgIFdoZW4gcGFyc2luZyB0aGUgY29tbWFuZCBsaW5lLCBpZiB0aGUgb3B0aW9uIHN0cmluZyBpcyBlbmNvdW50ZXJlZCB3aXRoIG5vCisgIGNvbW1hbmQtbGluZSBhcmcgZm9sbG93aW5nIGl0LCB0aGUgdmFsdWUgb2YgYGBjb25zdGBgIHdpbGwgYmUgYXNzdW1lZCBpbnN0ZWFkLgorICBTZWUgdGhlIG5hcmdzXyBkZXNjcmlwdGlvbiBmb3IgZXhhbXBsZXMuCisKK1RoZSBgYGNvbnN0YGAga2V5d29yZCBhcmd1bWVudCBkZWZhdWx0cyB0byBgYE5vbmVgYC4KKworCitkZWZhdWx0CiteXl5eXl5eCisKK0FsbCBvcHRpb25hbCBhcmd1bWVudHMgYW5kIHNvbWUgcG9zaXRpb25hbCBhcmd1bWVudHMgbWF5IGJlIG9taXR0ZWQgYXQgdGhlCitjb21tYW5kIGxpbmUuICBUaGUgYGBkZWZhdWx0YGAga2V5d29yZCBhcmd1bWVudCBvZgorOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgLCB3aG9zZSB2YWx1ZSBkZWZhdWx0cyB0byBgYE5vbmVgYCwKK3NwZWNpZmllcyB3aGF0IHZhbHVlIHNob3VsZCBiZSB1c2VkIGlmIHRoZSBjb21tYW5kLWxpbmUgYXJnIGlzIG5vdCBwcmVzZW50LgorRm9yIG9wdGlvbmFsIGFyZ3VtZW50cywgdGhlIGBgZGVmYXVsdGBgIHZhbHVlIGlzIHVzZWQgd2hlbiB0aGUgb3B0aW9uIHN0cmluZword2FzIG5vdCBwcmVzZW50IGF0IHRoZSBjb21tYW5kIGxpbmU6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVmYXVsdD00MikKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289JzInKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTQyKQorCitGb3IgcG9zaXRpb25hbCBhcmd1bWVudHMgd2l0aCBuYXJnc18gYGA9Jz8nYGAgb3IgYGAnKidgYCwgdGhlIGBgZGVmYXVsdGBgIHZhbHVlCitpcyB1c2VkIHdoZW4gbm8gY29tbWFuZC1saW5lIGFyZyB3YXMgcHJlc2VudDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdhJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz0nYScpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289NDIpCisKKworUHJvdmlkaW5nIGBgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTU2BgIGNhdXNlcyBubyBhdHRyaWJ1dGUgdG8gYmUgYWRkZWQgaWYgdGhlCitjb21tYW5kLWxpbmUgYXJndW1lbnQgd2FzIG5vdCBwcmVzZW50Ljo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFtdKQorICAgTmFtZXNwYWNlKCkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJzEnXSkKKyAgIE5hbWVzcGFjZShmb289JzEnKQorCisKK3R5cGUKK15eXl4KKworQnkgZGVmYXVsdCwgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0cyByZWFkIGNvbW1hbmQtbGluZSBhcmdzIGluIGFzIHNpbXBsZQorc3RyaW5ncy4gSG93ZXZlciwgcXVpdGUgb2Z0ZW4gdGhlIGNvbW1hbmQtbGluZSBzdHJpbmcgc2hvdWxkIGluc3RlYWQgYmUKK2ludGVycHJldGVkIGFzIGFub3RoZXIgdHlwZSwgbGlrZSBhIDpjbGFzczpgZmxvYXRgIG9yIDpjbGFzczpgaW50YC4gIFRoZQorYGB0eXBlYGAga2V5d29yZCBhcmd1bWVudCBvZiA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgYWxsb3dzIGFueQorbmVjZXNzYXJ5IHR5cGUtY2hlY2tpbmcgYW5kIHR5cGUtY29udmVyc2lvbnMgdG8gYmUgcGVyZm9ybWVkLiAgQ29tbW9uIGJ1aWx0LWluCit0eXBlcyBhbmQgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGRpcmVjdGx5IGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGB0eXBlYGAgYXJndW1lbnQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9aW50KQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIHR5cGU9b3BlbikKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMiB0ZW1wLnR4dCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9PF9pby5UZXh0SU9XcmFwcGVyIG5hbWU9J3RlbXAudHh0JyBlbmNvZGluZz0nVVRGLTgnPiwgZm9vPTIpCisKK1RvIGVhc2UgdGhlIHVzZSBvZiB2YXJpb3VzIHR5cGVzIG9mIGZpbGVzLCB0aGUgYXJncGFyc2UgbW9kdWxlIHByb3ZpZGVzIHRoZQorZmFjdG9yeSBGaWxlVHlwZSB3aGljaCB0YWtlcyB0aGUgYGBtb2RlPWBgIGFuZCBgYGJ1ZnNpemU9YGAgYXJndW1lbnRzIG9mIHRoZQorOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgRm9yIGV4YW1wbGUsIGBgRmlsZVR5cGUoJ3cnKWBgIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhCit3cml0YWJsZSBmaWxlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JykpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydvdXQudHh0J10pCisgICBOYW1lc3BhY2UoYmFyPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSdvdXQudHh0JyBlbmNvZGluZz0nVVRGLTgnPikKKworYGB0eXBlPWBgIGNhbiB0YWtlIGFueSBjYWxsYWJsZSB0aGF0IHRha2VzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCBhbmQgcmV0dXJucwordGhlIHR5cGUtY29udmVydGVkIHZhbHVlOjoKKworICAgPj4+IGRlZiBwZXJmZWN0X3NxdWFyZShzdHJpbmcpOgorICAgLi4uICAgICB2YWx1ZSA9IGludChzdHJpbmcpCisgICAuLi4gICAgIHNxcnQgPSBtYXRoLnNxcnQodmFsdWUpCisgICAuLi4gICAgIGlmIHNxcnQgIT0gaW50KHNxcnQpOgorICAgLi4uICAgICAgICAgbXNnID0gIiVyIGlzIG5vdCBhIHBlcmZlY3Qgc3F1YXJlIiAlIHN0cmluZworICAgLi4uICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IobXNnKQorICAgLi4uICAgICByZXR1cm4gdmFsdWUKKyAgIC4uLgorICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9cGVyZmVjdF9zcXVhcmUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzknLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTkpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzcnLnNwbGl0KCkpCisgICB1c2FnZTogUFJPRyBbLWhdIGZvbworICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IGZvbzogJzcnIGlzIG5vdCBhIHBlcmZlY3Qgc3F1YXJlCisKK1RoZSBjaG9pY2VzXyBrZXl3b3JkIGFyZ3VtZW50IG1heSBiZSBtb3JlIGNvbnZlbmllbnQgZm9yIHR5cGUgY2hlY2tlcnMgdGhhdAorc2ltcGx5IGNoZWNrIGFnYWluc3QgYSByYW5nZSBvZiB2YWx1ZXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnZm9vJywgdHlwZT1pbnQsIGNob2ljZXM9cmFuZ2UoNSwgMTApKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCc3Jy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz03KQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcxMScuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gezUsNiw3LDgsOX0KKyAgIFBST0c6IGVycm9yOiBhcmd1bWVudCBmb286IGludmFsaWQgY2hvaWNlOiAxMSAoY2hvb3NlIGZyb20gNSwgNiwgNywgOCwgOSkKKworU2VlIHRoZSBjaG9pY2VzXyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKworY2hvaWNlcworXl5eXl5eXgorCitTb21lIGNvbW1hbmQtbGluZSBhcmdzIHNob3VsZCBiZSBzZWxlY3RlZCBmcm9tIGEgcmVzdHJpY3RlZCBzZXQgb2YgdmFsdWVzLgorVGhlc2UgY2FuIGJlIGhhbmRsZWQgYnkgcGFzc2luZyBhIGNvbnRhaW5lciBvYmplY3QgYXMgdGhlIGBgY2hvaWNlc2BgIGtleXdvcmQKK2FyZ3VtZW50IHRvIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIFdoZW4gdGhlIGNvbW1hbmQgbGluZSBpcworcGFyc2VkLCBhcmcgdmFsdWVzIHdpbGwgYmUgY2hlY2tlZCwgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBkaXNwbGF5ZWQgaWYKK3RoZSBhcmcgd2FzIG5vdCBvbmUgb2YgdGhlIGFjY2VwdGFibGUgdmFsdWVzOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIGNob2ljZXM9J2FiYycpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJ2MnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPSdjJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWCcuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0ge2EsYixjfQorICAgUFJPRzogZXJyb3I6IGFyZ3VtZW50IGZvbzogaW52YWxpZCBjaG9pY2U6ICdYJyAoY2hvb3NlIGZyb20gJ2EnLCAnYicsICdjJykKKworTm90ZSB0aGF0IGluY2x1c2lvbiBpbiB0aGUgYGBjaG9pY2VzYGAgY29udGFpbmVyIGlzIGNoZWNrZWQgYWZ0ZXIgYW55IHR5cGVfCitjb252ZXJzaW9ucyBoYXZlIGJlZW4gcGVyZm9ybWVkLCBzbyB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgYGBjaG9pY2VzYGAKK2NvbnRhaW5lciBzaG91bGQgbWF0Y2ggdGhlIHR5cGVfIHNwZWNpZmllZDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nLCB0eXBlPWNvbXBsZXgsIGNob2ljZXM9WzEsIDFqXSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnMWonLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoZm9vPTFqKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctLSAtNCcuc3BsaXQoKSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gezEsMWp9CisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgZm9vOiBpbnZhbGlkIGNob2ljZTogKC00KzBqKSAoY2hvb3NlIGZyb20gMSwgMWopCisKK0FueSBvYmplY3QgdGhhdCBzdXBwb3J0cyB0aGUgYGBpbmBgIG9wZXJhdG9yIGNhbiBiZSBwYXNzZWQgYXMgdGhlIGBgY2hvaWNlc2BgCit2YWx1ZSwgc28gOmNsYXNzOmBkaWN0YCBvYmplY3RzLCA6Y2xhc3M6YHNldGAgb2JqZWN0cywgY3VzdG9tIGNvbnRhaW5lcnMsCitldGMuIGFyZSBhbGwgc3VwcG9ydGVkLgorCisKK3JlcXVpcmVkCiteXl5eXl5eXgorCitJbiBnZW5lcmFsLCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZSBhc3N1bWVzIHRoYXQgZmxhZ3MgbGlrZSBgYC1mYGAgYW5kIGBgLS1iYXJgYAoraW5kaWNhdGUgKm9wdGlvbmFsKiBhcmd1bWVudHMsIHdoaWNoIGNhbiBhbHdheXMgYmUgb21pdHRlZCBhdCB0aGUgY29tbWFuZCBsaW5lLgorVG8gbWFrZSBhbiBvcHRpb24gKnJlcXVpcmVkKiwgYGBUcnVlYGAgY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlIGBgcmVxdWlyZWQ9YGAKK2tleXdvcmQgYXJndW1lbnQgdG8gOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHJlcXVpcmVkPVRydWUpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdCQVInXSkKKyAgIE5hbWVzcGFjZShmb289J0JBUicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoW10pCisgICB1c2FnZTogYXJncGFyc2UucHkgWy1oXSBbLS1mb28gRk9PXQorICAgYXJncGFyc2UucHk6IGVycm9yOiBvcHRpb24gLS1mb28gaXMgcmVxdWlyZWQKKworQXMgdGhlIGV4YW1wbGUgc2hvd3MsIGlmIGFuIG9wdGlvbiBpcyBtYXJrZWQgYXMgYGByZXF1aXJlZGBgLAorOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCB3aWxsIHJlcG9ydCBhbiBlcnJvciBpZiB0aGF0IG9wdGlvbiBpcyBub3QKK3ByZXNlbnQgYXQgdGhlIGNvbW1hbmQgbGluZS4KKworLi4gbm90ZTo6CisKKyAgICBSZXF1aXJlZCBvcHRpb25zIGFyZSBnZW5lcmFsbHkgY29uc2lkZXJlZCBiYWQgZm9ybSBiZWNhdXNlIHVzZXJzIGV4cGVjdAorICAgICpvcHRpb25zKiB0byBiZSAqb3B0aW9uYWwqLCBhbmQgdGh1cyB0aGV5IHNob3VsZCBiZSBhdm9pZGVkIHdoZW4gcG9zc2libGUuCisKKworaGVscAorXl5eXgorCitUaGUgYGBoZWxwYGAgdmFsdWUgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBhcmd1bWVudC4KK1doZW4gYSB1c2VyIHJlcXVlc3RzIGhlbHAgKHVzdWFsbHkgYnkgdXNpbmcgYGAtaGBgIG9yIGBgLS1oZWxwYGAgYXQgdGhlCitjb21tYW5kIGxpbmUpLCB0aGVzZSBgYGhlbHBgYCBkZXNjcmlwdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQgd2l0aCBlYWNoCithcmd1bWVudDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdmcm9iYmxlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAuLi4gICAgICAgICBoZWxwPSdmb28gdGhlIGJhcnMgYmVmb3JlIGZyb2JibGluZycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgbmFyZ3M9JysnLAorICAgLi4uICAgICAgICAgaGVscD0nb25lIG9mIHRoZSBiYXJzIHRvIGJlIGZyb2JibGVkJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWgnLnNwbGl0KCkpCisgICB1c2FnZTogZnJvYmJsZSBbLWhdIFstLWZvb10gYmFyIFtiYXIgLi4uXQorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBiYXIgICAgIG9uZSBvZiB0aGUgYmFycyB0byBiZSBmcm9iYmxlZAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vICAgZm9vIHRoZSBiYXJzIGJlZm9yZSBmcm9iYmxpbmcKKworVGhlIGBgaGVscGBgIHN0cmluZ3MgY2FuIGluY2x1ZGUgdmFyaW91cyBmb3JtYXQgc3BlY2lmaWVycyB0byBhdm9pZCByZXBldGl0aW9uCitvZiB0aGluZ3MgbGlrZSB0aGUgcHJvZ3JhbSBuYW1lIG9yIHRoZSBhcmd1bWVudCBkZWZhdWx0Xy4gIFRoZSBhdmFpbGFibGUKK3NwZWNpZmllcnMgaW5jbHVkZSB0aGUgcHJvZ3JhbSBuYW1lLCBgYCUocHJvZylzYGAgYW5kIG1vc3Qga2V5d29yZCBhcmd1bWVudHMgdG8KKzptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YCwgZS5nLiBgYCUoZGVmYXVsdClzYGAsIGBgJSh0eXBlKXNgYCwgZXRjLjo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdmcm9iYmxlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBuYXJncz0nPycsIHR5cGU9aW50LCBkZWZhdWx0PTQyLAorICAgLi4uICAgICAgICAgaGVscD0ndGhlIGJhciB0byAlKHByb2cpcyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogZnJvYmJsZSBbLWhdIFtiYXJdCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIGJhciAgICAgdGhlIGJhciB0byBmcm9iYmxlIChkZWZhdWx0OiA0MikKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworCittZXRhdmFyCiteXl5eXl5eCisKK1doZW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgZ2VuZXJhdGVzIGhlbHAgbWVzc2FnZXMsIGl0IG5lZWQgc29tZSB3YXkgdG8gcmVmZXIKK3RvIGVhY2ggZXhwZWN0ZWQgYXJndW1lbnQuICBCeSBkZWZhdWx0LCBBcmd1bWVudFBhcnNlciBvYmplY3RzIHVzZSB0aGUgZGVzdF8KK3ZhbHVlIGFzIHRoZSAibmFtZSIgb2YgZWFjaCBvYmplY3QuICBCeSBkZWZhdWx0LCBmb3IgcG9zaXRpb25hbCBhcmd1bWVudAorYWN0aW9ucywgdGhlIGRlc3RfIHZhbHVlIGlzIHVzZWQgZGlyZWN0bHksIGFuZCBmb3Igb3B0aW9uYWwgYXJndW1lbnQgYWN0aW9ucywKK3RoZSBkZXN0XyB2YWx1ZSBpcyB1cHBlcmNhc2VkLiAgU28sIGEgc2luZ2xlIHBvc2l0aW9uYWwgYXJndW1lbnQgd2l0aAorYGBkZXN0PSdiYXInYGAgd2lsbCB0aGF0IGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJyZWQgdG8gYXMgYGBiYXJgYC4gQSBzaW5nbGUKK29wdGlvbmFsIGFyZ3VtZW50IGBgLS1mb29gYCB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIHNpbmdsZSBjb21tYW5kLWxpbmUgYXJnCit3aWxsIGJlIHJlZmVycmVkIHRvIGFzIGBgRk9PYGAuICBBbiBleGFtcGxlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWCAtLWZvbyBZJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWCcsIGZvbz0nWScpCisgICA+Pj4gcGFyc2VyLnByaW50X2hlbHAoKQorICAgdXNhZ2U6ICBbLWhdIFstLWZvbyBGT09dIGJhcgorCisgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICBiYXIKKworICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAtLWZvbyBGT08KKworQW4gYWx0ZXJuYXRpdmUgbmFtZSBjYW4gYmUgc3BlY2lmaWVkIHdpdGggYGBtZXRhdmFyYGA6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbWV0YXZhcj0nWVlZJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInLCBtZXRhdmFyPSdYWFgnKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCdYIC0tZm9vIFknLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFyPSdYJywgZm9vPSdZJykKKyAgID4+PiBwYXJzZXIucHJpbnRfaGVscCgpCisgICB1c2FnZTogIFstaF0gWy0tZm9vIFlZWV0gWFhYCisKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgIFhYWAorCisgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tZm9vIFlZWQorCitOb3RlIHRoYXQgYGBtZXRhdmFyYGAgb25seSBjaGFuZ2VzIHRoZSAqZGlzcGxheWVkKiBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlCithdHRyaWJ1dGUgb24gdGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2Agb2JqZWN0IGlzIHN0aWxsIGRldGVybWluZWQKK2J5IHRoZSBkZXN0XyB2YWx1ZS4KKworRGlmZmVyZW50IHZhbHVlcyBvZiBgYG5hcmdzYGAgbWF5IGNhdXNlIHRoZSBtZXRhdmFyIHRvIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMuCitQcm92aWRpbmcgYSB0dXBsZSB0byBgYG1ldGF2YXJgYCBzcGVjaWZpZXMgYSBkaWZmZXJlbnQgZGlzcGxheSBmb3IgZWFjaCBvZiB0aGUKK2FyZ3VtZW50czo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIG5hcmdzPTIpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBuYXJncz0yLCBtZXRhdmFyPSgnYmFyJywgJ2JheicpKQorICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFggWF0gWy0tZm9vIGJhciBiYXpdCisKKyAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgLXggWCBYCisgICAgLS1mb28gYmFyIGJhegorCisKK2Rlc3QKK15eXl4KKworTW9zdCA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBhY3Rpb25zIGFkZCBzb21lIHZhbHVlIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUKK29iamVjdCByZXR1cm5lZCBieSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgLiAgVGhlIG5hbWUgb2YgdGhpcworYXR0cmlidXRlIGlzIGRldGVybWluZWQgYnkgdGhlIGBgZGVzdGBgIGtleXdvcmQgYXJndW1lbnQgb2YKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEZvciBwb3NpdGlvbmFsIGFyZ3VtZW50IGFjdGlvbnMsCitgYGRlc3RgYCBpcyBub3JtYWxseSBzdXBwbGllZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8KKzptZXRoOmB+QXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YDo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnWFhYJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGJhcj0nWFhYJykKKworRm9yIG9wdGlvbmFsIGFyZ3VtZW50IGFjdGlvbnMsIHRoZSB2YWx1ZSBvZiBgYGRlc3RgYCBpcyBub3JtYWxseSBpbmZlcnJlZCBmcm9tCit0aGUgb3B0aW9uIHN0cmluZ3MuICA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBnZW5lcmF0ZXMgdGhlIHZhbHVlIG9mIGBgZGVzdGBgIGJ5Cit0YWtpbmcgdGhlIGZpcnN0IGxvbmcgb3B0aW9uIHN0cmluZyBhbmQgc3RyaXBwaW5nIGF3YXkgdGhlIGluaXRpYWwgYGAnLS0nYGAKK3N0cmluZy4gIElmIG5vIGxvbmcgb3B0aW9uIHN0cmluZ3Mgd2VyZSBzdXBwbGllZCwgYGBkZXN0YGAgd2lsbCBiZSBkZXJpdmVkIGZyb20KK3RoZSBmaXJzdCBzaG9ydCBvcHRpb24gc3RyaW5nIGJ5IHN0cmlwcGluZyB0aGUgaW5pdGlhbCBgYCctJ2BgIGNoYXJhY3Rlci4gIEFueQoraW50ZXJuYWwgYGAnLSdgYCBjaGFyYWN0ZXJzIHdpbGwgYmUgY29udmVydGVkIHRvIGBgJ18nYGAgY2hhcmFjdGVycyB0byBtYWtlIHN1cmUKK3RoZSBzdHJpbmcgaXMgYSB2YWxpZCBhdHRyaWJ1dGUgbmFtZS4gIFRoZSBleGFtcGxlcyBiZWxvdyBpbGx1c3RyYXRlIHRoaXMKK2JlaGF2aW9yOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZicsICctLWZvby1iYXInLCAnLS1mb28nKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgJy15JykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWYgMSAteCAyJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvb19iYXI9JzEnLCB4PScyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb28gMSAteSAyJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvb19iYXI9JzEnLCB4PScyJykKKworYGBkZXN0YGAgYWxsb3dzIGEgY3VzdG9tIGF0dHJpYnV0ZSBuYW1lIHRvIGJlIHByb3ZpZGVkOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlc3Q9J2JhcicpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIFhYWCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShiYXI9J1hYWCcpCisKKworVGhlIHBhcnNlX2FyZ3MoKSBtZXRob2QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSkKKworICAgQ29udmVydCBhcmd1bWVudCBzdHJpbmdzIHRvIG9iamVjdHMgYW5kIGFzc2lnbiB0aGVtIGFzIGF0dHJpYnV0ZXMgb2YgdGhlCisgICBuYW1lc3BhY2UuICBSZXR1cm4gdGhlIHBvcHVsYXRlZCBuYW1lc3BhY2UuCisKKyAgIFByZXZpb3VzIGNhbGxzIHRvIDptZXRoOmBhZGRfYXJndW1lbnRgIGRldGVybWluZSBleGFjdGx5IHdoYXQgb2JqZWN0cyBhcmUKKyAgIGNyZWF0ZWQgYW5kIGhvdyB0aGV5IGFyZSBhc3NpZ25lZC4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICAgOm1ldGg6YGFkZF9hcmd1bWVudGAgZm9yIGRldGFpbHMuCisKKyAgIEJ5IGRlZmF1bHQsIHRoZSBhcmcgc3RyaW5ncyBhcmUgdGFrZW4gZnJvbSA6ZGF0YTpgc3lzLmFyZ3ZgLCBhbmQgYSBuZXcgZW1wdHkKKyAgIDpjbGFzczpgTmFtZXNwYWNlYCBvYmplY3QgaXMgY3JlYXRlZCBmb3IgdGhlIGF0dHJpYnV0ZXMuCisKKworT3B0aW9uIHZhbHVlIHN5bnRheAorXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCBtZXRob2Qgc3VwcG9ydHMgc2V2ZXJhbCB3YXlzIG9mCitzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gKGlmIGl0IHRha2VzIG9uZSkuICBJbiB0aGUgc2ltcGxlc3QgY2FzZSwgdGhlCitvcHRpb24gYW5kIGl0cyB2YWx1ZSBhcmUgcGFzc2VkIGFzIHR3byBzZXBhcmF0ZSBhcmd1bWVudHM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXggWCcuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289Tm9uZSwgeD0nWCcpCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJy0tZm9vIEZPTycuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZShmb289J0ZPTycsIHg9Tm9uZSkKKworRm9yIGxvbmcgb3B0aW9ucyAob3B0aW9ucyB3aXRoIG5hbWVzIGxvbmdlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciksIHRoZSBvcHRpb24KK2FuZCB2YWx1ZSBjYW4gYWxzbyBiZSBwYXNzZWQgYXMgYSBzaW5nbGUgY29tbWFuZC1saW5lIGFyZ3VtZW50LCB1c2luZyBgYD1gYCB0bworc2VwYXJhdGUgdGhlbTo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLS1mb289Rk9PJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz0nRk9PJywgeD1Ob25lKQorCitGb3Igc2hvcnQgb3B0aW9ucyAob3B0aW9ucyBvbmx5IG9uZSBjaGFyYWN0ZXIgbG9uZyksIHRoZSBvcHRpb24gYW5kIGl0cyB2YWx1ZQorY2FuIGJlIGNvbmNhdGVuYXRlZDo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLXhYJy5zcGxpdCgpKQorICAgTmFtZXNwYWNlKGZvbz1Ob25lLCB4PSdYJykKKworU2V2ZXJhbCBzaG9ydCBvcHRpb25zIGNhbiBiZSBqb2luZWQgdG9nZXRoZXIsIHVzaW5nIG9ubHkgYSBzaW5nbGUgYGAtYGAgcHJlZml4LAorYXMgbG9uZyBhcyBvbmx5IHRoZSBsYXN0IG9wdGlvbiAob3Igbm9uZSBvZiB0aGVtKSByZXF1aXJlcyBhIHZhbHVlOjoKKworICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXonKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCcteHl6Wicuc3BsaXQoKSkKKyAgIE5hbWVzcGFjZSh4PVRydWUsIHk9VHJ1ZSwgej0nWicpCisKKworSW52YWxpZCBhcmd1bWVudHMKK15eXl5eXl5eXl5eXl5eXl5eCisKK1doaWxlIHBhcnNpbmcgdGhlIGNvbW1hbmQgbGluZSwgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5wYXJzZV9hcmdzYCBjaGVja3MgZm9yIGEKK3ZhcmlldHkgb2YgZXJyb3JzLCBpbmNsdWRpbmcgYW1iaWd1b3VzIG9wdGlvbnMsIGludmFsaWQgdHlwZXMsIGludmFsaWQgb3B0aW9ucywKK3dyb25nIG51bWJlciBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cywgZXRjLiAgV2hlbiBpdCBlbmNvdW50ZXJzIHN1Y2ggYW4gZXJyb3IsCitpdCBleGl0cyBhbmQgcHJpbnRzIHRoZSBlcnJvciBhbG9uZyB3aXRoIGEgdXNhZ2UgbWVzc2FnZTo6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIHR5cGU9aW50KQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIG5hcmdzPSc/JykKKworICAgPj4+ICMgaW52YWxpZCB0eXBlCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdzcGFtJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFtiYXJdCisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgLS1mb286IGludmFsaWQgaW50IHZhbHVlOiAnc3BhbScKKworICAgPj4+ICMgaW52YWxpZCBvcHRpb24KKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tYmFyJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFtiYXJdCisgICBQUk9HOiBlcnJvcjogbm8gc3VjaCBvcHRpb246IC0tYmFyCisKKyAgID4+PiAjIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJ3NwYW0nLCAnYmFkZ2VyJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFtiYXJdCisgICBQUk9HOiBlcnJvcjogZXh0cmEgYXJndW1lbnRzIGZvdW5kOiBiYWRnZXIKKworCitBcmd1bWVudHMgY29udGFpbmluZyBgYCItImBgCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZCBhdHRlbXB0cyB0byBnaXZlIGVycm9ycyB3aGVuZXZlcgordGhlIHVzZXIgaGFzIGNsZWFybHkgbWFkZSBhIG1pc3Rha2UsIGJ1dCBzb21lIHNpdHVhdGlvbnMgYXJlIGluaGVyZW50bHkKK2FtYmlndW91cy4gIEZvciBleGFtcGxlLCB0aGUgY29tbWFuZC1saW5lIGFyZyBgYCctMSdgYCBjb3VsZCBlaXRoZXIgYmUgYW4KK2F0dGVtcHQgdG8gc3BlY2lmeSBhbiBvcHRpb24gb3IgYW4gYXR0ZW1wdCB0byBwcm92aWRlIGEgcG9zaXRpb25hbCBhcmd1bWVudC4KK1RoZSA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIG1ldGhvZCBpcyBjYXV0aW91cyBoZXJlOiBwb3NpdGlvbmFsCithcmd1bWVudHMgbWF5IG9ubHkgYmVnaW4gd2l0aCBgYCctJ2BgIGlmIHRoZXkgbG9vayBsaWtlIG5lZ2F0aXZlIG51bWJlcnMgYW5kCit0aGVyZSBhcmUgbm8gb3B0aW9ucyBpbiB0aGUgcGFyc2VyIHRoYXQgbG9vayBsaWtlIG5lZ2F0aXZlIG51bWJlcnM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIG5hcmdzPSc/JykKKworICAgPj4+ICMgbm8gbmVnYXRpdmUgbnVtYmVyIG9wdGlvbnMsIHNvIC0xIGlzIGEgcG9zaXRpb25hbCBhcmd1bWVudAorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLXgnLCAnLTEnXSkKKyAgIE5hbWVzcGFjZShmb289Tm9uZSwgeD0nLTEnKQorCisgICA+Pj4gIyBubyBuZWdhdGl2ZSBudW1iZXIgb3B0aW9ucywgc28gLTEgYW5kIC01IGFyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cworICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLXgnLCAnLTEnLCAnLTUnXSkKKyAgIE5hbWVzcGFjZShmb289Jy01JywgeD0nLTEnKQorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLTEnLCBkZXN0PSdvbmUnKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIG5hcmdzPSc/JykKKworICAgPj4+ICMgbmVnYXRpdmUgbnVtYmVyIG9wdGlvbnMgcHJlc2VudCwgc28gLTEgaXMgYW4gb3B0aW9uCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctMScsICdYJ10pCisgICBOYW1lc3BhY2UoZm9vPU5vbmUsIG9uZT0nWCcpCisKKyAgID4+PiAjIG5lZ2F0aXZlIG51bWJlciBvcHRpb25zIHByZXNlbnQsIHNvIC0yIGlzIGFuIG9wdGlvbgorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLTInXSkKKyAgIHVzYWdlOiBQUk9HIFstaF0gWy0xIE9ORV0gW2Zvb10KKyAgIFBST0c6IGVycm9yOiBubyBzdWNoIG9wdGlvbjogLTIKKworICAgPj4+ICMgbmVnYXRpdmUgbnVtYmVyIG9wdGlvbnMgcHJlc2VudCwgc28gYm90aCAtMXMgYXJlIG9wdGlvbnMKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0xJywgJy0xJ10pCisgICB1c2FnZTogUFJPRyBbLWhdIFstMSBPTkVdIFtmb29dCisgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgLTE6IGV4cGVjdGVkIG9uZSBhcmd1bWVudAorCitJZiB5b3UgaGF2ZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGF0IG11c3QgYmVnaW4gd2l0aCBgYCctJ2BgIGFuZCBkb24ndCBsb29rCitsaWtlIG5lZ2F0aXZlIG51bWJlcnMsIHlvdSBjYW4gaW5zZXJ0IHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLS0nYGAgd2hpY2ggdGVsbHMKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgdGhhdCBldmVyeXRoaW5nIGFmdGVyIHRoYXQgaXMgYSBwb3NpdGlvbmFsCithcmd1bWVudDo6CisKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tJywgJy1mJ10pCisgICBOYW1lc3BhY2UoZm9vPSctZicsIG9uZT1Ob25lKQorCisKK0FyZ3VtZW50IGFiYnJldmlhdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgbWV0aG9kIGFsbG93cyBsb25nIG9wdGlvbnMgdG8gYmUKK2FiYnJldmlhdGVkIGlmIHRoZSBhYmJyZXZpYXRpb24gaXMgdW5hbWJpZ3VvdXM6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWJhY29uJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYmFkZ2VyJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWJhYyBNTU0nLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFjb249J01NTScsIGJhZGdlcj1Ob25lKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKCctYmFkIFdPT0QnLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYmFjb249Tm9uZSwgYmFkZ2VyPSdXT09EJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWJhIEJBJy5zcGxpdCgpKQorICAgdXNhZ2U6IFBST0cgWy1oXSBbLWJhY29uIEJBQ09OXSBbLWJhZGdlciBCQURHRVJdCisgICBQUk9HOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogLWJhIGNvdWxkIG1hdGNoIC1iYWRnZXIsIC1iYWNvbgorCitBbiBlcnJvciBpcyBwcm9kdWNlZCBmb3IgYXJndW1lbnRzIHRoYXQgY291bGQgcHJvZHVjZSBtb3JlIHRoYW4gb25lIG9wdGlvbnMuCisKKworQmV5b25kIGBgc3lzLmFyZ3ZgYAorXl5eXl5eXl5eXl5eXl5eXl5eXgorCitTb21ldGltZXMgaXQgbWF5IGJlIHVzZWZ1bCB0byBoYXZlIGFuIEFyZ3VtZW50UGFyc2VyIHBhcnNlIGFyZ3Mgb3RoZXIgdGhhbiB0aG9zZQorb2YgOmRhdGE6YHN5cy5hcmd2YC4gIFRoaXMgY2FuIGJlIGFjY29tcGxpc2hlZCBieSBwYXNzaW5nIGEgbGlzdCBvZiBzdHJpbmdzIHRvCis6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RpbmcgYXQgdGhlCitpbnRlcmFjdGl2ZSBwcm9tcHQ6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAuLi4gICAgICdpbnRlZ2VycycsIG1ldGF2YXI9J2ludCcsIHR5cGU9aW50LCBjaG9pY2VzPXJhbmdlKDEwKSwKKyAgIC4uLiAgbmFyZ3M9JysnLCBoZWxwPSdhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLi45JykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgLi4uICAgICAnLS1zdW0nLCBkZXN0PSdhY2N1bXVsYXRlJywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PXN1bSwKKyAgIC4uLiAgIGRlZmF1bHQ9bWF4LCBoZWxwPSdzdW0gdGhlIGludGVnZXJzIChkZWZhdWx0OiBmaW5kIHRoZSBtYXgpJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJzEnLCAnMicsICczJywgJzQnXSkKKyAgIE5hbWVzcGFjZShhY2N1bXVsYXRlPTxidWlsdC1pbiBmdW5jdGlvbiBtYXg+LCBpbnRlZ2Vycz1bMSwgMiwgMywgNF0pCisgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzIDQgLS1zdW0nLnNwbGl0KCkpCisgICBOYW1lc3BhY2UoYWNjdW11bGF0ZT08YnVpbHQtaW4gZnVuY3Rpb24gc3VtPiwgaW50ZWdlcnM9WzEsIDIsIDMsIDRdKQorCisKK1RoZSBOYW1lc3BhY2Ugb2JqZWN0CiteXl5eXl5eXl5eXl5eXl5eXl5eXgorCitCeSBkZWZhdWx0LCA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLnBhcnNlX2FyZ3NgIHdpbGwgcmV0dXJuIGEgbmV3IG9iamVjdCBvZiB0eXBlCis6Y2xhc3M6YE5hbWVzcGFjZWAgd2hlcmUgdGhlIG5lY2Vzc2FyeSBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBzZXQuIFRoaXMgY2xhc3MgaXMKK2RlbGliZXJhdGVseSBzaW1wbGUsIGp1c3QgYW4gOmNsYXNzOmBvYmplY3RgIHN1YmNsYXNzIHdpdGggYSByZWFkYWJsZSBzdHJpbmcKK3JlcHJlc2VudGF0aW9uLiBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgZGljdC1saWtlIHZpZXcgb2YgdGhlIGF0dHJpYnV0ZXMsIHlvdQorY2FuIHVzZSB0aGUgc3RhbmRhcmQgUHl0aG9uIGlkaW9tIHZpYSA6ZnVuYzpgdmFyc2A6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgID4+PiBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICdCQVInXSkKKyAgID4+PiB2YXJzKGFyZ3MpCisgICB7J2Zvbyc6ICdCQVInfQorCitJdCBtYXkgYWxzbyBiZSB1c2VmdWwgdG8gaGF2ZSBhbiA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBhc3NpZ24gYXR0cmlidXRlcyB0byBhbgorYWxyZWFkeSBleGlzdGluZyBvYmplY3QsIHJhdGhlciB0aGFuIGEgbmV3IDpjbGFzczpgTmFtZXNwYWNlYCBvYmplY3QuICBUaGlzIGNhbgorYmUgYWNoaWV2ZWQgYnkgc3BlY2lmeWluZyB0aGUgYGBuYW1lc3BhY2U9YGAga2V5d29yZCBhcmd1bWVudDo6CisKKyAgID4+PiBjbGFzcyBDOgorICAgLi4uICAgICBwYXNzCisgICAuLi4KKyAgID4+PiBjID0gQygpCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJykKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhhcmdzPVsnLS1mb28nLCAnQkFSJ10sIG5hbWVzcGFjZT1jKQorICAgPj4+IGMuZm9vCisgICAnQkFSJworCisKK090aGVyIHV0aWxpdGllcworLS0tLS0tLS0tLS0tLS0tCisKK1N1Yi1jb21tYW5kcworXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKworICAgTWFueSBwcm9ncmFtcyBzcGxpdCB1cCB0aGVpciBmdW5jdGlvbmFsaXR5IGludG8gYSBudW1iZXIgb2Ygc3ViLWNvbW1hbmRzLAorICAgZm9yIGV4YW1wbGUsIHRoZSBgYHN2bmBgIHByb2dyYW0gY2FuIGludm9rZSBzdWItY29tbWFuZHMgbGlrZSBgYHN2bgorICAgY2hlY2tvdXRgYCwgYGBzdm4gdXBkYXRlYGAsIGFuZCBgYHN2biBjb21taXRgYC4gIFNwbGl0dGluZyB1cCBmdW5jdGlvbmFsaXR5CisgICB0aGlzIHdheSBjYW4gYmUgYSBwYXJ0aWN1bGFybHkgZ29vZCBpZGVhIHdoZW4gYSBwcm9ncmFtIHBlcmZvcm1zIHNldmVyYWwKKyAgIGRpZmZlcmVudCBmdW5jdGlvbnMgd2hpY2ggcmVxdWlyZSBkaWZmZXJlbnQga2luZHMgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KKyAgIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIHN1cHBvcnRzIHRoZSBjcmVhdGlvbiBvZiBzdWNoIHN1Yi1jb21tYW5kcyB3aXRoIHRoZQorICAgOm1ldGg6YGFkZF9zdWJwYXJzZXJzYCBtZXRob2QuICBUaGUgOm1ldGg6YGFkZF9zdWJwYXJzZXJzYCBtZXRob2QgaXMgbm9ybWFsbHkKKyAgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhbiBzcGVjaWFsIGFjdGlvbiBvYmplY3QuICBUaGlzIG9iamVjdAorICAgaGFzIGEgc2luZ2xlIG1ldGhvZCwgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfcGFyc2VyYCwgd2hpY2ggdGFrZXMgYQorICAgY29tbWFuZCBuYW1lIGFuZCBhbnkgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3IgYXJndW1lbnRzLCBhbmQKKyAgIHJldHVybnMgYW4gOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgb2JqZWN0IHRoYXQgY2FuIGJlIG1vZGlmaWVkIGFzIHVzdWFsLgorCisgICBTb21lIGV4YW1wbGUgdXNhZ2U6OgorCisgICAgID4+PiAjIGNyZWF0ZSB0aGUgdG9wLWxldmVsIHBhcnNlcgorICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgPj4+IHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoaGVscD0nc3ViLWNvbW1hbmQgaGVscCcpCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJhIiBjb21tYW5kCisgICAgID4+PiBwYXJzZXJfYSA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYScsIGhlbHA9J2EgaGVscCcpCisgICAgID4+PiBwYXJzZXJfYS5hZGRfYXJndW1lbnQoJ2JhcicsIHR5cGU9aW50LCBoZWxwPSdiYXIgaGVscCcpCisgICAgID4+PgorICAgICA+Pj4gIyBjcmVhdGUgdGhlIHBhcnNlciBmb3IgdGhlICJiIiBjb21tYW5kCisgICAgID4+PiBwYXJzZXJfYiA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYicsIGhlbHA9J2IgaGVscCcpCisgICAgID4+PiBwYXJzZXJfYi5hZGRfYXJndW1lbnQoJy0tYmF6JywgY2hvaWNlcz0nWFlaJywgaGVscD0nYmF6IGhlbHAnKQorICAgICA+Pj4KKyAgICAgPj4+ICMgcGFyc2Ugc29tZSBhcmcgbGlzdHMKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnYScsICcxMiddKQorICAgICBOYW1lc3BhY2UoYmFyPTEyLCBmb289RmFsc2UpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tZm9vJywgJ2InLCAnLS1iYXonLCAnWiddKQorICAgICBOYW1lc3BhY2UoYmF6PSdaJywgZm9vPVRydWUpCisKKyAgIE5vdGUgdGhhdCB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYCB3aWxsIG9ubHkgY29udGFpbgorICAgYXR0cmlidXRlcyBmb3IgdGhlIG1haW4gcGFyc2VyIGFuZCB0aGUgc3VicGFyc2VyIHRoYXQgd2FzIHNlbGVjdGVkIGJ5IHRoZQorICAgY29tbWFuZCBsaW5lIChhbmQgbm90IGFueSBvdGhlciBzdWJwYXJzZXJzKS4gIFNvIGluIHRoZSBleGFtcGxlIGFib3ZlLCB3aGVuCisgICB0aGUgYGAiYSJgYCBjb21tYW5kIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYGBmb29gYCBhbmQgYGBiYXJgYCBhdHRyaWJ1dGVzIGFyZQorICAgcHJlc2VudCwgYW5kIHdoZW4gdGhlIGBgImIiYGAgY29tbWFuZCBpcyBzcGVjaWZpZWQsIG9ubHkgdGhlIGBgZm9vYGAgYW5kCisgICBgYGJhemBgIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQuCisKKyAgIFNpbWlsYXJseSwgd2hlbiBhIGhlbHAgbWVzc2FnZSBpcyByZXF1ZXN0ZWQgZnJvbSBhIHN1YnBhcnNlciwgb25seSB0aGUgaGVscAorICAgZm9yIHRoYXQgcGFydGljdWxhciBwYXJzZXIgd2lsbCBiZSBwcmludGVkLiAgVGhlIGhlbHAgbWVzc2FnZSB3aWxsIG5vdAorICAgaW5jbHVkZSBwYXJlbnQgcGFyc2VyIG9yIHNpYmxpbmcgcGFyc2VyIG1lc3NhZ2VzLiAgKEEgaGVscCBtZXNzYWdlIGZvciBlYWNoCisgICBzdWJwYXJzZXIgY29tbWFuZCwgaG93ZXZlciwgY2FuIGJlIGdpdmVuIGJ5IHN1cHBseWluZyB0aGUgYGBoZWxwPWBgIGFyZ3VtZW50CisgICB0byA6bWV0aDpgYWRkX3BhcnNlcmAgYXMgYWJvdmUuKQorCisgICA6OgorCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0taGVscCddKQorICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10ge2EsYn0gLi4uCisKKyAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAge2EsYn0gICBzdWItY29tbWFuZCBoZWxwCisgICAgIGEgICAgIGEgaGVscAorICAgICBiICAgICBiIGhlbHAKKworICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgIC0tZm9vICAgZm9vIGhlbHAKKworICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydhJywgJy0taGVscCddKQorICAgICB1c2FnZTogUFJPRyBhIFstaF0gYmFyCisKKyAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgYmFyICAgICBiYXIgaGVscAorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnYicsICctLWhlbHAnXSkKKyAgICAgdXNhZ2U6IFBST0cgYiBbLWhdIFstLWJheiB7WCxZLFp9XQorCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgLS1iYXoge1gsWSxafSAgYmF6IGhlbHAKKworICAgVGhlIDptZXRoOmBhZGRfc3VicGFyc2Vyc2AgbWV0aG9kIGFsc28gc3VwcG9ydHMgYGB0aXRsZWBgIGFuZCBgYGRlc2NyaXB0aW9uYGAKKyAgIGtleXdvcmQgYXJndW1lbnRzLiAgV2hlbiBlaXRoZXIgaXMgcHJlc2VudCwgdGhlIHN1YnBhcnNlcidzIGNvbW1hbmRzIHdpbGwKKyAgIGFwcGVhciBpbiB0aGVpciBvd24gZ3JvdXAgaW4gdGhlIGhlbHAgb3V0cHV0LiAgRm9yIGV4YW1wbGU6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKHRpdGxlPSdzdWJjb21tYW5kcycsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSd2YWxpZCBzdWJjb21tYW5kcycsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FkZGl0aW9uYWwgaGVscCcpCisgICAgID4+PiBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZvbycpCisgICAgID4+PiBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2JhcicpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy1oJ10pCisgICAgIHVzYWdlOiAgWy1oXSB7Zm9vLGJhcn0gLi4uCisKKyAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKworICAgICBzdWJjb21tYW5kczoKKyAgICAgICB2YWxpZCBzdWJjb21tYW5kcworCisgICAgICAge2ZvbyxiYXJ9ICAgYWRkaXRpb25hbCBoZWxwCisKKyAgIEZ1cnRoZXJtb3JlLCBgYGFkZF9wYXJzZXJgYCBzdXBwb3J0cyBhbiBhZGRpdGlvbmFsIGBgYWxpYXNlc2BgIGFyZ3VtZW50LAorICAgd2hpY2ggYWxsb3dzIG11bHRpcGxlIHN0cmluZ3MgdG8gcmVmZXIgdG8gdGhlIHNhbWUgc3VicGFyc2VyLiBUaGlzIGV4YW1wbGUsCisgICBsaWtlIGBgc3ZuYGAsIGFsaWFzZXMgYGBjb2BgIGFzIGEgc2hvcnRoYW5kIGZvciBgYGNoZWNrb3V0YGA6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgPj4+IGNoZWNrb3V0ID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdjaGVja291dCcsIGFsaWFzZXM9WydjbyddKQorICAgICA+Pj4gY2hlY2tvdXQuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWydjbycsICdiYXInXSkKKyAgICAgTmFtZXNwYWNlKGZvbz0nYmFyJykKKworICAgT25lIHBhcnRpY3VsYXJseSBlZmZlY3RpdmUgd2F5IG9mIGhhbmRsaW5nIHN1Yi1jb21tYW5kcyBpcyB0byBjb21iaW5lIHRoZSB1c2UKKyAgIG9mIHRoZSA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIG1ldGhvZCB3aXRoIGNhbGxzIHRvIDptZXRoOmBzZXRfZGVmYXVsdHNgIHNvCisgICB0aGF0IGVhY2ggc3VicGFyc2VyIGtub3dzIHdoaWNoIFB5dGhvbiBmdW5jdGlvbiBpdCBzaG91bGQgZXhlY3V0ZS4gIEZvcgorICAgZXhhbXBsZTo6CisKKyAgICAgPj4+ICMgc3ViLWNvbW1hbmQgZnVuY3Rpb25zCisgICAgID4+PiBkZWYgZm9vKGFyZ3MpOgorICAgICAuLi4gICAgIHByaW50KGFyZ3MueCAqIGFyZ3MueSkKKyAgICAgLi4uCisgICAgID4+PiBkZWYgYmFyKGFyZ3MpOgorICAgICAuLi4gICAgIHByaW50KCcoKCVzKSknICUgYXJncy56KQorICAgICAuLi4KKyAgICAgPj4+ICMgY3JlYXRlIHRoZSB0b3AtbGV2ZWwgcGFyc2VyCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgPj4+CisgICAgID4+PiAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgImZvbyIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2ZvbyA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignZm9vJykKKyAgICAgPj4+IHBhcnNlcl9mb28uYWRkX2FyZ3VtZW50KCcteCcsIHR5cGU9aW50LCBkZWZhdWx0PTEpCisgICAgID4+PiBwYXJzZXJfZm9vLmFkZF9hcmd1bWVudCgneScsIHR5cGU9ZmxvYXQpCisgICAgID4+PiBwYXJzZXJfZm9vLnNldF9kZWZhdWx0cyhmdW5jPWZvbykKKyAgICAgPj4+CisgICAgID4+PiAjIGNyZWF0ZSB0aGUgcGFyc2VyIGZvciB0aGUgImJhciIgY29tbWFuZAorICAgICA+Pj4gcGFyc2VyX2JhciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJykKKyAgICAgPj4+IHBhcnNlcl9iYXIuYWRkX2FyZ3VtZW50KCd6JykKKyAgICAgPj4+IHBhcnNlcl9iYXIuc2V0X2RlZmF1bHRzKGZ1bmM9YmFyKQorICAgICA+Pj4KKyAgICAgPj4+ICMgcGFyc2UgdGhlIGFyZ3MgYW5kIGNhbGwgd2hhdGV2ZXIgZnVuY3Rpb24gd2FzIHNlbGVjdGVkCisgICAgID4+PiBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoJ2ZvbyAxIC14IDInLnNwbGl0KCkpCisgICAgID4+PiBhcmdzLmZ1bmMoYXJncykKKyAgICAgMi4wCisgICAgID4+PgorICAgICA+Pj4gIyBwYXJzZSB0aGUgYXJncyBhbmQgY2FsbCB3aGF0ZXZlciBmdW5jdGlvbiB3YXMgc2VsZWN0ZWQKKyAgICAgPj4+IGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygnYmFyIFhZWllYJy5zcGxpdCgpKQorICAgICA+Pj4gYXJncy5mdW5jKGFyZ3MpCisgICAgICgoWFlaWVgpKQorCisgICBUaGlzIHdheSwgeW91IGNhbiBsZXQgOm1ldGg6YHBhcnNlX2FyZ3NgIGRvIHRoZSBqb2Igb2YgY2FsbGluZyB0aGUKKyAgIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGFmdGVyIGFyZ3VtZW50IHBhcnNpbmcgaXMgY29tcGxldGUuICBBc3NvY2lhdGluZworICAgZnVuY3Rpb25zIHdpdGggYWN0aW9ucyBsaWtlIHRoaXMgaXMgdHlwaWNhbGx5IHRoZSBlYXNpZXN0IHdheSB0byBoYW5kbGUgdGhlCisgICBkaWZmZXJlbnQgYWN0aW9ucyBmb3IgZWFjaCBvZiB5b3VyIHN1YnBhcnNlcnMuICBIb3dldmVyLCBpZiBpdCBpcyBuZWNlc3NhcnkKKyAgIHRvIGNoZWNrIHRoZSBuYW1lIG9mIHRoZSBzdWJwYXJzZXIgdGhhdCB3YXMgaW52b2tlZCwgdGhlIGBgZGVzdGBgIGtleXdvcmQKKyAgIGFyZ3VtZW50IHRvIHRoZSA6bWV0aDpgYWRkX3N1YnBhcnNlcnNgIGNhbGwgd2lsbCB3b3JrOjoKKworICAgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICA+Pj4gc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycyhkZXN0PSdzdWJwYXJzZXJfbmFtZScpCisgICAgID4+PiBzdWJwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJykKKyAgICAgPj4+IHN1YnBhcnNlcjEuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgID4+PiBzdWJwYXJzZXIyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcyJykKKyAgICAgPj4+IHN1YnBhcnNlcjIuYWRkX2FyZ3VtZW50KCd5JykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnMicsICdmcm9iYmxlJ10pCisgICAgIE5hbWVzcGFjZShzdWJwYXJzZXJfbmFtZT0nMicsIHk9J2Zyb2JibGUnKQorCisKK0ZpbGVUeXBlIG9iamVjdHMKK15eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBGaWxlVHlwZShtb2RlPSdyJywgYnVmc2l6ZT1Ob25lKQorCisgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCisgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKKyAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3MgYXMgZmlsZXMKKyAgIHdpdGggdGhlIHJlcXVlc3RlZCBtb2RlcyBhbmQgYnVmZmVyIHNpemVzOgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tb3V0cHV0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAwKSkKKyAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbJy0tb3V0cHV0JywgJ291dCddKQorICAgTmFtZXNwYWNlKG91dHB1dD08X2lvLkJ1ZmZlcmVkV3JpdGVyIG5hbWU9J291dCc+KQorCisgICBGaWxlVHlwZSBvYmplY3RzIHVuZGVyc3RhbmQgdGhlIHBzZXVkby1hcmd1bWVudCBgYCctJ2BgIGFuZCBhdXRvbWF0aWNhbGx5CisgICBjb252ZXJ0IHRoaXMgaW50byBgYHN5cy5zdGRpbmBgIGZvciByZWFkYWJsZSA6Y2xhc3M6YEZpbGVUeXBlYCBvYmplY3RzIGFuZAorICAgYGBzeXMuc3Rkb3V0YGAgZm9yIHdyaXRhYmxlIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHM6CisKKyAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnaW5maWxlJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgncicpKQorICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLSddKQorICAgTmFtZXNwYWNlKGluZmlsZT08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nPHN0ZGluPicgZW5jb2Rpbmc9J1VURi04Jz4pCisKKworQXJndW1lbnQgZ3JvdXBzCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKHRpdGxlPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUpCisKKyAgIEJ5IGRlZmF1bHQsIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGdyb3VwcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGludG8KKyAgICJwb3NpdGlvbmFsIGFyZ3VtZW50cyIgYW5kICJvcHRpb25hbCBhcmd1bWVudHMiIHdoZW4gZGlzcGxheWluZyBoZWxwCisgICBtZXNzYWdlcy4gV2hlbiB0aGVyZSBpcyBhIGJldHRlciBjb25jZXB0dWFsIGdyb3VwaW5nIG9mIGFyZ3VtZW50cyB0aGFuIHRoaXMKKyAgIGRlZmF1bHQgb25lLCBhcHByb3ByaWF0ZSBncm91cHMgY2FuIGJlIGNyZWF0ZWQgdXNpbmcgdGhlCisgICA6bWV0aDpgYWRkX2FyZ3VtZW50X2dyb3VwYCBtZXRob2Q6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgID4+PiBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2dyb3VwJykKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJ2JhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgdXNhZ2U6IFBST0cgWy0tZm9vIEZPT10gYmFyCisKKyAgICAgZ3JvdXA6CisgICAgICAgYmFyICAgIGJhciBoZWxwCisgICAgICAgLS1mb28gRk9PICBmb28gaGVscAorCisgICBUaGUgOm1ldGg6YGFkZF9hcmd1bWVudF9ncm91cGAgbWV0aG9kIHJldHVybnMgYW4gYXJndW1lbnQgZ3JvdXAgb2JqZWN0IHdoaWNoCisgICBoYXMgYW4gOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIG1ldGhvZCBqdXN0IGxpa2UgYSByZWd1bGFyCisgICA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4gIFdoZW4gYW4gYXJndW1lbnQgaXMgYWRkZWQgdG8gdGhlIGdyb3VwLCB0aGUgcGFyc2VyCisgICB0cmVhdHMgaXQganVzdCBsaWtlIGEgbm9ybWFsIGFyZ3VtZW50LCBidXQgZGlzcGxheXMgdGhlIGFyZ3VtZW50IGluIGEKKyAgIHNlcGFyYXRlIGdyb3VwIGZvciBoZWxwIG1lc3NhZ2VzLiAgVGhlIDptZXRoOmBhZGRfYXJndW1lbnRfZ3JvdXBgIG1ldGhvZAorICAgYWNjZXB0cyAqdGl0bGUqIGFuZCAqZGVzY3JpcHRpb24qIGFyZ3VtZW50cyB3aGljaCBjYW4gYmUgdXNlZCB0bworICAgY3VzdG9taXplIHRoaXMgZGlzcGxheTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCBhZGRfaGVscD1GYWxzZSkKKyAgICAgPj4+IGdyb3VwMSA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2dyb3VwMScsICdncm91cDEgZGVzY3JpcHRpb24nKQorICAgICA+Pj4gZ3JvdXAxLmFkZF9hcmd1bWVudCgnZm9vJywgaGVscD0nZm9vIGhlbHAnKQorICAgICA+Pj4gZ3JvdXAyID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZ3JvdXAyJywgJ2dyb3VwMiBkZXNjcmlwdGlvbicpCisgICAgID4+PiBncm91cDIuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgPj4+IHBhcnNlci5wcmludF9oZWxwKCkKKyAgICAgdXNhZ2U6IFBST0cgWy0tYmFyIEJBUl0gZm9vCisKKyAgICAgZ3JvdXAxOgorICAgICAgIGdyb3VwMSBkZXNjcmlwdGlvbgorCisgICAgICAgZm9vICAgIGZvbyBoZWxwCisKKyAgICAgZ3JvdXAyOgorICAgICAgIGdyb3VwMiBkZXNjcmlwdGlvbgorCisgICAgICAgLS1iYXIgQkFSICBiYXIgaGVscAorCisgICBOb3RlIHRoYXQgYW55IGFyZ3VtZW50cyBub3QgeW91ciB1c2VyIGRlZmluZWQgZ3JvdXBzIHdpbGwgZW5kIHVwIGJhY2sgaW4gdGhlCisgICB1c3VhbCAicG9zaXRpb25hbCBhcmd1bWVudHMiIGFuZCAib3B0aW9uYWwgYXJndW1lbnRzIiBzZWN0aW9ucy4KKworCitNdXR1YWwgZXhjbHVzaW9uCiteXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IGFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAocmVxdWlyZWQ9RmFsc2UpCisKKyAgIENyZWF0ZSBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cC4gOm1vZDpgYXJncGFyc2VgIHdpbGwgbWFrZSBzdXJlIHRoYXQgb25seQorICAgb25lIG9mIHRoZSBhcmd1bWVudHMgaW4gdGhlIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cCB3YXMgcHJlc2VudCBvbiB0aGUKKyAgIGNvbW1hbmQgbGluZTo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgPj4+IGdyb3VwLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1mb28nXSkKKyAgICAgTmFtZXNwYWNlKGJhcj1UcnVlLCBmb289VHJ1ZSkKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1iYXInXSkKKyAgICAgTmFtZXNwYWNlKGJhcj1GYWxzZSwgZm9vPUZhbHNlKQorICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLWZvbycsICctLWJhciddKQorICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tYmFyXQorICAgICBQUk9HOiBlcnJvcjogYXJndW1lbnQgLS1iYXI6IG5vdCBhbGxvd2VkIHdpdGggYXJndW1lbnQgLS1mb28KKworICAgVGhlIDptZXRoOmBhZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwYCBtZXRob2QgYWxzbyBhY2NlcHRzIGEgKnJlcXVpcmVkKgorICAgYXJndW1lbnQsIHRvIGluZGljYXRlIHRoYXQgYXQgbGVhc3Qgb25lIG9mIHRoZSBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzCisgICBpcyByZXF1aXJlZDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICA+Pj4gZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1UcnVlKQorICAgICA+Pj4gZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgID4+PiBncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1mb28gfCAtLWJhcikKKyAgICAgUFJPRzogZXJyb3I6IG9uZSBvZiB0aGUgYXJndW1lbnRzIC0tZm9vIC0tYmFyIGlzIHJlcXVpcmVkCisKKyAgIE5vdGUgdGhhdCBjdXJyZW50bHkgbXV0dWFsbHkgZXhjbHVzaXZlIGFyZ3VtZW50IGdyb3VwcyBkbyBub3Qgc3VwcG9ydCB0aGUKKyAgICp0aXRsZSogYW5kICpkZXNjcmlwdGlvbiogYXJndW1lbnRzIG9mCisgICA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cGAuCisKKworUGFyc2VyIGRlZmF1bHRzCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzKCoqa3dhcmdzKQorCisgICBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IDptZXRoOmBwYXJzZV9hcmdzYAorICAgd2lsbCBiZSBmdWxseSBkZXRlcm1pbmVkIGJ5IGluc3BlY3RpbmcgdGhlIGNvbW1hbmQtbGluZSBhcmdzIGFuZCB0aGUgYXJndW1lbnQKKyAgIGFjdGlvbnMuICA6bWV0aDpgc2V0X2RlZmF1bHRzYCBhbGxvd3Mgc29tZSBhZGRpdGlvbmFsCisgICBhdHRyaWJ1dGVzIHRoYXQgYXJlIGRldGVybWluZWQgd2l0aG91dCBhbnkgaW5zcGVjdGlvbiBvZiB0aGUgY29tbWFuZCBsaW5lIHRvCisgICBiZSBhZGRlZDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycsIHR5cGU9aW50KQorICAgICA+Pj4gcGFyc2VyLnNldF9kZWZhdWx0cyhiYXI9NDIsIGJhej0nYmFkZ2VyJykKKyAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnNzM2J10pCisgICAgIE5hbWVzcGFjZShiYXI9NDIsIGJhej0nYmFkZ2VyJywgZm9vPTczNikKKworICAgTm90ZSB0aGF0IHBhcnNlci1sZXZlbCBkZWZhdWx0cyBhbHdheXMgb3ZlcnJpZGUgYXJndW1lbnQtbGV2ZWwgZGVmYXVsdHM6OgorCisgICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycsIGRlZmF1bHQ9J2JhcicpCisgICAgID4+PiBwYXJzZXIuc2V0X2RlZmF1bHRzKGZvbz0nc3BhbScpCisgICAgID4+PiBwYXJzZXIucGFyc2VfYXJncyhbXSkKKyAgICAgTmFtZXNwYWNlKGZvbz0nc3BhbScpCisKKyAgIFBhcnNlci1sZXZlbCBkZWZhdWx0cyBjYW4gYmUgcGFydGljdWxhcmx5IHVzZWZ1bCB3aGVuIHdvcmtpbmcgd2l0aCBtdWx0aXBsZQorICAgcGFyc2Vycy4gIFNlZSB0aGUgOm1ldGg6YH5Bcmd1bWVudFBhcnNlci5hZGRfc3VicGFyc2Vyc2AgbWV0aG9kIGZvciBhbgorICAgZXhhbXBsZSBvZiB0aGlzIHR5cGUuCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmdldF9kZWZhdWx0KGRlc3QpCisKKyAgIEdldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgYSBuYW1lc3BhY2UgYXR0cmlidXRlLCBhcyBzZXQgYnkgZWl0aGVyCisgICA6bWV0aDpgfkFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAgb3IgYnkKKyAgIDptZXRoOmB+QXJndW1lbnRQYXJzZXIuc2V0X2RlZmF1bHRzYDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgZGVmYXVsdD0nYmFkZ2VyJykKKyAgICAgPj4+IHBhcnNlci5nZXRfZGVmYXVsdCgnZm9vJykKKyAgICAgJ2JhZGdlcicKKworCitQcmludGluZyBoZWxwCiteXl5eXl5eXl5eXl5eCisKK0luIG1vc3QgdHlwaWNhbCBhcHBsaWNhdGlvbnMsIDptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2Agd2lsbCB0YWtlCitjYXJlIG9mIGZvcm1hdHRpbmcgYW5kIHByaW50aW5nIGFueSB1c2FnZSBvciBlcnJvciBtZXNzYWdlcy4gIEhvd2V2ZXIsIHNldmVyYWwKK2Zvcm1hdHRpbmcgbWV0aG9kcyBhcmUgYXZhaWxhYmxlOgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wcmludF91c2FnZShmaWxlPU5vbmUpCisKKyAgIFByaW50IGEgYnJpZWYgZGVzY3JpcHRpb24gb2YgaG93IHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBzaG91bGQgYmUKKyAgIGludm9rZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIElmICpmaWxlKiBpcyBgYE5vbmVgYCwgOmRhdGE6YHN5cy5zdGRvdXRgIGlzCisgICBhc3N1bWVkLgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5wcmludF9oZWxwKGZpbGU9Tm9uZSkKKworICAgUHJpbnQgYSBoZWxwIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgcHJvZ3JhbSB1c2FnZSBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICBhcmd1bWVudHMgcmVnaXN0ZXJlZCB3aXRoIHRoZSA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYC4gIElmICpmaWxlKiBpcworICAgYGBOb25lYGAsIDpkYXRhOmBzeXMuc3Rkb3V0YCBpcyBhc3N1bWVkLgorCitUaGVyZSBhcmUgYWxzbyB2YXJpYW50cyBvZiB0aGVzZSBtZXRob2RzIHRoYXQgc2ltcGx5IHJldHVybiBhIHN0cmluZyBpbnN0ZWFkIG9mCitwcmludGluZyBpdDoKKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIuZm9ybWF0X3VzYWdlKCkKKworICAgUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBicmllZiBkZXNjcmlwdGlvbiBvZiBob3cgdGhlCisgICA6Y2xhc3M6YEFyZ3VtZW50UGFyc2VyYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5mb3JtYXRfaGVscCgpCisKKyAgIFJldHVybiBhIHN0cmluZyBjb250YWluaW5nIGEgaGVscCBtZXNzYWdlLCBpbmNsdWRpbmcgdGhlIHByb2dyYW0gdXNhZ2UgYW5kCisgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAuCisKKworUGFydGlhbCBwYXJzaW5nCiteXl5eXl5eXl5eXl5eXl4KKworLi4gbWV0aG9kOjogQXJndW1lbnRQYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmdzPU5vbmUsIG5hbWVzcGFjZT1Ob25lKQorCitTb21ldGltZXMgYSBzY3JpcHQgbWF5IG9ubHkgcGFyc2UgYSBmZXcgb2YgdGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHBhc3NpbmcKK3RoZSByZW1haW5pbmcgYXJndW1lbnRzIG9uIHRvIGFub3RoZXIgc2NyaXB0IG9yIHByb2dyYW0uIEluIHRoZXNlIGNhc2VzLCB0aGUKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2Vfa25vd25fYXJnc2AgbWV0aG9kIGNhbiBiZSB1c2VmdWwuICBJdCB3b3JrcyBtdWNoIGxpa2UKKzptZXRoOmB+QXJndW1lbnRQYXJzZXIucGFyc2VfYXJnc2AgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgcHJvZHVjZSBhbiBlcnJvciB3aGVuCitleHRyYSBhcmd1bWVudHMgYXJlIHByZXNlbnQuICBJbnN0ZWFkLCBpdCByZXR1cm5zIGEgdHdvIGl0ZW0gdHVwbGUgY29udGFpbmluZwordGhlIHBvcHVsYXRlZCBuYW1lc3BhY2UgYW5kIHRoZSBsaXN0IG9mIHJlbWFpbmluZyBhcmd1bWVudCBzdHJpbmdzLgorCis6OgorCisgICA+Pj4gcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgPj4+IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCdiYXInKQorICAgPj4+IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKFsnLS1mb28nLCAnLS1iYWRnZXInLCAnQkFSJywgJ3NwYW0nXSkKKyAgIChOYW1lc3BhY2UoYmFyPSdCQVInLCBmb289VHJ1ZSksIFsnLS1iYWRnZXInLCAnc3BhbSddKQorCisKK0N1c3RvbWl6aW5nIGZpbGUgcGFyc2luZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhhcmdfbGluZSkKKworICAgQXJndW1lbnRzIHRoYXQgYXJlIHJlYWQgZnJvbSBhIGZpbGUgKHNlZSB0aGUgKmZyb21maWxlX3ByZWZpeF9jaGFycyoKKyAgIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIDpjbGFzczpgQXJndW1lbnRQYXJzZXJgIGNvbnN0cnVjdG9yKSBhcmUgcmVhZCBvbmUKKyAgIGFyZ3VtZW50IHBlciBsaW5lLiA6bWV0aDpgY29udmVydF9hcmdfbGluZV90b19hcmdzYCBjYW4gYmUgb3ZlcnJpZGVuIGZvcgorICAgZmFuY2llciByZWFkaW5nLgorCisgICBUaGlzIG1ldGhvZCB0YWtlcyBhIHNpbmdsZSBhcmd1bWVudCAqYXJnX2xpbmUqIHdoaWNoIGlzIGEgc3RyaW5nIHJlYWQgZnJvbQorICAgdGhlIGFyZ3VtZW50IGZpbGUuICBJdCByZXR1cm5zIGEgbGlzdCBvZiBhcmd1bWVudHMgcGFyc2VkIGZyb20gdGhpcyBzdHJpbmcuCisgICBUaGUgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHBlciBsaW5lIHJlYWQgZnJvbSB0aGUgYXJndW1lbnQgZmlsZSwgaW4gb3JkZXIuCisKKyAgIEEgdXNlZnVsIG92ZXJyaWRlIG9mIHRoaXMgbWV0aG9kIGlzIG9uZSB0aGF0IHRyZWF0cyBlYWNoIHNwYWNlLXNlcGFyYXRlZCB3b3JkCisgICBhcyBhbiBhcmd1bWVudDo6CisKKyAgICBkZWYgY29udmVydF9hcmdfbGluZV90b19hcmdzKHNlbGYsIGFyZ19saW5lKToKKyAgICAgICAgZm9yIGFyZyBpbiBhcmdfbGluZS5zcGxpdCgpOgorICAgICAgICAgICAgaWYgbm90IGFyZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICB5aWVsZCBhcmcKKworCitFeGl0aW5nIG1ldGhvZHMKK15eXl5eXl5eXl5eXl5eXgorCisuLiBtZXRob2Q6OiBBcmd1bWVudFBhcnNlci5leGl0KHN0YXR1cz0wLCBtZXNzYWdlPU5vbmUpCisKKyAgIFRoaXMgbWV0aG9kIHRlcm1pbmF0ZXMgdGhlIHByb2dyYW0sIGV4aXRpbmcgd2l0aCB0aGUgc3BlY2lmaWVkICpzdGF0dXMqCisgICBhbmQsIGlmIGdpdmVuLCBpdCBwcmludHMgYSAqbWVzc2FnZSogYmVmb3JlIHRoYXQuCisKKy4uIG1ldGhvZDo6IEFyZ3VtZW50UGFyc2VyLmVycm9yKG1lc3NhZ2UpCisKKyAgIFRoaXMgbWV0aG9kIHByaW50cyBhIHVzYWdlIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSAqbWVzc2FnZSogdG8gdGhlCisgICBzdGFuZGFyZCBvdXRwdXQgYW5kIHRlcm1pbmF0ZXMgdGhlIHByb2dyYW0gd2l0aCBhIHN0YXR1cyBjb2RlIG9mIDIuCisKKy4uIF91cGdyYWRpbmctb3B0cGFyc2UtY29kZToKKworVXBncmFkaW5nIG9wdHBhcnNlIGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09yaWdpbmFsbHksIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGhhZCBhdHRlbXB0ZWQgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eQord2l0aCA6bW9kOmBvcHRwYXJzZWAuICBIb3dldmVyLCA6bW9kOmBvcHRwYXJzZWAgd2FzIGRpZmZpY3VsdCB0byBleHRlbmQKK3RyYW5zcGFyZW50bHksIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBjaGFuZ2VzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIG5ldworYGBuYXJncz1gYCBzcGVjaWZpZXJzIGFuZCBiZXR0ZXIgdXNhZ2UgbWVzc2FnZXMuICBXaGVuIG1vc3QgZXZlcnl0aGluZyBpbgorOm1vZDpgb3B0cGFyc2VgIGhhZCBlaXRoZXIgYmVlbiBjb3B5LXBhc3RlZCBvdmVyIG9yIG1vbmtleS1wYXRjaGVkLCBpdCBubworbG9uZ2VyIHNlZW1lZCBwcmFjdGljYWwgdG8gdHJ5IHRvIG1haW50YWluIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworQSBwYXJ0aWFsIHVwZ3JhZGUgcGF0aCBmcm9tIDptb2Q6YG9wdHBhcnNlYCB0byA6bW9kOmBhcmdwYXJzZWA6CisKKyogUmVwbGFjZSBhbGwgOm1ldGg6YG9wdHBhcnNlLk9wdGlvblBhcnNlci5hZGRfb3B0aW9uYCBjYWxscyB3aXRoCisgIDptZXRoOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgIGNhbGxzLgorCisqIFJlcGxhY2UgYGBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKWBgIHdpdGggYGBhcmdzID0KKyAgcGFyc2VyLnBhcnNlX2FyZ3MoKWBgIGFuZCBhZGQgYWRkaXRpb25hbCA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YAorICBjYWxscyBmb3IgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorCisqIFJlcGxhY2UgY2FsbGJhY2sgYWN0aW9ucyBhbmQgdGhlIGBgY2FsbGJhY2tfKmBgIGtleXdvcmQgYXJndW1lbnRzIHdpdGgKKyAgYGB0eXBlYGAgb3IgYGBhY3Rpb25gYCBhcmd1bWVudHMuCisKKyogUmVwbGFjZSBzdHJpbmcgbmFtZXMgZm9yIGBgdHlwZWBgIGtleXdvcmQgYXJndW1lbnRzIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcKKyAgdHlwZSBvYmplY3RzIChlLmcuIGludCwgZmxvYXQsIGNvbXBsZXgsIGV0YykuCisKKyogUmVwbGFjZSA6Y2xhc3M6YG9wdHBhcnNlLlZhbHVlc2Agd2l0aCA6Y2xhc3M6YE5hbWVzcGFjZWAgYW5kCisgIDpleGM6YG9wdHBhcnNlLk9wdGlvbkVycm9yYCBhbmQgOmV4Yzpgb3B0cGFyc2UuT3B0aW9uVmFsdWVFcnJvcmAgd2l0aAorICA6ZXhjOmBBcmd1bWVudEVycm9yYC4KKworKiBSZXBsYWNlIHN0cmluZ3Mgd2l0aCBpbXBsaWNpdCBhcmd1bWVudHMgc3VjaCBhcyBgYCVkZWZhdWx0YGAgb3IgYGAlcHJvZ2BgIHdpdGgKKyAgdGhlIHN0YW5kYXJkIFB5dGhvbiBzeW50YXggdG8gdXNlIGRpY3Rpb25hcmllcyB0byBmb3JtYXQgc3RyaW5ncywgdGhhdCBpcywKKyAgYGAlKGRlZmF1bHQpc2BgIGFuZCBgYCUocHJvZylzYGAuCisKKyogUmVwbGFjZSB0aGUgT3B0aW9uUGFyc2VyIGNvbnN0cnVjdG9yIGBgdmVyc2lvbmBgIGFyZ3VtZW50IHdpdGggYSBjYWxsIHRvCisgIGBgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nPHRoZSB2ZXJzaW9uPicpYGAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FycmF5LnJzdCBiL0RvYy9saWJyYXJ5L2FycmF5LnJzdAppbmRleCAzZmZjNjRkLi5kNTYzY2NlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hcnJheS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXJyYXkucnN0CkBAIC02MCw3ICs2MCw3IEBACiAgICBhcHByb3ByaWF0ZSB0eXBlLgogCiAgICBJZiBnaXZlbiBhIGxpc3Qgb3Igc3RyaW5nLCB0aGUgaW5pdGlhbGl6ZXIgaXMgcGFzc2VkIHRvIHRoZSBuZXcgYXJyYXkncwotICAgOm1ldGg6YGZyb21saXN0YCwgOm1ldGg6YGZyb21zdHJpbmdgLCBvciA6bWV0aDpgZnJvbXVuaWNvZGVgIG1ldGhvZCAoc2VlIGJlbG93KQorICAgOm1ldGg6YGZyb21saXN0YCwgOm1ldGg6YGZyb21ieXRlc2AsIG9yIDptZXRoOmBmcm9tdW5pY29kZWAgbWV0aG9kIChzZWUgYmVsb3cpCiAgICB0byBhZGQgaW5pdGlhbCBpdGVtcyB0byB0aGUgYXJyYXkuICBPdGhlcndpc2UsIHRoZSBpdGVyYWJsZSBpbml0aWFsaXplciBpcwogICAgcGFzc2VkIHRvIHRoZSA6bWV0aDpgZXh0ZW5kYCBtZXRob2QuCiAKQEAgLTk5LDcgKzk5LDcgQEAKICAgIG1lbW9yeSBidWZmZXIgaW4gYnl0ZXMgY2FuIGJlIGNvbXB1dGVkIGFzIGBgYXJyYXkuYnVmZmVyX2luZm8oKVsxXSAqCiAgICBhcnJheS5pdGVtc2l6ZWBgLiAgVGhpcyBpcyBvY2Nhc2lvbmFsbHkgdXNlZnVsIHdoZW4gd29ya2luZyB3aXRoIGxvdy1sZXZlbCAoYW5kCiAgICBpbmhlcmVudGx5IHVuc2FmZSkgSS9PIGludGVyZmFjZXMgdGhhdCByZXF1aXJlIG1lbW9yeSBhZGRyZXNzZXMsIHN1Y2ggYXMgY2VydGFpbgotICAgOmNmdW5jOmBpb2N0bGAgb3BlcmF0aW9ucy4gIFRoZSByZXR1cm5lZCBudW1iZXJzIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSBhcnJheQorICAgOmM6ZnVuYzpgaW9jdGxgIG9wZXJhdGlvbnMuICBUaGUgcmV0dXJuZWQgbnVtYmVycyBhcmUgdmFsaWQgYXMgbG9uZyBhcyB0aGUgYXJyYXkKICAgIGV4aXN0cyBhbmQgbm8gbGVuZ3RoLWNoYW5naW5nIG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQgdG8gaXQuCiAKICAgIC4uIG5vdGU6OgpAQCAtMTMyLDYgKzEzMiwxNSBAQAogICAgbXVzdCBiZSB0aGUgcmlnaHQgdHlwZSB0byBiZSBhcHBlbmRlZCB0byB0aGUgYXJyYXkuCiAKIAorLi4gbWV0aG9kOjogYXJyYXkuZnJvbWJ5dGVzKHMpCisKKyAgIEFwcGVuZHMgaXRlbXMgZnJvbSB0aGUgc3RyaW5nLCBpbnRlcnByZXRpbmcgdGhlIHN0cmluZyBhcyBhbiBhcnJheSBvZiBtYWNoaW5lCisgICB2YWx1ZXMgKGFzIGlmIGl0IGhhZCBiZWVuIHJlYWQgZnJvbSBhIGZpbGUgdXNpbmcgdGhlIDptZXRoOmBmcm9tZmlsZWAgbWV0aG9kKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICA6bWV0aDpgZnJvbXN0cmluZ2AgaXMgcmVuYW1lZCB0byA6bWV0aDpgZnJvbWJ5dGVzYCBmb3IgY2xhcml0eS4KKworCiAuLiBtZXRob2Q6OiBhcnJheS5mcm9tZmlsZShmLCBuKQogCiAgICBSZWFkICpuKiBpdGVtcyAoYXMgbWFjaGluZSB2YWx1ZXMpIGZyb20gdGhlIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmYqIGFuZCBhcHBlbmQKQEAgLTE0NywxNyArMTU2LDE2IEBACiAgICBhLmFwcGVuZCh4KWBgIGV4Y2VwdCB0aGF0IGlmIHRoZXJlIGlzIGEgdHlwZSBlcnJvciwgdGhlIGFycmF5IGlzIHVuY2hhbmdlZC4KIAogCi0uLiBtZXRob2Q6OiBhcnJheS5mcm9tc3RyaW5nKHMpCisuLiBtZXRob2Q6OiBhcnJheS5mcm9tc3RyaW5nKCkKIAotICAgQXBwZW5kcyBpdGVtcyBmcm9tIHRoZSBzdHJpbmcsIGludGVycHJldGluZyB0aGUgc3RyaW5nIGFzIGFuIGFycmF5IG9mIG1hY2hpbmUKLSAgIHZhbHVlcyAoYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgOm1ldGg6YGZyb21maWxlYCBtZXRob2QpLgorICAgRGVwcmVjYXRlZCBhbGlhcyBmb3IgOm1ldGg6YGZyb21ieXRlc2AuCiAKIAogLi4gbWV0aG9kOjogYXJyYXkuZnJvbXVuaWNvZGUocykKIAogICAgRXh0ZW5kcyB0aGlzIGFycmF5IHdpdGggZGF0YSBmcm9tIHRoZSBnaXZlbiB1bmljb2RlIHN0cmluZy4gIFRoZSBhcnJheSBtdXN0CiAgICBiZSBhIHR5cGUgYGAndSdgYCBhcnJheTsgb3RoZXJ3aXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLiAgVXNlCi0gICBgYGFycmF5LmZyb21zdHJpbmcodW5pY29kZXN0cmluZy5lbmNvZGUoZW5jKSlgYCB0byBhcHBlbmQgVW5pY29kZSBkYXRhIHRvIGFuCisgICBgYGFycmF5LmZyb21ieXRlcyh1bmljb2Rlc3RyaW5nLmVuY29kZShlbmMpKWBgIHRvIGFwcGVuZCBVbmljb2RlIGRhdGEgdG8gYW4KICAgIGFycmF5IG9mIHNvbWUgb3RoZXIgdHlwZS4KIAogCkBAIC0xOTAsNiArMTk4LDE2IEBACiAgICBSZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5LgogCiAKKy4uIG1ldGhvZDo6IGFycmF5LnRvYnl0ZXMoKQorCisgICBDb252ZXJ0IHRoZSBhcnJheSB0byBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcyBhbmQgcmV0dXJuIHRoZSBieXRlcworICAgcmVwcmVzZW50YXRpb24gKHRoZSBzYW1lIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUgd3JpdHRlbiB0byBhIGZpbGUgYnkKKyAgIHRoZSA6bWV0aDpgdG9maWxlYCBtZXRob2QuKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIDptZXRoOmB0b3N0cmluZ2AgaXMgcmVuYW1lZCB0byA6bWV0aDpgdG9ieXRlc2AgZm9yIGNsYXJpdHkuCisKKwogLi4gbWV0aG9kOjogYXJyYXkudG9maWxlKGYpCiAKICAgIFdyaXRlIGFsbCBpdGVtcyAoYXMgbWFjaGluZSB2YWx1ZXMpIHRvIHRoZSA6dGVybTpgZmlsZSBvYmplY3RgICpmKi4KQEAgLTIwMiwxNSArMjIwLDEzIEBACiAKIC4uIG1ldGhvZDo6IGFycmF5LnRvc3RyaW5nKCkKIAotICAgQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgc3RyaW5nCi0gICByZXByZXNlbnRhdGlvbiAodGhlIHNhbWUgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCB3b3VsZCBiZSB3cml0dGVuIHRvIGEgZmlsZSBieQotICAgdGhlIDptZXRoOmB0b2ZpbGVgIG1ldGhvZC4pCisgICBEZXByZWNhdGVkIGFsaWFzIGZvciA6bWV0aDpgdG9ieXRlc2AuCiAKIAogLi4gbWV0aG9kOjogYXJyYXkudG91bmljb2RlKCkKIAogICAgQ29udmVydCB0aGUgYXJyYXkgdG8gYSB1bmljb2RlIHN0cmluZy4gIFRoZSBhcnJheSBtdXN0IGJlIGEgdHlwZSBgYCd1J2BgIGFycmF5OwotICAgb3RoZXJ3aXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLiBVc2UgYGBhcnJheS50b3N0cmluZygpLmRlY29kZShlbmMpYGAgdG8KKyAgIG90aGVyd2lzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4gVXNlIGBgYXJyYXkudG9ieXRlcygpLmRlY29kZShlbmMpYGAgdG8KICAgIG9idGFpbiBhIHVuaWNvZGUgc3RyaW5nIGZyb20gYW4gYXJyYXkgb2Ygc29tZSBvdGhlciB0eXBlLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3QucnN0CmluZGV4IDA4ZWU3MTQuLmUyYzBiNmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN0LnJzdApAQCAtNyw2ICs3LDkgQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBNYXJ0aW4gdi4gTMO2d2lzIDxtYXJ0aW5Adi5sb2V3aXMuZGU+CiAuLiBzZWN0aW9uYXV0aG9yOjogR2VvcmcgQnJhbmRsIDxnZW9yZ0BweXRob24ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3QucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBhc3RgIG1vZHVsZSBoZWxwcyBQeXRob24gYXBwbGljYXRpb25zIHRvIHByb2Nlc3MgdHJlZXMgb2YgdGhlIFB5dGhvbgogYWJzdHJhY3Qgc3ludGF4IGdyYW1tYXIuICBUaGUgYWJzdHJhY3Qgc3ludGF4IGl0c2VsZiBtaWdodCBjaGFuZ2Ugd2l0aCBlYWNoCkBAIC0xMTcsMTIgKzEyMCwxNSBAQAogCiAgICBTYWZlbHkgZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBub2RlIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBQeXRob24KICAgIGV4cHJlc3Npb24uICBUaGUgc3RyaW5nIG9yIG5vZGUgcHJvdmlkZWQgbWF5IG9ubHkgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nCi0gICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywgYm9vbGVhbnMsCi0gICBhbmQgYGBOb25lYGAuCisgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywgZGljdHMsCisgICBzZXRzLCBib29sZWFucywgYW5kIGBgTm9uZWBgLgogCiAgICBUaGlzIGNhbiBiZSB1c2VkIGZvciBzYWZlbHkgZXZhbHVhdGluZyBzdHJpbmdzIGNvbnRhaW5pbmcgUHl0aG9uIGV4cHJlc3Npb25zCiAgICBmcm9tIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgdGhlIG5lZWQgdG8gcGFyc2UgdGhlIHZhbHVlcyBvbmVzZWxmLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgTm93IGFsbG93cyBieXRlcyBhbmQgc2V0IGxpdGVyYWxzLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2RvY3N0cmluZyhub2RlLCBjbGVhbj1UcnVlKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKaW5kZXggM2I4ZWIxMi4uNzViM2NkYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IFNhbSBSdXNoaW5nIDxydXNoaW5nQG5pZ2h0bWFyZS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogU3RldmUgSG9sZGVuIDxzaG9sZGVuQGhvbGRlbndlYi5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2FzeW5jaGF0LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIDptb2Q6YGFzeW5jb3JlYCBpbmZyYXN0cnVjdHVyZSwgc2ltcGxpZnlpbmcKIGFzeW5jaHJvbm91cyBjbGllbnRzIGFuZCBzZXJ2ZXJzIGFuZCBtYWtpbmcgaXQgZWFzaWVyIHRvIGhhbmRsZSBwcm90b2NvbHMKQEAgLTMxLDcgKzM0LDcgQEAKIAogICAgTGlrZSA6Y2xhc3M6YGFzeW5jb3JlLmRpc3BhdGNoZXJgLCA6Y2xhc3M6YGFzeW5jX2NoYXRgIGRlZmluZXMgYSBzZXQgb2YKICAgIGV2ZW50cyB0aGF0IGFyZSBnZW5lcmF0ZWQgYnkgYW4gYW5hbHlzaXMgb2Ygc29ja2V0IGNvbmRpdGlvbnMgYWZ0ZXIgYQotICAgOmNmdW5jOmBzZWxlY3RgIGNhbGwuIE9uY2UgdGhlIHBvbGxpbmcgbG9vcCBoYXMgYmVlbiBzdGFydGVkIHRoZQorICAgOmM6ZnVuYzpgc2VsZWN0YCBjYWxsLiBPbmNlIHRoZSBwb2xsaW5nIGxvb3AgaGFzIGJlZW4gc3RhcnRlZCB0aGUKICAgIDpjbGFzczpgYXN5bmNfY2hhdGAgb2JqZWN0J3MgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHRoZSBldmVudC1wcm9jZXNzaW5nCiAgICBmcmFtZXdvcmsgd2l0aCBubyBhY3Rpb24gb24gdGhlIHBhcnQgb2YgdGhlIHByb2dyYW1tZXIuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdAppbmRleCBiNmZlMmJiLi41Zjk1ZDQxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CkBAIC05LDYgKzksOSBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZXZlIEhvbGRlbiA8c2hvbGRlbkBob2xkZW53ZWIuY29tPgogLi4gaGVhdmlseSBhZGFwdGVkIGZyb20gb3JpZ2luYWwgZG9jdW1lbnRhdGlvbiBieSBTYW0gUnVzaGluZwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3luY29yZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGJhc2ljIGluZnJhc3RydWN0dXJlIGZvciB3cml0aW5nIGFzeW5jaHJvbm91cyAgc29ja2V0CiBzZXJ2aWNlIGNsaWVudHMgYW5kIHNlcnZlcnMuCkBAIC0yMiw3ICsyNSw3IEBACiBhcmUgcHJvYmFibHkgd2hhdCB5b3UgcmVhbGx5IG5lZWQuICBOZXR3b3JrIHNlcnZlcnMgYXJlIHJhcmVseSBwcm9jZXNzb3IKIGJvdW5kLCBob3dldmVyLgogCi1JZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydHMgdGhlIDpjZnVuYzpgc2VsZWN0YCBzeXN0ZW0gY2FsbCBpbiBpdHMgSS9PCitJZiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydHMgdGhlIDpjOmZ1bmM6YHNlbGVjdGAgc3lzdGVtIGNhbGwgaW4gaXRzIEkvTwogbGlicmFyeSAoYW5kIG5lYXJseSBhbGwgZG8pLCB0aGVuIHlvdSBjYW4gdXNlIGl0IHRvIGp1Z2dsZSBtdWx0aXBsZQogY29tbXVuaWNhdGlvbiBjaGFubmVscyBhdCBvbmNlOyBkb2luZyBvdGhlciB3b3JrIHdoaWxlIHlvdXIgSS9PIGlzIHRha2luZwogcGxhY2UgaW4gdGhlICJiYWNrZ3JvdW5kLiIgIEFsdGhvdWdoIHRoaXMgc3RyYXRlZ3kgY2FuIHNlZW0gc3RyYW5nZSBhbmQKQEAgLTg2LDE0ICs4OSwxNCBAQAogICAgfCBgYGhhbmRsZV9jbG9zZSgpYGAgICB8IEltcGxpZWQgYnkgYSByZWFkIGV2ZW50IHdpdGggbm8gZGF0YSAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCBhdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYGhhbmRsZV9hY2NlcHQoKWBgICB8IEltcGxpZWQgYnkgYSByZWFkIGV2ZW50IG9uIGEgbGlzdGVuaW5nIHwKKyAgIHwgYGBoYW5kbGVfYWNjZXB0ZWQoKWBgfCBJbXBsaWVkIGJ5IGEgcmVhZCBldmVudCBvbiBhIGxpc3RlbmluZyB8CiAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogICAgRHVyaW5nIGFzeW5jaHJvbm91cyBwcm9jZXNzaW5nLCBlYWNoIG1hcHBlZCBjaGFubmVsJ3MgOm1ldGg6YHJlYWRhYmxlYCBhbmQKICAgIDptZXRoOmB3cml0YWJsZWAgbWV0aG9kcyBhcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY2hhbm5lbCdzIHNvY2tldAotICAgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBsaXN0IG9mIGNoYW5uZWxzIDpjZnVuYzpgc2VsZWN0YFwgZWQgb3IKLSAgIDpjZnVuYzpgcG9sbGBcIGVkIGZvciByZWFkIGFuZCB3cml0ZSBldmVudHMuCisgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY2hhbm5lbHMgOmM6ZnVuYzpgc2VsZWN0YFwgZWQgb3IKKyAgIDpjOmZ1bmM6YHBvbGxgXCBlZCBmb3IgcmVhZCBhbmQgd3JpdGUgZXZlbnRzLgogCiAgICBUaHVzLCB0aGUgc2V0IG9mIGNoYW5uZWwgZXZlbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBiYXNpYyBzb2NrZXQgZXZlbnRzLiAgVGhlCiAgICBmdWxsIHNldCBvZiBtZXRob2RzIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gaW4geW91ciBzdWJjbGFzcyBmb2xsb3dzOgpAQCAtMTQ0LDcgKzE0NywyMSBAQAogCiAgICAgICBDYWxsZWQgb24gbGlzdGVuaW5nIGNoYW5uZWxzIChwYXNzaXZlIG9wZW5lcnMpIHdoZW4gYSBjb25uZWN0aW9uIGNhbiBiZQogICAgICAgZXN0YWJsaXNoZWQgd2l0aCBhIG5ldyByZW1vdGUgZW5kcG9pbnQgdGhhdCBoYXMgaXNzdWVkIGEgOm1ldGg6YGNvbm5lY3RgCi0gICAgICBjYWxsIGZvciB0aGUgbG9jYWwgZW5kcG9pbnQuCisgICAgICBjYWxsIGZvciB0aGUgbG9jYWwgZW5kcG9pbnQuIERlcHJlY2F0ZWQgaW4gdmVyc2lvbiAzLjI7IHVzZQorICAgICAgOm1ldGg6YGhhbmRsZV9hY2NlcHRlZGAgaW5zdGVhZC4KKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorCisKKyAgIC4uIG1ldGhvZDo6IGhhbmRsZV9hY2NlcHRlZChzb2NrLCBhZGRyKQorCisgICAgICBDYWxsZWQgb24gbGlzdGVuaW5nIGNoYW5uZWxzIChwYXNzaXZlIG9wZW5lcnMpIHdoZW4gYSBjb25uZWN0aW9uIGhhcyBiZWVuCisgICAgICBlc3RhYmxpc2hlZCB3aXRoIGEgbmV3IHJlbW90ZSBlbmRwb2ludCB0aGF0IGhhcyBpc3N1ZWQgYSA6bWV0aDpgY29ubmVjdGAKKyAgICAgIGNhbGwgZm9yIHRoZSBsb2NhbCBlbmRwb2ludC4gICpjb25uKiBpcyBhICpuZXcqIHNvY2tldCBvYmplY3QgdXNhYmxlIHRvCisgICAgICBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sIGFuZCAqYWRkcmVzcyogaXMgdGhlIGFkZHJlc3MKKyAgICAgIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAogICAgLi4gbWV0aG9kOjogcmVhZGFibGUoKQpAQCAtMjAxLDcgKzIxOCw4IEBACiAgICAuLiBtZXRob2Q6OiBiaW5kKGFkZHJlc3MpCiAKICAgICAgIEJpbmQgdGhlIHNvY2tldCB0byAqYWRkcmVzcyouICBUaGUgc29ja2V0IG11c3Qgbm90IGFscmVhZHkgYmUgYm91bmQuICAoVGhlCi0gICAgICBmb3JtYXQgb2YgKmFkZHJlc3MqIGRlcGVuZHMgb24gdGhlIGFkZHJlc3MgZmFtaWx5IC0tLSBzZWUgYWJvdmUuKSAgVG8gbWFyaworICAgICAgZm9ybWF0IG9mICphZGRyZXNzKiBkZXBlbmRzIG9uIHRoZSBhZGRyZXNzIGZhbWlseSAtLS0gcmVmZXIgdG8gdGhlCisgICAgICA6bW9kOmBzb2NrZXRgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uKSAgVG8gbWFyawogICAgICAgdGhlIHNvY2tldCBhcyByZS11c2FibGUgKHNldHRpbmcgdGhlIDpjb25zdDpgU09fUkVVU0VBRERSYCBvcHRpb24pLCBjYWxsCiAgICAgICB0aGUgOmNsYXNzOmBkaXNwYXRjaGVyYCBvYmplY3QncyA6bWV0aDpgc2V0X3JldXNlX2FkZHJgIG1ldGhvZC4KIApAQCAtMjI1LDYgKzI0Myw3IEBACiAgICAgICBmbHVzaGVkKS4gIFNvY2tldHMgYXJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhleSBhcmUKICAgICAgIGdhcmJhZ2UtY29sbGVjdGVkLgogCisKIC4uIGNsYXNzOjogZGlzcGF0Y2hlcl93aXRoX3NlbmQoKQogCiAgICBBIDpjbGFzczpgZGlzcGF0Y2hlcmAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBzaW1wbGUgYnVmZmVyZWQgb3V0cHV0IGNhcGFiaWxpdHksCkBAIC0yMzQsOSArMjUzLDkgQEAKIC4uIGNsYXNzOjogZmlsZV9kaXNwYXRjaGVyKCkKIAogICAgQSBmaWxlX2Rpc3BhdGNoZXIgdGFrZXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgOnRlcm06YGZpbGUgb2JqZWN0YCBhbG9uZwotICAgd2l0aCBhbiBvcHRpb25hbCBtYXAgYXJndW1lbnQgYW5kIHdyYXBzIGl0IGZvciB1c2Ugd2l0aCB0aGUgOmNmdW5jOmBwb2xsYAotICAgb3IgOmNmdW5jOmBsb29wYCBmdW5jdGlvbnMuICBJZiBwcm92aWRlZCBhIGZpbGUgb2JqZWN0IG9yIGFueXRoaW5nIHdpdGggYQotICAgOmNmdW5jOmBmaWxlbm9gIG1ldGhvZCwgdGhhdCBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHBhc3NlZCB0byB0aGUKKyAgIHdpdGggYW4gb3B0aW9uYWwgbWFwIGFyZ3VtZW50IGFuZCB3cmFwcyBpdCBmb3IgdXNlIHdpdGggdGhlIDpjOmZ1bmM6YHBvbGxgCisgICBvciA6YzpmdW5jOmBsb29wYCBmdW5jdGlvbnMuICBJZiBwcm92aWRlZCBhIGZpbGUgb2JqZWN0IG9yIGFueXRoaW5nIHdpdGggYQorICAgOmM6ZnVuYzpgZmlsZW5vYCBtZXRob2QsIHRoYXQgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGFuZCBwYXNzZWQgdG8gdGhlCiAgICA6Y2xhc3M6YGZpbGVfd3JhcHBlcmAgY29uc3RydWN0b3IuICBBdmFpbGFiaWxpdHk6IFVOSVguCiAKIC4uIGNsYXNzOjogZmlsZV93cmFwcGVyKCkKQEAgLTI4MywxNSArMzAyLDE1IEBACiAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXJbc2VudDpdCiAKIAotICAgY2xpZW50ID0gSFRUUENsaWVudCgnd3d3LnB5dGhvbi5vcmcnLCAnLycpCi0gICBhc3luY29yZS5sb29wKCkKKyAgICBjbGllbnQgPSBIVFRQQ2xpZW50KCd3d3cucHl0aG9uLm9yZycsICcvJykKKyAgICBhc3luY29yZS5sb29wKCkKIAogLi4gX2FzeW5jb3JlLWV4YW1wbGUtMjoKIAogYXN5bmNvcmUgRXhhbXBsZSBiYXNpYyBlY2hvIHNlcnZlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1IZXJlIGlzIGFiYXNpYyBlY2hvIHNlcnZlciB0aGF0IHVzZXMgdGhlIDpjbGFzczpgZGlzcGF0Y2hlcmAgY2xhc3MgdG8gYWNjZXB0CitIZXJlIGlzIGEgYmFzaWMgZWNobyBzZXJ2ZXIgdGhhdCB1c2VzIHRoZSA6Y2xhc3M6YGRpc3BhdGNoZXJgIGNsYXNzIHRvIGFjY2VwdAogY29ubmVjdGlvbnMgYW5kIGRpc3BhdGNoZXMgdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHRvIGEgaGFuZGxlcjo6CiAKICAgICBpbXBvcnQgYXN5bmNvcmUKQEAgLTMwMSw3ICszMjAsOCBAQAogCiAgICAgICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3YoODE5MikKLSAgICAgICAgICAgIHNlbGYuc2VuZChkYXRhKQorICAgICAgICAgICAgaWYgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmQoZGF0YSkKIAogICAgIGNsYXNzIEVjaG9TZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CiAKQEAgLTMxMiwxNCArMzMyLDkgQEAKICAgICAgICAgICAgIHNlbGYuYmluZCgoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQogCi0gICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgotICAgICAgICAgICAgcGFpciA9IHNlbGYuYWNjZXB0KCkKLSAgICAgICAgICAgIGlmIHBhaXIgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc29jaywgYWRkciA9IHBhaXIKLSAgICAgICAgICAgICAgICBwcmludCgnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkcikpCi0gICAgICAgICAgICAgICAgaGFuZGxlciA9IEVjaG9IYW5kbGVyKHNvY2spCisgICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgc29jaywgYWRkcik6CisgICAgICAgICAgICBwcmludCgnSW5jb21pbmcgY29ubmVjdGlvbiBmcm9tICVzJyAlIHJlcHIoYWRkcikpCisgICAgICAgICAgICBoYW5kbGVyID0gRWNob0hhbmRsZXIoc29jaykKIAogICAgIHNlcnZlciA9IEVjaG9TZXJ2ZXIoJ2xvY2FsaG9zdCcsIDgwODApCiAgICAgYXN5bmNvcmUubG9vcCgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hdGV4aXQucnN0IGIvRG9jL2xpYnJhcnkvYXRleGl0LnJzdAppbmRleCAxMDRjNzMwLi5jYzEwNTFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hdGV4aXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2F0ZXhpdC5yc3QKQEAgLTk4LDMgKzk4LDQgQEAKIAogVGhpcyBvYnZpb3VzbHkgb25seSB3b3JrcyB3aXRoIGZ1bmN0aW9ucyB0aGF0IGRvbid0IHRha2UgYXJndW1lbnRzLgogCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QgYi9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CmluZGV4IGMxMGE3NGEuLjI0MDFhZTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdApAQCAtMzcsNyArMzcsNyBAQAogICAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAKIAotLi4gZnVuY3Rpb246OiBiNjRkZWNvZGUocywgYWx0Y2hhcnM9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogYjY0ZGVjb2RlKHMsIGFsdGNoYXJzPU5vbmUsIHZhbGlkYXRlPUZhbHNlKQogCiAgICBEZWNvZGUgYSBCYXNlNjQgZW5jb2RlZCBieXRlIHN0cmluZy4KIApAQCAtNDUsOSArNDUsMTMgQEAKICAgIGF0IGxlYXN0IGxlbmd0aCAyIChhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYXJlIGlnbm9yZWQpIHdoaWNoIHNwZWNpZmllcyB0aGUKICAgIGFsdGVybmF0aXZlIGFscGhhYmV0IHVzZWQgaW5zdGVhZCBvZiB0aGUgYGArYGAgYW5kIGBgL2BgIGNoYXJhY3RlcnMuCiAKLSAgIFRoZSBkZWNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLiAgQSA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZCBpZiAqcyogd2VyZQotICAgaW5jb3JyZWN0bHkgcGFkZGVkIG9yIGlmIHRoZXJlIGFyZSBub24tYWxwaGFiZXQgY2hhcmFjdGVycyBwcmVzZW50IGluIHRoZQotICAgc3RyaW5nLgorICAgVGhlIGRlY29kZWQgc3RyaW5nIGlzIHJldHVybmVkLiAgQSBgYmluYXNjaWkuRXJyb3JgIGlzIHJhaXNlZCBpZiAqcyogaXMKKyAgIGluY29ycmVjdGx5IHBhZGRlZC4KKworICAgSWYgKnZhbGlkYXRlKiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSwgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGFyZQorICAgZGlzY2FyZGVkIHByaW9yIHRvIHRoZSBwYWRkaW5nIGNoZWNrLiAgSWYgKnZhbGlkYXRlKiBpcyBgYFRydWVgYCwKKyAgIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpbiB0aGUgaW5wdXQgcmVzdWx0IGluIGEKKyAgIDpleGM6YGJpbmFzY2lpLkVycm9yYC4KIAogCiAuLiBmdW5jdGlvbjo6IHN0YW5kYXJkX2I2NGVuY29kZShzKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmRiLnJzdCBiL0RvYy9saWJyYXJ5L2JkYi5yc3QKaW5kZXggNDc5NWVjOS4uMDczNzYwMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iZGIucnN0CkBAIC00LDYgKzQsMTAgQEAKIC4uIG1vZHVsZTo6IGJkYgogICAgOnN5bm9wc2lzOiBEZWJ1Z2dlciBmcmFtZXdvcmsuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2JkYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGJkYmAgbW9kdWxlIGhhbmRsZXMgYmFzaWMgZGVidWdnZXIgZnVuY3Rpb25zLCBsaWtlIHNldHRpbmcgYnJlYWtwb2ludHMKIG9yIG1hbmFnaW5nIGV4ZWN1dGlvbiB2aWEgdGhlIGRlYnVnZ2VyLgogCkBAIC01MCw5ICs1NCwxMCBAQAogICAgICAgTWFyayB0aGUgYnJlYWtwb2ludCBhcyBkaXNhYmxlZC4KIAogCi0gICAuLiBtZXRob2Q6OiBicHByaW50KG91dD1Ob25lKQorICAgLi4gbWV0aG9kOjogYnBmb3JtYXQoKQogCi0gICAgICBQcmludCBhbGwgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBicmVha3BvaW50OgorICAgICAgUmV0dXJuIGEgc3RyaW5nIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYnJlYWtwb2ludCwgbmljZWx5CisgICAgICBmb3JtYXR0ZWQ6CiAKICAgICAgICogVGhlIGJyZWFrcG9pbnQgbnVtYmVyLgogICAgICAgKiBJZiBpdCBpcyB0ZW1wb3Jhcnkgb3Igbm90LgpAQCAtNjEsNiArNjYsMTMgQEAKICAgICAgICogSWYgaXQgbXVzdCBiZSBpZ25vcmVkIHRoZSBuZXh0IE4gdGltZXMuCiAgICAgICAqIFRoZSBicmVha3BvaW50IGhpdCBjb3VudC4KIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKyAgIC4uIG1ldGhvZDo6IGJwcHJpbnQob3V0PU5vbmUpCisKKyAgICAgIFByaW50IHRoZSBvdXRwdXQgb2YgOm1ldGg6YGJwZm9ybWF0YCB0byB0aGUgZmlsZSAqb3V0Kiwgb3IgaWYgaXQgaXMKKyAgICAgIGBgTm9uZWBgLCB0byBzdGFuZGFyZCBvdXRwdXQuCisKIAogLi4gY2xhc3M6OiBCZGIoc2tpcD1Ob25lKQogCkBAIC0yNjcsNiArMjc5LDE1IEBACiAKICAgICAgIERlbGV0ZSBhbGwgZXhpc3RpbmcgYnJlYWtwb2ludHMuCiAKKyAgIC4uIG1ldGhvZDo6IGdldF9icGJ5bnVtYmVyKGFyZykKKworICAgICAgUmV0dXJuIGEgYnJlYWtwb2ludCBzcGVjaWZpZWQgYnkgdGhlIGdpdmVuIG51bWJlci4gIElmICphcmcqIGlzIGEgc3RyaW5nLAorICAgICAgaXQgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIuICBJZiAqYXJnKiBpcyBhIG5vbi1udW1lcmljIHN0cmluZywgaWYKKyAgICAgIHRoZSBnaXZlbiBicmVha3BvaW50IG5ldmVyIGV4aXN0ZWQgb3IgaGFzIGJlZW4gZGVsZXRlZCwgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogICAgLi4gbWV0aG9kOjogZ2V0X2JyZWFrKGZpbGVuYW1lLCBsaW5lbm8pCiAKICAgICAgIENoZWNrIGlmIHRoZXJlIGlzIGEgYnJlYWtwb2ludCBmb3IgKmxpbmVubyogb2YgKmZpbGVuYW1lKi4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdCBiL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdAppbmRleCAyZjc4NTFhLi4yYWEzNzAyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iaW5hc2NpaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmluYXNjaWkucnN0CkBAIC0xOCw2ICsxOCwxMSBAQAogbG93LWxldmVsIGZ1bmN0aW9ucyB3cml0dGVuIGluIEMgZm9yIGdyZWF0ZXIgc3BlZWQgdGhhdCBhcmUgdXNlZCBieSB0aGUKIGhpZ2hlci1sZXZlbCBtb2R1bGVzLgogCisuLiBub3RlOjoKKworICAgRW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBkbyBub3QgYWNjZXB0IFVuaWNvZGUgc3RyaW5ncy4gIE9ubHkgYnl0ZXN0cmluZworICAgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGNhbiBiZSBwcm9jZXNzZWQuCisKIFRoZSA6bW9kOmBiaW5hc2NpaWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApAQCAtNTQsNiArNTksOSBAQAogICAgZGF0YS4gTW9yZSB0aGFuIG9uZSBsaW5lIG1heSBiZSBwYXNzZWQgYXQgYSB0aW1lLiBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQKICAgICpoZWFkZXIqIGlzIHByZXNlbnQgYW5kIHRydWUsIHVuZGVyc2NvcmVzIHdpbGwgYmUgZGVjb2RlZCBhcyBzcGFjZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBY2NlcHQgb25seSBieXRlc3RyaW5nIG9yIGJ5dGVhcnJheSBvYmplY3RzIGFzIGlucHV0LgorCiAKIC4uIGZ1bmN0aW9uOjogYjJhX3FwKGRhdGEsIHF1b3RldGFicz1GYWxzZSwgaXN0ZXh0PVRydWUsIGhlYWRlcj1GYWxzZSkKIApAQCAtODMsNiArOTEsOSBAQAogICAgZGVjb21wcmVzc2VkIGRhdGEsIHVubGVzcyBkYXRhIGlucHV0IGRhdGEgZW5kcyBpbiBhbiBvcnBoYW5lZCByZXBlYXQgaW5kaWNhdG9yLAogICAgaW4gd2hpY2ggY2FzZSB0aGUgOmV4YzpgSW5jb21wbGV0ZWAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIEFjY2VwdCBvbmx5IGJ5dGVzdHJpbmcgb3IgYnl0ZWFycmF5IG9iamVjdHMgYXMgaW5wdXQuCisKIAogLi4gZnVuY3Rpb246OiBybGVjb2RlX2hxeChkYXRhKQogCkBAIC0xMzksNiArMTUwLDkgQEAKICAgIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAod2hpY2ggY2FuIGJlIHVwcGVyIG9yIGxvd2VyIGNhc2UpLCBvdGhlcndpc2UgYQogICAgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBY2NlcHQgb25seSBieXRlc3RyaW5nIG9yIGJ5dGVhcnJheSBvYmplY3RzIGFzIGlucHV0LgorCiAKIC4uIGV4Y2VwdGlvbjo6IEVycm9yCiAKQEAgLTE2NCw0ICsxNzgsMyBAQAogCiAgICBNb2R1bGUgOm1vZDpgcXVvcHJpYAogICAgICAgU3VwcG9ydCBmb3IgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZyB1c2VkIGluIE1JTUUgZW1haWwgbWVzc2FnZXMuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QgYi9Eb2MvbGlicmFyeS9iaXNlY3QucnN0CmluZGV4IGViMjMxNTkuLjEzYjAxNDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Jpc2VjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYmlzZWN0LnJzdApAQCAtNyw2ICs3LDEwIEBACiAuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgogLi4gZXhhbXBsZSBiYXNlZCBvbiB0aGUgUHlNb2R1bGVzIEZBUSBlbnRyeSBieSBBYXJvbiBXYXR0ZXJzIDxhcndAcHl0aG9ucHJvcy5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Jpc2VjdC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgc3VwcG9ydCBmb3IgbWFpbnRhaW5pbmcgYSBsaXN0IGluIHNvcnRlZCBvcmRlciB3aXRob3V0CiBoYXZpbmcgdG8gc29ydCB0aGUgbGlzdCBhZnRlciBlYWNoIGluc2VydGlvbi4gIEZvciBsb25nIGxpc3RzIG9mIGl0ZW1zIHdpdGgKIGV4cGVuc2l2ZSBjb21wYXJpc29uIG9wZXJhdGlvbnMsIHRoaXMgY2FuIGJlIGFuIGltcHJvdmVtZW50IG92ZXIgdGhlIG1vcmUgY29tbW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9idWlsdGlucy5yc3QgYi9Eb2MvbGlicmFyeS9idWlsdGlucy5yc3QKaW5kZXggZjBkMmE2MC4uYzQ5NTcyOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYnVpbHRpbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2J1aWx0aW5zLnJzdApAQCAtNyw3ICs3LDcgQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgZGlyZWN0IGFjY2VzcyB0byBhbGwgJ2J1aWx0LWluJyBpZGVudGlmaWVycyBvZiBQeXRob247IGZvcgogZXhhbXBsZSwgYGBidWlsdGlucy5vcGVuYGAgaXMgdGhlIGZ1bGwgbmFtZSBmb3IgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCi06ZnVuYzpgb3BlbmAuICBTZWUgY2hhcHRlciA6cmVmOmBidWlsdGluYC4KKzpmdW5jOmBvcGVuYC4KIAogVGhpcyBtb2R1bGUgaXMgbm90IG5vcm1hbGx5IGFjY2Vzc2VkIGV4cGxpY2l0bHkgYnkgbW9zdCBhcHBsaWNhdGlvbnMsIGJ1dCBjYW4gYmUKIHVzZWZ1bCBpbiBtb2R1bGVzIHRoYXQgcHJvdmlkZSBvYmplY3RzIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIGJ1aWx0LWluIHZhbHVlLApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0IGIvRG9jL2xpYnJhcnkvY2FsZW5kYXIucnN0CmluZGV4IGM4ZGFjNDkuLmY0OTUyNzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NhbGVuZGFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jYWxlbmRhci5yc3QKQEAgLTYsNiArNiw5IEBACiAgICAgICAgICAgICAgIG9mIHRoZSBVbml4IGNhbCBwcm9ncmFtLgogLi4gc2VjdGlvbmF1dGhvcjo6IERyZXcgQ3NpbGxhZyA8ZHJld19jc2lsbGFnQGdlb2NpdGllcy5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NhbGVuZGFyLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBhbGxvd3MgeW91IHRvIG91dHB1dCBjYWxlbmRhcnMgbGlrZSB0aGUgVW5peCA6cHJvZ3JhbTpgY2FsYCBwcm9ncmFtLAogYW5kIHByb3ZpZGVzIGFkZGl0aW9uYWwgdXNlZnVsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjYWxlbmRhci4gQnkgZGVmYXVsdCwKQEAgLTE2LDcgKzE5LDcgQEAKIGZ1bmN0aW9uYWxpdHksIHNlZSBhbHNvIHRoZSA6bW9kOmBkYXRldGltZWAgYW5kIDptb2Q6YHRpbWVgIG1vZHVsZXMuCiAKIE1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIHJlbHkgb24gdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgd2hpY2gKLXVzZXMgYW4gaWRlYWxpemVkIGNhbGVuZGFyLCB0aGUgY3VycmVudCBHcmVnb3JpYW4gY2FsZW5kYXIgaW5kZWZpbml0ZWx5IGV4dGVuZGVkCit1c2VzIGFuIGlkZWFsaXplZCBjYWxlbmRhciwgdGhlIGN1cnJlbnQgR3JlZ29yaWFuIGNhbGVuZGFyIGV4dGVuZGVkCiBpbiBib3RoIGRpcmVjdGlvbnMuICBUaGlzIG1hdGNoZXMgdGhlIGRlZmluaXRpb24gb2YgdGhlICJwcm9sZXB0aWMgR3JlZ29yaWFuIgogY2FsZW5kYXIgaW4gRGVyc2hvd2l0eiBhbmQgUmVpbmdvbGQncyBib29rICJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnMiLCB3aGVyZQogaXQncyB0aGUgYmFzZSBjYWxlbmRhciBmb3IgYWxsIGNvbXB1dGF0aW9ucy4KQEAgLTMwOSw0ICszMTIsMyBAQAogCiAgICBNb2R1bGUgOm1vZDpgdGltZWAKICAgICAgIExvdy1sZXZlbCB0aW1lIHJlbGF0ZWQgZnVuY3Rpb25zLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jZ2kucnN0IGIvRG9jL2xpYnJhcnkvY2dpLnJzdAppbmRleCA3MzQwMzFkLi4xZTI0OThkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jZ2kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKQEAgLTEzLDYgKzEzLDEwIEBACiAgICBzaW5nbGU6IFVSTAogICAgc2luZ2xlOiBDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY2dpLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBTdXBwb3J0IG1vZHVsZSBmb3IgQ29tbW9uIEdhdGV3YXkgSW50ZXJmYWNlIChDR0kpIHNjcmlwdHMuCiAKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBudW1iZXIgb2YgdXRpbGl0aWVzIGZvciB1c2UgYnkgQ0dJIHNjcmlwdHMgd3JpdHRlbiBpbgpAQCAtMzI0LDE1ICszMjgsMTMgQEAKICAgIENvbnZlcnQgdGhlIGNoYXJhY3RlcnMgYGAnJidgYCwgYGAnPCdgYCBhbmQgYGAnPidgYCBpbiBzdHJpbmcgKnMqIHRvIEhUTUwtc2FmZQogICAgc2VxdWVuY2VzLiAgVXNlIHRoaXMgaWYgeW91IG5lZWQgdG8gZGlzcGxheSB0ZXh0IHRoYXQgbWlnaHQgY29udGFpbiBzdWNoCiAgICBjaGFyYWN0ZXJzIGluIEhUTUwuICBJZiB0aGUgb3B0aW9uYWwgZmxhZyAqcXVvdGUqIGlzIHRydWUsIHRoZSBxdW90YXRpb24gbWFyawotICAgY2hhcmFjdGVyIChgYCciJ2BgKSBpcyBhbHNvIHRyYW5zbGF0ZWQ7IHRoaXMgaGVscHMgZm9yIGluY2x1c2lvbiBpbiBhbiBIVE1MCi0gICBhdHRyaWJ1dGUgdmFsdWUsIGFzIGluIGBgPEEgSFJFRj0iLi4uIj5gYC4gIElmIHRoZSB2YWx1ZSB0byBiZSBxdW90ZWQgbWlnaHQKLSAgIGluY2x1ZGUgc2luZ2xlLSBvciBkb3VibGUtcXVvdGUgY2hhcmFjdGVycywgb3IgYm90aCwgY29uc2lkZXIgdXNpbmcgdGhlCi0gICA6ZnVuYzpgfnhtbC5zYXguc2F4dXRpbHMucXVvdGVhdHRyYCBmdW5jdGlvbiBpbiB0aGUgOm1vZDpgeG1sLnNheC5zYXh1dGlsc2AKLSAgIG1vZHVsZSBpbnN0ZWFkLgorICAgY2hhcmFjdGVyIChgYCJgYCkgaXMgYWxzbyB0cmFuc2xhdGVkOyB0aGlzIGhlbHBzIGZvciBpbmNsdXNpb24gaW4gYW4gSFRNTAorICAgYXR0cmlidXRlIHZhbHVlIGRlbGltaXRlZCBieSBkb3VibGUgcXVvdGVzLCBhcyBpbiBgYDxhIGhyZWY9Ii4uLiI+YGAuICBOb3RlCisgICB0aGF0IHNpbmdsZSBxdW90ZXMgYXJlIG5ldmVyIHRyYW5zbGF0ZWQuCiAKLSAgIElmIHRoZSB2YWx1ZSB0byBiZSBxdW90ZWQgbWlnaHQgaW5jbHVkZSBzaW5nbGUtIG9yIGRvdWJsZS1xdW90ZSBjaGFyYWN0ZXJzLAotICAgb3IgYm90aCwgY29uc2lkZXIgdXNpbmcgdGhlIDpmdW5jOmBxdW90ZWF0dHJgIGZ1bmN0aW9uIGluIHRoZQotICAgOm1vZDpgeG1sLnNheC5zYXh1dGlsc2AgbW9kdWxlIGluc3RlYWQuCisgICAuLiBkZXByZWNhdGVkOjogMy4yCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVuc2FmZSBiZWNhdXNlICpxdW90ZSogaXMgZmFsc2UgYnkgZGVmYXVsdCwgYW5kIHRoZXJlZm9yZQorICAgICAgZGVwcmVjYXRlZC4gIFVzZSA6ZnVuYzpgaHRtbC5lc2NhcGVgIGluc3RlYWQuCiAKIAogLi4gX2NnaS1zZWN1cml0eToKQEAgLTUxMCw4ICs1MTIsOCBAQAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAotLi4gWyNdIE5vdGUgdGhhdCBzb21lIHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGRvIHN0YXRlIHdoYXQgb3JkZXIgdGhlCi0gICBmaWVsZCB2YWx1ZXMgc2hvdWxkIGJlIHN1cHBsaWVkIGluLCBidXQga25vd2luZyB3aGV0aGVyIGEgcmVxdWVzdCB3YXMKLSAgIHJlY2VpdmVkIGZyb20gYSBjb25mb3JtaW5nIGJyb3dzZXIsIG9yIGV2ZW4gZnJvbSBhIGJyb3dzZXIgYXQgYWxsLCBpcyB0ZWRpb3VzCi0gICBhbmQgZXJyb3ItcHJvbmUuCisuLiBbI10gTm90ZSB0aGF0IHNvbWUgcmVjZW50IHZlcnNpb25zIG9mIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZG8gc3RhdGUgd2hhdAorICAgb3JkZXIgdGhlIGZpZWxkIHZhbHVlcyBzaG91bGQgYmUgc3VwcGxpZWQgaW4sIGJ1dCBrbm93aW5nIHdoZXRoZXIgYSByZXF1ZXN0CisgICB3YXMgcmVjZWl2ZWQgZnJvbSBhIGNvbmZvcm1pbmcgYnJvd3Nlciwgb3IgZXZlbiBmcm9tIGEgYnJvd3NlciBhdCBhbGwsIGlzCisgICB0ZWRpb3VzIGFuZCBlcnJvci1wcm9uZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY21hdGgucnN0IGIvRG9jL2xpYnJhcnkvY21hdGgucnN0CmluZGV4IDE0YjkwOWIuLmQ3Nzc4ZGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NtYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jbWF0aC5yc3QKQEAgLTE4NywxNSArMTg3LDI0IEBACiBDbGFzc2lmaWNhdGlvbiBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisuLiBmdW5jdGlvbjo6IGlzZmluaXRlKHgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiBib3RoIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgKngqIGFyZSBmaW5pdGUsIGFuZAorICAgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBpc2luZih4KQogCi0gICBSZXR1cm4gKlRydWUqIGlmIHRoZSByZWFsIG9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiB4IGlzIHBvc2l0aXZlCi0gICBvciBuZWdhdGl2ZSBpbmZpbml0eS4KKyAgIFJldHVybiBgYFRydWVgYCBpZiBlaXRoZXIgdGhlIHJlYWwgb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mICp4KiBpcyBhbgorICAgaW5maW5pdHksIGFuZCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNuYW4oeCkKIAotICAgUmV0dXJuICpUcnVlKiBpZiB0aGUgcmVhbCBvciBpbWFnaW5hcnkgcGFydCBvZiB4IGlzIG5vdCBhIG51bWJlciAoTmFOKS4KKyAgIFJldHVybiBgYFRydWVgYCBpZiBlaXRoZXIgdGhlIHJlYWwgb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mICp4KiBpcyBhIE5hTiwKKyAgIGFuZCBgYEZhbHNlYGAgb3RoZXJ3aXNlLgogCiAKIENvbnN0YW50cwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY21kLnJzdCBiL0RvYy9saWJyYXJ5L2NtZC5yc3QKaW5kZXggZDc4OTI3MC4uNDY0NzY0ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY21kLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jbWQucnN0CkBAIC01LDEzICs1LDE1IEBACiAgICA6c3lub3BzaXM6IEJ1aWxkIGxpbmUtb3JpZW50ZWQgY29tbWFuZCBpbnRlcnByZXRlcnMuCiAuLiBzZWN0aW9uYXV0aG9yOjogRXJpYyBTLiBSYXltb25kIDxlc3JAc25hcmsudGh5cnN1cy5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NtZC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDpjbGFzczpgQ21kYCBjbGFzcyBwcm92aWRlcyBhIHNpbXBsZSBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgbGluZS1vcmllbnRlZAogY29tbWFuZCBpbnRlcnByZXRlcnMuICBUaGVzZSBhcmUgb2Z0ZW4gdXNlZnVsIGZvciB0ZXN0IGhhcm5lc3NlcywgYWRtaW5pc3RyYXRpdmUKIHRvb2xzLCBhbmQgcHJvdG90eXBlcyB0aGF0IHdpbGwgbGF0ZXIgYmUgd3JhcHBlZCBpbiBhIG1vcmUgc29waGlzdGljYXRlZAogaW50ZXJmYWNlLgogCi0KIC4uIGNsYXNzOjogQ21kKGNvbXBsZXRla2V5PSd0YWInLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSkKIAogICAgQSA6Y2xhc3M6YENtZGAgaW5zdGFuY2Ugb3Igc3ViY2xhc3MgaW5zdGFuY2UgaXMgYSBsaW5lLW9yaWVudGVkIGludGVycHJldGVyCkBAIC0yMDMsMyArMjA1LDE2MSBAQAogICAgOm1vZDpgcmVhZGxpbmVgLCBvbiBzeXN0ZW1zIHRoYXQgc3VwcG9ydCBpdCwgdGhlIGludGVycHJldGVyIHdpbGwgYXV0b21hdGljYWxseQogICAgc3VwcG9ydCA6cHJvZ3JhbTpgRW1hY3NgXCAtbGlrZSBsaW5lIGVkaXRpbmcgIGFuZCBjb21tYW5kLWhpc3Rvcnkga2V5c3Ryb2tlcy4pCiAKK0NtZCBFeGFtcGxlCistLS0tLS0tLS0tLQorCisuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24gZG90IGNvbT4KKworVGhlIDptb2Q6YGNtZGAgbW9kdWxlIGlzIG1haW5seSB1c2VmdWwgZm9yIGJ1aWxkaW5nIGN1c3RvbSBzaGVsbHMgdGhhdCBsZXQgYQordXNlciB3b3JrIHdpdGggYSBwcm9ncmFtIGludGVyYWN0aXZlbHkuCisKK1RoaXMgc2VjdGlvbiBwcmVzZW50cyBhIHNpbXBsZSBleGFtcGxlIG9mIGhvdyB0byBidWlsZCBhIHNoZWxsIGFyb3VuZCBhIGZldyBvZgordGhlIGNvbW1hbmRzIGluIHRoZSA6bW9kOmB0dXJ0bGVgIG1vZHVsZS4KKworQmFzaWMgdHVydGxlIGNvbW1hbmRzIHN1Y2ggYXMgOm1ldGg6YH50dXJ0bGUuZm9yd2FyZGAgYXJlIGFkZGVkIHRvIGEKKzpjbGFzczpgQ21kYCBzdWJjbGFzcyB3aXRoIG1ldGhvZCBuYW1lZCA6bWV0aDpgZG9fZm9yd2FyZGAuICBUaGUgYXJndW1lbnQgaXMKK2NvbnZlcnRlZCB0byBhIG51bWJlciBhbmQgZGlzcGF0Y2hlZCB0byB0aGUgdHVydGxlIG1vZHVsZS4gIFRoZSBkb2NzdHJpbmcgaXMKK3VzZWQgaW4gdGhlIGhlbHAgdXRpbGl0eSBwcm92aWRlZCBieSB0aGUgc2hlbGwuCisKK1RoZSBleGFtcGxlIGFsc28gaW5jbHVkZXMgYSBiYXNpYyByZWNvcmQgYW5kIHBsYXliYWNrIGZhY2lsaXR5IGltcGxlbWVudGVkIHdpdGgKK3RoZSA6bWV0aDpgfkNtZC5wcmVjbWRgIG1ldGhvZCB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyB0aGUgaW5wdXQgdG8KK2xvd2VyY2FzZSBhbmQgd3JpdGluZyB0aGUgY29tbWFuZHMgdG8gYSBmaWxlLiAgVGhlIDptZXRoOmBkb19wbGF5YmFja2AgbWV0aG9kCityZWFkcyB0aGUgZmlsZSBhbmQgYWRkcyB0aGUgcmVjb3JkZWQgY29tbWFuZHMgdG8gdGhlIDphdHRyOmBjbWRxdWV1ZWAgZm9yCitpbW1lZGlhdGUgcGxheWJhY2s6OgorCisgICAgaW1wb3J0IGNtZCwgc3lzCisgICAgZnJvbSB0dXJ0bGUgaW1wb3J0ICoKKworICAgIGNsYXNzIFR1cnRsZVNoZWxsKGNtZC5DbWQpOgorICAgICAgICBpbnRybyA9ICdXZWxjb21lIHRvIHRoZSB0dXJ0bGUgc2hlbGwuICAgVHlwZSBoZWxwIG9yID8gdG8gbGlzdCBjb21tYW5kcy5cbicKKyAgICAgICAgcHJvbXB0ID0gJyh0dXJ0bGUpICcKKyAgICAgICAgZmlsZSA9IE5vbmUKKworICAgICAgICAjIC0tLS0tIGJhc2ljIHR1cnRsZSBjb21tYW5kcyAtLS0tLQorICAgICAgICBkZWYgZG9fZm9yd2FyZChzZWxmLCBhcmcpOgorICAgICAgICAgICAgJ01vdmUgdGhlIHR1cnRsZSBmb3J3YXJkIGJ5IHRoZSBzcGVjaWZpZWQgZGlzdGFuY2U6ICBGT1JXQVJEIDEwJworICAgICAgICAgICAgZm9yd2FyZCgqcGFyc2UoYXJnKSkKKyAgICAgICAgZGVmIGRvX3JpZ2h0KHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnVHVybiB0dXJ0bGUgcmlnaHQgYnkgZ2l2ZW4gbnVtYmVyIG9mIGRlZ3JlZXM6ICBSSUdIVCAyMCcKKyAgICAgICAgICAgIHJpZ2h0KCpwYXJzZShhcmcpKQorICAgICAgICBkZWYgZG9fbGVmdChzZWxmLCBhcmcpOgorICAgICAgICAgICAgJ1R1cm4gdHVydGxlIGxlZnQgYnkgZ2l2ZW4gbnVtYmVyIG9mIGRlZ3JlZXM6ICBMRUZUIDkwJworICAgICAgICAgICAgcmlnaHQoKnBhcnNlKGFyZykpCisgICAgICAgIGRlZiBkb19nb3RvKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnTW92ZSB0dXJ0bGUgdG8gYW4gYWJzb2x1dGUgcG9zaXRpb24gd2l0aCBjaGFuZ2luZyBvcmllbnRhdGlvbi4gIEdPVE8gMTAwIDIwMCcKKyAgICAgICAgICAgIGdvdG8oKnBhcnNlKGFyZykpCisgICAgICAgIGRlZiBkb19ob21lKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnUmV0dXJuIHR1cnRsZSB0byB0aGUgaG9tZSBwb3N0aW9uOiAgSE9NRScKKyAgICAgICAgICAgIGhvbWUoKQorICAgICAgICBkZWYgZG9fY2lyY2xlKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnRHJhdyBjaXJjbGUgd2l0aCBnaXZlbiByYWRpdXMgYW4gb3B0aW9ucyBleHRlbnQgYW5kIHN0ZXBzOiAgQ0lSQ0xFIDUwJworICAgICAgICAgICAgY2lyY2xlKCpwYXJzZShhcmcpKQorICAgICAgICBkZWYgZG9fcG9zaXRpb24oc2VsZiwgYXJnKToKKyAgICAgICAgICAgICdQcmludCB0aGUgY3VycmVudCB0dXJsZSBwb3NpdGlvbjogIFBPU0lUSU9OJworICAgICAgICAgICAgcHJpbnQoJ0N1cnJlbnQgcG9zaXRpb24gaXMgJWQgJWRcbicgJSBwb3NpdGlvbigpKQorICAgICAgICBkZWYgZG9faGVhZGluZyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgJ1ByaW50IHRoZSBjdXJyZW50IHR1cmxlIGhlYWRpbmcgaW4gZGVncmVlczogIEhFQURJTkcnCisgICAgICAgICAgICBwcmludCgnQ3VycmVudCBoZWFkaW5nIGlzICVkXG4nICUgKGhlYWRpbmcoKSwpKQorICAgICAgICBkZWYgZG9fY29sb3Ioc2VsZiwgYXJnKToKKyAgICAgICAgICAgICdTZXQgdGhlIGNvbG9yOiAgQ09MT1IgQkxVRScKKyAgICAgICAgICAgIGNvbG9yKGFyZy5sb3dlcigpKQorICAgICAgICBkZWYgZG9fdW5kbyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgJ1VuZG8gKHJlcGVhdGVkbHkpIHRoZSBsYXN0IHR1cnRsZSBhY3Rpb24ocyk6ICBVTkRPJworICAgICAgICBkZWYgZG9fcmVzZXQoc2VsZiwgYXJnKToKKyAgICAgICAgICAgICdDbGVhciB0aGUgc2NyZWVuIGFuZCByZXR1cm4gdHVydGxlIHRvIGNlbnRlcjogIFJFU0VUJworICAgICAgICAgICAgcmVzZXQoKQorICAgICAgICBkZWYgZG9fYnllKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnU3RvcCByZWNvcmRpbmcsIGNsb3NlIHRoZSB0dXJ0bGUgd2luZG93LCBhbmQgZXhpdDogIEJZRScKKyAgICAgICAgICAgIHByaW50KCdUaGFuayB5b3UgZm9yIHVzaW5nIFR1cnRsZScpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIGJ5ZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgICAgICMgLS0tLS0gcmVjb3JkIGFuZCBwbGF5YmFjayAtLS0tLQorICAgICAgICBkZWYgZG9fcmVjb3JkKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAnU2F2ZSBmdXR1cmUgY29tbWFuZHMgdG8gZmlsZW5hbWU6ICBSRUNPUkQgcm9zZS5jbWQnCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBvcGVuKGFyZywgJ3cnKQorICAgICAgICBkZWYgZG9fcGxheWJhY2soc2VsZiwgYXJnKToKKyAgICAgICAgICAgICdQbGF5YmFjayBjb21tYW5kcyBmcm9tIGEgZmlsZTogIFBMQVlCQUNLIHJvc2UuY21kJworICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICAgICBjbWRzID0gb3BlbihhcmcpLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgICAgIHNlbGYuY21kcXVldWUuZXh0ZW5kKGNtZHMpCisgICAgICAgIGRlZiBwcmVjbWQoc2VsZiwgbGluZSk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5sb3dlcigpCisgICAgICAgICAgICBpZiBzZWxmLmZpbGUgYW5kICdwbGF5YmFjaycgbm90IGluIGxpbmU6CisgICAgICAgICAgICAgICAgcHJpbnQobGluZSwgZmlsZT1zZWxmLmZpbGUpCisgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLmZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisKKyAgICBkZWYgcGFyc2UoYXJnKToKKyAgICAgICAgJ0NvbnZlcnQgYSBzZXJpZXMgb2YgemVybyBvciBtb3JlIG51bWJlcnMgdG8gYW4gYXJndW1lbnQgdHVwbGUnCisgICAgICAgIHJldHVybiB0dXBsZShtYXAoaW50LCBhcmcuc3BsaXQoKSkpCisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICBUdXJ0bGVTaGVsbCgpLmNtZGxvb3AoKQorCisKK0hlcmUgaXMgYSBzYW1wbGUgc2Vzc2lvbiB3aXRoIHRoZSB0dXJ0bGUgc2hlbGwgc2hvd2luZyB0aGUgaGVscCBmdW5jdGlvbnMsIHVzaW5nCitibGFuayBsaW5lcyB0byByZXBlYXQgY29tbWFuZHMsIGFuZCB0aGUgc2ltcGxlIHJlY29yZCBhbmQgcGxheWJhY2sgZmFjaWxpdHk6OgorCisgICAgV2VsY29tZSB0byB0aGUgdHVydGxlIHNoZWxsLiAgIFR5cGUgaGVscCBvciA/IHRvIGxpc3QgY29tbWFuZHMuCisKKyAgICAodHVydGxlKSA/CisKKyAgICBEb2N1bWVudGVkIGNvbW1hbmRzICh0eXBlIGhlbHAgPHRvcGljPik6CisgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGJ5ZSAgICAgY29sb3IgICAgZ290byAgICAgaG9tZSAgcGxheWJhY2sgIHJlY29yZCAgcmlnaHQKKyAgICBjaXJjbGUgIGZvcndhcmQgIGhlYWRpbmcgIGxlZnQgIHBvc2l0aW9uICByZXNldCAgIHVuZG8KKworICAgICh0dXJ0bGUpIGhlbHAgZm9yd2FyZAorICAgIE1vdmUgdGhlIHR1cnRsZSBmb3J3YXJkIGJ5IHRoZSBzcGVjaWZpZWQgZGlzdGFuY2U6ICBGT1JXQVJEIDEwCisgICAgKHR1cnRsZSkgcmVjb3JkIHNwaXJhbC5jbWQKKyAgICAodHVydGxlKSBwb3NpdGlvbgorICAgIEN1cnJlbnQgcG9zaXRpb24gaXMgMCAwCisKKyAgICAodHVydGxlKSBoZWFkaW5nCisgICAgQ3VycmVudCBoZWFkaW5nIGlzIDAKKworICAgICh0dXJ0bGUpIHJlc2V0CisgICAgKHR1cnRsZSkgY2lyY2xlIDIwCisgICAgKHR1cnRsZSkgcmlnaHQgMzAKKyAgICAodHVydGxlKSBjaXJjbGUgNDAKKyAgICAodHVydGxlKSByaWdodCAzMAorICAgICh0dXJ0bGUpIGNpcmNsZSA2MAorICAgICh0dXJ0bGUpIHJpZ2h0IDMwCisgICAgKHR1cnRsZSkgY2lyY2xlIDgwCisgICAgKHR1cnRsZSkgcmlnaHQgMzAKKyAgICAodHVydGxlKSBjaXJjbGUgMTAwCisgICAgKHR1cnRsZSkgcmlnaHQgMzAKKyAgICAodHVydGxlKSBjaXJjbGUgMTIwCisgICAgKHR1cnRsZSkgcmlnaHQgMzAKKyAgICAodHVydGxlKSBjaXJjbGUgMTIwCisgICAgKHR1cnRsZSkgaGVhZGluZworICAgIEN1cnJlbnQgaGVhZGluZyBpcyAxODAKKworICAgICh0dXJ0bGUpIGZvcndhcmQgMTAwCisgICAgKHR1cnRsZSkKKyAgICAodHVydGxlKSByaWdodCA5MAorICAgICh0dXJ0bGUpIGZvcndhcmQgMTAwCisgICAgKHR1cnRsZSkKKyAgICAodHVydGxlKSByaWdodCA5MAorICAgICh0dXJ0bGUpIGZvcndhcmQgNDAwCisgICAgKHR1cnRsZSkgcmlnaHQgOTAKKyAgICAodHVydGxlKSBmb3J3YXJkIDUwMAorICAgICh0dXJ0bGUpIHJpZ2h0IDkwCisgICAgKHR1cnRsZSkgZm9yd2FyZCA0MDAKKyAgICAodHVydGxlKSByaWdodCA5MAorICAgICh0dXJ0bGUpIGZvcndhcmQgMzAwCisgICAgKHR1cnRsZSkgcGxheWJhY2sgc3BpcmFsLmNtZAorICAgIEN1cnJlbnQgcG9zaXRpb24gaXMgMCAwCisKKyAgICBDdXJyZW50IGhlYWRpbmcgaXMgMAorCisgICAgQ3VycmVudCBoZWFkaW5nIGlzIDE4MAorCisgICAgKHR1cnRsZSkgYnllCisgICAgVGhhbmsgeW91IGZvciB1c2luZyBUdXJ0bGUKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdCBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKaW5kZXggZDA3ZGFmYS4uOTIyYmNmNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CkBAIC03ODcsOSArNzg3LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBTdHJpbmdzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzZXF1ZW5jZXMgb2YgY29kZXBvaW50cyAodG8gYmUgcHJlY2lzZQotYXMgOmN0eXBlOmBQeV9VTklDT0RFYCBhcnJheXMpLiBEZXBlbmRpbmcgb24gdGhlIHdheSBQeXRob24gaXMgY29tcGlsZWQgKGVpdGhlcgorYXMgOmM6dHlwZTpgUHlfVU5JQ09ERWAgYXJyYXlzKS4gRGVwZW5kaW5nIG9uIHRoZSB3YXkgUHl0aG9uIGlzIGNvbXBpbGVkIChlaXRoZXIKIHZpYSBgYC0td2l0aG91dC13aWRlLXVuaWNvZGVgYCBvciBgYC0td2l0aC13aWRlLXVuaWNvZGVgYCwgd2l0aCB0aGUKLWZvcm1lciBiZWluZyB0aGUgZGVmYXVsdCkgOmN0eXBlOmBQeV9VTklDT0RFYCBpcyBlaXRoZXIgYSAxNi1iaXQgb3IgMzItYml0IGRhdGEKK2Zvcm1lciBiZWluZyB0aGUgZGVmYXVsdCkgOmM6dHlwZTpgUHlfVU5JQ09ERWAgaXMgZWl0aGVyIGEgMTYtYml0IG9yIDMyLWJpdCBkYXRhCiB0eXBlLiBPbmNlIGEgc3RyaW5nIG9iamVjdCBpcyB1c2VkIG91dHNpZGUgb2YgQ1BVIGFuZCBtZW1vcnksIENQVSBlbmRpYW5uZXNzCiBhbmQgaG93IHRoZXNlIGFycmF5cyBhcmUgc3RvcmVkIGFzIGJ5dGVzIGJlY29tZSBhbiBpc3N1ZS4gIFRyYW5zZm9ybWluZyBhCiBzdHJpbmcgb2JqZWN0IGludG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBpcyBjYWxsZWQgZW5jb2RpbmcgYW5kIHJlY3JlYXRpbmcgdGhlCkBAIC05MzYsNiArOTM2LDggQEAKIHwgY3A1MDAgICAgICAgICAgIHwgRUJDRElDLUNQLUJFLCBFQkNESUMtQ1AtQ0gsICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgIHwgSUJNNTAwICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3A3MjAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQXJhYmljICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A3MzcgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JlZWsgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgY3A3NzUgICAgICAgICAgIHwgSUJNNzc1ICAgICAgICAgICAgICAgICAgICAgICAgIHwgQmFsdGljIGxhbmd1YWdlcyAgICAgICAgICAgICAgIHwKQEAgLTk1MSw2ICs5NTMsOCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDg1NyAgICAgICAgICAgfCA4NTcsIElCTTg1NyAgICAgICAgICAgICAgICAgICAgfCBUdXJraXNoICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBjcDg1OCAgICAgICAgICAgfCA4NTgsIElCTTg1OCAgICAgICAgICAgICAgICAgICAgfCBXZXN0ZXJuIEV1cm9wZSAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDg2MCAgICAgICAgICAgfCA4NjAsIElCTTg2MCAgICAgICAgICAgICAgICAgICAgfCBQb3J0dWd1ZXNlICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDg2MSAgICAgICAgICAgfCA4NjEsIENQLUlTLCBJQk04NjEgICAgICAgICAgICAgfCBJY2VsYW5kaWMgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTA4Niw3ICsxMDkwLDcgQEAKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgbWFjX2xhdGluMiAgICAgIHwgbWFjbGF0aW4yLCBtYWNjZW50cmFsZXVyb3BlICAgIHwgQ2VudHJhbCBhbmQgRWFzdGVybiBFdXJvcGUgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgbWFjX3JvbWFuICAgICAgIHwgbWFjcm9tYW4gICAgICAgICAgICAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKK3wgbWFjX3JvbWFuICAgICAgIHwgbWFjcm9tYW4sIG1hY2ludG9zaCAgICAgICAgICAgIHwgV2VzdGVybiBFdXJvcGUgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgbWFjX3R1cmtpc2ggICAgIHwgbWFjdHVya2lzaCAgICAgICAgICAgICAgICAgICAgIHwgVHVya2lzaCAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTExMTAsOSArMTExNCw5IEBACiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHV0Zl8xNiAgICAgICAgICB8IFUxNiwgdXRmMTYgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHV0Zl8xNl9iZSAgICAgICB8IFVURi0xNkJFICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgKEJNUCBvbmx5KSAgICAgICB8Cit8IHV0Zl8xNl9iZSAgICAgICB8IFVURi0xNkJFICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHV0Zl8xNl9sZSAgICAgICB8IFVURi0xNkxFICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgKEJNUCBvbmx5KSAgICAgICB8Cit8IHV0Zl8xNl9sZSAgICAgICB8IFVURi0xNkxFICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHV0Zl83ICAgICAgICAgICB8IFU3LCB1bmljb2RlLTEtMS11dGYtNyAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMTYxLDYgKzExNjUsNDQgQEAKIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IG9wZXJhbmQgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKK1RoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgYnl0ZXMtdG8tYnl0ZXMgbWFwcGluZ3MuCisKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBDb2RlYyAgICAgICAgICAgICAgfCBBbGlhc2VzICAgICAgICAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgYmFzZTY0X2NvZGVjICAgICAgIHwgYmFzZTY0LCBiYXNlLTY0ICAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byBNSU1FICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZTY0ICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYnoyX2NvZGVjICAgICAgICAgIHwgYnoyICAgICAgICAgICAgICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNpbmcgYnoyICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgaGV4X2NvZGVjICAgICAgICAgIHwgaGV4ICAgICAgICAgICAgICAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGV4YWRlY2ltYWwgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXByZXNlbnRhdGlvbiwgd2l0aCB0d28gIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpZ2l0cyBwZXIgYnl0ZSAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHF1b3ByaV9jb2RlYyAgICAgICB8IHF1b3ByaSwgcXVvdGVkLXByaW50YWJsZSwgfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVkcHJpbnRhYmxlICAgICAgICAgICB8IHF1b3RlZCBwcmludGFibGUgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHV1X2NvZGVjICAgICAgICAgICB8IHV1ICAgICAgICAgICAgICAgICAgICAgICAgfCBDb252ZXJ0IHRoZSBvcGVyYW5kIHVzaW5nIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHpsaWJfY29kZWMgICAgICAgICB8IHppcCwgemxpYiAgICAgICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgc3RyaW5nLXRvLXN0cmluZyBtYXBwaW5ncy4KKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IENvZGVjICAgICAgICAgICAgICB8IEFsaWFzZXMgICAgICAgICAgICAgICAgICAgfCBQdXJwb3NlICAgICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCByb3RfMTMgICAgICAgICAgICAgfCByb3QxMyAgICAgICAgICAgICAgICAgICAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlbmNyeXB0aW9uIG9mIHRoZSBvcGVyYW5kIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIGJ5dGVzLXRvLWJ5dGVzIGFuZCBzdHJpbmctdG8tc3RyaW5nIGNvZGVjcy4KKwogCiA6bW9kOmBlbmNvZGluZ3MuaWRuYWAgLS0tIEludGVybmF0aW9uYWxpemVkIERvbWFpbiBOYW1lcyBpbiBBcHBsaWNhdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTIyNyw2ICsxMjY5LDIzIEBACiAgICBDb252ZXJ0IGEgbGFiZWwgdG8gVW5pY29kZSwgYXMgc3BlY2lmaWVkIGluIDpyZmM6YDM0OTBgLgogCiAKKzptb2Q6YGVuY29kaW5ncy5tYmNzYCAtLS0gV2luZG93cyBBTlNJIGNvZGVwYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBtb2R1bGU6OiBlbmNvZGluZ3MubWJjcworICAgOnN5bm9wc2lzOiBXaW5kb3dzIEFOU0kgY29kZXBhZ2UKKworRW5jb2RlIG9wZXJhbmQgYWNjb3JkaW5nIHRvIHRoZSBBTlNJIGNvZGVwYWdlIChDUF9BQ1ApLiBUaGlzIGNvZGVjIG9ubHkKK3N1cHBvcnRzIGBgJ3N0cmljdCdgYCBhbmQgYGAncmVwbGFjZSdgYCBlcnJvciBoYW5kbGVycyB0byBlbmNvZGUsIGFuZAorYGAnc3RyaWN0J2BgIGFuZCBgYCdpZ25vcmUnYGAgZXJyb3IgaGFuZGxlcnMgdG8gZGVjb2RlLgorCitBdmFpbGFiaWxpdHk6IFdpbmRvd3Mgb25seS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIEJlZm9yZSAzLjIsIHRoZSAqZXJyb3JzKiBhcmd1bWVudCB3YXMgaWdub3JlZDsgYGAncmVwbGFjZSdgYCB3YXMgYWx3YXlzIHVzZWQKKyAgIHRvIGVuY29kZSwgYW5kIGBgJ2lnbm9yZSdgYCB0byBkZWNvZGUuCisKKwogOm1vZDpgZW5jb2RpbmdzLnV0Zl84X3NpZ2AgLS0tIFVURi04IGNvZGVjIHdpdGggQk9NIHNpZ25hdHVyZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKaW5kZXggNjhhNzlmMS4uZDI5YmMxNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdApAQCAtMTMsNiArMTMsMTAgQEAKICAgIGltcG9ydCBpdGVydG9vbHMKICAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY29sbGVjdGlvbnMucHlgIGFuZCA6c291cmNlOmBMaWIvX2FiY29sbC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBzcGVjaWFsaXplZCBjb250YWluZXIgZGF0YXR5cGVzIHByb3ZpZGluZyBhbHRlcm5hdGl2ZXMgdG8KIFB5dGhvbidzIGdlbmVyYWwgcHVycG9zZSBidWlsdC1pbiBjb250YWluZXJzLCA6Y2xhc3M6YGRpY3RgLCA6Y2xhc3M6YGxpc3RgLAogOmNsYXNzOmBzZXRgLCBhbmQgOmNsYXNzOmB0dXBsZWAuCkBAIC0yOSw3ICszMyw3IEBACiA9PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBJbiBhZGRpdGlvbiB0byB0aGUgY29uY3JldGUgY29udGFpbmVyIGNsYXNzZXMsIHRoZSBjb2xsZWN0aW9ucyBtb2R1bGUgcHJvdmlkZXMKLUFCQ3MgKGFic3RyYWN0IGJhc2UgY2xhc3NlcykgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgYSBjbGFzcyBwcm92aWRlcyBhCis6cmVmOmBhYnN0cmFjdC1iYXNlLWNsYXNzZXNgIHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIGEgY2xhc3MgcHJvdmlkZXMgYQogcGFydGljdWxhciBpbnRlcmZhY2UsIGZvciBleGFtcGxlLCB3aGV0aGVyIGl0IGlzIGhhc2hhYmxlIG9yIGEgbWFwcGluZy4KIAogCkBAIC04NSw3ICs4OSw3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0gICBDb3VudGVyIG9iamVjdHMgc3VwcG9ydCB0d28gbWV0aG9kcyBiZXlvbmQgdGhvc2UgYXZhaWxhYmxlIGZvciBhbGwKKyAgIENvdW50ZXIgb2JqZWN0cyBzdXBwb3J0IHRocmVlIG1ldGhvZHMgYmV5b25kIHRob3NlIGF2YWlsYWJsZSBmb3IgYWxsCiAgICBkaWN0aW9uYXJpZXM6CiAKICAgIC4uIG1ldGhvZDo6IGVsZW1lbnRzKCkKQEAgLTEwOCw2ICsxMTIsMTkgQEAKICAgICAgICAgICAgID4+PiBDb3VudGVyKCdhYnJhY2FkYWJyYScpLm1vc3RfY29tbW9uKDMpCiAgICAgICAgICAgICBbKCdhJywgNSksICgncicsIDIpLCAoJ2InLCAyKV0KIAorICAgLi4gbWV0aG9kOjogc3VidHJhY3QoW2l0ZXJhYmxlLW9yLW1hcHBpbmddKQorCisgICAgICBFbGVtZW50cyBhcmUgc3VidHJhY3RlZCBmcm9tIGFuICppdGVyYWJsZSogb3IgZnJvbSBhbm90aGVyICptYXBwaW5nKgorICAgICAgKG9yIGNvdW50ZXIpLiAgTGlrZSA6bWV0aDpgZGljdC51cGRhdGVgIGJ1dCBzdWJ0cmFjdHMgY291bnRzIGluc3RlYWQKKyAgICAgIG9mIHJlcGxhY2luZyB0aGVtLiAgQm90aCBpbnB1dHMgYW5kIG91dHB1dHMgbWF5IGJlIHplcm8gb3IgbmVnYXRpdmUuCisKKyAgICAgICAgICAgID4+PiBjID0gQ291bnRlcihhPTQsIGI9MiwgYz0wLCBkPS0yKQorICAgICAgICAgICAgPj4+IGQgPSBDb3VudGVyKGE9MSwgYj0yLCBjPTMsIGQ9NCkKKyAgICAgICAgICAgID4+PiBjLnN1YnRyYWN0KGQpCisgICAgICAgICAgICBDb3VudGVyKHsnYSc6IDMsICdiJzogMCwgJ2MnOiAtMywgJ2QnOiAtNn0pCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAgICBUaGUgdXN1YWwgZGljdGlvbmFyeSBtZXRob2RzIGFyZSBhdmFpbGFibGUgZm9yIDpjbGFzczpgQ291bnRlcmAgb2JqZWN0cwogICAgZXhjZXB0IGZvciB0d28gd2hpY2ggd29yayBkaWZmZXJlbnRseSBmb3IgY291bnRlcnMuCiAKQEAgLTE4OCwxNCArMjA1LDE0IEBACiAgICAgKiBgQmFnIGNsYXNzIDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvc21hbGx0YWxrL21hbnVhbC1iYXNlL2h0bWxfbm9kZS9CYWcuaHRtbD5gXwogICAgICAgaW4gU21hbGx0YWxrLgogCi0gICAgKiBXaWtpcGVkaWEgZW50cnkgZm9yIGBNdWx0aXNldHMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlzZXQ+YF9cLgorICAgICogV2lraXBlZGlhIGVudHJ5IGZvciBgTXVsdGlzZXRzIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011bHRpc2V0PmBfLgogCiAgICAgKiBgQysrIG11bHRpc2V0cyA8aHR0cDovL3d3dy5kZW1vMnMuY29tL1R1dG9yaWFsL0NwcC8wMzgwX19zZXQtbXVsdGlzZXQvQ2F0YWxvZzAzODBfX3NldC1tdWx0aXNldC5odG0+YF8KICAgICAgIHR1dG9yaWFsIHdpdGggZXhhbXBsZXMuCiAKICAgICAqIEZvciBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBvbiBtdWx0aXNldHMgYW5kIHRoZWlyIHVzZSBjYXNlcywgc2VlCiAgICAgICAqS251dGgsIERvbmFsZC4gVGhlIEFydCBvZiBDb21wdXRlciBQcm9ncmFtbWluZyBWb2x1bWUgSUksCi0gICAgICBTZWN0aW9uIDQuNi4zLCBFeGVyY2lzZSAxOSpcLgorICAgICAgU2VjdGlvbiA0LjYuMywgRXhlcmNpc2UgMTkqLgogCiAgICAgKiBUbyBlbnVtZXJhdGUgYWxsIGRpc3RpbmN0IG11bHRpc2V0cyBvZiBhIGdpdmVuIHNpemUgb3ZlciBhIGdpdmVuIHNldCBvZgogICAgICAgZWxlbWVudHMsIHNlZSA6ZnVuYzpgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50YC4KQEAgLTI0OCw2ICsyNjUsMTMgQEAKICAgICAgIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGUgZGVxdWUgbGVhdmluZyBpdCB3aXRoIGxlbmd0aCAwLgogCiAKKyAgIC4uIG1ldGhvZDo6IGNvdW50KHgpCisKKyAgICAgIENvdW50IHRoZSBudW1iZXIgb2YgZGVxdWUgZWxlbWVudHMgZXF1YWwgdG8gKngqLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAgICAuLiBtZXRob2Q6OiBleHRlbmQoaXRlcmFibGUpCiAKICAgICAgIEV4dGVuZCB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgZGVxdWUgYnkgYXBwZW5kaW5nIGVsZW1lbnRzIGZyb20gdGhlIGl0ZXJhYmxlCkBAIC0yNzksNiArMzAzLDEzIEBACiAgICAgICA6ZXhjOmBWYWx1ZUVycm9yYC4KIAogCisgICAuLiBtZXRob2Q6OiByZXZlcnNlKCkKKworICAgICAgUmV2ZXJzZSB0aGUgZWxlbWVudHMgb2YgdGhlIGRlcXVlIGluLXBsYWNlIGFuZCB0aGVuIHJldHVybiBgYE5vbmVgYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogICAgLi4gbWV0aG9kOjogcm90YXRlKG4pCiAKICAgICAgIFJvdGF0ZSB0aGUgZGVxdWUgKm4qIHN0ZXBzIHRvIHRoZSByaWdodC4gIElmICpuKiBpcyBuZWdhdGl2ZSwgcm90YXRlIHRvCkBAIC01NTUsMTEgKzU4NiwxNSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yICpyZW5hbWUqLgogCi1FeGFtcGxlOgogCiAuLiBkb2N0ZXN0OjoKICAgIDpvcHRpb25zOiArTk9STUFMSVpFX1dISVRFU1BBQ0UKIAorICAgPj4+ICMgQmFzaWMgZXhhbXBsZQorICAgPj4+IFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCBbJ3gnLCAneSddKQorICAgPj4+IHAgPSBQb2ludCh4PTEwLCB5PTExKQorCisgICA+Pj4gIyBFeGFtcGxlIHVzaW5nIHRoZSB2ZXJib3NlIG9wdGlvbiB0byBwcmludCB0aGUgY2xhc3MgZGVmaW5pdGlvbgogICAgPj4+IFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JywgdmVyYm9zZT1UcnVlKQogICAgY2xhc3MgUG9pbnQodHVwbGUpOgogICAgICAgICAgICAnUG9pbnQoeCwgeSknCkBAIC01NjksNiArNjA0LDcgQEAKICAgICAgICAgICAgX2ZpZWxkcyA9ICgneCcsICd5JykKICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIGRlZiBfX25ld19fKF9jbHMsIHgsIHkpOgorICAgICAgICAgICAgICAgJ0NyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBQb2ludCh4LCB5KScKICAgICAgICAgICAgICAgIHJldHVybiBfdHVwbGUuX19uZXdfXyhfY2xzLCAoeCwgeSkpCiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBAY2xhc3NtZXRob2QKQEAgLTU4MCw3ICs2MTYsOCBAQAogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgPEJMQU5LTElORT4KICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgcmV0dXJuICdQb2ludCh4PSVyLCB5PSVyKScgJSBzZWxmCisgICAgICAgICAgICAgICAnUmV0dXJuIGEgbmljZWx5IGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBzdHJpbmcnCisgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnKHg9JXIsIHk9JXIpJyAlIHNlbGYKICAgIDxCTEFOS0xJTkU+CiAgICAgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOgogICAgICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBPcmRlcmVkRGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcycKQEAgLTU5NCwxMCArNjMxLDExIEBACiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAgICA8QkxBTktMSU5FPgogICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6CisgICAgICAgICAgICAgICAnUmV0dXJuIHNlbGYgYXMgYSBwbGFpbiB0dXBsZS4gICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZikKICAgIDxCTEFOS0xJTkU+Ci0gICAgICAgICAgIHggPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMCkpCi0gICAgICAgICAgIHkgPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMSkpCisgICAgICAgICAgIHggPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoMCksIGRvYz0nQWxpYXMgZm9yIGZpZWxkIG51bWJlciAwJykKKyAgICAgICAgICAgeSA9IF9wcm9wZXJ0eShfaXRlbWdldHRlcigxKSwgZG9jPSdBbGlhcyBmb3IgZmllbGQgbnVtYmVyIDEnKQogCiAgICA+Pj4gcCA9IFBvaW50KDExLCB5PTIyKSAgICAgIyBpbnN0YW50aWF0ZSB3aXRoIHBvc2l0aW9uYWwgb3Iga2V5d29yZCBhcmd1bWVudHMKICAgID4+PiBwWzBdICsgcFsxXSAgICAgICAgICAgICAjIGluZGV4YWJsZSBsaWtlIHRoZSBwbGFpbiB0dXBsZSAoMTEsIDIyKQpAQCAtNjk4LDE1ICs3MzYsMTUgQEAKIGEgZml4ZWQtd2lkdGggcHJpbnQgZm9ybWF0OgogCiAgICAgPj4+IGNsYXNzIFBvaW50KG5hbWVkdHVwbGUoJ1BvaW50JywgJ3ggeScpKToKLSAgICAuLi4gICAgIF9fc2xvdHNfXyA9ICgpCi0gICAgLi4uICAgICBAcHJvcGVydHkKLSAgICAuLi4gICAgIGRlZiBoeXBvdChzZWxmKToKLSAgICAuLi4gICAgICAgICByZXR1cm4gKHNlbGYueCAqKiAyICsgc2VsZi55ICoqIDIpICoqIDAuNQotICAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgLi4uICAgICAgICAgcmV0dXJuICdQb2ludDogeD0lNi4zZiAgeT0lNi4zZiAgaHlwb3Q9JTYuM2YnICUgKHNlbGYueCwgc2VsZi55LCBzZWxmLmh5cG90KQorICAgICAgICAgICAgX19zbG90c19fID0gKCkKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIGh5cG90KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoc2VsZi54ICoqIDIgKyBzZWxmLnkgKiogMikgKiogMC41CisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1BvaW50OiB4PSU2LjNmICB5PSU2LjNmICBoeXBvdD0lNi4zZicgJSAoc2VsZi54LCBzZWxmLnksIHNlbGYuaHlwb3QpCiAKICAgICA+Pj4gZm9yIHAgaW4gUG9pbnQoMywgNCksIFBvaW50KDE0LCA1LzcpOgotICAgIC4uLiAgICAgcHJpbnQocCkKKyAgICAgICAgICAgIHByaW50KHApCiAgICAgUG9pbnQ6IHg9IDMuMDAwICB5PSA0LjAwMCAgaHlwb3Q9IDUuMDAwCiAgICAgUG9pbnQ6IHg9MTQuMDAwICB5PSAwLjcxNCAgaHlwb3Q9MTQuMDE4CiAKQEAgLTczMywxMiArNzcxLDE5IEBACiAgICAgPj4+IFN0YXR1cy5vcGVuLCBTdGF0dXMucGVuZGluZywgU3RhdHVzLmNsb3NlZAogICAgICgwLCAxLCAyKQogICAgID4+PiBjbGFzcyBTdGF0dXM6Ci0gICAgLi4uICAgICBvcGVuLCBwZW5kaW5nLCBjbG9zZWQgPSByYW5nZSgzKQorICAgICAgICAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KLSAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjQuCisgICAqIGBOYW1lZCB0dXBsZSByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzUwMDI2MS8+YF8KKyAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNC4KKworICAgKiBgUmVjaXBlIGZvciBuYW1lZCB0dXBsZSBhYnN0cmFjdCBiYXNlIGNsYXNzIHdpdGggYSBtZXRhY2xhc3MgbWl4LWluCisgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc2MjktbmFtZWR0dXBsZWFiYy1hYnN0cmFjdC1iYXNlLWNsYXNzLW1peC1pbi1mb3ItbmFtZWQvPmBfCisgICAgIGJ5IEphbiBLYWxpc3pld3NraS4gIEJlc2lkZXMgcHJvdmlkaW5nIGFuIDp0ZXJtOmBhYnN0cmFjdCBiYXNlIGNsYXNzYCBmb3IKKyAgICAgbmFtZWQgdHVwbGVzLCBpdCBhbHNvIHN1cHBvcnRzIGFuIGFsdGVybmF0ZSA6dGVybTpgbWV0YWNsYXNzYC1iYXNlZAorICAgICBjb25zdHJ1Y3RvciB0aGF0IGlzIGNvbnZlbmllbnQgZm9yIHVzZSBjYXNlcyB3aGVyZSBuYW1lZCB0dXBsZXMgYXJlIGJlaW5nCisgICAgIHN1YmNsYXNzZWQuCiAKIAogOmNsYXNzOmBPcmRlcmVkRGljdGAgb2JqZWN0cwpAQCAtNzY0LDYgKzgwOSwyMyBAQAogICAgICAgKGtleSwgdmFsdWUpIHBhaXIuICBUaGUgcGFpcnMgYXJlIHJldHVybmVkIGluIExJRk8gb3JkZXIgaWYgKmxhc3QqIGlzIHRydWUKICAgICAgIG9yIEZJRk8gb3JkZXIgaWYgZmFsc2UuCiAKKyAgIC4uIG1ldGhvZDo6IG1vdmVfdG9fZW5kKGtleSwgbGFzdD1UcnVlKQorCisgICAgICBNb3ZlIGFuIGV4aXN0aW5nICprZXkqIHRvIGVpdGhlciBlbmQgb2YgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LiAgVGhlIGl0ZW0KKyAgICAgIGlzIG1vdmVkIHRvIHRoZSByaWdodCBlbmQgaWYgKmxhc3QqIGlzIHRydWUgKHRoZSBkZWZhdWx0KSBvciB0byB0aGUKKyAgICAgIGJlZ2lubmluZyBpZiAqbGFzdCogaXMgZmFsc2UuICBSYWlzZXMgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSAqa2V5KiBkb2VzCisgICAgICBub3QgZXhpc3Q6OgorCisgICAgICAgICAgPj4+IGQgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjZGUnKQorICAgICAgICAgID4+PiBkLm1vdmVfdG9fZW5kKCdiJykKKyAgICAgICAgICA+Pj4gJycuam9pbihkLmtleXMpCisgICAgICAgICAgJ2FjZGViJworICAgICAgICAgID4+PiBkLm1vdmVfdG9fZW5kKCdiJywgbGFzdD1GYWxzZSkKKyAgICAgICAgICA+Pj4gJycuam9pbihkLmtleXMpCisgICAgICAgICAgJ2JhY2RlJworCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogSW4gYWRkaXRpb24gdG8gdGhlIHVzdWFsIG1hcHBpbmcgbWV0aG9kcywgb3JkZXJlZCBkaWN0aW9uYXJpZXMgYWxzbyBzdXBwb3J0CiByZXZlcnNlIGl0ZXJhdGlvbiB1c2luZyA6ZnVuYzpgcmV2ZXJzZWRgLgogCkBAIC04NjQsNiArOTI2LDcgQEAKICAgICAgIGNsYXNzLgogCiAKKwogOmNsYXNzOmBVc2VyTGlzdGAgb2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC05MjMsNiArOTg2LDcgQEAKICAgIHN1YmNsYXNzKSBvciBhbiBhcmJpdHJhcnkgc2VxdWVuY2Ugd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCBpbnRvIGEgc3RyaW5nIHVzaW5nCiAgICB0aGUgYnVpbHQtaW4gOmZ1bmM6YHN0cmAgZnVuY3Rpb24uCiAKKy4uIF9hYnN0cmFjdC1iYXNlLWNsYXNzZXM6CiAKIEFCQ3MgLSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTkzOSw3ICsxMDAzLDcgQEAKIDpjbGFzczpgU2l6ZWRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2xlbl9fYGAKIDpjbGFzczpgQ2FsbGFibGVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGBfX2NhbGxfX2BgCiAKLTpjbGFzczpgU2VxdWVuY2VgICAgICAgICAgIDpjbGFzczpgU2l6ZWRgLCAgICAgICAgYGBfX2dldGl0ZW1fX2BgICAgICAgICAgYGBfX2NvbnRhaW5zX19gYC4gYGBfX2l0ZXJfX2BgLCBgYF9fcmV2ZXJzZWRfX2BgLAorOmNsYXNzOmBTZXF1ZW5jZWAgICAgICAgICAgOmNsYXNzOmBTaXplZGAsICAgICAgICBgYF9fZ2V0aXRlbV9fYGAgICAgICAgICBgYF9fY29udGFpbnNfX2BgLCBgYF9faXRlcl9fYGAsIGBgX19yZXZlcnNlZF9fYGAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Y2xhc3M6YEl0ZXJhYmxlYCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgaW5kZXhgYCwgYW5kIGBgY291bnRgYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzOmBDb250YWluZXJgCiAKQEAgLTEwNzQsNiArMTEzOCw5IEBACiAKIC4uIHNlZWFsc286OgogCisgICAqIExhdGVzdCB2ZXJzaW9uIG9mIHRoZSA6c291cmNlOmBQeXRob24gc291cmNlIGNvZGUgZm9yIHRoZSBjb2xsZWN0aW9ucworICAgICBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgPExpYi9fYWJjb2xsLnB5PmAKKwogICAgKiBgT3JkZXJlZFNldCByZWNpcGUgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjY5NC8+YF8gZm9yIGFuCiAgICAgIGV4YW1wbGUgYnVpbHQgb24gOmNsYXNzOmBNdXRhYmxlU2V0YC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sb3JzeXMucnN0IGIvRG9jL2xpYnJhcnkvY29sb3JzeXMucnN0CmluZGV4IDJjYmM3MDQuLmRiYWI3MDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbG9yc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xvcnN5cy5yc3QKQEAgLTUsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IENvbnZlcnNpb24gZnVuY3Rpb25zIGJldHdlZW4gUkdCIGFuZCBvdGhlciBjb2xvciBzeXN0ZW1zLgogLi4gc2VjdGlvbmF1dGhvcjo6IERhdmlkIEFzY2hlciA8ZGFAcHl0aG9uLm5ldD4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY29sb3JzeXMucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBjb2xvcnN5c2AgbW9kdWxlIGRlZmluZXMgYmlkaXJlY3Rpb25hbCBjb252ZXJzaW9ucyBvZiBjb2xvciB2YWx1ZXMKIGJldHdlZW4gY29sb3JzIGV4cHJlc3NlZCBpbiB0aGUgUkdCIChSZWQgR3JlZW4gQmx1ZSkgY29sb3Igc3BhY2UgdXNlZCBpbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAppbmRleCA4YTkzZjliLi5jYjdhMDljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdApAQCAtNTIsMTEgKzUyLDMwIEBACiAgICByZWdleCBpcyB1c2VkIHRvIHNlYXJjaCB0aGUgZnVsbCBwYXRoIHRvIGVhY2ggZmlsZSBjb25zaWRlcmVkIGZvcgogICAgY29tcGlsYXRpb24sIGFuZCBpZiB0aGUgcmVnZXggcHJvZHVjZXMgYSBtYXRjaCwgdGhlIGZpbGUgaXMgc2tpcHBlZC4KIAorLi4gY21kb3B0aW9uOjogLWkgbGlzdAorCisgICBSZWFkIHRoZSBmaWxlIGBgbGlzdGBgIGFuZCBhZGQgZWFjaCBsaW5lIHRoYXQgaXQgY29udGFpbnMgdG8gdGhlIGxpc3Qgb2YKKyAgIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBjb21waWxlLiAgSWYgYGBsaXN0YGAgaXMgYGAtYGAsIHJlYWQgbGluZXMgZnJvbQorICAgYGBzdGRpbmBgLgorCisuLiBjbWRvcHRpb246OiAtYgorCisgICBXcml0ZSB0aGUgYnl0ZS1jb2RlIGZpbGVzIHRvIHRoZWlyIGxlZ2FjeSBsb2NhdGlvbnMgYW5kIG5hbWVzLCB3aGljaCBtYXkKKyAgIG92ZXJ3cml0ZSBieXRlLWNvZGUgZmlsZXMgY3JlYXRlZCBieSBhbm90aGVyIHZlcnNpb24gb2YgUHl0aG9uLiAgVGhlIGRlZmF1bHQKKyAgIGlzIHRvIHdyaXRlIGZpbGVzIHRvIHRoZWlyIDpwZXA6YDMxNDdgIGxvY2F0aW9ucyBhbmQgbmFtZXMsIHdoaWNoIGFsbG93cworICAgYnl0ZS1jb2RlIGZpbGVzIGZyb20gbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIHRvIGNvZXhpc3QuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBBZGRlZCB0aGUgYGAtaWBgLCBgYC1iYGAgYW5kIGBgLWhgYCBvcHRpb25zLgorCitUaGVyZSBpcyBubyBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIGNvbnRyb2wgdGhlIG9wdGltaXphdGlvbiBsZXZlbCB1c2VkIGJ5IHRoZQorOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXRzZWxmIGFscmVhZHkKK3Byb3ZpZGVzIHRoZSBvcHRpb246IDpwcm9ncmFtOmBweXRob24gLU8gLW0gY29tcGlsZWFsbGAuCiAKIFB1YmxpYyBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0KIAotLi4gZnVuY3Rpb246OiBjb21waWxlX2RpcihkaXIsIG1heGxldmVscz0xMCwgZGRpcj1Ob25lLCBmb3JjZT1GYWxzZSwgcng9Tm9uZSwgcXVpZXQ9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzPTEwLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLCBxdWlldD1GYWxzZSwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSkKIAogICAgUmVjdXJzaXZlbHkgZGVzY2VuZCB0aGUgZGlyZWN0b3J5IHRyZWUgbmFtZWQgYnkgKmRpciosIGNvbXBpbGluZyBhbGwgOmZpbGU6YC5weWAKICAgIGZpbGVzIGFsb25nIHRoZSB3YXkuCkBAIC04MCw3ICs5OSw0OSBAQAogICAgSWYgKnF1aWV0KiBpcyB0cnVlLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB1bmxlc3MgZXJyb3JzCiAgICBvY2N1ci4KIAotLi4gZnVuY3Rpb246OiBjb21waWxlX3BhdGgoc2tpcF9jdXJkaXI9VHJ1ZSwgbWF4bGV2ZWxzPTAsIGZvcmNlPUZhbHNlKQorICAgSWYgKmxlZ2FjeSogaXMgdHJ1ZSwgYnl0ZS1jb2RlIGZpbGVzIGFyZSB3cml0dGVuIHRvIHRoZWlyIGxlZ2FjeSBsb2NhdGlvbnMKKyAgIGFuZCBuYW1lcywgd2hpY2ggbWF5IG92ZXJ3cml0ZSBieXRlLWNvZGUgZmlsZXMgY3JlYXRlZCBieSBhbm90aGVyIHZlcnNpb24gb2YKKyAgIFB5dGhvbi4gIFRoZSBkZWZhdWx0IGlzIHRvIHdyaXRlIGZpbGVzIHRvIHRoZWlyIDpwZXA6YDMxNDdgIGxvY2F0aW9ucyBhbmQKKyAgIG5hbWVzLCB3aGljaCBhbGxvd3MgYnl0ZS1jb2RlIGZpbGVzIGZyb20gbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIHRvCisgICBjb2V4aXN0LgorCisgICAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGZvciB0aGUgY29tcGlsZXIuICBJdCBpcyBwYXNzZWQgdG8KKyAgIHRoZSBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCB0aGUgKmxlZ2FjeSogYW5kICpvcHRpbWl6ZSogcGFyYW1ldGVyLgorCisKKy4uIGZ1bmN0aW9uOjogY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLCBxdWlldD1GYWxzZSwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSkKKworICAgQ29tcGlsZSB0aGUgZmlsZSB3aXRoIHBhdGggKmZ1bGxuYW1lKi4KKworICAgSWYgKmRkaXIqIGlzIGdpdmVuLCBpdCBpcyBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gdGhlIGZpbGUgYmVpbmcgY29tcGlsZWQKKyAgIGZvciB1c2UgaW4gY29tcGlsYXRpb24gdGltZSB0cmFjZWJhY2tzLCBhbmQgaXMgYWxzbyBjb21waWxlZCBpbiB0byB0aGUKKyAgIGJ5dGUtY29kZSBmaWxlLCB3aGVyZSBpdCB3aWxsIGJlIHVzZWQgaW4gdHJhY2ViYWNrcyBhbmQgb3RoZXIgbWVzc2FnZXMgaW4KKyAgIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCB0aGUgdGltZSB0aGUgYnl0ZS1jb2RlIGZpbGUgaXMKKyAgIGV4ZWN1dGVkLgorCisgICBJZiAqcngqIGlzIGdpdmVuLCBpdHMgc2VhcmNoIG1ldGhvZCBpcyBwYXNzZWQgdGhlIGZ1bGwgcGF0aCBuYW1lIHRvIHRoZQorICAgZmlsZSBiZWluZyBjb21waWxlZCwgYW5kIGlmIGl0IHJldHVybnMgYSB0cnVlIHZhbHVlLCB0aGUgZmlsZSBpcyBub3QKKyAgIGNvbXBpbGVkIGFuZCBgYFRydWVgYCBpcyByZXR1cm5lZC4KKworICAgSWYgKnF1aWV0KiBpcyB0cnVlLCBub3RoaW5nIGlzIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB1bmxlc3MgZXJyb3JzCisgICBvY2N1ci4KKworICAgSWYgKmxlZ2FjeSogaXMgdHJ1ZSwgYnl0ZS1jb2RlIGZpbGVzIGFyZSB3cml0dGVuIHRvIHRoZWlyIGxlZ2FjeSBsb2NhdGlvbnMKKyAgIGFuZCBuYW1lcywgd2hpY2ggbWF5IG92ZXJ3cml0ZSBieXRlLWNvZGUgZmlsZXMgY3JlYXRlZCBieSBhbm90aGVyIHZlcnNpb24gb2YKKyAgIFB5dGhvbi4gIFRoZSBkZWZhdWx0IGlzIHRvIHdyaXRlIGZpbGVzIHRvIHRoZWlyIDpwZXA6YDMxNDdgIGxvY2F0aW9ucyBhbmQKKyAgIG5hbWVzLCB3aGljaCBhbGxvd3MgYnl0ZS1jb2RlIGZpbGVzIGZyb20gbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIHRvCisgICBjb2V4aXN0LgorCisgICAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIGZvciB0aGUgY29tcGlsZXIuICBJdCBpcyBwYXNzZWQgdG8KKyAgIHRoZSBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogY29tcGlsZV9wYXRoKHNraXBfY3VyZGlyPVRydWUsIG1heGxldmVscz0wLCBmb3JjZT1GYWxzZSwgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSkKIAogICAgQnl0ZS1jb21waWxlIGFsbCB0aGUgOmZpbGU6YC5weWAgZmlsZXMgZm91bmQgYWxvbmcgYGBzeXMucGF0aGBgLiBJZgogICAgKnNraXBfY3VyZGlyKiBpcyB0cnVlICh0aGUgZGVmYXVsdCksIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBub3QgaW5jbHVkZWQKQEAgLTg4LDYgKzE0OSwxMCBAQAogICAgZnVuY3Rpb24uICBOb3RlIHRoYXQgdW5saWtlIHRoZSBvdGhlciBjb21waWxlIGZ1bmN0aW9ucywgYGBtYXhsZXZlbHNgYAogICAgZGVmYXVsdHMgdG8gYGAwYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCB0aGUgKmxlZ2FjeSogYW5kICpvcHRpbWl6ZSogcGFyYW1ldGVyLgorCisKIFRvIGZvcmNlIGEgcmVjb21waWxlIG9mIGFsbCB0aGUgOmZpbGU6YC5weWAgZmlsZXMgaW4gdGhlIDpmaWxlOmBMaWIvYAogc3ViZGlyZWN0b3J5IGFuZCBhbGwgaXRzIHN1YmRpcmVjdG9yaWVzOjoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdCBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVkMTNmMwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTAsMCArMSwzNzEgQEAKKzptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgLS0tIExhdW5jaGluZyBwYXJhbGxlbCB0YXNrcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGNvbmN1cnJlbnQuZnV0dXJlcworICAgOnN5bm9wc2lzOiBFeGVjdXRlIGNvbXB1dGF0aW9ucyBjb25jdXJyZW50bHkgdXNpbmcgdGhyZWFkcyBvciBwcm9jZXNzZXMuCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHlgCithbmQgOnNvdXJjZTpgTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5YAorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2AgbW9kdWxlIHByb3ZpZGVzIGEgaGlnaC1sZXZlbCBpbnRlcmZhY2UgZm9yCithc3luY2hyb25vdXNseSBleGVjdXRpbmcgY2FsbGFibGVzLgorCitUaGUgYXN5bmNocm9ub3VzIGV4ZWN1dGlvbiBjYW4gYmUgYmUgcGVyZm9ybWVkIHdpdGggdGhyZWFkcywgdXNpbmcKKzpjbGFzczpgVGhyZWFkUG9vbEV4ZWN1dG9yYCwgb3Igc2VwYXJhdGUgcHJvY2Vzc2VzLCB1c2luZworOmNsYXNzOmBQcm9jZXNzUG9vbEV4ZWN1dG9yYC4gIEJvdGggaW1wbGVtZW50IHRoZSBzYW1lIGludGVyZmFjZSwgd2hpY2ggaXMKK2RlZmluZWQgYnkgdGhlIGFic3RyYWN0IDpjbGFzczpgRXhlY3V0b3JgIGNsYXNzLgorCisKK0V4ZWN1dG9yIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBFeGVjdXRvcgorCisgICBBbiBhYnN0cmFjdCBjbGFzcyB0aGF0IHByb3ZpZGVzIG1ldGhvZHMgdG8gZXhlY3V0ZSBjYWxscyBhc3luY2hyb25vdXNseS4gIEl0CisgICBzaG91bGQgbm90IGJlIHVzZWQgZGlyZWN0bHksIGJ1dCB0aHJvdWdoIGl0cyBjb25jcmV0ZSBzdWJjbGFzc2VzLgorCisgICAgLi4gbWV0aG9kOjogc3VibWl0KGZuLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICBTY2hlZHVsZXMgdGhlIGNhbGxhYmxlLCAqZm4qLCB0byBiZSBleGVjdXRlZCBhcyBgYGZuKCphcmdzICoqa3dhcmdzKWBgCisgICAgICAgYW5kIHJldHVybnMgYSA6Y2xhc3M6YEZ1dHVyZWAgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZXhlY3V0aW9uIG9mIHRoZQorICAgICAgIGNhbGxhYmxlLiA6OgorCisgICAgICAgICAgd2l0aCBUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9MSkgYXMgZXhlY3V0b3I6CisgICAgICAgICAgICAgIGZ1dHVyZSA9IGV4ZWN1dG9yLnN1Ym1pdChwb3csIDMyMywgMTIzNSkKKyAgICAgICAgICAgICAgcHJpbnQoZnV0dXJlLnJlc3VsdCgpKQorCisgICAgLi4gbWV0aG9kOjogbWFwKGZ1bmMsICppdGVyYWJsZXMsIHRpbWVvdXQ9Tm9uZSkKKworICAgICAgIEVxdWl2YWxlbnQgdG8gYGBtYXAoZnVuYywgKml0ZXJhYmxlcylgYCBleGNlcHQgKmZ1bmMqIGlzIGV4ZWN1dGVkCisgICAgICAgYXN5bmNocm9ub3VzbHkgYW5kIHNldmVyYWwgY2FsbHMgdG8gKmZ1bmMqIG1heSBiZSBtYWRlIGNvbmN1cnJlbnRseS4gIFRoZQorICAgICAgIHJldHVybmVkIGl0ZXJhdG9yIHJhaXNlcyBhIDpleGM6YFRpbWVvdXRFcnJvcmAgaWYgOm1ldGg6YF9fbmV4dF9fKClgIGlzCisgICAgICAgY2FsbGVkIGFuZCB0aGUgcmVzdWx0IGlzbid0IGF2YWlsYWJsZSBhZnRlciAqdGltZW91dCogc2Vjb25kcyBmcm9tIHRoZQorICAgICAgIG9yaWdpbmFsIGNhbGwgdG8gOm1ldGg6YEV4ZWN1dG9yLm1hcGAuICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGEKKyAgICAgICBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGBgTm9uZWBgLCB0aGVyZSBpcyBubyBsaW1pdCB0bworICAgICAgIHRoZSB3YWl0IHRpbWUuICBJZiBhIGNhbGwgcmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlbiB0aGF0IGV4Y2VwdGlvbiB3aWxsCisgICAgICAgYmUgcmFpc2VkIHdoZW4gaXRzIHZhbHVlIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvci4KKworICAgIC4uIG1ldGhvZDo6IHNodXRkb3duKHdhaXQ9VHJ1ZSkKKworICAgICAgIFNpZ25hbCB0aGUgZXhlY3V0b3IgdGhhdCBpdCBzaG91bGQgZnJlZSBhbnkgcmVzb3VyY2VzIHRoYXQgaXQgaXMgdXNpbmcKKyAgICAgICB3aGVuIHRoZSBjdXJyZW50bHkgcGVuZGluZyBmdXR1cmVzIGFyZSBkb25lIGV4ZWN1dGluZy4gIENhbGxzIHRvCisgICAgICAgOm1ldGg6YEV4ZWN1dG9yLnN1Ym1pdGAgYW5kIDptZXRoOmBFeGVjdXRvci5tYXBgIG1hZGUgYWZ0ZXIgc2h1dGRvd24gd2lsbAorICAgICAgIHJhaXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAuCisKKyAgICAgICBJZiAqd2FpdCogaXMgYGBUcnVlYGAgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIG5vdCByZXR1cm4gdW50aWwgYWxsIHRoZQorICAgICAgIHBlbmRpbmcgZnV0dXJlcyBhcmUgZG9uZSBleGVjdXRpbmcgYW5kIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgIGV4ZWN1dG9yIGhhdmUgYmVlbiBmcmVlZC4gIElmICp3YWl0KiBpcyBgYEZhbHNlYGAgdGhlbiB0aGlzIG1ldGhvZCB3aWxsCisgICAgICAgcmV0dXJuIGltbWVkaWF0ZWx5IGFuZCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0b3Igd2lsbCBiZQorICAgICAgIGZyZWVkIHdoZW4gYWxsIHBlbmRpbmcgZnV0dXJlcyBhcmUgZG9uZSBleGVjdXRpbmcuICBSZWdhcmRsZXNzIG9mIHRoZQorICAgICAgIHZhbHVlIG9mICp3YWl0KiwgdGhlIGVudGlyZSBQeXRob24gcHJvZ3JhbSB3aWxsIG5vdCBleGl0IHVudGlsIGFsbAorICAgICAgIHBlbmRpbmcgZnV0dXJlcyBhcmUgZG9uZSBleGVjdXRpbmcuCisKKyAgICAgICBZb3UgY2FuIGF2b2lkIGhhdmluZyB0byBjYWxsIHRoaXMgbWV0aG9kIGV4cGxpY2l0bHkgaWYgeW91IHVzZSB0aGUKKyAgICAgICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCB3aGljaCB3aWxsIHNodXRkb3duIHRoZSA6Y2xhc3M6YEV4ZWN1dG9yYAorICAgICAgICh3YWl0aW5nIGFzIGlmIDptZXRoOmBFeGVjdXRvci5zaHV0ZG93bmAgd2VyZSBjYWxsZWQgd2l0aCAqd2FpdCogc2V0IHRvCisgICAgICAgYGBUcnVlYGApOjoKKworICAgICAgICAgIGltcG9ydCBzaHV0aWwKKyAgICAgICAgICB3aXRoIFRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz00KSBhcyBlOgorICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzEudHh0JywgJ2Rlc3QxLnR4dCcpCisgICAgICAgICAgICAgIGUuc3VibWl0KHNodXRpbC5jb3B5LCAnc3JjMi50eHQnLCAnZGVzdDIudHh0JykKKyAgICAgICAgICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMzLnR4dCcsICdkZXN0My50eHQnKQorICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzMudHh0JywgJ2Rlc3Q0LnR4dCcpCisKKworVGhyZWFkUG9vbEV4ZWN1dG9yCistLS0tLS0tLS0tLS0tLS0tLS0KKworOmNsYXNzOmBUaHJlYWRQb29sRXhlY3V0b3JgIGlzIGEgOmNsYXNzOmBFeGVjdXRvcmAgc3ViY2xhc3MgdGhhdCB1c2VzIGEgcG9vbCBvZgordGhyZWFkcyB0byBleGVjdXRlIGNhbGxzIGFzeW5jaHJvbm91c2x5LgorCitEZWFkbG9ja3MgY2FuIG9jY3VyIHdoZW4gdGhlIGNhbGxhYmxlIGFzc29jaWF0ZWQgd2l0aCBhIDpjbGFzczpgRnV0dXJlYCB3YWl0cyBvbgordGhlIHJlc3VsdHMgb2YgYW5vdGhlciA6Y2xhc3M6YEZ1dHVyZWAuICBGb3IgZXhhbXBsZTo6CisKKyAgIGltcG9ydCB0aW1lCisgICBkZWYgd2FpdF9vbl9iKCk6CisgICAgICAgdGltZS5zbGVlcCg1KQorICAgICAgIHByaW50KGIucmVzdWx0KCkpICMgYiB3aWxsIG5ldmVyIGNvbXBsZXRlIGJlY2F1c2UgaXQgaXMgd2FpdGluZyBvbiBhLgorICAgICAgIHJldHVybiA1CisKKyAgIGRlZiB3YWl0X29uX2EoKToKKyAgICAgICB0aW1lLnNsZWVwKDUpCisgICAgICAgcHJpbnQoYS5yZXN1bHQoKSkgIyBhIHdpbGwgbmV2ZXIgY29tcGxldGUgYmVjYXVzZSBpdCBpcyB3YWl0aW5nIG9uIGIuCisgICAgICAgcmV0dXJuIDYKKworCisgICBleGVjdXRvciA9IFRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz0yKQorICAgYSA9IGV4ZWN1dG9yLnN1Ym1pdCh3YWl0X29uX2IpCisgICBiID0gZXhlY3V0b3Iuc3VibWl0KHdhaXRfb25fYSkKKworQW5kOjoKKworICAgZGVmIHdhaXRfb25fZnV0dXJlKCk6CisgICAgICAgZiA9IGV4ZWN1dG9yLnN1Ym1pdChwb3csIDUsIDIpCisgICAgICAgIyBUaGlzIHdpbGwgbmV2ZXIgY29tcGxldGUgYmVjYXVzZSB0aGVyZSBpcyBvbmx5IG9uZSB3b3JrZXIgdGhyZWFkIGFuZAorICAgICAgICMgaXQgaXMgZXhlY3V0aW5nIHRoaXMgZnVuY3Rpb24uCisgICAgICAgcHJpbnQoZi5yZXN1bHQoKSkKKworICAgZXhlY3V0b3IgPSBUaHJlYWRQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9MSkKKyAgIGV4ZWN1dG9yLnN1Ym1pdCh3YWl0X29uX2Z1dHVyZSkKKworCisuLiBjbGFzczo6IFRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2VycykKKworICAgQW4gOmNsYXNzOmBFeGVjdXRvcmAgc3ViY2xhc3MgdGhhdCB1c2VzIGEgcG9vbCBvZiBhdCBtb3N0ICptYXhfd29ya2VycyoKKyAgIHRocmVhZHMgdG8gZXhlY3V0ZSBjYWxscyBhc3luY2hyb25vdXNseS4KKworCisuLiBfdGhyZWFkcG9vbGV4ZWN1dG9yLWV4YW1wbGU6CisKK1RocmVhZFBvb2xFeGVjdXRvciBFeGFtcGxlCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorOjoKKworICAgaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworICAgaW1wb3J0IHVybGxpYi5yZXF1ZXN0CisKKyAgIFVSTFMgPSBbJ2h0dHA6Ly93d3cuZm94bmV3cy5jb20vJywKKyAgICAgICAgICAgJ2h0dHA6Ly93d3cuY25uLmNvbS8nLAorICAgICAgICAgICAnaHR0cDovL2V1cm9wZS53c2ouY29tLycsCisgICAgICAgICAgICdodHRwOi8vd3d3LmJiYy5jby51ay8nLAorICAgICAgICAgICAnaHR0cDovL3NvbWUtbWFkZS11cC1kb21haW4uY29tLyddCisKKyAgIGRlZiBsb2FkX3VybCh1cmwsIHRpbWVvdXQpOgorICAgICAgIHJldHVybiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgdGltZW91dD10aW1lb3V0KS5yZWFkKCkKKworICAgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzPTUpIGFzIGV4ZWN1dG9yOgorICAgICAgIGZ1dHVyZV90b191cmwgPSBkaWN0KChleGVjdXRvci5zdWJtaXQobG9hZF91cmwsIHVybCwgNjApLCB1cmwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHVybCBpbiBVUkxTKQorCisgICAgICAgZm9yIGZ1dHVyZSBpbiBjb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVkKGZ1dHVyZV90b191cmwpOgorICAgICAgICAgICB1cmwgPSBmdXR1cmVfdG9fdXJsW2Z1dHVyZV0KKyAgICAgICAgICAgaWYgZnV0dXJlLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgcHJpbnQoJyVyIGdlbmVyYXRlZCBhbiBleGNlcHRpb246ICVzJyAlICh1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICBwcmludCgnJXIgcGFnZSBpcyAlZCBieXRlcycgJSAodXJsLCBsZW4oZnV0dXJlLnJlc3VsdCgpKSkpCisKKworUHJvY2Vzc1Bvb2xFeGVjdXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmBQcm9jZXNzUG9vbEV4ZWN1dG9yYCBjbGFzcyBpcyBhbiA6Y2xhc3M6YEV4ZWN1dG9yYCBzdWJjbGFzcyB0aGF0Cit1c2VzIGEgcG9vbCBvZiBwcm9jZXNzZXMgdG8gZXhlY3V0ZSBjYWxscyBhc3luY2hyb25vdXNseS4KKzpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgdXNlcyB0aGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUsIHdoaWNoCithbGxvd3MgaXQgdG8gc2lkZS1zdGVwIHRoZSA6dGVybTpgR2xvYmFsIEludGVycHJldGVyIExvY2tgIGJ1dCBhbHNvIG1lYW5zIHRoYXQKK29ubHkgcGlja2xhYmxlIG9iamVjdHMgY2FuIGJlIGV4ZWN1dGVkIGFuZCByZXR1cm5lZC4KKworQ2FsbGluZyA6Y2xhc3M6YEV4ZWN1dG9yYCBvciA6Y2xhc3M6YEZ1dHVyZWAgbWV0aG9kcyBmcm9tIGEgY2FsbGFibGUgc3VibWl0dGVkCit0byBhIDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suCisKKy4uIGNsYXNzOjogUHJvY2Vzc1Bvb2xFeGVjdXRvcihtYXhfd29ya2Vycz1Ob25lKQorCisgICBBbiA6Y2xhc3M6YEV4ZWN1dG9yYCBzdWJjbGFzcyB0aGF0IGV4ZWN1dGVzIGNhbGxzIGFzeW5jaHJvbm91c2x5IHVzaW5nIGEgcG9vbAorICAgb2YgYXQgbW9zdCAqbWF4X3dvcmtlcnMqIHByb2Nlc3Nlcy4gIElmICptYXhfd29ya2VycyogaXMgYGBOb25lYGAgb3Igbm90CisgICBnaXZlbiwgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycyBvbiB0aGUgbWFjaGluZS4KKworCisuLiBfcHJvY2Vzc3Bvb2xleGVjdXRvci1leGFtcGxlOgorCitQcm9jZXNzUG9vbEV4ZWN1dG9yIEV4YW1wbGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorOjoKKworICAgaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworICAgaW1wb3J0IG1hdGgKKworICAgUFJJTUVTID0gWworICAgICAgIDExMjI3MjUzNTA5NTI5MywKKyAgICAgICAxMTI1ODI3MDU5NDIxNzEsCisgICAgICAgMTEyMjcyNTM1MDk1MjkzLAorICAgICAgIDExNTI4MDA5NTE5MDc3MywKKyAgICAgICAxMTU3OTc4NDgwNzcwOTksCisgICAgICAgMTA5OTcyNjg5OTI4NTQxOV0KKworICAgZGVmIGlzX3ByaW1lKG4pOgorICAgICAgIGlmIG4gJSAyID09IDA6CisgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgc3FydF9uID0gaW50KG1hdGguZmxvb3IobWF0aC5zcXJ0KG4pKSkKKyAgICAgICBmb3IgaSBpbiByYW5nZSgzLCBzcXJ0X24gKyAxLCAyKToKKyAgICAgICAgICAgaWYgbiAlIGkgPT0gMDoKKyAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgIHJldHVybiBUcnVlCisKKyAgIGRlZiBtYWluKCk6CisgICAgICAgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcigpIGFzIGV4ZWN1dG9yOgorICAgICAgICAgICBmb3IgbnVtYmVyLCBwcmltZSBpbiB6aXAoUFJJTUVTLCBleGVjdXRvci5tYXAoaXNfcHJpbWUsIFBSSU1FUykpOgorICAgICAgICAgICAgICAgcHJpbnQoJyVkIGlzIHByaW1lOiAlcycgJSAobnVtYmVyLCBwcmltZSkpCisKKyAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgbWFpbigpCisKKworRnV0dXJlIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEZ1dHVyZWAgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhc3luY2hyb25vdXMgZXhlY3V0aW9uIG9mIGEgY2FsbGFibGUuCis6Y2xhc3M6YEZ1dHVyZWAgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGJ5IDptZXRoOmBFeGVjdXRvci5zdWJtaXRgLgorCisuLiBjbGFzczo6IEZ1dHVyZQorCisgICBFbmNhcHN1bGF0ZXMgdGhlIGFzeW5jaHJvbm91cyBleGVjdXRpb24gb2YgYSBjYWxsYWJsZS4gIDpjbGFzczpgRnV0dXJlYAorICAgaW5zdGFuY2VzIGFyZSBjcmVhdGVkIGJ5IDptZXRoOmBFeGVjdXRvci5zdWJtaXRgIGFuZCBzaG91bGQgbm90IGJlIGNyZWF0ZWQKKyAgIGRpcmVjdGx5IGV4Y2VwdCBmb3IgdGVzdGluZy4KKworICAgIC4uIG1ldGhvZDo6IGNhbmNlbCgpCisKKyAgICAgICBBdHRlbXB0IHRvIGNhbmNlbCB0aGUgY2FsbC4gIElmIHRoZSBjYWxsIGlzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCBhbmQKKyAgICAgICBjYW5ub3QgYmUgY2FuY2VsbGVkIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBgYEZhbHNlYGAsIG90aGVyd2lzZSB0aGUKKyAgICAgICBjYWxsIHdpbGwgYmUgY2FuY2VsbGVkIGFuZCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgLi4gbWV0aG9kOjogY2FuY2VsbGVkKCkKKworICAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgY2FsbCB3YXMgc3VjY2Vzc2Z1bGx5IGNhbmNlbGxlZC4KKworICAgIC4uIG1ldGhvZDo6IHJ1bm5pbmcoKQorCisgICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBjYWxsIGlzIGN1cnJlbnRseSBiZWluZyBleGVjdXRlZCBhbmQgY2Fubm90IGJlCisgICAgICAgY2FuY2VsbGVkLgorCisgICAgLi4gbWV0aG9kOjogZG9uZSgpCisKKyAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGNhbGwgd2FzIHN1Y2Nlc3NmdWxseSBjYW5jZWxsZWQgb3IgZmluaXNoZWQKKyAgICAgICBydW5uaW5nLgorCisgICAgLi4gbWV0aG9kOjogcmVzdWx0KHRpbWVvdXQ9Tm9uZSkKKworICAgICAgIFJldHVybiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGNhbGwuIElmIHRoZSBjYWxsIGhhc24ndCB5ZXQgY29tcGxldGVkCisgICAgICAgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgdXAgdG8gKnRpbWVvdXQqIHNlY29uZHMuICBJZiB0aGUgY2FsbCBoYXNuJ3QKKyAgICAgICBjb21wbGV0ZWQgaW4gKnRpbWVvdXQqIHNlY29uZHMsIHRoZW4gYSA6ZXhjOmBUaW1lb3V0RXJyb3JgIHdpbGwgYmUKKyAgICAgICByYWlzZWQuICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LiAgSWYgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQKKyAgICAgICBvciBgYE5vbmVgYCwgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIHdhaXQgdGltZS4KKworICAgICAgIElmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkIGJlZm9yZSBjb21wbGV0aW5nIHRoZW4gOmV4YzpgQ2FuY2VsbGVkRXJyb3JgCisgICAgICAgd2lsbCBiZSByYWlzZWQuCisKKyAgICAgICBJZiB0aGUgY2FsbCByYWlzZWQsIHRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgdGhlIHNhbWUgZXhjZXB0aW9uLgorCisgICAgLi4gbWV0aG9kOjogZXhjZXB0aW9uKHRpbWVvdXQ9Tm9uZSkKKworICAgICAgIFJldHVybiB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgY2FsbC4gIElmIHRoZSBjYWxsIGhhc24ndCB5ZXQKKyAgICAgICBjb21wbGV0ZWQgdGhlbiB0aGlzIG1ldGhvZCB3aWxsIHdhaXQgdXAgdG8gKnRpbWVvdXQqIHNlY29uZHMuICBJZiB0aGUKKyAgICAgICBjYWxsIGhhc24ndCBjb21wbGV0ZWQgaW4gKnRpbWVvdXQqIHNlY29uZHMsIHRoZW4gYSA6ZXhjOmBUaW1lb3V0RXJyb3JgCisgICAgICAgd2lsbCBiZSByYWlzZWQuICAqdGltZW91dCogY2FuIGJlIGFuIGludCBvciBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3QKKyAgICAgICBzcGVjaWZpZWQgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCisKKyAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZCBiZWZvcmUgY29tcGxldGluZyB0aGVuIDpleGM6YENhbmNlbGxlZEVycm9yYAorICAgICAgIHdpbGwgYmUgcmFpc2VkLgorCisgICAgICAgSWYgdGhlIGNhbGwgY29tcGxldGVkIHdpdGhvdXQgcmFpc2luZywgYGBOb25lYGAgaXMgcmV0dXJuZWQuCisKKyAgICAuLiBtZXRob2Q6OiBhZGRfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgIEF0dGFjaGVzIHRoZSBjYWxsYWJsZSAqZm4qIHRvIHRoZSBmdXR1cmUuICAqZm4qIHdpbGwgYmUgY2FsbGVkLCB3aXRoIHRoZQorICAgICAgIGZ1dHVyZSBhcyBpdHMgb25seSBhcmd1bWVudCwgd2hlbiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZCBvciBmaW5pc2hlcworICAgICAgIHJ1bm5pbmcuCisKKyAgICAgICBBZGRlZCBjYWxsYWJsZXMgYXJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgYWRkZWQgYW5kIGFyZQorICAgICAgIGFsd2F5cyBjYWxsZWQgaW4gYSB0aHJlYWQgYmVsb25naW5nIHRvIHRoZSBwcm9jZXNzIHRoYXQgYWRkZWQgdGhlbS4gIElmCisgICAgICAgdGhlIGNhbGxhYmxlIHJhaXNlcyBhIDpleGM6YEV4Y2VwdGlvbmAgc3ViY2xhc3MsIGl0IHdpbGwgYmUgbG9nZ2VkIGFuZAorICAgICAgIGlnbm9yZWQuICBJZiB0aGUgY2FsbGFibGUgcmFpc2VzIGEgOmV4YzpgQmFzZUV4Y2VwdGlvbmAgc3ViY2xhc3MsIHRoZQorICAgICAgIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KKworICAgICAgIElmIHRoZSBmdXR1cmUgaGFzIGFscmVhZHkgY29tcGxldGVkIG9yIGJlZW4gY2FuY2VsbGVkLCAqZm4qIHdpbGwgYmUKKyAgICAgICBjYWxsZWQgaW1tZWRpYXRlbHkuCisKKyAgIFRoZSBmb2xsb3dpbmcgOmNsYXNzOmBGdXR1cmVgIG1ldGhvZHMgYXJlIG1lYW50IGZvciB1c2UgaW4gdW5pdCB0ZXN0cyBhbmQKKyAgIDpjbGFzczpgRXhlY3V0b3JgIGltcGxlbWVudGF0aW9ucy4KKworICAgIC4uIG1ldGhvZDo6IHNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKQorCisgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IDpjbGFzczpgRXhlY3V0b3JgIGltcGxlbWVudGF0aW9ucworICAgICAgIGJlZm9yZSBleGVjdXRpbmcgdGhlIHdvcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgYW5kIGJ5IHVuaXQKKyAgICAgICB0ZXN0cy4KKworICAgICAgIElmIHRoZSBtZXRob2QgcmV0dXJucyBgYEZhbHNlYGAgdGhlbiB0aGUgOmNsYXNzOmBGdXR1cmVgIHdhcyBjYW5jZWxsZWQsCisgICAgICAgaS5lLiA6bWV0aDpgRnV0dXJlLmNhbmNlbGAgd2FzIGNhbGxlZCBhbmQgcmV0dXJuZWQgYFRydWVgLiAgQW55IHRocmVhZHMKKyAgICAgICB3YWl0aW5nIG9uIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgY29tcGxldGluZyAoaS5lLiB0aHJvdWdoCisgICAgICAgOmZ1bmM6YGFzX2NvbXBsZXRlZGAgb3IgOmZ1bmM6YHdhaXRgKSB3aWxsIGJlIHdva2VuIHVwLgorCisgICAgICAgSWYgdGhlIG1ldGhvZCByZXR1cm5zIGBgVHJ1ZWBgIHRoZW4gdGhlIDpjbGFzczpgRnV0dXJlYCB3YXMgbm90IGNhbmNlbGxlZAorICAgICAgIGFuZCBoYXMgYmVlbiBwdXQgaW4gdGhlIHJ1bm5pbmcgc3RhdGUsIGkuZS4gY2FsbHMgdG8KKyAgICAgICA6bWV0aDpgRnV0dXJlLnJ1bm5pbmdgIHdpbGwgcmV0dXJuIGBUcnVlYC4KKworICAgICAgIFRoaXMgbWV0aG9kIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlIGFuZCBjYW5ub3QgYmUgY2FsbGVkIGFmdGVyCisgICAgICAgOm1ldGg6YEZ1dHVyZS5zZXRfcmVzdWx0YCBvciA6bWV0aDpgRnV0dXJlLnNldF9leGNlcHRpb25gIGhhdmUgYmVlbgorICAgICAgIGNhbGxlZC4KKworICAgIC4uIG1ldGhvZDo6IHNldF9yZXN1bHQocmVzdWx0KQorCisgICAgICAgU2V0cyB0aGUgcmVzdWx0IG9mIHRoZSB3b3JrIGFzc29jaWF0ZWQgd2l0aCB0aGUgOmNsYXNzOmBGdXR1cmVgIHRvCisgICAgICAgKnJlc3VsdCouCisKKyAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgb25seSBiZSB1c2VkIGJ5IDpjbGFzczpgRXhlY3V0b3JgIGltcGxlbWVudGF0aW9ucyBhbmQKKyAgICAgICB1bml0IHRlc3RzLgorCisgICAgLi4gbWV0aG9kOjogc2V0X2V4Y2VwdGlvbihleGNlcHRpb24pCisKKyAgICAgICBTZXRzIHRoZSByZXN1bHQgb2YgdGhlIHdvcmsgYXNzb2NpYXRlZCB3aXRoIHRoZSA6Y2xhc3M6YEZ1dHVyZWAgdG8gdGhlCisgICAgICAgOmNsYXNzOmBFeGNlcHRpb25gICpleGNlcHRpb24qLgorCisgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSA6Y2xhc3M6YEV4ZWN1dG9yYCBpbXBsZW1lbnRhdGlvbnMgYW5kCisgICAgICAgdW5pdCB0ZXN0cy4KKworCitNb2R1bGUgRnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogd2FpdChmcywgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKQorCisgICBXYWl0IGZvciB0aGUgOmNsYXNzOmBGdXR1cmVgIGluc3RhbmNlcyAocG9zc2libHkgY3JlYXRlZCBieSBkaWZmZXJlbnQKKyAgIDpjbGFzczpgRXhlY3V0b3JgIGluc3RhbmNlcykgZ2l2ZW4gYnkgKmZzKiB0byBjb21wbGV0ZS4gIFJldHVybnMgYSBuYW1lZAorICAgMi10dXBsZSBvZiBzZXRzLiAgVGhlIGZpcnN0IHNldCwgbmFtZWQgYGBkb25lYGAsIGNvbnRhaW5zIHRoZSBmdXR1cmVzIHRoYXQKKyAgIGNvbXBsZXRlZCAoZmluaXNoZWQgb3Igd2VyZSBjYW5jZWxsZWQpIGJlZm9yZSB0aGUgd2FpdCBjb21wbGV0ZWQuICBUaGUgc2Vjb25kCisgICBzZXQsIG5hbWVkIGBgbm90X2RvbmVgYCwgY29udGFpbnMgdW5jb21wbGV0ZWQgZnV0dXJlcy4KKworICAgKnRpbWVvdXQqIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdCBiZWZvcmUKKyAgIHJldHVybmluZy4gICp0aW1lb3V0KiBjYW4gYmUgYW4gaW50IG9yIGZsb2F0LiAgSWYgKnRpbWVvdXQqIGlzIG5vdCBzcGVjaWZpZWQKKyAgIG9yIGBgTm9uZWBgLCB0aGVyZSBpcyBubyBsaW1pdCB0byB0aGUgd2FpdCB0aW1lLgorCisgICAqcmV0dXJuX3doZW4qIGluZGljYXRlcyB3aGVuIHRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybi4gIEl0IG11c3QgYmUgb25lIG9mCisgICB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCA6Y29uc3Q6YEZJUlNUX0NPTVBMRVRFRGAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbnkgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZSBmaW5pc2hlcyBvciBpcyBjYW5jZWxsZWQuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YEZJUlNUX0VYQ0VQVElPTmAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbnkgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZSBmaW5pc2hlcyBieSByYWlzaW5nIGFuICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZXhjZXB0aW9uLiAgSWYgbm8gZnV0dXJlIHJhaXNlcyBhbiAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24gdGhlbiBpdCBpcyBlcXVpdmFsZW50IHRvICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjb25zdDpgQUxMX0NPTVBMRVRFRGAuICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YEFMTF9DT01QTEVURURgICAgICAgfCBUaGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gd2hlbiBhbGwgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZ1dHVyZXMgZmluaXNoIG9yIGFyZSBjYW5jZWxsZWQuICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBmdW5jdGlvbjo6IGFzX2NvbXBsZXRlZChmcywgdGltZW91dD1Ob25lKQorCisgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIDpjbGFzczpgRnV0dXJlYCBpbnN0YW5jZXMgKHBvc3NpYmx5IGNyZWF0ZWQgYnkKKyAgIGRpZmZlcmVudCA6Y2xhc3M6YEV4ZWN1dG9yYCBpbnN0YW5jZXMpIGdpdmVuIGJ5ICpmcyogdGhhdCB5aWVsZHMgZnV0dXJlcyBhcworICAgdGhleSBjb21wbGV0ZSAoZmluaXNoZWQgb3Igd2VyZSBjYW5jZWxsZWQpLiAgQW55IGZ1dHVyZXMgdGhhdCBjb21wbGV0ZWQKKyAgIGJlZm9yZSA6ZnVuYzpgYXNfY29tcGxldGVkYCBpcyBjYWxsZWQgd2lsbCBiZSB5aWVsZGVkIGZpcnN0LiAgVGhlIHJldHVybmVkCisgICBpdGVyYXRvciByYWlzZXMgYSA6ZXhjOmBUaW1lb3V0RXJyb3JgIGlmIDptZXRoOmBfX25leHRfX2AgaXMgY2FsbGVkIGFuZCB0aGUKKyAgIHJlc3VsdCBpc24ndCBhdmFpbGFibGUgYWZ0ZXIgKnRpbWVvdXQqIHNlY29uZHMgZnJvbSB0aGUgb3JpZ2luYWwgY2FsbCB0bworICAgOmZ1bmM6YGFzX2NvbXBsZXRlZGAuICAqdGltZW91dCogY2FuIGJlIGFuIGludCBvciBmbG9hdC4gIElmICp0aW1lb3V0KiBpcyBub3QKKyAgIHNwZWNpZmllZCBvciBgYE5vbmVgYCwgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIHdhaXQgdGltZS4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzE0OGAgLS0gZnV0dXJlcyAtIGV4ZWN1dGUgY29tcHV0YXRpb25zIGFzeW5jaHJvbm91c2x5CisgICAgICBUaGUgcHJvcG9zYWwgd2hpY2ggZGVzY3JpYmVkIHRoaXMgZmVhdHVyZSBmb3IgaW5jbHVzaW9uIGluIHRoZSBQeXRob24KKyAgICAgIHN0YW5kYXJkIGxpYnJhcnkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0IGIvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdAppbmRleCAyY2VmMjMyLi4xYTg4YmJkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKQEAgLTcsNyArNyw5IEBACiAuLiBtb2R1bGVhdXRob3I6OiBLZW4gTWFuaGVpbWVyIDxrbG1Aem9wZS5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBCYXJyeSBXYXJzYXcgPGJ3YXJzYXdAcHl0aG9uLm9yZz4KIC4uIG1vZHVsZWF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPgorLi4gbW9kdWxlYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogLi4gc2VjdGlvbmF1dGhvcjo6IENocmlzdG9waGVyIEcuIFBldHJpbGxpIDxwZXRyaWxsaUBhbWJlci5vcmc+CisuLiBzZWN0aW9uYXV0aG9yOjogxYF1a2FzeiBMYW5nYSA8bHVrYXN6QGxhbmdhLnBsPgogCiAuLiBpbmRleDo6CiAgICBwYWlyOiAuaW5pOyBmaWxlCkBAIC0xNSwxMSArMTcsMTAgQEAKICAgIHNpbmdsZTogaW5pIGZpbGUKICAgIHNpbmdsZTogV2luZG93cyBpbmkgZmlsZQogCi1UaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBjbGFzcyA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAuICAgVGhlIDpjbGFzczpgQ29uZmlnUGFyc2VyYAotY2xhc3MgaW1wbGVtZW50cyBhIGJhc2ljIGNvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgbGFuZ3VhZ2Ugd2hpY2ggcHJvdmlkZXMgYQotc3RydWN0dXJlIHNpbWlsYXIgdG8gd2hhdCB5b3Ugd291bGQgZmluZCBvbiBNaWNyb3NvZnQgV2luZG93cyBJTkkgZmlsZXMuICBZb3UKLWNhbiB1c2UgdGhpcyB0byB3cml0ZSBQeXRob24gcHJvZ3JhbXMgd2hpY2ggY2FuIGJlIGN1c3RvbWl6ZWQgYnkgZW5kIHVzZXJzCi1lYXNpbHkuCitUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgYSBiYXNpYworY29uZmlndXJhdGlvbiBsYW5ndWFnZSB3aGljaCBwcm92aWRlcyBhIHN0cnVjdHVyZSBzaW1pbGFyIHRvIHdoYXQncyBmb3VuZCBpbgorTWljcm9zb2Z0IFdpbmRvd3MgSU5JIGZpbGVzLiAgWW91IGNhbiB1c2UgdGhpcyB0byB3cml0ZSBQeXRob24gcHJvZ3JhbXMgd2hpY2gKK2NhbiBiZSBjdXN0b21pemVkIGJ5IGVuZCB1c2VycyBlYXNpbHkuCiAKIC4uIG5vdGU6OgogCkBAIC0zNiwzNjEgKzM3LDcyNiBAQAogICAgICAgVGhlIGpzb24gbW9kdWxlIGltcGxlbWVudHMgYSBzdWJzZXQgb2YgSmF2YVNjcmlwdCBzeW50YXggd2hpY2ggY2FuIGFsc28KICAgICAgIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS4KIAotVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucywgbGVkIGJ5IGEgYGBbc2VjdGlvbl1gYCBoZWFkZXIgYW5kCi1mb2xsb3dlZCBieSBgYG5hbWU6IHZhbHVlYGAgZW50cmllcywgd2l0aCBjb250aW51YXRpb25zIGluIHRoZSBzdHlsZSBvZgotOnJmYzpgODIyYCAoc2VlIHNlY3Rpb24gMy4xLjEsICJMT05HIEhFQURFUiBGSUVMRFMiKTsgYGBuYW1lPXZhbHVlYGAgaXMgYWxzbwotYWNjZXB0ZWQuICBOb3RlIHRoYXQgbGVhZGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgZnJvbSB2YWx1ZXMuIFRoZSBvcHRpb25hbAotdmFsdWVzIGNhbiBjb250YWluIGZvcm1hdCBzdHJpbmdzIHdoaWNoIHJlZmVyIHRvIG90aGVyIHZhbHVlcyBpbiB0aGUgc2FtZQotc2VjdGlvbiwgb3IgdmFsdWVzIGluIGEgc3BlY2lhbCBgYERFRkFVTFRgYCBzZWN0aW9uLiAgQWRkaXRpb25hbCBkZWZhdWx0cyBjYW4gYmUKLXByb3ZpZGVkIG9uIGluaXRpYWxpemF0aW9uIGFuZCByZXRyaWV2YWwuICBMaW5lcyBiZWdpbm5pbmcgd2l0aCBgYCcjJ2BgIG9yCi1gYCc7J2BgIGFyZSBpZ25vcmVkIGFuZCBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGNvbW1lbnRzLgogCi1Db25maWd1cmF0aW9uIGZpbGVzIG1heSBpbmNsdWRlIGNvbW1lbnRzLCBwcmVmaXhlZCBieSBzcGVjaWZpYyBjaGFyYWN0ZXJzIChgYCNgYAotYW5kIGBgO2BgKS4gIENvbW1lbnRzIG1heSBhcHBlYXIgb24gdGhlaXIgb3duIGluIGFuIG90aGVyd2lzZSBlbXB0eSBsaW5lLCBvciBtYXkKLWJlIGVudGVyZWQgaW4gbGluZXMgaG9sZGluZyB2YWx1ZXMgb3Igc2VjdGlvbiBuYW1lcy4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhleQotbmVlZCB0byBiZSBwcmVjZWRlZCBieSBhIHdoaXRlc3BhY2UgY2hhcmFjdGVyIHRvIGJlIHJlY29nbml6ZWQgYXMgYSBjb21tZW50LgotKEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgb25seSBgYDtgYCBzdGFydHMgYW4gaW5saW5lIGNvbW1lbnQsIHdoaWxlIGBgI2BgCi1kb2VzIG5vdC4pCitRdWljayBTdGFydAorLS0tLS0tLS0tLS0KIAotT24gdG9wIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIDpjbGFzczpgU2FmZUNvbmZpZ1BhcnNlcmAgc3VwcG9ydHMKLWludGVycG9sYXRpb24uICBUaGlzIG1lYW5zIHZhbHVlcyBjYW4gY29udGFpbiBmb3JtYXQgc3RyaW5ncyB3aGljaCByZWZlciB0bwotb3RoZXIgdmFsdWVzIGluIHRoZSBzYW1lIHNlY3Rpb24sIG9yIHZhbHVlcyBpbiBhIHNwZWNpYWwgYGBERUZBVUxUYGAgc2VjdGlvbi4KLUFkZGl0aW9uYWwgZGVmYXVsdHMgY2FuIGJlIHByb3ZpZGVkIG9uIGluaXRpYWxpemF0aW9uLgorTGV0J3MgdGFrZSBhIHZlcnkgYmFzaWMgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgbG9va3MgbGlrZSB0aGlzOgogCi1Gb3IgZXhhbXBsZTo6CisuLiBjb2RlLWJsb2NrOjogaW5pCiAKLSAgIFtNeSBTZWN0aW9uXQotICAgZm9vZGlyOiAlKGRpcilzL3doYXRldmVyCi0gICBkaXI9ZnJvYgotICAgbG9uZzogdGhpcyB2YWx1ZSBjb250aW51ZXMKLSAgICAgIGluIHRoZSBuZXh0IGxpbmUKKyAgIFtERUZBVUxUXQorICAgU2VydmVyQWxpdmVJbnRlcnZhbCA9IDQ1CisgICBDb21wcmVzc2lvbiA9IHllcworICAgQ29tcHJlc3Npb25MZXZlbCA9IDkKKyAgIEZvcndhcmRYMTEgPSB5ZXMKIAotd291bGQgcmVzb2x2ZSB0aGUgYGAlKGRpcilzYGAgdG8gdGhlIHZhbHVlIG9mIGBgZGlyYGAgKGBgZnJvYmBgIGluIHRoaXMgY2FzZSkuCi1BbGwgcmVmZXJlbmNlIGV4cGFuc2lvbnMgYXJlIGRvbmUgb24gZGVtYW5kLgorICAgW2JpdGJ1Y2tldC5vcmddCisgICBVc2VyID0gaGcKIAotRGVmYXVsdCB2YWx1ZXMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXNzaW5nIHRoZW0gaW50byB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgCi1jb25zdHJ1Y3RvciBhcyBhIGRpY3Rpb25hcnkuICBBZGRpdGlvbmFsIGRlZmF1bHRzICBtYXkgYmUgcGFzc2VkIGludG8gdGhlCi06bWV0aDpgZ2V0YCBtZXRob2Qgd2hpY2ggd2lsbCBvdmVycmlkZSBhbGwgb3RoZXJzLgorICAgW3RvcHNlY3JldC5zZXJ2ZXIuY29tXQorICAgUG9ydCA9IDUwMDIyCisgICBGb3J3YXJkWDExID0gbm8KIAotU2VjdGlvbnMgYXJlIG5vcm1hbGx5IHN0b3JlZCBpbiBhIGJ1aWx0LWluIGRpY3Rpb25hcnkuIEFuIGFsdGVybmF0aXZlIGRpY3Rpb25hcnkKLXR5cGUgY2FuIGJlIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgIGNvbnN0cnVjdG9yLiBGb3IgZXhhbXBsZSwgaWYgYQotZGljdGlvbmFyeSB0eXBlIGlzIHBhc3NlZCB0aGF0IHNvcnRzIGl0cyBrZXlzLCB0aGUgc2VjdGlvbnMgd2lsbCBiZSBzb3J0ZWQgb24KLXdyaXRlLWJhY2ssIGFzIHdpbGwgYmUgdGhlIGtleXMgd2l0aGluIGVhY2ggc2VjdGlvbi4KK1RoZSBzdHJ1Y3R1cmUgb2YgSU5JIGZpbGVzIGlzIGRlc2NyaWJlZCBgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uCis8I3N1cHBvcnRlZC1pbmktZmlsZS1zdHJ1Y3R1cmU+YF8uICBFc3NlbnRpYWxseSwgdGhlIGZpbGUKK2NvbnNpc3RzIG9mIHNlY3Rpb25zLCBlYWNoIG9mIHdoaWNoIGNvbnRhaW5zIGtleXMgd2l0aCB2YWx1ZXMuCis6bW9kOmBjb25maWdwYXJzZXJgIGNsYXNzZXMgY2FuIHJlYWQgYW5kIHdyaXRlIHN1Y2ggZmlsZXMuICBMZXQncyBzdGFydCBieQorY3JlYXRpbmcgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gZmlsZSBwcm9ncmFtYXRpY2FsbHkuCisKKy4uIGRvY3Rlc3Q6OgorCisgICA+Pj4gaW1wb3J0IGNvbmZpZ3BhcnNlcgorICAgPj4+IGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgPj4+IGNvbmZpZ1snREVGQVVMVCddID0geydTZXJ2ZXJBbGl2ZUludGVydmFsJzogJzQ1JywKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAnQ29tcHJlc3Npb24nOiAneWVzJywKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAnQ29tcHJlc3Npb25MZXZlbCc6ICc5J30KKyAgID4+PiBjb25maWdbJ2JpdGJ1Y2tldC5vcmcnXSA9IHt9CisgICA+Pj4gY29uZmlnWydiaXRidWNrZXQub3JnJ11bJ1VzZXInXSA9ICdoZycKKyAgID4+PiBjb25maWdbJ3RvcHNlY3JldC5zZXJ2ZXIuY29tJ10gPSB7fQorICAgPj4+IHRvcHNlY3JldCA9IGNvbmZpZ1sndG9wc2VjcmV0LnNlcnZlci5jb20nXQorICAgPj4+IHRvcHNlY3JldFsnUG9ydCddID0gJzUwMDIyJyAgICAgIyBtdXRhdGVzIHRoZSBwYXJzZXIKKyAgID4+PiB0b3BzZWNyZXRbJ0ZvcndhcmRYMTEnXSA9ICdubycgICMgc2FtZSBoZXJlCisgICA+Pj4gY29uZmlnWydERUZBVUxUJ11bJ0ZvcndhcmRYMTEnXSA9ICd5ZXMnCisgICA+Pj4gd2l0aCBvcGVuKCdleGFtcGxlLmluaScsICd3JykgYXMgY29uZmlnZmlsZToKKyAgIC4uLiAgIGNvbmZpZy53cml0ZShjb25maWdmaWxlKQorICAgLi4uCisKK0FzIHlvdSBjYW4gc2VlLCB3ZSBjYW4gdHJlYXQgYSBjb25maWcgcGFyc2VyIG11Y2ggbGlrZSBhIGRpY3Rpb25hcnkuCitUaGVyZSBhcmUgZGlmZmVyZW5jZXMsIGBvdXRsaW5lZCBsYXRlciA8I21hcHBpbmctcHJvdG9jb2wtYWNjZXNzPmBfLCBidXQKK3RoZSBiZWhhdmlvciBpcyB2ZXJ5IGNsb3NlIHRvIHdoYXQgeW91IHdvdWxkIGV4cGVjdCBmcm9tIGEgZGljdGlvbmFyeS4KKworTm93IHRoYXQgd2UgaGF2ZSBjcmVhdGVkIGFuZCBzYXZlZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSwgbGV0J3MgcmVhZCBpdAorYmFjayBhbmQgZXhwbG9yZSB0aGUgZGF0YSBpdCBob2xkcy4KKworLi4gZG9jdGVzdDo6CisKKyAgID4+PiBpbXBvcnQgY29uZmlncGFyc2VyCisgICA+Pj4gY29uZmlnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICA+Pj4gY29uZmlnLnNlY3Rpb25zKCkKKyAgIFtdCisgICA+Pj4gY29uZmlnLnJlYWQoJ2V4YW1wbGUuaW5pJykKKyAgIFsnZXhhbXBsZS5pbmknXQorICAgPj4+IGNvbmZpZy5zZWN0aW9ucygpCisgICBbJ2JpdGJ1Y2tldC5vcmcnLCAndG9wc2VjcmV0LnNlcnZlci5jb20nXQorICAgPj4+ICdiaXRidWNrZXQub3JnJyBpbiBjb25maWcKKyAgIFRydWUKKyAgID4+PiAnYnl0ZWJvbmcuY29tJyBpbiBjb25maWcKKyAgIEZhbHNlCisgICA+Pj4gY29uZmlnWydiaXRidWNrZXQub3JnJ11bJ1VzZXInXQorICAgJ2hnJworICAgPj4+IGNvbmZpZ1snREVGQVVMVCddWydDb21wcmVzc2lvbiddCisgICAneWVzJworICAgPj4+IHRvcHNlY3JldCA9IGNvbmZpZ1sndG9wc2VjcmV0LnNlcnZlci5jb20nXQorICAgPj4+IHRvcHNlY3JldFsnRm9yd2FyZFgxMSddCisgICAnbm8nCisgICA+Pj4gdG9wc2VjcmV0WydQb3J0J10KKyAgICc1MDAyMicKKyAgID4+PiBmb3Iga2V5IGluIGNvbmZpZ1snYml0YnVja2V0Lm9yZyddOiBwcmludChrZXkpCisgICAuLi4KKyAgIHVzZXIKKyAgIGNvbXByZXNzaW9ubGV2ZWwKKyAgIHNlcnZlcmFsaXZlaW50ZXJ2YWwKKyAgIGNvbXByZXNzaW9uCisgICBmb3J3YXJkeDExCisgICA+Pj4gY29uZmlnWydiaXRidWNrZXQub3JnJ11bJ0ZvcndhcmRYMTEnXQorICAgJ3llcycKKworQXMgd2UgY2FuIHNlZSBhYm92ZSwgdGhlIEFQSSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIG9ubHkgYml0IG9mIG1hZ2ljCitpbnZvbHZlcyB0aGUgYGBERUZBVUxUYGAgc2VjdGlvbiB3aGljaCBwcm92aWRlcyBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsIG90aGVyCitzZWN0aW9ucyBbMV1fLiAgTm90ZSBhbHNvIHRoYXQga2V5cyBpbiBzZWN0aW9ucyBhcmUKK2Nhc2UtaW5zZW5zaXRpdmUgYW5kIHN0b3JlZCBpbiBsb3dlcmNhc2UgWzFdXy4KIAogCi0uLiBjbGFzczo6IFJhd0NvbmZpZ1BhcnNlcihkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QpCitTdXBwb3J0ZWQgRGF0YXR5cGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIFRoZSBiYXNpYyBjb25maWd1cmF0aW9uIG9iamVjdC4gIFdoZW4gKmRlZmF1bHRzKiBpcyBnaXZlbiwgaXQgaXMgaW5pdGlhbGl6ZWQKLSAgIGludG8gdGhlIGRpY3Rpb25hcnkgb2YgaW50cmluc2ljIGRlZmF1bHRzLiAgV2hlbiAqZGljdF90eXBlKiBpcyBnaXZlbiwgaXQgd2lsbAotICAgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGRpY3Rpb25hcnkgb2JqZWN0cyBmb3IgdGhlIGxpc3Qgb2Ygc2VjdGlvbnMsIGZvciB0aGUKLSAgIG9wdGlvbnMgd2l0aGluIGEgc2VjdGlvbiwgYW5kIGZvciB0aGUgZGVmYXVsdCB2YWx1ZXMuIFRoaXMgY2xhc3MgZG9lcyBub3QKLSAgIHN1cHBvcnQgdGhlIG1hZ2ljYWwgaW50ZXJwb2xhdGlvbiBiZWhhdmlvci4KK0NvbmZpZyBwYXJzZXJzIGRvIG5vdCBndWVzcyBkYXRhdHlwZXMgb2YgdmFsdWVzIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFsd2F5cworc3RvcmluZyB0aGVtIGludGVybmFsbHkgYXMgc3RyaW5ncy4gIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3UgbmVlZCBvdGhlcgorZGF0YXR5cGVzLCB5b3Ugc2hvdWxkIGNvbnZlcnQgb24geW91ciBvd246CiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCi0gICAgICBUaGUgZGVmYXVsdCAqZGljdF90eXBlKiBpcyA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YC4KKy4uIGRvY3Rlc3Q6OgorCisgICA+Pj4gaW50KHRvcHNlY3JldFsnUG9ydCddKQorICAgNTAwMjIKKyAgID4+PiBmbG9hdCh0b3BzZWNyZXRbJ0NvbXByZXNzaW9uTGV2ZWwnXSkKKyAgIDkuMAorCitFeHRyYWN0aW5nIEJvb2xlYW4gdmFsdWVzIGlzIG5vdCB0aGF0IHNpbXBsZSwgdGhvdWdoLiAgUGFzc2luZyB0aGUgdmFsdWUKK3RvIGBgYm9vbCgpYGAgd291bGQgZG8gbm8gZ29vZCBzaW5jZSBgYGJvb2woJ0ZhbHNlJylgYCBpcyBzdGlsbAorYGBUcnVlYGAuICBUaGlzIGlzIHdoeSBjb25maWcgcGFyc2VycyBhbHNvIHByb3ZpZGUgOm1ldGg6YGdldGJvb2xlYW5gLgorVGhpcyBtZXRob2QgaXMgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgcmVjb2duaXplcyBCb29sZWFuIHZhbHVlcyBmcm9tCitgYCd5ZXMnYGAvYGAnbm8nYGAsIGBgJ29uJ2BgL2BgJ29mZidgYCBhbmQgYGAnMSdgYC9gYCcwJ2BgIFsxXV8uCitGb3IgZXhhbXBsZToKKworLi4gZG9jdGVzdDo6CisKKyAgID4+PiB0b3BzZWNyZXQuZ2V0Ym9vbGVhbignRm9yd2FyZFgxMScpCisgICBGYWxzZQorICAgPj4+IGNvbmZpZ1snYml0YnVja2V0Lm9yZyddLmdldGJvb2xlYW4oJ0ZvcndhcmRYMTEnKQorICAgVHJ1ZQorICAgPj4+IGNvbmZpZy5nZXRib29sZWFuKCdiaXRidWNrZXQub3JnJywgJ0NvbXByZXNzaW9uJykKKyAgIFRydWUKKworQXBhcnQgZnJvbSA6bWV0aDpgZ2V0Ym9vbGVhbmAsIGNvbmZpZyBwYXJzZXJzIGFsc28gcHJvdmlkZSBlcXVpdmFsZW50Cis6bWV0aDpgZ2V0aW50YCBhbmQgOm1ldGg6YGdldGZsb2F0YCBtZXRob2RzLCBidXQgdGhlc2UgYXJlIGZhciBsZXNzCit1c2VmdWwgc2luY2UgY29udmVyc2lvbiB1c2luZyA6ZnVuYzpgaW50YCBhbmQgOmZ1bmM6YGZsb2F0YCBpcworc3VmZmljaWVudCBmb3IgdGhlc2UgdHlwZXMuCiAKIAotLi4gY2xhc3M6OiBDb25maWdQYXJzZXIoZGVmYXVsdHM9Tm9uZSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorRmFsbGJhY2sgVmFsdWVzCistLS0tLS0tLS0tLS0tLS0KIAotICAgRGVyaXZlZCBjbGFzcyBvZiA6Y2xhc3M6YFJhd0NvbmZpZ1BhcnNlcmAgdGhhdCBpbXBsZW1lbnRzIHRoZSBtYWdpY2FsCi0gICBpbnRlcnBvbGF0aW9uIGZlYXR1cmUgYW5kIGFkZHMgb3B0aW9uYWwgYXJndW1lbnRzIHRvIHRoZSA6bWV0aDpgZ2V0YCBhbmQKLSAgIDptZXRoOmBpdGVtc2AgbWV0aG9kcy4gIFRoZSB2YWx1ZXMgaW4gKmRlZmF1bHRzKiBtdXN0IGJlIGFwcHJvcHJpYXRlIGZvciB0aGUKLSAgIGBgJSgpc2BgIHN0cmluZyBpbnRlcnBvbGF0aW9uLiAgTm90ZSB0aGF0ICpfX25hbWVfXyogaXMgYW4gaW50cmluc2ljIGRlZmF1bHQ7Ci0gICBpdHMgdmFsdWUgaXMgdGhlIHNlY3Rpb24gbmFtZSwgYW5kIHdpbGwgb3ZlcnJpZGUgYW55IHZhbHVlIHByb3ZpZGVkIGluCi0gICAqZGVmYXVsdHMqLgorQXMgd2l0aCBhIGRpY3Rpb25hcnksIHlvdSBjYW4gdXNlIGEgc2VjdGlvbidzIDptZXRoOmBnZXRgIG1ldGhvZCB0bworcHJvdmlkZSBmYWxsYmFjayB2YWx1ZXM6CiAKLSAgIEFsbCBvcHRpb24gbmFtZXMgdXNlZCBpbiBpbnRlcnBvbGF0aW9uIHdpbGwgYmUgcGFzc2VkIHRocm91Z2ggdGhlCi0gICA6bWV0aDpgb3B0aW9ueGZvcm1gIG1ldGhvZCBqdXN0IGxpa2UgYW55IG90aGVyIG9wdGlvbiBuYW1lIHJlZmVyZW5jZS4gIEZvcgotICAgZXhhbXBsZSwgdXNpbmcgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YG9wdGlvbnhmb3JtYCAod2hpY2ggY29udmVydHMKLSAgIG9wdGlvbiBuYW1lcyB0byBsb3dlciBjYXNlKSwgdGhlIHZhbHVlcyBgYGZvbyAlKGJhcilzYGAgYW5kIGBgZm9vICUoQkFSKXNgYCBhcmUKLSAgIGVxdWl2YWxlbnQuCisuLiBkb2N0ZXN0OjoKIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKLSAgICAgIFRoZSBkZWZhdWx0ICpkaWN0X3R5cGUqIGlzIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgLgorICAgPj4+IHRvcHNlY3JldC5nZXQoJ1BvcnQnKQorICAgJzUwMDIyJworICAgPj4+IHRvcHNlY3JldC5nZXQoJ0NvbXByZXNzaW9uTGV2ZWwnKQorICAgJzknCisgICA+Pj4gdG9wc2VjcmV0LmdldCgnQ2lwaGVyJykKKyAgID4+PiB0b3BzZWNyZXQuZ2V0KCdDaXBoZXInLCAnM2Rlcy1jYmMnKQorICAgJzNkZXMtY2JjJworCitQbGVhc2Ugbm90ZSB0aGF0IGRlZmF1bHQgdmFsdWVzIGhhdmUgcHJlY2VkZW5jZSBvdmVyIGZhbGxiYWNrIHZhbHVlcy4KK0ZvciBpbnN0YW5jZSwgaW4gb3VyIGV4YW1wbGUgdGhlIGBgJ0NvbXByZXNzaW9uTGV2ZWwnYGAga2V5IHdhcworc3BlY2lmaWVkIG9ubHkgaW4gdGhlIGBgJ0RFRkFVTFQnYGAgc2VjdGlvbi4gIElmIHdlIHRyeSB0byBnZXQgaXQgZnJvbQordGhlIHNlY3Rpb24gYGAndG9wc2VjcmV0LnNlcnZlci5jb20nYGAsIHdlIHdpbGwgYWx3YXlzIGdldCB0aGUgZGVmYXVsdCwKK2V2ZW4gaWYgd2Ugc3BlY2lmeSBhIGZhbGxiYWNrOgorCisuLiBkb2N0ZXN0OjoKKworICAgPj4+IHRvcHNlY3JldC5nZXQoJ0NvbXByZXNzaW9uTGV2ZWwnLCAnMycpCisgICAnOScKKworT25lIG1vcmUgdGhpbmcgdG8gYmUgYXdhcmUgb2YgaXMgdGhhdCB0aGUgcGFyc2VyLWxldmVsIDptZXRoOmBnZXRgIG1ldGhvZAorcHJvdmlkZXMgYSBjdXN0b20sIG1vcmUgY29tcGxleCBpbnRlcmZhY2UsIG1haW50YWluZWQgZm9yIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4gIFdoZW4gdXNpbmcgdGhpcyBtZXRob2QsIGEgZmFsbGJhY2sgdmFsdWUgY2FuIGJlIHByb3ZpZGVkIHZpYQordGhlIGBgZmFsbGJhY2tgYCBrZXl3b3JkLW9ubHkgYXJndW1lbnQ6CisKKy4uIGRvY3Rlc3Q6OgorCisgICA+Pj4gY29uZmlnLmdldCgnYml0YnVja2V0Lm9yZycsICdtb25zdGVyJywKKyAgIC4uLiAgICAgICAgICAgIGZhbGxiYWNrPSdObyBzdWNoIHRoaW5ncyBhcyBtb25zdGVycycpCisgICAnTm8gc3VjaCB0aGluZ3MgYXMgbW9uc3RlcnMnCisKK1RoZSBzYW1lIGBgZmFsbGJhY2tgYCBhcmd1bWVudCBjYW4gYmUgdXNlZCB3aXRoIHRoZSA6bWV0aDpgZ2V0aW50YCwKKzptZXRoOmBnZXRmbG9hdGAgYW5kIDptZXRoOmBnZXRib29sZWFuYCBtZXRob2RzLCBmb3IgZXhhbXBsZToKKworLi4gZG9jdGVzdDo6CisKKyAgID4+PiAnQmF0Y2hNb2RlJyBpbiB0b3BzZWNyZXQKKyAgIEZhbHNlCisgICA+Pj4gdG9wc2VjcmV0LmdldGJvb2xlYW4oJ0JhdGNoTW9kZScsIGZhbGxiYWNrPVRydWUpCisgICBUcnVlCisgICA+Pj4gY29uZmlnWydERUZBVUxUJ11bJ0JhdGNoTW9kZSddID0gJ25vJworICAgPj4+IHRvcHNlY3JldC5nZXRib29sZWFuKCdCYXRjaE1vZGUnLCBmYWxsYmFjaz1UcnVlKQorICAgRmFsc2UKIAogCi0uLiBjbGFzczo6IFNhZmVDb25maWdQYXJzZXIoZGVmYXVsdHM9Tm9uZSwgZGljdF90eXBlPWNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KQorU3VwcG9ydGVkIElOSSBGaWxlIFN0cnVjdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICBEZXJpdmVkIGNsYXNzIG9mIDpjbGFzczpgQ29uZmlnUGFyc2VyYCB0aGF0IGltcGxlbWVudHMgYSBtb3JlLXNhbmUgdmFyaWFudCBvZgotICAgdGhlIG1hZ2ljYWwgaW50ZXJwb2xhdGlvbiBmZWF0dXJlLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBtb3JlIHByZWRpY3RhYmxlIGFzCi0gICB3ZWxsLiBOZXcgYXBwbGljYXRpb25zIHNob3VsZCBwcmVmZXIgdGhpcyB2ZXJzaW9uIGlmIHRoZXkgZG9uJ3QgbmVlZCB0byBiZQotICAgY29tcGF0aWJsZSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbi4KK0EgY29uZmlndXJhdGlvbiBmaWxlIGNvbnNpc3RzIG9mIHNlY3Rpb25zLCBlYWNoIGxlZCBieSBhIGBgW3NlY3Rpb25dYGAgaGVhZGVyLAorZm9sbG93ZWQgYnkga2V5L3ZhbHVlIGVudHJpZXMgc2VwYXJhdGVkIGJ5IGEgc3BlY2lmaWMgc3RyaW5nIChgYD1gYCBvciBgYDpgYCBieQorZGVmYXVsdCBbMV1fKS4gIEJ5IGRlZmF1bHQsIHNlY3Rpb24gbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlIGJ1dCBrZXlzIGFyZSBub3QKK1sxXV8uICBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQgZnJvbSBrZXlzIGFuZCB2YWx1ZXMuCitWYWx1ZXMgY2FuIGJlIG9taXR0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIGtleS92YWx1ZSBkZWxpbWl0ZXIgbWF5IGFsc28gYmUgbGVmdAorb3V0LiAgVmFsdWVzIGNhbiBhbHNvIHNwYW4gbXVsdGlwbGUgbGluZXMsIGFzIGxvbmcgYXMgdGhleSBhcmUgaW5kZW50ZWQgZGVlcGVyCit0aGFuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YWx1ZS4gIERlcGVuZGluZyBvbiB0aGUgcGFyc2VyJ3MgbW9kZSwgYmxhbmsgbGluZXMKK21heSBiZSB0cmVhdGVkIGFzIHBhcnRzIG9mIG11bHRpbGluZSB2YWx1ZXMgb3IgaWdub3JlZC4KIAotICAgLi4gWFhYIE5lZWQgdG8gZXhwbGFpbiB3aGF0J3Mgc2FmZXIvbW9yZSBwcmVkaWN0YWJsZSBhYm91dCBpdC4KK0NvbmZpZ3VyYXRpb24gZmlsZXMgbWF5IGluY2x1ZGUgY29tbWVudHMsIHByZWZpeGVkIGJ5IHNwZWNpZmljCitjaGFyYWN0ZXJzIChgYCNgYCBhbmQgYGA7YGAgYnkgZGVmYXVsdCBbMV1fKS4gIENvbW1lbnRzIG1heSBhcHBlYXIgb24KK3RoZWlyIG93biBvbiBhbiBvdGhlcndpc2UgZW1wdHkgbGluZSwgcG9zc2libHkgaW5kZW50ZWQuIFsxXV8KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKLSAgICAgIFRoZSBkZWZhdWx0ICpkaWN0X3R5cGUqIGlzIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgLgorRm9yIGV4YW1wbGU6CisKKy4uIGNvZGUtYmxvY2s6OiBpbmkKKworICAgW1NpbXBsZSBWYWx1ZXNdCisgICBrZXk9dmFsdWUKKyAgIHNwYWNlcyBpbiBrZXlzPWFsbG93ZWQKKyAgIHNwYWNlcyBpbiB2YWx1ZXM9YWxsb3dlZCBhcyB3ZWxsCisgICBzcGFjZXMgYXJvdW5kIHRoZSBkZWxpbWl0ZXIgPSBvYnZpb3VzbHkKKyAgIHlvdSBjYW4gYWxzbyB1c2UgOiB0byBkZWxpbWl0IGtleXMgZnJvbSB2YWx1ZXMKKworICAgW0FsbCBWYWx1ZXMgQXJlIFN0cmluZ3NdCisgICB2YWx1ZXMgbGlrZSB0aGlzOiAxMDAwMDAwCisgICBvciB0aGlzOiAzLjE0MTU5MjY1MzU5CisgICBhcmUgdGhleSB0cmVhdGVkIGFzIG51bWJlcnM/IDogbm8KKyAgIGludGVnZXJzLCBmbG9hdHMgYW5kIGJvb2xlYW5zIGFyZSBoZWxkIGFzOiBzdHJpbmdzCisgICBjYW4gdXNlIHRoZSBBUEkgdG8gZ2V0IGNvbnZlcnRlZCB2YWx1ZXMgZGlyZWN0bHk6IHRydWUKKworICAgW011bHRpbGluZSBWYWx1ZXNdCisgICBjaG9ydXM6IEknbSBhIGx1bWJlcmphY2ssIGFuZCBJJ20gb2theQorICAgICAgIEkgc2xlZXAgYWxsIG5pZ2h0IGFuZCBJIHdvcmsgYWxsIGRheQorCisgICBbTm8gVmFsdWVzXQorICAga2V5X3dpdGhvdXRfdmFsdWUKKyAgIGVtcHR5IHN0cmluZyB2YWx1ZSBoZXJlID0KKworICAgW1lvdSBjYW4gdXNlIGNvbW1lbnRzXQorICAgIyBsaWtlIHRoaXMKKyAgIDsgb3IgdGhpcworCisgICAjIEJ5IGRlZmF1bHQgb25seSBpbiBhbiBlbXB0eSBsaW5lLgorICAgIyBJbmxpbmUgY29tbWVudHMgY2FuIGJlIGhhcm1mdWwgYmVjYXVzZSB0aGV5IHByZXZlbnQgdXNlcnMKKyAgICMgZnJvbSB1c2luZyB0aGUgZGVsaW1pdGluZyBjaGFyYWN0ZXJzIGFzIHBhcnRzIG9mIHZhbHVlcy4KKyAgICMgVGhhdCBiZWluZyBzYWlkLCB0aGlzIGNhbiBiZSBjdXN0b21pemVkLgorCisgICAgICAgW1NlY3Rpb25zIENhbiBCZSBJbmRlbnRlZF0KKyAgICAgICAgICAgY2FuX3ZhbHVlc19iZV9hc193ZWxsID0gVHJ1ZQorICAgICAgICAgICBkb2VzX3RoYXRfbWVhbl9hbnl0aGluZ19zcGVjaWFsID0gRmFsc2UKKyAgICAgICAgICAgcHVycG9zZSA9IGZvcm1hdHRpbmcgZm9yIHJlYWRhYmlsaXR5CisgICAgICAgICAgIG11bHRpbGluZV92YWx1ZXMgPSBhcmUKKyAgICAgICAgICAgICAgIGhhbmRsZWQganVzdCBmaW5lIGFzCisgICAgICAgICAgICAgICBsb25nIGFzIHRoZXkgYXJlIGluZGVudGVkCisgICAgICAgICAgICAgICBkZWVwZXIgdGhhbiB0aGUgZmlyc3QgbGluZQorICAgICAgICAgICAgICAgb2YgYSB2YWx1ZQorICAgICAgICAgICAjIERpZCBJIG1lbnRpb24gd2UgY2FuIGluZGVudCBjb21tZW50cywgdG9vPwogCiAKLS4uIGV4Y2VwdGlvbjo6IEVycm9yCi0KLSAgIEJhc2UgY2xhc3MgZm9yIGFsbCBvdGhlciBjb25maWdwYXJzZXIgZXhjZXB0aW9ucy4KLQotCi0uLiBleGNlcHRpb246OiBOb1NlY3Rpb25FcnJvcgotCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSBzcGVjaWZpZWQgc2VjdGlvbiBpcyBub3QgZm91bmQuCi0KLQotLi4gZXhjZXB0aW9uOjogRHVwbGljYXRlU2VjdGlvbkVycm9yCi0KLSAgIEV4Y2VwdGlvbiByYWlzZWQgaWYgOm1ldGg6YGFkZF9zZWN0aW9uYCBpcyBjYWxsZWQgd2l0aCB0aGUgbmFtZSBvZiBhIHNlY3Rpb24KLSAgIHRoYXQgaXMgYWxyZWFkeSBwcmVzZW50LgotCi0KLS4uIGV4Y2VwdGlvbjo6IE5vT3B0aW9uRXJyb3IKLQotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3QgZm91bmQgaW4gdGhlIHNwZWNpZmllZCAgc2VjdGlvbi4KLQotCi0uLiBleGNlcHRpb246OiBJbnRlcnBvbGF0aW9uRXJyb3IKLQotICAgQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyByYWlzZWQgd2hlbiBwcm9ibGVtcyBvY2N1ciBwZXJmb3JtaW5nIHN0cmluZwotICAgaW50ZXJwb2xhdGlvbi4KLQotCi0uLiBleGNlcHRpb246OiBJbnRlcnBvbGF0aW9uRGVwdGhFcnJvcgotCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gc3RyaW5nIGludGVycG9sYXRpb24gY2Fubm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZQotICAgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZXhjZWVkcyA6Y29uc3Q6YE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIYC4gU3ViY2xhc3Mgb2YKLSAgIDpleGM6YEludGVycG9sYXRpb25FcnJvcmAuCi0KLQotLi4gZXhjZXB0aW9uOjogSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcgotCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gb3B0aW9uIHJlZmVyZW5jZWQgZnJvbSBhIHZhbHVlIGRvZXMgbm90IGV4aXN0LiBTdWJjbGFzcwotICAgb2YgOmV4YzpgSW50ZXJwb2xhdGlvbkVycm9yYC4KLQotCi0uLiBleGNlcHRpb246OiBJbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IKLQotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZSBzb3VyY2UgdGV4dCBpbnRvIHdoaWNoIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUgZG9lcyBub3QKLSAgIGNvbmZvcm0gdG8gdGhlIHJlcXVpcmVkIHN5bnRheC4gU3ViY2xhc3Mgb2YgOmV4YzpgSW50ZXJwb2xhdGlvbkVycm9yYC4KLQotCi0uLiBleGNlcHRpb246OiBNaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yCi0KLSAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhdHRlbXB0aW5nIHRvIHBhcnNlIGEgZmlsZSB3aGljaCBoYXMgbm8gc2VjdGlvbiBoZWFkZXJzLgotCi0KLS4uIGV4Y2VwdGlvbjo6IFBhcnNpbmdFcnJvcgotCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gZXJyb3JzIG9jY3VyIGF0dGVtcHRpbmcgdG8gcGFyc2UgYSBmaWxlLgotCi0KLS4uIGRhdGE6OiBNQVhfSU5URVJQT0xBVElPTl9ERVBUSAotCi0gICBUaGUgbWF4aW11bSBkZXB0aCBmb3IgcmVjdXJzaXZlIGludGVycG9sYXRpb24gZm9yIDptZXRoOmBnZXRgIHdoZW4gdGhlICpyYXcqCi0gICBwYXJhbWV0ZXIgaXMgZmFsc2UuICBUaGlzIGlzIHJlbGV2YW50IG9ubHkgZm9yIHRoZSA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgY2xhc3MuCi0KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIE1vZHVsZSA6bW9kOmBzaGxleGAKLSAgICAgIFN1cHBvcnQgZm9yIGEgY3JlYXRpbmcgVW5peCBzaGVsbC1saWtlIG1pbmktbGFuZ3VhZ2VzIHdoaWNoIGNhbiBiZSB1c2VkIGFzIGFuCi0gICAgICBhbHRlcm5hdGUgZm9ybWF0IGZvciBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0KLS4uIF9yYXdjb25maWdwYXJzZXItb2JqZWN0czoKLQotUmF3Q29uZmlnUGFyc2VyIE9iamVjdHMKK0ludGVycG9sYXRpb24gb2YgdmFsdWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi06Y2xhc3M6YFJhd0NvbmZpZ1BhcnNlcmAgaW5zdGFuY2VzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorT24gdG9wIG9mIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHksIDpjbGFzczpgQ29uZmlnUGFyc2VyYCBzdXBwb3J0cworaW50ZXJwb2xhdGlvbi4gIFRoaXMgbWVhbnMgdmFsdWVzIGNhbiBiZSBwcmVwcm9jZXNzZWQgYmVmb3JlIHJldHVybmluZyB0aGVtCitmcm9tIGBgZ2V0KClgYCBjYWxscy4KIAorLi4gY2xhc3M6OiBCYXNpY0ludGVycG9sYXRpb24oKQogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIuZGVmYXVsdHMoKQorICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlZCBieSA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAuICBJdCBlbmFibGVzCisgICB2YWx1ZXMgdG8gY29udGFpbiBmb3JtYXQgc3RyaW5ncyB3aGljaCByZWZlciB0byBvdGhlciB2YWx1ZXMgaW4gdGhlIHNhbWUKKyAgIHNlY3Rpb24sIG9yIHZhbHVlcyBpbiB0aGUgc3BlY2lhbCBkZWZhdWx0IHNlY3Rpb24gWzFdXy4gIEFkZGl0aW9uYWwgZGVmYXVsdAorICAgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCBvbiBpbml0aWFsaXphdGlvbi4KIAotICAgUmV0dXJuIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBpbnN0YW5jZS13aWRlIGRlZmF1bHRzLgorICAgRm9yIGV4YW1wbGU6CiAKKyAgIC4uIGNvZGUtYmxvY2s6OiBpbmkKIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLnNlY3Rpb25zKCkKKyAgICAgIFtQYXRoc10KKyAgICAgIGhvbWVfZGlyOiAvVXNlcnMKKyAgICAgIG15X2RpcjogJShob21lX2RpcilzL2x1bWJlcmphY2sKKyAgICAgIG15X3BpY3R1cmVzOiAlKG15X2RpcilzL1BpY3R1cmVzCiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGF2YWlsYWJsZTsgYGBERUZBVUxUYGAgaXMgbm90IGluY2x1ZGVkIGluIHRoZQotICAgbGlzdC4KIAorICAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIDpjbGFzczpgQ29uZmlnUGFyc2VyYCB3aXRoICppbnRlcnBvbGF0aW9uKiBzZXQgdG8KKyAgIGBgQmFzaWNJbnRlcnBvbGF0aW9uKClgYCB3b3VsZCByZXNvbHZlIGBgJShob21lX2RpcilzYGAgdG8gdGhlIHZhbHVlIG9mCisgICBgYGhvbWVfZGlyYGAgKGBgL1VzZXJzYGAgaW4gdGhpcyBjYXNlKS4gIGBgJShteV9kaXIpc2BgIGluIGVmZmVjdCB3b3VsZAorICAgcmVzb2x2ZSB0byBgYC9Vc2Vycy9sdW1iZXJqYWNrYGAuICBBbGwgaW50ZXJwb2xhdGlvbnMgYXJlIGRvbmUgb24gZGVtYW5kIHNvCisgICBrZXlzIHVzZWQgaW4gdGhlIGNoYWluIG9mIHJlZmVyZW5jZXMgZG8gbm90IGhhdmUgdG8gYmUgc3BlY2lmaWVkIGluIGFueQorICAgc3BlY2lmaWMgb3JkZXIgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4KIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLmFkZF9zZWN0aW9uKHNlY3Rpb24pCisgICBXaXRoIGBgaW50ZXJwb2xhdGlvbmBgIHNldCB0byBgYE5vbmVgYCwgdGhlIHBhcnNlciB3b3VsZCBzaW1wbHkgcmV0dXJuCisgICBgYCUobXlfZGlyKXMvUGljdHVyZXNgYCBhcyB0aGUgdmFsdWUgb2YgYGBteV9waWN0dXJlc2BgIGFuZAorICAgYGAlKGhvbWVfZGlyKXMvbHVtYmVyamFja2BgIGFzIHRoZSB2YWx1ZSBvZiBgYG15X2RpcmBgLgogCi0gICBBZGQgYSBzZWN0aW9uIG5hbWVkICpzZWN0aW9uKiB0byB0aGUgaW5zdGFuY2UuICBJZiBhIHNlY3Rpb24gYnkgdGhlIGdpdmVuIG5hbWUKLSAgIGFscmVhZHkgZXhpc3RzLCA6ZXhjOmBEdXBsaWNhdGVTZWN0aW9uRXJyb3JgIGlzIHJhaXNlZC4gSWYgdGhlIG5hbWUKLSAgIGBgREVGQVVMVGBgIChvciBhbnkgb2YgaXQncyBjYXNlLWluc2Vuc2l0aXZlIHZhcmlhbnRzKSBpcyBwYXNzZWQsCi0gICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCisuLiBjbGFzczo6IEV4dGVuZGVkSW50ZXJwb2xhdGlvbigpCiAKLS4uIG1ldGhvZDo6IFJhd0NvbmZpZ1BhcnNlci5oYXNfc2VjdGlvbihzZWN0aW9uKQorICAgQW4gYWx0ZXJuYXRpdmUgaGFuZGxlciBmb3IgaW50ZXJwb2xhdGlvbiB3aGljaCBpbXBsZW1lbnRzIGEgbW9yZSBhZHZhbmNlZAorICAgc3ludGF4LCB1c2VkIGZvciBpbnN0YW5jZSBpbiBgYHpjLmJ1aWxkb3V0YGAuIEV4dGVuZGVkIGludGVycG9sYXRpb24gaXMKKyAgIHVzaW5nIGBgJHtzZWN0aW9uOm9wdGlvbn1gYCB0byBkZW5vdGUgYSB2YWx1ZSBmcm9tIGEgZm9yZWlnbiBzZWN0aW9uLgorICAgSW50ZXJwb2xhdGlvbiBjYW4gc3BhbiBtdWx0aXBsZSBsZXZlbHMuIEZvciBjb252ZW5pZW5jZSwgaWYgdGhlIGBgc2VjdGlvbjpgYAorICAgcGFydCBpcyBvbWl0dGVkLCBpbnRlcnBvbGF0aW9uIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHNlY3Rpb24gKGFuZCBwb3NzaWJseQorICAgdGhlIGRlZmF1bHQgdmFsdWVzIGZyb20gdGhlIHNwZWNpYWwgc2VjdGlvbikuCiAKLSAgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBuYW1lZCBzZWN0aW9uIGlzIHByZXNlbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoZQotICAgYGBERUZBVUxUYGAgc2VjdGlvbiBpcyBub3QgYWNrbm93bGVkZ2VkLgorICAgRm9yIGV4YW1wbGUsIHRoZSBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBhYm92ZSB3aXRoIGJhc2ljIGludGVycG9sYXRpb24sCisgICB3b3VsZCBsb29rIGxpa2UgdGhpcyB3aXRoIGV4dGVuZGVkIGludGVycG9sYXRpb246CiAKKyAgIC4uIGNvZGUtYmxvY2s6OiBpbmkKIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLm9wdGlvbnMoc2VjdGlvbikKKyAgICAgIFtQYXRoc10KKyAgICAgIGhvbWVfZGlyOiAvVXNlcnMKKyAgICAgIG15X2RpcjogJHtob21lX2Rpcn0vbHVtYmVyamFjaworICAgICAgbXlfcGljdHVyZXM6ICR7bXlfZGlyfS9QaWN0dXJlcwogCi0gICBSZXR1cm5zIGEgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKi4KKyAgIFZhbHVlcyBmcm9tIG90aGVyIHNlY3Rpb25zIGNhbiBiZSBmZXRjaGVkIGFzIHdlbGw6CiAKKyAgIC4uIGNvZGUtYmxvY2s6OiBpbmkKIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLmhhc19vcHRpb24oc2VjdGlvbiwgb3B0aW9uKQorICAgICAgW0NvbW1vbl0KKyAgICAgIGhvbWVfZGlyOiAvVXNlcnMKKyAgICAgIGxpYnJhcnlfZGlyOiAvTGlicmFyeQorICAgICAgc3lzdGVtX2RpcjogL1N5c3RlbQorICAgICAgbWFjcG9ydHNfZGlyOiAvb3B0L2xvY2FsCiAKLSAgIElmIHRoZSBnaXZlbiBzZWN0aW9uIGV4aXN0cywgYW5kIGNvbnRhaW5zIHRoZSBnaXZlbiBvcHRpb24sIHJldHVybgotICAgOmNvbnN0OmBUcnVlYDsgb3RoZXJ3aXNlIHJldHVybiA6Y29uc3Q6YEZhbHNlYC4KKyAgICAgIFtGcmFtZXdvcmtzXQorICAgICAgUHl0aG9uOiAzLjIKKyAgICAgIHBhdGg6ICR7Q29tbW9uOnN5c3RlbV9kaXJ9L0xpYnJhcnkvRnJhbWV3b3Jrcy8KIAorICAgICAgW0FydGh1cl0KKyAgICAgIG5pY2tuYW1lOiBUd28gU2hlZHMKKyAgICAgIGxhc3RfbmFtZTogSmFja3NvbgorICAgICAgbXlfZGlyOiAke0NvbW1vbjpob21lX2Rpcn0vdHdvc2hlZHMKKyAgICAgIG15X3BpY3R1cmVzOiAke215X2Rpcn0vUGljdHVyZXMKKyAgICAgIHB5dGhvbl9kaXI6ICR7RnJhbWV3b3JrczpwYXRofS9QeXRob24vVmVyc2lvbnMvJHtGcmFtZXdvcmtzOlB5dGhvbn0KIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLnJlYWQoZmlsZW5hbWVzKQorTWFwcGluZyBQcm90b2NvbCBBY2Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgIEF0dGVtcHQgdG8gcmVhZCBhbmQgcGFyc2UgYSBsaXN0IG9mIGZpbGVuYW1lcywgcmV0dXJuaW5nIGEgbGlzdCBvZiBmaWxlbmFtZXMKLSAgIHdoaWNoIHdlcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4gIElmICpmaWxlbmFtZXMqIGlzIGEgc3RyaW5nLAotICAgaXQgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBmaWxlbmFtZS4gSWYgYSBmaWxlIG5hbWVkIGluICpmaWxlbmFtZXMqIGNhbm5vdCBiZQotICAgb3BlbmVkLCB0aGF0IGZpbGUgd2lsbCBiZSBpZ25vcmVkLiAgVGhpcyBpcyBkZXNpZ25lZCBzbyB0aGF0IHlvdSBjYW4gc3BlY2lmeSBhCi0gICBsaXN0IG9mIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGZpbGUgbG9jYXRpb25zIChmb3IgZXhhbXBsZSwgdGhlIGN1cnJlbnQKLSAgIGRpcmVjdG9yeSwgdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSwgYW5kIHNvbWUgc3lzdGVtLXdpZGUgZGlyZWN0b3J5KSwgYW5kIGFsbAotICAgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgbGlzdCB3aWxsIGJlIHJlYWQuICBJZiBub25lIG9mIHRoZSBuYW1lZAotICAgZmlsZXMgZXhpc3QsIHRoZSA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgaW5zdGFuY2Ugd2lsbCBjb250YWluIGFuIGVtcHR5IGRhdGFzZXQuCi0gICBBbiBhcHBsaWNhdGlvbiB3aGljaCByZXF1aXJlcyBpbml0aWFsIHZhbHVlcyB0byBiZSBsb2FkZWQgZnJvbSBhIGZpbGUgc2hvdWxkCi0gICBsb2FkIHRoZSByZXF1aXJlZCBmaWxlIG9yIGZpbGVzIHVzaW5nIDptZXRoOmByZWFkZnBgIGJlZm9yZSBjYWxsaW5nIDptZXRoOmByZWFkYAotICAgZm9yIGFueSBvcHRpb25hbCBmaWxlczo6CisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotICAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlciwgb3MKK01hcHBpbmcgcHJvdG9jb2wgYWNjZXNzIGlzIGEgZ2VuZXJpYyBuYW1lIGZvciBmdW5jdGlvbmFsaXR5IHRoYXQgZW5hYmxlcyB1c2luZworY3VzdG9tIG9iamVjdHMgYXMgaWYgdGhleSB3ZXJlIGRpY3Rpb25hcmllcy4gIEluIGNhc2Ugb2YgOm1vZDpgY29uZmlncGFyc2VyYCwKK3RoZSBtYXBwaW5nIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBpcyB1c2luZyB0aGUKK2BgcGFyc2VyWydzZWN0aW9uJ11bJ29wdGlvbiddYGAgbm90YXRpb24uCiAKLSAgICAgIGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQotICAgICAgY29uZmlnLnJlYWRmcChvcGVuKCdkZWZhdWx0cy5jZmcnKSkKLSAgICAgIGNvbmZpZy5yZWFkKFsnc2l0ZS5jZmcnLCBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vLm15YXBwLmNmZycpXSkKK2BgcGFyc2VyWydzZWN0aW9uJ11gYCBpbiBwYXJ0aWN1bGFyIHJldHVybnMgYSBwcm94eSBmb3IgdGhlIHNlY3Rpb24ncyBkYXRhIGluCit0aGUgcGFyc2VyLiAgVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZXMgYXJlIG5vdCBjb3BpZWQgYnV0IHRoZXkgYXJlIHRha2VuIGZyb20KK3RoZSBvcmlnaW5hbCBwYXJzZXIgb24gZGVtYW5kLiAgV2hhdCdzIGV2ZW4gbW9yZSBpbXBvcnRhbnQgaXMgdGhhdCB3aGVuIHZhbHVlcworYXJlIGNoYW5nZWQgb24gYSBzZWN0aW9uIHByb3h5LCB0aGV5IGFyZSBhY3R1YWxseSBtdXRhdGVkIGluIHRoZSBvcmlnaW5hbAorcGFyc2VyLgogCis6bW9kOmBjb25maWdwYXJzZXJgIG9iamVjdHMgYmVoYXZlIGFzIGNsb3NlIHRvIGFjdHVhbCBkaWN0aW9uYXJpZXMgYXMgcG9zc2libGUuCitUaGUgbWFwcGluZyBpbnRlcmZhY2UgaXMgY29tcGxldGUgYW5kIGFkaGVyZXMgdG8gdGhlIGBgTXV0YWJsZU1hcHBpbmdgYCBBQkMuCitIb3dldmVyLCB0aGVyZSBhcmUgYSBmZXcgZGlmZmVyZW5jZXMgdGhhdCBzaG91bGQgYmUgdGFrZW4gaW50byBhY2NvdW50OgogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIucmVhZGZwKGZwLCBmaWxlbmFtZT1Ob25lKQorKiBCeSBkZWZhdWx0LCBhbGwga2V5cyBpbiBzZWN0aW9ucyBhcmUgYWNjZXNzaWJsZSBpbiBhIGNhc2UtaW5zZW5zaXRpdmUgbWFubmVyCisgIFsxXV8uICBFLmcuIGBgZm9yIG9wdGlvbiBpbiBwYXJzZXJbInNlY3Rpb24iXWBgIHlpZWxkcyBvbmx5IGBgb3B0aW9ueGZvcm1gYCdlZAorICBvcHRpb24ga2V5IG5hbWVzLiAgVGhpcyBtZWFucyBsb3dlcmNhc2VkIGtleXMgYnkgZGVmYXVsdC4gIEF0IHRoZSBzYW1lIHRpbWUsCisgIGZvciBhIHNlY3Rpb24gdGhhdCBob2xkcyB0aGUga2V5IGBgJ2EnYGAsIGJvdGggZXhwcmVzc2lvbnMgcmV0dXJuIGBgVHJ1ZWBgOjoKIAotICAgUmVhZCBhbmQgcGFyc2UgY29uZmlndXJhdGlvbiBkYXRhIGZyb20gdGhlIGZpbGUgb3IgZmlsZS1saWtlIG9iamVjdCBpbiAqZnAqCi0gICAob25seSB0aGUgOm1ldGg6YHJlYWRsaW5lYCBtZXRob2QgaXMgdXNlZCkuICBUaGUgZmlsZS1saWtlIG9iamVjdCBtdXN0Ci0gICBvcGVyYXRlIGluIHRleHQgbW9kZSwgaS5lLiByZXR1cm4gc3RyaW5ncyBmcm9tIDptZXRoOmByZWFkbGluZWAuCisgICAgICJhIiBpbiBwYXJzZXJbInNlY3Rpb24iXQorICAgICAiQSIgaW4gcGFyc2VyWyJzZWN0aW9uIl0KIAotICAgSWYgKmZpbGVuYW1lKiBpcyBvbWl0dGVkIGFuZCAqZnAqIGhhcyBhIDphdHRyOmBuYW1lYCBhdHRyaWJ1dGUsIHRoYXQgaXMgdXNlZAotICAgZm9yICpmaWxlbmFtZSo7IHRoZSBkZWZhdWx0IGlzIGBgPD8/Pz5gYC4KKyogQWxsIHNlY3Rpb25zIGluY2x1ZGUgYGBERUZBVUxUU0VDVGBgIHZhbHVlcyBhcyB3ZWxsIHdoaWNoIG1lYW5zIHRoYXQKKyAgYGAuY2xlYXIoKWBgIG9uIGEgc2VjdGlvbiBtYXkgbm90IGxlYXZlIHRoZSBzZWN0aW9uIHZpc2libHkgZW1wdHkuICBUaGlzIGlzCisgIGJlY2F1c2UgZGVmYXVsdCB2YWx1ZXMgY2Fubm90IGJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VjdGlvbiAoYmVjYXVzZSB0ZWNobmljYWxseQorICB0aGV5IGFyZSBub3QgdGhlcmUpLiAgSWYgdGhleSBhcmUgb3ZlcnJpZGVuIGluIHRoZSBzZWN0aW9uLCBkZWxldGluZyBjYXVzZXMKKyAgdGhlIGRlZmF1bHQgdmFsdWUgdG8gYmUgdmlzaWJsZSBhZ2Fpbi4gIFRyeWluZyB0byBkZWxldGUgYSBkZWZhdWx0IHZhbHVlCisgIGNhdXNlcyBhIGBgS2V5RXJyb3JgYC4KIAorKiBUcnlpbmcgdG8gZGVsZXRlIHRoZSBgYERFRkFVTFRTRUNUYGAgcmFpc2VzIGBgVmFsdWVFcnJvcmBgLgogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIuZ2V0KHNlY3Rpb24sIG9wdGlvbikKKyogYGBwYXJzZXIuZ2V0KHNlY3Rpb24sIG9wdGlvbiwgKiprd2FyZ3MpYGAgLSB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzICoqbm90KioKKyAgYSBmYWxsYmFjayB2YWx1ZS4gTm90ZSBob3dldmVyIHRoYXQgdGhlIHNlY3Rpb24tbGV2ZWwgYGBnZXQoKWBgIG1ldGhvZHMgYXJlCisgIGNvbXBhdGlibGUgYm90aCB3aXRoIHRoZSBtYXBwaW5nIHByb3RvY29sIGFuZCB0aGUgY2xhc3NpYyBjb25maWdwYXJzZXIgQVBJLgogCi0gICBHZXQgYW4gKm9wdGlvbiogdmFsdWUgZm9yIHRoZSBuYW1lZCAqc2VjdGlvbiouCisqIGBgcGFyc2VyLml0ZW1zKClgYCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmcgcHJvdG9jb2wgKHJldHVybnMgYSBsaXN0IG9mCisgICpzZWN0aW9uX25hbWUqLCAqc2VjdGlvbl9wcm94eSogcGFpcnMgaW5jbHVkaW5nIHRoZSBERUZBVUxUU0VDVCkuICBIb3dldmVyLAorICB0aGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBpbnZva2VkIHdpdGggYXJndW1lbnRzOiBgYHBhcnNlci5pdGVtcyhzZWN0aW9uLCByYXcsCisgIHZhcnMpYGAuIFRoZSBsYXR0ZXIgY2FsbCByZXR1cm5zIGEgbGlzdCBvZiAqb3B0aW9uKiwgKnZhbHVlKiBwYWlycyBmb3IKKyAgYSBzcGVjaWZpZWQgYGBzZWN0aW9uYGAsIHdpdGggYWxsIGludGVycG9sYXRpb25zIGV4cGFuZGVkICh1bmxlc3MKKyAgYGByYXc9VHJ1ZWBgIGlzIHByb3ZpZGVkKS4KIAorVGhlIG1hcHBpbmcgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgb24gdG9wIG9mIHRoZSBleGlzdGluZyBsZWdhY3kgQVBJIHNvIHRoYXQKK3N1YmNsYXNzZXMgb3ZlcnJpZGluZyB0aGUgb3JpZ2luYWwgaW50ZXJmYWNlIHN0aWxsIHNob3VsZCBoYXZlIG1hcHBpbmdzIHdvcmtpbmcKK2FzIGV4cGVjdGVkLgogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIuZ2V0aW50KHNlY3Rpb24sIG9wdGlvbikKIAotICAgQSBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggY29lcmNlcyB0aGUgKm9wdGlvbiogaW4gdGhlIHNwZWNpZmllZCAqc2VjdGlvbiogdG8gYW4KLSAgIGludGVnZXIuCitDdXN0b21pemluZyBQYXJzZXIgQmVoYXZpb3VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1RoZXJlIGFyZSBuZWFybHkgYXMgbWFueSBJTkkgZm9ybWF0IHZhcmlhbnRzIGFzIHRoZXJlIGFyZSBhcHBsaWNhdGlvbnMgdXNpbmcgaXQuCis6bW9kOmBjb25maWdwYXJzZXJgIGdvZXMgYSBsb25nIHdheSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBsYXJnZXN0IHNlbnNpYmxlCitzZXQgb2YgSU5JIHN0eWxlcyBhdmFpbGFibGUuICBUaGUgZGVmYXVsdCBmdW5jdGlvbmFsaXR5IGlzIG1haW5seSBkaWN0YXRlZCBieQoraGlzdG9yaWNhbCBiYWNrZ3JvdW5kIGFuZCBpdCdzIHZlcnkgbGlrZWx5IHRoYXQgeW91IHdpbGwgd2FudCB0byBjdXN0b21pemUgc29tZQorb2YgdGhlIGZlYXR1cmVzLgogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIuZ2V0ZmxvYXQoc2VjdGlvbiwgb3B0aW9uKQorVGhlIG1vc3QgY29tbW9uIHdheSB0byBjaGFuZ2UgdGhlIHdheSBhIHNwZWNpZmljIGNvbmZpZyBwYXJzZXIgd29ya3MgaXMgdG8gdXNlCit0aGUgOm1ldGg6YF9faW5pdF9fYCBvcHRpb25zOgogCi0gICBBIGNvbnZlbmllbmNlIG1ldGhvZCB3aGljaCBjb2VyY2VzIHRoZSAqb3B0aW9uKiBpbiB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKiB0byBhCi0gICBmbG9hdGluZyBwb2ludCBudW1iZXIuCisqICpkZWZhdWx0cyosIGRlZmF1bHQgdmFsdWU6IGBgTm9uZWBgCisKKyAgVGhpcyBvcHRpb24gYWNjZXB0cyBhIGRpY3Rpb25hcnkgb2Yga2V5LXZhbHVlIHBhaXJzIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGx5CisgIHB1dCBpbiB0aGUgYGBERUZBVUxUYGAgc2VjdGlvbi4gIFRoaXMgbWFrZXMgZm9yIGFuIGVsZWdhbnQgd2F5IHRvIHN1cHBvcnQKKyAgY29uY2lzZSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgZG9uJ3Qgc3BlY2lmeSB2YWx1ZXMgd2hpY2ggYXJlIHRoZSBzYW1lIGFzCisgIHRoZSBkb2N1bWVudGVkIGRlZmF1bHQuCisKKyAgSGludDogaWYgeW91IHdhbnQgdG8gc3BlY2lmeSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBzcGVjaWZpYyBzZWN0aW9uLCB1c2UKKyAgOm1ldGg6YHJlYWRfZGljdGAgYmVmb3JlIHlvdSByZWFkIHRoZSBhY3R1YWwgZmlsZS4KKworKiAqZGljdF90eXBlKiwgZGVmYXVsdCB2YWx1ZTogOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAKKworICBUaGlzIG9wdGlvbiBoYXMgYSBtYWpvciBpbXBhY3Qgb24gaG93IHRoZSBtYXBwaW5nIHByb3RvY29sIHdpbGwgYmVoYXZlIGFuZCBob3cKKyAgdGhlIHdyaXR0ZW4gY29uZmlndXJhdGlvbiBmaWxlcyBsb29rLiAgV2l0aCB0aGUgZGVmYXVsdCBvcmRlcmVkCisgIGRpY3Rpb25hcnksIGV2ZXJ5IHNlY3Rpb24gaXMgc3RvcmVkIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlCisgIHBhcnNlci4gIFNhbWUgZ29lcyBmb3Igb3B0aW9ucyB3aXRoaW4gc2VjdGlvbnMuCisKKyAgQW4gYWx0ZXJuYXRpdmUgZGljdGlvbmFyeSB0eXBlIGNhbiBiZSB1c2VkIGZvciBleGFtcGxlIHRvIHNvcnQgc2VjdGlvbnMgYW5kCisgIG9wdGlvbnMgb24gd3JpdGUtYmFjay4gIFlvdSBjYW4gYWxzbyB1c2UgYSByZWd1bGFyIGRpY3Rpb25hcnkgZm9yIHBlcmZvcm1hbmNlCisgIHJlYXNvbnMuCisKKyAgUGxlYXNlIG5vdGU6IHRoZXJlIGFyZSB3YXlzIHRvIGFkZCBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgaW4gYSBzaW5nbGUKKyAgb3BlcmF0aW9uLiAgV2hlbiB5b3UgdXNlIGEgcmVndWxhciBkaWN0aW9uYXJ5IGluIHRob3NlIG9wZXJhdGlvbnMsIHRoZSBvcmRlcgorICBvZiB0aGUga2V5cyBtYXkgYmUgcmFuZG9tLiAgRm9yIGV4YW1wbGU6CisKKyAgLi4gZG9jdGVzdDo6CisKKyAgICAgPj4+IHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICA+Pj4gcGFyc2VyLnJlYWRfZGljdCh7J3NlY3Rpb24xJzogeydrZXkxJzogJ3ZhbHVlMScsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tleTInOiAndmFsdWUyJywKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2V5Myc6ICd2YWx1ZTMnfSwKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICdzZWN0aW9uMic6IHsna2V5QSc6ICd2YWx1ZUEnLAorICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrZXlCJzogJ3ZhbHVlQicsCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tleUMnOiAndmFsdWVDJ30sCisgICAgIC4uLiAgICAgICAgICAgICAgICAgICAnc2VjdGlvbjMnOiB7J2Zvbyc6ICd4JywKKyAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFyJzogJ3knLAorICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXonOiAneid9CisgICAgIC4uLiB9KQorICAgICA+Pj4gcGFyc2VyLnNlY3Rpb25zKCkKKyAgICAgWydzZWN0aW9uMycsICdzZWN0aW9uMicsICdzZWN0aW9uMSddCisgICAgID4+PiBbb3B0aW9uIGZvciBvcHRpb24gaW4gcGFyc2VyWydzZWN0aW9uMyddXQorICAgICBbJ2JheicsICdmb28nLCAnYmFyJ10KKworICBJbiB0aGVzZSBvcGVyYXRpb25zIHlvdSBuZWVkIHRvIHVzZSBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgYXMgd2VsbDoKKworICAuLiBkb2N0ZXN0OjoKKworICAgICA+Pj4gZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKyAgICAgPj4+IHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICA+Pj4gcGFyc2VyLnJlYWRfZGljdCgKKyAgICAgLi4uICAgT3JkZXJlZERpY3QoKAorICAgICAuLi4gICAgICgnczEnLAorICAgICAuLi4gICAgICBPcmRlcmVkRGljdCgoCisgICAgIC4uLiAgICAgICAgKCcxJywgJzInKSwKKyAgICAgLi4uICAgICAgICAoJzMnLCAnNCcpLAorICAgICAuLi4gICAgICAgICgnNScsICc2JyksCisgICAgIC4uLiAgICAgICkpCisgICAgIC4uLiAgICAgKSwKKyAgICAgLi4uICAgICAoJ3MyJywKKyAgICAgLi4uICAgICAgT3JkZXJlZERpY3QoKAorICAgICAuLi4gICAgICAgICgnYScsICdiJyksCisgICAgIC4uLiAgICAgICAgKCdjJywgJ2QnKSwKKyAgICAgLi4uICAgICAgICAoJ2UnLCAnZicpLAorICAgICAuLi4gICAgICApKQorICAgICAuLi4gICAgICksCisgICAgIC4uLiAgICkpCisgICAgIC4uLiApCisgICAgID4+PiBwYXJzZXIuc2VjdGlvbnMoKQorICAgICBbJ3MxJywgJ3MyJ10KKyAgICAgPj4+IFtvcHRpb24gZm9yIG9wdGlvbiBpbiBwYXJzZXJbJ3MxJ11dCisgICAgIFsnMScsICczJywgJzUnXQorICAgICA+Pj4gW29wdGlvbiBmb3Igb3B0aW9uIGluIHBhcnNlclsnczInXS52YWx1ZXMoKV0KKyAgICAgWydiJywgJ2QnLCAnZiddCisKKyogKmFsbG93X25vX3ZhbHVlKiwgZGVmYXVsdCB2YWx1ZTogYGBGYWxzZWBgCisKKyAgU29tZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSBrbm93biB0byBpbmNsdWRlIHNldHRpbmdzIHdpdGhvdXQgdmFsdWVzLCBidXQKKyAgd2hpY2ggb3RoZXJ3aXNlIGNvbmZvcm0gdG8gdGhlIHN5bnRheCBzdXBwb3J0ZWQgYnkgOm1vZDpgY29uZmlncGFyc2VyYC4gIFRoZQorICAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8KKyAgaW5kaWNhdGUgdGhhdCBzdWNoIHZhbHVlcyBzaG91bGQgYmUgYWNjZXB0ZWQ6CisKKyAgLi4gZG9jdGVzdDo6CisKKyAgICAgPj4+IGltcG9ydCBjb25maWdwYXJzZXIKKworICAgICA+Pj4gc2FtcGxlX2NvbmZpZyA9ICIiIgorICAgICAuLi4gW215c3FsZF0KKyAgICAgLi4uICAgdXNlciA9IG15c3FsCisgICAgIC4uLiAgIHBpZC1maWxlID0gL3Zhci9ydW4vbXlzcWxkL215c3FsZC5waWQKKyAgICAgLi4uICAgc2tpcC1leHRlcm5hbC1sb2NraW5nCisgICAgIC4uLiAgIG9sZF9wYXNzd29yZHMgPSAxCisgICAgIC4uLiAgIHNraXAtYmRiCisgICAgIC4uLiAgICMgd2UgZG9uJ3QgbmVlZCBBQ0lEIHRvZGF5CisgICAgIC4uLiAgIHNraXAtaW5ub2RiCisgICAgIC4uLiAiIiIKKyAgICAgPj4+IGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoYWxsb3dfbm9fdmFsdWU9VHJ1ZSkKKyAgICAgPj4+IGNvbmZpZy5yZWFkX3N0cmluZyhzYW1wbGVfY29uZmlnKQorCisgICAgID4+PiAjIFNldHRpbmdzIHdpdGggdmFsdWVzIGFyZSB0cmVhdGVkIGFzIGJlZm9yZToKKyAgICAgPj4+IGNvbmZpZ1sibXlzcWxkIl1bInVzZXIiXQorICAgICAnbXlzcWwnCisKKyAgICAgPj4+ICMgU2V0dGluZ3Mgd2l0aG91dCB2YWx1ZXMgcHJvdmlkZSBOb25lOgorICAgICA+Pj4gY29uZmlnWyJteXNxbGQiXVsic2tpcC1iZGIiXQorCisgICAgID4+PiAjIFNldHRpbmdzIHdoaWNoIGFyZW4ndCBzcGVjaWZpZWQgc3RpbGwgcmFpc2UgYW4gZXJyb3I6CisgICAgID4+PiBjb25maWdbIm15c3FsZCJdWyJkb2VzLW5vdC1leGlzdCJdCisgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAuLi4KKyAgICAgS2V5RXJyb3I6ICdkb2VzLW5vdC1leGlzdCcKIAorKiAqZGVsaW1pdGVycyosIGRlZmF1bHQgdmFsdWU6IGBgKCc9JywgJzonKWBgCiAKLS4uIG1ldGhvZDo6IFJhd0NvbmZpZ1BhcnNlci5nZXRib29sZWFuKHNlY3Rpb24sIG9wdGlvbikKKyAgRGVsaW1pdGVycyBhcmUgc3Vic3RyaW5ncyB0aGF0IGRlbGltaXQga2V5cyBmcm9tIHZhbHVlcyB3aXRoaW4gYSBzZWN0aW9uLiBUaGUKKyAgZmlyc3Qgb2NjdXJlbmNlIG9mIGEgZGVsaW1pdGluZyBzdWJzdHJpbmcgb24gYSBsaW5lIGlzIGNvbnNpZGVyZWQgYSBkZWxpbWl0ZXIuCisgIFRoaXMgbWVhbnMgdmFsdWVzIChidXQgbm90IGtleXMpIGNhbiBjb250YWluIHRoZSBkZWxpbWl0ZXJzLgogCi0gICBBIGNvbnZlbmllbmNlIG1ldGhvZCB3aGljaCBjb2VyY2VzIHRoZSAqb3B0aW9uKiBpbiB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKiB0byBhCi0gICBCb29sZWFuIHZhbHVlLiAgTm90ZSB0aGF0IHRoZSBhY2NlcHRlZCB2YWx1ZXMgZm9yIHRoZSBvcHRpb24gYXJlIGBgIjEiYGAsCi0gICBgYCJ5ZXMiYGAsIGBgInRydWUiYGAsIGFuZCBgYCJvbiJgYCwgd2hpY2ggY2F1c2UgdGhpcyBtZXRob2QgdG8gcmV0dXJuIGBgVHJ1ZWBgLAotICAgYW5kIGBgIjAiYGAsIGBgIm5vImBgLCBgYCJmYWxzZSJgYCwgYW5kIGBgIm9mZiJgYCwgd2hpY2ggY2F1c2UgaXQgdG8gcmV0dXJuCi0gICBgYEZhbHNlYGAuICBUaGVzZSBzdHJpbmcgdmFsdWVzIGFyZSBjaGVja2VkIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIuICBBbnkKLSAgIG90aGVyIHZhbHVlIHdpbGwgY2F1c2UgaXQgdG8gcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAuCisgIFNlZSBhbHNvIHRoZSAqc3BhY2VfYXJvdW5kX2RlbGltaXRlcnMqIGFyZ3VtZW50IHRvCisgIDptZXRoOmBDb25maWdQYXJzZXIud3JpdGVgLgogCisqICpjb21tZW50X3ByZWZpeGVzKiwgZGVmYXVsdCB2YWx1ZTogYGAoJyMnLCAnOycpYGAKIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLml0ZW1zKHNlY3Rpb24pCisqICppbmxpbmVfY29tbWVudF9wcmVmaXhlcyosIGRlZmF1bHQgdmFsdWU6IGBgTm9uZWBgCiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgYGAobmFtZSwgdmFsdWUpYGAgcGFpcnMgZm9yIGVhY2ggb3B0aW9uIGluIHRoZSBnaXZlbiAqc2VjdGlvbiouCisgIENvbW1lbnQgcHJlZml4ZXMgYXJlIHN0cmluZ3MgdGhhdCBpbmRpY2F0ZSB0aGUgc3RhcnQgb2YgYSB2YWxpZCBjb21tZW50IHdpdGhpbgorICBhIGNvbmZpZyBmaWxlLiAqY29tbWVudF9wcmVmaXhlcyogYXJlIHVzZWQgb25seSBvbiBvdGhlcndpc2UgZW1wdHkgbGluZXMKKyAgKG9wdGlvbmFsbHkgaW5kZW50ZWQpIHdoZXJlYXMgKmlubGluZV9jb21tZW50X3ByZWZpeGVzKiBjYW4gYmUgdXNlZCBhZnRlcgorICBldmVyeSB2YWxpZCB2YWx1ZSAoZS5nLiAgc2VjdGlvbiBuYW1lcywgb3B0aW9ucyBhbmQgZW1wdHkgbGluZXMgYXMgd2VsbCkuIEJ5CisgIGRlZmF1bHQgaW5saW5lIGNvbW1lbnRzIGFyZSBkaXNhYmxlZCBhbmQgYGAnIydgYCBhbmQgYGAnOydgYCBhcmUgdXNlZCBhcworICBwcmVmaXhlcyBmb3Igd2hvbGUgbGluZSBjb21tZW50cy4KIAorICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICBJbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiA6bW9kOmBjb25maWdwYXJzZXJgIGJlaGF2aW91ciBtYXRjaGVkCisgICAgIGBgY29tbWVudF9wcmVmaXhlcz0oJyMnLCc7JylgYCBhbmQgYGBpbmxpbmVfY29tbWVudF9wcmVmaXhlcz0oJzsnLClgYC4KIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLnNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQorICBQbGVhc2Ugbm90ZSB0aGF0IGNvbmZpZyBwYXJzZXJzIGRvbid0IHN1cHBvcnQgZXNjYXBpbmcgb2YgY29tbWVudCBwcmVmaXhlcyBzbworICB1c2luZyAqaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMqIG1heSBwcmV2ZW50IHVzZXJzIGZyb20gc3BlY2lmeWluZyBvcHRpb24KKyAgdmFsdWVzIHdpdGggY2hhcmFjdGVycyB1c2VkIGFzIGNvbW1lbnQgcHJlZml4ZXMuIFdoZW4gaW4gZG91YnQsIGF2b2lkIHNldHRpbmcKKyAgKmlubGluZV9jb21tZW50X3ByZWZpeGVzKi4gSW4gYW55IGNpcmN1bXN0YW5jZXMsIHRoZSBvbmx5IHdheSBvZiBzdG9yaW5nCisgIGNvbW1lbnQgcHJlZml4IGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUgaW4gbXVsdGlsaW5lIHZhbHVlcyBpcyB0bworICBpbnRlcnBvbGF0ZSB0aGUgcHJlZml4LCBmb3IgZXhhbXBsZTo6CiAKLSAgIElmIHRoZSBnaXZlbiBzZWN0aW9uIGV4aXN0cywgc2V0IHRoZSBnaXZlbiBvcHRpb24gdG8gdGhlIHNwZWNpZmllZCB2YWx1ZTsKLSAgIG90aGVyd2lzZSByYWlzZSA6ZXhjOmBOb1NlY3Rpb25FcnJvcmAuICBXaGlsZSBpdCBpcyBwb3NzaWJsZSB0byB1c2UKLSAgIDpjbGFzczpgUmF3Q29uZmlnUGFyc2VyYCAob3IgOmNsYXNzOmBDb25maWdQYXJzZXJgIHdpdGggKnJhdyogcGFyYW1ldGVycyBzZXQgdG8KLSAgIHRydWUpIGZvciAqaW50ZXJuYWwqIHN0b3JhZ2Ugb2Ygbm9uLXN0cmluZyB2YWx1ZXMsIGZ1bGwgZnVuY3Rpb25hbGl0eSAoaW5jbHVkaW5nCi0gICBpbnRlcnBvbGF0aW9uIGFuZCBvdXRwdXQgdG8gZmlsZXMpIGNhbiBvbmx5IGJlIGFjaGlldmVkIHVzaW5nIHN0cmluZyB2YWx1ZXMuCisgICAgPj4+IGZyb20gY29uZmlncGFyc2VyIGltcG9ydCBDb25maWdQYXJzZXIsIEV4dGVuZGVkSW50ZXJwb2xhdGlvbgorICAgID4+PiBwYXJzZXIgPSBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1FeHRlbmRlZEludGVycG9sYXRpb24oKSkKKyAgICA+Pj4gIyB0aGUgZGVmYXVsdCBCYXNpY0ludGVycG9sYXRpb24gY291bGQgYmUgdXNlZCBhcyB3ZWxsCisgICAgPj4+IHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICAuLi4gW0RFRkFVTFRdCisgICAgLi4uIGhhc2ggPSAjCisgICAgLi4uCisgICAgLi4uIFtoYXNoZXNdCisgICAgLi4uIHNoZWJhbmcgPQorICAgIC4uLiAgICR7aGFzaH0hL3Vzci9iaW4vZW52IHB5dGhvbgorICAgIC4uLiAgICR7aGFzaH0gLSotIGNvZGluZzogdXRmLTggLSotCisgICAgLi4uCisgICAgLi4uIGV4dGVuc2lvbnMgPQorICAgIC4uLiAgIGVuYWJsZWRfZXh0ZW5zaW9uCisgICAgLi4uICAgYW5vdGhlcl9leHRlbnNpb24KKyAgICAuLi4gICAjZGlzYWJsZWRfYnlfY29tbWVudAorICAgIC4uLiAgIHlldF9hbm90aGVyX2V4dGVuc2lvbgorICAgIC4uLgorICAgIC4uLiBpbnRlcnBvbGF0aW9uIG5vdCBuZWNlc3NhcnkgPSBpZiAjIGlzIG5vdCBhdCBsaW5lIHN0YXJ0CisgICAgLi4uIGV2ZW4gaW4gbXVsdGlsaW5lIHZhbHVlcyA9IGxpbmUgIzEKKyAgICAuLi4gICBsaW5lICMyCisgICAgLi4uICAgbGluZSAjMworICAgIC4uLiAiIiIpCisgICAgPj4+IHByaW50KHBhcnNlclsnaGFzaGVzJ11bJ3NoZWJhbmcnXSkKIAorICAgICMhL3Vzci9iaW4vZW52IHB5dGhvbgorICAgICMgLSotIGNvZGluZzogdXRmLTggLSotCisgICAgPj4+IHByaW50KHBhcnNlclsnaGFzaGVzJ11bJ2V4dGVuc2lvbnMnXSkKIAotLi4gbWV0aG9kOjogUmF3Q29uZmlnUGFyc2VyLndyaXRlKGZpbGVvYmplY3QpCisgICAgZW5hYmxlZF9leHRlbnNpb24KKyAgICBhbm90aGVyX2V4dGVuc2lvbgorICAgIHlldF9hbm90aGVyX2V4dGVuc2lvbgorICAgID4+PiBwcmludChwYXJzZXJbJ2hhc2hlcyddWydpbnRlcnBvbGF0aW9uIG5vdCBuZWNlc3NhcnknXSkKKyAgICBpZiAjIGlzIG5vdCBhdCBsaW5lIHN0YXJ0CisgICAgPj4+IHByaW50KHBhcnNlclsnaGFzaGVzJ11bJ2V2ZW4gaW4gbXVsdGlsaW5lIHZhbHVlcyddKQorICAgIGxpbmUgIzEKKyAgICBsaW5lICMyCisgICAgbGluZSAjMwogCi0gICBXcml0ZSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoZSBzcGVjaWZpZWQgOnRlcm06YGZpbGUgb2JqZWN0YCwKLSAgIHdoaWNoIG11c3QgYmUgb3BlbmVkIGluIHRleHQgbW9kZSAoYWNjZXB0aW5nIHN0cmluZ3MpLiAgVGhpcyByZXByZXNlbnRhdGlvbgotICAgY2FuIGJlIHBhcnNlZCBieSBhIGZ1dHVyZSA6bWV0aDpgcmVhZGAgY2FsbC4KKyogKnN0cmljdCosIGRlZmF1bHQgdmFsdWU6IGBgVHJ1ZWBgCiAKKyAgV2hlbiBzZXQgdG8gYGBUcnVlYGAsIHRoZSBwYXJzZXIgd2lsbCBub3QgYWxsb3cgZm9yIGFueSBzZWN0aW9uIG9yIG9wdGlvbgorICBkdXBsaWNhdGVzIHdoaWxlIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSBzb3VyY2UgKHVzaW5nIDptZXRoOmByZWFkX2ZpbGVgLAorICA6bWV0aDpgcmVhZF9zdHJpbmdgIG9yIDptZXRoOmByZWFkX2RpY3RgKS4gSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHN0cmljdAorICBwYXJzZXJzIGluIG5ldyBhcHBsaWNhdGlvbnMuCiAKLS4uIG1ldGhvZDo6IFJhd0NvbmZpZ1BhcnNlci5yZW1vdmVfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbikKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgOm1vZDpgY29uZmlncGFyc2VyYCBiZWhhdmlvdXIgbWF0Y2hlZAorICAgICBgYHN0cmljdD1GYWxzZWBgLgogCi0gICBSZW1vdmUgdGhlIHNwZWNpZmllZCAqb3B0aW9uKiBmcm9tIHRoZSBzcGVjaWZpZWQgKnNlY3Rpb24qLiBJZiB0aGUgc2VjdGlvbiBkb2VzCi0gICBub3QgZXhpc3QsIHJhaXNlIDpleGM6YE5vU2VjdGlvbkVycm9yYC4gIElmIHRoZSBvcHRpb24gZXhpc3RlZCB0byBiZSByZW1vdmVkLAotICAgcmV0dXJuIDpjb25zdDpgVHJ1ZWA7IG90aGVyd2lzZSByZXR1cm4gOmNvbnN0OmBGYWxzZWAuCisqICplbXB0eV9saW5lc19pbl92YWx1ZXMqLCBkZWZhdWx0IHZhbHVlOiBgYFRydWVgYAogCisgIEluIGNvbmZpZyBwYXJzZXJzLCB2YWx1ZXMgY2FuIHNwYW4gbXVsdGlwbGUgbGluZXMgYXMgbG9uZyBhcyB0aGV5IGFyZQorICBpbmRlbnRlZCBtb3JlIHRoYW4gdGhlIGtleSB0aGF0IGhvbGRzIHRoZW0uICBCeSBkZWZhdWx0IHBhcnNlcnMgYWxzbyBsZXQKKyAgZW1wdHkgbGluZXMgdG8gYmUgcGFydHMgb2YgdmFsdWVzLiAgQXQgdGhlIHNhbWUgdGltZSwga2V5cyBjYW4gYmUgYXJiaXRyYXJpbHkKKyAgaW5kZW50ZWQgdGhlbXNlbHZlcyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5LiAgSW4gY29uc2VxdWVuY2UsIHdoZW4KKyAgY29uZmlndXJhdGlvbiBmaWxlcyBnZXQgYmlnIGFuZCBjb21wbGV4LCBpdCBpcyBlYXN5IGZvciB0aGUgdXNlciB0byBsb3NlCisgIHRyYWNrIG9mIHRoZSBmaWxlIHN0cnVjdHVyZS4gIFRha2UgZm9yIGluc3RhbmNlOgogCi0uLiBtZXRob2Q6OiBSYXdDb25maWdQYXJzZXIucmVtb3ZlX3NlY3Rpb24oc2VjdGlvbikKKyAgLi4gY29kZS1ibG9jazo6IGluaQogCi0gICBSZW1vdmUgdGhlIHNwZWNpZmllZCAqc2VjdGlvbiogZnJvbSB0aGUgY29uZmlndXJhdGlvbi4gSWYgdGhlIHNlY3Rpb24gaW4gZmFjdAotICAgZXhpc3RlZCwgcmV0dXJuIGBgVHJ1ZWBgLiBPdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4KKyAgICAgW1NlY3Rpb25dCisgICAgIGtleSA9IG11bHRpbGluZQorICAgICAgIHZhbHVlIHdpdGggYSBnb3RjaGEKIAorICAgICAgdGhpcyA9IGlzIHN0aWxsIGEgcGFydCBvZiB0aGUgbXVsdGlsaW5lIHZhbHVlIG9mICdrZXknCiAKLS4uIG1ldGhvZDo6IFJhd0NvbmZpZ1BhcnNlci5vcHRpb254Zm9ybShvcHRpb24pCisgIFRoaXMgY2FuIGJlIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHRoZSB1c2VyIHRvIHNlZSBpZiBzaGUncyB1c2luZyBhCisgIHByb3BvcnRpb25hbCBmb250IHRvIGVkaXQgdGhlIGZpbGUuICBUaGF0IGlzIHdoeSB3aGVuIHlvdXIgYXBwbGljYXRpb24gZG9lcworICBub3QgbmVlZCB2YWx1ZXMgd2l0aCBlbXB0eSBsaW5lcywgeW91IHNob3VsZCBjb25zaWRlciBkaXNhbGxvd2luZyB0aGVtLiAgVGhpcworICB3aWxsIG1ha2UgZW1wdHkgbGluZXMgc3BsaXQga2V5cyBldmVyeSB0aW1lLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGl0IHdvdWxkCisgIHByb2R1Y2UgdHdvIGtleXMsIGBga2V5YGAgYW5kIGBgdGhpc2BgLgogCi0gICBUcmFuc2Zvcm1zIHRoZSBvcHRpb24gbmFtZSAqb3B0aW9uKiBhcyBmb3VuZCBpbiBhbiBpbnB1dCBmaWxlIG9yIGFzIHBhc3NlZCBpbgotICAgYnkgY2xpZW50IGNvZGUgdG8gdGhlIGZvcm0gdGhhdCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcy4KLSAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgYSBsb3dlci1jYXNlIHZlcnNpb24gb2YgKm9wdGlvbio7Ci0gICBzdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG9yIGNsaWVudCBjb2RlIGNhbiBzZXQgYW4gYXR0cmlidXRlIG9mIHRoaXMgbmFtZQotICAgb24gaW5zdGFuY2VzIHRvIGFmZmVjdCB0aGlzIGJlaGF2aW9yLgorKiAqZGVmYXVsdF9zZWN0aW9uKiwgZGVmYXVsdCB2YWx1ZTogYGBjb25maWdwYXJzZXIuREVGQVVMVFNFQ1RgYCAodGhhdCBpczoKKyAgYGAiREVGQVVMVCJgYCkKIAotICAgWW91IGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gc3ViY2xhc3MgYSBDb25maWdQYXJzZXIgdG8gdXNlIHRoaXMgbWV0aG9kLCB5b3UKLSAgIGNhbiBhbHNvIHJlLXNldCBpdCBvbiBhbiBpbnN0YW5jZSwgdG8gYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc3RyaW5nCi0gICBhcmd1bWVudC4gIFNldHRpbmcgaXQgdG8gYGBzdHJgYCwgZm9yIGV4YW1wbGUsIHdvdWxkIG1ha2Ugb3B0aW9uIG5hbWVzIGNhc2UKLSAgIHNlbnNpdGl2ZTo6CisgIFRoZSBjb252ZW50aW9uIG9mIGFsbG93aW5nIGEgc3BlY2lhbCBzZWN0aW9uIG9mIGRlZmF1bHQgdmFsdWVzIGZvciBvdGhlcgorICBzZWN0aW9ucyBvciBpbnRlcnBvbGF0aW9uIHB1cnBvc2VzIGlzIGEgcG93ZXJmdWwgY29uY2VwdCBvZiB0aGlzIGxpYnJhcnksCisgIGxldHRpbmcgdXNlcnMgY3JlYXRlIGNvbXBsZXggZGVjbGFyYXRpdmUgY29uZmlndXJhdGlvbnMuIFRoaXMgc2VjdGlvbiBpcworICBub3JtYWxseSBjYWxsZWQgYGAiREVGQVVMVCJgYCBidXQgdGhpcyBjYW4gYmUgY3VzdG9taXplZCB0byBwb2ludCB0byBhbnkKKyAgb3RoZXIgdmFsaWQgc2VjdGlvbiBuYW1lLiBTb21lIHR5cGljYWwgdmFsdWVzIGluY2x1ZGU6IGBgImdlbmVyYWwiYGAgb3IKKyAgYGAiY29tbW9uImBgLiBUaGUgbmFtZSBwcm92aWRlZCBpcyB1c2VkIGZvciByZWNvZ25pemluZyBkZWZhdWx0IHNlY3Rpb25zIHdoZW4KKyAgcmVhZGluZyBmcm9tIGFueSBzb3VyY2UgYW5kIGlzIHVzZWQgd2hlbiB3cml0aW5nIGNvbmZpZ3VyYXRpb24gYmFjayB0bworICBhIGZpbGUuIEl0cyBjdXJyZW50IHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCisgIGBgcGFyc2VyX2luc3RhbmNlLmRlZmF1bHRfc2VjdGlvbmBgIGF0dHJpYnV0ZSBhbmQgbWF5IGJlIG1vZGlmaWVkIGF0IHJ1bnRpbWUKKyAgKGkuZS4gdG8gY29udmVydCBmaWxlcyBmcm9tIG9uZSBmb3JtYXQgdG8gYW5vdGhlcikuCiAKLSAgICAgIGNmZ3BhcnNlciA9IENvbmZpZ1BhcnNlcigpCi0gICAgICAuLi4KLSAgICAgIGNmZ3BhcnNlci5vcHRpb254Zm9ybSA9IHN0cgorKiAqaW50ZXJwb2xhdGlvbiosIGRlZmF1bHQgdmFsdWU6IGBgY29uZmlncGFyc2VyLkJhc2ljSW50ZXJwb2xhdGlvbmBgCiAKLSAgIE5vdGUgdGhhdCB3aGVuIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpdGVzcGFjZSBhcm91bmQgdGhlCi0gICBvcHRpb24gbmFtZXMgYXJlIHN0cmlwcGVkIGJlZm9yZSA6bWV0aDpgb3B0aW9ueGZvcm1gIGlzIGNhbGxlZC4KKyAgSW50ZXJwb2xhdGlvbiBiZWhhdmlvdXIgbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcHJvdmlkaW5nIGEgY3VzdG9tIGhhbmRsZXIKKyAgdGhyb3VnaCB0aGUgKmludGVycG9sYXRpb24qIGFyZ3VtZW50LiBgYE5vbmVgYCBjYW4gYmUgdXNlZCB0byB0dXJuIG9mZgorICBpbnRlcnBvbGF0aW9uIGNvbXBsZXRlbHksIGBgRXh0ZW5kZWRJbnRlcnBvbGF0aW9uKClgYCBwcm92aWRlcyBhIG1vcmUKKyAgYWR2YW5jZWQgdmFyaWFudCBpbnNwaXJlZCBieSBgYHpjLmJ1aWxkb3V0YGAuIE1vcmUgb24gdGhlIHN1YmplY3QgaW4gdGhlCisgIGBkZWRpY2F0ZWQgZG9jdW1lbnRhdGlvbiBzZWN0aW9uIDwjaW50ZXJwb2xhdGlvbi1vZi12YWx1ZXM+YF8uCisgIDpjbGFzczpgUmF3Q29uZmlnUGFyc2VyYCBoYXMgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgLgogCiAKLS4uIF9jb25maWdwYXJzZXItb2JqZWN0czoKK01vcmUgYWR2YW5jZWQgY3VzdG9taXphdGlvbiBtYXkgYmUgYWNoaWV2ZWQgYnkgb3ZlcnJpZGluZyBkZWZhdWx0IHZhbHVlcyBvZgordGhlc2UgcGFyc2VyIGF0dHJpYnV0ZXMuICBUaGUgZGVmYXVsdHMgYXJlIGRlZmluZWQgb24gdGhlIGNsYXNzZXMsIHNvIHRoZXkKK21heSBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyBvciBieSBhdHRyaWJ1dGUgYXNzaWdubWVudC4KIAotQ29uZmlnUGFyc2VyIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuLiBhdHRyaWJ1dGU6OiBCT09MRUFOX1NUQVRFUwogCi1UaGUgOmNsYXNzOmBDb25maWdQYXJzZXJgIGNsYXNzIGV4dGVuZHMgc29tZSBtZXRob2RzIG9mIHRoZQotOmNsYXNzOmBSYXdDb25maWdQYXJzZXJgIGludGVyZmFjZSwgYWRkaW5nIHNvbWUgb3B0aW9uYWwgYXJndW1lbnRzLgorICBCeSBkZWZhdWx0IHdoZW4gdXNpbmcgOm1ldGg6YGdldGJvb2xlYW5gLCBjb25maWcgcGFyc2VycyBjb25zaWRlciB0aGUKKyAgZm9sbG93aW5nIHZhbHVlcyBgYFRydWVgYDogYGAnMSdgYCwgYGAneWVzJ2BgLCBgYCd0cnVlJ2BgLCBgYCdvbidgYCBhbmQgdGhlCisgIGZvbGxvd2luZyB2YWx1ZXMgYGBGYWxzZWBgOiBgYCcwJ2BgLCBgYCdubydgYCwgYGAnZmFsc2UnYGAsIGBgJ29mZidgYC4gIFlvdQorICBjYW4gb3ZlcnJpZGUgdGhpcyBieSBzcGVjaWZ5aW5nIGEgY3VzdG9tIGRpY3Rpb25hcnkgb2Ygc3RyaW5ncyBhbmQgdGhlaXIKKyAgQm9vbGVhbiBvdXRjb21lcy4gRm9yIGV4YW1wbGU6CiAKKyAgLi4gZG9jdGVzdDo6CiAKLS4uIG1ldGhvZDo6IENvbmZpZ1BhcnNlci5nZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSkKKyAgICAgPj4+IGN1c3RvbSA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICA+Pj4gY3VzdG9tWydzZWN0aW9uMSddID0geydmdW5reSc6ICdub3BlJ30KKyAgICAgPj4+IGN1c3RvbVsnc2VjdGlvbjEnXS5nZXRib29sZWFuKCdmdW5reScpCisgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgIFZhbHVlRXJyb3I6IE5vdCBhIGJvb2xlYW46IG5vcGUKKyAgICAgPj4+IGN1c3RvbS5CT09MRUFOX1NUQVRFUyA9IHsnc3VyZSc6IFRydWUsICdub3BlJzogRmFsc2V9CisgICAgID4+PiBjdXN0b21bJ3NlY3Rpb24xJ10uZ2V0Ym9vbGVhbignZnVua3knKQorICAgICBGYWxzZQogCi0gICBHZXQgYW4gKm9wdGlvbiogdmFsdWUgZm9yIHRoZSBuYW1lZCAqc2VjdGlvbiouICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0Ci0gICBtdXN0IGJlIGEgZGljdGlvbmFyeS4gIFRoZSAqb3B0aW9uKiBpcyBsb29rZWQgdXAgaW4gKnZhcnMqIChpZiBwcm92aWRlZCksCi0gICAqc2VjdGlvbiosIGFuZCBpbiAqZGVmYXVsdHMqIGluIHRoYXQgb3JkZXIuCisgIE90aGVyIHR5cGljYWwgQm9vbGVhbiBwYWlycyBpbmNsdWRlIGBgYWNjZXB0YGAvYGByZWplY3RgYCBvcgorICBgYGVuYWJsZWRgYC9gYGRpc2FibGVkYGAuCiAKLSAgIEFsbCB0aGUgYGAnJSdgYCBpbnRlcnBvbGF0aW9ucyBhcmUgZXhwYW5kZWQgaW4gdGhlIHJldHVybiB2YWx1ZXMsIHVubGVzcyB0aGUKLSAgICpyYXcqIGFyZ3VtZW50IGlzIHRydWUuICBWYWx1ZXMgZm9yIGludGVycG9sYXRpb24ga2V5cyBhcmUgbG9va2VkIHVwIGluIHRoZQotICAgc2FtZSBtYW5uZXIgYXMgdGhlIG9wdGlvbi4KKy4uIG1ldGhvZDo6IG9wdGlvbnhmb3JtKG9wdGlvbikKIAorICBUaGlzIG1ldGhvZCB0cmFuc2Zvcm1zIG9wdGlvbiBuYW1lcyBvbiBldmVyeSByZWFkLCBnZXQsIG9yIHNldAorICBvcGVyYXRpb24uICBUaGUgZGVmYXVsdCBjb252ZXJ0cyB0aGUgbmFtZSB0byBsb3dlcmNhc2UuICBUaGlzIGFsc28KKyAgbWVhbnMgdGhhdCB3aGVuIGEgY29uZmlndXJhdGlvbiBmaWxlIGdldHMgd3JpdHRlbiwgYWxsIGtleXMgd2lsbCBiZQorICBsb3dlcmNhc2UuICBPdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGF0J3MgdW5zdWl0YWJsZS4KKyAgRm9yIGV4YW1wbGU6CiAKLS4uIG1ldGhvZDo6IENvbmZpZ1BhcnNlci5pdGVtcyhzZWN0aW9uLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSkKKyAgLi4gZG9jdGVzdDo6CiAKLSAgIFJldHVybiBhIGxpc3Qgb2YgYGAobmFtZSwgdmFsdWUpYGAgcGFpcnMgZm9yIGVhY2ggb3B0aW9uIGluIHRoZSBnaXZlbiAqc2VjdGlvbiouCi0gICBPcHRpb25hbCBhcmd1bWVudHMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciB0aGUgOm1ldGg6YGdldGAgbWV0aG9kLgorICAgICA+Pj4gY29uZmlnID0gIiIiCisgICAgIC4uLiBbU2VjdGlvbjFdCisgICAgIC4uLiBLZXkgPSBWYWx1ZQorICAgICAuLi4KKyAgICAgLi4uIFtTZWN0aW9uMl0KKyAgICAgLi4uIEFub3RoZXJLZXkgPSBWYWx1ZQorICAgICAuLi4gIiIiCisgICAgID4+PiB0eXBpY2FsID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgID4+PiB0eXBpY2FsLnJlYWRfc3RyaW5nKGNvbmZpZykKKyAgICAgPj4+IGxpc3QodHlwaWNhbFsnU2VjdGlvbjEnXS5rZXlzKCkpCisgICAgIFsna2V5J10KKyAgICAgPj4+IGxpc3QodHlwaWNhbFsnU2VjdGlvbjInXS5rZXlzKCkpCisgICAgIFsnYW5vdGhlcmtleSddCisgICAgID4+PiBjdXN0b20gPSBjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyKCkKKyAgICAgPj4+IGN1c3RvbS5vcHRpb254Zm9ybSA9IGxhbWJkYSBvcHRpb246IG9wdGlvbgorICAgICA+Pj4gY3VzdG9tLnJlYWRfc3RyaW5nKGNvbmZpZykKKyAgICAgPj4+IGxpc3QoY3VzdG9tWydTZWN0aW9uMSddLmtleXMoKSkKKyAgICAgWydLZXknXQorICAgICA+Pj4gbGlzdChjdXN0b21bJ1NlY3Rpb24yJ10ua2V5cygpKQorICAgICBbJ0Fub3RoZXJLZXknXQogCisuLiBhdHRyaWJ1dGU6OiBTRUNUQ1JFCiAKLS4uIF9zYWZlY29uZmlncGFyc2VyLW9iamVjdHM6CisgIEEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gcGFyc2Ugc2VjdGlvbiBoZWFkZXJzLiBUaGUgZGVmYXVsdAorICBtYXRjaGVzIGBgW3NlY3Rpb25dYGAgdG8gdGhlIG5hbWUgYGAic2VjdGlvbiJgYC4gV2hpdGVzcGFjZSBpcyBjb25zaWRlcmVkIHBhcnQKKyAgb2YgdGhlIHNlY3Rpb24gbmFtZSwgdGh1cyBgYFsgIGxhcmNoICBdYGAgd2lsbCBiZSByZWFkIGFzIGEgc2VjdGlvbiBvZiBuYW1lCisgIGBgIiAgbGFyY2ggICJgYC4gT3ZlcnJpZGUgdGhpcyBhdHRyaWJ1dGUgaWYgdGhhdCdzIHVuc3VpdGFibGUuICBGb3IgZXhhbXBsZToKIAotU2FmZUNvbmZpZ1BhcnNlciBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgLi4gZG9jdGVzdDo6CiAKLVRoZSA6Y2xhc3M6YFNhZmVDb25maWdQYXJzZXJgIGNsYXNzIGltcGxlbWVudHMgdGhlIHNhbWUgZXh0ZW5kZWQgaW50ZXJmYWNlIGFzCi06Y2xhc3M6YENvbmZpZ1BhcnNlcmAsIHdpdGggdGhlIGZvbGxvd2luZyBhZGRpdGlvbjoKKyAgICAgPj4+IGNvbmZpZyA9ICIiIgorICAgICAuLi4gW1NlY3Rpb24gMV0KKyAgICAgLi4uIG9wdGlvbiA9IHZhbHVlCisgICAgIC4uLgorICAgICAuLi4gWyAgU2VjdGlvbiAyICBdCisgICAgIC4uLiBhbm90aGVyID0gdmFsCisgICAgIC4uLiAiIiIKKyAgICAgPj4+IHR5cGljYWwgPSBDb25maWdQYXJzZXIoKQorICAgICA+Pj4gdHlwaWNhbC5yZWFkX3N0cmluZyhjb25maWcpCisgICAgID4+PiB0eXBpY2FsLnNlY3Rpb25zKCkKKyAgICAgWydTZWN0aW9uIDEnLCAnICBTZWN0aW9uIDIgICddCisgICAgID4+PiBjdXN0b20gPSBDb25maWdQYXJzZXIoKQorICAgICA+Pj4gY3VzdG9tLlNFQ1RDUkUgPSByZS5jb21waWxlKHIiXFsgKig/UDxoZWFkZXI+W15dXSs/KSAqXF0iKQorICAgICA+Pj4gY3VzdG9tLnJlYWRfc3RyaW5nKGNvbmZpZykKKyAgICAgPj4+IGN1c3RvbS5zZWN0aW9ucygpCisgICAgIFsnU2VjdGlvbiAxJywgJ1NlY3Rpb24gMiddCiAKKyAgLi4gbm90ZTo6CiAKLS4uIG1ldGhvZDo6IFNhZmVDb25maWdQYXJzZXIuc2V0KHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCisgICAgIFdoaWxlIENvbmZpZ1BhcnNlciBvYmplY3RzIGFsc28gdXNlIGFuIGBgT1BUQ1JFYGAgYXR0cmlidXRlIGZvciByZWNvZ25pemluZworICAgICBvcHRpb24gbGluZXMsIGl0J3Mgbm90IHJlY29tbWVuZGVkIHRvIG92ZXJyaWRlIGl0IGJlY2F1c2UgdGhhdCB3b3VsZAorICAgICBpbnRlcmZlcmUgd2l0aCBjb25zdHJ1Y3RvciBvcHRpb25zICphbGxvd19ub192YWx1ZSogYW5kICpkZWxpbWl0ZXJzKi4KIAotICAgSWYgdGhlIGdpdmVuIHNlY3Rpb24gZXhpc3RzLCBzZXQgdGhlIGdpdmVuIG9wdGlvbiB0byB0aGUgc3BlY2lmaWVkIHZhbHVlOwotICAgb3RoZXJ3aXNlIHJhaXNlIDpleGM6YE5vU2VjdGlvbkVycm9yYC4gICp2YWx1ZSogbXVzdCBiZSBhIHN0cmluZzsgaWYgaXQgaXMKLSAgIG5vdCwgOmV4YzpgVHlwZUVycm9yYCBpcyByYWlzZWQuCiAKK0xlZ2FjeSBBUEkgRXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KIAotRXhhbXBsZXMKLS0tLS0tLS0tCitNYWlubHkgYmVjYXVzZSBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBjb25jZXJucywgOm1vZDpgY29uZmlncGFyc2VyYAorcHJvdmlkZXMgYWxzbyBhIGxlZ2FjeSBBUEkgd2l0aCBleHBsaWNpdCBgYGdldGBgL2Bgc2V0YGAgbWV0aG9kcy4gIFdoaWxlIHRoZXJlCithcmUgdmFsaWQgdXNlIGNhc2VzIGZvciB0aGUgbWV0aG9kcyBvdXRsaW5lZCBiZWxvdywgbWFwcGluZyBwcm90b2NvbCBhY2Nlc3MgaXMKK3ByZWZlcnJlZCBmb3IgbmV3IHByb2plY3RzLiAgVGhlIGxlZ2FjeSBBUEkgaXMgYXQgdGltZXMgbW9yZSBhZHZhbmNlZCwKK2xvdy1sZXZlbCBhbmQgZG93bnJpZ2h0IGNvdW50ZXJpbnR1aXRpdmUuCiAKIEFuIGV4YW1wbGUgb2Ygd3JpdGluZyB0byBhIGNvbmZpZ3VyYXRpb24gZmlsZTo6CiAKQEAgLTM5OCwxMyArNzY0LDExIEBACiAKICAgIGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXIoKQogCi0gICAjIFdoZW4gYWRkaW5nIHNlY3Rpb25zIG9yIGl0ZW1zLCBhZGQgdGhlbSBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZgotICAgIyBob3cgeW91IHdhbnQgdGhlbSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGFjdHVhbCBmaWxlLgotICAgIyBJbiBhZGRpdGlvbiwgcGxlYXNlIG5vdGUgdGhhdCB1c2luZyBSYXdDb25maWdQYXJzZXIncyBhbmQgdGhlIHJhdwotICAgIyBtb2RlIG9mIENvbmZpZ1BhcnNlcidzIHJlc3BlY3RpdmUgc2V0IGZ1bmN0aW9ucywgeW91IGNhbiBhc3NpZ24KLSAgICMgbm9uLXN0cmluZyB2YWx1ZXMgdG8ga2V5cyBpbnRlcm5hbGx5LCBidXQgd2lsbCByZWNlaXZlIGFuIGVycm9yCi0gICAjIHdoZW4gYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZpbGUgb3Igd2hlbiB5b3UgZ2V0IGl0IGluIG5vbi1yYXcKLSAgICMgbW9kZS4gU2FmZUNvbmZpZ1BhcnNlciBkb2VzIG5vdCBhbGxvdyBzdWNoIGFzc2lnbm1lbnRzIHRvIHRha2UgcGxhY2UuCisgICAjIFBsZWFzZSBub3RlIHRoYXQgdXNpbmcgUmF3Q29uZmlnUGFyc2VyJ3Mgc2V0IGZ1bmN0aW9ucywgeW91IGNhbiBhc3NpZ24KKyAgICMgbm9uLXN0cmluZyB2YWx1ZXMgdG8ga2V5cyBpbnRlcm5hbGx5LCBidXQgd2lsbCByZWNlaXZlIGFuIGVycm9yIHdoZW4KKyAgICMgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBhIGZpbGUgb3Igd2hlbiB5b3UgZ2V0IGl0IGluIG5vbi1yYXcgbW9kZS4gU2V0dGluZworICAgIyB2YWx1ZXMgdXNpbmcgdGhlIG1hcHBpbmcgcHJvdG9jb2wgb3IgQ29uZmlnUGFyc2VyJ3Mgc2V0KCkgZG9lcyBub3QgYWxsb3cKKyAgICMgc3VjaCBhc3NpZ25tZW50cyB0byB0YWtlIHBsYWNlLgogICAgY29uZmlnLmFkZF9zZWN0aW9uKCdTZWN0aW9uMScpCiAgICBjb25maWcuc2V0KCdTZWN0aW9uMScsICdpbnQnLCAnMTUnKQogICAgY29uZmlnLnNldCgnU2VjdGlvbjEnLCAnYm9vbCcsICd0cnVlJykKQEAgLTQzNSwzMCArNzk5LDQ2IEBACiAgICBpZiBjb25maWcuZ2V0Ym9vbGVhbignU2VjdGlvbjEnLCAnYm9vbCcpOgogICAgICAgIHByaW50KGNvbmZpZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycpKQogCi1UbyBnZXQgaW50ZXJwb2xhdGlvbiwgeW91IHdpbGwgbmVlZCB0byB1c2UgYSA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgb3IKLTpjbGFzczpgU2FmZUNvbmZpZ1BhcnNlcmA6OgorVG8gZ2V0IGludGVycG9sYXRpb24sIHVzZSA6Y2xhc3M6YENvbmZpZ1BhcnNlcmA6OgogCiAgICBpbXBvcnQgY29uZmlncGFyc2VyCiAKLSAgIGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQotICAgY29uZmlnLnJlYWQoJ2V4YW1wbGUuY2ZnJykKKyAgIGNmZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgY2ZnLnJlYWQoJ2V4YW1wbGUuY2ZnJykKIAotICAgIyBTZXQgdGhlIHRoaXJkLCBvcHRpb25hbCBhcmd1bWVudCBvZiBnZXQgdG8gMSBpZiB5b3Ugd2lzaCB0byB1c2UgcmF3IG1vZGUuCi0gICBwcmludChjb25maWcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCAwKSkgIyAtPiAiUHl0aG9uIGlzIGZ1biEiCi0gICBwcmludChjb25maWcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCAxKSkgIyAtPiAiJShiYXIpcyBpcyAlKGJheilzISIKKyAgICMgU2V0IHRoZSBvcHRpb25hbCBgcmF3YCBhcmd1bWVudCBvZiBnZXQoKSB0byBUcnVlIGlmIHlvdSB3aXNoIHRvIGRpc2FibGUKKyAgICMgaW50ZXJwb2xhdGlvbiBpbiBhIHNpbmdsZSBnZXQgb3BlcmF0aW9uLgorICAgcHJpbnQoY2ZnLmdldCgnU2VjdGlvbjEnLCAnZm9vJywgcmF3PUZhbHNlKSkgIyAtPiAiUHl0aG9uIGlzIGZ1biEiCisgICBwcmludChjZmcuZ2V0KCdTZWN0aW9uMScsICdmb28nLCByYXc9VHJ1ZSkpICAjIC0+ICIlKGJhcilzIGlzICUoYmF6KXMhIgogCi0gICAjIFRoZSBvcHRpb25hbCBmb3VydGggYXJndW1lbnQgaXMgYSBkaWN0IHdpdGggbWVtYmVycyB0aGF0IHdpbGwgdGFrZQorICAgIyBUaGUgb3B0aW9uYWwgYHZhcnNgIGFyZ3VtZW50IGlzIGEgZGljdCB3aXRoIG1lbWJlcnMgdGhhdCB3aWxsIHRha2UKICAgICMgcHJlY2VkZW5jZSBpbiBpbnRlcnBvbGF0aW9uLgotICAgcHJpbnQoY29uZmlnLmdldCgnU2VjdGlvbjEnLCAnZm9vJywgMCwgeydiYXInOiAnRG9jdW1lbnRhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jheic6ICdldmlsJ30pKQorICAgcHJpbnQoY2ZnLmdldCgnU2VjdGlvbjEnLCAnZm9vJywgdmFycz17J2Jhcic6ICdEb2N1bWVudGF0aW9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYXonOiAnZXZpbCd9KSkKIAotRGVmYXVsdHMgYXJlIGF2YWlsYWJsZSBpbiBhbGwgdGhyZWUgdHlwZXMgb2YgQ29uZmlnUGFyc2Vycy4gVGhleSBhcmUgdXNlZCBpbgorICAgIyBUaGUgb3B0aW9uYWwgYGZhbGxiYWNrYCBhcmd1bWVudCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgZmFsbGJhY2sgdmFsdWUKKyAgIHByaW50KGNmZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycpKQorICAgICAgICAgIyAtPiAiUHl0aG9uIGlzIGZ1biEiCisKKyAgIHByaW50KGNmZy5nZXQoJ1NlY3Rpb24xJywgJ2ZvbycsIGZhbGxiYWNrPSdNb250eSBpcyBub3QuJykpCisgICAgICAgICAjIC0+ICJQeXRob24gaXMgZnVuISIKKworICAgcHJpbnQoY2ZnLmdldCgnU2VjdGlvbjEnLCAnbW9uc3RlcicsIGZhbGxiYWNrPSdObyBzdWNoIHRoaW5ncyBhcyBtb25zdGVycy4nKSkKKyAgICAgICAgICMgLT4gIk5vIHN1Y2ggdGhpbmdzIGFzIG1vbnN0ZXJzLiIKKworICAgIyBBIGJhcmUgcHJpbnQoY2ZnLmdldCgnU2VjdGlvbjEnLCAnbW9uc3RlcicpKSB3b3VsZCByYWlzZSBOb09wdGlvbkVycm9yCisgICAjIGJ1dCB3ZSBjYW4gYWxzbyB1c2U6CisKKyAgIHByaW50KGNmZy5nZXQoJ1NlY3Rpb24xJywgJ21vbnN0ZXInLCBmYWxsYmFjaz1Ob25lKSkKKyAgICAgICAgICMgLT4gTm9uZQorCitEZWZhdWx0IHZhbHVlcyBhcmUgYXZhaWxhYmxlIGluIGJvdGggdHlwZXMgb2YgQ29uZmlnUGFyc2Vycy4gIFRoZXkgYXJlIHVzZWQgaW4KIGludGVycG9sYXRpb24gaWYgYW4gb3B0aW9uIHVzZWQgaXMgbm90IGRlZmluZWQgZWxzZXdoZXJlLiA6OgogCiAgICBpbXBvcnQgY29uZmlncGFyc2VyCiAKICAgICMgTmV3IGluc3RhbmNlIHdpdGggJ2JhcicgYW5kICdiYXonIGRlZmF1bHRpbmcgdG8gJ0xpZmUnIGFuZCAnaGFyZCcgZWFjaAotICAgY29uZmlnID0gY29uZmlncGFyc2VyLlNhZmVDb25maWdQYXJzZXIoeydiYXInOiAnTGlmZScsICdiYXonOiAnaGFyZCd9KQorICAgY29uZmlnID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcih7J2Jhcic6ICdMaWZlJywgJ2Jheic6ICdoYXJkJ30pCiAgICBjb25maWcucmVhZCgnZXhhbXBsZS5jZmcnKQogCiAgICBwcmludChjb25maWcuZ2V0KCdTZWN0aW9uMScsICdmb28nKSkgIyAtPiAiUHl0aG9uIGlzIGZ1biEiCkBAIC00NjYsMTQgKzg0Niw0MjUgQEAKICAgIGNvbmZpZy5yZW1vdmVfb3B0aW9uKCdTZWN0aW9uMScsICdiYXonKQogICAgcHJpbnQoY29uZmlnLmdldCgnU2VjdGlvbjEnLCAnZm9vJykpICMgLT4gIkxpZmUgaXMgaGFyZCEiCiAKLVRoZSBmdW5jdGlvbiBgYG9wdF9tb3ZlYGAgYmVsb3cgY2FuIGJlIHVzZWQgdG8gbW92ZSBvcHRpb25zIGJldHdlZW4gc2VjdGlvbnM6OgogCi0gICBkZWYgb3B0X21vdmUoY29uZmlnLCBzZWN0aW9uMSwgc2VjdGlvbjIsIG9wdGlvbik6Ci0gICAgICAgdHJ5OgotICAgICAgICAgICBjb25maWcuc2V0KHNlY3Rpb24yLCBvcHRpb24sIGNvbmZpZy5nZXQoc2VjdGlvbjEsIG9wdGlvbiwgMSkpCi0gICAgICAgZXhjZXB0IGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcjoKLSAgICAgICAgICAgIyBDcmVhdGUgbm9uLWV4aXN0ZW50IHNlY3Rpb24KLSAgICAgICAgICAgY29uZmlnLmFkZF9zZWN0aW9uKHNlY3Rpb24yKQotICAgICAgICAgICBvcHRfbW92ZShjb25maWcsIHNlY3Rpb24xLCBzZWN0aW9uMiwgb3B0aW9uKQotICAgICAgIGVsc2U6Ci0gICAgICAgICAgIGNvbmZpZy5yZW1vdmVfb3B0aW9uKHNlY3Rpb24xLCBvcHRpb24pCisuLiBfY29uZmlncGFyc2VyLW9iamVjdHM6CisKK0NvbmZpZ1BhcnNlciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IENvbmZpZ1BhcnNlcihkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QsIGFsbG93X25vX3ZhbHVlPUZhbHNlLCBkZWxpbWl0ZXJzPSgnPScsICc6JyksIGNvbW1lbnRfcHJlZml4ZXM9KCcjJywgJzsnKSwgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXM9Tm9uZSwgc3RyaWN0PVRydWUsIGVtcHR5X2xpbmVzX2luX3ZhbHVlcz1UcnVlLCBkZWZhdWx0X3NlY3Rpb249Y29uZmlncGFyc2VyLkRFRkFVTFRTRUNULCBpbnRlcnBvbGF0aW9uPUJhc2ljSW50ZXJwb2xhdGlvbigpKQorCisgICBUaGUgbWFpbiBjb25maWd1cmF0aW9uIHBhcnNlci4gIFdoZW4gKmRlZmF1bHRzKiBpcyBnaXZlbiwgaXQgaXMgaW5pdGlhbGl6ZWQKKyAgIGludG8gdGhlIGRpY3Rpb25hcnkgb2YgaW50cmluc2ljIGRlZmF1bHRzLiAgV2hlbiAqZGljdF90eXBlKiBpcyBnaXZlbiwgaXQKKyAgIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGRpY3Rpb25hcnkgb2JqZWN0cyBmb3IgdGhlIGxpc3Qgb2Ygc2VjdGlvbnMsIGZvcgorICAgdGhlIG9wdGlvbnMgd2l0aGluIGEgc2VjdGlvbiwgYW5kIGZvciB0aGUgZGVmYXVsdCB2YWx1ZXMuCisKKyAgIFdoZW4gKmRlbGltaXRlcnMqIGlzIGdpdmVuLCBpdCBpcyB1c2VkIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncyB0aGF0CisgICBkaXZpZGUga2V5cyBmcm9tIHZhbHVlcy4gIFdoZW4gKmNvbW1lbnRfcHJlZml4ZXMqIGlzIGdpdmVuLCBpdCB3aWxsIGJlIHVzZWQKKyAgIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncyB0aGF0IHByZWZpeCBjb21tZW50cyBpbiBvdGhlcndpc2UgZW1wdHkgbGluZXMuCisgICBDb21tZW50cyBjYW4gYmUgaW5kZW50ZWQuIFdoZW4gKmlubGluZV9jb21tZW50X3ByZWZpeGVzKiBpcyBnaXZlbiwgaXQgd2lsbCBiZQorICAgdXNlZCBhcyB0aGUgc2V0IG9mIHN1YnN0cmluZ3MgdGhhdCBwcmVmaXggY29tbWVudHMgaW4gbm9uLWVtcHR5IGxpbmVzLgorCisgICBsaW5lIGFuZCBpbmxpbmUgY29tbWVudHMuICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBkZWZhdWx0IHZhbHVlIGZvcgorICAgKmNvbW1lbnRfcHJlZml4ZXMqIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGluZGljYXRlcyB0aGF0IGBgO2BgIGFuZCBgYCNgYCBjYW4KKyAgIHN0YXJ0IHdob2xlIGxpbmUgY29tbWVudHMgd2hpbGUgb25seSBgYDtgYCBjYW4gc3RhcnQgaW5saW5lIGNvbW1lbnRzLgorCisgICBXaGVuICpzdHJpY3QqIGlzIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIgd29uJ3QgYWxsb3cgZm9yCisgICBhbnkgc2VjdGlvbiBvciBvcHRpb24gZHVwbGljYXRlcyB3aGlsZSByZWFkaW5nIGZyb20gYSBzaW5nbGUgc291cmNlIChmaWxlLAorICAgc3RyaW5nIG9yIGRpY3Rpb25hcnkpLCByYWlzaW5nIDpleGM6YER1cGxpY2F0ZVNlY3Rpb25FcnJvcmAgb3IKKyAgIDpleGM6YER1cGxpY2F0ZU9wdGlvbkVycm9yYC4gIFdoZW4gKmVtcHR5X2xpbmVzX2luX3ZhbHVlcyogaXMgYGBGYWxzZWBgCisgICAoZGVmYXVsdDogYGBUcnVlYGApLCBlYWNoIGVtcHR5IGxpbmUgbWFya3MgdGhlIGVuZCBvZiBhbiBvcHRpb24uICBPdGhlcndpc2UsCisgICBpbnRlcm5hbCBlbXB0eSBsaW5lcyBvZiBhIG11bHRpbGluZSBvcHRpb24gYXJlIGtlcHQgYXMgcGFydCBvZiB0aGUgdmFsdWUuCisgICBXaGVuICphbGxvd19ub192YWx1ZSogaXMgYGBUcnVlYGAgKGRlZmF1bHQ6IGBgRmFsc2VgYCksIG9wdGlvbnMgd2l0aG91dAorICAgdmFsdWVzIGFyZSBhY2NlcHRlZDsgdGhlIHZhbHVlIGhlbGQgZm9yIHRoZXNlIGlzIGBgTm9uZWBgIGFuZCB0aGV5IGFyZQorICAgc2VyaWFsaXplZCB3aXRob3V0IHRoZSB0cmFpbGluZyBkZWxpbWl0ZXIuCisKKyAgIFdoZW4gKmRlZmF1bHRfc2VjdGlvbiogaXMgZ2l2ZW4sIGl0IHNwZWNpZmllcyB0aGUgbmFtZSBmb3IgdGhlIHNwZWNpYWwKKyAgIHNlY3Rpb24gaG9sZGluZyBkZWZhdWx0IHZhbHVlcyBmb3Igb3RoZXIgc2VjdGlvbnMgYW5kIGludGVycG9sYXRpb24gcHVycG9zZXMKKyAgIChub3JtYWxseSBuYW1lZCBgYCJERUZBVUxUImBgKS4gVGhpcyB2YWx1ZSBjYW4gYmUgcmV0cmlldmVkIGFuZCBjaGFuZ2VkIG9uCisgICBydW50aW1lIHVzaW5nIHRoZSBgYGRlZmF1bHRfc2VjdGlvbmBgIGluc3RhbmNlIGF0dHJpYnV0ZS4KKworICAgSW50ZXJwb2xhdGlvbiBiZWhhdmlvdXIgbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcHJvdmlkaW5nIGEgY3VzdG9tIGhhbmRsZXIKKyAgIHRocm91Z2ggdGhlICppbnRlcnBvbGF0aW9uKiBhcmd1bWVudC4gYGBOb25lYGAgY2FuIGJlIHVzZWQgdG8gdHVybiBvZmYKKyAgIGludGVycG9sYXRpb24gY29tcGxldGVseSwgYGBFeHRlbmRlZEludGVycG9sYXRpb24oKWBgIHByb3ZpZGVzIGEgbW9yZQorICAgYWR2YW5jZWQgdmFyaWFudCBpbnNwaXJlZCBieSBgYHpjLmJ1aWxkb3V0YGAuIE1vcmUgb24gdGhlIHN1YmplY3QgaW4gdGhlCisgICBgZGVkaWNhdGVkIGRvY3VtZW50YXRpb24gc2VjdGlvbiA8I2ludGVycG9sYXRpb24tb2YtdmFsdWVzPmBfLgorCisgICBBbGwgb3B0aW9uIG5hbWVzIHVzZWQgaW4gaW50ZXJwb2xhdGlvbiB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoIHRoZQorICAgOm1ldGg6YG9wdGlvbnhmb3JtYCBtZXRob2QganVzdCBsaWtlIGFueSBvdGhlciBvcHRpb24gbmFtZSByZWZlcmVuY2UuICBGb3IKKyAgIGV4YW1wbGUsIHVzaW5nIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBvcHRpb254Zm9ybWAgKHdoaWNoCisgICBjb252ZXJ0cyBvcHRpb24gbmFtZXMgdG8gbG93ZXIgY2FzZSksIHRoZSB2YWx1ZXMgYGBmb28gJShiYXIpc2BgIGFuZCBgYGZvbworICAgJShCQVIpc2BgIGFyZSBlcXVpdmFsZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQorICAgICAgVGhlIGRlZmF1bHQgKmRpY3RfdHlwZSogaXMgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAqYWxsb3dfbm9fdmFsdWUqLCAqZGVsaW1pdGVycyosICpjb21tZW50X3ByZWZpeGVzKiwgKnN0cmljdCosCisgICAgICAqZW1wdHlfbGluZXNfaW5fdmFsdWVzKiwgKmRlZmF1bHRfc2VjdGlvbiogYW5kICppbnRlcnBvbGF0aW9uKiB3ZXJlCisgICAgICBhZGRlZC4KKworCisgICAuLiBtZXRob2Q6OiBkZWZhdWx0cygpCisKKyAgICAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgaW5zdGFuY2Utd2lkZSBkZWZhdWx0cy4KKworCisgICAuLiBtZXRob2Q6OiBzZWN0aW9ucygpCisKKyAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHNlY3Rpb25zIGF2YWlsYWJsZTsgdGhlICpkZWZhdWx0IHNlY3Rpb24qIGlzIG5vdAorICAgICAgaW5jbHVkZWQgaW4gdGhlIGxpc3QuCisKKworICAgLi4gbWV0aG9kOjogYWRkX3NlY3Rpb24oc2VjdGlvbikKKworICAgICAgQWRkIGEgc2VjdGlvbiBuYW1lZCAqc2VjdGlvbiogdG8gdGhlIGluc3RhbmNlLiAgSWYgYSBzZWN0aW9uIGJ5IHRoZSBnaXZlbgorICAgICAgbmFtZSBhbHJlYWR5IGV4aXN0cywgOmV4YzpgRHVwbGljYXRlU2VjdGlvbkVycm9yYCBpcyByYWlzZWQuICBJZiB0aGUKKyAgICAgICpkZWZhdWx0IHNlY3Rpb24qIG5hbWUgaXMgcGFzc2VkLCA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuICBUaGUgbmFtZQorICAgICAgb2YgdGhlIHNlY3Rpb24gbXVzdCBiZSBhIHN0cmluZzsgaWYgbm90LCA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICAgIE5vbi1zdHJpbmcgc2VjdGlvbiBuYW1lcyByYWlzZSA6ZXhjOmBUeXBlRXJyb3JgLgorCisKKyAgIC4uIG1ldGhvZDo6IGhhc19zZWN0aW9uKHNlY3Rpb24pCisKKyAgICAgIEluZGljYXRlcyB3aGV0aGVyIHRoZSBuYW1lZCAqc2VjdGlvbiogaXMgcHJlc2VudCBpbiB0aGUgY29uZmlndXJhdGlvbi4KKyAgICAgIFRoZSAqZGVmYXVsdCBzZWN0aW9uKiBpcyBub3QgYWNrbm93bGVkZ2VkLgorCisKKyAgIC4uIG1ldGhvZDo6IG9wdGlvbnMoc2VjdGlvbikKKworICAgICAgUmV0dXJuIGEgbGlzdCBvZiBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKi4KKworCisgICAuLiBtZXRob2Q6OiBoYXNfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbikKKworICAgICAgSWYgdGhlIGdpdmVuICpzZWN0aW9uKiBleGlzdHMsIGFuZCBjb250YWlucyB0aGUgZ2l2ZW4gKm9wdGlvbiosIHJldHVybgorICAgICAgOmNvbnN0OmBUcnVlYDsgb3RoZXJ3aXNlIHJldHVybiA6Y29uc3Q6YEZhbHNlYC4gSWYgdGhlIHNwZWNpZmllZAorICAgICAgKnNlY3Rpb24qIGlzIDpjb25zdDpgTm9uZWAgb3IgYW4gZW1wdHkgc3RyaW5nLCBERUZBVUxUIGlzIGFzc3VtZWQuCisKKworICAgLi4gbWV0aG9kOjogcmVhZChmaWxlbmFtZXMsIGVuY29kaW5nPU5vbmUpCisKKyAgICAgIEF0dGVtcHQgdG8gcmVhZCBhbmQgcGFyc2UgYSBsaXN0IG9mIGZpbGVuYW1lcywgcmV0dXJuaW5nIGEgbGlzdCBvZgorICAgICAgZmlsZW5hbWVzIHdoaWNoIHdlcmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4gIElmICpmaWxlbmFtZXMqIGlzIGEgc3RyaW5nLCBpdAorICAgICAgaXMgdHJlYXRlZCBhcyBhIHNpbmdsZSBmaWxlbmFtZS4gIElmIGEgZmlsZSBuYW1lZCBpbiAqZmlsZW5hbWVzKiBjYW5ub3QKKyAgICAgIGJlIG9wZW5lZCwgdGhhdCBmaWxlIHdpbGwgYmUgaWdub3JlZC4gIFRoaXMgaXMgZGVzaWduZWQgc28gdGhhdCB5b3UgY2FuCisgICAgICBzcGVjaWZ5IGEgbGlzdCBvZiBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBmaWxlIGxvY2F0aW9ucyAoZm9yIGV4YW1wbGUsCisgICAgICB0aGUgY3VycmVudCBkaXJlY3RvcnksIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIGFuZCBzb21lIHN5c3RlbS13aWRlCisgICAgICBkaXJlY3RvcnkpLCBhbmQgYWxsIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gdGhlIGxpc3Qgd2lsbCBiZQorICAgICAgcmVhZC4gIElmIG5vbmUgb2YgdGhlIG5hbWVkIGZpbGVzIGV4aXN0LCB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgCisgICAgICBpbnN0YW5jZSB3aWxsIGNvbnRhaW4gYW4gZW1wdHkgZGF0YXNldC4gIEFuIGFwcGxpY2F0aW9uIHdoaWNoIHJlcXVpcmVzCisgICAgICBpbml0aWFsIHZhbHVlcyB0byBiZSBsb2FkZWQgZnJvbSBhIGZpbGUgc2hvdWxkIGxvYWQgdGhlIHJlcXVpcmVkIGZpbGUgb3IKKyAgICAgIGZpbGVzIHVzaW5nIDptZXRoOmByZWFkX2ZpbGVgIGJlZm9yZSBjYWxsaW5nIDptZXRoOmByZWFkYCBmb3IgYW55CisgICAgICBvcHRpb25hbCBmaWxlczo6CisKKyAgICAgICAgIGltcG9ydCBjb25maWdwYXJzZXIsIG9zCisKKyAgICAgICAgIGNvbmZpZyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICAgY29uZmlnLnJlYWRfZmlsZShvcGVuKCdkZWZhdWx0cy5jZmcnKSkKKyAgICAgICAgIGNvbmZpZy5yZWFkKFsnc2l0ZS5jZmcnLCBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vLm15YXBwLmNmZycpXSwKKyAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdjcDEyNTAnKQorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgICAgIFRoZSAqZW5jb2RpbmcqIHBhcmFtZXRlci4gIFByZXZpb3VzbHksIGFsbCBmaWxlcyB3ZXJlIHJlYWQgdXNpbmcgdGhlCisgICAgICAgICBkZWZhdWx0IGVuY29kaW5nIGZvciA6ZnVuYzpgb3BlbmAuCisKKworICAgLi4gbWV0aG9kOjogcmVhZF9maWxlKGYsIHNvdXJjZT1Ob25lKQorCisgICAgICBSZWFkIGFuZCBwYXJzZSBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSAqZiogd2hpY2ggbXVzdCBiZSBhbiBpdGVyYWJsZQorICAgICAgeWllbGRpbmcgVW5pY29kZSBzdHJpbmdzIChmb3IgZXhhbXBsZSBmaWxlcyBvcGVuZWQgaW4gdGV4dCBtb2RlKS4KKworICAgICAgT3B0aW9uYWwgYXJndW1lbnQgKnNvdXJjZSogc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGJlaW5nIHJlYWQuICBJZgorICAgICAgbm90IGdpdmVuIGFuZCAqZiogaGFzIGEgOmF0dHI6YG5hbWVgIGF0dHJpYnV0ZSwgdGhhdCBpcyB1c2VkIGZvcgorICAgICAgKnNvdXJjZSo7IHRoZSBkZWZhdWx0IGlzIGBgJzw/Pz8+J2BgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgICAgIFJlcGxhY2VzIDptZXRoOmByZWFkZnBgLgorCisgICAuLiBtZXRob2Q6OiByZWFkX3N0cmluZyhzdHJpbmcsIHNvdXJjZT0nPHN0cmluZz4nKQorCisgICAgICBQYXJzZSBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBhIHN0cmluZy4KKworICAgICAgT3B0aW9uYWwgYXJndW1lbnQgKnNvdXJjZSogc3BlY2lmaWVzIGEgY29udGV4dC1zcGVjaWZpYyBuYW1lIG9mIHRoZQorICAgICAgc3RyaW5nIHBhc3NlZC4gIElmIG5vdCBnaXZlbiwgYGAnPHN0cmluZz4nYGAgaXMgdXNlZC4gIFRoaXMgc2hvdWxkCisgICAgICBjb21tb25seSBiZSBhIGZpbGVzeXN0ZW0gcGF0aCBvciBhIFVSTC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworICAgLi4gbWV0aG9kOjogcmVhZF9kaWN0KGRpY3Rpb25hcnksIHNvdXJjZT0nPGRpY3Q+JykKKworICAgICAgTG9hZCBjb25maWd1cmF0aW9uIGZyb20gYW55IG9iamVjdCB0aGF0IHByb3ZpZGVzIGEgZGljdC1saWtlIGBgaXRlbXMoKWBgCisgICAgICBtZXRob2QuICBLZXlzIGFyZSBzZWN0aW9uIG5hbWVzLCB2YWx1ZXMgYXJlIGRpY3Rpb25hcmllcyB3aXRoIGtleXMgYW5kCisgICAgICB2YWx1ZXMgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgc2VjdGlvbi4gIElmIHRoZSB1c2VkIGRpY3Rpb25hcnkKKyAgICAgIHR5cGUgcHJlc2VydmVzIG9yZGVyLCBzZWN0aW9ucyBhbmQgdGhlaXIga2V5cyB3aWxsIGJlIGFkZGVkIGluIG9yZGVyLgorICAgICAgVmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBzdHJpbmdzLgorCisgICAgICBPcHRpb25hbCBhcmd1bWVudCAqc291cmNlKiBzcGVjaWZpZXMgYSBjb250ZXh0LXNwZWNpZmljIG5hbWUgb2YgdGhlCisgICAgICBkaWN0aW9uYXJ5IHBhc3NlZC4gIElmIG5vdCBnaXZlbiwgYGA8ZGljdD5gYCBpcyB1c2VkLgorCisgICAgICBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBjb3B5IHN0YXRlIGJldHdlZW4gcGFyc2Vycy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworICAgLi4gbWV0aG9kOjogZ2V0KHNlY3Rpb24sIG9wdGlvbiwgcmF3PUZhbHNlLCBbdmFycywgZmFsbGJhY2tdKQorCisgICAgICBHZXQgYW4gKm9wdGlvbiogdmFsdWUgZm9yIHRoZSBuYW1lZCAqc2VjdGlvbiouICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0CisgICAgICBtdXN0IGJlIGEgZGljdGlvbmFyeS4gIFRoZSAqb3B0aW9uKiBpcyBsb29rZWQgdXAgaW4gKnZhcnMqIChpZiBwcm92aWRlZCksCisgICAgICAqc2VjdGlvbiosIGFuZCBpbiAqREVGQVVMVFNFQ1QqIGluIHRoYXQgb3JkZXIuICBJZiB0aGUga2V5IGlzIG5vdCBmb3VuZAorICAgICAgYW5kICpmYWxsYmFjayogaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgYXMgYSBmYWxsYmFjayB2YWx1ZS4gIGBgTm9uZWBgIGNhbgorICAgICAgYmUgcHJvdmlkZWQgYXMgYSAqZmFsbGJhY2sqIHZhbHVlLgorCisgICAgICBBbGwgdGhlIGBgJyUnYGAgaW50ZXJwb2xhdGlvbnMgYXJlIGV4cGFuZGVkIGluIHRoZSByZXR1cm4gdmFsdWVzLCB1bmxlc3MKKyAgICAgIHRoZSAqcmF3KiBhcmd1bWVudCBpcyB0cnVlLiAgVmFsdWVzIGZvciBpbnRlcnBvbGF0aW9uIGtleXMgYXJlIGxvb2tlZCB1cAorICAgICAgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvcHRpb24uCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAgICBBcmd1bWVudHMgKnJhdyosICp2YXJzKiBhbmQgKmZhbGxiYWNrKiBhcmUga2V5d29yZCBvbmx5IHRvIHByb3RlY3QKKyAgICAgICAgIHVzZXJzIGZyb20gdHJ5aW5nIHRvIHVzZSB0aGUgdGhpcmQgYXJndW1lbnQgYXMgdGhlICpmYWxsYmFjayogZmFsbGJhY2sKKyAgICAgICAgIChlc3BlY2lhbGx5IHdoZW4gdXNpbmcgdGhlIG1hcHBpbmcgcHJvdG9jb2wpLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldGludChzZWN0aW9uLCBvcHRpb24sIHJhdz1GYWxzZSwgW3ZhcnMsIGZhbGxiYWNrXSkKKworICAgICAgQSBjb252ZW5pZW5jZSBtZXRob2Qgd2hpY2ggY29lcmNlcyB0aGUgKm9wdGlvbiogaW4gdGhlIHNwZWNpZmllZCAqc2VjdGlvbioKKyAgICAgIHRvIGFuIGludGVnZXIuICBTZWUgOm1ldGg6YGdldGAgZm9yIGV4cGxhbmF0aW9uIG9mICpyYXcqLCAqdmFycyogYW5kCisgICAgICAqZmFsbGJhY2sqLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldGZsb2F0KHNlY3Rpb24sIG9wdGlvbiwgcmF3PUZhbHNlLCBbdmFycywgZmFsbGJhY2tdKQorCisgICAgICBBIGNvbnZlbmllbmNlIG1ldGhvZCB3aGljaCBjb2VyY2VzIHRoZSAqb3B0aW9uKiBpbiB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKgorICAgICAgdG8gYSBmbG9hdGluZyBwb2ludCBudW1iZXIuICBTZWUgOm1ldGg6YGdldGAgZm9yIGV4cGxhbmF0aW9uIG9mICpyYXcqLAorICAgICAgKnZhcnMqIGFuZCAqZmFsbGJhY2sqLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldGJvb2xlYW4oc2VjdGlvbiwgb3B0aW9uLCByYXc9RmFsc2UsIFt2YXJzLCBmYWxsYmFja10pCisKKyAgICAgIEEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNvZXJjZXMgdGhlICpvcHRpb24qIGluIHRoZSBzcGVjaWZpZWQgKnNlY3Rpb24qCisgICAgICB0byBhIEJvb2xlYW4gdmFsdWUuICBOb3RlIHRoYXQgdGhlIGFjY2VwdGVkIHZhbHVlcyBmb3IgdGhlIG9wdGlvbiBhcmUKKyAgICAgIGBgJzEnYGAsIGBgJ3llcydgYCwgYGAndHJ1ZSdgYCwgYW5kIGBgJ29uJ2BgLCB3aGljaCBjYXVzZSB0aGlzIG1ldGhvZCB0bworICAgICAgcmV0dXJuIGBgVHJ1ZWBgLCBhbmQgYGAnMCdgYCwgYGAnbm8nYGAsIGBgJ2ZhbHNlJ2BgLCBhbmQgYGAnb2ZmJ2BgLCB3aGljaAorICAgICAgY2F1c2UgaXQgdG8gcmV0dXJuIGBgRmFsc2VgYC4gIFRoZXNlIHN0cmluZyB2YWx1ZXMgYXJlIGNoZWNrZWQgaW4gYQorICAgICAgY2FzZS1pbnNlbnNpdGl2ZSBtYW5uZXIuICBBbnkgb3RoZXIgdmFsdWUgd2lsbCBjYXVzZSBpdCB0byByYWlzZQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAuICBTZWUgOm1ldGg6YGdldGAgZm9yIGV4cGxhbmF0aW9uIG9mICpyYXcqLCAqdmFycyogYW5kCisgICAgICAqZmFsbGJhY2sqLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZW1zKFtzZWN0aW9uXSwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpCisKKyAgICAgIFdoZW4gKnNlY3Rpb24qIGlzIG5vdCBnaXZlbiwgcmV0dXJuIGEgbGlzdCBvZiAqc2VjdGlvbl9uYW1lKiwKKyAgICAgICpzZWN0aW9uX3Byb3h5KiBwYWlycywgaW5jbHVkaW5nIERFRkFVTFRTRUNULgorCisgICAgICBPdGhlcndpc2UsIHJldHVybiBhIGxpc3Qgb2YgKm5hbWUqLCAqdmFsdWUqIHBhaXJzIGZvciB0aGUgb3B0aW9ucyBpbiB0aGUKKyAgICAgIGdpdmVuICpzZWN0aW9uKi4gIE9wdGlvbmFsIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHRoZQorICAgICAgOm1ldGg6YGdldGAgbWV0aG9kLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQorCisgICAgICBJZiB0aGUgZ2l2ZW4gc2VjdGlvbiBleGlzdHMsIHNldCB0aGUgZ2l2ZW4gb3B0aW9uIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWU7CisgICAgICBvdGhlcndpc2UgcmFpc2UgOmV4YzpgTm9TZWN0aW9uRXJyb3JgLiAgKm9wdGlvbiogYW5kICp2YWx1ZSogbXVzdCBiZQorICAgICAgc3RyaW5nczsgaWYgbm90LCA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KKworCisgICAuLiBtZXRob2Q6OiB3cml0ZShmaWxlb2JqZWN0LCBzcGFjZV9hcm91bmRfZGVsaW1pdGVycz1UcnVlKQorCisgICAgICBXcml0ZSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHRvIHRoZSBzcGVjaWZpZWQgOnRlcm06YGZpbGUKKyAgICAgIG9iamVjdGAsIHdoaWNoIG11c3QgYmUgb3BlbmVkIGluIHRleHQgbW9kZSAoYWNjZXB0aW5nIHN0cmluZ3MpLiAgVGhpcworICAgICAgcmVwcmVzZW50YXRpb24gY2FuIGJlIHBhcnNlZCBieSBhIGZ1dHVyZSA6bWV0aDpgcmVhZGAgY2FsbC4gIElmCisgICAgICAqc3BhY2VfYXJvdW5kX2RlbGltaXRlcnMqIGlzIHRydWUsIGRlbGltaXRlcnMgYmV0d2VlbgorICAgICAga2V5cyBhbmQgdmFsdWVzIGFyZSBzdXJyb3VuZGVkIGJ5IHNwYWNlcy4KKworCisgICAuLiBtZXRob2Q6OiByZW1vdmVfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbikKKworICAgICAgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgKm9wdGlvbiogZnJvbSB0aGUgc3BlY2lmaWVkICpzZWN0aW9uKi4gIElmIHRoZQorICAgICAgc2VjdGlvbiBkb2VzIG5vdCBleGlzdCwgcmFpc2UgOmV4YzpgTm9TZWN0aW9uRXJyb3JgLiAgSWYgdGhlIG9wdGlvbgorICAgICAgZXhpc3RlZCB0byBiZSByZW1vdmVkLCByZXR1cm4gOmNvbnN0OmBUcnVlYDsgb3RoZXJ3aXNlIHJldHVybgorICAgICAgOmNvbnN0OmBGYWxzZWAuCisKKworICAgLi4gbWV0aG9kOjogcmVtb3ZlX3NlY3Rpb24oc2VjdGlvbikKKworICAgICAgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgKnNlY3Rpb24qIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uICBJZiB0aGUgc2VjdGlvbiBpbgorICAgICAgZmFjdCBleGlzdGVkLCByZXR1cm4gYGBUcnVlYGAuICBPdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4KKworCisgICAuLiBtZXRob2Q6OiBvcHRpb254Zm9ybShvcHRpb24pCisKKyAgICAgIFRyYW5zZm9ybXMgdGhlIG9wdGlvbiBuYW1lICpvcHRpb24qIGFzIGZvdW5kIGluIGFuIGlucHV0IGZpbGUgb3IgYXMgcGFzc2VkCisgICAgICBpbiBieSBjbGllbnQgY29kZSB0byB0aGUgZm9ybSB0aGF0IHNob3VsZCBiZSB1c2VkIGluIHRoZSBpbnRlcm5hbAorICAgICAgc3RydWN0dXJlcy4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgYSBsb3dlci1jYXNlIHZlcnNpb24gb2YKKyAgICAgICpvcHRpb24qOyBzdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG9yIGNsaWVudCBjb2RlIGNhbiBzZXQgYW4gYXR0cmlidXRlCisgICAgICBvZiB0aGlzIG5hbWUgb24gaW5zdGFuY2VzIHRvIGFmZmVjdCB0aGlzIGJlaGF2aW9yLgorCisgICAgICBZb3UgZG9uJ3QgbmVlZCB0byBzdWJjbGFzcyB0aGUgcGFyc2VyIHRvIHVzZSB0aGlzIG1ldGhvZCwgeW91IGNhbiBhbHNvCisgICAgICBzZXQgaXQgb24gYW4gaW5zdGFuY2UsIHRvIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHN0cmluZyBhcmd1bWVudCBhbmQKKyAgICAgIHJldHVybnMgYSBzdHJpbmcuICBTZXR0aW5nIGl0IHRvIGBgc3RyYGAsIGZvciBleGFtcGxlLCB3b3VsZCBtYWtlIG9wdGlvbgorICAgICAgbmFtZXMgY2FzZSBzZW5zaXRpdmU6OgorCisgICAgICAgICBjZmdwYXJzZXIgPSBDb25maWdQYXJzZXIoKQorICAgICAgICAgY2ZncGFyc2VyLm9wdGlvbnhmb3JtID0gc3RyCisKKyAgICAgIE5vdGUgdGhhdCB3aGVuIHJlYWRpbmcgY29uZmlndXJhdGlvbiBmaWxlcywgd2hpdGVzcGFjZSBhcm91bmQgdGhlIG9wdGlvbgorICAgICAgbmFtZXMgaXMgc3RyaXBwZWQgYmVmb3JlIDptZXRoOmBvcHRpb254Zm9ybWAgaXMgY2FsbGVkLgorCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRmcChmcCwgZmlsZW5hbWU9Tm9uZSkKKworICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgICAgVXNlIDptZXRoOmByZWFkX2ZpbGVgIGluc3RlYWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAgICA6bWV0aDpgcmVhZGZwYCBub3cgaXRlcmF0ZXMgb24gKmYqIGluc3RlYWQgb2YgY2FsbGluZyBgYGYucmVhZGxpbmUoKWBgLgorCisgICAgICBGb3IgZXhpc3RpbmcgY29kZSBjYWxsaW5nIDptZXRoOmByZWFkZnBgIHdpdGggYXJndW1lbnRzIHdoaWNoIGRvbid0CisgICAgICBzdXBwb3J0IGl0ZXJhdGlvbiwgdGhlIGZvbGxvd2luZyBnZW5lcmF0b3IgbWF5IGJlIHVzZWQgYXMgYSB3cmFwcGVyCisgICAgICBhcm91bmQgdGhlIGZpbGUtbGlrZSBvYmplY3Q6OgorCisgICAgICAgICBkZWYgcmVhZGxpbmVfZ2VuZXJhdG9yKGYpOgorICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICB3aGlsZSBsaW5lOgorICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKKworICAgICAgSW5zdGVhZCBvZiBgYHBhcnNlci5yZWFkZnAoZilgYCB1c2UKKyAgICAgIGBgcGFyc2VyLnJlYWRfZmlsZShyZWFkbGluZV9nZW5lcmF0b3IoZikpYGAuCisKKworLi4gZGF0YTo6IE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRICisKKyAgIFRoZSBtYXhpbXVtIGRlcHRoIGZvciByZWN1cnNpdmUgaW50ZXJwb2xhdGlvbiBmb3IgOm1ldGg6YGdldGAgd2hlbiB0aGUgKnJhdyoKKyAgIHBhcmFtZXRlciBpcyBmYWxzZS4gIFRoaXMgaXMgcmVsZXZhbnQgb25seSB3aGVuIHRoZSBkZWZhdWx0ICppbnRlcnBvbGF0aW9uKgorICAgaXMgdXNlZC4KKworCisuLiBfcmF3Y29uZmlncGFyc2VyLW9iamVjdHM6CisKK1Jhd0NvbmZpZ1BhcnNlciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFJhd0NvbmZpZ1BhcnNlcihkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QsIGFsbG93X25vX3ZhbHVlPUZhbHNlLCBkZWxpbWl0ZXJzPSgnPScsICc6JyksIGNvbW1lbnRfcHJlZml4ZXM9KCcjJywgJzsnKSwgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXM9Tm9uZSwgc3RyaWN0PVRydWUsIGVtcHR5X2xpbmVzX2luX3ZhbHVlcz1UcnVlLCBkZWZhdWx0X3NlY3Rpb249Y29uZmlnYXBhcnNlci5ERUZBVUxUU0VDVCwgaW50ZXJwb2xhdGlvbj1Ob25lKQorCisgICBMZWdhY3kgdmFyaWFudCBvZiB0aGUgOmNsYXNzOmBDb25maWdQYXJzZXJgIHdpdGggaW50ZXJwb2xhdGlvbiBkaXNhYmxlZAorICAgYnkgZGVmYXVsdCBhbmQgdW5zYWZlIGBgYWRkX3NlY3Rpb25gYCBhbmQgYGBzZXRgYCBtZXRob2RzLgorCisgICAuLiBub3RlOjoKKyAgICAgIENvbnNpZGVyIHVzaW5nIDpjbGFzczpgQ29uZmlnUGFyc2VyYCBpbnN0ZWFkIHdoaWNoIGNoZWNrcyB0eXBlcyBvZgorICAgICAgdGhlIHZhbHVlcyB0byBiZSBzdG9yZWQgaW50ZXJuYWxseS4gSWYgeW91IGRvbid0IHdhbnQgaW50ZXJwb2xhdGlvbiwgeW91CisgICAgICBjYW4gdXNlIGBgQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSlgYC4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfc2VjdGlvbihzZWN0aW9uKQorCisgICAgICBBZGQgYSBzZWN0aW9uIG5hbWVkICpzZWN0aW9uKiB0byB0aGUgaW5zdGFuY2UuICBJZiBhIHNlY3Rpb24gYnkgdGhlIGdpdmVuCisgICAgICBuYW1lIGFscmVhZHkgZXhpc3RzLCA6ZXhjOmBEdXBsaWNhdGVTZWN0aW9uRXJyb3JgIGlzIHJhaXNlZC4gIElmIHRoZQorICAgICAgKmRlZmF1bHQgc2VjdGlvbiogbmFtZSBpcyBwYXNzZWQsIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVHlwZSBvZiAqc2VjdGlvbiogaXMgbm90IGNoZWNrZWQgd2hpY2ggbGV0cyB1c2VycyBjcmVhdGUgbm9uLXN0cmluZyBuYW1lZAorICAgICAgc2VjdGlvbnMuIFRoaXMgYmVoYXZpb3VyIGlzIHVuc3VwcG9ydGVkIGFuZCBtYXkgY2F1c2UgaW50ZXJuYWwgZXJyb3JzLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQorCisgICAgICBJZiB0aGUgZ2l2ZW4gc2VjdGlvbiBleGlzdHMsIHNldCB0aGUgZ2l2ZW4gb3B0aW9uIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWU7CisgICAgICBvdGhlcndpc2UgcmFpc2UgOmV4YzpgTm9TZWN0aW9uRXJyb3JgLiAgV2hpbGUgaXQgaXMgcG9zc2libGUgdG8gdXNlCisgICAgICA6Y2xhc3M6YFJhd0NvbmZpZ1BhcnNlcmAgKG9yIDpjbGFzczpgQ29uZmlnUGFyc2VyYCB3aXRoICpyYXcqIHBhcmFtZXRlcnMKKyAgICAgIHNldCB0byB0cnVlKSBmb3IgKmludGVybmFsKiBzdG9yYWdlIG9mIG5vbi1zdHJpbmcgdmFsdWVzLCBmdWxsCisgICAgICBmdW5jdGlvbmFsaXR5IChpbmNsdWRpbmcgaW50ZXJwb2xhdGlvbiBhbmQgb3V0cHV0IHRvIGZpbGVzKSBjYW4gb25seSBiZQorICAgICAgYWNoaWV2ZWQgdXNpbmcgc3RyaW5nIHZhbHVlcy4KKworICAgICAgVGhpcyBtZXRob2QgbGV0cyB1c2VycyBhc3NpZ24gbm9uLXN0cmluZyB2YWx1ZXMgdG8ga2V5cyBpbnRlcm5hbGx5LiAgVGhpcworICAgICAgYmVoYXZpb3VyIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycyB3aGVuIGF0dGVtcHRpbmcgdG8gd3JpdGUKKyAgICAgIHRvIGEgZmlsZSBvciBnZXQgaXQgaW4gbm9uLXJhdyBtb2RlLiAgKipVc2UgdGhlIG1hcHBpbmcgcHJvdG9jb2wgQVBJKioKKyAgICAgIHdoaWNoIGRvZXMgbm90IGFsbG93IHN1Y2ggYXNzaWdubWVudHMgdG8gdGFrZSBwbGFjZS4KKworCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKKy4uIGV4Y2VwdGlvbjo6IEVycm9yCisKKyAgIEJhc2UgY2xhc3MgZm9yIGFsbCBvdGhlciA6bW9kOmBjb25maWdwYXJzZXJgIGV4Y2VwdGlvbnMuCisKKworLi4gZXhjZXB0aW9uOjogTm9TZWN0aW9uRXJyb3IKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgc3BlY2lmaWVkIHNlY3Rpb24gaXMgbm90IGZvdW5kLgorCisKKy4uIGV4Y2VwdGlvbjo6IER1cGxpY2F0ZVNlY3Rpb25FcnJvcgorCisgICBFeGNlcHRpb24gcmFpc2VkIGlmIDptZXRoOmBhZGRfc2VjdGlvbmAgaXMgY2FsbGVkIHdpdGggdGhlIG5hbWUgb2YgYSBzZWN0aW9uCisgICB0aGF0IGlzIGFscmVhZHkgcHJlc2VudCBvciBpbiBzdHJpY3QgcGFyc2VycyB3aGVuIGEgc2VjdGlvbiBpZiBmb3VuZCBtb3JlCisgICB0aGFuIG9uY2UgaW4gYSBzaW5nbGUgaW5wdXQgZmlsZSwgc3RyaW5nIG9yIGRpY3Rpb25hcnkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgT3B0aW9uYWwgYGBzb3VyY2VgYCBhbmQgYGBsaW5lbm9gYCBhdHRyaWJ1dGVzIGFuZCBhcmd1bWVudHMgdG8KKyAgICAgIDptZXRoOmBfX2luaXRfX2Agd2VyZSBhZGRlZC4KKworCisuLiBleGNlcHRpb246OiBEdXBsaWNhdGVPcHRpb25FcnJvcgorCisgICBFeGNlcHRpb24gcmFpc2VkIGJ5IHN0cmljdCBwYXJzZXJzIGlmIGEgc2luZ2xlIG9wdGlvbiBhcHBlYXJzIHR3aWNlIGR1cmluZworICAgcmVhZGluZyBmcm9tIGEgc2luZ2xlIGZpbGUsIHN0cmluZyBvciBkaWN0aW9uYXJ5LiBUaGlzIGNhdGNoZXMgbWlzc3BlbGxpbmdzCisgICBhbmQgY2FzZSBzZW5zaXRpdml0eS1yZWxhdGVkIGVycm9ycywgZS5nLiBhIGRpY3Rpb25hcnkgbWF5IGhhdmUgdHdvIGtleXMKKyAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBjYXNlLWluc2Vuc2l0aXZlIGNvbmZpZ3VyYXRpb24ga2V5LgorCisKKy4uIGV4Y2VwdGlvbjo6IE5vT3B0aW9uRXJyb3IKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGEgc3BlY2lmaWVkIG9wdGlvbiBpcyBub3QgZm91bmQgaW4gdGhlIHNwZWNpZmllZAorICAgc2VjdGlvbi4KKworCisuLiBleGNlcHRpb246OiBJbnRlcnBvbGF0aW9uRXJyb3IKKworICAgQmFzZSBjbGFzcyBmb3IgZXhjZXB0aW9ucyByYWlzZWQgd2hlbiBwcm9ibGVtcyBvY2N1ciBwZXJmb3JtaW5nIHN0cmluZworICAgaW50ZXJwb2xhdGlvbi4KKworCisuLiBleGNlcHRpb246OiBJbnRlcnBvbGF0aW9uRGVwdGhFcnJvcgorCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gc3RyaW5nIGludGVycG9sYXRpb24gY2Fubm90IGJlIGNvbXBsZXRlZCBiZWNhdXNlIHRoZQorICAgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZXhjZWVkcyA6Y29uc3Q6YE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIYC4gIFN1YmNsYXNzIG9mCisgICA6ZXhjOmBJbnRlcnBvbGF0aW9uRXJyb3JgLgorCisKKy4uIGV4Y2VwdGlvbjo6IEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIG9wdGlvbiByZWZlcmVuY2VkIGZyb20gYSB2YWx1ZSBkb2VzIG5vdCBleGlzdC4KKyAgIFN1YmNsYXNzIG9mIDpleGM6YEludGVycG9sYXRpb25FcnJvcmAuCisKKworLi4gZXhjZXB0aW9uOjogSW50ZXJwb2xhdGlvblN5bnRheEVycm9yCisKKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGUgc291cmNlIHRleHQgaW50byB3aGljaCBzdWJzdGl0dXRpb25zIGFyZSBtYWRlIGRvZXMKKyAgIG5vdCBjb25mb3JtIHRvIHRoZSByZXF1aXJlZCBzeW50YXguICBTdWJjbGFzcyBvZiA6ZXhjOmBJbnRlcnBvbGF0aW9uRXJyb3JgLgorCisKKy4uIGV4Y2VwdGlvbjo6IE1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8gcGFyc2UgYSBmaWxlIHdoaWNoIGhhcyBubyBzZWN0aW9uCisgICBoZWFkZXJzLgorCisKKy4uIGV4Y2VwdGlvbjo6IFBhcnNpbmdFcnJvcgorCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gZXJyb3JzIG9jY3VyIGF0dGVtcHRpbmcgdG8gcGFyc2UgYSBmaWxlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGBgZmlsZW5hbWVgYCBhdHRyaWJ1dGUgYW5kIDptZXRoOmBfX2luaXRfX2AgYXJndW1lbnQgd2VyZSByZW5hbWVkIHRvCisgICAgICBgYHNvdXJjZWBgIGZvciBjb25zaXN0ZW5jeS4KKworCisuLiBydWJyaWM6OiBGb290bm90ZXMKKworLi4gWzFdIENvbmZpZyBwYXJzZXJzIGFsbG93IGZvciBoZWF2eSBjdXN0b21pemF0aW9uLiAgSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluCisgICAgICAgY2hhbmdpbmcgdGhlIGJlaGF2aW91ciBvdXRsaW5lZCBieSB0aGUgZm9vdG5vdGUgcmVmZXJlbmNlLCBjb25zdWx0IHRoZQorICAgICAgIGBDdXN0b21pemluZyBQYXJzZXIgQmVoYXZpb3VyYF8gc2VjdGlvbi4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvbnRleHRsaWIucnN0IGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKaW5kZXggY2EzN2YwZi4uYTM1ZWE1NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBjb250ZXh0bGliCiAgICA6c3lub3BzaXM6IFV0aWxpdGllcyBmb3Igd2l0aC1zdGF0ZW1lbnQgY29udGV4dHMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2NvbnRleHRsaWIucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgY29tbW9uIHRhc2tzIGludm9sdmluZyB0aGUgOmtleXdvcmQ6YHdpdGhgCiBzdGF0ZW1lbnQuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBhbHNvIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAgYW5kCkBAIC0xMiw3ICsxNSw3IEBACiBGdW5jdGlvbnMgcHJvdmlkZWQ6CiAKIAotLi4gZnVuY3Rpb246OiBjb250ZXh0bWFuYWdlcihmdW5jKQorLi4gZGVjb3JhdG9yOjogY29udGV4dG1hbmFnZXIKIAogICAgVGhpcyBmdW5jdGlvbiBpcyBhIDp0ZXJtOmBkZWNvcmF0b3JgIHRoYXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgZmFjdG9yeQogICAgZnVuY3Rpb24gZm9yIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgY29udGV4dCBtYW5hZ2Vycywgd2l0aG91dCBuZWVkaW5nIHRvCkBAIC01MSw1NCArNTQsMTEgQEAKICAgIHRoZSBleGNlcHRpb24gaGFzIGJlZW4gaGFuZGxlZCwgYW5kIGV4ZWN1dGlvbiB3aWxsIHJlc3VtZSB3aXRoIHRoZSBzdGF0ZW1lbnQKICAgIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KIAorICAgY29udGV4dG1hbmFnZXIgdXNlcyA6Y2xhc3M6YENvbnRleHREZWNvcmF0b3JgIHNvIHRoZSBjb250ZXh0IG1hbmFnZXJzIGl0CisgICBjcmVhdGVzIGNhbiBiZSB1c2VkIGFzIGRlY29yYXRvcnMgYXMgd2VsbCBhcyBpbiA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cy4KIAotLi4gZnVuY3Rpb246OiBuZXN0ZWQobWdyMVssIG1ncjJbLCAuLi5dXSkKLQotICAgQ29tYmluZSBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGludG8gYSBzaW5nbGUgbmVzdGVkIGNvbnRleHQgbWFuYWdlci4KLQotICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbXVsdGlwbGUgbWFuYWdlciBmb3JtCi0gICBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KLQotICAgVGhlIG9uZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBvdmVyIHRoZSBtdWx0aXBsZSBtYW5hZ2VyIGZvcm0gb2YgdGhlCi0gICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGlzIHRoYXQgYXJndW1lbnQgdW5wYWNraW5nIGFsbG93cyBpdCB0byBiZQotICAgdXNlZCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNvbnRleHQgbWFuYWdlcnMgYXMgZm9sbG93czo6Ci0KLSAgICAgIGZyb20gY29udGV4dGxpYiBpbXBvcnQgbmVzdGVkCi0KLSAgICAgIHdpdGggbmVzdGVkKCptYW5hZ2Vycyk6Ci0gICAgICAgICAgZG9fc29tZXRoaW5nKCkKLQotICAgTm90ZSB0aGF0IGlmIHRoZSA6bWV0aDpgX19leGl0X19gIG1ldGhvZCBvZiBvbmUgb2YgdGhlIG5lc3RlZCBjb250ZXh0IG1hbmFnZXJzCi0gICBpbmRpY2F0ZXMgYW4gZXhjZXB0aW9uIHNob3VsZCBiZSBzdXBwcmVzc2VkLCBubyBleGNlcHRpb24gaW5mb3JtYXRpb24gd2lsbCBiZQotICAgcGFzc2VkIHRvIGFueSByZW1haW5pbmcgb3V0ZXIgY29udGV4dCBtYW5hZ2Vycy4gU2ltaWxhcmx5LCBpZiB0aGUKLSAgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kIG9mIG9uZSBvZiB0aGUgbmVzdGVkIG1hbmFnZXJzIHJhaXNlcyBhbiBleGNlcHRpb24sIGFueQotICAgcHJldmlvdXMgZXhjZXB0aW9uIHN0YXRlIHdpbGwgYmUgbG9zdDsgdGhlIG5ldyBleGNlcHRpb24gd2lsbCBiZSBwYXNzZWQgdG8gdGhlCi0gICA6bWV0aDpgX19leGl0X19gIG1ldGhvZHMgb2YgYW55IHJlbWFpbmluZyBvdXRlciBjb250ZXh0IG1hbmFnZXJzLiBJbiBnZW5lcmFsLAotICAgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2RzIHNob3VsZCBhdm9pZCByYWlzaW5nIGV4Y2VwdGlvbnMsIGFuZCBpbiBwYXJ0aWN1bGFyIHRoZXkKLSAgIHNob3VsZCBub3QgcmUtcmFpc2UgYSBwYXNzZWQtaW4gZXhjZXB0aW9uLgotCi0gICBUaGlzIGZ1bmN0aW9uIGhhcyB0d28gbWFqb3IgcXVpcmtzIHRoYXQgaGF2ZSBsZWQgdG8gaXQgYmVpbmcgZGVwcmVjYXRlZC4gRmlyc3RseSwKLSAgIGFzIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBhbGwgY29uc3RydWN0ZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkLCB0aGUKLSAgIDptZXRoOmBfX25ld19fYCBhbmQgOm1ldGg6YF9faW5pdF9fYCBtZXRob2RzIG9mIHRoZSBpbm5lciBjb250ZXh0IG1hbmFnZXJzIGFyZQotICAgbm90IGFjdHVhbGx5IGNvdmVyZWQgYnkgdGhlIHNjb3BlIG9mIHRoZSBvdXRlciBjb250ZXh0IG1hbmFnZXJzLiBUaGF0IG1lYW5zLCBmb3IKLSAgIGV4YW1wbGUsIHRoYXQgdXNpbmcgOmZ1bmM6YG5lc3RlZGAgdG8gb3BlbiB0d28gZmlsZXMgaXMgYSBwcm9ncmFtbWluZyBlcnJvciBhcyB0aGUKLSAgIGZpcnN0IGZpbGUgd2lsbCBub3QgYmUgY2xvc2VkIHByb21wdGx5IGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hlbiBvcGVuaW5nCi0gICB0aGUgc2Vjb25kIGZpbGUuCi0KLSAgIFNlY29uZGx5LCBpZiB0aGUgOm1ldGg6YF9fZW50ZXJfX2AgbWV0aG9kIG9mIG9uZSBvZiB0aGUgaW5uZXIgY29udGV4dCBtYW5hZ2VycwotICAgcmFpc2VzIGFuIGV4Y2VwdGlvbiB0aGF0IGlzIGNhdWdodCBhbmQgc3VwcHJlc3NlZCBieSB0aGUgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2QKLSAgIG9mIG9uZSBvZiB0aGUgb3V0ZXIgY29udGV4dCBtYW5hZ2VycywgdGhpcyBjb25zdHJ1Y3Qgd2lsbCByYWlzZQotICAgOmV4YzpgUnVudGltZUVycm9yYCByYXRoZXIgdGhhbiBza2lwcGluZyB0aGUgYm9keSBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgCi0gICBzdGF0ZW1lbnQuCi0KLSAgIERldmVsb3BlcnMgdGhhdCBuZWVkIHRvIHN1cHBvcnQgbmVzdGluZyBvZiBhIHZhcmlhYmxlIG51bWJlciBvZiBjb250ZXh0IG1hbmFnZXJzCi0gICBjYW4gZWl0aGVyIHVzZSB0aGUgOm1vZDpgd2FybmluZ3NgIG1vZHVsZSB0byBzdXBwcmVzcyB0aGUgRGVwcmVjYXRpb25XYXJuaW5nCi0gICByYWlzZWQgYnkgdGhpcyBmdW5jdGlvbiBvciBlbHNlIHVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgbW9kZWwgZm9yIGFuIGFwcGxpY2F0aW9uCi0gICBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi4KLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMQotICAgICAgVGhlIHdpdGgtc3RhdGVtZW50IG5vdyBzdXBwb3J0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgZGlyZWN0bHkgKHdpdGhvdXQgdGhlCi0gICAgICBjb25mdXNpbmcgZXJyb3IgcHJvbmUgcXVpcmtzKS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBVc2Ugb2YgOmNsYXNzOmBDb250ZXh0RGVjb3JhdG9yYC4KIAogCiAuLiBmdW5jdGlvbjo6IGNsb3NpbmcodGhpbmcpCkBAIC0xMjgsNiArODgsNzYgQEAKICAgIGBgcGFnZS5jbG9zZSgpYGAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGlzIGV4aXRlZC4KIAogCisuLiBjbGFzczo6IENvbnRleHREZWNvcmF0b3IoKQorCisgICBBIGJhc2UgY2xhc3MgdGhhdCBlbmFibGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvIGFsc28gYmUgdXNlZCBhcyBhIGRlY29yYXRvci4KKworICAgQ29udGV4dCBtYW5hZ2VycyBpbmhlcml0aW5nIGZyb20gYGBDb250ZXh0RGVjb3JhdG9yYGAgaGF2ZSB0byBpbXBsZW1lbnQKKyAgIGBgX19lbnRlcl9fYGAgYW5kIGBgX19leGl0X19gYCBhcyBub3JtYWwuIGBgX19leGl0X19gYCByZXRhaW5zIGl0cyBvcHRpb25hbAorICAgZXhjZXB0aW9uIGhhbmRsaW5nIGV2ZW4gd2hlbiB1c2VkIGFzIGEgZGVjb3JhdG9yLgorCisgICBgYENvbnRleHREZWNvcmF0b3JgYCBpcyB1c2VkIGJ5IDpmdW5jOmBjb250ZXh0bWFuYWdlcmAsIHNvIHlvdSBnZXQgdGhpcworICAgZnVuY3Rpb25hbGl0eSBhdXRvbWF0aWNhbGx5LgorCisgICBFeGFtcGxlIG9mIGBgQ29udGV4dERlY29yYXRvcmBgOjoKKworICAgICAgZnJvbSBjb250ZXh0bGliIGltcG9ydCBDb250ZXh0RGVjb3JhdG9yCisKKyAgICAgIGNsYXNzIG15Y29udGV4dChDb250ZXh0RGVjb3JhdG9yKToKKyAgICAgICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICBwcmludCgnU3RhcnRpbmcnKQorICAgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGMpOgorICAgICAgICAgICAgICBwcmludCgnRmluaXNoaW5nJykKKyAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgID4+PiBAbXljb250ZXh0KCkKKyAgICAgIC4uLiBkZWYgZnVuY3Rpb24oKToKKyAgICAgIC4uLiAgICAgcHJpbnQoJ1RoZSBiaXQgaW4gdGhlIG1pZGRsZScpCisgICAgICAuLi4KKyAgICAgID4+PiBmdW5jdGlvbigpCisgICAgICBTdGFydGluZworICAgICAgVGhlIGJpdCBpbiB0aGUgbWlkZGxlCisgICAgICBGaW5pc2hpbmcKKworICAgICAgPj4+IHdpdGggbXljb250ZXh0KCk6CisgICAgICAuLi4gICAgIHByaW50KCdUaGUgYml0IGluIHRoZSBtaWRkbGUnKQorICAgICAgLi4uCisgICAgICBTdGFydGluZworICAgICAgVGhlIGJpdCBpbiB0aGUgbWlkZGxlCisgICAgICBGaW5pc2hpbmcKKworICAgVGhpcyBjaGFuZ2UgaXMganVzdCBzeW50YWN0aWMgc3VnYXIgZm9yIGFueSBjb25zdHJ1Y3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOjoKKworICAgICAgZGVmIGYoKToKKyAgICAgICAgICB3aXRoIGNtKCk6CisgICAgICAgICAgICAgICMgRG8gc3R1ZmYKKworICAgYGBDb250ZXh0RGVjb3JhdG9yYGAgbGV0cyB5b3UgaW5zdGVhZCB3cml0ZTo6CisKKyAgICAgIEBjbSgpCisgICAgICBkZWYgZigpOgorICAgICAgICAgICMgRG8gc3R1ZmYKKworICAgSXQgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGUgYGBjbWBgIGFwcGxpZXMgdG8gdGhlIHdob2xlIGZ1bmN0aW9uLCByYXRoZXIgdGhhbgorICAganVzdCBhIHBpZWNlIG9mIGl0IChhbmQgc2F2aW5nIGFuIGluZGVudGF0aW9uIGxldmVsIGlzIG5pY2UsIHRvbykuCisKKyAgIEV4aXN0aW5nIGNvbnRleHQgbWFuYWdlcnMgdGhhdCBhbHJlYWR5IGhhdmUgYSBiYXNlIGNsYXNzIGNhbiBiZSBleHRlbmRlZCBieQorICAgdXNpbmcgYGBDb250ZXh0RGVjb3JhdG9yYGAgYXMgYSBtaXhpbiBjbGFzczo6CisKKyAgICAgIGZyb20gY29udGV4dGxpYiBpbXBvcnQgQ29udGV4dERlY29yYXRvcgorCisgICAgICBjbGFzcyBteWNvbnRleHQoQ29udGV4dEJhc2VDbGFzcywgQ29udGV4dERlY29yYXRvcik6CisgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKKyAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIHNlZWFsc286OgogCiAgICA6cGVwOmAwMzQzYCAtIFRoZSAid2l0aCIgc3RhdGVtZW50CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jc3YucnN0IGIvRG9jL2xpYnJhcnkvY3N2LnJzdAppbmRleCA5MmJhNmRhLi5lZGJlNzI2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jc3YucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKQEAgLTE4OCw2ICsxODgsMTUgQEAKICAgIFRBQi1kZWxpbWl0ZWQgZmlsZS4gIEl0IGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGlhbGVjdCBuYW1lIGBgJ2V4Y2VsLXRhYidgYC4KIAogCisuLiBjbGFzczo6IHVuaXhfZGlhbGVjdCgpCisKKyAgIFRoZSA6Y2xhc3M6YHVuaXhfZGlhbGVjdGAgY2xhc3MgZGVmaW5lcyB0aGUgdXN1YWwgcHJvcGVydGllcyBvZiBhIENTViBmaWxlCisgICBnZW5lcmF0ZWQgb24gVU5JWCBzeXN0ZW1zLCBpLmUuIHVzaW5nIGBgJ1xuJ2BgIGFzIGxpbmUgdGVybWluYXRvciBhbmQgcXVvdGluZworICAgYWxsIGZpZWxkcy4gIEl0IGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZGlhbGVjdCBuYW1lIGBgJ3VuaXgnYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIGNsYXNzOjogU25pZmZlcigpCiAKICAgIFRoZSA6Y2xhc3M6YFNuaWZmZXJgIGNsYXNzIGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBmb3JtYXQgb2YgYSBDU1YgZmlsZS4KQEAgLTM5Myw2ICs0MDIsMTYgQEAKICAgIEEgcmVhZC1vbmx5IGRlc2NyaXB0aW9uIG9mIHRoZSBkaWFsZWN0IGluIHVzZSBieSB0aGUgd3JpdGVyLgogCiAKK0RpY3RXcml0ZXIgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgcHVibGljIG1ldGhvZDoKKworCisuLiBtZXRob2Q6OiBEaWN0V3JpdGVyLndyaXRlaGVhZGVyKCkKKworICAgV3JpdGUgYSByb3cgd2l0aCB0aGUgZmllbGQgbmFtZXMgKGFzIHNwZWNpZmllZCBpbiB0aGUgY29uc3RydWN0b3IpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBfY3N2LWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKaW5kZXggZDFkMDI1Yi4uMzNkMWY3ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CkBAIC0zOCw3ICszOCw3IEBACiBsb2FkcyBsaWJyYXJpZXMgd2hpY2ggZXhwb3J0IGZ1bmN0aW9ucyB1c2luZyB0aGUgc3RhbmRhcmQgYGBjZGVjbGBgIGNhbGxpbmcKIGNvbnZlbnRpb24sIHdoaWxlICp3aW5kbGwqIGxpYnJhcmllcyBjYWxsIGZ1bmN0aW9ucyB1c2luZyB0aGUgYGBzdGRjYWxsYGAKIGNhbGxpbmcgY29udmVudGlvbi4gKm9sZWRsbCogYWxzbyB1c2VzIHRoZSBgYHN0ZGNhbGxgYCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZAotYXNzdW1lcyB0aGUgZnVuY3Rpb25zIHJldHVybiBhIFdpbmRvd3MgOmN0eXBlOmBIUkVTVUxUYCBlcnJvciBjb2RlLiBUaGUgZXJyb3IKK2Fzc3VtZXMgdGhlIGZ1bmN0aW9ucyByZXR1cm4gYSBXaW5kb3dzIDpjOnR5cGU6YEhSRVNVTFRgIGVycm9yIGNvZGUuIFRoZSBlcnJvcgogY29kZSBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgcmFpc2UgYSA6Y2xhc3M6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIHdoZW4gdGhlCiBmdW5jdGlvbiBjYWxsIGZhaWxzLgogCkBAIC0xOTgsOSArMTk4LDkgQEAKIGBgTm9uZWBgLCBpbnRlZ2VycywgYnl0ZXMgb2JqZWN0cyBhbmQgKHVuaWNvZGUpIHN0cmluZ3MgYXJlIHRoZSBvbmx5IG5hdGl2ZQogUHl0aG9uIG9iamVjdHMgdGhhdCBjYW4gZGlyZWN0bHkgYmUgdXNlZCBhcyBwYXJhbWV0ZXJzIGluIHRoZXNlIGZ1bmN0aW9uIGNhbGxzLgogYGBOb25lYGAgaXMgcGFzc2VkIGFzIGEgQyBgYE5VTExgYCBwb2ludGVyLCBieXRlcyBvYmplY3RzIGFuZCBzdHJpbmdzIGFyZSBwYXNzZWQKLWFzIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSBibG9jayB0aGF0IGNvbnRhaW5zIHRoZWlyIGRhdGEgKDpjdHlwZTpgY2hhciAqYCBvcgotOmN0eXBlOmB3Y2hhcl90ICpgKS4gIFB5dGhvbiBpbnRlZ2VycyBhcmUgcGFzc2VkIGFzIHRoZSBwbGF0Zm9ybXMgZGVmYXVsdCBDCi06Y3R5cGU6YGludGAgdHlwZSwgdGhlaXIgdmFsdWUgaXMgbWFza2VkIHRvIGZpdCBpbnRvIHRoZSBDIHR5cGUuCithcyBwb2ludGVyIHRvIHRoZSBtZW1vcnkgYmxvY2sgdGhhdCBjb250YWlucyB0aGVpciBkYXRhICg6Yzp0eXBlOmBjaGFyICpgIG9yCis6Yzp0eXBlOmB3Y2hhcl90ICpgKS4gIFB5dGhvbiBpbnRlZ2VycyBhcmUgcGFzc2VkIGFzIHRoZSBwbGF0Zm9ybXMgZGVmYXVsdCBDCis6Yzp0eXBlOmBpbnRgIHR5cGUsIHRoZWlyIHZhbHVlIGlzIG1hc2tlZCB0byBmaXQgaW50byB0aGUgQyB0eXBlLgogCiBCZWZvcmUgd2UgbW92ZSBvbiBjYWxsaW5nIGZ1bmN0aW9ucyB3aXRoIG90aGVyIHBhcmFtZXRlciB0eXBlcywgd2UgaGF2ZSB0byBsZWFybgogbW9yZSBhYm91dCA6bW9kOmBjdHlwZXNgIGRhdGEgdHlwZXMuCkBAIC0yMTMsNDggKzIxMyw0OCBAQAogCiA6bW9kOmBjdHlwZXNgIGRlZmluZXMgYSBudW1iZXIgb2YgcHJpbWl0aXZlIEMgY29tcGF0aWJsZSBkYXRhIHR5cGVzIDoKIAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBjdHlwZXMgdHlwZSAgICAgICAgICB8IEMgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUHl0aG9uIHR5cGUgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCA6Y2xhc3M6YGNfYm9vbGAgICAgICB8IDpjdHlwZTpgX0Jvb2xgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYm9vbCAoMSkgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfY2hhcmAgICAgICB8IDpjdHlwZTpgY2hhcmAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS1jaGFyYWN0ZXIgYnl0ZXMgb2JqZWN0ICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfd2NoYXJgICAgICB8IDpjdHlwZTpgd2NoYXJfdGAgICAgICAgICAgICAgICAgICAgICAgIHwgMS1jaGFyYWN0ZXIgc3RyaW5nICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfYnl0ZWAgICAgICB8IDpjdHlwZTpgY2hhcmAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdWJ5dGVgICAgICB8IDpjdHlwZTpgdW5zaWduZWQgY2hhcmAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfc2hvcnRgICAgICB8IDpjdHlwZTpgc2hvcnRgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdXNob3J0YCAgICB8IDpjdHlwZTpgdW5zaWduZWQgc2hvcnRgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfaW50YCAgICAgICB8IDpjdHlwZTpgaW50YCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdWludGAgICAgICB8IDpjdHlwZTpgdW5zaWduZWQgaW50YCAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfbG9uZ2AgICAgICB8IDpjdHlwZTpgbG9uZ2AgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdWxvbmdgICAgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZ2AgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfbG9uZ2xvbmdgICB8IDpjdHlwZTpgX19pbnQ2NGAgb3IgOmN0eXBlOmBsb25nIGxvbmdgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdWxvbmdsb25nYCB8IDpjdHlwZTpgdW5zaWduZWQgX19pbnQ2NGAgb3IgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfZmxvYXRgICAgICB8IDpjdHlwZTpgZmxvYXRgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfZG91YmxlYCAgICB8IDpjdHlwZTpgZG91YmxlYCAgICAgICAgICAgICAgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfbG9uZ2RvdWJsZWB8IDpjdHlwZTpgbG9uZyBkb3VibGVgICAgICAgICAgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfY2hhcl9wYCAgICB8IDpjdHlwZTpgY2hhciAqYCAoTlVMIHRlcm1pbmF0ZWQpICAgICAgIHwgYnl0ZXMgb2JqZWN0IG9yIGBgTm9uZWBgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfd2NoYXJfcGAgICB8IDpjdHlwZTpgd2NoYXJfdCAqYCAoTlVMIHRlcm1pbmF0ZWQpICAgIHwgc3RyaW5nIG9yIGBgTm9uZWBgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2xhc3M6YGNfdm9pZF9wYCAgICB8IDpjdHlwZTpgdm9pZCAqYCAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50IG9yIGBgTm9uZWBgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGN0eXBlcyB0eXBlICAgICAgICAgIHwgQyB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB5dGhvbiB0eXBlICAgICAgICAgICAgICAgIHwKKys9PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCA6Y2xhc3M6YGNfYm9vbGAgICAgICB8IDpjOnR5cGU6YF9Cb29sYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBib29sICgxKSAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX2NoYXJgICAgICAgfCA6Yzp0eXBlOmBjaGFyYCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMS1jaGFyYWN0ZXIgYnl0ZXMgb2JqZWN0ICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY193Y2hhcmAgICAgIHwgOmM6dHlwZTpgd2NoYXJfdGAgICAgICAgICAgICAgICAgICAgICAgICB8IDEtY2hhcmFjdGVyIHN0cmluZyAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfYnl0ZWAgICAgICB8IDpjOnR5cGU6YGNoYXJgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX3VieXRlYCAgICAgfCA6Yzp0eXBlOmB1bnNpZ25lZCBjaGFyYCAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY19zaG9ydGAgICAgIHwgOmM6dHlwZTpgc2hvcnRgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGludCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfdXNob3J0YCAgICB8IDpjOnR5cGU6YHVuc2lnbmVkIHNob3J0YCAgICAgICAgICAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX2ludGAgICAgICAgfCA6Yzp0eXBlOmBpbnRgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY191aW50YCAgICAgIHwgOmM6dHlwZTpgdW5zaWduZWQgaW50YCAgICAgICAgICAgICAgICAgICB8IGludCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfbG9uZ2AgICAgICB8IDpjOnR5cGU6YGxvbmdgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX3Vsb25nYCAgICAgfCA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nYCAgICAgICAgICAgICAgICAgIHwgaW50ICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY19sb25nbG9uZ2AgIHwgOmM6dHlwZTpgX19pbnQ2NGAgb3IgOmM6dHlwZTpgbG9uZyBsb25nYCB8IGludCAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfdWxvbmdsb25nYCB8IDpjOnR5cGU6YHVuc2lnbmVkIF9faW50NjRgIG9yICAgICAgICAgICAgfCBpbnQgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgOmM6dHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfZmxvYXRgICAgICB8IDpjOnR5cGU6YGZsb2F0YCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmbG9hdCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX2RvdWJsZWAgICAgfCA6Yzp0eXBlOmBkb3VibGVgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY19sb25nZG91YmxlYHwgOmM6dHlwZTpgbG9uZyBkb3VibGVgICAgICAgICAgICAgICAgICAgICB8IGZsb2F0ICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y2xhc3M6YGNfY2hhcl9wYCAgICB8IDpjOnR5cGU6YGNoYXIgKmAgKE5VTCB0ZXJtaW5hdGVkKSAgICAgICAgfCBieXRlcyBvYmplY3Qgb3IgYGBOb25lYGAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNsYXNzOmBjX3djaGFyX3BgICAgfCA6Yzp0eXBlOmB3Y2hhcl90ICpgIChOVUwgdGVybWluYXRlZCkgICAgIHwgc3RyaW5nIG9yIGBgTm9uZWBgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IDpjbGFzczpgY192b2lkX3BgICAgIHwgOmM6dHlwZTpgdm9pZCAqYCAgICAgICAgICAgICAgICAgICAgICAgICB8IGludCBvciBgYE5vbmVgYCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAoMSkKICAgIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFueSBvYmplY3Qgd2l0aCBhIHRydXRoIHZhbHVlLgpAQCAtMzI1LDcgKzMyNSw3IEBACiBUaGUgOmZ1bmM6YGNyZWF0ZV9zdHJpbmdfYnVmZmVyYCBmdW5jdGlvbiByZXBsYWNlcyB0aGUgOmZ1bmM6YGNfYnVmZmVyYCBmdW5jdGlvbgogKHdoaWNoIGlzIHN0aWxsIGF2YWlsYWJsZSBhcyBhbiBhbGlhcyksIGFzIHdlbGwgYXMgdGhlIDpmdW5jOmBjX3N0cmluZ2AgZnVuY3Rpb24KIGZyb20gZWFybGllciBjdHlwZXMgcmVsZWFzZXMuICBUbyBjcmVhdGUgYSBtdXRhYmxlIG1lbW9yeSBibG9jayBjb250YWluaW5nCi11bmljb2RlIGNoYXJhY3RlcnMgb2YgdGhlIEMgdHlwZSA6Y3R5cGU6YHdjaGFyX3RgIHVzZSB0aGUKK3VuaWNvZGUgY2hhcmFjdGVycyBvZiB0aGUgQyB0eXBlIDpjOnR5cGU6YHdjaGFyX3RgIHVzZSB0aGUKIDpmdW5jOmBjcmVhdGVfdW5pY29kZV9idWZmZXJgIGZ1bmN0aW9uLgogCiAKQEAgLTQzNiw3ICs0MzYsNyBAQAogUmV0dXJuIHR5cGVzCiBeXl5eXl5eXl5eXl4KIAotQnkgZGVmYXVsdCBmdW5jdGlvbnMgYXJlIGFzc3VtZWQgdG8gcmV0dXJuIHRoZSBDIDpjdHlwZTpgaW50YCB0eXBlLiAgT3RoZXIKK0J5IGRlZmF1bHQgZnVuY3Rpb25zIGFyZSBhc3N1bWVkIHRvIHJldHVybiB0aGUgQyA6Yzp0eXBlOmBpbnRgIHR5cGUuICBPdGhlcgogcmV0dXJuIHR5cGVzIGNhbiBiZSBzcGVjaWZpZWQgYnkgc2V0dGluZyB0aGUgOmF0dHI6YHJlc3R5cGVgIGF0dHJpYnV0ZSBvZiB0aGUKIGZ1bmN0aW9uIG9iamVjdC4KIApAQCAtOTM1LDggKzkzNSw4IEBACiBhcmd1bWVudHMuCiAKIEkgd2lsbCBwcmVzZW50IGFuIGV4YW1wbGUgaGVyZSB3aGljaCB1c2VzIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkncwotOmNmdW5jOmBxc29ydGAgZnVuY3Rpb24sIHRoaXMgaXMgdXNlZCB0byBzb3J0IGl0ZW1zIHdpdGggdGhlIGhlbHAgb2YgYSBjYWxsYmFjawotZnVuY3Rpb24uICA6Y2Z1bmM6YHFzb3J0YCB3aWxsIGJlIHVzZWQgdG8gc29ydCBhbiBhcnJheSBvZiBpbnRlZ2Vyczo6Cis6YzpmdW5jOmBxc29ydGAgZnVuY3Rpb24sIHRoaXMgaXMgdXNlZCB0byBzb3J0IGl0ZW1zIHdpdGggdGhlIGhlbHAgb2YgYSBjYWxsYmFjaworZnVuY3Rpb24uICA6YzpmdW5jOmBxc29ydGAgd2lsbCBiZSB1c2VkIHRvIHNvcnQgYW4gYXJyYXkgb2YgaW50ZWdlcnM6OgogCiAgICA+Pj4gSW50QXJyYXk1ID0gY19pbnQgKiA1CiAgICA+Pj4gaWEgPSBJbnRBcnJheTUoNSwgMSwgNywgMzMsIDk5KQpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKIFNvbWUgc2hhcmVkIGxpYnJhcmllcyBub3Qgb25seSBleHBvcnQgZnVuY3Rpb25zLCB0aGV5IGFsc28gZXhwb3J0IHZhcmlhYmxlcy4gQW4KLWV4YW1wbGUgaW4gdGhlIFB5dGhvbiBsaWJyYXJ5IGl0c2VsZiBpcyB0aGUgOmNkYXRhOmBQeV9PcHRpbWl6ZUZsYWdgLCBhbiBpbnRlZ2VyCitleGFtcGxlIGluIHRoZSBQeXRob24gbGlicmFyeSBpdHNlbGYgaXMgdGhlIDpjOmRhdGE6YFB5X09wdGltaXplRmxhZ2AsIGFuIGludGVnZXIKIHNldCB0byAwLCAxLCBvciAyLCBkZXBlbmRpbmcgb24gdGhlIDpvcHRpb246YC1PYCBvciA6b3B0aW9uOmAtT09gIGZsYWcgZ2l2ZW4gb24KIHN0YXJ0dXAuCiAKQEAgLTEwOTUsMTEgKzEwOTUsMTEgQEAKIHNwZWNpZmllZC4KIAogQW4gZXh0ZW5kZWQgZXhhbXBsZSB3aGljaCBhbHNvIGRlbW9uc3RyYXRlcyB0aGUgdXNlIG9mIHBvaW50ZXJzIGFjY2Vzc2VzIHRoZQotOmNkYXRhOmBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzYCBwb2ludGVyIGV4cG9ydGVkIGJ5IFB5dGhvbi4KKzpjOmRhdGE6YFB5SW1wb3J0X0Zyb3plbk1vZHVsZXNgIHBvaW50ZXIgZXhwb3J0ZWQgYnkgUHl0aG9uLgogCiBRdW90aW5nIHRoZSBkb2NzIGZvciB0aGF0IHZhbHVlOgogCi0gICBUaGlzIHBvaW50ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgdG8gYW4gYXJyYXkgb2YgOmN0eXBlOmBzdHJ1Y3QgX2Zyb3plbmAKKyAgIFRoaXMgcG9pbnRlciBpcyBpbml0aWFsaXplZCB0byBwb2ludCB0byBhbiBhcnJheSBvZiA6Yzp0eXBlOmBzdHJ1Y3QgX2Zyb3plbmAKICAgIHJlY29yZHMsIHRlcm1pbmF0ZWQgYnkgb25lIHdob3NlIG1lbWJlcnMgYXJlIGFsbCAqTlVMTCogb3IgemVyby4gIFdoZW4gYSBmcm96ZW4KICAgIG1vZHVsZSBpcyBpbXBvcnRlZCwgaXQgaXMgc2VhcmNoZWQgaW4gdGhpcyB0YWJsZS4gIFRoaXJkLXBhcnR5IGNvZGUgY291bGQgcGxheQogICAgdHJpY2tzIHdpdGggdGhpcyB0byBwcm92aWRlIGEgZHluYW1pY2FsbHkgY3JlYXRlZCBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzLgpAQCAtMTExNiw3ICsxMTE2LDcgQEAKICAgIC4uLgogICAgPj4+CiAKLVdlIGhhdmUgZGVmaW5lZCB0aGUgOmN0eXBlOmBzdHJ1Y3QgX2Zyb3plbmAgZGF0YSB0eXBlLCBzbyB3ZSBjYW4gZ2V0IHRoZSBwb2ludGVyCitXZSBoYXZlIGRlZmluZWQgdGhlIDpjOnR5cGU6YHN0cnVjdCBfZnJvemVuYCBkYXRhIHR5cGUsIHNvIHdlIGNhbiBnZXQgdGhlIHBvaW50ZXIKIHRvIHRoZSB0YWJsZTo6CiAKICAgID4+PiBGcm96ZW5UYWJsZSA9IFBPSU5URVIoc3RydWN0X2Zyb3plbikKQEAgLTEzMzUsNyArMTMzNSw3IEBACiAKICAgIEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcy4gRnVuY3Rpb25zIGluIHRoZXNlCiAgICBsaWJyYXJpZXMgdXNlIHRoZSBzdGFuZGFyZCBDIGNhbGxpbmcgY29udmVudGlvbiwgYW5kIGFyZSBhc3N1bWVkIHRvIHJldHVybgotICAgOmN0eXBlOmBpbnRgLgorICAgOmM6dHlwZTpgaW50YC4KIAogCiAuLiBjbGFzczo6IE9sZURMTChuYW1lLCBtb2RlPURFRkFVTFRfTU9ERSwgaGFuZGxlPU5vbmUsIHVzZV9lcnJubz1GYWxzZSwgdXNlX2xhc3RfZXJyb3I9RmFsc2UpCkBAIC0xMzUyLDcgKzEzNTIsNyBAQAogCiAgICBXaW5kb3dzIG9ubHk6IEluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIHJlcHJlc2VudCBsb2FkZWQgc2hhcmVkIGxpYnJhcmllcywKICAgIGZ1bmN0aW9ucyBpbiB0aGVzZSBsaWJyYXJpZXMgdXNlIHRoZSBgYHN0ZGNhbGxgYCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZCBhcmUKLSAgIGFzc3VtZWQgdG8gcmV0dXJuIDpjdHlwZTpgaW50YCBieSBkZWZhdWx0LgorICAgYXNzdW1lZCB0byByZXR1cm4gOmM6dHlwZTpgaW50YCBieSBkZWZhdWx0LgogCiAgICBPbiBXaW5kb3dzIENFIG9ubHkgdGhlIHN0YW5kYXJkIGNhbGxpbmcgY29udmVudGlvbiBpcyB1c2VkLCBmb3IgY29udmVuaWVuY2UgdGhlCiAgICA6Y2xhc3M6YFdpbkRMTGAgYW5kIDpjbGFzczpgT2xlRExMYCB1c2UgdGhlIHN0YW5kYXJkIGNhbGxpbmcgY29udmVudGlvbiBvbiB0aGlzCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCiAgICBBbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFB5RExMYCB0aGF0IGV4cG9zZXMgUHl0aG9uIEMgQVBJIGZ1bmN0aW9ucyBhcwogICAgYXR0cmlidXRlcy4gIE5vdGUgdGhhdCBhbGwgdGhlc2UgZnVuY3Rpb25zIGFyZSBhc3N1bWVkIHRvIHJldHVybiBDCi0gICA6Y3R5cGU6YGludGAsIHdoaWNoIGlzIG9mIGNvdXJzZSBub3QgYWx3YXlzIHRoZSB0cnV0aCwgc28geW91IGhhdmUgdG8gYXNzaWduCisgICA6Yzp0eXBlOmBpbnRgLCB3aGljaCBpcyBvZiBjb3Vyc2Ugbm90IGFsd2F5cyB0aGUgdHJ1dGgsIHNvIHlvdSBoYXZlIHRvIGFzc2lnbgogICAgdGhlIGNvcnJlY3QgOmF0dHI6YHJlc3R5cGVgIGF0dHJpYnV0ZSB0byB1c2UgdGhlc2UgZnVuY3Rpb25zLgogCiAKQEAgLTE1MjIsMTAgKzE1MjIsMTAgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IHJlc3R5cGUKIAogICAgICAgQXNzaWduIGEgY3R5cGVzIHR5cGUgdG8gc3BlY2lmeSB0aGUgcmVzdWx0IHR5cGUgb2YgdGhlIGZvcmVpZ24gZnVuY3Rpb24uCi0gICAgICBVc2UgYGBOb25lYGAgZm9yIDpjdHlwZTpgdm9pZGAsIGEgZnVuY3Rpb24gbm90IHJldHVybmluZyBhbnl0aGluZy4KKyAgICAgIFVzZSBgYE5vbmVgYCBmb3IgOmM6dHlwZTpgdm9pZGAsIGEgZnVuY3Rpb24gbm90IHJldHVybmluZyBhbnl0aGluZy4KIAogICAgICAgSXQgaXMgcG9zc2libGUgdG8gYXNzaWduIGEgY2FsbGFibGUgUHl0aG9uIG9iamVjdCB0aGF0IGlzIG5vdCBhIGN0eXBlcwotICAgICAgdHlwZSwgaW4gdGhpcyBjYXNlIHRoZSBmdW5jdGlvbiBpcyBhc3N1bWVkIHRvIHJldHVybiBhIEMgOmN0eXBlOmBpbnRgLCBhbmQKKyAgICAgIHR5cGUsIGluIHRoaXMgY2FzZSB0aGUgZnVuY3Rpb24gaXMgYXNzdW1lZCB0byByZXR1cm4gYSBDIDpjOnR5cGU6YGludGAsIGFuZAogICAgICAgdGhlIGNhbGxhYmxlIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhpcyBpbnRlZ2VyLCBhbGxvd2luZyB0byBkbyBmdXJ0aGVyCiAgICAgICBwcm9jZXNzaW5nIG9yIGVycm9yIGNoZWNraW5nLiAgVXNpbmcgdGhpcyBpcyBkZXByZWNhdGVkLCBmb3IgbW9yZSBmbGV4aWJsZQogICAgICAgcG9zdCBwcm9jZXNzaW5nIG9yIGVycm9yIGNoZWNraW5nIHVzZSBhIGN0eXBlcyBkYXRhIHR5cGUgYXMKQEAgLTE5MzUsMjIgKzE5MzUsNiBAQAogICAgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIGVubGFyZ2UgdGhlIGJ1ZmZlci4KIAogCi0uLiBmdW5jdGlvbjo6IHNldF9jb252ZXJzaW9uX21vZGUoZW5jb2RpbmcsIGVycm9ycykKLQotICAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBydWxlcyB0aGF0IGN0eXBlcyBvYmplY3RzIHVzZSB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbgotICAgYnl0ZXMgb2JqZWN0cyBhbmQgKHVuaWNvZGUpIHN0cmluZ3MuICplbmNvZGluZyogbXVzdCBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIGFuCi0gICBlbmNvZGluZywgbGlrZSBgYCd1dGYtOCdgYCBvciBgYCdtYmNzJ2BgLCAqZXJyb3JzKiBtdXN0IGJlIGEgc3RyaW5nIHNwZWNpZnlpbmcKLSAgIHRoZSBlcnJvciBoYW5kbGluZyBvbiBlbmNvZGluZy9kZWNvZGluZyBlcnJvcnMuIEV4YW1wbGVzIG9mIHBvc3NpYmxlIHZhbHVlcyBhcmUKLSAgIGBgJ3N0cmljdCdgYCwgYGAncmVwbGFjZSdgYCwgb3IgYGAnaWdub3JlJ2BgLgotCi0gICA6ZnVuYzpgc2V0X2NvbnZlcnNpb25fbW9kZWAgcmV0dXJucyBhIDItdHVwbGUgY29udGFpbmluZyB0aGUgcHJldmlvdXMKLSAgIGNvbnZlcnNpb24gcnVsZXMuIE9uIHdpbmRvd3MsIHRoZSBpbml0aWFsIGNvbnZlcnNpb24gcnVsZXMgYXJlIGBgKCdtYmNzJywKLSAgICdpZ25vcmUnKWBgLCBvbiBvdGhlciBzeXN0ZW1zIGBgKCdhc2NpaScsICdzdHJpY3QnKWBgLgotCi0gICBZb3UgY2FuIHNldCB0aGUgKmVuY29kaW5nKiB0byBgYCd1bmRlZmluZWQnYGAgdG8gY29tcGxldGVseSBkaXNhYmxlIGF1dG9tYXRpYwotICAgY29udmVyc2lvbnMuCi0KLQogLi4gZnVuY3Rpb246OiBzZXRfZXJybm8odmFsdWUpCiAKICAgIFNldCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgY3R5cGVzLXByaXZhdGUgY29weSBvZiB0aGUgc3lzdGVtIDpkYXRhOmBlcnJub2AKQEAgLTIxMjAsMjEgKzIxMDQsMjEgQEAKIAogLi4gY2xhc3M6OiBjX2J5dGUKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHNpZ25lZCBjaGFyYCBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YHNpZ25lZCBjaGFyYCBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzCiAgICBzbWFsbCBpbnRlZ2VyLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8KICAgIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCiAKIAogLi4gY2xhc3M6OiBjX2NoYXIKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YGNoYXJgIGRhdGF0eXBlLCBhbmQgaW50ZXJwcmV0cyB0aGUgdmFsdWUgYXMgYSBzaW5nbGUKKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgY2hhcmAgZGF0YXR5cGUsIGFuZCBpbnRlcnByZXRzIHRoZSB2YWx1ZSBhcyBhIHNpbmdsZQogICAgY2hhcmFjdGVyLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgc3RyaW5nIGluaXRpYWxpemVyLCB0aGUKICAgIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUgZXhhY3RseSBvbmUgY2hhcmFjdGVyLgogCiAKIC4uIGNsYXNzOjogY19jaGFyX3AKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YGNoYXIgKmAgZGF0YXR5cGUgd2hlbiBpdCBwb2ludHMgdG8gYSB6ZXJvLXRlcm1pbmF0ZWQKKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgY2hhciAqYCBkYXRhdHlwZSB3aGVuIGl0IHBvaW50cyB0byBhIHplcm8tdGVybWluYXRlZAogICAgc3RyaW5nLiAgRm9yIGEgZ2VuZXJhbCBjaGFyYWN0ZXIgcG9pbnRlciB0aGF0IG1heSBhbHNvIHBvaW50IHRvIGJpbmFyeSBkYXRhLAogICAgYGBQT0lOVEVSKGNfY2hhcilgYCBtdXN0IGJlIHVzZWQuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBpbnRlZ2VyCiAgICBhZGRyZXNzLCBvciBhIGJ5dGVzIG9iamVjdC4KQEAgLTIxNDIsMTczICsyMTI2LDE4MCBAQAogCiAuLiBjbGFzczo6IGNfZG91YmxlCiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgOmN0eXBlOmBkb3VibGVgIGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgZG91YmxlYCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCiAgICBvcHRpb25hbCBmbG9hdCBpbml0aWFsaXplci4KIAogCiAuLiBjbGFzczo6IGNfbG9uZ2RvdWJsZQogCi0gICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgbG9uZyBkb3VibGVgIGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgbG9uZyBkb3VibGVgIGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KICAgIG9wdGlvbmFsIGZsb2F0IGluaXRpYWxpemVyLiAgT24gcGxhdGZvcm1zIHdoZXJlIGBgc2l6ZW9mKGxvbmcgZG91YmxlKSA9PQogICAgc2l6ZW9mKGRvdWJsZSlgYCBpdCBpcyBhbiBhbGlhcyB0byA6Y2xhc3M6YGNfZG91YmxlYC4KIAogLi4gY2xhc3M6OiBjX2Zsb2F0CiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgOmN0eXBlOmBmbG9hdGAgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmBmbG9hdGAgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgogICAgb3B0aW9uYWwgZmxvYXQgaW5pdGlhbGl6ZXIuCiAKIAogLi4gY2xhc3M6OiBjX2ludAogCi0gICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgc2lnbmVkIGludGAgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCiAgICBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLiAgT24gcGxhdGZvcm1zCiAgICB3aGVyZSBgYHNpemVvZihpbnQpID09IHNpemVvZihsb25nKWBgIGl0IGlzIGFuIGFsaWFzIHRvIDpjbGFzczpgY19sb25nYC4KIAogCiAuLiBjbGFzczo6IGNfaW50OAogCi0gICBSZXByZXNlbnRzIHRoZSBDIDgtYml0IDpjdHlwZTpgc2lnbmVkIGludGAgZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvcgorICAgUmVwcmVzZW50cyB0aGUgQyA4LWJpdCA6Yzp0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCiAgICA6Y2xhc3M6YGNfYnl0ZWAuCiAKIAogLi4gY2xhc3M6OiBjX2ludDE2CiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgMTYtYml0IDpjdHlwZTpgc2lnbmVkIGludGAgZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvcgorICAgUmVwcmVzZW50cyB0aGUgQyAxNi1iaXQgOmM6dHlwZTpgc2lnbmVkIGludGAgZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvcgogICAgOmNsYXNzOmBjX3Nob3J0YC4KIAogCiAuLiBjbGFzczo6IGNfaW50MzIKIAotICAgUmVwcmVzZW50cyB0aGUgQyAzMi1iaXQgOmN0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCisgICBSZXByZXNlbnRzIHRoZSBDIDMyLWJpdCA6Yzp0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCiAgICA6Y2xhc3M6YGNfaW50YC4KIAogCiAuLiBjbGFzczo6IGNfaW50NjQKIAotICAgUmVwcmVzZW50cyB0aGUgQyA2NC1iaXQgOmN0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCisgICBSZXByZXNlbnRzIHRoZSBDIDY0LWJpdCA6Yzp0eXBlOmBzaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCiAgICA6Y2xhc3M6YGNfbG9uZ2xvbmdgLgogCiAKIC4uIGNsYXNzOjogY19sb25nCiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgOmN0eXBlOmBzaWduZWQgbG9uZ2AgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmBzaWduZWQgbG9uZ2AgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgogICAgb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KIAogCiAuLiBjbGFzczo6IGNfbG9uZ2xvbmcKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHNpZ25lZCBsb25nIGxvbmdgIGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMKKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgc2lnbmVkIGxvbmcgbG9uZ2AgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cwogICAgYW4gb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KIAogCiAuLiBjbGFzczo6IGNfc2hvcnQKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHNpZ25lZCBzaG9ydGAgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmBzaWduZWQgc2hvcnRgIGRhdGF0eXBlLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4KICAgIG9wdGlvbmFsIGludGVnZXIgaW5pdGlhbGl6ZXI7IG5vIG92ZXJmbG93IGNoZWNraW5nIGlzIGRvbmUuCiAKIAogLi4gY2xhc3M6OiBjX3NpemVfdAogCi0gICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgc2l6ZV90YCBkYXRhdHlwZS4KKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgc2l6ZV90YCBkYXRhdHlwZS4KKworCisuLiBjbGFzczo6IGNfc3NpemVfdAorCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YHNzaXplX3RgIGRhdGF0eXBlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCiAuLiBjbGFzczo6IGNfdWJ5dGUKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHVuc2lnbmVkIGNoYXJgIGRhdGF0eXBlLCBpdCBpbnRlcnByZXRzIHRoZSB2YWx1ZSBhcworICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmB1bnNpZ25lZCBjaGFyYCBkYXRhdHlwZSwgaXQgaW50ZXJwcmV0cyB0aGUgdmFsdWUgYXMKICAgIHNtYWxsIGludGVnZXIuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubwogICAgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4KIAogCiAuLiBjbGFzczo6IGNfdWludAogCi0gICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgdW5zaWduZWQgaW50YCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YHVuc2lnbmVkIGludGAgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgogICAgb3B0aW9uYWwgaW50ZWdlciBpbml0aWFsaXplcjsgbm8gb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZG9uZS4gIE9uIHBsYXRmb3JtcwogICAgd2hlcmUgYGBzaXplb2YoaW50KSA9PSBzaXplb2YobG9uZylgYCBpdCBpcyBhbiBhbGlhcyBmb3IgOmNsYXNzOmBjX3Vsb25nYC4KIAogCiAuLiBjbGFzczo6IGNfdWludDgKIAotICAgUmVwcmVzZW50cyB0aGUgQyA4LWJpdCA6Y3R5cGU6YHVuc2lnbmVkIGludGAgZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvcgorICAgUmVwcmVzZW50cyB0aGUgQyA4LWJpdCA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgIGRhdGF0eXBlLiAgVXN1YWxseSBhbiBhbGlhcyBmb3IKICAgIDpjbGFzczpgY191Ynl0ZWAuCiAKIAogLi4gY2xhc3M6OiBjX3VpbnQxNgogCi0gICBSZXByZXNlbnRzIHRoZSBDIDE2LWJpdCA6Y3R5cGU6YHVuc2lnbmVkIGludGAgZGF0YXR5cGUuICBVc3VhbGx5IGFuIGFsaWFzIGZvcgorICAgUmVwcmVzZW50cyB0aGUgQyAxNi1iaXQgOmM6dHlwZTpgdW5zaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCiAgICA6Y2xhc3M6YGNfdXNob3J0YC4KIAogCiAuLiBjbGFzczo6IGNfdWludDMyCiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgMzItYml0IDpjdHlwZTpgdW5zaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCisgICBSZXByZXNlbnRzIHRoZSBDIDMyLWJpdCA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgIGRhdGF0eXBlLiAgVXN1YWxseSBhbiBhbGlhcyBmb3IKICAgIDpjbGFzczpgY191aW50YC4KIAogCiAuLiBjbGFzczo6IGNfdWludDY0CiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgNjQtYml0IDpjdHlwZTpgdW5zaWduZWQgaW50YCBkYXRhdHlwZS4gIFVzdWFsbHkgYW4gYWxpYXMgZm9yCisgICBSZXByZXNlbnRzIHRoZSBDIDY0LWJpdCA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgIGRhdGF0eXBlLiAgVXN1YWxseSBhbiBhbGlhcyBmb3IKICAgIDpjbGFzczpgY191bG9uZ2xvbmdgLgogCiAKIC4uIGNsYXNzOjogY191bG9uZwogCi0gICBSZXByZXNlbnRzIHRoZSBDIDpjdHlwZTpgdW5zaWduZWQgbG9uZ2AgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmB1bnNpZ25lZCBsb25nYCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuCiAgICBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgogCiAKIC4uIGNsYXNzOjogY191bG9uZ2xvbmcKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHVuc2lnbmVkIGxvbmcgbG9uZ2AgZGF0YXR5cGUuICBUaGUgY29uc3RydWN0b3IKKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgdW5zaWduZWQgbG9uZyBsb25nYCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvcgogICAgYWNjZXB0cyBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgogCiAKIC4uIGNsYXNzOjogY191c2hvcnQKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHVuc2lnbmVkIHNob3J0YCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YHVuc2lnbmVkIHNob3J0YCBkYXRhdHlwZS4gIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzCiAgICBhbiBvcHRpb25hbCBpbnRlZ2VyIGluaXRpYWxpemVyOyBubyBvdmVyZmxvdyBjaGVja2luZyBpcyBkb25lLgogCiAKIC4uIGNsYXNzOjogY192b2lkX3AKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YHZvaWQgKmAgdHlwZS4gIFRoZSB2YWx1ZSBpcyByZXByZXNlbnRlZCBhcyBpbnRlZ2VyLgorICAgUmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmB2b2lkICpgIHR5cGUuICBUaGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgYXMgaW50ZWdlci4KICAgIFRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIG9wdGlvbmFsIGludGVnZXIgaW5pdGlhbGl6ZXIuCiAKIAogLi4gY2xhc3M6OiBjX3djaGFyCiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgOmN0eXBlOmB3Y2hhcl90YCBkYXRhdHlwZSwgYW5kIGludGVycHJldHMgdGhlIHZhbHVlIGFzIGEKKyAgIFJlcHJlc2VudHMgdGhlIEMgOmM6dHlwZTpgd2NoYXJfdGAgZGF0YXR5cGUsIGFuZCBpbnRlcnByZXRzIHRoZSB2YWx1ZSBhcyBhCiAgICBzaW5nbGUgY2hhcmFjdGVyIHVuaWNvZGUgc3RyaW5nLiAgVGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgYW4gb3B0aW9uYWwgc3RyaW5nCiAgICBpbml0aWFsaXplciwgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIG11c3QgYmUgZXhhY3RseSBvbmUgY2hhcmFjdGVyLgogCiAKIC4uIGNsYXNzOjogY193Y2hhcl9wCiAKLSAgIFJlcHJlc2VudHMgdGhlIEMgOmN0eXBlOmB3Y2hhcl90ICpgIGRhdGF0eXBlLCB3aGljaCBtdXN0IGJlIGEgcG9pbnRlciB0byBhCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YHdjaGFyX3QgKmAgZGF0YXR5cGUsIHdoaWNoIG11c3QgYmUgYSBwb2ludGVyIHRvIGEKICAgIHplcm8tdGVybWluYXRlZCB3aWRlIGNoYXJhY3RlciBzdHJpbmcuICBUaGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbiBpbnRlZ2VyCiAgICBhZGRyZXNzLCBvciBhIHN0cmluZy4KIAogCiAuLiBjbGFzczo6IGNfYm9vbAogCi0gICBSZXByZXNlbnQgdGhlIEMgOmN0eXBlOmBib29sYCBkYXRhdHlwZSAobW9yZSBhY2N1cmF0ZWx5LCA6Y3R5cGU6YF9Cb29sYCBmcm9tCisgICBSZXByZXNlbnQgdGhlIEMgOmM6dHlwZTpgYm9vbGAgZGF0YXR5cGUgKG1vcmUgYWNjdXJhdGVseSwgOmM6dHlwZTpgX0Jvb2xgIGZyb20KICAgIEM5OSkuICBJdHMgdmFsdWUgY2FuIGJlIFRydWUgb3IgRmFsc2UsIGFuZCB0aGUgY29uc3RydWN0b3IgYWNjZXB0cyBhbnkgb2JqZWN0CiAgICB0aGF0IGhhcyBhIHRydXRoIHZhbHVlLgogCiAKIC4uIGNsYXNzOjogSFJFU1VMVAogCi0gICBXaW5kb3dzIG9ubHk6IFJlcHJlc2VudHMgYSA6Y3R5cGU6YEhSRVNVTFRgIHZhbHVlLCB3aGljaCBjb250YWlucyBzdWNjZXNzIG9yCisgICBXaW5kb3dzIG9ubHk6IFJlcHJlc2VudHMgYSA6Yzp0eXBlOmBIUkVTVUxUYCB2YWx1ZSwgd2hpY2ggY29udGFpbnMgc3VjY2VzcyBvcgogICAgZXJyb3IgaW5mb3JtYXRpb24gZm9yIGEgZnVuY3Rpb24gb3IgbWV0aG9kIGNhbGwuCiAKIAogLi4gY2xhc3M6OiBweV9vYmplY3QKIAotICAgUmVwcmVzZW50cyB0aGUgQyA6Y3R5cGU6YFB5T2JqZWN0ICpgIGRhdGF0eXBlLiAgQ2FsbGluZyB0aGlzIHdpdGhvdXQgYW4KLSAgIGFyZ3VtZW50IGNyZWF0ZXMgYSBgYE5VTExgYCA6Y3R5cGU6YFB5T2JqZWN0ICpgIHBvaW50ZXIuCisgICBSZXByZXNlbnRzIHRoZSBDIDpjOnR5cGU6YFB5T2JqZWN0ICpgIGRhdGF0eXBlLiAgQ2FsbGluZyB0aGlzIHdpdGhvdXQgYW4KKyAgIGFyZ3VtZW50IGNyZWF0ZXMgYSBgYE5VTExgYCA6Yzp0eXBlOmBQeU9iamVjdCAqYCBwb2ludGVyLgogCiBUaGUgOm1vZDpgY3R5cGVzLndpbnR5cGVzYCBtb2R1bGUgcHJvdmlkZXMgcXVpdGUgc29tZSBvdGhlciBXaW5kb3dzIHNwZWNpZmljCi1kYXRhIHR5cGVzLCBmb3IgZXhhbXBsZSA6Y3R5cGU6YEhXTkRgLCA6Y3R5cGU6YFdQQVJBTWAsIG9yIDpjdHlwZTpgRFdPUkRgLiAgU29tZQotdXNlZnVsIHN0cnVjdHVyZXMgbGlrZSA6Y3R5cGU6YE1TR2Agb3IgOmN0eXBlOmBSRUNUYCBhcmUgYWxzbyBkZWZpbmVkLgorZGF0YSB0eXBlcywgZm9yIGV4YW1wbGUgOmM6dHlwZTpgSFdORGAsIDpjOnR5cGU6YFdQQVJBTWAsIG9yIDpjOnR5cGU6YERXT1JEYC4gIFNvbWUKK3VzZWZ1bCBzdHJ1Y3R1cmVzIGxpa2UgOmM6dHlwZTpgTVNHYCBvciA6Yzp0eXBlOmBSRUNUYCBhcmUgYWxzbyBkZWZpbmVkLgogCiAKIC4uIF9jdHlwZXMtc3RydWN0dXJlZC1kYXRhLXR5cGVzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdCBiL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QKaW5kZXggNmQyYmFhMC4uMWNhMjJjOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdXJzZXMucnN0CkBAIC00OSw3ICs0OSw3IEBACiAgICAgICBUdXRvcmlhbCBtYXRlcmlhbCBvbiB1c2luZyBjdXJzZXMgd2l0aCBQeXRob24sIGJ5IEFuZHJldyBLdWNobGluZyBhbmQgRXJpYwogICAgICAgUmF5bW9uZC4KIAotICAgVGhlIDpmaWxlOmBEZW1vL2N1cnNlcy9gIGRpcmVjdG9yeSBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24gY29udGFpbnMKKyAgIFRoZSA6ZmlsZTpgVG9vbHMvZGVtby9gIGRpcmVjdG9yeSBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24gY29udGFpbnMKICAgIHNvbWUgZXhhbXBsZSBwcm9ncmFtcyB1c2luZyB0aGUgY3Vyc2VzIGJpbmRpbmdzIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdCBiL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdAppbmRleCAyNmQ5OTQ2Li5kZTlhZDQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CkBAIC0yOCwxMSArMjgsMTQgQEAKIGhhdmUgYW4gb3B0aW9uYWwgdGltZSB6b25lIGluZm9ybWF0aW9uIG1lbWJlciwgOmF0dHI6YHR6aW5mb2AsIHRoYXQgY2FuIGNvbnRhaW4KIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3Mgb2YgdGhlIGFic3RyYWN0IDpjbGFzczpgdHppbmZvYCBjbGFzcy4gIFRoZXNlCiA6Y2xhc3M6YHR6aW5mb2Agb2JqZWN0cyBjYXB0dXJlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvZmZzZXQgZnJvbSBVVEMgdGltZSwgdGhlCi10aW1lIHpvbmUgbmFtZSwgYW5kIHdoZXRoZXIgRGF5bGlnaHQgU2F2aW5nIFRpbWUgaXMgaW4gZWZmZWN0LiAgTm90ZSB0aGF0IG5vCi1jb25jcmV0ZSA6Y2xhc3M6YHR6aW5mb2AgY2xhc3NlcyBhcmUgc3VwcGxpZWQgYnkgdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUuCi1TdXBwb3J0aW5nIHRpbWV6b25lcyBhdCB3aGF0ZXZlciBsZXZlbCBvZiBkZXRhaWwgaXMgcmVxdWlyZWQgaXMgdXAgdG8gdGhlCi1hcHBsaWNhdGlvbi4gIFRoZSBydWxlcyBmb3IgdGltZSBhZGp1c3RtZW50IGFjcm9zcyB0aGUgd29ybGQgYXJlIG1vcmUgcG9saXRpY2FsCi10aGFuIHJhdGlvbmFsLCBhbmQgdGhlcmUgaXMgbm8gc3RhbmRhcmQgc3VpdGFibGUgZm9yIGV2ZXJ5IGFwcGxpY2F0aW9uLgordGltZSB6b25lIG5hbWUsIGFuZCB3aGV0aGVyIERheWxpZ2h0IFNhdmluZyBUaW1lIGlzIGluIGVmZmVjdC4gIE5vdGUgdGhhdCBvbmx5CitvbmUgY29uY3JldGUgOmNsYXNzOmB0emluZm9gIGNsYXNzLCB0aGUgOmNsYXNzOmB0aW1lem9uZWAgY2xhc3MsIGlzIHN1cHBsaWVkIGJ5IHRoZQorOm1vZDpgZGF0ZXRpbWVgIG1vZHVsZS4gIFRoZSA6Y2xhc3M6YHRpbWV6b25lYCBjbGFzcyBjYW4gcmVwcnNlbnQgc2ltcGxlCit0aW1lem9uZXMgd2l0aCBmaXhlZCBvZmZzZXQgZnJvbSBVVEMgc3VjaCBhcyBVVEMgaXRzZWxmIG9yIE5vcnRoIEFtZXJpY2FuIEVTVCBhbmQKK0VEVCB0aW1lem9uZXMuICBTdXBwb3J0aW5nIHRpbWV6b25lcyBhdCB3aGF0ZXZlciBsZXZlbCBvZiBkZXRhaWwgaXMKK3JlcXVpcmVkIGlzIHVwIHRvIHRoZSBhcHBsaWNhdGlvbi4gIFRoZSBydWxlcyBmb3IgdGltZSBhZGp1c3RtZW50IGFjcm9zcyB0aGUKK3dvcmxkIGFyZSBtb3JlIHBvbGl0aWNhbCB0aGFuIHJhdGlvbmFsLCBjaGFuZ2UgZnJlcXVlbnRseSwgYW5kIHRoZXJlIGlzIG5vCitzdGFuZGFyZCBzdWl0YWJsZSBmb3IgZXZlcnkgYXBwbGljYXRpb24gYXNpZGUgZnJvbSBVVEMuCiAKIFRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBjb25zdGFudHM6CiAKQEAgLTk5LDYgKzEwMiwxNCBAQAogICAgdGltZSBhZGp1c3RtZW50IChmb3IgZXhhbXBsZSwgdG8gYWNjb3VudCBmb3IgdGltZSB6b25lIGFuZC9vciBkYXlsaWdodCBzYXZpbmcKICAgIHRpbWUpLgogCisuLiBjbGFzczo6IHRpbWV6b25lCisKKyAgIEEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSA6Y2xhc3M6YHR6aW5mb2AgYWJzdHJhY3QgYmFzZSBjbGFzcyBhcyBhCisgICBmaXhlZCBvZmZzZXQgZnJvbSB0aGUgVVRDLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiBPYmplY3RzIG9mIHRoZXNlIHR5cGVzIGFyZSBpbW11dGFibGUuCiAKIE9iamVjdHMgb2YgdGhlIDpjbGFzczpgZGF0ZWAgdHlwZSBhcmUgYWx3YXlzIG5haXZlLgpAQCAtMTE2LDYgKzEyNyw3IEBACiAgICBvYmplY3QKICAgICAgICB0aW1lZGVsdGEKICAgICAgICB0emluZm8KKyAgICAgICAgICAgdGltZXpvbmUKICAgICAgICB0aW1lCiAgICAgICAgZGF0ZQogICAgICAgICAgICBkYXRldGltZQpAQCAtMjIwLDggKzIzMiwyOCBAQAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBJbiBnZW5lcmFsLCAqdDEqIFwqIGkgPT0gKnQxKiBcKiAoaS0xKSArICp0MSogfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpcyB0cnVlLiAoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYHQxID0gdDIgLy8gaWBgICAgICAgICAgICAgICAgfCBUaGUgZmxvb3IgaXMgY29tcHV0ZWQgYW5kIHRoZSByZW1haW5kZXIgKGlmICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbnkpIGlzIHRocm93biBhd2F5LiAoMykgICAgICAgICAgICAgICAgICAgICAgfAorfCBgYHQxID0gdDIgKiBmIG9yIHQxID0gZiAqIHQyYGAgfCBEZWx0YSBtdWx0aXBsaWVkIGJ5IGEgZmxvYXQuIFRoZSByZXN1bHQgaXMgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aW1lZGVsdGEucmVzb2x1dGlvbiB1c2luZyByb3VuZC1oYWxmLXRvLWV2ZW4ufAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYGYgPSB0MiAvIHQzYGAgICAgICAgICAgICAgICAgfCBEaXZpc2lvbiAoMykgb2YgKnQyKiBieSAqdDMqLiAgUmV0dXJucyBhICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YGZsb2F0YCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYHQxID0gdDIgLyBmIG9yIHQxID0gdDIgLyBpYGAgfCBEZWx0YSBkaXZpZGVkIGJ5IGEgZmxvYXQgb3IgYW4gaW50LiBUaGUgcmVzdWx0fAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aW1lZGVsdGEucmVzb2x1dGlvbiB1c2luZyByb3VuZC1oYWxmLXRvLWV2ZW4ufAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYHQxID0gdDIgLy8gaWBgIG9yICAgICAgICAgICAgfCBUaGUgZmxvb3IgaXMgY29tcHV0ZWQgYW5kIHRoZSByZW1haW5kZXIgKGlmICAgfAorfCBgYHQxID0gdDIgLy8gdDNgYCAgICAgICAgICAgICAgfCBhbnkpIGlzIHRocm93biBhd2F5LiAgSW4gdGhlIHNlY29uZCBjYXNlLCBhbiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnRlZ2VyIGlzIHJldHVybmVkLiAoMykgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYHQxID0gdDIgJSB0M2BgICAgICAgICAgICAgICAgfCBUaGUgcmVtYWluZGVyIGlzIGNvbXB1dGVkIGFzIGEgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YHRpbWVkZWx0YWAgb2JqZWN0LiAoMykgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYHEsIHIgPSBkaXZtb2QodDEsIHQyKWBgICAgICAgfCBDb21wdXRlcyB0aGUgcXVvdGllbnQgYW5kIHRoZSByZW1haW5kZXI6ICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHEgPSB0MSAvLyB0MmBgICgzKSBhbmQgYGByID0gdDEgJSB0MmBgLiAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBxIGlzIGFuIGludGVnZXIgYW5kIHIgaXMgYSA6Y2xhc3M6YHRpbWVkZWx0YWAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvYmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBgYCt0MWBgICAgICAgICAgICAgICAgICAgICAgICAgfCBSZXR1cm5zIGEgOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdCB3aXRoIHRoZSAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzYW1lIHZhbHVlLiAoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMjcwLDYgKzMwMiwxMyBAQAogY2VydGFpbiBhZGRpdGlvbnMgYW5kIHN1YnRyYWN0aW9ucyB3aXRoIDpjbGFzczpgZGF0ZWAgYW5kIDpjbGFzczpgZGF0ZXRpbWVgCiBvYmplY3RzIChzZWUgYmVsb3cpLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgRmxvb3IgZGl2aXNpb24gYW5kIHRydWUgZGl2aXNpb24gb2YgYSA6Y2xhc3M6YHRpbWVkZWx0YWAgb2JqZWN0IGJ5IGFub3RoZXIKKyAgIDpjbGFzczpgdGltZWRlbHRhYCBvYmplY3QgYXJlIG5vdyBzdXBwb3J0ZWQsIGFzIGFyZSByZW1haW5kZXIgb3BlcmF0aW9ucyBhbmQKKyAgIHRoZSA6ZnVuYzpgZGl2bW9kYCBmdW5jdGlvbi4gIFRydWUgZGl2aXNpb24gYW5kIG11bHRpcGxpY2F0aW9uIG9mIGEKKyAgIDpjbGFzczpgdGltZWRlbHRhYCBvYmplY3QgYnkgYSA6Y2xhc3M6YGZsb2F0YCBvYmplY3QgYXJlIG5vdyBzdXBwb3J0ZWQuCisKKwogQ29tcGFyaXNvbnMgb2YgOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdHMgYXJlIHN1cHBvcnRlZCB3aXRoIHRoZQogOmNsYXNzOmB0aW1lZGVsdGFgIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHNtYWxsZXIgZHVyYXRpb24gY29uc2lkZXJlZCB0byBiZSB0aGUKIHNtYWxsZXIgdGltZWRlbHRhLiBJbiBvcmRlciB0byBzdG9wIG1peGVkLXR5cGUgY29tcGFyaXNvbnMgZnJvbSBmYWxsaW5nIGJhY2sgdG8KQEAgLTI4MiwxMiArMzIxLDI3IEBACiBlZmZpY2llbnQgcGlja2xpbmcsIGFuZCBpbiBCb29sZWFuIGNvbnRleHRzLCBhIDpjbGFzczpgdGltZWRlbHRhYCBvYmplY3QgaXMKIGNvbnNpZGVyZWQgdG8gYmUgdHJ1ZSBpZiBhbmQgb25seSBpZiBpdCBpc24ndCBlcXVhbCB0byBgYHRpbWVkZWx0YSgwKWBgLgogCitJbnN0YW5jZSBtZXRob2RzOgorCisuLiBtZXRob2Q6OiB0aW1lZGVsdGEudG90YWxfc2Vjb25kcygpCisKKyAgIFJldHVybiB0aGUgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMgY29udGFpbmVkIGluIHRoZSBkdXJhdGlvbi4gRXF1aXZhbGVudCB0bworICAgYGB0ZCAvIHRpbWVkZWx0YShzZWNvbmRzPTEpYGAuCisKKyAgIE5vdGUgdGhhdCBmb3IgdmVyeSBsYXJnZSB0aW1lIGludGVydmFscyAoZ3JlYXRlciB0aGFuIDI3MCB5ZWFycyBvbgorICAgbW9zdCBwbGF0Zm9ybXMpIHRoaXMgbWV0aG9kIHdpbGwgbG9zZSBtaWNyb3NlY29uZCBhY2N1cmFjeS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogRXhhbXBsZSB1c2FnZToKIAogICAgID4+PiBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKICAgICA+Pj4geWVhciA9IHRpbWVkZWx0YShkYXlzPTM2NSkKICAgICA+Pj4gYW5vdGhlcl95ZWFyID0gdGltZWRlbHRhKHdlZWtzPTQwLCBkYXlzPTg0LCBob3Vycz0yMywKICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM9NTAsIHNlY29uZHM9NjAwKSAgIyBhZGRzIHVwIHRvIDM2NSBkYXlzCisgICAgPj4+IHllYXIudG90YWxfc2Vjb25kcygpCisgICAgMzE1MzYwMDAuMAogICAgID4+PiB5ZWFyID09IGFub3RoZXJfeWVhcgogICAgIFRydWUKICAgICA+Pj4gdGVuX3llYXJzID0gMTAgKiB5ZWFyCkBAIC0zNDIsNyArMzk2LDcgQEAKIAogICAgUmV0dXJuIHRoZSBsb2NhbCBkYXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBPU0lYIHRpbWVzdGFtcCwgc3VjaCBhcyBpcyByZXR1cm5lZAogICAgYnkgOmZ1bmM6YHRpbWUudGltZWAuICBUaGlzIG1heSByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCwgaWYgdGhlIHRpbWVzdGFtcCBpcyBvdXQKLSAgIG9mIHRoZSByYW5nZSBvZiB2YWx1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSBDIDpjZnVuYzpgbG9jYWx0aW1lYCBmdW5jdGlvbi4KKyAgIG9mIHRoZSByYW5nZSBvZiB2YWx1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSBDIDpjOmZ1bmM6YGxvY2FsdGltZWAgZnVuY3Rpb24uCiAgICBJdCdzIGNvbW1vbiBmb3IgdGhpcyB0byBiZSByZXN0cmljdGVkIHRvIHllYXJzIGZyb20gMTk3MCB0aHJvdWdoIDIwMzguICBOb3RlCiAgICB0aGF0IG9uIG5vbi1QT1NJWCBzeXN0ZW1zIHRoYXQgaW5jbHVkZSBsZWFwIHNlY29uZHMgaW4gdGhlaXIgbm90aW9uIG9mIGEKICAgIHRpbWVzdGFtcCwgbGVhcCBzZWNvbmRzIGFyZSBpZ25vcmVkIGJ5IDptZXRoOmBmcm9tdGltZXN0YW1wYC4KQEAgLTUxNiw3ICs1NzAsNyBAQAogICAgUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZGF0ZSwgZm9yIGV4YW1wbGUgYGBkYXRlKDIwMDIsIDEyLAogICAgNCkuY3RpbWUoKSA9PSAnV2VkIERlYyA0IDAwOjAwOjAwIDIwMDInYGAuIGBgZC5jdGltZSgpYGAgaXMgZXF1aXZhbGVudCB0bwogICAgYGB0aW1lLmN0aW1lKHRpbWUubWt0aW1lKGQudGltZXR1cGxlKCkpKWBgIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgbmF0aXZlIEMKLSAgIDpjZnVuYzpgY3RpbWVgIGZ1bmN0aW9uICh3aGljaCA6ZnVuYzpgdGltZS5jdGltZWAgaW52b2tlcywgYnV0IHdoaWNoCisgICA6YzpmdW5jOmBjdGltZWAgZnVuY3Rpb24gKHdoaWNoIDpmdW5jOmB0aW1lLmN0aW1lYCBpbnZva2VzLCBidXQgd2hpY2gKICAgIDptZXRoOmBkYXRlLmN0aW1lYCBkb2VzIG5vdCBpbnZva2UpIGNvbmZvcm1zIHRvIHRoZSBDIHN0YW5kYXJkLgogCiAKQEAgLTYyMyw3ICs2NzcsNyBAQAogICAgb3Igbm90IHNwZWNpZmllZCwgdGhpcyBpcyBsaWtlIDptZXRoOmB0b2RheWAsIGJ1dCwgaWYgcG9zc2libGUsIHN1cHBsaWVzIG1vcmUKICAgIHByZWNpc2lvbiB0aGFuIGNhbiBiZSBnb3R0ZW4gZnJvbSBnb2luZyB0aHJvdWdoIGEgOmZ1bmM6YHRpbWUudGltZWAgdGltZXN0YW1wCiAgICAoZm9yIGV4YW1wbGUsIHRoaXMgbWF5IGJlIHBvc3NpYmxlIG9uIHBsYXRmb3JtcyBzdXBwbHlpbmcgdGhlIEMKLSAgIDpjZnVuYzpgZ2V0dGltZW9mZGF5YCBmdW5jdGlvbikuCisgICA6YzpmdW5jOmBnZXR0aW1lb2ZkYXlgIGZ1bmN0aW9uKS4KIAogICAgRWxzZSAqdHoqIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyA6Y2xhc3M6YHR6aW5mb2Agc3ViY2xhc3MsIGFuZCB0aGUKICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBhcmUgY29udmVydGVkIHRvICp0eioncyB0aW1lIHpvbmUuICBJbiB0aGlzIGNhc2UgdGhlCkBAIC02MzUsOCArNjg5LDggQEAKIAogICAgUmV0dXJuIHRoZSBjdXJyZW50IFVUQyBkYXRlIGFuZCB0aW1lLCB3aXRoIDphdHRyOmB0emluZm9gIGBgTm9uZWBgLiBUaGlzIGlzIGxpa2UKICAgIDptZXRoOmBub3dgLCBidXQgcmV0dXJucyB0aGUgY3VycmVudCBVVEMgZGF0ZSBhbmQgdGltZSwgYXMgYSBuYWl2ZQotICAgOmNsYXNzOmBkYXRldGltZWAgb2JqZWN0LiBTZWUgYWxzbyA6bWV0aDpgbm93YC4KLQorICAgOmNsYXNzOmBkYXRldGltZWAgb2JqZWN0LiAgQW4gYXdhcmUgY3VycmVudCBVVEMgZGF0ZXRpbWUgY2FuIGJlIG9idGFpbmVkIGJ5CisgICBjYWxsaW5nIGBgZGF0ZXRpbWUubm93KHRpbWV6b25lLnV0YylgYC4gIFNlZSBhbHNvIDptZXRoOmBub3dgLgogCiAuLiBjbGFzc21ldGhvZDo6IGRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXN0YW1wLCB0ej1Ob25lKQogCkBAIC02NTEsOCArNzA1LDggQEAKICAgIGBgdHouZnJvbXV0YyhkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHRpbWVzdGFtcCkucmVwbGFjZSh0emluZm89dHopKWBgLgogCiAgICA6bWV0aDpgZnJvbXRpbWVzdGFtcGAgbWF5IHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgLCBpZiB0aGUgdGltZXN0YW1wIGlzIG91dCBvZgotICAgdGhlIHJhbmdlIG9mIHZhbHVlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIEMgOmNmdW5jOmBsb2NhbHRpbWVgIG9yCi0gICA6Y2Z1bmM6YGdtdGltZWAgZnVuY3Rpb25zLiAgSXQncyBjb21tb24gZm9yIHRoaXMgdG8gYmUgcmVzdHJpY3RlZCB0byB5ZWFycyBpbgorICAgdGhlIHJhbmdlIG9mIHZhbHVlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIEMgOmM6ZnVuYzpgbG9jYWx0aW1lYCBvcgorICAgOmM6ZnVuYzpgZ210aW1lYCBmdW5jdGlvbnMuICBJdCdzIGNvbW1vbiBmb3IgdGhpcyB0byBiZSByZXN0cmljdGVkIHRvIHllYXJzIGluCiAgICAxOTcwIHRocm91Z2ggMjAzOC4gTm90ZSB0aGF0IG9uIG5vbi1QT1NJWCBzeXN0ZW1zIHRoYXQgaW5jbHVkZSBsZWFwIHNlY29uZHMgaW4KICAgIHRoZWlyIG5vdGlvbiBvZiBhIHRpbWVzdGFtcCwgbGVhcCBzZWNvbmRzIGFyZSBpZ25vcmVkIGJ5IDptZXRoOmBmcm9tdGltZXN0YW1wYCwKICAgIGFuZCB0aGVuIGl0J3MgcG9zc2libGUgdG8gaGF2ZSB0d28gdGltZXN0YW1wcyBkaWZmZXJpbmcgYnkgYSBzZWNvbmQgdGhhdCB5aWVsZApAQCAtNjYzLDcgKzcxNyw3IEBACiAKICAgIFJldHVybiB0aGUgVVRDIDpjbGFzczpgZGF0ZXRpbWVgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFBPU0lYIHRpbWVzdGFtcCwgd2l0aAogICAgOmF0dHI6YHR6aW5mb2AgYGBOb25lYGAuIFRoaXMgbWF5IHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgLCBpZiB0aGUgdGltZXN0YW1wIGlzCi0gICBvdXQgb2YgdGhlIHJhbmdlIG9mIHZhbHVlcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtIEMgOmNmdW5jOmBnbXRpbWVgIGZ1bmN0aW9uLgorICAgb3V0IG9mIHRoZSByYW5nZSBvZiB2YWx1ZXMgc3VwcG9ydGVkIGJ5IHRoZSBwbGF0Zm9ybSBDIDpjOmZ1bmM6YGdtdGltZWAgZnVuY3Rpb24uCiAgICBJdCdzIGNvbW1vbiBmb3IgdGhpcyB0byBiZSByZXN0cmljdGVkIHRvIHllYXJzIGluIDE5NzAgdGhyb3VnaCAyMDM4LiBTZWUgYWxzbwogICAgOm1ldGg6YGZyb210aW1lc3RhbXBgLgogCkBAIC05MjcsNyArOTgxLDcgQEAKICAgIG9mIHRoZSByZXN1bHQgaXMgc2V0IGFjY29yZGluZyB0byB0aGUgOm1ldGg6YGRzdGAgbWV0aG9kOiA6YXR0cjpgdHppbmZvYCBpcwogICAgYGBOb25lYGAgb3IgOm1ldGg6YGRzdGAgcmV0dXJucyBgYE5vbmVgYCwgOmF0dHI6YHRtX2lzZHN0YCBpcyBzZXQgdG8gYGAtMWBgOwogICAgZWxzZSBpZiA6bWV0aDpgZHN0YCByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIDphdHRyOmB0bV9pc2RzdGAgaXMgc2V0IHRvIGBgMWBgOwotICAgZWxzZSBgYHRtX2lzZHN0YGAgaXMgc2V0IHRvIGBgMGBgLgorICAgZWxzZSA6YXR0cjpgdG1faXNkc3RgIGlzIHNldCB0byBgYDBgYC4KIAogCiAuLiBtZXRob2Q6OiBkYXRldGltZS51dGN0aW1ldHVwbGUoKQpAQCAtOTM3LDEwICs5OTEsMTAgQEAKICAgIGBgZC5kc3QoKWBgIHJldHVybnMuICBEU1QgaXMgbmV2ZXIgaW4gZWZmZWN0IGZvciBhIFVUQyB0aW1lLgogCiAgICBJZiAqZCogaXMgYXdhcmUsICpkKiBpcyBub3JtYWxpemVkIHRvIFVUQyB0aW1lLCBieSBzdWJ0cmFjdGluZwotICAgYGBkLnV0Y29mZnNldCgpYGAsIGFuZCBhIDpjbGFzczpgdGltZS5zdHJ1Y3RfdGltZWAgZm9yIHRoZSBub3JtYWxpemVkIHRpbWUgaXMKLSAgIHJldHVybmVkLiAgOmF0dHI6YHRtX2lzZHN0YCBpcyBmb3JjZWQgdG8gMC4gTm90ZSB0aGF0IHRoZSByZXN1bHQncwotICAgOmF0dHI6YHRtX3llYXJgIG1lbWJlciBtYXkgYmUgOmNvbnN0OmBNSU5ZRUFSYFwgLTEgb3IgOmNvbnN0OmBNQVhZRUFSYFwgKzEsIGlmCi0gICAqZCoueWVhciB3YXMgYGBNSU5ZRUFSYGAgb3IgYGBNQVhZRUFSYGAgYW5kIFVUQyBhZGp1c3RtZW50IHNwaWxscyBvdmVyIGEgeWVhcgorICAgYGBkLnV0Y29mZnNldCgpYGAsIGFuZCBhIDpjbGFzczpgdGltZS5zdHJ1Y3RfdGltZWAgZm9yIHRoZQorICAgbm9ybWFsaXplZCB0aW1lIGlzIHJldHVybmVkLiAgOmF0dHI6YHRtX2lzZHN0YCBpcyBmb3JjZWQgdG8gMC4gTm90ZQorICAgdGhhdCBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBtYXkgYmUgcmFpc2VkIGlmICpkKi55ZWFyIHdhcworICAgYGBNSU5ZRUFSYGAgb3IgYGBNQVhZRUFSYGAgYW5kIFVUQyBhZGp1c3RtZW50IHNwaWxscyBvdmVyIGEgeWVhcgogICAgYm91bmRhcnkuCiAKIApAQCAtMTAwMiw3ICsxMDU2LDcgQEAKICAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRhdGUgYW5kIHRpbWUsIGZvciBleGFtcGxlIGBgZGF0ZXRpbWUoMjAwMiwgMTIsCiAgICA0LCAyMCwgMzAsIDQwKS5jdGltZSgpID09ICdXZWQgRGVjICA0IDIwOjMwOjQwIDIwMDInYGAuIGBgZC5jdGltZSgpYGAgaXMKICAgIGVxdWl2YWxlbnQgdG8gYGB0aW1lLmN0aW1lKHRpbWUubWt0aW1lKGQudGltZXR1cGxlKCkpKWBgIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUKLSAgIG5hdGl2ZSBDIDpjZnVuYzpgY3RpbWVgIGZ1bmN0aW9uICh3aGljaCA6ZnVuYzpgdGltZS5jdGltZWAgaW52b2tlcywgYnV0IHdoaWNoCisgICBuYXRpdmUgQyA6YzpmdW5jOmBjdGltZWAgZnVuY3Rpb24gKHdoaWNoIDpmdW5jOmB0aW1lLmN0aW1lYCBpbnZva2VzLCBidXQgd2hpY2gKICAgIDptZXRoOmBkYXRldGltZS5jdGltZWAgZG9lcyBub3QgaW52b2tlKSBjb25mb3JtcyB0byB0aGUgQyBzdGFuZGFyZC4KIAogCkBAIC0xMjkzLDggKzEzNDcsMTAgQEAKIDpjbGFzczpgdHppbmZvYCBpcyBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzLCBtZWFuaW5nIHRoYXQgdGhpcyBjbGFzcyBzaG91bGQgbm90IGJlCiBpbnN0YW50aWF0ZWQgZGlyZWN0bHkuICBZb3UgbmVlZCB0byBkZXJpdmUgYSBjb25jcmV0ZSBzdWJjbGFzcywgYW5kIChhdCBsZWFzdCkKIHN1cHBseSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHN0YW5kYXJkIDpjbGFzczpgdHppbmZvYCBtZXRob2RzIG5lZWRlZCBieSB0aGUKLTpjbGFzczpgZGF0ZXRpbWVgIG1ldGhvZHMgeW91IHVzZS4gIFRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlIGRvZXMgbm90IHN1cHBseQotYW55IGNvbmNyZXRlIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB0emluZm9gLgorOmNsYXNzOmBkYXRldGltZWAgbWV0aG9kcyB5b3UgdXNlLiAgVGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgc3VwcGxpZXMKK2Egc2ltcGxlIGNvbmNyZXRlIHN1YmNsYXNzIG9mIDpjbGFzczpgdHppbmZvYCA6Y2xhc3M6YHRpbWV6b25lYCB3aGljaCBjYW4gcmVwcnNlbnQKK3RpbWV6b25lcyB3aXRoIGZpeGVkIG9mZnNldCBmcm9tIFVUQyBzdWNoIGFzIFVUQyBpdHNlbGYgb3IgTm9ydGggQW1lcmljYW4gRVNUIGFuZAorRURULgogCiBBbiBpbnN0YW5jZSBvZiAoYSBjb25jcmV0ZSBzdWJjbGFzcyBvZikgOmNsYXNzOmB0emluZm9gIGNhbiBiZSBwYXNzZWQgdG8gdGhlCiBjb25zdHJ1Y3RvcnMgZm9yIDpjbGFzczpgZGF0ZXRpbWVgIGFuZCA6Y2xhc3M6YHRpbWVgIG9iamVjdHMuIFRoZSBsYXR0ZXIgb2JqZWN0cwpAQCAtMTMxMiw3ICsxMzY4LDcgQEAKIDptb2Q6YGRhdGV0aW1lYCBvYmplY3RzLiAgSWYgaW4gZG91YnQsIHNpbXBseSBpbXBsZW1lbnQgYWxsIG9mIHRoZW0uCiAKIAotLi4gbWV0aG9kOjogdHppbmZvLnV0Y29mZnNldChzZWxmLCBkdCkKKy4uIG1ldGhvZDo6IHR6aW5mby51dGNvZmZzZXQoZHQpCiAKICAgIFJldHVybiBvZmZzZXQgb2YgbG9jYWwgdGltZSBmcm9tIFVUQywgaW4gbWludXRlcyBlYXN0IG9mIFVUQy4gIElmIGxvY2FsIHRpbWUgaXMKICAgIHdlc3Qgb2YgVVRDLCB0aGlzIHNob3VsZCBiZSBuZWdhdGl2ZS4gIE5vdGUgdGhhdCB0aGlzIGlzIGludGVuZGVkIHRvIGJlIHRoZQpAQCAtMTMzNCw3ICsxMzkwLDcgQEAKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAKLS4uIG1ldGhvZDo6IHR6aW5mby5kc3Qoc2VsZiwgZHQpCisuLiBtZXRob2Q6OiB0emluZm8uZHN0KGR0KQogCiAgICBSZXR1cm4gdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIChEU1QpIGFkanVzdG1lbnQsIGluIG1pbnV0ZXMgZWFzdCBvZiBVVEMsIG9yCiAgICBgYE5vbmVgYCBpZiBEU1QgaW5mb3JtYXRpb24gaXNuJ3Qga25vd24uICBSZXR1cm4gYGB0aW1lZGVsdGEoMClgYCBpZiBEU1QgaXMgbm90CkBAIC0xMzgyLDcgKzE0MzgsNyBAQAogICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGRzdGAgcmFpc2VzIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAKLS4uIG1ldGhvZDo6IHR6aW5mby50em5hbWUoc2VsZiwgZHQpCisuLiBtZXRob2Q6OiB0emluZm8udHpuYW1lKGR0KQogCiAgICBSZXR1cm4gdGhlIHRpbWUgem9uZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDpjbGFzczpgZGF0ZXRpbWVgIG9iamVjdCAqZHQqLCBhcwogICAgYSBzdHJpbmcuIE5vdGhpbmcgYWJvdXQgc3RyaW5nIG5hbWVzIGlzIGRlZmluZWQgYnkgdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUsCkBAIC0xNDE4LDcgKzE0NzQsNyBAQAogVGhlcmUgaXMgb25lIG1vcmUgOmNsYXNzOmB0emluZm9gIG1ldGhvZCB0aGF0IGEgc3ViY2xhc3MgbWF5IHdpc2ggdG8gb3ZlcnJpZGU6CiAKIAotLi4gbWV0aG9kOjogdHppbmZvLmZyb211dGMoc2VsZiwgZHQpCisuLiBtZXRob2Q6OiB0emluZm8uZnJvbXV0YyhkdCkKIAogICAgVGhpcyBpcyBjYWxsZWQgZnJvbSB0aGUgZGVmYXVsdCA6Y2xhc3M6YGRhdGV0aW1lLmFzdGltZXpvbmUoKWAgaW1wbGVtZW50YXRpb24uCiAgICBXaGVuIGNhbGxlZCBmcm9tIHRoYXQsIGBgZHQudHppbmZvYGAgaXMgKnNlbGYqLCBhbmQgKmR0KidzIGRhdGUgYW5kIHRpbWUgbWVtYmVycwpAQCAtMTQ5NSw5ICsxNTUxLDY1IEBACiBzdGFuZGFyZCBsb2NhbCB0aW1lLgogCiBBcHBsaWNhdGlvbnMgdGhhdCBjYW4ndCBiZWFyIHN1Y2ggYW1iaWd1aXRpZXMgc2hvdWxkIGF2b2lkIHVzaW5nIGh5YnJpZAotOmNsYXNzOmB0emluZm9gIHN1YmNsYXNzZXM7IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyB3aGVuIHVzaW5nIFVUQywgb3IgYW55Ci1vdGhlciBmaXhlZC1vZmZzZXQgOmNsYXNzOmB0emluZm9gIHN1YmNsYXNzIChzdWNoIGFzIGEgY2xhc3MgcmVwcmVzZW50aW5nIG9ubHkKLUVTVCAoZml4ZWQgb2Zmc2V0IC01IGhvdXJzKSwgb3Igb25seSBFRFQgKGZpeGVkIG9mZnNldCAtNCBob3VycykpLgorOmNsYXNzOmB0emluZm9gIHN1YmNsYXNzZXM7IHRoZXJlIGFyZSBubyBhbWJpZ3VpdGllcyB3aGVuIHVzaW5nIDpjbGFzczpgdGltZXpvbmVgLAorb3IgYW55IG90aGVyIGZpeGVkLW9mZnNldCA6Y2xhc3M6YHR6aW5mb2Agc3ViY2xhc3MgKHN1Y2ggYXMgYSBjbGFzcyByZXByZXNlbnRpbmcKK29ubHkgRVNUIChmaXhlZCBvZmZzZXQgLTUgaG91cnMpLCBvciBvbmx5IEVEVCAoZml4ZWQgb2Zmc2V0IC00IGhvdXJzKSkuCisKKworLi4gX2RhdGV0aW1lLXRpbWV6b25lOgorCis6Y2xhc3M6YHRpbWV6b25lYCBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIDpjbGFzczpgdGltZXpvbmVgIG9iamVjdCByZXByZXNlbnRzIGEgdGltZXpvbmUgdGhhdCBpcyBkZWZpbmVkIGJ5IGEKK2ZpeGVkIG9mZnNldCBmcm9tIFVUQy4gIE5vdGUgdGhhdCBvYmplY3RzIG9mIHRoaXMgY2xhc3MgY2Fubm90IGJlIHVzZWQKK3RvIHJlcHJlc2VudCB0aW1lem9uZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9jYXRpb25zIHdoZXJlIGRpZmZlcmVudAorb2Zmc2V0cyBhcmUgdXNlZCBpbiBkaWZmZXJlbnQgZGF5cyBvZiB0aGUgeWVhciBvciB3aGVyZSBoaXN0b3JpY2FsCitjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIGNpdmlsIHRpbWUuCisKKworLi4gY2xhc3M6OiB0aW1lem9uZShvZmZzZXRbLCBuYW1lXSkKKworICBUaGUgKm9mZnNldCogYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSA6Y2xhc3M6YHRpbWVkZWx0YWAKKyAgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBsb2NhbCB0aW1lIGFuZCBVVEMuICBJdCBtdXN0CisgIGJlIHN0cmljdGx5IGJldHdlZW4gYGAtdGltZWRlbHRhKGhvdXJzPTI0KWBgIGFuZAorICBgYHRpbWVkZWx0YShob3Vycz0yNClgYCBhbmQgcmVwcmVzZW50IGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMsCisgIG90aGVyd2lzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCisKKyAgVGhlICpuYW1lKiBhcmd1bWVudCBpcyBvcHRpb25hbC4gIElmIHNwZWNpZmllZCBpdCBtdXN0IGJlIGEgc3RyaW5nIHRoYXQKKyAgaXMgdXNlZCBhcyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGBgdHpuYW1lKGR0KWBgIG1ldGhvZC4gIE90aGVyd2lzZSwKKyAgYGB0em5hbWUoZHQpYGAgcmV0dXJucyBhIHN0cmluZyAnVVRDc0hIOk1NJywgd2hlcmUgcyBpcyB0aGUgc2lnbiBvZgorICAqb2Zmc2V0KiwgSEggYW5kIE1NIGFyZSB0d28gZGlnaXRzIG9mIGBgb2Zmc2V0LmhvdXJzYGAgYW5kCisgIGBgb2Zmc2V0Lm1pbnV0ZXNgYCByZXNwZWN0aXZlbHkuCisKKy4uIG1ldGhvZDo6IHRpbWV6b25lLnV0Y29mZnNldChkdCkKKworICBSZXR1cm4gdGhlIGZpeGVkIHZhbHVlIHNwZWNpZmllZCB3aGVuIHRoZSA6Y2xhc3M6YHRpbWV6b25lYCBpbnN0YW5jZSBpcworICBjb25zdHJ1Y3RlZC4gIFRoZSAqZHQqIGFyZ3VtZW50IGlzIGlnbm9yZWQuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEKKyAgOmNsYXNzOmB0aW1lZGVsdGFgIGluc3RhbmNlIGVxdWFsIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlCisgIGxvY2FsIHRpbWUgYW5kIFVUQy4KKworLi4gbWV0aG9kOjogdGltZXpvbmUudHpuYW1lKGR0KQorCisgIFJldHVybiB0aGUgZml4ZWQgdmFsdWUgc3BlY2lmaWVkIHdoZW4gdGhlIDpjbGFzczpgdGltZXpvbmVgIGluc3RhbmNlIGlzCisgIGNvbnN0cnVjdGVkIG9yIGEgc3RyaW5nICdVVENzSEg6TU0nLCB3aGVyZSBzIGlzIHRoZSBzaWduIG9mCisgICpvZmZzZXQqLCBISCBhbmQgTU0gYXJlIHR3byBkaWdpdHMgb2YgYGBvZmZzZXQuaG91cnNgYCBhbmQKKyAgYGBvZmZzZXQubWludXRlc2BgIHJlc3BlY3RpdmVseS4KKworLi4gbWV0aG9kOjogdGltZXpvbmUuZHN0KGR0KQorCisgIEFsd2F5cyByZXR1cm5zIGBgTm9uZWBgLgorCisuLiBtZXRob2Q6OiB0aW1lem9uZS5mcm9tdXRjKGR0KQorCisgIFJldHVybiBgYGR0ICsgb2Zmc2V0YGAuICBUaGUgKmR0KiBhcmd1bWVudCBtdXN0IGJlIGFuIGF3YXJlCisgIDpjbGFzczpgZGF0ZXRpbWVgIGluc3RhbmNlLCB3aXRoIGBgdHppbmZvYGAgc2V0IHRvIGBgc2VsZmBgLgorCitDbGFzcyBhdHRyaWJ1dGVzOgorCisuLiBhdHRyaWJ1dGU6OiB0aW1lem9uZS51dGMKKworICAgVGhlIFVUQyB0aW1lem9uZSwgYGB0aW1lem9uZSh0aW1lZGVsdGEoMCkpYGAuCiAKIAogLi4gX3N0cmZ0aW1lLXN0cnB0aW1lLWJlaGF2aW9yOgpAQCAtMTU0OSw5ICsxNjYxLDYgQEAKIGltcGxlbWVudGF0aW9uLiAgTm90ZSB0aGF0IHRoZSAxOTk5IHZlcnNpb24gb2YgdGhlIEMgc3RhbmRhcmQgYWRkZWQgYWRkaXRpb25hbAogZm9ybWF0IGNvZGVzLgogCi1UaGUgZXhhY3QgcmFuZ2Ugb2YgeWVhcnMgZm9yIHdoaWNoIDptZXRoOmBzdHJmdGltZWAgd29ya3MgYWxzbyB2YXJpZXMgYWNyb3NzCi1wbGF0Zm9ybXMuICBSZWdhcmRsZXNzIG9mIHBsYXRmb3JtLCB5ZWFycyBiZWZvcmUgMTkwMCBjYW5ub3QgYmUgdXNlZC4KLQogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCiB8IERpcmVjdGl2ZSB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzIHwKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09KwpAQCAtMTU5NCw3ICsxNzAzLDcgQEAKIHwgICAgICAgICAgIHwgQU0gb3IgUE0uICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCiB8IGBgJVNgYCAgICB8IFNlY29uZCBhcyBhIGRlY2ltYWwgbnVtYmVyICAgICB8IFwoMykgIHwKLXwgICAgICAgICAgIHwgWzAwLDYxXS4gICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorfCAgICAgICAgICAgfCBbMDAsNTldLiAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKIHwgYGAlVWBgICAgIHwgV2VlayBudW1iZXIgb2YgdGhlIHllYXIgICAgICAgIHwgXCg0KSAgfAogfCAgICAgICAgICAgfCAoU3VuZGF5IGFzIHRoZSBmaXJzdCBkYXkgb2YgICAgfCAgICAgICB8CkBAIC0xNjI0LDEwICsxNzMzLDExIEBACiB8IGBgJXlgYCAgICB8IFllYXIgd2l0aG91dCBjZW50dXJ5IGFzIGEgICAgICB8ICAgICAgIHwKIHwgICAgICAgICAgIHwgZGVjaW1hbCBudW1iZXIgWzAwLDk5XS4gICAgICAgIHwgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCi18IGBgJVlgYCAgICB8IFllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCB8ICAgICAgIHwKLXwgICAgICAgICAgIHwgbnVtYmVyLiAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorfCBgYCVZYGAgICAgfCBZZWFyIHdpdGggY2VudHVyeSBhcyBhIGRlY2ltYWwgfCBcKDUpICB8Cit8ICAgICAgICAgICB8IG51bWJlciBbMDAwMSw5OTk5XSAoc3RycHRpbWUpLCB8ICAgICAgIHwKK3wgICAgICAgICAgIHwgWzEwMDAsOTk5OV0gKHN0cmZ0aW1lKS4gICAgICAgIHwgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCi18IGBgJXpgYCAgICB8IFVUQyBvZmZzZXQgaW4gdGhlIGZvcm0gK0hITU0gICB8IFwoNSkgIHwKK3wgYGAlemBgICAgIHwgVVRDIG9mZnNldCBpbiB0aGUgZm9ybSArSEhNTSAgIHwgXCg2KSAgfAogfCAgICAgICAgICAgfCBvciAtSEhNTSAoZW1wdHkgc3RyaW5nIGlmIHRoZSAgfCAgICAgICB8CiB8ICAgICAgICAgICB8IHRoZSBvYmplY3QgaXMgbmFpdmUpLiAgICAgICAgICB8ICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKwpAQCAtMTY1MSwxNyArMTc2MSwzMCBAQAogICAgdGhlIG91dHB1dCBob3VyIGZpZWxkIGlmIHRoZSBgYCVJYGAgZGlyZWN0aXZlIGlzIHVzZWQgdG8gcGFyc2UgdGhlIGhvdXIuCiAKICgzKQotICAgVGhlIHJhbmdlIHJlYWxseSBpcyBgYDBgYCB0byBgYDYxYGA7IGFjY29yZGluZyB0byB0aGUgUG9zaXggc3RhbmRhcmQgdGhpcwotICAgYWNjb3VudHMgZm9yIGxlYXAgc2Vjb25kcyBhbmQgdGhlICh2ZXJ5IHJhcmUpIGRvdWJsZSBsZWFwIHNlY29uZHMuCi0gICBUaGUgOm1vZDpgdGltZWAgbW9kdWxlIG1heSBwcm9kdWNlIGFuZCBkb2VzIGFjY2VwdCBsZWFwIHNlY29uZHMgc2luY2UKLSAgIGl0IGlzIGJhc2VkIG9uIHRoZSBQb3NpeCBzdGFuZGFyZCwgYnV0IHRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlCi0gICBkb2VzIG5vdCBhY2NlcHQgbGVhcCBzZWNvbmRzIGluIDptZXRoOmBzdHJwdGltZWAgaW5wdXQgbm9yIHdpbGwgaXQKLSAgIHByb2R1Y2UgdGhlbSBpbiA6ZnVuYzpgc3RyZnRpbWVgIG91dHB1dC4KKyAgIFVubGlrZSA6bW9kOmB0aW1lYCBtb2R1bGUsIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgZG9lcyBub3Qgc3VwcG9ydAorICAgbGVhcCBzZWNvbmRzLgogCiAoNCkKICAgIFdoZW4gdXNlZCB3aXRoIHRoZSA6bWV0aDpgc3RycHRpbWVgIG1ldGhvZCwgYGAlVWBgIGFuZCBgYCVXYGAgYXJlIG9ubHkgdXNlZCBpbgogICAgY2FsY3VsYXRpb25zIHdoZW4gdGhlIGRheSBvZiB0aGUgd2VlayBhbmQgdGhlIHllYXIgYXJlIHNwZWNpZmllZC4KIAogKDUpCisgICBGb3IgdGVjaG5pY2FsIHJlYXNvbnMsIDptZXRoOmBzdHJmdGltZWAgbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQKKyAgIGRhdGVzIGJlZm9yZSB5ZWFyIDEwMDA6IGBgdC5zdHJmdGltZShmb3JtYXQpYGAgd2lsbCByYWlzZSBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aGVuIGBgdC55ZWFyIDwgMTAwMGBgIGV2ZW4gaWYgYGBmb3JtYXRgYCBkb2VzCisgICBub3QgY29udGFpbiBgYCVZYGAgZGlyZWN0aXZlLiAgVGhlIDptZXRoOmBzdHJwdGltZWAgbWV0aG9kIGNhbgorICAgcGFyc2UgeWVhcnMgaW4gdGhlIGZ1bGwgWzEsIDk5OTldIHJhbmdlLCBidXQgeWVhcnMgPCAxMDAwIG11c3QgYmUKKyAgIHplcm8tZmlsbGVkIHRvIDQtZGlnaXQgd2lkdGguCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBJbiBwcmV2aW91cyB2ZXJzaW9ucywgOm1ldGg6YHN0cmZ0aW1lYCBtZXRob2Qgd2FzIHJlc3RyaWN0ZWQgdG8KKyAgICAgIHllYXJzID49IDE5MDAuCisKKyg2KQogICAgRm9yIGV4YW1wbGUsIGlmIDptZXRoOmB1dGNvZmZzZXRgIHJldHVybnMgYGB0aW1lZGVsdGEoaG91cnM9LTMsIG1pbnV0ZXM9LTMwKWBgLAogICAgYGAlemBgIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyBgYCctMDMzMCdgYC4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIFdoZW4gdGhlIGBgJXpgYCBkaXJlY3RpdmUgaXMgcHJvdmlkZWQgdG8gdGhlIDptZXRoOmBzdHJwdGltZWAgbWV0aG9kLCBhbgorICAgYXdhcmUgOmNsYXNzOmBkYXRldGltZWAgb2JqZWN0IHdpbGwgYmUgcHJvZHVjZWQuICBUaGUgYGB0emluZm9gYCBvZiB0aGUKKyAgIHJlc3VsdCB3aWxsIGJlIHNldCB0byBhIDpjbGFzczpgdGltZXpvbmVgIGluc3RhbmNlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGJtLnJzdCBiL0RvYy9saWJyYXJ5L2RibS5yc3QKaW5kZXggY2JlZmMxYS4uZTNkNTBiOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGJtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CkBAIC02MSwxMCArNjEsMTUgQEAKICAgIG1vZGlmaWVkIGJ5IHRoZSBwcmV2YWlsaW5nIHVtYXNrKS4KIAogCi1UaGUgb2JqZWN0IHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAgc3VwcG9ydHMgbW9zdCBvZiB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IGFzCitUaGUgb2JqZWN0IHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAgc3VwcG9ydHMgdGhlIHNhbWUgYmFzaWMgZnVuY3Rpb25hbGl0eSBhcwogZGljdGlvbmFyaWVzOyBrZXlzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcyBjYW4gYmUgc3RvcmVkLCByZXRyaWV2ZWQsIGFuZAogZGVsZXRlZCwgYW5kIHRoZSA6a2V5d29yZDpgaW5gIG9wZXJhdG9yIGFuZCB0aGUgOm1ldGg6YGtleXNgIG1ldGhvZCBhcmUKLWF2YWlsYWJsZS4gS2V5IGFuZCB2YWx1ZXMgYXJlIGFsd2F5cyBzdG9yZWQgYXMgYnl0ZXMuIFRoaXMgbWVhbnMgdGhhdCB3aGVuCithdmFpbGFibGUsIGFzIHdlbGwgYXMgOm1ldGg6YGdldGAgYW5kIDptZXRoOmBzZXRkZWZhdWx0YC4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIDptZXRoOmBnZXRgIGFuZCA6bWV0aDpgc2V0ZGVmYXVsdGAgYXJlIG5vdyBhdmFpbGFibGUgaW4gYWxsIGRhdGFiYXNlIG1vZHVsZXMuCisKK0tleSBhbmQgdmFsdWVzIGFyZSBhbHdheXMgc3RvcmVkIGFzIGJ5dGVzLiBUaGlzIG1lYW5zIHRoYXQgd2hlbgogc3RyaW5ncyBhcmUgdXNlZCB0aGV5IGFyZSBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyBiZWZvcmUKIGJlaW5nIHN0b3JlZC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAppbmRleCA3NThkY2NlLi45ZDViMzJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdApAQCAtMTIzLDE1ICsxMjMsMTQgQEAKICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0ICoKICAgID4+PiBnZXRjb250ZXh0KCkKICAgIENvbnRleHQocHJlYz0yOCwgcm91bmRpbmc9Uk9VTkRfSEFMRl9FVkVOLCBFbWluPS05OTk5OTk5OTksIEVtYXg9OTk5OTk5OTk5LAotICAgICAgICAgICBjYXBpdGFscz0xLCBmbGFncz1bXSwgdHJhcHM9W092ZXJmbG93LCBEaXZpc2lvbkJ5WmVybywKKyAgICAgICAgICAgY2FwaXRhbHM9MSwgY2xhbXA9MCwgZmxhZ3M9W10sIHRyYXBzPVtPdmVyZmxvdywgRGl2aXNpb25CeVplcm8sCiAgICAgICAgICAgIEludmFsaWRPcGVyYXRpb25dKQogCiAgICA+Pj4gZ2V0Y29udGV4dCgpLnByZWMgPSA3ICAgICAgICMgU2V0IGEgbmV3IHByZWNpc2lvbgogCi1EZWNpbWFsIGluc3RhbmNlcyBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBpbnRlZ2Vycywgc3RyaW5ncywgb3IgdHVwbGVzLiAgVG8KLWNyZWF0ZSBhIERlY2ltYWwgZnJvbSBhIDpjbGFzczpgZmxvYXRgLCBmaXJzdCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiAgVGhpcwotc2VydmVzIGFzIGFuIGV4cGxpY2l0IHJlbWluZGVyIG9mIHRoZSBkZXRhaWxzIG9mIHRoZSBjb252ZXJzaW9uIChpbmNsdWRpbmcKLXJlcHJlc2VudGF0aW9uIGVycm9yKS4gIERlY2ltYWwgbnVtYmVycyBpbmNsdWRlIHNwZWNpYWwgdmFsdWVzIHN1Y2ggYXMKK0RlY2ltYWwgaW5zdGFuY2VzIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIGludGVnZXJzLCBzdHJpbmdzLCBmbG9hdHMsIG9yIHR1cGxlcy4KK0NvbnN0cnVjdGlvbiBmcm9tIGFuIGludGVnZXIgb3IgYSBmbG9hdCBwZXJmb3JtcyBhbiBleGFjdCBjb252ZXJzaW9uIG9mIHRoZQordmFsdWUgb2YgdGhhdCBpbnRlZ2VyIG9yIGZsb2F0LiAgRGVjaW1hbCBudW1iZXJzIGluY2x1ZGUgc3BlY2lhbCB2YWx1ZXMgc3VjaCBhcwogOmNvbnN0OmBOYU5gIHdoaWNoIHN0YW5kcyBmb3IgIk5vdCBhIG51bWJlciIsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZQogOmNvbnN0OmBJbmZpbml0eWAsIGFuZCA6Y29uc3Q6YC0wYC4KIApAQCAtMTQwLDEwICsxMzksMTIgQEAKICAgIERlY2ltYWwoJzEwJykKICAgID4+PiBEZWNpbWFsKCczLjE0JykKICAgIERlY2ltYWwoJzMuMTQnKQorICAgPj4+IERlY2ltYWwoMy4xNCkKKyAgIERlY2ltYWwoJzMuMTQwMDAwMDAwMDAwMDAwMTI0MzQ0OTc4NzU4MDE3NTMyNTI3NDQ2NzQ2ODI2MTcxODc1JykKICAgID4+PiBEZWNpbWFsKCgwLCAoMywgMSwgNCksIC0yKSkKICAgIERlY2ltYWwoJzMuMTQnKQogICAgPj4+IERlY2ltYWwoc3RyKDIuMCAqKiAwLjUpKQotICAgRGVjaW1hbCgnMS40MTQyMTM1NjIzNycpCisgICBEZWNpbWFsKCcxLjQxNDIxMzU2MjM3MzA5NTEnKQogICAgPj4+IERlY2ltYWwoMikgKiogRGVjaW1hbCgnMC41JykKICAgIERlY2ltYWwoJzEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg4NzI0JykKICAgID4+PiBEZWNpbWFsKCdOYU4nKQpAQCAtMjQ0LDcgKzI0NSw3IEBACiAKICAgID4+PiBFeHRlbmRlZENvbnRleHQKICAgIENvbnRleHQocHJlYz05LCByb3VuZGluZz1ST1VORF9IQUxGX0VWRU4sIEVtaW49LTk5OTk5OTk5OSwgRW1heD05OTk5OTk5OTksCi0gICAgICAgICAgIGNhcGl0YWxzPTEsIGZsYWdzPVtdLCB0cmFwcz1bXSkKKyAgICAgICAgICAgY2FwaXRhbHM9MSwgY2xhbXA9MCwgZmxhZ3M9W10sIHRyYXBzPVtdKQogICAgPj4+IHNldGNvbnRleHQoRXh0ZW5kZWRDb250ZXh0KQogICAgPj4+IERlY2ltYWwoMSkgLyBEZWNpbWFsKDcpCiAgICBEZWNpbWFsKCcwLjE0Mjg1NzE0MycpCkBAIC0yNjksNyArMjcwLDcgQEAKICAgIERlY2ltYWwoJzMuMTQxNTkyOTInKQogICAgPj4+IGdldGNvbnRleHQoKQogICAgQ29udGV4dChwcmVjPTksIHJvdW5kaW5nPVJPVU5EX0hBTEZfRVZFTiwgRW1pbj0tOTk5OTk5OTk5LCBFbWF4PTk5OTk5OTk5OSwKLSAgICAgICAgICAgY2FwaXRhbHM9MSwgZmxhZ3M9W0luZXhhY3QsIFJvdW5kZWRdLCB0cmFwcz1bXSkKKyAgICAgICAgICAgY2FwaXRhbHM9MSwgY2xhbXA9MCwgZmxhZ3M9W0luZXhhY3QsIFJvdW5kZWRdLCB0cmFwcz1bXSkKIAogVGhlICpmbGFncyogZW50cnkgc2hvd3MgdGhhdCB0aGUgcmF0aW9uYWwgYXBwcm94aW1hdGlvbiB0byA6Y29uc3Q6YFBpYCB3YXMKIHJvdW5kZWQgKGRpZ2l0cyBiZXlvbmQgdGhlIGNvbnRleHQgcHJlY2lzaW9uIHdlcmUgdGhyb3duIGF3YXkpIGFuZCB0aGF0IHRoZQpAQCAtMzA5LDcgKzMxMCw3IEBACiAKICAgIENvbnN0cnVjdCBhIG5ldyA6Y2xhc3M6YERlY2ltYWxgIG9iamVjdCBiYXNlZCBmcm9tICp2YWx1ZSouCiAKLSAgICp2YWx1ZSogY2FuIGJlIGFuIGludGVnZXIsIHN0cmluZywgdHVwbGUsIG9yIGFub3RoZXIgOmNsYXNzOmBEZWNpbWFsYAorICAgKnZhbHVlKiBjYW4gYmUgYW4gaW50ZWdlciwgc3RyaW5nLCB0dXBsZSwgOmNsYXNzOmBmbG9hdGAsIG9yIGFub3RoZXIgOmNsYXNzOmBEZWNpbWFsYAogICAgb2JqZWN0LiBJZiBubyAqdmFsdWUqIGlzIGdpdmVuLCByZXR1cm5zIGBgRGVjaW1hbCgnMCcpYGAuICBJZiAqdmFsdWUqIGlzIGEKICAgIHN0cmluZywgaXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlIGRlY2ltYWwgbnVtZXJpYyBzdHJpbmcgc3ludGF4IGFmdGVyIGxlYWRpbmcKICAgIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHJlbW92ZWQ6OgpAQCAtMzM1LDYgKzMzNiwxMiBAQAogICAgZGlnaXRzLCBhbmQgYW4gaW50ZWdlciBleHBvbmVudC4gRm9yIGV4YW1wbGUsIGBgRGVjaW1hbCgoMCwgKDEsIDQsIDEsIDQpLCAtMykpYGAKICAgIHJldHVybnMgYGBEZWNpbWFsKCcxLjQxNCcpYGAuCiAKKyAgIElmICp2YWx1ZSogaXMgYSA6Y2xhc3M6YGZsb2F0YCwgdGhlIGJpbmFyeSBmbG9hdGluZyBwb2ludCB2YWx1ZSBpcyBsb3NzbGVzc2x5CisgICBjb252ZXJ0ZWQgdG8gaXRzIGV4YWN0IGRlY2ltYWwgZXF1aXZhbGVudC4gIFRoaXMgY29udmVyc2lvbiBjYW4gb2Z0ZW4gcmVxdWlyZQorICAgNTMgb3IgbW9yZSBkaWdpdHMgb2YgcHJlY2lzaW9uLiAgRm9yIGV4YW1wbGUsIGBgRGVjaW1hbChmbG9hdCgnMS4xJykpYGAKKyAgIGNvbnZlcnRzIHRvCisgICBgYERlY2ltYWwoJzEuMTAwMDAwMDAwMDAwMDAwMDg4ODE3ODQxOTcwMDEyNTIzMjMzODkwNTMzNDQ3MjY1NjI1JylgYC4KKwogICAgVGhlICpjb250ZXh0KiBwcmVjaXNpb24gZG9lcyBub3QgYWZmZWN0IGhvdyBtYW55IGRpZ2l0cyBhcmUgc3RvcmVkLiBUaGF0IGlzCiAgICBkZXRlcm1pbmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBudW1iZXIgb2YgZGlnaXRzIGluICp2YWx1ZSouIEZvciBleGFtcGxlLAogICAgYGBEZWNpbWFsKCczLjAwMDAwJylgYCByZWNvcmRzIGFsbCBmaXZlIHplcm9zIGV2ZW4gaWYgdGhlIGNvbnRleHQgcHJlY2lzaW9uIGlzCkBAIC0zNDcsNiArMzU0LDEwIEBACiAKICAgIE9uY2UgY29uc3RydWN0ZWQsIDpjbGFzczpgRGVjaW1hbGAgb2JqZWN0cyBhcmUgaW1tdXRhYmxlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBpcyBub3cgcGVybWl0dGVkIHRvIGJlIGEgOmNsYXNzOmBmbG9hdGAKKyAgICAgIGluc3RhbmNlLgorCiAgICBEZWNpbWFsIGZsb2F0aW5nIHBvaW50IG9iamVjdHMgc2hhcmUgbWFueSBwcm9wZXJ0aWVzIHdpdGggdGhlIG90aGVyIGJ1aWx0LWluCiAgICBudW1lcmljIHR5cGVzIHN1Y2ggYXMgOmNsYXNzOmBmbG9hdGAgYW5kIDpjbGFzczpgaW50YC4gIEFsbCBvZiB0aGUgdXN1YWwgbWF0aAogICAgb3BlcmF0aW9ucyBhbmQgc3BlY2lhbCBtZXRob2RzIGFwcGx5LiAgTGlrZXdpc2UsIGRlY2ltYWwgb2JqZWN0cyBjYW4gYmUKQEAgLTM1NCw2ICszNjUsMTggQEAKICAgIGNvbXBhcmVkLCBzb3J0ZWQsIGFuZCBjb2VyY2VkIHRvIGFub3RoZXIgdHlwZSAoc3VjaCBhcyA6Y2xhc3M6YGZsb2F0YCBvcgogICAgOmNsYXNzOmBpbnRgKS4KIAorICAgRGVjaW1hbCBvYmplY3RzIGNhbm5vdCBnZW5lcmFsbHkgYmUgY29tYmluZWQgd2l0aCBmbG9hdHMgb3IKKyAgIGluc3RhbmNlcyBvZiA6Y2xhc3M6YGZyYWN0aW9ucy5GcmFjdGlvbmAgaW4gYXJpdGhtZXRpYyBvcGVyYXRpb25zOgorICAgYW4gYXR0ZW1wdCB0byBhZGQgYSA6Y2xhc3M6YERlY2ltYWxgIHRvIGEgOmNsYXNzOmBmbG9hdGAsIGZvcgorICAgZXhhbXBsZSwgd2lsbCByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuICBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0bworICAgdXNlIFB5dGhvbidzIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRvIGNvbXBhcmUgYSA6Y2xhc3M6YERlY2ltYWxgCisgICBpbnN0YW5jZSBgYHhgYCB3aXRoIGFub3RoZXIgbnVtYmVyIGBgeWBgLiAgVGhpcyBhdm9pZHMgY29uZnVzaW5nIHJlc3VsdHMKKyAgIHdoZW4gZG9pbmcgZXF1YWxpdHkgY29tcGFyaXNvbnMgYmV0d2VlbiBudW1iZXJzIG9mIGRpZmZlcmVudCB0eXBlcy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIE1peGVkLXR5cGUgY29tcGFyaXNvbnMgYmV0d2VlbiA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlcyBhbmQgb3RoZXIKKyAgICAgIG51bWVyaWMgdHlwZXMgYXJlIG5vdyBmdWxseSBzdXBwb3J0ZWQuCisKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBudW1lcmljIHByb3BlcnRpZXMsIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQKICAgIG9iamVjdHMgYWxzbyBoYXZlIGEgbnVtYmVyIG9mIHNwZWNpYWxpemVkIG1ldGhvZHM6CiAKQEAgLTQ2OCw2ICs0OTEsOSBAQAogICAgICAgYDB4MS45OTk5OTk5OTk5OTlhcC00YC4gIFRoYXQgZXF1aXZhbGVudCB2YWx1ZSBpbiBkZWNpbWFsIGlzCiAgICAgICBgMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1YC4KIAorICAgICAgLi4gbm90ZTo6IEZyb20gUHl0aG9uIDMuMiBvbndhcmRzLCBhIDpjbGFzczpgRGVjaW1hbGAgaW5zdGFuY2UKKyAgICAgICAgIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIGRpcmVjdGx5IGZyb20gYSA6Y2xhc3M6YGZsb2F0YC4KKwogICAgICAgLi4gZG9jdGVzdDo6CiAKICAgICAgICAgICA+Pj4gRGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSkKQEAgLTg2MSw3ICs4ODcsNyBAQAogOmNsYXNzOmBDb250ZXh0YCBjb25zdHJ1Y3Rvci4KIAogCi0uLiBjbGFzczo6IENvbnRleHQocHJlYz1Ob25lLCByb3VuZGluZz1Ob25lLCB0cmFwcz1Ob25lLCBmbGFncz1Ob25lLCBFbWluPU5vbmUsIEVtYXg9Tm9uZSwgY2FwaXRhbHM9MSkKKy4uIGNsYXNzOjogQ29udGV4dChwcmVjPU5vbmUsIHJvdW5kaW5nPU5vbmUsIHRyYXBzPU5vbmUsIGZsYWdzPU5vbmUsIEVtaW49Tm9uZSwgRW1heD1Ob25lLCBjYXBpdGFscz1Ob25lLCBjbGFtcD1Ob25lKQogCiAgICBDcmVhdGVzIGEgbmV3IGNvbnRleHQuICBJZiBhIGZpZWxkIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgOmNvbnN0OmBOb25lYCwgdGhlCiAgICBkZWZhdWx0IHZhbHVlcyBhcmUgY29waWVkIGZyb20gdGhlIDpjb25zdDpgRGVmYXVsdENvbnRleHRgLiAgSWYgdGhlICpmbGFncyoKQEAgLTg5MiwxMyArOTE4LDMzIEBACiAgICA6Y29uc3Q6YDFgLCBleHBvbmVudHMgYXJlIHByaW50ZWQgd2l0aCBhIGNhcGl0YWwgOmNvbnN0OmBFYDsgb3RoZXJ3aXNlLCBhCiAgICBsb3dlcmNhc2UgOmNvbnN0OmBlYCBpcyB1c2VkOiA6Y29uc3Q6YERlY2ltYWwoJzYuMDJlKzIzJylgLgogCisgICBUaGUgKmNsYW1wKiBmaWVsZCBpcyBlaXRoZXIgOmNvbnN0OmAwYCAodGhlIGRlZmF1bHQpIG9yIDpjb25zdDpgMWAuCisgICBJZiBzZXQgdG8gOmNvbnN0OmAxYCwgdGhlIGV4cG9uZW50IGBgZWBgIG9mIGEgOmNsYXNzOmBEZWNpbWFsYAorICAgaW5zdGFuY2UgcmVwcmVzZW50YWJsZSBpbiB0aGlzIGNvbnRleHQgaXMgc3RyaWN0bHkgbGltaXRlZCB0byB0aGUKKyAgIHJhbmdlIGBgRW1pbiAtIHByZWMgKyAxIDw9IGUgPD0gRW1heCAtIHByZWMgKyAxYGAuICBJZiAqY2xhbXAqIGlzCisgICA6Y29uc3Q6YDBgIHRoZW4gYSB3ZWFrZXIgY29uZGl0aW9uIGhvbGRzOiB0aGUgYWRqdXN0ZWQgZXhwb25lbnQgb2YKKyAgIHRoZSA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlIGlzIGF0IG1vc3QgYGBFbWF4YGAuICBXaGVuICpjbGFtcCogaXMKKyAgIDpjb25zdDpgMWAsIGEgbGFyZ2Ugbm9ybWFsIG51bWJlciB3aWxsLCB3aGVyZSBwb3NzaWJsZSwgaGF2ZSBpdHMKKyAgIGV4cG9uZW50IHJlZHVjZWQgYW5kIGEgY29ycmVzcG9uZGluZyBudW1iZXIgb2YgemVyb3MgYWRkZWQgdG8gaXRzCisgICBjb2VmZmljaWVudCwgaW4gb3JkZXIgdG8gZml0IHRoZSBleHBvbmVudCBjb25zdHJhaW50czsgdGhpcworICAgcHJlc2VydmVzIHRoZSB2YWx1ZSBvZiB0aGUgbnVtYmVyIGJ1dCBsb3NlcyBpbmZvcm1hdGlvbiBhYm91dAorICAgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MuICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBDb250ZXh0KHByZWM9NiwgRW1heD05OTksIGNsYW1wPTEpLmNyZWF0ZV9kZWNpbWFsKCcxLjIzZTk5OScpCisgICAgICBEZWNpbWFsKCcxLjIzMDAwRSs5OTknKQorCisgICBBICpjbGFtcCogdmFsdWUgb2YgOmNvbnN0OmAxYCBhbGxvd3MgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQorICAgZml4ZWQtd2lkdGggZGVjaW1hbCBpbnRlcmNoYW5nZSBmb3JtYXRzIHNwZWNpZmllZCBpbiBJRUVFIDc1NC4KIAogICAgVGhlIDpjbGFzczpgQ29udGV4dGAgY2xhc3MgZGVmaW5lcyBzZXZlcmFsIGdlbmVyYWwgcHVycG9zZSBtZXRob2RzIGFzIHdlbGwgYXMKICAgIGEgbGFyZ2UgbnVtYmVyIG9mIG1ldGhvZHMgZm9yIGRvaW5nIGFyaXRobWV0aWMgZGlyZWN0bHkgaW4gYSBnaXZlbiBjb250ZXh0LgogICAgSW4gYWRkaXRpb24sIGZvciBlYWNoIG9mIHRoZSA6Y2xhc3M6YERlY2ltYWxgIG1ldGhvZHMgZGVzY3JpYmVkIGFib3ZlICh3aXRoCiAgICB0aGUgZXhjZXB0aW9uIG9mIHRoZSA6bWV0aDpgYWRqdXN0ZWRgIGFuZCA6bWV0aDpgYXNfdHVwbGVgIG1ldGhvZHMpIHRoZXJlIGlzCi0gICBhIGNvcnJlc3BvbmRpbmcgOmNsYXNzOmBDb250ZXh0YCBtZXRob2QuICBGb3IgZXhhbXBsZSwgYGBDLmV4cCh4KWBgIGlzCi0gICBlcXVpdmFsZW50IHRvIGBgeC5leHAoY29udGV4dD1DKWBgLgorICAgYSBjb3JyZXNwb25kaW5nIDpjbGFzczpgQ29udGV4dGAgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIGZvciBhIDpjbGFzczpgQ29udGV4dGAKKyAgIGluc3RhbmNlIGBgQ2BgIGFuZCA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlIGBgeGBgLCBgYEMuZXhwKHgpYGAgaXMKKyAgIGVxdWl2YWxlbnQgdG8gYGB4LmV4cChjb250ZXh0PUMpYGAuICBFYWNoIDpjbGFzczpgQ29udGV4dGAgbWV0aG9kIGFjY2VwdHMgYQorICAgUHl0aG9uIGludGVnZXIgKGFuIGluc3RhbmNlIG9mIDpjbGFzczpgaW50YCkgYW55d2hlcmUgdGhhdCBhCisgICBEZWNpbWFsIGluc3RhbmNlIGlzIGFjY2VwdGVkLgogCiAKICAgIC4uIG1ldGhvZDo6IGNsZWFyX2ZsYWdzKCkKQEAgLTk2Myw3ICsxMDA5LDYgQEAKICAgICAgIHZhbHVlIGZvciBzdWJub3JtYWwgcmVzdWx0cy4gIFdoZW4gdW5kZXJmbG93IG9jY3VycywgdGhlIGV4cG9uZW50IGlzIHNldAogICAgICAgdG8gOmNvbnN0OmBFdGlueWAuCiAKLQogICAgLi4gbWV0aG9kOjogRXRvcCgpCiAKICAgICAgIFJldHVybnMgYSB2YWx1ZSBlcXVhbCB0byBgYEVtYXggLSBwcmVjICsgMWBgLgpAQCAtMTYxMiw3ICsxNjU3LDggQEAKICAgICAgICAgICAgYnVpbGQodHJhaWxuZWcpCiAgICAgICAgZm9yIGkgaW4gcmFuZ2UocGxhY2VzKToKICAgICAgICAgICAgYnVpbGQobmV4dCgpIGlmIGRpZ2l0cyBlbHNlICcwJykKLSAgICAgICBidWlsZChkcCkKKyAgICAgICBpZiBwbGFjZXM6CisgICAgICAgICAgIGJ1aWxkKGRwKQogICAgICAgIGlmIG5vdCBkaWdpdHM6CiAgICAgICAgICAgIGJ1aWxkKCcwJykKICAgICAgICBpID0gMApAQCAtMTY3Miw2ICsxNzE4LDkgQEAKICAgIGRlZiBjb3MoeCk6CiAgICAgICAgIiIiUmV0dXJuIHRoZSBjb3NpbmUgb2YgeCBhcyBtZWFzdXJlZCBpbiByYWRpYW5zLgogCisgICAgICAgVGhlIFRheWxvciBzZXJpZXMgYXBwcm94aW1hdGlvbiB3b3JrcyBiZXN0IGZvciBhIHNtYWxsIHZhbHVlIG9mIHguCisgICAgICAgRm9yIGxhcmdlciB2YWx1ZXMsIGZpcnN0IGNvbXB1dGUgeCA9IHggJSAoMiAqIHBpKS4KKwogICAgICAgID4+PiBwcmludChjb3MoRGVjaW1hbCgnMC41JykpKQogICAgICAgIDAuODc3NTgyNTYxODkwMzcyNzE2MTE2MjgxNTgyNgogICAgICAgID4+PiBwcmludChjb3MoMC41KSkKQEAgLTE2OTUsNiArMTc0NCw5IEBACiAgICBkZWYgc2luKHgpOgogICAgICAgICIiIlJldHVybiB0aGUgc2luZSBvZiB4IGFzIG1lYXN1cmVkIGluIHJhZGlhbnMuCiAKKyAgICAgICBUaGUgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uIHdvcmtzIGJlc3QgZm9yIGEgc21hbGwgdmFsdWUgb2YgeC4KKyAgICAgICBGb3IgbGFyZ2VyIHZhbHVlcywgZmlyc3QgY29tcHV0ZSB4ID0geCAlICgyICogcGkpLgorCiAgICAgICAgPj4+IHByaW50KHNpbihEZWNpbWFsKCcwLjUnKSkpCiAgICAgICAgMC40Nzk0MjU1Mzg2MDQyMDMwMDAyNzMyODc5MzUyCiAgICAgICAgPj4+IHByaW50KHNpbigwLjUpKQpAQCAtMTgyMSwzNyArMTg3MywxNSBAQAogCiBRLiBJcyB0aGVyZSBhIHdheSB0byBjb252ZXJ0IGEgcmVndWxhciBmbG9hdCB0byBhIDpjbGFzczpgRGVjaW1hbGA/CiAKLUEuIFllcywgYWxsIGJpbmFyeSBmbG9hdGluZyBwb2ludCBudW1iZXJzIGNhbiBiZSBleGFjdGx5IGV4cHJlc3NlZCBhcyBhCi1EZWNpbWFsLiAgQW4gZXhhY3QgY29udmVyc2lvbiBtYXkgdGFrZSBtb3JlIHByZWNpc2lvbiB0aGFuIGludHVpdGlvbiB3b3VsZAotc3VnZ2VzdCwgc28gd2UgdHJhcCA6Y29uc3Q6YEluZXhhY3RgIHRvIHNpZ25hbCBhIG5lZWQgZm9yIG1vcmUgcHJlY2lzaW9uOgotCi0uLiB0ZXN0Y29kZTo6Ci0KLSAgICBkZWYgZmxvYXRfdG9fZGVjaW1hbChmKToKLSAgICAgICAgIkNvbnZlcnQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gYSBEZWNpbWFsIHdpdGggbm8gbG9zcyBvZiBpbmZvcm1hdGlvbiIKLSAgICAgICAgbiwgZCA9IGYuYXNfaW50ZWdlcl9yYXRpbygpCi0gICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgY3R4OgotICAgICAgICAgICAgY3R4LnRyYXBzW0luZXhhY3RdID0gVHJ1ZQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwobikgLyBEZWNpbWFsKGQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEluZXhhY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGN0eC5wcmVjICs9IDEKK0EuIFllcywgYW55IGJpbmFyeSBmbG9hdGluZyBwb2ludCBudW1iZXIgY2FuIGJlIGV4YWN0bHkgZXhwcmVzc2VkIGFzIGEKK0RlY2ltYWwgdGhvdWdoIGFuIGV4YWN0IGNvbnZlcnNpb24gbWF5IHRha2UgbW9yZSBwcmVjaXNpb24gdGhhbiBpbnR1aXRpb24gd291bGQKK3N1Z2dlc3Q6CiAKIC4uIGRvY3Rlc3Q6OgogCi0gICAgPj4+IGZsb2F0X3RvX2RlY2ltYWwobWF0aC5waSkKKyAgICA+Pj4gRGVjaW1hbChtYXRoLnBpKQogICAgIERlY2ltYWwoJzMuMTQxNTkyNjUzNTg5NzkzMTE1OTk3OTYzNDY4NTQ0MTg1MTYxNTkwNTc2MTcxODc1JykKIAotUS4gV2h5IGlzbid0IHRoZSA6ZnVuYzpgZmxvYXRfdG9fZGVjaW1hbGAgcm91dGluZSBpbmNsdWRlZCBpbiB0aGUgbW9kdWxlPwotCi1BLiBUaGVyZSBpcyBzb21lIHF1ZXN0aW9uIGFib3V0IHdoZXRoZXIgaXQgaXMgYWR2aXNhYmxlIHRvIG1peCBiaW5hcnkgYW5kCi1kZWNpbWFsIGZsb2F0aW5nIHBvaW50LiAgQWxzbywgaXRzIHVzZSByZXF1aXJlcyBzb21lIGNhcmUgdG8gYXZvaWQgdGhlCi1yZXByZXNlbnRhdGlvbiBpc3N1ZXMgYXNzb2NpYXRlZCB3aXRoIGJpbmFyeSBmbG9hdGluZyBwb2ludDoKLQotICAgPj4+IGZsb2F0X3RvX2RlY2ltYWwoMS4xKQotICAgRGVjaW1hbCgnMS4xMDAwMDAwMDAwMDAwMDAwODg4MTc4NDE5NzAwMTI1MjMyMzM4OTA1MzM0NDcyNjU2MjUnKQotCiBRLiBXaXRoaW4gYSBjb21wbGV4IGNhbGN1bGF0aW9uLCBob3cgY2FuIEkgbWFrZSBzdXJlIHRoYXQgSSBoYXZlbid0IGdvdHRlbiBhCiBzcHVyaW91cyByZXN1bHQgYmVjYXVzZSBvZiBpbnN1ZmZpY2llbnQgcHJlY2lzaW9uIG9yIHJvdW5kaW5nIGFub21hbGllcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAppbmRleCA2ZGVhOGMxLi5iZGMzN2IzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdApAQCAtMTcsNiArMTcsNyBAQAogaW5mb3JtYXRpb24gaW4gdmFyaW91cyBmb3JtYXRzLCBpbmNsdWRpbmcgSFRNTCBhbmQgY29udGV4dCBhbmQgdW5pZmllZAogZGlmZnMuIEZvciBjb21wYXJpbmcgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBzZWUgYWxzbywgdGhlIDptb2Q6YGZpbGVjbXBgIG1vZHVsZS4KIAorCiAuLiBjbGFzczo6IFNlcXVlbmNlTWF0Y2hlcgogCiAgICBUaGlzIGlzIGEgZmxleGlibGUgY2xhc3MgZm9yIGNvbXBhcmluZyBwYWlycyBvZiBzZXF1ZW5jZXMgb2YgYW55IHR5cGUsIHNvIGxvbmcKQEAgLTM1LDExICszNiwxNyBAQAogICAgY29tcGxpY2F0ZWQgd2F5IG9uIGhvdyBtYW55IGVsZW1lbnRzIHRoZSBzZXF1ZW5jZXMgaGF2ZSBpbiBjb21tb247IGJlc3QgY2FzZQogICAgdGltZSBpcyBsaW5lYXIuCiAKLSAgICoqSGV1cmlzdGljOioqIFRvIHNwZWVkLXVwIG1hdGNoaW5nLCBpdGVtcyB3aG9zZSBkdXBsaWNhdGVzIGFwcGVhciBtb3JlIHRoYW4gMSUgb2YKLSAgIHRoZSB0aW1lIGluIHNlcXVlbmNlcyBvZiBhdCBsZWFzdCAyMDAgaXRlbXMgYXJlIHRyZWF0ZWQgYXMganVuay4gIFRoaXMgaGFzIHRoZQotICAgdW5mb3J0dW5hdGUgc2lkZS1lZmZlY3Qgb2YgZ2l2aW5nIGJhZCByZXN1bHRzIGZvciBzZXF1ZW5jZXMgY29uc3RydWN0ZWQgZnJvbQotICAgYSBzbWFsbCBzZXQgb2YgaXRlbXMuICBBbiBvcHRpb24gdG8gdHVybiBvZmYgdGhlIGhldXJpc3RpYyB3aWxsIGJlIGFkZGVkIHRvCi0gICBQeXRob24gMy4yLgorICAgKipBdXRvbWF0aWMganVuayBoZXVyaXN0aWM6KiogOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIHN1cHBvcnRzIGEgaGV1cmlzdGljIHRoYXQKKyAgIGF1dG9tYXRpY2FsbHkgdHJlYXRzIGNlcnRhaW4gc2VxdWVuY2UgaXRlbXMgYXMganVuay4gVGhlIGhldXJpc3RpYyBjb3VudHMgaG93IG1hbnkKKyAgIHRpbWVzIGVhY2ggaW5kaXZpZHVhbCBpdGVtIGFwcGVhcnMgaW4gdGhlIHNlcXVlbmNlLiBJZiBhbiBpdGVtJ3MgZHVwbGljYXRlcyAoYWZ0ZXIKKyAgIHRoZSBmaXJzdCBvbmUpIGFjY291bnQgZm9yIG1vcmUgdGhhbiAxJSBvZiB0aGUgc2VxdWVuY2UgYW5kIHRoZSBzZXF1ZW5jZSBpcyBhdCBsZWFzdAorICAgMjAwIGl0ZW1zIGxvbmcsIHRoaXMgaXRlbSBpcyBtYXJrZWQgYXMgInBvcHVsYXIiIGFuZCBpcyB0cmVhdGVkIGFzIGp1bmsgZm9yCisgICB0aGUgcHVycG9zZSBvZiBzZXF1ZW5jZSBtYXRjaGluZy4gVGhpcyBoZXVyaXN0aWMgY2FuIGJlIHR1cm5lZCBvZmYgYnkgc2V0dGluZworICAgdGhlIGBgYXV0b2p1bmtgYCBhcmd1bWVudCB0byBgYEZhbHNlYGAgd2hlbiBjcmVhdGluZyB0aGUgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqYXV0b2p1bmsqIHBhcmFtZXRlci4KKwogCiAuLiBjbGFzczo6IERpZmZlcgogCkBAIC0xNDUsOCArMTUyLDggQEAKIAogICAgVGhlIGNvbnRleHQgZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kIG1vZGlmaWNhdGlvbgogICAgdGltZXMuICBBbnkgb3IgYWxsIG9mIHRoZXNlIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgc3RyaW5ncyBmb3IgKmZyb21maWxlKiwKLSAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKLSAgIGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IDpmdW5jOmB0aW1lLmN0aW1lYC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZQorICAgKnRvZmlsZSosICpmcm9tZmlsZWRhdGUqLCBhbmQgKnRvZmlsZWRhdGUqLiAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKKyAgIGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICAgIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCiAKICAgICAgID4+PiBzMSA9IFsnYmFjb25cbicsICdlZ2dzXG4nLCAnaGFtXG4nLCAnZ3VpZG9cbiddCkBAIC0yNzcsOCArMjg0LDggQEAKIAogICAgVGhlIGNvbnRleHQgZGlmZiBmb3JtYXQgbm9ybWFsbHkgaGFzIGEgaGVhZGVyIGZvciBmaWxlbmFtZXMgYW5kIG1vZGlmaWNhdGlvbgogICAgdGltZXMuICBBbnkgb3IgYWxsIG9mIHRoZXNlIG1heSBiZSBzcGVjaWZpZWQgdXNpbmcgc3RyaW5ncyBmb3IgKmZyb21maWxlKiwKLSAgICp0b2ZpbGUqLCAqZnJvbWZpbGVkYXRlKiwgYW5kICp0b2ZpbGVkYXRlKi4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKLSAgIGV4cHJlc3NlZCBpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5IDpmdW5jOmB0aW1lLmN0aW1lYC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZQorICAgKnRvZmlsZSosICpmcm9tZmlsZWRhdGUqLCBhbmQgKnRvZmlsZWRhdGUqLiAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkKKyAgIGV4cHJlc3NlZCBpbiB0aGUgSVNPIDg2MDEgZm9ybWF0LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUKICAgIHN0cmluZ3MgZGVmYXVsdCB0byBibGFua3MuCiAKIApAQCAtMzI5LDcgKzMzNiw3IEBACiBUaGUgOmNsYXNzOmBTZXF1ZW5jZU1hdGNoZXJgIGNsYXNzIGhhcyB0aGlzIGNvbnN0cnVjdG9yOgogCiAKLS4uIGNsYXNzOjogU2VxdWVuY2VNYXRjaGVyKGlzanVuaz1Ob25lLCBhPScnLCBiPScnKQorLi4gY2xhc3M6OiBTZXF1ZW5jZU1hdGNoZXIoaXNqdW5rPU5vbmUsIGE9JycsIGI9JycsIGF1dG9qdW5rPVRydWUpCiAKICAgIE9wdGlvbmFsIGFyZ3VtZW50ICppc2p1bmsqIG11c3QgYmUgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBvciBhIG9uZS1hcmd1bWVudAogICAgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIHNlcXVlbmNlIGVsZW1lbnQgYW5kIHJldHVybnMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUKQEAgLTM0NSw2ICszNTIsMjIgQEAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgKmEqIGFuZCAqYiogYXJlIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZDsgYm90aCBkZWZhdWx0IHRvCiAgICBlbXB0eSBzdHJpbmdzLiAgVGhlIGVsZW1lbnRzIG9mIGJvdGggc2VxdWVuY2VzIG11c3QgYmUgOnRlcm06YGhhc2hhYmxlYC4KIAorICAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICphdXRvanVuayogY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIGp1bmsKKyAgIGhldXJpc3RpYy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBUaGUgKmF1dG9qdW5rKiBwYXJhbWV0ZXIuCisKKyAgIFNlcXVlbmNlTWF0Y2hlciBvYmplY3RzIGdldCB0aHJlZSBkYXRhIGF0dHJpYnV0ZXM6ICpianVuayogaXMgdGhlCisgICBzZXQgb2YgZWxlbWVudHMgb2YgKmIqIGZvciB3aGljaCAqaXNqdW5rKiBpcyBUcnVlOyAqYnBvcHVsYXIqIGlzIHRoZSBzZXQgb2YKKyAgIG5vbi1qdW5rIGVsZW1lbnRzIGNvbnNpZGVyZWQgcG9wdWxhciBieSB0aGUgaGV1cmlzdGljIChpZiBpdCBpcyBub3QKKyAgIGRpc2FibGVkKTsgKmIyaiogaXMgYSBkaWN0IG1hcHBpbmcgdGhlIHJlbWFpbmluZyBlbGVtZW50cyBvZiAqYiogdG8gYSBsaXN0CisgICBvZiBwb3NpdGlvbnMgd2hlcmUgdGhleSBvY2N1ci4gQWxsIHRocmVlIGFyZSByZXNldCB3aGVuZXZlciAqYiogaXMgcmVzZXQKKyAgIHdpdGggOm1ldGg6YHNldF9zZXFzYCBvciA6bWV0aDpgc2V0X3NlcTJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqYmp1bmsqIGFuZCAqYnBvcHVsYXIqIGF0dHJpYnV0ZXMuCisKICAgIDpjbGFzczpgU2VxdWVuY2VNYXRjaGVyYCBvYmplY3RzIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAgICAuLiBtZXRob2Q6OiBzZXRfc2VxcyhhLCBiKQpAQCAtNDYwLDEzICs0ODMsMTUgQEAKICAgICAgICAgPj4+IGIgPSAiYWJ5Y2RmIgogICAgICAgICA+Pj4gcyA9IFNlcXVlbmNlTWF0Y2hlcihOb25lLCBhLCBiKQogICAgICAgICA+Pj4gZm9yIHRhZywgaTEsIGkyLCBqMSwgajIgaW4gcy5nZXRfb3Bjb2RlcygpOgotICAgICAgICAuLi4gICAgcHJpbnQoKCIlN3MgYVslZDolZF0gKCVzKSBiWyVkOiVkXSAoJXMpIiAlCi0gICAgICAgIC4uLiAgICAgICAgICAgKHRhZywgaTEsIGkyLCBhW2kxOmkyXSwgajEsIGoyLCBiW2oxOmoyXSkpKQotICAgICAgICAgZGVsZXRlIGFbMDoxXSAocSkgYlswOjBdICgpCi0gICAgICAgICAgZXF1YWwgYVsxOjNdIChhYikgYlswOjJdIChhYikKLSAgICAgICAgcmVwbGFjZSBhWzM6NF0gKHgpIGJbMjozXSAoeSkKLSAgICAgICAgICBlcXVhbCBhWzQ6Nl0gKGNkKSBiWzM6NV0gKGNkKQotICAgICAgICAgaW5zZXJ0IGFbNjo2XSAoKSBiWzU6Nl0gKGYpCisgICAgICAgICAgICBwcmludCgnezo3fSAgIGFbe306e31dIC0tPiBiW3t9Ont9XSB7IXI6Pjh9IC0tPiB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgdGFnLCBpMSwgaTIsIGoxLCBqMiwgYVtpMTppMl0sIGJbajE6ajJdKSkKKworCisgICAgICAgIGRlbGV0ZSAgICBhWzA6MV0gLS0+IGJbMDowXSAgICAgICdxJyAtLT4gJycKKyAgICAgICAgZXF1YWwgICAgIGFbMTozXSAtLT4gYlswOjJdICAgICAnYWInIC0tPiAnYWInCisgICAgICAgIHJlcGxhY2UgICBhWzM6NF0gLS0+IGJbMjozXSAgICAgICd4JyAtLT4gJ3knCisgICAgICAgIGVxdWFsICAgICBhWzQ6Nl0gLS0+IGJbMzo1XSAgICAgJ2NkJyAtLT4gJ2NkJworICAgICAgICBpbnNlcnQgICAgYVs2OjZdIC0tPiBiWzU6Nl0gICAgICAgJycgLS0+ICdmJwogCiAKICAgIC4uIG1ldGhvZDo6IGdldF9ncm91cGVkX29wY29kZXMobj0zKQpAQCAtNTI0LDcgKzU0OSw3IEBACiBTZXF1ZW5jZU1hdGNoZXIgRXhhbXBsZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGV4YW1wbGUgY29tcGFyZXMgdHdvIHN0cmluZ3MsIGNvbnNpZGVyaW5nIGJsYW5rcyB0byBiZSAianVuazoiCitUaGlzIGV4YW1wbGUgY29tcGFyZXMgdHdvIHN0cmluZ3MsIGNvbnNpZGVyaW5nIGJsYW5rcyB0byBiZSAianVuayI6CiAKICAgID4+PiBzID0gU2VxdWVuY2VNYXRjaGVyKGxhbWJkYSB4OiB4ID09ICIgIiwKICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICJwcml2YXRlIFRocmVhZCBjdXJyZW50VGhyZWFkOyIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXMucnN0IGIvRG9jL2xpYnJhcnkvZGlzLnJzdAppbmRleCA0YWFlMDZiLi43OWNjNTgzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBkaXMKICAgIDpzeW5vcHNpczogRGlzYXNzZW1ibGVyIGZvciBQeXRob24gYnl0ZWNvZGUuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Rpcy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGRpc2AgbW9kdWxlIHN1cHBvcnRzIHRoZSBhbmFseXNpcyBvZiBDUHl0aG9uIDp0ZXJtOmBieXRlY29kZWAgYnkKIGRpc2Fzc2VtYmxpbmcgaXQuIFRoZSBDUHl0aG9uIGJ5dGVjb2RlIHdoaWNoIHRoaXMgbW9kdWxlIHRha2VzIGFzIGFuCkBAIC0xMiw3ICsxNSw3IEBACiAKIC4uIGltcGwtZGV0YWlsOjoKIAotICAgQnl0ZWNvZGUgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBDUHl0aG9uIGludGVycHJldGVyISAgTm8KKyAgIEJ5dGVjb2RlIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgQ1B5dGhvbiBpbnRlcnByZXRlci4gIE5vCiAgICBndWFyYW50ZWVzIGFyZSBtYWRlIHRoYXQgYnl0ZWNvZGUgd2lsbCBub3QgYmUgYWRkZWQsIHJlbW92ZWQsIG9yIGNoYW5nZWQKICAgIGJldHdlZW4gdmVyc2lvbnMgb2YgUHl0aG9uLiAgVXNlIG9mIHRoaXMgbW9kdWxlIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCB0bwogICAgd29yayBhY3Jvc3MgUHl0aG9uIFZNcyBvciBQeXRob24gcmVsZWFzZXMuCkBAIC0zNiw2ICszOSwyOCBAQAogVGhlIDptb2Q6YGRpc2AgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50czoKIAogCisuLiBmdW5jdGlvbjo6IGNvZGVfaW5mbyh4KQorCisgICBSZXR1cm4gYSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJpbmcgd2l0aCBkZXRhaWxlZCBjb2RlIG9iamVjdCBpbmZvcm1hdGlvbgorICAgZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLCBzb3VyY2UgY29kZSBzdHJpbmcgb3IgY29kZSBvYmplY3QuCisKKyAgIE5vdGUgdGhhdCB0aGUgZXhhY3QgY29udGVudHMgb2YgY29kZSBpbmZvIHN0cmluZ3MgYXJlIGhpZ2hseSBpbXBsZW1lbnRhdGlvbgorICAgZGVwZW5kZW50IGFuZCB0aGV5IG1heSBjaGFuZ2UgYXJiaXRyYXJpbHkgYWNyb3NzIFB5dGhvbiBWTXMgb3IgUHl0aG9uCisgICByZWxlYXNlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKworICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAorICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKworICAgVGhpcyBpcyBhIGNvbnZlbmllbnQgc2hvcnRoYW5kIGZvciBgYHByaW50KGNvZGVfaW5mbyh4KSlgYCwgaW50ZW5kZWQgZm9yCisgICBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgKngqIG9iamVjdC4gICp4KiBjYW4gZGVub3RlIGVpdGhlciBhIG1vZHVsZSwgYSBjbGFzcywgYQpAQCAtMTcyLDE3ICsxOTcsMTcgQEAKICAgIHRocmVlLgogCiAKLS4uIG9wY29kZTo6IFJPVF9GT1VSCi0KLSAgIExpZnRzIHNlY29uZCwgdGhpcmQgYW5kIGZvcnRoIHN0YWNrIGl0ZW0gb25lIHBvc2l0aW9uIHVwLCBtb3ZlcyB0b3AgZG93biB0bwotICAgcG9zaXRpb24gZm91ci4KLQotCiAuLiBvcGNvZGU6OiBEVVBfVE9QCiAKICAgIER1cGxpY2F0ZXMgdGhlIHJlZmVyZW5jZSBvbiB0b3Agb2YgdGhlIHN0YWNrLgogCiAKKy4uIG9wY29kZTo6IERVUF9UT1BfVFdPCisKKyAgIER1cGxpY2F0ZXMgdGhlIHR3byByZWZlcmVuY2VzIG9uIHRvcCBvZiB0aGUgc3RhY2ssIGxlYXZpbmcgdGhlbSBpbiB0aGUKKyAgIHNhbWUgb3JkZXIuCisKKwogKipVbmFyeSBvcGVyYXRpb25zKioKIAogVW5hcnkgb3BlcmF0aW9ucyB0YWtlIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBhcHBseSB0aGUgb3BlcmF0aW9uLCBhbmQgcHVzaCB0aGUKQEAgLTQ0NSw2ICs0NzAsMTggQEAKICAgIGJ5IGBgQ0FMTF9GVU5DVElPTmBgIHRvIGNvbnN0cnVjdCBhIGNsYXNzLgogCiAKKy4uIG9wY29kZTo6IFNFVFVQX1dJVEggKGRlbHRhKQorCisgICBUaGlzIG9wY29kZSBwZXJmb3JtcyBzZXZlcmFsIG9wZXJhdGlvbnMgYmVmb3JlIGEgd2l0aCBibG9jayBzdGFydHMuICBGaXJzdCwKKyAgIGl0IGxvYWRzIDptZXRoOmB+b2JqZWN0Ll9fZXhpdF9fYCBmcm9tIHRoZSBjb250ZXh0IG1hbmFnZXIgYW5kIHB1c2hlcyBpdCBvbnRvCisgICB0aGUgc3RhY2sgZm9yIGxhdGVyIHVzZSBieSA6b3Bjb2RlOmBXSVRIX0NMRUFOVVBgLiAgVGhlbiwKKyAgIDptZXRoOmB+b2JqZWN0Ll9fZW50ZXJfX2AgaXMgY2FsbGVkLCBhbmQgYSBmaW5hbGx5IGJsb2NrIHBvaW50aW5nIHRvICpkZWx0YSoKKyAgIGlzIHB1c2hlZC4gIEZpbmFsbHksIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgZW50ZXIgbWV0aG9kIGlzIHB1c2hlZCBvbnRvCisgICB0aGUgc3RhY2suICBUaGUgbmV4dCBvcGNvZGUgd2lsbCBlaXRoZXIgaWdub3JlIGl0ICg6b3Bjb2RlOmBQT1BfVE9QYCksIG9yCisgICBzdG9yZSBpdCBpbiAoYSkgdmFyaWFibGUocykgKDpvcGNvZGU6YFNUT1JFX0ZBU1RgLCA6b3Bjb2RlOmBTVE9SRV9OQU1FYCwgb3IKKyAgIDpvcGNvZGU6YFVOUEFDS19TRVFVRU5DRWApLgorCisKIC4uIG9wY29kZTo6IFdJVEhfQ0xFQU5VUAogCiAgICBDbGVhbnMgdXAgdGhlIHN0YWNrIHdoZW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGJsb2NrIGV4aXRzLiAgVE9TIGlzCkBAIC01MDcsMTIgKzU0NCw2IEBACiAgICBhcmUgcHV0IG9udG8gdGhlIHN0YWNrIHJpZ2h0LXRvLWxlZnQuCiAKIAotLi4gb3Bjb2RlOjogRFVQX1RPUFggKGNvdW50KQotCi0gICBEdXBsaWNhdGUgKmNvdW50KiBpdGVtcywga2VlcGluZyB0aGVtIGluIHRoZSBzYW1lIG9yZGVyLiBEdWUgdG8gaW1wbGVtZW50YXRpb24KLSAgIGxpbWl0cywgKmNvdW50KiBzaG91bGQgYmUgYmV0d2VlbiAxIGFuZCA1IGluY2x1c2l2ZS4KLQotCiAuLiBvcGNvZGU6OiBTVE9SRV9BVFRSIChuYW1laSkKIAogICAgSW1wbGVtZW50cyBgYFRPUy5uYW1lID0gVE9TMWBgLCB3aGVyZSAqbmFtZWkqIGlzIHRoZSBpbmRleCBvZiBuYW1lIGluCkBAIC02OTUsNiArNzI2LDEyIEBACiAgICBzdG9yYWdlLgogCiAKKy4uIG9wY29kZTo6IERFTEVURV9ERVJFRiAoaSkKKworICAgRW1wdGllcyB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUgc3RvcmFnZS4KKyAgIFVzZWQgYnkgdGhlIDprZXl3b3JkOmBkZWxgIHN0YXRlbWVudC4KKworCiAuLiBvcGNvZGU6OiBSQUlTRV9WQVJBUkdTIChhcmdjKQogCiAgICBSYWlzZXMgYW4gZXhjZXB0aW9uLiAqYXJnYyogaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyB0byB0aGUgcmFpc2UKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKaW5kZXggNWY0MDQzMi4uMjlmYmQ2NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKQEAgLTQ1Miw4ICs0NTIsOSBAQAogICB3aXRoIGFuIGFscGhhbnVtZXJpYyBpcyB0YWtlbiB0byBiZSB0aGUgc3RhcnQgb2YgdGhlIGV4Y2VwdGlvbiBkZXRhaWwuICBPZgogICBjb3Vyc2UgdGhpcyBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IgZ2VudWluZSB0cmFjZWJhY2tzLgogCi0qIFdoZW4gdGhlIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGRvY3Rlc3Qgb3B0aW9uIGlzIGlzIHNwZWNpZmllZCwKLSAgZXZlcnl0aGluZyBmb2xsb3dpbmcgdGhlIGxlZnRtb3N0IGNvbG9uIGlzIGlnbm9yZWQuCisqIFdoZW4gdGhlIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGRvY3Rlc3Qgb3B0aW9uIGlzIHNwZWNpZmllZCwKKyAgZXZlcnl0aGluZyBmb2xsb3dpbmcgdGhlIGxlZnRtb3N0IGNvbG9uIGFuZCBhbnkgbW9kdWxlIGluZm9ybWF0aW9uIGluIHRoZQorICBleGNlcHRpb24gbmFtZSBpcyBpZ25vcmVkLgogCiAqIFRoZSBpbnRlcmFjdGl2ZSBzaGVsbCBvbWl0cyB0aGUgdHJhY2ViYWNrIGhlYWRlciBsaW5lIGZvciBzb21lCiAgIDpleGM6YFN5bnRheEVycm9yYFwgcy4gIEJ1dCBkb2N0ZXN0IHVzZXMgdGhlIHRyYWNlYmFjayBoZWFkZXIgbGluZSB0bwpAQCAtNTQzLDIwICs1NDQsMzggQEAKICAgIGV4Y2VwdGlvbiByYWlzZWQgaXMgYGBWYWx1ZUVycm9yOiAzKjE0YGAsIGJ1dCB3aWxsIGZhaWwsIGUuZy4sIGlmCiAgICA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KIAotICAgTm90ZSB0aGF0IGEgc2ltaWxhciBlZmZlY3QgY2FuIGJlIG9idGFpbmVkIHVzaW5nIDpjb25zdDpgRUxMSVBTSVNgLCBhbmQKLSAgIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIG1heSBnbyBhd2F5IHdoZW4gUHl0aG9uIHJlbGVhc2VzIHByaW9yIHRvIDIuNAotICAgYmVjb21lIHVuaW50ZXJlc3RpbmcuICBVbnRpbCB0aGVuLCA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBpcyB0aGUgb25seQotICAgY2xlYXIgd2F5IHRvIHdyaXRlIGEgZG9jdGVzdCB0aGF0IGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUgZXhjZXB0aW9uIGRldGFpbCB5ZXQKLSAgIGNvbnRpbnVlcyB0byBwYXNzIHVuZGVyIFB5dGhvbiByZWxlYXNlcyBwcmlvciB0byAyLjQgKGRvY3Rlc3QgZGlyZWN0aXZlcyBhcHBlYXIKLSAgIHRvIGJlIGNvbW1lbnRzIHRvIHRoZW0pLiAgRm9yIGV4YW1wbGUsIDo6CisgICBJdCB3aWxsIGFsc28gaWdub3JlIHRoZSBtb2R1bGUgbmFtZSB1c2VkIGluIFB5dGhvbiAzIGRvY3Rlc3QgcmVwb3J0cy4gSGVuY2UKKyAgIGJvdGggdGhlc2UgdmFyaWF0aW9ucyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB0ZXN0IGlzIHJ1biB1bmRlcgorICAgUHl0aG9uIDIuNyBvciBQeXRob24gMy4yIChvciBsYXRlciB2ZXJzaW9ucyk6CisKKyAgICAgID4+PiByYWlzZSBDdXN0b21FcnJvcignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEN1c3RvbUVycm9yOiBtZXNzYWdlCisKKyAgICAgID4+PiByYWlzZSBDdXN0b21FcnJvcignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIG15X21vZHVsZS5DdXN0b21FcnJvcjogbWVzc2FnZQorCisgICBOb3RlIHRoYXQgOmNvbnN0OmBFTExJUFNJU2AgY2FuIGFsc28gYmUgdXNlZCB0byBpZ25vcmUgdGhlCisgICBkZXRhaWxzIG9mIHRoZSBleGNlcHRpb24gbWVzc2FnZSwgYnV0IHN1Y2ggYSB0ZXN0IG1heSBzdGlsbCBmYWlsIGJhc2VkCisgICBvbiB3aGV0aGVyIG9yIG5vdCB0aGUgbW9kdWxlIGRldGFpbHMgYXJlIHByaW50ZWQgYXMgcGFydCBvZiB0aGUKKyAgIGV4Y2VwdGlvbiBuYW1lLiBVc2luZyA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBhbmQgdGhlIGRldGFpbHMKKyAgIGZyb20gUHl0aG9uIDIuMyBpcyBhbHNvIHRoZSBvbmx5IGNsZWFyIHdheSB0byB3cml0ZSBhIGRvY3Rlc3QgdGhhdCBkb2Vzbid0CisgICBjYXJlIGFib3V0IHRoZSBleGNlcHRpb24gZGV0YWlsIHlldCBjb250aW51ZXMgdG8gcGFzcyB1bmRlciBQeXRob24gMi4zIG9yCisgICBlYXJsaWVyICh0aG9zZSByZWxlYXNlcyBkbyBub3Qgc3VwcG9ydCBkb2N0ZXN0IGRpcmVjdGl2ZXMgYW5kIGlnbm9yZSB0aGVtCisgICBhcyBpcnJlbGV2YW50IGNvbW1lbnRzKS4gRm9yIGV4YW1wbGUsIDo6CiAKICAgICAgID4+PiAoMSwgMilbM10gPSAnbW9vJyAjZG9jdGVzdDogK0lHTk9SRV9FWENFUFRJT05fREVUQUlMCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KICAgICAgIFR5cGVFcnJvcjogb2JqZWN0IGRvZXNuJ3Qgc3VwcG9ydCBpdGVtIGFzc2lnbm1lbnQKIAotICAgcGFzc2VzIHVuZGVyIFB5dGhvbiAyLjQgYW5kIFB5dGhvbiAyLjMuICBUaGUgZGV0YWlsIGNoYW5nZWQgaW4gMi40LCB0byBzYXkgImRvZXMKLSAgIG5vdCIgaW5zdGVhZCBvZiAiZG9lc24ndCIuCisgICBwYXNzZXMgdW5kZXIgUHl0aG9uIDIuMyBhbmQgbGF0ZXIgUHl0aG9uIHZlcnNpb25zLCBldmVuIHRob3VnaCB0aGUgZGV0YWlsCisgICBjaGFuZ2VkIGluIFB5dGhvbiAyLjQgdG8gc2F5ICJkb2VzIG5vdCIgaW5zdGVhZCBvZiAiZG9lc24ndCIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICA6Y29uc3Q6YElHTk9SRV9FWENFUFRJT05fREVUQUlMYCBub3cgYWxzbyBpZ25vcmVzIGFueSBpbmZvcm1hdGlvbiByZWxhdGluZworICAgICAgdG8gdGhlIG1vZHVsZSBjb250YWluaW5nIHRoZSBleGNlcHRpb24gdW5kZXIgdGVzdC4KIAogCiAuLiBkYXRhOjogU0tJUApAQCAtNjcxLDcgKzY5MCw2IEBACiBmdW5jdGlvbnMgdGhhdCBydW4gZG9jdGVzdHMsIGVzdGFibGlzaGluZyBkaWZmZXJlbnQgZGVmYXVsdHMuICBJbiBzdWNoIGNhc2VzLAogZGlzYWJsaW5nIGFuIG9wdGlvbiB2aWEgYGAtYGAgaW4gYSBkaXJlY3RpdmUgY2FuIGJlIHVzZWZ1bC4KIAotCiBUaGVyZSdzIGFsc28gYSB3YXkgdG8gcmVnaXN0ZXIgbmV3IG9wdGlvbiBmbGFnIG5hbWVzLCBhbHRob3VnaCB0aGlzIGlzbid0IHVzZWZ1bAogdW5sZXNzIHlvdSBpbnRlbmQgdG8gZXh0ZW5kIDptb2Q6YGRvY3Rlc3RgIGludGVybmFscyB2aWEgc3ViY2xhc3Npbmc6CiAKQEAgLTg5NSwxOCArOTEzLDE2IEBACiBBcyB5b3VyIGNvbGxlY3Rpb24gb2YgZG9jdGVzdCdlZCBtb2R1bGVzIGdyb3dzLCB5b3UnbGwgd2FudCBhIHdheSB0byBydW4gYWxsCiB0aGVpciBkb2N0ZXN0cyBzeXN0ZW1hdGljYWxseS4gIDptb2Q6YGRvY3Rlc3RgIHByb3ZpZGVzIHR3byBmdW5jdGlvbnMgdGhhdCBjYW4KIGJlIHVzZWQgdG8gY3JlYXRlIDptb2Q6YHVuaXR0ZXN0YCB0ZXN0IHN1aXRlcyBmcm9tIG1vZHVsZXMgYW5kIHRleHQgZmlsZXMKLWNvbnRhaW5pbmcgZG9jdGVzdHMuICBUaGVzZSB0ZXN0IHN1aXRlcyBjYW4gdGhlbiBiZSBydW4gdXNpbmcgOm1vZDpgdW5pdHRlc3RgCi10ZXN0IHJ1bm5lcnM6OgorY29udGFpbmluZyBkb2N0ZXN0cy4gIFRvIGludGVncmF0ZSB3aXRoIDptb2Q6YHVuaXR0ZXN0YCB0ZXN0IGRpc2NvdmVyeSwgaW5jbHVkZQorYSA6ZnVuYzpgbG9hZF90ZXN0c2AgZnVuY3Rpb24gaW4geW91ciB0ZXN0IG1vZHVsZTo6CiAKICAgIGltcG9ydCB1bml0dGVzdAogICAgaW1wb3J0IGRvY3Rlc3QKLSAgIGltcG9ydCBteV9tb2R1bGVfd2l0aF9kb2N0ZXN0cywgYW5kX2Fub3RoZXIKKyAgIGltcG9ydCBteV9tb2R1bGVfd2l0aF9kb2N0ZXN0cwogCi0gICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICBmb3IgbW9kIGluIG15X21vZHVsZV93aXRoX2RvY3Rlc3RzLCBhbmRfYW5vdGhlcjoKLSAgICAgICBzdWl0ZS5hZGRUZXN0KGRvY3Rlc3QuRG9jVGVzdFN1aXRlKG1vZCkpCi0gICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCi0gICBydW5uZXIucnVuKHN1aXRlKQorICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgaWdub3JlKToKKyAgICAgICB0ZXN0cy5hZGRUZXN0cyhkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShteV9tb2R1bGVfd2l0aF9kb2N0ZXN0cykpCisgICAgICAgcmV0dXJuIHRlc3RzCiAKIFRoZXJlIGFyZSB0d28gbWFpbiBmdW5jdGlvbnMgZm9yIGNyZWF0aW5nIDpjbGFzczpgdW5pdHRlc3QuVGVzdFN1aXRlYCBpbnN0YW5jZXMKIGZyb20gdGV4dCBmaWxlcyBhbmQgbW9kdWxlcyB3aXRoIGRvY3Rlc3RzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLnJzdCBiL0RvYy9saWJyYXJ5L2R1bW15X3RocmVhZGluZy5yc3QKaW5kZXggMDY1OGRmMi4uYjU3ODMyNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZHVtbXlfdGhyZWFkaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kdW1teV90aHJlYWRpbmcucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogZHVtbXlfdGhyZWFkaW5nCiAgICA6c3lub3BzaXM6IERyb3AtaW4gcmVwbGFjZW1lbnQgZm9yIHRoZSB0aHJlYWRpbmcgbW9kdWxlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9kdW1teV90aHJlYWRpbmcucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGEgZHVwbGljYXRlIGludGVyZmFjZSB0byB0aGUgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGUuICBJdAogaXMgbWVhbnQgdG8gYmUgaW1wb3J0ZWQgd2hlbiB0aGUgOm1vZDpgX3RocmVhZGAgbW9kdWxlIGlzIG5vdCBwcm92aWRlZCBvbiBhCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKaW5kZXggYzFiMTZkYS4uMzJjZWNmMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdApAQCAtMTEsNiArMTEsMTIgQEAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvZW1haWwtc2ltcGxlLnB5CiAKIAorQW5kIHBhcnNpbmcgUkZDODIyIGhlYWRlcnMgY2FuIGVhc2lseSBiZSBkb25lIGJ5IHRoZSBwYXJzZShmaWxlbmFtZSkgb3IKK3BhcnNlc3RyKG1lc3NhZ2VfYXNfc3RyaW5nKSBtZXRob2RzIG9mIHRoZSBQYXJzZXIoKSBjbGFzczoKKworLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9lbWFpbC1oZWFkZXJzLnB5CisKKwogSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHNlbmQgYSBNSU1FIG1lc3NhZ2UgY29udGFpbmluZyBhIGJ1bmNoIG9mIGZhbWlseQogcGljdHVyZXMgdGhhdCBtYXkgYmUgcmVzaWRpbmcgaW4gYSBkaXJlY3Rvcnk6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0CmluZGV4IDkzMDkwNWEuLjg1YjMyZmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdApAQCAtMjIsNiArMjIsMTIgQEAKIHJlc3VsdCBpbiBjaGFuZ2VzIHRvIHRoZSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBhcyBkZWZhdWx0cyBhcmUKIGZpbGxlZCBpbi4KIAorOmNsYXNzOmBieXRlc2Agb3V0cHV0IGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcgdGhlIDpjbGFzczpgQnl0ZXNHZW5lcmF0b3JgIGNsYXNzLgorSWYgdGhlIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSBjb250YWlucyBub24tQVNDSUkgYnl0ZXMsIHRoaXMgZ2VuZXJhdG9yJ3MKKzptZXRoOmB+Qnl0ZXNHZW5lcmF0b3IuZmxhdHRlbmAgbWV0aG9kIHdpbGwgZW1pdCB0aGUgb3JpZ2luYWwgYnl0ZXMuICBQYXJzaW5nIGEKK2JpbmFyeSBtZXNzYWdlIGFuZCB0aGVuIGZsYXR0ZW5pbmcgaXQgd2l0aCA6Y2xhc3M6YEJ5dGVzR2VuZXJhdG9yYCBzaG91bGQgYmUKK2lkZW1wb3RlbnQgZm9yIHN0YW5kYXJkcyBjb21wbGlhbnQgbWVzc2FnZXMuCisKIEhlcmUgYXJlIHRoZSBwdWJsaWMgbWV0aG9kcyBvZiB0aGUgOmNsYXNzOmBHZW5lcmF0b3JgIGNsYXNzLCBpbXBvcnRlZCBmcm9tIHRoZQogOm1vZDpgZW1haWwuZ2VuZXJhdG9yYCBtb2R1bGU6CiAKQEAgLTUwLDcgKzU2LDcgQEAKICAgIFRoZSBvdGhlciBwdWJsaWMgOmNsYXNzOmBHZW5lcmF0b3JgIG1ldGhvZHMgYXJlOgogCiAKLSAgIC4uIG1ldGhvZDo6IGZsYXR0ZW4obXNnLCB1bml4ZnJvbT1GYWxzZSkKKyAgIC4uIG1ldGhvZDo6IGZsYXR0ZW4obXNnLCB1bml4ZnJvbT1GYWxzZSwgbGluZXNlcD0nXFxuJykKIAogICAgICAgUHJpbnQgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSByb290ZWQgYXQKICAgICAgICptc2cqIHRvIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpZWQgd2hlbiB0aGUgOmNsYXNzOmBHZW5lcmF0b3JgIGluc3RhbmNlCkBAIC02NSw2ICs3MSwyMSBAQAogCiAgICAgICBOb3RlIHRoYXQgZm9yIHN1YnBhcnRzLCBubyBlbnZlbG9wZSBoZWFkZXIgaXMgZXZlciBwcmludGVkLgogCisgICAgICBPcHRpb25hbCAqbGluZXNlcCogc3BlY2lmaWVzIHRoZSBsaW5lIHNlcGFyYXRvciBjaGFyYWN0ZXIgdXNlZCB0bworICAgICAgdGVybWluYXRlIGxpbmVzIGluIHRoZSBvdXRwdXQuICBJdCBkZWZhdWx0cyB0byBgYFxuYGAgYmVjYXVzZSB0aGF0IGlzCisgICAgICB0aGUgbW9zdCB1c2VmdWwgdmFsdWUgZm9yIFB5dGhvbiBhcHBsaWNhdGlvbiBjb2RlIChvdGhlciBsaWJyYXJ5IHBhY2thZ2VzCisgICAgICBleHBlY3QgYGBcbmBgIHNlcGFyYXRlZCBsaW5lcykuICBgYGxpbmVzZXA9XHJcbmBgIGNhbiBiZSB1c2VkIHRvCisgICAgICBnZW5lcmF0ZSBvdXRwdXQgd2l0aCBSRkMtY29tcGxpYW50IGxpbmUgc2VwYXJhdG9ycy4KKworICAgICAgTWVzc2FnZXMgcGFyc2VkIHdpdGggYSBCeXRlcyBwYXJzZXIgdGhhdCBoYXZlIGEKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nYCBvZiA4Yml0IHdpbGwgYmUgY29udmVydGVkIHRvIGEKKyAgICAgIHVzZSBhIDdiaXQgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZy4gIE5vbi1BU0NJSSBieXRlcyBpbiB0aGUgaGVhZGVycworICAgICAgd2lsbCBiZSA6cmZjOmAyMDQ3YCBlbmNvZGVkIHdpdGggYSBjaGFyc2V0IG9mIGB1bmtub3duLThiaXRgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgcmUtZW5jb2RpbmcgOGJpdCBtZXNzYWdlIGJvZGllcywgYW5kIHRoZSAqbGluZXNlcCoKKyAgICAgICAgIGFyZ3VtZW50LgorCiAgICAuLiBtZXRob2Q6OiBjbG9uZShmcCkKIAogICAgICAgUmV0dXJuIGFuIGluZGVwZW5kZW50IGNsb25lIG9mIHRoaXMgOmNsYXNzOmBHZW5lcmF0b3JgIGluc3RhbmNlIHdpdGggdGhlCkBAIC03NiwxMSArOTcsODEgQEAKICAgICAgIDpjbGFzczpgR2VuZXJhdG9yYCdzIGNvbnN0cnVjdG9yLiAgVGhpcyBwcm92aWRlcyBqdXN0IGVub3VnaCBmaWxlLWxpa2UgQVBJCiAgICAgICBmb3IgOmNsYXNzOmBHZW5lcmF0b3JgIGluc3RhbmNlcyB0byBiZSB1c2VkIGluIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uLgogCi1BcyBhIGNvbnZlbmllbmNlLCBzZWUgdGhlIG1ldGhvZHMgOm1ldGg6YE1lc3NhZ2UuYXNfc3RyaW5nYCBhbmQKLWBgc3RyKGFNZXNzYWdlKWBgLCBhLmsuYS4gOm1ldGg6YE1lc3NhZ2UuX19zdHJfX2AsIHdoaWNoIHNpbXBsaWZ5IHRoZSBnZW5lcmF0aW9uCi1vZiBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtZXNzYWdlIG9iamVjdC4gIEZvciBtb3JlIGRldGFpbCwgc2VlCitBcyBhIGNvbnZlbmllbmNlLCBzZWUgdGhlIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgbWV0aG9kcworOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfc3RyaW5nYCBhbmQgYGBzdHIoYU1lc3NhZ2UpYGAsIGEuay5hLgorOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19zdHJfX2AsIHdoaWNoIHNpbXBsaWZ5IHRoZSBnZW5lcmF0aW9uIG9mIGEKK2Zvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBtZXNzYWdlIG9iamVjdC4gIEZvciBtb3JlIGRldGFpbCwgc2VlCiA6bW9kOmBlbWFpbC5tZXNzYWdlYC4KIAorLi4gY2xhc3M6OiBCeXRlc0dlbmVyYXRvcihvdXRmcCwgbWFuZ2xlX2Zyb21fPVRydWUsIG1heGhlYWRlcmxlbj03OCkKKworICAgVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAgY2xhc3MgdGFrZXMgYSBiaW5hcnkKKyAgIDp0ZXJtOmBmaWxlLWxpa2Ugb2JqZWN0YCBjYWxsZWQgKm91dGZwKiBmb3IgYW4gYXJndW1lbnQuICAqb3V0ZnAqIG11c3QKKyAgIHN1cHBvcnQgYSA6bWV0aDpgd3JpdGVgIG1ldGhvZCB0aGF0IGFjY2VwdHMgYmluYXJ5IGRhdGEuCisKKyAgIE9wdGlvbmFsICptYW5nbGVfZnJvbV8qIGlzIGEgZmxhZyB0aGF0LCB3aGVuIGBgVHJ1ZWBgLCBwdXRzIGEgYGA+YGAKKyAgIGNoYXJhY3RlciBpbiBmcm9udCBvZiBhbnkgbGluZSBpbiB0aGUgYm9keSB0aGF0IHN0YXJ0cyBleGFjdGx5IGFzIGBgRnJvbWBgLAorICAgaS5lLiBgYEZyb21gYCBmb2xsb3dlZCBieSBhIHNwYWNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUuICBUaGlzIGlzIHRoZQorICAgb25seSBndWFyYW50ZWVkIHBvcnRhYmxlIHdheSB0byBhdm9pZCBoYXZpbmcgc3VjaCBsaW5lcyBiZSBtaXN0YWtlbiBmb3IgYQorICAgVW5peCBtYWlsYm94IGZvcm1hdCBlbnZlbG9wZSBoZWFkZXIgc2VwYXJhdG9yIChzZWUgYFdIWSBUSEUgQ09OVEVOVC1MRU5HVEgKKyAgIEZPUk1BVCBJUyBCQUQgPGh0dHA6Ly93d3cuand6Lm9yZy9kb2MvY29udGVudC1sZW5ndGguaHRtbD5gXyBmb3IgZGV0YWlscykuCisgICAqbWFuZ2xlX2Zyb21fKiBkZWZhdWx0cyB0byBgYFRydWVgYCwgYnV0IHlvdSBtaWdodCB3YW50IHRvIHNldCB0aGlzIHRvCisgICBgYEZhbHNlYGAgaWYgeW91IGFyZSBub3Qgd3JpdGluZyBVbml4IG1haWxib3ggZm9ybWF0IGZpbGVzLgorCisgICBPcHRpb25hbCAqbWF4aGVhZGVybGVuKiBzcGVjaWZpZXMgdGhlIGxvbmdlc3QgbGVuZ3RoIGZvciBhIG5vbi1jb250aW51ZWQKKyAgIGhlYWRlci4gIFdoZW4gYSBoZWFkZXIgbGluZSBpcyBsb25nZXIgdGhhbiAqbWF4aGVhZGVybGVuKiAoaW4gY2hhcmFjdGVycywKKyAgIHdpdGggdGFicyBleHBhbmRlZCB0byA4IHNwYWNlcyksIHRoZSBoZWFkZXIgd2lsbCBiZSBzcGxpdCBhcyBkZWZpbmVkIGluIHRoZQorICAgOmNsYXNzOmB+ZW1haWwuaGVhZGVyLkhlYWRlcmAgY2xhc3MuICBTZXQgdG8gemVybyB0byBkaXNhYmxlIGhlYWRlcgorICAgd3JhcHBpbmcuICBUaGUgZGVmYXVsdCBpcyA3OCwgYXMgcmVjb21tZW5kZWQgKGJ1dCBub3QgcmVxdWlyZWQpIGJ5CisgICA6cmZjOmAyODIyYC4KKworICAgVGhlIG90aGVyIHB1YmxpYyA6Y2xhc3M6YEJ5dGVzR2VuZXJhdG9yYCBtZXRob2RzIGFyZToKKworCisgICAuLiBtZXRob2Q6OiBmbGF0dGVuKG1zZywgdW5peGZyb209RmFsc2UsIGxpbmVzZXA9J1xuJykKKworICAgICAgUHJpbnQgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSByb290ZWQKKyAgICAgIGF0ICptc2cqIHRvIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpZWQgd2hlbiB0aGUgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAKKyAgICAgIGluc3RhbmNlIHdhcyBjcmVhdGVkLiAgU3VicGFydHMgYXJlIHZpc2l0ZWQgZGVwdGgtZmlyc3QgYW5kIHRoZSByZXN1bHRpbmcKKyAgICAgIHRleHQgd2lsbCBiZSBwcm9wZXJseSBNSU1FIGVuY29kZWQuICBJZiB0aGUgaW5wdXQgdGhhdCBjcmVhdGVkIHRoZSAqbXNnKgorICAgICAgY29udGFpbmVkIGJ5dGVzIHdpdGggdGhlIGhpZ2ggYml0IHNldCBhbmQgdGhvc2UgYnl0ZXMgaGF2ZSBub3QgYmVlbgorICAgICAgbW9kaWZpZWQsIHRoZXkgd2lsbCBiZSBjb3BpZWQgZmFpdGhmdWxseSB0byB0aGUgb3V0cHV0LCBldmVuIGlmIGRvaW5nIHNvCisgICAgICBpcyBub3Qgc3RyaWN0bHkgUkZDIGNvbXBsaWFudC4gIChUbyBwcm9kdWNlIHN0cmljdGx5IFJGQyBjb21wbGlhbnQKKyAgICAgIG91dHB1dCwgdXNlIHRoZSA6Y2xhc3M6YEdlbmVyYXRvcmAgY2xhc3MuKQorCisgICAgICBNZXNzYWdlcyBwYXJzZWQgd2l0aCBhIEJ5dGVzIHBhcnNlciB0aGF0IGhhdmUgYQorICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgIG9mIDhiaXQgd2lsbCBiZSByZWNvbnN0cnVjdGVkCisgICAgICBhcyA4Yml0IGlmIHRoZXkgaGF2ZSBub3QgYmVlbiBtb2RpZmllZC4KKworICAgICAgT3B0aW9uYWwgKnVuaXhmcm9tKiBpcyBhIGZsYWcgdGhhdCBmb3JjZXMgdGhlIHByaW50aW5nIG9mIHRoZSBlbnZlbG9wZQorICAgICAgaGVhZGVyIGRlbGltaXRlciBiZWZvcmUgdGhlIGZpcnN0IDpyZmM6YDI4MjJgIGhlYWRlciBvZiB0aGUgcm9vdCBtZXNzYWdlCisgICAgICBvYmplY3QuICBJZiB0aGUgcm9vdCBvYmplY3QgaGFzIG5vIGVudmVsb3BlIGhlYWRlciwgYSBzdGFuZGFyZCBvbmUgaXMKKyAgICAgIGNyYWZ0ZWQuICBCeSBkZWZhdWx0LCB0aGlzIGlzIHNldCB0byBgYEZhbHNlYGAgdG8gaW5oaWJpdCB0aGUgcHJpbnRpbmcgb2YKKyAgICAgIHRoZSBlbnZlbG9wZSBkZWxpbWl0ZXIuCisKKyAgICAgIE5vdGUgdGhhdCBmb3Igc3VicGFydHMsIG5vIGVudmVsb3BlIGhlYWRlciBpcyBldmVyIHByaW50ZWQuCisKKyAgICAgIE9wdGlvbmFsICpsaW5lc2VwKiBzcGVjaWZpZXMgdGhlIGxpbmUgc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIHRvCisgICAgICB0ZXJtaW5hdGUgbGluZXMgaW4gdGhlIG91dHB1dC4gIEl0IGRlZmF1bHRzIHRvIGBgXG5gYCBiZWNhdXNlIHRoYXQgaXMKKyAgICAgIHRoZSBtb3N0IHVzZWZ1bCB2YWx1ZSBmb3IgUHl0aG9uIGFwcGxpY2F0aW9uIGNvZGUgKG90aGVyIGxpYnJhcnkgcGFja2FnZXMKKyAgICAgIGV4cGVjdCBgYFxuYGAgc2VwYXJhdGVkIGxpbmVzKS4gIGBgbGluZXNlcD1cclxuYGAgY2FuIGJlIHVzZWQgdG8KKyAgICAgIGdlbmVyYXRlIG91dHB1dCB3aXRoIFJGQy1jb21wbGlhbnQgbGluZSBzZXBhcmF0b3JzLgorCisgICAuLiBtZXRob2Q6OiBjbG9uZShmcCkKKworICAgICAgUmV0dXJuIGFuIGluZGVwZW5kZW50IGNsb25lIG9mIHRoaXMgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAgaW5zdGFuY2Ugd2l0aAorICAgICAgdGhlIGV4YWN0IHNhbWUgb3B0aW9ucy4KKworICAgLi4gbWV0aG9kOjogd3JpdGUocykKKworICAgICAgV3JpdGUgdGhlIHN0cmluZyAqcyogdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBvYmplY3QuICAqcyogaXMgZW5jb2RlZCB1c2luZworICAgICAgdGhlIGBgQVNDSUlgYCBjb2RlYyBhbmQgd3JpdHRlbiB0byB0aGUgKndyaXRlKiBtZXRob2Qgb2YgdGhlICAqb3V0ZnAqCisgICAgICAqb3V0ZnAqIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBCeXRlc0dlbmVyYXRvcmAncyBjb25zdHJ1Y3Rvci4gIFRoaXMKKyAgICAgIHByb3ZpZGVzIGp1c3QgZW5vdWdoIGZpbGUtbGlrZSBBUEkgZm9yIDpjbGFzczpgQnl0ZXNHZW5lcmF0b3JgIGluc3RhbmNlcworICAgICAgdG8gYmUgdXNlZCBpbiB0aGUgOmZ1bmM6YHByaW50YCBmdW5jdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFRoZSA6bW9kOmBlbWFpbC5nZW5lcmF0b3JgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIGEgZGVyaXZlZCBjbGFzcywgY2FsbGVkCiA6Y2xhc3M6YERlY29kZWRHZW5lcmF0b3JgIHdoaWNoIGlzIGxpa2UgdGhlIDpjbGFzczpgR2VuZXJhdG9yYCBiYXNlIGNsYXNzLAogZXhjZXB0IHRoYXQgbm9uLVwgOm1pbWV0eXBlOmB0ZXh0YCBwYXJ0cyBhcmUgc3Vic3RpdHV0ZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlci5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5oZWFkZXIucnN0CmluZGV4IDIyMDI2MzcuLmMzODVjZjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmhlYWRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuaGVhZGVyLnJzdApAQCAtMTA0LDI1ICsxMDQsNDggQEAKICAgICAgIE9wdGlvbmFsICplcnJvcnMqIGlzIHBhc3NlZCBhcyB0aGUgZXJyb3JzIGFyZ3VtZW50IHRvIHRoZSBkZWNvZGUgY2FsbAogICAgICAgaWYgKnMqIGlzIGEgYnl0ZSBzdHJpbmcuCiAKLSAgIC4uIG1ldGhvZDo6IGVuY29kZShzcGxpdGNoYXJzPSc7LCBcXHQnLCBtYXhsaW5lbGVuPU5vbmUpCisKKyAgIC4uIG1ldGhvZDo6IGVuY29kZShzcGxpdGNoYXJzPSc7LCBcXHQnLCBtYXhsaW5lbGVuPU5vbmUsIGxpbmVzZXA9J1xcbicpCiAKICAgICAgIEVuY29kZSBhIG1lc3NhZ2UgaGVhZGVyIGludG8gYW4gUkZDLWNvbXBsaWFudCBmb3JtYXQsIHBvc3NpYmx5IHdyYXBwaW5nCiAgICAgICBsb25nIGxpbmVzIGFuZCBlbmNhcHN1bGF0aW5nIG5vbi1BU0NJSSBwYXJ0cyBpbiBiYXNlNjQgb3IgcXVvdGVkLXByaW50YWJsZQotICAgICAgZW5jb2RpbmdzLiAgT3B0aW9uYWwgKnNwbGl0Y2hhcnMqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0bwotICAgICAgc3BsaXQgbG9uZyBBU0NJSSBsaW5lcyBvbiwgaW4gcm91Z2ggc3VwcG9ydCBvZiA6cmZjOmAyODIyYCdzICpoaWdoZXN0Ci0gICAgICBsZXZlbCBzeW50YWN0aWMgYnJlYWtzKi4gIFRoaXMgZG9lc24ndCBhZmZlY3QgOnJmYzpgMjA0N2AgZW5jb2RlZCBsaW5lcy4KKyAgICAgIGVuY29kaW5ncy4KKworICAgICAgT3B0aW9uYWwgKnNwbGl0Y2hhcnMqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB3aGljaCBzaG91bGQgYmUKKyAgICAgIGdpdmVuIGV4dHJhIHdlaWdodCBieSB0aGUgc3BsaXR0aW5nIGFsZ29yaXRobSBkdXJpbmcgbm9ybWFsIGhlYWRlcgorICAgICAgd3JhcHBpbmcuICBUaGlzIGlzIGluIHZlcnkgcm91Z2ggc3VwcG9ydCBvZiA6UkZDOmAyODIyYFwncyAnaGlnaGVyIGxldmVsCisgICAgICBzeW50YWN0aWMgYnJlYWtzJzogIHNwbGl0IHBvaW50cyBwcmVjZWRlZCBieSBhIHNwbGl0Y2hhciBhcmUgcHJlZmVycmVkCisgICAgICBkdXJpbmcgbGluZSBzcGxpdHRpbmcsIHdpdGggdGhlIGNoYXJhY3RlcnMgcHJlZmVycmVkIGluIHRoZSBvcmRlciBpbgorICAgICAgd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIHN0cmluZy4gIFNwYWNlIGFuZCB0YWIgbWF5IGJlIGluY2x1ZGVkIGluIHRoZQorICAgICAgc3RyaW5nIHRvIGluZGljYXRlIHdoZXRoZXIgcHJlZmVyZW5jZSBzaG91bGQgYmUgZ2l2ZW4gdG8gb25lIG92ZXIgdGhlCisgICAgICBvdGhlciBhcyBhIHNwbGl0IHBvaW50IHdoZW4gb3RoZXIgc3BsaXQgY2hhcnMgZG8gbm90IGFwcGVhciBpbiB0aGUgbGluZQorICAgICAgYmVpbmcgc3BsaXQuICBTcGxpdGNoYXJzIGRvZXMgbm90IGFmZmVjdCA6UkZDOmAyMDQ3YCBlbmNvZGVkIGxpbmVzLgogCiAgICAgICAqbWF4bGluZWxlbiosIGlmIGdpdmVuLCBvdmVycmlkZXMgdGhlIGluc3RhbmNlJ3MgdmFsdWUgZm9yIHRoZSBtYXhpbXVtCiAgICAgICBsaW5lIGxlbmd0aC4KIAorICAgICAgKmxpbmVzZXAqIHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIHNlcGFyYXRlIHRoZSBsaW5lcyBvZiB0aGUKKyAgICAgIGZvbGRlZCBoZWFkZXIuICBJdCBkZWZhdWx0cyB0byB0aGUgbW9zdCB1c2VmdWwgdmFsdWUgZm9yIFB5dGhvbgorICAgICAgYXBwbGljYXRpb24gY29kZSAoYGBcbmBgKSwgYnV0IGBgXHJcbmBgIGNhbiBiZSBzcGVjaWZpZWQgaW4gb3JkZXIKKyAgICAgIHRvIHByb2R1Y2UgaGVhZGVycyB3aXRoIFJGQy1jb21wbGlhbnQgbGluZSBzZXBhcmF0b3JzLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgQWRkZWQgdGhlICpsaW5lc2VwKiBhcmd1bWVudC4KKwogCiAgICBUaGUgOmNsYXNzOmBIZWFkZXJgIGNsYXNzIGFsc28gcHJvdmlkZXMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBzdXBwb3J0CiAgICBzdGFuZGFyZCBvcGVyYXRvcnMgYW5kIGJ1aWx0LWluIGZ1bmN0aW9ucy4KIAogICAgLi4gbWV0aG9kOjogX19zdHJfXygpCiAKLSAgICAgIEEgaGVscGVyIGZvciA6Y2xhc3M6YHN0cmAncyA6ZnVuYzpgZW5jb2RlYCBtZXRob2QuICBSZXR1cm5zIHRoZSBoZWFkZXIgYXMKLSAgICAgIGEgVW5pY29kZSBzdHJpbmcuCisgICAgICBSZXR1cm5zIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIDpjbGFzczpgSGVhZGVyYCBhcyBhIHN0cmluZywgdXNpbmcgYW4KKyAgICAgIHVubGltaXRlZCBsaW5lIGxlbmd0aC4gIEFsbCBwaWVjZXMgYXJlIGNvbnZlcnRlZCB0byB1bmljb2RlIHVzaW5nIHRoZQorICAgICAgc3BlY2lmaWVkIGVuY29kaW5nIGFuZCBqb2luZWQgdG9nZXRoZXIgYXBwcm9wcmlhdGVseS4gIEFueSBwaWVjZXMgd2l0aCBhCisgICAgICBjaGFyc2V0IG9mIGB1bmtub3duLThiaXRgIGFyZSBkZWNvZGVkIGFzIGBBU0NJSWAgdXNpbmcgdGhlIGByZXBsYWNlYAorICAgICAgZXJyb3IgaGFuZGxlci4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICAgIEFkZGVkIGhhbmRsaW5nIGZvciB0aGUgYHVua25vd24tOGJpdGAgY2hhcnNldC4KIAogCiAgICAuLiBtZXRob2Q6OiBfX2VxX18ob3RoZXIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CmluZGV4IDRiMjNmNmEuLjFlNmE0ODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLm1lc3NhZ2UucnN0CkBAIC0xMTIsOSArMTEyLDE4IEBACiAgICAgICBiZSBkZWNvZGVkIGlmIHRoaXMgaGVhZGVyJ3MgdmFsdWUgaXMgYGBxdW90ZWQtcHJpbnRhYmxlYGAgb3IgYGBiYXNlNjRgYC4KICAgICAgIElmIHNvbWUgb3RoZXIgZW5jb2RpbmcgaXMgdXNlZCwgb3IgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgCiAgICAgICBoZWFkZXIgaXMgbWlzc2luZywgb3IgaWYgdGhlIHBheWxvYWQgaGFzIGJvZ3VzIGJhc2U2NCBkYXRhLCB0aGUgcGF5bG9hZCBpcwotICAgICAgcmV0dXJuZWQgYXMtaXMgKHVuZGVjb2RlZCkuICBJZiB0aGUgbWVzc2FnZSBpcyBhIG11bHRpcGFydCBhbmQgdGhlCi0gICAgICAqZGVjb2RlKiBmbGFnIGlzIGBgVHJ1ZWBgLCB0aGVuIGBgTm9uZWBgIGlzIHJldHVybmVkLiAgVGhlIGRlZmF1bHQgZm9yCi0gICAgICAqZGVjb2RlKiBpcyBgYEZhbHNlYGAuCisgICAgICByZXR1cm5lZCBhcy1pcyAodW5kZWNvZGVkKS4gIEluIGFsbCBjYXNlcyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgYmluYXJ5CisgICAgICBkYXRhLiAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBtdWx0aXBhcnQgYW5kIHRoZSAqZGVjb2RlKiBmbGFnIGlzIGBgVHJ1ZWBgLAorICAgICAgdGhlbiBgYE5vbmVgYCBpcyByZXR1cm5lZC4KKworICAgICAgV2hlbiAqZGVjb2RlKiBpcyBgYEZhbHNlYGAgKHRoZSBkZWZhdWx0KSB0aGUgYm9keSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZworICAgICAgd2l0aG91dCBkZWNvZGluZyB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgLiAgSG93ZXZlciwKKyAgICAgIGZvciBhIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nYCBvZiA4Yml0LCBhbiBhdHRlbXB0IGlzIG1hZGUKKyAgICAgIHRvIGRlY29kZSB0aGUgb3JpZ2luYWwgYnl0ZXMgdXNpbmcgdGhlIGBgY2hhcnNldGBgIHNwZWNpZmllZCBieSB0aGUKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciwgdXNpbmcgdGhlIGBgcmVwbGFjZWBgIGVycm9yIGhhbmRsZXIuCisgICAgICBJZiBubyBgYGNoYXJzZXRgYCBpcyBzcGVjaWZpZWQsIG9yIGlmIHRoZSBgYGNoYXJzZXRgYCBnaXZlbiBpcyBub3QKKyAgICAgIHJlY29nbml6ZWQgYnkgdGhlIGVtYWlsIHBhY2thZ2UsIHRoZSBib2R5IGlzIGRlY29kZWQgdXNpbmcgdGhlIGRlZmF1bHQKKyAgICAgIEFTQ0lJIGNoYXJzZXQuCiAKIAogICAgLi4gbWV0aG9kOjogc2V0X3BheWxvYWQocGF5bG9hZCwgY2hhcnNldD1Ob25lKQpAQCAtMTY4LDYgKzE3NywxMSBAQAogICAgTm90ZSB0aGF0IGluIGFsbCBjYXNlcywgYW55IGVudmVsb3BlIGhlYWRlciBwcmVzZW50IGluIHRoZSBtZXNzYWdlIGlzIG5vdAogICAgaW5jbHVkZWQgaW4gdGhlIG1hcHBpbmcgaW50ZXJmYWNlLgogCisgICBJbiBhIG1vZGVsIGdlbmVyYXRlZCBmcm9tIGJ5dGVzLCBhbnkgaGVhZGVyIHZhbHVlcyB0aGF0IChpbiBjb250cmF2ZW50aW9uIG9mCisgICB0aGUgUkZDcykgY29udGFpbiBub24tQVNDSUkgYnl0ZXMgd2lsbCwgd2hlbiByZXRyaWV2ZWQgdGhyb3VnaCB0aGlzCisgICBpbnRlcmZhY2UsIGJlIHJlcHJlc2VudGVkIGFzIDpjbGFzczpgfmVtYWlsLmhlYWRlci5IZWFkZXJgIG9iamVjdHMgd2l0aAorICAgYSBjaGFyc2V0IG9mIGB1bmtub3duLThiaXRgLgorCiAKICAgIC4uIG1ldGhvZDo6IF9fbGVuX18oKQogCkBAIC0yNjMsMTAgKzI3NywxMCBAQAogICAgICAgaXQgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHRocmVlIHR1cGxlIGluIHRoZSBmb3JtYXQKICAgICAgIGBgKENIQVJTRVQsIExBTkdVQUdFLCBWQUxVRSlgYCwgd2hlcmUgYGBDSEFSU0VUYGAgaXMgYSBzdHJpbmcgbmFtaW5nIHRoZQogICAgICAgY2hhcnNldCB0byBiZSB1c2VkIHRvIGVuY29kZSB0aGUgdmFsdWUsIGBgTEFOR1VBR0VgYCBjYW4gdXN1YWxseSBiZSBzZXQKLSAgICAgIHRvIGBgTm9uZWBgIG9yIHRoZSBlbXB0eSBzdHJpbmcgKHNlZSA6UkZDOmAyMjMxYCBmb3Igb3RoZXIgcG9zc2liaWxpdGllcyksCisgICAgICB0byBgYE5vbmVgYCBvciB0aGUgZW1wdHkgc3RyaW5nIChzZWUgOnJmYzpgMjIzMWAgZm9yIG90aGVyIHBvc3NpYmlsaXRpZXMpLAogICAgICAgYW5kIGBgVkFMVUVgYCBpcyB0aGUgc3RyaW5nIHZhbHVlIGNvbnRhaW5pbmcgbm9uLUFTQ0lJIGNvZGUgcG9pbnRzLiAgSWYKICAgICAgIGEgdGhyZWUgdHVwbGUgaXMgbm90IHBhc3NlZCBhbmQgdGhlIHZhbHVlIGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLAotICAgICAgaXQgaXMgYXV0b21hdGljYWxseSBlbmNvZGVkIGluIDpSRkNgMjIzMWAgZm9ybWF0IHVzaW5nIGEgYGBDSEFSU0VUYGAKKyAgICAgIGl0IGlzIGF1dG9tYXRpY2FsbHkgZW5jb2RlZCBpbiA6cmZjOmAyMjMxYCBmb3JtYXQgdXNpbmcgYSBgYENIQVJTRVRgYAogICAgICAgb2YgYGB1dGYtOGBgIGFuZCBhIGBgTEFOR1VBR0VgYCBvZiBgYE5vbmVgYC4KIAogICAgICAgSGVyZSdzIGFuIGV4YW1wbGU6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QKaW5kZXggMzJmNGZmMS4uNzdhMGI2OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0CkBAIC04MCw2ICs4MCwxNCBAQAogICAgICAgaWYgeW91IGZlZWQgbW9yZSBkYXRhIHRvIGEgY2xvc2VkIDpjbGFzczpgRmVlZFBhcnNlcmAuCiAKIAorLi4gY2xhc3M6OiBCeXRlc0ZlZWRQYXJzZXIoX2ZhY3Rvcnk9ZW1haWwubWVzc2FnZS5NZXNzYWdlKQorCisgICBXb3JrcyBleGFjdGx5IGxpa2UgOmNsYXNzOmBGZWVkUGFyc2VyYCBleGNlcHQgdGhhdCB0aGUgaW5wdXQgdG8gdGhlCisgICA6bWV0aDpgfkZlZWRQYXJzZXIuZmVlZGAgbWV0aG9kIG11c3QgYmUgYnl0ZXMgYW5kIG5vdCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIFBhcnNlciBjbGFzcyBBUEkKIF5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMTMxLDcgKzEzOSw3IEBACiAKICAgICAgIFNpbWlsYXIgdG8gdGhlIDptZXRoOmBwYXJzZWAgbWV0aG9kLCBleGNlcHQgaXQgdGFrZXMgYSBzdHJpbmcgb2JqZWN0CiAgICAgICBpbnN0ZWFkIG9mIGEgZmlsZS1saWtlIG9iamVjdC4gIENhbGxpbmcgdGhpcyBtZXRob2Qgb24gYSBzdHJpbmcgaXMgZXhhY3RseQotICAgICAgZXF1aXZhbGVudCB0byB3cmFwcGluZyAqdGV4dCogaW4gYSA6Y2xhc3M6YFN0cmluZ0lPYCBpbnN0YW5jZSBmaXJzdCBhbmQKKyAgICAgIGVxdWl2YWxlbnQgdG8gd3JhcHBpbmcgKnRleHQqIGluIGEgOmNsYXNzOmB+aW8uU3RyaW5nSU9gIGluc3RhbmNlIGZpcnN0IGFuZAogICAgICAgY2FsbGluZyA6bWV0aDpgcGFyc2VgLgogCiAgICAgICBPcHRpb25hbCAqaGVhZGVyc29ubHkqIGlzIGEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdG8gc3RvcCBwYXJzaW5nIGFmdGVyCkBAIC0xMzksMjUgKzE0Nyw3OCBAQAogICAgICAgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KIAogCisuLiBjbGFzczo6IEJ5dGVzUGFyc2VyKF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsIHN0cmljdD1Ob25lKQorCisgICBUaGlzIGNsYXNzIGlzIGV4YWN0bHkgcGFyYWxsZWwgdG8gOmNsYXNzOmBQYXJzZXJgLCBidXQgaGFuZGxlcyBieXRlcyBpbnB1dC4KKyAgIFRoZSAqX2NsYXNzKiBhbmQgKnN0cmljdCogYXJndW1lbnRzIGFyZSBpbnRlcnByZXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCisgICB0aGUgOmNsYXNzOmBQYXJzZXJgIGNvbnN0cnVjdG9yLiAgKnN0cmljdCogaXMgc3VwcG9ydGVkIG9ubHkgdG8gbWFrZSBwb3J0aW5nCisgICBjb2RlIGVhc2llcjsgaXQgaXMgZGVwcmVjYXRlZC4KKworICAgLi4gbWV0aG9kOjogcGFyc2UoZnAsIGhlYWRlcm9ubHk9RmFsc2UpCisKKyAgICAgIFJlYWQgYWxsIHRoZSBkYXRhIGZyb20gdGhlIGJpbmFyeSBmaWxlLWxpa2Ugb2JqZWN0ICpmcCosIHBhcnNlIHRoZQorICAgICAgcmVzdWx0aW5nIGJ5dGVzLCBhbmQgcmV0dXJuIHRoZSBtZXNzYWdlIG9iamVjdC4gICpmcCogbXVzdCBzdXBwb3J0CisgICAgICBib3RoIHRoZSA6bWV0aDpgcmVhZGxpbmVgIGFuZCB0aGUgOm1ldGg6YHJlYWRgIG1ldGhvZHMgb24gZmlsZS1saWtlCisgICAgICBvYmplY3RzLgorCisgICAgICBUaGUgYnl0ZXMgY29udGFpbmVkIGluICpmcCogbXVzdCBiZSBmb3JtYXR0ZWQgYXMgYSBibG9jayBvZiA6cmZjOmAyODIyYAorICAgICAgc3R5bGUgaGVhZGVycyBhbmQgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhCisgICAgICBlbnZlbG9wZSBoZWFkZXIuICBUaGUgaGVhZGVyIGJsb2NrIGlzIHRlcm1pbmF0ZWQgZWl0aGVyIGJ5IHRoZSBlbmQgb2YgdGhlCisgICAgICBkYXRhIG9yIGJ5IGEgYmxhbmsgbGluZS4gIEZvbGxvd2luZyB0aGUgaGVhZGVyIGJsb2NrIGlzIHRoZSBib2R5IG9mIHRoZQorICAgICAgbWVzc2FnZSAod2hpY2ggbWF5IGNvbnRhaW4gTUlNRS1lbmNvZGVkIHN1YnBhcnRzLCBpbmNsdWRpbmcgc3VicGFydHMKKyAgICAgIHdpdGggYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2Agb2YgYGA4Yml0YGAuCisKKyAgICAgIE9wdGlvbmFsICpoZWFkZXJzb25seSogaXMgYSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byBzdG9wIHBhcnNpbmcgYWZ0ZXIKKyAgICAgIHJlYWRpbmcgdGhlIGhlYWRlcnMgb3Igbm90LiAgVGhlIGRlZmF1bHQgaXMgYGBGYWxzZWBgLCBtZWFuaW5nIGl0IHBhcnNlcworICAgICAgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKworICAgLi4gbWV0aG9kOjogcGFyc2VieXRlcyhieXRlcywgaGVhZGVyc29ubHk9RmFsc2UpCisKKyAgICAgIFNpbWlsYXIgdG8gdGhlIDptZXRoOmBwYXJzZWAgbWV0aG9kLCBleGNlcHQgaXQgdGFrZXMgYSBieXRlIHN0cmluZyBvYmplY3QKKyAgICAgIGluc3RlYWQgb2YgYSBmaWxlLWxpa2Ugb2JqZWN0LiAgQ2FsbGluZyB0aGlzIG1ldGhvZCBvbiBhIGJ5dGUgc3RyaW5nIGlzCisgICAgICBleGFjdGx5IGVxdWl2YWxlbnQgdG8gd3JhcHBpbmcgKnRleHQqIGluIGEgOmNsYXNzOmB+aW8uQnl0ZXNJT2AgaW5zdGFuY2UKKyAgICAgIGZpcnN0IGFuZCBjYWxsaW5nIDptZXRoOmBwYXJzZWAuCisKKyAgICAgIE9wdGlvbmFsICpoZWFkZXJzb25seSogaXMgYXMgd2l0aCB0aGUgOm1ldGg6YHBhcnNlYCBtZXRob2QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIFNpbmNlIGNyZWF0aW5nIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIGZyb20gYSBzdHJpbmcgb3IgYSBmaWxlIG9iamVjdCBpcyBzdWNoCi1hIGNvbW1vbiB0YXNrLCB0d28gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlLiAgVGhleSBhcmUgYXZhaWxhYmxlCithIGNvbW1vbiB0YXNrLCBmb3VyIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZS4gIFRoZXkgYXJlIGF2YWlsYWJsZQogaW4gdGhlIHRvcC1sZXZlbCA6bW9kOmBlbWFpbGAgcGFja2FnZSBuYW1lc3BhY2UuCiAKIC4uIGN1cnJlbnRtb2R1bGU6OiBlbWFpbAogCi0uLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9zdHJpbmcoc1ssIF9jbGFzc11bLCBzdHJpY3RdKQorLi4gZnVuY3Rpb246OiBtZXNzYWdlX2Zyb21fc3RyaW5nKHMsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsIHN0cmljdD1Ob25lKQogCiAgICBSZXR1cm4gYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUgZnJvbSBhIHN0cmluZy4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCiAgICBgYFBhcnNlcigpLnBhcnNlc3RyKHMpYGAuICBPcHRpb25hbCAqX2NsYXNzKiBhbmQgKnN0cmljdCogYXJlIGludGVycHJldGVkIGFzCiAgICB3aXRoIHRoZSA6Y2xhc3M6YFBhcnNlcmAgY2xhc3MgY29uc3RydWN0b3IuCiAKKy4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX2J5dGVzKHMsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsIHN0cmljdD1Ob25lKQogCi0uLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9maWxlKGZwWywgX2NsYXNzXVssIHN0cmljdF0pCisgICBSZXR1cm4gYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUgZnJvbSBhIGJ5dGUgc3RyaW5nLiAgVGhpcyBpcyBleGFjdGx5CisgICBlcXVpdmFsZW50IHRvIGBgQnl0ZXNQYXJzZXIoKS5wYXJzZWJ5dGVzKHMpYGAuICBPcHRpb25hbCAqX2NsYXNzKiBhbmQKKyAgICpzdHJpY3QqIGFyZSBpbnRlcnByZXRlZCBhcyB3aXRoIHRoZSA6Y2xhc3M6YFBhcnNlcmAgY2xhc3MgY29uc3RydWN0b3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9maWxlKGZwLCBfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCBzdHJpY3Q9Tm9uZSkKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIHRyZWUgZnJvbSBhbiBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAuCiAgICBUaGlzIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBgYFBhcnNlcigpLnBhcnNlKGZwKWBgLiAgT3B0aW9uYWwgKl9jbGFzcyoKICAgIGFuZCAqc3RyaWN0KiBhcmUgaW50ZXJwcmV0ZWQgYXMgd2l0aCB0aGUgOmNsYXNzOmBQYXJzZXJgIGNsYXNzIGNvbnN0cnVjdG9yLgogCisuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShmcCwgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgc3RyaWN0PU5vbmUpCisKKyAgIFJldHVybiBhIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSB0cmVlIGZyb20gYW4gb3BlbiBiaW5hcnkgOnRlcm06YGZpbGUKKyAgIG9iamVjdGAuICBUaGlzIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBgYEJ5dGVzUGFyc2VyKCkucGFyc2UoZnApYGAuCisgICBPcHRpb25hbCAqX2NsYXNzKiBhbmQgKnN0cmljdCogYXJlIGludGVycHJldGVkIGFzIHdpdGggdGhlIDpjbGFzczpgUGFyc2VyYAorICAgY2xhc3MgY29uc3RydWN0b3IuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgeW91IG1pZ2h0IHVzZSB0aGlzIGF0IGFuIGludGVyYWN0aXZlIFB5dGhvbiBwcm9tcHQ6OgogCiAgICA+Pj4gaW1wb3J0IGVtYWlsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKaW5kZXggZDNmMTkwOC4uNDUzMGI5NSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdApAQCAtNiw3ICs2LDcgQEAKICAgICAgICAgICAgICAgZW1haWwgbWVzc2FnZXMsIGluY2x1ZGluZyBNSU1FIGRvY3VtZW50cy4KIC4uIG1vZHVsZWF1dGhvcjo6IEJhcnJ5IEEuIFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBCYXJyeSBBLiBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+Ci0uLiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorLi4gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KIAogCiBUaGUgOm1vZDpgZW1haWxgIHBhY2thZ2UgaXMgYSBsaWJyYXJ5IGZvciBtYW5hZ2luZyBlbWFpbCBtZXNzYWdlcywgaW5jbHVkaW5nCkBAIC05Miw2ICs5Miw0NCBAQAogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDpjb25zdDpgNC4wYCAgfCBQeXRob24gMi41ICAgICAgICAgICAgICAgICAgIHwgUHl0aG9uIDIuMyB0byAyLjUgICAgIHwKICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCA6Y29uc3Q6YDUuMGAgIHwgUHl0aG9uIDMuMCBhbmQgUHl0aG9uIDMuMSAgICB8IFB5dGhvbiAzLjAgdG8gMy4yICAgICB8CisrLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmNvbnN0OmA1LjFgICB8IFB5dGhvbiAzLjIgICAgICAgICAgICAgICAgICAgfCBQeXRob24gMy4wIHRvIDMuMiAgICAgfAorKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK0hlcmUgYXJlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIDptb2Q6YGVtYWlsYCB2ZXJzaW9uIDUuMSBhbmQKK3ZlcnNpb24gNS4wOgorCisqIEl0IGlzIG9uY2UgYWdhaW4gcG9zc2libGUgdG8gcGFyc2UgbWVzc2FnZXMgY29udGFpbmluZyBub24tQVNDSUkgYnl0ZXMsCisgIGFuZCB0byByZXByb2R1Y2Ugc3VjaCBtZXNzYWdlcyBpZiB0aGUgZGF0YSBjb250YWluaW5nIHRoZSBub24tQVNDSUkKKyAgYnl0ZXMgaXMgbm90IG1vZGlmaWVkLgorCisqIE5ldyBmdW5jdGlvbnMgOmZ1bmM6YG1lc3NhZ2VfZnJvbV9ieXRlc2AgYW5kIDpmdW5jOmBtZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGVgLAorICBhbmQgbmV3IGNsYXNzZXMgOmNsYXNzOmB+ZW1haWwucGFyc2VyLkJ5dGVzRmVlZFBhcnNlcmAgYW5kCisgIDpjbGFzczpgfmVtYWlsLnBhcnNlci5CeXRlc1BhcnNlcmAgYWxsb3cgYmluYXJ5IG1lc3NhZ2UgZGF0YSB0byBiZSBwYXJzZWQKKyAgaW50byBtb2RlbCBvYmplY3RzLgorCisqIEdpdmVuIGJ5dGVzIGlucHV0IHRvIHRoZSBtb2RlbCwgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuZ2V0X3BheWxvYWRgCisgIHdpbGwgYnkgZGVmYXVsdCBkZWNvZGUgYSBtZXNzYWdlIGJvZHkgdGhhdCBoYXMgYQorICA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2Agb2YgYGA4Yml0YGAgdXNpbmcgdGhlIGNoYXJzZXQKKyAgc3BlY2lmaWVkIGluIHRoZSBNSU1FIGhlYWRlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKworKiBHaXZlbiBieXRlcyBpbnB1dCB0byB0aGUgbW9kZWwsIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3JgIHdpbGwKKyAgY29udmVydCBtZXNzYWdlIGJvZGllcyB0aGF0IGhhdmUgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2Agb2YKKyAgOGJpdCB0byBpbnN0ZWFkIGhhdmUgYSA3Yml0IENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcuCisKKyogTmV3IGNsYXNzIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgcHJvZHVjZXMgYnl0ZXMKKyAgYXMgb3V0cHV0LCBwcmVzZXJ2aW5nIGFueSB1bmNoYW5nZWQgbm9uLUFTQ0lJIGRhdGEgdGhhdCB3YXMKKyAgcHJlc2VudCBpbiB0aGUgaW5wdXQgdXNlZCB0byBidWlsZCB0aGUgbW9kZWwsIGluY2x1ZGluZyBtZXNzYWdlIGJvZGllcworICB3aXRoIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmdgIG9mIDhiaXQuCisKK0hlcmUgYXJlIHRoZSBtYWpvciBkaWZmZXJlbmNlcyBiZXR3ZWVuIDptb2Q6YGVtYWlsYCB2ZXJzaW9uIDUuMCBhbmQgdmVyc2lvbiA0OgorCisqIEFsbCBvcGVyYXRpb25zIGFyZSBvbiB1bmljb2RlIHN0cmluZ3MuICBUZXh0IGlucHV0cyBtdXN0IGJlIHN0cmluZ3MsCisgIHRleHQgb3V0cHV0cyBhcmUgc3RyaW5ncy4gIE91dHB1dHMgYXJlIGxpbWl0ZWQgdG8gdGhlIEFTQ0lJIGNoYXJhY3RlcgorICBzZXQgYW5kIHNvIGNhbiBiZSBlbmNvZGVkIHRvIEFTQ0lJIGZvciB0cmFuc21pc3Npb24uICBJbnB1dHMgYXJlIGFsc28KKyAgbGltaXRlZCB0byBBU0NJSTsgdGhpcyBpcyBhbiBhY2tub3dsZWRnZWQgbGltaXRhdGlvbiBvZiBlbWFpbCA1LjAgYW5kCisgIG1lYW5zIGl0IGNhbiBvbmx5IGJlIHVzZWQgdG8gcGFyc2UgZW1haWwgdGhhdCBpcyA3Yml0IGNsZWFuLgogCiBIZXJlIGFyZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiA6bW9kOmBlbWFpbGAgdmVyc2lvbiA0IGFuZCB2ZXJzaW9uIDM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKaW5kZXggYTFjZTMwMS4uZjdiNzc3YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwudXRpbC5yc3QKQEAgLTEwNSwxMSArMTA1LDE3IEBACiAgICBgYEZhbHNlYGAuICBUaGUgZGVmYXVsdCBpcyBgYEZhbHNlYGAuCiAKIAotLi4gZnVuY3Rpb246OiBtYWtlX21zZ2lkKGlkc3RyaW5nPU5vbmUpCisuLiBmdW5jdGlvbjo6IG1ha2VfbXNnaWQoaWRzdHJpbmc9Tm9uZSwgZG9tYWluPU5vbmUpCiAKICAgIFJldHVybnMgYSBzdHJpbmcgc3VpdGFibGUgZm9yIGFuIDpyZmM6YDI4MjJgXCAtY29tcGxpYW50CiAgICA6bWFpbGhlYWRlcjpgTWVzc2FnZS1JRGAgaGVhZGVyLiAgT3B0aW9uYWwgKmlkc3RyaW5nKiBpZiBnaXZlbiwgaXMgYSBzdHJpbmcKLSAgIHVzZWQgdG8gc3RyZW5ndGhlbiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBpZC4KKyAgIHVzZWQgdG8gc3RyZW5ndGhlbiB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBpZC4gIE9wdGlvbmFsICpkb21haW4qIGlmCisgICBnaXZlbiBwcm92aWRlcyB0aGUgcG9ydGlvbiBvZiB0aGUgbXNnaWQgYWZ0ZXIgdGhlICdAJy4gIFRoZSBkZWZhdWx0IGlzIHRoZQorICAgbG9jYWwgaG9zdG5hbWUuICBJdCBpcyBub3Qgbm9ybWFsbHkgbmVjZXNzYXJ5IHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCwgYnV0CisgICBtYXkgYmUgdXNlZnVsIGNlcnRhaW4gY2FzZXMsIHN1Y2ggYXMgYSBjb25zdHJ1Y3RpbmcgZGlzdHJpYnV0ZWQgc3lzdGVtIHRoYXQKKyAgIHVzZXMgYSBjb25zaXN0ZW50IGRvbWFpbiBuYW1lIGFjcm9zcyBtdWx0aXBsZSBob3N0cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIgZG9tYWluIGtleXdvcmQgYWRkZWQKIAogCiAuLiBmdW5jdGlvbjo6IGRlY29kZV9yZmMyMjMxKHMpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CmluZGV4IDQxNTkyODcuLjUyOGZlYmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2V4Y2VwdGlvbnMucnN0CkBAIC0xOTcsNyArMTk3LDcgQEAKICAgIFJhaXNlZCB3aGVuIGFuIG9wZXJhdGlvbiBydW5zIG91dCBvZiBtZW1vcnkgYnV0IHRoZSBzaXR1YXRpb24gbWF5IHN0aWxsIGJlCiAgICByZXNjdWVkIChieSBkZWxldGluZyBzb21lIG9iamVjdHMpLiAgVGhlIGFzc29jaWF0ZWQgdmFsdWUgaXMgYSBzdHJpbmcgaW5kaWNhdGluZwogICAgd2hhdCBraW5kIG9mIChpbnRlcm5hbCkgb3BlcmF0aW9uIHJhbiBvdXQgb2YgbWVtb3J5LiBOb3RlIHRoYXQgYmVjYXVzZSBvZiB0aGUKLSAgIHVuZGVybHlpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYXJjaGl0ZWN0dXJlIChDJ3MgOmNmdW5jOmBtYWxsb2NgIGZ1bmN0aW9uKSwgdGhlCisgICB1bmRlcmx5aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGFyY2hpdGVjdHVyZSAoQydzIDpjOmZ1bmM6YG1hbGxvY2AgZnVuY3Rpb24pLCB0aGUKICAgIGludGVycHJldGVyIG1heSBub3QgYWx3YXlzIGJlIGFibGUgdG8gY29tcGxldGVseSByZWNvdmVyIGZyb20gdGhpcyBzaXR1YXRpb247IGl0CiAgICBuZXZlcnRoZWxlc3MgcmFpc2VzIGFuIGV4Y2VwdGlvbiBzbyB0aGF0IGEgc3RhY2sgdHJhY2ViYWNrIGNhbiBiZSBwcmludGVkLCBpbgogICAgY2FzZSBhIHJ1bi1hd2F5IHByb2dyYW0gd2FzIHRoZSBjYXVzZS4KQEAgLTIyNCw4ICsyMjQsOCBAQAogICAgVGhpcyBleGNlcHRpb24gaXMgZGVyaXZlZCBmcm9tIDpleGM6YEVudmlyb25tZW50RXJyb3JgLiAgSXQgaXMgcmFpc2VkIHdoZW4gYQogICAgZnVuY3Rpb24gcmV0dXJucyBhIHN5c3RlbS1yZWxhdGVkIGVycm9yIChub3QgZm9yIGlsbGVnYWwgYXJndW1lbnQgdHlwZXMgb3IKICAgIG90aGVyIGluY2lkZW50YWwgZXJyb3JzKS4gIFRoZSA6YXR0cjpgZXJybm9gIGF0dHJpYnV0ZSBpcyBhIG51bWVyaWMgZXJyb3IKLSAgIGNvZGUgZnJvbSA6Y2RhdGE6YGVycm5vYCwgYW5kIHRoZSA6YXR0cjpgc3RyZXJyb3JgIGF0dHJpYnV0ZSBpcyB0aGUKLSAgIGNvcnJlc3BvbmRpbmcgc3RyaW5nLCBhcyB3b3VsZCBiZSBwcmludGVkIGJ5IHRoZSBDIGZ1bmN0aW9uIDpjZnVuYzpgcGVycm9yYC4KKyAgIGNvZGUgZnJvbSA6YzpkYXRhOmBlcnJub2AsIGFuZCB0aGUgOmF0dHI6YHN0cmVycm9yYCBhdHRyaWJ1dGUgaXMgdGhlCisgICBjb3JyZXNwb25kaW5nIHN0cmluZywgYXMgd291bGQgYmUgcHJpbnRlZCBieSB0aGUgQyBmdW5jdGlvbiA6YzpmdW5jOmBwZXJyb3JgLgogICAgU2VlIHRoZSBtb2R1bGUgOm1vZDpgZXJybm9gLCB3aGljaCBjb250YWlucyBuYW1lcyBmb3IgdGhlIGVycm9yIGNvZGVzIGRlZmluZWQKICAgIGJ5IHRoZSB1bmRlcmx5aW5nIG9wZXJhdGluZyBzeXN0ZW0uCiAKQEAgLTI2MSw4ICsyNjEsOCBAQAogCiAuLiBleGNlcHRpb246OiBTdG9wSXRlcmF0aW9uCiAKLSAgIFJhaXNlZCBieSBidWlsdGluIDpmdW5jOmBuZXh0YCBhbmQgYW4gOnRlcm06YGl0ZXJhdG9yYFwncyA6bWV0aDpgX19uZXh0X19gCi0gICBtZXRob2QgdG8gc2lnbmFsIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgdmFsdWVzLgorICAgUmFpc2VkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBuZXh0YCBhbmQgYW4gOnRlcm06YGl0ZXJhdG9yYFwncworICAgOm1ldGg6YF9fbmV4dF9fYCBtZXRob2QgdG8gc2lnbmFsIHRoYXQgdGhlcmUgYXJlIG5vIGZ1cnRoZXIgdmFsdWVzLgogCiAKIC4uIGV4Y2VwdGlvbjo6IFN5bnRheEVycm9yCkBAIC0zMDcsNyArMzA3LDcgQEAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgOmZ1bmM6YHN5cy5leGl0YCBmdW5jdGlvbi4gIFdoZW4gaXQgaXMgbm90CiAgICBoYW5kbGVkLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGV4aXRzOyBubyBzdGFjayB0cmFjZWJhY2sgaXMgcHJpbnRlZC4gIElmIHRoZQogICAgYXNzb2NpYXRlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIHN5c3RlbSBleGl0IHN0YXR1cyAocGFzc2VkCi0gICB0byBDJ3MgOmNmdW5jOmBleGl0YCBmdW5jdGlvbik7IGlmIGl0IGlzIGBgTm9uZWBgLCB0aGUgZXhpdCBzdGF0dXMgaXMgemVybzsKKyAgIHRvIEMncyA6YzpmdW5jOmBleGl0YCBmdW5jdGlvbik7IGlmIGl0IGlzIGBgTm9uZWBgLCB0aGUgZXhpdCBzdGF0dXMgaXMgemVybzsKICAgIGlmIGl0IGhhcyBhbm90aGVyIHR5cGUgKHN1Y2ggYXMgYSBzdHJpbmcpLCB0aGUgb2JqZWN0J3MgdmFsdWUgaXMgcHJpbnRlZCBhbmQKICAgIHRoZSBleGl0IHN0YXR1cyBpcyBvbmUuCiAKQEAgLTM4MCw5ICszODAsOSBAQAogLi4gZXhjZXB0aW9uOjogV2luZG93c0Vycm9yCiAKICAgIFJhaXNlZCB3aGVuIGEgV2luZG93cy1zcGVjaWZpYyBlcnJvciBvY2N1cnMgb3Igd2hlbiB0aGUgZXJyb3IgbnVtYmVyIGRvZXMgbm90Ci0gICBjb3JyZXNwb25kIHRvIGFuIDpjZGF0YTpgZXJybm9gIHZhbHVlLiAgVGhlIDphdHRyOmB3aW5lcnJvcmAgYW5kCisgICBjb3JyZXNwb25kIHRvIGFuIDpjOmRhdGE6YGVycm5vYCB2YWx1ZS4gIFRoZSA6YXR0cjpgd2luZXJyb3JgIGFuZAogICAgOmF0dHI6YHN0cmVycm9yYCB2YWx1ZXMgYXJlIGNyZWF0ZWQgZnJvbSB0aGUgcmV0dXJuIHZhbHVlcyBvZiB0aGUKLSAgIDpjZnVuYzpgR2V0TGFzdEVycm9yYCBhbmQgOmNmdW5jOmBGb3JtYXRNZXNzYWdlYCBmdW5jdGlvbnMgZnJvbSB0aGUgV2luZG93cworICAgOmM6ZnVuYzpgR2V0TGFzdEVycm9yYCBhbmQgOmM6ZnVuYzpgRm9ybWF0TWVzc2FnZWAgZnVuY3Rpb25zIGZyb20gdGhlIFdpbmRvd3MKICAgIFBsYXRmb3JtIEFQSS4gVGhlIDphdHRyOmBlcnJub2AgdmFsdWUgbWFwcyB0aGUgOmF0dHI6YHdpbmVycm9yYCB2YWx1ZSB0bwogICAgY29ycmVzcG9uZGluZyBgYGVycm5vLmhgYCB2YWx1ZXMuIFRoaXMgaXMgYSBzdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYC4KIApAQCAtNDQyLDEwICs0NDIsMjAgQEAKIAogICAgQmFzZSBjbGFzcyBmb3Igd2FybmluZ3MgcmVsYXRlZCB0byBVbmljb2RlLgogCisKIC4uIGV4Y2VwdGlvbjo6IEJ5dGVzV2FybmluZwogCiAgICBCYXNlIGNsYXNzIGZvciB3YXJuaW5ncyByZWxhdGVkIHRvIDpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ1ZmZlcmAuCiAKKworLi4gZXhjZXB0aW9uOjogUmVzb3VyY2VXYXJuaW5nCisKKyAgIEJhc2UgY2xhc3MgZm9yIHdhcm5pbmdzIHJlbGF0ZWQgdG8gcmVzb3VyY2UgdXNhZ2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKwogRXhjZXB0aW9uIGhpZXJhcmNoeQogLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mY250bC5yc3QgYi9Eb2MvbGlicmFyeS9mY250bC5yc3QKaW5kZXggZGQ3NmQ2NS4uNjE5MjQwMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmNudGwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZjbnRsLnJzdApAQCAtMTIsNyArMTIsNyBAQAogICAgcGFpcjogVU5JWDsgSS9PIGNvbnRyb2wKIAogVGhpcyBtb2R1bGUgcGVyZm9ybXMgZmlsZSBjb250cm9sIGFuZCBJL08gY29udHJvbCBvbiBmaWxlIGRlc2NyaXB0b3JzLiBJdCBpcyBhbgotaW50ZXJmYWNlIHRvIHRoZSA6Y2Z1bmM6YGZjbnRsYCBhbmQgOmNmdW5jOmBpb2N0bGAgVW5peCByb3V0aW5lcy4KK2ludGVyZmFjZSB0byB0aGUgOmM6ZnVuYzpgZmNudGxgIGFuZCA6YzpmdW5jOmBpb2N0bGAgVW5peCByb3V0aW5lcy4KIAogQWxsIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0YWtlIGEgZmlsZSBkZXNjcmlwdG9yICpmZCogYXMgdGhlaXIgZmlyc3QKIGFyZ3VtZW50LiAgVGhpcyBjYW4gYmUgYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IsIHN1Y2ggYXMgcmV0dXJuZWQgYnkKQEAgLTMwLDE3ICszMCwxNyBAQAogICAgOm1vZDpgZmNudGxgIG1vZHVsZS4gVGhlIGFyZ3VtZW50ICphcmcqIGlzIG9wdGlvbmFsLCBhbmQgZGVmYXVsdHMgdG8gdGhlIGludGVnZXIKICAgIHZhbHVlIGBgMGBgLiAgV2hlbiBwcmVzZW50LCBpdCBjYW4gZWl0aGVyIGJlIGFuIGludGVnZXIgdmFsdWUsIG9yIGEgc3RyaW5nLgogICAgV2l0aCB0aGUgYXJndW1lbnQgbWlzc2luZyBvciBhbiBpbnRlZ2VyIHZhbHVlLCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24KLSAgIGlzIHRoZSBpbnRlZ2VyIHJldHVybiB2YWx1ZSBvZiB0aGUgQyA6Y2Z1bmM6YGZjbnRsYCBjYWxsLiAgV2hlbiB0aGUgYXJndW1lbnQgaXMKKyAgIGlzIHRoZSBpbnRlZ2VyIHJldHVybiB2YWx1ZSBvZiB0aGUgQyA6YzpmdW5jOmBmY250bGAgY2FsbC4gIFdoZW4gdGhlIGFyZ3VtZW50IGlzCiAgICBhIHN0cmluZyBpdCByZXByZXNlbnRzIGEgYmluYXJ5IHN0cnVjdHVyZSwgZS5nLiBjcmVhdGVkIGJ5IDpmdW5jOmBzdHJ1Y3QucGFja2AuCiAgICBUaGUgYmluYXJ5IGRhdGEgaXMgY29waWVkIHRvIGEgYnVmZmVyIHdob3NlIGFkZHJlc3MgaXMgcGFzc2VkIHRvIHRoZSBDCi0gICA6Y2Z1bmM6YGZjbnRsYCBjYWxsLiAgVGhlIHJldHVybiB2YWx1ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCBpcyB0aGUgY29udGVudHMKKyAgIDpjOmZ1bmM6YGZjbnRsYCBjYWxsLiAgVGhlIHJldHVybiB2YWx1ZSBhZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCBpcyB0aGUgY29udGVudHMKICAgIG9mIHRoZSBidWZmZXIsIGNvbnZlcnRlZCB0byBhIHN0cmluZyBvYmplY3QuICBUaGUgbGVuZ3RoIG9mIHRoZSByZXR1cm5lZCBzdHJpbmcKICAgIHdpbGwgYmUgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiB0aGUgKmFyZyogYXJndW1lbnQuICBUaGlzIGlzIGxpbWl0ZWQgdG8gMTAyNAogICAgYnl0ZXMuICBJZiB0aGUgaW5mb3JtYXRpb24gcmV0dXJuZWQgaW4gdGhlIGJ1ZmZlciBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcwogICAgbGFyZ2VyIHRoYW4gMTAyNCBieXRlcywgdGhpcyBpcyBtb3N0IGxpa2VseSB0byByZXN1bHQgaW4gYSBzZWdtZW50YXRpb24KICAgIHZpb2xhdGlvbiBvciBhIG1vcmUgc3VidGxlIGRhdGEgY29ycnVwdGlvbi4KIAotICAgSWYgdGhlIDpjZnVuYzpgZmNudGxgIGZhaWxzLCBhbiA6ZXhjOmBJT0Vycm9yYCBpcyByYWlzZWQuCisgICBJZiB0aGUgOmM6ZnVuYzpgZmNudGxgIGZhaWxzLCBhbiA6ZXhjOmBJT0Vycm9yYCBpcyByYWlzZWQuCiAKIAogLi4gZnVuY3Rpb246OiBpb2N0bChmZCwgb3BbLCBhcmdbLCBtdXRhdGVfZmxhZ11dKQpAQCAtOTEsNyArOTEsNyBAQAogICAgUGVyZm9ybSB0aGUgbG9jayBvcGVyYXRpb24gKm9wKiBvbiBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoZmlsZSBvYmplY3RzIHByb3ZpZGluZwogICAgYSA6bWV0aDpgZmlsZW5vYCBtZXRob2QgYXJlIGFjY2VwdGVkIGFzIHdlbGwpLiBTZWUgdGhlIFVuaXggbWFudWFsCiAgICA6bWFucGFnZTpgZmxvY2soMilgIGZvciBkZXRhaWxzLiAgKE9uIHNvbWUgc3lzdGVtcywgdGhpcyBmdW5jdGlvbiBpcyBlbXVsYXRlZAotICAgdXNpbmcgOmNmdW5jOmBmY250bGAuKQorICAgdXNpbmcgOmM6ZnVuYzpgZmNudGxgLikKIAogCiAuLiBmdW5jdGlvbjo6IGxvY2tmKGZkLCBvcGVyYXRpb24sIFtsZW5ndGgsIFtzdGFydCwgW3doZW5jZV1dXSkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKaW5kZXggZjU3ZGNjZS4uZTBmZmZmNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKQEAgLTUsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IENvbXBhcmUgZmlsZXMgZWZmaWNpZW50bHkuCiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9maWxlY21wLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZmlsZWNtcGAgbW9kdWxlIGRlZmluZXMgZnVuY3Rpb25zIHRvIGNvbXBhcmUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLAogd2l0aCB2YXJpb3VzIG9wdGlvbmFsIHRpbWUvY29ycmVjdG5lc3MgdHJhZGUtb2Zmcy4gRm9yIGNvbXBhcmluZyBmaWxlcywKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVmb3JtYXRzLnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVmb3JtYXRzLnJzdAppbmRleCA5ODBkNGY1Li5lOWMyZTFmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9maWxlZm9ybWF0cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWZvcm1hdHMucnN0CkBAIC01LDcgKzUsNyBAQAogKioqKioqKioqKioqCiAKIFRoZSBtb2R1bGVzIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIgcGFyc2UgdmFyaW91cyBtaXNjZWxsYW5lb3VzIGZpbGUgZm9ybWF0cwotdGhhdCBhcmVuJ3QgbWFya3VwIGxhbmd1YWdlcyBvciBhcmUgcmVsYXRlZCB0byBlLW1haWwuCit0aGF0IGFyZW4ndCBtYXJrdXAgbGFuZ3VhZ2VzIGFuZCBhcmUgbm90IHJlbGF0ZWQgdG8gZS1tYWlsLgogCiAKIC4uIHRvY3RyZWU6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdCBiL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKaW5kZXggZDk4YTE5OC4uYWM0NDMxMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9maWxlaW5wdXQucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBoZWxwZXIgY2xhc3MgYW5kIGZ1bmN0aW9ucyB0byBxdWlja2x5IHdyaXRlIGEKIGxvb3Agb3ZlciBzdGFuZGFyZCBpbnB1dCBvciBhIGxpc3Qgb2YgZmlsZXMuIElmIHlvdSBqdXN0IHdhbnQgdG8gcmVhZCBvcgpAQCAtMjQsNyArMjcsNyBAQAogCiBBbGwgZmlsZXMgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieQogc3BlY2lmeWluZyB0aGUgKm1vZGUqIHBhcmFtZXRlciBpbiB0aGUgY2FsbCB0byA6ZnVuYzpgLmlucHV0YCBvcgotOmNsYXNzOmBGaWxlSW5wdXQoKWAuICBJZiBhbiBJL08gZXJyb3Igb2NjdXJzIGR1cmluZyBvcGVuaW5nIG9yIHJlYWRpbmcgYSBmaWxlLAorOmNsYXNzOmBGaWxlSW5wdXRgLiAgSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwKIDpleGM6YElPRXJyb3JgIGlzIHJhaXNlZC4KIAogSWYgYGBzeXMuc3RkaW5gYCBpcyB1c2VkIG1vcmUgdGhhbiBvbmNlLCB0aGUgc2Vjb25kIGFuZCBmdXJ0aGVyIHVzZSB3aWxsIHJldHVybgpAQCAtNTQsNiArNTcsMTcgQEAKICAgIGR1cmluZyBpdGVyYXRpb24uICBUaGUgcGFyYW1ldGVycyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgcGFzc2VkIGFsb25nIHRvIHRoZQogICAgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgRmlsZUlucHV0YCBjbGFzcy4KIAorICAgVGhlIDpjbGFzczpgRmlsZUlucHV0YCBpbnN0YW5jZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBpbiB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBJbiB0aGlzIGV4YW1wbGUsICppbnB1dCogaXMgY2xvc2VkIGFmdGVyIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBpcyBleGl0ZWQsIGV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vyczo6CisKKyAgICAgIHdpdGggZmlsZWlucHV0LmlucHV0KGZpbGVzPSgnc3BhbS50eHQnLCAnZWdncy50eHQnKSkgYXMgZjoKKyAgICAgICAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICAgICAgICBwcm9jZXNzKGxpbmUpCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBDYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKwogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB1c2UgdGhlIGdsb2JhbCBzdGF0ZSBjcmVhdGVkIGJ5IDpmdW5jOmBmaWxlaW5wdXQuaW5wdXRgOwogaWYgdGhlcmUgaXMgbm8gYWN0aXZlIHN0YXRlLCA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KQEAgLTEzMiwxMyArMTQ2LDIzIEBACiAgICAqZmlsZW5hbWUqIGFuZCAqbW9kZSosIGFuZCByZXR1cm5zIGFuIGFjY29yZGluZ2x5IG9wZW5lZCBmaWxlLWxpa2Ugb2JqZWN0LiBZb3UKICAgIGNhbm5vdCB1c2UgKmlucGxhY2UqIGFuZCAqb3Blbmhvb2sqIHRvZ2V0aGVyLgogCisgICBBIDpjbGFzczpgRmlsZUlucHV0YCBpbnN0YW5jZSBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBpbiB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBJbiB0aGlzIGV4YW1wbGUsICppbnB1dCogaXMgY2xvc2VkIGFmdGVyIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBpcyBleGl0ZWQsIGV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vyczo6CiAKLSoqT3B0aW9uYWwgaW4tcGxhY2UgZmlsdGVyaW5nOioqIGlmIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGBgaW5wbGFjZT0xYGAgaXMgcGFzc2VkCi10byA6ZnVuYzpgZmlsZWlucHV0LmlucHV0YCBvciB0byB0aGUgOmNsYXNzOmBGaWxlSW5wdXRgIGNvbnN0cnVjdG9yLCB0aGUgZmlsZSBpcwotbW92ZWQgdG8gYSBiYWNrdXAgZmlsZSBhbmQgc3RhbmRhcmQgb3V0cHV0IGlzIGRpcmVjdGVkIHRvIHRoZSBpbnB1dCBmaWxlIChpZiBhCi1maWxlIG9mIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGJhY2t1cCBmaWxlIGFscmVhZHkgZXhpc3RzLCBpdCB3aWxsIGJlIHJlcGxhY2VkCi1zaWxlbnRseSkuICBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHdyaXRlIGEgZmlsdGVyIHRoYXQgcmV3cml0ZXMgaXRzIGlucHV0Ci1maWxlIGluIHBsYWNlLiAgSWYgdGhlICpiYWNrdXAqIHBhcmFtZXRlciBpcyBnaXZlbiAodHlwaWNhbGx5IGFzCisgICAgICB3aXRoIEZpbGVJbnB1dChmaWxlcz0oJ3NwYW0udHh0JywgJ2VnZ3MudHh0JykpIGFzIGlucHV0OgorICAgICAgICAgIHByb2Nlc3MoaW5wdXQpCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBDYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKworCisqKk9wdGlvbmFsIGluLXBsYWNlIGZpbHRlcmluZzoqKiBpZiB0aGUga2V5d29yZCBhcmd1bWVudCBgYGlucGxhY2U9VHJ1ZWBgIGlzCitwYXNzZWQgdG8gOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGAgb3IgdG8gdGhlIDpjbGFzczpgRmlsZUlucHV0YCBjb25zdHJ1Y3RvciwgdGhlCitmaWxlIGlzIG1vdmVkIHRvIGEgYmFja3VwIGZpbGUgYW5kIHN0YW5kYXJkIG91dHB1dCBpcyBkaXJlY3RlZCB0byB0aGUgaW5wdXQgZmlsZQorKGlmIGEgZmlsZSBvZiB0aGUgc2FtZSBuYW1lIGFzIHRoZSBiYWNrdXAgZmlsZSBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBiZQorcmVwbGFjZWQgc2lsZW50bHkpLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBhIGZpbHRlciB0aGF0IHJld3JpdGVzIGl0cworaW5wdXQgZmlsZSBpbiBwbGFjZS4gIElmIHRoZSAqYmFja3VwKiBwYXJhbWV0ZXIgaXMgZ2l2ZW4gKHR5cGljYWxseSBhcwogYGBiYWNrdXA9Jy48c29tZSBleHRlbnNpb24+J2BgKSwgaXQgc3BlY2lmaWVzIHRoZSBleHRlbnNpb24gZm9yIHRoZSBiYWNrdXAgZmlsZSwKIGFuZCB0aGUgYmFja3VwIGZpbGUgcmVtYWlucyBhcm91bmQ7IGJ5IGRlZmF1bHQsIHRoZSBleHRlbnNpb24gaXMgYGAnLmJhaydgYCBhbmQKIGl0IGlzIGRlbGV0ZWQgd2hlbiB0aGUgb3V0cHV0IGZpbGUgaXMgY2xvc2VkLiAgSW4tcGxhY2UgZmlsdGVyaW5nIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mbm1hdGNoLnJzdCBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CmluZGV4IDdmYTYxNDguLjRiYTZiNzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0CkBAIC05LDYgKzksMTAgQEAKIAogLi4gaW5kZXg6OiBtb2R1bGU6IHJlCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ZubWF0Y2gucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIFVuaXggc2hlbGwtc3R5bGUgd2lsZGNhcmRzLCB3aGljaCBhcmUgKm5vdCogdGhlCiBzYW1lIGFzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHdoaWNoIGFyZSBkb2N1bWVudGVkIGluIHRoZSA6bW9kOmByZWAgbW9kdWxlKS4gIFRoZQogc3BlY2lhbCBjaGFyYWN0ZXJzIHVzZWQgaW4gc2hlbGwtc3R5bGUgd2lsZGNhcmRzIGFyZToKQEAgLTcwLDYgKzc0LDggQEAKIAogICAgUmV0dXJuIHRoZSBzaGVsbC1zdHlsZSAqcGF0dGVybiogY29udmVydGVkIHRvIGEgcmVndWxhciBleHByZXNzaW9uLgogCisgICBCZSBhd2FyZSB0aGVyZSBpcyBubyB3YXkgdG8gcXVvdGUgbWV0YS1jaGFyYWN0ZXJzLgorCiAgICBFeGFtcGxlOgogCiAgICAgICA+Pj4gaW1wb3J0IGZubWF0Y2gsIHJlCkBAIC04Niw0ICs5MiwzIEBACiAKICAgIE1vZHVsZSA6bW9kOmBnbG9iYAogICAgICAgVW5peCBzaGVsbC1zdHlsZSBwYXRoIGV4cGFuc2lvbi4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdCBiL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKaW5kZXggNzk2MDAyNi4uYTNhZDQ0YSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogSmVmZnJleSBZYXNza2luIDxqeWFzc2tpbiBhdCBnbWFpbC5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogSmVmZnJleSBZYXNza2luIDxqeWFzc2tpbiBhdCBnbWFpbC5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ZyYWN0aW9ucy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGZyYWN0aW9uc2AgbW9kdWxlIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHJhdGlvbmFsIG51bWJlciBhcml0aG1ldGljLgogCkBAIC0xNSwxNyArMTgsMjQgQEAKIAogLi4gY2xhc3M6OiBGcmFjdGlvbihudW1lcmF0b3I9MCwgZGVub21pbmF0b3I9MSkKICAgICAgICAgICAgRnJhY3Rpb24ob3RoZXJfZnJhY3Rpb24pCisgICAgICAgICAgIEZyYWN0aW9uKGZsb2F0KQorICAgICAgICAgICBGcmFjdGlvbihkZWNpbWFsKQogICAgICAgICAgICBGcmFjdGlvbihzdHJpbmcpCiAKLSAgIFRoZSBmaXJzdCB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQgKm51bWVyYXRvciogYW5kICpkZW5vbWluYXRvciogYXJlCi0gICBpbnN0YW5jZXMgb2YgOmNsYXNzOmBudW1iZXJzLlJhdGlvbmFsYCBhbmQgcmV0dXJucyBhIG5ldwotICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2Ugd2l0aCB2YWx1ZSBgYG51bWVyYXRvci9kZW5vbWluYXRvcmBgLiBJZgotICAgKmRlbm9taW5hdG9yKiBpcyA6Y29uc3Q6YDBgLCBpdCByYWlzZXMgYQotICAgOmV4YzpgWmVyb0RpdmlzaW9uRXJyb3JgLiBUaGUgc2Vjb25kIHZlcnNpb24gcmVxdWlyZXMgdGhhdAotICAgKm90aGVyX2ZyYWN0aW9uKiBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YG51bWJlcnMuUmF0aW9uYWxgIGFuZAotICAgcmV0dXJucyBhbiA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZSB3aXRoIHRoZSBzYW1lIHZhbHVlLiAgVGhlCi0gICBsYXN0IHZlcnNpb24gb2YgdGhlIGNvbnN0cnVjdG9yIGV4cGVjdHMgYSBzdHJpbmcgaW5zdGFuY2UuICBUaGUKLSAgIHVzdWFsIGZvcm0gZm9yIHRoaXMgc3RyaW5nIGlzOjoKKyAgIFRoZSBmaXJzdCB2ZXJzaW9uIHJlcXVpcmVzIHRoYXQgKm51bWVyYXRvciogYW5kICpkZW5vbWluYXRvciogYXJlIGluc3RhbmNlcworICAgb2YgOmNsYXNzOmBudW1iZXJzLlJhdGlvbmFsYCBhbmQgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YEZyYWN0aW9uYCBpbnN0YW5jZQorICAgd2l0aCB2YWx1ZSBgYG51bWVyYXRvci9kZW5vbWluYXRvcmBgLiBJZiAqZGVub21pbmF0b3IqIGlzIDpjb25zdDpgMGAsIGl0CisgICByYWlzZXMgYSA6ZXhjOmBaZXJvRGl2aXNpb25FcnJvcmAuIFRoZSBzZWNvbmQgdmVyc2lvbiByZXF1aXJlcyB0aGF0CisgICAqb3RoZXJfZnJhY3Rpb24qIGlzIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgbnVtYmVycy5SYXRpb25hbGAgYW5kIHJldHVybnMgYQorICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2Ugd2l0aCB0aGUgc2FtZSB2YWx1ZS4gIFRoZSBuZXh0IHR3byB2ZXJzaW9ucyBhY2NlcHQKKyAgIGVpdGhlciBhIDpjbGFzczpgZmxvYXRgIG9yIGEgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlLCBhbmQgcmV0dXJuIGEKKyAgIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIHdpdGggZXhhY3RseSB0aGUgc2FtZSB2YWx1ZS4gIE5vdGUgdGhhdCBkdWUgdG8gdGhlCisgICB1c3VhbCBpc3N1ZXMgd2l0aCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgKHNlZSA6cmVmOmB0dXQtZnAtaXNzdWVzYCksIHRoZQorICAgYXJndW1lbnQgdG8gYGBGcmFjdGlvbigxLjEpYGAgaXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gMTEvMTAsIGFuZCBzbworICAgYGBGcmFjdGlvbigxLjEpYGAgZG9lcyAqbm90KiByZXR1cm4gYGBGcmFjdGlvbigxMSwgMTApYGAgYXMgb25lIG1pZ2h0IGV4cGVjdC4KKyAgIChCdXQgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1ldGg6YGxpbWl0X2Rlbm9taW5hdG9yYCBtZXRob2QgYmVsb3cuKQorICAgVGhlIGxhc3QgdmVyc2lvbiBvZiB0aGUgY29uc3RydWN0b3IgZXhwZWN0cyBhIHN0cmluZyBvciB1bmljb2RlIGluc3RhbmNlLgorICAgVGhlIHVzdWFsIGZvcm0gZm9yIHRoaXMgaW5zdGFuY2UgaXM6OgogCiAgICAgICBbc2lnbl0gbnVtZXJhdG9yIFsnLycgZGVub21pbmF0b3JdCiAKQEAgLTU1LDYgKzY1LDEzIEBACiAgICAgICBGcmFjdGlvbigtMSwgOCkKICAgICAgID4+PiBGcmFjdGlvbignN2UtNicpCiAgICAgICBGcmFjdGlvbig3LCAxMDAwMDAwKQorICAgICAgPj4+IEZyYWN0aW9uKDIuMjUpCisgICAgICBGcmFjdGlvbig5LCA0KQorICAgICAgPj4+IEZyYWN0aW9uKDEuMSkKKyAgICAgIEZyYWN0aW9uKDI0NzY5Nzk3OTUwNTM3NzMsIDIyNTE3OTk4MTM2ODUyNDgpCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCisgICAgICA+Pj4gRnJhY3Rpb24oRGVjaW1hbCgnMS4xJykpCisgICAgICBGcmFjdGlvbigxMSwgMTApCiAKIAogICAgVGhlIDpjbGFzczpgRnJhY3Rpb25gIGNsYXNzIGluaGVyaXRzIGZyb20gdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MKQEAgLTYzLDYgKzgwLDEwIEBACiAgICBhbmQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlLiAgSW4gYWRkaXRpb24sCiAgICA6Y2xhc3M6YEZyYWN0aW9uYCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIDpjbGFzczpgRnJhY3Rpb25gIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIDpjbGFzczpgZmxvYXRgIGFuZAorICAgICAgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcy4KKwogCiAgICAuLiBtZXRob2Q6OiBmcm9tX2Zsb2F0KGZsdCkKIApAQCAtNzAsMTIgKzkxLDE5IEBACiAgICAgICB2YWx1ZSBvZiAqZmx0Kiwgd2hpY2ggbXVzdCBiZSBhIDpjbGFzczpgZmxvYXRgLiBCZXdhcmUgdGhhdAogICAgICAgYGBGcmFjdGlvbi5mcm9tX2Zsb2F0KDAuMylgYCBpcyBub3QgdGhlIHNhbWUgdmFsdWUgYXMgYGBGcmFjdGlvbigzLCAxMClgYAogCisgICAgICAuLiBub3RlOjogRnJvbSBQeXRob24gMy4yIG9ud2FyZHMsIHlvdSBjYW4gYWxzbyBjb25zdHJ1Y3QgYQorICAgICAgICAgOmNsYXNzOmBGcmFjdGlvbmAgaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSBhIDpjbGFzczpgZmxvYXRgLgorCiAKICAgIC4uIG1ldGhvZDo6IGZyb21fZGVjaW1hbChkZWMpCiAKICAgICAgIFRoaXMgY2xhc3MgbWV0aG9kIGNvbnN0cnVjdHMgYSA6Y2xhc3M6YEZyYWN0aW9uYCByZXByZXNlbnRpbmcgdGhlIGV4YWN0CiAgICAgICB2YWx1ZSBvZiAqZGVjKiwgd2hpY2ggbXVzdCBiZSBhIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZS4KIAorICAgICAgLi4gbm90ZTo6IEZyb20gUHl0aG9uIDMuMiBvbndhcmRzLCB5b3UgY2FuIGFsc28gY29uc3RydWN0IGEKKyAgICAgICAgIDpjbGFzczpgRnJhY3Rpb25gIGluc3RhbmNlIGRpcmVjdGx5IGZyb20gYSA6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAKKyAgICAgICAgIGluc3RhbmNlLgorCiAKICAgIC4uIG1ldGhvZDo6IGxpbWl0X2Rlbm9taW5hdG9yKG1heF9kZW5vbWluYXRvcj0xMDAwMDAwKQogCkBAIC05MCwxMCArMTE4LDEyIEBACiAgICAgICBvciBmb3IgcmVjb3ZlcmluZyBhIHJhdGlvbmFsIG51bWJlciB0aGF0J3MgcmVwcmVzZW50ZWQgYXMgYSBmbG9hdDoKIAogICAgICAgICAgPj4+IGZyb20gbWF0aCBpbXBvcnQgcGksIGNvcwotICAgICAgICAgPj4+IEZyYWN0aW9uLmZyb21fZmxvYXQoY29zKHBpLzMpKQorICAgICAgICAgPj4+IEZyYWN0aW9uKGNvcyhwaS8zKSkKICAgICAgICAgIEZyYWN0aW9uKDQ1MDM1OTk2MjczNzA0OTcsIDkwMDcxOTkyNTQ3NDA5OTIpCi0gICAgICAgICA+Pj4gRnJhY3Rpb24uZnJvbV9mbG9hdChjb3MocGkvMykpLmxpbWl0X2Rlbm9taW5hdG9yKCkKKyAgICAgICAgID4+PiBGcmFjdGlvbihjb3MocGkvMykpLmxpbWl0X2Rlbm9taW5hdG9yKCkKICAgICAgICAgIEZyYWN0aW9uKDEsIDIpCisgICAgICAgICA+Pj4gRnJhY3Rpb24oMS4xKS5saW1pdF9kZW5vbWluYXRvcigpCisgICAgICAgICBGcmFjdGlvbigxMSwgMTApCiAKIAogICAgLi4gbWV0aG9kOjogX19mbG9vcl9fKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CmluZGV4IDU1NDU1MDUuLjViYmVmNGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdApAQCAtOSw2ICs5LDEwIEBACiAgICBwYWlyOiBGVFA7IHByb3RvY29sCiAgICBzaW5nbGU6IEZUUDsgZnRwbGliIChzdGFuZGFyZCBtb2R1bGUpCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Z0cGxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY2xhc3MgOmNsYXNzOmBGVFBgIGFuZCBhIGZldyByZWxhdGVkIGl0ZW1zLiBUaGUKIDpjbGFzczpgRlRQYCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBjbGllbnQgc2lkZSBvZiB0aGUgRlRQIHByb3RvY29sLiAgWW91IGNhbiB1c2UKIHRoaXMgdG8gd3JpdGUgUHl0aG9uIHByb2dyYW1zIHRoYXQgcGVyZm9ybSBhIHZhcmlldHkgb2YgYXV0b21hdGVkIEZUUCBqb2JzLCBzdWNoCkBAIC0zMyw4ICszNyw4IEBACiAgICAnMjI2IFRyYW5zZmVyIGNvbXBsZXRlLicKICAgID4+PiBmdHAucXVpdCgpCiAKLVRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGl0ZW1zOgogCitUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBpdGVtczoKIAogLi4gY2xhc3M6OiBGVFAoaG9zdD0nJywgdXNlcj0nJywgcGFzc3dkPScnLCBhY2N0PScnWywgdGltZW91dF0pCiAKQEAgLTQ2LDYgKzUwLDYxIEBACiAgICBjb25uZWN0aW9uIGF0dGVtcHQgKGlmIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcKICAgIHdpbGwgYmUgdXNlZCkuCiAKKyAgIDpjbGFzczpgRlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gSGVyZSBpcyBhIHNhbXBsZQorICAgb24gaG93IHVzaW5nIGl0OgorCisgICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFAKKyAgICA+Pj4gd2l0aCBGVFAoImZ0cDEuYXQucHJvZnRwZC5vcmciKSBhcyBmdHA6CisgICAgLi4uICAgICBmdHAubG9naW4oKQorICAgIC4uLiAgICAgZnRwLmRpcigpCisgICAgLi4uCisgICAgJzIzMCBBbm9ueW1vdXMgbG9naW4gb2ssIHJlc3RyaWN0aW9ucyBhcHBseS4nCisgICAgZHIteHIteHIteCAgIDkgZnRwICAgICAgZnRwICAgICAgICAgICAxNTQgTWF5ICA2IDEwOjQzIC4KKyAgICBkci14ci14ci14ICAgOSBmdHAgICAgICBmdHAgICAgICAgICAgIDE1NCBNYXkgIDYgMTA6NDMgLi4KKyAgICBkci14ci14ci14ICAgNSBmdHAgICAgICBmdHAgICAgICAgICAgNDA5NiBNYXkgIDYgMTA6NDMgQ2VudE9TCisgICAgZHIteHIteHIteCAgIDMgZnRwICAgICAgZnRwICAgICAgICAgICAgMTggSnVsIDEwICAyMDA4IEZlZG9yYQorICAgID4+PgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorCisKKy4uIGNsYXNzOjogRlRQX1RMUyhob3N0PScnLCB1c2VyPScnLCBwYXNzd2Q9JycsIGFjY3Q9JycsIFtrZXlmaWxlWywgY2VydGZpbGVbLCBjb250ZXh0WywgdGltZW91dF1dXV0pCisKKyAgIEEgOmNsYXNzOmBGVFBgIHN1YmNsYXNzIHdoaWNoIGFkZHMgVExTIHN1cHBvcnQgdG8gRlRQIGFzIGRlc2NyaWJlZCBpbgorICAgOnJmYzpgNDIxN2AuCisgICBDb25uZWN0IGFzIHVzdWFsIHRvIHBvcnQgMjEgaW1wbGljaXRseSBzZWN1cmluZyB0aGUgRlRQIGNvbnRyb2wgY29ubmVjdGlvbgorICAgYmVmb3JlIGF1dGhlbnRpY2F0aW5nLiBTZWN1cmluZyB0aGUgZGF0YSBjb25uZWN0aW9uIHJlcXVpcmVzIHRoZSB1c2VyIHRvCisgICBleHBsaWNpdGx5IGFzayBmb3IgaXQgYnkgY2FsbGluZyB0aGUgOm1ldGg6YHByb3RfcGAgbWV0aG9kLgorICAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBvcHRpb25hbCAtLSB0aGV5IGNhbiBjb250YWluIGEgUEVNIGZvcm1hdHRlZAorICAgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGNoYWluIGZpbGUgbmFtZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLgorICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKKyAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYQorICAgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisgICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczoKKworICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCisgICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5weXRob24ub3JnJykKKyAgID4+PiBmdHBzLmxvZ2luKCkgICAgICAgICAgICMgbG9naW4gYW5vbnltb3VzbHkgYmVmb3JlIHNlY3VyaW5nIGNvbnRyb2wgY2hhbm5lbAorICAgPj4+IGZ0cHMucHJvdF9wKCkgICAgICAgICAgIyBzd2l0Y2ggdG8gc2VjdXJlIGRhdGEgY29ubmVjdGlvbgorICAgPj4+IGZ0cHMucmV0cmxpbmVzKCdMSVNUJykgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IHNlY3VyZWx5CisgICB0b3RhbCA5CisgICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLgorICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4uCisgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgYmluCisgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgZXRjCisgICBkLXd4cnd4ci14ICAgMiBmdHAgICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgIDUgMTM6NDMgaW5jb21pbmcKKyAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IE5vdiAxNyAgMTk5MyBsaWIKKyAgIGRyd3hyLXhyLXggICA2IDEwOTQgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAxMyAxOTowNyBwdWIKKyAgIGRyd3hyLXhyLXggICAzIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCB1c3IKKyAgIC1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMzEyIEF1ZyAgMSAgMTk5NCB3ZWxjb21lLm1zZworICAgJzIyNiBUcmFuc2ZlciBjb21wbGV0ZS4nCisgICA+Pj4gZnRwcy5xdWl0KCkKKyAgID4+PgorCiAKIC4uIGV4Y2VwdGlvbjo6IGVycm9yX3JlcGx5CiAKQEAgLTE5NywxNCArMjU2LDE4IEBACiAgICBQYXNzaXZlIG1vZGUgaXMgb24gYnkgZGVmYXVsdC4KIAogCi0uLiBtZXRob2Q6OiBGVFAuc3RvcmJpbmFyeShjbWQsIGZpbGUsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lKQorLi4gbWV0aG9kOjogRlRQLnN0b3JiaW5hcnkoY21kLCBmaWxlLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSwgcmVzdD1Ob25lKQogCiAgICBTdG9yZSBhIGZpbGUgaW4gYmluYXJ5IHRyYW5zZmVyIG1vZGUuICAqY21kKiBzaG91bGQgYmUgYW4gYXBwcm9wcmlhdGUKICAgIGBgU1RPUmBgIGNvbW1hbmQ6IGBgIlNUT1IgZmlsZW5hbWUiYGAuICpmaWxlKiBpcyBhbiBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAKICAgIHdoaWNoIGlzIHJlYWQgdW50aWwgRU9GIHVzaW5nIGl0cyA6bWV0aDpgcmVhZGAgbWV0aG9kIGluIGJsb2NrcyBvZiBzaXplCiAgICAqYmxvY2tzaXplKiB0byBwcm92aWRlIHRoZSBkYXRhIHRvIGJlIHN0b3JlZC4gIFRoZSAqYmxvY2tzaXplKiBhcmd1bWVudAogICAgZGVmYXVsdHMgdG8gODE5Mi4gICpjYWxsYmFjayogaXMgYW4gb3B0aW9uYWwgc2luZ2xlIHBhcmFtZXRlciBjYWxsYWJsZSB0aGF0Ci0gICBpcyBjYWxsZWQgb24gZWFjaCBibG9jayBvZiBkYXRhIGFmdGVyIGl0IGlzIHNlbnQuCisgICBpcyBjYWxsZWQgb24gZWFjaCBibG9jayBvZiBkYXRhIGFmdGVyIGl0IGlzIHNlbnQuICpyZXN0KiBtZWFucyB0aGUgc2FtZSB0aGluZworICAgYXMgaW4gdGhlIDptZXRoOmB0cmFuc2ZlcmNtZGAgbWV0aG9kLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgKnJlc3QqIHBhcmFtZXRlciBhZGRlZC4KIAogCiAuLiBtZXRob2Q6OiBGVFAuc3RvcmxpbmVzKGNtZCwgZmlsZSwgY2FsbGJhY2s9Tm9uZSkKQEAgLTMxOSwzICszODIsMjYgQEAKICAgIDptZXRoOmBjbG9zZWAgb3IgOm1ldGg6YHF1aXRgIHlvdSBjYW5ub3QgcmVvcGVuIHRoZSBjb25uZWN0aW9uIGJ5IGlzc3VpbmcKICAgIGFub3RoZXIgOm1ldGg6YGxvZ2luYCBtZXRob2QpLgogCisKK0ZUUF9UTFMgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tCisKKzpjbGFzczpgRlRQX1RMU2AgY2xhc3MgaW5oZXJpdHMgZnJvbSA6Y2xhc3M6YEZUUGAsIGRlZmluaW5nIHRoZXNlIGFkZGl0aW9uYWwgb2JqZWN0czoKKworLi4gYXR0cmlidXRlOjogRlRQX1RMUy5zc2xfdmVyc2lvbgorCisgICBUaGUgU1NMIHZlcnNpb24gdG8gdXNlIChkZWZhdWx0cyB0byAqVExTdjEqKS4KKworLi4gbWV0aG9kOjogRlRQX1RMUy5hdXRoKCkKKworICAgU2V0IHVwIHNlY3VyZSBjb250cm9sIGNvbm5lY3Rpb24gYnkgdXNpbmcgVExTIG9yIFNTTCwgZGVwZW5kaW5nIG9uIHdoYXQgc3BlY2lmaWVkIGluIDptZXRoOmBzc2xfdmVyc2lvbmAgYXR0cmlidXRlLgorCisuLiBtZXRob2Q6OiBGVFBfVExTLnByb3RfcCgpCisKKyAgIFNldCB1cCBzZWN1cmUgZGF0YSBjb25uZWN0aW9uLgorCisuLiBtZXRob2Q6OiBGVFBfVExTLnByb3RfYygpCisKKyAgIFNldCB1cCBjbGVhciB0ZXh0IGRhdGEgY29ubmVjdGlvbi4KKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdGlvbmFsLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9uYWwucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViNjE4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbmFsLnJzdApAQCAtMCwwICsxLDE1IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0Z1bmN0aW9uYWwgUHJvZ3JhbW1pbmcgTW9kdWxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBtb2R1bGVzIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIgcHJvdmlkZSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdGhhdCBzdXBwb3J0CithIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmcgc3R5bGUsIGFuZCBnZW5lcmFsIG9wZXJhdGlvbnMgb24gY2FsbGFibGVzLgorCitUaGUgZm9sbG93aW5nIG1vZHVsZXMgYXJlIGRvY3VtZW50ZWQgaW4gdGhpcyBjaGFwdGVyOgorCisKKy4uIHRvY3RyZWU6OgorCisgICBpdGVydG9vbHMucnN0CisgICBmdW5jdG9vbHMucnN0CisgICBvcGVyYXRvci5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CmluZGV4IDE1NDdmNmQuLjMwMjAxMjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdApAQCAtMTAsMjAgKzEwLDIwIEBACiA9PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PQogLi4gICAgICAgICAgICAgICAgICAgLi4gICAgICAgICAgICAgICAgIEJ1aWx0LWluIEZ1bmN0aW9ucyAgLi4gICAgICAgICAgICAgICAgLi4KID09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09Ci06ZnVuYzpgYWJzYCAgICAgICAgICA6ZnVuYzpgZGlyYCAgICAgICAgOmZ1bmM6YGhleGAgICAgICAgICA6ZnVuYzpgbmV4dGAgICAgICA6ZnVuYzpgc2xpY2VgCi06ZnVuYzpgYWxsYCAgICAgICAgICA6ZnVuYzpgZGl2bW9kYCAgICAgOmZ1bmM6YGlkYCAgICAgICAgICA6ZnVuYzpgb2JqZWN0YCAgICA6ZnVuYzpgc29ydGVkYAotOmZ1bmM6YGFueWAgICAgICAgICAgOmZ1bmM6YGVudW1lcmF0ZWAgIDpmdW5jOmBpbnB1dGAgICAgICAgOmZ1bmM6YG9jdGAgICAgICAgOmZ1bmM6YHN0YXRpY21ldGhvZGAKLTpmdW5jOmBhc2NpaWAgICAgICAgIDpmdW5jOmBldmFsYCAgICAgICA6ZnVuYzpgaW50YCAgICAgICAgIDpmdW5jOmBvcGVuYCAgICAgIDpmdW5jOmBzdHJgCi06ZnVuYzpgYmluYCAgICAgICAgICA6ZnVuYzpgZXhlY2AgICAgICAgOmZ1bmM6YGlzaW5zdGFuY2VgICA6ZnVuYzpgb3JkYCAgICAgICA6ZnVuYzpgc3VtYAotOmZ1bmM6YGJvb2xgICAgICAgICAgOmZ1bmM6YGZpbHRlcmAgICAgIDpmdW5jOmBpc3N1YmNsYXNzYCAgOmZ1bmM6YHBvd2AgICAgICAgOmZ1bmM6YHN1cGVyYAotOmZ1bmM6YGJ5dGVhcnJheWAgICAgOmZ1bmM6YGZsb2F0YCAgICAgIDpmdW5jOmBpdGVyYCAgICAgICAgOmZ1bmM6YHByaW50YCAgICAgOmZ1bmM6YHR1cGxlYAotOmZ1bmM6YGJ5dGVzYCAgICAgICAgOmZ1bmM6YGZvcm1hdGAgICAgIDpmdW5jOmBsZW5gICAgICAgICAgOmZ1bmM6YHByb3BlcnR5YCAgOmZ1bmM6YHR5cGVgCis6ZnVuYzpgYWJzYCAgICAgICAgICA6ZnVuYzpgZGljdGAgICAgICAgOmZ1bmM6YGhlbHBgICAgICAgICA6ZnVuYzpgbWluYCAgICAgICA6ZnVuYzpgc2V0YXR0cmAKKzpmdW5jOmBhbGxgICAgICAgICAgIDpmdW5jOmBkaXJgICAgICAgICA6ZnVuYzpgaGV4YCAgICAgICAgIDpmdW5jOmBuZXh0YCAgICAgIDpmdW5jOmBzbGljZWAKKzpmdW5jOmBhbnlgICAgICAgICAgIDpmdW5jOmBkaXZtb2RgICAgICA6ZnVuYzpgaWRgICAgICAgICAgIDpmdW5jOmBvYmplY3RgICAgIDpmdW5jOmBzb3J0ZWRgCis6ZnVuYzpgYXNjaWlgICAgICAgICA6ZnVuYzpgZW51bWVyYXRlYCAgOmZ1bmM6YGlucHV0YCAgICAgICA6ZnVuYzpgb2N0YCAgICAgICA6ZnVuYzpgc3RhdGljbWV0aG9kYAorOmZ1bmM6YGJpbmAgICAgICAgICAgOmZ1bmM6YGV2YWxgICAgICAgIDpmdW5jOmBpbnRgICAgICAgICAgOmZ1bmM6YG9wZW5gICAgICAgOmZ1bmM6YHN0cmAKKzpmdW5jOmBib29sYCAgICAgICAgIDpmdW5jOmBleGVjYCAgICAgICA6ZnVuYzpgaXNpbnN0YW5jZWAgIDpmdW5jOmBvcmRgICAgICAgIDpmdW5jOmBzdW1gCis6ZnVuYzpgYnl0ZWFycmF5YCAgICA6ZnVuYzpgZmlsdGVyYCAgICAgOmZ1bmM6YGlzc3ViY2xhc3NgICA6ZnVuYzpgcG93YCAgICAgICA6ZnVuYzpgc3VwZXJgCis6ZnVuYzpgYnl0ZXNgICAgICAgICA6ZnVuYzpgZmxvYXRgICAgICAgOmZ1bmM6YGl0ZXJgICAgICAgICA6ZnVuYzpgcHJpbnRgICAgICA6ZnVuYzpgdHVwbGVgCis6ZnVuYzpgY2FsbGFibGVgICAgICA6ZnVuYzpgZm9ybWF0YCAgICAgOmZ1bmM6YGxlbmAgICAgICAgICA6ZnVuYzpgcHJvcGVydHlgICA6ZnVuYzpgdHlwZWAKIDpmdW5jOmBjaHJgICAgICAgICAgIDpmdW5jOmBmcm96ZW5zZXRgICA6ZnVuYzpgbGlzdGAgICAgICAgIDpmdW5jOmByYW5nZWAgICAgIDpmdW5jOmB2YXJzYAogOmZ1bmM6YGNsYXNzbWV0aG9kYCAgOmZ1bmM6YGdldGF0dHJgICAgIDpmdW5jOmBsb2NhbHNgICAgICAgOmZ1bmM6YHJlcHJgICAgICAgOmZ1bmM6YHppcGAKIDpmdW5jOmBjb21waWxlYCAgICAgIDpmdW5jOmBnbG9iYWxzYCAgICA6ZnVuYzpgbWFwYCAgICAgICAgIDpmdW5jOmByZXZlcnNlZGAgIDpmdW5jOmBfX2ltcG9ydF9fYAogOmZ1bmM6YGNvbXBsZXhgICAgICAgOmZ1bmM6YGhhc2F0dHJgICAgIDpmdW5jOmBtYXhgICAgICAgICAgOmZ1bmM6YHJvdW5kYAogOmZ1bmM6YGRlbGF0dHJgICAgICAgOmZ1bmM6YGhhc2hgICAgICAgIDpmdW5jOmBtZW1vcnl2aWV3YCAgOmZ1bmM6YHNldGAKLTpmdW5jOmBkaWN0YCAgICAgICAgIDpmdW5jOmBoZWxwYCAgICAgICA6ZnVuYzpgbWluYCAgICAgICAgIDpmdW5jOmBzZXRhdHRyYAogPT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT0KIAogLi4gZnVuY3Rpb246OiBhYnMoeCkKQEAgLTEyMSw2ICsxMjEsMTkgQEAKICAgIEJ5dGVzIG9iamVjdHMgY2FuIGFsc28gYmUgY3JlYXRlZCB3aXRoIGxpdGVyYWxzLCBzZWUgOnJlZjpgc3RyaW5nc2AuCiAKIAorLi4gZnVuY3Rpb246OiBjYWxsYWJsZShvYmplY3QpCisKKyAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmIHRoZSAqb2JqZWN0KiBhcmd1bWVudCBhcHBlYXJzIGNhbGxhYmxlLAorICAgOmNvbnN0OmBGYWxzZWAgaWYgbm90LiAgSWYgdGhpcyByZXR1cm5zIHRydWUsIGl0IGlzIHN0aWxsIHBvc3NpYmxlIHRoYXQgYQorICAgY2FsbCBmYWlscywgYnV0IGlmIGl0IGlzIGZhbHNlLCBjYWxsaW5nICpvYmplY3QqIHdpbGwgbmV2ZXIgc3VjY2VlZC4KKyAgIE5vdGUgdGhhdCBjbGFzc2VzIGFyZSBjYWxsYWJsZSAoY2FsbGluZyBhIGNsYXNzIHJldHVybnMgYSBuZXcgaW5zdGFuY2UpOworICAgaW5zdGFuY2VzIGFyZSBjYWxsYWJsZSBpZiB0aGVpciBjbGFzcyBoYXMgYSA6bWV0aDpgX19jYWxsX19gIG1ldGhvZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBUaGlzIGZ1bmN0aW9uIHdhcyBmaXJzdCByZW1vdmVkIGluIFB5dGhvbiAzLjAgYW5kIHRoZW4gYnJvdWdodCBiYWNrCisgICAgICBpbiBQeXRob24gMy4yLgorCisKIC4uIGZ1bmN0aW9uOjogY2hyKGkpCiAKICAgIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNoYXJhY3RlciB3aG9zZSBVbmljb2RlIGNvZGVwb2ludCBpcyB0aGUgaW50ZWdlcgpAQCAtMTYxLDcgKzE3NCw3IEBACiAgICB0eXBlIGhpZXJhcmNoeSBpbiA6cmVmOmB0eXBlc2AuCiAKIAotLi4gZnVuY3Rpb246OiBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsIG1vZGUsIGZsYWdzPTAsIGRvbnRfaW5oZXJpdD1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCBtb2RlLCBmbGFncz0wLCBkb250X2luaGVyaXQ9RmFsc2UsIG9wdGltaXplPS0xKQogCiAgICBDb21waWxlIHRoZSAqc291cmNlKiBpbnRvIGEgY29kZSBvciBBU1Qgb2JqZWN0LiAgQ29kZSBvYmplY3RzIGNhbiBiZSBleGVjdXRlZAogICAgYnkgOmZ1bmM6YGV4ZWNgIG9yIDpmdW5jOmBldmFsYC4gICpzb3VyY2UqIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYW4gQVNUCkBAIC0xOTMsMTYgKzIwNiwyNSBAQAogICAgY2FuIGJlIGZvdW5kIGFzIHRoZSA6YXR0cjpgY29tcGlsZXJfZmxhZ2AgYXR0cmlidXRlIG9uIHRoZSA6Y2xhc3M6YF9GZWF0dXJlYAogICAgaW5zdGFuY2UgaW4gdGhlIDptb2Q6YF9fZnV0dXJlX19gIG1vZHVsZS4KIAorICAgVGhlIGFyZ3VtZW50ICpvcHRpbWl6ZSogc3BlY2lmaWVzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgb2YgdGhlIGNvbXBpbGVyOyB0aGUKKyAgIGRlZmF1bHQgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMKKyAgIGdpdmVuIGJ5IDpvcHRpb246YC1PYCBvcHRpb25zLiAgRXhwbGljaXQgbGV2ZWxzIGFyZSBgYDBgYCAobm8gb3B0aW1pemF0aW9uOworICAgYGBfX2RlYnVnX19gYCBpcyB0cnVlKSwgYGAxYGAgKGFzc2VydHMgYXJlIHJlbW92ZWQsIGBgX19kZWJ1Z19fYGAgaXMgZmFsc2UpCisgICBvciBgYDJgYCAoZG9jc3RyaW5ncyBhcmUgcmVtb3ZlZCB0b28pLgorCiAgICBUaGlzIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmBTeW50YXhFcnJvcmAgaWYgdGhlIGNvbXBpbGVkIHNvdXJjZSBpcyBpbnZhbGlkLAogICAgYW5kIDpleGM6YFR5cGVFcnJvcmAgaWYgdGhlIHNvdXJjZSBjb250YWlucyBudWxsIGJ5dGVzLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgV2hlbiBjb21waWxpbmcgYSBzdHJpbmcgd2l0aCBtdWx0aS1saW5lIHN0YXRlbWVudHMsIGxpbmUgZW5kaW5ncyBtdXN0IGJlCi0gICAgICByZXByZXNlbnRlZCBieSBhIHNpbmdsZSBuZXdsaW5lIGNoYXJhY3RlciAoYGAnXG4nYGApLCBhbmQgdGhlIGlucHV0IG11c3QKLSAgICAgIGJlIHRlcm1pbmF0ZWQgYnkgYXQgbGVhc3Qgb25lIG5ld2xpbmUgY2hhcmFjdGVyLiAgSWYgbGluZSBlbmRpbmdzIGFyZQotICAgICAgcmVwcmVzZW50ZWQgYnkgYGAnXHJcbidgYCwgdXNlIDptZXRoOmBzdHIucmVwbGFjZWAgdG8gY2hhbmdlIHRoZW0gaW50bwotICAgICAgYGAnXG4nYGAuCisgICAgICBXaGVuIGNvbXBpbGluZyBhIHN0cmluZyB3aXRoIG11bHRpLWxpbmUgY29kZSBpbiBgYCdzaW5nbGUnYGAgb3IKKyAgICAgIGBgJ2V2YWwnYGAgbW9kZSwgaW5wdXQgbXVzdCBiZSB0ZXJtaW5hdGVkIGJ5IGF0IGxlYXN0IG9uZSBuZXdsaW5lCisgICAgICBjaGFyYWN0ZXIuICBUaGlzIGlzIHRvIGZhY2lsaXRhdGUgZGV0ZWN0aW9uIG9mIGluY29tcGxldGUgYW5kIGNvbXBsZXRlCisgICAgICBzdGF0ZW1lbnRzIGluIHRoZSA6bW9kOmBjb2RlYCBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBbGxvd2VkIHVzZSBvZiBXaW5kb3dzIGFuZCBNYWMgbmV3bGluZXMuICBBbHNvIGlucHV0IGluIGBgJ2V4ZWMnYGAgbW9kZQorICAgICAgZG9lcyBub3QgaGF2ZSB0byBlbmQgaW4gYSBuZXdsaW5lIGFueW1vcmUuICBBZGRlZCB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKIAogLi4gZnVuY3Rpb246OiBjb21wbGV4KFtyZWFsWywgaW1hZ11dKQpAQCAtMzQ2LDcgKzM2OCw3IEBACiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBvYmplY3RzIChzdWNoIGFzCiAgICB0aG9zZSBjcmVhdGVkIGJ5IDpmdW5jOmBjb21waWxlYCkuICBJbiB0aGlzIGNhc2UgcGFzcyBhIGNvZGUgb2JqZWN0IGluc3RlYWQKICAgIG9mIGEgc3RyaW5nLiAgSWYgdGhlIGNvZGUgb2JqZWN0IGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYGAnZXhlYydgYCBhcyB0aGUKLSAgICpraW5kKiBhcmd1bWVudCwgOmZ1bmM6YGV2YWxgXCdzIHJldHVybiB2YWx1ZSB3aWxsIGJlIGBgTm9uZWBgLgorICAgKm1vZGUqIGFyZ3VtZW50LCA6ZnVuYzpgZXZhbGBcJ3MgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYGBOb25lYGAuCiAKICAgIEhpbnRzOiBkeW5hbWljIGV4ZWN1dGlvbiBvZiBzdGF0ZW1lbnRzIGlzIHN1cHBvcnRlZCBieSB0aGUgOmZ1bmM6YGV4ZWNgCiAgICBmdW5jdGlvbi4gIFRoZSA6ZnVuYzpgZ2xvYmFsc2AgYW5kIDpmdW5jOmBsb2NhbHNgIGZ1bmN0aW9ucwpAQCAtNDE0LDI2ICs0MzYsNTQgQEAKIAogLi4gZnVuY3Rpb246OiBmbG9hdChbeF0pCiAKLSAgIENvbnZlcnQgYSBzdHJpbmcgb3IgYSBudW1iZXIgdG8gZmxvYXRpbmcgcG9pbnQuICBJZiB0aGUgYXJndW1lbnQgaXMgYSBzdHJpbmcsCi0gICBpdCBtdXN0IGNvbnRhaW4gYSBwb3NzaWJseSBzaWduZWQgZGVjaW1hbCBvciBmbG9hdGluZyBwb2ludCBudW1iZXIsIHBvc3NpYmx5Ci0gICBlbWJlZGRlZCBpbiB3aGl0ZXNwYWNlLiBUaGUgYXJndW1lbnQgbWF5IGFsc28gYmUgYGAnWyt8LV1uYW4nYGAgb3IKLSAgIGBgJ1srfC1daW5mJ2BgLiAgT3RoZXJ3aXNlLCB0aGUgYXJndW1lbnQgbWF5IGJlIGFuIGludGVnZXIgb3IgYSBmbG9hdGluZwotICAgcG9pbnQgbnVtYmVyLCBhbmQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSAod2l0aGluCi0gICBQeXRob24ncyBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24pIGlzIHJldHVybmVkLiAgSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sCi0gICBgYDAuMGBgIGlzIHJldHVybmVkLgorICAgLi4gaW5kZXg6OgorICAgICAgc2luZ2xlOiBOYU4KKyAgICAgIHNpbmdsZTogSW5maW5pdHkKIAotICAgLi4gbm90ZTo6CisgICBDb252ZXJ0IGEgc3RyaW5nIG9yIGEgbnVtYmVyIHRvIGZsb2F0aW5nIHBvaW50LgogCi0gICAgICAuLiBpbmRleDo6Ci0gICAgICAgICBzaW5nbGU6IE5hTgotICAgICAgICAgc2luZ2xlOiBJbmZpbml0eQorICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgc3RyaW5nLCBpdCBzaG91bGQgY29udGFpbiBhIGRlY2ltYWwgbnVtYmVyLCBvcHRpb25hbGx5CisgICBwcmVjZWRlZCBieSBhIHNpZ24sIGFuZCBvcHRpb25hbGx5IGVtYmVkZGVkIGluIHdoaXRlc3BhY2UuICBUaGUgb3B0aW9uYWwKKyAgIHNpZ24gbWF5IGJlIGBgJysnYGAgb3IgYGAnLSdgYDsgYSBgYCcrJ2BgIHNpZ24gaGFzIG5vIGVmZmVjdCBvbiB0aGUgdmFsdWUKKyAgIHByb2R1Y2VkLiAgVGhlIGFyZ3VtZW50IG1heSBhbHNvIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIE5hTgorICAgKG5vdC1hLW51bWJlciksIG9yIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW5maW5pdHkuICBNb3JlIHByZWNpc2VseSwgdGhlCisgICBpbnB1dCBtdXN0IGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyBncmFtbWFyIGFmdGVyIGxlYWRpbmcgYW5kIHRyYWlsaW5nCisgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYXJlIHJlbW92ZWQ6CiAKLSAgICAgIFdoZW4gcGFzc2luZyBpbiBhIHN0cmluZywgdmFsdWVzIGZvciBOYU4gYW5kIEluZmluaXR5IG1heSBiZSByZXR1cm5lZCwKLSAgICAgIGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBDIGxpYnJhcnkuICBGbG9hdCBhY2NlcHRzIHRoZSBzdHJpbmdzCi0gICAgICBgYCduYW4nYGAsIGBgJ2luZidgYCBhbmQgYGAnLWluZidgYCBmb3IgTmFOIGFuZCBwb3NpdGl2ZSBvciBuZWdhdGl2ZQotICAgICAgaW5maW5pdHkuICBUaGUgY2FzZSBhbmQgYSBsZWFkaW5nICsgYXJlIGlnbm9yZWQgYXMgd2VsbCBhcyBhIGxlYWRpbmcgLSBpcwotICAgICAgaWdub3JlZCBmb3IgTmFOLiAgRmxvYXQgYWx3YXlzIHJlcHJlc2VudHMgTmFOIGFuZCBpbmZpbml0eSBhcyBgYG5hbmBgLAotICAgICAgYGBpbmZgYCBvciBgYC1pbmZgYC4KKyAgIC4uIHByb2R1Y3Rpb25saXN0OjoKKyAgICAgIHNpZ246ICIrIiB8ICItIgorICAgICAgaW5maW5pdHk6ICJJbmZpbml0eSIgfCAiaW5mIgorICAgICAgbmFuOiAibmFuIgorICAgICAgbnVtZXJpY192YWx1ZTogYGZsb2F0bnVtYmVyYCB8IGBpbmZpbml0eWAgfCBgbmFuYAorICAgICAgbnVtZXJpY19zdHJpbmc6IFtgc2lnbmBdIGBudW1lcmljX3ZhbHVlYAorCisgICBIZXJlIGBgZmxvYXRudW1iZXJgYCBpcyB0aGUgZm9ybSBvZiBhIFB5dGhvbiBmbG9hdGluZy1wb2ludCBsaXRlcmFsLAorICAgZGVzY3JpYmVkIGluIDpyZWY6YGZsb2F0aW5nYC4gIENhc2UgaXMgbm90IHNpZ25pZmljYW50LCBzbywgZm9yIGV4YW1wbGUsCisgICAiaW5mIiwgIkluZiIsICJJTkZJTklUWSIgYW5kICJpTmZJTml0eSIgYXJlIGFsbCBhY2NlcHRhYmxlIHNwZWxsaW5ncyBmb3IKKyAgIHBvc2l0aXZlIGluZmluaXR5LgorCisgICBPdGhlcndpc2UsIGlmIHRoZSBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIG9yIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBhCisgICBmbG9hdGluZyBwb2ludCBudW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSAod2l0aGluIFB5dGhvbidzIGZsb2F0aW5nIHBvaW50CisgICBwcmVjaXNpb24pIGlzIHJldHVybmVkLiAgSWYgdGhlIGFyZ3VtZW50IGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIGEgUHl0aG9uCisgICBmbG9hdCwgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQuCisKKyAgIEZvciBhIGdlbmVyYWwgUHl0aG9uIG9iamVjdCBgYHhgYCwgYGBmbG9hdCh4KWBgIGRlbGVnYXRlcyB0bworICAgYGB4Ll9fZmxvYXRfXygpYGAuCisKKyAgIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCBgYDAuMGBgIGlzIHJldHVybmVkLgorCisgICBFeGFtcGxlczo6CisKKyAgICAgID4+PiBmbG9hdCgnKzEuMjMnKQorICAgICAgMS4yMworICAgICAgPj4+IGZsb2F0KCcgICAtMTIzNDVcbicpCisgICAgICAtMTIzNDUuMAorICAgICAgPj4+IGZsb2F0KCcxZS0wMDMnKQorICAgICAgMC4wMDEKKyAgICAgID4+PiBmbG9hdCgnKzFFNicpCisgICAgICAxMDAwMDAwLjAKKyAgICAgID4+PiBmbG9hdCgnLUluZmluaXR5JykKKyAgICAgIC1pbmYKIAogICAgVGhlIGZsb2F0IHR5cGUgaXMgZGVzY3JpYmVkIGluIDpyZWY6YHR5cGVzbnVtZXJpY2AuCiAKQEAgLTQ4MiwxMCArNTMyLDEwIEBACiAKIC4uIGZ1bmN0aW9uOjogaGFzYXR0cihvYmplY3QsIG5hbWUpCiAKLSAgIFRoZSBhcmd1bWVudHMgYXJlIGFuIG9iamVjdCBhbmQgYSBzdHJpbmcuICBUaGUgcmVzdWx0IGlzIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcKLSAgIGlzIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgb2JqZWN0J3MgYXR0cmlidXRlcywgYGBGYWxzZWBgIGlmIG5vdC4gKFRoaXMgaXMKLSAgIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgYGBnZXRhdHRyKG9iamVjdCwgbmFtZSlgYCBhbmQgc2VlaW5nIHdoZXRoZXIgaXQgcmFpc2VzIGFuCi0gICBleGNlcHRpb24gb3Igbm90LikKKyAgIFRoZSBhcmd1bWVudHMgYXJlIGFuIG9iamVjdCBhbmQgYSBzdHJpbmcuICBUaGUgcmVzdWx0IGlzIGBgVHJ1ZWBgIGlmIHRoZQorICAgc3RyaW5nIGlzIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgb2JqZWN0J3MgYXR0cmlidXRlcywgYGBGYWxzZWBgIGlmIG5vdC4gKFRoaXMKKyAgIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcgYGBnZXRhdHRyKG9iamVjdCwgbmFtZSlgYCBhbmQgc2VlaW5nIHdoZXRoZXIgaXQKKyAgIHJhaXNlcyBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgb3Igbm90LikKIAogCiAuLiBmdW5jdGlvbjo6IGhhc2gob2JqZWN0KQpAQCAtNjUzLDYgKzcwMywxMCBAQAogICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKICAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KIAorICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1heGltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKKyAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scworICAgc3VjaCBhcyBgYHNvcnRlZChpdGVyYWJsZSwga2V5PWtleWZ1bmMsIHJldmVyc2U9VHJ1ZSlbMF1gYCBhbmQKKyAgIGBgaGVhcHEubmxhcmdlc3QoMSwgaXRlcmFibGUsIGtleT1rZXlmdW5jKWBgLgogCiAuLiBmdW5jdGlvbjo6IG1lbW9yeXZpZXcob2JqKQogICAgOm5vaW5kZXg6CkBAIC02NzAsNiArNzI0LDEwIEBACiAgICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwogICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgogCisgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWluaW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQorICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCisgICBzdWNoIGFzIGBgc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYylbMF1gYCBhbmQgYGBoZWFwcS5uc21hbGxlc3QoMSwKKyAgIGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYylgYC4KIAogLi4gZnVuY3Rpb246OiBuZXh0KGl0ZXJhdG9yWywgZGVmYXVsdF0pCiAKQEAgLTk3MSw2ICsxMDI5LDM1IEBACiAgICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSkKICAgICAgIFtdCiAKKyAgIFJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSA6Y2xhc3M6YGNvbGxlY3Rpb25zLlNlcXVlbmNlYCBBQkMsIGFuZCBwcm92aWRlCisgICBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCwgc2xpY2luZyBhbmQKKyAgIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXM6CisKKyAgICAgID4+PiByID0gcmFuZ2UoMCwgMjAsIDIpCisgICAgICA+Pj4gcgorICAgICAgcmFuZ2UoMCwgMjAsIDIpCisgICAgICA+Pj4gMTEgaW4gcgorICAgICAgRmFsc2UKKyAgICAgID4+PiAxMCBpbiByCisgICAgICBUcnVlCisgICAgICA+Pj4gci5pbmRleCgxMCkKKyAgICAgIDUKKyAgICAgID4+PiByWzVdCisgICAgICAxMAorICAgICAgPj4+IHJbOjVdCisgICAgICByYW5nZSgwLCAxMCwgMikKKyAgICAgID4+PiByWy0xXQorICAgICAgMTgKKworICAgUmFuZ2VzIGNvbnRhaW5pbmcgYWJzb2x1dGUgdmFsdWVzIGxhcmdlciB0aGFuIDpkYXRhOmBzeXMubWF4c2l6ZWAgYXJlIHBlcm1pdHRlZAorICAgYnV0IHNvbWUgZmVhdHVyZXMgKHN1Y2ggYXMgOmZ1bmM6YGxlbmApIHdpbGwgcmFpc2UgOmV4YzpgT3ZlcmZsb3dFcnJvcmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4KKyAgICAgIFN1cHBvcnQgc2xpY2luZyBhbmQgbmVnYXRpdmUgaW5kaWNlcy4KKyAgICAgIFRlc3QgaW50ZWdlcnMgZm9yIG1lbWJlcnNoaXAgaW4gY29uc3RhbnQgdGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZworICAgICAgdGhyb3VnaCBhbGwgaXRlbXMuCisKIAogLi4gZnVuY3Rpb246OiByZXByKG9iamVjdCkKIApAQCAtMTA1MCwxNCArMTEzNywxNCBAQAogICAgSGFzIHR3byBvcHRpb25hbCBhcmd1bWVudHMgd2hpY2ggbXVzdCBiZSBzcGVjaWZpZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCiAKICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdCBhIGNvbXBhcmlzb24KLSAgIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50OiBgYGtleT1zdHIubG93ZXJgYC4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLgorICAga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQ6IGBga2V5PXN0ci5sb3dlcmBgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAKKyAgIChjb21wYXJlIHRoZSBlbGVtZW50cyBkaXJlY3RseSkuCiAKICAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3QgZWxlbWVudHMgYXJlCiAgICBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuCiAKLSAgIFRvIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSogZnVuY3Rpb24sIHNlZSB0aGUKLSAgIGBDbXBUb0tleSByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2sKLSAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2NTMvPmBfXC4KKyAgIFVzZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgIHRvIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEKKyAgICprZXkqIGZ1bmN0aW9uLgogCiAgICBGb3Igc29ydGluZyBleGFtcGxlcyBhbmQgYSBicmllZiBzb3J0aW5nIHR1dG9yaWFsLCBzZWUgYFNvcnRpbmcgSG93VG8KICAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZy8+YF9cLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggNTcwZjRkMi4uMjMxNmU4MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC04LDYgKzgsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogTmljayBDb2dobGFuIDxuY29naGxhbkBnbWFpbC5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2Z1bmN0b29scy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGZ1bmN0b29sc2AgbW9kdWxlIGlzIGZvciBoaWdoZXItb3JkZXIgZnVuY3Rpb25zOiBmdW5jdGlvbnMgdGhhdCBhY3Qgb24KIG9yIHJldHVybiBvdGhlciBmdW5jdGlvbnMuIEluIGdlbmVyYWwsIGFueSBjYWxsYWJsZSBvYmplY3QgY2FuIGJlIHRyZWF0ZWQgYXMgYQpAQCAtMTUsNiArMTgsMTIzIEBACiAKIFRoZSA6bW9kOmBmdW5jdG9vbHNgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCisuLiBmdW5jdGlvbjo6IGNtcF90b19rZXkoZnVuYykKKworICAgVHJhbnNmb3JtIGFuIG9sZC1zdHlsZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGEga2V5LWZ1bmN0aW9uLiAgVXNlZCB3aXRoCisgICB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKKyAgIDpmdW5jOmBtYXhgLCA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKKyAgIDpmdW5jOmBpdGVydG9vbHMuZ3JvdXBieWApLiAgVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCBhcyBhIHRyYW5zaXRpb24KKyAgIHRvb2wgZm9yIHByb2dyYW1zIGJlaW5nIGNvbnZlcnRlZCBmcm9tIFB5Mi54IHdoaWNoIHN1cHBvcnRlZCB0aGUgdXNlIG9mCisgICBjb21wYXJpc29uIGZ1bmN0aW9ucy4KKworICAgQSBjb21wYXJlIGZ1bmN0aW9uIGlzIGFueSBjYWxsYWJsZSB0aGF0IGFjY2VwdCB0d28gYXJndW1lbnRzLCBjb21wYXJlcyB0aGVtLAorICAgYW5kIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgZm9yIGxlc3MtdGhhbiwgemVybyBmb3IgZXF1YWxpdHksIG9yIGEgcG9zaXRpdmUKKyAgIG51bWJlciBmb3IgZ3JlYXRlci10aGFuLiAgQSBrZXkgZnVuY3Rpb24gaXMgYSBjYWxsYWJsZSB0aGF0IGFjY2VwdHMgb25lCisgICBhcmd1bWVudCBhbmQgcmV0dXJucyBhbm90aGVyIHZhbHVlIGluZGljYXRpbmcgdGhlIHBvc2l0aW9uIGluIHRoZSBkZXNpcmVkCisgICBjb2xsYXRpb24gc2VxdWVuY2UuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICAgc29ydGVkKGl0ZXJhYmxlLCBrZXk9Y21wX3RvX2tleShsb2NhbGUuc3RyY29sbCkpICAjIGxvY2FsZS1hd2FyZSBzb3J0IG9yZGVyCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGRlY29yYXRvcjo6IGxydV9jYWNoZShtYXhzaXplPTEwMCkKKworICAgRGVjb3JhdG9yIHRvIHdyYXAgYSBmdW5jdGlvbiB3aXRoIGEgbWVtb2l6aW5nIGNhbGxhYmxlIHRoYXQgc2F2ZXMgdXAgdG8gdGhlCisgICAqbWF4c2l6ZSogbW9zdCByZWNlbnQgY2FsbHMuICBJdCBjYW4gc2F2ZSB0aW1lIHdoZW4gYW4gZXhwZW5zaXZlIG9yIEkvTyBib3VuZAorICAgZnVuY3Rpb24gaXMgcGVyaW9kaWNhbGx5IGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cy4KKworICAgU2luY2UgYSBkaWN0aW9uYXJ5IGlzIHVzZWQgdG8gY2FjaGUgcmVzdWx0cywgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQKKyAgIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gbXVzdCBiZSBoYXNoYWJsZS4KKworICAgSWYgKm1heHNpemUqIGlzIHNldCB0byBOb25lLCB0aGUgTFJVIGZlYXR1cmUgaXMgZGlzYWJsZWQgYW5kIHRoZSBjYWNoZQorICAgY2FuIGdyb3cgd2l0aG91dCBib3VuZC4KKworICAgVG8gaGVscCBtZWFzdXJlIHRoZSBlZmZlY3RpdmVuZXNzIG9mIHRoZSBjYWNoZSBhbmQgdHVuZSB0aGUgKm1heHNpemUqCisgICBwYXJhbWV0ZXIsIHRoZSB3cmFwcGVkIGZ1bmN0aW9uIGlzIGluc3RydW1lbnRlZCB3aXRoIGEgOmZ1bmM6YGNhY2hlX2luZm9gCisgICBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSA6dGVybTpgbmFtZWQgdHVwbGVgIHNob3dpbmcgKmhpdHMqLCAqbWlzc2VzKiwKKyAgICptYXhzaXplKiBhbmQgKmN1cnJzaXplKi4gIEluIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQsIHRoZSBoaXRzCisgICBhbmQgbWlzc2VzIGFyZSBhcHByb3hpbWF0ZS4KKworICAgVGhlIGRlY29yYXRvciBhbHNvIHByb3ZpZGVzIGEgOmZ1bmM6YGNhY2hlX2NsZWFyYCBmdW5jdGlvbiBmb3IgY2xlYXJpbmcgb3IKKyAgIGludmFsaWRhdGluZyB0aGUgY2FjaGUuCisKKyAgIFRoZSBvcmlnaW5hbCB1bmRlcmx5aW5nIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUKKyAgIDphdHRyOmBfX3dyYXBwZWRfX2AgYXR0cmlidXRlLiAgVGhpcyBpcyB1c2VmdWwgZm9yIGludHJvc3BlY3Rpb24sIGZvcgorICAgYnlwYXNzaW5nIHRoZSBjYWNoZSwgb3IgZm9yIHJld3JhcHBpbmcgdGhlIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnQgY2FjaGUuCisKKyAgIEFuIGBMUlUgKGxlYXN0IHJlY2VudGx5IHVzZWQpIGNhY2hlCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zI0xlYXN0X1JlY2VudGx5X1VzZWQ+YF8gd29ya3MKKyAgIGJlc3Qgd2hlbiBtb3JlIHJlY2VudCBjYWxscyBhcmUgdGhlIGJlc3QgcHJlZGljdG9ycyBvZiB1cGNvbWluZyBjYWxscyAoZm9yCisgICBleGFtcGxlLCB0aGUgbW9zdCBwb3B1bGFyIGFydGljbGVzIG9uIGEgbmV3cyBzZXJ2ZXIgdGVuZCB0byBjaGFuZ2UgZGFpbHkpLgorICAgVGhlIGNhY2hlJ3Mgc2l6ZSBsaW1pdCBhc3N1cmVzIHRoYXQgdGhlIGNhY2hlIGRvZXMgbm90IGdyb3cgd2l0aG91dCBib3VuZCBvbgorICAgbG9uZy1ydW5uaW5nIHByb2Nlc3NlcyBzdWNoIGFzIHdlYiBzZXJ2ZXJzLgorCisgICBFeGFtcGxlIG9mIGFuIExSVSBjYWNoZSBmb3Igc3RhdGljIHdlYiBjb250ZW50OjoKKworICAgICAgICBAbHJ1X2NhY2hlKG1heHNpemU9MjApCisgICAgICAgIGRlZiBnZXRfcGVwKG51bSk6CisgICAgICAgICAgICAnUmV0cmlldmUgdGV4dCBvZiBhIFB5dGhvbiBFbmhhbmNlbWVudCBQcm9wb3NhbCcKKyAgICAgICAgICAgIHJlc291cmNlID0gJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtJTA0ZC8nICUgbnVtCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlc291cmNlKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5yZWFkKCkKKyAgICAgICAgICAgIGV4Y2VwdCB1cmxsaWIuZXJyb3IuSFRUUEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAnTm90IEZvdW5kJworCisgICAgICAgID4+PiBmb3IgbiBpbiA4LCAyOTAsIDMwOCwgMzIwLCA4LCAyMTgsIDMyMCwgMjc5LCAyODksIDMyMCwgOTk5MToKKyAgICAgICAgLi4uICAgICBwZXAgPSBnZXRfcGVwKG4pCisgICAgICAgIC4uLiAgICAgcHJpbnQobiwgbGVuKHBlcCkpCisKKyAgICAgICAgPj4+IHByaW50KGdldF9wZXAuY2FjaGVfaW5mbygpKQorICAgICAgICBDYWNoZUluZm8oaGl0cz0zLCBtaXNzZXM9OCwgbWF4c2l6ZT0yMCwgY3VycnNpemU9OCkKKworICAgRXhhbXBsZSBvZiBlZmZpY2llbnRseSBjb21wdXRpbmcKKyAgIGBGaWJvbmFjY2kgbnVtYmVycyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GaWJvbmFjY2lfbnVtYmVyPmBfCisgICB1c2luZyBhIGNhY2hlIHRvIGltcGxlbWVudCBhCisgICBgZHluYW1pYyBwcm9ncmFtbWluZyA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EeW5hbWljX3Byb2dyYW1taW5nPmBfCisgICB0ZWNobmlxdWU6OgorCisgICAgICAgIEBscnVfY2FjaGUobWF4c2l6ZT1Ob25lKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpCisKKyAgICAgICAgPj4+IHByaW50KFtmaWIobikgZm9yIG4gaW4gcmFuZ2UoMTYpXSkKKyAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXQorCisgICAgICAgID4+PiBwcmludChmaWIuY2FjaGVfaW5mbygpKQorICAgICAgICBDYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZGVjb3JhdG9yOjogdG90YWxfb3JkZXJpbmcKKworICAgR2l2ZW4gYSBjbGFzcyBkZWZpbmluZyBvbmUgb3IgbW9yZSByaWNoIGNvbXBhcmlzb24gb3JkZXJpbmcgbWV0aG9kcywgdGhpcworICAgY2xhc3MgZGVjb3JhdG9yIHN1cHBsaWVzIHRoZSByZXN0LiAgVGhpcyBzaW1wbGlmaWVzIHRoZSBlZmZvcnQgaW52b2x2ZWQKKyAgIGluIHNwZWNpZnlpbmcgYWxsIG9mIHRoZSBwb3NzaWJsZSByaWNoIGNvbXBhcmlzb24gb3BlcmF0aW9uczoKKworICAgVGhlIGNsYXNzIG11c3QgZGVmaW5lIG9uZSBvZiA6bWV0aDpgX19sdF9fYCwgOm1ldGg6YF9fbGVfX2AsCisgICA6bWV0aDpgX19ndF9fYCwgb3IgOm1ldGg6YF9fZ2VfX2AuCisgICBJbiBhZGRpdGlvbiwgdGhlIGNsYXNzIHNob3VsZCBzdXBwbHkgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgICBAdG90YWxfb3JkZXJpbmcKKyAgICAgICBjbGFzcyBTdHVkZW50OgorICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoKHNlbGYubGFzdG5hbWUubG93ZXIoKSwgc2VsZi5maXJzdG5hbWUubG93ZXIoKSkgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKKyAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpIDwKKyAgICAgICAgICAgICAgICAgICAgICAgKG90aGVyLmxhc3RuYW1lLmxvd2VyKCksIG90aGVyLmZpcnN0bmFtZS5sb3dlcigpKSkKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCiAgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3Qgd2hpY2ggd2hlbiBjYWxsZWQgd2lsbCBiZWhhdmUgbGlrZSAqZnVuYyoKQEAgLTcwLDE0ICsxOTAsMzQgQEAKICAgIGRvY3VtZW50YXRpb24gc3RyaW5nKSBhbmQgKldSQVBQRVJfVVBEQVRFUyogKHdoaWNoIHVwZGF0ZXMgdGhlIHdyYXBwZXIKICAgIGZ1bmN0aW9uJ3MgKl9fZGljdF9fKiwgaS5lLiB0aGUgaW5zdGFuY2UgZGljdGlvbmFyeSkuCiAKKyAgIFRvIGFsbG93IGFjY2VzcyB0byB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZm9yIGludHJvc3BlY3Rpb24gYW5kIG90aGVyIHB1cnBvc2VzCisgICAoZS5nLiBieXBhc3NpbmcgYSBjYWNoaW5nIGRlY29yYXRvciBzdWNoIGFzIDpmdW5jOmBscnVfY2FjaGVgKSwgdGhpcyBmdW5jdGlvbgorICAgYXV0b21hdGljYWxseSBhZGRzIGEgX193cmFwcGVkX18gYXR0cmlidXRlIHRvIHRoZSB3cmFwcGVyIHRoYXQgcmVmZXJzIHRvCisgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uCisKICAgIFRoZSBtYWluIGludGVuZGVkIHVzZSBmb3IgdGhpcyBmdW5jdGlvbiBpcyBpbiA6dGVybTpgZGVjb3JhdG9yYCBmdW5jdGlvbnMgd2hpY2gKICAgIHdyYXAgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiBhbmQgcmV0dXJuIHRoZSB3cmFwcGVyLiBJZiB0aGUgd3JhcHBlciBmdW5jdGlvbiBpcwogICAgbm90IHVwZGF0ZWQsIHRoZSBtZXRhZGF0YSBvZiB0aGUgcmV0dXJuZWQgZnVuY3Rpb24gd2lsbCByZWZsZWN0IHRoZSB3cmFwcGVyCiAgICBkZWZpbml0aW9uIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkZWZpbml0aW9uLCB3aGljaCBpcyB0eXBpY2FsbHkgbGVzcwogICAgdGhhbiBoZWxwZnVsLgogCisgICA6ZnVuYzpgdXBkYXRlX3dyYXBwZXJgIG1heSBiZSB1c2VkIHdpdGggY2FsbGFibGVzIG90aGVyIHRoYW4gZnVuY3Rpb25zLiBBbnkKKyAgIGF0dHJpYnV0ZXMgbmFtZWQgaW4gKmFzc2lnbmVkKiBvciAqdXBkYXRlZCogdGhhdCBhcmUgbWlzc2luZyBmcm9tIHRoZSBvYmplY3QKKyAgIGJlaW5nIHdyYXBwZWQgYXJlIGlnbm9yZWQgKGkuZS4gdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBhdHRlbXB0IHRvIHNldCB0aGVtCisgICBvbiB0aGUgd3JhcHBlciBmdW5jdGlvbikuIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBpcyBzdGlsbCByYWlzZWQgaWYgdGhlCisgICB3cmFwcGVyIGZ1bmN0aW9uIGl0c2VsZiBpcyBtaXNzaW5nIGFueSBhdHRyaWJ1dGVzIG5hbWVkIGluICp1cGRhdGVkKi4KIAotLi4gZnVuY3Rpb246OiB3cmFwcyh3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgQXV0b21hdGljIGFkZGl0aW9uIG9mIHRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIENvcHlpbmcgb2YgdGhlIGBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIGJ5IGRlZmF1bHQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBNaXNzaW5nIGF0dHJpYnV0ZXMgbm8gbG9uZ2VyIHRyaWdnZXIgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgorCisKKy4uIGRlY29yYXRvcjo6IHdyYXBzKHdyYXBwZWQsIGFzc2lnbmVkPVdSQVBQRVJfQVNTSUdOTUVOVFMsIHVwZGF0ZWQ9V1JBUFBFUl9VUERBVEVTKQogCiAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGludm9raW5nIGBgcGFydGlhbCh1cGRhdGVfd3JhcHBlciwKICAgIHdyYXBwZWQ9d3JhcHBlZCwgYXNzaWduZWQ9YXNzaWduZWQsIHVwZGF0ZWQ9dXBkYXRlZClgYCBhcyBhIGZ1bmN0aW9uIGRlY29yYXRvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2MucnN0IGIvRG9jL2xpYnJhcnkvZ2MucnN0CmluZGV4IDM0YWJhNjUuLjAyODFiYjcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2djLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nYy5yc3QKQEAgLTQzLDcgKzQzLDcgQEAKICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgZ2VuZXJhdGlvbiBudW1iZXIgIGlzIGludmFsaWQuIFRoZSBudW1iZXIgb2YKICAgIHVucmVhY2hhYmxlIG9iamVjdHMgZm91bmQgaXMgcmV0dXJuZWQuCiAKLSAgIFRoZSBmcmVlIGxpc3RzIG1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIGJ1aWx0aW4gdHlwZXMgYXJlIGNsZWFyZWQKKyAgIFRoZSBmcmVlIGxpc3RzIG1haW50YWluZWQgZm9yIGEgbnVtYmVyIG9mIGJ1aWx0LWluIHR5cGVzIGFyZSBjbGVhcmVkCiAgICB3aGVuZXZlciBhIGZ1bGwgY29sbGVjdGlvbiBvciBjb2xsZWN0aW9uIG9mIHRoZSBoaWdoZXN0IGdlbmVyYXRpb24gKDIpCiAgICBpcyBydW4uICBOb3QgYWxsIGl0ZW1zIGluIHNvbWUgZnJlZSBsaXN0cyBtYXkgYmUgZnJlZWQgZHVlIHRvIHRoZQogICAgcGFydGljdWxhciBpbXBsZW1lbnRhdGlvbiwgaW4gcGFydGljdWxhciA6Y2xhc3M6YGZsb2F0YC4KQEAgLTE3NCw4ICsxNzQsMTUgQEAKICAgIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFuZCAqZ2FyYmFnZSogY2FuIGJlIGV4YW1pbmVkIGluIHRoYXQgY2FzZSB0bwogICAgdmVyaWZ5IHRoYXQgbm8gc3VjaCBjeWNsZXMgYXJlIGJlaW5nIGNyZWF0ZWQuCiAKLSAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUgYWRkZWQgdG8KLSAgIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KKyAgIElmIDpjb25zdDpgREVCVUdfU0FWRUFMTGAgaXMgc2V0LCB0aGVuIGFsbCB1bnJlYWNoYWJsZSBvYmplY3RzIHdpbGwgYmUgYWRkZWQKKyAgIHRvIHRoaXMgbGlzdCByYXRoZXIgdGhhbiBmcmVlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIElmIHRoaXMgbGlzdCBpcyBub24tZW1wdHkgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24sIGEKKyAgICAgIDpleGM6YFJlc291cmNlV2FybmluZ2AgaXMgZW1pdHRlZCwgd2hpY2ggaXMgc2lsZW50IGJ5IGRlZmF1bHQuICBJZgorICAgICAgOmNvbnN0OmBERUJVR19VTkNPTExFQ1RBQkxFYCBpcyBzZXQsIGluIGFkZGl0aW9uIGFsbCB1bmNvbGxlY3RhYmxlIG9iamVjdHMKKyAgICAgIGFyZSBwcmludGVkLgorCiAKIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBwcm92aWRlZCBmb3IgdXNlIHdpdGggOmZ1bmM6YHNldF9kZWJ1Z2A6CiAKQEAgLTE5NCw5ICsyMDEsMTIgQEAKIC4uIGRhdGE6OiBERUJVR19VTkNPTExFQ1RBQkxFCiAKICAgIFByaW50IGluZm9ybWF0aW9uIG9mIHVuY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCAob2JqZWN0cyB3aGljaCBhcmUgbm90Ci0gICByZWFjaGFibGUgYnV0IGNhbm5vdCBiZSBmcmVlZCBieSB0aGUgY29sbGVjdG9yKS4gIFRoZXNlIG9iamVjdHMgd2lsbCBiZSBhZGRlZCB0bwotICAgdGhlIGBgZ2FyYmFnZWBgIGxpc3QuCisgICByZWFjaGFibGUgYnV0IGNhbm5vdCBiZSBmcmVlZCBieSB0aGUgY29sbGVjdG9yKS4gIFRoZXNlIG9iamVjdHMgd2lsbCBiZSBhZGRlZAorICAgdG8gdGhlIGBgZ2FyYmFnZWBgIGxpc3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBbHNvIHByaW50IHRoZSBjb250ZW50cyBvZiB0aGUgOmRhdGE6YGdhcmJhZ2VgIGxpc3QgYXQgaW50ZXJwcmV0ZXIKKyAgICAgIHNodXRkb3duLCBpZiBpdCBpc24ndCBlbXB0eS4KIAogLi4gZGF0YTo6IERFQlVHX1NBVkVBTEwKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdCBiL0RvYy9saWJyYXJ5L2dldG9wdC5yc3QKaW5kZXggNmE5NTE0Mi4uYmNmYzRiNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2V0b3B0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXRvcHQucnN0CkBAIC0xLDEzICsxLDIzIEBACi06bW9kOmBnZXRvcHRgIC0tLSBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis6bW9kOmBnZXRvcHRgIC0tLSBDLXN0eWxlIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBnZXRvcHQKICAgIDpzeW5vcHNpczogUG9ydGFibGUgcGFyc2VyIGZvciBjb21tYW5kIGxpbmUgb3B0aW9uczsgc3VwcG9ydCBib3RoIHNob3J0IGFuZAogICAgICAgICAgICAgICBsb25nIG9wdGlvbiBuYW1lcy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZ2V0b3B0LnB5YAorCistLS0tLS0tLS0tLS0tLQorCisuLiBub3RlOjoKKyAgIFRoZSA6bW9kOmBnZXRvcHRgIG1vZHVsZSBpcyBhIHBhcnNlciBmb3IgY29tbWFuZCBsaW5lIG9wdGlvbnMgd2hvc2UgQVBJIGlzCisgICBkZXNpZ25lZCB0byBiZSBmYW1pbGlhciB0byB1c2VycyBvZiB0aGUgQyA6YzpmdW5jOmBnZXRvcHRgIGZ1bmN0aW9uLiBVc2VycyB3aG8KKyAgIGFyZSB1bmZhbWlsaWFyIHdpdGggdGhlIEMgOmM6ZnVuYzpgZ2V0b3B0YCBmdW5jdGlvbiBvciB3aG8gd291bGQgbGlrZSB0byB3cml0ZQorICAgbGVzcyBjb2RlIGFuZCBnZXQgYmV0dGVyIGhlbHAgYW5kIGVycm9yIG1lc3NhZ2VzIHNob3VsZCBjb25zaWRlciB1c2luZyB0aGUKKyAgIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgaW5zdGVhZC4KIAogVGhpcyBtb2R1bGUgaGVscHMgc2NyaXB0cyB0byBwYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBpbiBgYHN5cy5hcmd2YGAuCi1JdCBzdXBwb3J0cyB0aGUgc2FtZSBjb252ZW50aW9ucyBhcyB0aGUgVW5peCA6Y2Z1bmM6YGdldG9wdGAgZnVuY3Rpb24gKGluY2x1ZGluZworSXQgc3VwcG9ydHMgdGhlIHNhbWUgY29udmVudGlvbnMgYXMgdGhlIFVuaXggOmM6ZnVuYzpgZ2V0b3B0YCBmdW5jdGlvbiAoaW5jbHVkaW5nCiB0aGUgc3BlY2lhbCBtZWFuaW5ncyBvZiBhcmd1bWVudHMgb2YgdGhlIGZvcm0gJ2BgLWBgJyBhbmQgJ2BgLS1gYCcpLiAgTG9uZwogb3B0aW9ucyBzaW1pbGFyIHRvIHRob3NlIHN1cHBvcnRlZCBieSBHTlUgc29mdHdhcmUgbWF5IGJlIHVzZWQgYXMgd2VsbCB2aWEgYW4KIG9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50LgpAQCAtMjUsMTEgKzM1LDExIEBACiAgICBiZSBwYXJzZWQsIHdpdGhvdXQgdGhlIGxlYWRpbmcgcmVmZXJlbmNlIHRvIHRoZSBydW5uaW5nIHByb2dyYW0uIFR5cGljYWxseSwgdGhpcwogICAgbWVhbnMgYGBzeXMuYXJndlsxOl1gYC4gKnNob3J0b3B0cyogaXMgdGhlIHN0cmluZyBvZiBvcHRpb24gbGV0dGVycyB0aGF0IHRoZQogICAgc2NyaXB0IHdhbnRzIHRvIHJlY29nbml6ZSwgd2l0aCBvcHRpb25zIHRoYXQgcmVxdWlyZSBhbiBhcmd1bWVudCBmb2xsb3dlZCBieSBhCi0gICBjb2xvbiAoYGAnOidgYDsgaS5lLiwgdGhlIHNhbWUgZm9ybWF0IHRoYXQgVW5peCA6Y2Z1bmM6YGdldG9wdGAgdXNlcykuCisgICBjb2xvbiAoYGAnOidgYDsgaS5lLiwgdGhlIHNhbWUgZm9ybWF0IHRoYXQgVW5peCA6YzpmdW5jOmBnZXRvcHRgIHVzZXMpLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgVW5saWtlIEdOVSA6Y2Z1bmM6YGdldG9wdGAsIGFmdGVyIGEgbm9uLW9wdGlvbiBhcmd1bWVudCwgYWxsIGZ1cnRoZXIKKyAgICAgIFVubGlrZSBHTlUgOmM6ZnVuYzpgZ2V0b3B0YCwgYWZ0ZXIgYSBub24tb3B0aW9uIGFyZ3VtZW50LCBhbGwgZnVydGhlcgogICAgICAgYXJndW1lbnRzIGFyZSBjb25zaWRlcmVkIGFsc28gbm9uLW9wdGlvbnMuIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgd2F5CiAgICAgICBub24tR05VIFVuaXggc3lzdGVtcyB3b3JrLgogCkBAIC0xMzYsOSArMTQ2LDIxIEBACiAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICAgIG1haW4oKQogCitOb3RlIHRoYXQgYW4gZXF1aXZhbGVudCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGNvdWxkIGJlIHByb2R1Y2VkIHdpdGggbGVzcyBjb2RlCithbmQgbW9yZSBpbmZvcm1hdGl2ZSBoZWxwIGFuZCBlcnJvciBtZXNzYWdlcyBieSB1c2luZyB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZTo6CisKKyAgIGltcG9ydCBhcmdwYXJzZQorCisgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW91dHB1dCcpCisgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCBkZXN0PSd2ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgICAgICMgLi4uIGRvIHNvbWV0aGluZyB3aXRoIGFyZ3Mub3V0cHV0IC4uLgorICAgICAgICMgLi4uIGRvIHNvbWV0aGluZyB3aXRoIGFyZ3MudmVyYm9zZSAuLgogCiAuLiBzZWVhbHNvOjoKIAotICAgTW9kdWxlIDptb2Q6YG9wdHBhcnNlYAotICAgICAgTW9yZSBvYmplY3Qtb3JpZW50ZWQgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzaW5nLgorICAgTW9kdWxlIDptb2Q6YGFyZ3BhcnNlYAorICAgICAgQWx0ZXJuYXRpdmUgY29tbWFuZCBsaW5lIG9wdGlvbiBhbmQgYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5LgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdCBiL0RvYy9saWJyYXJ5L2dldHRleHQucnN0CmluZGV4IDllMTUyOGIuLmJjODI1Y2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2dldHRleHQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2dldHRleHQucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogQmFycnkgQS4gV2Fyc2F3IDxiYXJyeUB6b3BlLmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBCYXJyeSBBLiBXYXJzYXcgPGJhcnJ5QHpvcGUuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9nZXR0ZXh0LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZ2V0dGV4dGAgbW9kdWxlIHByb3ZpZGVzIGludGVybmF0aW9uYWxpemF0aW9uIChJMThOKSBhbmQgbG9jYWxpemF0aW9uCiAoTDEwTikgc2VydmljZXMgZm9yIHlvdXIgUHl0aG9uIG1vZHVsZXMgYW5kIGFwcGxpY2F0aW9ucy4gSXQgc3VwcG9ydHMgYm90aCB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dsb2IucnN0IGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKaW5kZXggM2UwMzIyZC4uM2QzMWMxMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2xvYi5yc3QKQEAgLTcsNiArNywxMCBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogZmlsZW5hbWVzOyBwYXRobmFtZSBleHBhbnNpb24KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZ2xvYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YGdsb2JgIG1vZHVsZSBmaW5kcyBhbGwgdGhlIHBhdGhuYW1lcyBtYXRjaGluZyBhIHNwZWNpZmllZCBwYXR0ZXJuCiBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIHVzZWQgYnkgdGhlIFVuaXggc2hlbGwuICBObyB0aWxkZSBleHBhbnNpb24gaXMgZG9uZSwgYnV0CiBgYCpgYCwgYGA/YGAsIGFuZCBjaGFyYWN0ZXIgcmFuZ2VzIGV4cHJlc3NlZCB3aXRoIGBgW11gYCB3aWxsIGJlIGNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ3ppcC5yc3QgYi9Eb2MvbGlicmFyeS9nemlwLnJzdAppbmRleCBmZGQ4NTkwLi42NTlhMDI3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nemlwLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nemlwLnJzdApAQCAtNCw2ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBnemlwCiAgICA6c3lub3BzaXM6IEludGVyZmFjZXMgZm9yIGd6aXAgY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gdXNpbmcgZmlsZSBvYmplY3RzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9nemlwLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSBpbnRlcmZhY2UgdG8gY29tcHJlc3MgYW5kIGRlY29tcHJlc3MgZmlsZXMganVzdAogbGlrZSB0aGUgR05VIHByb2dyYW1zIDpwcm9ncmFtOmBnemlwYCBhbmQgOnByb2dyYW06YGd1bnppcGAgd291bGQuCiAKQEAgLTI1LDEwICsyOSwxMCBAQAogCiAuLiBjbGFzczo6IEd6aXBGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9Tm9uZSwgY29tcHJlc3NsZXZlbD05LCBmaWxlb2JqPU5vbmUsIG10aW1lPU5vbmUpCiAKLSAgIENvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBHemlwRmlsZWAgY2xhc3MsIHdoaWNoIHNpbXVsYXRlcyBtb3N0IG9mIHRoZSBtZXRob2RzCi0gICBvZiBhIDp0ZXJtOmBmaWxlIG9iamVjdGAsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgOm1ldGg6YHJlYWRpbnRvYCBhbmQKLSAgIDptZXRoOmB0cnVuY2F0ZWAgbWV0aG9kcy4gIEF0IGxlYXN0IG9uZSBvZiAqZmlsZW9iaiogYW5kICpmaWxlbmFtZSogbXVzdCBiZQotICAgZ2l2ZW4gYSBub24tdHJpdmlhbCB2YWx1ZS4KKyAgIENvbnN0cnVjdG9yIGZvciB0aGUgOmNsYXNzOmBHemlwRmlsZWAgY2xhc3MsIHdoaWNoIHNpbXVsYXRlcyBtb3N0IG9mIHRoZQorICAgbWV0aG9kcyBvZiBhIDp0ZXJtOmBmaWxlIG9iamVjdGAsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgOm1ldGg6YHRydW5jYXRlYAorICAgbWV0aG9kLiAgQXQgbGVhc3Qgb25lIG9mICpmaWxlb2JqKiBhbmQgKmZpbGVuYW1lKiBtdXN0IGJlIGdpdmVuIGEgbm9uLXRyaXZpYWwKKyAgIHZhbHVlLgogCiAgICBUaGUgbmV3IGNsYXNzIGluc3RhbmNlIGlzIGJhc2VkIG9uICpmaWxlb2JqKiwgd2hpY2ggY2FuIGJlIGEgcmVndWxhciBmaWxlLCBhCiAgICA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBvYmplY3Qgd2hpY2ggc2ltdWxhdGVzIGEgZmlsZS4gIEl0CkBAIC02MiwxNSArNjYsMzQgQEAKIAogICAgQ2FsbGluZyBhIDpjbGFzczpgR3ppcEZpbGVgIG9iamVjdCdzIDptZXRoOmBjbG9zZWAgbWV0aG9kIGRvZXMgbm90IGNsb3NlCiAgICAqZmlsZW9iaiosIHNpbmNlIHlvdSBtaWdodCB3aXNoIHRvIGFwcGVuZCBtb3JlIG1hdGVyaWFsIGFmdGVyIHRoZSBjb21wcmVzc2VkCi0gICBkYXRhLiAgVGhpcyBhbHNvIGFsbG93cyB5b3UgdG8gcGFzcyBhIDpjbGFzczpgU3RyaW5nSU9gIG9iamVjdCBvcGVuZWQgZm9yCisgICBkYXRhLiAgVGhpcyBhbHNvIGFsbG93cyB5b3UgdG8gcGFzcyBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0IG9wZW5lZCBmb3IKICAgIHdyaXRpbmcgYXMgKmZpbGVvYmoqLCBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdGluZyBtZW1vcnkgYnVmZmVyIHVzaW5nIHRoZQotICAgOmNsYXNzOmBTdHJpbmdJT2Agb2JqZWN0J3MgOm1ldGg6YGdldHZhbHVlYCBtZXRob2QuCisgICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCdzIDptZXRoOmB+aW8uQnl0ZXNJTy5nZXR2YWx1ZWAgbWV0aG9kLgogCi0gICA6Y2xhc3M6YEd6aXBGaWxlYCBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4KKyAgIDpjbGFzczpgR3ppcEZpbGVgIHN1cHBvcnRzIHRoZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYCBpbnRlcmZhY2UsCisgICBpbmNsdWRpbmcgaXRlcmF0aW9uIGFuZCB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIE9ubHkgdGhlCisgICA6bWV0aDpgcmVhZDFgIGFuZCA6bWV0aDpgdHJ1bmNhdGVgIG1ldGhvZHMgYXJlbid0IGltcGxlbWVudGVkLgorCisgICA6Y2xhc3M6YEd6aXBGaWxlYCBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kOgorCisgICAuLiBtZXRob2Q6OiBwZWVrKFtuXSkKKworICAgICAgUmVhZCAqbiogdW5jb21wcmVzc2VkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvc2l0aW9uLgorICAgICAgQXQgbW9zdCBvbmUgc2luZ2xlIHJlYWQgb24gdGhlIGNvbXByZXNzZWQgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeQorICAgICAgdGhlIGNhbGwuICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIG1heSBiZSBtb3JlIG9yIGxlc3MgdGhhbgorICAgICAgcmVxdWVzdGVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFN1cHBvcnQgZm9yIHplcm8tcGFkZGVkIGZpbGVzIHdhcyBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMgd2FzIGFkZGVkLgorCiAKIC4uIGZ1bmN0aW9uOjogb3BlbihmaWxlbmFtZSwgbW9kZT0ncmInLCBjb21wcmVzc2xldmVsPTkpCiAKQEAgLTc4LDYgKzEwMSwyMSBAQAogICAgVGhlICpmaWxlbmFtZSogYXJndW1lbnQgaXMgcmVxdWlyZWQ7ICptb2RlKiBkZWZhdWx0cyB0byBgYCdyYidgYCBhbmQKICAgICpjb21wcmVzc2xldmVsKiBkZWZhdWx0cyB0byBgYDlgYC4KIAorLi4gZnVuY3Rpb246OiBjb21wcmVzcyhkYXRhLCBjb21wcmVzc2xldmVsPTkpCisKKyAgIENvbXByZXNzIHRoZSAqZGF0YSosIHJldHVybmluZyBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBjb250YWluaW5nCisgICB0aGUgY29tcHJlc3NlZCBkYXRhLiAgKmNvbXByZXNzbGV2ZWwqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCisgICB0aGUgOmNsYXNzOmBHemlwRmlsZWAgY29uc3RydWN0b3IgYWJvdmUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBmdW5jdGlvbjo6IGRlY29tcHJlc3MoZGF0YSkKKworICAgRGVjb21wcmVzcyB0aGUgKmRhdGEqLCByZXR1cm5pbmcgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgY29udGFpbmluZyB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiAuLiBfZ3ppcC11c2FnZS1leGFtcGxlczoKIApAQCAtMTA0LDYgKzE0MiwxMSBAQAogICAgICAgIHdpdGggZ3ppcC5vcGVuKCcvaG9tZS9qb2UvZmlsZS50eHQuZ3onLCAnd2InKSBhcyBmX291dDoKICAgICAgICAgICAgZl9vdXQud3JpdGVsaW5lcyhmX2luKQogCitFeGFtcGxlIG9mIGhvdyB0byBHWklQIGNvbXByZXNzIGEgYmluYXJ5IHN0cmluZzo6CisKKyAgIGltcG9ydCBnemlwCisgICBzX2luID0gYiJMb3RzIG9mIGNvbnRlbnQgaGVyZSIKKyAgIHNfb3V0ID0gZ3ppcC5jb21wcmVzcyhzX2luKQogCiAuLiBzZWVhbHNvOjoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAppbmRleCBiNzNkNzUzLi5iYzhhYjJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oYXNobGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oYXNobGliLnJzdApAQCAtMTEsNiArMTEsMTAgQEAKICAgIHNpbmdsZTogbWVzc2FnZSBkaWdlc3QsIE1ENQogICAgc2luZ2xlOiBzZWN1cmUgaGFzaCBhbGdvcml0aG0sIFNIQTEsIFNIQTIyNCwgU0hBMjU2LCBTSEEzODQsIFNIQTUxMgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9oYXNobGliLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgY29tbW9uIGludGVyZmFjZSB0byBtYW55IGRpZmZlcmVudCBzZWN1cmUgaGFzaCBhbmQKIG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobXMuICBJbmNsdWRlZCBhcmUgdGhlIEZJUFMgc2VjdXJlIGhhc2ggYWxnb3JpdGhtcyBTSEExLAogU0hBMjI0LCBTSEEyNTYsIFNIQTM4NCwgYW5kIFNIQTUxMiAoZGVmaW5lZCBpbiBGSVBTIDE4MC0yKSBhcyB3ZWxsIGFzIFJTQSdzIE1ENQpAQCAtNzAsMTAgKzc0LDEzIEBACiAgICA+Pj4gaGFzaGxpYi5zaGEyMjQoYiJOb2JvZHkgaW5zcGVjdHMgdGhlIHNwYW1taXNoIHJlcGV0aXRpb24iKS5oZXhkaWdlc3QoKQogICAgJ2E0MzM3YmM0NWE4ZmM1NDRjMDNmNTJkYzU1MGNkNmUxZTg3MDIxYmM4OTY1ODhiZDc5ZTkwMWUyJwogCi1BIGdlbmVyaWMgOmZ1bmM6YG5ld2AgY29uc3RydWN0b3IgdGhhdCB0YWtlcyB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGRlc2lyZWQKLWFsZ29yaXRobSBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIGFsc28gZXhpc3RzIHRvIGFsbG93IGFjY2VzcyB0byB0aGUgYWJvdmUgbGlzdGVkCi1oYXNoZXMgYXMgd2VsbCBhcyBhbnkgb3RoZXIgYWxnb3JpdGhtcyB0aGF0IHlvdXIgT3BlblNTTCBsaWJyYXJ5IG1heSBvZmZlci4gIFRoZQotbmFtZWQgY29uc3RydWN0b3JzIGFyZSBtdWNoIGZhc3RlciB0aGFuIDpmdW5jOmBuZXdgIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkLgorLi4gZnVuY3Rpb246OiBuZXcobmFtZVssIGRhdGFdKQorCisgICBJcyBhIGdlbmVyaWMgY29uc3RydWN0b3IgdGhhdCB0YWtlcyB0aGUgc3RyaW5nIG5hbWUgb2YgdGhlIGRlc2lyZWQKKyAgIGFsZ29yaXRobSBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyLiAgSXQgYWxzbyBleGlzdHMgdG8gYWxsb3cgYWNjZXNzIHRvIHRoZQorICAgYWJvdmUgbGlzdGVkIGhhc2hlcyBhcyB3ZWxsIGFzIGFueSBvdGhlciBhbGdvcml0aG1zIHRoYXQgeW91ciBPcGVuU1NMCisgICBsaWJyYXJ5IG1heSBvZmZlci4gIFRoZSBuYW1lZCBjb25zdHJ1Y3RvcnMgYXJlIG11Y2ggZmFzdGVyIHRoYW4gOmZ1bmM6YG5ld2AKKyAgIGFuZCBzaG91bGQgYmUgcHJlZmVycmVkLgogCiBVc2luZyA6ZnVuYzpgbmV3YCB3aXRoIGFuIGFsZ29yaXRobSBwcm92aWRlZCBieSBPcGVuU1NMOgogCkBAIC04Miw2ICs4OSwyNSBAQAogICAgPj4+IGguaGV4ZGlnZXN0KCkKICAgICdjYzRhNWNlMWIzZGY0OGFlYzVkMjJkMWYxNmI4OTRhMGI4OTRlY2NjJwogCitIYXNobGliIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQgYXR0cmlidXRlczoKKworLi4gZGF0YTo6IGFsZ29yaXRobXNfZ3VhcmFudGVlZAorCisgICBDb250YWlucyB0aGUgbmFtZXMgb2YgdGhlIGhhc2ggYWxnb3JpdGhtcyBndWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZAorICAgYnkgdGhpcyBtb2R1bGUgb24gYWxsIHBsYXRmb3Jtcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGRhdGE6OiBhbGdvcml0aG1zX2F2YWlsYWJsZQorCisgICBDb250YWlucyB0aGUgbmFtZXMgb2YgdGhlIGhhc2ggYWxnb3JpdGhtcyB0aGF0IGFyZSBhdmFpbGFibGUKKyAgIGluIHRoZSBydW5uaW5nIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoZXNlIG5hbWVzIHdpbGwgYmUgcmVjb2duaXplZAorICAgd2hlbiBwYXNzZWQgdG8gOmZ1bmM6YG5ld2AuICA6YXR0cjpgYWxnb3JpdGhtc19ndWFyYW50ZWVkYAorICAgd2lsbCBhbHdheXMgYmUgYSBzdWJzZXQuICBEdXBsaWNhdGUgYWxnb3JpdGhtcyB3aXRoIGRpZmZlcmVudAorICAgbmFtZSBmb3JtYXRzIG1heSBhcHBlYXIgaW4gdGhpcyBzZXQgKHRoYW5rcyB0byBPcGVuU1NMKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIFRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBwcm92aWRlZCBhcyBjb25zdGFudCBhdHRyaWJ1dGVzIG9mIHRoZSBoYXNoIG9iamVjdHMKIHJldHVybmVkIGJ5IHRoZSBjb25zdHJ1Y3RvcnM6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hlYXBxLnJzdCBiL0RvYy9saWJyYXJ5L2hlYXBxLnJzdAppbmRleCA3NzM1MzY1Li5jODYzNGJhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGVhcHEucnN0CkBAIC04LDYgKzgsMTAgQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmFuw6dvaXMgUGluYXJkCiAuLiBzZWN0aW9uYXV0aG9yOjogUmF5bW9uZCBIZXR0aW5nZXIKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaGVhcHEucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoZWFwIHF1ZXVlIGFsZ29yaXRobSwgYWxzbyBrbm93bgogYXMgdGhlIHByaW9yaXR5IHF1ZXVlIGFsZ29yaXRobS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaG1hYy5yc3QgYi9Eb2MvbGlicmFyeS9obWFjLnJzdAppbmRleCBiMmJkOThkLi4wY2EzZWRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9obWFjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9obWFjLnJzdApAQCAtNyw2ICs3LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEdlcmhhcmQgSMOkcmluZyA8Z2hhZXJpbmdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogLi4gc2VjdGlvbmF1dGhvcjo6IEdlcmhhcmQgSMOkcmluZyA8Z2hhZXJpbmdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9obWFjLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBITUFDIGFsZ29yaXRobSBhcyBkZXNjcmliZWQgYnkgOnJmYzpgMjEwNGAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0IGIvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKaW5kZXggYWE2N2JhZS4uMjM5YWU1MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5lbnRpdGllcy5yc3QKQEAgLTUsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IERlZmluaXRpb25zIG9mIEhUTUwgZ2VuZXJhbCBlbnRpdGllcy4KIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odG1sL2VudGl0aWVzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRocmVlIGRpY3Rpb25hcmllcywgYGBuYW1lMmNvZGVwb2ludGBgLCBgYGNvZGVwb2ludDJuYW1lYGAsCiBhbmQgYGBlbnRpdHlkZWZzYGAuIGBgZW50aXR5ZGVmc2BgIGlzIHVzZWQgdG8gcHJvdmlkZSB0aGUgOmF0dHI6YGVudGl0eWRlZnNgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKaW5kZXggMWZhMTFhMi4uMDZhM2IxYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdApAQCAtOSwxMiArOSwyMCBAQAogICAgc2luZ2xlOiBIVE1MCiAgICBzaW5nbGU6IFhIVE1MCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2h0bWwvcGFyc2VyLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1UcnVlKQogCi0gICBUaGUgOmNsYXNzOmBIVE1MUGFyc2VyYCBjbGFzcyBpcyBpbnN0YW50aWF0ZWQgd2l0aG91dCBhcmd1bWVudHMuCisgICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuICBJZiAqc3RyaWN0KiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCBpbnZhbGlkCisgICBodG1sIHJlc3VsdHMgaW4gOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb25zIFsjXV8uICBJZgorICAgKnN0cmljdCogaXMgYGBGYWxzZWBgLCB0aGUgcGFyc2VyIHVzZXMgaGV1cmlzdGljcyB0byBtYWtlIGEgYmVzdCBndWVzcyBhdAorICAgdGhlIGludGVudGlvbiBvZiBhbnkgaW52YWxpZCBodG1sIGl0IGVuY291bnRlcnMsIHNpbWlsYXIgdG8gdGhlIHdheSBtb3N0CisgICBicm93c2VycyBkby4KIAogICAgQW4gOmNsYXNzOmBIVE1MUGFyc2VyYCBpbnN0YW5jZSBpcyBmZWQgSFRNTCBkYXRhIGFuZCBjYWxscyBoYW5kbGVyIGZ1bmN0aW9ucyB3aGVuIHRhZ3MKICAgIGJlZ2luIGFuZCBlbmQuICBUaGUgOmNsYXNzOmBIVE1MUGFyc2VyYCBjbGFzcyBpcyBtZWFudCB0byBiZSBvdmVycmlkZGVuIGJ5IHRoZQpAQCAtMjMsNiArMzEsOCBAQAogICAgVGhpcyBwYXJzZXIgZG9lcyBub3QgY2hlY2sgdGhhdCBlbmQgdGFncyBtYXRjaCBzdGFydCB0YWdzIG9yIGNhbGwgdGhlIGVuZC10YWcKICAgIGhhbmRsZXIgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBjbG9zZWQgaW1wbGljaXRseSBieSBjbG9zaW5nIGFuIG91dGVyIGVsZW1lbnQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yICpzdHJpY3QqIGtleXdvcmQgYWRkZWQKKwogQW4gZXhjZXB0aW9uIGlzIGRlZmluZWQgYXMgd2VsbDoKIAogCkBAIC0xOTEsMyArMjAxLDggQEAKICAgIEVuY291bnRlcmVkIGEgaHRtbCBlbmQgdGFnCiAKIAorLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsjXSBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zICpzdHJpY3QqIG1vZGUgZG9lcyBub3QgcmFpc2UKKyAgICAgICBleGNlcHRpb25zIGZvciBhbGwgbm9uLWNvbXBsaWFudCBIVE1MLiAgVGhhdCBpcywgc29tZSBpbnZhbGlkIEhUTUwKKyAgICAgICBpcyB0b2xlcmF0ZWQgZXZlbiBpbiAqc3RyaWN0KiBtb2RlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDYzZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvaHRtbC5yc3QKQEAgLTAsMCArMSwyMSBAQAorOm1vZDpgaHRtbGAgLS0tIEh5cGVyVGV4dCBNYXJrdXAgTGFuZ3VhZ2Ugc3VwcG9ydAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBodG1sCisgICA6c3lub3BzaXM6IEhlbHBlcnMgZm9yIG1hbmlwdWxhdGluZyBIVE1MLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaHRtbC9fX2luaXRfXy5weWAKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB1dGlsaXRpZXMgdG8gbWFuaXB1bGF0ZSBIVE1MLgorCisuLiBmdW5jdGlvbjo6IGVzY2FwZShzLCBxdW90ZT1UcnVlKQorCisgICBDb252ZXJ0IHRoZSBjaGFyYWN0ZXJzIGBgJmBgLCBgYDxgYCBhbmQgYGA+YGAgaW4gc3RyaW5nICpzKiB0byBIVE1MLXNhZmUKKyAgIHNlcXVlbmNlcy4gIFVzZSB0aGlzIGlmIHlvdSBuZWVkIHRvIGRpc3BsYXkgdGV4dCB0aGF0IG1pZ2h0IGNvbnRhaW4gc3VjaAorICAgY2hhcmFjdGVycyBpbiBIVE1MLiAgSWYgdGhlIG9wdGlvbmFsIGZsYWcgKnF1b3RlKiBpcyB0cnVlLCB0aGUgY2hhcmFjdGVycworICAgKGBgImBgKSBhbmQgKGBgJ2BgKSBhcmUgYWxzbyB0cmFuc2xhdGVkOyB0aGlzIGhlbHBzIGZvciBpbmNsdXNpb24gaW4gYW4gSFRNTAorICAgYXR0cmlidXRlIHZhbHVlIGRlbGltaXRlZCBieSBxdW90ZXMsIGFzIGluIGBgPGEgaHJlZj0iLi4uIj5gYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAppbmRleCBjYmU0ZjA1Li43MDQ1ODViIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CkBAIC0xMSwzMCArMTEsMzMgQEAKIAogLi4gaW5kZXg6OiBtb2R1bGU6IHVybGxpYi5yZXF1ZXN0CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2h0dHAvY2xpZW50LnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGNsYXNzZXMgd2hpY2ggaW1wbGVtZW50IHRoZSBjbGllbnQgc2lkZSBvZiB0aGUgSFRUUCBhbmQKIEhUVFBTIHByb3RvY29scy4gIEl0IGlzIG5vcm1hbGx5IG5vdCB1c2VkIGRpcmVjdGx5IC0tLSB0aGUgbW9kdWxlCiA6bW9kOmB1cmxsaWIucmVxdWVzdGAgdXNlcyBpdCB0byBoYW5kbGUgVVJMcyB0aGF0IHVzZSBIVFRQIGFuZCBIVFRQUy4KIAogLi4gbm90ZTo6CiAKLSAgIEhUVFBTIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIDptb2Q6YHNvY2tldGAgbW9kdWxlIHdhcyBjb21waWxlZCB3aXRoCi0gICBTU0wgc3VwcG9ydC4KKyAgIEhUVFBTIHN1cHBvcnQgaXMgb25seSBhdmFpbGFibGUgaWYgUHl0aG9uIHdhcyBjb21waWxlZCB3aXRoIFNTTCBzdXBwb3J0CisgICAodGhyb3VnaCB0aGUgOm1vZDpgc3NsYCBtb2R1bGUpLgogCiBUaGUgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCi0uLiBjbGFzczo6IEhUVFBDb25uZWN0aW9uKGhvc3QsIHBvcnQ9Tm9uZSwgc3RyaWN0PU5vbmVbLCB0aW1lb3V0XSkKKy4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgc3RyaWN0WywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV1dKQogCiAgICBBbiA6Y2xhc3M6YEhUVFBDb25uZWN0aW9uYCBpbnN0YW5jZSByZXByZXNlbnRzIG9uZSB0cmFuc2FjdGlvbiB3aXRoIGFuIEhUVFAKICAgIHNlcnZlci4gIEl0IHNob3VsZCBiZSBpbnN0YW50aWF0ZWQgcGFzc2luZyBpdCBhIGhvc3QgYW5kIG9wdGlvbmFsIHBvcnQKICAgIG51bWJlci4gIElmIG5vIHBvcnQgbnVtYmVyIGlzIHBhc3NlZCwgdGhlIHBvcnQgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGhvc3QKICAgIHN0cmluZyBpZiBpdCBoYXMgdGhlIGZvcm0gYGBob3N0OnBvcnRgYCwgZWxzZSB0aGUgZGVmYXVsdCBIVFRQIHBvcnQgKDgwKSBpcwotICAgdXNlZC4gIFdoZW4gVHJ1ZSwgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqc3RyaWN0KiAod2hpY2ggZGVmYXVsdHMgdG8gYSBmYWxzZQotICAgdmFsdWUpIGNhdXNlcyBgYEJhZFN0YXR1c0xpbmVgYCB0bwotICAgYmUgcmFpc2VkIGlmIHRoZSBzdGF0dXMgbGluZSBjYW4ndCBiZSBwYXJzZWQgYXMgYSB2YWxpZCBIVFRQLzEuMCBvciAxLjEKLSAgIHN0YXR1cyBsaW5lLiAgSWYgdGhlIG9wdGlvbmFsICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGJsb2NraW5nCisgICB1c2VkLiAgSWYgdGhlIG9wdGlvbmFsICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGJsb2NraW5nCiAgICBvcGVyYXRpb25zIChsaWtlIGNvbm5lY3Rpb24gYXR0ZW1wdHMpIHdpbGwgdGltZW91dCBhZnRlciB0aGF0IG1hbnkgc2Vjb25kcwogICAgKGlmIGl0IGlzIG5vdCBnaXZlbiwgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZyBpcyB1c2VkKS4KKyAgIFRoZSBvcHRpb25hbCAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciBtYXkgYmUgYSB0dXBsZSBvZiBhIChob3N0LCBwb3J0KQorICAgdG8gdXNlIGFzIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGUgSFRUUCBjb25uZWN0aW9uIGlzIG1hZGUgZnJvbS4KIAogICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY2FsbHMgYWxsIGNyZWF0ZSBpbnN0YW5jZXMgdGhhdCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIKICAgIGF0IHRoZSBzYW1lIGhvc3QgYW5kIHBvcnQ6OgpAQCAtNDQsMjQgKzQ3LDU4IEBACiAgICAgICA+Pj4gaDMgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LmN3aS5ubCcsIDgwKQogICAgICAgPj4+IGgzID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnLCA4MCwgdGltZW91dD0xMCkKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICpzb3VyY2VfYWRkcmVzcyogd2FzIGFkZGVkLgogCi0uLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLCBzdHJpY3Q9Tm9uZVssIHRpbWVvdXRdKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgorICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKworCisuLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lWywgc3RyaWN0WywgdGltZW91dFssIHNvdXJjZV9hZGRyZXNzXV1dLCAqLCBjb250ZXh0PU5vbmUsIGNoZWNrX2hvc3RuYW1lPU5vbmUpCiAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgdGhhdCB1c2VzIFNTTCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoCi0gICBzZWN1cmUgc2VydmVycy4gIERlZmF1bHQgcG9ydCBpcyBgYDQ0M2BgLiAgKmtleV9maWxlKiBpcyB0aGUgbmFtZSBvZiBhIFBFTQotICAgZm9ybWF0dGVkIGZpbGUgdGhhdCBjb250YWlucyB5b3VyIHByaXZhdGUga2V5LCBhbmQgKmNlcnRfZmlsZSogaXMgYSBQRU0KLSAgIGZvcm1hdHRlZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlOyBib3RoIGNhbiBiZSB1c2VkIGZvciBhdXRoZW50aWNhdGluZwotICAgeW91cnNlbGYgYWdhaW5zdCB0aGUgc2VydmVyLgorICAgc2VjdXJlIHNlcnZlcnMuICBEZWZhdWx0IHBvcnQgaXMgYGA0NDNgYC4gIElmICpjb250ZXh0KiBpcyBzcGVjaWZpZWQsIGl0CisgICBtdXN0IGJlIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UgZGVzY3JpYmluZyB0aGUgdmFyaW91cyBTU0wKKyAgIG9wdGlvbnMuICBJZiAqY29udGV4dCogaXMgc3BlY2lmaWVkIGFuZCBoYXMgYSA6YXR0cjpgfnNzbC5TU0xDb250ZXh0LnZlcmlmeV9tb2RlYAorICAgb2YgZWl0aGVyIDpkYXRhOmB+c3NsLkNFUlRfT1BUSU9OQUxgIG9yIDpkYXRhOmB+c3NsLkNFUlRfUkVRVUlSRURgLCB0aGVuCisgICBieSBkZWZhdWx0ICpob3N0KiBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGhvc3QgbmFtZShzKSBhbGxvd2VkIGJ5IHRoZQorICAgc2VydmVyJ3MgY2VydGlmaWNhdGUuICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhhdCBiZWhhdmlvdXIsIHlvdSBjYW4KKyAgIGV4cGxpY2l0bHkgc2V0ICpjaGVja19ob3N0bmFtZSogdG8gRmFsc2UuCiAKLSAgIC4uIHdhcm5pbmc6OgotICAgICAgVGhpcyBkb2VzIG5vdCBkbyBhbnkgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KKyAgICprZXlfZmlsZSogYW5kICpjZXJ0X2ZpbGUqIGFyZSBkZXByZWNhdGVkLCBwbGVhc2UgdXNlCisgICA6bWV0aDpgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYCBpbnN0ZWFkLgorCisgICBJZiB5b3UgYWNjZXNzIGFyYml0cmFyeSBob3N0cyBvbiB0aGUgSW50ZXJuZXQsIGl0IGlzIHJlY29tbWVuZGVkIHRvCisgICByZXF1aXJlIGNlcnRpZmljYXRlIGNoZWNraW5nIGFuZCBmZWVkIHRoZSAqY29udGV4dCogd2l0aCBhIHNldCBvZgorICAgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXM6OgorCisgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucygnL2V0Yy9wa2kvdGxzL2NlcnRzL2NhLWJ1bmRsZS5jcnQnKQorICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3N2bi5weXRob24ub3JnJywgNDQzLCBjb250ZXh0PWNvbnRleHQpCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAqc291cmNlX2FkZHJlc3MqLCAqY29udGV4dCogYW5kICpjaGVja19ob3N0bmFtZSogd2VyZSBhZGRlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoaXMgY2xhc3Mgbm93IHN1cHBvcnRzIEhUVFBTIHZpcnR1YWwgaG9zdHMgaWYgcG9zc2libGUgKHRoYXQgaXMsCisgICAgICBpZiA6ZGF0YTpgc3NsLkhBU19TTklgIGlzIHRydWUpLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCisgICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgogCiAKLS4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MCwgc3RyaWN0PTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUFJlc3BvbnNlKHNvY2ssIGRlYnVnbGV2ZWw9MFssIHN0cmljdF0sIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKIAogICAgQ2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCB1cG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gIE5vdAogICAgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHVzZXIuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQuICBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIKKyAgICAgIGFyZSBub3Qgc3VwcG9ydGVkIGFueW1vcmUuCisKIAogVGhlIGZvbGxvd2luZyBleGNlcHRpb25zIGFyZSByYWlzZWQgYXMgYXBwcm9wcmlhdGU6CiAKQEAgLTM2MCwxNCArMzk3LDE4IEBACiAgICBzdHJpbmcuCiAKICAgIFRoZSAqYm9keSogbWF5IGFsc28gYmUgYW4gb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgLCBpbiB3aGljaCBjYXNlIHRoZQotICAgY29udGVudHMgb2YgdGhlIGZpbGUgaXMgc2VudDsgdGhpcyBmaWxlIG9iamVjdCBzaG91bGQgc3VwcG9ydAotICAgYGBmaWxlbm8oKWBgIGFuZCBgYHJlYWQoKWBgIG1ldGhvZHMuIFRoZSBoZWFkZXIgQ29udGVudC1MZW5ndGggaXMKLSAgIGF1dG9tYXRpY2FsbHkgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIGZpbGUgYXMgcmVwb3J0ZWQgYnkKLSAgIHN0YXQuCisgICBjb250ZW50cyBvZiB0aGUgZmlsZSBpcyBzZW50OyB0aGlzIGZpbGUgb2JqZWN0IHNob3VsZCBzdXBwb3J0IGBgZmlsZW5vKClgYAorICAgYW5kIGBgcmVhZCgpYGAgbWV0aG9kcy4gVGhlIGhlYWRlciBDb250ZW50LUxlbmd0aCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0bworICAgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBhcyByZXBvcnRlZCBieSBzdGF0LiBUaGUgKmJvZHkqIGFyZ3VtZW50IG1heSBhbHNvIGJlCisgICBhbiBpdGVyYWJsZSBhbmQgQ29udGVudC1MZW5ndGggaGVhZGVyIHNob3VsZCBiZSBleHBsaWNpdGx5IHByb3ZpZGVkIHdoZW4gdGhlCisgICBib2R5IGlzIGFuIGl0ZXJhYmxlLgogCiAgICBUaGUgKmhlYWRlcnMqIGFyZ3VtZW50IHNob3VsZCBiZSBhIG1hcHBpbmcgb2YgZXh0cmEgSFRUUAogICAgaGVhZGVycyB0byBzZW5kIHdpdGggdGhlIHJlcXVlc3QuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgKmJvZHkqIGNhbiBub3cgYmUgYW4gaXRlcmFibGUuCisKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLmdldHJlc3BvbnNlKCkKIAogICAgU2hvdWxkIGJlIGNhbGxlZCBhZnRlciBhIHJlcXVlc3QgaXMgc2VudCB0byBnZXQgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci4KQEAgLTM4OSw2ICs0MzAsMTcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKy4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLnNldF90dW5uZWwoaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpCisKKyAgIFNldCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQgZm9yIEhUVFAgQ29ubmVjdCBUdW5uZWxsaW5nLiBOb3JtYWxseSB1c2VkIHdoZW4gaXQKKyAgIGlzIHJlcXVpcmVkIHRvIGEgSFRUUFMgQ29ubmVjdGlvbiB0aHJvdWdoIGEgcHJveHkgc2VydmVyLgorCisgICBUaGUgaGVhZGVycyBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAgaGVhZGVycyB0byB0byBzZW50CisgICB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLmNvbm5lY3QoKQogCiAgICBDb25uZWN0IHRvIHRoZSBzZXJ2ZXIgc3BlY2lmaWVkIHdoZW4gdGhlIG9iamVjdCB3YXMgY3JlYXRlZC4KQEAgLTUxMSw5ICs1NjMsOCBAQAogICAgPj4+IGRhdGEyID0gcjIucmVhZCgpCiAgICA+Pj4gY29ubi5jbG9zZSgpCiAKLUhlcmUgaXMgYW4gZXhhbXBsZSBzZXNzaW9uIHRoYXQgdXNlcyBgYEhFQURgYCBtZXRob2QuIE5vdGUgdGhhdCBgYEhFQURgYCBtZXRob2QKLW5ldmVyIHJldHVybnMgYW55IGRhdGEuIDo6Ci0KK0hlcmUgaXMgYW4gZXhhbXBsZSBzZXNzaW9uIHRoYXQgdXNlcyB0aGUgYGBIRUFEYGAgbWV0aG9kLiAgTm90ZSB0aGF0IHRoZQorYGBIRUFEYGAgbWV0aG9kIG5ldmVyIHJldHVybnMgYW55IGRhdGEuIDo6CiAKICAgID4+PiBpbXBvcnQgaHR0cC5jbGllbnQKICAgID4+PiBjb25uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oInd3dy5weXRob24ub3JnIikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2h0dHAuY29va2llamFyLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY29va2llamFyLnJzdAppbmRleCA3NGQ4ZDE2Li45NzcxNDk2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZWphci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogSm9obiBKLiBMZWUgPGpqbEBwb2JveC5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogSm9obiBKLiBMZWUgPGpqbEBwb2JveC5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2h0dHAvY29va2llamFyLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgaHR0cC5jb29raWVqYXJgIG1vZHVsZSBkZWZpbmVzIGNsYXNzZXMgZm9yIGF1dG9tYXRpYyBoYW5kbGluZyBvZiBIVFRQCiBjb29raWVzLiAgSXQgaXMgdXNlZnVsIGZvciBhY2Nlc3Npbmcgd2ViIHNpdGVzIHRoYXQgcmVxdWlyZSBzbWFsbCBwaWVjZXMgb2YgZGF0YQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY29va2llcy5yc3QKaW5kZXggNDcyZGRjZi4uZDhhNDM3YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZXMucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogVGltb3RoeSBPJ01hbGxleSA8dGltb0BhbHVtLm1pdC5lZHU+CiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odHRwL2Nvb2tpZXMucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBodHRwLmNvb2tpZXNgIG1vZHVsZSBkZWZpbmVzIGNsYXNzZXMgZm9yIGFic3RyYWN0aW5nIHRoZSBjb25jZXB0IG9mCiBjb29raWVzLCBhbiBIVFRQIHN0YXRlIG1hbmFnZW1lbnQgbWVjaGFuaXNtLiBJdCBzdXBwb3J0cyBib3RoIHNpbXBsZSBzdHJpbmctb25seQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CmluZGV4IDFjYTE2MjAuLmUzYTNhMTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKQEAgLTExLDYgKzExLDEwIEBACiAgICBzaW5nbGU6IFVSTAogICAgc2luZ2xlOiBodHRwZAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9odHRwL3NlcnZlci5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgZGVmaW5lcyBjbGFzc2VzIGZvciBpbXBsZW1lbnRpbmcgSFRUUCBzZXJ2ZXJzIChXZWIgc2VydmVycykuCiAKIE9uZSBjbGFzcywgOmNsYXNzOmBIVFRQU2VydmVyYCwgaXMgYSA6Y2xhc3M6YHNvY2tldHNlcnZlci5UQ1BTZXJ2ZXJgIHN1YmNsYXNzLgpAQCAtMTU1LDYgKzE1OSwxNyBAQAogICAgICAgVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSBhbmQgZGlzcGF0Y2ggdGhlIHJlcXVlc3QgdG8gdGhlIGFwcHJvcHJpYXRlCiAgICAgICA6bWV0aDpgZG9fXCpgIG1ldGhvZC4gIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBvdmVycmlkZSBpdC4KIAorICAgLi4gbWV0aG9kOjogaGFuZGxlX2V4cGVjdF8xMDAoKQorCisgICAgICBXaGVuIGEgSFRUUC8xLjEgY29tcGxpYW50IHNlcnZlciByZWNlaXZlcyBhIGBgRXhwZWN0OiAxMDAtY29udGludWVgYAorICAgICAgcmVxdWVzdCBoZWFkZXIgaXQgcmVzcG9uZHMgYmFjayB3aXRoIGEgYGAxMDAgQ29udGludWVgYCBmb2xsb3dlZCBieSBgYDIwMAorICAgICAgT0tgYCBoZWFkZXJzLgorICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gdG8gcmFpc2UgYW4gZXJyb3IgaWYgdGhlIHNlcnZlciBkb2VzIG5vdAorICAgICAgd2FudCB0aGUgY2xpZW50IHRvIGNvbnRpbnVlLiAgRm9yIGUuZy4gc2VydmVyIGNhbiBjaG9zZSB0byBzZW5kIGBgNDE3CisgICAgICBFeHBlY3RhdGlvbiBGYWlsZWRgYCBhcyBhIHJlc3BvbnNlIGhlYWRlciBhbmQgYGByZXR1cm4gRmFsc2VgYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKICAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lKQogCiAgICAgICBTZW5kcyBhbmQgbG9ncyBhIGNvbXBsZXRlIGVycm9yIHJlcGx5IHRvIHRoZSBjbGllbnQuIFRoZSBudW1lcmljICpjb2RlKgpAQCAtMTcxLDEzICsxODYsMjkgQEAKIAogICAgLi4gbWV0aG9kOjogc2VuZF9oZWFkZXIoa2V5d29yZCwgdmFsdWUpCiAKLSAgICAgIFdyaXRlcyBhIHNwZWNpZmljIEhUVFAgaGVhZGVyIHRvIHRoZSBvdXRwdXQgc3RyZWFtLiAqa2V5d29yZCogc2hvdWxkCi0gICAgICBzcGVjaWZ5IHRoZSBoZWFkZXIga2V5d29yZCwgd2l0aCAqdmFsdWUqIHNwZWNpZnlpbmcgaXRzIHZhbHVlLgorICAgICAgU3RvcmVzIHRoZSBIVFRQIGhlYWRlciB0byBhbiBpbnRlcm5hbCBidWZmZXIgd2hpY2ggd2lsbCBiZSB3cml0dGVuIHRvIHRoZQorICAgICAgb3V0cHV0IHN0cmVhbSB3aGVuIDptZXRoOmBlbmRfaGVhZGVyc2AgbWV0aG9kIGlzIGludm9rZWQuCisgICAgICAqa2V5d29yZCogc2hvdWxkIHNwZWNpZnkgdGhlIGhlYWRlciBrZXl3b3JkLCB3aXRoICp2YWx1ZSoKKyAgICAgIHNwZWNpZnlpbmcgaXRzIHZhbHVlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMiBTdG9yaW5nIHRoZSBoZWFkZXJzIGluIGFuIGludGVybmFsIGJ1ZmZlcgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2Vfb25seShjb2RlLCBtZXNzYWdlPU5vbmUpCisKKyAgICAgIFNlbmRzIHRoZSByZXBvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMAorICAgICAgQ29udGludWVgYCByZXNwb25zZSBpcyBzZW50IGJ5IHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudC4gVGhlIGhlYWRlcnMgbm90CisgICAgICBidWZmZXJlZCBhbmQgc2VudCBkaXJlY3RseSB0aGUgb3V0cHV0IHN0cmVhbS5JZiB0aGUgKm1lc3NhZ2UqIGlzIG5vdAorICAgICAgc3BlY2lmaWVkLCB0aGUgSFRUUCBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdGhlIHJlc3BvbnNlICpjb2RlKiAgaXMgc2VudC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKICAgIC4uIG1ldGhvZDo6IGVuZF9oZWFkZXJzKCkKIAotICAgICAgU2VuZHMgYSBibGFuayBsaW5lLCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIEhUVFAgaGVhZGVycyBpbiB0aGUKLSAgICAgIHJlc3BvbnNlLgorICAgICAgV3JpdGUgdGhlIGJ1ZmZlcmVkIEhUVFAgaGVhZGVycyB0byB0aGUgb3V0cHV0IHN0cmVhbSBhbmQgc2VuZCBhIGJsYW5rCisgICAgICBsaW5lLCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIEhUVFAgaGVhZGVycyBpbiB0aGUgcmVzcG9uc2UuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yIFdyaXRpbmcgdGhlIGJ1ZmZlcmVkIGhlYWRlcnMgdG8gdGhlIG91dHB1dCBzdHJlYW0uCiAKICAgIC4uIG1ldGhvZDo6IGxvZ19yZXF1ZXN0KGNvZGU9Jy0nLCBzaXplPSctJykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAppbmRleCAwNDA4OGFjLi4xZDkyZmU1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdApAQCAtMTYsNiArMTYsMTAgQEAKICAgIHBhaXI6IElNQVA0X1NTTDsgcHJvdG9jb2wKICAgIHBhaXI6IElNQVA0X3N0cmVhbTsgcHJvdG9jb2wKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaW1hcGxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aHJlZSBjbGFzc2VzLCA6Y2xhc3M6YElNQVA0YCwgOmNsYXNzOmBJTUFQNF9TU0xgIGFuZAogOmNsYXNzOmBJTUFQNF9zdHJlYW1gLCB3aGljaCBlbmNhcHN1bGF0ZSBhIGNvbm5lY3Rpb24gdG8gYW4gSU1BUDQgc2VydmVyIGFuZAogaW1wbGVtZW50IGEgbGFyZ2Ugc3Vic2V0IG9mIHRoZSBJTUFQNHJldjEgY2xpZW50IHByb3RvY29sIGFzIGRlZmluZWQgaW4KQEAgLTU2LDYgKzYwLDcgQEAKICAgIHdyaXRlIHBlcm1pc3Npb24sIGFuZCB0aGUgbWFpbGJveCB3aWxsIG5lZWQgdG8gYmUgcmUtb3BlbmVkIHRvIHJlLW9idGFpbiB3cml0ZQogICAgcGVybWlzc2lvbi4KIAorCiBUaGVyZSdzIGFsc28gYSBzdWJjbGFzcyBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zOgogCiAKQEAgLTY4LDYgKzczLDcgQEAKICAgIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvIG9wdGlvbmFsIC0gdGhleSBjYW4gY29udGFpbiBhIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkKICAgIGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCiAKKwogVGhlIHNlY29uZCBzdWJjbGFzcyBhbGxvd3MgZm9yIGNvbm5lY3Rpb25zIGNyZWF0ZWQgYnkgYSBjaGlsZCBwcm9jZXNzOgogCiAKQEAgLTgzLDkgKzg5LDkgQEAKIAogLi4gZnVuY3Rpb246OiBJbnRlcm5hbGRhdGUydHVwbGUoZGF0ZXN0cikKIAotICAgQ29udmVydHMgYW4gSU1BUDQgSU5URVJOQUxEQVRFIHN0cmluZyB0byBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZS4gUmV0dXJucyBhCi0gICA6bW9kOmB0aW1lYCBtb2R1bGUgdHVwbGUuCi0KKyAgIFBhcnNlIGFuIElNQVA0IGBgSU5URVJOQUxEQVRFYGAgc3RyaW5nIGFuZCByZXR1cm4gY29ycmVzcG9uZGluZyBsb2NhbAorICAgdGltZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYSA6Y2xhc3M6YHRpbWUuc3RydWN0X3RpbWVgIHR1cGxlIG9yCisgICBOb25lIGlmIHRoZSBzdHJpbmcgaGFzIHdyb25nIGZvcm1hdC4KIAogLi4gZnVuY3Rpb246OiBJbnQyQVAobnVtKQogCkBAIC0xMDAsOSArMTA2LDEzIEBACiAKIC4uIGZ1bmN0aW9uOjogVGltZTJJbnRlcm5hbGRhdGUoZGF0ZV90aW1lKQogCi0gICBDb252ZXJ0cyBhIDptb2Q6YHRpbWVgIG1vZHVsZSB0dXBsZSB0byBhbiBJTUFQNCBgYElOVEVSTkFMREFURWBgIHJlcHJlc2VudGF0aW9uLgotICAgUmV0dXJucyBhIHN0cmluZyBpbiB0aGUgZm9ybTogYGAiREQtTW1tLVlZWVkgSEg6TU06U1MgK0hITU0iYGAgKGluY2x1ZGluZwotICAgZG91YmxlLXF1b3RlcykuCisgICBDb252ZXJ0ICpkYXRlX3RpbWUqIHRvIGFuIElNQVA0IGBgSU5URVJOQUxEQVRFYGAgcmVwcmVzZW50YXRpb24uICBUaGUKKyAgIHJldHVybiB2YWx1ZSBpcyBhIHN0cmluZyBpbiB0aGUgZm9ybTogYGAiREQtTW1tLVlZWVkgSEg6TU06U1MKKyAgICtISE1NImBgIChpbmNsdWRpbmcgZG91YmxlLXF1b3RlcykuICBUaGUgKmRhdGVfdGltZSogYXJndW1lbnQgY2FuIGJlIGEKKyAgIG51bWJlciAoaW50IG9yIGZsb2F0KSByZXByZXNlbmluZyBzZWNvbmRzIHNpbmNlIGVwb2NoIChhcyByZXR1cm5lZAorICAgYnkgOmZ1bmM6YHRpbWUudGltZWApLCBhIDktdHVwbGUgcmVwcmVzZW50aW5nIGxvY2FsIHRpbWUgKGFzIHJldHVybmVkIGJ5CisgICA6ZnVuYzpgdGltZS5sb2NhbHRpbWVgKSwgb3IgYSBkb3VibGUtcXVvdGVkIHN0cmluZy4gIEluIHRoZSBsYXN0IGNhc2UsIGl0CisgICBpcyBhc3N1bWVkIHRvIGFscmVhZHkgYmUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LgogCiBOb3RlIHRoYXQgSU1BUDQgbWVzc2FnZSBudW1iZXJzIGNoYW5nZSBhcyB0aGUgbWFpbGJveCBjaGFuZ2VzOyBpbiBwYXJ0aWN1bGFyLAogYWZ0ZXIgYW4gYGBFWFBVTkdFYGAgY29tbWFuZCBwZXJmb3JtcyBkZWxldGlvbnMgdGhlIHJlbWFpbmluZyBtZXNzYWdlcyBhcmUKQEAgLTQwOCw2ICs0MTgsMTUgQEAKICAgIFRoaXMgaXMgYW4gYGBJTUFQNHJldjFgYCBleHRlbnNpb24gY29tbWFuZC4KIAogCisuLiBtZXRob2Q6OiBJTUFQNC5zdGFydHRscyhzc2xfY29udGV4dD1Ob25lKQorCisgICBTZW5kIGEgYGBTVEFSVFRMU2BgIGNvbW1hbmQuICBUaGUgKnNzbF9jb250ZXh0KiBhcmd1bWVudCBpcyBvcHRpb25hbAorICAgYW5kIHNob3VsZCBiZSBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdC4gIFRoaXMgd2lsbCBlbmFibGUKKyAgIGVuY3J5cHRpb24gb24gdGhlIElNQVAgY29ubmVjdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gbWV0aG9kOjogSU1BUDQuc3RhdHVzKG1haWxib3gsIG5hbWVzKQogCiAgICBSZXF1ZXN0IG5hbWVkIHN0YXR1cyBjb25kaXRpb25zIGZvciAqbWFpbGJveCouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbWdoZHIucnN0IGIvRG9jL2xpYnJhcnkvaW1naGRyLnJzdAppbmRleCAwYzA3MjJkLi4zMmVjOWNmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWdoZHIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltZ2hkci5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiBpbWdoZHIKICAgIDpzeW5vcHNpczogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGltYWdlIGNvbnRhaW5lZCBpbiBhIGZpbGUgb3IgYnl0ZSBzdHJlYW0uCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2ltZ2hkci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGltZ2hkcmAgbW9kdWxlIGRldGVybWluZXMgdGhlIHR5cGUgb2YgaW1hZ2UgY29udGFpbmVkIGluIGEgZmlsZSBvcgogYnl0ZSBzdHJlYW0uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbXAucnN0IGIvRG9jL2xpYnJhcnkvaW1wLnJzdAppbmRleCAyZDgzODkzLi42ZTk4NDVlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKQEAgLTE5MCw4ICsxOTAsNDMgQEAKICAgIGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkIGNsYXNzIGRlZmluaXRpb24uICBUaGUgc2FtZSBpcyB0cnVlIGZvciBkZXJpdmVkIGNsYXNzZXMuCiAKIAotVGhlIGZvbGxvd2luZyBjb25zdGFudHMgd2l0aCBpbnRlZ2VyIHZhbHVlcywgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSwgYXJlIHVzZWQgdG8KLWluZGljYXRlIHRoZSBzZWFyY2ggcmVzdWx0IG9mIDpmdW5jOmBmaW5kX21vZHVsZWAuCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgY29udmVuaWVuY2VzIGZvciBoYW5kbGluZyA6cGVwOmAzMTQ3YCBieXRlLWNvbXBpbGVkCitmaWxlIHBhdGhzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZnVuY3Rpb246OiBjYWNoZV9mcm9tX3NvdXJjZShwYXRoLCBkZWJ1Z19vdmVycmlkZT1Ob25lKQorCisgICBSZXR1cm4gdGhlIDpwZXA6YDMxNDdgIHBhdGggdG8gdGhlIGJ5dGUtY29tcGlsZWQgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlCisgICBzb3VyY2UgKnBhdGgqLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcyBgYC9mb28vYmFyL2Jhei5weWBgIHRoZSByZXR1cm4KKyAgIHZhbHVlIHdvdWxkIGJlIGBgL2Zvby9iYXIvX19weWNhY2hlX18vYmF6LmNweXRob24tMzIucHljYGAgZm9yIFB5dGhvbiAzLjIuCisgICBUaGUgYGBjcHl0aG9uLTMyYGAgc3RyaW5nIGNvbWVzIGZyb20gdGhlIGN1cnJlbnQgbWFnaWMgdGFnIChzZWUKKyAgIDpmdW5jOmBnZXRfdGFnYCkuICBUaGUgcmV0dXJuZWQgcGF0aCB3aWxsIGVuZCBpbiBgYC5weWNgYCB3aGVuCisgICBgYF9fZGVidWdfX2BgIGlzIFRydWUgb3IgYGAucHlvYGAgZm9yIGFuIG9wdGltaXplZCBQeXRob24KKyAgIChpLmUuIGBgX19kZWJ1Z19fYGAgaXMgRmFsc2UpLiAgQnkgcGFzc2luZyBpbiBUcnVlIG9yIEZhbHNlIGZvcgorICAgKmRlYnVnX292ZXJyaWRlKiB5b3UgY2FuIG92ZXJyaWRlIHRoZSBzeXN0ZW0ncyB2YWx1ZSBmb3IgYGBfX2RlYnVnX19gYCBmb3IKKyAgIGV4dGVuc2lvbiBzZWxlY3Rpb24uCisKKyAgICpwYXRoKiBuZWVkIG5vdCBleGlzdC4KKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCisKKyAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKKyAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCisKKworVGhlIGZvbGxvd2luZyBjb25zdGFudHMgd2l0aCBpbnRlZ2VyIHZhbHVlcywgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZSwgYXJlIHVzZWQKK3RvIGluZGljYXRlIHRoZSBzZWFyY2ggcmVzdWx0IG9mIDpmdW5jOmBmaW5kX21vZHVsZWAuCiAKIAogLi4gZGF0YTo6IFBZX1NPVVJDRQpAQCAtMjczLDEwICszMDgsMyBAQAogICAgICAgICAgICAjIFNpbmNlIHdlIG1heSBleGl0IHZpYSBhbiBleGNlcHRpb24sIGNsb3NlIGZwIGV4cGxpY2l0bHkuCiAgICAgICAgICAgIGlmIGZwOgogICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0uLiBpbmRleDo6IG1vZHVsZToga25lZQotCi1BIG1vcmUgY29tcGxldGUgZXhhbXBsZSB0aGF0IGltcGxlbWVudHMgaGllcmFyY2hpY2FsIG1vZHVsZSBuYW1lcyBhbmQgaW5jbHVkZXMgYQotOmZ1bmM6YHJlbG9hZGAgZnVuY3Rpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBtb2R1bGUgOm1vZDpga25lZWAuICBUaGUgOm1vZDpga25lZWAKLW1vZHVsZSBjYW4gYmUgZm91bmQgaW4gOmZpbGU6YERlbW8vaW1wdXRpbC9gIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbi4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdCBiL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKaW5kZXggY2YxM2JhMy4uYzlmNzQyYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CkBAIC0xOCwxMiArMTgsMTIgQEAKIDpmdW5jOmBfX2ltcG9ydF9fYCBmdW5jdGlvbikgaW4gUHl0aG9uIHNvdXJjZSBjb2RlLiBUaGlzIHByb3ZpZGVzIGFuCiBpbXBsZW1lbnRhdGlvbiBvZiA6a2V5d29yZDpgaW1wb3J0YCB3aGljaCBpcyBwb3J0YWJsZSB0byBhbnkgUHl0aG9uCiBpbnRlcnByZXRlci4gVGhpcyBhbHNvIHByb3ZpZGVzIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHdoaWNoIGlzIGVhc2llciB0bwotY29tcHJlaGVuZCB0aGFuIG9uZSBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlIG90aGVyIHRoYW4gUHl0aG9uLgorY29tcHJlaGVuZCB0aGFuIG9uZSBpbXBsZW1lbnRlZCBpbiBhIHByb2dyYW1taW5nIGxhbmd1YWdlIG90aGVyIHRoYW4gUHl0aG9uLgogCi1Ud28sIHRoZSBjb21wb25lbnRzIHRvIGltcGxlbWVudCA6a2V5d29yZDpgaW1wb3J0YCBjYW4gYmUgZXhwb3NlZCBpbiB0aGlzCitUd28sIHRoZSBjb21wb25lbnRzIHRvIGltcGxlbWVudCA6a2V5d29yZDpgaW1wb3J0YCBhcmUgZXhwb3NlZCBpbiB0aGlzCiBwYWNrYWdlLCBtYWtpbmcgaXQgZWFzaWVyIGZvciB1c2VycyB0byBjcmVhdGUgdGhlaXIgb3duIGN1c3RvbSBvYmplY3RzIChrbm93bgogZ2VuZXJpY2FsbHkgYXMgYW4gOnRlcm06YGltcG9ydGVyYCkgdG8gcGFydGljaXBhdGUgaW4gdGhlIGltcG9ydCBwcm9jZXNzLgotRGV0YWlscyBvbiBwcm92aWRpbmcgY3VzdG9tIGltcG9ydGVycyBjYW4gYmUgZm91bmQgaW4gOnBlcDpgMzAyYC4KK0RldGFpbHMgb24gY3VzdG9tIGltcG9ydGVycyBjYW4gYmUgZm91bmQgaW4gOnBlcDpgMzAyYC4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTMyLDEyICszMiwxMSBAQAogCiAgICAgYFBhY2thZ2VzIHNwZWNpZmljYXRpb24gPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvZXNzYXlzL3BhY2thZ2VzLmh0bWw+YF9fCiAgICAgICAgIE9yaWdpbmFsIHNwZWNpZmljYXRpb24gb2YgcGFja2FnZXMuIFNvbWUgc2VtYW50aWNzIGhhdmUgY2hhbmdlZCBzaW5jZQotICAgICAgICB0aGUgd3JpdGluZyBvZiB0aGlzIGRvY3VtZW50IChlLmcuIHJlZGlyZWN0aW5nIGJhc2VkIG9uIDprZXl3b3JkOmBOb25lYAorICAgICAgICB0aGUgd3JpdGluZyBvZiB0aGlzIGRvY3VtZW50IChlLmcuIHJlZGlyZWN0aW5nIGJhc2VkIG9uIGBgTm9uZWBgCiAgICAgICAgIGluIDpkYXRhOmBzeXMubW9kdWxlc2ApLgogCiAgICAgVGhlIDpmdW5jOmAuX19pbXBvcnRfX2AgZnVuY3Rpb24KLSAgICAgICAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGZvciB3aGljaCB0aGUgOmtleXdvcmQ6YGltcG9ydGAgc3RhdGVtZW50IGlzCi0gICAgICAgIHN5bnRhY3RpYyBzdWdhci4KKyAgICAgICAgVGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudCBpcyBzeW50YWN0aWMgc3VnYXIgZm9yIHRoaXMgZnVuY3Rpb24uCiAKICAgICA6cGVwOmAyMzVgCiAgICAgICAgIEltcG9ydCBvbiBDYXNlLUluc2Vuc2l0aXZlIFBsYXRmb3JtcwpAQCAtNDYsNyArNDUsNyBAQAogICAgICAgICBEZWZpbmluZyBQeXRob24gU291cmNlIENvZGUgRW5jb2RpbmdzCiAKICAgICA6cGVwOmAzMDJgCi0gICAgICAgIE5ldyBJbXBvcnQgSG9va3MuCisgICAgICAgIE5ldyBJbXBvcnQgSG9va3MKIAogICAgIDpwZXA6YDMyOGAKICAgICAgICAgSW1wb3J0czogTXVsdGktTGluZSBhbmQgQWJzb2x1dGUvUmVsYXRpdmUKQEAgLTU3LDE0ICs1NiwxNiBAQAogICAgIDpwZXA6YDMxMjBgCiAgICAgICAgIFVzaW5nIFVURi04IGFzIHRoZSBEZWZhdWx0IFNvdXJjZSBFbmNvZGluZwogCisgICAgOnBlcDpgMzE0N2AKKyAgICAgICAgUFlDIFJlcG9zaXRvcnkgRGlyZWN0b3JpZXMKKwogCiBGdW5jdGlvbnMKIC0tLS0tLS0tLQogCiAuLiBmdW5jdGlvbjo6IF9faW1wb3J0X18obmFtZSwgZ2xvYmFscz17fSwgbG9jYWxzPXt9LCBmcm9tbGlzdD1saXN0KCksIGxldmVsPTApCiAKLSAgICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYnVpbHQtaW4gOmZ1bmM6YF9faW1wb3J0X19gIGZ1bmN0aW9uLiBTZWUgdGhlCi0gICAgYnVpbHQtaW4gZnVuY3Rpb24ncyBkb2N1bWVudGF0aW9uIGZvciB1c2FnZSBpbnN0cnVjdGlvbnMuCisgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIGJ1aWx0LWluIDpmdW5jOmBfX2ltcG9ydF9fYCBmdW5jdGlvbi4KIAogLi4gZnVuY3Rpb246OiBpbXBvcnRfbW9kdWxlKG5hbWUsIHBhY2thZ2U9Tm9uZSkKIApAQCAtMTA4LDcgKzEwOSw3IEBACiAgICAgICAgIG1vZHVsZS4gSWYgdGhlIDp0ZXJtOmBmaW5kZXJgIGlzIGZvdW5kIG9uIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBhbmQgdGhlCiAgICAgICAgIG1vZHVsZSB0byBiZSBzZWFyY2hlZCBmb3IgaXMgYSBzdWJwYWNrYWdlIG9yIG1vZHVsZSB0aGVuICpwYXRoKiB3aWxsCiAgICAgICAgIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlIHBhcmVudCBwYWNrYWdlLiBJZiBhIGxvYWRlcgotICAgICAgICBjYW5ub3QgYmUgZm91bmQsIDprZXl3b3JkOmBOb25lYCBpcyByZXR1cm5lZC4KKyAgICAgICAgY2Fubm90IGJlIGZvdW5kLCBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIAogCiAuLiBjbGFzczo6IExvYWRlcgpAQCAtMTg0LDE0ICsxODUsMTQgQEAKICAgICAuLiBtZXRob2Q6OiBnZXRfY29kZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSA6Y2xhc3M6YGNvZGVgIG9iamVjdCBmb3IgYSBtb2R1bGUuCi0gICAgICAgIDprZXl3b3JkOmBOb25lYCBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAorICAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCBpZiB0aGUgbW9kdWxlIGRvZXMgbm90IGhhdmUgYSBjb2RlIG9iamVjdAogICAgICAgICAoZS5nLiBidWlsdC1pbiBtb2R1bGUpLiAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCBpZiBsb2FkZXIgY2Fubm90CiAgICAgICAgIGZpbmQgdGhlIHJlcXVlc3RlZCBtb2R1bGUuCiAKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIHNvdXJjZSBvZiBhIG1vZHVsZS4gSXQgaXMgcmV0dXJuZWQgYXMKLSAgICAgICAgYSB0ZXh0IHN0cmluZyB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lcy4gUmV0dXJucyA6a2V5d29yZDpgTm9uZWAgaWYgbm8KKyAgICAgICAgYSB0ZXh0IHN0cmluZyB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lcy4gUmV0dXJucyBgYE5vbmVgYCBpZiBubwogICAgICAgICBzb3VyY2UgaXMgYXZhaWxhYmxlIChlLmcuIGEgYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYAogICAgICAgICBpZiB0aGUgbG9hZGVyIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkLgogCkBAIC0yMDIsMjEgKzIwMywxMzMgQEAKICAgICAgICAgOnRlcm06YGxvYWRlcmAgY2Fubm90IGZpbmQgdGhlIG1vZHVsZS4KIAogCisuLiBjbGFzczo6IEV4ZWN1dGlvbkxvYWRlcgorCisgICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyB3aGljaCBpbmhlcml0cyBmcm9tIDpjbGFzczpgSW5zcGVjdExvYWRlcmAgdGhhdCwKKyAgICB3aGVuIGltcGxlbWVudGVkLCBoZWxwcyBhIG1vZHVsZSB0byBiZSBleGVjdXRlZCBhcyBhIHNjcmlwdC4gVGhlIEFCQworICAgIHJlcHJlc2VudHMgYW4gb3B0aW9uYWwgOnBlcDpgMzAyYCBwcm90b2NvbC4KKworICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCBpcyB0byByZXR1cm4gdGhlIHZhbHVlIG9mIDphdHRyOmBfX2ZpbGVfX2AgZm9yCisgICAgICAgIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiBJZiBubyBwYXRoIGlzIGF2YWlsYWJsZSwgOmV4YzpgSW1wb3J0RXJyb3JgIGlzCisgICAgICAgIHJhaXNlZC4KKworICAgICAgICBJZiBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUsIHRoZW4gdGhlIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSBwYXRoIHRvCisgICAgICAgIHRoZSBzb3VyY2UgZmlsZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgYnl0ZWNvZGUgd2FzIHVzZWQgdG8gbG9hZCB0aGUKKyAgICAgICAgbW9kdWxlLgorCisKKy4uIGNsYXNzOjogU291cmNlTG9hZGVyCisKKyAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgc291cmNlIChhbmQgb3B0aW9uYWxseSBieXRlY29kZSkKKyAgICBmaWxlIGxvYWRpbmcuIFRoZSBjbGFzcyBpbmhlcml0cyBmcm9tIGJvdGggOmNsYXNzOmBSZXNvdXJjZUxvYWRlcmAgYW5kCisgICAgOmNsYXNzOmBFeGVjdXRpb25Mb2FkZXJgLCByZXF1aXJpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mOgorCisgICAgKiA6bWV0aDpgUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGFgCisgICAgKiA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAKKyAgICAgICAgICBTaG91bGQgb25seSByZXR1cm4gdGhlIHBhdGggdG8gdGhlIHNvdXJjZSBmaWxlOyBzb3VyY2VsZXNzCisgICAgICAgICAgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgorCisgICAgVGhlIGFic3RyYWN0IG1ldGhvZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGFyZSB0byBhZGQgb3B0aW9uYWwgYnl0ZWNvZGUKKyAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyBjYXVzZXMgdGhlIGxvYWRlciB0bworICAgIG9ubHkgd29yayB3aXRoIHNvdXJjZSBjb2RlLiBJbXBsZW1lbnRpbmcgdGhlIG1ldGhvZHMgYWxsb3dzIHRoZSBsb2FkZXIgdG8KKyAgICB3b3JrIHdpdGggc291cmNlICphbmQqIGJ5dGVjb2RlIGZpbGVzOyBpdCBkb2VzIG5vdCBhbGxvdyBmb3IgKnNvdXJjZWxlc3MqCisgICAgbG9hZGluZyB3aGVyZSBvbmx5IGJ5dGVjb2RlIGlzIHByb3ZpZGVkLiAgQnl0ZWNvZGUgZmlsZXMgYXJlIGFuCisgICAgb3B0aW1pemF0aW9uIHRvIHNwZWVkIHVwIGxvYWRpbmcgYnkgcmVtb3ZpbmcgdGhlIHBhcnNpbmcgc3RlcCBvZiBQeXRob24ncworICAgIGNvbXBpbGVyLCBhbmQgc28gbm8gYnl0ZWNvZGUtc3BlY2lmaWMgQVBJIGlzIGV4cG9zZWQuCisKKyAgICAuLiBtZXRob2Q6OiBwYXRoX210aW1lKHNlbGYsIHBhdGgpCisKKyAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUKKyAgICAgICAgc3BlY2lmaWVkIHBhdGguCisKKyAgICAuLiBtZXRob2Q6OiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKQorCisgICAgICAgIE9wdGlvbmFsIGFic3RyYWN0IG1ldGhvZCB3aGljaCB3cml0ZXMgdGhlIHNwZWNpZmllZCBieXRlcyB0byBhIGZpbGUKKyAgICAgICAgcGF0aC4gQW55IGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyB3aGljaCBkbyBub3QgZXhpc3QgYXJlIHRvIGJlIGNyZWF0ZWQKKyAgICAgICAgYXV0b21hdGljYWxseS4KKworICAgICAgICBXaGVuIHdyaXRpbmcgdG8gdGhlIHBhdGggZmFpbHMgYmVjYXVzZSB0aGUgcGF0aCBpcyByZWFkLW9ubHkKKyAgICAgICAgKDphdHRyOmBlcnJuby5FQUNDRVNgKSwgZG8gbm90IHByb3BhZ2F0ZSB0aGUgZXhjZXB0aW9uLgorCisgICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpCisKKyAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEluc3BlY3RMb2FkZXIuZ2V0X2NvZGVgLgorCisgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpCisKKyAgICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKKyAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKQorCisgICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBJbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgLgorCisgICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSkKKworICAgICAgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYC4gQSBtb2R1bGUKKyAgICAgICAgaXMgZGV0ZXJtaW5lZCB0byBiZSBhIHBhY2thZ2UgaWYgaXRzIGZpbGUgcGF0aCBpcyBhIGZpbGUgbmFtZWQKKyAgICAgICAgYGBfX2luaXRfX2BgIHdoZW4gdGhlIGZpbGUgZXh0ZW5zaW9uIGlzIHJlbW92ZWQuCisKKwogLi4gY2xhc3M6OiBQeUxvYWRlcgogCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXJgCi0gICAgYW5kIDpjbGFzczpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlcmAgZGVzaWduZWQgdG8gZWFzZSB0aGUgbG9hZGluZyBvZgorICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tCisgICAgOmNsYXNzOmBFeGVjdXRpb25Mb2FkZXJgIGFuZAorICAgIDpjbGFzczpgUmVzb3VyY2VMb2FkZXJgIGRlc2lnbmVkIHRvIGVhc2UgdGhlIGxvYWRpbmcgb2YKICAgICBQeXRob24gc291cmNlIG1vZHVsZXMgKGJ5dGVjb2RlIGlzIG5vdCBoYW5kbGVkOyBzZWUKLSAgICA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCisgICAgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCiAgICAgaW1wbGVtZW50aW5nIHRoaXMgQUJDIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9zaW5nIGhvdyB0aGUgc291cmNlCiAgICAgY29kZSBpcyBzdG9yZWQ7IGFsbCBvdGhlciBkZXRhaWxzIGZvciBsb2FkaW5nIFB5dGhvbiBzb3VyY2UgY29kZSB3aWxsIGJlCiAgICAgaGFuZGxlZCBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIGtleSBtZXRob2RzLgogCisgICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCBpcworICAgICAgICBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4gU2VlIGJlbG93IGZvciBob3cgdG8gY3JlYXRlIGEKKyAgICAgICAgc3ViY2xhc3MgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLgorCisgICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgcmVxdWlyZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20KKyAgICB0byBpbXBsZW1lbnQgYSBzdWJjbGFzcyB0aGF0IHdpbGwgd29yayB3aXRoIFB5dGhvbiAzLjEgb253YXJkcyAobWFrZSBzdXJlCisgICAgdG8gaW1wbGVtZW50IDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCk6OgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCisKKworICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuIiIiCisgICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCisKKyAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4iIiIKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgaXNfcGFja2FnZSBieSBsb29raW5nIGZvciBhbiBfX2luaXRfXyBmaWxlCisgICAgICAgICAgICAgICAgbmFtZSBhcyByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUuIiIiCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJworCisKICAgICAuLiBtZXRob2Q6OiBzb3VyY2VfcGF0aChmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYQotICAgICAgICBtb2R1bGUuIFNob3VsZCByZXR1cm4gOmtleXdvcmQ6YE5vbmVgIGlmIHRoZXJlIGlzIG5vIHNvdXJjZSBjb2RlLgotICAgICAgICA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgIG1vZHVsZS4gU2hvdWxkIHJldHVybiBgYE5vbmVgYCBpZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4KKyAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCisgICAgICAgIG1vZHVsZS4KKworICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWVgIHRoYXQKKyAgICAgICAgcmVsaWVzIG9uIDptZXRoOmBzb3VyY2VfcGF0aGAuIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucworICAgICAgICBgYE5vbmVgYCwgdGhlbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgogCiAgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKQEAgLTIzMSw0MyArMzQ0LDYyIEBACiAgICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKICAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZWAgdGhhdCBjcmVhdGVzIGNvZGUgb2JqZWN0cwogICAgICAgICBmcm9tIFB5dGhvbiBzb3VyY2UgY29kZSwgYnkgcmVxdWVzdGluZyB0aGUgc291cmNlIGNvZGUgKHVzaW5nCi0gICAgICAgIDptZXRoOmBzb3VyY2VfcGF0aGAgYW5kIDptZXRoOmBnZXRfZGF0YWApLCBjb252ZXJ0aW5nIGl0IHRvIHN0YW5kYXJkCi0gICAgICAgIG5ld2xpbmVzLCBhbmQgY29tcGlsaW5nIGl0IHdpdGggdGhlIGJ1aWx0LWluIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4KKyAgICAgICAgOm1ldGg6YHNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGdldF9kYXRhYCkgYW5kIGNvbXBpbGluZyBpdCB3aXRoIHRoZQorICAgICAgICBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCiAKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCiAgICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKICAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYC4gVXNlcwotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YWAgYW5kIDptZXRoOmBzb3VyY2VfcGF0aGAgdG8KLSAgICAgICAgZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEl0IHRyaWVzIHRvIGd1ZXNzIHRoZSBzb3VyY2UgZW5jb2RpbmcgdXNpbmcKKyAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGFgIGFuZCA6bWV0aDpgc291cmNlX3BhdGhgCisgICAgICAgIHRvIGdldCB0aGUgc291cmNlIGNvZGUuICBJdCB0cmllcyB0byBndWVzcyB0aGUgc291cmNlIGVuY29kaW5nIHVzaW5nCiAgICAgICAgIDpmdW5jOmB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmdgLgogCiAKIC4uIGNsYXNzOjogUHlQeWNMb2FkZXIKIAotICAgIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgaW5oZXJpdGluZyBmcm9tIDpjbGFzczpgaW1wb3J0bGliLmFiYy5QeUxvYWRlcmAuCisgICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBQeUxvYWRlcmAuCiAgICAgVGhpcyBBQkMgaXMgbWVhbnQgdG8gaGVscCBpbiBjcmVhdGluZyBsb2FkZXJzIHRoYXQgc3VwcG9ydCBib3RoIFB5dGhvbgogICAgIHNvdXJjZSBhbmQgYnl0ZWNvZGUuCiAKKyAgICAuLiBkZXByZWNhdGVkOjogMy4yCisgICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIHRvCisgICAgICAgIHByb3Blcmx5IHN1cHBvcnQgOnBlcDpgMzE0N2AuIElmIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aAorICAgICAgICBQeXRob24gMy4xLCBpbXBsZW1lbnQgYm90aCA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIDpjbGFzczpgUHlMb2FkZXJgOworICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvIHNvIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgOmNsYXNzOmBQeUxvYWRlcmAuIERvIG5vdGUgdGhhdCB0aGlzIHNvbHV0aW9uIHdpbGwgbm90IHN1cHBvcnQKKyAgICAgICAgc291cmNlbGVzcy9ieXRlY29kZS1vbmx5IGxvYWRpbmc7IG9ubHkgc291cmNlICphbmQqIGJ5dGVjb2RlIGxvYWRpbmcuCisKICAgICAuLiBtZXRob2Q6OiBzb3VyY2VfbXRpbWUoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgc291cmNlCiAgICAgICAgIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUuIFRoZSBtb2RpZmljYXRpb24gdGltZSBzaG91bGQgYmUgYW4KLSAgICAgICAgaW50ZWdlci4gSWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUsIHJldHVybiA6a2V5d29yZDpgTm9uZWAuIElmIHRoZQorICAgICAgICBpbnRlZ2VyLiBJZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZSwgcmV0dXJuIGBgTm9uZWBgLiBJZiB0aGUKICAgICAgICAgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCiAKICAgICAuLiBtZXRob2Q6OiBieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQogCiAgICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBtb2R1bGUsIGlmIGl0IGV4aXN0cy4gSXQgcmV0dXJucyA6a2V5d29yZDpgTm9uZWAKKyAgICAgICAgc3BlY2lmaWVkIG1vZHVsZSwgaWYgaXQgZXhpc3RzLiBJdCByZXR1cm5zIGBgTm9uZWBgCiAgICAgICAgIGlmIG5vIGJ5dGVjb2RlIGV4aXN0cyAoeWV0KS4KLSAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZC4KKyAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGtub3dzIGl0IGNhbm5vdCBoYW5kbGUgdGhlCisgICAgICAgIG1vZHVsZS4KKworICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKKworICAgICAgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0IHJlbGllcyBvbgorICAgICAgICA6bWV0aDpgUHlMb2FkZXIuc291cmNlX3BhdGhgIGFuZCA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAuCisgICAgICAgIElmIDptZXRoOmBzb3VyY2VfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoZW4gdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICAgICAgRWxzZSBpZiA6bWV0aDpgYnl0ZWNvZGVfcGF0aGAgcmV0dXJucyBhIHBhdGgsIHRoYXQgcGF0aCB3aWxsIGJlCisgICAgICAgIHJldHVybmVkLiBJZiBhIHBhdGggaXMgbm90IGF2YWlsYWJsZSBmcm9tIGJvdGggbWV0aG9kcywKKyAgICAgICAgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KIAogICAgIC4uIG1ldGhvZDo6IHdyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBieXRlY29kZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggaGFzIHRoZSBsb2FkZXIgd3JpdGUgKmJ5dGVjb2RlKiBmb3IgZnV0dXJlCi0gICAgICAgIHVzZS4gSWYgdGhlIGJ5dGVjb2RlIGlzIHdyaXR0ZW4sIHJldHVybiA6a2V5d29yZDpgVHJ1ZWAuIFJldHVybgotICAgICAgICA6a2V5d29yZDpgRmFsc2VgIGlmIHRoZSBieXRlY29kZSBjb3VsZCBub3QgYmUgd3JpdHRlbi4gVGhpcyBtZXRob2QKKyAgICAgICAgdXNlLiBJZiB0aGUgYnl0ZWNvZGUgaXMgd3JpdHRlbiwgcmV0dXJuIGBgVHJ1ZWBgLiBSZXR1cm4KKyAgICAgICAgYGBGYWxzZWBgIGlmIHRoZSBieXRlY29kZSBjb3VsZCBub3QgYmUgd3JpdHRlbi4gVGhpcyBtZXRob2QKICAgICAgICAgc2hvdWxkIG5vdCBiZSBjYWxsZWQgaWYgOmRhdGE6YHN5cy5kb250X3dyaXRlX2J5dGVjb2RlYCBpcyB0cnVlLgogICAgICAgICBUaGUgKmJ5dGVjb2RlKiBhcmd1bWVudCBzaG91bGQgYmUgYSBieXRlcyBzdHJpbmcgb3IgYnl0ZXMgYXJyYXkuCiAKQEAgLTMxMSw3ICs0NDMsNyBAQAogICAgIHRlcm1zIG9mIDpkYXRhOmBzeXMucGF0aGAuIE5vIGltcGxpY2l0IHBhdGggaG9va3MgYXJlIGFzc3VtZWQgZm9yCiAgICAgc2ltcGxpZmljYXRpb24gb2YgdGhlIGNsYXNzIGFuZCBpdHMgc2VtYW50aWNzLgogCi0gICAgT25seSBjbGFzcyBtZXRob2QgYXJlIGRlZmluZWQgYnkgdGhpcyBjbGFzcyB0byBhbGxldmlhdGUgdGhlIG5lZWQgZm9yCisgICAgT25seSBjbGFzcyBtZXRob2RzIGFyZSBkZWZpbmVkIGJ5IHRoaXMgY2xhc3MgdG8gYWxsZXZpYXRlIHRoZSBuZWVkIGZvcgogICAgIGluc3RhbnRpYXRpb24uCiAKICAgICAuLiBjbGFzc21ldGhvZDo6IGZpbmRfbW9kdWxlKGZ1bGxuYW1lLCBwYXRoPU5vbmUpCkBAIC0zMjUsNyArNDU3LDcgQEAKICAgICAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCwgdGhlbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGlzCiAgICAgICAgIHNlYXJjaGVkIGZvciBhIGZpbmRlciBmb3IgdGhlIHBhdGggZW50cnkgYW5kLCBpZiBmb3VuZCwgaXMgc3RvcmVkIGluCiAgICAgICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYWxvbmcgd2l0aCBiZWluZyBxdWVyaWVkIGFib3V0IHRoZQotICAgICAgICBtb2R1bGUuIElmIG5vIGZpbmRlciBpcyBldmVyIGZvdW5kIHRoZW4gOmtleXdvcmQ6YE5vbmVgIGlzIHJldHVybmVkLgorICAgICAgICBtb2R1bGUuIElmIG5vIGZpbmRlciBpcyBldmVyIGZvdW5kIHRoZW4gYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKIAogOm1vZDpgaW1wb3J0bGliLnV0aWxgIC0tIFV0aWxpdHkgY29kZSBmb3IgaW1wb3J0ZXJzCkBAIC0zMzcsNyArNDY5LDcgQEAKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSB2YXJpb3VzIG9iamVjdHMgdGhhdCBoZWxwIGluIHRoZSBjb25zdHJ1Y3Rpb24gb2YKIGFuIDp0ZXJtOmBpbXBvcnRlcmAuCiAKLS4uIGZ1bmN0aW9uOjogbW9kdWxlX2Zvcl9sb2FkZXIobWV0aG9kKQorLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAogICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAogICAgIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlcgpAQCAtMzYyLDcgKzQ5NCw3IEBACiAgICAgVXNlIG9mIHRoaXMgZGVjb3JhdG9yIGhhbmRsZXMgYWxsIHRoZSBkZXRhaWxzIG9mIHdoaWNoIG1vZHVsZSBvYmplY3QgYQogICAgIGxvYWRlciBzaG91bGQgaW5pdGlhbGl6ZSBhcyBzcGVjaWZpZWQgYnkgOnBlcDpgMzAyYC4KIAotLi4gZnVuY3Rpb246OiBzZXRfbG9hZGVyKGZ4bikKKy4uIGRlY29yYXRvcjo6IHNldF9sb2FkZXIKIAogICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAogICAgIHRvIHNldCB0aGUgOmF0dHI6YF9fbG9hZGVyX19gCkBAIC0zNzAsMTEgKzUwMiwxMSBAQAogICAgIGRvZXMgbm90aGluZy4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IHRvIHRoZQogICAgIHdyYXBwZWQgbWV0aG9kIGlzIHdoYXQgOmF0dHI6YF9fbG9hZGVyX19gIHNob3VsZCBiZSBzZXQgdG8uCiAKLS4uIGZ1bmN0aW9uOjogc2V0X3BhY2thZ2UoZnhuKQorLi4gZGVjb3JhdG9yOjogc2V0X3BhY2thZ2UKIAogICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgdG8gc2V0IHRoZSA6YXR0cjpgX19wYWNrYWdlX19gCiAgICAgYXR0cmlidXRlIG9uIHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlci4gSWYgOmF0dHI6YF9fcGFja2FnZV9fYCBpcwotICAgIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiA6a2V5d29yZDpgTm9uZWAgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4KKyAgICBzZXQgYW5kIGhhcyBhIHZhbHVlIG90aGVyIHRoYW4gYGBOb25lYGAgaXQgd2lsbCBub3QgYmUgY2hhbmdlZC4KICAgICBOb3RlIHRoYXQgdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyIGlzIHdoYXQgaGFzIHRoZSBhdHRyaWJ1dGUKICAgICBzZXQgb24gYW5kIG5vdCB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKQEAgLTM4NCwxMDAgKzUxNiwzIEBACiAgICAgYXR0cmlidXRlIHRvIGJlIHVzZWQgYXQgdGhlIGdsb2JhbCBsZXZlbCBvZiB0aGUgbW9kdWxlIGR1cmluZwogICAgIGluaXRpYWxpemF0aW9uLgogCi0KLUV4YW1wbGUKLS0tLS0tLS0KLQotQmVsb3cgaXMgYW4gZXhhbXBsZSBtZXRhIHBhdGggaW1wb3J0ZXIgdGhhdCB1c2VzIGEgZGljdCBmb3IgYmFjay1lbmQgc3RvcmFnZQotZm9yIHNvdXJjZSBjb2RlLiBXaGlsZSBub3QgYW4gb3B0aW1hbCBzb2x1dGlvbiAtLSBtYW5pcHVsYXRpb25zIG9mCi06YXR0cjpgX19wYXRoX19gIG9uIHBhY2thZ2VzIGRvZXMgbm90IGluZmx1ZW5jZSBpbXBvcnQgLS0gaXQgZG9lcyBpbGx1c3RyYXRlCi13aGF0IGxpdHRsZSBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgYW4gaW1wb3J0ZXIuCi0KLS4uIHRlc3Rjb2RlOjoKLQotICAgICIiIkFuIGltcG9ydGVyIHdoZXJlIHNvdXJjZSBpcyBzdG9yZWQgaW4gYSBkaWN0LiIiIgotICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBhYmMKLQotCi0gICAgY2xhc3MgRGljdEltcG9ydGVyKGFiYy5GaW5kZXIsIGFiYy5QeUxvYWRlcik6Ci0KLSAgICAgICAgIiIiQSBtZXRhIHBhdGggaW1wb3J0ZXIgdGhhdCBzdG9yZXMgc291cmNlIGNvZGUgaW4gYSBkaWN0LgotCi0gICAgICAgIFRoZSBrZXlzIGFyZSB0aGUgbW9kdWxlIG5hbWVzIC0tIHBhY2thZ2VzIG11c3QgZW5kIGluIGBgLl9faW5pdF9fYGAuCi0gICAgICAgIFRoZSB2YWx1ZXMgbXVzdCBiZSBzb21ldGhpbmcgdGhhdCBjYW4gYmUgcGFzc2VkIHRvICdieXRlcycuCi0KLSAgICAgICAgIiIiCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbW9yeSk6Ci0gICAgICAgICAgICAiIiJTdG9yZSB0aGUgZGljdC4iIiIKLSAgICAgICAgICAgIHNlbGYubWVtb3J5ID0gbWVtb3J5Ci0KLSAgICAgICAgZGVmIGNvbnRhaW5zKHNlbGYsIG5hbWUpOgotICAgICAgICAgICAgIiIiU2VlIGlmIGEgbW9kdWxlIG9yIHBhY2thZ2UgaXMgaW4gdGhlIGRpY3QuIiIiCi0gICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYubWVtb3J5OgotICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCi0gICAgICAgICAgICBwYWNrYWdlX25hbWUgPSAne30uX19pbml0X18nLmZvcm1hdChuYW1lKQotICAgICAgICAgICAgaWYgIHBhY2thZ2VfbmFtZSBpbiBzZWxmLm1lbW9yeToKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFja2FnZV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBfX2NvbnRhaW5zX18gPSBjb250YWlucyAgIyBDb252ZW5pZW5jZS4KLQotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICAgICAiIiJGaW5kIHRoZSBtb2R1bGUgaW4gdGhlIGRpY3QuIiIiCi0gICAgICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAiIiJSZXR1cm4gdGhlIG1vZHVsZSBuYW1lIGlmIHRoZSBtb2R1bGUgaXMgaW4gdGhlIGRpY3QuIiIiCi0gICAgICAgICAgICBpZiBub3QgZnVsbG5hbWUgaW4gc2VsZjoKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICAgICAgcmV0dXJuIGZ1bGxuYW1lCi0KLSAgICAgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgotICAgICAgICAgICAgIiIiUmV0dXJuIHRoZSBieXRlcyBmb3IgdGhlIHNvdXJjZS4KLQotICAgICAgICAgICAgVGhlIHZhbHVlIGZvdW5kIGluIHRoZSBkaWN0IGlzIHBhc3NlZCB0aHJvdWdoICdieXRlcycgYmVmb3JlIGJlaW5nCi0gICAgICAgICAgICByZXR1cm5lZC4KLQotICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICBuYW1lID0gc2VsZi5jb250YWlucyhwYXRoKQotICAgICAgICAgICAgaWYgbm90IG5hbWU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICAgICAgcmV0dXJuIGJ5dGVzKHNlbGYubWVtb3J5W25hbWVdKQotCi0gICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICIiIlRlbGwgaWYgbW9kdWxlIGlzIGEgcGFja2FnZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBkaWN0IGNvbnRhaW5zIHRoZQotICAgICAgICAgICAgbmFtZSB3aXRoIGBgLl9faW5pdF9fYGAgYXBwZW5kZWQgdG8gaXQuIiIiCi0gICAgICAgICAgICBpZiBmdWxsbmFtZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5tZW1vcnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICAjIElmIG5hbWUgaXMgaW4gdGhpcyBpbXBvcnRlciBidXQgbm90IGFzIGl0IGlzIHRoZW4gaXQgbXVzdCBlbmQgaW4KLSAgICAgICAgICAgICMgYGBfX2luaXRfX2BgLgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0uLiB0ZXN0Y29kZTo6Ci0gICAgOmhpZGU6Ci0KLSAgICBpbXBvcnQgaW1wb3J0bGliCi0gICAgaW1wb3J0IHN5cwotCi0KLSAgICAjIEJ1aWxkIHRoZSBkaWN0OyBrZXlzIG9mIG5hbWUsIHZhbHVlIG9mIF9fcGFja2FnZV9fLgotICAgIG5hbWVzID0geydfdG9wX2xldmVsJzogJycsICdfcGtnLl9faW5pdF9fJzogJ19wa2cnLCAnX3BrZy5tb2QnOiAnX3BrZyd9Ci0gICAgc291cmNlID0ge25hbWU6ICJuYW1lID0geyFyfSIuZm9ybWF0KG5hbWUpLmVuY29kZSgpIGZvciBuYW1lIGluIG5hbWVzfQotCi0gICAgIyBSZWdpc3RlciB0aGUgbWV0YSBwYXRoIGltcG9ydGVyLgotICAgIGltcG9ydGVyID0gRGljdEltcG9ydGVyKHNvdXJjZSkKLSAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpbXBvcnRlcikKLQotICAgICMgU2FuaXR5IGNoZWNrLgotICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lKQotICAgICAgICBhc3NlcnQgbW9kdWxlLl9fbmFtZV9fID09IG5hbWUKLSAgICAgICAgYXNzZXJ0IGdldGF0dHIobW9kdWxlLCAnbmFtZScpID09IG5hbWUKLSAgICAgICAgYXNzZXJ0IG1vZHVsZS5fX2xvYWRlcl9fIGlzIGltcG9ydGVyCi0gICAgICAgIGFzc2VydCBtb2R1bGUuX19wYWNrYWdlX18gPT0gbmFtZXNbbmFtZV0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luZGV4LnJzdCBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdAppbmRleCBhYTU4MmRlLi45YWM2ODhjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5kZXgucnN0CkBAIC00MywxMyArNDMsMTMgQEAKICAgIGludHJvLnJzdAogICAgZnVuY3Rpb25zLnJzdAogICAgY29uc3RhbnRzLnJzdAotICAgb2JqZWN0cy5yc3QKICAgIHN0ZHR5cGVzLnJzdAogICAgZXhjZXB0aW9ucy5yc3QKIAogICAgc3RyaW5ncy5yc3QKICAgIGRhdGF0eXBlcy5yc3QKICAgIG51bWVyaWMucnN0CisgICBmdW5jdGlvbmFsLnJzdAogICAgZmlsZXN5cy5yc3QKICAgIHBlcnNpc3RlbmNlLnJzdAogICAgYXJjaGl2aW5nLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAppbmRleCA0ZGVmMjg2Li43YTU3YTBkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnNwZWN0LnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEthLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogS2EtUGluZyBZZWUgPHBpbmdAbGZ3Lm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvaW5zcGVjdC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBwcm92aWRlcyBzZXZlcmFsIHVzZWZ1bCBmdW5jdGlvbnMgdG8gaGVscCBnZXQKIGluZm9ybWF0aW9uIGFib3V0IGxpdmUgb2JqZWN0cyBzdWNoIGFzIG1vZHVsZXMsIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywKQEAgLTg3LDcgKzkwLDcgQEAKIHwgZnJhbWUgICAgIHwgZl9iYWNrICAgICAgICAgIHwgbmV4dCBvdXRlciBmcmFtZSBvYmplY3QgICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICh0aGlzIGZyYW1lJ3MgY2FsbGVyKSAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgICAgICAgICAgIHwgZl9idWlsdGlucyAgICAgIHwgYnVpbHQtaW4gbmFtZXNwYWNlIHNlZW4gICB8Cit8ICAgICAgICAgICB8IGZfYnVpbHRpbnMgICAgICB8IGJ1aWx0aW5zIG5hbWVzcGFjZSBzZWVuICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBieSB0aGlzIGZyYW1lICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IGZfY29kZSAgICAgICAgICB8IGNvZGUgb2JqZWN0IGJlaW5nICAgICAgICAgfApAQCAtMjk1LDcgKzI5OCw3IEBACiAgICAuLiBpbXBsLWRldGFpbDo6CiAKICAgICAgIGdldHNldHMgYXJlIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiBleHRlbnNpb24gbW9kdWxlcyB2aWEKLSAgICAgIDpjdHlwZTpgUHlHZXRTZXREZWZgIHN0cnVjdHVyZXMuICBGb3IgUHl0aG9uIGltcGxlbWVudGF0aW9ucyB3aXRob3V0IHN1Y2gKKyAgICAgIDpjOnR5cGU6YFB5R2V0U2V0RGVmYCBzdHJ1Y3R1cmVzLiAgRm9yIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgd2l0aG91dCBzdWNoCiAgICAgICB0eXBlcywgdGhpcyBtZXRob2Qgd2lsbCBhbHdheXMgcmV0dXJuIGBgRmFsc2VgYC4KIAogCkBAIC0zMDYsNyArMzA5LDcgQEAKICAgIC4uIGltcGwtZGV0YWlsOjoKIAogICAgICAgTWVtYmVyIGRlc2NyaXB0b3JzIGFyZSBhdHRyaWJ1dGVzIGRlZmluZWQgaW4gZXh0ZW5zaW9uIG1vZHVsZXMgdmlhCi0gICAgICA6Y3R5cGU6YFB5TWVtYmVyRGVmYCBzdHJ1Y3R1cmVzLiAgRm9yIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgd2l0aG91dCBzdWNoCisgICAgICA6Yzp0eXBlOmBQeU1lbWJlckRlZmAgc3RydWN0dXJlcy4gIEZvciBQeXRob24gaW1wbGVtZW50YXRpb25zIHdpdGhvdXQgc3VjaAogICAgICAgdHlwZXMsIHRoaXMgbWV0aG9kIHdpbGwgYWx3YXlzIHJldHVybiBgYEZhbHNlYGAuCiAKIApAQCAtNDUxLDYgKzQ1NCwzMiBAQAogICAgbWV0YXR5cGUgaXMgaW4gdXNlLCBjbHMgd2lsbCBiZSB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHVwbGUuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRjYWxsYXJncyhmdW5jWywgKmFyZ3NdWywgKiprd2RzXSkKKworICAgQmluZCB0aGUgKmFyZ3MqIGFuZCAqa3dkcyogdG8gdGhlIGFyZ3VtZW50IG5hbWVzIG9mIHRoZSBQeXRob24gZnVuY3Rpb24gb3IKKyAgIG1ldGhvZCAqZnVuYyosIGFzIGlmIGl0IHdhcyBjYWxsZWQgd2l0aCB0aGVtLiBGb3IgYm91bmQgbWV0aG9kcywgYmluZCBhbHNvIHRoZQorICAgZmlyc3QgYXJndW1lbnQgKHR5cGljYWxseSBuYW1lZCBgYHNlbGZgYCkgdG8gdGhlIGFzc29jaWF0ZWQgaW5zdGFuY2UuIEEgZGljdAorICAgaXMgcmV0dXJuZWQsIG1hcHBpbmcgdGhlIGFyZ3VtZW50IG5hbWVzIChpbmNsdWRpbmcgdGhlIG5hbWVzIG9mIHRoZSBgYCpgYCBhbmQKKyAgIGBgKipgYCBhcmd1bWVudHMsIGlmIGFueSkgdG8gdGhlaXIgdmFsdWVzIGZyb20gKmFyZ3MqIGFuZCAqa3dkcyouIEluIGNhc2Ugb2YKKyAgIGludm9raW5nICpmdW5jKiBpbmNvcnJlY3RseSwgaS5lLiB3aGVuZXZlciBgYGZ1bmMoKmFyZ3MsICoqa3dkcylgYCB3b3VsZCByYWlzZQorICAgYW4gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgaW5jb21wYXRpYmxlIHNpZ25hdHVyZSwgYW4gZXhjZXB0aW9uIG9mIHRoZSBzYW1lIHR5cGUKKyAgIGFuZCB0aGUgc2FtZSBvciBzaW1pbGFyIG1lc3NhZ2UgaXMgcmFpc2VkLiBGb3IgZXhhbXBsZTo6CisKKyAgICA+Pj4gZnJvbSBpbnNwZWN0IGltcG9ydCBnZXRjYWxsYXJncworICAgID4+PiBkZWYgZihhLCBiPTEsICpwb3MsICoqbmFtZWQpOgorICAgIC4uLiAgICAgcGFzcworICAgID4+PiBnZXRjYWxsYXJncyhmLCAxLCAyLCAzKQorICAgIHsnYSc6IDEsICduYW1lZCc6IHt9LCAnYic6IDIsICdwb3MnOiAoMywpfQorICAgID4+PiBnZXRjYWxsYXJncyhmLCBhPTIsIHg9NCkKKyAgICB7J2EnOiAyLCAnbmFtZWQnOiB7J3gnOiA0fSwgJ2InOiAxLCAncG9zJzogKCl9CisgICAgPj4+IGdldGNhbGxhcmdzKGYpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFR5cGVFcnJvcjogZigpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIF9pbnNwZWN0LXN0YWNrOgogCiBUaGUgaW50ZXJwcmV0ZXIgc3RhY2sKQEAgLTUzNiwzICs1NjUsODEgQEAKICAgIGVudHJ5IGluIHRoZSBsaXN0IHJlcHJlc2VudHMgdGhlIGNhbGxlcjsgdGhlIGxhc3QgZW50cnkgcmVwcmVzZW50cyB3aGVyZSB0aGUKICAgIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgogCisKK0ZldGNoaW5nIGF0dHJpYnV0ZXMgc3RhdGljYWxseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JvdGggOmZ1bmM6YGdldGF0dHJgIGFuZCA6ZnVuYzpgaGFzYXR0cmAgY2FuIHRyaWdnZXIgY29kZSBleGVjdXRpb24gd2hlbgorZmV0Y2hpbmcgb3IgY2hlY2tpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYXR0cmlidXRlcy4gRGVzY3JpcHRvcnMsIGxpa2UKK3Byb3BlcnRpZXMsIHdpbGwgYmUgaW52b2tlZCBhbmQgOm1ldGg6YF9fZ2V0YXR0cl9fYCBhbmQgOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gCittYXkgYmUgY2FsbGVkLgorCitGb3IgY2FzZXMgd2hlcmUgeW91IHdhbnQgcGFzc2l2ZSBpbnRyb3NwZWN0aW9uLCBsaWtlIGRvY3VtZW50YXRpb24gdG9vbHMsIHRoaXMKK2NhbiBiZSBpbmNvbnZlbmllbnQuIGBnZXRhdHRyX3N0YXRpY2AgaGFzIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyA6ZnVuYzpgZ2V0YXR0cmAKK2J1dCBhdm9pZHMgZXhlY3V0aW5nIGNvZGUgd2hlbiBpdCBmZXRjaGVzIGF0dHJpYnV0ZXMuCisKKy4uIGZ1bmN0aW9uOjogZ2V0YXR0cl9zdGF0aWMob2JqLCBhdHRyLCBkZWZhdWx0PU5vbmUpCisKKyAgIFJldHJpZXZlIGF0dHJpYnV0ZXMgd2l0aG91dCB0cmlnZ2VyaW5nIGR5bmFtaWMgbG9va3VwIHZpYSB0aGUKKyAgIGRlc2NyaXB0b3IgcHJvdG9jb2wsIGBfX2dldGF0dHJfX2Agb3IgYF9fZ2V0YXR0cmlidXRlX19gLgorCisgICBOb3RlOiB0aGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgYWJsZSB0byByZXRyaWV2ZSBhbGwgYXR0cmlidXRlcworICAgdGhhdCBnZXRhdHRyIGNhbiBmZXRjaCAobGlrZSBkeW5hbWljYWxseSBjcmVhdGVkIGF0dHJpYnV0ZXMpCisgICBhbmQgbWF5IGZpbmQgYXR0cmlidXRlcyB0aGF0IGdldGF0dHIgY2FuJ3QgKGxpa2UgZGVzY3JpcHRvcnMKKyAgIHRoYXQgcmFpc2UgQXR0cmlidXRlRXJyb3IpLiBJdCBjYW4gYWxzbyByZXR1cm4gZGVzY3JpcHRvcnMgb2JqZWN0cworICAgaW5zdGVhZCBvZiBpbnN0YW5jZSBtZW1iZXJzLgorCisgICBJZiB0aGUgaW5zdGFuY2UgYF9fZGljdF9fYCBpcyBzaGFkb3dlZCBieSBhbm90aGVyIG1lbWJlciAoZm9yIGV4YW1wbGUgYQorICAgcHJvcGVydHkpIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVuYWJsZSB0byBmaW5kIGluc3RhbmNlIG1lbWJlcnMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCitgZ2V0YXR0cl9zdGF0aWNgIGRvZXMgbm90IHJlc29sdmUgZGVzY3JpcHRvcnMsIGZvciBleGFtcGxlIHNsb3QgZGVzY3JpcHRvcnMgb3IKK2dldHNldCBkZXNjcmlwdG9ycyBvbiBvYmplY3RzIGltcGxlbWVudGVkIGluIEMuIFRoZSBkZXNjcmlwdG9yIG9iamVjdAoraXMgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUgdW5kZXJseWluZyBhdHRyaWJ1dGUuCisKK1lvdSBjYW4gaGFuZGxlIHRoZXNlIHdpdGggY29kZSBsaWtlIHRoZSBmb2xsb3dpbmcuIE5vdGUgdGhhdAorZm9yIGFyYml0cmFyeSBnZXRzZXQgZGVzY3JpcHRvcnMgaW52b2tpbmcgdGhlc2UgbWF5IHRyaWdnZXIKK2NvZGUgZXhlY3V0aW9uOjoKKworICAgIyBleGFtcGxlIGNvZGUgZm9yIHJlc29sdmluZyB0aGUgYnVpbHRpbiBkZXNjcmlwdG9yIHR5cGVzCisgICBjbGFzcyBfZm9vOgorICAgICAgIF9fc2xvdHNfXyA9IFsnZm9vJ10KKworICAgc2xvdF9kZXNjcmlwdG9yID0gdHlwZShfZm9vLmZvbykKKyAgIGdldHNldF9kZXNjcmlwdG9yID0gdHlwZSh0eXBlKG9wZW4oX19maWxlX18pKS5uYW1lKQorICAgd3JhcHBlcl9kZXNjcmlwdG9yID0gdHlwZShzdHIuX19kaWN0X19bJ19fYWRkX18nXSkKKyAgIGRlc2NyaXB0b3JfdHlwZXMgPSAoc2xvdF9kZXNjcmlwdG9yLCBnZXRzZXRfZGVzY3JpcHRvciwgd3JhcHBlcl9kZXNjcmlwdG9yKQorCisgICByZXN1bHQgPSBnZXRhdHRyX3N0YXRpYyhzb21lX29iamVjdCwgJ2ZvbycpCisgICBpZiB0eXBlKHJlc3VsdCkgaW4gZGVzY3JpcHRvcl90eXBlczoKKyAgICAgICB0cnk6CisgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5fX2dldF9fKCkKKyAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICMgZGVzY3JpcHRvcnMgY2FuIHJhaXNlIEF0dHJpYnV0ZUVycm9yIHRvCisgICAgICAgICAgICMgaW5kaWNhdGUgdGhlcmUgaXMgbm8gdW5kZXJseWluZyB2YWx1ZQorICAgICAgICAgICAjIGluIHdoaWNoIGNhc2UgdGhlIGRlc2NyaXB0b3IgaXRzZWxmIHdpbGwKKyAgICAgICAgICAgIyBoYXZlIHRvIGRvCisgICAgICAgICAgIHBhc3MKKworCitDdXJyZW50IFN0YXRlIG9mIGEgR2VuZXJhdG9yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4gaW1wbGVtZW50aW5nIGNvcm91dGluZSBzY2hlZHVsZXJzIGFuZCBmb3Igb3RoZXIgYWR2YW5jZWQgdXNlcyBvZgorZ2VuZXJhdG9ycywgaXQgaXMgdXNlZnVsIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZ2VuZXJhdG9yIGlzIGN1cnJlbnRseQorZXhlY3V0aW5nLCBpcyB3YWl0aW5nIHRvIHN0YXJ0IG9yIHJlc3VtZSBvciBleGVjdXRpb24sIG9yIGhhcyBhbHJlYWR5Cit0ZXJtaW5hdGVkLiA6ZnVuYzpgZ2V0Z2VuZXJhdG9yc3RhdGVgIGFsbG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhCitnZW5lcmF0b3IgdG8gYmUgZGV0ZXJtaW5lZCBlYXNpbHkuCisKKy4uIGZ1bmN0aW9uOjogZ2V0Z2VuZXJhdG9yc3RhdGUoZ2VuZXJhdG9yKQorCisgICBHZXQgY3VycmVudCBzdGF0ZSBvZiBhIGdlbmVyYXRvci1pdGVyYXRvci4KKworICAgUG9zc2libGUgc3RhdGVzIGFyZToKKyAgICAqIEdFTl9DUkVBVEVEOiBXYWl0aW5nIHRvIHN0YXJ0IGV4ZWN1dGlvbi4KKyAgICAqIEdFTl9SVU5OSU5HOiBDdXJyZW50bHkgYmVpbmcgZXhlY3V0ZWQgYnkgdGhlIGludGVycHJldGVyLgorICAgICogR0VOX1NVU1BFTkRFRDogQ3VycmVudGx5IHN1c3BlbmRlZCBhdCBhIHlpZWxkIGV4cHJlc3Npb24uCisgICAgKiBHRU5fQ0xPU0VEOiBFeGVjdXRpb24gaGFzIGNvbXBsZXRlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pby5yc3QgYi9Eb2MvbGlicmFyeS9pby5yc3QKaW5kZXggYmJlNTExMi4uMDU4NGI3MCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW8ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lvLnJzdApAQCAtNTEzLDYgKzUxMywyNCBAQAogICAgOmNsYXNzOmBCeXRlc0lPYCBwcm92aWRlcyBvciBvdmVycmlkZXMgdGhlc2UgbWV0aG9kcyBpbiBhZGRpdGlvbiB0byB0aG9zZQogICAgZnJvbSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYCBhbmQgOmNsYXNzOmBJT0Jhc2VgOgogCisgICAuLiBtZXRob2Q6OiBnZXRidWZmZXIoKQorCisgICAgICBSZXR1cm4gYSByZWFkYWJsZSBhbmQgd3JpdGFibGUgdmlldyBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyCisgICAgICB3aXRob3V0IGNvcHlpbmcgdGhlbS4gIEFsc28sIG11dGF0aW5nIHRoZSB2aWV3IHdpbGwgdHJhbnNwYXJlbnRseQorICAgICAgdXBkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyOjoKKworICAgICAgICAgPj4+IGIgPSBpby5CeXRlc0lPKGIiYWJjZGVmIikKKyAgICAgICAgID4+PiB2aWV3ID0gYi5nZXRidWZmZXIoKQorICAgICAgICAgPj4+IHZpZXdbMjo0XSA9IGIiNTYiCisgICAgICAgICA+Pj4gYi5nZXR2YWx1ZSgpCisgICAgICAgICBiJ2FiNTZlZicKKworICAgICAgLi4gbm90ZTo6CisgICAgICAgICBBcyBsb25nIGFzIHRoZSB2aWV3IGV4aXN0cywgdGhlIDpjbGFzczpgQnl0ZXNJT2Agb2JqZWN0IGNhbm5vdCBiZQorICAgICAgICAgcmVzaXplZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKICAgIC4uIG1ldGhvZDo6IGdldHZhbHVlKCkKIAogICAgICAgUmV0dXJuIGBgYnl0ZXNgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KQEAgLTc2NywzNyArNzg1LDMzIEBACiAgICBpbmhlcml0cyA6Y2xhc3M6YGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXJgLgogCiAKLUFkdmFuY2VkIHRvcGljcwotLS0tLS0tLS0tLS0tLS0tCi0KLUhlcmUgd2Ugd2lsbCBkaXNjdXNzIHNldmVyYWwgYWR2YW5jZWQgdG9waWNzIHBlcnRhaW5pbmcgdG8gdGhlIGNvbmNyZXRlCi1JL08gaW1wbGVtZW50YXRpb25zIGRlc2NyaWJlZCBhYm92ZS4KLQogUGVyZm9ybWFuY2UKLV5eXl5eXl5eXl5eCistLS0tLS0tLS0tLQorCitUaGlzIHNlY3Rpb24gZGlzY3Vzc2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcHJvdmlkZWQgY29uY3JldGUgSS9PCitpbXBsZW1lbnRhdGlvbnMuCiAKIEJpbmFyeSBJL08KLSIiIiIiIiIiIiIKK15eXl5eXl5eXl4KIAotQnkgcmVhZGluZyBhbmQgd3JpdGluZyBvbmx5IGxhcmdlIGNodW5rcyBvZiBkYXRhIGV2ZW4gd2hlbiB0aGUgdXNlciBhc2tzCi1mb3IgYSBzaW5nbGUgYnl0ZSwgYnVmZmVyZWQgSS9PIGlzIGRlc2lnbmVkIHRvIGhpZGUgYW55IGluZWZmaWNpZW5jeSBpbgotY2FsbGluZyBhbmQgZXhlY3V0aW5nIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgdW5idWZmZXJlZCBJL08gcm91dGluZXMuICBUaGUKLWdhaW4gd2lsbCB2YXJ5IHZlcnkgbXVjaCBkZXBlbmRpbmcgb24gdGhlIE9TIGFuZCB0aGUga2luZCBvZiBJL08gd2hpY2ggaXMKLXBlcmZvcm1lZCAoZm9yIGV4YW1wbGUsIG9uIHNvbWUgY29udGVtcG9yYXJ5IE9TZXMgc3VjaCBhcyBMaW51eCwgdW5idWZmZXJlZAotZGlzayBJL08gY2FuIGJlIGFzIGZhc3QgYXMgYnVmZmVyZWQgSS9PKS4gIFRoZSBib3R0b20gbGluZSwgaG93ZXZlciwgaXMKLXRoYXQgYnVmZmVyZWQgSS9PIHdpbGwgb2ZmZXIgeW91IHByZWRpY3RhYmxlIHBlcmZvcm1hbmNlIHJlZ2FyZGxlc3Mgb2YgdGhlCi1wbGF0Zm9ybSBhbmQgdGhlIGJhY2tpbmcgZGV2aWNlLiAgVGhlcmVmb3JlLCBpdCBpcyBtb3N0IGFsd2F5cyBwcmVmZXJhYmxlIHRvCi11c2UgYnVmZmVyZWQgSS9PIHJhdGhlciB0aGFuIHVuYnVmZmVyZWQgSS9PLgorQnkgcmVhZGluZyBhbmQgd3JpdGluZyBvbmx5IGxhcmdlIGNodW5rcyBvZiBkYXRhIGV2ZW4gd2hlbiB0aGUgdXNlciBhc2tzIGZvciBhCitzaW5nbGUgYnl0ZSwgYnVmZmVyZWQgSS9PIGhpZGVzIGFueSBpbmVmZmljaWVuY3kgaW4gY2FsbGluZyBhbmQgZXhlY3V0aW5nIHRoZQorb3BlcmF0aW5nIHN5c3RlbSdzIHVuYnVmZmVyZWQgSS9PIHJvdXRpbmVzLiAgVGhlIGdhaW4gZGVwZW5kcyBvbiB0aGUgT1MgYW5kIHRoZQora2luZCBvZiBJL08gd2hpY2ggaXMgcGVyZm9ybWVkLiAgRm9yIGV4YW1wbGUsIG9uIHNvbWUgbW9kZXJuIE9TZXMgc3VjaCBhcyBMaW51eCwKK3VuYnVmZmVyZWQgZGlzayBJL08gY2FuIGJlIGFzIGZhc3QgYXMgYnVmZmVyZWQgSS9PLiAgVGhlIGJvdHRvbSBsaW5lLCBob3dldmVyLAoraXMgdGhhdCBidWZmZXJlZCBJL08gb2ZmZXJzIHByZWRpY3RhYmxlIHBlcmZvcm1hbmNlIHJlZ2FyZGxlc3Mgb2YgdGhlIHBsYXRmb3JtCithbmQgdGhlIGJhY2tpbmcgZGV2aWNlLiAgVGhlcmVmb3JlLCBpdCBpcyBtb3N0IGFsd2F5cyBwcmVmZXJhYmxlIHRvIHVzZSBidWZmZXJlZAorSS9PIHJhdGhlciB0aGFuIHVuYnVmZmVyZWQgSS9PIGZvciBiaW5hcnkgZGF0YWwKIAogVGV4dCBJL08KLSIiIiIiIiIiCiteXl5eXl5eXgogCiBUZXh0IEkvTyBvdmVyIGEgYmluYXJ5IHN0b3JhZ2UgKHN1Y2ggYXMgYSBmaWxlKSBpcyBzaWduaWZpY2FudGx5IHNsb3dlciB0aGFuCi1iaW5hcnkgSS9PIG92ZXIgdGhlIHNhbWUgc3RvcmFnZSwgYmVjYXVzZSBpdCBpbXBsaWVzIGNvbnZlcnNpb25zIGZyb20KLXVuaWNvZGUgdG8gYmluYXJ5IGRhdGEgdXNpbmcgYSBjaGFyYWN0ZXIgY29kZWMuICBUaGlzIGNhbiBiZWNvbWUgbm90aWNlYWJsZQotaWYgeW91IGhhbmRsZSBodWdlIGFtb3VudHMgb2YgdGV4dCBkYXRhIChmb3IgZXhhbXBsZSB2ZXJ5IGxhcmdlIGxvZyBmaWxlcykuCi1BbHNvLCA6bWV0aDpgVGV4dElPV3JhcHBlci50ZWxsYCBhbmQgOm1ldGg6YFRleHRJT1dyYXBwZXIuc2Vla2AgYXJlIGJvdGgKLXF1aXRlIHNsb3cgZHVlIHRvIHRoZSByZWNvbnN0cnVjdGlvbiBhbGdvcml0aG0gdXNlZC4KK2JpbmFyeSBJL08gb3ZlciB0aGUgc2FtZSBzdG9yYWdlLCBiZWNhdXNlIGl0IHJlcXVpcmVzIGNvbnZlcnNpb25zIGJldHdlZW4KK3VuaWNvZGUgYW5kIGJpbmFyeSBkYXRhIHVzaW5nIGEgY2hhcmFjdGVyIGNvZGVjLiAgVGhpcyBjYW4gYmVjb21lIG5vdGljZWFibGUKK2hhbmRsaW5nIGh1Z2UgYW1vdW50cyBvZiB0ZXh0IGRhdGEgbGlrZSBsYXJnZSBsb2cgZmlsZXMuICBBbHNvLAorOm1ldGg6YFRleHRJT1dyYXBwZXIudGVsbGAgYW5kIDptZXRoOmBUZXh0SU9XcmFwcGVyLnNlZWtgIGFyZSBib3RoIHF1aXRlIHNsb3cKK2R1ZSB0byB0aGUgcmVjb25zdHJ1Y3Rpb24gYWxnb3JpdGhtIHVzZWQuCiAKIDpjbGFzczpgU3RyaW5nSU9gLCBob3dldmVyLCBpcyBhIG5hdGl2ZSBpbi1tZW1vcnkgdW5pY29kZSBjb250YWluZXIgYW5kIHdpbGwKIGV4aGliaXQgc2ltaWxhciBzcGVlZCB0byA6Y2xhc3M6YEJ5dGVzSU9gLgpAQCAtODA1LDkgKzgxOSw4IEBACiBNdWx0aS10aHJlYWRpbmcKIF5eXl5eXl5eXl5eXl5eXgogCi06Y2xhc3M6YEZpbGVJT2Agb2JqZWN0cyBhcmUgdGhyZWFkLXNhZmUgdG8gdGhlIGV4dGVudCB0aGF0IHRoZSBvcGVyYXRpbmcKLXN5c3RlbSBjYWxscyAoc3VjaCBhcyBgYHJlYWQoMilgYCB1bmRlciBVbml4KSB0aGV5IGFyZSB3cmFwcGluZyBhcmUgdGhyZWFkLXNhZmUKLXRvby4KKzpjbGFzczpgRmlsZUlPYCBvYmplY3RzIGFyZSB0aHJlYWQtc2FmZSB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIG9wZXJhdGluZyBzeXN0ZW0KK2NhbGxzIChzdWNoIGFzIGBgcmVhZCgyKWBgIHVuZGVyIFVuaXgpIHRoZXkgd3JhcCBhcmUgdGhyZWFkLXNhZmUgdG9vLgogCiBCaW5hcnkgYnVmZmVyZWQgb2JqZWN0cyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgLAogOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAsIDpjbGFzczpgQnVmZmVyZWRSYW5kb21gIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkUldQYWlyYCkKQEAgLTgyMiwxMiArODM1LDEzIEBACiBCaW5hcnkgYnVmZmVyZWQgb2JqZWN0cyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgLAogOmNsYXNzOmBCdWZmZXJlZFdyaXRlcmAsIDpjbGFzczpgQnVmZmVyZWRSYW5kb21gIGFuZCA6Y2xhc3M6YEJ1ZmZlcmVkUldQYWlyYCkKIGFyZSBub3QgcmVlbnRyYW50LiAgV2hpbGUgcmVlbnRyYW50IGNhbGxzIHdpbGwgbm90IGhhcHBlbiBpbiBub3JtYWwgc2l0dWF0aW9ucywKLXRoZXkgY2FuIGFyaXNlIGlmIHlvdSBhcmUgZG9pbmcgSS9PIGluIGEgOm1vZDpgc2lnbmFsYCBoYW5kbGVyLiAgSWYgaXQgaXMKLWF0dGVtcHRlZCB0byBlbnRlciBhIGJ1ZmZlcmVkIG9iamVjdCBhZ2FpbiB3aGlsZSBhbHJlYWR5IGJlaW5nIGFjY2Vzc2VkCi0qZnJvbSB0aGUgc2FtZSB0aHJlYWQqLCB0aGVuIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCit0aGV5IGNhbiBhcmlzZSBmcm9tIGRvaW5nIEkvTyBpbiBhIDptb2Q6YHNpZ25hbGAgaGFuZGxlci4gIElmIGEgdGhyZWFkIHRyaWVzIHRvCityZW50ZXIgYSBidWZmZXJlZCBvYmplY3Qgd2hpY2ggaXQgaXMgYWxyZWFkeSBhY2Nlc3NpbmcsIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcworcmFpc2VkLiAgTm90ZSB0aGlzIGRvZXNuJ3QgcHJvaGliaXQgYSBkaWZmZXJlbnQgdGhyZWFkIGZyb20gZW50ZXJpbmcgdGhlCitidWZmZXJlZCBvYmplY3QuCiAKLVRoZSBhYm92ZSBpbXBsaWNpdGx5IGV4dGVuZHMgdG8gdGV4dCBmaWxlcywgc2luY2UgdGhlIDpmdW5jOmBvcGVuKClgCi1mdW5jdGlvbiB3aWxsIHdyYXAgYSBidWZmZXJlZCBvYmplY3QgaW5zaWRlIGEgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4gIFRoaXMKLWluY2x1ZGVzIHN0YW5kYXJkIHN0cmVhbXMgYW5kIHRoZXJlZm9yZSBhZmZlY3RzIHRoZSBidWlsdC1pbiBmdW5jdGlvbgotOmZ1bmM6YHByaW50KClgIGFzIHdlbGwuCitUaGUgYWJvdmUgaW1wbGljaXRseSBleHRlbmRzIHRvIHRleHQgZmlsZXMsIHNpbmNlIHRoZSA6ZnVuYzpgb3BlbigpYCBmdW5jdGlvbgord2lsbCB3cmFwIGEgYnVmZmVyZWQgb2JqZWN0IGluc2lkZSBhIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuICBUaGlzIGluY2x1ZGVzCitzdGFuZGFyZCBzdHJlYW1zIGFuZCB0aGVyZWZvcmUgYWZmZWN0cyB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YHByaW50KClgIGFzCit3ZWxsLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0IGIvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAppbmRleCBhZGQyMDkxLi43NTc4MjNkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKQEAgLTQ2LDYgKzQ2LDcgQEAKID09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIEl0ZXJhdG9yICAgICAgICAgICAgICAgIEFyZ3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4YW1wbGUKID09PT09PT09PT09PT09PT09PT09ICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBhY2N1bXVsYXRlYCAgICAgIHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAwK3AxLCBwMCtwMStwMiwgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBgYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgLS0+IDEgMyA2IDEwIDE1YGAKIDpmdW5jOmBjaGFpbmAgICAgICAgICAgIHAsIHEsIC4uLiAgICAgICAgICAgICAgICAgICAgICAgcDAsIHAxLCAuLi4gcGxhc3QsIHEwLCBxMSwgLi4uICAgICAgICAgICAgICAgICAgICAgIGBgY2hhaW4oJ0FCQycsICdERUYnKSAtLT4gQSBCIEMgRCBFIEZgYAogOmZ1bmM6YGNvbXByZXNzYCAgICAgICAgZGF0YSwgc2VsZWN0b3JzICAgICAgICAgICAgICAgICAoZFswXSBpZiBzWzBdKSwgKGRbMV0gaWYgc1sxXSksIC4uLiAgICAgICAgICAgICAgICAgYGBjb21wcmVzcygnQUJDREVGJywgWzEsMCwxLDAsMSwxXSkgLS0+IEEgQyBFIEZgYAogOmZ1bmM6YGRyb3B3aGlsZWAgICAgICAgcHJlZCwgc2VxICAgICAgICAgICAgICAgICAgICAgICBzZXFbbl0sIHNlcVtuKzFdLCBzdGFydGluZyB3aGVuIHByZWQgZmFpbHMgICAgICAgICAgYGBkcm9wd2hpbGUobGFtYmRhIHg6IHg8NSwgWzEsNCw2LDQsMV0pIC0tPiA2IDQgMWBgCkBAIC04Myw2ICs4NCwyMiBAQAogc3RyZWFtcyBvZiBpbmZpbml0ZSBsZW5ndGgsIHNvIHRoZXkgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQgYnkgZnVuY3Rpb25zIG9yCiBsb29wcyB0aGF0IHRydW5jYXRlIHRoZSBzdHJlYW0uCiAKKy4uIGZ1bmN0aW9uOjogYWNjdW11bGF0ZShpdGVyYWJsZSkKKworICAgIE1ha2UgYW4gaXRlcmF0b3IgdGhhdCByZXR1cm5zIGFjY3VtdWxhdGVkIHN1bXMuIEVsZW1lbnRzIG1heSBiZSBhbnkgYWRkYWJsZQorICAgIHR5cGUgaW5jbHVkaW5nIDpjbGFzczpgRGVjaW1hbGAgb3IgOmNsYXNzOmBGcmFjdGlvbmAuICBFcXVpdmFsZW50IHRvOjoKKworICAgICAgICBkZWYgYWNjdW11bGF0ZShpdGVyYWJsZSk6CisgICAgICAgICAgICAnUmV0dXJuIHJ1bm5pbmcgdG90YWxzJworICAgICAgICAgICAgIyBhY2N1bXVsYXRlKFsxLDIsMyw0LDVdKSAtLT4gMSAzIDYgMTAgMTUKKyAgICAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgICAgIHRvdGFsID0gbmV4dChpdCkKKyAgICAgICAgICAgIHlpZWxkIHRvdGFsCisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBpdDoKKyAgICAgICAgICAgICAgICB0b3RhbCA9IHRvdGFsICsgZWxlbWVudAorICAgICAgICAgICAgICAgIHlpZWxkIHRvdGFsCisKKyAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogLi4gZnVuY3Rpb246OiBjaGFpbigqaXRlcmFibGVzKQogCkBAIC01NjAsOCArNTc3LDggQEAKIAogLi4gX2l0ZXJ0b29scy1yZWNpcGVzOgogCi1SZWNpcGVzCi0tLS0tLS0tCitJdGVydG9vbHMgUmVjaXBlcworLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBzZWN0aW9uIHNob3dzIHJlY2lwZXMgZm9yIGNyZWF0aW5nIGFuIGV4dGVuZGVkIHRvb2xzZXQgdXNpbmcgdGhlIGV4aXN0aW5nCiBpdGVydG9vbHMgYXMgYnVpbGRpbmcgYmxvY2tzLgpAQCAtNjUzLDYgKzY3MCwxMiBAQAogICAgICAgICAgICAgICAgcGVuZGluZyAtPSAxCiAgICAgICAgICAgICAgICBuZXh0cyA9IGN5Y2xlKGlzbGljZShuZXh0cywgcGVuZGluZykpCiAKKyAgIGRlZiBwYXJ0aXRpb24ocHJlZCwgaXRlcmFibGUpOgorICAgICAgICdVc2UgYSBwcmVkaWNhdGUgdG8gcGFydGl0aW9uIGVudHJpZXMgaW50byBmYWxzZSBlbnRyaWVzIGFuZCB0cnVlIGVudHJpZXMnCisgICAgICAgIyBwYXJ0aXRpb24oaXNfb2RkLCByYW5nZSgxMCkpIC0tPiAwIDIgNCA2IDggICBhbmQgIDEgMyA1IDcgOQorICAgICAgIHQxLCB0MiA9IHRlZShpdGVyYWJsZSkKKyAgICAgICByZXR1cm4gZmlsdGVyZmFsc2UocHJlZCwgdDEpLCBmaWx0ZXIocHJlZCwgdDIpCisKICAgIGRlZiBwb3dlcnNldChpdGVyYWJsZSk6CiAgICAgICAgInBvd2Vyc2V0KFsxLDIsM10pIC0tPiAoKSAoMSwpICgyLCkgKDMsKSAoMSwyKSAoMSwzKSAoMiwzKSAoMSwyLDMpIgogICAgICAgIHMgPSBsaXN0KGl0ZXJhYmxlKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvanNvbi5yc3QgYi9Eb2MvbGlicmFyeS9qc29uLnJzdAppbmRleCA0OGFjYWYxLi40ZWUxN2YyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9qc29uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9qc29uLnJzdApAQCAtNiw3ICs2LDcgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEJvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogQm9iIElwcG9saXRvIDxib2JAcmVkaXZpLmNvbT4KIAotSlNPTiAoSmF2YVNjcmlwdCBPYmplY3QgTm90YXRpb24pIDxodHRwOi8vanNvbi5vcmc+IGlzIGEgc3Vic2V0IG9mIEphdmFTY3JpcHQKK2BKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz5gXyBpcyBhIHN1YnNldCBvZiBKYXZhU2NyaXB0CiBzeW50YXggKEVDTUEtMjYyIDNyZCBlZGl0aW9uKSB1c2VkIGFzIGEgbGlnaHR3ZWlnaHQgZGF0YSBpbnRlcmNoYW5nZSBmb3JtYXQuCiAKIDptb2Q6YGpzb25gIGV4cG9zZXMgYW4gQVBJIGZhbWlsaWFyIHRvIHVzZXJzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CkBAIC0xMzQsMTAgKzEzNCwxMiBAQAogICAgYGBpbmZgYCwgYGAtaW5mYGApIGluIHN0cmljdCBjb21wbGlhbmNlIG9mIHRoZSBKU09OIHNwZWNpZmljYXRpb24sIGluc3RlYWQgb2YKICAgIHVzaW5nIHRoZSBKYXZhU2NyaXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgogCi0gICBJZiAqaW5kZW50KiBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kIG9iamVjdAotICAgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2YgMCwKLSAgIG9yIG5lZ2F0aXZlLCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiAgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBzZWxlY3RzIHRoZQotICAgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgorICAgSWYgKmluZGVudCogaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciBvciBzdHJpbmcsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKKyAgIG9iamVjdCBtZW1iZXJzIHdpbGwgYmUgcHJldHR5LXByaW50ZWQgd2l0aCB0aGF0IGluZGVudCBsZXZlbC4gIEFuIGluZGVudCBsZXZlbAorICAgb2YgMCwgbmVnYXRpdmUsIG9yIGBgIiJgYCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiAgYGBOb25lYGAgKHRoZSBkZWZhdWx0KQorICAgc2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLiBVc2luZyBhIHBvc2l0aXZlIGludGVnZXIgaW5kZW50CisgICBpbmRlbnRzIHRoYXQgbWFueSBzcGFjZXMgcGVyIGxldmVsLiAgSWYgKmluZGVudCogaXMgYSBzdHJpbmcgKHN1Y2ggYXQgJ1x0JyksCisgICB0aGF0IHN0cmluZyBpcyB1c2VkIHRvIGluZGVudCBlYWNoIGxldmVsLgogCiAgICBJZiAqc2VwYXJhdG9ycyogaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlLCB0aGVuIGl0CiAgICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuICBgYCgnLCcsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9rZXl3b3JkLnJzdCBiL0RvYy9saWJyYXJ5L2tleXdvcmQucnN0CmluZGV4IGE0YmZhNTAuLjE3M2RiMjMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2tleXdvcmQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2tleXdvcmQucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjoga2V5d29yZAogICAgOnN5bm9wc2lzOiBUZXN0IHdoZXRoZXIgYSBzdHJpbmcgaXMgYSBrZXl3b3JkIGluIFB5dGhvbi4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIva2V5d29yZC5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgYWxsb3dzIGEgUHl0aG9uIHByb2dyYW0gdG8gZGV0ZXJtaW5lIGlmIGEgc3RyaW5nIGlzIGEga2V5d29yZC4KIApAQCAtMTgsNCArMjEsMyBAQAogICAgU2VxdWVuY2UgY29udGFpbmluZyBhbGwgdGhlIGtleXdvcmRzIGRlZmluZWQgZm9yIHRoZSBpbnRlcnByZXRlci4gIElmIGFueQogICAga2V5d29yZHMgYXJlIGRlZmluZWQgdG8gb25seSBiZSBhY3RpdmUgd2hlbiBwYXJ0aWN1bGFyIDptb2Q6YF9fZnV0dXJlX19gCiAgICBzdGF0ZW1lbnRzIGFyZSBpbiBlZmZlY3QsIHRoZXNlIHdpbGwgYmUgaW5jbHVkZWQgYXMgd2VsbC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbGFuZ3VhZ2UucnN0IGIvRG9jL2xpYnJhcnkvbGFuZ3VhZ2UucnN0CmluZGV4IDNkOTA3YTAuLjFlYWMzMmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xhbmd1YWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sYW5ndWFnZS5yc3QKQEAgLTI2LDQgKzI2LDMgQEAKICAgIGNvbXBpbGVhbGwucnN0CiAgICBkaXMucnN0CiAgICBwaWNrbGV0b29scy5yc3QKLSAgIGRpc3R1dGlscy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QgYi9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CmluZGV4IDY4OGUyOTcuLmRhY2Y4YWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdApAQCAtNSw2ICs1LDkgQEAKICAgIDpzeW5vcHNpczogVGhpcyBtb2R1bGUgcHJvdmlkZXMgcmFuZG9tIGFjY2VzcyB0byBpbmRpdmlkdWFsIGxpbmVzIGZyb20gdGV4dCBmaWxlcy4KIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL2xpbmVjYWNoZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGxpbmVjYWNoZWAgbW9kdWxlIGFsbG93cyBvbmUgdG8gZ2V0IGFueSBsaW5lIGZyb20gYW55IGZpbGUsIHdoaWxlCiBhdHRlbXB0aW5nIHRvIG9wdGltaXplIGludGVybmFsbHksIHVzaW5nIGEgY2FjaGUsIHRoZSBjb21tb24gY2FzZSB3aGVyZSBtYW55CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2NhbGUucnN0IGIvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAppbmRleCA1YjI5NDFlLi5kZDZmOTU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvY2FsZS5yc3QKQEAgLTIxNSw3ICsyMTUsNyBAQAogCiAgICAgICAuLiBub3RlOjoKIAotICAgICAgICAgVGhlIGV4cHJlc3Npb24gaXMgaW4gdGhlIHN5bnRheCBzdWl0YWJsZSBmb3IgdGhlIDpjZnVuYzpgcmVnZXhgIGZ1bmN0aW9uCisgICAgICAgICBUaGUgZXhwcmVzc2lvbiBpcyBpbiB0aGUgc3ludGF4IHN1aXRhYmxlIGZvciB0aGUgOmM6ZnVuYzpgcmVnZXhgIGZ1bmN0aW9uCiAgICAgICAgICBmcm9tIHRoZSBDIGxpYnJhcnksIHdoaWNoIG1pZ2h0IGRpZmZlciBmcm9tIHRoZSBzeW50YXggdXNlZCBpbiA6bW9kOmByZWAuCiAKICAgIC4uIGRhdGE6OiBOT0VYUFIKQEAgLTUzNSw3ICs1MzUsNyBAQAogUHl0aG9uIGFwcGxpY2F0aW9ucyBzaG91bGQgbm9ybWFsbHkgZmluZCBubyBuZWVkIHRvIGludm9rZSB0aGVzZSBmdW5jdGlvbnMsIGFuZAogc2hvdWxkIHVzZSA6bW9kOmBnZXR0ZXh0YCBpbnN0ZWFkLiAgQSBrbm93biBleGNlcHRpb24gdG8gdGhpcyBydWxlIGFyZQogYXBwbGljYXRpb25zIHRoYXQgbGluayB3aXRoIGFkZGl0aW9uYWwgQyBsaWJyYXJpZXMgd2hpY2ggaW50ZXJuYWxseSBpbnZva2UKLTpjZnVuYzpgZ2V0dGV4dGAgb3IgOmZ1bmM6YGRjZ2V0dGV4dGAuICBGb3IgdGhlc2UgYXBwbGljYXRpb25zLCBpdCBtYXkgYmUKKzpjOmZ1bmM6YGdldHRleHRgIG9yIDpmdW5jOmBkY2dldHRleHRgLiAgRm9yIHRoZXNlIGFwcGxpY2F0aW9ucywgaXQgbWF5IGJlCiBuZWNlc3NhcnkgdG8gYmluZCB0aGUgdGV4dCBkb21haW4sIHNvIHRoYXQgdGhlIGxpYnJhcmllcyBjYW4gcHJvcGVybHkgbG9jYXRlCiB0aGVpciBtZXNzYWdlIGNhdGFsb2dzLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI4MGE3ZgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtMCwwICsxLDY4MCBAQAorOm1vZDpgbG9nZ2luZy5jb25maWdgIC0tLSBMb2dnaW5nIGNvbmZpZ3VyYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGxvZ2dpbmcuY29uZmlnCisgICA6c3lub3BzaXM6IENvbmZpZ3VyYXRpb24gb2YgdGhlIGxvZ2dpbmcgbW9kdWxlLgorCisKKy4uIG1vZHVsZWF1dGhvcjo6IFZpbmF5IFNhamlwIDx2aW5heV9zYWppcEByZWQtZG92ZS5jb20+CisuLiBzZWN0aW9uYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KKworLi4gc2lkZWJhcjo6IEltcG9ydGFudAorCisgICBUaGlzIHBhZ2UgY29udGFpbnMgb25seSByZWZlcmVuY2UgaW5mb3JtYXRpb24uIEZvciB0dXRvcmlhbHMsCisgICBwbGVhc2Ugc2VlCisKKyAgICogOnJlZjpgQmFzaWMgVHV0b3JpYWwgPGxvZ2dpbmctYmFzaWMtdHV0b3JpYWw+YAorICAgKiA6cmVmOmBBZHZhbmNlZCBUdXRvcmlhbCA8bG9nZ2luZy1hZHZhbmNlZC10dXRvcmlhbD5gCisgICAqIDpyZWY6YExvZ2dpbmcgQ29va2Jvb2sgPGxvZ2dpbmctY29va2Jvb2s+YAorCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBBUEkgZm9yIGNvbmZpZ3VyaW5nIHRoZSBsb2dnaW5nIG1vZHVsZS4KKworLi4gX2xvZ2dpbmctY29uZmlnLWFwaToKKworQ29uZmlndXJhdGlvbiBmdW5jdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNvbmZpZ3VyZSB0aGUgbG9nZ2luZyBtb2R1bGUuIFRoZXkgYXJlIGxvY2F0ZWQgaW4gdGhlCis6bW9kOmBsb2dnaW5nLmNvbmZpZ2AgbW9kdWxlLiAgVGhlaXIgdXNlIGlzIG9wdGlvbmFsIC0tLSB5b3UgY2FuIGNvbmZpZ3VyZSB0aGUKK2xvZ2dpbmcgbW9kdWxlIHVzaW5nIHRoZXNlIGZ1bmN0aW9ucyBvciBieSBtYWtpbmcgY2FsbHMgdG8gdGhlIG1haW4gQVBJIChkZWZpbmVkCitpbiA6bW9kOmBsb2dnaW5nYCBpdHNlbGYpIGFuZCBkZWZpbmluZyBoYW5kbGVycyB3aGljaCBhcmUgZGVjbGFyZWQgZWl0aGVyIGluCis6bW9kOmBsb2dnaW5nYCBvciA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYC4KKworLi4gZnVuY3Rpb246OiBkaWN0Q29uZmlnKGNvbmZpZykKKworICAgIFRha2VzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGRpY3Rpb25hcnkuICBUaGUgY29udGVudHMgb2YKKyAgICB0aGlzIGRpY3Rpb25hcnkgYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0c2NoZW1hYAorICAgIGJlbG93LgorCisgICAgSWYgYW4gZXJyb3IgaXMgZW5jb3VudGVyZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24sIHRoaXMgZnVuY3Rpb24gd2lsbAorICAgIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAsIDpleGM6YFR5cGVFcnJvcmAsIDpleGM6YEF0dHJpYnV0ZUVycm9yYAorICAgIG9yIDpleGM6YEltcG9ydEVycm9yYCB3aXRoIGEgc3VpdGFibHkgZGVzY3JpcHRpdmUgbWVzc2FnZS4gIFRoZQorICAgIGZvbGxvd2luZyBpcyBhIChwb3NzaWJseSBpbmNvbXBsZXRlKSBsaXN0IG9mIGNvbmRpdGlvbnMgd2hpY2ggd2lsbAorICAgIHJhaXNlIGFuIGVycm9yOgorCisgICAgKiBBIGBgbGV2ZWxgYCB3aGljaCBpcyBub3QgYSBzdHJpbmcgb3Igd2hpY2ggaXMgYSBzdHJpbmcgbm90CisgICAgICBjb3JyZXNwb25kaW5nIHRvIGFuIGFjdHVhbCBsb2dnaW5nIGxldmVsLgorICAgICogQSBgYHByb3BhZ2F0ZWBgIHZhbHVlIHdoaWNoIGlzIG5vdCBhIGJvb2xlYW4uCisgICAgKiBBbiBpZCB3aGljaCBkb2VzIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBkZXN0aW5hdGlvbi4KKyAgICAqIEEgbm9uLWV4aXN0ZW50IGhhbmRsZXIgaWQgZm91bmQgZHVyaW5nIGFuIGluY3JlbWVudGFsIGNhbGwuCisgICAgKiBBbiBpbnZhbGlkIGxvZ2dlciBuYW1lLgorICAgICogSW5hYmlsaXR5IHRvIHJlc29sdmUgdG8gYW4gaW50ZXJuYWwgb3IgZXh0ZXJuYWwgb2JqZWN0LgorCisgICAgUGFyc2luZyBpcyBwZXJmb3JtZWQgYnkgdGhlIDpjbGFzczpgRGljdENvbmZpZ3VyYXRvcmAgY2xhc3MsIHdob3NlCisgICAgY29uc3RydWN0b3IgaXMgcGFzc2VkIHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24sIGFuZAorICAgIGhhcyBhIDptZXRoOmBjb25maWd1cmVgIG1ldGhvZC4gIFRoZSA6bW9kOmBsb2dnaW5nLmNvbmZpZ2AgbW9kdWxlCisgICAgaGFzIGEgY2FsbGFibGUgYXR0cmlidXRlIDphdHRyOmBkaWN0Q29uZmlnQ2xhc3NgCisgICAgd2hpY2ggaXMgaW5pdGlhbGx5IHNldCB0byA6Y2xhc3M6YERpY3RDb25maWd1cmF0b3JgLgorICAgIFlvdSBjYW4gcmVwbGFjZSB0aGUgdmFsdWUgb2YgOmF0dHI6YGRpY3RDb25maWdDbGFzc2Agd2l0aCBhCisgICAgc3VpdGFibGUgaW1wbGVtZW50YXRpb24gb2YgeW91ciBvd24uCisKKyAgICA6ZnVuYzpgZGljdENvbmZpZ2AgY2FsbHMgOmF0dHI6YGRpY3RDb25maWdDbGFzc2AgcGFzc2luZworICAgIHRoZSBzcGVjaWZpZWQgZGljdGlvbmFyeSwgYW5kIHRoZW4gY2FsbHMgdGhlIDptZXRoOmBjb25maWd1cmVgIG1ldGhvZCBvbgorICAgIHRoZSByZXR1cm5lZCBvYmplY3QgdG8gcHV0IHRoZSBjb25maWd1cmF0aW9uIGludG8gZWZmZWN0OjoKKworICAgICAgICAgIGRlZiBkaWN0Q29uZmlnKGNvbmZpZyk6CisgICAgICAgICAgICAgIGRpY3RDb25maWdDbGFzcyhjb25maWcpLmNvbmZpZ3VyZSgpCisKKyAgICBGb3IgZXhhbXBsZSwgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YERpY3RDb25maWd1cmF0b3JgIGNvdWxkIGNhbGwKKyAgICBgYERpY3RDb25maWd1cmF0b3IuX19pbml0X18oKWBgIGluIGl0cyBvd24gOm1ldGg6YF9faW5pdF9fKClgLCB0aGVuCisgICAgc2V0IHVwIGN1c3RvbSBwcmVmaXhlcyB3aGljaCB3b3VsZCBiZSB1c2FibGUgaW4gdGhlIHN1YnNlcXVlbnQKKyAgICA6bWV0aDpgY29uZmlndXJlYCBjYWxsLiA6YXR0cjpgZGljdENvbmZpZ0NsYXNzYCB3b3VsZCBiZSBib3VuZCB0bworICAgIHRoaXMgbmV3IHN1YmNsYXNzLCBhbmQgdGhlbiA6ZnVuYzpgZGljdENvbmZpZ2AgY291bGQgYmUgY2FsbGVkIGV4YWN0bHkgYXMKKyAgICBpbiB0aGUgZGVmYXVsdCwgdW5jdXN0b21pemVkIHN0YXRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZnVuY3Rpb246OiBmaWxlQ29uZmlnKGZuYW1lLCBkZWZhdWx0cz1Ob25lLCBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM9VHJ1ZSkKKworICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUKKyAgIG5hbWVkICpmbmFtZSouIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGZyb20gYW4KKyAgIGFwcGxpY2F0aW9uLCBhbGxvd2luZyBhbiBlbmQgdXNlciB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQKKyAgIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMKKyAgIGFuZCBsb2FkIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbikuCisKKyAgIDpwYXJhbSBkZWZhdWx0czogRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZAorICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGFyZ3VtZW50LgorCisgICA6cGFyYW0gZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzOiBJZiBzcGVjaWZpZWQgYXMgYGBGYWxzZWBgLCBsb2dnZXJzIHdoaWNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlIGFyZSBsZWZ0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZS4gVGhlIGRlZmF1bHQgaXMgYGBUcnVlYGAgYmVjYXVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVzIG9sZCBiZWhhdmlvdXIgaW4gYSBiYWNrd2FyZC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgd2F5LiBUaGlzIGJlaGF2aW91ciBpcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZSBhbnkgZXhpc3RpbmcgbG9nZ2VycyB1bmxlc3MgdGhleSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXIgYW5jZXN0b3JzIGFyZSBleHBsaWNpdGx5IG5hbWVkIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZyBjb25maWd1cmF0aW9uLgorCisKKy4uIGZ1bmN0aW9uOjogbGlzdGVuKHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JUKQorCisgICBTdGFydHMgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbnMgZm9yIG5ldworICAgY29uZmlndXJhdGlvbnMuIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCB0aGUgbW9kdWxlJ3MgZGVmYXVsdAorICAgOmNvbnN0OmBERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlRgIGlzIHVzZWQuIExvZ2dpbmcgY29uZmlndXJhdGlvbnMgd2lsbCBiZQorICAgc2VudCBhcyBhIGZpbGUgc3VpdGFibGUgZm9yIHByb2Nlc3NpbmcgYnkgOmZ1bmM6YGZpbGVDb25maWdgLiBSZXR1cm5zIGEKKyAgIDpjbGFzczpgVGhyZWFkYCBpbnN0YW5jZSBvbiB3aGljaCB5b3UgY2FuIGNhbGwgOm1ldGg6YHN0YXJ0YCB0byBzdGFydCB0aGUKKyAgIHNlcnZlciwgYW5kIHdoaWNoIHlvdSBjYW4gOm1ldGg6YGpvaW5gIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwKKyAgIGNhbGwgOmZ1bmM6YHN0b3BMaXN0ZW5pbmdgLgorCisgICBUbyBzZW5kIGEgY29uZmlndXJhdGlvbiB0byB0aGUgc29ja2V0LCByZWFkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgYW5kCisgICBzZW5kIGl0IHRvIHRoZSBzb2NrZXQgYXMgYSBzdHJpbmcgb2YgYnl0ZXMgcHJlY2VkZWQgYnkgYSBmb3VyLWJ5dGUgbGVuZ3RoCisgICBzdHJpbmcgcGFja2VkIGluIGJpbmFyeSB1c2luZyBgYHN0cnVjdC5wYWNrKCc+TCcsIG4pYGAuCisKKworLi4gZnVuY3Rpb246OiBzdG9wTGlzdGVuaW5nKCkKKworICAgU3RvcHMgdGhlIGxpc3RlbmluZyBzZXJ2ZXIgd2hpY2ggd2FzIGNyZWF0ZWQgd2l0aCBhIGNhbGwgdG8gOmZ1bmM6YGxpc3RlbmAuCisgICBUaGlzIGlzIHR5cGljYWxseSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgOm1ldGg6YGpvaW5gIG9uIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorICAgOmZ1bmM6YGxpc3RlbmAuCisKKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3RzY2hlbWE6CisKK0NvbmZpZ3VyYXRpb24gZGljdGlvbmFyeSBzY2hlbWEKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRGVzY3JpYmluZyBhIGxvZ2dpbmcgY29uZmlndXJhdGlvbiByZXF1aXJlcyBsaXN0aW5nIHRoZSB2YXJpb3VzCitvYmplY3RzIHRvIGNyZWF0ZSBhbmQgdGhlIGNvbm5lY3Rpb25zIGJldHdlZW4gdGhlbTsgZm9yIGV4YW1wbGUsIHlvdQorbWF5IGNyZWF0ZSBhIGhhbmRsZXIgbmFtZWQgJ2NvbnNvbGUnIGFuZCB0aGVuIHNheSB0aGF0IHRoZSBsb2dnZXIKK25hbWVkICdzdGFydHVwJyB3aWxsIHNlbmQgaXRzIG1lc3NhZ2VzIHRvIHRoZSAnY29uc29sZScgaGFuZGxlci4KK1RoZXNlIG9iamVjdHMgYXJlbid0IGxpbWl0ZWQgdG8gdGhvc2UgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YGxvZ2dpbmdgCittb2R1bGUgYmVjYXVzZSB5b3UgbWlnaHQgd3JpdGUgeW91ciBvd24gZm9ybWF0dGVyIG9yIGhhbmRsZXIgY2xhc3MuCitUaGUgcGFyYW1ldGVycyB0byB0aGVzZSBjbGFzc2VzIG1heSBhbHNvIG5lZWQgdG8gaW5jbHVkZSBleHRlcm5hbAorb2JqZWN0cyBzdWNoIGFzIGBgc3lzLnN0ZGVycmBgLiAgVGhlIHN5bnRheCBmb3IgZGVzY3JpYmluZyB0aGVzZQorb2JqZWN0cyBhbmQgY29ubmVjdGlvbnMgaXMgZGVmaW5lZCBpbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0LWNvbm5lY3Rpb25zYAorYmVsb3cuCisKK0RpY3Rpb25hcnkgU2NoZW1hIERldGFpbHMKKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIGRpY3Rpb25hcnkgcGFzc2VkIHRvIDpmdW5jOmBkaWN0Q29uZmlnYCBtdXN0IGNvbnRhaW4gdGhlIGZvbGxvd2luZwora2V5czoKKworKiAqdmVyc2lvbiogLSB0byBiZSBzZXQgdG8gYW4gaW50ZWdlciB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIHNjaGVtYQorICB2ZXJzaW9uLiAgVGhlIG9ubHkgdmFsaWQgdmFsdWUgYXQgcHJlc2VudCBpcyAxLCBidXQgaGF2aW5nIHRoaXMga2V5CisgIGFsbG93cyB0aGUgc2NoZW1hIHRvIGV2b2x2ZSB3aGlsZSBzdGlsbCBwcmVzZXJ2aW5nIGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5LgorCitBbGwgb3RoZXIga2V5cyBhcmUgb3B0aW9uYWwsIGJ1dCBpZiBwcmVzZW50IHRoZXkgd2lsbCBiZSBpbnRlcnByZXRlZAorYXMgZGVzY3JpYmVkIGJlbG93LiAgSW4gYWxsIGNhc2VzIGJlbG93IHdoZXJlIGEgJ2NvbmZpZ3VyaW5nIGRpY3QnIGlzCittZW50aW9uZWQsIGl0IHdpbGwgYmUgY2hlY2tlZCBmb3IgdGhlIHNwZWNpYWwgYGAnKCknYGAga2V5IHRvIHNlZSBpZiBhCitjdXN0b20gaW5zdGFudGlhdGlvbiBpcyByZXF1aXJlZC4gIElmIHNvLCB0aGUgbWVjaGFuaXNtIGRlc2NyaWJlZCBpbgorOnJlZjpgbG9nZ2luZy1jb25maWctZGljdC11c2VyZGVmYCBiZWxvdyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZTsKK290aGVyd2lzZSwgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0byBpbnN0YW50aWF0ZS4KKworKiAqZm9ybWF0dGVycyogLSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIGEgZGljdCBpbiB3aGljaCBlYWNoCisgIGtleSBpcyBhIGZvcm1hdHRlciBpZCBhbmQgZWFjaCB2YWx1ZSBpcyBhIGRpY3QgZGVzY3JpYmluZyBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIEZvcm1hdHRlciBpbnN0YW5jZS4KKworICBUaGUgY29uZmlndXJpbmcgZGljdCBpcyBzZWFyY2hlZCBmb3Iga2V5cyBgYGZvcm1hdGBgIGFuZCBgYGRhdGVmbXRgYAorICAod2l0aCBkZWZhdWx0cyBvZiBgYE5vbmVgYCkgYW5kIHRoZXNlIGFyZSB1c2VkIHRvIGNvbnN0cnVjdCBhCisgIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluc3RhbmNlLgorCisqICpmaWx0ZXJzKiAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gga2V5CisgIGlzIGEgZmlsdGVyIGlkIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0byBjb25maWd1cmUKKyAgdGhlIGNvcnJlc3BvbmRpbmcgRmlsdGVyIGluc3RhbmNlLgorCisgIFRoZSBjb25maWd1cmluZyBkaWN0IGlzIHNlYXJjaGVkIGZvciB0aGUga2V5IGBgbmFtZWBgIChkZWZhdWx0aW5nIHRvIHRoZQorICBlbXB0eSBzdHJpbmcpIGFuZCB0aGlzIGlzIHVzZWQgdG8gY29uc3RydWN0IGEgOmNsYXNzOmBsb2dnaW5nLkZpbHRlcmAKKyAgaW5zdGFuY2UuCisKKyogKmhhbmRsZXJzKiAtIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHdpbGwgYmUgYSBkaWN0IGluIHdoaWNoIGVhY2gKKyAga2V5IGlzIGEgaGFuZGxlciBpZCBhbmQgZWFjaCB2YWx1ZSBpcyBhIGRpY3QgZGVzY3JpYmluZyBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBjb3JyZXNwb25kaW5nIEhhbmRsZXIgaW5zdGFuY2UuCisKKyAgVGhlIGNvbmZpZ3VyaW5nIGRpY3QgaXMgc2VhcmNoZWQgZm9yIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAqIGBgY2xhc3NgYCAobWFuZGF0b3J5KS4gIFRoaXMgaXMgdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZQorICAgIGhhbmRsZXIgY2xhc3MuCisKKyAgKiBgYGxldmVsYGAgKG9wdGlvbmFsKS4gIFRoZSBsZXZlbCBvZiB0aGUgaGFuZGxlci4KKworICAqIGBgZm9ybWF0dGVyYGAgKG9wdGlvbmFsKS4gIFRoZSBpZCBvZiB0aGUgZm9ybWF0dGVyIGZvciB0aGlzCisgICAgaGFuZGxlci4KKworICAqIGBgZmlsdGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGlzCisgICAgaGFuZGxlci4KKworICBBbGwgKm90aGVyKiBrZXlzIGFyZSBwYXNzZWQgdGhyb3VnaCBhcyBrZXl3b3JkIGFyZ3VtZW50cyB0byB0aGUKKyAgaGFuZGxlcidzIGNvbnN0cnVjdG9yLiAgRm9yIGV4YW1wbGUsIGdpdmVuIHRoZSBzbmlwcGV0OjoKKworICAgICAgaGFuZGxlcnM6CisgICAgICAgIGNvbnNvbGU6CisgICAgICAgICAgY2xhc3MgOiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIKKyAgICAgICAgICBmb3JtYXR0ZXI6IGJyaWVmCisgICAgICAgICAgbGV2ZWwgICA6IElORk8KKyAgICAgICAgICBmaWx0ZXJzOiBbYWxsb3dfZm9vXQorICAgICAgICAgIHN0cmVhbSAgOiBleHQ6Ly9zeXMuc3Rkb3V0CisgICAgICAgIGZpbGU6CisgICAgICAgICAgY2xhc3MgOiBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIKKyAgICAgICAgICBmb3JtYXR0ZXI6IHByZWNpc2UKKyAgICAgICAgICBmaWxlbmFtZTogbG9nY29uZmlnLmxvZworICAgICAgICAgIG1heEJ5dGVzOiAxMDI0CisgICAgICAgICAgYmFja3VwQ291bnQ6IDMKKworICB0aGUgaGFuZGxlciB3aXRoIGlkIGBgY29uc29sZWBgIGlzIGluc3RhbnRpYXRlZCBhcyBhCisgIDpjbGFzczpgbG9nZ2luZy5TdHJlYW1IYW5kbGVyYCwgdXNpbmcgYGBzeXMuc3Rkb3V0YGAgYXMgdGhlIHVuZGVybHlpbmcKKyAgc3RyZWFtLiAgVGhlIGhhbmRsZXIgd2l0aCBpZCBgYGZpbGVgYCBpcyBpbnN0YW50aWF0ZWQgYXMgYQorICA6Y2xhc3M6YGxvZ2dpbmcuaGFuZGxlcnMuUm90YXRpbmdGaWxlSGFuZGxlcmAgd2l0aCB0aGUga2V5d29yZCBhcmd1bWVudHMKKyAgYGBmaWxlbmFtZT0nbG9nY29uZmlnLmxvZycsIG1heEJ5dGVzPTEwMjQsIGJhY2t1cENvdW50PTNgYC4KKworKiAqbG9nZ2VycyogLSB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIGEgZGljdCBpbiB3aGljaCBlYWNoIGtleQorICBpcyBhIGxvZ2dlciBuYW1lIGFuZCBlYWNoIHZhbHVlIGlzIGEgZGljdCBkZXNjcmliaW5nIGhvdyB0bworICBjb25maWd1cmUgdGhlIGNvcnJlc3BvbmRpbmcgTG9nZ2VyIGluc3RhbmNlLgorCisgIFRoZSBjb25maWd1cmluZyBkaWN0IGlzIHNlYXJjaGVkIGZvciB0aGUgZm9sbG93aW5nIGtleXM6CisKKyAgKiBgYGxldmVsYGAgKG9wdGlvbmFsKS4gIFRoZSBsZXZlbCBvZiB0aGUgbG9nZ2VyLgorCisgICogYGBwcm9wYWdhdGVgYCAob3B0aW9uYWwpLiAgVGhlIHByb3BhZ2F0aW9uIHNldHRpbmcgb2YgdGhlIGxvZ2dlci4KKworICAqIGBgZmlsdGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGlzCisgICAgbG9nZ2VyLgorCisgICogYGBoYW5kbGVyc2BgIChvcHRpb25hbCkuICBBIGxpc3Qgb2YgaWRzIG9mIHRoZSBoYW5kbGVycyBmb3IgdGhpcworICAgIGxvZ2dlci4KKworICBUaGUgc3BlY2lmaWVkIGxvZ2dlcnMgd2lsbCBiZSBjb25maWd1cmVkIGFjY29yZGluZyB0byB0aGUgbGV2ZWwsCisgIHByb3BhZ2F0aW9uLCBmaWx0ZXJzIGFuZCBoYW5kbGVycyBzcGVjaWZpZWQuCisKKyogKnJvb3QqIC0gdGhpcyB3aWxsIGJlIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgcm9vdCBsb2dnZXIuCisgIFByb2Nlc3Npbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBhcyBmb3IgYW55IGxvZ2dlciwgZXhjZXB0CisgIHRoYXQgdGhlIGBgcHJvcGFnYXRlYGAgc2V0dGluZyB3aWxsIG5vdCBiZSBhcHBsaWNhYmxlLgorCisqICppbmNyZW1lbnRhbCogLSB3aGV0aGVyIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGludGVycHJldGVkIGFzCisgIGluY3JlbWVudGFsIHRvIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLiAgVGhpcyB2YWx1ZSBkZWZhdWx0cyB0bworICBgYEZhbHNlYGAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHJlcGxhY2VzIHRoZQorICBleGlzdGluZyBjb25maWd1cmF0aW9uIHdpdGggdGhlIHNhbWUgc2VtYW50aWNzIGFzIHVzZWQgYnkgdGhlCisgIGV4aXN0aW5nIDpmdW5jOmBmaWxlQ29uZmlnYCBBUEkuCisKKyAgSWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBgYFRydWVgYCwgdGhlIGNvbmZpZ3VyYXRpb24gaXMgcHJvY2Vzc2VkCisgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBvbiA6cmVmOmBsb2dnaW5nLWNvbmZpZy1kaWN0LWluY3JlbWVudGFsYC4KKworKiAqZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzKiAtIHdoZXRoZXIgYW55IGV4aXN0aW5nIGxvZ2dlcnMgYXJlIHRvIGJlCisgIGRpc2FibGVkLiBUaGlzIHNldHRpbmcgbWlycm9ycyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBzYW1lIG5hbWUgaW4KKyAgOmZ1bmM6YGZpbGVDb25maWdgLiBJZiBhYnNlbnQsIHRoaXMgcGFyYW1ldGVyIGRlZmF1bHRzIHRvIGBgVHJ1ZWBgLgorICBUaGlzIHZhbHVlIGlzIGlnbm9yZWQgaWYgKmluY3JlbWVudGFsKiBpcyBgYFRydWVgYC4KKworLi4gX2xvZ2dpbmctY29uZmlnLWRpY3QtaW5jcmVtZW50YWw6CisKK0luY3JlbWVudGFsIENvbmZpZ3VyYXRpb24KKyIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworSXQgaXMgZGlmZmljdWx0IHRvIHByb3ZpZGUgY29tcGxldGUgZmxleGliaWxpdHkgZm9yIGluY3JlbWVudGFsCitjb25maWd1cmF0aW9uLiAgRm9yIGV4YW1wbGUsIGJlY2F1c2Ugb2JqZWN0cyBzdWNoIGFzIGZpbHRlcnMKK2FuZCBmb3JtYXR0ZXJzIGFyZSBhbm9ueW1vdXMsIG9uY2UgYSBjb25maWd1cmF0aW9uIGlzIHNldCB1cCwgaXQgaXMKK25vdCBwb3NzaWJsZSB0byByZWZlciB0byBzdWNoIGFub255bW91cyBvYmplY3RzIHdoZW4gYXVnbWVudGluZyBhCitjb25maWd1cmF0aW9uLgorCitGdXJ0aGVybW9yZSwgdGhlcmUgaXMgbm90IGEgY29tcGVsbGluZyBjYXNlIGZvciBhcmJpdHJhcmlseSBhbHRlcmluZwordGhlIG9iamVjdCBncmFwaCBvZiBsb2dnZXJzLCBoYW5kbGVycywgZmlsdGVycywgZm9ybWF0dGVycyBhdAorcnVuLXRpbWUsIG9uY2UgYSBjb25maWd1cmF0aW9uIGlzIHNldCB1cDsgdGhlIHZlcmJvc2l0eSBvZiBsb2dnZXJzIGFuZAoraGFuZGxlcnMgY2FuIGJlIGNvbnRyb2xsZWQganVzdCBieSBzZXR0aW5nIGxldmVscyAoYW5kLCBpbiB0aGUgY2FzZSBvZgorbG9nZ2VycywgcHJvcGFnYXRpb24gZmxhZ3MpLiAgQ2hhbmdpbmcgdGhlIG9iamVjdCBncmFwaCBhcmJpdHJhcmlseSBpbgorYSBzYWZlIHdheSBpcyBwcm9ibGVtYXRpYyBpbiBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50OyB3aGlsZSBub3QKK2ltcG9zc2libGUsIHRoZSBiZW5lZml0cyBhcmUgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5IGl0IGFkZHMgdG8gdGhlCitpbXBsZW1lbnRhdGlvbi4KKworVGh1cywgd2hlbiB0aGUgYGBpbmNyZW1lbnRhbGBgIGtleSBvZiBhIGNvbmZpZ3VyYXRpb24gZGljdCBpcyBwcmVzZW50CithbmQgaXMgYGBUcnVlYGAsIHRoZSBzeXN0ZW0gd2lsbCBjb21wbGV0ZWx5IGlnbm9yZSBhbnkgYGBmb3JtYXR0ZXJzYGAgYW5kCitgYGZpbHRlcnNgYCBlbnRyaWVzLCBhbmQgcHJvY2VzcyBvbmx5IHRoZSBgYGxldmVsYGAKK3NldHRpbmdzIGluIHRoZSBgYGhhbmRsZXJzYGAgZW50cmllcywgYW5kIHRoZSBgYGxldmVsYGAgYW5kCitgYHByb3BhZ2F0ZWBgIHNldHRpbmdzIGluIHRoZSBgYGxvZ2dlcnNgYCBhbmQgYGByb290YGAgZW50cmllcy4KKworVXNpbmcgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBkaWN0IGxldHMgY29uZmlndXJhdGlvbnMgdG8gYmUgc2VudAorb3ZlciB0aGUgd2lyZSBhcyBwaWNrbGVkIGRpY3RzIHRvIGEgc29ja2V0IGxpc3RlbmVyLiBUaHVzLCB0aGUgbG9nZ2luZwordmVyYm9zaXR5IG9mIGEgbG9uZy1ydW5uaW5nIGFwcGxpY2F0aW9uIGNhbiBiZSBhbHRlcmVkIG92ZXIgdGltZSB3aXRoCitubyBuZWVkIHRvIHN0b3AgYW5kIHJlc3RhcnQgdGhlIGFwcGxpY2F0aW9uLgorCisuLiBfbG9nZ2luZy1jb25maWctZGljdC1jb25uZWN0aW9uczoKKworT2JqZWN0IGNvbm5lY3Rpb25zCisiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlIHNjaGVtYSBkZXNjcmliZXMgYSBzZXQgb2YgbG9nZ2luZyBvYmplY3RzIC0gbG9nZ2VycywKK2hhbmRsZXJzLCBmb3JtYXR0ZXJzLCBmaWx0ZXJzIC0gd2hpY2ggYXJlIGNvbm5lY3RlZCB0byBlYWNoIG90aGVyIGluCithbiBvYmplY3QgZ3JhcGguICBUaHVzLCB0aGUgc2NoZW1hIG5lZWRzIHRvIHJlcHJlc2VudCBjb25uZWN0aW9ucworYmV0d2VlbiB0aGUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBzYXkgdGhhdCwgb25jZSBjb25maWd1cmVkLCBhCitwYXJ0aWN1bGFyIGxvZ2dlciBoYXMgYXR0YWNoZWQgdG8gaXQgYSBwYXJ0aWN1bGFyIGhhbmRsZXIuICBGb3IgdGhlCitwdXJwb3NlcyBvZiB0aGlzIGRpc2N1c3Npb24sIHdlIGNhbiBzYXkgdGhhdCB0aGUgbG9nZ2VyIHJlcHJlc2VudHMgdGhlCitzb3VyY2UsIGFuZCB0aGUgaGFuZGxlciB0aGUgZGVzdGluYXRpb24sIG9mIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZQordHdvLiAgT2YgY291cnNlIGluIHRoZSBjb25maWd1cmVkIG9iamVjdHMgdGhpcyBpcyByZXByZXNlbnRlZCBieSB0aGUKK2xvZ2dlciBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBoYW5kbGVyLiAgSW4gdGhlIGNvbmZpZ3VyYXRpb24gZGljdCwKK3RoaXMgaXMgZG9uZSBieSBnaXZpbmcgZWFjaCBkZXN0aW5hdGlvbiBvYmplY3QgYW4gaWQgd2hpY2ggaWRlbnRpZmllcworaXQgdW5hbWJpZ3VvdXNseSwgYW5kIHRoZW4gdXNpbmcgdGhlIGlkIGluIHRoZSBzb3VyY2Ugb2JqZWN0J3MKK2NvbmZpZ3VyYXRpb24gdG8gaW5kaWNhdGUgdGhhdCBhIGNvbm5lY3Rpb24gZXhpc3RzIGJldHdlZW4gdGhlIHNvdXJjZQorYW5kIHRoZSBkZXN0aW5hdGlvbiBvYmplY3Qgd2l0aCB0aGF0IGlkLgorCitTbywgZm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgWUFNTCBzbmlwcGV0OjoKKworICAgIGZvcm1hdHRlcnM6CisgICAgICBicmllZjoKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGZvciBmb3JtYXR0ZXIgd2l0aCBpZCAnYnJpZWYnIGdvZXMgaGVyZQorICAgICAgcHJlY2lzZToKKyAgICAgICAgIyBjb25maWd1cmF0aW9uIGZvciBmb3JtYXR0ZXIgd2l0aCBpZCAncHJlY2lzZScgZ29lcyBoZXJlCisgICAgaGFuZGxlcnM6CisgICAgICBoMTogI1RoaXMgaXMgYW4gaWQKKyAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgaGFuZGxlciB3aXRoIGlkICdoMScgZ29lcyBoZXJlCisgICAgICAgZm9ybWF0dGVyOiBicmllZgorICAgICAgaDI6ICNUaGlzIGlzIGFub3RoZXIgaWQKKyAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgaGFuZGxlciB3aXRoIGlkICdoMicgZ29lcyBoZXJlCisgICAgICAgZm9ybWF0dGVyOiBwcmVjaXNlCisgICAgbG9nZ2VyczoKKyAgICAgIGZvby5iYXIuYmF6OgorICAgICAgICAjIG90aGVyIGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dlciAnZm9vLmJhci5iYXonCisgICAgICAgIGhhbmRsZXJzOiBbaDEsIGgyXQorCisoTm90ZTogWUFNTCB1c2VkIGhlcmUgYmVjYXVzZSBpdCdzIGEgbGl0dGxlIG1vcmUgcmVhZGFibGUgdGhhbiB0aGUKK2VxdWl2YWxlbnQgUHl0aG9uIHNvdXJjZSBmb3JtIGZvciB0aGUgZGljdGlvbmFyeS4pCisKK1RoZSBpZHMgZm9yIGxvZ2dlcnMgYXJlIHRoZSBsb2dnZXIgbmFtZXMgd2hpY2ggd291bGQgYmUgdXNlZAorcHJvZ3JhbW1hdGljYWxseSB0byBvYnRhaW4gYSByZWZlcmVuY2UgdG8gdGhvc2UgbG9nZ2VycywgZS5nLgorYGBmb28uYmFyLmJhemBgLiAgVGhlIGlkcyBmb3IgRm9ybWF0dGVycyBhbmQgRmlsdGVycyBjYW4gYmUgYW55IHN0cmluZwordmFsdWUgKHN1Y2ggYXMgYGBicmllZmBgLCBgYHByZWNpc2VgYCBhYm92ZSkgYW5kIHRoZXkgYXJlIHRyYW5zaWVudCwKK2luIHRoYXQgdGhleSBhcmUgb25seSBtZWFuaW5nZnVsIGZvciBwcm9jZXNzaW5nIHRoZSBjb25maWd1cmF0aW9uCitkaWN0aW9uYXJ5IGFuZCB1c2VkIHRvIGRldGVybWluZSBjb25uZWN0aW9ucyBiZXR3ZWVuIG9iamVjdHMsIGFuZCBhcmUKK25vdCBwZXJzaXN0ZWQgYW55d2hlcmUgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBjYWxsIGlzIGNvbXBsZXRlLgorCitUaGUgYWJvdmUgc25pcHBldCBpbmRpY2F0ZXMgdGhhdCBsb2dnZXIgbmFtZWQgYGBmb28uYmFyLmJhemBgIHNob3VsZAoraGF2ZSB0d28gaGFuZGxlcnMgYXR0YWNoZWQgdG8gaXQsIHdoaWNoIGFyZSBkZXNjcmliZWQgYnkgdGhlIGhhbmRsZXIKK2lkcyBgYGgxYGAgYW5kIGBgaDJgYC4gVGhlIGZvcm1hdHRlciBmb3IgYGBoMWBgIGlzIHRoYXQgZGVzY3JpYmVkIGJ5IGlkCitgYGJyaWVmYGAsIGFuZCB0aGUgZm9ybWF0dGVyIGZvciBgYGgyYGAgaXMgdGhhdCBkZXNjcmliZWQgYnkgaWQKK2BgcHJlY2lzZWBgLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LXVzZXJkZWY6CisKK1VzZXItZGVmaW5lZCBvYmplY3RzCisiIiIiIiIiIiIiIiIiIiIiIiIiIgorCitUaGUgc2NoZW1hIHN1cHBvcnRzIHVzZXItZGVmaW5lZCBvYmplY3RzIGZvciBoYW5kbGVycywgZmlsdGVycyBhbmQKK2Zvcm1hdHRlcnMuICAoTG9nZ2VycyBkbyBub3QgbmVlZCB0byBoYXZlIGRpZmZlcmVudCB0eXBlcyBmb3IKK2RpZmZlcmVudCBpbnN0YW5jZXMsIHNvIHRoZXJlIGlzIG5vIHN1cHBvcnQgaW4gdGhpcyBjb25maWd1cmF0aW9uCitzY2hlbWEgZm9yIHVzZXItZGVmaW5lZCBsb2dnZXIgY2xhc3Nlcy4pCisKK09iamVjdHMgdG8gYmUgY29uZmlndXJlZCBhcmUgZGVzY3JpYmVkIGJ5IGRpY3Rpb25hcmllcword2hpY2ggZGV0YWlsIHRoZWlyIGNvbmZpZ3VyYXRpb24uICBJbiBzb21lIHBsYWNlcywgdGhlIGxvZ2dpbmcgc3lzdGVtCit3aWxsIGJlIGFibGUgdG8gaW5mZXIgZnJvbSB0aGUgY29udGV4dCBob3cgYW4gb2JqZWN0IGlzIHRvIGJlCitpbnN0YW50aWF0ZWQsIGJ1dCB3aGVuIGEgdXNlci1kZWZpbmVkIG9iamVjdCBpcyB0byBiZSBpbnN0YW50aWF0ZWQsCit0aGUgc3lzdGVtIHdpbGwgbm90IGtub3cgaG93IHRvIGRvIHRoaXMuICBJbiBvcmRlciB0byBwcm92aWRlIGNvbXBsZXRlCitmbGV4aWJpbGl0eSBmb3IgdXNlci1kZWZpbmVkIG9iamVjdCBpbnN0YW50aWF0aW9uLCB0aGUgdXNlciBuZWVkcwordG8gcHJvdmlkZSBhICdmYWN0b3J5JyAtIGEgY2FsbGFibGUgd2hpY2ggaXMgY2FsbGVkIHdpdGggYQorY29uZmlndXJhdGlvbiBkaWN0aW9uYXJ5IGFuZCB3aGljaCByZXR1cm5zIHRoZSBpbnN0YW50aWF0ZWQgb2JqZWN0LgorVGhpcyBpcyBzaWduYWxsZWQgYnkgYW4gYWJzb2x1dGUgaW1wb3J0IHBhdGggdG8gdGhlIGZhY3RvcnkgYmVpbmcKK21hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBzcGVjaWFsIGtleSBgYCcoKSdgYC4gIEhlcmUncyBhIGNvbmNyZXRlCitleGFtcGxlOjoKKworICAgIGZvcm1hdHRlcnM6CisgICAgICBicmllZjoKKyAgICAgICAgZm9ybWF0OiAnJShtZXNzYWdlKXMnCisgICAgICBkZWZhdWx0OgorICAgICAgICBmb3JtYXQ6ICclKGFzY3RpbWUpcyAlKGxldmVsbmFtZSktOHMgJShuYW1lKS0xNXMgJShtZXNzYWdlKXMnCisgICAgICAgIGRhdGVmbXQ6ICclWS0lbS0lZCAlSDolTTolUycKKyAgICAgIGN1c3RvbToKKyAgICAgICAgICAoKTogbXkucGFja2FnZS5jdXN0b21Gb3JtYXR0ZXJGYWN0b3J5CisgICAgICAgICAgYmFyOiBiYXoKKyAgICAgICAgICBzcGFtOiA5OS45CisgICAgICAgICAgYW5zd2VyOiA0MgorCitUaGUgYWJvdmUgWUFNTCBzbmlwcGV0IGRlZmluZXMgdGhyZWUgZm9ybWF0dGVycy4gIFRoZSBmaXJzdCwgd2l0aCBpZAorYGBicmllZmBgLCBpcyBhIHN0YW5kYXJkIDpjbGFzczpgbG9nZ2luZy5Gb3JtYXR0ZXJgIGluc3RhbmNlIHdpdGggdGhlCitzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gIFRoZSBzZWNvbmQsIHdpdGggaWQgYGBkZWZhdWx0YGAsIGhhcyBhCitsb25nZXIgZm9ybWF0IGFuZCBhbHNvIGRlZmluZXMgdGhlIHRpbWUgZm9ybWF0IGV4cGxpY2l0bHksIGFuZCB3aWxsCityZXN1bHQgaW4gYSA6Y2xhc3M6YGxvZ2dpbmcuRm9ybWF0dGVyYCBpbml0aWFsaXplZCB3aXRoIHRob3NlIHR3byBmb3JtYXQKK3N0cmluZ3MuICBTaG93biBpbiBQeXRob24gc291cmNlIGZvcm0sIHRoZSBgYGJyaWVmYGAgYW5kIGBgZGVmYXVsdGBgCitmb3JtYXR0ZXJzIGhhdmUgY29uZmlndXJhdGlvbiBzdWItZGljdGlvbmFyaWVzOjoKKworICAgIHsKKyAgICAgICdmb3JtYXQnIDogJyUobWVzc2FnZSlzJworICAgIH0KKworYW5kOjoKKworICAgIHsKKyAgICAgICdmb3JtYXQnIDogJyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS04cyAlKG5hbWUpLTE1cyAlKG1lc3NhZ2UpcycsCisgICAgICAnZGF0ZWZtdCcgOiAnJVktJW0tJWQgJUg6JU06JVMnCisgICAgfQorCityZXNwZWN0aXZlbHksIGFuZCBhcyB0aGVzZSBkaWN0aW9uYXJpZXMgZG8gbm90IGNvbnRhaW4gdGhlIHNwZWNpYWwga2V5CitgYCcoKSdgYCwgdGhlIGluc3RhbnRpYXRpb24gaXMgaW5mZXJyZWQgZnJvbSB0aGUgY29udGV4dDogYXMgYSByZXN1bHQsCitzdGFuZGFyZCA6Y2xhc3M6YGxvZ2dpbmcuRm9ybWF0dGVyYCBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuICBUaGUKK2NvbmZpZ3VyYXRpb24gc3ViLWRpY3Rpb25hcnkgZm9yIHRoZSB0aGlyZCBmb3JtYXR0ZXIsIHdpdGggaWQKK2BgY3VzdG9tYGAsIGlzOjoKKworICB7CisgICAgJygpJyA6ICdteS5wYWNrYWdlLmN1c3RvbUZvcm1hdHRlckZhY3RvcnknLAorICAgICdiYXInIDogJ2JheicsCisgICAgJ3NwYW0nIDogOTkuOSwKKyAgICAnYW5zd2VyJyA6IDQyCisgIH0KKworYW5kIHRoaXMgY29udGFpbnMgdGhlIHNwZWNpYWwga2V5IGBgJygpJ2BgLCB3aGljaCBtZWFucyB0aGF0Cit1c2VyLWRlZmluZWQgaW5zdGFudGlhdGlvbiBpcyB3YW50ZWQuICBJbiB0aGlzIGNhc2UsIHRoZSBzcGVjaWZpZWQKK2ZhY3RvcnkgY2FsbGFibGUgd2lsbCBiZSB1c2VkLiBJZiBpdCBpcyBhbiBhY3R1YWwgY2FsbGFibGUgaXQgd2lsbCBiZQordXNlZCBkaXJlY3RseSAtIG90aGVyd2lzZSwgaWYgeW91IHNwZWNpZnkgYSBzdHJpbmcgKGFzIGluIHRoZSBleGFtcGxlKQordGhlIGFjdHVhbCBjYWxsYWJsZSB3aWxsIGJlIGxvY2F0ZWQgdXNpbmcgbm9ybWFsIGltcG9ydCBtZWNoYW5pc21zLgorVGhlIGNhbGxhYmxlIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlICoqcmVtYWluaW5nKiogaXRlbXMgaW4gdGhlCitjb25maWd1cmF0aW9uIHN1Yi1kaWN0aW9uYXJ5IGFzIGtleXdvcmQgYXJndW1lbnRzLiAgSW4gdGhlIGFib3ZlCitleGFtcGxlLCB0aGUgZm9ybWF0dGVyIHdpdGggaWQgYGBjdXN0b21gYCB3aWxsIGJlIGFzc3VtZWQgdG8gYmUKK3JldHVybmVkIGJ5IHRoZSBjYWxsOjoKKworICAgIG15LnBhY2thZ2UuY3VzdG9tRm9ybWF0dGVyRmFjdG9yeShiYXI9J2JheicsIHNwYW09OTkuOSwgYW5zd2VyPTQyKQorCitUaGUga2V5IGBgJygpJ2BgIGhhcyBiZWVuIHVzZWQgYXMgdGhlIHNwZWNpYWwga2V5IGJlY2F1c2UgaXQgaXMgbm90IGEKK3ZhbGlkIGtleXdvcmQgcGFyYW1ldGVyIG5hbWUsIGFuZCBzbyB3aWxsIG5vdCBjbGFzaCB3aXRoIHRoZSBuYW1lcyBvZgordGhlIGtleXdvcmQgYXJndW1lbnRzIHVzZWQgaW4gdGhlIGNhbGwuICBUaGUgYGAnKCknYGAgYWxzbyBzZXJ2ZXMgYXMgYQorbW5lbW9uaWMgdGhhdCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpcyBhIGNhbGxhYmxlLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LWV4dGVybmFsb2JqOgorCitBY2Nlc3MgdG8gZXh0ZXJuYWwgb2JqZWN0cworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworVGhlcmUgYXJlIHRpbWVzIHdoZXJlIGEgY29uZmlndXJhdGlvbiBuZWVkcyB0byByZWZlciB0byBvYmplY3RzCitleHRlcm5hbCB0byB0aGUgY29uZmlndXJhdGlvbiwgZm9yIGV4YW1wbGUgYGBzeXMuc3RkZXJyYGAuICBJZiB0aGUKK2NvbmZpZ3VyYXRpb24gZGljdCBpcyBjb25zdHJ1Y3RlZCB1c2luZyBQeXRob24gY29kZSwgdGhpcyBpcworc3RyYWlnaHRmb3J3YXJkLCBidXQgYSBwcm9ibGVtIGFyaXNlcyB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGlzCitwcm92aWRlZCB2aWEgYSB0ZXh0IGZpbGUgKGUuZy4gSlNPTiwgWUFNTCkuICBJbiBhIHRleHQgZmlsZSwgdGhlcmUgaXMKK25vIHN0YW5kYXJkIHdheSB0byBkaXN0aW5ndWlzaCBgYHN5cy5zdGRlcnJgYCBmcm9tIHRoZSBsaXRlcmFsIHN0cmluZworYGAnc3lzLnN0ZGVycidgYC4gIFRvIGZhY2lsaXRhdGUgdGhpcyBkaXN0aW5jdGlvbiwgdGhlIGNvbmZpZ3VyYXRpb24KK3N5c3RlbSBsb29rcyBmb3IgY2VydGFpbiBzcGVjaWFsIHByZWZpeGVzIGluIHN0cmluZyB2YWx1ZXMgYW5kCit0cmVhdCB0aGVtIHNwZWNpYWxseS4gIEZvciBleGFtcGxlLCBpZiB0aGUgbGl0ZXJhbCBzdHJpbmcKK2BgJ2V4dDovL3N5cy5zdGRlcnInYGAgaXMgcHJvdmlkZWQgYXMgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiwKK3RoZW4gdGhlIGBgZXh0Oi8vYGAgd2lsbCBiZSBzdHJpcHBlZCBvZmYgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlCit2YWx1ZSBwcm9jZXNzZWQgdXNpbmcgbm9ybWFsIGltcG9ydCBtZWNoYW5pc21zLgorCitUaGUgaGFuZGxpbmcgb2Ygc3VjaCBwcmVmaXhlcyBpcyBkb25lIGluIGEgd2F5IGFuYWxvZ291cyB0byBwcm90b2NvbAoraGFuZGxpbmc6IHRoZXJlIGlzIGEgZ2VuZXJpYyBtZWNoYW5pc20gdG8gbG9vayBmb3IgcHJlZml4ZXMgd2hpY2gKK21hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gYGBeKD9QPHByZWZpeD5bYS16XSspOi8vKD9QPHN1ZmZpeD4uKikkYGAKK3doZXJlYnksIGlmIHRoZSBgYHByZWZpeGBgIGlzIHJlY29nbmlzZWQsIHRoZSBgYHN1ZmZpeGBgIGlzIHByb2Nlc3NlZAoraW4gYSBwcmVmaXgtZGVwZW5kZW50IG1hbm5lciBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgcHJvY2Vzc2luZyByZXBsYWNlcwordGhlIHN0cmluZyB2YWx1ZS4gIElmIHRoZSBwcmVmaXggaXMgbm90IHJlY29nbmlzZWQsIHRoZW4gdGhlIHN0cmluZwordmFsdWUgd2lsbCBiZSBsZWZ0IGFzLWlzLgorCisKKy4uIF9sb2dnaW5nLWNvbmZpZy1kaWN0LWludGVybmFsb2JqOgorCitBY2Nlc3MgdG8gaW50ZXJuYWwgb2JqZWN0cworIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIKKworQXMgd2VsbCBhcyBleHRlcm5hbCBvYmplY3RzLCB0aGVyZSBpcyBzb21ldGltZXMgYWxzbyBhIG5lZWQgdG8gcmVmZXIKK3RvIG9iamVjdHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIHdpbGwgYmUgZG9uZSBpbXBsaWNpdGx5IGJ5IHRoZQorY29uZmlndXJhdGlvbiBzeXN0ZW0gZm9yIHRoaW5ncyB0aGF0IGl0IGtub3dzIGFib3V0LiAgRm9yIGV4YW1wbGUsIHRoZQorc3RyaW5nIHZhbHVlIGBgJ0RFQlVHJ2BgIGZvciBhIGBgbGV2ZWxgYCBpbiBhIGxvZ2dlciBvciBoYW5kbGVyIHdpbGwKK2F1dG9tYXRpY2FsbHkgYmUgY29udmVydGVkIHRvIHRoZSB2YWx1ZSBgYGxvZ2dpbmcuREVCVUdgYCwgYW5kIHRoZQorYGBoYW5kbGVyc2BgLCBgYGZpbHRlcnNgYCBhbmQgYGBmb3JtYXR0ZXJgYCBlbnRyaWVzIHdpbGwgdGFrZSBhbgorb2JqZWN0IGlkIGFuZCByZXNvbHZlIHRvIHRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbiBvYmplY3QuCisKK0hvd2V2ZXIsIGEgbW9yZSBnZW5lcmljIG1lY2hhbmlzbSBpcyBuZWVkZWQgZm9yIHVzZXItZGVmaW5lZAorb2JqZWN0cyB3aGljaCBhcmUgbm90IGtub3duIHRvIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUuICBGb3IKK2V4YW1wbGUsIGNvbnNpZGVyIDpjbGFzczpgbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyYCwgd2hpY2ggdGFrZXMKK2EgYGB0YXJnZXRgYCBhcmd1bWVudCB3aGljaCBpcyBhbm90aGVyIGhhbmRsZXIgdG8gZGVsZWdhdGUgdG8uIFNpbmNlCit0aGUgc3lzdGVtIGFscmVhZHkga25vd3MgYWJvdXQgdGhpcyBjbGFzcywgdGhlbiBpbiB0aGUgY29uZmlndXJhdGlvbiwKK3RoZSBnaXZlbiBgYHRhcmdldGBgIGp1c3QgbmVlZHMgdG8gYmUgdGhlIG9iamVjdCBpZCBvZiB0aGUgcmVsZXZhbnQKK3RhcmdldCBoYW5kbGVyLCBhbmQgdGhlIHN5c3RlbSB3aWxsIHJlc29sdmUgdG8gdGhlIGhhbmRsZXIgZnJvbSB0aGUKK2lkLiAgSWYsIGhvd2V2ZXIsIGEgdXNlciBkZWZpbmVzIGEgYGBteS5wYWNrYWdlLk15SGFuZGxlcmBgIHdoaWNoIGhhcworYW4gYGBhbHRlcm5hdGVgYCBoYW5kbGVyLCB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gd291bGQgbm90IGtub3cgdGhhdAordGhlIGBgYWx0ZXJuYXRlYGAgcmVmZXJyZWQgdG8gYSBoYW5kbGVyLiAgVG8gY2F0ZXIgZm9yIHRoaXMsIGEgZ2VuZXJpYworcmVzb2x1dGlvbiBzeXN0ZW0gYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnk6OgorCisgICAgaGFuZGxlcnM6CisgICAgICBmaWxlOgorICAgICAgICAjIGNvbmZpZ3VyYXRpb24gb2YgZmlsZSBoYW5kbGVyIGdvZXMgaGVyZQorCisgICAgICBjdXN0b206CisgICAgICAgICgpOiBteS5wYWNrYWdlLk15SGFuZGxlcgorICAgICAgICBhbHRlcm5hdGU6IGNmZzovL2hhbmRsZXJzLmZpbGUKKworVGhlIGxpdGVyYWwgc3RyaW5nIGBgJ2NmZzovL2hhbmRsZXJzLmZpbGUnYGAgd2lsbCBiZSByZXNvbHZlZCBpbiBhbgorYW5hbG9nb3VzIHdheSB0byBzdHJpbmdzIHdpdGggdGhlIGBgZXh0Oi8vYGAgcHJlZml4LCBidXQgbG9va2luZworaW4gdGhlIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHJhdGhlciB0aGFuIHRoZSBpbXBvcnQgbmFtZXNwYWNlLiAgVGhlCittZWNoYW5pc20gYWxsb3dzIGFjY2VzcyBieSBkb3Qgb3IgYnkgaW5kZXgsIGluIGEgc2ltaWxhciB3YXkgdG8KK3RoYXQgcHJvdmlkZWQgYnkgYGBzdHIuZm9ybWF0YGAuICBUaHVzLCBnaXZlbiB0aGUgZm9sbG93aW5nIHNuaXBwZXQ6OgorCisgICAgaGFuZGxlcnM6CisgICAgICBlbWFpbDoKKyAgICAgICAgY2xhc3M6IGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIKKyAgICAgICAgbWFpbGhvc3Q6IGxvY2FsaG9zdAorICAgICAgICBmcm9tYWRkcjogbXlfYXBwQGRvbWFpbi50bGQKKyAgICAgICAgdG9hZGRyczoKKyAgICAgICAgICAtIHN1cHBvcnRfdGVhbUBkb21haW4udGxkCisgICAgICAgICAgLSBkZXZfdGVhbUBkb21haW4udGxkCisgICAgICAgIHN1YmplY3Q6IEhvdXN0b24sIHdlIGhhdmUgYSBwcm9ibGVtLgorCitpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlIHN0cmluZyBgYCdjZmc6Ly9oYW5kbGVycydgYCB3b3VsZCByZXNvbHZlIHRvCit0aGUgZGljdCB3aXRoIGtleSBgYGhhbmRsZXJzYGAsIHRoZSBzdHJpbmcgYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWxgYAord291bGQgcmVzb2x2ZSB0byB0aGUgZGljdCB3aXRoIGtleSBgYGVtYWlsYGAgaW4gdGhlIGBgaGFuZGxlcnNgYCBkaWN0LAorYW5kIHNvIG9uLiAgVGhlIHN0cmluZyBgYCdjZmc6Ly9oYW5kbGVycy5lbWFpbC50b2FkZHJzWzFdYGAgd291bGQKK3Jlc29sdmUgdG8gYGAnZGV2X3RlYW0uZG9tYWluLnRsZCdgYCBhbmQgdGhlIHN0cmluZworYGAnY2ZnOi8vaGFuZGxlcnMuZW1haWwudG9hZGRyc1swXSdgYCB3b3VsZCByZXNvbHZlIHRvIHRoZSB2YWx1ZQorYGAnc3VwcG9ydF90ZWFtQGRvbWFpbi50bGQnYGAuIFRoZSBgYHN1YmplY3RgYCB2YWx1ZSBjb3VsZCBiZSBhY2Nlc3NlZAordXNpbmcgZWl0aGVyIGBgJ2NmZzovL2hhbmRsZXJzLmVtYWlsLnN1YmplY3QnYGAgb3IsIGVxdWl2YWxlbnRseSwKK2BgJ2NmZzovL2hhbmRsZXJzLmVtYWlsW3N1YmplY3RdJ2BgLiAgVGhlIGxhdHRlciBmb3JtIG9ubHkgbmVlZHMgdG8gYmUKK3VzZWQgaWYgdGhlIGtleSBjb250YWlucyBzcGFjZXMgb3Igbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLiAgSWYgYW4KK2luZGV4IHZhbHVlIGNvbnNpc3RzIG9ubHkgb2YgZGVjaW1hbCBkaWdpdHMsIGFjY2VzcyB3aWxsIGJlIGF0dGVtcHRlZAordXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZWdlciB2YWx1ZSwgZmFsbGluZyBiYWNrIHRvIHRoZSBzdHJpbmcKK3ZhbHVlIGlmIG5lZWRlZC4KKworR2l2ZW4gYSBzdHJpbmcgYGBjZmc6Ly9oYW5kbGVycy5teWhhbmRsZXIubXlrZXkuMTIzYGAsIHRoaXMgd2lsbAorcmVzb2x2ZSB0byBgYGNvbmZpZ19kaWN0WydoYW5kbGVycyddWydteWhhbmRsZXInXVsnbXlrZXknXVsnMTIzJ11gYC4KK0lmIHRoZSBzdHJpbmcgaXMgc3BlY2lmaWVkIGFzIGBgY2ZnOi8vaGFuZGxlcnMubXloYW5kbGVyLm15a2V5WzEyM11gYCwKK3RoZSBzeXN0ZW0gd2lsbCBhdHRlbXB0IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tCitgYGNvbmZpZ19kaWN0WydoYW5kbGVycyddWydteWhhbmRsZXInXVsnbXlrZXknXVsxMjNdYGAsIGFuZCBmYWxsIGJhY2sKK3RvIGBgY29uZmlnX2RpY3RbJ2hhbmRsZXJzJ11bJ215aGFuZGxlciddWydteWtleSddWycxMjMnXWBgIGlmIHRoYXQKK2ZhaWxzLgorCisuLiBfbG9nZ2luZy1jb25maWctZmlsZWZvcm1hdDoKKworQ29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgY29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdCB1bmRlcnN0b29kIGJ5IDpmdW5jOmBmaWxlQ29uZmlnYCBpcyBiYXNlZCBvbgorOm1vZDpgY29uZmlncGFyc2VyYCBmdW5jdGlvbmFsaXR5LiBUaGUgZmlsZSBtdXN0IGNvbnRhaW4gc2VjdGlvbnMgY2FsbGVkCitgYFtsb2dnZXJzXWBgLCBgYFtoYW5kbGVyc11gYCBhbmQgYGBbZm9ybWF0dGVyc11gYCB3aGljaCBpZGVudGlmeSBieSBuYW1lIHRoZQorZW50aXRpZXMgb2YgZWFjaCB0eXBlIHdoaWNoIGFyZSBkZWZpbmVkIGluIHRoZSBmaWxlLiBGb3IgZWFjaCBzdWNoIGVudGl0eSwgdGhlcmUKK2lzIGEgc2VwYXJhdGUgc2VjdGlvbiB3aGljaCBpZGVudGlmaWVzIGhvdyB0aGF0IGVudGl0eSBpcyBjb25maWd1cmVkLiAgVGh1cywgZm9yCithIGxvZ2dlciBuYW1lZCBgYGxvZzAxYGAgaW4gdGhlIGBgW2xvZ2dlcnNdYGAgc2VjdGlvbiwgdGhlIHJlbGV2YW50Citjb25maWd1cmF0aW9uIGRldGFpbHMgYXJlIGhlbGQgaW4gYSBzZWN0aW9uIGBgW2xvZ2dlcl9sb2cwMV1gYC4gU2ltaWxhcmx5LCBhCitoYW5kbGVyIGNhbGxlZCBgYGhhbmQwMWBgIGluIHRoZSBgYFtoYW5kbGVyc11gYCBzZWN0aW9uIHdpbGwgaGF2ZSBpdHMKK2NvbmZpZ3VyYXRpb24gaGVsZCBpbiBhIHNlY3Rpb24gY2FsbGVkIGBgW2hhbmRsZXJfaGFuZDAxXWBgLCB3aGlsZSBhIGZvcm1hdHRlcgorY2FsbGVkIGBgZm9ybTAxYGAgaW4gdGhlIGBgW2Zvcm1hdHRlcnNdYGAgc2VjdGlvbiB3aWxsIGhhdmUgaXRzIGNvbmZpZ3VyYXRpb24KK3NwZWNpZmllZCBpbiBhIHNlY3Rpb24gY2FsbGVkIGBgW2Zvcm1hdHRlcl9mb3JtMDFdYGAuIFRoZSByb290IGxvZ2dlcgorY29uZmlndXJhdGlvbiBtdXN0IGJlIHNwZWNpZmllZCBpbiBhIHNlY3Rpb24gY2FsbGVkIGBgW2xvZ2dlcl9yb290XWBgLgorCitFeGFtcGxlcyBvZiB0aGVzZSBzZWN0aW9ucyBpbiB0aGUgZmlsZSBhcmUgZ2l2ZW4gYmVsb3cuIDo6CisKKyAgIFtsb2dnZXJzXQorICAga2V5cz1yb290LGxvZzAyLGxvZzAzLGxvZzA0LGxvZzA1LGxvZzA2LGxvZzA3CisKKyAgIFtoYW5kbGVyc10KKyAgIGtleXM9aGFuZDAxLGhhbmQwMixoYW5kMDMsaGFuZDA0LGhhbmQwNSxoYW5kMDYsaGFuZDA3LGhhbmQwOCxoYW5kMDkKKworICAgW2Zvcm1hdHRlcnNdCisgICBrZXlzPWZvcm0wMSxmb3JtMDIsZm9ybTAzLGZvcm0wNCxmb3JtMDUsZm9ybTA2LGZvcm0wNyxmb3JtMDgsZm9ybTA5CisKK1RoZSByb290IGxvZ2dlciBtdXN0IHNwZWNpZnkgYSBsZXZlbCBhbmQgYSBsaXN0IG9mIGhhbmRsZXJzLiBBbiBleGFtcGxlIG9mIGEKK3Jvb3QgbG9nZ2VyIHNlY3Rpb24gaXMgZ2l2ZW4gYmVsb3cuIDo6CisKKyAgIFtsb2dnZXJfcm9vdF0KKyAgIGxldmVsPU5PVFNFVAorICAgaGFuZGxlcnM9aGFuZDAxCisKK1RoZSBgYGxldmVsYGAgZW50cnkgY2FuIGJlIG9uZSBvZiBgYERFQlVHLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgQ1JJVElDQUxgYCBvcgorYGBOT1RTRVRgYC4gRm9yIHRoZSByb290IGxvZ2dlciBvbmx5LCBgYE5PVFNFVGBgIG1lYW5zIHRoYXQgYWxsIG1lc3NhZ2VzIHdpbGwgYmUKK2xvZ2dlZC4gTGV2ZWwgdmFsdWVzIGFyZSA6ZnVuYzpgZXZhbGBcIHVhdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgYGxvZ2dpbmdgYAorcGFja2FnZSdzIG5hbWVzcGFjZS4KKworVGhlIGBgaGFuZGxlcnNgYCBlbnRyeSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGhhbmRsZXIgbmFtZXMsIHdoaWNoIG11c3QKK2FwcGVhciBpbiB0aGUgYGBbaGFuZGxlcnNdYGAgc2VjdGlvbi4gVGhlc2UgbmFtZXMgbXVzdCBhcHBlYXIgaW4gdGhlCitgYFtoYW5kbGVyc11gYCBzZWN0aW9uIGFuZCBoYXZlIGNvcnJlc3BvbmRpbmcgc2VjdGlvbnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KK2ZpbGUuCisKK0ZvciBsb2dnZXJzIG90aGVyIHRoYW4gdGhlIHJvb3QgbG9nZ2VyLCBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuCitUaGlzIGlzIGlsbHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgZXhhbXBsZS4gOjoKKworICAgW2xvZ2dlcl9wYXJzZXJdCisgICBsZXZlbD1ERUJVRworICAgaGFuZGxlcnM9aGFuZDAxCisgICBwcm9wYWdhdGU9MQorICAgcXVhbG5hbWU9Y29tcGlsZXIucGFyc2VyCisKK1RoZSBgYGxldmVsYGAgYW5kIGBgaGFuZGxlcnNgYCBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyBmb3IgdGhlIHJvb3QgbG9nZ2VyLAorZXhjZXB0IHRoYXQgaWYgYSBub24tcm9vdCBsb2dnZXIncyBsZXZlbCBpcyBzcGVjaWZpZWQgYXMgYGBOT1RTRVRgYCwgdGhlIHN5c3RlbQorY29uc3VsdHMgbG9nZ2VycyBoaWdoZXIgdXAgdGhlIGhpZXJhcmNoeSB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBsZXZlbCBvZiB0aGUKK2xvZ2dlci4gVGhlIGBgcHJvcGFnYXRlYGAgZW50cnkgaXMgc2V0IHRvIDEgdG8gaW5kaWNhdGUgdGhhdCBtZXNzYWdlcyBtdXN0Citwcm9wYWdhdGUgdG8gaGFuZGxlcnMgaGlnaGVyIHVwIHRoZSBsb2dnZXIgaGllcmFyY2h5IGZyb20gdGhpcyBsb2dnZXIsIG9yIDAgdG8KK2luZGljYXRlIHRoYXQgbWVzc2FnZXMgYXJlICoqbm90KiogcHJvcGFnYXRlZCB0byBoYW5kbGVycyB1cCB0aGUgaGllcmFyY2h5LiBUaGUKK2BgcXVhbG5hbWVgYCBlbnRyeSBpcyB0aGUgaGllcmFyY2hpY2FsIGNoYW5uZWwgbmFtZSBvZiB0aGUgbG9nZ2VyLCB0aGF0IGlzIHRvCitzYXkgdGhlIG5hbWUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBsb2dnZXIuCisKK1NlY3Rpb25zIHdoaWNoIHNwZWNpZnkgaGFuZGxlciBjb25maWd1cmF0aW9uIGFyZSBleGVtcGxpZmllZCBieSB0aGUgZm9sbG93aW5nLgorOjoKKworICAgW2hhbmRsZXJfaGFuZDAxXQorICAgY2xhc3M9U3RyZWFtSGFuZGxlcgorICAgbGV2ZWw9Tk9UU0VUCisgICBmb3JtYXR0ZXI9Zm9ybTAxCisgICBhcmdzPShzeXMuc3Rkb3V0LCkKKworVGhlIGBgY2xhc3NgYCBlbnRyeSBpbmRpY2F0ZXMgdGhlIGhhbmRsZXIncyBjbGFzcyAoYXMgZGV0ZXJtaW5lZCBieSA6ZnVuYzpgZXZhbGAKK2luIHRoZSBgYGxvZ2dpbmdgYCBwYWNrYWdlJ3MgbmFtZXNwYWNlKS4gVGhlIGBgbGV2ZWxgYCBpcyBpbnRlcnByZXRlZCBhcyBmb3IKK2xvZ2dlcnMsIGFuZCBgYE5PVFNFVGBgIGlzIHRha2VuIHRvIG1lYW4gJ2xvZyBldmVyeXRoaW5nJy4KKworVGhlIGBgZm9ybWF0dGVyYGAgZW50cnkgaW5kaWNhdGVzIHRoZSBrZXkgbmFtZSBvZiB0aGUgZm9ybWF0dGVyIGZvciB0aGlzCitoYW5kbGVyLiBJZiBibGFuaywgYSBkZWZhdWx0IGZvcm1hdHRlciAoYGBsb2dnaW5nLl9kZWZhdWx0Rm9ybWF0dGVyYGApIGlzIHVzZWQuCitJZiBhIG5hbWUgaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGFwcGVhciBpbiB0aGUgYGBbZm9ybWF0dGVyc11gYCBzZWN0aW9uIGFuZCBoYXZlCithIGNvcnJlc3BvbmRpbmcgc2VjdGlvbiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorCitUaGUgYGBhcmdzYGAgZW50cnksIHdoZW4gOmZ1bmM6YGV2YWxgXCB1YXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYGBsb2dnaW5nYGAKK3BhY2thZ2UncyBuYW1lc3BhY2UsIGlzIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBoYW5kbGVyCitjbGFzcy4gUmVmZXIgdG8gdGhlIGNvbnN0cnVjdG9ycyBmb3IgdGhlIHJlbGV2YW50IGhhbmRsZXJzLCBvciB0byB0aGUgZXhhbXBsZXMKK2JlbG93LCB0byBzZWUgaG93IHR5cGljYWwgZW50cmllcyBhcmUgY29uc3RydWN0ZWQuIDo6CisKKyAgIFtoYW5kbGVyX2hhbmQwMl0KKyAgIGNsYXNzPUZpbGVIYW5kbGVyCisgICBsZXZlbD1ERUJVRworICAgZm9ybWF0dGVyPWZvcm0wMgorICAgYXJncz0oJ3B5dGhvbi5sb2cnLCAndycpCisKKyAgIFtoYW5kbGVyX2hhbmQwM10KKyAgIGNsYXNzPWhhbmRsZXJzLlNvY2tldEhhbmRsZXIKKyAgIGxldmVsPUlORk8KKyAgIGZvcm1hdHRlcj1mb3JtMDMKKyAgIGFyZ3M9KCdsb2NhbGhvc3QnLCBoYW5kbGVycy5ERUZBVUxUX1RDUF9MT0dHSU5HX1BPUlQpCisKKyAgIFtoYW5kbGVyX2hhbmQwNF0KKyAgIGNsYXNzPWhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgorICAgbGV2ZWw9V0FSTgorICAgZm9ybWF0dGVyPWZvcm0wNAorICAgYXJncz0oJ2xvY2FsaG9zdCcsIGhhbmRsZXJzLkRFRkFVTFRfVURQX0xPR0dJTkdfUE9SVCkKKworICAgW2hhbmRsZXJfaGFuZDA1XQorICAgY2xhc3M9aGFuZGxlcnMuU3lzTG9nSGFuZGxlcgorICAgbGV2ZWw9RVJST1IKKyAgIGZvcm1hdHRlcj1mb3JtMDUKKyAgIGFyZ3M9KCgnbG9jYWxob3N0JywgaGFuZGxlcnMuU1lTTE9HX1VEUF9QT1JUKSwgaGFuZGxlcnMuU3lzTG9nSGFuZGxlci5MT0dfVVNFUikKKworICAgW2hhbmRsZXJfaGFuZDA2XQorICAgY2xhc3M9aGFuZGxlcnMuTlRFdmVudExvZ0hhbmRsZXIKKyAgIGxldmVsPUNSSVRJQ0FMCisgICBmb3JtYXR0ZXI9Zm9ybTA2CisgICBhcmdzPSgnUHl0aG9uIEFwcGxpY2F0aW9uJywgJycsICdBcHBsaWNhdGlvbicpCisKKyAgIFtoYW5kbGVyX2hhbmQwN10KKyAgIGNsYXNzPWhhbmRsZXJzLlNNVFBIYW5kbGVyCisgICBsZXZlbD1XQVJOCisgICBmb3JtYXR0ZXI9Zm9ybTA3CisgICBhcmdzPSgnbG9jYWxob3N0JywgJ2Zyb21AYWJjJywgWyd1c2VyMUBhYmMnLCAndXNlcjJAeHl6J10sICdMb2dnZXIgU3ViamVjdCcpCisKKyAgIFtoYW5kbGVyX2hhbmQwOF0KKyAgIGNsYXNzPWhhbmRsZXJzLk1lbW9yeUhhbmRsZXIKKyAgIGxldmVsPU5PVFNFVAorICAgZm9ybWF0dGVyPWZvcm0wOAorICAgdGFyZ2V0PQorICAgYXJncz0oMTAsIEVSUk9SKQorCisgICBbaGFuZGxlcl9oYW5kMDldCisgICBjbGFzcz1oYW5kbGVycy5IVFRQSGFuZGxlcgorICAgbGV2ZWw9Tk9UU0VUCisgICBmb3JtYXR0ZXI9Zm9ybTA5CisgICBhcmdzPSgnbG9jYWxob3N0OjkwMjInLCAnL2xvZycsICdHRVQnKQorCitTZWN0aW9ucyB3aGljaCBzcGVjaWZ5IGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGFyZSB0eXBpZmllZCBieSB0aGUgZm9sbG93aW5nLiA6OgorCisgICBbZm9ybWF0dGVyX2Zvcm0wMV0KKyAgIGZvcm1hdD1GMSAlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzICUobWVzc2FnZSlzCisgICBkYXRlZm10PQorICAgY2xhc3M9bG9nZ2luZy5Gb3JtYXR0ZXIKKworVGhlIGBgZm9ybWF0YGAgZW50cnkgaXMgdGhlIG92ZXJhbGwgZm9ybWF0IHN0cmluZywgYW5kIHRoZSBgYGRhdGVmbXRgYCBlbnRyeSBpcwordGhlIDpmdW5jOmBzdHJmdGltZWBcIC1jb21wYXRpYmxlIGRhdGUvdGltZSBmb3JtYXQgc3RyaW5nLiAgSWYgZW1wdHksIHRoZQorcGFja2FnZSBzdWJzdGl0dXRlcyBJU084NjAxIGZvcm1hdCBkYXRlL3RpbWVzLCB3aGljaCBpcyBhbG1vc3QgZXF1aXZhbGVudCB0bworc3BlY2lmeWluZyB0aGUgZGF0ZSBmb3JtYXQgc3RyaW5nIGBgJyVZLSVtLSVkICVIOiVNOiVTJ2BgLiAgVGhlIElTTzg2MDEgZm9ybWF0CithbHNvIHNwZWNpZmllcyBtaWxsaXNlY29uZHMsIHdoaWNoIGFyZSBhcHBlbmRlZCB0byB0aGUgcmVzdWx0IG9mIHVzaW5nIHRoZSBhYm92ZQorZm9ybWF0IHN0cmluZywgd2l0aCBhIGNvbW1hIHNlcGFyYXRvci4gIEFuIGV4YW1wbGUgdGltZSBpbiBJU084NjAxIGZvcm1hdCBpcworYGAyMDAzLTAxLTIzIDAwOjI5OjUwLDQxMWBgLgorCitUaGUgYGBjbGFzc2BgIGVudHJ5IGlzIG9wdGlvbmFsLiAgSXQgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBmb3JtYXR0ZXIncyBjbGFzcworKGFzIGEgZG90dGVkIG1vZHVsZSBhbmQgY2xhc3MgbmFtZS4pICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIGluc3RhbnRpYXRpbmcgYQorOmNsYXNzOmBGb3JtYXR0ZXJgIHN1YmNsYXNzLiAgU3ViY2xhc3NlcyBvZiA6Y2xhc3M6YEZvcm1hdHRlcmAgY2FuIHByZXNlbnQKK2V4Y2VwdGlvbiB0cmFjZWJhY2tzIGluIGFuIGV4cGFuZGVkIG9yIGNvbmRlbnNlZCBmb3JtYXQuCisKKy4uIHNlZWFsc286OgorCisgICBNb2R1bGUgOm1vZDpgbG9nZ2luZ2AKKyAgICAgIEFQSSByZWZlcmVuY2UgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4KKworICAgTW9kdWxlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgCisgICAgICBVc2VmdWwgaGFuZGxlcnMgaW5jbHVkZWQgd2l0aCB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGE5MzAyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvbG9nZ2luZy5oYW5kbGVycy5yc3QKQEAgLTAsMCArMSw4NTAgQEAKKzptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIC0tLSBMb2dnaW5nIGhhbmRsZXJzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBsb2dnaW5nLmhhbmRsZXJzCisgICA6c3lub3BzaXM6IEhhbmRsZXJzIGZvciB0aGUgbG9nZ2luZyBtb2R1bGUuCisKKworLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KKy4uIHNlY3Rpb25hdXRob3I6OiBWaW5heSBTYWppcCA8dmluYXlfc2FqaXBAcmVkLWRvdmUuY29tPgorCisuLiBzaWRlYmFyOjogSW1wb3J0YW50CisKKyAgIFRoaXMgcGFnZSBjb250YWlucyBvbmx5IHJlZmVyZW5jZSBpbmZvcm1hdGlvbi4gRm9yIHR1dG9yaWFscywKKyAgIHBsZWFzZSBzZWUKKworICAgKiA6cmVmOmBCYXNpYyBUdXRvcmlhbCA8bG9nZ2luZy1iYXNpYy10dXRvcmlhbD5gCisgICAqIDpyZWY6YEFkdmFuY2VkIFR1dG9yaWFsIDxsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsPmAKKyAgICogOnJlZjpgTG9nZ2luZyBDb29rYm9vayA8bG9nZ2luZy1jb29rYm9vaz5gCisKKy4uIGN1cnJlbnRtb2R1bGU6OiBsb2dnaW5nCisKK1RoZSBmb2xsb3dpbmcgdXNlZnVsIGhhbmRsZXJzIGFyZSBwcm92aWRlZCBpbiB0aGUgcGFja2FnZS4gTm90ZSB0aGF0IHRocmVlIG9mCit0aGUgaGFuZGxlcnMgKDpjbGFzczpgU3RyZWFtSGFuZGxlcmAsIDpjbGFzczpgRmlsZUhhbmRsZXJgIGFuZAorOmNsYXNzOmBOdWxsSGFuZGxlcmApIGFyZSBhY3R1YWxseSBkZWZpbmVkIGluIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaXRzZWxmLAorYnV0IGhhdmUgYmVlbiBkb2N1bWVudGVkIGhlcmUgYWxvbmcgd2l0aCB0aGUgb3RoZXIgaGFuZGxlcnMuCisKKy4uIF9zdHJlYW0taGFuZGxlcjoKKworU3RyZWFtSGFuZGxlcgorXl5eXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBTdHJlYW1IYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgY29yZSA6bW9kOmBsb2dnaW5nYCBwYWNrYWdlLAorc2VuZHMgbG9nZ2luZyBvdXRwdXQgdG8gc3RyZWFtcyBzdWNoIGFzICpzeXMuc3Rkb3V0KiwgKnN5cy5zdGRlcnIqIG9yIGFueQorZmlsZS1saWtlIG9iamVjdCAob3IsIG1vcmUgcHJlY2lzZWx5LCBhbnkgb2JqZWN0IHdoaWNoIHN1cHBvcnRzIDptZXRoOmB3cml0ZWAKK2FuZCA6bWV0aDpgZmx1c2hgIG1ldGhvZHMpLgorCisKKy4uIGNsYXNzOjogU3RyZWFtSGFuZGxlcihzdHJlYW09Tm9uZSkKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTdHJlYW1IYW5kbGVyYCBjbGFzcy4gSWYgKnN0cmVhbSogaXMKKyAgIHNwZWNpZmllZCwgdGhlIGluc3RhbmNlIHdpbGwgdXNlIGl0IGZvciBsb2dnaW5nIG91dHB1dDsgb3RoZXJ3aXNlLCAqc3lzLnN0ZGVycioKKyAgIHdpbGwgYmUgdXNlZC4KKworCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgSWYgYSBmb3JtYXR0ZXIgaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIHRvIGZvcm1hdCB0aGUgcmVjb3JkLiBUaGUgcmVjb3JkCisgICAgICBpcyB0aGVuIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSB3aXRoIGEgdGVybWluYXRvci4gSWYgZXhjZXB0aW9uIGluZm9ybWF0aW9uCisgICAgICBpcyBwcmVzZW50LCBpdCBpcyBmb3JtYXR0ZWQgdXNpbmcgOmZ1bmM6YHRyYWNlYmFjay5wcmludF9leGNlcHRpb25gIGFuZAorICAgICAgYXBwZW5kZWQgdG8gdGhlIHN0cmVhbS4KKworCisgICAuLiBtZXRob2Q6OiBmbHVzaCgpCisKKyAgICAgIEZsdXNoZXMgdGhlIHN0cmVhbSBieSBjYWxsaW5nIGl0cyA6bWV0aDpgZmx1c2hgIG1ldGhvZC4gTm90ZSB0aGF0IHRoZQorICAgICAgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgaW5oZXJpdGVkIGZyb20gOmNsYXNzOmBIYW5kbGVyYCBhbmQgc28gZG9lcworICAgICAgbm8gb3V0cHV0LCBzbyBhbiBleHBsaWNpdCA6bWV0aDpgZmx1c2hgIGNhbGwgbWF5IGJlIG5lZWRlZCBhdCB0aW1lcy4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIFRoZSBgYFN0cmVhbUhhbmRsZXJgYCBjbGFzcyBub3cgaGFzIGEgYGB0ZXJtaW5hdG9yYGAgYXR0cmlidXRlLCBkZWZhdWx0CisgICB2YWx1ZSBgYCdcbidgYCwgd2hpY2ggaXMgdXNlZCBhcyB0aGUgdGVybWluYXRvciB3aGVuIHdyaXRpbmcgYSBmb3JtYXR0ZWQKKyAgIHJlY29yZCB0byBhIHN0cmVhbS4gSWYgeW91IGRvbid0IHdhbnQgdGhpcyBuZXdsaW5lIHRlcm1pbmF0aW9uLCB5b3UgY2FuCisgICBzZXQgdGhlIGhhbmRsZXIgaW5zdGFuY2UncyBgYHRlcm1pbmF0b3JgYCBhdHRyaWJ1dGUgdG8gdGhlIGVtcHR5IHN0cmluZy4KKyAgIEluIGVhcmxpZXIgdmVyc2lvbnMsIHRoZSB0ZXJtaW5hdG9yIHdhcyBoYXJkY29kZWQgYXMgYGAnXG4nYGAuCisKKy4uIF9maWxlLWhhbmRsZXI6CisKK0ZpbGVIYW5kbGVyCiteXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBGaWxlSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIGNvcmUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZSwKK3NlbmRzIGxvZ2dpbmcgb3V0cHV0IHRvIGEgZGlzayBmaWxlLiAgSXQgaW5oZXJpdHMgdGhlIG91dHB1dCBmdW5jdGlvbmFsaXR5IGZyb20KKzpjbGFzczpgU3RyZWFtSGFuZGxlcmAuCisKKworLi4gY2xhc3M6OiBGaWxlSGFuZGxlcihmaWxlbmFtZSwgbW9kZT0nYScsIGVuY29kaW5nPU5vbmUsIGRlbGF5PUZhbHNlKQorCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlIHNwZWNpZmllZCBmaWxlIGlzCisgICBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gSWYgKm1vZGUqIGlzIG5vdCBzcGVjaWZpZWQsCisgICA6Y29uc3Q6YCdhJ2AgaXMgdXNlZC4gIElmICplbmNvZGluZyogaXMgbm90ICpOb25lKiwgaXQgaXMgdXNlZCB0byBvcGVuIHRoZSBmaWxlCisgICB3aXRoIHRoYXQgZW5jb2RpbmcuICBJZiAqZGVsYXkqIGlzIHRydWUsIHRoZW4gZmlsZSBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHRoZQorICAgZmlyc3QgY2FsbCB0byA6bWV0aDpgZW1pdGAuIEJ5IGRlZmF1bHQsIHRoZSBmaWxlIGdyb3dzIGluZGVmaW5pdGVseS4KKworCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlcyB0aGUgZmlsZS4KKworCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgT3V0cHV0cyB0aGUgcmVjb3JkIHRvIHRoZSBmaWxlLgorCisKKy4uIF9udWxsLWhhbmRsZXI6CisKK051bGxIYW5kbGVyCiteXl5eXl5eXl5eXgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKworVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSBjb3JlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UsCitkb2VzIG5vdCBkbyBhbnkgZm9ybWF0dGluZyBvciBvdXRwdXQuIEl0IGlzIGVzc2VudGlhbGx5IGEgJ25vLW9wJyBoYW5kbGVyCitmb3IgdXNlIGJ5IGxpYnJhcnkgZGV2ZWxvcGVycy4KKworLi4gY2xhc3M6OiBOdWxsSGFuZGxlcigpCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLgorCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgVGhpcyBtZXRob2QgZG9lcyBub3RoaW5nLgorCisgICAuLiBtZXRob2Q6OiBoYW5kbGUocmVjb3JkKQorCisgICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCisKKyAgIC4uIG1ldGhvZDo6IGNyZWF0ZUxvY2soKQorCisgICAgICBUaGlzIG1ldGhvZCByZXR1cm5zIGBgTm9uZWBgIGZvciB0aGUgbG9jaywgc2luY2UgdGhlcmUgaXMgbm8KKyAgICAgIHVuZGVybHlpbmcgSS9PIHRvIHdoaWNoIGFjY2VzcyBuZWVkcyB0byBiZSBzZXJpYWxpemVkLgorCisKK1NlZSA6cmVmOmBsaWJyYXJ5LWNvbmZpZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQorOmNsYXNzOmBOdWxsSGFuZGxlcmAuCisKKy4uIF93YXRjaGVkLWZpbGUtaGFuZGxlcjoKKworV2F0Y2hlZEZpbGVIYW5kbGVyCiteXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcuaGFuZGxlcnMKKworVGhlIDpjbGFzczpgV2F0Y2hlZEZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKK21vZHVsZSwgaXMgYSA6Y2xhc3M6YEZpbGVIYW5kbGVyYCB3aGljaCB3YXRjaGVzIHRoZSBmaWxlIGl0IGlzIGxvZ2dpbmcgdG8uIElmCit0aGUgZmlsZSBjaGFuZ2VzLCBpdCBpcyBjbG9zZWQgYW5kIHJlb3BlbmVkIHVzaW5nIHRoZSBmaWxlIG5hbWUuCisKK0EgZmlsZSBjaGFuZ2UgY2FuIGhhcHBlbiBiZWNhdXNlIG9mIHVzYWdlIG9mIHByb2dyYW1zIHN1Y2ggYXMgKm5ld3N5c2xvZyogYW5kCisqbG9ncm90YXRlKiB3aGljaCBwZXJmb3JtIGxvZyBmaWxlIHJvdGF0aW9uLiBUaGlzIGhhbmRsZXIsIGludGVuZGVkIGZvciB1c2UKK3VuZGVyIFVuaXgvTGludXgsIHdhdGNoZXMgdGhlIGZpbGUgdG8gc2VlIGlmIGl0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGVtaXQuCisoQSBmaWxlIGlzIGRlZW1lZCB0byBoYXZlIGNoYW5nZWQgaWYgaXRzIGRldmljZSBvciBpbm9kZSBoYXZlIGNoYW5nZWQuKSBJZiB0aGUKK2ZpbGUgaGFzIGNoYW5nZWQsIHRoZSBvbGQgZmlsZSBzdHJlYW0gaXMgY2xvc2VkLCBhbmQgdGhlIGZpbGUgb3BlbmVkIHRvIGdldCBhCituZXcgc3RyZWFtLgorCitUaGlzIGhhbmRsZXIgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1c2UgdW5kZXIgV2luZG93cywgYmVjYXVzZSB1bmRlciBXaW5kb3dzCitvcGVuIGxvZyBmaWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVuYW1lZCAtIGxvZ2dpbmcgb3BlbnMgdGhlIGZpbGVzIHdpdGgKK2V4Y2x1c2l2ZSBsb2NrcyAtIGFuZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBzdWNoIGEgaGFuZGxlci4gRnVydGhlcm1vcmUsCisqU1RfSU5PKiBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIFdpbmRvd3M7IDpmdW5jOmBzdGF0YCBhbHdheXMgcmV0dXJucyB6ZXJvIGZvcgordGhpcyB2YWx1ZS4KKworCisuLiBjbGFzczo6IFdhdGNoZWRGaWxlSGFuZGxlcihmaWxlbmFtZVssbW9kZVssIGVuY29kaW5nWywgZGVsYXldXV0pCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgV2F0Y2hlZEZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlIHNwZWNpZmllZAorICAgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gSWYgKm1vZGUqIGlzIG5vdCBzcGVjaWZpZWQsCisgICA6Y29uc3Q6YCdhJ2AgaXMgdXNlZC4gIElmICplbmNvZGluZyogaXMgbm90ICpOb25lKiwgaXQgaXMgdXNlZCB0byBvcGVuIHRoZSBmaWxlCisgICB3aXRoIHRoYXQgZW5jb2RpbmcuICBJZiAqZGVsYXkqIGlzIHRydWUsIHRoZW4gZmlsZSBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHRoZQorICAgZmlyc3QgY2FsbCB0byA6bWV0aDpgZW1pdGAuICBCeSBkZWZhdWx0LCB0aGUgZmlsZSBncm93cyBpbmRlZmluaXRlbHkuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIE91dHB1dHMgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgYnV0IGZpcnN0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGZpbGUgaGFzCisgICAgICBjaGFuZ2VkLiAgSWYgaXQgaGFzLCB0aGUgZXhpc3Rpbmcgc3RyZWFtIGlzIGZsdXNoZWQgYW5kIGNsb3NlZCBhbmQgdGhlCisgICAgICBmaWxlIG9wZW5lZCBhZ2FpbiwgYmVmb3JlIG91dHB1dHRpbmcgdGhlIHJlY29yZCB0byB0aGUgZmlsZS4KKworLi4gX3JvdGF0aW5nLWZpbGUtaGFuZGxlcjoKKworUm90YXRpbmdGaWxlSGFuZGxlcgorXl5eXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKK21vZHVsZSwgc3VwcG9ydHMgcm90YXRpb24gb2YgZGlzayBsb2cgZmlsZXMuCisKKworLi4gY2xhc3M6OiBSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCBtb2RlPSdhJywgbWF4Qnl0ZXM9MCwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9MCkKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlIHNwZWNpZmllZAorICAgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gSWYgKm1vZGUqIGlzIG5vdCBzcGVjaWZpZWQsCisgICBgYCdhJ2BgIGlzIHVzZWQuICBJZiAqZW5jb2RpbmcqIGlzIG5vdCAqTm9uZSosIGl0IGlzIHVzZWQgdG8gb3BlbiB0aGUgZmlsZQorICAgd2l0aCB0aGF0IGVuY29kaW5nLiAgSWYgKmRlbGF5KiBpcyB0cnVlLCB0aGVuIGZpbGUgb3BlbmluZyBpcyBkZWZlcnJlZCB1bnRpbCB0aGUKKyAgIGZpcnN0IGNhbGwgdG8gOm1ldGg6YGVtaXRgLiAgQnkgZGVmYXVsdCwgdGhlIGZpbGUgZ3Jvd3MgaW5kZWZpbml0ZWx5LgorCisgICBZb3UgY2FuIHVzZSB0aGUgKm1heEJ5dGVzKiBhbmQgKmJhY2t1cENvdW50KiB2YWx1ZXMgdG8gYWxsb3cgdGhlIGZpbGUgdG8KKyAgIDpkZm46YHJvbGxvdmVyYCBhdCBhIHByZWRldGVybWluZWQgc2l6ZS4gV2hlbiB0aGUgc2l6ZSBpcyBhYm91dCB0byBiZSBleGNlZWRlZCwKKyAgIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBzaWxlbnRseSBvcGVuZWQgZm9yIG91dHB1dC4gUm9sbG92ZXIgb2NjdXJzCisgICB3aGVuZXZlciB0aGUgY3VycmVudCBsb2cgZmlsZSBpcyBuZWFybHkgKm1heEJ5dGVzKiBpbiBsZW5ndGg7IGlmICptYXhCeXRlcyogaXMKKyAgIHplcm8sIHJvbGxvdmVyIG5ldmVyIG9jY3Vycy4gIElmICpiYWNrdXBDb3VudCogaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlCisgICBvbGQgbG9nIGZpbGVzIGJ5IGFwcGVuZGluZyB0aGUgZXh0ZW5zaW9ucyAnLjEnLCAnLjInIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yCisgICBleGFtcGxlLCB3aXRoIGEgKmJhY2t1cENvdW50KiBvZiA1IGFuZCBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91CisgICB3b3VsZCBnZXQgOmZpbGU6YGFwcC5sb2dgLCA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvCisgICA6ZmlsZTpgYXBwLmxvZy41YC4gVGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbgorICAgdGhpcyBmaWxlIGlzIGZpbGxlZCwgaXQgaXMgY2xvc2VkIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMKKyAgIDpmaWxlOmBhcHAubG9nLjFgLCA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0bworICAgOmZpbGU6YGFwcC5sb2cuMmAsIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KKworCisgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKKworICAgICAgRG9lcyBhIHJvbGxvdmVyLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIE91dHB1dHMgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgY2F0ZXJpbmcgZm9yIHJvbGxvdmVyIGFzIGRlc2NyaWJlZAorICAgICAgcHJldmlvdXNseS4KKworLi4gX3RpbWVkLXJvdGF0aW5nLWZpbGUtaGFuZGxlcjoKKworVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUKKzptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSwgc3VwcG9ydHMgcm90YXRpb24gb2YgZGlzayBsb2cgZmlsZXMgYXQgY2VydGFpbgordGltZWQgaW50ZXJ2YWxzLgorCisKKy4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSkKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJgIGNsYXNzLiBUaGUKKyAgIHNwZWNpZmllZCBmaWxlIGlzIG9wZW5lZCBhbmQgdXNlZCBhcyB0aGUgc3RyZWFtIGZvciBsb2dnaW5nLiBPbiByb3RhdGluZyBpdCBhbHNvCisgICBzZXRzIHRoZSBmaWxlbmFtZSBzdWZmaXguIFJvdGF0aW5nIGhhcHBlbnMgYmFzZWQgb24gdGhlIHByb2R1Y3Qgb2YgKndoZW4qIGFuZAorICAgKmludGVydmFsKi4KKworICAgWW91IGNhbiB1c2UgdGhlICp3aGVuKiB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mICppbnRlcnZhbCouIFRoZSBsaXN0IG9mIHBvc3NpYmxlCisgICB2YWx1ZXMgaXMgYmVsb3cuICBOb3RlIHRoYXQgdGhleSBhcmUgbm90IGNhc2Ugc2Vuc2l0aXZlLgorCisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVmFsdWUgICAgICAgICAgfCBUeXBlIG9mIGludGVydmFsICAgICAgfAorICAgKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGBgJ1MnYGAgICAgICAgIHwgU2Vjb25kcyAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYCdNJ2BgICAgICAgICB8IE1pbnV0ZXMgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGAnSCdgYCAgICAgICAgfCBIb3VycyAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgJ0QnYGAgICAgICAgIHwgRGF5cyAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYCdXJ2BgICAgICAgICB8IFdlZWsgZGF5ICgwPU1vbmRheSkgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGAnbWlkbmlnaHQnYGAgfCBSb2xsIG92ZXIgYXQgbWlkbmlnaHQgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoZSBzeXN0ZW0gd2lsbCBzYXZlIG9sZCBsb2cgZmlsZXMgYnkgYXBwZW5kaW5nIGV4dGVuc2lvbnMgdG8gdGhlIGZpbGVuYW1lLgorICAgVGhlIGV4dGVuc2lvbnMgYXJlIGRhdGUtYW5kLXRpbWUgYmFzZWQsIHVzaW5nIHRoZSBzdHJmdGltZSBmb3JtYXQKKyAgIGBgJVktJW0tJWRfJUgtJU0tJVNgYCBvciBhIGxlYWRpbmcgcG9ydGlvbiB0aGVyZW9mLCBkZXBlbmRpbmcgb24gdGhlCisgICByb2xsb3ZlciBpbnRlcnZhbC4KKworICAgV2hlbiBjb21wdXRpbmcgdGhlIG5leHQgcm9sbG92ZXIgdGltZSBmb3IgdGhlIGZpcnN0IHRpbWUgKHdoZW4gdGhlIGhhbmRsZXIKKyAgIGlzIGNyZWF0ZWQpLCB0aGUgbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBhbiBleGlzdGluZyBsb2cgZmlsZSwgb3IgZWxzZQorICAgdGhlIGN1cnJlbnQgdGltZSwgaXMgdXNlZCB0byBjb21wdXRlIHdoZW4gdGhlIG5leHQgcm90YXRpb24gd2lsbCBvY2N1ci4KKworICAgSWYgdGhlICp1dGMqIGFyZ3VtZW50IGlzIHRydWUsIHRpbWVzIGluIFVUQyB3aWxsIGJlIHVzZWQ7IG90aGVyd2lzZQorICAgbG9jYWwgdGltZSBpcyB1c2VkLgorCisgICBJZiAqYmFja3VwQ291bnQqIGlzIG5vbnplcm8sIGF0IG1vc3QgKmJhY2t1cENvdW50KiBmaWxlcworICAgd2lsbCBiZSBrZXB0LCBhbmQgaWYgbW9yZSB3b3VsZCBiZSBjcmVhdGVkIHdoZW4gcm9sbG92ZXIgb2NjdXJzLCB0aGUgb2xkZXN0CisgICBvbmUgaXMgZGVsZXRlZC4gVGhlIGRlbGV0aW9uIGxvZ2ljIHVzZXMgdGhlIGludGVydmFsIHRvIGRldGVybWluZSB3aGljaAorICAgZmlsZXMgdG8gZGVsZXRlLCBzbyBjaGFuZ2luZyB0aGUgaW50ZXJ2YWwgbWF5IGxlYXZlIG9sZCBmaWxlcyBseWluZyBhcm91bmQuCisKKyAgIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlIGZpcnN0IGNhbGwgdG8KKyAgIDptZXRoOmBlbWl0YC4KKworCisgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKKworICAgICAgRG9lcyBhIHJvbGxvdmVyLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIE91dHB1dHMgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgY2F0ZXJpbmcgZm9yIHJvbGxvdmVyIGFzIGRlc2NyaWJlZCBhYm92ZS4KKworCisuLiBfc29ja2V0LWhhbmRsZXI6CisKK1NvY2tldEhhbmRsZXIKK15eXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSwKK3NlbmRzIGxvZ2dpbmcgb3V0cHV0IHRvIGEgbmV0d29yayBzb2NrZXQuIFRoZSBiYXNlIGNsYXNzIHVzZXMgYSBUQ1Agc29ja2V0LgorCisKKy4uIGNsYXNzOjogU29ja2V0SGFuZGxlcihob3N0LCBwb3J0KQorCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFNvY2tldEhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCisgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KKworCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlcyB0aGUgc29ja2V0LgorCisKKyAgIC4uIG1ldGhvZDo6IGVtaXQoKQorCisgICAgICBQaWNrbGVzIHRoZSByZWNvcmQncyBhdHRyaWJ1dGUgZGljdGlvbmFyeSBhbmQgd3JpdGVzIGl0IHRvIHRoZSBzb2NrZXQgaW4KKyAgICAgIGJpbmFyeSBmb3JtYXQuIElmIHRoZXJlIGlzIGFuIGVycm9yIHdpdGggdGhlIHNvY2tldCwgc2lsZW50bHkgZHJvcHMgdGhlCisgICAgICBwYWNrZXQuIElmIHRoZSBjb25uZWN0aW9uIHdhcyBwcmV2aW91c2x5IGxvc3QsIHJlLWVzdGFibGlzaGVzIHRoZQorICAgICAgY29ubmVjdGlvbi4gVG8gdW5waWNrbGUgdGhlIHJlY29yZCBhdCB0aGUgcmVjZWl2aW5nIGVuZCBpbnRvIGEKKyAgICAgIDpjbGFzczpgTG9nUmVjb3JkYCwgdXNlIHRoZSA6ZnVuYzpgbWFrZUxvZ1JlY29yZGAgZnVuY3Rpb24uCisKKworICAgLi4gbWV0aG9kOjogaGFuZGxlRXJyb3IoKQorCisgICAgICBIYW5kbGVzIGFuIGVycm9yIHdoaWNoIGhhcyBvY2N1cnJlZCBkdXJpbmcgOm1ldGg6YGVtaXRgLiBUaGUgbW9zdCBsaWtlbHkKKyAgICAgIGNhdXNlIGlzIGEgbG9zdCBjb25uZWN0aW9uLiBDbG9zZXMgdGhlIHNvY2tldCBzbyB0aGF0IHdlIGNhbiByZXRyeSBvbiB0aGUKKyAgICAgIG5leHQgZXZlbnQuCisKKworICAgLi4gbWV0aG9kOjogbWFrZVNvY2tldCgpCisKKyAgICAgIFRoaXMgaXMgYSBmYWN0b3J5IG1ldGhvZCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NlcyB0byBkZWZpbmUgdGhlIHByZWNpc2UKKyAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY3JlYXRlcyBhIFRDUCBzb2NrZXQKKyAgICAgICg6Y29uc3Q6YHNvY2tldC5TT0NLX1NUUkVBTWApLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VQaWNrbGUocmVjb3JkKQorCisgICAgICBQaWNrbGVzIHRoZSByZWNvcmQncyBhdHRyaWJ1dGUgZGljdGlvbmFyeSBpbiBiaW5hcnkgZm9ybWF0IHdpdGggYSBsZW5ndGgKKyAgICAgIHByZWZpeCwgYW5kIHJldHVybnMgaXQgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbiBhY3Jvc3MgdGhlIHNvY2tldC4KKworICAgICAgTm90ZSB0aGF0IHBpY2tsZXMgYXJlbid0IGNvbXBsZXRlbHkgc2VjdXJlLiBJZiB5b3UgYXJlIGNvbmNlcm5lZCBhYm91dAorICAgICAgc2VjdXJpdHksIHlvdSBtYXkgd2FudCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBpbXBsZW1lbnQgYSBtb3JlIHNlY3VyZQorICAgICAgbWVjaGFuaXNtLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBzaWduIHBpY2tsZXMgdXNpbmcgSE1BQyBhbmQgdGhlbiB2ZXJpZnkKKyAgICAgIHRoZW0gb24gdGhlIHJlY2VpdmluZyBlbmQsIG9yIGFsdGVybmF0aXZlbHkgeW91IGNhbiBkaXNhYmxlIHVucGlja2xpbmcgb2YKKyAgICAgIGdsb2JhbCBvYmplY3RzIG9uIHRoZSByZWNlaXZpbmcgZW5kLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbmQocGFja2V0KQorCisgICAgICBTZW5kIGEgcGlja2xlZCBzdHJpbmcgKnBhY2tldCogdG8gdGhlIHNvY2tldC4gVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yCisgICAgICBwYXJ0aWFsIHNlbmRzIHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB0aGUgbmV0d29yayBpcyBidXN5LgorCisKKyAgIC4uIG1ldGhvZDo6IGNyZWF0ZVNvY2tldCgpCisKKyAgICAgIFRyaWVzIHRvIGNyZWF0ZSBhIHNvY2tldDsgb24gZmFpbHVyZSwgdXNlcyBhbiBleHBvbmVudGlhbCBiYWNrLW9mZgorICAgICAgYWxnb3JpdGhtLiAgT24gaW50aWFsIGZhaWx1cmUsIHRoZSBoYW5kbGVyIHdpbGwgZHJvcCB0aGUgbWVzc2FnZSBpdCB3YXMKKyAgICAgIHRyeWluZyB0byBzZW5kLiAgV2hlbiBzdWJzZXF1ZW50IG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGJ5IHRoZSBzYW1lCisgICAgICBpbnN0YW5jZSwgaXQgd2lsbCBub3QgdHJ5IGNvbm5lY3RpbmcgdW50aWwgc29tZSB0aW1lIGhhcyBwYXNzZWQuICBUaGUKKyAgICAgIGRlZmF1bHQgcGFyYW1ldGVycyBhcmUgc3VjaCB0aGF0IHRoZSBpbml0aWFsIGRlbGF5IGlzIG9uZSBzZWNvbmQsIGFuZCBpZgorICAgICAgYWZ0ZXIgdGhhdCBkZWxheSB0aGUgY29ubmVjdGlvbiBzdGlsbCBjYW4ndCBiZSBtYWRlLCB0aGUgaGFuZGxlciB3aWxsCisgICAgICBkb3VibGUgdGhlIGRlbGF5IGVhY2ggdGltZSB1cCB0byBhIG1heGltdW0gb2YgMzAgc2Vjb25kcy4KKworICAgICAgVGhpcyBiZWhhdmlvdXIgaXMgY29udHJvbGxlZCBieSB0aGUgZm9sbG93aW5nIGhhbmRsZXIgYXR0cmlidXRlczoKKworICAgICAgKiBgYHJldHJ5U3RhcnRgYCAoaW5pdGlhbCBkZWxheSwgZGVmYXVsdGluZyB0byAxLjAgc2Vjb25kcykuCisgICAgICAqIGBgcmV0cnlGYWN0b3JgYCAobXVsdGlwbGllciwgZGVmYXVsdGluZyB0byAyLjApLgorICAgICAgKiBgYHJldHJ5TWF4YGAgKG1heGltdW0gZGVsYXksIGRlZmF1bHRpbmcgdG8gMzAuMCBzZWNvbmRzKS4KKworICAgICAgVGhpcyBtZWFucyB0aGF0IGlmIHRoZSByZW1vdGUgbGlzdGVuZXIgc3RhcnRzIHVwICphZnRlciogdGhlIGhhbmRsZXIgaGFzCisgICAgICBiZWVuIHVzZWQsIHlvdSBjb3VsZCBsb3NlIG1lc3NhZ2VzIChzaW5jZSB0aGUgaGFuZGxlciB3b24ndCBldmVuIGF0dGVtcHQKKyAgICAgIGEgY29ubmVjdGlvbiB1bnRpbCB0aGUgZGVsYXkgaGFzIGVsYXBzZWQsIGJ1dCBqdXN0IHNpbGVudGx5IGRyb3AgbWVzc2FnZXMKKyAgICAgIGR1cmluZyB0aGUgZGVsYXkgcGVyaW9kKS4KKworCisuLiBfZGF0YWdyYW0taGFuZGxlcjoKKworRGF0YWdyYW1IYW5kbGVyCiteXl5eXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgRGF0YWdyYW1IYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKK21vZHVsZSwgaW5oZXJpdHMgZnJvbSA6Y2xhc3M6YFNvY2tldEhhbmRsZXJgIHRvIHN1cHBvcnQgc2VuZGluZyBsb2dnaW5nIG1lc3NhZ2VzCitvdmVyIFVEUCBzb2NrZXRzLgorCisKKy4uIGNsYXNzOjogRGF0YWdyYW1IYW5kbGVyKGhvc3QsIHBvcnQpCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRGF0YWdyYW1IYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bworICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCisKKworICAgLi4gbWV0aG9kOjogZW1pdCgpCisKKyAgICAgIFBpY2tsZXMgdGhlIHJlY29yZCdzIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNvY2tldCBpbgorICAgICAgYmluYXJ5IGZvcm1hdC4gSWYgdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCB0aGUgc29ja2V0LCBzaWxlbnRseSBkcm9wcyB0aGUKKyAgICAgIHBhY2tldC4gVG8gdW5waWNrbGUgdGhlIHJlY29yZCBhdCB0aGUgcmVjZWl2aW5nIGVuZCBpbnRvIGEKKyAgICAgIDpjbGFzczpgTG9nUmVjb3JkYCwgdXNlIHRoZSA6ZnVuYzpgbWFrZUxvZ1JlY29yZGAgZnVuY3Rpb24uCisKKworICAgLi4gbWV0aG9kOjogbWFrZVNvY2tldCgpCisKKyAgICAgIFRoZSBmYWN0b3J5IG1ldGhvZCBvZiA6Y2xhc3M6YFNvY2tldEhhbmRsZXJgIGlzIGhlcmUgb3ZlcnJpZGRlbiB0byBjcmVhdGUKKyAgICAgIGEgVURQIHNvY2tldCAoOmNvbnN0OmBzb2NrZXQuU09DS19ER1JBTWApLgorCisKKyAgIC4uIG1ldGhvZDo6IHNlbmQocykKKworICAgICAgU2VuZCBhIHBpY2tsZWQgc3RyaW5nIHRvIGEgc29ja2V0LgorCisKKy4uIF9zeXNsb2ctaGFuZGxlcjoKKworU3lzTG9nSGFuZGxlcgorXl5eXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBTeXNMb2dIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgbW9kdWxlLAorc3VwcG9ydHMgc2VuZGluZyBsb2dnaW5nIG1lc3NhZ2VzIHRvIGEgcmVtb3RlIG9yIGxvY2FsIFVuaXggc3lzbG9nLgorCisKKy4uIGNsYXNzOjogU3lzTG9nSGFuZGxlcihhZGRyZXNzPSgnbG9jYWxob3N0JywgU1lTTE9HX1VEUF9QT1JUKSwgZmFjaWxpdHk9TE9HX1VTRVIsIHNvY2t0eXBlPXNvY2tldC5TT0NLX0RHUkFNKQorCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFN5c0xvZ0hhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCisgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIFVuaXggbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICphZGRyZXNzKiBpbgorICAgdGhlIGZvcm0gb2YgYSBgYChob3N0LCBwb3J0KWBgIHR1cGxlLiAgSWYgKmFkZHJlc3MqIGlzIG5vdCBzcGVjaWZpZWQsCisgICBgYCgnbG9jYWxob3N0JywgNTE0KWBgIGlzIHVzZWQuICBUaGUgYWRkcmVzcyBpcyB1c2VkIHRvIG9wZW4gYSBzb2NrZXQuICBBbgorICAgYWx0ZXJuYXRpdmUgdG8gcHJvdmlkaW5nIGEgYGAoaG9zdCwgcG9ydClgYCB0dXBsZSBpcyBwcm92aWRpbmcgYW4gYWRkcmVzcyBhcyBhCisgICBzdHJpbmcsIGZvciBleGFtcGxlICcvZGV2L2xvZycuIEluIHRoaXMgY2FzZSwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgdXNlZCB0bworICAgc2VuZCB0aGUgbWVzc2FnZSB0byB0aGUgc3lzbG9nLiBJZiAqZmFjaWxpdHkqIGlzIG5vdCBzcGVjaWZpZWQsCisgICA6Y29uc3Q6YExPR19VU0VSYCBpcyB1c2VkLiBUaGUgdHlwZSBvZiBzb2NrZXQgb3BlbmVkIGRlcGVuZHMgb24gdGhlCisgICAqc29ja3R5cGUqIGFyZ3VtZW50LCB3aGljaCBkZWZhdWx0cyB0byA6Y29uc3Q6YHNvY2tldC5TT0NLX0RHUkFNYCBhbmQgdGh1cworICAgb3BlbnMgYSBVRFAgc29ja2V0LiBUbyBvcGVuIGEgVENQIHNvY2tldCAoZm9yIHVzZSB3aXRoIHRoZSBuZXdlciBzeXNsb2cKKyAgIGRhZW1vbnMgc3VjaCBhcyByc3lzbG9nKSwgc3BlY2lmeSBhIHZhbHVlIG9mIDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYC4KKworICAgTm90ZSB0aGF0IGlmIHlvdXIgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcgb24gVURQIHBvcnQgNTE0LAorICAgOmNsYXNzOmBTeXNMb2dIYW5kbGVyYCBtYXkgYXBwZWFyIG5vdCB0byB3b3JrLiBJbiB0aGF0IGNhc2UsIGNoZWNrIHdoYXQKKyAgIGFkZHJlc3MgeW91IHNob3VsZCBiZSB1c2luZyBmb3IgYSBkb21haW4gc29ja2V0IC0gaXQncyBzeXN0ZW0gZGVwZW5kZW50LgorICAgRm9yIGV4YW1wbGUsIG9uIExpbnV4IGl0J3MgdXN1YWxseSAnL2Rldi9sb2cnIGJ1dCBvbiBPUy9YIGl0J3MKKyAgICcvdmFyL3J1bi9zeXNsb2cnLiBZb3UnbGwgbmVlZCB0byBjaGVjayB5b3VyIHBsYXRmb3JtIGFuZCB1c2UgdGhlCisgICBhcHByb3ByaWF0ZSBhZGRyZXNzICh5b3UgbWF5IG5lZWQgdG8gZG8gdGhpcyBjaGVjayBhdCBydW50aW1lIGlmIHlvdXIKKyAgIGFwcGxpY2F0aW9uIG5lZWRzIHRvIHJ1biBvbiBzZXZlcmFsIHBsYXRmb3JtcykuIE9uIFdpbmRvd3MsIHlvdSBwcmV0dHkKKyAgIG11Y2ggaGF2ZSB0byB1c2UgdGhlIFVEUCBvcHRpb24uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAqc29ja3R5cGUqIHdhcyBhZGRlZC4KKworCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlcyB0aGUgc29ja2V0IHRvIHRoZSByZW1vdGUgaG9zdC4KKworCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgVGhlIHJlY29yZCBpcyBmb3JtYXR0ZWQsIGFuZCB0aGVuIHNlbnQgdG8gdGhlIHN5c2xvZyBzZXJ2ZXIuIElmIGV4Y2VwdGlvbgorICAgICAgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgaXQgaXMgKm5vdCogc2VudCB0byB0aGUgc2VydmVyLgorCisKKyAgIC4uIG1ldGhvZDo6IGVuY29kZVByaW9yaXR5KGZhY2lsaXR5LCBwcmlvcml0eSkKKworICAgICAgRW5jb2RlcyB0aGUgZmFjaWxpdHkgYW5kIHByaW9yaXR5IGludG8gYW4gaW50ZWdlci4gWW91IGNhbiBwYXNzIGluIHN0cmluZ3MKKyAgICAgIG9yIGludGVnZXJzIC0gaWYgc3RyaW5ncyBhcmUgcGFzc2VkLCBpbnRlcm5hbCBtYXBwaW5nIGRpY3Rpb25hcmllcyBhcmUKKyAgICAgIHVzZWQgdG8gY29udmVydCB0aGVtIHRvIGludGVnZXJzLgorCisgICAgICBUaGUgc3ltYm9saWMgYGBMT0dfYGAgdmFsdWVzIGFyZSBkZWZpbmVkIGluIDpjbGFzczpgU3lzTG9nSGFuZGxlcmAgYW5kCisgICAgICBtaXJyb3IgdGhlIHZhbHVlcyBkZWZpbmVkIGluIHRoZSBgYHN5cy9zeXNsb2cuaGBgIGhlYWRlciBmaWxlLgorCisgICAgICAqKlByaW9yaXRpZXMqKgorCisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBOYW1lIChzdHJpbmcpICAgICAgICAgICAgfCBTeW1ib2xpYyB2YWx1ZXwKKyAgICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCisgICAgICB8IGBgYWxlcnRgYCAgICAgICAgICAgICAgICB8IExPR19BTEVSVCAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBjcml0YGAgb3IgYGBjcml0aWNhbGBgIHwgTE9HX0NSSVQgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGRlYnVnYGAgICAgICAgICAgICAgICAgfCBMT0dfREVCVUcgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgZW1lcmdgYCBvciBgYHBhbmljYGAgICB8IExPR19FTUVSRyAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBlcnJgYCBvciBgYGVycm9yYGAgICAgIHwgTE9HX0VSUiAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGluZm9gYCAgICAgICAgICAgICAgICAgfCBMT0dfSU5GTyAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgbm90aWNlYGAgICAgICAgICAgICAgICB8IExPR19OT1RJQ0UgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGB3YXJuYGAgb3IgYGB3YXJuaW5nYGAgIHwgTE9HX1dBUk5JTkcgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAgICAqKkZhY2lsaXRpZXMqKgorCisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgTmFtZSAoc3RyaW5nKSB8IFN5bWJvbGljIHZhbHVlfAorICAgICAgKz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCisgICAgICB8IGBgYXV0aGBgICAgICAgfCBMT0dfQVVUSCAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGF1dGhwcml2YGAgIHwgTE9HX0FVVEhQUklWICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBjcm9uYGAgICAgICB8IExPR19DUk9OICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgZGFlbW9uYGAgICAgfCBMT0dfREFFTU9OICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGZ0cGBgICAgICAgIHwgTE9HX0ZUUCAgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBrZXJuYGAgICAgICB8IExPR19LRVJOICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgbHByYGAgICAgICAgfCBMT0dfTFBSICAgICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYG1haWxgYCAgICAgIHwgTE9HX01BSUwgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBuZXdzYGAgICAgICB8IExPR19ORVdTICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgc3lzbG9nYGAgICAgfCBMT0dfU1lTTE9HICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYHVzZXJgYCAgICAgIHwgTE9HX1VTRVIgICAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGB1dWNwYGAgICAgICB8IExPR19VVUNQICAgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgbG9jYWwwYGAgICAgfCBMT0dfTE9DQUwwICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGxvY2FsMWBgICAgIHwgTE9HX0xPQ0FMMSAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBsb2NhbDJgYCAgICB8IExPR19MT0NBTDIgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgbG9jYWwzYGAgICAgfCBMT0dfTE9DQUwzICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGxvY2FsNGBgICAgIHwgTE9HX0xPQ0FMNCAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICAgIHwgYGBsb2NhbDVgYCAgICB8IExPR19MT0NBTDUgICAgfAorICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgICB8IGBgbG9jYWw2YGAgICAgfCBMT0dfTE9DQUw2ICAgIHwKKyAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgICAgfCBgYGxvY2FsN2BgICAgIHwgTE9HX0xPQ0FMNyAgICB8CisgICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gbWV0aG9kOjogbWFwUHJpb3JpdHkobGV2ZWxuYW1lKQorCisgICAgICBNYXBzIGEgbG9nZ2luZyBsZXZlbCBuYW1lIHRvIGEgc3lzbG9nIHByaW9yaXR5IG5hbWUuCisgICAgICBZb3UgbWF5IG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGN1c3RvbSBsZXZlbHMsIG9yCisgICAgICBpZiB0aGUgZGVmYXVsdCBhbGdvcml0aG0gaXMgbm90IHN1aXRhYmxlIGZvciB5b3VyIG5lZWRzLiBUaGUKKyAgICAgIGRlZmF1bHQgYWxnb3JpdGhtIG1hcHMgYGBERUJVR2BgLCBgYElORk9gYCwgYGBXQVJOSU5HYGAsIGBgRVJST1JgYCBhbmQKKyAgICAgIGBgQ1JJVElDQUxgYCB0byB0aGUgZXF1aXZhbGVudCBzeXNsb2cgbmFtZXMsIGFuZCBhbGwgb3RoZXIgbGV2ZWwKKyAgICAgIG5hbWVzIHRvICd3YXJuaW5nJy4KKworLi4gX250LWV2ZW50bG9nLWhhbmRsZXI6CisKK05URXZlbnRMb2dIYW5kbGVyCiteXl5eXl5eXl5eXl5eXl5eXgorCitUaGUgOmNsYXNzOmBOVEV2ZW50TG9nSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgCittb2R1bGUsIHN1cHBvcnRzIHNlbmRpbmcgbG9nZ2luZyBtZXNzYWdlcyB0byBhIGxvY2FsIFdpbmRvd3MgTlQsIFdpbmRvd3MgMjAwMCBvcgorV2luZG93cyBYUCBldmVudCBsb2cuIEJlZm9yZSB5b3UgY2FuIHVzZSBpdCwgeW91IG5lZWQgTWFyayBIYW1tb25kJ3MgV2luMzIKK2V4dGVuc2lvbnMgZm9yIFB5dGhvbiBpbnN0YWxsZWQuCisKKworLi4gY2xhc3M6OiBOVEV2ZW50TG9nSGFuZGxlcihhcHBuYW1lLCBkbGxuYW1lPU5vbmUsIGxvZ3R5cGU9J0FwcGxpY2F0aW9uJykKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBOVEV2ZW50TG9nSGFuZGxlcmAgY2xhc3MuIFRoZSAqYXBwbmFtZSogaXMKKyAgIHVzZWQgdG8gZGVmaW5lIHRoZSBhcHBsaWNhdGlvbiBuYW1lIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGV2ZW50IGxvZy4gQW4KKyAgIGFwcHJvcHJpYXRlIHJlZ2lzdHJ5IGVudHJ5IGlzIGNyZWF0ZWQgdXNpbmcgdGhpcyBuYW1lLiBUaGUgKmRsbG5hbWUqIHNob3VsZCBnaXZlCisgICB0aGUgZnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIGEgLmRsbCBvciAuZXhlIHdoaWNoIGNvbnRhaW5zIG1lc3NhZ2UKKyAgIGRlZmluaXRpb25zIHRvIGhvbGQgaW4gdGhlIGxvZyAoaWYgbm90IHNwZWNpZmllZCwgYGAnd2luMzJzZXJ2aWNlLnB5ZCdgYCBpcyB1c2VkCisgICAtIHRoaXMgaXMgaW5zdGFsbGVkIHdpdGggdGhlIFdpbjMyIGV4dGVuc2lvbnMgYW5kIGNvbnRhaW5zIHNvbWUgYmFzaWMKKyAgIHBsYWNlaG9sZGVyIG1lc3NhZ2UgZGVmaW5pdGlvbnMuIE5vdGUgdGhhdCB1c2Ugb2YgdGhlc2UgcGxhY2Vob2xkZXJzIHdpbGwgbWFrZQorICAgeW91ciBldmVudCBsb2dzIGJpZywgYXMgdGhlIGVudGlyZSBtZXNzYWdlIHNvdXJjZSBpcyBoZWxkIGluIHRoZSBsb2cuIElmIHlvdQorICAgd2FudCBzbGltbWVyIGxvZ3MsIHlvdSBoYXZlIHRvIHBhc3MgaW4gdGhlIG5hbWUgb2YgeW91ciBvd24gLmRsbCBvciAuZXhlIHdoaWNoCisgICBjb250YWlucyB0aGUgbWVzc2FnZSBkZWZpbml0aW9ucyB5b3Ugd2FudCB0byB1c2UgaW4gdGhlIGV2ZW50IGxvZykuIFRoZQorICAgKmxvZ3R5cGUqIGlzIG9uZSBvZiBgYCdBcHBsaWNhdGlvbidgYCwgYGAnU3lzdGVtJ2BgIG9yIGBgJ1NlY3VyaXR5J2BgLCBhbmQKKyAgIGRlZmF1bHRzIHRvIGBgJ0FwcGxpY2F0aW9uJ2BgLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQXQgdGhpcyBwb2ludCwgeW91IGNhbiByZW1vdmUgdGhlIGFwcGxpY2F0aW9uIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnkgYXMgYQorICAgICAgc291cmNlIG9mIGV2ZW50IGxvZyBlbnRyaWVzLiBIb3dldmVyLCBpZiB5b3UgZG8gdGhpcywgeW91IHdpbGwgbm90IGJlIGFibGUKKyAgICAgIHRvIHNlZSB0aGUgZXZlbnRzIGFzIHlvdSBpbnRlbmRlZCBpbiB0aGUgRXZlbnQgTG9nIFZpZXdlciAtIGl0IG5lZWRzIHRvIGJlCisgICAgICBhYmxlIHRvIGFjY2VzcyB0aGUgcmVnaXN0cnkgdG8gZ2V0IHRoZSAuZGxsIG5hbWUuIFRoZSBjdXJyZW50IHZlcnNpb24gZG9lcworICAgICAgbm90IGRvIHRoaXMuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIERldGVybWluZXMgdGhlIG1lc3NhZ2UgSUQsIGV2ZW50IGNhdGVnb3J5IGFuZCBldmVudCB0eXBlLCBhbmQgdGhlbiBsb2dzCisgICAgICB0aGUgbWVzc2FnZSBpbiB0aGUgTlQgZXZlbnQgbG9nLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldEV2ZW50Q2F0ZWdvcnkocmVjb3JkKQorCisgICAgICBSZXR1cm5zIHRoZSBldmVudCBjYXRlZ29yeSBmb3IgdGhlIHJlY29yZC4gT3ZlcnJpZGUgdGhpcyBpZiB5b3Ugd2FudCB0bworICAgICAgc3BlY2lmeSB5b3VyIG93biBjYXRlZ29yaWVzLiBUaGlzIHZlcnNpb24gcmV0dXJucyAwLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldEV2ZW50VHlwZShyZWNvcmQpCisKKyAgICAgIFJldHVybnMgdGhlIGV2ZW50IHR5cGUgZm9yIHRoZSByZWNvcmQuIE92ZXJyaWRlIHRoaXMgaWYgeW91IHdhbnQgdG8KKyAgICAgIHNwZWNpZnkgeW91ciBvd24gdHlwZXMuIFRoaXMgdmVyc2lvbiBkb2VzIGEgbWFwcGluZyB1c2luZyB0aGUgaGFuZGxlcidzCisgICAgICB0eXBlbWFwIGF0dHJpYnV0ZSwgd2hpY2ggaXMgc2V0IHVwIGluIDptZXRoOmBfX2luaXRfX2AgdG8gYSBkaWN0aW9uYXJ5CisgICAgICB3aGljaCBjb250YWlucyBtYXBwaW5ncyBmb3IgOmNvbnN0OmBERUJVR2AsIDpjb25zdDpgSU5GT2AsCisgICAgICA6Y29uc3Q6YFdBUk5JTkdgLCA6Y29uc3Q6YEVSUk9SYCBhbmQgOmNvbnN0OmBDUklUSUNBTGAuIElmIHlvdSBhcmUgdXNpbmcKKyAgICAgIHlvdXIgb3duIGxldmVscywgeW91IHdpbGwgZWl0aGVyIG5lZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2Qgb3IgcGxhY2UgYQorICAgICAgc3VpdGFibGUgZGljdGlvbmFyeSBpbiB0aGUgaGFuZGxlcidzICp0eXBlbWFwKiBhdHRyaWJ1dGUuCisKKworICAgLi4gbWV0aG9kOjogZ2V0TWVzc2FnZUlEKHJlY29yZCkKKworICAgICAgUmV0dXJucyB0aGUgbWVzc2FnZSBJRCBmb3IgdGhlIHJlY29yZC4gSWYgeW91IGFyZSB1c2luZyB5b3VyIG93biBtZXNzYWdlcywKKyAgICAgIHlvdSBjb3VsZCBkbyB0aGlzIGJ5IGhhdmluZyB0aGUgKm1zZyogcGFzc2VkIHRvIHRoZSBsb2dnZXIgYmVpbmcgYW4gSUQKKyAgICAgIHJhdGhlciB0aGFuIGEgZm9ybWF0IHN0cmluZy4gVGhlbiwgaW4gaGVyZSwgeW91IGNvdWxkIHVzZSBhIGRpY3Rpb25hcnkKKyAgICAgIGxvb2t1cCB0byBnZXQgdGhlIG1lc3NhZ2UgSUQuIFRoaXMgdmVyc2lvbiByZXR1cm5zIDEsIHdoaWNoIGlzIHRoZSBiYXNlCisgICAgICBtZXNzYWdlIElEIGluIDpmaWxlOmB3aW4zMnNlcnZpY2UucHlkYC4KKworLi4gX3NtdHAtaGFuZGxlcjoKKworU01UUEhhbmRsZXIKK15eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YFNNVFBIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgbW9kdWxlLAorc3VwcG9ydHMgc2VuZGluZyBsb2dnaW5nIG1lc3NhZ2VzIHRvIGFuIGVtYWlsIGFkZHJlc3MgdmlhIFNNVFAuCisKKworLi4gY2xhc3M6OiBTTVRQSGFuZGxlcihtYWlsaG9zdCwgZnJvbWFkZHIsIHRvYWRkcnMsIHN1YmplY3QsIGNyZWRlbnRpYWxzPU5vbmUpCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU01UUEhhbmRsZXJgIGNsYXNzLiBUaGUgaW5zdGFuY2UgaXMKKyAgIGluaXRpYWxpemVkIHdpdGggdGhlIGZyb20gYW5kIHRvIGFkZHJlc3NlcyBhbmQgc3ViamVjdCBsaW5lIG9mIHRoZSBlbWFpbC4gVGhlCisgICAqdG9hZGRycyogc2hvdWxkIGJlIGEgbGlzdCBvZiBzdHJpbmdzLiBUbyBzcGVjaWZ5IGEgbm9uLXN0YW5kYXJkIFNNVFAgcG9ydCwgdXNlCisgICB0aGUgKGhvc3QsIHBvcnQpIHR1cGxlIGZvcm1hdCBmb3IgdGhlICptYWlsaG9zdCogYXJndW1lbnQuIElmIHlvdSB1c2UgYSBzdHJpbmcsCisgICB0aGUgc3RhbmRhcmQgU01UUCBwb3J0IGlzIHVzZWQuIElmIHlvdXIgU01UUCBzZXJ2ZXIgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIHlvdQorICAgY2FuIHNwZWNpZnkgYSAodXNlcm5hbWUsIHBhc3N3b3JkKSB0dXBsZSBmb3IgdGhlICpjcmVkZW50aWFscyogYXJndW1lbnQuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIEZvcm1hdHMgdGhlIHJlY29yZCBhbmQgc2VuZHMgaXQgdG8gdGhlIHNwZWNpZmllZCBhZGRyZXNzZWVzLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldFN1YmplY3QocmVjb3JkKQorCisgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGEgc3ViamVjdCBsaW5lIHdoaWNoIGlzIHJlY29yZC1kZXBlbmRlbnQsIG92ZXJyaWRlCisgICAgICB0aGlzIG1ldGhvZC4KKworLi4gX21lbW9yeS1oYW5kbGVyOgorCitNZW1vcnlIYW5kbGVyCiteXl5eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YE1lbW9yeUhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYCBtb2R1bGUsCitzdXBwb3J0cyBidWZmZXJpbmcgb2YgbG9nZ2luZyByZWNvcmRzIGluIG1lbW9yeSwgcGVyaW9kaWNhbGx5IGZsdXNoaW5nIHRoZW0gdG8gYQorOmRmbjpgdGFyZ2V0YCBoYW5kbGVyLiBGbHVzaGluZyBvY2N1cnMgd2hlbmV2ZXIgdGhlIGJ1ZmZlciBpcyBmdWxsLCBvciB3aGVuIGFuCitldmVudCBvZiBhIGNlcnRhaW4gc2V2ZXJpdHkgb3IgZ3JlYXRlciBpcyBzZWVuLgorCis6Y2xhc3M6YE1lbW9yeUhhbmRsZXJgIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIG1vcmUgZ2VuZXJhbAorOmNsYXNzOmBCdWZmZXJpbmdIYW5kbGVyYCwgd2hpY2ggaXMgYW4gYWJzdHJhY3QgY2xhc3MuIFRoaXMgYnVmZmVycyBsb2dnaW5nCityZWNvcmRzIGluIG1lbW9yeS4gV2hlbmV2ZXIgZWFjaCByZWNvcmQgaXMgYWRkZWQgdG8gdGhlIGJ1ZmZlciwgYSBjaGVjayBpcyBtYWRlCitieSBjYWxsaW5nIDptZXRoOmBzaG91bGRGbHVzaGAgdG8gc2VlIGlmIHRoZSBidWZmZXIgc2hvdWxkIGJlIGZsdXNoZWQuICBJZiBpdAorc2hvdWxkLCB0aGVuIDptZXRoOmBmbHVzaGAgaXMgZXhwZWN0ZWQgdG8gZG8gdGhlIG5lZWRmdWwuCisKKworLi4gY2xhc3M6OiBCdWZmZXJpbmdIYW5kbGVyKGNhcGFjaXR5KQorCisgICBJbml0aWFsaXplcyB0aGUgaGFuZGxlciB3aXRoIGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgY2FwYWNpdHkuCisKKworICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCisKKyAgICAgIEFwcGVuZHMgdGhlIHJlY29yZCB0byB0aGUgYnVmZmVyLiBJZiA6bWV0aDpgc2hvdWxkRmx1c2hgIHJldHVybnMgdHJ1ZSwKKyAgICAgIGNhbGxzIDptZXRoOmBmbHVzaGAgdG8gcHJvY2VzcyB0aGUgYnVmZmVyLgorCisKKyAgIC4uIG1ldGhvZDo6IGZsdXNoKCkKKworICAgICAgWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGltcGxlbWVudCBjdXN0b20gZmx1c2hpbmcgYmVoYXZpb3IuIFRoaXMgdmVyc2lvbgorICAgICAganVzdCB6YXBzIHRoZSBidWZmZXIgdG8gZW1wdHkuCisKKworICAgLi4gbWV0aG9kOjogc2hvdWxkRmx1c2gocmVjb3JkKQorCisgICAgICBSZXR1cm5zIHRydWUgaWYgdGhlIGJ1ZmZlciBpcyB1cCB0byBjYXBhY2l0eS4gVGhpcyBtZXRob2QgY2FuIGJlCisgICAgICBvdmVycmlkZGVuIHRvIGltcGxlbWVudCBjdXN0b20gZmx1c2hpbmcgc3RyYXRlZ2llcy4KKworCisuLiBjbGFzczo6IE1lbW9yeUhhbmRsZXIoY2FwYWNpdHksIGZsdXNoTGV2ZWw9RVJST1IsIHRhcmdldD1Ob25lKQorCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YE1lbW9yeUhhbmRsZXJgIGNsYXNzLiBUaGUgaW5zdGFuY2UgaXMKKyAgIGluaXRpYWxpemVkIHdpdGggYSBidWZmZXIgc2l6ZSBvZiAqY2FwYWNpdHkqLiBJZiAqZmx1c2hMZXZlbCogaXMgbm90IHNwZWNpZmllZCwKKyAgIDpjb25zdDpgRVJST1JgIGlzIHVzZWQuIElmIG5vICp0YXJnZXQqIGlzIHNwZWNpZmllZCwgdGhlIHRhcmdldCB3aWxsIG5lZWQgdG8gYmUKKyAgIHNldCB1c2luZyA6bWV0aDpgc2V0VGFyZ2V0YCBiZWZvcmUgdGhpcyBoYW5kbGVyIGRvZXMgYW55dGhpbmcgdXNlZnVsLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKKworICAgICAgQ2FsbHMgOm1ldGg6YGZsdXNoYCwgc2V0cyB0aGUgdGFyZ2V0IHRvIDpjb25zdDpgTm9uZWAgYW5kIGNsZWFycyB0aGUKKyAgICAgIGJ1ZmZlci4KKworCisgICAuLiBtZXRob2Q6OiBmbHVzaCgpCisKKyAgICAgIEZvciBhIDpjbGFzczpgTWVtb3J5SGFuZGxlcmAsIGZsdXNoaW5nIG1lYW5zIGp1c3Qgc2VuZGluZyB0aGUgYnVmZmVyZWQKKyAgICAgIHJlY29yZHMgdG8gdGhlIHRhcmdldCwgaWYgdGhlcmUgaXMgb25lLiBUaGUgYnVmZmVyIGlzIGFsc28gY2xlYXJlZCB3aGVuCisgICAgICB0aGlzIGhhcHBlbnMuIE92ZXJyaWRlIGlmIHlvdSB3YW50IGRpZmZlcmVudCBiZWhhdmlvci4KKworCisgICAuLiBtZXRob2Q6OiBzZXRUYXJnZXQodGFyZ2V0KQorCisgICAgICBTZXRzIHRoZSB0YXJnZXQgaGFuZGxlciBmb3IgdGhpcyBoYW5kbGVyLgorCisKKyAgIC4uIG1ldGhvZDo6IHNob3VsZEZsdXNoKHJlY29yZCkKKworICAgICAgQ2hlY2tzIGZvciBidWZmZXIgZnVsbCBvciBhIHJlY29yZCBhdCB0aGUgKmZsdXNoTGV2ZWwqIG9yIGhpZ2hlci4KKworCisuLiBfaHR0cC1oYW5kbGVyOgorCitIVFRQSGFuZGxlcgorXl5eXl5eXl5eXl4KKworVGhlIDpjbGFzczpgSFRUUEhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYCBtb2R1bGUsCitzdXBwb3J0cyBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMgdG8gYSBXZWIgc2VydmVyLCB1c2luZyBlaXRoZXIgYGBHRVRgYCBvcgorYGBQT1NUYGAgc2VtYW50aWNzLgorCisKKy4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSkKKworICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBIVFRQSGFuZGxlcmAgY2xhc3MuIFRoZSAqaG9zdCogY2FuIGJlCisgICBvZiB0aGUgZm9ybSBgYGhvc3Q6cG9ydGBgLCBzaG91bGQgeW91IG5lZWQgdG8gdXNlIGEgc3BlY2lmaWMgcG9ydCBudW1iZXIuCisgICBJZiBubyAqbWV0aG9kKiBpcyBzcGVjaWZpZWQsIGBgR0VUYGAgaXMgdXNlZC4gSWYgKnNlY3VyZSogaXMgVHJ1ZSwgYW4gSFRUUFMKKyAgIGNvbm5lY3Rpb24gd2lsbCBiZSB1c2VkLiBJZiAqY3JlZGVudGlhbHMqIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEKKyAgIDItdHVwbGUgY29uc2lzdGluZyBvZiB1c2VyaWQgYW5kIHBhc3N3b3JkLCB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbiBhbiBIVFRQCisgICAnQXV0aG9yaXphdGlvbicgaGVhZGVyIHVzaW5nIEJhc2ljIGF1dGhlbnRpY2F0aW9uLiBJZiB5b3Ugc3BlY2lmeQorICAgY3JlZGVudGlhbHMsIHlvdSBzaG91bGQgYWxzbyBzcGVjaWZ5IHNlY3VyZT1UcnVlIHNvIHRoYXQgeW91ciB1c2VyaWQgYW5kCisgICBwYXNzd29yZCBhcmUgbm90IHBhc3NlZCBpbiBjbGVhcnRleHQgYWNyb3NzIHRoZSB3aXJlLgorCisKKyAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQorCisgICAgICBTZW5kcyB0aGUgcmVjb3JkIHRvIHRoZSBXZWIgc2VydmVyIGFzIGEgcGVyY2VudC1lbmNvZGVkIGRpY3Rpb25hcnkuCisKKworLi4gX3F1ZXVlLWhhbmRsZXI6CisKKworUXVldWVIYW5kbGVyCiteXl5eXl5eXl5eXl4KKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKK1RoZSA6Y2xhc3M6YFF1ZXVlSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSwKK3N1cHBvcnRzIHNlbmRpbmcgbG9nZ2luZyBtZXNzYWdlcyB0byBhIHF1ZXVlLCBzdWNoIGFzIHRob3NlIGltcGxlbWVudGVkIGluIHRoZQorOm1vZDpgcXVldWVgIG9yIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlcy4KKworQWxvbmcgd2l0aCB0aGUgOmNsYXNzOmBRdWV1ZUxpc3RlbmVyYCBjbGFzcywgOmNsYXNzOmBRdWV1ZUhhbmRsZXJgIGNhbiBiZSB1c2VkCit0byBsZXQgaGFuZGxlcnMgZG8gdGhlaXIgd29yayBvbiBhIHNlcGFyYXRlIHRocmVhZCBmcm9tIHRoZSBvbmUgd2hpY2ggZG9lcyB0aGUKK2xvZ2dpbmcuIFRoaXMgaXMgaW1wb3J0YW50IGluIFdlYiBhcHBsaWNhdGlvbnMgYW5kIGFsc28gb3RoZXIgc2VydmljZQorYXBwbGljYXRpb25zIHdoZXJlIHRocmVhZHMgc2VydmljaW5nIGNsaWVudHMgbmVlZCB0byByZXNwb25kIGFzIHF1aWNrbHkgYXMKK3Bvc3NpYmxlLCB3aGlsZSBhbnkgcG90ZW50aWFsbHkgc2xvdyBvcGVyYXRpb25zIChzdWNoIGFzIHNlbmRpbmcgYW4gZW1haWwgdmlhCis6Y2xhc3M6YFNNVFBIYW5kbGVyYCkgYXJlIGRvbmUgb24gYSBzZXBhcmF0ZSB0aHJlYWQuCisKKy4uIGNsYXNzOjogUXVldWVIYW5kbGVyKHF1ZXVlKQorCisgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFF1ZXVlSGFuZGxlcmAgY2xhc3MuIFRoZSBpbnN0YW5jZSBpcworICAgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcXVldWUgdG8gc2VuZCBtZXNzYWdlcyB0by4gVGhlIHF1ZXVlIGNhbiBiZSBhbnkgcXVldWUtCisgICBsaWtlIG9iamVjdDsgaXQncyB1c2VkIGFzLWlzIGJ5IHRoZSA6bWV0aDpgZW5xdWV1ZWAgbWV0aG9kLCB3aGljaCBuZWVkcworICAgdG8ga25vdyBob3cgdG8gc2VuZCBtZXNzYWdlcyB0byBpdC4KKworCisgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKKworICAgICAgRW5xdWV1ZXMgdGhlIHJlc3VsdCBvZiBwcmVwYXJpbmcgdGhlIExvZ1JlY29yZC4KKworICAgLi4gbWV0aG9kOjogcHJlcGFyZShyZWNvcmQpCisKKyAgICAgIFByZXBhcmVzIGEgcmVjb3JkIGZvciBxdWV1aW5nLiBUaGUgb2JqZWN0IHJldHVybmVkIGJ5IHRoaXMKKyAgICAgIG1ldGhvZCBpcyBlbnF1ZXVlZC4KKworICAgICAgVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gZm9ybWF0cyB0aGUgcmVjb3JkIHRvIG1lcmdlIHRoZSBtZXNzYWdlCisgICAgICBhbmQgYXJndW1lbnRzLCBhbmQgcmVtb3ZlcyB1bnBpY2tsZWFibGUgaXRlbXMgZnJvbSB0aGUgcmVjb3JkCisgICAgICBpbi1wbGFjZS4KKworICAgICAgWW91IG1pZ2h0IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgeW91IHdhbnQgdG8gY29udmVydAorICAgICAgdGhlIHJlY29yZCB0byBhIGRpY3Qgb3IgSlNPTiBzdHJpbmcsIG9yIHNlbmQgYSBtb2RpZmllZCBjb3B5CisgICAgICBvZiB0aGUgcmVjb3JkIHdoaWxlIGxlYXZpbmcgdGhlIG9yaWdpbmFsIGludGFjdC4KKworICAgLi4gbWV0aG9kOjogZW5xdWV1ZShyZWNvcmQpCisKKyAgICAgIEVucXVldWVzIHRoZSByZWNvcmQgb24gdGhlIHF1ZXVlIHVzaW5nIGBgcHV0X25vd2FpdCgpYGA7IHlvdSBtYXkKKyAgICAgIHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgYmxvY2tpbmcgYmVoYXZpb3VyLCBvciBhCisgICAgICB0aW1lb3V0LCBvciBhIGN1c3RvbWlzZWQgcXVldWUgaW1wbGVtZW50YXRpb24uCisKKworCisuLiBxdWV1ZS1saXN0ZW5lcjoKKworUXVldWVMaXN0ZW5lcgorXl5eXl5eXl5eXl5eXgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworVGhlIDpjbGFzczpgUXVldWVMaXN0ZW5lcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgCittb2R1bGUsIHN1cHBvcnRzIHJlY2VpdmluZyBsb2dnaW5nIG1lc3NhZ2VzIGZyb20gYSBxdWV1ZSwgc3VjaCBhcyB0aG9zZQoraW1wbGVtZW50ZWQgaW4gdGhlIDptb2Q6YHF1ZXVlYCBvciA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZXMuIFRoZQorbWVzc2FnZXMgYXJlIHJlY2VpdmVkIGZyb20gYSBxdWV1ZSBpbiBhbiBpbnRlcm5hbCB0aHJlYWQgYW5kIHBhc3NlZCwgb24KK3RoZSBzYW1lIHRocmVhZCwgdG8gb25lIG9yIG1vcmUgaGFuZGxlcnMgZm9yIHByb2Nlc3NpbmcuIFdoaWxlCis6Y2xhc3M6YFF1ZXVlTGlzdGVuZXJgIGlzIG5vdCBpdHNlbGYgYSBoYW5kbGVyLCBpdCBpcyBkb2N1bWVudGVkIGhlcmUKK2JlY2F1c2UgaXQgd29ya3MgaGFuZC1pbi1oYW5kIHdpdGggOmNsYXNzOmBRdWV1ZUhhbmRsZXJgLgorCitBbG9uZyB3aXRoIHRoZSA6Y2xhc3M6YFF1ZXVlSGFuZGxlcmAgY2xhc3MsIDpjbGFzczpgUXVldWVMaXN0ZW5lcmAgY2FuIGJlIHVzZWQKK3RvIGxldCBoYW5kbGVycyBkbyB0aGVpciB3b3JrIG9uIGEgc2VwYXJhdGUgdGhyZWFkIGZyb20gdGhlIG9uZSB3aGljaCBkb2VzIHRoZQorbG9nZ2luZy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gV2ViIGFwcGxpY2F0aW9ucyBhbmQgYWxzbyBvdGhlciBzZXJ2aWNlCithcHBsaWNhdGlvbnMgd2hlcmUgdGhyZWFkcyBzZXJ2aWNpbmcgY2xpZW50cyBuZWVkIHRvIHJlc3BvbmQgYXMgcXVpY2tseSBhcworcG9zc2libGUsIHdoaWxlIGFueSBwb3RlbnRpYWxseSBzbG93IG9wZXJhdGlvbnMgKHN1Y2ggYXMgc2VuZGluZyBhbiBlbWFpbCB2aWEKKzpjbGFzczpgU01UUEhhbmRsZXJgKSBhcmUgZG9uZSBvbiBhIHNlcGFyYXRlIHRocmVhZC4KKworLi4gY2xhc3M6OiBRdWV1ZUxpc3RlbmVyKHF1ZXVlLCAqaGFuZGxlcnMpCisKKyAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgUXVldWVMaXN0ZW5lcmAgY2xhc3MuIFRoZSBpbnN0YW5jZSBpcworICAgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgcXVldWUgdG8gc2VuZCBtZXNzYWdlcyB0byBhbmQgYSBsaXN0IG9mIGhhbmRsZXJzIHdoaWNoCisgICB3aWxsIGhhbmRsZSBlbnRyaWVzIHBsYWNlZCBvbiB0aGUgcXVldWUuIFRoZSBxdWV1ZSBjYW4gYmUgYW55IHF1ZXVlLQorICAgbGlrZSBvYmplY3Q7IGl0J3MgcGFzc2VkIGFzLWlzIHRvIHRoZSA6bWV0aDpgZGVxdWV1ZWAgbWV0aG9kLCB3aGljaCBuZWVkcworICAgdG8ga25vdyBob3cgdG8gZ2V0IG1lc3NhZ2VzIGZyb20gaXQuCisKKyAgIC4uIG1ldGhvZDo6IGRlcXVldWUoYmxvY2spCisKKyAgICAgIERlcXVldWVzIGEgcmVjb3JkIGFuZCByZXR1cm4gaXQsIG9wdGlvbmFsbHkgYmxvY2tpbmcuCisKKyAgICAgIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIHVzZXMgYGBnZXQoKWBgLiBZb3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcworICAgICAgbWV0aG9kIGlmIHlvdSB3YW50IHRvIHVzZSB0aW1lb3V0cyBvciB3b3JrIHdpdGggY3VzdG9tIHF1ZXVlCisgICAgICBpbXBsZW1lbnRhdGlvbnMuCisKKyAgIC4uIG1ldGhvZDo6IHByZXBhcmUocmVjb3JkKQorCisgICAgICBQcmVwYXJlIGEgcmVjb3JkIGZvciBoYW5kbGluZy4KKworICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBqdXN0IHJldHVybnMgdGhlIHBhc3NlZC1pbiByZWNvcmQuIFlvdSBtYXkgd2FudCB0bworICAgICAgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgeW91IG5lZWQgdG8gZG8gYW55IGN1c3RvbSBtYXJzaGFsbGluZyBvcgorICAgICAgbWFuaXB1bGF0aW9uIG9mIHRoZSByZWNvcmQgYmVmb3JlIHBhc3NpbmcgaXQgdG8gdGhlIGhhbmRsZXJzLgorCisgICAuLiBtZXRob2Q6OiBoYW5kbGUocmVjb3JkKQorCisgICAgICBIYW5kbGUgYSByZWNvcmQuCisKKyAgICAgIFRoaXMganVzdCBsb29wcyB0aHJvdWdoIHRoZSBoYW5kbGVycyBvZmZlcmluZyB0aGVtIHRoZSByZWNvcmQKKyAgICAgIHRvIGhhbmRsZS4gVGhlIGFjdHVhbCBvYmplY3QgcGFzc2VkIHRvIHRoZSBoYW5kbGVycyBpcyB0aGF0IHdoaWNoCisgICAgICBpcyByZXR1cm5lZCBmcm9tIDptZXRoOmBwcmVwYXJlYC4KKworICAgLi4gbWV0aG9kOjogc3RhcnQoKQorCisgICAgICBTdGFydHMgdGhlIGxpc3RlbmVyLgorCisgICAgICBUaGlzIHN0YXJ0cyB1cCBhIGJhY2tncm91bmQgdGhyZWFkIHRvIG1vbml0b3IgdGhlIHF1ZXVlIGZvcgorICAgICAgTG9nUmVjb3JkcyB0byBwcm9jZXNzLgorCisgICAuLiBtZXRob2Q6OiBzdG9wKCkKKworICAgICAgU3RvcHMgdGhlIGxpc3RlbmVyLgorCisgICAgICBUaGlzIGFza3MgdGhlIHRocmVhZCB0byB0ZXJtaW5hdGUsIGFuZCB0aGVuIHdhaXRzIGZvciBpdCB0byBkbyBzby4KKyAgICAgIE5vdGUgdGhhdCBpZiB5b3UgZG9uJ3QgY2FsbCB0aGlzIGJlZm9yZSB5b3VyIGFwcGxpY2F0aW9uIGV4aXRzLCB0aGVyZQorICAgICAgbWF5IGJlIHNvbWUgcmVjb3JkcyBzdGlsbCBsZWZ0IG9uIHRoZSBxdWV1ZSwgd2hpY2ggd29uJ3QgYmUgcHJvY2Vzc2VkLgorCisKKy4uIHNlZWFsc286OgorCisgICBNb2R1bGUgOm1vZDpgbG9nZ2luZ2AKKyAgICAgIEFQSSByZWZlcmVuY2UgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4KKworICAgTW9kdWxlIDptb2Q6YGxvZ2dpbmcuY29uZmlnYAorICAgICAgQ29uZmlndXJhdGlvbiBBUEkgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4KKworCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CmluZGV4IDQ2YjY0M2YuLjMyZjc2MmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcucnN0CkBAIC0yLDcgKzIsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBsb2dnaW5nCi0gICA6c3lub3BzaXM6IEZsZXhpYmxlIGVycm9yIGxvZ2dpbmcgc3lzdGVtIGZvciBhcHBsaWNhdGlvbnMuCisgICA6c3lub3BzaXM6IEZsZXhpYmxlIGV2ZW50IGxvZ2dpbmcgc3lzdGVtIGZvciBhcHBsaWNhdGlvbnMuCiAKIAogLi4gbW9kdWxlYXV0aG9yOjogVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4KQEAgLTExLDgzMyArMTEsMzggQEAKIAogLi4gaW5kZXg6OiBwYWlyOiBFcnJvcnM7IGxvZ2dpbmcKIAotVGhpcyBtb2R1bGUgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgd2hpY2ggaW1wbGVtZW50IGEgZmxleGlibGUgZXJyb3IKLWxvZ2dpbmcgc3lzdGVtIGZvciBhcHBsaWNhdGlvbnMuCisuLiBzaWRlYmFyOjogSW1wb3J0YW50CiAKLUxvZ2dpbmcgaXMgcGVyZm9ybWVkIGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiBpbnN0YW5jZXMgb2YgdGhlIDpjbGFzczpgTG9nZ2VyYAotY2xhc3MgKGhlcmVhZnRlciBjYWxsZWQgOmRmbjpgbG9nZ2Vyc2ApLiBFYWNoIGluc3RhbmNlIGhhcyBhIG5hbWUsIGFuZCB0aGV5IGFyZQotY29uY2VwdHVhbGx5IGFycmFuZ2VkIGluIGEgbmFtZXNwYWNlIGhpZXJhcmNoeSB1c2luZyBkb3RzIChwZXJpb2RzKSBhcwotc2VwYXJhdG9ycy4gRm9yIGV4YW1wbGUsIGEgbG9nZ2VyIG5hbWVkICJzY2FuIiBpcyB0aGUgcGFyZW50IG9mIGxvZ2dlcnMKLSJzY2FuLnRleHQiLCAic2Nhbi5odG1sIiBhbmQgInNjYW4ucGRmIi4gTG9nZ2VyIG5hbWVzIGNhbiBiZSBhbnl0aGluZyB5b3Ugd2FudCwKLWFuZCBpbmRpY2F0ZSB0aGUgYXJlYSBvZiBhbiBhcHBsaWNhdGlvbiBpbiB3aGljaCBhIGxvZ2dlZCBtZXNzYWdlIG9yaWdpbmF0ZXMuCisgICBUaGlzIHBhZ2UgY29udGFpbnMgdGhlIEFQSSByZWZlcmVuY2UgaW5mb3JtYXRpb24uIEZvciB0dXRvcmlhbAorICAgaW5mb3JtYXRpb24gYW5kIGRpc2N1c3Npb24gb2YgbW9yZSBhZHZhbmNlZCB0b3BpY3MsIHNlZQogCi1Mb2dnZWQgbWVzc2FnZXMgYWxzbyBoYXZlIGxldmVscyBvZiBpbXBvcnRhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGVtLiBUaGUgZGVmYXVsdAotbGV2ZWxzIHByb3ZpZGVkIGFyZSA6Y29uc3Q6YERFQlVHYCwgOmNvbnN0OmBJTkZPYCwgOmNvbnN0OmBXQVJOSU5HYCwKLTpjb25zdDpgRVJST1JgIGFuZCA6Y29uc3Q6YENSSVRJQ0FMYC4gQXMgYSBjb252ZW5pZW5jZSwgeW91IGluZGljYXRlIHRoZQotaW1wb3J0YW5jZSBvZiBhIGxvZ2dlZCBtZXNzYWdlIGJ5IGNhbGxpbmcgYW4gYXBwcm9wcmlhdGUgbWV0aG9kIG9mCi06Y2xhc3M6YExvZ2dlcmAuIFRoZSBtZXRob2RzIGFyZSA6bWV0aDpgZGVidWdgLCA6bWV0aDpgaW5mb2AsIDptZXRoOmB3YXJuaW5nYCwKLTptZXRoOmBlcnJvcmAgYW5kIDptZXRoOmBjcml0aWNhbGAsIHdoaWNoIG1pcnJvciB0aGUgZGVmYXVsdCBsZXZlbHMuIFlvdSBhcmUgbm90Ci1jb25zdHJhaW5lZCB0byB1c2UgdGhlc2UgbGV2ZWxzOiB5b3UgY2FuIHNwZWNpZnkgeW91ciBvd24gYW5kIHVzZSBhIG1vcmUgZ2VuZXJhbAotOmNsYXNzOmBMb2dnZXJgIG1ldGhvZCwgOm1ldGg6YGxvZ2AsIHdoaWNoIHRha2VzIGFuIGV4cGxpY2l0IGxldmVsIGFyZ3VtZW50LgorICAgKiA6cmVmOmBCYXNpYyBUdXRvcmlhbCA8bG9nZ2luZy1iYXNpYy10dXRvcmlhbD5gCisgICAqIDpyZWY6YEFkdmFuY2VkIFR1dG9yaWFsIDxsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsPmAKKyAgICogOnJlZjpgTG9nZ2luZyBDb29rYm9vayA8bG9nZ2luZy1jb29rYm9vaz5gCiAKIAotTG9nZ2luZyB0dXRvcmlhbAotLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBtb2R1bGUgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgd2hpY2ggaW1wbGVtZW50IGEgZmxleGlibGUgZXZlbnQKK2xvZ2dpbmcgc3lzdGVtIGZvciBhcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcy4KIAogVGhlIGtleSBiZW5lZml0IG9mIGhhdmluZyB0aGUgbG9nZ2luZyBBUEkgcHJvdmlkZWQgYnkgYSBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZQogaXMgdGhhdCBhbGwgUHl0aG9uIG1vZHVsZXMgY2FuIHBhcnRpY2lwYXRlIGluIGxvZ2dpbmcsIHNvIHlvdXIgYXBwbGljYXRpb24gbG9nCi1jYW4gaW5jbHVkZSBtZXNzYWdlcyBmcm9tIHRoaXJkLXBhcnR5IG1vZHVsZXMuCitjYW4gaW5jbHVkZSB5b3VyIG93biBtZXNzYWdlcyBpbnRlZ3JhdGVkIHdpdGggbWVzc2FnZXMgZnJvbSB0aGlyZC1wYXJ0eQorbW9kdWxlcy4KIAotSXQgaXMsIG9mIGNvdXJzZSwgcG9zc2libGUgdG8gbG9nIG1lc3NhZ2VzIHdpdGggZGlmZmVyZW50IHZlcmJvc2l0eSBsZXZlbHMgb3IgdG8KLWRpZmZlcmVudCBkZXN0aW5hdGlvbnMuICBTdXBwb3J0IGZvciB3cml0aW5nIGxvZyBtZXNzYWdlcyB0byBmaWxlcywgSFRUUAotR0VUL1BPU1QgbG9jYXRpb25zLCBlbWFpbCB2aWEgU01UUCwgZ2VuZXJpYyBzb2NrZXRzLCBvciBPUy1zcGVjaWZpYyBsb2dnaW5nCi1tZWNoYW5pc21zIGFyZSBhbGwgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCBtb2R1bGUuICBZb3UgY2FuIGFsc28gY3JlYXRlIHlvdXIKLW93biBsb2cgZGVzdGluYXRpb24gY2xhc3MgaWYgeW91IGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgbm90IG1ldCBieSBhbnkgb2YgdGhlCi1idWlsdC1pbiBjbGFzc2VzLgorVGhlIG1vZHVsZSBwcm92aWRlcyBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5IGFuZCBmbGV4aWJpbGl0eS4gIElmIHlvdSBhcmUKK3VuZmFtaWxpYXIgd2l0aCBsb2dnaW5nLCB0aGUgYmVzdCB3YXkgdG8gZ2V0IHRvIGdyaXBzIHdpdGggaXQgaXMgdG8gc2VlIHRoZQordHV0b3JpYWxzIChzZWUgdGhlIGxpbmtzIG9uIHRoZSByaWdodCkuCiAKLVNpbXBsZSBleGFtcGxlcwotXl5eXl5eXl5eXl5eXl5eCitUaGUgYmFzaWMgY2xhc3NlcyBkZWZpbmVkIGJ5IHRoZSBtb2R1bGUsIHRvZ2V0aGVyIHdpdGggdGhlaXIgZnVuY3Rpb25zLCBhcmUKK2xpc3RlZCBiZWxvdy4KIAotLi4gc2VjdGlvbmF1dGhvcjo6IERvdWcgSGVsbG1hbm4KLS4uIChzZWUgPGh0dHA6Ly9ibG9nLmRvdWdoZWxsbWFubi5jb20vMjAwNy8wNS9weW1vdHctbG9nZ2luZy5odG1sPikKLQotTW9zdCBhcHBsaWNhdGlvbnMgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHdhbnQgdG8gbG9nIHRvIGEgZmlsZSwgc28gbGV0J3Mgc3RhcnQKLXdpdGggdGhhdCBjYXNlLiBVc2luZyB0aGUgOmZ1bmM6YGJhc2ljQ29uZmlnYCBmdW5jdGlvbiwgd2UgY2FuIHNldCB1cCB0aGUKLWRlZmF1bHQgaGFuZGxlciBzbyB0aGF0IGRlYnVnIG1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIGEgZmlsZSAoaW4gdGhlIGV4YW1wbGUsCi13ZSBhc3N1bWUgdGhhdCB5b3UgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMgdG8gY3JlYXRlIGEgZmlsZSBjYWxsZWQKLSpleGFtcGxlLmxvZyogaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5KTo6Ci0KLSAgIGltcG9ydCBsb2dnaW5nCi0gICBMT0dfRklMRU5BTUUgPSAnZXhhbXBsZS5sb2cnCi0gICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZpbGVuYW1lPUxPR19GSUxFTkFNRSxsZXZlbD1sb2dnaW5nLkRFQlVHKQotCi0gICBsb2dnaW5nLmRlYnVnKCdUaGlzIG1lc3NhZ2Ugc2hvdWxkIGdvIHRvIHRoZSBsb2cgZmlsZScpCi0KLUFuZCBub3cgaWYgd2Ugb3BlbiB0aGUgZmlsZSBhbmQgbG9vayBhdCB3aGF0IHdlIGhhdmUsIHdlIHNob3VsZCBmaW5kIHRoZSBsb2cKLW1lc3NhZ2U6OgotCi0gICBERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCi0KLUlmIHlvdSBydW4gdGhlIHNjcmlwdCByZXBlYXRlZGx5LCB0aGUgYWRkaXRpb25hbCBsb2cgbWVzc2FnZXMgYXJlIGFwcGVuZGVkIHRvCi10aGUgZmlsZS4gIFRvIGNyZWF0ZSBhIG5ldyBmaWxlIGVhY2ggdGltZSwgeW91IGNhbiBwYXNzIGEgKmZpbGVtb2RlKiBhcmd1bWVudCB0bwotOmZ1bmM6YGJhc2ljQ29uZmlnYCB3aXRoIGEgdmFsdWUgb2YgYGAndydgYC4gIFJhdGhlciB0aGFuIG1hbmFnaW5nIHRoZSBmaWxlIHNpemUKLXlvdXJzZWxmLCB0aG91Z2gsIGl0IGlzIHNpbXBsZXIgdG8gdXNlIGEgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYDo6Ci0KLSAgIGltcG9ydCBnbG9iCi0gICBpbXBvcnQgbG9nZ2luZwotICAgaW1wb3J0IGxvZ2dpbmcuaGFuZGxlcnMKLQotICAgTE9HX0ZJTEVOQU1FID0gJ2xvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0JwotCi0gICAjIFNldCB1cCBhIHNwZWNpZmljIGxvZ2dlciB3aXRoIG91ciBkZXNpcmVkIG91dHB1dCBsZXZlbAotICAgbXlfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ015TG9nZ2VyJykKLSAgIG15X2xvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQotCi0gICAjIEFkZCB0aGUgbG9nIG1lc3NhZ2UgaGFuZGxlciB0byB0aGUgbG9nZ2VyCi0gICBoYW5kbGVyID0gbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyKAotICAgICAgICAgICAgICAgICBMT0dfRklMRU5BTUUsIG1heEJ5dGVzPTIwLCBiYWNrdXBDb3VudD01KQotCi0gICBteV9sb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQotCi0gICAjIExvZyBzb21lIG1lc3NhZ2VzCi0gICBmb3IgaSBpbiByYW5nZSgyMCk6Ci0gICAgICAgbXlfbG9nZ2VyLmRlYnVnKCdpID0gJWQnICUgaSkKLQotICAgIyBTZWUgd2hhdCBmaWxlcyBhcmUgY3JlYXRlZAotICAgbG9nZmlsZXMgPSBnbG9iLmdsb2IoJyVzKicgJSBMT0dfRklMRU5BTUUpCi0KLSAgIGZvciBmaWxlbmFtZSBpbiBsb2dmaWxlczoKLSAgICAgICBwcmludChmaWxlbmFtZSkKLQotVGhlIHJlc3VsdCBzaG91bGQgYmUgNiBzZXBhcmF0ZSBmaWxlcywgZWFjaCB3aXRoIHBhcnQgb2YgdGhlIGxvZyBoaXN0b3J5IGZvciB0aGUKLWFwcGxpY2F0aW9uOjoKLQotICAgbG9nZ2luZ19yb3RhdGluZ2ZpbGVfZXhhbXBsZS5vdXQKLSAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0LjEKLSAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0LjIKLSAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0LjMKLSAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0LjQKLSAgIGxvZ2dpbmdfcm90YXRpbmdmaWxlX2V4YW1wbGUub3V0LjUKLQotVGhlIG1vc3QgY3VycmVudCBmaWxlIGlzIGFsd2F5cyA6ZmlsZTpgbG9nZ2luZ19yb3RhdGluZ2ZpbGVfZXhhbXBsZS5vdXRgLAotYW5kIGVhY2ggdGltZSBpdCByZWFjaGVzIHRoZSBzaXplIGxpbWl0IGl0IGlzIHJlbmFtZWQgd2l0aCB0aGUgc3VmZml4Ci1gYC4xYGAuIEVhY2ggb2YgdGhlIGV4aXN0aW5nIGJhY2t1cCBmaWxlcyBpcyByZW5hbWVkIHRvIGluY3JlbWVudCB0aGUgc3VmZml4Ci0oYGAuMWBgIGJlY29tZXMgYGAuMmBgLCBldGMuKSAgYW5kIHRoZSBgYC42YGAgZmlsZSBpcyBlcmFzZWQuCi0KLU9idmlvdXNseSB0aGlzIGV4YW1wbGUgc2V0cyB0aGUgbG9nIGxlbmd0aCBtdWNoIG11Y2ggdG9vIHNtYWxsIGFzIGFuIGV4dHJlbWUKLWV4YW1wbGUuICBZb3Ugd291bGQgd2FudCB0byBzZXQgKm1heEJ5dGVzKiB0byBhbiBhcHByb3ByaWF0ZSB2YWx1ZS4KLQotQW5vdGhlciB1c2VmdWwgZmVhdHVyZSBvZiB0aGUgbG9nZ2luZyBBUEkgaXMgdGhlIGFiaWxpdHkgdG8gcHJvZHVjZSBkaWZmZXJlbnQKLW1lc3NhZ2VzIGF0IGRpZmZlcmVudCBsb2cgbGV2ZWxzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGluc3RydW1lbnQgeW91ciBjb2RlIHdpdGgKLWRlYnVnIG1lc3NhZ2VzLCBmb3IgZXhhbXBsZSwgYnV0IHR1cm5pbmcgdGhlIGxvZyBsZXZlbCBkb3duIHNvIHRoYXQgdGhvc2UgZGVidWcKLW1lc3NhZ2VzIGFyZSBub3Qgd3JpdHRlbiBmb3IgeW91ciBwcm9kdWN0aW9uIHN5c3RlbS4gIFRoZSBkZWZhdWx0IGxldmVscyBhcmUKLWBgQ1JJVElDQUxgYCwgYGBFUlJPUmBgLCBgYFdBUk5JTkdgYCwgYGBJTkZPYGAsIGBgREVCVUdgYCBhbmQgYGBOT1RTRVRgYC4KLQotVGhlIGxvZ2dlciwgaGFuZGxlciwgYW5kIGxvZyBtZXNzYWdlIGNhbGwgZWFjaCBzcGVjaWZ5IGEgbGV2ZWwuICBUaGUgbG9nIG1lc3NhZ2UKLWlzIG9ubHkgZW1pdHRlZCBpZiB0aGUgaGFuZGxlciBhbmQgbG9nZ2VyIGFyZSBjb25maWd1cmVkIHRvIGVtaXQgbWVzc2FnZXMgb2YKLXRoYXQgbGV2ZWwgb3IgbG93ZXIuICBGb3IgZXhhbXBsZSwgaWYgYSBtZXNzYWdlIGlzIGBgQ1JJVElDQUxgYCwgYW5kIHRoZSBsb2dnZXIKLWlzIHNldCB0byBgYEVSUk9SYGAsIHRoZSBtZXNzYWdlIGlzIGVtaXR0ZWQuICBJZiBhIG1lc3NhZ2UgaXMgYSBgYFdBUk5JTkdgYCwgYW5kCi10aGUgbG9nZ2VyIGlzIHNldCB0byBwcm9kdWNlIG9ubHkgYGBFUlJPUmBgXHMsIHRoZSBtZXNzYWdlIGlzIG5vdCBlbWl0dGVkOjoKLQotICAgaW1wb3J0IGxvZ2dpbmcKLSAgIGltcG9ydCBzeXMKLQotICAgTEVWRUxTID0geydkZWJ1Zyc6IGxvZ2dpbmcuREVCVUcsCi0gICAgICAgICAgICAgJ2luZm8nOiBsb2dnaW5nLklORk8sCi0gICAgICAgICAgICAgJ3dhcm5pbmcnOiBsb2dnaW5nLldBUk5JTkcsCi0gICAgICAgICAgICAgJ2Vycm9yJzogbG9nZ2luZy5FUlJPUiwKLSAgICAgICAgICAgICAnY3JpdGljYWwnOiBsb2dnaW5nLkNSSVRJQ0FMfQotCi0gICBpZiBsZW4oc3lzLmFyZ3YpID4gMToKLSAgICAgICBsZXZlbF9uYW1lID0gc3lzLmFyZ3ZbMV0KLSAgICAgICBsZXZlbCA9IExFVkVMUy5nZXQobGV2ZWxfbmFtZSwgbG9nZ2luZy5OT1RTRVQpCi0gICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sZXZlbCkKLQotICAgbG9nZ2luZy5kZWJ1ZygnVGhpcyBpcyBhIGRlYnVnIG1lc3NhZ2UnKQotICAgbG9nZ2luZy5pbmZvKCdUaGlzIGlzIGFuIGluZm8gbWVzc2FnZScpCi0gICBsb2dnaW5nLndhcm5pbmcoJ1RoaXMgaXMgYSB3YXJuaW5nIG1lc3NhZ2UnKQotICAgbG9nZ2luZy5lcnJvcignVGhpcyBpcyBhbiBlcnJvciBtZXNzYWdlJykKLSAgIGxvZ2dpbmcuY3JpdGljYWwoJ1RoaXMgaXMgYSBjcml0aWNhbCBlcnJvciBtZXNzYWdlJykKLQotUnVuIHRoZSBzY3JpcHQgd2l0aCBhbiBhcmd1bWVudCBsaWtlICdkZWJ1Zycgb3IgJ3dhcm5pbmcnIHRvIHNlZSB3aGljaCBtZXNzYWdlcwotc2hvdyB1cCBhdCBkaWZmZXJlbnQgbGV2ZWxzOjoKLQotICAgJCBweXRob24gbG9nZ2luZ19sZXZlbF9leGFtcGxlLnB5IGRlYnVnCi0gICBERUJVRzpyb290OlRoaXMgaXMgYSBkZWJ1ZyBtZXNzYWdlCi0gICBJTkZPOnJvb3Q6VGhpcyBpcyBhbiBpbmZvIG1lc3NhZ2UKLSAgIFdBUk5JTkc6cm9vdDpUaGlzIGlzIGEgd2FybmluZyBtZXNzYWdlCi0gICBFUlJPUjpyb290OlRoaXMgaXMgYW4gZXJyb3IgbWVzc2FnZQotICAgQ1JJVElDQUw6cm9vdDpUaGlzIGlzIGEgY3JpdGljYWwgZXJyb3IgbWVzc2FnZQotCi0gICAkIHB5dGhvbiBsb2dnaW5nX2xldmVsX2V4YW1wbGUucHkgaW5mbwotICAgSU5GTzpyb290OlRoaXMgaXMgYW4gaW5mbyBtZXNzYWdlCi0gICBXQVJOSU5HOnJvb3Q6VGhpcyBpcyBhIHdhcm5pbmcgbWVzc2FnZQotICAgRVJST1I6cm9vdDpUaGlzIGlzIGFuIGVycm9yIG1lc3NhZ2UKLSAgIENSSVRJQ0FMOnJvb3Q6VGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yIG1lc3NhZ2UKLQotWW91IHdpbGwgbm90aWNlIHRoYXQgdGhlc2UgbG9nIG1lc3NhZ2VzIGFsbCBoYXZlIGBgcm9vdGBgIGVtYmVkZGVkIGluIHRoZW0uICBUaGUKLWxvZ2dpbmcgbW9kdWxlIHN1cHBvcnRzIGEgaGllcmFyY2h5IG9mIGxvZ2dlcnMgd2l0aCBkaWZmZXJlbnQgbmFtZXMuICBBbiBlYXN5Ci13YXkgdG8gdGVsbCB3aGVyZSBhIHNwZWNpZmljIGxvZyBtZXNzYWdlIGNvbWVzIGZyb20gaXMgdG8gdXNlIGEgc2VwYXJhdGUgbG9nZ2VyCi1vYmplY3QgZm9yIGVhY2ggb2YgeW91ciBtb2R1bGVzLiAgRWFjaCBuZXcgbG9nZ2VyICJpbmhlcml0cyIgdGhlIGNvbmZpZ3VyYXRpb24KLW9mIGl0cyBwYXJlbnQsIGFuZCBsb2cgbWVzc2FnZXMgc2VudCB0byBhIGxvZ2dlciBpbmNsdWRlIHRoZSBuYW1lIG9mIHRoYXQKLWxvZ2dlci4gIE9wdGlvbmFsbHksIGVhY2ggbG9nZ2VyIGNhbiBiZSBjb25maWd1cmVkIGRpZmZlcmVudGx5LCBzbyB0aGF0IG1lc3NhZ2VzCi1mcm9tIGRpZmZlcmVudCBtb2R1bGVzIGFyZSBoYW5kbGVkIGluIGRpZmZlcmVudCB3YXlzLiAgTGV0J3MgbG9vayBhdCBhIHNpbXBsZQotZXhhbXBsZSBvZiBob3cgdG8gbG9nIGZyb20gZGlmZmVyZW50IG1vZHVsZXMgc28gaXQgaXMgZWFzeSB0byB0cmFjZSB0aGUgc291cmNlCi1vZiB0aGUgbWVzc2FnZTo6Ci0KLSAgIGltcG9ydCBsb2dnaW5nCi0KLSAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5XQVJOSU5HKQotCi0gICBsb2dnZXIxID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3BhY2thZ2UxLm1vZHVsZTEnKQotICAgbG9nZ2VyMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdwYWNrYWdlMi5tb2R1bGUyJykKLQotICAgbG9nZ2VyMS53YXJuaW5nKCdUaGlzIG1lc3NhZ2UgY29tZXMgZnJvbSBvbmUgbW9kdWxlJykKLSAgIGxvZ2dlcjIud2FybmluZygnQW5kIHRoaXMgbWVzc2FnZSBjb21lcyBmcm9tIGFub3RoZXIgbW9kdWxlJykKLQotQW5kIHRoZSBvdXRwdXQ6OgotCi0gICAkIHB5dGhvbiBsb2dnaW5nX21vZHVsZXNfZXhhbXBsZS5weQotICAgV0FSTklORzpwYWNrYWdlMS5tb2R1bGUxOlRoaXMgbWVzc2FnZSBjb21lcyBmcm9tIG9uZSBtb2R1bGUKLSAgIFdBUk5JTkc6cGFja2FnZTIubW9kdWxlMjpBbmQgdGhpcyBtZXNzYWdlIGNvbWVzIGZyb20gYW5vdGhlciBtb2R1bGUKLQotVGhlcmUgYXJlIG1hbnkgbW9yZSBvcHRpb25zIGZvciBjb25maWd1cmluZyBsb2dnaW5nLCBpbmNsdWRpbmcgZGlmZmVyZW50IGxvZwotbWVzc2FnZSBmb3JtYXR0aW5nIG9wdGlvbnMsIGhhdmluZyBtZXNzYWdlcyBkZWxpdmVyZWQgdG8gbXVsdGlwbGUgZGVzdGluYXRpb25zLAotYW5kIGNoYW5naW5nIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgbG9uZy1ydW5uaW5nIGFwcGxpY2F0aW9uIG9uIHRoZSBmbHkgdXNpbmcgYQotc29ja2V0IGludGVyZmFjZS4gIEFsbCBvZiB0aGVzZSBvcHRpb25zIGFyZSBjb3ZlcmVkIGluIGRlcHRoIGluIHRoZSBsaWJyYXJ5Ci1tb2R1bGUgZG9jdW1lbnRhdGlvbi4KLQotTG9nZ2VycwotXl5eXl5eXgotCi1UaGUgbG9nZ2luZyBsaWJyYXJ5IHRha2VzIGEgbW9kdWxhciBhcHByb2FjaCBhbmQgb2ZmZXJzIHRoZSBzZXZlcmFsIGNhdGVnb3JpZXMKLW9mIGNvbXBvbmVudHM6IGxvZ2dlcnMsIGhhbmRsZXJzLCBmaWx0ZXJzLCBhbmQgZm9ybWF0dGVycy4gIExvZ2dlcnMgZXhwb3NlIHRoZQotaW50ZXJmYWNlIHRoYXQgYXBwbGljYXRpb24gY29kZSBkaXJlY3RseSB1c2VzLiAgSGFuZGxlcnMgc2VuZCB0aGUgbG9nIHJlY29yZHMgdG8KLXRoZSBhcHByb3ByaWF0ZSBkZXN0aW5hdGlvbi4gRmlsdGVycyBwcm92aWRlIGEgZmluZXIgZ3JhaW5lZCBmYWNpbGl0eSBmb3IKLWRldGVybWluaW5nIHdoaWNoIGxvZyByZWNvcmRzIHRvIHNlbmQgb24gdG8gYSBoYW5kbGVyLiAgRm9ybWF0dGVycyBzcGVjaWZ5IHRoZQotbGF5b3V0IG9mIHRoZSByZXN1bHRhbnQgbG9nIHJlY29yZC4KLQotOmNsYXNzOmBMb2dnZXJgIG9iamVjdHMgaGF2ZSBhIHRocmVlZm9sZCBqb2IuICBGaXJzdCwgdGhleSBleHBvc2Ugc2V2ZXJhbAotbWV0aG9kcyB0byBhcHBsaWNhdGlvbiBjb2RlIHNvIHRoYXQgYXBwbGljYXRpb25zIGNhbiBsb2cgbWVzc2FnZXMgYXQgcnVudGltZS4KLVNlY29uZCwgbG9nZ2VyIG9iamVjdHMgZGV0ZXJtaW5lIHdoaWNoIGxvZyBtZXNzYWdlcyB0byBhY3QgdXBvbiBiYXNlZCB1cG9uCi1zZXZlcml0eSAodGhlIGRlZmF1bHQgZmlsdGVyaW5nIGZhY2lsaXR5KSBvciBmaWx0ZXIgb2JqZWN0cy4gIFRoaXJkLCBsb2dnZXIKLW9iamVjdHMgcGFzcyBhbG9uZyByZWxldmFudCBsb2cgbWVzc2FnZXMgdG8gYWxsIGludGVyZXN0ZWQgbG9nIGhhbmRsZXJzLgotCi1UaGUgbW9zdCB3aWRlbHkgdXNlZCBtZXRob2RzIG9uIGxvZ2dlciBvYmplY3RzIGZhbGwgaW50byB0d28gY2F0ZWdvcmllczoKLWNvbmZpZ3VyYXRpb24gYW5kIG1lc3NhZ2Ugc2VuZGluZy4KLQotKiA6bWV0aDpgTG9nZ2VyLnNldExldmVsYCBzcGVjaWZpZXMgdGhlIGxvd2VzdC1zZXZlcml0eSBsb2cgbWVzc2FnZSBhIGxvZ2dlcgotICB3aWxsIGhhbmRsZSwgd2hlcmUgZGVidWcgaXMgdGhlIGxvd2VzdCBidWlsdC1pbiBzZXZlcml0eSBsZXZlbCBhbmQgY3JpdGljYWwgaXMKLSAgdGhlIGhpZ2hlc3QgYnVpbHQtaW4gc2V2ZXJpdHkuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHNldmVyaXR5IGxldmVsIGlzIGluZm8sCi0gIHRoZSBsb2dnZXIgd2lsbCBoYW5kbGUgb25seSBpbmZvLCB3YXJuaW5nLCBlcnJvciwgYW5kIGNyaXRpY2FsIG1lc3NhZ2VzIGFuZAotICB3aWxsIGlnbm9yZSBkZWJ1ZyBtZXNzYWdlcy4KLQotKiA6bWV0aDpgTG9nZ2VyLmFkZEZpbHRlcmAgYW5kIDptZXRoOmBMb2dnZXIucmVtb3ZlRmlsdGVyYCBhZGQgYW5kIHJlbW92ZSBmaWx0ZXIKLSAgb2JqZWN0cyBmcm9tIHRoZSBsb2dnZXIgb2JqZWN0LiAgVGhpcyB0dXRvcmlhbCBkb2VzIG5vdCBhZGRyZXNzIGZpbHRlcnMuCi0KLVdpdGggdGhlIGxvZ2dlciBvYmplY3QgY29uZmlndXJlZCwgdGhlIGZvbGxvd2luZyBtZXRob2RzIGNyZWF0ZSBsb2cgbWVzc2FnZXM6Ci0KLSogOm1ldGg6YExvZ2dlci5kZWJ1Z2AsIDptZXRoOmBMb2dnZXIuaW5mb2AsIDptZXRoOmBMb2dnZXIud2FybmluZ2AsCi0gIDptZXRoOmBMb2dnZXIuZXJyb3JgLCBhbmQgOm1ldGg6YExvZ2dlci5jcml0aWNhbGAgYWxsIGNyZWF0ZSBsb2cgcmVjb3JkcyB3aXRoCi0gIGEgbWVzc2FnZSBhbmQgYSBsZXZlbCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZWlyIHJlc3BlY3RpdmUgbWV0aG9kIG5hbWVzLiBUaGUKLSAgbWVzc2FnZSBpcyBhY3R1YWxseSBhIGZvcm1hdCBzdHJpbmcsIHdoaWNoIG1heSBjb250YWluIHRoZSBzdGFuZGFyZCBzdHJpbmcKLSAgc3Vic3RpdHV0aW9uIHN5bnRheCBvZiA6Y29uc3Q6YCVzYCwgOmNvbnN0OmAlZGAsIDpjb25zdDpgJWZgLCBhbmQgc28gb24uICBUaGUKLSAgcmVzdCBvZiB0aGVpciBhcmd1bWVudHMgaXMgYSBsaXN0IG9mIG9iamVjdHMgdGhhdCBjb3JyZXNwb25kIHdpdGggdGhlCi0gIHN1YnN0aXR1dGlvbiBmaWVsZHMgaW4gdGhlIG1lc3NhZ2UuICBXaXRoIHJlZ2FyZCB0byA6Y29uc3Q6YCoqa3dhcmdzYCwgdGhlCi0gIGxvZ2dpbmcgbWV0aG9kcyBjYXJlIG9ubHkgYWJvdXQgYSBrZXl3b3JkIG9mIDpjb25zdDpgZXhjX2luZm9gIGFuZCB1c2UgaXQgdG8KLSAgZGV0ZXJtaW5lIHdoZXRoZXIgdG8gbG9nIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KLQotKiA6bWV0aDpgTG9nZ2VyLmV4Y2VwdGlvbmAgY3JlYXRlcyBhIGxvZyBtZXNzYWdlIHNpbWlsYXIgdG8KLSAgOm1ldGg6YExvZ2dlci5lcnJvcmAuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IDptZXRoOmBMb2dnZXIuZXhjZXB0aW9uYCBkdW1wcyBhCi0gIHN0YWNrIHRyYWNlIGFsb25nIHdpdGggaXQuICBDYWxsIHRoaXMgbWV0aG9kIG9ubHkgZnJvbSBhbiBleGNlcHRpb24gaGFuZGxlci4KLQotKiA6bWV0aDpgTG9nZ2VyLmxvZ2AgdGFrZXMgYSBsb2cgbGV2ZWwgYXMgYW4gZXhwbGljaXQgYXJndW1lbnQuICBUaGlzIGlzIGEKLSAgbGl0dGxlIG1vcmUgdmVyYm9zZSBmb3IgbG9nZ2luZyBtZXNzYWdlcyB0aGFuIHVzaW5nIHRoZSBsb2cgbGV2ZWwgY29udmVuaWVuY2UKLSAgbWV0aG9kcyBsaXN0ZWQgYWJvdmUsIGJ1dCB0aGlzIGlzIGhvdyB0byBsb2cgYXQgY3VzdG9tIGxvZyBsZXZlbHMuCi0KLTpmdW5jOmBnZXRMb2dnZXJgIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBsb2dnZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkCi1uYW1lIGlmIGl0IGlzIHByb3ZpZGVkLCBvciBgYHJvb3RgYCBpZiBub3QuICBUaGUgbmFtZXMgYXJlIHBlcmlvZC1zZXBhcmF0ZWQKLWhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmVzLiAgTXVsdGlwbGUgY2FsbHMgdG8gOmZ1bmM6YGdldExvZ2dlcmAgd2l0aCB0aGUgc2FtZSBuYW1lCi13aWxsIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBsb2dnZXIgb2JqZWN0LiAgTG9nZ2VycyB0aGF0IGFyZSBmdXJ0aGVyCi1kb3duIGluIHRoZSBoaWVyYXJjaGljYWwgbGlzdCBhcmUgY2hpbGRyZW4gb2YgbG9nZ2VycyBoaWdoZXIgdXAgaW4gdGhlIGxpc3QuCi1Gb3IgZXhhbXBsZSwgZ2l2ZW4gYSBsb2dnZXIgd2l0aCBhIG5hbWUgb2YgYGBmb29gYCwgbG9nZ2VycyB3aXRoIG5hbWVzIG9mCi1gYGZvby5iYXJgYCwgYGBmb28uYmFyLmJhemBgLCBhbmQgYGBmb28uYmFtYGAgYXJlIGFsbCBkZXNjZW5kYW50cyBvZiBgYGZvb2BgLgotQ2hpbGQgbG9nZ2VycyBwcm9wYWdhdGUgbWVzc2FnZXMgdXAgdG8gdGhlIGhhbmRsZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGVpcgotYW5jZXN0b3IgbG9nZ2Vycy4gIEJlY2F1c2Ugb2YgdGhpcywgaXQgaXMgdW5uZWNlc3NhcnkgdG8gZGVmaW5lIGFuZCBjb25maWd1cmUKLWhhbmRsZXJzIGZvciBhbGwgdGhlIGxvZ2dlcnMgYW4gYXBwbGljYXRpb24gdXNlcy4gSXQgaXMgc3VmZmljaWVudCB0bwotY29uZmlndXJlIGhhbmRsZXJzIGZvciBhIHRvcC1sZXZlbCBsb2dnZXIgYW5kIGNyZWF0ZSBjaGlsZCBsb2dnZXJzIGFzIG5lZWRlZC4KLQotCi1IYW5kbGVycwotXl5eXl5eXl4KLQotOmNsYXNzOmBIYW5kbGVyYCBvYmplY3RzIGFyZSByZXNwb25zaWJsZSBmb3IgZGlzcGF0Y2hpbmcgdGhlIGFwcHJvcHJpYXRlIGxvZwotbWVzc2FnZXMgKGJhc2VkIG9uIHRoZSBsb2cgbWVzc2FnZXMnIHNldmVyaXR5KSB0byB0aGUgaGFuZGxlcidzIHNwZWNpZmllZAotZGVzdGluYXRpb24uICBMb2dnZXIgb2JqZWN0cyBjYW4gYWRkIHplcm8gb3IgbW9yZSBoYW5kbGVyIG9iamVjdHMgdG8gdGhlbXNlbHZlcwotd2l0aCBhbiA6ZnVuYzpgYWRkSGFuZGxlcmAgbWV0aG9kLiAgQXMgYW4gZXhhbXBsZSBzY2VuYXJpbywgYW4gYXBwbGljYXRpb24gbWF5Ci13YW50IHRvIHNlbmQgYWxsIGxvZyBtZXNzYWdlcyB0byBhIGxvZyBmaWxlLCBhbGwgbG9nIG1lc3NhZ2VzIG9mIGVycm9yIG9yIGhpZ2hlcgotdG8gc3Rkb3V0LCBhbmQgYWxsIG1lc3NhZ2VzIG9mIGNyaXRpY2FsIHRvIGFuIGVtYWlsIGFkZHJlc3MuICBUaGlzIHNjZW5hcmlvCi1yZXF1aXJlcyB0aHJlZSBpbmRpdmlkdWFsIGhhbmRsZXJzIHdoZXJlIGVhY2ggaGFuZGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2VuZGluZwotbWVzc2FnZXMgb2YgYSBzcGVjaWZpYyBzZXZlcml0eSB0byBhIHNwZWNpZmljIGxvY2F0aW9uLgotCi1UaGUgc3RhbmRhcmQgbGlicmFyeSBpbmNsdWRlcyBxdWl0ZSBhIGZldyBoYW5kbGVyIHR5cGVzOyB0aGlzIHR1dG9yaWFsIHVzZXMgb25seQotOmNsYXNzOmBTdHJlYW1IYW5kbGVyYCBhbmQgOmNsYXNzOmBGaWxlSGFuZGxlcmAgaW4gaXRzIGV4YW1wbGVzLgotCi1UaGVyZSBhcmUgdmVyeSBmZXcgbWV0aG9kcyBpbiBhIGhhbmRsZXIgZm9yIGFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdG8gY29uY2VybgotdGhlbXNlbHZlcyB3aXRoLiAgVGhlIG9ubHkgaGFuZGxlciBtZXRob2RzIHRoYXQgc2VlbSByZWxldmFudCBmb3IgYXBwbGljYXRpb24KLWRldmVsb3BlcnMgd2hvIGFyZSB1c2luZyB0aGUgYnVpbHQtaW4gaGFuZGxlciBvYmplY3RzICh0aGF0IGlzLCBub3QgY3JlYXRpbmcKLWN1c3RvbSBoYW5kbGVycykgYXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbiBtZXRob2RzOgotCi0qIFRoZSA6bWV0aDpgSGFuZGxlci5zZXRMZXZlbGAgbWV0aG9kLCBqdXN0IGFzIGluIGxvZ2dlciBvYmplY3RzLCBzcGVjaWZpZXMgdGhlCi0gIGxvd2VzdCBzZXZlcml0eSB0aGF0IHdpbGwgYmUgZGlzcGF0Y2hlZCB0byB0aGUgYXBwcm9wcmlhdGUgZGVzdGluYXRpb24uICBXaHkKLSAgYXJlIHRoZXJlIHR3byA6ZnVuYzpgc2V0TGV2ZWxgIG1ldGhvZHM/ICBUaGUgbGV2ZWwgc2V0IGluIHRoZSBsb2dnZXIKLSAgZGV0ZXJtaW5lcyB3aGljaCBzZXZlcml0eSBvZiBtZXNzYWdlcyBpdCB3aWxsIHBhc3MgdG8gaXRzIGhhbmRsZXJzLiAgVGhlIGxldmVsCi0gIHNldCBpbiBlYWNoIGhhbmRsZXIgZGV0ZXJtaW5lcyB3aGljaCBtZXNzYWdlcyB0aGF0IGhhbmRsZXIgd2lsbCBzZW5kIG9uLgotCi0qIDpmdW5jOmBzZXRGb3JtYXR0ZXJgIHNlbGVjdHMgYSBGb3JtYXR0ZXIgb2JqZWN0IGZvciB0aGlzIGhhbmRsZXIgdG8gdXNlLgotCi0qIDpmdW5jOmBhZGRGaWx0ZXJgIGFuZCA6ZnVuYzpgcmVtb3ZlRmlsdGVyYCByZXNwZWN0aXZlbHkgY29uZmlndXJlIGFuZAotICBkZWNvbmZpZ3VyZSBmaWx0ZXIgb2JqZWN0cyBvbiBoYW5kbGVycy4KLQotQXBwbGljYXRpb24gY29kZSBzaG91bGQgbm90IGRpcmVjdGx5IGluc3RhbnRpYXRlIGFuZCB1c2UgaW5zdGFuY2VzIG9mCi06Y2xhc3M6YEhhbmRsZXJgLiAgSW5zdGVhZCwgdGhlIDpjbGFzczpgSGFuZGxlcmAgY2xhc3MgaXMgYSBiYXNlIGNsYXNzIHRoYXQKLWRlZmluZXMgdGhlIGludGVyZmFjZSB0aGF0IGFsbCBoYW5kbGVycyBzaG91bGQgaGF2ZSBhbmQgZXN0YWJsaXNoZXMgc29tZQotZGVmYXVsdCBiZWhhdmlvciB0aGF0IGNoaWxkIGNsYXNzZXMgY2FuIHVzZSAob3Igb3ZlcnJpZGUpLgotCi0KLUZvcm1hdHRlcnMKLV5eXl5eXl5eXl4KLQotRm9ybWF0dGVyIG9iamVjdHMgY29uZmlndXJlIHRoZSBmaW5hbCBvcmRlciwgc3RydWN0dXJlLCBhbmQgY29udGVudHMgb2YgdGhlIGxvZwotbWVzc2FnZS4gIFVubGlrZSB0aGUgYmFzZSA6Y2xhc3M6YGxvZ2dpbmcuSGFuZGxlcmAgY2xhc3MsIGFwcGxpY2F0aW9uIGNvZGUgbWF5Ci1pbnN0YW50aWF0ZSBmb3JtYXR0ZXIgY2xhc3NlcywgYWx0aG91Z2ggeW91IGNvdWxkIGxpa2VseSBzdWJjbGFzcyB0aGUgZm9ybWF0dGVyCi1pZiB5b3VyIGFwcGxpY2F0aW9uIG5lZWRzIHNwZWNpYWwgYmVoYXZpb3IuICBUaGUgY29uc3RydWN0b3IgdGFrZXMgdHdvIG9wdGlvbmFsCi1hcmd1bWVudHM6IGEgbWVzc2FnZSBmb3JtYXQgc3RyaW5nIGFuZCBhIGRhdGUgZm9ybWF0IHN0cmluZy4gIElmIHRoZXJlIGlzIG5vCi1tZXNzYWdlIGZvcm1hdCBzdHJpbmcsIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgcmF3IG1lc3NhZ2UuICBJZiB0aGVyZSBpcyBubwotZGF0ZSBmb3JtYXQgc3RyaW5nLCB0aGUgZGVmYXVsdCBkYXRlIGZvcm1hdCBpczo6Ci0KLSAgICAlWS0lbS0lZCAlSDolTTolUwotCi13aXRoIHRoZSBtaWxsaXNlY29uZHMgdGFja2VkIG9uIGF0IHRoZSBlbmQuCi0KLVRoZSBtZXNzYWdlIGZvcm1hdCBzdHJpbmcgdXNlcyBgYCUoPGRpY3Rpb25hcnkga2V5PilzYGAgc3R5bGVkIHN0cmluZwotc3Vic3RpdHV0aW9uOyB0aGUgcG9zc2libGUga2V5cyBhcmUgZG9jdW1lbnRlZCBpbiA6cmVmOmBmb3JtYXR0ZXItb2JqZWN0c2AuCi0KLVRoZSBmb2xsb3dpbmcgbWVzc2FnZSBmb3JtYXQgc3RyaW5nIHdpbGwgbG9nIHRoZSB0aW1lIGluIGEgaHVtYW4tcmVhZGFibGUKLWZvcm1hdCwgdGhlIHNldmVyaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZXNzYWdlLCBpbiB0aGF0Ci1vcmRlcjo6Ci0KLSAgICAiJShhc2N0aW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMiCi0KLUZvcm1hdHRlcnMgdXNlIGEgdXNlci1jb25maWd1cmFibGUgZnVuY3Rpb24gdG8gY29udmVydCB0aGUgY3JlYXRpb24gdGltZSBvZiBhCi1yZWNvcmQgdG8gYSB0dXBsZS4gQnkgZGVmYXVsdCwgOmZ1bmM6YHRpbWUubG9jYWx0aW1lYCBpcyB1c2VkOyB0byBjaGFuZ2UgdGhpcwotZm9yIGEgcGFydGljdWxhciBmb3JtYXR0ZXIgaW5zdGFuY2UsIHNldCB0aGUgYGBjb252ZXJ0ZXJgYCBhdHRyaWJ1dGUgb2YgdGhlCi1pbnN0YW5jZSB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlIGFzIDpmdW5jOmB0aW1lLmxvY2FsdGltZWAgb3IKLTpmdW5jOmB0aW1lLmdtdGltZWAuIFRvIGNoYW5nZSBpdCBmb3IgYWxsIGZvcm1hdHRlcnMsIGZvciBleGFtcGxlIGlmIHlvdSB3YW50Ci1hbGwgbG9nZ2luZyB0aW1lcyB0byBiZSBzaG93biBpbiBHTVQsIHNldCB0aGUgYGBjb252ZXJ0ZXJgYCBhdHRyaWJ1dGUgaW4gdGhlCi1Gb3JtYXR0ZXIgY2xhc3MgKHRvIGBgdGltZS5nbXRpbWVgYCBmb3IgR01UIGRpc3BsYXkpLgotCi0KLUNvbmZpZ3VyaW5nIExvZ2dpbmcKLV5eXl5eXl5eXl5eXl5eXl5eXl4KLQotUHJvZ3JhbW1lcnMgY2FuIGNvbmZpZ3VyZSBsb2dnaW5nIGVpdGhlciBieSBjcmVhdGluZyBsb2dnZXJzLCBoYW5kbGVycywgYW5kCi1mb3JtYXR0ZXJzIGV4cGxpY2l0bHkgaW4gYSBtYWluIG1vZHVsZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIG1ldGhvZHMgbGlzdGVkCi1hYm92ZSAodXNpbmcgUHl0aG9uIGNvZGUpLCBvciBieSBjcmVhdGluZyBhIGxvZ2dpbmcgY29uZmlnIGZpbGUuICBUaGUgZm9sbG93aW5nCi1jb2RlIGlzIGFuIGV4YW1wbGUgb2YgY29uZmlndXJpbmcgYSB2ZXJ5IHNpbXBsZSBsb2dnZXIsIGEgY29uc29sZSBoYW5kbGVyLCBhbmQgYQotc2ltcGxlIGZvcm1hdHRlciBpbiBhIFB5dGhvbiBtb2R1bGU6OgotCi0gICAgaW1wb3J0IGxvZ2dpbmcKLQotICAgICMgY3JlYXRlIGxvZ2dlcgotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzaW1wbGVfZXhhbXBsZSIpCi0gICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICAgIyBjcmVhdGUgY29uc29sZSBoYW5kbGVyIGFuZCBzZXQgbGV2ZWwgdG8gZGVidWcKLSAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCi0gICAgY2guc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIKLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIpCi0gICAgIyBhZGQgZm9ybWF0dGVyIHRvIGNoCi0gICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICAjIGFkZCBjaCB0byBsb2dnZXIKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihjaCkKLQotICAgICMgImFwcGxpY2F0aW9uIiBjb2RlCi0gICAgbG9nZ2VyLmRlYnVnKCJkZWJ1ZyBtZXNzYWdlIikKLSAgICBsb2dnZXIuaW5mbygiaW5mbyBtZXNzYWdlIikKLSAgICBsb2dnZXIud2Fybigid2FybiBtZXNzYWdlIikKLSAgICBsb2dnZXIuZXJyb3IoImVycm9yIG1lc3NhZ2UiKQotICAgIGxvZ2dlci5jcml0aWNhbCgiY3JpdGljYWwgbWVzc2FnZSIpCi0KLVJ1bm5pbmcgdGhpcyBtb2R1bGUgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKLQotICAgICQgcHl0aG9uIHNpbXBsZV9sb2dnaW5nX21vZHVsZS5weQotICAgIDIwMDUtMDMtMTkgMTU6MTA6MjYsNjE4IC0gc2ltcGxlX2V4YW1wbGUgLSBERUJVRyAtIGRlYnVnIG1lc3NhZ2UKLSAgICAyMDA1LTAzLTE5IDE1OjEwOjI2LDYyMCAtIHNpbXBsZV9leGFtcGxlIC0gSU5GTyAtIGluZm8gbWVzc2FnZQotICAgIDIwMDUtMDMtMTkgMTU6MTA6MjYsNjk1IC0gc2ltcGxlX2V4YW1wbGUgLSBXQVJOSU5HIC0gd2FybiBtZXNzYWdlCi0gICAgMjAwNS0wMy0xOSAxNToxMDoyNiw2OTcgLSBzaW1wbGVfZXhhbXBsZSAtIEVSUk9SIC0gZXJyb3IgbWVzc2FnZQotICAgIDIwMDUtMDMtMTkgMTU6MTA6MjYsNzczIC0gc2ltcGxlX2V4YW1wbGUgLSBDUklUSUNBTCAtIGNyaXRpY2FsIG1lc3NhZ2UKLQotVGhlIGZvbGxvd2luZyBQeXRob24gbW9kdWxlIGNyZWF0ZXMgYSBsb2dnZXIsIGhhbmRsZXIsIGFuZCBmb3JtYXR0ZXIgbmVhcmx5Ci1pZGVudGljYWwgdG8gdGhvc2UgaW4gdGhlIGV4YW1wbGUgbGlzdGVkIGFib3ZlLCB3aXRoIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmVpbmcKLXRoZSBuYW1lcyBvZiB0aGUgb2JqZWN0czo6Ci0KLSAgICBpbXBvcnQgbG9nZ2luZwotICAgIGltcG9ydCBsb2dnaW5nLmNvbmZpZwotCi0gICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZygibG9nZ2luZy5jb25mIikKLQotICAgICMgY3JlYXRlIGxvZ2dlcgotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzaW1wbGVFeGFtcGxlIikKLQotICAgICMgImFwcGxpY2F0aW9uIiBjb2RlCi0gICAgbG9nZ2VyLmRlYnVnKCJkZWJ1ZyBtZXNzYWdlIikKLSAgICBsb2dnZXIuaW5mbygiaW5mbyBtZXNzYWdlIikKLSAgICBsb2dnZXIud2Fybigid2FybiBtZXNzYWdlIikKLSAgICBsb2dnZXIuZXJyb3IoImVycm9yIG1lc3NhZ2UiKQotICAgIGxvZ2dlci5jcml0aWNhbCgiY3JpdGljYWwgbWVzc2FnZSIpCi0KLUhlcmUgaXMgdGhlIGxvZ2dpbmcuY29uZiBmaWxlOjoKLQotICAgIFtsb2dnZXJzXQotICAgIGtleXM9cm9vdCxzaW1wbGVFeGFtcGxlCi0KLSAgICBbaGFuZGxlcnNdCi0gICAga2V5cz1jb25zb2xlSGFuZGxlcgotCi0gICAgW2Zvcm1hdHRlcnNdCi0gICAga2V5cz1zaW1wbGVGb3JtYXR0ZXIKLQotICAgIFtsb2dnZXJfcm9vdF0KLSAgICBsZXZlbD1ERUJVRwotICAgIGhhbmRsZXJzPWNvbnNvbGVIYW5kbGVyCi0KLSAgICBbbG9nZ2VyX3NpbXBsZUV4YW1wbGVdCi0gICAgbGV2ZWw9REVCVUcKLSAgICBoYW5kbGVycz1jb25zb2xlSGFuZGxlcgotICAgIHF1YWxuYW1lPXNpbXBsZUV4YW1wbGUKLSAgICBwcm9wYWdhdGU9MAotCi0gICAgW2hhbmRsZXJfY29uc29sZUhhbmRsZXJdCi0gICAgY2xhc3M9U3RyZWFtSGFuZGxlcgotICAgIGxldmVsPURFQlVHCi0gICAgZm9ybWF0dGVyPXNpbXBsZUZvcm1hdHRlcgotICAgIGFyZ3M9KHN5cy5zdGRvdXQsKQotCi0gICAgW2Zvcm1hdHRlcl9zaW1wbGVGb3JtYXR0ZXJdCi0gICAgZm9ybWF0PSUoYXNjdGltZSlzIC0gJShuYW1lKXMgLSAlKGxldmVsbmFtZSlzIC0gJShtZXNzYWdlKXMKLSAgICBkYXRlZm10PQotCi1UaGUgb3V0cHV0IGlzIG5lYXJseSBpZGVudGljYWwgdG8gdGhhdCBvZiB0aGUgbm9uLWNvbmZpZy1maWxlLWJhc2VkIGV4YW1wbGU6OgotCi0gICAgJCBweXRob24gc2ltcGxlX2xvZ2dpbmdfY29uZmlnLnB5Ci0gICAgMjAwNS0wMy0xOSAxNTozODo1NSw5NzcgLSBzaW1wbGVFeGFtcGxlIC0gREVCVUcgLSBkZWJ1ZyBtZXNzYWdlCi0gICAgMjAwNS0wMy0xOSAxNTozODo1NSw5NzkgLSBzaW1wbGVFeGFtcGxlIC0gSU5GTyAtIGluZm8gbWVzc2FnZQotICAgIDIwMDUtMDMtMTkgMTU6Mzg6NTYsMDU0IC0gc2ltcGxlRXhhbXBsZSAtIFdBUk5JTkcgLSB3YXJuIG1lc3NhZ2UKLSAgICAyMDA1LTAzLTE5IDE1OjM4OjU2LDA1NSAtIHNpbXBsZUV4YW1wbGUgLSBFUlJPUiAtIGVycm9yIG1lc3NhZ2UKLSAgICAyMDA1LTAzLTE5IDE1OjM4OjU2LDEzMCAtIHNpbXBsZUV4YW1wbGUgLSBDUklUSUNBTCAtIGNyaXRpY2FsIG1lc3NhZ2UKLQotWW91IGNhbiBzZWUgdGhhdCB0aGUgY29uZmlnIGZpbGUgYXBwcm9hY2ggaGFzIGEgZmV3IGFkdmFudGFnZXMgb3ZlciB0aGUgUHl0aG9uCi1jb2RlIGFwcHJvYWNoLCBtYWlubHkgc2VwYXJhdGlvbiBvZiBjb25maWd1cmF0aW9uIGFuZCBjb2RlIGFuZCB0aGUgYWJpbGl0eSBvZgotbm9uY29kZXJzIHRvIGVhc2lseSBtb2RpZnkgdGhlIGxvZ2dpbmcgcHJvcGVydGllcy4KLQotLi4gX2xpYnJhcnktY29uZmlnOgotCi1Db25maWd1cmluZyBMb2dnaW5nIGZvciBhIExpYnJhcnkKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1XaGVuIGRldmVsb3BpbmcgYSBsaWJyYXJ5IHdoaWNoIHVzZXMgbG9nZ2luZywgc29tZSBjb25zaWRlcmF0aW9uIG5lZWRzIHRvIGJlCi1naXZlbiB0byBpdHMgY29uZmlndXJhdGlvbi4gSWYgdGhlIHVzaW5nIGFwcGxpY2F0aW9uIGRvZXMgbm90IHVzZSBsb2dnaW5nLCBhbmQKLWxpYnJhcnkgY29kZSBtYWtlcyBsb2dnaW5nIGNhbGxzLCB0aGVuIGEgb25lLW9mZiBtZXNzYWdlICJObyBoYW5kbGVycyBjb3VsZCBiZQotZm91bmQgZm9yIGxvZ2dlciBYLlkuWiIgaXMgcHJpbnRlZCB0byB0aGUgY29uc29sZS4gVGhpcyBtZXNzYWdlIGlzIGludGVuZGVkCi10byBjYXRjaCBtaXN0YWtlcyBpbiBsb2dnaW5nIGNvbmZpZ3VyYXRpb24sIGJ1dCB3aWxsIGNvbmZ1c2UgYW4gYXBwbGljYXRpb24KLWRldmVsb3BlciB3aG8gaXMgbm90IGF3YXJlIG9mIGxvZ2dpbmcgYnkgdGhlIGxpYnJhcnkuCi0KLUluIGFkZGl0aW9uIHRvIGRvY3VtZW50aW5nIGhvdyBhIGxpYnJhcnkgdXNlcyBsb2dnaW5nLCBhIGdvb2Qgd2F5IHRvIGNvbmZpZ3VyZQotbGlicmFyeSBsb2dnaW5nIHNvIHRoYXQgaXQgZG9lcyBub3QgY2F1c2UgYSBzcHVyaW91cyBtZXNzYWdlIGlzIHRvIGFkZCBhCi1oYW5kbGVyIHdoaWNoIGRvZXMgbm90aGluZy4gVGhpcyBhdm9pZHMgdGhlIG1lc3NhZ2UgYmVpbmcgcHJpbnRlZCwgc2luY2UgYQotaGFuZGxlciB3aWxsIGJlIGZvdW5kOiBpdCBqdXN0IGRvZXNuJ3QgcHJvZHVjZSBhbnkgb3V0cHV0LiBJZiB0aGUgbGlicmFyeSB1c2VyCi1jb25maWd1cmVzIGxvZ2dpbmcgZm9yIGFwcGxpY2F0aW9uIHVzZSwgcHJlc3VtYWJseSB0aGF0IGNvbmZpZ3VyYXRpb24gd2lsbCBhZGQKLXNvbWUgaGFuZGxlcnMsIGFuZCBpZiBsZXZlbHMgYXJlIHN1aXRhYmx5IGNvbmZpZ3VyZWQgdGhlbiBsb2dnaW5nIGNhbGxzIG1hZGUKLWluIGxpYnJhcnkgY29kZSB3aWxsIHNlbmQgb3V0cHV0IHRvIHRob3NlIGhhbmRsZXJzLCBhcyBub3JtYWwuCi0KLUEgZG8tbm90aGluZyBoYW5kbGVyIGNhbiBiZSBzaW1wbHkgZGVmaW5lZCBhcyBmb2xsb3dzOjoKLQotICAgIGltcG9ydCBsb2dnaW5nCi0KLSAgICBjbGFzcyBOdWxsSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgotICAgICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgotICAgICAgICAgICAgcGFzcwotCi1BbiBpbnN0YW5jZSBvZiB0aGlzIGhhbmRsZXIgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB0b3AtbGV2ZWwgbG9nZ2VyIG9mIHRoZQotbG9nZ2luZyBuYW1lc3BhY2UgdXNlZCBieSB0aGUgbGlicmFyeS4gSWYgYWxsIGxvZ2dpbmcgYnkgYSBsaWJyYXJ5ICpmb28qIGlzCi1kb25lIHVzaW5nIGxvZ2dlcnMgd2l0aCBuYW1lcyBtYXRjaGluZyAiZm9vLngueSIsIHRoZW4gdGhlIGNvZGU6OgotCi0gICAgaW1wb3J0IGxvZ2dpbmcKLQotICAgIGggPSBOdWxsSGFuZGxlcigpCi0gICAgbG9nZ2luZy5nZXRMb2dnZXIoImZvbyIpLmFkZEhhbmRsZXIoaCkKLQotc2hvdWxkIGhhdmUgdGhlIGRlc2lyZWQgZWZmZWN0LiBJZiBhbiBvcmdhbmlzYXRpb24gcHJvZHVjZXMgYSBudW1iZXIgb2YKLWxpYnJhcmllcywgdGhlbiB0aGUgbG9nZ2VyIG5hbWUgc3BlY2lmaWVkIGNhbiBiZSAib3JnbmFtZS5mb28iIHJhdGhlciB0aGFuCi1qdXN0ICJmb28iLgotCi0uLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKLSAgIFRoZSA6Y2xhc3M6YE51bGxIYW5kbGVyYCBjbGFzcy4KLQotCi1Mb2dnaW5nIExldmVscwotLS0tLS0tLS0tLS0tLS0KLQotVGhlIG51bWVyaWMgdmFsdWVzIG9mIGxvZ2dpbmcgbGV2ZWxzIGFyZSBnaXZlbiBpbiB0aGUgZm9sbG93aW5nIHRhYmxlLiBUaGVzZSBhcmUKLXByaW1hcmlseSBvZiBpbnRlcmVzdCBpZiB5b3Ugd2FudCB0byBkZWZpbmUgeW91ciBvd24gbGV2ZWxzLCBhbmQgbmVlZCB0aGVtIHRvCi1oYXZlIHNwZWNpZmljIHZhbHVlcyByZWxhdGl2ZSB0byB0aGUgcHJlZGVmaW5lZCBsZXZlbHMuIElmIHlvdSBkZWZpbmUgYSBsZXZlbAotd2l0aCB0aGUgc2FtZSBudW1lcmljIHZhbHVlLCBpdCBvdmVyd3JpdGVzIHRoZSBwcmVkZWZpbmVkIHZhbHVlOyB0aGUgcHJlZGVmaW5lZAotbmFtZSBpcyBsb3N0LgotCi0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotfCBMZXZlbCAgICAgICAgfCBOdW1lcmljIHZhbHVlIHwKLSs9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT0rCi18IGBgQ1JJVElDQUxgYCB8IDUwICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLXwgYGBFUlJPUmBgICAgIHwgNDAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotfCBgYFdBUk5JTkdgYCAgfCAzMCAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi18IGBgSU5GT2BgICAgICB8IDIwICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLXwgYGBERUJVR2BgICAgIHwgMTAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotfCBgYE5PVFNFVGBgICAgfCAwICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0KLUxldmVscyBjYW4gYWxzbyBiZSBhc3NvY2lhdGVkIHdpdGggbG9nZ2VycywgYmVpbmcgc2V0IGVpdGhlciBieSB0aGUgZGV2ZWxvcGVyIG9yCi10aHJvdWdoIGxvYWRpbmcgYSBzYXZlZCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uIFdoZW4gYSBsb2dnaW5nIG1ldGhvZCBpcyBjYWxsZWQKLW9uIGEgbG9nZ2VyLCB0aGUgbG9nZ2VyIGNvbXBhcmVzIGl0cyBvd24gbGV2ZWwgd2l0aCB0aGUgbGV2ZWwgYXNzb2NpYXRlZCB3aXRoCi10aGUgbWV0aG9kIGNhbGwuIElmIHRoZSBsb2dnZXIncyBsZXZlbCBpcyBoaWdoZXIgdGhhbiB0aGUgbWV0aG9kIGNhbGwncywgbm8KLWxvZ2dpbmcgbWVzc2FnZSBpcyBhY3R1YWxseSBnZW5lcmF0ZWQuIFRoaXMgaXMgdGhlIGJhc2ljIG1lY2hhbmlzbSBjb250cm9sbGluZwotdGhlIHZlcmJvc2l0eSBvZiBsb2dnaW5nIG91dHB1dC4KLQotTG9nZ2luZyBtZXNzYWdlcyBhcmUgZW5jb2RlZCBhcyBpbnN0YW5jZXMgb2YgdGhlIDpjbGFzczpgTG9nUmVjb3JkYCBjbGFzcy4gV2hlbgotYSBsb2dnZXIgZGVjaWRlcyB0byBhY3R1YWxseSBsb2cgYW4gZXZlbnQsIGEgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlIGlzCi1jcmVhdGVkIGZyb20gdGhlIGxvZ2dpbmcgbWVzc2FnZS4KLQotTG9nZ2luZyBtZXNzYWdlcyBhcmUgc3ViamVjdGVkIHRvIGEgZGlzcGF0Y2ggbWVjaGFuaXNtIHRocm91Z2ggdGhlIHVzZSBvZgotOmRmbjpgaGFuZGxlcnNgLCB3aGljaCBhcmUgaW5zdGFuY2VzIG9mIHN1YmNsYXNzZXMgb2YgdGhlIDpjbGFzczpgSGFuZGxlcmAKLWNsYXNzLiBIYW5kbGVycyBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgYSBsb2dnZWQgbWVzc2FnZSAoaW4gdGhlIGZvcm0KLW9mIGEgOmNsYXNzOmBMb2dSZWNvcmRgKSBlbmRzIHVwIGluIGEgcGFydGljdWxhciBsb2NhdGlvbiAob3Igc2V0IG9mIGxvY2F0aW9ucykKLXdoaWNoIGlzIHVzZWZ1bCBmb3IgdGhlIHRhcmdldCBhdWRpZW5jZSBmb3IgdGhhdCBtZXNzYWdlIChzdWNoIGFzIGVuZCB1c2VycywKLXN1cHBvcnQgZGVzayBzdGFmZiwgc3lzdGVtIGFkbWluaXN0cmF0b3JzLCBkZXZlbG9wZXJzKS4gSGFuZGxlcnMgYXJlIHBhc3NlZAotOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlcyBpbnRlbmRlZCBmb3IgcGFydGljdWxhciBkZXN0aW5hdGlvbnMuIEVhY2ggbG9nZ2VyCi1jYW4gaGF2ZSB6ZXJvLCBvbmUgb3IgbW9yZSBoYW5kbGVycyBhc3NvY2lhdGVkIHdpdGggaXQgKHZpYSB0aGUKLTptZXRoOmBhZGRIYW5kbGVyYCBtZXRob2Qgb2YgOmNsYXNzOmBMb2dnZXJgKS4gSW4gYWRkaXRpb24gdG8gYW55IGhhbmRsZXJzCi1kaXJlY3RseSBhc3NvY2lhdGVkIHdpdGggYSBsb2dnZXIsICphbGwgaGFuZGxlcnMgYXNzb2NpYXRlZCB3aXRoIGFsbCBhbmNlc3RvcnMKLW9mIHRoZSBsb2dnZXIqIGFyZSBjYWxsZWQgdG8gZGlzcGF0Y2ggdGhlIG1lc3NhZ2UgKHVubGVzcyB0aGUgKnByb3BhZ2F0ZSogZmxhZwotZm9yIGEgbG9nZ2VyIGlzIHNldCB0byBhIGZhbHNlIHZhbHVlLCBhdCB3aGljaCBwb2ludCB0aGUgcGFzc2luZyB0byBhbmNlc3RvcgotaGFuZGxlcnMgc3RvcHMpLgotCi1KdXN0IGFzIGZvciBsb2dnZXJzLCBoYW5kbGVycyBjYW4gaGF2ZSBsZXZlbHMgYXNzb2NpYXRlZCB3aXRoIHRoZW0uIEEgaGFuZGxlcidzCi1sZXZlbCBhY3RzIGFzIGEgZmlsdGVyIGluIHRoZSBzYW1lIHdheSBhcyBhIGxvZ2dlcidzIGxldmVsIGRvZXMuIElmIGEgaGFuZGxlcgotZGVjaWRlcyB0byBhY3R1YWxseSBkaXNwYXRjaCBhbiBldmVudCwgdGhlIDptZXRoOmBlbWl0YCBtZXRob2QgaXMgdXNlZCB0byBzZW5kCi10aGUgbWVzc2FnZSB0byBpdHMgZGVzdGluYXRpb24uIE1vc3QgdXNlci1kZWZpbmVkIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBIYW5kbGVyYAotd2lsbCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgOm1ldGg6YGVtaXRgLgotCi1Vc2VmdWwgSGFuZGxlcnMKLS0tLS0tLS0tLS0tLS0tLQotCi1JbiBhZGRpdGlvbiB0byB0aGUgYmFzZSA6Y2xhc3M6YEhhbmRsZXJgIGNsYXNzLCBtYW55IHVzZWZ1bCBzdWJjbGFzc2VzIGFyZQotcHJvdmlkZWQ6Ci0KLSMuIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gc3RyZWFtcyAoZmlsZS1saWtlCi0gICBvYmplY3RzKS4KLQotIy4gOmNsYXNzOmBGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gZGlzayBmaWxlcy4KLQotLi4gbW9kdWxlOjogbG9nZ2luZy5oYW5kbGVycwotCi0jLiA6Y2xhc3M6YEJhc2VSb3RhdGluZ0hhbmRsZXJgIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBoYW5kbGVycyB0aGF0Ci0gICByb3RhdGUgbG9nIGZpbGVzIGF0IGEgY2VydGFpbiBwb2ludC4gSXQgaXMgbm90IG1lYW50IHRvIGJlICBpbnN0YW50aWF0ZWQKLSAgIGRpcmVjdGx5LiBJbnN0ZWFkLCB1c2UgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYCBvcgotICAgOmNsYXNzOmBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJgLgotCi0jLiA6Y2xhc3M6YFJvdGF0aW5nRmlsZUhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIGRpc2sKLSAgIGZpbGVzLCB3aXRoIHN1cHBvcnQgZm9yIG1heGltdW0gbG9nIGZpbGUgc2l6ZXMgYW5kIGxvZyBmaWxlIHJvdGF0aW9uLgotCi0jLiA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8KLSAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KLQotIy4gOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBUQ1AvSVAKLSAgIHNvY2tldHMuCi0KLSMuIDpjbGFzczpgRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCi0KLSMuIDpjbGFzczpgU01UUEhhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIGEgZGVzaWduYXRlZAotICAgZW1haWwgYWRkcmVzcy4KLQotIy4gOmNsYXNzOmBTeXNMb2dIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhIFVuaXgKLSAgIHN5c2xvZyBkYWVtb24sIHBvc3NpYmx5IG9uIGEgcmVtb3RlIG1hY2hpbmUuCi0KLSMuIDpjbGFzczpgTlRFdmVudExvZ0hhbmRsZXJgIGluc3RhbmNlcyBzZW5kIG1lc3NhZ2VzIHRvIGEKLSAgIFdpbmRvd3MgTlQvMjAwMC9YUCBldmVudCBsb2cuCi0KLSMuIDpjbGFzczpgTWVtb3J5SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBidWZmZXIKLSAgIGluIG1lbW9yeSwgd2hpY2ggaXMgZmx1c2hlZCB3aGVuZXZlciBzcGVjaWZpYyBjcml0ZXJpYSBhcmUgbWV0LgotCi0jLiA6Y2xhc3M6YEhUVFBIYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBhbiBIVFRQCi0gICBzZXJ2ZXIgdXNpbmcgZWl0aGVyIGBgR0VUYGAgb3IgYGBQT1NUYGAgc2VtYW50aWNzLgotCi0jLiA6Y2xhc3M6YFdhdGNoZWRGaWxlSGFuZGxlcmAgaW5zdGFuY2VzIHdhdGNoIHRoZSBmaWxlIHRoZXkgYXJlCi0gICBsb2dnaW5nIHRvLiBJZiB0aGUgZmlsZSBjaGFuZ2VzLCBpdCBpcyBjbG9zZWQgYW5kIHJlb3BlbmVkIHVzaW5nIHRoZSBmaWxlCi0gICBuYW1lLiBUaGlzIGhhbmRsZXIgaXMgb25seSB1c2VmdWwgb24gVW5peC1saWtlIHN5c3RlbXM7IFdpbmRvd3MgZG9lcyBub3QKLSAgIHN1cHBvcnQgdGhlIHVuZGVybHlpbmcgbWVjaGFuaXNtIHVzZWQuCi0KLS4uIGN1cnJlbnRtb2R1bGU6OiBsb2dnaW5nCi0KLSMuIDpjbGFzczpgTnVsbEhhbmRsZXJgIGluc3RhbmNlcyBkbyBub3RoaW5nIHdpdGggZXJyb3IgbWVzc2FnZXMuIFRoZXkgYXJlIHVzZWQKLSAgIGJ5IGxpYnJhcnkgZGV2ZWxvcGVycyB3aG8gd2FudCB0byB1c2UgbG9nZ2luZywgYnV0IHdhbnQgdG8gYXZvaWQgdGhlICJObwotICAgaGFuZGxlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciBYWFgiIG1lc3NhZ2Ugd2hpY2ggY2FuIGJlIGRpc3BsYXllZCBpZgotICAgdGhlIGxpYnJhcnkgdXNlciBoYXMgbm90IGNvbmZpZ3VyZWQgbG9nZ2luZy4gU2VlIDpyZWY6YGxpYnJhcnktY29uZmlnYCBmb3IKLSAgIG1vcmUgaW5mb3JtYXRpb24uCi0KLS4uIHZlcnNpb25hZGRlZDo6IDMuMQotICAgVGhlIDpjbGFzczpgTnVsbEhhbmRsZXJgIGNsYXNzLgotCi1UaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAsIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgYW5kIDpjbGFzczpgRmlsZUhhbmRsZXJgCi1jbGFzc2VzIGFyZSBkZWZpbmVkIGluIHRoZSBjb3JlIGxvZ2dpbmcgcGFja2FnZS4gVGhlIG90aGVyIGhhbmRsZXJzIGFyZQotZGVmaW5lZCBpbiBhIHN1Yi0gbW9kdWxlLCA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYC4gKFRoZXJlIGlzIGFsc28gYW5vdGhlcgotc3ViLW1vZHVsZSwgOm1vZDpgbG9nZ2luZy5jb25maWdgLCBmb3IgY29uZmlndXJhdGlvbiBmdW5jdGlvbmFsaXR5LikKLQotTG9nZ2VkIG1lc3NhZ2VzIGFyZSBmb3JtYXR0ZWQgZm9yIHByZXNlbnRhdGlvbiB0aHJvdWdoIGluc3RhbmNlcyBvZiB0aGUKLTpjbGFzczpgRm9ybWF0dGVyYCBjbGFzcy4gVGhleSBhcmUgaW5pdGlhbGl6ZWQgd2l0aCBhIGZvcm1hdCBzdHJpbmcgc3VpdGFibGUgZm9yCi11c2Ugd2l0aCB0aGUgJSBvcGVyYXRvciBhbmQgYSBkaWN0aW9uYXJ5LgotCi1Gb3IgZm9ybWF0dGluZyBtdWx0aXBsZSBtZXNzYWdlcyBpbiBhIGJhdGNoLCBpbnN0YW5jZXMgb2YKLTpjbGFzczpgQnVmZmVyaW5nRm9ybWF0dGVyYCBjYW4gYmUgdXNlZC4gSW4gYWRkaXRpb24gdG8gdGhlIGZvcm1hdCBzdHJpbmcgKHdoaWNoCi1pcyBhcHBsaWVkIHRvIGVhY2ggbWVzc2FnZSBpbiB0aGUgYmF0Y2gpLCB0aGVyZSBpcyBwcm92aXNpb24gZm9yIGhlYWRlciBhbmQKLXRyYWlsZXIgZm9ybWF0IHN0cmluZ3MuCi0KLVdoZW4gZmlsdGVyaW5nIGJhc2VkIG9uIGxvZ2dlciBsZXZlbCBhbmQvb3IgaGFuZGxlciBsZXZlbCBpcyBub3QgZW5vdWdoLAotaW5zdGFuY2VzIG9mIDpjbGFzczpgRmlsdGVyYCBjYW4gYmUgYWRkZWQgdG8gYm90aCA6Y2xhc3M6YExvZ2dlcmAgYW5kCi06Y2xhc3M6YEhhbmRsZXJgIGluc3RhbmNlcyAodGhyb3VnaCB0aGVpciA6bWV0aDpgYWRkRmlsdGVyYCBtZXRob2QpLiBCZWZvcmUKLWRlY2lkaW5nIHRvIHByb2Nlc3MgYSBtZXNzYWdlIGZ1cnRoZXIsIGJvdGggbG9nZ2VycyBhbmQgaGFuZGxlcnMgY29uc3VsdCBhbGwKLXRoZWlyIGZpbHRlcnMgZm9yIHBlcm1pc3Npb24uIElmIGFueSBmaWx0ZXIgcmV0dXJucyBhIGZhbHNlIHZhbHVlLCB0aGUgbWVzc2FnZQotaXMgbm90IHByb2Nlc3NlZCBmdXJ0aGVyLgotCi1UaGUgYmFzaWMgOmNsYXNzOmBGaWx0ZXJgIGZ1bmN0aW9uYWxpdHkgYWxsb3dzIGZpbHRlcmluZyBieSBzcGVjaWZpYyBsb2dnZXIKLW5hbWUuIElmIHRoaXMgZmVhdHVyZSBpcyB1c2VkLCBtZXNzYWdlcyBzZW50IHRvIHRoZSBuYW1lZCBsb2dnZXIgYW5kIGl0cwotY2hpbGRyZW4gYXJlIGFsbG93ZWQgdGhyb3VnaCB0aGUgZmlsdGVyLCBhbmQgYWxsIG90aGVycyBkcm9wcGVkLgotCi1Nb2R1bGUtTGV2ZWwgRnVuY3Rpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUluIGFkZGl0aW9uIHRvIHRoZSBjbGFzc2VzIGRlc2NyaWJlZCBhYm92ZSwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIG1vZHVsZS0gbGV2ZWwKLWZ1bmN0aW9ucy4KLQotCi0uLiBmdW5jdGlvbjo6IGdldExvZ2dlcihuYW1lPU5vbmUpCi0KLSAgIFJldHVybiBhIGxvZ2dlciB3aXRoIHRoZSBzcGVjaWZpZWQgbmFtZSBvciwgaWYgbmFtZSBpcyBgYE5vbmVgYCwgcmV0dXJuIGEKLSAgIGxvZ2dlciB3aGljaCBpcyB0aGUgcm9vdCBsb2dnZXIgb2YgdGhlIGhpZXJhcmNoeS4gSWYgc3BlY2lmaWVkLCB0aGUgbmFtZSBpcwotICAgdHlwaWNhbGx5IGEgZG90LXNlcGFyYXRlZCBoaWVyYXJjaGljYWwgbmFtZSBsaWtlICoiYSIqLCAqImEuYiIqIG9yICoiYS5iLmMuZCIqLgotICAgQ2hvaWNlIG9mIHRoZXNlIG5hbWVzIGlzIGVudGlyZWx5IHVwIHRvIHRoZSBkZXZlbG9wZXIgd2hvIGlzIHVzaW5nIGxvZ2dpbmcuCi0KLSAgIEFsbCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHdpdGggYSBnaXZlbiBuYW1lIHJldHVybiB0aGUgc2FtZSBsb2dnZXIgaW5zdGFuY2UuCi0gICBUaGlzIG1lYW5zIHRoYXQgbG9nZ2VyIGluc3RhbmNlcyBuZXZlciBuZWVkIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIGRpZmZlcmVudCBwYXJ0cwotICAgb2YgYW4gYXBwbGljYXRpb24uCi0KLQotLi4gZnVuY3Rpb246OiBnZXRMb2dnZXJDbGFzcygpCi0KLSAgIFJldHVybiBlaXRoZXIgdGhlIHN0YW5kYXJkIDpjbGFzczpgTG9nZ2VyYCBjbGFzcywgb3IgdGhlIGxhc3QgY2xhc3MgcGFzc2VkIHRvCi0gICA6ZnVuYzpgc2V0TG9nZ2VyQ2xhc3NgLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSBuZXcgY2xhc3MKLSAgIGRlZmluaXRpb24sIHRvIGVuc3VyZSB0aGF0IGluc3RhbGxpbmcgYSBjdXN0b21pc2VkIDpjbGFzczpgTG9nZ2VyYCBjbGFzcyB3aWxsCi0gICBub3QgdW5kbyBjdXN0b21pc2F0aW9ucyBhbHJlYWR5IGFwcGxpZWQgYnkgb3RoZXIgY29kZS4gRm9yIGV4YW1wbGU6OgotCi0gICAgICBjbGFzcyBNeUxvZ2dlcihsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkpOgotICAgICAgICAgICMgLi4uIG92ZXJyaWRlIGJlaGF2aW91ciBoZXJlCi0KLQotLi4gZnVuY3Rpb246OiBkZWJ1Zyhtc2csICphcmdzLCAqKmt3YXJncykKLQotICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YERFQlVHYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSAqbXNnKiBpcyB0aGUKLSAgIG1lc3NhZ2UgZm9ybWF0IHN0cmluZywgYW5kIHRoZSAqYXJncyogYXJlIHRoZSBhcmd1bWVudHMgd2hpY2ggYXJlIG1lcmdlZCBpbnRvCi0gICAqbXNnKiB1c2luZyB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IuIChOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW4KLSAgIHVzZSBrZXl3b3JkcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBkaWN0aW9uYXJ5IGFyZ3VtZW50LikKLQotICAgVGhlcmUgYXJlIHR3byBrZXl3b3JkIGFyZ3VtZW50cyBpbiAqa3dhcmdzKiB3aGljaCBhcmUgaW5zcGVjdGVkOiAqZXhjX2luZm8qCi0gICB3aGljaCwgaWYgaXQgZG9lcyBub3QgZXZhbHVhdGUgYXMgZmFsc2UsIGNhdXNlcyBleGNlcHRpb24gaW5mb3JtYXRpb24gdG8gYmUKLSAgIGFkZGVkIHRvIHRoZSBsb2dnaW5nIG1lc3NhZ2UuIElmIGFuIGV4Y2VwdGlvbiB0dXBsZSAoaW4gdGhlIGZvcm1hdCByZXR1cm5lZCBieQotICAgOmZ1bmM6YHN5cy5leGNfaW5mb2ApIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkOyBvdGhlcndpc2UsIDpmdW5jOmBzeXMuZXhjX2luZm9gCi0gICBpcyBjYWxsZWQgdG8gZ2V0IHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCi0KLSAgIFRoZSBvdGhlciBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50IGlzICpleHRyYSogd2hpY2ggY2FuIGJlIHVzZWQgdG8gcGFzcyBhCi0gICBkaWN0aW9uYXJ5IHdoaWNoIGlzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIF9fZGljdF9fIG9mIHRoZSBMb2dSZWNvcmQgY3JlYXRlZCBmb3IKLSAgIHRoZSBsb2dnaW5nIGV2ZW50IHdpdGggdXNlci1kZWZpbmVkIGF0dHJpYnV0ZXMuIFRoZXNlIGN1c3RvbSBhdHRyaWJ1dGVzIGNhbiB0aGVuCi0gICBiZSB1c2VkIGFzIHlvdSBsaWtlLiBGb3IgZXhhbXBsZSwgdGhleSBjb3VsZCBiZSBpbmNvcnBvcmF0ZWQgaW50byBsb2dnZWQKLSAgIG1lc3NhZ2VzLiBGb3IgZXhhbXBsZTo6Ci0KLSAgICAgIEZPUk1BVCA9ICIlKGFzY3RpbWUpLTE1cyAlKGNsaWVudGlwKXMgJSh1c2VyKS04cyAlKG1lc3NhZ2UpcyIKLSAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PUZPUk1BVCkKLSAgICAgIGQgPSB7J2NsaWVudGlwJzogJzE5Mi4xNjguMC4xJywgJ3VzZXInOiAnZmJsb2dncyd9Ci0gICAgICBsb2dnaW5nLndhcm5pbmcoIlByb3RvY29sIHByb2JsZW06ICVzIiwgImNvbm5lY3Rpb24gcmVzZXQiLCBleHRyYT1kKQotCi0gICB3b3VsZCBwcmludCBzb21ldGhpbmcgbGlrZTo6Ci0KLSAgICAgIDIwMDYtMDItMDggMjI6MjA6MDIsMTY1IDE5Mi4xNjguMC4xIGZibG9nZ3MgIFByb3RvY29sIHByb2JsZW06IGNvbm5lY3Rpb24gcmVzZXQKLQotICAgVGhlIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkgcGFzc2VkIGluICpleHRyYSogc2hvdWxkIG5vdCBjbGFzaCB3aXRoIHRoZSBrZXlzIHVzZWQKLSAgIGJ5IHRoZSBsb2dnaW5nIHN5c3RlbS4gKFNlZSB0aGUgOmNsYXNzOmBGb3JtYXR0ZXJgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUKLSAgIGluZm9ybWF0aW9uIG9uIHdoaWNoIGtleXMgYXJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcgc3lzdGVtLikKLQotICAgSWYgeW91IGNob29zZSB0byB1c2UgdGhlc2UgYXR0cmlidXRlcyBpbiBsb2dnZWQgbWVzc2FnZXMsIHlvdSBuZWVkIHRvIGV4ZXJjaXNlCi0gICBzb21lIGNhcmUuIEluIHRoZSBhYm92ZSBleGFtcGxlLCBmb3IgaW5zdGFuY2UsIHRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgaGFzIGJlZW4KLSAgIHNldCB1cCB3aXRoIGEgZm9ybWF0IHN0cmluZyB3aGljaCBleHBlY3RzICdjbGllbnRpcCcgYW5kICd1c2VyJyBpbiB0aGUgYXR0cmlidXRlCi0gICBkaWN0aW9uYXJ5IG9mIHRoZSBMb2dSZWNvcmQuIElmIHRoZXNlIGFyZSBtaXNzaW5nLCB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZQotICAgbG9nZ2VkIGJlY2F1c2UgYSBzdHJpbmcgZm9ybWF0dGluZyBleGNlcHRpb24gd2lsbCBvY2N1ci4gU28gaW4gdGhpcyBjYXNlLCB5b3UKLSAgIGFsd2F5cyBuZWVkIHRvIHBhc3MgdGhlICpleHRyYSogZGljdGlvbmFyeSB3aXRoIHRoZXNlIGtleXMuCi0KLSAgIFdoaWxlIHRoaXMgbWlnaHQgYmUgYW5ub3lpbmcsIHRoaXMgZmVhdHVyZSBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIHNwZWNpYWxpemVkCi0gICBjaXJjdW1zdGFuY2VzLCBzdWNoIGFzIG11bHRpLXRocmVhZGVkIHNlcnZlcnMgd2hlcmUgdGhlIHNhbWUgY29kZSBleGVjdXRlcyBpbgotICAgbWFueSBjb250ZXh0cywgYW5kIGludGVyZXN0aW5nIGNvbmRpdGlvbnMgd2hpY2ggYXJpc2UgYXJlIGRlcGVuZGVudCBvbiB0aGlzCi0gICBjb250ZXh0IChzdWNoIGFzIHJlbW90ZSBjbGllbnQgSVAgYWRkcmVzcyBhbmQgYXV0aGVudGljYXRlZCB1c2VyIG5hbWUsIGluIHRoZQotICAgYWJvdmUgZXhhbXBsZSkuIEluIHN1Y2ggY2lyY3Vtc3RhbmNlcywgaXQgaXMgbGlrZWx5IHRoYXQgc3BlY2lhbGl6ZWQKLSAgIDpjbGFzczpgRm9ybWF0dGVyYFwgcyB3b3VsZCBiZSB1c2VkIHdpdGggcGFydGljdWxhciA6Y2xhc3M6YEhhbmRsZXJgXCBzLgotCi0KLS4uIGZ1bmN0aW9uOjogaW5mbyhtc2csICphcmdzLCAqKmt3YXJncykKLQotICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YElORk9gIG9uIHRoZSByb290IGxvZ2dlci4gVGhlIGFyZ3VtZW50cyBhcmUKLSAgIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgotCi0KLS4uIGZ1bmN0aW9uOjogd2FybmluZyhtc2csICphcmdzLCAqKmt3YXJncykKLQotICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YFdBUk5JTkdgIG9uIHRoZSByb290IGxvZ2dlci4gVGhlIGFyZ3VtZW50cyBhcmUKLSAgIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgotCi0KLS4uIGZ1bmN0aW9uOjogZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCi0KLSAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBFUlJPUmAgb24gdGhlIHJvb3QgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQotICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDpmdW5jOmBkZWJ1Z2AuCi0KLQotLi4gZnVuY3Rpb246OiBjcml0aWNhbChtc2csICphcmdzLCAqKmt3YXJncykKLQotICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YENSSVRJQ0FMYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBhcmd1bWVudHMKLSAgIGFyZSBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4KLQotCi0uLiBmdW5jdGlvbjo6IGV4Y2VwdGlvbihtc2csICphcmdzKQotCi0gICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsIDpjb25zdDpgRVJST1JgIG9uIHRoZSByb290IGxvZ2dlci4gVGhlIGFyZ3VtZW50cyBhcmUKLSAgIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLiBFeGNlcHRpb24gaW5mbyBpcyBhZGRlZCB0byB0aGUgbG9nZ2luZwotICAgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBhbiBleGNlcHRpb24gaGFuZGxlci4KLQotCi0uLiBmdW5jdGlvbjo6IGxvZyhsZXZlbCwgbXNnLCAqYXJncywgKiprd2FyZ3MpCi0KLSAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgKmxldmVsKiBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBvdGhlciBhcmd1bWVudHMgYXJlCi0gICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4KLQotCi0uLiBmdW5jdGlvbjo6IGRpc2FibGUobHZsKQotCi0gICBQcm92aWRlcyBhbiBvdmVycmlkaW5nIGxldmVsICpsdmwqIGZvciBhbGwgbG9nZ2VycyB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKLSAgIHRoZSBsb2dnZXIncyBvd24gbGV2ZWwuIFdoZW4gdGhlIG5lZWQgYXJpc2VzIHRvIHRlbXBvcmFyaWx5IHRocm90dGxlIGxvZ2dpbmcKLSAgIG91dHB1dCBkb3duIGFjcm9zcyB0aGUgd2hvbGUgYXBwbGljYXRpb24sIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bC4gSXRzCi0gICBlZmZlY3QgaXMgdG8gZGlzYWJsZSBhbGwgbG9nZ2luZyBjYWxscyBvZiBzZXZlcml0eSAqbHZsKiBhbmQgYmVsb3csIHNvIHRoYXQKLSAgIGlmIHlvdSBjYWxsIGl0IHdpdGggYSB2YWx1ZSBvZiBJTkZPLCB0aGVuIGFsbCBJTkZPIGFuZCBERUJVRyBldmVudHMgd291bGQgYmUKLSAgIGRpc2NhcmRlZCwgd2hlcmVhcyB0aG9zZSBvZiBzZXZlcml0eSBXQVJOSU5HIGFuZCBhYm92ZSB3b3VsZCBiZSBwcm9jZXNzZWQKLSAgIGFjY29yZGluZyB0byB0aGUgbG9nZ2VyJ3MgZWZmZWN0aXZlIGxldmVsLgotCi0KLS4uIGZ1bmN0aW9uOjogYWRkTGV2ZWxOYW1lKGx2bCwgbGV2ZWxOYW1lKQotCi0gICBBc3NvY2lhdGVzIGxldmVsICpsdmwqIHdpdGggdGV4dCAqbGV2ZWxOYW1lKiBpbiBhbiBpbnRlcm5hbCBkaWN0aW9uYXJ5LCB3aGljaCBpcwotICAgdXNlZCB0byBtYXAgbnVtZXJpYyBsZXZlbHMgdG8gYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uLCBmb3IgZXhhbXBsZSB3aGVuIGEKLSAgIDpjbGFzczpgRm9ybWF0dGVyYCBmb3JtYXRzIGEgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGRlZmluZQotICAgeW91ciBvd24gbGV2ZWxzLiBUaGUgb25seSBjb25zdHJhaW50cyBhcmUgdGhhdCBhbGwgbGV2ZWxzIHVzZWQgbXVzdCBiZQotICAgcmVnaXN0ZXJlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBsZXZlbHMgc2hvdWxkIGJlIHBvc2l0aXZlIGludGVnZXJzIGFuZCB0aGV5Ci0gICBzaG91bGQgaW5jcmVhc2UgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBzZXZlcml0eS4KLQotCi0uLiBmdW5jdGlvbjo6IGdldExldmVsTmFtZShsdmwpCi0KLSAgIFJldHVybnMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgbG9nZ2luZyBsZXZlbCAqbHZsKi4gSWYgdGhlIGxldmVsIGlzIG9uZQotICAgb2YgdGhlIHByZWRlZmluZWQgbGV2ZWxzIDpjb25zdDpgQ1JJVElDQUxgLCA6Y29uc3Q6YEVSUk9SYCwgOmNvbnN0OmBXQVJOSU5HYCwKLSAgIDpjb25zdDpgSU5GT2Agb3IgOmNvbnN0OmBERUJVR2AgdGhlbiB5b3UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4gSWYgeW91Ci0gICBoYXZlIGFzc29jaWF0ZWQgbGV2ZWxzIHdpdGggbmFtZXMgdXNpbmcgOmZ1bmM6YGFkZExldmVsTmFtZWAgdGhlbiB0aGUgbmFtZSB5b3UKLSAgIGhhdmUgYXNzb2NpYXRlZCB3aXRoICpsdmwqIGlzIHJldHVybmVkLiBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUKLSAgIG9mIHRoZSBkZWZpbmVkIGxldmVscyBpcyBwYXNzZWQgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcwotICAgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbHZsIGlzIHJldHVybmVkLgotCi0KLS4uIGZ1bmN0aW9uOjogbWFrZUxvZ1JlY29yZChhdHRyZGljdCkKLQotICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YExvZ1JlY29yZGAgaW5zdGFuY2Ugd2hvc2UgYXR0cmlidXRlcyBhcmUKLSAgIGRlZmluZWQgYnkgKmF0dHJkaWN0Ki4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHRha2luZyBhIHBpY2tsZWQKLSAgIDpjbGFzczpgTG9nUmVjb3JkYCBhdHRyaWJ1dGUgZGljdGlvbmFyeSwgc2VudCBvdmVyIGEgc29ja2V0LCBhbmQgcmVjb25zdGl0dXRpbmcKLSAgIGl0IGFzIGEgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlIGF0IHRoZSByZWNlaXZpbmcgZW5kLgotCi0KLS4uIGZ1bmN0aW9uOjogYmFzaWNDb25maWcoKiprd2FyZ3MpCi0KLSAgIERvZXMgYmFzaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtIGJ5IGNyZWF0aW5nIGEKLSAgIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgd2l0aCBhIGRlZmF1bHQgOmNsYXNzOmBGb3JtYXR0ZXJgIGFuZCBhZGRpbmcgaXQgdG8gdGhlCi0gICByb290IGxvZ2dlci4gVGhlIGZ1bmN0aW9ucyA6ZnVuYzpgZGVidWdgLCA6ZnVuYzpgaW5mb2AsIDpmdW5jOmB3YXJuaW5nYCwKLSAgIDpmdW5jOmBlcnJvcmAgYW5kIDpmdW5jOmBjcml0aWNhbGAgd2lsbCBjYWxsIDpmdW5jOmBiYXNpY0NvbmZpZ2AgYXV0b21hdGljYWxseQotICAgaWYgbm8gaGFuZGxlcnMgYXJlIGRlZmluZWQgZm9yIHRoZSByb290IGxvZ2dlci4KLQotICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgaWYgdGhlIHJvb3QgbG9nZ2VyIGFscmVhZHkgaGFzIGhhbmRsZXJzCi0gICBjb25maWd1cmVkIGZvciBpdC4KLQotICAgVGhlIGZvbGxvd2luZyBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3VwcG9ydGVkLgotCi0gICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBGb3JtYXQgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi0gICB8IGBgZmlsZW5hbWVgYCB8IFNwZWNpZmllcyB0aGF0IGEgRmlsZUhhbmRsZXIgYmUgY3JlYXRlZCwgICAgfAotICAgfCAgICAgICAgICAgICAgfCB1c2luZyB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByYXRoZXIgdGhhbiBhIHwKLSAgIHwgICAgICAgICAgICAgIHwgU3RyZWFtSGFuZGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYGZpbGVtb2RlYGAgfCBTcGVjaWZpZXMgdGhlIG1vZGUgdG8gb3BlbiB0aGUgZmlsZSwgaWYgICAgIHwKLSAgIHwgICAgICAgICAgICAgIHwgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIChpZiBmaWxlbW9kZSBpcyAgICAgICB8Ci0gICB8ICAgICAgICAgICAgICB8IHVuc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAnYScpLiAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgYGBmb3JtYXRgYCAgIHwgVXNlIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZyBmb3IgdGhlICAgICB8Ci0gICB8ICAgICAgICAgICAgICB8IGhhbmRsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgYGBkYXRlZm10YGAgIHwgVXNlIHRoZSBzcGVjaWZpZWQgZGF0ZS90aW1lIGZvcm1hdC4gICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYGxldmVsYGAgICAgfCBTZXQgdGhlIHJvb3QgbG9nZ2VyIGxldmVsIHRvIHRoZSBzcGVjaWZpZWQgIHwKLSAgIHwgICAgICAgICAgICAgIHwgbGV2ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYHN0cmVhbWBgICAgfCBVc2UgdGhlIHNwZWNpZmllZCBzdHJlYW0gdG8gaW5pdGlhbGl6ZSB0aGUgIHwKLSAgIHwgICAgICAgICAgICAgIHwgU3RyZWFtSGFuZGxlci4gTm90ZSB0aGF0IHRoaXMgYXJndW1lbnQgaXMgICB8Ci0gICB8ICAgICAgICAgICAgICB8IGluY29tcGF0aWJsZSB3aXRoICdmaWxlbmFtZScgLSBpZiBib3RoIGFyZSAgfAotICAgfCAgICAgICAgICAgICAgfCBwcmVzZW50LCAnc3RyZWFtJyBpcyBpZ25vcmVkLiAgICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLQotLi4gZnVuY3Rpb246OiBzaHV0ZG93bigpCi0KLSAgIEluZm9ybXMgdGhlIGxvZ2dpbmcgc3lzdGVtIHRvIHBlcmZvcm0gYW4gb3JkZXJseSBzaHV0ZG93biBieSBmbHVzaGluZyBhbmQKLSAgIGNsb3NpbmcgYWxsIGhhbmRsZXJzLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYXQgYXBwbGljYXRpb24gZXhpdCBhbmQgbm8KLSAgIGZ1cnRoZXIgdXNlIG9mIHRoZSBsb2dnaW5nIHN5c3RlbSBzaG91bGQgYmUgbWFkZSBhZnRlciB0aGlzIGNhbGwuCi0KLQotLi4gZnVuY3Rpb246OiBzZXRMb2dnZXJDbGFzcyhrbGFzcykKLQotICAgVGVsbHMgdGhlIGxvZ2dpbmcgc3lzdGVtIHRvIHVzZSB0aGUgY2xhc3MgKmtsYXNzKiB3aGVuIGluc3RhbnRpYXRpbmcgYSBsb2dnZXIuCi0gICBUaGUgY2xhc3Mgc2hvdWxkIGRlZmluZSA6bWV0aDpgX19pbml0X19gIHN1Y2ggdGhhdCBvbmx5IGEgbmFtZSBhcmd1bWVudCBpcwotICAgcmVxdWlyZWQsIGFuZCB0aGUgOm1ldGg6YF9faW5pdF9fYCBzaG91bGQgY2FsbCA6bWV0aDpgTG9nZ2VyLl9faW5pdF9fYC4gVGhpcwotICAgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBiZWZvcmUgYW55IGxvZ2dlcnMgYXJlIGluc3RhbnRpYXRlZCBieSBhcHBsaWNhdGlvbnMKLSAgIHdoaWNoIG5lZWQgdG8gdXNlIGN1c3RvbSBsb2dnZXIgYmVoYXZpb3IuCi0KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIDpwZXA6YDI4MmAgLSBBIExvZ2dpbmcgU3lzdGVtCi0gICAgICBUaGUgcHJvcG9zYWwgd2hpY2ggZGVzY3JpYmVkIHRoaXMgZmVhdHVyZSBmb3IgaW5jbHVzaW9uIGluIHRoZSBQeXRob24gc3RhbmRhcmQKLSAgICAgIGxpYnJhcnkuCisqIExvZ2dlcnMgZXhwb3NlIHRoZSBpbnRlcmZhY2UgdGhhdCBhcHBsaWNhdGlvbiBjb2RlIGRpcmVjdGx5IHVzZXMuCisqIEhhbmRsZXJzIHNlbmQgdGhlIGxvZyByZWNvcmRzIChjcmVhdGVkIGJ5IGxvZ2dlcnMpIHRvIHRoZSBhcHByb3ByaWF0ZQorICBkZXN0aW5hdGlvbi4KKyogRmlsdGVycyBwcm92aWRlIGEgZmluZXIgZ3JhaW5lZCBmYWNpbGl0eSBmb3IgZGV0ZXJtaW5pbmcgd2hpY2ggbG9nIHJlY29yZHMKKyAgdG8gb3V0cHV0LgorKiBGb3JtYXR0ZXJzIHNwZWNpZnkgdGhlIGxheW91dCBvZiBsb2cgcmVjb3JkcyBpbiB0aGUgZmluYWwgb3V0cHV0LgogCi0gICBgT3JpZ2luYWwgUHl0aG9uIGxvZ2dpbmcgcGFja2FnZSA8aHR0cDovL3d3dy5yZWQtZG92ZS5jb20vcHl0aG9uX2xvZ2dpbmcuaHRtbD5gXwotICAgICAgVGhpcyBpcyB0aGUgb3JpZ2luYWwgc291cmNlIGZvciB0aGUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZS4gIFRoZSB2ZXJzaW9uIG9mIHRoZQotICAgICAgcGFja2FnZSBhdmFpbGFibGUgZnJvbSB0aGlzIHNpdGUgaXMgc3VpdGFibGUgZm9yIHVzZSB3aXRoIFB5dGhvbiAxLjUuMiwgMi4xLngKLSAgICAgIGFuZCAyLjIueCwgd2hpY2ggZG8gbm90IGluY2x1ZGUgdGhlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UgaW4gdGhlIHN0YW5kYXJkCi0gICAgICBsaWJyYXJ5LgogCiAuLiBfbG9nZ2VyOgogCkBAIC04NDgsNiArNTMsNyBAQAogaW5zdGFudGlhdGVkIGRpcmVjdGx5LCBidXQgYWx3YXlzIHRocm91Z2ggdGhlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbgogYGBsb2dnaW5nLmdldExvZ2dlcihuYW1lKWBgLgogCisuLiBjbGFzczo6IExvZ2dlcgogCiAuLiBhdHRyaWJ1dGU6OiBMb2dnZXIucHJvcGFnYXRlCiAKQEAgLTg2NCw3ICs3MCw3IEBACiAgICB0aGUgcm9vdCBsb2dnZXIsIG9yIGRlbGVnYXRpb24gdG8gdGhlIHBhcmVudCB3aGVuIHRoZSBsb2dnZXIgaXMgYSBub24tcm9vdAogICAgbG9nZ2VyKS4gTm90ZSB0aGF0IHRoZSByb290IGxvZ2dlciBpcyBjcmVhdGVkIHdpdGggbGV2ZWwgOmNvbnN0OmBXQVJOSU5HYC4KIAotICAgVGhlIHRlcm0gImRlbGVnYXRpb24gdG8gdGhlIHBhcmVudCIgbWVhbnMgdGhhdCBpZiBhIGxvZ2dlciBoYXMgYSBsZXZlbCBvZgorICAgVGhlIHRlcm0gJ2RlbGVnYXRpb24gdG8gdGhlIHBhcmVudCcgbWVhbnMgdGhhdCBpZiBhIGxvZ2dlciBoYXMgYSBsZXZlbCBvZgogICAgTk9UU0VULCBpdHMgY2hhaW4gb2YgYW5jZXN0b3IgbG9nZ2VycyBpcyB0cmF2ZXJzZWQgdW50aWwgZWl0aGVyIGFuIGFuY2VzdG9yIHdpdGgKICAgIGEgbGV2ZWwgb3RoZXIgdGhhbiBOT1RTRVQgaXMgZm91bmQsIG9yIHRoZSByb290IGlzIHJlYWNoZWQuCiAKQEAgLTg5Miw2ICs5OCwxNiBAQAogICAgOmNvbnN0OmBOT1RTRVRgIGlzIGZvdW5kLCBhbmQgdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KIAogCisuLiBtZXRob2Q6OiBMb2dnZXIuZ2V0Q2hpbGQoc3VmZml4KQorCisgICBSZXR1cm5zIGEgbG9nZ2VyIHdoaWNoIGlzIGEgZGVzY2VuZGFudCB0byB0aGlzIGxvZ2dlciwgYXMgZGV0ZXJtaW5lZCBieSB0aGUgc3VmZml4LgorICAgVGh1cywgYGBsb2dnaW5nLmdldExvZ2dlcignYWJjJykuZ2V0Q2hpbGQoJ2RlZi5naGknKWBgIHdvdWxkIHJldHVybiB0aGUgc2FtZQorICAgbG9nZ2VyIGFzIHdvdWxkIGJlIHJldHVybmVkIGJ5IGBgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJylgYC4gVGhpcyBpcyBhCisgICBjb252ZW5pZW5jZSBtZXRob2QsIHVzZWZ1bCB3aGVuIHRoZSBwYXJlbnQgbG9nZ2VyIGlzIG5hbWVkIHVzaW5nIGUuZy4gYGBfX25hbWVfX2BgCisgICByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiAuLiBtZXRob2Q6OiBMb2dnZXIuZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKQEAgLTkwMCwyMyArMTE2LDQxIEBACiAgICAqbXNnKiB1c2luZyB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IuIChOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW4KICAgIHVzZSBrZXl3b3JkcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBkaWN0aW9uYXJ5IGFyZ3VtZW50LikKIAotICAgVGhlcmUgYXJlIHR3byBrZXl3b3JkIGFyZ3VtZW50cyBpbiAqa3dhcmdzKiB3aGljaCBhcmUgaW5zcGVjdGVkOiAqZXhjX2luZm8qCisgICBUaGVyZSBhcmUgdGhyZWUga2V5d29yZCBhcmd1bWVudHMgaW4gKmt3YXJncyogd2hpY2ggYXJlIGluc3BlY3RlZDogKmV4Y19pbmZvKgogICAgd2hpY2gsIGlmIGl0IGRvZXMgbm90IGV2YWx1YXRlIGFzIGZhbHNlLCBjYXVzZXMgZXhjZXB0aW9uIGluZm9ybWF0aW9uIHRvIGJlCiAgICBhZGRlZCB0byB0aGUgbG9nZ2luZyBtZXNzYWdlLiBJZiBhbiBleGNlcHRpb24gdHVwbGUgKGluIHRoZSBmb3JtYXQgcmV0dXJuZWQgYnkKICAgIDpmdW5jOmBzeXMuZXhjX2luZm9gKSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZDsgb3RoZXJ3aXNlLCA6ZnVuYzpgc3lzLmV4Y19pbmZvYAogICAgaXMgY2FsbGVkIHRvIGdldCB0aGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uLgogCi0gICBUaGUgb3RoZXIgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCBpcyAqZXh0cmEqIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHBhc3MgYQorICAgVGhlIHNlY29uZCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50IGlzICpzdGFja19pbmZvKiwgd2hpY2ggZGVmYXVsdHMgdG8KKyAgIEZhbHNlLiBJZiBzcGVjaWZpZWQgYXMgVHJ1ZSwgc3RhY2sgaW5mb3JtYXRpb24gaXMgYWRkZWQgdG8gdGhlIGxvZ2dpbmcKKyAgIG1lc3NhZ2UsIGluY2x1ZGluZyB0aGUgYWN0dWFsIGxvZ2dpbmcgY2FsbC4gTm90ZSB0aGF0IHRoaXMgaXMgbm90IHRoZSBzYW1lCisgICBzdGFjayBpbmZvcm1hdGlvbiBhcyB0aGF0IGRpc3BsYXllZCB0aHJvdWdoIHNwZWNpZnlpbmcgKmV4Y19pbmZvKjogVGhlCisgICBmb3JtZXIgaXMgc3RhY2sgZnJhbWVzIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgdXAgdG8gdGhlIGxvZ2dpbmcgY2FsbAorICAgaW4gdGhlIGN1cnJlbnQgdGhyZWFkLCB3aGVyZWFzIHRoZSBsYXR0ZXIgaXMgaW5mb3JtYXRpb24gYWJvdXQgc3RhY2sgZnJhbWVzCisgICB3aGljaCBoYXZlIGJlZW4gdW53b3VuZCwgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiwgd2hpbGUgc2VhcmNoaW5nIGZvcgorICAgZXhjZXB0aW9uIGhhbmRsZXJzLgorCisgICBZb3UgY2FuIHNwZWNpZnkgKnN0YWNrX2luZm8qIGluZGVwZW5kZW50bHkgb2YgKmV4Y19pbmZvKiwgZS5nLiB0byBqdXN0IHNob3cKKyAgIGhvdyB5b3UgZ290IHRvIGEgY2VydGFpbiBwb2ludCBpbiB5b3VyIGNvZGUsIGV2ZW4gd2hlbiBubyBleGNlcHRpb25zIHdlcmUKKyAgIHJhaXNlZC4gVGhlIHN0YWNrIGZyYW1lcyBhcmUgcHJpbnRlZCBmb2xsb3dpbmcgYSBoZWFkZXIgbGluZSB3aGljaCBzYXlzOjoKKworICAgICAgIFN0YWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorCisgICBUaGlzIG1pbWljcyB0aGUgYFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpgIHdoaWNoIGlzIHVzZWQgd2hlbgorICAgZGlzcGxheWluZyBleGNlcHRpb24gZnJhbWVzLgorCisgICBUaGUgdGhpcmQga2V5d29yZCBhcmd1bWVudCBpcyAqZXh0cmEqIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHBhc3MgYQogICAgZGljdGlvbmFyeSB3aGljaCBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBfX2RpY3RfXyBvZiB0aGUgTG9nUmVjb3JkIGNyZWF0ZWQgZm9yCiAgICB0aGUgbG9nZ2luZyBldmVudCB3aXRoIHVzZXItZGVmaW5lZCBhdHRyaWJ1dGVzLiBUaGVzZSBjdXN0b20gYXR0cmlidXRlcyBjYW4gdGhlbgogICAgYmUgdXNlZCBhcyB5b3UgbGlrZS4gRm9yIGV4YW1wbGUsIHRoZXkgY291bGQgYmUgaW5jb3Jwb3JhdGVkIGludG8gbG9nZ2VkCiAgICBtZXNzYWdlcy4gRm9yIGV4YW1wbGU6OgogCi0gICAgICBGT1JNQVQgPSAiJShhc2N0aW1lKS0xNXMgJShjbGllbnRpcClzICUodXNlciktOHMgJShtZXNzYWdlKXMiCisgICAgICBGT1JNQVQgPSAnJShhc2N0aW1lKS0xNXMgJShjbGllbnRpcClzICUodXNlciktOHMgJShtZXNzYWdlKXMnCiAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD1GT1JNQVQpCiAgICAgICBkID0geyAnY2xpZW50aXAnIDogJzE5Mi4xNjguMC4xJywgJ3VzZXInIDogJ2ZibG9nZ3MnIH0KLSAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0Y3BzZXJ2ZXIiKQotICAgICAgbG9nZ2VyLndhcm5pbmcoIlByb3RvY29sIHByb2JsZW06ICVzIiwgImNvbm5lY3Rpb24gcmVzZXQiLCBleHRyYT1kKQorICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3RjcHNlcnZlcicpCisgICAgICBsb2dnZXIud2FybmluZygnUHJvdG9jb2wgcHJvYmxlbTogJXMnLCAnY29ubmVjdGlvbiByZXNldCcsIGV4dHJhPWQpCiAKICAgIHdvdWxkIHByaW50IHNvbWV0aGluZyBsaWtlICA6OgogCkBAIC05NDAsNiArMTc0LDkgQEAKICAgIGFib3ZlIGV4YW1wbGUpLiBJbiBzdWNoIGNpcmN1bXN0YW5jZXMsIGl0IGlzIGxpa2VseSB0aGF0IHNwZWNpYWxpemVkCiAgICA6Y2xhc3M6YEZvcm1hdHRlcmBcIHMgd291bGQgYmUgdXNlZCB3aXRoIHBhcnRpY3VsYXIgOmNsYXNzOmBIYW5kbGVyYFwgcy4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBUaGUgKnN0YWNrX2luZm8qIHBhcmFtZXRlciB3YXMgYWRkZWQuCisKIAogLi4gbWV0aG9kOjogTG9nZ2VyLmluZm8obXNnLCAqYXJncywgKiprd2FyZ3MpCiAKQEAgLTEwMDQsMTAgKzI0MSwxMSBAQAogICAgUmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGhhbmRsZXIgKmhkbHIqIGZyb20gdGhpcyBsb2dnZXIuCiAKIAotLi4gbWV0aG9kOjogTG9nZ2VyLmZpbmRDYWxsZXIoKQorLi4gbWV0aG9kOjogTG9nZ2VyLmZpbmRDYWxsZXIoc3RhY2tfaW5mbz1GYWxzZSkKIAogICAgRmluZHMgdGhlIGNhbGxlcidzIHNvdXJjZSBmaWxlbmFtZSBhbmQgbGluZSBudW1iZXIuIFJldHVybnMgdGhlIGZpbGVuYW1lLCBsaW5lCi0gICBudW1iZXIgYW5kIGZ1bmN0aW9uIG5hbWUgYXMgYSAzLWVsZW1lbnQgdHVwbGUuCisgICBudW1iZXIsIGZ1bmN0aW9uIG5hbWUgYW5kIHN0YWNrIGluZm9ybWF0aW9uIGFzIGEgNC1lbGVtZW50IHR1cGxlLiBUaGUgc3RhY2sKKyAgIGluZm9ybWF0aW9uIGlzIHJldHVybmVkIGFzICpOb25lKiB1bmxlc3MgKnN0YWNrX2luZm8qIGlzICpUcnVlKi4KIAogCiAuLiBtZXRob2Q6OiBMb2dnZXIuaGFuZGxlKHJlY29yZCkKQEAgLTEwMTgsNjMwICsyNTYsMjIgQEAKICAgIExvZ2dlci1sZXZlbCBmaWx0ZXJpbmcgaXMgYXBwbGllZCB1c2luZyA6bWV0aDpgfkxvZ2dlci5maWx0ZXJgLgogCiAKLS4uIG1ldGhvZDo6IExvZ2dlci5tYWtlUmVjb3JkKG5hbWUsIGx2bCwgZm4sIGxubywgbXNnLCBhcmdzLCBleGNfaW5mbywgZnVuYz1Ob25lLCBleHRyYT1Ob25lKQorLi4gbWV0aG9kOjogTG9nZ2VyLm1ha2VSZWNvcmQobmFtZSwgbHZsLCBmbiwgbG5vLCBtc2csIGFyZ3MsIGV4Y19pbmZvLCBmdW5jPU5vbmUsIGV4dHJhPU5vbmUsIHNpbmZvPU5vbmUpCiAKICAgIFRoaXMgaXMgYSBmYWN0b3J5IG1ldGhvZCB3aGljaCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzIHRvIGNyZWF0ZQogICAgc3BlY2lhbGl6ZWQgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlcy4KIAorLi4gbWV0aG9kOjogTG9nZ2VyLmhhc0hhbmRsZXJzKCkKIAotLi4gX21pbmltYWwtZXhhbXBsZToKKyAgIENoZWNrcyB0byBzZWUgaWYgdGhpcyBsb2dnZXIgaGFzIGFueSBoYW5kbGVycyBjb25maWd1cmVkLiBUaGlzIGlzIGRvbmUgYnkKKyAgIGxvb2tpbmcgZm9yIGhhbmRsZXJzIGluIHRoaXMgbG9nZ2VyIGFuZCBpdHMgcGFyZW50cyBpbiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4KKyAgIFJldHVybnMgVHJ1ZSBpZiBhIGhhbmRsZXIgd2FzIGZvdW5kLCBlbHNlIEZhbHNlLiBUaGUgbWV0aG9kIHN0b3BzIHNlYXJjaGluZworICAgdXAgdGhlIGhpZXJhcmNoeSB3aGVuZXZlciBhIGxvZ2dlciB3aXRoIHRoZSAncHJvcGFnYXRlJyBhdHRyaWJ1dGUgc2V0IHRvCisgICBGYWxzZSBpcyBmb3VuZCAtIHRoYXQgd2lsbCBiZSB0aGUgbGFzdCBsb2dnZXIgd2hpY2ggaXMgY2hlY2tlZCBmb3IgdGhlCisgICBleGlzdGVuY2Ugb2YgaGFuZGxlcnMuCiAKLUJhc2ljIGV4YW1wbGUKLS0tLS0tLS0tLS0tLS0KLQotVGhlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UgcHJvdmlkZXMgYSBsb3Qgb2YgZmxleGliaWxpdHksIGFuZCBpdHMgY29uZmlndXJhdGlvbgotY2FuIGFwcGVhciBkYXVudGluZy4gIFRoaXMgc2VjdGlvbiBkZW1vbnN0cmF0ZXMgdGhhdCBzaW1wbGUgdXNlIG9mIHRoZSBsb2dnaW5nCi1wYWNrYWdlIGlzIHBvc3NpYmxlLgotCi1UaGUgc2ltcGxlc3QgZXhhbXBsZSBzaG93cyBsb2dnaW5nIHRvIHRoZSBjb25zb2xlOjoKLQotICAgaW1wb3J0IGxvZ2dpbmcKLQotICAgbG9nZ2luZy5kZWJ1ZygnQSBkZWJ1ZyBtZXNzYWdlJykKLSAgIGxvZ2dpbmcuaW5mbygnU29tZSBpbmZvcm1hdGlvbicpCi0gICBsb2dnaW5nLndhcm5pbmcoJ0Egc2hvdCBhY3Jvc3MgdGhlIGJvd3MnKQotCi1JZiB5b3UgcnVuIHRoZSBhYm92ZSBzY3JpcHQsIHlvdSdsbCBzZWUgdGhpczo6Ci0KLSAgIFdBUk5JTkc6cm9vdDpBIHNob3QgYWNyb3NzIHRoZSBib3dzCi0KLUJlY2F1c2Ugbm8gcGFydGljdWxhciBsb2dnZXIgd2FzIHNwZWNpZmllZCwgdGhlIHN5c3RlbSB1c2VkIHRoZSByb290IGxvZ2dlci4gVGhlCi1kZWJ1ZyBhbmQgaW5mbyBtZXNzYWdlcyBkaWRuJ3QgYXBwZWFyIGJlY2F1c2UgYnkgZGVmYXVsdCwgdGhlIHJvb3QgbG9nZ2VyIGlzCi1jb25maWd1cmVkIHRvIG9ubHkgaGFuZGxlIG1lc3NhZ2VzIHdpdGggYSBzZXZlcml0eSBvZiBXQVJOSU5HIG9yIGFib3ZlLiBUaGUKLW1lc3NhZ2UgZm9ybWF0IGlzIGFsc28gYSBjb25maWd1cmF0aW9uIGRlZmF1bHQsIGFzIGlzIHRoZSBvdXRwdXQgZGVzdGluYXRpb24gb2YKLXRoZSBtZXNzYWdlcyAtIGBgc3lzLnN0ZGVycmBgLiBUaGUgc2V2ZXJpdHkgbGV2ZWwsIHRoZSBtZXNzYWdlIGZvcm1hdCBhbmQKLWRlc3RpbmF0aW9uIGNhbiBiZSBlYXNpbHkgY2hhbmdlZCwgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3c6OgotCi0gICBpbXBvcnQgbG9nZ2luZwotCi0gICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpcyAlKG1lc3NhZ2UpcycsCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPSdteWFwcC5sb2cnLAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycpCi0gICBsb2dnaW5nLmRlYnVnKCdBIGRlYnVnIG1lc3NhZ2UnKQotICAgbG9nZ2luZy5pbmZvKCdTb21lIGluZm9ybWF0aW9uJykKLSAgIGxvZ2dpbmcud2FybmluZygnQSBzaG90IGFjcm9zcyB0aGUgYm93cycpCi0KLVRoZSA6bWV0aDpgYmFzaWNDb25maWdgIG1ldGhvZCBpcyB1c2VkIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBkZWZhdWx0cywKLXdoaWNoIHJlc3VsdHMgaW4gb3V0cHV0ICh3cml0dGVuIHRvIGBgbXlhcHAubG9nYGApIHdoaWNoIHNob3VsZCBsb29rCi1zb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOjoKLQotICAgMjAwNC0wNy0wMiAxMzowMDowOCw3NDMgREVCVUcgQSBkZWJ1ZyBtZXNzYWdlCi0gICAyMDA0LTA3LTAyIDEzOjAwOjA4LDc0MyBJTkZPIFNvbWUgaW5mb3JtYXRpb24KLSAgIDIwMDQtMDctMDIgMTM6MDA6MDgsNzQzIFdBUk5JTkcgQSBzaG90IGFjcm9zcyB0aGUgYm93cwotCi1UaGlzIHRpbWUsIGFsbCBtZXNzYWdlcyB3aXRoIGEgc2V2ZXJpdHkgb2YgREVCVUcgb3IgYWJvdmUgd2VyZSBoYW5kbGVkLCBhbmQgdGhlCi1mb3JtYXQgb2YgdGhlIG1lc3NhZ2VzIHdhcyBhbHNvIGNoYW5nZWQsIGFuZCBvdXRwdXQgd2VudCB0byB0aGUgc3BlY2lmaWVkIGZpbGUKLXJhdGhlciB0aGFuIHRoZSBjb25zb2xlLgotCi0uLiBYWFggbG9nZ2luZyBzaG91bGQgcHJvYmFibHkgYmUgdXBkYXRlZCBmb3IgbmV3IHN0cmluZyBmb3JtYXR0aW5nIQotCi1Gb3JtYXR0aW5nIHVzZXMgdGhlIG9sZCBQeXRob24gc3RyaW5nIGZvcm1hdHRpbmcgLSBzZWUgc2VjdGlvbgotOnJlZjpgb2xkLXN0cmluZy1mb3JtYXR0aW5nYC4gVGhlIGZvcm1hdCBzdHJpbmcgdGFrZXMgdGhlIGZvbGxvd2luZyBjb21tb24KLXNwZWNpZmllcnMuIEZvciBhIGNvbXBsZXRlIGxpc3Qgb2Ygc3BlY2lmaWVycywgY29uc3VsdCB0aGUgOmNsYXNzOmBGb3JtYXR0ZXJgCi1kb2N1bWVudGF0aW9uLgotCi0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgRm9ybWF0ICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGBgJShuYW1lKXNgYCAgICAgIHwgTmFtZSBvZiB0aGUgbG9nZ2VyIChsb2dnaW5nIGNoYW5uZWwpLiAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYCUobGV2ZWxuYW1lKXNgYCB8IFRleHQgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgIHwgKGBgJ0RFQlVHJ2BgLCBgYCdJTkZPJ2BgLCBgYCdXQVJOSU5HJ2BgLCAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgfCBgYCdFUlJPUidgYCwgYGAnQ1JJVElDQUwnYGApLiAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShhc2N0aW1lKXNgYCAgIHwgSHVtYW4tcmVhZGFibGUgdGltZSB3aGVuIHRoZSAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YExvZ1JlY29yZGAgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0ICAgfAotfCAgICAgICAgICAgICAgICAgICB8IHRoaXMgaXMgb2YgdGhlIGZvcm0gIjIwMDMtMDctMDggMTY6NDk6NDUsODk2IiB8Ci18ICAgICAgICAgICAgICAgICAgIHwgKHRoZSBudW1iZXJzIGFmdGVyIHRoZSBjb21tYSBhcmUgbWlsbGlzZWNvbmQgIHwKLXwgICAgICAgICAgICAgICAgICAgfCBwb3J0aW9uIG9mIHRoZSB0aW1lKS4gICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShtZXNzYWdlKXNgYCAgIHwgVGhlIGxvZ2dlZCBtZXNzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotCi1UbyBjaGFuZ2UgdGhlIGRhdGUvdGltZSBmb3JtYXQsIHlvdSBjYW4gcGFzcyBhbiBhZGRpdGlvbmFsIGtleXdvcmQgcGFyYW1ldGVyLAotKmRhdGVmbXQqLCBhcyBpbiB0aGUgZm9sbG93aW5nOjoKLQotICAgaW1wb3J0IGxvZ2dpbmcKLQotICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhsZXZlbD1sb2dnaW5nLkRFQlVHLAotICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9JyUoYXNjdGltZSlzICUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcycsCi0gICAgICAgICAgICAgICAgICAgICAgIGRhdGVmbXQ9JyVhLCAlZCAlYiAlWSAlSDolTTolUycsCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPScvdGVtcC9teWFwcC5sb2cnLAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycpCi0gICBsb2dnaW5nLmRlYnVnKCdBIGRlYnVnIG1lc3NhZ2UnKQotICAgbG9nZ2luZy5pbmZvKCdTb21lIGluZm9ybWF0aW9uJykKLSAgIGxvZ2dpbmcud2FybmluZygnQSBzaG90IGFjcm9zcyB0aGUgYm93cycpCi0KLXdoaWNoIHdvdWxkIHJlc3VsdCBpbiBvdXRwdXQgbGlrZSA6OgotCi0gICBGcmksIDAyIEp1bCAyMDA0IDEzOjA2OjE4IERFQlVHICAgIEEgZGVidWcgbWVzc2FnZQotICAgRnJpLCAwMiBKdWwgMjAwNCAxMzowNjoxOCBJTkZPICAgICBTb21lIGluZm9ybWF0aW9uCi0gICBGcmksIDAyIEp1bCAyMDA0IDEzOjA2OjE4IFdBUk5JTkcgIEEgc2hvdCBhY3Jvc3MgdGhlIGJvd3MKLQotVGhlIGRhdGUgZm9ybWF0IHN0cmluZyBmb2xsb3dzIHRoZSByZXF1aXJlbWVudHMgb2YgOmZ1bmM6YHN0cmZ0aW1lYCAtIHNlZSB0aGUKLWRvY3VtZW50YXRpb24gZm9yIHRoZSA6bW9kOmB0aW1lYCBtb2R1bGUuCi0KLUlmLCBpbnN0ZWFkIG9mIHNlbmRpbmcgbG9nZ2luZyBvdXRwdXQgdG8gdGhlIGNvbnNvbGUgb3IgYSBmaWxlLCB5b3UnZCByYXRoZXIgdXNlCi1hIGZpbGUtbGlrZSBvYmplY3Qgd2hpY2ggeW91IGhhdmUgY3JlYXRlZCBzZXBhcmF0ZWx5LCB5b3UgY2FuIHBhc3MgaXQgdG8KLTpmdW5jOmBiYXNpY0NvbmZpZ2AgdXNpbmcgdGhlICpzdHJlYW0qIGtleXdvcmQgYXJndW1lbnQuIE5vdGUgdGhhdCBpZiBib3RoCi0qc3RyZWFtKiBhbmQgKmZpbGVuYW1lKiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkLCB0aGUgKnN0cmVhbSogYXJndW1lbnQgaXMKLWlnbm9yZWQuCi0KLU9mIGNvdXJzZSwgeW91IGNhbiBwdXQgdmFyaWFibGUgaW5mb3JtYXRpb24gaW4geW91ciBvdXRwdXQuIFRvIGRvIHRoaXMsIHNpbXBseQotaGF2ZSB0aGUgbWVzc2FnZSBiZSBhIGZvcm1hdCBzdHJpbmcgYW5kIHBhc3MgaW4gYWRkaXRpb25hbCBhcmd1bWVudHMgY29udGFpbmluZwotdGhlIHZhcmlhYmxlIGluZm9ybWF0aW9uLCBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6OgotCi0gICBpbXBvcnQgbG9nZ2luZwotCi0gICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCi0gICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJywKLSAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWZtdD0nJWEsICVkICViICVZICVIOiVNOiVTJywKLSAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9Jy90ZW1wL215YXBwLmxvZycsCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVtb2RlPSd3JykKLSAgIGxvZ2dpbmcuZXJyb3IoJ1BhY2sgbXkgYm94IHdpdGggJWQgZG96ZW4gJXMnLCA1LCAnbGlxdW9yIGp1Z3MnKQotCi13aGljaCB3b3VsZCByZXN1bHQgaW4gOjoKLQotICAgV2VkLCAyMSBKdWwgMjAwNCAxNTozNToxNiBFUlJPUiAgICBQYWNrIG15IGJveCB3aXRoIDUgZG96ZW4gbGlxdW9yIGp1Z3MKLQotCi0uLiBfbXVsdGlwbGUtZGVzdGluYXRpb25zOgotCi1Mb2dnaW5nIHRvIG11bHRpcGxlIGRlc3RpbmF0aW9ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGV0J3Mgc2F5IHlvdSB3YW50IHRvIGxvZyB0byBjb25zb2xlIGFuZCBmaWxlIHdpdGggZGlmZmVyZW50IG1lc3NhZ2UgZm9ybWF0cyBhbmQKLWluIGRpZmZlcmluZyBjaXJjdW1zdGFuY2VzLiBTYXkgeW91IHdhbnQgdG8gbG9nIG1lc3NhZ2VzIHdpdGggbGV2ZWxzIG9mIERFQlVHCi1hbmQgaGlnaGVyIHRvIGZpbGUsIGFuZCB0aG9zZSBtZXNzYWdlcyBhdCBsZXZlbCBJTkZPIGFuZCBoaWdoZXIgdG8gdGhlIGNvbnNvbGUuCi1MZXQncyBhbHNvIGFzc3VtZSB0aGF0IHRoZSBmaWxlIHNob3VsZCBjb250YWluIHRpbWVzdGFtcHMsIGJ1dCB0aGUgY29uc29sZQotbWVzc2FnZXMgc2hvdWxkIG5vdC4gSGVyZSdzIGhvdyB5b3UgY2FuIGFjaGlldmUgdGhpczo6Ci0KLSAgIGltcG9ydCBsb2dnaW5nCi0KLSAgICMgc2V0IHVwIGxvZ2dpbmcgdG8gZmlsZSAtIHNlZSBwcmV2aW91cyBzZWN0aW9uIGZvciBtb3JlIGRldGFpbHMKLSAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywKLSAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSclKGFzY3RpbWUpcyAlKG5hbWUpLTEycyAlKGxldmVsbmFtZSktOHMgJShtZXNzYWdlKXMnLAotICAgICAgICAgICAgICAgICAgICAgICBkYXRlZm10PSclbS0lZCAlSDolTScsCi0gICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lPScvdGVtcC9teWFwcC5sb2cnLAotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbW9kZT0ndycpCi0gICAjIGRlZmluZSBhIEhhbmRsZXIgd2hpY2ggd3JpdGVzIElORk8gbWVzc2FnZXMgb3IgaGlnaGVyIHRvIHRoZSBzeXMuc3RkZXJyCi0gICBjb25zb2xlID0gbG9nZ2luZy5TdHJlYW1IYW5kbGVyKCkKLSAgIGNvbnNvbGUuc2V0TGV2ZWwobG9nZ2luZy5JTkZPKQotICAgIyBzZXQgYSBmb3JtYXQgd2hpY2ggaXMgc2ltcGxlciBmb3IgY29uc29sZSB1c2UKLSAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKG5hbWUpLTEyczogJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJykKLSAgICMgdGVsbCB0aGUgaGFuZGxlciB0byB1c2UgdGhpcyBmb3JtYXQKLSAgIGNvbnNvbGUuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICMgYWRkIHRoZSBoYW5kbGVyIHRvIHRoZSByb290IGxvZ2dlcgotICAgbG9nZ2luZy5nZXRMb2dnZXIoJycpLmFkZEhhbmRsZXIoY29uc29sZSkKLQotICAgIyBOb3csIHdlIGNhbiBsb2cgdG8gdGhlIHJvb3QgbG9nZ2VyLCBvciBhbnkgb3RoZXIgbG9nZ2VyLiBGaXJzdCB0aGUgcm9vdC4uLgotICAgbG9nZ2luZy5pbmZvKCdKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LicpCi0KLSAgICMgTm93LCBkZWZpbmUgYSBjb3VwbGUgb2Ygb3RoZXIgbG9nZ2VycyB3aGljaCBtaWdodCByZXByZXNlbnQgYXJlYXMgaW4geW91cgotICAgIyBhcHBsaWNhdGlvbjoKLQotICAgbG9nZ2VyMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteWFwcC5hcmVhMScpCi0gICBsb2dnZXIyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215YXBwLmFyZWEyJykKLQotICAgbG9nZ2VyMS5kZWJ1ZygnUXVpY2sgemVwaHlycyBibG93LCB2ZXhpbmcgZGFmdCBKaW0uJykKLSAgIGxvZ2dlcjEuaW5mbygnSG93IHF1aWNrbHkgZGFmdCBqdW1waW5nIHplYnJhcyB2ZXguJykKLSAgIGxvZ2dlcjIud2FybmluZygnSmFpbCB6ZXN0eSB2aXhlbiB3aG8gZ3JhYmJlZCBwYXkgZnJvbSBxdWFjay4nKQotICAgbG9nZ2VyMi5lcnJvcignVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LicpCi0KLVdoZW4geW91IHJ1biB0aGlzLCBvbiB0aGUgY29uc29sZSB5b3Ugd2lsbCBzZWUgOjoKLQotICAgcm9vdCAgICAgICAgOiBJTkZPICAgICBKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LgotICAgbXlhcHAuYXJlYTEgOiBJTkZPICAgICBIb3cgcXVpY2tseSBkYWZ0IGp1bXBpbmcgemVicmFzIHZleC4KLSAgIG15YXBwLmFyZWEyIDogV0FSTklORyAgSmFpbCB6ZXN0eSB2aXhlbiB3aG8gZ3JhYmJlZCBwYXkgZnJvbSBxdWFjay4KLSAgIG15YXBwLmFyZWEyIDogRVJST1IgICAgVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LgotCi1hbmQgaW4gdGhlIGZpbGUgeW91IHdpbGwgc2VlIHNvbWV0aGluZyBsaWtlIDo6Ci0KLSAgIDEwLTIyIDIyOjE5IHJvb3QgICAgICAgICBJTkZPICAgICBKYWNrZGF3cyBsb3ZlIG15IGJpZyBzcGhpbnggb2YgcXVhcnR6LgotICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTEgIERFQlVHICAgIFF1aWNrIHplcGh5cnMgYmxvdywgdmV4aW5nIGRhZnQgSmltLgotICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTEgIElORk8gICAgIEhvdyBxdWlja2x5IGRhZnQganVtcGluZyB6ZWJyYXMgdmV4LgotICAgMTAtMjIgMjI6MTkgbXlhcHAuYXJlYTIgIFdBUk5JTkcgIEphaWwgemVzdHkgdml4ZW4gd2hvIGdyYWJiZWQgcGF5IGZyb20gcXVhY2suCi0gICAxMC0yMiAyMjoxOSBteWFwcC5hcmVhMiAgRVJST1IgICAgVGhlIGZpdmUgYm94aW5nIHdpemFyZHMganVtcCBxdWlja2x5LgotCi1BcyB5b3UgY2FuIHNlZSwgdGhlIERFQlVHIG1lc3NhZ2Ugb25seSBzaG93cyB1cCBpbiB0aGUgZmlsZS4gVGhlIG90aGVyIG1lc3NhZ2VzCi1hcmUgc2VudCB0byBib3RoIGRlc3RpbmF0aW9ucy4KLQotVGhpcyBleGFtcGxlIHVzZXMgY29uc29sZSBhbmQgZmlsZSBoYW5kbGVycywgYnV0IHlvdSBjYW4gdXNlIGFueSBudW1iZXIgYW5kCi1jb21iaW5hdGlvbiBvZiBoYW5kbGVycyB5b3UgY2hvb3NlLgotCi0uLiBfbG9nZ2luZy1leGNlcHRpb25zOgotCi1FeGNlcHRpb25zIHJhaXNlZCBkdXJpbmcgbG9nZ2luZwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGxvZ2dpbmcgcGFja2FnZSBpcyBkZXNpZ25lZCB0byBzd2FsbG93IGV4Y2VwdGlvbnMgd2hpY2ggb2NjdXIgd2hpbGUgbG9nZ2luZwotaW4gcHJvZHVjdGlvbi4gVGhpcyBpcyBzbyB0aGF0IGVycm9ycyB3aGljaCBvY2N1ciB3aGlsZSBoYW5kbGluZyBsb2dnaW5nIGV2ZW50cwotLSBzdWNoIGFzIGxvZ2dpbmcgbWlzY29uZmlndXJhdGlvbiwgbmV0d29yayBvciBvdGhlciBzaW1pbGFyIGVycm9ycyAtIGRvIG5vdAotY2F1c2UgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIGxvZ2dpbmcgdG8gdGVybWluYXRlIHByZW1hdHVyZWx5LgotCi06Y2xhc3M6YFN5c3RlbUV4aXRgIGFuZCA6Y2xhc3M6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb25zIGFyZSBuZXZlcgotc3dhbGxvd2VkLiBPdGhlciBleGNlcHRpb25zIHdoaWNoIG9jY3VyIGR1cmluZyB0aGUgOm1ldGg6YGVtaXRgIG1ldGhvZCBvZiBhCi06Y2xhc3M6YEhhbmRsZXJgIHN1YmNsYXNzIGFyZSBwYXNzZWQgdG8gaXRzIDptZXRoOmBoYW5kbGVFcnJvcmAgbWV0aG9kLgotCi1UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaGFuZGxlRXJyb3JgIGluIDpjbGFzczpgSGFuZGxlcmAgY2hlY2tzCi10byBzZWUgaWYgYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUsIDpkYXRhOmByYWlzZUV4Y2VwdGlvbnNgLCBpcyBzZXQuIElmIHNldCwgYQotdHJhY2ViYWNrIGlzIHByaW50ZWQgdG8gOmRhdGE6YHN5cy5zdGRlcnJgLiBJZiBub3Qgc2V0LCB0aGUgZXhjZXB0aW9uIGlzIHN3YWxsb3dlZC4KLQotKipOb3RlOioqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIDpkYXRhOmByYWlzZUV4Y2VwdGlvbnNgIGlzIGBgVHJ1ZWBgLiBUaGlzIGlzIGJlY2F1c2UKLWR1cmluZyBkZXZlbG9wbWVudCwgeW91IHR5cGljYWxseSB3YW50IHRvIGJlIG5vdGlmaWVkIG9mIGFueSBleGNlcHRpb25zIHRoYXQKLW9jY3VyLiBJdCdzIGFkdmlzZWQgdGhhdCB5b3Ugc2V0IDpkYXRhOmByYWlzZUV4Y2VwdGlvbnNgIHRvIGBgRmFsc2VgYCBmb3IgcHJvZHVjdGlvbgotdXNhZ2UuCi0KLS4uIF9jb250ZXh0LWluZm86Ci0KLUFkZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHlvdXIgbG9nZ2luZyBvdXRwdXQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotU29tZXRpbWVzIHlvdSB3YW50IGxvZ2dpbmcgb3V0cHV0IHRvIGNvbnRhaW4gY29udGV4dHVhbCBpbmZvcm1hdGlvbiBpbgotYWRkaXRpb24gdG8gdGhlIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZSBsb2dnaW5nIGNhbGwuIEZvciBleGFtcGxlLCBpbiBhCi1uZXR3b3JrZWQgYXBwbGljYXRpb24sIGl0IG1heSBiZSBkZXNpcmFibGUgdG8gbG9nIGNsaWVudC1zcGVjaWZpYyBpbmZvcm1hdGlvbgotaW4gdGhlIGxvZyAoZS5nLiByZW1vdGUgY2xpZW50J3MgdXNlcm5hbWUsIG9yIElQIGFkZHJlc3MpLiBBbHRob3VnaCB5b3UgY291bGQKLXVzZSB0aGUgKmV4dHJhKiBwYXJhbWV0ZXIgdG8gYWNoaWV2ZSB0aGlzLCBpdCdzIG5vdCBhbHdheXMgY29udmVuaWVudCB0byBwYXNzCi10aGUgaW5mb3JtYXRpb24gaW4gdGhpcyB3YXkuIFdoaWxlIGl0IG1pZ2h0IGJlIHRlbXB0aW5nIHRvIGNyZWF0ZQotOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBvbiBhIHBlci1jb25uZWN0aW9uIGJhc2lzLCB0aGlzIGlzIG5vdCBhIGdvb2QgaWRlYQotYmVjYXVzZSB0aGVzZSBpbnN0YW5jZXMgYXJlIG5vdCBnYXJiYWdlIGNvbGxlY3RlZC4gV2hpbGUgdGhpcyBpcyBub3QgYSBwcm9ibGVtCi1pbiBwcmFjdGljZSwgd2hlbiB0aGUgbnVtYmVyIG9mIDpjbGFzczpgTG9nZ2VyYCBpbnN0YW5jZXMgaXMgZGVwZW5kZW50IG9uIHRoZQotbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgeW91IHdhbnQgdG8gdXNlIGluIGxvZ2dpbmcgYW4gYXBwbGljYXRpb24sIGl0IGNvdWxkCi1iZSBoYXJkIHRvIG1hbmFnZSBpZiB0aGUgbnVtYmVyIG9mIDpjbGFzczpgTG9nZ2VyYCBpbnN0YW5jZXMgYmVjb21lcwotZWZmZWN0aXZlbHkgdW5ib3VuZGVkLgotCi0KLVVzaW5nIExvZ2dlckFkYXB0ZXJzIHRvIGltcGFydCBjb250ZXh0dWFsIGluZm9ybWF0aW9uCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1BbiBlYXN5IHdheSBpbiB3aGljaCB5b3UgY2FuIHBhc3MgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQgYWxvbmcKLXdpdGggbG9nZ2luZyBldmVudCBpbmZvcm1hdGlvbiBpcyB0byB1c2UgdGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3MuCi1UaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGxvb2sgbGlrZSBhIDpjbGFzczpgTG9nZ2VyYCwgc28gdGhhdCB5b3UgY2FuIGNhbGwKLTptZXRoOmBkZWJ1Z2AsIDptZXRoOmBpbmZvYCwgOm1ldGg6YHdhcm5pbmdgLCA6bWV0aDpgZXJyb3JgLAotOm1ldGg6YGV4Y2VwdGlvbmAsIDptZXRoOmBjcml0aWNhbGAgYW5kIDptZXRoOmBsb2dgLiBUaGVzZSBtZXRob2RzIGhhdmUgdGhlCi1zYW1lIHNpZ25hdHVyZXMgYXMgdGhlaXIgY291bnRlcnBhcnRzIGluIDpjbGFzczpgTG9nZ2VyYCwgc28geW91IGNhbiB1c2UgdGhlCi10d28gdHlwZXMgb2YgaW5zdGFuY2VzIGludGVyY2hhbmdlYWJseS4KLQotV2hlbiB5b3UgY3JlYXRlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAsIHlvdSBwYXNzIGl0IGEKLTpjbGFzczpgTG9nZ2VyYCBpbnN0YW5jZSBhbmQgYSBkaWN0LWxpa2Ugb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHlvdXIgY29udGV4dHVhbAotaW5mb3JtYXRpb24uIFdoZW4geW91IGNhbGwgb25lIG9mIHRoZSBsb2dnaW5nIG1ldGhvZHMgb24gYW4gaW5zdGFuY2Ugb2YKLTpjbGFzczpgTG9nZ2VyQWRhcHRlcmAsIGl0IGRlbGVnYXRlcyB0aGUgY2FsbCB0byB0aGUgdW5kZXJseWluZyBpbnN0YW5jZSBvZgotOmNsYXNzOmBMb2dnZXJgIHBhc3NlZCB0byBpdHMgY29uc3RydWN0b3IsIGFuZCBhcnJhbmdlcyB0byBwYXNzIHRoZSBjb250ZXh0dWFsCi1pbmZvcm1hdGlvbiBpbiB0aGUgZGVsZWdhdGVkIGNhbGwuIEhlcmUncyBhIHNuaXBwZXQgZnJvbSB0aGUgY29kZSBvZgotOmNsYXNzOmBMb2dnZXJBZGFwdGVyYDo6Ci0KLSAgICBkZWYgZGVidWcoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiIKLSAgICAgICAgRGVsZWdhdGUgYSBkZWJ1ZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciwgYWZ0ZXIgYWRkaW5nCi0gICAgICAgIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIGFkYXB0ZXIgaW5zdGFuY2UuCi0gICAgICAgICIiIgotICAgICAgICBtc2csIGt3YXJncyA9IHNlbGYucHJvY2Vzcyhtc2csIGt3YXJncykKLSAgICAgICAgc2VsZi5sb2dnZXIuZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpCi0KLVRoZSA6bWV0aDpgcHJvY2Vzc2AgbWV0aG9kIG9mIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgaXMgd2hlcmUgdGhlIGNvbnRleHR1YWwKLWluZm9ybWF0aW9uIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nIG91dHB1dC4gSXQncyBwYXNzZWQgdGhlIG1lc3NhZ2UgYW5kCi1rZXl3b3JkIGFyZ3VtZW50cyBvZiB0aGUgbG9nZ2luZyBjYWxsLCBhbmQgaXQgcGFzc2VzIGJhY2sgKHBvdGVudGlhbGx5KQotbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlc2UgdG8gdXNlIGluIHRoZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4gVGhlCi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGxlYXZlcyB0aGUgbWVzc2FnZSBhbG9uZSwgYnV0IGluc2VydHMKLWFuICJleHRyYSIga2V5IGluIHRoZSBrZXl3b3JkIGFyZ3VtZW50IHdob3NlIHZhbHVlIGlzIHRoZSBkaWN0LWxpa2Ugb2JqZWN0Ci1wYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBPZiBjb3Vyc2UsIGlmIHlvdSBoYWQgcGFzc2VkIGFuICJleHRyYSIga2V5d29yZAotYXJndW1lbnQgaW4gdGhlIGNhbGwgdG8gdGhlIGFkYXB0ZXIsIGl0IHdpbGwgYmUgc2lsZW50bHkgb3ZlcndyaXR0ZW4uCi0KLVRoZSBhZHZhbnRhZ2Ugb2YgdXNpbmcgImV4dHJhIiBpcyB0aGF0IHRoZSB2YWx1ZXMgaW4gdGhlIGRpY3QtbGlrZSBvYmplY3QgYXJlCi1tZXJnZWQgaW50byB0aGUgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlJ3MgX19kaWN0X18sIGFsbG93aW5nIHlvdSB0byB1c2UKLWN1c3RvbWl6ZWQgc3RyaW5ncyB3aXRoIHlvdXIgOmNsYXNzOmBGb3JtYXR0ZXJgIGluc3RhbmNlcyB3aGljaCBrbm93IGFib3V0Ci10aGUga2V5cyBvZiB0aGUgZGljdC1saWtlIG9iamVjdC4gSWYgeW91IG5lZWQgYSBkaWZmZXJlbnQgbWV0aG9kLCBlLmcuIGlmIHlvdQotd2FudCB0byBwcmVwZW5kIG9yIGFwcGVuZCB0aGUgY29udGV4dHVhbCBpbmZvcm1hdGlvbiB0byB0aGUgbWVzc2FnZSBzdHJpbmcsCi15b3UganVzdCBuZWVkIHRvIHN1YmNsYXNzIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgYW5kIG92ZXJyaWRlIDptZXRoOmBwcm9jZXNzYAotdG8gZG8gd2hhdCB5b3UgbmVlZC4gSGVyZSdzIGFuIGV4YW1wbGUgc2NyaXB0IHdoaWNoIHVzZXMgdGhpcyBjbGFzcywgd2hpY2gKLWFsc28gaWxsdXN0cmF0ZXMgd2hhdCBkaWN0LWxpa2UgYmVoYXZpb3VyIGlzIG5lZWRlZCBmcm9tIGFuIGFyYml0cmFyeQotImRpY3QtbGlrZSIgb2JqZWN0IGZvciB1c2UgaW4gdGhlIGNvbnN0cnVjdG9yOjoKLQotICAgaW1wb3J0IGxvZ2dpbmcKLQotICAgY2xhc3MgQ29ubkluZm86Ci0gICAgICAgIiIiCi0gICAgICAgQW4gZXhhbXBsZSBjbGFzcyB3aGljaCBzaG93cyBob3cgYW4gYXJiaXRyYXJ5IGNsYXNzIGNhbiBiZSB1c2VkIGFzCi0gICAgICAgdGhlICdleHRyYScgY29udGV4dCBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHBhc3NlZCB0byBhIExvZ2dlckFkYXB0ZXIuCi0gICAgICAgIiIiCi0KLSAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgICAgICIiIgotICAgICAgICAgICBUbyBhbGxvdyB0aGlzIGluc3RhbmNlIHRvIGxvb2sgbGlrZSBhIGRpY3QuCi0gICAgICAgICAgICIiIgotICAgICAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCi0gICAgICAgICAgIGlmIG5hbWUgPT0gImlwIjoKLSAgICAgICAgICAgICAgIHJlc3VsdCA9IGNob2ljZShbIjEyNy4wLjAuMSIsICIxOTIuMTY4LjAuMSJdKQotICAgICAgICAgICBlbGlmIG5hbWUgPT0gInVzZXIiOgotICAgICAgICAgICAgICAgcmVzdWx0ID0gY2hvaWNlKFsiamltIiwgImZyZWQiLCAic2hlaWxhIl0pCi0gICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9fZGljdF9fLmdldChuYW1lLCAiPyIpCi0gICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIiIiCi0gICAgICAgICAgIFRvIGFsbG93IGl0ZXJhdGlvbiBvdmVyIGtleXMsIHdoaWNoIHdpbGwgYmUgbWVyZ2VkIGludG8KLSAgICAgICAgICAgdGhlIExvZ1JlY29yZCBkaWN0IGJlZm9yZSBmb3JtYXR0aW5nIGFuZCBvdXRwdXQuCi0gICAgICAgICAgICIiIgotICAgICAgICAgICBrZXlzID0gWyJpcCIsICJ1c2VyIl0KLSAgICAgICAgICAga2V5cy5leHRlbmQoc2VsZi5fX2RpY3RfXy5rZXlzKCkpCi0gICAgICAgICAgIHJldHVybiBrZXlzLl9faXRlcl9fKCkKLQotICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCi0gICAgICAgbGV2ZWxzID0gKGxvZ2dpbmcuREVCVUcsIGxvZ2dpbmcuSU5GTywgbG9nZ2luZy5XQVJOSU5HLCBsb2dnaW5nLkVSUk9SLCBsb2dnaW5nLkNSSVRJQ0FMKQotICAgICAgIGExID0gbG9nZ2luZy5Mb2dnZXJBZGFwdGVyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCJhLmIuYyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgImlwIiA6ICIxMjMuMjMxLjIzMS4xMjMiLCAidXNlciIgOiAic2hlaWxhIiB9KQotICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcobGV2ZWw9bG9nZ2luZy5ERUJVRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iJShhc2N0aW1lKS0xNXMgJShuYW1lKS01cyAlKGxldmVsbmFtZSktOHMgSVA6ICUoaXApLTE1cyBVc2VyOiAlKHVzZXIpLThzICUobWVzc2FnZSlzIikKLSAgICAgICBhMS5kZWJ1ZygiQSBkZWJ1ZyBtZXNzYWdlIikKLSAgICAgICBhMS5pbmZvKCJBbiBpbmZvIG1lc3NhZ2Ugd2l0aCAlcyIsICJzb21lIHBhcmFtZXRlcnMiKQotICAgICAgIGEyID0gbG9nZ2luZy5Mb2dnZXJBZGFwdGVyKGxvZ2dpbmcuZ2V0TG9nZ2VyKCJkLmUuZiIpLCBDb25uSW5mbygpKQotICAgICAgIGZvciB4IGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgbHZsID0gY2hvaWNlKGxldmVscykKLSAgICAgICAgICAgbHZsbmFtZSA9IGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGx2bCkKLSAgICAgICAgICAgYTIubG9nKGx2bCwgIkEgbWVzc2FnZSBhdCAlcyBsZXZlbCB3aXRoICVkICVzIiwgbHZsbmFtZSwgMiwgInBhcmFtZXRlcnMiKQotCi1XaGVuIHRoaXMgc2NyaXB0IGlzIHJ1biwgdGhlIG91dHB1dCBzaG91bGQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOjoKLQotICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMjMgYS5iLmMgREVCVUcgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBzaGVpbGEgICBBIGRlYnVnIG1lc3NhZ2UKLSAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDIzIGEuYi5jIElORk8gICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogc2hlaWxhICAgQW4gaW5mbyBtZXNzYWdlIHdpdGggc29tZSBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAyMyBkLmUuZiBDUklUSUNBTCBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBDUklUSUNBTCBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMzMgZC5lLmYgSU5GTyAgICAgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBqaW0gICAgICBBIG1lc3NhZ2UgYXQgSU5GTyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMzMgZC5lLmYgV0FSTklORyAgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgV0FSTklORyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgMjAwOC0wMS0xOCAxNDo0OTo1NCwwMzMgZC5lLmYgRVJST1IgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBmcmVkICAgICBBIG1lc3NhZ2UgYXQgRVJST1IgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKLSAgIDIwMDgtMDEtMTggMTQ6NDk6NTQsMDMzIGQuZS5mIEVSUk9SICAgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBXQVJOSU5HICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBXQVJOSU5HIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBXQVJOSU5HICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBXQVJOSU5HIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBJTkZPICAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBJTkZPIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBXQVJOSU5HICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBXQVJOSU5HIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAyMDA4LTAxLTE4IDE0OjQ5OjU0LDAzMyBkLmUuZiBXQVJOSU5HICBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBXQVJOSU5HIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0KLQotVXNpbmcgRmlsdGVycyB0byBpbXBhcnQgY29udGV4dHVhbCBpbmZvcm1hdGlvbgotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1Zb3UgY2FuIGFsc28gYWRkIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdG8gbG9nIG91dHB1dCB1c2luZyBhIHVzZXItZGVmaW5lZAotOmNsYXNzOmBGaWx0ZXJgLiBgYEZpbHRlcmBgIGluc3RhbmNlcyBhcmUgYWxsb3dlZCB0byBtb2RpZnkgdGhlIGBgTG9nUmVjb3Jkc2BgCi1wYXNzZWQgdG8gdGhlbSwgaW5jbHVkaW5nIGFkZGluZyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMgd2hpY2ggY2FuIHRoZW4gYmUgb3V0cHV0Ci11c2luZyBhIHN1aXRhYmxlIGZvcm1hdCBzdHJpbmcsIG9yIGlmIG5lZWRlZCBhIGN1c3RvbSA6Y2xhc3M6YEZvcm1hdHRlcmAuCi0KLUZvciBleGFtcGxlIGluIGEgd2ViIGFwcGxpY2F0aW9uLCB0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQgKG9yIGF0IGxlYXN0LAotdGhlIGludGVyZXN0aW5nIHBhcnRzIG9mIGl0KSBjYW4gYmUgc3RvcmVkIGluIGEgdGhyZWFkbG9jYWwKLSg6Y2xhc3M6YHRocmVhZGluZy5sb2NhbGApIHZhcmlhYmxlLCBhbmQgdGhlbiBhY2Nlc3NlZCBmcm9tIGEgYGBGaWx0ZXJgYCB0bwotYWRkLCBzYXksIGluZm9ybWF0aW9uIGZyb20gdGhlIHJlcXVlc3QgLSBzYXksIHRoZSByZW1vdGUgSVAgYWRkcmVzcyBhbmQgcmVtb3RlCi11c2VyJ3MgdXNlcm5hbWUgLSB0byB0aGUgYGBMb2dSZWNvcmRgYCwgdXNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lcyAnaXAnIGFuZAotJ3VzZXInIGFzIGluIHRoZSBgYExvZ2dlckFkYXB0ZXJgYCBleGFtcGxlIGFib3ZlLiBJbiB0aGF0IGNhc2UsIHRoZSBzYW1lIGZvcm1hdAotc3RyaW5nIGNhbiBiZSB1c2VkIHRvIGdldCBzaW1pbGFyIG91dHB1dCB0byB0aGF0IHNob3duIGFib3ZlLiBIZXJlJ3MgYW4gZXhhbXBsZQotc2NyaXB0OjoKLQotICAgIGltcG9ydCBsb2dnaW5nCi0gICAgZnJvbSByYW5kb20gaW1wb3J0IGNob2ljZQotCi0gICAgY2xhc3MgQ29udGV4dEZpbHRlcihsb2dnaW5nLkZpbHRlcik6Ci0gICAgICAgICIiIgotICAgICAgICBUaGlzIGlzIGEgZmlsdGVyIHdoaWNoIGluamVjdHMgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBpbnRvIHRoZSBsb2cuCi0KLSAgICAgICAgUmF0aGVyIHRoYW4gdXNlIGFjdHVhbCBjb250ZXh0dWFsIGluZm9ybWF0aW9uLCB3ZSBqdXN0IHVzZSByYW5kb20KLSAgICAgICAgZGF0YSBpbiB0aGlzIGRlbW8uCi0gICAgICAgICIiIgotCi0gICAgICAgIFVTRVJTID0gWydqaW0nLCAnZnJlZCcsICdzaGVpbGEnXQotICAgICAgICBJUFMgPSBbJzEyMy4yMzEuMjMxLjEyMycsICcxMjcuMC4wLjEnLCAnMTkyLjE2OC4wLjEnXQotCi0gICAgICAgIGRlZiBmaWx0ZXIoc2VsZiwgcmVjb3JkKToKLQotICAgICAgICAgICAgcmVjb3JkLmlwID0gY2hvaWNlKENvbnRleHRGaWx0ZXIuSVBTKQotICAgICAgICAgICAgcmVjb3JkLnVzZXIgPSBjaG9pY2UoQ29udGV4dEZpbHRlci5VU0VSUykKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICAgIGxldmVscyA9IChsb2dnaW5nLkRFQlVHLCBsb2dnaW5nLklORk8sIGxvZ2dpbmcuV0FSTklORywgbG9nZ2luZy5FUlJPUiwgbG9nZ2luZy5DUklUSUNBTCkKLSAgICAgICBhMSA9IGxvZ2dpbmcuTG9nZ2VyQWRhcHRlcihsb2dnaW5nLmdldExvZ2dlcigiYS5iLmMiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJpcCIgOiAiMTIzLjIzMS4yMzEuMTIzIiwgInVzZXIiIDogInNoZWlsYSIgfSkKLSAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9IiUoYXNjdGltZSktMTVzICUobmFtZSktNXMgJShsZXZlbG5hbWUpLThzIElQOiAlKGlwKS0xNXMgVXNlcjogJSh1c2VyKS04cyAlKG1lc3NhZ2UpcyIpCi0gICAgICAgYTEgPSBsb2dnaW5nLmdldExvZ2dlcigiYS5iLmMiKQotICAgICAgIGEyID0gbG9nZ2luZy5nZXRMb2dnZXIoImQuZS5mIikKLQotICAgICAgIGYgPSBDb250ZXh0RmlsdGVyKCkKLSAgICAgICBhMS5hZGRGaWx0ZXIoZikKLSAgICAgICBhMi5hZGRGaWx0ZXIoZikKLSAgICAgICBhMS5kZWJ1ZygiQSBkZWJ1ZyBtZXNzYWdlIikKLSAgICAgICBhMS5pbmZvKCJBbiBpbmZvIG1lc3NhZ2Ugd2l0aCAlcyIsICJzb21lIHBhcmFtZXRlcnMiKQotICAgICAgIGZvciB4IGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgbHZsID0gY2hvaWNlKGxldmVscykKLSAgICAgICAgICAgbHZsbmFtZSA9IGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGx2bCkKLSAgICAgICAgICAgYTIubG9nKGx2bCwgIkEgbWVzc2FnZSBhdCAlcyBsZXZlbCB3aXRoICVkICVzIiwgbHZsbmFtZSwgMiwgInBhcmFtZXRlcnMiKQotCi13aGljaCwgd2hlbiBydW4sIHByb2R1Y2VzIHNvbWV0aGluZyBsaWtlOjoKLQotICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMjkyIGEuYi5jIERFQlVHICAgIElQOiAxMjMuMjMxLjIzMS4xMjMgVXNlcjogZnJlZCAgICAgQSBkZWJ1ZyBtZXNzYWdlCi0gICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgYS5iLmMgSU5GTyAgICAgSVA6IDE5Mi4xNjguMC4xICAgICBVc2VyOiBzaGVpbGEgICBBbiBpbmZvIG1lc3NhZ2Ugd2l0aCBzb21lIHBhcmFtZXRlcnMKLSAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBDUklUSUNBTCBJUDogMTI3LjAuMC4xICAgICAgIFVzZXI6IHNoZWlsYSAgIEEgbWVzc2FnZSBhdCBDUklUSUNBTCBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIEVSUk9SICAgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgREVCVUcgICAgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgREVCVUcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKLSAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBFUlJPUiAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBFUlJPUiBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAwIGQuZS5mIENSSVRJQ0FMIElQOiAxOTIuMTY4LjAuMSAgICAgVXNlcjogamltICAgICAgQSBtZXNzYWdlIGF0IENSSVRJQ0FMIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDAgZC5lLmYgQ1JJVElDQUwgSVA6IDEyNy4wLjAuMSAgICAgICBVc2VyOiBzaGVpbGEgICBBIG1lc3NhZ2UgYXQgQ1JJVElDQUwgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKLSAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMCBkLmUuZiBERUJVRyAgICBJUDogMTkyLjE2OC4wLjEgICAgIFVzZXI6IGppbSAgICAgIEEgbWVzc2FnZSBhdCBERUJVRyBsZXZlbCB3aXRoIDIgcGFyYW1ldGVycwotICAgIDIwMTAtMDktMDYgMjI6Mzg6MTUsMzAxIGQuZS5mIEVSUk9SICAgIElQOiAxMjcuMC4wLjEgICAgICAgVXNlcjogc2hlaWxhICAgQSBtZXNzYWdlIGF0IEVSUk9SIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0gICAgMjAxMC0wOS0wNiAyMjozODoxNSwzMDEgZC5lLmYgREVCVUcgICAgSVA6IDEyMy4yMzEuMjMxLjEyMyBVc2VyOiBmcmVkICAgICBBIG1lc3NhZ2UgYXQgREVCVUcgbGV2ZWwgd2l0aCAyIHBhcmFtZXRlcnMKLSAgICAyMDEwLTA5LTA2IDIyOjM4OjE1LDMwMSBkLmUuZiBJTkZPICAgICBJUDogMTIzLjIzMS4yMzEuMTIzIFVzZXI6IGZyZWQgICAgIEEgbWVzc2FnZSBhdCBJTkZPIGxldmVsIHdpdGggMiBwYXJhbWV0ZXJzCi0KLQotLi4gX211bHRpcGxlLXByb2Nlc3NlczoKLQotTG9nZ2luZyB0byBhIHNpbmdsZSBmaWxlIGZyb20gbXVsdGlwbGUgcHJvY2Vzc2VzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotQWx0aG91Z2ggbG9nZ2luZyBpcyB0aHJlYWQtc2FmZSwgYW5kIGxvZ2dpbmcgdG8gYSBzaW5nbGUgZmlsZSBmcm9tIG11bHRpcGxlCi10aHJlYWRzIGluIGEgc2luZ2xlIHByb2Nlc3MgKmlzKiBzdXBwb3J0ZWQsIGxvZ2dpbmcgdG8gYSBzaW5nbGUgZmlsZSBmcm9tCi0qbXVsdGlwbGUgcHJvY2Vzc2VzKiBpcyAqbm90KiBzdXBwb3J0ZWQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gc3RhbmRhcmQgd2F5IHRvCi1zZXJpYWxpemUgYWNjZXNzIHRvIGEgc2luZ2xlIGZpbGUgYWNyb3NzIG11bHRpcGxlIHByb2Nlc3NlcyBpbiBQeXRob24uIElmIHlvdQotbmVlZCB0byBsb2cgdG8gYSBzaW5nbGUgZmlsZSBmcm9tIG11bHRpcGxlIHByb2Nlc3Nlcywgb25lIHdheSBvZiBkb2luZyB0aGlzIGlzCi10byBoYXZlIGFsbCB0aGUgcHJvY2Vzc2VzIGxvZyB0byBhIDpjbGFzczpgU29ja2V0SGFuZGxlcmAsIGFuZCBoYXZlIGEgc2VwYXJhdGUKLXByb2Nlc3Mgd2hpY2ggaW1wbGVtZW50cyBhIHNvY2tldCBzZXJ2ZXIgd2hpY2ggcmVhZHMgZnJvbSB0aGUgc29ja2V0IGFuZCBsb2dzCi10byBmaWxlLiAoSWYgeW91IHByZWZlciwgeW91IGNhbiBkZWRpY2F0ZSBvbmUgdGhyZWFkIGluIG9uZSBvZiB0aGUgZXhpc3RpbmcKLXByb2Nlc3NlcyB0byBwZXJmb3JtIHRoaXMgZnVuY3Rpb24uKSBUaGUgZm9sbG93aW5nIHNlY3Rpb24gZG9jdW1lbnRzIHRoaXMKLWFwcHJvYWNoIGluIG1vcmUgZGV0YWlsIGFuZCBpbmNsdWRlcyBhIHdvcmtpbmcgc29ja2V0IHJlY2VpdmVyIHdoaWNoIGNhbiBiZQotdXNlZCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciB5b3UgdG8gYWRhcHQgaW4geW91ciBvd24gYXBwbGljYXRpb25zLgotCi1JZiB5b3UgYXJlIHVzaW5nIGEgcmVjZW50IHZlcnNpb24gb2YgUHl0aG9uIHdoaWNoIGluY2x1ZGVzIHRoZQotOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUsIHlvdSBjb3VsZCB3cml0ZSB5b3VyIG93biBoYW5kbGVyIHdoaWNoIHVzZXMgdGhlCi06Y2xhc3M6YExvY2tgIGNsYXNzIGZyb20gdGhpcyBtb2R1bGUgdG8gc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgZmlsZSBmcm9tCi15b3VyIHByb2Nlc3Nlcy4gVGhlIGV4aXN0aW5nIDpjbGFzczpgRmlsZUhhbmRsZXJgIGFuZCBzdWJjbGFzc2VzIGRvIG5vdCBtYWtlCi11c2Ugb2YgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBhdCBwcmVzZW50LCB0aG91Z2ggdGhleSBtYXkgZG8gc28gaW4gdGhlIGZ1dHVyZS4KLU5vdGUgdGhhdCBhdCBwcmVzZW50LCB0aGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBtb2R1bGUgZG9lcyBub3QgcHJvdmlkZQotd29ya2luZyBsb2NrIGZ1bmN0aW9uYWxpdHkgb24gYWxsIHBsYXRmb3JtcyAoc2VlCi1odHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMzc3MCkuCi0KLQotLi4gX25ldHdvcmstbG9nZ2luZzoKLQotU2VuZGluZyBhbmQgcmVjZWl2aW5nIGxvZ2dpbmcgZXZlbnRzIGFjcm9zcyBhIG5ldHdvcmsKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxldCdzIHNheSB5b3Ugd2FudCB0byBzZW5kIGxvZ2dpbmcgZXZlbnRzIGFjcm9zcyBhIG5ldHdvcmssIGFuZCBoYW5kbGUgdGhlbSBhdAotdGhlIHJlY2VpdmluZyBlbmQuIEEgc2ltcGxlIHdheSBvZiBkb2luZyB0aGlzIGlzIGF0dGFjaGluZyBhCi06Y2xhc3M6YFNvY2tldEhhbmRsZXJgIGluc3RhbmNlIHRvIHRoZSByb290IGxvZ2dlciBhdCB0aGUgc2VuZGluZyBlbmQ6OgotCi0gICBpbXBvcnQgbG9nZ2luZywgbG9nZ2luZy5oYW5kbGVycwotCi0gICByb290TG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJycpCi0gICByb290TG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCi0gICBzb2NrZXRIYW5kbGVyID0gbG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLmhhbmRsZXJzLkRFRkFVTFRfVENQX0xPR0dJTkdfUE9SVCkKLSAgICMgZG9uJ3QgYm90aGVyIHdpdGggYSBmb3JtYXR0ZXIsIHNpbmNlIGEgc29ja2V0IGhhbmRsZXIgc2VuZHMgdGhlIGV2ZW50IGFzCi0gICAjIGFuIHVuZm9ybWF0dGVkIHBpY2tsZQotICAgcm9vdExvZ2dlci5hZGRIYW5kbGVyKHNvY2tldEhhbmRsZXIpCi0KLSAgICMgTm93LCB3ZSBjYW4gbG9nIHRvIHRoZSByb290IGxvZ2dlciwgb3IgYW55IG90aGVyIGxvZ2dlci4gRmlyc3QgdGhlIHJvb3QuLi4KLSAgIGxvZ2dpbmcuaW5mbygnSmFja2Rhd3MgbG92ZSBteSBiaWcgc3BoaW54IG9mIHF1YXJ0ei4nKQotCi0gICAjIE5vdywgZGVmaW5lIGEgY291cGxlIG9mIG90aGVyIGxvZ2dlcnMgd2hpY2ggbWlnaHQgcmVwcmVzZW50IGFyZWFzIGluIHlvdXIKLSAgICMgYXBwbGljYXRpb246Ci0KLSAgIGxvZ2dlcjEgPSBsb2dnaW5nLmdldExvZ2dlcignbXlhcHAuYXJlYTEnKQotICAgbG9nZ2VyMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdteWFwcC5hcmVhMicpCi0KLSAgIGxvZ2dlcjEuZGVidWcoJ1F1aWNrIHplcGh5cnMgYmxvdywgdmV4aW5nIGRhZnQgSmltLicpCi0gICBsb2dnZXIxLmluZm8oJ0hvdyBxdWlja2x5IGRhZnQganVtcGluZyB6ZWJyYXMgdmV4LicpCi0gICBsb2dnZXIyLndhcm5pbmcoJ0phaWwgemVzdHkgdml4ZW4gd2hvIGdyYWJiZWQgcGF5IGZyb20gcXVhY2suJykKLSAgIGxvZ2dlcjIuZXJyb3IoJ1RoZSBmaXZlIGJveGluZyB3aXphcmRzIGp1bXAgcXVpY2tseS4nKQotCi1BdCB0aGUgcmVjZWl2aW5nIGVuZCwgeW91IGNhbiBzZXQgdXAgYSByZWNlaXZlciB1c2luZyB0aGUgOm1vZDpgc29ja2V0c2VydmVyYAotbW9kdWxlLiBIZXJlIGlzIGEgYmFzaWMgd29ya2luZyBleGFtcGxlOjoKLQotICAgaW1wb3J0IHBpY2tsZQotICAgaW1wb3J0IGxvZ2dpbmcKLSAgIGltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCi0gICBpbXBvcnQgc29ja2V0c2VydmVyCi0gICBpbXBvcnQgc3RydWN0Ci0KLQotICAgY2xhc3MgTG9nUmVjb3JkU3RyZWFtSGFuZGxlcihzb2NrZXRzZXJ2ZXIuU3RyZWFtUmVxdWVzdEhhbmRsZXIpOgotICAgICAgICIiIkhhbmRsZXIgZm9yIGEgc3RyZWFtaW5nIGxvZ2dpbmcgcmVxdWVzdC4KLQotICAgICAgIFRoaXMgYmFzaWNhbGx5IGxvZ3MgdGhlIHJlY29yZCB1c2luZyB3aGF0ZXZlciBsb2dnaW5nIHBvbGljeSBpcwotICAgICAgIGNvbmZpZ3VyZWQgbG9jYWxseS4KLSAgICAgICAiIiIKLQotICAgICAgIGRlZiBoYW5kbGUoc2VsZik6Ci0gICAgICAgICAgICIiIgotICAgICAgICAgICBIYW5kbGUgbXVsdGlwbGUgcmVxdWVzdHMgLSBlYWNoIGV4cGVjdGVkIHRvIGJlIGEgNC1ieXRlIGxlbmd0aCwKLSAgICAgICAgICAgZm9sbG93ZWQgYnkgdGhlIExvZ1JlY29yZCBpbiBwaWNrbGUgZm9ybWF0LiBMb2dzIHRoZSByZWNvcmQKLSAgICAgICAgICAgYWNjb3JkaW5nIHRvIHdoYXRldmVyIHBvbGljeSBpcyBjb25maWd1cmVkIGxvY2FsbHkuCi0gICAgICAgICAgICIiIgotICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdig0KQotICAgICAgICAgICAgICAgaWYgbGVuKGNodW5rKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgIHNsZW4gPSBzdHJ1Y3QudW5wYWNrKCI+TCIsIGNodW5rKVswXQotICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQotICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46Ci0gICAgICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuayArIHNlbGYuY29ubmVjdGlvbi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgb2JqID0gc2VsZi51blBpY2tsZShjaHVuaykKLSAgICAgICAgICAgICAgIHJlY29yZCA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZChvYmopCi0gICAgICAgICAgICAgICBzZWxmLmhhbmRsZUxvZ1JlY29yZChyZWNvcmQpCi0KLSAgICAgICBkZWYgdW5QaWNrbGUoc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMoZGF0YSkKLQotICAgICAgIGRlZiBoYW5kbGVMb2dSZWNvcmQoc2VsZiwgcmVjb3JkKToKLSAgICAgICAgICAgIyBpZiBhIG5hbWUgaXMgc3BlY2lmaWVkLCB3ZSB1c2UgdGhlIG5hbWVkIGxvZ2dlciByYXRoZXIgdGhhbiB0aGUgb25lCi0gICAgICAgICAgICMgaW1wbGllZCBieSB0aGUgcmVjb3JkLgotICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5sb2duYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuc2VydmVyLmxvZ25hbWUKLSAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgIG5hbWUgPSByZWNvcmQubmFtZQotICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihuYW1lKQotICAgICAgICAgICAjIE4uQi4gRVZFUlkgcmVjb3JkIGdldHMgbG9nZ2VkLiBUaGlzIGlzIGJlY2F1c2UgTG9nZ2VyLmhhbmRsZQotICAgICAgICAgICAjIGlzIG5vcm1hbGx5IGNhbGxlZCBBRlRFUiBsb2dnZXItbGV2ZWwgZmlsdGVyaW5nLiBJZiB5b3Ugd2FudAotICAgICAgICAgICAjIHRvIGRvIGZpbHRlcmluZywgZG8gaXQgYXQgdGhlIGNsaWVudCBlbmQgdG8gc2F2ZSB3YXN0aW5nCi0gICAgICAgICAgICMgY3ljbGVzIGFuZCBuZXR3b3JrIGJhbmR3aWR0aCEKLSAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpCi0KLSAgIGNsYXNzIExvZ1JlY29yZFNvY2tldFJlY2VpdmVyKHNvY2tldHNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXIpOgotICAgICAgICIiInNpbXBsZSBUQ1Agc29ja2V0LWJhc2VkIGxvZ2dpbmcgcmVjZWl2ZXIgc3VpdGFibGUgZm9yIHRlc3RpbmcuCi0gICAgICAgIiIiCi0KLSAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQotCi0gICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgIHBvcnQ9bG9nZ2luZy5oYW5kbGVycy5ERUZBVUxUX1RDUF9MT0dHSU5HX1BPUlQsCi0gICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9TG9nUmVjb3JkU3RyZWFtSGFuZGxlcik6Ci0gICAgICAgICAgIHNvY2tldHNlcnZlci5UaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQotICAgICAgICAgICBzZWxmLmFib3J0ID0gMAotICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSAxCi0gICAgICAgICAgIHNlbGYubG9nbmFtZSA9IE5vbmUKLQotICAgICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgotICAgICAgICAgICBpbXBvcnQgc2VsZWN0Ci0gICAgICAgICAgIGFib3J0ID0gMAotICAgICAgICAgICB3aGlsZSBub3QgYWJvcnQ6Ci0gICAgICAgICAgICAgICByZCwgd3IsIGV4ID0gc2VsZWN0LnNlbGVjdChbc2VsZi5zb2NrZXQuZmlsZW5vKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10sIFtdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0KQotICAgICAgICAgICAgICAgaWYgcmQ6Ci0gICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCi0gICAgICAgICAgICAgICBhYm9ydCA9IHNlbGYuYWJvcnQKLQotICAgZGVmIG1haW4oKToKLSAgICAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKAotICAgICAgICAgICBmb3JtYXQ9IiUocmVsYXRpdmVDcmVhdGVkKTVkICUobmFtZSktMTVzICUobGV2ZWxuYW1lKS04cyAlKG1lc3NhZ2UpcyIpCi0gICAgICAgdGNwc2VydmVyID0gTG9nUmVjb3JkU29ja2V0UmVjZWl2ZXIoKQotICAgICAgIHByaW50KCJBYm91dCB0byBzdGFydCBUQ1Agc2VydmVyLi4uIikKLSAgICAgICB0Y3BzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCgpCi0KLSAgIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgICAgbWFpbigpCi0KLUZpcnN0IHJ1biB0aGUgc2VydmVyLCBhbmQgdGhlbiB0aGUgY2xpZW50LiBPbiB0aGUgY2xpZW50IHNpZGUsIG5vdGhpbmcgaXMKLXByaW50ZWQgb24gdGhlIGNvbnNvbGU7IG9uIHRoZSBzZXJ2ZXIgc2lkZSwgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2U6OgotCi0gICBBYm91dCB0byBzdGFydCBUQ1Agc2VydmVyLi4uCi0gICAgICA1OSByb290ICAgICAgICAgICAgSU5GTyAgICAgSmFja2Rhd3MgbG92ZSBteSBiaWcgc3BoaW54IG9mIHF1YXJ0ei4KLSAgICAgIDU5IG15YXBwLmFyZWExICAgICBERUJVRyAgICBRdWljayB6ZXBoeXJzIGJsb3csIHZleGluZyBkYWZ0IEppbS4KLSAgICAgIDY5IG15YXBwLmFyZWExICAgICBJTkZPICAgICBIb3cgcXVpY2tseSBkYWZ0IGp1bXBpbmcgemVicmFzIHZleC4KLSAgICAgIDY5IG15YXBwLmFyZWEyICAgICBXQVJOSU5HICBKYWlsIHplc3R5IHZpeGVuIHdobyBncmFiYmVkIHBheSBmcm9tIHF1YWNrLgotICAgICAgNjkgbXlhcHAuYXJlYTIgICAgIEVSUk9SICAgIFRoZSBmaXZlIGJveGluZyB3aXphcmRzIGp1bXAgcXVpY2tseS4KLQotTm90ZSB0aGF0IHRoZXJlIGFyZSBzb21lIHNlY3VyaXR5IGlzc3VlcyB3aXRoIHBpY2tsZSBpbiBzb21lIHNjZW5hcmlvcy4gSWYKLXRoZXNlIGFmZmVjdCB5b3UsIHlvdSBjYW4gdXNlIGFuIGFsdGVybmF0aXZlIHNlcmlhbGl6YXRpb24gc2NoZW1lIGJ5IG92ZXJyaWRpbmcKLXRoZSA6bWV0aDpgbWFrZVBpY2tsZWAgbWV0aG9kIGFuZCBpbXBsZW1lbnRpbmcgeW91ciBhbHRlcm5hdGl2ZSB0aGVyZSwgYXMKLXdlbGwgYXMgYWRhcHRpbmcgdGhlIGFib3ZlIHNjcmlwdCB0byB1c2UgeW91ciBhbHRlcm5hdGl2ZSBzZXJpYWxpemF0aW9uLgotCi0uLiBfYXJiaXRyYXJ5LW9iamVjdC1tZXNzYWdlczoKLQotVXNpbmcgYXJiaXRyYXJ5IG9iamVjdHMgYXMgbWVzc2FnZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUluIHRoZSBwcmVjZWRpbmcgc2VjdGlvbnMgYW5kIGV4YW1wbGVzLCBpdCBoYXMgYmVlbiBhc3N1bWVkIHRoYXQgdGhlIG1lc3NhZ2UKLXBhc3NlZCB3aGVuIGxvZ2dpbmcgdGhlIGV2ZW50IGlzIGEgc3RyaW5nLiBIb3dldmVyLCB0aGlzIGlzIG5vdCB0aGUgb25seQotcG9zc2liaWxpdHkuIFlvdSBjYW4gcGFzcyBhbiBhcmJpdHJhcnkgb2JqZWN0IGFzIGEgbWVzc2FnZSwgYW5kIGl0cwotOm1ldGg6YF9fc3RyX19gIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBsb2dnaW5nIHN5c3RlbSBuZWVkcyB0byBjb252ZXJ0Ci1pdCB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi4gSW4gZmFjdCwgaWYgeW91IHdhbnQgdG8sIHlvdSBjYW4gYXZvaWQKLWNvbXB1dGluZyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBhbHRvZ2V0aGVyIC0gZm9yIGV4YW1wbGUsIHRoZQotOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBlbWl0cyBhbiBldmVudCBieSBwaWNrbGluZyBpdCBhbmQgc2VuZGluZyBpdCBvdmVyIHRoZQotd2lyZS4KLQotT3B0aW1pemF0aW9uCi0tLS0tLS0tLS0tLS0KLQotRm9ybWF0dGluZyBvZiBtZXNzYWdlIGFyZ3VtZW50cyBpcyBkZWZlcnJlZCB1bnRpbCBpdCBjYW5ub3QgYmUgYXZvaWRlZC4KLUhvd2V2ZXIsIGNvbXB1dGluZyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgbG9nZ2luZyBtZXRob2QgY2FuIGFsc28gYmUKLWV4cGVuc2l2ZSwgYW5kIHlvdSBtYXkgd2FudCB0byBhdm9pZCBkb2luZyBpdCBpZiB0aGUgbG9nZ2VyIHdpbGwganVzdCB0aHJvdwotYXdheSB5b3VyIGV2ZW50LiBUbyBkZWNpZGUgd2hhdCB0byBkbywgeW91IGNhbiBjYWxsIHRoZSA6bWV0aDpgaXNFbmFibGVkRm9yYAotbWV0aG9kIHdoaWNoIHRha2VzIGEgbGV2ZWwgYXJndW1lbnQgYW5kIHJldHVybnMgdHJ1ZSBpZiB0aGUgZXZlbnQgd291bGQgYmUKLWNyZWF0ZWQgYnkgdGhlIExvZ2dlciBmb3IgdGhhdCBsZXZlbCBvZiBjYWxsLiBZb3UgY2FuIHdyaXRlIGNvZGUgbGlrZSB0aGlzOjoKLQotICAgIGlmIGxvZ2dlci5pc0VuYWJsZWRGb3IobG9nZ2luZy5ERUJVRyk6Ci0gICAgICAgIGxvZ2dlci5kZWJ1ZygiTWVzc2FnZSB3aXRoICVzLCAlcyIsIGV4cGVuc2l2ZV9mdW5jMSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlbnNpdmVfZnVuYzIoKSkKLQotc28gdGhhdCBpZiB0aGUgbG9nZ2VyJ3MgdGhyZXNob2xkIGlzIHNldCBhYm92ZSBgYERFQlVHYGAsIHRoZSBjYWxscyB0bwotOmZ1bmM6YGV4cGVuc2l2ZV9mdW5jMWAgYW5kIDpmdW5jOmBleHBlbnNpdmVfZnVuYzJgIGFyZSBuZXZlciBtYWRlLgotCi1UaGVyZSBhcmUgb3RoZXIgb3B0aW1pemF0aW9ucyB3aGljaCBjYW4gYmUgbWFkZSBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zIHdoaWNoCi1uZWVkIG1vcmUgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hhdCBsb2dnaW5nIGluZm9ybWF0aW9uIGlzIGNvbGxlY3RlZC4gSGVyZSdzIGEKLWxpc3Qgb2YgdGhpbmdzIHlvdSBjYW4gZG8gdG8gYXZvaWQgcHJvY2Vzc2luZyBkdXJpbmcgbG9nZ2luZyB3aGljaCB5b3UgZG9uJ3QKLW5lZWQ6Ci0KLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBXaGF0IHlvdSBkb24ndCB3YW50IHRvIGNvbGxlY3QgICAgICAgICAgICAgICAgfCBIb3cgdG8gYXZvaWQgY29sbGVjdGluZyBpdCAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgSW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgY2FsbHMgd2VyZSBtYWRlIGZyb20uIHwgU2V0IGBgbG9nZ2luZy5fc3JjZmlsZWBgIHRvIGBgTm9uZWBgLiAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFRocmVhZGluZyBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICB8IFNldCBgYGxvZ2dpbmcubG9nVGhyZWFkc2BgIHRvIGBgMGBgLiAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBQcm9jZXNzIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTZXQgYGBsb2dnaW5nLmxvZ1Byb2Nlc3Nlc2BgIHRvIGBgMGBgLiB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi1BbHNvIG5vdGUgdGhhdCB0aGUgY29yZSBsb2dnaW5nIG1vZHVsZSBvbmx5IGluY2x1ZGVzIHRoZSBiYXNpYyBoYW5kbGVycy4gSWYKLXlvdSBkb24ndCBpbXBvcnQgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgYW5kIDptb2Q6YGxvZ2dpbmcuY29uZmlnYCwgdGhleSB3b24ndAotdGFrZSB1cCBhbnkgbWVtb3J5LgogCiAuLiBfaGFuZGxlcjoKIApAQCAtMTc0OSw2NDMgKzM3OSw3IEBACiAgICBpcyBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGFuZCBzbyByYWlzZXMgYQogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCiAKLQotLi4gX3N0cmVhbS1oYW5kbGVyOgotCi1TdHJlYW1IYW5kbGVyCi1eXl5eXl5eXl5eXl5eCi0KLVRoZSA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSBjb3JlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UsCi1zZW5kcyBsb2dnaW5nIG91dHB1dCB0byBzdHJlYW1zIHN1Y2ggYXMgKnN5cy5zdGRvdXQqLCAqc3lzLnN0ZGVyciogb3IgYW55Ci1maWxlLWxpa2Ugb2JqZWN0IChvciwgbW9yZSBwcmVjaXNlbHksIGFueSBvYmplY3Qgd2hpY2ggc3VwcG9ydHMgOm1ldGg6YHdyaXRlYAotYW5kIDptZXRoOmBmbHVzaGAgbWV0aG9kcykuCi0KLQotLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcKLQotLi4gY2xhc3M6OiBTdHJlYW1IYW5kbGVyKHN0cmVhbT1Ob25lKQotCi0gICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFN0cmVhbUhhbmRsZXJgIGNsYXNzLiBJZiAqc3RyZWFtKiBpcwotICAgc3BlY2lmaWVkLCB0aGUgaW5zdGFuY2Ugd2lsbCB1c2UgaXQgZm9yIGxvZ2dpbmcgb3V0cHV0OyBvdGhlcndpc2UsICpzeXMuc3RkZXJyKgotICAgd2lsbCBiZSB1c2VkLgotCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBJZiBhIGZvcm1hdHRlciBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgdG8gZm9ybWF0IHRoZSByZWNvcmQuIFRoZSByZWNvcmQKLSAgICAgIGlzIHRoZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLiBJZiBleGNlcHRpb24KLSAgICAgIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIGl0IGlzIGZvcm1hdHRlZCB1c2luZwotICAgICAgOmZ1bmM6YHRyYWNlYmFjay5wcmludF9leGNlcHRpb25gIGFuZCBhcHBlbmRlZCB0byB0aGUgc3RyZWFtLgotCi0KLSAgIC4uIG1ldGhvZDo6IGZsdXNoKCkKLQotICAgICAgRmx1c2hlcyB0aGUgc3RyZWFtIGJ5IGNhbGxpbmcgaXRzIDptZXRoOmBmbHVzaGAgbWV0aG9kLiBOb3RlIHRoYXQgdGhlCi0gICAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBpbmhlcml0ZWQgZnJvbSA6Y2xhc3M6YEhhbmRsZXJgIGFuZCBzbyBkb2VzCi0gICAgICBubyBvdXRwdXQsIHNvIGFuIGV4cGxpY2l0IDptZXRoOmBmbHVzaGAgY2FsbCBtYXkgYmUgbmVlZGVkIGF0IHRpbWVzLgotCi0KLS4uIF9maWxlLWhhbmRsZXI6Ci0KLUZpbGVIYW5kbGVyCi1eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBGaWxlSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIGNvcmUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZSwKLXNlbmRzIGxvZ2dpbmcgb3V0cHV0IHRvIGEgZGlzayBmaWxlLiAgSXQgaW5oZXJpdHMgdGhlIG91dHB1dCBmdW5jdGlvbmFsaXR5IGZyb20KLTpjbGFzczpgU3RyZWFtSGFuZGxlcmAuCi0KLQotLi4gY2xhc3M6OiBGaWxlSGFuZGxlcihmaWxlbmFtZSwgbW9kZT0nYScsIGVuY29kaW5nPU5vbmUsIGRlbGF5PTApCi0KLSAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRmlsZUhhbmRsZXJgIGNsYXNzLiBUaGUgc3BlY2lmaWVkIGZpbGUgaXMKLSAgIG9wZW5lZCBhbmQgdXNlZCBhcyB0aGUgc3RyZWFtIGZvciBsb2dnaW5nLiBJZiAqbW9kZSogaXMgbm90IHNwZWNpZmllZCwKLSAgIDpjb25zdDpgJ2EnYCBpcyB1c2VkLiAgSWYgKmVuY29kaW5nKiBpcyBub3QgKk5vbmUqLCBpdCBpcyB1c2VkIHRvIG9wZW4gdGhlIGZpbGUKLSAgIHdpdGggdGhhdCBlbmNvZGluZy4gIElmICpkZWxheSogaXMgdHJ1ZSwgdGhlbiBmaWxlIG9wZW5pbmcgaXMgZGVmZXJyZWQgdW50aWwgdGhlCi0gICBmaXJzdCBjYWxsIHRvIDptZXRoOmBlbWl0YC4gQnkgZGVmYXVsdCwgdGhlIGZpbGUgZ3Jvd3MgaW5kZWZpbml0ZWx5LgotCi0KLSAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKLQotICAgICAgQ2xvc2VzIHRoZSBmaWxlLgotCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBPdXRwdXRzIHRoZSByZWNvcmQgdG8gdGhlIGZpbGUuCi0KLQotLi4gX251bGwtaGFuZGxlcjoKLQotTnVsbEhhbmRsZXIKLV5eXl5eXl5eXl5eCi0KLS4uIHZlcnNpb25hZGRlZDo6IDMuMQotCi1UaGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIGNvcmUgOm1vZDpgbG9nZ2luZ2AgcGFja2FnZSwKLWRvZXMgbm90IGRvIGFueSBmb3JtYXR0aW5nIG9yIG91dHB1dC4gSXQgaXMgZXNzZW50aWFsbHkgYSAibm8tb3AiIGhhbmRsZXIKLWZvciB1c2UgYnkgbGlicmFyeSBkZXZlbG9wZXJzLgotCi0uLiBjbGFzczo6IE51bGxIYW5kbGVyKCkKLQotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBOdWxsSGFuZGxlcmAgY2xhc3MuCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuCi0KLVNlZSA6cmVmOmBsaWJyYXJ5LWNvbmZpZ2AgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIHVzZQotOmNsYXNzOmBOdWxsSGFuZGxlcmAuCi0KLS4uIF93YXRjaGVkLWZpbGUtaGFuZGxlcjoKLQotV2F0Y2hlZEZpbGVIYW5kbGVyCi1eXl5eXl5eXl5eXl5eXl5eXl4KLQotLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcuaGFuZGxlcnMKLQotVGhlIDpjbGFzczpgV2F0Y2hlZEZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKLW1vZHVsZSwgaXMgYSA6Y2xhc3M6YEZpbGVIYW5kbGVyYCB3aGljaCB3YXRjaGVzIHRoZSBmaWxlIGl0IGlzIGxvZ2dpbmcgdG8uIElmCi10aGUgZmlsZSBjaGFuZ2VzLCBpdCBpcyBjbG9zZWQgYW5kIHJlb3BlbmVkIHVzaW5nIHRoZSBmaWxlIG5hbWUuCi0KLUEgZmlsZSBjaGFuZ2UgY2FuIGhhcHBlbiBiZWNhdXNlIG9mIHVzYWdlIG9mIHByb2dyYW1zIHN1Y2ggYXMgKm5ld3N5c2xvZyogYW5kCi0qbG9ncm90YXRlKiB3aGljaCBwZXJmb3JtIGxvZyBmaWxlIHJvdGF0aW9uLiBUaGlzIGhhbmRsZXIsIGludGVuZGVkIGZvciB1c2UKLXVuZGVyIFVuaXgvTGludXgsIHdhdGNoZXMgdGhlIGZpbGUgdG8gc2VlIGlmIGl0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGVtaXQuCi0oQSBmaWxlIGlzIGRlZW1lZCB0byBoYXZlIGNoYW5nZWQgaWYgaXRzIGRldmljZSBvciBpbm9kZSBoYXZlIGNoYW5nZWQuKSBJZiB0aGUKLWZpbGUgaGFzIGNoYW5nZWQsIHRoZSBvbGQgZmlsZSBzdHJlYW0gaXMgY2xvc2VkLCBhbmQgdGhlIGZpbGUgb3BlbmVkIHRvIGdldCBhCi1uZXcgc3RyZWFtLgotCi1UaGlzIGhhbmRsZXIgaXMgbm90IGFwcHJvcHJpYXRlIGZvciB1c2UgdW5kZXIgV2luZG93cywgYmVjYXVzZSB1bmRlciBXaW5kb3dzCi1vcGVuIGxvZyBmaWxlcyBjYW5ub3QgYmUgbW92ZWQgb3IgcmVuYW1lZCAtIGxvZ2dpbmcgb3BlbnMgdGhlIGZpbGVzIHdpdGgKLWV4Y2x1c2l2ZSBsb2NrcyAtIGFuZCBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciBzdWNoIGEgaGFuZGxlci4gRnVydGhlcm1vcmUsCi0qU1RfSU5PKiBpcyBub3Qgc3VwcG9ydGVkIHVuZGVyIFdpbmRvd3M7IDpmdW5jOmBzdGF0YCBhbHdheXMgcmV0dXJucyB6ZXJvIGZvcgotdGhpcyB2YWx1ZS4KLQotCi0uLiBjbGFzczo6IFdhdGNoZWRGaWxlSGFuZGxlcihmaWxlbmFtZVssbW9kZVssIGVuY29kaW5nWywgZGVsYXldXV0pCi0KLSAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgV2F0Y2hlZEZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlIHNwZWNpZmllZAotICAgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gSWYgKm1vZGUqIGlzIG5vdCBzcGVjaWZpZWQsCi0gICA6Y29uc3Q6YCdhJ2AgaXMgdXNlZC4gIElmICplbmNvZGluZyogaXMgbm90ICpOb25lKiwgaXQgaXMgdXNlZCB0byBvcGVuIHRoZSBmaWxlCi0gICB3aXRoIHRoYXQgZW5jb2RpbmcuICBJZiAqZGVsYXkqIGlzIHRydWUsIHRoZW4gZmlsZSBvcGVuaW5nIGlzIGRlZmVycmVkIHVudGlsIHRoZQotICAgZmlyc3QgY2FsbCB0byA6bWV0aDpgZW1pdGAuICBCeSBkZWZhdWx0LCB0aGUgZmlsZSBncm93cyBpbmRlZmluaXRlbHkuCi0KLQotICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCi0KLSAgICAgIE91dHB1dHMgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgYnV0IGZpcnN0IGNoZWNrcyB0byBzZWUgaWYgdGhlIGZpbGUgaGFzCi0gICAgICBjaGFuZ2VkLiAgSWYgaXQgaGFzLCB0aGUgZXhpc3Rpbmcgc3RyZWFtIGlzIGZsdXNoZWQgYW5kIGNsb3NlZCBhbmQgdGhlCi0gICAgICBmaWxlIG9wZW5lZCBhZ2FpbiwgYmVmb3JlIG91dHB1dHRpbmcgdGhlIHJlY29yZCB0byB0aGUgZmlsZS4KLQotLi4gX3JvdGF0aW5nLWZpbGUtaGFuZGxlcjoKLQotUm90YXRpbmdGaWxlSGFuZGxlcgotXl5eXl5eXl5eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AKLW1vZHVsZSwgc3VwcG9ydHMgcm90YXRpb24gb2YgZGlzayBsb2cgZmlsZXMuCi0KLQotLi4gY2xhc3M6OiBSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCBtb2RlPSdhJywgbWF4Qnl0ZXM9MCwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9MCkKLQotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlIHNwZWNpZmllZAotICAgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gSWYgKm1vZGUqIGlzIG5vdCBzcGVjaWZpZWQsCi0gICBgYCdhJ2BgIGlzIHVzZWQuICBJZiAqZW5jb2RpbmcqIGlzIG5vdCAqTm9uZSosIGl0IGlzIHVzZWQgdG8gb3BlbiB0aGUgZmlsZQotICAgd2l0aCB0aGF0IGVuY29kaW5nLiAgSWYgKmRlbGF5KiBpcyB0cnVlLCB0aGVuIGZpbGUgb3BlbmluZyBpcyBkZWZlcnJlZCB1bnRpbCB0aGUKLSAgIGZpcnN0IGNhbGwgdG8gOm1ldGg6YGVtaXRgLiAgQnkgZGVmYXVsdCwgdGhlIGZpbGUgZ3Jvd3MgaW5kZWZpbml0ZWx5LgotCi0gICBZb3UgY2FuIHVzZSB0aGUgKm1heEJ5dGVzKiBhbmQgKmJhY2t1cENvdW50KiB2YWx1ZXMgdG8gYWxsb3cgdGhlIGZpbGUgdG8KLSAgIDpkZm46YHJvbGxvdmVyYCBhdCBhIHByZWRldGVybWluZWQgc2l6ZS4gV2hlbiB0aGUgc2l6ZSBpcyBhYm91dCB0byBiZSBleGNlZWRlZCwKLSAgIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBzaWxlbnRseSBvcGVuZWQgZm9yIG91dHB1dC4gUm9sbG92ZXIgb2NjdXJzCi0gICB3aGVuZXZlciB0aGUgY3VycmVudCBsb2cgZmlsZSBpcyBuZWFybHkgKm1heEJ5dGVzKiBpbiBsZW5ndGg7IGlmICptYXhCeXRlcyogaXMKLSAgIHplcm8sIHJvbGxvdmVyIG5ldmVyIG9jY3Vycy4gIElmICpiYWNrdXBDb3VudCogaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlCi0gICBvbGQgbG9nIGZpbGVzIGJ5IGFwcGVuZGluZyB0aGUgZXh0ZW5zaW9ucyAiLjEiLCAiLjIiIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yCi0gICBleGFtcGxlLCB3aXRoIGEgKmJhY2t1cENvdW50KiBvZiA1IGFuZCBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91Ci0gICB3b3VsZCBnZXQgOmZpbGU6YGFwcC5sb2dgLCA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvCi0gICA6ZmlsZTpgYXBwLmxvZy41YC4gVGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbgotICAgdGhpcyBmaWxlIGlzIGZpbGxlZCwgaXQgaXMgY2xvc2VkIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMKLSAgIDpmaWxlOmBhcHAubG9nLjFgLCA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0bwotICAgOmZpbGU6YGFwcC5sb2cuMmAsIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KLQotCi0gICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKLQotICAgICAgRG9lcyBhIHJvbGxvdmVyLCBhcyBkZXNjcmliZWQgYWJvdmUuCi0KLQotICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCi0KLSAgICAgIE91dHB1dHMgdGhlIHJlY29yZCB0byB0aGUgZmlsZSwgY2F0ZXJpbmcgZm9yIHJvbGxvdmVyIGFzIGRlc2NyaWJlZAotICAgICAgcHJldmlvdXNseS4KLQotLi4gX3RpbWVkLXJvdGF0aW5nLWZpbGUtaGFuZGxlcjoKLQotVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KLQotVGhlIDpjbGFzczpgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUKLTptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSwgc3VwcG9ydHMgcm90YXRpb24gb2YgZGlzayBsb2cgZmlsZXMgYXQgY2VydGFpbgotdGltZWQgaW50ZXJ2YWxzLgotCi0KLS4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9MCwgdXRjPUZhbHNlKQotCi0gICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgY2xhc3MuIFRoZQotICAgc3BlY2lmaWVkIGZpbGUgaXMgb3BlbmVkIGFuZCB1c2VkIGFzIHRoZSBzdHJlYW0gZm9yIGxvZ2dpbmcuIE9uIHJvdGF0aW5nIGl0IGFsc28KLSAgIHNldHMgdGhlIGZpbGVuYW1lIHN1ZmZpeC4gUm90YXRpbmcgaGFwcGVucyBiYXNlZCBvbiB0aGUgcHJvZHVjdCBvZiAqd2hlbiogYW5kCi0gICAqaW50ZXJ2YWwqLgotCi0gICBZb3UgY2FuIHVzZSB0aGUgKndoZW4qIHRvIHNwZWNpZnkgdGhlIHR5cGUgb2YgKmludGVydmFsKi4gVGhlIGxpc3Qgb2YgcG9zc2libGUKLSAgIHZhbHVlcyBpcyBiZWxvdy4gIE5vdGUgdGhhdCB0aGV5IGFyZSBub3QgY2FzZSBzZW5zaXRpdmUuCi0KLSAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBWYWx1ZSAgICAgICAgICB8IFR5cGUgb2YgaW50ZXJ2YWwgICAgICB8Ci0gICArPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PSsKLSAgIHwgYGAnUydgYCAgICAgICAgfCBTZWNvbmRzICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IGBgJ00nYGAgICAgICAgIHwgTWludXRlcyAgICAgICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYCdIJ2BgICAgICAgICB8IEhvdXJzICAgICAgICAgICAgICAgICB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgYGAnRCdgYCAgICAgICAgfCBEYXlzICAgICAgICAgICAgICAgICAgfAotICAgKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IGBgJ1cnYGAgICAgICAgIHwgV2VlayBkYXkgKDA9TW9uZGF5KSAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotICAgfCBgYCdtaWRuaWdodCdgYCB8IFJvbGwgb3ZlciBhdCBtaWRuaWdodCB8Ci0gICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLQotICAgVGhlIHN5c3RlbSB3aWxsIHNhdmUgb2xkIGxvZyBmaWxlcyBieSBhcHBlbmRpbmcgZXh0ZW5zaW9ucyB0byB0aGUgZmlsZW5hbWUuCi0gICBUaGUgZXh0ZW5zaW9ucyBhcmUgZGF0ZS1hbmQtdGltZSBiYXNlZCwgdXNpbmcgdGhlIHN0cmZ0aW1lIGZvcm1hdAotICAgYGAlWS0lbS0lZF8lSC0lTS0lU2BgIG9yIGEgbGVhZGluZyBwb3J0aW9uIHRoZXJlb2YsIGRlcGVuZGluZyBvbiB0aGUKLSAgIHJvbGxvdmVyIGludGVydmFsLgotCi0gICBXaGVuIGNvbXB1dGluZyB0aGUgbmV4dCByb2xsb3ZlciB0aW1lIGZvciB0aGUgZmlyc3QgdGltZSAod2hlbiB0aGUgaGFuZGxlcgotICAgaXMgY3JlYXRlZCksIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGFuIGV4aXN0aW5nIGxvZyBmaWxlLCBvciBlbHNlCi0gICB0aGUgY3VycmVudCB0aW1lLCBpcyB1c2VkIHRvIGNvbXB1dGUgd2hlbiB0aGUgbmV4dCByb3RhdGlvbiB3aWxsIG9jY3VyLgotCi0gICBJZiB0aGUgKnV0YyogYXJndW1lbnQgaXMgdHJ1ZSwgdGltZXMgaW4gVVRDIHdpbGwgYmUgdXNlZDsgb3RoZXJ3aXNlCi0gICBsb2NhbCB0aW1lIGlzIHVzZWQuCi0KLSAgIElmICpiYWNrdXBDb3VudCogaXMgbm9uemVybywgYXQgbW9zdCAqYmFja3VwQ291bnQqIGZpbGVzCi0gICB3aWxsIGJlIGtlcHQsIGFuZCBpZiBtb3JlIHdvdWxkIGJlIGNyZWF0ZWQgd2hlbiByb2xsb3ZlciBvY2N1cnMsIHRoZSBvbGRlc3QKLSAgIG9uZSBpcyBkZWxldGVkLiBUaGUgZGVsZXRpb24gbG9naWMgdXNlcyB0aGUgaW50ZXJ2YWwgdG8gZGV0ZXJtaW5lIHdoaWNoCi0gICBmaWxlcyB0byBkZWxldGUsIHNvIGNoYW5naW5nIHRoZSBpbnRlcnZhbCBtYXkgbGVhdmUgb2xkIGZpbGVzIGx5aW5nIGFyb3VuZC4KLQotICAgSWYgKmRlbGF5KiBpcyB0cnVlLCB0aGVuIGZpbGUgb3BlbmluZyBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgZmlyc3QgY2FsbCB0bwotICAgOm1ldGg6YGVtaXRgLgotCi0KLSAgIC4uIG1ldGhvZDo6IGRvUm9sbG92ZXIoKQotCi0gICAgICBEb2VzIGEgcm9sbG92ZXIsIGFzIGRlc2NyaWJlZCBhYm92ZS4KLQotCi0gICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKLQotICAgICAgT3V0cHV0cyB0aGUgcmVjb3JkIHRvIHRoZSBmaWxlLCBjYXRlcmluZyBmb3Igcm9sbG92ZXIgYXMgZGVzY3JpYmVkIGFib3ZlLgotCi0KLS4uIF9zb2NrZXQtaGFuZGxlcjoKLQotU29ja2V0SGFuZGxlcgotXl5eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBTb2NrZXRIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgbW9kdWxlLAotc2VuZHMgbG9nZ2luZyBvdXRwdXQgdG8gYSBuZXR3b3JrIHNvY2tldC4gVGhlIGJhc2UgY2xhc3MgdXNlcyBhIFRDUCBzb2NrZXQuCi0KLQotLi4gY2xhc3M6OiBTb2NrZXRIYW5kbGVyKGhvc3QsIHBvcnQpCi0KLSAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgY2xhc3MgaW50ZW5kZWQgdG8KLSAgIGNvbW11bmljYXRlIHdpdGggYSByZW1vdGUgbWFjaGluZSB3aG9zZSBhZGRyZXNzIGlzIGdpdmVuIGJ5ICpob3N0KiBhbmQgKnBvcnQqLgotCi0KLSAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKLQotICAgICAgQ2xvc2VzIHRoZSBzb2NrZXQuCi0KLQotICAgLi4gbWV0aG9kOjogZW1pdCgpCi0KLSAgICAgIFBpY2tsZXMgdGhlIHJlY29yZCdzIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNvY2tldCBpbgotICAgICAgYmluYXJ5IGZvcm1hdC4gSWYgdGhlcmUgaXMgYW4gZXJyb3Igd2l0aCB0aGUgc29ja2V0LCBzaWxlbnRseSBkcm9wcyB0aGUKLSAgICAgIHBhY2tldC4gSWYgdGhlIGNvbm5lY3Rpb24gd2FzIHByZXZpb3VzbHkgbG9zdCwgcmUtZXN0YWJsaXNoZXMgdGhlCi0gICAgICBjb25uZWN0aW9uLiBUbyB1bnBpY2tsZSB0aGUgcmVjb3JkIGF0IHRoZSByZWNlaXZpbmcgZW5kIGludG8gYQotICAgICAgOmNsYXNzOmBMb2dSZWNvcmRgLCB1c2UgdGhlIDpmdW5jOmBtYWtlTG9nUmVjb3JkYCBmdW5jdGlvbi4KLQotCi0gICAuLiBtZXRob2Q6OiBoYW5kbGVFcnJvcigpCi0KLSAgICAgIEhhbmRsZXMgYW4gZXJyb3Igd2hpY2ggaGFzIG9jY3VycmVkIGR1cmluZyA6bWV0aDpgZW1pdGAuIFRoZSBtb3N0IGxpa2VseQotICAgICAgY2F1c2UgaXMgYSBsb3N0IGNvbm5lY3Rpb24uIENsb3NlcyB0aGUgc29ja2V0IHNvIHRoYXQgd2UgY2FuIHJldHJ5IG9uIHRoZQotICAgICAgbmV4dCBldmVudC4KLQotCi0gICAuLiBtZXRob2Q6OiBtYWtlU29ja2V0KCkKLQotICAgICAgVGhpcyBpcyBhIGZhY3RvcnkgbWV0aG9kIHdoaWNoIGFsbG93cyBzdWJjbGFzc2VzIHRvIGRlZmluZSB0aGUgcHJlY2lzZQotICAgICAgdHlwZSBvZiBzb2NrZXQgdGhleSB3YW50LiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjcmVhdGVzIGEgVENQIHNvY2tldAotICAgICAgKDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCkuCi0KLQotICAgLi4gbWV0aG9kOjogbWFrZVBpY2tsZShyZWNvcmQpCi0KLSAgICAgIFBpY2tsZXMgdGhlIHJlY29yZCdzIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IGluIGJpbmFyeSBmb3JtYXQgd2l0aCBhIGxlbmd0aAotICAgICAgcHJlZml4LCBhbmQgcmV0dXJucyBpdCByZWFkeSBmb3IgdHJhbnNtaXNzaW9uIGFjcm9zcyB0aGUgc29ja2V0LgotCi0gICAgICBOb3RlIHRoYXQgcGlja2xlcyBhcmVuJ3QgY29tcGxldGVseSBzZWN1cmUuIElmIHlvdSBhcmUgY29uY2VybmVkIGFib3V0Ci0gICAgICBzZWN1cml0eSwgeW91IG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGltcGxlbWVudCBhIG1vcmUgc2VjdXJlCi0gICAgICBtZWNoYW5pc20uIEZvciBleGFtcGxlLCB5b3UgY2FuIHNpZ24gcGlja2xlcyB1c2luZyBITUFDIGFuZCB0aGVuIHZlcmlmeQotICAgICAgdGhlbSBvbiB0aGUgcmVjZWl2aW5nIGVuZCwgb3IgYWx0ZXJuYXRpdmVseSB5b3UgY2FuIGRpc2FibGUgdW5waWNrbGluZyBvZgotICAgICAgZ2xvYmFsIG9iamVjdHMgb24gdGhlIHJlY2VpdmluZyBlbmQuCi0KLSAgIC4uIG1ldGhvZDo6IHNlbmQocGFja2V0KQotCi0gICAgICBTZW5kIGEgcGlja2xlZCBzdHJpbmcgKnBhY2tldCogdG8gdGhlIHNvY2tldC4gVGhpcyBmdW5jdGlvbiBhbGxvd3MgZm9yCi0gICAgICBwYXJ0aWFsIHNlbmRzIHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB0aGUgbmV0d29yayBpcyBidXN5LgotCi0KLS4uIF9kYXRhZ3JhbS1oYW5kbGVyOgotCi1EYXRhZ3JhbUhhbmRsZXIKLV5eXl5eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBEYXRhZ3JhbUhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAotbW9kdWxlLCBpbmhlcml0cyBmcm9tIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgdG8gc3VwcG9ydCBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMKLW92ZXIgVURQIHNvY2tldHMuCi0KLQotLi4gY2xhc3M6OiBEYXRhZ3JhbUhhbmRsZXIoaG9zdCwgcG9ydCkKLQotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBEYXRhZ3JhbUhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCi0gICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KLQotCi0gICAuLiBtZXRob2Q6OiBlbWl0KCkKLQotICAgICAgUGlja2xlcyB0aGUgcmVjb3JkJ3MgYXR0cmlidXRlIGRpY3Rpb25hcnkgYW5kIHdyaXRlcyBpdCB0byB0aGUgc29ja2V0IGluCi0gICAgICBiaW5hcnkgZm9ybWF0LiBJZiB0aGVyZSBpcyBhbiBlcnJvciB3aXRoIHRoZSBzb2NrZXQsIHNpbGVudGx5IGRyb3BzIHRoZQotICAgICAgcGFja2V0LiBUbyB1bnBpY2tsZSB0aGUgcmVjb3JkIGF0IHRoZSByZWNlaXZpbmcgZW5kIGludG8gYQotICAgICAgOmNsYXNzOmBMb2dSZWNvcmRgLCB1c2UgdGhlIDpmdW5jOmBtYWtlTG9nUmVjb3JkYCBmdW5jdGlvbi4KLQotCi0gICAuLiBtZXRob2Q6OiBtYWtlU29ja2V0KCkKLQotICAgICAgVGhlIGZhY3RvcnkgbWV0aG9kIG9mIDpjbGFzczpgU29ja2V0SGFuZGxlcmAgaXMgaGVyZSBvdmVycmlkZGVuIHRvIGNyZWF0ZQotICAgICAgYSBVRFAgc29ja2V0ICg6Y29uc3Q6YHNvY2tldC5TT0NLX0RHUkFNYCkuCi0KLQotICAgLi4gbWV0aG9kOjogc2VuZChzKQotCi0gICAgICBTZW5kIGEgcGlja2xlZCBzdHJpbmcgdG8gYSBzb2NrZXQuCi0KLQotLi4gX3N5c2xvZy1oYW5kbGVyOgotCi1TeXNMb2dIYW5kbGVyCi1eXl5eXl5eXl5eXl5eCi0KLVRoZSA6Y2xhc3M6YFN5c0xvZ0hhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYCBtb2R1bGUsCi1zdXBwb3J0cyBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMgdG8gYSByZW1vdGUgb3IgbG9jYWwgVW5peCBzeXNsb2cuCi0KLQotLi4gY2xhc3M6OiBTeXNMb2dIYW5kbGVyKGFkZHJlc3M9KCdsb2NhbGhvc3QnLCBTWVNMT0dfVURQX1BPUlQpLCBmYWNpbGl0eT1MT0dfVVNFUikKLQotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBTeXNMb2dIYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwotICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBVbml4IG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqYWRkcmVzcyogaW4KLSAgIHRoZSBmb3JtIG9mIGEgYGAoaG9zdCwgcG9ydClgYCB0dXBsZS4gIElmICphZGRyZXNzKiBpcyBub3Qgc3BlY2lmaWVkLAotICAgYGAoJ2xvY2FsaG9zdCcsIDUxNClgYCBpcyB1c2VkLiAgVGhlIGFkZHJlc3MgaXMgdXNlZCB0byBvcGVuIGEgVURQIHNvY2tldC4gIEFuCi0gICBhbHRlcm5hdGl2ZSB0byBwcm92aWRpbmcgYSBgYChob3N0LCBwb3J0KWBgIHR1cGxlIGlzIHByb3ZpZGluZyBhbiBhZGRyZXNzIGFzIGEKLSAgIHN0cmluZywgZm9yIGV4YW1wbGUgIi9kZXYvbG9nIi4gSW4gdGhpcyBjYXNlLCBhIFVuaXggZG9tYWluIHNvY2tldCBpcyB1c2VkIHRvCi0gICBzZW5kIHRoZSBtZXNzYWdlIHRvIHRoZSBzeXNsb2cuIElmICpmYWNpbGl0eSogaXMgbm90IHNwZWNpZmllZCwKLSAgIDpjb25zdDpgTE9HX1VTRVJgIGlzIHVzZWQuCi0KLQotICAgLi4gbWV0aG9kOjogY2xvc2UoKQotCi0gICAgICBDbG9zZXMgdGhlIHNvY2tldCB0byB0aGUgcmVtb3RlIGhvc3QuCi0KLQotICAgLi4gbWV0aG9kOjogZW1pdChyZWNvcmQpCi0KLSAgICAgIFRoZSByZWNvcmQgaXMgZm9ybWF0dGVkLCBhbmQgdGhlbiBzZW50IHRvIHRoZSBzeXNsb2cgc2VydmVyLiBJZiBleGNlcHRpb24KLSAgICAgIGluZm9ybWF0aW9uIGlzIHByZXNlbnQsIGl0IGlzICpub3QqIHNlbnQgdG8gdGhlIHNlcnZlci4KLQotCi0gICAuLiBtZXRob2Q6OiBlbmNvZGVQcmlvcml0eShmYWNpbGl0eSwgcHJpb3JpdHkpCi0KLSAgICAgIEVuY29kZXMgdGhlIGZhY2lsaXR5IGFuZCBwcmlvcml0eSBpbnRvIGFuIGludGVnZXIuIFlvdSBjYW4gcGFzcyBpbiBzdHJpbmdzCi0gICAgICBvciBpbnRlZ2VycyAtIGlmIHN0cmluZ3MgYXJlIHBhc3NlZCwgaW50ZXJuYWwgbWFwcGluZyBkaWN0aW9uYXJpZXMgYXJlCi0gICAgICB1c2VkIHRvIGNvbnZlcnQgdGhlbSB0byBpbnRlZ2Vycy4KLQotICAgICAgVGhlIHN5bWJvbGljIGBgTE9HX2BgIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiA6Y2xhc3M6YFN5c0xvZ0hhbmRsZXJgIGFuZAotICAgICAgbWlycm9yIHRoZSB2YWx1ZXMgZGVmaW5lZCBpbiB0aGUgYGBzeXMvc3lzbG9nLmhgYCBoZWFkZXIgZmlsZS4KLQotICAgICAgKipQcmlvcml0aWVzKioKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgTmFtZSAoc3RyaW5nKSAgICAgICAgICAgIHwgU3ltYm9saWMgdmFsdWV8Ci0gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KwotICAgICAgfCBgYGFsZXJ0YGAgICAgICAgICAgICAgICAgfCBMT0dfQUxFUlQgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgY3JpdGBgIG9yIGBgY3JpdGljYWxgYCB8IExPR19DUklUICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBkZWJ1Z2BgICAgICAgICAgICAgICAgIHwgTE9HX0RFQlVHICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGVtZXJnYGAgb3IgYGBwYW5pY2BgICAgfCBMT0dfRU1FUkcgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgZXJyYGAgb3IgYGBlcnJvcmBgICAgICB8IExPR19FUlIgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBpbmZvYGAgICAgICAgICAgICAgICAgIHwgTE9HX0lORk8gICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYG5vdGljZWBgICAgICAgICAgICAgICAgfCBMT0dfTk9USUNFICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgd2FybmBgIG9yIGBgd2FybmluZ2BgICB8IExPR19XQVJOSU5HICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLQotICAgICAgKipGYWNpbGl0aWVzKioKLQotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IE5hbWUgKHN0cmluZykgfCBTeW1ib2xpYyB2YWx1ZXwKLSAgICAgICs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09KwotICAgICAgfCBgYGF1dGhgYCAgICAgIHwgTE9HX0FVVEggICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBhdXRocHJpdmBgICB8IExPR19BVVRIUFJJViAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgY3JvbmBgICAgICAgfCBMT0dfQ1JPTiAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGRhZW1vbmBgICAgIHwgTE9HX0RBRU1PTiAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBmdHBgYCAgICAgICB8IExPR19GVFAgICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBga2VybmBgICAgICAgfCBMT0dfS0VSTiAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGxwcmBgICAgICAgIHwgTE9HX0xQUiAgICAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBtYWlsYGAgICAgICB8IExPR19NQUlMICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgbmV3c2BgICAgICAgfCBMT0dfTkVXUyAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYHN5c2xvZ2BgICAgIHwgTE9HX1NZU0xPRyAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGB1c2VyYGAgICAgICB8IExPR19VU0VSICAgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgdXVjcGBgICAgICAgfCBMT0dfVVVDUCAgICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGxvY2FsMGBgICAgIHwgTE9HX0xPQ0FMMCAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBsb2NhbDFgYCAgICB8IExPR19MT0NBTDEgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgbG9jYWwyYGAgICAgfCBMT0dfTE9DQUwyICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGxvY2FsM2BgICAgIHwgTE9HX0xPQ0FMMyAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBsb2NhbDRgYCAgICB8IExPR19MT0NBTDQgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0gICAgICB8IGBgbG9jYWw1YGAgICAgfCBMT0dfTE9DQUw1ICAgIHwKLSAgICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwotICAgICAgfCBgYGxvY2FsNmBgICAgIHwgTE9HX0xPQ0FMNiAgICB8Ci0gICAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgICAgIHwgYGBsb2NhbDdgYCAgICB8IExPR19MT0NBTDcgICAgfAotICAgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCi0KLSAgIC4uIG1ldGhvZDo6IG1hcFByaW9yaXR5KGxldmVsbmFtZSkKLQotICAgICAgTWFwcyBhIGxvZ2dpbmcgbGV2ZWwgbmFtZSB0byBhIHN5c2xvZyBwcmlvcml0eSBuYW1lLgotICAgICAgWW91IG1heSBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbGV2ZWxzLCBvcgotICAgICAgaWYgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIGlzIG5vdCBzdWl0YWJsZSBmb3IgeW91ciBuZWVkcy4gVGhlCi0gICAgICBkZWZhdWx0IGFsZ29yaXRobSBtYXBzIGBgREVCVUdgYCwgYGBJTkZPYGAsIGBgV0FSTklOR2BgLCBgYEVSUk9SYGAgYW5kCi0gICAgICBgYENSSVRJQ0FMYGAgdG8gdGhlIGVxdWl2YWxlbnQgc3lzbG9nIG5hbWVzLCBhbmQgYWxsIG90aGVyIGxldmVsCi0gICAgICBuYW1lcyB0byAid2FybmluZyIuCi0KLS4uIF9udC1ldmVudGxvZy1oYW5kbGVyOgotCi1OVEV2ZW50TG9nSGFuZGxlcgotXl5eXl5eXl5eXl5eXl5eXl4KLQotVGhlIDpjbGFzczpgTlRFdmVudExvZ0hhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAotbW9kdWxlLCBzdXBwb3J0cyBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMgdG8gYSBsb2NhbCBXaW5kb3dzIE5ULCBXaW5kb3dzIDIwMDAgb3IKLVdpbmRvd3MgWFAgZXZlbnQgbG9nLiBCZWZvcmUgeW91IGNhbiB1c2UgaXQsIHlvdSBuZWVkIE1hcmsgSGFtbW9uZCdzIFdpbjMyCi1leHRlbnNpb25zIGZvciBQeXRob24gaW5zdGFsbGVkLgotCi0KLS4uIGNsYXNzOjogTlRFdmVudExvZ0hhbmRsZXIoYXBwbmFtZSwgZGxsbmFtZT1Ob25lLCBsb2d0eXBlPSdBcHBsaWNhdGlvbicpCi0KLSAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgTlRFdmVudExvZ0hhbmRsZXJgIGNsYXNzLiBUaGUgKmFwcG5hbWUqIGlzCi0gICB1c2VkIHRvIGRlZmluZSB0aGUgYXBwbGljYXRpb24gbmFtZSBhcyBpdCBhcHBlYXJzIGluIHRoZSBldmVudCBsb2cuIEFuCi0gICBhcHByb3ByaWF0ZSByZWdpc3RyeSBlbnRyeSBpcyBjcmVhdGVkIHVzaW5nIHRoaXMgbmFtZS4gVGhlICpkbGxuYW1lKiBzaG91bGQgZ2l2ZQotICAgdGhlIGZ1bGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiBhIC5kbGwgb3IgLmV4ZSB3aGljaCBjb250YWlucyBtZXNzYWdlCi0gICBkZWZpbml0aW9ucyB0byBob2xkIGluIHRoZSBsb2cgKGlmIG5vdCBzcGVjaWZpZWQsIGBgJ3dpbjMyc2VydmljZS5weWQnYGAgaXMgdXNlZAotICAgLSB0aGlzIGlzIGluc3RhbGxlZCB3aXRoIHRoZSBXaW4zMiBleHRlbnNpb25zIGFuZCBjb250YWlucyBzb21lIGJhc2ljCi0gICBwbGFjZWhvbGRlciBtZXNzYWdlIGRlZmluaXRpb25zLiBOb3RlIHRoYXQgdXNlIG9mIHRoZXNlIHBsYWNlaG9sZGVycyB3aWxsIG1ha2UKLSAgIHlvdXIgZXZlbnQgbG9ncyBiaWcsIGFzIHRoZSBlbnRpcmUgbWVzc2FnZSBzb3VyY2UgaXMgaGVsZCBpbiB0aGUgbG9nLiBJZiB5b3UKLSAgIHdhbnQgc2xpbW1lciBsb2dzLCB5b3UgaGF2ZSB0byBwYXNzIGluIHRoZSBuYW1lIG9mIHlvdXIgb3duIC5kbGwgb3IgLmV4ZSB3aGljaAotICAgY29udGFpbnMgdGhlIG1lc3NhZ2UgZGVmaW5pdGlvbnMgeW91IHdhbnQgdG8gdXNlIGluIHRoZSBldmVudCBsb2cpLiBUaGUKLSAgICpsb2d0eXBlKiBpcyBvbmUgb2YgYGAnQXBwbGljYXRpb24nYGAsIGBgJ1N5c3RlbSdgYCBvciBgYCdTZWN1cml0eSdgYCwgYW5kCi0gICBkZWZhdWx0cyB0byBgYCdBcHBsaWNhdGlvbidgYC4KLQotCi0gICAuLiBtZXRob2Q6OiBjbG9zZSgpCi0KLSAgICAgIEF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gcmVtb3ZlIHRoZSBhcHBsaWNhdGlvbiBuYW1lIGZyb20gdGhlIHJlZ2lzdHJ5IGFzIGEKLSAgICAgIHNvdXJjZSBvZiBldmVudCBsb2cgZW50cmllcy4gSG93ZXZlciwgaWYgeW91IGRvIHRoaXMsIHlvdSB3aWxsIG5vdCBiZSBhYmxlCi0gICAgICB0byBzZWUgdGhlIGV2ZW50cyBhcyB5b3UgaW50ZW5kZWQgaW4gdGhlIEV2ZW50IExvZyBWaWV3ZXIgLSBpdCBuZWVkcyB0byBiZQotICAgICAgYWJsZSB0byBhY2Nlc3MgdGhlIHJlZ2lzdHJ5IHRvIGdldCB0aGUgLmRsbCBuYW1lLiBUaGUgY3VycmVudCB2ZXJzaW9uIGRvZXMKLSAgICAgIG5vdCBkbyB0aGlzLgotCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBEZXRlcm1pbmVzIHRoZSBtZXNzYWdlIElELCBldmVudCBjYXRlZ29yeSBhbmQgZXZlbnQgdHlwZSwgYW5kIHRoZW4gbG9ncwotICAgICAgdGhlIG1lc3NhZ2UgaW4gdGhlIE5UIGV2ZW50IGxvZy4KLQotCi0gICAuLiBtZXRob2Q6OiBnZXRFdmVudENhdGVnb3J5KHJlY29yZCkKLQotICAgICAgUmV0dXJucyB0aGUgZXZlbnQgY2F0ZWdvcnkgZm9yIHRoZSByZWNvcmQuIE92ZXJyaWRlIHRoaXMgaWYgeW91IHdhbnQgdG8KLSAgICAgIHNwZWNpZnkgeW91ciBvd24gY2F0ZWdvcmllcy4gVGhpcyB2ZXJzaW9uIHJldHVybnMgMC4KLQotCi0gICAuLiBtZXRob2Q6OiBnZXRFdmVudFR5cGUocmVjb3JkKQotCi0gICAgICBSZXR1cm5zIHRoZSBldmVudCB0eXBlIGZvciB0aGUgcmVjb3JkLiBPdmVycmlkZSB0aGlzIGlmIHlvdSB3YW50IHRvCi0gICAgICBzcGVjaWZ5IHlvdXIgb3duIHR5cGVzLiBUaGlzIHZlcnNpb24gZG9lcyBhIG1hcHBpbmcgdXNpbmcgdGhlIGhhbmRsZXIncwotICAgICAgdHlwZW1hcCBhdHRyaWJ1dGUsIHdoaWNoIGlzIHNldCB1cCBpbiA6bWV0aDpgX19pbml0X19gIHRvIGEgZGljdGlvbmFyeQotICAgICAgd2hpY2ggY29udGFpbnMgbWFwcGluZ3MgZm9yIDpjb25zdDpgREVCVUdgLCA6Y29uc3Q6YElORk9gLAotICAgICAgOmNvbnN0OmBXQVJOSU5HYCwgOmNvbnN0OmBFUlJPUmAgYW5kIDpjb25zdDpgQ1JJVElDQUxgLiBJZiB5b3UgYXJlIHVzaW5nCi0gICAgICB5b3VyIG93biBsZXZlbHMsIHlvdSB3aWxsIGVpdGhlciBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIG9yIHBsYWNlIGEKLSAgICAgIHN1aXRhYmxlIGRpY3Rpb25hcnkgaW4gdGhlIGhhbmRsZXIncyAqdHlwZW1hcCogYXR0cmlidXRlLgotCi0KLSAgIC4uIG1ldGhvZDo6IGdldE1lc3NhZ2VJRChyZWNvcmQpCi0KLSAgICAgIFJldHVybnMgdGhlIG1lc3NhZ2UgSUQgZm9yIHRoZSByZWNvcmQuIElmIHlvdSBhcmUgdXNpbmcgeW91ciBvd24gbWVzc2FnZXMsCi0gICAgICB5b3UgY291bGQgZG8gdGhpcyBieSBoYXZpbmcgdGhlICptc2cqIHBhc3NlZCB0byB0aGUgbG9nZ2VyIGJlaW5nIGFuIElECi0gICAgICByYXRoZXIgdGhhbiBhIGZvcm1hdCBzdHJpbmcuIFRoZW4sIGluIGhlcmUsIHlvdSBjb3VsZCB1c2UgYSBkaWN0aW9uYXJ5Ci0gICAgICBsb29rdXAgdG8gZ2V0IHRoZSBtZXNzYWdlIElELiBUaGlzIHZlcnNpb24gcmV0dXJucyAxLCB3aGljaCBpcyB0aGUgYmFzZQotICAgICAgbWVzc2FnZSBJRCBpbiA6ZmlsZTpgd2luMzJzZXJ2aWNlLnB5ZGAuCi0KLS4uIF9zbXRwLWhhbmRsZXI6Ci0KLVNNVFBIYW5kbGVyCi1eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBTTVRQSGFuZGxlcmAgY2xhc3MsIGxvY2F0ZWQgaW4gdGhlIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSwKLXN1cHBvcnRzIHNlbmRpbmcgbG9nZ2luZyBtZXNzYWdlcyB0byBhbiBlbWFpbCBhZGRyZXNzIHZpYSBTTVRQLgotCi0KLS4uIGNsYXNzOjogU01UUEhhbmRsZXIobWFpbGhvc3QsIGZyb21hZGRyLCB0b2FkZHJzLCBzdWJqZWN0LCBjcmVkZW50aWFscz1Ob25lKQotCi0gICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFNNVFBIYW5kbGVyYCBjbGFzcy4gVGhlIGluc3RhbmNlIGlzCi0gICBpbml0aWFsaXplZCB3aXRoIHRoZSBmcm9tIGFuZCB0byBhZGRyZXNzZXMgYW5kIHN1YmplY3QgbGluZSBvZiB0aGUgZW1haWwuIFRoZQotICAgKnRvYWRkcnMqIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3RyaW5ncy4gVG8gc3BlY2lmeSBhIG5vbi1zdGFuZGFyZCBTTVRQIHBvcnQsIHVzZQotICAgdGhlIChob3N0LCBwb3J0KSB0dXBsZSBmb3JtYXQgZm9yIHRoZSAqbWFpbGhvc3QqIGFyZ3VtZW50LiBJZiB5b3UgdXNlIGEgc3RyaW5nLAotICAgdGhlIHN0YW5kYXJkIFNNVFAgcG9ydCBpcyB1c2VkLiBJZiB5b3VyIFNNVFAgc2VydmVyIHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLCB5b3UKLSAgIGNhbiBzcGVjaWZ5IGEgKHVzZXJuYW1lLCBwYXNzd29yZCkgdHVwbGUgZm9yIHRoZSAqY3JlZGVudGlhbHMqIGFyZ3VtZW50LgotCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBGb3JtYXRzIHRoZSByZWNvcmQgYW5kIHNlbmRzIGl0IHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzc2Vlcy4KLQotCi0gICAuLiBtZXRob2Q6OiBnZXRTdWJqZWN0KHJlY29yZCkKLQotICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHN1YmplY3QgbGluZSB3aGljaCBpcyByZWNvcmQtZGVwZW5kZW50LCBvdmVycmlkZQotICAgICAgdGhpcyBtZXRob2QuCi0KLS4uIF9tZW1vcnktaGFuZGxlcjoKLQotTWVtb3J5SGFuZGxlcgotXl5eXl5eXl5eXl5eXgotCi1UaGUgOmNsYXNzOmBNZW1vcnlIYW5kbGVyYCBjbGFzcywgbG9jYXRlZCBpbiB0aGUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AgbW9kdWxlLAotc3VwcG9ydHMgYnVmZmVyaW5nIG9mIGxvZ2dpbmcgcmVjb3JkcyBpbiBtZW1vcnksIHBlcmlvZGljYWxseSBmbHVzaGluZyB0aGVtIHRvIGEKLTpkZm46YHRhcmdldGAgaGFuZGxlci4gRmx1c2hpbmcgb2NjdXJzIHdoZW5ldmVyIHRoZSBidWZmZXIgaXMgZnVsbCwgb3Igd2hlbiBhbgotZXZlbnQgb2YgYSBjZXJ0YWluIHNldmVyaXR5IG9yIGdyZWF0ZXIgaXMgc2Vlbi4KLQotOmNsYXNzOmBNZW1vcnlIYW5kbGVyYCBpcyBhIHN1YmNsYXNzIG9mIHRoZSBtb3JlIGdlbmVyYWwKLTpjbGFzczpgQnVmZmVyaW5nSGFuZGxlcmAsIHdoaWNoIGlzIGFuIGFic3RyYWN0IGNsYXNzLiBUaGlzIGJ1ZmZlcnMgbG9nZ2luZwotcmVjb3JkcyBpbiBtZW1vcnkuIFdoZW5ldmVyIGVhY2ggcmVjb3JkIGlzIGFkZGVkIHRvIHRoZSBidWZmZXIsIGEgY2hlY2sgaXMgbWFkZQotYnkgY2FsbGluZyA6bWV0aDpgc2hvdWxkRmx1c2hgIHRvIHNlZSBpZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBmbHVzaGVkLiAgSWYgaXQKLXNob3VsZCwgdGhlbiA6bWV0aDpgZmx1c2hgIGlzIGV4cGVjdGVkIHRvIGRvIHRoZSBuZWVkZnVsLgotCi0KLS4uIGNsYXNzOjogQnVmZmVyaW5nSGFuZGxlcihjYXBhY2l0eSkKLQotICAgSW5pdGlhbGl6ZXMgdGhlIGhhbmRsZXIgd2l0aCBhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIGNhcGFjaXR5LgotCi0KLSAgIC4uIG1ldGhvZDo6IGVtaXQocmVjb3JkKQotCi0gICAgICBBcHBlbmRzIHRoZSByZWNvcmQgdG8gdGhlIGJ1ZmZlci4gSWYgOm1ldGg6YHNob3VsZEZsdXNoYCByZXR1cm5zIHRydWUsCi0gICAgICBjYWxscyA6bWV0aDpgZmx1c2hgIHRvIHByb2Nlc3MgdGhlIGJ1ZmZlci4KLQotCi0gICAuLiBtZXRob2Q6OiBmbHVzaCgpCi0KLSAgICAgIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbXBsZW1lbnQgY3VzdG9tIGZsdXNoaW5nIGJlaGF2aW9yLiBUaGlzIHZlcnNpb24KLSAgICAgIGp1c3QgemFwcyB0aGUgYnVmZmVyIHRvIGVtcHR5LgotCi0KLSAgIC4uIG1ldGhvZDo6IHNob3VsZEZsdXNoKHJlY29yZCkKLQotICAgICAgUmV0dXJucyB0cnVlIGlmIHRoZSBidWZmZXIgaXMgdXAgdG8gY2FwYWNpdHkuIFRoaXMgbWV0aG9kIGNhbiBiZQotICAgICAgb3ZlcnJpZGRlbiB0byBpbXBsZW1lbnQgY3VzdG9tIGZsdXNoaW5nIHN0cmF0ZWdpZXMuCi0KLQotLi4gY2xhc3M6OiBNZW1vcnlIYW5kbGVyKGNhcGFjaXR5LCBmbHVzaExldmVsPUVSUk9SLCB0YXJnZXQ9Tm9uZSkKLQotICAgUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgOmNsYXNzOmBNZW1vcnlIYW5kbGVyYCBjbGFzcy4gVGhlIGluc3RhbmNlIGlzCi0gICBpbml0aWFsaXplZCB3aXRoIGEgYnVmZmVyIHNpemUgb2YgKmNhcGFjaXR5Ki4gSWYgKmZsdXNoTGV2ZWwqIGlzIG5vdCBzcGVjaWZpZWQsCi0gICA6Y29uc3Q6YEVSUk9SYCBpcyB1c2VkLiBJZiBubyAqdGFyZ2V0KiBpcyBzcGVjaWZpZWQsIHRoZSB0YXJnZXQgd2lsbCBuZWVkIHRvIGJlCi0gICBzZXQgdXNpbmcgOm1ldGg6YHNldFRhcmdldGAgYmVmb3JlIHRoaXMgaGFuZGxlciBkb2VzIGFueXRoaW5nIHVzZWZ1bC4KLQotCi0gICAuLiBtZXRob2Q6OiBjbG9zZSgpCi0KLSAgICAgIENhbGxzIDptZXRoOmBmbHVzaGAsIHNldHMgdGhlIHRhcmdldCB0byA6Y29uc3Q6YE5vbmVgIGFuZCBjbGVhcnMgdGhlCi0gICAgICBidWZmZXIuCi0KLQotICAgLi4gbWV0aG9kOjogZmx1c2goKQotCi0gICAgICBGb3IgYSA6Y2xhc3M6YE1lbW9yeUhhbmRsZXJgLCBmbHVzaGluZyBtZWFucyBqdXN0IHNlbmRpbmcgdGhlIGJ1ZmZlcmVkCi0gICAgICByZWNvcmRzIHRvIHRoZSB0YXJnZXQsIGlmIHRoZXJlIGlzIG9uZS4gT3ZlcnJpZGUgaWYgeW91IHdhbnQgZGlmZmVyZW50Ci0gICAgICBiZWhhdmlvci4KLQotCi0gICAuLiBtZXRob2Q6OiBzZXRUYXJnZXQodGFyZ2V0KQotCi0gICAgICBTZXRzIHRoZSB0YXJnZXQgaGFuZGxlciBmb3IgdGhpcyBoYW5kbGVyLgotCi0KLSAgIC4uIG1ldGhvZDo6IHNob3VsZEZsdXNoKHJlY29yZCkKLQotICAgICAgQ2hlY2tzIGZvciBidWZmZXIgZnVsbCBvciBhIHJlY29yZCBhdCB0aGUgKmZsdXNoTGV2ZWwqIG9yIGhpZ2hlci4KLQotCi0uLiBfaHR0cC1oYW5kbGVyOgotCi1IVFRQSGFuZGxlcgotXl5eXl5eXl5eXl4KLQotVGhlIDpjbGFzczpgSFRUUEhhbmRsZXJgIGNsYXNzLCBsb2NhdGVkIGluIHRoZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYCBtb2R1bGUsCi1zdXBwb3J0cyBzZW5kaW5nIGxvZ2dpbmcgbWVzc2FnZXMgdG8gYSBXZWIgc2VydmVyLCB1c2luZyBlaXRoZXIgYGBHRVRgYCBvcgotYGBQT1NUYGAgc2VtYW50aWNzLgotCi0KLS4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcpCi0KLSAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgSFRUUEhhbmRsZXJgIGNsYXNzLiBUaGUgaW5zdGFuY2UgaXMKLSAgIGluaXRpYWxpemVkIHdpdGggYSBob3N0IGFkZHJlc3MsIHVybCBhbmQgSFRUUCBtZXRob2QuIFRoZSAqaG9zdCogY2FuIGJlIG9mIHRoZQotICAgZm9ybSBgYGhvc3Q6cG9ydGBgLCBzaG91bGQgeW91IG5lZWQgdG8gdXNlIGEgc3BlY2lmaWMgcG9ydCBudW1iZXIuIElmIG5vCi0gICAqbWV0aG9kKiBpcyBzcGVjaWZpZWQsIGBgR0VUYGAgaXMgdXNlZC4KLQotCi0gICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKLQotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhIHBlcmNlbnQtZW5jb2RlZCBkaWN0aW9uYXJ5LgotCitGb3IgYSBsaXN0IG9mIGhhbmRsZXJzIGluY2x1ZGVkIGFzIHN0YW5kYXJkLCBzZWUgOm1vZDpgbG9nZ2luZy5oYW5kbGVyc2AuCiAKIC4uIF9mb3JtYXR0ZXItb2JqZWN0czoKIApAQCAtMjM5NCw3ICszODgsNyBAQAogCiAuLiBjdXJyZW50bW9kdWxlOjogbG9nZ2luZwogCi06Y2xhc3M6YEZvcm1hdHRlcmBcIHMgaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMuIFRoZXkgYXJlCis6Y2xhc3M6YEZvcm1hdHRlcmAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhbmQgbWV0aG9kcy4gVGhleSBhcmUKIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIGEgOmNsYXNzOmBMb2dSZWNvcmRgIHRvICh1c3VhbGx5KSBhIHN0cmluZyB3aGljaCBjYW4KIGJlIGludGVycHJldGVkIGJ5IGVpdGhlciBhIGh1bWFuIG9yIGFuIGV4dGVybmFsIHN5c3RlbS4gVGhlIGJhc2UKIDpjbGFzczpgRm9ybWF0dGVyYCBhbGxvd3MgYSBmb3JtYXR0aW5nIHN0cmluZyB0byBiZSBzcGVjaWZpZWQuIElmIG5vbmUgaXMKQEAgLTI0MDcsNjQgKzQwMSwxMSBAQAogc3RhbmRhcmQgUHl0aG9uICUtc3R5bGUgbWFwcGluZyBrZXlzLiBTZWUgc2VjdGlvbiA6cmVmOmBvbGQtc3RyaW5nLWZvcm1hdHRpbmdgCiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdHJpbmcgZm9ybWF0dGluZy4KIAotQ3VycmVudGx5LCB0aGUgdXNlZnVsIG1hcHBpbmcga2V5cyBpbiBhIDpjbGFzczpgTG9nUmVjb3JkYCBhcmU6Ci0KLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBGb3JtYXQgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgYGAlKG5hbWUpc2BgICAgICAgICAgICAgfCBOYW1lIG9mIHRoZSBsb2dnZXIgKGxvZ2dpbmcgY2hhbm5lbCkuICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShsZXZlbG5vKXNgYCAgICAgICAgIHwgTnVtZXJpYyBsb2dnaW5nIGxldmVsIGZvciB0aGUgbWVzc2FnZSAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoOmNvbnN0OmBERUJVR2AsIDpjb25zdDpgSU5GT2AsICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjb25zdDpgV0FSTklOR2AsIDpjb25zdDpgRVJST1JgLCAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNvbnN0OmBDUklUSUNBTGApLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYCUobGV2ZWxuYW1lKXNgYCAgICAgICB8IFRleHQgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGBgJ0RFQlVHJ2BgLCBgYCdJTkZPJ2BgLCBgYCdXQVJOSU5HJ2BgLCAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYCdFUlJPUidgYCwgYGAnQ1JJVElDQUwnYGApLiAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShwYXRobmFtZSlzYGAgICAgICAgIHwgRnVsbCBwYXRobmFtZSBvZiB0aGUgc291cmNlIGZpbGUgd2hlcmUgdGhlICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBsb2dnaW5nIGNhbGwgd2FzIGlzc3VlZCAoaWYgYXZhaWxhYmxlKS4gICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShmaWxlbmFtZSlzYGAgICAgICAgIHwgRmlsZW5hbWUgcG9ydGlvbiBvZiBwYXRobmFtZS4gICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYCUobW9kdWxlKXNgYCAgICAgICAgICB8IE1vZHVsZSAobmFtZSBwb3J0aW9uIG9mIGZpbGVuYW1lKS4gICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAlKGZ1bmNOYW1lKXNgYCAgICAgICAgfCBOYW1lIG9mIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIGxvZ2dpbmcgY2FsbC4gfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShsaW5lbm8pZGBgICAgICAgICAgIHwgU291cmNlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBsb2dnaW5nIGNhbGwgd2FzIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBpc3N1ZWQgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShjcmVhdGVkKWZgYCAgICAgICAgIHwgVGltZSB3aGVuIHRoZSA6Y2xhc3M6YExvZ1JlY29yZGAgd2FzIGNyZWF0ZWQgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHRpbWUudGltZWApLiAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShyZWxhdGl2ZUNyZWF0ZWQpZGBgIHwgVGltZSBpbiBtaWxsaXNlY29uZHMgd2hlbiB0aGUgTG9nUmVjb3JkIHdhcyAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBjcmVhdGVkLCByZWxhdGl2ZSB0byB0aGUgdGltZSB0aGUgbG9nZ2luZyAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vZHVsZSB3YXMgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAlKGFzY3RpbWUpc2BgICAgICAgICAgfCBIdW1hbi1yZWFkYWJsZSB0aW1lIHdoZW4gdGhlICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjbGFzczpgTG9nUmVjb3JkYCB3YXMgY3JlYXRlZC4gIEJ5IGRlZmF1bHQgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhpcyBpcyBvZiB0aGUgZm9ybSAiMjAwMy0wNy0wOCAxNjo0OTo0NSw4OTYiIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCAodGhlIG51bWJlcnMgYWZ0ZXIgdGhlIGNvbW1hIGFyZSBtaWxsaXNlY29uZCAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHBvcnRpb24gb2YgdGhlIHRpbWUpLiAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAlKG1zZWNzKWRgYCAgICAgICAgICAgfCBNaWxsaXNlY29uZCBwb3J0aW9uIG9mIHRoZSB0aW1lIHdoZW4gdGhlICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjbGFzczpgTG9nUmVjb3JkYCB3YXMgY3JlYXRlZC4gICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAlKHRocmVhZClkYGAgICAgICAgICAgfCBUaHJlYWQgSUQgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJSh0aHJlYWROYW1lKXNgYCAgICAgIHwgVGhyZWFkIG5hbWUgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYCUocHJvY2VzcylkYGAgICAgICAgICB8IFByb2Nlc3MgSUQgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAlKHByb2Nlc3NOYW1lKXNgYCAgICAgfCBQcm9jZXNzIG5hbWUgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJShtZXNzYWdlKXNgYCAgICAgICAgIHwgVGhlIGxvZ2dlZCBtZXNzYWdlLCBjb21wdXRlZCBhcyBgYG1zZyAlICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmdzYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCitUaGUgdXNlZnVsIG1hcHBpbmcga2V5cyBpbiBhIDpjbGFzczpgTG9nUmVjb3JkYCBhcmUgZ2l2ZW4gaW4gdGhlIHNlY3Rpb24gb24KKzpyZWY6YGxvZ3JlY29yZC1hdHRyaWJ1dGVzYC4KIAogCi0uLiBjbGFzczo6IEZvcm1hdHRlcihmbXQ9Tm9uZSwgZGF0ZWZtdD1Ob25lKQorLi4gY2xhc3M6OiBGb3JtYXR0ZXIoZm10PU5vbmUsIGRhdGVmbXQ9Tm9uZSwgc3R5bGU9JyUnKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgY2xhc3MuICBUaGUgaW5zdGFuY2UgaXMKICAgIGluaXRpYWxpemVkIHdpdGggYSBmb3JtYXQgc3RyaW5nIGZvciB0aGUgbWVzc2FnZSBhcyBhIHdob2xlLCBhcyB3ZWxsIGFzIGEKQEAgLTI0NzIsNiArNDEzLDE0IEBACiAgICBzcGVjaWZpZWQsIGBgJyUobWVzc2FnZSlzJ2BgIGlzIHVzZWQuICBJZiBubyAqZGF0ZWZtdCogaXMgc3BlY2lmaWVkLCB0aGUKICAgIElTTzg2MDEgZGF0ZSBmb3JtYXQgaXMgdXNlZC4KIAorICAgVGhlICpzdHlsZSogcGFyYW1ldGVyIGNhbiBiZSBvbmUgb2YgJyUnLCAneycgb3IgJyQnIGFuZCBkZXRlcm1pbmVzIGhvdworICAgdGhlIGZvcm1hdCBzdHJpbmcgd2lsbCBiZSBtZXJnZWQgd2l0aCBpdHMgZGF0YTogdXNpbmcgb25lIG9mICUtZm9ybWF0dGluZywKKyAgIDptZXRoOmBzdHIuZm9ybWF0YCBvciA6Y2xhc3M6YHN0cmluZy5UZW1wbGF0ZWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGUgKnN0eWxlKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorCisKICAgIC4uIG1ldGhvZDo6IGZvcm1hdChyZWNvcmQpCiAKICAgICAgIFRoZSByZWNvcmQncyBhdHRyaWJ1dGUgZGljdGlvbmFyeSBpcyB1c2VkIGFzIHRoZSBvcGVyYW5kIHRvIGEgc3RyaW5nCkBAIC0yNDkwLDYgKzQzOSw5IEBACiAgICAgICBmb3JtYXR0ZXIgdG8gaGFuZGxlIHRoZSBldmVudCBkb2Vzbid0IHVzZSB0aGUgY2FjaGVkIHZhbHVlIGJ1dAogICAgICAgcmVjYWxjdWxhdGVzIGl0IGFmcmVzaC4KIAorICAgICAgSWYgc3RhY2sgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLCBpdCdzIGFwcGVuZGVkIGFmdGVyIHRoZSBleGNlcHRpb24KKyAgICAgIGluZm9ybWF0aW9uLCB1c2luZyA6bWV0aDpgZm9ybWF0U3RhY2tgIHRvIHRyYW5zZm9ybSBpdCBpZiBuZWNlc3NhcnkuCisKIAogICAgLi4gbWV0aG9kOjogZm9ybWF0VGltZShyZWNvcmQsIGRhdGVmbXQ9Tm9uZSkKIApAQCAtMjUwOSwxNyArNDYxLDIzIEBACiAgICAgICBqdXN0IHVzZXMgOmZ1bmM6YHRyYWNlYmFjay5wcmludF9leGNlcHRpb25gLiBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcwogICAgICAgcmV0dXJuZWQuCiAKKyAgIC4uIG1ldGhvZDo6IGZvcm1hdFN0YWNrKHN0YWNrX2luZm8pCisKKyAgICAgIEZvcm1hdHMgdGhlIHNwZWNpZmllZCBzdGFjayBpbmZvcm1hdGlvbiAoYSBzdHJpbmcgYXMgcmV0dXJuZWQgYnkKKyAgICAgIDpmdW5jOmB0cmFjZWJhY2sucHJpbnRfc3RhY2tgLCBidXQgd2l0aCB0aGUgbGFzdCBuZXdsaW5lIHJlbW92ZWQpIGFzIGEKKyAgICAgIHN0cmluZy4gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucyB0aGUgaW5wdXQgdmFsdWUuCisKIC4uIF9maWx0ZXI6CiAKIEZpbHRlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLQogCi06Y2xhc3M6YEZpbHRlcmBcIHMgY2FuIGJlIHVzZWQgYnkgOmNsYXNzOmBIYW5kbGVyYFwgcyBhbmQgOmNsYXNzOmBMb2dnZXJgXCBzIGZvcgotbW9yZSBzb3BoaXN0aWNhdGVkIGZpbHRlcmluZyB0aGFuIGlzIHByb3ZpZGVkIGJ5IGxldmVscy4gVGhlIGJhc2UgZmlsdGVyIGNsYXNzCi1vbmx5IGFsbG93cyBldmVudHMgd2hpY2ggYXJlIGJlbG93IGEgY2VydGFpbiBwb2ludCBpbiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4gRm9yCi1leGFtcGxlLCBhIGZpbHRlciBpbml0aWFsaXplZCB3aXRoICJBLkIiIHdpbGwgYWxsb3cgZXZlbnRzIGxvZ2dlZCBieSBsb2dnZXJzCi0iQS5CIiwgIkEuQi5DIiwgIkEuQi5DLkQiLCAiQS5CLkQiIGV0Yy4gYnV0IG5vdCAiQS5CQiIsICJCLkEuQiIgZXRjLiBJZgotaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nLCBhbGwgZXZlbnRzIGFyZSBwYXNzZWQuCitgYEZpbHRlcnNgYCBjYW4gYmUgdXNlZCBieSBgYEhhbmRsZXJzYGAgYW5kIGBgTG9nZ2Vyc2BgIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQKK2ZpbHRlcmluZyB0aGFuIGlzIHByb3ZpZGVkIGJ5IGxldmVscy4gVGhlIGJhc2UgZmlsdGVyIGNsYXNzIG9ubHkgYWxsb3dzIGV2ZW50cword2hpY2ggYXJlIGJlbG93IGEgY2VydGFpbiBwb2ludCBpbiB0aGUgbG9nZ2VyIGhpZXJhcmNoeS4gRm9yIGV4YW1wbGUsIGEgZmlsdGVyCitpbml0aWFsaXplZCB3aXRoICdBLkInIHdpbGwgYWxsb3cgZXZlbnRzIGxvZ2dlZCBieSBsb2dnZXJzICdBLkInLCAnQS5CLkMnLAorJ0EuQi5DLkQnLCAnQS5CLkQnIGV0Yy4gYnV0IG5vdCAnQS5CQicsICdCLkEuQicgZXRjLiBJZiBpbml0aWFsaXplZCB3aXRoIHRoZQorZW1wdHkgc3RyaW5nLCBhbGwgZXZlbnRzIGFyZSBwYXNzZWQuCiAKIAogLi4gY2xhc3M6OiBGaWx0ZXIobmFtZT0nJykKQEAgLTI1NDIsNiArNTAwLDI4IEBACiB3aWxsIG5vdCBiZSBmaWx0ZXJlZCBieSBhIGxvZ2dlcidzIGZpbHRlciBzZXR0aW5nLCB1bmxlc3MgdGhlIGZpbHRlciBoYXMgYWxzbwogYmVlbiBhcHBsaWVkIHRvIHRob3NlIGRlc2NlbmRhbnQgbG9nZ2Vycy4KIAorWW91IGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gc3ViY2xhc3MgYGBGaWx0ZXJgYDogeW91IGNhbiBwYXNzIGFueSBpbnN0YW5jZQord2hpY2ggaGFzIGEgYGBmaWx0ZXJgYCBtZXRob2Qgd2l0aCB0aGUgc2FtZSBzZW1hbnRpY3MuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBZb3UgZG9uJ3QgbmVlZCB0byBjcmVhdGUgc3BlY2lhbGl6ZWQgYGBGaWx0ZXJgYCBjbGFzc2VzLCBvciB1c2Ugb3RoZXIKKyAgIGNsYXNzZXMgd2l0aCBhIGBgZmlsdGVyYGAgbWV0aG9kOiB5b3UgY2FuIHVzZSBhIGZ1bmN0aW9uIChvciBvdGhlcgorICAgY2FsbGFibGUpIGFzIGEgZmlsdGVyLiBUaGUgZmlsdGVyaW5nIGxvZ2ljIHdpbGwgY2hlY2sgdG8gc2VlIGlmIHRoZSBmaWx0ZXIKKyAgIG9iamVjdCBoYXMgYSBgYGZpbHRlcmBgIGF0dHJpYnV0ZTogaWYgaXQgZG9lcywgaXQncyBhc3N1bWVkIHRvIGJlIGEKKyAgIGBgRmlsdGVyYGAgYW5kIGl0cyA6bWV0aDpgfkZpbHRlci5maWx0ZXJgIG1ldGhvZCBpcyBjYWxsZWQuIE90aGVyd2lzZSwgaXQncworICAgYXNzdW1lZCB0byBiZSBhIGNhbGxhYmxlIGFuZCBjYWxsZWQgd2l0aCB0aGUgcmVjb3JkIGFzIHRoZSBzaW5nbGUKKyAgIHBhcmFtZXRlci4gVGhlIHJldHVybmVkIHZhbHVlIHNob3VsZCBjb25mb3JtIHRvIHRoYXQgcmV0dXJuZWQgYnkKKyAgIDptZXRoOmB+RmlsdGVyLmZpbHRlcmAuCisKK0FsdGhvdWdoIGZpbHRlcnMgYXJlIHVzZWQgcHJpbWFyaWx5IHRvIGZpbHRlciByZWNvcmRzIGJhc2VkIG9uIG1vcmUKK3NvcGhpc3RpY2F0ZWQgY3JpdGVyaWEgdGhhbiBsZXZlbHMsIHRoZXkgZ2V0IHRvIHNlZSBldmVyeSByZWNvcmQgd2hpY2ggaXMKK3Byb2Nlc3NlZCBieSB0aGUgaGFuZGxlciBvciBsb2dnZXIgdGhleSdyZSBhdHRhY2hlZCB0bzogdGhpcyBjYW4gYmUgdXNlZnVsIGlmCit5b3Ugd2FudCB0byBkbyB0aGluZ3MgbGlrZSBjb3VudGluZyBob3cgbWFueSByZWNvcmRzIHdlcmUgcHJvY2Vzc2VkIGJ5IGEKK3BhcnRpY3VsYXIgbG9nZ2VyIG9yIGhhbmRsZXIsIG9yIGFkZGluZywgY2hhbmdpbmcgb3IgcmVtb3ZpbmcgYXR0cmlidXRlcyBpbgordGhlIExvZ1JlY29yZCBiZWluZyBwcm9jZXNzZWQuIE9idmlvdXNseSBjaGFuZ2luZyB0aGUgTG9nUmVjb3JkIG5lZWRzIHRvIGJlCitkb25lIHdpdGggc29tZSBjYXJlLCBidXQgaXQgZG9lcyBhbGxvdyB0aGUgaW5qZWN0aW9uIG9mIGNvbnRleHR1YWwgaW5mb3JtYXRpb24KK2ludG8gbG9ncyAoc2VlIDpyZWY6YGZpbHRlcnMtY29udGV4dHVhbGApLgorCiAuLiBfbG9nLXJlY29yZDoKIAogTG9nUmVjb3JkIE9iamVjdHMKQEAgLTI1NTMsNyArNTMzLDcgQEAKIHdpcmUpLgogCiAKLS4uIGNsYXNzOjogTG9nUmVjb3JkKG5hbWUsIGx2bCwgcGF0aG5hbWUsIGxpbmVubywgbXNnLCBhcmdzLCBleGNfaW5mbywgZnVuYz1Ob25lKQorLi4gY2xhc3M6OiBMb2dSZWNvcmQobmFtZSwgbGV2ZWwsIHBhdGhuYW1lLCBsaW5lbm8sIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmM9Tm9uZSwgc2luZm89Tm9uZSkKIAogICAgQ29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBwZXJ0aW5lbnQgdG8gdGhlIGV2ZW50IGJlaW5nIGxvZ2dlZC4KIApAQCAtMjU2MSw0OSArNTQxLDE1MyBAQAogICAgYXJlIGNvbWJpbmVkIHVzaW5nIGBgbXNnICUgYXJnc2BgIHRvIGNyZWF0ZSB0aGUgOmF0dHI6YG1lc3NhZ2VgIGZpZWxkIG9mIHRoZQogICAgcmVjb3JkLgogCi0gICAuLiBhdHRyaWJ1dGU6OiBhcmdzCi0KLSAgICAgIFR1cGxlIG9mIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIGZvcm1hdHRpbmcgOmF0dHI6YG1zZ2AuCi0KLSAgIC4uIGF0dHJpYnV0ZTo6IGV4Y19pbmZvCi0KLSAgICAgIEV4Y2VwdGlvbiB0dXBsZSAow6AgbGEgYHN5cy5leGNfaW5mb2ApIG9yIGBOb25lYCBpZiBubyBleGNlcHRpb24KLSAgICAgIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KLQotICAgLi4gYXR0cmlidXRlOjogZnVuYwotCi0gICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiBvZiBvcmlnaW4gKGkuZS4gaW4gd2hpY2ggdGhlIGxvZ2dpbmcgY2FsbCB3YXMgbWFkZSkuCi0KLSAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubwotCi0gICAgICBMaW5lIG51bWJlciBpbiB0aGUgc291cmNlIGZpbGUgb2Ygb3JpZ2luLgotCi0gICAuLiBhdHRyaWJ1dGU6OiBsdmwKLQotICAgICAgTnVtZXJpYyBsb2dnaW5nIGxldmVsLgotCi0gICAuLiBhdHRyaWJ1dGU6OiBtZXNzYWdlCi0KLSAgICAgIEJvdW5kIHRvIHRoZSByZXN1bHQgb2YgOm1ldGg6YGdldE1lc3NhZ2VgIHdoZW4KLSAgICAgIDptZXRoOmBGb3JtYXR0ZXIuZm9ybWF0KHJlY29yZCk8Rm9ybWF0dGVyLmZvcm1hdD5gIGlzIGludm9rZWQuCi0KLSAgIC4uIGF0dHJpYnV0ZTo6IG1zZwotCi0gICAgICBVc2VyLXN1cHBsaWVkIDpyZWY6YGZvcm1hdCBzdHJpbmc8c3RyaW5nLWZvcm1hdHRpbmc+YCBvciBhcmJpdHJhcnkgb2JqZWN0Ci0gICAgICAoc2VlIDpyZWY6YGFyYml0cmFyeS1vYmplY3QtbWVzc2FnZXNgKSB1c2VkIGluIDptZXRoOmBnZXRNZXNzYWdlYC4KLQotICAgLi4gYXR0cmlidXRlOjogbmFtZQotCi0gICAgICBOYW1lIG9mIHRoZSBsb2dnZXIgdGhhdCBlbWl0dGVkIHRoZSByZWNvcmQuCi0KLSAgIC4uIGF0dHJpYnV0ZTo6IHBhdGhuYW1lCi0KLSAgICAgIEFic29sdXRlIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiBvcmlnaW4uCisgICA6cGFyYW0gbmFtZTogIFRoZSBuYW1lIG9mIHRoZSBsb2dnZXIgdXNlZCB0byBsb2cgdGhlIGV2ZW50IHJlcHJlc2VudGVkIGJ5CisgICAgICAgICAgICAgICAgIHRoaXMgTG9nUmVjb3JkLgorICAgOnBhcmFtIGxldmVsOiBUaGUgbnVtZXJpYyBsZXZlbCBvZiB0aGUgbG9nZ2luZyBldmVudCAob25lIG9mIERFQlVHLCBJTkZPIGV0Yy4pCisgICA6cGFyYW0gcGF0aG5hbWU6IFRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsCisgICAgICAgICAgICAgICAgICAgIHdhcyBtYWRlLgorICAgOnBhcmFtIGxpbmVubzogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBzb3VyY2UgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcworICAgICAgICAgICAgICAgICAgbWFkZS4KKyAgIDpwYXJhbSBtc2c6IFRoZSBldmVudCBkZXNjcmlwdGlvbiBtZXNzYWdlLCBwb3NzaWJseSBhIGZvcm1hdCBzdHJpbmcgd2l0aAorICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJzIGZvciB2YXJpYWJsZSBkYXRhLgorICAgOnBhcmFtIGFyZ3M6IFZhcmlhYmxlIGRhdGEgdG8gbWVyZ2UgaW50byB0aGUgKm1zZyogYXJndW1lbnQgdG8gb2J0YWluIHRoZQorICAgICAgICAgICAgICAgIGV2ZW50IGRlc2NyaXB0aW9uLgorICAgOnBhcmFtIGV4Y19pbmZvOiBBbiBleGNlcHRpb24gdHVwbGUgd2l0aCB0aGUgY3VycmVudCBleGNlcHRpb24gaW5mb3JtYXRpb24sCisgICAgICAgICAgICAgICAgICAgIG9yICpOb25lKiBpZiBubyBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgorICAgOnBhcmFtIGZ1bmM6IFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiBvciBtZXRob2QgZnJvbSB3aGljaCB0aGUgbG9nZ2luZyBjYWxsCisgICAgICAgICAgICAgICAgd2FzIGludm9rZWQuCisgICA6cGFyYW0gc2luZm86IEEgdGV4dCBzdHJpbmcgcmVwcmVzZW50aW5nIHN0YWNrIGluZm9ybWF0aW9uIGZyb20gdGhlIGJhc2Ugb2YKKyAgICAgICAgICAgICAgICAgdGhlIHN0YWNrIGluIHRoZSBjdXJyZW50IHRocmVhZCwgdXAgdG8gdGhlIGxvZ2dpbmcgY2FsbC4KIAogICAgLi4gbWV0aG9kOjogZ2V0TWVzc2FnZSgpCiAKICAgICAgIFJldHVybnMgdGhlIG1lc3NhZ2UgZm9yIHRoaXMgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlIGFmdGVyIG1lcmdpbmcgYW55Ci0gICAgICB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cyB3aXRoIHRoZSBtZXNzYWdlLgorICAgICAgdXNlci1zdXBwbGllZCBhcmd1bWVudHMgd2l0aCB0aGUgbWVzc2FnZS4gSWYgdGhlIHVzZXItc3VwcGxpZWQgbWVzc2FnZQorICAgICAgYXJndW1lbnQgdG8gdGhlIGxvZ2dpbmcgY2FsbCBpcyBub3QgYSBzdHJpbmcsIDpmdW5jOmBzdHJgIGlzIGNhbGxlZCBvbiBpdCB0bworICAgICAgY29udmVydCBpdCB0byBhIHN0cmluZy4gVGhpcyBhbGxvd3MgdXNlIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzIGFzCisgICAgICBtZXNzYWdlcywgd2hvc2UgYGBfX3N0cl9fYGAgbWV0aG9kIGNhbiByZXR1cm4gdGhlIGFjdHVhbCBmb3JtYXQgc3RyaW5nIHRvCisgICAgICBiZSB1c2VkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGNyZWF0aW9uIG9mIGEgYGBMb2dSZWNvcmRgYCBoYXMgYmVlbiBtYWRlIG1vcmUgY29uZmlndXJhYmxlIGJ5CisgICAgICBwcm92aWRpbmcgYSBmYWN0b3J5IHdoaWNoIGlzIHVzZWQgdG8gY3JlYXRlIHRoZSByZWNvcmQuIFRoZSBmYWN0b3J5IGNhbiBiZQorICAgICAgc2V0IHVzaW5nIDpmdW5jOmBnZXRMb2dSZWNvcmRGYWN0b3J5YCBhbmQgOmZ1bmM6YHNldExvZ1JlY29yZEZhY3RvcnlgCisgICAgICAoc2VlIHRoaXMgZm9yIHRoZSBmYWN0b3J5J3Mgc2lnbmF0dXJlKS4KKworICAgVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSB1c2VkIHRvIGluamVjdCB5b3VyIG93biB2YWx1ZXMgaW50byBhCisgICBMb2dSZWNvcmQgYXQgY3JlYXRpb24gdGltZS4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBwYXR0ZXJuOjoKKworICAgICAgb2xkX2ZhY3RvcnkgPSBsb2dnaW5nLmdldExvZ1JlY29yZEZhY3RvcnkoKQorCisgICAgICBkZWYgcmVjb3JkX2ZhY3RvcnkoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICByZWNvcmQgPSBvbGRfZmFjdG9yeSgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgcmVjb3JkLmN1c3RvbV9hdHRyaWJ1dGUgPSAweGRlY2FmYmFkCisgICAgICAgICAgcmV0dXJuIHJlY29yZAorCisgICAgICBsb2dnaW5nLnNldExvZ1JlY29yZEZhY3RvcnkocmVjb3JkX2ZhY3RvcnkpCisKKyAgIFdpdGggdGhpcyBwYXR0ZXJuLCBtdWx0aXBsZSBmYWN0b3JpZXMgY291bGQgYmUgY2hhaW5lZCwgYW5kIGFzIGxvbmcKKyAgIGFzIHRoZXkgZG9uJ3Qgb3ZlcndyaXRlIGVhY2ggb3RoZXIncyBhdHRyaWJ1dGVzIG9yIHVuaW50ZW50aW9uYWxseQorICAgb3ZlcndyaXRlIHRoZSBzdGFuZGFyZCBhdHRyaWJ1dGVzIGxpc3RlZCBhYm92ZSwgdGhlcmUgc2hvdWxkIGJlIG5vCisgICBzdXJwcmlzZXMuCisKKworLi4gX2xvZ3JlY29yZC1hdHRyaWJ1dGVzOgorCitMb2dSZWNvcmQgYXR0cmlidXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIExvZ1JlY29yZCBoYXMgYSBudW1iZXIgb2YgYXR0cmlidXRlcywgbW9zdCBvZiB3aGljaCBhcmUgZGVyaXZlZCBmcm9tIHRoZQorcGFyYW1ldGVycyB0byB0aGUgY29uc3RydWN0b3IuIChOb3RlIHRoYXQgdGhlIG5hbWVzIGRvIG5vdCBhbHdheXMgY29ycmVzcG9uZAorZXhhY3RseSBiZXR3ZWVuIHRoZSBMb2dSZWNvcmQgY29uc3RydWN0b3IgcGFyYW1ldGVycyBhbmQgdGhlIExvZ1JlY29yZAorYXR0cmlidXRlcy4pIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIHVzZWQgdG8gbWVyZ2UgZGF0YSBmcm9tIHRoZSByZWNvcmQgaW50bwordGhlIGZvcm1hdCBzdHJpbmcuIFRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgKGluIGFscGhhYmV0aWNhbCBvcmRlcikgdGhlCithdHRyaWJ1dGUgbmFtZXMsIHRoZWlyIG1lYW5pbmdzIGFuZCB0aGUgY29ycmVzcG9uZGluZyBwbGFjZWhvbGRlciBpbiBhICUtc3R5bGUKK2Zvcm1hdCBzdHJpbmcuCisKK0lmIHlvdSBhcmUgdXNpbmcge30tZm9ybWF0dGluZyAoOmZ1bmM6YHN0ci5mb3JtYXRgKSwgeW91IGNhbiB1c2UKK2Bge2F0dHJuYW1lfWBgIGFzIHRoZSBwbGFjZWhvbGRlciBpbiB0aGUgZm9ybWF0IHN0cmluZy4gSWYgeW91IGFyZSB1c2luZworJC1mb3JtYXR0aW5nICg6Y2xhc3M6YHN0cmluZy5UZW1wbGF0ZWApLCB1c2UgdGhlIGZvcm0gYGAke2F0dHJuYW1lfWBgLiBJbgorYm90aCBjYXNlcywgb2YgY291cnNlLCByZXBsYWNlIGBgYXR0cm5hbWVgYCB3aXRoIHRoZSBhY3R1YWwgYXR0cmlidXRlIG5hbWUKK3lvdSB3YW50IHRvIHVzZS4KKworSW4gdGhlIGNhc2Ugb2Yge30tZm9ybWF0dGluZywgeW91IGNhbiBzcGVjaWZ5IGZvcm1hdHRpbmcgZmxhZ3MgYnkgcGxhY2luZyB0aGVtCithZnRlciB0aGUgYXR0cmlidXRlIG5hbWUsIHNlcGFyYXRlZCBmcm9tIGl0IHdpdGggYSBjb2xvbi4gRm9yIGV4YW1wbGU6IGEKK3BsYWNlaG9sZGVyIG9mIGBge21zZWNzOjAzZH1gYCB3b3VsZCBmb3JtYXQgYSBtaWxsaXNlY29uZCB2YWx1ZSBvZiBgYDRgYCBhcworYGAwMDRgYC4gUmVmZXIgdG8gdGhlIDptZXRoOmBzdHIuZm9ybWF0YCBkb2N1bWVudGF0aW9uIGZvciBmdWxsIGRldGFpbHMgb24KK3RoZSBvcHRpb25zIGF2YWlsYWJsZSB0byB5b3UuCisKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IEF0dHJpYnV0ZSBuYW1lIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgYXJncyAgICAgICAgICAgfCBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gICB8IFRoZSB0dXBsZSBvZiBhcmd1bWVudHMgbWVyZ2VkIGludG8gYGBtc2dgYCB0byB8Cit8ICAgICAgICAgICAgICAgIHwgZm9ybWF0IHRoaXMgeW91cnNlbGYuICAgfCBwcm9kdWNlIGBgbWVzc2FnZWBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYXNjdGltZSAgICAgICAgfCBgYCUoYXNjdGltZSlzYGAgICAgICAgICB8IEh1bWFuLXJlYWRhYmxlIHRpbWUgd2hlbiB0aGUgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YExvZ1JlY29yZGAgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0ICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhpcyBpcyBvZiB0aGUgZm9ybSAnMjAwMy0wNy0wOCAxNjo0OTo0NSw4OTYnIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8ICh0aGUgbnVtYmVycyBhZnRlciB0aGUgY29tbWEgYXJlIG1pbGxpc2Vjb25kICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwb3J0aW9uIG9mIHRoZSB0aW1lKS4gICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgY3JlYXRlZCAgICAgICAgfCBgYCUoY3JlYXRlZClmYGAgICAgICAgICB8IFRpbWUgd2hlbiB0aGUgOmNsYXNzOmBMb2dSZWNvcmRgIHdhcyBjcmVhdGVkICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHRpbWUudGltZWApLiAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZXhjX2luZm8gICAgICAgfCBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gICB8IEV4Y2VwdGlvbiB0dXBsZSAow6AgbGEgYGBzeXMuZXhjX2luZm9gYCkgb3IsICAgfAorfCAgICAgICAgICAgICAgICB8IGZvcm1hdCB0aGlzIHlvdXJzZWxmLiAgIHwgaWYgbm8gZXhjZXB0aW9uIGhhcyBvY2N1cnJlZCwgKk5vbmUqLiAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGZpbGVuYW1lICAgICAgIHwgYGAlKGZpbGVuYW1lKXNgYCAgICAgICAgfCBGaWxlbmFtZSBwb3J0aW9uIG9mIGBgcGF0aG5hbWVgYC4gICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgZnVuY05hbWUgICAgICAgfCBgYCUoZnVuY05hbWUpc2BgICAgICAgICB8IE5hbWUgb2YgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgbG9nZ2luZyBjYWxsLiB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBsZXZlbG5hbWUgICAgICB8IGBgJShsZXZlbG5hbWUpc2BgICAgICAgIHwgVGV4dCBsb2dnaW5nIGxldmVsIGZvciB0aGUgbWVzc2FnZSAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IChgYCdERUJVRydgYCwgYGAnSU5GTydgYCwgYGAnV0FSTklORydgYCwgICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYCdFUlJPUidgYCwgYGAnQ1JJVElDQUwnYGApLiAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgbGV2ZWxubyAgICAgICAgfCBgYCUobGV2ZWxubylzYGAgICAgICAgICB8IE51bWVyaWMgbG9nZ2luZyBsZXZlbCBmb3IgdGhlIG1lc3NhZ2UgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCAoOmNvbnN0OmBERUJVR2AsIDpjb25zdDpgSU5GT2AsICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNvbnN0OmBXQVJOSU5HYCwgOmNvbnN0OmBFUlJPUmAsICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjb25zdDpgQ1JJVElDQUxgKS4gICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBsaW5lbm8gICAgICAgICB8IGBgJShsaW5lbm8pZGBgICAgICAgICAgIHwgU291cmNlIGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBsb2dnaW5nIGNhbGwgd2FzIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGlzc3VlZCAoaWYgYXZhaWxhYmxlKS4gICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBtb2R1bGUgICAgICAgICB8IGBgJShtb2R1bGUpc2BgICAgICAgICAgIHwgTW9kdWxlIChuYW1lIHBvcnRpb24gb2YgYGBmaWxlbmFtZWBgKS4gICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG1zZWNzICAgICAgICAgIHwgYGAlKG1zZWNzKWRgYCAgICAgICAgICAgfCBNaWxsaXNlY29uZCBwb3J0aW9uIG9mIHRoZSB0aW1lIHdoZW4gdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNsYXNzOmBMb2dSZWNvcmRgIHdhcyBjcmVhdGVkLiAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG1lc3NhZ2UgICAgICAgIHwgYGAlKG1lc3NhZ2Upc2BgICAgICAgICAgfCBUaGUgbG9nZ2VkIG1lc3NhZ2UsIGNvbXB1dGVkIGFzIGBgbXNnICUgICAgICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXJnc2BgLiBUaGlzIGlzIHNldCB3aGVuICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDptZXRoOmBGb3JtYXR0ZXIuZm9ybWF0YCBpcyBpbnZva2VkLiAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBtc2cgICAgICAgICAgICB8IFlvdSBzaG91bGRuJ3QgbmVlZCB0byAgIHwgVGhlIGZvcm1hdCBzdHJpbmcgcGFzc2VkIGluIHRoZSBvcmlnaW5hbCAgICAgIHwKK3wgICAgICAgICAgICAgICAgfCBmb3JtYXQgdGhpcyB5b3Vyc2VsZi4gICB8IGxvZ2dpbmcgY2FsbC4gTWVyZ2VkIHdpdGggYGBhcmdzYGAgdG8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9kdWNlIGBgbWVzc2FnZWBgLCBvciBhbiBhcmJpdHJhcnkgb2JqZWN0ICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNlZSA6cmVmOmBhcmJpdHJhcnktb2JqZWN0LW1lc3NhZ2VzYCkuICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IG5hbWUgICAgICAgICAgIHwgYGAlKG5hbWUpc2BgICAgICAgICAgICAgfCBOYW1lIG9mIHRoZSBsb2dnZXIgdXNlZCB0byBsb2cgdGhlIGNhbGwuICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgcGF0aG5hbWUgICAgICAgfCBgYCUocGF0aG5hbWUpc2BgICAgICAgICB8IEZ1bGwgcGF0aG5hbWUgb2YgdGhlIHNvdXJjZSBmaWxlIHdoZXJlIHRoZSAgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBsb2dnaW5nIGNhbGwgd2FzIGlzc3VlZCAoaWYgYXZhaWxhYmxlKS4gICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgcHJvY2VzcyAgICAgICAgfCBgYCUocHJvY2VzcylkYGAgICAgICAgICB8IFByb2Nlc3MgSUQgKGlmIGF2YWlsYWJsZSkuICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBwcm9jZXNzTmFtZSAgICB8IGBgJShwcm9jZXNzTmFtZSlzYGAgICAgIHwgUHJvY2VzcyBuYW1lIChpZiBhdmFpbGFibGUpLiAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHJlbGF0aXZlQ3JlYXRlZHwgYGAlKHJlbGF0aXZlQ3JlYXRlZClkYGAgfCBUaW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSBMb2dSZWNvcmQgd2FzICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlZCwgcmVsYXRpdmUgdG8gdGhlIHRpbWUgdGhlIGxvZ2dpbmcgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IG1vZHVsZSB3YXMgbG9hZGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBzdGFja19pbmZvICAgICB8IFlvdSBzaG91bGRuJ3QgbmVlZCB0byAgIHwgU3RhY2sgZnJhbWUgaW5mb3JtYXRpb24gKHdoZXJlIGF2YWlsYWJsZSkgICAgIHwKK3wgICAgICAgICAgICAgICAgfCBmb3JtYXQgdGhpcyB5b3Vyc2VsZi4gICB8IGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2sgaW4gdGhlIGN1cnJlbnQgICB8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aHJlYWQsIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHN0YWNrIGZyYW1lICAgfAorfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgb2YgdGhlIGxvZ2dpbmcgY2FsbCB3aGljaCByZXN1bHRlZCBpbiB0aGUgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0aW9uIG9mIHRoaXMgcmVjb3JkLiAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCB0aHJlYWQgICAgICAgICB8IGBgJSh0aHJlYWQpZGBgICAgICAgICAgIHwgVGhyZWFkIElEIChpZiBhdmFpbGFibGUpLiAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IHRocmVhZE5hbWUgICAgIHwgYGAlKHRocmVhZE5hbWUpc2BgICAgICAgfCBUaHJlYWQgbmFtZSAoaWYgYXZhaWxhYmxlKS4gICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCiAuLiBfbG9nZ2VyLWFkYXB0ZXI6CkBAIC0yNjE1LDcgKzY5OSw2IEBACiBpbmZvcm1hdGlvbiBpbnRvIGxvZ2dpbmcgY2FsbHMuIEZvciBhIHVzYWdlIGV4YW1wbGUgLCBzZWUgdGhlIHNlY3Rpb24gb24KIDpyZWY6YGFkZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIHRvIHlvdXIgbG9nZ2luZyBvdXRwdXQgPGNvbnRleHQtaW5mbz5gLgogCi0KIC4uIGNsYXNzOjogTG9nZ2VyQWRhcHRlcihsb2dnZXIsIGV4dHJhKQogCiAgICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgaW5pdGlhbGl6ZWQgd2l0aCBhbgpAQCAtMjYyOSwxNCArNzEyLDE4IEBACiAgICAgICAnZXh0cmEnLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgKCptc2cqLCAqa3dhcmdzKikgdHVwbGUgd2hpY2ggaGFzIHRoZQogICAgICAgKHBvc3NpYmx5IG1vZGlmaWVkKSB2ZXJzaW9ucyBvZiB0aGUgYXJndW1lbnRzIHBhc3NlZCBpbi4KIAotSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIHN1cHBvcnRzIGFsbCB0aGUgbG9nZ2luZworSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlLCA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcKIG1ldGhvZHMgb2YgOmNsYXNzOmBMb2dnZXJgLCBpLmUuIDptZXRoOmBkZWJ1Z2AsIDptZXRoOmBpbmZvYCwgOm1ldGg6YHdhcm5pbmdgLAotOm1ldGg6YGVycm9yYCwgOm1ldGg6YGV4Y2VwdGlvbmAsIDptZXRoOmBjcml0aWNhbGAgYW5kIDptZXRoOmBsb2dgLiBUaGVzZQotbWV0aG9kcyBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZXMgYXMgdGhlaXIgY291bnRlcnBhcnRzIGluIDpjbGFzczpgTG9nZ2VyYCwgc28KLXlvdSBjYW4gdXNlIHRoZSB0d28gdHlwZXMgb2YgaW5zdGFuY2VzIGludGVyY2hhbmdlYWJseS4KKzptZXRoOmBlcnJvcmAsIDptZXRoOmBleGNlcHRpb25gLCA6bWV0aDpgY3JpdGljYWxgLCA6bWV0aDpgbG9nYCwKKzptZXRoOmBpc0VuYWJsZWRGb3JgLCA6bWV0aDpgZ2V0RWZmZWN0aXZlTGV2ZWxgLCA6bWV0aDpgc2V0TGV2ZWxgLAorOm1ldGg6YGhhc0hhbmRsZXJzYC4gVGhlc2UgbWV0aG9kcyBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZXMgYXMgdGhlaXIKK2NvdW50ZXJwYXJ0cyBpbiA6Y2xhc3M6YExvZ2dlcmAsIHNvIHlvdSBjYW4gdXNlIHRoZSB0d28gdHlwZXMgb2YgaW5zdGFuY2VzCitpbnRlcmNoYW5nZWFibHkuCiAKLSAgIFRoZSA6bWV0aDpgaXNFbmFibGVkRm9yYCBtZXRob2Qgd2FzIGFkZGVkIHRvIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAuICBUaGlzCi0gICBtZXRob2QgZGVsZWdhdGVzIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBUaGUgOm1ldGg6YGlzRW5hYmxlZEZvcmAsIDptZXRoOmBnZXRFZmZlY3RpdmVMZXZlbGAsIDptZXRoOmBzZXRMZXZlbGAgYW5kCisgICA6bWV0aDpgaGFzSGFuZGxlcnNgIG1ldGhvZHMgd2VyZSBhZGRlZCB0byA6Y2xhc3M6YExvZ2dlckFkYXB0ZXJgLiAgVGhlc2UKKyAgIG1ldGhvZHMgZGVsZWdhdGUgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogCiAKIFRocmVhZCBTYWZldHkKQEAgLTI2NTIsNDAxICs3MzksMzM4IEBACiBiZWNhdXNlIGxvY2sgaW1wbGVtZW50YXRpb25zIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZSBhcmUgbm90IGFsd2F5cwogcmUtZW50cmFudCwgYW5kIHNvIGNhbm5vdCBiZSBpbnZva2VkIGZyb20gc3VjaCBzaWduYWwgaGFuZGxlcnMuCiAKLUNvbmZpZ3VyYXRpb24KLS0tLS0tLS0tLS0tLS0KIAorTW9kdWxlLUxldmVsIEZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBfbG9nZ2luZy1jb25maWctYXBpOgorSW4gYWRkaXRpb24gdG8gdGhlIGNsYXNzZXMgZGVzY3JpYmVkIGFib3ZlLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgbW9kdWxlLSBsZXZlbAorZnVuY3Rpb25zLgogCi1Db25maWd1cmF0aW9uIGZ1bmN0aW9ucwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY29uZmlndXJlIHRoZSBsb2dnaW5nIG1vZHVsZS4gVGhleSBhcmUgbG9jYXRlZCBpbiB0aGUKLTptb2Q6YGxvZ2dpbmcuY29uZmlnYCBtb2R1bGUuICBUaGVpciB1c2UgaXMgb3B0aW9uYWwgLS0tIHlvdSBjYW4gY29uZmlndXJlIHRoZQotbG9nZ2luZyBtb2R1bGUgdXNpbmcgdGhlc2UgZnVuY3Rpb25zIG9yIGJ5IG1ha2luZyBjYWxscyB0byB0aGUgbWFpbiBBUEkgKGRlZmluZWQKLWluIDptb2Q6YGxvZ2dpbmdgIGl0c2VsZikgYW5kIGRlZmluaW5nIGhhbmRsZXJzIHdoaWNoIGFyZSBkZWNsYXJlZCBlaXRoZXIgaW4KLTptb2Q6YGxvZ2dpbmdgIG9yIDptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgLgorLi4gZnVuY3Rpb246OiBnZXRMb2dnZXIobmFtZT1Ob25lKQogCisgICBSZXR1cm4gYSBsb2dnZXIgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUgb3IsIGlmIG5hbWUgaXMgYGBOb25lYGAsIHJldHVybiBhCisgICBsb2dnZXIgd2hpY2ggaXMgdGhlIHJvb3QgbG9nZ2VyIG9mIHRoZSBoaWVyYXJjaHkuIElmIHNwZWNpZmllZCwgdGhlIG5hbWUgaXMKKyAgIHR5cGljYWxseSBhIGRvdC1zZXBhcmF0ZWQgaGllcmFyY2hpY2FsIG5hbWUgbGlrZSAqJ2EnKiwgKidhLmInKiBvciAqJ2EuYi5jLmQnKi4KKyAgIENob2ljZSBvZiB0aGVzZSBuYW1lcyBpcyBlbnRpcmVseSB1cCB0byB0aGUgZGV2ZWxvcGVyIHdobyBpcyB1c2luZyBsb2dnaW5nLgogCi0uLiBmdW5jdGlvbjo6IGZpbGVDb25maWcoZm5hbWUsIGRlZmF1bHRzPU5vbmUsIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2Vycz1UcnVlKQorICAgQWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2l0aCBhIGdpdmVuIG5hbWUgcmV0dXJuIHRoZSBzYW1lIGxvZ2dlciBpbnN0YW5jZS4KKyAgIFRoaXMgbWVhbnMgdGhhdCBsb2dnZXIgaW5zdGFuY2VzIG5ldmVyIG5lZWQgdG8gYmUgcGFzc2VkIGJldHdlZW4gZGlmZmVyZW50IHBhcnRzCisgICBvZiBhbiBhcHBsaWNhdGlvbi4KIAotICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUgbmFtZWQKLSAgICpmbmFtZSouIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIGZyb20gYW4gYXBwbGljYXRpb24sCi0gICBhbGxvd2luZyBhbiBlbmQgdXNlciB0aGUgYWJpbGl0eSB0byBzZWxlY3QgZnJvbSB2YXJpb3VzIHByZS1jYW5uZWQKLSAgIGNvbmZpZ3VyYXRpb25zIChpZiB0aGUgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMKLSAgIGFuZCBsb2FkIHRoZSBjaG9zZW4gY29uZmlndXJhdGlvbikuIERlZmF1bHRzIHRvIGJlIHBhc3NlZCB0byB0aGUgQ29uZmlnUGFyc2VyCi0gICBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSAqZGVmYXVsdHMqIGFyZ3VtZW50LgogCi0gICBJZiAqZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzKiBpcyB0cnVlLCBhbnkgZXhpc3RpbmcgbG9nZ2VycyB0aGF0IGFyZSBub3QKLSAgIGNoaWxkcmVuIG9mIG5hbWVkIGxvZ2dlcnMgd2lsbCBiZSBkaXNhYmxlZC4KKy4uIGZ1bmN0aW9uOjogZ2V0TG9nZ2VyQ2xhc3MoKQogCisgICBSZXR1cm4gZWl0aGVyIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YExvZ2dlcmAgY2xhc3MsIG9yIHRoZSBsYXN0IGNsYXNzIHBhc3NlZCB0bworICAgOmZ1bmM6YHNldExvZ2dlckNsYXNzYC4gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGEgbmV3IGNsYXNzCisgICBkZWZpbml0aW9uLCB0byBlbnN1cmUgdGhhdCBpbnN0YWxsaW5nIGEgY3VzdG9taXNlZCA6Y2xhc3M6YExvZ2dlcmAgY2xhc3Mgd2lsbAorICAgbm90IHVuZG8gY3VzdG9taXNhdGlvbnMgYWxyZWFkeSBhcHBsaWVkIGJ5IG90aGVyIGNvZGUuIEZvciBleGFtcGxlOjoKIAotLi4gZnVuY3Rpb246OiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpCisgICAgICBjbGFzcyBNeUxvZ2dlcihsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkpOgorICAgICAgICAgICMgLi4uIG92ZXJyaWRlIGJlaGF2aW91ciBoZXJlCiAKLSAgIFN0YXJ0cyB1cCBhIHNvY2tldCBzZXJ2ZXIgb24gdGhlIHNwZWNpZmllZCBwb3J0LCBhbmQgbGlzdGVucyBmb3IgbmV3Ci0gICBjb25maWd1cmF0aW9ucy4gSWYgbm8gcG9ydCBpcyBzcGVjaWZpZWQsIHRoZSBtb2R1bGUncyBkZWZhdWx0Ci0gICA6Y29uc3Q6YERFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVGAgaXMgdXNlZC4gTG9nZ2luZyBjb25maWd1cmF0aW9ucyB3aWxsIGJlCi0gICBzZW50IGFzIGEgZmlsZSBzdWl0YWJsZSBmb3IgcHJvY2Vzc2luZyBieSA6ZnVuYzpgZmlsZUNvbmZpZ2AuIFJldHVybnMgYQotICAgOmNsYXNzOmBUaHJlYWRgIGluc3RhbmNlIG9uIHdoaWNoIHlvdSBjYW4gY2FsbCA6bWV0aDpgc3RhcnRgIHRvIHN0YXJ0IHRoZQotICAgc2VydmVyLCBhbmQgd2hpY2ggeW91IGNhbiA6bWV0aDpgam9pbmAgd2hlbiBhcHByb3ByaWF0ZS4gVG8gc3RvcCB0aGUgc2VydmVyLAotICAgY2FsbCA6ZnVuYzpgc3RvcExpc3RlbmluZ2AuCiAKLSAgIFRvIHNlbmQgYSBjb25maWd1cmF0aW9uIHRvIHRoZSBzb2NrZXQsIHJlYWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBhbmQKLSAgIHNlbmQgaXQgdG8gdGhlIHNvY2tldCBhcyBhIHN0cmluZyBvZiBieXRlcyBwcmVjZWRlZCBieSBhIGZvdXItYnl0ZSBsZW5ndGgKLSAgIHN0cmluZyBwYWNrZWQgaW4gYmluYXJ5IHVzaW5nIGBgc3RydWN0LnBhY2soJz5MJywgbilgYC4KKy4uIGZ1bmN0aW9uOjogZ2V0TG9nUmVjb3JkRmFjdG9yeSgpCiAKKyAgIFJldHVybiBhIGNhbGxhYmxlIHdoaWNoIGlzIHVzZWQgdG8gY3JlYXRlIGEgOmNsYXNzOmBMb2dSZWNvcmRgLgogCi0uLiBmdW5jdGlvbjo6IHN0b3BMaXN0ZW5pbmcoKQorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIHByb3ZpZGVkLCBhbG9uZyB3aXRoIDpmdW5jOmBzZXRMb2dSZWNvcmRGYWN0b3J5YCwKKyAgICAgIHRvIGFsbG93IGRldmVsb3BlcnMgbW9yZSBjb250cm9sIG92ZXIgaG93IHRoZSA6Y2xhc3M6YExvZ1JlY29yZGAKKyAgICAgIHJlcHJlc2VudGluZyBhIGxvZ2dpbmcgZXZlbnQgaXMgY29uc3RydWN0ZWQuCiAKLSAgIFN0b3BzIHRoZSBsaXN0ZW5pbmcgc2VydmVyIHdoaWNoIHdhcyBjcmVhdGVkIHdpdGggYSBjYWxsIHRvIDpmdW5jOmBsaXN0ZW5gLgotICAgVGhpcyBpcyB0eXBpY2FsbHkgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIDptZXRoOmBqb2luYCBvbiB0aGUgcmV0dXJuIHZhbHVlIGZyb20KLSAgIDpmdW5jOmBsaXN0ZW5gLgorICAgU2VlIDpmdW5jOmBzZXRMb2dSZWNvcmRGYWN0b3J5YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaG93IHRoZQorICAgZmFjdG9yeSBpcyBjYWxsZWQuCiAKKy4uIGZ1bmN0aW9uOjogZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKLS4uIF9sb2dnaW5nLWNvbmZpZy1maWxlZm9ybWF0OgorICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YERFQlVHYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSAqbXNnKiBpcyB0aGUKKyAgIG1lc3NhZ2UgZm9ybWF0IHN0cmluZywgYW5kIHRoZSAqYXJncyogYXJlIHRoZSBhcmd1bWVudHMgd2hpY2ggYXJlIG1lcmdlZCBpbnRvCisgICAqbXNnKiB1c2luZyB0aGUgc3RyaW5nIGZvcm1hdHRpbmcgb3BlcmF0b3IuIChOb3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IHlvdSBjYW4KKyAgIHVzZSBrZXl3b3JkcyBpbiB0aGUgZm9ybWF0IHN0cmluZywgdG9nZXRoZXIgd2l0aCBhIHNpbmdsZSBkaWN0aW9uYXJ5IGFyZ3VtZW50LikKIAotQ29uZmlndXJhdGlvbiBmaWxlIGZvcm1hdAotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorICAgVGhlcmUgYXJlIHRocmVlIGtleXdvcmQgYXJndW1lbnRzIGluICprd2FyZ3MqIHdoaWNoIGFyZSBpbnNwZWN0ZWQ6ICpleGNfaW5mbyoKKyAgIHdoaWNoLCBpZiBpdCBkb2VzIG5vdCBldmFsdWF0ZSBhcyBmYWxzZSwgY2F1c2VzIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiB0byBiZQorICAgYWRkZWQgdG8gdGhlIGxvZ2dpbmcgbWVzc2FnZS4gSWYgYW4gZXhjZXB0aW9uIHR1cGxlIChpbiB0aGUgZm9ybWF0IHJldHVybmVkIGJ5CisgICA6ZnVuYzpgc3lzLmV4Y19pbmZvYCkgaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQ7IG90aGVyd2lzZSwgOmZ1bmM6YHN5cy5leGNfaW5mb2AKKyAgIGlzIGNhbGxlZCB0byBnZXQgdGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KIAotVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXQgdW5kZXJzdG9vZCBieSA6ZnVuYzpgZmlsZUNvbmZpZ2AgaXMgYmFzZWQgb24KLTptb2Q6YGNvbmZpZ3BhcnNlcmAgZnVuY3Rpb25hbGl0eS4gVGhlIGZpbGUgbXVzdCBjb250YWluIHNlY3Rpb25zIGNhbGxlZAotYGBbbG9nZ2Vyc11gYCwgYGBbaGFuZGxlcnNdYGAgYW5kIGBgW2Zvcm1hdHRlcnNdYGAgd2hpY2ggaWRlbnRpZnkgYnkgbmFtZSB0aGUKLWVudGl0aWVzIG9mIGVhY2ggdHlwZSB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZS4gRm9yIGVhY2ggc3VjaCBlbnRpdHksIHRoZXJlCi1pcyBhIHNlcGFyYXRlIHNlY3Rpb24gd2hpY2ggaWRlbnRpZmllcyBob3cgdGhhdCBlbnRpdHkgaXMgY29uZmlndXJlZC4gIFRodXMsIGZvcgotYSBsb2dnZXIgbmFtZWQgYGBsb2cwMWBgIGluIHRoZSBgYFtsb2dnZXJzXWBgIHNlY3Rpb24sIHRoZSByZWxldmFudAotY29uZmlndXJhdGlvbiBkZXRhaWxzIGFyZSBoZWxkIGluIGEgc2VjdGlvbiBgYFtsb2dnZXJfbG9nMDFdYGAuIFNpbWlsYXJseSwgYQotaGFuZGxlciBjYWxsZWQgYGBoYW5kMDFgYCBpbiB0aGUgYGBbaGFuZGxlcnNdYGAgc2VjdGlvbiB3aWxsIGhhdmUgaXRzCi1jb25maWd1cmF0aW9uIGhlbGQgaW4gYSBzZWN0aW9uIGNhbGxlZCBgYFtoYW5kbGVyX2hhbmQwMV1gYCwgd2hpbGUgYSBmb3JtYXR0ZXIKLWNhbGxlZCBgYGZvcm0wMWBgIGluIHRoZSBgYFtmb3JtYXR0ZXJzXWBgIHNlY3Rpb24gd2lsbCBoYXZlIGl0cyBjb25maWd1cmF0aW9uCi1zcGVjaWZpZWQgaW4gYSBzZWN0aW9uIGNhbGxlZCBgYFtmb3JtYXR0ZXJfZm9ybTAxXWBgLiBUaGUgcm9vdCBsb2dnZXIKLWNvbmZpZ3VyYXRpb24gbXVzdCBiZSBzcGVjaWZpZWQgaW4gYSBzZWN0aW9uIGNhbGxlZCBgYFtsb2dnZXJfcm9vdF1gYC4KKyAgIFRoZSBzZWNvbmQgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudCBpcyAqc3RhY2tfaW5mbyosIHdoaWNoIGRlZmF1bHRzIHRvCisgICBGYWxzZS4gSWYgc3BlY2lmaWVkIGFzIFRydWUsIHN0YWNrIGluZm9ybWF0aW9uIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nCisgICBtZXNzYWdlLCBpbmNsdWRpbmcgdGhlIGFjdHVhbCBsb2dnaW5nIGNhbGwuIE5vdGUgdGhhdCB0aGlzIGlzIG5vdCB0aGUgc2FtZQorICAgc3RhY2sgaW5mb3JtYXRpb24gYXMgdGhhdCBkaXNwbGF5ZWQgdGhyb3VnaCBzcGVjaWZ5aW5nICpleGNfaW5mbyo6IFRoZQorICAgZm9ybWVyIGlzIHN0YWNrIGZyYW1lcyBmcm9tIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrIHVwIHRvIHRoZSBsb2dnaW5nIGNhbGwKKyAgIGluIHRoZSBjdXJyZW50IHRocmVhZCwgd2hlcmVhcyB0aGUgbGF0dGVyIGlzIGluZm9ybWF0aW9uIGFib3V0IHN0YWNrIGZyYW1lcworICAgd2hpY2ggaGF2ZSBiZWVuIHVud291bmQsIGZvbGxvd2luZyBhbiBleGNlcHRpb24sIHdoaWxlIHNlYXJjaGluZyBmb3IKKyAgIGV4Y2VwdGlvbiBoYW5kbGVycy4KIAotRXhhbXBsZXMgb2YgdGhlc2Ugc2VjdGlvbnMgaW4gdGhlIGZpbGUgYXJlIGdpdmVuIGJlbG93LiA6OgorICAgWW91IGNhbiBzcGVjaWZ5ICpzdGFja19pbmZvKiBpbmRlcGVuZGVudGx5IG9mICpleGNfaW5mbyosIGUuZy4gdG8ganVzdCBzaG93CisgICBob3cgeW91IGdvdCB0byBhIGNlcnRhaW4gcG9pbnQgaW4geW91ciBjb2RlLCBldmVuIHdoZW4gbm8gZXhjZXB0aW9ucyB3ZXJlCisgICByYWlzZWQuIFRoZSBzdGFjayBmcmFtZXMgYXJlIHByaW50ZWQgZm9sbG93aW5nIGEgaGVhZGVyIGxpbmUgd2hpY2ggc2F5czo6CiAKLSAgIFtsb2dnZXJzXQotICAga2V5cz1yb290LGxvZzAyLGxvZzAzLGxvZzA0LGxvZzA1LGxvZzA2LGxvZzA3CisgICAgICAgU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAKLSAgIFtoYW5kbGVyc10KLSAgIGtleXM9aGFuZDAxLGhhbmQwMixoYW5kMDMsaGFuZDA0LGhhbmQwNSxoYW5kMDYsaGFuZDA3LGhhbmQwOCxoYW5kMDkKKyAgIFRoaXMgbWltaWNzIHRoZSBgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOmAgd2hpY2ggaXMgdXNlZCB3aGVuCisgICBkaXNwbGF5aW5nIGV4Y2VwdGlvbiBmcmFtZXMuCiAKLSAgIFtmb3JtYXR0ZXJzXQotICAga2V5cz1mb3JtMDEsZm9ybTAyLGZvcm0wMyxmb3JtMDQsZm9ybTA1LGZvcm0wNixmb3JtMDcsZm9ybTA4LGZvcm0wOQorICAgVGhlIHRoaXJkIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgaXMgKmV4dHJhKiB3aGljaCBjYW4gYmUgdXNlZCB0byBwYXNzIGEKKyAgIGRpY3Rpb25hcnkgd2hpY2ggaXMgdXNlZCB0byBwb3B1bGF0ZSB0aGUgX19kaWN0X18gb2YgdGhlIExvZ1JlY29yZCBjcmVhdGVkIGZvcgorICAgdGhlIGxvZ2dpbmcgZXZlbnQgd2l0aCB1c2VyLWRlZmluZWQgYXR0cmlidXRlcy4gVGhlc2UgY3VzdG9tIGF0dHJpYnV0ZXMgY2FuIHRoZW4KKyAgIGJlIHVzZWQgYXMgeW91IGxpa2UuIEZvciBleGFtcGxlLCB0aGV5IGNvdWxkIGJlIGluY29ycG9yYXRlZCBpbnRvIGxvZ2dlZAorICAgbWVzc2FnZXMuIEZvciBleGFtcGxlOjoKIAotVGhlIHJvb3QgbG9nZ2VyIG11c3Qgc3BlY2lmeSBhIGxldmVsIGFuZCBhIGxpc3Qgb2YgaGFuZGxlcnMuIEFuIGV4YW1wbGUgb2YgYQotcm9vdCBsb2dnZXIgc2VjdGlvbiBpcyBnaXZlbiBiZWxvdy4gOjoKKyAgICAgIEZPUk1BVCA9ICclKGFzY3RpbWUpLTE1cyAlKGNsaWVudGlwKXMgJSh1c2VyKS04cyAlKG1lc3NhZ2UpcycKKyAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PUZPUk1BVCkKKyAgICAgIGQgPSB7J2NsaWVudGlwJzogJzE5Mi4xNjguMC4xJywgJ3VzZXInOiAnZmJsb2dncyd9CisgICAgICBsb2dnaW5nLndhcm5pbmcoJ1Byb3RvY29sIHByb2JsZW06ICVzJywgJ2Nvbm5lY3Rpb24gcmVzZXQnLCBleHRyYT1kKQogCi0gICBbbG9nZ2VyX3Jvb3RdCi0gICBsZXZlbD1OT1RTRVQKLSAgIGhhbmRsZXJzPWhhbmQwMQorICAgd291bGQgcHJpbnQgc29tZXRoaW5nIGxpa2U6OgogCi1UaGUgYGBsZXZlbGBgIGVudHJ5IGNhbiBiZSBvbmUgb2YgYGBERUJVRywgSU5GTywgV0FSTklORywgRVJST1IsIENSSVRJQ0FMYGAgb3IKLWBgTk9UU0VUYGAuIEZvciB0aGUgcm9vdCBsb2dnZXIgb25seSwgYGBOT1RTRVRgYCBtZWFucyB0aGF0IGFsbCBtZXNzYWdlcyB3aWxsIGJlCi1sb2dnZWQuIExldmVsIHZhbHVlcyBhcmUgOmZ1bmM6YGV2YWxgXCB1YXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgYGBsb2dnaW5nYGAKLXBhY2thZ2UncyBuYW1lc3BhY2UuCisgICAgICAyMDA2LTAyLTA4IDIyOjIwOjAyLDE2NSAxOTIuMTY4LjAuMSBmYmxvZ2dzICBQcm90b2NvbCBwcm9ibGVtOiBjb25uZWN0aW9uIHJlc2V0CiAKLVRoZSBgYGhhbmRsZXJzYGAgZW50cnkgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBoYW5kbGVyIG5hbWVzLCB3aGljaCBtdXN0Ci1hcHBlYXIgaW4gdGhlIGBgW2hhbmRsZXJzXWBgIHNlY3Rpb24uIFRoZXNlIG5hbWVzIG11c3QgYXBwZWFyIGluIHRoZQotYGBbaGFuZGxlcnNdYGAgc2VjdGlvbiBhbmQgaGF2ZSBjb3JyZXNwb25kaW5nIHNlY3Rpb25zIGluIHRoZSBjb25maWd1cmF0aW9uCi1maWxlLgorICAgVGhlIGtleXMgaW4gdGhlIGRpY3Rpb25hcnkgcGFzc2VkIGluICpleHRyYSogc2hvdWxkIG5vdCBjbGFzaCB3aXRoIHRoZSBrZXlzIHVzZWQKKyAgIGJ5IHRoZSBsb2dnaW5nIHN5c3RlbS4gKFNlZSB0aGUgOmNsYXNzOmBGb3JtYXR0ZXJgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUKKyAgIGluZm9ybWF0aW9uIG9uIHdoaWNoIGtleXMgYXJlIHVzZWQgYnkgdGhlIGxvZ2dpbmcgc3lzdGVtLikKIAotRm9yIGxvZ2dlcnMgb3RoZXIgdGhhbiB0aGUgcm9vdCBsb2dnZXIsIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZC4KLVRoaXMgaXMgaWxsdXN0cmF0ZWQgYnkgdGhlIGZvbGxvd2luZyBleGFtcGxlLiA6OgorICAgSWYgeW91IGNob29zZSB0byB1c2UgdGhlc2UgYXR0cmlidXRlcyBpbiBsb2dnZWQgbWVzc2FnZXMsIHlvdSBuZWVkIHRvIGV4ZXJjaXNlCisgICBzb21lIGNhcmUuIEluIHRoZSBhYm92ZSBleGFtcGxlLCBmb3IgaW5zdGFuY2UsIHRoZSA6Y2xhc3M6YEZvcm1hdHRlcmAgaGFzIGJlZW4KKyAgIHNldCB1cCB3aXRoIGEgZm9ybWF0IHN0cmluZyB3aGljaCBleHBlY3RzICdjbGllbnRpcCcgYW5kICd1c2VyJyBpbiB0aGUgYXR0cmlidXRlCisgICBkaWN0aW9uYXJ5IG9mIHRoZSBMb2dSZWNvcmQuIElmIHRoZXNlIGFyZSBtaXNzaW5nLCB0aGUgbWVzc2FnZSB3aWxsIG5vdCBiZQorICAgbG9nZ2VkIGJlY2F1c2UgYSBzdHJpbmcgZm9ybWF0dGluZyBleGNlcHRpb24gd2lsbCBvY2N1ci4gU28gaW4gdGhpcyBjYXNlLCB5b3UKKyAgIGFsd2F5cyBuZWVkIHRvIHBhc3MgdGhlICpleHRyYSogZGljdGlvbmFyeSB3aXRoIHRoZXNlIGtleXMuCiAKLSAgIFtsb2dnZXJfcGFyc2VyXQotICAgbGV2ZWw9REVCVUcKLSAgIGhhbmRsZXJzPWhhbmQwMQotICAgcHJvcGFnYXRlPTEKLSAgIHF1YWxuYW1lPWNvbXBpbGVyLnBhcnNlcgorICAgV2hpbGUgdGhpcyBtaWdodCBiZSBhbm5veWluZywgdGhpcyBmZWF0dXJlIGlzIGludGVuZGVkIGZvciB1c2UgaW4gc3BlY2lhbGl6ZWQKKyAgIGNpcmN1bXN0YW5jZXMsIHN1Y2ggYXMgbXVsdGktdGhyZWFkZWQgc2VydmVycyB3aGVyZSB0aGUgc2FtZSBjb2RlIGV4ZWN1dGVzIGluCisgICBtYW55IGNvbnRleHRzLCBhbmQgaW50ZXJlc3RpbmcgY29uZGl0aW9ucyB3aGljaCBhcmlzZSBhcmUgZGVwZW5kZW50IG9uIHRoaXMKKyAgIGNvbnRleHQgKHN1Y2ggYXMgcmVtb3RlIGNsaWVudCBJUCBhZGRyZXNzIGFuZCBhdXRoZW50aWNhdGVkIHVzZXIgbmFtZSwgaW4gdGhlCisgICBhYm92ZSBleGFtcGxlKS4gSW4gc3VjaCBjaXJjdW1zdGFuY2VzLCBpdCBpcyBsaWtlbHkgdGhhdCBzcGVjaWFsaXplZAorICAgOmNsYXNzOmBGb3JtYXR0ZXJgXCBzIHdvdWxkIGJlIHVzZWQgd2l0aCBwYXJ0aWN1bGFyIDpjbGFzczpgSGFuZGxlcmBcIHMuCiAKLVRoZSBgYGxldmVsYGAgYW5kIGBgaGFuZGxlcnNgYCBlbnRyaWVzIGFyZSBpbnRlcnByZXRlZCBhcyBmb3IgdGhlIHJvb3QgbG9nZ2VyLAotZXhjZXB0IHRoYXQgaWYgYSBub24tcm9vdCBsb2dnZXIncyBsZXZlbCBpcyBzcGVjaWZpZWQgYXMgYGBOT1RTRVRgYCwgdGhlIHN5c3RlbQotY29uc3VsdHMgbG9nZ2VycyBoaWdoZXIgdXAgdGhlIGhpZXJhcmNoeSB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBsZXZlbCBvZiB0aGUKLWxvZ2dlci4gVGhlIGBgcHJvcGFnYXRlYGAgZW50cnkgaXMgc2V0IHRvIDEgdG8gaW5kaWNhdGUgdGhhdCBtZXNzYWdlcyBtdXN0Ci1wcm9wYWdhdGUgdG8gaGFuZGxlcnMgaGlnaGVyIHVwIHRoZSBsb2dnZXIgaGllcmFyY2h5IGZyb20gdGhpcyBsb2dnZXIsIG9yIDAgdG8KLWluZGljYXRlIHRoYXQgbWVzc2FnZXMgYXJlICoqbm90KiogcHJvcGFnYXRlZCB0byBoYW5kbGVycyB1cCB0aGUgaGllcmFyY2h5LiBUaGUKLWBgcXVhbG5hbWVgYCBlbnRyeSBpcyB0aGUgaGllcmFyY2hpY2FsIGNoYW5uZWwgbmFtZSBvZiB0aGUgbG9nZ2VyLCB0aGF0IGlzIHRvCi1zYXkgdGhlIG5hbWUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24gdG8gZ2V0IHRoZSBsb2dnZXIuCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqc3RhY2tfaW5mbyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAotU2VjdGlvbnMgd2hpY2ggc3BlY2lmeSBoYW5kbGVyIGNvbmZpZ3VyYXRpb24gYXJlIGV4ZW1wbGlmaWVkIGJ5IHRoZSBmb2xsb3dpbmcuCi06OgorLi4gZnVuY3Rpb246OiBpbmZvKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCi0gICBbaGFuZGxlcl9oYW5kMDFdCi0gICBjbGFzcz1TdHJlYW1IYW5kbGVyCi0gICBsZXZlbD1OT1RTRVQKLSAgIGZvcm1hdHRlcj1mb3JtMDEKLSAgIGFyZ3M9KHN5cy5zdGRvdXQsKQorICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YElORk9gIG9uIHRoZSByb290IGxvZ2dlci4gVGhlIGFyZ3VtZW50cyBhcmUKKyAgIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgogCi1UaGUgYGBjbGFzc2BgIGVudHJ5IGluZGljYXRlcyB0aGUgaGFuZGxlcidzIGNsYXNzIChhcyBkZXRlcm1pbmVkIGJ5IDpmdW5jOmBldmFsYAotaW4gdGhlIGBgbG9nZ2luZ2BgIHBhY2thZ2UncyBuYW1lc3BhY2UpLiBUaGUgYGBsZXZlbGBgIGlzIGludGVycHJldGVkIGFzIGZvcgotbG9nZ2VycywgYW5kIGBgTk9UU0VUYGAgaXMgdGFrZW4gdG8gbWVhbiAibG9nIGV2ZXJ5dGhpbmciLgogCi1UaGUgYGBmb3JtYXR0ZXJgYCBlbnRyeSBpbmRpY2F0ZXMgdGhlIGtleSBuYW1lIG9mIHRoZSBmb3JtYXR0ZXIgZm9yIHRoaXMKLWhhbmRsZXIuIElmIGJsYW5rLCBhIGRlZmF1bHQgZm9ybWF0dGVyIChgYGxvZ2dpbmcuX2RlZmF1bHRGb3JtYXR0ZXJgYCkgaXMgdXNlZC4KLUlmIGEgbmFtZSBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYXBwZWFyIGluIHRoZSBgYFtmb3JtYXR0ZXJzXWBgIHNlY3Rpb24gYW5kIGhhdmUKLWEgY29ycmVzcG9uZGluZyBzZWN0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisuLiBmdW5jdGlvbjo6IHdhcm5pbmcobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKLVRoZSBgYGFyZ3NgYCBlbnRyeSwgd2hlbiA6ZnVuYzpgZXZhbGBcIHVhdGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBgYGxvZ2dpbmdgYAotcGFja2FnZSdzIG5hbWVzcGFjZSwgaXMgdGhlIGxpc3Qgb2YgYXJndW1lbnRzIHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGhhbmRsZXIKLWNsYXNzLiBSZWZlciB0byB0aGUgY29uc3RydWN0b3JzIGZvciB0aGUgcmVsZXZhbnQgaGFuZGxlcnMsIG9yIHRvIHRoZSBleGFtcGxlcwotYmVsb3csIHRvIHNlZSBob3cgdHlwaWNhbCBlbnRyaWVzIGFyZSBjb25zdHJ1Y3RlZC4gOjoKKyAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBXQVJOSU5HYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBhcmd1bWVudHMgYXJlCisgICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4KIAotICAgW2hhbmRsZXJfaGFuZDAyXQotICAgY2xhc3M9RmlsZUhhbmRsZXIKLSAgIGxldmVsPURFQlVHCi0gICBmb3JtYXR0ZXI9Zm9ybTAyCi0gICBhcmdzPSgncHl0aG9uLmxvZycsICd3JykKIAotICAgW2hhbmRsZXJfaGFuZDAzXQotICAgY2xhc3M9aGFuZGxlcnMuU29ja2V0SGFuZGxlcgotICAgbGV2ZWw9SU5GTwotICAgZm9ybWF0dGVyPWZvcm0wMwotICAgYXJncz0oJ2xvY2FsaG9zdCcsIGhhbmRsZXJzLkRFRkFVTFRfVENQX0xPR0dJTkdfUE9SVCkKKy4uIGZ1bmN0aW9uOjogZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKLSAgIFtoYW5kbGVyX2hhbmQwNF0KLSAgIGNsYXNzPWhhbmRsZXJzLkRhdGFncmFtSGFuZGxlcgotICAgbGV2ZWw9V0FSTgotICAgZm9ybWF0dGVyPWZvcm0wNAotICAgYXJncz0oJ2xvY2FsaG9zdCcsIGhhbmRsZXJzLkRFRkFVTFRfVURQX0xPR0dJTkdfUE9SVCkKKyAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBFUlJPUmAgb24gdGhlIHJvb3QgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQorICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDpmdW5jOmBkZWJ1Z2AuCiAKLSAgIFtoYW5kbGVyX2hhbmQwNV0KLSAgIGNsYXNzPWhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIKLSAgIGxldmVsPUVSUk9SCi0gICBmb3JtYXR0ZXI9Zm9ybTA1Ci0gICBhcmdzPSgoJ2xvY2FsaG9zdCcsIGhhbmRsZXJzLlNZU0xPR19VRFBfUE9SVCksIGhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIuTE9HX1VTRVIpCiAKLSAgIFtoYW5kbGVyX2hhbmQwNl0KLSAgIGNsYXNzPWhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyCi0gICBsZXZlbD1DUklUSUNBTAotICAgZm9ybWF0dGVyPWZvcm0wNgotICAgYXJncz0oJ1B5dGhvbiBBcHBsaWNhdGlvbicsICcnLCAnQXBwbGljYXRpb24nKQorLi4gZnVuY3Rpb246OiBjcml0aWNhbChtc2csICphcmdzLCAqKmt3YXJncykKIAotICAgW2hhbmRsZXJfaGFuZDA3XQotICAgY2xhc3M9aGFuZGxlcnMuU01UUEhhbmRsZXIKLSAgIGxldmVsPVdBUk4KLSAgIGZvcm1hdHRlcj1mb3JtMDcKLSAgIGFyZ3M9KCdsb2NhbGhvc3QnLCAnZnJvbUBhYmMnLCBbJ3VzZXIxQGFiYycsICd1c2VyMkB4eXonXSwgJ0xvZ2dlciBTdWJqZWN0JykKKyAgIExvZ3MgYSBtZXNzYWdlIHdpdGggbGV2ZWwgOmNvbnN0OmBDUklUSUNBTGAgb24gdGhlIHJvb3QgbG9nZ2VyLiBUaGUgYXJndW1lbnRzCisgICBhcmUgaW50ZXJwcmV0ZWQgYXMgZm9yIDpmdW5jOmBkZWJ1Z2AuCiAKLSAgIFtoYW5kbGVyX2hhbmQwOF0KLSAgIGNsYXNzPWhhbmRsZXJzLk1lbW9yeUhhbmRsZXIKLSAgIGxldmVsPU5PVFNFVAotICAgZm9ybWF0dGVyPWZvcm0wOAotICAgdGFyZ2V0PQotICAgYXJncz0oMTAsIEVSUk9SKQogCi0gICBbaGFuZGxlcl9oYW5kMDldCi0gICBjbGFzcz1oYW5kbGVycy5IVFRQSGFuZGxlcgotICAgbGV2ZWw9Tk9UU0VUCi0gICBmb3JtYXR0ZXI9Zm9ybTA5Ci0gICBhcmdzPSgnbG9jYWxob3N0OjkwMjInLCAnL2xvZycsICdHRVQnKQorLi4gZnVuY3Rpb246OiBleGNlcHRpb24obXNnLCAqYXJncykKKworICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YEVSUk9SYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBhcmd1bWVudHMgYXJlCisgICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4gRXhjZXB0aW9uIGluZm8gaXMgYWRkZWQgdG8gdGhlIGxvZ2dpbmcKKyAgIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gYW4gZXhjZXB0aW9uIGhhbmRsZXIuCisKKy4uIGZ1bmN0aW9uOjogbG9nKGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCAqbGV2ZWwqIG9uIHRoZSByb290IGxvZ2dlci4gVGhlIG90aGVyIGFyZ3VtZW50cyBhcmUKKyAgIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgorCisgICBQTEVBU0UgTk9URTogVGhlIGFib3ZlIG1vZHVsZS1sZXZlbCBmdW5jdGlvbnMgd2hpY2ggZGVsZWdhdGUgdG8gdGhlIHJvb3QKKyAgIGxvZ2dlciBzaG91bGQgKm5vdCogYmUgdXNlZCBpbiB0aHJlYWRzLCBpbiB2ZXJzaW9ucyBvZiBQeXRob24gZWFybGllciB0aGFuCisgICAyLjcuMSBhbmQgMy4yLCB1bmxlc3MgYXQgbGVhc3Qgb25lIGhhbmRsZXIgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHJvb3QKKyAgIGxvZ2dlciAqYmVmb3JlKiB0aGUgdGhyZWFkcyBhcmUgc3RhcnRlZC4gVGhlc2UgY29udmVuaWVuY2UgZnVuY3Rpb25zIGNhbGwKKyAgIDpmdW5jOmBiYXNpY0NvbmZpZ2AgdG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGhhbmRsZXIgaXMgYXZhaWxhYmxlOyBpbgorICAgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24sIHRoaXMgY2FuICh1bmRlciByYXJlIGNpcmN1bXN0YW5jZXMpIGxlYWQgdG8KKyAgIGhhbmRsZXJzIGJlaW5nIGFkZGVkIG11bHRpcGxlIHRpbWVzIHRvIHRoZSByb290IGxvZ2dlciwgd2hpY2ggY2FuIGluIHR1cm4KKyAgIGxlYWQgdG8gbXVsdGlwbGUgbWVzc2FnZXMgZm9yIHRoZSBzYW1lIGV2ZW50LgorCisuLiBmdW5jdGlvbjo6IGRpc2FibGUobHZsKQorCisgICBQcm92aWRlcyBhbiBvdmVycmlkaW5nIGxldmVsICpsdmwqIGZvciBhbGwgbG9nZ2VycyB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKKyAgIHRoZSBsb2dnZXIncyBvd24gbGV2ZWwuIFdoZW4gdGhlIG5lZWQgYXJpc2VzIHRvIHRlbXBvcmFyaWx5IHRocm90dGxlIGxvZ2dpbmcKKyAgIG91dHB1dCBkb3duIGFjcm9zcyB0aGUgd2hvbGUgYXBwbGljYXRpb24sIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWZ1bC4gSXRzCisgICBlZmZlY3QgaXMgdG8gZGlzYWJsZSBhbGwgbG9nZ2luZyBjYWxscyBvZiBzZXZlcml0eSAqbHZsKiBhbmQgYmVsb3csIHNvIHRoYXQKKyAgIGlmIHlvdSBjYWxsIGl0IHdpdGggYSB2YWx1ZSBvZiBJTkZPLCB0aGVuIGFsbCBJTkZPIGFuZCBERUJVRyBldmVudHMgd291bGQgYmUKKyAgIGRpc2NhcmRlZCwgd2hlcmVhcyB0aG9zZSBvZiBzZXZlcml0eSBXQVJOSU5HIGFuZCBhYm92ZSB3b3VsZCBiZSBwcm9jZXNzZWQKKyAgIGFjY29yZGluZyB0byB0aGUgbG9nZ2VyJ3MgZWZmZWN0aXZlIGxldmVsLgorCisKKy4uIGZ1bmN0aW9uOjogYWRkTGV2ZWxOYW1lKGx2bCwgbGV2ZWxOYW1lKQorCisgICBBc3NvY2lhdGVzIGxldmVsICpsdmwqIHdpdGggdGV4dCAqbGV2ZWxOYW1lKiBpbiBhbiBpbnRlcm5hbCBkaWN0aW9uYXJ5LCB3aGljaCBpcworICAgdXNlZCB0byBtYXAgbnVtZXJpYyBsZXZlbHMgdG8gYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uLCBmb3IgZXhhbXBsZSB3aGVuIGEKKyAgIDpjbGFzczpgRm9ybWF0dGVyYCBmb3JtYXRzIGEgbWVzc2FnZS4gVGhpcyBmdW5jdGlvbiBjYW4gYWxzbyBiZSB1c2VkIHRvIGRlZmluZQorICAgeW91ciBvd24gbGV2ZWxzLiBUaGUgb25seSBjb25zdHJhaW50cyBhcmUgdGhhdCBhbGwgbGV2ZWxzIHVzZWQgbXVzdCBiZQorICAgcmVnaXN0ZXJlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBsZXZlbHMgc2hvdWxkIGJlIHBvc2l0aXZlIGludGVnZXJzIGFuZCB0aGV5CisgICBzaG91bGQgaW5jcmVhc2UgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBzZXZlcml0eS4KKworICAgTk9URTogSWYgeW91IGFyZSB0aGlua2luZyBvZiBkZWZpbmluZyB5b3VyIG93biBsZXZlbHMsIHBsZWFzZSBzZWUgdGhlIHNlY3Rpb24KKyAgIG9uIDpyZWY6YGN1c3RvbS1sZXZlbHNgLgorCisuLiBmdW5jdGlvbjo6IGdldExldmVsTmFtZShsdmwpCisKKyAgIFJldHVybnMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgbG9nZ2luZyBsZXZlbCAqbHZsKi4gSWYgdGhlIGxldmVsIGlzIG9uZQorICAgb2YgdGhlIHByZWRlZmluZWQgbGV2ZWxzIDpjb25zdDpgQ1JJVElDQUxgLCA6Y29uc3Q6YEVSUk9SYCwgOmNvbnN0OmBXQVJOSU5HYCwKKyAgIDpjb25zdDpgSU5GT2Agb3IgOmNvbnN0OmBERUJVR2AgdGhlbiB5b3UgZ2V0IHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZy4gSWYgeW91CisgICBoYXZlIGFzc29jaWF0ZWQgbGV2ZWxzIHdpdGggbmFtZXMgdXNpbmcgOmZ1bmM6YGFkZExldmVsTmFtZWAgdGhlbiB0aGUgbmFtZSB5b3UKKyAgIGhhdmUgYXNzb2NpYXRlZCB3aXRoICpsdmwqIGlzIHJldHVybmVkLiBJZiBhIG51bWVyaWMgdmFsdWUgY29ycmVzcG9uZGluZyB0byBvbmUKKyAgIG9mIHRoZSBkZWZpbmVkIGxldmVscyBpcyBwYXNzZWQgaW4sIHRoZSBjb3JyZXNwb25kaW5nIHN0cmluZyByZXByZXNlbnRhdGlvbiBpcworICAgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIHN0cmluZyAnTGV2ZWwgJXMnICUgbHZsIGlzIHJldHVybmVkLgogCi1TZWN0aW9ucyB3aGljaCBzcGVjaWZ5IGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGFyZSB0eXBpZmllZCBieSB0aGUgZm9sbG93aW5nLiA6OgogCi0gICBbZm9ybWF0dGVyX2Zvcm0wMV0KLSAgIGZvcm1hdD1GMSAlKGFzY3RpbWUpcyAlKGxldmVsbmFtZSlzICUobWVzc2FnZSlzCi0gICBkYXRlZm10PQotICAgY2xhc3M9bG9nZ2luZy5Gb3JtYXR0ZXIKKy4uIGZ1bmN0aW9uOjogbWFrZUxvZ1JlY29yZChhdHRyZGljdCkKIAotVGhlIGBgZm9ybWF0YGAgZW50cnkgaXMgdGhlIG92ZXJhbGwgZm9ybWF0IHN0cmluZywgYW5kIHRoZSBgYGRhdGVmbXRgYCBlbnRyeSBpcwotdGhlIDpmdW5jOmBzdHJmdGltZWBcIC1jb21wYXRpYmxlIGRhdGUvdGltZSBmb3JtYXQgc3RyaW5nLiAgSWYgZW1wdHksIHRoZQotcGFja2FnZSBzdWJzdGl0dXRlcyBJU084NjAxIGZvcm1hdCBkYXRlL3RpbWVzLCB3aGljaCBpcyBhbG1vc3QgZXF1aXZhbGVudCB0bwotc3BlY2lmeWluZyB0aGUgZGF0ZSBmb3JtYXQgc3RyaW5nIGBgIiVZLSVtLSVkICVIOiVNOiVTImBgLiAgVGhlIElTTzg2MDEgZm9ybWF0Ci1hbHNvIHNwZWNpZmllcyBtaWxsaXNlY29uZHMsIHdoaWNoIGFyZSBhcHBlbmRlZCB0byB0aGUgcmVzdWx0IG9mIHVzaW5nIHRoZSBhYm92ZQotZm9ybWF0IHN0cmluZywgd2l0aCBhIGNvbW1hIHNlcGFyYXRvci4gIEFuIGV4YW1wbGUgdGltZSBpbiBJU084NjAxIGZvcm1hdCBpcwotYGAyMDAzLTAxLTIzIDAwOjI5OjUwLDQxMWBgLgorICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyA6Y2xhc3M6YExvZ1JlY29yZGAgaW5zdGFuY2Ugd2hvc2UgYXR0cmlidXRlcyBhcmUKKyAgIGRlZmluZWQgYnkgKmF0dHJkaWN0Ki4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHRha2luZyBhIHBpY2tsZWQKKyAgIDpjbGFzczpgTG9nUmVjb3JkYCBhdHRyaWJ1dGUgZGljdGlvbmFyeSwgc2VudCBvdmVyIGEgc29ja2V0LCBhbmQgcmVjb25zdGl0dXRpbmcKKyAgIGl0IGFzIGEgOmNsYXNzOmBMb2dSZWNvcmRgIGluc3RhbmNlIGF0IHRoZSByZWNlaXZpbmcgZW5kLgogCi1UaGUgYGBjbGFzc2BgIGVudHJ5IGlzIG9wdGlvbmFsLiAgSXQgaW5kaWNhdGVzIHRoZSBuYW1lIG9mIHRoZSBmb3JtYXR0ZXIncyBjbGFzcwotKGFzIGEgZG90dGVkIG1vZHVsZSBhbmQgY2xhc3MgbmFtZS4pICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgZm9yIGluc3RhbnRpYXRpbmcgYQotOmNsYXNzOmBGb3JtYXR0ZXJgIHN1YmNsYXNzLiAgU3ViY2xhc3NlcyBvZiA6Y2xhc3M6YEZvcm1hdHRlcmAgY2FuIHByZXNlbnQKLWV4Y2VwdGlvbiB0cmFjZWJhY2tzIGluIGFuIGV4cGFuZGVkIG9yIGNvbmRlbnNlZCBmb3JtYXQuCiAKKy4uIGZ1bmN0aW9uOjogYmFzaWNDb25maWcoKiprd2FyZ3MpCiAKLUNvbmZpZ3VyYXRpb24gc2VydmVyIGV4YW1wbGUKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKyAgIERvZXMgYmFzaWMgY29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtIGJ5IGNyZWF0aW5nIGEKKyAgIDpjbGFzczpgU3RyZWFtSGFuZGxlcmAgd2l0aCBhIGRlZmF1bHQgOmNsYXNzOmBGb3JtYXR0ZXJgIGFuZCBhZGRpbmcgaXQgdG8gdGhlCisgICByb290IGxvZ2dlci4gVGhlIGZ1bmN0aW9ucyA6ZnVuYzpgZGVidWdgLCA6ZnVuYzpgaW5mb2AsIDpmdW5jOmB3YXJuaW5nYCwKKyAgIDpmdW5jOmBlcnJvcmAgYW5kIDpmdW5jOmBjcml0aWNhbGAgd2lsbCBjYWxsIDpmdW5jOmBiYXNpY0NvbmZpZ2AgYXV0b21hdGljYWxseQorICAgaWYgbm8gaGFuZGxlcnMgYXJlIGRlZmluZWQgZm9yIHRoZSByb290IGxvZ2dlci4KIAotSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbW9kdWxlIHVzaW5nIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gc2VydmVyOjoKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIHRoZSByb290IGxvZ2dlciBhbHJlYWR5IGhhcyBoYW5kbGVycworICAgY29uZmlndXJlZCBmb3IgaXQuCiAKLSAgICBpbXBvcnQgbG9nZ2luZwotICAgIGltcG9ydCBsb2dnaW5nLmNvbmZpZwotICAgIGltcG9ydCB0aW1lCi0gICAgaW1wb3J0IG9zCisgICBQTEVBU0UgTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gdGhyZWFkCisgICBiZWZvcmUgb3RoZXIgdGhyZWFkcyBhcmUgc3RhcnRlZC4gSW4gdmVyc2lvbnMgb2YgUHl0aG9uIHByaW9yIHRvCisgICAyLjcuMSBhbmQgMy4yLCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMsCisgICBpdCBpcyBwb3NzaWJsZSAoaW4gcmFyZSBjaXJjdW1zdGFuY2VzKSB0aGF0IGEgaGFuZGxlciB3aWxsIGJlIGFkZGVkCisgICB0byB0aGUgcm9vdCBsb2dnZXIgbW9yZSB0aGFuIG9uY2UsIGxlYWRpbmcgdG8gdW5leHBlY3RlZCByZXN1bHRzCisgICBzdWNoIGFzIG1lc3NhZ2VzIGJlaW5nIGR1cGxpY2F0ZWQgaW4gdGhlIGxvZy4KIAotICAgICMgcmVhZCBpbml0aWFsIGNvbmZpZyBmaWxlCi0gICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZygibG9nZ2luZy5jb25mIikKKyAgIFRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZC4KIAotICAgICMgY3JlYXRlIGFuZCBzdGFydCBsaXN0ZW5lciBvbiBwb3J0IDk5OTkKLSAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDk5OTkpCi0gICAgdC5zdGFydCgpCisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBGb3JtYXQgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGBgZmlsZW5hbWVgYCB8IFNwZWNpZmllcyB0aGF0IGEgRmlsZUhhbmRsZXIgYmUgY3JlYXRlZCwgICAgfAorICAgfCAgICAgICAgICAgICAgfCB1c2luZyB0aGUgc3BlY2lmaWVkIGZpbGVuYW1lLCByYXRoZXIgdGhhbiBhIHwKKyAgIHwgICAgICAgICAgICAgIHwgU3RyZWFtSGFuZGxlci4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYGZpbGVtb2RlYGAgfCBTcGVjaWZpZXMgdGhlIG1vZGUgdG8gb3BlbiB0aGUgZmlsZSwgaWYgICAgIHwKKyAgIHwgICAgICAgICAgICAgIHwgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIChpZiBmaWxlbW9kZSBpcyAgICAgICB8CisgICB8ICAgICAgICAgICAgICB8IHVuc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0byAnYScpLiAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGBmb3JtYXRgYCAgIHwgVXNlIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZyBmb3IgdGhlICAgICB8CisgICB8ICAgICAgICAgICAgICB8IGhhbmRsZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGBkYXRlZm10YGAgIHwgVXNlIHRoZSBzcGVjaWZpZWQgZGF0ZS90aW1lIGZvcm1hdC4gICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHN0eWxlYGAgICAgfCBJZiBgYGZvcm1hdGBgIGlzIHNwZWNpZmllZCwgdXNlIHRoaXMgc3R5bGUgIHwKKyAgIHwgICAgICAgICAgICAgIHwgZm9yIHRoZSBmb3JtYXQgc3RyaW5nLiBPbmUgb2YgJyUnLCAneycgb3IgICB8CisgICB8ICAgICAgICAgICAgICB8ICckJyBmb3IgJS1mb3JtYXR0aW5nLCA6bWV0aDpgc3RyLmZvcm1hdGAgb3IgfAorICAgfCAgICAgICAgICAgICAgfCA6Y2xhc3M6YHN0cmluZy5UZW1wbGF0ZWAgcmVzcGVjdGl2ZWx5LCBhbmQgIHwKKyAgIHwgICAgICAgICAgICAgIHwgZGVmYXVsdGluZyB0byAnJScgaWYgbm90IHNwZWNpZmllZC4gICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYGxldmVsYGAgICAgfCBTZXQgdGhlIHJvb3QgbG9nZ2VyIGxldmVsIHRvIHRoZSBzcGVjaWZpZWQgIHwKKyAgIHwgICAgICAgICAgICAgIHwgbGV2ZWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBgYHN0cmVhbWBgICAgfCBVc2UgdGhlIHNwZWNpZmllZCBzdHJlYW0gdG8gaW5pdGlhbGl6ZSB0aGUgIHwKKyAgIHwgICAgICAgICAgICAgIHwgU3RyZWFtSGFuZGxlci4gTm90ZSB0aGF0IHRoaXMgYXJndW1lbnQgaXMgICB8CisgICB8ICAgICAgICAgICAgICB8IGluY29tcGF0aWJsZSB3aXRoICdmaWxlbmFtZScgLSBpZiBib3RoIGFyZSAgfAorICAgfCAgICAgICAgICAgICAgfCBwcmVzZW50LCAnc3RyZWFtJyBpcyBpZ25vcmVkLiAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKLSAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic2ltcGxlRXhhbXBsZSIpCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGBgc3R5bGVgYCBhcmd1bWVudCB3YXMgYWRkZWQuCiAKLSAgICB0cnk6Ci0gICAgICAgICMgbG9vcCB0aHJvdWdoIGxvZ2dpbmcgY2FsbHMgdG8gc2VlIHRoZSBkaWZmZXJlbmNlCi0gICAgICAgICMgbmV3IGNvbmZpZ3VyYXRpb25zIG1ha2UsIHVudGlsIEN0cmwrQyBpcyBwcmVzc2VkCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBsb2dnZXIuZGVidWcoImRlYnVnIG1lc3NhZ2UiKQotICAgICAgICAgICAgbG9nZ2VyLmluZm8oImluZm8gbWVzc2FnZSIpCi0gICAgICAgICAgICBsb2dnZXIud2Fybigid2FybiBtZXNzYWdlIikKLSAgICAgICAgICAgIGxvZ2dlci5lcnJvcigiZXJyb3IgbWVzc2FnZSIpCi0gICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoImNyaXRpY2FsIG1lc3NhZ2UiKQotICAgICAgICAgICAgdGltZS5zbGVlcCg1KQotICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgIyBjbGVhbnVwCi0gICAgICAgIGxvZ2dpbmcuY29uZmlnLnN0b3BMaXN0ZW5pbmcoKQotICAgICAgICB0LmpvaW4oKQogCi1BbmQgaGVyZSBpcyBhIHNjcmlwdCB0aGF0IHRha2VzIGEgZmlsZW5hbWUgYW5kIHNlbmRzIHRoYXQgZmlsZSB0byB0aGUgc2VydmVyLAotcHJvcGVybHkgcHJlY2VkZWQgd2l0aCB0aGUgYmluYXJ5LWVuY29kZWQgbGVuZ3RoLCBhcyB0aGUgbmV3IGxvZ2dpbmcKLWNvbmZpZ3VyYXRpb246OgorLi4gZnVuY3Rpb246OiBzaHV0ZG93bigpCiAKLSAgICAjIS91c3IvYmluL2VudiBweXRob24KLSAgICBpbXBvcnQgc29ja2V0LCBzeXMsIHN0cnVjdAorICAgSW5mb3JtcyB0aGUgbG9nZ2luZyBzeXN0ZW0gdG8gcGVyZm9ybSBhbiBvcmRlcmx5IHNodXRkb3duIGJ5IGZsdXNoaW5nIGFuZAorICAgY2xvc2luZyBhbGwgaGFuZGxlcnMuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhdCBhcHBsaWNhdGlvbiBleGl0IGFuZCBubworICAgZnVydGhlciB1c2Ugb2YgdGhlIGxvZ2dpbmcgc3lzdGVtIHNob3VsZCBiZSBtYWRlIGFmdGVyIHRoaXMgY2FsbC4KIAotICAgIGRhdGFfdG9fc2VuZCA9IG9wZW4oc3lzLmFyZ3ZbMV0sICJyIikucmVhZCgpCiAKLSAgICBIT1NUID0gJ2xvY2FsaG9zdCcKLSAgICBQT1JUID0gOTk5OQotICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgcHJpbnQoImNvbm5lY3RpbmcuLi4iKQotICAgIHMuY29ubmVjdCgoSE9TVCwgUE9SVCkpCi0gICAgcHJpbnQoInNlbmRpbmcgY29uZmlnLi4uIikKLSAgICBzLnNlbmQoc3RydWN0LnBhY2soIj5MIiwgbGVuKGRhdGFfdG9fc2VuZCkpKQotICAgIHMuc2VuZChkYXRhX3RvX3NlbmQpCi0gICAgcy5jbG9zZSgpCi0gICAgcHJpbnQoImNvbXBsZXRlIikKKy4uIGZ1bmN0aW9uOjogc2V0TG9nZ2VyQ2xhc3Moa2xhc3MpCiAKKyAgIFRlbGxzIHRoZSBsb2dnaW5nIHN5c3RlbSB0byB1c2UgdGhlIGNsYXNzICprbGFzcyogd2hlbiBpbnN0YW50aWF0aW5nIGEgbG9nZ2VyLgorICAgVGhlIGNsYXNzIHNob3VsZCBkZWZpbmUgOm1ldGg6YF9faW5pdF9fYCBzdWNoIHRoYXQgb25seSBhIG5hbWUgYXJndW1lbnQgaXMKKyAgIHJlcXVpcmVkLCBhbmQgdGhlIDptZXRoOmBfX2luaXRfX2Agc2hvdWxkIGNhbGwgOm1ldGg6YExvZ2dlci5fX2luaXRfX2AuIFRoaXMKKyAgIGZ1bmN0aW9uIGlzIHR5cGljYWxseSBjYWxsZWQgYmVmb3JlIGFueSBsb2dnZXJzIGFyZSBpbnN0YW50aWF0ZWQgYnkgYXBwbGljYXRpb25zCisgICB3aGljaCBuZWVkIHRvIHVzZSBjdXN0b20gbG9nZ2VyIGJlaGF2aW9yLgogCi1Nb3JlIGV4YW1wbGVzCi0tLS0tLS0tLS0tLS0tCiAKLU11bHRpcGxlIGhhbmRsZXJzIGFuZCBmb3JtYXR0ZXJzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorLi4gZnVuY3Rpb246OiBzZXRMb2dSZWNvcmRGYWN0b3J5KGZhY3RvcnkpCiAKLUxvZ2dlcnMgYXJlIHBsYWluIFB5dGhvbiBvYmplY3RzLiAgVGhlIDpmdW5jOmBhZGRIYW5kbGVyYCBtZXRob2QgaGFzIG5vIG1pbmltdW0KLW9yIG1heGltdW0gcXVvdGEgZm9yIHRoZSBudW1iZXIgb2YgaGFuZGxlcnMgeW91IG1heSBhZGQuICBTb21ldGltZXMgaXQgd2lsbCBiZQotYmVuZWZpY2lhbCBmb3IgYW4gYXBwbGljYXRpb24gdG8gbG9nIGFsbCBtZXNzYWdlcyBvZiBhbGwgc2V2ZXJpdGllcyB0byBhIHRleHQKLWZpbGUgd2hpbGUgc2ltdWx0YW5lb3VzbHkgbG9nZ2luZyBlcnJvcnMgb3IgYWJvdmUgdG8gdGhlIGNvbnNvbGUuICBUbyBzZXQgdGhpcwotdXAsIHNpbXBseSBjb25maWd1cmUgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXJzLiAgVGhlIGxvZ2dpbmcgY2FsbHMgaW4gdGhlCi1hcHBsaWNhdGlvbiBjb2RlIHdpbGwgcmVtYWluIHVuY2hhbmdlZC4gIEhlcmUgaXMgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIHRvIHRoZQotcHJldmlvdXMgc2ltcGxlIG1vZHVsZS1iYXNlZCBjb25maWd1cmF0aW9uIGV4YW1wbGU6OgorICAgU2V0IGEgY2FsbGFibGUgd2hpY2ggaXMgdXNlZCB0byBjcmVhdGUgYSA6Y2xhc3M6YExvZ1JlY29yZGAuCiAKLSAgICBpbXBvcnQgbG9nZ2luZworICAgOnBhcmFtIGZhY3Rvcnk6IFRoZSBmYWN0b3J5IGNhbGxhYmxlIHRvIGJlIHVzZWQgdG8gaW5zdGFudGlhdGUgYSBsb2cgcmVjb3JkLgogCi0gICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNpbXBsZV9leGFtcGxlIikKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIGNyZWF0ZSBmaWxlIGhhbmRsZXIgd2hpY2ggbG9ncyBldmVuIGRlYnVnIG1lc3NhZ2VzCi0gICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCJzcGFtLmxvZyIpCi0gICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIGhpZ2hlciBsb2cgbGV2ZWwKLSAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCi0gICAgY2guc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKLSAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIgYW5kIGFkZCBpdCB0byB0aGUgaGFuZGxlcnMKLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIpCi0gICAgY2guc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICBmaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQotICAgICMgYWRkIHRoZSBoYW5kbGVycyB0byBsb2dnZXIKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihjaCkKLSAgICBsb2dnZXIuYWRkSGFuZGxlcihmaCkKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgVGhpcyBmdW5jdGlvbiBoYXMgYmVlbiBwcm92aWRlZCwgYWxvbmcgd2l0aCA6ZnVuYzpgZ2V0TG9nUmVjb3JkRmFjdG9yeWAsIHRvCisgICAgICBhbGxvdyBkZXZlbG9wZXJzIG1vcmUgY29udHJvbCBvdmVyIGhvdyB0aGUgOmNsYXNzOmBMb2dSZWNvcmRgIHJlcHJlc2VudGluZworICAgICAgYSBsb2dnaW5nIGV2ZW50IGlzIGNvbnN0cnVjdGVkLgogCi0gICAgIyAiYXBwbGljYXRpb24iIGNvZGUKLSAgICBsb2dnZXIuZGVidWcoImRlYnVnIG1lc3NhZ2UiKQotICAgIGxvZ2dlci5pbmZvKCJpbmZvIG1lc3NhZ2UiKQotICAgIGxvZ2dlci53YXJuKCJ3YXJuIG1lc3NhZ2UiKQotICAgIGxvZ2dlci5lcnJvcigiZXJyb3IgbWVzc2FnZSIpCi0gICAgbG9nZ2VyLmNyaXRpY2FsKCJjcml0aWNhbCBtZXNzYWdlIikKKyAgIFRoZSBmYWN0b3J5IGhhcyB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKIAotTm90aWNlIHRoYXQgdGhlICJhcHBsaWNhdGlvbiIgY29kZSBkb2VzIG5vdCBjYXJlIGFib3V0IG11bHRpcGxlIGhhbmRsZXJzLiAgQWxsCi10aGF0IGNoYW5nZWQgd2FzIHRoZSBhZGRpdGlvbiBhbmQgY29uZmlndXJhdGlvbiBvZiBhIG5ldyBoYW5kbGVyIG5hbWVkICpmaCouCisgICBgYGZhY3RvcnkobmFtZSwgbGV2ZWwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmM9Tm9uZSwgc2luZm89Tm9uZSwgKiprd2FyZ3MpYGAKIAotVGhlIGFiaWxpdHkgdG8gY3JlYXRlIG5ldyBoYW5kbGVycyB3aXRoIGhpZ2hlci0gb3IgbG93ZXItc2V2ZXJpdHkgZmlsdGVycyBjYW4gYmUKLXZlcnkgaGVscGZ1bCB3aGVuIHdyaXRpbmcgYW5kIHRlc3RpbmcgYW4gYXBwbGljYXRpb24uICBJbnN0ZWFkIG9mIHVzaW5nIG1hbnkKLWBgcHJpbnRgYCBzdGF0ZW1lbnRzIGZvciBkZWJ1Z2dpbmcsIHVzZSBgYGxvZ2dlci5kZWJ1Z2BgOiBVbmxpa2UgdGhlIHByaW50Ci1zdGF0ZW1lbnRzLCB3aGljaCB5b3Ugd2lsbCBoYXZlIHRvIGRlbGV0ZSBvciBjb21tZW50IG91dCBsYXRlciwgdGhlIGxvZ2dlci5kZWJ1Zwotc3RhdGVtZW50cyBjYW4gcmVtYWluIGludGFjdCBpbiB0aGUgc291cmNlIGNvZGUgYW5kIHJlbWFpbiBkb3JtYW50IHVudGlsIHlvdQotbmVlZCB0aGVtIGFnYWluLiAgQXQgdGhhdCB0aW1lLCB0aGUgb25seSBjaGFuZ2UgdGhhdCBuZWVkcyB0byBoYXBwZW4gaXMgdG8KLW1vZGlmeSB0aGUgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIGxvZ2dlciBhbmQvb3IgaGFuZGxlciB0byBkZWJ1Zy4KKyAgICAgIDpuYW1lOiBUaGUgbG9nZ2VyIG5hbWUuCisgICAgICA6bGV2ZWw6IFRoZSBsb2dnaW5nIGxldmVsIChudW1lcmljKS4KKyAgICAgIDpmbjogVGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIGxvZ2dpbmcgY2FsbCB3YXMgbWFkZS4KKyAgICAgIDpsbm86IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSB3aGVyZSB0aGUgbG9nZ2luZyBjYWxsIHdhcyBtYWRlLgorICAgICAgOm1zZzogVGhlIGxvZ2dpbmcgbWVzc2FnZS4KKyAgICAgIDphcmdzOiBUaGUgYXJndW1lbnRzIGZvciB0aGUgbG9nZ2luZyBtZXNzYWdlLgorICAgICAgOmV4Y19pbmZvOiBBbiBleGNlcHRpb24gdHVwbGUsIG9yIE5vbmUuCisgICAgICA6ZnVuYzogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCBpbnZva2VkIHRoZSBsb2dnaW5nCisgICAgICAgICAgICAgY2FsbC4KKyAgICAgIDpzaW5mbzogQSBzdGFjayB0cmFjZWJhY2sgc3VjaCBhcyBpcyBwcm92aWRlZCBieQorICAgICAgICAgICAgICA6ZnVuYzpgdHJhY2ViYWNrLnByaW50X3N0YWNrYCwgc2hvd2luZyB0aGUgY2FsbCBoaWVyYXJjaHkuCisgICAgICA6a3dhcmdzOiBBZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLgogCiAKLVVzaW5nIGxvZ2dpbmcgaW4gbXVsdGlwbGUgbW9kdWxlcwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCitJbnRlZ3JhdGlvbiB3aXRoIHRoZSB3YXJuaW5ncyBtb2R1bGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1JdCB3YXMgbWVudGlvbmVkIGFib3ZlIHRoYXQgbXVsdGlwbGUgY2FsbHMgdG8KLWBgbG9nZ2luZy5nZXRMb2dnZXIoJ3NvbWVMb2dnZXInKWBgIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBsb2dnZXIKLW9iamVjdC4gIFRoaXMgaXMgdHJ1ZSBub3Qgb25seSB3aXRoaW4gdGhlIHNhbWUgbW9kdWxlLCBidXQgYWxzbyBhY3Jvc3MgbW9kdWxlcwotYXMgbG9uZyBhcyBpdCBpcyBpbiB0aGUgc2FtZSBQeXRob24gaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIEl0IGlzIHRydWUgZm9yCi1yZWZlcmVuY2VzIHRvIHRoZSBzYW1lIG9iamVjdDsgYWRkaXRpb25hbGx5LCBhcHBsaWNhdGlvbiBjb2RlIGNhbiBkZWZpbmUgYW5kCi1jb25maWd1cmUgYSBwYXJlbnQgbG9nZ2VyIGluIG9uZSBtb2R1bGUgYW5kIGNyZWF0ZSAoYnV0IG5vdCBjb25maWd1cmUpIGEgY2hpbGQKLWxvZ2dlciBpbiBhIHNlcGFyYXRlIG1vZHVsZSwgYW5kIGFsbCBsb2dnZXIgY2FsbHMgdG8gdGhlIGNoaWxkIHdpbGwgcGFzcyB1cCB0bwotdGhlIHBhcmVudC4gIEhlcmUgaXMgYSBtYWluIG1vZHVsZTo6CitUaGUgOmZ1bmM6YGNhcHR1cmVXYXJuaW5nc2AgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gaW50ZWdyYXRlIDptb2Q6YGxvZ2dpbmdgCit3aXRoIHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlLgogCi0gICAgaW1wb3J0IGxvZ2dpbmcKLSAgICBpbXBvcnQgYXV4aWxpYXJ5X21vZHVsZQorLi4gZnVuY3Rpb246OiBjYXB0dXJlV2FybmluZ3MoY2FwdHVyZSkKIAotICAgICMgY3JlYXRlIGxvZ2dlciB3aXRoICJzcGFtX2FwcGxpY2F0aW9uIgotICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzcGFtX2FwcGxpY2F0aW9uIikKLSAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIGNyZWF0ZSBmaWxlIGhhbmRsZXIgd2hpY2ggbG9ncyBldmVuIGRlYnVnIG1lc3NhZ2VzCi0gICAgZmggPSBsb2dnaW5nLkZpbGVIYW5kbGVyKCJzcGFtLmxvZyIpCi0gICAgZmguc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKLSAgICAjIGNyZWF0ZSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIGhpZ2hlciBsb2cgbGV2ZWwKLSAgICBjaCA9IGxvZ2dpbmcuU3RyZWFtSGFuZGxlcigpCi0gICAgY2guc2V0TGV2ZWwobG9nZ2luZy5FUlJPUikKLSAgICAjIGNyZWF0ZSBmb3JtYXR0ZXIgYW5kIGFkZCBpdCB0byB0aGUgaGFuZGxlcnMKLSAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcigiJShhc2N0aW1lKXMgLSAlKG5hbWUpcyAtICUobGV2ZWxuYW1lKXMgLSAlKG1lc3NhZ2UpcyIpCi0gICAgZmguc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKLSAgICBjaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyKQotICAgICMgYWRkIHRoZSBoYW5kbGVycyB0byB0aGUgbG9nZ2VyCi0gICAgbG9nZ2VyLmFkZEhhbmRsZXIoZmgpCi0gICAgbG9nZ2VyLmFkZEhhbmRsZXIoY2gpCisgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHVybiB0aGUgY2FwdHVyZSBvZiB3YXJuaW5ncyBieSBsb2dnaW5nIG9uIGFuZAorICAgb2ZmLgogCi0gICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5IikKLSAgICBhID0gYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkoKQotICAgIGxvZ2dlci5pbmZvKCJjcmVhdGVkIGFuIGluc3RhbmNlIG9mIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5IikKLSAgICBsb2dnZXIuaW5mbygiY2FsbGluZyBhdXhpbGlhcnlfbW9kdWxlLkF1eGlsaWFyeS5kb19zb21ldGhpbmciKQotICAgIGEuZG9fc29tZXRoaW5nKCkKLSAgICBsb2dnZXIuaW5mbygiZmluaXNoZWQgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkuZG9fc29tZXRoaW5nIikKLSAgICBsb2dnZXIuaW5mbygiY2FsbGluZyBhdXhpbGlhcnlfbW9kdWxlLnNvbWVfZnVuY3Rpb24oKSIpCi0gICAgYXV4aWxpYXJ5X21vZHVsZS5zb21lX2Z1bmN0aW9uKCkKLSAgICBsb2dnZXIuaW5mbygiZG9uZSB3aXRoIGF1eGlsaWFyeV9tb2R1bGUuc29tZV9mdW5jdGlvbigpIikKKyAgIElmICpjYXB0dXJlKiBpcyBgYFRydWVgYCwgd2FybmluZ3MgaXNzdWVkIGJ5IHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlIHdpbGwKKyAgIGJlIHJlZGlyZWN0ZWQgdG8gdGhlIGxvZ2dpbmcgc3lzdGVtLiBTcGVjaWZpY2FsbHksIGEgd2FybmluZyB3aWxsIGJlCisgICBmb3JtYXR0ZWQgdXNpbmcgOmZ1bmM6YHdhcm5pbmdzLmZvcm1hdHdhcm5pbmdgIGFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZworICAgbG9nZ2VkIHRvIGEgbG9nZ2VyIG5hbWVkICdweS53YXJuaW5ncycgd2l0aCBhIHNldmVyaXR5IG9mIGBXQVJOSU5HYC4KIAotSGVyZSBpcyB0aGUgYXV4aWxpYXJ5IG1vZHVsZTo6CisgICBJZiAqY2FwdHVyZSogaXMgYGBGYWxzZWBgLCB0aGUgcmVkaXJlY3Rpb24gb2Ygd2FybmluZ3MgdG8gdGhlIGxvZ2dpbmcgc3lzdGVtCisgICB3aWxsIHN0b3AsIGFuZCB3YXJuaW5ncyB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlaXIgb3JpZ2luYWwgZGVzdGluYXRpb25zCisgICAoaS5lLiB0aG9zZSBpbiBlZmZlY3QgYmVmb3JlIGBjYXB0dXJlV2FybmluZ3MoVHJ1ZSlgIHdhcyBjYWxsZWQpLgogCi0gICAgaW1wb3J0IGxvZ2dpbmcKIAotICAgICMgY3JlYXRlIGxvZ2dlcgotICAgIG1vZHVsZV9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigic3BhbV9hcHBsaWNhdGlvbi5hdXhpbGlhcnkiKQorLi4gc2VlYWxzbzo6CiAKLSAgICBjbGFzcyBBdXhpbGlhcnk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIHNlbGYubG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoInNwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5LkF1eGlsaWFyeSIpCi0gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKCJjcmVhdGluZyBhbiBpbnN0YW5jZSBvZiBBdXhpbGlhcnkiKQotICAgICAgICBkZWYgZG9fc29tZXRoaW5nKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiZG9pbmcgc29tZXRoaW5nIikKLSAgICAgICAgICAgIGEgPSAxICsgMQotICAgICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiZG9uZSBkb2luZyBzb21ldGhpbmciKQorICAgTW9kdWxlIDptb2Q6YGxvZ2dpbmcuY29uZmlnYAorICAgICAgQ29uZmlndXJhdGlvbiBBUEkgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4KIAotICAgIGRlZiBzb21lX2Z1bmN0aW9uKCk6Ci0gICAgICAgIG1vZHVsZV9sb2dnZXIuaW5mbygicmVjZWl2ZWQgYSBjYWxsIHRvIFwic29tZV9mdW5jdGlvblwiIikKKyAgIE1vZHVsZSA6bW9kOmBsb2dnaW5nLmhhbmRsZXJzYAorICAgICAgVXNlZnVsIGhhbmRsZXJzIGluY2x1ZGVkIHdpdGggdGhlIGxvZ2dpbmcgbW9kdWxlLgogCi1UaGUgb3V0cHV0IGxvb2tzIGxpa2UgdGhpczo6CisgICA6cGVwOmAyODJgIC0gQSBMb2dnaW5nIFN5c3RlbQorICAgICAgVGhlIHByb3Bvc2FsIHdoaWNoIGRlc2NyaWJlZCB0aGlzIGZlYXR1cmUgZm9yIGluY2x1c2lvbiBpbiB0aGUgUHl0aG9uIHN0YW5kYXJkCisgICAgICBsaWJyYXJ5LgogCi0gICAgMjAwNS0wMy0yMyAyMzo0NzoxMSw2NjMgLSBzcGFtX2FwcGxpY2F0aW9uIC0gSU5GTyAtCi0gICAgICAgY3JlYXRpbmcgYW4gaW5zdGFuY2Ugb2YgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkKLSAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY2NSAtIHNwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5LkF1eGlsaWFyeSAtIElORk8gLQotICAgICAgIGNyZWF0aW5nIGFuIGluc3RhbmNlIG9mIEF1eGlsaWFyeQotICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjY1IC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQotICAgICAgIGNyZWF0ZWQgYW4gaW5zdGFuY2Ugb2YgYXV4aWxpYXJ5X21vZHVsZS5BdXhpbGlhcnkKLSAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY2OCAtIHNwYW1fYXBwbGljYXRpb24gLSBJTkZPIC0KLSAgICAgICBjYWxsaW5nIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5LmRvX3NvbWV0aGluZwotICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjY4IC0gc3BhbV9hcHBsaWNhdGlvbi5hdXhpbGlhcnkuQXV4aWxpYXJ5IC0gSU5GTyAtCi0gICAgICAgZG9pbmcgc29tZXRoaW5nCi0gICAgMjAwNS0wMy0yMyAyMzo0NzoxMSw2NjkgLSBzcGFtX2FwcGxpY2F0aW9uLmF1eGlsaWFyeS5BdXhpbGlhcnkgLSBJTkZPIC0KLSAgICAgICBkb25lIGRvaW5nIHNvbWV0aGluZwotICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjcwIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQotICAgICAgIGZpbmlzaGVkIGF1eGlsaWFyeV9tb2R1bGUuQXV4aWxpYXJ5LmRvX3NvbWV0aGluZwotICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjcxIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQotICAgICAgIGNhbGxpbmcgYXV4aWxpYXJ5X21vZHVsZS5zb21lX2Z1bmN0aW9uKCkKLSAgICAyMDA1LTAzLTIzIDIzOjQ3OjExLDY3MiAtIHNwYW1fYXBwbGljYXRpb24uYXV4aWxpYXJ5IC0gSU5GTyAtCi0gICAgICAgcmVjZWl2ZWQgYSBjYWxsIHRvICJzb21lX2Z1bmN0aW9uIgotICAgIDIwMDUtMDMtMjMgMjM6NDc6MTEsNjczIC0gc3BhbV9hcHBsaWNhdGlvbiAtIElORk8gLQotICAgICAgIGRvbmUgd2l0aCBhdXhpbGlhcnlfbW9kdWxlLnNvbWVfZnVuY3Rpb24oKQorICAgYE9yaWdpbmFsIFB5dGhvbiBsb2dnaW5nIHBhY2thZ2UgPGh0dHA6Ly93d3cucmVkLWRvdmUuY29tL3B5dGhvbl9sb2dnaW5nLmh0bWw+YF8KKyAgICAgIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHNvdXJjZSBmb3IgdGhlIDptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UuICBUaGUgdmVyc2lvbiBvZiB0aGUKKyAgICAgIHBhY2thZ2UgYXZhaWxhYmxlIGZyb20gdGhpcyBzaXRlIGlzIHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBQeXRob24gMS41LjIsIDIuMS54CisgICAgICBhbmQgMi4yLngsIHdoaWNoIGRvIG5vdCBpbmNsdWRlIHRoZSA6bW9kOmBsb2dnaW5nYCBwYWNrYWdlIGluIHRoZSBzdGFuZGFyZAorICAgICAgbGlicmFyeS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFpbGJveC5yc3QgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAppbmRleCA3NDA5YWY1Li5mZjhjZmVhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdApAQCAtODEsMTMgKzgxLDE2IEBACiAgICAgICBpdC4KIAogICAgICAgUGFyYW1ldGVyICptZXNzYWdlKiBtYXkgYmUgYSA6Y2xhc3M6YE1lc3NhZ2VgIGluc3RhbmNlLCBhbgotICAgICAgOmNsYXNzOmBlbWFpbC5NZXNzYWdlLk1lc3NhZ2VgIGluc3RhbmNlLCBhIHN0cmluZywgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0Ci0gICAgICAod2hpY2ggc2hvdWxkIGJlIG9wZW4gaW4gdGV4dCBtb2RlKS4gSWYgKm1lc3NhZ2UqIGlzIGFuIGluc3RhbmNlIG9mIHRoZQorICAgICAgOmNsYXNzOmBlbWFpbC5NZXNzYWdlLk1lc3NhZ2VgIGluc3RhbmNlLCBhIHN0cmluZywgYSBieXRlIHN0cmluZywgb3IgYQorICAgICAgZmlsZS1saWtlIG9iamVjdCAod2hpY2ggc2hvdWxkIGJlIG9wZW4gaW4gYmluYXJ5IG1vZGUpLiBJZiAqbWVzc2FnZSogaXMKKyAgICAgIGFuIGluc3RhbmNlIG9mIHRoZQogICAgICAgYXBwcm9wcmlhdGUgZm9ybWF0LXNwZWNpZmljIDpjbGFzczpgTWVzc2FnZWAgc3ViY2xhc3MgKGUuZy4sIGlmIGl0J3MgYW4KICAgICAgIDpjbGFzczpgbWJveE1lc3NhZ2VgIGluc3RhbmNlIGFuZCB0aGlzIGlzIGFuIDpjbGFzczpgbWJveGAgaW5zdGFuY2UpLCBpdHMKICAgICAgIGZvcm1hdC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyB1c2VkLiBPdGhlcndpc2UsIHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yCiAgICAgICBmb3JtYXQtc3BlY2lmaWMgaW5mb3JtYXRpb24gYXJlIHVzZWQuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yIHN1cHBvcnQgZm9yIGJpbmFyeSBpbnB1dAorCiAKICAgIC4uIG1ldGhvZDo6IHJlbW92ZShrZXkpCiAgICAgICAgICAgICAgICBfX2RlbGl0ZW1fXyhrZXkpCkBAIC0xMDgsOCArMTExLDkgQEAKICAgICAgIDpleGM6YEtleUVycm9yYCBleGNlcHRpb24gaWYgbm8gbWVzc2FnZSBhbHJlYWR5IGNvcnJlc3BvbmRzIHRvICprZXkqLgogCiAgICAgICBBcyB3aXRoIDptZXRoOmBhZGRgLCBwYXJhbWV0ZXIgKm1lc3NhZ2UqIG1heSBiZSBhIDpjbGFzczpgTWVzc2FnZWAKLSAgICAgIGluc3RhbmNlLCBhbiA6Y2xhc3M6YGVtYWlsLk1lc3NhZ2UuTWVzc2FnZWAgaW5zdGFuY2UsIGEgc3RyaW5nLCBvciBhCi0gICAgICBmaWxlLWxpa2Ugb2JqZWN0ICh3aGljaCBzaG91bGQgYmUgb3BlbiBpbiB0ZXh0IG1vZGUpLiBJZiAqbWVzc2FnZSogaXMgYW4KKyAgICAgIGluc3RhbmNlLCBhbiA6Y2xhc3M6YGVtYWlsLk1lc3NhZ2UuTWVzc2FnZWAgaW5zdGFuY2UsIGEgc3RyaW5nLCBhIGJ5dGUKKyAgICAgIHN0cmluZywgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0ICh3aGljaCBzaG91bGQgYmUgb3BlbiBpbiBiaW5hcnkgbW9kZSkuIElmCisgICAgICAqbWVzc2FnZSogaXMgYW4KICAgICAgIGluc3RhbmNlIG9mIHRoZSBhcHByb3ByaWF0ZSBmb3JtYXQtc3BlY2lmaWMgOmNsYXNzOmBNZXNzYWdlYCBzdWJjbGFzcwogICAgICAgKGUuZy4sIGlmIGl0J3MgYW4gOmNsYXNzOmBtYm94TWVzc2FnZWAgaW5zdGFuY2UgYW5kIHRoaXMgaXMgYW4KICAgICAgIDpjbGFzczpgbWJveGAgaW5zdGFuY2UpLCBpdHMgZm9ybWF0LXNwZWNpZmljIGluZm9ybWF0aW9uIGlzCkBAIC0xNzEsMjQgKzE3NSw0MCBAQAogICAgICAgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZXhjZXB0aW9uIGlmIG5vIHN1Y2ggbWVzc2FnZSBleGlzdHMuCiAKIAorICAgLi4gbWV0aG9kOjogZ2V0X2J5dGVzKGtleSkKKworICAgICAgUmV0dXJuIGEgYnl0ZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvICprZXkqLCBvcgorICAgICAgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZXhjZXB0aW9uIGlmIG5vIHN1Y2ggbWVzc2FnZSBleGlzdHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKICAgIC4uIG1ldGhvZDo6IGdldF9zdHJpbmcoa2V5KQogCiAgICAgICBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UgY29ycmVzcG9uZGluZyB0byAqa2V5Kiwgb3IKLSAgICAgIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGV4Y2VwdGlvbiBpZiBubyBzdWNoIG1lc3NhZ2UgZXhpc3RzLgorICAgICAgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZXhjZXB0aW9uIGlmIG5vIHN1Y2ggbWVzc2FnZSBleGlzdHMuICBUaGUKKyAgICAgIG1lc3NhZ2UgaXMgcHJvY2Vzc2VkIHRocm91Z2ggOmNsYXNzOmBlbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHRvCisgICAgICBjb252ZXJ0IGl0IHRvIGEgN2JpdCBjbGVhbiByZXByZXNlbnRhdGlvbi4KIAogCiAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZShrZXkpCiAKICAgICAgIFJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBjb3JyZXNwb25kaW5nIHRvICprZXkqLAotICAgICAgb3IgcmFpc2UgYSA6ZXhjOmBLZXlFcnJvcmAgZXhjZXB0aW9uIGlmIG5vIHN1Y2ggbWVzc2FnZSBleGlzdHMuIFRoZQotICAgICAgZmlsZS1saWtlIG9iamVjdCBiZWhhdmVzIGFzIGlmIG9wZW4gaW4gYmluYXJ5IG1vZGUuIFRoaXMgZmlsZSBzaG91bGQgYmUKKyAgICAgIG9yIHJhaXNlIGEgOmV4YzpgS2V5RXJyb3JgIGV4Y2VwdGlvbiBpZiBubyBzdWNoIG1lc3NhZ2UgZXhpc3RzLiAgVGhlCisgICAgICBmaWxlLWxpa2Ugb2JqZWN0IGJlaGF2ZXMgYXMgaWYgb3BlbiBpbiBiaW5hcnkgbW9kZS4gIFRoaXMgZmlsZSBzaG91bGQgYmUKICAgICAgIGNsb3NlZCBvbmNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAgICBUaGUgZmlsZSBvYmplY3QgcmVhbGx5IGlzIGEgYmluYXJ5IGZpbGU7IHByZXZpb3VzbHkgaXQgd2FzIGluY29ycmVjdGx5CisgICAgICAgICByZXR1cm5lZCBpbiB0ZXh0IG1vZGUuICBBbHNvLCB0aGUgZmlsZS1saWtlIG9iamVjdCBub3cgc3VwcG9ydHMgdGhlCisgICAgICAgICBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2w6IHlvdSBjYW4gdXNlIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bworICAgICAgICAgYXV0b21hdGljYWxseSBjbG9zZSBpdC4KKwogICAgICAgLi4gbm90ZTo6CiAKICAgICAgICAgIFVubGlrZSBvdGhlciByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMsIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbnMgYXJlCiAgICAgICAgICBub3QgbmVjZXNzYXJpbHkgaW5kZXBlbmRlbnQgb2YgdGhlIDpjbGFzczpgTWFpbGJveGAgaW5zdGFuY2UgdGhhdAotICAgICAgICAgY3JlYXRlZCB0aGVtIG9yIG9mIHRoZSB1bmRlcmx5aW5nIG1haWxib3guIE1vcmUgc3BlY2lmaWMgZG9jdW1lbnRhdGlvbgorICAgICAgICAgY3JlYXRlZCB0aGVtIG9yIG9mIHRoZSB1bmRlcmx5aW5nIG1haWxib3guICBNb3JlIHNwZWNpZmljIGRvY3VtZW50YXRpb24KICAgICAgICAgIGlzIHByb3ZpZGVkIGJ5IGVhY2ggc3ViY2xhc3MuCiAKIApAQCAtNDUyLDcgKzQ3Miw3IEBACiAgICAgICAgICAgICAgICB1bmxvY2soKQogCiAgICAgICBUaHJlZSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIHVzZWQtLS1kb3QgbG9ja2luZyBhbmQsIGlmIGF2YWlsYWJsZSwgdGhlCi0gICAgICA6Y2Z1bmM6YGZsb2NrYCBhbmQgOmNmdW5jOmBsb2NrZmAgc3lzdGVtIGNhbGxzLgorICAgICAgOmM6ZnVuYzpgZmxvY2tgIGFuZCA6YzpmdW5jOmBsb2NrZmAgc3lzdGVtIGNhbGxzLgogCiAKIC4uIHNlZWFsc286OgpAQCAtNTY2LDcgKzU4Niw3IEBACiAgICAgICAgICAgICAgICB1bmxvY2soKQogCiAgICAgICBUaHJlZSBsb2NraW5nIG1lY2hhbmlzbXMgYXJlIHVzZWQtLS1kb3QgbG9ja2luZyBhbmQsIGlmIGF2YWlsYWJsZSwgdGhlCi0gICAgICA6Y2Z1bmM6YGZsb2NrYCBhbmQgOmNmdW5jOmBsb2NrZmAgc3lzdGVtIGNhbGxzLiBGb3IgTUggbWFpbGJveGVzLCBsb2NraW5nCisgICAgICA6YzpmdW5jOmBmbG9ja2AgYW5kIDpjOmZ1bmM6YGxvY2tmYCBzeXN0ZW0gY2FsbHMuIEZvciBNSCBtYWlsYm94ZXMsIGxvY2tpbmcKICAgICAgIHRoZSBtYWlsYm94IG1lYW5zIGxvY2tpbmcgdGhlIDpmaWxlOmAubWhfc2VxdWVuY2VzYCBmaWxlIGFuZCwgb25seSBmb3IgdGhlCiAgICAgICBkdXJhdGlvbiBvZiBhbnkgb3BlcmF0aW9ucyB0aGF0IGFmZmVjdCB0aGVtLCBsb2NraW5nIGluZGl2aWR1YWwgbWVzc2FnZQogICAgICAgZmlsZXMuCkBAIC02NjQsNyArNjg0LDcgQEAKICAgICAgICAgICAgICAgIHVubG9jaygpCiAKICAgICAgIFRocmVlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgdXNlZC0tLWRvdCBsb2NraW5nIGFuZCwgaWYgYXZhaWxhYmxlLCB0aGUKLSAgICAgIDpjZnVuYzpgZmxvY2tgIGFuZCA6Y2Z1bmM6YGxvY2tmYCBzeXN0ZW0gY2FsbHMuCisgICAgICA6YzpmdW5jOmBmbG9ja2AgYW5kIDpjOmZ1bmM6YGxvY2tmYCBzeXN0ZW0gY2FsbHMuCiAKIAogLi4gc2VlYWxzbzo6CkBAIC03MTUsNyArNzM1LDcgQEAKICAgICAgICAgICAgICAgIHVubG9jaygpCiAKICAgICAgIFRocmVlIGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgdXNlZC0tLWRvdCBsb2NraW5nIGFuZCwgaWYgYXZhaWxhYmxlLCB0aGUKLSAgICAgIDpjZnVuYzpgZmxvY2tgIGFuZCA6Y2Z1bmM6YGxvY2tmYCBzeXN0ZW0gY2FsbHMuCisgICAgICA6YzpmdW5jOmBmbG9ja2AgYW5kIDpjOmZ1bmM6YGxvY2tmYCBzeXN0ZW0gY2FsbHMuCiAKIAogLi4gc2VlYWxzbzo6CkBAIC03NDIsOSArNzYyLDExIEBACiAgICBJZiAqbWVzc2FnZSogaXMgb21pdHRlZCwgdGhlIG5ldyBpbnN0YW5jZSBpcyBjcmVhdGVkIGluIGEgZGVmYXVsdCwgZW1wdHkgc3RhdGUuCiAgICBJZiAqbWVzc2FnZSogaXMgYW4gOmNsYXNzOmBlbWFpbC5NZXNzYWdlLk1lc3NhZ2VgIGluc3RhbmNlLCBpdHMgY29udGVudHMgYXJlCiAgICBjb3BpZWQ7IGZ1cnRoZXJtb3JlLCBhbnkgZm9ybWF0LXNwZWNpZmljIGluZm9ybWF0aW9uIGlzIGNvbnZlcnRlZCBpbnNvZmFyIGFzCi0gICBwb3NzaWJsZSBpZiAqbWVzc2FnZSogaXMgYSA6Y2xhc3M6YE1lc3NhZ2VgIGluc3RhbmNlLiBJZiAqbWVzc2FnZSogaXMgYSBzdHJpbmcKKyAgIHBvc3NpYmxlIGlmICptZXNzYWdlKiBpcyBhIDpjbGFzczpgTWVzc2FnZWAgaW5zdGFuY2UuIElmICptZXNzYWdlKiBpcyBhIHN0cmluZywKKyAgIGEgYnl0ZSBzdHJpbmcsCiAgICBvciBhIGZpbGUsIGl0IHNob3VsZCBjb250YWluIGFuIDpyZmM6YDI4MjJgXCAtY29tcGxpYW50IG1lc3NhZ2UsIHdoaWNoIGlzIHJlYWQKLSAgIGFuZCBwYXJzZWQuCisgICBhbmQgcGFyc2VkLiAgRmlsZXMgc2hvdWxkIGJlIG9wZW4gaW4gYmluYXJ5IG1vZGUsIGJ1dCB0ZXh0IG1vZGUgZmlsZXMKKyAgIGFyZSBhY2NlcHRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogICAgVGhlIGZvcm1hdC1zcGVjaWZpYyBzdGF0ZSBhbmQgYmVoYXZpb3JzIG9mZmVyZWQgYnkgc3ViY2xhc3NlcyB2YXJ5LCBidXQgaW4KICAgIGdlbmVyYWwgaXQgaXMgb25seSB0aGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYWlsY2FwLnJzdCBiL0RvYy9saWJyYXJ5L21haWxjYXAucnN0CmluZGV4IDBhMGE3OTAuLjRiYjMxYmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21haWxjYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L21haWxjYXAucnN0CkBAIC00LDYgKzQsOSBAQAogLi4gbW9kdWxlOjogbWFpbGNhcAogICAgOnN5bm9wc2lzOiBNYWlsY2FwIGZpbGUgaGFuZGxpbmcuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL21haWxjYXAucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIE1haWxjYXAgZmlsZXMgYXJlIHVzZWQgdG8gY29uZmlndXJlIGhvdyBNSU1FLWF3YXJlIGFwcGxpY2F0aW9ucyBzdWNoIGFzIG1haWwKIHJlYWRlcnMgYW5kIFdlYiBicm93c2VycyByZWFjdCB0byBmaWxlcyB3aXRoIGRpZmZlcmVudCBNSU1FIHR5cGVzLiAoVGhlIG5hbWUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21hcmt1cC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJrdXAucnN0CmluZGV4IGFlOTdiNjkuLjQ5Nzk0ZWYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hcmt1cC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbWFya3VwLnJzdApAQCAtMjAsNiArMjAsNyBAQAogCiAuLiB0b2N0cmVlOjoKIAorICAgaHRtbC5yc3QKICAgIGh0bWwucGFyc2VyLnJzdAogICAgaHRtbC5lbnRpdGllcy5yc3QKICAgIHB5ZXhwYXQucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYXRoLnJzdCBiL0RvYy9saWJyYXJ5L21hdGgucnN0CmluZGV4IGM3NjA3MDEuLjk4YzViMzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21hdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L21hdGgucnN0CkBAIC05NywxNSArOTcsMjMgQEAKICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8zOTMwOTAvPmBfXC4KIAogCisuLiBmdW5jdGlvbjo6IGlzZmluaXRlKHgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqeCogaXMgbmVpdGhlciBhbiBpbmZpbml0eSBub3IgYSBOYU4sIGFuZAorICAgYGBGYWxzZWBgIG90aGVyd2lzZS4gIChOb3RlIHRoYXQgYGAwLjBgYCAqaXMqIGNvbnNpZGVyZWQgZmluaXRlLikKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBpc2luZih4KQogCi0gICBDaGVjayBpZiB0aGUgZmxvYXQgKngqIGlzIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGluZmluaXR5LgorICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICp4KiBpcyBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGluZmluaXR5LCBhbmQKKyAgIGBgRmFsc2VgYCBvdGhlcndpc2UuCiAKIAogLi4gZnVuY3Rpb246OiBpc25hbih4KQogCi0gICBDaGVjayBpZiB0aGUgZmxvYXQgKngqIGlzIGEgTmFOIChub3QgYSBudW1iZXIpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgIG9uIE5hTnMsIHNlZSB0aGUgSUVFRSA3NTQgc3RhbmRhcmRzLgorICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICp4KiBpcyBhIE5hTiAobm90IGEgbnVtYmVyKSwgYW5kIGBgRmFsc2VgYCBvdGhlcndpc2UuCiAKIAogLi4gZnVuY3Rpb246OiBsZGV4cCh4LCBpKQpAQCAtMTQ2LDYgKzE1NCwyMiBAQAogICAgUmV0dXJuIGBgZSoqeGBgLgogCiAKKy4uIGZ1bmN0aW9uOjogZXhwbTEoeCkKKworICAgUmV0dXJuIGBgZSoqeCAtIDFgYC4gIEZvciBzbWFsbCBmbG9hdHMgKngqLCB0aGUgc3VidHJhY3Rpb24gaW4gYGBleHAoeCkgLSAxYGAKKyAgIGNhbiByZXN1bHQgaW4gYSBgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24KKyAgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xvc3Nfb2Zfc2lnbmlmaWNhbmNlPmBfXDsgdGhlIDpmdW5jOmBleHBtMWAKKyAgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgd2F5IHRvIGNvbXB1dGUgdGhpcyBxdWFudGl0eSB0byBmdWxsIHByZWNpc2lvbjo6CisKKyAgICAgID4+PiBmcm9tIG1hdGggaW1wb3J0IGV4cCwgZXhwbTEKKyAgICAgID4+PiBleHAoMWUtNSkgLSAxICAjIGdpdmVzIHJlc3VsdCBhY2N1cmF0ZSB0byAxMSBwbGFjZXMKKyAgICAgIDEuMDAwMDA1MDAwMDA2OTY0OWUtMDUKKyAgICAgID4+PiBleHBtMSgxZS01KSAgICAjIHJlc3VsdCBhY2N1cmF0ZSB0byBmdWxsIHByZWNpc2lvbgorICAgICAgMS4wMDAwMDUwMDAwMTY2NjY4ZS0wNQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBmdW5jdGlvbjo6IGxvZyh4WywgYmFzZV0pCiAKICAgIFdpdGggb25lIGFyZ3VtZW50LCByZXR1cm4gdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mICp4KiAodG8gYmFzZSAqZSopLgpAQCAtMjQ1LDYgKzI2OSw5IEBACiBIeXBlcmJvbGljIGZ1bmN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorYEh5cGVyYm9saWMgZnVuY3Rpb25zIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0h5cGVyYm9saWNfZnVuY3Rpb24+YF8KK2FyZSBhbmFsb2dzIG9mIHRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIHRoYXQgYXJlIGJhc2VkIG9uIGh5cGVyYm9sYXMKK2luc3RlYWQgb2YgY2lyY2xlcy4KIAogLi4gZnVuY3Rpb246OiBhY29zaCh4KQogCkBAIC0yNzYsNiArMzAzLDUyIEBACiAgICBSZXR1cm4gdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiAqeCouCiAKIAorU3BlY2lhbCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGZ1bmN0aW9uOjogZXJmKHgpCisKKyAgIFJldHVybiB0aGUgYGVycm9yIGZ1bmN0aW9uIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vycm9yX2Z1bmN0aW9uPmBfIGF0CisgICAqeCouCisKKyAgIFRoZSA6ZnVuYzpgZXJmYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb21wdXRlIHRyYWRpdGlvbmFsIHN0YXRpc3RpY2FsCisgICBmdW5jdGlvbnMgc3VjaCBhcyB0aGUgYGN1bXVsYXRpdmUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbgorICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTm9ybWFsX2Rpc3RyaWJ1dGlvbiNDdW11bGF0aXZlX2Rpc3RyaWJ1dGlvbl9mdW5jdGlvbj5gXzo6CisKKyAgICAgZGVmIHBoaSh4KToKKyAgICAgICAgICdDdW11bGF0aXZlIGRpc3RyaWJ1dGlvbiBmdW5jdGlvbiBmb3IgdGhlIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24nCisgICAgICAgICByZXR1cm4gKDEuMCArIGVyZih4IC8gc3FydCgyLjApKSkgLyAyLjAKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiBlcmZjKHgpCisKKyAgIFJldHVybiB0aGUgY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBhdCAqeCouICBUaGUgYGNvbXBsZW1lbnRhcnkgZXJyb3IKKyAgIGZ1bmN0aW9uIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Vycm9yX2Z1bmN0aW9uPmBfIGlzIGRlZmluZWQgYXMKKyAgIGBgMS4wIC0gZXJmKHgpYGAuICBJdCBpcyB1c2VkIGZvciBsYXJnZSB2YWx1ZXMgb2YgKngqIHdoZXJlIGEgc3VidHJhY3Rpb24KKyAgIGZyb20gb25lIHdvdWxkIGNhdXNlIGEgYGxvc3Mgb2Ygc2lnbmlmaWNhbmNlCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Mb3NzX29mX3NpZ25pZmljYW5jZT5gX1wuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogZ2FtbWEoeCkKKworICAgUmV0dXJuIHRoZSBgR2FtbWEgZnVuY3Rpb24gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2FtbWFfZnVuY3Rpb24+YF8gYXQKKyAgICp4Ki4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiBsZ2FtbWEoeCkKKworICAgUmV0dXJuIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIEdhbW1hCisgICBmdW5jdGlvbiBhdCAqeCouCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIENvbnN0YW50cwogLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QgYi9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CmluZGV4IGZlMTQzN2EuLjE3YjBjMDcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdApAQCAtOCw2ICs4LDEwIEBACiAKIC4uIGluZGV4OjogcGFpcjogTUlNRTsgY29udGVudCB0eXBlCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL21pbWV0eXBlcy5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YG1pbWV0eXBlc2AgbW9kdWxlIGNvbnZlcnRzIGJldHdlZW4gYSBmaWxlbmFtZSBvciBVUkwgYW5kIHRoZSBNSU1FIHR5cGUKIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZW5hbWUgZXh0ZW5zaW9uLiAgQ29udmVyc2lvbnMgYXJlIHByb3ZpZGVkIGZyb20gZmlsZW5hbWUKIHRvIE1JTUUgdHlwZSBhbmQgZnJvbSBNSU1FIHR5cGUgdG8gZmlsZW5hbWUgZXh0ZW5zaW9uOyBlbmNvZGluZ3MgYXJlIG5vdApAQCAtNzYsOSArODAsMTMgQEAKIAogICAgSW5pdGlhbGl6ZSB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiAgSWYgZ2l2ZW4sICpmaWxlcyogbXVzdCBiZSBhIHNlcXVlbmNlCiAgICBvZiBmaWxlIG5hbWVzIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIGF1Z21lbnQgdGhlIGRlZmF1bHQgdHlwZSBtYXAuICBJZiBvbWl0dGVkLAotICAgdGhlIGZpbGUgbmFtZXMgdG8gdXNlIGFyZSB0YWtlbiBmcm9tIDpjb25zdDpga25vd25maWxlc2AuICBFYWNoIGZpbGUgbmFtZWQgaW4KLSAgICpmaWxlcyogb3IgOmNvbnN0OmBrbm93bmZpbGVzYCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhvc2UgbmFtZWQgYmVmb3JlIGl0LgotICAgQ2FsbGluZyA6ZnVuYzpgaW5pdGAgcmVwZWF0ZWRseSBpcyBhbGxvd2VkLgorICAgdGhlIGZpbGUgbmFtZXMgdG8gdXNlIGFyZSB0YWtlbiBmcm9tIDpjb25zdDpga25vd25maWxlc2A7IG9uIFdpbmRvd3MsIHRoZQorICAgY3VycmVudCByZWdpc3RyeSBzZXR0aW5ncyBhcmUgbG9hZGVkLiAgRWFjaCBmaWxlIG5hbWVkIGluICpmaWxlcyogb3IKKyAgIDpjb25zdDpga25vd25maWxlc2AgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRob3NlIG5hbWVkIGJlZm9yZSBpdC4gIENhbGxpbmcKKyAgIDpmdW5jOmBpbml0YCByZXBlYXRlZGx5IGlzIGFsbG93ZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBQcmV2aW91c2x5LCBXaW5kb3dzIHJlZ2lzdHJ5IHNldHRpbmdzIHdlcmUgaWdub3JlZC4KIAogCiAuLiBmdW5jdGlvbjo6IHJlYWRfbWltZV90eXBlcyhmaWxlbmFtZSkKQEAgLTIyOCwzICsyMzYsOSBAQAogICAgTG9hZCBNSU1FIHR5cGUgaW5mb3JtYXRpb24gZnJvbSBhbiBvcGVuIGZpbGUuICBUaGUgZmlsZSBtdXN0IGhhdmUgdGhlIGZvcm1hdCBvZgogICAgdGhlIHN0YW5kYXJkIDpmaWxlOmBtaW1lLnR5cGVzYCBmaWxlcy4KIAorCisuLiBtZXRob2Q6OiBNaW1lVHlwZXMucmVhZF93aW5kb3dzX3JlZ2lzdHJ5KCkKKworICAgTG9hZCBNSU1FIHR5cGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgV2luZG93cyByZWdpc3RyeS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tbWFwLnJzdCBiL0RvYy9saWJyYXJ5L21tYXAucnN0CmluZGV4IGUwNjEwODguLjdhOTAxYzkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21tYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L21tYXAucnN0CkBAIC0xMTUsNiArMTE1LDE4IEBACiAgICAgICAgICAgbWFwLmNsb3NlKCkKIAogCisgICA6Y2xhc3M6YG1tYXBgIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgaW4gYSA6a2V5d29yZDpgd2l0aGAKKyAgIHN0YXRlbWVudC46OgorCisgICAgICBpbXBvcnQgbW1hcAorCisgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTMpIGFzIG1hcDoKKyAgICAgICAgICBtYXAud3JpdGUoIkhlbGxvIHdvcmxkISIpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgQ29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKKwogICAgVGhlIG5leHQgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIGNyZWF0ZSBhbiBhbm9ueW1vdXMgbWFwIGFuZCBleGNoYW5nZQogICAgZGF0YSBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIGNoaWxkIHByb2Nlc3Nlczo6CiAKQEAgLTEzNSwxMyArMTQ3LDE5IEBACiAKICAgIE1lbW9yeS1tYXBwZWQgZmlsZSBvYmplY3RzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0KICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIAogICAgICAgQ2xvc2UgdGhlIGZpbGUuICBTdWJzZXF1ZW50IGNhbGxzIHRvIG90aGVyIG1ldGhvZHMgb2YgdGhlIG9iamVjdCB3aWxsCiAgICAgICByZXN1bHQgaW4gYW4gZXhjZXB0aW9uIGJlaW5nIHJhaXNlZC4KIAogCisgICAuLiBhdHRyaWJ1dGU6OiBjbG9zZWQKKworICAgICAgVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjbG9zZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKICAgIC4uIG1ldGhvZDo6IGZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkKIAogICAgICAgUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBvYmplY3Qgd2hlcmUgdGhlIHN1YnNlcXVlbmNlICpzdWIqIGlzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0IGIvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdAppbmRleCA0MWIzODdiLi5kNDJjNmFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L21vZHVsZWZpbmRlci5yc3QKQEAgLTcsNiArNyw5IEBACiAuLiBtb2R1bGU6OiBtb2R1bGVmaW5kZXIKICAgIDpzeW5vcHNpczogRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHQuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL21vZHVsZWZpbmRlci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSA6Y2xhc3M6YE1vZHVsZUZpbmRlcmAgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUKIHRoZSBzZXQgb2YgbW9kdWxlcyBpbXBvcnRlZCBieSBhIHNjcmlwdC4gYGBtb2R1bGVmaW5kZXIucHlgYCBjYW4gYWxzbyBiZSBydW4gYXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QgYi9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CmluZGV4IGYyN2MzZDguLjI3MGY0ZmYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbXNpbGliLnJzdApAQCAtNDIsNyArNDIsNyBAQAogLi4gZnVuY3Rpb246OiBVdWlkQ3JlYXRlKCkKIAogICAgUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBuZXcgdW5pcXVlIGlkZW50aWZpZXIuIFRoaXMgd3JhcHMgdGhlCi0gICBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgOmNmdW5jOmBVdWlkQ3JlYXRlYCBhbmQgOmNmdW5jOmBVdWlkVG9TdHJpbmdgLgorICAgV2luZG93cyBBUEkgZnVuY3Rpb25zIDpjOmZ1bmM6YFV1aWRDcmVhdGVgIGFuZCA6YzpmdW5jOmBVdWlkVG9TdHJpbmdgLgogCiAKIC4uIGZ1bmN0aW9uOjogT3BlbkRhdGFiYXNlKHBhdGgsIHBlcnNpc3QpCkBAIC01OCw3ICs1OCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogQ3JlYXRlUmVjb3JkKGNvdW50KQogCi0gICBSZXR1cm4gYSBuZXcgcmVjb3JkIG9iamVjdCBieSBjYWxsaW5nIDpjZnVuYzpgTVNJQ3JlYXRlUmVjb3JkYC4gKmNvdW50KiBpcyB0aGUKKyAgIFJldHVybiBhIG5ldyByZWNvcmQgb2JqZWN0IGJ5IGNhbGxpbmcgOmM6ZnVuYzpgTVNJQ3JlYXRlUmVjb3JkYC4gKmNvdW50KiBpcyB0aGUKICAgIG51bWJlciBvZiBmaWVsZHMgb2YgdGhlIHJlY29yZC4KIAogCkBAIC0xMzMsMjAgKzEzMywyMCBAQAogCiAuLiBtZXRob2Q6OiBEYXRhYmFzZS5PcGVuVmlldyhzcWwpCiAKLSAgIFJldHVybiBhIHZpZXcgb2JqZWN0LCBieSBjYWxsaW5nIDpjZnVuYzpgTVNJRGF0YWJhc2VPcGVuVmlld2AuICpzcWwqIGlzIHRoZSBTUUwKKyAgIFJldHVybiBhIHZpZXcgb2JqZWN0LCBieSBjYWxsaW5nIDpjOmZ1bmM6YE1TSURhdGFiYXNlT3BlblZpZXdgLiAqc3FsKiBpcyB0aGUgU1FMCiAgICBzdGF0ZW1lbnQgdG8gZXhlY3V0ZS4KIAogCiAuLiBtZXRob2Q6OiBEYXRhYmFzZS5Db21taXQoKQogCiAgICBDb21taXQgdGhlIGNoYW5nZXMgcGVuZGluZyBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiwgYnkgY2FsbGluZwotICAgOmNmdW5jOmBNU0lEYXRhYmFzZUNvbW1pdGAuCisgICA6YzpmdW5jOmBNU0lEYXRhYmFzZUNvbW1pdGAuCiAKIAogLi4gbWV0aG9kOjogRGF0YWJhc2UuR2V0U3VtbWFyeUluZm9ybWF0aW9uKGNvdW50KQogCiAgICBSZXR1cm4gYSBuZXcgc3VtbWFyeSBpbmZvcm1hdGlvbiBvYmplY3QsIGJ5IGNhbGxpbmcKLSAgIDpjZnVuYzpgTXNpR2V0U3VtbWFyeUluZm9ybWF0aW9uYC4gICpjb3VudCogaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHVwZGF0ZWQKKyAgIDpjOmZ1bmM6YE1zaUdldFN1bW1hcnlJbmZvcm1hdGlvbmAuICAqY291bnQqIGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiB1cGRhdGVkCiAgICB2YWx1ZXMuCiAKIApAQCAtMTY0LDcgKzE2NCw3IEBACiAKIC4uIG1ldGhvZDo6IFZpZXcuRXhlY3V0ZShwYXJhbXMpCiAKLSAgIEV4ZWN1dGUgdGhlIFNRTCBxdWVyeSBvZiB0aGUgdmlldywgdGhyb3VnaCA6Y2Z1bmM6YE1TSVZpZXdFeGVjdXRlYC4gSWYKKyAgIEV4ZWN1dGUgdGhlIFNRTCBxdWVyeSBvZiB0aGUgdmlldywgdGhyb3VnaCA6YzpmdW5jOmBNU0lWaWV3RXhlY3V0ZWAuIElmCiAgICAqcGFyYW1zKiBpcyBub3QgYGBOb25lYGAsIGl0IGlzIGEgcmVjb3JkIGRlc2NyaWJpbmcgYWN0dWFsIHZhbHVlcyBvZiB0aGUKICAgIHBhcmFtZXRlciB0b2tlbnMgaW4gdGhlIHF1ZXJ5LgogCkBAIC0xNzIsMTggKzE3MiwxOCBAQAogLi4gbWV0aG9kOjogVmlldy5HZXRDb2x1bW5JbmZvKGtpbmQpCiAKICAgIFJldHVybiBhIHJlY29yZCBkZXNjcmliaW5nIHRoZSBjb2x1bW5zIG9mIHRoZSB2aWV3LCB0aHJvdWdoIGNhbGxpbmcKLSAgIDpjZnVuYzpgTXNpVmlld0dldENvbHVtbkluZm9gLiAqa2luZCogY2FuIGJlIGVpdGhlciBgYE1TSUNPTElORk9fTkFNRVNgYCBvcgorICAgOmM6ZnVuYzpgTXNpVmlld0dldENvbHVtbkluZm9gLiAqa2luZCogY2FuIGJlIGVpdGhlciBgYE1TSUNPTElORk9fTkFNRVNgYCBvcgogICAgYGBNU0lDT0xJTkZPX1RZUEVTYGAuCiAKIAogLi4gbWV0aG9kOjogVmlldy5GZXRjaCgpCiAKLSAgIFJldHVybiBhIHJlc3VsdCByZWNvcmQgb2YgdGhlIHF1ZXJ5LCB0aHJvdWdoIGNhbGxpbmcgOmNmdW5jOmBNc2lWaWV3RmV0Y2hgLgorICAgUmV0dXJuIGEgcmVzdWx0IHJlY29yZCBvZiB0aGUgcXVlcnksIHRocm91Z2ggY2FsbGluZyA6YzpmdW5jOmBNc2lWaWV3RmV0Y2hgLgogCiAKIC4uIG1ldGhvZDo6IFZpZXcuTW9kaWZ5KGtpbmQsIGRhdGEpCiAKLSAgIE1vZGlmeSB0aGUgdmlldywgYnkgY2FsbGluZyA6Y2Z1bmM6YE1zaVZpZXdNb2RpZnlgLiAqa2luZCogY2FuIGJlIG9uZSBvZgorICAgTW9kaWZ5IHRoZSB2aWV3LCBieSBjYWxsaW5nIDpjOmZ1bmM6YE1zaVZpZXdNb2RpZnlgLiAqa2luZCogY2FuIGJlIG9uZSBvZgogICAgYGBNU0lNT0RJRllfU0VFS2BgLCBgYE1TSU1PRElGWV9SRUZSRVNIYGAsIGBgTVNJTU9ESUZZX0lOU0VSVGBgLAogICAgYGBNU0lNT0RJRllfVVBEQVRFYGAsIGBgTVNJTU9ESUZZX0FTU0lHTmBgLCBgYE1TSU1PRElGWV9SRVBMQUNFYGAsCiAgICBgYE1TSU1PRElGWV9NRVJHRWBgLCBgYE1TSU1PRElGWV9ERUxFVEVgYCwgYGBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWWBgLApAQCAtMTk1LDcgKzE5NSw3IEBACiAKIC4uIG1ldGhvZDo6IFZpZXcuQ2xvc2UoKQogCi0gICBDbG9zZSB0aGUgdmlldywgdGhyb3VnaCA6Y2Z1bmM6YE1zaVZpZXdDbG9zZWAuCisgICBDbG9zZSB0aGUgdmlldywgdGhyb3VnaCA6YzpmdW5jOmBNc2lWaWV3Q2xvc2VgLgogCiAKIC4uIHNlZWFsc286OgpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIC4uIG1ldGhvZDo6IFN1bW1hcnlJbmZvcm1hdGlvbi5HZXRQcm9wZXJ0eShmaWVsZCkKIAotICAgUmV0dXJuIGEgcHJvcGVydHkgb2YgdGhlIHN1bW1hcnksIHRocm91Z2ggOmNmdW5jOmBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5YC4KKyAgIFJldHVybiBhIHByb3BlcnR5IG9mIHRoZSBzdW1tYXJ5LCB0aHJvdWdoIDpjOmZ1bmM6YE1zaVN1bW1hcnlJbmZvR2V0UHJvcGVydHlgLgogICAgKmZpZWxkKiBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHksIGFuZCBjYW4gYmUgb25lIG9mIHRoZSBjb25zdGFudHMKICAgIGBgUElEX0NPREVQQUdFYGAsIGBgUElEX1RJVExFYGAsIGBgUElEX1NVQkpFQ1RgYCwgYGBQSURfQVVUSE9SYGAsCiAgICBgYFBJRF9LRVlXT1JEU2BgLCBgYFBJRF9DT01NRU5UU2BgLCBgYFBJRF9URU1QTEFURWBgLCBgYFBJRF9MQVNUQVVUSE9SYGAsCkBAIC0yMjYsMTIgKzIyNiwxMiBAQAogLi4gbWV0aG9kOjogU3VtbWFyeUluZm9ybWF0aW9uLkdldFByb3BlcnR5Q291bnQoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBzdW1tYXJ5IHByb3BlcnRpZXMsIHRocm91Z2gKLSAgIDpjZnVuYzpgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eUNvdW50YC4KKyAgIDpjOmZ1bmM6YE1zaVN1bW1hcnlJbmZvR2V0UHJvcGVydHlDb3VudGAuCiAKIAogLi4gbWV0aG9kOjogU3VtbWFyeUluZm9ybWF0aW9uLlNldFByb3BlcnR5KGZpZWxkLCB2YWx1ZSkKIAotICAgU2V0IGEgcHJvcGVydHkgdGhyb3VnaCA6Y2Z1bmM6YE1zaVN1bW1hcnlJbmZvU2V0UHJvcGVydHlgLiAqZmllbGQqIGNhbiBoYXZlIHRoZQorICAgU2V0IGEgcHJvcGVydHkgdGhyb3VnaCA6YzpmdW5jOmBNc2lTdW1tYXJ5SW5mb1NldFByb3BlcnR5YC4gKmZpZWxkKiBjYW4gaGF2ZSB0aGUKICAgIHNhbWUgdmFsdWVzIGFzIGluIDptZXRoOmBHZXRQcm9wZXJ0eWAsICp2YWx1ZSogaXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcHJvcGVydHkuCiAgICBQb3NzaWJsZSB2YWx1ZSB0eXBlcyBhcmUgaW50ZWdlciBhbmQgc3RyaW5nLgogCkBAIC0yMzksNyArMjM5LDcgQEAKIC4uIG1ldGhvZDo6IFN1bW1hcnlJbmZvcm1hdGlvbi5QZXJzaXN0KCkKIAogICAgV3JpdGUgdGhlIG1vZGlmaWVkIHByb3BlcnRpZXMgdG8gdGhlIHN1bW1hcnkgaW5mb3JtYXRpb24gc3RyZWFtLCB1c2luZwotICAgOmNmdW5jOmBNc2lTdW1tYXJ5SW5mb1BlcnNpc3RgLgorICAgOmM6ZnVuYzpgTXNpU3VtbWFyeUluZm9QZXJzaXN0YC4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTI1OCw3ICsyNTgsNyBAQAogLi4gbWV0aG9kOjogUmVjb3JkLkdldEZpZWxkQ291bnQoKQogCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBmaWVsZHMgb2YgdGhlIHJlY29yZCwgdGhyb3VnaAotICAgOmNmdW5jOmBNc2lSZWNvcmRHZXRGaWVsZENvdW50YC4KKyAgIDpjOmZ1bmM6YE1zaVJlY29yZEdldEZpZWxkQ291bnRgLgogCiAKIC4uIG1ldGhvZDo6IFJlY29yZC5HZXRJbnRlZ2VyKGZpZWxkKQpAQCAtMjc1LDI1ICsyNzUsMjUgQEAKIAogLi4gbWV0aG9kOjogUmVjb3JkLlNldFN0cmluZyhmaWVsZCwgdmFsdWUpCiAKLSAgIFNldCAqZmllbGQqIHRvICp2YWx1ZSogdGhyb3VnaCA6Y2Z1bmM6YE1zaVJlY29yZFNldFN0cmluZ2AuICpmaWVsZCogbXVzdCBiZSBhbgorICAgU2V0ICpmaWVsZCogdG8gKnZhbHVlKiB0aHJvdWdoIDpjOmZ1bmM6YE1zaVJlY29yZFNldFN0cmluZ2AuICpmaWVsZCogbXVzdCBiZSBhbgogICAgaW50ZWdlcjsgKnZhbHVlKiBhIHN0cmluZy4KIAogCiAuLiBtZXRob2Q6OiBSZWNvcmQuU2V0U3RyZWFtKGZpZWxkLCB2YWx1ZSkKIAogICAgU2V0ICpmaWVsZCogdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIG5hbWVkICp2YWx1ZSosIHRocm91Z2gKLSAgIDpjZnVuYzpgTXNpUmVjb3JkU2V0U3RyZWFtYC4gKmZpZWxkKiBtdXN0IGJlIGFuIGludGVnZXI7ICp2YWx1ZSogYSBzdHJpbmcuCisgICA6YzpmdW5jOmBNc2lSZWNvcmRTZXRTdHJlYW1gLiAqZmllbGQqIG11c3QgYmUgYW4gaW50ZWdlcjsgKnZhbHVlKiBhIHN0cmluZy4KIAogCiAuLiBtZXRob2Q6OiBSZWNvcmQuU2V0SW50ZWdlcihmaWVsZCwgdmFsdWUpCiAKLSAgIFNldCAqZmllbGQqIHRvICp2YWx1ZSogdGhyb3VnaCA6Y2Z1bmM6YE1zaVJlY29yZFNldEludGVnZXJgLiBCb3RoICpmaWVsZCogYW5kCisgICBTZXQgKmZpZWxkKiB0byAqdmFsdWUqIHRocm91Z2ggOmM6ZnVuYzpgTXNpUmVjb3JkU2V0SW50ZWdlcmAuIEJvdGggKmZpZWxkKiBhbmQKICAgICp2YWx1ZSogbXVzdCBiZSBhbiBpbnRlZ2VyLgogCiAKIC4uIG1ldGhvZDo6IFJlY29yZC5DbGVhckRhdGEoKQogCi0gICBTZXQgYWxsIGZpZWxkcyBvZiB0aGUgcmVjb3JkIHRvIDAsIHRocm91Z2ggOmNmdW5jOmBNc2lSZWNvcmRDbGVhckRhdGFgLgorICAgU2V0IGFsbCBmaWVsZHMgb2YgdGhlIHJlY29yZCB0byAwLCB0aHJvdWdoIDpjOmZ1bmM6YE1zaVJlY29yZENsZWFyRGF0YWAuCiAKIAogLi4gc2VlYWxzbzo6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0IGIvRG9jL2xpYnJhcnkvbXN2Y3J0LnJzdAppbmRleCBkOTY4ODMzLi44ODlhMGM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L21zdmNydC5yc3QKQEAgLTkwLDEyICs5MCwxMiBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGNoKCkKIAotICAgUmVhZCBhIGtleXByZXNzIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIuICBOb3RoaW5nIGlzIGVjaG9lZCB0byB0aGUKLSAgIGNvbnNvbGUuICBUaGlzIGNhbGwgd2lsbCBibG9jayBpZiBhIGtleXByZXNzIGlzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZSwgYnV0IHdpbGwKLSAgIG5vdCB3YWl0IGZvciA6a2JkOmBFbnRlcmAgdG8gYmUgcHJlc3NlZC4gSWYgdGhlIHByZXNzZWQga2V5IHdhcyBhIHNwZWNpYWwKLSAgIGZ1bmN0aW9uIGtleSwgdGhpcyB3aWxsIHJldHVybiBgYCdcMDAwJ2BgIG9yIGBgJ1x4ZTAnYGA7IHRoZSBuZXh0IGNhbGwgd2lsbAotICAgcmV0dXJuIHRoZSBrZXljb2RlLiAgVGhlIDprYmQ6YENvbnRyb2wtQ2Aga2V5cHJlc3MgY2Fubm90IGJlIHJlYWQgd2l0aCB0aGlzCi0gICBmdW5jdGlvbi4KKyAgIFJlYWQgYSBrZXlwcmVzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyIGFzIGEgYnl0ZSBzdHJpbmcuCisgICBOb3RoaW5nIGlzIGVjaG9lZCB0byB0aGUgY29uc29sZS4gIFRoaXMgY2FsbCB3aWxsIGJsb2NrIGlmIGEga2V5cHJlc3MKKyAgIGlzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZSwgYnV0IHdpbGwgbm90IHdhaXQgZm9yIDprYmQ6YEVudGVyYCB0byBiZQorICAgcHJlc3NlZC4gSWYgdGhlIHByZXNzZWQga2V5IHdhcyBhIHNwZWNpYWwgZnVuY3Rpb24ga2V5LCB0aGlzIHdpbGwKKyAgIHJldHVybiBgYCdcMDAwJ2BgIG9yIGBgJ1x4ZTAnYGA7IHRoZSBuZXh0IGNhbGwgd2lsbCByZXR1cm4gdGhlIGtleWNvZGUuCisgICBUaGUgOmtiZDpgQ29udHJvbC1DYCBrZXlwcmVzcyBjYW5ub3QgYmUgcmVhZCB3aXRoIHRoaXMgZnVuY3Rpb24uCiAKIAogLi4gZnVuY3Rpb246OiBnZXR3Y2goKQpAQCAtMTE2LDcgKzExNiw3IEBACiAKIC4uIGZ1bmN0aW9uOjogcHV0Y2goY2hhcikKIAotICAgUHJpbnQgdGhlIGNoYXJhY3RlciAqY2hhciogdG8gdGhlIGNvbnNvbGUgd2l0aG91dCBidWZmZXJpbmcuCisgICBQcmludCB0aGUgYnl0ZSBzdHJpbmcgKmNoYXIqIHRvIHRoZSBjb25zb2xlIHdpdGhvdXQgYnVmZmVyaW5nLgogCiAKIC4uIGZ1bmN0aW9uOjogcHV0d2NoKHVuaWNvZGVfY2hhcikKQEAgLTEyNiw4ICsxMjYsOCBAQAogCiAuLiBmdW5jdGlvbjo6IHVuZ2V0Y2goY2hhcikKIAotICAgQ2F1c2UgdGhlIGNoYXJhY3RlciAqY2hhciogdG8gYmUgInB1c2hlZCBiYWNrIiBpbnRvIHRoZSBjb25zb2xlIGJ1ZmZlcjsgaXQgd2lsbAotICAgYmUgdGhlIG5leHQgY2hhcmFjdGVyIHJlYWQgYnkgOmZ1bmM6YGdldGNoYCBvciA6ZnVuYzpgZ2V0Y2hlYC4KKyAgIENhdXNlIHRoZSBieXRlIHN0cmluZyAqY2hhciogdG8gYmUgInB1c2hlZCBiYWNrIiBpbnRvIHRoZSBjb25zb2xlIGJ1ZmZlcjsKKyAgIGl0IHdpbGwgYmUgdGhlIG5leHQgY2hhcmFjdGVyIHJlYWQgYnkgOmZ1bmM6YGdldGNoYCBvciA6ZnVuYzpgZ2V0Y2hlYC4KIAogCiAuLiBmdW5jdGlvbjo6IHVuZ2V0d2NoKHVuaWNvZGVfY2hhcikKQEAgLTE0Myw1ICsxNDMsNSBAQAogCiAuLiBmdW5jdGlvbjo6IGhlYXBtaW4oKQogCi0gICBGb3JjZSB0aGUgOmNmdW5jOmBtYWxsb2NgIGhlYXAgdG8gY2xlYW4gaXRzZWxmIHVwIGFuZCByZXR1cm4gdW51c2VkIGJsb2NrcyB0bworICAgRm9yY2UgdGhlIDpjOmZ1bmM6YG1hbGxvY2AgaGVhcCB0byBjbGVhbiBpdHNlbGYgdXAgYW5kIHJldHVybiB1bnVzZWQgYmxvY2tzIHRvCiAgICB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIE9uIGZhaWx1cmUsIHRoaXMgcmFpc2VzIDpleGM6YElPRXJyb3JgLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdCBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKaW5kZXggY2IyMGE1Yy4uOTJkNTI3MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CkBAIC0xNiw3ICsxNiw3IEBACiBsZXZlcmFnZSBtdWx0aXBsZSBwcm9jZXNzb3JzIG9uIGEgZ2l2ZW4gbWFjaGluZS4gIEl0IHJ1bnMgb24gYm90aCBVbml4IGFuZAogV2luZG93cy4KIAotLi4gd2FybmluZzo6CisuLiBub3RlOjoKIAogICAgIFNvbWUgb2YgdGhpcyBwYWNrYWdlJ3MgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBhIGZ1bmN0aW9uaW5nIHNoYXJlZCBzZW1hcGhvcmUKICAgICBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBXaXRob3V0IG9uZSwgdGhlCkBAIC0xMjAsNyArMTIwLDkgQEAKICAgICAgICAgICBwcmludChxLmdldCgpKSAgICAjIHByaW50cyAiWzQyLCBOb25lLCAnaGVsbG8nXSIKICAgICAgICAgICBwLmpvaW4oKQogCi0gICBRdWV1ZXMgYXJlIHRocmVhZCBhbmQgcHJvY2VzcyBzYWZlLgorICAgUXVldWVzIGFyZSB0aHJlYWQgYW5kIHByb2Nlc3Mgc2FmZSwgYnV0IG5vdGUgdGhhdCB0aGV5IG11c3QgbmV2ZXIKKyAgIGJlIGluc3RhbnRpYXRlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIGltcG9ydGluZyBhIG1vZHVsZTogdGhpcyBjYW4gbGVhZAorICAgdG8gYSBkZWFkbG9jayEgIChzZWUgOnJlZjpgdGhyZWFkZWQtaW1wb3J0c2ApCiAKICoqUGlwZXMqKgogCkBAIC00MDYsNyArNDA4LDcgQEAKICAgIC4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCiAKICAgICAgIFRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gIE9uIFVuaXggdGhpcyBpcyBkb25lIHVzaW5nIHRoZSBgYFNJR1RFUk1gYCBzaWduYWw7Ci0gICAgICBvbiBXaW5kb3dzIDpjZnVuYzpgVGVybWluYXRlUHJvY2Vzc2AgaXMgdXNlZC4gIE5vdGUgdGhhdCBleGl0IGhhbmRsZXJzIGFuZAorICAgICAgb24gV2luZG93cyA6YzpmdW5jOmBUZXJtaW5hdGVQcm9jZXNzYCBpcyB1c2VkLiAgTm90ZSB0aGF0IGV4aXQgaGFuZGxlcnMgYW5kCiAgICAgICBmaW5hbGx5IGNsYXVzZXMsIGV0Yy4sIHdpbGwgbm90IGJlIGV4ZWN1dGVkLgogCiAgICAgICBOb3RlIHRoYXQgZGVzY2VuZGFudCBwcm9jZXNzZXMgb2YgdGhlIHByb2Nlc3Mgd2lsbCAqbm90KiBiZSB0ZXJtaW5hdGVkIC0tCkBAIC00MjAsOSArNDIyLDkgQEAKICAgICAgICAgIGFjcXVpcmVkIGEgbG9jayBvciBzZW1hcGhvcmUgZXRjLiB0aGVuIHRlcm1pbmF0aW5nIGl0IGlzIGxpYWJsZSB0bwogICAgICAgICAgY2F1c2Ugb3RoZXIgcHJvY2Vzc2VzIHRvIGRlYWRsb2NrLgogCi0gICBOb3RlIHRoYXQgdGhlIDptZXRoOmBzdGFydGAsIDptZXRoOmBqb2luYCwgOm1ldGg6YGlzX2FsaXZlYCBhbmQKLSAgIDphdHRyOmBleGl0X2NvZGVgIG1ldGhvZHMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZAotICAgdGhlIHByb2Nlc3Mgb2JqZWN0LgorICAgTm90ZSB0aGF0IHRoZSA6bWV0aDpgc3RhcnRgLCA6bWV0aDpgam9pbmAsIDptZXRoOmBpc19hbGl2ZWAsCisgICA6bWV0aDpgdGVybWluYXRlYCBhbmQgOmF0dHI6YGV4aXRfY29kZWAgbWV0aG9kcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkKKyAgIHRoZSBwcm9jZXNzIHRoYXQgY3JlYXRlZCB0aGUgcHJvY2VzcyBvYmplY3QuCiAKICAgIEV4YW1wbGUgdXNhZ2Ugb2Ygc29tZSBvZiB0aGUgbWV0aG9kcyBvZiA6Y2xhc3M6YFByb2Nlc3NgOgogCkBAIC0xMTMwLDcgKzExMzIsNyBAQAogCiAgICBDcmVhdGUgYSBCYXNlTWFuYWdlciBvYmplY3QuCiAKLSAgIE9uY2UgY3JlYXRlZCBvbmUgc2hvdWxkIGNhbGwgOm1ldGg6YHN0YXJ0YCBvciA6bWV0aDpgc2VydmVfZm9yZXZlcmAgdG8gZW5zdXJlCisgICBPbmNlIGNyZWF0ZWQgb25lIHNob3VsZCBjYWxsIDptZXRoOmBzdGFydGAgb3IgYGBnZXRfc2VydmVyKCkuc2VydmVfZm9yZXZlcigpYGAgdG8gZW5zdXJlCiAgICB0aGF0IHRoZSBtYW5hZ2VyIG9iamVjdCByZWZlcnMgdG8gYSBzdGFydGVkIG1hbmFnZXIgcHJvY2Vzcy4KIAogICAgKmFkZHJlc3MqIGlzIHRoZSBhZGRyZXNzIG9uIHdoaWNoIHRoZSBtYW5hZ2VyIHByb2Nlc3MgbGlzdGVucyBmb3IgbmV3CkBAIC0xMTQ2LDEwICsxMTQ4LDYgQEAKICAgICAgIFN0YXJ0IGEgc3VicHJvY2VzcyB0byBzdGFydCB0aGUgbWFuYWdlci4gIElmICppbml0aWFsaXplciogaXMgbm90IGBgTm9uZWBgCiAgICAgICB0aGVuIHRoZSBzdWJwcm9jZXNzIHdpbGwgY2FsbCBgYGluaXRpYWxpemVyKCppbml0YXJncylgYCB3aGVuIGl0IHN0YXJ0cy4KIAotICAgLi4gbWV0aG9kOjogc2VydmVfZm9yZXZlcigpCi0KLSAgICAgIFJ1biB0aGUgc2VydmVyIGluIHRoZSBjdXJyZW50IHByb2Nlc3MuCi0KICAgIC4uIG1ldGhvZDo6IGdldF9zZXJ2ZXIoKQogCiAgICAgICBSZXR1cm5zIGEgOmNsYXNzOmBTZXJ2ZXJgIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSBhY3R1YWwgc2VydmVyIHVuZGVyCkBAIC0xNTUyLDcgKzE1NTAsNyBAQAogT25lIGNhbiBjcmVhdGUgYSBwb29sIG9mIHByb2Nlc3NlcyB3aGljaCB3aWxsIGNhcnJ5IG91dCB0YXNrcyBzdWJtaXR0ZWQgdG8gaXQKIHdpdGggdGhlIDpjbGFzczpgUG9vbGAgY2xhc3MuCiAKLS4uIGNsYXNzOjogbXVsdGlwcm9jZXNzaW5nLlBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NdXV0pCisuLiBjbGFzczo6IG11bHRpcHJvY2Vzc2luZy5Qb29sKFtwcm9jZXNzZXNbLCBpbml0aWFsaXplclssIGluaXRhcmdzWywgbWF4dGFza3NwZXJjaGlsZF1dXV0pCiAKICAgIEEgcHJvY2VzcyBwb29sIG9iamVjdCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcyB0byB3aGljaCBqb2JzCiAgICBjYW4gYmUgc3VibWl0dGVkLiAgSXQgc3VwcG9ydHMgYXN5bmNocm9ub3VzIHJlc3VsdHMgd2l0aCB0aW1lb3V0cyBhbmQKQEAgLTE1NjMsNiArMTU2MSwyMiBAQAogICAgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgKm1heHRhc2tzcGVyY2hpbGQqIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYSB3b3JrZXIgcHJvY2VzcyBjYW4gY29tcGxldGUKKyAgICAgIGJlZm9yZSBpdCB3aWxsIGV4aXQgYW5kIGJlIHJlcGxhY2VkIHdpdGggYSBmcmVzaCB3b3JrZXIgcHJvY2VzcywgdG8gZW5hYmxlCisgICAgICB1bnVzZWQgcmVzb3VyY2VzIHRvIGJlIGZyZWVkLiBUaGUgZGVmYXVsdCAqbWF4dGFza3NwZXJjaGlsZCogaXMgTm9uZSwgd2hpY2gKKyAgICAgIG1lYW5zIHdvcmtlciBwcm9jZXNzZXMgd2lsbCBsaXZlIGFzIGxvbmcgYXMgdGhlIHBvb2wuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBXb3JrZXIgcHJvY2Vzc2VzIHdpdGhpbiBhIDpjbGFzczpgUG9vbGAgdHlwaWNhbGx5IGxpdmUgZm9yIHRoZSBjb21wbGV0ZQorICAgICAgZHVyYXRpb24gb2YgdGhlIFBvb2wncyB3b3JrIHF1ZXVlLiBBIGZyZXF1ZW50IHBhdHRlcm4gZm91bmQgaW4gb3RoZXIKKyAgICAgIHN5c3RlbXMgKHN1Y2ggYXMgQXBhY2hlLCBtb2Rfd3NnaSwgZXRjKSB0byBmcmVlIHJlc291cmNlcyBoZWxkIGJ5CisgICAgICB3b3JrZXJzIGlzIHRvIGFsbG93IGEgd29ya2VyIHdpdGhpbiBhIHBvb2wgdG8gY29tcGxldGUgb25seSBhIHNldAorICAgICAgYW1vdW50IG9mIHdvcmsgYmVmb3JlIGJlaW5nIGV4aXRpbmcsIGJlaW5nIGNsZWFuZWQgdXAgYW5kIGEgbmV3CisgICAgICBwcm9jZXNzIHNwYXduZWQgdG8gcmVwbGFjZSB0aGUgb2xkIG9uZS4gVGhlICptYXh0YXNrc3BlcmNoaWxkKgorICAgICAgYXJndW1lbnQgdG8gdGhlIDpjbGFzczpgUG9vbGAgZXhwb3NlcyB0aGlzIGFiaWxpdHkgdG8gdGhlIGVuZCB1c2VyLgorCiAgICAuLiBtZXRob2Q6OiBhcHBseShmdW5jWywgYXJnc1ssIGt3ZHNdXSkKIAogICAgICAgQ2FsbCAqZnVuYyogd2l0aCBhcmd1bWVudHMgKmFyZ3MqIGFuZCBrZXl3b3JkIGFyZ3VtZW50cyAqa3dkcyouICBJdCBibG9ja3MKQEAgLTE1NzAsMTQgKzE1ODQsMjEgQEAKICAgICAgIHN1aXRlZCBmb3IgcGVyZm9ybWluZyB3b3JrIGluIHBhcmFsbGVsLiBBZGRpdGlvbmFsbHksIHRoZSBwYXNzZWQgaW4KICAgICAgIGZ1bmN0aW9uIGlzIG9ubHkgZXhlY3V0ZWQgaW4gb25lIG9mIHRoZSB3b3JrZXJzIG9mIHRoZSBwb29sLgogCi0gICAuLiBtZXRob2Q6OiBhcHBseV9hc3luYyhmdW5jWywgYXJnc1ssIGt3ZHNbLCBjYWxsYmFja11dXSkKKyAgIC4uIG1ldGhvZDo6IGFwcGx5X2FzeW5jKGZ1bmNbLCBhcmdzWywga3dkc1ssIGNhbGxiYWNrWywgZXJyb3JfY2FsbGJhY2tdXV1dKQogCiAgICAgICBBIHZhcmlhbnQgb2YgdGhlIDptZXRoOmBhcHBseWAgbWV0aG9kIHdoaWNoIHJldHVybnMgYSByZXN1bHQgb2JqZWN0LgogCiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCi0gICAgICBpdCAodW5sZXNzIHRoZSBjYWxsIGZhaWxlZCkuICAqY2FsbGJhY2sqIHNob3VsZCBjb21wbGV0ZSBpbW1lZGlhdGVseSBzaW5jZQotICAgICAgb3RoZXJ3aXNlIHRoZSB0aHJlYWQgd2hpY2ggaGFuZGxlcyB0aGUgcmVzdWx0cyB3aWxsIGdldCBibG9ja2VkLgorICAgICAgaXQsIHRoYXQgaXMgdW5sZXNzIHRoZSBjYWxsIGZhaWxlZCwgaW4gd2hpY2ggY2FzZSB0aGUgKmVycm9yX2NhbGxiYWNrKgorICAgICAgaXMgYXBwbGllZCBpbnN0ZWFkCisKKyAgICAgIElmICplcnJvcl9jYWxsYmFjayogaXMgc3BlY2lmaWVkIHRoZW4gaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2gKKyAgICAgIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQuICBJZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGZhaWxzLCB0aGVuCisgICAgICB0aGUgKmVycm9yX2NhbGxiYWNrKiBpcyBjYWxsZWQgd2l0aCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlLgorCisgICAgICBDYWxsYmFja3Mgc2hvdWxkIGNvbXBsZXRlIGltbWVkaWF0ZWx5IHNpbmNlIG90aGVyd2lzZSB0aGUgdGhyZWFkIHdoaWNoCisgICAgICBoYW5kbGVzIHRoZSByZXN1bHRzIHdpbGwgZ2V0IGJsb2NrZWQuCiAKICAgIC4uIG1ldGhvZDo6IG1hcChmdW5jLCBpdGVyYWJsZVssIGNodW5rc2l6ZV0pCiAKQEAgLTE1OTQsOCArMTYxNSwxNSBAQAogCiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCi0gICAgICBpdCAodW5sZXNzIHRoZSBjYWxsIGZhaWxlZCkuICAqY2FsbGJhY2sqIHNob3VsZCBjb21wbGV0ZSBpbW1lZGlhdGVseSBzaW5jZQotICAgICAgb3RoZXJ3aXNlIHRoZSB0aHJlYWQgd2hpY2ggaGFuZGxlcyB0aGUgcmVzdWx0cyB3aWxsIGdldCBibG9ja2VkLgorICAgICAgaXQsIHRoYXQgaXMgdW5sZXNzIHRoZSBjYWxsIGZhaWxlZCwgaW4gd2hpY2ggY2FzZSB0aGUgKmVycm9yX2NhbGxiYWNrKgorICAgICAgaXMgYXBwbGllZCBpbnN0ZWFkCisKKyAgICAgIElmICplcnJvcl9jYWxsYmFjayogaXMgc3BlY2lmaWVkIHRoZW4gaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2gKKyAgICAgIGFjY2VwdHMgYSBzaW5nbGUgYXJndW1lbnQuICBJZiB0aGUgdGFyZ2V0IGZ1bmN0aW9uIGZhaWxzLCB0aGVuCisgICAgICB0aGUgKmVycm9yX2NhbGxiYWNrKiBpcyBjYWxsZWQgd2l0aCB0aGUgZXhjZXB0aW9uIGluc3RhbmNlLgorCisgICAgICBDYWxsYmFja3Mgc2hvdWxkIGNvbXBsZXRlIGltbWVkaWF0ZWx5IHNpbmNlIG90aGVyd2lzZSB0aGUgdGhyZWFkIHdoaWNoCisgICAgICBoYW5kbGVzIHRoZSByZXN1bHRzIHdpbGwgZ2V0IGJsb2NrZWQuCiAKICAgIC4uIG1ldGhvZDo6IGltYXAoZnVuYywgaXRlcmFibGVbLCBjaHVua3NpemVdKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggOTE5OTBkZi4uM2YzOGNiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtNyw2ICs3LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9uZXRyYy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDpjbGFzczpgbmV0cmNgIGNsYXNzIHBhcnNlcyBhbmQgZW5jYXBzdWxhdGVzIHRoZSBuZXRyYyBmaWxlIGZvcm1hdCB1c2VkIGJ5CiB0aGUgVW5peCA6cHJvZ3JhbTpgZnRwYCBwcm9ncmFtIGFuZCBvdGhlciBGVFAgY2xpZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L25udHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QKaW5kZXggYzNjYmQyYi4uMTY0ZjE0OSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QKQEAgLTEwLDEwMSArMTAsMTIyIEBACiAgICBwYWlyOiBOTlRQOyBwcm90b2NvbAogICAgc2luZ2xlOiBOZXR3b3JrIE5ld3MgVHJhbnNmZXIgUHJvdG9jb2wKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvbm50cGxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgY2xhc3MgOmNsYXNzOmBOTlRQYCB3aGljaCBpbXBsZW1lbnRzIHRoZSBjbGllbnQgc2lkZSBvZgotdGhlIE5OVFAgcHJvdG9jb2wuICBJdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgYSBuZXdzIHJlYWRlciBvciBwb3N0ZXIsIG9yCi1hdXRvbWF0ZWQgbmV3cyBwcm9jZXNzb3JzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gTk5UUCAoTmV0d29yayBOZXdzIFRyYW5zZmVyCi1Qcm90b2NvbCksIHNlZSBJbnRlcm5ldCA6cmZjOmA5NzdgLgordGhlIE5ldHdvcmsgTmV3cyBUcmFuc2ZlciBQcm90b2NvbC4gIEl0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBhIG5ld3MgcmVhZGVyCitvciBwb3N0ZXIsIG9yIGF1dG9tYXRlZCBuZXdzIHByb2Nlc3NvcnMuICBJdCBpcyBjb21wYXRpYmxlIHdpdGggOnJmYzpgMzk3N2AKK2FzIHdlbGwgYXMgdGhlIG9sZGVyIDpyZmM6YDk3N2AgYW5kIDpyZmM6YDI5ODBgLgogCiBIZXJlIGFyZSB0d28gc21hbGwgZXhhbXBsZXMgb2YgaG93IGl0IGNhbiBiZSB1c2VkLiAgVG8gbGlzdCBzb21lIHN0YXRpc3RpY3MKIGFib3V0IGEgbmV3c2dyb3VwIGFuZCBwcmludCB0aGUgc3ViamVjdHMgb2YgdGhlIGxhc3QgMTAgYXJ0aWNsZXM6OgogCi0gICA+Pj4gcyA9IE5OVFAoJ25ld3MuZ21hbmUub3JnJykKKyAgID4+PiBzID0gbm50cGxpYi5OTlRQKCduZXdzLmdtYW5lLm9yZycpCiAgICA+Pj4gcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gcy5ncm91cCgnZ21hbmUuY29tcC5weXRob24uY29tbWl0dGVycycpCiAgICA+Pj4gcHJpbnQoJ0dyb3VwJywgbmFtZSwgJ2hhcycsIGNvdW50LCAnYXJ0aWNsZXMsIHJhbmdlJywgZmlyc3QsICd0bycsIGxhc3QpCi0gICBHcm91cCBnbWFuZS5jb21wLnB5dGhvbi5jb21taXR0ZXJzIGhhcyAxMDcxIGFydGljbGVzLCByYW5nZSAxIHRvIDEwNzEKLSAgID4+PiByZXNwLCBzdWJzID0gcy54aGRyKCdzdWJqZWN0JywgZmlyc3QgKyAnLScgKyBsYXN0KQotICAgPj4+IGZvciBpZCwgc3ViIGluIHN1YnNbLTEwOl06IHByaW50KGlkLCBzdWIpCisgICBHcm91cCBnbWFuZS5jb21wLnB5dGhvbi5jb21taXR0ZXJzIGhhcyAxMDk2IGFydGljbGVzLCByYW5nZSAxIHRvIDEwOTYKKyAgID4+PiByZXNwLCBvdmVydmlld3MgPSBzLm92ZXIoKGxhc3QgLSA5LCBsYXN0KSkKKyAgID4+PiBmb3IgaWQsIG92ZXIgaW4gb3ZlcnZpZXdzOgorICAgLi4uICAgICBwcmludChpZCwgbm50cGxpYi5kZWNvZGVfaGVhZGVyKG92ZXJbJ3N1YmplY3QnXSkpCiAgICAuLi4KLSAgIDEwNjIgUmU6IE1lcmN1cmlhbCBTdGF0dXM/Ci0gICAxMDYzIFJlOiBbcHl0aG9uLWNvbW1pdHRlcnNdICAoV2luZG93cykgYnVpbGRib3RzIG9uIDMueAotICAgMTA2NCBSZTogTWVyY3VyaWFsIFN0YXR1cz8KLSAgIDEwNjUgUmU6IE1lcmN1cmlhbCBTdGF0dXM/Ci0gICAxMDY2IFB5dGhvbiAyLjYuNiBzdGF0dXMKLSAgIDEwNjcgQ29tbWl0IFByaXZpbGVnZXMgZm9yIEFzayBTb2xlbQotICAgMTA2OCBSZTogQ29tbWl0IFByaXZpbGVnZXMgZm9yIEFzayBTb2xlbQotICAgMTA2OSBSZTogQ29tbWl0IFByaXZpbGVnZXMgZm9yIEFzayBTb2xlbQotICAgMTA3MCBSZTogQ29tbWl0IFByaXZpbGVnZXMgZm9yIEFzayBTb2xlbQotICAgMTA3MSAyLjYuNiByYyAyCisgICAxMDg3IFJlOiBDb21taXQgcHJpdmlsZWdlcyBmb3IgxYF1a2FzeiBMYW5nYQorICAgMTA4OCBSZTogMy4yIGFscGhhIDIgZnJlZXplCisgICAxMDg5IFJlOiAzLjIgYWxwaGEgMiBmcmVlemUKKyAgIDEwOTAgUmU6IENvbW1pdCBwcml2aWxlZ2VzIGZvciDFgXVrYXN6IExhbmdhCisgICAxMDkxIFJlOiBDb21taXQgcHJpdmlsZWdlcyBmb3IgxYF1a2FzeiBMYW5nYQorICAgMTA5MiBVcGRhdGVkIHNzaCBrZXkKKyAgIDEwOTMgUmU6IFVwZGF0ZWQgc3NoIGtleQorICAgMTA5NCBSZTogVXBkYXRlZCBzc2gga2V5CisgICAxMDk1IEhlbGxvIGZlbGxvdyBjb21taXR0ZXJzIQorICAgMTA5NiBSZTogSGVsbG8gZmVsbG93IGNvbW1pdHRlcnMhCiAgICA+Pj4gcy5xdWl0KCkKICAgICcyMDUgQnllIScKIAotVG8gcG9zdCBhbiBhcnRpY2xlIGZyb20gYSBmaWxlICh0aGlzIGFzc3VtZXMgdGhhdCB0aGUgYXJ0aWNsZSBoYXMgdmFsaWQKK1RvIHBvc3QgYW4gYXJ0aWNsZSBmcm9tIGEgYmluYXJ5IGZpbGUgKHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBhcnRpY2xlIGhhcyB2YWxpZAogaGVhZGVycywgYW5kIHRoYXQgeW91IGhhdmUgcmlnaHQgdG8gcG9zdCBvbiB0aGUgcGFydGljdWxhciBuZXdzZ3JvdXApOjoKIAotICAgPj4+IHMgPSBOTlRQKCduZXdzLmdtYW5lLm9yZycpCi0gICA+Pj4gZiA9IG9wZW4oJy90bXAvYXJ0aWNsZScpCisgICA+Pj4gcyA9IG5udHBsaWIuTk5UUCgnbmV3cy5nbWFuZS5vcmcnKQorICAgPj4+IGYgPSBvcGVuKCcvdG1wL2FydGljbGUudHh0JywgJ3JiJykKICAgID4+PiBzLnBvc3QoZikKICAgICcyNDAgQXJ0aWNsZSBwb3N0ZWQgc3VjY2Vzc2Z1bGx5LicKICAgID4+PiBzLnF1aXQoKQogICAgJzIwNSBCeWUhJwogCi1UaGUgbW9kdWxlIGl0c2VsZiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgaXRlbXM6CitUaGUgbW9kdWxlIGl0c2VsZiBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogCi0uLiBjbGFzczo6IE5OVFAoaG9zdFssIHBvcnQgWywgdXNlclssIHBhc3N3b3JkIFssIHJlYWRlcm1vZGVdWywgdXNlbmV0cmNdXV1dKQorLi4gY2xhc3M6OiBOTlRQKGhvc3QsIHBvcnQ9MTE5LCB1c2VyPU5vbmUsIHBhc3N3b3JkPU5vbmUsIHJlYWRlcm1vZGU9Tm9uZSwgdXNlbmV0cmM9RmFsc2UsIFt0aW1lb3V0XSkKIAotICAgUmV0dXJuIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YE5OVFBgIGNsYXNzLCByZXByZXNlbnRpbmcgYSBjb25uZWN0aW9uCi0gICB0byB0aGUgTk5UUCBzZXJ2ZXIgcnVubmluZyBvbiBob3N0ICpob3N0KiwgbGlzdGVuaW5nIGF0IHBvcnQgKnBvcnQqLiAgVGhlCi0gICBkZWZhdWx0ICpwb3J0KiBpcyAxMTkuICBJZiB0aGUgb3B0aW9uYWwgKnVzZXIqIGFuZCAqcGFzc3dvcmQqIGFyZSBwcm92aWRlZCwKLSAgIG9yIGlmIHN1aXRhYmxlIGNyZWRlbnRpYWxzIGFyZSBwcmVzZW50IGluIDpmaWxlOmAvLm5ldHJjYCBhbmQgdGhlIG9wdGlvbmFsCi0gICBmbGFnICp1c2VuZXRyYyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpLCB0aGUgYGBBVVRISU5GTyBVU0VSYGAgYW5kIGBgQVVUSElORk8KLSAgIFBBU1NgYCBjb21tYW5kcyBhcmUgdXNlZCB0byBpZGVudGlmeSBhbmQgYXV0aGVudGljYXRlIHRoZSB1c2VyIHRvIHRoZSBzZXJ2ZXIuCi0gICBJZiB0aGUgb3B0aW9uYWwgZmxhZyAqcmVhZGVybW9kZSogaXMgdHJ1ZSwgdGhlbiBhIGBgbW9kZSByZWFkZXJgYCBjb21tYW5kIGlzCi0gICBzZW50IGJlZm9yZSBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQuICBSZWFkZXIgbW9kZSBpcyBzb21ldGltZXMgbmVjZXNzYXJ5Ci0gICBpZiB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gYW4gTk5UUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUgYW5kIGludGVuZCB0bwotICAgY2FsbCByZWFkZXItc3BlY2lmaWMgY29tbWFuZHMsIHN1Y2ggYXMgYGBncm91cGBgLiAgSWYgeW91IGdldCB1bmV4cGVjdGVkCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBOTlRQYCBvYmplY3QsIHJlcHJlc2VudGluZyBhIGNvbm5lY3Rpb24KKyAgIHRvIHRoZSBOTlRQIHNlcnZlciBydW5uaW5nIG9uIGhvc3QgKmhvc3QqLCBsaXN0ZW5pbmcgYXQgcG9ydCAqcG9ydCouCisgICBBbiBvcHRpb25hbCAqdGltZW91dCogY2FuIGJlIHNwZWNpZmllZCBmb3IgdGhlIHNvY2tldCBjb25uZWN0aW9uLgorICAgSWYgdGhlIG9wdGlvbmFsICp1c2VyKiBhbmQgKnBhc3N3b3JkKiBhcmUgcHJvdmlkZWQsIG9yIGlmIHN1aXRhYmxlCisgICBjcmVkZW50aWFscyBhcmUgcHJlc2VudCBpbiA6ZmlsZTpgLy5uZXRyY2AgYW5kIHRoZSBvcHRpb25hbCBmbGFnICp1c2VuZXRyYyoKKyAgIGlzIHRydWUsIHRoZSBgYEFVVEhJTkZPIFVTRVJgYCBhbmQgYGBBVVRISU5GTyBQQVNTYGAgY29tbWFuZHMgYXJlIHVzZWQKKyAgIHRvIGlkZW50aWZ5IGFuZCBhdXRoZW50aWNhdGUgdGhlIHVzZXIgdG8gdGhlIHNlcnZlci4gIElmIHRoZSBvcHRpb25hbAorICAgZmxhZyAqcmVhZGVybW9kZSogaXMgdHJ1ZSwgdGhlbiBhIGBgbW9kZSByZWFkZXJgYCBjb21tYW5kIGlzIHNlbnQgYmVmb3JlCisgICBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQuICBSZWFkZXIgbW9kZSBpcyBzb21ldGltZXMgbmVjZXNzYXJ5IGlmIHlvdSBhcmUKKyAgIGNvbm5lY3RpbmcgdG8gYW4gTk5UUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUgYW5kIGludGVuZCB0byBjYWxsCisgICByZWFkZXItc3BlY2lmaWMgY29tbWFuZHMsIHN1Y2ggYXMgYGBncm91cGBgLiAgSWYgeW91IGdldCB1bmV4cGVjdGVkCiAgICA6ZXhjOmBOTlRQUGVybWFuZW50RXJyb3JgXCBzLCB5b3UgbWlnaHQgbmVlZCB0byBzZXQgKnJlYWRlcm1vZGUqLgotICAgKnJlYWRlcm1vZGUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLiAqdXNlbmV0cmMqIGRlZmF1bHRzIHRvIGBgVHJ1ZWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgKnVzZW5ldHJjKiBpcyBub3cgRmFsc2UgYnkgZGVmYXVsdC4KKworCisuLiBjbGFzczo6IE5OVFBfU1NMKGhvc3QsIHBvcnQ9NTYzLCB1c2VyPU5vbmUsIHBhc3N3b3JkPU5vbmUsIHNzbF9jb250ZXh0PU5vbmUsIHJlYWRlcm1vZGU9Tm9uZSwgdXNlbmV0cmM9RmFsc2UsIFt0aW1lb3V0XSkKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgTk5UUF9TU0xgIG9iamVjdCwgcmVwcmVzZW50aW5nIGFuIGVuY3J5cHRlZAorICAgY29ubmVjdGlvbiB0byB0aGUgTk5UUCBzZXJ2ZXIgcnVubmluZyBvbiBob3N0ICpob3N0KiwgbGlzdGVuaW5nIGF0CisgICBwb3J0ICpwb3J0Ki4gIDpjbGFzczpgTk5UUF9TU0xgIG9iamVjdHMgaGF2ZSB0aGUgc2FtZSBtZXRob2RzIGFzCisgICA6Y2xhc3M6YE5OVFBgIG9iamVjdHMuICBJZiAqcG9ydCogaXMgb21pdHRlZCwgcG9ydCA1NjMgKE5OVFBTKSBpcyB1c2VkLgorICAgKnNzbF9jb250ZXh0KiBpcyBhbHNvIG9wdGlvbmFsLCBhbmQgaXMgYSA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgb2JqZWN0LgorICAgQWxsIG90aGVyIHBhcmFtZXRlcnMgYmVoYXZlIHRoZSBzYW1lIGFzIGZvciA6Y2xhc3M6YE5OVFBgLgorCisgICBOb3RlIHRoYXQgU1NMLW9uLTU2MyBpcyBkaXNjb3VyYWdlZCBwZXIgOnJmYzpgNDY0MmAsIGluIGZhdm9yIG9mCisgICBTVEFSVFRMUyBhcyBkZXNjcmliZWQgYmVsb3cuICBIb3dldmVyLCBzb21lIHNlcnZlcnMgb25seSBzdXBwb3J0IHRoZQorICAgZm9ybWVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCiAuLiBleGNlcHRpb246OiBOTlRQRXJyb3IKIAotICAgRGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBleGNlcHRpb24gOmV4YzpgRXhjZXB0aW9uYCwgdGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmb3IKLSAgIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgOm1vZDpgbm50cGxpYmAgbW9kdWxlLgorICAgRGVyaXZlZCBmcm9tIHRoZSBzdGFuZGFyZCBleGNlcHRpb24gOmV4YzpgRXhjZXB0aW9uYCwgdGhpcyBpcyB0aGUgYmFzZQorICAgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGUgOm1vZDpgbm50cGxpYmAgbW9kdWxlLiAgSW5zdGFuY2VzCisgICBvZiB0aGlzIGNsYXNzIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHJlc3BvbnNlCisKKyAgICAgIFRoZSByZXNwb25zZSBvZiB0aGUgc2VydmVyIGlmIGF2YWlsYWJsZSwgYXMgYSA6Y2xhc3M6YHN0cmAgb2JqZWN0LgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5OVFBSZXBseUVycm9yCiAKLSAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiB1bmV4cGVjdGVkIHJlcGx5IGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci4gIEZvcgotICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBleGNlcHRpb24gYGBlcnJvcl9yZXBseWBgIGlzIGVxdWl2YWxlbnQgdG8gdGhpcwotICAgY2xhc3MuCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gdW5leHBlY3RlZCByZXBseSBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIuCiAKIAogLi4gZXhjZXB0aW9uOjogTk5UUFRlbXBvcmFyeUVycm9yCiAKLSAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhbiBlcnJvciBjb2RlIGluIHRoZSByYW5nZSA0MDAtLTQ5OSBpcyByZWNlaXZlZC4gIEZvcgotICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBleGNlcHRpb24gYGBlcnJvcl90ZW1wYGAgaXMgZXF1aXZhbGVudCB0byB0aGlzCi0gICBjbGFzcy4KKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiBhIHJlc3BvbnNlIGNvZGUgaW4gdGhlIHJhbmdlIDQwMC0tNDk5IGlzIHJlY2VpdmVkLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5OVFBQZXJtYW5lbnRFcnJvcgogCi0gICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYW4gZXJyb3IgY29kZSBpbiB0aGUgcmFuZ2UgNTAwLS01OTkgaXMgcmVjZWl2ZWQuICBGb3IKLSAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgZXhjZXB0aW9uIGBgZXJyb3JfcGVybWBgIGlzIGVxdWl2YWxlbnQgdG8gdGhpcwotICAgY2xhc3MuCisgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSByZXNwb25zZSBjb2RlIGluIHRoZSByYW5nZSA1MDAtLTU5OSBpcyByZWNlaXZlZC4KIAogCiAuLiBleGNlcHRpb246OiBOTlRQUHJvdG9jb2xFcnJvcgogCiAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gYSByZXBseSBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBiZWdpbgotICAgd2l0aCBhIGRpZ2l0IGluIHRoZSByYW5nZSAxLS01LiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgZXhjZXB0aW9uCi0gICBgYGVycm9yX3Byb3RvYGAgaXMgZXF1aXZhbGVudCB0byB0aGlzIGNsYXNzLgorICAgd2l0aCBhIGRpZ2l0IGluIHRoZSByYW5nZSAxLS01LgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5OVFBEYXRhRXJyb3IKIAotICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZXJlIGlzIHNvbWUgZXJyb3IgaW4gdGhlIHJlc3BvbnNlIGRhdGEuICBGb3IgYmFja3dhcmRzCi0gICBjb21wYXRpYmlsaXR5LCB0aGUgZXhjZXB0aW9uIGBgZXJyb3JfZGF0YWBgIGlzIGVxdWl2YWxlbnQgdG8gdGhpcyBjbGFzcy4KKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGVyZSBpcyBzb21lIGVycm9yIGluIHRoZSByZXNwb25zZSBkYXRhLgogCiAKIC4uIF9ubnRwLW9iamVjdHM6CkBAIC0xMTIsMTAgKzEzMyw1MSBAQAogTk5UUCBPYmplY3RzCiAtLS0tLS0tLS0tLS0KIAotTk5UUCBpbnN0YW5jZXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMuICBUaGUgKnJlc3BvbnNlKiB0aGF0IGlzIHJldHVybmVkIGFzCi10aGUgZmlyc3QgaXRlbSBpbiB0aGUgcmV0dXJuIHR1cGxlIG9mIGFsbW9zdCBhbGwgbWV0aG9kcyBpcyB0aGUgc2VydmVyJ3MKLXJlc3BvbnNlOiBhIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhIHRocmVlLWRpZ2l0IGNvZGUuIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZQotaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUgbWV0aG9kIHJhaXNlcyBvbmUgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbnMuCitXaGVuIGNvbm5lY3RlZCwgOmNsYXNzOmBOTlRQYCBhbmQgOmNsYXNzOmBOTlRQX1NTTGAgb2JqZWN0cyBzdXBwb3J0IHRoZQorZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMuCisKK0F0dHJpYnV0ZXMKK15eXl5eXl5eXl4KKworLi4gYXR0cmlidXRlOjogTk5UUC5ubnRwX3ZlcnNpb24KKworICAgQW4gaW50ZWdlciByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIE5OVFAgcHJvdG9jb2wgc3VwcG9ydGVkIGJ5IHRoZQorICAgc2VydmVyLiAgSW4gcHJhY3RpY2UsIHRoaXMgc2hvdWxkIGJlIGBgMmBgIGZvciBzZXJ2ZXJzIGFkdmVydGlzaW5nCisgICA6cmZjOmAzOTc3YCBjb21wbGlhbmNlIGFuZCBgYDFgYCBmb3Igb3RoZXJzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gYXR0cmlidXRlOjogTk5UUC5ubnRwX2ltcGxlbWVudGF0aW9uCisKKyAgIEEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIHNvZnR3YXJlIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhlIE5OVFAgc2VydmVyLAorICAgb3IgOmNvbnN0OmBOb25lYCBpZiBub3QgYWR2ZXJ0aXNlZCBieSB0aGUgc2VydmVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworTWV0aG9kcworXl5eXl5eXgorCitUaGUgKnJlc3BvbnNlKiB0aGF0IGlzIHJldHVybmVkIGFzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSByZXR1cm4gdHVwbGUgb2YgYWxtb3N0CithbGwgbWV0aG9kcyBpcyB0aGUgc2VydmVyJ3MgcmVzcG9uc2U6IGEgc3RyaW5nIGJlZ2lubmluZyB3aXRoIGEgdGhyZWUtZGlnaXQKK2NvZGUuICBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUgbWV0aG9kIHJhaXNlcyBvbmUgb2YKK3RoZSBhYm92ZSBleGNlcHRpb25zLgorCitNYW55IG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyB0YWtlIGFuIG9wdGlvbmFsIGtleXdvcmQtb25seSBhcmd1bWVudCAqZmlsZSouCitXaGVuIHRoZSAqZmlsZSogYXJndW1lbnQgaXMgc3VwcGxpZWQsIGl0IG11c3QgYmUgZWl0aGVyIGEgOnRlcm06YGZpbGUgb2JqZWN0YAorb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgb3IgdGhlIG5hbWUgb2YgYW4gb24tZGlzayBmaWxlIHRvIGJlIHdyaXR0ZW4gdG8uCitUaGUgbWV0aG9kIHdpbGwgdGhlbiB3cml0ZSBhbnkgZGF0YSByZXR1cm5lZCBieSB0aGUgc2VydmVyIChleGNlcHQgZm9yIHRoZQorcmVzcG9uc2UgbGluZSBhbmQgdGhlIHRlcm1pbmF0aW5nIGRvdCkgdG8gdGhlIGZpbGU7IGFueSBsaXN0IG9mIGxpbmVzLAordHVwbGVzIG9yIG9iamVjdHMgdGhhdCB0aGUgbWV0aG9kIG5vcm1hbGx5IHJldHVybnMgd2lsbCBiZSBlbXB0eS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIE1hbnkgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIGhhdmUgYmVlbiByZXdvcmtlZCBhbmQgZml4ZWQsIHdoaWNoIG1ha2VzCisgICB0aGVtIGluY29tcGF0aWJsZSB3aXRoIHRoZWlyIDMuMSBjb3VudGVycGFydHMuCisKKworLi4gbWV0aG9kOjogTk5UUC5xdWl0KCkKKworICAgU2VuZCBhIGBgUVVJVGBgIGNvbW1hbmQgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLiAgT25jZSB0aGlzIG1ldGhvZCBoYXMgYmVlbgorICAgY2FsbGVkLCBubyBvdGhlciBtZXRob2RzIG9mIHRoZSBOTlRQIG9iamVjdCBzaG91bGQgYmUgY2FsbGVkLgogCiAKIC4uIG1ldGhvZDo6IE5OVFAuZ2V0d2VsY29tZSgpCkBAIC0xMjUsNjIgKzE4NywxMTQgQEAKICAgIHRoYXQgbWF5IGJlIHJlbGV2YW50IHRvIHRoZSB1c2VyLikKIAogCi0uLiBtZXRob2Q6OiBOTlRQLnNldF9kZWJ1Z2xldmVsKGxldmVsKQorLi4gbWV0aG9kOjogTk5UUC5nZXRjYXBhYmlsaXRpZXMoKQogCi0gICBTZXQgdGhlIGluc3RhbmNlJ3MgZGVidWdnaW5nIGxldmVsLiAgVGhpcyBjb250cm9scyB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZwotICAgb3V0cHV0IHByaW50ZWQuICBUaGUgZGVmYXVsdCwgYGAwYGAsIHByb2R1Y2VzIG5vIGRlYnVnZ2luZyBvdXRwdXQuICBBIHZhbHVlIG9mCi0gICBgYDFgYCBwcm9kdWNlcyBhIG1vZGVyYXRlIGFtb3VudCBvZiBkZWJ1Z2dpbmcgb3V0cHV0LCBnZW5lcmFsbHkgYSBzaW5nbGUgbGluZQotICAgcGVyIHJlcXVlc3Qgb3IgcmVzcG9uc2UuICBBIHZhbHVlIG9mIGBgMmBgIG9yIGhpZ2hlciBwcm9kdWNlcyB0aGUgbWF4aW11bSBhbW91bnQKLSAgIG9mIGRlYnVnZ2luZyBvdXRwdXQsIGxvZ2dpbmcgZWFjaCBsaW5lIHNlbnQgYW5kIHJlY2VpdmVkIG9uIHRoZSBjb25uZWN0aW9uCi0gICAoaW5jbHVkaW5nIG1lc3NhZ2UgdGV4dCkuCisgICBSZXR1cm4gdGhlIDpyZmM6YDM5NzdgIGNhcGFiaWxpdGllcyBhZHZlcnRpc2VkIGJ5IHRoZSBzZXJ2ZXIsIGFzIGEKKyAgIDpjbGFzczpgZGljdGAgaW5zdGFuY2UgbWFwcGluZyBjYXBhYmlsaXR5IG5hbWVzIHRvIChwb3NzaWJseSBlbXB0eSkgbGlzdHMKKyAgIG9mIHZhbHVlcy4gT24gbGVnYWN5IHNlcnZlcnMgd2hpY2ggZG9uJ3QgdW5kZXJzdGFuZCB0aGUgYGBDQVBBQklMSVRJRVNgYAorICAgY29tbWFuZCwgYW4gZW1wdHkgZGljdGlvbmFyeSBpcyByZXR1cm5lZCBpbnN0ZWFkLgorCisgICAgICA+Pj4gcyA9IE5OVFAoJ25ld3MuZ21hbmUub3JnJykKKyAgICAgID4+PiAnUE9TVCcgaW4gcy5nZXRjYXBhYmlsaXRpZXMoKQorICAgICAgVHJ1ZQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCi0uLiBtZXRob2Q6OiBOTlRQLm5ld2dyb3VwcyhkYXRlLCB0aW1lLCBbZmlsZV0pCisuLiBtZXRob2Q6OiBOTlRQLmxvZ2luKHVzZXI9Tm9uZSwgcGFzc3dvcmQ9Tm9uZSwgdXNlbmV0cmM9VHJ1ZSkKIAotICAgU2VuZCBhIGBgTkVXR1JPVVBTYGAgY29tbWFuZC4gIFRoZSAqZGF0ZSogYXJndW1lbnQgc2hvdWxkIGJlIGEgc3RyaW5nIG9mIHRoZQotICAgZm9ybSBgYCd5eW1tZGQnYGAgaW5kaWNhdGluZyB0aGUgZGF0ZSwgYW5kICp0aW1lKiBzaG91bGQgYmUgYSBzdHJpbmcgb2YgdGhlIGZvcm0KLSAgIGBgJ2hobW1zcydgYCBpbmRpY2F0aW5nIHRoZSB0aW1lLiAgUmV0dXJuIGEgcGFpciBgYChyZXNwb25zZSwgZ3JvdXBzKWBgIHdoZXJlCi0gICAqZ3JvdXBzKiBpcyBhIGxpc3Qgb2YgZ3JvdXAgbmFtZXMgdGhhdCBhcmUgbmV3IHNpbmNlIHRoZSBnaXZlbiBkYXRlIGFuZCB0aW1lLiBJZgotICAgdGhlICpmaWxlKiBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIHRoZW4gdGhlIG91dHB1dCBvZiB0aGUgIGBgTkVXR1JPVVBTYGAgY29tbWFuZAotICAgaXMgc3RvcmVkIGluIGEgZmlsZS4gIElmICpmaWxlKiBpcyBhIHN0cmluZywgIHRoZW4gdGhlIG1ldGhvZCB3aWxsIG9wZW4gYSBmaWxlCi0gICBvYmplY3Qgd2l0aCB0aGF0IG5hbWUsIHdyaXRlIHRvIGl0ICB0aGVuIGNsb3NlIGl0LiAgSWYgKmZpbGUqIGlzIGEgOnRlcm06YGZpbGUKLSAgIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydCBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gaXQgdG8gc3RvcmUgdGhlIGxpbmVzIG9mCi0gICB0aGUgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKiBpcyBzdXBwbGllZCwgdGhlbiB0aGUgcmV0dXJuZWQgKmxpc3QqIGlzIGFuIGVtcHR5IGxpc3QuCisgICBTZW5kIGBgQVVUSElORk9gYCBjb21tYW5kcyB3aXRoIHRoZSB1c2VyIG5hbWUgYW5kIHBhc3N3b3JkLiAgSWYgKnVzZXIqCisgICBhbmQgKnBhc3N3b3JkKiBhcmUgTm9uZSBhbmQgKnVzZW5ldHJjKiBpcyBUcnVlLCBjcmVkZW50aWFscyBmcm9tCisgICBgYH4vLm5ldHJjYGAgd2lsbCBiZSB1c2VkIGlmIHBvc3NpYmxlLgorCisgICBVbmxlc3MgaW50ZW50aW9uYWxseSBkZWxheWVkLCBsb2dpbiBpcyBub3JtYWxseSBwZXJmb3JtZWQgZHVyaW5nIHRoZQorICAgOmNsYXNzOmBOTlRQYCBvYmplY3QgaW5pdGlhbGl6YXRpb24gYW5kIHNlcGFyYXRlbHkgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgICBpcyB1bm5lY2Vzc2FyeS4gIFRvIGZvcmNlIGF1dGhlbnRpY2F0aW9uIHRvIGJlIGRlbGF5ZWQsIHlvdSBtdXN0IG5vdCBzZXQKKyAgICp1c2VyKiBvciAqcGFzc3dvcmQqIHdoZW4gY3JlYXRpbmcgdGhlIG9iamVjdCwgYW5kIG11c3Qgc2V0ICp1c2VuZXRyYyogdG8KKyAgIEZhbHNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCi0uLiBtZXRob2Q6OiBOTlRQLm5ld25ld3MoZ3JvdXAsIGRhdGUsIHRpbWUsIFtmaWxlXSkKKy4uIG1ldGhvZDo6IE5OVFAuc3RhcnR0bHMoc3NsX2NvbnRleHQ9Tm9uZSkKKworICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwKKyAgIGFuZCBzaG91bGQgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBUaGlzIHdpbGwgZW5hYmxlCisgICBlbmNyeXB0aW9uIG9uIHRoZSBOTlRQIGNvbm5lY3Rpb24uCisKKyAgIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgZG9uZSBhZnRlciBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBoYXMKKyAgIGJlZW4gdHJhbnNtaXR0ZWQsIGFuZCBhdXRoZW50aWNhdGlvbiBvY2N1cnMgYnkgZGVmYXVsdCBpZiBwb3NzaWJsZSBkdXJpbmcgYQorICAgOmNsYXNzOmBOTlRQYCBvYmplY3QgaW5pdGlhbGl6YXRpb24uICBTZWUgOm1ldGg6YE5OVFAubG9naW5gIGZvciBpbmZvcm1hdGlvbgorICAgb24gc3VwcHJlc3NpbmcgdGhpcyBiZWhhdmlvci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gbWV0aG9kOjogTk5UUC5uZXdncm91cHMoZGF0ZSwgKiwgZmlsZT1Ob25lKQorCisgICBTZW5kIGEgYGBORVdHUk9VUFNgYCBjb21tYW5kLiAgVGhlICpkYXRlKiBhcmd1bWVudCBzaG91bGQgYmUgYQorICAgOmNsYXNzOmBkYXRldGltZS5kYXRlYCBvciA6Y2xhc3M6YGRhdGV0aW1lLmRhdGV0aW1lYCBvYmplY3QuCisgICBSZXR1cm4gYSBwYWlyIGBgKHJlc3BvbnNlLCBncm91cHMpYGAgd2hlcmUgKmdyb3VwcyogaXMgYSBsaXN0IHJlcHJlc2VudGluZworICAgdGhlIGdyb3VwcyB0aGF0IGFyZSBuZXcgc2luY2UgdGhlIGdpdmVuICpkYXRlKi4gSWYgKmZpbGUqIGlzIHN1cHBsaWVkLAorICAgdGhvdWdoLCB0aGVuICpncm91cHMqIHdpbGwgYmUgZW1wdHkuCisKKyAgICAgID4+PiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCB0aW1lZGVsdGEKKyAgICAgID4+PiByZXNwLCBncm91cHMgPSBzLm5ld2dyb3VwcyhkYXRlLnRvZGF5KCkgLSB0aW1lZGVsdGEoZGF5cz0zKSkKKyAgICAgID4+PiBsZW4oZ3JvdXBzKQorICAgICAgODUKKyAgICAgID4+PiBncm91cHNbMF0KKyAgICAgIEdyb3VwSW5mbyhncm91cD0nZ21hbmUubmV0d29yay50b3IuZGV2ZWwnLCBsYXN0PSc0JywgZmlyc3Q9JzEnLCBmbGFnPSdtJykKKworCisuLiBtZXRob2Q6OiBOTlRQLm5ld25ld3MoZ3JvdXAsIGRhdGUsICosIGZpbGU9Tm9uZSkKIAogICAgU2VuZCBhIGBgTkVXTkVXU2BgIGNvbW1hbmQuICBIZXJlLCAqZ3JvdXAqIGlzIGEgZ3JvdXAgbmFtZSBvciBgYCcqJ2BgLCBhbmQKLSAgICpkYXRlKiBhbmQgKnRpbWUqIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgOm1ldGg6YG5ld2dyb3Vwc2AuICBSZXR1cm4gYSBwYWlyCi0gICBgYChyZXNwb25zZSwgYXJ0aWNsZXMpYGAgd2hlcmUgKmFydGljbGVzKiBpcyBhIGxpc3Qgb2YgbWVzc2FnZSBpZHMuIElmIHRoZQotICAgKmZpbGUqIHBhcmFtZXRlciBpcyBzdXBwbGllZCwgdGhlbiB0aGUgb3V0cHV0IG9mIHRoZSAgYGBORVdORVdTYGAgY29tbWFuZCBpcwotICAgc3RvcmVkIGluIGEgZmlsZS4gIElmICpmaWxlKiBpcyBhIHN0cmluZywgIHRoZW4gdGhlIG1ldGhvZCB3aWxsIG9wZW4gYSBmaWxlCi0gICBvYmplY3Qgd2l0aCB0aGF0IG5hbWUsIHdyaXRlIHRvIGl0ICB0aGVuIGNsb3NlIGl0LiAgSWYgKmZpbGUqIGlzIGEgOnRlcm06YGZpbGUKLSAgIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydCBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gaXQgdG8gc3RvcmUgdGhlIGxpbmVzIG9mIHRoZQotICAgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKiBpcyBzdXBwbGllZCwgdGhlbiB0aGUgcmV0dXJuZWQgKmxpc3QqIGlzIGFuIGVtcHR5IGxpc3QuCisgICAqZGF0ZSogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIDptZXRoOmBuZXdncm91cHNgLiAgUmV0dXJuIGEgcGFpcgorICAgYGAocmVzcG9uc2UsIGFydGljbGVzKWBgIHdoZXJlICphcnRpY2xlcyogaXMgYSBsaXN0IG9mIG1lc3NhZ2UgaWRzLgorCisgICBUaGlzIGNvbW1hbmQgaXMgZnJlcXVlbnRseSBkaXNhYmxlZCBieSBOTlRQIHNlcnZlciBhZG1pbmlzdHJhdG9ycy4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLmxpc3QoW2ZpbGVdKQorLi4gbWV0aG9kOjogTk5UUC5saXN0KGdyb3VwX3BhdHRlcm49Tm9uZSwgKiwgZmlsZT1Ob25lKQogCi0gICBTZW5kIGEgYGBMSVNUYGAgY29tbWFuZC4gIFJldHVybiBhIHBhaXIgYGAocmVzcG9uc2UsIGxpc3QpYGAgd2hlcmUgKmxpc3QqIGlzIGEKLSAgIGxpc3Qgb2YgdHVwbGVzLiAgRWFjaCB0dXBsZSBoYXMgdGhlIGZvcm0gYGAoZ3JvdXAsIGxhc3QsIGZpcnN0LCBmbGFnKWBgLCB3aGVyZQotICAgKmdyb3VwKiBpcyBhIGdyb3VwIG5hbWUsICpsYXN0KiBhbmQgKmZpcnN0KiBhcmUgdGhlIGxhc3QgYW5kIGZpcnN0IGFydGljbGUKLSAgIG51bWJlcnMgKGFzIHN0cmluZ3MpLCBhbmQgKmZsYWcqIGlzIGBgJ3knYGAgaWYgcG9zdGluZyBpcyBhbGxvd2VkLCBgYCduJ2BgIGlmCi0gICBub3QsIGFuZCBgYCdtJ2BgIGlmIHRoZSBuZXdzZ3JvdXAgaXMgbW9kZXJhdGVkLiAgKE5vdGUgdGhlIG9yZGVyaW5nOiAqbGFzdCosCi0gICAqZmlyc3QqLikgSWYgdGhlICpmaWxlKiBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIHRoZW4gdGhlIG91dHB1dCBvZiB0aGUgIGBgTElTVGBgCi0gICBjb21tYW5kIGlzIHN0b3JlZCBpbiBhIGZpbGUuICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsICB0aGVuIHRoZSBtZXRob2Qgd2lsbCBvcGVuCi0gICBhIGZpbGUgd2l0aCB0aGF0IG5hbWUsIHdyaXRlIHRvIGl0ICB0aGVuIGNsb3NlIGl0LiAgSWYgKmZpbGUqIGlzIGEgOnRlcm06YGZpbGUKLSAgIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydCBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gaXQgdG8gc3RvcmUgdGhlIGxpbmVzIG9mCi0gICB0aGUgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKiBpcyBzdXBwbGllZCwgdGhlbiB0aGUgcmV0dXJuZWQgKmxpc3QqIGlzIGFuIGVtcHR5Ci0gICBsaXN0LgorICAgU2VuZCBhIGBgTElTVGBgIG9yIGBgTElTVCBBQ1RJVkVgYCBjb21tYW5kLiAgUmV0dXJuIGEgcGFpcgorICAgYGAocmVzcG9uc2UsIGxpc3QpYGAgd2hlcmUgKmxpc3QqIGlzIGEgbGlzdCBvZiB0dXBsZXMgcmVwcmVzZW50aW5nIGFsbAorICAgdGhlIGdyb3VwcyBhdmFpbGFibGUgZnJvbSB0aGlzIE5OVFAgc2VydmVyLCBvcHRpb25hbGx5IG1hdGNoaW5nIHRoZQorICAgcGF0dGVybiBzdHJpbmcgKmdyb3VwX3BhdHRlcm4qLiAgRWFjaCB0dXBsZSBoYXMgdGhlIGZvcm0KKyAgIGBgKGdyb3VwLCBsYXN0LCBmaXJzdCwgZmxhZylgYCwgd2hlcmUgKmdyb3VwKiBpcyBhIGdyb3VwIG5hbWUsICpsYXN0KgorICAgYW5kICpmaXJzdCogYXJlIHRoZSBsYXN0IGFuZCBmaXJzdCBhcnRpY2xlIG51bWJlcnMsIGFuZCAqZmxhZyogdXN1YWxseQorICAgdGFrZXMgb25lIG9mIHRoZXNlIHZhbHVlczoKKworICAgKiBgYHlgYDogTG9jYWwgcG9zdGluZ3MgYW5kIGFydGljbGVzIGZyb20gcGVlcnMgYXJlIGFsbG93ZWQuCisgICAqIGBgbWBgOiBUaGUgZ3JvdXAgaXMgbW9kZXJhdGVkIGFuZCBhbGwgcG9zdGluZ3MgbXVzdCBiZSBhcHByb3ZlZC4KKyAgICogYGBuYGA6IE5vIGxvY2FsIHBvc3RpbmdzIGFyZSBhbGxvd2VkLCBvbmx5IGFydGljbGVzIGZyb20gcGVlcnMuCisgICAqIGBgamBgOiBBcnRpY2xlcyBmcm9tIHBlZXJzIGFyZSBmaWxlZCBpbiB0aGUganVuayBncm91cCBpbnN0ZWFkLgorICAgKiBgYHhgYDogTm8gbG9jYWwgcG9zdGluZ3MsIGFuZCBhcnRpY2xlcyBmcm9tIHBlZXJzIGFyZSBpZ25vcmVkLgorICAgKiBgYD1mb28uYmFyYGA6IEFydGljbGVzIGFyZSBmaWxlZCBpbiB0aGUgYGBmb28uYmFyYGAgZ3JvdXAgaW5zdGVhZC4KKworICAgSWYgKmZsYWcqIGhhcyBhbm90aGVyIHZhbHVlLCB0aGVuIHRoZSBzdGF0dXMgb2YgdGhlIG5ld3Nncm91cCBzaG91bGQgYmUKKyAgIGNvbnNpZGVyZWQgdW5rbm93bi4KKworICAgVGhpcyBjb21tYW5kIGNhbiByZXR1cm4gdmVyeSBsYXJnZSByZXN1bHRzLCBlc3BlY2lhbGx5IGlmICpncm91cF9wYXR0ZXJuKgorICAgaXMgbm90IHNwZWNpZmllZC4gIEl0IGlzIGJlc3QgdG8gY2FjaGUgdGhlIHJlc3VsdHMgb2ZmbGluZSB1bmxlc3MgeW91CisgICByZWFsbHkgbmVlZCB0byByZWZyZXNoIHRoZW0uCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAqZ3JvdXBfcGF0dGVybiogd2FzIGFkZGVkLgogCiAKIC4uIG1ldGhvZDo6IE5OVFAuZGVzY3JpcHRpb25zKGdyb3VwcGF0dGVybikKIAogICAgU2VuZCBhIGBgTElTVCBORVdTR1JPVVBTYGAgY29tbWFuZCwgd2hlcmUgKmdyb3VwcGF0dGVybiogaXMgYSB3aWxkbWF0IHN0cmluZyBhcwotICAgc3BlY2lmaWVkIGluIFJGQzI5ODAgKGl0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgRE9TIG9yIFVOSVggc2hlbGwgd2lsZGNhcmQKLSAgIHN0cmluZ3MpLiAgUmV0dXJuIGEgcGFpciBgYChyZXNwb25zZSwgbGlzdClgYCwgd2hlcmUgKmxpc3QqIGlzIGEgbGlzdCBvZiB0dXBsZXMKLSAgIGNvbnRhaW5pbmcgYGAobmFtZSwgdGl0bGUpYGAuCisgICBzcGVjaWZpZWQgaW4gOnJmYzpgMzk3N2AgKGl0J3MgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgRE9TIG9yIFVOSVggc2hlbGwgd2lsZGNhcmQKKyAgIHN0cmluZ3MpLiAgUmV0dXJuIGEgcGFpciBgYChyZXNwb25zZSwgZGVzY3JpcHRpb25zKWBgLCB3aGVyZSAqZGVzY3JpcHRpb25zKgorICAgaXMgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgZ3JvdXAgbmFtZXMgdG8gdGV4dHVhbCBkZXNjcmlwdGlvbnMuCisKKyAgICAgID4+PiByZXNwLCBkZXNjcyA9IHMuZGVzY3JpcHRpb25zKCdnbWFuZS5jb21wLnB5dGhvbi4qJykKKyAgICAgID4+PiBsZW4oZGVzY3MpCisgICAgICAyOTUKKyAgICAgID4+PiBkZXNjcy5wb3BpdGVtKCkKKyAgICAgICgnZ21hbmUuY29tcC5weXRob24uYmlvLmdlbmVyYWwnLCAnQmlvUHl0aG9uIGRpc2N1c3Npb24gbGlzdCAoTW9kZXJhdGVkKScpCiAKIAogLi4gbWV0aG9kOjogTk5UUC5kZXNjcmlwdGlvbihncm91cCkKQEAgLTE5NSwzMCArMzA5LDc1IEBACiAKIC4uIG1ldGhvZDo6IE5OVFAuZ3JvdXAobmFtZSkKIAotICAgU2VuZCBhIGBgR1JPVVBgYCBjb21tYW5kLCB3aGVyZSAqbmFtZSogaXMgdGhlIGdyb3VwIG5hbWUuIFJldHVybiBhIHR1cGxlCi0gICBgYChyZXNwb25zZSwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lKWBgIHdoZXJlICpjb3VudCogaXMgdGhlIChlc3RpbWF0ZWQpIG51bWJlcgotICAgb2YgYXJ0aWNsZXMgaW4gdGhlIGdyb3VwLCAqZmlyc3QqIGlzIHRoZSBmaXJzdCBhcnRpY2xlIG51bWJlciBpbiB0aGUgZ3JvdXAsCi0gICAqbGFzdCogaXMgdGhlIGxhc3QgYXJ0aWNsZSBudW1iZXIgaW4gdGhlIGdyb3VwLCBhbmQgKm5hbWUqIGlzIHRoZSBncm91cCBuYW1lLgotICAgVGhlIG51bWJlcnMgYXJlIHJldHVybmVkIGFzIHN0cmluZ3MuCisgICBTZW5kIGEgYGBHUk9VUGBgIGNvbW1hbmQsIHdoZXJlICpuYW1lKiBpcyB0aGUgZ3JvdXAgbmFtZS4gIFRoZSBncm91cCBpcworICAgc2VsZWN0ZWQgYXMgdGhlIGN1cnJlbnQgZ3JvdXAsIGlmIGl0IGV4aXN0cy4gIFJldHVybiBhIHR1cGxlCisgICBgYChyZXNwb25zZSwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lKWBgIHdoZXJlICpjb3VudCogaXMgdGhlIChlc3RpbWF0ZWQpCisgICBudW1iZXIgb2YgYXJ0aWNsZXMgaW4gdGhlIGdyb3VwLCAqZmlyc3QqIGlzIHRoZSBmaXJzdCBhcnRpY2xlIG51bWJlciBpbgorICAgdGhlIGdyb3VwLCAqbGFzdCogaXMgdGhlIGxhc3QgYXJ0aWNsZSBudW1iZXIgaW4gdGhlIGdyb3VwLCBhbmQgKm5hbWUqCisgICBpcyB0aGUgZ3JvdXAgbmFtZS4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLmhlbHAoW2ZpbGVdKQorLi4gbWV0aG9kOjogTk5UUC5vdmVyKG1lc3NhZ2Vfc3BlYywgKiwgZmlsZT1Ob25lKQorCisgICBTZW5kIGEgYGBPVkVSYGAgY29tbWFuZCwgb3IgYSBgYFhPVkVSYGAgY29tbWFuZCBvbiBsZWdhY3kgc2VydmVycy4KKyAgICptZXNzYWdlX3NwZWMqIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgbWVzc2FnZSBpZCwgb3IKKyAgIGEgYGAoZmlyc3QsIGxhc3QpYGAgdHVwbGUgb2YgbnVtYmVycyBpbmRpY2F0aW5nIGEgcmFuZ2Ugb2YgYXJ0aWNsZXMgaW4KKyAgIHRoZSBjdXJyZW50IGdyb3VwLCBvciBhIGBgKGZpcnN0LCBOb25lKWBgIHR1cGxlIGluZGljYXRpbmcgYSByYW5nZSBvZgorICAgYXJ0aWNsZXMgc3RhcnRpbmcgZnJvbSAqZmlyc3QqIHRvIHRoZSBsYXN0IGFydGljbGUgaW4gdGhlIGN1cnJlbnQgZ3JvdXAsCisgICBvciA6Y29uc3Q6YE5vbmVgIHRvIHNlbGVjdCB0aGUgY3VycmVudCBhcnRpY2xlIGluIHRoZSBjdXJyZW50IGdyb3VwLgorCisgICBSZXR1cm4gYSBwYWlyIGBgKHJlc3BvbnNlLCBvdmVydmlld3MpYGAuICAqb3ZlcnZpZXdzKiBpcyBhIGxpc3Qgb2YKKyAgIGBgKGFydGljbGVfbnVtYmVyLCBvdmVydmlldylgYCB0dXBsZXMsIG9uZSBmb3IgZWFjaCBhcnRpY2xlIHNlbGVjdGVkCisgICBieSAqbWVzc2FnZV9zcGVjKi4gIEVhY2ggKm92ZXJ2aWV3KiBpcyBhIGRpY3Rpb25hcnkgd2l0aCB0aGUgc2FtZSBudW1iZXIKKyAgIG9mIGl0ZW1zLCBidXQgdGhpcyBudW1iZXIgZGVwZW5kcyBvbiB0aGUgc2VydmVyLiAgVGhlc2UgaXRlbXMgYXJlIGVpdGhlcgorICAgbWVzc2FnZSBoZWFkZXJzICh0aGUga2V5IGlzIHRoZW4gdGhlIGxvd2VyLWNhc2VkIGhlYWRlciBuYW1lKSBvciBtZXRhZGF0YQorICAgaXRlbXMgKHRoZSBrZXkgaXMgdGhlbiB0aGUgbWV0YWRhdGEgbmFtZSBwcmVwZW5kZWQgd2l0aCBgYCI6ImBgKS4gIFRoZQorICAgZm9sbG93aW5nIGl0ZW1zIGFyZSBndWFyYW50ZWVkIHRvIGJlIHByZXNlbnQgYnkgdGhlIE5OVFAgc3BlY2lmaWNhdGlvbjoKKworICAgKiB0aGUgYGBzdWJqZWN0YGAsIGBgZnJvbWBgLCBgYGRhdGVgYCwgYGBtZXNzYWdlLWlkYGAgYW5kIGBgcmVmZXJlbmNlc2BgCisgICAgIGhlYWRlcnMKKyAgICogdGhlIGBgOmJ5dGVzYGAgbWV0YWRhdGE6IHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGVudGlyZSByYXcgYXJ0aWNsZQorICAgICAoaW5jbHVkaW5nIGhlYWRlcnMgYW5kIGJvZHkpCisgICAqIHRoZSBgYDpsaW5lc2BgIG1ldGFkYXRhOiB0aGUgbnVtYmVyIG9mIGxpbmVzIGluIHRoZSBhcnRpY2xlIGJvZHkKKworICAgVGhlIHZhbHVlIG9mIGVhY2ggaXRlbSBpcyBlaXRoZXIgYSBzdHJpbmcsIG9yIDpjb25zdDpgTm9uZWAgaWYgbm90IHByZXNlbnQuCisKKyAgIEl0IGlzIGFkdmlzYWJsZSB0byB1c2UgdGhlIDpmdW5jOmBkZWNvZGVfaGVhZGVyYCBmdW5jdGlvbiBvbiBoZWFkZXIKKyAgIHZhbHVlcyB3aGVuIHRoZXkgbWF5IGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnM6OgorCisgICAgICA+Pj4gXywgXywgZmlyc3QsIGxhc3QsIF8gPSBzLmdyb3VwKCdnbWFuZS5jb21wLnB5dGhvbi5kZXZlbCcpCisgICAgICA+Pj4gcmVzcCwgb3ZlcnZpZXdzID0gcy5vdmVyKChsYXN0LCBsYXN0KSkKKyAgICAgID4+PiBhcnRfbnVtLCBvdmVyID0gb3ZlcnZpZXdzWzBdCisgICAgICA+Pj4gYXJ0X251bQorICAgICAgMTE3MjE2CisgICAgICA+Pj4gbGlzdChvdmVyLmtleXMoKSkKKyAgICAgIFsneHJlZicsICdmcm9tJywgJzpsaW5lcycsICc6Ynl0ZXMnLCAncmVmZXJlbmNlcycsICdkYXRlJywgJ21lc3NhZ2UtaWQnLCAnc3ViamVjdCddCisgICAgICA+Pj4gb3ZlclsnZnJvbSddCisgICAgICAnPT9VVEYtOD9CP0lrMWhjblJwYmlCMkxpQk13N1ozYVhNaT89IDxtYXJ0aW5Adi5sb2V3aXMuZGU+JworICAgICAgPj4+IG5udHBsaWIuZGVjb2RlX2hlYWRlcihvdmVyWydmcm9tJ10pCisgICAgICAnIk1hcnRpbiB2LiBMw7Z3aXMiIDxtYXJ0aW5Adi5sb2V3aXMuZGU+JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBtZXRob2Q6OiBOTlRQLmhlbHAoKiwgZmlsZT1Ob25lKQogCiAgICBTZW5kIGEgYGBIRUxQYGAgY29tbWFuZC4gIFJldHVybiBhIHBhaXIgYGAocmVzcG9uc2UsIGxpc3QpYGAgd2hlcmUgKmxpc3QqIGlzIGEKLSAgIGxpc3Qgb2YgaGVscCBzdHJpbmdzLiBJZiB0aGUgKmZpbGUqIHBhcmFtZXRlciBpcyBzdXBwbGllZCwgdGhlbiB0aGUgb3V0cHV0IG9mCi0gICB0aGUgIGBgSEVMUGBgIGNvbW1hbmQgaXMgc3RvcmVkIGluIGEgZmlsZS4gIElmICpmaWxlKiBpcyBhIHN0cmluZywgIHRoZW4gdGhlCi0gICBtZXRob2Qgd2lsbCBvcGVuIGEgZmlsZSB3aXRoIHRoYXQgbmFtZSwgd3JpdGUgdG8gaXQgIHRoZW4gY2xvc2UgaXQuICBJZiAqZmlsZSoKLSAgIGlzIGEgOnRlcm06YGZpbGUgb2JqZWN0YCwgdGhlbiBpdCB3aWxsIHN0YXJ0IGNhbGxpbmcgOm1ldGg6YHdyaXRlYCBvbiBpdCB0byBzdG9yZQotICAgdGhlIGxpbmVzIG9mIHRoZSBjb21tYW5kIG91dHB1dC4gSWYgKmZpbGUqIGlzIHN1cHBsaWVkLCB0aGVuIHRoZSByZXR1cm5lZCAqbGlzdCoKLSAgIGlzIGFuIGVtcHR5IGxpc3QuCisgICBsaXN0IG9mIGhlbHAgc3RyaW5ncy4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLnN0YXQoaWQpCisuLiBtZXRob2Q6OiBOTlRQLnN0YXQobWVzc2FnZV9zcGVjPU5vbmUpCiAKLSAgIFNlbmQgYSBgYFNUQVRgYCBjb21tYW5kLCB3aGVyZSAqaWQqIGlzIHRoZSBtZXNzYWdlIGlkIChlbmNsb3NlZCBpbiBgYCc8J2BgIGFuZAotICAgYGAnPidgYCkgb3IgYW4gYXJ0aWNsZSBudW1iZXIgKGFzIGEgc3RyaW5nKS4gUmV0dXJuIGEgdHJpcGxlIGBgKHJlc3BvbnNlLAotICAgbnVtYmVyLCBpZClgYCB3aGVyZSAqbnVtYmVyKiBpcyB0aGUgYXJ0aWNsZSBudW1iZXIgKGFzIGEgc3RyaW5nKSBhbmQgKmlkKiBpcyB0aGUKLSAgIG1lc3NhZ2UgaWQgIChlbmNsb3NlZCBpbiBgYCc8J2BgIGFuZCBgYCc+J2BgKS4KKyAgIFNlbmQgYSBgYFNUQVRgYCBjb21tYW5kLCB3aGVyZSAqbWVzc2FnZV9zcGVjKiBpcyBlaXRoZXIgYSBtZXNzYWdlIGlkCisgICAoZW5jbG9zZWQgaW4gYGAnPCdgYCBhbmQgYGAnPidgYCkgb3IgYW4gYXJ0aWNsZSBudW1iZXIgaW4gdGhlIGN1cnJlbnQgZ3JvdXAuCisgICBJZiAqbWVzc2FnZV9zcGVjKiBpcyBvbWl0dGVkIG9yIDpjb25zdDpgTm9uZWAsIHRoZSBjdXJyZW50IGFydGljbGUgaW4gdGhlCisgICBjdXJyZW50IGdyb3VwIGlzIGNvbnNpZGVyZWQuICBSZXR1cm4gYSB0cmlwbGUgYGAocmVzcG9uc2UsIG51bWJlciwgaWQpYGAKKyAgIHdoZXJlICpudW1iZXIqIGlzIHRoZSBhcnRpY2xlIG51bWJlciBhbmQgKmlkKiBpcyB0aGUgbWVzc2FnZSBpZC4KKworICAgICAgPj4+IF8sIF8sIGZpcnN0LCBsYXN0LCBfID0gcy5ncm91cCgnZ21hbmUuY29tcC5weXRob24uZGV2ZWwnKQorICAgICAgPj4+IHJlc3AsIG51bWJlciwgbWVzc2FnZV9pZCA9IHMuc3RhdChmaXJzdCkKKyAgICAgID4+PiBudW1iZXIsIG1lc3NhZ2VfaWQKKyAgICAgICg5MDk5LCAnPDIwMDMwMTEyMTkwNDA0LkdFMjk4NzNAZXBvY2gubWV0YXNsYXNoLmNvbT4nKQogCiAKIC4uIG1ldGhvZDo6IE5OVFAubmV4dCgpCkBAIC0yMzEsMjggKzM5MCw2OSBAQAogICAgU2VuZCBhIGBgTEFTVGBgIGNvbW1hbmQuICBSZXR1cm4gYXMgZm9yIDptZXRoOmBzdGF0YC4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLmhlYWQoaWQpCisuLiBtZXRob2Q6OiBOTlRQLmFydGljbGUobWVzc2FnZV9zcGVjPU5vbmUsICosIGZpbGU9Tm9uZSkKIAotICAgU2VuZCBhIGBgSEVBRGBgIGNvbW1hbmQsIHdoZXJlICppZCogaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIDptZXRoOmBzdGF0YC4KLSAgIFJldHVybiBhIHR1cGxlIGBgKHJlc3BvbnNlLCBudW1iZXIsIGlkLCBsaXN0KWBgIHdoZXJlIHRoZSBmaXJzdCB0aHJlZSBhcmUgdGhlCi0gICBzYW1lIGFzIGZvciA6bWV0aDpgc3RhdGAsIGFuZCAqbGlzdCogaXMgYSBsaXN0IG9mIHRoZSBhcnRpY2xlJ3MgaGVhZGVycyAoYW4KLSAgIHVuaW50ZXJwcmV0ZWQgbGlzdCBvZiBsaW5lcywgd2l0aG91dCB0cmFpbGluZyBuZXdsaW5lcykuCisgICBTZW5kIGFuIGBgQVJUSUNMRWBgIGNvbW1hbmQsIHdoZXJlICptZXNzYWdlX3NwZWMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzCisgICBmb3IgOm1ldGg6YHN0YXRgLiAgUmV0dXJuIGEgdHVwbGUgYGAocmVzcG9uc2UsIGluZm8pYGAgd2hlcmUgKmluZm8qCisgICBpcyBhIDpjbGFzczpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIHdpdGggdGhyZWUgbWVtYmVycyAqbnVtYmVyKiwKKyAgICptZXNzYWdlX2lkKiBhbmQgKmxpbmVzKiAoaW4gdGhhdCBvcmRlcikuICAqbnVtYmVyKiBpcyB0aGUgYXJ0aWNsZSBudW1iZXIKKyAgIGluIHRoZSBncm91cCAob3IgMCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSksICptZXNzYWdlX2lkKiB0aGUKKyAgIG1lc3NhZ2UgaWQgYXMgYSBzdHJpbmcsIGFuZCAqbGluZXMqIGEgbGlzdCBvZiBsaW5lcyAod2l0aG91dCB0ZXJtaW5hdGluZworICAgbmV3bGluZXMpIGNvbXByaXNpbmcgdGhlIHJhdyBtZXNzYWdlIGluY2x1ZGluZyBoZWFkZXJzIGFuZCBib2R5LgorCisgICAgICA+Pj4gcmVzcCwgaW5mbyA9IHMuYXJ0aWNsZSgnPDIwMDMwMTEyMTkwNDA0LkdFMjk4NzNAZXBvY2gubWV0YXNsYXNoLmNvbT4nKQorICAgICAgPj4+IGluZm8ubnVtYmVyCisgICAgICAwCisgICAgICA+Pj4gaW5mby5tZXNzYWdlX2lkCisgICAgICAnPDIwMDMwMTEyMTkwNDA0LkdFMjk4NzNAZXBvY2gubWV0YXNsYXNoLmNvbT4nCisgICAgICA+Pj4gbGVuKGluZm8ubGluZXMpCisgICAgICA2NQorICAgICAgPj4+IGluZm8ubGluZXNbMF0KKyAgICAgIGInUGF0aDogbWFpbi5nbWFuZS5vcmchbm90LWZvci1tYWlsJworICAgICAgPj4+IGluZm8ubGluZXNbMV0KKyAgICAgIGInRnJvbTogTmVhbCBOb3J3aXR6IDxuZWFsQG1ldGFzbGFzaC5jb20+JworICAgICAgPj4+IGluZm8ubGluZXNbLTM6XQorICAgICAgW2InVGhlcmUgaXMgYSBwYXRjaCBmb3IgMi4zIGFzIHdlbGwgYXMgMi4yLicsIGInJywgYidOZWFsJ10KIAogCi0uLiBtZXRob2Q6OiBOTlRQLmJvZHkoaWQsW2ZpbGVdKQorLi4gbWV0aG9kOjogTk5UUC5oZWFkKG1lc3NhZ2Vfc3BlYz1Ob25lLCAqLCBmaWxlPU5vbmUpCiAKLSAgIFNlbmQgYSBgYEJPRFlgYCBjb21tYW5kLCB3aGVyZSAqaWQqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciA6bWV0aDpgc3RhdGAuCi0gICBJZiB0aGUgKmZpbGUqIHBhcmFtZXRlciBpcyBzdXBwbGllZCwgdGhlbiB0aGUgYm9keSBpcyBzdG9yZWQgaW4gYSBmaWxlLiAgSWYKLSAgICpmaWxlKiBpcyBhIHN0cmluZywgdGhlbiB0aGUgbWV0aG9kIHdpbGwgb3BlbiBhIGZpbGUgd2l0aCB0aGF0IG5hbWUsIHdyaXRlCi0gICB0byBpdCB0aGVuIGNsb3NlIGl0LiBJZiAqZmlsZSogaXMgYSA6dGVybTpgZmlsZSBvYmplY3RgLCB0aGVuIGl0IHdpbGwgc3RhcnQKLSAgIGNhbGxpbmcgOm1ldGg6YHdyaXRlYCBvbiBpdCB0byBzdG9yZSB0aGUgbGluZXMgb2YgdGhlIGJvZHkuIFJldHVybiBhcyBmb3IKLSAgIDptZXRoOmBoZWFkYC4gIElmICpmaWxlKiBpcyBzdXBwbGllZCwgdGhlbiB0aGUgcmV0dXJuZWQgKmxpc3QqIGlzIGFuIGVtcHR5IGxpc3QuCisgICBTYW1lIGFzIDptZXRoOmBhcnRpY2xlKClgLCBidXQgc2VuZHMgYSBgYEhFQURgYCBjb21tYW5kLiAgVGhlICpsaW5lcyoKKyAgIHJldHVybmVkIChvciB3cml0dGVuIHRvICpmaWxlKikgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG1lc3NhZ2UgaGVhZGVycywgbm90CisgICB0aGUgYm9keS4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLmFydGljbGUoaWQpCisuLiBtZXRob2Q6OiBOTlRQLmJvZHkobWVzc2FnZV9zcGVjPU5vbmUsICosIGZpbGU9Tm9uZSkKIAotICAgU2VuZCBhbiBgYEFSVElDTEVgYCBjb21tYW5kLCB3aGVyZSAqaWQqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvcgotICAgOm1ldGg6YHN0YXRgLiAgUmV0dXJuIGFzIGZvciA6bWV0aDpgaGVhZGAuCisgICBTYW1lIGFzIDptZXRoOmBhcnRpY2xlKClgLCBidXQgc2VuZHMgYSBgYEJPRFlgYCBjb21tYW5kLiAgVGhlICpsaW5lcyoKKyAgIHJldHVybmVkIChvciB3cml0dGVuIHRvICpmaWxlKikgd2lsbCBvbmx5IGNvbnRhaW4gdGhlIG1lc3NhZ2UgYm9keSwgbm90IHRoZQorICAgaGVhZGVycy4KKworCisuLiBtZXRob2Q6OiBOTlRQLnBvc3QoZGF0YSkKKworICAgUG9zdCBhbiBhcnRpY2xlIHVzaW5nIHRoZSBgYFBPU1RgYCBjb21tYW5kLiAgVGhlICpkYXRhKiBhcmd1bWVudCBpcyBlaXRoZXIKKyAgIGEgOnRlcm06YGZpbGUgb2JqZWN0YCBvcGVuZWQgZm9yIGJpbmFyeSByZWFkaW5nLCBvciBhbnkgaXRlcmFibGUgb2YgYnl0ZXMKKyAgIG9iamVjdHMgKHJlcHJlc2VudGluZyByYXcgbGluZXMgb2YgdGhlIGFydGljbGUgdG8gYmUgcG9zdGVkKS4gIEl0IHNob3VsZAorICAgcmVwcmVzZW50IGEgd2VsbC1mb3JtZWQgbmV3cyBhcnRpY2xlLCBpbmNsdWRpbmcgdGhlIHJlcXVpcmVkIGhlYWRlcnMuICBUaGUKKyAgIDptZXRoOmBwb3N0YCBtZXRob2QgYXV0b21hdGljYWxseSBlc2NhcGVzIGxpbmVzIGJlZ2lubmluZyB3aXRoIGBgLmBgIGFuZAorICAgYXBwZW5kcyB0aGUgdGVybWluYXRpb24gbGluZS4KKworICAgSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHJldHVybmVkLiAgSWYgdGhlIHNlcnZlcgorICAgcmVmdXNlcyBwb3N0aW5nLCBhIDpjbGFzczpgTk5UUFJlcGx5RXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBOTlRQLmloYXZlKG1lc3NhZ2VfaWQsIGRhdGEpCisKKyAgIFNlbmQgYW4gYGBJSEFWRWBgIGNvbW1hbmQuICptZXNzYWdlX2lkKiBpcyB0aGUgaWQgb2YgdGhlIG1lc3NhZ2UgdG8gc2VuZAorICAgdG8gdGhlIHNlcnZlciAoZW5jbG9zZWQgaW4gIGBgJzwnYGAgYW5kIGBgJz4nYGApLiAgVGhlICpkYXRhKiBwYXJhbWV0ZXIKKyAgIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGFyZSB0aGUgc2FtZSBhcyBmb3IgOm1ldGg6YHBvc3QoKWAuCisKKworLi4gbWV0aG9kOjogTk5UUC5kYXRlKCkKKworICAgUmV0dXJuIGEgcGFpciBgYChyZXNwb25zZSwgZGF0ZSlgYC4gICpkYXRlKiBpcyBhIDpjbGFzczpgfmRhdGV0aW1lLmRhdGV0aW1lYAorICAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBvZiB0aGUgc2VydmVyLgogCiAKIC4uIG1ldGhvZDo6IE5OVFAuc2xhdmUoKQpAQCAtMjYwLDEwICs0NjAsMjMgQEAKICAgIFNlbmQgYSBgYFNMQVZFYGAgY29tbWFuZC4gIFJldHVybiB0aGUgc2VydmVyJ3MgKnJlc3BvbnNlKi4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLnhoZHIoaGVhZGVyLCBzdHJpbmcsIFtmaWxlXSkKKy4uIG1ldGhvZDo6IE5OVFAuc2V0X2RlYnVnbGV2ZWwobGV2ZWwpCiAKLSAgIFNlbmQgYW4gYGBYSERSYGAgY29tbWFuZC4gIFRoaXMgY29tbWFuZCBpcyBub3QgZGVmaW5lZCBpbiB0aGUgUkZDIGJ1dCBpcyBhCi0gICBjb21tb24gZXh0ZW5zaW9uLiAgVGhlICpoZWFkZXIqIGFyZ3VtZW50IGlzIGEgaGVhZGVyIGtleXdvcmQsIGUuZy4KKyAgIFNldCB0aGUgaW5zdGFuY2UncyBkZWJ1Z2dpbmcgbGV2ZWwuICBUaGlzIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgZGVidWdnaW5nCisgICBvdXRwdXQgcHJpbnRlZC4gIFRoZSBkZWZhdWx0LCBgYDBgYCwgcHJvZHVjZXMgbm8gZGVidWdnaW5nIG91dHB1dC4gIEEgdmFsdWUgb2YKKyAgIGBgMWBgIHByb2R1Y2VzIGEgbW9kZXJhdGUgYW1vdW50IG9mIGRlYnVnZ2luZyBvdXRwdXQsIGdlbmVyYWxseSBhIHNpbmdsZSBsaW5lCisgICBwZXIgcmVxdWVzdCBvciByZXNwb25zZS4gIEEgdmFsdWUgb2YgYGAyYGAgb3IgaGlnaGVyIHByb2R1Y2VzIHRoZSBtYXhpbXVtIGFtb3VudAorICAgb2YgZGVidWdnaW5nIG91dHB1dCwgbG9nZ2luZyBlYWNoIGxpbmUgc2VudCBhbmQgcmVjZWl2ZWQgb24gdGhlIGNvbm5lY3Rpb24KKyAgIChpbmNsdWRpbmcgbWVzc2FnZSB0ZXh0KS4KKworCitUaGUgZm9sbG93aW5nIGFyZSBvcHRpb25hbCBOTlRQIGV4dGVuc2lvbnMgZGVmaW5lZCBpbiA6cmZjOmAyOTgwYC4gIFNvbWUgb2YKK3RoZW0gaGF2ZSBiZWVuIHN1cGVyc2VkZWQgYnkgbmV3ZXIgY29tbWFuZHMgaW4gOnJmYzpgMzk3N2AuCisKKworLi4gbWV0aG9kOjogTk5UUC54aGRyKGhlYWRlciwgc3RyaW5nLCAqLCBmaWxlPU5vbmUpCisKKyAgIFNlbmQgYW4gYGBYSERSYGAgY29tbWFuZC4gIFRoZSAqaGVhZGVyKiBhcmd1bWVudCBpcyBhIGhlYWRlciBrZXl3b3JkLCBlLmcuCiAgICBgYCdzdWJqZWN0J2BgLiAgVGhlICpzdHJpbmcqIGFyZ3VtZW50IHNob3VsZCBoYXZlIHRoZSBmb3JtIGBgJ2ZpcnN0LWxhc3QnYGAKICAgIHdoZXJlICpmaXJzdCogYW5kICpsYXN0KiBhcmUgdGhlIGZpcnN0IGFuZCBsYXN0IGFydGljbGUgbnVtYmVycyB0byBzZWFyY2guCiAgICBSZXR1cm4gYSBwYWlyIGBgKHJlc3BvbnNlLCBsaXN0KWBgLCB3aGVyZSAqbGlzdCogaXMgYSBsaXN0IG9mIHBhaXJzIGBgKGlkLApAQCAtMjc2LDY2ICs0ODksNTUgQEAKICAgIHJldHVybmVkICpsaXN0KiBpcyBhbiBlbXB0eSBsaXN0LgogCiAKLS4uIG1ldGhvZDo6IE5OVFAucG9zdChmaWxlKQorLi4gbWV0aG9kOjogTk5UUC54b3ZlcihzdGFydCwgZW5kLCAqLCBmaWxlPU5vbmUpCiAKLSAgIFBvc3QgYW4gYXJ0aWNsZSB1c2luZyB0aGUgYGBQT1NUYGAgY29tbWFuZC4gIFRoZSAqZmlsZSogYXJndW1lbnQgaXMgYW4gb3BlbiBmaWxlCi0gICBvYmplY3Qgd2hpY2ggaXMgcmVhZCB1bnRpbCBFT0YgdXNpbmcgaXRzIDptZXRoOmByZWFkbGluZWAgbWV0aG9kLiAgSXQgc2hvdWxkIGJlCi0gICBhIHdlbGwtZm9ybWVkIG5ld3MgYXJ0aWNsZSwgaW5jbHVkaW5nIHRoZSByZXF1aXJlZCBoZWFkZXJzLiAgVGhlIDptZXRoOmBwb3N0YAotICAgbWV0aG9kIGF1dG9tYXRpY2FsbHkgZXNjYXBlcyBsaW5lcyBiZWdpbm5pbmcgd2l0aCBgYC5gYC4KLQotCi0uLiBtZXRob2Q6OiBOTlRQLmloYXZlKGlkLCBmaWxlKQotCi0gICBTZW5kIGFuIGBgSUhBVkVgYCBjb21tYW5kLiAqaWQqIGlzIGEgbWVzc2FnZSBpZCAoZW5jbG9zZWQgaW4gIGBgJzwnYGAgYW5kCi0gICBgYCc+J2BgKS4gSWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBhbiBlcnJvciwgdHJlYXQgKmZpbGUqIGV4YWN0bHkgYXMgZm9yIHRoZQotICAgOm1ldGg6YHBvc3RgIG1ldGhvZC4KLQotCi0uLiBtZXRob2Q6OiBOTlRQLmRhdGUoKQotCi0gICBSZXR1cm4gYSB0cmlwbGUgYGAocmVzcG9uc2UsIGRhdGUsIHRpbWUpYGAsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZQotICAgaW4gYSBmb3JtIHN1aXRhYmxlIGZvciB0aGUgOm1ldGg6YG5ld25ld3NgIGFuZCA6bWV0aDpgbmV3Z3JvdXBzYCBtZXRob2RzLiBUaGlzCi0gICBpcyBhbiBvcHRpb25hbCBOTlRQIGV4dGVuc2lvbiwgYW5kIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2ZXJzLgotCi0KLS4uIG1ldGhvZDo6IE5OVFAueGd0aXRsZShuYW1lLCBbZmlsZV0pCi0KLSAgIFByb2Nlc3MgYW4gYGBYR1RJVExFYGAgY29tbWFuZCwgcmV0dXJuaW5nIGEgcGFpciBgYChyZXNwb25zZSwgbGlzdClgYCwgd2hlcmUKLSAgICpsaXN0KiBpcyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgYGAobmFtZSwgdGl0bGUpYGAuIElmIHRoZSAqZmlsZSogcGFyYW1ldGVyCi0gICBpcyBzdXBwbGllZCwgdGhlbiB0aGUgb3V0cHV0IG9mIHRoZSAgYGBYR1RJVExFYGAgY29tbWFuZCBpcyBzdG9yZWQgaW4gYSBmaWxlLgotICAgSWYgKmZpbGUqIGlzIGEgc3RyaW5nLCAgdGhlbiB0aGUgbWV0aG9kIHdpbGwgb3BlbiBhIGZpbGUgd2l0aCB0aGF0IG5hbWUsIHdyaXRlCi0gICB0byBpdCAgdGhlbiBjbG9zZSBpdC4gIElmICpmaWxlKiBpcyBhIDp0ZXJtOmBmaWxlIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydAotICAgY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGl0IHRvIHN0b3JlIHRoZSBsaW5lcyBvZiB0aGUgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKgotICAgaXMgc3VwcGxpZWQsIHRoZW4gdGhlIHJldHVybmVkICpsaXN0KiBpcyBhbiBlbXB0eSBsaXN0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIE5OVFAKLSAgIGV4dGVuc2lvbiwgYW5kIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2ZXJzLgotCi0gICBSRkMyOTgwIHNheXMgIkl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoaXMgZXh0ZW5zaW9uIGJlIGRlcHJlY2F0ZWQiLiAgVXNlCi0gICA6bWV0aDpgZGVzY3JpcHRpb25zYCBvciA6bWV0aDpgZGVzY3JpcHRpb25gIGluc3RlYWQuCi0KLQotLi4gbWV0aG9kOjogTk5UUC54b3ZlcihzdGFydCwgZW5kLCBbZmlsZV0pCi0KLSAgIFJldHVybiBhIHBhaXIgYGAocmVzcCwgbGlzdClgYC4gICpsaXN0KiBpcyBhIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2gKLSAgIGFydGljbGUgaW4gdGhlIHJhbmdlIGRlbGltaXRlZCBieSB0aGUgKnN0YXJ0KiBhbmQgKmVuZCogYXJ0aWNsZSBudW1iZXJzLiAgRWFjaAotICAgdHVwbGUgaXMgb2YgdGhlIGZvcm0gYGAoYXJ0aWNsZSBudW1iZXIsIHN1YmplY3QsIHBvc3RlciwgZGF0ZSwgaWQsIHJlZmVyZW5jZXMsCi0gICBzaXplLCBsaW5lcylgYC4gSWYgdGhlICpmaWxlKiBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIHRoZW4gdGhlIG91dHB1dCBvZiB0aGUKLSAgIGBgWE9WRVJgYCBjb21tYW5kIGlzIHN0b3JlZCBpbiBhIGZpbGUuICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsICB0aGVuIHRoZSBtZXRob2QKLSAgIHdpbGwgb3BlbiBhIGZpbGUgd2l0aCB0aGF0IG5hbWUsIHdyaXRlIHRvIGl0ICB0aGVuIGNsb3NlIGl0LiAgSWYgKmZpbGUqIGlzIGEKLSAgIDp0ZXJtOmBmaWxlIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydCBjYWxsaW5nIDptZXRoOmB3cml0ZWAgb24gaXQgdG8gc3RvcmUgdGhlCi0gICBsaW5lcyBvZiB0aGUgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKiBpcyBzdXBwbGllZCwgdGhlbiB0aGUgcmV0dXJuZWQgKmxpc3QqIGlzCi0gICBhbiBlbXB0eSBsaXN0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIE5OVFAgZXh0ZW5zaW9uLCBhbmQgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkKLSAgIGFsbCBzZXJ2ZXJzLgorICAgU2VuZCBhbiBgYFhPVkVSYGAgY29tbWFuZC4gICpzdGFydCogYW5kICplbmQqIGFyZSBhcnRpY2xlIG51bWJlcnMKKyAgIGRlbGltaXRpbmcgdGhlIHJhbmdlIG9mIGFydGljbGVzIHRvIHNlbGVjdC4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlCisgICBzYW1lIG9mIGZvciA6bWV0aDpgb3ZlcigpYC4gIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSA6bWV0aDpgb3ZlcigpYAorICAgaW5zdGVhZCwgc2luY2UgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgbmV3ZXIgYGBPVkVSYGAgY29tbWFuZAorICAgaWYgYXZhaWxhYmxlLgogCiAKIC4uIG1ldGhvZDo6IE5OVFAueHBhdGgoaWQpCiAKICAgIFJldHVybiBhIHBhaXIgYGAocmVzcCwgcGF0aClgYCwgd2hlcmUgKnBhdGgqIGlzIHRoZSBkaXJlY3RvcnkgcGF0aCB0byB0aGUKLSAgIGFydGljbGUgd2l0aCBtZXNzYWdlIElEICppZCouICBUaGlzIGlzIGFuIG9wdGlvbmFsIE5OVFAgZXh0ZW5zaW9uLCBhbmQgbWF5IG5vdAotICAgYmUgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2ZXJzLgorICAgYXJ0aWNsZSB3aXRoIG1lc3NhZ2UgSUQgKmlkKi4gIE1vc3Qgb2YgdGhlIHRpbWUsIHRoaXMgZXh0ZW5zaW9uIGlzIG5vdAorICAgZW5hYmxlZCBieSBOTlRQIHNlcnZlciBhZG1pbmlzdHJhdG9ycy4KIAogCi0uLiBtZXRob2Q6OiBOTlRQLnF1aXQoKQorLi4gWFhYIGRlcHJlY2F0ZWQ6CiAKLSAgIFNlbmQgYSBgYFFVSVRgYCBjb21tYW5kIGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbi4gIE9uY2UgdGhpcyBtZXRob2QgaGFzIGJlZW4KLSAgIGNhbGxlZCwgbm8gb3RoZXIgbWV0aG9kcyBvZiB0aGUgTk5UUCBvYmplY3Qgc2hvdWxkIGJlIGNhbGxlZC4KKyAgIC4uIG1ldGhvZDo6IE5OVFAueGd0aXRsZShuYW1lLCAqLCBmaWxlPU5vbmUpCiAKKyAgICAgIFByb2Nlc3MgYW4gYGBYR1RJVExFYGAgY29tbWFuZCwgcmV0dXJuaW5nIGEgcGFpciBgYChyZXNwb25zZSwgbGlzdClgYCwgd2hlcmUKKyAgICAgICpsaXN0KiBpcyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgYGAobmFtZSwgdGl0bGUpYGAuIElmIHRoZSAqZmlsZSogcGFyYW1ldGVyCisgICAgICBpcyBzdXBwbGllZCwgdGhlbiB0aGUgb3V0cHV0IG9mIHRoZSAgYGBYR1RJVExFYGAgY29tbWFuZCBpcyBzdG9yZWQgaW4gYSBmaWxlLgorICAgICAgSWYgKmZpbGUqIGlzIGEgc3RyaW5nLCAgdGhlbiB0aGUgbWV0aG9kIHdpbGwgb3BlbiBhIGZpbGUgd2l0aCB0aGF0IG5hbWUsIHdyaXRlCisgICAgICB0byBpdCAgdGhlbiBjbG9zZSBpdC4gIElmICpmaWxlKiBpcyBhIDp0ZXJtOmBmaWxlIG9iamVjdGAsIHRoZW4gaXQgd2lsbCBzdGFydAorICAgICAgY2FsbGluZyA6bWV0aDpgd3JpdGVgIG9uIGl0IHRvIHN0b3JlIHRoZSBsaW5lcyBvZiB0aGUgY29tbWFuZCBvdXRwdXQuIElmICpmaWxlKgorICAgICAgaXMgc3VwcGxpZWQsIHRoZW4gdGhlIHJldHVybmVkICpsaXN0KiBpcyBhbiBlbXB0eSBsaXN0LiBUaGlzIGlzIGFuIG9wdGlvbmFsIE5OVFAKKyAgICAgIGV4dGVuc2lvbiwgYW5kIG1heSBub3QgYmUgc3VwcG9ydGVkIGJ5IGFsbCBzZXJ2ZXJzLgorCisgICAgICBSRkMyOTgwIHNheXMgIkl0IGlzIHN1Z2dlc3RlZCB0aGF0IHRoaXMgZXh0ZW5zaW9uIGJlIGRlcHJlY2F0ZWQiLiAgVXNlCisgICAgICA6bWV0aDpgZGVzY3JpcHRpb25zYCBvciA6bWV0aDpgZGVzY3JpcHRpb25gIGluc3RlYWQuCisKKworVXRpbGl0eSBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbjoKKworCisuLiBmdW5jdGlvbjo6IGRlY29kZV9oZWFkZXIoaGVhZGVyX3N0cikKKworICAgRGVjb2RlIGEgaGVhZGVyIHZhbHVlLCB1bi1lc2NhcGluZyBhbnkgZXNjYXBlZCBub24tQVNDSUkgY2hhcmFjdGVycy4KKyAgICpoZWFkZXJfc3RyKiBtdXN0IGJlIGEgOmNsYXNzOmBzdHJgIG9iamVjdC4gIFRoZSB1bmVzY2FwZWQgdmFsdWUgaXMKKyAgIHJldHVybmVkLiAgVXNpbmcgdGhpcyBmdW5jdGlvbiBpcyByZWNvbW1lbmRlZCB0byBkaXNwbGF5IHNvbWUgaGVhZGVycworICAgaW4gYSBodW1hbiByZWFkYWJsZSBmb3JtOjoKKworICAgICAgPj4+IGRlY29kZV9oZWFkZXIoIlNvbWUgc3ViamVjdCIpCisgICAgICAnU29tZSBzdWJqZWN0JworICAgICAgPj4+IGRlY29kZV9oZWFkZXIoIj0/SVNPLTg4NTktMTU/UT9EPUU5YnV0ZXJfZW5fUHl0aG9uPz0iKQorICAgICAgJ0TDqWJ1dGVyIGVuIFB5dGhvbicKKyAgICAgID4+PiBkZWNvZGVfaGVhZGVyKCJSZTogPT9VVEYtOD9CP2NISnZZbXpEcUcxbElHUmxJRzFoZEhKcFkyVT0/PSIpCisgICAgICAnUmU6IHByb2Jsw6htZSBkZSBtYXRyaWNlJwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAppbmRleCA2NDFmNTg4Li5iYTIyY2I2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAorKysgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdApAQCAtMjMsNiArMjMsMyBAQAogICAgZGVjaW1hbC5yc3QKICAgIGZyYWN0aW9ucy5yc3QKICAgIHJhbmRvbS5yc3QKLSAgIGl0ZXJ0b29scy5yc3QKLSAgIGZ1bmN0b29scy5yc3QKLSAgIG9wZXJhdG9yLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb2JqZWN0cy5yc3QgYi9Eb2MvbGlicmFyeS9vYmplY3RzLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI3NTE2MS4uMDAwMDAwMAotLS0gYS9Eb2MvbGlicmFyeS9vYmplY3RzLnJzdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLQotLi4gX2J1aWx0aW46Ci0KLSoqKioqKioqKioqKioqKioKLUJ1aWx0LWluIE9iamVjdHMKLSoqKioqKioqKioqKioqKioKLQotLi4gaW5kZXg6OgotICAgcGFpcjogYnVpbHQtaW47IHR5cGVzCi0gICBwYWlyOiBidWlsdC1pbjsgZXhjZXB0aW9ucwotICAgcGFpcjogYnVpbHQtaW47IGZ1bmN0aW9ucwotICAgcGFpcjogYnVpbHQtaW47IGNvbnN0YW50cwotICAgc2luZ2xlOiBzeW1ib2wgdGFibGUKLQotTmFtZXMgZm9yIGJ1aWx0LWluIGV4Y2VwdGlvbnMgYW5kIGZ1bmN0aW9ucyBhbmQgYSBudW1iZXIgb2YgY29uc3RhbnRzIGFyZSBmb3VuZAotaW4gYSBzZXBhcmF0ZSAgc3ltYm9sIHRhYmxlLiAgVGhpcyB0YWJsZSBpcyBzZWFyY2hlZCBsYXN0IHdoZW4gdGhlIGludGVycHJldGVyCi1sb29rcyB1cCB0aGUgbWVhbmluZyBvZiBhIG5hbWUsIHNvIGxvY2FsIGFuZCBnbG9iYWwgdXNlci1kZWZpbmVkIG5hbWVzIGNhbgotb3ZlcnJpZGUgYnVpbHQtaW4gbmFtZXMuICBCdWlsdC1pbiB0eXBlcyBhcmUgZGVzY3JpYmVkIHRvZ2V0aGVyIGhlcmUgZm9yIGVhc3kKLXJlZmVyZW5jZS4KLQotVGhlIHRhYmxlcyBpbiB0aGlzIGNoYXB0ZXIgZG9jdW1lbnQgdGhlIHByaW9yaXRpZXMgb2Ygb3BlcmF0b3JzIGJ5IGxpc3RpbmcgdGhlbQotaW4gb3JkZXIgb2YgYXNjZW5kaW5nIHByaW9yaXR5ICh3aXRoaW4gYSB0YWJsZSkgYW5kIGdyb3VwaW5nIG9wZXJhdG9ycyB0aGF0IGhhdmUKLXRoZSBzYW1lIHByaW9yaXR5IGluIHRoZSBzYW1lIGJveC4gQmluYXJ5IG9wZXJhdG9ycyBvZiB0aGUgc2FtZSBwcmlvcml0eSBncm91cAotZnJvbSBsZWZ0IHRvIHJpZ2h0LiAoVW5hcnkgb3BlcmF0b3JzIGdyb3VwIGZyb20gcmlnaHQgdG8gbGVmdCwgYnV0IHRoZXJlIHlvdQotaGF2ZSBubyByZWFsIGNob2ljZS4pICBTZWUgOnJlZjpgb3BlcmF0b3Itc3VtbWFyeWAgZm9yIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9uCi1vcGVyYXRvciBwcmlvcml0aWVzLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKaW5kZXggNDNiZGVlZi4uMWRjMGUxNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdApAQCAtOSw3ICs5LDcgQEAKIC4uIHRlc3RzZXR1cDo6CiAKICAgIGltcG9ydCBvcGVyYXRvcgotICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgorICAgZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlciwgaWFkZAogCiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMKQEAgLTIyNSw5MSArMjI1LDYgQEAKIAogICAgU2V0IHRoZSB2YWx1ZSBvZiAqYSogYXQgaW5kZXggKmIqIHRvICpjKi4KIAotCi1NYW55IG9wZXJhdGlvbnMgaGF2ZSBhbiAiaW4tcGxhY2UiIHZlcnNpb24uICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIGEKLW1vcmUgcHJpbWl0aXZlIGFjY2VzcyB0byBpbi1wbGFjZSBvcGVyYXRvcnMgdGhhbiB0aGUgdXN1YWwgc3ludGF4IGRvZXM7IGZvcgotZXhhbXBsZSwgdGhlIDp0ZXJtOmBzdGF0ZW1lbnRgIGBgeCArPSB5YGAgaXMgZXF1aXZhbGVudCB0bwotYGB4ID0gb3BlcmF0b3IuaWFkZCh4LCB5KWBgLiAgQW5vdGhlciB3YXkgdG8gcHV0IGl0IGlzIHRvIHNheSB0aGF0Ci1gYHogPSBvcGVyYXRvci5pYWRkKHgsIHkpYGAgaXMgZXF1aXZhbGVudCB0byB0aGUgY29tcG91bmQgc3RhdGVtZW50Ci1gYHogPSB4OyB6ICs9IHlgYC4KLQotLi4gZnVuY3Rpb246OiBpYWRkKGEsIGIpCi0gICAgICAgICAgICAgIF9faWFkZF9fKGEsIGIpCi0KLSAgIGBgYSA9IGlhZGQoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSArPSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpYW5kKGEsIGIpCi0gICAgICAgICAgICAgIF9faWFuZF9fKGEsIGIpCi0KLSAgIGBgYSA9IGlhbmQoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAmPSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpY29uY2F0KGEsIGIpCi0gICAgICAgICAgICAgIF9faWNvbmNhdF9fKGEsIGIpCi0KLSAgIGBgYSA9IGljb25jYXQoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSArPSBiYGAgZm9yICphKiBhbmQgKmIqIHNlcXVlbmNlcy4KLQotCi0uLiBmdW5jdGlvbjo6IGlmbG9vcmRpdihhLCBiKQotICAgICAgICAgICAgICBfX2lmbG9vcmRpdl9fKGEsIGIpCi0KLSAgIGBgYSA9IGlmbG9vcmRpdihhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIC8vPSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpbHNoaWZ0KGEsIGIpCi0gICAgICAgICAgICAgIF9faWxzaGlmdF9fKGEsIGIpCi0KLSAgIGBgYSA9IGlsc2hpZnQoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSA8PD0gYmBgLgotCi0KLS4uIGZ1bmN0aW9uOjogaW1vZChhLCBiKQotICAgICAgICAgICAgICBfX2ltb2RfXyhhLCBiKQotCi0gICBgYGEgPSBpbW9kKGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgJT0gYmBgLgotCi0KLS4uIGZ1bmN0aW9uOjogaW11bChhLCBiKQotICAgICAgICAgICAgICBfX2ltdWxfXyhhLCBiKQotCi0gICBgYGEgPSBpbXVsKGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgKj0gYmBgLgotCi0KLS4uIGZ1bmN0aW9uOjogaW9yKGEsIGIpCi0gICAgICAgICAgICAgIF9faW9yX18oYSwgYikKLQotICAgYGBhID0gaW9yKGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgfD0gYmBgLgotCi0KLS4uIGZ1bmN0aW9uOjogaXBvdyhhLCBiKQotICAgICAgICAgICAgICBfX2lwb3dfXyhhLCBiKQotCi0gICBgYGEgPSBpcG93KGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgKio9IGJgYC4KLQotCi0uLiBmdW5jdGlvbjo6IGlyc2hpZnQoYSwgYikKLSAgICAgICAgICAgICAgX19pcnNoaWZ0X18oYSwgYikKLQotICAgYGBhID0gaXJzaGlmdChhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhID4+PSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpc3ViKGEsIGIpCi0gICAgICAgICAgICAgIF9faXN1Yl9fKGEsIGIpCi0KLSAgIGBgYSA9IGlzdWIoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAtPSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpdHJ1ZWRpdihhLCBiKQotICAgICAgICAgICAgICBfX2l0cnVlZGl2X18oYSwgYikKLQotICAgYGBhID0gaXRydWVkaXYoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAvPSBiYGAuCi0KLQotLi4gZnVuY3Rpb246OiBpeG9yKGEsIGIpCi0gICAgICAgICAgICAgIF9faXhvcl9fKGEsIGIpCi0KLSAgIGBgYSA9IGl4b3IoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSBePSBiYGAuCi0KIEV4YW1wbGU6IEJ1aWxkIGEgZGljdGlvbmFyeSB0aGF0IG1hcHMgdGhlIG9yZGluYWxzIGZyb20gYGAwYGAgdG8gYGAyNTVgYCB0bwogdGhlaXIgY2hhcmFjdGVyIGVxdWl2YWxlbnRzLgogCkBAIC0zMzUsNiArMjUwLDggQEAKICAgIGIuZGF0ZSlgYC4gIEVxdWl2YWxlbnQgdG86OgogCiAgICAgICBkZWYgYXR0cmdldHRlcigqaXRlbXMpOgorICAgICAgICAgIGlmIGFueShub3QgaXNpbnN0YW5jZShpdGVtLCBzdHIpIGZvciBpdGVtIGluIGl0ZW1zKToKKyAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykKICAgICAgICAgICBpZiBsZW4oaXRlbXMpID09IDE6CiAgICAgICAgICAgICAgIGF0dHIgPSBpdGVtc1swXQogICAgICAgICAgICAgICBkZWYgZyhvYmopOgpAQCAtNDg4LDMgKzQwNSwxMTIgQEAKIHwgT3JkZXJpbmcgICAgICAgICAgICAgIHwgYGBhID4gYmBgICAgICAgICAgICAgICAgfCBgYGd0KGEsIGIpYGAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAorSW5wbGFjZSBPcGVyYXRvcnMKKz09PT09PT09PT09PT09PT09CisKK01hbnkgb3BlcmF0aW9ucyBoYXZlIGFuICJpbi1wbGFjZSIgdmVyc2lvbi4gIExpc3RlZCBiZWxvdyBhcmUgZnVuY3Rpb25zCitwcm92aWRpbmcgYSBtb3JlIHByaW1pdGl2ZSBhY2Nlc3MgdG8gaW4tcGxhY2Ugb3BlcmF0b3JzIHRoYW4gdGhlIHVzdWFsIHN5bnRheAorZG9lczsgZm9yIGV4YW1wbGUsIHRoZSA6dGVybTpgc3RhdGVtZW50YCBgYHggKz0geWBgIGlzIGVxdWl2YWxlbnQgdG8KK2BgeCA9IG9wZXJhdG9yLmlhZGQoeCwgeSlgYC4gIEFub3RoZXIgd2F5IHRvIHB1dCBpdCBpcyB0byBzYXkgdGhhdAorYGB6ID0gb3BlcmF0b3IuaWFkZCh4LCB5KWBgIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGNvbXBvdW5kIHN0YXRlbWVudAorYGB6ID0geDsgeiArPSB5YGAuCisKK0luIHRob3NlIGV4YW1wbGVzLCBub3RlIHRoYXQgd2hlbiBhbiBpbi1wbGFjZSBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY29tcHV0YXRpb24KK2FuZCBhc3NpZ25tZW50IGFyZSBwZXJmb3JtZWQgaW4gdHdvIHNlcGFyYXRlIHN0ZXBzLiAgVGhlIGluLXBsYWNlIGZ1bmN0aW9ucworbGlzdGVkIGJlbG93IG9ubHkgZG8gdGhlIGZpcnN0IHN0ZXAsIGNhbGxpbmcgdGhlIGluLXBsYWNlIG1ldGhvZC4gIFRoZSBzZWNvbmQKK3N0ZXAsIGFzc2lnbm1lbnQsIGlzIG5vdCBoYW5kbGVkLgorCitGb3IgaW1tdXRhYmxlIHRhcmdldHMgc3VjaCBhcyBzdHJpbmdzLCBudW1iZXJzLCBhbmQgdHVwbGVzLCB0aGUgdXBkYXRlZAordmFsdWUgaXMgY29tcHV0ZWQsIGJ1dCBub3QgYXNzaWduZWQgYmFjayB0byB0aGUgaW5wdXQgdmFyaWFibGU6CisKKz4+PiBhID0gJ2hlbGxvJworPj4+IGlhZGQoYSwgJyB3b3JsZCcpCisnaGVsbG8gd29ybGQnCis+Pj4gYQorJ2hlbGxvJworCitGb3IgbXV0YWJsZSB0YXJnZXRzIHN1Y2ggYXMgbGlzdHMgYW5kIGRpY3Rpb25hcmllcywgdGhlIGlucGxhY2UgbWV0aG9kCit3aWxsIHBlcmZvcm0gdGhlIHVwZGF0ZSwgc28gbm8gc3Vic2VxdWVudCBhc3NpZ25tZW50IGlzIG5lY2Vzc2FyeToKKworPj4+IHMgPSBbJ2gnLCAnZScsICdsJywgJ2wnLCAnbyddCis+Pj4gaWFkZChzLCBbJyAnLCAndycsICdvJywgJ3InLCAnbCcsICdkJ10pCitbJ2gnLCAnZScsICdsJywgJ2wnLCAnbycsICcgJywgJ3cnLCAnbycsICdyJywgJ2wnLCAnZCddCis+Pj4gcworWydoJywgJ2UnLCAnbCcsICdsJywgJ28nLCAnICcsICd3JywgJ28nLCAncicsICdsJywgJ2QnXQorCisuLiBmdW5jdGlvbjo6IGlhZGQoYSwgYikKKyAgICAgICAgICAgICAgX19pYWRkX18oYSwgYikKKworICAgYGBhID0gaWFkZChhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhICs9IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGlhbmQoYSwgYikKKyAgICAgICAgICAgICAgX19pYW5kX18oYSwgYikKKworICAgYGBhID0gaWFuZChhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhICY9IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGljb25jYXQoYSwgYikKKyAgICAgICAgICAgICAgX19pY29uY2F0X18oYSwgYikKKworICAgYGBhID0gaWNvbmNhdChhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhICs9IGJgYCBmb3IgKmEqIGFuZCAqYiogc2VxdWVuY2VzLgorCisKKy4uIGZ1bmN0aW9uOjogaWZsb29yZGl2KGEsIGIpCisgICAgICAgICAgICAgIF9faWZsb29yZGl2X18oYSwgYikKKworICAgYGBhID0gaWZsb29yZGl2KGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgLy89IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGlsc2hpZnQoYSwgYikKKyAgICAgICAgICAgICAgX19pbHNoaWZ0X18oYSwgYikKKworICAgYGBhID0gaWxzaGlmdChhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIDw8PSBiYGAuCisKKworLi4gZnVuY3Rpb246OiBpbW9kKGEsIGIpCisgICAgICAgICAgICAgIF9faW1vZF9fKGEsIGIpCisKKyAgIGBgYSA9IGltb2QoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAlPSBiYGAuCisKKworLi4gZnVuY3Rpb246OiBpbXVsKGEsIGIpCisgICAgICAgICAgICAgIF9faW11bF9fKGEsIGIpCisKKyAgIGBgYSA9IGltdWwoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAqPSBiYGAuCisKKworLi4gZnVuY3Rpb246OiBpb3IoYSwgYikKKyAgICAgICAgICAgICAgX19pb3JfXyhhLCBiKQorCisgICBgYGEgPSBpb3IoYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSB8PSBiYGAuCisKKworLi4gZnVuY3Rpb246OiBpcG93KGEsIGIpCisgICAgICAgICAgICAgIF9faXBvd19fKGEsIGIpCisKKyAgIGBgYSA9IGlwb3coYSwgYilgYCBpcyBlcXVpdmFsZW50IHRvIGBgYSAqKj0gYmBgLgorCisKKy4uIGZ1bmN0aW9uOjogaXJzaGlmdChhLCBiKQorICAgICAgICAgICAgICBfX2lyc2hpZnRfXyhhLCBiKQorCisgICBgYGEgPSBpcnNoaWZ0KGEsIGIpYGAgaXMgZXF1aXZhbGVudCB0byBgYGEgPj49IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGlzdWIoYSwgYikKKyAgICAgICAgICAgICAgX19pc3ViX18oYSwgYikKKworICAgYGBhID0gaXN1YihhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIC09IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGl0cnVlZGl2KGEsIGIpCisgICAgICAgICAgICAgIF9faXRydWVkaXZfXyhhLCBiKQorCisgICBgYGEgPSBpdHJ1ZWRpdihhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIC89IGJgYC4KKworCisuLiBmdW5jdGlvbjo6IGl4b3IoYSwgYikKKyAgICAgICAgICAgICAgX19peG9yX18oYSwgYikKKworICAgYGBhID0gaXhvcihhLCBiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIF49IGJgYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdCBiL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdAppbmRleCA4N2VjNGRlLi41OGZiN2NkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CkBAIC0xLDExICsxLDE5IEBACi06bW9kOmBvcHRwYXJzZWAgLS0tIE1vcmUgcG93ZXJmdWwgY29tbWFuZCBsaW5lIG9wdGlvbiBwYXJzZXIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgb3B0cGFyc2VgIC0tLSBQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogb3B0cGFyc2UKLSAgIDpzeW5vcHNpczogTW9yZSBjb252ZW5pZW50LCBmbGV4aWJsZSwgYW5kIHBvd2VyZnVsIGNvbW1hbmQtbGluZSBwYXJzaW5nIGxpYnJhcnkuCisgICA6c3lub3BzaXM6IENvbW1hbmQtbGluZSBvcHRpb24gcGFyc2luZyBsaWJyYXJ5LgorICAgOmRlcHJlY2F0ZWQ6CiAuLiBtb2R1bGVhdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAuLiBzZWN0aW9uYXV0aG9yOjogR3JlZyBXYXJkIDxnd2FyZEBweXRob24ubmV0PgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcHRwYXJzZS5weWAKKworLS0tLS0tLS0tLS0tLS0KKworLi4gZGVwcmVjYXRlZDo6IDIuNworICBUaGUgOm1vZDpgb3B0cGFyc2VgIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIG5vdCBiZSBkZXZlbG9wZWQgZnVydGhlcjsKKyAgZGV2ZWxvcG1lbnQgd2lsbCBjb250aW51ZSB3aXRoIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgogCiA6bW9kOmBvcHRwYXJzZWAgaXMgYSBtb3JlIGNvbnZlbmllbnQsIGZsZXhpYmxlLCBhbmQgcG93ZXJmdWwgbGlicmFyeSBmb3IgcGFyc2luZwogY29tbWFuZC1saW5lIG9wdGlvbnMgdGhhbiB0aGUgb2xkIDptb2Q6YGdldG9wdGAgbW9kdWxlLiAgOm1vZDpgb3B0cGFyc2VgIHVzZXMgYQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAppbmRleCAyOGE3YWZmLi41MjJiOTRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vcy5wYXRoLnJzdApAQCAtMjAxLDYgKzIwMSw3IEBACiAgICBOb3JtYWxpemUgdGhlIGNhc2Ugb2YgYSBwYXRobmFtZS4gIE9uIFVuaXggYW5kIE1hYyBPUyBYLCB0aGlzIHJldHVybnMgdGhlCiAgICBwYXRoIHVuY2hhbmdlZDsgb24gY2FzZS1pbnNlbnNpdGl2ZSBmaWxlc3lzdGVtcywgaXQgY29udmVydHMgdGhlIHBhdGggdG8KICAgIGxvd2VyY2FzZS4gIE9uIFdpbmRvd3MsIGl0IGFsc28gY29udmVydHMgZm9yd2FyZCBzbGFzaGVzIHRvIGJhY2t3YXJkIHNsYXNoZXMuCisgICBSYWlzZSBhIFR5cGVFcnJvciBpZiB0aGUgdHlwZSBvZiAqcGF0aCogaXMgbm90IGBgc3RyYGAgb3IgYGBieXRlc2BgLgogCiAKIC4uIGZ1bmN0aW9uOjogbm9ybXBhdGgocGF0aCkKQEAgLTIyMCw3ICsyMjEsNyBAQAogICAgbGlua3MgZW5jb3VudGVyZWQgaW4gdGhlIHBhdGggKGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuCiAKIAotLi4gZnVuY3Rpb246OiByZWxwYXRoKHBhdGhbLCBzdGFydF0pCisuLiBmdW5jdGlvbjo6IHJlbHBhdGgocGF0aCwgc3RhcnQ9Tm9uZSkKIAogICAgUmV0dXJuIGEgcmVsYXRpdmUgZmlsZXBhdGggdG8gKnBhdGgqIGVpdGhlciBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBvciBmcm9tCiAgICBhbiBvcHRpb25hbCAqc3RhcnQqIHBvaW50LgpAQCAtMjMyLDE4ICsyMzMsMjcgQEAKIAogLi4gZnVuY3Rpb246OiBzYW1lZmlsZShwYXRoMSwgcGF0aDIpCiAKLSAgIFJldHVybiBgYFRydWVgYCBpZiBib3RoIHBhdGhuYW1lIGFyZ3VtZW50cyByZWZlciB0byB0aGUgc2FtZSBmaWxlIG9yIGRpcmVjdG9yeQotICAgKGFzIGluZGljYXRlZCBieSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyKS4gUmFpc2UgYW4gZXhjZXB0aW9uIGlmIGEKLSAgIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KKyAgIFJldHVybiBgYFRydWVgYCBpZiBib3RoIHBhdGhuYW1lIGFyZ3VtZW50cyByZWZlciB0byB0aGUgc2FtZSBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgIE9uIFVuaXgsIHRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGV2aWNlIG51bWJlciBhbmQgaS1ub2RlIG51bWJlciBhbmQgcmFpc2VzIGFuCisgICBleGNlcHRpb24gaWYgYSA6ZnVuYzpgb3Muc3RhdGAgY2FsbCBvbiBlaXRoZXIgcGF0aG5hbWUgZmFpbHMuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIE9uIFdpbmRvd3MsIHR3byBmaWxlcyBhcmUgdGhlIHNhbWUgaWYgdGhleSByZXNvbHZlIHRvIHRoZSBzYW1lIGZpbmFsIHBhdGgKKyAgIG5hbWUgdXNpbmcgdGhlIFdpbmRvd3MgQVBJIGNhbGwgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlLiBUaGlzIGZ1bmN0aW9uCisgICByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIGhhbmRsZXMgY2Fubm90IGJlIG9idGFpbmVkIHRvIGVpdGhlciBmaWxlLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBXaW5kb3dzIHN1cHBvcnQuCiAKIAogLi4gZnVuY3Rpb246OiBzYW1lb3BlbmZpbGUoZnAxLCBmcDIpCiAKICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgZmlsZSBkZXNjcmlwdG9ycyAqZnAxKiBhbmQgKmZwMiogcmVmZXIgdG8gdGhlIHNhbWUgZmlsZS4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMiBBZGRlZCBXaW5kb3dzIHN1cHBvcnQuCiAKIAogLi4gZnVuY3Rpb246OiBzYW1lc3RhdChzdGF0MSwgc3RhdDIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcy5yc3QgYi9Eb2MvbGlicmFyeS9vcy5yc3QKaW5kZXggM2Y2ZDY5ZC4uZmU3ODVmYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zLnJzdApAQCAtMTA5LDYgKzEwOSwxMCBAQAogICAgdG8gbW9kaWZ5IHRoZSBlbnZpcm9ubWVudCBhcyB3ZWxsIGFzIHF1ZXJ5IHRoZSBlbnZpcm9ubWVudC4gIDpmdW5jOmBwdXRlbnZgIHdpbGwKICAgIGJlIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIG1hcHBpbmcgaXMgbW9kaWZpZWQuCiAKKyAgIE9uIFVuaXgsIGtleXMgYW5kIHZhbHVlcyB1c2UgOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgIGFuZAorICAgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGVycm9yIGhhbmRsZXIuIFVzZSA6ZGF0YTpgZW52aXJvbmJgIGlmIHlvdSB3b3VsZCBsaWtlCisgICB0byB1c2UgYSBkaWZmZXJlbnQgZW5jb2RpbmcuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBDYWxsaW5nIDpmdW5jOmBwdXRlbnZgIGRpcmVjdGx5IGRvZXMgbm90IGNoYW5nZSBgYG9zLmVudmlyb25gYCwgc28gaXQncyBiZXR0ZXIKQEAgLTExOCw3ICsxMjIsNyBAQAogCiAgICAgICBPbiBzb21lIHBsYXRmb3JtcywgaW5jbHVkaW5nIEZyZWVCU0QgYW5kIE1hYyBPUyBYLCBzZXR0aW5nIGBgZW52aXJvbmBgIG1heQogICAgICAgY2F1c2UgbWVtb3J5IGxlYWtzLiAgUmVmZXIgdG8gdGhlIHN5c3RlbSBkb2N1bWVudGF0aW9uIGZvcgotICAgICAgOmNmdW5jOmBwdXRlbnZgLgorICAgICAgOmM6ZnVuYzpgcHV0ZW52YC4KIAogICAgSWYgOmZ1bmM6YHB1dGVudmAgaXMgbm90IHByb3ZpZGVkLCBhIG1vZGlmaWVkIGNvcHkgb2YgdGhpcyBtYXBwaW5nICBtYXkgYmUKICAgIHBhc3NlZCB0byB0aGUgYXBwcm9wcmlhdGUgcHJvY2Vzcy1jcmVhdGlvbiBmdW5jdGlvbnMgdG8gY2F1c2UgIGNoaWxkIHByb2Nlc3NlcwpAQCAtMTMwLDYgKzEzNCwxOSBAQAogICAgb25lIG9mIHRoZSA6bWV0aDpgcG9wYCBvciA6bWV0aDpgY2xlYXJgIG1ldGhvZHMgaXMgY2FsbGVkLgogCiAKKy4uIGRhdGE6OiBlbnZpcm9uYgorCisgICBCeXRlcyB2ZXJzaW9uIG9mIDpkYXRhOmBlbnZpcm9uYDogYSBtYXBwaW5nIG9iamVjdCByZXByZXNlbnRpbmcgdGhlCisgICBlbnZpcm9ubWVudCBhcyBieXRlIHN0cmluZ3MuIDpkYXRhOmBlbnZpcm9uYCBhbmQgOmRhdGE6YGVudmlyb25iYCBhcmUKKyAgIHN5bmNocm9uaXplZCAobW9kaWZ5IDpkYXRhOmBlbnZpcm9uYmAgdXBkYXRlcyA6ZGF0YTpgZW52aXJvbmAsIGFuZCB2aWNlCisgICB2ZXJzYSkuCisKKyAgIDpkYXRhOmBlbnZpcm9uYmAgaXMgb25seSBhdmFpbGFibGUgaWYgOmRhdGE6YHN1cHBvcnRzX2J5dGVzX2Vudmlyb25gIGlzCisgICBUcnVlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBmdW5jdGlvbjo6IGNoZGlyKHBhdGgpCiAgICAgICAgICAgICAgIGZjaGRpcihmZCkKICAgICAgICAgICAgICAgZ2V0Y3dkKCkKQEAgLTEzOCw2ICsxNTUsMzcgQEAKICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIDpyZWY6YG9zLWZpbGUtZGlyYC4KIAogCisuLiBmdW5jdGlvbjo6IGZzZW5jb2RlKGZpbGVuYW1lKQorCisgICBFbmNvZGUgKmZpbGVuYW1lKiB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyB3aXRoIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYAorICAgZXJyb3IgaGFuZGxlciwgb3IgYGAnc3RyaWN0J2BgIG9uIFdpbmRvd3M7IHJldHVybiA6Y2xhc3M6YGJ5dGVzYCB1bmNoYW5nZWQuCisKKyAgIDpmdW5jOmBmc2RlY29kZWAgaXMgdGhlIHJldmVyc2UgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogZnNkZWNvZGUoZmlsZW5hbWUpCisKKyAgIERlY29kZSAqZmlsZW5hbWUqIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2Rpbmcgd2l0aCBgYCdzdXJyb2dhdGVlc2NhcGUnYGAKKyAgIGVycm9yIGhhbmRsZXIsIG9yIGBgJ3N0cmljdCdgYCBvbiBXaW5kb3dzOyByZXR1cm4gOmNsYXNzOmBzdHJgIHVuY2hhbmdlZC4KKworICAgOmZ1bmM6YGZzZW5jb2RlYCBpcyB0aGUgcmV2ZXJzZSBmdW5jdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiBnZXRfZXhlY19wYXRoKGVudj1Ob25lKQorCisgICBSZXR1cm5zIHRoZSBsaXN0IG9mIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgYSBuYW1lZAorICAgZXhlY3V0YWJsZSwgc2ltaWxhciB0byBhIHNoZWxsLCB3aGVuIGxhdW5jaGluZyBhIHByb2Nlc3MuCisgICAqZW52Kiwgd2hlbiBzcGVjaWZpZWQsIHNob3VsZCBiZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBkaWN0aW9uYXJ5CisgICB0byBsb29rdXAgdGhlIFBBVEggaW4uCisgICBCeSBkZWZhdWx0LCB3aGVuICplbnYqIGlzIE5vbmUsIDpkYXRhOmBlbnZpcm9uYCBpcyB1c2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBmdW5jdGlvbjo6IGN0ZXJtaWQoKQogCiAgICBSZXR1cm4gdGhlIGZpbGVuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsIG9mIHRoZSBwcm9jZXNzLgpAQCAtMTc4LDE1ICsyMjYsMjYgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCisuLiBmdW5jdGlvbjo6IGluaXRncm91cHModXNlcm5hbWUsIGdpZCkKKworICAgQ2FsbCB0aGUgc3lzdGVtIGluaXRncm91cHMoKSB0byBpbml0aWFsaXplIHRoZSBncm91cCBhY2Nlc3MgbGlzdCB3aXRoIGFsbCBvZgorICAgdGhlIGdyb3VwcyBvZiB3aGljaCB0aGUgc3BlY2lmaWVkIHVzZXJuYW1lIGlzIGEgbWVtYmVyLCBwbHVzIHRoZSBzcGVjaWZpZWQKKyAgIGdyb3VwIGlkLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9naW4oKQogCiAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2VkIGluIG9uIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBvZiB0aGUKLSAgIHByb2Nlc3MuICBGb3IgbW9zdCBwdXJwb3NlcywgaXQgaXMgbW9yZSB1c2VmdWwgdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotICAgOmVudnZhcjpgTE9HTkFNRWAgdG8gZmluZCBvdXQgd2hvIHRoZSB1c2VyIGlzLCBvcgorICAgcHJvY2Vzcy4gIEZvciBtb3N0IHB1cnBvc2VzLCBpdCBpcyBtb3JlIHVzZWZ1bCB0byB1c2UgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgOmVudnZhcjpgTE9HTkFNRWAgb3IgOmVudnZhcjpgVVNFUk5BTUVgIHRvIGZpbmQgb3V0IHdobyB0aGUgdXNlciBpcywgb3IKICAgIGBgcHdkLmdldHB3dWlkKG9zLmdldHVpZCgpKVswXWBgIHRvIGdldCB0aGUgbG9naW4gbmFtZSBvZiB0aGUgY3VycmVudGx5CiAgICBlZmZlY3RpdmUgdXNlciBpZC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0cGdpZChwaWQpCkBAIC0yMTgsMTAgKzI3NywzNCBAQAogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogcHJvY2VzczsgaWQgb2YgcGFyZW50CiAKLSAgIFJldHVybiB0aGUgcGFyZW50J3MgcHJvY2VzcyBpZC4KKyAgIFJldHVybiB0aGUgcGFyZW50J3MgcHJvY2VzcyBpZC4gIFdoZW4gdGhlIHBhcmVudCBwcm9jZXNzIGhhcyBleGl0ZWQsIG9uIFVuaXgKKyAgIHRoZSBpZCByZXR1cm5lZCBpcyB0aGUgb25lIG9mIHRoZSBpbml0IHByb2Nlc3MgKDEpLCBvbiBXaW5kb3dzIGl0IGlzIHN0aWxsCisgICB0aGUgc2FtZSBpZCwgd2hpY2ggbWF5IGJlIGFscmVhZHkgcmV1c2VkIGJ5IGFub3RoZXIgcHJvY2Vzcy4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBXaW5kb3dzLgorCisuLiBmdW5jdGlvbjo6IGdldHJlc3VpZCgpCisKKyAgIFJldHVybiBhIHR1cGxlIChydWlkLCBldWlkLCBzdWlkKSBkZW5vdGluZyB0aGUgY3VycmVudCBwcm9jZXNzJ3MKKyAgIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIHVzZXIgaWRzLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0cmVzZ2lkKCkKKworICAgUmV0dXJuIGEgdHVwbGUgKHJnaWQsIGVnaWQsIHNnaWQpIGRlbm90aW5nIHRoZSBjdXJyZW50IHByb2Nlc3MncworICAgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0dWlkKCkKIApAQCAtMjMyLDE5ICszMTUsMzMgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IGdldGVudih2YXJuYW1lWywgdmFsdWVdKQorLi4gZnVuY3Rpb246OiBnZXRlbnYoa2V5LCBkZWZhdWx0PU5vbmUpCiAKLSAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlICp2YXJuYW1lKiBpZiBpdCBleGlzdHMsIG9yICp2YWx1ZSoKLSAgIGlmIGl0IGRvZXNuJ3QuICAqdmFsdWUqIGRlZmF1bHRzIHRvIGBgTm9uZWBgLgorICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgKmtleSogaWYgaXQgZXhpc3RzLCBvcgorICAgKmRlZmF1bHQqIGlmIGl0IGRvZXNuJ3QuICprZXkqLCAqZGVmYXVsdCogYW5kIHRoZSByZXN1bHQgYXJlIHN0ci4KKworICAgT24gVW5peCwga2V5cyBhbmQgdmFsdWVzIGFyZSBkZWNvZGVkIHdpdGggOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgCisgICBhbmQgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGVycm9yIGhhbmRsZXIuIFVzZSA6ZnVuYzpgb3MuZ2V0ZW52YmAgaWYgeW91CisgICB3b3VsZCBsaWtlIHRvIHVzZSBhIGRpZmZlcmVudCBlbmNvZGluZy4KIAogICAgQXZhaWxhYmlsaXR5OiBtb3N0IGZsYXZvcnMgb2YgVW5peCwgV2luZG93cy4KIAogCi0uLiBmdW5jdGlvbjo6IHB1dGVudih2YXJuYW1lLCB2YWx1ZSkKKy4uIGZ1bmN0aW9uOjogZ2V0ZW52YihrZXksIGRlZmF1bHQ9Tm9uZSkKKworICAgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgKmtleSogaWYgaXQgZXhpc3RzLCBvcgorICAgKmRlZmF1bHQqIGlmIGl0IGRvZXNuJ3QuICprZXkqLCAqZGVmYXVsdCogYW5kIHRoZSByZXN1bHQgYXJlIGJ5dGVzLgorCisgICBBdmFpbGFiaWxpdHk6IG1vc3QgZmxhdm9ycyBvZiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBmdW5jdGlvbjo6IHB1dGVudihrZXksIHZhbHVlKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogZW52aXJvbm1lbnQgdmFyaWFibGVzOyBzZXR0aW5nCiAKLSAgIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQgKnZhcm5hbWUqIHRvIHRoZSBzdHJpbmcgKnZhbHVlKi4gIFN1Y2gKKyAgIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQgKmtleSogdG8gdGhlIHN0cmluZyAqdmFsdWUqLiAgU3VjaAogICAgY2hhbmdlcyB0byB0aGUgZW52aXJvbm1lbnQgYWZmZWN0IHN1YnByb2Nlc3NlcyBzdGFydGVkIHdpdGggOmZ1bmM6YG9zLnN5c3RlbWAsCiAgICA6ZnVuYzpgcG9wZW5gIG9yIDpmdW5jOmBmb3JrYCBhbmQgOmZ1bmM6YGV4ZWN2YC4KIApAQCAtMjkzLDcgKzM5MCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogc2V0cGdycCgpCiAKLSAgIENhbGwgdGhlIHN5c3RlbSBjYWxsIDpjZnVuYzpgc2V0cGdycGAgb3IgOmNmdW5jOmBzZXRwZ3JwKDAsIDApYCBkZXBlbmRpbmcgb24KKyAgIENhbGwgdGhlIHN5c3RlbSBjYWxsIDpjOmZ1bmM6YHNldHBncnBgIG9yIDpjOmZ1bmM6YHNldHBncnAoMCwgMClgIGRlcGVuZGluZyBvbgogICAgd2hpY2ggdmVyc2lvbiBpcyBpbXBsZW1lbnRlZCAoaWYgYW55KS4gIFNlZSB0aGUgVW5peCBtYW51YWwgZm9yIHRoZSBzZW1hbnRpY3MuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KQEAgLTMwMSwyMCArMzk4LDEzIEBACiAKIC4uIGZ1bmN0aW9uOjogc2V0cGdpZChwaWQsIHBncnApCiAKLSAgIENhbGwgdGhlIHN5c3RlbSBjYWxsIDpjZnVuYzpgc2V0cGdpZGAgdG8gc2V0IHRoZSBwcm9jZXNzIGdyb3VwIGlkIG9mIHRoZQorICAgQ2FsbCB0aGUgc3lzdGVtIGNhbGwgOmM6ZnVuYzpgc2V0cGdpZGAgdG8gc2V0IHRoZSBwcm9jZXNzIGdyb3VwIGlkIG9mIHRoZQogICAgcHJvY2VzcyB3aXRoIGlkICpwaWQqIHRvIHRoZSBwcm9jZXNzIGdyb3VwIHdpdGggaWQgKnBncnAqLiAgU2VlIHRoZSBVbml4IG1hbnVhbAogICAgZm9yIHRoZSBzZW1hbnRpY3MuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IHNldHJldWlkKHJ1aWQsIGV1aWQpCi0KLSAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCBhbmQgZWZmZWN0aXZlIHVzZXIgaWRzLgotCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCi0KLQogLi4gZnVuY3Rpb246OiBzZXRyZWdpZChyZ2lkLCBlZ2lkKQogCiAgICBTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSBncm91cCBpZHMuCkBAIC0zMjIsMTYgKzQxMiw0MSBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKKy4uIGZ1bmN0aW9uOjogc2V0cmVzZ2lkKHJnaWQsIGVnaWQsIHNnaWQpCisKKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgZ3JvdXAgaWRzLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpCisKKyAgIFNldCB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcmVhbCwgZWZmZWN0aXZlLCBhbmQgc2F2ZWQgdXNlciBpZHMuCisKKyAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiBzZXRyZXVpZChydWlkLCBldWlkKQorCisgICBTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgYW5kIGVmZmVjdGl2ZSB1c2VyIGlkcy4KKworICAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisKIC4uIGZ1bmN0aW9uOjogZ2V0c2lkKHBpZCkKIAotICAgQ2FsbCB0aGUgc3lzdGVtIGNhbGwgOmNmdW5jOmBnZXRzaWRgLiAgU2VlIHRoZSBVbml4IG1hbnVhbCBmb3IgdGhlIHNlbWFudGljcy4KKyAgIENhbGwgdGhlIHN5c3RlbSBjYWxsIDpjOmZ1bmM6YGdldHNpZGAuICBTZWUgdGhlIFVuaXggbWFudWFsIGZvciB0aGUgc2VtYW50aWNzLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAogLi4gZnVuY3Rpb246OiBzZXRzaWQoKQogCi0gICBDYWxsIHRoZSBzeXN0ZW0gY2FsbCA6Y2Z1bmM6YHNldHNpZGAuICBTZWUgdGhlIFVuaXggbWFudWFsIGZvciB0aGUgc2VtYW50aWNzLgorICAgQ2FsbCB0aGUgc3lzdGVtIGNhbGwgOmM6ZnVuYzpgc2V0c2lkYC4gIFNlZSB0aGUgVW5peCBtYW51YWwgZm9yIHRoZSBzZW1hbnRpY3MuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIApAQCAtMzQ5LDEyICs0NjQsMjAgQEAKIC4uIGZ1bmN0aW9uOjogc3RyZXJyb3IoY29kZSkKIAogICAgUmV0dXJuIHRoZSBlcnJvciBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVycm9yIGNvZGUgaW4gKmNvZGUqLgotICAgT24gcGxhdGZvcm1zIHdoZXJlIDpjZnVuYzpgc3RyZXJyb3JgIHJldHVybnMgYGBOVUxMYGAgd2hlbiBnaXZlbiBhbiB1bmtub3duCisgICBPbiBwbGF0Zm9ybXMgd2hlcmUgOmM6ZnVuYzpgc3RyZXJyb3JgIHJldHVybnMgYGBOVUxMYGAgd2hlbiBnaXZlbiBhbiB1bmtub3duCiAgICBlcnJvciBudW1iZXIsIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAKKy4uIGRhdGE6OiBzdXBwb3J0c19ieXRlc19lbnZpcm9uCisKKyAgIFRydWUgaWYgdGhlIG5hdGl2ZSBPUyB0eXBlIG9mIHRoZSBlbnZpcm9ubWVudCBpcyBieXRlcyAoZWcuIEZhbHNlIG9uCisgICBXaW5kb3dzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiB1bWFzayhtYXNrKQogCiAgICBTZXQgdGhlIGN1cnJlbnQgbnVtZXJpYyB1bWFzayBhbmQgcmV0dXJuIHRoZSBwcmV2aW91cyB1bWFzay4KQEAgLTM3OCwxMSArNTAxLDExIEBACiAgICBBdmFpbGFiaWxpdHk6IHJlY2VudCBmbGF2b3JzIG9mIFVuaXguCiAKIAotLi4gZnVuY3Rpb246OiB1bnNldGVudih2YXJuYW1lKQorLi4gZnVuY3Rpb246OiB1bnNldGVudihrZXkpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IGRlbGV0aW5nCiAKLSAgIFVuc2V0IChkZWxldGUpIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCAqdmFybmFtZSouIFN1Y2ggY2hhbmdlcyB0byB0aGUKKyAgIFVuc2V0IChkZWxldGUpIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lZCAqa2V5Ki4gU3VjaCBjaGFuZ2VzIHRvIHRoZQogICAgZW52aXJvbm1lbnQgYWZmZWN0IHN1YnByb2Nlc3NlcyBzdGFydGVkIHdpdGggOmZ1bmM6YG9zLnN5c3RlbWAsIDpmdW5jOmBwb3BlbmAgb3IKICAgIDpmdW5jOmBmb3JrYCBhbmQgOmZ1bmM6YGV4ZWN2YC4KIApAQCAtNDE0LDcgKzUzNyw3IEBACiAgICBgYCdyJ2BgLCBgYCd3J2BgLCBvciBgYCdhJ2BgLCBvdGhlcndpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIE9uIFVuaXgsIHdoZW4gdGhlICptb2RlKiBhcmd1bWVudCBzdGFydHMgd2l0aCBgYCdhJ2BgLCB0aGUgKk9fQVBQRU5EKiBmbGFnIGlzCi0gICBzZXQgb24gdGhlIGZpbGUgZGVzY3JpcHRvciAod2hpY2ggdGhlIDpjZnVuYzpgZmRvcGVuYCBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5CisgICBzZXQgb24gdGhlIGZpbGUgZGVzY3JpcHRvciAod2hpY2ggdGhlIDpjOmZ1bmM6YGZkb3BlbmAgaW1wbGVtZW50YXRpb24gYWxyZWFkeQogICAgZG9lcyBvbiBtb3N0IHBsYXRmb3JtcykuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KQEAgLTU1MCw3ICs2NzMsNyBAQAogLi4gZnVuY3Rpb246OiBmc3luYyhmZCkKIAogICAgRm9yY2Ugd3JpdGUgb2YgZmlsZSB3aXRoIGZpbGVkZXNjcmlwdG9yICpmZCogdG8gZGlzay4gIE9uIFVuaXgsIHRoaXMgY2FsbHMgdGhlCi0gICBuYXRpdmUgOmNmdW5jOmBmc3luY2AgZnVuY3Rpb247IG9uIFdpbmRvd3MsIHRoZSBNUyA6Y2Z1bmM6YF9jb21taXRgIGZ1bmN0aW9uLgorICAgbmF0aXZlIDpjOmZ1bmM6YGZzeW5jYCBmdW5jdGlvbjsgb24gV2luZG93cywgdGhlIE1TIDpjOmZ1bmM6YF9jb21taXRgIGZ1bmN0aW9uLgogCiAgICBJZiB5b3UncmUgc3RhcnRpbmcgd2l0aCBhIGJ1ZmZlcmVkIFB5dGhvbiA6dGVybTpgZmlsZSBvYmplY3RgICpmKiwgZmlyc3QgZG8KICAgIGBgZi5mbHVzaCgpYGAsIGFuZCB0aGVuIGRvIGBgb3MuZnN5bmMoZi5maWxlbm8oKSlgYCwgdG8gZW5zdXJlIHRoYXQgYWxsIGludGVybmFsCkBAIC02MTIsNyArNzM1LDcgQEAKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgbG93LWxldmVsIEkvTy4gIEZvciBub3JtYWwgdXNhZ2UsIHVzZSB0aGUKICAgICAgIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBvcGVuYCwgd2hpY2ggcmV0dXJucyBhIDp0ZXJtOmBmaWxlIG9iamVjdGAgd2l0aAotICAgICAgOm1ldGg6YH5maWxlLnJlYWRgIGFuZCA6bWV0aDpgfmZpbGUud3ByaXRlYCBtZXRob2RzIChhbmQgbWFueSBtb3JlKS4gIFRvCisgICAgICA6bWV0aDpgfmZpbGUucmVhZGAgYW5kIDptZXRoOmB+ZmlsZS53cml0ZWAgbWV0aG9kcyAoYW5kIG1hbnkgbW9yZSkuICBUbwogICAgICAgd3JhcCBhIGZpbGUgZGVzY3JpcHRvciBpbiBhIGZpbGUgb2JqZWN0LCB1c2UgOmZ1bmM6YGZkb3BlbmAuCiAKIApAQCAtOTM1LDEzICsxMDU4LDE2IEBACiAKICAgIENyZWF0ZSBhIGhhcmQgbGluayBwb2ludGluZyB0byAqc291cmNlKiBuYW1lZCAqbGlua19uYW1lKi4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgV2luZG93cyBzdXBwb3J0LgogCiAKLS4uIGZ1bmN0aW9uOjogbGlzdGRpcihwYXRoKQorLi4gZnVuY3Rpb246OiBsaXN0ZGlyKHBhdGg9Jy4nKQogCiAgICBSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIHRoZSBlbnRyaWVzIGluIHRoZSBkaXJlY3RvcnkgZ2l2ZW4gYnkKLSAgICpwYXRoKi4gIFRoZSBsaXN0IGlzIGluIGFyYml0cmFyeSBvcmRlci4gIEl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHNwZWNpYWwKKyAgICpwYXRoKiAoZGVmYXVsdDogYGAnLidgYCkuICBUaGUgbGlzdCBpcyBpbiBhcmJpdHJhcnkgb3JkZXIuICBJdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzcGVjaWFsCiAgICBlbnRyaWVzIGBgJy4nYGAgYW5kIGBgJy4uJ2BgIGV2ZW4gaWYgdGhleSBhcmUgcHJlc2VudCBpbiB0aGUgZGlyZWN0b3J5LgogCiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgd2l0aCBhIGJ5dGVzIG9yIHN0cmluZyBhcmd1bWVudCwgYW5kIHJldHVybnMKQEAgLTk0OSwxNCArMTA3NSwxOSBAQAogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGUgKnBhdGgqIHBhcmFtZXRlciBiZWNhbWUgb3B0aW9uYWwuCiAKIC4uIGZ1bmN0aW9uOjogbHN0YXQocGF0aCkKIAotICAgUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhbiA6Y2Z1bmM6YGxzdGF0YCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KKyAgIFBlcmZvcm0gdGhlIGVxdWl2YWxlbnQgb2YgYW4gOmM6ZnVuYzpgbHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgogICAgU2ltaWxhciB0byA6ZnVuYzpgfm9zLnN0YXRgLCBidXQgZG9lcyBub3QgZm9sbG93IHN5bWJvbGljIGxpbmtzLiAgT24KICAgIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLCB0aGlzIGlzIGFuIGFsaWFzIGZvcgogICAgOmZ1bmM6YH5vcy5zdGF0YC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFdpbmRvd3MgNi4wIChWaXN0YSkgc3ltYm9saWMgbGlua3MuCisKIAogLi4gZnVuY3Rpb246OiBta2ZpZm8ocGF0aFssIG1vZGVdKQogCkBAIC05NzMsMjggKzExMDQsMjcgQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IG1rbm9kKGZpbGVuYW1lWywgbW9kZT0wbzYwMCwgZGV2aWNlXSkKKy4uIGZ1bmN0aW9uOjogbWtub2QoZmlsZW5hbWVbLCBtb2RlPTBvNjAwWywgZGV2aWNlXV0pCiAKICAgIENyZWF0ZSBhIGZpbGVzeXN0ZW0gbm9kZSAoZmlsZSwgZGV2aWNlIHNwZWNpYWwgZmlsZSBvciBuYW1lZCBwaXBlKSBuYW1lZAotICAgKmZpbGVuYW1lKi4gKm1vZGUqIHNwZWNpZmllcyBib3RoIHRoZSBwZXJtaXNzaW9ucyB0byB1c2UgYW5kIHRoZSB0eXBlIG9mIG5vZGUgdG8KLSAgIGJlIGNyZWF0ZWQsIGJlaW5nIGNvbWJpbmVkIChiaXR3aXNlIE9SKSB3aXRoIG9uZSBvZiBgYHN0YXQuU19JRlJFR2BgLAotICAgYGBzdGF0LlNfSUZDSFJgYCwgYGBzdGF0LlNfSUZCTEtgYCwKLSAgIGFuZCBgYHN0YXQuU19JRklGT2BgICh0aG9zZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBpbiA6bW9kOmBzdGF0YCkuCi0gICBGb3IgYGBzdGF0LlNfSUZDSFJgYCBhbmQKLSAgIGBgc3RhdC5TX0lGQkxLYGAsICpkZXZpY2UqIGRlZmluZXMgdGhlIG5ld2x5IGNyZWF0ZWQgZGV2aWNlIHNwZWNpYWwgZmlsZSAocHJvYmFibHkgdXNpbmcKKyAgICpmaWxlbmFtZSouICptb2RlKiBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlCisgICB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2YgYGBzdGF0LlNfSUZSRUdgYCwKKyAgIGBgc3RhdC5TX0lGQ0hSYGAsIGBgc3RhdC5TX0lGQkxLYGAsIGFuZCBgYHN0YXQuU19JRklGT2BgICh0aG9zZSBjb25zdGFudHMgYXJlCisgICBhdmFpbGFibGUgaW4gOm1vZDpgc3RhdGApLiAgRm9yIGBgc3RhdC5TX0lGQ0hSYGAgYW5kIGBgc3RhdC5TX0lGQkxLYGAsCisgICAqZGV2aWNlKiBkZWZpbmVzIHRoZSBuZXdseSBjcmVhdGVkIGRldmljZSBzcGVjaWFsIGZpbGUgKHByb2JhYmx5IHVzaW5nCiAgICA6ZnVuYzpgb3MubWFrZWRldmApLCBvdGhlcndpc2UgaXQgaXMgaWdub3JlZC4KIAogCiAuLiBmdW5jdGlvbjo6IG1ham9yKGRldmljZSkKIAogICAgRXh0cmFjdCB0aGUgZGV2aWNlIG1ham9yIG51bWJlciBmcm9tIGEgcmF3IGRldmljZSBudW1iZXIgKHVzdWFsbHkgdGhlCi0gICA6YXR0cjpgc3RfZGV2YCBvciA6YXR0cjpgc3RfcmRldmAgZmllbGQgZnJvbSA6Y3R5cGU6YHN0YXRgKS4KKyAgIDphdHRyOmBzdF9kZXZgIG9yIDphdHRyOmBzdF9yZGV2YCBmaWVsZCBmcm9tIDpjOnR5cGU6YHN0YXRgKS4KIAogCiAuLiBmdW5jdGlvbjo6IG1pbm9yKGRldmljZSkKIAogICAgRXh0cmFjdCB0aGUgZGV2aWNlIG1pbm9yIG51bWJlciBmcm9tIGEgcmF3IGRldmljZSBudW1iZXIgKHVzdWFsbHkgdGhlCi0gICA6YXR0cjpgc3RfZGV2YCBvciA6YXR0cjpgc3RfcmRldmAgZmllbGQgZnJvbSA6Y3R5cGU6YHN0YXRgKS4KKyAgIDphdHRyOmBzdF9kZXZgIG9yIDphdHRyOmBzdF9yZGV2YCBmaWVsZCBmcm9tIDpjOnR5cGU6YHN0YXRgKS4KIAogCiAuLiBmdW5jdGlvbjo6IG1ha2VkZXYobWFqb3IsIG1pbm9yKQpAQCAtMTAxNSwxNyArMTE0NSwyMCBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAKLS4uIGZ1bmN0aW9uOjogbWFrZWRpcnMocGF0aCwgbW9kZT0wbzc3NykKKy4uIGZ1bmN0aW9uOjogbWFrZWRpcnMocGF0aCwgbW9kZT0wbzc3NywgZXhpc3Rfb2s9RmFsc2UpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogZGlyZWN0b3J5OyBjcmVhdGluZwogICAgICAgc2luZ2xlOiBVTkMgcGF0aHM7IGFuZCBvcy5tYWtlZGlycygpCiAKICAgIFJlY3Vyc2l2ZSBkaXJlY3RvcnkgY3JlYXRpb24gZnVuY3Rpb24uICBMaWtlIDpmdW5jOmBta2RpcmAsIGJ1dCBtYWtlcyBhbGwKLSAgIGludGVybWVkaWF0ZS1sZXZlbCBkaXJlY3RvcmllcyBuZWVkZWQgdG8gY29udGFpbiB0aGUgbGVhZiBkaXJlY3RvcnkuICBSYWlzZXMKLSAgIGFuIDpleGM6YGVycm9yYCBleGNlcHRpb24gaWYgdGhlIGxlYWYgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIG9yIGNhbm5vdCBiZQotICAgY3JlYXRlZC4gIFRoZSBkZWZhdWx0ICptb2RlKiBpcyBgYDBvNzc3YGAgKG9jdGFsKS4gIE9uIHNvbWUgc3lzdGVtcywgKm1vZGUqCi0gICBpcyBpZ25vcmVkLiBXaGVyZSBpdCBpcyB1c2VkLCB0aGUgY3VycmVudCB1bWFzayB2YWx1ZSBpcyBmaXJzdCBtYXNrZWQgb3V0LgorICAgaW50ZXJtZWRpYXRlLWxldmVsIGRpcmVjdG9yaWVzIG5lZWRlZCB0byBjb250YWluIHRoZSBsZWFmIGRpcmVjdG9yeS4gIElmCisgICB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIG1vZGUgYXMgc3BlY2lmaWVkIGFscmVhZHkgZXhpc3RzLAorICAgcmFpc2VzIGFuIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbiBpZiAqZXhpc3Rfb2sqIGlzIEZhbHNlLCBvdGhlcndpc2Ugbm8KKyAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBJZiB0aGUgZGlyZWN0b3J5IGNhbm5vdCBiZSBjcmVhdGVkIGluIG90aGVyIGNhc2VzLAorICAgcmFpc2VzIGFuIDpleGM6YE9TRXJyb3JgIGV4Y2VwdGlvbi4gIFRoZSBkZWZhdWx0ICptb2RlKiBpcyBgYDBvNzc3YGAgKG9jdGFsKS4KKyAgIE9uIHNvbWUgc3lzdGVtcywgKm1vZGUqIGlzIGlnbm9yZWQuICBXaGVyZSBpdCBpcyB1c2VkLCB0aGUgY3VycmVudCB1bWFzaworICAgdmFsdWUgaXMgZmlyc3QgbWFza2VkIG91dC4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTEwMzQsNiArMTE2Nyw5IEBACiAKICAgIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBVTkMgcGF0aHMgY29ycmVjdGx5LgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqZXhpc3Rfb2sqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHBhdGhjb25mKHBhdGgsIG5hbWUpCiAKQEAgLTEwNzIsNyArMTIwOCwxMCBAQAogICAgYW5kIHRoZSBjYWxsIG1heSByYWlzZSBhbiBVbmljb2RlRGVjb2RlRXJyb3IuIElmIHRoZSAqcGF0aCogaXMgYSBieXRlcwogICAgb2JqZWN0LCB0aGUgcmVzdWx0IHdpbGwgYmUgYSBieXRlcyBvYmplY3QuCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cworCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgV2luZG93cyA2LjAgKFZpc3RhKSBzeW1ib2xpYyBsaW5rcy4KIAogCiAuLiBmdW5jdGlvbjo6IHJlbW92ZShwYXRoKQpAQCAtMTEzOSwxMSArMTI3OCwxMSBAQAogCiAuLiBmdW5jdGlvbjo6IHN0YXQocGF0aCkKIAotICAgUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhIDpjZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisgICBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEgOmM6ZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCiAgICAoVGhpcyBmdW5jdGlvbiBmb2xsb3dzIHN5bWxpbmtzOyB0byBzdGF0IGEgc3ltbGluayB1c2UgOmZ1bmM6YGxzdGF0YC4pCiAKICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gb2JqZWN0IHdob3NlIGF0dHJpYnV0ZXMgY29ycmVzcG9uZCB0byB0aGUgbWVtYmVycwotICAgb2YgdGhlIDpjdHlwZTpgc3RhdGAgc3RydWN0dXJlLCBuYW1lbHk6CisgICBvZiB0aGUgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLCBuYW1lbHk6CiAKICAgICogOmF0dHI6YHN0X21vZGVgIC0gcHJvdGVjdGlvbiBiaXRzLAogICAgKiA6YXR0cjpgc3RfaW5vYCAtIGlub2RlIG51bWJlciwKQEAgLTExODcsNyArMTMyNiw3IEBACiAKICAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgcmV0dXJuIHZhbHVlIG9mIDpmdW5jOmB+b3Muc3RhdGAgaXMgYWxzbyBhY2Nlc3NpYmxlCiAgICBhcyBhIHR1cGxlIG9mIGF0IGxlYXN0IDEwIGludGVnZXJzIGdpdmluZyB0aGUgbW9zdCBpbXBvcnRhbnQgKGFuZCBwb3J0YWJsZSkKLSAgIG1lbWJlcnMgb2YgdGhlIDpjdHlwZTpgc3RhdGAgc3RydWN0dXJlLCBpbiB0aGUgb3JkZXIgOmF0dHI6YHN0X21vZGVgLAorICAgbWVtYmVycyBvZiB0aGUgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLCBpbiB0aGUgb3JkZXIgOmF0dHI6YHN0X21vZGVgLAogICAgOmF0dHI6YHN0X2lub2AsIDphdHRyOmBzdF9kZXZgLCA6YXR0cjpgc3RfbmxpbmtgLCA6YXR0cjpgc3RfdWlkYCwKICAgIDphdHRyOmBzdF9naWRgLCA6YXR0cjpgc3Rfc2l6ZWAsIDphdHRyOmBzdF9hdGltZWAsIDphdHRyOmBzdF9tdGltZWAsCiAgICA6YXR0cjpgc3RfY3RpbWVgLiBNb3JlIGl0ZW1zIG1heSBiZSBhZGRlZCBhdCB0aGUgZW5kIGJ5IHNvbWUgaW1wbGVtZW50YXRpb25zLgpAQCAtMTE5NSw3ICsxMzM0LDcgQEAKICAgIC4uIGluZGV4OjogbW9kdWxlOiBzdGF0CiAKICAgIFRoZSBzdGFuZGFyZCBtb2R1bGUgOm1vZDpgc3RhdGAgZGVmaW5lcyBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VmdWwKLSAgIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Y3R5cGU6YHN0YXRgIHN0cnVjdHVyZS4gKE9uIFdpbmRvd3MsIHNvbWUKKyAgIGZvciBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gYSA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIChPbiBXaW5kb3dzLCBzb21lCiAgICBpdGVtcyBhcmUgZmlsbGVkIHdpdGggZHVtbXkgdmFsdWVzLikKIAogICAgRXhhbXBsZTo6CkBAIC0xMjAzLDkgKzEzNDIsMTEgQEAKICAgICAgID4+PiBpbXBvcnQgb3MKICAgICAgID4+PiBzdGF0aW5mbyA9IG9zLnN0YXQoJ3NvbWVmaWxlLnR4dCcpCiAgICAgICA+Pj4gc3RhdGluZm8KLSAgICAgICgzMzE4OCwgNDIyNTExLCA3NjksIDEsIDEwMzIsIDEwMCwgOTI2LCAxMTA1MDIyNjk4LDExMDUwMjI3MzIsIDExMDUwMjI3MzIpCisgICAgICBwb3NpeC5zdGF0X3Jlc3VsdChzdF9tb2RlPTMzMTg4LCBzdF9pbm89Nzg3NjkzMiwgc3RfZGV2PTIzNDg4MTAyNiwKKyAgICAgIHN0X25saW5rPTEsIHN0X3VpZD01MDEsIHN0X2dpZD01MDEsIHN0X3NpemU9MjY0LCBzdF9hdGltZT0xMjk3MjMwMjk1LAorICAgICAgc3RfbXRpbWU9MTI5NzIzMDAyNywgc3RfY3RpbWU9MTI5NzIzMDAyNykKICAgICAgID4+PiBzdGF0aW5mby5zdF9zaXplCi0gICAgICA5MjYKKyAgICAgIDI2NAogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKQEAgLTEyMzcsMjEgKzEzNzgsNTggQEAKIAogLi4gZnVuY3Rpb246OiBzdGF0dmZzKHBhdGgpCiAKLSAgIFBlcmZvcm0gYSA6Y2Z1bmM6YHN0YXR2ZnNgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiAgVGhlIHJldHVybiB2YWx1ZSBpcworICAgUGVyZm9ybSBhIDpjOmZ1bmM6YHN0YXR2ZnNgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiAgVGhlIHJldHVybiB2YWx1ZSBpcwogICAgYW4gb2JqZWN0IHdob3NlIGF0dHJpYnV0ZXMgZGVzY3JpYmUgdGhlIGZpbGVzeXN0ZW0gb24gdGhlIGdpdmVuIHBhdGgsIGFuZAotICAgY29ycmVzcG9uZCB0byB0aGUgbWVtYmVycyBvZiB0aGUgOmN0eXBlOmBzdGF0dmZzYCBzdHJ1Y3R1cmUsIG5hbWVseToKKyAgIGNvcnJlc3BvbmQgdG8gdGhlIG1lbWJlcnMgb2YgdGhlIDpjOnR5cGU6YHN0YXR2ZnNgIHN0cnVjdHVyZSwgbmFtZWx5OgogICAgOmF0dHI6YGZfYnNpemVgLCA6YXR0cjpgZl9mcnNpemVgLCA6YXR0cjpgZl9ibG9ja3NgLCA6YXR0cjpgZl9iZnJlZWAsCiAgICA6YXR0cjpgZl9iYXZhaWxgLCA6YXR0cjpgZl9maWxlc2AsIDphdHRyOmBmX2ZmcmVlYCwgOmF0dHI6YGZfZmF2YWlsYCwKICAgIDphdHRyOmBmX2ZsYWdgLCA6YXR0cjpgZl9uYW1lbWF4YC4KIAorICAgVHdvIG1vZHVsZS1sZXZlbCBjb25zdGFudHMgYXJlIGRlZmluZWQgZm9yIHRoZSA6YXR0cjpgZl9mbGFnYCBhdHRyaWJ1dGUncworICAgYml0LWZsYWdzOiBpZiA6Y29uc3Q6YFNUX1JET05MWWAgaXMgc2V0LCB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkCisgICByZWFkLW9ubHksIGFuZCBpZiA6Y29uc3Q6YFNUX05PU1VJRGAgaXMgc2V0LCB0aGUgc2VtYW50aWNzIG9mCisgICBzZXR1aWQvc2V0Z2lkIGJpdHMgYXJlIGRpc2FibGVkIG9yIG5vdCBzdXBwb3J0ZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBUaGUgOmNvbnN0OmBTVF9SRE9OTFlgIGFuZCA6Y29uc3Q6YFNUX05PU1VJRGAgY29uc3RhbnRzIHdlcmUgYWRkZWQuCisKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCiAuLiBmdW5jdGlvbjo6IHN5bWxpbmsoc291cmNlLCBsaW5rX25hbWUpCisgICAgICAgICAgICAgIHN5bWxpbmsoc291cmNlLCBsaW5rX25hbWUsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UpCiAKICAgIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gKnNvdXJjZSogbmFtZWQgKmxpbmtfbmFtZSouCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKyAgIE9uIFdpbmRvd3MsIHN5bWxpbmsgdmVyc2lvbiB0YWtlcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIHBhcmFtZXRlciwKKyAgICp0YXJnZXRfaXNfZGlyZWN0b3J5Kiwgd2hpY2ggZGVmYXVsdHMgdG8gYGBGYWxzZWBgLgorCisgICBPbiBXaW5kb3dzLCBhIHN5bWxpbmsgcmVwcmVzZW50cyBhIGZpbGUgb3IgYSBkaXJlY3RvcnksIGFuZCBkb2VzIG5vdCBtb3JwaCB0bworICAgdGhlIHRhcmdldCBkeW5hbWljYWxseS4gIEZvciB0aGlzIHJlYXNvbiwgd2hlbiBjcmVhdGluZyBhIHN5bWxpbmsgb24gV2luZG93cywKKyAgIGlmIHRoZSB0YXJnZXQgaXMgbm90IGFscmVhZHkgcHJlc2VudCwgdGhlIHN5bWxpbmsgd2lsbCBkZWZhdWx0IHRvIGJlaW5nIGEKKyAgIGZpbGUgc3ltbGluay4gIElmICp0YXJnZXRfaXNfZGlyZWN0b3J5KiBpcyBzZXQgdG8gYGBUcnVlYGAsIHRoZSBzeW1saW5rIHdpbGwKKyAgIGJlIGNyZWF0ZWQgYXMgYSBkaXJlY3Rvcnkgc3ltbGluay4gIFRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQgaWYgdGhlIHRhcmdldAorICAgZXhpc3RzIChhbmQgdGhlIHN5bWxpbmsgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIHR5cGUgYXMgdGhlIHRhcmdldCkuCisKKyAgIFN5bWJvbGljIGxpbmsgc3VwcG9ydCB3YXMgaW50cm9kdWNlZCBpbiBXaW5kb3dzIDYuMCAoVmlzdGEpLiAgOmZ1bmM6YHN5bWxpbmtgCisgICB3aWxsIHJhaXNlIGEgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgb24gV2luZG93cyB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNi4wLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlICpTZUNyZWF0ZVN5bWJvbGljTGlua1ByaXZpbGVnZSogaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gc3VjY2Vzc2Z1bGx5CisgICAgICBjcmVhdGUgc3ltbGlua3MuIFRoaXMgcHJpdmlsZWdlIGlzIG5vdCB0eXBpY2FsbHkgZ3JhbnRlZCB0byByZWd1bGFyCisgICAgICB1c2VycyBidXQgaXMgYXZhaWxhYmxlIHRvIGFjY291bnRzIHdoaWNoIGNhbiBlc2NhbGF0ZSBwcml2aWxlZ2VzIHRvIHRoZQorICAgICAgYWRtaW5pc3RyYXRvciBsZXZlbC4gRWl0aGVyIG9idGFpbmluZyB0aGUgcHJpdmlsZWdlIG9yIHJ1bm5pbmcgeW91cgorICAgICAgYXBwbGljYXRpb24gYXMgYW4gYWRtaW5pc3RyYXRvciBhcmUgd2F5cyB0byBzdWNjZXNzZnVsbHkgY3JlYXRlIHN5bWxpbmtzLgorCisKKyAgICAgIDpleGM6YE9TRXJyb3JgIGlzIHJhaXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYW4gdW5wcml2aWxlZ2VkCisgICAgICB1c2VyLgorCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBXaW5kb3dzIDYuMCAoVmlzdGEpIHN5bWJvbGljIGxpbmtzLgogCiAKIC4uIGZ1bmN0aW9uOjogdW5saW5rKHBhdGgpCkBAIC0xMjc5LDcgKzE0NTcsNyBAQAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAKLS4uIGZ1bmN0aW9uOjogd2Fsayh0b3BbLCB0b3Bkb3duPVRydWUgWywgb25lcnJvcj1Ob25lWywgZm9sbG93bGlua3M9RmFsc2VdXV0pCisuLiBmdW5jdGlvbjo6IHdhbGsodG9wLCB0b3Bkb3duPVRydWUsIG9uZXJyb3I9Tm9uZSwgZm9sbG93bGlua3M9RmFsc2UpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogZGlyZWN0b3J5OyB3YWxraW5nCkBAIC0xMzczLDcgKzE1NTEsNyBAQAogcHJvZ3JhbSBsb2FkZWQgaW50byB0aGUgcHJvY2Vzcy4gIEluIGVhY2ggY2FzZSwgdGhlIGZpcnN0IG9mIHRoZXNlIGFyZ3VtZW50cyBpcwogcGFzc2VkIHRvIHRoZSBuZXcgcHJvZ3JhbSBhcyBpdHMgb3duIG5hbWUgcmF0aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgYSB1c2VyIG1heQogaGF2ZSB0eXBlZCBvbiBhIGNvbW1hbmQgbGluZS4gIEZvciB0aGUgQyBwcm9ncmFtbWVyLCB0aGlzIGlzIHRoZSBgYGFyZ3ZbMF1gYAotcGFzc2VkIHRvIGEgcHJvZ3JhbSdzIDpjZnVuYzpgbWFpbmAuICBGb3IgZXhhbXBsZSwgYGBvcy5leGVjdignL2Jpbi9lY2hvJywKK3Bhc3NlZCB0byBhIHByb2dyYW0ncyA6YzpmdW5jOmBtYWluYC4gIEZvciBleGFtcGxlLCBgYG9zLmV4ZWN2KCcvYmluL2VjaG8nLAogWydmb28nLCAnYmFyJ10pYGAgd2lsbCBvbmx5IHByaW50IGBgYmFyYGAgb24gc3RhbmRhcmQgb3V0cHV0OyBgYGZvb2BgIHdpbGwgc2VlbQogdG8gYmUgaWdub3JlZC4KIApAQCAtMTYxNiw3ICsxNzk0LDE3IEBACiAKICAgIFNlbmQgc2lnbmFsICpzaWcqIHRvIHRoZSBwcm9jZXNzICpwaWQqLiAgQ29uc3RhbnRzIGZvciB0aGUgc3BlY2lmaWMgc2lnbmFscwogICAgYXZhaWxhYmxlIG9uIHRoZSBob3N0IHBsYXRmb3JtIGFyZSBkZWZpbmVkIGluIHRoZSA6bW9kOmBzaWduYWxgIG1vZHVsZS4KLSAgIEF2YWlsYWJpbGl0eTogVW5peC4KKworICAgV2luZG93czogVGhlIDpkYXRhOmBzaWduYWwuQ1RSTF9DX0VWRU5UYCBhbmQKKyAgIDpkYXRhOmBzaWduYWwuQ1RSTF9CUkVBS19FVkVOVGAgc2lnbmFscyBhcmUgc3BlY2lhbCBzaWduYWxzIHdoaWNoIGNhbgorICAgb25seSBiZSBzZW50IHRvIGNvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgd2luZG93LAorICAgZS5nLiwgc29tZSBzdWJwcm9jZXNzZXMuIEFueSBvdGhlciB2YWx1ZSBmb3IgKnNpZyogd2lsbCBjYXVzZSB0aGUgcHJvY2VzcworICAgdG8gYmUgdW5jb25kaXRpb25hbGx5IGtpbGxlZCBieSB0aGUgVGVybWluYXRlUHJvY2VzcyBBUEksIGFuZCB0aGUgZXhpdCBjb2RlCisgICB3aWxsIGJlIHNldCB0byAqc2lnKi4gVGhlIFdpbmRvd3MgdmVyc2lvbiBvZiA6ZnVuYzpga2lsbGAgYWRkaXRpb25hbGx5IHRha2VzCisgICBwcm9jZXNzIGhhbmRsZXMgdG8gYmUga2lsbGVkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFdpbmRvd3Mgc3VwcG9ydC4KIAogCiAuLiBmdW5jdGlvbjo6IGtpbGxwZyhwZ2lkLCBzaWcpCkBAIC0xNzY3LDcgKzE5NTUsNyBAQAogICAgVGhlcmUgaXMgbm8gb3B0aW9uIHRvIHdhaXQgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBjbG9zZSwgYW5kIG5vIHdheSB0byByZXRyaWV2ZQogICAgdGhlIGFwcGxpY2F0aW9uJ3MgZXhpdCBzdGF0dXMuICBUaGUgKnBhdGgqIHBhcmFtZXRlciBpcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAogICAgZGlyZWN0b3J5LiAgSWYgeW91IHdhbnQgdG8gdXNlIGFuIGFic29sdXRlIHBhdGgsIG1ha2Ugc3VyZSB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gICBpcyBub3QgYSBzbGFzaCAoYGAnLydgYCk7IHRoZSB1bmRlcmx5aW5nIFdpbjMyIDpjZnVuYzpgU2hlbGxFeGVjdXRlYCBmdW5jdGlvbgorICAgaXMgbm90IGEgc2xhc2ggKGBgJy8nYGApOyB0aGUgdW5kZXJseWluZyBXaW4zMiA6YzpmdW5jOmBTaGVsbEV4ZWN1dGVgIGZ1bmN0aW9uCiAgICBkb2Vzbid0IHdvcmsgaWYgaXQgaXMuICBVc2UgdGhlIDpmdW5jOmBvcy5wYXRoLm5vcm1wYXRoYCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdAogICAgdGhlIHBhdGggaXMgcHJvcGVybHkgZW5jb2RlZCBmb3IgV2luMzIuCiAKQEAgLTE3NzcsMTQgKzE5NjUsMTQgQEAKIC4uIGZ1bmN0aW9uOjogc3lzdGVtKGNvbW1hbmQpCiAKICAgIEV4ZWN1dGUgdGhlIGNvbW1hbmQgKGEgc3RyaW5nKSBpbiBhIHN1YnNoZWxsLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nCi0gICB0aGUgU3RhbmRhcmQgQyBmdW5jdGlvbiA6Y2Z1bmM6YHN5c3RlbWAsIGFuZCBoYXMgdGhlIHNhbWUgbGltaXRhdGlvbnMuCisgICB0aGUgU3RhbmRhcmQgQyBmdW5jdGlvbiA6YzpmdW5jOmBzeXN0ZW1gLCBhbmQgaGFzIHRoZSBzYW1lIGxpbWl0YXRpb25zLgogICAgQ2hhbmdlcyB0byA6ZGF0YTpgc3lzLnN0ZGluYCwgZXRjLiBhcmUgbm90IHJlZmxlY3RlZCBpbiB0aGUgZW52aXJvbm1lbnQgb2YKICAgIHRoZSBleGVjdXRlZCBjb21tYW5kLiBJZiAqY29tbWFuZCogZ2VuZXJhdGVzIGFueSBvdXRwdXQsIGl0IHdpbGwgYmUgc2VudCB0bwogICAgdGhlIGludGVycHJldGVyIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCiAKICAgIE9uIFVuaXgsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGV4aXQgc3RhdHVzIG9mIHRoZSBwcm9jZXNzIGVuY29kZWQgaW4gdGhlCiAgICBmb3JtYXQgc3BlY2lmaWVkIGZvciA6ZnVuYzpgd2FpdGAuICBOb3RlIHRoYXQgUE9TSVggZG9lcyBub3Qgc3BlY2lmeSB0aGUKLSAgIG1lYW5pbmcgb2YgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgQyA6Y2Z1bmM6YHN5c3RlbWAgZnVuY3Rpb24sIHNvIHRoZSByZXR1cm4KKyAgIG1lYW5pbmcgb2YgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgQyA6YzpmdW5jOmBzeXN0ZW1gIGZ1bmN0aW9uLCBzbyB0aGUgcmV0dXJuCiAgICB2YWx1ZSBvZiB0aGUgUHl0aG9uIGZ1bmN0aW9uIGlzIHN5c3RlbS1kZXBlbmRlbnQuCiAKICAgIE9uIFdpbmRvd3MsIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhhdCByZXR1cm5lZCBieSB0aGUgc3lzdGVtIHNoZWxsIGFmdGVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKaW5kZXggMzk3MmYxNC4uM2I1YTdlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0CisrKyBiL0RvYy9saWJyYXJ5L29zc2F1ZGlvZGV2LnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgb3NzYXVkaW9kZXZgIC0tLSBBY2Nlc3MgdG8gT1NTLWNvbXBhdGlibGUgYXVkaW8gZGV2aWNlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC01Nyw3ICs1Niw3IEBACiAgICB3aGF0IHdlbnQgd3JvbmcuCiAKICAgIChJZiA6bW9kOmBvc3NhdWRpb2RldmAgcmVjZWl2ZXMgYW4gZXJyb3IgZnJvbSBhIHN5c3RlbSBjYWxsIHN1Y2ggYXMKLSAgIDpjZnVuYzpgb3BlbmAsIDpjZnVuYzpgd3JpdGVgLCBvciA6Y2Z1bmM6YGlvY3RsYCwgaXQgcmFpc2VzIDpleGM6YElPRXJyb3JgLgorICAgOmM6ZnVuYzpgb3BlbmAsIDpjOmZ1bmM6YHdyaXRlYCwgb3IgOmM6ZnVuYzpgaW9jdGxgLCBpdCByYWlzZXMgOmV4YzpgSU9FcnJvcmAuCiAgICBFcnJvcnMgZGV0ZWN0ZWQgZGlyZWN0bHkgYnkgOm1vZDpgb3NzYXVkaW9kZXZgIHJlc3VsdCBpbiA6ZXhjOmBPU1NBdWRpb0Vycm9yYC4pCiAKICAgIChGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSBleGNlcHRpb24gY2xhc3MgaXMgYWxzbyBhdmFpbGFibGUgYXMKQEAgLTE2MCw2ICsxNTksMTEgQEAKICAgIGlzIG9ubHkgdXNlZnVsIGluIG5vbi1ibG9ja2luZyBtb2RlLiAgSGFzIG5vIHJldHVybiB2YWx1ZSwgc2luY2UgdGhlIGFtb3VudCBvZgogICAgZGF0YSB3cml0dGVuIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGRhdGEgc3VwcGxpZWQuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBBdWRpbyBkZXZpY2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCwgaS5lLiB0aGV5IGNhbgorICAgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisKKwogVGhlIGZvbGxvd2luZyBtZXRob2RzIGVhY2ggbWFwIHRvIGV4YWN0bHkgb25lIDpmdW5jOmBpb2N0bGAgc3lzdGVtIGNhbGwuICBUaGUKIGNvcnJlc3BvbmRlbmNlIGlzIG9idmlvdXM6IGZvciBleGFtcGxlLCA6bWV0aDpgc2V0Zm10YCBjb3JyZXNwb25kcyB0byB0aGUKIGBgU05EQ1RMX0RTUF9TRVRGTVRgYCBpb2N0bCwgYW5kIDptZXRoOmBzeW5jYCB0byBgYFNORENUTF9EU1BfU1lOQ2BgICh0aGlzIGNhbgpAQCAtMzQ3LDYgKzM1MSwxMCBAQAogCiAgICBSZXR1cm5zIHRoZSBmaWxlIGhhbmRsZSBudW1iZXIgb2YgdGhlIG9wZW4gbWl4ZXIgZGV2aWNlIGZpbGUuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICBNaXhlciBvYmplY3RzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCisKIFRoZSByZW1haW5pbmcgbWV0aG9kcyBhcmUgc3BlY2lmaWMgdG8gYXVkaW8gbWl4aW5nOgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9wYXJzZXIucnN0CmluZGV4IDUwYjk0YzEuLjNlMWUzMWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGFyc2VyLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcGFyc2VyYCAtLS0gQWNjZXNzIFB5dGhvbiBwYXJzZSB0cmVlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xNjUsNyArMTY0LDcgQEAKIG51bWJlcmluZyBpbmZvcm1hdGlvbi4KIAogCi0uLiBmdW5jdGlvbjo6IHN0Mmxpc3Qoc3RbLCBsaW5lX2luZm9dKQorLi4gZnVuY3Rpb246OiBzdDJsaXN0KHN0LCBsaW5lX2luZm89RmFsc2UsIGNvbF9pbmZvPUZhbHNlKQogCiAgICBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW4gU1Qgb2JqZWN0IGZyb20gdGhlIGNhbGxlciBpbiAqc3QqIGFuZCByZXR1cm5zIGEKICAgIFB5dGhvbiBsaXN0IHJlcHJlc2VudGluZyB0aGUgZXF1aXZhbGVudCBwYXJzZSB0cmVlLiAgVGhlIHJlc3VsdGluZyBsaXN0CkBAIC0xODMsNyArMTgyLDcgQEAKICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgb21pdHRlZCBpZiB0aGUgZmxhZyBpcyBmYWxzZSBvciBvbWl0dGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogc3QydHVwbGUoc3RbLCBsaW5lX2luZm9dKQorLi4gZnVuY3Rpb246OiBzdDJ0dXBsZShzdCwgbGluZV9pbmZvPUZhbHNlLCBjb2xfaW5mbz1GYWxzZSkKIAogICAgVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGFuIFNUIG9iamVjdCBmcm9tIHRoZSBjYWxsZXIgaW4gKnN0KiBhbmQgcmV0dXJucyBhCiAgICBQeXRob24gdHVwbGUgcmVwcmVzZW50aW5nIHRoZSBlcXVpdmFsZW50IHBhcnNlIHRyZWUuICBPdGhlciB0aGFuIHJldHVybmluZyBhCkBAIC0xOTQsNyArMTkzLDcgQEAKICAgIGluZm9ybWF0aW9uIGlzIG9taXR0ZWQgaWYgdGhlIGZsYWcgaXMgZmFsc2Ugb3Igb21pdHRlZC4KIAogCi0uLiBmdW5jdGlvbjo6IGNvbXBpbGVzdChzdFssIGZpbGVuYW1lPSc8c3ludGF4LXRyZWU+J10pCisuLiBmdW5jdGlvbjo6IGNvbXBpbGVzdChzdCwgZmlsZW5hbWU9JzxzeW50YXgtdHJlZT4nKQogCiAgICAuLiBpbmRleDo6CiAgICAgICBidWlsdGluOiBleGVjCkBAIC0yOTMsNyArMjkyLDcgQEAKIFNUIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKIAotLi4gbWV0aG9kOjogU1QuY29tcGlsZShbZmlsZW5hbWVdKQorLi4gbWV0aG9kOjogU1QuY29tcGlsZShmaWxlbmFtZT0nPHN5bnRheC10cmVlPicpCiAKICAgIFNhbWUgYXMgYGBjb21waWxlc3Qoc3QsIGZpbGVuYW1lKWBgLgogCkBAIC0zMDgsMTQgKzMwNywxNCBAQAogICAgU2FtZSBhcyBgYGlzc3VpdGUoc3QpYGAuCiAKIAotLi4gbWV0aG9kOjogU1QudG9saXN0KFtsaW5lX2luZm9dKQorLi4gbWV0aG9kOjogU1QudG9saXN0KGxpbmVfaW5mbz1GYWxzZSwgY29sX2luZm89RmFsc2UpCiAKLSAgIFNhbWUgYXMgYGBzdDJsaXN0KHN0LCBsaW5lX2luZm8pYGAuCisgICBTYW1lIGFzIGBgc3QybGlzdChzdCwgbGluZV9pbmZvLCBjb2xfaW5mbylgYC4KIAogCi0uLiBtZXRob2Q6OiBTVC50b3R1cGxlKFtsaW5lX2luZm9dKQorLi4gbWV0aG9kOjogU1QudG90dXBsZShsaW5lX2luZm89RmFsc2UsIGNvbF9pbmZvPUZhbHNlKQogCi0gICBTYW1lIGFzIGBgc3QydHVwbGUoc3QsIGxpbmVfaW5mbylgYC4KKyAgIFNhbWUgYXMgYGBzdDJ0dXBsZShzdCwgbGluZV9pbmZvLCBjb2xfaW5mbylgYC4KIAogCiBFeGFtcGxlOiBFbXVsYXRpb24gb2YgOmZ1bmM6YGNvbXBpbGVgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wZGIucnN0IGIvRG9jL2xpYnJhcnkvcGRiLnJzdAppbmRleCBlZTYzZWJiLi4xZTlkZTYzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wZGIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BkYi5yc3QKQEAgLTIwLDkgKzIwLDkgQEAKICAgIG1vZHVsZTogYmRiCiAgICBtb2R1bGU6IGNtZAogCi1UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3MgOmNsYXNzOmBQZGJgLgorVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3MgOmNsYXNzOmBQZGJgLgogVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieSByZWFkaW5nIHRoZSBzb3VyY2UuICBUaGUKLWV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyA6bW9kOmBiZGJgICh1bmRvY3VtZW50ZWQpIGFuZCA6bW9kOmBjbWRgLgorZXh0ZW5zaW9uIGludGVyZmFjZSB1c2VzIHRoZSBtb2R1bGVzIDptb2Q6YGJkYmAgYW5kIDptb2Q6YGNtZGAuCiAKIFRoZSBkZWJ1Z2dlcidzIHByb21wdCBpcyBgYChQZGIpYGAuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbSB1bmRlciBjb250cm9sCiBvZiB0aGUgZGVidWdnZXIgaXM6OgpAQCAtNDQsMTkgKzQ0LDIzIEBACiAgICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weQogCiBXaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIGlmCi10aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiBBZnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgKG9yCi1hZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsIHJlc3RhcnQgdGhlIHByb2dyYW0uIEF1dG9tYXRpYwordGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyAob3IKK2FmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGwgcmVzdGFydCB0aGUgcHJvZ3JhbS4gIEF1dG9tYXRpYwogcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiJ3Mgc3RhdGUgKHN1Y2ggYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUKIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZSBkZWJ1Z2dlciB1cG9uIHByb2dyYW0ncyBleGl0LgogCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgIDpmaWxlOmBwZGIucHlgIG5vdyBhY2NlcHRzIGEgYGAtY2BgIG9wdGlvbiB0aGF0IGV4ZWN1dGVzIGNvbW1hbmRzIGFzIGlmIGdpdmVuCisgICBpbiBhIDpmaWxlOmAucGRicmNgIGZpbGUsIHNlZSA6cmVmOmBkZWJ1Z2dlci1jb21tYW5kc2AuCisKIFRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXMgdG8KIGluc2VydCA6OgogCiAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKIAogYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuIHN0ZXAgdGhyb3VnaAotdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZyB3aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZwotdGhlIGBgY2BgIGNvbW1hbmQuCit0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nIHdpdGhvdXQgdGhlIGRlYnVnZ2VyCit1c2luZyB0aGUgOnBkYmNtZDpgY29udGludWVgIGNvbW1hbmQuCiAKIFRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6OgogCkBAIC03OSwyOSArODMsMzEgQEAKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyIGluIGEKIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6CiAKLS4uIGZ1bmN0aW9uOjogcnVuKHN0YXRlbWVudFssIGdsb2JhbHNbLCBsb2NhbHNdXSkKKy4uIGZ1bmN0aW9uOjogcnVuKHN0YXRlbWVudCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSkKIAotICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgVGhlCi0gICBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXMgZXhlY3V0ZWQ7IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzIGFuZAotICAgdHlwZSBgYGNvbnRpbnVlYGAsIG9yIHlvdSBjYW4gc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgYGBzdGVwYGAgb3IKLSAgIGBgbmV4dGBgIChhbGwgdGhlc2UgY29tbWFuZHMgYXJlIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZAotICAgKmxvY2FscyogYXJndW1lbnRzIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieQotICAgZGVmYXVsdCB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlIDptb2Q6YF9fbWFpbl9fYCBpcyB1c2VkLiAgKFNlZSB0aGUKLSAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiA6ZnVuYzpgZXhlY2Agb3IgOmZ1bmM6YGV2YWxgIGZ1bmN0aW9ucy4pCisgICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXIgZGVidWdnZXIKKyAgIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzIGV4ZWN1dGVkOyB5b3UgY2FuCisgICBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgOnBkYmNtZDpgY29udGludWVgLCBvciB5b3UgY2FuIHN0ZXAgdGhyb3VnaCB0aGUKKyAgIHN0YXRlbWVudCB1c2luZyA6cGRiY21kOmBzdGVwYCBvciA6cGRiY21kOmBuZXh0YCAoYWxsIHRoZXNlIGNvbW1hbmRzIGFyZQorICAgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZQorICAgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5IGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlCisgICBtb2R1bGUgOm1vZDpgX19tYWluX19gIGlzIHVzZWQuICAoU2VlIHRoZSBleHBsYW5hdGlvbiBvZiB0aGUgYnVpbHQtaW4KKyAgIDpmdW5jOmBleGVjYCBvciA6ZnVuYzpgZXZhbGAgZnVuY3Rpb25zLikKIAogCi0uLiBmdW5jdGlvbjo6IHJ1bmV2YWwoZXhwcmVzc2lvblssIGdsb2JhbHNbLCBsb2NhbHNdXSkKKy4uIGZ1bmN0aW9uOjogcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKQogCi0gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZykgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4KLSAgIDpmdW5jOmBydW5ldmFsYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzCi0gICBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIDpmdW5jOmBydW5gLgorICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXIgZGVidWdnZXIKKyAgIGNvbnRyb2wuICBXaGVuIDpmdW5jOmBydW5ldmFsYCByZXR1cm5zLCBpdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUKKyAgIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvIDpmdW5jOmBydW5gLgogCiAKLS4uIGZ1bmN0aW9uOjogcnVuY2FsbChmdW5jdGlvblssIGFyZ3VtZW50LCAuLi5dKQorLi4gZnVuY3Rpb246OiBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKQogCi0gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZykgd2l0aCB0aGUgZ2l2ZW4KLSAgIGFyZ3VtZW50cy4gIFdoZW4gOmZ1bmM6YHJ1bmNhbGxgIHJldHVybnMsIGl0IHJldHVybnMgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwKLSAgIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuCisgICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZykgd2l0aCB0aGUKKyAgIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gOmZ1bmM6YHJ1bmNhbGxgIHJldHVybnMsIGl0IHJldHVybnMgd2hhdGV2ZXIgdGhlCisgICBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uCisgICBpcyBlbnRlcmVkLgogCiAKIC4uIGZ1bmN0aW9uOjogc2V0X3RyYWNlKCkKQEAgLTExMSw3ICsxMTcsNyBAQAogICAgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb24gZmFpbHMpLgogCiAKLS4uIGZ1bmN0aW9uOjogcG9zdF9tb3J0ZW0oW3RyYWNlYmFja10pCisuLiBmdW5jdGlvbjo6IHBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKQogCiAgICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vCiAgICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpcyBjdXJyZW50bHkKQEAgLTEyOSw3ICsxMzUsOCBAQAogOmNsYXNzOmBQZGJgIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50IHRvCiBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjoKIAotLi4gY2xhc3M6OiBQZGIoY29tcGxldGVrZXk9J3RhYicsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUpCisuLiBjbGFzczo6IFBkYihjb21wbGV0ZWtleT0ndGFiJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwgXAorICAgICAgICAgICAgICAgbm9zaWdpbnQ9RmFsc2UpCiAKICAgIDpjbGFzczpgUGRiYCBpcyB0aGUgZGVidWdnZXIgY2xhc3MuCiAKQEAgLTE0MCw2ICsxNDcsMTEgQEAKICAgIHBhdHRlcm5zLiAgVGhlIGRlYnVnZ2VyIHdpbGwgbm90IHN0ZXAgaW50byBmcmFtZXMgdGhhdCBvcmlnaW5hdGUgaW4gYSBtb2R1bGUKICAgIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuIFsxXV8KIAorICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudCB3aGVuIHRoZQorICAgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhIGBgY29udGludWVgYCBjb21tYW5kLgorICAgVGhpcyBhbGxvd3MgeW91IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGFnYWluIGJ5IHByZXNzaW5nIEN0cmwtQy4gIElmIHlvdQorICAgd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlQgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuCisKICAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjo6CiAKICAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ2RqYW5nby4qJ10pLnNldF90cmFjZSgpCkBAIC0xNDcsOSArMTU5LDEzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgICAgIFRoZSAqc2tpcCogYXJndW1lbnQuCiAKLSAgIC4uIG1ldGhvZDo6IHJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pCi0gICAgICAgICAgICAgICBydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pCi0gICAgICAgICAgICAgICBydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlQgaGFuZGxlciB3YXMgbmV2ZXIgc2V0IGJ5CisgICAgICBQZGIuCisKKyAgIC4uIG1ldGhvZDo6IHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpCisgICAgICAgICAgICAgICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpCisgICAgICAgICAgICAgICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKQogICAgICAgICAgICAgICAgc2V0X3RyYWNlKCkKIAogICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS4KQEAgLTE2MCwxNiArMTc2LDE3IEBACiBEZWJ1Z2dlciBDb21tYW5kcwogLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIGRlYnVnZ2VyIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4gIE1vc3QgY29tbWFuZHMgY2FuIGJlCi1hYmJyZXZpYXRlZCB0byBvbmUgb3IgdHdvIGxldHRlcnM7IGUuZy4gYGBoKGVscClgYCBtZWFucyB0aGF0IGVpdGhlciBgYGhgYCBvcgotYGBoZWxwYGAgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHAgY29tbWFuZCAoYnV0IG5vdCBgYGhlYGAgb3IgYGBoZWxgYCwgbm9yCi1gYEhgYCBvciBgYEhlbHBgYCBvciBgYEhFTFBgYCkuICBBcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkKLXdoaXRlc3BhY2UgKHNwYWNlcyBvciB0YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzCi0oYGBbXWBgKSBpbiB0aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuCi1BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXIgKGBgfGBgKS4KK1RoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdCBjb21tYW5kcyBjYW4gYmUKK2FiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy4gYGBoKGVscClgYCBtZWFucyB0aGF0CitlaXRoZXIgYGBoYGAgb3IgYGBoZWxwYGAgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHAgY29tbWFuZCAoYnV0IG5vdCBgYGhlYGAKK29yIGBgaGVsYGAsIG5vciBgYEhgYCBvciBgYEhlbHBgYCBvciBgYEhFTFBgYCkuICBBcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZQorc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UgKHNwYWNlcyBvciB0YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4KK3NxdWFyZSBicmFja2V0cyAoYGBbXWBgKSBpbiB0aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUKK3R5cGVkLiAgQWx0ZXJuYXRpdmVzIGluIHRoZSBjb21tYW5kIHN5bnRheCBhcmUgc2VwYXJhdGVkIGJ5IGEgdmVydGljYWwgYmFyCisoYGB8YGApLgogCiBFbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmIHRoZSBsYXN0Ci1jb21tYW5kIHdhcyBhIGBgbGlzdGBgIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuCitjb21tYW5kIHdhcyBhIDpwZGJjbWQ6YGxpc3RgIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuCiAKIENvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvbiBzdGF0ZW1lbnRzCiBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkLiAgUHl0aG9uCkBAIC0xNzksOTIgKzE5NiwxMTIgQEAKIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzIHByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlcidzIHN0YXRlIGlzIG5vdAogY2hhbmdlZC4KIAorVGhlIGRlYnVnZ2VyIHN1cHBvcnRzIDpyZWY6YGFsaWFzZXMgPGRlYnVnZ2VyLWFsaWFzZXM+YC4gIEFsaWFzZXMgY2FuIGhhdmUKK3BhcmFtZXRlcnMgd2hpY2ggYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyCitleGFtaW5hdGlvbi4KKwogTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5IGBgOztgYC4gIChBCiBzaW5nbGUgYGA7YGAgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3IgbXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lCi10aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pIE5vIGludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcKK3RoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgIE5vIGludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcKIHRoZSBjb21tYW5kczsgdGhlIGlucHV0IGlzIHNwbGl0IGF0IHRoZSBmaXJzdCBgYDs7YGAgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUKIG1pZGRsZSBvZiBhIHF1b3RlZCBzdHJpbmcuCiAKLVRoZSBkZWJ1Z2dlciBzdXBwb3J0cyBhbGlhc2VzLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoIGFsbG93cyBvbmUgYQotY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXIgZXhhbWluYXRpb24uCi0KIC4uIGluZGV4OjoKICAgIHBhaXI6IC5wZGJyYzsgZmlsZQogICAgdHJpcGxlOiBkZWJ1Z2dlcjsgY29uZmlndXJhdGlvbjsgZmlsZQogCi1JZiBhIGZpbGUgOmZpbGU6YC5wZGJyY2AgIGV4aXN0cyBpbiB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZSBjdXJyZW50CitJZiBhIGZpbGUgOmZpbGU6YC5wZGJyY2AgZXhpc3RzIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlIGN1cnJlbnQKIGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWQgYXQgdGhlIGRlYnVnZ2VyCi1wcm9tcHQuIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmIGJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUKK3Byb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmIGJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUKIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZCBhbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4KIGJ5IHRoZSBsb2NhbCBmaWxlLgogCi1oKGVscCkgWypjb21tYW5kKl0KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICA6ZmlsZTpgLnBkYnJjYCBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdCBjb250aW51ZSBkZWJ1Z2dpbmcsIHN1Y2ggYXMKKyAgIDpwZGJjbWQ6YGNvbnRpbnVlYCBvciA6cGRiY21kOmBuZXh0YC4gIFByZXZpb3VzbHksIHRoZXNlIGNvbW1hbmRzIGhhZCBubworICAgZWZmZWN0LgorCisKKy4uIHBkYmNvbW1hbmQ6OiBoKGVscCkgW2NvbW1hbmRdCisKICAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYSAqY29tbWFuZCogYXMKICAgIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gIGBgaGVscCBwZGJgYCBkaXNwbGF5cyB0aGUgZnVsbAotICAgZG9jdW1lbnRhdGlvbiBmaWxlOyBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgUEFHRVJgIGlzIGRlZmluZWQsIHRoZQotICAgZmlsZSBpcyBwaXBlZCB0aHJvdWdoIHRoYXQgY29tbWFuZCBpbnN0ZWFkLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0Ci0gICBiZSBhbiBpZGVudGlmaWVyLCBgYGhlbHAgZXhlY2BgIG11c3QgYmUgZW50ZXJlZCB0byBnZXQgaGVscCBvbiB0aGUgYGAhYGAKLSAgIGNvbW1hbmQuCisgICBkb2N1bWVudGF0aW9uICh0aGUgZG9jc3RyaW5nIG9mIHRoZSA6bW9kOmBwZGJgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqCisgICBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsIGBgaGVscCBleGVjYGAgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uCisgICB0aGUgYGAhYGAgY29tbWFuZC4KIAotdyhoZXJlKQorLi4gcGRiY29tbWFuZDo6IHcoaGVyZSkKKwogICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuIGFycm93CiAgICBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2YgbW9zdCBjb21tYW5kcy4KIAotZChvd24pCi0gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lIG9uZSBsZXZlbCBkb3duIGluIHRoZSBzdGFjayB0cmFjZSAodG8gYSBuZXdlciBmcmFtZSkuCisuLiBwZGJjb21tYW5kOjogZChvd24pIFtjb3VudF0KIAotdShwKQotICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSBvbmUgbGV2ZWwgdXAgaW4gdGhlIHN0YWNrIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuCisgICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGUgc3RhY2sgdHJhY2UKKyAgICh0byBhIG5ld2VyIGZyYW1lKS4KIAotYihyZWFrKSBbWypmaWxlbmFtZSo6XVwgKmxpbmVubyogfCAqZnVuY3Rpb24qXCBbLCAqY29uZGl0aW9uKl1dCisuLiBwZGJjb21tYW5kOjogdShwKSBbY291bnRdCisKKyAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2sgdHJhY2UgKHRvCisgICBhbiBvbGRlciBmcmFtZSkuCisKKy4uIHBkYmNvbW1hbmQ6OiBiKHJlYWspIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV0KKwogICAgV2l0aCBhICpsaW5lbm8qIGFyZ3VtZW50LCBzZXQgYSBicmVhayB0aGVyZSBpbiB0aGUgY3VycmVudCBmaWxlLiAgV2l0aCBhCi0gICAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZSBzdGF0ZW1lbnQgd2l0aGluIHRoYXQKLSAgIGZ1bmN0aW9uLiBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8KLSAgIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXIgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzbid0IGJlZW4gbG9hZGVkIHlldCkuCi0gICBUaGUgZmlsZSBpcyBzZWFyY2hlZCBvbiBgYHN5cy5wYXRoYGAuIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYQotICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci4KKyAgICpmdW5jdGlvbiogYXJndW1lbnQsIHNldCBhIGJyZWFrIGF0IHRoZSBmaXJzdCBleGVjdXRhYmxlIHN0YXRlbWVudCB3aXRoaW4KKyAgIHRoYXQgZnVuY3Rpb24uICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwKKyAgIHRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXIgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzbid0IGJlZW4gbG9hZGVkCisgICB5ZXQpLiAgVGhlIGZpbGUgaXMgc2VhcmNoZWQgb24gOmRhdGE6YHN5cy5wYXRoYC4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQKKyAgIGlzIGFzc2lnbmVkIGEgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci4KIAotICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0IGV2YWx1YXRlIHRvIHRydWUKLSAgIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLgorICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0IGV2YWx1YXRlIHRvCisgICB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLgogCi0gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LCB0aGUgbnVtYmVyIG9mCi0gICB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudCBpZ25vcmUgY291bnQsIGFuZCB0aGUgYXNzb2NpYXRlZAotICAgY29uZGl0aW9uIGlmIGFueS4KKyAgIFdpdGhvdXQgYXJndW1lbnQsIGxpc3QgYWxsIGJyZWFrcywgaW5jbHVkaW5nIGZvciBlYWNoIGJyZWFrcG9pbnQsIHRoZSBudW1iZXIKKyAgIG9mIHRpbWVzIHRoYXQgYnJlYWtwb2ludCBoYXMgYmVlbiBoaXQsIHRoZSBjdXJyZW50IGlnbm9yZSBjb3VudCwgYW5kIHRoZQorICAgYXNzb2NpYXRlZCBjb25kaXRpb24gaWYgYW55LgogCi10YnJlYWsgW1sqZmlsZW5hbWUqOl1cICpsaW5lbm8qIHwgKmZ1bmN0aW9uKlwgWywgKmNvbmRpdGlvbipdXQotICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzIGZpcnN0IGhpdC4gIFRoZQotICAgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBicmVhay4KKy4uIHBkYmNvbW1hbmQ6OiB0YnJlYWsgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXQogCi1jbChlYXIpIFsqZmlsZW5hbWU6bGluZW5vKiB8ICpicG51bWJlciogWypicG51bWJlciAuLi4qXV0KKyAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpcyBmaXJzdCBoaXQuCisgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgOnBkYmNtZDpgYnJlYWtgLgorCisuLiBwZGJjb21tYW5kOjogY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dCisKICAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdCB0aGlzIGxpbmUuCiAgICBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhciB0aG9zZSBicmVha3BvaW50cy4KICAgIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdCBhc2sgY29uZmlybWF0aW9uKS4KIAotZGlzYWJsZSBbKmJwbnVtYmVyKiBbKmJwbnVtYmVyIC4uLipdXQotICAgRGlzYWJsZXMgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLgotICAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2UgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dAotICAgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXQgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlCi0gICAocmUtKWVuYWJsZWQuCisuLiBwZGJjb21tYW5kOjogZGlzYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dCiAKLWVuYWJsZSBbKmJwbnVtYmVyKiBbKmJwbnVtYmVyIC4uLipdXQotICAgRW5hYmxlcyB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLgorICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50CisgICBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2UgdGhlIHByb2dyYW0gdG8gc3RvcAorICAgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXQgcmVtYWlucyBpbiB0aGUgbGlzdCBvZgorICAgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuCiAKLWlnbm9yZSAqYnBudW1iZXIqIFsqY291bnQqXQotICAgU2V0cyB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpcyBvbWl0dGVkLCB0aGUKLSAgIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZSB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMKLSAgIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXMgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzCi0gICByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludCBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbgotICAgZXZhbHVhdGVzIHRvIHRydWUuCisuLiBwZGJjb21tYW5kOjogZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV0KIAotY29uZGl0aW9uICpicG51bWJlciogWypjb25kaXRpb24qXQotICAgQ29uZGl0aW9uIGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdCBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcwotICAgaG9ub3JlZC4gIElmIGNvbmRpdGlvbiBpcyBhYnNlbnQsIGFueSBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlCi0gICBicmVha3BvaW50IGlzIG1hZGUgdW5jb25kaXRpb25hbC4KKyAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLgogCi1jb21tYW5kcyBbKmJwbnVtYmVyKl0KKy4uIHBkYmNvbW1hbmQ6OiBpZ25vcmUgYnBudW1iZXIgW2NvdW50XQorCisgICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXMgb21pdHRlZCwKKyAgIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmUgd2hlbiB0aGUgaWdub3JlCisgICBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUKKyAgIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnQgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZAorICAgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLgorCisuLiBwZGJjb21tYW5kOjogY29uZGl0aW9uIGJwbnVtYmVyIFtjb25kaXRpb25dCisKKyAgIFNldCBhIG5ldyAqY29uZGl0aW9uKiBmb3IgdGhlIGJyZWFrcG9pbnQsIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdCBldmFsdWF0ZQorICAgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4gIElmICpjb25kaXRpb24qIGlzIGFic2VudCwgYW55CisgICBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlIGJyZWFrcG9pbnQgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLgorCisuLiBwZGJjb21tYW5kOjogY29tbWFuZHMgW2JwbnVtYmVyXQorCiAgICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgKmJwbnVtYmVyKi4gIFRoZSBjb21tYW5kcwotICAgdGhlbXNlbHZlcyBhcHBlYXIgb24gdGhlIGZvbGxvd2luZyBsaW5lcy4gIFR5cGUgYSBsaW5lIGNvbnRhaW5pbmcganVzdCAnZW5kJyB0bwotICAgdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTo6CisgICB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmUgY29udGFpbmluZyBqdXN0CisgICBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6OgogCiAgICAgICAoUGRiKSBjb21tYW5kcyAxCiAgICAgICAoY29tKSBwcmludCBzb21lX3ZhcmlhYmxlCkBAIC0yNzIsMTIgKzMwOSwxMiBAQAogICAgICAgKFBkYikKIAogICAgVG8gcmVtb3ZlIGFsbCBjb21tYW5kcyBmcm9tIGEgYnJlYWtwb2ludCwgdHlwZSBjb21tYW5kcyBhbmQgZm9sbG93IGl0Ci0gICBpbW1lZGlhdGVseSB3aXRoICBlbmQ7IHRoYXQgaXMsIGdpdmUgbm8gY29tbWFuZHMuCisgICBpbW1lZGlhdGVseSB3aXRoIGBgZW5kYGA7IHRoYXQgaXMsIGdpdmUgbm8gY29tbWFuZHMuCiAKICAgIFdpdGggbm8gKmJwbnVtYmVyKiBhcmd1bWVudCwgY29tbWFuZHMgcmVmZXJzIHRvIHRoZSBsYXN0IGJyZWFrcG9pbnQgc2V0LgogCi0gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi4gU2ltcGx5IHVzZSB0aGUKLSAgIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXQgcmVzdW1lcyBleGVjdXRpb24uCisgICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi4gIFNpbXBseSB1c2UKKyAgIHRoZSBjb250aW51ZSBjb21tYW5kLCBvciBzdGVwLCBvciBhbnkgb3RoZXIgY29tbWFuZCB0aGF0IHJlc3VtZXMgZXhlY3V0aW9uLgogCiAgICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLCBzdGVwLCBuZXh0LAogICAgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmCkBAIC0yOTEsOTEgKzMyOCwxNjkgQEAKICAgIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmQgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyCiAgICBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91IHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuCiAKLXModGVwKQorLi4gcGRiY29tbWFuZDo6IHModGVwKQorCiAgICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uIChlaXRoZXIgaW4gYQogICAgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbikuCiAKLW4oZXh0KQotICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXMgcmVhY2hlZCBvciBpdAotICAgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZCBgYHN0ZXBgYCBpcyB0aGF0IGBgc3RlcGBgIHN0b3BzCi0gICBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlIGBgbmV4dGBgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkKLSAgIGZ1bGwgc3BlZWQsIG9ubHkgc3RvcHBpbmcgYXQgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pCisuLiBwZGJjb21tYW5kOjogbihleHQpCiAKLXVudChpbCkKLSAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIHRoZSBsaW5lIG51bWJlciBncmVhdGVyIHRoYW4gdGhlCi0gICBjdXJyZW50IG9uZSBpcyByZWFjaGVkIG9yIHdoZW4gcmV0dXJuaW5nIGZyb20gY3VycmVudCBmcmFtZS4KKyAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzIHJlYWNoZWQgb3IKKyAgIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiA6cGRiY21kOmBuZXh0YCBhbmQgOnBkYmNtZDpgc3RlcGAgaXMKKyAgIHRoYXQgOnBkYmNtZDpgc3RlcGAgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZSA6cGRiY21kOmBuZXh0YAorICAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5IHN0b3BwaW5nIGF0IHRoZSBuZXh0CisgICBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLikKIAotcihldHVybikKKy4uIHBkYmNvbW1hbmQ6OiB1bnQoaWwpIFtsaW5lbm9dCisKKyAgIFdpdGhvdXQgYXJndW1lbnQsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbGluZSB3aXRoIGEgbnVtYmVyIGdyZWF0ZXIKKyAgIHRoYW4gdGhlIGN1cnJlbnQgb25lIGlzIHJlYWNoZWQuCisKKyAgIFdpdGggYSBsaW5lIG51bWJlciwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIGEgbGluZSB3aXRoIGEgbnVtYmVyIGdyZWF0ZXIgb3IKKyAgIGVxdWFsIHRvIHRoYXQgaXMgcmVhY2hlZC4gIEluIGJvdGggY2FzZXMsIGFsc28gc3RvcCB3aGVuIHRoZSBjdXJyZW50IGZyYW1lCisgICByZXR1cm5zLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLgorCisuLiBwZGJjb21tYW5kOjogcihldHVybikKKwogICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuCiAKLWMob250KGludWUpKQorLi4gcGRiY29tbWFuZDo6IGMob250KGludWUpKQorCiAgICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC4KIAotaih1bXApICpsaW5lbm8qCi0gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGUgYm90dG9tLW1vc3QKLSAgIGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2Fpbiwgb3IganVtcCBmb3J3YXJkIHRvIHNraXAKLSAgIGNvZGUgdGhhdCB5b3UgZG9uJ3Qgd2FudCB0byBydW4uCisuLiBwZGJjb21tYW5kOjogaih1bXApIGxpbmVubwogCi0gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tLSBmb3IgaW5zdGFuY2UgaXQgaXMgbm90CisgICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGUgYm90dG9tLW1vc3QKKyAgIGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2Fpbiwgb3IganVtcCBmb3J3YXJkIHRvCisgICBza2lwIGNvZGUgdGhhdCB5b3UgZG9uJ3Qgd2FudCB0byBydW4uCisKKyAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlIGl0IGlzIG5vdAogICAgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSA6a2V5d29yZDpgZm9yYCBsb29wIG9yIG91dCBvZiBhCiAgICA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlLgogCi1sKGlzdCkgWypmaXJzdCpcIFssICpsYXN0Kl1dCi0gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTEgbGluZXMgYXJvdW5kCi0gICB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLiAgV2l0aCBvbmUgYXJndW1lbnQsIGxpc3QgMTEKLSAgIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3byBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUKLSAgIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LgorLi4gcGRiY29tbWFuZDo6IGwoaXN0KSBbZmlyc3RbLCBsYXN0XV0KIAotYShyZ3MpCisgICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTEgbGluZXMKKyAgIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLiAgV2l0aCBgYC5gYCBhcworICAgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuICBXaXRoIG9uZSBhcmd1bWVudCwKKyAgIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7CisgICBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY291bnQuCisKKyAgIFRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW5kaWNhdGVkIGJ5IGBgLT5gYC4gIElmIGFuCisgICBleGNlcHRpb24gaXMgYmVpbmcgZGVidWdnZWQsIHRoZSBsaW5lIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzIG9yaWdpbmFsbHkKKyAgIHJhaXNlZCBvciBwcm9wYWdhdGVkIGlzIGluZGljYXRlZCBieSBgYD4+YGAsIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudAorICAgbGluZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBUaGUgYGA+PmBgIG1hcmtlci4KKworLi4gcGRiY29tbWFuZDo6IGxsIHwgbG9uZ2xpc3QKKworICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLiAgSW50ZXJlc3RpbmcgbGluZXMKKyAgIGFyZSBtYXJrZWQgYXMgZm9yIDpwZGJjbWQ6YGxpc3RgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gcGRiY29tbWFuZDo6IGEocmdzKQorCiAgICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KIAotcChyaW50KSAqZXhwcmVzc2lvbioKKy4uIHBkYmNvbW1hbmQ6OiBwKHJpbnQpIGV4cHJlc3Npb24KKwogICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHMgdmFsdWUuCiAKLXBwICpleHByZXNzaW9uKgotICAgTGlrZSB0aGUgYGBwYGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcyBwcmV0dHktcHJpbnRlZAotICAgdXNpbmcgdGhlIDptb2Q6YHBwcmludGAgbW9kdWxlLgorLi4gcGRiY29tbWFuZDo6IHBwIGV4cHJlc3Npb24KIAotYWxpYXMgWypuYW1lKiBbY29tbWFuZF1dCi0gICBDcmVhdGVzIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZCBtdXN0ICpub3QqCi0gICBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZSBpbmRpY2F0ZWQgYnkgYGAlMWBgLAotICAgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieSBhbGwgdGhlIHBhcmFtZXRlcnMuICBJZiBubwotICAgY29tbWFuZCBpcyBnaXZlbiwgdGhlIGN1cnJlbnQgYWxpYXMgZm9yICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZQotICAgZ2l2ZW4sIGFsbCBhbGlhc2VzIGFyZSBsaXN0ZWQuCisgICBMaWtlIHRoZSA6cGRiY21kOmBwcmludGAgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpcworICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlIDptb2Q6YHBwcmludGAgbW9kdWxlLgogCi0gICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlIGxlZ2FsbHkgdHlwZWQgYXQgdGhlCi0gICBwZGIgcHJvbXB0LiAgTm90ZSB0aGF0IGludGVybmFsIHBkYiBjb21tYW5kcyAqY2FuKiBiZSBvdmVycmlkZGVuIGJ5IGFsaWFzZXMuCi0gICBTdWNoIGEgY29tbWFuZCBpcyB0aGVuIGhpZGRlbiB1bnRpbCB0aGUgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzCi0gICByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbgotICAgdGhlIGxpbmUgYXJlIGxlZnQgYWxvbmUuCisuLiBwZGJjb21tYW5kOjogd2hhdGlzIGV4cHJlc3Npb24KKworICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi4KKworLi4gcGRiY29tbWFuZDo6IHNvdXJjZSBleHByZXNzaW9uCisKKyAgIFRyeSB0byBnZXQgc291cmNlIGNvZGUgZm9yIHRoZSBnaXZlbiBvYmplY3QgYW5kIGRpc3BsYXkgaXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBwZGJjb21tYW5kOjogZGlzcGxheSBbZXhwcmVzc2lvbl0KKworICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lIGV4ZWN1dGlvbiBzdG9wcworICAgaW4gdGhlIGN1cnJlbnQgZnJhbWUuCisKKyAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgbGlzdCBhbGwgZGlzcGxheSBleHByZXNzaW9ucyBmb3IgdGhlIGN1cnJlbnQgZnJhbWUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBwZGJjb21tYW5kOjogdW5kaXNwbGF5IFtleHByZXNzaW9uXQorCisgICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS4gIFdpdGhvdXQKKyAgIGV4cHJlc3Npb24sIGNsZWFyIGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudCBmcmFtZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIHBkYmNvbW1hbmQ6OiBpbnRlcmFjdAorCisgICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgOm1vZDpgY29kZWAgbW9kdWxlKSB3aG9zZSBnbG9iYWwKKyAgIG5hbWVzcGFjZSBjb250YWlucyBhbGwgdGhlIChnbG9iYWwgYW5kIGxvY2FsKSBuYW1lcyBmb3VuZCBpbiB0aGUgY3VycmVudAorICAgc2NvcGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBfZGVidWdnZXItYWxpYXNlczoKKworLi4gcGRiY29tbWFuZDo6IGFsaWFzIFtuYW1lIFtjb21tYW5kXV0KKworICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZCBtdXN0CisgICAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZSBpbmRpY2F0ZWQgYnkKKyAgIGBgJTFgYCwgYGAlMmBgLCBhbmQgc28gb24sIHdoaWxlIGBgJSpgYCBpcyByZXBsYWNlZCBieSBhbGwgdGhlIHBhcmFtZXRlcnMuCisgICBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3IgKm5hbWUqIGlzIHNob3duLiBJZiBubworICAgYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC4KKworICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5IHR5cGVkIGF0CisgICB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmUgb3ZlcnJpZGRlbiBieQorICAgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZSBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcKKyAgIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzCisgICBpbiB0aGUgbGluZSBhcmUgbGVmdCBhbG9uZS4KIAogICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkIGluIHRoZQogICAgOmZpbGU6YC5wZGJyY2AgZmlsZSk6OgogCi0gICAgICAjUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKKyAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQoIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10pCi0gICAgICAjUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKKyAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKICAgICAgIGFsaWFzIHBzIHBpIHNlbGYKIAotdW5hbGlhcyAqbmFtZSoKLSAgIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBhbGlhcy4KKy4uIHBkYmNvbW1hbmQ6OiB1bmFsaWFzIG5hbWUKIAotWyFdXCAqc3RhdGVtZW50KgorICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuCisKKy4uIHBkYmNvbW1hbmQ6OiAhIHN0YXRlbWVudAorCiAgICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgogICAgVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgc3RhdGVtZW50Ci0gICByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiBUbyBzZXQgYSBnbG9iYWwgdmFyaWFibGUsIHlvdSBjYW4gcHJlZml4IHRoZQotICAgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYSBgYGdsb2JhbGBgIGNvbW1hbmQgb24gdGhlIHNhbWUgbGluZSwgZS5nLjo6CisgICByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGEgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUKKyAgIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGEgOmtleXdvcmQ6YGdsb2JhbGAgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsCisgICBlLmcuOjoKIAogICAgICAgKFBkYikgZ2xvYmFsIGxpc3Rfb3B0aW9uczsgbGlzdF9vcHRpb25zID0gWyctbCddCiAgICAgICAoUGRiKQogCi1ydW4gWyphcmdzKiAuLi5dCi0gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsIGl0IGlzIHNwbGl0Ci0gICB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3IHN5cy5hcmd2LiBIaXN0b3J5LCBicmVha3BvaW50cywKLSAgIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlIHByZXNlcnZlZC4gInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi4KKy4uIHBkYmNvbW1hbmQ6OiBydW4gW2FyZ3MgLi4uXQorICAgICAgICAgICAgICAgIHJlc3RhcnQgW2FyZ3MgLi4uXQogCi1xKHVpdCkKLSAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuCisgICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gIElmIGFuIGFyZ3VtZW50IGlzIHN1cHBsaWVkLCBpdCBpcyBzcGxpdAorICAgd2l0aCA6bW9kOmBzaGxleGAgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3IDpkYXRhOmBzeXMuYXJndmAuCisgICBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmUgcHJlc2VydmVkLgorICAgOnBkYmNtZDpgcmVzdGFydGAgaXMgYW4gYWxpYXMgZm9yIDpwZGJjbWQ6YHJ1bmAuCisKKy4uIHBkYmNvbW1hbmQ6OiBxKHVpdCkKKworICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wZXJzaXN0ZW5jZS5yc3QgYi9Eb2MvbGlicmFyeS9wZXJzaXN0ZW5jZS5yc3QKaW5kZXggYjkwYjJlMS4uZDViYjE5MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGVyc2lzdGVuY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BlcnNpc3RlbmNlLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogLi4gX3BlcnNpc3RlbmNlOgogCiAqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0IGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAppbmRleCAxODUwYjAwLi43M2YwNjExIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKQEAgLTE0MSw3ICsxNDEsNyBAQAogVGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRvIG1ha2UgdGhlIHBpY2tsaW5nCiBwcm9jZXNzIG1vcmUgY29udmVuaWVudDoKIAotLi4gZnVuY3Rpb246OiBkdW1wKG9iaiwgZmlsZVssIHByb3RvY29sLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZV0pCisuLiBmdW5jdGlvbjo6IGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSkKIAogICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmoqIHRvIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmZpbGUqLgogICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAuCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAogICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KIAotLi4gZnVuY3Rpb246OiBkdW1wcyhvYmpbLCBwcm90b2NvbCwgXCosIGZpeF9pbXBvcnRzPVRydWVdKQorLi4gZnVuY3Rpb246OiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlKQogCiAgICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgCiAgICBvYmplY3QsIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCkBAIC0xODAsNyArMTgwLDcgQEAKICAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAogICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KIAotLi4gZnVuY3Rpb246OiBsb2FkKGZpbGUsIFtcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiXSkKKy4uIGZ1bmN0aW9uOjogbG9hZChmaWxlLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCiAgICBSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKgogICAgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLiAgVGhpcyBpcwpAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KICAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgogCi0uLiBmdW5jdGlvbjo6IGxvYWRzKGJ5dGVzX29iamVjdCwgW1wqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCJdKQorLi4gZnVuY3Rpb246OiBsb2FkcyhieXRlc19vYmplY3QsIFwqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpCiAKICAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCBoaWVyYXJjaHkgZnJvbSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBhbmQgcmV0dXJuIHRoZQogICAgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluCkBAIC0yNDgsNyArMjQ4LDcgQEAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBleHBvcnRzIHR3byBjbGFzc2VzLCA6Y2xhc3M6YFBpY2tsZXJgIGFuZAogOmNsYXNzOmBVbnBpY2tsZXJgOgogCi0uLiBjbGFzczo6IFBpY2tsZXIoZmlsZVssIHByb3RvY29sLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZV0pCisuLiBjbGFzczo6IFBpY2tsZXIoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgXCosIGZpeF9pbXBvcnRzPVRydWUpCiAKICAgIFRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KIApAQCAtMjk2LDcgKzI5Niw3IEBACiAgICAgICBVc2UgOmZ1bmM6YHBpY2tsZXRvb2xzLm9wdGltaXplYCBpZiB5b3UgbmVlZCBtb3JlIGNvbXBhY3QgcGlja2xlcy4KIAogCi0uLiBjbGFzczo6IFVucGlja2xlcihmaWxlLCBbXCosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Il0pCisuLiBjbGFzczo6IFVucGlja2xlcihmaWxlLCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCiAgICBUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHJlYWRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BpY2tsZXRvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L3BpY2tsZXRvb2xzLnJzdAppbmRleCA4OGVjYmFiLi40YzBhMTQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGV0b29scy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGlja2xldG9vbHMucnN0CkBAIC0yLDcgKzIsMTMgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IHBpY2tsZXRvb2xzCi0gICA6c3lub3BzaXM6IENvbnRhaW5zIGV4dGVuc2l2ZSBjb21tZW50cyBhYm91dCB0aGUgcGlja2xlIHByb3RvY29scyBhbmQgcGlja2xlLW1hY2hpbmUgb3Bjb2RlcywgYXMgd2VsbCBhcyBzb21lIHVzZWZ1bCBmdW5jdGlvbnMuCisgICA6c3lub3BzaXM6IENvbnRhaW5zIGV4dGVuc2l2ZSBjb21tZW50cyBhYm91dCB0aGUgcGlja2xlIHByb3RvY29scyBhbmQKKyAgICAgICAgICAgICAgcGlja2xlLW1hY2hpbmUgb3Bjb2RlcywgYXMgd2VsbCBhcyBzb21lIHVzZWZ1bCBmdW5jdGlvbnMuCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BpY2tsZXRvb2xzLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiAKIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHZhcmlvdXMgY29uc3RhbnRzIHJlbGF0aW5nIHRvIHRoZSBpbnRpbWF0ZSBkZXRhaWxzIG9mIHRoZQogOm1vZDpgcGlja2xlYCBtb2R1bGUsIHNvbWUgbGVuZ3RoeSBjb21tZW50cyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBhCkBAIC0xMSwxNSArMTcsODEgQEAKIG9yZGluYXJ5IHVzZXJzIG9mIHRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBwcm9iYWJseSB3b24ndCBmaW5kIHRoZQogOm1vZDpgcGlja2xldG9vbHNgIG1vZHVsZSByZWxldmFudC4KIAorQ29tbWFuZCBsaW5lIHVzYWdlCistLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gZnVuY3Rpb246OiBkaXMocGlja2xlWywgb3V0PU5vbmUsIG1lbW89Tm9uZSwgaW5kZW50bGV2ZWw9NF0pCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotICAgT3V0cHV0cyBhIHN5bWJvbGljIGRpc2Fzc2VtYmx5IG9mIHRoZSBwaWNrbGUgdG8gdGhlIGZpbGUtbGlrZSBvYmplY3QgKm91dCosCi0gICBkZWZhdWx0aW5nIHRvIGBgc3lzLnN0ZG91dGBgLiAgKnBpY2tsZSogY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmlsZS1saWtlIG9iamVjdC4KLSAgICptZW1vKiBjYW4gYmUgYSBQeXRob24gZGljdGlvbmFyeSB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcGlja2xlJ3MgbWVtbzsgaXQgY2FuCi0gICBiZSB1c2VkIHRvIHBlcmZvcm0gZGlzYXNzZW1ibGllcyBhY3Jvc3MgbXVsdGlwbGUgcGlja2xlcyBjcmVhdGVkIGJ5IHRoZSBzYW1lCi0gICBwaWNrbGVyLiBTdWNjZXNzaXZlIGxldmVscywgaW5kaWNhdGVkIGJ5IGBgTUFSS2BgIG9wY29kZXMgaW4gdGhlIHN0cmVhbSwgYXJlCi0gICBpbmRlbnRlZCBieSAqaW5kZW50bGV2ZWwqIHNwYWNlcy4KK1doZW4gaW52b2tlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGBgcHl0aG9uIC1tIHBpY2tsZXRvb2xzYGAgd2lsbAorZGlzYXNzZW1ibGUgdGhlIGNvbnRlbnRzIG9mIG9uZSBvciBtb3JlIHBpY2tsZSBmaWxlcy4gIE5vdGUgdGhhdCBpZgoreW91IHdhbnQgdG8gc2VlIHRoZSBQeXRob24gb2JqZWN0IHN0b3JlZCBpbiB0aGUgcGlja2xlIHJhdGhlciB0aGFuIHRoZQorZGV0YWlscyBvZiBwaWNrbGUgZm9ybWF0LCB5b3UgbWF5IHdhbnQgdG8gdXNlIGBgLW0gcGlja2xlYGAgaW5zdGVhZC4KK0hvd2V2ZXIsIHdoZW4gdGhlIHBpY2tsZSBmaWxlIHRoYXQgeW91IHdhbnQgdG8gZXhhbWluZSBjb21lcyBmcm9tIGFuCit1bnRydXN0ZWQgc291cmNlLCBgYC1tIHBpY2tsZXRvb2xzYGAgaXMgYSBzYWZlciBvcHRpb24gYmVjYXVzZSBpdCBkb2VzCitub3QgZXhlY3V0ZSBwaWNrbGUgYnl0ZWNvZGUuCisKK0ZvciBleGFtcGxlLCB3aXRoIGEgdHVwbGUgYGAoMSwgMilgYCBwaWNrbGVkIGluIGZpbGUgYGB4LnBpY2tsZWBgOjoKKworICAgICQgcHl0aG9uIC1tIHBpY2tsZSB4LnBpY2tsZQorICAgICgxLCAyKQorCisgICAgJCBweXRob24gLW0gcGlja2xldG9vbHMgeC5waWNrbGUKKyAgICAgICAgMDogXHg4MCBQUk9UTyAgICAgIDMKKyAgICAgICAgMjogSyAgICBCSU5JTlQxICAgIDEKKyAgICAgICAgNDogSyAgICBCSU5JTlQxICAgIDIKKyAgICAgICAgNjogXHg4NiBUVVBMRTIKKyAgICAgICAgNzogcSAgICBCSU5QVVQgICAgIDAKKyAgICAgICAgOTogLiAgICBTVE9QCisgICAgaGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMgorCitDb21tYW5kIGxpbmUgb3B0aW9ucworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gcHJvZ3JhbTo6IHBpY2tsZXRvb2xzCisKKy4uIGNtZG9wdGlvbjo6IC1hLCAtLWFubm90YXRlCisKKyAgIEFubm90YXRlIGVhY2ggbGluZSB3aXRoIGEgc2hvcnQgb3Bjb2RlIGRlc2NyaXB0aW9uLgorCisuLiBjbWRvcHRpb246OiAtbywgLS1vdXRwdXQ9PGZpbGU+CisKKyAgIE5hbWUgb2YgYSBmaWxlIHdoZXJlIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4uCisKKy4uIGNtZG9wdGlvbjo6IC1sLCAtLWluZGVudGxldmVsPTxudW0+CisKKyAgIFRoZSBudW1iZXIgb2YgYmxhbmtzIGJ5IHdoaWNoIHRvIGluZGVudCBhIG5ldyBNQVJLIGxldmVsLgorCisuLiBjbWRvcHRpb246OiAtbSwgLS1tZW1vCisKKyAgIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBhcmUgZGlzYXNzZW1ibGVkLCBwcmVzZXJ2ZSBtZW1vIGJldHdlZW4KKyAgIGRpc2Fzc2VtYmxpZXMuCisKKy4uIGNtZG9wdGlvbjo6IC1wLCAtLXByZWFtYmxlPTxwcmVhbWJsZT4KKworICAgV2hlbiBtb3JlIHRoYW4gb25lIHBpY2tsZSBmaWxlIGFyZSBzcGVjaWZpZWQsIHByaW50IGdpdmVuIHByZWFtYmxlCisgICBiZWZvcmUgZWFjaCBkaXNhc3NlbWJseS4KKworCisKK1Byb2dyYW1tYXRpYyBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisuLiBmdW5jdGlvbjo6IGRpcyhwaWNrbGUsIG91dD1Ob25lLCBtZW1vPU5vbmUsIGluZGVudGxldmVsPTQsIGFubm90YXRlPTApCisKKyAgIE91dHB1dHMgYSBzeW1ib2xpYyBkaXNhc3NlbWJseSBvZiB0aGUgcGlja2xlIHRvIHRoZSBmaWxlLWxpa2UKKyAgIG9iamVjdCAqb3V0KiwgZGVmYXVsdGluZyB0byBgYHN5cy5zdGRvdXRgYC4gICpwaWNrbGUqIGNhbiBiZSBhCisgICBzdHJpbmcgb3IgYSBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1lbW8qIGNhbiBiZSBhIFB5dGhvbiBkaWN0aW9uYXJ5CisgICB0aGF0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcGlja2xlJ3MgbWVtbzsgaXQgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybQorICAgZGlzYXNzZW1ibGllcyBhY3Jvc3MgbXVsdGlwbGUgcGlja2xlcyBjcmVhdGVkIGJ5IHRoZSBzYW1lCisgICBwaWNrbGVyLiBTdWNjZXNzaXZlIGxldmVscywgaW5kaWNhdGVkIGJ5IGBgTUFSS2BgIG9wY29kZXMgaW4gdGhlCisgICBzdHJlYW0sIGFyZSBpbmRlbnRlZCBieSAqaW5kZW50bGV2ZWwqIHNwYWNlcy4gIElmIGEgbm9uemVybyB2YWx1ZQorICAgaXMgZ2l2ZW4gdG8gKmFubm90YXRlKiwgZWFjaCBvcGNvZGUgaW4gdGhlIG91dHB1dCBpcyBhbm5vdGF0ZWQgd2l0aAorICAgYSBzaG9ydCBkZXNjcmlwdGlvbi4gIFRoZSB2YWx1ZSBvZiAqYW5ub3RhdGUqIGlzIHVzZWQgYXMgYSBoaW50IGZvcgorICAgdGhlIGNvbHVtbiB3aGVyZSBhbm5vdGF0aW9uIHNob3VsZCBzdGFydC4KKworICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgVGhlICphbm5vdGF0ZSogYXJndW1lbnQuCiAKIC4uIGZ1bmN0aW9uOjogZ2Vub3BzKHBpY2tsZSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGlwZXMucnN0IGIvRG9jL2xpYnJhcnkvcGlwZXMucnN0CmluZGV4IDFmMmIyZmYuLjAxNmE3MjAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BpcGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9waXBlcy5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHBpcGVzYCAtLS0gSW50ZXJmYWNlIHRvIHNoZWxsIHBpcGVsaW5lcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTcsNiArNiw5IEBACiAgICA6c3lub3BzaXM6IEEgUHl0aG9uIGludGVyZmFjZSB0byBVbml4IHNoZWxsIHBpcGVsaW5lcy4KIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BpcGVzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgcGlwZXNgIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgdG8gYWJzdHJhY3QgdGhlIGNvbmNlcHQgb2YgYSAqcGlwZWxpbmUqCiAtLS0gYSBzZXF1ZW5jZSBvZiBjb252ZXJ0ZXJzIGZyb20gb25lIGZpbGUgdG8gIGFub3RoZXIuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CmluZGV4IDVhNTlmMjguLjMxMThmZjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BrZ3V0aWwucnN0CkBAIC0xLDEwICsxLDEzIEBACi0KIDptb2Q6YHBrZ3V0aWxgIC0tLSBQYWNrYWdlIGV4dGVuc2lvbiB1dGlsaXR5CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiBwa2d1dGlsCiAgICA6c3lub3BzaXM6IFV0aWxpdGllcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0uCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BrZ3V0aWwucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdGllcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0sIGluIHBhcnRpY3VsYXIgcGFja2FnZQogc3VwcG9ydC4KIApAQCAtMTY4LDEwICsxNzEsMTAgQEAKIAogICAgR2V0IGEgcmVzb3VyY2UgZnJvbSBhIHBhY2thZ2UuCiAKLSAgIFRoaXMgaXMgYSB3cmFwcGVyIGZvciB0aGUgUEVQIDMwMiBsb2FkZXIgOmZ1bmM6YGdldF9kYXRhYCBBUEkuIFRoZSBwYWNrYWdlCi0gICBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYSBwYWNrYWdlLCBpbiBzdGFuZGFyZCBtb2R1bGUgZm9ybWF0Ci0gICAoZm9vLmJhcikuIFRoZSByZXNvdXJjZSBhcmd1bWVudCBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYSByZWxhdGl2ZQotICAgZmlsZW5hbWUsIHVzaW5nIGBgL2BgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci4gVGhlIHBhcmVudCBkaXJlY3RvcnkgbmFtZQorICAgVGhpcyBpcyBhIHdyYXBwZXIgZm9yIHRoZSA6cGVwOmAzMDJgIGxvYWRlciA6ZnVuYzpgZ2V0X2RhdGFgIEFQSS4gIFRoZQorICAgKnBhY2thZ2UqIGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiBhIHBhY2thZ2UsIGluIHN0YW5kYXJkIG1vZHVsZSBmb3JtYXQKKyAgIChgYGZvby5iYXJgYCkuICBUaGUgKnJlc291cmNlKiBhcmd1bWVudCBzaG91bGQgYmUgaW4gdGhlIGZvcm0gb2YgYSByZWxhdGl2ZQorICAgZmlsZW5hbWUsIHVzaW5nIGBgL2BgIGFzIHRoZSBwYXRoIHNlcGFyYXRvci4gIFRoZSBwYXJlbnQgZGlyZWN0b3J5IG5hbWUKICAgIGBgLi5gYCBpcyBub3QgYWxsb3dlZCwgYW5kIG5vciBpcyBhIHJvb3RlZCBuYW1lIChzdGFydGluZyB3aXRoIGEgYGAvYGApLgogCiAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGJpbmFyeSBzdHJpbmcgdGhhdCBpcyB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZApAQCAtMTgzLDUgKzE4Niw1IEBACiAgICAgICBkID0gb3MucGF0aC5kaXJuYW1lKHN5cy5tb2R1bGVzW3BhY2thZ2VdLl9fZmlsZV9fKQogICAgICAgZGF0YSA9IG9wZW4ob3MucGF0aC5qb2luKGQsIHJlc291cmNlKSwgJ3JiJykucmVhZCgpCiAKLSAgIElmIHRoZSBwYWNrYWdlIGNhbm5vdCBiZSBsb2NhdGVkIG9yIGxvYWRlZCwgb3IgaXQgdXNlcyBhIFBFUCAzMDIgbG9hZGVyCisgICBJZiB0aGUgcGFja2FnZSBjYW5ub3QgYmUgbG9jYXRlZCBvciBsb2FkZWQsIG9yIGl0IHVzZXMgYSA6cGVwOmAzMDJgIGxvYWRlcgogICAgd2hpY2ggZG9lcyBub3Qgc3VwcG9ydCA6ZnVuYzpgZ2V0X2RhdGFgLCB0aGVuIGBgTm9uZWBgIGlzIHJldHVybmVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0IGIvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CmluZGV4IGE3MWQ1MzMuLmIwNDMxZDkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKQEAgLTYsNiArNiw5IEBACiAuLiBtb2R1bGVhdXRob3I6OiBNYXJjLUFuZHJlIExlbWJ1cmcgPG1hbEBlZ2VuaXguY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEJqb3JuIFBldHRlcnNlbiA8YnBldHRlcnNlbkBjb3JwLmZhaXJpc2FhYy5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BsYXRmb3JtLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiAuLiBub3RlOjoKIApAQCAtMjcsOCArMzAsOCBAQAogICAgcmV0dXJuZWQgYXMgc3RyaW5ncy4KIAogICAgVmFsdWVzIHRoYXQgY2Fubm90IGJlIGRldGVybWluZWQgYXJlIHJldHVybmVkIGFzIGdpdmVuIGJ5IHRoZSBwYXJhbWV0ZXIgcHJlc2V0cy4KLSAgIElmIGJpdHMgaXMgZ2l2ZW4gYXMgYGAnJ2BgLCB0aGUgOmNmdW5jOmBzaXplb2YocG9pbnRlcilgIChvcgotICAgOmNmdW5jOmBzaXplb2YobG9uZylgIG9uIFB5dGhvbiB2ZXJzaW9uIDwgMS41LjIpIGlzIHVzZWQgYXMgaW5kaWNhdG9yIGZvciB0aGUKKyAgIElmIGJpdHMgaXMgZ2l2ZW4gYXMgYGAnJ2BgLCB0aGUgOmM6ZnVuYzpgc2l6ZW9mKHBvaW50ZXIpYCAob3IKKyAgIDpjOmZ1bmM6YHNpemVvZihsb25nKWAgb24gUHl0aG9uIHZlcnNpb24gPCAxLjUuMikgaXMgdXNlZCBhcyBpbmRpY2F0b3IgZm9yIHRoZQogICAgc3VwcG9ydGVkIHBvaW50ZXIgc2l6ZS4KIAogICAgVGhlIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgc3lzdGVtJ3MgOmZpbGU6YGZpbGVgIGNvbW1hbmQgdG8gZG8gdGhlIGFjdHVhbCB3b3JrLgpAQCAtMjI1LDcgKzIyOCw3IEBACiAgICBFbnRyaWVzIHdoaWNoIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGFyZSBzZXQgdG8gYGAnJ2BgLiAgQWxsIHR1cGxlIGVudHJpZXMgYXJlCiAgICBzdHJpbmdzLgogCi0gICBEb2N1bWVudGF0aW9uIGZvciB0aGUgdW5kZXJseWluZyA6Y2Z1bmM6YGdlc3RhbHRgIEFQSSBpcyBhdmFpbGFibGUgb25saW5lIGF0CisgICBEb2N1bWVudGF0aW9uIGZvciB0aGUgdW5kZXJseWluZyA6YzpmdW5jOmBnZXN0YWx0YCBBUEkgaXMgYXZhaWxhYmxlIG9ubGluZSBhdAogICAgaHR0cDovL3d3dy5yZ2Fyb3MubmwvZ2VzdGFsdC8uCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0IGIvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CmluZGV4IDM2YzllYjMuLmFlNWU5NGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKQEAgLTExLDYgKzExLDEwIEBACiAgICBwYWlyOiBwbGlzdDsgZmlsZQogICAgc2luZ2xlOiBwcm9wZXJ0eSBsaXN0CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BsaXN0bGliLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlICJwcm9wZXJ0eSBsaXN0IgogWE1MIGZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0IGIvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAppbmRleCAwYjJjMDMzLi5kMTFkOTM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHBvcGxpYmAgLS0tIFBPUDMgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05LDYgKzgsMTAgQEAKIAogLi4gaW5kZXg6OiBwYWlyOiBQT1AzOyBwcm90b2NvbAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9wb3BsaWIucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIGRlZmluZXMgYSBjbGFzcywgOmNsYXNzOmBQT1AzYCwgd2hpY2ggZW5jYXBzdWxhdGVzIGEgY29ubmVjdGlvbiB0byBhCiBQT1AzIHNlcnZlciBhbmQgaW1wbGVtZW50cyB0aGUgcHJvdG9jb2wgYXMgZGVmaW5lZCBpbiA6cmZjOmAxNzI1YC4gIFRoZQogOmNsYXNzOmBQT1AzYCBjbGFzcyBzdXBwb3J0cyBib3RoIHRoZSBtaW5pbWFsIGFuZCBvcHRpb25hbCBjb21tYW5kIHNldHMuCkBAIC0yNCw3ICsyNyw3IEBACiBBIHNpbmdsZSBjbGFzcyBpcyBwcm92aWRlZCBieSB0aGUgOm1vZDpgcG9wbGliYCBtb2R1bGU6CiAKIAotLi4gY2xhc3M6OiBQT1AzKGhvc3RbLCBwb3J0WywgdGltZW91dF1dKQorLi4gY2xhc3M6OiBQT1AzKGhvc3QsIHBvcnQ9UE9QM19QT1JUWywgdGltZW91dF0pCiAKICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgYWN0dWFsIFBPUDMgcHJvdG9jb2wuICBUaGUgY29ubmVjdGlvbiBpcyBjcmVhdGVkIHdoZW4KICAgIHRoZSBpbnN0YW5jZSBpcyBpbml0aWFsaXplZC4gSWYgKnBvcnQqIGlzIG9taXR0ZWQsIHRoZSBzdGFuZGFyZCBQT1AzIHBvcnQgKDExMCkKQEAgLTMzLDEyICszNiwxOSBAQAogICAgYmUgdXNlZCkuCiAKIAotLi4gY2xhc3M6OiBQT1AzX1NTTChob3N0WywgcG9ydFssIGtleWZpbGVbLCBjZXJ0ZmlsZV1dXSkKKy4uIGNsYXNzOjogUE9QM19TU0woaG9zdCwgcG9ydD1QT1AzX1NTTF9QT1JULCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsIHRpbWVvdXQ9Tm9uZSwgY29udGV4dD1Ob25lKQogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQT1AzYCB0aGF0IGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQuICBJZiAqcG9ydCogaXMgbm90IHNwZWNpZmllZCwgOTk1LCB0aGUgc3RhbmRhcmQgUE9QMy1vdmVyLVNTTAogICAgcG9ydCBpcyB1c2VkLiAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvIG9wdGlvbmFsIC0gdGhleSBjYW4gY29udGFpbiBhCiAgICBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCisgICAqdGltZW91dCogd29ya3MgYXMgaW4gdGhlIDpjbGFzczpgUE9QM2AgY29uc3RydWN0b3IuICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYQorICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgorICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkKKyAgIHN0cnVjdHVyZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICpjb250ZXh0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKIAogT25lIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgOm1vZDpgcG9wbGliYCBtb2R1bGU6CkBAIC0xNjAsNyArMTcwLDcgQEAKICAgIFBPUDMgc2VydmVycyB5b3Ugd2lsbCB1c2UgYmVmb3JlIHRydXN0aW5nIGl0LgogCiAKLS4uIG1ldGhvZDo6IFBPUDMudWlkbChbd2hpY2hdKQorLi4gbWV0aG9kOjogUE9QMy51aWRsKHdoaWNoPU5vbmUpCiAKICAgIFJldHVybiBtZXNzYWdlIGRpZ2VzdCAodW5pcXVlIGlkKSBsaXN0LiBJZiAqd2hpY2gqIGlzIHNwZWNpZmllZCwgcmVzdWx0IGNvbnRhaW5zCiAgICB0aGUgdW5pcXVlIGlkIGZvciB0aGF0IG1lc3NhZ2UgaW4gdGhlIGZvcm0gYGAncmVzcG9uc2UgbWVzZ251bSB1aWRgYCwgb3RoZXJ3aXNlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wb3NpeC5yc3QgYi9Eb2MvbGlicmFyeS9wb3NpeC5yc3QKaW5kZXggYzMzZDllNS4uMDdkYjJiMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9zaXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Bvc2l4LnJzdApAQCAtMzgsMTMgKzM4LDEzIEBACiAKIFNldmVyYWwgb3BlcmF0aW5nIHN5c3RlbXMgKGluY2x1ZGluZyBBSVgsIEhQLVVYLCBJcml4IGFuZCBTb2xhcmlzKSBwcm92aWRlCiBzdXBwb3J0IGZvciBmaWxlcyB0aGF0IGFyZSBsYXJnZXIgdGhhbiAyIEdCIGZyb20gYSBDIHByb2dyYW1taW5nIG1vZGVsIHdoZXJlCi06Y3R5cGU6YGludGAgYW5kIDpjdHlwZTpgbG9uZ2AgYXJlIDMyLWJpdCB2YWx1ZXMuIFRoaXMgaXMgdHlwaWNhbGx5IGFjY29tcGxpc2hlZAorOmM6dHlwZTpgaW50YCBhbmQgOmM6dHlwZTpgbG9uZ2AgYXJlIDMyLWJpdCB2YWx1ZXMuIFRoaXMgaXMgdHlwaWNhbGx5IGFjY29tcGxpc2hlZAogYnkgZGVmaW5pbmcgdGhlIHJlbGV2YW50IHNpemUgYW5kIG9mZnNldCB0eXBlcyBhcyA2NC1iaXQgdmFsdWVzLiBTdWNoIGZpbGVzIGFyZQogc29tZXRpbWVzIHJlZmVycmVkIHRvIGFzIDpkZm46YGxhcmdlIGZpbGVzYC4KIAotTGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gUHl0aG9uIHdoZW4gdGhlIHNpemUgb2YgYW4gOmN0eXBlOmBvZmZfdGAgaXMKLWxhcmdlciB0aGFuIGEgOmN0eXBlOmBsb25nYCBhbmQgdGhlIDpjdHlwZTpgbG9uZyBsb25nYCB0eXBlIGlzIGF2YWlsYWJsZSBhbmQgaXMKLWF0IGxlYXN0IGFzIGxhcmdlIGFzIGFuIDpjdHlwZTpgb2ZmX3RgLgorTGFyZ2UgZmlsZSBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gUHl0aG9uIHdoZW4gdGhlIHNpemUgb2YgYW4gOmM6dHlwZTpgb2ZmX3RgIGlzCitsYXJnZXIgdGhhbiBhIDpjOnR5cGU6YGxvbmdgIGFuZCB0aGUgOmM6dHlwZTpgbG9uZyBsb25nYCB0eXBlIGlzIGF2YWlsYWJsZSBhbmQgaXMKK2F0IGxlYXN0IGFzIGxhcmdlIGFzIGFuIDpjOnR5cGU6YG9mZl90YC4KIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gY29uZmlndXJlIGFuZCBjb21waWxlIFB5dGhvbiB3aXRoIGNlcnRhaW4gY29tcGlsZXIgZmxhZ3MKIHRvIGVuYWJsZSB0aGlzIG1vZGUuIEZvciBleGFtcGxlLCBpdCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgd2l0aCByZWNlbnQgdmVyc2lvbnMKIG9mIElyaXgsIGJ1dCB3aXRoIFNvbGFyaXMgMi42IGFuZCAyLjcgeW91IG5lZWQgdG8gZG8gc29tZXRoaW5nIGxpa2U6OgpAQCAtNjksMTcgKzY5LDIyIEBACiAuLiBkYXRhOjogZW52aXJvbgogCiAgICBBIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIHRoZSBzdHJpbmcgZW52aXJvbm1lbnQgYXQgdGhlIHRpbWUgdGhlIGludGVycHJldGVyCi0gICB3YXMgc3RhcnRlZC4gIEZvciBleGFtcGxlLCBgYGVudmlyb25bJ0hPTUUnXWBgIGlzIHRoZSBwYXRobmFtZSBvZiB5b3VyIGhvbWUKLSAgIGRpcmVjdG9yeSwgZXF1aXZhbGVudCB0byBgYGdldGVudigiSE9NRSIpYGAgaW4gQy4KKyAgIHdhcyBzdGFydGVkLiBLZXlzIGFuZCB2YWx1ZXMgYXJlIGJ5dGVzIG9uIFVuaXggYW5kIHN0ciBvbiBXaW5kb3dzLiBGb3IKKyAgIGV4YW1wbGUsIGBgZW52aXJvbltiJ0hPTUUnXWBgIChgYGVudmlyb25bJ0hPTUUnXWBgIG9uIFdpbmRvd3MpIGlzIHRoZQorICAgcGF0aG5hbWUgb2YgeW91ciBob21lIGRpcmVjdG9yeSwgZXF1aXZhbGVudCB0byBgYGdldGVudigiSE9NRSIpYGAgaW4gQy4KIAogICAgTW9kaWZ5aW5nIHRoaXMgZGljdGlvbmFyeSBkb2VzIG5vdCBhZmZlY3QgdGhlIHN0cmluZyBlbnZpcm9ubWVudCBwYXNzZWQgb24gYnkKICAgIDpmdW5jOmBleGVjdmAsIDpmdW5jOmBwb3BlbmAgb3IgOmZ1bmM6YHN5c3RlbWA7IGlmIHlvdSBuZWVkIHRvIGNoYW5nZSB0aGUKICAgIGVudmlyb25tZW50LCBwYXNzIGBgZW52aXJvbmBgIHRvIDpmdW5jOmBleGVjdmVgIG9yIGFkZCB2YXJpYWJsZSBhc3NpZ25tZW50cyBhbmQKICAgIGV4cG9ydCBzdGF0ZW1lbnRzIHRvIHRoZSBjb21tYW5kIHN0cmluZyBmb3IgOmZ1bmM6YHN5c3RlbWAgb3IgOmZ1bmM6YHBvcGVuYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIE9uIFVuaXgsIGtleXMgYW5kIHZhbHVlcyBhcmUgYnl0ZXMuCisKICAgIC4uIG5vdGU6OgogCi0gICAgICBUaGUgOm1vZDpgb3NgIG1vZHVsZSBwcm92aWRlcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgYGBlbnZpcm9uYGAgd2hpY2gKLSAgICAgIHVwZGF0ZXMgdGhlIGVudmlyb25tZW50IG9uIG1vZGlmaWNhdGlvbi4gIE5vdGUgYWxzbyB0aGF0IHVwZGF0aW5nIGBgb3MuZW52aXJvbmBgCi0gICAgICB3aWxsIHJlbmRlciB0aGlzIGRpY3Rpb25hcnkgb2Jzb2xldGUuICBVc2Ugb2YgdGhlIDptb2Q6YG9zYCBtb2R1bGUgdmVyc2lvbiBvZgotICAgICAgdGhpcyBpcyByZWNvbW1lbmRlZCBvdmVyIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIDptb2Q6YHBvc2l4YCBtb2R1bGUuCisgICAgICBUaGUgOm1vZDpgb3NgIG1vZHVsZSBwcm92aWRlcyBhbiBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgYGBlbnZpcm9uYGAKKyAgICAgIHdoaWNoIHVwZGF0ZXMgdGhlIGVudmlyb25tZW50IG9uIG1vZGlmaWNhdGlvbi4gTm90ZSBhbHNvIHRoYXQgdXBkYXRpbmcKKyAgICAgIDpkYXRhOmBvcy5lbnZpcm9uYCB3aWxsIHJlbmRlciB0aGlzIGRpY3Rpb25hcnkgb2Jzb2xldGUuIFVzZSBvZiB0aGUKKyAgICAgIDptb2Q6YG9zYCBtb2R1bGUgdmVyc2lvbiBvZiB0aGlzIGlzIHJlY29tbWVuZGVkIG92ZXIgZGlyZWN0IGFjY2VzcyB0byB0aGUKKyAgICAgIDptb2Q6YHBvc2l4YCBtb2R1bGUuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0IGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdAppbmRleCBkMWQxYmFlLi45YWIxMmVlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHBwcmludGAgLS0tIERhdGEgcHJldHR5IHByaW50ZXIKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNyw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcHByaW50LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgcHByaW50YCBtb2R1bGUgcHJvdmlkZXMgYSBjYXBhYmlsaXR5IHRvICJwcmV0dHktcHJpbnQiIGFyYml0cmFyeQogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgpAQCAtMjcsNyArMjksNyBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlciguLi4pCisuLiBjbGFzczo6IFByZXR0eVByaW50ZXIoaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSkKIAogICAgQ29uc3RydWN0IGEgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBpbnN0YW5jZS4gIFRoaXMgY29uc3RydWN0b3IgdW5kZXJzdGFuZHMKICAgIHNldmVyYWwga2V5d29yZCBwYXJhbWV0ZXJzLiAgQW4gb3V0cHV0IHN0cmVhbSBtYXkgYmUgc2V0IHVzaW5nIHRoZSAqc3RyZWFtKgpAQCAtNjIsMjEgKzY0LDIwIEBACiAgICAgICA+Pj4gcHAucHByaW50KHR1cCkKICAgICAgICgnc3BhbScsICgnZWdncycsICgnbHVtYmVyamFjaycsICgna25pZ2h0cycsICgnbmknLCAoJ2RlYWQnLCAoLi4uKSkpKSkpKQogCisKIFRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGNsYXNzIHN1cHBvcnRzIHNldmVyYWwgZGVyaXZhdGl2ZSBmdW5jdGlvbnM6CiAKLS4uIE5vdyB0aGUgZGVyaXZhdGl2ZSBmdW5jdGlvbnM6Ci0KLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3RbLCBpbmRlbnRbLCB3aWR0aFssIGRlcHRoXV1dKQorLi4gZnVuY3Rpb246OiBwZm9ybWF0KG9iamVjdCwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKQogCiAgICBSZXR1cm4gdGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqZWN0KiBhcyBhIHN0cmluZy4gICppbmRlbnQqLCAqd2lkdGgqCiAgICBhbmQgKmRlcHRoKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcwogICAgZm9ybWF0dGluZyBwYXJhbWV0ZXJzLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdFssIHN0cmVhbVssIGluZGVudFssIHdpZHRoWywgZGVwdGhdXV1dKQorLi4gZnVuY3Rpb246OiBwcHJpbnQob2JqZWN0LCBzdHJlYW09Tm9uZSwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lKQogCiAgICBQcmludHMgdGhlIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqZWN0KiBvbiAqc3RyZWFtKiwgZm9sbG93ZWQgYnkgYQotICAgbmV3bGluZS4gIElmICpzdHJlYW0qIGlzIG9taXR0ZWQsIGBgc3lzLnN0ZG91dGBgIGlzIHVzZWQuICBUaGlzIG1heSBiZSB1c2VkCisgICBuZXdsaW5lLiAgSWYgKnN0cmVhbSogaXMgYGBOb25lYGAsIGBgc3lzLnN0ZG91dGBgIGlzIHVzZWQuICBUaGlzIG1heSBiZSB1c2VkCiAgICBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgaW5zdGVhZCBvZiB0aGUgOmZ1bmM6YHByaW50YCBmdW5jdGlvbiBmb3IKICAgIGluc3BlY3RpbmcgdmFsdWVzICh5b3UgY2FuIGV2ZW4gcmVhc3NpZ24gYGBwcmludCA9IHBwcmludC5wcHJpbnRgYCBmb3IgdXNlCiAgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiBhbmQgKmRlcHRoKiB3aWxsIGJlIHBhc3NlZCB0byB0aGUKQEAgLTE5MSw3ICsxOTIsOCBAQAogcHByaW50IEV4YW1wbGUKIC0tLS0tLS0tLS0tLS0tCiAKLVRoaXMgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgc2V2ZXJhbCB1c2VzIG9mIHRoZSA6ZnVuYzpgcHByaW50YCBmdW5jdGlvbiBhbmQgaXRzIHBhcmFtZXRlcnMuCitUaGlzIGV4YW1wbGUgZGVtb25zdHJhdGVzIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cworcGFyYW1ldGVycy4KIAogICAgPj4+IGltcG9ydCBwcHJpbnQKICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKaW5kZXggODJjYzJlYi4uMzkzMTgzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKQEAgLTEsNCArMSwzIEBACi0KIC4uIF9wcm9maWxlOgogCiAqKioqKioqKioqKioqKioqKioqKgpAQCAtMTAsNiArOSw5IEBACiAuLiBtb2R1bGU6OiBwcm9maWxlCiAgICA6c3lub3BzaXM6IFB5dGhvbiBzb3VyY2UgcHJvZmlsZXIuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3Byb2ZpbGUucHlgIGFuZCA6c291cmNlOmBMaWIvcHN0YXRzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiAuLiBfcHJvZmlsZXItaW50cm9kdWN0aW9uOgogCkBAIC0yMTksNyArMjIxLDcgQEAKIHJlYWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGVzZSBtb2R1bGVzLgogCiAKLS4uIGZ1bmN0aW9uOjogcnVuKGNvbW1hbmRbLCBmaWxlbmFtZV0pCisuLiBmdW5jdGlvbjo6IHJ1bihjb21tYW5kLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKQogCiAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgOmZ1bmM6YGV4ZWNgCiAgICBmdW5jdGlvbiwgYW5kIGFuIG9wdGlvbmFsIGZpbGUgbmFtZS4gIEluIGFsbCBjYXNlcyB0aGlzIHJvdXRpbmUgYXR0ZW1wdHMgdG8KQEAgLTI0OCw4ICsyNTAsOCBAQAogICAgICAgZm9yIHRoZSBudW1iZXIgb2YgY2FsbHMsCiAKICAgIHRvdHRpbWUKLSAgICAgIGZvciB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gKGFuZCBleGNsdWRpbmcgdGltZSBtYWRlIGluIGNhbGxzCi0gICAgICB0byBzdWItZnVuY3Rpb25zKSwKKyAgICAgIGZvciB0aGUgdG90YWwgdGltZSBzcGVudCBpbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gKGFuZCBleGNsdWRpbmcgdGltZSBtYWRlIGluCisgICAgICBjYWxscyB0byBzdWItZnVuY3Rpb25zKSwKIAogICAgcGVyY2FsbAogICAgICAgaXMgdGhlIHF1b3RpZW50IG9mIGBgdG90dGltZWBgIGRpdmlkZWQgYnkgYGBuY2FsbHNgYApAQCAtMjY5LDI0ICsyNzEsMjUgQEAKICAgIGNhbGxzLiAgTm90ZSB0aGF0IHdoZW4gdGhlIGZ1bmN0aW9uIGRvZXMgbm90IHJlY3Vyc2UsIHRoZXNlIHR3byB2YWx1ZXMgYXJlIHRoZQogICAgc2FtZSwgYW5kIG9ubHkgdGhlIHNpbmdsZSBmaWd1cmUgaXMgcHJpbnRlZC4KIAorICAgSWYgKnNvcnQqIGlzIGdpdmVuLCBpdCBjYW4gYmUgb25lIG9mIGBgJ3N0ZG5hbWUnYGAgKHNvcnQgYnkgZmlsZW5hbWU6bGluZW5vKSwKKyAgIGBgJ2NhbGxzJ2BgIChzb3J0IGJ5IG51bWJlciBvZiBjYWxscyksIGBgJ3RpbWUnYGAgKHNvcnQgYnkgdG90YWwgdGltZSkgb3IKKyAgIGBgJ2N1bXVsYXRpdmUnYGAgKHNvcnQgYnkgY3VtdWxhdGl2ZSB0aW1lKS4gIFRoZSBkZWZhdWx0IGlzIGBgJ3N0ZG5hbWUnYGAuCiAKLS4uIGZ1bmN0aW9uOjogcnVuY3R4KGNvbW1hbmQsIGdsb2JhbHMsIGxvY2Fsc1ssIGZpbGVuYW1lXSkKKworLi4gZnVuY3Rpb246OiBydW5jdHgoY29tbWFuZCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lKQogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gOmZ1bmM6YHJ1bmAsIHdpdGggYWRkZWQgYXJndW1lbnRzIHRvIHN1cHBseSB0aGUKICAgIGdsb2JhbHMgYW5kIGxvY2FscyBkaWN0aW9uYXJpZXMgZm9yIHRoZSAqY29tbWFuZCogc3RyaW5nLgogCi1BbmFseXNpcyBvZiB0aGUgcHJvZmlsZXIgZGF0YSBpcyBkb25lIHVzaW5nIHRoZSA6Y2xhc3M6YFN0YXRzYCBjbGFzcy4KIAotLi4gbm90ZTo6Ci0KLSAgIFRoZSA6Y2xhc3M6YFN0YXRzYCBjbGFzcyBpcyBkZWZpbmVkIGluIHRoZSA6bW9kOmBwc3RhdHNgIG1vZHVsZS4KK0FuYWx5c2lzIG9mIHRoZSBwcm9maWxlciBkYXRhIGlzIGRvbmUgdXNpbmcgdGhlIDpjbGFzczpgcHN0YXRzLlN0YXRzYCBjbGFzcy4KIAogCiAuLiBtb2R1bGU6OiBwc3RhdHMKICAgIDpzeW5vcHNpczogU3RhdGlzdGljcyBvYmplY3QgZm9yIHVzZSB3aXRoIHRoZSBwcm9maWxlci4KIAogCi0uLiBjbGFzczo6IFN0YXRzKGZpbGVuYW1lWywgc3RyZWFtPXN5cy5zdGRvdXRbLCAuLi5dXSkKKy4uIGNsYXNzOjogU3RhdHMoKmZpbGVuYW1lcywgc3RyZWFtPXN5cy5zdGRvdXQpCiAKICAgIFRoaXMgY2xhc3MgY29uc3RydWN0b3IgY3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBhICJzdGF0aXN0aWNzIG9iamVjdCIgZnJvbSBhCiAgICAqZmlsZW5hbWUqIChvciBzZXQgb2YgZmlsZW5hbWVzKS4gIDpjbGFzczpgU3RhdHNgIG9iamVjdHMgYXJlIG1hbmlwdWxhdGVkIGJ5CkBAIC0zMjYsNyArMzI5LDcgQEAKICAgIGFjY3VtdWxhdGVkIGludG8gYSBzaW5nbGUgZW50cnkuCiAKIAotLi4gbWV0aG9kOjogU3RhdHMuYWRkKGZpbGVuYW1lWywgLi4uXSkKKy4uIG1ldGhvZDo6IFN0YXRzLmFkZCgqZmlsZW5hbWVzKQogCiAgICBUaGlzIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmBTdGF0c2AgY2xhc3MgYWNjdW11bGF0ZXMgYWRkaXRpb25hbCBwcm9maWxpbmcKICAgIGluZm9ybWF0aW9uIGludG8gdGhlIGN1cnJlbnQgcHJvZmlsaW5nIG9iamVjdC4gIEl0cyBhcmd1bWVudHMgc2hvdWxkIHJlZmVyIHRvCkBAIC0zNDMsNyArMzQ2LDcgQEAKICAgIDpjbGFzczpgcHJvZmlsZS5Qcm9maWxlYCBhbmQgOmNsYXNzOmBjUHJvZmlsZS5Qcm9maWxlYCBjbGFzc2VzLgogCiAKLS4uIG1ldGhvZDo6IFN0YXRzLnNvcnRfc3RhdHMoa2V5WywgLi4uXSkKKy4uIG1ldGhvZDo6IFN0YXRzLnNvcnRfc3RhdHMoKmtleXMpCiAKICAgIFRoaXMgbWV0aG9kIG1vZGlmaWVzIHRoZSA6Y2xhc3M6YFN0YXRzYCBvYmplY3QgYnkgc29ydGluZyBpdCBhY2NvcmRpbmcgdG8gdGhlCiAgICBzdXBwbGllZCBjcml0ZXJpYS4gIFRoZSBhcmd1bWVudCBpcyB0eXBpY2FsbHkgYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIGJhc2lzIG9mCkBAIC00MTAsNyArNDEzLDcgQEAKICAgIC4uIFRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIHByaW1hcmlseSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBvbGQgcHJvZmlsZXIuCiAKIAotLi4gbWV0aG9kOjogU3RhdHMucHJpbnRfc3RhdHMoW3Jlc3RyaWN0aW9uLCAuLi5dKQorLi4gbWV0aG9kOjogU3RhdHMucHJpbnRfc3RhdHMoKnJlc3RyaWN0aW9ucykKIAogICAgVGhpcyBtZXRob2QgZm9yIHRoZSA6Y2xhc3M6YFN0YXRzYCBjbGFzcyBwcmludHMgb3V0IGEgcmVwb3J0IGFzIGRlc2NyaWJlZCBpbiB0aGUKICAgIDpmdW5jOmBwcm9maWxlLnJ1bmAgZGVmaW5pdGlvbi4KQEAgLTQzOSw3ICs0NDIsNyBAQAogICAgdGhlbiBwcm9jZWVkIHRvIG9ubHkgcHJpbnQgdGhlIGZpcnN0IDEwJSBvZiB0aGVtLgogCiAKLS4uIG1ldGhvZDo6IFN0YXRzLnByaW50X2NhbGxlcnMoW3Jlc3RyaWN0aW9uLCAuLi5dKQorLi4gbWV0aG9kOjogU3RhdHMucHJpbnRfY2FsbGVycygqcmVzdHJpY3Rpb25zKQogCiAgICBUaGlzIG1ldGhvZCBmb3IgdGhlIDpjbGFzczpgU3RhdHNgIGNsYXNzIHByaW50cyBhIGxpc3Qgb2YgYWxsIGZ1bmN0aW9ucyB0aGF0CiAgICBjYWxsZWQgZWFjaCBmdW5jdGlvbiBpbiB0aGUgcHJvZmlsZWQgZGF0YWJhc2UuICBUaGUgb3JkZXJpbmcgaXMgaWRlbnRpY2FsIHRvCkBAIC00NTcsNyArNDYwLDcgQEAKICAgICAgdGhlIGN1cnJlbnQgZnVuY3Rpb24gd2hpbGUgaXQgd2FzIGludm9rZWQgYnkgdGhpcyBzcGVjaWZpYyBjYWxsZXIuCiAKIAotLi4gbWV0aG9kOjogU3RhdHMucHJpbnRfY2FsbGVlcyhbcmVzdHJpY3Rpb24sIC4uLl0pCisuLiBtZXRob2Q6OiBTdGF0cy5wcmludF9jYWxsZWVzKCpyZXN0cmljdGlvbnMpCiAKICAgIFRoaXMgbWV0aG9kIGZvciB0aGUgOmNsYXNzOmBTdGF0c2AgY2xhc3MgcHJpbnRzIGEgbGlzdCBvZiBhbGwgZnVuY3Rpb24gdGhhdCB3ZXJlCiAgICBjYWxsZWQgYnkgdGhlIGluZGljYXRlZCBmdW5jdGlvbi4gIEFzaWRlIGZyb20gdGhpcyByZXZlcnNhbCBvZiBkaXJlY3Rpb24gb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B0eS5yc3QgYi9Eb2MvbGlicmFyeS9wdHkucnN0CmluZGV4IGJlODc5ZjIuLjJiOTM4NWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B0eS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHR5LnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcHR5YCAtLS0gUHNldWRvLXRlcm1pbmFsIHV0aWxpdGllcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC00NiwzICs0NSw1MCBAQAogICAgYSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBkZWZhdWx0cyB0cnkgdG8gcmVhZCAxMDI0IGJ5dGVzIGVhY2ggdGltZSB0aGV5IGFyZQogICAgY2FsbGVkLgogCisKK0V4YW1wbGUKKy0tLS0tLS0KKworLi4gc2VjdGlvbmF1dGhvcjo6IFN0ZWVuIEx1bWhvbHQKKworVGhlIGZvbGxvd2luZyBwcm9ncmFtIGFjdHMgbGlrZSB0aGUgVW5peCBjb21tYW5kIDptYW5wYWdlOmBzY3JpcHQoMSlgLCB1c2luZyBhCitwc2V1ZG8tdGVybWluYWwgdG8gcmVjb3JkIGFsbCBpbnB1dCBhbmQgb3V0cHV0IG9mIGEgdGVybWluYWwgc2Vzc2lvbiBpbiBhCisidHlwZXNjcmlwdCIuIDo6CisKKyAgIGltcG9ydCBzeXMsIG9zLCB0aW1lLCBnZXRvcHQKKyAgIGltcG9ydCBwdHkKKworICAgbW9kZSA9ICd3YicKKyAgIHNoZWxsID0gJ3NoJworICAgZmlsZW5hbWUgPSAndHlwZXNjcmlwdCcKKyAgIGlmICdTSEVMTCcgaW4gb3MuZW52aXJvbjoKKyAgICAgICBzaGVsbCA9IG9zLmVudmlyb25bJ1NIRUxMJ10KKworICAgdHJ5OgorICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2FwJykKKyAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgorICAgICAgIHByaW50KCclczogJXMnICUgKHN5cy5hcmd2WzBdLCBtc2cpKQorICAgICAgIHN5cy5leGl0KDIpCisKKyAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgorICAgICAgICMgb3B0aW9uIC1hOiBhcHBlbmQgdG8gdHlwZXNjcmlwdCBmaWxlCisgICAgICAgaWYgb3B0ID09ICctYSc6CisgICAgICAgICAgIG1vZGUgPSAnYWInCisgICAgICAgIyBvcHRpb24gLXA6IHVzZSBhIFB5dGhvbiBzaGVsbCBhcyB0aGUgdGVybWluYWwgY29tbWFuZAorICAgICAgIGVsaWYgb3B0ID09ICctcCc6CisgICAgICAgICAgIHNoZWxsID0gc3lzLmV4ZWN1dGFibGUKKyAgIGlmIGFyZ3M6CisgICAgICAgZmlsZW5hbWUgPSBhcmdzWzBdCisKKyAgIHNjcmlwdCA9IG9wZW4oZmlsZW5hbWUsIG1vZGUpCisKKyAgIGRlZiByZWFkKGZkKToKKyAgICAgICBkYXRhID0gb3MucmVhZChmZCwgMTAyNCkKKyAgICAgICBzY3JpcHQud3JpdGUoZGF0YSkKKyAgICAgICByZXR1cm4gZGF0YQorCisgICBzeXMuc3Rkb3V0LndyaXRlKCdTY3JpcHQgc3RhcnRlZCwgZmlsZSBpcyAlc1xuJyAlIGZpbGVuYW1lKQorICAgc2NyaXB0LndyaXRlKCgnU2NyaXB0IHN0YXJ0ZWQgb24gJXNcbicgJSB0aW1lLmFzY3RpbWUoKSkuZW5jb2RlKCkpCisgICBwdHkuc3Bhd24oc2hlbGwsIHJlYWQpCisgICBzY3JpcHQud3JpdGUoKCdTY3JpcHQgZG9uZSBvbiAlc1xuJyAlIHRpbWUuYXNjdGltZSgpKS5lbmNvZGUoKSkKKyAgIHN5cy5zdGRvdXQud3JpdGUoJ1NjcmlwdCBkb25lLCBmaWxlIGlzICVzXG4nICUgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wd2QucnN0IGIvRG9jL2xpYnJhcnkvcHdkLnJzdAppbmRleCA1NjJhZmQ5Li4yYzE3ZDllIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wd2QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B3ZC5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHB3ZGAgLS0tIFRoZSBwYXNzd29yZCBkYXRhYmFzZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5X2NvbXBpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKaW5kZXggMDg5MTg2Mi4uMDdkZGMyNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QKQEAgLTgsNiArOCwxMCBAQAogCiAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9weV9jb21waWxlLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgcHlfY29tcGlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSBieXRlLWNvZGUgZmlsZQogZnJvbSBhIHNvdXJjZSBmaWxlLCBhbmQgYW5vdGhlciBmdW5jdGlvbiB1c2VkIHdoZW4gdGhlIG1vZHVsZSBzb3VyY2UgZmlsZSBpcwogaW52b2tlZCBhcyBhIHNjcmlwdC4KQEAgLTIyLDI0ICsyNiw0MiBAQAogICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBhdHRlbXB0aW5nIHRvIGNvbXBpbGUgdGhlIGZpbGUuCiAKIAotLi4gZnVuY3Rpb246OiBjb21waWxlKGZpbGVbLCBjZmlsZVssIGRmaWxlWywgZG9yYWlzZV1dXSkKKy4uIGZ1bmN0aW9uOjogY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSkKIAotICAgQ29tcGlsZSBhIHNvdXJjZSBmaWxlIHRvIGJ5dGUtY29kZSBhbmQgd3JpdGUgb3V0IHRoZSBieXRlLWNvZGUgY2FjaGUgIGZpbGUuICBUaGUKLSAgIHNvdXJjZSBjb2RlIGlzIGxvYWRlZCBmcm9tIHRoZSBmaWxlIG5hbWUgKmZpbGUqLiAgVGhlICBieXRlLWNvZGUgaXMgd3JpdHRlbiB0bwotICAgKmNmaWxlKiwgd2hpY2ggZGVmYXVsdHMgdG8gKmZpbGUqIGBgK2BgIGBgJ2MnYGAgKGBgJ28nYGAgaWYgb3B0aW1pemF0aW9uIGlzCi0gICBlbmFibGVkIGluIHRoZSBjdXJyZW50IGludGVycHJldGVyKS4gIElmICpkZmlsZSogaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGFzIHRoZQotICAgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgaW4gZXJyb3IgbWVzc2FnZXMgaW5zdGVhZCBvZiAqZmlsZSouICBJZiAqZG9yYWlzZSogaXMKLSAgIHRydWUsIGEgOmV4YzpgUHlDb21waWxlRXJyb3JgIGlzIHJhaXNlZCB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIHdoaWxlCi0gICBjb21waWxpbmcgKmZpbGUqLiBJZiAqZG9yYWlzZSogaXMgZmFsc2UgKHRoZSBkZWZhdWx0KSwgYW4gZXJyb3Igc3RyaW5nIGlzCi0gICB3cml0dGVuIHRvIGBgc3lzLnN0ZGVycmBgLCBidXQgbm8gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKyAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlICBmaWxlLgorICAgVGhlIHNvdXJjZSBjb2RlIGlzIGxvYWRlZCBmcm9tIHRoZSBmaWxlIG5hbWUgKmZpbGUqLiAgVGhlICBieXRlLWNvZGUgaXMKKyAgIHdyaXR0ZW4gdG8gKmNmaWxlKiwgd2hpY2ggZGVmYXVsdHMgdG8gdGhlIDpQRVA6YDMxNDdgIHBhdGgsIGVuZGluZyBpbgorICAgYGAucHljYGAgKGBgLnB5b2BgIGlmIG9wdGltaXphdGlvbiBpcyBlbmFibGVkIGluIHRoZSBjdXJyZW50IGludGVycHJldGVyKS4KKyAgIEZvciBleGFtcGxlLCBpZiAqZmlsZSogaXMgYGAvZm9vL2Jhci9iYXoucHlgYCAqY2ZpbGUqIHdpbGwgZGVmYXVsdCB0bworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4gIElmICpkZmlsZSogaXMKKyAgIHNwZWNpZmllZCwgaXQgaXMgdXNlZCBhcyB0aGUgbmFtZSBvZiB0aGUgc291cmNlIGZpbGUgaW4gZXJyb3IgbWVzc2FnZXMgd2hlbgorICAgaW5zdGVhZCBvZiAqZmlsZSouICBJZiAqZG9yYWlzZSogaXMgdHJ1ZSwgYSA6ZXhjOmBQeUNvbXBpbGVFcnJvcmAgaXMgcmFpc2VkCisgICB3aGVuIGFuIGVycm9yIGlzIGVuY291bnRlcmVkIHdoaWxlIGNvbXBpbGluZyAqZmlsZSouIElmICpkb3JhaXNlKiBpcyBmYWxzZQorICAgKHRoZSBkZWZhdWx0KSwgYW4gZXJyb3Igc3RyaW5nIGlzIHdyaXR0ZW4gdG8gYGBzeXMuc3RkZXJyYGAsIGJ1dCBubyBleGNlcHRpb24KKyAgIGlzIHJhaXNlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcGF0aCB0byBieXRlLWNvbXBpbGVkIGZpbGUsIGkuZS4KKyAgIHdoYXRldmVyICpjZmlsZSogdmFsdWUgd2FzIHVzZWQuCisKKyAgICpvcHRpbWl6ZSogY29udHJvbHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBhbmQgaXMgcGFzc2VkIHRvIHRoZSBidWlsdC1pbgorICAgOmZ1bmM6YGNvbXBpbGVgIGZ1bmN0aW9uLiAgVGhlIGRlZmF1bHQgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbgorICAgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBDaGFuZ2VkIGRlZmF1bHQgdmFsdWUgb2YgKmNmaWxlKiB0byBiZSA6UEVQOmAzMTQ3YC1jb21wbGlhbnQuICBQcmV2aW91cworICAgICAgZGVmYXVsdCB3YXMgKmZpbGUqICsgYGAnYydgYCAoYGAnbydgYCBpZiBvcHRpbWl6YXRpb24gd2FzIGVuYWJsZWQpLgorICAgICAgQWxzbyBhZGRlZCB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIuCiAKIAotLi4gZnVuY3Rpb246OiBtYWluKFthcmdzXSkKKy4uIGZ1bmN0aW9uOjogbWFpbihhcmdzPU5vbmUpCiAKICAgIENvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuICBUaGUgZmlsZXMgbmFtZWQgaW4gKmFyZ3MqIChvciBvbiB0aGUgY29tbWFuZAotICAgbGluZSwgaWYgKmFyZ3MqIGlzIG5vdCBzcGVjaWZpZWQpIGFyZSBjb21waWxlZCBhbmQgdGhlIHJlc3VsdGluZyBieXRlY29kZSBpcworICAgbGluZSwgaWYgKmFyZ3MqIGlzIGBgTm9uZWBgKSBhcmUgY29tcGlsZWQgYW5kIHRoZSByZXN1bHRpbmcgYnl0ZWNvZGUgaXMKICAgIGNhY2hlZCBpbiB0aGUgbm9ybWFsIG1hbm5lci4gIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2VhcmNoIGEgZGlyZWN0b3J5CiAgICBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHNvdXJjZSBmaWxlczsgaXQgb25seSBjb21waWxlcyBmaWxlcyBuYW1lZCBleHBsaWNpdGx5LgorICAgSWYgYGAnLSdgYCBpcyB0aGUgb25seSBwYXJhbWV0ZXIgaW4gYXJncywgdGhlIGxpc3Qgb2YgZmlsZXMgaXMgdGFrZW4gZnJvbQorICAgc3RhbmRhcmQgaW5wdXQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBzdXBwb3J0IGZvciBgYCctJ2BgLgogCiBXaGVuIHRoaXMgbW9kdWxlIGlzIHJ1biBhcyBhIHNjcmlwdCwgdGhlIDpmdW5jOmBtYWluYCBpcyB1c2VkIHRvIGNvbXBpbGUgYWxsIHRoZQogZmlsZXMgbmFtZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZSBleGl0IHN0YXR1cyBpcyBub256ZXJvIGlmIG9uZSBvZiB0aGUgZmlsZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5Y2xici5yc3QgYi9Eb2MvbGlicmFyeS9weWNsYnIucnN0CmluZGV4IDM2YjQ2ZjQuLmQ0YTc2YTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5Y2xici5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHljbGJyLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcHljbGJyYCAtLS0gUHl0aG9uIGNsYXNzIGJyb3dzZXIgc3VwcG9ydAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02LDYgKzUsOSBAQAogICAgOnN5bm9wc2lzOiBTdXBwb3J0cyBpbmZvcm1hdGlvbiBleHRyYWN0aW9uIGZvciBhIFB5dGhvbiBjbGFzcyBicm93c2VyLgogLi4gc2VjdGlvbmF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3B5Y2xici5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHB5Y2xicmAgbW9kdWxlIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSBzb21lIGxpbWl0ZWQgaW5mb3JtYXRpb24KIGFib3V0IHRoZSBjbGFzc2VzLCBtZXRob2RzIGFuZCB0b3AtbGV2ZWwgZnVuY3Rpb25zIGRlZmluZWQgaW4gYSBtb2R1bGUuICBUaGUKQEAgLTE3LDcgKzE5LDcgQEAKIG1vZHVsZXMuCiAKIAotLi4gZnVuY3Rpb246OiByZWFkbW9kdWxlKG1vZHVsZVssIHBhdGg9Tm9uZV0pCisuLiBmdW5jdGlvbjo6IHJlYWRtb2R1bGUobW9kdWxlLCBwYXRoPU5vbmUpCiAKICAgIFJlYWQgYSBtb2R1bGUgYW5kIHJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBjbGFzcyBuYW1lcyB0byBjbGFzcwogICAgZGVzY3JpcHRvciBvYmplY3RzLiAgVGhlIHBhcmFtZXRlciAqbW9kdWxlKiBzaG91bGQgYmUgdGhlIG5hbWUgb2YgYQpAQCAtMjYsNyArMjgsNyBAQAogICAgb2YgYGBzeXMucGF0aGBgLCB3aGljaCBpcyB1c2VkIHRvIGxvY2F0ZSBtb2R1bGUgc291cmNlIGNvZGUuCiAKIAotLi4gZnVuY3Rpb246OiByZWFkbW9kdWxlX2V4KG1vZHVsZVssIHBhdGg9Tm9uZV0pCisuLiBmdW5jdGlvbjo6IHJlYWRtb2R1bGVfZXgobW9kdWxlLCBwYXRoPU5vbmUpCiAKICAgIExpa2UgOmZ1bmM6YHJlYWRtb2R1bGVgLCBidXQgdGhlIHJldHVybmVkIGRpY3Rpb25hcnksIGluIGFkZGl0aW9uIHRvCiAgICBtYXBwaW5nIGNsYXNzIG5hbWVzIHRvIGNsYXNzIGRlc2NyaXB0b3Igb2JqZWN0cywgYWxzbyBtYXBzIHRvcC1sZXZlbApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlkb2MucnN0IGIvRG9jL2xpYnJhcnkvcHlkb2MucnN0CmluZGV4IDAxZjQ4YjEuLmUxMDA4NjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weWRvYy5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHB5ZG9jYCAtLS0gRG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IgYW5kIG9ubGluZSBoZWxwIHN5c3RlbQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEzLDYgKzEyLDEwIEBACiAgICBzaW5nbGU6IGRvY3VtZW50YXRpb247IG9ubGluZQogICAgc2luZ2xlOiBoZWxwOyBvbmxpbmUKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcHlkb2MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSA6bW9kOmBweWRvY2AgbW9kdWxlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGRvY3VtZW50YXRpb24gZnJvbSBQeXRob24KIG1vZHVsZXMuICBUaGUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgcHJlc2VudGVkIGFzIHBhZ2VzIG9mIHRleHQgb24gdGhlIGNvbnNvbGUsCiBzZXJ2ZWQgdG8gYSBXZWIgYnJvd3Nlciwgb3Igc2F2ZWQgdG8gSFRNTCBmaWxlcy4KQEAgLTUxLDEyICs1NCwyMSBAQAogbW9kdWxlIGlzIHRoZSBmaXJzdCBsaW5lIG9mIGl0cyBkb2N1bWVudGF0aW9uIHN0cmluZy4KIAogWW91IGNhbiBhbHNvIHVzZSA6cHJvZ3JhbTpgcHlkb2NgIHRvIHN0YXJ0IGFuIEhUVFAgc2VydmVyIG9uIHRoZSBsb2NhbCBtYWNoaW5lCi10aGF0IHdpbGwgc2VydmUgZG9jdW1lbnRhdGlvbiB0byB2aXNpdGluZyBXZWIgYnJvd3NlcnMuIDpwcm9ncmFtOmBweWRvYyAtcCAxMjM0YAotd2lsbCBzdGFydCBhIEhUVFAgc2VydmVyIG9uIHBvcnQgMTIzNCwgYWxsb3dpbmcgeW91IHRvIGJyb3dzZQotdGhlIGRvY3VtZW50YXRpb24gYXQgYGBodHRwOi8vbG9jYWxob3N0OjEyMzQvYGAgaW4geW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIuCit0aGF0IHdpbGwgc2VydmUgZG9jdW1lbnRhdGlvbiB0byB2aXNpdGluZyBXZWIgYnJvd3NlcnMuICA6cHJvZ3JhbTpgcHlkb2MgLXAgMTIzNGAKK3dpbGwgc3RhcnQgYSBIVFRQIHNlcnZlciBvbiBwb3J0IDEyMzQsIGFsbG93aW5nIHlvdSB0byBicm93c2UgdGhlCitkb2N1bWVudGF0aW9uIGF0IGBgaHR0cDovL2xvY2FsaG9zdDoxMjM0L2BgIGluIHlvdXIgcHJlZmVycmVkIFdlYiBicm93c2VyLgorU3BlY2lmeWluZyBgYDBgYCBhcyB0aGUgcG9ydCBudW1iZXIgd2lsbCBzZWxlY3QgYW4gYXJiaXRyYXJ5IHVudXNlZCBwb3J0LgorCiA6cHJvZ3JhbTpgcHlkb2MgLWdgIHdpbGwgc3RhcnQgdGhlIHNlcnZlciBhbmQgYWRkaXRpb25hbGx5IGJyaW5nIHVwIGEKIHNtYWxsIDptb2Q6YHRraW50ZXJgXCAtYmFzZWQgZ3JhcGhpY2FsIGludGVyZmFjZSB0byBoZWxwIHlvdSBzZWFyY2ggZm9yCi1kb2N1bWVudGF0aW9uIHBhZ2VzLgorZG9jdW1lbnRhdGlvbiBwYWdlcy4gIFRoZSBgYC1nYGAgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHNpbmNlIHRoZSBzZXJ2ZXIgY2FuCitub3cgYmUgY29udHJvbGxlZCBkaXJlY3RseSBmcm9tIEhUVFAgY2xpZW50cy4KKworOnByb2dyYW06YHB5ZG9jIC1iYCB3aWxsIHN0YXJ0IHRoZSBzZXJ2ZXIgYW5kIGFkZGl0aW9uYWxseSBvcGVuIGEgd2ViCiticm93c2VyIHRvIGEgbW9kdWxlIGluZGV4IHBhZ2UuICBFYWNoIHNlcnZlZCBwYWdlIGhhcyBhIG5hdmlnYXRpb24gYmFyIGF0IHRoZQordG9wIHdoZXJlIHlvdSBjYW4gKkdldCogaGVscCBvbiBhbiBpbmRpdmlkdWFsIGl0ZW0sICpTZWFyY2gqIGFsbCBtb2R1bGVzIHdpdGggYQora2V5d29yZCBpbiB0aGVpciBzeW5vcHNpcyBsaW5lLCBhbmQgZ28gdG8gdGhlICpNb2R1bGUgaW5kZXgqLCAqVG9waWNzKiBhbmQKKypLZXl3b3JkcyogcGFnZXMuCiAKIFdoZW4gOnByb2dyYW06YHB5ZG9jYCBnZW5lcmF0ZXMgZG9jdW1lbnRhdGlvbiwgaXQgdXNlcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudAogYW5kIHBhdGggdG8gbG9jYXRlIG1vZHVsZXMuICBUaHVzLCBpbnZva2luZyA6cHJvZ3JhbTpgcHlkb2Mgc3BhbWAKQEAgLTcwLDMgKzgyLDUgQEAKIHRvIGEgZGlmZmVyZW50IFVSTCBvciB0byBhIGxvY2FsIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBMaWJyYXJ5CiBSZWZlcmVuY2UgTWFudWFsIHBhZ2VzLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgQWRkZWQgdGhlIGBgLWJgYCBvcHRpb24sIGRlcHJlY2F0ZWQgdGhlIGBgLWdgYCBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9weWV4cGF0LnJzdCBiL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CmluZGV4IDFlYjlkYjEuLmE2NDhjZmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgLS0tIEZhc3QgWE1MIHBhcnNpbmcgdXNpbmcgRXhwYXQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC01Niw3ICs1NSw3IEBACiAgICBSZXR1cm5zIGFuIGV4cGxhbmF0b3J5IHN0cmluZyBmb3IgYSBnaXZlbiBlcnJvciBudW1iZXIgKmVycm5vKi4KIAogCi0uLiBmdW5jdGlvbjo6IFBhcnNlckNyZWF0ZShbZW5jb2RpbmdbLCBuYW1lc3BhY2Vfc2VwYXJhdG9yXV0pCisuLiBmdW5jdGlvbjo6IFBhcnNlckNyZWF0ZShlbmNvZGluZz1Ob25lLCBuYW1lc3BhY2Vfc2VwYXJhdG9yPU5vbmUpCiAKICAgIENyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgOmNsYXNzOmB4bWxwYXJzZXJgIG9iamVjdC4gICAqZW5jb2RpbmcqLCBpZiBzcGVjaWZpZWQsCiAgICBtdXN0IGJlIGEgc3RyaW5nIG5hbWluZyB0aGUgZW5jb2RpbmcgIHVzZWQgYnkgdGhlIFhNTCBkYXRhLiAgRXhwYXQgZG9lc24ndApAQCAtMTc3LDcgKzE3Niw3IEBACiAgICBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBjYWxsZWQgYmVmb3JlIHRoZSA6bWV0aDpgUGFyc2VgIG9yIDptZXRoOmBQYXJzZUZpbGVgCiAgICBtZXRob2RzIGFyZSBjYWxsZWQ7IGNhbGxpbmcgaXQgYWZ0ZXIgZWl0aGVyIG9mIHRob3NlIGhhdmUgYmVlbiBjYWxsZWQgY2F1c2VzCiAgICA6ZXhjOmBFeHBhdEVycm9yYCB0byBiZSByYWlzZWQgd2l0aCB0aGUgOmF0dHI6YGNvZGVgIGF0dHJpYnV0ZSBzZXQgdG8KLSAgIDpjb25zdDpgZXJyb3JzLlhNTF9FUlJPUl9DQU5UX0NIQU5HRV9GRUFUVVJFX09OQ0VfUEFSU0lOR2AuCisgICBgYGVycm9ycy5jb2Rlc1tlcnJvcnMuWE1MX0VSUk9SX0NBTlRfQ0hBTkdFX0ZFQVRVUkVfT05DRV9QQVJTSU5HXWBgLgogCiA6Y2xhc3M6YHhtbHBhcnNlcmAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKIApAQCAtNDc1LDggKzQ3NCwyMSBAQAogCiAuLiBhdHRyaWJ1dGU6OiBFeHBhdEVycm9yLmNvZGUKIAotICAgRXhwYXQncyBpbnRlcm5hbCBlcnJvciBudW1iZXIgZm9yIHRoZSBzcGVjaWZpYyBlcnJvci4gIFRoaXMgd2lsbCBtYXRjaCBvbmUgb2YKLSAgIHRoZSBjb25zdGFudHMgZGVmaW5lZCBpbiB0aGUgYGBlcnJvcnNgYCBvYmplY3QgZnJvbSB0aGlzIG1vZHVsZS4KKyAgIEV4cGF0J3MgaW50ZXJuYWwgZXJyb3IgbnVtYmVyIGZvciB0aGUgc3BlY2lmaWMgZXJyb3IuICBUaGUKKyAgIDpkYXRhOmBlcnJvcnMubWVzc2FnZXNgIGRpY3Rpb25hcnkgbWFwcyB0aGVzZSBlcnJvciBudW1iZXJzIHRvIEV4cGF0J3MgZXJyb3IKKyAgIG1lc3NhZ2VzLiAgRm9yIGV4YW1wbGU6OgorCisgICAgICBmcm9tIHhtbC5wYXJzZXJzLmV4cGF0IGltcG9ydCBQYXJzZXJDcmVhdGUsIEV4cGF0RXJyb3IsIGVycm9ycworCisgICAgICBwID0gUGFyc2VyQ3JlYXRlKCkKKyAgICAgIHRyeToKKyAgICAgICAgICBwLlBhcnNlKHNvbWVfeG1sX2RvY3VtZW50KQorICAgICAgZXhjZXB0IEV4cGF0RXJyb3IgYXMgZXJyOgorICAgICAgICAgIHByaW50KCJFcnJvcjoiLCBlcnJvcnMubWVzc2FnZXNbZXJyLmNvZGVdKQorCisgICBUaGUgOm1vZDpgZXJyb3JzYCBtb2R1bGUgYWxzbyBwcm92aWRlcyBlcnJvciBtZXNzYWdlIGNvbnN0YW50cyBhbmQgYQorICAgZGljdGlvbmFyeSA6ZGF0YTpgfmVycm9ycy5jb2Rlc2AgbWFwcGluZyB0aGVzZSBtZXNzYWdlcyBiYWNrIHRvIHRoZSBlcnJvcgorICAgY29kZXMsIHNlZSBiZWxvdy4KIAogCiAuLiBhdHRyaWJ1dGU6OiBFeHBhdEVycm9yLmxpbmVubwpAQCAtNTM4LDE1ICs1NTAsMTYgQEAKIENvbnRlbnQgTW9kZWwgRGVzY3JpcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KKy4uIG1vZHVsZTo6IHhtbC5wYXJzZXJzLmV4cGF0Lm1vZGVsCiAKKy4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCiBDb250ZW50IG1vZHVsZXMgYXJlIGRlc2NyaWJlZCB1c2luZyBuZXN0ZWQgdHVwbGVzLiAgRWFjaCB0dXBsZSBjb250YWlucyBmb3VyCiB2YWx1ZXM6IHRoZSB0eXBlLCB0aGUgcXVhbnRpZmllciwgdGhlIG5hbWUsIGFuZCBhIHR1cGxlIG9mIGNoaWxkcmVuLiAgQ2hpbGRyZW4KIGFyZSBzaW1wbHkgYWRkaXRpb25hbCBjb250ZW50IG1vZHVsZSBkZXNjcmlwdGlvbnMuCiAKLVRoZSB2YWx1ZXMgb2YgdGhlIGZpcnN0IHR3byBmaWVsZHMgYXJlIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoZSBgYG1vZGVsYGAgb2JqZWN0Ci1vZiB0aGUgOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIG1vZHVsZS4gIFRoZXNlIGNvbnN0YW50cyBjYW4gYmUgY29sbGVjdGVkIGluIHR3bworVGhlIHZhbHVlcyBvZiB0aGUgZmlyc3QgdHdvIGZpZWxkcyBhcmUgY29uc3RhbnRzIGRlZmluZWQgaW4gdGhlCis6bW9kOmB4bWwucGFyc2Vycy5leHBhdC5tb2RlbGAgbW9kdWxlLiAgVGhlc2UgY29uc3RhbnRzIGNhbiBiZSBjb2xsZWN0ZWQgaW4gdHdvCiBncm91cHM6IHRoZSBtb2RlbCB0eXBlIGdyb3VwIGFuZCB0aGUgcXVhbnRpZmllciBncm91cC4KIAogVGhlIGNvbnN0YW50cyBpbiB0aGUgbW9kZWwgdHlwZSBncm91cCBhcmU6CkBAIC02MTgsMTQzICs2MzEsMTM5IEBACiBFeHBhdCBlcnJvciBjb25zdGFudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcHJvdmlkZWQgaW4gdGhlIGBgZXJyb3JzYGAgb2JqZWN0IG9mIHRoZQotOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIG1vZHVsZS4gIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZnVsIGluIGludGVycHJldGluZwotc29tZSBvZiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgOmV4YzpgRXhwYXRFcnJvcmAgZXhjZXB0aW9uIG9iamVjdHMgcmFpc2VkIHdoZW4gYW4KLWVycm9yIGhhcyBvY2N1cnJlZC4KKy4uIG1vZHVsZTo6IHhtbC5wYXJzZXJzLmV4cGF0LmVycm9ycwogCi1UaGUgYGBlcnJvcnNgYCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBwcm92aWRlZCBpbiB0aGUgOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXQuZXJyb3JzYAorbW9kdWxlLiAgVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VmdWwgaW4gaW50ZXJwcmV0aW5nIHNvbWUgb2YgdGhlIGF0dHJpYnV0ZXMgb2YKK3RoZSA6ZXhjOmBFeHBhdEVycm9yYCBleGNlcHRpb24gb2JqZWN0cyByYWlzZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuCitTaW5jZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywgdGhlIGNvbnN0YW50cycgdmFsdWUgaXMgdGhlIGVycm9yCisqbWVzc2FnZSogYW5kIG5vdCB0aGUgbnVtZXJpYyBlcnJvciAqY29kZSosIHlvdSBkbyB0aGlzIGJ5IGNvbXBhcmluZyBpdHMKKzphdHRyOmBjb2RlYCBhdHRyaWJ1dGUgd2l0aAorOnNhbXA6YGVycm9ycy5jb2Rlc1tlcnJvcnMuWE1MX0VSUk9SX3tDT05TVEFOVF9OQU1FfV1gLgorCitUaGUgYGBlcnJvcnNgYCBtb2R1bGUgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gZGF0YTo6IGNvZGVzCisKKyAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG51bWVyaWMgZXJyb3IgY29kZXMgdG8gdGhlaXIgc3RyaW5nIGRlc2NyaXB0aW9ucy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZGF0YTo6IG1lc3NhZ2VzCisKKyAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIHN0cmluZyBkZXNjcmlwdGlvbnMgdG8gdGhlaXIgZXJyb3IgY29kZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfQVNZTkNfRU5USVRZCi0gICA6bm9pbmRleDoKIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX0FUVFJJQlVURV9FWFRFUk5BTF9FTlRJVFlfUkVGCi0gICA6bm9pbmRleDoKIAogICAgQW4gZW50aXR5IHJlZmVyZW5jZSBpbiBhbiBhdHRyaWJ1dGUgdmFsdWUgcmVmZXJyZWQgdG8gYW4gZXh0ZXJuYWwgZW50aXR5IGluc3RlYWQKICAgIG9mIGFuIGludGVybmFsIGVudGl0eS4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX0JBRF9DSEFSX1JFRgotICAgOm5vaW5kZXg6CiAKICAgIEEgY2hhcmFjdGVyIHJlZmVyZW5jZSByZWZlcnJlZCB0byBhIGNoYXJhY3RlciB3aGljaCBpcyBpbGxlZ2FsIGluIFhNTCAoZm9yCiAgICBleGFtcGxlLCBjaGFyYWN0ZXIgYGAwYGAsIG9yICdgYCYjMDtgYCcpLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfQklOQVJZX0VOVElUWV9SRUYKLSAgIDpub2luZGV4OgogCiAgICBBbiBlbnRpdHkgcmVmZXJlbmNlIHJlZmVycmVkIHRvIGFuIGVudGl0eSB3aGljaCB3YXMgZGVjbGFyZWQgd2l0aCBhIG5vdGF0aW9uLCBzbwogICAgY2Fubm90IGJlIHBhcnNlZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX0RVUExJQ0FURV9BVFRSSUJVVEUKLSAgIDpub2luZGV4OgogCiAgICBBbiBhdHRyaWJ1dGUgd2FzIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9JTkNPUlJFQ1RfRU5DT0RJTkcKLSAgIDpub2luZGV4OgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfSU5WQUxJRF9UT0tFTgotICAgOm5vaW5kZXg6CiAKICAgIFJhaXNlZCB3aGVuIGFuIGlucHV0IGJ5dGUgY291bGQgbm90IHByb3Blcmx5IGJlIGFzc2lnbmVkIHRvIGEgY2hhcmFjdGVyOyBmb3IKICAgIGV4YW1wbGUsIGEgTlVMIGJ5dGUgKHZhbHVlIGBgMGBgKSBpbiBhIFVURi04IGlucHV0IHN0cmVhbS4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX0pVTktfQUZURVJfRE9DX0VMRU1FTlQKLSAgIDpub2luZGV4OgogCiAgICBTb21ldGhpbmcgb3RoZXIgdGhhbiB3aGl0ZXNwYWNlIG9jY3VycmVkIGFmdGVyIHRoZSBkb2N1bWVudCBlbGVtZW50LgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfTUlTUExBQ0VEX1hNTF9QSQotICAgOm5vaW5kZXg6CiAKICAgIEFuIFhNTCBkZWNsYXJhdGlvbiB3YXMgZm91bmQgc29tZXdoZXJlIG90aGVyIHRoYW4gdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBkYXRhLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfTk9fRUxFTUVOVFMKLSAgIDpub2luZGV4OgogCiAgICBUaGUgZG9jdW1lbnQgY29udGFpbnMgbm8gZWxlbWVudHMgKFhNTCByZXF1aXJlcyBhbGwgZG9jdW1lbnRzIHRvIGNvbnRhaW4gZXhhY3RseQogICAgb25lIHRvcC1sZXZlbCBlbGVtZW50KS4uCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9OT19NRU1PUlkKLSAgIDpub2luZGV4OgogCiAgICBFeHBhdCB3YXMgbm90IGFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGludGVybmFsbHkuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9QQVJBTV9FTlRJVFlfUkVGCi0gICA6bm9pbmRleDoKIAogICAgQSBwYXJhbWV0ZXIgZW50aXR5IHJlZmVyZW5jZSB3YXMgZm91bmQgd2hlcmUgaXQgd2FzIG5vdCBhbGxvd2VkLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfUEFSVElBTF9DSEFSCi0gICA6bm9pbmRleDoKIAogICAgQW4gaW5jb21wbGV0ZSBjaGFyYWN0ZXIgd2FzIGZvdW5kIGluIHRoZSBpbnB1dC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGCi0gICA6bm9pbmRleDoKIAogICAgQW4gZW50aXR5IHJlZmVyZW5jZSBjb250YWluZWQgYW5vdGhlciByZWZlcmVuY2UgdG8gdGhlIHNhbWUgZW50aXR5OyBwb3NzaWJseSB2aWEKICAgIGEgZGlmZmVyZW50IG5hbWUsIGFuZCBwb3NzaWJseSBpbmRpcmVjdGx5LgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfU1lOVEFYCi0gICA6bm9pbmRleDoKIAogICAgU29tZSB1bnNwZWNpZmllZCBzeW50YXggZXJyb3Igd2FzIGVuY291bnRlcmVkLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfVEFHX01JU01BVENICi0gICA6bm9pbmRleDoKIAogICAgQW4gZW5kIHRhZyBkaWQgbm90IG1hdGNoIHRoZSBpbm5lcm1vc3Qgb3BlbiBzdGFydCB0YWcuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9VTkNMT1NFRF9UT0tFTgotICAgOm5vaW5kZXg6CiAKICAgIFNvbWUgdG9rZW4gKHN1Y2ggYXMgYSBzdGFydCB0YWcpIHdhcyBub3QgY2xvc2VkIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzdHJlYW0gb3IKICAgIHRoZSBuZXh0IHRva2VuIHdhcyBlbmNvdW50ZXJlZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFkKLSAgIDpub2luZGV4OgogCiAgICBBIHJlZmVyZW5jZSB3YXMgbWFkZSB0byBhIGVudGl0eSB3aGljaCB3YXMgbm90IGRlZmluZWQuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9VTktOT1dOX0VOQ09ESU5HCi0gICA6bm9pbmRleDoKIAogICAgVGhlIGRvY3VtZW50IGVuY29kaW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgRXhwYXQuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9VTkNMT1NFRF9DREFUQV9TRUNUSU9OCi0gICA6bm9pbmRleDoKIAogICAgQSBDREFUQSBtYXJrZWQgc2VjdGlvbiB3YXMgbm90IGNsb3NlZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORwotICAgOm5vaW5kZXg6CiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9OT1RfU1RBTkRBTE9ORQotICAgOm5vaW5kZXg6CiAKICAgIFRoZSBwYXJzZXIgZGV0ZXJtaW5lZCB0aGF0IHRoZSBkb2N1bWVudCB3YXMgbm90ICJzdGFuZGFsb25lIiB0aG91Z2ggaXQgZGVjbGFyZWQKICAgIGl0c2VsZiB0byBiZSBpbiB0aGUgWE1MIGRlY2xhcmF0aW9uLCBhbmQgdGhlIDphdHRyOmBOb3RTdGFuZGFsb25lSGFuZGxlcmAgd2FzCkBAIC03NjIsMTUgKzc3MSwxMiBAQAogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfVU5FWFBFQ1RFRF9TVEFURQotICAgOm5vaW5kZXg6CiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9FTlRJVFlfREVDTEFSRURfSU5fUEUKLSAgIDpub2luZGV4OgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfRkVBVFVSRV9SRVFVSVJFU19YTUxfRFRECi0gICA6bm9pbmRleDoKIAogICAgQW4gb3BlcmF0aW9uIHdhcyByZXF1ZXN0ZWQgdGhhdCByZXF1aXJlcyBEVEQgc3VwcG9ydCB0byBiZSBjb21waWxlZCBpbiwgYnV0CiAgICBFeHBhdCB3YXMgY29uZmlndXJlZCB3aXRob3V0IERURCBzdXBwb3J0LiAgVGhpcyBzaG91bGQgbmV2ZXIgYmUgcmVwb3J0ZWQgYnkgYQpAQCAtNzc4LDcgKzc4NCw2IEBACiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9DQU5UX0NIQU5HRV9GRUFUVVJFX09OQ0VfUEFSU0lORwotICAgOm5vaW5kZXg6CiAKICAgIEEgYmVoYXZpb3JhbCBjaGFuZ2Ugd2FzIHJlcXVlc3RlZCBhZnRlciBwYXJzaW5nIHN0YXJ0ZWQgdGhhdCBjYW4gb25seSBiZSBjaGFuZ2VkCiAgICBiZWZvcmUgcGFyc2luZyBoYXMgc3RhcnRlZC4gIFRoaXMgaXMgKGN1cnJlbnRseSkgb25seSByYWlzZWQgYnkKQEAgLTc4Niw2MyArNzkxLDUzIEBACiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9VTkJPVU5EX1BSRUZJWAotICAgOm5vaW5kZXg6CiAKICAgIEFuIHVuZGVjbGFyZWQgcHJlZml4IHdhcyBmb3VuZCB3aGVuIG5hbWVzcGFjZSBwcm9jZXNzaW5nIHdhcyBlbmFibGVkLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfVU5ERUNMQVJJTkdfUFJFRklYCi0gICA6bm9pbmRleDoKIAogICAgVGhlIGRvY3VtZW50IGF0dGVtcHRlZCB0byByZW1vdmUgdGhlIG5hbWVzcGFjZSBkZWNsYXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggYQogICAgcHJlZml4LgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfSU5DT01QTEVURV9QRQotICAgOm5vaW5kZXg6CiAKICAgIEEgcGFyYW1ldGVyIGVudGl0eSBjb250YWluZWQgaW5jb21wbGV0ZSBtYXJrdXAuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9YTUxfREVDTAotICAgOm5vaW5kZXg6CiAKICAgIFRoZSBkb2N1bWVudCBjb250YWluZWQgbm8gZG9jdW1lbnQgZWxlbWVudCBhdCBhbGwuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9URVhUX0RFQ0wKLSAgIDpub2luZGV4OgogCiAgICBUaGVyZSB3YXMgYW4gZXJyb3IgcGFyc2luZyBhIHRleHQgZGVjbGFyYXRpb24gaW4gYW4gZXh0ZXJuYWwgZW50aXR5LgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfUFVCTElDSUQKLSAgIDpub2luZGV4OgogCiAgICBDaGFyYWN0ZXJzIHdlcmUgZm91bmQgaW4gdGhlIHB1YmxpYyBpZCB0aGF0IGFyZSBub3QgYWxsb3dlZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1NVU1BFTkRFRAotICAgOm5vaW5kZXg6CiAKICAgIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIHdhcyBtYWRlIG9uIGEgc3VzcGVuZGVkIHBhcnNlciwgYnV0IGlzbid0IGFsbG93ZWQuICBUaGlzCiAgICBpbmNsdWRlcyBhdHRlbXB0cyB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5wdXQgb3IgdG8gc3RvcCB0aGUgcGFyc2VyLgogCiAKIC4uIGRhdGE6OiBYTUxfRVJST1JfTk9UX1NVU1BFTkRFRAotICAgOm5vaW5kZXg6CiAKICAgIEFuIGF0dGVtcHQgdG8gcmVzdW1lIHRoZSBwYXJzZXIgd2FzIG1hZGUgd2hlbiB0aGUgcGFyc2VyIGhhZCBub3QgYmVlbiBzdXNwZW5kZWQuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9BQk9SVEVECi0gICA6bm9pbmRleDoKIAogICAgVGhpcyBzaG91bGQgbm90IGJlIHJlcG9ydGVkIHRvIFB5dGhvbiBhcHBsaWNhdGlvbnMuCiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9GSU5JU0hFRAotICAgOm5vaW5kZXg6CiAKICAgIFRoZSByZXF1ZXN0ZWQgb3BlcmF0aW9uIHdhcyBtYWRlIG9uIGEgcGFyc2VyIHdoaWNoIHdhcyBmaW5pc2hlZCBwYXJzaW5nIGlucHV0LAogICAgYnV0IGlzbid0IGFsbG93ZWQuICBUaGlzIGluY2x1ZGVzIGF0dGVtcHRzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBpbnB1dCBvciB0bwpAQCAtODUwLDcgKzg0NSw2IEBACiAKIAogLi4gZGF0YTo6IFhNTF9FUlJPUl9TVVNQRU5EX1BFCi0gICA6bm9pbmRleDoKIAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CmluZGV4IDdkNGQ4MjcuLmI2N2ZiZmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogLi4gX3B5dGhvbjoKIAogKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEzLDYgKzEyLDcgQEAKIC4uIHRvY3RyZWU6OgogCiAgICBzeXMucnN0CisgICBzeXNjb25maWcucnN0CiAgICBidWlsdGlucy5yc3QKICAgIF9fbWFpbl9fLnJzdAogICAgd2FybmluZ3MucnN0CkBAIC0yNSwzICsyNSw0IEBACiAgICBpbnNwZWN0LnJzdAogICAgc2l0ZS5yc3QKICAgIGZwZWN0bC5yc3QKKyAgIGRpc3R1dGlscy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3F1ZXVlLnJzdCBiL0RvYy9saWJyYXJ5L3F1ZXVlLnJzdAppbmRleCBlMTZkNmU5Li4yNjMzNmVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9xdWV1ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcXVldWUucnN0CkBAIC0xLDEwICsxLDEyIEBACi0KIDptb2Q6YHF1ZXVlYCAtLS0gQSBzeW5jaHJvbml6ZWQgcXVldWUgY2xhc3MKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogcXVldWUKICAgIDpzeW5vcHNpczogQSBzeW5jaHJvbml6ZWQgcXVldWUgY2xhc3MuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3F1ZXVlLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgcXVldWVgIG1vZHVsZSBpbXBsZW1lbnRzIG11bHRpLXByb2R1Y2VyLCBtdWx0aS1jb25zdW1lciBxdWV1ZXMuCiBJdCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiB0aHJlYWRlZCBwcm9ncmFtbWluZyB3aGVuIGluZm9ybWF0aW9uIG11c3QgYmUKQEAgLTIwLDE3ICsyMiwxNyBAQAogdGhlIGVudHJpZXMgYXJlIGtlcHQgc29ydGVkICh1c2luZyB0aGUgOm1vZDpgaGVhcHFgIG1vZHVsZSkgYW5kIHRoZQogbG93ZXN0IHZhbHVlZCBlbnRyeSBpcyByZXRyaWV2ZWQgZmlyc3QuCiAKKwogVGhlIDptb2Q6YHF1ZXVlYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzZXMgYW5kIGV4Y2VwdGlvbnM6CiAKLS4uIGNsYXNzOjogUXVldWUobWF4c2l6ZSkKKy4uIGNsYXNzOjogUXVldWUobWF4c2l6ZT0wKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYSBGSUZPIHF1ZXVlLiAgKm1heHNpemUqIGlzIGFuIGludGVnZXIgdGhhdCBzZXRzIHRoZSB1cHBlcmJvdW5kCiAgICBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHBsYWNlZCBpbiB0aGUgcXVldWUuICBJbnNlcnRpb24gd2lsbAogICAgYmxvY2sgb25jZSB0aGlzIHNpemUgaGFzIGJlZW4gcmVhY2hlZCwgdW50aWwgcXVldWUgaXRlbXMgYXJlIGNvbnN1bWVkLiAgSWYKICAgICptYXhzaXplKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhlIHF1ZXVlIHNpemUgaXMgaW5maW5pdGUuCiAKLQotLi4gY2xhc3M6OiBMaWZvUXVldWUobWF4c2l6ZSkKKy4uIGNsYXNzOjogTGlmb1F1ZXVlKG1heHNpemU9MCkKIAogICAgQ29uc3RydWN0b3IgZm9yIGEgTElGTyBxdWV1ZS4gICptYXhzaXplKiBpcyBhbiBpbnRlZ2VyIHRoYXQgc2V0cyB0aGUgdXBwZXJib3VuZAogICAgbGltaXQgb24gdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBwbGFjZWQgaW4gdGhlIHF1ZXVlLiAgSW5zZXJ0aW9uIHdpbGwKQEAgLTM4LDcgKzQwLDcgQEAKICAgICptYXhzaXplKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhlIHF1ZXVlIHNpemUgaXMgaW5maW5pdGUuCiAKIAotLi4gY2xhc3M6OiBQcmlvcml0eVF1ZXVlKG1heHNpemUpCisuLiBjbGFzczo6IFByaW9yaXR5UXVldWUobWF4c2l6ZT0wKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYSBwcmlvcml0eSBxdWV1ZS4gICptYXhzaXplKiBpcyBhbiBpbnRlZ2VyIHRoYXQgc2V0cyB0aGUgdXBwZXJib3VuZAogICAgbGltaXQgb24gdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBwbGFjZWQgaW4gdGhlIHF1ZXVlLiAgSW5zZXJ0aW9uIHdpbGwKQEAgLTYxLDEyICs2Myw2IEBACiAgICBFeGNlcHRpb24gcmFpc2VkIHdoZW4gbm9uLWJsb2NraW5nIDptZXRoOmBwdXRgIChvciA6bWV0aDpgcHV0X25vd2FpdGApIGlzIGNhbGxlZAogICAgb24gYSA6Y2xhc3M6YFF1ZXVlYCBvYmplY3Qgd2hpY2ggaXMgZnVsbC4KIAotLi4gc2VlYWxzbzo6Ci0KLSAgIDpjbGFzczpgY29sbGVjdGlvbnMuZGVxdWVgIGlzIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIHVuYm91bmRlZAotICAgcXVldWVzIHdpdGggZmFzdCBhdG9taWMgOmZ1bmM6YGFwcGVuZGAgYW5kIDpmdW5jOmBwb3BsZWZ0YCBvcGVyYXRpb25zIHRoYXQKLSAgIGRvIG5vdCByZXF1aXJlIGxvY2tpbmcuCi0KIAogLi4gX3F1ZXVlb2JqZWN0czoKIApAQCAtMTAwLDcgKzk2LDcgQEAKICAgIGd1YXJhbnRlZSB0aGF0IGEgc3Vic2VxdWVudCBjYWxsIHRvIHB1dCgpIHdpbGwgbm90IGJsb2NrLgogCiAKLS4uIG1ldGhvZDo6IFF1ZXVlLnB1dChpdGVtWywgYmxvY2tbLCB0aW1lb3V0XV0pCisuLiBtZXRob2Q6OiBRdWV1ZS5wdXQoaXRlbSwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKQogCiAgICBQdXQgKml0ZW0qIGludG8gdGhlIHF1ZXVlLiBJZiBvcHRpb25hbCBhcmdzICpibG9jayogaXMgdHJ1ZSBhbmQgKnRpbWVvdXQqIGlzCiAgICBOb25lICh0aGUgZGVmYXVsdCksIGJsb2NrIGlmIG5lY2Vzc2FyeSB1bnRpbCBhIGZyZWUgc2xvdCBpcyBhdmFpbGFibGUuIElmCkBAIC0xMTYsNyArMTEyLDcgQEAKICAgIEVxdWl2YWxlbnQgdG8gYGBwdXQoaXRlbSwgRmFsc2UpYGAuCiAKIAotLi4gbWV0aG9kOjogUXVldWUuZ2V0KFtibG9ja1ssIHRpbWVvdXRdXSkKKy4uIG1ldGhvZDo6IFF1ZXVlLmdldChibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpCiAKICAgIFJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuIElmIG9wdGlvbmFsIGFyZ3MgKmJsb2NrKiBpcyB0cnVlIGFuZAogICAgKnRpbWVvdXQqIGlzIE5vbmUgKHRoZSBkZWZhdWx0KSwgYmxvY2sgaWYgbmVjZXNzYXJ5IHVudGlsIGFuIGl0ZW0gaXMgYXZhaWxhYmxlLgpAQCAtMTc3LDMgKzE3MywxNCBAQAogCiAgICBxLmpvaW4oKSAgICAgICAjIGJsb2NrIHVudGlsIGFsbCB0YXNrcyBhcmUgZG9uZQogCisKKy4uIHNlZWFsc286OgorCisgICBDbGFzcyA6Y2xhc3M6YG11bHRpcHJvY2Vzc2luZy5RdWV1ZWAKKyAgICAgIEEgcXVldWUgY2xhc3MgZm9yIHVzZSBpbiBhIG11bHRpLXByb2Nlc3NpbmcgKHJhdGhlciB0aGFuIG11bHRpLXRocmVhZGluZykKKyAgICAgIGNvbnRleHQuCisKKyAgIDpjbGFzczpgY29sbGVjdGlvbnMuZGVxdWVgIGlzIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIG9mIHVuYm91bmRlZAorICAgcXVldWVzIHdpdGggZmFzdCBhdG9taWMgOmZ1bmM6YGFwcGVuZGAgYW5kIDpmdW5jOmBwb3BsZWZ0YCBvcGVyYXRpb25zIHRoYXQKKyAgIGRvIG5vdCByZXF1aXJlIGxvY2tpbmcuCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QgYi9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CmluZGV4IGE2NDMzN2UuLjc1NTgxMWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcXVvcHJpYCAtLS0gRW5jb2RlIGFuZCBkZWNvZGUgTUlNRSBxdW90ZWQtcHJpbnRhYmxlIGRhdGEKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEwLDYgKzksMTAgQEAKICAgIHBhaXI6IHF1b3RlZC1wcmludGFibGU7IGVuY29kaW5nCiAgICBzaW5nbGU6IE1JTUU7IHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcXVvcHJpLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGlzIG1vZHVsZSBwZXJmb3JtcyBxdW90ZWQtcHJpbnRhYmxlIHRyYW5zcG9ydCBlbmNvZGluZyBhbmQgZGVjb2RpbmcsIGFzCiBkZWZpbmVkIGluIDpyZmM6YDE1MjFgOiAiTUlNRSAoTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucykgUGFydCBPbmU6CiBNZWNoYW5pc21zIGZvciBTcGVjaWZ5aW5nIGFuZCBEZXNjcmliaW5nIHRoZSBGb3JtYXQgb2YgSW50ZXJuZXQgTWVzc2FnZSBCb2RpZXMiLgpAQCAtMTgsOCArMjEsNyBAQAogOm1vZDpgYmFzZTY0YCBtb2R1bGUgaXMgbW9yZSBjb21wYWN0IGlmIHRoZXJlIGFyZSBtYW55IHN1Y2ggY2hhcmFjdGVycywgYXMgd2hlbgogc2VuZGluZyBhIGdyYXBoaWNzIGZpbGUuCiAKLQotLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dFssaGVhZGVyXSkKKy4uIGZ1bmN0aW9uOjogZGVjb2RlKGlucHV0LCBvdXRwdXQsIGhlYWRlcj1GYWxzZSkKIAogICAgRGVjb2RlIHRoZSBjb250ZW50cyBvZiB0aGUgKmlucHV0KiBmaWxlIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIGRlY29kZWQgYmluYXJ5CiAgICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKQEAgLTMwLDcgKzMyLDcgQEAKICAgIFBhcnQgVHdvOiBNZXNzYWdlIEhlYWRlciBFeHRlbnNpb25zIGZvciBOb24tQVNDSUkgVGV4dCIuCiAKIAotLi4gZnVuY3Rpb246OiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzKQorLi4gZnVuY3Rpb246OiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzLCBoZWFkZXI9RmFsc2UpCiAKICAgIEVuY29kZSB0aGUgY29udGVudHMgb2YgdGhlICppbnB1dCogZmlsZSBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZyBxdW90ZWQtcHJpbnRhYmxlCiAgICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKQEAgLTM4LDI0ICs0MCwyNCBAQAogICAgZW1wdHkgc3RyaW5nLiAqcXVvdGV0YWJzKiBpcyBhIGZsYWcgd2hpY2ggY29udHJvbHMgd2hldGhlciB0byBlbmNvZGUgZW1iZWRkZWQKICAgIHNwYWNlcyBhbmQgdGFiczsgd2hlbiB0cnVlIGl0IGVuY29kZXMgc3VjaCBlbWJlZGRlZCB3aGl0ZXNwYWNlLCBhbmQgd2hlbgogICAgZmFsc2UgaXQgbGVhdmVzIHRoZW0gdW5lbmNvZGVkLiAgTm90ZSB0aGF0IHNwYWNlcyBhbmQgdGFicyBhcHBlYXJpbmcgYXQgdGhlCi0gICBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgOnJmYzpgMTUyMWAuCisgICBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgOnJmYzpgMTUyMWAuICAqaGVhZGVyKiBpcyBhIGZsYWcKKyAgIHdoaWNoIGNvbnRyb2xzIGlmIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyB1bmRlcnNjb3JlcyBhcyBwZXIgOnJmYzpgMTUyMmAuCiAKIAotLi4gZnVuY3Rpb246OiBkZWNvZGVzdHJpbmcoc1ssaGVhZGVyXSkKKy4uIGZ1bmN0aW9uOjogZGVjb2Rlc3RyaW5nKHMsIGhlYWRlcj1GYWxzZSkKIAogICAgTGlrZSA6ZnVuYzpgZGVjb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlCiAgICBjb3JyZXNwb25kaW5nIGRlY29kZWQgc3RyaW5nLgogCiAKLS4uIGZ1bmN0aW9uOjogZW5jb2Rlc3RyaW5nKHNbLCBxdW90ZXRhYnNdKQorLi4gZnVuY3Rpb246OiBlbmNvZGVzdHJpbmcocywgcXVvdGV0YWJzPUZhbHNlLCBoZWFkZXI9RmFsc2UpCiAKICAgIExpa2UgOmZ1bmM6YGVuY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2Ugc3RyaW5nIGFuZCByZXR1cm5zIHRoZQotICAgY29ycmVzcG9uZGluZyBlbmNvZGVkIHN0cmluZy4gICpxdW90ZXRhYnMqIGlzIG9wdGlvbmFsIChkZWZhdWx0aW5nIHRvIDApLCBhbmQgaXMKLSAgIHBhc3NlZCBzdHJhaWdodCB0aHJvdWdoIHRvIDpmdW5jOmBlbmNvZGVgLgorICAgY29ycmVzcG9uZGluZyBlbmNvZGVkIHN0cmluZy4gICpxdW90ZXRhYnMqIGFuZCAqaGVhZGVyKiBhcmUgb3B0aW9uYWwKKyAgIChkZWZhdWx0aW5nIHRvIGBgRmFsc2VgYCksIGFuZCBhcmUgcGFzc2VkIHN0cmFpZ2h0IHRocm91Z2ggdG8gOmZ1bmM6YGVuY29kZWAuCiAKIAogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBiYXNlNjRgCiAgICAgICBFbmNvZGUgYW5kIGRlY29kZSBNSU1FIGJhc2U2NCBkYXRhCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JhbmRvbS5yc3QgYi9Eb2MvbGlicmFyeS9yYW5kb20ucnN0CmluZGV4IDI5NzZmNWUuLmYwYzRhZGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JhbmRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmFuZG9tLnJzdApAQCAtMSwxNyArMSwyMCBAQAotCiA6bW9kOmByYW5kb21gIC0tLSBHZW5lcmF0ZSBwc2V1ZG8tcmFuZG9tIG51bWJlcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAuLiBtb2R1bGU6OiByYW5kb20KICAgIDpzeW5vcHNpczogR2VuZXJhdGUgcHNldWRvLXJhbmRvbSBudW1iZXJzIHdpdGggdmFyaW91cyBjb21tb24gZGlzdHJpYnV0aW9ucy4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcmFuZG9tLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgZm9yIHZhcmlvdXMKIGRpc3RyaWJ1dGlvbnMuCiAKLUZvciBpbnRlZ2VycywgdW5pZm9ybSBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlLiBGb3Igc2VxdWVuY2VzLCB1bmlmb3JtIHNlbGVjdGlvbgotb2YgYSByYW5kb20gZWxlbWVudCwgYSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSBwZXJtdXRhdGlvbiBvZiBhIGxpc3QKLWluLXBsYWNlLCBhbmQgYSBmdW5jdGlvbiBmb3IgcmFuZG9tIHNhbXBsaW5nIHdpdGhvdXQgcmVwbGFjZW1lbnQuCitGb3IgaW50ZWdlcnMsIHRoZXJlIGlzIHVuaWZvcm0gc2VsZWN0aW9uIGZyb20gYSByYW5nZS4gRm9yIHNlcXVlbmNlcywgdGhlcmUgaXMKK3VuaWZvcm0gc2VsZWN0aW9uIG9mIGEgcmFuZG9tIGVsZW1lbnQsIGEgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSByYW5kb20KK3Blcm11dGF0aW9uIG9mIGEgbGlzdCBpbi1wbGFjZSwgYW5kIGEgZnVuY3Rpb24gZm9yIHJhbmRvbSBzYW1wbGluZyB3aXRob3V0CityZXBsYWNlbWVudC4KIAogT24gdGhlIHJlYWwgbGluZSwgdGhlcmUgYXJlIGZ1bmN0aW9ucyB0byBjb21wdXRlIHVuaWZvcm0sIG5vcm1hbCAoR2F1c3NpYW4pLAogbG9nbm9ybWFsLCBuZWdhdGl2ZSBleHBvbmVudGlhbCwgZ2FtbWEsIGFuZCBiZXRhIGRpc3RyaWJ1dGlvbnMuIEZvciBnZW5lcmF0aW5nCkBAIC0zNiwyMiArMzksMzAgQEAKIE9wdGlvbmFsbHksIGEgbmV3IGdlbmVyYXRvciBjYW4gc3VwcGx5IGEgOm1ldGg6YGdldHJhbmRiaXRzYCBtZXRob2QgLS0tIHRoaXMKIGFsbG93cyA6bWV0aDpgcmFuZHJhbmdlYCB0byBwcm9kdWNlIHNlbGVjdGlvbnMgb3ZlciBhbiBhcmJpdHJhcmlseSBsYXJnZSByYW5nZS4KIAorVGhlIDptb2Q6YHJhbmRvbWAgbW9kdWxlIGFsc28gcHJvdmlkZXMgdGhlIDpjbGFzczpgU3lzdGVtUmFuZG9tYCBjbGFzcyB3aGljaAordXNlcyB0aGUgc3lzdGVtIGZ1bmN0aW9uIDpmdW5jOmBvcy51cmFuZG9tYCB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVycworZnJvbSBzb3VyY2VzIHByb3ZpZGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgorCiAKIEJvb2trZWVwaW5nIGZ1bmN0aW9uczoKIAorLi4gZnVuY3Rpb246OiBzZWVkKFt4XSwgdmVyc2lvbj0yKQogCi0uLiBmdW5jdGlvbjo6IHNlZWQoW3hdKQorICAgSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCiAKLSAgIEluaXRpYWxpemUgdGhlIGJhc2ljIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiBPcHRpb25hbCBhcmd1bWVudCAqeCogY2FuIGJlIGFueQotICAgOnRlcm06YGhhc2hhYmxlYCBvYmplY3QuIElmICp4KiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCBjdXJyZW50IHN5c3RlbSB0aW1lIGlzIHVzZWQ7Ci0gICBjdXJyZW50IHN5c3RlbSB0aW1lIGlzIGFsc28gdXNlZCB0byBpbml0aWFsaXplIHRoZSBnZW5lcmF0b3Igd2hlbiB0aGUgbW9kdWxlIGlzCi0gICBmaXJzdCBpbXBvcnRlZC4gIElmIHJhbmRvbW5lc3Mgc291cmNlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sCi0gICB0aGV5IGFyZSB1c2VkIGluc3RlYWQgb2YgdGhlIHN5c3RlbSB0aW1lIChzZWUgdGhlIDpmdW5jOmBvcy51cmFuZG9tYCBmdW5jdGlvbgotICAgZm9yIGRldGFpbHMgb24gYXZhaWxhYmlsaXR5KS4KKyAgIElmICp4KiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgY3VycmVudCBzeXN0ZW0gdGltZSBpcyB1c2VkLiAgSWYKKyAgIHJhbmRvbW5lc3Mgc291cmNlcyBhcmUgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIHRoZXkgYXJlIHVzZWQKKyAgIGluc3RlYWQgb2YgdGhlIHN5c3RlbSB0aW1lIChzZWUgdGhlIDpmdW5jOmBvcy51cmFuZG9tYCBmdW5jdGlvbiBmb3IgZGV0YWlscworICAgb24gYXZhaWxhYmlsaXR5KS4KIAotICAgSWYgKngqIGlzIG5vdCBgYE5vbmVgYCBvciBhbiBpbnQsIGBgaGFzaCh4KWBgIGlzIHVzZWQgaW5zdGVhZC4gSWYgKngqIGlzIGFuCi0gICBpbnQsICp4KiBpcyB1c2VkIGRpcmVjdGx5LgorICAgSWYgKngqIGlzIGFuIGludCwgaXQgaXMgdXNlZCBkaXJlY3RseS4KIAorICAgV2l0aCB2ZXJzaW9uIDIgKHRoZSBkZWZhdWx0KSwgYSA6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgLCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAKKyAgIG9iamVjdCBnZXRzIGNvbnZlcnRlZCB0byBhbiA6Y2xhc3M6YGludGAgYW5kIGFsbCBvZiBpdHMgYml0cyBhcmUgdXNlZC4gIFdpdGggdmVyc2lvbiAxLAorICAgdGhlIDpmdW5jOmBoYXNoYCBvZiAqeCogaXMgdXNlZCBpbnN0ZWFkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgTW92ZWQgdG8gdGhlIHZlcnNpb24gMiBzY2hlbWUgd2hpY2ggdXNlcyBhbGwgb2YgdGhlIGJpdHMgaW4gYSBzdHJpbmcgc2VlZC4KIAogLi4gZnVuY3Rpb246OiBnZXRzdGF0ZSgpCiAKQEAgLTgyLDYgKzkzLDEzIEBACiAgICBlcXVpdmFsZW50IHRvIGBgY2hvaWNlKHJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKSlgYCwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgYnVpbGQgYQogICAgcmFuZ2Ugb2JqZWN0LgogCisgICBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBwYXR0ZXJuIG1hdGNoZXMgdGhhdCBvZiA6ZnVuYzpgcmFuZ2VgLiAgS2V5d29yZCBhcmd1bWVudHMKKyAgIHNob3VsZCBub3QgYmUgdXNlZCBiZWNhdXNlIHRoZSBmdW5jdGlvbiBtYXkgdXNlIHRoZW0gaW4gdW5leHBlY3RlZCB3YXlzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgOm1ldGg6YHJhbmRyYW5nZWAgaXMgbW9yZSBzb3BoaXN0aWNhdGVkIGFib3V0IHByb2R1Y2luZyBlcXVhbGx5IGRpc3RyaWJ1dGVkCisgICAgICB2YWx1ZXMuICBGb3JtZXJseSBpdCB1c2VkIGEgc3R5bGUgbGlrZSBgYGludChyYW5kb20oKSpuKWBgIHdoaWNoIGNvdWxkIHByb2R1Y2UKKyAgICAgIHNsaWdodGx5IHVuZXZlbiBkaXN0cmlidXRpb25zLgogCiAuLiBmdW5jdGlvbjo6IHJhbmRpbnQoYSwgYikKIApAQCAtMjEzLDQxICsyMzEsMTggQEAKICAgIHBhcmFtZXRlci4KIAogCi1BbHRlcm5hdGl2ZSBHZW5lcmF0b3JzOgorQWx0ZXJuYXRpdmUgR2VuZXJhdG9yOgogCiAuLiBjbGFzczo6IFN5c3RlbVJhbmRvbShbc2VlZF0pCiAKICAgIENsYXNzIHRoYXQgdXNlcyB0aGUgOmZ1bmM6YG9zLnVyYW5kb21gIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIHJhbmRvbSBudW1iZXJzCiAgICBmcm9tIHNvdXJjZXMgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIE5vdCBhdmFpbGFibGUgb24gYWxsIHN5c3RlbXMuCi0gICBEb2VzIG5vdCByZWx5IG9uIHNvZnR3YXJlIHN0YXRlIGFuZCBzZXF1ZW5jZXMgYXJlIG5vdCByZXByb2R1Y2libGUuIEFjY29yZGluZ2x5LAorICAgRG9lcyBub3QgcmVseSBvbiBzb2Z0d2FyZSBzdGF0ZSwgYW5kIHNlcXVlbmNlcyBhcmUgbm90IHJlcHJvZHVjaWJsZS4gQWNjb3JkaW5nbHksCiAgICB0aGUgOm1ldGg6YHNlZWRgIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGFuZCBpcyBpZ25vcmVkLgogICAgVGhlIDptZXRoOmBnZXRzdGF0ZWAgYW5kIDptZXRoOmBzZXRzdGF0ZWAgbWV0aG9kcyByYWlzZQogICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaWYgY2FsbGVkLgogCiAKLUV4YW1wbGVzIG9mIGJhc2ljIHVzYWdlOjoKLQotICAgPj4+IHJhbmRvbS5yYW5kb20oKSAgICAgICAgIyBSYW5kb20gZmxvYXQgeCwgMC4wIDw9IHggPCAxLjAKLSAgIDAuMzc0NDQ4ODcxNzU2NDY2NDYKLSAgID4+PiByYW5kb20udW5pZm9ybSgxLCAxMCkgICMgUmFuZG9tIGZsb2F0IHgsIDEuMCA8PSB4IDwgMTAuMAotICAgMS4xODAwMTQ2MDczMTE3NTIzCi0gICA+Pj4gcmFuZG9tLnJhbmRpbnQoMSwgMTApICAjIEludGVnZXIgZnJvbSAxIHRvIDEwLCBlbmRwb2ludHMgaW5jbHVkZWQKLSAgIDcKLSAgID4+PiByYW5kb20ucmFuZHJhbmdlKDAsIDEwMSwgMikgICMgRXZlbiBpbnRlZ2VyIGZyb20gMCB0byAxMDAKLSAgIDI2Ci0gICA+Pj4gcmFuZG9tLmNob2ljZSgnYWJjZGVmZ2hpaicpICAjIENob29zZSBhIHJhbmRvbSBlbGVtZW50Ci0gICAnYycKLQotICAgPj4+IGl0ZW1zID0gWzEsIDIsIDMsIDQsIDUsIDYsIDddCi0gICA+Pj4gcmFuZG9tLnNodWZmbGUoaXRlbXMpCi0gICA+Pj4gaXRlbXMKLSAgIFs3LCAzLCAyLCA1LCA2LCA0LCAxXQotCi0gICA+Pj4gcmFuZG9tLnNhbXBsZShbMSwgMiwgMywgNCwgNV0sICAzKSAgIyBDaG9vc2UgMyBlbGVtZW50cwotICAgWzQsIDEsIDVdCi0KLQotCiAuLiBzZWVhbHNvOjoKIAogICAgTS4gTWF0c3Vtb3RvIGFuZCBULiBOaXNoaW11cmEsICJNZXJzZW5uZSBUd2lzdGVyOiBBIDYyMy1kaW1lbnNpb25hbGx5CkBAIC0yNTksMyArMjU0LDcwIEBACiAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTc2NzA3Lz5gXyBmb3IgYSBjb21wYXRpYmxlIGFsdGVybmF0aXZlCiAgICByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGEgbG9uZyBwZXJpb2QgYW5kIGNvbXBhcmF0aXZlbHkgc2ltcGxlIHVwZGF0ZQogICAgb3BlcmF0aW9ucy4KKworCitOb3RlcyBvbiBSZXByb2R1Y2liaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gcmVwcm9kdWNlIHRoZSBzZXF1ZW5jZXMgZ2l2ZW4gYnkgYSBwc2V1ZG8KK3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLiAgQnkgcmUtdXNpbmcgYSBzZWVkIHZhbHVlLCB0aGUgc2FtZSBzZXF1ZW5jZSBzaG91bGQgYmUKK3JlcHJvZHVjaWJsZSBmcm9tIHJ1biB0byBydW4gYXMgbG9uZyBhcyBtdWx0aXBsZSB0aHJlYWRzIGFyZSBub3QgcnVubmluZy4KKworTW9zdCBvZiB0aGUgcmFuZG9tIG1vZHVsZSdzIGFsZ29yaXRobXMgYW5kIHNlZWRpbmcgZnVuY3Rpb25zIGFyZSBzdWJqZWN0IHRvCitjaGFuZ2UgYWNyb3NzIFB5dGhvbiB2ZXJzaW9ucywgYnV0IHR3byBhc3BlY3RzIGFyZSBndWFyYW50ZWVkIG5vdCB0byBjaGFuZ2U6CisKKyogSWYgYSBuZXcgc2VlZGluZyBtZXRob2QgaXMgYWRkZWQsIHRoZW4gYSBiYWNrd2FyZCBjb21wYXRpYmxlIHNlZWRlciB3aWxsIGJlCisgIG9mZmVyZWQuCisKKyogVGhlIGdlbmVyYXRvcidzIDptZXRoOmByYW5kb21gIG1ldGhvZCB3aWxsIGNvbnRpbnVlIHRvIHByb2R1Y2UgdGhlIHNhbWUKKyAgc2VxdWVuY2Ugd2hlbiB0aGUgY29tcGF0aWJsZSBzZWVkZXIgaXMgZ2l2ZW4gdGhlIHNhbWUgc2VlZC4KKworLi4gX3JhbmRvbS1leGFtcGxlczoKKworRXhhbXBsZXMgYW5kIFJlY2lwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jhc2ljIHVzYWdlOjoKKworICAgPj4+IHJhbmRvbS5yYW5kb20oKSAgICAgICAgICAgICAgICAgICAgICAjIFJhbmRvbSBmbG9hdCB4LCAwLjAgPD0geCA8IDEuMAorICAgMC4zNzQ0NDg4NzE3NTY0NjY0NgorCisgICA+Pj4gcmFuZG9tLnVuaWZvcm0oMSwgMTApICAgICAgICAgICAgICAgICMgUmFuZG9tIGZsb2F0IHgsIDEuMCA8PSB4IDwgMTAuMAorICAgMS4xODAwMTQ2MDczMTE3NTIzCisKKyAgID4+PiByYW5kb20ucmFuZHJhbmdlKDEwKSAgICAgICAgICAgICAgICAgIyBJbnRlZ2VyIGZyb20gMCB0byA5CisgICA3CisKKyAgID4+PiByYW5kb20ucmFuZHJhbmdlKDAsIDEwMSwgMikgICAgICAgICAgIyBFdmVuIGludGVnZXIgZnJvbSAwIHRvIDEwMAorICAgMjYKKworICAgPj4+IHJhbmRvbS5jaG9pY2UoJ2FiY2RlZmdoaWonKSAgICAgICAgICAjIFNpbmdsZSByYW5kb20gZWxlbWVudAorICAgJ2MnCisKKyAgID4+PiBpdGVtcyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3XQorICAgPj4+IHJhbmRvbS5zaHVmZmxlKGl0ZW1zKQorICAgPj4+IGl0ZW1zCisgICBbNywgMywgMiwgNSwgNiwgNCwgMV0KKworICAgPj4+IHJhbmRvbS5zYW1wbGUoWzEsIDIsIDMsIDQsIDVdLCAgMykgICAjIFRocmVlIHNhbXBsZXMgd2l0aG91dCByZXBsYWNlbWVudAorICAgWzQsIDEsIDVdCisKK0EgY29tbW9uIHRhc2sgaXMgdG8gbWFrZSBhIDpmdW5jOmByYW5kb20uY2hvaWNlYCB3aXRoIHdlaWdodGVkIHByb2JhYmFiaWxpdGVzLgorCitJZiB0aGUgd2VpZ2h0cyBhcmUgc21hbGwgaW50ZWdlciByYXRpb3MsIGEgc2ltcGxlIHRlY2huaXF1ZSBpcyB0byBidWlsZCBhIHNhbXBsZQorcG9wdWxhdGlvbiB3aXRoIHJlcGVhdHM6OgorCisgICAgPj4+IHdlaWdodGVkX2Nob2ljZXMgPSBbKCdSZWQnLCAzKSwgKCdCbHVlJywgMiksICgnWWVsbG93JywgMSksICgnR3JlZW4nLCA0KV0KKyAgICA+Pj4gcG9wdWxhdGlvbiA9IFt2YWwgZm9yIHZhbCwgY250IGluIHdlaWdodGVkX2Nob2ljZXMgZm9yIGkgaW4gcmFuZ2UoY250KV0KKyAgICA+Pj4gcmFuZG9tLmNob2ljZShwb3B1bGF0aW9uKQorICAgICdHcmVlbicKKworQSBtb3JlIGdlbmVyYWwgYXBwcm9hY2ggaXMgdG8gYXJyYW5nZSB0aGUgd2VpZ2h0cyBpbiBhIGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9uCit3aXRoIDpmdW5jOmBpdGVydG9vbHMuYWNjdW11bGF0ZWAsIGFuZCB0aGVuIGxvY2F0ZSB0aGUgcmFuZG9tIHZhbHVlIHdpdGgKKzpmdW5jOmBiaXNlY3QuYmlzZWN0YDo6CisKKyAgICA+Pj4gY2hvaWNlcywgd2VpZ2h0cyA9IHppcCgqd2VpZ2h0ZWRfY2hvaWNlcykKKyAgICA+Pj4gY3VtZGlzdCA9IGxpc3QoaXRlcnRvb2xzLmFjY3VtdWxhdGUod2VpZ2h0cykpCisgICAgPj4+IHggPSByYW5kb20ucmFuZG9tKCkgKiBjdW1kaXN0Wy0xXQorICAgID4+PiBjaG9pY2VzW2Jpc2VjdC5iaXNlY3QoY3VtZGlzdCwgeCldCisgICAgJ0JsdWUnCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZS5yc3QgYi9Eb2MvbGlicmFyeS9yZS5yc3QKaW5kZXggMWQ5MGY3OS4uM2U5Y2YwMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcmVgIC0tLSBSZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0zNCw4ICszMyw5IEBACiBzdHJpbmcgbm90YXRpb24uCiAKIEl0IGlzIGltcG9ydGFudCB0byBub3RlIHRoYXQgbW9zdCByZWd1bGFyIGV4cHJlc3Npb24gb3BlcmF0aW9ucyBhcmUgYXZhaWxhYmxlIGFzCi1tb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIGFuZCA6Y2xhc3M6YFJlZ2V4T2JqZWN0YCBtZXRob2RzLiAgVGhlIGZ1bmN0aW9ucyBhcmUKLXNob3J0Y3V0cyB0aGF0IGRvbid0IHJlcXVpcmUgeW91IHRvIGNvbXBpbGUgYSByZWdleCBvYmplY3QgZmlyc3QsIGJ1dCBtaXNzIHNvbWUKK21vZHVsZS1sZXZlbCBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgb24KKzpyZWY6YGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMgPHJlLW9iamVjdHM+YC4gIFRoZSBmdW5jdGlvbnMgYXJlIHNob3J0Y3V0cwordGhhdCBkb24ndCByZXF1aXJlIHlvdSB0byBjb21waWxlIGEgcmVnZXggb2JqZWN0IGZpcnN0LCBidXQgbWlzcyBzb21lCiBmaW5lLXR1bmluZyBwYXJhbWV0ZXJzLgogCiAuLiBzZWVhbHNvOjoKQEAgLTMzOSwxMSArMzM5LDEyIEBACiAKIGBgXGRgYAogICAgRm9yIFVuaWNvZGUgKHN0cikgcGF0dGVybnM6Ci0gICAgICBNYXRjaGVzIGFueSBVbmljb2RlIGRpZ2l0ICh3aGljaCBpbmNsdWRlcyBgYFswLTldYGAsIGFuZCBhbHNvIG1hbnkKLSAgICAgIG90aGVyIGRpZ2l0IGNoYXJhY3RlcnMpLiBJZiB0aGUgOmNvbnN0OmBBU0NJSWAgZmxhZyBpcyB1c2VkIG9ubHkKLSAgICAgIGBgWzAtOV1gYCBpcyBtYXRjaGVkIChidXQgdGhlIGZsYWcgYWZmZWN0cyB0aGUgZW50aXJlIHJlZ3VsYXIKLSAgICAgIGV4cHJlc3Npb24sIHNvIGluIHN1Y2ggY2FzZXMgdXNpbmcgYW4gZXhwbGljaXQgYGBbMC05XWBgIG1heSBiZSBhCi0gICAgICBiZXR0ZXIgY2hvaWNlKS4KKyAgICAgIE1hdGNoZXMgYW55IFVuaWNvZGUgZGVjaW1hbCBkaWdpdCAodGhhdCBpcywgYW55IGNoYXJhY3RlciBpbgorICAgICAgVW5pY29kZSBjaGFyYWN0ZXIgY2F0ZWdvcnkgW05kXSkuICBUaGlzIGluY2x1ZGVzIGBgWzAtOV1gYCwgYW5kCisgICAgICBhbHNvIG1hbnkgb3RoZXIgZGlnaXQgY2hhcmFjdGVycy4gIElmIHRoZSA6Y29uc3Q6YEFTQ0lJYCBmbGFnIGlzCisgICAgICB1c2VkIG9ubHkgYGBbMC05XWBgIGlzIG1hdGNoZWQgKGJ1dCB0aGUgZmxhZyBhZmZlY3RzIHRoZSBlbnRpcmUKKyAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgc28gaW4gc3VjaCBjYXNlcyB1c2luZyBhbiBleHBsaWNpdCBgYFswLTldYGAKKyAgICAgIG1heSBiZSBhIGJldHRlciBjaG9pY2UpLgogICAgRm9yIDgtYml0IChieXRlcykgcGF0dGVybnM6CiAgICAgICBNYXRjaGVzIGFueSBkZWNpbWFsIGRpZ2l0OyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBbMC05XWBgLgogCkBAIC00NDYsNyArNDQ3LDcgQEAKIGZvcm0uCiAKIAotLi4gZnVuY3Rpb246OiBjb21waWxlKHBhdHRlcm5bLCBmbGFnc10pCisuLiBmdW5jdGlvbjo6IGNvbXBpbGUocGF0dGVybiwgZmxhZ3M9MCkKIAogICAgQ29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LCB3aGljaAogICAgY2FuIGJlIHVzZWQgZm9yIG1hdGNoaW5nIHVzaW5nIGl0cyA6ZnVuYzpgbWF0Y2hgIGFuZCA6ZnVuYzpgc2VhcmNoYCBtZXRob2RzLApAQCAtNTQ3LDIxICs1NDgsMjEgQEAKIAogCiAKLS4uIGZ1bmN0aW9uOjogc2VhcmNoKHBhdHRlcm4sIHN0cmluZ1ssIGZsYWdzXSkKKy4uIGZ1bmN0aW9uOjogc2VhcmNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKIAogICAgU2NhbiB0aHJvdWdoICpzdHJpbmcqIGxvb2tpbmcgZm9yIGEgbG9jYXRpb24gd2hlcmUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgotICAgKnBhdHRlcm4qIHByb2R1Y2VzIGEgbWF0Y2gsIGFuZCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpjbGFzczpgTWF0Y2hPYmplY3RgCi0gICBpbnN0YW5jZS4gUmV0dXJuIGBgTm9uZWBgIGlmIG5vIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybjsgbm90ZQotICAgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGZpbmRpbmcgYSB6ZXJvLWxlbmd0aCBtYXRjaCBhdCBzb21lIHBvaW50IGluIHRoZQotICAgc3RyaW5nLgorICAgKnBhdHRlcm4qIHByb2R1Y2VzIGEgbWF0Y2gsIGFuZCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdAorICAgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiBubyBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIG1hdGNoZXMgdGhlCisgICBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBmaW5kaW5nIGEgemVyby1sZW5ndGggbWF0Y2ggYXQgc29tZQorICAgcG9pbnQgaW4gdGhlIHN0cmluZy4KIAogCi0uLiBmdW5jdGlvbjo6IG1hdGNoKHBhdHRlcm4sIHN0cmluZ1ssIGZsYWdzXSkKKy4uIGZ1bmN0aW9uOjogbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKQogCiAgICBJZiB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgYmVnaW5uaW5nIG9mICpzdHJpbmcqIG1hdGNoIHRoZSByZWd1bGFyCi0gICBleHByZXNzaW9uICpwYXR0ZXJuKiwgcmV0dXJuIGEgY29ycmVzcG9uZGluZyA6Y2xhc3M6YE1hdGNoT2JqZWN0YCBpbnN0YW5jZS4KLSAgIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcwotICAgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKyAgIGV4cHJlc3Npb24gKnBhdHRlcm4qLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdAorICAgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOworICAgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTU2OSw3ICs1NzAsNyBAQAogICAgICAgaW5zdGVhZC4KIAogCi0uLiBmdW5jdGlvbjo6IHNwbGl0KHBhdHRlcm4sIHN0cmluZ1ssIG1heHNwbGl0PTAsIGZsYWdzPTBdKQorLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCiAgICB1c2VkIGluICpwYXR0ZXJuKiwgdGhlbiB0aGUgdGV4dCBvZiBhbGwgZ3JvdXBzIGluIHRoZSBwYXR0ZXJuIGFyZSBhbHNvIHJldHVybmVkCkBAIC02MDksNyArNjEwLDcgQEAKICAgICAgIEFkZGVkIHRoZSBvcHRpb25hbCBmbGFncyBhcmd1bWVudC4KIAogCi0uLiBmdW5jdGlvbjo6IGZpbmRhbGwocGF0dGVybiwgc3RyaW5nWywgZmxhZ3NdKQorLi4gZnVuY3Rpb246OiBmaW5kYWxsKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKIAogICAgUmV0dXJuIGFsbCBub24tb3ZlcmxhcHBpbmcgbWF0Y2hlcyBvZiAqcGF0dGVybiogaW4gKnN0cmluZyosIGFzIGEgbGlzdCBvZgogICAgc3RyaW5ncy4gIFRoZSAqc3RyaW5nKiBpcyBzY2FubmVkIGxlZnQtdG8tcmlnaHQsIGFuZCBtYXRjaGVzIGFyZSByZXR1cm5lZCBpbgpAQCAtNjE5LDE2ICs2MjAsMTYgQEAKICAgIGJlZ2lubmluZyBvZiBhbm90aGVyIG1hdGNoLgogCiAKLS4uIGZ1bmN0aW9uOjogZmluZGl0ZXIocGF0dGVybiwgc3RyaW5nWywgZmxhZ3NdKQorLi4gZnVuY3Rpb246OiBmaW5kaXRlcihwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzPTApCiAKLSAgIFJldHVybiBhbiA6dGVybTpgaXRlcmF0b3JgIHlpZWxkaW5nIDpjbGFzczpgTWF0Y2hPYmplY3RgIGluc3RhbmNlcyBvdmVyIGFsbAotICAgbm9uLW92ZXJsYXBwaW5nIG1hdGNoZXMgZm9yIHRoZSBSRSAqcGF0dGVybiogaW4gKnN0cmluZyouICBUaGUgKnN0cmluZyogaXMKLSAgIHNjYW5uZWQgbGVmdC10by1yaWdodCwgYW5kIG1hdGNoZXMgYXJlIHJldHVybmVkIGluIHRoZSBvcmRlciBmb3VuZC4gIEVtcHR5CisgICBSZXR1cm4gYW4gOnRlcm06YGl0ZXJhdG9yYCB5aWVsZGluZyA6cmVmOmBtYXRjaCBvYmplY3RzIDxtYXRjaC1vYmplY3RzPmAgb3ZlcgorICAgYWxsIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIGZvciB0aGUgUkUgKnBhdHRlcm4qIGluICpzdHJpbmcqLiAgVGhlICpzdHJpbmcqCisgICBpcyBzY2FubmVkIGxlZnQtdG8tcmlnaHQsIGFuZCBtYXRjaGVzIGFyZSByZXR1cm5lZCBpbiB0aGUgb3JkZXIgZm91bmQuICBFbXB0eQogICAgbWF0Y2hlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCB1bmxlc3MgdGhleSB0b3VjaCB0aGUgYmVnaW5uaW5nIG9mIGFub3RoZXIKICAgIG1hdGNoLgogCiAKLS4uIGZ1bmN0aW9uOjogc3ViKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50LCBmbGFnc10pCisuLiBmdW5jdGlvbjo6IHN1YihwYXR0ZXJuLCByZXBsLCBzdHJpbmcsIGNvdW50PTAsIGZsYWdzPTApCiAKICAgIFJldHVybiB0aGUgc3RyaW5nIG9idGFpbmVkIGJ5IHJlcGxhY2luZyB0aGUgbGVmdG1vc3Qgbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzCiAgICBvZiAqcGF0dGVybiogaW4gKnN0cmluZyogYnkgdGhlIHJlcGxhY2VtZW50ICpyZXBsKi4gIElmIHRoZSBwYXR0ZXJuIGlzbid0IGZvdW5kLApAQCAtNjc3LDcgKzY3OCw3IEBACiAgICAgICBBZGRlZCB0aGUgb3B0aW9uYWwgZmxhZ3MgYXJndW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiBzdWJuKHBhdHRlcm4sIHJlcGwsIHN0cmluZ1ssIGNvdW50LCBmbGFnc10pCisuLiBmdW5jdGlvbjo6IHN1Ym4ocGF0dGVybiwgcmVwbCwgc3RyaW5nLCBjb3VudD0wLCBmbGFncz0wKQogCiAgICBQZXJmb3JtIHRoZSBzYW1lIG9wZXJhdGlvbiBhcyA6ZnVuYzpgc3ViYCwgYnV0IHJldHVybiBhIHR1cGxlIGBgKG5ld19zdHJpbmcsCiAgICBudW1iZXJfb2Zfc3Vic19tYWRlKWBgLgpAQCAtNzExLDEwNyArNzEyLDEwNyBAQAogUmVndWxhciBFeHByZXNzaW9uIE9iamVjdHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNsYXNzOjogUmVnZXhPYmplY3QKK0NvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGFuZAorYXR0cmlidXRlcy4KIAotICAgVGhlIDpjbGFzczpgUmVnZXhPYmplY3RgIGNsYXNzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKKy4uIG1ldGhvZDo6IHJlZ2V4LnNlYXJjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkKIAotICAgLi4gbWV0aG9kOjogUmVnZXhPYmplY3Quc2VhcmNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKQorICAgU2NhbiB0aHJvdWdoICpzdHJpbmcqIGxvb2tpbmcgZm9yIGEgbG9jYXRpb24gd2hlcmUgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24KKyAgIHByb2R1Y2VzIGEgbWF0Y2gsIGFuZCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdAorICAgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiBubyBwb3NpdGlvbiBpbiB0aGUgc3RyaW5nIG1hdGNoZXMgdGhlCisgICBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBmaW5kaW5nIGEgemVyby1sZW5ndGggbWF0Y2ggYXQgc29tZQorICAgcG9pbnQgaW4gdGhlIHN0cmluZy4KIAotICAgICAgU2NhbiB0aHJvdWdoICpzdHJpbmcqIGxvb2tpbmcgZm9yIGEgbG9jYXRpb24gd2hlcmUgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24KLSAgICAgIHByb2R1Y2VzIGEgbWF0Y2gsIGFuZCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpjbGFzczpgTWF0Y2hPYmplY3RgIGluc3RhbmNlLgotICAgICAgUmV0dXJuIGBgTm9uZWBgIGlmIG5vIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMKLSAgICAgIGlzIGRpZmZlcmVudCBmcm9tIGZpbmRpbmcgYSB6ZXJvLWxlbmd0aCBtYXRjaCBhdCBzb21lIHBvaW50IGluIHRoZSBzdHJpbmcuCisgICBUaGUgb3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciAqcG9zKiBnaXZlcyBhbiBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHRoZQorICAgc2VhcmNoIGlzIHRvIHN0YXJ0OyBpdCBkZWZhdWx0cyB0byBgYDBgYC4gIFRoaXMgaXMgbm90IGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0bworICAgc2xpY2luZyB0aGUgc3RyaW5nOyB0aGUgYGAnXidgYCBwYXR0ZXJuIGNoYXJhY3RlciBtYXRjaGVzIGF0IHRoZSByZWFsIGJlZ2lubmluZworICAgb2YgdGhlIHN0cmluZyBhbmQgYXQgcG9zaXRpb25zIGp1c3QgYWZ0ZXIgYSBuZXdsaW5lLCBidXQgbm90IG5lY2Vzc2FyaWx5IGF0IHRoZQorICAgaW5kZXggd2hlcmUgdGhlIHNlYXJjaCBpcyB0byBzdGFydC4KIAotICAgICAgVGhlIG9wdGlvbmFsIHNlY29uZCBwYXJhbWV0ZXIgKnBvcyogZ2l2ZXMgYW4gaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSB0aGUKLSAgICAgIHNlYXJjaCBpcyB0byBzdGFydDsgaXQgZGVmYXVsdHMgdG8gYGAwYGAuICBUaGlzIGlzIG5vdCBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG8KLSAgICAgIHNsaWNpbmcgdGhlIHN0cmluZzsgdGhlIGBgJ14nYGAgcGF0dGVybiBjaGFyYWN0ZXIgbWF0Y2hlcyBhdCB0aGUgcmVhbCBiZWdpbm5pbmcKLSAgICAgIG9mIHRoZSBzdHJpbmcgYW5kIGF0IHBvc2l0aW9ucyBqdXN0IGFmdGVyIGEgbmV3bGluZSwgYnV0IG5vdCBuZWNlc3NhcmlseSBhdCB0aGUKLSAgICAgIGluZGV4IHdoZXJlIHRoZSBzZWFyY2ggaXMgdG8gc3RhcnQuCisgICBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyICplbmRwb3MqIGxpbWl0cyBob3cgZmFyIHRoZSBzdHJpbmcgd2lsbCBiZSBzZWFyY2hlZDsgaXQKKyAgIHdpbGwgYmUgYXMgaWYgdGhlIHN0cmluZyBpcyAqZW5kcG9zKiBjaGFyYWN0ZXJzIGxvbmcsIHNvIG9ubHkgdGhlIGNoYXJhY3RlcnMKKyAgIGZyb20gKnBvcyogdG8gYGBlbmRwb3MgLSAxYGAgd2lsbCBiZSBzZWFyY2hlZCBmb3IgYSBtYXRjaC4gIElmICplbmRwb3MqIGlzIGxlc3MKKyAgIHRoYW4gKnBvcyosIG5vIG1hdGNoIHdpbGwgYmUgZm91bmQsIG90aGVyd2lzZSwgaWYgKnJ4KiBpcyBhIGNvbXBpbGVkIHJlZ3VsYXIKKyAgIGV4cHJlc3Npb24gb2JqZWN0LCBgYHJ4LnNlYXJjaChzdHJpbmcsIDAsIDUwKWBgIGlzIGVxdWl2YWxlbnQgdG8KKyAgIGBgcnguc2VhcmNoKHN0cmluZ1s6NTBdLCAwKWBgLgogCi0gICAgICBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyICplbmRwb3MqIGxpbWl0cyBob3cgZmFyIHRoZSBzdHJpbmcgd2lsbCBiZSBzZWFyY2hlZDsgaXQKLSAgICAgIHdpbGwgYmUgYXMgaWYgdGhlIHN0cmluZyBpcyAqZW5kcG9zKiBjaGFyYWN0ZXJzIGxvbmcsIHNvIG9ubHkgdGhlIGNoYXJhY3RlcnMKLSAgICAgIGZyb20gKnBvcyogdG8gYGBlbmRwb3MgLSAxYGAgd2lsbCBiZSBzZWFyY2hlZCBmb3IgYSBtYXRjaC4gIElmICplbmRwb3MqIGlzIGxlc3MKLSAgICAgIHRoYW4gKnBvcyosIG5vIG1hdGNoIHdpbGwgYmUgZm91bmQsIG90aGVyd2lzZSwgaWYgKnJ4KiBpcyBhIGNvbXBpbGVkIHJlZ3VsYXIKLSAgICAgIGV4cHJlc3Npb24gb2JqZWN0LCBgYHJ4LnNlYXJjaChzdHJpbmcsIDAsIDUwKWBgIGlzIGVxdWl2YWxlbnQgdG8KLSAgICAgIGBgcnguc2VhcmNoKHN0cmluZ1s6NTBdLCAwKWBgLgotCi0gICAgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoImQiKQotICAgICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciKSAgICAgIyBNYXRjaCBhdCBpbmRleCAwCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KLSAgICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIiwgMSkgICMgTm8gbWF0Y2g7IHNlYXJjaCBkb2Vzbid0IGluY2x1ZGUgdGhlICJkIgorICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKKyAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA+Pj4gcGF0dGVybi5zZWFyY2goImRvZyIsIDEpICAjIE5vIG1hdGNoOyBzZWFyY2ggZG9lc24ndCBpbmNsdWRlIHRoZSAiZCIKIAogCi0gICAuLiBtZXRob2Q6OiBSZWdleE9iamVjdC5tYXRjaChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkKKy4uIG1ldGhvZDo6IHJlZ2V4Lm1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKQogCi0gICAgICBJZiB6ZXJvIG9yIG1vcmUgY2hhcmFjdGVycyBhdCB0aGUgKmJlZ2lubmluZyogb2YgKnN0cmluZyogbWF0Y2ggdGhpcyByZWd1bGFyCi0gICAgICBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIDpjbGFzczpgTWF0Y2hPYmplY3RgIGluc3RhbmNlLiAgUmV0dXJuCi0gICAgICBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKLSAgICAgIGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKyAgIElmIHplcm8gb3IgbW9yZSBjaGFyYWN0ZXJzIGF0IHRoZSAqYmVnaW5uaW5nKiBvZiAqc3RyaW5nKiBtYXRjaCB0aGlzIHJlZ3VsYXIKKyAgIGV4cHJlc3Npb24sIHJldHVybiBhIGNvcnJlc3BvbmRpbmcgOnJlZjpgbWF0Y2ggb2JqZWN0IDxtYXRjaC1vYmplY3RzPmAuCisgICBSZXR1cm4gYGBOb25lYGAgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMKKyAgIGRpZmZlcmVudCBmcm9tIGEgemVyby1sZW5ndGggbWF0Y2guCiAKLSAgICAgIFRoZSBvcHRpb25hbCAqcG9zKiBhbmQgKmVuZHBvcyogcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHRoZQotICAgICAgOm1ldGg6YH5SZWdleE9iamVjdC5zZWFyY2hgIG1ldGhvZC4KKyAgIFRoZSBvcHRpb25hbCAqcG9zKiBhbmQgKmVuZHBvcyogcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHRoZQorICAgOm1ldGg6YH5yZWdleC5zZWFyY2hgIG1ldGhvZC4KIAotICAgICAgLi4gbm90ZTo6CisgICAuLiBub3RlOjoKIAotICAgICAgICAgSWYgeW91IHdhbnQgdG8gbG9jYXRlIGEgbWF0Y2ggYW55d2hlcmUgaW4gKnN0cmluZyosIHVzZQotICAgICAgICAgOm1ldGg6YH5SZWdleE9iamVjdC5zZWFyY2hgIGluc3RlYWQuCisgICAgICBJZiB5b3Ugd2FudCB0byBsb2NhdGUgYSBtYXRjaCBhbnl3aGVyZSBpbiAqc3RyaW5nKiwgdXNlCisgICAgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgaW5zdGVhZC4KIAotICAgICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJvIikKLSAgICAgID4+PiBwYXR0ZXJuLm1hdGNoKCJkb2ciKSAgICAgICMgTm8gbWF0Y2ggYXMgIm8iIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgImRvZyIuCi0gICAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIiwgMSkgICAjIE1hdGNoIGFzICJvIiBpcyB0aGUgMm5kIGNoYXJhY3RlciBvZiAiZG9nIi4KLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJvIikKKyAgID4+PiBwYXR0ZXJuLm1hdGNoKCJkb2ciKSAgICAgICMgTm8gbWF0Y2ggYXMgIm8iIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgImRvZyIuCisgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIiwgMSkgICAjIE1hdGNoIGFzICJvIiBpcyB0aGUgMm5kIGNoYXJhY3RlciBvZiAiZG9nIi4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgogCiAKLSAgIC4uIG1ldGhvZDo6IFJlZ2V4T2JqZWN0LnNwbGl0KHN0cmluZ1ssIG1heHNwbGl0PTBdKQorLi4gbWV0aG9kOjogcmVnZXguc3BsaXQoc3RyaW5nLCBtYXhzcGxpdD0wKQogCi0gICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBzcGxpdGAgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgorICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KIAogCi0gICAuLiBtZXRob2Q6OiBSZWdleE9iamVjdC5maW5kYWxsKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKQorLi4gbWV0aG9kOjogcmVnZXguZmluZGFsbChzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkKIAotICAgICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YGZpbmRhbGxgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybiwgYnV0Ci0gICAgICBhbHNvIGFjY2VwdHMgb3B0aW9uYWwgKnBvcyogYW5kICplbmRwb3MqIHBhcmFtZXRlcnMgdGhhdCBsaW1pdCB0aGUgc2VhcmNoCi0gICAgICByZWdpb24gbGlrZSBmb3IgOm1ldGg6YG1hdGNoYC4KKyAgIFNpbWlsYXIgdG8gdGhlIDpmdW5jOmBmaW5kYWxsYCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4sIGJ1dAorICAgYWxzbyBhY2NlcHRzIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIHRoYXQgbGltaXQgdGhlIHNlYXJjaAorICAgcmVnaW9uIGxpa2UgZm9yIDptZXRoOmBtYXRjaGAuCiAKIAotICAgLi4gbWV0aG9kOjogUmVnZXhPYmplY3QuZmluZGl0ZXIoc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisuLiBtZXRob2Q6OiByZWdleC5maW5kaXRlcihzdHJpbmdbLCBwb3NbLCBlbmRwb3NdXSkKIAotICAgICAgU2ltaWxhciB0byB0aGUgOmZ1bmM6YGZpbmRpdGVyYCBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4sIGJ1dAotICAgICAgYWxzbyBhY2NlcHRzIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIHRoYXQgbGltaXQgdGhlIHNlYXJjaAotICAgICAgcmVnaW9uIGxpa2UgZm9yIDptZXRoOmBtYXRjaGAuCisgICBTaW1pbGFyIHRvIHRoZSA6ZnVuYzpgZmluZGl0ZXJgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybiwgYnV0CisgICBhbHNvIGFjY2VwdHMgb3B0aW9uYWwgKnBvcyogYW5kICplbmRwb3MqIHBhcmFtZXRlcnMgdGhhdCBsaW1pdCB0aGUgc2VhcmNoCisgICByZWdpb24gbGlrZSBmb3IgOm1ldGg6YG1hdGNoYC4KIAogCi0gICAuLiBtZXRob2Q6OiBSZWdleE9iamVjdC5zdWIocmVwbCwgc3RyaW5nWywgY291bnQ9MF0pCisuLiBtZXRob2Q6OiByZWdleC5zdWIocmVwbCwgc3RyaW5nLCBjb3VudD0wKQogCi0gICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBzdWJgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KKyAgIElkZW50aWNhbCB0byB0aGUgOmZ1bmM6YHN1YmAgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgogCiAKLSAgIC4uIG1ldGhvZDo6IFJlZ2V4T2JqZWN0LnN1Ym4ocmVwbCwgc3RyaW5nWywgY291bnQ9MF0pCisuLiBtZXRob2Q6OiByZWdleC5zdWJuKHJlcGwsIHN0cmluZywgY291bnQ9MCkKIAotICAgICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3VibmAgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgorICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3VibmAgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgogCiAKLSAgIC4uIGF0dHJpYnV0ZTo6IFJlZ2V4T2JqZWN0LmZsYWdzCisuLiBhdHRyaWJ1dGU6OiByZWdleC5mbGFncwogCi0gICAgICBUaGUgZmxhZ3MgYXJndW1lbnQgdXNlZCB3aGVuIHRoZSBSRSBvYmplY3Qgd2FzIGNvbXBpbGVkLCBvciBgYDBgYCBpZiBubyBmbGFncwotICAgICAgd2VyZSBwcm92aWRlZC4KKyAgIFRoZSBmbGFncyBhcmd1bWVudCB1c2VkIHdoZW4gdGhlIFJFIG9iamVjdCB3YXMgY29tcGlsZWQsIG9yIGBgMGBgIGlmIG5vIGZsYWdzCisgICB3ZXJlIHByb3ZpZGVkLgogCiAKLSAgIC4uIGF0dHJpYnV0ZTo6IFJlZ2V4T2JqZWN0Lmdyb3VwcworLi4gYXR0cmlidXRlOjogcmVnZXguZ3JvdXBzCiAKLSAgICAgIFRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIGdyb3VwcyBpbiB0aGUgcGF0dGVybi4KKyAgIFRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIGdyb3VwcyBpbiB0aGUgcGF0dGVybi4KIAogCi0gICAuLiBhdHRyaWJ1dGU6OiBSZWdleE9iamVjdC5ncm91cGluZGV4CisuLiBhdHRyaWJ1dGU6OiByZWdleC5ncm91cGluZGV4CiAKLSAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIGFueSBzeW1ib2xpYyBncm91cCBuYW1lcyBkZWZpbmVkIGJ5IGBgKD9QPGlkPilgYCB0byBncm91cAotICAgICAgbnVtYmVycy4gIFRoZSBkaWN0aW9uYXJ5IGlzIGVtcHR5IGlmIG5vIHN5bWJvbGljIGdyb3VwcyB3ZXJlIHVzZWQgaW4gdGhlCi0gICAgICBwYXR0ZXJuLgorICAgQSBkaWN0aW9uYXJ5IG1hcHBpbmcgYW55IHN5bWJvbGljIGdyb3VwIG5hbWVzIGRlZmluZWQgYnkgYGAoP1A8aWQ+KWBgIHRvIGdyb3VwCisgICBudW1iZXJzLiAgVGhlIGRpY3Rpb25hcnkgaXMgZW1wdHkgaWYgbm8gc3ltYm9saWMgZ3JvdXBzIHdlcmUgdXNlZCBpbiB0aGUKKyAgIHBhdHRlcm4uCiAKIAotICAgLi4gYXR0cmlidXRlOjogUmVnZXhPYmplY3QucGF0dGVybgorLi4gYXR0cmlidXRlOjogcmVnZXgucGF0dGVybgogCi0gICAgICBUaGUgcGF0dGVybiBzdHJpbmcgZnJvbSB3aGljaCB0aGUgUkUgb2JqZWN0IHdhcyBjb21waWxlZC4KKyAgIFRoZSBwYXR0ZXJuIHN0cmluZyBmcm9tIHdoaWNoIHRoZSBSRSBvYmplY3Qgd2FzIGNvbXBpbGVkLgogCiAKIC4uIF9tYXRjaC1vYmplY3RzOgpAQCAtODE5LDE4MSArODIwLDE4MiBAQAogTWF0Y2ggT2JqZWN0cwogLS0tLS0tLS0tLS0tLQogCi0uLiBjbGFzczo6IE1hdGNoT2JqZWN0Ci0KLSAgIE1hdGNoIE9iamVjdHMgYWx3YXlzIGhhdmUgYSBib29sZWFuIHZhbHVlIG9mIDpjb25zdDpgVHJ1ZWAsIHNvIHRoYXQgeW91IGNhbiB0ZXN0Ci0gICB3aGV0aGVyIGUuZy4gOmZ1bmM6YG1hdGNoYCByZXN1bHRlZCBpbiBhIG1hdGNoIHdpdGggYSBzaW1wbGUgaWYgc3RhdGVtZW50LiAgVGhleQotICAgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CitNYXRjaCBvYmplY3RzIGFsd2F5cyBoYXZlIGEgYm9vbGVhbiB2YWx1ZSBvZiA6Y29uc3Q6YFRydWVgLCBzbyB0aGF0IHlvdSBjYW4gdGVzdAord2hldGhlciBlLmcuIDpmdW5jOmBtYXRjaGAgcmVzdWx0ZWQgaW4gYSBtYXRjaCB3aXRoIGEgc2ltcGxlIGlmIHN0YXRlbWVudC4gIFRoZXkKK3N1cHBvcnQgdGhlIGZvbGxvd2luZyBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzOgogCiAKLSAgIC4uIG1ldGhvZDo6IE1hdGNoT2JqZWN0LmV4cGFuZCh0ZW1wbGF0ZSkKKy4uIG1ldGhvZDo6IG1hdGNoLmV4cGFuZCh0ZW1wbGF0ZSkKIAotICAgICAgUmV0dXJuIHRoZSBzdHJpbmcgb2J0YWluZWQgYnkgZG9pbmcgYmFja3NsYXNoIHN1YnN0aXR1dGlvbiBvbiB0aGUgdGVtcGxhdGUKLSAgICAgIHN0cmluZyAqdGVtcGxhdGUqLCBhcyBkb25lIGJ5IHRoZSA6bWV0aDpgflJlZ2V4T2JqZWN0LnN1YmAgbWV0aG9kLiAgRXNjYXBlcwotICAgICAgc3VjaCBhcyBgYFxuYGAgYXJlIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUgY2hhcmFjdGVycywgYW5kIG51bWVyaWMKLSAgICAgIGJhY2tyZWZlcmVuY2VzIChgYFwxYGAsIGBgXDJgYCkgYW5kIG5hbWVkIGJhY2tyZWZlcmVuY2VzIChgYFxnPDE+YGAsCi0gICAgICBgYFxnPG5hbWU+YGApIGFyZSByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZ3JvdXAuCisgICBSZXR1cm4gdGhlIHN0cmluZyBvYnRhaW5lZCBieSBkb2luZyBiYWNrc2xhc2ggc3Vic3RpdHV0aW9uIG9uIHRoZSB0ZW1wbGF0ZQorICAgc3RyaW5nICp0ZW1wbGF0ZSosIGFzIGRvbmUgYnkgdGhlIDptZXRoOmB+cmVnZXguc3ViYCBtZXRob2QuCisgICBFc2NhcGVzIHN1Y2ggYXMgYGBcbmBgIGFyZSBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIGNoYXJhY3RlcnMsCisgICBhbmQgbnVtZXJpYyBiYWNrcmVmZXJlbmNlcyAoYGBcMWBgLCBgYFwyYGApIGFuZCBuYW1lZCBiYWNrcmVmZXJlbmNlcworICAgKGBgXGc8MT5gYCwgYGBcZzxuYW1lPmBgKSBhcmUgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZQorICAgY29ycmVzcG9uZGluZyBncm91cC4KIAogCi0gICAuLiBtZXRob2Q6OiBNYXRjaE9iamVjdC5ncm91cChbZ3JvdXAxLCAuLi5dKQorLi4gbWV0aG9kOjogbWF0Y2guZ3JvdXAoW2dyb3VwMSwgLi4uXSkKIAotICAgICAgUmV0dXJucyBvbmUgb3IgbW9yZSBzdWJncm91cHMgb2YgdGhlIG1hdGNoLiAgSWYgdGhlcmUgaXMgYSBzaW5nbGUgYXJndW1lbnQsIHRoZQotICAgICAgcmVzdWx0IGlzIGEgc2luZ2xlIHN0cmluZzsgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGFyZ3VtZW50cywgdGhlIHJlc3VsdCBpcyBhCi0gICAgICB0dXBsZSB3aXRoIG9uZSBpdGVtIHBlciBhcmd1bWVudC4gV2l0aG91dCBhcmd1bWVudHMsICpncm91cDEqIGRlZmF1bHRzIHRvIHplcm8KLSAgICAgICh0aGUgd2hvbGUgbWF0Y2ggaXMgcmV0dXJuZWQpLiBJZiBhICpncm91cE4qIGFyZ3VtZW50IGlzIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nCi0gICAgICByZXR1cm4gdmFsdWUgaXMgdGhlIGVudGlyZSBtYXRjaGluZyBzdHJpbmc7IGlmIGl0IGlzIGluIHRoZSBpbmNsdXNpdmUgcmFuZ2UKLSAgICAgIFsxLi45OV0sIGl0IGlzIHRoZSBzdHJpbmcgbWF0Y2hpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcGFyZW50aGVzaXplZCBncm91cC4gIElmIGEKLSAgICAgIGdyb3VwIG51bWJlciBpcyBuZWdhdGl2ZSBvciBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGdyb3VwcyBkZWZpbmVkIGluIHRoZQotICAgICAgcGF0dGVybiwgYW4gOmV4YzpgSW5kZXhFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gSWYgYSBncm91cCBpcyBjb250YWluZWQgaW4gYQotICAgICAgcGFydCBvZiB0aGUgcGF0dGVybiB0aGF0IGRpZCBub3QgbWF0Y2gsIHRoZSBjb3JyZXNwb25kaW5nIHJlc3VsdCBpcyBgYE5vbmVgYC4KLSAgICAgIElmIGEgZ3JvdXAgaXMgY29udGFpbmVkIGluIGEgcGFydCBvZiB0aGUgcGF0dGVybiB0aGF0IG1hdGNoZWQgbXVsdGlwbGUgdGltZXMsCi0gICAgICB0aGUgbGFzdCBtYXRjaCBpcyByZXR1cm5lZC4KKyAgIFJldHVybnMgb25lIG9yIG1vcmUgc3ViZ3JvdXBzIG9mIHRoZSBtYXRjaC4gIElmIHRoZXJlIGlzIGEgc2luZ2xlIGFyZ3VtZW50LCB0aGUKKyAgIHJlc3VsdCBpcyBhIHNpbmdsZSBzdHJpbmc7IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBhcmd1bWVudHMsIHRoZSByZXN1bHQgaXMgYQorICAgdHVwbGUgd2l0aCBvbmUgaXRlbSBwZXIgYXJndW1lbnQuIFdpdGhvdXQgYXJndW1lbnRzLCAqZ3JvdXAxKiBkZWZhdWx0cyB0byB6ZXJvCisgICAodGhlIHdob2xlIG1hdGNoIGlzIHJldHVybmVkKS4gSWYgYSAqZ3JvdXBOKiBhcmd1bWVudCBpcyB6ZXJvLCB0aGUgY29ycmVzcG9uZGluZworICAgcmV0dXJuIHZhbHVlIGlzIHRoZSBlbnRpcmUgbWF0Y2hpbmcgc3RyaW5nOyBpZiBpdCBpcyBpbiB0aGUgaW5jbHVzaXZlIHJhbmdlCisgICBbMS4uOTldLCBpdCBpcyB0aGUgc3RyaW5nIG1hdGNoaW5nIHRoZSBjb3JyZXNwb25kaW5nIHBhcmVudGhlc2l6ZWQgZ3JvdXAuICBJZiBhCisgICBncm91cCBudW1iZXIgaXMgbmVnYXRpdmUgb3IgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciBvZiBncm91cHMgZGVmaW5lZCBpbiB0aGUKKyAgIHBhdHRlcm4sIGFuIDpleGM6YEluZGV4RXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuIElmIGEgZ3JvdXAgaXMgY29udGFpbmVkIGluIGEKKyAgIHBhcnQgb2YgdGhlIHBhdHRlcm4gdGhhdCBkaWQgbm90IG1hdGNoLCB0aGUgY29ycmVzcG9uZGluZyByZXN1bHQgaXMgYGBOb25lYGAuCisgICBJZiBhIGdyb3VwIGlzIGNvbnRhaW5lZCBpbiBhIHBhcnQgb2YgdGhlIHBhdHRlcm4gdGhhdCBtYXRjaGVkIG11bHRpcGxlIHRpbWVzLAorICAgdGhlIGxhc3QgbWF0Y2ggaXMgcmV0dXJuZWQuCiAKLSAgICAgICAgID4+PiBtID0gcmUubWF0Y2gociIoXHcrKSAoXHcrKSIsICJJc2FhYyBOZXd0b24sIHBoeXNpY2lzdCIpCi0gICAgICAgICA+Pj4gbS5ncm91cCgwKSAgICAgICAjIFRoZSBlbnRpcmUgbWF0Y2gKLSAgICAgICAgICdJc2FhYyBOZXd0b24nCi0gICAgICAgICA+Pj4gbS5ncm91cCgxKSAgICAgICAjIFRoZSBmaXJzdCBwYXJlbnRoZXNpemVkIHN1Ymdyb3VwLgotICAgICAgICAgJ0lzYWFjJwotICAgICAgICAgPj4+IG0uZ3JvdXAoMikgICAgICAgIyBUaGUgc2Vjb25kIHBhcmVudGhlc2l6ZWQgc3ViZ3JvdXAuCi0gICAgICAgICAnTmV3dG9uJwotICAgICAgICAgPj4+IG0uZ3JvdXAoMSwgMikgICAgIyBNdWx0aXBsZSBhcmd1bWVudHMgZ2l2ZSB1cyBhIHR1cGxlLgotICAgICAgICAgKCdJc2FhYycsICdOZXd0b24nKQorICAgICAgPj4+IG0gPSByZS5tYXRjaChyIihcdyspIChcdyspIiwgIklzYWFjIE5ld3RvbiwgcGh5c2ljaXN0IikKKyAgICAgID4+PiBtLmdyb3VwKDApICAgICAgICMgVGhlIGVudGlyZSBtYXRjaAorICAgICAgJ0lzYWFjIE5ld3RvbicKKyAgICAgID4+PiBtLmdyb3VwKDEpICAgICAgICMgVGhlIGZpcnN0IHBhcmVudGhlc2l6ZWQgc3ViZ3JvdXAuCisgICAgICAnSXNhYWMnCisgICAgICA+Pj4gbS5ncm91cCgyKSAgICAgICAjIFRoZSBzZWNvbmQgcGFyZW50aGVzaXplZCBzdWJncm91cC4KKyAgICAgICdOZXd0b24nCisgICAgICA+Pj4gbS5ncm91cCgxLCAyKSAgICAjIE11bHRpcGxlIGFyZ3VtZW50cyBnaXZlIHVzIGEgdHVwbGUuCisgICAgICAoJ0lzYWFjJywgJ05ld3RvbicpCiAKLSAgICAgIElmIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdXNlcyB0aGUgYGAoP1A8bmFtZT4uLi4pYGAgc3ludGF4LCB0aGUgKmdyb3VwTioKLSAgICAgIGFyZ3VtZW50cyBtYXkgYWxzbyBiZSBzdHJpbmdzIGlkZW50aWZ5aW5nIGdyb3VwcyBieSB0aGVpciBncm91cCBuYW1lLiAgSWYgYQotICAgICAgc3RyaW5nIGFyZ3VtZW50IGlzIG5vdCB1c2VkIGFzIGEgZ3JvdXAgbmFtZSBpbiB0aGUgcGF0dGVybiwgYW4gOmV4YzpgSW5kZXhFcnJvcmAKLSAgICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICBJZiB0aGUgcmVndWxhciBleHByZXNzaW9uIHVzZXMgdGhlIGBgKD9QPG5hbWU+Li4uKWBgIHN5bnRheCwgdGhlICpncm91cE4qCisgICBhcmd1bWVudHMgbWF5IGFsc28gYmUgc3RyaW5ncyBpZGVudGlmeWluZyBncm91cHMgYnkgdGhlaXIgZ3JvdXAgbmFtZS4gIElmIGEKKyAgIHN0cmluZyBhcmd1bWVudCBpcyBub3QgdXNlZCBhcyBhIGdyb3VwIG5hbWUgaW4gdGhlIHBhdHRlcm4sIGFuIDpleGM6YEluZGV4RXJyb3JgCisgICBleGNlcHRpb24gaXMgcmFpc2VkLgogCi0gICAgICBBIG1vZGVyYXRlbHkgY29tcGxpY2F0ZWQgZXhhbXBsZToKKyAgIEEgbW9kZXJhdGVseSBjb21wbGljYXRlZCBleGFtcGxlOgogCi0gICAgICAgICA+Pj4gbSA9IHJlLm1hdGNoKHIiKD9QPGZpcnN0X25hbWU+XHcrKSAoP1A8bGFzdF9uYW1lPlx3KykiLCAiTWFsY29sbSBSZXlub2xkcyIpCi0gICAgICAgICA+Pj4gbS5ncm91cCgnZmlyc3RfbmFtZScpCi0gICAgICAgICAnTWFsY29sbScKLSAgICAgICAgID4+PiBtLmdyb3VwKCdsYXN0X25hbWUnKQotICAgICAgICAgJ1JleW5vbGRzJworICAgICAgPj4+IG0gPSByZS5tYXRjaChyIig/UDxmaXJzdF9uYW1lPlx3KykgKD9QPGxhc3RfbmFtZT5cdyspIiwgIk1hbGNvbG0gUmV5bm9sZHMiKQorICAgICAgPj4+IG0uZ3JvdXAoJ2ZpcnN0X25hbWUnKQorICAgICAgJ01hbGNvbG0nCisgICAgICA+Pj4gbS5ncm91cCgnbGFzdF9uYW1lJykKKyAgICAgICdSZXlub2xkcycKIAotICAgICAgTmFtZWQgZ3JvdXBzIGNhbiBhbHNvIGJlIHJlZmVycmVkIHRvIGJ5IHRoZWlyIGluZGV4OgorICAgTmFtZWQgZ3JvdXBzIGNhbiBhbHNvIGJlIHJlZmVycmVkIHRvIGJ5IHRoZWlyIGluZGV4OgogCi0gICAgICAgICA+Pj4gbS5ncm91cCgxKQotICAgICAgICAgJ01hbGNvbG0nCi0gICAgICAgICA+Pj4gbS5ncm91cCgyKQotICAgICAgICAgJ1JleW5vbGRzJworICAgICAgPj4+IG0uZ3JvdXAoMSkKKyAgICAgICdNYWxjb2xtJworICAgICAgPj4+IG0uZ3JvdXAoMikKKyAgICAgICdSZXlub2xkcycKIAotICAgICAgSWYgYSBncm91cCBtYXRjaGVzIG11bHRpcGxlIHRpbWVzLCBvbmx5IHRoZSBsYXN0IG1hdGNoIGlzIGFjY2Vzc2libGU6CisgICBJZiBhIGdyb3VwIG1hdGNoZXMgbXVsdGlwbGUgdGltZXMsIG9ubHkgdGhlIGxhc3QgbWF0Y2ggaXMgYWNjZXNzaWJsZToKIAotICAgICAgICAgPj4+IG0gPSByZS5tYXRjaChyIiguLikrIiwgImExYjJjMyIpICAjIE1hdGNoZXMgMyB0aW1lcy4KLSAgICAgICAgID4+PiBtLmdyb3VwKDEpICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXR1cm5zIG9ubHkgdGhlIGxhc3QgbWF0Y2guCi0gICAgICAgICAnYzMnCi0KLSAgIC4uIG1ldGhvZDo6IE1hdGNoT2JqZWN0Lmdyb3VwcyhbZGVmYXVsdF0pCi0KLSAgICAgIFJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHRoZSBzdWJncm91cHMgb2YgdGhlIG1hdGNoLCBmcm9tIDEgdXAgdG8gaG93ZXZlcgotICAgICAgbWFueSBncm91cHMgYXJlIGluIHRoZSBwYXR0ZXJuLiAgVGhlICpkZWZhdWx0KiBhcmd1bWVudCBpcyB1c2VkIGZvciBncm91cHMgdGhhdAotICAgICAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2g7IGl0IGRlZmF1bHRzIHRvIGBgTm9uZWBgLgotCi0gICAgICBGb3IgZXhhbXBsZToKLQotICAgICAgICAgPj4+IG0gPSByZS5tYXRjaChyIihcZCspXC4oXGQrKSIsICIyNC4xNjMyIikKLSAgICAgICAgID4+PiBtLmdyb3VwcygpCi0gICAgICAgICAoJzI0JywgJzE2MzInKQotCi0gICAgICBJZiB3ZSBtYWtlIHRoZSBkZWNpbWFsIHBsYWNlIGFuZCBldmVyeXRoaW5nIGFmdGVyIGl0IG9wdGlvbmFsLCBub3QgYWxsIGdyb3VwcwotICAgICAgbWlnaHQgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLiAgVGhlc2UgZ3JvdXBzIHdpbGwgZGVmYXVsdCB0byBgYE5vbmVgYCB1bmxlc3MKLSAgICAgIHRoZSAqZGVmYXVsdCogYXJndW1lbnQgaXMgZ2l2ZW46Ci0KLSAgICAgICAgID4+PiBtID0gcmUubWF0Y2gociIoXGQrKVwuPyhcZCspPyIsICIyNCIpCi0gICAgICAgICA+Pj4gbS5ncm91cHMoKSAgICAgICMgU2Vjb25kIGdyb3VwIGRlZmF1bHRzIHRvIE5vbmUuCi0gICAgICAgICAoJzI0JywgTm9uZSkKLSAgICAgICAgID4+PiBtLmdyb3VwcygnMCcpICAgIyBOb3csIHRoZSBzZWNvbmQgZ3JvdXAgZGVmYXVsdHMgdG8gJzAnLgotICAgICAgICAgKCcyNCcsICcwJykKKyAgICAgID4+PiBtID0gcmUubWF0Y2gociIoLi4pKyIsICJhMWIyYzMiKSAgIyBNYXRjaGVzIDMgdGltZXMuCisgICAgICA+Pj4gbS5ncm91cCgxKSAgICAgICAgICAgICAgICAgICAgICAgICMgUmV0dXJucyBvbmx5IHRoZSBsYXN0IG1hdGNoLgorICAgICAgJ2MzJwogCiAKLSAgIC4uIG1ldGhvZDo6IE1hdGNoT2JqZWN0Lmdyb3VwZGljdChbZGVmYXVsdF0pCisuLiBtZXRob2Q6OiBtYXRjaC5ncm91cHMoZGVmYXVsdD1Ob25lKQogCi0gICAgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIHRoZSAqbmFtZWQqIHN1Ymdyb3VwcyBvZiB0aGUgbWF0Y2gsIGtleWVkIGJ5Ci0gICAgICB0aGUgc3ViZ3JvdXAgbmFtZS4gIFRoZSAqZGVmYXVsdCogYXJndW1lbnQgaXMgdXNlZCBmb3IgZ3JvdXBzIHRoYXQgZGlkIG5vdAotICAgICAgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoOyBpdCBkZWZhdWx0cyB0byBgYE5vbmVgYC4gIEZvciBleGFtcGxlOgorICAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBhbGwgdGhlIHN1Ymdyb3VwcyBvZiB0aGUgbWF0Y2gsIGZyb20gMSB1cCB0byBob3dldmVyCisgICBtYW55IGdyb3VwcyBhcmUgaW4gdGhlIHBhdHRlcm4uICBUaGUgKmRlZmF1bHQqIGFyZ3VtZW50IGlzIHVzZWQgZm9yIGdyb3VwcyB0aGF0CisgICBkaWQgbm90IHBhcnRpY2lwYXRlIGluIHRoZSBtYXRjaDsgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAuCiAKLSAgICAgICAgID4+PiBtID0gcmUubWF0Y2gociIoP1A8Zmlyc3RfbmFtZT5cdyspICg/UDxsYXN0X25hbWU+XHcrKSIsICJNYWxjb2xtIFJleW5vbGRzIikKLSAgICAgICAgID4+PiBtLmdyb3VwZGljdCgpCi0gICAgICAgICB7J2ZpcnN0X25hbWUnOiAnTWFsY29sbScsICdsYXN0X25hbWUnOiAnUmV5bm9sZHMnfQorICAgRm9yIGV4YW1wbGU6CisKKyAgICAgID4+PiBtID0gcmUubWF0Y2gociIoXGQrKVwuKFxkKykiLCAiMjQuMTYzMiIpCisgICAgICA+Pj4gbS5ncm91cHMoKQorICAgICAgKCcyNCcsICcxNjMyJykKKworICAgSWYgd2UgbWFrZSB0aGUgZGVjaW1hbCBwbGFjZSBhbmQgZXZlcnl0aGluZyBhZnRlciBpdCBvcHRpb25hbCwgbm90IGFsbCBncm91cHMKKyAgIG1pZ2h0IHBhcnRpY2lwYXRlIGluIHRoZSBtYXRjaC4gIFRoZXNlIGdyb3VwcyB3aWxsIGRlZmF1bHQgdG8gYGBOb25lYGAgdW5sZXNzCisgICB0aGUgKmRlZmF1bHQqIGFyZ3VtZW50IGlzIGdpdmVuOgorCisgICAgICA+Pj4gbSA9IHJlLm1hdGNoKHIiKFxkKylcLj8oXGQrKT8iLCAiMjQiKQorICAgICAgPj4+IG0uZ3JvdXBzKCkgICAgICAjIFNlY29uZCBncm91cCBkZWZhdWx0cyB0byBOb25lLgorICAgICAgKCcyNCcsIE5vbmUpCisgICAgICA+Pj4gbS5ncm91cHMoJzAnKSAgICMgTm93LCB0aGUgc2Vjb25kIGdyb3VwIGRlZmF1bHRzIHRvICcwJy4KKyAgICAgICgnMjQnLCAnMCcpCiAKIAotICAgLi4gbWV0aG9kOjogTWF0Y2hPYmplY3Quc3RhcnQoW2dyb3VwXSkKLSAgICAgICAgICAgICAgIE1hdGNoT2JqZWN0LmVuZChbZ3JvdXBdKQorLi4gbWV0aG9kOjogbWF0Y2guZ3JvdXBkaWN0KGRlZmF1bHQ9Tm9uZSkKIAotICAgICAgUmV0dXJuIHRoZSBpbmRpY2VzIG9mIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSAqZ3JvdXAqOwotICAgICAgKmdyb3VwKiBkZWZhdWx0cyB0byB6ZXJvIChtZWFuaW5nIHRoZSB3aG9sZSBtYXRjaGVkIHN1YnN0cmluZykuIFJldHVybiBgYC0xYGAgaWYKLSAgICAgICpncm91cCogZXhpc3RzIGJ1dCBkaWQgbm90IGNvbnRyaWJ1dGUgdG8gdGhlIG1hdGNoLiAgRm9yIGEgbWF0Y2ggb2JqZWN0ICptKiwgYW5kCi0gICAgICBhIGdyb3VwICpnKiB0aGF0IGRpZCBjb250cmlidXRlIHRvIHRoZSBtYXRjaCwgdGhlIHN1YnN0cmluZyBtYXRjaGVkIGJ5IGdyb3VwICpnKgotICAgICAgKGVxdWl2YWxlbnQgdG8gYGBtLmdyb3VwKGcpYGApIGlzIDo6CisgICBSZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgYWxsIHRoZSAqbmFtZWQqIHN1Ymdyb3VwcyBvZiB0aGUgbWF0Y2gsIGtleWVkIGJ5CisgICB0aGUgc3ViZ3JvdXAgbmFtZS4gIFRoZSAqZGVmYXVsdCogYXJndW1lbnQgaXMgdXNlZCBmb3IgZ3JvdXBzIHRoYXQgZGlkIG5vdAorICAgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoOyBpdCBkZWZhdWx0cyB0byBgYE5vbmVgYC4gIEZvciBleGFtcGxlOgogCi0gICAgICAgICBtLnN0cmluZ1ttLnN0YXJ0KGcpOm0uZW5kKGcpXQotCi0gICAgICBOb3RlIHRoYXQgYGBtLnN0YXJ0KGdyb3VwKWBgIHdpbGwgZXF1YWwgYGBtLmVuZChncm91cClgYCBpZiAqZ3JvdXAqIG1hdGNoZWQgYQotICAgICAgbnVsbCBzdHJpbmcuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgYGBtID0gcmUuc2VhcmNoKCdiKGM/KScsICdjYmEnKWBgLAotICAgICAgYGBtLnN0YXJ0KDApYGAgaXMgMSwgYGBtLmVuZCgwKWBgIGlzIDIsIGBgbS5zdGFydCgxKWBgIGFuZCBgYG0uZW5kKDEpYGAgYXJlIGJvdGgKLSAgICAgIDIsIGFuZCBgYG0uc3RhcnQoMilgYCByYWlzZXMgYW4gOmV4YzpgSW5kZXhFcnJvcmAgZXhjZXB0aW9uLgotCi0gICAgICBBbiBleGFtcGxlIHRoYXQgd2lsbCByZW1vdmUgKnJlbW92ZV90aGlzKiBmcm9tIGVtYWlsIGFkZHJlc3NlczoKLQotICAgICAgICAgPj4+IGVtYWlsID0gInRvbnlAdGlyZW1vdmVfdGhpc2dlci5uZXQiCi0gICAgICAgICA+Pj4gbSA9IHJlLnNlYXJjaCgicmVtb3ZlX3RoaXMiLCBlbWFpbCkKLSAgICAgICAgID4+PiBlbWFpbFs6bS5zdGFydCgpXSArIGVtYWlsW20uZW5kKCk6XQotICAgICAgICAgJ3RvbnlAdGlnZXIubmV0JworICAgICAgPj4+IG0gPSByZS5tYXRjaChyIig/UDxmaXJzdF9uYW1lPlx3KykgKD9QPGxhc3RfbmFtZT5cdyspIiwgIk1hbGNvbG0gUmV5bm9sZHMiKQorICAgICAgPj4+IG0uZ3JvdXBkaWN0KCkKKyAgICAgIHsnZmlyc3RfbmFtZSc6ICdNYWxjb2xtJywgJ2xhc3RfbmFtZSc6ICdSZXlub2xkcyd9CiAKIAotICAgLi4gbWV0aG9kOjogTWF0Y2hPYmplY3Quc3BhbihbZ3JvdXBdKQorLi4gbWV0aG9kOjogbWF0Y2guc3RhcnQoW2dyb3VwXSkKKyAgICAgICAgICAgIG1hdGNoLmVuZChbZ3JvdXBdKQogCi0gICAgICBGb3IgOmNsYXNzOmBNYXRjaE9iamVjdGAgKm0qLCByZXR1cm4gdGhlIDItdHVwbGUgYGAobS5zdGFydChncm91cCksCi0gICAgICBtLmVuZChncm91cCkpYGAuIE5vdGUgdGhhdCBpZiAqZ3JvdXAqIGRpZCBub3QgY29udHJpYnV0ZSB0byB0aGUgbWF0Y2gsIHRoaXMgaXMKLSAgICAgIGBgKC0xLCAtMSlgYC4gICpncm91cCogZGVmYXVsdHMgdG8gemVybywgdGhlIGVudGlyZSBtYXRjaC4KKyAgIFJldHVybiB0aGUgaW5kaWNlcyBvZiB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3Vic3RyaW5nIG1hdGNoZWQgYnkgKmdyb3VwKjsKKyAgICpncm91cCogZGVmYXVsdHMgdG8gemVybyAobWVhbmluZyB0aGUgd2hvbGUgbWF0Y2hlZCBzdWJzdHJpbmcpLiBSZXR1cm4gYGAtMWBgIGlmCisgICAqZ3JvdXAqIGV4aXN0cyBidXQgZGlkIG5vdCBjb250cmlidXRlIHRvIHRoZSBtYXRjaC4gIEZvciBhIG1hdGNoIG9iamVjdCAqbSosIGFuZAorICAgYSBncm91cCAqZyogdGhhdCBkaWQgY29udHJpYnV0ZSB0byB0aGUgbWF0Y2gsIHRoZSBzdWJzdHJpbmcgbWF0Y2hlZCBieSBncm91cCAqZyoKKyAgIChlcXVpdmFsZW50IHRvIGBgbS5ncm91cChnKWBgKSBpcyA6OgorCisgICAgICBtLnN0cmluZ1ttLnN0YXJ0KGcpOm0uZW5kKGcpXQorCisgICBOb3RlIHRoYXQgYGBtLnN0YXJ0KGdyb3VwKWBgIHdpbGwgZXF1YWwgYGBtLmVuZChncm91cClgYCBpZiAqZ3JvdXAqIG1hdGNoZWQgYQorICAgbnVsbCBzdHJpbmcuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgYGBtID0gcmUuc2VhcmNoKCdiKGM/KScsICdjYmEnKWBgLAorICAgYGBtLnN0YXJ0KDApYGAgaXMgMSwgYGBtLmVuZCgwKWBgIGlzIDIsIGBgbS5zdGFydCgxKWBgIGFuZCBgYG0uZW5kKDEpYGAgYXJlIGJvdGgKKyAgIDIsIGFuZCBgYG0uc3RhcnQoMilgYCByYWlzZXMgYW4gOmV4YzpgSW5kZXhFcnJvcmAgZXhjZXB0aW9uLgorCisgICBBbiBleGFtcGxlIHRoYXQgd2lsbCByZW1vdmUgKnJlbW92ZV90aGlzKiBmcm9tIGVtYWlsIGFkZHJlc3NlczoKKworICAgICAgPj4+IGVtYWlsID0gInRvbnlAdGlyZW1vdmVfdGhpc2dlci5uZXQiCisgICAgICA+Pj4gbSA9IHJlLnNlYXJjaCgicmVtb3ZlX3RoaXMiLCBlbWFpbCkKKyAgICAgID4+PiBlbWFpbFs6bS5zdGFydCgpXSArIGVtYWlsW20uZW5kKCk6XQorICAgICAgJ3RvbnlAdGlnZXIubmV0JwogCiAKLSAgIC4uIGF0dHJpYnV0ZTo6IE1hdGNoT2JqZWN0LnBvcworLi4gbWV0aG9kOjogbWF0Y2guc3BhbihbZ3JvdXBdKQogCi0gICAgICBUaGUgdmFsdWUgb2YgKnBvcyogd2hpY2ggd2FzIHBhc3NlZCB0byB0aGUgOm1ldGg6YH5SZWdleE9iamVjdC5zZWFyY2hgIG9yCi0gICAgICA6bWV0aDpgflJlZ2V4T2JqZWN0Lm1hdGNoYCBtZXRob2Qgb2YgdGhlIDpjbGFzczpgUmVnZXhPYmplY3RgLiAgVGhpcyBpcyB0aGUKLSAgICAgIGluZGV4IGludG8gdGhlIHN0cmluZyBhdCB3aGljaCB0aGUgUkUgZW5naW5lIHN0YXJ0ZWQgbG9va2luZyBmb3IgYSBtYXRjaC4KKyAgIEZvciBhIG1hdGNoICptKiwgcmV0dXJuIHRoZSAyLXR1cGxlIGBgKG0uc3RhcnQoZ3JvdXApLCBtLmVuZChncm91cCkpYGAuIE5vdGUKKyAgIHRoYXQgaWYgKmdyb3VwKiBkaWQgbm90IGNvbnRyaWJ1dGUgdG8gdGhlIG1hdGNoLCB0aGlzIGlzIGBgKC0xLCAtMSlgYC4KKyAgICpncm91cCogZGVmYXVsdHMgdG8gemVybywgdGhlIGVudGlyZSBtYXRjaC4KIAogCi0gICAuLiBhdHRyaWJ1dGU6OiBNYXRjaE9iamVjdC5lbmRwb3MKKy4uIGF0dHJpYnV0ZTo6IG1hdGNoLnBvcwogCi0gICAgICBUaGUgdmFsdWUgb2YgKmVuZHBvcyogd2hpY2ggd2FzIHBhc3NlZCB0byB0aGUgOm1ldGg6YH5SZWdleE9iamVjdC5zZWFyY2hgIG9yCi0gICAgICA6bWV0aDpgflJlZ2V4T2JqZWN0Lm1hdGNoYCBtZXRob2Qgb2YgdGhlIDpjbGFzczpgUmVnZXhPYmplY3RgLiAgVGhpcyBpcyB0aGUKLSAgICAgIGluZGV4IGludG8gdGhlIHN0cmluZyBiZXlvbmQgd2hpY2ggdGhlIFJFIGVuZ2luZSB3aWxsIG5vdCBnby4KKyAgIFRoZSB2YWx1ZSBvZiAqcG9zKiB3aGljaCB3YXMgcGFzc2VkIHRvIHRoZSA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgb3IKKyAgIDptZXRoOmB+cmVnZXgubWF0Y2hgIG1ldGhvZCBvZiBhIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgVGhpcworICAgaXMgdGhlIGluZGV4IGludG8gdGhlIHN0cmluZyBhdCB3aGljaCB0aGUgUkUgZW5naW5lIHN0YXJ0ZWQgbG9va2luZyBmb3IgYQorICAgbWF0Y2guCiAKIAotICAgLi4gYXR0cmlidXRlOjogTWF0Y2hPYmplY3QubGFzdGluZGV4CisuLiBhdHRyaWJ1dGU6OiBtYXRjaC5lbmRwb3MKIAotICAgICAgVGhlIGludGVnZXIgaW5kZXggb2YgdGhlIGxhc3QgbWF0Y2hlZCBjYXB0dXJpbmcgZ3JvdXAsIG9yIGBgTm9uZWBgIGlmIG5vIGdyb3VwCi0gICAgICB3YXMgbWF0Y2hlZCBhdCBhbGwuIEZvciBleGFtcGxlLCB0aGUgZXhwcmVzc2lvbnMgYGAoYSliYGAsIGBgKChhKShiKSlgYCwgYW5kCi0gICAgICBgYCgoYWIpKWBgIHdpbGwgaGF2ZSBgYGxhc3RpbmRleCA9PSAxYGAgaWYgYXBwbGllZCB0byB0aGUgc3RyaW5nIGBgJ2FiJ2BgLCB3aGlsZQotICAgICAgdGhlIGV4cHJlc3Npb24gYGAoYSkoYilgYCB3aWxsIGhhdmUgYGBsYXN0aW5kZXggPT0gMmBgLCBpZiBhcHBsaWVkIHRvIHRoZSBzYW1lCi0gICAgICBzdHJpbmcuCisgICBUaGUgdmFsdWUgb2YgKmVuZHBvcyogd2hpY2ggd2FzIHBhc3NlZCB0byB0aGUgOm1ldGg6YH5yZWdleC5zZWFyY2hgIG9yCisgICA6bWV0aDpgfnJlZ2V4Lm1hdGNoYCBtZXRob2Qgb2YgYSA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFRoaXMKKyAgIGlzIHRoZSBpbmRleCBpbnRvIHRoZSBzdHJpbmcgYmV5b25kIHdoaWNoIHRoZSBSRSBlbmdpbmUgd2lsbCBub3QgZ28uCiAKIAotICAgLi4gYXR0cmlidXRlOjogTWF0Y2hPYmplY3QubGFzdGdyb3VwCisuLiBhdHRyaWJ1dGU6OiBtYXRjaC5sYXN0aW5kZXgKIAotICAgICAgVGhlIG5hbWUgb2YgdGhlIGxhc3QgbWF0Y2hlZCBjYXB0dXJpbmcgZ3JvdXAsIG9yIGBgTm9uZWBgIGlmIHRoZSBncm91cCBkaWRuJ3QKLSAgICAgIGhhdmUgYSBuYW1lLCBvciBpZiBubyBncm91cCB3YXMgbWF0Y2hlZCBhdCBhbGwuCisgICBUaGUgaW50ZWdlciBpbmRleCBvZiB0aGUgbGFzdCBtYXRjaGVkIGNhcHR1cmluZyBncm91cCwgb3IgYGBOb25lYGAgaWYgbm8gZ3JvdXAKKyAgIHdhcyBtYXRjaGVkIGF0IGFsbC4gRm9yIGV4YW1wbGUsIHRoZSBleHByZXNzaW9ucyBgYChhKWJgYCwgYGAoKGEpKGIpKWBgLCBhbmQKKyAgIGBgKChhYikpYGAgd2lsbCBoYXZlIGBgbGFzdGluZGV4ID09IDFgYCBpZiBhcHBsaWVkIHRvIHRoZSBzdHJpbmcgYGAnYWInYGAsIHdoaWxlCisgICB0aGUgZXhwcmVzc2lvbiBgYChhKShiKWBgIHdpbGwgaGF2ZSBgYGxhc3RpbmRleCA9PSAyYGAsIGlmIGFwcGxpZWQgdG8gdGhlIHNhbWUKKyAgIHN0cmluZy4KIAogCi0gICAuLiBhdHRyaWJ1dGU6OiBNYXRjaE9iamVjdC5yZQorLi4gYXR0cmlidXRlOjogbWF0Y2gubGFzdGdyb3VwCiAKLSAgICAgIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IHdob3NlIDptZXRoOmB+UmVnZXhPYmplY3QubWF0Y2hgIG9yCi0gICAgICA6bWV0aDpgflJlZ2V4T2JqZWN0LnNlYXJjaGAgbWV0aG9kIHByb2R1Y2VkIHRoaXMgOmNsYXNzOmBNYXRjaE9iamVjdGAKLSAgICAgIGluc3RhbmNlLgorICAgVGhlIG5hbWUgb2YgdGhlIGxhc3QgbWF0Y2hlZCBjYXB0dXJpbmcgZ3JvdXAsIG9yIGBgTm9uZWBgIGlmIHRoZSBncm91cCBkaWRuJ3QKKyAgIGhhdmUgYSBuYW1lLCBvciBpZiBubyBncm91cCB3YXMgbWF0Y2hlZCBhdCBhbGwuCiAKIAotICAgLi4gYXR0cmlidXRlOjogTWF0Y2hPYmplY3Quc3RyaW5nCisuLiBhdHRyaWJ1dGU6OiBtYXRjaC5yZQogCi0gICAgICBUaGUgc3RyaW5nIHBhc3NlZCB0byA6bWV0aDpgflJlZ2V4T2JqZWN0Lm1hdGNoYCBvcgotICAgICAgOm1ldGg6YH5SZWdleE9iamVjdC5zZWFyY2hgLgorICAgVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3Qgd2hvc2UgOm1ldGg6YH5yZWdleC5tYXRjaGAgb3IKKyAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBtZXRob2QgcHJvZHVjZWQgdGhpcyBtYXRjaCBpbnN0YW5jZS4KIAogCi1FeGFtcGxlcwotLS0tLS0tLS0KKy4uIGF0dHJpYnV0ZTo6IG1hdGNoLnN0cmluZworCisgICBUaGUgc3RyaW5nIHBhc3NlZCB0byA6bWV0aDpgfnJlZ2V4Lm1hdGNoYCBvciA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAuCisKKworLi4gX3JlLWV4YW1wbGVzOgorCitSZWd1bGFyIEV4cHJlc3Npb24gRXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKIENoZWNraW5nIEZvciBhIFBhaXIKQEAgLTEwMzUsOCArMTAzNyw3IEBACiAgICAiPE1hdGNoOiAnMzU0YWEnLCBncm91cHM9KCdhJywpPiIKIAogVG8gZmluZCBvdXQgd2hhdCBjYXJkIHRoZSBwYWlyIGNvbnNpc3RzIG9mLCBvbmUgY291bGQgdXNlIHRoZQotOm1ldGg6YH5NYXRjaE9iamVjdC5ncm91cGAgbWV0aG9kIG9mIDpjbGFzczpgTWF0Y2hPYmplY3RgIGluIHRoZSBmb2xsb3dpbmcKLW1hbm5lcjoKKzptZXRoOmB+bWF0Y2guZ3JvdXBgIG1ldGhvZCBvZiB0aGUgbWF0Y2ggb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgogCiAuLiBkb2N0ZXN0OjoKIApAQCAtMTA1OSwxNCArMTA2MCwxNCBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogc2NhbmYoKQogCi1QeXRob24gZG9lcyBub3QgY3VycmVudGx5IGhhdmUgYW4gZXF1aXZhbGVudCB0byA6Y2Z1bmM6YHNjYW5mYC4gIFJlZ3VsYXIKK1B5dGhvbiBkb2VzIG5vdCBjdXJyZW50bHkgaGF2ZSBhbiBlcXVpdmFsZW50IHRvIDpjOmZ1bmM6YHNjYW5mYC4gIFJlZ3VsYXIKIGV4cHJlc3Npb25zIGFyZSBnZW5lcmFsbHkgbW9yZSBwb3dlcmZ1bCwgdGhvdWdoIGFsc28gbW9yZSB2ZXJib3NlLCB0aGFuCi06Y2Z1bmM6YHNjYW5mYCBmb3JtYXQgc3RyaW5ncy4gIFRoZSB0YWJsZSBiZWxvdyBvZmZlcnMgc29tZSBtb3JlLW9yLWxlc3MKLWVxdWl2YWxlbnQgbWFwcGluZ3MgYmV0d2VlbiA6Y2Z1bmM6YHNjYW5mYCBmb3JtYXQgdG9rZW5zIGFuZCByZWd1bGFyCis6YzpmdW5jOmBzY2FuZmAgZm9ybWF0IHN0cmluZ3MuICBUaGUgdGFibGUgYmVsb3cgb2ZmZXJzIHNvbWUgbW9yZS1vci1sZXNzCitlcXVpdmFsZW50IG1hcHBpbmdzIGJldHdlZW4gOmM6ZnVuYzpgc2NhbmZgIGZvcm1hdCB0b2tlbnMgYW5kIHJlZ3VsYXIKIGV4cHJlc3Npb25zLgogCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6Y2Z1bmM6YHNjYW5mYCBUb2tlbiAgICAgICAgICAgfCBSZWd1bGFyIEV4cHJlc3Npb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgOmM6ZnVuYzpgc2NhbmZgIFRva2VuICAgICAgICAgIHwgUmVndWxhciBFeHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwogfCBgYCVjYGAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYC5gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMDkxLDcgKzEwOTIsNyBAQAogCiAgICAvdXNyL3NiaW4vc2VuZG1haWwgLSAwIGVycm9ycywgNCB3YXJuaW5ncwogCi15b3Ugd291bGQgdXNlIGEgOmNmdW5jOmBzY2FuZmAgZm9ybWF0IGxpa2UgOjoKK3lvdSB3b3VsZCB1c2UgYSA6YzpmdW5jOmBzY2FuZmAgZm9ybWF0IGxpa2UgOjoKIAogICAgJXMgLSAlZCBlcnJvcnMsICVkIHdhcm5pbmdzCiAKQEAgLTExMTEsNyArMTExMiw3IEBACiAgICA+Pj4gcmUubWF0Y2goJ0JlZ2luIChcd3wgKSo/IGVuZCcsIHMpLmVuZCgpCiAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID8KLSAgICAgRmlsZSAiL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4xL3JlLnB5IiwgbGluZSAxMzIsIGluIG1hdGNoCisgICAgIEZpbGUgIi91c3IvbG9jYWwvbGliL3B5dGhvbjMuMi9yZS5weSIsIGxpbmUgMTMyLCBpbiBtYXRjaAogICAgICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykubWF0Y2goc3RyaW5nKQogICAgUnVudGltZUVycm9yOiBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZAogCkBAIC0xMjUwLDEwICsxMjUxLDEwIEBACiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAogSWYgb25lIHdhbnRzIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG1hdGNoZXMgb2YgYSBwYXR0ZXJuIHRoYW4gdGhlIG1hdGNoZWQKLXRleHQsIDpmdW5jOmBmaW5kaXRlcmAgaXMgdXNlZnVsIGFzIGl0IHByb3ZpZGVzIGluc3RhbmNlcyBvZgotOmNsYXNzOmBNYXRjaE9iamVjdGAgaW5zdGVhZCBvZiBzdHJpbmdzLiAgQ29udGludWluZyB3aXRoIHRoZSBwcmV2aW91cyBleGFtcGxlLAotaWYgb25lIHdhcyBhIHdyaXRlciB3aG8gd2FudGVkIHRvIGZpbmQgYWxsIG9mIHRoZSBhZHZlcmJzICphbmQgdGhlaXIgcG9zaXRpb25zKgotaW4gc29tZSB0ZXh0LCBoZSBvciBzaGUgd291bGQgdXNlIDpmdW5jOmBmaW5kaXRlcmAgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6Cit0ZXh0LCA6ZnVuYzpgZmluZGl0ZXJgIGlzIHVzZWZ1bCBhcyBpdCBwcm92aWRlcyA6cmVmOmBtYXRjaCBvYmplY3RzCis8bWF0Y2gtb2JqZWN0cz5gIGluc3RlYWQgb2Ygc3RyaW5ncy4gIENvbnRpbnVpbmcgd2l0aCB0aGUgcHJldmlvdXMgZXhhbXBsZSwgaWYKK29uZSB3YXMgYSB3cml0ZXIgd2hvIHdhbnRlZCB0byBmaW5kIGFsbCBvZiB0aGUgYWR2ZXJicyAqYW5kIHRoZWlyIHBvc2l0aW9ucyogaW4KK3NvbWUgdGV4dCwgaGUgb3Igc2hlIHdvdWxkIHVzZSA6ZnVuYzpgZmluZGl0ZXJgIGluIHRoZSBmb2xsb3dpbmcgbWFubmVyOgogCiAgICA+Pj4gdGV4dCA9ICJIZSB3YXMgY2FyZWZ1bGx5IGRpc2d1aXNlZCBidXQgY2FwdHVyZWQgcXVpY2tseSBieSBwb2xpY2UuIgogICAgPj4+IGZvciBtIGluIHJlLmZpbmRpdGVyKHIiXHcrbHkiLCB0ZXh0KToKQEAgLTEyODQsMyArMTI4NSw2OSBAQAogICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorCisKK1dyaXRpbmcgYSBUb2tlbml6ZXIKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworQSBgdG9rZW5pemVyIG9yIHNjYW5uZXIgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTGV4aWNhbF9hbmFseXNpcz5gXworYW5hbHl6ZXMgYSBzdHJpbmcgdG8gY2F0ZWdvcml6ZSBncm91cHMgb2YgY2hhcmFjdGVycy4gIFRoaXMgaXMgYSB1c2VmdWwgZmlyc3QKK3N0ZXAgaW4gd3JpdGluZyBhIGNvbXBpbGVyIG9yIGludGVycHJldGVyLgorCitUaGUgdGV4dCBjYXRlZ29yaWVzIGFyZSBzcGVjaWZpZWQgd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zLiAgVGhlIHRlY2huaXF1ZSBpcwordG8gY29tYmluZSB0aG9zZSBpbnRvIGEgc2luZ2xlIG1hc3RlciByZWd1bGFyIGV4cHJlc3Npb24gYW5kIHRvIGxvb3Agb3Zlcgorc3VjY2Vzc2l2ZSBtYXRjaGVzOjoKKworICAgIFRva2VuID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnVG9rZW4nLCAndHlwIHZhbHVlIGxpbmUgY29sdW1uJykKKworICAgIGRlZiB0b2tlbml6ZShzKToKKyAgICAgICAga2V5d29yZHMgPSB7J0lGJywgJ1RIRU4nLCAnRk9SJywgJ05FWFQnLCAnR09TVUInLCAnUkVUVVJOJ30KKyAgICAgICAgdG9rX3NwZWMgPSBbCisgICAgICAgICAgICAoJ05VTUJFUicsIHInXGQrKFwuXGQqKT8nKSwgIyBJbnRlZ2VyIG9yIGRlY2ltYWwgbnVtYmVyCisgICAgICAgICAgICAoJ0FTU0lHTicsIHInOj0nKSwgICAgICAgICAgIyBBc3NpZ25tZW50IG9wZXJhdG9yCisgICAgICAgICAgICAoJ0VORCcsICc7JyksICAgICAgICAgICAgICAgIyBTdGF0ZW1lbnQgdGVybWluYXRvcgorICAgICAgICAgICAgKCdJRCcsIHInW0EtWmEtel0rJyksICAgICAgICMgSWRlbnRpZmllcnMKKyAgICAgICAgICAgICgnT1AnLCByJ1srKlwvXC1dJyksICAgICAgICAjIEFyaXRobWV0aWMgb3BlcmF0b3JzCisgICAgICAgICAgICAoJ05FV0xJTkUnLCByJ1xuJyksICAgICAgICAgIyBMaW5lIGVuZGluZ3MKKyAgICAgICAgICAgICgnU0tJUCcsIHInWyBcdF0nKSwgICAgICAgICAjIFNraXAgb3ZlciBzcGFjZXMgYW5kIHRhYnMKKyAgICAgICAgXQorICAgICAgICB0b2tfcmUgPSAnfCcuam9pbignKD9QPCVzPiVzKScgJSBwYWlyIGZvciBwYWlyIGluIHRva19zcGVjKQorICAgICAgICBnZXR0b2sgPSByZS5jb21waWxlKHRva19yZSkubWF0Y2gKKyAgICAgICAgbGluZSA9IDEKKyAgICAgICAgcG9zID0gbGluZV9zdGFydCA9IDAKKyAgICAgICAgbW8gPSBnZXR0b2socykKKyAgICAgICAgd2hpbGUgbW8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0eXAgPSBtby5sYXN0Z3JvdXAKKyAgICAgICAgICAgIGlmIHR5cCA9PSAnTkVXTElORSc6CisgICAgICAgICAgICAgICAgbGluZV9zdGFydCA9IHBvcworICAgICAgICAgICAgICAgIGxpbmUgKz0gMQorICAgICAgICAgICAgZWxpZiB0eXAgIT0gJ1NLSVAnOgorICAgICAgICAgICAgICAgIGlmIHR5cCA9PSAnSUQnIGFuZCB2YWwgaW4ga2V5d29yZHM6CisgICAgICAgICAgICAgICAgICAgIHR5cCA9IHZhbAorICAgICAgICAgICAgICAgIHlpZWxkIFRva2VuKHR5cCwgbW8uZ3JvdXAodHlwKSwgbGluZSwgbW8uc3RhcnQoKS1saW5lX3N0YXJ0KQorICAgICAgICAgICAgcG9zID0gbW8uZW5kKCkKKyAgICAgICAgICAgIG1vID0gZ2V0dG9rKHMsIHBvcykKKyAgICAgICAgaWYgcG9zICE9IGxlbihzKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVW5leHBlY3RlZCBjaGFyYWN0ZXIgJXIgb24gbGluZSAlZCcgJShzW3Bvc10sIGxpbmUpKQorCisgICAgPj4+IHN0YXRlbWVudHMgPSAnJydcCisgICAgICAgIHRvdGFsIDo9IHRvdGFsICsgcHJpY2UgKiBxdWFudGl0eTsKKyAgICAgICAgdGF4IDo9IHByaWNlICogMC4wNTsKKyAgICAnJycKKyAgICA+Pj4gZm9yIHRva2VuIGluIHRva2VuaXplKHN0YXRlbWVudHMpOgorICAgIC4uLiAgICAgcHJpbnQodG9rZW4pCisgICAgLi4uCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MSwgY29sdW1uPTgpCisgICAgVG9rZW4odHlwPSdBU1NJR04nLCB2YWx1ZT0nOj0nLCBsaW5lPTEsIGNvbHVtbj0xNCkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3RvdGFsJywgbGluZT0xLCBjb2x1bW49MTcpCisgICAgVG9rZW4odHlwPSdPUCcsIHZhbHVlPScrJywgbGluZT0xLCBjb2x1bW49MjMpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9MSwgY29sdW1uPTI1KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9MSwgY29sdW1uPTMxKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncXVhbnRpdHknLCBsaW5lPTEsIGNvbHVtbj0zMykKKyAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT0xLCBjb2x1bW49NDEpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0YXgnLCBsaW5lPTIsIGNvbHVtbj05KQorICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT0yLCBjb2x1bW49MTMpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSdwcmljZScsIGxpbmU9MiwgY29sdW1uPTE2KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKicsIGxpbmU9MiwgY29sdW1uPTIyKQorICAgIFRva2VuKHR5cD0nTlVNQkVSJywgdmFsdWU9JzAuMDUnLCBsaW5lPTIsIGNvbHVtbj0yNCkKKyAgICBUb2tlbih0eXA9J0VORCcsIHZhbHVlPSc7JywgbGluZT0yLCBjb2x1bW49MjgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKaW5kZXggYWI3YjRiNi4uYWI1NTE5NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcmVhZGxpbmVgIC0tLSBHTlUgcmVhZGxpbmUgaW50ZXJmYWNlCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMjUsNiArMjQsNyBAQAogICB5b3UgY2FuIGNoZWNrIGZvciB0aGUgdGV4dCAibGliZWRpdCIgaW4gOmNvbnN0OmByZWFkbGluZS5fX2RvY19fYAogICB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gR05VIHJlYWRsaW5lIGFuZCBsaWJlZGl0LgogCisKIFRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIApAQCAtMTc3LDcgKzE3Nyw2IEBACiAKICAgIEFwcGVuZCBhIGxpbmUgdG8gdGhlIGhpc3RvcnkgYnVmZmVyLCBhcyBpZiBpdCB3YXMgdGhlIGxhc3QgbGluZSB0eXBlZC4KIAotCiAuLiBzZWVhbHNvOjoKIAogICAgTW9kdWxlIDptb2Q6YHJsY29tcGxldGVyYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVwcmxpYi5yc3QgYi9Eb2MvbGlicmFyeS9yZXBybGliLnJzdAppbmRleCA5NThlYWQ2Li4wZTg3MGRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZXBybGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXBybGliLnJzdApAQCAtMSwxMSArMSwxMyBAQAogOm1vZDpgcmVwcmxpYmAgLS0tIEFsdGVybmF0ZSA6ZnVuYzpgcmVwcmAgaW1wbGVtZW50YXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLQogLi4gbW9kdWxlOjogcmVwcmxpYgogICAgOnN5bm9wc2lzOiBBbHRlcm5hdGUgcmVwcigpIGltcGxlbWVudGF0aW9uIHdpdGggc2l6ZSBsaW1pdHMuCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvcmVwcmxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHJlcHJsaWJgIG1vZHVsZSBwcm92aWRlcyBhIG1lYW5zIGZvciBwcm9kdWNpbmcgb2JqZWN0IHJlcHJlc2VudGF0aW9ucwogd2l0aCBsaW1pdHMgb24gdGhlIHNpemUgb2YgdGhlIHJlc3VsdGluZyBzdHJpbmdzLiBUaGlzIGlzIHVzZWQgaW4gdGhlIFB5dGhvbgpAQCAtMzUsNiArMzcsMjkgQEAKICAgIHNpbWlsYXIgdG8gdGhhdCByZXR1cm5lZCBieSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSwgYnV0IHdpdGgKICAgIGxpbWl0cyBvbiBtb3N0IHNpemVzLgogCitJbiBhZGRpdGlvbiB0byBzaXplLWxpbWl0aW5nIHRvb2xzLCB0aGUgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBkZWNvcmF0b3IgZm9yCitkZXRlY3RpbmcgcmVjdXJzaXZlIGNhbGxzIHRvIDptZXRoOmBfX3JlcHJfX2AgYW5kIHN1YnN0aXR1dGluZyBhIHBsYWNlaG9sZGVyCitzdHJpbmcgaW5zdGVhZC4KKworLi4gZGVjb3JhdG9yOjogcmVjdXJzaXZlX3JlcHIoZmlsbHZhbHVlPSIuLi4iKQorCisgICBEZWNvcmF0b3IgZm9yIDptZXRoOmBfX3JlcHJfX2AgbWV0aG9kcyB0byBkZXRlY3QgcmVjdXJzaXZlIGNhbGxzIHdpdGhpbiB0aGUKKyAgIHNhbWUgdGhyZWFkLiAgSWYgYSByZWN1cnNpdmUgY2FsbCBpcyBtYWRlLCB0aGUgKmZpbGx2YWx1ZSogaXMgcmV0dXJuZWQsCisgICBvdGhlcndpc2UsIHRoZSB1c3VhbCA6bWV0aDpgX19yZXByX19gIGNhbGwgaXMgbWFkZS4gIEZvciBleGFtcGxlOgorCisgICAgICAgID4+PiBjbGFzcyBNeUxpc3QobGlzdCk6CisgICAgICAgIC4uLiAgICAgQHJlY3Vyc2l2ZV9yZXByKCkKKyAgICAgICAgLi4uICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICAgcmV0dXJuICc8JyArICd8Jy5qb2luKG1hcChyZXByLCBzZWxmKSkgKyAnPicKKyAgICAgICAgLi4uCisgICAgICAgID4+PiBtID0gTXlMaXN0KCdhYmMnKQorICAgICAgICA+Pj4gbS5hcHBlbmQobSkKKyAgICAgICAgPj4+IG0uYXBwZW5kKCd4JykKKyAgICAgICAgPj4+IHByaW50KG0pCisgICAgICAgIDwnYSd8J2InfCdjJ3wuLi58J3gnPgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiAuLiBfcmVwci1vYmplY3RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKaW5kZXggZmJkNzIwNC4uYzE2YjAxMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcmVzb3VyY2VgIC0tLSBSZXNvdXJjZSB1c2FnZSBpbmZvcm1hdGlvbgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0yMTgsMTQgKzIxNywxNCBAQAogCiAuLiBkYXRhOjogUlVTQUdFX1NFTEYKIAotICAgOmNvbnN0OmBSVVNBR0VfU0VMRmAgc2hvdWxkIGJlIHVzZWQgdG8gcmVxdWVzdCBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIG9ubHkgdG8KLSAgIHRoZSBwcm9jZXNzIGl0c2VsZi4KKyAgIFBhc3MgdG8gOmZ1bmM6YGdldHJ1c2FnZWAgdG8gcmVxdWVzdCByZXNvdXJjZXMgY29uc3VtZWQgYnkgdGhlIGNhbGxpbmcKKyAgIHByb2Nlc3MsIHdoaWNoIGlzIHRoZSBzdW0gb2YgcmVzb3VyY2VzIHVzZWQgYnkgYWxsIHRocmVhZHMgaW4gdGhlIHByb2Nlc3MuCiAKIAogLi4gZGF0YTo6IFJVU0FHRV9DSElMRFJFTgogCi0gICBQYXNzIHRvIDpmdW5jOmBnZXRydXNhZ2VgIHRvIHJlcXVlc3QgcmVzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGNoaWxkIHByb2Nlc3NlcyBvZgotICAgdGhlIGNhbGxpbmcgcHJvY2Vzcy4KKyAgIFBhc3MgdG8gOmZ1bmM6YGdldHJ1c2FnZWAgdG8gcmVxdWVzdCByZXNvdXJjZXMgY29uc3VtZWQgYnkgY2hpbGQgcHJvY2Vzc2VzCisgICBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIHdoaWNoIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCB3YWl0ZWQgZm9yLgogCiAKIC4uIGRhdGE6OiBSVVNBR0VfQk9USApAQCAtMjMzLDMgKzIzMiwxMCBAQAogICAgUGFzcyB0byA6ZnVuYzpgZ2V0cnVzYWdlYCB0byByZXF1ZXN0IHJlc291cmNlcyBjb25zdW1lZCBieSBib3RoIHRoZSBjdXJyZW50CiAgICBwcm9jZXNzIGFuZCBjaGlsZCBwcm9jZXNzZXMuICBNYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcy4KIAorCisuLiBkYXRhOjogUlVTQUdFX1RIUkVBRAorCisgICBQYXNzIHRvIDpmdW5jOmBnZXRydXNhZ2VgIHRvIHJlcXVlc3QgcmVzb3VyY2VzIGNvbnN1bWVkIGJ5IHRoZSBjdXJyZW50CisgICB0aHJlYWQuICBNYXkgbm90IGJlIGF2YWlsYWJsZSBvbiBhbGwgc3lzdGVtcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKaW5kZXggNmIzYmVmYy4uNjMzMDg4ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgcmxjb21wbGV0ZXJgIC0tLSBDb21wbGV0aW9uIGZ1bmN0aW9uIGZvciBHTlUgcmVhZGxpbmUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTYsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IFB5dGhvbiBpZGVudGlmaWVyIGNvbXBsZXRpb24sIHN1aXRhYmxlIGZvciB0aGUgR05VIHJlYWRsaW5lIGxpYnJhcnkuCiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9ybGNvbXBsZXRlci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgZGVmaW5lcyBhIGNvbXBsZXRpb24gZnVuY3Rpb24gc3VpdGFibGUgZm9yIHRoZQogOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSBieSBjb21wbGV0aW5nIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVycyBhbmQga2V5d29yZHMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKaW5kZXggMWI0ODE2Ny4uNGRmNjIyYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcnVucHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdApAQCAtNSw3MSArNSwxMzIgQEAKICAgIDpzeW5vcHNpczogTG9jYXRlIGFuZCBydW4gUHl0aG9uIG1vZHVsZXMgd2l0aG91dCBpbXBvcnRpbmcgdGhlbSBmaXJzdC4KIC4uIG1vZHVsZWF1dGhvcjo6IE5pY2sgQ29naGxhbiA8bmNvZ2hsYW5AZ21haWwuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9ydW5weS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHJ1bnB5YCBtb2R1bGUgaXMgdXNlZCB0byBsb2NhdGUgYW5kIHJ1biBQeXRob24gbW9kdWxlcyB3aXRob3V0Ci1pbXBvcnRpbmcgdGhlbSBmaXJzdC4gSXRzIG1haW4gdXNlIGlzIHRvIGltcGxlbWVudCB0aGUgOm9wdGlvbjpgLW1gIGNvbW1hbmQgbGluZQotc3dpdGNoIHRoYXQgYWxsb3dzIHNjcmlwdHMgdG8gYmUgbG9jYXRlZCB1c2luZyB0aGUgUHl0aG9uIG1vZHVsZSBuYW1lc3BhY2UKLXJhdGhlciB0aGFuIHRoZSBmaWxlc3lzdGVtLgoraW1wb3J0aW5nIHRoZW0gZmlyc3QuIEl0cyBtYWluIHVzZSBpcyB0byBpbXBsZW1lbnQgdGhlIDpvcHRpb246YC1tYCBjb21tYW5kCitsaW5lIHN3aXRjaCB0aGF0IGFsbG93cyBzY3JpcHRzIHRvIGJlIGxvY2F0ZWQgdXNpbmcgdGhlIFB5dGhvbiBtb2R1bGUKK25hbWVzcGFjZSByYXRoZXIgdGhhbiB0aGUgZmlsZXN5c3RlbS4KIAotV2hlbiBleGVjdXRlZCBhcyBhIHNjcmlwdCwgdGhlIG1vZHVsZSBlZmZlY3RpdmVseSBvcGVyYXRlcyBhcyBmb2xsb3dzOjoKLQotICAgZGVsIHN5cy5hcmd2WzBdICAjIFJlbW92ZSB0aGUgcnVucHkgbW9kdWxlIGZyb20gdGhlIGFyZ3VtZW50cwotICAgcnVuX21vZHVsZShzeXMuYXJndlswXSwgcnVuX25hbWU9Il9fbWFpbl9fIiwgYWx0ZXJfc3lzPVRydWUpCi0KLVRoZSA6bW9kOmBydW5weWAgbW9kdWxlIHByb3ZpZGVzIGEgc2luZ2xlIGZ1bmN0aW9uOgorVGhlIDptb2Q6YHJ1bnB5YCBtb2R1bGUgcHJvdmlkZXMgdHdvIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWVbLCBpbml0X2dsb2JhbHNdIFssIHJ1bl9uYW1lXVssIGFsdGVyX3N5c10pCisuLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpCiAKLSAgIEV4ZWN1dGUgdGhlIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIG1vZHVsZSBnbG9iYWxzCi0gICBkaWN0aW9uYXJ5LiBUaGUgbW9kdWxlJ3MgY29kZSBpcyBmaXJzdCBsb2NhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZCBpbXBvcnQKLSAgIG1lY2hhbmlzbSAocmVmZXIgdG8gUEVQIDMwMiBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYSBmcmVzaCBtb2R1bGUKLSAgIG5hbWVzcGFjZS4KKyAgIEV4ZWN1dGUgdGhlIGNvZGUgb2YgdGhlIHNwZWNpZmllZCBtb2R1bGUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIG1vZHVsZQorICAgZ2xvYmFscyBkaWN0aW9uYXJ5LiBUaGUgbW9kdWxlJ3MgY29kZSBpcyBmaXJzdCBsb2NhdGVkIHVzaW5nIHRoZSBzdGFuZGFyZAorICAgaW1wb3J0IG1lY2hhbmlzbSAocmVmZXIgdG8gOnBlcDpgMzAyYCBmb3IgZGV0YWlscykgYW5kIHRoZW4gZXhlY3V0ZWQgaW4gYQorICAgZnJlc2ggbW9kdWxlIG5hbWVzcGFjZS4KIAotICAgSWYgdGhlIHN1cHBsaWVkIG1vZHVsZSBuYW1lIHJlZmVycyB0byBhIHBhY2thZ2UgcmF0aGVyIHRoYW4gYSBub3JtYWwgbW9kdWxlLAotICAgdGhlbiB0aGF0IHBhY2thZ2UgaXMgaW1wb3J0ZWQgYW5kIHRoZSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlIHdpdGhpbiB0aGF0Ci0gICBwYWNrYWdlIGlzIHRoZW4gZXhlY3V0ZWQgYW5kIHRoZSByZXN1bHRpbmcgbW9kdWxlIGdsb2JhbHMgZGljdGlvbmFyeSByZXR1cm5lZC4KKyAgIElmIHRoZSBzdXBwbGllZCBtb2R1bGUgbmFtZSByZWZlcnMgdG8gYSBwYWNrYWdlIHJhdGhlciB0aGFuIGEgbm9ybWFsCisgICBtb2R1bGUsIHRoZW4gdGhhdCBwYWNrYWdlIGlzIGltcG9ydGVkIGFuZCB0aGUgYGBfX21haW5fX2BgIHN1Ym1vZHVsZSB3aXRoaW4KKyAgIHRoYXQgcGFja2FnZSBpcyB0aGVuIGV4ZWN1dGVkIGFuZCB0aGUgcmVzdWx0aW5nIG1vZHVsZSBnbG9iYWxzIGRpY3Rpb25hcnkKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwgZGljdGlvbmFyeSBhcmd1bWVudCAqaW5pdF9nbG9iYWxzKiBtYXkgYmUgdXNlZCB0byBwcmUtcG9wdWxhdGUgdGhlCi0gICBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBjb2RlIGlzIGV4ZWN1dGVkLiBUaGUgc3VwcGxpZWQgZGljdGlvbmFyeSB3aWxsIG5vdAotICAgYmUgbW9kaWZpZWQuIElmIGFueSBvZiB0aGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZQotICAgc3VwcGxpZWQgZGljdGlvbmFyeSwgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIG92ZXJyaWRkZW4gYnkgdGhlIGBgcnVuX21vZHVsZWBgCi0gICBmdW5jdGlvbi4KKyAgIFRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50ICppbml0X2dsb2JhbHMqIG1heSBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZQorICAgdGhlIG1vZHVsZSdzIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIGNvZGUgaXMgZXhlY3V0ZWQuIFRoZSBzdXBwbGllZAorICAgZGljdGlvbmFyeSB3aWxsIG5vdCBiZSBtb2RpZmllZC4gSWYgYW55IG9mIHRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMKKyAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKKyAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9tb2R1bGVgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fbG9hZGVyX19gYCwKLSAgIGBgX19idWlsdGluc19fYGAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlCi0gICB0aGUgbW9kdWxlIGNvZGUgaXMgZXhlY3V0ZWQuCisgICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwKKyAgIGBgX19sb2FkZXJfX2BgCisgICBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZQorICAgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYSBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlcgorICAgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbiBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgogCi0gICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBzdXBwbGllZCwgdG8KLSAgIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fJ2BgIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYSBwYWNrYWdlIGFuZCB0byB0aGUKLSAgICptb2RfbmFtZSogYXJndW1lbnQgb3RoZXJ3aXNlLgorICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CisgICA6Y29uc3Q6YE5vbmVgLCB0byBgYG1vZF9uYW1lICsgJy5fX21haW5fXydgYCBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEKKyAgIHBhY2thZ2UgYW5kIHRvIHRoZSAqbW9kX25hbWUqIGFyZ3VtZW50IG90aGVyd2lzZS4KIAotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSBQRVAgMzAyIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUgY29kZSBmb3IKLSAgIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZCBpbXBvcnQgbWVjaGFuaXNtKS4KKyAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZQorICAgbG9hZGVyIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldAorICAgdG8gOmNvbnN0OmBOb25lYC4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlIGxvYWRlcgotICAgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0IHRvIGBgTm9uZWBgLgorICAgYGBfX2NhY2hlZF9fYGAgd2lsbCBiZSBzZXQgdG8gYGBOb25lYGAuCiAKLSAgIGBgX19idWlsdGluc19fYGAgaXMgYXV0b21hdGljYWxseSBpbml0aWFsaXNlZCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSB0b3AgbGV2ZWwKLSAgIG5hbWVzcGFjZSBvZiB0aGUgOm1vZDpgYnVpbHRpbnNgIG1vZHVsZS4KKyAgIGBgX19sb2FkZXJfX2BgIGlzIHNldCB0byB0aGUgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIHVzZWQgdG8gcmV0cmlldmUgdGhlCisgICBjb2RlIGZvciB0aGUgbW9kdWxlIChUaGlzIGxvYWRlciBtYXkgYmUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgc3RhbmRhcmQKKyAgIGltcG9ydCBtZWNoYW5pc20pLgogCi0gICBgYF9fcGFja2FnZV9fYGAgaXMgc2V0IHRvICptb2RfbmFtZSogaWYgdGhlIG5hbWVkIG1vZHVsZSBpcyBhIHBhY2thZ2UgYW5kIHRvCi0gICBgYG1vZF9uYW1lLnJwYXJ0aXRpb24oJy4nKVswXWBgIG90aGVyd2lzZS4KKyAgIGBgX19wYWNrYWdlX19gYCBpcyBzZXQgdG8gKm1vZF9uYW1lKiBpZiB0aGUgbmFtZWQgbW9kdWxlIGlzIGEgcGFja2FnZSBhbmQKKyAgIHRvIGBgbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdYGAgb3RoZXJ3aXNlLgogCi0gICBJZiB0aGUgYXJndW1lbnQgKmFsdGVyX3N5cyogaXMgc3VwcGxpZWQgYW5kIGV2YWx1YXRlcyB0byBgYFRydWVgYCwgdGhlbgotICAgYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZAorICAgSWYgdGhlIGFyZ3VtZW50ICphbHRlcl9zeXMqIGlzIHN1cHBsaWVkIGFuZCBldmFsdWF0ZXMgdG8gOmNvbnN0OmBUcnVlYCwKKyAgIHRoZW4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZAogICAgYGBzeXMubW9kdWxlc1tfX25hbWVfX11gYCBpcyB1cGRhdGVkIHdpdGggYSB0ZW1wb3JhcnkgbW9kdWxlIG9iamVjdCBmb3IgdGhlCiAgICBtb2R1bGUgYmVpbmcgZXhlY3V0ZWQuIEJvdGggYGBzeXMuYXJndlswXWBgIGFuZCBgYHN5cy5tb2R1bGVzW19fbmFtZV9fXWBgCiAgICBhcmUgcmVzdG9yZWQgdG8gdGhlaXIgb3JpZ2luYWwgdmFsdWVzIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJucy4KIAotICAgTm90ZSB0aGF0IHRoaXMgbWFuaXB1bGF0aW9uIG9mIDptb2Q6YHN5c2AgaXMgbm90IHRocmVhZC1zYWZlLiBPdGhlciB0aHJlYWRzIG1heQotICAgc2VlIHRoZSBwYXJ0aWFsbHkgaW5pdGlhbGlzZWQgbW9kdWxlLCBhcyB3ZWxsIGFzIHRoZSBhbHRlcmVkIGxpc3Qgb2YgYXJndW1lbnRzLgotICAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgYmUgbGVmdCBhbG9uZSB3aGVuIGludm9raW5nIHRoaXMKLSAgIGZ1bmN0aW9uIGZyb20gdGhyZWFkZWQgY29kZS4KKyAgIE5vdGUgdGhhdCB0aGlzIG1hbmlwdWxhdGlvbiBvZiA6bW9kOmBzeXNgIGlzIG5vdCB0aHJlYWQtc2FmZS4gT3RoZXIgdGhyZWFkcworICAgbWF5IHNlZSB0aGUgcGFydGlhbGx5IGluaXRpYWxpc2VkIG1vZHVsZSwgYXMgd2VsbCBhcyB0aGUgYWx0ZXJlZCBsaXN0IG9mCisgICBhcmd1bWVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGJlIGxlZnQgYWxvbmUgd2hlbgorICAgaW52b2tpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRocmVhZGVkIGNvZGUuCisKIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gZXhlY3V0ZSBwYWNrYWdlcyBieSBsb29raW5nIGZvciBhIGBgX19tYWluX19gYCBzdWJtb2R1bGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBgYF9fY2FjaGVkX19gYCBnbG9iYWwgdmFyaWFibGUgKHNlZSA6UEVQOmAzMTQ3YCkuCisKKworLi4gZnVuY3Rpb246OiBydW5fcGF0aChmaWxlX3BhdGgsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKQorCisgICBFeGVjdXRlIHRoZSBjb2RlIGF0IHRoZSBuYW1lZCBmaWxlc3lzdGVtIGxvY2F0aW9uIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZworICAgbW9kdWxlIGdsb2JhbHMgZGljdGlvbmFyeS4gQXMgd2l0aCBhIHNjcmlwdCBuYW1lIHN1cHBsaWVkIHRvIHRoZSBDUHl0aG9uCisgICBjb21tYW5kIGxpbmUsIHRoZSBzdXBwbGllZCBwYXRoIG1heSByZWZlciB0byBhIFB5dGhvbiBzb3VyY2UgZmlsZSwgYQorICAgY29tcGlsZWQgYnl0ZWNvZGUgZmlsZSBvciBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5IGNvbnRhaW5pbmcgYSBgYF9fbWFpbl9fYGAKKyAgIG1vZHVsZSAoZS5nLiBhIHppcGZpbGUgY29udGFpbmluZyBhIHRvcC1sZXZlbCBgYF9fbWFpbl9fLnB5YGAgZmlsZSkuCisKKyAgIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoZSBzcGVjaWZpZWQgY29kZSBpcyBzaW1wbHkgZXhlY3V0ZWQgaW4gYSBmcmVzaAorICAgbW9kdWxlIG5hbWVzcGFjZS4gRm9yIGEgdmFsaWQgc3lzLnBhdGggZW50cnkgKHR5cGljYWxseSBhIHppcGZpbGUgb3IKKyAgIGRpcmVjdG9yeSksIHRoZSBlbnRyeSBpcyBmaXJzdCBhZGRlZCB0byB0aGUgYmVnaW5uaW5nIG9mIGBgc3lzLnBhdGhgYC4gVGhlCisgICBmdW5jdGlvbiB0aGVuIGxvb2tzIGZvciBhbmQgZXhlY3V0ZXMgYSA6bW9kOmBfX21haW5fX2AgbW9kdWxlIHVzaW5nIHRoZQorICAgdXBkYXRlZCBwYXRoLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gc3BlY2lhbCBwcm90ZWN0aW9uIGFnYWluc3QgaW52b2tpbmcKKyAgIGFuIGV4aXN0aW5nIDptb2Q6YF9fbWFpbl9fYCBlbnRyeSBsb2NhdGVkIGVsc2V3aGVyZSBvbiBgYHN5cy5wYXRoYGAgaWYKKyAgIHRoZXJlIGlzIG5vIHN1Y2ggbW9kdWxlIGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uCisKKyAgIFRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IGFyZ3VtZW50ICppbml0X2dsb2JhbHMqIG1heSBiZSB1c2VkIHRvIHByZS1wb3B1bGF0ZQorICAgdGhlIG1vZHVsZSdzIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIGNvZGUgaXMgZXhlY3V0ZWQuIFRoZSBzdXBwbGllZAorICAgZGljdGlvbmFyeSB3aWxsIG5vdCBiZSBtb2RpZmllZC4gSWYgYW55IG9mIHRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMKKyAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKKyAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9wYXRoYC4KKworICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2xvYWRlcl9fYGAKKyAgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscyBkaWN0aW9uYXJ5IGJlZm9yZSB0aGUgbW9kdWxlCisgICBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhIG1pbmltYWwgc2V0IG9mIHZhcmlhYmxlcyAtIG90aGVyCisgICB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuIGludGVycHJldGVyIGltcGxlbWVudGF0aW9uIGRldGFpbCkuCisKKyAgIGBgX19uYW1lX19gYCBpcyBzZXQgdG8gKnJ1bl9uYW1lKiBpZiB0aGlzIG9wdGlvbmFsIGFyZ3VtZW50IGlzIG5vdAorICAgOmNvbnN0OmBOb25lYCBhbmQgdG8gYGAnPHJ1bl9wYXRoPidgYCBvdGhlcndpc2UuCisKKyAgIGBgX19maWxlX19gYCBpcyBzZXQgdG8gdGhlIG5hbWUgcHJvdmlkZWQgYnkgdGhlIG1vZHVsZSBsb2FkZXIuIElmIHRoZQorICAgbG9hZGVyIGRvZXMgbm90IG1ha2UgZmlsZW5hbWUgaW5mb3JtYXRpb24gYXZhaWxhYmxlLCB0aGlzIHZhcmlhYmxlIGlzIHNldAorICAgdG8gOmNvbnN0OmBOb25lYC4gRm9yIGEgc2ltcGxlIHNjcmlwdCwgdGhpcyB3aWxsIGJlIHNldCB0byBgYGZpbGVfcGF0aGBgLgorCisgICBgYF9fbG9hZGVyX19gYCBpcyBzZXQgdG8gdGhlIDpwZXA6YDMwMmAgbW9kdWxlIGxvYWRlciB1c2VkIHRvIHJldHJpZXZlIHRoZQorICAgY29kZSBmb3IgdGhlIG1vZHVsZSAoVGhpcyBsb2FkZXIgbWF5IGJlIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkCisgICBpbXBvcnQgbWVjaGFuaXNtKS4gRm9yIGEgc2ltcGxlIHNjcmlwdCwgdGhpcyB3aWxsIGJlIHNldCB0byA6Y29uc3Q6YE5vbmVgLgorCisgICBgYF9fcGFja2FnZV9fYGAgaXMgc2V0IHRvIGBgX19uYW1lX18ucnBhcnRpdGlvbignLicpWzBdYGAuCisKKyAgIEEgbnVtYmVyIG9mIGFsdGVyYXRpb25zIGFyZSBhbHNvIG1hZGUgdG8gdGhlIDptb2Q6YHN5c2AgbW9kdWxlLiBGaXJzdGx5LAorICAgYGBzeXMucGF0aGBgIG1heSBiZSBhbHRlcmVkIGFzIGRlc2NyaWJlZCBhYm92ZS4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQKKyAgIHdpdGggdGhlIHZhbHVlIG9mIGBgZmlsZV9wYXRoYGAgYW5kIGBgc3lzLm1vZHVsZXNbX19uYW1lX19dYGAgaXMgdXBkYXRlZAorICAgd2l0aCBhIHRlbXBvcmFyeSBtb2R1bGUgb2JqZWN0IGZvciB0aGUgbW9kdWxlIGJlaW5nIGV4ZWN1dGVkLiBBbGwKKyAgIG1vZGlmaWNhdGlvbnMgdG8gaXRlbXMgaW4gOm1vZDpgc3lzYCBhcmUgcmV2ZXJ0ZWQgYmVmb3JlIHRoZSBmdW5jdGlvbgorICAgcmV0dXJucy4KKworICAgTm90ZSB0aGF0LCB1bmxpa2UgOmZ1bmM6YHJ1bl9tb2R1bGVgLCB0aGUgYWx0ZXJhdGlvbnMgbWFkZSB0byA6bW9kOmBzeXNgCisgICBhcmUgbm90IG9wdGlvbmFsIGluIHRoaXMgZnVuY3Rpb24gYXMgdGhlc2UgYWRqdXN0bWVudHMgYXJlIGVzc2VudGlhbCB0bworICAgYWxsb3dpbmcgdGhlIGV4ZWN1dGlvbiBvZiBzeXMucGF0aCBlbnRyaWVzLiBBcyB0aGUgdGhyZWFkLXNhZmV0eQorICAgbGltaXRhdGlvbnMgc3RpbGwgYXBwbHksIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGluIHRocmVhZGVkIGNvZGUgc2hvdWxkIGJlCisgICBlaXRoZXIgc2VyaWFsaXNlZCB3aXRoIHRoZSBpbXBvcnQgbG9jayBvciBkZWxlZ2F0ZWQgdG8gYSBzZXBhcmF0ZSBwcm9jZXNzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogLi4gc2VlYWxzbzo6CiAKQEAgLTc5LDMgKzE0MCw0IEBACiAgICA6cGVwOmAzNjZgIC0gTWFpbiBtb2R1bGUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cwogICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IE5pY2sgQ29naGxhbi4KIAorICAgOnJlZjpgdXNpbmctb24tZ2VuZXJhbGAgLSBDUHl0aG9uIGNvbW1hbmQgbGluZSBkZXRhaWxzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zY2hlZC5yc3QgYi9Eb2MvbGlicmFyeS9zY2hlZC5yc3QKaW5kZXggMDI5MGVjNC4uYWI1ODIzNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2NoZWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NjaGVkLnJzdApAQCAtNywxMCArNywxMyBAQAogCiAuLiBpbmRleDo6IHNpbmdsZTogZXZlbnQgc2NoZWR1bGluZwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zY2hlZC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHNjaGVkYCBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzIHdoaWNoIGltcGxlbWVudHMgYSBnZW5lcmFsIHB1cnBvc2UgZXZlbnQKIHNjaGVkdWxlcjoKIAotCiAuLiBjbGFzczo6IHNjaGVkdWxlcih0aW1lZnVuYywgZGVsYXlmdW5jKQogCiAgICBUaGUgOmNsYXNzOmBzY2hlZHVsZXJgIGNsYXNzIGRlZmluZXMgYSBnZW5lcmljIGludGVyZmFjZSB0byBzY2hlZHVsaW5nIGV2ZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IDcwZjczNzAuLmYxZmQxMjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgc2VsZWN0YCAtLS0gV2FpdGluZyBmb3IgSS9PIGNvbXBsZXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTYsOSArNSw5IEBACiAgICA6c3lub3BzaXM6IFdhaXQgZm9yIEkvTyBjb21wbGV0aW9uIG9uIG11bHRpcGxlIHN0cmVhbXMuCiAKIAotVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSA6Y2Z1bmM6YHNlbGVjdGAgYW5kIDpjZnVuYzpgcG9sbGAgZnVuY3Rpb25zCi1hdmFpbGFibGUgaW4gbW9zdCBvcGVyYXRpbmcgc3lzdGVtcywgOmNmdW5jOmBlcG9sbGAgYXZhaWxhYmxlIG9uIExpbnV4IDIuNSsgYW5kCi06Y2Z1bmM6YGtxdWV1ZWAgYXZhaWxhYmxlIG9uIG1vc3QgQlNELgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSA6YzpmdW5jOmBzZWxlY3RgIGFuZCA6YzpmdW5jOmBwb2xsYCBmdW5jdGlvbnMKK2F2YWlsYWJsZSBpbiBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zLCA6YzpmdW5jOmBlcG9sbGAgYXZhaWxhYmxlIG9uIExpbnV4IDIuNSsgYW5kCis6YzpmdW5jOmBrcXVldWVgIGF2YWlsYWJsZSBvbiBtb3N0IEJTRC4KIE5vdGUgdGhhdCBvbiBXaW5kb3dzLCBpdCBvbmx5IHdvcmtzIGZvciBzb2NrZXRzOyBvbiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcywKIGl0IGFsc28gd29ya3MgZm9yIG90aGVyIGZpbGUgdHlwZXMgKGluIHBhcnRpY3VsYXIsIG9uIFVuaXgsIGl0IHdvcmtzIG9uIHBpcGVzKS4KIEl0IGNhbm5vdCBiZSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGhhcyBncm93biBzaW5jZQpAQCAtMjAsMTEgKzE5LDExIEBACiAuLiBleGNlcHRpb246OiBlcnJvcgogCiAgICBUaGUgZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGVycm9yIG9jY3Vycy4gIFRoZSBhY2NvbXBhbnlpbmcgdmFsdWUgaXMgYSBwYWlyCi0gICBjb250YWluaW5nIHRoZSBudW1lcmljIGVycm9yIGNvZGUgZnJvbSA6Y2RhdGE6YGVycm5vYCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKLSAgIHN0cmluZywgYXMgd291bGQgYmUgcHJpbnRlZCBieSB0aGUgQyBmdW5jdGlvbiA6Y2Z1bmM6YHBlcnJvcmAuCisgICBjb250YWluaW5nIHRoZSBudW1lcmljIGVycm9yIGNvZGUgZnJvbSA6YzpkYXRhOmBlcnJub2AgYW5kIHRoZSBjb3JyZXNwb25kaW5nCisgICBzdHJpbmcsIGFzIHdvdWxkIGJlIHByaW50ZWQgYnkgdGhlIEMgZnVuY3Rpb24gOmM6ZnVuYzpgcGVycm9yYC4KIAogCi0uLiBmdW5jdGlvbjo6IGVwb2xsKFtzaXplaGludD0tMV0pCisuLiBmdW5jdGlvbjo6IGVwb2xsKHNpemVoaW50PS0xKQogCiAgICAoT25seSBzdXBwb3J0ZWQgb24gTGludXggMi41LjQ0IGFuZCBuZXdlci4pICBSZXR1cm5zIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCiAgICB3aGljaCBjYW4gYmUgdXNlZCBhcyBFZGdlIG9yIExldmVsIFRyaWdnZXJlZCBpbnRlcmZhY2UgZm9yIEkvTyBldmVudHM7IHNlZQpAQCAtNTQsNyArNTMsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHNlbGVjdChybGlzdCwgd2xpc3QsIHhsaXN0WywgdGltZW91dF0pCiAKLSAgIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgaW50ZXJmYWNlIHRvIHRoZSBVbml4IDpjZnVuYzpgc2VsZWN0YCBzeXN0ZW0gY2FsbC4KKyAgIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgaW50ZXJmYWNlIHRvIHRoZSBVbml4IDpjOmZ1bmM6YHNlbGVjdGAgc3lzdGVtIGNhbGwuCiAgICBUaGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBzZXF1ZW5jZXMgb2YgJ3dhaXRhYmxlIG9iamVjdHMnOiBlaXRoZXIKICAgIGludGVnZXJzIHJlcHJlc2VudGluZyBmaWxlIGRlc2NyaXB0b3JzIG9yIG9iamVjdHMgd2l0aCBhIHBhcmFtZXRlcmxlc3MgbWV0aG9kCiAgICBuYW1lZCA6bWV0aDpgZmlsZW5vYCByZXR1cm5pbmcgc3VjaCBhbiBpbnRlZ2VyOgpAQCAtOTEsMTAgKzkwLDIxIEBACiAgICAgICAuLiBpbmRleDo6IHNpbmdsZTogV2luU29jawogCiAgICAgICBGaWxlIG9iamVjdHMgb24gV2luZG93cyBhcmUgbm90IGFjY2VwdGFibGUsIGJ1dCBzb2NrZXRzIGFyZS4gIE9uIFdpbmRvd3MsCi0gICAgICB0aGUgdW5kZXJseWluZyA6Y2Z1bmM6YHNlbGVjdGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQgYnkgdGhlIFdpblNvY2sKKyAgICAgIHRoZSB1bmRlcmx5aW5nIDpjOmZ1bmM6YHNlbGVjdGAgZnVuY3Rpb24gaXMgcHJvdmlkZWQgYnkgdGhlIFdpblNvY2sKICAgICAgIGxpYnJhcnksIGFuZCBkb2VzIG5vdCBoYW5kbGUgZmlsZSBkZXNjcmlwdG9ycyB0aGF0IGRvbid0IG9yaWdpbmF0ZSBmcm9tCiAgICAgICBXaW5Tb2NrLgogCisuLiBhdHRyaWJ1dGU6OiBQSVBFX0JVRgorCisgICBUaGUgbWluaW11bSBudW1iZXIgb2YgYnl0ZXMgd2hpY2ggY2FuIGJlIHdyaXR0ZW4gd2l0aG91dCBibG9ja2luZyB0byBhIHBpcGUKKyAgIHdoZW4gdGhlIHBpcGUgaGFzIGJlZW4gcmVwb3J0ZWQgYXMgcmVhZHkgZm9yIHdyaXRpbmcgYnkgOmZ1bmM6YHNlbGVjdGAsCisgICA6ZnVuYzpgcG9sbGAgb3IgYW5vdGhlciBpbnRlcmZhY2UgaW4gdGhpcyBtb2R1bGUuICBUaGlzIGRvZXNuJ3QgYXBwbHkKKyAgIHRvIG90aGVyIGtpbmQgb2YgZmlsZS1saWtlIG9iamVjdHMgc3VjaCBhcyBzb2NrZXRzLgorCisgICBUaGlzIHZhbHVlIGlzIGd1YXJhbnRlZWQgYnkgUE9TSVggdG8gYmUgYXQgbGVhc3QgNTEyLiAgQXZhaWxhYmlsaXR5OiBVbml4LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiAuLiBfZXBvbGwtb2JqZWN0czoKIApAQCAtMTI0LDE1ICsxMzQsMTUgQEAKICAgIHwgOmNvbnN0OmBFUE9MTE9ORVNIT1RgIHwgU2V0IG9uZS1zaG90IGJlaGF2aW9yLiBBZnRlciBvbmUgZXZlbnQgaXMgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgcHVsbGVkIG91dCwgdGhlIGZkIGlzIGludGVybmFsbHkgZGlzYWJsZWQgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBFUE9MTFJETk9STWAgIHwgPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBFUE9MTFJETk9STWAgIHwgRXF1aXZhbGVudCB0byA6Y29uc3Q6YEVQT0xMSU5gICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBFUE9MTFJEQkFORGAgIHwgPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBFUE9MTFJEQkFORGAgIHwgUHJpb3JpdHkgZGF0YSBiYW5kIGNhbiBiZSByZWFkLiAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBFUE9MTFdSTk9STWAgIHwgPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBFUE9MTFdSTk9STWAgIHwgRXF1aXZhbGVudCB0byA6Y29uc3Q6YEVQT0xMT1VUYCAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBFUE9MTFdSQkFORGAgIHwgPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBFUE9MTFdSQkFORGAgIHwgUHJpb3JpdHkgZGF0YSBtYXkgYmUgd3JpdHRlbi4gICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmNvbnN0OmBFUE9MTE1TR2AgICAgIHwgPz8/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgOmNvbnN0OmBFUE9MTE1TR2AgICAgIHwgSWdub3JlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC0xODEsMTMgKzE5MSwxMyBAQAogUG9sbGluZyBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0KIAotVGhlIDpjZnVuYzpgcG9sbGAgc3lzdGVtIGNhbGwsIHN1cHBvcnRlZCBvbiBtb3N0IFVuaXggc3lzdGVtcywgcHJvdmlkZXMgYmV0dGVyCitUaGUgOmM6ZnVuYzpgcG9sbGAgc3lzdGVtIGNhbGwsIHN1cHBvcnRlZCBvbiBtb3N0IFVuaXggc3lzdGVtcywgcHJvdmlkZXMgYmV0dGVyCiBzY2FsYWJpbGl0eSBmb3IgbmV0d29yayBzZXJ2ZXJzIHRoYXQgc2VydmljZSBtYW55LCBtYW55IGNsaWVudHMgYXQgdGhlIHNhbWUKLXRpbWUuIDpjZnVuYzpgcG9sbGAgc2NhbGVzIGJldHRlciBiZWNhdXNlIHRoZSBzeXN0ZW0gY2FsbCBvbmx5IHJlcXVpcmVzIGxpc3RpbmcKLXRoZSBmaWxlIGRlc2NyaXB0b3JzIG9mIGludGVyZXN0LCB3aGlsZSA6Y2Z1bmM6YHNlbGVjdGAgYnVpbGRzIGEgYml0bWFwLCB0dXJucwordGltZS4gOmM6ZnVuYzpgcG9sbGAgc2NhbGVzIGJldHRlciBiZWNhdXNlIHRoZSBzeXN0ZW0gY2FsbCBvbmx5IHJlcXVpcmVzIGxpc3RpbmcKK3RoZSBmaWxlIGRlc2NyaXB0b3JzIG9mIGludGVyZXN0LCB3aGlsZSA6YzpmdW5jOmBzZWxlY3RgIGJ1aWxkcyBhIGJpdG1hcCwgdHVybnMKIG9uIGJpdHMgZm9yIHRoZSBmZHMgb2YgaW50ZXJlc3QsIGFuZCB0aGVuIGFmdGVyd2FyZCB0aGUgd2hvbGUgYml0bWFwIGhhcyB0byBiZQotbGluZWFybHkgc2Nhbm5lZCBhZ2Fpbi4gOmNmdW5jOmBzZWxlY3RgIGlzIE8oaGlnaGVzdCBmaWxlIGRlc2NyaXB0b3IpLCB3aGlsZQotOmNmdW5jOmBwb2xsYCBpcyBPKG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzKS4KK2xpbmVhcmx5IHNjYW5uZWQgYWdhaW4uIDpjOmZ1bmM6YHNlbGVjdGAgaXMgTyhoaWdoZXN0IGZpbGUgZGVzY3JpcHRvciksIHdoaWxlCis6YzpmdW5jOmBwb2xsYCBpcyBPKG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzKS4KIAogCiAuLiBtZXRob2Q6OiBwb2xsLnJlZ2lzdGVyKGZkWywgZXZlbnRtYXNrXSkKQEAgLTIyNiw3ICsyMzYsNyBAQAogLi4gbWV0aG9kOjogcG9sbC5tb2RpZnkoZmQsIGV2ZW50bWFzaykKIAogICAgTW9kaWZpZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZkLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKLSAgIDptZXRoOmByZWdpc3RlcihmZCwgZXZlbnRtYXNrKWAuICBBdHRlbXB0aW5nIHRvIG1vZGlmeSBhIGZpbGUgZGVzY3JpcHRvcgorICAgYGByZWdpc3RlcihmZCwgZXZlbnRtYXNrKWBgLiAgQXR0ZW1wdGluZyB0byBtb2RpZnkgYSBmaWxlIGRlc2NyaXB0b3IKICAgIHRoYXQgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgY2F1c2VzIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiB3aXRoIGVycm5vCiAgICA6Y29uc3Q6YEVOT0VOVGAgdG8gYmUgcmFpc2VkLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0IGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdAppbmRleCBiMjgxODE0Li45ZDdkNTA0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKQEAgLTcsNiArNywxMCBAQAogCiAuLiBpbmRleDo6IG1vZHVsZTogcGlja2xlCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NoZWx2ZS5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogQSAic2hlbGYiIGlzIGEgcGVyc2lzdGVudCwgZGljdGlvbmFyeS1saWtlIG9iamVjdC4gIFRoZSBkaWZmZXJlbmNlIHdpdGggImRibSIKIGRhdGFiYXNlcyBpcyB0aGF0IHRoZSB2YWx1ZXMgKG5vdCB0aGUga2V5cyEpIGluIGEgc2hlbGYgY2FuIGJlIGVzc2VudGlhbGx5CiBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMgLS0tIGFueXRoaW5nIHRoYXQgdGhlIDptb2Q6YHBpY2tsZWAgbW9kdWxlIGNhbiBoYW5kbGUuCkBAIC0xNCw3ICsxOCw3IEBACiBsb3RzIG9mIHNoYXJlZCAgc3ViLW9iamVjdHMuICBUaGUga2V5cyBhcmUgb3JkaW5hcnkgc3RyaW5ncy4KIAogCi0uLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWVbLCBmbGFnPSdjJ1ssIHByb3RvY29sPU5vbmVbLCB3cml0ZWJhY2s9RmFsc2VdXV0pCisuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWUsIGZsYWc9J2MnLCBwcm90b2NvbD1Ob25lLCB3cml0ZWJhY2s9RmFsc2UpCiAKICAgIE9wZW4gYSBwZXJzaXN0ZW50IGRpY3Rpb25hcnkuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGlzIHRoZSBiYXNlIGZpbGVuYW1lIGZvcgogICAgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2UuICBBcyBhIHNpZGUtZWZmZWN0LCBhbiBleHRlbnNpb24gbWF5IGJlIGFkZGVkIHRvIHRoZQpAQCAtOTcsNyArMTAxLDcgQEAKICAgaW1wbGVtZW50YXRpb24gdXNlZC4KIAogCi0uLiBjbGFzczo6IFNoZWxmKGRpY3RbLCBwcm90b2NvbD1Ob25lWywgd3JpdGViYWNrPUZhbHNlXV0pCisuLiBjbGFzczo6IFNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIAogICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YGNvbGxlY3Rpb25zLk11dGFibGVNYXBwaW5nYCB3aGljaCBzdG9yZXMgcGlja2xlZCB2YWx1ZXMKICAgIGluIHRoZSAqZGljdCogb2JqZWN0LgpAQCAtMTExLDggKzExNSwxNSBAQAogICAgVGhpcyBhbGxvd3MgbmF0dXJhbCBvcGVyYXRpb25zIG9uIG11dGFibGUgZW50cmllcywgYnV0IGNhbiBjb25zdW1lIG11Y2ggbW9yZQogICAgbWVtb3J5IGFuZCBtYWtlIHN5bmMgYW5kIGNsb3NlIHRha2UgYSBsb25nIHRpbWUuCiAKKyAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBlbmNvZGUga2V5cyBiZWZvcmUgdGhleQorICAgYXJlIHVzZWQgd2l0aCB0aGUgdW5kZXJseWluZyBkaWN0LgogCi0uLiBjbGFzczo6IEJzZERiU2hlbGYoZGljdFssIHByb3RvY29sPU5vbmVbLCB3cml0ZWJhY2s9RmFsc2VdXSkKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgVGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KKyAgICAgIFVURi04LgorCisKKy4uIGNsYXNzOjogQnNkRGJTaGVsZihkaWN0LCBwcm90b2NvbD1Ob25lLCB3cml0ZWJhY2s9RmFsc2UsIGtleWVuY29kaW5nPSd1dGYtOCcpCiAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBTaGVsZmAgd2hpY2ggZXhwb3NlcyA6bWV0aDpgZmlyc3RgLCA6bWV0aDpgIW5leHRgLAogICAgOm1ldGg6YHByZXZpb3VzYCwgOm1ldGg6YGxhc3RgIGFuZCA6bWV0aDpgc2V0X2xvY2F0aW9uYCB3aGljaCBhcmUgYXZhaWxhYmxlCkBAIC0xMjEsMTEgKzEzMiwxMSBAQAogICAgbW9kdWxlcy4gIFRoZSAqZGljdCogb2JqZWN0IHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IgbXVzdCBzdXBwb3J0IHRob3NlCiAgICBtZXRob2RzLiAgVGhpcyBpcyBnZW5lcmFsbHkgYWNjb21wbGlzaGVkIGJ5IGNhbGxpbmcgb25lIG9mCiAgICA6ZnVuYzpgYnNkZGIuaGFzaG9wZW5gLCA6ZnVuYzpgYnNkZGIuYnRvcGVuYCBvciA6ZnVuYzpgYnNkZGIucm5vcGVuYC4gIFRoZQotICAgb3B0aW9uYWwgKnByb3RvY29sKiBhbmQgKndyaXRlYmFjayogcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIGludGVycHJldGF0aW9uCi0gICBhcyBmb3IgdGhlIDpjbGFzczpgU2hlbGZgIGNsYXNzLgorICAgb3B0aW9uYWwgKnByb3RvY29sKiwgKndyaXRlYmFjayosIGFuZCAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZQorICAgaW50ZXJwcmV0YXRpb24gYXMgZm9yIHRoZSA6Y2xhc3M6YFNoZWxmYCBjbGFzcy4KIAogCi0uLiBjbGFzczo6IERiZmlsZW5hbWVTaGVsZihmaWxlbmFtZVssIGZsYWc9J2MnWywgcHJvdG9jb2w9Tm9uZVssIHdyaXRlYmFjaz1GYWxzZV1dXSkKKy4uIGNsYXNzOjogRGJmaWxlbmFtZVNoZWxmKGZpbGVuYW1lLCBmbGFnPSdjJywgcHJvdG9jb2w9Tm9uZSwgd3JpdGViYWNrPUZhbHNlKQogCiAgICBBIHN1YmNsYXNzIG9mIDpjbGFzczpgU2hlbGZgIHdoaWNoIGFjY2VwdHMgYSAqZmlsZW5hbWUqIGluc3RlYWQgb2YgYSBkaWN0LWxpa2UKICAgIG9iamVjdC4gIFRoZSB1bmRlcmx5aW5nIGZpbGUgd2lsbCBiZSBvcGVuZWQgdXNpbmcgOmZ1bmM6YGRibS5vcGVuYC4gIEJ5CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zaGxleC5yc3QgYi9Eb2MvbGlicmFyeS9zaGxleC5yc3QKaW5kZXggZWUyNDFmNC4uMDNjOWY5OCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2hsZXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L3NobGV4LnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgc2hsZXhgIC0tLSBTaW1wbGUgbGV4aWNhbCBhbmFseXNpcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC05LDYgKzgsOSBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHNuYXJrLnRoeXJzdXMuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IEd1c3Rhdm8gTmllbWV5ZXIgPG5pZW1leWVyQGNvbmVjdGl2YS5jb20+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NobGV4LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOmNsYXNzOmBzaGxleGAgY2xhc3MgbWFrZXMgaXQgZWFzeSB0byB3cml0ZSBsZXhpY2FsIGFuYWx5emVycyBmb3Igc2ltcGxlCiBzeW50YXhlcyByZXNlbWJsaW5nIHRoYXQgb2YgdGhlIFVuaXggc2hlbGwuICBUaGlzIHdpbGwgb2Z0ZW4gYmUgdXNlZnVsIGZvcgpAQCAtMTgsNyArMjAsNyBAQAogVGhlIDptb2Q6YHNobGV4YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IHNwbGl0KHNbLCBjb21tZW50c1ssIHBvc2l4XV0pCisuLiBmdW5jdGlvbjo6IHNwbGl0KHMsIGNvbW1lbnRzPUZhbHNlLCBwb3NpeD1UcnVlKQogCiAgICBTcGxpdCB0aGUgc3RyaW5nICpzKiB1c2luZyBzaGVsbC1saWtlIHN5bnRheC4gSWYgKmNvbW1lbnRzKiBpcyA6Y29uc3Q6YEZhbHNlYAogICAgKHRoZSBkZWZhdWx0KSwgdGhlIHBhcnNpbmcgb2YgY29tbWVudHMgaW4gdGhlIGdpdmVuIHN0cmluZyB3aWxsIGJlIGRpc2FibGVkCkBAIC0yOCwxMyArMzAsMTQgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIFNpbmNlIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uIGluc3RhbnRpYXRlcyBhIDpjbGFzczpgc2hsZXhgIGluc3RhbmNlLCBwYXNzaW5nCi0gICAgICBgYE5vbmVgYCBmb3IgKnMqIHdpbGwgcmVhZCB0aGUgc3RyaW5nIHRvIHNwbGl0IGZyb20gc3RhbmRhcmQgaW5wdXQuCisgICAgICBTaW5jZSB0aGUgOmZ1bmM6YHNwbGl0YCBmdW5jdGlvbiBpbnN0YW50aWF0ZXMgYSA6Y2xhc3M6YHNobGV4YCBpbnN0YW5jZSwKKyAgICAgIHBhc3NpbmcgYGBOb25lYGAgZm9yICpzKiB3aWxsIHJlYWQgdGhlIHN0cmluZyB0byBzcGxpdCBmcm9tIHN0YW5kYXJkCisgICAgICBpbnB1dC4KIAogVGhlIDptb2Q6YHNobGV4YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogc2hsZXgoW2luc3RyZWFtWywgaW5maWxlWywgcG9zaXhdXV0pCisuLiBjbGFzczo6IHNobGV4KGluc3RyZWFtPU5vbmUsIGluZmlsZT1Ob25lLCBwb3NpeD1GYWxzZSkKIAogICAgQSA6Y2xhc3M6YHNobGV4YCBpbnN0YW5jZSBvciBzdWJjbGFzcyBpbnN0YW5jZSBpcyBhIGxleGljYWwgYW5hbHl6ZXIgb2JqZWN0LgogICAgVGhlIGluaXRpYWxpemF0aW9uIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBjaGFyYWN0ZXJzCkBAIC0xMTEsNyArMTE0LDcgQEAKICAgIDptZXRoOmBwb3Bfc291cmNlYCBtZXRob2RzLgogCiAKLS4uIG1ldGhvZDo6IHNobGV4LnB1c2hfc291cmNlKHN0cmVhbVssIGZpbGVuYW1lXSkKKy4uIG1ldGhvZDo6IHNobGV4LnB1c2hfc291cmNlKG5ld3N0cmVhbSwgbmV3ZmlsZT1Ob25lKQogCiAgICBQdXNoIGFuIGlucHV0IHNvdXJjZSBzdHJlYW0gb250byB0aGUgaW5wdXQgc3RhY2suICBJZiB0aGUgZmlsZW5hbWUgYXJndW1lbnQgaXMKICAgIHNwZWNpZmllZCBpdCB3aWxsIGxhdGVyIGJlIGF2YWlsYWJsZSBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2VzLiAgVGhpcyBpcyB0aGUKQEAgLTEyNCw3ICsxMjcsNyBAQAogICAgdXNlZCBpbnRlcm5hbGx5IHdoZW4gdGhlIGxleGVyIHJlYWNoZXMgRU9GIG9uIGEgc3RhY2tlZCBpbnB1dCBzdHJlYW0uCiAKIAotLi4gbWV0aG9kOjogc2hsZXguZXJyb3JfbGVhZGVyKFtmaWxlWywgbGluZV1dKQorLi4gbWV0aG9kOjogc2hsZXguZXJyb3JfbGVhZGVyKGluZmlsZT1Ob25lLCBsaW5lbm89Tm9uZSkKIAogICAgVGhpcyBtZXRob2QgZ2VuZXJhdGVzIGFuIGVycm9yIG1lc3NhZ2UgbGVhZGVyIGluIHRoZSBmb3JtYXQgb2YgYSBVbml4IEMgY29tcGlsZXIKICAgIGVycm9yIGxhYmVsOyB0aGUgZm9ybWF0IGlzIGBgJyIlcyIsIGxpbmUgJWQ6ICdgYCwgd2hlcmUgdGhlIGBgJXNgYCBpcyByZXBsYWNlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggN2NmODU1MC4uMWE4NzhkNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBzaHV0aWxgIC0tLSBIaWdoLWxldmVsIGZpbGUgb3BlcmF0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTEsNiArMTAsMTAgQEAKICAgIHNpbmdsZTogZmlsZTsgY29weWluZwogICAgc2luZ2xlOiBjb3B5aW5nIGZpbGVzCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3NodXRpbC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHNodXRpbGAgbW9kdWxlIG9mZmVycyBhIG51bWJlciBvZiBoaWdoLWxldmVsIG9wZXJhdGlvbnMgb24gZmlsZXMgYW5kCiBjb2xsZWN0aW9ucyBvZiBmaWxlcy4gIEluIHBhcnRpY3VsYXIsIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgIHdoaWNoIHN1cHBvcnQgZmlsZQogY29weWluZyBhbmQgcmVtb3ZhbC4gRm9yIG9wZXJhdGlvbnMgb24gaW5kaXZpZHVhbCBmaWxlcywgc2VlIGFsc28gdGhlCkBAIC0xOSw3ICsyMiw3IEBACiAuLiB3YXJuaW5nOjoKIAogICAgRXZlbiB0aGUgaGlnaGVyLWxldmVsIGZpbGUgY29weWluZyBmdW5jdGlvbnMgKDpmdW5jOmBjb3B5YCwgOmZ1bmM6YGNvcHkyYCkKLSAgIGNhbid0IGNvcHkgYWxsIGZpbGUgbWV0YWRhdGEuCisgICBjYW5ub3QgY29weSBhbGwgZmlsZSBtZXRhZGF0YS4KIAogICAgT24gUE9TSVggcGxhdGZvcm1zLCB0aGlzIG1lYW5zIHRoYXQgZmlsZSBvd25lciBhbmQgZ3JvdXAgYXJlIGxvc3QgYXMgd2VsbAogICAgYXMgQUNMcy4gIE9uIE1hYyBPUywgdGhlIHJlc291cmNlIGZvcmsgYW5kIG90aGVyIG1ldGFkYXRhIGFyZSBub3QgdXNlZC4KQEAgLTI4LDYgKzMxLDkgQEAKICAgIGFyZSBub3QgY29waWVkLgogCiAKK0RpcmVjdG9yeSBhbmQgZmlsZXMgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIC4uIGZ1bmN0aW9uOjogY29weWZpbGVvYmooZnNyYywgZmRzdFssIGxlbmd0aF0pCiAKICAgIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpmc3JjKiB0byB0aGUgZmlsZS1saWtlIG9iamVjdCAqZmRzdCouCkBAIC04Niw3ICs5Miw3IEBACiAgICBtYXRjaCBvbmUgb2YgdGhlIGdsb2Itc3R5bGUgKnBhdHRlcm5zKiBwcm92aWRlZC4gIFNlZSB0aGUgZXhhbXBsZSBiZWxvdy4KIAogCi0uLiBmdW5jdGlvbjo6IGNvcHl0cmVlKHNyYywgZHN0Wywgc3ltbGlua3M9RmFsc2VbLCBpZ25vcmU9Tm9uZV1dKQorLi4gZnVuY3Rpb246OiBjb3B5dHJlZShzcmMsIGRzdCwgc3ltbGlua3M9RmFsc2UsIGlnbm9yZT1Ob25lLCBjb3B5X2Z1bmN0aW9uPWNvcHkyLCBpZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3M9RmFsc2UpCiAKICAgIFJlY3Vyc2l2ZWx5IGNvcHkgYW4gZW50aXJlIGRpcmVjdG9yeSB0cmVlIHJvb3RlZCBhdCAqc3JjKi4gIFRoZSBkZXN0aW5hdGlvbgogICAgZGlyZWN0b3J5LCBuYW1lZCBieSAqZHN0KiwgbXVzdCBub3QgYWxyZWFkeSBleGlzdDsgaXQgd2lsbCBiZSBjcmVhdGVkIGFzIHdlbGwKQEAgLTk4LDYgKzEwNCwxMyBAQAogICAgc3ltYm9saWMgbGlua3MgaW4gdGhlIG5ldyB0cmVlOyBpZiBmYWxzZSBvciBvbWl0dGVkLCB0aGUgY29udGVudHMgb2YgdGhlCiAgICBsaW5rZWQgZmlsZXMgYXJlIGNvcGllZCB0byB0aGUgbmV3IHRyZWUuCiAKKyAgIFdoZW4gKnN5bWxpbmtzKiBpcyBmYWxzZSwgaWYgdGhlIGZpbGUgcG9pbnRlZCBieSB0aGUgc3ltbGluayBkb2Vzbid0CisgICBleGlzdCwgYSBleGNlcHRpb24gd2lsbCBiZSBhZGRlZCBpbiB0aGUgbGlzdCBvZiBlcnJvcnMgcmFpc2VkIGluCisgICBhIDpleGM6YEVycm9yYCBleGNlcHRpb24gYXQgdGhlIGVuZCBvZiB0aGUgY29weSBwcm9jZXNzLgorICAgWW91IGNhbiBzZXQgdGhlIG9wdGlvbmFsICppZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3MqIGZsYWcgdG8gdHJ1ZSBpZiB5b3UKKyAgIHdhbnQgdG8gc2lsZW5jZSB0aGlzIGV4Y2VwdGlvbi4gTm90aWNlIHRoYXQgdGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdAorICAgb24gcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCA6ZnVuYzpgb3Muc3ltbGlua2AuCisKICAgIElmICppZ25vcmUqIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGEgY2FsbGFibGUgdGhhdCB3aWxsIHJlY2VpdmUgYXMgaXRzCiAgICBhcmd1bWVudHMgdGhlIGRpcmVjdG9yeSBiZWluZyB2aXNpdGVkIGJ5IDpmdW5jOmBjb3B5dHJlZWAsIGFuZCBhIGxpc3Qgb2YgaXRzCiAgICBjb250ZW50cywgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YG9zLmxpc3RkaXJgLiAgU2luY2UgOmZ1bmM6YGNvcHl0cmVlYCBpcwpAQCAtMTEwLDExICsxMjMsMjEgQEAKIAogICAgSWYgZXhjZXB0aW9uKHMpIG9jY3VyLCBhbiA6ZXhjOmBFcnJvcmAgaXMgcmFpc2VkIHdpdGggYSBsaXN0IG9mIHJlYXNvbnMuCiAKLSAgIFRoZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBleGFtcGxlIHJhdGhlciB0aGFuIHRoZQotICAgdWx0aW1hdGUgdG9vbC4KKyAgIElmICpjb3B5X2Z1bmN0aW9uKiBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSB1c2VkCisgICB0byBjb3B5IGVhY2ggZmlsZS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc291cmNlIHBhdGggYW5kIHRoZQorICAgZGVzdGluYXRpb24gcGF0aCBhcyBhcmd1bWVudHMuIEJ5IGRlZmF1bHQsIDpmdW5jOmBjb3B5MmAgaXMgdXNlZCwgYnV0IGFueQorICAgZnVuY3Rpb24gdGhhdCBzdXBwb3J0cyB0aGUgc2FtZSBzaWduYXR1cmUgKGxpa2UgOmZ1bmM6YGNvcHlgKSBjYW4gYmUgdXNlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIEFkZGVkIHRoZSAqY29weV9mdW5jdGlvbiogYXJndW1lbnQgdG8gYmUgYWJsZSB0byBwcm92aWRlIGEgY3VzdG9tIGNvcHkKKyAgICAgIGZ1bmN0aW9uLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICppZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3MqIGFyZ3VtZW50IHRvIHNpbGVudCBkYW5nbGluZyBzeW1saW5rcworICAgICAgZXJyb3JzIHdoZW4gKnN5bWxpbmtzKiBpcyBmYWxzZS4KIAogCi0uLiBmdW5jdGlvbjo6IHJtdHJlZShwYXRoWywgaWdub3JlX2Vycm9yc1ssIG9uZXJyb3JdXSkKKy4uIGZ1bmN0aW9uOjogcm10cmVlKHBhdGgsIGlnbm9yZV9lcnJvcnM9RmFsc2UsIG9uZXJyb3I9Tm9uZSkKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IGRpcmVjdG9yeTsgZGVsZXRpbmcKIApAQCAtMTUxLDggKzE3NCw4IEBACiAKIC4uIF9zaHV0aWwtZXhhbXBsZToKIAotRXhhbXBsZQotLS0tLS0tLQorY29weXRyZWUgZXhhbXBsZQorOjo6Ojo6Ojo6Ojo6Ojo6OgogCiBUaGlzIGV4YW1wbGUgaXMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA6ZnVuYzpgY29weXRyZWVgIGZ1bmN0aW9uLCBkZXNjcmliZWQKIGFib3ZlLCB3aXRoIHRoZSBkb2NzdHJpbmcgb21pdHRlZC4gIEl0IGRlbW9uc3RyYXRlcyBtYW55IG9mIHRoZSBvdGhlciBmdW5jdGlvbnMKQEAgLTE5MCwzICsyMTMsMTgyIEBACiAgICAgICAgaWYgZXJyb3JzOgogICAgICAgICAgICByYWlzZSBFcnJvcihlcnJvcnMpCiAKK0Fub3RoZXIgZXhhbXBsZSB0aGF0IHVzZXMgdGhlIDpmdW5jOmBpZ25vcmVfcGF0dGVybnNgIGhlbHBlcjo6CisKKyAgIGZyb20gc2h1dGlsIGltcG9ydCBjb3B5dHJlZSwgaWdub3JlX3BhdHRlcm5zCisKKyAgIGNvcHl0cmVlKHNvdXJjZSwgZGVzdGluYXRpb24sIGlnbm9yZT1pZ25vcmVfcGF0dGVybnMoJyoucHljJywgJ3RtcConKSkKKworVGhpcyB3aWxsIGNvcHkgZXZlcnl0aGluZyBleGNlcHQgYGAucHljYGAgZmlsZXMgYW5kIGZpbGVzIG9yIGRpcmVjdG9yaWVzIHdob3NlCituYW1lIHN0YXJ0cyB3aXRoIGBgdG1wYGAuCisKK0Fub3RoZXIgZXhhbXBsZSB0aGF0IHVzZXMgdGhlICppZ25vcmUqIGFyZ3VtZW50IHRvIGFkZCBhIGxvZ2dpbmcgY2FsbDo6CisKKyAgIGZyb20gc2h1dGlsIGltcG9ydCBjb3B5dHJlZQorICAgaW1wb3J0IGxvZ2dpbmcKKworICAgZGVmIF9sb2dwYXRoKHBhdGgsIG5hbWVzKToKKyAgICAgICBsb2dnaW5nLmluZm8oJ1dvcmtpbmcgaW4gJXMnICUgcGF0aCkKKyAgICAgICByZXR1cm4gW10gICAjIG5vdGhpbmcgd2lsbCBiZSBpZ25vcmVkCisKKyAgIGNvcHl0cmVlKHNvdXJjZSwgZGVzdGluYXRpb24sIGlnbm9yZT1fbG9ncGF0aCkKKworCisuLiBfYXJjaGl2aW5nLW9wZXJhdGlvbnM6CisKK0FyY2hpdmluZyBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgW3Jvb3RfZGlyLCBbYmFzZV9kaXIsIFt2ZXJib3NlLCBbZHJ5X3J1biwgW293bmVyLCBbZ3JvdXAsIFtsb2dnZXJdXV1dXV1dKQorCisgICBDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChzdWNoIGFzIHppcCBvciB0YXIpIGFuZCByZXR1cm4gaXRzIG5hbWUuCisKKyAgICpiYXNlX25hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZSwgaW5jbHVkaW5nIHRoZSBwYXRoLCBtaW51cworICAgYW55IGZvcm1hdC1zcGVjaWZpYyBleHRlbnNpb24uICpmb3JtYXQqIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mCisgICAiemlwIiwgInRhciIsICJienRhciIgKGlmIHRoZSA6bW9kOmBiejJgIG1vZHVsZSBpcyBhdmFpbGFibGUpIG9yICJnenRhciIuCisKKyAgICpyb290X2RpciogaXMgYSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUKKyAgIGFyY2hpdmU7IGZvciBleGFtcGxlLCB3ZSB0eXBpY2FsbHkgY2hkaXIgaW50byAqcm9vdF9kaXIqIGJlZm9yZSBjcmVhdGluZyB0aGUKKyAgIGFyY2hpdmUuCisKKyAgICpiYXNlX2RpciogaXMgdGhlIGRpcmVjdG9yeSB3aGVyZSB3ZSBzdGFydCBhcmNoaXZpbmcgZnJvbTsKKyAgIGkuZS4gKmJhc2VfZGlyKiB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKKyAgIGRpcmVjdG9yaWVzIGluIHRoZSBhcmNoaXZlLgorCisgICAqcm9vdF9kaXIqIGFuZCAqYmFzZV9kaXIqIGJvdGggZGVmYXVsdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCisKKyAgICpvd25lciogYW5kICpncm91cCogYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCisKKyAgICpsb2dnZXIqIGlzIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgbG9nZ2luZy5Mb2dnZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBmdW5jdGlvbjo6IGdldF9hcmNoaXZlX2Zvcm1hdHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgYXJjaGl2aW5nLgorICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlIGBgKG5hbWUsIGRlc2NyaXB0aW9uKWBgCisKKyAgIEJ5IGRlZmF1bHQgOm1vZDpgc2h1dGlsYCBwcm92aWRlcyB0aGVzZSBmb3JtYXRzOgorCisgICAtICpnenRhcio6IGd6aXAnZWQgdGFyLWZpbGUKKyAgIC0gKmJ6dGFyKjogYnppcDInZWQgdGFyLWZpbGUgKGlmIHRoZSA6bW9kOmBiejJgIG1vZHVsZSBpcyBhdmFpbGFibGUuKQorICAgLSAqdGFyKjogdW5jb21wcmVzc2VkIHRhciBmaWxlCisgICAtICp6aXAqOiBaSVAgZmlsZQorCisgICBZb3UgY2FuIHJlZ2lzdGVyIG5ldyBmb3JtYXRzIG9yIHByb3ZpZGUgeW91ciBvd24gYXJjaGl2ZXIgZm9yIGFueSBleGlzdGluZworICAgZm9ybWF0cywgYnkgdXNpbmcgOmZ1bmM6YHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lLCBmdW5jdGlvbiwgW2V4dHJhX2FyZ3MsIFtkZXNjcmlwdGlvbl1dKQorCisgICBSZWdpc3RlcnMgYW4gYXJjaGl2ZXIgZm9yIHRoZSBmb3JtYXQgKm5hbWUqLiAqZnVuY3Rpb24qIGlzIGEgY2FsbGFibGUgdGhhdAorICAgd2lsbCBiZSB1c2VkIHRvIGludm9rZSB0aGUgYXJjaGl2ZXIuCisKKyAgIElmIGdpdmVuLCAqZXh0cmFfYXJncyogaXMgYSBzZXF1ZW5jZSBvZiBgYChuYW1lLCB2YWx1ZSlgYCBwYWlycyB0aGF0IHdpbGwgYmUKKyAgIHVzZWQgYXMgZXh0cmEga2V5d29yZHMgYXJndW1lbnRzIHdoZW4gdGhlIGFyY2hpdmVyIGNhbGxhYmxlIGlzIHVzZWQuCisKKyAgICpkZXNjcmlwdGlvbiogaXMgdXNlZCBieSA6ZnVuYzpgZ2V0X2FyY2hpdmVfZm9ybWF0c2Agd2hpY2ggcmV0dXJucyB0aGUKKyAgIGxpc3Qgb2YgYXJjaGl2ZXJzLiBEZWZhdWx0cyB0byBhbiBlbXB0eSBsaXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBmdW5jdGlvbjo6IHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQobmFtZSkKKworICAgUmVtb3ZlIHRoZSBhcmNoaXZlIGZvcm1hdCAqbmFtZSogZnJvbSB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworLi4gZnVuY3Rpb246OiB1bnBhY2tfYXJjaGl2ZShmaWxlbmFtZVssIGV4dHJhY3RfZGlyWywgZm9ybWF0XV0pCisKKyAgIFVucGFjayBhbiBhcmNoaXZlLiAqZmlsZW5hbWUqIGlzIHRoZSBmdWxsIHBhdGggb2YgdGhlIGFyY2hpdmUuCisKKyAgICpleHRyYWN0X2RpciogaXMgdGhlIG5hbWUgb2YgdGhlIHRhcmdldCBkaXJlY3Rvcnkgd2hlcmUgdGhlIGFyY2hpdmUgaXMKKyAgIHVucGFja2VkLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQuCisKKyAgICpmb3JtYXQqIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mICJ6aXAiLCAidGFyIiwgb3IgImd6dGFyIi4gT3IgYW55CisgICBvdGhlciBmb3JtYXQgcmVnaXN0ZXJlZCB3aXRoIDpmdW5jOmByZWdpc3Rlcl91bnBhY2tfZm9ybWF0YC4gSWYgbm90CisgICBwcm92aWRlZCwgOmZ1bmM6YHVucGFja19hcmNoaXZlYCB3aWxsIHVzZSB0aGUgYXJjaGl2ZSBmaWxlIG5hbWUgZXh0ZW5zaW9uCisgICBhbmQgc2VlIGlmIGFuIHVucGFja2VyIHdhcyByZWdpc3RlcmVkIGZvciB0aGF0IGV4dGVuc2lvbi4gSW4gY2FzZSBub25lIGlzCisgICBmb3VuZCwgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdChuYW1lLCBleHRlbnNpb25zLCBmdW5jdGlvblssIGV4dHJhX2FyZ3NbLCBkZXNjcmlwdGlvbl1dKQorCisgICBSZWdpc3RlcnMgYW4gdW5wYWNrIGZvcm1hdC4gKm5hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQgYW5kCisgICAqZXh0ZW5zaW9ucyogaXMgYSBsaXN0IG9mIGV4dGVuc2lvbnMgY29ycmVzcG9uZGluZyB0byB0aGUgZm9ybWF0LCBsaWtlCisgICBgYC56aXBgYCBmb3IgWmlwIGZpbGVzLgorCisgICAqZnVuY3Rpb24qIGlzIHRoZSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgdXNlZCB0byB1bnBhY2sgYXJjaGl2ZXMuIFRoZQorICAgY2FsbGFibGUgd2lsbCByZWNlaXZlIHRoZSBwYXRoIG9mIHRoZSBhcmNoaXZlLCBmb2xsb3dlZCBieSB0aGUgZGlyZWN0b3J5CisgICB0aGUgYXJjaGl2ZSBtdXN0IGJlIGV4dHJhY3RlZCB0by4KKworICAgV2hlbiBwcm92aWRlZCwgKmV4dHJhX2FyZ3MqIGlzIGEgc2VxdWVuY2Ugb2YgYGAobmFtZSwgdmFsdWUpYGAgdHVwbGVzIHRoYXQKKyAgIHdpbGwgYmUgcGFzc2VkIGFzIGtleXdvcmRzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGFibGUuCisKKyAgICpkZXNjcmlwdGlvbiogY2FuIGJlIHByb3ZpZGVkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQsIGFuZCB3aWxsIGJlIHJldHVybmVkCisgICBieSB0aGUgOmZ1bmM6YGdldF91bnBhY2tfZm9ybWF0c2AgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogdW5yZWdpc3Rlcl91bnBhY2tfZm9ybWF0KG5hbWUpCisKKyAgIFVucmVnaXN0ZXIgYW4gdW5wYWNrIGZvcm1hdC4gKm5hbWUqIGlzIHRoZSBuYW1lIG9mIHRoZSBmb3JtYXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X3VucGFja19mb3JtYXRzKCkKKworICAgUmV0dXJuIGEgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBmb3JtYXRzIGZvciB1bnBhY2tpbmcuCisgICBFYWNoIGVsZW1lbnQgb2YgdGhlIHJldHVybmVkIHNlcXVlbmNlIGlzIGEgdHVwbGUKKyAgIGBgKG5hbWUsIGV4dGVuc2lvbnMsIGRlc2NyaXB0aW9uKWBgLgorCisgICBCeSBkZWZhdWx0IDptb2Q6YHNodXRpbGAgcHJvdmlkZXMgdGhlc2UgZm9ybWF0czoKKworICAgLSAqZ3p0YXIqOiBnemlwJ2VkIHRhci1maWxlCisgICAtICpienRhcio6IGJ6aXAyJ2VkIHRhci1maWxlIChpZiB0aGUgOm1vZDpgYnoyYCBtb2R1bGUgaXMgYXZhaWxhYmxlLikKKyAgIC0gKnRhcio6IHVuY29tcHJlc3NlZCB0YXIgZmlsZQorICAgLSAqemlwKjogWklQIGZpbGUKKworICAgWW91IGNhbiByZWdpc3RlciBuZXcgZm9ybWF0cyBvciBwcm92aWRlIHlvdXIgb3duIHVucGFja2VyIGZvciBhbnkgZXhpc3RpbmcKKyAgIGZvcm1hdHMsIGJ5IHVzaW5nIDpmdW5jOmByZWdpc3Rlcl91bnBhY2tfZm9ybWF0YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworCitBcmNoaXZpbmcgZXhhbXBsZQorOjo6Ojo6Ojo6Ojo6Ojo6OjoKKworSW4gdGhpcyBleGFtcGxlLCB3ZSBjcmVhdGUgYSBnemlwJ2VkIHRhci1maWxlIGFyY2hpdmUgY29udGFpbmluZyBhbGwgZmlsZXMKK2ZvdW5kIGluIHRoZSA6ZmlsZTpgLnNzaGAgZGlyZWN0b3J5IG9mIHRoZSB1c2VyOjoKKworICAgID4+PiBmcm9tIHNodXRpbCBpbXBvcnQgbWFrZV9hcmNoaXZlCisgICAgPj4+IGltcG9ydCBvcworICAgID4+PiBhcmNoaXZlX25hbWUgPSBvcy5wYXRoLmV4cGFuZHVzZXIob3MucGF0aC5qb2luKCd+JywgJ215YXJjaGl2ZScpKQorICAgID4+PiByb290X2RpciA9IG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oJ34nLCAnLnNzaCcpKQorICAgID4+PiBtYWtlX2FyY2hpdmUoYXJjaGl2ZV9uYW1lLCAnZ3p0YXInLCByb290X2RpcikKKyAgICAnL1VzZXJzL3RhcmVrL215YXJjaGl2ZS50YXIuZ3onCisKK1RoZSByZXN1bHRpbmcgYXJjaGl2ZSBjb250YWluczo6CisKKyAgICAkIHRhciAtdHp2ZiAvVXNlcnMvdGFyZWsvbXlhcmNoaXZlLnRhci5negorICAgIGRyd3gtLS0tLS0gdGFyZWsvc3RhZmYgICAgICAgMCAyMDEwLTAyLTAxIDE2OjIzOjQwIC4vCisgICAgLXJ3LXItLXItLSB0YXJlay9zdGFmZiAgICAgNjA5IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9hdXRob3JpemVkX2tleXMKKyAgICAtcnd4ci14ci14IHRhcmVrL3N0YWZmICAgICAgNjUgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2NvbmZpZworICAgIC1yd3gtLS0tLS0gdGFyZWsvc3RhZmYgICAgIDY2OCAyMDA4LTA2LTA5IDEzOjI2OjU0IC4vaWRfZHNhCisgICAgLXJ3eHIteHIteCB0YXJlay9zdGFmZiAgICAgNjA5IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9pZF9kc2EucHViCisgICAgLXJ3LS0tLS0tLSB0YXJlay9zdGFmZiAgICAxNjc1IDIwMDgtMDYtMDkgMTM6MjY6NTQgLi9pZF9yc2EKKyAgICAtcnctci0tci0tIHRhcmVrL3N0YWZmICAgICAzOTcgMjAwOC0wNi0wOSAxMzoyNjo1NCAuL2lkX3JzYS5wdWIKKyAgICAtcnctci0tci0tIHRhcmVrL3N0YWZmICAgMzcxOTIgMjAxMC0wMi0wNiAxODoyMzoxMCAuL2tub3duX2hvc3RzCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdCBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKaW5kZXggMzA5ZjcxYi4uNjk4YjFlNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaWduYWwucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBzaWduYWxgIC0tLSBTZXQgaGFuZGxlcnMgZm9yIGFzeW5jaHJvbm91cyBldmVudHMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC02OSwxMiArNjgsMzIgQEAKICAgIEFsbCB0aGUgc2lnbmFsIG51bWJlcnMgYXJlIGRlZmluZWQgc3ltYm9saWNhbGx5LiAgRm9yIGV4YW1wbGUsIHRoZSBoYW5ndXAgc2lnbmFsCiAgICBpcyBkZWZpbmVkIGFzIDpjb25zdDpgc2lnbmFsLlNJR0hVUGA7IHRoZSB2YXJpYWJsZSBuYW1lcyBhcmUgaWRlbnRpY2FsIHRvIHRoZQogICAgbmFtZXMgdXNlZCBpbiBDIHByb2dyYW1zLCBhcyBmb3VuZCBpbiBgYDxzaWduYWwuaD5gYC4gVGhlIFVuaXggbWFuIHBhZ2UgZm9yCi0gICAnOmNmdW5jOmBzaWduYWxgJyBsaXN0cyB0aGUgZXhpc3Rpbmcgc2lnbmFscyAob24gc29tZSBzeXN0ZW1zIHRoaXMgaXMKKyAgICc6YzpmdW5jOmBzaWduYWxgJyBsaXN0cyB0aGUgZXhpc3Rpbmcgc2lnbmFscyAob24gc29tZSBzeXN0ZW1zIHRoaXMgaXMKICAgIDptYW5wYWdlOmBzaWduYWwoMilgLCBvbiBvdGhlcnMgdGhlIGxpc3QgaXMgaW4gOm1hbnBhZ2U6YHNpZ25hbCg3KWApLiBOb3RlIHRoYXQKICAgIG5vdCBhbGwgc3lzdGVtcyBkZWZpbmUgdGhlIHNhbWUgc2V0IG9mIHNpZ25hbCBuYW1lczsgb25seSB0aG9zZSBuYW1lcyBkZWZpbmVkIGJ5CiAgICB0aGUgc3lzdGVtIGFyZSBkZWZpbmVkIGJ5IHRoaXMgbW9kdWxlLgogCiAKKy4uIGRhdGE6OiBDVFJMX0NfRVZFTlQKKworICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0Mga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIG9ubHkgYmUgdXNlZCB3aXRoIDpmdW5jOmBvcy5raWxsYC4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBkYXRhOjogQ1RSTF9CUkVBS19FVkVOVAorCisgICBUaGUgc2lnbmFsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENUUkwrQlJFQUsga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIG9ubHkgYmUgdXNlZCB3aXRoIDpmdW5jOmBvcy5raWxsYC4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBkYXRhOjogTlNJRwogCiAgICBPbmUgbW9yZSB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3Qgc2lnbmFsIG51bWJlci4KQEAgLTgyLDcgKzEwMSw4IEBACiAKIC4uIGRhdGE6OiBJVElNRVJfUkVBTAogCi0gICBEZWNyZW1lbnRzIGludGVydmFsIHRpbWVyIGluIHJlYWwgdGltZSwgYW5kIGRlbGl2ZXJzIDpjb25zdDpgU0lHQUxSTWAgdXBvbiBleHBpcmF0aW9uLgorICAgRGVjcmVtZW50cyBpbnRlcnZhbCB0aW1lciBpbiByZWFsIHRpbWUsIGFuZCBkZWxpdmVycyA6Y29uc3Q6YFNJR0FMUk1gIHVwb24KKyAgIGV4cGlyYXRpb24uCiAKIAogLi4gZGF0YTo6IElUSU1FUl9WSVJUVUFMCkBAIC0xOTAsNyArMjEwLDcgQEAKIAogICAgTm90ZSB0aGF0IGluc3RhbGxpbmcgYSBzaWduYWwgaGFuZGxlciB3aXRoIDpmdW5jOmBzaWduYWxgIHdpbGwgcmVzZXQgdGhlCiAgICByZXN0YXJ0IGJlaGF2aW91ciB0byBpbnRlcnJ1cHRpYmxlIGJ5IGltcGxpY2l0bHkgY2FsbGluZwotICAgOmNmdW5jOmBzaWdpbnRlcnJ1cHRgIHdpdGggYSB0cnVlICpmbGFnKiB2YWx1ZSBmb3IgdGhlIGdpdmVuIHNpZ25hbC4KKyAgIDpjOmZ1bmM6YHNpZ2ludGVycnVwdGAgd2l0aCBhIHRydWUgKmZsYWcqIHZhbHVlIGZvciB0aGUgZ2l2ZW4gc2lnbmFsLgogCiAKIC4uIGZ1bmN0aW9uOjogc2lnbmFsKHNpZ25hbG51bSwgaGFuZGxlcikKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpdGUucnN0IGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKaW5kZXggYmY2NWQxNy4uYjc3ZjNjZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKQEAgLTEsMTAgKzEsMTIgQEAKLQogOm1vZDpgc2l0ZWAgLS0tIFNpdGUtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBob29rCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogc2l0ZQogICAgOnN5bm9wc2lzOiBBIHN0YW5kYXJkIHdheSB0byByZWZlcmVuY2Ugc2l0ZS1zcGVjaWZpYyBtb2R1bGVzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zaXRlLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiAqKlRoaXMgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLioqIFRoZSBhdXRvbWF0aWMKIGltcG9ydCBjYW4gYmUgc3VwcHJlc3NlZCB1c2luZyB0aGUgaW50ZXJwcmV0ZXIncyA6b3B0aW9uOmAtU2Agb3B0aW9uLgpAQCAtMTE2LDYgKzExOCwzMiBAQAogCiAgICBBZGRzIGEgZGlyZWN0b3J5IHRvIHN5cy5wYXRoIGFuZCBwcm9jZXNzZXMgaXRzIHB0aCBmaWxlcy4KIAorLi4gZnVuY3Rpb246OiBnZXRzaXRlcGFja2FnZXMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIGFsbCBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcworICAgKGFuZCBwb3NzaWJseSBzaXRlLXB5dGhvbikuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBmdW5jdGlvbjo6IGdldHVzZXJiYXNlKCkKKworICAgUmV0dXJucyB0aGUgInVzZXIgYmFzZSIgZGlyZWN0b3J5IHBhdGguCisKKyAgIFRoZSAidXNlciBiYXNlIiBkaXJlY3RvcnkgY2FuIGJlIHVzZWQgdG8gc3RvcmUgZGF0YS4gSWYgdGhlIGdsb2JhbAorICAgdmFyaWFibGUgYGBVU0VSX0JBU0VgYCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBzZXQKKyAgIGl0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZnVuY3Rpb246OiBnZXR1c2Vyc2l0ZXBhY2thZ2VzKCkKKworICAgUmV0dXJucyB0aGUgdXNlci1zcGVjaWZpYyBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSBwYXRoLgorCisgICBJZiB0aGUgZ2xvYmFsIHZhcmlhYmxlIGBgVVNFUl9TSVRFYGAgaXMgbm90IGluaXRpYWxpemVkIHlldCwgdGhpcworICAgZnVuY3Rpb24gd2lsbCBhbHNvIHNldCBpdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIC4uIFhYWCBVcGRhdGUgZG9jdW1lbnRhdGlvbgogLi4gWFhYIGRvY3VtZW50IHB5dGhvbiAtbSBzaXRlIC0tdXNlci1iYXNlIC0tdXNlci1zaXRlCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdCBiL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAppbmRleCAyNzY3NTE2Li5jMzkxZjcxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGQucnN0CkBAIC03LDEzICs3LDE4IEBACiAuLiBtb2R1bGVhdXRob3I6OiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHpvcGUuY29tPgogLi4gc2VjdGlvbmF1dGhvcjo6IE1vc2hlIFphZGthIDxtb3NoZXpAbW9zaGV6Lm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc210cGQucHlgCiAKKy0tLS0tLS0tLS0tLS0tCiAKK1RoaXMgbW9kdWxlIG9mZmVycyBzZXZlcmFsIGNsYXNzZXMgdG8gaW1wbGVtZW50IFNNVFAgKGVtYWlsKSBzZXJ2ZXJzLgogCi1UaGlzIG1vZHVsZSBvZmZlcnMgc2V2ZXJhbCBjbGFzc2VzIHRvIGltcGxlbWVudCBTTVRQIHNlcnZlcnMuICBPbmUgaXMgYSBnZW5lcmljCitTZXZlcmFsIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgYXJlIHByZXNlbnQ7IG9uZSBpcyBhIGdlbmVyaWMKIGRvLW5vdGhpbmcgaW1wbGVtZW50YXRpb24sIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuLCB3aGlsZSB0aGUgb3RoZXIgdHdvIG9mZmVyCiBzcGVjaWZpYyBtYWlsLXNlbmRpbmcgc3RyYXRlZ2llcy4KIAorQWRkaXRpb25hbGx5IHRoZSBTTVRQQ2hhbm5lbCBtYXkgYmUgZXh0ZW5kZWQgdG8gaW1wbGVtZW50IHZlcnkgc3BlY2lmaWMKK2ludGVyYWN0aW9uIGJlaGF2aW91ciB3aXRoIFNNVFAgY2xpZW50cy4KIAogU01UUFNlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI2LDcgKzMxLDYgQEAKICAgIGluaGVyaXRzIGZyb20gOmNsYXNzOmBhc3luY29yZS5kaXNwYXRjaGVyYCwgYW5kIHNvIHdpbGwgaW5zZXJ0IGl0c2VsZiBpbnRvCiAgICA6bW9kOmBhc3luY29yZWAncyBldmVudCBsb29wIG9uIGluc3RhbnRpYXRpb24uCiAKLQogICAgLi4gbWV0aG9kOjogcHJvY2Vzc19tZXNzYWdlKHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKQogCiAgICAgICBSYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBleGNlcHRpb24uIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0bwpAQCAtMzcsNiArNDEsMTEgQEAKICAgICAgIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBlLW1haWwgKHdoaWNoIHNob3VsZCBiZSBpbiA6cmZjOmAyODIyYAogICAgICAgZm9ybWF0KS4KIAorICAgLi4gYXR0cmlidXRlOjogY2hhbm5lbF9jbGFzcworCisgICAgICBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8gdXNlIGEgY3VzdG9tIDpjbGFzczpgU01UUENoYW5uZWxgIGZvcgorICAgICAgbWFuYWdpbmcgU01UUCBjbGllbnRzLgorCiAKIERlYnVnZ2luZ1NlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzEsMyArODAsOTEgQEAKICAgIHJ1bm5pbmcgdGhpcyBoYXMgYSBnb29kIGNoYW5jZSB0byBtYWtlIHlvdSBpbnRvIGFuIG9wZW4gcmVsYXksIHNvIHBsZWFzZSBiZQogICAgY2FyZWZ1bC4KIAorU01UUENoYW5uZWwgT2JqZWN0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFNNVFBDaGFubmVsKHNlcnZlciwgY29ubiwgYWRkcikKKworICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUENoYW5uZWxgIG9iamVjdCB3aGljaCBtYW5hZ2VzIHRoZSBjb21tdW5pY2F0aW9uCisgICBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIGEgc2luZ2xlIFNNVFAgY2xpZW50LgorCisgICBUbyB1c2UgYSBjdXN0b20gU01UUENoYW5uZWwgaW1wbGVtZW50YXRpb24geW91IG5lZWQgdG8gb3ZlcnJpZGUgdGhlCisgICA6YXR0cjpgU01UUFNlcnZlci5jaGFubmVsX2NsYXNzYCBvZiB5b3VyIDpjbGFzczpgU01UUFNlcnZlcmAuCisKKyAgIFRoZSA6Y2xhc3M6YFNNVFBDaGFubmVsYCBoYXMgdGhlIGZvbGxvd2luZyBpbnN0YW5jZSB2YXJpYWJsZXM6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNtdHBfc2VydmVyCisKKyAgICAgIEhvbGRzIHRoZSA6Y2xhc3M6YFNNVFBTZXJ2ZXJgIHRoYXQgc3Bhd25lZCB0aGlzIGNoYW5uZWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvbm4KKworICAgICAgSG9sZHMgdGhlIHNvY2tldCBvYmplY3QgY29ubmVjdGluZyB0byB0aGUgY2xpZW50LgorCisgICAuLiBhdHRyaWJ1dGU6OiBhZGRyCisKKyAgICAgIEhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjbGllbnQsIHRoZSBzZWNvbmQgdmFsdWUgcmV0dXJuZWQgYnkKKyAgICAgIHNvY2tldC5hY2NlcHQoKQorCisgICAuLiBhdHRyaWJ1dGU6OiByZWNlaXZlZF9saW5lcworCisgICAgICBIb2xkcyBhIGxpc3Qgb2YgdGhlIGxpbmUgc3RyaW5ncyAoZGVjb2RlZCB1c2luZyBVVEYtOCkgcmVjZWl2ZWQgZnJvbQorICAgICAgdGhlIGNsaWVudC4gVGhlIGxpbmVzIGhhdmUgdGhlaXIgIlxyXG4iIGxpbmUgZW5kaW5nIHRyYW5zbGF0ZWQgdG8gIlxuIi4KKworICAgLi4gYXR0cmlidXRlOjogc210cF9zdGF0ZQorCisgICAgICBIb2xkcyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY2hhbm5lbC4gVGhpcyB3aWxsIGJlIGVpdGhlcgorICAgICAgOmF0dHI6YENPTU1BTkRgIGluaXRpYWxseSBhbmQgdGhlbiA6YXR0cjpgREFUQWAgYWZ0ZXIgdGhlIGNsaWVudCBzZW5kcworICAgICAgYSAiREFUQSIgbGluZS4KKworICAgLi4gYXR0cmlidXRlOjogc2Vlbl9ncmVldGluZworCisgICAgICBIb2xkcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBncmVldGluZyBzZW50IGJ5IHRoZSBjbGllbnQgaW4gaXRzICJIRUxPIi4KKworICAgLi4gYXR0cmlidXRlOjogbWFpbGZyb20KKworICAgICAgSG9sZHMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYWRkcmVzcyBpZGVudGlmaWVkIGluIHRoZSAiTUFJTCBGUk9NOiIgbGluZQorICAgICAgZnJvbSB0aGUgY2xpZW50LgorCisgICAuLiBhdHRyaWJ1dGU6OiByY3B0dG9zCisKKyAgICAgIEhvbGRzIGEgbGlzdCBvZiBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGFkZHJlc3NlcyBpZGVudGlmaWVkIGluIHRoZQorICAgICAgIlJDUFQgVE86IiBsaW5lcyBmcm9tIHRoZSBjbGllbnQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHJlY2VpdmVkX2RhdGEKKworICAgICAgSG9sZHMgYSBzdHJpbmcgY29udGFpbmluZyBhbGwgb2YgdGhlIGRhdGEgc2VudCBieSB0aGUgY2xpZW50IGR1cmluZyB0aGUKKyAgICAgIERBVEEgc3RhdGUsIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyAiXHJcbi5cclxuIi4KKworICAgLi4gYXR0cmlidXRlOjogZnFkbgorCisgICAgICBIb2xkcyB0aGUgZnVsbHktcXVhbGlmaWVkIGRvbWFpbiBuYW1lIG9mIHRoZSBzZXJ2ZXIgYXMgcmV0dXJuZWQgYnkKKyAgICAgIGBgc29ja2V0LmdldGZxZG4oKWBgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBwZWVyCisKKyAgICAgIEhvbGRzIHRoZSBuYW1lIG9mIHRoZSBjbGllbnQgcGVlciBhcyByZXR1cm5lZCBieSBgYGNvbm4uZ2V0cGVlcm5hbWUoKWBgCisgICAgICB3aGVyZSBgYGNvbm5gYCBpcyA6YXR0cjpgY29ubmAuCisKKyAgIFRoZSA6Y2xhc3M6YFNNVFBDaGFubmVsYCBvcGVyYXRlcyBieSBpbnZva2luZyBtZXRob2RzIG5hbWVkIGBgc210cF88Y29tbWFuZD5gYAorICAgdXBvbiByZWNlcHRpb24gb2YgYSBjb21tYW5kIGxpbmUgZnJvbSB0aGUgY2xpZW50LiBCdWlsdCBpbnRvIHRoZSBiYXNlCisgICA6Y2xhc3M6YFNNVFBDaGFubmVsYCBjbGFzcyBhcmUgbWV0aG9kcyBmb3IgaGFuZGxpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kcworICAgKGFuZCByZXNwb25kaW5nIHRvIHRoZW0gYXBwcm9wcmlhdGVseSk6CisKKyAgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIENvbW1hbmQgIEFjdGlvbiB0YWtlbgorICAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgSEVMTyAgICAgQWNjZXB0cyB0aGUgZ3JlZXRpbmcgZnJvbSB0aGUgY2xpZW50IGFuZCBzdG9yZXMgaXQgaW4KKyAgICAgICAgICAgIDphdHRyOmBzZWVuX2dyZWV0aW5nYC4KKyAgIE5PT1AgICAgIFRha2VzIG5vIGFjdGlvbi4KKyAgIFFVSVQgICAgIENsb3NlcyB0aGUgY29ubmVjdGlvbiBjbGVhbmx5LgorICAgTUFJTCAgICAgQWNjZXB0cyB0aGUgIk1BSUwgRlJPTToiIHN5bnRheCBhbmQgc3RvcmVzIHRoZSBzdXBwbGllZCBhZGRyZXNzIGFzCisgICAgICAgICAgICA6YXR0cjpgbWFpbGZyb21gLgorICAgUkNQVCAgICAgQWNjZXB0cyB0aGUgIlJDUFQgVE86IiBzeW50YXggYW5kIHN0b3JlcyB0aGUgc3VwcGxpZWQgYWRkcmVzc2VzIGluCisgICAgICAgICAgICB0aGUgOmF0dHI6YHJjcHR0b3NgIGxpc3QuCisgICBSU0VUICAgICBSZXNldHMgdGhlIDphdHRyOmBtYWlsZnJvbWAsIDphdHRyOmByY3B0dG9zYCwgYW5kCisgICAgICAgICAgICA6YXR0cjpgcmVjZWl2ZWRfZGF0YWAsIGJ1dCBub3QgdGhlIGdyZWV0aW5nLgorICAgREFUQSAgICAgU2V0cyB0aGUgaW50ZXJuYWwgc3RhdGUgdG8gOmF0dHI6YERBVEFgIGFuZCBzdG9yZXMgcmVtYWluaW5nIGxpbmVzCisgICAgICAgICAgICBmcm9tIHRoZSBjbGllbnQgaW4gOmF0dHI6YHJlY2VpdmVkX2RhdGFgIHVudGlsIHRoZSB0ZXJtaW5hdG9yCisgICAgICAgICAgICAiXHJcbi5cclxuIiBpcyByZWNlaXZlZC4KKyAgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NtdHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKaW5kZXggOTMwM2MzZS4uNTMxYTY0ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QKQEAgLTEsNCArMSwzIEBACi0KIDptb2Q6YHNtdHBsaWJgIC0tLSBTTVRQIHByb3RvY29sIGNsaWVudAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExLDEzICsxMCwxNyBAQAogICAgcGFpcjogU01UUDsgcHJvdG9jb2wKICAgIHNpbmdsZTogU2ltcGxlIE1haWwgVHJhbnNmZXIgUHJvdG9jb2wKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc210cGxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHNtdHBsaWJgIG1vZHVsZSBkZWZpbmVzIGFuIFNNVFAgY2xpZW50IHNlc3Npb24gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQKIHRvIHNlbmQgbWFpbCB0byBhbnkgSW50ZXJuZXQgbWFjaGluZSB3aXRoIGFuIFNNVFAgb3IgRVNNVFAgbGlzdGVuZXIgZGFlbW9uLiAgRm9yCiBkZXRhaWxzIG9mIFNNVFAgYW5kIEVTTVRQIG9wZXJhdGlvbiwgY29uc3VsdCA6cmZjOmA4MjFgIChTaW1wbGUgTWFpbCBUcmFuc2ZlcgogUHJvdG9jb2wpIGFuZCA6cmZjOmAxODY5YCAoU01UUCBTZXJ2aWNlIEV4dGVuc2lvbnMpLgogCiAKLS4uIGNsYXNzOjogU01UUChbaG9zdFssIHBvcnRbLCBsb2NhbF9ob3N0bmFtZVssIHRpbWVvdXRdXV1dKQorLi4gY2xhc3M6OiBTTVRQKGhvc3Q9JycsIHBvcnQ9MCwgbG9jYWxfaG9zdG5hbWU9Tm9uZVssIHRpbWVvdXRdKQogCiAgICBBIDpjbGFzczpgU01UUGAgaW5zdGFuY2UgZW5jYXBzdWxhdGVzIGFuIFNNVFAgY29ubmVjdGlvbi4gIEl0IGhhcyBtZXRob2RzCiAgICB0aGF0IHN1cHBvcnQgYSBmdWxsIHJlcGVydG9pcmUgb2YgU01UUCBhbmQgRVNNVFAgb3BlcmF0aW9ucy4gSWYgdGhlIG9wdGlvbmFsCkBAIC0zMiwxMyArMzUsMTMgQEAKICAgIDptZXRoOmBzZW5kbWFpbGAsIGFuZCA6bWV0aDpgcXVpdGAgbWV0aG9kcy4gIEFuIGV4YW1wbGUgaXMgaW5jbHVkZWQgYmVsb3cuCiAKIAotLi4gY2xhc3M6OiBTTVRQX1NTTChbaG9zdFssIHBvcnRbLCBsb2NhbF9ob3N0bmFtZVssIGtleWZpbGVbLCBjZXJ0ZmlsZVssIHRpbWVvdXRdXV1dXV0pCisuLiBjbGFzczo6IFNNVFBfU1NMKGhvc3Q9JycsIHBvcnQ9MCwgbG9jYWxfaG9zdG5hbWU9Tm9uZSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lWywgdGltZW91dF0pCiAKICAgIEEgOmNsYXNzOmBTTVRQX1NTTGAgaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZgogICAgOmNsYXNzOmBTTVRQYC4gOmNsYXNzOmBTTVRQX1NTTGAgc2hvdWxkIGJlIHVzZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgU1NMIGlzCiAgICByZXF1aXJlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbm5lY3Rpb24gYW5kIHVzaW5nIDptZXRoOmBzdGFydHRsc2AgaXMKICAgIG5vdCBhcHByb3ByaWF0ZS4gSWYgKmhvc3QqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsb2NhbCBob3N0IGlzIHVzZWQuIElmCi0gICAqcG9ydCogaXMgb21pdHRlZCwgdGhlIHN0YW5kYXJkIFNNVFAtb3Zlci1TU0wgcG9ydCAoNDY1KSBpcyB1c2VkLiAqa2V5ZmlsZSoKKyAgICpwb3J0KiBpcyB6ZXJvLCB0aGUgc3RhbmRhcmQgU01UUC1vdmVyLVNTTCBwb3J0ICg0NjUpIGlzIHVzZWQuICprZXlmaWxlKgogICAgYW5kICpjZXJ0ZmlsZSogYXJlIGFsc28gb3B0aW9uYWwsIGFuZCBjYW4gY29udGFpbiBhIFBFTSBmb3JtYXR0ZWQgcHJpdmF0ZSBrZXkKICAgIGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uIFRoZSBvcHRpb25hbCAqdGltZW91dCoKICAgIHBhcmFtZXRlciBzcGVjaWZpZXMgYSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIGJsb2NraW5nIG9wZXJhdGlvbnMgbGlrZSB0aGUKQEAgLTQ2LDcgKzQ5LDcgQEAKICAgIHdpbGwgYmUgdXNlZCkuCiAKIAotLi4gY2xhc3M6OiBMTVRQKFtob3N0WywgcG9ydFssIGxvY2FsX2hvc3RuYW1lXV1dKQorLi4gY2xhc3M6OiBMTVRQKGhvc3Q9JycsIHBvcnQ9TE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZT1Ob25lKQogCiAgICBUaGUgTE1UUCBwcm90b2NvbCwgd2hpY2ggaXMgdmVyeSBzaW1pbGFyIHRvIEVTTVRQLCBpcyBoZWF2aWx5IGJhc2VkIG9uIHRoZQogICAgc3RhbmRhcmQgU01UUCBjbGllbnQuIEl0J3MgY29tbW9uIHRvIHVzZSBVbml4IHNvY2tldHMgZm9yIExNVFAsIHNvIG91ciA6bWV0aDpgY29ubmVjdGAKQEAgLTE0Miw3ICsxNDUsNyBAQAogICAgZm9yIGNvbm5lY3Rpb24gYW5kIGZvciBhbGwgbWVzc2FnZXMgc2VudCB0byBhbmQgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLgogCiAKLS4uIG1ldGhvZDo6IFNNVFAuY29ubmVjdChbaG9zdFssIHBvcnRdXSkKKy4uIG1ldGhvZDo6IFNNVFAuY29ubmVjdChob3N0PSdsb2NhbGhvc3QnLCBwb3J0PTApCiAKICAgIENvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gcG9ydC4gIFRoZSBkZWZhdWx0cyBhcmUgdG8gY29ubmVjdCB0byB0aGUgbG9jYWwKICAgIGhvc3QgYXQgdGhlIHN0YW5kYXJkIFNNVFAgcG9ydCAoMjUpLiBJZiB0aGUgaG9zdG5hbWUgZW5kcyB3aXRoIGEgY29sb24gKGBgJzonYGApCkBAIC0xNTEsOSArMTU0LDkgQEAKICAgIHRoZSBjb25zdHJ1Y3RvciBpZiBhIGhvc3QgaXMgc3BlY2lmaWVkIGR1cmluZyBpbnN0YW50aWF0aW9uLgogCiAKLS4uIG1ldGhvZDo6IFNNVFAuZG9jbWQoY21kLCBbLCBhcmdzdHJpbmddKQorLi4gbWV0aG9kOjogU01UUC5kb2NtZChjbWQsIGFyZ3M9JycpCiAKLSAgIFNlbmQgYSBjb21tYW5kICpjbWQqIHRvIHRoZSBzZXJ2ZXIuICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmFyZ3N0cmluZyogaXMgc2ltcGx5CisgICBTZW5kIGEgY29tbWFuZCAqY21kKiB0byB0aGUgc2VydmVyLiAgVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICphcmdzKiBpcyBzaW1wbHkKICAgIGNvbmNhdGVuYXRlZCB0byB0aGUgY29tbWFuZCwgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuCiAKICAgIFRoaXMgcmV0dXJucyBhIDItdHVwbGUgY29tcG9zZWQgb2YgYSBudW1lcmljIHJlc3BvbnNlIGNvZGUgYW5kIHRoZSBhY3R1YWwKQEAgLTE2Nyw3ICsxNzAsNyBAQAogICAgOmV4YzpgU01UUFNlcnZlckRpc2Nvbm5lY3RlZGAgd2lsbCBiZSByYWlzZWQuCiAKIAotLi4gbWV0aG9kOjogU01UUC5oZWxvKFtob3N0bmFtZV0pCisuLiBtZXRob2Q6OiBTTVRQLmhlbG8obmFtZT0nJykKIAogICAgSWRlbnRpZnkgeW91cnNlbGYgdG8gdGhlIFNNVFAgc2VydmVyIHVzaW5nIGBgSEVMT2BgLiAgVGhlIGhvc3RuYW1lIGFyZ3VtZW50CiAgICBkZWZhdWx0cyB0byB0aGUgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIG9mIHRoZSBsb2NhbCBob3N0LgpAQCAtMTc4LDcgKzE4MSw3IEBACiAgICBJdCB3aWxsIGJlIGltcGxpY2l0bHkgY2FsbGVkIGJ5IHRoZSA6bWV0aDpgc2VuZG1haWxgIHdoZW4gbmVjZXNzYXJ5LgogCiAKLS4uIG1ldGhvZDo6IFNNVFAuZWhsbyhbaG9zdG5hbWVdKQorLi4gbWV0aG9kOjogU01UUC5laGxvKG5hbWU9JycpCiAKICAgIElkZW50aWZ5IHlvdXJzZWxmIHRvIGFuIEVTTVRQIHNlcnZlciB1c2luZyBgYEVITE9gYC4gIFRoZSBob3N0bmFtZSBhcmd1bWVudAogICAgZGVmYXVsdHMgdG8gdGhlIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZSBvZiB0aGUgbG9jYWwgaG9zdC4gIEV4YW1pbmUgdGhlCkBAIC0yMzksNyArMjQyLDcgQEAKICAgICAgIE5vIHN1aXRhYmxlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3YXMgZm91bmQuCiAKIAotLi4gbWV0aG9kOjogU01UUC5zdGFydHRscyhba2V5ZmlsZVssIGNlcnRmaWxlXV0pCisuLiBtZXRob2Q6OiBTTVRQLnN0YXJ0dGxzKGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSkKIAogICAgUHV0IHRoZSBTTVRQIGNvbm5lY3Rpb24gaW4gVExTIChUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkpIG1vZGUuICBBbGwgU01UUAogICAgY29tbWFuZHMgdGhhdCBmb2xsb3cgd2lsbCBiZSBlbmNyeXB0ZWQuICBZb3Ugc2hvdWxkIHRoZW4gY2FsbCA6bWV0aDpgZWhsb2AKQEAgLTI2MSw3ICsyNjQsNyBAQAogICAgICBTU0wvVExTIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSB0byB5b3VyIFB5dGhvbiBpbnRlcnByZXRlci4KIAogCi0uLiBtZXRob2Q6OiBTTVRQLnNlbmRtYWlsKGZyb21fYWRkciwgdG9fYWRkcnMsIG1zZ1ssIG1haWxfb3B0aW9ucywgcmNwdF9vcHRpb25zXSkKKy4uIG1ldGhvZDo6IFNNVFAuc2VuZG1haWwoZnJvbV9hZGRyLCB0b19hZGRycywgbXNnLCBtYWlsX29wdGlvbnM9W10sIHJjcHRfb3B0aW9ucz1bXSkKIAogICAgU2VuZCBtYWlsLiAgVGhlIHJlcXVpcmVkIGFyZ3VtZW50cyBhcmUgYW4gOnJmYzpgODIyYCBmcm9tLWFkZHJlc3Mgc3RyaW5nLCBhIGxpc3QKICAgIG9mIDpyZmM6YDgyMmAgdG8tYWRkcmVzcyBzdHJpbmdzIChhIGJhcmUgc3RyaW5nIHdpbGwgYmUgdHJlYXRlZCBhcyBhIGxpc3Qgd2l0aCAxCkBAIC0yNzUsOSArMjc4LDE0IEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhlICpmcm9tX2FkZHIqIGFuZCAqdG9fYWRkcnMqIHBhcmFtZXRlcnMgYXJlIHVzZWQgdG8gY29uc3RydWN0IHRoZSBtZXNzYWdlCi0gICAgICBlbnZlbG9wZSB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQgYWdlbnRzLiBUaGUgOmNsYXNzOmBTTVRQYCBkb2VzIG5vdCBtb2RpZnkgdGhlCisgICAgICBlbnZlbG9wZSB1c2VkIGJ5IHRoZSB0cmFuc3BvcnQgYWdlbnRzLiAgYGBzZW5kbWFpbGBgIGRvZXMgbm90IG1vZGlmeSB0aGUKICAgICAgIG1lc3NhZ2UgaGVhZGVycyBpbiBhbnkgd2F5LgogCisgICBtc2cgbWF5IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyBpbiB0aGUgQVNDSUkgcmFuZ2UsIG9yIGEgYnl0ZQorICAgc3RyaW5nLiAgQSBzdHJpbmcgaXMgZW5jb2RlZCB0byBieXRlcyB1c2luZyB0aGUgYXNjaWkgY29kZWMsIGFuZCBsb25lIGBgXHJgYAorICAgYW5kIGBgXG5gYCBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYGBcclxuYGAgY2hhcmFjdGVycy4gIEEgYnl0ZSBzdHJpbmcKKyAgIGlzIG5vdCBtb2RpZmllZC4KKwogICAgSWYgdGhlcmUgaGFzIGJlZW4gbm8gcHJldmlvdXMgYGBFSExPYGAgb3IgYGBIRUxPYGAgY29tbWFuZCB0aGlzIHNlc3Npb24sIHRoaXMKICAgIG1ldGhvZCB0cmllcyBFU01UUCBgYEVITE9gYCBmaXJzdC4gSWYgdGhlIHNlcnZlciBkb2VzIEVTTVRQLCBtZXNzYWdlIHNpemUgYW5kCiAgICBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCB0byBpdCAoaWYgdGhlIG9wdGlvbiBpcyBpbiB0aGUKQEAgLTMxMiw2ICszMjAsMjcgQEAKICAgIFVubGVzcyBvdGhlcndpc2Ugbm90ZWQsIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgb3BlbiBldmVuIGFmdGVyIGFuIGV4Y2VwdGlvbiBpcwogICAgcmFpc2VkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMiAqbXNnKiBtYXkgYmUgYSBieXRlIHN0cmluZy4KKworCisuLiBtZXRob2Q6OiBTTVRQLnNlbmRfbWVzc2FnZShtc2csIGZyb21fYWRkcj1Ob25lLCB0b19hZGRycz1Ob25lLCBtYWlsX29wdGlvbnM9W10sIHJjcHRfb3B0aW9ucz1bXSkKKworICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBmb3IgY2FsbGluZyA6bWV0aDpgc2VuZG1haWxgIHdpdGggdGhlIG1lc3NhZ2UKKyAgIHJlcHJlc2VudGVkIGJ5IGFuIDpjbGFzczpgZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3QuICBUaGUgYXJndW1lbnRzIGhhdmUKKyAgIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIDptZXRoOmBzZW5kbWFpbGAsIGV4Y2VwdCB0aGF0ICptc2cqIGlzIGEgYGBNZXNzYWdlYGAKKyAgIG9iamVjdC4KKworICAgSWYgKmZyb21fYWRkciogaXMgYGBOb25lYGAsIGBgc2VuZF9tZXNzYWdlYGAgc2V0cyBpdHMgdmFsdWUgdG8gdGhlIHZhbHVlIG9mCisgICB0aGUgOm1haWxoZWFkZXI6YEZyb21gIGhlYWRlciBmcm9tICptc2cqLiAgSWYgKnRvX2FkZHJzKiBpcyBgYE5vbmVgYCwKKyAgIGBgc2VuZF9tZXNzYWdlYGAgY29tYmluZXMgdGhlIHZhbHVlcyAoaWYgYW55KSBvZiB0aGUgOm1haWxoZWFkZXI6YFRvYCwKKyAgIDptYWlsaGVhZGVyOmBDQ2AsIGFuZCA6bWFpbGhlYWRlcjpgQmNjYCBmaWVsZHMgZnJvbSAqbXNnKi4gIFJlZ2FyZGxlc3Mgb2YKKyAgIHRoZSB2YWx1ZXMgb2YgKmZyb21fYWRkciogYW5kICp0b19hZGRycyosIGBgc2VuZF9tZXNzYWdlYGAgZGVsZXRlcyBhbnkgIEJjYworICAgZmllbGQgZnJvbSAqbXNnKi4gIEl0IHRoZW4gc2VyaWFsaXplcyAqbXNnKiB1c2luZworICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCB3aXRoIGBgXHJcbmBgIGFzIHRoZSAqbGluZXNlcCosIGFuZAorICAgY2FsbHMgOm1ldGg6YHNlbmRtYWlsYCB0byB0cmFuc21pdCB0aGUgcmVzdWx0aW5nIG1lc3NhZ2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAKIC4uIG1ldGhvZDo6IFNNVFAucXVpdCgpCiAKQEAgLTM2Nyw1ICszOTYsNSBAQAogLi4gbm90ZTo6CiAKICAgIEluIGdlbmVyYWwsIHlvdSB3aWxsIHdhbnQgdG8gdXNlIHRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSdzIGZlYXR1cmVzIHRvCi0gICBjb25zdHJ1Y3QgYW4gZW1haWwgbWVzc2FnZSwgd2hpY2ggeW91IGNhbiB0aGVuIGNvbnZlcnQgdG8gYSBzdHJpbmcgYW5kIHNlbmQKLSAgIHZpYSA6bWV0aDpgc2VuZG1haWxgOyBzZWUgOnJlZjpgZW1haWwtZXhhbXBsZXNgLgorICAgY29uc3RydWN0IGFuIGVtYWlsIG1lc3NhZ2UsIHdoaWNoIHlvdSBjYW4gdGhlbiBzZW5kCisgICB2aWEgOm1ldGg6YH5zbXRwbGliLlNNVFAuc2VuZF9tZXNzYWdlYDsgc2VlIDpyZWY6YGVtYWlsLWV4YW1wbGVzYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NuZGhkci5yc3QgYi9Eb2MvbGlicmFyeS9zbmRoZHIucnN0CmluZGV4IDAxYTM5MTcuLmYzNmRmNjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NuZGhkci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc25kaGRyLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgc25kaGRyYCAtLS0gRGV0ZXJtaW5lIHR5cGUgb2Ygc291bmQgZmlsZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMSw2ICsxMCwxMCBAQAogICAgc2luZ2xlOiBBLUxBVwogICAgc2luZ2xlOiB1LUxBVwogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zbmRoZHIucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSA6bW9kOmBzbmRoZHJgIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIHdoaWNoIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlCiBvZiBzb3VuZCBkYXRhIHdoaWNoIGlzIGluIGEgZmlsZS4gIFdoZW4gdGhlc2UgZnVuY3Rpb25zIGFyZSBhYmxlIHRvIGRldGVybWluZQogd2hhdCB0eXBlIG9mIHNvdW5kIGRhdGEgaXMgc3RvcmVkIGluIGEgZmlsZSwgdGhleSByZXR1cm4gYSB0dXBsZSBgYCh0eXBlLApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdCBiL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKaW5kZXggZDYxMzk4Yy4uYmZiOGFlOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc29ja2V0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CkBAIC0xLDQgKzEsMyBAQAotCiA6bW9kOmBzb2NrZXRgIC0tLSBMb3ctbGV2ZWwgbmV0d29ya2luZyBpbnRlcmZhY2UKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCkBAIC0xMTgsMzkgKzExNyw0NCBAQAogCiAgICAuLiBpbmRleDo6IG1vZHVsZTogZXJybm8KIAotICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGZvciBzb2NrZXQtcmVsYXRlZCBlcnJvcnMuIFRoZSBhY2NvbXBhbnlpbmcgdmFsdWUgaXMKLSAgIGVpdGhlciBhIHN0cmluZyB0ZWxsaW5nIHdoYXQgd2VudCB3cm9uZyBvciBhIHBhaXIgYGAoZXJybm8sIHN0cmluZylgYAotICAgcmVwcmVzZW50aW5nIGFuIGVycm9yIHJldHVybmVkIGJ5IGEgc3lzdGVtIGNhbGwsIHNpbWlsYXIgdG8gdGhlIHZhbHVlCi0gICBhY2NvbXBhbnlpbmcgOmV4Yzpgb3MuZXJyb3JgLiBTZWUgdGhlIG1vZHVsZSA6bW9kOmBlcnJub2AsIHdoaWNoIGNvbnRhaW5zIG5hbWVzCi0gICBmb3IgdGhlIGVycm9yIGNvZGVzIGRlZmluZWQgYnkgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4KKyAgIEEgc3ViY2xhc3Mgb2YgOmV4YzpgSU9FcnJvcmAsIHRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBmb3Igc29ja2V0LXJlbGF0ZWQKKyAgIGVycm9ycy4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGluc3BlY3QgaXRzIGBgZXJybm9gYCBhdHRyaWJ1dGUgdG8KKyAgIGRpc2NyaW1pbmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBraW5kcyBvZiBlcnJvcnMuCisKKyAgIC4uIHNlZWFsc286OgorICAgICAgVGhlIDptb2Q6YGVycm5vYCBtb2R1bGUgY29udGFpbnMgc3ltYm9saWMgbmFtZXMgZm9yIHRoZSBlcnJvciBjb2RlcworICAgICAgZGVmaW5lZCBieSB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtLgogCiAKIC4uIGV4Y2VwdGlvbjo6IGhlcnJvcgogCi0gICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgZm9yIGFkZHJlc3MtcmVsYXRlZCBlcnJvcnMsIGkuZS4gZm9yIGZ1bmN0aW9ucyB0aGF0IHVzZQotICAgKmhfZXJybm8qIGluIHRoZSBDIEFQSSwgaW5jbHVkaW5nIDpmdW5jOmBnZXRob3N0YnluYW1lX2V4YCBhbmQKLSAgIDpmdW5jOmBnZXRob3N0YnlhZGRyYC4KLQotICAgVGhlIGFjY29tcGFueWluZyB2YWx1ZSBpcyBhIHBhaXIgYGAoaF9lcnJubywgc3RyaW5nKWBgIHJlcHJlc2VudGluZyBhbiBlcnJvcgotICAgcmV0dXJuZWQgYnkgYSBsaWJyYXJ5IGNhbGwuICpzdHJpbmcqIHJlcHJlc2VudHMgdGhlIGRlc2NyaXB0aW9uIG9mICpoX2Vycm5vKiwgYXMKLSAgIHJldHVybmVkIGJ5IHRoZSA6Y2Z1bmM6YGhzdHJlcnJvcmAgQyBmdW5jdGlvbi4KKyAgIEEgc3ViY2xhc3Mgb2YgOmV4Yzpgc29ja2V0LmVycm9yYCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGZvcgorICAgYWRkcmVzcy1yZWxhdGVkIGVycm9ycywgaS5lLiBmb3IgZnVuY3Rpb25zIHRoYXQgdXNlICpoX2Vycm5vKiBpbiB0aGUgUE9TSVgKKyAgIEMgQVBJLCBpbmNsdWRpbmcgOmZ1bmM6YGdldGhvc3RieW5hbWVfZXhgIGFuZCA6ZnVuYzpgZ2V0aG9zdGJ5YWRkcmAuCisgICBUaGUgYWNjb21wYW55aW5nIHZhbHVlIGlzIGEgcGFpciBgYChoX2Vycm5vLCBzdHJpbmcpYGAgcmVwcmVzZW50aW5nIGFuCisgICBlcnJvciByZXR1cm5lZCBieSBhIGxpYnJhcnkgY2FsbC4gICpoX2Vycm5vKiBpcyBhIG51bWVyaWMgdmFsdWUsIHdoaWxlCisgICAqc3RyaW5nKiByZXByZXNlbnRzIHRoZSBkZXNjcmlwdGlvbiBvZiAqaF9lcnJubyosIGFzIHJldHVybmVkIGJ5IHRoZQorICAgOmM6ZnVuYzpgaHN0cmVycm9yYCBDIGZ1bmN0aW9uLgogCiAKIC4uIGV4Y2VwdGlvbjo6IGdhaWVycm9yCiAKLSAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBmb3IgYWRkcmVzcy1yZWxhdGVkIGVycm9ycywgZm9yIDpmdW5jOmBnZXRhZGRyaW5mb2AgYW5kCi0gICA6ZnVuYzpgZ2V0bmFtZWluZm9gLiBUaGUgYWNjb21wYW55aW5nIHZhbHVlIGlzIGEgcGFpciBgYChlcnJvciwgc3RyaW5nKWBgCi0gICByZXByZXNlbnRpbmcgYW4gZXJyb3IgcmV0dXJuZWQgYnkgYSBsaWJyYXJ5IGNhbGwuICpzdHJpbmcqIHJlcHJlc2VudHMgdGhlCi0gICBkZXNjcmlwdGlvbiBvZiAqZXJyb3IqLCBhcyByZXR1cm5lZCBieSB0aGUgOmNmdW5jOmBnYWlfc3RyZXJyb3JgIEMgZnVuY3Rpb24uIFRoZQotICAgKmVycm9yKiB2YWx1ZSB3aWxsIG1hdGNoIG9uZSBvZiB0aGUgOmNvbnN0OmBFQUlfXCpgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMKLSAgIG1vZHVsZS4KKyAgIEEgc3ViY2xhc3Mgb2YgOmV4Yzpgc29ja2V0LmVycm9yYCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGZvcgorICAgYWRkcmVzcy1yZWxhdGVkIGVycm9ycyBieSA6ZnVuYzpgZ2V0YWRkcmluZm9gIGFuZCA6ZnVuYzpgZ2V0bmFtZWluZm9gLgorICAgVGhlIGFjY29tcGFueWluZyB2YWx1ZSBpcyBhIHBhaXIgYGAoZXJyb3IsIHN0cmluZylgYCByZXByZXNlbnRpbmcgYW4gZXJyb3IKKyAgIHJldHVybmVkIGJ5IGEgbGlicmFyeSBjYWxsLiAgKnN0cmluZyogcmVwcmVzZW50cyB0aGUgZGVzY3JpcHRpb24gb2YKKyAgICplcnJvciosIGFzIHJldHVybmVkIGJ5IHRoZSA6YzpmdW5jOmBnYWlfc3RyZXJyb3JgIEMgZnVuY3Rpb24uICBUaGUKKyAgIG51bWVyaWMgKmVycm9yKiB2YWx1ZSB3aWxsIG1hdGNoIG9uZSBvZiB0aGUgOmNvbnN0OmBFQUlfXCpgIGNvbnN0YW50cworICAgZGVmaW5lZCBpbiB0aGlzIG1vZHVsZS4KIAogCiAuLiBleGNlcHRpb246OiB0aW1lb3V0CiAKLSAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGEgdGltZW91dCBvY2N1cnMgb24gYSBzb2NrZXQgd2hpY2ggaGFzIGhhZAotICAgdGltZW91dHMgZW5hYmxlZCB2aWEgYSBwcmlvciBjYWxsIHRvIDptZXRoOmB+c29ja2V0LnNldHRpbWVvdXRgLiAgVGhlCi0gICBhY2NvbXBhbnlpbmcgdmFsdWUgaXMgYSBzdHJpbmcgd2hvc2UgdmFsdWUgaXMgY3VycmVudGx5IGFsd2F5cyAidGltZWQgb3V0Ii4KKyAgIEEgc3ViY2xhc3Mgb2YgOmV4Yzpgc29ja2V0LmVycm9yYCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYSB0aW1lb3V0CisgICBvY2N1cnMgb24gYSBzb2NrZXQgd2hpY2ggaGFzIGhhZCB0aW1lb3V0cyBlbmFibGVkIHZpYSBhIHByaW9yIGNhbGwgdG8KKyAgIDptZXRoOmB+c29ja2V0LnNldHRpbWVvdXRgIChvciBpbXBsaWNpdGx5IHRocm91Z2gKKyAgIDpmdW5jOmB+c29ja2V0LnNldGRlZmF1bHR0aW1lb3V0YCkuICBUaGUgYWNjb21wYW55aW5nIHZhbHVlIGlzIGEgc3RyaW5nCisgICB3aG9zZSB2YWx1ZSBpcyBjdXJyZW50bHkgYWx3YXlzICJ0aW1lZCBvdXQiLgogCiAKIC4uIGRhdGE6OiBBRl9VTklYCkBAIC0xNzQsNiArMTc4LDIxIEBACiAgICAoT25seSA6Y29uc3Q6YFNPQ0tfU1RSRUFNYCBhbmQgOmNvbnN0OmBTT0NLX0RHUkFNYCBhcHBlYXIgdG8gYmUgZ2VuZXJhbGx5CiAgICB1c2VmdWwuKQogCisuLiBkYXRhOjogU09DS19DTE9FWEVDCisgICAgICAgICAgU09DS19OT05CTE9DSworCisgICBUaGVzZSB0d28gY29uc3RhbnRzLCBpZiBkZWZpbmVkLCBjYW4gYmUgY29tYmluZWQgd2l0aCB0aGUgc29ja2V0IHR5cGVzIGFuZAorICAgYWxsb3cgeW91IHRvIHNldCBzb21lIGZsYWdzIGF0b21pY2FsbHkgKHRodXMgYXZvaWRpbmcgcG9zc2libGUgcmFjZQorICAgY29uZGl0aW9ucyBhbmQgdGhlIG5lZWQgZm9yIHNlcGFyYXRlIGNhbGxzKS4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIGBTZWN1cmUgRmlsZSBEZXNjcmlwdG9yIEhhbmRsaW5nIDxodHRwOi8vdWRyZXBwZXIubGl2ZWpvdXJuYWwuY29tLzIwNDA3Lmh0bWw+YF8KKyAgICAgIGZvciBhIG1vcmUgdGhvcm91Z2ggZXhwbGFuYXRpb24uCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggPj0gMi42LjI3LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogLi4gZGF0YTo6IFNPXyoKICAgICAgICAgICBTT01BWENPTk4KQEAgLTIxNSw3ICsyMzQsNyBAQAogICAgdGhpcyBwbGF0Zm9ybS4KIAogCi0uLiBmdW5jdGlvbjo6IGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3NbLCB0aW1lb3V0XSkKKy4uIGZ1bmN0aW9uOjogY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzc1ssIHRpbWVvdXRbLCBzb3VyY2VfYWRkcmVzc11dKQogCiAgICBDb252ZW5pZW5jZSBmdW5jdGlvbi4gIENvbm5lY3QgdG8gKmFkZHJlc3MqIChhIDItdHVwbGUgYGAoaG9zdCwgcG9ydClgYCksCiAgICBhbmQgcmV0dXJuIHRoZSBzb2NrZXQgb2JqZWN0LiAgUGFzc2luZyB0aGUgb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlciB3aWxsCkBAIC0yMjMsOCArMjQyLDE4IEBACiAgICAqdGltZW91dCogaXMgc3VwcGxpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0IHNldHRpbmcgcmV0dXJuZWQgYnkKICAgIDpmdW5jOmBnZXRkZWZhdWx0dGltZW91dGAgaXMgdXNlZC4KIAorICAgSWYgc3VwcGxpZWQsICpzb3VyY2VfYWRkcmVzcyogbXVzdCBiZSBhIDItdHVwbGUgYGAoaG9zdCwgcG9ydClgYCBmb3IgdGhlCisgICBzb2NrZXQgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlIGNvbm5lY3RpbmcuICBJZiBob3N0IG9yIHBvcnQKKyAgIGFyZSAnJyBvciAwIHJlc3BlY3RpdmVseSB0aGUgT1MgZGVmYXVsdCBiZWhhdmlvciB3aWxsIGJlIHVzZWQuCiAKLS4uIGZ1bmN0aW9uOjogZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5PTAsIHNvY2t0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgKnNvdXJjZV9hZGRyZXNzKiB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBzdXBwb3J0IGZvciB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB3YXMgYWRkZWQuCisKKworLi4gZnVuY3Rpb246OiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKQogCiAgICBUcmFuc2xhdGUgdGhlICpob3N0Ki8qcG9ydCogYXJndW1lbnQgaW50byBhIHNlcXVlbmNlIG9mIDUtdHVwbGVzIHRoYXQgY29udGFpbgogICAgYWxsIHRoZSBuZWNlc3NhcnkgYXJndW1lbnRzIGZvciBjcmVhdGluZyBhIHNvY2tldCBjb25uZWN0ZWQgdG8gdGhhdCBzZXJ2aWNlLgpAQCAtMjMzLDcgKzI2Miw3IEBACiAgICBwb3J0IG51bWJlciBvciBgYE5vbmVgYC4gIEJ5IHBhc3NpbmcgYGBOb25lYGAgYXMgdGhlIHZhbHVlIG9mICpob3N0KgogICAgYW5kICpwb3J0KiwgeW91IGNhbiBwYXNzIGBgTlVMTGBgIHRvIHRoZSB1bmRlcmx5aW5nIEMgQVBJLgogCi0gICBUaGUgKmZhbWlseSosICpzb2NrdHlwZSogYW5kICpwcm90byogYXJndW1lbnRzIGNhbiBiZSBvcHRpb25hbGx5IHNwZWNpZmllZAorICAgVGhlICpmYW1pbHkqLCAqdHlwZSogYW5kICpwcm90byogYXJndW1lbnRzIGNhbiBiZSBvcHRpb25hbGx5IHNwZWNpZmllZAogICAgaW4gb3JkZXIgdG8gbmFycm93IHRoZSBsaXN0IG9mIGFkZHJlc3NlcyByZXR1cm5lZC4gIFBhc3NpbmcgemVybyBhcyBhCiAgICB2YWx1ZSBmb3IgZWFjaCBvZiB0aGVzZSBhcmd1bWVudHMgc2VsZWN0cyB0aGUgZnVsbCByYW5nZSBvZiByZXN1bHRzLgogICAgVGhlICpmbGFncyogYXJndW1lbnQgY2FuIGJlIG9uZSBvciBzZXZlcmFsIG9mIHRoZSBgYEFJXypgYCBjb25zdGFudHMsCkBAIC0yNDMsOSArMjcyLDkgQEAKIAogICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIDUtdHVwbGVzIHdpdGggdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6CiAKLSAgIGBgKGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKWBgCisgICBgYChmYW1pbHksIHR5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKWBgCiAKLSAgIEluIHRoZXNlIHR1cGxlcywgKmZhbWlseSosICpzb2NrdHlwZSosICpwcm90byogYXJlIGFsbCBpbnRlZ2VycyBhbmQgYXJlCisgICBJbiB0aGVzZSB0dXBsZXMsICpmYW1pbHkqLCAqdHlwZSosICpwcm90byogYXJlIGFsbCBpbnRlZ2VycyBhbmQgYXJlCiAgICBtZWFudCB0byBiZSBwYXNzZWQgdG8gdGhlIDpmdW5jOmBzb2NrZXRgIGZ1bmN0aW9uLiAgKmNhbm9ubmFtZSogd2lsbCBiZQogICAgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgKmhvc3QqIGlmCiAgICA6Y29uc3Q6YEFJX0NBTk9OTkFNRWAgaXMgcGFydCBvZiB0aGUgKmZsYWdzKiBhcmd1bWVudDsgZWxzZSAqY2Fub25uYW1lKgpAQCAtMjU5LDEwICsyODgsMTMgQEAKICAgIGNvbm5lY3Rpb24gdG8gYGB3d3cucHl0aG9uLm9yZ2BgIG9uIHBvcnQgODAgKHJlc3VsdHMgbWF5IGRpZmZlciBvbiB5b3VyCiAgICBzeXN0ZW0gaWYgSVB2NiBpc24ndCBlbmFibGVkKTo6CiAKLSAgICAgID4+PiBzb2NrZXQuZ2V0YWRkcmluZm8oInd3dy5weXRob24ub3JnIiwgODAsIDAsIDAsIHNvY2tldC5TT0xfVENQKQorICAgICAgPj4+IHNvY2tldC5nZXRhZGRyaW5mbygid3d3LnB5dGhvbi5vcmciLCA4MCwgcHJvdG89c29ja2V0LlNPTF9UQ1ApCiAgICAgICBbKDIsIDEsIDYsICcnLCAoJzgyLjk0LjE2NC4xNjInLCA4MCkpLAogICAgICAgICgxMCwgMSwgNiwgJycsICgnMjAwMTo4ODg6MjAwMDpkOjphMicsIDgwLCAwLCAwKSldCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBwYXJhbWV0ZXJzIGNhbiBub3cgYmUgcGFzc2VkIGFzIHNpbmdsZSBrZXl3b3JkIGFyZ3VtZW50cy4KKwogLi4gZnVuY3Rpb246OiBnZXRmcWRuKFtuYW1lXSkKIAogICAgUmV0dXJuIGEgZnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lIGZvciAqbmFtZSouIElmICpuYW1lKiBpcyBvbWl0dGVkIG9yIGVtcHR5LApAQCAtMzY4LDYgKzQwMCwxMCBAQAogICAgaWYgZGVmaW5lZCBvbiB0aGUgcGxhdGZvcm07IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBBRl9JTkVUYC4KICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgd2hvbGUgc29ja2V0IEFQSSwgcmF0aGVyCisgICAgICB0aGFuIGEgc3Vic2V0LgorCiAKIC4uIGZ1bmN0aW9uOjogZnJvbWZkKGZkLCBmYW1pbHksIHR5cGVbLCBwcm90b10pCiAKQEAgLTM3OSw3ICs0MTUsNiBAQAogICAgVGhpcyBmdW5jdGlvbiBpcyByYXJlbHkgbmVlZGVkLCBidXQgY2FuIGJlIHVzZWQgdG8gZ2V0IG9yIHNldCBzb2NrZXQgb3B0aW9ucyBvbgogICAgYSBzb2NrZXQgcGFzc2VkIHRvIGEgcHJvZ3JhbSBhcyBzdGFuZGFyZCBpbnB1dCBvciBvdXRwdXQgKHN1Y2ggYXMgYSBzZXJ2ZXIKICAgIHN0YXJ0ZWQgYnkgdGhlIFVuaXggaW5ldCBkYWVtb24pLiAgVGhlIHNvY2tldCBpcyBhc3N1bWVkIHRvIGJlIGluIGJsb2NraW5nIG1vZGUuCi0gICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAogLi4gZnVuY3Rpb246OiBudG9obCh4KQpAQCAtNDE1LDcgKzQ1MCw3IEBACiAgICBDb252ZXJ0IGFuIElQdjQgYWRkcmVzcyBmcm9tIGRvdHRlZC1xdWFkIHN0cmluZyBmb3JtYXQgKGZvciBleGFtcGxlLAogICAgJzEyMy40NS42Ny44OScpIHRvIDMyLWJpdCBwYWNrZWQgYmluYXJ5IGZvcm1hdCwgYXMgYSBieXRlcyBvYmplY3QgZm91ciBjaGFyYWN0ZXJzIGluCiAgICBsZW5ndGguICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNvbnZlcnNpbmcgd2l0aCBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBzdGFuZGFyZCBDCi0gICBsaWJyYXJ5IGFuZCBuZWVkcyBvYmplY3RzIG9mIHR5cGUgOmN0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAsIHdoaWNoIGlzIHRoZSBDIHR5cGUKKyAgIGxpYnJhcnkgYW5kIG5lZWRzIG9iamVjdHMgb2YgdHlwZSA6Yzp0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAsIHdoaWNoIGlzIHRoZSBDIHR5cGUKICAgIGZvciB0aGUgMzItYml0IHBhY2tlZCBiaW5hcnkgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgogCiAgICA6ZnVuYzpgaW5ldF9hdG9uYCBhbHNvIGFjY2VwdHMgc3RyaW5ncyB3aXRoIGxlc3MgdGhhbiB0aHJlZSBkb3RzOyBzZWUgdGhlCkBAIC00MjMsNyArNDU4LDcgQEAKIAogICAgSWYgdGhlIElQdjQgYWRkcmVzcyBzdHJpbmcgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaXMgaW52YWxpZCwKICAgIDpleGM6YHNvY2tldC5lcnJvcmAgd2lsbCBiZSByYWlzZWQuIE5vdGUgdGhhdCBleGFjdGx5IHdoYXQgaXMgdmFsaWQgZGVwZW5kcyBvbgotICAgdGhlIHVuZGVybHlpbmcgQyBpbXBsZW1lbnRhdGlvbiBvZiA6Y2Z1bmM6YGluZXRfYXRvbmAuCisgICB0aGUgdW5kZXJseWluZyBDIGltcGxlbWVudGF0aW9uIG9mIDpjOmZ1bmM6YGluZXRfYXRvbmAuCiAKICAgIDpmdW5jOmBpbmV0X2F0b25gIGRvZXMgbm90IHN1cHBvcnQgSVB2NiwgYW5kIDpmdW5jOmBpbmV0X3B0b25gIHNob3VsZCBiZSB1c2VkCiAgICBpbnN0ZWFkIGZvciBJUHY0L3Y2IGR1YWwgc3RhY2sgc3VwcG9ydC4KQEAgLTQzNCw3ICs0NjksNyBAQAogICAgQ29udmVydCBhIDMyLWJpdCBwYWNrZWQgSVB2NCBhZGRyZXNzIChhIGJ5dGVzIG9iamVjdCBmb3VyIGNoYXJhY3RlcnMgaW4KICAgIGxlbmd0aCkgdG8gaXRzIHN0YW5kYXJkIGRvdHRlZC1xdWFkIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZm9yIGV4YW1wbGUsCiAgICAnMTIzLjQ1LjY3Ljg5JykuICBUaGlzIGlzIHVzZWZ1bCB3aGVuIGNvbnZlcnNpbmcgd2l0aCBhIHByb2dyYW0gdGhhdCB1c2VzIHRoZQotICAgc3RhbmRhcmQgQyBsaWJyYXJ5IGFuZCBuZWVkcyBvYmplY3RzIG9mIHR5cGUgOmN0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAsIHdoaWNoCisgICBzdGFuZGFyZCBDIGxpYnJhcnkgYW5kIG5lZWRzIG9iamVjdHMgb2YgdHlwZSA6Yzp0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAsIHdoaWNoCiAgICBpcyB0aGUgQyB0eXBlIGZvciB0aGUgMzItYml0IHBhY2tlZCBiaW5hcnkgZGF0YSB0aGlzIGZ1bmN0aW9uIHRha2VzIGFzIGFuCiAgICBhcmd1bWVudC4KIApAQCAtNDQ4LDE0ICs0ODMsMTQgQEAKIAogICAgQ29udmVydCBhbiBJUCBhZGRyZXNzIGZyb20gaXRzIGZhbWlseS1zcGVjaWZpYyBzdHJpbmcgZm9ybWF0IHRvIGEgcGFja2VkLAogICAgYmluYXJ5IGZvcm1hdC4gOmZ1bmM6YGluZXRfcHRvbmAgaXMgdXNlZnVsIHdoZW4gYSBsaWJyYXJ5IG9yIG5ldHdvcmsgcHJvdG9jb2wKLSAgIGNhbGxzIGZvciBhbiBvYmplY3Qgb2YgdHlwZSA6Y3R5cGU6YHN0cnVjdCBpbl9hZGRyYCAoc2ltaWxhciB0bwotICAgOmZ1bmM6YGluZXRfYXRvbmApIG9yIDpjdHlwZTpgc3RydWN0IGluNl9hZGRyYC4KKyAgIGNhbGxzIGZvciBhbiBvYmplY3Qgb2YgdHlwZSA6Yzp0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAgKHNpbWlsYXIgdG8KKyAgIDpmdW5jOmBpbmV0X2F0b25gKSBvciA6Yzp0eXBlOmBzdHJ1Y3QgaW42X2FkZHJgLgogCiAgICBTdXBwb3J0ZWQgdmFsdWVzIGZvciAqYWRkcmVzc19mYW1pbHkqIGFyZSBjdXJyZW50bHkgOmNvbnN0OmBBRl9JTkVUYCBhbmQKICAgIDpjb25zdDpgQUZfSU5FVDZgLiBJZiB0aGUgSVAgYWRkcmVzcyBzdHJpbmcgKmlwX3N0cmluZyogaXMgaW52YWxpZCwKICAgIDpleGM6YHNvY2tldC5lcnJvcmAgd2lsbCBiZSByYWlzZWQuIE5vdGUgdGhhdCBleGFjdGx5IHdoYXQgaXMgdmFsaWQgZGVwZW5kcyBvbgogICAgYm90aCB0aGUgdmFsdWUgb2YgKmFkZHJlc3NfZmFtaWx5KiBhbmQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gb2YKLSAgIDpjZnVuYzpgaW5ldF9wdG9uYC4KKyAgIDpjOmZ1bmM6YGluZXRfcHRvbmAuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLgogCkBAIC00NjUsOCArNTAwLDggQEAKICAgIENvbnZlcnQgYSBwYWNrZWQgSVAgYWRkcmVzcyAoYSBieXRlcyBvYmplY3Qgb2Ygc29tZSBudW1iZXIgb2YgY2hhcmFjdGVycykgdG8gaXRzCiAgICBzdGFuZGFyZCwgZmFtaWx5LXNwZWNpZmljIHN0cmluZyByZXByZXNlbnRhdGlvbiAoZm9yIGV4YW1wbGUsIGBgJzcuMTAuMC41J2BgIG9yCiAgICBgYCc1YWVmOjJiOjo4J2BgKS4gOmZ1bmM6YGluZXRfbnRvcGAgaXMgdXNlZnVsIHdoZW4gYSBsaWJyYXJ5IG9yIG5ldHdvcmsgcHJvdG9jb2wKLSAgIHJldHVybnMgYW4gb2JqZWN0IG9mIHR5cGUgOmN0eXBlOmBzdHJ1Y3QgaW5fYWRkcmAgKHNpbWlsYXIgdG8gOmZ1bmM6YGluZXRfbnRvYWApCi0gICBvciA6Y3R5cGU6YHN0cnVjdCBpbjZfYWRkcmAuCisgICByZXR1cm5zIGFuIG9iamVjdCBvZiB0eXBlIDpjOnR5cGU6YHN0cnVjdCBpbl9hZGRyYCAoc2ltaWxhciB0byA6ZnVuYzpgaW5ldF9udG9hYCkKKyAgIG9yIDpjOnR5cGU6YHN0cnVjdCBpbjZfYWRkcmAuCiAKICAgIFN1cHBvcnRlZCB2YWx1ZXMgZm9yICphZGRyZXNzX2ZhbWlseSogYXJlIGN1cnJlbnRseSA6Y29uc3Q6YEFGX0lORVRgIGFuZAogICAgOmNvbnN0OmBBRl9JTkVUNmAuIElmIHRoZSBzdHJpbmcgKnBhY2tlZF9pcCogaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCBmb3IgdGhlCkBAIC01NDIsMTMgKzU3NywyMiBAQAogLi4gbWV0aG9kOjogc29ja2V0LmNvbm5lY3RfZXgoYWRkcmVzcykKIAogICAgTGlrZSBgYGNvbm5lY3QoYWRkcmVzcylgYCwgYnV0IHJldHVybiBhbiBlcnJvciBpbmRpY2F0b3IgaW5zdGVhZCBvZiByYWlzaW5nIGFuCi0gICBleGNlcHRpb24gZm9yIGVycm9ycyByZXR1cm5lZCBieSB0aGUgQy1sZXZlbCA6Y2Z1bmM6YGNvbm5lY3RgIGNhbGwgKG90aGVyCisgICBleGNlcHRpb24gZm9yIGVycm9ycyByZXR1cm5lZCBieSB0aGUgQy1sZXZlbCA6YzpmdW5jOmBjb25uZWN0YCBjYWxsIChvdGhlcgogICAgcHJvYmxlbXMsIHN1Y2ggYXMgImhvc3Qgbm90IGZvdW5kLCIgY2FuIHN0aWxsIHJhaXNlIGV4Y2VwdGlvbnMpLiAgVGhlIGVycm9yCiAgICBpbmRpY2F0b3IgaXMgYGAwYGAgaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkZWQsIG90aGVyd2lzZSB0aGUgdmFsdWUgb2YgdGhlCi0gICA6Y2RhdGE6YGVycm5vYCB2YXJpYWJsZS4gIFRoaXMgaXMgdXNlZnVsIHRvIHN1cHBvcnQsIGZvciBleGFtcGxlLCBhc3luY2hyb25vdXMKKyAgIDpjOmRhdGE6YGVycm5vYCB2YXJpYWJsZS4gIFRoaXMgaXMgdXNlZnVsIHRvIHN1cHBvcnQsIGZvciBleGFtcGxlLCBhc3luY2hyb25vdXMKICAgIGNvbm5lY3RzLgogCiAKKy4uIG1ldGhvZDo6IHNvY2tldC5kZXRhY2goKQorCisgICBQdXQgdGhlIHNvY2tldCBvYmplY3QgaW50byBjbG9zZWQgc3RhdGUgd2l0aG91dCBhY3R1YWxseSBjbG9zaW5nIHRoZQorICAgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IuICBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIHJldHVybmVkLCBhbmQgY2FuCisgICBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBtZXRob2Q6OiBzb2NrZXQuZmlsZW5vKCkKIAogICAgUmV0dXJuIHRoZSBzb2NrZXQncyBmaWxlIGRlc2NyaXB0b3IgKGEgc21hbGwgaW50ZWdlcikuICBUaGlzIGlzIHVzZWZ1bCB3aXRoCkBAIC02MTIsNyArNjU2LDggQEAKICAgIGlzIHN5c3RlbS1kZXBlbmRlbnQgKHVzdWFsbHkgNSkuCiAKIAotLi4gbWV0aG9kOjogc29ja2V0Lm1ha2VmaWxlKG1vZGU9J3InLCBidWZmZXJpbmc9Tm9uZSwgKiwgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSkKKy4uIG1ldGhvZDo6IHNvY2tldC5tYWtlZmlsZShtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsICosIGVuY29kaW5nPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogSS9PIGNvbnRyb2w7IGJ1ZmZlcmluZwogCkBAIC02NjgsOSArNzEzLDkgQEAKIAogICAgUmVjZWl2ZSB1cCB0byAqbmJ5dGVzKiBieXRlcyBmcm9tIHRoZSBzb2NrZXQsIHN0b3JpbmcgdGhlIGRhdGEgaW50byBhIGJ1ZmZlcgogICAgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBuZXcgYnl0ZXN0cmluZy4gIElmICpuYnl0ZXMqIGlzIG5vdCBzcGVjaWZpZWQgKG9yIDApLAotICAgcmVjZWl2ZSB1cCB0byB0aGUgc2l6ZSBhdmFpbGFibGUgaW4gdGhlIGdpdmVuIGJ1ZmZlci4gU2VlIHRoZSBVbml4IG1hbnVhbCBwYWdlCi0gICA6bWFucGFnZTpgcmVjdigyKWAgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqZmxhZ3MqOyBpdCBkZWZhdWx0cwotICAgdG8gemVyby4KKyAgIHJlY2VpdmUgdXAgdG8gdGhlIHNpemUgYXZhaWxhYmxlIGluIHRoZSBnaXZlbiBidWZmZXIuICBSZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgIGJ5dGVzIHJlY2VpdmVkLiAgU2VlIHRoZSBVbml4IG1hbnVhbCBwYWdlIDptYW5wYWdlOmByZWN2KDIpYCBmb3IgdGhlIG1lYW5pbmcKKyAgIG9mIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqZmxhZ3MqOyBpdCBkZWZhdWx0cyB0byB6ZXJvLgogCiAKIC4uIG1ldGhvZDo6IHNvY2tldC5zZW5kKGJ5dGVzWywgZmxhZ3NdKQpAQCAtODA3LDYgKzg1MiwyMSBAQAogcmV0dXJuIGEgY29ubmVjdGlvbiB0aW1lb3V0IGVycm9yIG9mIGl0cyBvd24gcmVnYXJkbGVzcyBvZiBhbnkgUHl0aG9uIHNvY2tldAogdGltZW91dCBzZXR0aW5nLgogCitUaW1lb3V0cyBhbmQgdGhlIGBgYWNjZXB0YGAgbWV0aG9kCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lmIDpmdW5jOmBnZXRkZWZhdWx0dGltZW91dGAgaXMgbm90IDpjb25zdDpgTm9uZWAsIHNvY2tldHMgcmV0dXJuZWQgYnkKK3RoZSA6bWV0aDpgfnNvY2tldC5hY2NlcHRgIG1ldGhvZCBpbmhlcml0IHRoYXQgdGltZW91dC4gIE90aGVyd2lzZSwgdGhlCitiZWhhdmlvdXIgZGVwZW5kcyBvbiBzZXR0aW5ncyBvZiB0aGUgbGlzdGVuaW5nIHNvY2tldDoKKworKiBpZiB0aGUgbGlzdGVuaW5nIHNvY2tldCBpcyBpbiAqYmxvY2tpbmcgbW9kZSogb3IgaW4gKnRpbWVvdXQgbW9kZSosCisgIHRoZSBzb2NrZXQgcmV0dXJuZWQgYnkgOm1ldGg6YH5zb2NrZXQuYWNjZXB0YCBpcyBpbiAqYmxvY2tpbmcgbW9kZSo7CisKKyogaWYgdGhlIGxpc3RlbmluZyBzb2NrZXQgaXMgaW4gKm5vbi1ibG9ja2luZyBtb2RlKiwgd2hldGhlciB0aGUgc29ja2V0CisgIHJldHVybmVkIGJ5IDptZXRoOmB+c29ja2V0LmFjY2VwdGAgaXMgaW4gYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nIG1vZGUKKyAgaXMgb3BlcmF0aW5nIHN5c3RlbS1kZXBlbmRlbnQuICBJZiB5b3Ugd2FudCB0byBlbnN1cmUgY3Jvc3MtcGxhdGZvcm0KKyAgYmVoYXZpb3VyLCBpdCBpcyByZWNvbW1lbmRlZCB5b3UgbWFudWFsbHkgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLgorCiAKIC4uIF9zb2NrZXQtZXhhbXBsZToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdCBiL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKaW5kZXggODJkMTEwNy4uZWQ1NDdmNWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdApAQCAtMSwxMCArMSwxMyBAQAotCiA6bW9kOmBzb2NrZXRzZXJ2ZXJgIC0tLSBBIGZyYW1ld29yayBmb3IgbmV0d29yayBzZXJ2ZXJzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIG1vZHVsZTo6IHNvY2tldHNlcnZlcgogICAgOnN5bm9wc2lzOiBBIGZyYW1ld29yayBmb3IgbmV0d29yayBzZXJ2ZXJzLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zb2NrZXRzZXJ2ZXIucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoZSA6bW9kOmBzb2NrZXRzZXJ2ZXJgIG1vZHVsZSBzaW1wbGlmaWVzIHRoZSB0YXNrIG9mIHdyaXRpbmcgbmV0d29yayBzZXJ2ZXJzLgogCiBUaGVyZSBhcmUgZm91ciBiYXNpYyBzZXJ2ZXIgY2xhc3NlczogOmNsYXNzOmBUQ1BTZXJ2ZXJgIHVzZXMgdGhlIEludGVybmV0IFRDUApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc29tZW9zLnJzdCBiL0RvYy9saWJyYXJ5L3NvbWVvcy5yc3QKaW5kZXggY2YzZWI2Yi4uZDIwMDliYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc29tZW9zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zb21lb3MucnN0CkBAIC0xNSw2ICsxNSw3IEBACiAgICBzZWxlY3QucnN0CiAgICB0aHJlYWRpbmcucnN0CiAgICBtdWx0aXByb2Nlc3NpbmcucnN0CisgICBjb25jdXJyZW50LmZ1dHVyZXMucnN0CiAgICBtbWFwLnJzdAogICAgcmVhZGxpbmUucnN0CiAgICBybGNvbXBsZXRlci5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NxbGl0ZTMucnN0IGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKaW5kZXggMDYwMzczOC4uNzM2NzY3NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QKQEAgLTkwLDcgKzkwLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGh0dHA6Ly93d3cucHlzcWxpdGUub3JnCisgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHlzcWxpdGUvCiAgICAgICBUaGUgcHlzcWxpdGUgd2ViIHBhZ2UgLS0gc3FsaXRlMyBpcyBkZXZlbG9wZWQgZXh0ZXJuYWxseSB1bmRlciB0aGUgbmFtZQogICAgICAgInB5c3FsaXRlIi4KIApAQCAtMjI3LDYgKzIyNywxMiBAQAogICAgb25lIG9mICJERUZFUlJFRCIsICJJTU1FRElBVEUiIG9yICJFWENMVVNJVkUiLiBTZWUgc2VjdGlvbgogICAgOnJlZjpgc3FsaXRlMy1jb250cm9sbGluZy10cmFuc2FjdGlvbnNgIGZvciBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24uCiAKKy4uIGF0dHJpYnV0ZTo6IENvbm5lY3Rpb24uaW5fdHJhbnNhY3Rpb24KKworICAgOmNvbnN0OmBUcnVlYCBpZiBhIHRyYW5zYWN0aW9uIGlzIGFjdGl2ZSAodGhlcmUgYXJlIHVuY29tbWl0dGVkIGNoYW5nZXMpLAorICAgOmNvbnN0OmBGYWxzZWAgb3RoZXJ3aXNlLiAgUmVhZC1vbmx5IGF0dHJpYnV0ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIC4uIG1ldGhvZDo6IENvbm5lY3Rpb24uY3Vyc29yKFtjdXJzb3JDbGFzc10pCiAKQEAgLTM2Myw2ICszNjksMjkgQEAKICAgIG1ldGhvZCB3aXRoIDpjb25zdDpgTm9uZWAgZm9yICpoYW5kbGVyKi4KIAogCisuLiBtZXRob2Q6OiBDb25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbihlbmFibGVkKQorCisgICBUaGlzIHJvdXRpbmUgYWxsb3dzL2Rpc2FsbG93cyB0aGUgU1FMaXRlIGVuZ2luZSB0byBsb2FkIFNRTGl0ZSBleHRlbnNpb25zCisgICBmcm9tIHNoYXJlZCBsaWJyYXJpZXMuICBTUUxpdGUgZXh0ZW5zaW9ucyBjYW4gZGVmaW5lIG5ldyBmdW5jdGlvbnMsCisgICBhZ2dyZWdhdGVzIG9yIHdob2xlIG5ldyB2aXJ0dWFsIHRhYmxlIGltcGxlbWVudGF0aW9ucy4gIE9uZSB3ZWxsLWtub3duCisgICBleHRlbnNpb24gaXMgdGhlIGZ1bGx0ZXh0LXNlYXJjaCBleHRlbnNpb24gZGlzdHJpYnV0ZWQgd2l0aCBTUUxpdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisgICAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL3NxbGl0ZTMvbG9hZF9leHRlbnNpb24ucHkKKworICAgTG9hZGFibGUgZXh0ZW5zaW9ucyBhcmUgZGlzYWJsZWQgYnkgZGVmYXVsdC4gU2VlIFsjZjFdXy4KKworLi4gbWV0aG9kOjogQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbihwYXRoKQorCisgICBUaGlzIHJvdXRpbmUgbG9hZHMgYSBTUUxpdGUgZXh0ZW5zaW9uIGZyb20gYSBzaGFyZWQgbGlicmFyeS4gIFlvdSBoYXZlIHRvCisgICBlbmFibGUgZXh0ZW5zaW9uIGxvYWRpbmcgd2l0aCA6bWV0aDpgZW5hYmxlX2xvYWRfZXh0ZW5zaW9uYCBiZWZvcmUgeW91IGNhbgorICAgdXNlIHRoaXMgcm91dGluZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKyAgIExvYWRhYmxlIGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFNlZSBbI2YxXV8uCisKIC4uIGF0dHJpYnV0ZTo6IENvbm5lY3Rpb24ucm93X2ZhY3RvcnkKIAogICAgWW91IGNhbiBjaGFuZ2UgdGhpcyBhdHRyaWJ1dGUgdG8gYSBjYWxsYWJsZSB0aGF0IGFjY2VwdHMgdGhlIGN1cnNvciBhbmQgdGhlCkBAIC03ODUsNyArODE0LDggQEAKIGJlZm9yZSBleGVjdXRpbmcgdGhhdCBjb21tYW5kLiBUaGVyZSBhcmUgdHdvIHJlYXNvbnMgZm9yIGRvaW5nIHRoYXQuIFRoZSBmaXJzdAogaXMgdGhhdCBzb21lIG9mIHRoZXNlIGNvbW1hbmRzIGRvbid0IHdvcmsgd2l0aGluIHRyYW5zYWN0aW9ucy4gVGhlIG90aGVyIHJlYXNvbgogaXMgdGhhdCBzcWxpdGUzIG5lZWRzIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIChpZiBhIHRyYW5zYWN0aW9uCi1pcyBhY3RpdmUgb3Igbm90KS4KK2lzIGFjdGl2ZSBvciBub3QpLiAgVGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RhdGUgaXMgZXhwb3NlZCB0aHJvdWdoIHRoZQorOmF0dHI6YENvbm5lY3Rpb24uaW5fdHJhbnNhY3Rpb25gIGF0dHJpYnV0ZSBvZiB0aGUgY29ubmVjdGlvbiBvYmplY3QuCiAKIFlvdSBjYW4gY29udHJvbCB3aGljaCBraW5kIG9mIGBgQkVHSU5gYCBzdGF0ZW1lbnRzIHNxbGl0ZTMgaW1wbGljaXRseSBleGVjdXRlcwogKG9yIG5vbmUgYXQgYWxsKSB2aWEgdGhlICppc29sYXRpb25fbGV2ZWwqIHBhcmFtZXRlciB0byB0aGUgOmZ1bmM6YGNvbm5lY3RgCkBAIC04NTIsMyArODgyLDEwIEBACiAKIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyBjYWxsaW5nIHRoZSA6bWV0aDpgfkNvbm5lY3Rpb24uaW50ZXJydXB0YCBtZXRob2QsIHdoaWNoCiBvbmx5IG1ha2VzIHNlbnNlIHRvIGNhbGwgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisKKy4uIHJ1YnJpYzo6IEZvb3Rub3RlcworCisuLiBbI2YxXSBUaGUgc3FsaXRlMyBtb2R1bGUgaXMgbm90IGJ1aWx0IHdpdGggbG9hZGFibGUgZXh0ZW5zaW9uIHN1cHBvcnQgYnkKKyAgZGVmYXVsdCwgYmVjYXVzZSBzb21lIHBsYXRmb3JtcyAobm90YWJseSBNYWMgT1MgWCkgaGF2ZSBTUUxpdGUgbGlicmFyaWVzIHdoaWNoCisgIGFyZSBjb21waWxlZCB3aXRob3V0IHRoaXMgZmVhdHVyZS4gVG8gZ2V0IGxvYWRhYmxlIGV4dGVuc2lvbiBzdXBwb3J0LCB5b3UgbXVzdAorICBwYXNzIC0tZW5hYmxlLWxvYWRhYmxlLXNxbGl0ZS1leHRlbnNpb25zIHRvIGNvbmZpZ3VyZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGZmN2EwMTYuLjAxMWQzNzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMTIsNiArMTIsMTAgQEAKIAogLi4gaW5kZXg6OiBUTFMsIFNTTCwgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5LCBTZWN1cmUgU29ja2V0cyBMYXllcgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zc2wucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKG9mdGVuIGtub3duIGFzICJTZWN1cmUKIFNvY2tldHMgTGF5ZXIiKSBlbmNyeXB0aW9uIGFuZCBwZWVyIGF1dGhlbnRpY2F0aW9uIGZhY2lsaXRpZXMgZm9yIG5ldHdvcmsKIHNvY2tldHMsIGJvdGggY2xpZW50LXNpZGUgYW5kIHNlcnZlci1zaWRlLiAgVGhpcyBtb2R1bGUgdXNlcyB0aGUgT3BlblNTTApAQCAtMzEsMjMgKzM1LDQzIEBACiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzLCA6Y2xhc3M6YHNzbC5TU0xTb2NrZXRgLCB3aGljaCBpcyBkZXJpdmVkIGZyb20gdGhlCiA6Y2xhc3M6YHNvY2tldC5zb2NrZXRgIHR5cGUsIGFuZCBwcm92aWRlcyBhIHNvY2tldC1saWtlIHdyYXBwZXIgdGhhdCBhbHNvCiBlbmNyeXB0cyBhbmQgZGVjcnlwdHMgdGhlIGRhdGEgZ29pbmcgb3ZlciB0aGUgc29ja2V0IHdpdGggU1NMLiAgSXQgc3VwcG9ydHMKLWFkZGl0aW9uYWwgOm1ldGg6YHJlYWRgIGFuZCA6bWV0aDpgd3JpdGVgIG1ldGhvZHMsIGFsb25nIHdpdGggYSBtZXRob2QsCi06bWV0aDpgZ2V0cGVlcmNlcnRgLCB0byByZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgb2YgdGhlIG90aGVyIHNpZGUgb2YgdGhlCi1jb25uZWN0aW9uLCBhbmQgYSBtZXRob2QsIDptZXRoOmBjaXBoZXJgLCB0byByZXRyaWV2ZSB0aGUgY2lwaGVyIGJlaW5nIHVzZWQgZm9yCi10aGUgc2VjdXJlIGNvbm5lY3Rpb24uCithZGRpdGlvbmFsIG1ldGhvZHMgc3VjaCBhcyA6bWV0aDpgZ2V0cGVlcmNlcnRgLCB3aGljaCByZXRyaWV2ZXMgdGhlCitjZXJ0aWZpY2F0ZSBvZiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgY29ubmVjdGlvbiwgYW5kIDptZXRoOmBjaXBoZXJgLHdoaWNoCityZXRyaWV2ZXMgdGhlIGNpcGhlciBiZWluZyB1c2VkIGZvciB0aGUgc2VjdXJlIGNvbm5lY3Rpb24uCisKK0ZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgYXBwbGljYXRpb25zLCB0aGUgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgY2xhc3MKK2hlbHBzIG1hbmFnZSBzZXR0aW5ncyBhbmQgY2VydGlmaWNhdGVzLCB3aGljaCBjYW4gdGhlbiBiZSBpbmhlcml0ZWQKK2J5IFNTTCBzb2NrZXRzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgOm1ldGg6YFNTTENvbnRleHQud3JhcF9zb2NrZXRgIG1ldGhvZC4KKwogCiBGdW5jdGlvbnMsIENvbnN0YW50cywgYW5kIEV4Y2VwdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAuLiBleGNlcHRpb246OiBTU0xFcnJvcgogCi0gICBSYWlzZWQgdG8gc2lnbmFsIGFuIGVycm9yIGZyb20gdGhlIHVuZGVybHlpbmcgU1NMIGltcGxlbWVudGF0aW9uLiAgVGhpcwotICAgc2lnbmlmaWVzIHNvbWUgcHJvYmxlbSBpbiB0aGUgaGlnaGVyLWxldmVsIGVuY3J5cHRpb24gYW5kIGF1dGhlbnRpY2F0aW9uCi0gICBsYXllciB0aGF0J3Mgc3VwZXJpbXBvc2VkIG9uIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgY29ubmVjdGlvbi4gIFRoaXMgZXJyb3IKKyAgIFJhaXNlZCB0byBzaWduYWwgYW4gZXJyb3IgZnJvbSB0aGUgdW5kZXJseWluZyBTU0wgaW1wbGVtZW50YXRpb24KKyAgIChjdXJyZW50bHkgcHJvdmlkZWQgYnkgdGhlIE9wZW5TU0wgbGlicmFyeSkuICBUaGlzIHNpZ25pZmllcyBzb21lCisgICBwcm9ibGVtIGluIHRoZSBoaWdoZXItbGV2ZWwgZW5jcnlwdGlvbiBhbmQgYXV0aGVudGljYXRpb24gbGF5ZXIgdGhhdCdzCisgICBzdXBlcmltcG9zZWQgb24gdGhlIHVuZGVybHlpbmcgbmV0d29yayBjb25uZWN0aW9uLiAgVGhpcyBlcnJvcgogICAgaXMgYSBzdWJ0eXBlIG9mIDpleGM6YHNvY2tldC5lcnJvcmAsIHdoaWNoIGluIHR1cm4gaXMgYSBzdWJ0eXBlIG9mCi0gICA6ZXhjOmBJT0Vycm9yYC4KKyAgIDpleGM6YElPRXJyb3JgLiAgVGhlIGVycm9yIGNvZGUgYW5kIG1lc3NhZ2Ugb2YgOmV4YzpgU1NMRXJyb3JgIGluc3RhbmNlcworICAgYXJlIHByb3ZpZGVkIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcnkuCiAKLS4uIGZ1bmN0aW9uOjogd3JhcF9zb2NrZXQoc29jaywga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBzZXJ2ZXJfc2lkZT1GYWxzZSwgY2VydF9yZXFzPUNFUlRfTk9ORSwgc3NsX3ZlcnNpb249e3NlZSBkb2NzfSwgY2FfY2VydHM9Tm9uZSwgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9VHJ1ZSwgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSkKKy4uIGV4Y2VwdGlvbjo6IENlcnRpZmljYXRlRXJyb3IKKworICAgUmFpc2VkIHRvIHNpZ25hbCBhbiBlcnJvciB3aXRoIGEgY2VydGlmaWNhdGUgKHN1Y2ggYXMgbWlzbWF0Y2hpbmcKKyAgIGhvc3RuYW1lKS4gIENlcnRpZmljYXRlIGVycm9ycyBkZXRlY3RlZCBieSBPcGVuU1NMLCB0aG91Z2gsIHJhaXNlCisgICBhbiA6ZXhjOmBTU0xFcnJvcmAuCisKKworU29ja2V0IGNyZWF0aW9uCiteXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhbGxvd3MgZm9yIHN0YW5kYWxvbmUgc29ja2V0IGNyZWF0aW9uLiAgU3RhcnRpbmcgZnJvbQorUHl0aG9uIDMuMiwgaXQgY2FuIGJlIG1vcmUgZmxleGlibGUgdG8gdXNlIDptZXRoOmBTU0xDb250ZXh0LndyYXBfc29ja2V0YAoraW5zdGVhZC4KKworLi4gZnVuY3Rpb246OiB3cmFwX3NvY2tldChzb2NrLCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsIHNlcnZlcl9zaWRlPUZhbHNlLCBjZXJ0X3JlcXM9Q0VSVF9OT05FLCBzc2xfdmVyc2lvbj17c2VlIGRvY3N9LCBjYV9jZXJ0cz1Ob25lLCBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1UcnVlLCBzdXBwcmVzc19yYWdnZWRfZW9mcz1UcnVlLCBjaXBoZXJzPU5vbmUpCiAKICAgIFRha2VzIGFuIGluc3RhbmNlIGBgc29ja2BgIG9mIDpjbGFzczpgc29ja2V0LnNvY2tldGAsIGFuZCByZXR1cm5zIGFuIGluc3RhbmNlCiAgICBvZiA6Y2xhc3M6YHNzbC5TU0xTb2NrZXRgLCBhIHN1YnR5cGUgb2YgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCwgd2hpY2ggd3JhcHMKQEAgLTY0LDE5ICs4OCw2IEBACiAgICBjb25uZWN0aW9uLiAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGNlcnRpZmljYXRlIGlzIHN0b3JlZCBpbiB0aGUgYGBjZXJ0ZmlsZWBgLgogCi0gICBPZnRlbiB0aGUgcHJpdmF0ZSBrZXkgaXMgc3RvcmVkIGluIHRoZSBzYW1lIGZpbGUgYXMgdGhlIGNlcnRpZmljYXRlOyBpbiB0aGlzCi0gICBjYXNlLCBvbmx5IHRoZSBgYGNlcnRmaWxlYGAgcGFyYW1ldGVyIG5lZWQgYmUgcGFzc2VkLiAgSWYgdGhlIHByaXZhdGUga2V5IGlzCi0gICBzdG9yZWQgaW4gYSBzZXBhcmF0ZSBmaWxlLCBib3RoIHBhcmFtZXRlcnMgbXVzdCBiZSB1c2VkLiAgSWYgdGhlIHByaXZhdGUga2V5Ci0gICBpcyBzdG9yZWQgaW4gdGhlIGBgY2VydGZpbGVgYCwgaXQgc2hvdWxkIGNvbWUgYmVmb3JlIHRoZSBmaXJzdCBjZXJ0aWZpY2F0ZSBpbgotICAgdGhlIGNlcnRpZmljYXRlIGNoYWluOjoKLQotICAgICAgLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotICAgICAgLi4uIChwcml2YXRlIGtleSBpbiBiYXNlNjQgZW5jb2RpbmcpIC4uLgotICAgICAgLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KLSAgICAgIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQotICAgICAgLi4uIChjZXJ0aWZpY2F0ZSBpbiBiYXNlNjQgUEVNIGVuY29kaW5nKSAuLi4KLSAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLQogICAgVGhlIHBhcmFtZXRlciBgYHNlcnZlcl9zaWRlYGAgaXMgYSBib29sZWFuIHdoaWNoIGlkZW50aWZpZXMgd2hldGhlcgogICAgc2VydmVyLXNpZGUgb3IgY2xpZW50LXNpZGUgYmVoYXZpb3IgaXMgZGVzaXJlZCBmcm9tIHRoaXMgc29ja2V0LgogCkBAIC0xMTAsMTQgKzEyMSwyNiBAQAogICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQogICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgogICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzKiAgICAgICAgbm8KKyAgICAgICAgKlNTTHYyKiAgICAgICAgICAgICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vCiAgICAgICAgICpTU0x2MyogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICB5ZXMgICAgICAgICBubwogICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KICAgICAgICAgKlRMU3YxKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIHllcwogICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQogCi0gICBJbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKGZvciBpbnN0YW5jZSwgMC45LjdsIG9uIE9TIFggMTAuNCksIGFuCi0gICBTU0x2MiBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gYW4gU1NMdjIzIHNlcnZlci4KKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGljaCBjb25uZWN0aW9ucyBzdWNjZWVkIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHZlcnNpb24gb2YKKyAgICAgIE9wZW5TU0wuICBGb3IgaW5zdGFuY2UsIGluIHNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlblNTTCAoc3VjaAorICAgICAgYXMgMC45LjdsIG9uIE9TIFggMTAuNCksIGFuIFNTTHYyIGNsaWVudCBjb3VsZCBub3QgY29ubmVjdCB0byBhbgorICAgICAgU1NMdjIzIHNlcnZlci4gIEFub3RoZXIgZXhhbXBsZTogYmVnaW5uaW5nIHdpdGggT3BlblNTTCAxLjAuMCwKKyAgICAgIGFuIFNTTHYyMyBjbGllbnQgd2lsbCBub3QgYWN0dWFsbHkgYXR0ZW1wdCBTU0x2MiBjb25uZWN0aW9ucworICAgICAgdW5sZXNzIHlvdSBleHBsaWNpdGx5IGVuYWJsZSBTU0x2MiBjaXBoZXJzOyBmb3IgZXhhbXBsZSwgeW91CisgICAgICBtaWdodCBzcGVjaWZ5IGBgIkFMTCJgYCBvciBgYCJTU0x2MiJgYCBhcyB0aGUgKmNpcGhlcnMqIHBhcmFtZXRlcgorICAgICAgdG8gZW5hYmxlIHRoZW0uCisKKyAgIFRoZSAqY2lwaGVycyogcGFyYW1ldGVyIHNldHMgdGhlIGF2YWlsYWJsZSBjaXBoZXJzIGZvciB0aGlzIFNTTCBvYmplY3QuCisgICBJdCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGBPcGVuU1NMIGNpcGhlciBsaXN0IGZvcm1hdAorICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF8uCiAKICAgIFRoZSBwYXJhbWV0ZXIgYGBkb19oYW5kc2hha2Vfb25fY29ubmVjdGBgIHNwZWNpZmllcyB3aGV0aGVyIHRvIGRvIHRoZSBTU0wKICAgIGhhbmRzaGFrZSBhdXRvbWF0aWNhbGx5IGFmdGVyIGRvaW5nIGEgOm1ldGg6YHNvY2tldC5jb25uZWN0YCwgb3Igd2hldGhlciB0aGUKQEAgLTEyNywxMCArMTUwLDE3IEBACiAgICBibG9ja2luZyBiZWhhdmlvciBvZiB0aGUgc29ja2V0IEkvTyBpbnZvbHZlZCBpbiB0aGUgaGFuZHNoYWtlLgogCiAgICBUaGUgcGFyYW1ldGVyIGBgc3VwcHJlc3NfcmFnZ2VkX2VvZnNgYCBzcGVjaWZpZXMgaG93IHRoZQotICAgOm1ldGg6YFNTTFNvY2tldC5yZWFkYCBtZXRob2Qgc2hvdWxkIHNpZ25hbCB1bmV4cGVjdGVkIEVPRiBmcm9tIHRoZSBvdGhlciBlbmQKKyAgIDptZXRoOmBTU0xTb2NrZXQucmVjdmAgbWV0aG9kIHNob3VsZCBzaWduYWwgdW5leHBlY3RlZCBFT0YgZnJvbSB0aGUgb3RoZXIgZW5kCiAgICBvZiB0aGUgY29ubmVjdGlvbi4gIElmIHNwZWNpZmllZCBhcyA6Y29uc3Q6YFRydWVgICh0aGUgZGVmYXVsdCksIGl0IHJldHVybnMgYQotICAgbm9ybWFsIEVPRiBpbiByZXNwb25zZSB0byB1bmV4cGVjdGVkIEVPRiBlcnJvcnMgcmFpc2VkIGZyb20gdGhlIHVuZGVybHlpbmcKLSAgIHNvY2tldDsgaWYgOmNvbnN0OmBGYWxzZWAsIGl0IHdpbGwgcmFpc2UgdGhlIGV4Y2VwdGlvbnMgYmFjayB0byB0aGUgY2FsbGVyLgorICAgbm9ybWFsIEVPRiAoYW4gZW1wdHkgYnl0ZXMgb2JqZWN0KSBpbiByZXNwb25zZSB0byB1bmV4cGVjdGVkIEVPRiBlcnJvcnMKKyAgIHJhaXNlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIHNvY2tldDsgaWYgOmNvbnN0OmBGYWxzZWAsIGl0IHdpbGwgcmFpc2UgdGhlCisgICBleGNlcHRpb25zIGJhY2sgdG8gdGhlIGNhbGxlci4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2lwaGVycyouCisKK1JhbmRvbSBnZW5lcmF0aW9uCiteXl5eXl5eXl5eXl5eXl5eXgogCiAuLiBmdW5jdGlvbjo6IFJBTkRfc3RhdHVzKCkKIApAQCAtMTU3LDYgKzE4NywzMiBAQAogICAgc3RyaW5nIChzbyB5b3UgY2FuIGFsd2F5cyB1c2UgOmNvbnN0OmAwLjBgKS4gIFNlZSA6cmZjOmAxNzUwYCBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24gb24gc291cmNlcyBvZiBlbnRyb3B5LgogCitDZXJ0aWZpY2F0ZSBoYW5kbGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gZnVuY3Rpb246OiBtYXRjaF9ob3N0bmFtZShjZXJ0LCBob3N0bmFtZSkKKworICAgVmVyaWZ5IHRoYXQgKmNlcnQqIChpbiBkZWNvZGVkIGZvcm1hdCBhcyByZXR1cm5lZCBieQorICAgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGApIG1hdGNoZXMgdGhlIGdpdmVuICpob3N0bmFtZSouICBUaGUgcnVsZXMKKyAgIGFwcGxpZWQgYXJlIHRob3NlIGZvciBjaGVja2luZyB0aGUgaWRlbnRpdHkgb2YgSFRUUFMgc2VydmVycyBhcyBvdXRsaW5lZAorICAgaW4gOnJmYzpgMjgxOGAsIGV4Y2VwdCB0aGF0IElQIGFkZHJlc3NlcyBhcmUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQuCisgICBJbiBhZGRpdGlvbiB0byBIVFRQUywgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgc3VpdGFibGUgZm9yIGNoZWNraW5nIHRoZQorICAgaWRlbnRpdHkgb2Ygc2VydmVycyBpbiB2YXJpb3VzIFNTTC1iYXNlZCBwcm90b2NvbHMgc3VjaCBhcyBGVFBTLCBJTUFQUywKKyAgIFBPUFMgYW5kIG90aGVycy4KKworICAgOmV4YzpgQ2VydGlmaWNhdGVFcnJvcmAgaXMgcmFpc2VkIG9uIGZhaWx1cmUuIE9uIHN1Y2Nlc3MsIHRoZSBmdW5jdGlvbgorICAgcmV0dXJucyBub3RoaW5nOjoKKworICAgICAgPj4+IGNlcnQgPSB7J3N1YmplY3QnOiAoKCgnY29tbW9uTmFtZScsICdleGFtcGxlLmNvbScpLCksKX0KKyAgICAgID4+PiBzc2wubWF0Y2hfaG9zdG5hbWUoY2VydCwgImV4YW1wbGUuY29tIikKKyAgICAgID4+PiBzc2wubWF0Y2hfaG9zdG5hbWUoY2VydCwgImV4YW1wbGUub3JnIikKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgRmlsZSAiL2hvbWUvcHkzay9MaWIvc3NsLnB5IiwgbGluZSAxMzAsIGluIG1hdGNoX2hvc3RuYW1lCisgICAgICBzc2wuQ2VydGlmaWNhdGVFcnJvcjogaG9zdG5hbWUgJ2V4YW1wbGUub3JnJyBkb2Vzbid0IG1hdGNoICdleGFtcGxlLmNvbScKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGZ1bmN0aW9uOjogY2VydF90aW1lX3RvX3NlY29uZHModGltZXN0cmluZykKIAogICAgUmV0dXJucyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlIGNvbnRhaW5pbmcgYSBub3JtYWwgc2Vjb25kcy1hZnRlci10aGUtZXBvY2gKQEAgLTE3MSw3ICsyMjcsNiBAQAogICAgICA+Pj4gaW1wb3J0IHRpbWUKICAgICAgPj4+IHRpbWUuY3RpbWUoc3NsLmNlcnRfdGltZV90b19zZWNvbmRzKCJNYXkgIDkgMDA6MDA6MDAgMjAwNyBHTVQiKSkKICAgICAgJ1dlZCBNYXkgIDkgMDA6MDA6MDAgMjAwNycKLSAgICAgPj4+CiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZShhZGRyLCBzc2xfdmVyc2lvbj1QUk9UT0NPTF9TU0x2MywgY2FfY2VydHM9Tm9uZSkKIApAQCAtMTk0LDI2ICsyNDksNDEgQEAKICAgIEdpdmVuIGEgY2VydGlmaWNhdGUgYXMgYW4gQVNDSUkgUEVNIHN0cmluZywgcmV0dXJucyBhIERFUi1lbmNvZGVkIHNlcXVlbmNlIG9mCiAgICBieXRlcyBmb3IgdGhhdCBzYW1lIGNlcnRpZmljYXRlLgogCitDb25zdGFudHMKK15eXl5eXl5eXgorCiAuLiBkYXRhOjogQ0VSVF9OT05FCiAKLSAgIFZhbHVlIHRvIHBhc3MgdG8gdGhlIGBgY2VydF9yZXFzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmBzc2xvYmplY3RgIHdoZW4gbm8KLSAgIGNlcnRpZmljYXRlcyB3aWxsIGJlIHJlcXVpcmVkIG9yIHZhbGlkYXRlZCBmcm9tIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBzb2NrZXQKLSAgIGNvbm5lY3Rpb24uCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X21vZGVgLCBvciB0aGUgYGBjZXJ0X3JlcXNgYAorICAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuICBJbiB0aGlzIG1vZGUgKHRoZSBkZWZhdWx0KSwgbm8KKyAgIGNlcnRpZmljYXRlcyB3aWxsIGJlIHJlcXVpcmVkIGZyb20gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHNvY2tldCBjb25uZWN0aW9uLgorICAgSWYgYSBjZXJ0aWZpY2F0ZSBpcyByZWNlaXZlZCBmcm9tIHRoZSBvdGhlciBlbmQsIG5vIGF0dGVtcHQgdG8gdmFsaWRhdGUgaXQKKyAgIGlzIG1hZGUuCisKKyAgIFNlZSB0aGUgZGlzY3Vzc2lvbiBvZiA6cmVmOmBzc2wtc2VjdXJpdHlgIGJlbG93LgogCiAuLiBkYXRhOjogQ0VSVF9PUFRJT05BTAogCi0gICBWYWx1ZSB0byBwYXNzIHRvIHRoZSBgYGNlcnRfcmVxc2BgIHBhcmFtZXRlciB0byA6ZnVuYzpgc3Nsb2JqZWN0YCB3aGVuIG5vCi0gICBjZXJ0aWZpY2F0ZXMgd2lsbCBiZSByZXF1aXJlZCBmcm9tIHRoZSBvdGhlciBzaWRlIG9mIHRoZSBzb2NrZXQgY29ubmVjdGlvbiwKLSAgIGJ1dCBpZiB0aGV5IGFyZSBwcm92aWRlZCwgd2lsbCBiZSB2YWxpZGF0ZWQuICBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgc2V0dGluZwotICAgcmVxdWlyZXMgYSB2YWxpZCBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIGZpbGUgYWxzbyBiZSBwYXNzZWQgYXMgYSB2YWx1ZSBvZiB0aGUKLSAgIGBgY2FfY2VydHNgYCBwYXJhbWV0ZXIuCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X21vZGVgLCBvciB0aGUgYGBjZXJ0X3JlcXNgYAorICAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuICBJbiB0aGlzIG1vZGUgbm8gY2VydGlmaWNhdGVzIHdpbGwgYmUKKyAgIHJlcXVpcmVkIGZyb20gdGhlIG90aGVyIHNpZGUgb2YgdGhlIHNvY2tldCBjb25uZWN0aW9uOyBidXQgaWYgdGhleQorICAgYXJlIHByb3ZpZGVkLCB2YWxpZGF0aW9uIHdpbGwgYmUgYXR0ZW1wdGVkIGFuZCBhbiA6Y2xhc3M6YFNTTEVycm9yYAorICAgd2lsbCBiZSByYWlzZWQgb24gZmFpbHVyZS4KKworICAgVXNlIG9mIHRoaXMgc2V0dGluZyByZXF1aXJlcyBhIHZhbGlkIHNldCBvZiBDQSBjZXJ0aWZpY2F0ZXMgdG8KKyAgIGJlIHBhc3NlZCwgZWl0aGVyIHRvIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2Agb3IgYXMgYQorICAgdmFsdWUgb2YgdGhlIGBgY2FfY2VydHNgYCBwYXJhbWV0ZXIgdG8gOmZ1bmM6YHdyYXBfc29ja2V0YC4KIAogLi4gZGF0YTo6IENFUlRfUkVRVUlSRUQKIAotICAgVmFsdWUgdG8gcGFzcyB0byB0aGUgYGBjZXJ0X3JlcXNgYCBwYXJhbWV0ZXIgdG8gOmZ1bmM6YHNzbG9iamVjdGAgd2hlbgotICAgY2VydGlmaWNhdGVzIHdpbGwgYmUgcmVxdWlyZWQgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc29ja2V0IGNvbm5lY3Rpb24uCi0gICBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgc2V0dGluZyByZXF1aXJlcyBhIHZhbGlkIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmlsZQotICAgYWxzbyBiZSBwYXNzZWQgYXMgYSB2YWx1ZSBvZiB0aGUgYGBjYV9jZXJ0c2BgIHBhcmFtZXRlci4KKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfbW9kZWAsIG9yIHRoZSBgYGNlcnRfcmVxc2BgCisgICBwYXJhbWV0ZXIgdG8gOmZ1bmM6YHdyYXBfc29ja2V0YC4gIEluIHRoaXMgbW9kZSwgY2VydGlmaWNhdGVzIGFyZQorICAgcmVxdWlyZWQgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgc29ja2V0IGNvbm5lY3Rpb247IGFuIDpjbGFzczpgU1NMRXJyb3JgCisgICB3aWxsIGJlIHJhaXNlZCBpZiBubyBjZXJ0aWZpY2F0ZSBpcyBwcm92aWRlZCwgb3IgaWYgaXRzIHZhbGlkYXRpb24gZmFpbHMuCisKKyAgIFVzZSBvZiB0aGlzIHNldHRpbmcgcmVxdWlyZXMgYSB2YWxpZCBzZXQgb2YgQ0EgY2VydGlmaWNhdGVzIHRvCisgICBiZSBwYXNzZWQsIGVpdGhlciB0byA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgIG9yIGFzIGEKKyAgIHZhbHVlIG9mIHRoZSBgYGNhX2NlcnRzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuCiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MgogCkBAIC0yNDEsMjIgKzMxMSwxMDEgQEAKICAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKICAgIHNpZGVzIGNhbiBzcGVhayBpdC4KIAorLi4gZGF0YTo6IE9QX0FMTAogCi1TU0xTb2NrZXQgT2JqZWN0cwotLS0tLS0tLS0tLS0tLS0tLS0KKyAgIEVuYWJsZXMgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgYnVncyBwcmVzZW50IGluIG90aGVyIFNTTCBpbXBsZW1lbnRhdGlvbnMuCisgICBUaGlzIG9wdGlvbiBpcyBzZXQgYnkgZGVmYXVsdC4KIAotLi4gbWV0aG9kOjogU1NMU29ja2V0LnJlYWQobmJ5dGVzPTEwMjQsIGJ1ZmZlcj1Ob25lKQorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIFJlYWRzIHVwIHRvIGBgbmJ5dGVzYGAgYnl0ZXMgZnJvbSB0aGUgU1NMLWVuY3J5cHRlZCBjaGFubmVsIGFuZCByZXR1cm5zIHRoZW0uCi0gICBJZiB0aGUgYGBidWZmZXJgYCBpcyBzcGVjaWZpZWQsIGl0IHdpbGwgYXR0ZW1wdCB0byByZWFkIGludG8gdGhlIGJ1ZmZlciB0aGUKLSAgIG1pbmltdW0gb2YgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBhbmQgYGBuYnl0ZXNgYCwgaWYgdGhhdCBpcyBzcGVjaWZpZWQuICBJZgotICAgbm8gYnVmZmVyIGlzIHNwZWNpZmllZCwgYW4gaW1tdXRhYmxlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgYW5kIHJldHVybmVkIHdpdGgKLSAgIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgc29ja2V0LgorLi4gZGF0YTo6IE9QX05PX1NTTHYyCiAKLS4uIG1ldGhvZDo6IFNTTFNvY2tldC53cml0ZShkYXRhKQorICAgUHJldmVudHMgYW4gU1NMdjIgY29ubmVjdGlvbi4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbgorICAgY29uanVuY3Rpb24gd2l0aCA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AuICBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbQorICAgY2hvb3NpbmcgU1NMdjIgYXMgdGhlIHByb3RvY29sIHZlcnNpb24uCiAKLSAgIFdyaXRlcyB0aGUgYGBkYXRhYGAgdG8gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24sIHVzaW5nIHRoZSBTU0wKLSAgIGNoYW5uZWwgdG8gZW5jcnlwdC4gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGRhdGE6OiBPUF9OT19TU0x2MworCisgICBQcmV2ZW50cyBhbiBTU0x2MyBjb25uZWN0aW9uLiAgVGhpcyBvcHRpb24gaXMgb25seSBhcHBsaWNhYmxlIGluCisgICBjb25qdW5jdGlvbiB3aXRoIDpjb25zdDpgUFJPVE9DT0xfU1NMdjIzYC4gIEl0IHByZXZlbnRzIHRoZSBwZWVycyBmcm9tCisgICBjaG9vc2luZyBTU0x2MyBhcyB0aGUgcHJvdG9jb2wgdmVyc2lvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGRhdGE6OiBPUF9OT19UTFN2MQorCisgICBQcmV2ZW50cyBhIFRMU3YxIGNvbm5lY3Rpb24uICBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4KKyAgIGNvbmp1bmN0aW9uIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiAgSXQgcHJldmVudHMgdGhlIHBlZXJzIGZyb20KKyAgIGNob29zaW5nIFRMU3YxIGFzIHRoZSBwcm90b2NvbCB2ZXJzaW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZGF0YTo6IEhBU19TTkkKKworICAgV2hldGhlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciB0aGUgKlNlcnZlciBOYW1lCisgICBJbmRpY2F0aW9uKiBleHRlbnNpb24gdG8gdGhlIFNTTHYzIGFuZCBUTFN2MSBwcm90b2NvbHMgKGFzIGRlZmluZWQgaW4KKyAgIDpyZmM6YDQzNjZgKS4gIFdoZW4gdHJ1ZSwgeW91IGNhbiB1c2UgdGhlICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IHRvCisgICA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBkYXRhOjogT1BFTlNTTF9WRVJTSU9OCisKKyAgIFRoZSB2ZXJzaW9uIHN0cmluZyBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5IGxvYWRlZCBieSB0aGUgaW50ZXJwcmV0ZXI6OgorCisgICAgPj4+IHNzbC5PUEVOU1NMX1ZFUlNJT04KKyAgICAnT3BlblNTTCAwLjkuOGsgMjUgTWFyIDIwMDknCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBkYXRhOjogT1BFTlNTTF9WRVJTSU9OX0lORk8KKworICAgQSB0dXBsZSBvZiBmaXZlIGludGVnZXJzIHJlcHJlc2VudGluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZQorICAgT3BlblNTTCBsaWJyYXJ5OjoKKworICAgID4+PiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8KKyAgICAoMCwgOSwgOCwgMTEsIDE1KQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gZGF0YTo6IE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKworICAgVGhlIHJhdyB2ZXJzaW9uIG51bWJlciBvZiB0aGUgT3BlblNTTCBsaWJyYXJ5LCBhcyBhIHNpbmdsZSBpbnRlZ2VyOjoKKworICAgID4+PiBzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUgorICAgIDk0NzAxNDMKKyAgICA+Pj4gaGV4KHNzbC5PUEVOU1NMX1ZFUlNJT05fTlVNQkVSKQorICAgICcweDkwODBiZicKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKworU1NMIFNvY2tldHMKKy0tLS0tLS0tLS0tCisKK1NTTCBzb2NrZXRzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIDpyZWY6YHNvY2tldC1vYmplY3RzYDoKKworLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuYWNjZXB0KClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5iaW5kKClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5jbG9zZSgpYAorLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuY29ubmVjdCgpYAorLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZGV0YWNoKClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5maWxlbm8oKWAKKy0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHBlZXJuYW1lKClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0c29ja25hbWUoKWAKKy0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHNvY2tvcHQoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRzb2Nrb3B0KClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXR0aW1lb3V0KClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2V0dGltZW91dCgpYCwKKyAgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldGJsb2NraW5nKClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5saXN0ZW4oKWAKKy0gOm1ldGg6YH5zb2NrZXQuc29ja2V0Lm1ha2VmaWxlKClgCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2KClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdl9pbnRvKClgCisgIChidXQgcGFzc2luZyBhIG5vbi16ZXJvIGBgZmxhZ3NgYCBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCkKKy0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNlbmQoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZW5kYWxsKClgICh3aXRoCisgIHRoZSBzYW1lIGxpbWl0YXRpb24pCistIDptZXRoOmB+c29ja2V0LnNvY2tldC5zaHV0ZG93bigpYAorCitUaGV5IGFsc28gaGF2ZSB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAogLi4gbWV0aG9kOjogU1NMU29ja2V0LmRvX2hhbmRzaGFrZSgpCiAKQEAgLTI4OCwxMSArNDM3LDkgQEAKICAgIGNlcnRpZmljYXRlIHdhcyBub3QgdmFsaWRhdGVkLCB0aGUgZGljdCBpcyBlbXB0eS4gIElmIHRoZSBjZXJ0aWZpY2F0ZSB3YXMKICAgIHZhbGlkYXRlZCwgaXQgcmV0dXJucyBhIGRpY3Qgd2l0aCB0aGUga2V5cyBgYHN1YmplY3RgYCAodGhlIHByaW5jaXBhbCBmb3IKICAgIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSB3YXMgaXNzdWVkKSwgYW5kIGBgbm90QWZ0ZXJgYCAodGhlIHRpbWUgYWZ0ZXIgd2hpY2ggdGhlCi0gICBjZXJ0aWZpY2F0ZSBzaG91bGQgbm90IGJlIHRydXN0ZWQpLiAgVGhlIGNlcnRpZmljYXRlIHdhcyBhbHJlYWR5IHZhbGlkYXRlZCwKLSAgIHNvIHRoZSBgYG5vdEJlZm9yZWBgIGFuZCBgYGlzc3VlcmBgIGZpZWxkcyBhcmUgbm90IHJldHVybmVkLiAgSWYgYQotICAgY2VydGlmaWNhdGUgY29udGFpbnMgYW4gaW5zdGFuY2Ugb2YgdGhlICpTdWJqZWN0IEFsdGVybmF0aXZlIE5hbWUqIGV4dGVuc2lvbgotICAgKHNlZSA6cmZjOmAzMjgwYCksIHRoZXJlIHdpbGwgYWxzbyBiZSBhIGBgc3ViamVjdEFsdE5hbWVgYCBrZXkgaW4gdGhlCi0gICBkaWN0aW9uYXJ5LgorICAgY2VydGlmaWNhdGUgc2hvdWxkIG5vdCBiZSB0cnVzdGVkKS4gIElmIGEgY2VydGlmaWNhdGUgY29udGFpbnMgYW4gaW5zdGFuY2UKKyAgIG9mIHRoZSAqU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lKiBleHRlbnNpb24gKHNlZSA6cmZjOmAzMjgwYCksIHRoZXJlIHdpbGwKKyAgIGFsc28gYmUgYSBgYHN1YmplY3RBbHROYW1lYGAga2V5IGluIHRoZSBkaWN0aW9uYXJ5LgogCiAgICBUaGUgInN1YmplY3QiIGZpZWxkIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgc2VxdWVuY2Ugb2YgcmVsYXRpdmUKICAgIGRpc3Rpbmd1aXNoZWQgbmFtZXMgKFJETnMpIGdpdmVuIGluIHRoZSBjZXJ0aWZpY2F0ZSdzIGRhdGEgc3RydWN0dXJlIGZvciB0aGUKQEAgLTMxNCw2ICs0NjEsMTAgQEAKICAgIGJlZW4gdmFsaWRhdGVkLCBidXQgaWYgOmNvbnN0OmBDRVJUX05PTkVgIHdhcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUKICAgIGNvbm5lY3Rpb24sIHRoZSBjZXJ0aWZpY2F0ZSwgaWYgcHJlc2VudCwgd2lsbCBub3QgaGF2ZSBiZWVuIHZhbGlkYXRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSByZXR1cm5lZCBkaWN0aW9uYXJ5IGluY2x1ZGVzIGFkZGl0aW9uYWwgaXRlbXMgc3VjaCBhcyBgYGlzc3VlcmBgCisgICAgICBhbmQgYGBub3RCZWZvcmVgYC4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC0zMjksNiArNDgwLDE0MiBAQAogICAgcmV0dXJuZWQgc29ja2V0IHNob3VsZCBhbHdheXMgYmUgdXNlZCBmb3IgZnVydGhlciBjb21tdW5pY2F0aW9uIHdpdGggdGhlCiAgICBvdGhlciBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLCByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgc29ja2V0LgogCisKKy4uIGF0dHJpYnV0ZTo6IFNTTFNvY2tldC5jb250ZXh0CisKKyAgIFRoZSA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdCB0aGlzIFNTTCBzb2NrZXQgaXMgdGllZCB0by4gIElmIHRoZSBTU0wKKyAgIHNvY2tldCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgdG9wLWxldmVsIDpmdW5jOmB3cmFwX3NvY2tldGAgZnVuY3Rpb24KKyAgIChyYXRoZXIgdGhhbiA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGApLCB0aGlzIGlzIGEgY3VzdG9tIGNvbnRleHQKKyAgIG9iamVjdCBjcmVhdGVkIGZvciB0aGlzIFNTTCBzb2NrZXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKK1NTTCBDb250ZXh0cworLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuMgorCitBbiBTU0wgY29udGV4dCBob2xkcyB2YXJpb3VzIGRhdGEgbG9uZ2VyLWxpdmVkIHRoYW4gc2luZ2xlIFNTTCBjb25uZWN0aW9ucywKK3N1Y2ggYXMgU1NMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgY2VydGlmaWNhdGUocykgYW5kIHByaXZhdGUga2V5KHMpLgorSXQgYWxzbyBtYW5hZ2VzIGEgY2FjaGUgb2YgU1NMIHNlc3Npb25zIGZvciBzZXJ2ZXItc2lkZSBzb2NrZXRzLCBpbiBvcmRlcgordG8gc3BlZWQgdXAgcmVwZWF0ZWQgY29ubmVjdGlvbnMgZnJvbSB0aGUgc2FtZSBjbGllbnRzLgorCisuLiBjbGFzczo6IFNTTENvbnRleHQocHJvdG9jb2wpCisKKyAgIENyZWF0ZSBhIG5ldyBTU0wgY29udGV4dC4gIFlvdSBtdXN0IHBhc3MgKnByb3RvY29sKiB3aGljaCBtdXN0IGJlIG9uZQorICAgb2YgdGhlIGBgUFJPVE9DT0xfKmBgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgorICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgaXMgcmVjb21tZW5kZWQgZm9yIG1heGltdW0gaW50ZXJvcGVyYWJpbGl0eS4KKworCis6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdHMgaGF2ZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUpCisKKyAgIExvYWQgYSBwcml2YXRlIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2VydGlmaWNhdGUuICBUaGUgKmNlcnRmaWxlKgorICAgc3RyaW5nIG11c3QgYmUgdGhlIHBhdGggdG8gYSBzaW5nbGUgZmlsZSBpbiBQRU0gZm9ybWF0IGNvbnRhaW5pbmcgdGhlCisgICBjZXJ0aWZpY2F0ZSBhcyB3ZWxsIGFzIGFueSBudW1iZXIgb2YgQ0EgY2VydGlmaWNhdGVzIG5lZWRlZCB0byBlc3RhYmxpc2gKKyAgIHRoZSBjZXJ0aWZpY2F0ZSdzIGF1dGhlbnRpY2l0eS4gIFRoZSAqa2V5ZmlsZSogc3RyaW5nLCBpZiBwcmVzZW50LCBtdXN0CisgICBwb2ludCB0byBhIGZpbGUgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBrZXkgaW4uICBPdGhlcndpc2UgdGhlIHByaXZhdGUKKyAgIGtleSB3aWxsIGJlIHRha2VuIGZyb20gKmNlcnRmaWxlKiBhcyB3ZWxsLiAgU2VlIHRoZSBkaXNjdXNzaW9uIG9mCisgICA6cmVmOmBzc2wtY2VydGlmaWNhdGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGNlcnRpZmljYXRlCisgICBpcyBzdG9yZWQgaW4gdGhlICpjZXJ0ZmlsZSouCisKKyAgIEFuIDpjbGFzczpgU1NMRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgcHJpdmF0ZSBrZXkgZG9lc24ndAorICAgbWF0Y2ggd2l0aCB0aGUgY2VydGlmaWNhdGUuCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKworICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKKyAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KKyAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgorCisgICBUaGUgKmNhZmlsZSogc3RyaW5nLCBpZiBwcmVzZW50LCBpcyB0aGUgcGF0aCB0byBhIGZpbGUgb2YgY29uY2F0ZW5hdGVkCisgICBDQSBjZXJ0aWZpY2F0ZXMgaW4gUEVNIGZvcm1hdC4gU2VlIHRoZSBkaXNjdXNzaW9uIG9mCisgICA6cmVmOmBzc2wtY2VydGlmaWNhdGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gYXJyYW5nZSB0aGUKKyAgIGNlcnRpZmljYXRlcyBpbiB0aGlzIGZpbGUuCisKKyAgIFRoZSAqY2FwYXRoKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzCisgICB0aGUgcGF0aCB0byBhIGRpcmVjdG9yeSBjb250YWluaW5nIHNldmVyYWwgQ0EgY2VydGlmaWNhdGVzIGluIFBFTSBmb3JtYXQsCisgICBmb2xsb3dpbmcgYW4gYE9wZW5TU0wgc3BlY2lmaWMgbGF5b3V0CisgICA8aHR0cDovL3d3dy5vcGVuc3NsLm9yZy9kb2NzL3NzbC9TU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucy5odG1sPmBfLgorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisKKyAgIExvYWQgYSBzZXQgb2YgZGVmYXVsdCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20KKyAgIGEgZmlsZXN5c3RlbSBwYXRoIGRlZmluZWQgd2hlbiBidWlsZGluZyB0aGUgT3BlblNTTCBsaWJyYXJ5LiAgVW5mb3J0dW5hdGVseSwKKyAgIHRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8ga25vdyB3aGV0aGVyIHRoaXMgbWV0aG9kIHN1Y2NlZWRzOiBubyBlcnJvciBpcworICAgcmV0dXJuZWQgaWYgbm8gY2VydGlmaWNhdGVzIGFyZSB0byBiZSBmb3VuZC4gIFdoZW4gdGhlIE9wZW5TU0wgbGlicmFyeSBpcworICAgcHJvdmlkZWQgYXMgcGFydCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgdGhvdWdoLCBpdCBpcyBsaWtlbHkgdG8gYmUKKyAgIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKKworICAgU2V0IHRoZSBhdmFpbGFibGUgY2lwaGVycyBmb3Igc29ja2V0cyBjcmVhdGVkIHdpdGggdGhpcyBjb250ZXh0LgorICAgSXQgc2hvdWxkIGJlIGEgc3RyaW5nIGluIHRoZSBgT3BlblNTTCBjaXBoZXIgbGlzdCBmb3JtYXQKKyAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgorICAgSWYgbm8gY2lwaGVyIGNhbiBiZSBzZWxlY3RlZCAoYmVjYXVzZSBjb21waWxlLXRpbWUgb3B0aW9ucyBvciBvdGhlcgorICAgY29uZmlndXJhdGlvbiBmb3JiaWRzIHVzZSBvZiBhbGwgdGhlIHNwZWNpZmllZCBjaXBoZXJzKSwgYW4KKyAgIDpjbGFzczpgU1NMRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICAuLiBub3RlOjoKKyAgICAgIHdoZW4gY29ubmVjdGVkLCB0aGUgOm1ldGg6YFNTTFNvY2tldC5jaXBoZXJgIG1ldGhvZCBvZiBTU0wgc29ja2V0cyB3aWxsCisgICAgICBnaXZlIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2lwaGVyLgorCisuLiBtZXRob2Q6OiBTU0xDb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPUZhbHNlLCBcCisgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1UcnVlLCBzdXBwcmVzc19yYWdnZWRfZW9mcz1UcnVlLCBcCisgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSkKKworICAgV3JhcCBhbiBleGlzdGluZyBQeXRob24gc29ja2V0ICpzb2NrKiBhbmQgcmV0dXJuIGFuIDpjbGFzczpgU1NMU29ja2V0YAorICAgb2JqZWN0LiAgVGhlIFNTTCBzb2NrZXQgaXMgdGllZCB0byB0aGUgY29udGV4dCwgaXRzIHNldHRpbmdzIGFuZAorICAgY2VydGlmaWNhdGVzLiAgVGhlIHBhcmFtZXRlcnMgKnNlcnZlcl9zaWRlKiwgKmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0KgorICAgYW5kICpzdXBwcmVzc19yYWdnZWRfZW9mcyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIHRoZSB0b3AtbGV2ZWwKKyAgIDpmdW5jOmB3cmFwX3NvY2tldGAgZnVuY3Rpb24uCisKKyAgIE9uIGNsaWVudCBjb25uZWN0aW9ucywgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqc2VydmVyX2hvc3RuYW1lKiBzcGVjaWZpZXMKKyAgIHRoZSBob3N0bmFtZSBvZiB0aGUgc2VydmljZSB3aGljaCB3ZSBhcmUgY29ubmVjdGluZyB0by4gIFRoaXMgYWxsb3dzIGEKKyAgIHNpbmdsZSBzZXJ2ZXIgdG8gaG9zdCBtdWx0aXBsZSBTU0wtYmFzZWQgc2VydmljZXMgd2l0aCBkaXN0aW5jdCBjZXJ0aWZpY2F0ZXMsCisgICBxdWl0ZSBzaW1pbGFybHkgdG8gSFRUUCB2aXJ0dWFsIGhvc3RzLiAgU3BlY2lmeWluZyAqc2VydmVyX2hvc3RuYW1lKgorICAgd2lsbCByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGlmIHRoZSBPcGVuU1NMIGxpYnJhcnkgZG9lc24ndCBoYXZlIHN1cHBvcnQKKyAgIGZvciBpdCAodGhhdCBpcywgaWYgOmRhdGE6YEhBU19TTklgIGlzIDpjb25zdDpgRmFsc2VgKS4gIFNwZWNpZnlpbmcKKyAgICpzZXJ2ZXJfaG9zdG5hbWUqIHdpbGwgYWxzbyByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGlmICpzZXJ2ZXJfc2lkZSoKKyAgIGlzIHRydWUuCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuc2Vzc2lvbl9zdGF0cygpCisKKyAgIEdldCBzdGF0aXN0aWNzIGFib3V0IHRoZSBTU0wgc2Vzc2lvbnMgY3JlYXRlZCBvciBtYW5hZ2VkIGJ5IHRoaXMgY29udGV4dC4KKyAgIEEgZGljdGlvbmFyeSBpcyByZXR1cm5lZCB3aGljaCBtYXBzIHRoZSBuYW1lcyBvZiBlYWNoIGBwaWVjZSBvZiBpbmZvcm1hdGlvbgorICAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9zc2wvU1NMX0NUWF9zZXNzX251bWJlci5odG1sPmBfIHRvIHRoZWlyCisgICBudW1lcmljIHZhbHVlcy4gIEZvciBleGFtcGxlLCBoZXJlIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGl0cyBhbmQgbWlzc2VzCisgICBpbiB0aGUgc2Vzc2lvbiBjYWNoZSBzaW5jZSB0aGUgY29udGV4dCB3YXMgY3JlYXRlZDo6CisKKyAgICAgID4+PiBzdGF0cyA9IGNvbnRleHQuc2Vzc2lvbl9zdGF0cygpCisgICAgICA+Pj4gc3RhdHNbJ2hpdHMnXSwgc3RhdHNbJ21pc3NlcyddCisgICAgICAoMCwgMCkKKworLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC5vcHRpb25zCisKKyAgIEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgU1NMIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGlzIGNvbnRleHQuCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA6ZGF0YTpgT1BfQUxMYCwgYnV0IHlvdSBjYW4gc3BlY2lmeSBvdGhlciBvcHRpb25zCisgICBzdWNoIGFzIDpkYXRhOmBPUF9OT19TU0x2MmAgYnkgT1JpbmcgdGhlbSB0b2dldGhlci4KKworICAgLi4gbm90ZTo6CisgICAgICBXaXRoIHZlcnNpb25zIG9mIE9wZW5TU0wgb2xkZXIgdGhhbiAwLjkuOG0sIGl0IGlzIG9ubHkgcG9zc2libGUKKyAgICAgIHRvIHNldCBvcHRpb25zLCBub3QgdG8gY2xlYXIgdGhlbS4gIEF0dGVtcHRpbmcgdG8gY2xlYXIgYW4gb3B0aW9uCisgICAgICAoYnkgcmVzZXR0aW5nIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMpIHdpbGwgcmFpc2UgYSBgYFZhbHVlRXJyb3JgYC4KKworLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC5wcm90b2NvbAorCisgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBjaG9zZW4gd2hlbiBjb25zdHJ1Y3RpbmcgdGhlIGNvbnRleHQuICBUaGlzIGF0dHJpYnV0ZQorICAgaXMgcmVhZC1vbmx5LgorCisuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LnZlcmlmeV9tb2RlCisKKyAgIFdoZXRoZXIgdG8gdHJ5IHRvIHZlcmlmeSBvdGhlciBwZWVycycgY2VydGlmaWNhdGVzIGFuZCBob3cgdG8gYmVoYXZlCisgICBpZiB2ZXJpZmljYXRpb24gZmFpbHMuICBUaGlzIGF0dHJpYnV0ZSBtdXN0IGJlIG9uZSBvZgorICAgOmRhdGE6YENFUlRfTk9ORWAsIDpkYXRhOmBDRVJUX09QVElPTkFMYCBvciA6ZGF0YTpgQ0VSVF9SRVFVSVJFRGAuCisKKwogLi4gaW5kZXg6OiBzaW5nbGU6IGNlcnRpZmljYXRlcwogCiAuLiBpbmRleDo6IHNpbmdsZTogWDUwOSBjZXJ0aWZpY2F0ZQpAQCAtMzc0LDYgKzY2MSw5IEBACiAgICAgICAuLi4gKGNlcnRpZmljYXRlIGluIGJhc2U2NCBQRU0gZW5jb2RpbmcpIC4uLgogICAgICAgLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQogCitDZXJ0aWZpY2F0ZSBjaGFpbnMKK15eXl5eXl5eXl5eXl5eXl5eXgorCiBUaGUgUHl0aG9uIGZpbGVzIHdoaWNoIGNvbnRhaW4gY2VydGlmaWNhdGVzIGNhbiBjb250YWluIGEgc2VxdWVuY2Ugb2YKIGNlcnRpZmljYXRlcywgc29tZXRpbWVzIGNhbGxlZCBhICpjZXJ0aWZpY2F0ZSBjaGFpbiouICBUaGlzIGNoYWluIHNob3VsZCBzdGFydAogd2l0aCB0aGUgc3BlY2lmaWMgY2VydGlmaWNhdGUgZm9yIHRoZSBwcmluY2lwYWwgd2hvICJpcyIgdGhlIGNsaWVudCBvciBzZXJ2ZXIsCkBAIC0zOTcsNiArNjg3LDkgQEAKICAgICAgIC4uLiAodGhlIHJvb3QgY2VydGlmaWNhdGUgZm9yIHRoZSBDQSdzIGlzc3VlcikuLi4KICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KIAorQ0EgY2VydGlmaWNhdGVzCiteXl5eXl5eXl5eXl5eXl4KKwogSWYgeW91IGFyZSBnb2luZyB0byByZXF1aXJlIHZhbGlkYXRpb24gb2YgdGhlIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24ncwogY2VydGlmaWNhdGUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSAiQ0EgY2VydHMiIGZpbGUsIGZpbGxlZCB3aXRoIHRoZSBjZXJ0aWZpY2F0ZQogY2hhaW5zIGZvciBlYWNoIGlzc3VlciB5b3UgYXJlIHdpbGxpbmcgdG8gdHJ1c3QuICBBZ2FpbiwgdGhpcyBmaWxlIGp1c3QgY29udGFpbnMKQEAgLTQxNiw2ICs3MDksMjUgQEAKIGNlcnRpZmljYXRlIHRvIGEgcm9vdCBjZXJ0aWZpY2F0ZS4gIFNlZSA6cmZjOmA0MTU4YCBmb3IgbW9yZSBkaXNjdXNzaW9uIG9mIHRoZQogd2F5IGluIHdoaWNoIGNlcnRpZmljYXRpb24gY2hhaW5zIGNhbiBiZSBidWlsdC4KIAorQ29tYmluZWQga2V5IGFuZCBjZXJ0aWZpY2F0ZQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitPZnRlbiB0aGUgcHJpdmF0ZSBrZXkgaXMgc3RvcmVkIGluIHRoZSBzYW1lIGZpbGUgYXMgdGhlIGNlcnRpZmljYXRlOyBpbiB0aGlzCitjYXNlLCBvbmx5IHRoZSBgYGNlcnRmaWxlYGAgcGFyYW1ldGVyIHRvIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbmAKK2FuZCA6ZnVuYzpgd3JhcF9zb2NrZXRgIG5lZWRzIHRvIGJlIHBhc3NlZC4gIElmIHRoZSBwcml2YXRlIGtleSBpcyBzdG9yZWQKK3dpdGggdGhlIGNlcnRpZmljYXRlLCBpdCBzaG91bGQgY29tZSBiZWZvcmUgdGhlIGZpcnN0IGNlcnRpZmljYXRlIGluCit0aGUgY2VydGlmaWNhdGUgY2hhaW46OgorCisgICAtLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCisgICAuLi4gKHByaXZhdGUga2V5IGluIGJhc2U2NCBlbmNvZGluZykgLi4uCisgICAtLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQorICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCisgICAuLi4gKGNlcnRpZmljYXRlIGluIGJhc2U2NCBQRU0gZW5jb2RpbmcpIC4uLgorICAgLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQorCitTZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCiBJZiB5b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhIHNlcnZlciB0aGF0IHByb3ZpZGVzIFNTTC1lbmNyeXB0ZWQgY29ubmVjdGlvbgogc2VydmljZXMsIHlvdSB3aWxsIG5lZWQgdG8gYWNxdWlyZSBhIGNlcnRpZmljYXRlIGZvciB0aGF0IHNlcnZpY2UuICBUaGVyZSBhcmUKIG1hbnkgd2F5cyBvZiBhY3F1aXJpbmcgYXBwcm9wcmlhdGUgY2VydGlmaWNhdGVzLCBzdWNoIGFzIGJ1eWluZyBvbmUgZnJvbSBhCkBAIC00NjksMTAxICs3ODEsMTgwIEBACiBDbGllbnQtc2lkZSBvcGVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1UaGlzIGV4YW1wbGUgY29ubmVjdHMgdG8gYW4gU1NMIHNlcnZlciwgcHJpbnRzIHRoZSBzZXJ2ZXIncyBhZGRyZXNzIGFuZAotY2VydGlmaWNhdGUsIHNlbmRzIHNvbWUgYnl0ZXMsIGFuZCByZWFkcyBwYXJ0IG9mIHRoZSByZXNwb25zZTo6CitUaGlzIGV4YW1wbGUgY29ubmVjdHMgdG8gYW4gU1NMIHNlcnZlciBhbmQgcHJpbnRzIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZTo6CiAKICAgIGltcG9ydCBzb2NrZXQsIHNzbCwgcHByaW50CiAKICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0KICAgICMgcmVxdWlyZSBhIGNlcnRpZmljYXRlIGZyb20gdGhlIHNlcnZlcgogICAgc3NsX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhX2NlcnRzPSIvZXRjL2NhX2NlcnRzX2ZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVEKQotCiAgICBzc2xfc29jay5jb25uZWN0KCgnd3d3LnZlcmlzaWduLmNvbScsIDQ0MykpCiAKLSAgIHByaW50KHJlcHIoc3NsX3NvY2suZ2V0cGVlcm5hbWUoKSkpCiAgICBwcHJpbnQucHByaW50KHNzbF9zb2NrLmdldHBlZXJjZXJ0KCkpCi0gICBwcmludChwcHJpbnQucGZvcm1hdChzc2xfc29jay5nZXRwZWVyY2VydCgpKSkKLQotICAgIyBTZXQgYSBzaW1wbGUgSFRUUCByZXF1ZXN0IC0tIHVzZSBodHRwLmNsaWVudCBpbiBhY3R1YWwgY29kZS4KLSAgIHNzbF9zb2NrLndyaXRlKCIiIkdFVCAvIEhUVFAvMS4wXHIKLSAgIEhvc3Q6IHd3dy52ZXJpc2lnbi5jb21cclxuXHJcbiIiIikKLQotICAgIyBSZWFkIGEgY2h1bmsgb2YgZGF0YS4gIFdpbGwgbm90IG5lY2Vzc2FyaWx5Ci0gICAjIHJlYWQgYWxsIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIuCi0gICBkYXRhID0gc3NsX3NvY2sucmVhZCgpCi0KICAgICMgbm90ZSB0aGF0IGNsb3NpbmcgdGhlIFNTTFNvY2tldCB3aWxsIGFsc28gY2xvc2UgdGhlIHVuZGVybHlpbmcgc29ja2V0CiAgICBzc2xfc29jay5jbG9zZSgpCiAKLUFzIG9mIFNlcHRlbWJlciA2LCAyMDA3LCB0aGUgY2VydGlmaWNhdGUgcHJpbnRlZCBieSB0aGlzIHByb2dyYW0gbG9va2VkIGxpa2UKK0FzIG9mIE9jdG9iZXIgNiwgMjAxMCwgdGhlIGNlcnRpZmljYXRlIHByaW50ZWQgYnkgdGhpcyBwcm9ncmFtIGxvb2tzIGxpa2UKIHRoaXM6OgogCi0gICAgICB7J25vdEFmdGVyJzogJ01heSAgOCAyMzo1OTo1OSAyMDA5IEdNVCcsCi0gICAgICAgJ3N1YmplY3QnOiAoKCgnc2VyaWFsTnVtYmVyJywgJzI0OTc4ODYnKSwpLAotICAgICAgICAgICAgICAgICAgICgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycsICdVUycpLCksCi0gICAgICAgICAgICAgICAgICAgKCgnMS4zLjYuMS40LjEuMzExLjYwLjIuMS4yJywgJ0RlbGF3YXJlJyksKSwKLSAgICAgICAgICAgICAgICAgICAoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCi0gICAgICAgICAgICAgICAgICAgKCgncG9zdGFsQ29kZScsICc5NDA0MycpLCksCi0gICAgICAgICAgICAgICAgICAgKCgnc3RhdGVPclByb3ZpbmNlTmFtZScsICdDYWxpZm9ybmlhJyksKSwKLSAgICAgICAgICAgICAgICAgICAoKCdsb2NhbGl0eU5hbWUnLCAnTW91bnRhaW4gVmlldycpLCksCi0gICAgICAgICAgICAgICAgICAgKCgnc3RyZWV0QWRkcmVzcycsICc0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2FkJyksKSwKLSAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1ZlcmlTaWduLCBJbmMuJyksKSwKLSAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywKLSAgICAgICAgICAgICAgICAgICAgICdQcm9kdWN0aW9uIFNlY3VyaXR5IFNlcnZpY2VzJyksKSwKLSAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywKLSAgICAgICAgICAgICAgICAgICAgICdUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDYnKSwpLAotICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnd3d3LnZlcmlzaWduLmNvbScpLCkpfQorICAgeydub3RBZnRlcic6ICdNYXkgMjUgMjM6NTk6NTkgMjAxMiBHTVQnLAorICAgICdzdWJqZWN0JzogKCgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycsICdVUycpLCksCisgICAgICAgICAgICAgICAgKCgnMS4zLjYuMS40LjEuMzExLjYwLjIuMS4yJywgJ0RlbGF3YXJlJyksKSwKKyAgICAgICAgICAgICAgICAoKCdidXNpbmVzc0NhdGVnb3J5JywgJ1YxLjAsIENsYXVzZSA1LihiKScpLCksCisgICAgICAgICAgICAgICAgKCgnc2VyaWFsTnVtYmVyJywgJzI0OTc4ODYnKSwpLAorICAgICAgICAgICAgICAgICgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKKyAgICAgICAgICAgICAgICAoKCdwb3N0YWxDb2RlJywgJzk0MDQzJyksKSwKKyAgICAgICAgICAgICAgICAoKCdzdGF0ZU9yUHJvdmluY2VOYW1lJywgJ0NhbGlmb3JuaWEnKSwpLAorICAgICAgICAgICAgICAgICgoJ2xvY2FsaXR5TmFtZScsICdNb3VudGFpbiBWaWV3JyksKSwKKyAgICAgICAgICAgICAgICAoKCdzdHJlZXRBZGRyZXNzJywgJzQ4NyBFYXN0IE1pZGRsZWZpZWxkIFJvYWQnKSwpLAorICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnVmVyaVNpZ24sIEluYy4nKSwpLAorICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnIFByb2R1Y3Rpb24gU2VjdXJpdHkgU2VydmljZXMnKSwpLAorICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnd3d3LnZlcmlzaWduLmNvbScpLCkpfQogCi13aGljaCBpcyBhIGZhaXJseSBwb29ybHktZm9ybWVkIGBgc3ViamVjdGBgIGZpZWxkLgorVGhpcyBvdGhlciBleGFtcGxlIGZpcnN0IGNyZWF0ZXMgYW4gU1NMIGNvbnRleHQsIGluc3RydWN0cyBpdCB0byB2ZXJpZnkKK2NlcnRpZmljYXRlcyBzZW50IGJ5IHBlZXJzLCBhbmQgZmVlZHMgaXQgYSBzZXQgb2YgcmVjb2duaXplZCBjZXJ0aWZpY2F0ZQorYXV0aG9yaXRpZXMgKENBKTo6CisKKyAgID4+PiBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgID4+PiBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgID4+PiBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucygiL2V0Yy9zc2wvY2VydHMvY2EtYnVuZGxlLmNydCIpCisKKyhpdCBpcyBhc3N1bWVkIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSBwbGFjZXMgYSBidW5kbGUgb2YgYWxsIENBIGNlcnRpZmljYXRlcworaW4gYGAvZXRjL3NzbC9jZXJ0cy9jYS1idW5kbGUuY3J0YGA7IGlmIG5vdCwgeW91J2xsIGdldCBhbiBlcnJvciBhbmQgaGF2ZQordG8gYWRqdXN0IHRoZSBsb2NhdGlvbikKKworV2hlbiB5b3UgdXNlIHRoZSBjb250ZXh0IHRvIGNvbm5lY3QgdG8gYSBzZXJ2ZXIsIDpjb25zdDpgQ0VSVF9SRVFVSVJFRGAKK3ZhbGlkYXRlcyB0aGUgc2VydmVyIGNlcnRpZmljYXRlOiBpdCBlbnN1cmVzIHRoYXQgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZQord2FzIHNpZ25lZCB3aXRoIG9uZSBvZiB0aGUgQ0EgY2VydGlmaWNhdGVzLCBhbmQgY2hlY2tzIHRoZSBzaWduYXR1cmUgZm9yCitjb3JyZWN0bmVzczo6CisKKyAgID4+PiBjb25uID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgID4+PiBjb25uLmNvbm5lY3QoKCJsaW51eGZyLm9yZyIsIDQ0MykpCisKK1lvdSBzaG91bGQgdGhlbiBmZXRjaCB0aGUgY2VydGlmaWNhdGUgYW5kIGNoZWNrIGl0cyBmaWVsZHMgZm9yIGNvbmZvcm1pdHk6OgorCisgICA+Pj4gY2VydCA9IGNvbm4uZ2V0cGVlcmNlcnQoKQorICAgPj4+IHNzbC5tYXRjaF9ob3N0bmFtZShjZXJ0LCAibGludXhmci5vcmciKQorCitWaXN1YWwgaW5zcGVjdGlvbiBzaG93cyB0aGF0IHRoZSBjZXJ0aWZpY2F0ZSBkb2VzIGlkZW50aWZ5IHRoZSBkZXNpcmVkIHNlcnZpY2UKKyh0aGF0IGlzLCB0aGUgSFRUUFMgaG9zdCBgYGxpbnV4ZnIub3JnYGApOjoKKworICAgPj4+IHBwcmludC5wcHJpbnQoY2VydCkKKyAgIHsnbm90QWZ0ZXInOiAnSnVuIDI2IDIxOjQxOjQ2IDIwMTEgR01UJywKKyAgICAnc3ViamVjdCc6ICgoKCdjb21tb25OYW1lJywgJ2xpbnV4ZnIub3JnJyksKSwpLAorICAgICdzdWJqZWN0QWx0TmFtZSc6ICgoJ0ROUycsICdsaW51eGZyLm9yZycpLCAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JykpfQorCitOb3cgdGhhdCB5b3UgYXJlIGFzc3VyZWQgb2YgaXRzIGF1dGhlbnRpY2l0eSwgeW91IGNhbiBwcm9jZWVkIHRvIHRhbGsgd2l0aAordGhlIHNlcnZlcjo6CisKKyAgID4+PiBjb25uLnNlbmRhbGwoYiJIRUFEIC8gSFRUUC8xLjBcclxuSG9zdDogbGludXhmci5vcmdcclxuXHJcbiIpCisgICA+Pj4gcHByaW50LnBwcmludChjb25uLnJlY3YoMTAyNCkuc3BsaXQoYiJcclxuIikpCisgICBbYidIVFRQLzEuMSAzMDIgRm91bmQnLAorICAgIGInRGF0ZTogU3VuLCAxNiBNYXkgMjAxMCAxMzo0MzoyOCBHTVQnLAorICAgIGInU2VydmVyOiBBcGFjaGUvMi4yJywKKyAgICBiJ0xvY2F0aW9uOiBodHRwczovL2xpbnV4ZnIub3JnL3B1Yi8nLAorICAgIGInVmFyeTogQWNjZXB0LUVuY29kaW5nJywKKyAgICBiJ0Nvbm5lY3Rpb246IGNsb3NlJywKKyAgICBiJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEnLAorICAgIGInJywKKyAgICBiJyddCisKK1NlZSB0aGUgZGlzY3Vzc2lvbiBvZiA6cmVmOmBzc2wtc2VjdXJpdHlgIGJlbG93LgorCiAKIFNlcnZlci1zaWRlIG9wZXJhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLUZvciBzZXJ2ZXIgb3BlcmF0aW9uLCB0eXBpY2FsbHkgeW91J2QgbmVlZCB0byBoYXZlIGEgc2VydmVyIGNlcnRpZmljYXRlLCBhbmQKLXByaXZhdGUga2V5LCBlYWNoIGluIGEgZmlsZS4gIFlvdSdkIG9wZW4gYSBzb2NrZXQsIGJpbmQgaXQgdG8gYSBwb3J0LCBjYWxsCi06bWV0aDpgbGlzdGVuYCBvbiBpdCwgdGhlbiBzdGFydCB3YWl0aW5nIGZvciBjbGllbnRzIHRvIGNvbm5lY3Q6OgorRm9yIHNlcnZlciBvcGVyYXRpb24sIHR5cGljYWxseSB5b3UnbGwgbmVlZCB0byBoYXZlIGEgc2VydmVyIGNlcnRpZmljYXRlLCBhbmQKK3ByaXZhdGUga2V5LCBlYWNoIGluIGEgZmlsZS4gIFlvdSdsbCBmaXJzdCBjcmVhdGUgYSBjb250ZXh0IGhvbGRpbmcgdGhlIGtleQorYW5kIHRoZSBjZXJ0aWZpY2F0ZSwgc28gdGhhdCBjbGllbnRzIGNhbiBjaGVjayB5b3VyIGF1dGhlbnRpY2l0eS4gIFRoZW4KK3lvdSdsbCBvcGVuIGEgc29ja2V0LCBiaW5kIGl0IHRvIGEgcG9ydCwgY2FsbCA6bWV0aDpgbGlzdGVuYCBvbiBpdCwgYW5kIHN0YXJ0Cit3YWl0aW5nIGZvciBjbGllbnRzIHRvIGNvbm5lY3Q6OgogCiAgICBpbXBvcnQgc29ja2V0LCBzc2wKIAorICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlPSJteWNlcnRmaWxlIiwga2V5ZmlsZT0ibXlrZXlmaWxlIikKKwogICAgYmluZHNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQogICAgYmluZHNvY2tldC5iaW5kKCgnbXlhZGRyLm15ZG9tYWluLmNvbScsIDEwMDIzKSkKICAgIGJpbmRzb2NrZXQubGlzdGVuKDUpCiAKLVdoZW4gb25lIGRpZCwgeW91J2QgY2FsbCA6bWV0aDpgYWNjZXB0YCBvbiB0aGUgc29ja2V0IHRvIGdldCB0aGUgbmV3IHNvY2tldCBmcm9tCi10aGUgb3RoZXIgZW5kLCBhbmQgdXNlIDpmdW5jOmB3cmFwX3NvY2tldGAgdG8gY3JlYXRlIGEgc2VydmVyLXNpZGUgU1NMIGNvbnRleHQKLWZvciBpdDo6CitXaGVuIGEgY2xpZW50IGNvbm5lY3RzLCB5b3UnbGwgY2FsbCA6bWV0aDpgYWNjZXB0YCBvbiB0aGUgc29ja2V0IHRvIGdldCB0aGUKK25ldyBzb2NrZXQgZnJvbSB0aGUgb3RoZXIgZW5kLCBhbmQgdXNlIHRoZSBjb250ZXh0J3MgOm1ldGg6YFNTTENvbnRleHQud3JhcF9zb2NrZXRgCittZXRob2QgdG8gY3JlYXRlIGEgc2VydmVyLXNpZGUgU1NMIHNvY2tldCBmb3IgdGhlIGNvbm5lY3Rpb246OgogCiAgICB3aGlsZSBUcnVlOgogICAgICAgIG5ld3NvY2tldCwgZnJvbWFkZHIgPSBiaW5kc29ja2V0LmFjY2VwdCgpCi0gICAgICAgY29ubnN0cmVhbSA9IHNzbC53cmFwX3NvY2tldChuZXdzb2NrZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Im15Y2VydGZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT0ibXlrZXlmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICBjb25uc3RyZWFtID0gY29udGV4dC53cmFwX3NvY2tldChuZXdzb2NrZXQsIHNlcnZlcl9zaWRlPVRydWUpCiAgICAgICAgdHJ5OgogICAgICAgICAgICBkZWFsX3dpdGhfY2xpZW50KGNvbm5zdHJlYW0pCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgY29ubnN0cmVhbS5zaHV0ZG93bihzb2NrZXQuU0hVVF9SRFdSKQogICAgICAgICAgICBjb25uc3RyZWFtLmNsb3NlKCkKIAotVGhlbiB5b3UnZCByZWFkIGRhdGEgZnJvbSB0aGUgYGBjb25uc3RyZWFtYGAgYW5kIGRvIHNvbWV0aGluZyB3aXRoIGl0IHRpbGwgeW91CitUaGVuIHlvdSdsbCByZWFkIGRhdGEgZnJvbSB0aGUgYGBjb25uc3RyZWFtYGAgYW5kIGRvIHNvbWV0aGluZyB3aXRoIGl0IHRpbGwgeW91CiBhcmUgZmluaXNoZWQgd2l0aCB0aGUgY2xpZW50IChvciB0aGUgY2xpZW50IGlzIGZpbmlzaGVkIHdpdGggeW91KTo6CiAKICAgIGRlZiBkZWFsX3dpdGhfY2xpZW50KGNvbm5zdHJlYW0pOgotICAgICAgIGRhdGEgPSBjb25uc3RyZWFtLnJlYWQoKQotICAgICAgICMgbnVsbCBkYXRhIG1lYW5zIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgd2l0aCB1cworICAgICAgIGRhdGEgPSBjb25uc3RyZWFtLnJlY3YoMTAyNCkKKyAgICAgICAjIGVtcHR5IGRhdGEgbWVhbnMgdGhlIGNsaWVudCBpcyBmaW5pc2hlZCB3aXRoIHVzCiAgICAgICAgd2hpbGUgZGF0YToKICAgICAgICAgICAgaWYgbm90IGRvX3NvbWV0aGluZyhjb25uc3RyZWFtLCBkYXRhKToKICAgICAgICAgICAgICAgICMgd2UnbGwgYXNzdW1lIGRvX3NvbWV0aGluZyByZXR1cm5zIEZhbHNlCiAgICAgICAgICAgICAgICAjIHdoZW4gd2UncmUgZmluaXNoZWQgd2l0aCBjbGllbnQKICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgIGRhdGEgPSBjb25uc3RyZWFtLnJlYWQoKQorICAgICAgICAgICBkYXRhID0gY29ubnN0cmVhbS5yZWN2KDEwMjQpCiAgICAgICAgIyBmaW5pc2hlZCB3aXRoIGNsaWVudAogCi1BbmQgZ28gYmFjayB0byBsaXN0ZW5pbmcgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMuCitBbmQgZ28gYmFjayB0byBsaXN0ZW5pbmcgZm9yIG5ldyBjbGllbnQgY29ubmVjdGlvbnMgKG9mIGNvdXJzZSwgYSByZWFsIHNlcnZlcgord291bGQgcHJvYmFibHkgaGFuZGxlIGVhY2ggY2xpZW50IGNvbm5lY3Rpb24gaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIG9yIHB1dAordGhlIHNvY2tldHMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIHVzZSBhbiBldmVudCBsb29wKS4KKworCisuLiBfc3NsLXNlY3VyaXR5OgorCitTZWN1cml0eSBjb25zaWRlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmVyaWZ5aW5nIGNlcnRpZmljYXRlcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCis6Y29uc3Q6YENFUlRfTk9ORWAgaXMgdGhlIGRlZmF1bHQuICBTaW5jZSBpdCBkb2VzIG5vdCBhdXRoZW50aWNhdGUgdGhlIG90aGVyCitwZWVyLCBpdCBjYW4gYmUgaW5zZWN1cmUsIGVzcGVjaWFsbHkgaW4gY2xpZW50IG1vZGUgd2hlcmUgbW9zdCBvZiB0aW1lIHlvdQord291bGQgbGlrZSB0byBlbnN1cmUgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgc2VydmVyIHlvdSdyZSB0YWxraW5nIHRvLgorVGhlcmVmb3JlLCB3aGVuIGluIGNsaWVudCBtb2RlLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlCis6Y29uc3Q6YENFUlRfUkVRVUlSRURgLiAgSG93ZXZlciwgaXQgaXMgaW4gaXRzZWxmIG5vdCBzdWZmaWNpZW50OyB5b3UgYWxzbworaGF2ZSB0byBjaGVjayB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUsIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCis6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgbWF0Y2hlcyB0aGUgZGVzaXJlZCBzZXJ2aWNlLiAgRm9yIG1hbnkKK3Byb3RvY29scyBhbmQgYXBwbGljYXRpb25zLCB0aGUgc2VydmljZSBjYW4gYmUgaWRlbnRpZmllZCBieSB0aGUgaG9zdG5hbWU7CitpbiB0aGlzIGNhc2UsIHRoZSA6ZnVuYzpgbWF0Y2hfaG9zdG5hbWVgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkLgorCitJbiBzZXJ2ZXIgbW9kZSwgaWYgeW91IHdhbnQgdG8gYXV0aGVudGljYXRlIHlvdXIgY2xpZW50cyB1c2luZyB0aGUgU1NMIGxheWVyCisocmF0aGVyIHRoYW4gdXNpbmcgYSBoaWdoZXItbGV2ZWwgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtKSwgeW91J2xsIGFsc28gaGF2ZQordG8gc3BlY2lmeSA6Y29uc3Q6YENFUlRfUkVRVUlSRURgIGFuZCBzaW1pbGFybHkgY2hlY2sgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZS4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIEluIGNsaWVudCBtb2RlLCA6Y29uc3Q6YENFUlRfT1BUSU9OQUxgIGFuZCA6Y29uc3Q6YENFUlRfUkVRVUlSRURgIGFyZQorICAgICAgZXF1aXZhbGVudCB1bmxlc3MgYW5vbnltb3VzIGNpcGhlcnMgYXJlIGVuYWJsZWQgKHRoZXkgYXJlIGRpc2FibGVkCisgICAgICBieSBkZWZhdWx0KS4KKworUHJvdG9jb2wgdmVyc2lvbnMKK15eXl5eXl5eXl5eXl5eXl5eCisKK1NTTCB2ZXJzaW9uIDIgaXMgY29uc2lkZXJlZCBpbnNlY3VyZSBhbmQgaXMgdGhlcmVmb3JlIGRhbmdlcm91cyB0byB1c2UuICBJZgoreW91IHdhbnQgbWF4aW11bSBjb21wYXRpYmlsaXR5IGJldHdlZW4gY2xpZW50cyBhbmQgc2VydmVycywgaXQgaXMgcmVjb21tZW5kZWQKK3RvIHVzZSA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AgYXMgdGhlIHByb3RvY29sIHZlcnNpb24gYW5kIHRoZW4gZGlzYWJsZQorU1NMdjIgZXhwbGljaXRseSB1c2luZyB0aGUgOmRhdGE6YFNTTENvbnRleHQub3B0aW9uc2AgYXR0cmlidXRlOjoKKworICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisKK1RoZSBTU0wgY29udGV4dCBjcmVhdGVkIGFib3ZlIHdpbGwgYWxsb3cgU1NMdjMgYW5kIFRMU3YxIGNvbm5lY3Rpb25zLCBidXQKK25vdCBTU0x2Mi4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTU4MiwzICs5NzMsNiBAQAogCiAgICBgUkZDIDMyODA6IEludGVybmV0IFguNTA5IFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUgQ2VydGlmaWNhdGUgYW5kIENSTCBQcm9maWxlIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMjgwPmBfCiAgICAgICAgSG91c2xleSBldC4gYWwuCisKKyAgIGBSRkMgNDM2NjogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIEV4dGVuc2lvbnMgPGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzQzNjY+YF8KKyAgICAgICBCbGFrZS1XaWxzb24gZXQuIGFsLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCAzNDE5ODIwLi5jYzg3OWRlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiwxMSArNiwxNCBAQAogICAgICAgICAgICAgICBvcy5sc3RhdCgpIGFuZCBvcy5mc3RhdCgpLgogLi4gc2VjdGlvbmF1dGhvcjo6IFNraXAgTW9udGFuYXJvIDxza2lwQGF1dG9tYXRyaXguY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdGF0LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgc3RhdGAgbW9kdWxlIGRlZmluZXMgY29uc3RhbnRzIGFuZCBmdW5jdGlvbnMgZm9yIGludGVycHJldGluZyB0aGUKIHJlc3VsdHMgb2YgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIGFuZCA6ZnVuYzpgb3MubHN0YXRgIChpZiB0aGV5Ci1leGlzdCkuICBGb3IgY29tcGxldGUgZGV0YWlscyBhYm91dCB0aGUgOmNmdW5jOmBzdGF0YCwgOmNmdW5jOmBmc3RhdGAgYW5kCi06Y2Z1bmM6YGxzdGF0YCBjYWxscywgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBzeXN0ZW0uCitleGlzdCkuICBGb3IgY29tcGxldGUgZGV0YWlscyBhYm91dCB0aGUgOmM6ZnVuYzpgc3RhdGAsIDpjOmZ1bmM6YGZzdGF0YCBhbmQKKzpjOmZ1bmM6YGxzdGF0YCBjYWxscywgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgeW91ciBzeXN0ZW0uCiAKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKQEAgLTY4LDcgKzcxLDcgQEAKIAogTm9ybWFsbHksIHlvdSB3b3VsZCB1c2UgdGhlIDpmdW5jOmBvcy5wYXRoLmlzXCpgIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyB0aGUgdHlwZQogb2YgYSBmaWxlOyB0aGUgZnVuY3Rpb25zIGhlcmUgYXJlIHVzZWZ1bCB3aGVuIHlvdSBhcmUgZG9pbmcgbXVsdGlwbGUgdGVzdHMgb2YKLXRoZSBzYW1lIGZpbGUgYW5kIHdpc2ggdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIHRoZSA6Y2Z1bmM6YHN0YXRgIHN5c3RlbSBjYWxsCit0aGUgc2FtZSBmaWxlIGFuZCB3aXNoIHRvIGF2b2lkIHRoZSBvdmVyaGVhZCBvZiB0aGUgOmM6ZnVuYzpgc3RhdGAgc3lzdGVtIGNhbGwKIGZvciBlYWNoIHRlc3QuICBUaGVzZSBhcmUgYWxzbyB1c2VmdWwgd2hlbiBjaGVja2luZyBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYSBmaWxlCiB0aGF0IGlzbid0IGhhbmRsZWQgYnkgOm1vZDpgb3MucGF0aGAsIGxpa2UgdGhlIHRlc3RzIGZvciBibG9jayBhbmQgY2hhcmFjdGVyCiBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CmluZGV4IDk5NTRmOWIuLmIwMWRjZGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKQEAgLTE2OCw4ICsxNjgsOSBAQAogRnVydGhlcm1vcmUsIHNvbWUgdHlwZXMgKGZvciBleGFtcGxlLCBmdW5jdGlvbiBvYmplY3RzKSBzdXBwb3J0IG9ubHkgYSBkZWdlbmVyYXRlCiBub3Rpb24gb2YgY29tcGFyaXNvbiB3aGVyZSBhbnkgdHdvIG9iamVjdHMgb2YgdGhhdCB0eXBlIGFyZSB1bmVxdWFsLiAgVGhlIGBgPGBgLAogYGA8PWBgLCBgYD5gYCBhbmQgYGA+PWBgIG9wZXJhdG9ycyB3aWxsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gd2hlbgotYW55IG9wZXJhbmQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG9iamVjdHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcyB0aGF0IGNhbm5vdAotYmUgY29tcGFyZWQsIG9yIG90aGVyIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vIGRlZmluZWQgb3JkZXJpbmcuCitjb21wYXJpbmcgYSBjb21wbGV4IG51bWJlciB3aXRoIGFub3RoZXIgYnVpbHQtaW4gbnVtZXJpYyB0eXBlLCB3aGVuIHRoZSBvYmplY3RzCithcmUgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgY2Fubm90IGJlIGNvbXBhcmVkLCBvciBpbiBvdGhlciBjYXNlcyB3aGVyZSB0aGVyZSBpcworbm8gZGVmaW5lZCBvcmRlcmluZy4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBfX2VxX18oKSAoaW5zdGFuY2UgbWV0aG9kKQpAQCAtMTk2LDggKzE5Nyw4IEBACiAgICBvcGVyYXRvcjogaW4KICAgIG9wZXJhdG9yOiBub3QgaW4KIAotVHdvIG1vcmUgb3BlcmF0aW9ucyB3aXRoIHRoZSBzYW1lIHN5bnRhY3RpYyBwcmlvcml0eSwgYGBpbmBgIGFuZCBgYG5vdCBpbmBgLCBhcmUKLXN1cHBvcnRlZCBvbmx5IGJ5IHNlcXVlbmNlIHR5cGVzIChiZWxvdykuCitUd28gbW9yZSBvcGVyYXRpb25zIHdpdGggdGhlIHNhbWUgc3ludGFjdGljIHByaW9yaXR5LCA6a2V5d29yZDpgaW5gIGFuZAorOmtleXdvcmQ6YG5vdCBpbmAsIGFyZSBzdXBwb3J0ZWQgb25seSBieSBzZXF1ZW5jZSB0eXBlcyAoYmVsb3cpLgogCiAKIC4uIF90eXBlc251bWVyaWM6CkBAIC0yMTYsNyArMjE3LDcgQEAKIFRoZXJlIGFyZSB0aHJlZSBkaXN0aW5jdCBudW1lcmljIHR5cGVzOiA6ZGZuOmBpbnRlZ2Vyc2AsIDpkZm46YGZsb2F0aW5nCiBwb2ludCBudW1iZXJzYCwgYW5kIDpkZm46YGNvbXBsZXggbnVtYmVyc2AuICBJbiBhZGRpdGlvbiwgQm9vbGVhbnMgYXJlIGEKIHN1YnR5cGUgb2YgaW50ZWdlcnMuICBJbnRlZ2VycyBoYXZlIHVubGltaXRlZCBwcmVjaXNpb24uICBGbG9hdGluZyBwb2ludAotbnVtYmVycyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCB1c2luZyA6Y3R5cGU6YGRvdWJsZWAgaW4gQzsgaW5mb3JtYXRpb24KK251bWJlcnMgYXJlIHVzdWFsbHkgaW1wbGVtZW50ZWQgdXNpbmcgOmM6dHlwZTpgZG91YmxlYCBpbiBDOyBpbmZvcm1hdGlvbgogYWJvdXQgdGhlIHByZWNpc2lvbiBhbmQgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgZmxvYXRpbmcgcG9pbnQKIG51bWJlcnMgZm9yIHRoZSBtYWNoaW5lIG9uIHdoaWNoIHlvdXIgcHJvZ3JhbSBpcyBydW5uaW5nIGlzIGF2YWlsYWJsZQogaW4gOmRhdGE6YHN5cy5mbG9hdF9pbmZvYC4gIENvbXBsZXggbnVtYmVycyBoYXZlIGEgcmVhbCBhbmQgaW1hZ2luYXJ5CkBAIC00NjcsNiArNDY4LDY5IEBACiAKICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAorLi4gbWV0aG9kOjogaW50LnRvX2J5dGVzKGxlbmd0aCwgYnl0ZW9yZGVyLCBcKiwgc2lnbmVkPUZhbHNlKQorCisgICAgUmV0dXJuIGFuIGFycmF5IG9mIGJ5dGVzIHJlcHJlc2VudGluZyBhbiBpbnRlZ2VyLgorCisgICAgICAgID4+PiAoMTAyNCkudG9fYnl0ZXMoMiwgYnl0ZW9yZGVyPSdiaWcnKQorICAgICAgICBiJ1x4MDRceDAwJworICAgICAgICA+Pj4gKDEwMjQpLnRvX2J5dGVzKDEwLCBieXRlb3JkZXI9J2JpZycpCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDA0XHgwMCcKKyAgICAgICAgPj4+ICgtMTAyNCkudG9fYnl0ZXMoMTAsIGJ5dGVvcmRlcj0nYmlnJywgc2lnbmVkPVRydWUpCisgICAgICAgIGInXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZmXHhmZlx4ZmZceGZjXHgwMCcKKyAgICAgICAgPj4+IHggPSAxMDAwCisgICAgICAgID4+PiB4LnRvX2J5dGVzKCh4LmJpdF9sZW5ndGgoKSAvLyA4KSArIDEsIGJ5dGVvcmRlcj0nbGl0dGxlJykKKyAgICAgICAgYidceGU4XHgwMycKKworICAgIFRoZSBpbnRlZ2VyIGlzIHJlcHJlc2VudGVkIHVzaW5nICpsZW5ndGgqIGJ5dGVzLiAgQW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAKKyAgICBpcyByYWlzZWQgaWYgdGhlIGludGVnZXIgaXMgbm90IHJlcHJlc2VudGFibGUgd2l0aCB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICAgYnl0ZXMuCisKKyAgICBUaGUgKmJ5dGVvcmRlciogYXJndW1lbnQgZGV0ZXJtaW5lcyB0aGUgYnl0ZSBvcmRlciB1c2VkIHRvIHJlcHJlc2VudCB0aGUKKyAgICBpbnRlZ2VyLiAgSWYgKmJ5dGVvcmRlciogaXMgYGAiYmlnImBgLCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZQorICAgIGJlZ2lubmluZyBvZiB0aGUgYnl0ZSBhcnJheS4gIElmICpieXRlb3JkZXIqIGlzIGBgImxpdHRsZSJgYCwgdGhlIG1vc3QKKyAgICBzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgYXJyYXkuICBUbyByZXF1ZXN0IHRoZSBuYXRpdmUKKyAgICBieXRlIG9yZGVyIG9mIHRoZSBob3N0IHN5c3RlbSwgdXNlIDpkYXRhOmBzeXMuYnl0ZW9yZGVyYCBhcyB0aGUgYnl0ZSBvcmRlcgorICAgIHZhbHVlLgorCisgICAgVGhlICpzaWduZWQqIGFyZ3VtZW50IGRldGVybWluZXMgd2hldGhlciB0d28ncyBjb21wbGVtZW50IGlzIHVzZWQgdG8KKyAgICByZXByZXNlbnQgdGhlIGludGVnZXIuICBJZiAqc2lnbmVkKiBpcyBgYEZhbHNlYGAgYW5kIGEgbmVnYXRpdmUgaW50ZWdlciBpcworICAgIGdpdmVuLCBhbiA6ZXhjOmBPdmVyZmxvd0Vycm9yYCBpcyByYWlzZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciAqc2lnbmVkKgorICAgIGlzIGBgRmFsc2VgYC4KKworICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBjbGFzc21ldGhvZDo6IGludC5mcm9tX2J5dGVzKGJ5dGVzLCBieXRlb3JkZXIsIFwqLCBzaWduZWQ9RmFsc2UpCisKKyAgICBSZXR1cm4gdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIGJ5dGVzLgorCisgICAgICAgID4+PiBpbnQuZnJvbV9ieXRlcyhiJ1x4MDBceDEwJywgYnl0ZW9yZGVyPSdiaWcnKQorICAgICAgICAxNgorICAgICAgICA+Pj4gaW50LmZyb21fYnl0ZXMoYidceDAwXHgxMCcsIGJ5dGVvcmRlcj0nbGl0dGxlJykKKyAgICAgICAgNDA5NgorICAgICAgICA+Pj4gaW50LmZyb21fYnl0ZXMoYidceGZjXHgwMCcsIGJ5dGVvcmRlcj0nYmlnJywgc2lnbmVkPVRydWUpCisgICAgICAgIC0xMDI0CisgICAgICAgID4+PiBpbnQuZnJvbV9ieXRlcyhiJ1x4ZmNceDAwJywgYnl0ZW9yZGVyPSdiaWcnLCBzaWduZWQ9RmFsc2UpCisgICAgICAgIDY0NTEyCisgICAgICAgID4+PiBpbnQuZnJvbV9ieXRlcyhbMjU1LCAwLCAwXSwgYnl0ZW9yZGVyPSdiaWcnKQorICAgICAgICAxNjcxMTY4MAorCisgICAgVGhlIGFyZ3VtZW50ICpieXRlcyogbXVzdCBlaXRoZXIgc3VwcG9ydCB0aGUgYnVmZmVyIHByb3RvY29sIG9yIGJlIGFuCisgICAgaXRlcmFibGUgcHJvZHVjaW5nIGJ5dGVzLiA6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIGFyZQorICAgIGV4YW1wbGVzIG9mIGJ1aWx0LWluIG9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBidWZmZXIgcHJvdG9jb2wuCisKKyAgICBUaGUgKmJ5dGVvcmRlciogYXJndW1lbnQgZGV0ZXJtaW5lcyB0aGUgYnl0ZSBvcmRlciB1c2VkIHRvIHJlcHJlc2VudCB0aGUKKyAgICBpbnRlZ2VyLiAgSWYgKmJ5dGVvcmRlciogaXMgYGAiYmlnImBgLCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZQorICAgIGJlZ2lubmluZyBvZiB0aGUgYnl0ZSBhcnJheS4gIElmICpieXRlb3JkZXIqIGlzIGBgImxpdHRsZSJgYCwgdGhlIG1vc3QKKyAgICBzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgYXJyYXkuICBUbyByZXF1ZXN0IHRoZSBuYXRpdmUKKyAgICBieXRlIG9yZGVyIG9mIHRoZSBob3N0IHN5c3RlbSwgdXNlIDpkYXRhOmBzeXMuYnl0ZW9yZGVyYCBhcyB0aGUgYnl0ZSBvcmRlcgorICAgIHZhbHVlLgorCisgICAgVGhlICpzaWduZWQqIGFyZ3VtZW50IGluZGljYXRlcyB3aGV0aGVyIHR3bydzIGNvbXBsZW1lbnQgaXMgdXNlZCB0bworICAgIHJlcHJlc2VudCB0aGUgaW50ZWdlci4KKworICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAKIEFkZGl0aW9uYWwgTWV0aG9kcyBvbiBGbG9hdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01NTIsNiArNjE2LDEwOSBAQAogICAgJzB4MS5kMzgwMDAwMDAwMDAwcCsxMScKIAogCisuLiBfbnVtZXJpYy1oYXNoOgorCitIYXNoaW5nIG9mIG51bWVyaWMgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgbnVtYmVycyBgYHhgYCBhbmQgYGB5YGAsIHBvc3NpYmx5IG9mIGRpZmZlcmVudCB0eXBlcywgaXQncyBhIHJlcXVpcmVtZW50Cit0aGF0IGBgaGFzaCh4KSA9PSBoYXNoKHkpYGAgd2hlbmV2ZXIgYGB4ID09IHlgYCAoc2VlIHRoZSA6bWV0aDpgX19oYXNoX19gCittZXRob2QgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKS4gIEZvciBlYXNlIG9mIGltcGxlbWVudGF0aW9uIGFuZAorZWZmaWNpZW5jeSBhY3Jvc3MgYSB2YXJpZXR5IG9mIG51bWVyaWMgdHlwZXMgKGluY2x1ZGluZyA6Y2xhc3M6YGludGAsCis6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGFuZCA6Y2xhc3M6YGZyYWN0aW9ucy5GcmFjdGlvbmApCitQeXRob24ncyBoYXNoIGZvciBudW1lcmljIHR5cGVzIGlzIGJhc2VkIG9uIGEgc2luZ2xlIG1hdGhlbWF0aWNhbCBmdW5jdGlvbgordGhhdCdzIGRlZmluZWQgZm9yIGFueSByYXRpb25hbCBudW1iZXIsIGFuZCBoZW5jZSBhcHBsaWVzIHRvIGFsbCBpbnN0YW5jZXMgb2YKKzpjbGFzczpgaW50YCBhbmQgOmNsYXNzOmBmcmFjdGlvbi5GcmFjdGlvbmAsIGFuZCBhbGwgZmluaXRlIGluc3RhbmNlcyBvZgorOmNsYXNzOmBmbG9hdGAgYW5kIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYC4gIEVzc2VudGlhbGx5LCB0aGlzIGZ1bmN0aW9uIGlzCitnaXZlbiBieSByZWR1Y3Rpb24gbW9kdWxvIGBgUGBgIGZvciBhIGZpeGVkIHByaW1lIGBgUGBgLiAgVGhlIHZhbHVlIG9mIGBgUGBgIGlzCittYWRlIGF2YWlsYWJsZSB0byBQeXRob24gYXMgdGhlIDphdHRyOmBtb2R1bHVzYCBhdHRyaWJ1dGUgb2YKKzpkYXRhOmBzeXMuaGFzaF9pbmZvYC4KKworLi4gaW1wbC1kZXRhaWw6OgorCisgICBDdXJyZW50bHksIHRoZSBwcmltZSB1c2VkIGlzIGBgUCA9IDIqKjMxIC0gMWBgIG9uIG1hY2hpbmVzIHdpdGggMzItYml0IEMKKyAgIGxvbmdzIGFuZCBgYFAgPSAyKio2MSAtIDFgYCBvbiBtYWNoaW5lcyB3aXRoIDY0LWJpdCBDIGxvbmdzLgorCitIZXJlIGFyZSB0aGUgcnVsZXMgaW4gZGV0YWlsOgorCisgLSBJZiBgYHggPSBtIC8gbmBgIGlzIGEgbm9ubmVnYXRpdmUgcmF0aW9uYWwgbnVtYmVyIGFuZCBgYG5gYCBpcyBub3QgZGl2aXNpYmxlCisgICBieSBgYFBgYCwgZGVmaW5lIGBgaGFzaCh4KWBgIGFzIGBgbSAqIGludm1vZChuLCBQKSAlIFBgYCwgd2hlcmUgYGBpbnZtb2QobiwKKyAgIFApYGAgZ2l2ZXMgdGhlIGludmVyc2Ugb2YgYGBuYGAgbW9kdWxvIGBgUGBgLgorCisgLSBJZiBgYHggPSBtIC8gbmBgIGlzIGEgbm9ubmVnYXRpdmUgcmF0aW9uYWwgbnVtYmVyIGFuZCBgYG5gYCBpcworICAgZGl2aXNpYmxlIGJ5IGBgUGBgIChidXQgYGBtYGAgaXMgbm90KSB0aGVuIGBgbmBgIGhhcyBubyBpbnZlcnNlCisgICBtb2R1bG8gYGBQYGAgYW5kIHRoZSBydWxlIGFib3ZlIGRvZXNuJ3QgYXBwbHk7IGluIHRoaXMgY2FzZSBkZWZpbmUKKyAgIGBgaGFzaCh4KWBgIHRvIGJlIHRoZSBjb25zdGFudCB2YWx1ZSBgYHN5cy5oYXNoX2luZm8uaW5mYGAuCisKKyAtIElmIGBgeCA9IG0gLyBuYGAgaXMgYSBuZWdhdGl2ZSByYXRpb25hbCBudW1iZXIgZGVmaW5lIGBgaGFzaCh4KWBgCisgICBhcyBgYC1oYXNoKC14KWBgLiAgSWYgdGhlIHJlc3VsdGluZyBoYXNoIGlzIGBgLTFgYCwgcmVwbGFjZSBpdCB3aXRoCisgICBgYC0yYGAuCisKKyAtIFRoZSBwYXJ0aWN1bGFyIHZhbHVlcyBgYHN5cy5oYXNoX2luZm8uaW5mYGAsIGBgLXN5cy5oYXNoX2luZm8uaW5mYGAKKyAgIGFuZCBgYHN5cy5oYXNoX2luZm8ubmFuYGAgYXJlIHVzZWQgYXMgaGFzaCB2YWx1ZXMgZm9yIHBvc2l0aXZlCisgICBpbmZpbml0eSwgbmVnYXRpdmUgaW5maW5pdHksIG9yIG5hbnMgKHJlc3BlY3RpdmVseSkuICAoQWxsIGhhc2hhYmxlCisgICBuYW5zIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZS4pCisKKyAtIEZvciBhIDpjbGFzczpgY29tcGxleGAgbnVtYmVyIGBgemBgLCB0aGUgaGFzaCB2YWx1ZXMgb2YgdGhlIHJlYWwKKyAgIGFuZCBpbWFnaW5hcnkgcGFydHMgYXJlIGNvbWJpbmVkIGJ5IGNvbXB1dGluZyBgYGhhc2goei5yZWFsKSArCisgICBzeXMuaGFzaF9pbmZvLmltYWcgKiBoYXNoKHouaW1hZylgYCwgcmVkdWNlZCBtb2R1bG8KKyAgIGBgMioqc3lzLmhhc2hfaW5mby53aWR0aGBgIHNvIHRoYXQgaXQgbGllcyBpbgorICAgYGByYW5nZSgtMioqKHN5cy5oYXNoX2luZm8ud2lkdGggLSAxKSwgMioqKHN5cy5oYXNoX2luZm8ud2lkdGggLQorICAgMSkpYGAuICBBZ2FpbiwgaWYgdGhlIHJlc3VsdCBpcyBgYC0xYGAsIGl0J3MgcmVwbGFjZWQgd2l0aCBgYC0yYGAuCisKKworVG8gY2xhcmlmeSB0aGUgYWJvdmUgcnVsZXMsIGhlcmUncyBzb21lIGV4YW1wbGUgUHl0aG9uIGNvZGUsCitlcXVpdmFsZW50IHRvIHRoZSBidWlsdGluIGhhc2gsIGZvciBjb21wdXRpbmcgdGhlIGhhc2ggb2YgYSByYXRpb25hbAorbnVtYmVyLCA6Y2xhc3M6YGZsb2F0YCwgb3IgOmNsYXNzOmBjb21wbGV4YDo6CisKKworICAgaW1wb3J0IHN5cywgbWF0aAorCisgICBkZWYgaGFzaF9mcmFjdGlvbihtLCBuKToKKyAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIG9mIGEgcmF0aW9uYWwgbnVtYmVyIG0gLyBuLgorCisgICAgICAgQXNzdW1lcyBtIGFuZCBuIGFyZSBpbnRlZ2Vycywgd2l0aCBuIHBvc2l0aXZlLgorICAgICAgIEVxdWl2YWxlbnQgdG8gaGFzaChmcmFjdGlvbnMuRnJhY3Rpb24obSwgbikpLgorCisgICAgICAgIiIiCisgICAgICAgUCA9IHN5cy5oYXNoX2luZm8ubW9kdWx1cworICAgICAgICMgUmVtb3ZlIGNvbW1vbiBmYWN0b3JzIG9mIFAuICAoVW5uZWNlc3NhcnkgaWYgbSBhbmQgbiBhbHJlYWR5IGNvcHJpbWUuKQorICAgICAgIHdoaWxlIG0gJSBQID09IG4gJSBQID09IDA6CisgICAgICAgICAgIG0sIG4gPSBtIC8vIFAsIG4gLy8gUAorCisgICAgICAgaWYgbiAlIFAgPT0gMDoKKyAgICAgICAgICAgaGFzaF8gPSBzeXMuaGFzaF9pbmZvLmluZgorICAgICAgIGVsc2U6CisgICAgICAgICAgICMgRmVybWF0J3MgTGl0dGxlIFRoZW9yZW06IHBvdyhuLCBQLTEsIFApIGlzIDEsIHNvCisgICAgICAgICAgICMgcG93KG4sIFAtMiwgUCkgZ2l2ZXMgdGhlIGludmVyc2Ugb2YgbiBtb2R1bG8gUC4KKyAgICAgICAgICAgaGFzaF8gPSAoYWJzKG0pICUgUCkgKiBwb3cobiwgUCAtIDIsIFApICUgUAorICAgICAgIGlmIG0gPCAwOgorICAgICAgICAgICBoYXNoXyA9IC1oYXNoXworICAgICAgIGlmIGhhc2hfID09IC0xOgorICAgICAgICAgICBoYXNoXyA9IC0yCisgICAgICAgcmV0dXJuIGhhc2hfCisKKyAgIGRlZiBoYXNoX2Zsb2F0KHgpOgorICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggb2YgYSBmbG9hdCB4LiIiIgorCisgICAgICAgaWYgbWF0aC5pc25hbih4KToKKyAgICAgICAgICAgcmV0dXJuIHN5cy5oYXNoX2luZm8ubmFuCisgICAgICAgZWxpZiBtYXRoLmlzaW5mKHgpOgorICAgICAgICAgICByZXR1cm4gc3lzLmhhc2hfaW5mby5pbmYgaWYgeCA+IDAgZWxzZSAtc3lzLmhhc2hfaW5mby5pbmYKKyAgICAgICBlbHNlOgorICAgICAgICAgICByZXR1cm4gaGFzaF9mcmFjdGlvbigqeC5hc19pbnRlZ2VyX3JhdGlvKCkpCisKKyAgIGRlZiBoYXNoX2NvbXBsZXgoeik6CisgICAgICAgIiIiQ29tcHV0ZSB0aGUgaGFzaCBvZiBhIGNvbXBsZXggbnVtYmVyIHouIiIiCisKKyAgICAgICBoYXNoXyA9IGhhc2hfZmxvYXQoei5yZWFsKSArIHN5cy5oYXNoX2luZm8uaW1hZyAqIGhhc2hfZmxvYXQoei5pbWFnKQorICAgICAgICMgZG8gYSBzaWduZWQgcmVkdWN0aW9uIG1vZHVsbyAyKipzeXMuaGFzaF9pbmZvLndpZHRoCisgICAgICAgTSA9IDIqKihzeXMuaGFzaF9pbmZvLndpZHRoIC0gMSkKKyAgICAgICBoYXNoXyA9IChoYXNoXyAmIChNIC0gMSkpIC0gKGhhc2ggJiBNKQorICAgICAgIGlmIGhhc2hfID09IC0xOgorICAgICAgICAgICBoYXNoXyA9PSAtMgorICAgICAgIHJldHVybiBoYXNoXworCiAuLiBfdHlwZWl0ZXI6CiAKIEl0ZXJhdG9yIFR5cGVzCkBAIC02NTcsMjIgKzgyNCwyMCBAQAogc3RyaW5nIHN5bnRheDogYGBiJ3h5enp5J2BgLiAgVG8gY29uc3RydWN0IGJ5dGUgYXJyYXlzLCB1c2UgdGhlCiA6ZnVuYzpgYnl0ZWFycmF5YCBmdW5jdGlvbi4KIAotLi4gd2FybmluZzo6CitXaGlsZSBzdHJpbmcgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgKHJlcHJlc2VudGVkIGJ5IHN0cmluZ3Mgb2YKK2xlbmd0aCAxKSwgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGFyZSBzZXF1ZW5jZXMgb2YgKmludGVnZXJzKiAoYmV0d2VlbiAwCithbmQgMjU1KSwgcmVwcmVzZW50aW5nIHRoZSBBU0NJSSB2YWx1ZSBvZiBzaW5nbGUgYnl0ZXMuICBUaGF0IG1lYW5zIHRoYXQgZm9yCithIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgKmIqLCBgYGJbMF1gYCB3aWxsIGJlIGFuIGludGVnZXIsIHdoaWxlCitgYGJbMDoxXWBgIHdpbGwgYmUgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IG9mIGxlbmd0aCAxLiAgVGhlCityZXByZXNlbnRhdGlvbiBvZiBieXRlcyBvYmplY3RzIHVzZXMgdGhlIGxpdGVyYWwgZm9ybWF0IChgYGInLi4uJ2BgKSBzaW5jZSBpdAoraXMgZ2VuZXJhbGx5IG1vcmUgdXNlZnVsIHRoYW4gZS5nLiBgYGJ5dGVzKFs1MCwgMTksIDEwMF0pYGAuICBZb3UgY2FuIGFsd2F5cworY29udmVydCBhIGJ5dGVzIG9iamVjdCBpbnRvIGEgbGlzdCBvZiBpbnRlZ2VycyB1c2luZyBgYGxpc3QoYilgYC4KIAotICAgV2hpbGUgc3RyaW5nIG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZiBjaGFyYWN0ZXJzIChyZXByZXNlbnRlZCBieSBzdHJpbmdzIG9mCi0gICBsZW5ndGggMSksIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mICppbnRlZ2VycyogKGJldHdlZW4gMAotICAgYW5kIDI1NSksIHJlcHJlc2VudGluZyB0aGUgQVNDSUkgdmFsdWUgb2Ygc2luZ2xlIGJ5dGVzLiAgVGhhdCBtZWFucyB0aGF0IGZvcgotICAgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0ICpiKiwgYGBiWzBdYGAgd2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZQotICAgYGBiWzA6MV1gYCB3aWxsIGJlIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCBvZiBsZW5ndGggMS4gIFRoZQotICAgcmVwcmVzZW50YXRpb24gb2YgYnl0ZXMgb2JqZWN0cyB1c2VzIHRoZSBsaXRlcmFsIGZvcm1hdCAoYGBiJy4uLidgYCkgc2luY2UgaXQKLSAgIGlzIGdlbmVyYWxseSBtb3JlIHVzZWZ1bCB0aGFuIGUuZy4gYGBieXRlcyhbNTAsIDE5LCAxMDBdKWBgLiAgWW91IGNhbiBhbHdheXMKLSAgIGNvbnZlcnQgYSBieXRlcyBvYmplY3QgaW50byBhIGxpc3Qgb2YgaW50ZWdlcnMgdXNpbmcgYGBsaXN0KGIpYGAuCi0KLSAgIEFsc28sIHdoaWxlIGluIHByZXZpb3VzIFB5dGhvbiB2ZXJzaW9ucywgYnl0ZSBzdHJpbmdzIGFuZCBVbmljb2RlIHN0cmluZ3MKLSAgIGNvdWxkIGJlIGV4Y2hhbmdlZCBmb3IgZWFjaCBvdGhlciByYXRoZXIgZnJlZWx5IChiYXJyaW5nIGVuY29kaW5nIGlzc3VlcyksCi0gICBzdHJpbmdzIGFuZCBieXRlcyBhcmUgbm93IGNvbXBsZXRlbHkgc2VwYXJhdGUgY29uY2VwdHMuICBUaGVyZSdzIG5vIGltcGxpY2l0Ci0gICBlbi0vZGVjb2RpbmcgaWYgeW91IHBhc3MgYW4gb2JqZWN0IG9mIHRoZSB3cm9uZyB0eXBlLiAgQSBzdHJpbmcgYWx3YXlzCi0gICBjb21wYXJlcyB1bmVxdWFsIHRvIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4KK0Fsc28sIHdoaWxlIGluIHByZXZpb3VzIFB5dGhvbiB2ZXJzaW9ucywgYnl0ZSBzdHJpbmdzIGFuZCBVbmljb2RlIHN0cmluZ3MKK2NvdWxkIGJlIGV4Y2hhbmdlZCBmb3IgZWFjaCBvdGhlciByYXRoZXIgZnJlZWx5IChiYXJyaW5nIGVuY29kaW5nIGlzc3VlcyksCitzdHJpbmdzIGFuZCBieXRlcyBhcmUgbm93IGNvbXBsZXRlbHkgc2VwYXJhdGUgY29uY2VwdHMuICBUaGVyZSdzIG5vIGltcGxpY2l0Citlbi0vZGVjb2RpbmcgaWYgeW91IHBhc3MgYW4gb2JqZWN0IG9mIHRoZSB3cm9uZyB0eXBlLiAgQSBzdHJpbmcgYWx3YXlzCitjb21wYXJlcyB1bmVxdWFsIHRvIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4KIAogTGlzdHMgYXJlIGNvbnN0cnVjdGVkIHdpdGggc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiBgYFthLAogYiwgY11gYC4gIFR1cGxlcyBhcmUgY29uc3RydWN0ZWQgYnkgdGhlIGNvbW1hIG9wZXJhdG9yIChub3Qgd2l0aGluIHNxdWFyZQpAQCAtNjgxLDggKzg0Niw4IEBACiBtdXN0IGhhdmUgYSB0cmFpbGluZyBjb21tYSwgc3VjaCBhcyBgYChkLClgYC4KIAogT2JqZWN0cyBvZiB0eXBlIHJhbmdlIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSA6ZnVuYzpgcmFuZ2VgIGZ1bmN0aW9uLiAgVGhleSBkb24ndAotc3VwcG9ydCBzbGljaW5nLCBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24sIGFuZCB1c2luZyBgYGluYGAsIGBgbm90IGluYGAsCi06ZnVuYzpgbWluYCBvciA6ZnVuYzpgbWF4YCBvbiB0aGVtIGlzIGluZWZmaWNpZW50Lgorc3VwcG9ydCBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24sIGFuZCB1c2luZyA6ZnVuYzpgbWluYCBvciA6ZnVuYzpgbWF4YCBvbgordGhlbSBpcyBpbmVmZmljaWVudC4KIAogTW9zdCBzZXF1ZW5jZSB0eXBlcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucy4gIFRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAKIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0aWVzIGFzIHRoZSBjb21wYXJpc29uIG9wZXJhdGlvbnMuICBUaGUgYGArYGAgYW5kCkBAIC02OTEsNyArODU2LDcgQEAKIAogVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5CiAob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSkuICBJbiB0aGUgdGFibGUsICpzKiBhbmQgKnQqCi1hcmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGU7ICpuKiwgKmkqIGFuZCAqaiogYXJlIGludGVnZXJzOgorYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlOyAqbiosICppKiwgKmoqIGFuZCAqayogYXJlIGludGVnZXJzLgogCiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IE9wZXJhdGlvbiAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICB8CkBAIC04MTcsMTEgKzk4MiwxMCBAQAogCiAuLiBpbmRleDo6IHBhaXI6IHN0cmluZzsgbWV0aG9kcwogCi1TdHJpbmcgb2JqZWN0cyBzdXBwb3J0IHRoZSBtZXRob2RzIGxpc3RlZCBiZWxvdy4gIE5vdGUgdGhhdCBub25lIG9mIHRoZXNlCi1tZXRob2RzIHRha2Uga2V5d29yZCBhcmd1bWVudHMuCitTdHJpbmcgb2JqZWN0cyBzdXBwb3J0IHRoZSBtZXRob2RzIGxpc3RlZCBiZWxvdy4KIAotSW4gYWRkaXRpb24sIFB5dGhvbidzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzIGRlc2NyaWJlZCBpbgotdGhlIDpyZWY6YHR5cGVzc2VxYCBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MsIHNlZSB0aGUKK0luIGFkZGl0aW9uLCBQeXRob24ncyBzdHJpbmdzIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHR5cGUgbWV0aG9kcyBkZXNjcmliZWQgaW4gdGhlCis6cmVmOmB0eXBlc3NlcWAgc2VjdGlvbi4gVG8gb3V0cHV0IGZvcm1hdHRlZCBzdHJpbmdzLCBzZWUgdGhlCiA6cmVmOmBzdHJpbmctZm9ybWF0dGluZ2Agc2VjdGlvbi4gQWxzbywgc2VlIHRoZSA6bW9kOmByZWAgbW9kdWxlIGZvciBzdHJpbmcKIGZ1bmN0aW9ucyBiYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLgogCkBAIC04NDQsMTIgKzEwMDgsMTIgQEAKICAgIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLgogCiAKLS4uIG1ldGhvZDo6IHN0ci5lbmNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pCisuLiBtZXRob2Q6OiBzdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IikKIAotICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiAgRGVmYXVsdCBlbmNvZGluZwotICAgaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEKLSAgIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGAnc3RyaWN0J2BgLAotICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhIDpleGM6YFVuaWNvZGVFcnJvcmAuICBPdGhlciBwb3NzaWJsZQorICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0IGVuY29kaW5nCisgICBpcyBgYCd1dGYtOCdgYC4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuCisgICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGAnc3RyaWN0J2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlCisgICBhIDpleGM6YFVuaWNvZGVFcnJvcmAuIE90aGVyIHBvc3NpYmxlCiAgICB2YWx1ZXMgYXJlIGBgJ2lnbm9yZSdgYCwgYGAncmVwbGFjZSdgYCwgYGAneG1sY2hhcnJlZnJlcGxhY2UnYGAsCiAgICBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYQogICAgOmZ1bmM6YGNvZGVjcy5yZWdpc3Rlcl9lcnJvcmAsIHNlZSBzZWN0aW9uIDpyZWY6YGNvZGVjLWJhc2UtY2xhc3Nlc2AuIEZvciBhCkBAIC04ODYsMTIgKzEwNTAsMTIgQEAKIAogLi4gbWV0aG9kOjogc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpCiAKLSAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgKmZvcm1hdF9zdHJpbmcqIGFyZ3VtZW50IGNhbgotICAgY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzIGRlbGltaXRlZCBieSBicmFjZXMgYGB7fWBgLiAgRWFjaAotICAgcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyIHRoZSBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwKLSAgIG9yIHRoZSBuYW1lIG9mIGEga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mICpmb3JtYXRfc3RyaW5nKiB3aGVyZQotICAgZWFjaCByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcKLSAgIGFyZ3VtZW50LgorICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpcyBtZXRob2QgaXMKKyAgIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzIGRlbGltaXRlZCBieSBicmFjZXMKKyAgIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyIHRoZSBudW1lcmljIGluZGV4IG9mIGEKKyAgIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGEga2V5d29yZCBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mCisgICB0aGUgc3RyaW5nIHdoZXJlIGVhY2ggcmVwbGFjZW1lbnQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIHZhbHVlIG9mCisgICB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KIAogICAgICAgPj4+ICJUaGUgc3VtIG9mIDEgKyAyIGlzIHswfSIuZm9ybWF0KDErMikKICAgICAgICdUaGUgc3VtIG9mIDEgKyAyIGlzIDMnCkBAIC05MDAsNiArMTA2NCwyMiBAQAogICAgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLgogCiAKKy4uIG1ldGhvZDo6IHN0ci5mb3JtYXRfbWFwKG1hcHBpbmcpCisKKyAgIFNpbWlsYXIgdG8gYGBzdHIuZm9ybWF0KCoqbWFwcGluZylgYCwgZXhjZXB0IHRoYXQgYGBtYXBwaW5nYGAgaXMKKyAgIHVzZWQgZGlyZWN0bHkgYW5kIG5vdCBjb3BpZWQgdG8gYSA6Y2xhc3M6YGRpY3RgIC4gIFRoaXMgaXMgdXNlZnVsCisgICBpZiBmb3IgZXhhbXBsZSBgYG1hcHBpbmdgYCBpcyBhIGRpY3Qgc3ViY2xhc3M6CisKKyAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOgorICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgIC4uLiAgICAgICAgIHJldHVybiBrZXkKKyAgIC4uLgorICAgPj4+ICd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9Jy5mb3JtYXRfbWFwKERlZmF1bHQobmFtZT0nR3VpZG8nKSkKKyAgICdHdWlkbyB3YXMgYm9ybiBpbiBjb3VudHJ5JworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBtZXRob2Q6OiBzdHIuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKIAogICAgTGlrZSA6bWV0aDpgZmluZGAsIGJ1dCByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90IGZvdW5kLgpAQCAtMTI1Miw3ICsxNDMyLDcgQEAKIFRoaXMgaXMgYWxzbyBrbm93biBhcyB0aGUgc3RyaW5nICpmb3JtYXR0aW5nKiBvciAqaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuCiBHaXZlbiBgYGZvcm1hdCAlIHZhbHVlc2BgICh3aGVyZSAqZm9ybWF0KiBpcyBhIHN0cmluZyksIGBgJWBgIGNvbnZlcnNpb24KIHNwZWNpZmljYXRpb25zIGluICpmb3JtYXQqIGFyZSByZXBsYWNlZCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZiAqdmFsdWVzKi4KLVRoZSBlZmZlY3QgaXMgc2ltaWxhciB0byB0aGUgdXNpbmcgOmNmdW5jOmBzcHJpbnRmYCBpbiB0aGUgQyBsYW5ndWFnZS4KK1RoZSBlZmZlY3QgaXMgc2ltaWxhciB0byB0aGUgdXNpbmcgOmM6ZnVuYzpgc3ByaW50ZmAgaW4gdGhlIEMgbGFuZ3VhZ2UuCiAKIElmICpmb3JtYXQqIHJlcXVpcmVzIGEgc2luZ2xlIGFyZ3VtZW50LCAqdmFsdWVzKiBtYXkgYmUgYSBzaW5nbGUgbm9uLXR1cGxlCiBvYmplY3QuIFsjXV8gIE90aGVyd2lzZSwgKnZhbHVlcyogbXVzdCBiZSBhIHR1cGxlIHdpdGggZXhhY3RseSB0aGUgbnVtYmVyIG9mCkBAIC0xNDI1LDExICsxNjA1LDIzIEBACiBUaGUgOmNsYXNzOmByYW5nZWAgdHlwZSBpcyBhbiBpbW11dGFibGUgc2VxdWVuY2Ugd2hpY2ggaXMgY29tbW9ubHkgdXNlZCBmb3IKIGxvb3BpbmcuICBUaGUgYWR2YW50YWdlIG9mIHRoZSA6Y2xhc3M6YHJhbmdlYCB0eXBlIGlzIHRoYXQgYW4gOmNsYXNzOmByYW5nZWAKIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIGFtb3VudCBvZiBtZW1vcnksIG5vIG1hdHRlciB0aGUgc2l6ZSBvZiB0aGUKLXJhbmdlIGl0IHJlcHJlc2VudHMuICBUaGVyZSBhcmUgbm8gY29uc2lzdGVudCBwZXJmb3JtYW5jZSBhZHZhbnRhZ2VzLgorcmFuZ2UgaXQgcmVwcmVzZW50cy4KIAotUmFuZ2Ugb2JqZWN0cyBoYXZlIHZlcnkgbGl0dGxlIGJlaGF2aW9yOiB0aGV5IG9ubHkgc3VwcG9ydCBpbmRleGluZywgaXRlcmF0aW9uLAotYW5kIHRoZSA6ZnVuYzpgbGVuYCBmdW5jdGlvbi4KK1JhbmdlIG9iamVjdHMgaGF2ZSByZWxhdGl2ZWx5IGxpdHRsZSBiZWhhdmlvcjogdGhleSBzdXBwb3J0IGluZGV4aW5nLCBjb250YWlucywKK2l0ZXJhdGlvbiwgdGhlIDpmdW5jOmBsZW5gIGZ1bmN0aW9uLCBhbmQgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCisuLiBtZXRob2Q6OiByYW5nZS5jb3VudCh4KQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiAqaSoncyBmb3Igd2hpY2ggYGBzW2ldID09IHhgYC4KKworICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBtZXRob2Q6OiByYW5nZS5pbmRleCh4KQorCisgICBSZXR1cm4gdGhlIHNtYWxsZXN0ICppKiBzdWNoIHRoYXQgYGBzW2ldID09IHhgYC4gIFJhaXNlcworICAgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiAqeCogaXMgbm90IGluIHRoZSByYW5nZS4KKworICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAuLiBfdHlwZXNzZXEtbXV0YWJsZToKIApAQCAtMTU0Nyw2ICsxNzM5LDkgQEAKIAogICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0byBleHRyYWN0IGEgY29tcGFyaXNvbgogICAga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQ6IGBga2V5PXN0ci5sb3dlcmBgLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuCisgICBVc2UgOmZ1bmM6YGZ1bmN0b29scy5jbXBfdG9fa2V5YCB0byBjb252ZXJ0IGFuCisgICBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi4KKwogCiAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvIGBgVHJ1ZWBgLCB0aGVuIHRoZSBsaXN0IGVsZW1lbnRzIGFyZQogICAgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLgpAQCAtMTU5OCwxNyArMTc5MywyMCBAQAogICAgICAgYiA9IGEucmVwbGFjZShiImEiLCBiImYiKQogCiAKLS4uIG1ldGhvZDo6IGJ5dGVzLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSkKLSAgICAgICAgICAgIGJ5dGVhcnJheS5kZWNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pCisuLiBtZXRob2Q6OiBieXRlcy5kZWNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKQorICAgICAgICAgICAgYnl0ZWFycmF5LmRlY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpCiAKLSAgIFJldHVybiBhIHN0cmluZyBkZWNvZGVkIGZyb20gdGhlIGdpdmVuIGJ5dGVzLiAgRGVmYXVsdCBlbmNvZGluZyBpcyB0aGUKLSAgIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50CisgICBSZXR1cm4gYSBzdHJpbmcgZGVjb2RlZCBmcm9tIHRoZSBnaXZlbiBieXRlcy4gIERlZmF1bHQgZW5jb2RpbmcgaXMKKyAgIGBgJ3V0Zi04J2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50CiAgICBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGAnc3RyaWN0J2BgLCBtZWFuaW5nCiAgICB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhIDpleGM6YFVuaWNvZGVFcnJvcmAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlCiAgICBgYCdpZ25vcmUnYGAsIGBgJ3JlcGxhY2UnYGAgYW5kIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgdmlhCiAgICA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCwgc2VlIHNlY3Rpb24gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYC4gRm9yIGEKICAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQorICAgICAgQWRkZWQgc3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMuCisKIAogVGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZDoKIApAQCAtMTkyOSw4ICsyMTI3LDIwIEBACiAgICAgICByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlIGBgX19taXNzaW5nX18oa2V5KWBgIGNhbGwgaWYgdGhlIGtleSBpcyBub3QKICAgICAgIHByZXNlbnQuIE5vIG90aGVyIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2UgOm1ldGg6YF9fbWlzc2luZ19fYC4gSWYKICAgICAgIDptZXRoOmBfX21pc3NpbmdfX2AgaXMgbm90IGRlZmluZWQsIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQuCi0gICAgICA6bWV0aDpgX19taXNzaW5nX19gIG11c3QgYmUgYSBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZS4gRm9yCi0gICAgICBhbiBleGFtcGxlLCBzZWUgOmNsYXNzOmBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdGAuCisgICAgICA6bWV0aDpgX19taXNzaW5nX19gIG11c3QgYmUgYSBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZTo6CisKKyAgICAgICAgICA+Pj4gY2xhc3MgQ291bnRlcihkaWN0KToKKyAgICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgIC4uLiAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgPj4+IGMgPSBDb3VudGVyKCkKKyAgICAgICAgICA+Pj4gY1sncmVkJ10KKyAgICAgICAgICAwCisgICAgICAgICAgPj4+IGNbJ3JlZCddICs9IDEKKyAgICAgICAgICA+Pj4gY1sncmVkJ10KKyAgICAgICAgICAxCisKKyAgICAgIFNlZSA6Y2xhc3M6YGNvbGxlY3Rpb25zLkNvdW50ZXJgIGZvciBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGluY2x1ZGluZworICAgICAgb3RoZXIgbWV0aG9kcyBoZWxwZnVsIGZvciBhY2N1bXVsYXRpbmcgYW5kIG1hbmFnaW5nIHRhbGxpZXMuCiAKICAgIC4uIGRlc2NyaWJlOjogZFtrZXldID0gdmFsdWUKIApAQCAtMjA2Nyw3ICsyMjc3LDYgQEAKIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgOmNsYXNzOmBjb2xsZWN0aW9ucy5TZXRgIGFyZQogYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgYGA9PWBgLCBgYDxgYCwgb3IgYGBeYGApLgogCi0KIEFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOjoKIAogICAgPj4+IGRpc2hlcyA9IHsnZWdncyc6IDIsICdzYXVzYWdlJzogMSwgJ2JhY29uJzogMSwgJ3NwYW0nOiA1MDB9CkBAIC0yMTAyLDggKzIzMTEsOCBAQAogCiAuLiBfdHlwZW1lbW9yeXZpZXc6CiAKLW1lbW9yeXZpZXcgVHlwZXMKLT09PT09PT09PT09PT09PT0KK21lbW9yeXZpZXcgdHlwZQorPT09PT09PT09PT09PT09CiAKIDpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0cyBhbGxvdyBQeXRob24gY29kZSB0byBhY2Nlc3MgdGhlIGludGVybmFsIGRhdGEKIG9mIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZSA6cmVmOmBidWZmZXIgcHJvdG9jb2wgPGJ1ZmZlcm9iamVjdHM+YCB3aXRob3V0CkBAIC0yMTU5LDcgKzIzNjgsNyBAQAogCiAgICBOb3RpY2UgaG93IHRoZSBzaXplIG9mIHRoZSBtZW1vcnl2aWV3IG9iamVjdCBjYW5ub3QgYmUgY2hhbmdlZC4KIAotICAgOmNsYXNzOmBtZW1vcnl2aWV3YCBoYXMgdHdvIG1ldGhvZHM6CisgICA6Y2xhc3M6YG1lbW9yeXZpZXdgIGhhcyBzZXZlcmFsIG1ldGhvZHM6CiAKICAgIC4uIG1ldGhvZDo6IHRvYnl0ZXMoKQogCkBAIC0yMTc5LDYgKzIzODgsMzkgQEAKICAgICAgICAgID4+PiBtZW1vcnl2aWV3KGInYWJjJykudG9saXN0KCkKICAgICAgICAgIFs5NywgOTgsIDk5XQogCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSB0aGUgdW5kZXJseWluZyBidWZmZXIgZXhwb3NlZCBieSB0aGUgbWVtb3J5dmlldyBvYmplY3QuICBNYW55CisgICAgICBvYmplY3RzIHRha2Ugc3BlY2lhbCBhY3Rpb25zIHdoZW4gYSB2aWV3IGlzIGhlbGQgb24gdGhlbSAoZm9yIGV4YW1wbGUsCisgICAgICBhIDpjbGFzczpgYnl0ZWFycmF5YCB3b3VsZCB0ZW1wb3JhcmlseSBmb3JiaWQgcmVzaXppbmcpOyB0aGVyZWZvcmUsCisgICAgICBjYWxsaW5nIHJlbGVhc2UoKSBpcyBoYW5keSB0byByZW1vdmUgdGhlc2UgcmVzdHJpY3Rpb25zIChhbmQgZnJlZSBhbnkKKyAgICAgIGRhbmdsaW5nIHJlc291cmNlcykgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgICAgQWZ0ZXIgdGhpcyBtZXRob2QgaGFzIGJlZW4gY2FsbGVkLCBhbnkgZnVydGhlciBvcGVyYXRpb24gb24gdGhlIHZpZXcKKyAgICAgIHJhaXNlcyBhIDpjbGFzczpgVmFsdWVFcnJvcmAgKGV4Y2VwdCA6bWV0aDpgcmVsZWFzZSgpYCBpdHNlbGYgd2hpY2ggY2FuCisgICAgICBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMpOjoKKworICAgICAgICAgPj4+IG0gPSBtZW1vcnl2aWV3KGInYWJjJykKKyAgICAgICAgID4+PiBtLnJlbGVhc2UoKQorICAgICAgICAgPj4+IG1bMF0KKyAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgIFZhbHVlRXJyb3I6IG9wZXJhdGlvbiBmb3JiaWRkZW4gb24gcmVsZWFzZWQgbWVtb3J5dmlldyBvYmplY3QKKworICAgICAgVGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBjYW4gYmUgdXNlZCBmb3IgYSBzaW1pbGFyIGVmZmVjdCwKKyAgICAgIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQ6OgorCisgICAgICAgICA+Pj4gd2l0aCBtZW1vcnl2aWV3KGInYWJjJykgYXMgbToKKyAgICAgICAgIC4uLiAgICAgbVswXQorICAgICAgICAgLi4uCisgICAgICAgICBiJ2EnCisgICAgICAgICA+Pj4gbVswXQorICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICAgVmFsdWVFcnJvcjogb3BlcmF0aW9uIGZvcmJpZGRlbiBvbiByZWxlYXNlZCBtZW1vcnl2aWV3IG9iamVjdAorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogICAgVGhlcmUgYXJlIGFsc28gc2V2ZXJhbCByZWFkb25seSBhdHRyaWJ1dGVzIGF2YWlsYWJsZToKIAogICAgLi4gYXR0cmlidXRlOjogZm9ybWF0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdHJpbmcucnN0IGIvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdAppbmRleCBiMmQwYmJhLi5kNDVlYjM2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKQEAgLTExLDYgKzExLDEwIEBACiAKICAgIDpyZWY6YHN0cmluZy1tZXRob2RzYAogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9zdHJpbmcucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFN0cmluZyBjb25zdGFudHMKIC0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMzQwLDkgKzM0NCwxOCBAQAogICAgfCAgICAgICAgIHwgcG9zaXRpdmUgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgfAogICAgKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgYGAnIydgYCBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgaW50ZWdlcnMsIGFuZCBvbmx5IGZvciBiaW5hcnksIG9jdGFsLCBvcgotaGV4YWRlY2ltYWwgb3V0cHV0LiAgSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIHRoYXQgdGhlIG91dHB1dCB3aWxsIGJlIHByZWZpeGVkCi1ieSBgYCcwYidgYCwgYGAnMG8nYGAsIG9yIGBgJzB4J2BgLCByZXNwZWN0aXZlbHkuCisKK1RoZSBgYCcjJ2BgIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlCitjb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudAordHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmQKK0RlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXQKK2lzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlIGBgJzBiJ2BgLCBgYCcwbydgYCwgb3IKK2BgJzB4J2BgIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlCithbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhCitkZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYQorZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zCitvbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciBgYCdnJ2BgIGFuZCBgYCdHJ2BgCitjb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC4KIAogVGhlIGBgJywnYGAgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kcyBzZXBhcmF0b3IuCiBGb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlIGBgJ24nYGAgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZQpAQCAtNzA1LDYgKzcxOCwxNCBAQAogICBhcHByb3ByaWF0ZSkuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgcmVndWxhciBleHByZXNzaW9uCiAgIGBgW19hLXpdW19hLXowLTldKmBgLgogCisqICpmbGFncyogLS0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyB0aGF0IHdpbGwgYmUgYXBwbGllZCB3aGVuIGNvbXBpbGluZworICB0aGUgcmVndWxhciBleHByZXNzaW9uIHVzZWQgZm9yIHJlY29nbml6aW5nIHN1YnN0aXR1dGlvbnMuICBUaGUgZGVmYXVsdCB2YWx1ZQorICBpcyBgYHJlLklHTk9SRUNBU0VgYC4gIE5vdGUgdGhhdCBgYHJlLlZFUkJPU0VgYCB3aWxsIGFsd2F5cyBiZSBhZGRlZCB0byB0aGUKKyAgZmxhZ3MsIHNvIGN1c3RvbSAqaWRwYXR0ZXJuKlwgcyBtdXN0IGZvbGxvdyBjb252ZW50aW9ucyBmb3IgdmVyYm9zZSByZWd1bGFyCisgIGV4cHJlc3Npb25zLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHByb3ZpZGUgdGhlIGVudGlyZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBieQogb3ZlcnJpZGluZyB0aGUgY2xhc3MgYXR0cmlidXRlICpwYXR0ZXJuKi4gIElmIHlvdSBkbyB0aGlzLCB0aGUgdmFsdWUgbXVzdCBiZSBhCiByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IHdpdGggZm91ciBuYW1lZCBjYXB0dXJpbmcgZ3JvdXBzLiAgVGhlIGNhcHR1cmluZwpAQCAtNzI3LDcgKzc0OCw3IEBACiBIZWxwZXIgZnVuY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGZ1bmN0aW9uOjogY2Fwd29yZHMoc1ssIHNlcF0pCisuLiBmdW5jdGlvbjo6IGNhcHdvcmRzKHMsIHNlcD1Ob25lKQogCiAgICBTcGxpdCB0aGUgYXJndW1lbnQgaW50byB3b3JkcyB1c2luZyA6bWV0aDpgc3RyLnNwbGl0YCwgY2FwaXRhbGl6ZSBlYWNoIHdvcmQKICAgIHVzaW5nIDptZXRoOmBzdHIuY2FwaXRhbGl6ZWAsIGFuZCBqb2luIHRoZSBjYXBpdGFsaXplZCB3b3JkcyB1c2luZwpAQCAtNzM2LDEyICs3NTcsMyBAQAogICAgYW5kIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJlIHJlbW92ZWQsIG90aGVyd2lzZSAqc2VwKiBpcyB1c2VkIHRvCiAgICBzcGxpdCBhbmQgam9pbiB0aGUgd29yZHMuCiAKLQotLi4gZnVuY3Rpb246OiBtYWtldHJhbnMoZnJtLCB0bykKLQotICAgUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgc3VpdGFibGUgZm9yIHBhc3NpbmcgdG8gOm1ldGg6YGJ5dGVzLnRyYW5zbGF0ZWAsCi0gICB0aGF0IHdpbGwgbWFwIGVhY2ggY2hhcmFjdGVyIGluICpmcm9tKiBpbnRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUKLSAgIHBvc2l0aW9uIGluICp0byo7ICpmcm9tKiBhbmQgKnRvKiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgotCi0gICAuLiBkZXByZWNhdGVkOjogMy4xCi0gICAgICBVc2UgdGhlIDptZXRoOmBieXRlcy5tYWtldHJhbnNgIHN0YXRpYyBtZXRob2QgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CmluZGV4IDE4MzRjZmQuLjQyYmZjMTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdApAQCAtMjEsOCArMjEsOCBAQAogICAgYWxpZ25tZW50IGlzIHRha2VuIGludG8gYWNjb3VudCB3aGVuIHVucGFja2luZy4gIFRoaXMgYmVoYXZpb3IgaXMgY2hvc2VuIHNvCiAgICB0aGF0IHRoZSBieXRlcyBvZiBhIHBhY2tlZCBzdHJ1Y3QgY29ycmVzcG9uZCBleGFjdGx5IHRvIHRoZSBsYXlvdXQgaW4gbWVtb3J5CiAgICBvZiB0aGUgY29ycmVzcG9uZGluZyBDIHN0cnVjdC4gIFRvIGhhbmRsZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBkYXRhIGZvcm1hdHMKLSAgIG9yIG9taXQgaW1wbGljaXQgcGFkIGJ5dGVzLCB1c2UgYHN0YW5kYXJkYCBzaXplIGFuZCBhbGlnbm1lbnQgaW5zdGVhZCBvZgotICAgYG5hdGl2ZWAgc2l6ZSBhbmQgYWxpZ25tZW50OiBzZWUgOnJlZjpgc3RydWN0LWFsaWdubWVudGAgZm9yIGRldGFpbHMuCisgICBvciBvbWl0IGltcGxpY2l0IHBhZCBieXRlcywgdXNlIGBgc3RhbmRhcmRgYCBzaXplIGFuZCBhbGlnbm1lbnQgaW5zdGVhZCBvZgorICAgYGBuYXRpdmVgYCBzaXplIGFuZCBhbGlnbm1lbnQ6IHNlZSA6cmVmOmBzdHJ1Y3QtYWxpZ25tZW50YCBmb3IgZGV0YWlscy4KIAogRnVuY3Rpb25zIGFuZCBFeGNlcHRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1Nyw2MyArMTU3LDY2IEBACiBgYCc9J2BgLiAgV2hlbiB1c2luZyBuYXRpdmUgc2l6ZSwgdGhlIHNpemUgb2YgdGhlIHBhY2tlZCB2YWx1ZSBpcwogcGxhdGZvcm0tZGVwZW5kZW50LgogCi0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgRm9ybWF0IHwgQyBUeXBlICAgICAgICAgICAgICAgICAgfCBQeXRob24gdHlwZSAgICAgICAgfCBTdGFuZGFyZCBzaXplICB8IE5vdGVzICAgICAgfAotKz09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rCi18IGBgeGBgICB8IHBhZCBieXRlICAgICAgICAgICAgICAgIHwgbm8gdmFsdWUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGNgYCAgfCA6Y3R5cGU6YGNoYXJgICAgICAgICAgICB8IGJ5dGVzIG9mIGxlbmd0aCAxICB8IDEgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBiYGAgIHwgOmN0eXBlOmBzaWduZWQgY2hhcmAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAxICAgICAgICAgICAgICB8IFwoMSkgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgQmBgICB8IDpjdHlwZTpgdW5zaWduZWQgY2hhcmAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYD9gYCAgfCA6Y3R5cGU6YF9Cb29sYCAgICAgICAgICB8IGJvb2wgICAgICAgICAgICAgICB8IDEgICAgICAgICAgICAgIHwgXCgyKSAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBoYGAgIHwgOmN0eXBlOmBzaG9ydGAgICAgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCAyICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgSGBgICB8IDpjdHlwZTpgdW5zaWduZWQgc2hvcnRgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGlgYCAgfCA6Y3R5cGU6YGludGAgICAgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBJYGAgIHwgOmN0eXBlOmB1bnNpZ25lZCBpbnRgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgbGBgICB8IDpjdHlwZTpgbG9uZ2AgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYExgYCAgfCA6Y3R5cGU6YHVuc2lnbmVkIGxvbmdgICB8IGludGVnZXIgICAgICAgICAgICB8IDQgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBxYGAgIHwgOmN0eXBlOmBsb25nIGxvbmdgICAgICAgfCBpbnRlZ2VyICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICB8IFwoMykgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgUWBgICB8IDpjdHlwZTpgdW5zaWduZWQgbG9uZyAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKLXwgICAgICAgIHwgbG9uZ2AgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgZmBgICB8IDpjdHlwZTpgZmxvYXRgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDQpICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYGRgYCAgfCA6Y3R5cGU6YGRvdWJsZWAgICAgICAgICB8IGZsb2F0ICAgICAgICAgICAgICB8IDggICAgICAgICAgICAgIHwgXCg0KSAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKLXwgYGBzYGAgIHwgOmN0eXBlOmBjaGFyW11gICAgICAgICAgfCBieXRlcyAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8IFwoMSkgICAgICAgfAotKy0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCi18IGBgcGBgICB8IDpjdHlwZTpgY2hhcltdYCAgICAgICAgIHwgYnl0ZXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCBcKDEpICAgICAgIHwKLSstLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotfCBgYFBgYCAgfCA6Y3R5cGU6YHZvaWQgXCpgICAgICAgICB8IGludGVnZXIgICAgICAgICAgICB8ICAgICAgICAgICAgICAgIHwgXCg1KSAgICAgICB8Ci0rLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgRm9ybWF0IHwgQyBUeXBlICAgICAgICAgICAgICAgICAgIHwgUHl0aG9uIHR5cGUgICAgICAgIHwgU3RhbmRhcmQgc2l6ZSAgfCBOb3RlcyAgICAgIHwKKys9PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09Kz09PT09PT09PT09PSsKK3wgYGB4YGAgIHwgcGFkIGJ5dGUgICAgICAgICAgICAgICAgIHwgbm8gdmFsdWUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBjYGAgIHwgOmM6dHlwZTpgY2hhcmAgICAgICAgICAgIHwgYnl0ZXMgb2YgbGVuZ3RoIDEgIHwgMSAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBiYGAgIHwgOmM6dHlwZTpgc2lnbmVkIGNoYXJgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCBcKDEpLFwoMykgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBCYGAgIHwgOmM6dHlwZTpgdW5zaWduZWQgY2hhcmAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGA/YGAgIHwgOmM6dHlwZTpgX0Jvb2xgICAgICAgICAgIHwgYm9vbCAgICAgICAgICAgICAgIHwgMSAgICAgICAgICAgICAgfCBcKDEpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBoYGAgIHwgOmM6dHlwZTpgc2hvcnRgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBIYGAgIHwgOmM6dHlwZTpgdW5zaWduZWQgc2hvcnRgIHwgaW50ZWdlciAgICAgICAgICAgIHwgMiAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBpYGAgIHwgOmM6dHlwZTpgaW50YCAgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBJYGAgIHwgOmM6dHlwZTpgdW5zaWduZWQgaW50YCAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBsYGAgIHwgOmM6dHlwZTpgbG9uZ2AgICAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBMYGAgIHwgOmM6dHlwZTpgdW5zaWduZWQgbG9uZ2AgIHwgaW50ZWdlciAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDMpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBxYGAgIHwgOmM6dHlwZTpgbG9uZyBsb25nYCAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpLCBcKDMpIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBRYGAgIHwgOmM6dHlwZTpgdW5zaWduZWQgbG9uZyAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDIpLCBcKDMpIHwKK3wgICAgICAgIHwgbG9uZ2AgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBmYGAgIHwgOmM6dHlwZTpgZmxvYXRgICAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgIHwgNCAgICAgICAgICAgICAgfCBcKDQpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBkYGAgIHwgOmM6dHlwZTpgZG91YmxlYCAgICAgICAgIHwgZmxvYXQgICAgICAgICAgICAgIHwgOCAgICAgICAgICAgICAgfCBcKDQpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBzYGAgIHwgOmM6dHlwZTpgY2hhcltdYCAgICAgICAgIHwgYnl0ZXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBwYGAgIHwgOmM6dHlwZTpgY2hhcltdYCAgICAgICAgIHwgYnl0ZXMgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKK3wgYGBQYGAgIHwgOmM6dHlwZTpgdm9pZCBcKmAgICAgICAgIHwgaW50ZWdlciAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCBcKDUpICAgICAgIHwKKystLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogTm90ZXM6CiAKICgxKQotICAgVGhlIGBgY2BgLCBgYHNgYCBhbmQgYGBwYGAgY29udmVyc2lvbiBjb2RlcyBvcGVyYXRlIG9uIDpjbGFzczpgYnl0ZXNgCi0gICBvYmplY3RzLCBidXQgcGFja2luZyB3aXRoIHN1Y2ggY29kZXMgYWxzbyBzdXBwb3J0cyA6Y2xhc3M6YHN0cmAgb2JqZWN0cywKLSAgIHdoaWNoIGFyZSBlbmNvZGVkIHVzaW5nIFVURi04LgotCi0oMikKLSAgIFRoZSBgYCc/J2BgIGNvbnZlcnNpb24gY29kZSBjb3JyZXNwb25kcyB0byB0aGUgOmN0eXBlOmBfQm9vbGAgdHlwZSBkZWZpbmVkIGJ5Ci0gICBDOTkuIElmIHRoaXMgdHlwZSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzaW11bGF0ZWQgdXNpbmcgYSA6Y3R5cGU6YGNoYXJgLiBJbgorICAgVGhlIGBgJz8nYGAgY29udmVyc2lvbiBjb2RlIGNvcnJlc3BvbmRzIHRvIHRoZSA6Yzp0eXBlOmBfQm9vbGAgdHlwZSBkZWZpbmVkIGJ5CisgICBDOTkuIElmIHRoaXMgdHlwZSBpcyBub3QgYXZhaWxhYmxlLCBpdCBpcyBzaW11bGF0ZWQgdXNpbmcgYSA6Yzp0eXBlOmBjaGFyYC4gSW4KICAgIHN0YW5kYXJkIG1vZGUsIGl0IGlzIGFsd2F5cyByZXByZXNlbnRlZCBieSBvbmUgYnl0ZS4KIAotKDMpCisoMikKICAgIFRoZSBgYCdxJ2BgIGFuZCBgYCdRJ2BgIGNvbnZlcnNpb24gY29kZXMgYXJlIGF2YWlsYWJsZSBpbiBuYXRpdmUgbW9kZSBvbmx5IGlmCi0gICB0aGUgcGxhdGZvcm0gQyBjb21waWxlciBzdXBwb3J0cyBDIDpjdHlwZTpgbG9uZyBsb25nYCwgb3IsIG9uIFdpbmRvd3MsCi0gICA6Y3R5cGU6YF9faW50NjRgLiAgVGhleSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBpbiBzdGFuZGFyZCBtb2Rlcy4KKyAgIHRoZSBwbGF0Zm9ybSBDIGNvbXBpbGVyIHN1cHBvcnRzIEMgOmM6dHlwZTpgbG9uZyBsb25nYCwgb3IsIG9uIFdpbmRvd3MsCisgICA6Yzp0eXBlOmBfX2ludDY0YC4gIFRoZXkgYXJlIGFsd2F5cyBhdmFpbGFibGUgaW4gc3RhbmRhcmQgbW9kZXMuCisKKygzKQorICAgV2hlbiBhdHRlbXB0aW5nIHRvIHBhY2sgYSBub24taW50ZWdlciB1c2luZyBhbnkgb2YgdGhlIGludGVnZXIgY29udmVyc2lvbgorICAgY29kZXMsIGlmIHRoZSBub24taW50ZWdlciBoYXMgYSA6bWV0aDpgX19pbmRleF9fYCBtZXRob2QgdGhlbiB0aGF0IG1ldGhvZCBpcworICAgY2FsbGVkIHRvIGNvbnZlcnQgdGhlIGFyZ3VtZW50IHRvIGFuIGludGVnZXIgYmVmb3JlIHBhY2tpbmcuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBVc2Ugb2YgdGhlIDptZXRoOmBfX2luZGV4X19gIG1ldGhvZCBmb3Igbm9uLWludGVnZXJzIGlzIG5ldyBpbiAzLjIuCiAKICg0KQogICAgRm9yIHRoZSBgYCdmJ2BgIGFuZCBgYCdkJ2BgIGNvbnZlcnNpb24gY29kZXMsIHRoZSBwYWNrZWQgcmVwcmVzZW50YXRpb24gdXNlcwpAQCAtMzAyLDkgKzMwNSw5IEBACiBUaGUgb3JkZXJpbmcgb2YgZm9ybWF0IGNoYXJhY3RlcnMgbWF5IGhhdmUgYW4gaW1wYWN0IG9uIHNpemUgc2luY2UgdGhlIHBhZGRpbmcKIG5lZWRlZCB0byBzYXRpc2Z5IGFsaWdubWVudCByZXF1aXJlbWVudHMgaXMgZGlmZmVyZW50OjoKIAotICAgID4+PiBwYWNrKCdjaScsICcqJywgMHgxMjEzMTQxNSkKKyAgICA+Pj4gcGFjaygnY2knLCBiJyonLCAweDEyMTMxNDE1KQogICAgIGInKlx4MDBceDAwXHgwMFx4MTJceDEzXHgxNFx4MTUnCi0gICAgPj4+IHBhY2soJ2ljJywgMHgxMjEzMTQxNSwgJyonKQorICAgID4+PiBwYWNrKCdpYycsIDB4MTIxMzE0MTUsIGInKicpCiAgICAgYidceDEyXHgxM1x4MTRceDE1KicKICAgICA+Pj4gY2FsY3NpemUoJ2NpJykKICAgICA4CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdCBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CmluZGV4IDkzMmNhOGIuLmUwOTk5NGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N1YnByb2Nlc3MucnN0CkBAIC0yOCw3ICsyOCw3IEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIG9uZSBjbGFzcyBjYWxsZWQgOmNsYXNzOmBQb3BlbmA6CiAKIAotLi4gY2xhc3M6OiBQb3BlbihhcmdzLCBidWZzaXplPTAsIGV4ZWN1dGFibGU9Tm9uZSwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLCBwcmVleGVjX2ZuPU5vbmUsIGNsb3NlX2Zkcz1GYWxzZSwgc2hlbGw9RmFsc2UsIGN3ZD1Ob25lLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCBzdGFydHVwaW5mbz1Ob25lLCBjcmVhdGlvbmZsYWdzPTApCisuLiBjbGFzczo6IFBvcGVuKGFyZ3MsIGJ1ZnNpemU9MCwgZXhlY3V0YWJsZT1Ob25lLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIHByZWV4ZWNfZm49Tm9uZSwgY2xvc2VfZmRzPVRydWUsIHNoZWxsPUZhbHNlLCBjd2Q9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc3RhcnR1cGluZm89Tm9uZSwgY3JlYXRpb25mbGFncz0wLCByZXN0b3JlX3NpZ25hbHM9VHJ1ZSwgc3RhcnRfbmV3X3Nlc3Npb249RmFsc2UsIHBhc3NfZmRzPSgpKQogCiAgICBBcmd1bWVudHMgYXJlOgogCkBAIC00MSw3ICs0MSw4IEBACiAgICBuYW1lIGZvciB0aGUgZXhlY3V0aW5nIHByb2dyYW0gaW4gdXRpbGl0aWVzIHN1Y2ggYXMgOnByb2dyYW06YHBzYC4KIAogICAgT24gVW5peCwgd2l0aCAqc2hlbGw9RmFsc2UqIChkZWZhdWx0KTogSW4gdGhpcyBjYXNlLCB0aGUgUG9wZW4gY2xhc3MgdXNlcwotICAgOm1ldGg6YG9zLmV4ZWN2cGAgdG8gZXhlY3V0ZSB0aGUgY2hpbGQgcHJvZ3JhbS4gKmFyZ3MqIHNob3VsZCBub3JtYWxseSBiZSBhCisgICA6bWV0aDpgb3MuZXhlY3ZwYCBsaWtlIGJlaGF2aW9yIHRvIGV4ZWN1dGUgdGhlIGNoaWxkIHByb2dyYW0uCisgICAqYXJncyogc2hvdWxkIG5vcm1hbGx5IGJlIGEKICAgIHNlcXVlbmNlLiAgSWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkIGZvciAqYXJncyosIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZQogICAgb3IgcGF0aCBvZiB0aGUgcHJvZ3JhbSB0byBleGVjdXRlOyB0aGlzIHdpbGwgb25seSB3b3JrIGlmIHRoZSBwcm9ncmFtIGlzCiAgICBiZWluZyBnaXZlbiBubyBhcmd1bWVudHMuCkBAIC0xMzAsMjUgKzEzMSw2NSBAQAogICAgYXBwbGljYXRpb25zIHNob3VsZCBiZSBjYXB0dXJlZCBpbnRvIHRoZSBzYW1lIGZpbGUgaGFuZGxlIGFzIGZvciBzdGRvdXQuCiAKICAgIElmICpwcmVleGVjX2ZuKiBpcyBzZXQgdG8gYSBjYWxsYWJsZSBvYmplY3QsIHRoaXMgb2JqZWN0IHdpbGwgYmUgY2FsbGVkIGluIHRoZQotICAgY2hpbGQgcHJvY2VzcyBqdXN0IGJlZm9yZSB0aGUgY2hpbGQgaXMgZXhlY3V0ZWQuIChVbml4IG9ubHkpCisgICBjaGlsZCBwcm9jZXNzIGp1c3QgYmVmb3JlIHRoZSBjaGlsZCBpcyBleGVjdXRlZC4KKyAgIChVbml4IG9ubHkpCisKKyAgIC4uIHdhcm5pbmc6OgorCisgICAgICBUaGUgKnByZWV4ZWNfZm4qIHBhcmFtZXRlciBpcyBub3Qgc2FmZSB0byB1c2UgaW4gdGhlIHByZXNlbmNlIG9mIHRocmVhZHMKKyAgICAgIGluIHlvdXIgYXBwbGljYXRpb24uICBUaGUgY2hpbGQgcHJvY2VzcyBjb3VsZCBkZWFkbG9jayBiZWZvcmUgZXhlYyBpcworICAgICAgY2FsbGVkLgorICAgICAgSWYgeW91IG11c3QgdXNlIGl0LCBrZWVwIGl0IHRyaXZpYWwhICBNaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGxpYnJhcmllcworICAgICAgeW91IGNhbGwgaW50by4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIElmIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSBjaGlsZCB1c2UgdGhlICplbnYqCisgICAgICBwYXJhbWV0ZXIgcmF0aGVyIHRoYW4gZG9pbmcgaXQgaW4gYSAqcHJlZXhlY19mbiouCisgICAgICBUaGUgKnN0YXJ0X25ld19zZXNzaW9uKiBwYXJhbWV0ZXIgY2FuIHRha2UgdGhlIHBsYWNlIG9mIGEgcHJldmlvdXNseQorICAgICAgY29tbW9uIHVzZSBvZiAqcHJlZXhlY19mbiogdG8gY2FsbCBvcy5zZXRzaWQoKSBpbiB0aGUgY2hpbGQuCiAKICAgIElmICpjbG9zZV9mZHMqIGlzIHRydWUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCA6Y29uc3Q6YDBgLCA6Y29uc3Q6YDFgIGFuZAogICAgOmNvbnN0OmAyYCB3aWxsIGJlIGNsb3NlZCBiZWZvcmUgdGhlIGNoaWxkIHByb2Nlc3MgaXMgZXhlY3V0ZWQuIChVbml4IG9ubHkpLgotICAgT3IsIG9uIFdpbmRvd3MsIGlmICpjbG9zZV9mZHMqIGlzIHRydWUgdGhlbiBubyBoYW5kbGVzIHdpbGwgYmUgaW5oZXJpdGVkIGJ5IHRoZQorICAgVGhlIGRlZmF1bHQgdmFyaWVzIGJ5IHBsYXRmb3JtOiAgQWx3YXlzIHRydWUgb24gVW5peC4gIE9uIFdpbmRvd3MgaXQgaXMKKyAgIHRydWUgd2hlbiAqc3RkaW4qLypzdGRvdXQqLypzdGRlcnIqIGFyZSA6Y29uc3Q6YE5vbmVgLCBmYWxzZSBvdGhlcndpc2UuCisgICBPbiBXaW5kb3dzLCBpZiAqY2xvc2VfZmRzKiBpcyB0cnVlIHRoZW4gbm8gaGFuZGxlcyB3aWxsIGJlIGluaGVyaXRlZCBieSB0aGUKICAgIGNoaWxkIHByb2Nlc3MuICBOb3RlIHRoYXQgb24gV2luZG93cywgeW91IGNhbm5vdCBzZXQgKmNsb3NlX2ZkcyogdG8gdHJ1ZSBhbmQKICAgIGFsc28gcmVkaXJlY3QgdGhlIHN0YW5kYXJkIGhhbmRsZXMgYnkgc2V0dGluZyAqc3RkaW4qLCAqc3Rkb3V0KiBvciAqc3RkZXJyKi4KIAotICAgSWYgKnNoZWxsKiBpcyA6Y29uc3Q6YFRydWVgLCB0aGUgc3BlY2lmaWVkIGNvbW1hbmQgd2lsbCBiZSBleGVjdXRlZCB0aHJvdWdoIHRoZQotICAgc2hlbGwuCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGRlZmF1bHQgZm9yICpjbG9zZV9mZHMqIHdhcyBjaGFuZ2VkIGZyb20gOmNvbnN0OmBGYWxzZWAgdG8KKyAgICAgIHdoYXQgaXMgZGVzY3JpYmVkIGFib3ZlLgorCisgICAqcGFzc19mZHMqIGlzIGFuIG9wdGlvbmFsIHNlcXVlbmNlIG9mIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2VlcCBvcGVuCisgICBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIGNoaWxkLiAgUHJvdmlkaW5nIGFueSAqcGFzc19mZHMqIGZvcmNlcworICAgKmNsb3NlX2ZkcyogdG8gYmUgOmNvbnN0OmBUcnVlYC4gIChVbml4IG9ubHkpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgVGhlICpwYXNzX2ZkcyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KIAogICAgSWYgKmN3ZCogaXMgbm90IGBgTm9uZWBgLCB0aGUgY2hpbGQncyBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQgdG8gKmN3ZCoKICAgIGJlZm9yZSBpdCBpcyBleGVjdXRlZC4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBpcyBub3QgY29uc2lkZXJlZCB3aGVuCiAgICBzZWFyY2hpbmcgdGhlIGV4ZWN1dGFibGUsIHNvIHlvdSBjYW4ndCBzcGVjaWZ5IHRoZSBwcm9ncmFtJ3MgcGF0aCByZWxhdGl2ZSB0bwogICAgKmN3ZCouCiAKKyAgIElmICpyZXN0b3JlX3NpZ25hbHMqIGlzIFRydWUgKHRoZSBkZWZhdWx0KSBhbGwgc2lnbmFscyB0aGF0IFB5dGhvbiBoYXMgc2V0IHRvCisgICBTSUdfSUdOIGFyZSByZXN0b3JlZCB0byBTSUdfREZMIGluIHRoZSBjaGlsZCBwcm9jZXNzIGJlZm9yZSB0aGUgZXhlYy4KKyAgIEN1cnJlbnRseSB0aGlzIGluY2x1ZGVzIHRoZSBTSUdQSVBFLCBTSUdYRlogYW5kIFNJR1hGU1ogc2lnbmFscy4KKyAgIChVbml4IG9ubHkpCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAqcmVzdG9yZV9zaWduYWxzKiB3YXMgYWRkZWQuCisKKyAgIElmICpzdGFydF9uZXdfc2Vzc2lvbiogaXMgVHJ1ZSB0aGUgc2V0c2lkKCkgc3lzdGVtIGNhbGwgd2lsbCBiZSBtYWRlIGluIHRoZQorICAgY2hpbGQgcHJvY2VzcyBwcmlvciB0byB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJwcm9jZXNzLiAgKFVuaXggb25seSkKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICpzdGFydF9uZXdfc2Vzc2lvbiogd2FzIGFkZGVkLgorCiAgICBJZiAqZW52KiBpcyBub3QgYGBOb25lYGAsIGl0IG11c3QgYmUgYSBtYXBwaW5nIHRoYXQgZGVmaW5lcyB0aGUgZW52aXJvbm1lbnQKLSAgIHZhcmlhYmxlcyBmb3IgdGhlIG5ldyBwcm9jZXNzOyB0aGVzZSBhcmUgdXNlZCBpbnN0ZWFkIG9mIGluaGVyaXRpbmcgdGhlIGN1cnJlbnQKLSAgIHByb2Nlc3MnIGVudmlyb25tZW50LCB3aGljaCBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKyAgIHZhcmlhYmxlcyBmb3IgdGhlIG5ldyBwcm9jZXNzOyB0aGVzZSBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0CisgICBiZWhhdmlvciBvZiBpbmhlcml0aW5nIHRoZSBjdXJyZW50IHByb2Nlc3MnIGVudmlyb25tZW50LgogCiAgICAuLiBub3RlOjoKIApAQCAtMTczLDcgKzIxNCwxOCBAQAogCiAgICBJZiBnaXZlbiwgKnN0YXJ0dXBpbmZvKiB3aWxsIGJlIGEgOmNsYXNzOmBTVEFSVFVQSU5GT2Agb2JqZWN0LCB3aGljaCBpcwogICAgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIGBgQ3JlYXRlUHJvY2Vzc2BgIGZ1bmN0aW9uLgotICAgKmNyZWF0aW9uZmxhZ3MqLCBpZiBnaXZlbiwgY2FuIGJlIDpkYXRhOmBDUkVBVEVfTkVXX0NPTlNPTEVgLiAoV2luZG93cyBvbmx5KQorICAgKmNyZWF0aW9uZmxhZ3MqLCBpZiBnaXZlbiwgY2FuIGJlIDpkYXRhOmBDUkVBVEVfTkVXX0NPTlNPTEVgIG9yCisgICA6ZGF0YTpgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQYC4gKFdpbmRvd3Mgb25seSkKKworICAgUG9wZW4gb2JqZWN0cyBhcmUgc3VwcG9ydGVkIGFzIGNvbnRleHQgbWFuYWdlcnMgdmlhIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LAorICAgY2xvc2luZyBhbnkgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIG9uIGV4aXQuCisgICA6OgorCisgICAgICB3aXRoIFBvcGVuKFsiaWZjb25maWciXSwgc3Rkb3V0PVBJUEUpIGFzIHByb2M6CisgICAgICAgICAgbG9nLndyaXRlKHByb2Muc3Rkb3V0LnJlYWQoKSkKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIEFkZGVkIGNvbnRleHQgbWFuYWdlciBzdXBwb3J0LgogCiAKIC4uIGRhdGE6OiBQSVBFCkBAIC0yMDEsMTUgKzI1MywxNiBAQAogICAgUnVuIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMuICBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlLCB0aGVuIHJldHVybiB0aGUKICAgIDphdHRyOmByZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCiAKLSAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgUG9wZW4gY29uc3RydWN0b3IuICBFeGFtcGxlOjoKKyAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IuICBFeGFtcGxlOjoKIAogICAgICAgPj4+IHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWyJscyIsICItbCJdKQogCiAgICAuLiB3YXJuaW5nOjoKIAotICAgICAgTGlrZSA6bWV0aDpgUG9wZW4ud2FpdGAsIHRoaXMgd2lsbCBkZWFkbG9jayBpZiB0aGUgY2hpbGQgcHJvY2VzcwotICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBzdGRvdXQgb3Igc3RkZXJyIHBpcGUgc3VjaCB0aGF0IGl0IGJsb2NrcwotICAgICAgd2FpdGluZyBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyIHRvIGFjY2VwdCBtb3JlIGRhdGEuCisgICAgICBMaWtlIDptZXRoOmBQb3Blbi53YWl0YCwgdGhpcyB3aWxsIGRlYWRsb2NrIHdoZW4gdXNpbmcKKyAgICAgIGBgc3Rkb3V0PVBJUEVgYCBhbmQvb3IgYGBzdGRlcnI9UElQRWBgIGFuZCB0aGUgY2hpbGQgcHJvY2VzcworICAgICAgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBwaXBlIHN1Y2ggdGhhdCBpdCBibG9ja3Mgd2FpdGluZworICAgICAgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0byBhY2NlcHQgbW9yZSBkYXRhLgogCiAKIC4uIGZ1bmN0aW9uOjogY2hlY2tfY2FsbCgqcG9wZW5hcmdzLCAqKmt3YXJncykKQEAgLTIxOSw3ICsyNzIsNyBAQAogICAgOmV4YzpgQ2FsbGVkUHJvY2Vzc0Vycm9yYCBvYmplY3Qgd2lsbCBoYXZlIHRoZSByZXR1cm4gY29kZSBpbiB0aGUKICAgIDphdHRyOmByZXR1cm5jb2RlYCBhdHRyaWJ1dGUuCiAKLSAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgUG9wZW4gY29uc3RydWN0b3IuICBFeGFtcGxlOjoKKyAgIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IuICBFeGFtcGxlOjoKIAogICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbImxzIiwgIi1sIl0pCiAgICAgICAwCkBAIC0yNjIsNyArMzE1LDcgQEAKICAgIGBgKHN0YXR1cywgb3V0cHV0KWBgLiAgKmNtZCogaXMgYWN0dWFsbHkgcnVuIGFzIGBgeyBjbWQgOyB9IDI+JjFgYCwgc28gdGhhdCB0aGUKICAgIHJldHVybmVkIG91dHB1dCB3aWxsIGNvbnRhaW4gb3V0cHV0IG9yIGVycm9yIG1lc3NhZ2VzLiAgQSB0cmFpbGluZyBuZXdsaW5lIGlzCiAgICBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZAotICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIEMgZnVuY3Rpb24gOmNmdW5jOmB3YWl0YC4gIEV4YW1wbGU6OgorICAgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBmb3IgdGhlIEMgZnVuY3Rpb24gOmM6ZnVuYzpgd2FpdGAuICBFeGFtcGxlOjoKIAogICAgICAgPj4+IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdscyAvYmluL2xzJykKICAgICAgICgwLCAnL2Jpbi9scycpCkBAIC0zMzMsOSArMzg2LDEwIEBACiAKICAgIC4uIHdhcm5pbmc6OgogCi0gICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYQotICAgICAgc3Rkb3V0IG9yIHN0ZGVyciBwaXBlIHN1Y2ggdGhhdCBpdCBibG9ja3Mgd2FpdGluZyBmb3IgdGhlIE9TIHBpcGUgYnVmZmVyCi0gICAgICB0byBhY2NlcHQgbW9yZSBkYXRhLiAgVXNlIDptZXRoOmBjb21tdW5pY2F0ZWAgdG8gYXZvaWQgdGhhdC4KKyAgICAgIFRoaXMgd2lsbCBkZWFkbG9jayB3aGVuIHVzaW5nIGBgc3Rkb3V0PVBJUEVgYCBhbmQvb3IKKyAgICAgIGBgc3RkZXJyPVBJUEVgYCBhbmQgdGhlIGNoaWxkIHByb2Nlc3MgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8KKyAgICAgIGEgcGlwZSBzdWNoIHRoYXQgaXQgYmxvY2tzIHdhaXRpbmcgZm9yIHRoZSBPUyBwaXBlIGJ1ZmZlciB0bworICAgICAgYWNjZXB0IG1vcmUgZGF0YS4gIFVzZSA6bWV0aDpgY29tbXVuaWNhdGVgIHRvIGF2b2lkIHRoYXQuCiAKIAogLi4gbWV0aG9kOjogUG9wZW4uY29tbXVuaWNhdGUoaW5wdXQ9Tm9uZSkKQEAgLTM2NCwxNCArNDE4LDE1IEBACiAKICAgIC4uIG5vdGU6OgogCi0gICAgICBPbiBXaW5kb3dzIG9ubHkgU0lHVEVSTSBpcyBzdXBwb3J0ZWQgc28gZmFyLiBJdCdzIGFuIGFsaWFzIGZvcgotICAgICAgOm1ldGg6YHRlcm1pbmF0ZWAuCisgICAgICBPbiBXaW5kb3dzLCBTSUdURVJNIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4gQ1RSTF9DX0VWRU5UIGFuZAorICAgICAgQ1RSTF9CUkVBS19FVkVOVCBjYW4gYmUgc2VudCB0byBwcm9jZXNzZXMgc3RhcnRlZCB3aXRoIGEgKmNyZWF0aW9uZmxhZ3MqCisgICAgICBwYXJhbWV0ZXIgd2hpY2ggaW5jbHVkZXMgYENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUGAuCiAKIAogLi4gbWV0aG9kOjogUG9wZW4udGVybWluYXRlKCkKIAogICAgU3RvcCB0aGUgY2hpbGQuIE9uIFBvc2l4IE9TcyB0aGUgbWV0aG9kIHNlbmRzIFNJR1RFUk0gdG8gdGhlCi0gICBjaGlsZC4gT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIDpjZnVuYzpgVGVybWluYXRlUHJvY2Vzc2AgaXMgY2FsbGVkCisgICBjaGlsZC4gT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIDpjOmZ1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgIGlzIGNhbGxlZAogICAgdG8gc3RvcCB0aGUgY2hpbGQuCiAKIApAQCAtNTIyLDYgKzU3NywxNCBAQAogCiAgICBUaGlzIGZsYWcgaXMgYWx3YXlzIHNldCB3aGVuIDpjbGFzczpgUG9wZW5gIGlzIGNyZWF0ZWQgd2l0aCBgYHNoZWxsPVRydWVgYC4KIAorLi4gZGF0YTo6IENSRUFURV9ORVdfUFJPQ0VTU19HUk9VUAorCisgICBBIDpjbGFzczpgUG9wZW5gIGBgY3JlYXRpb25mbGFnc2BgIHBhcmFtZXRlciB0byBzcGVjaWZ5IHRoYXQgYSBuZXcgcHJvY2VzcworICAgZ3JvdXAgd2lsbCBiZSBjcmVhdGVkLiBUaGlzIGZsYWcgaXMgbmVjZXNzYXJ5IGZvciB1c2luZyA6ZnVuYzpgb3Mua2lsbGAKKyAgIG9uIHRoZSBzdWJwcm9jZXNzLgorCisgICBUaGlzIGZsYWcgaXMgaWdub3JlZCBpZiA6ZGF0YTpgQ1JFQVRFX05FV19DT05TT0xFYCBpcyBzcGVjaWZpZWQuCisKIAogLi4gX3N1YnByb2Nlc3MtcmVwbGFjZW1lbnRzOgogCkBAIC03MDEsNyArNzY0LDggQEAKICogYGBzdGRpbj1QSVBFYGAgYW5kIGBgc3Rkb3V0PVBJUEVgYCBtdXN0IGJlIHNwZWNpZmllZC4KIAogKiBwb3BlbjIgY2xvc2VzIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGJ5IGRlZmF1bHQsIGJ1dCB5b3UgaGF2ZSB0byBzcGVjaWZ5Ci0gIGBgY2xvc2VfZmRzPVRydWVgYCB3aXRoIDpjbGFzczpgUG9wZW5gLgorICBgYGNsb3NlX2Zkcz1UcnVlYGAgd2l0aCA6Y2xhc3M6YFBvcGVuYCB0byBndWFyYW50ZWUgdGhpcyBiZWhhdmlvciBvbgorICBhbGwgcGxhdGZvcm1zIG9yIHBhc3QgUHl0aG9uIHZlcnNpb25zLgogCiBOb3RlcwogLS0tLS0KQEAgLTczNSwzICs3OTksNCBAQAogICAgYmFja3NsYXNoIGVzY2FwZXMgdGhlIG5leHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrIGFzCiAgICBkZXNjcmliZWQgaW4gcnVsZSAzLgogCisKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdCBiL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAppbmRleCBmYzE0MWU5Li40YmRiOTliIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CkBAIC01LDYgKzUsOSBAQAogICAgOnN5bm9wc2lzOiBQcm92aWRlIGFuIGludGVyZmFjZSB0byB0aGUgU3VuIEFVIHNvdW5kIGZvcm1hdC4KIC4uIHNlY3Rpb25hdXRob3I6OiBNb3NoZSBaYWRrYSA8bW9zaGV6QHphZGthLnNpdGUuY28uaWw+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N1bmF1LnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgc3VuYXVgIG1vZHVsZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIHRvIHRoZSBTdW4gQVUgc291bmQKIGZvcm1hdC4gIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBtb2R1bGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeW1ib2wucnN0IGIvRG9jL2xpYnJhcnkvc3ltYm9sLnJzdAppbmRleCA1MTM0ZDQ3Li43NWE0NzkyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeW1ib2wucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5bWJvbC5yc3QKQEAgLTUsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IENvbnN0YW50cyByZXByZXNlbnRpbmcgaW50ZXJuYWwgbm9kZXMgb2YgdGhlIHBhcnNlIHRyZWUuCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3ltYm9sLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjb25zdGFudHMgd2hpY2ggcmVwcmVzZW50IHRoZSBudW1lcmljIHZhbHVlcyBvZiBpbnRlcm5hbAogbm9kZXMgb2YgdGhlIHBhcnNlIHRyZWUuICBVbmxpa2UgbW9zdCBQeXRob24gY29uc3RhbnRzLCB0aGVzZSB1c2UgbG93ZXItY2FzZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3lzLnJzdCBiL0RvYy9saWJyYXJ5L3N5cy5yc3QKaW5kZXggYmI5ZjkyMC4uMDA2OTA1MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc3lzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeXMucnN0CkBAIC0xMCw2ICsxMCwxMyBAQAogYWx3YXlzIGF2YWlsYWJsZS4KIAogCisuLiBkYXRhOjogYWJpZmxhZ3MKKworICAgT24gUE9TSVggc3lzdGVtcyB3aGVyZSBQeXRob24gaXMgYnVpbGQgd2l0aCB0aGUgc3RhbmRhcmQgYGBjb25maWd1cmVgYAorICAgc2NyaXB0LCB0aGlzIGNvbnRhaW5zIHRoZSBBQkkgZmxhZ3MgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMxNDlgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogLi4gZGF0YTo6IGFyZ3YKIAogICAgVGhlIGxpc3Qgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBQeXRob24gc2NyaXB0LiBgYGFyZ3ZbMF1gYCBpcyB0aGUKQEAgLTkyLDEzICs5OSwzOSBAQAogCiAuLiBmdW5jdGlvbjo6IGRpc3BsYXlob29rKHZhbHVlKQogCi0gICBJZiAqdmFsdWUqIGlzIG5vdCBgYE5vbmVgYCwgdGhpcyBmdW5jdGlvbiBwcmludHMgaXQgdG8gYGBzeXMuc3Rkb3V0YGAsIGFuZCBzYXZlcwotICAgaXQgaW4gYGBidWlsdGlucy5fYGAuCisgICBJZiAqdmFsdWUqIGlzIG5vdCBgYE5vbmVgYCwgdGhpcyBmdW5jdGlvbiBwcmludHMgYGByZXByKHZhbHVlKWBgIHRvCisgICBgYHN5cy5zdGRvdXRgYCwgYW5kIHNhdmVzICp2YWx1ZSogaW4gYGBidWlsdGlucy5fYGAuIElmIGBgcmVwcih2YWx1ZSlgYCBpcworICAgbm90IGVuY29kYWJsZSB0byBgYHN5cy5zdGRvdXQuZW5jb2RpbmdgYCB3aXRoIGBgc3lzLnN0ZG91dC5lcnJvcnNgYCBlcnJvcgorICAgaGFuZGxlciAod2hpY2ggaXMgcHJvYmFibHkgYGAnc3RyaWN0J2BgKSwgZW5jb2RlIGl0IHRvCisgICBgYHN5cy5zdGRvdXQuZW5jb2RpbmdgYCB3aXRoIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAgZXJyb3IgaGFuZGxlci4KIAogICAgYGBzeXMuZGlzcGxheWhvb2tgYCBpcyBjYWxsZWQgb24gdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIGFuIDp0ZXJtOmBleHByZXNzaW9uYAogICAgZW50ZXJlZCBpbiBhbiBpbnRlcmFjdGl2ZSBQeXRob24gc2Vzc2lvbi4gIFRoZSBkaXNwbGF5IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUKICAgIGN1c3RvbWl6ZWQgYnkgYXNzaWduaW5nIGFub3RoZXIgb25lLWFyZ3VtZW50IGZ1bmN0aW9uIHRvIGBgc3lzLmRpc3BsYXlob29rYGAuCiAKKyAgIFBzZXVkby1jb2RlOjoKKworICAgICAgIGRlZiBkaXNwbGF5aG9vayh2YWx1ZSk6CisgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIyBTZXQgJ18nIHRvIE5vbmUgdG8gYXZvaWQgcmVjdXJzaW9uCisgICAgICAgICAgIGJ1aWx0aW5zLl8gPSBOb25lCisgICAgICAgICAgIHRleHQgPSByZXByKHZhbHVlKQorICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHRleHQpCisgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICBieXRlcyA9IHRleHQuZW5jb2RlKHN5cy5zdGRvdXQuZW5jb2RpbmcsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3lzLnN0ZG91dCwgJ2J1ZmZlcicpOgorICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKGJ5dGVzKQorICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICB0ZXh0ID0gYnl0ZXMuZGVjb2RlKHN5cy5zdGRvdXQuZW5jb2RpbmcsICdzdHJpY3QnKQorICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUodGV4dCkKKyAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICBidWlsdGlucy5fID0gdmFsdWUKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFVzZSBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIGVycm9yIGhhbmRsZXIgb24gOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYC4KKwogCiAuLiBmdW5jdGlvbjo6IGV4Y2VwdGhvb2sodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykKIApAQCAtMjIwLDggKzI1MywxMiBAQAogICAgOmNvbnN0OmBpZ25vcmVfZW52aXJvbm1lbnRgICAgOm9wdGlvbjpgLUVgCiAgICA6Y29uc3Q6YHZlcmJvc2VgICAgICAgICAgICAgICA6b3B0aW9uOmAtdmAKICAgIDpjb25zdDpgYnl0ZXNfd2FybmluZ2AgICAgICAgIDpvcHRpb246YC1iYAorICAgOmNvbnN0OmBxdWlldGAgICAgICAgICAgICAgICAgOm9wdGlvbjpgLXFgCiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgYGBxdWlldGBgIGF0dHJpYnV0ZSBmb3IgdGhlIG5ldyA6b3B0aW9uOmAtcWAgZmxhZy4KKwogCiAuLiBkYXRhOjogZmxvYXRfaW5mbwogCkBAIC0zMDMsNiArMzQwLDkgQEAKIAogICAgUmV0dXJuIHRoZSBpbnRlcnByZXRlcidzICJjaGVjayBpbnRlcnZhbCI7IHNlZSA6ZnVuYzpgc2V0Y2hlY2tpbnRlcnZhbGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKKyAgICAgIFVzZSA6ZnVuYzpgZ2V0c3dpdGNoaW50ZXJ2YWxgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRkZWZhdWx0ZW5jb2RpbmcoKQogCkBAIC0zMTIsMjIgKzM1MiwyMCBAQAogCiAuLiBmdW5jdGlvbjo6IGdldGRsb3BlbmZsYWdzKCkKIAotICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvciA6Y2Z1bmM6YGRsb3BlbmAgY2FsbHMuCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuCiAgICBUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIDptb2Q6YGN0eXBlc2AgYW5kIDptb2Q6YERMRkNOYCBtb2R1bGVzLgogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKIAotICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGNvbnZlcnQgVW5pY29kZSBmaWxlbmFtZXMgaW50byBzeXN0ZW0KLSAgIGZpbGUgbmFtZXMsIG9yIGBgTm9uZWBgIGlmIHRoZSBzeXN0ZW0gZGVmYXVsdCBlbmNvZGluZyBpcyB1c2VkLiBUaGUgcmVzdWx0IHZhbHVlCi0gICBkZXBlbmRzIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtOgorICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGNvbnZlcnQgVW5pY29kZSBmaWxlbmFtZXMgaW50bworICAgc3lzdGVtIGZpbGUgbmFtZXMuIFRoZSByZXN1bHQgdmFsdWUgZGVwZW5kcyBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbToKIAogICAgKiBPbiBNYWMgT1MgWCwgdGhlIGVuY29kaW5nIGlzIGBgJ3V0Zi04J2BgLgogCiAgICAqIE9uIFVuaXgsIHRoZSBlbmNvZGluZyBpcyB0aGUgdXNlcidzIHByZWZlcmVuY2UgYWNjb3JkaW5nIHRvIHRoZSByZXN1bHQgb2YKLSAgICAgbmxfbGFuZ2luZm8oQ09ERVNFVCksIG9yIGBgTm9uZWBgIGlmIHRoZSBgYG5sX2xhbmdpbmZvKENPREVTRVQpYGAKLSAgICAgZmFpbGVkLgorICAgICBubF9sYW5naW5mbyhDT0RFU0VUKSwgb3IgYGAndXRmLTgnYGAgaWYgYGBubF9sYW5naW5mbyhDT0RFU0VUKWBgIGZhaWxlZC4KIAogICAgKiBPbiBXaW5kb3dzIE5UKywgZmlsZSBuYW1lcyBhcmUgVW5pY29kZSBuYXRpdmVseSwgc28gbm8gY29udmVyc2lvbiBpcwogICAgICBwZXJmb3JtZWQuIDpmdW5jOmBnZXRmaWxlc3lzdGVtZW5jb2RpbmdgIHN0aWxsIHJldHVybnMgYGAnbWJjcydgYCwgYXMKQEAgLTMzNyw2ICszNzUsMTAgQEAKIAogICAgKiBPbiBXaW5kb3dzIDl4LCB0aGUgZW5jb2RpbmcgaXMgYGAnbWJjcydgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIE9uIFVuaXgsIHVzZSBgYCd1dGYtOCdgYCBpbnN0ZWFkIG9mIGBgTm9uZWBgIGlmIGBgbmxfbGFuZ2luZm8oQ09ERVNFVClgYAorICAgICAgZmFpbGVkLiA6ZnVuYzpgZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCByZXN1bHQgY2Fubm90IGJlIGBgTm9uZWBgLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0cmVmY291bnQob2JqZWN0KQogCkBAIC0zNjcsNiArNDA5LDE3IEBACiAgICBhZGRpdGlvbmFsIGdhcmJhZ2UgY29sbGVjdG9yIG92ZXJoZWFkIGlmIHRoZSBvYmplY3QgaXMgbWFuYWdlZCBieSB0aGUgZ2FyYmFnZQogICAgY29sbGVjdG9yLgogCisgICBTZWUgYHJlY3Vyc2l2ZSBzaXplb2YgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc1MDQ+YF8KKyAgIGZvciBhbiBleGFtcGxlIG9mIHVzaW5nIDpmdW5jOmBnZXRzaXplb2ZgIHJlY3Vyc2l2ZWx5IHRvIGZpbmQgdGhlIHNpemUgb2YKKyAgIGNvbnRhaW5lcnMgYW5kIGFsbCB0aGVpciBjb250ZW50cy4KKworLi4gZnVuY3Rpb246OiBnZXRzd2l0Y2hpbnRlcnZhbCgpCisKKyAgIFJldHVybiB0aGUgaW50ZXJwcmV0ZXIncyAidGhyZWFkIHN3aXRjaCBpbnRlcnZhbCI7IHNlZQorICAgOmZ1bmM6YHNldHN3aXRjaGludGVydmFsYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIAogLi4gZnVuY3Rpb246OiBfZ2V0ZnJhbWUoW2RlcHRoXSkKIApAQCAtNDA4LDkgKzQ2MSwxNSBAQAogCiAuLiBmdW5jdGlvbjo6IGdldHdpbmRvd3N2ZXJzaW9uKCkKIAotICAgUmV0dXJuIGEgdHVwbGUgY29udGFpbmluZyBmaXZlIGNvbXBvbmVudHMsIGRlc2NyaWJpbmcgdGhlIFdpbmRvd3MgdmVyc2lvbgotICAgY3VycmVudGx5IHJ1bm5pbmcuICBUaGUgZWxlbWVudHMgYXJlICptYWpvciosICptaW5vciosICpidWlsZCosICpwbGF0Zm9ybSosIGFuZAotICAgKnRleHQqLiAgKnRleHQqIGNvbnRhaW5zIGEgc3RyaW5nIHdoaWxlIGFsbCBvdGhlciB2YWx1ZXMgYXJlIGludGVnZXJzLgorICAgUmV0dXJuIGEgbmFtZWQgdHVwbGUgZGVzY3JpYmluZyB0aGUgV2luZG93cyB2ZXJzaW9uCisgICBjdXJyZW50bHkgcnVubmluZy4gIFRoZSBuYW1lZCBlbGVtZW50cyBhcmUgKm1ham9yKiwgKm1pbm9yKiwKKyAgICpidWlsZCosICpwbGF0Zm9ybSosICpzZXJ2aWNlX3BhY2sqLCAqc2VydmljZV9wYWNrX21pbm9yKiwKKyAgICpzZXJ2aWNlX3BhY2tfbWFqb3IqLCAqc3VpdGVfbWFzayosIGFuZCAqcHJvZHVjdF90eXBlKi4KKyAgICpzZXJ2aWNlX3BhY2sqIGNvbnRhaW5zIGEgc3RyaW5nIHdoaWxlIGFsbCBvdGhlciB2YWx1ZXMgYXJlCisgICBpbnRlZ2Vycy4gVGhlIGNvbXBvbmVudHMgY2FuIGFsc28gYmUgYWNjZXNzZWQgYnkgbmFtZSwgc28KKyAgIGBgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbMF1gYCBpcyBlcXVpdmFsZW50IHRvCisgICBgYHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpLm1ham9yYGAuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggcHJpb3IKKyAgIHZlcnNpb25zLCBvbmx5IHRoZSBmaXJzdCA1IGVsZW1lbnRzIGFyZSByZXRyaWV2YWJsZSBieSBpbmRleGluZy4KIAogICAgKnBsYXRmb3JtKiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgogCkBAIC00MjYsMTEgKzQ4NSw1NCBAQAogICAgfCA6Y29uc3Q6YDMgKFZFUl9QTEFURk9STV9XSU4zMl9DRSlgICAgICAgfCBXaW5kb3dzIENFICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotICAgVGhpcyBmdW5jdGlvbiB3cmFwcyB0aGUgV2luMzIgOmNmdW5jOmBHZXRWZXJzaW9uRXhgIGZ1bmN0aW9uOyBzZWUgdGhlIE1pY3Jvc29mdAotICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZSBmaWVsZHMuCisgICAqcHJvZHVjdF90eXBlKiBtYXkgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgMSAoVkVSX05UX1dPUktTVEFUSU9OKWAgICAgICAgfCBUaGUgc3lzdGVtIGlzIGEgd29ya3N0YXRpb24uICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YDIgKFZFUl9OVF9ET01BSU5fQ09OVFJPTExFUilgIHwgVGhlIHN5c3RlbSBpcyBhIGRvbWFpbiAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250cm9sbGVyLiAgICAgICAgICAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YDMgKFZFUl9OVF9TRVJWRVIpYCAgICAgICAgICAgIHwgVGhlIHN5c3RlbSBpcyBhIHNlcnZlciwgYnV0IG5vdCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhIGRvbWFpbiBjb250cm9sbGVyLiAgICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisKKyAgIFRoaXMgZnVuY3Rpb24gd3JhcHMgdGhlIFdpbjMyIDpjOmZ1bmM6YEdldFZlcnNpb25FeGAgZnVuY3Rpb247IHNlZSB0aGUKKyAgIE1pY3Jvc29mdCBkb2N1bWVudGF0aW9uIG9uIDpjOmZ1bmM6YE9TVkVSU0lPTklORk9FWGAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgIGFib3V0IHRoZXNlIGZpZWxkcy4KIAogICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQ2hhbmdlZCB0byBhIG5hbWVkIHR1cGxlIGFuZCBhZGRlZCAqc2VydmljZV9wYWNrX21pbm9yKiwKKyAgICAgICpzZXJ2aWNlX3BhY2tfbWFqb3IqLCAqc3VpdGVfbWFzayosIGFuZCAqcHJvZHVjdF90eXBlKi4KKworCisuLiBkYXRhOjogaGFzaF9pbmZvCisKKyAgIEEgc3RydWN0c2VxIGdpdmluZyBwYXJhbWV0ZXJzIG9mIHRoZSBudW1lcmljIGhhc2ggaW1wbGVtZW50YXRpb24uICBGb3IKKyAgIG1vcmUgZGV0YWlscyBhYm91dCBoYXNoaW5nIG9mIG51bWVyaWMgdHlwZXMsIHNlZSA6cmVmOmBudW1lcmljLWhhc2hgLgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCBhdHRyaWJ1dGUgICAgICAgICAgIHwgZXhwbGFuYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgd2lkdGhgICAgICAgfCB3aWR0aCBpbiBiaXRzIHVzZWQgZm9yIGhhc2ggdmFsdWVzICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBtb2R1bHVzYCAgICB8IHByaW1lIG1vZHVsdXMgUCB1c2VkIGZvciBudW1lcmljIGhhc2ggc2NoZW1lICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YGluZmAgICAgICAgIHwgaGFzaCB2YWx1ZSByZXR1cm5lZCBmb3IgYSBwb3NpdGl2ZSBpbmZpbml0eSAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgbmFuYCAgICAgICAgfCBoYXNoIHZhbHVlIHJldHVybmVkIGZvciBhIG5hbiAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBpbWFnYCAgICAgICB8IG11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV4IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KIApAQCAtNTI1LDcgKzYyNyw3IEBACiAKIC4uIGRhdGE6OiBtYXhzaXplCiAKLSAgIEFuIGludGVnZXIgZ2l2aW5nIHRoZSBtYXhpbXVtIHZhbHVlIGEgdmFyaWFibGUgb2YgdHlwZSA6Y3R5cGU6YFB5X3NzaXplX3RgIGNhbgorICAgQW4gaW50ZWdlciBnaXZpbmcgdGhlIG1heGltdW0gdmFsdWUgYSB2YXJpYWJsZSBvZiB0eXBlIDpjOnR5cGU6YFB5X3NzaXplX3RgIGNhbgogICAgdGFrZS4gIEl0J3MgdXN1YWxseSBgYDIqKjMxIC0gMWBgIG9uIGEgMzItYml0IHBsYXRmb3JtIGFuZCBgYDIqKjYzIC0gMWBgIG9uIGEKICAgIDY0LWJpdCBwbGF0Zm9ybS4KIApAQCAtNTQ0LDcgKzY0Niw3IEBACiAgICAgaW1wb3J0ZWQuIFRoZSA6bWV0aDpgZmluZF9tb2R1bGVgIG1ldGhvZCBpcyBjYWxsZWQgYXQgbGVhc3Qgd2l0aCB0aGUKICAgICBhYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQuIElmIHRoZSBtb2R1bGUgdG8gYmUgaW1wb3J0ZWQgaXMKICAgICBjb250YWluZWQgaW4gcGFja2FnZSB0aGVuIHRoZSBwYXJlbnQgcGFja2FnZSdzIDphdHRyOmBfX3BhdGhfX2AgYXR0cmlidXRlCi0gICAgaXMgcGFzc2VkIGluIGFzIGEgc2Vjb25kIGFyZ3VtZW50LiBUaGUgbWV0aG9kIHJldHVybnMgOmtleXdvcmQ6YE5vbmVgIGlmCisgICAgaXMgcGFzc2VkIGluIGFzIGEgc2Vjb25kIGFyZ3VtZW50LiBUaGUgbWV0aG9kIHJldHVybnMgYGBOb25lYGAgaWYKICAgICB0aGUgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCwgZWxzZSByZXR1cm5zIGEgOnRlcm06YGxvYWRlcmAuCiAKICAgICA6ZGF0YTpgc3lzLm1ldGFfcGF0aGAgaXMgc2VhcmNoZWQgYmVmb3JlIGFueSBpbXBsaWNpdCBkZWZhdWx0IGZpbmRlcnMgb3IKQEAgLTU5Nyw3ICs2OTksNyBAQAogICAgIEEgZGljdGlvbmFyeSBhY3RpbmcgYXMgYSBjYWNoZSBmb3IgOnRlcm06YGZpbmRlcmAgb2JqZWN0cy4gVGhlIGtleXMgYXJlCiAgICAgcGF0aHMgdGhhdCBoYXZlIGJlZW4gcGFzc2VkIHRvIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgYW5kIHRoZSB2YWx1ZXMgYXJlCiAgICAgdGhlIGZpbmRlcnMgdGhhdCBhcmUgZm91bmQuIElmIGEgcGF0aCBpcyBhIHZhbGlkIGZpbGUgc3lzdGVtIHBhdGggYnV0IG5vCi0gICAgZXhwbGljaXQgZmluZGVyIGlzIGZvdW5kIG9uIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgdGhlbiA6a2V5d29yZDpgTm9uZWAgaXMKKyAgICBleHBsaWNpdCBmaW5kZXIgaXMgZm91bmQgb24gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCB0aGVuIGBgTm9uZWBgIGlzCiAgICAgc3RvcmVkIHRvIHJlcHJlc2VudCB0aGUgaW1wbGljaXQgZGVmYXVsdCBmaW5kZXIgc2hvdWxkIGJlIHVzZWQuIElmIHRoZSBwYXRoCiAgICAgaXMgbm90IGFuIGV4aXN0aW5nIHBhdGggdGhlbiA6Y2xhc3M6YGltcC5OdWxsSW1wb3J0ZXJgIGlzIHNldC4KIApAQCAtNjIyLDcgKzcyNCw2IEBACiAgICBNYWMgT1MgWCAgICAgICAgIGBgJ2RhcndpbidgYAogICAgT1MvMiAgICAgICAgICAgICBgYCdvczInYGAKICAgIE9TLzIgRU1YICAgICAgICAgYGAnb3MyZW14J2BgCi0gICBBdGhlT1MgICAgICAgICAgIGBgJ2F0aGVvcydgYAogICAgPT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCkBAIC02NzEsMjIgKzc3MiwxNSBAQAogICAgcGVyZm9ybWFuY2UgZm9yIHByb2dyYW1zIHVzaW5nIHRocmVhZHMuICBTZXR0aW5nIGl0IHRvIGEgdmFsdWUgYGA8PWBgIDAgY2hlY2tzCiAgICBldmVyeSB2aXJ0dWFsIGluc3RydWN0aW9uLCBtYXhpbWl6aW5nIHJlc3BvbnNpdmVuZXNzIGFzIHdlbGwgYXMgb3ZlcmhlYWQuCiAKLQotLi4gZnVuY3Rpb246OiBzZXRkZWZhdWx0ZW5jb2RpbmcobmFtZSkKLQotICAgU2V0IHRoZSBjdXJyZW50IGRlZmF1bHQgc3RyaW5nIGVuY29kaW5nIHVzZWQgYnkgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24uICBJZgotICAgKm5hbWUqIGRvZXMgbm90IG1hdGNoIGFueSBhdmFpbGFibGUgZW5jb2RpbmcsIDpleGM6YExvb2t1cEVycm9yYCBpcyByYWlzZWQuCi0gICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSB0aGUgOm1vZDpgc2l0ZWAgbW9kdWxlCi0gICBpbXBsZW1lbnRhdGlvbiBhbmQsIHdoZXJlIG5lZWRlZCwgYnkgOm1vZDpgc2l0ZWN1c3RvbWl6ZWAuICBPbmNlIHVzZWQgYnkgdGhlCi0gICA6bW9kOmBzaXRlYCBtb2R1bGUsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgOm1vZDpgc3lzYCBtb2R1bGUncyBuYW1lc3BhY2UuCi0KLSAgIC4uIE5vdGUgdGhhdCA6bW9kOmBzaXRlYCBpcyBub3QgaW1wb3J0ZWQgaWYgdGhlIDpvcHRpb246YC1TYCBvcHRpb24gaXMgcGFzc2VkCi0gICAgICB0byB0aGUgaW50ZXJwcmV0ZXIsIGluIHdoaWNoIGNhc2UgdGhpcyBmdW5jdGlvbiB3aWxsIHJlbWFpbiBhdmFpbGFibGUuCisgICAuLiBkZXByZWNhdGVkOjogMy4yCisgICAgICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBhbiBlZmZlY3QgYW55bW9yZSwgYXMgdGhlIGludGVybmFsIGxvZ2ljIGZvcgorICAgICAgdGhyZWFkIHN3aXRjaGluZyBhbmQgYXN5bmNocm9ub3VzIHRhc2tzIGhhcyBiZWVuIHJld3JpdHRlbi4gIFVzZQorICAgICAgOmZ1bmM6YHNldHN3aXRjaGludGVydmFsYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogc2V0ZGxvcGVuZmxhZ3MobikKIAotICAgU2V0IHRoZSBmbGFncyB1c2VkIGJ5IHRoZSBpbnRlcnByZXRlciBmb3IgOmNmdW5jOmBkbG9wZW5gIGNhbGxzLCBzdWNoIGFzIHdoZW4KKyAgIFNldCB0aGUgZmxhZ3MgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgZm9yIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMsIHN1Y2ggYXMgd2hlbgogICAgdGhlIGludGVycHJldGVyIGxvYWRzIGV4dGVuc2lvbiBtb2R1bGVzLiAgQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHdpbGwgZW5hYmxlIGEKICAgIGxhenkgcmVzb2x2aW5nIG9mIHN5bWJvbHMgd2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUsIGlmIGNhbGxlZCBhcwogICAgYGBzeXMuc2V0ZGxvcGVuZmxhZ3MoMClgYC4gIFRvIHNoYXJlIHN5bWJvbHMgYWNyb3NzIGV4dGVuc2lvbiBtb2R1bGVzLCBjYWxsIGFzCkBAIC02OTYsMTUgKzc5MCw2IEBACiAgICA6ZmlsZTpgL3Vzci9pbmNsdWRlL2RsZmNuLmhgIHVzaW5nIHRoZSA6cHJvZ3JhbTpgaDJweWAgc2NyaXB0LiBBdmFpbGFiaWxpdHk6CiAgICBVbml4LgogCi0uLiBmdW5jdGlvbjo6IHNldGZpbGVzeXN0ZW1lbmNvZGluZyhlbmMpCi0KLSAgIFNldCB0aGUgZW5jb2RpbmcgdXNlZCB3aGVuIGNvbnZlcnRpbmcgUHl0aG9uIHN0cmluZ3MgdG8gZmlsZSBuYW1lcyB0byAqZW5jKi4KLSAgIEJ5IGRlZmF1bHQsIFB5dGhvbiB0cmllcyB0byBkZXRlcm1pbmUgdGhlIGVuY29kaW5nIGl0IHNob3VsZCB1c2UgYXV0b21hdGljYWxseQotICAgb24gVW5peDsgb24gV2luZG93cywgaXQgYXZvaWRzIHN1Y2ggY29udmVyc2lvbiBjb21wbGV0ZWx5LiBUaGlzIGZ1bmN0aW9uIGNhbgotICAgYmUgdXNlZCB3aGVuIFB5dGhvbidzIGRldGVybWluYXRpb24gb2YgdGhlIGVuY29kaW5nIG5lZWRzIHRvIGJlIG92ZXJ3cml0dGVuLAotICAgZS5nLiB3aGVuIG5vdCBhbGwgZmlsZSBuYW1lcyBvbiBkaXNrIGNhbiBiZSBkZWNvZGVkIHVzaW5nIHRoZSBlbmNvZGluZyB0aGF0Ci0gICBQeXRob24gaGFkIGNob3Nlbi4KLQogLi4gZnVuY3Rpb246OiBzZXRwcm9maWxlKHByb2ZpbGVmdW5jKQogCiAgICAuLiBpbmRleDo6CkBAIC03MzQsNiArODE5LDE5IEBACiAgICBsaW1pdCBjYW4gbGVhZCB0byBhIGNyYXNoLgogCiAKKy4uIGZ1bmN0aW9uOjogc2V0c3dpdGNoaW50ZXJ2YWwoaW50ZXJ2YWwpCisKKyAgIFNldCB0aGUgaW50ZXJwcmV0ZXIncyB0aHJlYWQgc3dpdGNoIGludGVydmFsIChpbiBzZWNvbmRzKS4gIFRoaXMgZmxvYXRpbmctcG9pbnQKKyAgIHZhbHVlIGRldGVybWluZXMgdGhlIGlkZWFsIGR1cmF0aW9uIG9mIHRoZSAidGltZXNsaWNlcyIgYWxsb2NhdGVkIHRvCisgICBjb25jdXJyZW50bHkgcnVubmluZyBQeXRob24gdGhyZWFkcy4gIFBsZWFzZSBub3RlIHRoYXQgdGhlIGFjdHVhbCB2YWx1ZQorICAgY2FuIGJlIGhpZ2hlciwgZXNwZWNpYWxseSBpZiBsb25nLXJ1bm5pbmcgaW50ZXJuYWwgZnVuY3Rpb25zIG9yIG1ldGhvZHMKKyAgIGFyZSB1c2VkLiAgQWxzbywgd2hpY2ggdGhyZWFkIGJlY29tZXMgc2NoZWR1bGVkIGF0IHRoZSBlbmQgb2YgdGhlIGludGVydmFsCisgICBpcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIGRlY2lzaW9uLiAgVGhlIGludGVycHJldGVyIGRvZXNuJ3QgaGF2ZSBpdHMKKyAgIG93biBzY2hlZHVsZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIGZ1bmN0aW9uOjogc2V0dHJhY2UodHJhY2VmdW5jKQogCiAgICAuLiBpbmRleDo6CkBAIC03NjYsOSArODY0LDExIEBACiAgICAgICBzcGVjaWZpZXMgdGhlIGxvY2FsIHRyYWNlIGZ1bmN0aW9uLgogCiAgICBgYCdsaW5lJ2BgCi0gICAgICBUaGUgaW50ZXJwcmV0ZXIgaXMgYWJvdXQgdG8gZXhlY3V0ZSBhIG5ldyBsaW5lIG9mIGNvZGUgKHNvbWV0aW1lcyBtdWx0aXBsZQotICAgICAgbGluZSBldmVudHMgb24gb25lIGxpbmUgZXhpc3QpLiAgVGhlIGxvY2FsIHRyYWNlIGZ1bmN0aW9uIGlzIGNhbGxlZDsgKmFyZyoKLSAgICAgIGlzIGBgTm9uZWBgOyB0aGUgcmV0dXJuIHZhbHVlIHNwZWNpZmllcyB0aGUgbmV3IGxvY2FsIHRyYWNlIGZ1bmN0aW9uLgorICAgICAgVGhlIGludGVycHJldGVyIGlzIGFib3V0IHRvIGV4ZWN1dGUgYSBuZXcgbGluZSBvZiBjb2RlIG9yIHJlLWV4ZWN1dGUgdGhlCisgICAgICBjb25kaXRpb24gb2YgYSBsb29wLiAgVGhlIGxvY2FsIHRyYWNlIGZ1bmN0aW9uIGlzIGNhbGxlZDsgKmFyZyogaXMKKyAgICAgIGBgTm9uZWBgOyB0aGUgcmV0dXJuIHZhbHVlIHNwZWNpZmllcyB0aGUgbmV3IGxvY2FsIHRyYWNlIGZ1bmN0aW9uLiAgU2VlCisgICAgICA6ZmlsZTpgT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0YCBmb3IgYSBkZXRhaWxlZCBleHBsYW5hdGlvbiBvZiBob3cgdGhpcworICAgICAgd29ya3MuCiAKICAgIGBgJ3JldHVybidgYAogICAgICAgQSBmdW5jdGlvbiAob3Igb3RoZXIgY29kZSBibG9jaykgaXMgYWJvdXQgdG8gcmV0dXJuLiAgVGhlIGxvY2FsIHRyYWNlCkBAIC04MTEsNiArOTExLDEwIEBACiAgICBhdmFpbGFibGUgb25seSBpZiBQeXRob24gd2FzIGNvbXBpbGVkIHdpdGggYGAtLXdpdGgtdHNjYGAuIFRvIHVuZGVyc3RhbmQKICAgIHRoZSBvdXRwdXQgb2YgdGhpcyBkdW1wLCByZWFkIDpmaWxlOmBQeXRob24vY2V2YWwuY2AgaW4gdGhlIFB5dGhvbiBzb3VyY2VzLgogCisgICAuLiBpbXBsLWRldGFpbDo6CisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIGludGltYXRlbHkgYm91bmQgdG8gQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZAorICAgICAgdGh1cyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGVsc2V3aGVyZS4KKwogCiAuLiBkYXRhOjogc3RkaW4KICAgICAgICAgICBzdGRvdXQKQEAgLTkxNyw2ICsxMDIxLDMwIEBACiAgICBtb2R1bGUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXM7IG1vZGlmeWluZyB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3Qgb24gdGhlCiAgICByZWdpc3RyeSBrZXlzIHVzZWQgYnkgUHl0aG9uLiBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCiAKKworLi4gZGF0YTo6IF94b3B0aW9ucworCisgICBBIGRpY3Rpb25hcnkgb2YgdGhlIHZhcmlvdXMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgZmxhZ3MgcGFzc2VkIHRocm91Z2gKKyAgIHRoZSA6b3B0aW9uOmAtWGAgY29tbWFuZC1saW5lIG9wdGlvbi4gIE9wdGlvbiBuYW1lcyBhcmUgZWl0aGVyIG1hcHBlZCB0bworICAgdGhlaXIgdmFsdWVzLCBpZiBnaXZlbiBleHBsaWNpdGx5LCBvciB0byA6Y29uc3Q6YFRydWVgLiAgRXhhbXBsZTo6CisKKyAgICAgICQgLi9weXRob24gLVhhPWIgLVhjCisgICAgICBQeXRob24gMy4yYTMrIChweTNrLCBPY3QgMTYgMjAxMCwgMjA6MTQ6NTApCisgICAgICBbR0NDIDQuNC4zXSBvbiBsaW51eDIKKyAgICAgIFR5cGUgImhlbHAiLCAiY29weXJpZ2h0IiwgImNyZWRpdHMiIG9yICJsaWNlbnNlIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAgICAgID4+PiBpbXBvcnQgc3lzCisgICAgICA+Pj4gc3lzLl94b3B0aW9ucworICAgICAgeydhJzogJ2InLCAnYyc6IFRydWV9CisKKyAgIC4uIGltcGwtZGV0YWlsOjoKKworICAgICAgVGhpcyBpcyBhIENQeXRob24tc3BlY2lmaWMgd2F5IG9mIGFjY2Vzc2luZyBvcHRpb25zIHBhc3NlZCB0aHJvdWdoCisgICAgICA6b3B0aW9uOmAtWGAuICBPdGhlciBpbXBsZW1lbnRhdGlvbnMgbWF5IGV4cG9ydCB0aGVtIHRocm91Z2ggb3RoZXIKKyAgICAgIG1lYW5zLCBvciBub3QgYXQgYWxsLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAuLiBydWJyaWM6OiBDaXRhdGlvbnMKIAogLi4gW0M5OV0gSVNPL0lFQyA5ODk5OjE5OTkuICAiUHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzIC0tIEMuIiAgQSBwdWJsaWMgZHJhZnQgb2YgdGhpcyBzdGFuZGFyZCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMTQvd3d3L2RvY3MvbjEyNTYucGRmIC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODliZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CkBAIC0wLDAgKzEsMjU5IEBACis6bW9kOmBzeXNjb25maWdgIC0tLSBQcm92aWRlIGFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHN5c2NvbmZpZworICAgOnN5bm9wc2lzOiBQeXRob24ncyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisuLiBtb2R1bGVhdXRob3I6OiBUYXJlayBaaWFkZSA8dGFyZWtAemlhZGUub3JnPgorLi4gc2VjdGlvbmF1dGhvcjo6IFRhcmVrIFppYWRlIDx0YXJla0B6aWFkZS5vcmc+CisuLiBpbmRleDo6CisgICBzaW5nbGU6IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKworKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3lzY29uZmlnLnB5YAorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLS0tLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YHN5c2NvbmZpZ2AgbW9kdWxlIHByb3ZpZGVzIGFjY2VzcyB0byBQeXRob24ncyBjb25maWd1cmF0aW9uCitpbmZvcm1hdGlvbiBsaWtlIHRoZSBsaXN0IG9mIGluc3RhbGxhdGlvbiBwYXRocyBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCityZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKK0NvbmZpZ3VyYXRpb24gdmFyaWFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBIFB5dGhvbiBkaXN0cmlidXRpb24gY29udGFpbnMgYSA6ZmlsZTpgTWFrZWZpbGVgIGFuZCBhIDpmaWxlOmBweWNvbmZpZy5oYAoraGVhZGVyIGZpbGUgdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIGJ1aWxkIGJvdGggdGhlIFB5dGhvbiBiaW5hcnkgaXRzZWxmIGFuZAordGhpcmQtcGFydHkgQyBleHRlbnNpb25zIGNvbXBpbGVkIHVzaW5nIDptb2Q6YGRpc3R1dGlsc2AuCisKKzptb2Q6YHN5c2NvbmZpZ2AgcHV0cyBhbGwgdmFyaWFibGVzIGZvdW5kIGluIHRoZXNlIGZpbGVzIGluIGEgZGljdGlvbmFyeSB0aGF0CitjYW4gYmUgYWNjZXNzZWQgdXNpbmcgOmZ1bmM6YGdldF9jb25maWdfdmFyc2Agb3IgOmZ1bmM6YGdldF9jb25maWdfdmFyYC4KKworTm90aWNlIHRoYXQgb24gV2luZG93cywgaXQncyBhIG11Y2ggc21hbGxlciBzZXQuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2NvbmZpZ192YXJzKFwqYXJncykKKworICAgV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICByZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKKyAgIFdpdGggYXJndW1lbnRzLCByZXR1cm4gYSBsaXN0IG9mIHZhbHVlcyB0aGF0IHJlc3VsdCBmcm9tIGxvb2tpbmcgdXAgZWFjaAorICAgYXJndW1lbnQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZGljdGlvbmFyeS4KKworICAgRm9yIGVhY2ggYXJndW1lbnQsIGlmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQsIHJldHVybiBgYE5vbmVgYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9jb25maWdfdmFyKG5hbWUpCisKKyAgIFJldHVybiB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgdmFyaWFibGUgKm5hbWUqLiBFcXVpdmFsZW50IHRvCisgICBgYGdldF9jb25maWdfdmFycygpLmdldChuYW1lKWBgLgorCisgICBJZiAqbmFtZSogaXMgbm90IGZvdW5kLCByZXR1cm4gYGBOb25lYGAuCisKK0V4YW1wbGUgb2YgdXNhZ2U6OgorCisgICA+Pj4gaW1wb3J0IHN5c2NvbmZpZworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpCisgICAwCisgICA+Pj4gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMSUJESVInKQorICAgJy91c3IvbG9jYWwvbGliJworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoJ0FSJywgJ0NYWCcpCisgICBbJ2FyJywgJ2crKyddCisKKworSW5zdGFsbGF0aW9uIHBhdGhzCistLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIHVzZXMgYW4gaW5zdGFsbGF0aW9uIHNjaGVtZSB0aGF0IGRpZmZlcnMgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQgb24KK3RoZSBpbnN0YWxsYXRpb24gb3B0aW9ucy4gIFRoZXNlIHNjaGVtZXMgYXJlIHN0b3JlZCBpbiA6bW9kOmBzeXNjb25maWdgIHVuZGVyCit1bmlxdWUgaWRlbnRpZmllcnMgYmFzZWQgb24gdGhlIHZhbHVlIHJldHVybmVkIGJ5IDpjb25zdDpgb3MubmFtZWAuCisKK0V2ZXJ5IG5ldyBjb21wb25lbnQgdGhhdCBpcyBpbnN0YWxsZWQgdXNpbmcgOm1vZDpgZGlzdHV0aWxzYCBvciBhCitEaXN0dXRpbHMtYmFzZWQgc3lzdGVtIHdpbGwgZm9sbG93IHRoZSBzYW1lIHNjaGVtZSB0byBjb3B5IGl0cyBmaWxlIGluIHRoZSByaWdodAorcGxhY2VzLgorCitQeXRob24gY3VycmVudGx5IHN1cHBvcnRzIHNldmVuIHNjaGVtZXM6CisKKy0gKnBvc2l4X3ByZWZpeCo6IHNjaGVtZSBmb3IgUG9zaXggcGxhdGZvcm1zIGxpa2UgTGludXggb3IgTWFjIE9TIFguICBUaGlzIGlzCisgIHRoZSBkZWZhdWx0IHNjaGVtZSB1c2VkIHdoZW4gUHl0aG9uIG9yIGEgY29tcG9uZW50IGlzIGluc3RhbGxlZC4KKy0gKnBvc2l4X2hvbWUqOiBzY2hlbWUgZm9yIFBvc2l4IHBsYXRmb3JtcyB1c2VkIHdoZW4gYSAqaG9tZSogb3B0aW9uIGlzIHVzZWQKKyAgdXBvbiBpbnN0YWxsYXRpb24uICBUaGlzIHNjaGVtZSBpcyB1c2VkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5zdGFsbGVkIHRocm91Z2gKKyAgRGlzdHV0aWxzIHdpdGggYSBzcGVjaWZpYyBob21lIHByZWZpeC4KKy0gKnBvc2l4X3VzZXIqOiBzY2hlbWUgZm9yIFBvc2l4IHBsYXRmb3JtcyB1c2VkIHdoZW4gYSBjb21wb25lbnQgaXMgaW5zdGFsbGVkCisgIHRocm91Z2ggRGlzdHV0aWxzIGFuZCB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLiAgVGhpcyBzY2hlbWUgZGVmaW5lcyBwYXRocworICBsb2NhdGVkIHVuZGVyIHRoZSB1c2VyIGhvbWUgZGlyZWN0b3J5LgorLSAqbnQqOiBzY2hlbWUgZm9yIE5UIHBsYXRmb3JtcyBsaWtlIFdpbmRvd3MuCistICpudF91c2VyKjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KKy0gKm9zMio6IHNjaGVtZSBmb3IgT1MvMiBwbGF0Zm9ybXMuCistICpvczJfaG9tZSo6IHNjaGVtZSBmb3IgT1MvMiBwYXRmb3Jtcywgd2hlbiB0aGUgKnVzZXIqIG9wdGlvbiBpcyB1c2VkLgorCitFYWNoIHNjaGVtZSBpcyBpdHNlbGYgY29tcG9zZWQgb2YgYSBzZXJpZXMgb2YgcGF0aHMgYW5kIGVhY2ggcGF0aCBoYXMgYSB1bmlxdWUKK2lkZW50aWZpZXIuICBQeXRob24gY3VycmVudGx5IHVzZXMgZWlnaHQgcGF0aHM6CisKKy0gKnN0ZGxpYio6IGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzdGFuZGFyZCBQeXRob24gbGlicmFyeSBmaWxlcyB0aGF0IGFyZSBub3QKKyAgcGxhdGZvcm0tc3BlY2lmaWMuCistICpwbGF0c3RkbGliKjogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIHRoYXQgYXJlCisgIHBsYXRmb3JtLXNwZWNpZmljLgorLSAqcGxhdGxpYio6IGRpcmVjdG9yeSBmb3Igc2l0ZS1zcGVjaWZpYywgcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMuCistICpwdXJlbGliKjogZGlyZWN0b3J5IGZvciBzaXRlLXNwZWNpZmljLCBub24tcGxhdGZvcm0tc3BlY2lmaWMgZmlsZXMuCistICppbmNsdWRlKjogZGlyZWN0b3J5IGZvciBub24tcGxhdGZvcm0tc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgorLSAqcGxhdGluY2x1ZGUqOiBkaXJlY3RvcnkgZm9yIHBsYXRmb3JtLXNwZWNpZmljIGhlYWRlciBmaWxlcy4KKy0gKnNjcmlwdHMqOiBkaXJlY3RvcnkgZm9yIHNjcmlwdCBmaWxlcy4KKy0gKmRhdGEqOiBkaXJlY3RvcnkgZm9yIGRhdGEgZmlsZXMuCisKKzptb2Q6YHN5c2NvbmZpZ2AgcHJvdmlkZXMgc29tZSBmdW5jdGlvbnMgdG8gZGV0ZXJtaW5lIHRoZXNlIHBhdGhzLgorCisuLiBmdW5jdGlvbjo6IGdldF9zY2hlbWVfbmFtZXMoKQorCisgICBSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIGFsbCBzY2hlbWVzIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4KKyAgIDptb2Q6YHN5c2NvbmZpZ2AuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGF0aF9uYW1lcygpCisKKyAgIFJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgYWxsIHBhdGggbmFtZXMgY3VycmVudGx5IHN1cHBvcnRlZCBpbgorICAgOm1vZDpgc3lzY29uZmlnYC4KKworCisuLiBmdW5jdGlvbjo6IGdldF9wYXRoKG5hbWUsIFtzY2hlbWUsIFt2YXJzLCBbZXhwYW5kXV1dKQorCisgICBSZXR1cm4gYW4gaW5zdGFsbGF0aW9uIHBhdGggY29ycmVzcG9uZGluZyB0byB0aGUgcGF0aCAqbmFtZSosIGZyb20gdGhlCisgICBpbnN0YWxsIHNjaGVtZSBuYW1lZCAqc2NoZW1lKi4KKworICAgKm5hbWUqIGhhcyB0byBiZSBhIHZhbHVlIGZyb20gdGhlIGxpc3QgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9wYXRoX25hbWVzYC4KKworICAgOm1vZDpgc3lzY29uZmlnYCBzdG9yZXMgaW5zdGFsbGF0aW9uIHBhdGhzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBwYXRoIG5hbWUsCisgICBmb3IgZWFjaCBwbGF0Zm9ybSwgd2l0aCB2YXJpYWJsZXMgdG8gYmUgZXhwYW5kZWQuICBGb3IgaW5zdGFuY2UgdGhlICpzdGRsaWIqCisgICBwYXRoIGZvciB0aGUgKm50KiBzY2hlbWUgaXM6IGBge2Jhc2V9L0xpYmBgLgorCisgICA6ZnVuYzpgZ2V0X3BhdGhgIHdpbGwgdXNlIHRoZSB2YXJpYWJsZXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9jb25maWdfdmFyc2AKKyAgIHRvIGV4cGFuZCB0aGUgcGF0aC4gIEFsbCB2YXJpYWJsZXMgaGF2ZSBkZWZhdWx0IHZhbHVlcyBmb3IgZWFjaCBwbGF0Zm9ybSBzbworICAgb25lIG1heSBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIGdldCB0aGUgZGVmYXVsdCB2YWx1ZS4KKworICAgSWYgKnNjaGVtZSogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSB2YWx1ZSBmcm9tIHRoZSBsaXN0IHJldHVybmVkIGJ5CisgICA6ZnVuYzpgZ2V0X3BhdGhfbmFtZXNgLiAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBzY2hlbWUgZm9yIHRoZSBjdXJyZW50CisgICBwbGF0Zm9ybSBpcyB1c2VkLgorCisgICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIHZhcmlhYmxlcyB0aGF0IHdpbGwgdXBkYXRlCisgICB0aGUgZGljdGlvbmFyeSByZXR1cm4gYnkgOmZ1bmM6YGdldF9jb25maWdfdmFyc2AuCisKKyAgIElmICpleHBhbmQqIGlzIHNldCB0byBgYEZhbHNlYGAsIHRoZSBwYXRoIHdpbGwgbm90IGJlIGV4cGFuZGVkIHVzaW5nIHRoZQorICAgdmFyaWFibGVzLgorCisgICBJZiAqbmFtZSogaXMgbm90IGZvdW5kLCByZXR1cm4gYGBOb25lYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGF0aHMoW3NjaGVtZSwgW3ZhcnMsIFtleHBhbmRdXV0pCisKKyAgIFJldHVybiBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBhbGwgaW5zdGFsbGF0aW9uIHBhdGhzIGNvcnJlc3BvbmRpbmcgdG8gYW4KKyAgIGluc3RhbGxhdGlvbiBzY2hlbWUuIFNlZSA6ZnVuYzpgZ2V0X3BhdGhgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBJZiAqc2NoZW1lKiBpcyBub3QgcHJvdmlkZWQsIHdpbGwgdXNlIHRoZSBkZWZhdWx0IHNjaGVtZSBmb3IgdGhlIGN1cnJlbnQKKyAgIHBsYXRmb3JtLgorCisgICBJZiAqdmFycyogaXMgcHJvdmlkZWQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIHZhcmlhYmxlcyB0aGF0IHdpbGwKKyAgIHVwZGF0ZSB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGV4cGFuZCB0aGUgcGF0aHMuCisKKyAgIElmICpleHBhbmQqIGlzIHNldCB0byBGYWxzZSwgdGhlIHBhdGhzIHdpbGwgbm90IGJlIGV4cGFuZGVkLgorCisgICBJZiAqc2NoZW1lKiBpcyBub3QgYW4gZXhpc3Rpbmcgc2NoZW1lLCA6ZnVuYzpgZ2V0X3BhdGhzYCB3aWxsIHJhaXNlIGEKKyAgIDpleGM6YEtleUVycm9yYC4KKworCitPdGhlciBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGdldF9weXRob25fdmVyc2lvbigpCisKKyAgIFJldHVybiB0aGUgYGBNQUpPUi5NSU5PUmBgIFB5dGhvbiB2ZXJzaW9uIG51bWJlciBhcyBhIHN0cmluZy4gIFNpbWlsYXIgdG8KKyAgIGBgc3lzLnZlcnNpb25bOjNdYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfcGxhdGZvcm0oKQorCisgICBSZXR1cm4gYSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBjdXJyZW50IHBsYXRmb3JtLgorCisgICBUaGlzIGlzIHVzZWQgbWFpbmx5IHRvIGRpc3Rpbmd1aXNoIHBsYXRmb3JtLXNwZWNpZmljIGJ1aWxkIGRpcmVjdG9yaWVzIGFuZAorICAgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbHQgZGlzdHJpYnV0aW9ucy4gIFR5cGljYWxseSBpbmNsdWRlcyB0aGUgT1MgbmFtZSBhbmQKKyAgIHZlcnNpb24gYW5kIHRoZSBhcmNoaXRlY3R1cmUgKGFzIHN1cHBsaWVkIGJ5IDpmdW5jOmBvcy51bmFtZWApLCBhbHRob3VnaCB0aGUKKyAgIGV4YWN0IGluZm9ybWF0aW9uIGluY2x1ZGVkIGRlcGVuZHMgb24gdGhlIE9TOyBlLmcuIGZvciBJUklYIHRoZSBhcmNoaXRlY3R1cmUKKyAgIGlzbid0IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgKElSSVggb25seSBydW5zIG9uIFNHSSBoYXJkd2FyZSksIGJ1dCBmb3IgTGludXgKKyAgIHRoZSBrZXJuZWwgdmVyc2lvbiBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50LgorCisgICBFeGFtcGxlcyBvZiByZXR1cm5lZCB2YWx1ZXM6CisKKyAgIC0gbGludXgtaTU4NgorICAgLSBsaW51eC1hbHBoYSAoPykKKyAgIC0gc29sYXJpcy0yLjYtc3VuNHUKKyAgIC0gaXJpeC01LjMKKyAgIC0gaXJpeDY0LTYuMgorCisgICBXaW5kb3dzIHdpbGwgcmV0dXJuIG9uZSBvZjoKKworICAgLSB3aW4tYW1kNjQgKDY0Yml0IFdpbmRvd3Mgb24gQU1ENjQgKGFrYSB4ODZfNjQsIEludGVsNjQsIEVNNjRULCBldGMpCisgICAtIHdpbi1pYTY0ICg2NGJpdCBXaW5kb3dzIG9uIEl0YW5pdW0pCisgICAtIHdpbjMyIChhbGwgb3RoZXJzIC0gc3BlY2lmaWNhbGx5LCBzeXMucGxhdGZvcm0gaXMgcmV0dXJuZWQpCisKKyAgIE1hYyBPUyBYIGNhbiByZXR1cm46CisKKyAgIC0gbWFjb3N4LTEwLjYtcHBjCisgICAtIG1hY29zeC0xMC40LXBwYzY0CisgICAtIG1hY29zeC0xMC4zLWkzODYKKyAgIC0gbWFjb3N4LTEwLjQtZmF0CisKKyAgIEZvciBvdGhlciBub24tUE9TSVggcGxhdGZvcm1zLCBjdXJyZW50bHkganVzdCByZXR1cm5zIDpkYXRhOmBzeXMucGxhdGZvcm1gLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfcHl0aG9uX2J1aWxkKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gd2FzIGJ1aWx0IGZyb20gc291cmNlLgorCisKKy4uIGZ1bmN0aW9uOjogcGFyc2VfY29uZmlnX2goZnBbLCB2YXJzXSkKKworICAgUGFyc2UgYSA6ZmlsZTpgY29uZmlnLmhgXC1zdHlsZSBmaWxlLgorCisgICAqZnAqIGlzIGEgZmlsZS1saWtlIG9iamVjdCBwb2ludGluZyB0byB0aGUgOmZpbGU6YGNvbmZpZy5oYFwtbGlrZSBmaWxlLgorCisgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBuYW1lL3ZhbHVlIHBhaXJzIGlzIHJldHVybmVkLiAgSWYgYW4gb3B0aW9uYWwKKyAgIGRpY3Rpb25hcnkgaXMgcGFzc2VkIGluIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGl0IGlzIHVzZWQgaW5zdGVhZCBvZiBhIG5ldworICAgZGljdGlvbmFyeSwgYW5kIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWVzIHJlYWQgaW4gdGhlIGZpbGUuCisKKworLi4gZnVuY3Rpb246OiBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQorCisgICBSZXR1cm4gdGhlIHBhdGggb2YgOmZpbGU6YHB5Y29uZmlnLmhgLgorCisuLiBmdW5jdGlvbjo6IGdldF9tYWtlZmlsZV9maWxlbmFtZSgpCisKKyAgIFJldHVybiB0aGUgcGF0aCBvZiA6ZmlsZTpgTWFrZWZpbGVgLgorCitVc2luZyA6bW9kOmBzeXNjb25maWdgIGFzIGEgc2NyaXB0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gdXNlIDptb2Q6YHN5c2NvbmZpZ2AgYXMgYSBzY3JpcHQgd2l0aCBQeXRob24ncyAqLW0qIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSBzeXNjb25maWcKKyAgICBQbGF0Zm9ybTogIm1hY29zeC0xMC40LWkzODYiCisgICAgUHl0aG9uIHZlcnNpb246ICIzLjIiCisgICAgQ3VycmVudCBpbnN0YWxsYXRpb24gc2NoZW1lOiAicG9zaXhfcHJlZml4IgorCisgICAgUGF0aHM6CisgICAgICAgICAgICBkYXRhID0gIi91c3IvbG9jYWwiCisgICAgICAgICAgICBpbmNsdWRlID0gIi9Vc2Vycy90YXJlay9EZXYvc3ZuLnB5dGhvbi5vcmcvcHkzay9JbmNsdWRlIgorICAgICAgICAgICAgcGxhdGluY2x1ZGUgPSAiLiIKKyAgICAgICAgICAgIHBsYXRsaWIgPSAiL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4yL3NpdGUtcGFja2FnZXMiCisgICAgICAgICAgICBwbGF0c3RkbGliID0gIi91c3IvbG9jYWwvbGliL3B5dGhvbjMuMiIKKyAgICAgICAgICAgIHB1cmVsaWIgPSAiL3Vzci9sb2NhbC9saWIvcHl0aG9uMy4yL3NpdGUtcGFja2FnZXMiCisgICAgICAgICAgICBzY3JpcHRzID0gIi91c3IvbG9jYWwvYmluIgorICAgICAgICAgICAgc3RkbGliID0gIi91c3IvbG9jYWwvbGliL3B5dGhvbjMuMiIKKworICAgIFZhcmlhYmxlczoKKyAgICAgICAgICAgIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCA9ICIwIgorICAgICAgICAgICAgQUlYX0dFTlVJTkVfQ1BMVVNQTFVTID0gIjAiCisgICAgICAgICAgICBBUiA9ICJhciIKKyAgICAgICAgICAgIEFSRkxBR1MgPSAicmMiCisgICAgICAgICAgICBBU0RMR0VOID0gIi4vUGFyc2VyL2FzZGxfYy5weSIKKyAgICAgICAgICAgIC4uLgorCitUaGlzIGNhbGwgd2lsbCBwcmludCBpbiB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBieQorOmZ1bmM6YGdldF9wbGF0Zm9ybWAsIDpmdW5jOmBnZXRfcHl0aG9uX3ZlcnNpb25gLCA6ZnVuYzpgZ2V0X3BhdGhgIGFuZAorOmZ1bmM6YGdldF9jb25maWdfdmFyc2AuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNsb2cucnN0IGIvRG9jL2xpYnJhcnkvc3lzbG9nLnJzdAppbmRleCA4OWRkMzhmLi5hM2IzNzRhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXNsb2cucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5c2xvZy5yc3QKQEAgLTEwLDQyICsxMCw2MyBAQAogUmVmZXIgdG8gdGhlIFVuaXggbWFudWFsIHBhZ2VzIGZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBgYHN5c2xvZ2BgCiBmYWNpbGl0eS4KIAorVGhpcyBtb2R1bGUgd3JhcHMgdGhlIHN5c3RlbSBgYHN5c2xvZ2BgIGZhbWlseSBvZiByb3V0aW5lcy4gIEEgcHVyZSBQeXRob24KK2xpYnJhcnkgdGhhdCBjYW4gc3BlYWsgdG8gYSBzeXNsb2cgc2VydmVyIGlzIGF2YWlsYWJsZSBpbiB0aGUKKzptb2Q6YGxvZ2dpbmcuaGFuZGxlcnNgIG1vZHVsZSBhcyA6Y2xhc3M6YFN5c0xvZ0hhbmRsZXJgLgorCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAKIAogLi4gZnVuY3Rpb246OiBzeXNsb2coW3ByaW9yaXR5LF0gbWVzc2FnZSkKIAotICAgU2VuZCB0aGUgc3RyaW5nICptZXNzYWdlKiB0byB0aGUgc3lzdGVtIGxvZ2dlci4gIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBhZGRlZCBpZgotICAgbmVjZXNzYXJ5LiAgRWFjaCBtZXNzYWdlIGlzIHRhZ2dlZCB3aXRoIGEgcHJpb3JpdHkgY29tcG9zZWQgb2YgYSAqZmFjaWxpdHkqIGFuZAotICAgYSAqbGV2ZWwqLiAgVGhlIG9wdGlvbmFsICpwcmlvcml0eSogYXJndW1lbnQsIHdoaWNoIGRlZmF1bHRzIHRvCi0gICA6Y29uc3Q6YExPR19JTkZPYCwgZGV0ZXJtaW5lcyB0aGUgbWVzc2FnZSBwcmlvcml0eS4gIElmIHRoZSBmYWNpbGl0eSBpcyBub3QKLSAgIGVuY29kZWQgaW4gKnByaW9yaXR5KiB1c2luZyBsb2dpY2FsLW9yIChgYExPR19JTkZPIHwgTE9HX1VTRVJgYCksIHRoZSB2YWx1ZQotICAgZ2l2ZW4gaW4gdGhlIDpmdW5jOmBvcGVubG9nYCBjYWxsIGlzIHVzZWQuCisgICBTZW5kIHRoZSBzdHJpbmcgKm1lc3NhZ2UqIHRvIHRoZSBzeXN0ZW0gbG9nZ2VyLiAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIGFkZGVkCisgICBpZiBuZWNlc3NhcnkuICBFYWNoIG1lc3NhZ2UgaXMgdGFnZ2VkIHdpdGggYSBwcmlvcml0eSBjb21wb3NlZCBvZiBhCisgICAqZmFjaWxpdHkqIGFuZCBhICpsZXZlbCouICBUaGUgb3B0aW9uYWwgKnByaW9yaXR5KiBhcmd1bWVudCwgd2hpY2ggZGVmYXVsdHMKKyAgIHRvIDpjb25zdDpgTE9HX0lORk9gLCBkZXRlcm1pbmVzIHRoZSBtZXNzYWdlIHByaW9yaXR5LiAgSWYgdGhlIGZhY2lsaXR5IGlzCisgICBub3QgZW5jb2RlZCBpbiAqcHJpb3JpdHkqIHVzaW5nIGxvZ2ljYWwtb3IgKGBgTE9HX0lORk8gfCBMT0dfVVNFUmBgKSwgdGhlCisgICB2YWx1ZSBnaXZlbiBpbiB0aGUgOmZ1bmM6YG9wZW5sb2dgIGNhbGwgaXMgdXNlZC4KKworICAgSWYgOmZ1bmM6YG9wZW5sb2dgIGhhcyBub3QgYmVlbiBjYWxsZWQgcHJpb3IgdG8gdGhlIGNhbGwgdG8gOmZ1bmM6YHN5c2xvZ2AsCisgICBgYG9wZW5sb2coKWBgIHdpbGwgYmUgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRzLgogCiAKLS4uIGZ1bmN0aW9uOjogb3BlbmxvZyhpZGVudFssIGxvZ29wdFssIGZhY2lsaXR5XV0pCisuLiBmdW5jdGlvbjo6IG9wZW5sb2coW2lkZW50WywgbG9nb3B0WywgZmFjaWxpdHldXV0pCiAKLSAgIExvZ2dpbmcgb3B0aW9ucyBvdGhlciB0aGFuIHRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGJ5IGV4cGxpY2l0bHkgb3BlbmluZyB0aGUgbG9nCi0gICBmaWxlIHdpdGggOmZ1bmM6YG9wZW5sb2dgIHByaW9yIHRvIGNhbGxpbmcgOmZ1bmM6YHN5c2xvZ2AuICBUaGUgZGVmYXVsdHMgYXJlCi0gICAodXN1YWxseSkgKmlkZW50KiA9IGBgJ3N5c2xvZydgYCwgKmxvZ29wdCogPSBgYDBgYCwgKmZhY2lsaXR5KiA9Ci0gICA6Y29uc3Q6YExPR19VU0VSYC4gIFRoZSAqaWRlbnQqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHdoaWNoIGlzIHByZXBlbmRlZCB0byBldmVyeQotICAgbWVzc2FnZS4gIFRoZSBvcHRpb25hbCAqbG9nb3B0KiBhcmd1bWVudCBpcyBhIGJpdCBmaWVsZCAtIHNlZSBiZWxvdyBmb3IgcG9zc2libGUKLSAgIHZhbHVlcyB0byBjb21iaW5lLiAgVGhlIG9wdGlvbmFsICpmYWNpbGl0eSogYXJndW1lbnQgc2V0cyB0aGUgZGVmYXVsdCBmYWNpbGl0eQotICAgZm9yIG1lc3NhZ2VzIHdoaWNoIGRvIG5vdCBoYXZlIGEgZmFjaWxpdHkgZXhwbGljaXRseSBlbmNvZGVkLgorICAgTG9nZ2luZyBvcHRpb25zIG9mIHN1YnNlcXVlbnQgOmZ1bmM6YHN5c2xvZ2AgY2FsbHMgY2FuIGJlIHNldCBieSBjYWxsaW5nCisgICA6ZnVuYzpgb3BlbmxvZ2AuICA6ZnVuYzpgc3lzbG9nYCB3aWxsIGNhbGwgOmZ1bmM6YG9wZW5sb2dgIHdpdGggbm8gYXJndW1lbnRzCisgICBpZiB0aGUgbG9nIGlzIG5vdCBjdXJyZW50bHkgb3Blbi4KKworICAgVGhlIG9wdGlvbmFsICppZGVudCoga2V5d29yZCBhcmd1bWVudCBpcyBhIHN0cmluZyB3aGljaCBpcyBwcmVwZW5kZWQgdG8gZXZlcnkKKyAgIG1lc3NhZ2UsIGFuZCBkZWZhdWx0cyB0byBgYHN5cy5hcmd2WzBdYGAgd2l0aCBsZWFkaW5nIHBhdGggY29tcG9uZW50cworICAgc3RyaXBwZWQuICBUaGUgb3B0aW9uYWwgKmxvZ29wdCoga2V5d29yZCBhcmd1bWVudCAoZGVmYXVsdCBpcyAwKSBpcyBhIGJpdAorICAgZmllbGQgLS0gc2VlIGJlbG93IGZvciBwb3NzaWJsZSB2YWx1ZXMgdG8gY29tYmluZS4gIFRoZSBvcHRpb25hbCAqZmFjaWxpdHkqCisgICBrZXl3b3JkIGFyZ3VtZW50IChkZWZhdWx0IGlzIDpjb25zdDpgTE9HX1VTRVJgKSBzZXRzIHRoZSBkZWZhdWx0IGZhY2lsaXR5IGZvcgorICAgbWVzc2FnZXMgd2hpY2ggZG8gbm90IGhhdmUgYSBmYWNpbGl0eSBleHBsaWNpdGx5IGVuY29kZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBJbiBwcmV2aW91cyB2ZXJzaW9ucywga2V5d29yZCBhcmd1bWVudHMgd2VyZSBub3QgYWxsb3dlZCwgYW5kICppZGVudCogd2FzCisgICAgICByZXF1aXJlZC4gIFRoZSBkZWZhdWx0IGZvciAqaWRlbnQqIHdhcyBkZXBlbmRlbnQgb24gdGhlIHN5c3RlbSBsaWJyYXJpZXMsCisgICAgICBhbmQgb2Z0ZW4gd2FzIGBgcHl0aG9uYGAgaW5zdGVhZCBvZiB0aGUgbmFtZSBvZiB0aGUgcHl0aG9uIHByb2dyYW0gZmlsZS4KIAogCiAuLiBmdW5jdGlvbjo6IGNsb3NlbG9nKCkKIAotICAgQ2xvc2UgdGhlIGxvZyBmaWxlLgorICAgUmVzZXQgdGhlIHN5c2xvZyBtb2R1bGUgdmFsdWVzIGFuZCBjYWxsIHRoZSBzeXN0ZW0gbGlicmFyeSBgYGNsb3NlbG9nKClgYC4KKworICAgVGhpcyBjYXVzZXMgdGhlIG1vZHVsZSB0byBiZWhhdmUgYXMgaXQgZG9lcyB3aGVuIGluaXRpYWxseSBpbXBvcnRlZC4gIEZvcgorICAgZXhhbXBsZSwgOmZ1bmM6YG9wZW5sb2dgIHdpbGwgYmUgY2FsbGVkIG9uIHRoZSBmaXJzdCA6ZnVuYzpgc3lzbG9nYCBjYWxsIChpZgorICAgOmZ1bmM6YG9wZW5sb2dgIGhhc24ndCBhbHJlYWR5IGJlZW4gY2FsbGVkKSwgYW5kICppZGVudCogYW5kIG90aGVyCisgICA6ZnVuYzpgb3BlbmxvZ2AgcGFyYW1ldGVycyBhcmUgcmVzZXQgdG8gZGVmYXVsdHMuCiAKIAogLi4gZnVuY3Rpb246OiBzZXRsb2dtYXNrKG1hc2twcmkpCiAKLSAgIFNldCB0aGUgcHJpb3JpdHkgbWFzayB0byAqbWFza3ByaSogYW5kIHJldHVybiB0aGUgcHJldmlvdXMgbWFzayB2YWx1ZS4gIENhbGxzIHRvCi0gICA6ZnVuYzpgc3lzbG9nYCB3aXRoIGEgcHJpb3JpdHkgbGV2ZWwgbm90IHNldCBpbiAqbWFza3ByaSogYXJlIGlnbm9yZWQuICBUaGUKLSAgIGRlZmF1bHQgaXMgdG8gbG9nIGFsbCBwcmlvcml0aWVzLiAgVGhlIGZ1bmN0aW9uIGBgTE9HX01BU0socHJpKWBgIGNhbGN1bGF0ZXMgdGhlCi0gICBtYXNrIGZvciB0aGUgaW5kaXZpZHVhbCBwcmlvcml0eSAqcHJpKi4gIFRoZSBmdW5jdGlvbiBgYExPR19VUFRPKHByaSlgYAotICAgY2FsY3VsYXRlcyB0aGUgbWFzayBmb3IgYWxsIHByaW9yaXRpZXMgdXAgdG8gYW5kIGluY2x1ZGluZyAqcHJpKi4KKyAgIFNldCB0aGUgcHJpb3JpdHkgbWFzayB0byAqbWFza3ByaSogYW5kIHJldHVybiB0aGUgcHJldmlvdXMgbWFzayB2YWx1ZS4gIENhbGxzCisgICB0byA6ZnVuYzpgc3lzbG9nYCB3aXRoIGEgcHJpb3JpdHkgbGV2ZWwgbm90IHNldCBpbiAqbWFza3ByaSogYXJlIGlnbm9yZWQuCisgICBUaGUgZGVmYXVsdCBpcyB0byBsb2cgYWxsIHByaW9yaXRpZXMuICBUaGUgZnVuY3Rpb24gYGBMT0dfTUFTSyhwcmkpYGAKKyAgIGNhbGN1bGF0ZXMgdGhlIG1hc2sgZm9yIHRoZSBpbmRpdmlkdWFsIHByaW9yaXR5ICpwcmkqLiAgVGhlIGZ1bmN0aW9uCisgICBgYExPR19VUFRPKHByaSlgYCBjYWxjdWxhdGVzIHRoZSBtYXNrIGZvciBhbGwgcHJpb3JpdGllcyB1cCB0byBhbmQgaW5jbHVkaW5nCisgICAqcHJpKi4KIAogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgogCkBAIC02MywzICs4NCwyNCBAQAogICAgOmNvbnN0OmBMT0dfUElEYCwgOmNvbnN0OmBMT0dfQ09OU2AsIDpjb25zdDpgTE9HX05ERUxBWWAsIDpjb25zdDpgTE9HX05PV0FJVGAKICAgIGFuZCA6Y29uc3Q6YExPR19QRVJST1JgIGlmIGRlZmluZWQgaW4gYGA8c3lzbG9nLmg+YGAuCiAKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK1NpbXBsZSBleGFtcGxlCit+fn5+fn5+fn5+fn5+fgorCitBIHNpbXBsZSBzZXQgb2YgZXhhbXBsZXM6OgorCisgICBpbXBvcnQgc3lzbG9nCisKKyAgIHN5c2xvZy5zeXNsb2coJ1Byb2Nlc3Npbmcgc3RhcnRlZCcpCisgICBpZiBlcnJvcjoKKyAgICAgICBzeXNsb2cuc3lzbG9nKHN5c2xvZy5MT0dfRVJSLCAnUHJvY2Vzc2luZyBzdGFydGVkJykKKworQW4gZXhhbXBsZSBvZiBzZXR0aW5nIHNvbWUgbG9nIG9wdGlvbnMsIHRoZXNlIHdvdWxkIGluY2x1ZGUgdGhlIHByb2Nlc3MgSUQgaW4KK2xvZ2dlZCBtZXNzYWdlcywgYW5kIHdyaXRlIHRoZSBtZXNzYWdlcyB0byB0aGUgZGVzdGluYXRpb24gZmFjaWxpdHkgdXNlZCBmb3IKK21haWwgbG9nZ2luZzo6CisKKyAgIHN5c2xvZy5vcGVubG9nKGxvZ29wdD1zeXNsb2cuTE9HX1BJRCwgZmFjaWxpdHk9c3lzbG9nLkxPR19NQUlMKQorICAgc3lzbG9nLnN5c2xvZygnRS1tYWlsIHByb2Nlc3NpbmcgaW5pdGlhdGVkLi4uJykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RhYm5hbm55LnJzdCBiL0RvYy9saWJyYXJ5L3RhYm5hbm55LnJzdAppbmRleCA1NDljZTM2Li40ZjNlNzA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90YWJuYW5ueS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGFibmFubnkucnN0CkBAIC05LDYgKzksMTAgQEAKIAogLi4gcnVkaW1lbnRhcnkgZG9jdW1lbnRhdGlvbiBiYXNlZCBvbiBtb2R1bGUgY29tbWVudHMKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGFibmFubnkucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIEZvciB0aGUgdGltZSBiZWluZyB0aGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgYXMgYSBzY3JpcHQuIEhvd2V2ZXIgaXQKIGlzIHBvc3NpYmxlIHRvIGltcG9ydCBpdCBpbnRvIGFuIElERSBhbmQgdXNlIHRoZSBmdW5jdGlvbiA6ZnVuYzpgY2hlY2tgCiBkZXNjcmliZWQgYmVsb3cuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CmluZGV4IGQ1YTUxMWUuLjliNzA3MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RhcmZpbGUucnN0CkBAIC04LDYgKzgsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogTGFycyBHdXN0w6RiZWwgPGxhcnNAZ3VzdGFlYmVsLmRlPgogLi4gc2VjdGlvbmF1dGhvcjo6IExhcnMgR3VzdMOkYmVsIDxsYXJzQGd1c3RhZWJlbC5kZT4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGFyZmlsZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWFkIGFuZCB3cml0ZSB0YXIKIGFyY2hpdmVzLCBpbmNsdWRpbmcgdGhvc2UgdXNpbmcgZ3ppcCBvciBiejIgY29tcHJlc3Npb24uCkBAIC0yMCw3ICsyMyw4IEBACiAqIHJlYWQvd3JpdGUgc3VwcG9ydCBmb3IgdGhlIFBPU0lYLjEtMTk4OCAodXN0YXIpIGZvcm1hdC4KIAogKiByZWFkL3dyaXRlIHN1cHBvcnQgZm9yIHRoZSBHTlUgdGFyIGZvcm1hdCBpbmNsdWRpbmcgKmxvbmduYW1lKiBhbmQgKmxvbmdsaW5rKgotICBleHRlbnNpb25zLCByZWFkLW9ubHkgc3VwcG9ydCBmb3IgdGhlICpzcGFyc2UqIGV4dGVuc2lvbi4KKyAgZXh0ZW5zaW9ucywgcmVhZC1vbmx5IHN1cHBvcnQgZm9yIGFsbCB2YXJpYW50cyBvZiB0aGUgKnNwYXJzZSogZXh0ZW5zaW9uCisgIGluY2x1ZGluZyByZXN0b3JhdGlvbiBvZiBzcGFyc2UgZmlsZXMuCiAKICogcmVhZC93cml0ZSBzdXBwb3J0IGZvciB0aGUgUE9TSVguMS0yMDAxIChwYXgpIGZvcm1hdC4KIApAQCAtMTg1LDggKzE4OSw4IEBACiAKIC4uIGRhdGE6OiBFTkNPRElORwogCi0gICBUaGUgZGVmYXVsdCBjaGFyYWN0ZXIgZW5jb2RpbmcgaS5lLiB0aGUgdmFsdWUgZnJvbSBlaXRoZXIKLSAgIDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCBvciA6ZnVuYzpgc3lzLmdldGRlZmF1bHRlbmNvZGluZ2AuCisgICBUaGUgZGVmYXVsdCBjaGFyYWN0ZXIgZW5jb2Rpbmc6IGBgJ3V0Zi04J2BgIG9uIFdpbmRvd3MsCisgICA6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2Agb3RoZXJ3aXNlLgogCiAKIC4uIHNlZWFsc286OgpAQCAtMjA5LDggKzIxMywxNiBAQAogYXJjaGl2ZSBzZXZlcmFsIHRpbWVzLiBFYWNoIGFyY2hpdmUgbWVtYmVyIGlzIHJlcHJlc2VudGVkIGJ5IGEgOmNsYXNzOmBUYXJJbmZvYAogb2JqZWN0LCBzZWUgOnJlZjpgdGFyaW5mby1vYmplY3RzYCBmb3IgZGV0YWlscy4KIAorQSA6Y2xhc3M6YFRhckZpbGVgIG9iamVjdCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBpbiBhIDprZXl3b3JkOmB3aXRoYAorc3RhdGVtZW50LiBJdCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY2xvc2VkIHdoZW4gdGhlIGJsb2NrIGlzIGNvbXBsZXRlZC4gUGxlYXNlCitub3RlIHRoYXQgaW4gdGhlIGV2ZW50IG9mIGFuIGV4Y2VwdGlvbiBhbiBhcmNoaXZlIG9wZW5lZCBmb3Igd3JpdGluZyB3aWxsIG5vdAorYmUgZmluYWxpemVkOyBvbmx5IHRoZSBpbnRlcm5hbGx5IHVzZWQgZmlsZSBvYmplY3Qgd2lsbCBiZSBjbG9zZWQuIFNlZSB0aGUKKzpyZWY6YHRhci1leGFtcGxlc2Agc2VjdGlvbiBmb3IgYSB1c2UgY2FzZS4KIAotLi4gY2xhc3M6OiBUYXJGaWxlKG5hbWU9Tm9uZSwgbW9kZT0ncicsIGZpbGVvYmo9Tm9uZSwgZm9ybWF0PURFRkFVTFRfRk9STUFULCB0YXJpbmZvPVRhckluZm8sIGRlcmVmZXJlbmNlPUZhbHNlLCBpZ25vcmVfemVyb3M9RmFsc2UsIGVuY29kaW5nPUVOQ09ESU5HLCBlcnJvcnM9Tm9uZSwgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9MCwgZXJyb3JsZXZlbD0wKQorLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLgorCisuLiBjbGFzczo6IFRhckZpbGUobmFtZT1Ob25lLCBtb2RlPSdyJywgZmlsZW9iaj1Ob25lLCBmb3JtYXQ9REVGQVVMVF9GT1JNQVQsIHRhcmluZm89VGFySW5mbywgZGVyZWZlcmVuY2U9RmFsc2UsIGlnbm9yZV96ZXJvcz1GYWxzZSwgZW5jb2Rpbmc9RU5DT0RJTkcsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJywgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9MCwgZXJyb3JsZXZlbD0wKQogCiAgICBBbGwgZm9sbG93aW5nIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwgYW5kIGNhbiBiZSBhY2Nlc3NlZCBhcyBpbnN0YW5jZSBhdHRyaWJ1dGVzCiAgICBhcyB3ZWxsLgpAQCAtMjU5LDYgKzI3MSw5IEBACiAgICB0byBiZSBoYW5kbGVkLiBUaGUgZGVmYXVsdCBzZXR0aW5ncyB3aWxsIHdvcmsgZm9yIG1vc3QgdXNlcnMuCiAgICBTZWUgc2VjdGlvbiA6cmVmOmB0YXItdW5pY29kZWAgZm9yIGluLWRlcHRoIGluZm9ybWF0aW9uLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVXNlIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCBhcyB0aGUgZGVmYXVsdCBmb3IgdGhlICplcnJvcnMqIGFyZ3VtZW50LgorCiAgICBUaGUgKnBheF9oZWFkZXJzKiBhcmd1bWVudCBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5IG9mIHN0cmluZ3Mgd2hpY2gKICAgIHdpbGwgYmUgYWRkZWQgYXMgYSBwYXggZ2xvYmFsIGhlYWRlciBpZiAqZm9ybWF0KiBpcyA6Y29uc3Q6YFBBWF9GT1JNQVRgLgogCkBAIC0zMjQsMTIgKzMzOSwxMyBAQAogICAgICAgZG90cyBgYCIuLiJgYC4KIAogCi0uLiBtZXRob2Q6OiBUYXJGaWxlLmV4dHJhY3QobWVtYmVyLCBwYXRoPSIiKQorLi4gbWV0aG9kOjogVGFyRmlsZS5leHRyYWN0KG1lbWJlciwgcGF0aD0iIiwgc2V0X2F0dHJzPVRydWUpCiAKICAgIEV4dHJhY3QgYSBtZW1iZXIgZnJvbSB0aGUgYXJjaGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgdXNpbmcgaXRzCiAgICBmdWxsIG5hbWUuIEl0cyBmaWxlIGluZm9ybWF0aW9uIGlzIGV4dHJhY3RlZCBhcyBhY2N1cmF0ZWx5IGFzIHBvc3NpYmxlLiAqbWVtYmVyKgogICAgbWF5IGJlIGEgZmlsZW5hbWUgb3IgYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdC4gWW91IGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50Ci0gICBkaXJlY3RvcnkgdXNpbmcgKnBhdGgqLgorICAgZGlyZWN0b3J5IHVzaW5nICpwYXRoKi4gRmlsZSBhdHRyaWJ1dGVzIChvd25lciwgbXRpbWUsIG1vZGUpIGFyZSBzZXQgdW5sZXNzCisgICAqc2V0X2F0dHJzKiBpcyBGYWxzZS4KIAogICAgLi4gbm90ZTo6CiAKQEAgLTM0MCw2ICszNTYsOCBAQAogCiAgICAgICBTZWUgdGhlIHdhcm5pbmcgZm9yIDptZXRoOmBleHRyYWN0YWxsYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIEFkZGVkIHRoZSAqc2V0X2F0dHJzKiBwYXJhbWV0ZXIuCiAKIC4uIG1ldGhvZDo6IFRhckZpbGUuZXh0cmFjdGZpbGUobWVtYmVyKQogCkBAIC0zNTUsMTUgKzM3MywyNyBAQAogICAgICAgYW5kIDptZXRoOmBjbG9zZWAsIGFuZCBhbHNvIHN1cHBvcnRzIGl0ZXJhdGlvbiBvdmVyIGl0cyBsaW5lcy4KIAogCi0uLiBtZXRob2Q6OiBUYXJGaWxlLmFkZChuYW1lLCBhcmNuYW1lPU5vbmUsIHJlY3Vyc2l2ZT1UcnVlLCBleGNsdWRlPU5vbmUpCisuLiBtZXRob2Q6OiBUYXJGaWxlLmFkZChuYW1lLCBhcmNuYW1lPU5vbmUsIHJlY3Vyc2l2ZT1UcnVlLCBleGNsdWRlPU5vbmUsICosIGZpbHRlcj1Ob25lKQogCi0gICBBZGQgdGhlIGZpbGUgKm5hbWUqIHRvIHRoZSBhcmNoaXZlLiAqbmFtZSogbWF5IGJlIGFueSB0eXBlIG9mIGZpbGUgKGRpcmVjdG9yeSwKLSAgIGZpZm8sIHN5bWJvbGljIGxpbmssIGV0Yy4pLiBJZiBnaXZlbiwgKmFyY25hbWUqIHNwZWNpZmllcyBhbiBhbHRlcm5hdGl2ZSBuYW1lCi0gICBmb3IgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUuIERpcmVjdG9yaWVzIGFyZSBhZGRlZCByZWN1cnNpdmVseSBieSBkZWZhdWx0LiBUaGlzCi0gICBjYW4gYmUgYXZvaWRlZCBieSBzZXR0aW5nICpyZWN1cnNpdmUqIHRvIDpjb25zdDpgRmFsc2VgLiBJZiAqZXhjbHVkZSogaXMgZ2l2ZW4sCi0gICBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBvbmUgZmlsZW5hbWUgYXJndW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuCi0gICB2YWx1ZS4gRGVwZW5kaW5nIG9uIHRoaXMgdmFsdWUgdGhlIHJlc3BlY3RpdmUgZmlsZSBpcyBlaXRoZXIgZXhjbHVkZWQKLSAgICg6Y29uc3Q6YFRydWVgKSBvciBhZGRlZCAoOmNvbnN0OmBGYWxzZWApLgorICAgQWRkIHRoZSBmaWxlICpuYW1lKiB0byB0aGUgYXJjaGl2ZS4gKm5hbWUqIG1heSBiZSBhbnkgdHlwZSBvZiBmaWxlCisgICAoZGlyZWN0b3J5LCBmaWZvLCBzeW1ib2xpYyBsaW5rLCBldGMuKS4gSWYgZ2l2ZW4sICphcmNuYW1lKiBzcGVjaWZpZXMgYW4KKyAgIGFsdGVybmF0aXZlIG5hbWUgZm9yIHRoZSBmaWxlIGluIHRoZSBhcmNoaXZlLiBEaXJlY3RvcmllcyBhcmUgYWRkZWQKKyAgIHJlY3Vyc2l2ZWx5IGJ5IGRlZmF1bHQuIFRoaXMgY2FuIGJlIGF2b2lkZWQgYnkgc2V0dGluZyAqcmVjdXJzaXZlKiB0bworICAgOmNvbnN0OmBGYWxzZWAuIElmICpleGNsdWRlKiBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgb25lCisgICBmaWxlbmFtZSBhcmd1bWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuIERlcGVuZGluZyBvbiB0aGlzIHZhbHVlIHRoZQorICAgcmVzcGVjdGl2ZSBmaWxlIGlzIGVpdGhlciBleGNsdWRlZCAoOmNvbnN0OmBUcnVlYCkgb3IgYWRkZWQKKyAgICg6Y29uc3Q6YEZhbHNlYCkuIElmICpmaWx0ZXIqIGlzIHNwZWNpZmllZCBpdCBtdXN0IGJlIGEga2V5d29yZCBhcmd1bWVudC4gIEl0CisgICBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QgYXJndW1lbnQgYW5kCisgICByZXR1cm5zIHRoZSBjaGFuZ2VkIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0LiBJZiBpdCBpbnN0ZWFkIHJldHVybnMKKyAgIDpjb25zdDpgTm9uZWAgdGhlIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0IHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyAgIGFyY2hpdmUuIFNlZSA6cmVmOmB0YXItZXhhbXBsZXNgIGZvciBhbiBleGFtcGxlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICpmaWx0ZXIqIHBhcmFtZXRlci4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgVGhlICpleGNsdWRlKiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSB0aGUgKmZpbHRlciogcGFyYW1ldGVyCisgICAgICBpbnN0ZWFkLgogCiAKIC4uIG1ldGhvZDo6IFRhckZpbGUuYWRkZmlsZSh0YXJpbmZvLCBmaWxlb2JqPU5vbmUpCkBAIC00MzAsMTEgKzQ2MCwxNCBAQAogICAgYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdC4KIAogCi0uLiBtZXRob2Q6OiBUYXJJbmZvLnRvYnVmKGZvcm1hdD1ERUZBVUxUX0ZPUk1BVCwgZW5jb2Rpbmc9RU5DT0RJTkcsIGVycm9ycz0nc3RyaWN0JykKKy4uIG1ldGhvZDo6IFRhckluZm8udG9idWYoZm9ybWF0PURFRkFVTFRfRk9STUFULCBlbmNvZGluZz1FTkNPRElORywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQogCiAgICBDcmVhdGUgYSBzdHJpbmcgYnVmZmVyIGZyb20gYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdC4gRm9yIGluZm9ybWF0aW9uIG9uIHRoZQogICAgYXJndW1lbnRzIHNlZSB0aGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgVGFyRmlsZWAgY2xhc3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBVc2UgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgKmVycm9ycyogYXJndW1lbnQuCisKIAogQSBgYFRhckluZm9gYCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgcHVibGljIGRhdGEgYXR0cmlidXRlczoKIApAQCAtNTgyLDYgKzYxNSwxMyBAQAogICAgICAgIHRhci5hZGQobmFtZSkKICAgIHRhci5jbG9zZSgpCiAKK1RoZSBzYW1lIGV4YW1wbGUgdXNpbmcgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQ6OgorCisgICAgaW1wb3J0IHRhcmZpbGUKKyAgICB3aXRoIHRhcmZpbGUub3Blbigic2FtcGxlLnRhciIsICJ3IikgYXMgdGFyOgorICAgICAgICBmb3IgbmFtZSBpbiBbImZvbyIsICJiYXIiLCAicXV1eCJdOgorICAgICAgICAgICAgdGFyLmFkZChuYW1lKQorCiBIb3cgdG8gcmVhZCBhIGd6aXAgY29tcHJlc3NlZCB0YXIgYXJjaGl2ZSBhbmQgZGlzcGxheSBzb21lIG1lbWJlciBpbmZvcm1hdGlvbjo6CiAKICAgIGltcG9ydCB0YXJmaWxlCkBAIC01OTYsNiArNjM2LDE4IEBACiAgICAgICAgICAgIHByaW50KCJzb21ldGhpbmcgZWxzZS4iKQogICAgdGFyLmNsb3NlKCkKIAorSG93IHRvIGNyZWF0ZSBhbiBhcmNoaXZlIGFuZCByZXNldCB0aGUgdXNlciBpbmZvcm1hdGlvbiB1c2luZyB0aGUgKmZpbHRlcioKK3BhcmFtZXRlciBpbiA6bWV0aDpgVGFyRmlsZS5hZGRgOjoKKworICAgIGltcG9ydCB0YXJmaWxlCisgICAgZGVmIHJlc2V0KHRhcmluZm8pOgorICAgICAgICB0YXJpbmZvLnVpZCA9IHRhcmluZm8uZ2lkID0gMAorICAgICAgICB0YXJpbmZvLnVuYW1lID0gdGFyaW5mby5nbmFtZSA9ICJyb290IgorICAgICAgICByZXR1cm4gdGFyaW5mbworICAgIHRhciA9IHRhcmZpbGUub3Blbigic2FtcGxlLnRhci5neiIsICJ3Omd6IikKKyAgICB0YXIuYWRkKCJmb28iLCBmaWx0ZXI9cmVzZXQpCisgICAgdGFyLmNsb3NlKCkKKwogCiAuLiBfdGFyLWZvcm1hdHM6CiAKQEAgLTY2MywxMSArNzE1LDEyIEBACiBhcHByb3ByaWF0ZWx5LCB0aGlzIGNvbnZlcnNpb24gbWF5IGZhaWwuCiAKIFRoZSAqZXJyb3JzKiBhcmd1bWVudCBkZWZpbmVzIGhvdyBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIHRoYXQgY2Fubm90IGJlCi1jb252ZXJ0ZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgbGlzdGVkIGluIHNlY3Rpb24gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYC4gSW4KLXJlYWQgbW9kZSB0aGUgZGVmYXVsdCBzY2hlbWUgaXMgYGAncmVwbGFjZSdgYC4gVGhpcyBhdm9pZHMgdW5leHBlY3RlZAotOmV4YzpgVW5pY29kZUVycm9yYCBleGNlcHRpb25zIGFuZCBndWFyYW50ZWVzIHRoYXQgYW4gYXJjaGl2ZSBjYW4gYWx3YXlzIGJlCi1yZWFkLiBJbiB3cml0ZSBtb2RlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciAqZXJyb3JzKiBpcyBgYCdzdHJpY3QnYGAuICBUaGlzCi1lbnN1cmVzIHRoYXQgbmFtZSBpbmZvcm1hdGlvbiBpcyBub3QgYWx0ZXJlZCB1bm5vdGljZWQuCitjb252ZXJ0ZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgbGlzdGVkIGluIHNlY3Rpb24gOnJlZjpgY29kZWMtYmFzZS1jbGFzc2VzYC4KK1RoZSBkZWZhdWx0IHNjaGVtZSBpcyBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgd2hpY2ggUHl0aG9uIGFsc28gdXNlcyBmb3IgaXRzCitmaWxlIHN5c3RlbSBjYWxscywgc2VlIDpyZWY6YG9zLWZpbGVuYW1lc2AuCiAKLUluIGNhc2Ugb2Ygd3JpdGluZyA6Y29uc3Q6YFBBWF9GT1JNQVRgIGFyY2hpdmVzLCAqZW5jb2RpbmcqIGlzIGlnbm9yZWQgYmVjYXVzZQotbm9uLUFTQ0lJIG1ldGFkYXRhIGlzIHN0b3JlZCB1c2luZyAqVVRGLTgqLgorSW4gY2FzZSBvZiA6Y29uc3Q6YFBBWF9GT1JNQVRgIGFyY2hpdmVzLCAqZW5jb2RpbmcqIGlzIGdlbmVyYWxseSBub3QgbmVlZGVkCitiZWNhdXNlIGFsbCB0aGUgbWV0YWRhdGEgaXMgc3RvcmVkIHVzaW5nICpVVEYtOCouICplbmNvZGluZyogaXMgb25seSB1c2VkIGluCit0aGUgcmFyZSBjYXNlcyB3aGVuIGJpbmFyeSBwYXggaGVhZGVycyBhcmUgZGVjb2RlZCBvciB3aGVuIHN0cmluZ3Mgd2l0aAorc3Vycm9nYXRlIGNoYXJhY3RlcnMgYXJlIHN0b3JlZC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKaW5kZXggNmUzYWJkZS4uNjQ2NjM0ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CkBAIC04LDYgKzgsMTAgQEAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IHByb3RvY29sOyBUZWxuZXQKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGVsbmV0bGliLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGUgOm1vZDpgdGVsbmV0bGliYCBtb2R1bGUgcHJvdmlkZXMgYSA6Y2xhc3M6YFRlbG5ldGAgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZQogVGVsbmV0IHByb3RvY29sLiAgU2VlIDpyZmM6YDg1NGAgZm9yIGRldGFpbHMgYWJvdXQgdGhlIHByb3RvY29sLiBJbiBhZGRpdGlvbiwgaXQKIHByb3ZpZGVzIHN5bWJvbGljIGNvbnN0YW50cyBmb3IgdGhlIHByb3RvY29sIGNoYXJhY3RlcnMgKHNlZSBiZWxvdyksIGFuZCBmb3IgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QKaW5kZXggYTEzZGYwZC4uMDEwOTJmYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVtcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RlbXBmaWxlLnJzdApAQCAtMTIsNiArMTIsMTAgQEAKICAgIHBhaXI6IHRlbXBvcmFyeTsgZmlsZSBuYW1lCiAgICBwYWlyOiB0ZW1wb3Jhcnk7IGZpbGUKIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdGVtcGZpbGUucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFRoaXMgbW9kdWxlIGdlbmVyYXRlcyB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgSXQgd29ya3Mgb24gYWxsCiBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAgSXQgcHJvdmlkZXMgdGhyZWUgbmV3IGZ1bmN0aW9ucywKIDpmdW5jOmBOYW1lZFRlbXBvcmFyeUZpbGVgLCA6ZnVuYzpgbWtzdGVtcGAsIGFuZCA6ZnVuYzpgbWtkdGVtcGAsIHdoaWNoIHNob3VsZApAQCAtMjUsNyArMjksNyBAQAogVG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIGFyZ3VtZW50IG9yZGVyIGlzIHNvbWV3aGF0IG9kZDsgaXQKIGlzIHJlY29tbWVuZGVkIHRvIHVzZSBrZXl3b3JkIGFyZ3VtZW50cyBmb3IgY2xhcml0eS4KIAotVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgdXNlci1jYWxsYWJsZSBmdW5jdGlvbnM6CitUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyB1c2VyLWNhbGxhYmxlIGl0ZW1zOgogCiAuLiBmdW5jdGlvbjo6IFRlbXBvcmFyeUZpbGUobW9kZT0ndytiJywgYnVmZmVyaW5nPU5vbmUsIGVuY29kaW5nPU5vbmUsIG5ld2xpbmU9Tm9uZSwgc3VmZml4PScnLCBwcmVmaXg9J3RtcCcsIGRpcj1Ob25lKQogCkBAIC04Myw2ICs4NywyNCBAQAogICAgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIGp1c3QgbGlrZSBhIG5vcm1hbCBmaWxlLgogCiAKKy4uIGZ1bmN0aW9uOjogVGVtcG9yYXJ5RGlyZWN0b3J5KHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSkKKworICAgVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2luZyA6ZnVuYzpgbWtkdGVtcGAKKyAgICh0aGUgc3VwcGxpZWQgYXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24pLgorICAgVGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgKHNlZQorICAgOnJlZjpgY29udGV4dC1tYW5hZ2Vyc2ApLiAgT24gY29tcGxldGlvbiBvZiB0aGUgY29udGV4dCAob3IgZGVzdHJ1Y3Rpb24KKyAgIG9mIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IG9iamVjdCksIHRoZSBuZXdseSBjcmVhdGVkIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgIGFuZCBhbGwgaXRzIGNvbnRlbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIGZpbGVzeXN0ZW0uCisKKyAgIFRoZSBkaXJlY3RvcnkgbmFtZSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlIDphdHRyOmBuYW1lYCBtZW1iZXIKKyAgIG9mIHRoZSByZXR1cm5lZCBvYmplY3QuCisKKyAgIFRoZSBkaXJlY3RvcnkgY2FuIGJlIGV4cGxpY2l0bHkgY2xlYW5lZCB1cCBieSBjYWxsaW5nIHRoZQorICAgOmZ1bmM6YGNsZWFudXBgIG1ldGhvZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBta3N0ZW1wKHN1ZmZpeD0nJywgcHJlZml4PSd0bXAnLCBkaXI9Tm9uZSwgdGV4dD1GYWxzZSkKIAogICAgQ3JlYXRlcyBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBtb3N0IHNlY3VyZSBtYW5uZXIgcG9zc2libGUuICBUaGVyZSBhcmUKQEAgLTIxMCwzICsyMzIsMzYgQEAKICAgIFJldHVybiB0aGUgZmlsZW5hbWUgcHJlZml4IHVzZWQgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlcy4gIFRoaXMgZG9lcyBub3QKICAgIGNvbnRhaW4gdGhlIGRpcmVjdG9yeSBjb21wb25lbnQuCiAKKworRXhhbXBsZXMKKy0tLS0tLS0tCisKK0hlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdHlwaWNhbCB1c2FnZSBvZiB0aGUgOm1vZDpgdGVtcGZpbGVgIG1vZHVsZTo6CisKKyAgICA+Pj4gaW1wb3J0IHRlbXBmaWxlCisKKyAgICAjIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIGFuZCB3cml0ZSBzb21lIGRhdGEgdG8gaXQKKyAgICA+Pj4gZnAgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICA+Pj4gZnAud3JpdGUoYidIZWxsbyB3b3JsZCEnKQorICAgICMgcmVhZCBkYXRhIGZyb20gZmlsZQorICAgID4+PiBmcC5zZWVrKDApCisgICAgPj4+IGZwLnJlYWQoKQorICAgIGInSGVsbG8gd29ybGQhJworICAgICMgY2xvc2UgdGhlIGZpbGUsIGl0IHdpbGwgYmUgcmVtb3ZlZAorICAgID4+PiBmcC5jbG9zZSgpCisKKyAgICAjIGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlIHVzaW5nIGEgY29udGV4dCBtYW5hZ2VyCisgICAgPj4+IHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpIGFzIGZwOgorICAgIC4uLiAgICAgZnAud3JpdGUoYidIZWxsbyB3b3JsZCEnKQorICAgIC4uLiAgICAgZnAuc2VlaygwKQorICAgIC4uLiAgICAgZnAucmVhZCgpCisgICAgYidIZWxsbyB3b3JsZCEnCisgICAgPj4+CisgICAgIyBmaWxlIGlzIG5vdyBjbG9zZWQgYW5kIHJlbW92ZWQKKworICAgICMgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB1c2luZyB0aGUgY29udGV4dCBtYW5hZ2VyCisgICAgPj4+IHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlybmFtZToKKyAgICAuLi4gICAgIHByaW50KCdjcmVhdGVkIHRlbXBvcmFyeSBkaXJlY3RvcnknLCB0bXBkaXJuYW1lKQorICAgID4+PgorICAgICMgZGlyZWN0b3J5IGFuZCBjb250ZW50cyBoYXZlIGJlZW4gcmVtb3ZlZAorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CmluZGV4IDEyZjRjMTMuLjlkMDJiMGEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rlc3QucnN0CkBAIC01LDcgKzUsNyBAQAogICAgOnN5bm9wc2lzOiBSZWdyZXNzaW9uIHRlc3RzIHBhY2thZ2UgY29udGFpbmluZyB0aGUgdGVzdGluZyBzdWl0ZSBmb3IgUHl0aG9uLgogLi4gc2VjdGlvbmF1dGhvcjo6IEJyZXR0IENhbm5vbiA8YnJldHRAcHl0aG9uLm9yZz4KIAotLi4gd2FybmluZzo6CisuLiBub3RlOjoKICAgIFRoZSA6bW9kOmB0ZXN0YCBwYWNrYWdlIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2UgYnkgUHl0aG9uIG9ubHkuIEl0IGlzCiAgICBkb2N1bWVudGVkIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgY29yZSBkZXZlbG9wZXJzIG9mIFB5dGhvbi4gQW55IHVzZSBvZgogICAgdGhpcyBwYWNrYWdlIG91dHNpZGUgb2YgUHl0aG9uJ3Mgc3RhbmRhcmQgbGlicmFyeSBpcyBkaXNjb3VyYWdlZCBhcyBjb2RlCkBAIC05NiwxNyArOTYsMTcgQEAKIGd1aWRlbGluZXMgdG8gYmUgZm9sbG93ZWQ6CiAKICogVGhlIHRlc3Rpbmcgc3VpdGUgc2hvdWxkIGV4ZXJjaXNlIGFsbCBjbGFzc2VzLCBmdW5jdGlvbnMsIGFuZCBjb25zdGFudHMuIFRoaXMKLSAgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGV4dGVybmFsIEFQSSB0aGF0IGlzIHRvIGJlIHByZXNlbnRlZCB0byB0aGUgb3V0c2lkZSB3b3JsZAotICBidXQgYWxzbyAicHJpdmF0ZSIgY29kZS4KKyAgaW5jbHVkZXMgbm90IGp1c3QgdGhlIGV4dGVybmFsIEFQSSB0aGF0IGlzIHRvIGJlIHByZXNlbnRlZCB0byB0aGUgb3V0c2lkZQorICB3b3JsZCBidXQgYWxzbyAicHJpdmF0ZSIgY29kZS4KIAogKiBXaGl0ZWJveCB0ZXN0aW5nIChleGFtaW5pbmcgdGhlIGNvZGUgYmVpbmcgdGVzdGVkIHdoZW4gdGhlIHRlc3RzIGFyZSBiZWluZwogICB3cml0dGVuKSBpcyBwcmVmZXJyZWQuIEJsYWNrYm94IHRlc3RpbmcgKHRlc3Rpbmcgb25seSB0aGUgcHVibGlzaGVkIHVzZXIKLSAgaW50ZXJmYWNlKSBpcyBub3QgY29tcGxldGUgZW5vdWdoIHRvIG1ha2Ugc3VyZSBhbGwgYm91bmRhcnkgYW5kIGVkZ2UgY2FzZXMgYXJlCi0gIHRlc3RlZC4KKyAgaW50ZXJmYWNlKSBpcyBub3QgY29tcGxldGUgZW5vdWdoIHRvIG1ha2Ugc3VyZSBhbGwgYm91bmRhcnkgYW5kIGVkZ2UgY2FzZXMKKyAgYXJlIHRlc3RlZC4KIAogKiBNYWtlIHN1cmUgYWxsIHBvc3NpYmxlIHZhbHVlcyBhcmUgdGVzdGVkIGluY2x1ZGluZyBpbnZhbGlkIG9uZXMuIFRoaXMgbWFrZXMKLSAgc3VyZSB0aGF0IG5vdCBvbmx5IGFsbCB2YWxpZCB2YWx1ZXMgYXJlIGFjY2VwdGFibGUgYnV0IGFsc28gdGhhdCBpbXByb3BlciB2YWx1ZXMKLSAgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICBzdXJlIHRoYXQgbm90IG9ubHkgYWxsIHZhbGlkIHZhbHVlcyBhcmUgYWNjZXB0YWJsZSBidXQgYWxzbyB0aGF0IGltcHJvcGVyCisgIHZhbHVlcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCiAKICogRXhoYXVzdCBhcyBtYW55IGNvZGUgcGF0aHMgYXMgcG9zc2libGUuIFRlc3Qgd2hlcmUgYnJhbmNoaW5nIG9jY3VycyBhbmQgdGh1cwogICB0YWlsb3IgaW5wdXQgdG8gbWFrZSBzdXJlIGFzIG1hbnkgZGlmZmVyZW50IHBhdGhzIHRocm91Z2ggdGhlIGNvZGUgYXJlIHRha2VuLgpAQCAtMTI2LDggKzEyNiw4IEBACiAgIGJlaGF2aW9yIGZyb20gc2lkZS1lZmZlY3RzIG9mIGltcG9ydGluZyBhIG1vZHVsZS4KIAogKiBUcnkgdG8gbWF4aW1pemUgY29kZSByZXVzZS4gT24gb2NjYXNpb24sIHRlc3RzIHdpbGwgdmFyeSBieSBzb21ldGhpbmcgYXMgc21hbGwKLSAgYXMgd2hhdCB0eXBlIG9mIGlucHV0IGlzIHVzZWQuIE1pbmltaXplIGNvZGUgZHVwbGljYXRpb24gYnkgc3ViY2xhc3NpbmcgYSBiYXNpYwotICB0ZXN0IGNsYXNzIHdpdGggYSBjbGFzcyB0aGF0IHNwZWNpZmllcyB0aGUgaW5wdXQ6OgorICBhcyB3aGF0IHR5cGUgb2YgaW5wdXQgaXMgdXNlZC4gTWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBieSBzdWJjbGFzc2luZyBhCisgIGJhc2ljIHRlc3QgY2xhc3Mgd2l0aCBhIGNsYXNzIHRoYXQgc3BlY2lmaWVzIHRoZSBpbnB1dDo6CiAKICAgICAgY2xhc3MgVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTM3LDEzICsxMzcsMTMgQEAKICAgICAgICAgICAgICBzZWxmLmZ1bmMoc2VsZi5hcmcpCiAKICAgICAgY2xhc3MgQWNjZXB0TGlzdHMoVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKToKLSAgICAgICAgIGFyZyA9IFsxLDIsM10KKyAgICAgICAgIGFyZyA9IFsxLCAyLCAzXQogCiAgICAgIGNsYXNzIEFjY2VwdFN0cmluZ3MoVGVzdEZ1bmNBY2NlcHRzU2VxdWVuY2VzKToKICAgICAgICAgIGFyZyA9ICdhYmMnCiAKICAgICAgY2xhc3MgQWNjZXB0VHVwbGVzKFRlc3RGdW5jQWNjZXB0c1NlcXVlbmNlcyk6Ci0gICAgICAgICBhcmcgPSAoMSwyLDMpCisgICAgICAgICBhcmcgPSAoMSwgMiwgMykKIAogCiAuLiBzZWVhbHNvOjoKQEAgLTE1NywzMiArMTU3LDM0IEBACiBSdW5uaW5nIHRlc3RzIHVzaW5nIHRoZSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCBtb2R1bGUgY2FuIGJlIHJ1biBhcyBhIHNjcmlwdCB0byBkcml2ZSBQeXRob24ncyByZWdyZXNzaW9uCi10ZXN0IHN1aXRlLCB0aGFua3MgdG8gdGhlIDpvcHRpb246YC1tYCBvcHRpb246IDpwcm9ncmFtOmBweXRob24gLW0gdGVzdC5yZWdydGVzdGAuCitUaGUgOm1vZDpgdGVzdGAgcGFja2FnZSBjYW4gYmUgcnVuIGFzIGEgc2NyaXB0IHRvIGRyaXZlIFB5dGhvbidzIHJlZ3Jlc3Npb24KK3Rlc3Qgc3VpdGUsIHRoYW5rcyB0byB0aGUgOm9wdGlvbjpgLW1gIG9wdGlvbjogOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0YC4gVW5kZXIKK3RoZSBob29kLCBpdCB1c2VzIDptb2Q6YHRlc3QucmVncnRlc3RgOyB0aGUgY2FsbCA6cHJvZ3JhbTpgcHl0aG9uIC1tCit0ZXN0LnJlZ3J0ZXN0YCB1c2VkIGluIHByZXZpb3VzIFB5dGhvbiB2ZXJzaW9ucyBzdGlsbCB3b3JrcykuCiBSdW5uaW5nIHRoZSBzY3JpcHQgYnkgaXRzZWxmIGF1dG9tYXRpY2FsbHkgc3RhcnRzIHJ1bm5pbmcgYWxsIHJlZ3Jlc3Npb24KIHRlc3RzIGluIHRoZSA6bW9kOmB0ZXN0YCBwYWNrYWdlLiBJdCBkb2VzIHRoaXMgYnkgZmluZGluZyBhbGwgbW9kdWxlcyBpbiB0aGUKIHBhY2thZ2Ugd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBgYHRlc3RfYGAsIGltcG9ydGluZyB0aGVtLCBhbmQgZXhlY3V0aW5nIHRoZQotZnVuY3Rpb24gOmZ1bmM6YHRlc3RfbWFpbmAgaWYgcHJlc2VudC4gVGhlIG5hbWVzIG9mIHRlc3RzIHRvIGV4ZWN1dGUgbWF5IGFsc28gYmUKLXBhc3NlZCB0byB0aGUgc2NyaXB0LiBTcGVjaWZ5aW5nIGEgc2luZ2xlIHJlZ3Jlc3Npb24gdGVzdCAoOnByb2dyYW06YHB5dGhvbgotLW0gdGVzdC5yZWdydGVzdCB0ZXN0X3NwYW1gKSB3aWxsIG1pbmltaXplIG91dHB1dCBhbmQgb25seSBwcmludCB3aGV0aGVyCi10aGUgdGVzdCBwYXNzZWQgb3IgZmFpbGVkIGFuZCB0aHVzIG1pbmltaXplIG91dHB1dC4KK2Z1bmN0aW9uIDpmdW5jOmB0ZXN0X21haW5gIGlmIHByZXNlbnQuIFRoZSBuYW1lcyBvZiB0ZXN0cyB0byBleGVjdXRlIG1heSBhbHNvCitiZSBwYXNzZWQgdG8gdGhlIHNjcmlwdC4gU3BlY2lmeWluZyBhIHNpbmdsZSByZWdyZXNzaW9uIHRlc3QgKDpwcm9ncmFtOmBweXRob24KKy1tIHRlc3QgdGVzdF9zcGFtYCkgd2lsbCBtaW5pbWl6ZSBvdXRwdXQgYW5kIG9ubHkgcHJpbnQKK3doZXRoZXIgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBhbmQgdGh1cyBtaW5pbWl6ZSBvdXRwdXQuCiAKLVJ1bm5pbmcgOm1vZDpgdGVzdC5yZWdydGVzdGAgZGlyZWN0bHkgYWxsb3dzIHdoYXQgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yCi10ZXN0cyB0byB1c2UgdG8gYmUgc2V0LiBZb3UgZG8gdGhpcyBieSB1c2luZyB0aGUgOm9wdGlvbjpgLXVgIGNvbW1hbmQtbGluZQotb3B0aW9uLiBSdW4gOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0IC11YWxsYCB0byB0dXJuIG9uIGFsbAorUnVubmluZyA6bW9kOmB0ZXN0YCBkaXJlY3RseSBhbGxvd3Mgd2hhdCByZXNvdXJjZXMgYXJlIGF2YWlsYWJsZSBmb3IKK3Rlc3RzIHRvIHVzZSB0byBiZSBzZXQuIFlvdSBkbyB0aGlzIGJ5IHVzaW5nIHRoZSBgYC11YGAgY29tbWFuZC1saW5lCitvcHRpb24uIFJ1biA6cHJvZ3JhbTpgcHl0aG9uIC1tIHRlc3QgLXVhbGxgIHRvIHR1cm4gb24gYWxsCiByZXNvdXJjZXM7IHNwZWNpZnlpbmcgYGBhbGxgYCBhcyBhbiBvcHRpb24gZm9yIGBgLXVgYCBlbmFibGVzIGFsbAogcG9zc2libGUgcmVzb3VyY2VzLiBJZiBhbGwgYnV0IG9uZSByZXNvdXJjZSBpcyBkZXNpcmVkIChhIG1vcmUgY29tbW9uIGNhc2UpLCBhCiBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiByZXNvdXJjZXMgdGhhdCBhcmUgbm90IGRlc2lyZWQgbWF5IGJlIGxpc3RlZCBhZnRlcgotYGBhbGxgYC4gVGhlIGNvbW1hbmQgOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0LnJlZ3J0ZXN0IC11YWxsLC1hdWRpbywtbGFyZ2VmaWxlYAotd2lsbCBydW4gOm1vZDpgdGVzdC5yZWdydGVzdGAgd2l0aCBhbGwgcmVzb3VyY2VzIGV4Y2VwdCB0aGUgYGBhdWRpb2BgIGFuZAorYGBhbGxgYC4gVGhlIGNvbW1hbmQgOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0IC11YWxsLC1hdWRpbywtbGFyZ2VmaWxlYAord2lsbCBydW4gOm1vZDpgdGVzdGAgd2l0aCBhbGwgcmVzb3VyY2VzIGV4Y2VwdCB0aGUgYGBhdWRpb2BgIGFuZAogYGBsYXJnZWZpbGVgYCByZXNvdXJjZXMuIEZvciBhIGxpc3Qgb2YgYWxsIHJlc291cmNlcyBhbmQgbW9yZSBjb21tYW5kLWxpbmUKLW9wdGlvbnMsIHJ1biA6cHJvZ3JhbTpgcHl0aG9uIC1tIHRlc3QucmVncnRlc3QgLWhgLgorb3B0aW9ucywgcnVuIDpwcm9ncmFtOmBweXRob24gLW0gdGVzdCAtaGAuCiAKIFNvbWUgb3RoZXIgd2F5cyB0byBleGVjdXRlIHRoZSByZWdyZXNzaW9uIHRlc3RzIGRlcGVuZCBvbiB3aGF0IHBsYXRmb3JtIHRoZQogdGVzdHMgYXJlIGJlaW5nIGV4ZWN1dGVkIG9uLiBPbiBVbml4LCB5b3UgY2FuIHJ1biA6cHJvZ3JhbTpgbWFrZSB0ZXN0YCBhdCB0aGUKLXRvcC1sZXZlbCBkaXJlY3Rvcnkgd2hlcmUgUHl0aG9uIHdhcyBidWlsdC4gT24gV2luZG93cywgZXhlY3V0aW5nCi06cHJvZ3JhbTpgcnQuYmF0YCBmcm9tIHlvdXIgOmZpbGU6YFBDQnVpbGRgIGRpcmVjdG9yeSB3aWxsIHJ1biBhbGwgcmVncmVzc2lvbgotdGVzdHMuCit0b3AtbGV2ZWwgZGlyZWN0b3J5IHdoZXJlIFB5dGhvbiB3YXMgYnVpbHQuIE9uIFdpbmRvd3MsCitleGVjdXRpbmcgOnByb2dyYW06YHJ0LmJhdGAgZnJvbSB5b3VyIDpmaWxlOmBQQ0J1aWxkYCBkaXJlY3Rvcnkgd2lsbCBydW4gYWxsCityZWdyZXNzaW9uIHRlc3RzLgogCiAKIDptb2Q6YHRlc3Quc3VwcG9ydGAgLS0tIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB0ZXN0cwpAQCAtMjA1LDE3ICsyMDcsMTEgQEAKICAgIG1ldGhvZHMuCiAKIAotLi4gZXhjZXB0aW9uOjogVGVzdFNraXBwZWQKLQotICAgU3ViY2xhc3Mgb2YgOmV4YzpgVGVzdEZhaWxlZGAuIFJhaXNlZCB3aGVuIGEgdGVzdCBpcyBza2lwcGVkLiBUaGlzIG9jY3VycyB3aGVuIGEKLSAgIG5lZWRlZCByZXNvdXJjZSAoc3VjaCBhcyBhIG5ldHdvcmsgY29ubmVjdGlvbikgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSBvZgotICAgdGVzdGluZy4KLQotCiAuLiBleGNlcHRpb246OiBSZXNvdXJjZURlbmllZAogCi0gICBTdWJjbGFzcyBvZiA6ZXhjOmBUZXN0U2tpcHBlZGAuIFJhaXNlZCB3aGVuIGEgcmVzb3VyY2UgKHN1Y2ggYXMgYSBuZXR3b3JrCi0gICBjb25uZWN0aW9uKSBpcyBub3QgYXZhaWxhYmxlLiBSYWlzZWQgYnkgdGhlIDpmdW5jOmByZXF1aXJlc2AgZnVuY3Rpb24uCisgICBTdWJjbGFzcyBvZiA6ZXhjOmB1bml0dGVzdC5Ta2lwVGVzdGAuIFJhaXNlZCB3aGVuIGEgcmVzb3VyY2UgKHN1Y2ggYXMgYQorICAgbmV0d29yayBjb25uZWN0aW9uKSBpcyBub3QgYXZhaWxhYmxlLiBSYWlzZWQgYnkgdGhlIDpmdW5jOmByZXF1aXJlc2AKKyAgIGZ1bmN0aW9uLgogCiBUaGUgOm1vZDpgdGVzdC5zdXBwb3J0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGNvbnN0YW50czoKIApAQCAtMjM0LDQ0ICsyMzAsNDUgQEAKIAogLi4gZGF0YTo6IFRFU1RGTgogCi0gICBTZXQgdG8gdGhlIHBhdGggdGhhdCBhIHRlbXBvcmFyeSBmaWxlIG1heSBiZSBjcmVhdGVkIGF0LiBBbnkgdGVtcG9yYXJ5IHRoYXQgaXMKLSAgIGNyZWF0ZWQgc2hvdWxkIGJlIGNsb3NlZCBhbmQgdW5saW5rZWQgKHJlbW92ZWQpLgorICAgU2V0IHRvIGEgbmFtZSB0aGF0IGlzIHNhZmUgdG8gdXNlIGFzIHRoZSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUuICBBbnkKKyAgIHRlbXBvcmFyeSBmaWxlIHRoYXQgaXMgY3JlYXRlZCBzaG91bGQgYmUgY2xvc2VkIGFuZCB1bmxpbmtlZCAocmVtb3ZlZCkuCiAKIFRoZSA6bW9kOmB0ZXN0LnN1cHBvcnRgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKIC4uIGZ1bmN0aW9uOjogZm9yZ2V0KG1vZHVsZV9uYW1lKQogCi0gICBSZW1vdmVzIHRoZSBtb2R1bGUgbmFtZWQgKm1vZHVsZV9uYW1lKiBmcm9tIGBgc3lzLm1vZHVsZXNgYCBhbmQgZGVsZXRlcyBhbnkKKyAgIFJlbW92ZSB0aGUgbW9kdWxlIG5hbWVkICptb2R1bGVfbmFtZSogZnJvbSBgYHN5cy5tb2R1bGVzYGAgYW5kIGRlbGV0ZSBhbnkKICAgIGJ5dGUtY29tcGlsZWQgZmlsZXMgb2YgdGhlIG1vZHVsZS4KIAogCiAuLiBmdW5jdGlvbjo6IGlzX3Jlc291cmNlX2VuYWJsZWQocmVzb3VyY2UpCiAKLSAgIFJldHVybnMgOmNvbnN0OmBUcnVlYCBpZiAqcmVzb3VyY2UqIGlzIGVuYWJsZWQgYW5kIGF2YWlsYWJsZS4gVGhlIGxpc3Qgb2YKKyAgIFJldHVybiA6Y29uc3Q6YFRydWVgIGlmICpyZXNvdXJjZSogaXMgZW5hYmxlZCBhbmQgYXZhaWxhYmxlLiBUaGUgbGlzdCBvZgogICAgYXZhaWxhYmxlIHJlc291cmNlcyBpcyBvbmx5IHNldCB3aGVuIDptb2Q6YHRlc3QucmVncnRlc3RgIGlzIGV4ZWN1dGluZyB0aGUKICAgIHRlc3RzLgogCiAKIC4uIGZ1bmN0aW9uOjogcmVxdWlyZXMocmVzb3VyY2UsIG1zZz1Ob25lKQogCi0gICBSYWlzZXMgOmV4YzpgUmVzb3VyY2VEZW5pZWRgIGlmICpyZXNvdXJjZSogaXMgbm90IGF2YWlsYWJsZS4gKm1zZyogaXMgdGhlCi0gICBhcmd1bWVudCB0byA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgaXQgaXMgcmFpc2VkLiBBbHdheXMgcmV0dXJucyB0cnVlIGlmIGNhbGxlZAotICAgYnkgYSBmdW5jdGlvbiB3aG9zZSBgYF9fbmFtZV9fYGAgaXMgYGAnX19tYWluX18nYGAuIFVzZWQgd2hlbiB0ZXN0cyBhcmUgZXhlY3V0ZWQKLSAgIGJ5IDptb2Q6YHRlc3QucmVncnRlc3RgLgorICAgUmFpc2UgOmV4YzpgUmVzb3VyY2VEZW5pZWRgIGlmICpyZXNvdXJjZSogaXMgbm90IGF2YWlsYWJsZS4gKm1zZyogaXMgdGhlCisgICBhcmd1bWVudCB0byA6ZXhjOmBSZXNvdXJjZURlbmllZGAgaWYgaXQgaXMgcmFpc2VkLiBBbHdheXMgcmV0dXJucworICAgOmNvbnN0OmBUcnVlYCBpZiBjYWxsZWQgYnkgYSBmdW5jdGlvbiB3aG9zZSBgYF9fbmFtZV9fYGAgaXMgYGAnX19tYWluX18nYGAuCisgICBVc2VkIHdoZW4gdGVzdHMgYXJlIGV4ZWN1dGVkIGJ5IDptb2Q6YHRlc3QucmVncnRlc3RgLgogCiAKIC4uIGZ1bmN0aW9uOjogZmluZGZpbGUoZmlsZW5hbWUpCiAKLSAgIFJldHVybiB0aGUgcGF0aCB0byB0aGUgZmlsZSBuYW1lZCAqZmlsZW5hbWUqLiBJZiBubyBtYXRjaCBpcyBmb3VuZCAqZmlsZW5hbWUqIGlzCi0gICByZXR1cm5lZC4gVGhpcyBkb2VzIG5vdCBlcXVhbCBhIGZhaWx1cmUgc2luY2UgaXQgY291bGQgYmUgdGhlIHBhdGggdG8gdGhlIGZpbGUuCisgICBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIGZpbGUgbmFtZWQgKmZpbGVuYW1lKi4gSWYgbm8gbWF0Y2ggaXMgZm91bmQKKyAgICpmaWxlbmFtZSogaXMgcmV0dXJuZWQuIFRoaXMgZG9lcyBub3QgZXF1YWwgYSBmYWlsdXJlIHNpbmNlIGl0IGNvdWxkIGJlIHRoZQorICAgcGF0aCB0byB0aGUgZmlsZS4KIAogCi0uLiBmdW5jdGlvbjo6IHJ1bl91bml0dGVzdCgqY2xhc3NlcykKKy4uIGZ1bmN0aW9uOjogcnVuX3VuaXR0ZXN0KFwqY2xhc3NlcykKIAogICAgRXhlY3V0ZSA6Y2xhc3M6YHVuaXR0ZXN0LlRlc3RDYXNlYCBzdWJjbGFzc2VzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIFRoZQotICAgZnVuY3Rpb24gc2NhbnMgdGhlIGNsYXNzZXMgZm9yIG1ldGhvZHMgc3RhcnRpbmcgd2l0aCB0aGUgcHJlZml4IGBgdGVzdF9gYCBhbmQKLSAgIGV4ZWN1dGVzIHRoZSB0ZXN0cyBpbmRpdmlkdWFsbHkuCisgICBmdW5jdGlvbiBzY2FucyB0aGUgY2xhc3NlcyBmb3IgbWV0aG9kcyBzdGFydGluZyB3aXRoIHRoZSBwcmVmaXggYGB0ZXN0X2BgCisgICBhbmQgZXhlY3V0ZXMgdGhlIHRlc3RzIGluZGl2aWR1YWxseS4KIAogICAgSXQgaXMgYWxzbyBsZWdhbCB0byBwYXNzIHN0cmluZ3MgYXMgcGFyYW1ldGVyczsgdGhlc2Ugc2hvdWxkIGJlIGtleXMgaW4KICAgIGBgc3lzLm1vZHVsZXNgYC4gRWFjaCBhc3NvY2lhdGVkIG1vZHVsZSB3aWxsIGJlIHNjYW5uZWQgYnkKQEAgLTI4NCwzNyArMjgxLDcyIEBACiAgICBUaGlzIHdpbGwgcnVuIGFsbCB0ZXN0cyBkZWZpbmVkIGluIHRoZSBuYW1lZCBtb2R1bGUuCiAKIAotLi4gZnVuY3Rpb246OiBjaGVja193YXJuaW5ncygpCisuLiBmdW5jdGlvbjo6IGNoZWNrX3dhcm5pbmdzKFwqZmlsdGVycywgcXVpZXQ9VHJ1ZSkKIAotICAgQSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciBgYHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKClgYCB0aGF0IG1ha2VzCi0gICBpdCBlYXNpZXIgdG8gdGVzdCB0aGF0IGEgd2FybmluZyB3YXMgY29ycmVjdGx5IHJhaXNlZCB3aXRoIGEgc2luZ2xlCi0gICBhc3NlcnRpb24uIEl0IGlzIGFwcHJveGltYXRlbHkgZXF1aXZhbGVudCB0byBjYWxsaW5nCi0gICBgYHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKWBgLgorICAgQSBjb252ZW5pZW5jZSB3cmFwcGVyIGZvciA6ZnVuYzpgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKWAgdGhhdCBtYWtlcyBpdAorICAgZWFzaWVyIHRvIHRlc3QgdGhhdCBhIHdhcm5pbmcgd2FzIGNvcnJlY3RseSByYWlzZWQuICBJdCBpcyBhcHByb3hpbWF0ZWx5CisgICBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSlgYCB3aXRoCisgICA6bWV0aDpgd2FybmluZ3Muc2ltcGxlZmlsdGVyYCBzZXQgdG8gYGBhbHdheXNgYCBhbmQgd2l0aCB0aGUgb3B0aW9uIHRvCisgICBhdXRvbWF0aWNhbGx5IHZhbGlkYXRlIHRoZSByZXN1bHRzIHRoYXQgYXJlIHJlY29yZGVkLgogCi0gICBUaGUgbWFpbiBkaWZmZXJlbmNlIGlzIHRoYXQgb24gZW50cnkgdG8gdGhlIGNvbnRleHQgbWFuYWdlciwgYQotICAgOmNsYXNzOmBXYXJuaW5nUmVjb3JkZXJgIGluc3RhbmNlIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYSBzaW1wbGUgbGlzdC4KLSAgIFRoZSB1bmRlcmx5aW5nIHdhcm5pbmdzIGxpc3QgaXMgYXZhaWxhYmxlIHZpYSB0aGUgcmVjb3JkZXIgb2JqZWN0J3MKLSAgIDphdHRyOmB3YXJuaW5nc2AgYXR0cmlidXRlLCB3aGlsZSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgbGFzdCByYWlzZWQKLSAgIHdhcm5pbmcgYXJlIGFsc28gYWNjZXNzaWJsZSBkaXJlY3RseSBvbiB0aGUgb2JqZWN0LiBJZiBubyB3YXJuaW5nIGhhcwotICAgYmVlbiByYWlzZWQsIHRoZW4gdGhlIGxhdHRlciBhdHRyaWJ1dGVzIHdpbGwgYWxsIGJlIDpjb25zdDpgTm9uZWAuCisgICBgYGNoZWNrX3dhcm5pbmdzYGAgYWNjZXB0cyAyLXR1cGxlcyBvZiB0aGUgZm9ybSBgYCgibWVzc2FnZSByZWdleHAiLAorICAgV2FybmluZ0NhdGVnb3J5KWBgIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLiBJZiBvbmUgb3IgbW9yZSAqZmlsdGVycyogYXJlCisgICBwcm92aWRlZCwgb3IgaWYgdGhlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnQgKnF1aWV0KiBpcyA6Y29uc3Q6YEZhbHNlYCwKKyAgIGl0IGNoZWNrcyB0byBtYWtlIHN1cmUgdGhlIHdhcm5pbmdzIGFyZSBhcyBleHBlY3RlZDogIGVhY2ggc3BlY2lmaWVkIGZpbHRlcgorICAgbXVzdCBtYXRjaCBhdCBsZWFzdCBvbmUgb2YgdGhlIHdhcm5pbmdzIHJhaXNlZCBieSB0aGUgZW5jbG9zZWQgY29kZSBvciB0aGUKKyAgIHRlc3QgZmFpbHMsIGFuZCBpZiBhbnkgd2FybmluZ3MgYXJlIHJhaXNlZCB0aGF0IGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlCisgICBzcGVjaWZpZWQgZmlsdGVycyB0aGUgdGVzdCBmYWlscy4gIFRvIGRpc2FibGUgdGhlIGZpcnN0IG9mIHRoZXNlIGNoZWNrcywKKyAgIHNldCAqcXVpZXQqIHRvIDpjb25zdDpgVHJ1ZWAuCiAKLSAgIEEgOm1ldGg6YHJlc2V0YCBtZXRob2QgaXMgYWxzbyBwcm92aWRlZCBvbiB0aGUgcmVjb3JkZXIgb2JqZWN0LiBUaGlzCi0gICBtZXRob2Qgc2ltcGx5IGNsZWFycyB0aGUgd2FybmluZyBsaXN0LgorICAgSWYgbm8gYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvOjoKIAotICAgVGhlIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGxpa2UgdGhpczo6CisgICAgICBjaGVja193YXJuaW5ncygoIiIsIFdhcm5pbmcpLCBxdWlldD1UcnVlKQogCi0gICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKLSAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICBJbiB0aGlzIGNhc2UgYWxsIHdhcm5pbmdzIGFyZSBjYXVnaHQgYW5kIG5vIGVycm9ycyBhcmUgcmFpc2VkLgorCisgICBPbiBlbnRyeSB0byB0aGUgY29udGV4dCBtYW5hZ2VyLCBhIDpjbGFzczpgV2FybmluZ1JlY29yZGVyYCBpbnN0YW5jZSBpcworICAgcmV0dXJuZWQuIFRoZSB1bmRlcmx5aW5nIHdhcm5pbmdzIGxpc3QgZnJvbQorICAgOmZ1bmM6YH53YXJuaW5ncy5jYXRjaF93YXJuaW5nc2AgaXMgYXZhaWxhYmxlIHZpYSB0aGUgcmVjb3JkZXIgb2JqZWN0J3MKKyAgIDphdHRyOmB3YXJuaW5nc2AgYXR0cmlidXRlLiAgQXMgYSBjb252ZW5pZW5jZSwgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG9iamVjdAorICAgcmVwcmVzZW50aW5nIHRoZSBtb3N0IHJlY2VudCB3YXJuaW5nIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IHRocm91Z2gKKyAgIHRoZSByZWNvcmRlciBvYmplY3QgKHNlZSBleGFtcGxlIGJlbG93KS4gIElmIG5vIHdhcm5pbmcgaGFzIGJlZW4gcmFpc2VkLAorICAgdGhlbiBhbnkgb2YgdGhlIGF0dHJpYnV0ZXMgdGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgZXhwZWN0ZWQgb24gYW4gb2JqZWN0CisgICByZXByZXNlbnRpbmcgYSB3YXJuaW5nIHdpbGwgcmV0dXJuIDpjb25zdDpgTm9uZWAuCisKKyAgIFRoZSByZWNvcmRlciBvYmplY3QgYWxzbyBoYXMgYSA6bWV0aDpgcmVzZXRgIG1ldGhvZCwgd2hpY2ggY2xlYXJzIHRoZQorICAgd2FybmluZ3MgbGlzdC4KKworICAgVGhlIGNvbnRleHQgbWFuYWdlciBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIGxpa2UgdGhpczo6CisKKyAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUiLCBTeW50YXhXYXJuaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCIiLCBVc2VyV2FybmluZykpOgorICAgICAgICAgIGV4ZWMoJ2Fzc2VydChGYWxzZSwgIkhleSEiKScpCisgICAgICAgICAgd2FybmluZ3Mud2FybihVc2VyV2FybmluZygiSGlkZSBtZSEiKSkKKworICAgSW4gdGhpcyBjYXNlIGlmIGVpdGhlciB3YXJuaW5nIHdhcyBub3QgcmFpc2VkLCBvciBzb21lIG90aGVyIHdhcm5pbmcgd2FzCisgICByYWlzZWQsIDpmdW5jOmBjaGVja193YXJuaW5nc2Agd291bGQgcmFpc2UgYW4gZXJyb3IuCisKKyAgIFdoZW4gYSB0ZXN0IG5lZWRzIHRvIGxvb2sgbW9yZSBkZWVwbHkgaW50byB0aGUgd2FybmluZ3MsIHJhdGhlciB0aGFuCisgICBqdXN0IGNoZWNraW5nIHdoZXRoZXIgb3Igbm90IHRoZXkgb2NjdXJyZWQsIGNvZGUgbGlrZSB0aGlzIGNhbiBiZSB1c2VkOjoKKworICAgICAgd2l0aCBjaGVja193YXJuaW5ncyhxdWlldD1UcnVlKSBhcyB3OgogICAgICAgICAgIHdhcm5pbmdzLndhcm4oImZvbyIpCi0gICAgICAgICAgYXNzZXJ0IHN0cih3Lm1lc3NhZ2UpID09ICJmb28iCisgICAgICAgICAgYXNzZXJ0IHN0cih3LmFyZ3NbMF0pID09ICJmb28iCiAgICAgICAgICAgd2FybmluZ3Mud2FybigiYmFyIikKLSAgICAgICAgICBhc3NlcnQgc3RyKHcubWVzc2FnZSkgPT0gImJhciIKLSAgICAgICAgICBhc3NlcnQgc3RyKHcud2FybmluZ3NbMF0ubWVzc2FnZSkgPT0gImZvbyIKLSAgICAgICAgICBhc3NlcnQgc3RyKHcud2FybmluZ3NbMV0ubWVzc2FnZSkgPT0gImJhciIKKyAgICAgICAgICBhc3NlcnQgc3RyKHcuYXJnc1swXSkgPT0gImJhciIKKyAgICAgICAgICBhc3NlcnQgc3RyKHcud2FybmluZ3NbMF0uYXJnc1swXSkgPT0gImZvbyIKKyAgICAgICAgICBhc3NlcnQgc3RyKHcud2FybmluZ3NbMV0uYXJnc1swXSkgPT0gImJhciIKICAgICAgICAgICB3LnJlc2V0KCkKICAgICAgICAgICBhc3NlcnQgbGVuKHcud2FybmluZ3MpID09IDAKIAogCisgICBIZXJlIGFsbCB3YXJuaW5ncyB3aWxsIGJlIGNhdWdodCwgYW5kIHRoZSB0ZXN0IGNvZGUgdGVzdHMgdGhlIGNhcHR1cmVkCisgICB3YXJuaW5ncyBkaXJlY3RseS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIE5ldyBvcHRpb25hbCBhcmd1bWVudHMgKmZpbHRlcnMqIGFuZCAqcXVpZXQqLgorCisKIC4uIGZ1bmN0aW9uOjogY2FwdHVyZWRfc3Rkb3V0KCkKIAogICAgVGhpcyBpcyBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHJ1bnMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgYm9keSB1c2luZwpAQCAtMzg5LDE4ICs0MjEsMTkgQEAKIAogLi4gY2xhc3M6OiBFbnZpcm9ubWVudFZhckd1YXJkKCkKIAotICAgQ2xhc3MgdXNlZCB0byB0ZW1wb3JhcmlseSBzZXQgb3IgdW5zZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgSW5zdGFuY2VzIGNhbiBiZQotICAgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBhbmQgaGF2ZSBhIGNvbXBsZXRlIGRpY3Rpb25hcnkgaW50ZXJmYWNlIGZvcgotICAgcXVlcnlpbmcvbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGBgb3MuZW52aXJvbmBgLiBBZnRlciBleGl0IGZyb20gdGhlIGNvbnRleHQKLSAgIG1hbmFnZXIgYWxsIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGRvbmUgdGhyb3VnaCB0aGlzIGluc3RhbmNlIHdpbGwKLSAgIGJlIHJvbGxlZCBiYWNrLgorICAgQ2xhc3MgdXNlZCB0byB0ZW1wb3JhcmlseSBzZXQgb3IgdW5zZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgSW5zdGFuY2VzIGNhbgorICAgYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBhbmQgaGF2ZSBhIGNvbXBsZXRlIGRpY3Rpb25hcnkgaW50ZXJmYWNlIGZvcgorICAgcXVlcnlpbmcvbW9kaWZ5aW5nIHRoZSB1bmRlcmx5aW5nIGBgb3MuZW52aXJvbmBgLiBBZnRlciBleGl0IGZyb20gdGhlCisgICBjb250ZXh0IG1hbmFnZXIgYWxsIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGRvbmUgdGhyb3VnaCB0aGlzCisgICBpbnN0YW5jZSB3aWxsIGJlIHJvbGxlZCBiYWNrLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgQWRkZWQgZGljdGlvbmFyeSBpbnRlcmZhY2UuCiAKIC4uIG1ldGhvZDo6IEVudmlyb25tZW50VmFyR3VhcmQuc2V0KGVudnZhciwgdmFsdWUpCiAKLSAgIFRlbXBvcmFyaWx5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYCB0byB0aGUgdmFsdWUgb2YgYGB2YWx1ZWBgLgorICAgVGVtcG9yYXJpbHkgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgYGVudnZhcmBgIHRvIHRoZSB2YWx1ZSBvZgorICAgYGB2YWx1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEVudmlyb25tZW50VmFyR3VhcmQudW5zZXQoZW52dmFyKQpAQCAtNDEyLDQgKzQ0NSwzIEBACiAKICAgIENsYXNzIHVzZWQgdG8gcmVjb3JkIHdhcm5pbmdzIGZvciB1bml0IHRlc3RzLiBTZWUgZG9jdW1lbnRhdGlvbiBvZgogICAgOmZ1bmM6YGNoZWNrX3dhcm5pbmdzYCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzLgotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKaW5kZXggODM1NzAxMy4uYTgxNDk2MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEdyZWcgV2FyZCA8Z3dhcmRAcHl0aG9uLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RleHR3cmFwLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zLCA6ZnVuYzpgd3JhcGAgYW5kCiA6ZnVuYzpgZmlsbGAsIGFzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLApAQCAtMTMsNyArMTYsNiBAQAogb3IgdHdvICB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc2hvdWxkIGJlIGdvb2QgZW5vdWdoOwogb3RoZXJ3aXNlLCAgeW91IHNob3VsZCB1c2UgYW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCiAKLQogLi4gZnVuY3Rpb246OiB3cmFwKHRleHQsIHdpZHRoPTcwLCAqKmt3YXJncykKIAogICAgV3JhcHMgdGhlIHNpbmdsZSBwYXJhZ3JhcGggaW4gKnRleHQqIChhIHN0cmluZykgc28gZXZlcnkgbGluZSBpcyBhdCBtb3N0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0IGIvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAppbmRleCBmYjE4ODA5Li41ZjFiOWJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiB0aHJlYWRpbmcKICAgIDpzeW5vcHNpczogVGhyZWFkLWJhc2VkIHBhcmFsbGVsaXNtLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90aHJlYWRpbmcucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIGNvbnN0cnVjdHMgaGlnaGVyLWxldmVsIHRocmVhZGluZyBpbnRlcmZhY2VzIG9uIHRvcCBvZiB0aGUgbG93ZXIKIGxldmVsIDptb2Q6YF90aHJlYWRgIG1vZHVsZS4gIFNlZSBhbHNvIHRoZSA6bW9kOmBxdWV1ZWAgbW9kdWxlLgpAQCAtMjQsOCArMjcsOSBAQAogICAgbGlicmFyaWVzIG1pZ2h0IG92ZXJjb21lIHRoaXMgbGltaXRhdGlvbikuCiAgICBJZiB5b3Ugd2FudCB5b3VyIGFwcGxpY2F0aW9uIHRvIG1ha2UgYmV0dGVyIG9mIHVzZSBvZiB0aGUgY29tcHV0YXRpb25hbAogICAgcmVzb3VyY2VzIG9mIG11bHRpLWNvcmUgbWFjaGluZXMsIHlvdSBhcmUgYWR2aXNlZCB0byB1c2UKLSAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AuIEhvd2V2ZXIsIHRocmVhZGluZyBpcyBzdGlsbCBhbiBhcHByb3ByaWF0ZSBtb2RlbAotICAgaWYgeW91IHdhbnQgdG8gcnVuIG11bHRpcGxlIEkvTy1ib3VuZCB0YXNrcyBzaW11bHRhbmVvdXNseS4KKyAgIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agb3IgOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcmAuCisgICBIb3dldmVyLCB0aHJlYWRpbmcgaXMgc3RpbGwgYW4gYXBwcm9wcmlhdGUgbW9kZWwgaWYgeW91IHdhbnQgdG8gcnVuCisgICBtdWx0aXBsZSBJL08tYm91bmQgdGFza3Mgc2ltdWx0YW5lb3VzbHkuCiAKIAogVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgb2JqZWN0czoKQEAgLTE4Miw2ICsxODYsMTggQEAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cywgc3lzdGVtcyB3aXRoIFBPU0lYIHRocmVhZHMuCiAKIAorVGhpcyBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgY29uc3RhbnQ6CisKKy4uIGRhdGE6OiBUSU1FT1VUX01BWAorCisgICBUaGUgbWF4aW11bSB2YWx1ZSBhbGxvd2VkIGZvciB0aGUgKnRpbWVvdXQqIHBhcmFtZXRlciBvZiBibG9ja2luZyBmdW5jdGlvbnMKKyAgICg6bWV0aDpgTG9jay5hY3F1aXJlYCwgOm1ldGg6YFJMb2NrLmFjcXVpcmVgLCA6bWV0aDpgQ29uZGl0aW9uLndhaXRgLCBldGMuKS4KKyAgIFNwZWNpZnlpbmcgYSB0aW1lb3V0IGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlIHdpbGwgcmFpc2UgYW4KKyAgIDpleGM6YE92ZXJmbG93RXJyb3JgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiBEZXRhaWxlZCBpbnRlcmZhY2VzIGZvciB0aGUgb2JqZWN0cyBhcmUgZG9jdW1lbnRlZCBiZWxvdy4KIAogVGhlIGRlc2lnbiBvZiB0aGlzIG1vZHVsZSBpcyBsb29zZWx5IGJhc2VkIG9uIEphdmEncyB0aHJlYWRpbmcgbW9kZWwuIEhvd2V2ZXIsCkBAIC0zNzYsNyArMzkyLDcgQEAKIEFsbCBtZXRob2RzIGFyZSBleGVjdXRlZCBhdG9taWNhbGx5LgogCiAKLS4uIG1ldGhvZDo6IExvY2suYWNxdWlyZShbYmxvY2tpbmddKQorLi4gbWV0aG9kOjogTG9jay5hY3F1aXJlKGJsb2NraW5nPVRydWUsIHRpbWVvdXQ9LTEpCiAKICAgIEFjcXVpcmUgYSBsb2NrLCBibG9ja2luZyBvciBub24tYmxvY2tpbmcuCiAKQEAgLTM5MCw2ICs0MDYsMjEgQEAKICAgIHdpdGhvdXQgYW4gYXJndW1lbnQgd291bGQgYmxvY2ssIHJldHVybiBmYWxzZSBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlLCBkbyB0aGUKICAgIHNhbWUgdGhpbmcgYXMgd2hlbiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdHJ1ZS4KIAorICAgV2hlbiBpbnZva2VkIHdpdGggdGhlIGZsb2F0aW5nLXBvaW50ICp0aW1lb3V0KiBhcmd1bWVudCBzZXQgdG8gYSBwb3NpdGl2ZQorICAgdmFsdWUsIGJsb2NrIGZvciBhdCBtb3N0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzcGVjaWZpZWQgYnkgKnRpbWVvdXQqCisgICBhbmQgYXMgbG9uZyBhcyB0aGUgbG9jayBjYW5ub3QgYmUgYWNxdWlyZWQuICBBIG5lZ2F0aXZlICp0aW1lb3V0KiBhcmd1bWVudAorICAgc3BlY2lmaWVzIGFuIHVuYm91bmRlZCB3YWl0LiAgSXQgaXMgZm9yYmlkZGVuIHRvIHNwZWNpZnkgYSAqdGltZW91dCoKKyAgIHdoZW4gKmJsb2NraW5nKiBpcyBmYWxzZS4KKworICAgVGhlIHJldHVybiB2YWx1ZSBpcyBgYFRydWVgYCBpZiB0aGUgbG9jayBpcyBhY3F1aXJlZCBzdWNjZXNzZnVsbHksCisgICBgYEZhbHNlYGAgaWYgbm90IChmb3IgZXhhbXBsZSBpZiB0aGUgKnRpbWVvdXQqIGV4cGlyZWQpLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgbmV3LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgTG9jayBhY3F1aXJlcyBjYW4gbm93IGJlIGludGVycnVwdGVkIGJ5IHNpZ25hbHMgb24gUE9TSVguCisKIAogLi4gbWV0aG9kOjogTG9jay5yZWxlYXNlKCkKIApAQCAtNDIzLDcgKzQ1NCw3IEBACiA6bWV0aDpgYWNxdWlyZWAgdG8gcHJvY2VlZC4KIAogCi0uLiBtZXRob2Q6OiBSTG9jay5hY3F1aXJlKGJsb2NraW5nPVRydWUpCisuLiBtZXRob2Q6OiBSTG9jay5hY3F1aXJlKGJsb2NraW5nPVRydWUsIHRpbWVvdXQ9LTEpCiAKICAgIEFjcXVpcmUgYSBsb2NrLCBibG9ja2luZyBvciBub24tYmxvY2tpbmcuCiAKQEAgLTQ0Miw2ICs0NzMsMTQgQEAKICAgIHdpdGhvdXQgYW4gYXJndW1lbnQgd291bGQgYmxvY2ssIHJldHVybiBmYWxzZSBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlLCBkbyB0aGUKICAgIHNhbWUgdGhpbmcgYXMgd2hlbiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMsIGFuZCByZXR1cm4gdHJ1ZS4KIAorICAgV2hlbiBpbnZva2VkIHdpdGggdGhlIGZsb2F0aW5nLXBvaW50ICp0aW1lb3V0KiBhcmd1bWVudCBzZXQgdG8gYSBwb3NpdGl2ZQorICAgdmFsdWUsIGJsb2NrIGZvciBhdCBtb3N0IHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBzcGVjaWZpZWQgYnkgKnRpbWVvdXQqCisgICBhbmQgYXMgbG9uZyBhcyB0aGUgbG9jayBjYW5ub3QgYmUgYWNxdWlyZWQuICBSZXR1cm4gdHJ1ZSBpZiB0aGUgbG9jayBoYXMKKyAgIGJlZW4gYWNxdWlyZWQsIGZhbHNlIGlmIHRoZSB0aW1lb3V0IGhhcyBlbGFwc2VkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgbmV3LgorCiAKIC4uIG1ldGhvZDo6IFJMb2NrLnJlbGVhc2UoKQogCkBAIC01MTMsNiArNTUyLDEzIEBACiBpbiBhIHR5cGljYWwgcHJvZHVjZXItY29uc3VtZXIgc2l0dWF0aW9uLCBhZGRpbmcgb25lIGl0ZW0gdG8gdGhlIGJ1ZmZlciBvbmx5CiBuZWVkcyB0byB3YWtlIHVwIG9uZSBjb25zdW1lciB0aHJlYWQuCiAKK05vdGU6ICBDb25kaXRpb24gdmFyaWFibGVzIGNhbiBiZSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgc3ViamVjdAordG8gYm90aCBzcHVyaW91cyB3YWtldXBzICh3aGVuIDptZXRoOmB3YWl0YCByZXR1cm5zIHdpdGhvdXQgYSA6bWV0aDpgbm90aWZ5YAorY2FsbCkgYW5kIHN0b2xlbiB3YWtldXBzICh3aGVuIGFub3RoZXIgdGhyZWFkIGFjcXVpcmVzIHRoZSBsb2NrIGJlZm9yZSB0aGUKK2F3b2tlbiB0aHJlYWQuKSAgRm9yIHRoaXMgcmVhc29uLCBpdCBpcyBhbHdheXMgbmVjZXNzYXJ5IHRvIHZlcmlmeSB0aGUgc3RhdGUKK3RoZSB0aHJlYWQgaXMgd2FpdGluZyBmb3Igd2hlbiA6bWV0aDpgd2FpdGAgcmV0dXJucyBhbmQgb3B0aW9uYWxseSByZXBlYXQKK3RoZSBjYWxsIGFzIG9mdGVuIGFzIG5lY2Vzc2FyeS4KKwogCiAuLiBjbGFzczo6IENvbmRpdGlvbihsb2NrPU5vbmUpCiAKQEAgLTU1Myw2ICs1OTksNDEgQEAKICAgICAgIGludGVyZmFjZSBpcyB0aGVuIHVzZWQgdG8gcmVzdG9yZSB0aGUgcmVjdXJzaW9uIGxldmVsIHdoZW4gdGhlIGxvY2sgaXMKICAgICAgIHJlYWNxdWlyZWQuCiAKKyAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYGBUcnVlYGAgdW5sZXNzIGEgZ2l2ZW4gKnRpbWVvdXQqIGV4cGlyZWQsIGluIHdoaWNoCisgICAgICBjYXNlIGl0IGlzIGBgRmFsc2VgYC4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICAgIFByZXZpb3VzbHksIHRoZSBtZXRob2QgYWx3YXlzIHJldHVybmVkIGBgTm9uZWBgLgorCisgICAuLiBtZXRob2Q6OiB3YWl0X2ZvcihwcmVkaWNhdGUsIHRpbWVvdXQ9Tm9uZSkKKworICAgICAgV2FpdCB1bnRpbCBhIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gVHJ1ZS4gICpwcmVkaWNhdGUqIHNob3VsZCBiZSBhCisgICAgICBjYWxsYWJsZSB3aGljaCByZXN1bHQgd2lsbCBiZSBpbnRlcnByZXRlZCBhcyBhIGJvb2xlYW4gdmFsdWUuCisgICAgICBBICp0aW1lb3V0KiBtYXkgYmUgcHJvdmlkZWQgZ2l2aW5nIHRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdC4KKworICAgICAgVGhpcyB1dGlsaXR5IG1ldGhvZCBtYXkgY2FsbCA6bWV0aDpgd2FpdGAgcmVwZWF0ZWRseSB1bnRpbCB0aGUgcHJlZGljYXRlCisgICAgICBpcyBzYXRpc2ZpZWQsIG9yIHVudGlsIGEgdGltZW91dCBvY2N1cnMuIFRoZSByZXR1cm4gdmFsdWUgaXMKKyAgICAgIHRoZSBsYXN0IHJldHVybiB2YWx1ZSBvZiB0aGUgcHJlZGljYXRlIGFuZCB3aWxsIGV2YWx1YXRlIHRvCisgICAgICBgYEZhbHNlYGAgaWYgdGhlIG1ldGhvZCB0aW1lZCBvdXQuCisKKyAgICAgIElnbm9yaW5nIHRoZSB0aW1lb3V0IGZlYXR1cmUsIGNhbGxpbmcgdGhpcyBtZXRob2QgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCisgICAgICB3cml0aW5nOjoKKworICAgICAgICB3aGlsZSBub3QgcHJlZGljYXRlKCk6CisgICAgICAgICAgICBjdi53YWl0KCkKKworICAgICAgVGhlcmVmb3JlLCB0aGUgc2FtZSBydWxlcyBhcHBseSBhcyB3aXRoIDptZXRoOmB3YWl0YDogVGhlIGxvY2sgbXVzdCBiZQorICAgICAgaGVsZCB3aGVuIGNhbGxlZCBhbmQgaXMgcmUtYXF1aXJlZCBvbiByZXR1cm4uICBUaGUgcHJlZGljYXRlIGlzIGV2YWx1YXRlZAorICAgICAgd2l0aCB0aGUgbG9jayBoZWxkLgorCisgICAgICBVc2luZyB0aGlzIG1ldGhvZCwgdGhlIGNvbnN1bWVyIGV4YW1wbGUgYWJvdmUgY2FuIGJlIHdyaXR0ZW4gdGh1czo6CisKKyAgICAgICAgIHdpdGggY3Y6CisgICAgICAgICAgICAgY3Yud2FpdF9mb3IoYW5faXRlbV9pc19hdmFpbGFibGUpCisgICAgICAgICAgICAgZ2V0X2FuX2F2YWlsYWJsZV9pdGVtKCkKKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKICAgIC4uIG1ldGhvZDo6IG5vdGlmeSgpCiAKICAgICAgIFdha2UgdXAgYSB0aHJlYWQgd2FpdGluZyBvbiB0aGlzIGNvbmRpdGlvbiwgaWYgYW55LiAgSWYgdGhlIGNhbGxpbmcgdGhyZWFkCkBAIC01OTksNyArNjgwLDcgQEAKICAgIGRlZmF1bHRzIHRvIGBgMWBgLiBJZiB0aGUgKnZhbHVlKiBnaXZlbiBpcyBsZXNzIHRoYW4gMCwgOmV4YzpgVmFsdWVFcnJvcmAgaXMKICAgIHJhaXNlZC4KIAotICAgLi4gbWV0aG9kOjogYWNxdWlyZShibG9ja2luZz1UcnVlKQorICAgLi4gbWV0aG9kOjogYWNxdWlyZShibG9ja2luZz1UcnVlLCB0aW1lb3V0PU5vbmUpCiAKICAgICAgIEFjcXVpcmUgYSBzZW1hcGhvcmUuCiAKQEAgLTYxMCwxNCArNjkxLDE4IEBACiAgICAgICBpbnRlcmxvY2tpbmcgc28gdGhhdCBpZiBtdWx0aXBsZSA6bWV0aDpgYWNxdWlyZWAgY2FsbHMgYXJlIGJsb2NrZWQsCiAgICAgICA6bWV0aDpgcmVsZWFzZWAgd2lsbCB3YWtlIGV4YWN0bHkgb25lIG9mIHRoZW0gdXAuICBUaGUgaW1wbGVtZW50YXRpb24gbWF5CiAgICAgICBwaWNrIG9uZSBhdCByYW5kb20sIHNvIHRoZSBvcmRlciBpbiB3aGljaCBibG9ja2VkIHRocmVhZHMgYXJlIGF3YWtlbmVkCi0gICAgICBzaG91bGQgbm90IGJlIHJlbGllZCBvbi4gIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZSBpbiB0aGlzIGNhc2UuCi0KLSAgICAgIFdoZW4gaW52b2tlZCB3aXRoICpibG9ja2luZyogc2V0IHRvIHRydWUsIGRvIHRoZSBzYW1lIHRoaW5nIGFzIHdoZW4gY2FsbGVkCi0gICAgICB3aXRob3V0IGFyZ3VtZW50cywgYW5kIHJldHVybiB0cnVlLgorICAgICAgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24uICBSZXR1cm5zIHRydWUgKG9yIGJsb2NrcyBpbmRlZmluaXRlbHkpLgogCiAgICAgICBXaGVuIGludm9rZWQgd2l0aCAqYmxvY2tpbmcqIHNldCB0byBmYWxzZSwgZG8gbm90IGJsb2NrLiAgSWYgYSBjYWxsCi0gICAgICB3aXRob3V0IGFuIGFyZ3VtZW50IHdvdWxkIGJsb2NrLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSwgZG8KLSAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHdoZW4gY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRydWUuCisgICAgICB3aXRob3V0IGFuIGFyZ3VtZW50IHdvdWxkIGJsb2NrLCByZXR1cm4gZmFsc2UgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSwKKyAgICAgIGRvIHRoZSBzYW1lIHRoaW5nIGFzIHdoZW4gY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRydWUuCisKKyAgICAgIFdoZW4gaW52b2tlZCB3aXRoIGEgKnRpbWVvdXQqIG90aGVyIHRoYW4gTm9uZSwgaXQgd2lsbCBibG9jayBmb3IgYXQKKyAgICAgIG1vc3QgKnRpbWVvdXQqIHNlY29uZHMuICBJZiBhY3F1aXJlIGRvZXMgbm90IGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSBpbgorICAgICAgdGhhdCBpbnRlcnZhbCwgcmV0dXJuIGZhbHNlLiAgUmV0dXJuIHRydWUgb3RoZXJ3aXNlLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgVGhlICp0aW1lb3V0KiBwYXJhbWV0ZXIgaXMgbmV3LgogCiAgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKIApAQCAtNzM3LDYgKzgyMiwxMDggQEAKICAgICAgIG9ubHkgd29yayBpZiB0aGUgdGltZXIgaXMgc3RpbGwgaW4gaXRzIHdhaXRpbmcgc3RhZ2UuCiAKIAorQmFycmllciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKK1RoaXMgY2xhc3MgcHJvdmlkZXMgYSBzaW1wbGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZSBmb3IgdXNlIGJ5IGEgZml4ZWQgbnVtYmVyCitvZiB0aHJlYWRzIHRoYXQgbmVlZCB0byB3YWl0IGZvciBlYWNoIG90aGVyLiAgRWFjaCBvZiB0aGUgdGhyZWFkcyB0cmllcyB0byBwYXNzCit0aGUgYmFycmllciBieSBjYWxsaW5nIHRoZSA6bWV0aDpgd2FpdGAgbWV0aG9kIGFuZCB3aWxsIGJsb2NrIHVudGlsIGFsbCBvZiB0aGUKK3RocmVhZHMgaGF2ZSBtYWRlIHRoZSBjYWxsLiAgQXQgdGhpcyBwb2ludHMsIHRoZSB0aHJlYWRzIGFyZSByZWxlYXNlZAorc2ltdWx0YW5vdXNseS4KKworVGhlIGJhcnJpZXIgY2FuIGJlIHJldXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzIGZvciB0aGUgc2FtZSBudW1iZXIgb2YgdGhyZWFkcy4KKworQXMgYW4gZXhhbXBsZSwgaGVyZSBpcyBhIHNpbXBsZSB3YXkgdG8gc3luY2hyb25pemUgYSBjbGllbnQgYW5kIHNlcnZlciB0aHJlYWQ6OgorCisgICBiID0gQmFycmllcigyLCB0aW1lb3V0PTUpCisKKyAgIGRlZiBzZXJ2ZXIoKToKKyAgICAgICBzdGFydF9zZXJ2ZXIoKQorICAgICAgIGIud2FpdCgpCisgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgY29ubmVjdGlvbiA9IGFjY2VwdF9jb25uZWN0aW9uKCkKKyAgICAgICAgICAgcHJvY2Vzc19zZXJ2ZXJfY29ubmVjdGlvbihjb25uZWN0aW9uKQorCisgICBkZWYgY2xpZW50KCk6CisgICAgICAgYi53YWl0KCkKKyAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICBjb25uZWN0aW9uID0gbWFrZV9jb25uZWN0aW9uKCkKKyAgICAgICAgICAgcHJvY2Vzc19jbGllbnRfY29ubmVjdGlvbihjb25uZWN0aW9uKQorCisKKy4uIGNsYXNzOjogQmFycmllcihwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lKQorCisgICBDcmVhdGUgYSBiYXJyaWVyIG9iamVjdCBmb3IgKnBhcnRpZXMqIG51bWJlciBvZiB0aHJlYWRzLiAgQW4gKmFjdGlvbiosIHdoZW4KKyAgIHByb3ZpZGVkLCBpcyBhIGNhbGxhYmxlIHRvIGJlIGNhbGxlZCBieSBvbmUgb2YgdGhlIHRocmVhZHMgd2hlbiB0aGV5IGFyZQorICAgcmVsZWFzZWQuICAqdGltZW91dCogaXMgdGhlIGRlZmF1bHQgdGltZW91dCB2YWx1ZSBpZiBub25lIGlzIHNwZWNpZmllZCBmb3IKKyAgIHRoZSA6bWV0aDpgd2FpdGAgbWV0aG9kLgorCisgICAuLiBtZXRob2Q6OiB3YWl0KHRpbWVvdXQ9Tm9uZSkKKworICAgICAgUGFzcyB0aGUgYmFycmllci4gIFdoZW4gYWxsIHRoZSB0aHJlYWRzIHBhcnR5IHRvIHRoZSBiYXJyaWVyIGhhdmUgY2FsbGVkCisgICAgICB0aGlzIGZ1bmN0aW9uLCB0aGV5IGFyZSBhbGwgcmVsZWFzZWQgc2ltdWx0YW5lb3VzbHkuICBJZiBhICp0aW1lb3V0KiBpcworICAgICAgcHJvdmlkZWQsIGlzIGlzIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBhbnkgdGhhdCB3YXMgc3VwcGxpZWQgdG8gdGhlIGNsYXNzCisgICAgICBjb25zdHJ1Y3Rvci4KKworICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvICpwYXJ0aWVzKiAtLSAxLCBkaWZmZXJlbnQKKyAgICAgIGZvciBlYWNoIHRocmVhZC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEgdGhyZWFkIHRvIGRvIHNvbWUgc3BlY2lhbAorICAgICAgaG91c2VrZWVwaW5nLCBlLmcuOjoKKworICAgICAgICAgaSA9IGJhcnJpZXIud2FpdCgpCisgICAgICAgICBpZiBpID09IDA6CisgICAgICAgICAgICAgIyBPbmx5IG9uZSB0aHJlYWQgbmVlZHMgdG8gcHJpbnQgdGhpcworICAgICAgICAgICAgIHByaW50KCJwYXNzZWQgdGhlIGJhcnJpZXIiKQorCisgICAgICBJZiBhbiAqYWN0aW9uKiB3YXMgcHJvdmlkZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBvbmUgb2YgdGhlIHRocmVhZHMgd2lsbAorICAgICAgaGF2ZSBjYWxsZWQgaXQgcHJpb3IgdG8gYmVpbmcgcmVsZWFzZWQuICBTaG91bGQgdGhpcyBjYWxsIHJhaXNlIGFuIGVycm9yLAorICAgICAgdGhlIGJhcnJpZXIgaXMgcHV0IGludG8gdGhlIGJyb2tlbiBzdGF0ZS4KKworICAgICAgSWYgdGhlIGNhbGwgdGltZXMgb3V0LCB0aGUgYmFycmllciBpcyBwdXQgaW50byB0aGUgYnJva2VuIHN0YXRlLgorCisgICAgICBUaGlzIG1ldGhvZCBtYXkgcmFpc2UgYSA6Y2xhc3M6YEJyb2tlbkJhcnJpZXJFcnJvcmAgZXhjZXB0aW9uIGlmIHRoZQorICAgICAgYmFycmllciBpcyBicm9rZW4gb3IgcmVzZXQgd2hpbGUgYSB0aHJlYWQgaXMgd2FpdGluZy4KKworICAgLi4gbWV0aG9kOjogcmVzZXQoKQorCisgICAgICBSZXR1cm4gdGhlIGJhcnJpZXIgdG8gdGhlIGRlZmF1bHQsIGVtcHR5IHN0YXRlLiAgQW55IHRocmVhZHMgd2FpdGluZyBvbiBpdAorICAgICAgd2lsbCByZWNlaXZlIHRoZSA6Y2xhc3M6YEJyb2tlbkJhcnJpZXJFcnJvcmAgZXhjZXB0aW9uLgorCisgICAgICBOb3RlIHRoYXQgdXNpbmcgdGhpcyBmdW5jdGlvbiBtYXkgY2FuIHJlcXVpcmUgc29tZSBleHRlcm5hbAorICAgICAgc3luY2hyb25pemF0aW9uIGlmIHRoZXJlIGFyZSBvdGhlciB0aHJlYWRzIHdob3NlIHN0YXRlIGlzIHVua25vd24uICBJZiBhCisgICAgICBiYXJyaWVyIGlzIGJyb2tlbiBpdCBtYXkgYmUgYmV0dGVyIHRvIGp1c3QgbGVhdmUgaXQgYW5kIGNyZWF0ZSBhIG5ldyBvbmUuCisKKyAgIC4uIG1ldGhvZDo6IGFib3J0KCkKKworICAgICAgUHV0IHRoZSBiYXJyaWVyIGludG8gYSBicm9rZW4gc3RhdGUuICBUaGlzIGNhdXNlcyBhbnkgYWN0aXZlIG9yIGZ1dHVyZQorICAgICAgY2FsbHMgdG8gOm1ldGg6YHdhaXRgIHRvIGZhaWwgd2l0aCB0aGUgOmNsYXNzOmBCcm9rZW5CYXJyaWVyRXJyb3JgLiAgVXNlCisgICAgICB0aGlzIGZvciBleGFtcGxlIGlmIG9uZSBvZiB0aGUgbmVlZHMgdG8gYWJvcnQsIHRvIGF2b2lkIGRlYWRsb2NraW5nIHRoZQorICAgICAgYXBwbGljYXRpb24uCisKKyAgICAgIEl0IG1heSBiZSBwcmVmZXJhYmxlIHRvIHNpbXBseSBjcmVhdGUgdGhlIGJhcnJpZXIgd2l0aCBhIHNlbnNpYmxlCisgICAgICAqdGltZW91dCogdmFsdWUgdG8gYXV0b21hdGljYWxseSBndWFyZCBhZ2FpbnN0IG9uZSBvZiB0aGUgdGhyZWFkcyBnb2luZworICAgICAgYXdyeS4KKworICAgLi4gYXR0cmlidXRlOjogcGFydGllcworCisgICAgICBUaGUgbnVtYmVyIG9mIHRocmVhZHMgcmVxdWlyZWQgdG8gcGFzcyB0aGUgYmFycmllci4KKworICAgLi4gYXR0cmlidXRlOjogbl93YWl0aW5nCisKKyAgICAgIFRoZSBudW1iZXIgb2YgdGhyZWFkcyBjdXJyZW50bHkgd2FpdGluZyBpbiB0aGUgYmFycmllci4KKworICAgLi4gYXR0cmlidXRlOjogYnJva2VuCisKKyAgICAgIEEgYm9vbGVhbiB0aGF0IGlzIGBgVHJ1ZWBgIGlmIHRoZSBiYXJyaWVyIGlzIGluIHRoZSBicm9rZW4gc3RhdGUuCisKKworLi4gZXhjZXB0aW9uOjogQnJva2VuQmFycmllckVycm9yCisKKyAgIFRoaXMgZXhjZXB0aW9uLCBhIHN1YmNsYXNzIG9mIDpleGM6YFJ1bnRpbWVFcnJvcmAsIGlzIHJhaXNlZCB3aGVuIHRoZQorICAgOmNsYXNzOmBCYXJyaWVyYCBvYmplY3QgaXMgcmVzZXQgb3IgYnJva2VuLgorCisKIC4uIF93aXRoLWxvY2tzOgogCiBVc2luZyBsb2NrcywgY29uZGl0aW9ucywgYW5kIHNlbWFwaG9yZXMgaW4gdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RpbWUucnN0IGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKaW5kZXggYjkxYWE1My4uMjhlOTk0YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGltZS5yc3QKQEAgLTI0LDkgKzI0LDkgQEAKIAogLi4gaW5kZXg6OiBzaW5nbGU6IFllYXIgMjAzOAogCi0qIFRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgZG8gbm90IGhhbmRsZSBkYXRlcyBhbmQgdGltZXMgYmVmb3JlIHRoZSBlcG9jaCBvcgorKiBUaGUgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlIG1heSBub3QgaGFuZGxlIGRhdGVzIGFuZCB0aW1lcyBiZWZvcmUgdGhlIGVwb2NoIG9yCiAgIGZhciBpbiB0aGUgZnV0dXJlLiAgVGhlIGN1dC1vZmYgcG9pbnQgaW4gdGhlIGZ1dHVyZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBDCi0gIGxpYnJhcnk7IGZvciBVbml4LCBpdCBpcyB0eXBpY2FsbHkgaW4gMjAzOC4KKyAgbGlicmFyeTsgZm9yIDMyLWJpdCBzeXN0ZW1zLCBpdCBpcyB0eXBpY2FsbHkgaW4gMjAzOC4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBZZWFyIDIwMDAKQEAgLTM0LDIwICszNCwzMSBAQAogCiAuLiBfdGltZS15Mmtpc3N1ZXM6CiAKLSogKipZZWFyIDIwMDAgKFkySykgaXNzdWVzKio6ICBQeXRob24gZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0ncyBDIGxpYnJhcnksIHdoaWNoCisqICoqWWVhciAyMDAwIChZMkspIGlzc3VlcyoqOiBQeXRob24gZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm0ncyBDIGxpYnJhcnksIHdoaWNoCiAgIGdlbmVyYWxseSBkb2Vzbid0IGhhdmUgeWVhciAyMDAwIGlzc3Vlcywgc2luY2UgYWxsIGRhdGVzIGFuZCB0aW1lcyBhcmUKLSAgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4gIEZ1bmN0aW9ucyBhY2NlcHRpbmcgYQotICA6Y2xhc3M6YHN0cnVjdF90aW1lYCAoc2VlIGJlbG93KSBnZW5lcmFsbHkgcmVxdWlyZSBhIDQtZGlnaXQgeWVhci4gIEZvciBiYWNrd2FyZAotICBjb21wYXRpYmlsaXR5LCAyLWRpZ2l0IHllYXJzIGFyZSBzdXBwb3J0ZWQgaWYgdGhlIG1vZHVsZSB2YXJpYWJsZQotICBgYGFjY2VwdDJkeWVhcmBgIGlzIGEgbm9uLXplcm8gaW50ZWdlcjsgdGhpcyB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB0byBgYDFgYAotICB1bmxlc3MgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YFBZVEhPTlkyS2AgaXMgc2V0IHRvIGEgbm9uLWVtcHR5Ci0gIHN0cmluZywgaW4gd2hpY2ggY2FzZSBpdCBpcyBpbml0aWFsaXplZCB0byBgYDBgYC4gIFRodXMsIHlvdSBjYW4gc2V0Ci0gIDplbnZ2YXI6YFBZVEhPTlkyS2AgdG8gYSBub24tZW1wdHkgc3RyaW5nIGluIHRoZSBlbnZpcm9ubWVudCB0byByZXF1aXJlIDQtZGlnaXQKLSAgeWVhcnMgZm9yIGFsbCB5ZWFyIGlucHV0LiAgV2hlbiAyLWRpZ2l0IHllYXJzIGFyZSBhY2NlcHRlZCwgdGhleSBhcmUgY29udmVydGVkCi0gIGFjY29yZGluZyB0byB0aGUgUE9TSVggb3IgWC9PcGVuIHN0YW5kYXJkOiB2YWx1ZXMgNjktOTkgYXJlIG1hcHBlZCB0byAxOTY5LTE5OTksCi0gIGFuZCB2YWx1ZXMgMC0tNjggYXJlIG1hcHBlZCB0byAyMDAwLS0yMDY4LiBWYWx1ZXMgMTAwLS0xODk5IGFyZSBhbHdheXMgaWxsZWdhbC4KLSAgTm90ZSB0aGF0IHRoaXMgaXMgbmV3IGFzIG9mIFB5dGhvbiAxLjUuMihhMik7IGVhcmxpZXIgdmVyc2lvbnMsIHVwIHRvIFB5dGhvbgotICAxLjUuMSBhbmQgMS41LjJhMSwgd291bGQgYWRkIDE5MDAgdG8geWVhciB2YWx1ZXMgYmVsb3cgMTkwMC4KKyAgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4gIEZ1bmN0aW9uIDpmdW5jOmBzdHJwdGltZWAKKyAgY2FuIHBhcnNlIDItZGlnaXQgeWVhcnMgd2hlbiBnaXZlbiBgYCV5YGAgZm9ybWF0IGNvZGUuICBXaGVuIDItZGlnaXQgeWVhcnMgYXJlCisgIHBhcnNlZCwgdGhleSBhcmUgY29udmVydGVkIGFjY29yZGluZyB0byB0aGUgUE9TSVggYW5kIElTTyBDIHN0YW5kYXJkczogdmFsdWVzCisgIDY5LS05OSBhcmUgbWFwcGVkIHRvIDE5NjktLTE5OTksIGFuZCB2YWx1ZXMgMC0tNjggYXJlIG1hcHBlZCB0byAyMDAwLS0yMDY4LgorCisgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB5ZWFycyB3aXRoIGxlc3MgdGhhbiA0IGRpZ2l0cyBhcmUgdHJlYXRlZAorICBzcGVjaWFsbHkgYnkgOmZ1bmM6YGFzY3RpbWVgLCA6ZnVuYzpgbWt0aW1lYCwgYW5kIDpmdW5jOmBzdHJmdGltZWAgZnVuY3Rpb25zCisgIHRoYXQgb3BlcmF0ZSBvbiBhIDktdHVwbGUgb3IgOmNsYXNzOmBzdHJ1Y3RfdGltZWAgdmFsdWVzLiBJZiB5ZWFyICh0aGUgZmlyc3QKKyAgdmFsdWUgaW4gdGhlIDktdHVwbGUpIGlzIHNwZWNpZmllZCB3aXRoIGxlc3MgdGhhbiA0IGRpZ2l0cywgaXRzIGludGVycHJldGF0aW9uCisgIGRlcGVuZHMgb24gdGhlIHZhbHVlIG9mIGBgYWNjZXB0MmR5ZWFyYGAgdmFyaWFibGUuCisKKyAgSWYgYGBhY2NlcHQyZHllYXJgYCBpcyB0cnVlIChkZWZhdWx0KSwgYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGJlaGF2aW9yIGlzCisgIGludm9rZWQgYXMgZm9sbG93czoKKworICAgIC0gZm9yIDItZGlnaXQgeWVhciwgY2VudHVyeSBpcyBndWVzc2VkIGFjY29yZGluZyB0byBQT1NJWCBydWxlcyBmb3IKKyAgICAgIGBgJXlgYCBzdHJwdGltZSBmb3JtYXQuICBBIGRlcHJlY2F0aW9uIHdhcm5pbmcgaXMgaXNzdWVkIHdoZW4gY2VudHVyeQorICAgICAgaW5mb3JtYXRpb24gaXMgZ3Vlc3NlZCBpbiB0aGlzIHdheS4KKworICAgIC0gZm9yIDMtZGlnaXQgb3IgbmVnYXRpdmUgeWVhciwgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgorCisgIElmIGBgYWNjZXB0MmR5ZWFyYGAgaXMgZmFsc2UgKHNldCBieSB0aGUgcHJvZ3JhbSBvciBhcyBhIHJlc3VsdCBvZiBhCisgIG5vbi1lbXB0eSB2YWx1ZSBhc3NpZ25lZCB0byBgYFBZVEhPTlkyS2BgIGVudmlyb25tZW50IHZhcmlhYmxlKSBhbGwgeWVhcgorICB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIGdpdmVuLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IFVUQwpAQCAtNzMsOCArODQsOCBAQAogKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIHByZWNpc2lvbiBvZiA6ZnVuYzpgdGltZWAgYW5kIDpmdW5jOmBzbGVlcGAgaXMgYmV0dGVyCiAgIHRoYW4gdGhlaXIgVW5peCBlcXVpdmFsZW50czogdGltZXMgYXJlIGV4cHJlc3NlZCBhcyBmbG9hdGluZyBwb2ludCBudW1iZXJzLAogICA6ZnVuYzpgdGltZWAgcmV0dXJucyB0aGUgbW9zdCBhY2N1cmF0ZSB0aW1lIGF2YWlsYWJsZSAodXNpbmcgVW5peAotICA6Y2Z1bmM6YGdldHRpbWVvZmRheWAgd2hlcmUgYXZhaWxhYmxlKSwgYW5kIDpmdW5jOmBzbGVlcGAgd2lsbCBhY2NlcHQgYSB0aW1lCi0gIHdpdGggYSBub256ZXJvIGZyYWN0aW9uIChVbml4IDpjZnVuYzpgc2VsZWN0YCBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGlzLCB3aGVyZQorICA6YzpmdW5jOmBnZXR0aW1lb2ZkYXlgIHdoZXJlIGF2YWlsYWJsZSksIGFuZCA6ZnVuYzpgc2xlZXBgIHdpbGwgYWNjZXB0IGEgdGltZQorICB3aXRoIGEgbm9uemVybyBmcmFjdGlvbiAoVW5peCA6YzpmdW5jOmBzZWxlY3RgIGlzIHVzZWQgdG8gaW1wbGVtZW50IHRoaXMsIHdoZXJlCiAgIGF2YWlsYWJsZSkuCiAKICogVGhlIHRpbWUgdmFsdWUgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdtdGltZWAsIDpmdW5jOmBsb2NhbHRpbWVgLCBhbmQKQEAgLTEwOSwxMCArMTIwLDE5IEBACiAKIC4uIGRhdGE6OiBhY2NlcHQyZHllYXIKIAotICAgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdHdvLWRpZ2l0IHllYXIgdmFsdWVzIHdpbGwgYmUgYWNjZXB0ZWQuICBUaGlzCi0gICBpcyB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCB3aWxsIGJlIHNldCB0byBmYWxzZSBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSAgIDplbnZ2YXI6YFBZVEhPTlkyS2AgaGFzIGJlZW4gc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZy4gIEl0IG1heSBhbHNvIGJlIG1vZGlmaWVkCi0gICBhdCBydW4gdGltZS4KKyAgIEJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHR3by1kaWdpdCB5ZWFyIHZhbHVlcyB3aWxsIGJlCisgICBtYXBwZWQgdG8gMTk2OS0tMjA2OCByYW5nZSBieSA6ZnVuYzpgYXNjdGltZWAsIDpmdW5jOmBta3RpbWVgLCBhbmQKKyAgIDpmdW5jOmBzdHJmdGltZWAgZnVuY3Rpb25zLiAgVGhpcyBpcyB0cnVlIGJ5IGRlZmF1bHQsIGJ1dCB3aWxsIGJlCisgICBzZXQgdG8gZmFsc2UgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YFBZVEhPTlkyS2AgaGFzCisgICBiZWVuIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcuICBJdCBtYXkgYWxzbyBiZSBtb2RpZmllZCBhdCBydW4KKyAgIHRpbWUuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKKyAgICAgIE1hcHBpbmcgb2YgMi1kaWdpdCB5ZWFyIHZhbHVlcyBieSA6ZnVuYzpgYXNjdGltZWAsCisgICAgICA6ZnVuYzpgbWt0aW1lYCwgYW5kIDpmdW5jOmBzdHJmdGltZWAgZnVuY3Rpb25zIHRvIDE5NjktLTIwNjgKKyAgICAgIHJhbmdlIGlzIGRlcHJlY2F0ZWQuICBQcm9ncmFtcyB0aGF0IG5lZWQgdG8gcHJvY2VzcyAyLWRpZ2l0CisgICAgICB5ZWFycyBzaG91bGQgdXNlIGBgJXlgYCBjb2RlIGF2YWlsYWJsZSBpbiA6ZnVuYzpgc3RycHRpbWVgCisgICAgICBmdW5jdGlvbiBvciBjb252ZXJ0IDItZGlnaXQgeWVhciB2YWx1ZXMgdG8gNC1kaWdpdCB0aGVtc2VsdmVzLgogCiAKIC4uIGRhdGE6OiBhbHR6b25lCkBAIC0xMjUsNyArMTQ1LDcgQEAKIC4uIGZ1bmN0aW9uOjogYXNjdGltZShbdF0pCiAKICAgIENvbnZlcnQgYSB0dXBsZSBvciA6Y2xhc3M6YHN0cnVjdF90aW1lYCByZXByZXNlbnRpbmcgYSB0aW1lIGFzIHJldHVybmVkIGJ5Ci0gICA6ZnVuYzpgZ210aW1lYCBvciA6ZnVuYzpgbG9jYWx0aW1lYCB0byBhIDI0LWNoYXJhY3RlciBzdHJpbmcgb2YgdGhlIGZvbGxvd2luZworICAgOmZ1bmM6YGdtdGltZWAgb3IgOmZ1bmM6YGxvY2FsdGltZWAgdG8gYSBzdHJpbmcgb2YgdGhlIGZvbGxvd2luZwogICAgZm9ybTogYGAnU3VuIEp1biAyMCAyMzoyMTowNSAxOTkzJ2BgLiAgSWYgKnQqIGlzIG5vdCBwcm92aWRlZCwgdGhlIGN1cnJlbnQgdGltZQogICAgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGxvY2FsdGltZWAgaXMgdXNlZC4gTG9jYWxlIGluZm9ybWF0aW9uIGlzIG5vdCB1c2VkIGJ5CiAgICA6ZnVuYzpgYXNjdGltZWAuCkBAIC0xNDksNyArMTY5LDcgQEAKIAogICAgT24gV2luZG93cywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdhbGwtY2xvY2sgc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHRoZSBmaXJzdAogICAgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYmFzZWQgb24gdGhlIFdpbjMyIGZ1bmN0aW9uCi0gICA6Y2Z1bmM6YFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyYC4gVGhlIHJlc29sdXRpb24gaXMgdHlwaWNhbGx5IGJldHRlciB0aGFuIG9uZQorICAgOmM6ZnVuYzpgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXJgLiBUaGUgcmVzb2x1dGlvbiBpcyB0eXBpY2FsbHkgYmV0dGVyIHRoYW4gb25lCiAgICBtaWNyb3NlY29uZC4KIAogCkBAIC0yODgsNyArMzA4LDcgQEAKICAgIHwgYGAleWBgICAgIHwgWWVhciB3aXRob3V0IGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlciAgICAgICB8ICAgICAgIHwKICAgIHwgICAgICAgICAgIHwgWzAwLDk5XS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKLSAgIHwgYGAlWWBgICAgIHwgWWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlci4gICAgICAgICB8ICAgICAgIHwKKyAgIHwgYGAlWWBgICAgIHwgWWVhciB3aXRoIGNlbnR1cnkgYXMgYSBkZWNpbWFsIG51bWJlci4gICAgICAgICB8IFwoNCkgIHwKICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsKICAgIHwgYGAlWmBgICAgIHwgVGltZSB6b25lIG5hbWUgKG5vIGNoYXJhY3RlcnMgaWYgbm8gdGltZSB6b25lICB8ICAgICAgIHwKQEAgLTMwNCwxMyArMzI0LDIwIEBACiAgICAgICB0aGUgb3V0cHV0IGhvdXIgZmllbGQgaWYgdGhlIGBgJUlgYCBkaXJlY3RpdmUgaXMgdXNlZCB0byBwYXJzZSB0aGUgaG91ci4KIAogICAgKDIpCi0gICAgICBUaGUgcmFuZ2UgcmVhbGx5IGlzIGBgMGBgIHRvIGBgNjFgYDsgdGhpcyBhY2NvdW50cyBmb3IgbGVhcCBzZWNvbmRzIGFuZCB0aGUKLSAgICAgICh2ZXJ5IHJhcmUpIGRvdWJsZSBsZWFwIHNlY29uZHMuCisgICAgICBUaGUgcmFuZ2UgcmVhbGx5IGlzIGBgMGBgIHRvIGBgNjFgYDsgdmFsdWUgYGA2MGBgIGlzIHZhbGlkIGluCisgICAgICB0aW1lc3RhbXBzIHJlcHJlc2VudGluZyBsZWFwIHNlY29uZHMgYW5kIHZhbHVlIGBgNjFgYCBpcyBzdXBwb3J0ZWQKKyAgICAgIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuCiAKICAgICgzKQogICAgICAgV2hlbiB1c2VkIHdpdGggdGhlIDpmdW5jOmBzdHJwdGltZWAgZnVuY3Rpb24sIGBgJVVgYCBhbmQgYGAlV2BgIGFyZSBvbmx5IHVzZWQgaW4KICAgICAgIGNhbGN1bGF0aW9ucyB3aGVuIHRoZSBkYXkgb2YgdGhlIHdlZWsgYW5kIHRoZSB5ZWFyIGFyZSBzcGVjaWZpZWQuCiAKKyAgICg0KQorICAgICAgUHJvZHVjZXMgZGlmZmVyZW50IHJlc3VsdHMgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgorICAgICAgYGB0aW1lLmFjY2VwdDJkeWVhcmBgIHZhcmlhYmxlLiAgU2VlIDpyZWY6YFllYXIgMjAwMCAoWTJLKQorICAgICAgaXNzdWVzIDx0aW1lLXkya2lzc3Vlcz5gIGZvciBkZXRhaWxzLgorCisKICAgIEhlcmUgaXMgYW4gZXhhbXBsZSwgYSBmb3JtYXQgZm9yIGRhdGVzIGNvbXBhdGlibGUgd2l0aCB0aGF0IHNwZWNpZmllZCAgaW4gdGhlCiAgICA6cmZjOmAyODIyYCBJbnRlcm5ldCBlbWFpbCBzdGFuZGFyZC4gIFsjXV8gOjoKIApAQCAtMzgwLDcgKzQwNyw3IEBACiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgNCAgICAgfCA6YXR0cjpgdG1fbWluYCAgICB8IHJhbmdlIFswLCA1OV0gICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gICB8IDUgICAgIHwgOmF0dHI6YHRtX3NlY2AgICAgfCByYW5nZSBbMCwgNjFdOyBzZWUgKiooMSkqKiBpbiAgIHwKKyAgIHwgNSAgICAgfCA6YXR0cjpgdG1fc2VjYCAgICB8IHJhbmdlIFswLCA2MV07IHNlZSAqKigyKSoqIGluICAgfAogICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgIHwgOmZ1bmM6YHN0cmZ0aW1lYCBkZXNjcmlwdGlvbiAgICB8CiAgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgNiAgICAgfCA6YXR0cjpgdG1fd2RheWAgICB8IHJhbmdlIFswLCA2XSwgTW9uZGF5IGlzIDAgICAgICAgfApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggNGEwYjljMi4uYTAzZTQwZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC05LDYgKzksMTAgQEAKICAgIHNpbmdsZTogQmVuY2htYXJraW5nCiAgICBzaW5nbGU6IFBlcmZvcm1hbmNlCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3RpbWVpdC5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzaW1wbGUgd2F5IHRvIHRpbWUgc21hbGwgYml0cyBvZiBQeXRob24gY29kZS4gSXQgaGFzIGJvdGgKIGNvbW1hbmQgbGluZSBhcyB3ZWxsIGFzIGNhbGxhYmxlIGludGVyZmFjZXMuICBJdCBhdm9pZHMgYSBudW1iZXIgb2YgY29tbW9uIHRyYXBzCiBmb3IgbWVhc3VyaW5nIGV4ZWN1dGlvbiB0aW1lcy4gIFNlZSBhbHNvIFRpbSBQZXRlcnMnIGludHJvZHVjdGlvbiB0byB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0IGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKaW5kZXggN2JiNTRmZC4uYWU1NjM1ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKQEAgLTksNyArOSw5IEBACiBUaGUgOm1vZDpgdGtpbnRlcmAgcGFja2FnZSAoIlRrIGludGVyZmFjZSIpIGlzIHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJmYWNlIHRvCiB0aGUgVGsgR1VJIHRvb2xraXQuICBCb3RoIFRrIGFuZCA6bW9kOmB0a2ludGVyYCBhcmUgYXZhaWxhYmxlIG9uIG1vc3QgVW5peAogcGxhdGZvcm1zLCBhcyB3ZWxsIGFzIG9uIFdpbmRvd3Mgc3lzdGVtcy4gIChUayBpdHNlbGYgaXMgbm90IHBhcnQgb2YgUHl0aG9uOyBpdAotaXMgbWFpbnRhaW5lZCBhdCBBY3RpdmVTdGF0ZS4pCitpcyBtYWludGFpbmVkIGF0IEFjdGl2ZVN0YXRlLikgWW91IGNhbiBjaGVjayB0aGF0IDptb2Q6YHRraW50ZXJgIGlzIHByb3Blcmx5CitpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0gYnkgcnVubmluZyBgYHB5dGhvbiAtbSB0a2ludGVyYGAgZnJvbSB0aGUgY29tbWFuZCBsaW5lOwordGhpcyBzaG91bGQgb3BlbiBhIHdpbmRvdyBkZW1vbnN0cmF0aW5nIGEgc2ltcGxlIFRrIGludGVyZmFjZS4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTY1Nyw5ICs2NTksNyBAQAogCiBzY3JvbGxjb21tYW5kCiAgICBUaGlzIGlzIGFsbW9zdCBhbHdheXMgdGhlIDptZXRoOmAhc2V0YCBtZXRob2Qgb2Ygc29tZSBzY3JvbGxiYXIgd2lkZ2V0LCBidXQgY2FuCi0gICBiZSBhbnkgd2lkZ2V0IG1ldGhvZCB0aGF0IHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50LiAgIFJlZmVyIHRvIHRoZSBmaWxlCi0gICA6ZmlsZTpgRGVtby90a2ludGVyL21hdHQvY2FudmFzLXdpdGgtc2Nyb2xsYmFycy5weWAgaW4gdGhlIFB5dGhvbiBzb3VyY2UKLSAgIGRpc3RyaWJ1dGlvbiBmb3IgYW4gZXhhbXBsZS4KKyAgIGJlIGFueSB3aWRnZXQgbWV0aG9kIHRoYXQgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQuCiAKIHdyYXA6CiAgICBNdXN0IGJlIG9uZSBvZjogYGAibm9uZSJgYCwgYGAiY2hhciJgYCwgb3IgYGAid29yZCJgYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIudGl4LnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIudGl4LnJzdAppbmRleCBiZWI5MWU2Li4yODliZmZkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnRpeC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci50aXgucnN0CkBAIC04NCwxMSArODQsNyBAQAogLS0tLS0tLS0tLS0KIAogYFRpeCA8aHR0cDovL3RpeC5zb3VyY2Vmb3JnZS5uZXQvZGlzdC9jdXJyZW50L21hbi9odG1sL1RpeENtZC9UaXhJbnRyby5odG0+YF8KLWludHJvZHVjZXMgb3ZlciA0MCB3aWRnZXQgY2xhc3NlcyB0byB0aGUgOm1vZDpgdGtpbnRlcmAgcmVwZXJ0b2lyZS4gIFRoZXJlIGlzIGEKLWRlbW8gb2YgYWxsIHRoZSA6bW9kOmB0a2ludGVyLnRpeGAgd2lkZ2V0cyBpbiB0aGUgOmZpbGU6YERlbW8vdGl4YCBkaXJlY3Rvcnkgb2YKLXRoZSBzdGFuZGFyZCBkaXN0cmlidXRpb24uCi0KLS4uIFRoZSBQeXRob24gc2FtcGxlIGNvZGUgaXMgc3RpbGwgYmVpbmcgYWRkZWQgdG8gUHl0aG9uLCBoZW5jZSBjb21tZW50ZWQgb3V0CitpbnRyb2R1Y2VzIG92ZXIgNDAgd2lkZ2V0IGNsYXNzZXMgdG8gdGhlIDptb2Q6YHRraW50ZXJgIHJlcGVydG9pcmUuCiAKIAogQmFzaWMgV2lkZ2V0cwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdG9rZW4ucnN0IGIvRG9jL2xpYnJhcnkvdG9rZW4ucnN0CmluZGV4IDk5MTc2MmYuLjRiOThlYWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Rva2VuLnJzdAorKysgYi9Eb2MvbGlicmFyeS90b2tlbi5yc3QKQEAgLTUsNiArNSw5IEBACiAgICA6c3lub3BzaXM6IENvbnN0YW50cyByZXByZXNlbnRpbmcgdGVybWluYWwgbm9kZXMgb2YgdGhlIHBhcnNlIHRyZWUuCiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvdG9rZW4ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGNvbnN0YW50cyB3aGljaCByZXByZXNlbnQgdGhlIG51bWVyaWMgdmFsdWVzIG9mIGxlYWYgbm9kZXMKIG9mIHRoZSBwYXJzZSB0cmVlICh0ZXJtaW5hbCB0b2tlbnMpLiAgUmVmZXIgdG8gdGhlIGZpbGUgOmZpbGU6YEdyYW1tYXIvR3JhbW1hcmAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdCBiL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdAppbmRleCA3MDE3MDQ1Li41NzdkN2NjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CkBAIC02LDYgKzYsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogS2EgUGluZyBZZWUKIC4uIHNlY3Rpb25hdXRob3I6OiBGcmVkIEwuIERyYWtlLCBKci4gPGZkcmFrZUBhY20ub3JnPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90b2tlbml6ZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRva2VuaXplYCBtb2R1bGUgcHJvdmlkZXMgYSBsZXhpY2FsIHNjYW5uZXIgZm9yIFB5dGhvbiBzb3VyY2UgY29kZSwKIGltcGxlbWVudGVkIGluIFB5dGhvbi4gIFRoZSBzY2FubmVyIGluIHRoaXMgbW9kdWxlIHJldHVybnMgY29tbWVudHMgYXMgdG9rZW5zCkBAIC05NSwxMiArOTgsMjUgQEAKIAogICAgIEl0IGRldGVjdHMgdGhlIGVuY29kaW5nIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgVVRGLTggQk9NIG9yIGFuIGVuY29kaW5nCiAgICAgY29va2llIGFzIHNwZWNpZmllZCBpbiA6cGVwOmAyNjNgLiBJZiBib3RoIGEgQk9NIGFuZCBhIGNvb2tpZSBhcmUgcHJlc2VudCwKLSAgICBidXQgZGlzYWdyZWUsIGEgU3ludGF4RXJyb3Igd2lsbCBiZSByYWlzZWQuCisgICAgYnV0IGRpc2FncmVlLCBhIFN5bnRheEVycm9yIHdpbGwgYmUgcmFpc2VkLiBOb3RlIHRoYXQgaWYgdGhlIEJPTSBpcyBmb3VuZCwKKyAgICBgYCd1dGYtOC1zaWcnYGAgd2lsbCBiZSByZXR1cm5lZCBhcyBhbiBlbmNvZGluZy4KIAotICAgIElmIG5vIGVuY29kaW5nIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZGVmYXVsdCBvZiBgYCd1dGYtOCdgYCB3aWxsIGJlIHJldHVybmVkLgorICAgIElmIG5vIGVuY29kaW5nIGlzIHNwZWNpZmllZCwgdGhlbiB0aGUgZGVmYXVsdCBvZiBgYCd1dGYtOCdgYCB3aWxsIGJlCisgICAgcmV0dXJuZWQuCisKKyAgICBVc2UgOmZ1bmM6YG9wZW5gIHRvIG9wZW4gUHl0aG9uIHNvdXJjZSBmaWxlczogaXQgdXNlcworICAgIDpmdW5jOmBkZXRlY3RfZW5jb2RpbmdgIHRvIGRldGVjdCB0aGUgZmlsZSBlbmNvZGluZy4KIAogCi1FeGFtcGxlIG9mIGEgc2NyaXB0IHJlLXdyaXRlciB0aGF0IHRyYW5zZm9ybXMgZmxvYXQgbGl0ZXJhbHMgaW50byBEZWNpbWFsCisuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZW5hbWUpCisKKyAgIE9wZW4gYSBmaWxlIGluIHJlYWQgb25seSBtb2RlIHVzaW5nIHRoZSBlbmNvZGluZyBkZXRlY3RlZCBieQorICAgOmZ1bmM6YGRldGVjdF9lbmNvZGluZ2AuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKK0V4YW1wbGUgb2YgYSBzY3JpcHQgcmV3cml0ZXIgdGhhdCB0cmFuc2Zvcm1zIGZsb2F0IGxpdGVyYWxzIGludG8gRGVjaW1hbAogb2JqZWN0czo6CiAKICAgICBmcm9tIHRva2VuaXplIGltcG9ydCB0b2tlbml6ZSwgdW50b2tlbml6ZSwgTlVNQkVSLCBTVFJJTkcsIE5BTUUsIE9QCkBAIC0xNDIsNCArMTU4LDMgQEAKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCh0b2tudW0sIHRva3ZhbCkpCiAgICAgICAgIHJldHVybiB1bnRva2VuaXplKHJlc3VsdCkuZGVjb2RlKCd1dGYtOCcpCiAKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2UucnN0IGIvRG9jL2xpYnJhcnkvdHJhY2UucnN0CmluZGV4IDdiNDljOGYuLmM0ZGRjNTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RyYWNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90cmFjZS5yc3QKQEAgLTQsMTMgKzQsMTUgQEAKIC4uIG1vZHVsZTo6IHRyYWNlCiAgICA6c3lub3BzaXM6IFRyYWNlIG9yIHRyYWNrIFB5dGhvbiBzdGF0ZW1lbnQgZXhlY3V0aW9uLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi90cmFjZS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHRyYWNlYCBtb2R1bGUgYWxsb3dzIHlvdSB0byB0cmFjZSBwcm9ncmFtIGV4ZWN1dGlvbiwgZ2VuZXJhdGUKIGFubm90YXRlZCBzdGF0ZW1lbnQgY292ZXJhZ2UgbGlzdGluZ3MsIHByaW50IGNhbGxlci9jYWxsZWUgcmVsYXRpb25zaGlwcyBhbmQKIGxpc3QgZnVuY3Rpb25zIGV4ZWN1dGVkIGR1cmluZyBhIHByb2dyYW0gcnVuLiAgSXQgY2FuIGJlIHVzZWQgaW4gYW5vdGhlciBwcm9ncmFtCiBvciBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCiAKLQogLi4gX3RyYWNlLWNsaToKIAogQ29tbWFuZC1MaW5lIFVzYWdlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wZGYgYi9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM1NDA3MwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3R1cnRsZS1zdGFyLnBkZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wbmcgYi9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmMzZhMwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3R1cnRsZS1zdGFyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wcyBiL0RvYy9saWJyYXJ5L3R1cnRsZS1zdGFyLnBzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MzYyY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dXJ0bGUtc3Rhci5wcwpAQCAtMCwwICsxLDQ0NyBAQAorJSFQUy1BZG9iZS0zLjAgRVBTRi0zLjAKKyUlQ3JlYXRvcjogVGsgQ2FudmFzIFdpZGdldAorJSVGb3I6IEFsZXhhbmRlciBCZWxvcG9sc2t5CislJVRpdGxlOiBXaW5kb3cgLjQzMTU5MDU0MjQKKyUlQ3JlYXRpb25EYXRlOiBUdWUgTm92ICA5IDEyOjU0OjA2IDIwMTAKKyUlWEJvdW5kaW5nQm94OiAtMTcyIC01MiA3ODUgODQ1CislJUJvdW5kaW5nQm94OiAyOTAgMjkwIDUyMCA1MjAKKyUlUGFnZXM6IDEKKyUlRG9jdW1lbnREYXRhOiBDbGVhbjdCaXQKKyUlT3JpZW50YXRpb246IFBvcnRyYWl0CislJUVuZENvbW1lbnRzCisKKyUlQmVnaW5Qcm9sb2cKKy9DdXJyZW50RW5jb2RpbmcgWworL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlCisvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2UKKy9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZQorL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlCisvc3BhY2UvZXhjbGFtL3F1b3RlZGJsL251bWJlcnNpZ24vZG9sbGFyL3BlcmNlbnQvYW1wZXJzYW5kL3F1b3Rlc2luZ2xlCisvcGFyZW5sZWZ0L3BhcmVucmlnaHQvYXN0ZXJpc2svcGx1cy9jb21tYS9oeXBoZW4vcGVyaW9kL3NsYXNoCisvemVyby9vbmUvdHdvL3RocmVlL2ZvdXIvZml2ZS9zaXgvc2V2ZW4KKy9laWdodC9uaW5lL2NvbG9uL3NlbWljb2xvbi9sZXNzL2VxdWFsL2dyZWF0ZXIvcXVlc3Rpb24KKy9hdC9BL0IvQy9EL0UvRi9HCisvSC9JL0ovSy9ML00vTi9PCisvUC9RL1IvUy9UL1UvVi9XCisvWC9ZL1ovYnJhY2tldGxlZnQvYmFja3NsYXNoL2JyYWNrZXRyaWdodC9hc2NpaWNpcmN1bS91bmRlcnNjb3JlCisvZ3JhdmUvYS9iL2MvZC9lL2YvZworL2gvaS9qL2svbC9tL24vbworL3AvcS9yL3MvdC91L3YvdworL3gveS96L2JyYWNlbGVmdC9iYXIvYnJhY2VyaWdodC9hc2NpaXRpbGRlL3NwYWNlCisvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2UKKy9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZS9zcGFjZQorL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlL3NwYWNlCisvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2Uvc3BhY2UKKy9zcGFjZS9leGNsYW1kb3duL2NlbnQvc3RlcmxpbmcvY3VycmVuY3kveWVuL2Jyb2tlbmJhci9zZWN0aW9uCisvZGllcmVzaXMvY29weXJpZ2h0L29yZGZlbWluaW5lL2d1aWxsZW1vdGxlZnQvbG9naWNhbG5vdC9oeXBoZW4vcmVnaXN0ZXJlZC9tYWNyb24KKy9kZWdyZWUvcGx1c21pbnVzL3R3b3N1cGVyaW9yL3RocmVlc3VwZXJpb3IvYWN1dGUvbXUvcGFyYWdyYXBoL3BlcmlvZGNlbnRlcmVkCisvY2VkaWxsYS9vbmVzdXBlcmlvci9vcmRtYXNjdWxpbmUvZ3VpbGxlbW90cmlnaHQvb25lcXVhcnRlci9vbmVoYWxmL3RocmVlcXVhcnRlcnMvcXVlc3Rpb25kb3duCisvQWdyYXZlL0FhY3V0ZS9BY2lyY3VtZmxleC9BdGlsZGUvQWRpZXJlc2lzL0FyaW5nL0FFL0NjZWRpbGxhCisvRWdyYXZlL0VhY3V0ZS9FY2lyY3VtZmxleC9FZGllcmVzaXMvSWdyYXZlL0lhY3V0ZS9JY2lyY3VtZmxleC9JZGllcmVzaXMKKy9FdGgvTnRpbGRlL09ncmF2ZS9PYWN1dGUvT2NpcmN1bWZsZXgvT3RpbGRlL09kaWVyZXNpcy9tdWx0aXBseQorL09zbGFzaC9VZ3JhdmUvVWFjdXRlL1VjaXJjdW1mbGV4L1VkaWVyZXNpcy9ZYWN1dGUvVGhvcm4vZ2VybWFuZGJscworL2FncmF2ZS9hYWN1dGUvYWNpcmN1bWZsZXgvYXRpbGRlL2FkaWVyZXNpcy9hcmluZy9hZS9jY2VkaWxsYQorL2VncmF2ZS9lYWN1dGUvZWNpcmN1bWZsZXgvZWRpZXJlc2lzL2lncmF2ZS9pYWN1dGUvaWNpcmN1bWZsZXgvaWRpZXJlc2lzCisvZXRoL250aWxkZS9vZ3JhdmUvb2FjdXRlL29jaXJjdW1mbGV4L290aWxkZS9vZGllcmVzaXMvZGl2aWRlCisvb3NsYXNoL3VncmF2ZS91YWN1dGUvdWNpcmN1bWZsZXgvdWRpZXJlc2lzL3lhY3V0ZS90aG9ybi95ZGllcmVzaXMKK10gZGVmCisKKzUwIGRpY3QgYmVnaW4KKyUgVGhpcyBpcyBhIHN0YW5kYXJkIHByb2xvZyBmb3IgUG9zdHNjcmlwdCBnZW5lcmF0ZWQgYnkgVGsncyBjYW52YXMKKyUgd2lkZ2V0LgorJSBSQ1M6IEAoIykgJElkJAorCislIFRoZSBkZWZpbml0aW9ucyBiZWxvdyBqdXN0IGRlZmluZSBhbGwgb2YgdGhlIHZhcmlhYmxlcyB1c2VkIGluCislIGFueSBvZiB0aGUgcHJvY2VkdXJlcyBoZXJlLiAgVGhpcyBpcyBuZWVkZWQgZm9yIG9ic2N1cmUgcmVhc29ucworJSBleHBsYWluZWQgb24gcC4gNzE2IG9mIHRoZSBQb3N0c2NyaXB0IG1hbnVhbCAoU2VjdGlvbiBILjIuNywKKyUgIkluaXRpYWxpemluZyBWYXJpYWJsZXMsIiBpbiB0aGUgc2VjdGlvbiBvbiBFbmNhcHN1bGF0ZWQgUG9zdHNjcmlwdCkuCisKKy9iYXNlbGluZSAwIGRlZgorL3N0aXBpbWFnZSAwIGRlZgorL2hlaWdodCAwIGRlZgorL2p1c3RpZnkgMCBkZWYKKy9saW5lTGVuZ3RoIDAgZGVmCisvc3BhY2luZyAwIGRlZgorL3N0aXBwbGUgMCBkZWYKKy9zdHJpbmdzIDAgZGVmCisveG9mZnNldCAwIGRlZgorL3lvZmZzZXQgMCBkZWYKKy90bXBzdGlwIG51bGwgZGVmCisKKworL2NzdHJpbmdzaG93IHsKKyAgICB7CisJZHVwIHR5cGUgL3N0cmluZ3R5cGUgZXEKKwl7IHNob3cgfSB7IGdseXBoc2hvdyB9CisJaWZlbHNlCisgICAgfQorICAgIGZvcmFsbAorfSBiaW5kIGRlZgorCisKKworL2NzdHJpbmd3aWR0aCB7CisgICAgMCBleGNoIDAgZXhjaAorICAgIHsKKwlkdXAgdHlwZSAvc3RyaW5ndHlwZSBlcQorCXsgc3RyaW5nd2lkdGggfSB7IAorCSAgICBjdXJyZW50Zm9udCAvRW5jb2RpbmcgZ2V0IGV4Y2ggMSBleGNoIHB1dCAoXDAwMSkgc3RyaW5nd2lkdGggCisgICAgICAgIH0KKwlpZmVsc2UgCisJZXhjaCAzIDEgcm9sbCBhZGQgMyAxIHJvbGwgYWRkIGV4Y2gKKyAgICB9CisgICAgZm9yYWxsCit9IGJpbmQgZGVmCisKKyUgZm9udCBJU09FbmNvZGUgZm9udAorJSBUaGlzIHByb2NlZHVyZSBjaGFuZ2VzIHRoZSBlbmNvZGluZyBvZiBhIGZvbnQgZnJvbSB0aGUgZGVmYXVsdAorJSBQb3N0c2NyaXB0IGVuY29kaW5nIHRvIGN1cnJlbnQgc3lzdGVtIGVuY29kaW5nLiAgSXQncyB0eXBpY2FsbHkgaW52b2tlZCBqdXN0CislIGJlZm9yZSBpbnZva2luZyAic2V0Zm9udCIuICBUaGUgYm9keSBvZiB0aGlzIHByb2NlZHVyZSBjb21lcyBmcm9tCislIFNlY3Rpb24gNS42LjEgb2YgdGhlIFBvc3RzY3JpcHQgYm9vay4KKworL0lTT0VuY29kZSB7CisgICAgZHVwIGxlbmd0aCBkaWN0IGJlZ2luCisJezEgaW5kZXggL0ZJRCBuZSB7ZGVmfSB7cG9wIHBvcH0gaWZlbHNlfSBmb3JhbGwKKwkvRW5jb2RpbmcgQ3VycmVudEVuY29kaW5nIGRlZgorCWN1cnJlbnRkaWN0CisgICAgZW5kCisKKyAgICAlIEknbSBub3Qgc3VyZSB3aHkgaXQncyBuZWNlc3NhcnkgdG8gdXNlICJkZWZpbmVmb250IiBvbiB0aGlzIG5ldworICAgICUgZm9udCwgYnV0IGl0IHNlZW1zIHRvIGJlIGltcG9ydGFudDsganVzdCB1c2UgdGhlIG5hbWUgIlRlbXBvcmFyeSIKKyAgICAlIGZvciB0aGUgZm9udC4KKworICAgIC9UZW1wb3JhcnkgZXhjaCBkZWZpbmVmb250Cit9IGJpbmQgZGVmCisKKyUgU3Ryb2tlQ2xpcAorJQorJSBUaGlzIHByb2NlZHVyZSBjb252ZXJ0cyB0aGUgY3VycmVudCBwYXRoIGludG8gYSBjbGlwIGFyZWEgdW5kZXIKKyUgdGhlIGFzc3VtcHRpb24gb2Ygc3Ryb2tpbmcuICBJdCdzIGEgYml0IHRyaWNreSBiZWNhdXNlIHNvbWUgUG9zdHNjcmlwdAorJSBpbnRlcnByZXRlcnMgZ2V0IGVycm9ycyBkdXJpbmcgc3Ryb2tlcGF0aCBmb3IgZGFzaGVkIGxpbmVzLiAgSWYKKyUgdGhpcyBoYXBwZW5zIHRoZW4gdHVybiBvZmYgZGFzaGVzIGFuZCB0cnkgYWdhaW4uCisKKy9TdHJva2VDbGlwIHsKKyAgICB7c3Ryb2tlcGF0aH0gc3RvcHBlZCB7CisJKFRoaXMgUG9zdHNjcmlwdCBwcmludGVyIGdldHMgbGltaXRjaGVjayBvdmVyZmxvd3Mgd2hlbikgPQorCShzdGlwcGxpbmcgZGFzaGVkIGxpbmVzOyAgbGluZXMgd2lsbCBiZSBwcmludGVkIHNvbGlkIGluc3RlYWQuKSA9CisJW10gMCBzZXRkYXNoIHN0cm9rZXBhdGh9IGlmCisgICAgY2xpcAorfSBiaW5kIGRlZgorCislIGRlc2lyZWRTaXplIEV2ZW5QaXhlbHMgY2xvc2VzdFNpemUKKyUKKyUgVGhlIHByb2NlZHVyZSBiZWxvdyBpcyB1c2VkIGZvciBzdGlwcGxpbmcuICBHaXZlbiB0aGUgb3B0aW1hbCBzaXplCislIG9mIGEgZG90IGluIGEgc3RpcHBsZSBwYXR0ZXJuIGluIHRoZSBjdXJyZW50IHVzZXIgY29vcmRpbmF0ZSBzeXN0ZW0sCislIGNvbXB1dGUgdGhlIGNsb3Nlc3Qgc2l6ZSB0aGF0IGlzIGFuIGV4YWN0IG11bHRpcGxlIG9mIHRoZSBkZXZpY2UncworJSBwaXhlbCBzaXplLiAgVGhpcyBhbGxvd3Mgc3RpcHBsZSBwYXR0ZXJucyB0byBiZSBkaXNwbGF5ZWQgd2l0aG91dAorJSBhbGlhc2luZyBlZmZlY3RzLgorCisvRXZlblBpeGVscyB7CisgICAgJSBDb21wdXRlIGV4YWN0IG51bWJlciBvZiBkZXZpY2UgcGl4ZWxzIHBlciBzdGlwcGxlIGRvdC4KKyAgICBkdXAgMCBtYXRyaXggY3VycmVudG1hdHJpeCBkdHJhbnNmb3JtCisgICAgZHVwIG11bCBleGNoIGR1cCBtdWwgYWRkIHNxcnQKKworICAgICUgUm91bmQgdG8gYW4gaW50ZWdlciwgbWFrZSBzdXJlIHRoZSBudW1iZXIgaXMgYXQgbGVhc3QgMSwgYW5kIGNvbXB1dGUKKyAgICAlIHVzZXIgY29vcmQgZGlzdGFuY2UgY29ycmVzcG9uZGluZyB0byB0aGlzLgorICAgIGR1cCByb3VuZCBkdXAgMSBsdCB7cG9wIDF9IGlmCisgICAgZXhjaCBkaXYgbXVsCit9IGJpbmQgZGVmCisKKyUgd2lkdGggaGVpZ2h0IHN0cmluZyBTdGlwcGxlRmlsbCAtLQorJQorJSBHaXZlbiBhIHBhdGggYWxyZWFkeSBzZXQgdXAgYW5kIGEgY2xpcHBpbmcgcmVnaW9uIGdlbmVyYXRlZCBmcm9tCislIGl0LCB0aGlzIHByb2NlZHVyZSB3aWxsIGZpbGwgdGhlIGNsaXBwaW5nIHJlZ2lvbiB3aXRoIGEgc3RpcHBsZQorJSBwYXR0ZXJuLiAgIlN0cmluZyIgY29udGFpbnMgYSBwcm9wZXIgaW1hZ2UgZGVzY3JpcHRpb24gb2YgdGhlCislIHN0aXBwbGUgcGF0dGVybiBhbmQgIndpZHRoIiBhbmQgImhlaWdodCIgZ2l2ZSBpdHMgZGltZW5zaW9ucy4gIEVhY2gKKyUgc3RpcHBsZSBkb3QgaXMgYXNzdW1lZCB0byBiZSBhYm91dCBvbmUgdW5pdCBhY3Jvc3MgaW4gdGhlIGN1cnJlbnQKKyUgdXNlciBjb29yZGluYXRlIHN5c3RlbS4gIFRoaXMgcHJvY2VkdXJlIHRyYXNoZXMgdGhlIGdyYXBoaWNzIHN0YXRlLgorCisvU3RpcHBsZUZpbGwgeworICAgICUgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIE5lV1NwcmludCBidWcuCisKKyAgICAvdG1wc3RpcCAxIGluZGV4IGRlZgorCisgICAgJSBDaGFuZ2UgdGhlIHNjYWxpbmcgc28gdGhhdCBvbmUgdXNlciB1bml0IGluIHVzZXIgY29vcmRpbmF0ZXMKKyAgICAlIGNvcnJlc3BvbmRzIHRvIHRoZSBzaXplIG9mIG9uZSBzdGlwcGxlIGRvdC4KKyAgICAxIEV2ZW5QaXhlbHMgZHVwIHNjYWxlCisKKyAgICAlIENvbXB1dGUgdGhlIGJvdW5kaW5nIGJveCBvY2N1cGllZCBieSB0aGUgcGF0aCAod2hpY2ggaXMgbm93CisgICAgJSB0aGUgY2xpcHBpbmcgcmVnaW9uKSwgYW5kIHJvdW5kIHRoZSBsb3dlciBjb29yZGluYXRlcyBkb3duCisgICAgJSB0byB0aGUgbmVhcmVzdCBzdGFydGluZyBwb2ludCBmb3IgdGhlIHN0aXBwbGUgcGF0dGVybi4gIEJlCisgICAgJSBjYXJlZnVsIGFib3V0IG5lZ2F0aXZlIG51bWJlcnMsIHNpbmNlIHRoZSByb3VuZGluZyB3b3JrcworICAgICUgZGlmZmVyZW50bHkgb24gdGhlbS4KKworICAgIHBhdGhiYm94CisgICAgNCAyIHJvbGwKKyAgICA1IGluZGV4IGRpdiBkdXAgMCBsdCB7MSBzdWJ9IGlmIGN2aSA1IGluZGV4IG11bCA0IDEgcm9sbAorICAgIDYgaW5kZXggZGl2IGR1cCAwIGx0IHsxIHN1Yn0gaWYgY3ZpIDYgaW5kZXggbXVsIDMgMiByb2xsCisKKyAgICAlIFN0YWNrIG5vdzogd2lkdGggaGVpZ2h0IHN0cmluZyB5MSB5MiB4MSB4MgorICAgICUgQmVsb3cgaXMgYSBkb3VibHktbmVzdGVkIGZvciBsb29wIHRvIGl0ZXJhdGUgYWNyb3NzIHRoaXMgYXJlYQorICAgICUgaW4gdW5pdHMgb2YgdGhlIHN0aXBwbGUgcGF0dGVybiBzaXplLCBnb2luZyB1cCBjb2x1bW5zIHRoZW4KKyAgICAlIGFjcm9zcyByb3dzLCBibGFzdGluZyBvdXQgYSBzdGlwcGxlLXBhdHRlcm4tc2l6ZWQgcmVjdGFuZ2xlIGF0CisgICAgJSBlYWNoIHBvc2l0aW9uCisKKyAgICA2IGluZGV4IGV4Y2ggeworCTIgaW5kZXggNSBpbmRleCAzIGluZGV4IHsKKwkgICAgJSBTdGFjayBub3c6IHdpZHRoIGhlaWdodCBzdHJpbmcgeTEgeTIgeCB5CisKKwkgICAgZ3NhdmUKKwkgICAgMSBpbmRleCBleGNoIHRyYW5zbGF0ZQorCSAgICA1IGluZGV4IDUgaW5kZXggdHJ1ZSBtYXRyaXggdG1wc3RpcCBpbWFnZW1hc2sKKwkgICAgZ3Jlc3RvcmUKKwl9IGZvcgorCXBvcAorICAgIH0gZm9yCisgICAgcG9wIHBvcCBwb3AgcG9wIHBvcAorfSBiaW5kIGRlZgorCislIC0tIEFkanVzdENvbG9yIC0tCislIEdpdmVuIGEgY29sb3IgdmFsdWUgYWxyZWFkeSBzZXQgZm9yIG91dHB1dCBieSB0aGUgY2FsbGVyLCBhZGp1c3RzCislIHRoYXQgdmFsdWUgdG8gYSBncmF5c2NhbGUgb3IgbW9ubyB2YWx1ZSBpZiByZXF1ZXN0ZWQgYnkgdGhlIENMCislIHZhcmlhYmxlLgorCisvQWRqdXN0Q29sb3IgeworICAgIENMIDIgbHQgeworCWN1cnJlbnRncmF5CisJQ0wgMCBlcSB7CisJICAgIC41IGx0IHswfSB7MX0gaWZlbHNlCisJfSBpZgorCXNldGdyYXkKKyAgICB9IGlmCit9IGJpbmQgZGVmCisKKyUgeCB5IHN0cmluZ3Mgc3BhY2luZyB4b2Zmc2V0IHlvZmZzZXQganVzdGlmeSBzdGlwcGxlIERyYXdUZXh0IC0tCislIFRoaXMgcHJvY2VkdXJlIGRvZXMgYWxsIG9mIHRoZSByZWFsIHdvcmsgb2YgZHJhd2luZyB0ZXh0LiAgVGhlCislIGNvbG9yIGFuZCBmb250IG11c3QgYWxyZWFkeSBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBjYWxsZXIsIGFuZCB0aGUKKyUgZm9sbG93aW5nIGFyZ3VtZW50cyBtdXN0IGJlIG9uIHRoZSBzdGFjazoKKyUKKyUgeCwgeSAtCUNvb3JkaW5hdGVzIGF0IHdoaWNoIHRvIGRyYXcgdGV4dC4KKyUgc3RyaW5ncyAtCUFuIGFycmF5IG9mIHN0cmluZ3MsIG9uZSBmb3IgZWFjaCBsaW5lIG9mIHRoZSB0ZXh0IGl0ZW0sCislCQlpbiBvcmRlciBmcm9tIHRvcCB0byBib3R0b20uCislIHNwYWNpbmcgLQlTcGFjaW5nIGJldHdlZW4gbGluZXMuCislIHhvZmZzZXQgLQlIb3Jpem9udGFsIG9mZnNldCBmb3IgdGV4dCBiYm94IHJlbGF0aXZlIHRvIHggYW5kIHk6IDAgZm9yCislCQludy93L3N3IGFuY2hvciwgLTAuNSBmb3Igbi9jZW50ZXIvcywgYW5kIC0xLjAgZm9yIG5lL2Uvc2UuCislIHlvZmZzZXQgLQlWZXJ0aWNhbCBvZmZzZXQgZm9yIHRleHQgYmJveCByZWxhdGl2ZSB0byB4IGFuZCB5OiAwIGZvcgorJQkJbncvbi9uZSBhbmNob3IsICswLjUgZm9yIHcvY2VudGVyL2UsIGFuZCArMS4wIGZvciBzdy9zL3NlLgorJSBqdXN0aWZ5IC0JMCBmb3IgbGVmdCBqdXN0aWZpY2F0aW9uLCAwLjUgZm9yIGNlbnRlciwgMSBmb3IgcmlnaHQganVzdGlmeS4KKyUgc3RpcHBsZSAtCUJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0ZXh0IGlzIHRvIGJlCislCQlkcmF3biBpbiBzdGlwcGxlZCBmYXNoaW9uLiAgSWYgdGV4dCBpcyBzdGlwcGxlZCwKKyUJCXByb2NlZHVyZSBTdGlwcGxlVGV4dCBtdXN0IGhhdmUgYmVlbiBkZWZpbmVkIHRvIGNhbGwKKyUJCVN0aXBwbGVGaWxsIGluIHRoZSByaWdodCB3YXkuCislCislIEFsc28sIHdoZW4gdGhpcyBwcm9jZWR1cmUgaXMgaW52b2tlZCwgdGhlIGNvbG9yIGFuZCBmb250IG11c3QgYWxyZWFkeQorJSBoYXZlIGJlZW4gc2V0IGZvciB0aGUgdGV4dC4KKworL0RyYXdUZXh0IHsKKyAgICAvc3RpcHBsZSBleGNoIGRlZgorICAgIC9qdXN0aWZ5IGV4Y2ggZGVmCisgICAgL3lvZmZzZXQgZXhjaCBkZWYKKyAgICAveG9mZnNldCBleGNoIGRlZgorICAgIC9zcGFjaW5nIGV4Y2ggZGVmCisgICAgL3N0cmluZ3MgZXhjaCBkZWYKKworICAgICUgRmlyc3Qgc2NhbiB0aHJvdWdoIGFsbCBvZiB0aGUgdGV4dCB0byBmaW5kIHRoZSB3aWRlc3QgbGluZS4KKworICAgIC9saW5lTGVuZ3RoIDAgZGVmCisgICAgc3RyaW5ncyB7CisJY3N0cmluZ3dpZHRoIHBvcAorCWR1cCBsaW5lTGVuZ3RoIGd0IHsvbGluZUxlbmd0aCBleGNoIGRlZn0ge3BvcH0gaWZlbHNlCisJbmV3cGF0aAorICAgIH0gZm9yYWxsCisKKyAgICAlIENvbXB1dGUgdGhlIGJhc2VsaW5lIG9mZnNldCBhbmQgdGhlIGFjdHVhbCBmb250IGhlaWdodC4KKworICAgIDAgMCBtb3ZldG8gKFRYeWdxUFopIGZhbHNlIGNoYXJwYXRoCisgICAgcGF0aGJib3ggZHVwIC9iYXNlbGluZSBleGNoIGRlZgorICAgIGV4Y2ggcG9wIGV4Y2ggc3ViIC9oZWlnaHQgZXhjaCBkZWYgcG9wCisgICAgbmV3cGF0aAorCisgICAgJSBUcmFuc2xhdGUgY29vcmRpbmF0ZXMgZmlyc3Qgc28gdGhhdCB0aGUgb3JpZ2luIGlzIGF0IHRoZSB1cHBlci1sZWZ0CisgICAgJSBjb3JuZXIgb2YgdGhlIHRleHQncyBib3VuZGluZyBib3guIFJlbWVtYmVyIHRoYXQgeCBhbmQgeSBmb3IKKyAgICAlIHBvc2l0aW9uaW5nIGFyZSBzdGlsbCBvbiB0aGUgc3RhY2suCisKKyAgICB0cmFuc2xhdGUKKyAgICBsaW5lTGVuZ3RoIHhvZmZzZXQgbXVsCisgICAgc3RyaW5ncyBsZW5ndGggMSBzdWIgc3BhY2luZyBtdWwgaGVpZ2h0IGFkZCB5b2Zmc2V0IG11bCB0cmFuc2xhdGUKKworICAgICUgTm93IHVzZSB0aGUgYmFzZWxpbmUgYW5kIGp1c3RpZmljYXRpb24gaW5mb3JtYXRpb24gdG8gdHJhbnNsYXRlIHNvCisgICAgJSB0aGF0IHRoZSBvcmlnaW4gaXMgYXQgdGhlIGJhc2VsaW5lIGFuZCBwb3NpdGlvbmluZyBwb2ludCBmb3IgdGhlCisgICAgJSBmaXJzdCBsaW5lIG9mIHRleHQuCisKKyAgICBqdXN0aWZ5IGxpbmVMZW5ndGggbXVsIGJhc2VsaW5lIG5lZyB0cmFuc2xhdGUKKworICAgICUgSXRlcmF0ZSBvdmVyIGVhY2ggb2YgdGhlIGxpbmVzIHRvIG91dHB1dCBpdC4gIEZvciBlYWNoIGxpbmUsCisgICAgJSBjb21wdXRlIGl0cyB3aWR0aCBhZ2FpbiBzbyBpdCBjYW4gYmUgcHJvcGVybHkganVzdGlmaWVkLCB0aGVuCisgICAgJSBkaXNwbGF5IGl0LgorCisgICAgc3RyaW5ncyB7CisJZHVwIGNzdHJpbmd3aWR0aCBwb3AKKwlqdXN0aWZ5IG5lZyBtdWwgMCBtb3ZldG8KKwlzdGlwcGxlIHsKKwkgICAKKyAKKwkgICAgJSBUaGUgdGV4dCBpcyBzdGlwcGxlZCwgc28gdHVybiBpdCBpbnRvIGEgcGF0aCBhbmQgcHJpbnQKKwkgICAgJSBieSBjYWxsaW5nIFN0aXBwbGVkVGV4dCwgd2hpY2ggaW4gdHVybiBjYWxscyBTdGlwcGxlRmlsbC4KKwkgICAgJSBVbmZvcnR1bmF0ZWx5LCBtYW55IFBvc3RzY3JpcHQgaW50ZXJwcmV0ZXJzIHdpbGwgZ2V0CisJICAgICUgb3ZlcmZsb3cgZXJyb3JzIGlmIHdlIHRyeSB0byBkbyB0aGUgd2hvbGUgc3RyaW5nIGF0CisJICAgICUgb25jZSwgc28gZG8gaXQgYSBjaGFyYWN0ZXIgYXQgYSB0aW1lLgorCisJICAgIGdzYXZlCisJICAgIC9jaGFyIChYKSBkZWYKKwkgICAgeworCQlkdXAgdHlwZSAvc3RyaW5ndHlwZSBlcSB7CisJCSAgICAlIFRoaXMgc2VnbWVudCBpcyBhIHN0cmluZy4KKwkJICAgIHsKKwkJICAgICAgICBjaGFyIDAgMyAtMSByb2xsIHB1dAorCQkgICAgICAgIGN1cnJlbnRwb2ludAorCQkgICAgICAgIGdzYXZlCisJCSAgICAgICAgY2hhciB0cnVlIGNoYXJwYXRoIGNsaXAgU3RpcHBsZVRleHQKKwkJICAgICAgICBncmVzdG9yZQorCQkgICAgICAgIGNoYXIgc3RyaW5nd2lkdGggdHJhbnNsYXRlCisJCSAgICAgICAgbW92ZXRvCisJCSAgICB9IGZvcmFsbAorCQl9IHsKKwkJICAgICUgVGhpcyBzZWdtZW50IGlzIGdseXBoIG5hbWUKKwkJICAgICUgVGVtcG9yYXJ5IG92ZXJyaWRlCisJCSAgICBjdXJyZW50Zm9udCAvRW5jb2RpbmcgZ2V0IGV4Y2ggMSBleGNoIHB1dAorCQkgICAgY3VycmVudHBvaW50CisJCSAgICBnc2F2ZSAoXDAwMSkgdHJ1ZSBjaGFycGF0aCBjbGlwIFN0aXBwbGVUZXh0CisJCSAgICBncmVzdG9yZQorCSAgICAgICAgICAgIChcMDAxKSBzdHJpbmd3aWR0aCB0cmFuc2xhdGUKKwkJICAgIG1vdmV0bworCQl9IGlmZWxzZQorCSAgICB9IGZvcmFsbAorCSAgICBncmVzdG9yZSAKKwl9IHtjc3RyaW5nc2hvd30gaWZlbHNlCisJMCBzcGFjaW5nIG5lZyB0cmFuc2xhdGUKKyAgICB9IGZvcmFsbAorfSBiaW5kIGRlZgorCislJUVuZFByb2xvZworJSVCZWdpblNldHVwCisvQ0wgMiBkZWYKKyUlRW5kU2V0dXAKKworJSVQYWdlOiAxIDEKK3NhdmUKKzMwNi4wIDM5Ni4wIHRyYW5zbGF0ZQorMC45OTk1IDAuOTk5NSBzY2FsZQorNCAtNDQ5IHRyYW5zbGF0ZQorLTQ4MyA4OTggbW92ZXRvIDQ3NSA4OTggbGluZXRvIDQ3NSAwIGxpbmV0byAtNDgzIDAgbGluZXRvIGNsb3NlcGF0aCBjbGlwIG5ld3BhdGgKK2dzYXZlCitncmVzdG9yZQorZ3NhdmUKKzAgNDQ1IG1vdmV0bworMjAwIDQ0NSBsaW5ldG8KKzMuMDM4NDQ5Mzk3NTU4MzcgNDc5LjcyOTYzNTUzMzM4NiBsaW5ldG8KKzE5MC45NzY5NzM1NTQ3NCA0MTEuMzI1NjA2ODY4MjUyIGxpbmV0bworMTcuNzcxODkyNzk3ODUyMyA1MTEuMzI1NjA2ODY4MjUyIGxpbmV0bworMTcwLjk4MDc4MTQyMTY0OCAzODIuNzY4MDg0OTMwOTQ0IGxpbmV0bworNDIuNDIzMjU5NDg0MzQgNTM1Ljk3Njk3MzU1NDc0IGxpbmV0bworMTQyLjQyMzI1OTQ4NDM0IDM2Mi43NzE4OTI3OTc4NTIgbGluZXRvCis3NC4wMTkyMzA4MTkyMDYyIDU1MC43MTA0MTY5NTUwMzQgbGluZXRvCisxMDguNzQ4ODY2MzUyNTkyIDM1My43NDg4NjYzNTI1OTIgbGluZXRvCisxMDguNzQ4ODY2MzUyNTkyIDU1My43NDg4NjYzNTI1OTIgbGluZXRvCis3NC4wMTkyMzA4MTkyMDY0IDM1Ni43ODczMTU3NTAxNTEgbGluZXRvCisxNDIuNDIzMjU5NDg0MzQgNTQ0LjcyNTgzOTkwNzMzMyBsaW5ldG8KKzQyLjQyMzI1OTQ4NDM0MDEgMzcxLjUyMDc1OTE1MDQ0NSBsaW5ldG8KKzE3MC45ODA3ODE0MjE2NDggNTI0LjcyOTY0Nzc3NDI0IGxpbmV0bworMTcuNzcxODkyNzk3ODUyNCAzOTYuMTcyMTI1ODM2OTMyIGxpbmV0bworMTkwLjk3Njk3MzU1NDc0IDQ5Ni4xNzIxMjU4MzY5MzMgbGluZXRvCiszLjAzODQ0OTM5NzU1ODM0IDQyNy43NjgwOTcxNzE3OTkgbGluZXRvCisyMDAgNDYyLjQ5NzczMjcwNTE4NSBsaW5ldG8KKy0xLjEzNjg2ODM3NzIxNjE2ZS0xMyA0NjIuNDk3NzMyNzA1MTg1IGxpbmV0bworMTk2Ljk2MTU1MDYwMjQ0MiA0MjcuNzY4MDk3MTcxNzk5IGxpbmV0bworOS4wMjMwMjY0NDUyNTk3MiA0OTYuMTcyMTI1ODM2OTMyIGxpbmV0bworMTgyLjIyODEwNzIwMjE0OCAzOTYuMTcyMTI1ODM2OTMzIGxpbmV0bworMjkuMDE5MjE4NTc4MzUxOCA1MjQuNzI5NjQ3Nzc0MjQgbGluZXRvCisxNTcuNTc2NzQwNTE1NjYgMzcxLjUyMDc1OTE1MDQ0NSBsaW5ldG8KKzU3LjU3Njc0MDUxNTY1OTYgNTQ0LjcyNTgzOTkwNzMzMiBsaW5ldG8KKzEyNS45ODA3NjkxODA3OTQgMzU2Ljc4NzMxNTc1MDE1MSBsaW5ldG8KKzkxLjI1MTEzMzY0NzQwNzMgNTUzLjc0ODg2NjM1MjU5MiBsaW5ldG8KKzkxLjI1MTEzMzY0NzQwNzkgMzUzLjc0ODg2NjM1MjU5MiBsaW5ldG8KKzEyNS45ODA3NjkxODA3OTMgNTUwLjcxMDQxNjk1NTAzNCBsaW5ldG8KKzU3LjU3Njc0MDUxNTY2MDEgMzYyLjc3MTg5Mjc5Nzg1MiBsaW5ldG8KKzE1Ny41NzY3NDA1MTU2NiA1MzUuOTc2OTczNTU0NzQgbGluZXRvCisyOS4wMTkyMTg1NzgzNTIyIDM4Mi43NjgwODQ5MzA5NDQgbGluZXRvCisxODIuMjI4MTA3MjAyMTQ4IDUxMS4zMjU2MDY4NjgyNTMgbGluZXRvCis5LjAyMzAyNjQ0NTI1OTk0IDQxMS4zMjU2MDY4NjgyNTIgbGluZXRvCisxOTYuOTYxNTUwNjAyNDQyIDQ3OS43Mjk2MzU1MzMzODYgbGluZXRvCistMS43MDUzMDI1NjU4MjQyNGUtMTMgNDQ1IGxpbmV0bworMCA0NDUgbGluZXRvCisxLjAwMCAxLjAwMCAwLjAwMCBzZXRyZ2Jjb2xvciBBZGp1c3RDb2xvcgorZW9maWxsCitncmVzdG9yZQorZ3NhdmUKKzAgNDQ1IG1vdmV0bworMjAwIDQ0NSBsaW5ldG8KKzMuMDM4NDQ5Mzk3NTU4MzcgNDc5LjcyOTYzNTUzMzM4NiBsaW5ldG8KKzE5MC45NzY5NzM1NTQ3NCA0MTEuMzI1NjA2ODY4MjUyIGxpbmV0bworMTcuNzcxODkyNzk3ODUyMyA1MTEuMzI1NjA2ODY4MjUyIGxpbmV0bworMTcwLjk4MDc4MTQyMTY0OCAzODIuNzY4MDg0OTMwOTQ0IGxpbmV0bworNDIuNDIzMjU5NDg0MzQgNTM1Ljk3Njk3MzU1NDc0IGxpbmV0bworMTQyLjQyMzI1OTQ4NDM0IDM2Mi43NzE4OTI3OTc4NTIgbGluZXRvCis3NC4wMTkyMzA4MTkyMDYyIDU1MC43MTA0MTY5NTUwMzQgbGluZXRvCisxMDguNzQ4ODY2MzUyNTkyIDM1My43NDg4NjYzNTI1OTIgbGluZXRvCisxMDguNzQ4ODY2MzUyNTkyIDU1My43NDg4NjYzNTI1OTIgbGluZXRvCis3NC4wMTkyMzA4MTkyMDY0IDM1Ni43ODczMTU3NTAxNTEgbGluZXRvCisxNDIuNDIzMjU5NDg0MzQgNTQ0LjcyNTgzOTkwNzMzMyBsaW5ldG8KKzQyLjQyMzI1OTQ4NDM0MDEgMzcxLjUyMDc1OTE1MDQ0NSBsaW5ldG8KKzE3MC45ODA3ODE0MjE2NDggNTI0LjcyOTY0Nzc3NDI0IGxpbmV0bworMTcuNzcxODkyNzk3ODUyNCAzOTYuMTcyMTI1ODM2OTMyIGxpbmV0bworMTkwLjk3Njk3MzU1NDc0IDQ5Ni4xNzIxMjU4MzY5MzMgbGluZXRvCiszLjAzODQ0OTM5NzU1ODM0IDQyNy43NjgwOTcxNzE3OTkgbGluZXRvCisyMDAgNDYyLjQ5NzczMjcwNTE4NSBsaW5ldG8KKy0xLjEzNjg2ODM3NzIxNjE2ZS0xMyA0NjIuNDk3NzMyNzA1MTg1IGxpbmV0bworMTk2Ljk2MTU1MDYwMjQ0MiA0MjcuNzY4MDk3MTcxNzk5IGxpbmV0bworOS4wMjMwMjY0NDUyNTk3MiA0OTYuMTcyMTI1ODM2OTMyIGxpbmV0bworMTgyLjIyODEwNzIwMjE0OCAzOTYuMTcyMTI1ODM2OTMzIGxpbmV0bworMjkuMDE5MjE4NTc4MzUxOCA1MjQuNzI5NjQ3Nzc0MjQgbGluZXRvCisxNTcuNTc2NzQwNTE1NjYgMzcxLjUyMDc1OTE1MDQ0NSBsaW5ldG8KKzU3LjU3Njc0MDUxNTY1OTYgNTQ0LjcyNTgzOTkwNzMzMiBsaW5ldG8KKzEyNS45ODA3NjkxODA3OTQgMzU2Ljc4NzMxNTc1MDE1MSBsaW5ldG8KKzkxLjI1MTEzMzY0NzQwNzMgNTUzLjc0ODg2NjM1MjU5MiBsaW5ldG8KKzkxLjI1MTEzMzY0NzQwNzkgMzUzLjc0ODg2NjM1MjU5MiBsaW5ldG8KKzEyNS45ODA3NjkxODA3OTMgNTUwLjcxMDQxNjk1NTAzNCBsaW5ldG8KKzU3LjU3Njc0MDUxNTY2MDEgMzYyLjc3MTg5Mjc5Nzg1MiBsaW5ldG8KKzE1Ny41NzY3NDA1MTU2NiA1MzUuOTc2OTczNTU0NzQgbGluZXRvCisyOS4wMTkyMTg1NzgzNTIyIDM4Mi43NjgwODQ5MzA5NDQgbGluZXRvCisxODIuMjI4MTA3MjAyMTQ4IDUxMS4zMjU2MDY4NjgyNTMgbGluZXRvCis5LjAyMzAyNjQ0NTI1OTk0IDQxMS4zMjU2MDY4NjgyNTIgbGluZXRvCisxOTYuOTYxNTUwNjAyNDQyIDQ3OS43Mjk2MzU1MzMzODYgbGluZXRvCistMS43MDUzMDI1NjU4MjQyNGUtMTMgNDQ1IGxpbmV0bworMSBzZXRsaW5lY2FwCisxIHNldGxpbmVqb2luCisxIHNldGxpbmV3aWR0aAorW10gMCBzZXRkYXNoCisxLjAwMCAwLjAwMCAwLjAwMCBzZXRyZ2Jjb2xvciBBZGp1c3RDb2xvcgorc3Ryb2tlCitncmVzdG9yZQorZ3NhdmUKK2dyZXN0b3JlCitnc2F2ZQorLTEuNzA1MzAyNTY1ODI0MjRlLTEzIDQ0NSBtb3ZldG8KKy05LjAwMDAwMDAwMDAwMDE5IDQ1MCBsaW5ldG8KKy03LjAwMDAwMDAwMDAwMDE3IDQ0NSBsaW5ldG8KKy05LjAwMDAwMDAwMDAwMDE1IDQ0MCBsaW5ldG8KKy0xLjcwNTMwMjU2NTgyNDI0ZS0xMyA0NDUgbGluZXRvCisxLjAwMCAxLjAwMCAwLjAwMCBzZXRyZ2Jjb2xvciBBZGp1c3RDb2xvcgorZW9maWxsCistMS43MDUzMDI1NjU4MjQyNGUtMTMgNDQ1IG1vdmV0bworLTkuMDAwMDAwMDAwMDAwMTkgNDUwIGxpbmV0bworLTcuMDAwMDAwMDAwMDAwMTcgNDQ1IGxpbmV0bworLTkuMDAwMDAwMDAwMDAwMTUgNDQwIGxpbmV0bworLTEuNzA1MzAyNTY1ODI0MjRlLTEzIDQ0NSBsaW5ldG8KKzEgc2V0bGluZWpvaW4gMSBzZXRsaW5lY2FwCisxIHNldGxpbmV3aWR0aAorW10gMCBzZXRkYXNoCisxLjAwMCAwLjAwMCAwLjAwMCBzZXRyZ2Jjb2xvciBBZGp1c3RDb2xvcgorc3Ryb2tlCitncmVzdG9yZQorcmVzdG9yZSBzaG93cGFnZQorCislJVRyYWlsZXIKK2VuZAorJSVFT0YKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdCBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKaW5kZXggMWZlOTY5OS4uZTk5NWE3YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CkBAIC0yMyw2ICsyMywxNiBAQAogZGlyZWN0aW9uIGl0IGlzIGZhY2luZywgZHJhd2luZyBhIGxpbmUgYXMgaXQgbW92ZXMuICBHaXZlIGl0IHRoZSBjb21tYW5kCiBgYHR1cnRsZS5sZWZ0KDI1KWBgLCBhbmQgaXQgcm90YXRlcyBpbi1wbGFjZSAyNSBkZWdyZWVzIGNsb2Nrd2lzZS4KIAorLi4gc2lkZWJhcjo6IFR1cnRsZSBzdGFyCisKKyAgIFR1cnRsZSBjYW4gZHJhdyBpbnRyaWNhdGUgc2hhcGVzIHVzaW5nIHByb2dyYW1zIHRoYXQgcmVwZWF0IHNpbXBsZQorICAgbW92ZXMuCisKKyAgIC4uIGltYWdlOjogdHVydGxlLXN0YXIuKgorICAgICAgOmFsaWduOiBjZW50ZXIKKworICAgLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy90dXJ0bGUtc3Rhci5weQorCiBCeSBjb21iaW5pbmcgdG9nZXRoZXIgdGhlc2UgYW5kIHNpbWlsYXIgY29tbWFuZHMsIGludHJpY2F0ZSBzaGFwZXMgYW5kIHBpY3R1cmVzCiBjYW4gZWFzaWx5IGJlIGRyYXduLgogCkBAIC0xODY4LDcgKzE4NzgsNyBAQAogCiAgICAgICA+Pj4gY3YgPSBzY3JlZW4uZ2V0Y2FudmFzKCkKICAgICAgID4+PiBjdgotICAgICAgPHR1cnRsZS5TY3JvbGxlZENhbnZhcyBpbnN0YW5jZSBhdCAweC4uLj4KKyAgICAgIDx0dXJ0bGUuU2Nyb2xsZWRDYW52YXMgb2JqZWN0IGF0IC4uLj4KIAogCiAuLiBmdW5jdGlvbjo6IGdldHNoYXBlcygpCkBAIC0yMjU4LDcgKzIyNjgsNyBAQAogc3RvcmVkIGFuZCBhbiBhZGRpdGlvbmFsIG9uZSBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gIFRoZSBsYXR0ZXIgd2lsbAogb3ZlcnJpZGUgdGhlIHNldHRpbmdzIG9mIHRoZSBmaXJzdCBvbmUuCiAKLVRoZSA6ZmlsZTpgRGVtby90dXJ0bGVgIGRpcmVjdG9yeSBjb250YWlucyBhIDpmaWxlOmB0dXJ0bGUuY2ZnYCBmaWxlLiAgWW91IGNhbgorVGhlIDpmaWxlOmBMaWIvdHVydGxlZGVtb2AgZGlyZWN0b3J5IGNvbnRhaW5zIGEgOmZpbGU6YHR1cnRsZS5jZmdgIGZpbGUuICBZb3UgY2FuCiBzdHVkeSBpdCBhcyBhbiBleGFtcGxlIGFuZCBzZWUgaXRzIGVmZmVjdHMgd2hlbiBydW5uaW5nIHRoZSBkZW1vcyAocHJlZmVyYWJseQogbm90IGZyb20gd2l0aGluIHRoZSBkZW1vLXZpZXdlcikuCiAKQEAgLTIyNjYsMjkgKzIyNzYsMzUgQEAKIERlbW8gc2NyaXB0cwogPT09PT09PT09PT09CiAKLVRoZXJlIGlzIGEgc2V0IG9mIGRlbW8gc2NyaXB0cyBpbiB0aGUgdHVydGxlZGVtbyBkaXJlY3RvcnkgbG9jYXRlZCBpbiB0aGUKLTpmaWxlOmBEZW1vL3R1cnRsZWAgZGlyZWN0b3J5IGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorVGhlcmUgaXMgYSBzZXQgb2YgZGVtbyBzY3JpcHRzIGluIHRoZSA6bW9kOmB0dXJ0bGVkZW1vYCBwYWNrYWdlLiAgVGhlc2UKK3NjcmlwdHMgY2FuIGJlIHJ1biBhbmQgdmlld2VkIHVzaW5nIHRoZSBzdXBwbGllZCBkZW1vIHZpZXdlciBhcyBmb2xsb3dzOjoKIAotSXQgY29udGFpbnM6CisgICBweXRob24gLW0gdHVydGxlZGVtbworCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHJ1biB0aGUgZGVtbyBzY3JpcHRzIGluZGl2aWR1YWxseS4gIEZvciBleGFtcGxlLCA6OgorCisgICBweXRob24gLW0gdHVydGxlZGVtby5ieXRlZGVzaWduCisKK1RoZSA6bW9kOmB0dXJ0bGVkZW1vYCBwYWNrYWdlIGRpcmVjdG9yeSBjb250YWluczoKIAogLSBhIHNldCBvZiAxNSBkZW1vIHNjcmlwdHMgZGVtb25zdHJhdGluZyBkaWZmZXJlbnQgZmVhdHVyZXMgb2YgdGhlIG5ldyBtb2R1bGUKLSAgOm1vZDpgdHVydGxlYAotLSBhIGRlbW8gdmlld2VyIDpmaWxlOmB0dXJ0bGVEZW1vLnB5YCB3aGljaCBjYW4gYmUgdXNlZCB0byB2aWV3IHRoZSBzb3VyY2Vjb2RlCisgIDptb2Q6YHR1cnRsZWA7CistIGEgZGVtbyB2aWV3ZXIgOmZpbGU6YF9fbWFpbl9fLnB5YCB3aGljaCBjYW4gYmUgdXNlZCB0byB2aWV3IHRoZSBzb3VyY2Vjb2RlCiAgIG9mIHRoZSBzY3JpcHRzIGFuZCBydW4gdGhlbSBhdCB0aGUgc2FtZSB0aW1lLiAxNCBvZiB0aGUgZXhhbXBsZXMgY2FuIGJlCiAgIGFjY2Vzc2VkIHZpYSB0aGUgRXhhbXBsZXMgbWVudTsgYWxsIG9mIHRoZW0gY2FuIGFsc28gYmUgcnVuIHN0YW5kYWxvbmUuCi0tIFRoZSBleGFtcGxlIDpmaWxlOmB0dXJ0bGVkZW1vX3R3b19jYW52YXNlcy5weWAgZGVtb25zdHJhdGVzIHRoZSBzaW11bHRhbmVvdXMKKy0gVGhlIGV4YW1wbGUgOm1vZDpgdHVydGxlZGVtby50d29fY2FudmFzZXNgIGRlbW9uc3RyYXRlcyB0aGUgc2ltdWx0YW5lb3VzCiAgIHVzZSBvZiB0d28gY2FudmFzZXMgd2l0aCB0aGUgdHVydGxlIG1vZHVsZS4gIFRoZXJlZm9yZSBpdCBvbmx5IGNhbiBiZSBydW4KICAgc3RhbmRhbG9uZS4KLS0gVGhlcmUgaXMgYSA6ZmlsZTpgdHVydGxlLmNmZ2AgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSwgd2hpY2ggYWxzbyBzZXJ2ZXMgYXMgYW4KKy0gVGhlcmUgaXMgYSA6ZmlsZTpgdHVydGxlLmNmZ2AgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSwgd2hpY2ggc2VydmVzIGFzIGFuCiAgIGV4YW1wbGUgZm9yIGhvdyB0byB3cml0ZSBhbmQgdXNlIHN1Y2ggZmlsZXMuCiAKLVRoZSBkZW1vc2NyaXB0cyBhcmU6CitUaGUgZGVtbyBzY3JpcHRzIGFyZToKIAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBOYW1lICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgfCBGZWF0dXJlcyAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBieXRlZGVzaWduICAgICB8IGNvbXBsZXggY2xhc3NpY2FsICAgICAgICAgICAgfCA6ZnVuYzpgdHJhY2VyYCwgZGVsYXksfAotfCAgICAgICAgICAgICAgICB8IHR1cnRsZWdyYXBoaWNzIHBhdHRlcm4gICAgICAgfCA6ZnVuYzpgdXBkYXRlYCAgICAgICAgfAorfCAgICAgICAgICAgICAgICB8IHR1cnRsZSBncmFwaGljcyBwYXR0ZXJuICAgICAgfCA6ZnVuYzpgdXBkYXRlYCAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjaGFvcyAgICAgICAgICB8IGdyYXBocyBWZXJodWxzdCBkeW5hbWljcywgICAgfCB3b3JsZCBjb29yZGluYXRlcyAgICAgfAogfCAgICAgICAgICAgICAgICB8IHNob3dzIHRoYXQgY29tcHV0ZXIncyAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMjM4Niw4ICsyNDAyLDcgQEAKICAgc3RyaW5ncyBhbmQgbnVtYmVycyByZXNwZWN0aXZlbHkuCiAKIC0gVHdvIGV4YW1wbGUgc2NyaXB0cyA6ZmlsZTpgdGRlbW9fbmltLnB5YCBhbmQgOmZpbGU6YHRkZW1vX3JvdW5kX2RhbmNlLnB5YAotICBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIERlbW8gZGlyZWN0b3J5IChzb3VyY2UgZGlzdHJpYnV0aW9uIG9ubHkpLiBBcyB1c3VhbAotICB0aGV5IGNhbiBiZSB2aWV3ZWQgYW5kIGV4ZWN1dGVkIHdpdGhpbiB0aGUgZGVtbyB2aWV3ZXIgOmZpbGU6YHR1cnRsZURlbW8ucHlgLgorICBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIDpmaWxlOmBMaWIvdHVydGxlZGVtb2AgZGlyZWN0b3J5LgogCiAKIC4uIGRvY3Rlc3Q6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvdHlwZXMucnN0CmluZGV4IDdjYWVjYWYuLmQ0YTc2YjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3R5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS90eXBlcy5yc3QKQEAgLTQsNiArNCw5IEBACiAuLiBtb2R1bGU6OiB0eXBlcwogICAgOnN5bm9wc2lzOiBOYW1lcyBmb3IgYnVpbHQtaW4gdHlwZXMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3R5cGVzLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIG5hbWVzIGZvciBzb21lIG9iamVjdCB0eXBlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBzdGFuZGFyZAogUHl0aG9uIGludGVycHJldGVyLCBidXQgbm90IGV4cG9zZWQgYXMgYnVpbHRpbnMgbGlrZSA6Y2xhc3M6YGludGAgb3IKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdCBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAppbmRleCBlMWU2ZGMxLi5iY2IzZGEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CkBAIC0xMywxNCArMTMsMTUgQEAKICAgIHNpbmdsZTogY2hhcmFjdGVyCiAgICBwYWlyOiBVbmljb2RlOyBkYXRhYmFzZQogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIHdoaWNoIGRlZmluZXMKLWNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBpbiB0aGlzIGRhdGFiYXNlIGlzCi1iYXNlZCBvbiB0aGUgOmZpbGU6YFVuaWNvZGVEYXRhLnR4dGAgZmlsZSB2ZXJzaW9uIDUuMS4wIHdoaWNoIGlzIHB1YmxpY2x5Ci1hdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAudW5pY29kZS5vcmcvLgorVGhpcyBtb2R1bGUgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSAoVUNEKSB3aGljaAorZGVmaW5lcyBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgYWxsIFVuaWNvZGUgY2hhcmFjdGVycy4gVGhlIGRhdGEgY29udGFpbmVkIGluCit0aGlzIGRhdGFiYXNlIGlzIGNvbXBpbGVkIGZyb20gdGhlIGBVQ0QgdmVyc2lvbiA2LjAuMAorPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMC4wL3VjZD5gXy4KIAotVGhlIG1vZHVsZSB1c2VzIHRoZSBzYW1lIG5hbWVzIGFuZCBzeW1ib2xzIGFzIGRlZmluZWQgYnkgdGhlIFVuaWNvZGVEYXRhIEZpbGUKLUZvcm1hdCA1LjEuMCAoc2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzUuMS4wL3VjZC9VQ0QuaHRtbCkuICBJdCBkZWZpbmVzCi10aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKK1RoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IFVuaWNvZGUKK1N0YW5kYXJkIEFubmV4ICM0NCwgYCJVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSIKKzxodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI0NC90cjQ0LTYuaHRtbD5gXy4gIEl0IGRlZmluZXMgdGhlCitmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKIC4uIGZ1bmN0aW9uOjogbG9va3VwKG5hbWUpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKaW5kZXggMDFhMDM2ZC4uYmVlZDRkZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdApAQCAtOTcsNiArOTcsMTMgQEAKICAgICAgIEEgc3BlY2lhbC1pbnRlcmVzdC1ncm91cCBmb3IgZGlzY3Vzc2lvbiBvZiB0ZXN0aW5nLCBhbmQgdGVzdGluZyB0b29scywKICAgICAgIGluIFB5dGhvbi4KIAorICAgVGhlIHNjcmlwdCA6ZmlsZTpgVG9vbHMvdW5pdHRlc3RndWkvdW5pdHRlc3RndWkucHlgIGluIHRoZSBQeXRob24gc291cmNlIGRpc3RyaWJ1dGlvbiBpcworICAgYSBHVUkgdG9vbCBmb3IgdGVzdCBkaXNjb3ZlcnkgYW5kIGV4ZWN1dGlvbi4gIFRoaXMgaXMgaW50ZW5kZWQgbGFyZ2VseSBmb3IgZWFzZSBvZiB1c2UKKyAgIGZvciB0aG9zZSBuZXcgdG8gdW5pdCB0ZXN0aW5nLiAgRm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQKKyAgIHRlc3RzIGJlIGRyaXZlbiBieSBhIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc3lzdGVtIHN1Y2ggYXMgYEh1ZHNvbiA8aHR0cDovL2h1ZHNvbi1jaS5vcmcvPmBfCisgICBvciBgQnVpbGRib3QgPGh0dHA6Ly9idWlsZGJvdC5uZXQvdHJhYz5gXy4KKworCiAuLiBfdW5pdHRlc3QtbWluaW1hbC1leGFtcGxlOgogCiBCYXNpYyBleGFtcGxlCkBAIC0yMDQsMTQgKzIxMSwxNDEgQEAKIFlvdSBjYW4gcGFzcyBpbiBhIGxpc3Qgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgbW9kdWxlIG5hbWVzLCBhbmQgZnVsbHkKIHF1YWxpZmllZCBjbGFzcyBvciBtZXRob2QgbmFtZXMuCiAKK1Rlc3QgbW9kdWxlcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IGZpbGUgcGF0aCBhcyB3ZWxsOjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3RzL3Rlc3Rfc29tZXRoaW5nLnB5CisKK1RoaXMgYWxsb3dzIHlvdSB0byB1c2UgdGhlIHNoZWxsIGZpbGVuYW1lIGNvbXBsZXRpb24gdG8gc3BlY2lmeSB0aGUgdGVzdCBtb2R1bGUuCitUaGUgZmlsZSBzcGVjaWZpZWQgbXVzdCBzdGlsbCBiZSBpbXBvcnRhYmxlIGFzIGEgbW9kdWxlLiBUaGUgcGF0aCBpcyBjb252ZXJ0ZWQKK3RvIGEgbW9kdWxlIG5hbWUgYnkgcmVtb3ZpbmcgdGhlICcucHknIGFuZCBjb252ZXJ0aW5nIHBhdGggc2VwYXJhdG9ycyBpbnRvICcuJy4KK0lmIHlvdSB3YW50IHRvIGV4ZWN1dGUgYSB0ZXN0IGZpbGUgdGhhdCBpc24ndCBpbXBvcnRhYmxlIGFzIGEgbW9kdWxlIHlvdSBzaG91bGQKK2V4ZWN1dGUgdGhlIGZpbGUgZGlyZWN0bHkgaW5zdGVhZC4KKwogWW91IGNhbiBydW4gdGVzdHMgd2l0aCBtb3JlIGRldGFpbCAoaGlnaGVyIHZlcmJvc2l0eSkgYnkgcGFzc2luZyBpbiB0aGUgLXYgZmxhZzo6CiAKICAgIHB5dGhvbiAtbSB1bml0dGVzdCAtdiB0ZXN0X21vZHVsZQogCitXaGVuIGV4ZWN1dGVkIHdpdGhvdXQgYXJndW1lbnRzIDpyZWY6YHVuaXR0ZXN0LXRlc3QtZGlzY292ZXJ5YCBpcyBzdGFydGVkOjoKKworICAgcHl0aG9uIC1tIHVuaXR0ZXN0CisKIEZvciBhIGxpc3Qgb2YgYWxsIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9uczo6CiAKICAgIHB5dGhvbiAtbSB1bml0dGVzdCAtaAogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgSW4gZWFybGllciB2ZXJzaW9ucyBpdCB3YXMgb25seSBwb3NzaWJsZSB0byBydW4gaW5kaXZpZHVhbCB0ZXN0IG1ldGhvZHMgYW5kCisgICBub3QgbW9kdWxlcyBvciBjbGFzc2VzLgorCisKK0NvbW1hbmQtbGluZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCis6cHJvZ3JhbTpgdW5pdHRlc3RgIHN1cHBvcnRzIHRoZXNlIGNvbW1hbmQtbGluZSBvcHRpb25zOgorCisuLiBwcm9ncmFtOjogdW5pdHRlc3QKKworLi4gY21kb3B0aW9uOjogLWIsIC0tYnVmZmVyCisKKyAgIFRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHN0YW5kYXJkIGVycm9yIHN0cmVhbXMgYXJlIGJ1ZmZlcmVkIGR1cmluZyB0aGUgdGVzdAorICAgcnVuLiBPdXRwdXQgZHVyaW5nIGEgcGFzc2luZyB0ZXN0IGlzIGRpc2NhcmRlZC4gT3V0cHV0IGlzIGVjaG9lZCBub3JtYWxseQorICAgb24gdGVzdCBmYWlsIG9yIGVycm9yIGFuZCBpcyBhZGRlZCB0byB0aGUgZmFpbHVyZSBtZXNzYWdlcy4KKworLi4gY21kb3B0aW9uOjogLWMsIC0tY2F0Y2gKKworICAgQ29udHJvbC1DIGR1cmluZyB0aGUgdGVzdCBydW4gd2FpdHMgZm9yIHRoZSBjdXJyZW50IHRlc3QgdG8gZW5kIGFuZCB0aGVuCisgICByZXBvcnRzIGFsbCB0aGUgcmVzdWx0cyBzbyBmYXIuIEEgc2Vjb25kIGNvbnRyb2wtQyByYWlzZXMgdGhlIG5vcm1hbAorICAgOmV4YzpgS2V5Ym9hcmRJbnRlcnJ1cHRgIGV4Y2VwdGlvbi4KKworICAgU2VlIGBTaWduYWwgSGFuZGxpbmdgXyBmb3IgdGhlIGZ1bmN0aW9ucyB0aGF0IHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5LgorCisuLiBjbWRvcHRpb246OiAtZiwgLS1mYWlsZmFzdAorCisgICBTdG9wIHRoZSB0ZXN0IHJ1biBvbiB0aGUgZmlyc3QgZXJyb3Igb3IgZmFpbHVyZS4KKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICBUaGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYGAtYmBgLCBgYC1jYGAgYW5kIGBgLWZgYCB3ZXJlIGFkZGVkLgorCitUaGUgY29tbWFuZCBsaW5lIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHRlc3QgZGlzY292ZXJ5LCBmb3IgcnVubmluZyBhbGwgb2YgdGhlCit0ZXN0cyBpbiBhIHByb2plY3Qgb3IganVzdCBhIHN1YnNldC4KKworCisuLiBfdW5pdHRlc3QtdGVzdC1kaXNjb3Zlcnk6CisKK1Rlc3QgRGlzY292ZXJ5CistLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworVW5pdHRlc3Qgc3VwcG9ydHMgc2ltcGxlIHRlc3QgZGlzY292ZXJ5LiBJbiBvcmRlciB0byBiZSBjb21wYXRpYmxlIHdpdGggdGVzdAorZGlzY292ZXJ5LCBhbGwgb2YgdGhlIHRlc3QgZmlsZXMgbXVzdCBiZSA6cmVmOmBtb2R1bGVzIDx0dXQtbW9kdWxlcz5gIG9yCis6cmVmOmBwYWNrYWdlcyA8dHV0LXBhY2thZ2VzPmAgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mCit0aGUgcHJvamVjdCAodGhpcyBtZWFucyB0aGF0IHRoZWlyIGZpbGVuYW1lcyBtdXN0IGJlIHZhbGlkCis6cmVmOmBpZGVudGlmaWVycyA8aWRlbnRpZmllcnM+YCkuCisKK1Rlc3QgZGlzY292ZXJ5IGlzIGltcGxlbWVudGVkIGluIDptZXRoOmBUZXN0TG9hZGVyLmRpc2NvdmVyYCwgYnV0IGNhbiBhbHNvIGJlCit1c2VkIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhlIGJhc2ljIGNvbW1hbmQtbGluZSB1c2FnZSBpczo6CisKKyAgIGNkIHByb2plY3RfZGlyZWN0b3J5CisgICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIKKworLi4gbm90ZTo6CisKKyAgIEFzIGEgc2hvcnRjdXQsIGBgcHl0aG9uIC1tIHVuaXR0ZXN0YGAgaXMgdGhlIGVxdWl2YWxlbnQgb2YKKyAgIGBgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyYGAuIElmIHlvdSB3YW50IHRvIHBhc3MgYXJndW1lbnRzIHRvIHRlc3QKKyAgIGRpc2NvdmVyeSB0aGUgYGRpc2NvdmVyYCBzdWItY29tbWFuZCBtdXN0IGJlIHVzZWQgZXhwbGljaXRseS4KKworVGhlIGBgZGlzY292ZXJgYCBzdWItY29tbWFuZCBoYXMgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisuLiBwcm9ncmFtOjogdW5pdHRlc3QgZGlzY292ZXIKKworLi4gY21kb3B0aW9uOjogLXYsIC0tdmVyYm9zZQorCisgICBWZXJib3NlIG91dHB1dAorCisuLiBjbWRvcHRpb246OiAtcyBkaXJlY3RvcnkKKworICAgRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpCisKKy4uIGNtZG9wdGlvbjo6IC1wIHBhdHRlcm4KKworICAgUGF0dGVybiB0byBtYXRjaCB0ZXN0IGZpbGVzICgndGVzdCoucHknIGRlZmF1bHQpCisKKy4uIGNtZG9wdGlvbjo6IC10IGRpcmVjdG9yeQorCisgICBUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSkKKworVGhlIDpvcHRpb246YC1zYCwgOm9wdGlvbjpgLXBgLCBhbmQgOm9wdGlvbjpgLXRgIG9wdGlvbnMgY2FuIGJlIHBhc3NlZCBpbgorYXMgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4gdGhhdCBvcmRlci4gVGhlIGZvbGxvd2luZyB0d28gY29tbWFuZCBsaW5lcworYXJlIGVxdWl2YWxlbnQ6OgorCisgICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgLXMgcHJvamVjdF9kaXJlY3RvcnkgLXAgJypfdGVzdC5weScKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciBwcm9qZWN0X2RpcmVjdG9yeSAnKl90ZXN0LnB5JworCitBcyB3ZWxsIGFzIGJlaW5nIGEgcGF0aCBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgcGFja2FnZSBuYW1lLCBmb3IgZXhhbXBsZQorYGBteXByb2plY3Quc3VicGFja2FnZS50ZXN0YGAsIGFzIHRoZSBzdGFydCBkaXJlY3RvcnkuIFRoZSBwYWNrYWdlIG5hbWUgeW91CitzdXBwbHkgd2lsbCB0aGVuIGJlIGltcG9ydGVkIGFuZCBpdHMgbG9jYXRpb24gb24gdGhlIGZpbGVzeXN0ZW0gd2lsbCBiZSB1c2VkCithcyB0aGUgc3RhcnQgZGlyZWN0b3J5LgorCisuLiBjYXV0aW9uOjoKKworICAgIFRlc3QgZGlzY292ZXJ5IGxvYWRzIHRlc3RzIGJ5IGltcG9ydGluZyB0aGVtLiBPbmNlIHRlc3QgZGlzY292ZXJ5IGhhcyBmb3VuZAorICAgIGFsbCB0aGUgdGVzdCBmaWxlcyBmcm9tIHRoZSBzdGFydCBkaXJlY3RvcnkgeW91IHNwZWNpZnkgaXQgdHVybnMgdGhlIHBhdGhzCisgICAgaW50byBwYWNrYWdlIG5hbWVzIHRvIGltcG9ydC4gRm9yIGV4YW1wbGUgOmZpbGU6YGZvby9iYXIvYmF6LnB5YCB3aWxsIGJlCisgICAgaW1wb3J0ZWQgYXMgYGBmb28uYmFyLmJhemBgLgorCisgICAgSWYgeW91IGhhdmUgYSBwYWNrYWdlIGluc3RhbGxlZCBnbG9iYWxseSBhbmQgYXR0ZW1wdCB0ZXN0IGRpc2NvdmVyeSBvbgorICAgIGEgZGlmZmVyZW50IGNvcHkgb2YgdGhlIHBhY2thZ2UgdGhlbiB0aGUgaW1wb3J0ICpjb3VsZCogaGFwcGVuIGZyb20gdGhlCisgICAgd3JvbmcgcGxhY2UuIElmIHRoaXMgaGFwcGVucyB0ZXN0IGRpc2NvdmVyeSB3aWxsIHdhcm4geW91IGFuZCBleGl0LgorCisgICAgSWYgeW91IHN1cHBseSB0aGUgc3RhcnQgZGlyZWN0b3J5IGFzIGEgcGFja2FnZSBuYW1lIHJhdGhlciB0aGFuIGEKKyAgICBwYXRoIHRvIGEgZGlyZWN0b3J5IHRoZW4gZGlzY292ZXIgYXNzdW1lcyB0aGF0IHdoaWNoZXZlciBsb2NhdGlvbiBpdAorICAgIGltcG9ydHMgZnJvbSBpcyB0aGUgbG9jYXRpb24geW91IGludGVuZGVkLCBzbyB5b3Ugd2lsbCBub3QgZ2V0IHRoZQorICAgIHdhcm5pbmcuCisKK1Rlc3QgbW9kdWxlcyBhbmQgcGFja2FnZXMgY2FuIGN1c3RvbWl6ZSB0ZXN0IGxvYWRpbmcgYW5kIGRpc2NvdmVyeSBieSB0aHJvdWdoCit0aGUgYGxvYWRfdGVzdHMgcHJvdG9jb2xgXy4KKwogCiAuLiBfb3JnYW5pemluZy10ZXN0czoKIApAQCAtMjIwLDkgKzM1NCw5IEBACiAKIFRoZSBiYXNpYyBidWlsZGluZyBibG9ja3Mgb2YgdW5pdCB0ZXN0aW5nIGFyZSA6ZGZuOmB0ZXN0IGNhc2VzYCAtLS0gc2luZ2xlCiBzY2VuYXJpb3MgdGhhdCBtdXN0IGJlIHNldCB1cCBhbmQgY2hlY2tlZCBmb3IgY29ycmVjdG5lc3MuICBJbiA6bW9kOmB1bml0dGVzdGAsCi10ZXN0IGNhc2VzIGFyZSByZXByZXNlbnRlZCBieSBpbnN0YW5jZXMgb2YgOm1vZDpgdW5pdHRlc3RgJ3MgOmNsYXNzOmBUZXN0Q2FzZWAKLWNsYXNzLiBUbyBtYWtlIHlvdXIgb3duIHRlc3QgY2FzZXMgeW91IG11c3Qgd3JpdGUgc3ViY2xhc3NlcyBvZgotOmNsYXNzOmBUZXN0Q2FzZWAsIG9yIHVzZSA6Y2xhc3M6YEZ1bmN0aW9uVGVzdENhc2VgLgordGVzdCBjYXNlcyBhcmUgcmVwcmVzZW50ZWQgYnkgOmNsYXNzOmB1bml0dGVzdC5UZXN0Q2FzZWAgaW5zdGFuY2VzLgorVG8gbWFrZSB5b3VyIG93biB0ZXN0IGNhc2VzIHlvdSBtdXN0IHdyaXRlIHN1YmNsYXNzZXMgb2YKKzpjbGFzczpgVGVzdENhc2VgIG9yIHVzZSA6Y2xhc3M6YEZ1bmN0aW9uVGVzdENhc2VgLgogCiBBbiBpbnN0YW5jZSBvZiBhIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZCBjbGFzcyBpcyBhbiBvYmplY3QgdGhhdCBjYW4KIGNvbXBsZXRlbHkgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kLCB0b2dldGhlciB3aXRoIG9wdGlvbmFsIHNldC11cCBhbmQgdGlkeS11cApAQCAtNTMyLDI0ICs2NjYsMjcgQEAKIAogVGhlIGZvbGxvd2luZyBkZWNvcmF0b3JzIGltcGxlbWVudCB0ZXN0IHNraXBwaW5nIGFuZCBleHBlY3RlZCBmYWlsdXJlczoKIAotLi4gZnVuY3Rpb246OiBza2lwKHJlYXNvbikKKy4uIGRlY29yYXRvcjo6IHNraXAocmVhc29uKQogCiAgICBVbmNvbmRpdGlvbmFsbHkgc2tpcCB0aGUgZGVjb3JhdGVkIHRlc3QuICAqcmVhc29uKiBzaG91bGQgZGVzY3JpYmUgd2h5IHRoZQogICAgdGVzdCBpcyBiZWluZyBza2lwcGVkLgogCi0uLiBmdW5jdGlvbjo6IHNraXBJZihjb25kaXRpb24sIHJlYXNvbikKKy4uIGRlY29yYXRvcjo6IHNraXBJZihjb25kaXRpb24sIHJlYXNvbikKIAogICAgU2tpcCB0aGUgZGVjb3JhdGVkIHRlc3QgaWYgKmNvbmRpdGlvbiogaXMgdHJ1ZS4KIAotLi4gZnVuY3Rpb246OiBza2lwVW5sZXNzKGNvbmRpdGlvbiwgcmVhc29uKQorLi4gZGVjb3JhdG9yOjogc2tpcFVubGVzcyhjb25kaXRpb24sIHJlYXNvbikKIAogICAgU2tpcCB0aGUgZGVjb3JhdGVkIHRlc3QgdW5sZXNzICpjb25kaXRpb24qIGlzIHRydWUuCiAKLS4uIGZ1bmN0aW9uOjogZXhwZWN0ZWRGYWlsdXJlCisuLiBkZWNvcmF0b3I6OiBleHBlY3RlZEZhaWx1cmUKIAogICAgTWFyayB0aGUgdGVzdCBhcyBhbiBleHBlY3RlZCBmYWlsdXJlLiAgSWYgdGhlIHRlc3QgZmFpbHMgd2hlbiBydW4sIHRoZSB0ZXN0CiAgICBpcyBub3QgY291bnRlZCBhcyBhIGZhaWx1cmUuCiAKK1NraXBwZWQgdGVzdHMgd2lsbCBub3QgaGF2ZSA6bWV0aDpgc2V0VXBgIG9yIDptZXRoOmB0ZWFyRG93bmAgcnVuIGFyb3VuZCB0aGVtLgorU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90IGhhdmUgOm1ldGg6YHNldFVwQ2xhc3NgIG9yIDptZXRoOmB0ZWFyRG93bkNsYXNzYCBydW4uCisKIAogLi4gX3VuaXR0ZXN0LWNvbnRlbnRzOgogCkBAIC01ODYsNiArNzIzLDExIEBACiAgICBIZXJlLCB3ZSBjcmVhdGUgdHdvIGluc3RhbmNlcyBvZiA6Y2xhc3M6YFdpZGdldFRlc3RDYXNlYCwgZWFjaCBvZiB3aGljaCBydW5zIGEKICAgIHNpbmdsZSB0ZXN0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6CisgICAgICBgVGVzdENhc2VgIGNhbiBiZSBpbnN0YW50aWF0ZWQgc3VjY2Vzc2Z1bGx5IHdpdGhvdXQgcHJvdmlkaW5nIGEgbWV0aG9kCisgICAgICBuYW1lLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBleHBlcmltZW50IHdpdGggYFRlc3RDYXNlYCBmcm9tIHRoZQorICAgICAgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCisKICAgICptZXRob2ROYW1lKiBkZWZhdWx0cyB0byA6bWV0aDpgcnVuVGVzdGAuCiAKICAgIDpjbGFzczpgVGVzdENhc2VgIGluc3RhbmNlcyBwcm92aWRlIHRocmVlIGdyb3VwcyBvZiBtZXRob2RzOiBvbmUgZ3JvdXAgdXNlZApAQCAtNjE1LDYgKzc1NywzNiBAQAogICAgICAgdGhlIG91dGNvbWUgb2YgdGhlIHRlc3QgbWV0aG9kLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCiAKIAorICAgLi4gbWV0aG9kOjogc2V0VXBDbGFzcygpCisKKyAgICAgIEEgY2xhc3MgbWV0aG9kIGNhbGxlZCBiZWZvcmUgdGVzdHMgaW4gYW4gaW5kaXZpZHVhbCBjbGFzcyBydW4uCisgICAgICBgYHNldFVwQ2xhc3NgYCBpcyBjYWxsZWQgd2l0aCB0aGUgY2xhc3MgYXMgdGhlIG9ubHkgYXJndW1lbnQKKyAgICAgIGFuZCBtdXN0IGJlIGRlY29yYXRlZCBhcyBhIDpmdW5jOmBjbGFzc21ldGhvZGA6OgorCisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgLi4uCisKKyAgICAgIFNlZSBgQ2xhc3MgYW5kIE1vZHVsZSBGaXh0dXJlc2BfIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKyAgIC4uIG1ldGhvZDo6IHRlYXJEb3duQ2xhc3MoKQorCisgICAgICBBIGNsYXNzIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgdGVzdHMgaW4gYW4gaW5kaXZpZHVhbCBjbGFzcyBoYXZlIHJ1bi4KKyAgICAgIGBgdGVhckRvd25DbGFzc2BgIGlzIGNhbGxlZCB3aXRoIHRoZSBjbGFzcyBhcyB0aGUgb25seSBhcmd1bWVudAorICAgICAgYW5kIG11c3QgYmUgZGVjb3JhdGVkIGFzIGEgOm1ldGg6YGNsYXNzbWV0aG9kYDo6CisKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAuLi4KKworICAgICAgU2VlIGBDbGFzcyBhbmQgTW9kdWxlIEZpeHR1cmVzYF8gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogICAgLi4gbWV0aG9kOjogcnVuKHJlc3VsdD1Ob25lKQogCiAgICAgICBSdW4gdGhlIHRlc3QsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzCkBAIC02NzgsMTYgKzg1MCwyMiBAQAogICAgfCA6bWV0aDpgYXNzZXJ0Tm90SW4oYSwgYikgICAgICAgICAgICAgICAgfCBgYGEgbm90IGluIGJgYCAgICAgICAgICAgICAgfCAzLjEgICAgICAgICAgIHwKICAgIHwgPFRlc3RDYXNlLmFzc2VydE5vdEluPmAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0SXNJbnN0YW5jZShhLCBiKSAgICAgICAgICAgfCBgYGlzaW5zdGFuY2UoYSwgYilgYCAgICAgICAgfCAzLjIgICAgICAgICAgIHwKKyAgIHwgPFRlc3RDYXNlLmFzc2VydElzSW5zdGFuY2U+YCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0Tm90SXNJbnN0YW5jZShhLCBiKSAgICAgICAgfCBgYG5vdCBpc2luc3RhbmNlKGEsIGIpYGAgICAgfCAzLjIgICAgICAgICAgIHwKKyAgIHwgPFRlc3RDYXNlLmFzc2VydE5vdElzSW5zdGFuY2U+YCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKwogCiAgICBBbGwgdGhlIGFzc2VydCBtZXRob2RzIChleGNlcHQgOm1ldGg6YGFzc2VydFJhaXNlc2AsCi0gICA6bWV0aDpgYXNzZXJ0UmFpc2VzUmVnZXhwYCwgOm1ldGg6YGFzc2VydFdhcm5zYCwgOm1ldGg6YGFzc2VydFdhcm5zUmVnZXhwYCkKKyAgIDptZXRoOmBhc3NlcnRSYWlzZXNSZWdleGAsIDptZXRoOmBhc3NlcnRXYXJuc2AsIDptZXRoOmBhc3NlcnRXYXJuc1JlZ2V4YCkKICAgIGFjY2VwdCBhICptc2cqIGFyZ3VtZW50IHRoYXQsIGlmIHNwZWNpZmllZCwgaXMgdXNlZCBhcyB0aGUgZXJyb3IgbWVzc2FnZSBvbgogICAgZmFpbHVyZSAoc2VlIGFsc28gOmRhdGE6YGxvbmdNZXNzYWdlYCkuCiAKICAgIC4uIG1ldGhvZDo6IGFzc2VydEVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQogCi0gICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGVxdWFsLiAgSWYgdGhlIHZhbHVlcyBkbyBub3QgY29tcGFyZQotICAgICAgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbC4KKyAgICAgIFRlc3QgdGhhdCAqZmlyc3QqIGFuZCAqc2Vjb25kKiBhcmUgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIG5vdAorICAgICAgY29tcGFyZSBlcXVhbCwgdGhlIHRlc3Qgd2lsbCBmYWlsLgogCiAgICAgICBJbiBhZGRpdGlvbiwgaWYgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIHRoZSBleGFjdCBzYW1lIHR5cGUgYW5kIG9uZSBvZgogICAgICAgbGlzdCwgdHVwbGUsIGRpY3QsIHNldCwgZnJvemVuc2V0IG9yIHN0ciBvciBhbnkgdHlwZSB0aGF0IGEgc3ViY2xhc3MKQEAgLTY5OSwxMSArODc3LDE1IEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgICAgQWRkZWQgdGhlIGF1dG9tYXRpYyBjYWxsaW5nIG9mIHR5cGUgc3BlY2lmaWMgZXF1YWxpdHkgZnVuY3Rpb24uCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAgICA6bWV0aDpgYXNzZXJ0TXVsdGlMaW5lRXF1YWxgIGFkZGVkIGFzIHRoZSBkZWZhdWx0IHR5cGUgZXF1YWxpdHkKKyAgICAgICAgIGZ1bmN0aW9uIGZvciBjb21wYXJpbmcgc3RyaW5ncy4KKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnROb3RFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKIAotICAgICAgVGVzdCB0aGF0ICpmaXJzdCogYW5kICpzZWNvbmQqIGFyZSBub3QgZXF1YWwuICBJZiB0aGUgdmFsdWVzIGRvIGNvbXBhcmUKLSAgICAgIGVxdWFsLCB0aGUgdGVzdCB3aWxsIGZhaWwuCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIG5vdCBlcXVhbC4gIElmIHRoZSB2YWx1ZXMgZG8KKyAgICAgIGNvbXBhcmUgZXF1YWwsIHRoZSB0ZXN0IHdpbGwgZmFpbC4KIAogICAgLi4gbWV0aG9kOjogYXNzZXJ0VHJ1ZShleHByLCBtc2c9Tm9uZSkKICAgICAgICAgICAgICAgIGFzc2VydEZhbHNlKGV4cHIsIG1zZz1Ob25lKQpAQCAtNzIwLDcgKzkwMiw4IEBACiAgICAuLiBtZXRob2Q6OiBhc3NlcnRJcyhmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKICAgICAgICAgICAgICAgIGFzc2VydElzTm90KGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQogCi0gICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogZXZhbHVhdGUgKG9yIGRvbid0IGV2YWx1YXRlKSB0byB0aGUgc2FtZSBvYmplY3QuCisgICAgICBUZXN0IHRoYXQgKmZpcnN0KiBhbmQgKnNlY29uZCogZXZhbHVhdGUgKG9yIGRvbid0IGV2YWx1YXRlKSB0byB0aGUKKyAgICAgIHNhbWUgb2JqZWN0LgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIApAQCAtNzQxLDYgKzkyNCwxNSBAQAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorICAgLi4gbWV0aG9kOjogYXNzZXJ0SXNJbnN0YW5jZShvYmosIGNscywgbXNnPU5vbmUpCisgICAgICAgICAgICAgICBhc3NlcnROb3RJc0luc3RhbmNlKG9iaiwgY2xzLCBtc2c9Tm9uZSkKKworICAgICAgVGVzdCB0aGF0ICpvYmoqIGlzIChvciBpcyBub3QpIGFuIGluc3RhbmNlIG9mICpjbHMqICh3aGljaCBjYW4gYmUgYQorICAgICAgY2xhc3Mgb3IgYSB0dXBsZSBvZiBjbGFzc2VzLCBhcyBzdXBwb3J0ZWQgYnkgOmZ1bmM6YGlzaW5zdGFuY2VgKS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogCiAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoYXQgZXhjZXB0aW9ucyBhbmQgd2FybmluZ3MgYXJlIHJhaXNlZCB1c2luZwogICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgpAQCAtNzUxLDggKzk0MywxNCBAQAogICAgfCA6bWV0aDpgYXNzZXJ0UmFpc2VzKGV4YywgZnVuLCAqYXJncywgKiprd2RzKSAgICAgICAgICAgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgYGV4Y2AgIHwgICAgICAgICAgICB8CiAgICB8IDxUZXN0Q2FzZS5hc3NlcnRSYWlzZXM+YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwotICAgfCA6bWV0aDpgYXNzZXJ0UmFpc2VzUmVnZXhwKGV4YywgcmUsIGZ1biwgKmFyZ3MsICoqa3dkcykgIHwgYGBmdW4oKmFyZ3MsICoqa3dkcylgYCByYWlzZXMgYGV4Y2AgIHwgMy4xICAgICAgICB8Ci0gICB8IDxUZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleHA+YCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbmQgdGhlIG1lc3NhZ2UgbWF0Y2hlcyBgcmVgICAgICAgICAgfCAgICAgICAgICAgIHwKKyAgIHwgOm1ldGg6YGFzc2VydFJhaXNlc1JlZ2V4KGV4YywgcmUsIGZ1biwgKmFyZ3MsICoqa3dkcykgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzIGBleGNgICB8IDMuMSAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0UmFpc2VzUmVnZXg+YCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSBtZXNzYWdlIG1hdGNoZXMgYHJlYCAgICAgICAgIHwgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgIHwgOm1ldGg6YGFzc2VydFdhcm5zKHdhcm4sIGZ1biwgKmFyZ3MsICoqa3dkcykgICAgICAgICAgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzIGB3YXJuYCB8IDMuMiAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnM+YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgIHwgOm1ldGg6YGFzc2VydFdhcm5zUmVnZXgod2FybiwgcmUsIGZ1biwgKmFyZ3MsICoqa3dkcykgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzIGB3YXJuYCB8IDMuMiAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleD5gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSBtZXNzYWdlIG1hdGNoZXMgYHJlYCAgICAgICAgIHwgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgY2FsbGFibGUsICphcmdzLCAqKmt3ZHMpCkBAIC03NzEsMjcgKzk2OSw5NyBAQAogICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTb21lRXhjZXB0aW9uKToKICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQogCisgICAgICBUaGUgY29udGV4dCBtYW5hZ2VyIHdpbGwgc3RvcmUgdGhlIGNhdWdodCBleGNlcHRpb24gb2JqZWN0IGluIGl0cworICAgICAgOmF0dHI6YGV4Y2VwdGlvbmAgYXR0cmlidXRlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHRoZSBpbnRlbnRpb24KKyAgICAgIGlzIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3Mgb24gdGhlIGV4Y2VwdGlvbiByYWlzZWQ6OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNvbWVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisKKyAgICAgICAgIHRoZV9leGNlcHRpb24gPSBjbS5leGNlcHRpb24KKyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlX2V4Y2VwdGlvbi5lcnJvcl9jb2RlLCAzKQorCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQogICAgICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXNlIDptZXRoOmBhc3NlcnRSYWlzZXNgIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgQWRkZWQgdGhlIDphdHRyOmBleGNlcHRpb25gIGF0dHJpYnV0ZS4KIAotICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzUmVnZXhwKGV4Y2VwdGlvbiwgcmVnZXhwLCBjYWxsYWJsZSwgKmFyZ3MsICoqa3dkcykKLSAgICAgICAgICAgICAgIGFzc2VydFJhaXNlc1JlZ2V4cChleGNlcHRpb24sIHJlZ2V4cCkKIAotICAgICAgTGlrZSA6bWV0aDpgYXNzZXJ0UmFpc2VzYCBidXQgYWxzbyB0ZXN0cyB0aGF0ICpyZWdleHAqIG1hdGNoZXMKLSAgICAgIG9uIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhaXNlZCBleGNlcHRpb24uICAqcmVnZXhwKiBtYXkgYmUKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFJhaXNlc1JlZ2V4KGV4Y2VwdGlvbiwgcmVnZXgsIGNhbGxhYmxlLCAqYXJncywgKiprd2RzKQorICAgICAgICAgICAgICAgYXNzZXJ0UmFpc2VzUmVnZXgoZXhjZXB0aW9uLCByZWdleCkKKworICAgICAgTGlrZSA6bWV0aDpgYXNzZXJ0UmFpc2VzYCBidXQgYWxzbyB0ZXN0cyB0aGF0ICpyZWdleCogbWF0Y2hlcworICAgICAgb24gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFpc2VkIGV4Y2VwdGlvbi4gICpyZWdleCogbWF5IGJlCiAgICAgICBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3Qgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgogICAgICAgc3VpdGFibGUgZm9yIHVzZSBieSA6ZnVuYzpgcmUuc2VhcmNoYC4gIEV4YW1wbGVzOjoKIAotICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgJ2ludmFsaWQgbGl0ZXJhbCBmb3IuKlhZWiQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCAnWFlaJykKKyAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ludmFsaWQgbGl0ZXJhbCBmb3IuKlhZWiQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsICdYWVonKQogCiAgICAgICBvcjo6CiAKLSAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVmFsdWVFcnJvciwgJ2xpdGVyYWwnKToKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbGl0ZXJhbCcpOgogICAgICAgICAgICAgaW50KCdYWVonKQogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKyAgICAgICAgIHVuZGVyIHRoZSBuYW1lIGBgYXNzZXJ0UmFpc2VzUmVnZXhwYGAuCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgUmVuYW1lZCB0byA6bWV0aDpgYXNzZXJ0UmFpc2VzUmVnZXhgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFdhcm5zKHdhcm5pbmcsIGNhbGxhYmxlLCAqYXJncywgKiprd2RzKQorICAgICAgICAgICAgICAgYXNzZXJ0V2FybnMod2FybmluZykKKworICAgICAgVGVzdCB0aGF0IGEgd2FybmluZyBpcyB0cmlnZ2VyZWQgd2hlbiAqY2FsbGFibGUqIGlzIGNhbGxlZCB3aXRoIGFueQorICAgICAgcG9zaXRpb25hbCBvciBrZXl3b3JkIGFyZ3VtZW50cyB0aGF0IGFyZSBhbHNvIHBhc3NlZCB0bworICAgICAgOm1ldGg6YGFzc2VydFdhcm5zYC4gIFRoZSB0ZXN0IHBhc3NlcyBpZiAqd2FybmluZyogaXMgdHJpZ2dlcmVkIGFuZAorICAgICAgZmFpbHMgaWYgaXQgaXNuJ3QuICBBbHNvLCBhbnkgdW5leHBlY3RlZCBleGNlcHRpb24gaXMgYW4gZXJyb3IuCisgICAgICBUbyBjYXRjaCBhbnkgb2YgYSBncm91cCBvZiB3YXJuaW5ncywgYSB0dXBsZSBjb250YWluaW5nIHRoZSB3YXJuaW5nCisgICAgICBjbGFzc2VzIG1heSBiZSBwYXNzZWQgYXMgKndhcm5pbmdzKi4KKworICAgICAgSWYgb25seSB0aGUgKndhcm5pbmcqIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm5zIGEgY29udGV4dCBtYW5hZ2VyIHNvCisgICAgICB0aGF0IHRoZSBjb2RlIHVuZGVyIHRlc3QgY2FuIGJlIHdyaXR0ZW4gaW5saW5lIHJhdGhlciB0aGFuIGFzIGEgZnVuY3Rpb246OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoU29tZVdhcm5pbmcpOgorICAgICAgICAgICAgIGRvX3NvbWV0aGluZygpCisKKyAgICAgIFRoZSBjb250ZXh0IG1hbmFnZXIgd2lsbCBzdG9yZSB0aGUgY2F1Z2h0IHdhcm5pbmcgb2JqZWN0IGluIGl0cworICAgICAgOmF0dHI6YHdhcm5pbmdgIGF0dHJpYnV0ZSwgYW5kIHRoZSBzb3VyY2UgbGluZSB3aGljaCB0cmlnZ2VyZWQgdGhlCisgICAgICB3YXJuaW5ncyBpbiB0aGUgOmF0dHI6YGZpbGVuYW1lYCBhbmQgOmF0dHI6YGxpbmVub2AgYXR0cmlidXRlcy4KKyAgICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB0aGUgaW50ZW50aW9uIGlzIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBjaGVja3MKKyAgICAgIG9uIHRoZSBleGNlcHRpb24gcmFpc2VkOjoKKworICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFNvbWVXYXJuaW5nKSBhcyBjbToKKyAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQorCisgICAgICAgICBzZWxmLmFzc2VydEluKCdteWZpbGUucHknLCBjbS5maWxlbmFtZSkKKyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzIwLCBjbS5saW5lbm8pCisKKyAgICAgIFRoaXMgbWV0aG9kIHdvcmtzIHJlZ2FyZGxlc3Mgb2YgdGhlIHdhcm5pbmcgZmlsdGVycyBpbiBwbGFjZSB3aGVuIGl0CisgICAgICBpcyBjYWxsZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKKyAgIC4uIG1ldGhvZDo6IGFzc2VydFdhcm5zUmVnZXgod2FybmluZywgcmVnZXgsIGNhbGxhYmxlLCAqYXJncywgKiprd2RzKQorICAgICAgICAgICAgICAgYXNzZXJ0V2FybnNSZWdleCh3YXJuaW5nLCByZWdleCkKKworICAgICAgTGlrZSA6bWV0aDpgYXNzZXJ0V2FybnNgIGJ1dCBhbHNvIHRlc3RzIHRoYXQgKnJlZ2V4KiBtYXRjaGVzIG9uIHRoZQorICAgICAgbWVzc2FnZSBvZiB0aGUgdHJpZ2dlcmVkIHdhcm5pbmcuICAqcmVnZXgqIG1heSBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgb2JqZWN0IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24gc3VpdGFibGUgZm9yIHVzZQorICAgICAgYnkgOmZ1bmM6YHJlLnNlYXJjaGAuICBFeGFtcGxlOjoKKworICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ2xlZ2FjeV9mdW5jdGlvblwoXCkgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnYWN5X2Z1bmN0aW9uLCAnWFlaJykKKworICAgICAgb3I6OgorCisgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgJ3Vuc2FmZSBmcm9ibmljYXRpbmcnKToKKyAgICAgICAgICAgICBmcm9ibmljYXRlKCcvZXRjL3Bhc3N3ZCcpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKIApAQCAtODE4LDExICsxMDg2LDE1IEBACiAgICB8IDptZXRoOmBhc3NlcnRMZXNzRXF1YWwoYSwgYikgICAgICAgICAgfCBgYGEgPD0gYmBgICAgICAgICAgICAgICAgICAgICAgfCAzLjEgICAgICAgICAgfAogICAgfCA8VGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFsPmAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rCi0gICB8IDptZXRoOmBhc3NlcnRSZWdleHBNYXRjaGVzKHMsIHJlKSAgICAgfCBgYHJlZ2V4LnNlYXJjaChzKWBgICAgICAgICAgICAgfCAzLjEgICAgICAgICAgfAotICAgfCA8VGVzdENhc2UuYXNzZXJ0UmVnZXhwTWF0Y2hlcz5gICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwKKyAgIHwgOm1ldGg6YGFzc2VydFJlZ2V4KHMsIHJlKSAgICAgICAgICAgICB8IGBgcmVnZXguc2VhcmNoKHMpYGAgICAgICAgICAgICB8IDMuMSAgICAgICAgICB8CisgICB8IDxUZXN0Q2FzZS5hc3NlcnRSZWdleD5gICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKLSAgIHwgOm1ldGg6YGFzc2VydERpY3RDb250YWluc1N1YnNldChhLCBiKSB8IGFsbCB0aGUga2V5L3ZhbHVlIHBhaXJzICAgICAgICB8IDMuMSAgICAgICAgICB8Ci0gICB8IDxUZXN0Q2FzZS5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQ+YCAgfCBpbiBgYWAgZXhpc3QgaW4gYGJgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgfCA6bWV0aDpgYXNzZXJ0Tm90UmVnZXgocywgcmUpICAgICAgICAgIHwgYGBub3QgcmVnZXguc2VhcmNoKHMpYGAgICAgICAgIHwgMy4yICAgICAgICAgIHwKKyAgIHwgPFRlc3RDYXNlLmFzc2VydE5vdFJlZ2V4PmAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKworICAgfCA6bWV0aDpgYXNzZXJ0Q291bnRFcXVhbChhLCBiKSAgICAgICAgIHwgYGFgIGFuZCBgYmAgaGF2ZSB0aGUgc2FtZSAgICAgIHwgMy4yICAgICAgICAgIHwKKyAgIHwgPFRlc3RDYXNlLmFzc2VydENvdW50RXF1YWw+YCAgICAgICAgICB8IGVsZW1lbnRzIGluIHRoZSBzYW1lIG51bWJlciwgICB8ICAgICAgICAgICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZWdhcmRsZXNzIG9mIHRoZWlyIG9yZGVyICAgICAgfCAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSsKIAogCkBAIC04NDAsNiArMTExMiwxMSBAQAogCiAgICAgICBTdXBwbHlpbmcgYm90aCAqZGVsdGEqIGFuZCAqcGxhY2VzKiByYWlzZXMgYSBgYFR5cGVFcnJvcmBgLgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsYCBhdXRvbWF0aWNhbGx5IGNvbnNpZGVycyBhbG1vc3QgZXF1YWwgb2JqZWN0cworICAgICAgICAgdGhhdCBjb21wYXJlIGVxdWFsLiAgOm1ldGg6YGFzc2VydE5vdEFsbW9zdEVxdWFsYCBhdXRvbWF0aWNhbGx5IGZhaWxzCisgICAgICAgICBpZiB0aGUgb2JqZWN0cyBjb21wYXJlIGVxdWFsLiAgQWRkZWQgdGhlICpkZWx0YSoga2V5d29yZCBhcmd1bWVudC4KKwogCiAgICAuLiBtZXRob2Q6OiBhc3NlcnRHcmVhdGVyKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQogICAgICAgICAgICAgICAgYXNzZXJ0R3JlYXRlckVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQpAQCAtODU1LDM4ICsxMTMyLDY0IEBACiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0gICAuLiBtZXRob2Q6OiBhc3NlcnRSZWdleHBNYXRjaGVzKHRleHQsIHJlZ2V4cCwgbXNnPU5vbmUpCisgICAuLiBtZXRob2Q6OiBhc3NlcnRSZWdleCh0ZXh0LCByZWdleCwgbXNnPU5vbmUpCisgICAgICAgICAgICAgICBhc3NlcnROb3RSZWdleCh0ZXh0LCByZWdleCwgbXNnPU5vbmUpCiAKLSAgICAgIFRlc3QgdGhhdCBhICpyZWdleHAqIHNlYXJjaCBtYXRjaGVzICp0ZXh0Ki4gIEluIGNhc2UKKyAgICAgIFRlc3QgdGhhdCBhICpyZWdleCogc2VhcmNoIG1hdGNoZXMgKG9yIGRvZXMgbm90IG1hdGNoKSAqdGV4dCouICBJbiBjYXNlCiAgICAgICBvZiBmYWlsdXJlLCB0aGUgZXJyb3IgbWVzc2FnZSB3aWxsIGluY2x1ZGUgdGhlIHBhdHRlcm4gYW5kIHRoZSAqdGV4dCogKG9yCi0gICAgICB0aGUgcGF0dGVybiBhbmQgdGhlIHBhcnQgb2YgKnRleHQqIHRoYXQgdW5leHBlY3RlZGx5IG1hdGNoZWQpLiAgKnJlZ2V4cCoKKyAgICAgIHRoZSBwYXR0ZXJuIGFuZCB0aGUgcGFydCBvZiAqdGV4dCogdGhhdCB1bmV4cGVjdGVkbHkgbWF0Y2hlZCkuICAqcmVnZXgqCiAgICAgICBtYXkgYmUgYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSByZWd1bGFyCiAgICAgICBleHByZXNzaW9uIHN1aXRhYmxlIGZvciB1c2UgYnkgOmZ1bmM6YHJlLnNlYXJjaGAuCiAKLSAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMSA6bWV0aDpgflRlc3RDYXNlLmFzc2VydFJlZ2V4cE1hdGNoZXNgCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKyAgICAgICAgIHVuZGVyIHRoZSBuYW1lIGBgYXNzZXJ0UmVnZXhwTWF0Y2hlc2BgLgorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgICAgIFRoZSBtZXRob2QgYGBhc3NlcnRSZWdleHBNYXRjaGVzKClgYCBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAgICAgICA6bWV0aDpgLmFzc2VydFJlZ2V4YC4KKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgICAgOm1ldGg6YC5hc3NlcnROb3RSZWdleGAuCiAKIAotICAgLi4gbWV0aG9kOjogYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KGV4cGVjdGVkLCBhY3R1YWwsIG1zZz1Ob25lKQorICAgLi4gbWV0aG9kOjogYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHN1YnNldCwgZGljdGlvbmFyeSwgbXNnPU5vbmUpCiAKLSAgICAgIFRlc3RzIHdoZXRoZXIgdGhlIGtleS92YWx1ZSBwYWlycyBpbiBkaWN0aW9uYXJ5ICphY3R1YWwqIGFyZSBhCi0gICAgICBzdXBlcnNldCBvZiB0aG9zZSBpbiAqZXhwZWN0ZWQqLiAgSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGxpc3RpbmcKLSAgICAgIHRoZSBtaXNzaW5nIGtleXMgYW5kIG1pc21hdGNoZWQgdmFsdWVzIGlzIGdlbmVyYXRlZC4KKyAgICAgIFRlc3RzIHdoZXRoZXIgdGhlIGtleS92YWx1ZSBwYWlycyBpbiAqZGljdGlvbmFyeSogYXJlIGEgc3VwZXJzZXQgb2YKKyAgICAgIHRob3NlIGluICpzdWJzZXQqLiAgSWYgbm90LCBhbiBlcnJvciBtZXNzYWdlIGxpc3RpbmcgdGhlIG1pc3Npbmcga2V5cworICAgICAgYW5kIG1pc21hdGNoZWQgdmFsdWVzIGlzIGdlbmVyYXRlZC4KKworICAgICAgTm90ZSwgdGhlIGFyZ3VtZW50cyBhcmUgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIG9mIHdoYXQgdGhlIG1ldGhvZCBuYW1lCisgICAgICBkaWN0YXRlcy4gIEluc3RlYWQsIGNvbnNpZGVyIHVzaW5nIHRoZSBzZXQtbWV0aG9kcyBvbiA6cmVmOmBkaWN0aW9uYXJ5CisgICAgICB2aWV3cyA8ZGljdC12aWV3cz5gLCBmb3IgZXhhbXBsZTogYGBkLmtleXMoKSA8PSBlLmtleXMoKWBgIG9yCisgICAgICBgYGQuaXRlbXMoKSA8PSBkLml0ZW1zKClgYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAgICAgICAuLiBkZXByZWNhdGVkOjogMy4yCiAKIAotICAgLi4gbWV0aG9kOjogYXNzZXJ0U2FtZUVsZW1lbnRzKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZz1Ob25lKQorICAgLi4gbWV0aG9kOjogYXNzZXJ0Q291bnRFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKIAotICAgICAgVGVzdCB0aGF0IHNlcXVlbmNlICpleHBlY3RlZCogY29udGFpbnMgdGhlIHNhbWUgZWxlbWVudHMgYXMgKmFjdHVhbCosCisgICAgICBUZXN0IHRoYXQgc2VxdWVuY2UgKmZpcnN0KiBjb250YWlucyB0aGUgc2FtZSBlbGVtZW50cyBhcyAqc2Vjb25kKiwKKyAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgb3JkZXIuIFdoZW4gdGhleSBkb24ndCwgYW4gZXJyb3IgbWVzc2FnZSBsaXN0aW5nIHRoZQorICAgICAgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc2VxdWVuY2VzIHdpbGwgYmUgZ2VuZXJhdGVkLgorCisgICAgICBEdXBsaWNhdGUgZWxlbWVudHMgYXJlICpub3QqIGlnbm9yZWQgd2hlbiBjb21wYXJpbmcgKmZpcnN0KiBhbmQKKyAgICAgICpzZWNvbmQqLiBJdCB2ZXJpZmllcyB3aGV0aGVyIGVhY2ggZWxlbWVudCBoYXMgdGhlIHNhbWUgY291bnQgaW4gYm90aAorICAgICAgc2VxdWVuY2VzLiBFcXVpdmFsZW50IHRvOgorICAgICAgYGBhc3NlcnRFcXVhbChDb3VudGVyKGxpc3QoZmlyc3QpKSwgQ291bnRlcihsaXN0KHNlY29uZCkpKWBgCisgICAgICBidXQgd29ya3Mgd2l0aCBzZXF1ZW5jZXMgb2YgdW5oYXNoYWJsZSBvYmplY3RzIGFzIHdlbGwuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisgICAuLiBtZXRob2Q6OiBhc3NlcnRTYW1lRWxlbWVudHMoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisKKyAgICAgIFRlc3QgdGhhdCBzZXF1ZW5jZSAqZmlyc3QqIGNvbnRhaW5zIHRoZSBzYW1lIGVsZW1lbnRzIGFzICpzZWNvbmQqLAogICAgICAgcmVnYXJkbGVzcyBvZiB0aGVpciBvcmRlci4gV2hlbiB0aGV5IGRvbid0LCBhbiBlcnJvciBtZXNzYWdlIGxpc3RpbmcKICAgICAgIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzZXF1ZW5jZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAKLSAgICAgIER1cGxpY2F0ZSBlbGVtZW50cyBhcmUgaWdub3JlZCB3aGVuIGNvbXBhcmluZyAqYWN0dWFsKiBhbmQgKmV4cGVjdGVkKi4KLSAgICAgIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mIGBgYXNzZXJ0RXF1YWwoc2V0KGV4cGVjdGVkKSwgc2V0KGFjdHVhbCkpYGAKKyAgICAgIER1cGxpY2F0ZSBlbGVtZW50cyBhcmUgaWdub3JlZCB3aGVuIGNvbXBhcmluZyAqZmlyc3QqIGFuZCAqc2Vjb25kKi4KKyAgICAgIEl0IGlzIHRoZSBlcXVpdmFsZW50IG9mIGBgYXNzZXJ0RXF1YWwoc2V0KGZpcnN0KSwgc2V0KHNlY29uZCkpYGAKICAgICAgIGJ1dCBpdCB3b3JrcyB3aXRoIHNlcXVlbmNlcyBvZiB1bmhhc2hhYmxlIG9iamVjdHMgYXMgd2VsbC4gQmVjYXVzZQogICAgICAgZHVwbGljYXRlcyBhcmUgaWdub3JlZCwgdGhpcyBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YKLSAgICAgIDptZXRoOmBhc3NlcnRJdGVtc0VxdWFsYC4KKyAgICAgIDptZXRoOmBhc3NlcnRDb3VudEVxdWFsYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAgICAgICAuLiBkZXByZWNhdGVkOjogMy4yCkBAIC05NTAsMTAgKzEyNTMsMTAgQEAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKLSAgIC4uIG1ldGhvZDo6IGFzc2VydFNlcXVlbmNlRXF1YWwoc2VxMSwgc2VxMiwgbXNnPU5vbmUsIHNlcV90eXBlPU5vbmUpCisgICAuLiBtZXRob2Q6OiBhc3NlcnRTZXF1ZW5jZUVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lLCBzZXFfdHlwZT1Ob25lKQogCiAgICAgICBUZXN0cyB0aGF0IHR3byBzZXF1ZW5jZXMgYXJlIGVxdWFsLiAgSWYgYSAqc2VxX3R5cGUqIGlzIHN1cHBsaWVkLCBib3RoCi0gICAgICAqc2VxMSogYW5kICpzZXEyKiBtdXN0IGJlIGluc3RhbmNlcyBvZiAqc2VxX3R5cGUqIG9yIGEgZmFpbHVyZSB3aWxsCisgICAgICAqZmlyc3QqIGFuZCAqc2Vjb25kKiBtdXN0IGJlIGluc3RhbmNlcyBvZiAqc2VxX3R5cGUqIG9yIGEgZmFpbHVyZSB3aWxsCiAgICAgICBiZSByYWlzZWQuICBJZiB0aGUgc2VxdWVuY2VzIGFyZSBkaWZmZXJlbnQgYW4gZXJyb3IgbWVzc2FnZSBpcwogICAgICAgY29uc3RydWN0ZWQgdGhhdCBzaG93cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28uCiAKQEAgLTk2NCw4ICsxMjY3LDggQEAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKLSAgIC4uIG1ldGhvZDo6IGFzc2VydExpc3RFcXVhbChsaXN0MSwgbGlzdDIsIG1zZz1Ob25lKQotICAgICAgICAgICAgICAgYXNzZXJ0VHVwbGVFcXVhbCh0dXBsZTEsIHR1cGxlMiwgbXNnPU5vbmUpCisgICAuLiBtZXRob2Q6OiBhc3NlcnRMaXN0RXF1YWwoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCisgICAgICAgICAgICAgICBhc3NlcnRUdXBsZUVxdWFsKGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKQogCiAgICAgICBUZXN0cyB0aGF0IHR3byBsaXN0cyBvciB0dXBsZXMgYXJlIGVxdWFsLiAgSWYgbm90IGFuIGVycm9yIG1lc3NhZ2UgaXMKICAgICAgIGNvbnN0cnVjdGVkIHRoYXQgc2hvd3Mgb25seSB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvLiAgQW4gZXJyb3IKQEAgLTk3NiwxOSArMTI3OSwxOSBAQAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAotICAgLi4gbWV0aG9kOjogYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MiwgbXNnPU5vbmUpCisgICAuLiBtZXRob2Q6OiBhc3NlcnRTZXRFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkKIAogICAgICAgVGVzdHMgdGhhdCB0d28gc2V0cyBhcmUgZXF1YWwuICBJZiBub3QsIGFuIGVycm9yIG1lc3NhZ2UgaXMgY29uc3RydWN0ZWQKICAgICAgIHRoYXQgbGlzdHMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNldHMuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5CiAgICAgICBkZWZhdWx0IHdoZW4gY29tcGFyaW5nIHNldHMgb3IgZnJvemVuc2V0cyB3aXRoIDptZXRoOmBhc3NlcnRFcXVhbGAuCiAKLSAgICAgIEZhaWxzIGlmIGVpdGhlciBvZiAqc2V0MSogb3IgKnNldDIqIGRvZXMgbm90IGhhdmUgYSA6bWV0aDpgc2V0LmRpZmZlcmVuY2VgCisgICAgICBGYWlscyBpZiBlaXRoZXIgb2YgKmZpcnN0KiBvciAqc2Vjb25kKiBkb2VzIG5vdCBoYXZlIGEgOm1ldGg6YHNldC5kaWZmZXJlbmNlYAogICAgICAgbWV0aG9kLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCi0gICAuLiBtZXRob2Q6OiBhc3NlcnREaWN0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCwgbXNnPU5vbmUpCisgICAuLiBtZXRob2Q6OiBhc3NlcnREaWN0RXF1YWwoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpCiAKICAgICAgIFRlc3QgdGhhdCB0d28gZGljdGlvbmFyaWVzIGFyZSBlcXVhbC4gIElmIG5vdCwgYW4gZXJyb3IgbWVzc2FnZSBpcwogICAgICAgY29uc3RydWN0ZWQgdGhhdCBzaG93cyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIGRpY3Rpb25hcmllcy4gVGhpcwpAQCAtMTAyOSw4ICsxMzMyLDggQEAKICAgICAgIHRvIGBgVHJ1ZWBgIGFsbG93cyB5b3UgdG8gaGF2ZSBhIGN1c3RvbSBlcnJvciBtZXNzYWdlIGluIGFkZGl0aW9uIHRvIHRoZQogICAgICAgbm9ybWFsIG9uZS4KIAotICAgICAgVGhpcyBhdHRyaWJ1dGUgZGVmYXVsdHMgdG8gYGBGYWxzZWBgLCBtZWFuaW5nIHRoYXQgYSBjdXN0b20gbWVzc2FnZSBwYXNzZWQKLSAgICAgIHRvIGFuIGFzc2VydCBtZXRob2Qgd2lsbCBzaWxlbmNlIHRoZSBub3JtYWwgbWVzc2FnZS4KKyAgICAgIFRoaXMgYXR0cmlidXRlIGRlZmF1bHRzIHRvIGBgVHJ1ZWBgLiBJZiBzZXQgdG8gRmFsc2UgdGhlbiBhIGN1c3RvbSBtZXNzYWdlCisgICAgICBwYXNzZWQgdG8gYW4gYXNzZXJ0IG1ldGhvZCB3aWxsIHNpbGVuY2UgdGhlIG5vcm1hbCBtZXNzYWdlLgogCiAgICAgICBUaGUgY2xhc3Mgc2V0dGluZyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBpbmRpdmlkdWFsIHRlc3RzIGJ5IGFzc2lnbmluZyBhbgogICAgICAgaW5zdGFuY2UgYXR0cmlidXRlIHRvIGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYCBiZWZvcmUgY2FsbGluZyB0aGUgYXNzZXJ0IG1ldGhvZHMuCkBAIC0xMDM4LDYgKzEzNDEsMjEgQEAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heERpZmYKKworICAgICAgVGhpcyBhdHRyaWJ1dGUgY29udHJvbHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGRpZmZzIG91dHB1dCBieSBhc3NlcnQKKyAgICAgIG1ldGhvZHMgdGhhdCByZXBvcnQgZGlmZnMgb24gZmFpbHVyZS4gSXQgZGVmYXVsdHMgdG8gODAqOCBjaGFyYWN0ZXJzLgorICAgICAgQXNzZXJ0IG1ldGhvZHMgYWZmZWN0ZWQgYnkgdGhpcyBhdHRyaWJ1dGUgYXJlCisgICAgICA6bWV0aDpgYXNzZXJ0U2VxdWVuY2VFcXVhbGAgKGluY2x1ZGluZyBhbGwgdGhlIHNlcXVlbmNlIGNvbXBhcmlzb24KKyAgICAgIG1ldGhvZHMgdGhhdCBkZWxlZ2F0ZSB0byBpdCksIDptZXRoOmBhc3NlcnREaWN0RXF1YWxgIGFuZAorICAgICAgOm1ldGg6YGFzc2VydE11bHRpTGluZUVxdWFsYC4KKworICAgICAgU2V0dGluZyBgYG1heERpZmZgYCB0byBOb25lIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gbWF4aW11bSBsZW5ndGggb2YKKyAgICAgIGRpZmZzLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCiAgICBUZXN0aW5nIGZyYW1ld29ya3MgY2FuIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBvbgogICAgdGhlIHRlc3Q6CiAKQEAgLTEwNzAsMTMgKzEzODgsMTMgQEAKICAgICAgIFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgYGBOb25lYGAgaWYgbm8gZGVzY3JpcHRpb24KICAgICAgIGhhcyBiZWVuIHByb3ZpZGVkLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QKICAgICAgIHJldHVybnMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsCi0gICAgICBhbG9uZyB3aXRoIHRoZSBtZXRob2QgbmFtZS4KKyAgICAgIG9yIGBgTm9uZWBgLgogCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQotICAgICAgICAgSW4gZWFybGllciB2ZXJzaW9ucyB0aGlzIG9ubHkgcmV0dXJuZWQgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QKLSAgICAgICAgIG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlIG9yIHRoZSA6Y29uc3Q6YE5vbmVgLiAgVGhhdCBsZWQgdG8KLSAgICAgICAgIHVuZGVzaXJhYmxlIGJlaGF2aW9yIG9mIG5vdCBwcmludGluZyB0aGUgdGVzdCBuYW1lIHdoZW4gc29tZW9uZSB3YXMKLSAgICAgICAgIHRob3VnaHRmdWwgZW5vdWdoIHRvIHdyaXRlIGEgZG9jc3RyaW5nLgorICAgICAgICAgSW4gMy4xIHRoaXMgd2FzIGNoYW5nZWQgdG8gYWRkIHRoZSB0ZXN0IG5hbWUgdG8gdGhlIHNob3J0IGRlc2NyaXB0aW9uCisgICAgICAgICBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiBhIGRvY3N0cmluZy4gIFRoaXMgY2F1c2VkIGNvbXBhdGliaWxpdHkgaXNzdWVzCisgICAgICAgICB3aXRoIHVuaXR0ZXN0IGV4dGVuc2lvbnMgYW5kIGFkZGluZyB0aGUgdGVzdCBuYW1lIHdhcyBtb3ZlZCB0byB0aGUKKyAgICAgICAgIDpjbGFzczpgVGV4dFRlc3RSZXN1bHRgIGluIFB5dGhvbiAzLjIuCiAKIAogICAgLi4gbWV0aG9kOjogYWRkQ2xlYW51cChmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKQpAQCAtMTExOCw2ICsxNDM2LDggQEAKICAgIDptb2Q6YHVuaXR0ZXN0YC1iYXNlZCB0ZXN0IGZyYW1ld29yay4KIAogCisuLiBfZGVwcmVjYXRlZC1hbGlhc2VzOgorCiBEZXByZWNhdGVkIGFsaWFzZXMKICMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xMTI1LDIxICsxNDQ1LDI3IEBACiBhbGlhc2VzIHRoYXQgYXJlIG5vdyBkZXByZWNhdGVkLiAgVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgY29ycmVjdCBuYW1lcwogYWxvbmcgd2l0aCB0aGVpciBkZXByZWNhdGVkIGFsaWFzZXM6CiAKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIE1ldGhvZCBOYW1lICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRlZCBhbGlhcyhlcykKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIDptZXRoOmAuYXNzZXJ0RXF1YWxgICAgICAgICAgICAgZmFpbFVubGVzc0VxdWFsLCBhc3NlcnRFcXVhbHMKLSAgICA6bWV0aDpgLmFzc2VydE5vdEVxdWFsYCAgICAgICAgIGZhaWxJZkVxdWFsCi0gICAgOm1ldGg6YC5hc3NlcnRUcnVlYCAgICAgICAgICAgICBmYWlsVW5sZXNzLCBhc3NlcnRcXworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0KKyAgICBNZXRob2QgTmFtZSAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQgYWxpYXMgICAgICAgRGVwcmVjYXRlZCBhbGlhcworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0KKyAgICA6bWV0aDpgLmFzc2VydEVxdWFsYCAgICAgICAgICAgIGZhaWxVbmxlc3NFcXVhbCAgICAgICAgYXNzZXJ0RXF1YWxzCisgICAgOm1ldGg6YC5hc3NlcnROb3RFcXVhbGAgICAgICAgICBmYWlsSWZFcXVhbCAgICAgICAgICAgIGFzc2VydE5vdEVxdWFscworICAgIDptZXRoOmAuYXNzZXJ0VHJ1ZWAgICAgICAgICAgICAgZmFpbFVubGVzcyAgICAgICAgICAgICBhc3NlcnRcXwogICAgIDptZXRoOmAuYXNzZXJ0RmFsc2VgICAgICAgICAgICAgZmFpbElmCiAgICAgOm1ldGg6YC5hc3NlcnRSYWlzZXNgICAgICAgICAgICBmYWlsVW5sZXNzUmFpc2VzCi0gICAgOm1ldGg6YC5hc3NlcnRBbG1vc3RFcXVhbGAgICAgICBmYWlsVW5sZXNzQWxtb3N0RXF1YWwKLSAgICA6bWV0aDpgLmFzc2VydE5vdEFsbW9zdEVxdWFsYCAgIGZhaWxJZkFsbW9zdEVxdWFsCi0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICA6bWV0aDpgLmFzc2VydEFsbW9zdEVxdWFsYCAgICAgIGZhaWxVbmxlc3NBbG1vc3RFcXVhbCAgYXNzZXJ0QWxtb3N0RXF1YWxzCisgICAgOm1ldGg6YC5hc3NlcnROb3RBbG1vc3RFcXVhbGAgICBmYWlsSWZBbG1vc3RFcXVhbCAgICAgIGFzc2VydE5vdEFsbW9zdEVxdWFscworICAgIDptZXRoOmAuYXNzZXJ0UmVnZXhgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRSZWdleHBNYXRjaGVzCisgICAgOm1ldGg6YC5hc3NlcnRSYWlzZXNSZWdleGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydFJhaXNlc1JlZ2V4cAorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT0KIAogICAgLi4gZGVwcmVjYXRlZDo6IDMuMQotICAgICAgICAgdGhlIGFsaWFzZXMgbGlzdGVkIGluIHRoZSBzZWNvbmQgY29sdW1uCi0KKyAgICAgICAgIHRoZSBmYWlsKiBhbGlhc2VzIGxpc3RlZCBpbiB0aGUgc2Vjb25kIGNvbHVtbi4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKKyAgICAgICAgIHRoZSBhc3NlcnQqIGFsaWFzZXMgbGlzdGVkIGluIHRoZSB0aGlyZCBjb2x1bW4uCisgICAuLiBkZXByZWNhdGVkOjogMy4yCisgICAgICAgICBgYGFzc2VydFJlZ2V4cE1hdGNoZXNgYCBhbmQgYGBhc3NlcnRSYWlzZXNSZWdleHBgYCBoYXZlIGJlZW4gcmVuYW1lZCB0bworICAgICAgICAgOm1ldGg6YC5hc3NlcnRSZWdleGAgYW5kIDptZXRoOmAuYXNzZXJ0UmFpc2VzUmVnZXhgCiAKIAogLi4gX3Rlc3RzdWl0ZS1vYmplY3RzOgpAQCAtMTIwOSw2ICsxNTM1LDExIEBACiAgICAgICAoZm9yIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KQogICAgICAgc28gdGhlIHRlc3RzIHJldHVybmVkIG11c3QgYmUgdGhlIHNhbWUgZm9yIHJlcGVhdGVkIGl0ZXJhdGlvbnMuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYWNjZXNzZWQgdGVzdHMgZGlyZWN0bHkgcmF0aGVyCisgICAgICAgICB0aGFuIHRocm91Z2ggaXRlcmF0aW9uLCBzbyBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2Agd2Fzbid0IHN1ZmZpY2llbnQKKyAgICAgICAgIGZvciBwcm92aWRpbmcgdGVzdHMuCisKICAgIEluIHRoZSB0eXBpY2FsIHVzYWdlIG9mIGEgOmNsYXNzOmBUZXN0U3VpdGVgIG9iamVjdCwgdGhlIDptZXRoOmBydW5gIG1ldGhvZAogICAgaXMgaW52b2tlZCBieSBhIDpjbGFzczpgVGVzdFJ1bm5lcmAgcmF0aGVyIHRoYW4gYnkgdGhlIGVuZC11c2VyIHRlc3QgaGFybmVzcy4KIApAQCAtMTI0OCw2ICsxNTc5LDEzIEBACiAgICAgICAgICBkaXJlY3RseSBkb2VzIG5vdCBwbGF5IHdlbGwgd2l0aCB0aGlzIG1ldGhvZC4gIERvaW5nIHNvLCBob3dldmVyLCBjYW4KICAgICAgICAgIGJlIHVzZWZ1bCB3aGVuIHRoZSBmaXh0dXJlcyBhcmUgZGlmZmVyZW50IGFuZCBkZWZpbmVkIGluIHN1YmNsYXNzZXMuCiAKKyAgICAgIElmIGEgbW9kdWxlIHByb3ZpZGVzIGEgYGBsb2FkX3Rlc3RzYGAgZnVuY3Rpb24gaXQgd2lsbCBiZSBjYWxsZWQgdG8KKyAgICAgIGxvYWQgdGhlIHRlc3RzLiBUaGlzIGFsbG93cyBtb2R1bGVzIHRvIGN1c3RvbWl6ZSB0ZXN0IGxvYWRpbmcuCisgICAgICBUaGlzIGlzIHRoZSBgbG9hZF90ZXN0cyBwcm90b2NvbGBfLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgICAgU3VwcG9ydCBmb3IgYGBsb2FkX3Rlc3RzYGAgYWRkZWQuCisKIAogICAgLi4gbWV0aG9kOjogbG9hZFRlc3RzRnJvbU5hbWUobmFtZSwgbW9kdWxlPU5vbmUpCiAKQEAgLTEyODcsNiArMTYyNSwzOSBAQAogICAgICAgdGhpcyBzaG91bGQgYmUgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFRlc3RDYXNlYC4KIAogCisgICAuLiBtZXRob2Q6OiBkaXNjb3ZlcihzdGFydF9kaXIsIHBhdHRlcm49J3Rlc3QqLnB5JywgdG9wX2xldmVsX2Rpcj1Ob25lKQorCisgICAgICBGaW5kIGFuZCByZXR1cm4gYWxsIHRlc3QgbW9kdWxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgc3RhcnQgZGlyZWN0b3J5LAorICAgICAgcmVjdXJzaW5nIGludG8gc3ViZGlyZWN0b3JpZXMgdG8gZmluZCB0aGVtLiBPbmx5IHRlc3QgZmlsZXMgdGhhdCBtYXRjaAorICAgICAgKnBhdHRlcm4qIHdpbGwgYmUgbG9hZGVkLiAoVXNpbmcgc2hlbGwgc3R5bGUgcGF0dGVybiBtYXRjaGluZy4pIE9ubHkKKyAgICAgIG1vZHVsZSBuYW1lcyB0aGF0IGFyZSBpbXBvcnRhYmxlIChpLmUuIGFyZSB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMpIHdpbGwKKyAgICAgIGJlIGxvYWRlZC4KKworICAgICAgQWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wIGxldmVsIG9mIHRoZSBwcm9qZWN0LiBJZgorICAgICAgdGhlIHN0YXJ0IGRpcmVjdG9yeSBpcyBub3QgdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkgdGhlbiB0aGUgdG9wIGxldmVsCisgICAgICBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KKworICAgICAgSWYgaW1wb3J0aW5nIGEgbW9kdWxlIGZhaWxzLCBmb3IgZXhhbXBsZSBkdWUgdG8gYSBzeW50YXggZXJyb3IsIHRoZW4gdGhpcworICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuCisKKyAgICAgIElmIGEgdGVzdCBwYWNrYWdlIG5hbWUgKGRpcmVjdG9yeSB3aXRoIDpmaWxlOmBfX2luaXRfXy5weWApIG1hdGNoZXMgdGhlCisgICAgICBwYXR0ZXJuIHRoZW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBjaGVja2VkIGZvciBhIGBgbG9hZF90ZXN0c2BgCisgICAgICBmdW5jdGlvbi4gSWYgdGhpcyBleGlzdHMgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoICpsb2FkZXIqLCAqdGVzdHMqLAorICAgICAgKnBhdHRlcm4qLgorCisgICAgICBJZiBsb2FkX3Rlc3RzIGV4aXN0cyB0aGVuIGRpc2NvdmVyeSBkb2VzICpub3QqIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZSwKKyAgICAgIGBgbG9hZF90ZXN0c2BgIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0ZXN0cyBpbiB0aGUgcGFja2FnZS4KKworICAgICAgVGhlIHBhdHRlcm4gaXMgZGVsaWJlcmF0ZWx5IG5vdCBzdG9yZWQgYXMgYSBsb2FkZXIgYXR0cmlidXRlIHNvIHRoYXQKKyAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gKnRvcF9sZXZlbF9kaXIqIGlzIHN0b3JlZCBzbworICAgICAgYGBsb2FkX3Rlc3RzYGAgZG9lcyBub3QgbmVlZCB0byBwYXNzIHRoaXMgYXJndW1lbnQgaW4gdG8KKyAgICAgIGBgbG9hZGVyLmRpc2NvdmVyKClgYC4KKworICAgICAgKnN0YXJ0X2RpciogY2FuIGJlIGEgZG90dGVkIG1vZHVsZSBuYW1lIGFzIHdlbGwgYXMgYSBkaXJlY3RvcnkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKICAgIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBvZiBhIDpjbGFzczpgVGVzdExvYWRlcmAgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5CiAgICBzdWJjbGFzc2luZyBvciBhc3NpZ25tZW50IG9uIGFuIGluc3RhbmNlOgogCkBAIC0xMzc1LDYgKzE3NDYsMjQgQEAKICAgICAgIFRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuIHNvIGZhci4KIAogCisgICAuLiBhdHRyaWJ1dGU6OiBidWZmZXIKKworICAgICAgSWYgc2V0IHRvIHRydWUsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCB3aWxsIGJlIGJ1ZmZlcmVkIGluIGJldHdlZW4KKyAgICAgIDptZXRoOmBzdGFydFRlc3RgIGFuZCA6bWV0aDpgc3RvcFRlc3RgIGJlaW5nIGNhbGxlZC4gQ29sbGVjdGVkIG91dHB1dCB3aWxsCisgICAgICBvbmx5IGJlIGVjaG9lZCBvbnRvIHRoZSByZWFsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBpZiB0aGUgdGVzdAorICAgICAgZmFpbHMgb3IgZXJyb3JzLiBBbnkgb3V0cHV0IGlzIGFsc28gYXR0YWNoZWQgdG8gdGhlIGZhaWx1cmUgLyBlcnJvciBtZXNzYWdlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisgICAuLiBhdHRyaWJ1dGU6OiBmYWlsZmFzdAorCisgICAgICBJZiBzZXQgdG8gdHJ1ZSA6bWV0aDpgc3RvcGAgd2lsbCBiZSBjYWxsZWQgb24gdGhlIGZpcnN0IGZhaWx1cmUgb3IgZXJyb3IsCisgICAgICBoYWx0aW5nIHRoZSB0ZXN0IHJ1bi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogICAgLi4gbWV0aG9kOjogd2FzU3VjY2Vzc2Z1bCgpCiAKICAgICAgIFJldHVybiBgYFRydWVgYCBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwgb3RoZXJ3aXNlIHJldHVybnMKQEAgLTE0MDMsMTggKzE3OTIsMTEgQEAKIAogICAgICAgQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSAqdGVzdCogaXMgYWJvdXQgdG8gYmUgcnVuLgogCi0gICAgICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgaW5jcmVtZW50cyB0aGUgaW5zdGFuY2UncyA6YXR0cjpgdGVzdHNSdW5gCi0gICAgICBjb3VudGVyLgotCi0KICAgIC4uIG1ldGhvZDo6IHN0b3BUZXN0KHRlc3QpCiAKICAgICAgIENhbGxlZCBhZnRlciB0aGUgdGVzdCBjYXNlICp0ZXN0KiBoYXMgYmVlbiBleGVjdXRlZCwgcmVnYXJkbGVzcyBvZiB0aGUKICAgICAgIG91dGNvbWUuCiAKLSAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KLQotCiAgICAuLiBtZXRob2Q6OiBzdGFydFRlc3RSdW4odGVzdCkKIAogICAgICAgQ2FsbGVkIG9uY2UgYmVmb3JlIGFueSB0ZXN0cyBhcmUgZXhlY3V0ZWQuCkBAIC0xNDg1LDYgKzE4NjcsMTYgQEAKICAgICAgIDphdHRyOmB1bmV4cGVjdGVkU3VjY2Vzc2VzYCBhdHRyaWJ1dGUuCiAKIAorLi4gY2xhc3M6OiBUZXh0VGVzdFJlc3VsdChzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5KQorCisgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgVGVzdFJlc3VsdGAgdXNlZCBieSB0aGUKKyAgIDpjbGFzczpgVGV4dFRlc3RSdW5uZXJgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoaXMgY2xhc3Mgd2FzIHByZXZpb3VzbHkgbmFtZWQgYGBfVGV4dFRlc3RSZXN1bHRgYC4gVGhlIG9sZCBuYW1lIHN0aWxsCisgICAgICBleGlzdHMgYXMgYW4gYWxpYXMgYnV0IGlzIGRlcHJlY2F0ZWQuCisKKwogLi4gZGF0YTo6IGRlZmF1bHRUZXN0TG9hZGVyCiAKICAgIEluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFRlc3RMb2FkZXJgIGNsYXNzIGludGVuZGVkIHRvIGJlIHNoYXJlZC4gIElmIG5vCkBAIC0xNDkyLDIwICsxODg0LDQ2IEBACiAgICBpbnN0ZWFkIG9mIHJlcGVhdGVkbHkgY3JlYXRpbmcgbmV3IGluc3RhbmNlcy4KIAogCi0uLiBjbGFzczo6IFRleHRUZXN0UnVubmVyKHN0cmVhbT1zeXMuc3RkZXJyLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEpCisuLiBjbGFzczo6IFRleHRUZXN0UnVubmVyKHN0cmVhbT1Ob25lLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEsIHJ1bm5lcmNsYXNzPU5vbmUsIHdhcm5pbmdzPU5vbmUpCiAKLSAgIEEgYmFzaWMgdGVzdCBydW5uZXIgaW1wbGVtZW50YXRpb24gd2hpY2ggcHJpbnRzIHJlc3VsdHMgb24gc3RhbmRhcmQgZXJyb3IuICBJdAorICAgQSBiYXNpYyB0ZXN0IHJ1bm5lciBpbXBsZW1lbnRhdGlvbiB0aGF0IG91dHB1dHMgcmVzdWx0cyB0byBhIHN0cmVhbS4gSWYgKnN0cmVhbSoKKyAgIGlzIGBOb25lYCwgdGhlIGRlZmF1bHQsIGBzeXMuc3RkZXJyYCBpcyB1c2VkIGFzIHRoZSBvdXRwdXQgc3RyZWFtLiBUaGlzIGNsYXNzCiAgICBoYXMgYSBmZXcgY29uZmlndXJhYmxlIHBhcmFtZXRlcnMsIGJ1dCBpcyBlc3NlbnRpYWxseSB2ZXJ5IHNpbXBsZS4gIEdyYXBoaWNhbAogICAgYXBwbGljYXRpb25zIHdoaWNoIHJ1biB0ZXN0IHN1aXRlcyBzaG91bGQgcHJvdmlkZSBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb25zLgogCisgICBCeSBkZWZhdWx0IHRoaXMgcnVubmVyIHNob3dzIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AsCisgICA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCwgYW5kIDpleGM6YEltcG9ydFdhcm5pbmdgIGV2ZW4gaWYgdGhleSBhcmUKKyAgIDpyZWY6YGlnbm9yZWQgYnkgZGVmYXVsdCA8d2FybmluZy1pZ25vcmVkPmAuIERlcHJlY2F0aW9uIHdhcm5pbmdzIGNhdXNlZCBieQorICAgOnJlZjpgZGVwcmVjYXRlZCB1bml0dGVzdCBtZXRob2RzIDxkZXByZWNhdGVkLWFsaWFzZXM+YCBhcmUgYWxzbworICAgc3BlY2lhbC1jYXNlZCBhbmQsIHdoZW4gdGhlIHdhcm5pbmcgZmlsdGVycyBhcmUgYGAnZGVmYXVsdCdgYCBvciBgYCdhbHdheXMnYGAsCisgICB0aGV5IHdpbGwgYXBwZWFyIG9ubHkgb25jZSBwZXItbW9kdWxlLCBpbiBvcmRlciB0byBhdm9pZCB0b28gbWFueSB3YXJuaW5nCisgICBtZXNzYWdlcy4gIFRoaXMgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIDpvcHRpb246YC1XZGAgb3IKKyAgIDpvcHRpb246YC1XYWAgb3B0aW9ucyBhbmQgbGVhdmluZyAqd2FybmluZ3MqIHRvIGBgTm9uZWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlIGBgd2FybmluZ3NgYCBhcmd1bWVudC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFRoZSBkZWZhdWx0IHN0cmVhbSBpcyBzZXQgdG8gYHN5cy5zdGRlcnJgIGF0IGluc3RhbnRpYXRpb24gdGltZSByYXRoZXIKKyAgICAgIHRoYW4gaW1wb3J0IHRpbWUuCisKICAgIC4uIG1ldGhvZDo6IF9tYWtlUmVzdWx0KCkKIAogICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgYGBUZXN0UmVzdWx0YGAgdXNlZCBieSA6bWV0aDpgcnVuYC4KICAgICAgIEl0IGlzIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBpbgogICAgICAgc3ViY2xhc3NlcyB0byBwcm92aWRlIGEgY3VzdG9tIGBgVGVzdFJlc3VsdGBgLgogCisgICAgICBgYF9tYWtlUmVzdWx0KClgYCBpbnN0YW50aWF0ZXMgdGhlIGNsYXNzIG9yIGNhbGxhYmxlIHBhc3NlZCBpbiB0aGUKKyAgICAgIGBgVGV4dFRlc3RSdW5uZXJgYCBjb25zdHJ1Y3RvciBhcyB0aGUgYGByZXN1bHRjbGFzc2BgIGFyZ3VtZW50LiBJdAorICAgICAgZGVmYXVsdHMgdG8gOmNsYXNzOmBUZXh0VGVzdFJlc3VsdGAgaWYgbm8gYGByZXN1bHRjbGFzc2BgIGlzIHByb3ZpZGVkLgorICAgICAgVGhlIHJlc3VsdCBjbGFzcyBpcyBpbnN0YW50aWF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo6CiAKLS4uIGZ1bmN0aW9uOjogbWFpbihtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLCB0ZXN0UnVubmVyPVRleHRUZXN0UnVubmVyLCB0ZXN0TG9hZGVyPXVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLCBleGl0PVRydWUpCisgICAgICAgIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkKKworCisuLiBmdW5jdGlvbjo6IG1haW4obW9kdWxlPSdfX21haW5fXycsIGRlZmF1bHRUZXN0PU5vbmUsIGFyZ3Y9Tm9uZSwgdGVzdFJ1bm5lcj1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj11bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlciwgZXhpdD1UcnVlLCB2ZXJib3NpdHk9MSwgXAorICAgICAgICAgICAgICAgICAgIGZhaWxmYXN0PU5vbmUsIGNhdGNoYnJlYWs9Tm9uZSwgYnVmZmVyPU5vbmUsIHdhcm5pbmdzPU5vbmUpCiAKICAgIEEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseSBmb3IgbWFraW5nCiAgICB0ZXN0IG1vZHVsZXMgY29udmVuaWVudGx5IGV4ZWN1dGFibGUuICBUaGUgc2ltcGxlc3QgdXNlIGZvciB0aGlzIGZ1bmN0aW9uIGlzIHRvCkBAIC0xNTE0LDYgKzE5MzIsMTEgQEAKICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgdW5pdHRlc3QubWFpbigpCiAKKyAgIFlvdSBjYW4gcnVuIHRlc3RzIHdpdGggbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbiBieSBwYXNzaW5nIGluIHRoZSB2ZXJib3NpdHkKKyAgIGFyZ3VtZW50OjoKKworICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQogCiAgICBUaGUgKnRlc3RSdW5uZXIqIGFyZ3VtZW50IGNhbiBlaXRoZXIgYmUgYSB0ZXN0IHJ1bm5lciBjbGFzcyBvciBhbiBhbHJlYWR5CiAgICBjcmVhdGVkIGluc3RhbmNlIG9mIGl0LiBCeSBkZWZhdWx0IGBgbWFpbmBgIGNhbGxzIDpmdW5jOmBzeXMuZXhpdGAgd2l0aApAQCAtMTUyNiw4ICsxOTQ5LDIyOCBAQAogICAgICAgPj4+IGZyb20gdW5pdHRlc3QgaW1wb3J0IG1haW4KICAgICAgID4+PiBtYWluKG1vZHVsZT0ndGVzdF9tb2R1bGUnLCBleGl0PUZhbHNlKQogCisgICBUaGUgYGBmYWlsZmFzdGBgLCBgYGNhdGNoYnJlYWtgYCBhbmQgYGBidWZmZXJgYCBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUKKyAgIGVmZmVjdCBhcyB0aGUgc2FtZS1uYW1lIGBjb21tYW5kLWxpbmUgb3B0aW9uc2BfLgorCisgICBUaGUgKndhcm5pbmcqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgOnJlZjpgd2FybmluZyBmaWx0ZXIgPHdhcm5pbmctZmlsdGVyPmAKKyAgIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hpbGUgcnVubmluZyB0aGUgdGVzdHMuICBJZiBpdCdzIG5vdCBzcGVjaWZpZWQsIGl0IHdpbGwKKyAgIHJlbWFpbiBgYE5vbmVgYCBpZiBhIDpvcHRpb246YC1XYCBvcHRpb24gaXMgcGFzc2VkIHRvIDpwcm9ncmFtOmBweXRob25gLAorICAgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgc2V0IHRvIGBgJ2RlZmF1bHQnYGAuCisKICAgIENhbGxpbmcgYGBtYWluYGAgYWN0dWFsbHkgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYGBUZXN0UHJvZ3JhbWBgIGNsYXNzLgogICAgVGhpcyBzdG9yZXMgdGhlIHJlc3VsdCBvZiB0aGUgdGVzdHMgcnVuIGFzIHRoZSBgYHJlc3VsdGBgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFRoZSBgYGV4aXRgYCBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlIGBgdmVyYm9zaXR5YGAsIGBgZmFpbGZhc3RgYCwgYGBjYXRjaGJyZWFrYGAsIGBgYnVmZmVyYGAKKyAgICAgIGFuZCBgYHdhcm5pbmdzYGAgcGFyYW1ldGVycyB3ZXJlIGFkZGVkLgorCisKK2xvYWRfdGVzdHMgUHJvdG9jb2wKKyMjIyMjIyMjIyMjIyMjIyMjIyMKKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKK01vZHVsZXMgb3IgcGFja2FnZXMgY2FuIGN1c3RvbWl6ZSBob3cgdGVzdHMgYXJlIGxvYWRlZCBmcm9tIHRoZW0gZHVyaW5nIG5vcm1hbAordGVzdCBydW5zIG9yIHRlc3QgZGlzY292ZXJ5IGJ5IGltcGxlbWVudGluZyBhIGZ1bmN0aW9uIGNhbGxlZCBgYGxvYWRfdGVzdHNgYC4KKworSWYgYSB0ZXN0IG1vZHVsZSBkZWZpbmVzIGBgbG9hZF90ZXN0c2BgIGl0IHdpbGwgYmUgY2FsbGVkIGJ5Cis6bWV0aDpgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlYCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjoKKworICAgIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgTm9uZSkKKworSXQgc2hvdWxkIHJldHVybiBhIDpjbGFzczpgVGVzdFN1aXRlYC4KKworKmxvYWRlciogaXMgdGhlIGluc3RhbmNlIG9mIDpjbGFzczpgVGVzdExvYWRlcmAgZG9pbmcgdGhlIGxvYWRpbmcuCisqc3RhbmRhcmRfdGVzdHMqIGFyZSB0aGUgdGVzdHMgdGhhdCB3b3VsZCBiZSBsb2FkZWQgYnkgZGVmYXVsdCBmcm9tIHRoZQorbW9kdWxlLiBJdCBpcyBjb21tb24gZm9yIHRlc3QgbW9kdWxlcyB0byBvbmx5IHdhbnQgdG8gYWRkIG9yIHJlbW92ZSB0ZXN0cworZnJvbSB0aGUgc3RhbmRhcmQgc2V0IG9mIHRlc3RzLgorVGhlIHRoaXJkIGFyZ3VtZW50IGlzIHVzZWQgd2hlbiBsb2FkaW5nIHBhY2thZ2VzIGFzIHBhcnQgb2YgdGVzdCBkaXNjb3ZlcnkuCisKK0EgdHlwaWNhbCBgYGxvYWRfdGVzdHNgYCBmdW5jdGlvbiB0aGF0IGxvYWRzIHRlc3RzIGZyb20gYSBzcGVjaWZpYyBzZXQgb2YKKzpjbGFzczpgVGVzdENhc2VgIGNsYXNzZXMgbWF5IGxvb2sgbGlrZTo6CisKKyAgICB0ZXN0X2Nhc2VzID0gKFRlc3RDYXNlMSwgVGVzdENhc2UyLCBUZXN0Q2FzZTMpCisKKyAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgc3VpdGUgPSBUZXN0U3VpdGUoKQorICAgICAgICBmb3IgdGVzdF9jbGFzcyBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgdGVzdHMgPSBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKHRlc3RfY2xhc3MpCisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyh0ZXN0cykKKyAgICAgICAgcmV0dXJuIHN1aXRlCisKK0lmIGRpc2NvdmVyeSBpcyBzdGFydGVkLCBlaXRoZXIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIG9yIGJ5IGNhbGxpbmcKKzptZXRoOmBUZXN0TG9hZGVyLmRpc2NvdmVyYCwgd2l0aCBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGEgcGFja2FnZQorbmFtZSB0aGVuIHRoZSBwYWNrYWdlIDpmaWxlOmBfX2luaXRfXy5weWAgd2lsbCBiZSBjaGVja2VkIGZvciBgYGxvYWRfdGVzdHNgYC4KKworLi4gbm90ZTo6CisKKyAgIFRoZSBkZWZhdWx0IHBhdHRlcm4gaXMgJ3Rlc3QqLnB5Jy4gVGhpcyBtYXRjaGVzIGFsbCBQeXRob24gZmlsZXMKKyAgIHRoYXQgc3RhcnQgd2l0aCAndGVzdCcgYnV0ICp3b24ndCogbWF0Y2ggYW55IHRlc3QgZGlyZWN0b3JpZXMuCisKKyAgIEEgcGF0dGVybiBsaWtlICd0ZXN0Kicgd2lsbCBtYXRjaCB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMKKyAgIG1vZHVsZXMuCisKK0lmIHRoZSBwYWNrYWdlIDpmaWxlOmBfX2luaXRfXy5weWAgZGVmaW5lcyBgYGxvYWRfdGVzdHNgYCB0aGVuIGl0IHdpbGwgYmUKK2NhbGxlZCBhbmQgZGlzY292ZXJ5IG5vdCBjb250aW51ZWQgaW50byB0aGUgcGFja2FnZS4gYGBsb2FkX3Rlc3RzYGAKK2lzIGNhbGxlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOjoKKworICAgIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybikKKworVGhpcyBzaG91bGQgcmV0dXJuIGEgOmNsYXNzOmBUZXN0U3VpdGVgIHJlcHJlc2VudGluZyBhbGwgdGhlIHRlc3RzCitmcm9tIHRoZSBwYWNrYWdlLiAoYGBzdGFuZGFyZF90ZXN0c2BgIHdpbGwgb25seSBjb250YWluIHRlc3RzCitjb2xsZWN0ZWQgZnJvbSA6ZmlsZTpgX19pbml0X18ucHlgLikKKworQmVjYXVzZSB0aGUgcGF0dGVybiBpcyBwYXNzZWQgaW50byBgYGxvYWRfdGVzdHNgYCB0aGUgcGFja2FnZSBpcyBmcmVlIHRvCitjb250aW51ZSAoYW5kIHBvdGVudGlhbGx5IG1vZGlmeSkgdGVzdCBkaXNjb3ZlcnkuIEEgJ2RvIG5vdGhpbmcnCitgYGxvYWRfdGVzdHNgYCBmdW5jdGlvbiBmb3IgYSB0ZXN0IHBhY2thZ2Ugd291bGQgbG9vayBsaWtlOjoKKworICAgIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgorICAgICAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgICAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybikKKyAgICAgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICAgICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCisKKworQ2xhc3MgYW5kIE1vZHVsZSBGaXh0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDbGFzcyBhbmQgbW9kdWxlIGxldmVsIGZpeHR1cmVzIGFyZSBpbXBsZW1lbnRlZCBpbiA6Y2xhc3M6YFRlc3RTdWl0ZWAuIFdoZW4KK3RoZSB0ZXN0IHN1aXRlIGVuY291bnRlcnMgYSB0ZXN0IGZyb20gYSBuZXcgY2xhc3MgdGhlbiA6bWV0aDpgdGVhckRvd25DbGFzc2AKK2Zyb20gdGhlIHByZXZpb3VzIGNsYXNzIChpZiB0aGVyZSBpcyBvbmUpIGlzIGNhbGxlZCwgZm9sbG93ZWQgYnkKKzptZXRoOmBzZXRVcENsYXNzYCBmcm9tIHRoZSBuZXcgY2xhc3MuCisKK1NpbWlsYXJseSBpZiBhIHRlc3QgaXMgZnJvbSBhIGRpZmZlcmVudCBtb2R1bGUgZnJvbSB0aGUgcHJldmlvdXMgdGVzdCB0aGVuCitgYHRlYXJEb3duTW9kdWxlYGAgZnJvbSB0aGUgcHJldmlvdXMgbW9kdWxlIGlzIHJ1biwgZm9sbG93ZWQgYnkKK2Bgc2V0VXBNb2R1bGVgYCBmcm9tIHRoZSBuZXcgbW9kdWxlLgorCitBZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgcnVuIHRoZSBmaW5hbCBgYHRlYXJEb3duQ2xhc3NgYCBhbmQKK2BgdGVhckRvd25Nb2R1bGVgYCBhcmUgcnVuLgorCitOb3RlIHRoYXQgc2hhcmVkIGZpeHR1cmVzIGRvIG5vdCBwbGF5IHdlbGwgd2l0aCBbcG90ZW50aWFsXSBmZWF0dXJlcyBsaWtlIHRlc3QKK3BhcmFsbGVsaXphdGlvbiBhbmQgdGhleSBicmVhayB0ZXN0IGlzb2xhdGlvbi4gVGhleSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhcmUuCisKK1RoZSBkZWZhdWx0IG9yZGVyaW5nIG9mIHRlc3RzIGNyZWF0ZWQgYnkgdGhlIHVuaXR0ZXN0IHRlc3QgbG9hZGVycyBpcyB0byBncm91cAorYWxsIHRlc3RzIGZyb20gdGhlIHNhbWUgbW9kdWxlcyBhbmQgY2xhc3NlcyB0b2dldGhlci4gVGhpcyB3aWxsIGxlYWQgdG8KK2Bgc2V0VXBDbGFzc2BgIC8gYGBzZXRVcE1vZHVsZWBgIChldGMpIGJlaW5nIGNhbGxlZCBleGFjdGx5IG9uY2UgcGVyIGNsYXNzIGFuZAorbW9kdWxlLiBJZiB5b3UgcmFuZG9taXplIHRoZSBvcmRlciwgc28gdGhhdCB0ZXN0cyBmcm9tIGRpZmZlcmVudCBtb2R1bGVzIGFuZAorY2xhc3NlcyBhcmUgYWRqYWNlbnQgdG8gZWFjaCBvdGhlciwgdGhlbiB0aGVzZSBzaGFyZWQgZml4dHVyZSBmdW5jdGlvbnMgbWF5IGJlCitjYWxsZWQgbXVsdGlwbGUgdGltZXMgaW4gYSBzaW5nbGUgdGVzdCBydW4uCisKK1NoYXJlZCBmaXh0dXJlcyBhcmUgbm90IGludGVuZGVkIHRvIHdvcmsgd2l0aCBzdWl0ZXMgd2l0aCBub24tc3RhbmRhcmQKK29yZGVyaW5nLiBBIGBgQmFzZVRlc3RTdWl0ZWBgIHN0aWxsIGV4aXN0cyBmb3IgZnJhbWV3b3JrcyB0aGF0IGRvbid0IHdhbnQgdG8KK3N1cHBvcnQgc2hhcmVkIGZpeHR1cmVzLgorCitJZiB0aGVyZSBhcmUgYW55IGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBvbmUgb2YgdGhlIHNoYXJlZCBmaXh0dXJlIGZ1bmN0aW9ucwordGhlIHRlc3QgaXMgcmVwb3J0ZWQgYXMgYW4gZXJyb3IuIEJlY2F1c2UgdGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyB0ZXN0CitpbnN0YW5jZSBhbiBgYF9FcnJvckhvbGRlcmBgIG9iamVjdCAodGhhdCBoYXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIGEKKzpjbGFzczpgVGVzdENhc2VgKSBpcyBjcmVhdGVkIHRvIHJlcHJlc2VudCB0aGUgZXJyb3IuIElmIHlvdSBhcmUganVzdCB1c2luZwordGhlIHN0YW5kYXJkIHVuaXR0ZXN0IHRlc3QgcnVubmVyIHRoZW4gdGhpcyBkZXRhaWwgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpZiB5b3UKK2FyZSBhIGZyYW1ld29yayBhdXRob3IgaXQgbWF5IGJlIHJlbGV2YW50LgorCisKK3NldFVwQ2xhc3MgYW5kIHRlYXJEb3duQ2xhc3MKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlc2UgbXVzdCBiZSBpbXBsZW1lbnRlZCBhcyBjbGFzcyBtZXRob2RzOjoKKworICAgIGltcG9ydCB1bml0dGVzdAorCisgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgY2xzLl9jb25uZWN0aW9uID0gY3JlYXRlRXhwZW5zaXZlQ29ubmVjdGlvbk9iamVjdCgpCisKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICBjbHMuX2Nvbm5lY3Rpb24uZGVzdHJveSgpCisKK0lmIHlvdSB3YW50IHRoZSBgYHNldFVwQ2xhc3NgYCBhbmQgYGB0ZWFyRG93bkNsYXNzYGAgb24gYmFzZSBjbGFzc2VzIGNhbGxlZAordGhlbiB5b3UgbXVzdCBjYWxsIHVwIHRvIHRoZW0geW91cnNlbGYuIFRoZSBpbXBsZW1lbnRhdGlvbnMgaW4KKzpjbGFzczpgVGVzdENhc2VgIGFyZSBlbXB0eS4KKworSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBkdXJpbmcgYSBgYHNldFVwQ2xhc3NgYCB0aGVuIHRoZSB0ZXN0cyBpbiB0aGUgY2xhc3MKK2FyZSBub3QgcnVuIGFuZCB0aGUgYGB0ZWFyRG93bkNsYXNzYGAgaXMgbm90IHJ1bi4gU2tpcHBlZCBjbGFzc2VzIHdpbGwgbm90CitoYXZlIGBgc2V0VXBDbGFzc2BgIG9yIGBgdGVhckRvd25DbGFzc2BgIHJ1bi4gSWYgdGhlIGV4Y2VwdGlvbiBpcyBhCitgYFNraXBUZXN0YGAgZXhjZXB0aW9uIHRoZW4gdGhlIGNsYXNzIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2tpcHBlZAoraW5zdGVhZCBvZiBhcyBhbiBlcnJvci4KKworCitzZXRVcE1vZHVsZSBhbmQgdGVhckRvd25Nb2R1bGUKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitUaGVzZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYXMgZnVuY3Rpb25zOjoKKworICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICBjcmVhdGVDb25uZWN0aW9uKCkKKworICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICBjbG9zZUNvbm5lY3Rpb24oKQorCitJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgYGBzZXRVcE1vZHVsZWBgIHRoZW4gbm9uZSBvZiB0aGUgdGVzdHMgaW4gdGhlCittb2R1bGUgd2lsbCBiZSBydW4gYW5kIHRoZSBgYHRlYXJEb3duTW9kdWxlYGAgd2lsbCBub3QgYmUgcnVuLiBJZiB0aGUgZXhjZXB0aW9uIGlzIGEKK2BgU2tpcFRlc3RgYCBleGNlcHRpb24gdGhlbiB0aGUgbW9kdWxlIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaGF2aW5nIGJlZW4gc2tpcHBlZAoraW5zdGVhZCBvZiBhcyBhbiBlcnJvci4KKworCitTaWduYWwgSGFuZGxpbmcKKy0tLS0tLS0tLS0tLS0tLQorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworVGhlIDpvcHRpb246YC1jLy0tY2F0Y2ggPHVuaXR0ZXN0IC1jPmAgY29tbWFuZC1saW5lIG9wdGlvbiB0byB1bml0dGVzdCwKK2Fsb25nIHdpdGggdGhlIGBgY2F0Y2hicmVha2BgIHBhcmFtZXRlciB0byA6ZnVuYzpgdW5pdHRlc3QubWFpbigpYCwgcHJvdmlkZQorbW9yZSBmcmllbmRseSBoYW5kbGluZyBvZiBjb250cm9sLUMgZHVyaW5nIGEgdGVzdCBydW4uIFdpdGggY2F0Y2ggYnJlYWsKK2JlaGF2aW9yIGVuYWJsZWQgY29udHJvbC1DIHdpbGwgYWxsb3cgdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlc3QgdG8gY29tcGxldGUsCithbmQgdGhlIHRlc3QgcnVuIHdpbGwgdGhlbiBlbmQgYW5kIHJlcG9ydCBhbGwgdGhlIHJlc3VsdHMgc28gZmFyLiBBIHNlY29uZAorY29udHJvbC1jIHdpbGwgcmFpc2UgYSA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgaW4gdGhlIHVzdWFsIHdheS4KKworVGhlIGNvbnRyb2wtYyBoYW5kbGluZyBzaWduYWwgaGFuZGxlciBhdHRlbXB0cyB0byByZW1haW4gY29tcGF0aWJsZSB3aXRoIGNvZGUgb3IKK3Rlc3RzIHRoYXQgaW5zdGFsbCB0aGVpciBvd24gOmNvbnN0OmBzaWduYWwuU0lHSU5UYCBoYW5kbGVyLiBJZiB0aGUgYGB1bml0dGVzdGBgCitoYW5kbGVyIGlzIGNhbGxlZCBidXQgKmlzbid0KiB0aGUgaW5zdGFsbGVkIDpjb25zdDpgc2lnbmFsLlNJR0lOVGAgaGFuZGxlciwKK2kuZS4gaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkgdGhlIHN5c3RlbSB1bmRlciB0ZXN0IGFuZCBkZWxlZ2F0ZWQgdG8sIHRoZW4gaXQKK2NhbGxzIHRoZSBkZWZhdWx0IGhhbmRsZXIuIFRoaXMgd2lsbCBub3JtYWxseSBiZSB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgYnkgY29kZQordGhhdCByZXBsYWNlcyBhbiBpbnN0YWxsZWQgaGFuZGxlciBhbmQgZGVsZWdhdGVzIHRvIGl0LiBGb3IgaW5kaXZpZHVhbCB0ZXN0cwordGhhdCBuZWVkIGBgdW5pdHRlc3RgYCBjb250cm9sLWMgaGFuZGxpbmcgZGlzYWJsZWQgdGhlIDpmdW5jOmByZW1vdmVIYW5kbGVyYAorZGVjb3JhdG9yIGNhbiBiZSB1c2VkLgorCitUaGVyZSBhcmUgYSBmZXcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGZyYW1ld29yayBhdXRob3JzIHRvIGVuYWJsZSBjb250cm9sLWMKK2hhbmRsaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRlc3QgZnJhbWV3b3Jrcy4KKworLi4gZnVuY3Rpb246OiBpbnN0YWxsSGFuZGxlcigpCisKKyAgIEluc3RhbGwgdGhlIGNvbnRyb2wtYyBoYW5kbGVyLiBXaGVuIGEgOmNvbnN0OmBzaWduYWwuU0lHSU5UYCBpcyByZWNlaXZlZAorICAgKHVzdWFsbHkgaW4gcmVzcG9uc2UgdG8gdGhlIHVzZXIgcHJlc3NpbmcgY29udHJvbC1jKSBhbGwgcmVnaXN0ZXJlZCByZXN1bHRzCisgICBoYXZlIDptZXRoOmB+VGVzdFJlc3VsdC5zdG9wYCBjYWxsZWQuCisKKworLi4gZnVuY3Rpb246OiByZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgIFJlZ2lzdGVyIGEgOmNsYXNzOmBUZXN0UmVzdWx0YCBvYmplY3QgZm9yIGNvbnRyb2wtYyBoYW5kbGluZy4gUmVnaXN0ZXJpbmcgYQorICAgcmVzdWx0IHN0b3JlcyBhIHdlYWsgcmVmZXJlbmNlIHRvIGl0LCBzbyBpdCBkb2Vzbid0IHByZXZlbnQgdGhlIHJlc3VsdCBmcm9tCisgICBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZC4KKworICAgUmVnaXN0ZXJpbmcgYSA6Y2xhc3M6YFRlc3RSZXN1bHRgIG9iamVjdCBoYXMgbm8gc2lkZS1lZmZlY3RzIGlmIGNvbnRyb2wtYworICAgaGFuZGxpbmcgaXMgbm90IGVuYWJsZWQsIHNvIHRlc3QgZnJhbWV3b3JrcyBjYW4gdW5jb25kaXRpb25hbGx5IHJlZ2lzdGVyCisgICBhbGwgcmVzdWx0cyB0aGV5IGNyZWF0ZSBpbmRlcGVuZGVudGx5IG9mIHdoZXRoZXIgb3Igbm90IGhhbmRsaW5nIGlzIGVuYWJsZWQuCisKKworLi4gZnVuY3Rpb246OiByZW1vdmVSZXN1bHQocmVzdWx0KQorCisgICBSZW1vdmUgYSByZWdpc3RlcmVkIHJlc3VsdC4gT25jZSBhIHJlc3VsdCBoYXMgYmVlbiByZW1vdmVkIHRoZW4KKyAgIDptZXRoOmB+VGVzdFJlc3VsdC5zdG9wYCB3aWxsIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gdGhhdCByZXN1bHQgb2JqZWN0IGluCisgICByZXNwb25zZSB0byBhIGNvbnRyb2wtYy4KKworCisuLiBmdW5jdGlvbjo6IHJlbW92ZUhhbmRsZXIoZnVuY3Rpb249Tm9uZSkKKworICAgV2hlbiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBjb250cm9sLWMgaGFuZGxlcgorICAgaWYgaXQgaGFzIGJlZW4gaW5zdGFsbGVkLiBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIGJlIHVzZWQgYXMgYSB0ZXN0IGRlY29yYXRvcgorICAgdG8gdGVtcG9yYXJpbHkgcmVtb3ZlIHRoZSBoYW5kbGVyIHdoaWxzdCB0aGUgdGVzdCBpcyBiZWluZyBleGVjdXRlZDo6CisKKyAgICAgIEB1bml0dGVzdC5yZW1vdmVIYW5kbGVyCisgICAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmcoc2VsZik6CisgICAgICAgICAgLi4uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91cmxsaWIucGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdAppbmRleCAwZWQyN2JhNC4uYTZkNzI2NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucGFyc2UucnN0CkBAIC0yNCw3ICsyNCwxNSBAQAogYGByc3luY2BgLCBgYHJ0c3BgYCwgYGBydHNwdWBgLCBgYHNmdHBgYCwgYGBzaHR0cGBgLCBgYHNpcGBgLCBgYHNpcHNgYCwKIGBgc25ld3NgYCwgYGBzdm5gYCwgYGBzdm4rc3NoYGAsIGBgdGVsbmV0YGAsIGBgd2Fpc2BgLgogCi1UaGUgOm1vZDpgdXJsbGliLnBhcnNlYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKK1RoZSA6bW9kOmB1cmxsaWIucGFyc2VgIG1vZHVsZSBkZWZpbmVzIGZ1bmN0aW9ucyB0aGF0IGZhbGwgaW50byB0d28gYnJvYWQKK2NhdGVnb3JpZXM6IFVSTCBwYXJzaW5nIGFuZCBVUkwgcXVvdGluZy4gVGhlc2UgYXJlIGNvdmVyZWQgaW4gZGV0YWlsIGluCit0aGUgZm9sbG93aW5nIHNlY3Rpb25zLgorCitVUkwgUGFyc2luZworLS0tLS0tLS0tLS0KKworVGhlIFVSTCBwYXJzaW5nIGZ1bmN0aW9ucyBmb2N1cyBvbiBzcGxpdHRpbmcgYSBVUkwgc3RyaW5nIGludG8gaXRzIGNvbXBvbmVudHMsCitvciBvbiBjb21iaW5pbmcgVVJMIGNvbXBvbmVudHMgaW50byBhIFVSTCBzdHJpbmcuCiAKIC4uIGZ1bmN0aW9uOjogdXJscGFyc2UodXJsc3RyaW5nLCBzY2hlbWU9JycsIGFsbG93X2ZyYWdtZW50cz1UcnVlKQogCkBAIC0xMDQsOCArMTEyLDExIEBACiAgICBTZWUgc2VjdGlvbiA6cmVmOmB1cmxwYXJzZS1yZXN1bHQtb2JqZWN0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgcmVzdWx0CiAgICBvYmplY3QuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGRlZCBJUHY2IFVSTCBwYXJzaW5nIGNhcGFiaWxpdGllcy4KIAotLi4gZnVuY3Rpb246OiBwYXJzZV9xcyhxcywga2VlcF9ibGFua192YWx1ZXM9RmFsc2UsIHN0cmljdF9wYXJzaW5nPUZhbHNlKQorCisuLiBmdW5jdGlvbjo6IHBhcnNlX3FzKHFzLCBrZWVwX2JsYW5rX3ZhbHVlcz1GYWxzZSwgc3RyaWN0X3BhcnNpbmc9RmFsc2UsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpCiAKICAgIFBhcnNlIGEgcXVlcnkgc3RyaW5nIGdpdmVuIGFzIGEgc3RyaW5nIGFyZ3VtZW50IChkYXRhIG9mIHR5cGUKICAgIDptaW1ldHlwZTpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCkuICBEYXRhIGFyZSByZXR1cm5lZCBhcyBhCkBAIC0xMjIsMTEgKzEzMywxOSBAQAogICAgcGFyc2luZyBlcnJvcnMuICBJZiBmYWxzZSAodGhlIGRlZmF1bHQpLCBlcnJvcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuICBJZiB0cnVlLAogICAgZXJyb3JzIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgZXhjZXB0aW9uLgogCisgICBUaGUgb3B0aW9uYWwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogcGFyYW1ldGVycyBzcGVjaWZ5IGhvdyB0byBkZWNvZGUKKyAgIHBlcmNlbnQtZW5jb2RlZCBzZXF1ZW5jZXMgaW50byBVbmljb2RlIGNoYXJhY3RlcnMsIGFzIGFjY2VwdGVkIGJ5IHRoZQorICAgOm1ldGg6YGJ5dGVzLmRlY29kZWAgbWV0aG9kLgorCiAgICBVc2UgdGhlIDpmdW5jOmB1cmxsaWIucGFyc2UudXJsZW5jb2RlYCBmdW5jdGlvbiB0byBjb252ZXJ0IHN1Y2gKICAgIGRpY3Rpb25hcmllcyBpbnRvIHF1ZXJ5IHN0cmluZ3MuCiAKIAotLi4gZnVuY3Rpb246OiBwYXJzZV9xc2wocXMsIGtlZXBfYmxhbmtfdmFsdWVzPUZhbHNlLCBzdHJpY3RfcGFyc2luZz1GYWxzZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBZGQgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogcGFyYW1ldGVycy4KKworCisuLiBmdW5jdGlvbjo6IHBhcnNlX3FzbChxcywga2VlcF9ibGFua192YWx1ZXM9RmFsc2UsIHN0cmljdF9wYXJzaW5nPUZhbHNlLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3JlcGxhY2UnKQogCiAgICBQYXJzZSBhIHF1ZXJ5IHN0cmluZyBnaXZlbiBhcyBhIHN0cmluZyBhcmd1bWVudCAoZGF0YSBvZiB0eXBlCiAgICA6bWltZXR5cGU6YGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGApLiAgRGF0YSBhcmUgcmV0dXJuZWQgYXMgYSBsaXN0IG9mCkBAIC0xNDIsOSArMTYxLDE2IEBACiAgICBwYXJzaW5nIGVycm9ycy4gIElmIGZhbHNlICh0aGUgZGVmYXVsdCksIGVycm9ycyBhcmUgc2lsZW50bHkgaWdub3JlZC4gIElmIHRydWUsCiAgICBlcnJvcnMgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24uCiAKKyAgIFRoZSBvcHRpb25hbCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiBwYXJhbWV0ZXJzIHNwZWNpZnkgaG93IHRvIGRlY29kZQorICAgcGVyY2VudC1lbmNvZGVkIHNlcXVlbmNlcyBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycywgYXMgYWNjZXB0ZWQgYnkgdGhlCisgICA6bWV0aDpgYnl0ZXMuZGVjb2RlYCBtZXRob2QuCisKICAgIFVzZSB0aGUgOmZ1bmM6YHVybGxpYi5wYXJzZS51cmxlbmNvZGVgIGZ1bmN0aW9uIHRvIGNvbnZlcnQgc3VjaCBsaXN0cyBvZiBwYWlycyBpbnRvCiAgICBxdWVyeSBzdHJpbmdzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkICplbmNvZGluZyogYW5kICplcnJvcnMqIHBhcmFtZXRlcnMuCisKIAogLi4gZnVuY3Rpb246OiB1cmx1bnBhcnNlKHBhcnRzKQogCkBAIC0yMzksNiArMjY1LDE2MiBAQAogICAgc3RyaW5nLiAgSWYgdGhlcmUgaXMgbm8gZnJhZ21lbnQgaWRlbnRpZmllciBpbiAqdXJsKiwgcmV0dXJuICp1cmwqIHVubW9kaWZpZWQKICAgIGFuZCBhbiBlbXB0eSBzdHJpbmcuCiAKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YHR1cGxlYC4gIFRoaXMKKyAgIGNsYXNzIGhhcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcmVhZC1vbmx5IGNvbnZlbmllbmNlIGF0dHJpYnV0ZXM6CisKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEF0dHJpYnV0ZSAgICAgICAgfCBJbmRleCB8IFZhbHVlICAgICAgICAgICAgICAgICAgIHwgVmFsdWUgaWYgbm90IHByZXNlbnQgfAorICAgKz09PT09PT09PT09PT09PT09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PSsKKyAgIHwgOmF0dHI6YHVybGAgICAgICB8IDAgICAgIHwgVVJMIHdpdGggbm8gZnJhZ21lbnQgICAgfCBlbXB0eSBzdHJpbmcgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6YXR0cjpgZnJhZ21lbnRgIHwgMSAgICAgfCBGcmFnbWVudCBpZGVudGlmaWVyICAgICB8IGVtcHR5IHN0cmluZyAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFNlZSBzZWN0aW9uIDpyZWY6YHVybHBhcnNlLXJlc3VsdC1vYmplY3RgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSByZXN1bHQKKyAgIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgICAgIFJlc3VsdCBpcyBhIHN0cnVjdHVyZWQgb2JqZWN0IHJhdGhlciB0aGFuIGEgc2ltcGxlIDItdHVwbGUuCisKKy4uIF9wYXJzaW5nLWFzY2lpLWVuY29kZWQtYnl0ZXM6CisKK1BhcnNpbmcgQVNDSUkgRW5jb2RlZCBCeXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBVUkwgcGFyc2luZyBmdW5jdGlvbnMgd2VyZSBvcmlnaW5hbGx5IGRlc2lnbmVkIHRvIG9wZXJhdGUgb24gY2hhcmFjdGVyCitzdHJpbmdzIG9ubHkuIEluIHByYWN0aWNlLCBpdCBpcyB1c2VmdWwgdG8gYmUgYWJsZSB0byBtYW5pcHVsYXRlIHByb3Blcmx5CitxdW90ZWQgYW5kIGVuY29kZWQgVVJMcyBhcyBzZXF1ZW5jZXMgb2YgQVNDSUkgYnl0ZXMuIEFjY29yZGluZ2x5LCB0aGUKK1VSTCBwYXJzaW5nIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhbGwgb3BlcmF0ZSBvbiA6Y2xhc3M6YGJ5dGVzYCBhbmQKKzpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzIGluIGFkZGl0aW9uIHRvIDpjbGFzczpgc3RyYCBvYmplY3RzLgorCitJZiA6Y2xhc3M6YHN0cmAgZGF0YSBpcyBwYXNzZWQgaW4sIHRoZSByZXN1bHQgd2lsbCBhbHNvIGNvbnRhaW4gb25seQorOmNsYXNzOmBzdHJgIGRhdGEuIElmIDpjbGFzczpgYnl0ZXNgIG9yIDpjbGFzczpgYnl0ZWFycmF5YCBkYXRhIGlzCitwYXNzZWQgaW4sIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG9ubHkgOmNsYXNzOmBieXRlc2AgZGF0YS4KKworQXR0ZW1wdGluZyB0byBtaXggOmNsYXNzOmBzdHJgIGRhdGEgd2l0aCA6Y2xhc3M6YGJ5dGVzYCBvcgorOmNsYXNzOmBieXRlYXJyYXlgIGluIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwgd2lsbCByZXN1bHQgaW4gYQorOmV4YzpgVHlwZUVycm9yYCBiZWluZyByYWlzZWQsIHdoaWxlIGF0dGVtcHRpbmcgdG8gcGFzcyBpbiBub24tQVNDSUkKK2J5dGUgdmFsdWVzIHdpbGwgdHJpZ2dlciA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgLgorCitUbyBzdXBwb3J0IGVhc2llciBjb252ZXJzaW9uIG9mIHJlc3VsdCBvYmplY3RzIGJldHdlZW4gOmNsYXNzOmBzdHJgIGFuZAorOmNsYXNzOmBieXRlc2AsIGFsbCByZXR1cm4gdmFsdWVzIGZyb20gVVJMIHBhcnNpbmcgZnVuY3Rpb25zIHByb3ZpZGUKK2VpdGhlciBhbiA6bWV0aDpgZW5jb2RlYCBtZXRob2QgKHdoZW4gdGhlIHJlc3VsdCBjb250YWlucyA6Y2xhc3M6YHN0cmAKK2RhdGEpIG9yIGEgOm1ldGg6YGRlY29kZWAgbWV0aG9kICh3aGVuIHRoZSByZXN1bHQgY29udGFpbnMgOmNsYXNzOmBieXRlc2AKK2RhdGEpLiBUaGUgc2lnbmF0dXJlcyBvZiB0aGVzZSBtZXRob2RzIG1hdGNoIHRob3NlIG9mIHRoZSBjb3JyZXNwb25kaW5nCis6Y2xhc3M6YHN0cmAgYW5kIDpjbGFzczpgYnl0ZXNgIG1ldGhvZHMgKGV4Y2VwdCB0aGF0IHRoZSBkZWZhdWx0IGVuY29kaW5nCitpcyBgYCdhc2NpaSdgYCByYXRoZXIgdGhhbiBgYCd1dGYtOCdgYCkuIEVhY2ggcHJvZHVjZXMgYSB2YWx1ZSBvZiBhCitjb3JyZXNwb25kaW5nIHR5cGUgdGhhdCBjb250YWlucyBlaXRoZXIgOmNsYXNzOmBieXRlc2AgZGF0YSAoZm9yCis6bWV0aDpgZW5jb2RlYCBtZXRob2RzKSBvciA6Y2xhc3M6YHN0cmAgZGF0YSAoZm9yCis6bWV0aDpgZGVjb2RlYCBtZXRob2RzKS4KKworQXBwbGljYXRpb25zIHRoYXQgbmVlZCB0byBvcGVyYXRlIG9uIHBvdGVudGlhbGx5IGltcHJvcGVybHkgcXVvdGVkIFVSTHMKK3RoYXQgbWF5IGNvbnRhaW4gbm9uLUFTQ0lJIGRhdGEgd2lsbCBuZWVkIHRvIGRvIHRoZWlyIG93biBkZWNvZGluZyBmcm9tCitieXRlcyB0byBjaGFyYWN0ZXJzIGJlZm9yZSBpbnZva2luZyB0aGUgVVJMIHBhcnNpbmcgbWV0aG9kcy4KKworVGhlIGJlaGF2aW91ciBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgVVJMIHBhcnNpbmcKK2Z1bmN0aW9ucy4gVGhlIFVSTCBxdW90aW5nIGZ1bmN0aW9ucyB1c2UgdGhlaXIgb3duIHJ1bGVzIHdoZW4gcHJvZHVjaW5nCitvciBjb25zdW1pbmcgYnl0ZSBzZXF1ZW5jZXMgYXMgZGV0YWlsZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlCitpbmRpdmlkdWFsIFVSTCBxdW90aW5nIGZ1bmN0aW9ucy4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIFVSTCBwYXJzaW5nIGZ1bmN0aW9ucyBub3cgYWNjZXB0IEFTQ0lJIGVuY29kZWQgYnl0ZSBzZXF1ZW5jZXMKKworCisuLiBfdXJscGFyc2UtcmVzdWx0LW9iamVjdDoKKworU3RydWN0dXJlZCBQYXJzZSBSZXN1bHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHJlc3VsdCBvYmplY3RzIGZyb20gdGhlIDpmdW5jOmB1cmxwYXJzZWAsIDpmdW5jOmB1cmxzcGxpdGAgIGFuZAorOmZ1bmM6YHVybGRlZnJhZ2AgZnVuY3Rpb25zIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YHR1cGxlYCB0eXBlLgorVGhlc2Ugc3ViY2xhc3NlcyBhZGQgdGhlIGF0dHJpYnV0ZXMgbGlzdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgordGhvc2UgZnVuY3Rpb25zLCB0aGUgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHN1cHBvcnQgZGVzY3JpYmVkIGluIHRoZQorcHJldmlvdXMgc2VjdGlvbiwgYXMgd2VsbCBhcyBhbiBhZGRpdGlvbmFsIG1ldGhvZDoKKworLi4gbWV0aG9kOjogdXJsbGliLnBhcnNlLlNwbGl0UmVzdWx0LmdldHVybCgpCisKKyAgIFJldHVybiB0aGUgcmUtY29tYmluZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgVVJMIGFzIGEgc3RyaW5nLiBUaGlzIG1heQorICAgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVSTCBpbiB0aGF0IHRoZSBzY2hlbWUgbWF5IGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXIKKyAgIGNhc2UgYW5kIGVtcHR5IGNvbXBvbmVudHMgbWF5IGJlIGRyb3BwZWQuIFNwZWNpZmljYWxseSwgZW1wdHkgcGFyYW1ldGVycywKKyAgIHF1ZXJpZXMsIGFuZCBmcmFnbWVudCBpZGVudGlmaWVycyB3aWxsIGJlIHJlbW92ZWQuCisKKyAgIEZvciA6ZnVuYzpgdXJsZGVmcmFnYCByZXN1bHRzLCBvbmx5IGVtcHR5IGZyYWdtZW50IGlkZW50aWZpZXJzIHdpbGwgYmUgcmVtb3ZlZC4KKyAgIEZvciA6ZnVuYzpgdXJsc3BsaXRgIGFuZCA6ZnVuYzpgdXJscGFyc2VgIHJlc3VsdHMsIGFsbCBub3RlZCBjaGFuZ2VzIHdpbGwgYmUKKyAgIG1hZGUgdG8gdGhlIFVSTCByZXR1cm5lZCBieSB0aGlzIG1ldGhvZC4KKworICAgVGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZCByZW1haW5zIHVuY2hhbmdlZCBpZiBwYXNzZWQgYmFjayB0aHJvdWdoIHRoZSBvcmlnaW5hbAorICAgcGFyc2luZyBmdW5jdGlvbjoKKworICAgICAgPj4+IGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxzcGxpdAorICAgICAgPj4+IHVybCA9ICdIVFRQOi8vd3d3LlB5dGhvbi5vcmcvZG9jLyMnCisgICAgICA+Pj4gcjEgPSB1cmxzcGxpdCh1cmwpCisgICAgICA+Pj4gcjEuZ2V0dXJsKCkKKyAgICAgICdodHRwOi8vd3d3LlB5dGhvbi5vcmcvZG9jLycKKyAgICAgID4+PiByMiA9IHVybHNwbGl0KHIxLmdldHVybCgpKQorICAgICAgPj4+IHIyLmdldHVybCgpCisgICAgICAnaHR0cDovL3d3dy5QeXRob24ub3JnL2RvYy8nCisKKworVGhlIGZvbGxvd2luZyBjbGFzc2VzIHByb3ZpZGUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgc3RydWN0dXJlZCBwYXJzZQorcmVzdWx0cyB3aGVuIG9wZXJhdGluZyBvbiA6Y2xhc3M6YHN0cmAgb2JqZWN0czoKKworLi4gY2xhc3M6OiBEZWZyYWdSZXN1bHQodXJsLCBmcmFnbWVudCkKKworICAgQ29uY3JldGUgY2xhc3MgZm9yIDpmdW5jOmB1cmxkZWZyYWdgIHJlc3VsdHMgY29udGFpbmluZyA6Y2xhc3M6YHN0cmAKKyAgIGRhdGEuIFRoZSA6bWV0aDpgZW5jb2RlYCBtZXRob2QgcmV0dXJucyBhIDpjbGFzczpgRGVmcmFnUmVzdWx0Qnl0ZXNgCisgICBpbnN0YW5jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKy4uIGNsYXNzOjogUGFyc2VSZXN1bHQoc2NoZW1lLCBuZXRsb2MsIHBhdGgsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KQorCisgICBDb25jcmV0ZSBjbGFzcyBmb3IgOmZ1bmM6YHVybHBhcnNlYCByZXN1bHRzIGNvbnRhaW5pbmcgOmNsYXNzOmBzdHJgCisgICBkYXRhLiBUaGUgOm1ldGg6YGVuY29kZWAgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0Qnl0ZXNgCisgICBpbnN0YW5jZS4KKworLi4gY2xhc3M6OiBTcGxpdFJlc3VsdChzY2hlbWUsIG5ldGxvYywgcGF0aCwgcXVlcnksIGZyYWdtZW50KQorCisgICBDb25jcmV0ZSBjbGFzcyBmb3IgOmZ1bmM6YHVybHNwbGl0YCByZXN1bHRzIGNvbnRhaW5pbmcgOmNsYXNzOmBzdHJgCisgICBkYXRhLiBUaGUgOm1ldGg6YGVuY29kZWAgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YFNwbGl0UmVzdWx0Qnl0ZXNgCisgICBpbnN0YW5jZS4KKworCitUaGUgZm9sbG93aW5nIGNsYXNzZXMgcHJvdmlkZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBwYXJzZSByZXN1bHRzIHdoZW4KK29wZXJhdGluZyBvbiA6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgb2JqZWN0czoKKworLi4gY2xhc3M6OiBEZWZyYWdSZXN1bHRCeXRlcyh1cmwsIGZyYWdtZW50KQorCisgICBDb25jcmV0ZSBjbGFzcyBmb3IgOmZ1bmM6YHVybGRlZnJhZ2AgcmVzdWx0cyBjb250YWluaW5nIDpjbGFzczpgYnl0ZXNgCisgICBkYXRhLiBUaGUgOm1ldGg6YGRlY29kZWAgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YERlZnJhZ1Jlc3VsdGAKKyAgIGluc3RhbmNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworLi4gY2xhc3M6OiBQYXJzZVJlc3VsdEJ5dGVzKHNjaGVtZSwgbmV0bG9jLCBwYXRoLCBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkKKworICAgQ29uY3JldGUgY2xhc3MgZm9yIDpmdW5jOmB1cmxwYXJzZWAgcmVzdWx0cyBjb250YWluaW5nIDpjbGFzczpgYnl0ZXNgCisgICBkYXRhLiBUaGUgOm1ldGg6YGRlY29kZWAgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0YAorICAgaW5zdGFuY2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBjbGFzczo6IFNwbGl0UmVzdWx0Qnl0ZXMoc2NoZW1lLCBuZXRsb2MsIHBhdGgsIHF1ZXJ5LCBmcmFnbWVudCkKKworICAgQ29uY3JldGUgY2xhc3MgZm9yIDpmdW5jOmB1cmxzcGxpdGAgcmVzdWx0cyBjb250YWluaW5nIDpjbGFzczpgYnl0ZXNgCisgICBkYXRhLiBUaGUgOm1ldGg6YGRlY29kZWAgbWV0aG9kIHJldHVybnMgYSA6Y2xhc3M6YFNwbGl0UmVzdWx0YAorICAgaW5zdGFuY2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKK1VSTCBRdW90aW5nCistLS0tLS0tLS0tLQorCitUaGUgVVJMIHF1b3RpbmcgZnVuY3Rpb25zIGZvY3VzIG9uIHRha2luZyBwcm9ncmFtIGRhdGEgYW5kIG1ha2luZyBpdCBzYWZlCitmb3IgdXNlIGFzIFVSTCBjb21wb25lbnRzIGJ5IHF1b3Rpbmcgc3BlY2lhbCBjaGFyYWN0ZXJzIGFuZCBhcHByb3ByaWF0ZWx5CitlbmNvZGluZyBub24tQVNDSUkgdGV4dC4gVGhleSBhbHNvIHN1cHBvcnQgcmV2ZXJzaW5nIHRoZXNlIG9wZXJhdGlvbnMgdG8KK3JlY3JlYXRlIHRoZSBvcmlnaW5hbCBkYXRhIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgVVJMIGNvbXBvbmVudCBpZiB0aGF0Cit0YXNrIGlzbid0IGFscmVhZHkgY292ZXJlZCBieSB0aGUgVVJMIHBhcnNpbmcgZnVuY3Rpb25zIGFib3ZlLgogCiAuLiBmdW5jdGlvbjo6IHF1b3RlKHN0cmluZywgc2FmZT0nLycsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCkBAIC0zMTksMTYgKzUwMSwxNiBAQAogICAgSWYgaXQgaXMgYSA6Y2xhc3M6YHN0cmAsIHVuZXNjYXBlZCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiAqc3RyaW5nKgogICAgYXJlIGVuY29kZWQgaW50byBVVEYtOCBieXRlcy4KIAotICAgRXhhbXBsZTogYGB1bnF1b3RlX3RvX2J5dGVzKCdhJTI2JUVGJylgYCB5aWVsZHMKLSAgIGBgYidhJlx4ZWYnYGAuCisgICBFeGFtcGxlOiBgYHVucXVvdGVfdG9fYnl0ZXMoJ2ElMjYlRUYnKWBgIHlpZWxkcyBgYGInYSZceGVmJ2BgLgogCiAKIC4uIGZ1bmN0aW9uOjogdXJsZW5jb2RlKHF1ZXJ5LCBkb3NlcT1GYWxzZSwgc2FmZT0nJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUpCiAKICAgIENvbnZlcnQgYSBtYXBwaW5nIG9iamVjdCBvciBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcywgd2hpY2ggbWF5Ci0gICBlaXRoZXIgYmUgYSA6Y2xhc3M6YHN0cmAgb3IgYSA6Y2xhc3M6YGJ5dGVzYCwgIHRvIGEgInBlcmNlbnQtZW5jb2RlZCIgc3RyaW5nLAotICAgc3VpdGFibGUgdG8gcGFzcyB0byA6ZnVuYzpgdXJsb3BlbmAgYWJvdmUgYXMgdGhlIG9wdGlvbmFsICpkYXRhKiBhcmd1bWVudC4KLSAgIFRoaXMgaXMgdXNlZnVsIHRvIHBhc3MgYSBkaWN0aW9uYXJ5IG9mIGZvcm0gZmllbGRzIHRvIGEgYGBQT1NUYGAgcmVxdWVzdC4KKyAgIGVpdGhlciBiZSBhIDpjbGFzczpgc3RyYCBvciBhIDpjbGFzczpgYnl0ZXNgLCAgdG8gYSAicGVyY2VudC1lbmNvZGVkIgorICAgc3RyaW5nLiAgVGhlIHJlc3VsdGFudCBzdHJpbmcgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gYnl0ZXMgdXNpbmcgdGhlCisgICB1c2VyLXNwZWNpZmllZCBlbmNvZGluZyBiZWZvcmUgaXQgaXMgc2VudCB0byA6ZnVuYzpgdXJsb3BlbmAgYXMgdGhlIG9wdGlvbmFsCisgICAqZGF0YSogYXJndW1lbnQuCiAgICBUaGUgcmVzdWx0aW5nIHN0cmluZyBpcyBhIHNlcmllcyBvZiBgYGtleT12YWx1ZWBgIHBhaXJzIHNlcGFyYXRlZCBieSBgYCcmJ2BgCiAgICBjaGFyYWN0ZXJzLCB3aGVyZSBib3RoICprZXkqIGFuZCAqdmFsdWUqIGFyZSBxdW90ZWQgdXNpbmcgOmZ1bmM6YHF1b3RlX3BsdXNgCiAgICBhYm92ZS4gV2hlbiBhIHNlcXVlbmNlIG9mIHR3by1lbGVtZW50IHR1cGxlcyBpcyB1c2VkIGFzIHRoZSAqcXVlcnkqCkBAIC0zMzcsMTIgKzUxOSwxNiBAQAogICAgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqZG9zZXEqIGlzIGV2YWx1YXRlcyB0byAqVHJ1ZSosIGluZGl2aWR1YWwKICAgIGBga2V5PXZhbHVlYGAgcGFpcnMgc2VwYXJhdGVkIGJ5IGBgJyYnYGAgYXJlIGdlbmVyYXRlZCBmb3IgZWFjaCBlbGVtZW50IG9mCiAgICB0aGUgdmFsdWUgc2VxdWVuY2UgZm9yIHRoZSBrZXkuICBUaGUgb3JkZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgZW5jb2RlZAotICAgc3RyaW5nIHdpbGwgbWF0Y2ggdGhlIG9yZGVyIG9mIHBhcmFtZXRlciB0dXBsZXMgaW4gdGhlIHNlcXVlbmNlLiBUaGlzIG1vZHVsZQotICAgcHJvdmlkZXMgdGhlIGZ1bmN0aW9ucyA6ZnVuYzpgcGFyc2VfcXNgIGFuZCA6ZnVuYzpgcGFyc2VfcXNsYCB3aGljaCBhcmUgdXNlZAotICAgdG8gcGFyc2UgcXVlcnkgc3RyaW5ncyBpbnRvIFB5dGhvbiBkYXRhIHN0cnVjdHVyZXMuCisgICBzdHJpbmcgd2lsbCBtYXRjaCB0aGUgb3JkZXIgb2YgcGFyYW1ldGVyIHR1cGxlcyBpbiB0aGUgc2VxdWVuY2UuCiAKICAgIFdoZW4gKnF1ZXJ5KiBwYXJhbWV0ZXIgaXMgYSA6Y2xhc3M6YHN0cmAsIHRoZSAqc2FmZSosICplbmNvZGluZyogYW5kICplcnJvcioKLSAgIHBhcmFtZXRlcnMgYXJlIHNlbnQgdGhlIDpmdW5jOmBxdW90ZV9wbHVzYCBmb3IgZW5jb2RpbmcuCisgICBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgZG93biB0byA6ZnVuYzpgcXVvdGVfcGx1c2AgZm9yIGVuY29kaW5nLgorCisgICBUbyByZXZlcnNlIHRoaXMgZW5jb2RpbmcgcHJvY2VzcywgOmZ1bmM6YHBhcnNlX3FzYCBhbmQgOmZ1bmM6YHBhcnNlX3FzbGAgYXJlCisgICBwcm92aWRlZCBpbiB0aGlzIG1vZHVsZSB0byBwYXJzZSBxdWVyeSBzdHJpbmdzIGludG8gUHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KKworICAgUmVmZXIgdG8gOnJlZjpgdXJsbGliIGV4YW1wbGVzIDx1cmxsaWItZXhhbXBsZXM+YCB0byBmaW5kIG91dCBob3cgdXJsZW5jb2RlCisgICBtZXRob2QgY2FuIGJlIHVzZWQgZm9yIGdlbmVyYXRpbmcgcXVlcnkgc3RyaW5nIGZvciBhIFVSTCBvciBkYXRhIGZvciBQT1NULgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgUXVlcnkgcGFyYW1ldGVyIHN1cHBvcnRzIGJ5dGVzIGFuZCBzdHJpbmcgb2JqZWN0cy4KQEAgLTM1Niw2ICs1NDIsOSBAQAogICAgICAgbW9zdGx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHB1cnBvc2VzIGFuZCBmb3IgY2VydGFpbiBkZS1mYWN0bwogICAgICAgcGFyc2luZyByZXF1aXJlbWVudHMgYXMgY29tbW9ubHkgb2JzZXJ2ZWQgaW4gbWFqb3IgYnJvd3NlcnMuCiAKKyAgIDpyZmM6YDI3MzJgIC0gRm9ybWF0IGZvciBMaXRlcmFsIElQdjYgQWRkcmVzc2VzIGluIFVSTCdzLgorICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIHBhcnNpbmcgcmVxdWlyZW1lbnRzIG9mIElQdjYgVVJMcy4KKwogICAgOnJmYzpgMjM5NmAgLSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIChVUkkpOiBHZW5lcmljIFN5bnRheAogICAgICAgRG9jdW1lbnQgZGVzY3JpYmluZyB0aGUgZ2VuZXJpYyBzeW50YWN0aWMgcmVxdWlyZW1lbnRzIGZvciBib3RoIFVuaWZvcm0gUmVzb3VyY2UKICAgICAgIE5hbWVzIChVUk5zKSBhbmQgVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycyAoVVJMcykuCkBAIC0zNzAsNTcgKzU1OSwzIEBACiAKICAgIDpyZmM6YDE3MzhgIC0gVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycyAoVVJMKQogICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIGZvcm1hbCBzeW50YXggYW5kIHNlbWFudGljcyBvZiBhYnNvbHV0ZSBVUkxzLgotCi0KLS4uIF91cmxwYXJzZS1yZXN1bHQtb2JqZWN0OgotCi1SZXN1bHRzIG9mIDpmdW5jOmB1cmxwYXJzZWAgYW5kIDpmdW5jOmB1cmxzcGxpdGAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgcmVzdWx0IG9iamVjdHMgZnJvbSB0aGUgOmZ1bmM6YHVybHBhcnNlYCBhbmQgOmZ1bmM6YHVybHNwbGl0YCBmdW5jdGlvbnMgYXJlCi1zdWJjbGFzc2VzIG9mIHRoZSA6Y2xhc3M6YHR1cGxlYCB0eXBlLiAgVGhlc2Ugc3ViY2xhc3NlcyBhZGQgdGhlIGF0dHJpYnV0ZXMKLWRlc2NyaWJlZCBpbiB0aG9zZSBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgcHJvdmlkZSBhbiBhZGRpdGlvbmFsIG1ldGhvZDoKLQotLi4gbWV0aG9kOjogUGFyc2VSZXN1bHQuZ2V0dXJsKCkKLQotICAgUmV0dXJuIHRoZSByZS1jb21iaW5lZCB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBVUkwgYXMgYSBzdHJpbmcuIFRoaXMgbWF5IGRpZmZlcgotICAgZnJvbSB0aGUgb3JpZ2luYWwgVVJMIGluIHRoYXQgdGhlIHNjaGVtZSB3aWxsIGFsd2F5cyBiZSBub3JtYWxpemVkIHRvIGxvd2VyIGNhc2UKLSAgIGFuZCBlbXB0eSBjb21wb25lbnRzIG1heSBiZSBkcm9wcGVkLiBTcGVjaWZpY2FsbHksIGVtcHR5IHBhcmFtZXRlcnMsIHF1ZXJpZXMsCi0gICBhbmQgZnJhZ21lbnQgaWRlbnRpZmllcnMgd2lsbCBiZSByZW1vdmVkLgotCi0gICBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGlzIGEgZml4cG9pbnQgaWYgcGFzc2VkIGJhY2sgdGhyb3VnaCB0aGUgb3JpZ2luYWwKLSAgIHBhcnNpbmcgZnVuY3Rpb246Ci0KLSAgICAgID4+PiBpbXBvcnQgdXJsbGliLnBhcnNlCi0gICAgICA+Pj4gdXJsID0gJ0hUVFA6Ly93d3cuUHl0aG9uLm9yZy9kb2MvIycKLQotICAgICAgPj4+IHIxID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkKLSAgICAgID4+PiByMS5nZXR1cmwoKQotICAgICAgJ2h0dHA6Ly93d3cuUHl0aG9uLm9yZy9kb2MvJwotCi0gICAgICA+Pj4gcjIgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQocjEuZ2V0dXJsKCkpCi0gICAgICA+Pj4gcjIuZ2V0dXJsKCkKLSAgICAgICdodHRwOi8vd3d3LlB5dGhvbi5vcmcvZG9jLycKLQotCi1UaGUgZm9sbG93aW5nIGNsYXNzZXMgcHJvdmlkZSB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBwYXJzZSByZXN1bHRzOgotCi0uLiBjbGFzczo6IEJhc2VSZXN1bHQKLQotICAgQmFzZSBjbGFzcyBmb3IgdGhlIGNvbmNyZXRlIHJlc3VsdCBjbGFzc2VzLiAgVGhpcyBwcm92aWRlcyBtb3N0IG9mIHRoZQotICAgYXR0cmlidXRlIGRlZmluaXRpb25zLiAgSXQgZG9lcyBub3QgcHJvdmlkZSBhIDptZXRoOmBnZXR1cmxgIG1ldGhvZC4gIEl0IGlzCi0gICBkZXJpdmVkIGZyb20gOmNsYXNzOmB0dXBsZWAsIGJ1dCBkb2VzIG5vdCBvdmVycmlkZSB0aGUgOm1ldGg6YF9faW5pdF9fYCBvcgotICAgOm1ldGg6YF9fbmV3X19gIG1ldGhvZHMuCi0KLQotLi4gY2xhc3M6OiBQYXJzZVJlc3VsdChzY2hlbWUsIG5ldGxvYywgcGF0aCwgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpCi0KLSAgIENvbmNyZXRlIGNsYXNzIGZvciA6ZnVuYzpgdXJscGFyc2VgIHJlc3VsdHMuICBUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBpcwotICAgb3ZlcnJpZGRlbiB0byBzdXBwb3J0IGNoZWNraW5nIHRoYXQgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZC4KLQotCi0uLiBjbGFzczo6IFNwbGl0UmVzdWx0KHNjaGVtZSwgbmV0bG9jLCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpCi0KLSAgIENvbmNyZXRlIGNsYXNzIGZvciA6ZnVuYzpgdXJsc3BsaXRgIHJlc3VsdHMuICBUaGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBpcwotICAgb3ZlcnJpZGRlbiB0byBzdXBwb3J0IGNoZWNraW5nIHRoYXQgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMgYXJlIHBhc3NlZC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0IGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CmluZGV4IDNiYTJjMTUuLjNlMjQ5NTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKQEAgLTE1LDI4ICsxNSwzNyBAQAogVGhlIDptb2Q6YHVybGxpYi5yZXF1ZXN0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKIAogCi0uLiBmdW5jdGlvbjo6IHVybG9wZW4odXJsLCBkYXRhPU5vbmVbLCB0aW1lb3V0XSkKKy4uIGZ1bmN0aW9uOjogdXJsb3Blbih1cmwsIGRhdGE9Tm9uZVssIHRpbWVvdXRdLCAqLCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUpCiAKICAgIE9wZW4gdGhlIFVSTCAqdXJsKiwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIHN0cmluZyBvciBhCiAgICA6Y2xhc3M6YFJlcXVlc3RgIG9iamVjdC4KIAotICAgLi4gd2FybmluZzo6Ci0gICAgICBIVFRQUyByZXF1ZXN0cyBkbyBub3QgZG8gYW55IHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUuCi0KLSAgICpkYXRhKiBtYXkgYmUgYSBzdHJpbmcgc3BlY2lmeWluZyBhZGRpdGlvbmFsIGRhdGEgdG8gc2VuZCB0byB0aGUKLSAgIHNlcnZlciwgb3IgYGBOb25lYGAgaWYgbm8gc3VjaCBkYXRhIGlzIG5lZWRlZC4gIEN1cnJlbnRseSBIVFRQCi0gICByZXF1ZXN0cyBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IHVzZSAqZGF0YSo7IHRoZSBIVFRQIHJlcXVlc3Qgd2lsbAotICAgYmUgYSBQT1NUIGluc3RlYWQgb2YgYSBHRVQgd2hlbiB0aGUgKmRhdGEqIHBhcmFtZXRlciBpcyBwcm92aWRlZC4KLSAgICpkYXRhKiBzaG91bGQgYmUgYSBidWZmZXIgaW4gdGhlIHN0YW5kYXJkCisgICAqZGF0YSogbWF5IGJlIGEgYnl0ZXMgb2JqZWN0IHNwZWNpZnlpbmcgYWRkaXRpb25hbCBkYXRhIHRvIHNlbmQgdG8gdGhlCisgICBzZXJ2ZXIsIG9yIGBgTm9uZWBgIGlmIG5vIHN1Y2ggZGF0YSBpcyBuZWVkZWQuICpkYXRhKiBtYXkgYWxzbyBiZSBhbgorICAgaXRlcmFibGUgb2JqZWN0IGFuZCBpbiB0aGF0IGNhc2UgQ29udGVudC1MZW5ndGggdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQgaW4KKyAgIHRoZSBoZWFkZXJzLiBDdXJyZW50bHkgSFRUUCByZXF1ZXN0cyBhcmUgdGhlIG9ubHkgb25lcyB0aGF0IHVzZSAqZGF0YSo7IHRoZQorICAgSFRUUCByZXF1ZXN0IHdpbGwgYmUgYSBQT1NUIGluc3RlYWQgb2YgYSBHRVQgd2hlbiB0aGUgKmRhdGEqIHBhcmFtZXRlciBpcworICAgcHJvdmlkZWQuICAqZGF0YSogc2hvdWxkIGJlIGEgYnVmZmVyIGluIHRoZSBzdGFuZGFyZAogICAgOm1pbWV0eXBlOmBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGZvcm1hdC4gIFRoZQotICAgOmZ1bmM6YHVybGxpYi5wYXJzZS51cmxlbmNvZGVgIGZ1bmN0aW9uIHRha2VzIGEgbWFwcGluZyBvciBzZXF1ZW5jZQotICAgb2YgMi10dXBsZXMgYW5kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhpcyBmb3JtYXQuCisgICA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAgZnVuY3Rpb24gdGFrZXMgYSBtYXBwaW5nIG9yIHNlcXVlbmNlIG9mCisgICAyLXR1cGxlcyBhbmQgcmV0dXJucyBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdC4gdXJsbGliLnJlcXVlc3QgbW9kdWxlIHVzZXMKKyAgIEhUVFAvMS4xIGFuZCBpbmNsdWRlcyBgYENvbm5lY3Rpb246Y2xvc2VgYCBoZWFkZXIgaW4gaXRzIEhUVFAgcmVxdWVzdHMuCiAKICAgIFRoZSBvcHRpb25hbCAqdGltZW91dCogcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IKICAgIGJsb2NraW5nIG9wZXJhdGlvbnMgbGlrZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLAogICAgdGhlIGdsb2JhbCBkZWZhdWx0IHRpbWVvdXQgc2V0dGluZyB3aWxsIGJlIHVzZWQpLiAgVGhpcyBhY3R1YWxseQogICAgb25seSB3b3JrcyBmb3IgSFRUUCwgSFRUUFMgYW5kIEZUUCBjb25uZWN0aW9ucy4KIAorICAgVGhlIG9wdGlvbmFsICpjYWZpbGUqIGFuZCAqY2FwYXRoKiBwYXJhbWV0ZXJzIHNwZWNpZnkgYSBzZXQgb2YgdHJ1c3RlZAorICAgQ0EgY2VydGlmaWNhdGVzIGZvciBIVFRQUyByZXF1ZXN0cy4gICpjYWZpbGUqIHNob3VsZCBwb2ludCB0byBhIHNpbmdsZQorICAgZmlsZSBjb250YWluaW5nIGEgYnVuZGxlIG9mIENBIGNlcnRpZmljYXRlcywgd2hlcmVhcyAqY2FwYXRoKiBzaG91bGQKKyAgIHBvaW50IHRvIGEgZGlyZWN0b3J5IG9mIGhhc2hlZCBjZXJ0aWZpY2F0ZSBmaWxlcy4gIE1vcmUgaW5mb3JtYXRpb24gY2FuCisgICBiZSBmb3VuZCBpbiA6bWV0aDpgc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYC4KKworICAgLi4gd2FybmluZzo6CisgICAgICBJZiBuZWl0aGVyICpjYWZpbGUqIG5vciAqY2FwYXRoKiBpcyBzcGVjaWZpZWQsIGFuIEhUVFBTIHJlcXVlc3QKKyAgICAgIHdpbGwgbm90IGRvIGFueSB2ZXJpZmljYXRpb24gb2YgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgorCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBmaWxlLWxpa2Ugb2JqZWN0IHdpdGggdHdvIGFkZGl0aW9uYWwgbWV0aG9kcyBmcm9tCiAgICB0aGUgOm1vZDpgdXJsbGliLnJlc3BvbnNlYCBtb2R1bGUKIApAQCAtNjEsNiArNzAsMTYgQEAKICAgIFByb3h5IGhhbmRsaW5nLCB3aGljaCB3YXMgZG9uZSBieSBwYXNzaW5nIGEgZGljdGlvbmFyeSBwYXJhbWV0ZXIgdG8KICAgIGBgdXJsbGliLnVybG9wZW5gYCwgY2FuIGJlIG9idGFpbmVkIGJ5IHVzaW5nIDpjbGFzczpgUHJveHlIYW5kbGVyYCBvYmplY3RzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgKmNhZmlsZSogYW5kICpjYXBhdGgqIHdlcmUgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBIVFRQUyB2aXJ0dWFsIGhvc3RzIGFyZSBub3cgc3VwcG9ydGVkIGlmIHBvc3NpYmxlICh0aGF0IGlzLCBpZgorICAgICAgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICAqZGF0YSogY2FuIGJlIGFuIGl0ZXJhYmxlIG9iamVjdC4KKwogLi4gZnVuY3Rpb246OiBpbnN0YWxsX29wZW5lcihvcGVuZXIpCiAKICAgIEluc3RhbGwgYW4gOmNsYXNzOmBPcGVuZXJEaXJlY3RvcmAgaW5zdGFuY2UgYXMgdGhlIGRlZmF1bHQgZ2xvYmFsIG9wZW5lci4KQEAgLTg5LDUyICsxMDgsNiBAQAogICAgbWVtYmVyIHZhcmlhYmxlIHRvIG1vZGlmeSBpdHMgcG9zaXRpb24gaW4gdGhlIGhhbmRsZXJzIGxpc3QuCiAKIAotLi4gZnVuY3Rpb246OiB1cmxyZXRyaWV2ZSh1cmwsIGZpbGVuYW1lPU5vbmUsIHJlcG9ydGhvb2s9Tm9uZSwgZGF0YT1Ob25lKQotCi0gICBDb3B5IGEgbmV0d29yayBvYmplY3QgZGVub3RlZCBieSBhIFVSTCB0byBhIGxvY2FsIGZpbGUsIGlmIG5lY2Vzc2FyeS4gSWYgdGhlIFVSTAotICAgcG9pbnRzIHRvIGEgbG9jYWwgZmlsZSwgb3IgYSB2YWxpZCBjYWNoZWQgY29weSBvZiB0aGUgb2JqZWN0IGV4aXN0cywgdGhlIG9iamVjdAotICAgaXMgbm90IGNvcGllZC4gIFJldHVybiBhIHR1cGxlIGBgKGZpbGVuYW1lLCBoZWFkZXJzKWBgIHdoZXJlICpmaWxlbmFtZSogaXMgdGhlCi0gICBsb2NhbCBmaWxlIG5hbWUgdW5kZXIgd2hpY2ggdGhlIG9iamVjdCBjYW4gYmUgZm91bmQsIGFuZCAqaGVhZGVycyogaXMgd2hhdGV2ZXIKLSAgIHRoZSA6bWV0aDpgaW5mb2AgbWV0aG9kIG9mIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgOmZ1bmM6YHVybG9wZW5gIHJldHVybmVkIChmb3IKLSAgIGEgcmVtb3RlIG9iamVjdCwgcG9zc2libHkgY2FjaGVkKS4gRXhjZXB0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yCi0gICA6ZnVuYzpgdXJsb3BlbmAuCi0KLSAgIFRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHByZXNlbnQsIHNwZWNpZmllcyB0aGUgZmlsZSBsb2NhdGlvbiB0byBjb3B5IHRvIChpZgotICAgYWJzZW50LCB0aGUgbG9jYXRpb24gd2lsbCBiZSBhIHRlbXBmaWxlIHdpdGggYSBnZW5lcmF0ZWQgbmFtZSkuIFRoZSB0aGlyZAotICAgYXJndW1lbnQsIGlmIHByZXNlbnQsIGlzIGEgaG9vayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2Ugb24KLSAgIGVzdGFibGlzaG1lbnQgb2YgdGhlIG5ldHdvcmsgY29ubmVjdGlvbiBhbmQgb25jZSBhZnRlciBlYWNoIGJsb2NrIHJlYWQKLSAgIHRoZXJlYWZ0ZXIuICBUaGUgaG9vayB3aWxsIGJlIHBhc3NlZCB0aHJlZSBhcmd1bWVudHM7IGEgY291bnQgb2YgYmxvY2tzCi0gICB0cmFuc2ZlcnJlZCBzbyBmYXIsIGEgYmxvY2sgc2l6ZSBpbiBieXRlcywgYW5kIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBmaWxlLiAgVGhlCi0gICB0aGlyZCBhcmd1bWVudCBtYXkgYmUgYGAtMWBgIG9uIG9sZGVyIEZUUCBzZXJ2ZXJzIHdoaWNoIGRvIG5vdCByZXR1cm4gYSBmaWxlCi0gICBzaXplIGluIHJlc3BvbnNlIHRvIGEgcmV0cmlldmFsIHJlcXVlc3QuCi0KLSAgIElmIHRoZSAqdXJsKiB1c2VzIHRoZSA6ZmlsZTpgaHR0cDpgIHNjaGVtZSBpZGVudGlmaWVyLCB0aGUgb3B0aW9uYWwgKmRhdGEqCi0gICBhcmd1bWVudCBtYXkgYmUgZ2l2ZW4gdG8gc3BlY2lmeSBhIGBgUE9TVGBgIHJlcXVlc3QgKG5vcm1hbGx5IHRoZSByZXF1ZXN0IHR5cGUKLSAgIGlzIGBgR0VUYGApLiAgVGhlICpkYXRhKiBhcmd1bWVudCBtdXN0IGluIHN0YW5kYXJkCi0gICA6bWltZXR5cGU6YGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgZm9ybWF0OyBzZWUgdGhlIDpmdW5jOmB1cmxlbmNvZGVgCi0gICBmdW5jdGlvbiBiZWxvdy4KLQotICAgOmZ1bmM6YHVybHJldHJpZXZlYCB3aWxsIHJhaXNlIDpleGM6YENvbnRlbnRUb29TaG9ydEVycm9yYCB3aGVuIGl0IGRldGVjdHMgdGhhdAotICAgdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZSAgd2FzIGxlc3MgdGhhbiB0aGUgZXhwZWN0ZWQgYW1vdW50ICh3aGljaCBpcyB0aGUKLSAgIHNpemUgcmVwb3J0ZWQgYnkgYSAgKkNvbnRlbnQtTGVuZ3RoKiBoZWFkZXIpLiBUaGlzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHdoZW4KLSAgIHRoZSAgZG93bmxvYWQgaXMgaW50ZXJydXB0ZWQuCi0KLSAgIFRoZSAqQ29udGVudC1MZW5ndGgqIGlzIHRyZWF0ZWQgYXMgYSBsb3dlciBib3VuZDogaWYgdGhlcmUncyBtb3JlIGRhdGEgIHRvIHJlYWQsCi0gICA6ZnVuYzpgdXJscmV0cmlldmVgIHJlYWRzIG1vcmUgZGF0YSwgYnV0IGlmIGxlc3MgZGF0YSBpcyBhdmFpbGFibGUsICBpdCByYWlzZXMKLSAgIHRoZSBleGNlcHRpb24uCi0KLSAgIFlvdSBjYW4gc3RpbGwgcmV0cmlldmUgdGhlIGRvd25sb2FkZWQgZGF0YSBpbiB0aGlzIGNhc2UsIGl0IGlzIHN0b3JlZCAgaW4gdGhlCi0gICA6YXR0cjpgY29udGVudGAgYXR0cmlidXRlIG9mIHRoZSBleGNlcHRpb24gaW5zdGFuY2UuCi0KLSAgIElmIG5vICpDb250ZW50LUxlbmd0aCogaGVhZGVyIHdhcyBzdXBwbGllZCwgOmZ1bmM6YHVybHJldHJpZXZlYCBjYW4gbm90Ci0gICBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgZGF0YSBpdCBoYXMgZG93bmxvYWRlZCwgYW5kIGp1c3QgcmV0dXJucyBpdC4gIEluCi0gICB0aGlzIGNhc2UgeW91IGp1c3QgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgZG93bmxvYWQgd2FzIHN1Y2Nlc3NmdWwuCi0KLS4uIGZ1bmN0aW9uOjogdXJsY2xlYW51cCgpCi0KLSAgIENsZWFyIHRoZSBjYWNoZSB0aGF0IG1heSBoYXZlIGJlZW4gYnVpbHQgdXAgYnkgcHJldmlvdXMgY2FsbHMgdG8KLSAgIDpmdW5jOmB1cmxyZXRyaWV2ZWAuCi0KIC4uIGZ1bmN0aW9uOjogcGF0aG5hbWUydXJsKHBhdGgpCiAKICAgIENvbnZlcnQgdGhlIHBhdGhuYW1lICpwYXRoKiBmcm9tIHRoZSBsb2NhbCBzeW50YXggZm9yIGEgcGF0aCB0byB0aGUgZm9ybSB1c2VkIGluCkBAIC0yMDMsMTE2ICsxNzYsNiBAQAogICAgZmV0Y2hpbmcgb2YgdGhlIGltYWdlLCB0aGlzIHNob3VsZCBiZSB0cnVlLgogCiAKLS4uIGNsYXNzOjogVVJMb3BlbmVyKHByb3hpZXM9Tm9uZSwgKip4NTA5KQotCi0gICBCYXNlIGNsYXNzIGZvciBvcGVuaW5nIGFuZCByZWFkaW5nIFVSTHMuICBVbmxlc3MgeW91IG5lZWQgdG8gc3VwcG9ydCBvcGVuaW5nCi0gICBvYmplY3RzIHVzaW5nIHNjaGVtZXMgb3RoZXIgdGhhbiA6ZmlsZTpgaHR0cDpgLCA6ZmlsZTpgZnRwOmAsIG9yIDpmaWxlOmBmaWxlOmAsCi0gICB5b3UgcHJvYmFibHkgd2FudCB0byB1c2UgOmNsYXNzOmBGYW5jeVVSTG9wZW5lcmAuCi0KLSAgIEJ5IGRlZmF1bHQsIHRoZSA6Y2xhc3M6YFVSTG9wZW5lcmAgY2xhc3Mgc2VuZHMgYSA6bWFpbGhlYWRlcjpgVXNlci1BZ2VudGAgaGVhZGVyCi0gICBvZiBgYHVybGxpYi9WVlZgYCwgd2hlcmUgKlZWViogaXMgdGhlIDptb2Q6YHVybGxpYmAgdmVyc2lvbiBudW1iZXIuCi0gICBBcHBsaWNhdGlvbnMgY2FuIGRlZmluZSB0aGVpciBvd24gOm1haWxoZWFkZXI6YFVzZXItQWdlbnRgIGhlYWRlciBieSBzdWJjbGFzc2luZwotICAgOmNsYXNzOmBVUkxvcGVuZXJgIG9yIDpjbGFzczpgRmFuY3lVUkxvcGVuZXJgIGFuZCBzZXR0aW5nIHRoZSBjbGFzcyBhdHRyaWJ1dGUKLSAgIDphdHRyOmB2ZXJzaW9uYCB0byBhbiBhcHByb3ByaWF0ZSBzdHJpbmcgdmFsdWUgaW4gdGhlIHN1YmNsYXNzIGRlZmluaXRpb24uCi0KLSAgIFRoZSBvcHRpb25hbCAqcHJveGllcyogcGFyYW1ldGVyIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZyBzY2hlbWUgbmFtZXMgdG8KLSAgIHByb3h5IFVSTHMsIHdoZXJlIGFuIGVtcHR5IGRpY3Rpb25hcnkgdHVybnMgcHJveGllcyBvZmYgY29tcGxldGVseS4gIEl0cyBkZWZhdWx0Ci0gICB2YWx1ZSBpcyBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSBlbnZpcm9ubWVudGFsIHByb3h5IHNldHRpbmdzIHdpbGwgYmUgdXNlZCBpZgotICAgcHJlc2VudCwgYXMgZGlzY3Vzc2VkIGluIHRoZSBkZWZpbml0aW9uIG9mIDpmdW5jOmB1cmxvcGVuYCwgYWJvdmUuCi0KLSAgIEFkZGl0aW9uYWwga2V5d29yZCBwYXJhbWV0ZXJzLCBjb2xsZWN0ZWQgaW4gKng1MDkqLCBtYXkgYmUgdXNlZCBmb3IKLSAgIGF1dGhlbnRpY2F0aW9uIG9mIHRoZSBjbGllbnQgd2hlbiB1c2luZyB0aGUgOmZpbGU6YGh0dHBzOmAgc2NoZW1lLiAgVGhlIGtleXdvcmRzCi0gICAqa2V5X2ZpbGUqIGFuZCAqY2VydF9maWxlKiBhcmUgc3VwcG9ydGVkIHRvIHByb3ZpZGUgYW4gIFNTTCBrZXkgYW5kIGNlcnRpZmljYXRlOwotICAgYm90aCBhcmUgbmVlZGVkIHRvIHN1cHBvcnQgY2xpZW50IGF1dGhlbnRpY2F0aW9uLgotCi0gICA6Y2xhc3M6YFVSTG9wZW5lcmAgb2JqZWN0cyB3aWxsIHJhaXNlIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiBpZiB0aGUgc2VydmVyCi0gICByZXR1cm5zIGFuIGVycm9yIGNvZGUuCi0KLSAgICAuLiBtZXRob2Q6OiBvcGVuKGZ1bGx1cmwsIGRhdGE9Tm9uZSkKLQotICAgICAgIE9wZW4gKmZ1bGx1cmwqIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBwcm90b2NvbC4gIFRoaXMgbWV0aG9kIHNldHMgdXAgY2FjaGUgYW5kCi0gICAgICAgcHJveHkgaW5mb3JtYXRpb24sIHRoZW4gY2FsbHMgdGhlIGFwcHJvcHJpYXRlIG9wZW4gbWV0aG9kIHdpdGggaXRzIGlucHV0Ci0gICAgICAgYXJndW1lbnRzLiAgSWYgdGhlIHNjaGVtZSBpcyBub3QgcmVjb2duaXplZCwgOm1ldGg6YG9wZW5fdW5rbm93bmAgaXMgY2FsbGVkLgotICAgICAgIFRoZSAqZGF0YSogYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgdGhlICpkYXRhKiBhcmd1bWVudCBvZgotICAgICAgIDpmdW5jOmB1cmxvcGVuYC4KLQotCi0gICAgLi4gbWV0aG9kOjogb3Blbl91bmtub3duKGZ1bGx1cmwsIGRhdGE9Tm9uZSkKLQotICAgICAgIE92ZXJyaWRhYmxlIGludGVyZmFjZSB0byBvcGVuIHVua25vd24gVVJMIHR5cGVzLgotCi0KLSAgICAuLiBtZXRob2Q6OiByZXRyaWV2ZSh1cmwsIGZpbGVuYW1lPU5vbmUsIHJlcG9ydGhvb2s9Tm9uZSwgZGF0YT1Ob25lKQotCi0gICAgICAgUmV0cmlldmVzIHRoZSBjb250ZW50cyBvZiAqdXJsKiBhbmQgcGxhY2VzIGl0IGluICpmaWxlbmFtZSouICBUaGUgcmV0dXJuIHZhbHVlCi0gICAgICAgaXMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGEgbG9jYWwgZmlsZW5hbWUgYW5kIGVpdGhlciBhCi0gICAgICAgOmNsYXNzOmBlbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNwb25zZSBoZWFkZXJzIChmb3IgcmVtb3RlCi0gICAgICAgVVJMcykgb3IgYGBOb25lYGAgKGZvciBsb2NhbCBVUkxzKS4gIFRoZSBjYWxsZXIgbXVzdCB0aGVuIG9wZW4gYW5kIHJlYWQgdGhlCi0gICAgICAgY29udGVudHMgb2YgKmZpbGVuYW1lKi4gIElmICpmaWxlbmFtZSogaXMgbm90IGdpdmVuIGFuZCB0aGUgVVJMIHJlZmVycyB0byBhCi0gICAgICAgbG9jYWwgZmlsZSwgdGhlIGlucHV0IGZpbGVuYW1lIGlzIHJldHVybmVkLiAgSWYgdGhlIFVSTCBpcyBub24tbG9jYWwgYW5kCi0gICAgICAgKmZpbGVuYW1lKiBpcyBub3QgZ2l2ZW4sIHRoZSBmaWxlbmFtZSBpcyB0aGUgb3V0cHV0IG9mIDpmdW5jOmB0ZW1wZmlsZS5ta3RlbXBgCi0gICAgICAgd2l0aCBhIHN1ZmZpeCB0aGF0IG1hdGNoZXMgdGhlIHN1ZmZpeCBvZiB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudCBvZiB0aGUgaW5wdXQKLSAgICAgICBVUkwuICBJZiAqcmVwb3J0aG9vayogaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBhY2NlcHRpbmcgdGhyZWUgbnVtZXJpYwotICAgICAgIHBhcmFtZXRlcnMuICBJdCB3aWxsIGJlIGNhbGxlZCBhZnRlciBlYWNoIGNodW5rIG9mIGRhdGEgaXMgcmVhZCBmcm9tIHRoZQotICAgICAgIG5ldHdvcmsuICAqcmVwb3J0aG9vayogaXMgaWdub3JlZCBmb3IgbG9jYWwgVVJMcy4KLQotICAgICAgIElmIHRoZSAqdXJsKiB1c2VzIHRoZSA6ZmlsZTpgaHR0cDpgIHNjaGVtZSBpZGVudGlmaWVyLCB0aGUgb3B0aW9uYWwgKmRhdGEqCi0gICAgICAgYXJndW1lbnQgbWF5IGJlIGdpdmVuIHRvIHNwZWNpZnkgYSBgYFBPU1RgYCByZXF1ZXN0IChub3JtYWxseSB0aGUgcmVxdWVzdCB0eXBlCi0gICAgICAgaXMgYGBHRVRgYCkuICBUaGUgKmRhdGEqIGFyZ3VtZW50IG11c3QgaW4gc3RhbmRhcmQKLSAgICAgICA6bWltZXR5cGU6YGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgZm9ybWF0OyBzZWUgdGhlIDpmdW5jOmB1cmxlbmNvZGVgCi0gICAgICAgZnVuY3Rpb24gYmVsb3cuCi0KLQotICAgIC4uIGF0dHJpYnV0ZTo6IHZlcnNpb24KLQotICAgICAgIFZhcmlhYmxlIHRoYXQgc3BlY2lmaWVzIHRoZSB1c2VyIGFnZW50IG9mIHRoZSBvcGVuZXIgb2JqZWN0LiAgVG8gZ2V0Ci0gICAgICAgOm1vZDpgdXJsbGliYCB0byB0ZWxsIHNlcnZlcnMgdGhhdCBpdCBpcyBhIHBhcnRpY3VsYXIgdXNlciBhZ2VudCwgc2V0IHRoaXMgaW4gYQotICAgICAgIHN1YmNsYXNzIGFzIGEgY2xhc3MgdmFyaWFibGUgb3IgaW4gdGhlIGNvbnN0cnVjdG9yIGJlZm9yZSBjYWxsaW5nIHRoZSBiYXNlCi0gICAgICAgY29uc3RydWN0b3IuCi0KLQotLi4gY2xhc3M6OiBGYW5jeVVSTG9wZW5lciguLi4pCi0KLSAgIDpjbGFzczpgRmFuY3lVUkxvcGVuZXJgIHN1YmNsYXNzZXMgOmNsYXNzOmBVUkxvcGVuZXJgIHByb3ZpZGluZyBkZWZhdWx0IGhhbmRsaW5nCi0gICBmb3IgdGhlIGZvbGxvd2luZyBIVFRQIHJlc3BvbnNlIGNvZGVzOiAzMDEsIDMwMiwgMzAzLCAzMDcgYW5kIDQwMS4gIEZvciB0aGUgMzB4Ci0gICByZXNwb25zZSBjb2RlcyBsaXN0ZWQgYWJvdmUsIHRoZSA6bWFpbGhlYWRlcjpgTG9jYXRpb25gIGhlYWRlciBpcyB1c2VkIHRvIGZldGNoCi0gICB0aGUgYWN0dWFsIFVSTC4gIEZvciA0MDEgcmVzcG9uc2UgY29kZXMgKGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkKSwgYmFzaWMgSFRUUAotICAgYXV0aGVudGljYXRpb24gaXMgcGVyZm9ybWVkLiAgRm9yIHRoZSAzMHggcmVzcG9uc2UgY29kZXMsIHJlY3Vyc2lvbiBpcyBib3VuZGVkCi0gICBieSB0aGUgdmFsdWUgb2YgdGhlICptYXh0cmllcyogYXR0cmlidXRlLCB3aGljaCBkZWZhdWx0cyB0byAxMC4KLQotICAgRm9yIGFsbCBvdGhlciByZXNwb25zZSBjb2RlcywgdGhlIG1ldGhvZCA6bWV0aDpgaHR0cF9lcnJvcl9kZWZhdWx0YCBpcyBjYWxsZWQKLSAgIHdoaWNoIHlvdSBjYW4gb3ZlcnJpZGUgaW4gc3ViY2xhc3NlcyB0byBoYW5kbGUgdGhlIGVycm9yIGFwcHJvcHJpYXRlbHkuCi0KLSAgIC4uIG5vdGU6OgotCi0gICAgICBBY2NvcmRpbmcgdG8gdGhlIGxldHRlciBvZiA6cmZjOmAyNjE2YCwgMzAxIGFuZCAzMDIgcmVzcG9uc2VzIHRvIFBPU1QgcmVxdWVzdHMKLSAgICAgIG11c3Qgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3RlZCB3aXRob3V0IGNvbmZpcm1hdGlvbiBieSB0aGUgdXNlci4gIEluCi0gICAgICByZWFsaXR5LCBicm93c2VycyBkbyBhbGxvdyBhdXRvbWF0aWMgcmVkaXJlY3Rpb24gb2YgdGhlc2UgcmVzcG9uc2VzLCBjaGFuZ2luZwotICAgICAgdGhlIFBPU1QgdG8gYSBHRVQsIGFuZCA6bW9kOmB1cmxsaWJgIHJlcHJvZHVjZXMgdGhpcyBiZWhhdmlvdXIuCi0KLSAgIFRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zdHJ1Y3RvciBhcmUgdGhlIHNhbWUgYXMgdGhvc2UgZm9yIDpjbGFzczpgVVJMb3BlbmVyYC4KLQotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFdoZW4gcGVyZm9ybWluZyBiYXNpYyBhdXRoZW50aWNhdGlvbiwgYSA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYCBpbnN0YW5jZSBjYWxscwotICAgICAgaXRzIDptZXRoOmBwcm9tcHRfdXNlcl9wYXNzd2RgIG1ldGhvZC4gIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGFza3MgdGhlCi0gICAgICB1c2VycyBmb3IgdGhlIHJlcXVpcmVkIGluZm9ybWF0aW9uIG9uIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbC4gIEEgc3ViY2xhc3MgbWF5Ci0gICAgICBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byBzdXBwb3J0IG1vcmUgYXBwcm9wcmlhdGUgYmVoYXZpb3IgaWYgbmVlZGVkLgotCi0gICBUaGUgOmNsYXNzOmBGYW5jeVVSTG9wZW5lcmAgY2xhc3Mgb2ZmZXJzIG9uZSBhZGRpdGlvbmFsIG1ldGhvZCB0aGF0IHNob3VsZCBiZQotICAgb3ZlcmxvYWRlZCB0byBwcm92aWRlIHRoZSBhcHByb3ByaWF0ZSBiZWhhdmlvcjoKLQotICAgLi4gbWV0aG9kOjogcHJvbXB0X3VzZXJfcGFzc3dkKGhvc3QsIHJlYWxtKQotCi0gICAgICBSZXR1cm4gaW5mb3JtYXRpb24gbmVlZGVkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciBhdCB0aGUgZ2l2ZW4gaG9zdCBpbiB0aGUKLSAgICAgIHNwZWNpZmllZCBzZWN1cml0eSByZWFsbS4gIFRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIGJlIGEgdHVwbGUsIGBgKHVzZXIsCi0gICAgICBwYXNzd29yZClgYCwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGJhc2ljIGF1dGhlbnRpY2F0aW9uLgotCi0gICAgICBUaGUgaW1wbGVtZW50YXRpb24gcHJvbXB0cyBmb3IgdGhpcyBpbmZvcm1hdGlvbiBvbiB0aGUgdGVybWluYWw7IGFuIGFwcGxpY2F0aW9uCi0gICAgICBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFuIGFwcHJvcHJpYXRlIGludGVyYWN0aW9uIG1vZGVsIGluIHRoZSBsb2NhbAotICAgICAgZW52aXJvbm1lbnQuCi0KLQogLi4gY2xhc3M6OiBPcGVuZXJEaXJlY3RvcigpCiAKICAgIFRoZSA6Y2xhc3M6YE9wZW5lckRpcmVjdG9yYCBjbGFzcyBvcGVucyBVUkxzIHZpYSA6Y2xhc3M6YEJhc2VIYW5kbGVyYFwgcyBjaGFpbmVkCkBAIC00MjEsOSArMjg0LDEzIEBACiAgICBBIGNsYXNzIHRvIGhhbmRsZSBvcGVuaW5nIG9mIEhUVFAgVVJMcy4KIAogCi0uLiBjbGFzczo6IEhUVFBTSGFuZGxlcigpCisuLiBjbGFzczo6IEhUVFBTSGFuZGxlcihkZWJ1Z2xldmVsPTAsIGNvbnRleHQ9Tm9uZSwgY2hlY2tfaG9zdG5hbWU9Tm9uZSkKIAotICAgQSBjbGFzcyB0byBoYW5kbGUgb3BlbmluZyBvZiBIVFRQUyBVUkxzLgorICAgQSBjbGFzcyB0byBoYW5kbGUgb3BlbmluZyBvZiBIVFRQUyBVUkxzLiAgKmNvbnRleHQqIGFuZCAqY2hlY2tfaG9zdG5hbWUqCisgICBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmNsYXNzOmBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgKmNvbnRleHQqIGFuZCAqY2hlY2tfaG9zdG5hbWUqIHdlcmUgYWRkZWQuCiAKIAogLi4gY2xhc3M6OiBGaWxlSGFuZGxlcigpCkBAIC05OTQsOCArODYxLDEyIEBACiAuLiBtZXRob2Q6OiBGaWxlSGFuZGxlci5maWxlX29wZW4ocmVxKQogCiAgICBPcGVuIHRoZSBmaWxlIGxvY2FsbHksIGlmIHRoZXJlIGlzIG5vIGhvc3QgbmFtZSwgb3IgdGhlIGhvc3QgbmFtZSBpcwotICAgYGAnbG9jYWxob3N0J2BgLiBDaGFuZ2UgdGhlIHByb3RvY29sIHRvIGBgZnRwYGAgb3RoZXJ3aXNlLCBhbmQgcmV0cnkgb3BlbmluZyBpdAotICAgdXNpbmcgOmF0dHI6YHBhcmVudGAuCisgICBgYCdsb2NhbGhvc3QnYGAuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGFwcGxpY2FibGUgb25seSBmb3IgbG9jYWwgaG9zdG5hbWVzLiBXaGVuIGEgcmVtb3RlIGhvc3RuYW1lCisgICBpcyBnaXZlbiwgYW4gOmV4YzpgVVJMRXJyb3JgIGlzIHJhaXNlZC4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKIAogCiAuLiBfZnRwLWhhbmRsZXItb2JqZWN0czoKQEAgLTExMDAsNyArOTcxLDcgQEAKIAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgPj4+IHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsPSdodHRwczovL2xvY2FsaG9zdC9jZ2ktYmluL3Rlc3QuY2dpJywKLSAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgZGF0YT0nVGhpcyBkYXRhIGlzIHBhc3NlZCB0byBzdGRpbiBvZiB0aGUgQ0dJJykKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1iJ1RoaXMgZGF0YSBpcyBwYXNzZWQgdG8gc3RkaW4gb2YgdGhlIENHSScpCiAgICA+Pj4gZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKQogICAgPj4+IHByaW50KGYucmVhZCgpLmRlY29kZSgndXRmLTgnKSkKICAgIEdvdCBEYXRhOiAiVGhpcyBkYXRhIGlzIHBhc3NlZCB0byBzdGRpbiBvZiB0aGUgQ0dJIgpAQCAtMTE3NiwxMSArMTA0NywxMyBAQAogICAgPj4+IGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCJodHRwOi8vd3d3Lm11c2ktY2FsLmNvbS9jZ2ktYmluL3F1ZXJ5PyVzIiAlIHBhcmFtcykKICAgID4+PiBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCiAKLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIHRoZSBgYFBPU1RgYCBtZXRob2QgaW5zdGVhZDo6CitUaGUgZm9sbG93aW5nIGV4YW1wbGUgdXNlcyB0aGUgYGBQT1NUYGAgbWV0aG9kIGluc3RlYWQuIE5vdGUgdGhhdCBwYXJhbXMgb3V0cHV0Citmcm9tIHVybGVuY29kZSBpcyBlbmNvZGVkIHRvIGJ5dGVzIGJlZm9yZSBpdCBpcyBzZW50IHRvIHVybG9wZW4gYXMgZGF0YTo6CiAKICAgID4+PiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICAgID4+PiBpbXBvcnQgdXJsbGliLnBhcnNlCiAgICA+Pj4gcGFyYW1zID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh7J3NwYW0nOiAxLCAnZWdncyc6IDIsICdiYWNvbic6IDB9KQorICAgPj4+IHBhcmFtcyA9IHBhcmFtcy5lbmNvZGUoJ3V0Zi04JykKICAgID4+PiBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5tdXNpLWNhbC5jb20vY2dpLWJpbi9xdWVyeSIsIHBhcmFtcykKICAgID4+PiBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCiAKQEAgLTEyMDEsNiArMTA3NCwxNzAgQEAKICAgID4+PiBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKIAogCitMZWdhY3kgaW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGFyZSBwb3J0ZWQgZnJvbSB0aGUgUHl0aG9uIDIgbW9kdWxlCitgYHVybGxpYmBgIChhcyBvcHBvc2VkIHRvIGBgdXJsbGliMmBgKS4gIFRoZXkgbWlnaHQgYmVjb21lIGRlcHJlY2F0ZWQgYXQKK3NvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZS4KKworCisuLiBmdW5jdGlvbjo6IHVybHJldHJpZXZlKHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpCisKKyAgIENvcHkgYSBuZXR3b3JrIG9iamVjdCBkZW5vdGVkIGJ5IGEgVVJMIHRvIGEgbG9jYWwgZmlsZSwgaWYgbmVjZXNzYXJ5LiBJZiB0aGUgVVJMCisgICBwb2ludHMgdG8gYSBsb2NhbCBmaWxlLCBvciBhIHZhbGlkIGNhY2hlZCBjb3B5IG9mIHRoZSBvYmplY3QgZXhpc3RzLCB0aGUgb2JqZWN0CisgICBpcyBub3QgY29waWVkLiAgUmV0dXJuIGEgdHVwbGUgYGAoZmlsZW5hbWUsIGhlYWRlcnMpYGAgd2hlcmUgKmZpbGVuYW1lKiBpcyB0aGUKKyAgIGxvY2FsIGZpbGUgbmFtZSB1bmRlciB3aGljaCB0aGUgb2JqZWN0IGNhbiBiZSBmb3VuZCwgYW5kICpoZWFkZXJzKiBpcyB3aGF0ZXZlcgorICAgdGhlIDptZXRoOmBpbmZvYCBtZXRob2Qgb2YgdGhlIG9iamVjdCByZXR1cm5lZCBieSA6ZnVuYzpgdXJsb3BlbmAgcmV0dXJuZWQgKGZvcgorICAgYSByZW1vdGUgb2JqZWN0LCBwb3NzaWJseSBjYWNoZWQpLiBFeGNlcHRpb25zIGFyZSB0aGUgc2FtZSBhcyBmb3IKKyAgIDpmdW5jOmB1cmxvcGVuYC4KKworICAgVGhlIHNlY29uZCBhcmd1bWVudCwgaWYgcHJlc2VudCwgc3BlY2lmaWVzIHRoZSBmaWxlIGxvY2F0aW9uIHRvIGNvcHkgdG8gKGlmCisgICBhYnNlbnQsIHRoZSBsb2NhdGlvbiB3aWxsIGJlIGEgdGVtcGZpbGUgd2l0aCBhIGdlbmVyYXRlZCBuYW1lKS4gVGhlIHRoaXJkCisgICBhcmd1bWVudCwgaWYgcHJlc2VudCwgaXMgYSBob29rIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgb25jZSBvbgorICAgZXN0YWJsaXNobWVudCBvZiB0aGUgbmV0d29yayBjb25uZWN0aW9uIGFuZCBvbmNlIGFmdGVyIGVhY2ggYmxvY2sgcmVhZAorICAgdGhlcmVhZnRlci4gIFRoZSBob29rIHdpbGwgYmUgcGFzc2VkIHRocmVlIGFyZ3VtZW50czsgYSBjb3VudCBvZiBibG9ja3MKKyAgIHRyYW5zZmVycmVkIHNvIGZhciwgYSBibG9jayBzaXplIGluIGJ5dGVzLCBhbmQgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGZpbGUuICBUaGUKKyAgIHRoaXJkIGFyZ3VtZW50IG1heSBiZSBgYC0xYGAgb24gb2xkZXIgRlRQIHNlcnZlcnMgd2hpY2ggZG8gbm90IHJldHVybiBhIGZpbGUKKyAgIHNpemUgaW4gcmVzcG9uc2UgdG8gYSByZXRyaWV2YWwgcmVxdWVzdC4KKworICAgSWYgdGhlICp1cmwqIHVzZXMgdGhlIDpmaWxlOmBodHRwOmAgc2NoZW1lIGlkZW50aWZpZXIsIHRoZSBvcHRpb25hbCAqZGF0YSoKKyAgIGFyZ3VtZW50IG1heSBiZSBnaXZlbiB0byBzcGVjaWZ5IGEgYGBQT1NUYGAgcmVxdWVzdCAobm9ybWFsbHkgdGhlIHJlcXVlc3QgdHlwZQorICAgaXMgYGBHRVRgYCkuICBUaGUgKmRhdGEqIGFyZ3VtZW50IG11c3QgaW4gc3RhbmRhcmQKKyAgIDptaW1ldHlwZTpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBmb3JtYXQ7IHNlZSB0aGUgOmZ1bmM6YHVybGVuY29kZWAKKyAgIGZ1bmN0aW9uIGJlbG93LgorCisgICA6ZnVuYzpgdXJscmV0cmlldmVgIHdpbGwgcmFpc2UgOmV4YzpgQ29udGVudFRvb1Nob3J0RXJyb3JgIHdoZW4gaXQgZGV0ZWN0cyB0aGF0CisgICB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlICB3YXMgbGVzcyB0aGFuIHRoZSBleHBlY3RlZCBhbW91bnQgKHdoaWNoIGlzIHRoZQorICAgc2l6ZSByZXBvcnRlZCBieSBhICAqQ29udGVudC1MZW5ndGgqIGhlYWRlcikuIFRoaXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgd2hlbgorICAgdGhlICBkb3dubG9hZCBpcyBpbnRlcnJ1cHRlZC4KKworICAgVGhlICpDb250ZW50LUxlbmd0aCogaXMgdHJlYXRlZCBhcyBhIGxvd2VyIGJvdW5kOiBpZiB0aGVyZSdzIG1vcmUgZGF0YSAgdG8gcmVhZCwKKyAgIDpmdW5jOmB1cmxyZXRyaWV2ZWAgcmVhZHMgbW9yZSBkYXRhLCBidXQgaWYgbGVzcyBkYXRhIGlzIGF2YWlsYWJsZSwgIGl0IHJhaXNlcworICAgdGhlIGV4Y2VwdGlvbi4KKworICAgWW91IGNhbiBzdGlsbCByZXRyaWV2ZSB0aGUgZG93bmxvYWRlZCBkYXRhIGluIHRoaXMgY2FzZSwgaXQgaXMgc3RvcmVkICBpbiB0aGUKKyAgIDphdHRyOmBjb250ZW50YCBhdHRyaWJ1dGUgb2YgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZS4KKworICAgSWYgbm8gKkNvbnRlbnQtTGVuZ3RoKiBoZWFkZXIgd2FzIHN1cHBsaWVkLCA6ZnVuYzpgdXJscmV0cmlldmVgIGNhbiBub3QgY2hlY2sKKyAgIHRoZSBzaXplIG9mIHRoZSBkYXRhIGl0IGhhcyBkb3dubG9hZGVkLCBhbmQganVzdCByZXR1cm5zIGl0LiAgSW4gdGhpcyBjYXNlCisgICB5b3UganVzdCBoYXZlIHRvIGFzc3VtZSB0aGF0IHRoZSBkb3dubG9hZCB3YXMgc3VjY2Vzc2Z1bC4KKworLi4gZnVuY3Rpb246OiB1cmxjbGVhbnVwKCkKKworICAgQ2xlYXIgdGhlIGNhY2hlIHRoYXQgbWF5IGhhdmUgYmVlbiBidWlsdCB1cCBieSBwcmV2aW91cyBjYWxscyB0bworICAgOmZ1bmM6YHVybHJldHJpZXZlYC4KKworLi4gY2xhc3M6OiBVUkxvcGVuZXIocHJveGllcz1Ob25lLCAqKng1MDkpCisKKyAgIEJhc2UgY2xhc3MgZm9yIG9wZW5pbmcgYW5kIHJlYWRpbmcgVVJMcy4gIFVubGVzcyB5b3UgbmVlZCB0byBzdXBwb3J0IG9wZW5pbmcKKyAgIG9iamVjdHMgdXNpbmcgc2NoZW1lcyBvdGhlciB0aGFuIDpmaWxlOmBodHRwOmAsIDpmaWxlOmBmdHA6YCwgb3IgOmZpbGU6YGZpbGU6YCwKKyAgIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYC4KKworICAgQnkgZGVmYXVsdCwgdGhlIDpjbGFzczpgVVJMb3BlbmVyYCBjbGFzcyBzZW5kcyBhIDptYWlsaGVhZGVyOmBVc2VyLUFnZW50YCBoZWFkZXIKKyAgIG9mIGBgdXJsbGliL1ZWVmBgLCB3aGVyZSAqVlZWKiBpcyB0aGUgOm1vZDpgdXJsbGliYCB2ZXJzaW9uIG51bWJlci4KKyAgIEFwcGxpY2F0aW9ucyBjYW4gZGVmaW5lIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgVXNlci1BZ2VudGAgaGVhZGVyIGJ5IHN1YmNsYXNzaW5nCisgICA6Y2xhc3M6YFVSTG9wZW5lcmAgb3IgOmNsYXNzOmBGYW5jeVVSTG9wZW5lcmAgYW5kIHNldHRpbmcgdGhlIGNsYXNzIGF0dHJpYnV0ZQorICAgOmF0dHI6YHZlcnNpb25gIHRvIGFuIGFwcHJvcHJpYXRlIHN0cmluZyB2YWx1ZSBpbiB0aGUgc3ViY2xhc3MgZGVmaW5pdGlvbi4KKworICAgVGhlIG9wdGlvbmFsICpwcm94aWVzKiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIHNjaGVtZSBuYW1lcyB0bworICAgcHJveHkgVVJMcywgd2hlcmUgYW4gZW1wdHkgZGljdGlvbmFyeSB0dXJucyBwcm94aWVzIG9mZiBjb21wbGV0ZWx5LiAgSXRzIGRlZmF1bHQKKyAgIHZhbHVlIGlzIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIGVudmlyb25tZW50YWwgcHJveHkgc2V0dGluZ3Mgd2lsbCBiZSB1c2VkIGlmCisgICBwcmVzZW50LCBhcyBkaXNjdXNzZWQgaW4gdGhlIGRlZmluaXRpb24gb2YgOmZ1bmM6YHVybG9wZW5gLCBhYm92ZS4KKworICAgQWRkaXRpb25hbCBrZXl3b3JkIHBhcmFtZXRlcnMsIGNvbGxlY3RlZCBpbiAqeDUwOSosIG1heSBiZSB1c2VkIGZvcgorICAgYXV0aGVudGljYXRpb24gb2YgdGhlIGNsaWVudCB3aGVuIHVzaW5nIHRoZSA6ZmlsZTpgaHR0cHM6YCBzY2hlbWUuICBUaGUga2V5d29yZHMKKyAgICprZXlfZmlsZSogYW5kICpjZXJ0X2ZpbGUqIGFyZSBzdXBwb3J0ZWQgdG8gcHJvdmlkZSBhbiAgU1NMIGtleSBhbmQgY2VydGlmaWNhdGU7CisgICBib3RoIGFyZSBuZWVkZWQgdG8gc3VwcG9ydCBjbGllbnQgYXV0aGVudGljYXRpb24uCisKKyAgIDpjbGFzczpgVVJMb3BlbmVyYCBvYmplY3RzIHdpbGwgcmFpc2UgYW4gOmV4YzpgSU9FcnJvcmAgZXhjZXB0aW9uIGlmIHRoZSBzZXJ2ZXIKKyAgIHJldHVybnMgYW4gZXJyb3IgY29kZS4KKworICAgIC4uIG1ldGhvZDo6IG9wZW4oZnVsbHVybCwgZGF0YT1Ob25lKQorCisgICAgICAgT3BlbiAqZnVsbHVybCogdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHByb3RvY29sLiAgVGhpcyBtZXRob2Qgc2V0cyB1cCBjYWNoZSBhbmQKKyAgICAgICBwcm94eSBpbmZvcm1hdGlvbiwgdGhlbiBjYWxscyB0aGUgYXBwcm9wcmlhdGUgb3BlbiBtZXRob2Qgd2l0aCBpdHMgaW5wdXQKKyAgICAgICBhcmd1bWVudHMuICBJZiB0aGUgc2NoZW1lIGlzIG5vdCByZWNvZ25pemVkLCA6bWV0aDpgb3Blbl91bmtub3duYCBpcyBjYWxsZWQuCisgICAgICAgVGhlICpkYXRhKiBhcmd1bWVudCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGUgKmRhdGEqIGFyZ3VtZW50IG9mCisgICAgICAgOmZ1bmM6YHVybG9wZW5gLgorCisKKyAgICAuLiBtZXRob2Q6OiBvcGVuX3Vua25vd24oZnVsbHVybCwgZGF0YT1Ob25lKQorCisgICAgICAgT3ZlcnJpZGFibGUgaW50ZXJmYWNlIHRvIG9wZW4gdW5rbm93biBVUkwgdHlwZXMuCisKKworICAgIC4uIG1ldGhvZDo6IHJldHJpZXZlKHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpCisKKyAgICAgICBSZXRyaWV2ZXMgdGhlIGNvbnRlbnRzIG9mICp1cmwqIGFuZCBwbGFjZXMgaXQgaW4gKmZpbGVuYW1lKi4gIFRoZSByZXR1cm4gdmFsdWUKKyAgICAgICBpcyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYSBsb2NhbCBmaWxlbmFtZSBhbmQgZWl0aGVyIGEKKyAgICAgICA6Y2xhc3M6YGVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIGhlYWRlcnMgKGZvciByZW1vdGUKKyAgICAgICBVUkxzKSBvciBgYE5vbmVgYCAoZm9yIGxvY2FsIFVSTHMpLiAgVGhlIGNhbGxlciBtdXN0IHRoZW4gb3BlbiBhbmQgcmVhZCB0aGUKKyAgICAgICBjb250ZW50cyBvZiAqZmlsZW5hbWUqLiAgSWYgKmZpbGVuYW1lKiBpcyBub3QgZ2l2ZW4gYW5kIHRoZSBVUkwgcmVmZXJzIHRvIGEKKyAgICAgICBsb2NhbCBmaWxlLCB0aGUgaW5wdXQgZmlsZW5hbWUgaXMgcmV0dXJuZWQuICBJZiB0aGUgVVJMIGlzIG5vbi1sb2NhbCBhbmQKKyAgICAgICAqZmlsZW5hbWUqIGlzIG5vdCBnaXZlbiwgdGhlIGZpbGVuYW1lIGlzIHRoZSBvdXRwdXQgb2YgOmZ1bmM6YHRlbXBmaWxlLm1rdGVtcGAKKyAgICAgICB3aXRoIGEgc3VmZml4IHRoYXQgbWF0Y2hlcyB0aGUgc3VmZml4IG9mIHRoZSBsYXN0IHBhdGggY29tcG9uZW50IG9mIHRoZSBpbnB1dAorICAgICAgIFVSTC4gIElmICpyZXBvcnRob29rKiBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIGFjY2VwdGluZyB0aHJlZSBudW1lcmljCisgICAgICAgcGFyYW1ldGVycy4gIEl0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIGVhY2ggY2h1bmsgb2YgZGF0YSBpcyByZWFkIGZyb20gdGhlCisgICAgICAgbmV0d29yay4gICpyZXBvcnRob29rKiBpcyBpZ25vcmVkIGZvciBsb2NhbCBVUkxzLgorCisgICAgICAgSWYgdGhlICp1cmwqIHVzZXMgdGhlIDpmaWxlOmBodHRwOmAgc2NoZW1lIGlkZW50aWZpZXIsIHRoZSBvcHRpb25hbCAqZGF0YSoKKyAgICAgICBhcmd1bWVudCBtYXkgYmUgZ2l2ZW4gdG8gc3BlY2lmeSBhIGBgUE9TVGBgIHJlcXVlc3QgKG5vcm1hbGx5IHRoZSByZXF1ZXN0IHR5cGUKKyAgICAgICBpcyBgYEdFVGBgKS4gIFRoZSAqZGF0YSogYXJndW1lbnQgbXVzdCBpbiBzdGFuZGFyZAorICAgICAgIDptaW1ldHlwZTpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBmb3JtYXQ7IHNlZSB0aGUgOmZ1bmM6YHVybGVuY29kZWAKKyAgICAgICBmdW5jdGlvbiBiZWxvdy4KKworCisgICAgLi4gYXR0cmlidXRlOjogdmVyc2lvbgorCisgICAgICAgVmFyaWFibGUgdGhhdCBzcGVjaWZpZXMgdGhlIHVzZXIgYWdlbnQgb2YgdGhlIG9wZW5lciBvYmplY3QuICBUbyBnZXQKKyAgICAgICA6bW9kOmB1cmxsaWJgIHRvIHRlbGwgc2VydmVycyB0aGF0IGl0IGlzIGEgcGFydGljdWxhciB1c2VyIGFnZW50LCBzZXQgdGhpcyBpbiBhCisgICAgICAgc3ViY2xhc3MgYXMgYSBjbGFzcyB2YXJpYWJsZSBvciBpbiB0aGUgY29uc3RydWN0b3IgYmVmb3JlIGNhbGxpbmcgdGhlIGJhc2UKKyAgICAgICBjb25zdHJ1Y3Rvci4KKworCisuLiBjbGFzczo6IEZhbmN5VVJMb3BlbmVyKC4uLikKKworICAgOmNsYXNzOmBGYW5jeVVSTG9wZW5lcmAgc3ViY2xhc3NlcyA6Y2xhc3M6YFVSTG9wZW5lcmAgcHJvdmlkaW5nIGRlZmF1bHQgaGFuZGxpbmcKKyAgIGZvciB0aGUgZm9sbG93aW5nIEhUVFAgcmVzcG9uc2UgY29kZXM6IDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgNDAxLiAgRm9yIHRoZSAzMHgKKyAgIHJlc3BvbnNlIGNvZGVzIGxpc3RlZCBhYm92ZSwgdGhlIDptYWlsaGVhZGVyOmBMb2NhdGlvbmAgaGVhZGVyIGlzIHVzZWQgdG8gZmV0Y2gKKyAgIHRoZSBhY3R1YWwgVVJMLiAgRm9yIDQwMSByZXNwb25zZSBjb2RlcyAoYXV0aGVudGljYXRpb24gcmVxdWlyZWQpLCBiYXNpYyBIVFRQCisgICBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQuICBGb3IgdGhlIDMweCByZXNwb25zZSBjb2RlcywgcmVjdXJzaW9uIGlzIGJvdW5kZWQKKyAgIGJ5IHRoZSB2YWx1ZSBvZiB0aGUgKm1heHRyaWVzKiBhdHRyaWJ1dGUsIHdoaWNoIGRlZmF1bHRzIHRvIDEwLgorCisgICBGb3IgYWxsIG90aGVyIHJlc3BvbnNlIGNvZGVzLCB0aGUgbWV0aG9kIDptZXRoOmBodHRwX2Vycm9yX2RlZmF1bHRgIGlzIGNhbGxlZAorICAgd2hpY2ggeW91IGNhbiBvdmVycmlkZSBpbiBzdWJjbGFzc2VzIHRvIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseS4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIEFjY29yZGluZyB0byB0aGUgbGV0dGVyIG9mIDpyZmM6YDI2MTZgLCAzMDEgYW5kIDMwMiByZXNwb25zZXMgdG8gUE9TVCByZXF1ZXN0cworICAgICAgbXVzdCBub3QgYmUgYXV0b21hdGljYWxseSByZWRpcmVjdGVkIHdpdGhvdXQgY29uZmlybWF0aW9uIGJ5IHRoZSB1c2VyLiAgSW4KKyAgICAgIHJlYWxpdHksIGJyb3dzZXJzIGRvIGFsbG93IGF1dG9tYXRpYyByZWRpcmVjdGlvbiBvZiB0aGVzZSByZXNwb25zZXMsIGNoYW5naW5nCisgICAgICB0aGUgUE9TVCB0byBhIEdFVCwgYW5kIDptb2Q6YHVybGxpYmAgcmVwcm9kdWNlcyB0aGlzIGJlaGF2aW91ci4KKworICAgVGhlIHBhcmFtZXRlcnMgdG8gdGhlIGNvbnN0cnVjdG9yIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBmb3IgOmNsYXNzOmBVUkxvcGVuZXJgLgorCisgICAuLiBub3RlOjoKKworICAgICAgV2hlbiBwZXJmb3JtaW5nIGJhc2ljIGF1dGhlbnRpY2F0aW9uLCBhIDpjbGFzczpgRmFuY3lVUkxvcGVuZXJgIGluc3RhbmNlIGNhbGxzCisgICAgICBpdHMgOm1ldGg6YHByb21wdF91c2VyX3Bhc3N3ZGAgbWV0aG9kLiAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gYXNrcyB0aGUKKyAgICAgIHVzZXJzIGZvciB0aGUgcmVxdWlyZWQgaW5mb3JtYXRpb24gb24gdGhlIGNvbnRyb2xsaW5nIHRlcm1pbmFsLiAgQSBzdWJjbGFzcyBtYXkKKyAgICAgIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIHN1cHBvcnQgbW9yZSBhcHByb3ByaWF0ZSBiZWhhdmlvciBpZiBuZWVkZWQuCisKKyAgIFRoZSA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYCBjbGFzcyBvZmZlcnMgb25lIGFkZGl0aW9uYWwgbWV0aG9kIHRoYXQgc2hvdWxkIGJlCisgICBvdmVybG9hZGVkIHRvIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIGJlaGF2aW9yOgorCisgICAuLiBtZXRob2Q6OiBwcm9tcHRfdXNlcl9wYXNzd2QoaG9zdCwgcmVhbG0pCisKKyAgICAgIFJldHVybiBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyIGF0IHRoZSBnaXZlbiBob3N0IGluIHRoZQorICAgICAgc3BlY2lmaWVkIHNlY3VyaXR5IHJlYWxtLiAgVGhlIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgYSB0dXBsZSwgYGAodXNlciwKKyAgICAgIHBhc3N3b3JkKWBgLCB3aGljaCBjYW4gYmUgdXNlZCBmb3IgYmFzaWMgYXV0aGVudGljYXRpb24uCisKKyAgICAgIFRoZSBpbXBsZW1lbnRhdGlvbiBwcm9tcHRzIGZvciB0aGlzIGluZm9ybWF0aW9uIG9uIHRoZSB0ZXJtaW5hbDsgYW4gYXBwbGljYXRpb24KKyAgICAgIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB0byB1c2UgYW4gYXBwcm9wcmlhdGUgaW50ZXJhY3Rpb24gbW9kZWwgaW4gdGhlIGxvY2FsCisgICAgICBlbnZpcm9ubWVudC4KKworCiA6bW9kOmB1cmxsaWIucmVxdWVzdGAgUmVzdHJpY3Rpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3V1LnJzdCBiL0RvYy9saWJyYXJ5L3V1LnJzdAppbmRleCA3ODEzZTQ0Li5kNjFjMTc4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91dS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXUucnN0CkBAIC01LDYgKzUsOSBAQAogICAgOnN5bm9wc2lzOiBFbmNvZGUgYW5kIGRlY29kZSBmaWxlcyBpbiB1dWVuY29kZSBmb3JtYXQuCiAuLiBtb2R1bGVhdXRob3I6OiBMYW5jZSBFbGxpbmdob3VzZQogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi91dS5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZW5jb2RlcyBhbmQgZGVjb2RlcyBmaWxlcyBpbiB1dWVuY29kZSBmb3JtYXQsIGFsbG93aW5nIGFyYml0cmFyeQogYmluYXJ5IGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQgb3ZlciBBU0NJSS1vbmx5IGNvbm5lY3Rpb25zLiBXaGVyZXZlciBhIGZpbGUKQEAgLTU2LDQgKzU5LDMgQEAKIAogICAgTW9kdWxlIDptb2Q6YGJpbmFzY2lpYAogICAgICAgU3VwcG9ydCBtb2R1bGUgY29udGFpbmluZyBBU0NJSS10by1iaW5hcnkgYW5kIGJpbmFyeS10by1BU0NJSSBjb252ZXJzaW9ucy4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0IGIvRG9jL2xpYnJhcnkvd2FybmluZ3MucnN0CmluZGV4IGU2MmJlNTUuLjI3NDg0MGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dhcm5pbmdzLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXJuaW5ncy5yc3QKQEAgLTYsNiArNiw5IEBACiAuLiBtb2R1bGU6OiB3YXJuaW5ncwogICAgOnN5bm9wc2lzOiBJc3N1ZSB3YXJuaW5nIG1lc3NhZ2VzIGFuZCBjb250cm9sIHRoZWlyIGRpc3Bvc2l0aW9uLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi93YXJuaW5ncy5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogV2FybmluZyBtZXNzYWdlcyBhcmUgdHlwaWNhbGx5IGlzc3VlZCBpbiBzaXR1YXRpb25zIHdoZXJlIGl0IGlzIHVzZWZ1bCB0byBhbGVydAogdGhlIHVzZXIgb2Ygc29tZSBjb25kaXRpb24gaW4gYSBwcm9ncmFtLCB3aGVyZSB0aGF0IGNvbmRpdGlvbiAobm9ybWFsbHkpIGRvZXNuJ3QKQEAgLTEzLDcgKzE2LDcgQEAKIG1pZ2h0IHdhbnQgdG8gaXNzdWUgYSB3YXJuaW5nIHdoZW4gYSBwcm9ncmFtIHVzZXMgYW4gb2Jzb2xldGUgbW9kdWxlLgogCiBQeXRob24gcHJvZ3JhbW1lcnMgaXNzdWUgd2FybmluZ3MgYnkgY2FsbGluZyB0aGUgOmZ1bmM6YHdhcm5gIGZ1bmN0aW9uIGRlZmluZWQKLWluIHRoaXMgbW9kdWxlLiAgKEMgcHJvZ3JhbW1lcnMgdXNlIDpjZnVuYzpgUHlFcnJfV2FybkV4YDsgc2VlCitpbiB0aGlzIG1vZHVsZS4gIChDIHByb2dyYW1tZXJzIHVzZSA6YzpmdW5jOmBQeUVycl9XYXJuRXhgOyBzZWUKIDpyZWY6YGV4Y2VwdGlvbmhhbmRsaW5nYCBmb3IgZGV0YWlscykuCiAKIFdhcm5pbmcgbWVzc2FnZXMgYXJlIG5vcm1hbGx5IHdyaXR0ZW4gdG8gYGBzeXMuc3RkZXJyYGAsIGJ1dCB0aGVpciBkaXNwb3NpdGlvbgpAQCAtNTcsNyArNjAsNyBAQAogfCA6ZXhjOmBVc2VyV2FybmluZ2AgICAgICAgICAgICAgICB8IFRoZSBkZWZhdWx0IGNhdGVnb3J5IGZvciA6ZnVuYzpgd2FybmAuICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCAgICAgICAgfCBCYXNlIGNhdGVnb3J5IGZvciB3YXJuaW5ncyBhYm91dCBkZXByZWNhdGVkICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZlYXR1cmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZmVhdHVyZXMgKGlnbm9yZWQgYnkgZGVmYXVsdCkuICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZXhjOmBTeW50YXhXYXJuaW5nYCAgICAgICAgICAgICB8IEJhc2UgY2F0ZWdvcnkgZm9yIHdhcm5pbmdzIGFib3V0IGR1YmlvdXMgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3ludGFjdGljIGZlYXR1cmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKQEAgLTgyLDYgKzg1LDkgQEAKIHwgOmV4YzpgQnl0ZXNXYXJuaW5nYCAgICAgICAgICAgICAgfCBCYXNlIGNhdGVnb3J5IGZvciB3YXJuaW5ncyByZWxhdGVkIHRvICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YGJ1ZmZlcmAuICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCAgICAgICAgICAgfCBCYXNlIGNhdGVnb3J5IGZvciB3YXJuaW5ncyByZWxhdGVkIHRvICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc291cmNlIHVzYWdlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCiBXaGlsZSB0aGVzZSBhcmUgdGVjaG5pY2FsbHkgYnVpbHQtaW4gZXhjZXB0aW9ucywgdGhleSBhcmUgZG9jdW1lbnRlZCBoZXJlLApAQCAtMTUwLDE0ICsxNTYsNiBAQAogOm1vZDpgd2FybmluZ3NgIG1vZHVsZSBwYXJzZXMgdGhlc2Ugd2hlbiBpdCBpcyBmaXJzdCBpbXBvcnRlZCAoaW52YWxpZCBvcHRpb25zCiBhcmUgaWdub3JlZCwgYWZ0ZXIgcHJpbnRpbmcgYSBtZXNzYWdlIHRvIGBgc3lzLnN0ZGVycmBgKS4KIAotVGhlIHdhcm5pbmdzIHRoYXQgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdCBtYXkgYmUgZW5hYmxlZCBieSBwYXNzaW5nIDpvcHRpb246YC1XZGAKLXRvIHRoZSBpbnRlcnByZXRlci4gVGhpcyBlbmFibGVzIGRlZmF1bHQgaGFuZGxpbmcgZm9yIGFsbCB3YXJuaW5ncywgaW5jbHVkaW5nCi10aG9zZSB0aGF0IGFyZSBub3JtYWxseSBpZ25vcmVkIGJ5IGRlZmF1bHQuIFRoaXMgaXMgcGFydGljdWxhciB1c2VmdWwgZm9yCi1lbmFibGluZyBJbXBvcnRXYXJuaW5nIHdoZW4gZGVidWdnaW5nIHByb2JsZW1zIGltcG9ydGluZyBhIGRldmVsb3BlZCBwYWNrYWdlLgotSW1wb3J0V2FybmluZyBjYW4gYWxzbyBiZSBlbmFibGVkIGV4cGxpY2l0bHkgaW4gUHl0aG9uIGNvZGUgdXNpbmc6OgotCi0gICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2RlZmF1bHQnLCBJbXBvcnRXYXJuaW5nKQotCiAKIERlZmF1bHQgV2FybmluZyBGaWx0ZXJzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMTY2LDEyICsxNjQsMTkgQEAKIHRoZSBjb21tYW5kLWxpbmUgb3B0aW9ucyBwYXNzZWQgdG8gOm9wdGlvbjpgLVdgIGFuZCBjYWxscyB0bwogOmZ1bmM6YGZpbHRlcndhcm5pbmdzYC4KIAotKiA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCwgYW5kIDpleGM6YEltcG9ydFdhcm5pbmdgIGFyZSBpZ25vcmVkLgorKiA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIGFuZCA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYCwgYW5kCisgIDpleGM6YEltcG9ydFdhcm5pbmdgIGFyZSBpZ25vcmVkLgogCiAqIDpleGM6YEJ5dGVzV2FybmluZ2AgaXMgaWdub3JlZCB1bmxlc3MgdGhlIDpvcHRpb246YC1iYCBvcHRpb24gaXMgZ2l2ZW4gb25jZSBvcgogICB0d2ljZTsgaW4gdGhpcyBjYXNlIHRoaXMgd2FybmluZyBpcyBlaXRoZXIgcHJpbnRlZCAoYGAtYmBgKSBvciB0dXJuZWQgaW50byBhbgogICBleGNlcHRpb24gKGBgLWJiYGApLgogCisqIDpleGM6YFJlc291cmNlV2FybmluZ2AgaXMgaWdub3JlZCB1bmxlc3MgUHl0aG9uIHdhcyBidWlsdCBpbiBkZWJ1ZyBtb2RlLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBpcyBub3cgaWdub3JlZCBieSBkZWZhdWx0IGluIGFkZGl0aW9uIHRvCisgICA6ZXhjOmBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nYC4KKwogCiAuLiBfd2FybmluZy1zdXBwcmVzczoKIApAQCAtMTk0LDcgKzE5OSwxMCBAQAogV2hpbGUgd2l0aGluIHRoZSBjb250ZXh0IG1hbmFnZXIgYWxsIHdhcm5pbmdzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQuIFRoaXMKIGFsbG93cyB5b3UgdG8gdXNlIGtub3duLWRlcHJlY2F0ZWQgY29kZSB3aXRob3V0IGhhdmluZyB0byBzZWUgdGhlIHdhcm5pbmcgd2hpbGUKIG5vdCBzdXBwcmVzc2luZyB0aGUgd2FybmluZyBmb3Igb3RoZXIgY29kZSB0aGF0IG1pZ2h0IG5vdCBiZSBhd2FyZSBvZiBpdHMgdXNlCi1vZiBkZXByZWNhdGVkIGNvZGUuCitvZiBkZXByZWNhdGVkIGNvZGUuICBOb3RlOiB0aGlzIGNhbiBvbmx5IGJlIGd1YXJhbnRlZWQgaW4gYSBzaW5nbGUtdGhyZWFkZWQKK2FwcGxpY2F0aW9uLiBJZiB0d28gb3IgbW9yZSB0aHJlYWRzIHVzZSB0aGUgOmNsYXNzOmBjYXRjaF93YXJuaW5nc2AgY29udGV4dAorbWFuYWdlciBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgorCiAKIAogLi4gX3dhcm5pbmctdGVzdGluZzoKQEAgLTIzMiw3ICsyNDAsOSBAQAogd2hlbiB0aGUgY29udGV4dCB3YXMgZW50ZXJlZC4gVGhpcyBwcmV2ZW50cyB0ZXN0cyBmcm9tIGNoYW5naW5nIHRoZSB3YXJuaW5ncwogZmlsdGVyIGluIHVuZXhwZWN0ZWQgd2F5cyBiZXR3ZWVuIHRlc3RzIGFuZCBsZWFkaW5nIHRvIGluZGV0ZXJtaW5hdGUgdGVzdAogcmVzdWx0cy4gVGhlIDpmdW5jOmBzaG93d2FybmluZ2AgZnVuY3Rpb24gaW4gdGhlIG1vZHVsZSBpcyBhbHNvIHJlc3RvcmVkIHRvCi1pdHMgb3JpZ2luYWwgdmFsdWUuCitpdHMgb3JpZ2luYWwgdmFsdWUuICBOb3RlOiB0aGlzIGNhbiBvbmx5IGJlIGd1YXJhbnRlZWQgaW4gYSBzaW5nbGUtdGhyZWFkZWQKK2FwcGxpY2F0aW9uLiBJZiB0d28gb3IgbW9yZSB0aHJlYWRzIHVzZSB0aGUgOmNsYXNzOmBjYXRjaF93YXJuaW5nc2AgY29udGV4dAorbWFuYWdlciBhdCB0aGUgc2FtZSB0aW1lLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLgogCiBXaGVuIHRlc3RpbmcgbXVsdGlwbGUgb3BlcmF0aW9ucyB0aGF0IHJhaXNlIHRoZSBzYW1lIGtpbmQgb2Ygd2FybmluZywgaXQKIGlzIGltcG9ydGFudCB0byB0ZXN0IHRoZW0gaW4gYSBtYW5uZXIgdGhhdCBjb25maXJtcyBlYWNoIG9wZXJhdGlvbiBpcyByYWlzaW5nCkBAIC0yNDIsNiArMjUyLDQyIEBACiBlbnRyaWVzIGZyb20gdGhlIHdhcm5pbmdzIGxpc3QgYmVmb3JlIGVhY2ggbmV3IG9wZXJhdGlvbikuCiAKIAorLi4gX3dhcm5pbmctaWdub3JlZDoKKworVXBkYXRpbmcgQ29kZSBGb3IgTmV3IFZlcnNpb25zIG9mIFB5dGhvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXYXJuaW5ncyB0aGF0IGFyZSBvbmx5IG9mIGludGVyZXN0IHRvIHRoZSBkZXZlbG9wZXIgYXJlIGlnbm9yZWQgYnkgZGVmYXVsdC4gQXMKK3N1Y2ggeW91IHNob3VsZCBtYWtlIHN1cmUgdG8gdGVzdCB5b3VyIGNvZGUgd2l0aCB0eXBpY2FsbHkgaWdub3JlZCB3YXJuaW5ncworbWFkZSB2aXNpYmxlLiBZb3UgY2FuIGRvIHRoaXMgZnJvbSB0aGUgY29tbWFuZC1saW5lIGJ5IHBhc3NpbmcgOm9wdGlvbjpgLVdkYAordG8gdGhlIGludGVycHJldGVyICh0aGlzIGlzIHNob3J0aGFuZCBmb3IgOm9wdGlvbjpgLVcgZGVmYXVsdGApLiAgVGhpcyBlbmFibGVzCitkZWZhdWx0IGhhbmRsaW5nIGZvciBhbGwgd2FybmluZ3MsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuCitUbyBjaGFuZ2Ugd2hhdCBhY3Rpb24gaXMgdGFrZW4gZm9yIGVuY291bnRlcmVkIHdhcm5pbmdzIHlvdSBzaW1wbHkgY2hhbmdlIHdoYXQKK2FyZ3VtZW50IGlzIHBhc3NlZCB0byA6b3B0aW9uOmAtV2AsIGUuZy4gOm9wdGlvbjpgLVcgZXJyb3JgLiBTZWUgdGhlCis6b3B0aW9uOmAtV2AgZmxhZyBmb3IgbW9yZSBkZXRhaWxzIG9uIHdoYXQgaXMgcG9zc2libGUuCisKK1RvIHByb2dyYW1tYXRpY2FsbHkgZG8gdGhlIHNhbWUgYXMgOm9wdGlvbjpgLVdkYCwgdXNlOjoKKworICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2RlZmF1bHQnKQorCitNYWtlIHN1cmUgdG8gZXhlY3V0ZSB0aGlzIGNvZGUgYXMgc29vbiBhcyBwb3NzaWJsZS4gVGhpcyBwcmV2ZW50cyB0aGUKK3JlZ2lzdGVyaW5nIG9mIHdoYXQgd2FybmluZ3MgaGF2ZSBiZWVuIHJhaXNlZCBmcm9tIHVuZXhwZWN0ZWRseSBpbmZsdWVuY2luZyBob3cKK2Z1dHVyZSB3YXJuaW5ncyBhcmUgdHJlYXRlZC4KKworSGF2aW5nIGNlcnRhaW4gd2FybmluZ3MgaWdub3JlZCBieSBkZWZhdWx0IGlzIGRvbmUgdG8gcHJldmVudCBhIHVzZXIgZnJvbQorc2VlaW5nIHdhcm5pbmdzIHRoYXQgYXJlIG9ubHkgb2YgaW50ZXJlc3QgdG8gdGhlIGRldmVsb3Blci4gQXMgeW91IGRvIG5vdAorbmVjZXNzYXJpbHkgaGF2ZSBjb250cm9sIG92ZXIgd2hhdCBpbnRlcnByZXRlciBhIHVzZXIgdXNlcyB0byBydW4gdGhlaXIgY29kZSwKK2l0IGlzIHBvc3NpYmxlIHRoYXQgYSBuZXcgdmVyc2lvbiBvZiBQeXRob24gd2lsbCBiZSByZWxlYXNlZCBiZXR3ZWVuIHlvdXIKK3JlbGVhc2UgY3ljbGVzLiAgVGhlIG5ldyBpbnRlcnByZXRlciByZWxlYXNlIGNvdWxkIHRyaWdnZXIgbmV3IHdhcm5pbmdzIGluIHlvdXIKK2NvZGUgdGhhdCB3ZXJlIG5vdCB0aGVyZSBpbiBhbiBvbGRlciBpbnRlcnByZXRlciwgZS5nLgorOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBmb3IgYSBtb2R1bGUgdGhhdCB5b3UgYXJlIHVzaW5nLiBXaGlsZSB5b3UgYXMgYQorZGV2ZWxvcGVyIHdhbnQgdG8gYmUgbm90aWZpZWQgdGhhdCB5b3VyIGNvZGUgaXMgdXNpbmcgYSBkZXByZWNhdGVkIG1vZHVsZSwgdG8gYQordXNlciB0aGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbGx5IG5vaXNlIGFuZCBwcm92aWRlcyBubyBiZW5lZml0IHRvIHRoZW0uCisKK1RoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIGhhcyBiZWVuIGFsc28gdXBkYXRlZCB0byB1c2UgdGhlIGBgJ2RlZmF1bHQnYGAKK2ZpbHRlciB3aGlsZSBydW5uaW5nIHRlc3RzLgorCisKIC4uIF93YXJuaW5nLWZ1bmN0aW9uczoKIAogQXZhaWxhYmxlIEZ1bmN0aW9ucwpAQCAtMzUxLDMgKzM5NywxMSBAQAogICAgIG1vZHVsZSByZXR1cm5lZCB3aGVuIHlvdSBpbXBvcnQgOm1vZDpgd2FybmluZ3NgIHdob3NlIGZpbHRlciB3aWxsIGJlCiAgICAgcHJvdGVjdGVkLiBUaGlzIGFyZ3VtZW50IGV4aXN0cyBwcmltYXJpbHkgZm9yIHRlc3RpbmcgdGhlIDptb2Q6YHdhcm5pbmdzYAogICAgIG1vZHVsZSBpdHNlbGYuCisKKyAgICAuLiBub3RlOjoKKworICAgICAgICBUaGUgOmNsYXNzOmBjYXRjaF93YXJuaW5nc2AgbWFuYWdlciB3b3JrcyBieSByZXBsYWNpbmcgYW5kCisgICAgICAgIHRoZW4gbGF0ZXIgcmVzdG9yaW5nIHRoZSBtb2R1bGUncworICAgICAgICA6ZnVuYzpgc2hvd3dhcm5pbmdgIGZ1bmN0aW9uIGFuZCBpbnRlcm5hbCBsaXN0IG9mIGZpbHRlcgorICAgICAgICBzcGVjaWZpY2F0aW9ucy4gIFRoaXMgbWVhbnMgdGhlIGNvbnRleHQgbWFuYWdlciBpcyBtb2RpZnlpbmcKKyAgICAgICAgZ2xvYmFsIHN0YXRlIGFuZCB0aGVyZWZvcmUgaXMgbm90IHRocmVhZC1zYWZlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCA2Y2ZhMWE0Li5hZmFmYjQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtNiw2ICs2LDEwIEBACiAuLiBzZWN0aW9uYXV0aG9yOjogTW9zaGUgWmFka2EgPG1vc2hlekB6YWRrYS5zaXRlLmNvLmlsPgogLi4gRG9jdW1lbnRhdGlvbnMgc3RvbGVuIGZyb20gY29tbWVudHMgaW4gZmlsZS4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvd2F2ZS5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHdhdmVgIG1vZHVsZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgaW50ZXJmYWNlIHRvIHRoZSBXQVYgc291bmQgZm9ybWF0LgogSXQgZG9lcyBub3Qgc3VwcG9ydCBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uLCBidXQgaXQgZG9lcyBzdXBwb3J0IG1vbm8vc3RlcmVvLgogCkBAIC0xNjIsNiArMTY2LDEwIEBACiAKICAgIFNldCB0aGUgZnJhbWUgcmF0ZSB0byAqbiouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBBIG5vbi1pbnRlZ3JhbCBpbnB1dCB0byB0aGlzIG1ldGhvZCBpcyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0CisgICAgICBpbnRlZ2VyLgorCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmZyYW1lcyhuKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdCBiL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CmluZGV4IDEwYjY5YzkuLjYzNTQ1YWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dlYWtyZWYucnN0CkBAIC04LDYgKzgsOSBAQAogLi4gbW9kdWxlYXV0aG9yOjogTWFydGluIHZvbiBMw7Z3aXMgPG1hcnRpbkBsb2V3aXMuaG9tZS5jcy50dS1iZXJsaW4uZGU+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvd2Vha3JlZi5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHdlYWtyZWZgIG1vZHVsZSBhbGxvd3MgdGhlIFB5dGhvbiBwcm9ncmFtbWVyIHRvIGNyZWF0ZSA6ZGZuOmB3ZWFrCiByZWZlcmVuY2VzYCB0byBvYmplY3RzLgpAQCAtNTksOCArNjIsMTEgQEAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLAogZnJvemVuc2V0cywgc29tZSA6dGVybTpgZmlsZSBvYmplY3RzIDxmaWxlIG9iamVjdD5gLCA6dGVybTpgZ2VuZXJhdG9yYFxzLCB0eXBlCi1vYmplY3RzLCBzb2NrZXRzLCBhcnJheXMsIGRlcXVlcyBhbmQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gb2JqZWN0cy4KK29iamVjdHMsIHNvY2tldHMsIGFycmF5cywgZGVxdWVzLCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3RzLCBhbmQgY29kZQorb2JqZWN0cy4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHRocmVhZC5sb2NrLCB0aHJlYWRpbmcuTG9jaywgYW5kIGNvZGUgb2JqZWN0cy4KIAogU2V2ZXJhbCBidWlsdC1pbiB0eXBlcyBzdWNoIGFzIDpjbGFzczpgbGlzdGAgYW5kIDpjbGFzczpgZGljdGAgZG8gbm90IGRpcmVjdGx5CiBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyBidXQgY2FuIGFkZCBzdXBwb3J0IHRocm91Z2ggc3ViY2xhc3Npbmc6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2ViYnJvd3Nlci5yc3QgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAppbmRleCAyMGMwOTEzLi4yM2JhNmM1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEZyZWQgTC4gRHJha2UsIEpyLiA8ZmRyYWtlQGFjbS5vcmc+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvd2ViYnJvd3Nlci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHdlYmJyb3dzZXJgIG1vZHVsZSBwcm92aWRlcyBhIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlIHRvIGFsbG93IGRpc3BsYXlpbmcKIFdlYi1iYXNlZCBkb2N1bWVudHMgdG8gdXNlcnMuIFVuZGVyIG1vc3QgY2lyY3Vtc3RhbmNlcywgc2ltcGx5IGNhbGxpbmcgdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93aW5yZWcucnN0IGIvRG9jL2xpYnJhcnkvd2lucmVnLnJzdAppbmRleCA2OGY3ZTkxLi41Y2YzMGVlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93aW5yZWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QKQEAgLTYwLDYgKzYwLDMzIEBACiAgICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIAorLi4gZnVuY3Rpb246OiBDcmVhdGVLZXlFeChrZXksIHN1Yl9rZXksIHJlc2VydmVkPTAsIGFjY2Vzcz1LRVlfQUxMX0FDQ0VTUykKKworICAgQ3JlYXRlcyBvciBvcGVucyB0aGUgc3BlY2lmaWVkIGtleSwgcmV0dXJuaW5nIGEKKyAgIDpyZWY6YGhhbmRsZSBvYmplY3QgPGhhbmRsZS1vYmplY3Q+YC4KKworICAgKmtleSogaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3Igb25lIG9mIHRoZSBwcmVkZWZpbmVkCisgICA6cmVmOmBIS0VZXyogY29uc3RhbnRzIDxoa2V5LWNvbnN0YW50cz5gLgorCisgICAqc3ViX2tleSogaXMgYSBzdHJpbmcgdGhhdCBuYW1lcyB0aGUga2V5IHRoaXMgbWV0aG9kIG9wZW5zIG9yIGNyZWF0ZXMuCisKKyAgICpyZXMqIGlzIGEgcmVzZXJ2ZWQgaW50ZWdlciwgYW5kIG11c3QgYmUgemVyby4gVGhlIGRlZmF1bHQgaXMgemVyby4KKworICAgKnNhbSogaXMgYW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyBhbiBhY2Nlc3MgbWFzayB0aGF0IGRlc2NyaWJlcyB0aGUgZGVzaXJlZAorICAgc2VjdXJpdHkgYWNjZXNzIGZvciB0aGUga2V5LiAgRGVmYXVsdCBpcyA6Y29uc3Q6YEtFWV9BTExfQUNDRVNTYC4gIFNlZQorICAgOnJlZjpgQWNjZXNzIFJpZ2h0cyA8YWNjZXNzLXJpZ2h0cz5gIGZvciBvdGhlciBhbGxvd2VkIHZhbHVlcy4KKworICAgSWYgKmtleSogaXMgb25lIG9mIHRoZSBwcmVkZWZpbmVkIGtleXMsICpzdWJfa2V5KiBtYXkgYmUgYGBOb25lYGAuIEluIHRoYXQKKyAgIGNhc2UsIHRoZSBoYW5kbGUgcmV0dXJuZWQgaXMgdGhlIHNhbWUga2V5IGhhbmRsZSBwYXNzZWQgaW4gdG8gdGhlIGZ1bmN0aW9uLgorCisgICBJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBleGlzdGluZyBrZXkuCisKKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIGhhbmRsZSBvZiB0aGUgb3BlbmVkIGtleS4gSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhCisgICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIGZ1bmN0aW9uOjogRGVsZXRlS2V5KGtleSwgc3ViX2tleSkKIAogICAgRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS4KQEAgLTY3LDggKzk0LDggQEAKICAgICprZXkqIGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZAogICAgOnJlZjpgSEtFWV8qIGNvbnN0YW50cyA8aGtleS1jb25zdGFudHM+YC4KIAotICAgKnN1Yl9rZXkqIGlzIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBhIHN1YmtleSBvZiB0aGUga2V5ICBpZGVudGlmaWVkIGJ5IHRoZSAqa2V5KgotICAgcGFyYW1ldGVyLiAgVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSAgYGBOb25lYGAsIGFuZCB0aGUga2V5IG1heSBub3QgaGF2ZSBzdWJrZXlzLgorICAgKnN1Yl9rZXkqIGlzIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnkgdGhlICprZXkqCisgICBwYXJhbWV0ZXIuICBUaGlzIHZhbHVlIG11c3Qgbm90IGJlIGBgTm9uZWBgLCBhbmQgdGhlIGtleSBtYXkgbm90IGhhdmUgc3Via2V5cy4KIAogICAgKlRoaXMgbWV0aG9kIGNhbiBub3QgZGVsZXRlIGtleXMgd2l0aCBzdWJrZXlzLioKIApAQCAtNzYsNiArMTAzLDM5IEBACiAgICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIDpleGM6YFdpbmRvd3NFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogCisuLiBmdW5jdGlvbjo6IERlbGV0ZUtleUV4KGtleSwgc3ViX2tleSwgYWNjZXNzPUtFWV9BTExfQUNDRVNTLCByZXNlcnZlZD0wKQorCisgICBEZWxldGVzIHRoZSBzcGVjaWZpZWQga2V5LgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSA6ZnVuYzpgRGVsZXRlS2V5RXhgIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIHdpdGggdGhlIFJlZ0RlbGV0ZUtleUV4CisgICAgICBXaW5kb3dzIEFQSSBmdW5jdGlvbiwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gNjQtYml0IHZlcnNpb25zIG9mIFdpbmRvd3MuCisgICAgICBTZWUgdGhlIGBSZWdEZWxldGVLZXlFeCBkb2N1bWVudGF0aW9uCisgICAgICA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzI0ODQ3JTI4VlMuODUlMjkuYXNweD5gX18uCisKKyAgICprZXkqIGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZAorICAgOnJlZjpgSEtFWV8qIGNvbnN0YW50cyA8aGtleS1jb25zdGFudHM+YC4KKworICAgKnN1Yl9rZXkqIGlzIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBhIHN1YmtleSBvZiB0aGUga2V5IGlkZW50aWZpZWQgYnkgdGhlCisgICAqa2V5KiBwYXJhbWV0ZXIuIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgYGBOb25lYGAsIGFuZCB0aGUga2V5IG1heSBub3QgaGF2ZQorICAgc3Via2V5cy4KKworICAgKnJlcyogaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiBUaGUgZGVmYXVsdCBpcyB6ZXJvLgorCisgICAqc2FtKiBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkCisgICBzZWN1cml0eSBhY2Nlc3MgZm9yIHRoZSBrZXkuICBEZWZhdWx0IGlzIDpjb25zdDpgS0VZX0FMTF9BQ0NFU1NgLiAgU2VlCisgICA6cmVmOmBBY2Nlc3MgUmlnaHRzIDxhY2Nlc3MtcmlnaHRzPmAgZm9yIG90aGVyIGFsbG93ZWQgdmFsdWVzLgorCisgICAqVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuKgorCisgICBJZiB0aGUgbWV0aG9kIHN1Y2NlZWRzLCB0aGUgZW50aXJlIGtleSwgaW5jbHVkaW5nIGFsbCBvZiBpdHMgdmFsdWVzLCBpcworICAgcmVtb3ZlZC4gSWYgdGhlIG1ldGhvZCBmYWlscywgYSA6ZXhjOmBXaW5kb3dzRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIE9uIHVuc3VwcG9ydGVkIFdpbmRvd3MgdmVyc2lvbnMsIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIGlzIHJhaXNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gZnVuY3Rpb246OiBEZWxldGVWYWx1ZShrZXksIHZhbHVlKQogCiAgICBSZW1vdmVzIGEgbmFtZWQgdmFsdWUgZnJvbSBhIHJlZ2lzdHJ5IGtleS4KQEAgLTE4Myw3ICsyNDMsNyBAQAogICAgc3BlY2lmaWVkIGluICpmaWxlX25hbWUqIGlzIHJlbGF0aXZlIHRvIHRoZSByZW1vdGUgY29tcHV0ZXIuCiAKIAotLi4gZnVuY3Rpb246OiBPcGVuS2V5KGtleSwgc3ViX2tleVssIHJlc1ssIHNhbV1dKQorLi4gZnVuY3Rpb246OiBPcGVuS2V5KGtleSwgc3ViX2tleSwgcmVzZXJ2ZWQ9MCwgYWNjZXNzPUtFWV9BTExfQUNDRVNTKQogCiAgICBPcGVucyB0aGUgc3BlY2lmaWVkIGtleSwgcmV0dXJuaW5nIGEgOnJlZjpgaGFuZGxlIG9iamVjdCA8aGFuZGxlLW9iamVjdD5gLgogCkBAIC0yMDIsNiArMjYyLDggQEAKIAogICAgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCA6ZXhjOmBXaW5kb3dzRXJyb3JgIGlzIHJhaXNlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIgQWxsb3cgdGhlIHVzZSBvZiBuYW1lZCBhcmd1bWVudHMuCisKIAogLi4gZnVuY3Rpb246OiBPcGVuS2V5RXgoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93aW5zb3VuZC5yc3QgYi9Eb2MvbGlicmFyeS93aW5zb3VuZC5yc3QKaW5kZXggZDU0Yzk5OS4uODM1NjA2MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd2luc291bmQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dpbnNvdW5kLnJzdApAQCAtMjIsNyArMjIsNyBAQAogCiAuLiBmdW5jdGlvbjo6IFBsYXlTb3VuZChzb3VuZCwgZmxhZ3MpCiAKLSAgIENhbGwgdGhlIHVuZGVybHlpbmcgOmNmdW5jOmBQbGF5U291bmRgIGZ1bmN0aW9uIGZyb20gdGhlIFBsYXRmb3JtIEFQSS4gIFRoZQorICAgQ2FsbCB0aGUgdW5kZXJseWluZyA6YzpmdW5jOmBQbGF5U291bmRgIGZ1bmN0aW9uIGZyb20gdGhlIFBsYXRmb3JtIEFQSS4gIFRoZQogICAgKnNvdW5kKiBwYXJhbWV0ZXIgbWF5IGJlIGEgZmlsZW5hbWUsIGF1ZGlvIGRhdGEgYXMgYSBzdHJpbmcsIG9yIGBgTm9uZWBgLiAgSXRzCiAgICBpbnRlcnByZXRhdGlvbiBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiAqZmxhZ3MqLCB3aGljaCBjYW4gYmUgYSBiaXR3aXNlIE9SZWQKICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGUgKnNvdW5kKiBwYXJhbWV0ZXIgaXMKQEAgLTMyLDcgKzMyLDcgQEAKIAogLi4gZnVuY3Rpb246OiBNZXNzYWdlQmVlcCh0eXBlPU1CX09LKQogCi0gICBDYWxsIHRoZSB1bmRlcmx5aW5nIDpjZnVuYzpgTWVzc2FnZUJlZXBgIGZ1bmN0aW9uIGZyb20gdGhlIFBsYXRmb3JtIEFQSS4gIFRoaXMKKyAgIENhbGwgdGhlIHVuZGVybHlpbmcgOmM6ZnVuYzpgTWVzc2FnZUJlZXBgIGZ1bmN0aW9uIGZyb20gdGhlIFBsYXRmb3JtIEFQSS4gIFRoaXMKICAgIHBsYXlzIGEgc291bmQgYXMgc3BlY2lmaWVkIGluIHRoZSByZWdpc3RyeS4gIFRoZSAqdHlwZSogYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoCiAgICBzb3VuZCB0byBwbGF5OyBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgLTFgYCwgYGBNQl9JQ09OQVNURVJJU0tgYCwKICAgIGBgTUJfSUNPTkVYQ0xBTUFUSU9OYGAsIGBgTUJfSUNPTkhBTkRgYCwgYGBNQl9JQ09OUVVFU1RJT05gYCwgYW5kIGBgTUJfT0tgYCwgYWxsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93c2dpcmVmLnJzdCBiL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0CmluZGV4IDIzMTQ0OWMuLjM5NjllYTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0CkBAIC0yMiw3ICsyMiw3IEBACiBmb3IgbWFuaXB1bGF0aW5nIFdTR0kgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCByZXNwb25zZSBoZWFkZXJzLCBiYXNlIGNsYXNzZXMKIGZvciBpbXBsZW1lbnRpbmcgV1NHSSBzZXJ2ZXJzLCBhIGRlbW8gSFRUUCBzZXJ2ZXIgdGhhdCBzZXJ2ZXMgV1NHSSBhcHBsaWNhdGlvbnMsCiBhbmQgYSB2YWxpZGF0aW9uIHRvb2wgdGhhdCBjaGVja3MgV1NHSSBzZXJ2ZXJzIGFuZCBhcHBsaWNhdGlvbnMgZm9yIGNvbmZvcm1hbmNlCi10byB0aGUgV1NHSSBzcGVjaWZpY2F0aW9uICg6cGVwOmAzMzNgKS4KK3RvIHRoZSBXU0dJIHNwZWNpZmljYXRpb24gKDpwZXA6YDMzMzNgKS4KIAogU2VlIGh0dHA6Ly93d3cud3NnaS5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgV1NHSSwgYW5kIGxpbmtzIHRvIHR1dG9yaWFscwogYW5kIG90aGVyIHJlc291cmNlcy4KQEAgLTM5LDkgKzM5LDkgQEAKIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSB2YXJpZXR5IG9mIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggV1NHSQogZW52aXJvbm1lbnRzLiAgQSBXU0dJIGVudmlyb25tZW50IGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIEhUVFAgcmVxdWVzdAotdmFyaWFibGVzIGFzIGRlc2NyaWJlZCBpbiA6cGVwOmAzMzNgLiAgQWxsIG9mIHRoZSBmdW5jdGlvbnMgdGFraW5nIGFuICplbnZpcm9uKgordmFyaWFibGVzIGFzIGRlc2NyaWJlZCBpbiA6cGVwOmAzMzMzYC4gIEFsbCBvZiB0aGUgZnVuY3Rpb25zIHRha2luZyBhbiAqZW52aXJvbioKIHBhcmFtZXRlciBleHBlY3QgYSBXU0dJLWNvbXBsaWFudCBkaWN0aW9uYXJ5IHRvIGJlIHN1cHBsaWVkOyBwbGVhc2Ugc2VlCi06cGVwOmAzMzNgIGZvciBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24uCis6cGVwOmAzMzMzYCBmb3IgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uLgogCiAKIC4uIGZ1bmN0aW9uOjogZ3Vlc3Nfc2NoZW1lKGVudmlyb24pCkBAIC02MCw3ICs2MCw3IEBACiAuLiBmdW5jdGlvbjo6IHJlcXVlc3RfdXJpKGVudmlyb24sIGluY2x1ZGVfcXVlcnk9VHJ1ZSkKIAogICAgUmV0dXJuIHRoZSBmdWxsIHJlcXVlc3QgVVJJLCBvcHRpb25hbGx5IGluY2x1ZGluZyB0aGUgcXVlcnkgc3RyaW5nLCB1c2luZyB0aGUKLSAgIGFsZ29yaXRobSBmb3VuZCBpbiB0aGUgIlVSTCBSZWNvbnN0cnVjdGlvbiIgc2VjdGlvbiBvZiA6cGVwOmAzMzNgLiAgSWYKKyAgIGFsZ29yaXRobSBmb3VuZCBpbiB0aGUgIlVSTCBSZWNvbnN0cnVjdGlvbiIgc2VjdGlvbiBvZiA6cGVwOmAzMzMzYC4gIElmCiAgICAqaW5jbHVkZV9xdWVyeSogaXMgZmFsc2UsIHRoZSBxdWVyeSBzdHJpbmcgaXMgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgVVJJLgogCiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAgICBUaGlzIHJvdXRpbmUgYWRkcyB2YXJpb3VzIHBhcmFtZXRlcnMgcmVxdWlyZWQgZm9yIFdTR0ksIGluY2x1ZGluZyBgYEhUVFBfSE9TVGBgLAogICAgYGBTRVJWRVJfTkFNRWBgLCBgYFNFUlZFUl9QT1JUYGAsIGBgUkVRVUVTVF9NRVRIT0RgYCwgYGBTQ1JJUFRfTkFNRWBgLAotICAgYGBQQVRIX0lORk9gYCwgYW5kIGFsbCBvZiB0aGUgOnBlcDpgMzMzYFwgLWRlZmluZWQgYGB3c2dpLipgYCB2YXJpYWJsZXMuICBJdAorICAgYGBQQVRIX0lORk9gYCwgYW5kIGFsbCBvZiB0aGUgOnBlcDpgMzMzM2BcIC1kZWZpbmVkIGBgd3NnaS4qYGAgdmFyaWFibGVzLiAgSXQKICAgIG9ubHkgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkb2VzIG5vdCByZXBsYWNlIGFueSBleGlzdGluZyBzZXR0aW5ncyBmb3IKICAgIHRoZXNlIHZhcmlhYmxlcy4KIApAQCAtMTUyLDggKzE1Miw4IEBACiAgICBzdXBwb3J0IGJvdGggOm1ldGg6YF9fZ2V0aXRlbV9fYCBhbmQgOm1ldGg6YF9faXRlcl9fYCBpdGVyYXRpb24gc3R5bGVzLCBmb3IKICAgIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi4xIGFuZCBKeXRob24uIEFzIHRoZSBvYmplY3QgaXMgaXRlcmF0ZWQgb3ZlciwgdGhlCiAgICBvcHRpb25hbCAqYmxrc2l6ZSogcGFyYW1ldGVyIHdpbGwgYmUgcmVwZWF0ZWRseSBwYXNzZWQgdG8gdGhlICpmaWxlbGlrZSoKLSAgIG9iamVjdCdzIDptZXRoOmByZWFkYCBtZXRob2QgdG8gb2J0YWluIHN0cmluZ3MgdG8geWllbGQuICBXaGVuIDptZXRoOmByZWFkYAotICAgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIGl0ZXJhdGlvbiBpcyBlbmRlZCBhbmQgaXMgbm90IHJlc3VtYWJsZS4KKyAgIG9iamVjdCdzIDptZXRoOmByZWFkYCBtZXRob2QgdG8gb2J0YWluIGJ5dGVzdHJpbmdzIHRvIHlpZWxkLiAgV2hlbiA6bWV0aDpgcmVhZGAKKyAgIHJldHVybnMgYW4gZW1wdHkgYnl0ZXN0cmluZywgaXRlcmF0aW9uIGlzIGVuZGVkIGFuZCBpcyBub3QgcmVzdW1hYmxlLgogCiAgICBJZiAqZmlsZWxpa2UqIGhhcyBhIDptZXRoOmBjbG9zZWAgbWV0aG9kLCB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYWxzbyBoYXZlIGEKICAgIDptZXRoOmBjbG9zZWAgbWV0aG9kLCBhbmQgaXQgd2lsbCBpbnZva2UgdGhlICpmaWxlbGlrZSogb2JqZWN0J3MgOm1ldGg6YGNsb3NlYApAQCAtMTg3LDcgKzE4Nyw3IEBACiAuLiBjbGFzczo6IEhlYWRlcnMoaGVhZGVycykKIAogICAgQ3JlYXRlIGEgbWFwcGluZy1saWtlIG9iamVjdCB3cmFwcGluZyAqaGVhZGVycyosIHdoaWNoIG11c3QgYmUgYSBsaXN0IG9mIGhlYWRlcgotICAgbmFtZS92YWx1ZSB0dXBsZXMgYXMgZGVzY3JpYmVkIGluIDpwZXA6YDMzM2AuCisgICBuYW1lL3ZhbHVlIHR1cGxlcyBhcyBkZXNjcmliZWQgaW4gOnBlcDpgMzMzM2AuCiAKICAgIDpjbGFzczpgSGVhZGVyc2Agb2JqZWN0cyBzdXBwb3J0IHR5cGljYWwgbWFwcGluZyBvcGVyYXRpb25zIGluY2x1ZGluZwogICAgOm1ldGg6YF9fZ2V0aXRlbV9fYCwgOm1ldGg6YGdldGAsIDptZXRoOmBfX3NldGl0ZW1fX2AsIDptZXRoOmBzZXRkZWZhdWx0YCwKQEAgLTIxMCwxMSArMjEwLDExIEBACiAgICA6bWV0aDpgaXRlbXNgLCB3aGljaCBpcyB0aGUgc2FtZSBhcyB0aGUgbGVuZ3RoIG9mIHRoZSB3cmFwcGVkIGhlYWRlciBsaXN0LiAgSW4KICAgIGZhY3QsIHRoZSA6bWV0aDpgaXRlbXNgIG1ldGhvZCBqdXN0IHJldHVybnMgYSBjb3B5IG9mIHRoZSB3cmFwcGVkIGhlYWRlciBsaXN0LgogCi0gICBDYWxsaW5nIGBgc3RyKClgYCBvbiBhIDpjbGFzczpgSGVhZGVyc2Agb2JqZWN0IHJldHVybnMgYSBmb3JtYXR0ZWQgc3RyaW5nCisgICBDYWxsaW5nIGBgYnl0ZXMoKWBgIG9uIGEgOmNsYXNzOmBIZWFkZXJzYCBvYmplY3QgcmV0dXJucyBhIGZvcm1hdHRlZCBieXRlc3RyaW5nCiAgICBzdWl0YWJsZSBmb3IgdHJhbnNtaXNzaW9uIGFzIEhUVFAgcmVzcG9uc2UgaGVhZGVycy4gIEVhY2ggaGVhZGVyIGlzIHBsYWNlZCBvbiBhCiAgICBsaW5lIHdpdGggaXRzIHZhbHVlLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbiBhbmQgYSBzcGFjZS4gRWFjaCBsaW5lIGlzIHRlcm1pbmF0ZWQKLSAgIGJ5IGEgY2FycmlhZ2UgcmV0dXJuIGFuZCBsaW5lIGZlZWQsIGFuZCB0aGUgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIGJsYW5rCi0gICBsaW5lLgorICAgYnkgYSBjYXJyaWFnZSByZXR1cm4gYW5kIGxpbmUgZmVlZCwgYW5kIHRoZSBieXRlc3RyaW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBhCisgICBibGFuayBsaW5lLgogCiAgICBJbiBhZGRpdGlvbiB0byB0aGVpciBtYXBwaW5nIGludGVyZmFjZSBhbmQgZm9ybWF0dGluZyBmZWF0dXJlcywgOmNsYXNzOmBIZWFkZXJzYAogICAgb2JqZWN0cyBhbHNvIGhhdmUgdGhlIGZvbGxvd2luZyBtZXRob2RzIGZvciBxdWVyeWluZyBhbmQgYWRkaW5nIG11bHRpLXZhbHVlZApAQCAtMjcyLDcgKzI3Miw3IEBACiAgICBDcmVhdGUgYSBuZXcgV1NHSSBzZXJ2ZXIgbGlzdGVuaW5nIG9uICpob3N0KiBhbmQgKnBvcnQqLCBhY2NlcHRpbmcgY29ubmVjdGlvbnMKICAgIGZvciAqYXBwKi4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN1cHBsaWVkICpzZXJ2ZXJfY2xhc3MqLCBhbmQKICAgIHdpbGwgcHJvY2VzcyByZXF1ZXN0cyB1c2luZyB0aGUgc3BlY2lmaWVkICpoYW5kbGVyX2NsYXNzKi4gICphcHAqIG11c3QgYmUgYSBXU0dJCi0gICBhcHBsaWNhdGlvbiBvYmplY3QsIGFzIGRlZmluZWQgYnkgOnBlcDpgMzMzYC4KKyAgIGFwcGxpY2F0aW9uIG9iamVjdCwgYXMgZGVmaW5lZCBieSA6cGVwOmAzMzMzYC4KIAogICAgRXhhbXBsZSB1c2FnZTo6CiAKQEAgLTM0Niw3ICszNDYsNyBAQAogICAgICAgOmF0dHI6YGJhc2VfZW52aXJvbmAgZGljdGlvbmFyeSBhdHRyaWJ1dGUgYW5kIHRoZW4gYWRkcyB2YXJpb3VzIGhlYWRlcnMgZGVyaXZlZAogICAgICAgZnJvbSB0aGUgSFRUUCByZXF1ZXN0LiAgRWFjaCBjYWxsIHRvIHRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gYSBuZXcgZGljdGlvbmFyeQogICAgICAgY29udGFpbmluZyBhbGwgb2YgdGhlIHJlbGV2YW50IENHSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXMgc3BlY2lmaWVkIGluCi0gICAgICA6cGVwOmAzMzNgLgorICAgICAgOnBlcDpgMzMzM2AuCiAKIAogICAgLi4gbWV0aG9kOjogV1NHSVJlcXVlc3RIYW5kbGVyLmdldF9zdGRlcnIoKQpAQCAtMzc2LDcgKzM3Niw3IEBACiBnYXRld2F5IGFuZCBhIFdTR0kgYXBwbGljYXRpb24gb2JqZWN0LCB0byBjaGVjayBib3RoIHNpZGVzIGZvciBwcm90b2NvbAogY29uZm9ybWFuY2UuCiAKLU5vdGUgdGhhdCB0aGlzIHV0aWxpdHkgZG9lcyBub3QgZ3VhcmFudGVlIGNvbXBsZXRlIDpwZXA6YDMzM2AgY29tcGxpYW5jZTsgYW4KK05vdGUgdGhhdCB0aGlzIHV0aWxpdHkgZG9lcyBub3QgZ3VhcmFudGVlIGNvbXBsZXRlIDpwZXA6YDMzMzNgIGNvbXBsaWFuY2U7IGFuCiBhYnNlbmNlIG9mIGVycm9ycyBmcm9tIHRoaXMgbW9kdWxlIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBlcnJvcnMgZG8gbm90CiBleGlzdC4gIEhvd2V2ZXIsIGlmIHRoaXMgbW9kdWxlIGRvZXMgcHJvZHVjZSBhbiBlcnJvciwgdGhlbiBpdCBpcyB2aXJ0dWFsbHkKIGNlcnRhaW4gdGhhdCBlaXRoZXIgdGhlIHNlcnZlciBvciBhcHBsaWNhdGlvbiBpcyBub3QgMTAwJSBjb21wbGlhbnQuCkBAIC00MDEsNyArNDAxLDcgQEAKIAogICAgVGhpcyB3cmFwcGVyIG1heSBhbHNvIGdlbmVyYXRlIG91dHB1dCB1c2luZyB0aGUgOm1vZDpgd2FybmluZ3NgIG1vZHVsZSB0bwogICAgaW5kaWNhdGUgYmVoYXZpb3JzIHRoYXQgYXJlIHF1ZXN0aW9uYWJsZSBidXQgd2hpY2ggbWF5IG5vdCBhY3R1YWxseSBiZQotICAgcHJvaGliaXRlZCBieSA6cGVwOmAzMzNgLiAgVW5sZXNzIHRoZXkgYXJlIHN1cHByZXNzZWQgdXNpbmcgUHl0aG9uIGNvbW1hbmQtbGluZQorICAgcHJvaGliaXRlZCBieSA6cGVwOmAzMzMzYC4gIFVubGVzcyB0aGV5IGFyZSBzdXBwcmVzc2VkIHVzaW5nIFB5dGhvbiBjb21tYW5kLWxpbmUKICAgIG9wdGlvbnMgb3IgdGhlIDptb2Q6YHdhcm5pbmdzYCBBUEksIGFueSBzdWNoIHdhcm5pbmdzIHdpbGwgYmUgd3JpdHRlbiB0bwogICAgYGBzeXMuc3RkZXJyYGAgKCpub3QqIGBgd3NnaS5lcnJvcnNgYCwgdW5sZXNzIHRoZXkgaGFwcGVuIHRvIGJlIHRoZSBzYW1lCiAgICBvYmplY3QpLgpAQCAtNDU2LDYgKzQ1NiwzMiBAQAogICAgZW52aXJvbm1lbnQuCiAKIAorLi4gY2xhc3M6OiBJSVNDR0lIYW5kbGVyKCkKKworICAgQSBzcGVjaWFsaXplZCBhbHRlcm5hdGl2ZSB0byA6Y2xhc3M6YENHSUhhbmRsZXJgLCBmb3IgdXNlIHdoZW4gZGVwbG95aW5nIG9uCisgICBNaWNyb3NvZnQncyBJSVMgd2ViIHNlcnZlciwgd2l0aG91dCBoYXZpbmcgc2V0IHRoZSBjb25maWcgYWxsb3dQYXRoSW5mbworICAgb3B0aW9uIChJSVM+PTcpIG9yIG1ldGFiYXNlIGFsbG93UGF0aEluZm9Gb3JTY3JpcHRNYXBwaW5ncyAoSUlTPDcpLgorCisgICBCeSBkZWZhdWx0LCBJSVMgZ2l2ZXMgYSBgYFBBVEhfSU5GT2BgIHRoYXQgZHVwbGljYXRlcyB0aGUgYGBTQ1JJUFRfTkFNRWBgIGF0CisgICB0aGUgZnJvbnQsIGNhdXNpbmcgcHJvYmxlbXMgZm9yIFdTR0kgYXBwbGljYXRpb25zIHRoYXQgd2lzaCB0byBpbXBsZW1lbnQKKyAgIHJvdXRpbmcuIFRoaXMgaGFuZGxlciBzdHJpcHMgYW55IHN1Y2ggZHVwbGljYXRlZCBwYXRoLgorCisgICBJSVMgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gcGFzcyB0aGUgY29ycmVjdCBgYFBBVEhfSU5GT2BgLCBidXQgdGhpcyBjYXVzZXMKKyAgIGFub3RoZXIgYnVnIHdoZXJlIGBgUEFUSF9UUkFOU0xBVEVEYGAgaXMgd3JvbmcuIEx1Y2tpbHkgdGhpcyB2YXJpYWJsZSBpcworICAgcmFyZWx5IHVzZWQgYW5kIGlzIG5vdCBndWFyYW50ZWVkIGJ5IFdTR0kuIE9uIElJUzw3LCB0aG91Z2gsIHRoZQorICAgc2V0dGluZyBjYW4gb25seSBiZSBtYWRlIG9uIGEgdmhvc3QgbGV2ZWwsIGFmZmVjdGluZyBhbGwgb3RoZXIgc2NyaXB0CisgICBtYXBwaW5ncywgbWFueSBvZiB3aGljaCBicmVhayB3aGVuIGV4cG9zZWQgdG8gdGhlIGBgUEFUSF9UUkFOU0xBVEVEYGAgYnVnLgorICAgRm9yIHRoaXMgcmVhc29uIElJUzw3IGlzIGFsbW9zdCBuZXZlciBkZXBsb3llZCB3aXRoIHRoZSBmaXguIChFdmVuIElJUzcKKyAgIHJhcmVseSB1c2VzIGl0IGJlY2F1c2UgdGhlcmUgaXMgc3RpbGwgbm8gVUkgZm9yIGl0LikKKworICAgVGhlcmUgaXMgbm8gd2F5IGZvciBDR0kgY29kZSB0byB0ZWxsIHdoZXRoZXIgdGhlIG9wdGlvbiB3YXMgc2V0LCBzbyBhCisgICBzZXBhcmF0ZSBoYW5kbGVyIGNsYXNzIGlzIHByb3ZpZGVkLiAgSXQgaXMgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgIDpjbGFzczpgQ0dJSGFuZGxlcmAsIGkuZS4sIGJ5IGNhbGxpbmcgYGBJSVNDR0lIYW5kbGVyKCkucnVuKGFwcClgYCwgd2hlcmUKKyAgIGBgYXBwYGAgaXMgdGhlIFdTR0kgYXBwbGljYXRpb24gb2JqZWN0IHlvdSB3aXNoIHRvIGludm9rZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogLi4gY2xhc3M6OiBCYXNlQ0dJSGFuZGxlcihzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGVudmlyb24sIG11bHRpdGhyZWFkPVRydWUsIG11bHRpcHJvY2Vzcz1GYWxzZSkKIAogICAgU2ltaWxhciB0byA6Y2xhc3M6YENHSUhhbmRsZXJgLCBidXQgaW5zdGVhZCBvZiB1c2luZyB0aGUgOm1vZDpgc3lzYCBhbmQKQEAgLTYyNiw3ICs2NTIsNyBAQAogCiAgICAgICBUaGlzIG1ldGhvZCBjYW4gYWNjZXNzIHRoZSBjdXJyZW50IGVycm9yIGluZm9ybWF0aW9uIHVzaW5nIGBgc3lzLmV4Y19pbmZvKClgYCwKICAgICAgIGFuZCBzaG91bGQgcGFzcyB0aGF0IGluZm9ybWF0aW9uIHRvICpzdGFydF9yZXNwb25zZSogd2hlbiBjYWxsaW5nIGl0IChhcwotICAgICAgZGVzY3JpYmVkIGluIHRoZSAiRXJyb3IgSGFuZGxpbmciIHNlY3Rpb24gb2YgOnBlcDpgMzMzYCkuCisgICAgICBkZXNjcmliZWQgaW4gdGhlICJFcnJvciBIYW5kbGluZyIgc2VjdGlvbiBvZiA6cGVwOmAzMzMzYCkuCiAKICAgICAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgdXNlcyB0aGUgOmF0dHI6YGVycm9yX3N0YXR1c2AsCiAgICAgICA6YXR0cjpgZXJyb3JfaGVhZGVyc2AsIGFuZCA6YXR0cjpgZXJyb3JfYm9keWAgYXR0cmlidXRlcyB0byBnZW5lcmF0ZSBhbiBvdXRwdXQKQEAgLTY0MSwyMyArNjY3LDIzIEBACiAgICAuLiBhdHRyaWJ1dGU6OiBCYXNlSGFuZGxlci5lcnJvcl9zdGF0dXMKIAogICAgICAgVGhlIEhUVFAgc3RhdHVzIHVzZWQgZm9yIGVycm9yIHJlc3BvbnNlcy4gIFRoaXMgc2hvdWxkIGJlIGEgc3RhdHVzIHN0cmluZyBhcwotICAgICAgZGVmaW5lZCBpbiA6cGVwOmAzMzNgOyBpdCBkZWZhdWx0cyB0byBhIDUwMCBjb2RlIGFuZCBtZXNzYWdlLgorICAgICAgZGVmaW5lZCBpbiA6cGVwOmAzMzMzYDsgaXQgZGVmYXVsdHMgdG8gYSA1MDAgY29kZSBhbmQgbWVzc2FnZS4KIAogCiAgICAuLiBhdHRyaWJ1dGU6OiBCYXNlSGFuZGxlci5lcnJvcl9oZWFkZXJzCiAKICAgICAgIFRoZSBIVFRQIGhlYWRlcnMgdXNlZCBmb3IgZXJyb3IgcmVzcG9uc2VzLiAgVGhpcyBzaG91bGQgYmUgYSBsaXN0IG9mIFdTR0kKLSAgICAgIHJlc3BvbnNlIGhlYWRlcnMgKGBgKG5hbWUsIHZhbHVlKWBgIHR1cGxlcyksIGFzIGRlc2NyaWJlZCBpbiA6cGVwOmAzMzNgLiAgVGhlCisgICAgICByZXNwb25zZSBoZWFkZXJzIChgYChuYW1lLCB2YWx1ZSlgYCB0dXBsZXMpLCBhcyBkZXNjcmliZWQgaW4gOnBlcDpgMzMzM2AuICBUaGUKICAgICAgIGRlZmF1bHQgbGlzdCBqdXN0IHNldHMgdGhlIGNvbnRlbnQgdHlwZSB0byBgYHRleHQvcGxhaW5gYC4KIAogCiAgICAuLiBhdHRyaWJ1dGU6OiBCYXNlSGFuZGxlci5lcnJvcl9ib2R5CiAKLSAgICAgIFRoZSBlcnJvciByZXNwb25zZSBib2R5LiAgVGhpcyBzaG91bGQgYmUgYW4gSFRUUCByZXNwb25zZSBib2R5IHN0cmluZy4gSXQKKyAgICAgIFRoZSBlcnJvciByZXNwb25zZSBib2R5LiAgVGhpcyBzaG91bGQgYmUgYW4gSFRUUCByZXNwb25zZSBib2R5IGJ5dGVzdHJpbmcuIEl0CiAgICAgICBkZWZhdWx0cyB0byB0aGUgcGxhaW4gdGV4dCwgIkEgc2VydmVyIGVycm9yIG9jY3VycmVkLiAgUGxlYXNlIGNvbnRhY3QgdGhlCiAgICAgICBhZG1pbmlzdHJhdG9yLiIKIAotICAgTWV0aG9kcyBhbmQgYXR0cmlidXRlcyBmb3IgOnBlcDpgMzMzYCdzICJPcHRpb25hbCBQbGF0Zm9ybS1TcGVjaWZpYyBGaWxlCisgICBNZXRob2RzIGFuZCBhdHRyaWJ1dGVzIGZvciA6cGVwOmAzMzMzYCdzICJPcHRpb25hbCBQbGF0Zm9ybS1TcGVjaWZpYyBGaWxlCiAgICBIYW5kbGluZyIgZmVhdHVyZToKIAogCkBAIC02OTYsNiArNzIyLDI0IEBACiAgICAgICB2ZXJzaW9uIG9mIHRoZSByZXNwb25zZSBzZXQgdG8gdGhlIGNsaWVudC4gIEl0IGRlZmF1bHRzIHRvIGBgIjEuMCJgYC4KIAogCisuLiBmdW5jdGlvbjo6IHJlYWRfZW52aXJvbigpCisKKyAgIFRyYW5zY29kZSBDR0kgdmFyaWFibGVzIGZyb20gYGBvcy5lbnZpcm9uYGAgdG8gUEVQIDMzMzMgImJ5dGVzIGluIHVuaWNvZGUiCisgICBzdHJpbmdzLCByZXR1cm5pbmcgYSBuZXcgZGljdGlvbmFyeS4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieQorICAgOmNsYXNzOmBDR0lIYW5kbGVyYCBhbmQgOmNsYXNzOmBJSVNDR0lIYW5kbGVyYCBpbiBwbGFjZSBvZiBkaXJlY3RseSB1c2luZworICAgYGBvcy5lbnZpcm9uYGAsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBXU0dJLWNvbXBsaWFudCBvbiBhbGwgcGxhdGZvcm1zCisgICBhbmQgd2ViIHNlcnZlcnMgdXNpbmcgUHl0aG9uIDMgLS0gc3BlY2lmaWNhbGx5LCBvbmVzIHdoZXJlIHRoZSBPUydzCisgICBhY3R1YWwgZW52aXJvbm1lbnQgaXMgVW5pY29kZSAoaS5lLiBXaW5kb3dzKSwgb3Igb25lcyB3aGVyZSB0aGUgZW52aXJvbm1lbnQKKyAgIGlzIGJ5dGVzLCBidXQgdGhlIHN5c3RlbSBlbmNvZGluZyB1c2VkIGJ5IFB5dGhvbiB0byBkZWNvZGUgaXQgaXMgYW55dGhpbmcKKyAgIG90aGVyIHRoYW4gSVNPLTg4NTktMSAoZS5nLiBVbml4IHN5c3RlbXMgdXNpbmcgVVRGLTgpLgorCisgICBJZiB5b3UgYXJlIGltcGxlbWVudGluZyBhIENHSS1iYXNlZCBoYW5kbGVyIG9mIHlvdXIgb3duLCB5b3UgcHJvYmFibHkgd2FudAorICAgdG8gdXNlIHRoaXMgcm91dGluZSBpbnN0ZWFkIG9mIGp1c3QgY29weWluZyB2YWx1ZXMgb3V0IG9mIGBgb3MuZW52aXJvbmBgCisgICBkaXJlY3RseS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogRXhhbXBsZXMKIC0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3hkcmxpYi5yc3QgYi9Eb2MvbGlicmFyeS94ZHJsaWIucnN0CmluZGV4IDRmY2I5Y2QuLjFkM2RhMGEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3hkcmxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkveGRybGliLnJzdApAQCAtOSw2ICs5LDEwIEBACiAgICBzaW5nbGU6IFhEUgogICAgc2luZ2xlOiBFeHRlcm5hbCBEYXRhIFJlcHJlc2VudGF0aW9uCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3hkcmxpYi5weWAKKworLS0tLS0tLS0tLS0tLS0KKwogVGhlIDptb2Q6YHhkcmxpYmAgbW9kdWxlIHN1cHBvcnRzIHRoZSBFeHRlcm5hbCBEYXRhIFJlcHJlc2VudGF0aW9uIFN0YW5kYXJkIGFzCiBkZXNjcmliZWQgaW4gOnJmYzpgMTAxNGAsIHdyaXR0ZW4gYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBKdW5lIDE5ODcuICBJdAogc3VwcG9ydHMgbW9zdCBvZiB0aGUgZGF0YSB0eXBlcyBkZXNjcmliZWQgaW4gdGhlIFJGQy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CmluZGV4IDgzNjRmMzUuLjA3MDk2N2IgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdApAQCAtNyw2ICs3LDkgQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBQYXVsIFByZXNjb2QgPHBhdWxAcHJlc2NvZC5uZXQ+CiAuLiBzZWN0aW9uYXV0aG9yOjogTWFydGluIHYuIEzDtndpcyA8bWFydGluQHYubG9ld2lzLmRlPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94bWwvZG9tL21pbmlkb20ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIDptb2Q6YHhtbC5kb20ubWluaWRvbWAgaXMgYSBsaWdodC13ZWlnaHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIERvY3VtZW50IE9iamVjdAogTW9kZWwgaW50ZXJmYWNlLiAgSXQgaXMgaW50ZW5kZWQgdG8gYmUgc2ltcGxlciB0aGFuIHRoZSBmdWxsIERPTSBhbmQgYWxzbwpAQCAtODIsMjIgKzg1LDEyIEBACiAgICBkb20zID0gcGFyc2VTdHJpbmcoIjxteXhtbD5Tb21lIGRhdGE8L215eG1sPiIpCiAgICBhc3NlcnQgZG9tMy5kb2N1bWVudEVsZW1lbnQudGFnTmFtZSA9PSAibXl4bWwiCiAKLVdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGEgRE9NLCB5b3Ugc2hvdWxkIGNsZWFuIGl0IHVwLiAgVGhpcyBpcyBuZWNlc3NhcnkKLWJlY2F1c2Ugc29tZSB2ZXJzaW9ucyBvZiBQeXRob24gZG8gbm90IHN1cHBvcnQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMKLXRoYXQgcmVmZXIgdG8gZWFjaCBvdGhlciBpbiBhIGN5Y2xlLiAgVW50aWwgdGhpcyByZXN0cmljdGlvbiBpcyByZW1vdmVkIGZyb20gYWxsCi12ZXJzaW9ucyBvZiBQeXRob24sIGl0IGlzIHNhZmVzdCB0byB3cml0ZSB5b3VyIGNvZGUgYXMgaWYgY3ljbGVzIHdvdWxkIG5vdCBiZQotY2xlYW5lZCB1cC4KLQotVGhlIHdheSB0byBjbGVhbiB1cCBhIERPTSBpcyB0byBjYWxsIGl0cyA6bWV0aDpgdW5saW5rYCBtZXRob2Q6OgotCi0gICBkb20xLnVubGluaygpCi0gICBkb20yLnVubGluaygpCi0gICBkb20zLnVubGluaygpCi0KLTptZXRoOmB1bmxpbmtgIGlzIGEgOm1vZDpgeG1sLmRvbS5taW5pZG9tYFwgLXNwZWNpZmljIGV4dGVuc2lvbiB0byB0aGUgRE9NIEFQSS4KLUFmdGVyIGNhbGxpbmcgOm1ldGg6YHVubGlua2Agb24gYSBub2RlLCB0aGUgbm9kZSBhbmQgaXRzIGRlc2NlbmRhbnRzIGFyZQotZXNzZW50aWFsbHkgdXNlbGVzcy4KLQorV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYSBET00gdHJlZSwgeW91IG1heSBvcHRpb25hbGx5IGNhbGwgdGhlCis6bWV0aDpgdW5saW5rYCBtZXRob2QgdG8gZW5jb3VyYWdlIGVhcmx5IGNsZWFudXAgb2YgdGhlIG5vdy11bm5lZWRlZAorb2JqZWN0cy4gIDptZXRoOmB1bmxpbmtgIGlzIGEgOm1vZDpgeG1sLmRvbS5taW5pZG9tYFwgLXNwZWNpZmljCitleHRlbnNpb24gdG8gdGhlIERPTSBBUEkgdGhhdCByZW5kZXJzIHRoZSBub2RlIGFuZCBpdHMgZGVzY2VuZGFudHMgYXJlCitlc3NlbnRpYWxseSB1c2VsZXNzLiAgT3RoZXJ3aXNlLCBQeXRob24ncyBnYXJiYWdlIGNvbGxlY3RvciB3aWxsCitldmVudHVhbGx5IHRha2UgY2FyZSBvZiB0aGUgb2JqZWN0cyBpbiB0aGUgdHJlZS4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTEyNCw2ICsxMTcsMTMgQEAKICAgIHRvIGJlIGNhbGxlZCBvbiB0aGUgOmNsYXNzOmBEb2N1bWVudGAgb2JqZWN0LCBidXQgbWF5IGJlIGNhbGxlZCBvbiBjaGlsZCBub2RlcwogICAgdG8gZGlzY2FyZCBjaGlsZHJlbiBvZiB0aGF0IG5vZGUuCiAKKyAgIFlvdSBjYW4gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZCBleHBsaWNpdGx5IGJ5IHVzaW5nIHRoZSA6a2V5d29yZDpgd2l0aGAKKyAgIHN0YXRlbWVudC4gVGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgYXV0b21hdGljYWxseSB1bmxpbmsgKmRvbSogd2hlbiB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBibG9jayBpcyBleGl0ZWQ6OgorCisgICAgICB3aXRoIHhtbC5kb20ubWluaWRvbS5wYXJzZShkYXRhc291cmNlKSBhcyBkb206CisgICAgICAgICAgLi4uICMgV29yayB3aXRoIGRvbS4KKwogCiAuLiBtZXRob2Q6OiBOb2RlLndyaXRleG1sKHdyaXRlciwgaW5kZW50PSIiLCBhZGRpbmRlbnQ9IiIsIG5ld2w9IiIpCiAKQEAgLTEzOSwxOCArMTM5LDIwIEBACiAKIC4uIG1ldGhvZDo6IE5vZGUudG94bWwoZW5jb2Rpbmc9Tm9uZSkKIAotICAgUmV0dXJuIHRoZSBYTUwgdGhhdCB0aGUgRE9NIHJlcHJlc2VudHMgYXMgYSBzdHJpbmcuCisgICBSZXR1cm4gYSBzdHJpbmcgb3IgYnl0ZSBzdHJpbmcgY29udGFpbmluZyB0aGUgWE1MIHJlcHJlc2VudGVkIGJ5CisgICB0aGUgRE9NIG5vZGUuCiAKLSAgIFdpdGggbm8gYXJndW1lbnQsIHRoZSBYTUwgaGVhZGVyIGRvZXMgbm90IHNwZWNpZnkgYW4gZW5jb2RpbmcsIGFuZCB0aGUgcmVzdWx0IGlzCi0gICBVbmljb2RlIHN0cmluZyBpZiB0aGUgZGVmYXVsdCBlbmNvZGluZyBjYW5ub3QgcmVwcmVzZW50IGFsbCBjaGFyYWN0ZXJzIGluIHRoZQotICAgZG9jdW1lbnQuIEVuY29kaW5nIHRoaXMgc3RyaW5nIGluIGFuIGVuY29kaW5nIG90aGVyIHRoYW4gVVRGLTggaXMgbGlrZWx5Ci0gICBpbmNvcnJlY3QsIHNpbmNlIFVURi04IGlzIHRoZSBkZWZhdWx0IGVuY29kaW5nIG9mIFhNTC4KKyAgIFdpdGggYW4gZXhwbGljaXQgKmVuY29kaW5nKiBbMV1fIGFyZ3VtZW50LCB0aGUgcmVzdWx0IGlzIGEgYnl0ZQorICAgc3RyaW5nIGluIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdQorICAgYWx3YXlzIHNwZWNpZnkgYW4gZW5jb2Rpbmc7IHlvdSBtYXkgdXNlIGFueSBlbmNvZGluZyB5b3UgbGlrZSwgYnV0CisgICBhbiBhcmd1bWVudCBvZiAidXRmLTgiIGlzIHRoZSBtb3N0IGNvbW1vbiBjaG9pY2UsIGF2b2lkaW5nCisgICA6ZXhjOmBVbmljb2RlRXJyb3JgIGV4Y2VwdGlvbnMgaW4gY2FzZSBvZiB1bnJlcHJlc2VudGFibGUgdGV4dAorICAgZGF0YS4KIAotICAgV2l0aCBhbiBleHBsaWNpdCAqZW5jb2RpbmcqIFsxXV8gYXJndW1lbnQsIHRoZSByZXN1bHQgaXMgYSBieXRlIHN0cmluZyBpbiB0aGUKLSAgIHNwZWNpZmllZCBlbmNvZGluZy4gSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGlzIGFyZ3VtZW50IGlzIGFsd2F5cyBzcGVjaWZpZWQuIFRvCi0gICBhdm9pZCA6ZXhjOmBVbmljb2RlRXJyb3JgIGV4Y2VwdGlvbnMgaW4gY2FzZSBvZiB1bnJlcHJlc2VudGFibGUgdGV4dCBkYXRhLCB0aGUKLSAgIGVuY29kaW5nIGFyZ3VtZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgInV0Zi04Ii4KLQorICAgV2l0aCBubyAqZW5jb2RpbmcqIGFyZ3VtZW50LCB0aGUgcmVzdWx0IGlzIGEgVW5pY29kZSBzdHJpbmcsIGFuZCB0aGUKKyAgIFhNTCBkZWNsYXJhdGlvbiBpbiB0aGUgcmVzdWx0aW5nIHN0cmluZyBkb2VzIG5vdCBzcGVjaWZ5IGFuCisgICBlbmNvZGluZy4gRW5jb2RpbmcgdGhpcyBzdHJpbmcgaW4gYW4gZW5jb2Rpbmcgb3RoZXIgdGhhbiBVVEYtOCBpcworICAgbGlrZWx5IGluY29ycmVjdCwgc2luY2UgVVRGLTggaXMgdGhlIGRlZmF1bHQgZW5jb2Rpbmcgb2YgWE1MLgogCiAuLiBtZXRob2Q6OiBOb2RlLnRvcHJldHR5eG1sKGluZGVudD0iIiwgbmV3bD0iIiwgZW5jb2Rpbmc9IiIpCiAKQEAgLTE1OCw3ICsxNjAsOCBAQAogICAgaW5kZW50YXRpb24gc3RyaW5nIGFuZCBkZWZhdWx0cyB0byBhIHRhYnVsYXRvcjsgKm5ld2wqIHNwZWNpZmllcyB0aGUgc3RyaW5nCiAgICBlbWl0dGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBsaW5lIGFuZCBkZWZhdWx0cyB0byBgYFxuYGAuCiAKLSAgIFRoZXJlJ3MgYWxzbyBhbiAqZW5jb2RpbmcqIGFyZ3VtZW50OyBzZWUgOm1ldGg6YHRveG1sYC4KKyAgIFRoZSAqZW5jb2RpbmcqIGFyZ3VtZW50IGJlaGF2ZXMgbGlrZSB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBvZgorICAgOm1ldGg6YHRveG1sYC4KIAogCiAuLiBfZG9tLWV4YW1wbGU6CkBAIC0yNDMsNyArMjQ2LDkgQEAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKLS4uIFsjXSBUaGUgZW5jb2Rpbmcgc3RyaW5nIGluY2x1ZGVkIGluIFhNTCBvdXRwdXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlCi0gICBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuIEZvciBleGFtcGxlLCAiVVRGLTgiIGlzIHZhbGlkLCBidXQgIlVURjgiIGlzCi0gICBub3QuIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwxMS0yMDA2MDgxNi8jTlQtRW5jb2RpbmdEZWNsCisuLiBbI10gVGhlIGVuY29kaW5nIG5hbWUgaW5jbHVkZWQgaW4gdGhlIFhNTCBvdXRwdXQgc2hvdWxkIGNvbmZvcm0gdG8KKyAgIHRoZSBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuIEZvciBleGFtcGxlLCAiVVRGLTgiIGlzIHZhbGlkLCBidXQKKyAgICJVVEY4IiBpcyBub3QgdmFsaWQgaW4gYW4gWE1MIGRvY3VtZW50J3MgZGVjbGFyYXRpb24sIGV2ZW4gdGhvdWdoCisgICBQeXRob24gYWNjZXB0cyBpdCBhcyBhbiBlbmNvZGluZyBuYW1lLgorICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKICAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzIC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnB1bGxkb20ucnN0CmluZGV4IDE4OTNmYmEuLjRhNWVmNGMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLnJzdApAQCAtNSw2ICs1LDkgQEAKICAgIDpzeW5vcHNpczogU3VwcG9ydCBmb3IgYnVpbGRpbmcgcGFydGlhbCBET00gdHJlZXMgZnJvbSBTQVggZXZlbnRzLgogLi4gbW9kdWxlYXV0aG9yOjogUGF1bCBQcmVzY29kIDxwYXVsQHByZXNjb2QubmV0PgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94bWwvZG9tL3B1bGxkb20ucHlgCisKKy0tLS0tLS0tLS0tLS0tCiAKIDptb2Q6YHhtbC5kb20ucHVsbGRvbWAgYWxsb3dzIGJ1aWxkaW5nIG9ubHkgc2VsZWN0ZWQgcG9ydGlvbnMgb2YgYSBEb2N1bWVudAogT2JqZWN0IE1vZGVsIHJlcHJlc2VudGF0aW9uIG9mIGEgZG9jdW1lbnQgZnJvbSBTQVggZXZlbnRzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnJzdAppbmRleCA0NWQzMGQ2Li5jMTc4NmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuZG9tLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnJzdApAQCAtNjkzLDE4ICs2OTMsMjcgQEAKIAogLi4gYXR0cmlidXRlOjogQXR0ci5uYW1lCiAKLSAgIFRoZSBhdHRyaWJ1dGUgbmFtZS4gIEluIGEgbmFtZXNwYWNlLXVzaW5nIGRvY3VtZW50IGl0IG1heSBoYXZlIGNvbG9ucyBpbiBpdC4KKyAgIFRoZSBhdHRyaWJ1dGUgbmFtZS4KKyAgIEluIGEgbmFtZXNwYWNlLXVzaW5nIGRvY3VtZW50IGl0IG1heSBpbmNsdWRlIGEgY29sb24uCiAKIAogLi4gYXR0cmlidXRlOjogQXR0ci5sb2NhbE5hbWUKIAotICAgVGhlIHBhcnQgb2YgdGhlIG5hbWUgZm9sbG93aW5nIHRoZSBjb2xvbiBpZiB0aGVyZSBpcyBvbmUsIGVsc2UgdGhlIGVudGlyZSBuYW1lLgorICAgVGhlIHBhcnQgb2YgdGhlIG5hbWUgZm9sbG93aW5nIHRoZSBjb2xvbiBpZiB0aGVyZSBpcyBvbmUsIGVsc2UgdGhlCisgICBlbnRpcmUgbmFtZS4KICAgIFRoaXMgaXMgYSByZWFkLW9ubHkgYXR0cmlidXRlLgogCiAKIC4uIGF0dHJpYnV0ZTo6IEF0dHIucHJlZml4CiAKLSAgIFRoZSBwYXJ0IG9mIHRoZSBuYW1lIHByZWNlZGluZyB0aGUgY29sb24gaWYgdGhlcmUgaXMgb25lLCBlbHNlIHRoZSBlbXB0eSBzdHJpbmcuCisgICBUaGUgcGFydCBvZiB0aGUgbmFtZSBwcmVjZWRpbmcgdGhlIGNvbG9uIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSB0aGUKKyAgIGVtcHR5IHN0cmluZy4KKworCisuLiBhdHRyaWJ1dGU6OiBBdHRyLnZhbHVlCisKKyAgIFRoZSB0ZXh0IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuICBUaGlzIGlzIGEgc3lub255bSBmb3IgdGhlCisgICA6YXR0cjpgbm9kZVZhbHVlYCBhdHRyaWJ1dGUuCiAKIAogLi4gX2RvbS1hdHRyaWJ1dGVsaXN0LW9iamVjdHM6CkBAIC05NjcsMjkgKzk3NiwyNCBAQAogVHlwZSBNYXBwaW5nCiBeXl5eXl5eXl5eXl4KIAotVGhlIHByaW1pdGl2ZSBJREwgdHlwZXMgdXNlZCBpbiB0aGUgRE9NIHNwZWNpZmljYXRpb24gYXJlIG1hcHBlZCB0byBQeXRob24gdHlwZXMKK1RoZSBJREwgdHlwZXMgdXNlZCBpbiB0aGUgRE9NIHNwZWNpZmljYXRpb24gYXJlIG1hcHBlZCB0byBQeXRob24gdHlwZXMKIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLgogCiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IElETCBUeXBlICAgICAgICAgfCBQeXRob24gVHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IGBgYm9vbGVhbmBgICAgICAgfCBgYEludGVnZXJUeXBlYGAgKHdpdGggYSB2YWx1ZSBvZiBgYDBgYCBvciB8Ci18ICAgICAgICAgICAgICAgICAgfCBgYDFgYCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBgYm9vbGVhbmBgICAgICAgfCBgYGJvb2xgYCBvciBgYGludGBgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgaW50YGAgICAgICAgICAgfCBgYEludGVnZXJUeXBlYGAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBgaW50YGAgICAgICAgICAgfCBgYGludGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgbG9uZyBpbnRgYCAgICAgfCBgYEludGVnZXJUeXBlYGAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBgbG9uZyBpbnRgYCAgICAgfCBgYGludGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgdW5zaWduZWQgaW50YGAgfCBgYEludGVnZXJUeXBlYGAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBgdW5zaWduZWQgaW50YGAgfCBgYGludGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0KLUFkZGl0aW9uYWxseSwgdGhlIDpjbGFzczpgRE9NU3RyaW5nYCBkZWZpbmVkIGluIHRoZSByZWNvbW1lbmRhdGlvbiBpcyBtYXBwZWQgdG8KLWEgYnl0ZXMgb3Igc3RyaW5nIG9iamVjdC4gIEFwcGxpY2F0aW9ucyBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUKLVVuaWNvZGUgd2hlbmV2ZXIgYSBzdHJpbmcgaXMgcmV0dXJuZWQgZnJvbSB0aGUgRE9NLgotCi1UaGUgSURMIGBgbnVsbGBgIHZhbHVlIGlzIG1hcHBlZCB0byBgYE5vbmVgYCwgd2hpY2ggbWF5IGJlIGFjY2VwdGVkIG9yCi1wcm92aWRlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gd2hlbmV2ZXIgYGBudWxsYGAgaXMgYWxsb3dlZCBieSB0aGUgQVBJLgotCit8IGBgRE9NU3RyaW5nYGAgICAgfCBgYHN0cmBgIG9yIGBgYnl0ZXNgYCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgbnVsbGBgICAgICAgICAgfCBgYE5vbmVgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIC4uIF9kb20tYWNjZXNzb3ItbWV0aG9kczoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKaW5kZXggYmMwNGE1My4uMThjMzVhYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CkBAIC01LDEwICs1LDEzIEBACiAgICA6c3lub3BzaXM6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVtZW50VHJlZSBBUEkuCiAuLiBtb2R1bGVhdXRob3I6OiBGcmVkcmlrIEx1bmRoIDxmcmVkcmlrQHB5dGhvbndhcmUuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHlgCiAKLVRoZSBFbGVtZW50IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0byBzdG9yZSBoaWVyYXJjaGljYWwKLWRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuIFRoZSB0eXBlIGNhbiBiZSBkZXNjcmliZWQgYXMgYSBjcm9zcyBiZXR3ZWVuIGEgbGlzdAotYW5kIGEgZGljdGlvbmFyeS4KKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEVsZW1lbnRgIHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0byBzdG9yZQoraGllcmFyY2hpY2FsIGRhdGEgc3RydWN0dXJlcyBpbiBtZW1vcnkuICBUaGUgdHlwZSBjYW4gYmUgZGVzY3JpYmVkIGFzIGEgY3Jvc3MKK2JldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCiAKIEVhY2ggZWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CiAKQEAgLTIzLDcgKzI2LDggQEAKIAogKiBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cywgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlCiAKLVRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIEVsZW1lbnQgb3IgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9ucy4KK1RvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIDpjbGFzczpgRWxlbWVudGAgY29uc3RydWN0b3Igb3IgdGhlCis6ZnVuYzpgU3ViRWxlbWVudGAgZmFjdG9yeSBmdW5jdGlvbi4KIAogVGhlIDpjbGFzczpgRWxlbWVudFRyZWVgIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYW4gZWxlbWVudCBzdHJ1Y3R1cmUsIGFuZAogY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCkBAIC0zMSw4ICszNSwxNCBAQAogQSBDIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgQVBJIGlzIGF2YWlsYWJsZSBhcyA6bW9kOmB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlYC4KIAogU2VlIGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvZWxlbWVudC1pbmRleC5odG0gZm9yIHR1dG9yaWFscyBhbmQgbGlua3MgdG8gb3RoZXIKLWRvY3MuIEZyZWRyaWsgTHVuZGgncyBwYWdlIGlzIGFsc28gdGhlIGxvY2F0aW9uIG9mIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mIHRoZQoteG1sLmV0cmVlLkVsZW1lbnRUcmVlLgorZG9jcy4gIEZyZWRyaWsgTHVuZGgncyBwYWdlIGlzIGFsc28gdGhlIGxvY2F0aW9uIG9mIHRoZSBkZXZlbG9wbWVudCB2ZXJzaW9uIG9mCit0aGUgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgVGhlIEVsZW1lbnRUcmVlIEFQSSBpcyB1cGRhdGVkIHRvIDEuMy4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKKyAgIGBJbnRyb2R1Y2luZyBFbGVtZW50VHJlZSAxLjMKKyAgIDxodHRwOi8vZWZmYm90Lm9yZy96b25lL2VsZW1lbnR0cmVlLTEzLWludHJvLmh0bT5gXy4KKwogCiAuLiBfZWxlbWVudHRyZWUtZnVuY3Rpb25zOgogCkBAIC00MywxNiArNTMsMTYgQEAKIC4uIGZ1bmN0aW9uOjogQ29tbWVudCh0ZXh0PU5vbmUpCiAKICAgIENvbW1lbnQgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQKLSAgIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50LiBUaGUgY29tbWVudCBzdHJpbmcgY2FuIGJlIGVpdGhlcgotICAgYW4gQVNDSUktb25seSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgb3IgYSA6Y2xhc3M6YHN0cmAgb2JqZWN0LiAqdGV4dCogaXMgYQotICAgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGNvbW1lbnQgc3RyaW5nLiBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UKKyAgIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBjb21tZW50IGJ5IHRoZSBzdGFuZGFyZCBzZXJpYWxpemVyLiAgVGhlCisgICBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGEgYnl0ZXN0cmluZyBvciBhIFVuaWNvZGUgc3RyaW5nLiAgKnRleHQqIGlzIGEKKyAgIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZQogICAgcmVwcmVzZW50aW5nIGEgY29tbWVudC4KIAogCiAuLiBmdW5jdGlvbjo6IGR1bXAoZWxlbSkKIAotICAgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcyBmdW5jdGlvbiBzaG91bGQKLSAgIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgorICAgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcyBmdW5jdGlvbgorICAgc2hvdWxkIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogCiAgICBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzIHZlcnNpb24sIGl0J3MKICAgIHdyaXR0ZW4gYXMgYW4gb3JkaW5hcnkgWE1MIGZpbGUuCkBAIC02MCwzOSArNzAsMzYgQEAKICAgICplbGVtKiBpcyBhbiBlbGVtZW50IHRyZWUgb3IgYW4gaW5kaXZpZHVhbCBlbGVtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogRWxlbWVudCh0YWcsIGF0dHJpYj17fSwgKipleHRyYSkKLQotICAgRWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIHN0YW5kYXJkCi0gICBFbGVtZW50IGludGVyZmFjZS4gIFRoZSBleGFjdCBjbGFzcyBvciB0eXBlIG9mIHRoYXQgb2JqZWN0IGlzIGltcGxlbWVudGF0aW9uCi0gICBkZXBlbmRlbnQsIGJ1dCBpdCB3aWxsIGFsd2F5cyBiZSBjb21wYXRpYmxlIHdpdGggdGhlIF9FbGVtZW50SW50ZXJmYWNlIGNsYXNzIGluCi0gICB0aGlzIG1vZHVsZS4KLQotICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyIGFuCi0gICBBU0NJSS1vbmx5IDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvciBhIDpjbGFzczpgc3RyYCBvYmplY3QuICp0YWcqIGlzIHRoZQotICAgZWxlbWVudCBuYW1lLiAqYXR0cmliKiBpcyBhbiBvcHRpb25hbCBkaWN0aW9uYXJ5LCBjb250YWluaW5nIGVsZW1lbnQKLSAgIGF0dHJpYnV0ZXMuICpleHRyYSogY29udGFpbnMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCBnaXZlbiBhcyBrZXl3b3JkCi0gICBhcmd1bWVudHMuIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KLQotCiAuLiBmdW5jdGlvbjo6IGZyb21zdHJpbmcodGV4dCkKIAotICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBTYW1lIGFzIFhNTC4gKnRleHQqIGlzIGEgc3RyaW5nCi0gICBjb250YWluaW5nIFhNTCBkYXRhLiBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisgICBQYXJzZXMgYW4gWE1MIHNlY3Rpb24gZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFNhbWUgYXMgOmZ1bmM6YFhNTGAuICAqdGV4dCoKKyAgIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuICBSZXR1cm5zIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuCisKKworLi4gZnVuY3Rpb246OiBmcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSwgcGFyc2VyPU5vbmUpCisKKyAgIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHNlcXVlbmNlIG9mIHN0cmluZyBmcmFnbWVudHMuICAqc2VxdWVuY2UqIGlzIGEKKyAgIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBYTUwgZGF0YSBmcmFnbWVudHMuICAqcGFyc2VyKiBpcyBhbgorICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBYTUxQYXJzZXJgCisgICBwYXJzZXIgaXMgdXNlZC4gIFJldHVybnMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAogLi4gZnVuY3Rpb246OiBpc2VsZW1lbnQoZWxlbWVudCkKIAotICAgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuICplbGVtZW50KiBpcyBhbgotICAgZWxlbWVudCBpbnN0YW5jZS4gUmV0dXJucyBhIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KKyAgIENoZWNrcyBpZiBhbiBvYmplY3QgYXBwZWFycyB0byBiZSBhIHZhbGlkIGVsZW1lbnQgb2JqZWN0LiAgKmVsZW1lbnQqIGlzIGFuCisgICBlbGVtZW50IGluc3RhbmNlLiAgUmV0dXJucyBhIHRydWUgdmFsdWUgaWYgdGhpcyBpcyBhbiBlbGVtZW50IG9iamVjdC4KIAogCi0uLiBmdW5jdGlvbjo6IGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cz1Ob25lKQorLi4gZnVuY3Rpb246OiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpCiAKICAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cyB3aGF0J3MKICAgIGdvaW5nIG9uIHRvIHRoZSB1c2VyLiAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciA6dGVybTpgZmlsZSBvYmplY3RgIGNvbnRhaW5pbmcKICAgIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4gIElmIG9taXR0ZWQsIG9ubHkgImVuZCIKLSAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nIGBgKGV2ZW50LCBlbGVtKWBgCi0gICBwYWlycy4KKyAgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKKyAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhbgorICAgOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMuCiAKICAgIC4uIG5vdGU6OgogCkBAIC0xMDcsMTk2ICsxMTQsMjcxIEBACiAKIC4uIGZ1bmN0aW9uOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIAotICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlLiAqc291cmNlKiBpcyBhIGZpbGVuYW1lIG9yIGZpbGUKLSAgIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLiAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QKLSAgIGdpdmVuLCB0aGUgc3RhbmRhcmQgWE1MVHJlZUJ1aWxkZXIgcGFyc2VyIGlzIHVzZWQuIFJldHVybnMgYW4gRWxlbWVudFRyZWUKLSAgIGluc3RhbmNlLgorICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGludG8gYW4gZWxlbWVudCB0cmVlLiAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciBmaWxlCisgICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmCisgICBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGFuCisgICA6Y2xhc3M6YEVsZW1lbnRUcmVlYCBpbnN0YW5jZS4KIAogCiAuLiBmdW5jdGlvbjo6IFByb2Nlc3NpbmdJbnN0cnVjdGlvbih0YXJnZXQsIHRleHQ9Tm9uZSkKIAotICAgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdCB3aWxsCi0gICBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAqdGFyZ2V0KiBpcyBhIHN0cmluZyBjb250YWluaW5nCi0gICB0aGUgUEkgdGFyZ2V0LiAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmIGdpdmVuLiBSZXR1cm5zCi0gICBhbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorICAgUEkgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGVjaWFsIGVsZW1lbnQgdGhhdAorICAgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLiAgKnRhcmdldCogaXMgYSBzdHJpbmcKKyAgIGNvbnRhaW5pbmcgdGhlIFBJIHRhcmdldC4gICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSBjb250ZW50cywgaWYKKyAgIGdpdmVuLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorCisKKy4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfbmFtZXNwYWNlKHByZWZpeCwgdXJpKQorCisgICBSZWdpc3RlcnMgYSBuYW1lc3BhY2UgcHJlZml4LiAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZworICAgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkgd2lsbCBiZSByZW1vdmVkLgorICAgKnByZWZpeCogaXMgYSBuYW1lc3BhY2UgcHJlZml4LiAgKnVyaSogaXMgYSBuYW1lc3BhY2UgdXJpLiAgVGFncyBhbmQKKyAgIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2Ugd2lsbCBiZSBzZXJpYWxpemVkIHdpdGggdGhlIGdpdmVuIHByZWZpeCwgaWYgYXQKKyAgIGFsbCBwb3NzaWJsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAogLi4gZnVuY3Rpb246OiBTdWJFbGVtZW50KHBhcmVudCwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpCiAKLSAgIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcyBpdAotICAgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KKyAgIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcworICAgaXQgdG8gYW4gZXhpc3RpbmcgZWxlbWVudC4KIAotICAgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgYW4gQVNDSUktb25seQotICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IG9yIGEgOmNsYXNzOmBzdHJgIG9iamVjdC4gKnBhcmVudCogaXMgdGhlIHBhcmVudAotICAgZWxlbWVudC4gKnRhZyogaXMgdGhlIHN1YmVsZW1lbnQgbmFtZS4gKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSwKLSAgIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLiAqZXh0cmEqIGNvbnRhaW5zIGFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4KLSAgIGFzIGtleXdvcmQgYXJndW1lbnRzLiBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCisgICBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgIGJ5dGVzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4gICpwYXJlbnQqIGlzIHRoZSBwYXJlbnQgZWxlbWVudC4gICp0YWcqIGlzCisgICB0aGUgc3ViZWxlbWVudCBuYW1lLiAgKmF0dHJpYiogaXMgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50CisgICBhdHRyaWJ1dGVzLiAgKmV4dHJhKiBjb250YWlucyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQKKyAgIGFyZ3VtZW50cy4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZS4KIAogCi0uLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKIAotICAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsIHN1YmVsZW1lbnRzLgotICAgKmVsZW1lbnQqIGlzIGFuIEVsZW1lbnQgaW5zdGFuY2UuICplbmNvZGluZyogaXMgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcwotICAgVVMtQVNDSUkpLiBSZXR1cm5zIGFuIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgorICAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCisgICBzdWJlbGVtZW50cy4gICplbGVtZW50KiBpcyBhbiA6Y2xhc3M6YEVsZW1lbnRgIGluc3RhbmNlLiAgKmVuY29kaW5nKiBbMV1fIGlzCisgICB0aGUgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4gIFVzZSBgYGVuY29kaW5nPSJ1bmljb2RlImBgIHRvCisgICBnZW5lcmF0ZSBhIFVuaWNvZGUgc3RyaW5nLiAgKm1ldGhvZCogaXMgZWl0aGVyIGBgInhtbCJgYCwKKyAgIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLiAgUmV0dXJucyBhbiAob3B0aW9uYWxseSkKKyAgIGVuY29kZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogCiAKLS4uIGZ1bmN0aW9uOjogWE1MKHRleHQpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisKKyAgIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBYTUwgZWxlbWVudCwgaW5jbHVkaW5nIGFsbAorICAgc3ViZWxlbWVudHMuICAqZWxlbWVudCogaXMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4gICplbmNvZGluZyogWzFdXyBpcworICAgdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0bworICAgZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZy4gICptZXRob2QqIGlzIGVpdGhlciBgYCJ4bWwiYGAsCisgICBgYCJodG1sImBgIG9yIGBgInRleHQiYGAgKGRlZmF1bHQgaXMgYGAieG1sImBgKS4gIFJldHVybnMgYSBsaXN0IG9mCisgICAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLiAgSXQgZG9lcyBub3QgZ3VhcmFudGVlCisgICBhbnkgc3BlY2lmaWMgc2VxdWVuY2UsIGV4Y2VwdCB0aGF0IGBgIiIuam9pbih0b3N0cmluZ2xpc3QoZWxlbWVudCkpID09CisgICB0b3N0cmluZyhlbGVtZW50KWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBmdW5jdGlvbjo6IFhNTCh0ZXh0LCBwYXJzZXI9Tm9uZSkKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvCi0gICBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4gKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0gICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisgICBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4gICp0ZXh0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIFhNTAorICAgZGF0YS4gICpwYXJzZXIqIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlIHN0YW5kYXJkCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiBYTUxJRCh0ZXh0KQorLi4gZnVuY3Rpb246OiBYTUxJRCh0ZXh0LCBwYXJzZXI9Tm9uZSkKIAogICAgUGFyc2VzIGFuIFhNTCBzZWN0aW9uIGZyb20gYSBzdHJpbmcgY29uc3RhbnQsIGFuZCBhbHNvIHJldHVybnMgYSBkaWN0aW9uYXJ5Ci0gICB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLiAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwKLSAgIGRhdGEuIFJldHVybnMgYSB0dXBsZSBjb250YWluaW5nIGFuIEVsZW1lbnQgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KKyAgIHdoaWNoIG1hcHMgZnJvbSBlbGVtZW50IGlkOnMgdG8gZWxlbWVudHMuICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyBYTUwKKyAgIGRhdGEuICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAorICAgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgUmV0dXJucyBhIHR1cGxlIGNvbnRhaW5pbmcgYW4KKyAgIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UgYW5kIGEgZGljdGlvbmFyeS4KIAogCi0uLiBfZWxlbWVudHRyZWUtZWxlbWVudC1pbnRlcmZhY2U6CisuLiBfZWxlbWVudHRyZWUtZWxlbWVudC1vYmplY3RzOgogCi1UaGUgRWxlbWVudCBJbnRlcmZhY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWxlbWVudCBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0KIAotRWxlbWVudCBvYmplY3RzIHJldHVybmVkIGJ5IEVsZW1lbnQgb3IgU3ViRWxlbWVudCBoYXZlIHRoZSAgZm9sbG93aW5nIG1ldGhvZHMKLWFuZCBhdHRyaWJ1dGVzLgogCisuLiBjbGFzczo6IEVsZW1lbnQodGFnLCBhdHRyaWI9e30sICoqZXh0cmEpCiAKLS4uIGF0dHJpYnV0ZTo6IEVsZW1lbnQudGFnCisgICBFbGVtZW50IGNsYXNzLiAgVGhpcyBjbGFzcyBkZWZpbmVzIHRoZSBFbGVtZW50IGludGVyZmFjZSwgYW5kIHByb3ZpZGVzIGEKKyAgIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KIAotICAgQSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEgdGhpcyBlbGVtZW50IHJlcHJlc2VudHMgKHRoZSBlbGVtZW50Ci0gICB0eXBlLCBpbiBvdGhlciB3b3JkcykuCisgICBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgIGJ5dGVzdHJpbmdzIG9yIFVuaWNvZGUgc3RyaW5ncy4gICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICAqYXR0cmliKiBpcworICAgYW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuICAqZXh0cmEqIGNvbnRhaW5zCisgICBhZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgogCiAKLS4uIGF0dHJpYnV0ZTo6IEVsZW1lbnQudGV4dAorICAgLi4gYXR0cmlidXRlOjogdGFnCiAKLSAgIFRoZSAqdGV4dCogYXR0cmlidXRlIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUKLSAgIGVsZW1lbnQuIEFzIHRoZSBuYW1lIGltcGxpZXMgdGhpcyBhdHRyaWJ1dGUgaXMgdXN1YWxseSBhIHN0cmluZyBidXQgbWF5IGJlIGFueQotICAgYXBwbGljYXRpb24tc3BlY2lmaWMgb2JqZWN0LiBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20gYW4gWE1MIGZpbGUgdGhlCi0gICBhdHRyaWJ1dGUgd2lsbCBjb250YWluIGFueSB0ZXh0IGZvdW5kIGJldHdlZW4gdGhlIGVsZW1lbnQgdGFncy4KKyAgICAgIEEgc3RyaW5nIGlkZW50aWZ5aW5nIHdoYXQga2luZCBvZiBkYXRhIHRoaXMgZWxlbWVudCByZXByZXNlbnRzICh0aGUKKyAgICAgIGVsZW1lbnQgdHlwZSwgaW4gb3RoZXIgd29yZHMpLgogCiAKLS4uIGF0dHJpYnV0ZTo6IEVsZW1lbnQudGFpbAorICAgLi4gYXR0cmlidXRlOjogdGV4dAogCi0gICBUaGUgKnRhaWwqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlCi0gICBlbGVtZW50LiBUaGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dCBtYXkgYmUgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljCi0gICBvYmplY3QuIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgZnJvbSBhbiBYTUwgZmlsZSB0aGUgYXR0cmlidXRlIHdpbGwgY29udGFpbgotICAgYW55IHRleHQgZm91bmQgYWZ0ZXIgdGhlIGVsZW1lbnQncyBlbmQgdGFnIGFuZCBiZWZvcmUgdGhlIG5leHQgdGFnLgorICAgICAgVGhlICp0ZXh0KiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gaG9sZCBhZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICB0aGUgZWxlbWVudC4gIEFzIHRoZSBuYW1lIGltcGxpZXMgdGhpcyBhdHRyaWJ1dGUgaXMgdXN1YWxseSBhIHN0cmluZyBidXQKKyAgICAgIG1heSBiZSBhbnkgYXBwbGljYXRpb24tc3BlY2lmaWMgb2JqZWN0LiAgSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tCisgICAgICBhbiBYTUwgZmlsZSB0aGUgYXR0cmlidXRlIHdpbGwgY29udGFpbiBhbnkgdGV4dCBmb3VuZCBiZXR3ZWVuIHRoZSBlbGVtZW50CisgICAgICB0YWdzLgogCiAKLS4uIGF0dHJpYnV0ZTo6IEVsZW1lbnQuYXR0cmliCisgICAuLiBhdHRyaWJ1dGU6OiB0YWlsCiAKLSAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4gTm90ZSB0aGF0IHdoaWxlIHRoZSAqYXR0cmliKgotICAgdmFsdWUgaXMgYWx3YXlzIGEgcmVhbCBtdXRhYmxlIFB5dGhvbiBkaWN0aW9uYXJ5LCBhbiBFbGVtZW50VHJlZSBpbXBsZW1lbnRhdGlvbgotICAgbWF5IGNob29zZSB0byB1c2UgYW5vdGhlciBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiwgYW5kIGNyZWF0ZSB0aGUgZGljdGlvbmFyeQotICAgb25seSBpZiBzb21lb25lIGFza3MgZm9yIGl0LiBUbyB0YWtlIGFkdmFudGFnZSBvZiBzdWNoIGltcGxlbWVudGF0aW9ucywgdXNlIHRoZQotICAgZGljdGlvbmFyeSBtZXRob2RzIGJlbG93IHdoZW5ldmVyIHBvc3NpYmxlLgorICAgICAgVGhlICp0YWlsKiBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gaG9sZCBhZGRpdGlvbmFsIGRhdGEgYXNzb2NpYXRlZCB3aXRoCisgICAgICB0aGUgZWxlbWVudC4gIFRoaXMgYXR0cmlidXRlIGlzIHVzdWFsbHkgYSBzdHJpbmcgYnV0IG1heSBiZSBhbnkKKyAgICAgIGFwcGxpY2F0aW9uLXNwZWNpZmljIG9iamVjdC4gIElmIHRoZSBlbGVtZW50IGlzIGNyZWF0ZWQgZnJvbSBhbiBYTUwgZmlsZQorICAgICAgdGhlIGF0dHJpYnV0ZSB3aWxsIGNvbnRhaW4gYW55IHRleHQgZm91bmQgYWZ0ZXIgdGhlIGVsZW1lbnQncyBlbmQgdGFnIGFuZAorICAgICAgYmVmb3JlIHRoZSBuZXh0IHRhZy4KIAotVGhlIGZvbGxvd2luZyBkaWN0aW9uYXJ5LWxpa2UgbWV0aG9kcyB3b3JrIG9uIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMuCiAKKyAgIC4uIGF0dHJpYnV0ZTo6IGF0dHJpYgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmNsZWFyKCkKKyAgICAgIEEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4gIE5vdGUgdGhhdCB3aGlsZSB0aGUKKyAgICAgICphdHRyaWIqIHZhbHVlIGlzIGFsd2F5cyBhIHJlYWwgbXV0YWJsZSBQeXRob24gZGljdGlvbmFyeSwgYW4gRWxlbWVudFRyZWUKKyAgICAgIGltcGxlbWVudGF0aW9uIG1heSBjaG9vc2UgdG8gdXNlIGFub3RoZXIgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24sIGFuZAorICAgICAgY3JlYXRlIHRoZSBkaWN0aW9uYXJ5IG9ubHkgaWYgc29tZW9uZSBhc2tzIGZvciBpdC4gIFRvIHRha2UgYWR2YW50YWdlIG9mCisgICAgICBzdWNoIGltcGxlbWVudGF0aW9ucywgdXNlIHRoZSBkaWN0aW9uYXJ5IG1ldGhvZHMgYmVsb3cgd2hlbmV2ZXIgcG9zc2libGUuCiAKLSAgIFJlc2V0cyBhbiBlbGVtZW50LiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIGFsbCBzdWJlbGVtZW50cywgY2xlYXJzIGFsbAotICAgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyB0byBOb25lLgorICAgVGhlIGZvbGxvd2luZyBkaWN0aW9uYXJ5LWxpa2UgbWV0aG9kcyB3b3JrIG9uIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMuCiAKIAotLi4gbWV0aG9kOjogRWxlbWVudC5nZXQoa2V5LCBkZWZhdWx0PU5vbmUpCisgICAuLiBtZXRob2Q6OiBjbGVhcigpCiAKLSAgIEdldHMgdGhlIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVkICprZXkqLgorICAgICAgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsCisgICAgICBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCiAKLSAgIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSwgb3IgKmRlZmF1bHQqIGlmIHRoZSBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgLi4gbWV0aG9kOjogZ2V0KGtleSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBHZXRzIHRoZSBlbGVtZW50IGF0dHJpYnV0ZSBuYW1lZCAqa2V5Ki4KKworICAgICAgUmV0dXJucyB0aGUgYXR0cmlidXRlIHZhbHVlLCBvciAqZGVmYXVsdCogaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisKKyAgIC4uIG1ldGhvZDo6IGl0ZW1zKCkKKworICAgICAgUmV0dXJucyB0aGUgZWxlbWVudCBhdHRyaWJ1dGVzIGFzIGEgc2VxdWVuY2Ugb2YgKG5hbWUsIHZhbHVlKSBwYWlycy4gIFRoZQorICAgICAgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLgorCisKKyAgIC4uIG1ldGhvZDo6IGtleXMoKQorCisgICAgICBSZXR1cm5zIHRoZSBlbGVtZW50cyBhdHRyaWJ1dGUgbmFtZXMgYXMgYSBsaXN0LiAgVGhlIG5hbWVzIGFyZSByZXR1cm5lZAorICAgICAgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLgorCisKKyAgIC4uIG1ldGhvZDo6IHNldChrZXksIHZhbHVlKQorCisgICAgICBTZXQgdGhlIGF0dHJpYnV0ZSAqa2V5KiBvbiB0aGUgZWxlbWVudCB0byAqdmFsdWUqLgorCisgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgd29yayBvbiB0aGUgZWxlbWVudCdzIGNoaWxkcmVuIChzdWJlbGVtZW50cykuCisKKworICAgLi4gbWV0aG9kOjogYXBwZW5kKHN1YmVsZW1lbnQpCisKKyAgICAgIEFkZHMgdGhlIGVsZW1lbnQgKnN1YmVsZW1lbnQqIHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50cyBpbnRlcm5hbCBsaXN0CisgICAgICBvZiBzdWJlbGVtZW50cy4KKworCisgICAuLiBtZXRob2Q6OiBleHRlbmQoc3ViZWxlbWVudHMpCiAKKyAgICAgIEFwcGVuZHMgKnN1YmVsZW1lbnRzKiBmcm9tIGEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgorICAgICAgUmFpc2VzIDpleGM6YEFzc2VydGlvbkVycm9yYCBpZiBhIHN1YmVsZW1lbnQgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCi0uLiBtZXRob2Q6OiBFbGVtZW50Lml0ZW1zKCkKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCi0gICBSZXR1cm5zIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgYSBzZXF1ZW5jZSBvZiAobmFtZSwgdmFsdWUpIHBhaXJzLiBUaGUKLSAgIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlci4KIAorICAgLi4gbWV0aG9kOjogZmluZChtYXRjaCkKIAotLi4gbWV0aG9kOjogRWxlbWVudC5rZXlzKCkKKyAgICAgIEZpbmRzIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZSBhIHRhZyBuYW1lCisgICAgICBvciBwYXRoLiAgUmV0dXJucyBhbiBlbGVtZW50IGluc3RhbmNlIG9yIGBgTm9uZWBgLgogCi0gICBSZXR1cm5zIHRoZSBlbGVtZW50cyBhdHRyaWJ1dGUgbmFtZXMgYXMgYSBsaXN0LiBUaGUgbmFtZXMgYXJlIHJldHVybmVkIGluIGFuCi0gICBhcmJpdHJhcnkgb3JkZXIuCiAKKyAgIC4uIG1ldGhvZDo6IGZpbmRhbGwobWF0Y2gpCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuc2V0KGtleSwgdmFsdWUpCisgICAgICBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguICBSZXR1cm5zIGEgbGlzdAorICAgICAgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCiAKLSAgIFNldCB0aGUgYXR0cmlidXRlICprZXkqIG9uIHRoZSBlbGVtZW50IHRvICp2YWx1ZSouCiAKLVRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3b3JrIG9uIHRoZSBlbGVtZW50J3MgY2hpbGRyZW4gKHN1YmVsZW1lbnRzKS4KKyAgIC4uIG1ldGhvZDo6IGZpbmR0ZXh0KG1hdGNoLCBkZWZhdWx0PU5vbmUpCiAKKyAgICAgIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZQorICAgICAgYSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgZWxlbWVudCwgb3IgKmRlZmF1bHQqIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLiAgTm90ZSB0aGF0IGlmIHRoZSBtYXRjaGluZworICAgICAgZWxlbWVudCBoYXMgbm8gdGV4dCBjb250ZW50IGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotLi4gbWV0aG9kOjogRWxlbWVudC5hcHBlbmQoc3ViZWxlbWVudCkKIAotICAgQWRkcyB0aGUgZWxlbWVudCAqc3ViZWxlbWVudCogdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnRzIGludGVybmFsIGxpc3Qgb2YKLSAgIHN1YmVsZW1lbnRzLgorICAgLi4gbWV0aG9kOjogZ2V0Y2hpbGRyZW4oKQogCisgICAgICAuLiBkZXByZWNhdGVkOjogMy4yCisgICAgICAgICBVc2UgYGBsaXN0KGVsZW0pYGAgb3IgaXRlcmF0aW9uLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmZpbmQobWF0Y2gpCiAKLSAgIEZpbmRzIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICptYXRjaCouICAqbWF0Y2gqIG1heSBiZSBhIHRhZyBuYW1lIG9yIHBhdGguCi0gICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2Ugb3IgYGBOb25lYGAuCisgICAuLiBtZXRob2Q6OiBnZXRpdGVyYXRvcih0YWc9Tm9uZSkKIAorICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgICAgVXNlIG1ldGhvZCA6bWV0aDpgRWxlbWVudC5pdGVyYCBpbnN0ZWFkLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmZpbmRhbGwobWF0Y2gpCiAKLSAgIEZpbmRzIGFsbCBzdWJlbGVtZW50cyBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLgotICAgUmV0dXJucyBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisgICAuLiBtZXRob2Q6OiBpbnNlcnQoaW5kZXgsIGVsZW1lbnQpCiAKKyAgICAgIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZmluZHRleHQoY29uZGl0aW9uLCBkZWZhdWx0PU5vbmUpCiAKLSAgIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBzdWJlbGVtZW50IG1hdGNoaW5nICpjb25kaXRpb24qLiAgKmNvbmRpdGlvbiogbWF5IGJlIGEKLSAgIHRhZyBuYW1lIG9yIHBhdGguIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IKLSAgICpkZWZhdWx0KiBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgbWF0Y2hpbmcgZWxlbWVudCBoYXMgbm8KLSAgIHRleHQgY29udGVudCBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQuCisgICAuLiBtZXRob2Q6OiBpdGVyKHRhZz1Ob25lKQogCisgICAgICBDcmVhdGVzIGEgdHJlZSA6dGVybTpgaXRlcmF0b3JgIHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCBhcyB0aGUgcm9vdC4KKyAgICAgIFRoZSBpdGVyYXRvciBpdGVyYXRlcyBvdmVyIHRoaXMgZWxlbWVudCBhbmQgYWxsIGVsZW1lbnRzIGJlbG93IGl0LCBpbgorICAgICAgZG9jdW1lbnQgKGRlcHRoIGZpcnN0KSBvcmRlci4gIElmICp0YWcqIGlzIG5vdCBgYE5vbmVgYCBvciBgYCcqJ2BgLCBvbmx5CisgICAgICBlbGVtZW50cyB3aG9zZSB0YWcgZXF1YWxzICp0YWcqIGFyZSByZXR1cm5lZCBmcm9tIHRoZSBpdGVyYXRvci4gIElmIHRoZQorICAgICAgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuZ2V0Y2hpbGRyZW4oKQogCi0gICBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuCisgICAuLiBtZXRob2Q6OiBpdGVyZmluZChtYXRjaCkKIAorICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyBhbiBpdGVyYWJsZQorICAgICAgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgogCi0uLiBtZXRob2Q6OiBFbGVtZW50LmdldGl0ZXJhdG9yKHRhZz1Ob25lKQorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yIHdpdGggdGhlIGN1cnJlbnQgZWxlbWVudCBhcyB0aGUgcm9vdC4gICBUaGUgaXRlcmF0b3IKLSAgIGl0ZXJhdGVzIG92ZXIgdGhpcyBlbGVtZW50IGFuZCBhbGwgZWxlbWVudHMgYmVsb3cgaXQsIGluIGRvY3VtZW50IChkZXB0aCBmaXJzdCkKLSAgIG9yZGVyLiAgSWYgKnRhZyogaXMgbm90IGBgTm9uZWBgIG9yIGBgJyonYGAsIG9ubHkgZWxlbWVudHMgd2hvc2UgdGFnIGVxdWFscwotICAgKnRhZyogYXJlIHJldHVybmVkIGZyb20gdGhlIGl0ZXJhdG9yLgogCisgICAuLiBtZXRob2Q6OiBpdGVydGV4dCgpCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQuaW5zZXJ0KGluZGV4LCBlbGVtZW50KQorICAgICAgQ3JlYXRlcyBhIHRleHQgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQgYW5kIGFsbAorICAgICAgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgaW5uZXIgdGV4dC4KIAotICAgSW5zZXJ0cyBhIHN1YmVsZW1lbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIGluIHRoaXMgZWxlbWVudC4KKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQubWFrZWVsZW1lbnQodGFnLCBhdHRyaWIpCisgICAuLiBtZXRob2Q6OiBtYWtlZWxlbWVudCh0YWcsIGF0dHJpYikKIAotICAgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4gRG8gbm90IGNhbGwgdGhpcwotICAgbWV0aG9kLCB1c2UgdGhlIFN1YkVsZW1lbnQgZmFjdG9yeSBmdW5jdGlvbiBpbnN0ZWFkLgorICAgICAgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4gIERvIG5vdAorICAgICAgY2FsbCB0aGlzIG1ldGhvZCwgdXNlIHRoZSA6ZnVuYzpgU3ViRWxlbWVudGAgZmFjdG9yeSBmdW5jdGlvbiBpbnN0ZWFkLgogCiAKLS4uIG1ldGhvZDo6IEVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCisgICAuLiBtZXRob2Q6OiByZW1vdmUoc3ViZWxlbWVudCkKIAotICAgUmVtb3ZlcyAqc3ViZWxlbWVudCogZnJvbSB0aGUgZWxlbWVudC4gICBVbmxpa2UgdGhlIGZpbmRYWVogbWV0aG9kcyB0aGlzIG1ldGhvZAotICAgY29tcGFyZXMgZWxlbWVudHMgYmFzZWQgb24gIHRoZSBpbnN0YW5jZSBpZGVudGl0eSwgbm90IG9uIHRhZyB2YWx1ZSBvciBjb250ZW50cy4KKyAgICAgIFJlbW92ZXMgKnN1YmVsZW1lbnQqIGZyb20gdGhlIGVsZW1lbnQuICBVbmxpa2UgdGhlIGZpbmRcKiBtZXRob2RzIHRoaXMKKyAgICAgIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiB0aGUgaW5zdGFuY2UgaWRlbnRpdHksIG5vdCBvbiB0YWcgdmFsdWUKKyAgICAgIG9yIGNvbnRlbnRzLgogCi1FbGVtZW50IG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UgdHlwZSBtZXRob2RzIGZvciB3b3JraW5nCi13aXRoIHN1YmVsZW1lbnRzOiA6bWV0aDpgX19kZWxpdGVtX19gLCA6bWV0aDpgX19nZXRpdGVtX19gLCA6bWV0aDpgX19zZXRpdGVtX19gLAotOm1ldGg6YF9fbGVuX19gLgorICAgOmNsYXNzOmBFbGVtZW50YCBvYmplY3RzIGFsc28gc3VwcG9ydCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlIHR5cGUgbWV0aG9kcworICAgZm9yIHdvcmtpbmcgd2l0aCBzdWJlbGVtZW50czogOm1ldGg6YF9fZGVsaXRlbV9fYCwgOm1ldGg6YF9fZ2V0aXRlbV9fYCwKKyAgIDptZXRoOmBfX3NldGl0ZW1fX2AsIDptZXRoOmBfX2xlbl9fYC4KIAotQ2F1dGlvbjogQmVjYXVzZSBFbGVtZW50IG9iamVjdHMgZG8gbm90IGRlZmluZSBhIDptZXRoOmBfX2Jvb2xfX2AgbWV0aG9kLAotZWxlbWVudHMgd2l0aCBubyBzdWJlbGVtZW50cyB3aWxsIHRlc3QgYXMgYGBGYWxzZWBgLiA6OgorICAgQ2F1dGlvbjogRWxlbWVudHMgd2l0aCBubyBzdWJlbGVtZW50cyB3aWxsIHRlc3QgYXMgYGBGYWxzZWBgLiAgVGhpcyBiZWhhdmlvcgorICAgd2lsbCBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zLiAgVXNlIHNwZWNpZmljIGBgbGVuKGVsZW0pYGAgb3IgYGBlbGVtIGlzCisgICBOb25lYGAgdGVzdCBpbnN0ZWFkLiA6OgogCi0gICBlbGVtZW50ID0gcm9vdC5maW5kKCdmb28nKQorICAgICBlbGVtZW50ID0gcm9vdC5maW5kKCdmb28nKQogCi0gICBpZiBub3QgZWxlbWVudDogIyBjYXJlZnVsIQotICAgICAgIHByaW50KCJlbGVtZW50IG5vdCBmb3VuZCwgb3IgZWxlbWVudCBoYXMgbm8gc3ViZWxlbWVudHMiKQorICAgICBpZiBub3QgZWxlbWVudDogICMgY2FyZWZ1bCEKKyAgICAgICAgIHByaW50KCJlbGVtZW50IG5vdCBmb3VuZCwgb3IgZWxlbWVudCBoYXMgbm8gc3ViZWxlbWVudHMiKQogCi0gICBpZiBlbGVtZW50IGlzIE5vbmU6Ci0gICAgICAgcHJpbnQoImVsZW1lbnQgbm90IGZvdW5kIikKKyAgICAgaWYgZWxlbWVudCBpcyBOb25lOgorICAgICAgICAgcHJpbnQoImVsZW1lbnQgbm90IGZvdW5kIikKIAogCiAuLiBfZWxlbWVudHRyZWUtZWxlbWVudHRyZWUtb2JqZWN0czoKQEAgLTMwNyw1MCArMzg5LDQ5IEBACiAKIC4uIGNsYXNzOjogRWxlbWVudFRyZWUoZWxlbWVudD1Ob25lLCBmaWxlPU5vbmUpCiAKLSAgIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQgaGllcmFyY2h5LAotICAgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tIHN0YW5kYXJkIFhNTC4KKyAgIEVsZW1lbnRUcmVlIHdyYXBwZXIgY2xhc3MuICBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYW4gZW50aXJlIGVsZW1lbnQKKyAgIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCisgICBzdGFuZGFyZCBYTUwuCiAKLSAgICplbGVtZW50KiBpcyB0aGUgcm9vdCBlbGVtZW50LiBUaGUgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUKLSAgIFhNTCAqZmlsZSogaWYgZ2l2ZW4uCisgICAqZWxlbWVudCogaXMgdGhlIHJvb3QgZWxlbWVudC4gIFRoZSB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzCisgICBvZiB0aGUgWE1MICpmaWxlKiBpZiBnaXZlbi4KIAogCiAgICAuLiBtZXRob2Q6OiBfc2V0cm9vdChlbGVtZW50KQogCiAgICAgICBSZXBsYWNlcyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuICBUaGlzIGRpc2NhcmRzIHRoZSBjdXJyZW50CiAgICAgICBjb250ZW50cyBvZiB0aGUgdHJlZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuIGVsZW1lbnQuICBVc2Ugd2l0aAotICAgICAgY2FyZS4gKmVsZW1lbnQqIGlzIGFuIGVsZW1lbnQgaW5zdGFuY2UuCisgICAgICBjYXJlLiAgKmVsZW1lbnQqIGlzIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotICAgLi4gbWV0aG9kOjogZmluZChwYXRoKQorICAgLi4gbWV0aG9kOjogZmluZChtYXRjaCkKIAotICAgICAgRmluZHMgdGhlIGZpcnN0IHRvcGxldmVsIGVsZW1lbnQgd2l0aCBnaXZlbiB0YWcuIFNhbWUgYXMKLSAgICAgIGdldHJvb3QoKS5maW5kKHBhdGgpLiAgKnBhdGgqIGlzIHRoZSBlbGVtZW50IHRvIGxvb2sgZm9yLiBSZXR1cm5zIHRoZQotICAgICAgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgYGBOb25lYGAgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisgICAgICBGaW5kcyB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCBtYXRjaGluZyAqbWF0Y2gqLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcKKyAgICAgIG5hbWUgb3IgcGF0aC4gIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQobWF0Y2gpLiAgUmV0dXJucyB0aGUgZmlyc3QgbWF0Y2hpbmcKKyAgICAgIGVsZW1lbnQsIG9yIGBgTm9uZWBgIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgogCiAKLSAgIC4uIG1ldGhvZDo6IGZpbmRhbGwocGF0aCkKKyAgIC4uIG1ldGhvZDo6IGZpbmRhbGwobWF0Y2gpCiAKLSAgICAgIEZpbmRzIGFsbCB0b3BsZXZlbCBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiB0YWcuIFNhbWUgYXMKLSAgICAgIGdldHJvb3QoKS5maW5kYWxsKHBhdGgpLiAgKnBhdGgqIGlzIHRoZSBlbGVtZW50IHRvIGxvb2sgZm9yLiBSZXR1cm5zIGEKLSAgICAgIGxpc3Qgb3IgOnRlcm06YGl0ZXJhdG9yYCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywgaW4gZG9jdW1lbnQKLSAgICAgIG9yZGVyLgorICAgICAgRmluZHMgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzLCBieSB0YWcgbmFtZSBvciBwYXRoLiAgU2FtZSBhcworICAgICAgZ2V0cm9vdCgpLmZpbmRhbGwobWF0Y2gpLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLiAgUmV0dXJucyBhCisgICAgICBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlci4KIAogCi0gICAuLiBtZXRob2Q6OiBmaW5kdGV4dChwYXRoLCBkZWZhdWx0PU5vbmUpCisgICAuLiBtZXRob2Q6OiBmaW5kdGV4dChtYXRjaCwgZGVmYXVsdD1Ob25lKQogCiAgICAgICBGaW5kcyB0aGUgZWxlbWVudCB0ZXh0IGZvciB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCB3aXRoIGdpdmVuIHRhZy4KLSAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmR0ZXh0KHBhdGgpLiAqcGF0aCogaXMgdGhlIHRvcGxldmVsIGVsZW1lbnQgdG8gbG9vawotICAgICAgZm9yLiAqZGVmYXVsdCogaXMgdGhlIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90Ci0gICAgICBmb3VuZC4gUmV0dXJucyB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciB0aGUKLSAgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQgaGFzIGlzCi0gICAgICBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nLgorICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQobWF0Y2gpLiAgKm1hdGNoKiBtYXkgYmUgYSB0YWcgbmFtZSBvciBwYXRoLgorICAgICAgKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZC4gIFJldHVybnMKKyAgICAgIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZSBkZWZhdWx0IHZhbHVlIG5vCisgICAgICBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudCBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0CisgICAgICBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KIAogCiAgICAuLiBtZXRob2Q6OiBnZXRpdGVyYXRvcih0YWc9Tm9uZSkKIAotICAgICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IKLSAgICAgIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gc2VjdGlvbiBvcmRlci4gKnRhZyogaXMgdGhlIHRhZwotICAgICAgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKKyAgICAgICAgIFVzZSBtZXRob2QgOm1ldGg6YEVsZW1lbnRUcmVlLml0ZXJgIGluc3RlYWQuCiAKIAogICAgLi4gbWV0aG9kOjogZ2V0cm9vdCgpCkBAIC0zNTgsMTkgKzQzOSw0MCBAQAogICAgICAgUmV0dXJucyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuCiAKIAorICAgLi4gbWV0aG9kOjogaXRlcih0YWc9Tm9uZSkKKworICAgICAgQ3JlYXRlcyBhbmQgcmV0dXJucyBhIHRyZWUgaXRlcmF0b3IgZm9yIHRoZSByb290IGVsZW1lbnQuICBUaGUgaXRlcmF0b3IKKyAgICAgIGxvb3BzIG92ZXIgYWxsIGVsZW1lbnRzIGluIHRoaXMgdHJlZSwgaW4gc2VjdGlvbiBvcmRlci4gICp0YWcqIGlzIHRoZSB0YWcKKyAgICAgIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCisKKworICAgLi4gbWV0aG9kOjogaXRlcmZpbmQobWF0Y2gpCisKKyAgICAgIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4gIFNhbWUgYXMKKyAgICAgIGdldHJvb3QoKS5pdGVyZmluZChtYXRjaCkuIFJldHVybnMgYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nCisgICAgICBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKKwogICAgLi4gbWV0aG9kOjogcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSkKIAogICAgICAgTG9hZHMgYW4gZXh0ZXJuYWwgWE1MIHNlY3Rpb24gaW50byB0aGlzIGVsZW1lbnQgdHJlZS4gICpzb3VyY2UqIGlzIGEgZmlsZQogICAgICAgbmFtZSBvciA6dGVybTpgZmlsZSBvYmplY3RgLiAgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLgotICAgICAgSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQgWE1MVHJlZUJ1aWxkZXIgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIHRoZSBzZWN0aW9uCisgICAgICBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIgcGFyc2VyIGlzIHVzZWQuICBSZXR1cm5zIHRoZSBzZWN0aW9uCiAgICAgICByb290IGVsZW1lbnQuCiAKIAotICAgLi4gbWV0aG9kOjogd3JpdGUoZmlsZSwgZW5jb2Rpbmc9Tm9uZSkKKyAgIC4uIG1ldGhvZDo6IHdyaXRlKGZpbGUsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIHhtbF9kZWNsYXJhdGlvbj1Ob25lLCBtZXRob2Q9InhtbCIpCiAKICAgICAgIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLiAgKmZpbGUqIGlzIGEgZmlsZSBuYW1lLCBvciBhCiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgIG9wZW5lZCBmb3Igd3JpdGluZy4gICplbmNvZGluZyogWzFdXyBpcyB0aGUgb3V0cHV0IGVuY29kaW5nCi0gICAgICAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCisgICAgICAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuICBVc2UgYGBlbmNvZGluZz0idW5pY29kZSJgYCB0byB3cml0ZSBhIFVuaWNvZGUgc3RyaW5nLgorICAgICAgKnhtbF9kZWNsYXJhdGlvbiogY29udHJvbHMgaWYgYW4gWE1MIGRlY2xhcmF0aW9uCisgICAgICBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGZpbGUuICBVc2UgRmFsc2UgZm9yIG5ldmVyLCBUcnVlIGZvciBhbHdheXMsIE5vbmUKKyAgICAgIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOCBvciBVbmljb2RlIChkZWZhdWx0IGlzIE5vbmUpLiAgKm1ldGhvZCogaXMKKyAgICAgIGVpdGhlciBgYCJ4bWwiYGAsIGBgImh0bWwiYGAgb3IgYGAidGV4dCJgYCAoZGVmYXVsdCBpcyBgYCJ4bWwiYGApLgorICAgICAgUmV0dXJucyBhbiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmcuCiAKIFRoaXMgaXMgdGhlIFhNTCBmaWxlIHRoYXQgaXMgZ29pbmcgdG8gYmUgbWFuaXB1bGF0ZWQ6OgogCkBAIC0zODksMTMgKzQ5MSwxMyBAQAogICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKICAgICA+Pj4gdHJlZSA9IEVsZW1lbnRUcmVlKCkKICAgICA+Pj4gdHJlZS5wYXJzZSgiaW5kZXgueGh0bWwiKQotICAgIDxFbGVtZW50IGh0bWwgYXQgYjdkM2YxZWM+CisgICAgPEVsZW1lbnQgJ2h0bWwnIGF0IDB4Yjc3ZTZmYWM+CiAgICAgPj4+IHAgPSB0cmVlLmZpbmQoImJvZHkvcCIpICAgICAjIEZpbmRzIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGFnIHAgaW4gYm9keQogICAgID4+PiBwCi0gICAgPEVsZW1lbnQgcCBhdCA4NDE2ZTBjPgotICAgID4+PiBsaW5rcyA9IHAuZ2V0aXRlcmF0b3IoImEiKSAgIyBSZXR1cm5zIGxpc3Qgb2YgYWxsIGxpbmtzCisgICAgPEVsZW1lbnQgJ3AnIGF0IDB4Yjc3ZWMyNmM+CisgICAgPj4+IGxpbmtzID0gbGlzdChwLml0ZXIoImEiKSkgICAjIFJldHVybnMgbGlzdCBvZiBhbGwgbGlua3MKICAgICA+Pj4gbGlua3MKLSAgICBbPEVsZW1lbnQgYSBhdCBiN2Q0ZjllYz4sIDxFbGVtZW50IGEgYXQgYjdkNGZiMGM+XQorICAgIFs8RWxlbWVudCAnYScgYXQgMHhiNzdlYzJhYz4sIDxFbGVtZW50ICdhJyBhdCAweGI3N2VjMWNjPl0KICAgICA+Pj4gZm9yIGkgaW4gbGlua3M6ICAgICAgICAgICAgICMgSXRlcmF0ZXMgdGhyb3VnaCBhbGwgZm91bmQgbGlua3MKICAgICAuLi4gICAgIGkuYXR0cmliWyJ0YXJnZXQiXSA9ICJibGFuayIKICAgICA+Pj4gdHJlZS53cml0ZSgib3V0cHV0LnhodG1sIikKQEAgLTQwOCwxMiArNTEwLDEyIEBACiAKIC4uIGNsYXNzOjogUU5hbWUodGV4dF9vcl91cmksIHRhZz1Ob25lKQogCi0gICBRTmFtZSB3cmFwcGVyLiAgVGhpcyBjYW4gYmUgdXNlZCB0byB3cmFwIGEgUU5hbWUgYXR0cmlidXRlIHZhbHVlLCBpbiBvcmRlciB0bwotICAgZ2V0IHByb3BlciBuYW1lc3BhY2UgaGFuZGxpbmcgb24gb3V0cHV0LiAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcKLSAgIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZQotICAgVVJJIHBhcnQgb2YgYSBRTmFtZS4gSWYgKnRhZyogaXMgZ2l2ZW4sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhbgotICAgVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcwotICAgYXJlIG9wYXF1ZS4KKyAgIFFOYW1lIHdyYXBwZXIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUsIGluIG9yZGVyCisgICB0byBnZXQgcHJvcGVyIG5hbWVzcGFjZSBoYW5kbGluZyBvbiBvdXRwdXQuICAqdGV4dF9vcl91cmkqIGlzIGEgc3RyaW5nCisgICBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSwgaW4gdGhlIGZvcm0ge3VyaX1sb2NhbCwgb3IsIGlmIHRoZSB0YWcgYXJndW1lbnQKKyAgIGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4gIElmICp0YWcqIGlzIGdpdmVuLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMKKyAgIGludGVycHJldGVkIGFzIGFuIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBsb2NhbCBuYW1lLgorICAgOmNsYXNzOmBRTmFtZWAgaW5zdGFuY2VzIGFyZSBvcGFxdWUuCiAKIAogLi4gX2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHM6CkBAIC00MjQsNzQgKzUyNiw4OSBAQAogCiAuLiBjbGFzczo6IFRyZWVCdWlsZGVyKGVsZW1lbnRfZmFjdG9yeT1Ob25lKQogCi0gICBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZSBvZiBzdGFydCwKLSAgIGRhdGEsIGFuZCBlbmQgbWV0aG9kIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuIFlvdSBjYW4gdXNlIHRoaXMKLSAgIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTCBwYXJzZXIsIG9yIGEgcGFyc2VyIGZvcgotICAgc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuIFRoZSAqZWxlbWVudF9mYWN0b3J5KiBpcyBjYWxsZWQgdG8gY3JlYXRlIG5ldwotICAgRWxlbWVudCBpbnN0YW5jZXMgd2hlbiBnaXZlbi4KKyAgIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlIG9mCisgICBzdGFydCwgZGF0YSwgYW5kIGVuZCBtZXRob2QgY2FsbHMgdG8gYSB3ZWxsLWZvcm1lZCBlbGVtZW50IHN0cnVjdHVyZS4gIFlvdQorICAgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTCBwYXJzZXIsCisgICBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuICBUaGUgKmVsZW1lbnRfZmFjdG9yeSogaXMgY2FsbGVkCisgICB0byBjcmVhdGUgbmV3IDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2VzIHdoZW4gZ2l2ZW4uCiAKIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCi0gICAgICBGbHVzaGVzIHRoZSBwYXJzZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50Ci0gICAgICBlbGVtZW50LiBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisgICAgICBGbHVzaGVzIHRoZSBidWlsZGVyIGJ1ZmZlcnMsIGFuZCByZXR1cm5zIHRoZSB0b3BsZXZlbCBkb2N1bWVudAorICAgICAgZWxlbWVudC4gIFJldHVybnMgYW4gOmNsYXNzOmBFbGVtZW50YCBpbnN0YW5jZS4KIAogCiAgICAuLiBtZXRob2Q6OiBkYXRhKGRhdGEpCiAKLSAgICAgIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LiAqZGF0YSogaXMgYSBzdHJpbmcuICBUaGlzIHNob3VsZCBiZQotICAgICAgZWl0aGVyIGFuIEFTQ0lJLW9ubHkgOmNsYXNzOmBieXRlc2Agb2JqZWN0IG9yIGEgOmNsYXNzOmBzdHJgIG9iamVjdC4KKyAgICAgIEFkZHMgdGV4dCB0byB0aGUgY3VycmVudCBlbGVtZW50LiAgKmRhdGEqIGlzIGEgc3RyaW5nLiAgVGhpcyBzaG91bGQgYmUKKyAgICAgIGVpdGhlciBhIGJ5dGVzdHJpbmcsIG9yIGEgVW5pY29kZSBzdHJpbmcuCiAKIAogICAgLi4gbWV0aG9kOjogZW5kKHRhZykKIAotICAgICAgQ2xvc2VzIHRoZSBjdXJyZW50IGVsZW1lbnQuICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuIFJldHVybnMgdGhlIGNsb3NlZAotICAgICAgZWxlbWVudC4KKyAgICAgIENsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50LiAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gIFJldHVybnMgdGhlCisgICAgICBjbG9zZWQgZWxlbWVudC4KIAogCiAgICAuLiBtZXRob2Q6OiBzdGFydCh0YWcsIGF0dHJzKQogCi0gICAgICBPcGVucyBhIG5ldyBlbGVtZW50LiAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLiAqYXR0cnMqIGlzIGEgZGljdGlvbmFyeQotICAgICAgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuIFJldHVybnMgdGhlIG9wZW5lZCBlbGVtZW50LgorICAgICAgT3BlbnMgYSBuZXcgZWxlbWVudC4gICp0YWcqIGlzIHRoZSBlbGVtZW50IG5hbWUuICAqYXR0cnMqIGlzIGEgZGljdGlvbmFyeQorICAgICAgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuICBSZXR1cm5zIHRoZSBvcGVuZWQgZWxlbWVudC4KIAogCi0uLiBfZWxlbWVudHRyZWUteG1sdHJlZWJ1aWxkZXItb2JqZWN0czoKKyAgIEluIGFkZGl0aW9uLCBhIGN1c3RvbSA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBvYmplY3QgY2FuIHByb3ZpZGUgdGhlCisgICBmb2xsb3dpbmcgbWV0aG9kOgogCi1YTUxUcmVlQnVpbGRlciBPYmplY3RzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAuLiBtZXRob2Q6OiBkb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW0pCisKKyAgICAgIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLiAgKm5hbWUqIGlzIHRoZSBkb2N0eXBlIG5hbWUuICAqcHViaWQqIGlzCisgICAgICB0aGUgcHVibGljIGlkZW50aWZpZXIuICAqc3lzdGVtKiBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuICBUaGlzIG1ldGhvZAorICAgICAgZG9lcyBub3QgZXhpc3Qgb24gdGhlIGRlZmF1bHQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgY2xhc3MuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKLS4uIGNsYXNzOjogWE1MVHJlZUJ1aWxkZXIoaHRtbD0wLCB0YXJnZXQ9Tm9uZSkKKy4uIF9lbGVtZW50dHJlZS14bWxwYXJzZXItb2JqZWN0czoKIAotICAgRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUgZXhwYXQgcGFyc2VyLiAqaHRtbCoKLSAgIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudAotICAgaW1wbGVtZW50YXRpb24uICp0YXJnZXQqIGlzIHRoZSB0YXJnZXQgb2JqZWN0LiAgSWYgb21pdHRlZCwgdGhlIGJ1aWxkZXIgdXNlcyBhbgotICAgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIFRyZWVCdWlsZGVyIGNsYXNzLgorWE1MUGFyc2VyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKworLi4gY2xhc3M6OiBYTUxQYXJzZXIoaHRtbD0wLCB0YXJnZXQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSkKKworICAgOmNsYXNzOmBFbGVtZW50YCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhLCBiYXNlZCBvbiB0aGUgZXhwYXQKKyAgIHBhcnNlci4gICpodG1sKiBhcmUgcHJlZGVmaW5lZCBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQgYnkKKyAgIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgKnRhcmdldCogaXMgdGhlIHRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUKKyAgIGJ1aWxkZXIgdXNlcyBhbiBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQgVHJlZUJ1aWxkZXIgY2xhc3MuICAqZW5jb2RpbmcqIFsxXV8KKyAgIGlzIG9wdGlvbmFsLiAgSWYgZ2l2ZW4sIHRoZSB2YWx1ZSBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUKKyAgIFhNTCBmaWxlLgogCiAKICAgIC4uIG1ldGhvZDo6IGNsb3NlKCkKIAotICAgICAgRmluaXNoZXMgZmVlZGluZyBkYXRhIHRvIHRoZSBwYXJzZXIuIFJldHVybnMgYW4gZWxlbWVudCBzdHJ1Y3R1cmUuCisgICAgICBGaW5pc2hlcyBmZWVkaW5nIGRhdGEgdG8gdGhlIHBhcnNlci4gIFJldHVybnMgYW4gZWxlbWVudCBzdHJ1Y3R1cmUuCiAKIAogICAgLi4gbWV0aG9kOjogZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtKQogCi0gICAgICBIYW5kbGVzIGEgZG9jdHlwZSBkZWNsYXJhdGlvbi4gKm5hbWUqIGlzIHRoZSBkb2N0eXBlIG5hbWUuICpwdWJpZCogaXMgdGhlCi0gICAgICBwdWJsaWMgaWRlbnRpZmllci4gKnN5c3RlbSogaXMgdGhlIHN5c3RlbSBpZGVudGlmaWVyLgorICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMgorICAgICAgICAgRGVmaW5lIHRoZSA6bWV0aDpgVHJlZUJ1aWxkZXIuZG9jdHlwZWAgbWV0aG9kIG9uIGEgY3VzdG9tIFRyZWVCdWlsZGVyCisgICAgICAgICB0YXJnZXQuCiAKIAogICAgLi4gbWV0aG9kOjogZmVlZChkYXRhKQogCi0gICAgICBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuICpkYXRhKiBpcyBlbmNvZGVkIGRhdGEuCisgICAgICBGZWVkcyBkYXRhIHRvIHRoZSBwYXJzZXIuICAqZGF0YSogaXMgZW5jb2RlZCBkYXRhLgogCi06bWV0aDpgWE1MVHJlZUJ1aWxkZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgOm1ldGg6YHN0YXJ0YCBtZXRob2QKKzptZXRoOmBYTUxQYXJzZXIuZmVlZGAgY2FsbHMgKnRhcmdldCpcJ3MgOm1ldGg6YHN0YXJ0YCBtZXRob2QKIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgOm1ldGg6YGVuZGAgbWV0aG9kIGZvciBlYWNoIGNsb3NpbmcgdGFnLAotYW5kIGRhdGEgaXMgcHJvY2Vzc2VkIGJ5IG1ldGhvZCA6bWV0aDpgZGF0YWAuIDptZXRoOmBYTUxUcmVlQnVpbGRlci5jbG9zZWAKK2FuZCBkYXRhIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgOm1ldGg6YGRhdGFgLiAgOm1ldGg6YFhNTFBhcnNlci5jbG9zZWAKIGNhbGxzICp0YXJnZXQqXCdzIG1ldGhvZCA6bWV0aDpgY2xvc2VgLgotOmNsYXNzOmBYTUxUcmVlQnVpbGRlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuCis6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuCiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGggb2YgYW4gWE1MIGZpbGU6OgogCi0gICAgPj4+IGZyb20geG1sLmV0cmVlLkVsZW1lbnRUcmVlIGltcG9ydCBYTUxUcmVlQnVpbGRlcgorICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MUGFyc2VyCiAgICAgPj4+IGNsYXNzIE1heERlcHRoOiAgICAgICAgICAgICAgICAgICAgICMgVGhlIHRhcmdldCBvYmplY3Qgb2YgdGhlIHBhcnNlcgogICAgIC4uLiAgICAgbWF4RGVwdGggPSAwCiAgICAgLi4uICAgICBkZXB0aCA9IDAKQEAgLTUwNyw3ICs2MjQsNyBAQAogICAgIC4uLiAgICAgICAgIHJldHVybiBzZWxmLm1heERlcHRoCiAgICAgLi4uCiAgICAgPj4+IHRhcmdldCA9IE1heERlcHRoKCkKLSAgICA+Pj4gcGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIodGFyZ2V0PXRhcmdldCkKKyAgICA+Pj4gcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCiAgICAgPj4+IGV4YW1wbGVYbWwgPSAiIiIKICAgICAuLi4gPGE+CiAgICAgLi4uICAgPGI+CkBAIC01MjcsNyArNjQ0LDYgQEAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCiAuLiBbI10gVGhlIGVuY29kaW5nIHN0cmluZyBpbmNsdWRlZCBpbiBYTUwgb3V0cHV0IHNob3VsZCBjb25mb3JtIHRvIHRoZQotICAgYXBwcm9wcmlhdGUgc3RhbmRhcmRzLiBGb3IgZXhhbXBsZSwgIlVURi04IiBpcyB2YWxpZCwgYnV0ICJVVEY4IiBpcwotICAgbm90LiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwNi9SRUMteG1sMTEtMjAwNjA4MTYvI05ULUVuY29kaW5nRGVjbAorICAgYXBwcm9wcmlhdGUgc3RhbmRhcmRzLiAgRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dCAiVVRGOCIgaXMKKyAgIG5vdC4gIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwxMS0yMDA2MDgxNi8jTlQtRW5jb2RpbmdEZWNsCiAgICBhbmQgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5yc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NDQ3NjUuLjAwMDAwMDAKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmV0cmVlLnJzdAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTptb2Q6YHhtbC5ldHJlZWAgLS0tIFRoZSBFbGVtZW50VHJlZSBBUEkgZm9yIFhNTAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLS4uIG1vZHVsZTo6IHhtbC5ldHJlZQotICAgOnN5bm9wc2lzOiBQYWNrYWdlIGNvbnRhaW5pbmcgY29tbW9uIEVsZW1lbnRUcmVlIG1vZHVsZXMuCi0uLiBtb2R1bGVhdXRob3I6OiBGcmVkcmlrIEx1bmRoIDxmcmVkcmlrQHB5dGhvbndhcmUuY29tPgotCi0KLVRoZSBFbGVtZW50VHJlZSBwYWNrYWdlIGlzIGEgc2ltcGxlLCBlZmZpY2llbnQsIGFuZCBxdWl0ZSBwb3B1bGFyICBsaWJyYXJ5IGZvcgotWE1MIG1hbmlwdWxhdGlvbiBpbiBQeXRob24uICAgIFRoZSA6bW9kOmB4bWwuZXRyZWVgIHBhY2thZ2UgY29udGFpbnMgdGhlIG1vc3QKLWNvbW1vbiBjb21wb25lbnRzICBmcm9tIHRoZSBFbGVtZW50VHJlZSBBUEkgbGlicmFyeS4gIEluIHRoZSBjdXJyZW50IHJlbGVhc2UsCi10aGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIDptb2Q6YEVsZW1lbnRUcmVlYCwgIDptb2Q6YEVsZW1lbnRQYXRoYCwgYW5kCi06bW9kOmBFbGVtZW50SW5jbHVkZWAgbW9kdWxlcyBmcm9tIHRoZSBmdWxsICBFbGVtZW50VHJlZSBkaXN0cmlidXRpb24uCi0KLS4uIFhYWCBUbyBiZSBjb250aW51ZWQhCi0KLQotLi4gc2VlYWxzbzo6Ci0KLSAgIGBFbGVtZW50VHJlZSBPdmVydmlldyA8aHR0cDovL2VmZmJvdC5vcmcvdGFnL2VsZW1lbnR0cmVlPmBfCi0gICAgICBUaGUgaG9tZSBwYWdlIGZvciA6bW9kOmBFbGVtZW50VHJlZWAuICBUaGlzIGluY2x1ZGVzIGxpbmtzICB0byBhZGRpdGlvbmFsCi0gICAgICBkb2N1bWVudGF0aW9uLCBhbHRlcm5hdGl2ZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCAgb3RoZXIgYWRkLW9ucy4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLnNheC51dGlscy5yc3QgYi9Eb2MvbGlicmFyeS94bWwuc2F4LnV0aWxzLnJzdAppbmRleCA5NTA5OWY2Li5mZjM2ZmQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWwuc2F4LnV0aWxzLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuc2F4LnV0aWxzLnJzdApAQCAtNTAsMTMgKzUwLDE5IEBACiAgICB1c2luZyB0aGUgcmVmZXJlbmNlIGNvbmNyZXRlIHN5bnRheC4KIAogCi0uLiBjbGFzczo6IFhNTEdlbmVyYXRvcihvdXQ9Tm9uZSwgZW5jb2Rpbmc9J2lzby04ODU5LTEnKQorLi4gY2xhc3M6OiBYTUxHZW5lcmF0b3Iob3V0PU5vbmUsIGVuY29kaW5nPSdpc28tODg1OS0xJywgc2hvcnRfZW1wdHlfZWxlbWVudHM9RmFsc2UpCiAKICAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgOmNsYXNzOmBDb250ZW50SGFuZGxlcmAgaW50ZXJmYWNlIGJ5IHdyaXRpbmcgU0FYCiAgICBldmVudHMgYmFjayBpbnRvIGFuIFhNTCBkb2N1bWVudC4gSW4gb3RoZXIgd29yZHMsIHVzaW5nIGFuIDpjbGFzczpgWE1MR2VuZXJhdG9yYAogICAgYXMgdGhlIGNvbnRlbnQgaGFuZGxlciB3aWxsIHJlcHJvZHVjZSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQgYmVpbmcgcGFyc2VkLiAqb3V0KgogICAgc2hvdWxkIGJlIGEgZmlsZS1saWtlIG9iamVjdCB3aGljaCB3aWxsIGRlZmF1bHQgdG8gKnN5cy5zdGRvdXQqLiAqZW5jb2RpbmcqIGlzCiAgICB0aGUgZW5jb2Rpbmcgb2YgdGhlIG91dHB1dCBzdHJlYW0gd2hpY2ggZGVmYXVsdHMgdG8gYGAnaXNvLTg4NTktMSdgYC4KKyAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogY29udHJvbHMgdGhlIGZvcm1hdHRpbmcgb2YgZWxlbWVudHMgdGhhdCBjb250YWluIG5vCisgICBjb250ZW50OiAgaWYgKkZhbHNlKiAodGhlIGRlZmF1bHQpIHRoZXkgYXJlIGVtaXR0ZWQgYXMgYSBwYWlyIG9mIHN0YXJ0L2VuZAorICAgdGFncywgaWYgc2V0IHRvICpUcnVlKiB0aGV5IGFyZSBlbWl0dGVkIGFzIGEgc2luZ2xlIHNlbGYtY2xvc2VkIHRhZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cwogCiAKIC4uIGNsYXNzOjogWE1MRmlsdGVyQmFzZShiYXNlKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1scnBjLmNsaWVudC5yc3QgYi9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdAppbmRleCBkMjVjYmFmLi5hNjIwMjFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdApAQCAtMTAsNiArMTAsMTAgQEAKIC4uIFhYWCBOb3QgZXZlcnl0aGluZyBpcyBkb2N1bWVudGVkIHlldC4gIEl0IG1pZ2h0IGJlIGdvb2QgdG8gZGVzY3JpYmUKICAgIE1hcnNoYWxsZXIsIFVubWFyc2hhbGxlciwgZ2V0cGFyc2VyLCBkdW1wcywgbG9hZHMsIGFuZCBUcmFuc3BvcnQuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3htbHJwYy9jbGllbnQucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKIFhNTC1SUEMgaXMgYSBSZW1vdGUgUHJvY2VkdXJlIENhbGwgbWV0aG9kIHRoYXQgdXNlcyBYTUwgcGFzc2VkIHZpYSBIVFRQIGFzIGEKIHRyYW5zcG9ydC4gIFdpdGggaXQsIGEgY2xpZW50IGNhbiBjYWxsIG1ldGhvZHMgd2l0aCBwYXJhbWV0ZXJzIG9uIGEgcmVtb3RlCiBzZXJ2ZXIgKHRoZSBzZXJ2ZXIgaXMgbmFtZWQgYnkgYSBVUkkpIGFuZCBnZXQgYmFjayBzdHJ1Y3R1cmVkIGRhdGEuICBUaGlzIG1vZHVsZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1scnBjLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdAppbmRleCAzY2IyYzNhLi42N2ZlYmE2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZWF1dGhvcjo6IEJyaWFuIFF1aW5sYW4gPGJyaWFucUBhY3RpdmVzdGF0ZS5jb20+CiAuLiBzZWN0aW9uYXV0aG9yOjogRnJlZCBMLiBEcmFrZSwgSnIuIDxmZHJha2VAYWNtLm9yZz4KIAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIveG1scnBjL3NlcnZlci5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YHhtbHJwYy5zZXJ2ZXJgIG1vZHVsZSBwcm92aWRlcyBhIGJhc2ljIHNlcnZlciBmcmFtZXdvcmsgZm9yIFhNTC1SUEMKIHNlcnZlcnMgd3JpdHRlbiBpbiBQeXRob24uICBTZXJ2ZXJzIGNhbiBlaXRoZXIgYmUgZnJlZSBzdGFuZGluZywgdXNpbmcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0IGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKaW5kZXggODI3YjZiMS4uMzI4MjA1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemlwZmlsZS5yc3QKQEAgLTYsNiArNiwxMCBAQAogLi4gbW9kdWxlYXV0aG9yOjogSmFtZXMgQy4gQWhsc3Ryb20gPGppbUBpbnRlcmV0LmNvbT4KIC4uIHNlY3Rpb25hdXRob3I6OiBKYW1lcyBDLiBBaGxzdHJvbSA8amltQGludGVyZXQuY29tPgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi96aXBmaWxlLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiBUaGUgWklQIGZpbGUgZm9ybWF0IGlzIGEgY29tbW9uIGFyY2hpdmUgYW5kIGNvbXByZXNzaW9uIHN0YW5kYXJkLiBUaGlzIG1vZHVsZQogcHJvdmlkZXMgdG9vbHMgdG8gY3JlYXRlLCByZWFkLCB3cml0ZSwgYXBwZW5kLCBhbmQgbGlzdCBhIFpJUCBmaWxlLiAgQW55CiBhZHZhbmNlZCB1c2Ugb2YgdGhpcyBtb2R1bGUgd2lsbCByZXF1aXJlIGFuIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZvcm1hdCwgYXMKQEAgLTI0LDEwICsyOCwxOCBAQAogCiBUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBpdGVtczoKIAotLi4gZXhjZXB0aW9uOjogQmFkWmlwZmlsZQorLi4gZXhjZXB0aW9uOjogQmFkWmlwRmlsZQogCiAgICBUaGUgZXJyb3IgcmFpc2VkIGZvciBiYWQgWklQIGZpbGVzIChvbGQgbmFtZTogYGB6aXBmaWxlLmVycm9yYGApLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKworCisuLiBleGNlcHRpb246OiBCYWRaaXBmaWxlCisKKyAgIFRoaXMgaXMgYW4gYWxpYXMgZm9yIDpleGM6YEJhZFppcEZpbGVgIHRoYXQgZXhpc3RzIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIFB5dGhvbiB2ZXJzaW9ucyBwcmlvciB0byAzLjIuICBVc2FnZSBpcyBkZXByZWNhdGVkLgorCiAKIC4uIGV4Y2VwdGlvbjo6IExhcmdlWmlwRmlsZQogCkBAIC00Myw2ICs1NSw3IEBACiAKIAogLi4gY2xhc3M6OiBQeVppcEZpbGUKKyAgIDpub2luZGV4OgogCiAgICBDbGFzcyBmb3IgY3JlYXRpbmcgWklQIGFyY2hpdmVzIGNvbnRhaW5pbmcgUHl0aG9uIGxpYnJhcmllcy4KIApAQCAtMTAxLDMwICsxMTQsMzcgQEAKICAgIE9wZW4gYSBaSVAgZmlsZSwgd2hlcmUgKmZpbGUqIGNhbiBiZSBlaXRoZXIgYSBwYXRoIHRvIGEgZmlsZSAoYSBzdHJpbmcpIG9yIGEKICAgIGZpbGUtbGlrZSBvYmplY3QuICBUaGUgKm1vZGUqIHBhcmFtZXRlciBzaG91bGQgYmUgYGAncidgYCB0byByZWFkIGFuIGV4aXN0aW5nCiAgICBmaWxlLCBgYCd3J2BgIHRvIHRydW5jYXRlIGFuZCB3cml0ZSBhIG5ldyBmaWxlLCBvciBgYCdhJ2BgIHRvIGFwcGVuZCB0byBhbgotICAgZXhpc3RpbmcgZmlsZS4gIElmICptb2RlKiBpcyBgYCdhJ2BgIGFuZCAqZmlsZSogcmVmZXJzIHRvIGFuIGV4aXN0aW5nIFpJUCBmaWxlLAotICAgdGhlbiBhZGRpdGlvbmFsIGZpbGVzIGFyZSBhZGRlZCB0byBpdC4gIElmICpmaWxlKiBkb2VzIG5vdCByZWZlciB0byBhIFpJUCBmaWxlLAotICAgdGhlbiBhIG5ldyBaSVAgYXJjaGl2ZSBpcyBhcHBlbmRlZCB0byB0aGUgZmlsZS4gIFRoaXMgaXMgbWVhbnQgZm9yIGFkZGluZyBhIFpJUAotICAgYXJjaGl2ZSB0byBhbm90aGVyIGZpbGUsIHN1Y2ggYXMgOmZpbGU6YHB5dGhvbi5leGVgLiAgVXNpbmcgOjoKLQotICAgICAgY2F0IG15emlwLnppcCA+PiBweXRob24uZXhlCi0KLSAgIGFsc28gd29ya3MsIGFuZCBhdCBsZWFzdCA6cHJvZ3JhbTpgV2luWmlwYCBjYW4gcmVhZCBzdWNoIGZpbGVzLiBJZiAqbW9kZSogaXMKLSAgIGBgYWBgIGFuZCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCBhbGwsIGl0IGlzIGNyZWF0ZWQuICpjb21wcmVzc2lvbiogaXMgdGhlCi0gICBaSVAgY29tcHJlc3Npb24gbWV0aG9kIHRvIHVzZSB3aGVuIHdyaXRpbmcgdGhlIGFyY2hpdmUsIGFuZCBzaG91bGQgYmUKLSAgIDpjb25zdDpgWklQX1NUT1JFRGAgb3IgOmNvbnN0OmBaSVBfREVGTEFURURgOyB1bnJlY29nbml6ZWQgdmFsdWVzIHdpbGwgY2F1c2UKLSAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgIGlzIHNwZWNpZmllZCBidXQgdGhlCi0gICA6bW9kOmB6bGliYCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwgOmV4YzpgUnVudGltZUVycm9yYCBpcyBhbHNvIHJhaXNlZC4gIFRoZQotICAgZGVmYXVsdCBpcyA6Y29uc3Q6YFpJUF9TVE9SRURgLiAgSWYgKmFsbG93WmlwNjQqIGlzIGBgVHJ1ZWBgIHppcGZpbGUgd2lsbCBjcmVhdGUKLSAgIFpJUCBmaWxlcyB0aGF0IHVzZSB0aGUgWklQNjQgZXh0ZW5zaW9ucyB3aGVuIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR0IuIElmCi0gICBpdCBpcyAgZmFsc2UgKHRoZSBkZWZhdWx0KSA6bW9kOmB6aXBmaWxlYCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBaSVAKLSAgIGZpbGUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zLiBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0Ci0gICBiZWNhdXNlIHRoZSBkZWZhdWx0IDpwcm9ncmFtOmB6aXBgIGFuZCA6cHJvZ3JhbTpgdW56aXBgIGNvbW1hbmRzIG9uIFVuaXggKHRoZQotICAgSW5mb1pJUCB1dGlsaXRpZXMpIGRvbid0IHN1cHBvcnQgdGhlc2UgZXh0ZW5zaW9ucy4KKyAgIGV4aXN0aW5nIGZpbGUuICBJZiAqbW9kZSogaXMgYGAnYSdgYCBhbmQgKmZpbGUqIHJlZmVycyB0byBhbiBleGlzdGluZyBaSVAKKyAgIGZpbGUsIHRoZW4gYWRkaXRpb25hbCBmaWxlcyBhcmUgYWRkZWQgdG8gaXQuICBJZiAqZmlsZSogZG9lcyBub3QgcmVmZXIgdG8gYQorICAgWklQIGZpbGUsIHRoZW4gYSBuZXcgWklQIGFyY2hpdmUgaXMgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICBUaGlzIGlzIG1lYW50IGZvcgorICAgYWRkaW5nIGEgWklQIGFyY2hpdmUgdG8gYW5vdGhlciBmaWxlIChzdWNoIGFzIDpmaWxlOmBweXRob24uZXhlYCkuICBJZgorICAgKm1vZGUqIGlzIGBgYWBgIGFuZCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCBhdCBhbGwsIGl0IGlzIGNyZWF0ZWQuCisgICAqY29tcHJlc3Npb24qIGlzIHRoZSBaSVAgY29tcHJlc3Npb24gbWV0aG9kIHRvIHVzZSB3aGVuIHdyaXRpbmcgdGhlIGFyY2hpdmUsCisgICBhbmQgc2hvdWxkIGJlIDpjb25zdDpgWklQX1NUT1JFRGAgb3IgOmNvbnN0OmBaSVBfREVGTEFURURgOyB1bnJlY29nbml6ZWQKKyAgIHZhbHVlcyB3aWxsIGNhdXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgCisgICBpcyBzcGVjaWZpZWQgYnV0IHRoZSA6bW9kOmB6bGliYCBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSwgOmV4YzpgUnVudGltZUVycm9yYAorICAgaXMgYWxzbyByYWlzZWQuIFRoZSBkZWZhdWx0IGlzIDpjb25zdDpgWklQX1NUT1JFRGAuICBJZiAqYWxsb3daaXA2NCogaXMKKyAgIGBgVHJ1ZWBgIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NCBleHRlbnNpb25zIHdoZW4KKyAgIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR0IuIElmIGl0IGlzICBmYWxzZSAodGhlIGRlZmF1bHQpIDptb2Q6YHppcGZpbGVgCisgICB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIHRoZSBaSVAgZmlsZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMuCisgICBaSVA2NCBleHRlbnNpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0IGJlY2F1c2UgdGhlIGRlZmF1bHQgOnByb2dyYW06YHppcGAKKyAgIGFuZCA6cHJvZ3JhbTpgdW56aXBgIGNvbW1hbmRzIG9uIFVuaXggKHRoZSBJbmZvWklQIHV0aWxpdGllcykgZG9uJ3Qgc3VwcG9ydAorICAgdGhlc2UgZXh0ZW5zaW9ucy4KIAogICAgSWYgdGhlIGZpbGUgaXMgY3JlYXRlZCB3aXRoIG1vZGUgYGAnYSdgYCBvciBgYCd3J2BgIGFuZCB0aGVuCiAgICA6bWV0aDpgY2xvc2VgXCBkIHdpdGhvdXQgYWRkaW5nIGFueSBmaWxlcyB0byB0aGUgYXJjaGl2ZSwgdGhlIGFwcHJvcHJpYXRlCiAgICBaSVAgc3RydWN0dXJlcyBmb3IgYW4gZW1wdHkgYXJjaGl2ZSB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUuCiAKKyAgIFppcEZpbGUgaXMgYWxzbyBhIGNvbnRleHQgbWFuYWdlciBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIEluIHRoZSBleGFtcGxlLCAqbXl6aXAqIGlzIGNsb3NlZCBhZnRlciB0aGUKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQncyBzdWl0ZSBpcyBmaW5pc2hlZC0tLWV2ZW4gaWYgYW4gZXhjZXB0aW9uIG9jY3Vyczo6CisKKyAgICAgIHdpdGggWmlwRmlsZSgnc3BhbS56aXAnLCAndycpIGFzIG15emlwOgorICAgICAgICAgIG15emlwLndyaXRlKCdlZ2dzLnR4dCcpCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXNlIDpjbGFzczpgWmlwRmlsZWAgYXMgYSBjb250ZXh0IG1hbmFnZXIuCisKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5jbG9zZSgpCiAKQEAgLTI2Myw3ICsyODMsNyBAQAogICAgICAgYnl0ZSwgdGhlIG5hbWUgb2YgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUgd2lsbCBiZSB0cnVuY2F0ZWQgYXQgdGhlIG51bGwgYnl0ZS4KIAogCi0uLiBtZXRob2Q6OiBaaXBGaWxlLndyaXRlc3RyKHppbmZvX29yX2FyY25hbWUsIGJ5dGVzKQorLi4gbWV0aG9kOjogWmlwRmlsZS53cml0ZXN0cih6aW5mb19vcl9hcmNuYW1lLCBieXRlc1ssIGNvbXByZXNzX3R5cGVdKQogCiAgICBXcml0ZSB0aGUgc3RyaW5nICpieXRlcyogdG8gdGhlIGFyY2hpdmU7ICp6aW5mb19vcl9hcmNuYW1lKiBpcyBlaXRoZXIgdGhlIGZpbGUKICAgIG5hbWUgaXQgd2lsbCBiZSBnaXZlbiBpbiB0aGUgYXJjaGl2ZSwgb3IgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlLiAgSWYgaXQncwpAQCAtMjczLDYgKzI5MywxMCBAQAogICAgY3JlYXRlZCB3aXRoIG1vZGUgYGAncidgYCAgd2lsbCByYWlzZSBhIDpleGM6YFJ1bnRpbWVFcnJvcmAuICBDYWxsaW5nCiAgICA6bWV0aDpgd3JpdGVzdHJgIG9uIGEgY2xvc2VkIFppcEZpbGUgd2lsbCByYWlzZSBhIDpleGM6YFJ1bnRpbWVFcnJvcmAuCiAKKyAgIElmIGdpdmVuLCAqY29tcHJlc3NfdHlwZSogb3ZlcnJpZGVzIHRoZSB2YWx1ZSBnaXZlbiBmb3IgdGhlICpjb21wcmVzc2lvbioKKyAgIHBhcmFtZXRlciB0byB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBuZXcgZW50cnksIG9yIGluIHRoZSAqemluZm9fb3JfYXJjbmFtZSoKKyAgIChpZiB0aGF0IGlzIGEgOmNsYXNzOmBaaXBJbmZvYCBpbnN0YW5jZSkuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBXaGVuIHBhc3NpbmcgYSA6Y2xhc3M6YFppcEluZm9gIGluc3RhbmNlIGFzIHRoZSAqemluZm9fb3JfYXJjbmFtZSogcGFyYW1ldGVyLApAQCAtMjgwLDYgKzMwNCw5IEBACiAgICAgICBtZW1iZXIgb2YgdGhlIGdpdmVuIDpjbGFzczpgWmlwSW5mb2AgaW5zdGFuY2UuICBCeSBkZWZhdWx0LCB0aGUKICAgICAgIDpjbGFzczpgWmlwSW5mb2AgY29uc3RydWN0b3Igc2V0cyB0aGlzIG1lbWJlciB0byA6Y29uc3Q6YFpJUF9TVE9SRURgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgVGhlICpjb21wcmVzc2lvbl90eXBlKiBhcmd1bWVudC4KKwogVGhlIGZvbGxvd2luZyBkYXRhIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlOgogCiAKQEAgLTI5NiwzNyArMzIzLDUzIEBACiAgICBzdHJpbmcgbm8gbG9uZ2VyIHRoYW4gNjU1MzUgYnl0ZXMuICBDb21tZW50cyBsb25nZXIgdGhhbiB0aGlzIHdpbGwgYmUKICAgIHRydW5jYXRlZCBpbiB0aGUgd3JpdHRlbiBhcmNoaXZlIHdoZW4gOm1ldGg6YFppcEZpbGUuY2xvc2VgIGlzIGNhbGxlZC4KIAorCiAuLiBfcHl6aXBmaWxlLW9iamVjdHM6CiAKIFB5WmlwRmlsZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgOmNsYXNzOmBQeVppcEZpbGVgIGNvbnN0cnVjdG9yIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlCi06Y2xhc3M6YFppcEZpbGVgIGNvbnN0cnVjdG9yLiAgSW5zdGFuY2VzIGhhdmUgb25lIG1ldGhvZCBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZgotOmNsYXNzOmBaaXBGaWxlYCBvYmplY3RzLgorOmNsYXNzOmBaaXBGaWxlYCBjb25zdHJ1Y3RvciwgYW5kIG9uZSBhZGRpdGlvbmFsIHBhcmFtZXRlciwgKm9wdGltaXplKi4KIAorLi4gY2xhc3M6OiBQeVppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplPS0xKQogCi0uLiBtZXRob2Q6OiBQeVppcEZpbGUud3JpdGVweShwYXRobmFtZSwgYmFzZW5hbWU9JycpCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKyAgICAgIFRoZSAqb3B0aW1pemUqIHBhcmFtZXRlci4KIAotICAgU2VhcmNoIGZvciBmaWxlcyA6ZmlsZTpgXCoucHlgIGFuZCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZSB0byB0aGUgYXJjaGl2ZS4KLSAgIFRoZSBjb3JyZXNwb25kaW5nIGZpbGUgaXMgYSA6ZmlsZTpgXCoucHlvYCBmaWxlIGlmIGF2YWlsYWJsZSwgZWxzZSBhCi0gICA6ZmlsZTpgXCoucHljYCBmaWxlLCBjb21waWxpbmcgaWYgbmVjZXNzYXJ5LiAgSWYgdGhlIHBhdGhuYW1lIGlzIGEgZmlsZSwgdGhlCi0gICBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIDpmaWxlOmAucHlgLCBhbmQganVzdCB0aGUgKGNvcnJlc3BvbmRpbmcKLSAgIDpmaWxlOmBcKi5weVtjb11gKSBmaWxlIGlzIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwgKG5vIHBhdGggaW5mb3JtYXRpb24pLiAgSWYgdGhlCi0gICBwYXRobmFtZSBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aCA6ZmlsZTpgLnB5YCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgCi0gICB3aWxsIGJlIHJhaXNlZC4gIElmIGl0IGlzIGEgZGlyZWN0b3J5LCBhbmQgdGhlIGRpcmVjdG9yeSBpcyBub3QgYSBwYWNrYWdlCi0gICBkaXJlY3RvcnksIHRoZW4gYWxsIHRoZSBmaWxlcyA6ZmlsZTpgXCoucHlbY29dYCBhcmUgYWRkZWQgYXQgdGhlIHRvcCBsZXZlbC4gIElmCi0gICB0aGUgZGlyZWN0b3J5IGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIDpmaWxlOmBcKi5weVtjb11gIGFyZSBhZGRlZCB1bmRlcgotICAgdGhlIHBhY2thZ2UgbmFtZSBhcyBhIGZpbGUgcGF0aCwgYW5kIGlmIGFueSBzdWJkaXJlY3RvcmllcyBhcmUgcGFja2FnZQotICAgZGlyZWN0b3JpZXMsIGFsbCBvZiB0aGVzZSBhcmUgYWRkZWQgcmVjdXJzaXZlbHkuICAqYmFzZW5hbWUqIGlzIGludGVuZGVkIGZvcgotICAgaW50ZXJuYWwgdXNlIG9ubHkuICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMKLSAgIGxpa2UgdGhpczo6CisgICBJbnN0YW5jZXMgaGF2ZSBvbmUgbWV0aG9kIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIDpjbGFzczpgWmlwRmlsZWAgb2JqZWN0czoKIAotICAgICAgc3RyaW5nLnB5YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUb3AgbGV2ZWwgbmFtZQotICAgICAgdGVzdC9fX2luaXRfXy5weWMgICAgICAgICAgICAgICAgICAgICAgICAgIyBQYWNrYWdlIGRpcmVjdG9yeQotICAgICAgdGVzdC90ZXN0YWxsLnB5YyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNb2R1bGUgdGVzdC50ZXN0YWxsCi0gICAgICB0ZXN0L2JvZ3VzL19faW5pdF9fLnB5YyAgICAgICAgICAgICAgICAgICAjIFN1YnBhY2thZ2UgZGlyZWN0b3J5Ci0gICAgICB0ZXN0L2JvZ3VzL215ZmlsZS5weWMgICAgICAgICAgICAgICAgICAgICAjIFN1Ym1vZHVsZSB0ZXN0LmJvZ3VzLm15ZmlsZQorICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnKQorCisgICAgICBTZWFyY2ggZm9yIGZpbGVzIDpmaWxlOmBcKi5weWAgYW5kIGFkZCB0aGUgY29ycmVzcG9uZGluZyBmaWxlIHRvIHRoZQorICAgICAgYXJjaGl2ZS4KKworICAgICAgSWYgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyIHRvIDpjbGFzczpgUHlaaXBGaWxlYCB3YXMgbm90IGdpdmVuIG9yIGBgLTFgYCwKKyAgICAgIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgaXMgYSA6ZmlsZTpgXCoucHlvYCBmaWxlIGlmIGF2YWlsYWJsZSwgZWxzZSBhCisgICAgICA6ZmlsZTpgXCoucHljYCBmaWxlLCBjb21waWxpbmcgaWYgbmVjZXNzYXJ5LgorCisgICAgICBJZiB0aGUgKm9wdGltaXplKiBwYXJhbWV0ZXIgdG8gOmNsYXNzOmBQeVppcEZpbGVgIHdhcyBgYDBgYCwgYGAxYGAgb3IKKyAgICAgIGBgMmBgLCBvbmx5IGZpbGVzIHdpdGggdGhhdCBvcHRpbWl6YXRpb24gbGV2ZWwgKHNlZSA6ZnVuYzpgY29tcGlsZWApIGFyZQorICAgICAgYWRkZWQgdG8gdGhlIGFyY2hpdmUsIGNvbXBpbGluZyBpZiBuZWNlc3NhcnkuCisKKyAgICAgIElmIHRoZSBwYXRobmFtZSBpcyBhIGZpbGUsIHRoZSBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIDpmaWxlOmAucHlgLCBhbmQKKyAgICAgIGp1c3QgdGhlIChjb3JyZXNwb25kaW5nIDpmaWxlOmBcKi5weVtjb11gKSBmaWxlIGlzIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwKKyAgICAgIChubyBwYXRoIGluZm9ybWF0aW9uKS4gIElmIHRoZSBwYXRobmFtZSBpcyBhIGZpbGUgdGhhdCBkb2VzIG5vdCBlbmQgd2l0aAorICAgICAgOmZpbGU6YC5weWAsIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIElmIGl0IGlzIGEgZGlyZWN0b3J5LAorICAgICAgYW5kIHRoZSBkaXJlY3RvcnkgaXMgbm90IGEgcGFja2FnZSBkaXJlY3RvcnksIHRoZW4gYWxsIHRoZSBmaWxlcworICAgICAgOmZpbGU6YFwqLnB5W2NvXWAgYXJlIGFkZGVkIGF0IHRoZSB0b3AgbGV2ZWwuICBJZiB0aGUgZGlyZWN0b3J5IGlzIGEKKyAgICAgIHBhY2thZ2UgZGlyZWN0b3J5LCB0aGVuIGFsbCA6ZmlsZTpgXCoucHlbY29dYCBhcmUgYWRkZWQgdW5kZXIgdGhlIHBhY2thZ2UKKyAgICAgIG5hbWUgYXMgYSBmaWxlIHBhdGgsIGFuZCBpZiBhbnkgc3ViZGlyZWN0b3JpZXMgYXJlIHBhY2thZ2UgZGlyZWN0b3JpZXMsCisgICAgICBhbGwgb2YgdGhlc2UgYXJlIGFkZGVkIHJlY3Vyc2l2ZWx5LiAgKmJhc2VuYW1lKiBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwKKyAgICAgIHVzZSBvbmx5LiAgVGhlIDptZXRoOmB3cml0ZXB5YCBtZXRob2QgbWFrZXMgYXJjaGl2ZXMgd2l0aCBmaWxlIG5hbWVzIGxpa2UKKyAgICAgIHRoaXM6OgorCisgICAgICAgICBzdHJpbmcucHljICAgICAgICAgICAgICAgICAgICMgVG9wIGxldmVsIG5hbWUKKyAgICAgICAgIHRlc3QvX19pbml0X18ucHljICAgICAgICAgICAgIyBQYWNrYWdlIGRpcmVjdG9yeQorICAgICAgICAgdGVzdC90ZXN0YWxsLnB5YyAgICAgICAgICAgICAjIE1vZHVsZSB0ZXN0LnRlc3RhbGwKKyAgICAgICAgIHRlc3QvYm9ndXMvX19pbml0X18ucHljICAgICAgIyBTdWJwYWNrYWdlIGRpcmVjdG9yeQorICAgICAgICAgdGVzdC9ib2d1cy9teWZpbGUucHljICAgICAgICAjIFN1Ym1vZHVsZSB0ZXN0LmJvZ3VzLm15ZmlsZQogCiAKIC4uIF96aXBpbmZvLW9iamVjdHM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0IGIvRG9jL2xpYnJhcnkvemlwaW1wb3J0LnJzdAppbmRleCA1N2FjMWU0Li4yZjBmYTM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS96aXBpbXBvcnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGltcG9ydC5yc3QKQEAgLTI2LDE4ICsyNiwyMCBAQAogY29ycmVzcG9uZGluZyA6ZmlsZTpgLnB5Y2Agb3IgOmZpbGU6YC5weW9gIGZpbGUsIG1lYW5pbmcgdGhhdCBpZiBhIFpJUCBhcmNoaXZlCiBkb2Vzbid0IGNvbnRhaW4gOmZpbGU6YC5weWNgIGZpbGVzLCBpbXBvcnRpbmcgbWF5IGJlIHJhdGhlciBzbG93LgogCitaSVAgYXJjaGl2ZXMgd2l0aCBhbiBhcmNoaXZlIGNvbW1lbnQgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgorCiAuLiBzZWVhbHNvOjoKIAogICAgYFBLWklQIEFwcGxpY2F0aW9uIE5vdGUgPGh0dHA6Ly93d3cucGt3YXJlLmNvbS9kb2N1bWVudHMvY2FzZXN0dWRpZXMvQVBQTk9URS5UWFQ+YF8KICAgICAgIERvY3VtZW50YXRpb24gb24gdGhlIFpJUCBmaWxlIGZvcm1hdCBieSBQaGlsIEthdHosIHRoZSBjcmVhdG9yIG9mIHRoZSBmb3JtYXQgYW5kCiAgICAgICBhbGdvcml0aG1zIHVzZWQuCiAKLSAgIDpwZXA6YDAyNzNgIC0gSW1wb3J0IE1vZHVsZXMgZnJvbSBaaXAgQXJjaGl2ZXMKKyAgIDpwZXA6YDI3M2AgLSBJbXBvcnQgTW9kdWxlcyBmcm9tIFppcCBBcmNoaXZlcwogICAgICAgV3JpdHRlbiBieSBKYW1lcyBDLiBBaGxzdHJvbSwgd2hvIGFsc28gcHJvdmlkZWQgYW4gaW1wbGVtZW50YXRpb24uIFB5dGhvbiAyLjMKICAgICAgIGZvbGxvd3MgdGhlIHNwZWNpZmljYXRpb24gaW4gUEVQIDI3MywgYnV0IHVzZXMgYW4gaW1wbGVtZW50YXRpb24gd3JpdHRlbiBieSBKdXN0CiAgICAgICB2YW4gUm9zc3VtIHRoYXQgdXNlcyB0aGUgaW1wb3J0IGhvb2tzIGRlc2NyaWJlZCBpbiBQRVAgMzAyLgogCi0gICA6cGVwOmAwMzAyYCAtIE5ldyBJbXBvcnQgSG9va3MKKyAgIDpwZXA6YDMwMmAgLSBOZXcgSW1wb3J0IEhvb2tzCiAgICAgICBUaGUgUEVQIHRvIGFkZCB0aGUgaW1wb3J0IGhvb2tzIHRoYXQgaGVscCB0aGlzIG1vZHVsZSB3b3JrLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3psaWIucnN0IGIvRG9jL2xpYnJhcnkvemxpYi5yc3QKaW5kZXggODYyY2Y5MS4uYTdiODM0MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvemxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvemxpYi5yc3QKQEAgLTk2LDIwICs5NiwyNCBAQAogCiAgICBEZWNvbXByZXNzZXMgdGhlIGJ5dGVzIGluICpkYXRhKiwgcmV0dXJuaW5nIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiAgICB1bmNvbXByZXNzZWQgZGF0YS4gIFRoZSAqd2JpdHMqIHBhcmFtZXRlciBjb250cm9scyB0aGUgc2l6ZSBvZiB0aGUgd2luZG93Ci0gICBidWZmZXIuICBJZiAqYnVmc2l6ZSogaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIGluaXRpYWwgc2l6ZSBvZiB0aGUgb3V0cHV0CisgICBidWZmZXIsIGFuZCBpcyBkaXNjdXNzZWQgZnVydGhlciBiZWxvdy4KKyAgIElmICpidWZzaXplKiBpcyBnaXZlbiwgaXQgaXMgdXNlZCBhcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQKICAgIGJ1ZmZlci4gIFJhaXNlcyB0aGUgOmV4YzpgZXJyb3JgIGV4Y2VwdGlvbiBpZiBhbnkgZXJyb3Igb2NjdXJzLgogCiAgICBUaGUgYWJzb2x1dGUgdmFsdWUgb2YgKndiaXRzKiBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBzaXplIG9mIHRoZQogICAgaGlzdG9yeSBidWZmZXIgKHRoZSAid2luZG93IHNpemUiKSB1c2VkIHdoZW4gY29tcHJlc3NpbmcgZGF0YS4gIEl0cyBhYnNvbHV0ZQogICAgdmFsdWUgc2hvdWxkIGJlIGJldHdlZW4gOCBhbmQgMTUgZm9yIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgemxpYgogICAgbGlicmFyeSwgbGFyZ2VyIHZhbHVlcyByZXN1bHRpbmcgaW4gYmV0dGVyIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIGdyZWF0ZXIKLSAgIG1lbW9yeSB1c2FnZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1LiAgV2hlbiAqd2JpdHMqIGlzIG5lZ2F0aXZlLCB0aGUgc3RhbmRhcmQKKyAgIG1lbW9yeSB1c2FnZS4gIFdoZW4gZGVjb21wcmVzc2luZyBhIHN0cmVhbSwgKndiaXRzKiBtdXN0IG5vdCBiZSBzbWFsbGVyCisgICB0aGFuIHRoZSBzaXplIG9yaWdpbmFsbHkgdXNlZCB0byBjb21wcmVzcyB0aGUgc3RyZWFtOyB1c2luZyBhIHRvby1zbWFsbAorICAgdmFsdWUgd2lsbCByZXN1bHQgaW4gYW4gZXhjZXB0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGVyZWZvcmUgdGhlCisgICBoaWdoZXN0IHZhbHVlLCAxNS4gIFdoZW4gKndiaXRzKiBpcyBuZWdhdGl2ZSwgdGhlIHN0YW5kYXJkCiAgICA6cHJvZ3JhbTpgZ3ppcGAgaGVhZGVyIGlzIHN1cHByZXNzZWQuCiAKICAgICpidWZzaXplKiBpcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBidWZmZXIgdXNlZCB0byBob2xkIGRlY29tcHJlc3NlZCBkYXRhLiAgSWYKICAgIG1vcmUgc3BhY2UgaXMgcmVxdWlyZWQsIHRoZSBidWZmZXIgc2l6ZSB3aWxsIGJlIGluY3JlYXNlZCBhcyBuZWVkZWQsIHNvIHlvdQogICAgZG9uJ3QgaGF2ZSB0byBnZXQgdGhpcyB2YWx1ZSBleGFjdGx5IHJpZ2h0OyB0dW5pbmcgaXQgd2lsbCBvbmx5IHNhdmUgYSBmZXcgY2FsbHMKLSAgIHRvIDpjZnVuYzpgbWFsbG9jYC4gIFRoZSBkZWZhdWx0IHNpemUgaXMgMTYzODQuCisgICB0byA6YzpmdW5jOmBtYWxsb2NgLiAgVGhlIGRlZmF1bHQgc2l6ZSBpcyAxNjM4NC4KIAogCiAuLiBmdW5jdGlvbjo6IGRlY29tcHJlc3NvYmooW3diaXRzXSkKZGlmZiAtLWdpdCBhL0RvYy9saWNlbnNlLnJzdCBiL0RvYy9saWNlbnNlLnJzdAppbmRleCBhNGYwOTk0Li5hMzJiN2FiIDEwMDY0NAotLS0gYS9Eb2MvbGljZW5zZS5yc3QKKysrIGIvRG9jL2xpY2Vuc2UucnN0CkBAIC0xMDYsNyArMTA2LDEwIEBACiArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKwogfCAzLjEuMSAgICAgICAgICB8IDMuMSAgICAgICAgICB8IDIwMDkgICAgICAgfCBQU0YgICAgICAgIHwgeWVzICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCi0KK3wgMy4xLjIgICAgICAgICAgfCAzLjEgICAgICAgICAgfCAyMDEwICAgICAgIHwgUFNGICAgICAgICB8IHllcyAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKworfCAzLjIgICAgICAgICAgICB8IDMuMSAgICAgICAgICB8IDIwMTEgICAgICAgfCBQU0YgICAgICAgIHwgeWVzICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rCiAKIC4uIG5vdGU6OgogCkBAIC0xMzUsNyArMTM4LDcgQEAKICAgIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywKICAgIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiB8cmVsZWFzZXwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKICAgIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YKLSAgIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCDCqSAyMDAxLTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKKyAgIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCDCqSAyMDAxLTIwMTEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb247IEFsbCBSaWdodHMKICAgIFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIHxyZWxlYXNlfCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCiAgICBwcmVwYXJlZCBieSBMaWNlbnNlZS4KIApAQCAtOTAzLDcgKzkwNiw3IEBACiBzb3VyY2VzIHVubGVzcyB0aGUgemxpYiB2ZXJzaW9uIGZvdW5kIG9uIHRoZSBzeXN0ZW0gaXMgdG9vIG9sZCB0byBiZQogdXNlZCBmb3IgdGhlIGJ1aWxkOjoKIAotICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgIENvcHlyaWdodCAoQykgMTk5NS0yMDExIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9Eb2MvbWFrZS5iYXQgYi9Eb2MvbWFrZS5iYXQKaW5kZXggNjU1MmFhYi4uNGVhMmQ1MSAxMDA2NDQKLS0tIGEvRG9jL21ha2UuYmF0CisrKyBiL0RvYy9tYWtlLmJhdApAQCAtMzQsNyArMzQsNyBAQAogZ290byBlbmQKIAogOmNoZWNrb3V0Ci1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1NwaGlueC0wLjYuNS9zcGhpbnggdG9vbHMvc3BoaW54Citzdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1NwaGlueC0xLjAuNy9zcGhpbnggdG9vbHMvc3BoaW54CiBzdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL2RvY3V0aWxzLTAuNi9kb2N1dGlscyB0b29scy9kb2N1dGlscwogc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9KaW5qYS0yLjMuMS9qaW5qYTIgdG9vbHMvamluamEyCiBzdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1B5Z21lbnRzLTEuMy4xL3B5Z21lbnRzIHRvb2xzL3B5Z21lbnRzCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2NvbXBvdW5kX3N0bXRzLnJzdCBiL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CmluZGV4IDMxYWUwZWQuLmQyNjE1NzQgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0CkBAIC0zNTIsNiArMzUyLDggQEAKICMuIFRoZSBjb250ZXh0IGV4cHJlc3Npb24gKHRoZSBleHByZXNzaW9uIGdpdmVuIGluIHRoZSA6dG9rZW46YHdpdGhfaXRlbWApIGlzCiAgICBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLgogCisjLiBUaGUgY29udGV4dCBtYW5hZ2VyJ3MgOm1ldGg6YF9fZXhpdF9fYCBpcyBsb2FkZWQgZm9yIGxhdGVyIHVzZS4KKwogIy4gVGhlIGNvbnRleHQgbWFuYWdlcidzIDptZXRoOmBfX2VudGVyX19gIG1ldGhvZCBpcyBpbnZva2VkLgogCiAjLiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm4gdmFsdWUKQEAgLTM2MSw5ICszNjMsOSBAQAogCiAgICAgICBUaGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBndWFyYW50ZWVzIHRoYXQgaWYgdGhlIDptZXRoOmBfX2VudGVyX19gCiAgICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuIDptZXRoOmBfX2V4aXRfX2Agd2lsbCBhbHdheXMgYmUKLSAgICAgIGNhbGxlZC4gIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlIHRhcmdldAotICAgICAgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZyB3aXRoaW4gdGhlIHN1aXRlCi0gICAgICB3b3VsZCBiZS4gIFNlZSBzdGVwIDUgYmVsb3cuCisgICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlIHRhcmdldCBsaXN0LAorICAgICAgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZyB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkCisgICAgICBiZS4gU2VlIHN0ZXAgNiBiZWxvdy4KIAogIy4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLgogCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKaW5kZXggNmY4NzRiNi4uMTI5Zjk4NyAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdApAQCAtMTIxOCw4ICsxMjE4LDcgQEAKICAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC4KIAogICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdCBvcGVyYXRpb24sCi0gICBzZWUgdGhlIGBUb3RhbCBPcmRlcmluZyByZWNpcGUgaW4gdGhlIEFTUE4gY29va2Jvb2sKLSAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY1MjkvPmBfXC4KKyAgIHNlZSA6ZnVuYzpgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYC4KIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9faGFzaF9fKHNlbGYpCiAKQEAgLTE1OTUsNyArMTU5NCw3IEBACiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeSBpcyBmdWxseSBwb3B1bGF0ZWQKIGFuZCB0aGUgbWV0YWNsYXNzJ3MgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBnZXRzIGludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMKIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWQgZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZQotY2FsbGVkICptZW1iZXJzKi4KK2NhbGxlZCBgYG1lbWJlcnNgYC4KIAogCiBDdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CmluZGV4IGQxMWU3NDEuLjgyZTM3YTIgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CkBAIC05NCw5ICs5NCw3IEBACiBhdCB0aGUgbW9kdWxlIGxldmVsLgogCiBBIHRhcmdldCBvY2N1cnJpbmcgaW4gYSA6a2V5d29yZDpgZGVsYCBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvcgotdGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuICBJdCBpcwotaWxsZWdhbCB0byB1bmJpbmQgYSBuYW1lIHRoYXQgaXMgcmVmZXJlbmNlZCBieSBhbiBlbmNsb3Npbmcgc2NvcGU7IHRoZSBjb21waWxlcgotd2lsbCByZXBvcnQgYSA6ZXhjOmBTeW50YXhFcnJvcmAuCit0aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS4KIAogRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYSBjbGFzcyBvcgogZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsIGNvZGUgYmxvY2spLgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS9leHByZXNzaW9ucy5yc3QgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAppbmRleCA5NDRjMzlmLi5mODgyOTUyIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdApAQCAtNjUxLDcgKzY1MSw3IEBACiAgICBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZSBidWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCiAgICBkbyBub3QgaGF2ZSBuYW1lcywgZXZlbiBpZiB0aGV5IGFyZSAnbmFtZWQnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLAogICAgYW5kIHdoaWNoIHRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlCi0gICBjYXNlIGZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIHRvCisgICBjYXNlIGZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCB0bwogICAgcGFyc2UgdGhlaXIgYXJndW1lbnRzLgogCiBJZiB0aGVyZSBhcmUgbW9yZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyB0aGFuIHRoZXJlIGFyZSBmb3JtYWwgcGFyYW1ldGVyIHNsb3RzLCBhCkBAIC05MjEsNiArOTIxLDExIEBACiBBIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZGl2aXNpb24gYnkgYGBwb3coMixuKWBgLiAgQSBsZWZ0IHNoaWZ0CiBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggYGBwb3coMixuKWBgLgogCisuLiBub3RlOjoKKworICAgSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXMgcmVxdWlyZWQKKyAgIHRvIGJlIGF0IG1vc3QgOmF0dHI6YHN5cy5tYXhzaXplYC4gIElmIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXMgbGFyZ2VyIHRoYW4KKyAgIDphdHRyOmBzeXMubWF4c2l6ZWAgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAogLi4gX2JpdHdpc2U6CiAKQEAgLTk1OCw5ICs5NjMsOSBAQAogCiAuLiBfY29tcGFyaXNvbnM6CiAuLiBfaXM6Ci0uLiBfaXNub3Q6CisuLiBfaXMgbm90OgogLi4gX2luOgotLi4gX25vdGluOgorLi4gX25vdCBpbjoKIAogQ29tcGFyaXNvbnMKID09PT09PT09PT09CkBAIC0xMTU2LDExICsxMTYxLDkgQEAKICdmb28nYGAgeWllbGRzIGBgRmFsc2VgYCwgbm90IGBgJydgYC4pCiAKIAotQ29uZGl0aW9uYWwgRXhwcmVzc2lvbnMKK0NvbmRpdGlvbmFsIGV4cHJlc3Npb25zCiA9PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiB2ZXJzaW9uYWRkZWQ6OiAyLjUKLQogLi4gaW5kZXg6OgogICAgcGFpcjogY29uZGl0aW9uYWw7IGV4cHJlc3Npb24KICAgIHBhaXI6IHRlcm5hcnk7IG9wZXJhdG9yCkBAIC0xMzA5LDYgKzEzMTIsNyBAQAogfCBgYChleHByZXNzaW9ucy4uLilgYCwgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksICAgICAgICAgICB8CiB8IGBgW2V4cHJlc3Npb25zLi4uXWBgLCAgICAgICAgICAgICAgICAgICAgICAgICB8IGxpc3QgZGlzcGxheSwgICAgICAgICAgICAgICAgICAgICAgIHwKIHwgYGB7a2V5OmRhdHVtLi4ufWBgLCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZGljdGlvbmFyeSBkaXNwbGF5LCAgICAgICAgICAgICAgICAgfAorfCBgYHtleHByZXNzaW9ucy4uLn1gYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzZXQgZGlzcGxheSAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKaW5kZXggNTQ4ZTBhOS4uYTM3NTExNyAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdApAQCAtMzg1LDExICszODUsNiBAQAogaW4gdGhlIHNhbWUgY29kZSBibG9jay4gIElmIHRoZSBuYW1lIGlzIHVuYm91bmQsIGEgOmV4YzpgTmFtZUVycm9yYCBleGNlcHRpb24KIHdpbGwgYmUgcmFpc2VkLgogCi0uLiBpbmRleDo6IHBhaXI6IGZyZWU7IHZhcmlhYmxlCi0KLUl0IGlzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZSBmcm9tIHRoZSBsb2NhbCBuYW1lc3BhY2UgaWYgaXQgb2NjdXJzIGFzIGEgZnJlZQotdmFyaWFibGUgaW4gYSBuZXN0ZWQgYmxvY2suCi0KIC4uIGluZGV4OjogcGFpcjogYXR0cmlidXRlOyBkZWxldGlvbgogCiBEZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkIHRvIHRoZQpAQCAtMzk3LDYgKzM5MiwxMSBAQAogYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW4gdGhpcyBpcyBkZXRlcm1pbmVkIGJ5CiB0aGUgc2xpY2VkIG9iamVjdCkuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisKKyAgIFByZXZpb3VzbHkgaXQgd2FzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZSBmcm9tIHRoZSBsb2NhbCBuYW1lc3BhY2UgaWYgaXQKKyAgIG9jY3VycyBhcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWQgYmxvY2suCisKIAogLi4gX3JldHVybjoKIApAQCAtNjc0LDcgKzY3NCw5IEBACiAibW9kdWxlIiB3aWxsIHJlZmVyIHRvIGJvdGggcGFja2FnZXMgYW5kIG1vZHVsZXMpLCBzZWFyY2hpbmcKIGZvciB0aGUgbW9kdWxlIG9yIHBhY2thZ2UgY2FuIGJlZ2luLiBUaGUgZmlyc3QgcGxhY2UgY2hlY2tlZCBpcwogOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGNhY2hlIG9mIGFsbCBtb2R1bGVzIHRoYXQgaGF2ZSBiZWVuIGltcG9ydGVkCi1wcmV2aW91c2x5LiBJZiB0aGUgbW9kdWxlIGlzIGZvdW5kIHRoZXJlIHRoZW4gaXQgaXMgdXNlZCBpbiBzdGVwICgyKSBvZiBpbXBvcnQuCitwcmV2aW91c2x5LiBJZiB0aGUgbW9kdWxlIGlzIGZvdW5kIHRoZXJlIHRoZW4gaXQgaXMgdXNlZCBpbiBzdGVwICgyKSBvZiBpbXBvcnQKK3VubGVzcyBgYE5vbmVgYCBpcyBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCBpbiB3aGljaCBjYXNlCis6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgogCiAuLiBpbmRleDo6CiAgICAgc2luZ2xlOiBzeXMubWV0YV9wYXRoCkBAIC02OTEsNyArNjkzLDcgQEAKIHNlY29uZCBhcmd1bWVudCB0byA6bWV0aDpgZmluZF9tb2R1bGVgIGlzIGdpdmVuIGFzIHRoZSB2YWx1ZSBvZiB0aGUKIDphdHRyOmBfX3BhdGhfX2AgYXR0cmlidXRlIGZyb20gdGhlIHBhcmVudCBwYWNrYWdlIChldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0CiBkb3QgaW4gdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCkuIElmIGEgZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUKLWl0IHJldHVybnMgYSA6dGVybTpgbG9hZGVyYCAoZGlzY3Vzc2VkIGxhdGVyKSBvciByZXR1cm5zIDprZXl3b3JkOmBOb25lYC4KK2l0IHJldHVybnMgYSA6dGVybTpgbG9hZGVyYCAoZGlzY3Vzc2VkIGxhdGVyKSBvciByZXR1cm5zIGBgTm9uZWBgLgogCiAuLiBpbmRleDo6CiAgICAgc2luZ2xlOiBzeXMucGF0aF9ob29rcwpAQCAtNzE4LDExICs3MjAsMTEgQEAKIHRoZSBsaXN0IHdpdGggYSBzaW5nbGUgYXJndW1lbnQgb2YgdGhlIHBhdGgsIHJldHVybmluZyBhIGZpbmRlciBvciByYWlzZXMKIDpleGM6YEltcG9ydEVycm9yYC4gSWYgYSBmaW5kZXIgaXMgcmV0dXJuZWQgdGhlbiBpdCBpcyBjYWNoZWQgaW4KIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYW5kIHRoZW4gdXNlZCBmb3IgdGhhdCBwYXRoIGVudHJ5LiBJZiBubyBmaW5kZXIKLWNhbiBiZSBmb3VuZCBidXQgdGhlIHBhdGggZXhpc3RzIHRoZW4gYSB2YWx1ZSBvZiA6a2V5d29yZDpgTm9uZWAgaXMKK2NhbiBiZSBmb3VuZCBidXQgdGhlIHBhdGggZXhpc3RzIHRoZW4gYSB2YWx1ZSBvZiBgYE5vbmVgYCBpcwogc3RvcmVkIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgdG8gc2lnbmlmeSB0aGF0IGFuIGltcGxpY2l0LAogZmlsZS1iYXNlZCBmaW5kZXIgdGhhdCBoYW5kbGVzIG1vZHVsZXMgc3RvcmVkIGFzIGluZGl2aWR1YWwgZmlsZXMgc2hvdWxkIGJlCiB1c2VkIGZvciB0aGF0IHBhdGguIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0IHRoZW4gYSBmaW5kZXIgd2hpY2ggYWx3YXlzCi1yZXR1cm5zIDprZXl3b3JkOmBOb25lYCBpcyBwbGFjZWQgaW4gdGhlIGNhY2hlIGZvciB0aGUgcGF0aC4KK3JldHVybnMgYGBOb25lYGAgaXMgcGxhY2VkIGluIHRoZSBjYWNoZSBmb3IgdGhlIHBhdGguCiAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IGxvYWRlcgpAQCAtNzg2LDcgKzc4OCw3IEBACiBzcGVjaWZ5aW5nICI6a2V5d29yZDpgYXNgIGxvY2FsbmFtZSIuICBJZiBhIG5hbWUgaXMgbm90IGZvdW5kLAogOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIElmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzIHJlcGxhY2VkIGJ5IGEgc3RhcgogKGBgJyonYGApLCBhbGwgcHVibGljIG5hbWVzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBhcmUgYm91bmQgaW4gdGhlIGxvY2FsCi1uYW1lc3BhY2Ugb2YgdGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4uCituYW1lc3BhY2Ugb2YgdGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4KIAogLi4gaW5kZXg6OiBzaW5nbGU6IF9fYWxsX18gKG9wdGlvbmFsIG1vZHVsZSBhdHRyaWJ1dGUpCiAKQEAgLTgxOCw3ICs4MjAsNyBAQAogZXhpc3RzLiBUd28gZG90cyBtZWFucyB1cCBvbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuCiBTbyBpZiB5b3UgZXhlY3V0ZSBgYGZyb20gLiBpbXBvcnQgbW9kYGAgZnJvbSBhIG1vZHVsZSBpbiB0aGUgYGBwa2dgYCBwYWNrYWdlCiB0aGVuIHlvdSB3aWxsIGVuZCB1cCBpbXBvcnRpbmcgYGBwa2cubW9kYGAuIElmIHlvdSBleGVjdXRlIGBgZnJvbSAuLnN1YnBrZzIKLWltcHJ0IG1vZGBgIGZyb20gd2l0aGluIGBgcGtnLnN1YnBrZzFgYCB5b3Ugd2lsbCBpbXBvcnQgYGBwa2cuc3VicGtnMi5tb2RgYC4KK2ltcG9ydCBtb2RgYCBmcm9tIHdpdGhpbiBgYHBrZy5zdWJwa2cxYGAgeW91IHdpbGwgaW1wb3J0IGBgcGtnLnN1YnBrZzIubW9kYGAuCiBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpcyBjb250YWluZWQgd2l0aGluIDpwZXA6YDMyOGAuCiAKIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdApAQCAtOTQ0LDcgKzk0Niw3IEBACiAqKlByb2dyYW1tZXIncyBub3RlOioqIHRoZSA6a2V5d29yZDpgZ2xvYmFsYCBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgcGFyc2VyLiAgSXQKIGFwcGxpZXMgb25seSB0byBjb2RlIHBhcnNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSA6a2V5d29yZDpgZ2xvYmFsYCBzdGF0ZW1lbnQuCiBJbiBwYXJ0aWN1bGFyLCBhIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCBjb250YWluZWQgaW4gYSBzdHJpbmcgb3IgY29kZQotb2JqZWN0IHN1cHBsaWVkIHRvIHRoZSBidWlsdGluIDpmdW5jOmBleGVjYCBmdW5jdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGNvZGUKK29iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHQtaW4gOmZ1bmM6YGV4ZWNgIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgY29kZQogYmxvY2sgKmNvbnRhaW5pbmcqIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgY29kZSBjb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcwogdW5hZmZlY3RlZCBieSA6a2V5d29yZDpgZ2xvYmFsYCBzdGF0ZW1lbnRzIGluIHRoZSBjb2RlIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uCiBjYWxsLiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgOmZ1bmM6YGV2YWxgIGFuZCA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb25zLgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3JzdGxpbnQucHkgYi9Eb2MvdG9vbHMvcnN0bGludC5weQppbmRleCBlOTc3ZjIxLi4yY2MzZDEyIDEwMDc1NQotLS0gYS9Eb2MvdG9vbHMvcnN0bGludC5weQorKysgYi9Eb2MvdG9vbHMvcnN0bGludC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIAogIyBDaGVjayBmb3Igc3R5bGlzdGljIGFuZCBmb3JtYWwgaXNzdWVzIGluIC5yc3QgYW5kIC5weQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9kb3dubG9hZC5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9kb3dubG9hZC5odG1sCmluZGV4IDRmY2ExMzguLmY4OWM0NTggMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvZG93bmxvYWQuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKQEAgLTMzLDYgKzMzLDEwIEBACiAgICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLXRleHQuemlwIj5Eb3dubG9hZDwvYT4gKGNhLiAyIE1CKTwvdGQ+CiAgICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLXRleHQudGFyLmJ6MiI+RG93bmxvYWQ8L2E+IChjYS4gMS41IE1CKTwvdGQ+CiAgIDwvdHI+CisgPHRyPjx0ZD5FUFVCPC90ZD4KKyAgICA8dGQ+PGEgaHJlZj0ie3sgZGxiYXNlIH19L3B5dGhvbi17eyByZWxlYXNlIH19LWRvY3MtZXB1Yi56aXAiPkRvd25sb2FkPC9hPiAoY2EuIDMuNSBNQik8L3RkPgorICAgIDx0ZD48YSBocmVmPSJ7eyBkbGJhc2UgfX0vcHl0aG9uLXt7IHJlbGVhc2UgfX0tZG9jcy1lcHViLnRhci5iejIiPkRvd25sb2FkPC9hPiAoY2EuIDMuNSBNQik8L3RkPgorICA8L3RyPgogPC90YWJsZT4KIAogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleGNvbnRlbnQuaHRtbAppbmRleCAzMDk2M2MzLi5kNWUxN2NkIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCisrKyBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgPHA+PHN0cm9uZz5JbmRpY2VzIGFuZCB0YWJsZXM6PC9zdHJvbmc+PC9wPgogICA8dGFibGUgY2xhc3M9ImNvbnRlbnRzdGFibGUiIGFsaWduPSJjZW50ZXIiPjx0cj4KICAgICA8dGQgd2lkdGg9IjUwJSI+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygibW9kaW5kZXgiKSB9fSI+R2xvYmFsIE1vZHVsZSBJbmRleDwvYT48YnIvPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oInB5LW1vZGluZGV4IikgfX0iPkdsb2JhbCBNb2R1bGUgSW5kZXg8L2E+PGJyLz4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnF1aWNrIGFjY2VzcyB0byBhbGwgbW9kdWxlczwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZ2VuaW5kZXgiKSB9fSI+R2VuZXJhbCBJbmRleDwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+YWxsIGZ1bmN0aW9ucywgY2xhc3NlcywgdGVybXM8L3NwYW4+PC9wPgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbCBiL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKaW5kZXggMDg2ZDg4My4uNjcyNDkyZSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9pbmRleHNpZGViYXIuaHRtbAorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCkBAIC0zLDcgKzMsNyBAQAogCSAgICA8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgogCSAgICA8dWw+CiAJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi9weTNrLyI+UHl0aG9uIDMuMiAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisJICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xLyI+UHl0aG9uIDMuMSAoc3RhYmxlKTwvYT48L2xpPgogICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgogICAgICAgICAgICAgPC91bD4KIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5IGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9wYXRjaGxldmVsLnB5CmluZGV4IDA4Mjg1OGUuLmIwNzBkNjAgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weQorKysgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHkKQEAgLTY4LDQgKzY4LDQgQEAKICAgICAgICAgcmV0dXJuIHZlcnNpb24sIHJlbGVhc2UKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBwcmludCBnZXRfaGVhZGVyX3ZlcnNpb25faW5mbygnLicpWzFdCisgICAgcHJpbnQoZ2V0X2hlYWRlcl92ZXJzaW9uX2luZm8oJy4nKVsxXSkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvcHlzcGVjaWZpYy5weQppbmRleCA3MTExYzA2Li5kOTI4Y2ZkIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CkBAIC0xMCw4ICsxMCwxMCBAQAogIiIiCiAKIElTU1VFX1VSSSA9ICdodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlJXMnCitTT1VSQ0VfVVJJID0gJ2h0dHA6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS9kZWZhdWx0LyVzJwogCiBmcm9tIGRvY3V0aWxzIGltcG9ydCBub2RlcywgdXRpbHMKK2Zyb20gc3BoaW54LnV0aWwubm9kZXMgaW1wb3J0IHNwbGl0X2V4cGxpY2l0X3RpdGxlCiAKICMgbW9ua2V5LXBhdGNoIHJlU1QgcGFyc2VyIHRvIGRpc2FibGUgYWxwaGFiZXRpYyBhbmQgcm9tYW4gZW51bWVyYXRlZCBsaXN0cwogZnJvbSBkb2N1dGlscy5wYXJzZXJzLnJzdC5zdGF0ZXMgaW1wb3J0IEJvZHkKQEAgLTQ0LDYgKzQ2LDE2IEBACiAgICAgcmV0dXJuIFtyZWZub2RlXSwgW10KIAogCisjIFN1cHBvcnQgZm9yIGxpbmtpbmcgdG8gUHl0aG9uIHNvdXJjZSBmaWxlcyBlYXNpbHkKKworZGVmIHNvdXJjZV9yb2xlKHR5cCwgcmF3dGV4dCwgdGV4dCwgbGluZW5vLCBpbmxpbmVyLCBvcHRpb25zPXt9LCBjb250ZW50PVtdKToKKyAgICBoYXNfdCwgdGl0bGUsIHRhcmdldCA9IHNwbGl0X2V4cGxpY2l0X3RpdGxlKHRleHQpCisgICAgdGl0bGUgPSB1dGlscy51bmVzY2FwZSh0aXRsZSkKKyAgICB0YXJnZXQgPSB1dGlscy51bmVzY2FwZSh0YXJnZXQpCisgICAgcmVmbm9kZSA9IG5vZGVzLnJlZmVyZW5jZSh0aXRsZSwgdGl0bGUsIHJlZnVyaT1TT1VSQ0VfVVJJICUgdGFyZ2V0KQorICAgIHJldHVybiBbcmVmbm9kZV0sIFtdCisKKwogIyBTdXBwb3J0IGZvciBtYXJraW5nIHVwIGltcGxlbWVudGF0aW9uIGRldGFpbHMKIAogZnJvbSBzcGhpbngudXRpbC5jb21wYXQgaW1wb3J0IERpcmVjdGl2ZQpAQCAtNzIsNiArODQsNjcgQEAKICAgICAgICAgcmV0dXJuIFtwbm9kZV0KIAogCisjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIGRlY29yYXRvcnMKKworZnJvbSBzcGhpbnggaW1wb3J0IGFkZG5vZGVzCitmcm9tIHNwaGlueC5kb21haW5zLnB5dGhvbiBpbXBvcnQgUHlNb2R1bGVsZXZlbCwgUHlDbGFzc21lbWJlcgorCitjbGFzcyBQeURlY29yYXRvck1peGluKG9iamVjdCk6CisgICAgZGVmIGhhbmRsZV9zaWduYXR1cmUoc2VsZiwgc2lnLCBzaWdub2RlKToKKyAgICAgICAgcmV0ID0gc3VwZXIoUHlEZWNvcmF0b3JNaXhpbiwgc2VsZikuaGFuZGxlX3NpZ25hdHVyZShzaWcsIHNpZ25vZGUpCisgICAgICAgIHNpZ25vZGUuaW5zZXJ0KDAsIGFkZG5vZGVzLmRlc2NfYWRkbmFtZSgnQCcsICdAJykpCisgICAgICAgIHJldHVybiByZXQKKworICAgIGRlZiBuZWVkc19hcmdsaXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgUHlEZWNvcmF0b3JGdW5jdGlvbihQeURlY29yYXRvck1peGluLCBQeU1vZHVsZWxldmVsKToKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAjIGEgZGVjb3JhdG9yIGZ1bmN0aW9uIGlzIGEgZnVuY3Rpb24gYWZ0ZXIgYWxsCisgICAgICAgIHNlbGYubmFtZSA9ICdweTpmdW5jdGlvbicKKyAgICAgICAgcmV0dXJuIFB5TW9kdWxlbGV2ZWwucnVuKHNlbGYpCisKK2NsYXNzIFB5RGVjb3JhdG9yTWV0aG9kKFB5RGVjb3JhdG9yTWl4aW4sIFB5Q2xhc3NtZW1iZXIpOgorICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdweTptZXRob2QnCisgICAgICAgIHJldHVybiBQeUNsYXNzbWVtYmVyLnJ1bihzZWxmKQorCisKKyMgU3VwcG9ydCBmb3IgZG9jdW1lbnRpbmcgdmVyc2lvbiBvZiByZW1vdmFsIGluIGRlcHJlY2F0aW9ucworCitmcm9tIHNwaGlueC5sb2NhbGUgaW1wb3J0IHZlcnNpb25sYWJlbHMKK2Zyb20gc3BoaW54LnV0aWwuY29tcGF0IGltcG9ydCBEaXJlY3RpdmUKKwordmVyc2lvbmxhYmVsc1snZGVwcmVjYXRlZC1yZW1vdmVkJ10gPSBcCisgICAgJ0RlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAlcywgd2lsbCBiZSByZW1vdmVkIGluIHZlcnNpb24gJXMnCisKK2NsYXNzIERlcHJlY2F0ZWRSZW1vdmVkKERpcmVjdGl2ZSk6CisgICAgaGFzX2NvbnRlbnQgPSBUcnVlCisgICAgcmVxdWlyZWRfYXJndW1lbnRzID0gMgorICAgIG9wdGlvbmFsX2FyZ3VtZW50cyA9IDEKKyAgICBmaW5hbF9hcmd1bWVudF93aGl0ZXNwYWNlID0gVHJ1ZQorICAgIG9wdGlvbl9zcGVjID0ge30KKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIG5vZGUgPSBhZGRub2Rlcy52ZXJzaW9ubW9kaWZpZWQoKQorICAgICAgICBub2RlLmRvY3VtZW50ID0gc2VsZi5zdGF0ZS5kb2N1bWVudAorICAgICAgICBub2RlWyd0eXBlJ10gPSAnZGVwcmVjYXRlZC1yZW1vdmVkJworICAgICAgICB2ZXJzaW9uID0gKHNlbGYuYXJndW1lbnRzWzBdLCBzZWxmLmFyZ3VtZW50c1sxXSkKKyAgICAgICAgbm9kZVsndmVyc2lvbiddID0gdmVyc2lvbgorICAgICAgICBpZiBsZW4oc2VsZi5hcmd1bWVudHMpID09IDM6CisgICAgICAgICAgICBpbm9kZXMsIG1lc3NhZ2VzID0gc2VsZi5zdGF0ZS5pbmxpbmVfdGV4dChzZWxmLmFyZ3VtZW50c1syXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vKzEpCisgICAgICAgICAgICBub2RlLmV4dGVuZChpbm9kZXMpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnRlbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZS5uZXN0ZWRfcGFyc2Uoc2VsZi5jb250ZW50LCBzZWxmLmNvbnRlbnRfb2Zmc2V0LCBub2RlKQorICAgICAgICAgICAgcmV0ID0gW25vZGVdICsgbWVzc2FnZXMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldCA9IFtub2RlXQorICAgICAgICBlbnYgPSBzZWxmLnN0YXRlLmRvY3VtZW50LnNldHRpbmdzLmVudgorICAgICAgICBlbnYubm90ZV92ZXJzaW9uY2hhbmdlKCdkZXByZWNhdGVkJywgdmVyc2lvblswXSwgbm9kZSwgc2VsZi5saW5lbm8pCisgICAgICAgIHJldHVybiByZXQKKworCiAjIFN1cHBvcnQgZm9yIGJ1aWxkaW5nICJ0b3BpYyBoZWxwIiBmb3IgcHlkb2MKIAogcHlkb2NfdG9waWNfbGFiZWxzID0gWwpAQCAtMTE5LDEwICsxOTIsMTAgQEAKICAgICAgICAgZm9yIGxhYmVsIGluIHNlbGYuc3RhdHVzX2l0ZXJhdG9yKHB5ZG9jX3RvcGljX2xhYmVscywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWlsZGluZyB0b3BpY3MuLi4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aD1sZW4ocHlkb2NfdG9waWNfbGFiZWxzKSk6Ci0gICAgICAgICAgICBpZiBsYWJlbCBub3QgaW4gc2VsZi5lbnYubGFiZWxzOgorICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIHNlbGYuZW52LmRvbWFpbmRhdGFbJ3N0ZCddWydsYWJlbHMnXToKICAgICAgICAgICAgICAgICBzZWxmLndhcm4oJ2xhYmVsICVyIG5vdCBpbiBkb2N1bWVudGF0aW9uJyAlIGxhYmVsKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBkb2NuYW1lLCBsYWJlbGlkLCBzZWN0bmFtZSA9IHNlbGYuZW52LmxhYmVsc1tsYWJlbF0KKyAgICAgICAgICAgIGRvY25hbWUsIGxhYmVsaWQsIHNlY3RuYW1lID0gc2VsZi5lbnYuZG9tYWluZGF0YVsnc3RkJ11bJ2xhYmVscyddW2xhYmVsXQogICAgICAgICAgICAgZG9jdHJlZSA9IHNlbGYuZW52LmdldF9hbmRfcmVzb2x2ZV9kb2N0cmVlKGRvY25hbWUsIHNlbGYpCiAgICAgICAgICAgICBkb2N1bWVudCA9IG5ld19kb2N1bWVudCgnPHNlY3Rpb24gbm9kZT4nKQogICAgICAgICAgICAgZG9jdW1lbnQuYXBwZW5kKGRvY3RyZWUuaWRzW2xhYmVsaWRdKQpAQCAtMTQ3LDcgKzIyMCw2IEBACiAjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIE9wY29kZXMKIAogaW1wb3J0IHJlCi1mcm9tIHNwaGlueCBpbXBvcnQgYWRkbm9kZXMKIAogb3Bjb2RlX3NpZ19yZSA9IHJlLmNvbXBpbGUocicoXHcrKD86XCtcZCk/KSg/OlxzKlwoKC4qKVwpKT8nKQogCkBAIC0xNjUsMTEgKzIzNyw0MSBAQAogICAgIHJldHVybiBvcG5hbWUuc3RyaXAoKQogCiAKKyMgU3VwcG9ydCBmb3IgZG9jdW1lbnRpbmcgcGRiIGNvbW1hbmRzCisKK3BkYmNtZF9zaWdfcmUgPSByZS5jb21waWxlKHInKFthLXooKSFdKylccyooLiopJykKKworIyBsYXRlci4uLgorI3BkYmFyZ3NfdG9rZW5zX3JlID0gcmUuY29tcGlsZShyJycnW2EtekEtWl0rICB8ICAjIGlkZW50aWZpZXJzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbLiw6XSsgICAgIHwgICMgcHVuY3R1YXRpb24KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcW1xdKCldICAgfCAgIyBwYXJlbnMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxzKyAgICAgICAgICAgIyB3aGl0ZXNwYWNlCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJycsIHJlLlgpCisKK2RlZiBwYXJzZV9wZGJfY29tbWFuZChlbnYsIHNpZywgc2lnbm9kZSk6CisgICAgIiIiVHJhbnNmb3JtIGEgcGRiIGNvbW1hbmQgc2lnbmF0dXJlIGludG8gUlNUIG5vZGVzLiIiIgorICAgIG0gPSBwZGJjbWRfc2lnX3JlLm1hdGNoKHNpZykKKyAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICBuYW1lLCBhcmdzID0gbS5ncm91cHMoKQorICAgIGZ1bGxuYW1lID0gbmFtZS5yZXBsYWNlKCcoJywgJycpLnJlcGxhY2UoJyknLCAnJykKKyAgICBzaWdub2RlICs9IGFkZG5vZGVzLmRlc2NfbmFtZShuYW1lLCBuYW1lKQorICAgIGlmIGFyZ3M6CisgICAgICAgIHNpZ25vZGUgKz0gYWRkbm9kZXMuZGVzY19hZGRuYW1lKCcgJythcmdzLCAnICcrYXJncykKKyAgICByZXR1cm4gZnVsbG5hbWUKKworCiBkZWYgc2V0dXAoYXBwKToKICAgICBhcHAuYWRkX3JvbGUoJ2lzc3VlJywgaXNzdWVfcm9sZSkKKyAgICBhcHAuYWRkX3JvbGUoJ3NvdXJjZScsIHNvdXJjZV9yb2xlKQogICAgIGFwcC5hZGRfZGlyZWN0aXZlKCdpbXBsLWRldGFpbCcsIEltcGxlbWVudGF0aW9uRGV0YWlsKQorICAgIGFwcC5hZGRfZGlyZWN0aXZlKCdkZXByZWNhdGVkLXJlbW92ZWQnLCBEZXByZWNhdGVkUmVtb3ZlZCkKICAgICBhcHAuYWRkX2J1aWxkZXIoUHlkb2NUb3BpY3NCdWlsZGVyKQogICAgIGFwcC5hZGRfYnVpbGRlcihzdXNwaWNpb3VzLkNoZWNrU3VzcGljaW91c01hcmt1cEJ1aWxkZXIpCiAgICAgYXBwLmFkZF9kZXNjcmlwdGlvbl91bml0KCdvcGNvZGUnLCAnb3Bjb2RlJywgJyVzIChvcGNvZGUpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vfb3Bjb2RlX3NpZ25hdHVyZSkKKyAgICBhcHAuYWRkX2Rlc2NyaXB0aW9uX3VuaXQoJ3BkYmNvbW1hbmQnLCAncGRiY21kJywgJyVzIChwZGIgY29tbWFuZCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9wZGJfY29tbWFuZCkKICAgICBhcHAuYWRkX2Rlc2NyaXB0aW9uX3VuaXQoJzJ0bzNmaXhlcicsICcydG8zZml4ZXInLCAnJXMgKDJ0bzMgZml4ZXIpJykKKyAgICBhcHAuYWRkX2RpcmVjdGl2ZV90b19kb21haW4oJ3B5JywgJ2RlY29yYXRvcicsIFB5RGVjb3JhdG9yRnVuY3Rpb24pCisgICAgYXBwLmFkZF9kaXJlY3RpdmVfdG9fZG9tYWluKCdweScsICdkZWNvcmF0b3JtZXRob2QnLCBQeURlY29yYXRvck1ldGhvZCkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcyBiL0RvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2Jhc2ljLmNzcwppbmRleCAyYjQ3NjIyLi42NWFhNWYxIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzCkBAIC0yNTMsOCArMjUzLDggQEAKIAogdGFibGUuZG9jdXRpbHMgdGQsIHRhYmxlLmRvY3V0aWxzIHRoIHsKICAgICBwYWRkaW5nOiAycHggNXB4IDJweCA1cHg7Ci0gICAgYm9yZGVyLWxlZnQ6IDA7ICAgIAotICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY7ICAgIAorICAgIGJvcmRlci1sZWZ0OiAwOworICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY7CiB9CiAKIHRhYmxlLmRvY3V0aWxzIHRkIHAubGFzdCwgdGFibGUuZG9jdXRpbHMgdGggcC5sYXN0IHsKQEAgLTI3MCw3ICsyNzAsNyBAQAogfQogCiB0YWJsZS5kb2N1dGlscyB0aCB7Ci0gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjYWM7ICAgIAorICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2FjOwogICAgIGJhY2tncm91bmQtY29sb3I6ICNlZGU7CiB9CiAKQEAgLTI4MCw3ICsyODAsNyBAQAogfQogCiB0aC5oZWFkIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7ICAgIAorICAgIHRleHQtYWxpZ246IGNlbnRlcjsKIH0KIAogLyogLS0gb3RoZXIgYm9keSBzdHlsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTMzMyw3ICszMzMsNyBAQAogICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKIH0KIAotcC5kZXByZWNhdGVkIHsKK3AuZGVwcmVjYXRlZCwgcC5kZXByZWNhdGVkLXJlbW92ZWQgewogICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmU0ZTQ7CiAgICAgYm9yZGVyOiAxcHggc29saWQgI2Y2NjsKICAgICBwYWRkaW5nOiA3cHgKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdiBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgppbmRleCA0ZDRkYjk0Li5lZjk4MDkxIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwLWlnbm9yZWQuY3N2CkBAIC0xODYsNiArMTg2LDk5IEBACiBkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTYyLC4uIGRlc2NyaWJlOiwuLiBkZXNjcmliZTo6IGEgPT0gYgogZG9jdW1lbnRpbmcvZnJvbWxhdGV4LDE2OCwuLiBjbWRvcHRpb246LC4uIGNtZG9wdGlvbjo6IC1PCiBkb2N1bWVudGluZy9mcm9tbGF0ZXgsMTY4LC4uIGVudnZhcjosLi4gZW52dmFyOjogUFlUSE9OSU5TUEVDVAorZG9jdW1lbnRpbmcvbWFya3VwLDMzLC4uIHNlY3Rpb25hdXRob3I6LC4uIHNlY3Rpb25hdXRob3I6OiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgorZG9jdW1lbnRpbmcvbWFya3VwLDQyLDptb2QsOm1vZDpgcGFycm90YCAtLSBEZWFkIHBhcnJvdCBhY2Nlc3MKK2RvY3VtZW50aW5nL21hcmt1cCw0MixgLDptb2Q6YHBhcnJvdGAgLS0gRGVhZCBwYXJyb3QgYWNjZXNzCitkb2N1bWVudGluZy9tYXJrdXAsNDIsLi4gbW9kdWxlOiwuLiBtb2R1bGU6OiBwYXJyb3QKK2RvY3VtZW50aW5nL21hcmt1cCw0Miw6cGxhdGZvcm0sIjpwbGF0Zm9ybTogVW5peCwgV2luZG93cyIKK2RvY3VtZW50aW5nL21hcmt1cCw0Miw6c3lub3BzaXMsOnN5bm9wc2lzOiBBbmFseXplIGFuZCByZWFuaW1hdGUgZGVhZCBwYXJyb3RzLgorZG9jdW1lbnRpbmcvbWFya3VwLDQyLC4uIG1vZHVsZWF1dGhvcjosLi4gbW9kdWxlYXV0aG9yOjogRXJpYyBDbGVlc2UgPGVyaWNAcHl0aG9uLmludmFsaWQ+Citkb2N1bWVudGluZy9tYXJrdXAsNDIsLi4gbW9kdWxlYXV0aG9yOiwuLiBtb2R1bGVhdXRob3I6OiBKb2huIElkbGUgPGpvaG5AcHl0aG9uLmludmFsaWQ+Citkb2N1bWVudGluZy9tYXJrdXAsODgsOm5vaW5kZXgsOm5vaW5kZXg6Citkb2N1bWVudGluZy9tYXJrdXAsOTUsLi4gZnVuY3Rpb246LC4uIGZ1bmN0aW9uOjogc3BhbShlZ2dzKQorZG9jdW1lbnRpbmcvbWFya3VwLDk1LDpub2luZGV4LDpub2luZGV4OgorZG9jdW1lbnRpbmcvbWFya3VwLDEwMSwuLiBtZXRob2Q6LC4uIG1ldGhvZDo6IEZpbGVJbnB1dC5pbnB1dCguLi4pCitkb2N1bWVudGluZy9tYXJrdXAsMTIxLDpmdW5jdGlvbixjOmZ1bmN0aW9uCitkb2N1bWVudGluZy9tYXJrdXAsMTIxLC4uIGM6LCIuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykiCitkb2N1bWVudGluZy9tYXJrdXAsMTIxLDo6LCIuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykiCitkb2N1bWVudGluZy9tYXJrdXAsMTMxLDptZW1iZXIsYzptZW1iZXIKK2RvY3VtZW50aW5nL21hcmt1cCwxMzEsLi4gYzosLi4gYzptZW1iZXI6OiBQeU9iamVjdCogUHlUeXBlT2JqZWN0LnRwX2Jhc2VzCitkb2N1bWVudGluZy9tYXJrdXAsMTMxLDo6LC4uIGM6bWVtYmVyOjogUHlPYmplY3QqIFB5VHlwZU9iamVjdC50cF9iYXNlcworZG9jdW1lbnRpbmcvbWFya3VwLDEzOSw6bWFjcm8sYzptYWNybworZG9jdW1lbnRpbmcvbWFya3VwLDE0Myw6dHlwZSxjOnR5cGUKK2RvY3VtZW50aW5nL21hcmt1cCwxNTAsOnZhcixjOnZhcgorZG9jdW1lbnRpbmcvbWFya3VwLDE1MCwuLiBjdmFyOiwuLiBjdmFyOjogUHlPYmplY3QqIFB5Q2xhc3NfVHlwZQorZG9jdW1lbnRpbmcvbWFya3VwLDE3OSwuLiBmdW5jdGlvbjosIi4uIGZ1bmN0aW9uOjogVGltZXIucmVwZWF0KFtyZXBlYXQ9M1ssIG51bWJlcj0xMDAwMDAwXV0pIgorZG9jdW1lbnRpbmcvbWFya3VwLDIxMCwuLiBkZWNvcmF0b3I6LC4uIGRlY29yYXRvcjo6IHJlbW92ZW5hbWUKK2RvY3VtZW50aW5nL21hcmt1cCwyMTAsLi4gZGVjb3JhdG9yOiwuLiBkZWNvcmF0b3I6OiBzZXRuZXduYW1lKG5hbWUpCitkb2N1bWVudGluZy9tYXJrdXAsMjEwLDpmdW5jLDpmdW5jOgorZG9jdW1lbnRpbmcvbWFya3VwLDIzMyw6bWV0aCw6bWV0aDoKK2RvY3VtZW50aW5nL21hcmt1cCwyNDYsLi4gY21kb3B0aW9uOiwuLiBjbWRvcHRpb246OiAtbSA8bW9kdWxlPgorZG9jdW1lbnRpbmcvbWFya3VwLDI2NCwuLiBkZXNjcmliZTosLi4gZGVzY3JpYmU6OiBvcGNvZGUKK2RvY3VtZW50aW5nL21hcmt1cCwyOTMsLi4gaGlnaGxpZ2h0bGFuZzosLi4gaGlnaGxpZ2h0bGFuZzo6IGMKK2RvY3VtZW50aW5nL21hcmt1cCwzMTMsLi4gbGl0ZXJhbGluY2x1ZGU6LC4uIGxpdGVyYWxpbmNsdWRlOjogZXhhbXBsZS5weQorZG9jdW1lbnRpbmcvbWFya3VwLDMyOCw6cm9sZW5hbWUsOnJvbGVuYW1lOmBjb250ZW50YAorZG9jdW1lbnRpbmcvbWFya3VwLDMyOCxgLDpyb2xlbmFtZTpgY29udGVudGAKK2RvY3VtZW50aW5nL21hcmt1cCwzMzMsOnJvbGUsOnJvbGU6YHRpdGxlIDx0YXJnZXQ+YAorZG9jdW1lbnRpbmcvbWFya3VwLDMzMyxgLDpyb2xlOmB0aXRsZSA8dGFyZ2V0PmAKK2RvY3VtZW50aW5nL21hcmt1cCwzMzksOm1ldGgsOm1ldGg6YH5RdWV1ZS5RdWV1ZS5nZXRgCitkb2N1bWVudGluZy9tYXJrdXAsMzM5LGAsOm1ldGg6YH5RdWV1ZS5RdWV1ZS5nZXRgCitkb2N1bWVudGluZy9tYXJrdXAsMzg3LDpmdW5jLDpmdW5jOmBmaWx0ZXJgCitkb2N1bWVudGluZy9tYXJrdXAsMzg3LGAsOmZ1bmM6YGZpbHRlcmAKK2RvY3VtZW50aW5nL21hcmt1cCwzODcsOmZ1bmMsOmZ1bmM6YGZvby5maWx0ZXJgCitkb2N1bWVudGluZy9tYXJrdXAsMzg3LGAsOmZ1bmM6YGZvby5maWx0ZXJgCitkb2N1bWVudGluZy9tYXJrdXAsMzkzLDpmdW5jLDpmdW5jOmBvcGVuYAorZG9jdW1lbnRpbmcvbWFya3VwLDM5MyxgLDpmdW5jOmBvcGVuYAorZG9jdW1lbnRpbmcvbWFya3VwLDM5Myw6ZnVuYyw6ZnVuYzpgLm9wZW5gCitkb2N1bWVudGluZy9tYXJrdXAsMzkzLGAsOmZ1bmM6YC5vcGVuYAorZG9jdW1lbnRpbmcvbWFya3VwLDQwOSw6ZGF0YSxjOmRhdGEKK2RvY3VtZW50aW5nL21hcmt1cCw0MTMsOmZ1bmMsYzpmdW5jCitkb2N1bWVudGluZy9tYXJrdXAsNDE3LDptYWNybyxjOm1hY3JvCitkb2N1bWVudGluZy9tYXJrdXAsNDIxLDp0eXBlLGM6dHlwZQorZG9jdW1lbnRpbmcvbWFya3VwLDQyNiw6bWVtYmVyLGM6bWVtYmVyCitkb2N1bWVudGluZy9tYXJrdXAsNDc2LDpmaWxlLC4uLiBpcyBpbnN0YWxsZWQgaW4gOmZpbGU6YC91c3IvbGliL3B5dGhvbjIue3h9L3NpdGUtcGFja2FnZXNgIC4uLgorZG9jdW1lbnRpbmcvbWFya3VwLDQ3NixgLC4uLiBpcyBpbnN0YWxsZWQgaW4gOmZpbGU6YC91c3IvbGliL3B5dGhvbjIue3h9L3NpdGUtcGFja2FnZXNgIC4uLgorZG9jdW1lbnRpbmcvbWFya3VwLDQ5NSw6a2JkLDprYmQ6YEMteCBDLWZgCitkb2N1bWVudGluZy9tYXJrdXAsNDk1LGAsOmtiZDpgQy14IEMtZmAKK2RvY3VtZW50aW5nL21hcmt1cCw0OTUsOmtiZCw6a2JkOmBDb250cm9sLXggQ29udHJvbC1mYAorZG9jdW1lbnRpbmcvbWFya3VwLDQ5NSxgLDprYmQ6YENvbnRyb2wteCBDb250cm9sLWZgCitkb2N1bWVudGluZy9tYXJrdXAsNTA5LDptYWlsaGVhZGVyLDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgCitkb2N1bWVudGluZy9tYXJrdXAsNTA5LGAsOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAKK2RvY3VtZW50aW5nL21hcmt1cCw1MTgsOm1hbnBhZ2UsOm1hbnBhZ2U6YGxzKDEpYAorZG9jdW1lbnRpbmcvbWFya3VwLDUxOCxgLDptYW5wYWdlOmBscygxKWAKK2RvY3VtZW50aW5nL21hcmt1cCw1MzQsOm1lbnVzZWxlY3Rpb24sOm1lbnVzZWxlY3Rpb246YFN0YXJ0IC0tPiBQcm9ncmFtc2AKK2RvY3VtZW50aW5nL21hcmt1cCw1MzQsYCw6bWVudXNlbGVjdGlvbjpgU3RhcnQgLS0+IFByb2dyYW1zYAorZG9jdW1lbnRpbmcvbWFya3VwLDU0OSxgLGBgY29kZWBgCitkb2N1bWVudGluZy9tYXJrdXAsNTY3LDpmaWxlLDpmaWxlOgorZG9jdW1lbnRpbmcvbWFya3VwLDU2NyxgLGBgY29kZWBgCitkb2N1bWVudGluZy9tYXJrdXAsNjAyLDpyZWYsOnJlZjpgbGFiZWwtbmFtZWAKK2RvY3VtZW50aW5nL21hcmt1cCw2MDIsYCw6cmVmOmBsYWJlbC1uYW1lYAorZG9jdW1lbnRpbmcvbWFya3VwLDYwNiw6cmVmLCJJdCByZWZlcnMgdG8gdGhlIHNlY3Rpb24gaXRzZWxmLCBzZWUgOnJlZjpgbXktcmVmZXJlbmNlLWxhYmVsYC4iCitkb2N1bWVudGluZy9tYXJrdXAsNjA2LGAsIkl0IHJlZmVycyB0byB0aGUgc2VjdGlvbiBpdHNlbGYsIHNlZSA6cmVmOmBteS1yZWZlcmVuY2UtbGFiZWxgLiIKK2RvY3VtZW50aW5nL21hcmt1cCw2MTUsOnJlZiw6cmVmOgorZG9jdW1lbnRpbmcvbWFya3VwLDYzNiwuLiBub3RlOiwuLiBub3RlOjoKK2RvY3VtZW50aW5nL21hcmt1cCw2NjMsLi4gdmVyc2lvbmFkZGVkOiwuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKK2RvY3VtZW50aW5nL21hcmt1cCw2ODgsOjosLi4gaW1wbC1kZXRhaWw6OgorZG9jdW1lbnRpbmcvbWFya3VwLDY4OCw6OiwuLiBpbXBsLWRldGFpbDo6IFRoaXMgc2hvcnRseSBtZW50aW9ucyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCitkb2N1bWVudGluZy9tYXJrdXAsNzA4LC4uIHNlZWFsc286LC4uIHNlZWFsc286OgorZG9jdW1lbnRpbmcvbWFya3VwLDcwOCw6bW9kLE1vZHVsZSA6bW9kOmB6aXBmaWxlYAorZG9jdW1lbnRpbmcvbWFya3VwLDcwOCxgLE1vZHVsZSA6bW9kOmB6aXBmaWxlYAorZG9jdW1lbnRpbmcvbWFya3VwLDcwOCw6bW9kLERvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHppcGZpbGVgIHN0YW5kYXJkIG1vZHVsZS4KK2RvY3VtZW50aW5nL21hcmt1cCw3MDgsYCxEb2N1bWVudGF0aW9uIG9mIHRoZSA6bW9kOmB6aXBmaWxlYCBzdGFuZGFyZCBtb2R1bGUuCitkb2N1bWVudGluZy9tYXJrdXAsNzA4LGAsImBHTlUgdGFyIG1hbnVhbCwgQmFzaWMgVGFyIEZvcm1hdCA8aHR0cDovL2xpbms+YF8iCitkb2N1bWVudGluZy9tYXJrdXAsNzIyLC4uIGNlbnRlcmVkOiwuLiBjZW50ZXJlZDo6Citkb2N1bWVudGluZy9tYXJrdXAsNzY3LC4uIHRvY3RyZWU6LC4uIHRvY3RyZWU6OgorZG9jdW1lbnRpbmcvbWFya3VwLDc2Nyw6bWF4ZGVwdGgsOm1heGRlcHRoOiAyCitkb2N1bWVudGluZy9tYXJrdXAsNzgzLC4uIGluZGV4OiwuLiBpbmRleDo6Citkb2N1bWVudGluZy9tYXJrdXAsODEzLC4uIGluZGV4OiwiLi4gaW5kZXg6OiBCTkYsIGdyYW1tYXIsIHN5bnRheCwgbm90YXRpb24iCitkb2N1bWVudGluZy9tYXJrdXAsODQ0LGAsInVuYXJ5bmVnIDo6PSAiIi0iIiBgaW50ZWdlcmAiCitkb2N1bWVudGluZy9tYXJrdXAsODQ5LC4uIHByb2R1Y3Rpb25saXN0OiwuLiBwcm9kdWN0aW9ubGlzdDo6Citkb2N1bWVudGluZy9tYXJrdXAsODQ5LGAsInRyeTFfc3RtdDogIiJ0cnkiIiAiIjoiIiBgc3VpdGVgIgorZG9jdW1lbnRpbmcvbWFya3VwLDg0OSxgLCI6ICgiImV4Y2VwdCIiIFtgZXhwcmVzc2lvbmAgWyIiLCIiIGB0YXJnZXRgXV0gIiI6IiIgYHN1aXRlYCkrIgorZG9jdW1lbnRpbmcvbWFya3VwLDg0OSxgLCI6IFsiImVsc2UiIiAiIjoiIiBgc3VpdGVgXSIKK2RvY3VtZW50aW5nL21hcmt1cCw4NDksYCwiOiBbIiJmaW5hbGx5IiIgIiI6IiIgYHN1aXRlYF0iCitkb2N1bWVudGluZy9tYXJrdXAsODQ5LGAsInRyeTJfc3RtdDogIiJ0cnkiIiAiIjoiIiBgc3VpdGVgIgorZG9jdW1lbnRpbmcvbWFya3VwLDg0OSxgLCI6ICIiZmluYWxseSIiICIiOiIiIGBzdWl0ZWAiCiBkb2N1bWVudGluZy9yZXN0LDMzLGAsYGB0ZXh0YGAKIGRvY3VtZW50aW5nL3Jlc3QsNDcsOnJvbGVuYW1lLDpyb2xlbmFtZTpgY29udGVudGAKIGRvY3VtZW50aW5nL3Jlc3QsNDcsYCw6cm9sZW5hbWU6YGNvbnRlbnRgCkBAIC0yMDMsMTUgKzI5NiwxNSBAQAogbGlicmFyeS9iaXNlY3QsMzIsOmhpLGFsbCh2YWwgPj0geCBmb3IgdmFsIGluIGFbaTpoaV0pCiBsaWJyYXJ5L2Jpc2VjdCw0Miw6aGksYWxsKHZhbCA+IHggZm9yIHZhbCBpbiBhW2k6aGldKQogbGlicmFyeS9odHRwLmNsaWVudCw1Miw6cG9ydCxob3N0OnBvcnQKLWxpYnJhcnkvbm50cGxpYiwyNzIsOmJ5dGVzLDpieXRlcwotbGlicmFyeS9ubnRwbGliLDI3Miw6bGluZXMsOmxpbmVzCi1saWJyYXJ5L25udHBsaWIsMjcyLDpsaW5lcywiWyd4cmVmJywgJ2Zyb20nLCAnOmxpbmVzJywgJzpieXRlcycsICdyZWZlcmVuY2VzJywgJ2RhdGUnLCAnbWVzc2FnZS1pZCcsICdzdWJqZWN0J10iCi1saWJyYXJ5L25udHBsaWIsMjcyLDpieXRlcywiWyd4cmVmJywgJ2Zyb20nLCAnOmxpbmVzJywgJzpieXRlcycsICdyZWZlcmVuY2VzJywgJ2RhdGUnLCAnbWVzc2FnZS1pZCcsICdzdWJqZWN0J10iCitsaWJyYXJ5L25udHBsaWIsLDpieXRlcyw6Ynl0ZXMKK2xpYnJhcnkvbm50cGxpYiwsOmxpbmVzLDpsaW5lcworbGlicmFyeS9ubnRwbGliLCw6bGluZXMsIlsneHJlZicsICdmcm9tJywgJzpsaW5lcycsICc6Ynl0ZXMnLCAncmVmZXJlbmNlcycsICdkYXRlJywgJ21lc3NhZ2UtaWQnLCAnc3ViamVjdCddIgorbGlicmFyeS9ubnRwbGliLCw6Ynl0ZXMsIlsneHJlZicsICdmcm9tJywgJzpsaW5lcycsICc6Ynl0ZXMnLCAncmVmZXJlbmNlcycsICdkYXRlJywgJ21lc3NhZ2UtaWQnLCAnc3ViamVjdCddIgogbGlicmFyeS9waWNrbGUsLDptZW1vcnksImNvbm4gPSBzcWxpdGUzLmNvbm5lY3QoIiI6bWVtb3J5OiIiKSIKIGxpYnJhcnkvcHJvZmlsZSwsOmxpbmVubywiKHNvcnQgYnkgZmlsZW5hbWU6bGluZW5vKSwiCiBsaWJyYXJ5L3NvY2tldCwsOjosIigxMCwgMSwgNiwgJycsICgnMjAwMTo4ODg6MjAwMDpkOjphMicsIDgwLCAwLCAwKSldIgotbGlicmFyeS9zdGR0eXBlcywxMDI2LDplbmQsc1tzdGFydDplbmRdCi1saWJyYXJ5L3N0ZHR5cGVzLDExOTUsOmVuZCxzW3N0YXJ0OmVuZF0KK2xpYnJhcnkvc3RkdHlwZXMsLDplbmQsc1tzdGFydDplbmRdCitsaWJyYXJ5L3N0ZHR5cGVzLCw6ZW5kLHNbc3RhcnQ6ZW5kXQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpwYXNzd29yZCwiIiJqb2U6cGFzc3dvcmRAcHl0aG9uLm9yZyIiIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmxhbmcsInhtbG5zPSIiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIiIHhtbDpsYW5nPSIiZW4iIiBsYW5nPSIiZW4iIj5cblxuPGhlYWQ+XG4iCkBAIC0yMjgsODUgKzMyMSw2OCBAQAogd2hhdHNuZXcvMi43LDg2Miw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCiB3aGF0c25ldy8yLjcsMTYxOSw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQogd2hhdHNuZXcvMi43LDE2MTksOjosIlBhcnNlUmVzdWx0KHNjaGVtZT0naHR0cCcsIG5ldGxvYz0nWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0nLCIKLWRvY3VtZW50aW5nL21hcmt1cCwzMywuLiBzZWN0aW9uYXV0aG9yOiwuLiBzZWN0aW9uYXV0aG9yOjogR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4KLWRvY3VtZW50aW5nL21hcmt1cCw0Miw6bW9kLDptb2Q6YHBhcnJvdGAgLS0gRGVhZCBwYXJyb3QgYWNjZXNzCi1kb2N1bWVudGluZy9tYXJrdXAsNDIsYCw6bW9kOmBwYXJyb3RgIC0tIERlYWQgcGFycm90IGFjY2VzcwotZG9jdW1lbnRpbmcvbWFya3VwLDQyLC4uIG1vZHVsZTosLi4gbW9kdWxlOjogcGFycm90Ci1kb2N1bWVudGluZy9tYXJrdXAsNDIsOnBsYXRmb3JtLCI6cGxhdGZvcm06IFVuaXgsIFdpbmRvd3MiCi1kb2N1bWVudGluZy9tYXJrdXAsNDIsOnN5bm9wc2lzLDpzeW5vcHNpczogQW5hbHl6ZSBhbmQgcmVhbmltYXRlIGRlYWQgcGFycm90cy4KLWRvY3VtZW50aW5nL21hcmt1cCw0MiwuLiBtb2R1bGVhdXRob3I6LC4uIG1vZHVsZWF1dGhvcjo6IEVyaWMgQ2xlZXNlIDxlcmljQHB5dGhvbi5pbnZhbGlkPgotZG9jdW1lbnRpbmcvbWFya3VwLDQyLC4uIG1vZHVsZWF1dGhvcjosLi4gbW9kdWxlYXV0aG9yOjogSm9obiBJZGxlIDxqb2huQHB5dGhvbi5pbnZhbGlkPgotZG9jdW1lbnRpbmcvbWFya3VwLDg4LDpub2luZGV4LDpub2luZGV4OgotZG9jdW1lbnRpbmcvbWFya3VwLDk1LC4uIGZ1bmN0aW9uOiwuLiBmdW5jdGlvbjo6IHNwYW0oZWdncykKLWRvY3VtZW50aW5nL21hcmt1cCw5NSw6bm9pbmRleCw6bm9pbmRleDoKLWRvY3VtZW50aW5nL21hcmt1cCwxMDEsLi4gbWV0aG9kOiwuLiBtZXRob2Q6OiBGaWxlSW5wdXQuaW5wdXQoLi4uKQotZG9jdW1lbnRpbmcvbWFya3VwLDEyMSwuLiBjZnVuY3Rpb246LCIuLiBjZnVuY3Rpb246OiBQeU9iamVjdCogUHlUeXBlX0dlbmVyaWNBbGxvYyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5X3NzaXplX3Qgbml0ZW1zKSIKLWRvY3VtZW50aW5nL21hcmt1cCwxMzEsLi4gY21lbWJlcjosLi4gY21lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfYmFzZXMKLWRvY3VtZW50aW5nL21hcmt1cCwxNTAsLi4gY3ZhcjosLi4gY3Zhcjo6IFB5T2JqZWN0KiBQeUNsYXNzX1R5cGUKLWRvY3VtZW50aW5nL21hcmt1cCwxNzksLi4gZnVuY3Rpb246LCIuLiBmdW5jdGlvbjo6IFRpbWVyLnJlcGVhdChbcmVwZWF0PTNbLCBudW1iZXI9MTAwMDAwMF1dKSIKLWRvY3VtZW50aW5nL21hcmt1cCwyMDksLi4gY21kb3B0aW9uOiwuLiBjbWRvcHRpb246OiAtbSA8bW9kdWxlPgotZG9jdW1lbnRpbmcvbWFya3VwLDIyNywuLiBkZXNjcmliZTosLi4gZGVzY3JpYmU6OiBvcGNvZGUKLWRvY3VtZW50aW5nL21hcmt1cCwyNTYsLi4gaGlnaGxpZ2h0bGFuZzosLi4gaGlnaGxpZ2h0bGFuZzo6IGMKLWRvY3VtZW50aW5nL21hcmt1cCwyNzYsLi4gbGl0ZXJhbGluY2x1ZGU6LC4uIGxpdGVyYWxpbmNsdWRlOjogZXhhbXBsZS5weQotZG9jdW1lbnRpbmcvbWFya3VwLDI5MSw6cm9sZW5hbWUsOnJvbGVuYW1lOmBjb250ZW50YAotZG9jdW1lbnRpbmcvbWFya3VwLDI5MSxgLDpyb2xlbmFtZTpgY29udGVudGAKLWRvY3VtZW50aW5nL21hcmt1cCwyOTYsOnJvbGUsOnJvbGU6YHRpdGxlIDx0YXJnZXQ+YAotZG9jdW1lbnRpbmcvbWFya3VwLDI5NixgLDpyb2xlOmB0aXRsZSA8dGFyZ2V0PmAKLWRvY3VtZW50aW5nL21hcmt1cCwzMDIsOm1ldGgsOm1ldGg6YH5RdWV1ZS5RdWV1ZS5nZXRgCi1kb2N1bWVudGluZy9tYXJrdXAsMzAyLGAsOm1ldGg6YH5RdWV1ZS5RdWV1ZS5nZXRgCi1kb2N1bWVudGluZy9tYXJrdXAsMzUwLDpmdW5jLDpmdW5jOmBmaWx0ZXJgCi1kb2N1bWVudGluZy9tYXJrdXAsMzUwLGAsOmZ1bmM6YGZpbHRlcmAKLWRvY3VtZW50aW5nL21hcmt1cCwzNTAsOmZ1bmMsOmZ1bmM6YGZvby5maWx0ZXJgCi1kb2N1bWVudGluZy9tYXJrdXAsMzUwLGAsOmZ1bmM6YGZvby5maWx0ZXJgCi1kb2N1bWVudGluZy9tYXJrdXAsMzU2LDpmdW5jLDpmdW5jOmBvcGVuYAotZG9jdW1lbnRpbmcvbWFya3VwLDM1NixgLDpmdW5jOmBvcGVuYAotZG9jdW1lbnRpbmcvbWFya3VwLDM1Niw6ZnVuYyw6ZnVuYzpgLm9wZW5gCi1kb2N1bWVudGluZy9tYXJrdXAsMzU2LGAsOmZ1bmM6YC5vcGVuYAotZG9jdW1lbnRpbmcvbWFya3VwLDQzNSw6ZmlsZSwuLi4gaXMgaW5zdGFsbGVkIGluIDpmaWxlOmAvdXNyL2xpYi9weXRob24yLnt4fS9zaXRlLXBhY2thZ2VzYCAuLi4KLWRvY3VtZW50aW5nL21hcmt1cCw0MzUsYCwuLi4gaXMgaW5zdGFsbGVkIGluIDpmaWxlOmAvdXNyL2xpYi9weXRob24yLnt4fS9zaXRlLXBhY2thZ2VzYCAuLi4KLWRvY3VtZW50aW5nL21hcmt1cCw0NTQsOmtiZCw6a2JkOmBDLXggQy1mYAotZG9jdW1lbnRpbmcvbWFya3VwLDQ1NCxgLDprYmQ6YEMteCBDLWZgCi1kb2N1bWVudGluZy9tYXJrdXAsNDU0LDprYmQsOmtiZDpgQ29udHJvbC14IENvbnRyb2wtZmAKLWRvY3VtZW50aW5nL21hcmt1cCw0NTQsYCw6a2JkOmBDb250cm9sLXggQ29udHJvbC1mYAotZG9jdW1lbnRpbmcvbWFya3VwLDQ2OCw6bWFpbGhlYWRlciw6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYAotZG9jdW1lbnRpbmcvbWFya3VwLDQ2OCxgLDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgCi1kb2N1bWVudGluZy9tYXJrdXAsNDc3LDptYW5wYWdlLDptYW5wYWdlOmBscygxKWAKLWRvY3VtZW50aW5nL21hcmt1cCw0NzcsYCw6bWFucGFnZTpgbHMoMSlgCi1kb2N1bWVudGluZy9tYXJrdXAsNDkzLDptZW51c2VsZWN0aW9uLDptZW51c2VsZWN0aW9uOmBTdGFydCAtLT4gUHJvZ3JhbXNgCi1kb2N1bWVudGluZy9tYXJrdXAsNDkzLGAsOm1lbnVzZWxlY3Rpb246YFN0YXJ0IC0tPiBQcm9ncmFtc2AKLWRvY3VtZW50aW5nL21hcmt1cCw1MDgsYCxgYGNvZGVgYAotZG9jdW1lbnRpbmcvbWFya3VwLDUyNiw6ZmlsZSw6ZmlsZToKLWRvY3VtZW50aW5nL21hcmt1cCw1MjYsYCxgYGNvZGVgYAotZG9jdW1lbnRpbmcvbWFya3VwLDU2MSw6cmVmLDpyZWY6YGxhYmVsLW5hbWVgCi1kb2N1bWVudGluZy9tYXJrdXAsNTYxLGAsOnJlZjpgbGFiZWwtbmFtZWAKLWRvY3VtZW50aW5nL21hcmt1cCw1NjUsOnJlZiwiSXQgcmVmZXJzIHRvIHRoZSBzZWN0aW9uIGl0c2VsZiwgc2VlIDpyZWY6YG15LXJlZmVyZW5jZS1sYWJlbGAuIgotZG9jdW1lbnRpbmcvbWFya3VwLDU2NSxgLCJJdCByZWZlcnMgdG8gdGhlIHNlY3Rpb24gaXRzZWxmLCBzZWUgOnJlZjpgbXktcmVmZXJlbmNlLWxhYmVsYC4iCi1kb2N1bWVudGluZy9tYXJrdXAsNTc0LDpyZWYsOnJlZjoKLWRvY3VtZW50aW5nL21hcmt1cCw1OTUsLi4gbm90ZTosLi4gbm90ZTo6Ci1kb2N1bWVudGluZy9tYXJrdXAsNjIyLC4uIHZlcnNpb25hZGRlZDosLi4gdmVyc2lvbmFkZGVkOjogMy4xCi1kb2N1bWVudGluZy9tYXJrdXAsNjQ3LDo6LC4uIGltcGwtZGV0YWlsOjoKLWRvY3VtZW50aW5nL21hcmt1cCw2NDcsOjosLi4gaW1wbC1kZXRhaWw6OiBUaGlzIHNob3J0bHkgbWVudGlvbnMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgotZG9jdW1lbnRpbmcvbWFya3VwLDY2NywuLiBzZWVhbHNvOiwuLiBzZWVhbHNvOjoKLWRvY3VtZW50aW5nL21hcmt1cCw2NjcsOm1vZCxNb2R1bGUgOm1vZDpgemlwZmlsZWAKLWRvY3VtZW50aW5nL21hcmt1cCw2NjcsYCxNb2R1bGUgOm1vZDpgemlwZmlsZWAKLWRvY3VtZW50aW5nL21hcmt1cCw2NjcsOm1vZCxEb2N1bWVudGF0aW9uIG9mIHRoZSA6bW9kOmB6aXBmaWxlYCBzdGFuZGFyZCBtb2R1bGUuCi1kb2N1bWVudGluZy9tYXJrdXAsNjY3LGAsRG9jdW1lbnRhdGlvbiBvZiB0aGUgOm1vZDpgemlwZmlsZWAgc3RhbmRhcmQgbW9kdWxlLgotZG9jdW1lbnRpbmcvbWFya3VwLDY2NyxgLCJgR05VIHRhciBtYW51YWwsIEJhc2ljIFRhciBGb3JtYXQgPGh0dHA6Ly9saW5rPmBfIgotZG9jdW1lbnRpbmcvbWFya3VwLDY4MSwuLiBjZW50ZXJlZDosLi4gY2VudGVyZWQ6OgotZG9jdW1lbnRpbmcvbWFya3VwLDcyNiwuLiB0b2N0cmVlOiwuLiB0b2N0cmVlOjoKLWRvY3VtZW50aW5nL21hcmt1cCw3MjYsOm1heGRlcHRoLDptYXhkZXB0aDogMgotZG9jdW1lbnRpbmcvbWFya3VwLDc0MiwuLiBpbmRleDosLi4gaW5kZXg6OgotZG9jdW1lbnRpbmcvbWFya3VwLDc3MiwuLiBpbmRleDosIi4uIGluZGV4OjogQk5GLCBncmFtbWFyLCBzeW50YXgsIG5vdGF0aW9uIgotZG9jdW1lbnRpbmcvbWFya3VwLDgwMyxgLCJ1bmFyeW5lZyA6Oj0gIiItIiIgYGludGVnZXJgIgotZG9jdW1lbnRpbmcvbWFya3VwLDgwOCwuLiBwcm9kdWN0aW9ubGlzdDosLi4gcHJvZHVjdGlvbmxpc3Q6OgotZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCJ0cnkxX3N0bXQ6ICIidHJ5IiIgIiI6IiIgYHN1aXRlYCIKLWRvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwiOiAoIiJleGNlcHQiIiBbYGV4cHJlc3Npb25gIFsiIiwiIiBgdGFyZ2V0YF1dICIiOiIiIGBzdWl0ZWApKyIKLWRvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwiOiBbIiJlbHNlIiIgIiI6IiIgYHN1aXRlYF0iCi1kb2N1bWVudGluZy9tYXJrdXAsODA4LGAsIjogWyIiZmluYWxseSIiICIiOiIiIGBzdWl0ZWBdIgotZG9jdW1lbnRpbmcvbWFya3VwLDgwOCxgLCJ0cnkyX3N0bXQ6ICIidHJ5IiIgIiI6IiIgYHN1aXRlYCIKLWRvY3VtZW50aW5nL21hcmt1cCw4MDgsYCwiOiAiImZpbmFsbHkiIiAiIjoiIiBgc3VpdGVgIgotbGlicmFyeS9pbXBvcnRsaWIsMzk2LGAsVGhlIGtleXMgYXJlIHRoZSBtb2R1bGUgbmFtZXMgLS0gcGFja2FnZXMgbXVzdCBlbmQgaW4gYGAuX19pbml0X19gYC4KLWxpYnJhcnkvaW1wb3J0bGliLDM5NixgLCJuYW1lIHdpdGggYGAuX19pbml0X19gYCBhcHBlbmRlZCB0byBpdC4iIiIiIiIiCi1saWJyYXJ5L2ltcG9ydGxpYiwzOTYsYCwjIGBgX19pbml0X19gYC4KLWxpYnJhcnkvc29ja2V0LDI0OSw6OiwiKDEwLCAxLCA2LCAnJywgKCcyMDAxOjg4ODoyMDAwOmQ6OmEyJywgODAsIDAsIDApKV0iCi1saWJyYXJ5L3N0ZHR5cGVzLDg2MCw6ZW5kLHNbc3RhcnQ6ZW5kXQorbGlicmFyeS9jb25maWdwYXJzZXIsLGAsIyBTZXQgdGhlIG9wdGlvbmFsIGByYXdgIGFyZ3VtZW50IG9mIGdldCgpIHRvIFRydWUgaWYgeW91IHdpc2ggdG8gZGlzYWJsZQorbGlicmFyeS9jb25maWdwYXJzZXIsLGAsIyBUaGUgb3B0aW9uYWwgYHZhcnNgIGFyZ3VtZW50IGlzIGEgZGljdCB3aXRoIG1lbWJlcnMgdGhhdCB3aWxsIHRha2UKK2xpYnJhcnkvY29uZmlncGFyc2VyLCxgLCMgVGhlIG9wdGlvbmFsIGBmYWxsYmFja2AgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIGZhbGxiYWNrIHZhbHVlCitsaWJyYXJ5L2NvbmZpZ3BhcnNlciwsOm9wdGlvbiwke3NlY3Rpb246b3B0aW9ufQorbGlicmFyeS9jb25maWdwYXJzZXIsLDpzeXN0ZW0scGF0aDogJHtDb21tb246c3lzdGVtX2Rpcn0vTGlicmFyeS9GcmFtZXdvcmtzLworbGlicmFyeS9jb25maWdwYXJzZXIsLDpob21lLG15X2RpcjogJHtDb21tb246aG9tZV9kaXJ9L3R3b3NoZWRzCitsaWJyYXJ5L2NvbmZpZ3BhcnNlciwsOnBhdGgscHl0aG9uX2RpcjogJHtGcmFtZXdvcmtzOnBhdGh9L1B5dGhvbi9WZXJzaW9ucy8ke0ZyYW1ld29ya3M6UHl0aG9ufQorbGlicmFyeS9jb25maWdwYXJzZXIsLDpQeXRob24scHl0aG9uX2RpcjogJHtGcmFtZXdvcmtzOnBhdGh9L1B5dGhvbi9WZXJzaW9ucy8ke0ZyYW1ld29ya3M6UHl0aG9ufQorbGlicmFyeS9wZGIsLDpsaW5lbm8sW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXQorbGlicmFyeS9wZGIsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vCitsaWJyYXJ5L2xvZ2dpbmcsLDpXYXRjaCxXQVJOSU5HOnJvb3Q6V2F0Y2ggb3V0IQorbGlicmFyeS9sb2dnaW5nLCw6U28sSU5GTzpyb290OlNvIHNob3VsZCB0aGlzCitsaWJyYXJ5L2xvZ2dpbmcsLDpTdGFydGVkLElORk86cm9vdDpTdGFydGVkCitsaWJyYXJ5L2xvZ2dpbmcsLDpEb2luZyxJTkZPOnJvb3Q6RG9pbmcgc29tZXRoaW5nCitsaWJyYXJ5L2xvZ2dpbmcsLDpGaW5pc2hlZCxJTkZPOnJvb3Q6RmluaXNoZWQKK2xpYnJhcnkvbG9nZ2luZywsOkxvb2ssV0FSTklORzpyb290Okxvb2sgYmVmb3JlIHlvdSBsZWFwIQorbGlicmFyeS9sb2dnaW5nLCw6U28sSU5GTzpTbyBzaG91bGQgdGhpcworbGlicmFyeS9sb2dnaW5nLCw6bG9nZ2VyLHNldmVyaXR5OmxvZ2dlciBuYW1lOm1lc3NhZ2UKK2xpYnJhcnkvbG9nZ2luZywsOm1lc3NhZ2Usc2V2ZXJpdHk6bG9nZ2VyIG5hbWU6bWVzc2FnZQord2hhdHNuZXcvMy4yLCw6ZGlyZWN0b3J5LC4uLiAgICR7YnVpbGRvdXQ6ZGlyZWN0b3J5fS9kb3dubG9hZHMvZGlzdAord2hhdHNuZXcvMy4yLCw6bG9jYXRpb24sLi4uIHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KK3doYXRzbmV3LzMuMiwsOnByZWZpeCwuLi4gem9wZS1jb25mID0gJHtjdXN0b206cHJlZml4fS9ldGMvem9wZS5jb25mCitob3d0by9sb2dnaW5nLCw6cm9vdCxXQVJOSU5HOnJvb3Q6V2F0Y2ggb3V0IQoraG93dG8vbG9nZ2luZywsOldhdGNoLFdBUk5JTkc6cm9vdDpXYXRjaCBvdXQhCitob3d0by9sb2dnaW5nLCw6cm9vdCxERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCitob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCitob3d0by9sb2dnaW5nLCw6cm9vdCxJTkZPOnJvb3Q6U28gc2hvdWxkIHRoaXMKK2hvd3RvL2xvZ2dpbmcsLDpTbyxJTkZPOnJvb3Q6U28gc2hvdWxkIHRoaXMKK2hvd3RvL2xvZ2dpbmcsLDpyb290LCJXQVJOSU5HOnJvb3Q6QW5kIHRoaXMsIHRvbyIKK2hvd3RvL2xvZ2dpbmcsLDpBbmQsIldBUk5JTkc6cm9vdDpBbmQgdGhpcywgdG9vIgoraG93dG8vbG9nZ2luZywsOnJvb3QsSU5GTzpyb290OlN0YXJ0ZWQKK2hvd3RvL2xvZ2dpbmcsLDpTdGFydGVkLElORk86cm9vdDpTdGFydGVkCitob3d0by9sb2dnaW5nLCw6cm9vdCxJTkZPOnJvb3Q6RG9pbmcgc29tZXRoaW5nCitob3d0by9sb2dnaW5nLCw6RG9pbmcsSU5GTzpyb290OkRvaW5nIHNvbWV0aGluZworaG93dG8vbG9nZ2luZywsOnJvb3QsSU5GTzpyb290OkZpbmlzaGVkCitob3d0by9sb2dnaW5nLCw6RmluaXNoZWQsSU5GTzpyb290OkZpbmlzaGVkCitob3d0by9sb2dnaW5nLCw6cm9vdCxXQVJOSU5HOnJvb3Q6TG9vayBiZWZvcmUgeW91IGxlYXAhCitob3d0by9sb2dnaW5nLCw6TG9vayxXQVJOSU5HOnJvb3Q6TG9vayBiZWZvcmUgeW91IGxlYXAhCitob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpUaGlzIG1lc3NhZ2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgY29uc29sZQoraG93dG8vbG9nZ2luZywsOlNvLElORk86U28gc2hvdWxkIHRoaXMKK2hvd3RvL2xvZ2dpbmcsLDpBbmQsIldBUk5JTkc6QW5kIHRoaXMsIHRvbyIKK2hvd3RvL2xvZ2dpbmcsLDpsb2dnZXIsc2V2ZXJpdHk6bG9nZ2VyIG5hbWU6bWVzc2FnZQoraG93dG8vbG9nZ2luZywsOm1lc3NhZ2Usc2V2ZXJpdHk6bG9nZ2VyIG5hbWU6bWVzc2FnZQorbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLCw6cG9ydCxob3N0OnBvcnQKK2RvY3VtZW50aW5nL21hcmt1cCw2MTMsYCw6cmVmOmBsaW5rIHRleHQgPHJlZmVyZW5jZS1sYWJlbD5gCitsaWJyYXJ5L2ltYXBsaWIsMTE2LDpNTSwiIiJERC1NbW0tWVlZWSBISDpNTTpTUyIKK2xpYnJhcnkvaW1hcGxpYiwxMTYsOlNTLCIiIkRELU1tbS1ZWVlZIEhIOk1NOlNTIgord2hhdHNuZXcvMy4yLCw6OiwiJCBleHBvcnQgUFlUSE9OV0FSTklOR1M9J2lnbm9yZTo6UnVudGltZVdhcm5pbmc6OixvbmNlOjpVbmljb2RlV2FybmluZzo6JyIKK2hvd3RvL3B5cG9ydGluZyw3NSw6OiwjIG1ha2Ugc3VyZSB0byB1c2UgOjogUHl0aG9uICphbmQqIDo6IFB5dGhvbiA6OiAzIHNvCitob3d0by9weXBvcnRpbmcsNzUsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24nLCIKK2hvd3RvL3B5cG9ydGluZyw3NSw6OiwnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMnCit3aGF0c25ldy8zLjIsLDpneiwiPj4+IHdpdGggdGFyZmlsZS5vcGVuKG5hbWU9J215YXJjaGl2ZS50YXIuZ3onLCBtb2RlPSd3Omd6JykgYXMgdGY6Igord2hhdHNuZXcvMy4yLCw6ZGlyZWN0b3J5LCR7YnVpbGRvdXQ6ZGlyZWN0b3J5fS9kb3dubG9hZHMvZGlzdAord2hhdHNuZXcvMy4yLCw6bG9jYXRpb24sem9wZTktbG9jYXRpb24gPSAke3pvcGU5OmxvY2F0aW9ufQord2hhdHNuZXcvMy4yLCw6cHJlZml4LHpvcGUtY29uZiA9ICR7Y3VzdG9tOnByZWZpeH0vZXRjL3pvcGUuY29uZgord2hhdHNuZXcvMy4yLCw6YmVlZiw+Pj4gdXJsbGliLnBhcnNlLnVybHBhcnNlKCdodHRwOi8vW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0vZm9vLycpCit3aGF0c25ldy8zLjIsLDpjYWZlLD4+PiB1cmxsaWIucGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJykKK3doYXRzbmV3LzMuMiwsOmFmZmUsPj4+IHVybGxpYi5wYXJzZS51cmxwYXJzZSgnaHR0cDovL1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdL2Zvby8nKQord2hhdHNuZXcvMy4yLCw6ZGVhZiw+Pj4gdXJsbGliLnBhcnNlLnVybHBhcnNlKCdodHRwOi8vW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0vZm9vLycpCit3aGF0c25ldy8zLjIsLDpmZWVkLD4+PiB1cmxsaWIucGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJykKK3doYXRzbmV3LzMuMiwsOmJlZWYsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKK3doYXRzbmV3LzMuMiwsOmNhZmUsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKK3doYXRzbmV3LzMuMiwsOmFmZmUsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKK3doYXRzbmV3LzMuMiwsOmRlYWYsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKK3doYXRzbmV3LzMuMiwsOmZlZWQsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weSBiL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weQppbmRleCBmMTVlOTMxLi44ODhiMjMxIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3BpY2lvdXMucHkKKysrIGIvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CkBAIC00OSwxMyArNDksMTUgQEAKIGZyb20gZG9jdXRpbHMgaW1wb3J0IG5vZGVzCiBmcm9tIHNwaGlueC5idWlsZGVycyBpbXBvcnQgQnVpbGRlcgogCi1kZXRlY3RfYWxsID0gcmUuY29tcGlsZSh1cicnJworZGV0ZWN0X2FsbCA9IHJlLmNvbXBpbGUocicnJwogICAgIDo6KD89W149XSl8ICAgICAgICAgICAgIyB0d28gOjogKGJ1dCBOT1QgOjo9KQogICAgIDpbYS16QS1aXVthLXpBLVowLTldK3wgIyA6Zm9vCiAgICAgYHwgICAgICAgICAgICAgICAgICAgICAjIGAgKHNlbGRvbSB1c2VkIGJ5IGl0c2VsZikKICAgICAoPzwhXC4pXC5cLlsgXHRdKlx3KzogICMgLi4gZm9vOiAoYnV0IE5PVCAuLi4gZWxzZTopCiAgICAgJycnLCByZS5VTklDT0RFIHwgcmUuVkVSQk9TRSkuZmluZGl0ZXIKIAorcHkzID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgMCkKKwogCiBjbGFzcyBSdWxlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCBsaW5lKToKQEAgLTEzNiw3ICsxMzgsMTEgQEAKICAgICAgICAgaWYgbm90IHNlbGYuYW55X2lzc3VlOiBzZWxmLmluZm8oKQogICAgICAgICBzZWxmLmFueV9pc3N1ZSA9IFRydWUKICAgICAgICAgc2VsZi53cml0ZV9sb2dfZW50cnkobGluZW5vLCBpc3N1ZSwgdGV4dCkKLSAgICAgICAgc2VsZi53YXJuKCdbJXM6JWRdICIlcyIgZm91bmQgaW4gIiUtLjEyMHMiJyAlICgKKyAgICAgICAgaWYgcHkzOgorICAgICAgICAgICAgc2VsZi53YXJuKCdbJXM6JWRdICIlcyIgZm91bmQgaW4gIiUtLjEyMHMiJyAlCisgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZG9jbmFtZSwgbGluZW5vLCBpc3N1ZSwgdGV4dCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndhcm4oJ1slczolZF0gIiVzIiBmb3VuZCBpbiAiJS0uMTIwcyInICUgKAogICAgICAgICAgICAgICAgIHNlbGYuZG9jbmFtZS5lbmNvZGUoc3lzLmdldGRlZmF1bHRlbmNvZGluZygpLCdyZXBsYWNlJyksCiAgICAgICAgICAgICAgICAgbGluZW5vLAogICAgICAgICAgICAgICAgIGlzc3VlLmVuY29kZShzeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCksJ3JlcGxhY2UnKSwKQEAgLTE0NCwxMyArMTUwLDE5IEBACiAgICAgICAgIHNlbGYuYXBwLnN0YXR1c2NvZGUgPSAxCiAKICAgICBkZWYgd3JpdGVfbG9nX2VudHJ5KHNlbGYsIGxpbmVubywgaXNzdWUsIHRleHQpOgotICAgICAgICBmID0gb3BlbihzZWxmLmxvZ19maWxlX25hbWUsICdhYicpCi0gICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGlhbGVjdCkKLSAgICAgICAgd3JpdGVyLndyaXRlcm93KFtzZWxmLmRvY25hbWUuZW5jb2RlKCd1dGYtOCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZS5lbmNvZGUoJ3V0Zi04JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5zdHJpcCgpLmVuY29kZSgndXRmLTgnKV0pCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBpZiBweTM6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLmxvZ19maWxlX25hbWUsICdhJykKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZiwgZGlhbGVjdCkKKyAgICAgICAgICAgIHdyaXRlci53cml0ZXJvdyhbc2VsZi5kb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCB0ZXh0LnN0cmlwKCldKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmID0gb3BlbihzZWxmLmxvZ19maWxlX25hbWUsICdhYicpCisgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGYsIGRpYWxlY3QpCisgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coW3NlbGYuZG9jbmFtZS5lbmNvZGUoJ3V0Zi04JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWUuZW5jb2RlKCd1dGYtOCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LnN0cmlwKCkuZW5jb2RlKCd1dGYtOCcpXSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIGxvYWRfcnVsZXMoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJMb2FkIGRhdGFiYXNlIG9mIHByZXZpb3VzbHkgaWdub3JlZCBpc3N1ZXMuCkBAIC0xNjAsMTggKzE3MiwyNiBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5pbmZvKCJsb2FkaW5nIGlnbm9yZSBydWxlcy4uLiAiLCBub25sPTEpCiAgICAgICAgIHNlbGYucnVsZXMgPSBydWxlcyA9IFtdCi0gICAgICAgIHRyeTogZiA9IG9wZW4oZmlsZW5hbWUsICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOiByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgcHkzOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncmInKQorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShjc3YucmVhZGVyKGYpKToKICAgICAgICAgICAgIGlmIGxlbihyb3cpICE9IDQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgIndyb25nIGZvcm1hdCBpbiAlcywgbGluZSAlZDogJXMiICUgKGZpbGVuYW1lLCBpKzEsIHJvdykpCiAgICAgICAgICAgICBkb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCB0ZXh0ID0gcm93Ci0gICAgICAgICAgICBkb2NuYW1lID0gZG9jbmFtZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIGlmIGxpbmVubzogbGluZW5vID0gaW50KGxpbmVubykKLSAgICAgICAgICAgIGVsc2U6IGxpbmVubyA9IE5vbmUKLSAgICAgICAgICAgIGlzc3VlID0gaXNzdWUuZGVjb2RlKCd1dGYtOCcpCi0gICAgICAgICAgICB0ZXh0ID0gdGV4dC5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGlmIGxpbmVubzoKKyAgICAgICAgICAgICAgICBsaW5lbm8gPSBpbnQobGluZW5vKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lbm8gPSBOb25lCisgICAgICAgICAgICBpZiBub3QgcHkzOgorICAgICAgICAgICAgICAgIGRvY25hbWUgPSBkb2NuYW1lLmRlY29kZSgndXRmLTgnKQorICAgICAgICAgICAgICAgIGlzc3VlID0gaXNzdWUuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICBydWxlID0gUnVsZShkb2NuYW1lLCBsaW5lbm8sIGlzc3VlLCB0ZXh0KQogICAgICAgICAgICAgcnVsZXMuYXBwZW5kKHJ1bGUpCiAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0IGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CmluZGV4IDgyNzM1ZGYuLmEzMjhhYjIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKQEAgLTcxNyw3ICs3MTcsNyBAQAogY29udGFpbmVyIG9uZSBhdCBhIHRpbWUuICBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGVsZW1lbnRzLCA6bWV0aDpgX19uZXh0X19gCiByYWlzZXMgYSA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBleGNlcHRpb24gd2hpY2ggdGVsbHMgdGhlIDprZXl3b3JkOmBmb3JgIGxvb3AgdG8KIHRlcm1pbmF0ZS4gIFlvdSBjYW4gY2FsbCB0aGUgOm1ldGg6YF9fbmV4dF9fYCBtZXRob2QgdXNpbmcgdGhlIDpmdW5jOmBuZXh0YAotYnVpbHRpbjsgdGhpcyBleGFtcGxlIHNob3dzIGhvdyBpdCBhbGwgd29ya3M6OgorYnVpbHQtaW4gZnVuY3Rpb247IHRoaXMgZXhhbXBsZSBzaG93cyBob3cgaXQgYWxsIHdvcmtzOjoKIAogICAgPj4+IHMgPSAnYWJjJwogICAgPj4+IGl0ID0gaXRlcihzKQpAQCAtNzMwLDcgKzczMCw2IEBACiAgICA+Pj4gbmV4dChpdCkKICAgICdjJwogICAgPj4+IG5leHQoaXQpCi0KICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPwogICAgICAgIG5leHQoaXQpCkBAIC03NDIsNyArNzQxLDcgQEAKIDptZXRoOmBfX25leHRfX2AsIHRoZW4gOm1ldGg6YF9faXRlcl9fYCBjYW4ganVzdCByZXR1cm4gYGBzZWxmYGA6OgogCiAgICBjbGFzcyBSZXZlcnNlOgotICAgICAgICJJdGVyYXRvciBmb3IgbG9vcGluZyBvdmVyIGEgc2VxdWVuY2UgYmFja3dhcmRzIgorICAgICAgICIiIkl0ZXJhdG9yIGZvciBsb29waW5nIG92ZXIgYSBzZXF1ZW5jZSBiYWNrd2FyZHMuIiIiCiAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgICAgIHNlbGYuaW5kZXggPSBsZW4oZGF0YSkKQEAgLTc1NCw2ICs3NTMsOCBAQAogICAgICAgICAgICBzZWxmLmluZGV4ID0gc2VsZi5pbmRleCAtIDEKICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtzZWxmLmluZGV4XQogCis6OgorCiAgICA+Pj4gcmV2ID0gUmV2ZXJzZSgnc3BhbScpCiAgICA+Pj4gaXRlcihyZXYpCiAgICA8X19tYWluX18uUmV2ZXJzZSBvYmplY3QgYXQgMHgwMEExREI1MD4KQEAgLTc4Miw2ICs3ODMsOCBAQAogICAgICAgIGZvciBpbmRleCBpbiByYW5nZShsZW4oZGF0YSktMSwgLTEsIC0xKToKICAgICAgICAgICAgeWllbGQgZGF0YVtpbmRleF0KIAorOjoKKwogICAgPj4+IGZvciBjaGFyIGluIHJldmVyc2UoJ2dvbGYnKToKICAgIC4uLiAgICAgcHJpbnQoY2hhcikKICAgIC4uLgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0IGIvRG9jL3R1dG9yaWFsL2Zsb2F0aW5ncG9pbnQucnN0CmluZGV4IGMwNjU2OGUuLjg2M2ZiMjggMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9mbG9hdGluZ3BvaW50LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvZmxvYXRpbmdwb2ludC5yc3QKQEAgLTkyLDE4ICs5MiwxNyBAQAogKGFsdGhvdWdoIHNvbWUgbGFuZ3VhZ2VzIG1heSBub3QgKmRpc3BsYXkqIHRoZSBkaWZmZXJlbmNlIGJ5IGRlZmF1bHQsIG9yIGluIGFsbAogb3V0cHV0IG1vZGVzKS4KIAotUHl0aG9uJ3MgYnVpbHQtaW4gOmZ1bmM6YHN0cmAgZnVuY3Rpb24gcHJvZHVjZXMgb25seSAxMiBzaWduaWZpY2FudCBkaWdpdHMsIGFuZAoteW91IG1heSB3aXNoIHRvIHVzZSB0aGF0IGluc3RlYWQuICBJdCdzIHVudXN1YWwgZm9yIGBgZXZhbChzdHIoeCkpYGAgdG8KLXJlcHJvZHVjZSAqeCosIGJ1dCB0aGUgb3V0cHV0IG1heSBiZSBtb3JlIHBsZWFzYW50IHRvIGxvb2sgYXQ6OgorRm9yIG1vcmUgcGxlYXNhbnQgb3V0cHV0LCB5b3UgbWF5IG1heSB3aXNoIHRvIHVzZSBzdHJpbmcgZm9ybWF0dGluZyB0byBwcm9kdWNlIGEgbGltaXRlZCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzOjoKIAotICAgPj4+IHN0cihtYXRoLnBpKQorICAgPj4+IGZvcm1hdChtYXRoLnBpLCAnLjEyZycpICAjIGdpdmUgMTIgc2lnbmlmaWNhbnQgZGlnaXRzCiAgICAnMy4xNDE1OTI2NTM1OScKIAorICAgPj4+IGZvcm1hdChtYXRoLnBpLCAnLjJmJykgICAjIGdpdmUgMiBkaWdpdHMgYWZ0ZXIgdGhlIHBvaW50CisgICAnMy4xNCcKKwogICAgPj4+IHJlcHIobWF0aC5waSkKICAgICczLjE0MTU5MjY1MzU4OTc5MycKIAotICAgPj4+IGZvcm1hdChtYXRoLnBpLCAnLjJmJykKLSAgICczLjE0JwogCiBJdCdzIGltcG9ydGFudCB0byByZWFsaXplIHRoYXQgdGhpcyBpcywgaW4gYSByZWFsIHNlbnNlLCBhbiBpbGx1c2lvbjogeW91J3JlCiBzaW1wbHkgcm91bmRpbmcgdGhlICpkaXNwbGF5KiBvZiB0aGUgdHJ1ZSBtYWNoaW5lIHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdCBiL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKaW5kZXggYWJlMWNlMC4uMDBmNWFlYSAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CkBAIC00MCw4ICs0MCw4IEBACiB0aGVyZSBpcyBub3QgZXF1aXZhbGVudCBzeW50YXgpLiAgRm9yIG9iamVjdHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHBhcnRpY3VsYXIKIHJlcHJlc2VudGF0aW9uIGZvciBodW1hbiBjb25zdW1wdGlvbiwgOmZ1bmM6YHN0cmAgd2lsbCByZXR1cm4gdGhlIHNhbWUgdmFsdWUgYXMKIDpmdW5jOmByZXByYC4gIE1hbnkgdmFsdWVzLCBzdWNoIGFzIG51bWJlcnMgb3Igc3RydWN0dXJlcyBsaWtlIGxpc3RzIGFuZAotZGljdGlvbmFyaWVzLCBoYXZlIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIHVzaW5nIGVpdGhlciBmdW5jdGlvbi4gIFN0cmluZ3MgYW5kCi1mbG9hdGluZyBwb2ludCBudW1iZXJzLCBpbiBwYXJ0aWN1bGFyLCBoYXZlIHR3byBkaXN0aW5jdCByZXByZXNlbnRhdGlvbnMuCitkaWN0aW9uYXJpZXMsIGhhdmUgdGhlIHNhbWUgcmVwcmVzZW50YXRpb24gdXNpbmcgZWl0aGVyIGZ1bmN0aW9uLiAgU3RyaW5ncywgaW4KK3BhcnRpY3VsYXIsIGhhdmUgdHdvIGRpc3RpbmN0IHJlcHJlc2VudGF0aW9ucy4KIAogU29tZSBleGFtcGxlczo6CiAKQEAgLTUwLDkgKzUwLDcgQEAKICAgICdIZWxsbywgd29ybGQuJwogICAgPj4+IHJlcHIocykKICAgICInSGVsbG8sIHdvcmxkLiciCi0gICA+Pj4gc3RyKDEuMC83LjApCi0gICAnMC4xNDI4NTcxNDI4NTcnCi0gICA+Pj4gcmVwcigxLjAvNy4wKQorICAgPj4+IHN0cigxLzcpCiAgICAnMC4xNDI4NTcxNDI4NTcxNDI4NScKICAgID4+PiB4ID0gMTAgKiAzLjI1CiAgICA+Pj4geSA9IDIwMCAqIDIwMApAQCAtMTYyLDcgKzE2MCw3IEBACiAKIEFuIG9wdGlvbmFsIGBgJzonYGAgYW5kIGZvcm1hdCBzcGVjaWZpZXIgY2FuIGZvbGxvdyB0aGUgZmllbGQgbmFtZS4gVGhpcyBhbGxvd3MKIGdyZWF0ZXIgY29udHJvbCBvdmVyIGhvdyB0aGUgdmFsdWUgaXMgZm9ybWF0dGVkLiAgVGhlIGZvbGxvd2luZyBleGFtcGxlCi10cnVuY2F0ZXMgUGkgdG8gdGhyZWUgcGxhY2VzIGFmdGVyIHRoZSBkZWNpbWFsLgorcm91bmRzIFBpIHRvIHRocmVlIHBsYWNlcyBhZnRlciB0aGUgZGVjaW1hbC4KIAogICAgPj4+IGltcG9ydCBtYXRoCiAgICA+Pj4gcHJpbnQoJ1RoZSB2YWx1ZSBvZiBQSSBpcyBhcHByb3hpbWF0ZWx5IHswOi4zZn0uJy5mb3JtYXQobWF0aC5waSkpCkBAIC0yMDcsNyArMjA1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgYGAlYGAgb3BlcmF0b3IgY2FuIGFsc28gYmUgdXNlZCBmb3Igc3RyaW5nIGZvcm1hdHRpbmcuIEl0IGludGVycHJldHMgdGhlCi1sZWZ0IGFyZ3VtZW50IG11Y2ggbGlrZSBhIDpjZnVuYzpgc3ByaW50ZmBcIC1zdHlsZSBmb3JtYXQgc3RyaW5nIHRvIGJlIGFwcGxpZWQKK2xlZnQgYXJndW1lbnQgbXVjaCBsaWtlIGEgOmM6ZnVuYzpgc3ByaW50ZmBcIC1zdHlsZSBmb3JtYXQgc3RyaW5nIHRvIGJlIGFwcGxpZWQKIHRvIHRoZSByaWdodCBhcmd1bWVudCwgYW5kIHJldHVybnMgdGhlIHN0cmluZyByZXN1bHRpbmcgZnJvbSB0aGlzIGZvcm1hdHRpbmcKIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGU6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0IGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdAppbmRleCA5NGQ3NTYyLi44ZDc0M2RlIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKQEAgLTEwLDExICsxMCwxMSBAQAogSW52b2tpbmcgdGhlIEludGVycHJldGVyCiA9PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4xYAorVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpcyB1c3VhbGx5IGluc3RhbGxlZCBhcyA6ZmlsZTpgL3Vzci9sb2NhbC9iaW4vcHl0aG9uMy4yYAogb24gdGhvc2UgbWFjaGluZXMgd2hlcmUgaXQgaXMgYXZhaWxhYmxlOyBwdXR0aW5nIDpmaWxlOmAvdXNyL2xvY2FsL2JpbmAgaW4geW91cgogVW5peCBzaGVsbCdzIHNlYXJjaCBwYXRoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN0YXJ0IGl0IGJ5IHR5cGluZyB0aGUgY29tbWFuZCA6OgogCi0gICBweXRob24zLjEKKyAgIHB5dGhvbjMuMgogCiB0byB0aGUgc2hlbGwuIFsjXV8gU2luY2UgdGhlIGNob2ljZSBvZiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBpbnRlcnByZXRlciBsaXZlcwogaXMgYW4gaW5zdGFsbGF0aW9uIG9wdGlvbiwgb3RoZXIgcGxhY2VzIGFyZSBwb3NzaWJsZTsgY2hlY2sgd2l0aCB5b3VyIGxvY2FsCkBAIC0yMiwxMSArMjIsMTEgQEAKIHBvcHVsYXIgYWx0ZXJuYXRpdmUgbG9jYXRpb24uKQogCiBPbiBXaW5kb3dzIG1hY2hpbmVzLCB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpcyB1c3VhbGx5IHBsYWNlZCBpbgotOmZpbGU6YEM6XFxQeXRob24zMWAsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCis6ZmlsZTpgQzpcXFB5dGhvbjMyYCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKIGluc3RhbGxlci4gIFRvIGFkZCB0aGlzIGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsICB5b3UgY2FuIHR5cGUgdGhlIGZvbGxvd2luZwogY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kIHByb21wdCBpbiBhIERPUyBib3g6OgogCi0gICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzEKKyAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zMgogCiBUeXBpbmcgYW4gZW5kLW9mLWZpbGUgY2hhcmFjdGVyICg6a2JkOmBDb250cm9sLURgIG9uIFVuaXgsIDprYmQ6YENvbnRyb2wtWmAgb24KIFdpbmRvd3MpIGF0IHRoZSBwcmltYXJ5IHByb21wdCBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgd2l0aCBhIHplcm8gZXhpdApAQCAtOTQsOCArOTQsOCBAQAogcHJpbnRzIGEgd2VsY29tZSBtZXNzYWdlIHN0YXRpbmcgaXRzIHZlcnNpb24gbnVtYmVyIGFuZCBhIGNvcHlyaWdodCBub3RpY2UKIGJlZm9yZSBwcmludGluZyB0aGUgZmlyc3QgcHJvbXB0OjoKIAotICAgJCBweXRob24zLjEKLSAgIFB5dGhvbiAzLjEgKHB5M2ssIFNlcCAxMiAyMDA3LCAxMjoyMTowMikKKyAgICQgcHl0aG9uMy4yCisgICBQeXRob24gMy4yIChweTNrLCBTZXAgMTIgMjAwNywgMTI6MjE6MDIpCiAgICBbR0NDIDMuNC42IDIwMDYwNDA0IChSZWQgSGF0IDMuNC42LTgpXSBvbiBsaW51eDIKICAgIFR5cGUgImhlbHAiLCAiY29weXJpZ2h0IiwgImNyZWRpdHMiIG9yICJsaWNlbnNlIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAgID4+PgpAQCAtMTQ4LDcgKzE0OCw3IEBACiBPbiBCU0QnaXNoIFVuaXggc3lzdGVtcywgUHl0aG9uIHNjcmlwdHMgY2FuIGJlIG1hZGUgZGlyZWN0bHkgZXhlY3V0YWJsZSwgbGlrZQogc2hlbGwgc2NyaXB0cywgYnkgcHV0dGluZyB0aGUgbGluZSA6OgogCi0gICAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMy4xCisgICAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMy4yCiAKIChhc3N1bWluZyB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyBvbiB0aGUgdXNlcidzIDplbnZ2YXI6YFBBVEhgKSBhdCB0aGUgYmVnaW5uaW5nCiBvZiB0aGUgc2NyaXB0IGFuZCBnaXZpbmcgdGhlIGZpbGUgYW4gZXhlY3V0YWJsZSBtb2RlLiAgVGhlIGBgIyFgYCBtdXN0IGJlIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAppbmRleCAzZTQyY2VlLi40NDUxOWRhIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdApAQCAtNDgzLDYgKzQ4MywxMiBAQAogICAgPj4+IDMqYVs6M10gKyBbJ0JvbyEnXQogICAgWydzcGFtJywgJ2VnZ3MnLCAxMDAsICdzcGFtJywgJ2VnZ3MnLCAxMDAsICdzcGFtJywgJ2VnZ3MnLCAxMDAsICdCb28hJ10KIAorQWxsIHNsaWNlIG9wZXJhdGlvbnMgcmV0dXJuIGEgbmV3IGxpc3QgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGVsZW1lbnRzLiAgVGhpcworbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHNsaWNlIHJldHVybnMgYSBzaGFsbG93IGNvcHkgb2YgdGhlIGxpc3QgKmEqOjoKKworICAgPj4+IGFbOl0KKyAgIFsnc3BhbScsICdlZ2dzJywgMTAwLCAxMjM0XQorCiBVbmxpa2Ugc3RyaW5ncywgd2hpY2ggYXJlICppbW11dGFibGUqLCBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgaW5kaXZpZHVhbAogZWxlbWVudHMgb2YgYSBsaXN0OjoKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYi5yc3QgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAppbmRleCBiMTM4ZjY1Li45NzI5NzQzIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdApAQCAtNzIsNyArNzIsNyBAQAogCiBUaGUgOm1vZDpgZ2V0b3B0YCBtb2R1bGUgcHJvY2Vzc2VzICpzeXMuYXJndiogdXNpbmcgdGhlIGNvbnZlbnRpb25zIG9mIHRoZSBVbml4CiA6ZnVuYzpgZ2V0b3B0YCBmdW5jdGlvbi4gIE1vcmUgcG93ZXJmdWwgYW5kIGZsZXhpYmxlIGNvbW1hbmQgbGluZSBwcm9jZXNzaW5nIGlzCi1wcm92aWRlZCBieSB0aGUgOm1vZDpgb3B0cGFyc2VgIG1vZHVsZS4KK3Byb3ZpZGVkIGJ5IHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgogCiAKIC4uIF90dXQtc3RkZXJyOgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL2NtZGxpbmUucnN0IGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CmluZGV4IDNmZTBjN2EuLmQxZjQ3ZWIgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy9jbWRsaW5lLnJzdAorKysgYi9Eb2MvdXNpbmcvY21kbGluZS5yc3QKQEAgLTEsNSArMSw4IEBACiAuLiBoaWdobGlnaHRsYW5nOjogbm9uZQogCisuLiBBVFRFTlRJT046IFlvdSBwcm9iYWJseSBzaG91bGQgdXBkYXRlIE1pc2MvcHl0aG9uLm1hbiwgdG9vLCBpZiB5b3UgbW9kaWZ5CisuLiB0aGlzIGZpbGUuCisKIC4uIF91c2luZy1vbi1nZW5lcmFsOgogCiBDb21tYW5kIGxpbmUgYW5kIGVudmlyb25tZW50CkBAIC05Miw4ICs5NSw5IEBACiAgICAgICBmaWxlIGlzIG5vdCBhdmFpbGFibGUuCiAKICAgIElmIHRoaXMgb3B0aW9uIGlzIGdpdmVuLCB0aGUgZmlyc3QgZWxlbWVudCBvZiA6ZGF0YTpgc3lzLmFyZ3ZgIHdpbGwgYmUgdGhlCi0gICBmdWxsIHBhdGggdG8gdGhlIG1vZHVsZSBmaWxlLiBBcyB3aXRoIHRoZSA6b3B0aW9uOmAtY2Agb3B0aW9uLCB0aGUgY3VycmVudAotICAgZGlyZWN0b3J5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHN0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuCisgICBmdWxsIHBhdGggdG8gdGhlIG1vZHVsZSBmaWxlICh3aGlsZSB0aGUgbW9kdWxlIGZpbGUgaXMgYmVpbmcgbG9jYXRlZCwgdGhlCisgICBmaXJzdCBlbGVtZW50IHdpbGwgYmUgc2V0IHRvIGBgIi1tImBgKS4gQXMgd2l0aCB0aGUgOm9wdGlvbjpgLWNgIG9wdGlvbiwKKyAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIHRvIHRoZSBzdGFydCBvZiA6ZGF0YTpgc3lzLnBhdGhgLgogCiAgICBNYW55IHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlcyBjb250YWluIGNvZGUgdGhhdCBpcyBpbnZva2VkIG9uIHRoZWlyIGV4ZWN1dGlvbgogICAgYXMgYSBzY3JpcHQuICBBbiBleGFtcGxlIGlzIHRoZSA6bW9kOmB0aW1laXRgIG1vZHVsZTo6CkBAIC0xMTEsNiArMTE1LDcgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBTdXBwbHkgdGhlIHBhY2thZ2UgbmFtZSB0byBydW4gYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlLgogCisKIC4uIGRlc2NyaWJlOjogLQogCiAgICBSZWFkIGNvbW1hbmRzIGZyb20gc3RhbmRhcmQgaW5wdXQgKDpkYXRhOmBzeXMuc3RkaW5gKS4gIElmIHN0YW5kYXJkIGlucHV0IGlzCkBAIC0yMTUsNiArMjIwLDEzIEBACiAgICBEaXNjYXJkIGRvY3N0cmluZ3MgaW4gYWRkaXRpb24gdG8gdGhlIDpvcHRpb246YC1PYCBvcHRpbWl6YXRpb25zLgogCiAKKy4uIGNtZG9wdGlvbjo6IC1xCisKKyAgIERvbid0IGRpc3BsYXkgdGhlIGNvcHlyaWdodCBhbmQgdmVyc2lvbiBtZXNzYWdlcyBldmVuIGluIGludGVyYWN0aXZlIG1vZGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisKIC4uIGNtZG9wdGlvbjo6IC1zCiAKICAgIERvbid0IGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoCkBAIC0yOTQsNyArMzA2LDcgQEAKICAgIHRoZSByZW1haW5pbmcgZmllbGRzLiAgRW1wdHkgZmllbGRzIG1hdGNoIGFsbCB2YWx1ZXM7IHRyYWlsaW5nIGVtcHR5IGZpZWxkcwogICAgbWF5IGJlIG9taXR0ZWQuICBUaGUgKm1lc3NhZ2UqIGZpZWxkIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2UKICAgIHByaW50ZWQ7IHRoaXMgbWF0Y2ggaXMgY2FzZS1pbnNlbnNpdGl2ZS4gIFRoZSAqY2F0ZWdvcnkqIGZpZWxkIG1hdGNoZXMgdGhlCi0gICB3YXJuaW5nIGNhdGVnb3J5LiAgVGhpcyBtdXN0IGJlIGEgY2xhc3MgbmFtZTsgdGhlIG1hdGNoIHRlc3Qgd2hldGhlciB0aGUKKyAgIHdhcm5pbmcgY2F0ZWdvcnkuICBUaGlzIG11c3QgYmUgYSBjbGFzcyBuYW1lOyB0aGUgbWF0Y2ggdGVzdHMgd2hldGhlciB0aGUKICAgIGFjdHVhbCB3YXJuaW5nIGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIHNwZWNpZmllZCB3YXJuaW5nCiAgICBjYXRlZ29yeS4gIFRoZSBmdWxsIGNsYXNzIG5hbWUgbXVzdCBiZSBnaXZlbi4gIFRoZSAqbW9kdWxlKiBmaWVsZCBtYXRjaGVzIHRoZQogICAgKGZ1bGx5LXF1YWxpZmllZCkgbW9kdWxlIG5hbWU7IHRoaXMgbWF0Y2ggaXMgY2FzZS1zZW5zaXRpdmUuICBUaGUgKmxpbmUqCkBAIC0zMDYsNiArMzE4LDggQEAKIAogICAgICAgOnBlcDpgMjMwYCAtLSBXYXJuaW5nIGZyYW1ld29yawogCisgICAgICA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKKwogCiAuLiBjbWRvcHRpb246OiAteAogCkBAIC0zMTQsNiArMzI4LDE3IEBACiAKICAgIC4uIG5vdGU6OiBUaGUgbGluZSBudW1iZXJzIGluIGVycm9yIG1lc3NhZ2VzIHdpbGwgYmUgb2ZmIGJ5IG9uZS4KIAorCisuLiBjbWRvcHRpb246OiAtWAorCisgICBSZXNlcnZlZCBmb3IgdmFyaW91cyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25zLiAgQ1B5dGhvbiBjdXJyZW50bHkKKyAgIGRlZmluZXMgbm9uZSBvZiB0aGVtLCBidXQgYWxsb3dzIHRvIHBhc3MgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgcmV0cmlldmUKKyAgIHRoZW0gdGhyb3VnaCB0aGUgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisgICAgICBJdCBpcyBub3cgYWxsb3dlZCB0byBwYXNzIDpvcHRpb246YC1YYCB3aXRoIENQeXRob24uCisKKwogT3B0aW9ucyB5b3Ugc2hvdWxkbid0IHVzZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCkBAIC0zMjMsMTEgKzM0OCw2IEBACiAKIC4uIF9KeXRob246IGh0dHA6Ly9qeXRob24ub3JnCiAKLS4uIGNtZG9wdGlvbjo6IC1YCi0KLSAgICBSZXNlcnZlZCBmb3IgYWx0ZXJuYXRpdmUgaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB0byB1c2UgZm9yIHRoZWlyIG93bgotICAgIHB1cnBvc2VzLgotCiAuLiBfdXNpbmctb24tZW52dmFyczoKIAogRW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC00MzcsOSArNDU3LDEwIEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAotICAgT3ZlcnJpZGVzIHRoZSBlbmNvZGluZyB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4Ci0gICBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIFRoZSBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0IGlzIG9wdGlvbmFsIGFuZAotICAgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YHN0ci5lbmNvZGVgLgorICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKKyAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKKyAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCisgICA6ZnVuYzpgc3RyLmVuY29kZWAuCiAKICAgIEZvciBzdGRlcnIsIHRoZSBgYDplcnJvcmhhbmRsZXJgYCBwYXJ0IGlzIGlnbm9yZWQ7IHRoZSBoYW5kbGVyIHdpbGwgYWx3YXlzIGJlCiAgICBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgLgpAQCAtNDY5LDYgKzQ5MCwxMiBAQAogICAgdmFsdWUgaW5zdGVhZCBvZiB0aGUgdmFsdWUgZ290IHRocm91Z2ggdGhlIEMgcnVudGltZS4gIE9ubHkgd29ya3Mgb24KICAgIE1hYyBPUyBYLgogCisuLiBlbnZ2YXI6OiBQWVRIT05XQVJOSU5HUworCisgICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIDpvcHRpb246YC1XYCBvcHRpb24uIElmIHNldCB0byBhIGNvbW1hCisgICBzZXBhcmF0ZWQgc3RyaW5nLCBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcgOm9wdGlvbjpgLVdgIG11bHRpcGxlCisgICB0aW1lcy4KKwogCiBEZWJ1Zy1tb2RlIHZhcmlhYmxlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn4KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjAucnN0IGIvRG9jL3doYXRzbmV3LzIuMC5yc3QKaW5kZXggM2JiMTJiNi4uODUwZTU3ZCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMC5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMC5yc3QKQEAgLTE4OSw3ICsxODksNyBAQAogICBpZ25vcmVkIGFuZCBgYCdyZXBsYWNlJ2BgIHVzZXMgVStGRkZELCB0aGUgb2ZmaWNpYWwgcmVwbGFjZW1lbnQgY2hhcmFjdGVyLCBpbgogICBjYXNlIG9mIGFueSBwcm9ibGVtcy4KIAotKiBUaGUgOmtleXdvcmQ6YGV4ZWNgIHN0YXRlbWVudCwgYW5kIHZhcmlvdXMgYnVpbHQtaW5zIHN1Y2ggYXMgYGBldmFsKClgYCwKKyogVGhlIGBgZXhlY2BgIHN0YXRlbWVudCwgYW5kIHZhcmlvdXMgYnVpbHQtaW5zIHN1Y2ggYXMgYGBldmFsKClgYCwKICAgYGBnZXRhdHRyKClgYCwgYW5kIGBgc2V0YXR0cigpYGAgd2lsbCBhbHNvIGFjY2VwdCBVbmljb2RlIHN0cmluZ3MgYXMgd2VsbCBhcwogICByZWd1bGFyIHN0cmluZ3MuICAoSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwcm9jZXNzIG9mIGZpeGluZyB0aGlzIG1pc3NlZCBzb21lCiAgIGJ1aWx0LWluczsgaWYgeW91IGZpbmQgYSBidWlsdC1pbiBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc3RyaW5ncyBidXQgZG9lc24ndApAQCAtNTE1LDExICs1MTUsMTEgQEAKICAgICAgICAjIGt3IGlzIGEgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3MKICAgICAgICAuLi4KIAotVGhlIDprZXl3b3JkOmBwcmludGAgc3RhdGVtZW50IGNhbiBub3cgaGF2ZSBpdHMgb3V0cHV0IGRpcmVjdGVkIHRvIGEgZmlsZS1saWtlCi1vYmplY3QgYnkgZm9sbG93aW5nIHRoZSA6a2V5d29yZDpgcHJpbnRgIHdpdGggIGBgPj4gZmlsZWBgLCBzaW1pbGFyIHRvIHRoZQorVGhlIGBgcHJpbnRgYCBzdGF0ZW1lbnQgY2FuIG5vdyBoYXZlIGl0cyBvdXRwdXQgZGlyZWN0ZWQgdG8gYSBmaWxlLWxpa2UKK29iamVjdCBieSBmb2xsb3dpbmcgdGhlIGBgcHJpbnRgYCB3aXRoICBgYD4+IGZpbGVgYCwgc2ltaWxhciB0byB0aGUKIHJlZGlyZWN0aW9uIG9wZXJhdG9yIGluIFVuaXggc2hlbGxzLiBQcmV2aW91c2x5IHlvdSdkIGVpdGhlciBoYXZlIHRvIHVzZSB0aGUKIDptZXRoOmB3cml0ZWAgbWV0aG9kIG9mIHRoZSBmaWxlLWxpa2Ugb2JqZWN0LCB3aGljaCBsYWNrcyB0aGUgY29udmVuaWVuY2UgYW5kCi1zaW1wbGljaXR5IG9mIDprZXl3b3JkOmBwcmludGAsIG9yIHlvdSBjb3VsZCBhc3NpZ24gYSBuZXcgdmFsdWUgdG8KK3NpbXBsaWNpdHkgb2YgYGBwcmludGBgLCBvciB5b3UgY291bGQgYXNzaWduIGEgbmV3IHZhbHVlIHRvCiBgYHN5cy5zdGRvdXRgYCBhbmQgdGhlbiByZXN0b3JlIHRoZSBvbGQgdmFsdWUuICBGb3Igc2VuZGluZyBvdXRwdXQgdG8gc3RhbmRhcmQKIGVycm9yLCBpdCdzIG11Y2ggZWFzaWVyIHRvIHdyaXRlIHRoaXM6OgogCkBAIC01ODEsNyArNTgxLDcgQEAKIEFuIGF0dGVtcHQgaGFzIGJlZW4gbWFkZSB0byBhbGxldmlhdGUgb25lIG9mIFB5dGhvbidzIHdhcnRzLCB0aGUgb2Z0ZW4tY29uZnVzaW5nCiA6ZXhjOmBOYW1lRXJyb3JgIGV4Y2VwdGlvbiB3aGVuIGNvZGUgcmVmZXJzIHRvIGEgbG9jYWwgdmFyaWFibGUgYmVmb3JlIHRoZQogdmFyaWFibGUgaGFzIGJlZW4gYXNzaWduZWQgYSB2YWx1ZS4gIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuCi1leGNlcHRpb24gb24gdGhlIDprZXl3b3JkOmBwcmludGAgc3RhdGVtZW50IGluIGJvdGggMS41LjIgYW5kIDIuMDsgaW4gMS41LjIgYQorZXhjZXB0aW9uIG9uIHRoZSBgYHByaW50YGAgc3RhdGVtZW50IGluIGJvdGggMS41LjIgYW5kIDIuMDsgaW4gMS41LjIgYQogOmV4YzpgTmFtZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLCB3aGlsZSAyLjAgcmFpc2VzIGEgbmV3CiA6ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgZXhjZXB0aW9uLiA6ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgaXMgYSBzdWJjbGFzcyBvZgogOmV4YzpgTmFtZUVycm9yYCwgc28gYW55IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIDpleGM6YE5hbWVFcnJvcmAgdG8gYmUKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjEucnN0IGIvRG9jL3doYXRzbmV3LzIuMS5yc3QKaW5kZXggN2Y0MDUyMS4uMTE3YWYxMCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMS5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMS5yc3QKQEAgLTgxLDEzICs4MSwxMyBAQAogcGxhY2UuCiAKIE9uZSBzaWRlIGVmZmVjdCBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgdGhlIGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYCBhbmQKLTprZXl3b3JkOmBleGVjYCBzdGF0ZW1lbnRzIGhhdmUgYmVlbiBtYWRlIGlsbGVnYWwgaW5zaWRlIGEgZnVuY3Rpb24gc2NvcGUgdW5kZXIKK2BgZXhlY2BgIHN0YXRlbWVudHMgaGF2ZSBiZWVuIG1hZGUgaWxsZWdhbCBpbnNpZGUgYSBmdW5jdGlvbiBzY29wZSB1bmRlcgogY2VydGFpbiBjb25kaXRpb25zLiAgVGhlIFB5dGhvbiByZWZlcmVuY2UgbWFudWFsIGhhcyBzYWlkIGFsbCBhbG9uZyB0aGF0IGBgZnJvbQogbW9kdWxlIGltcG9ydCAqYGAgaXMgb25seSBsZWdhbCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlLCBidXQgdGhlIENQeXRob24KIGludGVycHJldGVyIGhhcyBuZXZlciBlbmZvcmNlZCB0aGlzIGJlZm9yZS4gIEFzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mCiBuZXN0ZWQgc2NvcGVzLCB0aGUgY29tcGlsZXIgd2hpY2ggdHVybnMgUHl0aG9uIHNvdXJjZSBpbnRvIGJ5dGVjb2RlcyBoYXMgdG8KIGdlbmVyYXRlIGRpZmZlcmVudCBjb2RlIHRvIGFjY2VzcyB2YXJpYWJsZXMgaW4gYSBjb250YWluaW5nIHNjb3BlLiAgYGBmcm9tCi1tb2R1bGUgaW1wb3J0ICpgYCBhbmQgOmtleXdvcmQ6YGV4ZWNgIG1ha2UgaXQgaW1wb3NzaWJsZSBmb3IgdGhlIGNvbXBpbGVyIHRvCittb2R1bGUgaW1wb3J0ICpgYCBhbmQgYGBleGVjYGAgbWFrZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUgY29tcGlsZXIgdG8KIGZpZ3VyZSB0aGlzIG91dCwgYmVjYXVzZSB0aGV5IGFkZCBuYW1lcyB0byB0aGUgbG9jYWwgbmFtZXNwYWNlIHRoYXQgYXJlCiB1bmtub3dhYmxlIGF0IGNvbXBpbGUgdGltZS4gVGhlcmVmb3JlLCBpZiBhIGZ1bmN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9uCiBkZWZpbml0aW9ucyBvciA6a2V5d29yZDpgbGFtYmRhYCBleHByZXNzaW9ucyB3aXRoIGZyZWUgdmFyaWFibGVzLCB0aGUgY29tcGlsZXIKQEAgLTEwMiwxMSArMTAyLDExIEBACiAgICAgICAgZGVmIGcoKToKICAgICAgICAgICAgcmV0dXJuIHgKIAotTGluZSA0IGNvbnRhaW5pbmcgdGhlIDprZXl3b3JkOmBleGVjYCBzdGF0ZW1lbnQgaXMgYSBzeW50YXggZXJyb3IsIHNpbmNlCi06a2V5d29yZDpgZXhlY2Agd291bGQgZGVmaW5lIGEgbmV3IGxvY2FsIHZhcmlhYmxlIG5hbWVkIGBgeGBgIHdob3NlIHZhbHVlIHNob3VsZAorTGluZSA0IGNvbnRhaW5pbmcgdGhlIGBgZXhlY2BgIHN0YXRlbWVudCBpcyBhIHN5bnRheCBlcnJvciwgc2luY2UKK2BgZXhlY2BgIHdvdWxkIGRlZmluZSBhIG5ldyBsb2NhbCB2YXJpYWJsZSBuYW1lZCBgYHhgYCB3aG9zZSB2YWx1ZSBzaG91bGQKIGJlIGFjY2Vzc2VkIGJ5IDpmdW5jOmBnYC4KIAotVGhpcyBzaG91bGRuJ3QgYmUgbXVjaCBvZiBhIGxpbWl0YXRpb24sIHNpbmNlIDprZXl3b3JkOmBleGVjYCBpcyByYXJlbHkgdXNlZCBpbgorVGhpcyBzaG91bGRuJ3QgYmUgbXVjaCBvZiBhIGxpbWl0YXRpb24sIHNpbmNlIGBgZXhlY2BgIGlzIHJhcmVseSB1c2VkIGluCiBtb3N0IFB5dGhvbiBjb2RlIChhbmQgd2hlbiBpdCBpcyB1c2VkLCBpdCdzIG9mdGVuIGEgc2lnbiBvZiBhIHBvb3IgZGVzaWduCiBhbnl3YXkpLgogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4yLnJzdCBiL0RvYy93aGF0c25ldy8yLjIucnN0CmluZGV4IDg5ZTRkNzYuLjFkYjFlZTcgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjIucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjIucnN0CkBAIC03NTQsNyArNzU0LDcgQEAKIAogKiBDbGFzc2VzIGNhbiBkZWZpbmUgbWV0aG9kcyBjYWxsZWQgOm1ldGg6YF9fdHJ1ZWRpdl9fYCBhbmQgOm1ldGg6YF9fZmxvb3JkaXZfX2AKICAgdG8gb3ZlcmxvYWQgdGhlIHR3byBkaXZpc2lvbiBvcGVyYXRvcnMuICBBdCB0aGUgQyBsZXZlbCwgdGhlcmUgYXJlIGFsc28gc2xvdHMgaW4KLSAgdGhlIDpjdHlwZTpgUHlOdW1iZXJNZXRob2RzYCBzdHJ1Y3R1cmUgc28gZXh0ZW5zaW9uIHR5cGVzIGNhbiBkZWZpbmUgdGhlIHR3bworICB0aGUgOmM6dHlwZTpgUHlOdW1iZXJNZXRob2RzYCBzdHJ1Y3R1cmUgc28gZXh0ZW5zaW9uIHR5cGVzIGNhbiBkZWZpbmUgdGhlIHR3bwogICBvcGVyYXRvcnMuCiAKICogUHl0aG9uIDIuMiBzdXBwb3J0cyBzb21lIGNvbW1hbmQtbGluZSBhcmd1bWVudHMgZm9yIHRlc3Rpbmcgd2hldGhlciBjb2RlIHdpbGwKQEAgLTg5MiwxMyArODkyLDEzIEBACiBwbGFjZS4KIAogT25lIHNpZGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB0aGUgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgIGFuZAotOmtleXdvcmQ6YGV4ZWNgIHN0YXRlbWVudHMgaGF2ZSBiZWVuIG1hZGUgaWxsZWdhbCBpbnNpZGUgYSBmdW5jdGlvbiBzY29wZSB1bmRlcgorYGBleGVjYGAgc3RhdGVtZW50cyBoYXZlIGJlZW4gbWFkZSBpbGxlZ2FsIGluc2lkZSBhIGZ1bmN0aW9uIHNjb3BlIHVuZGVyCiBjZXJ0YWluIGNvbmRpdGlvbnMuICBUaGUgUHl0aG9uIHJlZmVyZW5jZSBtYW51YWwgaGFzIHNhaWQgYWxsIGFsb25nIHRoYXQgYGBmcm9tCiBtb2R1bGUgaW1wb3J0ICpgYCBpcyBvbmx5IGxlZ2FsIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUsIGJ1dCB0aGUgQ1B5dGhvbgogaW50ZXJwcmV0ZXIgaGFzIG5ldmVyIGVuZm9yY2VkIHRoaXMgYmVmb3JlLiAgQXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YKIG5lc3RlZCBzY29wZXMsIHRoZSBjb21waWxlciB3aGljaCB0dXJucyBQeXRob24gc291cmNlIGludG8gYnl0ZWNvZGVzIGhhcyB0bwogZ2VuZXJhdGUgZGlmZmVyZW50IGNvZGUgdG8gYWNjZXNzIHZhcmlhYmxlcyBpbiBhIGNvbnRhaW5pbmcgc2NvcGUuICBgYGZyb20KLW1vZHVsZSBpbXBvcnQgKmBgIGFuZCA6a2V5d29yZDpgZXhlY2AgbWFrZSBpdCBpbXBvc3NpYmxlIGZvciB0aGUgY29tcGlsZXIgdG8KK21vZHVsZSBpbXBvcnQgKmBgIGFuZCBgYGV4ZWNgYCBtYWtlIGl0IGltcG9zc2libGUgZm9yIHRoZSBjb21waWxlciB0bwogZmlndXJlIHRoaXMgb3V0LCBiZWNhdXNlIHRoZXkgYWRkIG5hbWVzIHRvIHRoZSBsb2NhbCBuYW1lc3BhY2UgdGhhdCBhcmUKIHVua25vd2FibGUgYXQgY29tcGlsZSB0aW1lLiBUaGVyZWZvcmUsIGlmIGEgZnVuY3Rpb24gY29udGFpbnMgZnVuY3Rpb24KIGRlZmluaXRpb25zIG9yIDprZXl3b3JkOmBsYW1iZGFgIGV4cHJlc3Npb25zIHdpdGggZnJlZSB2YXJpYWJsZXMsIHRoZSBjb21waWxlcgpAQCAtOTEzLDExICs5MTMsMTEgQEAKICAgICAgICBkZWYgZygpOgogICAgICAgICAgICByZXR1cm4geAogCi1MaW5lIDQgY29udGFpbmluZyB0aGUgOmtleXdvcmQ6YGV4ZWNgIHN0YXRlbWVudCBpcyBhIHN5bnRheCBlcnJvciwgc2luY2UKLTprZXl3b3JkOmBleGVjYCB3b3VsZCBkZWZpbmUgYSBuZXcgbG9jYWwgdmFyaWFibGUgbmFtZWQgYGB4YGAgd2hvc2UgdmFsdWUgc2hvdWxkCitMaW5lIDQgY29udGFpbmluZyB0aGUgYGBleGVjYGAgc3RhdGVtZW50IGlzIGEgc3ludGF4IGVycm9yLCBzaW5jZQorYGBleGVjYGAgd291bGQgZGVmaW5lIGEgbmV3IGxvY2FsIHZhcmlhYmxlIG5hbWVkIGBgeGBgIHdob3NlIHZhbHVlIHNob3VsZAogYmUgYWNjZXNzZWQgYnkgOmZ1bmM6YGdgLgogCi1UaGlzIHNob3VsZG4ndCBiZSBtdWNoIG9mIGEgbGltaXRhdGlvbiwgc2luY2UgOmtleXdvcmQ6YGV4ZWNgIGlzIHJhcmVseSB1c2VkIGluCitUaGlzIHNob3VsZG4ndCBiZSBtdWNoIG9mIGEgbGltaXRhdGlvbiwgc2luY2UgYGBleGVjYGAgaXMgcmFyZWx5IHVzZWQgaW4KIG1vc3QgUHl0aG9uIGNvZGUgKGFuZCB3aGVuIGl0IGlzIHVzZWQsIGl0J3Mgb2Z0ZW4gYSBzaWduIG9mIGEgcG9vciBkZXNpZ24KIGFueXdheSkuCiAKQEAgLTk4Myw3ICs5ODMsNyBAQAogICBKdW4taWNoaXJvICJpdG9qdW4iIEhhZ2luby4pCiAKICogVHdvIG5ldyBmb3JtYXQgY2hhcmFjdGVycyB3ZXJlIGFkZGVkIHRvIHRoZSA6bW9kOmBzdHJ1Y3RgIG1vZHVsZSBmb3IgNjQtYml0Ci0gIGludGVnZXJzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlIEMgOmN0eXBlOmBsb25nIGxvbmdgIHR5cGUuICBgYHFgYCBpcyBmb3IKKyAgaW50ZWdlcnMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGUgQyA6Yzp0eXBlOmBsb25nIGxvbmdgIHR5cGUuICBgYHFgYCBpcyBmb3IKICAgYSBzaWduZWQgNjQtYml0IGludGVnZXIsIGFuZCBgYFFgYCBpcyBmb3IgYW4gdW5zaWduZWQgb25lLiAgVGhlIHZhbHVlIGlzCiAgIHJldHVybmVkIGluIFB5dGhvbidzIGxvbmcgaW50ZWdlciB0eXBlLiAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBQZXRlcnMuKQogCkBAIC0xMDU3LDE2ICsxMDU3LDE2IEBACiAgIGF0IG11Y2ggaGlnaGVyIHNwZWVkcyB0aGFuIFB5dGhvbi1iYXNlZCBmdW5jdGlvbnMgYW5kIHNob3VsZCByZWR1Y2UgdGhlIG92ZXJoZWFkCiAgIG9mIHByb2ZpbGluZyBhbmQgdHJhY2luZy4gIFRoaXMgIHdpbGwgYmUgb2YgaW50ZXJlc3QgdG8gYXV0aG9ycyBvZiBkZXZlbG9wbWVudAogICBlbnZpcm9ubWVudHMgZm9yIFB5dGhvbi4gIFR3byBuZXcgQyBmdW5jdGlvbnMgd2VyZSBhZGRlZCB0byBQeXRob24ncyBBUEksCi0gIDpjZnVuYzpgUHlFdmFsX1NldFByb2ZpbGVgIGFuZCA6Y2Z1bmM6YFB5RXZhbF9TZXRUcmFjZWAuIFRoZSBleGlzdGluZworICA6YzpmdW5jOmBQeUV2YWxfU2V0UHJvZmlsZWAgYW5kIDpjOmZ1bmM6YFB5RXZhbF9TZXRUcmFjZWAuIFRoZSBleGlzdGluZwogICA6ZnVuYzpgc3lzLnNldHByb2ZpbGVgIGFuZCA6ZnVuYzpgc3lzLnNldHRyYWNlYCBmdW5jdGlvbnMgc3RpbGwgZXhpc3QsIGFuZCBoYXZlCiAgIHNpbXBseSBiZWVuIGNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgQy1sZXZlbCBpbnRlcmZhY2UuICAoQ29udHJpYnV0ZWQgYnkgRnJlZCBMLgogICBEcmFrZSwgSnIuKQogCiAqIEFub3RoZXIgbG93LWxldmVsIEFQSSwgcHJpbWFyaWx5IG9mIGludGVyZXN0IHRvIGltcGxlbWVudG9ycyBvZiBQeXRob24KLSAgZGVidWdnZXJzIGFuZCBkZXZlbG9wbWVudCB0b29scywgd2FzIGFkZGVkLiA6Y2Z1bmM6YFB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkYCBhbmQKLSAgOmNmdW5jOmBQeUludGVycHJldGVyU3RhdGVfTmV4dGAgbGV0IGEgY2FsbGVyIHdhbGsgdGhyb3VnaCBhbGwgdGhlIGV4aXN0aW5nCi0gIGludGVycHJldGVyIG9iamVjdHM7IDpjZnVuYzpgUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWRgIGFuZAotICA6Y2Z1bmM6YFB5VGhyZWFkU3RhdGVfTmV4dGAgYWxsb3cgbG9vcGluZyBvdmVyIGFsbCB0aGUgdGhyZWFkIHN0YXRlcyBmb3IgYSBnaXZlbgorICBkZWJ1Z2dlcnMgYW5kIGRldmVsb3BtZW50IHRvb2xzLCB3YXMgYWRkZWQuIDpjOmZ1bmM6YFB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkYCBhbmQKKyAgOmM6ZnVuYzpgUHlJbnRlcnByZXRlclN0YXRlX05leHRgIGxldCBhIGNhbGxlciB3YWxrIHRocm91Z2ggYWxsIHRoZSBleGlzdGluZworICBpbnRlcnByZXRlciBvYmplY3RzOyA6YzpmdW5jOmBQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZGAgYW5kCisgIDpjOmZ1bmM6YFB5VGhyZWFkU3RhdGVfTmV4dGAgYWxsb3cgbG9vcGluZyBvdmVyIGFsbCB0aGUgdGhyZWFkIHN0YXRlcyBmb3IgYSBnaXZlbgogICBpbnRlcnByZXRlci4gIChDb250cmlidXRlZCBieSBEYXZpZCBCZWF6bGV5LikKIAogKiBUaGUgQy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGhhcyBiZWVuIGNoYW5nZWQgdG8gbWFrZSBpdApAQCAtMTA3OCwxOSArMTA3OCwxOSBAQAogCiAgIFRvIHVwZ3JhZGUgYW4gZXh0ZW5zaW9uIG1vZHVsZSB0byB0aGUgbmV3IEFQSSwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgogCi0qIFJlbmFtZSA6Y2Z1bmM6YFB5X1RQRkxBR1NfR0NgIHRvIDpjZnVuYzpgUHlUUEZMQUdTX0hBVkVfR0NgLgorKiBSZW5hbWUgOmM6ZnVuYzpgUHlfVFBGTEFHU19HQ2AgdG8gOmM6ZnVuYzpgUHlUUEZMQUdTX0hBVkVfR0NgLgogCi0qIFVzZSA6Y2Z1bmM6YFB5T2JqZWN0X0dDX05ld2Agb3IgOmNmdW5jOmBQeU9iamVjdF9HQ19OZXdWYXJgIHRvIGFsbG9jYXRlCi0gICAgb2JqZWN0cywgYW5kIDpjZnVuYzpgUHlPYmplY3RfR0NfRGVsYCB0byBkZWFsbG9jYXRlIHRoZW0uCisqIFVzZSA6YzpmdW5jOmBQeU9iamVjdF9HQ19OZXdgIG9yIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX05ld1ZhcmAgdG8gYWxsb2NhdGUKKyAgICBvYmplY3RzLCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfR0NfRGVsYCB0byBkZWFsbG9jYXRlIHRoZW0uCiAKLSogUmVuYW1lIDpjZnVuYzpgUHlPYmplY3RfR0NfSW5pdGAgdG8gOmNmdW5jOmBQeU9iamVjdF9HQ19UcmFja2AgYW5kCi0gICAgOmNmdW5jOmBQeU9iamVjdF9HQ19GaW5pYCB0byA6Y2Z1bmM6YFB5T2JqZWN0X0dDX1VuVHJhY2tgLgorKiBSZW5hbWUgOmM6ZnVuYzpgUHlPYmplY3RfR0NfSW5pdGAgdG8gOmM6ZnVuYzpgUHlPYmplY3RfR0NfVHJhY2tgIGFuZAorICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX0ZpbmlgIHRvIDpjOmZ1bmM6YFB5T2JqZWN0X0dDX1VuVHJhY2tgLgogCi0qIFJlbW92ZSA6Y2Z1bmM6YFB5R0NfSEVBRF9TSVpFYCBmcm9tIG9iamVjdCBzaXplIGNhbGN1bGF0aW9ucy4KKyogUmVtb3ZlIDpjOmZ1bmM6YFB5R0NfSEVBRF9TSVpFYCBmcm9tIG9iamVjdCBzaXplIGNhbGN1bGF0aW9ucy4KIAotKiBSZW1vdmUgY2FsbHMgdG8gOmNmdW5jOmBQeU9iamVjdF9BU19HQ2AgYW5kIDpjZnVuYzpgUHlPYmplY3RfRlJPTV9HQ2AuCisqIFJlbW92ZSBjYWxscyB0byA6YzpmdW5jOmBQeU9iamVjdF9BU19HQ2AgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X0ZST01fR0NgLgogCi0qIEEgbmV3IGBgZXRgYCBmb3JtYXQgc2VxdWVuY2Ugd2FzIGFkZGVkIHRvIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWA7IGBgZXRgYAorKiBBIG5ldyBgYGV0YGAgZm9ybWF0IHNlcXVlbmNlIHdhcyBhZGRlZCB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYDsgYGBldGBgCiAgIHRha2VzIGJvdGggYSBwYXJhbWV0ZXIgYW5kIGFuIGVuY29kaW5nIG5hbWUsIGFuZCBjb252ZXJ0cyB0aGUgcGFyYW1ldGVyIHRvIHRoZQogICBnaXZlbiBlbmNvZGluZyBpZiB0aGUgcGFyYW1ldGVyIHR1cm5zIG91dCB0byBiZSBhIFVuaWNvZGUgc3RyaW5nLCBvciBsZWF2ZXMgaXQKICAgYWxvbmUgaWYgaXQncyBhbiA4LWJpdCBzdHJpbmcsIGFzc3VtaW5nIGl0IHRvIGFscmVhZHkgYmUgaW4gdGhlIGRlc2lyZWQKQEAgLTEwOTksMTAgKzEwOTksMTAgQEAKICAgc3BlY2lmaWVkIG5ldyBlbmNvZGluZy4gKENvbnRyaWJ1dGVkIGJ5IE0uLUEuIExlbWJ1cmcsIGFuZCB1c2VkIGZvciB0aGUgTUJDUwogICBzdXBwb3J0IG9uIFdpbmRvd3MgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbi4pCiAKLSogQSBkaWZmZXJlbnQgYXJndW1lbnQgcGFyc2luZyBmdW5jdGlvbiwgOmNmdW5jOmBQeUFyZ19VbnBhY2tUdXBsZWAsIGhhcyBiZWVuCisqIEEgZGlmZmVyZW50IGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24sIDpjOmZ1bmM6YFB5QXJnX1VucGFja1R1cGxlYCwgaGFzIGJlZW4KICAgYWRkZWQgdGhhdCdzIHNpbXBsZXIgYW5kIHByZXN1bWFibHkgZmFzdGVyLiAgSW5zdGVhZCBvZiBzcGVjaWZ5aW5nIGEgZm9ybWF0CiAgIHN0cmluZywgdGhlIGNhbGxlciBzaW1wbHkgZ2l2ZXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cwotICBleHBlY3RlZCwgYW5kIGEgc2V0IG9mIHBvaW50ZXJzIHRvIDpjdHlwZTpgUHlPYmplY3RcKmAgdmFyaWFibGVzIHRoYXQgd2lsbCBiZQorICBleHBlY3RlZCwgYW5kIGEgc2V0IG9mIHBvaW50ZXJzIHRvIDpjOnR5cGU6YFB5T2JqZWN0XCpgIHZhcmlhYmxlcyB0aGF0IHdpbGwgYmUKICAgZmlsbGVkIGluIHdpdGggYXJndW1lbnQgdmFsdWVzLgogCiAqIFR3byBuZXcgZmxhZ3MgOmNvbnN0OmBNRVRIX05PQVJHU2AgYW5kIDpjb25zdDpgTUVUSF9PYCBhcmUgYXZhaWxhYmxlIGluIG1ldGhvZApAQCAtMTExMSwxNCArMTExMSwxNCBAQAogICBjb3JyZXNwb25kaW5nIG1ldGhvZCB0aGF0IHVzZXMgOmNvbnN0OmBNRVRIX1ZBUkFSR1NgLiAgQWxzbywgdGhlIG9sZAogICA6Y29uc3Q6YE1FVEhfT0xEQVJHU2Agc3R5bGUgb2Ygd3JpdGluZyBDIG1ldGhvZHMgaXMgIG5vdyBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQuCiAKLSogVHdvIG5ldyB3cmFwcGVyIGZ1bmN0aW9ucywgOmNmdW5jOmBQeU9TX3NucHJpbnRmYCBhbmQgOmNmdW5jOmBQeU9TX3ZzbnByaW50ZmAKKyogVHdvIG5ldyB3cmFwcGVyIGZ1bmN0aW9ucywgOmM6ZnVuYzpgUHlPU19zbnByaW50ZmAgYW5kIDpjOmZ1bmM6YFB5T1NfdnNucHJpbnRmYAogICB3ZXJlIGFkZGVkIHRvIHByb3ZpZGUgIGNyb3NzLXBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHJlbGF0aXZlbHkgbmV3Ci0gIDpjZnVuYzpgc25wcmludGZgIGFuZCA6Y2Z1bmM6YHZzbnByaW50ZmAgQyBsaWIgQVBJcy4gSW4gY29udHJhc3QgdG8gdGhlIHN0YW5kYXJkCi0gIDpjZnVuYzpgc3ByaW50ZmAgYW5kIDpjZnVuYzpgdnNwcmludGZgIGZ1bmN0aW9ucywgdGhlIFB5dGhvbiB2ZXJzaW9ucyBjaGVjayB0aGUKKyAgOmM6ZnVuYzpgc25wcmludGZgIGFuZCA6YzpmdW5jOmB2c25wcmludGZgIEMgbGliIEFQSXMuIEluIGNvbnRyYXN0IHRvIHRoZSBzdGFuZGFyZAorICA6YzpmdW5jOmBzcHJpbnRmYCBhbmQgOmM6ZnVuYzpgdnNwcmludGZgIGZ1bmN0aW9ucywgdGhlIFB5dGhvbiB2ZXJzaW9ucyBjaGVjayB0aGUKICAgYm91bmRzIG9mIHRoZSBidWZmZXIgdXNlZCB0byBwcm90ZWN0IGFnYWluc3QgYnVmZmVyIG92ZXJydW5zLiAoQ29udHJpYnV0ZWQgYnkKICAgTS4tQS4gTGVtYnVyZy4pCiAKLSogVGhlIDpjZnVuYzpgX1B5VHVwbGVfUmVzaXplYCBmdW5jdGlvbiBoYXMgbG9zdCBhbiB1bnVzZWQgcGFyYW1ldGVyLCBzbyBub3cgaXQKKyogVGhlIDpjOmZ1bmM6YF9QeVR1cGxlX1Jlc2l6ZWAgZnVuY3Rpb24gaGFzIGxvc3QgYW4gdW51c2VkIHBhcmFtZXRlciwgc28gbm93IGl0CiAgIHRha2VzIDIgcGFyYW1ldGVycyBpbnN0ZWFkIG9mIDMuICBUaGUgdGhpcmQgYXJndW1lbnQgd2FzIG5ldmVyIHVzZWQsIGFuZCBjYW4KICAgc2ltcGx5IGJlIGRpc2NhcmRlZCB3aGVuIHBvcnRpbmcgY29kZSBmcm9tIGVhcmxpZXIgdmVyc2lvbnMgdG8gUHl0aG9uIDIuMi4KIApAQCAtMTIxOSw3ICsxMjE5LDcgQEAKICAgb3BlcmF0b3IsIGJ1dCB0aGVzZSBmZWF0dXJlcyB3ZXJlIHJhcmVseSB1c2VkIGFuZCB0aGVyZWZvcmUgYnVnZ3kuICBUaGUKICAgOm1ldGg6YHRvbGlzdGAgbWV0aG9kIGFuZCB0aGUgOmF0dHI6YHN0YXJ0YCwgOmF0dHI6YHN0b3BgLCBhbmQgOmF0dHI6YHN0ZXBgCiAgIGF0dHJpYnV0ZXMgYXJlIGFsc28gYmVpbmcgZGVwcmVjYXRlZC4gIEF0IHRoZSBDIGxldmVsLCB0aGUgZm91cnRoIGFyZ3VtZW50IHRvCi0gIHRoZSA6Y2Z1bmM6YFB5UmFuZ2VfTmV3YCBmdW5jdGlvbiwgYGByZXBlYXRgYCwgaGFzIGFsc28gYmVlbiBkZXByZWNhdGVkLgorICB0aGUgOmM6ZnVuYzpgUHlSYW5nZV9OZXdgIGZ1bmN0aW9uLCBgYHJlcGVhdGBgLCBoYXMgYWxzbyBiZWVuIGRlcHJlY2F0ZWQuCiAKICogVGhlcmUgd2VyZSBhIGJ1bmNoIG9mIHBhdGNoZXMgdG8gdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIG1vc3RseSB0byBmaXgKICAgcG90ZW50aWFsIGNvcmUgZHVtcHMgaWYgYSBkaWN0aW9uYXJ5IGNvbnRhaW5zIG9iamVjdHMgdGhhdCBzbmVha2lseSBjaGFuZ2VkCkBAIC0xMjQyLDggKzEyNDIsOCBAQAogICB1cCB0byBkaXNwbGF5IHRoZSBvdXRwdXQuICBUaGlzIHBhdGNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGltcG9ydCBzdWNoIHNjcmlwdHMsCiAgIGluIGNhc2UgdGhleSdyZSBhbHNvIHVzYWJsZSBhcyBtb2R1bGVzLiAgKEltcGxlbWVudGVkIGJ5IERhdmlkIEJvbGVuLikKIAotKiBPbiBwbGF0Zm9ybXMgd2hlcmUgUHl0aG9uIHVzZXMgdGhlIEMgOmNmdW5jOmBkbG9wZW5gIGZ1bmN0aW9uICB0byBsb2FkCi0gIGV4dGVuc2lvbiBtb2R1bGVzLCBpdCdzIG5vdyBwb3NzaWJsZSB0byBzZXQgdGhlIGZsYWdzIHVzZWQgIGJ5IDpjZnVuYzpgZGxvcGVuYAorKiBPbiBwbGF0Zm9ybXMgd2hlcmUgUHl0aG9uIHVzZXMgdGhlIEMgOmM6ZnVuYzpgZGxvcGVuYCBmdW5jdGlvbiAgdG8gbG9hZAorICBleHRlbnNpb24gbW9kdWxlcywgaXQncyBub3cgcG9zc2libGUgdG8gc2V0IHRoZSBmbGFncyB1c2VkICBieSA6YzpmdW5jOmBkbG9wZW5gCiAgIHVzaW5nIHRoZSA6ZnVuYzpgc3lzLmdldGRsb3BlbmZsYWdzYCBhbmQgOmZ1bmM6YHN5cy5zZXRkbG9wZW5mbGFnc2AgZnVuY3Rpb25zLgogICAoQ29udHJpYnV0ZWQgYnkgQnJhbSBTdG9say4pCiAKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjMucnN0IGIvRG9jL3doYXRzbmV3LzIuMy5yc3QKaW5kZXggMzg5NGY4Ny4uMGNjMjlmNiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuMy5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuMy5yc3QKQEAgLTE3OTcsOCArMTc5Nyw4IEBACiAKIFB5bWFsbG9jLCBhIHNwZWNpYWxpemVkIG9iamVjdCBhbGxvY2F0b3Igd3JpdHRlbiBieSBWbGFkaW1pciBNYXJhbmdvem92LCB3YXMgYQogZmVhdHVyZSBhZGRlZCB0byBQeXRob24gMi4xLiAgUHltYWxsb2MgaXMgaW50ZW5kZWQgdG8gYmUgZmFzdGVyIHRoYW4gdGhlIHN5c3RlbQotOmNmdW5jOmBtYWxsb2NgIGFuZCB0byBoYXZlIGxlc3MgbWVtb3J5IG92ZXJoZWFkIGZvciBhbGxvY2F0aW9uIHBhdHRlcm5zIHR5cGljYWwKLW9mIFB5dGhvbiBwcm9ncmFtcy4gVGhlIGFsbG9jYXRvciB1c2VzIEMncyA6Y2Z1bmM6YG1hbGxvY2AgZnVuY3Rpb24gdG8gZ2V0IGxhcmdlCis6YzpmdW5jOmBtYWxsb2NgIGFuZCB0byBoYXZlIGxlc3MgbWVtb3J5IG92ZXJoZWFkIGZvciBhbGxvY2F0aW9uIHBhdHRlcm5zIHR5cGljYWwKK29mIFB5dGhvbiBwcm9ncmFtcy4gVGhlIGFsbG9jYXRvciB1c2VzIEMncyA6YzpmdW5jOmBtYWxsb2NgIGZ1bmN0aW9uIHRvIGdldCBsYXJnZQogcG9vbHMgb2YgbWVtb3J5IGFuZCB0aGVuIGZ1bGZpbGxzIHNtYWxsZXIgbWVtb3J5IHJlcXVlc3RzIGZyb20gdGhlc2UgcG9vbHMuCiAKIEluIDIuMSBhbmQgMi4yLCBweW1hbGxvYyB3YXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUgYW5kIHdhc24ndCBlbmFibGVkIGJ5CkBAIC0xODE0LDEzICsxODE0LDEzIEBACiAKIFRoZXJlJ3Mgb25lIHBhcnRpY3VsYXJseSBjb21tb24gZXJyb3IgdGhhdCBjYXVzZXMgcHJvYmxlbXMuICBUaGVyZSBhcmUgYSBudW1iZXIKIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiBQeXRob24ncyBDIEFQSSB0aGF0IGhhdmUgcHJldmlvdXNseSBqdXN0IGJlZW4KLWFsaWFzZXMgZm9yIHRoZSBDIGxpYnJhcnkncyA6Y2Z1bmM6YG1hbGxvY2AgYW5kIDpjZnVuYzpgZnJlZWAsIG1lYW5pbmcgdGhhdCBpZgorYWxpYXNlcyBmb3IgdGhlIEMgbGlicmFyeSdzIDpjOmZ1bmM6YG1hbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgLCBtZWFuaW5nIHRoYXQgaWYKIHlvdSBhY2NpZGVudGFsbHkgY2FsbGVkIG1pc21hdGNoZWQgZnVuY3Rpb25zIHRoZSBlcnJvciB3b3VsZG4ndCBiZSBub3RpY2VhYmxlLgogV2hlbiB0aGUgb2JqZWN0IGFsbG9jYXRvciBpcyBlbmFibGVkLCB0aGVzZSBmdW5jdGlvbnMgYXJlbid0IGFsaWFzZXMgb2YKLTpjZnVuYzpgbWFsbG9jYCBhbmQgOmNmdW5jOmBmcmVlYCBhbnkgbW9yZSwgYW5kIGNhbGxpbmcgdGhlIHdyb25nIGZ1bmN0aW9uIHRvCis6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBhbnkgbW9yZSwgYW5kIGNhbGxpbmcgdGhlIHdyb25nIGZ1bmN0aW9uIHRvCiBmcmVlIG1lbW9yeSBtYXkgZ2V0IHlvdSBhIGNvcmUgZHVtcC4gIEZvciBleGFtcGxlLCBpZiBtZW1vcnkgd2FzIGFsbG9jYXRlZCB1c2luZwotOmNmdW5jOmBQeU9iamVjdF9NYWxsb2NgLCBpdCBoYXMgdG8gYmUgZnJlZWQgdXNpbmcgOmNmdW5jOmBQeU9iamVjdF9GcmVlYCwgbm90Ci06Y2Z1bmM6YGZyZWVgLiAgQSBmZXcgbW9kdWxlcyBpbmNsdWRlZCB3aXRoIFB5dGhvbiBmZWxsIGFmb3VsIG9mIHRoaXMgYW5kIGhhZCB0bworOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwgaXQgaGFzIHRvIGJlIGZyZWVkIHVzaW5nIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgLCBub3QKKzpjOmZ1bmM6YGZyZWVgLiAgQSBmZXcgbW9kdWxlcyBpbmNsdWRlZCB3aXRoIFB5dGhvbiBmZWxsIGFmb3VsIG9mIHRoaXMgYW5kIGhhZCB0bwogYmUgZml4ZWQ7IGRvdWJ0bGVzcyB0aGVyZSBhcmUgbW9yZSB0aGlyZC1wYXJ0eSBtb2R1bGVzIHRoYXQgd2lsbCBoYXZlIHRoZSBzYW1lCiBwcm9ibGVtLgogCkBAIC0xODMxLDE0ICsxODMxLDE0IEBACiBzcGVjaWZpY2FsbHkgZm9yIGFsbG9jYXRpbmcgUHl0aG9uIG9iamVjdHMuCiAKICogVG8gYWxsb2NhdGUgYW5kIGZyZWUgYW4gdW5kaXN0aW5ndWlzaGVkIGNodW5rIG9mIG1lbW9yeSB1c2UgdGhlICJyYXcgbWVtb3J5IgotICBmYW1pbHk6IDpjZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmNmdW5jOmBQeU1lbV9SZWFsbG9jYCwgYW5kIDpjZnVuYzpgUHlNZW1fRnJlZWAuCisgIGZhbWlseTogOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIGFuZCA6YzpmdW5jOmBQeU1lbV9GcmVlYC4KIAogKiBUaGUgIm9iamVjdCBtZW1vcnkiIGZhbWlseSBpcyB0aGUgaW50ZXJmYWNlIHRvIHRoZSBweW1hbGxvYyBmYWNpbGl0eSBkZXNjcmliZWQKICAgYWJvdmUgYW5kIGlzIGJpYXNlZCB0b3dhcmRzIGEgbGFyZ2UgbnVtYmVyIG9mICJzbWFsbCIgYWxsb2NhdGlvbnM6Ci0gIDpjZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwgOmNmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCwgYW5kIDpjZnVuYzpgUHlPYmplY3RfRnJlZWAuCisgIDpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AsIDpjOmZ1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAuCiAKICogVG8gYWxsb2NhdGUgYW5kIGZyZWUgUHl0aG9uIG9iamVjdHMsIHVzZSB0aGUgIm9iamVjdCIgZmFtaWx5Ci0gIDpjZnVuYzpgUHlPYmplY3RfTmV3YCwgOmNmdW5jOmBQeU9iamVjdF9OZXdWYXJgLCBhbmQgOmNmdW5jOmBQeU9iamVjdF9EZWxgLgorICA6YzpmdW5jOmBQeU9iamVjdF9OZXdgLCA6YzpmdW5jOmBQeU9iamVjdF9OZXdWYXJgLCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfRGVsYC4KIAogVGhhbmtzIHRvIGxvdHMgb2Ygd29yayBieSBUaW0gUGV0ZXJzLCBweW1hbGxvYyBpbiAyLjMgYWxzbyBwcm92aWRlcyBkZWJ1Z2dpbmcKIGZlYXR1cmVzIHRvIGNhdGNoIG1lbW9yeSBvdmVyd3JpdGVzIGFuZCBkb3VibGVkIGZyZWVzIGluIGJvdGggZXh0ZW5zaW9uIG1vZHVsZXMKQEAgLTE4NzcsMTAgKzE4NzcsMTAgQEAKICAgKDpmaWxlOmBsaWJweXRob24yLjMuc29gKSBieSBzdXBwbHlpbmcgOm9wdGlvbjpgLS1lbmFibGUtc2hhcmVkYCB3aGVuIHJ1bm5pbmcKICAgUHl0aG9uJ3MgOnByb2dyYW06YGNvbmZpZ3VyZWAgc2NyaXB0LiAgKENvbnRyaWJ1dGVkIGJ5IE9uZHJlaiBQYWxrb3Zza3kuKQogCi0qIFRoZSA6Y21hY3JvOmBETF9FWFBPUlRgIGFuZCA6Y21hY3JvOmBETF9JTVBPUlRgIG1hY3JvcyBhcmUgbm93IGRlcHJlY2F0ZWQuCisqIFRoZSA6YzptYWNybzpgRExfRVhQT1JUYCBhbmQgOmM6bWFjcm86YERMX0lNUE9SVGAgbWFjcm9zIGFyZSBub3cgZGVwcmVjYXRlZC4KICAgSW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIGZvciBQeXRob24gZXh0ZW5zaW9uIG1vZHVsZXMgc2hvdWxkIG5vdyBiZSBkZWNsYXJlZAotICB1c2luZyB0aGUgbmV3IG1hY3JvIDpjbWFjcm86YFB5TU9ESU5JVF9GVU5DYCwgd2hpbGUgdGhlIFB5dGhvbiBjb3JlIHdpbGwKLSAgZ2VuZXJhbGx5IHVzZSB0aGUgOmNtYWNybzpgUHlBUElfRlVOQ2AgYW5kIDpjbWFjcm86YFB5QVBJX0RBVEFgIG1hY3Jvcy4KKyAgdXNpbmcgdGhlIG5ldyBtYWNybyA6YzptYWNybzpgUHlNT0RJTklUX0ZVTkNgLCB3aGlsZSB0aGUgUHl0aG9uIGNvcmUgd2lsbAorICBnZW5lcmFsbHkgdXNlIHRoZSA6YzptYWNybzpgUHlBUElfRlVOQ2AgYW5kIDpjOm1hY3JvOmBQeUFQSV9EQVRBYCBtYWNyb3MuCiAKICogVGhlIGludGVycHJldGVyIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IGFueSBkb2NzdHJpbmdzIGZvciB0aGUgYnVpbHQtaW4KICAgZnVuY3Rpb25zIGFuZCBtb2R1bGVzIGJ5IHN1cHBseWluZyA6b3B0aW9uOmAtLXdpdGhvdXQtZG9jLXN0cmluZ3NgIHRvIHRoZQpAQCAtMTg4OCwxOSArMTg4OCwxOSBAQAogICBidXQgd2lsbCBhbHNvIG1lYW4gdGhhdCB5b3UgY2FuJ3QgZ2V0IGhlbHAgZm9yIFB5dGhvbidzIGJ1aWx0LWlucy4gIChDb250cmlidXRlZAogICBieSBHdXN0YXZvIE5pZW1leWVyLikKIAotKiBUaGUgOmNmdW5jOmBQeUFyZ19Ob0FyZ3NgIG1hY3JvIGlzIG5vdyBkZXByZWNhdGVkLCBhbmQgY29kZSB0aGF0IHVzZXMgaXQKKyogVGhlIDpjOmZ1bmM6YFB5QXJnX05vQXJnc2AgbWFjcm8gaXMgbm93IGRlcHJlY2F0ZWQsIGFuZCBjb2RlIHRoYXQgdXNlcyBpdAogICBzaG91bGQgYmUgY2hhbmdlZC4gIEZvciBQeXRob24gMi4yIGFuZCBsYXRlciwgdGhlIG1ldGhvZCBkZWZpbml0aW9uIHRhYmxlIGNhbgogICBzcGVjaWZ5IHRoZSA6Y29uc3Q6YE1FVEhfTk9BUkdTYCBmbGFnLCBzaWduYWxsaW5nIHRoYXQgdGhlcmUgYXJlIG5vIGFyZ3VtZW50cywKICAgYW5kIHRoZSBhcmd1bWVudCBjaGVja2luZyBjYW4gdGhlbiBiZSByZW1vdmVkLiAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIHByZS0yLjIKICAgdmVyc2lvbnMgb2YgUHl0aG9uIGlzIGltcG9ydGFudCwgdGhlIGNvZGUgY291bGQgdXNlIGBgUHlBcmdfUGFyc2VUdXBsZShhcmdzLAogICAiIilgYCBpbnN0ZWFkLCBidXQgdGhpcyB3aWxsIGJlIHNsb3dlciB0aGFuIHVzaW5nIDpjb25zdDpgTUVUSF9OT0FSR1NgLgogCi0qIDpjZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgYWNjZXB0cyBuZXcgZm9ybWF0IGNoYXJhY3RlcnMgZm9yIHZhcmlvdXMgc2l6ZXMgb2YKLSAgdW5zaWduZWQgaW50ZWdlcnM6IGBgQmBgIGZvciA6Y3R5cGU6YHVuc2lnbmVkIGNoYXJgLCBgYEhgYCBmb3IgOmN0eXBlOmB1bnNpZ25lZAotICBzaG9ydCBpbnRgLCAgYGBJYGAgZm9yIDpjdHlwZTpgdW5zaWduZWQgaW50YCwgIGFuZCBgYEtgYCBmb3IgOmN0eXBlOmB1bnNpZ25lZAorKiA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBhY2NlcHRzIG5ldyBmb3JtYXQgY2hhcmFjdGVycyBmb3IgdmFyaW91cyBzaXplcyBvZgorICB1bnNpZ25lZCBpbnRlZ2VyczogYGBCYGAgZm9yIDpjOnR5cGU6YHVuc2lnbmVkIGNoYXJgLCBgYEhgYCBmb3IgOmM6dHlwZTpgdW5zaWduZWQKKyAgc2hvcnQgaW50YCwgIGBgSWBgIGZvciA6Yzp0eXBlOmB1bnNpZ25lZCBpbnRgLCAgYW5kIGBgS2BgIGZvciA6Yzp0eXBlOmB1bnNpZ25lZAogICBsb25nIGxvbmdgLgogCi0qIEEgbmV3IGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcobWFwcGluZywgY2hhciBcKmtleSlgIHdhcyBhZGRlZAorKiBBIG5ldyBmdW5jdGlvbiwgOmM6ZnVuYzpgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhtYXBwaW5nLCBjaGFyIFwqa2V5KWAgd2FzIGFkZGVkCiAgIGFzIHNob3J0aGFuZCBmb3IgYGBQeU9iamVjdF9EZWxJdGVtKG1hcHBpbmcsIFB5U3RyaW5nX05ldyhrZXkpKWBgLgogCiAqIEZpbGUgb2JqZWN0cyBub3cgbWFuYWdlIHRoZWlyIGludGVybmFsIHN0cmluZyBidWZmZXIgZGlmZmVyZW50bHksIGluY3JlYXNpbmcKQEAgLTE5MTAsNyArMTkxMCw3IEBACiAKICogSXQncyBub3cgcG9zc2libGUgdG8gZGVmaW5lIGNsYXNzIGFuZCBzdGF0aWMgbWV0aG9kcyBmb3IgYSBDIGV4dGVuc2lvbiB0eXBlIGJ5CiAgIHNldHRpbmcgZWl0aGVyIHRoZSA6Y29uc3Q6YE1FVEhfQ0xBU1NgIG9yIDpjb25zdDpgTUVUSF9TVEFUSUNgIGZsYWdzIGluIGEKLSAgbWV0aG9kJ3MgOmN0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlLgorICBtZXRob2QncyA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlLgogCiAqIFB5dGhvbiBub3cgaW5jbHVkZXMgYSBjb3B5IG9mIHRoZSBFeHBhdCBYTUwgcGFyc2VyJ3Mgc291cmNlIGNvZGUsIHJlbW92aW5nIGFueQogICBkZXBlbmRlbmNlIG9uIGEgc3lzdGVtIHZlcnNpb24gb3IgbG9jYWwgaW5zdGFsbGF0aW9uIG9mIEV4cGF0LgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdAppbmRleCBmYWRkZTUwLi5jNTJiNWZiIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi40LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdApAQCAtNDY5LDcgKzQ2OSw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBQeXRob24gaGFzIGFsd2F5cyBzdXBwb3J0ZWQgZmxvYXRpbmctcG9pbnQgKEZQKSBudW1iZXJzLCBiYXNlZCBvbiB0aGUgdW5kZXJseWluZwotQyA6Y3R5cGU6YGRvdWJsZWAgdHlwZSwgYXMgYSBkYXRhIHR5cGUuICBIb3dldmVyLCB3aGlsZSBtb3N0IHByb2dyYW1taW5nCitDIDpjOnR5cGU6YGRvdWJsZWAgdHlwZSwgYXMgYSBkYXRhIHR5cGUuICBIb3dldmVyLCB3aGlsZSBtb3N0IHByb2dyYW1taW5nCiBsYW5ndWFnZXMgcHJvdmlkZSBhIGZsb2F0aW5nLXBvaW50IHR5cGUsIG1hbnkgcGVvcGxlIChldmVuIHByb2dyYW1tZXJzKSBhcmUKIHVuYXdhcmUgdGhhdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGRvbid0IHJlcHJlc2VudCBjZXJ0YWluIGRlY2ltYWwgZnJhY3Rpb25zCiBhY2N1cmF0ZWx5LiAgVGhlIG5ldyA6Y2xhc3M6YERlY2ltYWxgIHR5cGUgY2FuIHJlcHJlc2VudCB0aGVzZSBmcmFjdGlvbnMKQEAgLTQ5OCw3ICs0OTgsNyBAQAogNS4KIAogTW9kZXJuIHN5c3RlbXMgdXN1YWxseSBwcm92aWRlIGZsb2F0aW5nLXBvaW50IHN1cHBvcnQgdGhhdCBjb25mb3JtcyB0byBhCi1zdGFuZGFyZCBjYWxsZWQgSUVFRSA3NTQuICBDJ3MgOmN0eXBlOmBkb3VibGVgIHR5cGUgaXMgdXN1YWxseSBpbXBsZW1lbnRlZCBhcyBhCitzdGFuZGFyZCBjYWxsZWQgSUVFRSA3NTQuICBDJ3MgOmM6dHlwZTpgZG91YmxlYCB0eXBlIGlzIHVzdWFsbHkgaW1wbGVtZW50ZWQgYXMgYQogNjQtYml0IElFRUUgNzU0IG51bWJlciwgd2hpY2ggdXNlcyA1MiBiaXRzIG9mIHNwYWNlIGZvciB0aGUgbWFudGlzc2EuICBUaGlzCiBtZWFucyB0aGF0IG51bWJlcnMgY2FuIG9ubHkgYmUgc3BlY2lmaWVkIHRvIDUyIGJpdHMgb2YgcHJlY2lzaW9uLiAgSWYgeW91J3JlCiB0cnlpbmcgdG8gcmVwcmVzZW50IG51bWJlcnMgd2hvc2UgZXhwYW5zaW9uIHJlcGVhdHMgZW5kbGVzc2x5LCB0aGUgZXhwYW5zaW9uIGlzCkBAIC03MzYsNyArNzM2LDcgQEAKIEhvd2V2ZXIsIHRoZSBtb2R1bGUgd2FzIGNhcmVmdWwgdG8gbm90IGNoYW5nZSB0aGUgbnVtZXJpYyBsb2NhbGUgYmVjYXVzZSB2YXJpb3VzCiBmdW5jdGlvbnMgaW4gUHl0aG9uJ3MgaW1wbGVtZW50YXRpb24gcmVxdWlyZWQgdGhhdCB0aGUgbnVtZXJpYyBsb2NhbGUgcmVtYWluIHNldAogdG8gdGhlIGBgJ0MnYGAgbG9jYWxlLiAgT2Z0ZW4gdGhpcyB3YXMgYmVjYXVzZSB0aGUgY29kZSB3YXMgdXNpbmcgdGhlIEMKLWxpYnJhcnkncyA6Y2Z1bmM6YGF0b2ZgIGZ1bmN0aW9uLgorbGlicmFyeSdzIDpjOmZ1bmM6YGF0b2ZgIGZ1bmN0aW9uLgogCiBOb3Qgc2V0dGluZyB0aGUgbnVtZXJpYyBsb2NhbGUgY2F1c2VkIHRyb3VibGUgZm9yIGV4dGVuc2lvbnMgdGhhdCB1c2VkIHRoaXJkLQogcGFydHkgQyBsaWJyYXJpZXMsIGhvd2V2ZXIsIGJlY2F1c2UgdGhleSB3b3VsZG4ndCBoYXZlIHRoZSBjb3JyZWN0IGxvY2FsZSBzZXQuCkBAIC03NDYsMTEgKzc0NiwxMSBAQAogVGhlIHNvbHV0aW9uIGRlc2NyaWJlZCBpbiB0aGUgUEVQIGlzIHRvIGFkZCB0aHJlZSBuZXcgZnVuY3Rpb25zIHRvIHRoZSBQeXRob24KIEFQSSB0aGF0IHBlcmZvcm0gQVNDSUktb25seSBjb252ZXJzaW9ucywgaWdub3JpbmcgdGhlIGxvY2FsZSBzZXR0aW5nOgogCi0qIDpjZnVuYzpgUHlPU19hc2NpaV9zdHJ0b2Qoc3RyLCBwdHIpYCAgYW5kIDpjZnVuYzpgUHlPU19hc2NpaV9hdG9mKHN0ciwgcHRyKWAKLSAgYm90aCBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgQyA6Y3R5cGU6YGRvdWJsZWAuCisqIDpjOmZ1bmM6YFB5T1NfYXNjaWlfc3RydG9kKHN0ciwgcHRyKWAgIGFuZCA6YzpmdW5jOmBQeU9TX2FzY2lpX2F0b2Yoc3RyLCBwdHIpYAorICBib3RoIGNvbnZlcnQgYSBzdHJpbmcgdG8gYSBDIDpjOnR5cGU6YGRvdWJsZWAuCiAKLSogOmNmdW5jOmBQeU9TX2FzY2lpX2Zvcm1hdGQoYnVmZmVyLCBidWZfbGVuLCBmb3JtYXQsIGQpYCBjb252ZXJ0cyBhCi0gIDpjdHlwZTpgZG91YmxlYCB0byBhbiBBU0NJSSBzdHJpbmcuCisqIDpjOmZ1bmM6YFB5T1NfYXNjaWlfZm9ybWF0ZChidWZmZXIsIGJ1Zl9sZW4sIGZvcm1hdCwgZClgIGNvbnZlcnRzIGEKKyAgOmM6dHlwZTpgZG91YmxlYCB0byBhbiBBU0NJSSBzdHJpbmcuCiAKIFRoZSBjb2RlIGZvciB0aGVzZSBmdW5jdGlvbnMgY2FtZSBmcm9tIHRoZSBHTGliIGxpYnJhcnkKIChodHRwOi8vbGlicmFyeS5nbm9tZS5vcmcvZGV2ZWwvZ2xpYi9zdGFibGUvKSwgd2hvc2UgZGV2ZWxvcGVycyBraW5kbHkKQEAgLTg5Niw3ICs4OTYsNyBAQAogICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuLikKIAogKiBUaGUgOmZ1bmM6YGV2YWwoZXhwciwgZ2xvYmFscywgbG9jYWxzKWAgYW5kIDpmdW5jOmBleGVjZmlsZShmaWxlbmFtZSwgZ2xvYmFscywKLSAgbG9jYWxzKWAgZnVuY3Rpb25zIGFuZCB0aGUgOmtleXdvcmQ6YGV4ZWNgIHN0YXRlbWVudCBub3cgYWNjZXB0IGFueSBtYXBwaW5nIHR5cGUKKyAgbG9jYWxzKWAgZnVuY3Rpb25zIGFuZCB0aGUgYGBleGVjYGAgc3RhdGVtZW50IG5vdyBhY2NlcHQgYW55IG1hcHBpbmcgdHlwZQogICBmb3IgdGhlICpsb2NhbHMqIHBhcmFtZXRlci4gIFByZXZpb3VzbHkgdGhpcyBoYWQgdG8gYmUgYSByZWd1bGFyIFB5dGhvbgogICBkaWN0aW9uYXJ5LiAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKIApAQCAtOTM4LDcgKzkzOCw3IEBACiAqIFRoZSBtYWNoaW5lcnkgZm9yIGdyb3dpbmcgYW5kIHNocmlua2luZyBsaXN0cyB3YXMgb3B0aW1pemVkIGZvciBzcGVlZCBhbmQgZm9yCiAgIHNwYWNlIGVmZmljaWVuY3kuICBBcHBlbmRpbmcgYW5kIHBvcHBpbmcgZnJvbSBsaXN0cyBub3cgcnVucyBmYXN0ZXIgZHVlIHRvIG1vcmUKICAgZWZmaWNpZW50IGNvZGUgcGF0aHMgYW5kIGxlc3MgZnJlcXVlbnQgdXNlIG9mIHRoZSB1bmRlcmx5aW5nIHN5c3RlbQotICA6Y2Z1bmM6YHJlYWxsb2NgLiAgTGlzdCBjb21wcmVoZW5zaW9ucyBhbHNvIGJlbmVmaXQuICAgOm1ldGg6YGxpc3QuZXh0ZW5kYCB3YXMKKyAgOmM6ZnVuYzpgcmVhbGxvY2AuICBMaXN0IGNvbXByZWhlbnNpb25zIGFsc28gYmVuZWZpdC4gICA6bWV0aDpgbGlzdC5leHRlbmRgIHdhcwogICBhbHNvIG9wdGltaXplZCBhbmQgbm8gbG9uZ2VyIGNvbnZlcnRzIGl0cyBhcmd1bWVudCBpbnRvIGEgdGVtcG9yYXJ5IGxpc3QgYmVmb3JlCiAgIGV4dGVuZGluZyB0aGUgYmFzZSBsaXN0LiAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKIApAQCAtMTQ0NSwzNCArMTQ0NSwzNCBAQAogU29tZSBvZiB0aGUgY2hhbmdlcyB0byBQeXRob24ncyBidWlsZCBwcm9jZXNzIGFuZCB0byB0aGUgQyBBUEkgYXJlOgogCiAqIFRocmVlIG5ldyBjb252ZW5pZW5jZSBtYWNyb3Mgd2VyZSBhZGRlZCBmb3IgY29tbW9uIHJldHVybiB2YWx1ZXMgZnJvbQotICBleHRlbnNpb24gZnVuY3Rpb25zOiA6Y21hY3JvOmBQeV9SRVRVUk5fTk9ORWAsIDpjbWFjcm86YFB5X1JFVFVSTl9UUlVFYCwgYW5kCi0gIDpjbWFjcm86YFB5X1JFVFVSTl9GQUxTRWAuIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24uKQorICBleHRlbnNpb24gZnVuY3Rpb25zOiA6YzptYWNybzpgUHlfUkVUVVJOX05PTkVgLCA6YzptYWNybzpgUHlfUkVUVVJOX1RSVUVgLCBhbmQKKyAgOmM6bWFjcm86YFB5X1JFVFVSTl9GQUxTRWAuIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24uKQogCi0qIEFub3RoZXIgbmV3IG1hY3JvLCA6Y21hY3JvOmBQeV9DTEVBUihvYmopYCwgIGRlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mCisqIEFub3RoZXIgbmV3IG1hY3JvLCA6YzptYWNybzpgUHlfQ0xFQVIob2JqKWAsICBkZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgogICAqb2JqKiBhbmQgc2V0cyAqb2JqKiB0byB0aGUgbnVsbCBwb2ludGVyLiAgKENvbnRyaWJ1dGVkIGJ5IEppbSBGdWx0b24uKQogCi0qIEEgbmV3IGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5VHVwbGVfUGFjayhOLCBvYmoxLCBvYmoyLCAuLi4sIG9iak4pYCwgY29uc3RydWN0cworKiBBIG5ldyBmdW5jdGlvbiwgOmM6ZnVuYzpgUHlUdXBsZV9QYWNrKE4sIG9iajEsIG9iajIsIC4uLiwgb2JqTilgLCBjb25zdHJ1Y3RzCiAgIHR1cGxlcyBmcm9tIGEgdmFyaWFibGUgbGVuZ3RoIGFyZ3VtZW50IGxpc3Qgb2YgUHl0aG9uIG9iamVjdHMuICAoQ29udHJpYnV0ZWQgYnkKICAgUmF5bW9uZCBIZXR0aW5nZXIuKQogCi0qIEEgbmV3IGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5RGljdF9Db250YWlucyhkLCBrKWAsIGltcGxlbWVudHMgZmFzdCBkaWN0aW9uYXJ5CisqIEEgbmV3IGZ1bmN0aW9uLCA6YzpmdW5jOmBQeURpY3RfQ29udGFpbnMoZCwgaylgLCBpbXBsZW1lbnRzIGZhc3QgZGljdGlvbmFyeQogICBsb29rdXBzIHdpdGhvdXQgbWFza2luZyBleGNlcHRpb25zIHJhaXNlZCBkdXJpbmcgdGhlIGxvb2stdXAgcHJvY2Vzcy4KICAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKIAotKiBUaGUgOmNtYWNybzpgUHlfSVNfTkFOKFgpYCBtYWNybyByZXR1cm5zIDEgaWYgIGl0cyBmbG9hdCBvciBkb3VibGUgYXJndW1lbnQKKyogVGhlIDpjOm1hY3JvOmBQeV9JU19OQU4oWClgIG1hY3JvIHJldHVybnMgMSBpZiAgaXRzIGZsb2F0IG9yIGRvdWJsZSBhcmd1bWVudAogICAqWCogaXMgYSBOYU4uICAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBQZXRlcnMuKQogCiAqIEMgY29kZSBjYW4gYXZvaWQgdW5uZWNlc3NhcnkgbG9ja2luZyBieSB1c2luZyB0aGUgbmV3Ci0gIDpjZnVuYzpgUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZGAgZnVuY3Rpb24gdG8gdGVsbCAgaWYgYW55IHRocmVhZCBvcGVyYXRpb25zCisgIDpjOmZ1bmM6YFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWRgIGZ1bmN0aW9uIHRvIHRlbGwgIGlmIGFueSB0aHJlYWQgb3BlcmF0aW9ucwogICBoYXZlIGJlZW4gcGVyZm9ybWVkLiAgSWYgdGhpcyBmdW5jdGlvbiAgcmV0dXJucyBmYWxzZSwgbm8gbG9jayBvcGVyYXRpb25zIGFyZQogICBuZWVkZWQuIChDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4uKQogCi0qIEEgbmV3IGZ1bmN0aW9uLCA6Y2Z1bmM6YFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzYCwgaXMgdGhlIHNhbWUgYXMKLSAgOmNmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIGJ1dCB0YWtlcyBhICA6Y3R5cGU6YHZhX2xpc3RgIGluc3RlYWQgb2YgYQorKiBBIG5ldyBmdW5jdGlvbiwgOmM6ZnVuYzpgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHNgLCBpcyB0aGUgc2FtZSBhcworICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIGJ1dCB0YWtlcyBhICA6Yzp0eXBlOmB2YV9saXN0YCBpbnN0ZWFkIG9mIGEKICAgbnVtYmVyIG9mIGFyZ3VtZW50cy4gKENvbnRyaWJ1dGVkIGJ5IEdyZWcgQ2hhcG1hbi4pCiAKICogQSBuZXcgbWV0aG9kIGZsYWcsIDpjb25zdDpgTUVUSF9DT0VYSVNUU2AsIGFsbG93cyBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gc2xvdHMKLSAgdG8gY28tZXhpc3Qgd2l0aCBhIDpjdHlwZTpgUHlDRnVuY3Rpb25gIGhhdmluZyB0aGUgc2FtZSBuYW1lLiAgVGhpcyBjYW4gaGFsdmUKKyAgdG8gY28tZXhpc3Qgd2l0aCBhIDpjOnR5cGU6YFB5Q0Z1bmN0aW9uYCBoYXZpbmcgdGhlIHNhbWUgbmFtZS4gIFRoaXMgY2FuIGhhbHZlCiAgIHRoZSBhY2Nlc3MgdGltZSBmb3IgYSBtZXRob2Qgc3VjaCBhcyA6bWV0aDpgc2V0Ll9fY29udGFpbnNfX2AuICAoQ29udHJpYnV0ZWQgYnkKICAgUmF5bW9uZCBIZXR0aW5nZXIuKQogCkBAIC0xNDg2LDggKzE0ODYsOCBAQAogICB0aG91Z2ggdGhhdCBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIGRvZXNuJ3QgY2FsbCB0aGF0IHJlZ2lzdGVyICJ0aGUgVFNDCiAgIHJlZ2lzdGVyIi4gIChDb250cmlidXRlZCBieSBKZXJlbXkgSHlsdG9uLikKIAotKiBUaGUgOmN0eXBlOmB0cmFjZWJhY2tvYmplY3RgIHR5cGUgaGFzIGJlZW4gcmVuYW1lZCB0bwotICA6Y3R5cGU6YFB5VHJhY2ViYWNrT2JqZWN0YC4KKyogVGhlIDpjOnR5cGU6YHRyYWNlYmFja29iamVjdGAgdHlwZSBoYXMgYmVlbiByZW5hbWVkIHRvCisgIDpjOnR5cGU6YFB5VHJhY2ViYWNrT2JqZWN0YC4KIAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi41LnJzdCBiL0RvYy93aGF0c25ldy8yLjUucnN0CmluZGV4IGM3ZjdkNTguLjc5ZDhhZDIgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjUucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjUucnN0CkBAIC04NzAsMzEgKzg3MCwzMSBAQAogUEVQIDM1MzogVXNpbmcgc3NpemVfdCBhcyB0aGUgaW5kZXggdHlwZQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1BIHdpZGUtcmFuZ2luZyBjaGFuZ2UgdG8gUHl0aG9uJ3MgQyBBUEksIHVzaW5nIGEgbmV3ICA6Y3R5cGU6YFB5X3NzaXplX3RgIHR5cGUKLWRlZmluaXRpb24gaW5zdGVhZCBvZiA6Y3R5cGU6YGludGAsICB3aWxsIHBlcm1pdCB0aGUgaW50ZXJwcmV0ZXIgdG8gaGFuZGxlIG1vcmUKK0Egd2lkZS1yYW5naW5nIGNoYW5nZSB0byBQeXRob24ncyBDIEFQSSwgdXNpbmcgYSBuZXcgIDpjOnR5cGU6YFB5X3NzaXplX3RgIHR5cGUKK2RlZmluaXRpb24gaW5zdGVhZCBvZiA6Yzp0eXBlOmBpbnRgLCAgd2lsbCBwZXJtaXQgdGhlIGludGVycHJldGVyIHRvIGhhbmRsZSBtb3JlCiBkYXRhIG9uIDY0LWJpdCBwbGF0Zm9ybXMuIFRoaXMgY2hhbmdlIGRvZXNuJ3QgYWZmZWN0IFB5dGhvbidzIGNhcGFjaXR5IG9uIDMyLWJpdAogcGxhdGZvcm1zLgogCi1WYXJpb3VzIHBpZWNlcyBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHVzZWQgQydzIDpjdHlwZTpgaW50YCB0eXBlIHRvIHN0b3JlCitWYXJpb3VzIHBpZWNlcyBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyIHVzZWQgQydzIDpjOnR5cGU6YGludGAgdHlwZSB0byBzdG9yZQogc2l6ZXMgb3IgY291bnRzOyBmb3IgZXhhbXBsZSwgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIGxpc3Qgb3IgdHVwbGUgd2VyZSBzdG9yZWQKLWluIGFuIDpjdHlwZTpgaW50YC4gIFRoZSBDIGNvbXBpbGVycyBmb3IgbW9zdCA2NC1iaXQgcGxhdGZvcm1zIHN0aWxsIGRlZmluZQotOmN0eXBlOmBpbnRgIGFzIGEgMzItYml0IHR5cGUsIHNvIHRoYXQgbWVhbnQgdGhhdCBsaXN0cyBjb3VsZCBvbmx5IGhvbGQgdXAgdG8KK2luIGFuIDpjOnR5cGU6YGludGAuICBUaGUgQyBjb21waWxlcnMgZm9yIG1vc3QgNjQtYml0IHBsYXRmb3JtcyBzdGlsbCBkZWZpbmUKKzpjOnR5cGU6YGludGAgYXMgYSAzMi1iaXQgdHlwZSwgc28gdGhhdCBtZWFudCB0aGF0IGxpc3RzIGNvdWxkIG9ubHkgaG9sZCB1cCB0bwogYGAyKiozMSAtIDFgYCA9IDIxNDc0ODM2NDcgaXRlbXMuIChUaGVyZSBhcmUgYWN0dWFsbHkgYSBmZXcgZGlmZmVyZW50CiBwcm9ncmFtbWluZyBtb2RlbHMgdGhhdCA2NC1iaXQgQyBjb21waWxlcnMgY2FuIHVzZSAtLSBzZWUKIGh0dHA6Ly93d3cudW5peC5vcmcvdmVyc2lvbjIvd2hhdHNuZXcvbHA2NF93cC5odG1sIGZvciBhIGRpc2N1c3Npb24gLS0gYnV0IHRoZQotbW9zdCBjb21tb25seSBhdmFpbGFibGUgbW9kZWwgbGVhdmVzIDpjdHlwZTpgaW50YCBhcyAzMiBiaXRzLikKK21vc3QgY29tbW9ubHkgYXZhaWxhYmxlIG1vZGVsIGxlYXZlcyA6Yzp0eXBlOmBpbnRgIGFzIDMyIGJpdHMuKQogCiBBIGxpbWl0IG9mIDIxNDc0ODM2NDcgaXRlbXMgZG9lc24ndCByZWFsbHkgbWF0dGVyIG9uIGEgMzItYml0IHBsYXRmb3JtIGJlY2F1c2UKIHlvdSdsbCBydW4gb3V0IG9mIG1lbW9yeSBiZWZvcmUgaGl0dGluZyB0aGUgbGVuZ3RoIGxpbWl0LiBFYWNoIGxpc3QgaXRlbQogcmVxdWlyZXMgc3BhY2UgZm9yIGEgcG9pbnRlciwgd2hpY2ggaXMgNCBieXRlcywgcGx1cyBzcGFjZSBmb3IgYQotOmN0eXBlOmBQeU9iamVjdGAgcmVwcmVzZW50aW5nIHRoZSBpdGVtLiAgMjE0NzQ4MzY0N1wqNCBpcyBhbHJlYWR5IG1vcmUgYnl0ZXMKKzpjOnR5cGU6YFB5T2JqZWN0YCByZXByZXNlbnRpbmcgdGhlIGl0ZW0uICAyMTQ3NDgzNjQ3XCo0IGlzIGFscmVhZHkgbW9yZSBieXRlcwogdGhhbiBhIDMyLWJpdCBhZGRyZXNzIHNwYWNlIGNhbiBjb250YWluLgogCiBJdCdzIHBvc3NpYmxlIHRvIGFkZHJlc3MgdGhhdCBtdWNoIG1lbW9yeSBvbiBhIDY0LWJpdCBwbGF0Zm9ybSwgaG93ZXZlci4gIFRoZQogcG9pbnRlcnMgZm9yIGEgbGlzdCB0aGF0IHNpemUgd291bGQgb25seSByZXF1aXJlIDE2IEdpQiBvZiBzcGFjZSwgc28gaXQncyBub3QKIHVucmVhc29uYWJsZSB0aGF0IFB5dGhvbiBwcm9ncmFtbWVycyBtaWdodCBjb25zdHJ1Y3QgbGlzdHMgdGhhdCBsYXJnZS4KIFRoZXJlZm9yZSwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBoYWQgdG8gYmUgY2hhbmdlZCB0byB1c2Ugc29tZSB0eXBlIG90aGVyIHRoYW4KLTpjdHlwZTpgaW50YCwgYW5kIHRoaXMgd2lsbCBiZSBhIDY0LWJpdCB0eXBlIG9uIDY0LWJpdCBwbGF0Zm9ybXMuICBUaGUgY2hhbmdlCis6Yzp0eXBlOmBpbnRgLCBhbmQgdGhpcyB3aWxsIGJlIGEgNjQtYml0IHR5cGUgb24gNjQtYml0IHBsYXRmb3Jtcy4gIFRoZSBjaGFuZ2UKIHdpbGwgY2F1c2UgaW5jb21wYXRpYmlsaXRpZXMgb24gNjQtYml0IG1hY2hpbmVzLCBzbyBpdCB3YXMgZGVlbWVkIHdvcnRoIG1ha2luZwogdGhlIHRyYW5zaXRpb24gbm93LCB3aGlsZSB0aGUgbnVtYmVyIG9mIDY0LWJpdCB1c2VycyBpcyBzdGlsbCByZWxhdGl2ZWx5IHNtYWxsLgogKEluIDUgb3IgMTAgeWVhcnMsIHdlIG1heSAqYWxsKiBiZSBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCB0aGUgdHJhbnNpdGlvbiB3b3VsZApAQCAtOTAyLDE1ICs5MDIsMTUgQEAKIAogVGhpcyBjaGFuZ2UgbW9zdCBzdHJvbmdseSBhZmZlY3RzIGF1dGhvcnMgb2YgQyBleHRlbnNpb24gbW9kdWxlcy4gICBQeXRob24KIHN0cmluZ3MgYW5kIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzIGxpc3RzIGFuZCB0dXBsZXMgIG5vdyB1c2UKLTpjdHlwZTpgUHlfc3NpemVfdGAgdG8gc3RvcmUgdGhlaXIgc2l6ZS4gICBGdW5jdGlvbnMgc3VjaCBhcwotOmNmdW5jOmBQeUxpc3RfU2l6ZWAgIG5vdyByZXR1cm4gOmN0eXBlOmBQeV9zc2l6ZV90YC4gIENvZGUgaW4gZXh0ZW5zaW9uIG1vZHVsZXMKLW1heSB0aGVyZWZvcmUgbmVlZCB0byBoYXZlIHNvbWUgdmFyaWFibGVzIGNoYW5nZWQgdG8gOmN0eXBlOmBQeV9zc2l6ZV90YC4KKzpjOnR5cGU6YFB5X3NzaXplX3RgIHRvIHN0b3JlIHRoZWlyIHNpemUuICAgRnVuY3Rpb25zIHN1Y2ggYXMKKzpjOmZ1bmM6YFB5TGlzdF9TaXplYCAgbm93IHJldHVybiA6Yzp0eXBlOmBQeV9zc2l6ZV90YC4gIENvZGUgaW4gZXh0ZW5zaW9uIG1vZHVsZXMKK21heSB0aGVyZWZvcmUgbmVlZCB0byBoYXZlIHNvbWUgdmFyaWFibGVzIGNoYW5nZWQgdG8gOmM6dHlwZTpgUHlfc3NpemVfdGAuCiAKLVRoZSA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGFuZCA6Y2Z1bmM6YFB5X0J1aWxkVmFsdWVgIGZ1bmN0aW9ucyBoYXZlIGEgbmV3Ci1jb252ZXJzaW9uIGNvZGUsIGBgbmBgLCBmb3IgOmN0eXBlOmBQeV9zc2l6ZV90YC4gICA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgJ3MKLWBgcyNgYCBhbmQgYGB0I2BgIHN0aWxsIG91dHB1dCA6Y3R5cGU6YGludGAgYnkgZGVmYXVsdCwgYnV0IHlvdSBjYW4gZGVmaW5lIHRoZQotbWFjcm8gIDpjbWFjcm86YFBZX1NTSVpFX1RfQ0xFQU5gIGJlZm9yZSBpbmNsdWRpbmcgOmZpbGU6YFB5dGhvbi5oYCAgdG8gbWFrZQotdGhlbSByZXR1cm4gOmN0eXBlOmBQeV9zc2l6ZV90YC4KK1RoZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBhbmQgOmM6ZnVuYzpgUHlfQnVpbGRWYWx1ZWAgZnVuY3Rpb25zIGhhdmUgYSBuZXcKK2NvbnZlcnNpb24gY29kZSwgYGBuYGAsIGZvciA6Yzp0eXBlOmBQeV9zc2l6ZV90YC4gICA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCdzCitgYHMjYGAgYW5kIGBgdCNgYCBzdGlsbCBvdXRwdXQgOmM6dHlwZTpgaW50YCBieSBkZWZhdWx0LCBidXQgeW91IGNhbiBkZWZpbmUgdGhlCittYWNybyAgOmM6bWFjcm86YFBZX1NTSVpFX1RfQ0xFQU5gIGJlZm9yZSBpbmNsdWRpbmcgOmZpbGU6YFB5dGhvbi5oYCAgdG8gbWFrZQordGhlbSByZXR1cm4gOmM6dHlwZTpgUHlfc3NpemVfdGAuCiAKIDpwZXA6YDM1M2AgaGFzIGEgc2VjdGlvbiBvbiBjb252ZXJzaW9uIGd1aWRlbGluZXMgdGhhdCAgZXh0ZW5zaW9uIGF1dGhvcnMgc2hvdWxkCiByZWFkIHRvIGxlYXJuIGFib3V0IHN1cHBvcnRpbmcgNjQtYml0IHBsYXRmb3Jtcy4KQEAgLTk1NCw4ICs5NTQsOCBAQAogOmV4YzpgVHlwZUVycm9yYCBpZiB0aGlzIHJlcXVpcmVtZW50IGlzbid0IG1ldC4KIAogQSBjb3JyZXNwb25kaW5nIDphdHRyOmBuYl9pbmRleGAgc2xvdCB3YXMgYWRkZWQgdG8gdGhlIEMtbGV2ZWwKLTpjdHlwZTpgUHlOdW1iZXJNZXRob2RzYCBzdHJ1Y3R1cmUgdG8gbGV0IEMgZXh0ZW5zaW9ucyBpbXBsZW1lbnQgdGhpcyBwcm90b2NvbC4KLTpjZnVuYzpgUHlOdW1iZXJfSW5kZXgob2JqKWAgY2FuIGJlIHVzZWQgaW4gZXh0ZW5zaW9uIGNvZGUgdG8gY2FsbCB0aGUKKzpjOnR5cGU6YFB5TnVtYmVyTWV0aG9kc2Agc3RydWN0dXJlIHRvIGxldCBDIGV4dGVuc2lvbnMgaW1wbGVtZW50IHRoaXMgcHJvdG9jb2wuCis6YzpmdW5jOmBQeU51bWJlcl9JbmRleChvYmopYCBjYW4gYmUgdXNlZCBpbiBleHRlbnNpb24gY29kZSB0byBjYWxsIHRoZQogOm1ldGg6YF9faW5kZXhfX2AgZnVuY3Rpb24gYW5kIHJldHJpZXZlIGl0cyByZXN1bHQuCiAKIApAQCAtMTE3OSw3ICsxMTc5LDcgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IEJvYiBJcHBvbGl0byBhdCB0aGUgTmVlZEZvclNwZWVkIHNwcmludC4pCiAKICogVGhlIDptb2Q6YHJlYCBtb2R1bGUgZ290IGEgMSBvciAyJSBzcGVlZHVwIGJ5IHN3aXRjaGluZyB0byAgUHl0aG9uJ3MgYWxsb2NhdG9yCi0gIGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIHRoZSBzeXN0ZW0ncyAgOmNmdW5jOmBtYWxsb2NgIGFuZCA6Y2Z1bmM6YGZyZWVgLgorICBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUgc3lzdGVtJ3MgIDpjOmZ1bmM6YG1hbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgLgogICAoQ29udHJpYnV0ZWQgYnkgSmFjayBEaWVkZXJpY2ggYXQgdGhlIE5lZWRGb3JTcGVlZCBzcHJpbnQuKQogCiAqIFRoZSBjb2RlIGdlbmVyYXRvcidzIHBlZXBob2xlIG9wdGltaXplciBub3cgcGVyZm9ybXMgc2ltcGxlIGNvbnN0YW50IGZvbGRpbmcKQEAgLTEyMDMsNyArMTIwMyw3IEBACiAgIFNlYW4gUmVpZnNjaG5laWRlciBhdCB0aGUgTmVlZEZvclNwZWVkIHNwcmludC4pCiAKICogSW1wb3J0aW5nIG5vdyBjYWNoZXMgdGhlIHBhdGhzIHRyaWVkLCByZWNvcmRpbmcgd2hldGhlciAgdGhleSBleGlzdCBvciBub3Qgc28KLSAgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgbWFrZXMgZmV3ZXIgIDpjZnVuYzpgb3BlbmAgYW5kIDpjZnVuYzpgc3RhdGAgY2FsbHMgb24KKyAgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgbWFrZXMgZmV3ZXIgIDpjOmZ1bmM6YG9wZW5gIGFuZCA6YzpmdW5jOmBzdGF0YCBjYWxscyBvbgogICBzdGFydHVwLiAoQ29udHJpYnV0ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMgYW5kIEdlb3JnIEJyYW5kbC4pCiAKICAgLi4gUGF0Y2ggOTIxNDY2CkBAIC0xNTY4LDcgKzE1NjgsNyBAQAogICByZXBvcnRpbmcgYGAoJ0NQeXRob24nLCAndHJ1bmsnLCAnNDUzMTM6NDUzMTUnKWBgLgogCiAgIFRoaXMgaW5mb3JtYXRpb24gaXMgYWxzbyBhdmFpbGFibGUgdG8gQyBleHRlbnNpb25zIHZpYSB0aGUKLSAgOmNmdW5jOmBQeV9HZXRCdWlsZEluZm9gIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhICBzdHJpbmcgb2YgYnVpbGQgaW5mb3JtYXRpb24KKyAgOmM6ZnVuYzpgUHlfR2V0QnVpbGRJbmZvYCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSAgc3RyaW5nIG9mIGJ1aWxkIGluZm9ybWF0aW9uCiAgIGxpa2UgdGhpczogYGAidHJ1bms6NDUzNTU6NDUzNTZNLCBBcHIgMTMgMjAwNiwgMDc6NDI6MTkiYGAuICAgKENvbnRyaWJ1dGVkIGJ5CiAgIEJhcnJ5IFdhcnNhdy4pCiAKQEAgLTE2OTAsNyArMTY5MCw3IEBACiAgICByZXN1bHQgPSBsaWJjLnByaW50ZigiTGluZSBvZiBvdXRwdXRcbiIpCiAKIFR5cGUgY29uc3RydWN0b3JzIGZvciB0aGUgdmFyaW91cyBDIHR5cGVzIGFyZSBwcm92aWRlZDogOmZ1bmM6YGNfaW50YCwKLTpmdW5jOmBjX2Zsb2F0YCwgOmZ1bmM6YGNfZG91YmxlYCwgOmZ1bmM6YGNfY2hhcl9wYCAoZXF1aXZhbGVudCB0byA6Y3R5cGU6YGNoYXIKKzpmdW5jOmBjX2Zsb2F0YCwgOmZ1bmM6YGNfZG91YmxlYCwgOmZ1bmM6YGNfY2hhcl9wYCAoZXF1aXZhbGVudCB0byA6Yzp0eXBlOmBjaGFyCiBcKmApLCBhbmQgc28gZm9ydGguICBVbmxpa2UgUHl0aG9uJ3MgdHlwZXMsIHRoZSBDIHZlcnNpb25zIGFyZSBhbGwgbXV0YWJsZTsgeW91CiBjYW4gYXNzaWduIHRvIHRoZWlyIDphdHRyOmB2YWx1ZWAgYXR0cmlidXRlIHRvIGNoYW5nZSB0aGUgd3JhcHBlZCB2YWx1ZS4gIFB5dGhvbgogaW50ZWdlcnMgYW5kIHN0cmluZ3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBDCkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogYGBjdHlwZXMucHl0aG9uYXBpYGAgb2JqZWN0LiAgVGhpcyBvYmplY3QgZG9lcyAqbm90KiAgcmVsZWFzZSB0aGUgZ2xvYmFsCiBpbnRlcnByZXRlciBsb2NrIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24sIGJlY2F1c2UgdGhlIGxvY2sgbXVzdCBiZSBoZWxkIHdoZW4KIGNhbGxpbmcgaW50byB0aGUgaW50ZXJwcmV0ZXIncyBjb2RlLiAgIFRoZXJlJ3MgYSA6Y2xhc3M6YHB5X29iamVjdCgpYCB0eXBlCi1jb25zdHJ1Y3RvciB0aGF0IHdpbGwgY3JlYXRlIGEgIDpjdHlwZTpgUHlPYmplY3QgXCpgIHBvaW50ZXIuICBBIHNpbXBsZSB1c2FnZTo6Citjb25zdHJ1Y3RvciB0aGF0IHdpbGwgY3JlYXRlIGEgIDpjOnR5cGU6YFB5T2JqZWN0IFwqYCBwb2ludGVyLiAgQSBzaW1wbGUgdXNhZ2U6OgogCiAgICBpbXBvcnQgY3R5cGVzCiAKQEAgLTIwODcsOCArMjA4Nyw4IEBACiAgIGh0dHA6Ly9zY2FuLmNvdmVyaXR5LmNvbSBmb3IgdGhlIHN0YXRpc3RpY3MuCiAKICogVGhlIGxhcmdlc3QgY2hhbmdlIHRvIHRoZSBDIEFQSSBjYW1lIGZyb20gOnBlcDpgMzUzYCwgd2hpY2ggbW9kaWZpZXMgdGhlCi0gIGludGVycHJldGVyIHRvIHVzZSBhIDpjdHlwZTpgUHlfc3NpemVfdGAgdHlwZSBkZWZpbml0aW9uIGluc3RlYWQgb2YKLSAgOmN0eXBlOmBpbnRgLiAgU2VlIHRoZSBlYXJsaWVyIHNlY3Rpb24gOnJlZjpgcGVwLTM1M2AgZm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGlzCisgIGludGVycHJldGVyIHRvIHVzZSBhIDpjOnR5cGU6YFB5X3NzaXplX3RgIHR5cGUgZGVmaW5pdGlvbiBpbnN0ZWFkIG9mCisgIDpjOnR5cGU6YGludGAuICBTZWUgdGhlIGVhcmxpZXIgc2VjdGlvbiA6cmVmOmBwZXAtMzUzYCBmb3IgYSBkaXNjdXNzaW9uIG9mIHRoaXMKICAgY2hhbmdlLgogCiAqIFRoZSBkZXNpZ24gb2YgdGhlIGJ5dGVjb2RlIGNvbXBpbGVyIGhhcyBjaGFuZ2VkIGEgZ3JlYXQgZGVhbCwgIG5vIGxvbmdlcgpAQCAtMjExMywxMCArMjExMywxMCBAQAogICBkaXNjdXNzZXMgdGhlIGRlc2lnbi4gIFRvIHN0YXJ0IGxlYXJuaW5nIGFib3V0IHRoZSBjb2RlLCByZWFkIHRoZSBkZWZpbml0aW9uIG9mCiAgIHRoZSB2YXJpb3VzIEFTVCBub2RlcyBpbiA6ZmlsZTpgUGFyc2VyL1B5dGhvbi5hc2RsYC4gIEEgUHl0aG9uIHNjcmlwdCByZWFkcyB0aGlzCiAgIGZpbGUgYW5kIGdlbmVyYXRlcyBhIHNldCBvZiBDIHN0cnVjdHVyZSBkZWZpbml0aW9ucyBpbgotICA6ZmlsZTpgSW5jbHVkZS9QeXRob24tYXN0LmhgLiAgVGhlIDpjZnVuYzpgUHlQYXJzZXJfQVNURnJvbVN0cmluZ2AgYW5kCi0gIDpjZnVuYzpgUHlQYXJzZXJfQVNURnJvbUZpbGVgLCBkZWZpbmVkIGluIDpmaWxlOmBJbmNsdWRlL3B5dGhvbnJ1bi5oYCwgdGFrZQorICA6ZmlsZTpgSW5jbHVkZS9QeXRob24tYXN0LmhgLiAgVGhlIDpjOmZ1bmM6YFB5UGFyc2VyX0FTVEZyb21TdHJpbmdgIGFuZAorICA6YzpmdW5jOmBQeVBhcnNlcl9BU1RGcm9tRmlsZWAsIGRlZmluZWQgaW4gOmZpbGU6YEluY2x1ZGUvcHl0aG9ucnVuLmhgLCB0YWtlCiAgIFB5dGhvbiBzb3VyY2UgYXMgaW5wdXQgYW5kIHJldHVybiB0aGUgcm9vdCBvZiBhbiBBU1QgcmVwcmVzZW50aW5nIHRoZSBjb250ZW50cy4KLSAgVGhpcyBBU1QgY2FuIHRoZW4gYmUgdHVybmVkIGludG8gYSBjb2RlIG9iamVjdCBieSA6Y2Z1bmM6YFB5QVNUX0NvbXBpbGVgLiAgRm9yCisgIFRoaXMgQVNUIGNhbiB0aGVuIGJlIHR1cm5lZCBpbnRvIGEgY29kZSBvYmplY3QgYnkgOmM6ZnVuYzpgUHlBU1RfQ29tcGlsZWAuICBGb3IKICAgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB0aGUgc291cmNlIGNvZGUsIGFuZCB0aGVuIGFzayBxdWVzdGlvbnMgb24gcHl0aG9uLWRldi4KIAogICBUaGUgQVNUIGNvZGUgd2FzIGRldmVsb3BlZCB1bmRlciBKZXJlbXkgSHlsdG9uJ3MgbWFuYWdlbWVudCwgYW5kIGltcGxlbWVudGVkIGJ5CkBAIC0yMTM4LDU1ICsyMTM4LDU1IEBACiAKICAgTm90ZSB0aGF0IHRoaXMgY2hhbmdlIG1lYW5zIGV4dGVuc2lvbiBtb2R1bGVzIG11c3QgYmUgbW9yZSBjYXJlZnVsIHdoZW4KICAgYWxsb2NhdGluZyBtZW1vcnkuICBQeXRob24ncyBBUEkgaGFzIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyBmb3IgYWxsb2NhdGluZwotICBtZW1vcnkgdGhhdCBhcmUgZ3JvdXBlZCBpbnRvIGZhbWlsaWVzLiAgRm9yIGV4YW1wbGUsIDpjZnVuYzpgUHlNZW1fTWFsbG9jYCwKLSAgOmNmdW5jOmBQeU1lbV9SZWFsbG9jYCwgYW5kIDpjZnVuYzpgUHlNZW1fRnJlZWAgYXJlIG9uZSBmYW1pbHkgdGhhdCBhbGxvY2F0ZXMKLSAgcmF3IG1lbW9yeSwgd2hpbGUgOmNmdW5jOmBQeU9iamVjdF9NYWxsb2NgLCA6Y2Z1bmM6YFB5T2JqZWN0X1JlYWxsb2NgLCBhbmQKLSAgOmNmdW5jOmBQeU9iamVjdF9GcmVlYCBhcmUgYW5vdGhlciBmYW1pbHkgdGhhdCdzIHN1cHBvc2VkIHRvIGJlIHVzZWQgZm9yCisgIG1lbW9yeSB0aGF0IGFyZSBncm91cGVkIGludG8gZmFtaWxpZXMuICBGb3IgZXhhbXBsZSwgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwKKyAgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AsIGFuZCA6YzpmdW5jOmBQeU1lbV9GcmVlYCBhcmUgb25lIGZhbWlseSB0aGF0IGFsbG9jYXRlcworICByYXcgbWVtb3J5LCB3aGlsZSA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLCA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCwgYW5kCisgIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgIGFyZSBhbm90aGVyIGZhbWlseSB0aGF0J3Mgc3VwcG9zZWQgdG8gYmUgdXNlZCBmb3IKICAgY3JlYXRpbmcgUHl0aG9uIG9iamVjdHMuCiAKICAgUHJldmlvdXNseSB0aGVzZSBkaWZmZXJlbnQgZmFtaWxpZXMgYWxsIHJlZHVjZWQgdG8gdGhlIHBsYXRmb3JtJ3MKLSAgOmNmdW5jOmBtYWxsb2NgIGFuZCA6Y2Z1bmM6YGZyZWVgIGZ1bmN0aW9ucy4gIFRoaXMgbWVhbnQgIGl0IGRpZG4ndCBtYXR0ZXIgaWYKLSAgeW91IGdvdCB0aGluZ3Mgd3JvbmcgYW5kIGFsbG9jYXRlZCBtZW1vcnkgd2l0aCB0aGUgOmNmdW5jOmBQeU1lbWAgZnVuY3Rpb24gYnV0Ci0gIGZyZWVkIGl0IHdpdGggdGhlIDpjZnVuYzpgUHlPYmplY3RgIGZ1bmN0aW9uLiAgV2l0aCAyLjUncyBjaGFuZ2VzIHRvIG9ibWFsbG9jLAorICA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBmdW5jdGlvbnMuICBUaGlzIG1lYW50ICBpdCBkaWRuJ3QgbWF0dGVyIGlmCisgIHlvdSBnb3QgdGhpbmdzIHdyb25nIGFuZCBhbGxvY2F0ZWQgbWVtb3J5IHdpdGggdGhlIDpjOmZ1bmM6YFB5TWVtYCBmdW5jdGlvbiBidXQKKyAgZnJlZWQgaXQgd2l0aCB0aGUgOmM6ZnVuYzpgUHlPYmplY3RgIGZ1bmN0aW9uLiAgV2l0aCAyLjUncyBjaGFuZ2VzIHRvIG9ibWFsbG9jLAogICB0aGVzZSBmYW1pbGllcyBub3cgZG8gZGlmZmVyZW50IHRoaW5ncyBhbmQgbWlzbWF0Y2hlcyB3aWxsIHByb2JhYmx5IHJlc3VsdCBpbiBhCiAgIHNlZ2ZhdWx0LiAgWW91IHNob3VsZCBjYXJlZnVsbHkgdGVzdCB5b3VyIEMgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBQeXRob24gMi41LgogCi0qIFRoZSBidWlsdC1pbiBzZXQgdHlwZXMgbm93IGhhdmUgYW4gb2ZmaWNpYWwgQyBBUEkuICBDYWxsIDpjZnVuYzpgUHlTZXRfTmV3YAotICBhbmQgOmNmdW5jOmBQeUZyb3plblNldF9OZXdgIHRvIGNyZWF0ZSBhIG5ldyBzZXQsIDpjZnVuYzpgUHlTZXRfQWRkYCBhbmQKLSAgOmNmdW5jOmBQeVNldF9EaXNjYXJkYCB0byBhZGQgYW5kIHJlbW92ZSBlbGVtZW50cywgYW5kIDpjZnVuYzpgUHlTZXRfQ29udGFpbnNgCi0gIGFuZCA6Y2Z1bmM6YFB5U2V0X1NpemVgIHRvIGV4YW1pbmUgdGhlIHNldCdzIHN0YXRlLiAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZAorKiBUaGUgYnVpbHQtaW4gc2V0IHR5cGVzIG5vdyBoYXZlIGFuIG9mZmljaWFsIEMgQVBJLiAgQ2FsbCA6YzpmdW5jOmBQeVNldF9OZXdgCisgIGFuZCA6YzpmdW5jOmBQeUZyb3plblNldF9OZXdgIHRvIGNyZWF0ZSBhIG5ldyBzZXQsIDpjOmZ1bmM6YFB5U2V0X0FkZGAgYW5kCisgIDpjOmZ1bmM6YFB5U2V0X0Rpc2NhcmRgIHRvIGFkZCBhbmQgcmVtb3ZlIGVsZW1lbnRzLCBhbmQgOmM6ZnVuYzpgUHlTZXRfQ29udGFpbnNgCisgIGFuZCA6YzpmdW5jOmBQeVNldF9TaXplYCB0byBleGFtaW5lIHRoZSBzZXQncyBzdGF0ZS4gKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQKICAgSGV0dGluZ2VyLikKIAogKiBDIGNvZGUgY2FuIG5vdyBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4YWN0IHJldmlzaW9uIG9mIHRoZSBQeXRob24KLSAgaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUgIDpjZnVuYzpgUHlfR2V0QnVpbGRJbmZvYCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYQorICBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZSAgOmM6ZnVuYzpgUHlfR2V0QnVpbGRJbmZvYCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYQogICBzdHJpbmcgb2YgYnVpbGQgaW5mb3JtYXRpb24gbGlrZSB0aGlzOiBgYCJ0cnVuazo0NTM1NTo0NTM1Nk0sIEFwciAxMyAyMDA2LAogICAwNzo0MjoxOSJgYC4gICAoQ29udHJpYnV0ZWQgYnkgQmFycnkgV2Fyc2F3LikKIAogKiBUd28gbmV3IG1hY3JvcyBjYW4gYmUgdXNlZCB0byBpbmRpY2F0ZSBDIGZ1bmN0aW9ucyB0aGF0IGFyZSBsb2NhbCB0byB0aGUKICAgY3VycmVudCBmaWxlIHNvIHRoYXQgYSBmYXN0ZXIgY2FsbGluZyBjb252ZW50aW9uIGNhbiBiZSB1c2VkLgotICA6Y2Z1bmM6YFB5X0xPQ0FMKHR5cGUpYCBkZWNsYXJlcyB0aGUgZnVuY3Rpb24gYXMgcmV0dXJuaW5nIGEgdmFsdWUgb2YgdGhlCisgIDpjOmZ1bmM6YFB5X0xPQ0FMKHR5cGUpYCBkZWNsYXJlcyB0aGUgZnVuY3Rpb24gYXMgcmV0dXJuaW5nIGEgdmFsdWUgb2YgdGhlCiAgIHNwZWNpZmllZCAqdHlwZSogYW5kIHVzZXMgYSBmYXN0LWNhbGxpbmcgcXVhbGlmaWVyLgotICA6Y2Z1bmM6YFB5X0xPQ0FMX0lOTElORSh0eXBlKWAgZG9lcyB0aGUgc2FtZSB0aGluZyBhbmQgYWxzbyByZXF1ZXN0cyB0aGUKLSAgZnVuY3Rpb24gYmUgaW5saW5lZC4gIElmIDpjZnVuYzpgUFlfTE9DQUxfQUdHUkVTU0lWRWAgaXMgZGVmaW5lZCBiZWZvcmUKKyAgOmM6ZnVuYzpgUHlfTE9DQUxfSU5MSU5FKHR5cGUpYCBkb2VzIHRoZSBzYW1lIHRoaW5nIGFuZCBhbHNvIHJlcXVlc3RzIHRoZQorICBmdW5jdGlvbiBiZSBpbmxpbmVkLiAgSWYgOmM6ZnVuYzpgUFlfTE9DQUxfQUdHUkVTU0lWRWAgaXMgZGVmaW5lZCBiZWZvcmUKICAgOmZpbGU6YHB5dGhvbi5oYCBpcyBpbmNsdWRlZCwgYSBzZXQgb2YgbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbnMgYXJlIGVuYWJsZWQKICAgZm9yIHRoZSBtb2R1bGU7IHlvdSBzaG91bGQgYmVuY2htYXJrIHRoZSByZXN1bHRzIHRvIGZpbmQgb3V0IGlmIHRoZXNlCiAgIG9wdGltaXphdGlvbnMgYWN0dWFsbHkgbWFrZSB0aGUgY29kZSBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgRnJlZHJpayBMdW5kaCBhdAogICB0aGUgTmVlZEZvclNwZWVkIHNwcmludC4pCiAKLSogOmNmdW5jOmBQeUVycl9OZXdFeGNlcHRpb24obmFtZSwgYmFzZSwgZGljdClgIGNhbiBub3cgYWNjZXB0IGEgdHVwbGUgb2YgYmFzZQorKiA6YzpmdW5jOmBQeUVycl9OZXdFeGNlcHRpb24obmFtZSwgYmFzZSwgZGljdClgIGNhbiBub3cgYWNjZXB0IGEgdHVwbGUgb2YgYmFzZQogICBjbGFzc2VzIGFzIGl0cyAqYmFzZSogYXJndW1lbnQuICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsLikKIAotKiBUaGUgOmNmdW5jOmBQeUVycl9XYXJuYCBmdW5jdGlvbiBmb3IgaXNzdWluZyB3YXJuaW5ncyBpcyBub3cgZGVwcmVjYXRlZCBpbgotICBmYXZvdXIgb2YgOmNmdW5jOmBQeUVycl9XYXJuRXgoY2F0ZWdvcnksIG1lc3NhZ2UsIHN0YWNrbGV2ZWwpYCB3aGljaCBsZXRzIHlvdQorKiBUaGUgOmM6ZnVuYzpgUHlFcnJfV2FybmAgZnVuY3Rpb24gZm9yIGlzc3Vpbmcgd2FybmluZ3MgaXMgbm93IGRlcHJlY2F0ZWQgaW4KKyAgZmF2b3VyIG9mIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeChjYXRlZ29yeSwgbWVzc2FnZSwgc3RhY2tsZXZlbClgIHdoaWNoIGxldHMgeW91CiAgIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgc2VwYXJhdGluZyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY2FsbGVyLiAgQQotICAqc3RhY2tsZXZlbCogb2YgMSBpcyB0aGUgZnVuY3Rpb24gY2FsbGluZyA6Y2Z1bmM6YFB5RXJyX1dhcm5FeGAsIDIgaXMgdGhlCisgICpzdGFja2xldmVsKiBvZiAxIGlzIHRoZSBmdW5jdGlvbiBjYWxsaW5nIDpjOmZ1bmM6YFB5RXJyX1dhcm5FeGAsIDIgaXMgdGhlCiAgIGZ1bmN0aW9uIGFib3ZlIHRoYXQsIGFuZCBzbyBmb3J0aC4gIChBZGRlZCBieSBOZWFsIE5vcndpdHouKQogCiAqIFRoZSBDUHl0aG9uIGludGVycHJldGVyIGlzIHN0aWxsIHdyaXR0ZW4gaW4gQywgYnV0ICB0aGUgY29kZSBjYW4gbm93IGJlCiAgIGNvbXBpbGVkIHdpdGggYSBDKysgY29tcGlsZXIgd2l0aG91dCBlcnJvcnMuICAgKEltcGxlbWVudGVkIGJ5IEFudGhvbnkgQmF4dGVyLAogICBNYXJ0aW4gdm9uIEzDtndpcywgU2tpcCBNb250YW5hcm8uKQogCi0qIFRoZSA6Y2Z1bmM6YFB5UmFuZ2VfTmV3YCBmdW5jdGlvbiB3YXMgcmVtb3ZlZC4gIEl0IHdhcyBuZXZlciBkb2N1bWVudGVkLCBuZXZlcgorKiBUaGUgOmM6ZnVuYzpgUHlSYW5nZV9OZXdgIGZ1bmN0aW9uIHdhcyByZW1vdmVkLiAgSXQgd2FzIG5ldmVyIGRvY3VtZW50ZWQsIG5ldmVyCiAgIHVzZWQgaW4gdGhlIGNvcmUgY29kZSwgYW5kIGhhZCBkYW5nZXJvdXNseSBsYXggZXJyb3IgY2hlY2tpbmcuICBJbiB0aGUgdW5saWtlbHkKICAgY2FzZSB0aGF0IHlvdXIgZXh0ZW5zaW9ucyB3ZXJlIHVzaW5nIGl0LCB5b3UgY2FuIHJlcGxhY2UgaXQgYnkgc29tZXRoaW5nIGxpa2UKICAgdGhlIGZvbGxvd2luZzo6CkBAIC0yMjAzLDcgKzIyMDMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICogTWFjT1MgWCAoMTAuMyBhbmQgaGlnaGVyKTogZHluYW1pYyBsb2FkaW5nIG9mIG1vZHVsZXMgbm93IHVzZXMgdGhlCi0gIDpjZnVuYzpgZGxvcGVuYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIE1hY09TLXNwZWNpZmljIGZ1bmN0aW9ucy4KKyAgOmM6ZnVuYzpgZGxvcGVuYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIE1hY09TLXNwZWNpZmljIGZ1bmN0aW9ucy4KIAogKiBNYWNPUyBYOiBhbiA6b3B0aW9uOmAtLWVuYWJsZS11bml2ZXJzYWxzZGtgIHN3aXRjaCB3YXMgYWRkZWQgdG8gdGhlCiAgIDpwcm9ncmFtOmBjb25maWd1cmVgIHNjcmlwdCB0aGF0IGNvbXBpbGVzIHRoZSBpbnRlcnByZXRlciBhcyBhIHVuaXZlcnNhbCBiaW5hcnkKQEAgLTIyNTksMTUgKzIyNTksMTUgQEAKICAgU2V0dGluZyAgOmF0dHI6YHJwY19wYXRoc2AgdG8gYGBOb25lYGAgb3IgYW4gZW1wdHkgdHVwbGUgZGlzYWJsZXMgIHRoaXMgcGF0aAogICBjaGVja2luZy4KIAotKiBDIEFQSTogTWFueSBmdW5jdGlvbnMgbm93IHVzZSA6Y3R5cGU6YFB5X3NzaXplX3RgICBpbnN0ZWFkIG9mIDpjdHlwZTpgaW50YCB0bworKiBDIEFQSTogTWFueSBmdW5jdGlvbnMgbm93IHVzZSA6Yzp0eXBlOmBQeV9zc2l6ZV90YCAgaW5zdGVhZCBvZiA6Yzp0eXBlOmBpbnRgIHRvCiAgIGFsbG93IHByb2Nlc3NpbmcgbW9yZSBkYXRhIG9uIDY0LWJpdCBtYWNoaW5lcy4gIEV4dGVuc2lvbiBjb2RlIG1heSBuZWVkIHRvIG1ha2UKICAgdGhlIHNhbWUgY2hhbmdlIHRvIGF2b2lkIHdhcm5pbmdzIGFuZCB0byBzdXBwb3J0IDY0LWJpdCBtYWNoaW5lcy4gIFNlZSB0aGUKICAgZWFybGllciBzZWN0aW9uIDpyZWY6YHBlcC0zNTNgIGZvciBhIGRpc2N1c3Npb24gb2YgdGhpcyBjaGFuZ2UuCiAKICogQyBBUEk6ICBUaGUgb2JtYWxsb2MgY2hhbmdlcyBtZWFuIHRoYXQgIHlvdSBtdXN0IGJlIGNhcmVmdWwgdG8gbm90IG1peCB1c2FnZQotICBvZiB0aGUgOmNmdW5jOmBQeU1lbV9cKmAgYW5kIDpjZnVuYzpgUHlPYmplY3RfXCpgIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucy4gTWVtb3J5Ci0gIGFsbG9jYXRlZCB3aXRoICBvbmUgZmFtaWx5J3MgOmNmdW5jOmBcKl9NYWxsb2NgIG11c3QgYmUgIGZyZWVkIHdpdGggdGhlCi0gIGNvcnJlc3BvbmRpbmcgZmFtaWx5J3MgOmNmdW5jOmBcKl9GcmVlYCBmdW5jdGlvbi4KKyAgb2YgdGhlIDpjOmZ1bmM6YFB5TWVtX1wqYCBhbmQgOmM6ZnVuYzpgUHlPYmplY3RfXCpgIGZhbWlsaWVzIG9mIGZ1bmN0aW9ucy4gTWVtb3J5CisgIGFsbG9jYXRlZCB3aXRoICBvbmUgZmFtaWx5J3MgOmM6ZnVuYzpgXCpfTWFsbG9jYCBtdXN0IGJlICBmcmVlZCB3aXRoIHRoZQorICBjb3JyZXNwb25kaW5nIGZhbWlseSdzIDpjOmZ1bmM6YFwqX0ZyZWVgIGZ1bmN0aW9uLgogCiAuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjYucnN0IGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKaW5kZXggMWFmNzhjMi4uYmUyYzZmZiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKQEAgLTEyMyw3ICsxMjMsNyBAQAogd2l0aCB0aGlzIHN3aXRjaCB0byBzZWUgaG93IG11Y2ggd29yayB3aWxsIGJlIG5lY2Vzc2FyeSB0byBwb3J0CiBjb2RlIHRvIDMuMC4gIFRoZSB2YWx1ZSBvZiB0aGlzIHN3aXRjaCBpcyBhdmFpbGFibGUKIHRvIFB5dGhvbiBjb2RlIGFzIHRoZSBib29sZWFuIHZhcmlhYmxlIDpkYXRhOmBzeXMucHkza3dhcm5pbmdgLAotYW5kIHRvIEMgZXh0ZW5zaW9uIGNvZGUgYXMgOmNkYXRhOmBQeV9QeTNrV2FybmluZ0ZsYWdgLgorYW5kIHRvIEMgZXh0ZW5zaW9uIGNvZGUgYXMgOmM6ZGF0YTpgUHlfUHkza1dhcm5pbmdGbGFnYC4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTk3OSwxMCArOTc5LDEwIEBACiAgICAgcHJpbnQgbGVuKHMpICAgICAgICAgICAgICAgIyAxMiBVbmljb2RlIGNoYXJhY3RlcnMKIAogQXQgdGhlIEMgbGV2ZWwsIFB5dGhvbiAzLjAgd2lsbCByZW5hbWUgdGhlIGV4aXN0aW5nIDgtYml0Ci1zdHJpbmcgdHlwZSwgY2FsbGVkIDpjdHlwZTpgUHlTdHJpbmdPYmplY3RgIGluIFB5dGhvbiAyLngsCi10byA6Y3R5cGU6YFB5Qnl0ZXNPYmplY3RgLiAgUHl0aG9uIDIuNiB1c2VzIGBgI2RlZmluZWBgCi10byBzdXBwb3J0IHVzaW5nIHRoZSBuYW1lcyA6Y2Z1bmM6YFB5Qnl0ZXNPYmplY3RgLAotOmNmdW5jOmBQeUJ5dGVzX0NoZWNrYCwgOmNmdW5jOmBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplYCwKK3N0cmluZyB0eXBlLCBjYWxsZWQgOmM6dHlwZTpgUHlTdHJpbmdPYmplY3RgIGluIFB5dGhvbiAyLngsCit0byA6Yzp0eXBlOmBQeUJ5dGVzT2JqZWN0YC4gIFB5dGhvbiAyLjYgdXNlcyBgYCNkZWZpbmVgYAordG8gc3VwcG9ydCB1c2luZyB0aGUgbmFtZXMgOmM6ZnVuYzpgUHlCeXRlc09iamVjdGAsCis6YzpmdW5jOmBQeUJ5dGVzX0NoZWNrYCwgOmM6ZnVuYzpgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZWAsCiBhbmQgYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMgYW5kIG1hY3JvcyB1c2VkIHdpdGggc3RyaW5ncy4KIAogSW5zdGFuY2VzIG9mIHRoZSA6Y2xhc3M6YGJ5dGVzYCB0eXBlIGFyZSBpbW11dGFibGUganVzdApAQCAtMTAxNCw4ICsxMDE0LDggQEAKICAgICBieXRlYXJyYXkoYidBQkNkZScpCiAKIFRoZXJlJ3MgYWxzbyBhIGNvcnJlc3BvbmRpbmcgQyBBUEksIHdpdGgKLTpjZnVuYzpgUHlCeXRlQXJyYXlfRnJvbU9iamVjdGAsCi06Y2Z1bmM6YFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplYCwKKzpjOmZ1bmM6YFB5Qnl0ZUFycmF5X0Zyb21PYmplY3RgLAorOmM6ZnVuYzpgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemVgLAogYW5kIHZhcmlvdXMgb3RoZXIgZnVuY3Rpb25zLgogCiAuLiBzZWVhbHNvOjoKQEAgLTExMzQsNyArMTEzNCw3IEBACiAKIC4uIFhYWCBQeU9iamVjdF9HZXRCdWZmZXIgbm90IGRvY3VtZW50ZWQgaW4gYy1hcGkKIAotVGhlICpmbGFncyogYXJndW1lbnQgdG8gOmNmdW5jOmBQeU9iamVjdF9HZXRCdWZmZXJgIHNwZWNpZmllcworVGhlICpmbGFncyogYXJndW1lbnQgdG8gOmM6ZnVuYzpgUHlPYmplY3RfR2V0QnVmZmVyYCBzcGVjaWZpZXMKIGNvbnN0cmFpbnRzIHVwb24gdGhlIG1lbW9yeSByZXR1cm5lZC4gIFNvbWUgZXhhbXBsZXMgYXJlOgogCiAgKiA6Y29uc3Q6YFB5QlVGX1dSSVRBQkxFYCBpbmRpY2F0ZXMgdGhhdCB0aGUgbWVtb3J5IG11c3QgYmUgd3JpdGFibGUuCkBAIC0xMTQ1LDcgKzExNDUsNyBAQAogICAgcmVxdWVzdHMgYSBDLWNvbnRpZ3VvdXMgKGxhc3QgZGltZW5zaW9uIHZhcmllcyB0aGUgZmFzdGVzdCkgb3IKICAgIEZvcnRyYW4tY29udGlndW91cyAoZmlyc3QgZGltZW5zaW9uIHZhcmllcyB0aGUgZmFzdGVzdCkgYXJyYXkgbGF5b3V0LgogCi1Ud28gbmV3IGFyZ3VtZW50IGNvZGVzIGZvciA6Y2Z1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLAorVHdvIG5ldyBhcmd1bWVudCBjb2RlcyBmb3IgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAsCiBgYHMqYGAgYW5kIGBgeipgYCwgcmV0dXJuIGxvY2tlZCBidWZmZXIgb2JqZWN0cyBmb3IgYSBwYXJhbWV0ZXIuCiAKIC4uIHNlZWFsc286OgpAQCAtMTQ4NSw2ICsxNDg1LDEzIEBACiAKIFNvbWUgc21hbGxlciBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvcmUgUHl0aG9uIGxhbmd1YWdlIGFyZToKIAorKiBEaXJlY3RvcmllcyBhbmQgemlwIGFyY2hpdmVzIGNvbnRhaW5pbmcgYSA6ZmlsZTpgX19tYWluX18ucHlgIGZpbGUKKyAgY2FuIG5vdyBiZSBleGVjdXRlZCBkaXJlY3RseSBieSBwYXNzaW5nIHRoZWlyIG5hbWUgdG8gdGhlCisgIGludGVycHJldGVyLiBUaGUgZGlyZWN0b3J5IG9yIHppcCBhcmNoaXZlIGlzIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKKyAgYXMgdGhlIGZpcnN0IGVudHJ5IGluIHN5cy5wYXRoLiAgKFN1Z2dlc3Rpb24gYW5kIGluaXRpYWwgcGF0Y2ggYnkKKyAgQW5keSBDaHUsIHN1YnNlcXVlbnRseSByZXZpc2VkIGJ5IFBoaWxsaXAgSi4gRWJ5IGFuZCBOaWNrIENvZ2hsYW47CisgIDppc3N1ZTpgMTczOTQ2OGAuKQorCiAqIFRoZSA6ZnVuYzpgaGFzYXR0cmAgZnVuY3Rpb24gd2FzIGNhdGNoaW5nIGFuZCBpZ25vcmluZyBhbGwgZXJyb3JzLAogICB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZXkgbWVhbnQgYSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZAogICB3YXMgZmFpbGluZyBzb21laG93IGFuZCB0aGUgcmV0dXJuIHZhbHVlIG9mIDpmdW5jOmBoYXNhdHRyYCB3b3VsZApAQCAtMTYzMiw3ICsxNjM5LDcgQEAKICAgOm1ldGg6YF9faGFzaF9fYCBtZXRob2QgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgY2xhc3MsIHNvCiAgIGFzc2lnbmluZyBgYE5vbmVgYCB3YXMgaW1wbGVtZW50ZWQgYXMgYW4gb3ZlcnJpZGUuICBBdCB0aGUKICAgQyBsZXZlbCwgZXh0ZW5zaW9ucyBjYW4gc2V0IGBgdHBfaGFzaGBgIHRvCi0gIDpjZnVuYzpgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkYC4KKyAgOmM6ZnVuYzpgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkYC4KICAgKEZpeGVkIGJ5IE5pY2sgQ29naGxhbiBhbmQgQW1hdXJ5IEZvcmdlb3QgZCdBcmM7IDppc3N1ZTpgMjIzNWAuKQogCiAqIFRoZSA6ZXhjOmBHZW5lcmF0b3JFeGl0YCBleGNlcHRpb24gbm93IHN1YmNsYXNzZXMKQEAgLTE3MDIsNyArMTcwOSw3IEBACiAgIEJ5IGRlZmF1bHQsIHRoaXMgY2hhbmdlIGlzIG9ubHkgYXBwbGllZCB0byB0eXBlcyB0aGF0IGFyZSBpbmNsdWRlZCB3aXRoCiAgIHRoZSBQeXRob24gY29yZS4gIEV4dGVuc2lvbiBtb2R1bGVzIG1heSBub3QgbmVjZXNzYXJpbHkgYmUgY29tcGF0aWJsZSB3aXRoCiAgIHRoaXMgY2FjaGUsCi0gIHNvIHRoZXkgbXVzdCBleHBsaWNpdGx5IGFkZCA6Y21hY3JvOmBQeV9UUEZMQUdTX0hBVkVfVkVSU0lPTl9UQUdgCisgIHNvIHRoZXkgbXVzdCBleHBsaWNpdGx5IGFkZCA6YzptYWNybzpgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHYAogICB0byB0aGUgbW9kdWxlJ3MgYGB0cF9mbGFnc2BgIGZpZWxkIHRvIGVuYWJsZSB0aGUgbWV0aG9kIGNhY2hlLgogICAoVG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBtZXRob2QgY2FjaGUsIHRoZSBleHRlbnNpb24gbW9kdWxlJ3MgY29kZQogICBtdXN0IG5vdCBkaXJlY3RseSBhY2Nlc3MgYW5kIG1vZGlmeSB0aGUgYGB0cF9kaWN0YGAgbWVtYmVyIG9mCkBAIC0xNzg1LDcgKzE3OTIsNyBAQAogICB3ZXJlIGFwcGxpZWQuICAoTWFpbnRhaW5lZCBieSBKb3NpYWggQ2FybHNvbjsgc2VlIDppc3N1ZTpgMTczNjE5MGAgZm9yCiAgIG9uZSBwYXRjaC4pCiAKLSogVGhlIDptb2Q6YGJzZGRiYCBtb2R1bGUgYWxzbyBoYXMgYSBuZXcgbWFpbnRhaW5lciwgSmVzw7pzIENlYSwgYW5kIHRoZSBwYWNrYWdlCisqIFRoZSA6bW9kOmBic2RkYmAgbW9kdWxlIGFsc28gaGFzIGEgbmV3IG1haW50YWluZXIsIEplc8O6cyBDZWEgQXZpb24sIGFuZCB0aGUgcGFja2FnZQogICBpcyBub3cgYXZhaWxhYmxlIGFzIGEgc3RhbmRhbG9uZSBwYWNrYWdlLiAgVGhlIHdlYiBwYWdlIGZvciB0aGUgcGFja2FnZSBpcwogICBgd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtCiAgIDxodHRwOi8vd3d3LmpjZWEuZXMvcHJvZ3JhbWFjaW9uL3B5YnNkZGIuaHRtPmBfXy4KQEAgLTIyODEsNyArMjI4OCw3IEBACiAgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmAxODYxYC4pCiAKICogVGhlIDptb2Q6YHNlbGVjdGAgbW9kdWxlIG5vdyBoYXMgd3JhcHBlciBmdW5jdGlvbnMKLSAgZm9yIHRoZSBMaW51eCA6Y2Z1bmM6YGVwb2xsYCBhbmQgQlNEIDpjZnVuYzpga3F1ZXVlYCBzeXN0ZW0gY2FsbHMuCisgIGZvciB0aGUgTGludXggOmM6ZnVuYzpgZXBvbGxgIGFuZCBCU0QgOmM6ZnVuYzpga3F1ZXVlYCBzeXN0ZW0gY2FsbHMuCiAgIDptZXRoOmBtb2RpZnlgIG1ldGhvZCB3YXMgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIDpjbGFzczpgcG9sbGAKICAgb2JqZWN0czsgYGBwb2xsb2JqLm1vZGlmeShmZCwgZXZlbnRtYXNrKWBgIHRha2VzIGEgZmlsZSBkZXNjcmlwdG9yCiAgIG9yIGZpbGUgb2JqZWN0IGFuZCBhbiBldmVudCBtYXNrLCBtb2RpZnlpbmcgdGhlIHJlY29yZGVkIGV2ZW50IG1hc2sKQEAgLTIzMTQsMTMgKzIzMjEsMTMgQEAKICAgQ2FsbGluZyBgYHNpZ25hbC5zZXRfd2FrZXVwX2ZkKGZkKWBgIHNldHMgYSBmaWxlIGRlc2NyaXB0b3IKICAgdG8gYmUgdXNlZDsgd2hlbiBhIHNpZ25hbCBpcyByZWNlaXZlZCwgYSBieXRlIGlzIHdyaXR0ZW4gdG8gdGhhdAogICBmaWxlIGRlc2NyaXB0b3IuICBUaGVyZSdzIGFsc28gYSBDLWxldmVsIGZ1bmN0aW9uLAotICA6Y2Z1bmM6YFB5U2lnbmFsX1NldFdha2V1cEZkYCwgZm9yIHNldHRpbmcgdGhlIGRlc2NyaXB0b3IuCisgIDpjOmZ1bmM6YFB5U2lnbmFsX1NldFdha2V1cEZkYCwgZm9yIHNldHRpbmcgdGhlIGRlc2NyaXB0b3IuCiAKICAgRXZlbnQgbG9vcHMgd2lsbCB1c2UgdGhpcyBieSBvcGVuaW5nIGEgcGlwZSB0byBjcmVhdGUgdHdvIGRlc2NyaXB0b3JzLAogICBvbmUgZm9yIHJlYWRpbmcgYW5kIG9uZSBmb3Igd3JpdGluZy4gIFRoZSB3cml0YWJsZSBkZXNjcmlwdG9yCiAgIHdpbGwgYmUgcGFzc2VkIHRvIDpmdW5jOmBzZXRfd2FrZXVwX2ZkYCwgYW5kIHRoZSByZWFkYWJsZSBkZXNjcmlwdG9yCiAgIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgZGVzY3JpcHRvcnMgbW9uaXRvcmVkIGJ5IHRoZSBldmVudCBsb29wIHZpYQotICA6Y2Z1bmM6YHNlbGVjdGAgb3IgOmNmdW5jOmBwb2xsYC4KKyAgOmM6ZnVuYzpgc2VsZWN0YCBvciA6YzpmdW5jOmBwb2xsYC4KICAgT24gcmVjZWl2aW5nIGEgc2lnbmFsLCBhIGJ5dGUgd2lsbCBiZSB3cml0dGVuIGFuZCB0aGUgbWFpbiBldmVudCBsb29wCiAgIHdpbGwgYmUgd29rZW4gdXAsIGF2b2lkaW5nIHRoZSBuZWVkIHRvIHBvbGwuCiAKQEAgLTIzODEsNyArMjM4OCw3IEBACiAgIGhhcyBiZWVuIHVwZGF0ZWQgZnJvbSB2ZXJzaW9uIDIuMy4yIGluIFB5dGhvbiAyLjUgdG8KICAgdmVyc2lvbiAyLjQuMS4KIAotKiBUaGUgOm1vZDpgc3RydWN0YCBtb2R1bGUgbm93IHN1cHBvcnRzIHRoZSBDOTkgOmN0eXBlOmBfQm9vbGAgdHlwZSwKKyogVGhlIDptb2Q6YHN0cnVjdGAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgQzk5IDpjOnR5cGU6YF9Cb29sYCB0eXBlLAogICB1c2luZyB0aGUgZm9ybWF0IGNoYXJhY3RlciBgYCc/J2BgLgogICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgUmVtYWhsLikKIApAQCAtMjM4OSw3ICsyMzk2LDcgQEAKICAgbm93IGhhdmUgOm1ldGg6YHRlcm1pbmF0ZWAsIDptZXRoOmBraWxsYCwgYW5kIDptZXRoOmBzZW5kX3NpZ25hbGAgbWV0aG9kcy4KICAgT24gV2luZG93cywgOm1ldGg6YHNlbmRfc2lnbmFsYCBvbmx5IHN1cHBvcnRzIHRoZSA6Y29uc3Q6YFNJR1RFUk1gCiAgIHNpZ25hbCwgYW5kIGFsbCB0aGVzZSBtZXRob2RzIGFyZSBhbGlhc2VzIGZvciB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uCi0gIDpjZnVuYzpgVGVybWluYXRlUHJvY2Vzc2AuCisgIDpjOmZ1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgLgogICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcy4pCiAKICogQSBuZXcgdmFyaWFibGUgaW4gdGhlIDptb2Q6YHN5c2AgbW9kdWxlLCA6YXR0cjpgZmxvYXRfaW5mb2AsIGlzIGFuCkBAIC0yOTc0LDcgKzI5ODEsNyBAQAogCiAqIFB5dGhvbiBub3cgbXVzdCBiZSBjb21waWxlZCB3aXRoIEM4OSBjb21waWxlcnMgKGFmdGVyIDE5CiAgIHllYXJzISkuICBUaGlzIG1lYW5zIHRoYXQgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBoYXMgZHJvcHBlZCBpdHMKLSAgb3duIGltcGxlbWVudGF0aW9ucyBvZiA6Y2Z1bmM6YG1lbW1vdmVgIGFuZCA6Y2Z1bmM6YHN0cmVycm9yYCwgd2hpY2gKKyAgb3duIGltcGxlbWVudGF0aW9ucyBvZiA6YzpmdW5jOmBtZW1tb3ZlYCBhbmQgOmM6ZnVuYzpgc3RyZXJyb3JgLCB3aGljaAogICBhcmUgaW4gdGhlIEM4OSBzdGFuZGFyZCBsaWJyYXJ5LgogCiAqIFB5dGhvbiAyLjYgY2FuIGJlIGJ1aWx0IHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwOCAodmVyc2lvbgpAQCAtMjk5Niw3ICszMDAzLDcgQEAKIAogKiBUaGUgbmV3IGJ1ZmZlciBpbnRlcmZhY2UsIHByZXZpb3VzbHkgZGVzY3JpYmVkIGluCiAgIGB0aGUgUEVQIDMxMTggc2VjdGlvbiA8I3BlcC0zMTE4LXJldmlzZWQtYnVmZmVyLXByb3RvY29sPmBfXywKLSAgYWRkcyA6Y2Z1bmM6YFB5T2JqZWN0X0dldEJ1ZmZlcmAgYW5kIDpjZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAsCisgIGFkZHMgOmM6ZnVuYzpgUHlPYmplY3RfR2V0QnVmZmVyYCBhbmQgOmM6ZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAsCiAgIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLgogCiAqIFB5dGhvbidzIHVzZSBvZiB0aGUgQyBzdGRpbyBsaWJyYXJ5IGlzIG5vdyB0aHJlYWQtc2FmZSwgb3IgYXQgbGVhc3QKQEAgLTMwMDQsMjcgKzMwMTEsMjcgQEAKICAgYnVnIG9jY3VycmVkIGlmIG9uZSB0aHJlYWQgY2xvc2VkIGEgZmlsZSBvYmplY3Qgd2hpbGUgYW5vdGhlciB0aHJlYWQKICAgd2FzIHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIHRoZSBvYmplY3QuICBJbiAyLjYgZmlsZSBvYmplY3RzCiAgIGhhdmUgYSByZWZlcmVuY2UgY291bnQsIG1hbmlwdWxhdGVkIGJ5IHRoZQotICA6Y2Z1bmM6YFB5RmlsZV9JbmNVc2VDb3VudGAgYW5kIDpjZnVuYzpgUHlGaWxlX0RlY1VzZUNvdW50YAorICA6YzpmdW5jOmBQeUZpbGVfSW5jVXNlQ291bnRgIGFuZCA6YzpmdW5jOmBQeUZpbGVfRGVjVXNlQ291bnRgCiAgIGZ1bmN0aW9ucy4gIEZpbGUgb2JqZWN0cyBjYW4ndCBiZSBjbG9zZWQgdW5sZXNzIHRoZSByZWZlcmVuY2UgY291bnQKLSAgaXMgemVyby4gIDpjZnVuYzpgUHlGaWxlX0luY1VzZUNvdW50YCBzaG91bGQgYmUgY2FsbGVkIHdoaWxlIHRoZSBHSUwKKyAgaXMgemVyby4gIDpjOmZ1bmM6YFB5RmlsZV9JbmNVc2VDb3VudGAgc2hvdWxkIGJlIGNhbGxlZCB3aGlsZSB0aGUgR0lMCiAgIGlzIHN0aWxsIGhlbGQsIGJlZm9yZSBjYXJyeWluZyBvdXQgYW4gSS9PIG9wZXJhdGlvbiB1c2luZyB0aGUKLSAgYGBGSUxFICpgYCBwb2ludGVyLCBhbmQgOmNmdW5jOmBQeUZpbGVfRGVjVXNlQ291bnRgIHNob3VsZCBiZSBjYWxsZWQKKyAgYGBGSUxFICpgYCBwb2ludGVyLCBhbmQgOmM6ZnVuYzpgUHlGaWxlX0RlY1VzZUNvdW50YCBzaG91bGQgYmUgY2FsbGVkCiAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBHSUwgaXMgcmUtYWNxdWlyZWQuCiAgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBhbmQgR3JlZ29yeSBQLiBTbWl0aC4pCiAKICogSW1wb3J0aW5nIG1vZHVsZXMgc2ltdWx0YW5lb3VzbHkgaW4gdHdvIGRpZmZlcmVudCB0aHJlYWRzIG5vIGxvbmdlcgogICBkZWFkbG9ja3M7IGl0IHdpbGwgbm93IHJhaXNlIGFuIDpleGM6YEltcG9ydEVycm9yYC4gIEEgbmV3IEFQSQotICBmdW5jdGlvbiwgOmNmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrYCwgd2lsbCBsb29rIGZvciBhCisgIGZ1bmN0aW9uLCA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrYCwgd2lsbCBsb29rIGZvciBhCiAgIG1vZHVsZSBpbiBgYHN5cy5tb2R1bGVzYGAgZmlyc3QsIHRoZW4gdHJ5IHRvIGltcG9ydCBpdCBhZnRlcgogICBhY3F1aXJpbmcgYW4gaW1wb3J0IGxvY2suICBJZiB0aGUgaW1wb3J0IGxvY2sgaXMgaGVsZCBieSBhbm90aGVyCiAgIHRocmVhZCwgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KICAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMuKQogCiAqIFNldmVyYWwgZnVuY3Rpb25zIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhdGZvcm0ncwotICBmbG9hdGluZy1wb2ludCBzdXBwb3J0LiAgOmNmdW5jOmBQeUZsb2F0X0dldE1heGAgcmV0dXJucworICBmbG9hdGluZy1wb2ludCBzdXBwb3J0LiAgOmM6ZnVuYzpgUHlGbG9hdF9HZXRNYXhgIHJldHVybnMKICAgdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSBmbG9hdGluZyBwb2ludCB2YWx1ZSwKLSAgYW5kIDpjZnVuYzpgUHlGbG9hdF9HZXRNaW5gIHJldHVybnMgdGhlIG1pbmltdW0KLSAgcG9zaXRpdmUgdmFsdWUuICA6Y2Z1bmM6YFB5RmxvYXRfR2V0SW5mb2AgcmV0dXJucyBhbiBvYmplY3QKKyAgYW5kIDpjOmZ1bmM6YFB5RmxvYXRfR2V0TWluYCByZXR1cm5zIHRoZSBtaW5pbXVtCisgIHBvc2l0aXZlIHZhbHVlLiAgOmM6ZnVuYzpgUHlGbG9hdF9HZXRJbmZvYCByZXR1cm5zIGFuIG9iamVjdAogICBjb250YWluaW5nIG1vcmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgOmZpbGU6YGZsb2F0LmhgIGZpbGUsIHN1Y2ggYXMKICAgYGAibWFudF9kaWciYGAgKG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIG1hbnRpc3NhKSwgYGAiZXBzaWxvbiJgYAogICAoc21hbGxlc3QgZGlmZmVyZW5jZSBiZXR3ZWVuIDEuMCBhbmQgdGhlIG5leHQgbGFyZ2VzdCB2YWx1ZQpAQCAtMzAzMiw3ICszMDM5LDcgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXM7IDppc3N1ZTpgMTUzNGAuKQogCiAqIEMgZnVuY3Rpb25zIGFuZCBtZXRob2RzIHRoYXQgdXNlCi0gIDpjZnVuYzpgUHlDb21wbGV4X0FzQ0NvbXBsZXhgIHdpbGwgbm93IGFjY2VwdCBhcmd1bWVudHMgdGhhdAorICA6YzpmdW5jOmBQeUNvbXBsZXhfQXNDQ29tcGxleGAgd2lsbCBub3cgYWNjZXB0IGFyZ3VtZW50cyB0aGF0CiAgIGhhdmUgYSA6bWV0aDpgX19jb21wbGV4X19gIG1ldGhvZC4gIEluIHBhcnRpY3VsYXIsIHRoZSBmdW5jdGlvbnMgaW4gdGhlCiAgIDptb2Q6YGNtYXRoYCBtb2R1bGUgd2lsbCBub3cgYWNjZXB0IG9iamVjdHMgd2l0aCB0aGlzIG1ldGhvZC4KICAgVGhpcyBpcyBhIGJhY2twb3J0IG9mIGEgUHl0aG9uIDMuMCBjaGFuZ2UuCkBAIC0zMDQ2LDE1ICszMDUzLDE1IEBACiAqIE1hbnkgQyBleHRlbnNpb25zIGRlZmluZSB0aGVpciBvd24gbGl0dGxlIG1hY3JvIGZvciBhZGRpbmcKICAgaW50ZWdlcnMgYW5kIHN0cmluZ3MgdG8gdGhlIG1vZHVsZSdzIGRpY3Rpb25hcnkgaW4gdGhlCiAgIGBgaW5pdCpgYCBmdW5jdGlvbi4gIFB5dGhvbiAyLjYgZmluYWxseSBkZWZpbmVzIHN0YW5kYXJkIG1hY3JvcwotICBmb3IgYWRkaW5nIHZhbHVlcyB0byBhIG1vZHVsZSwgOmNtYWNybzpgUHlNb2R1bGVfQWRkU3RyaW5nTWFjcm9gCi0gIGFuZCA6Y21hY3JvOmBQeU1vZHVsZV9BZGRJbnRNYWNybygpYC4gIChDb250cmlidXRlZCBieQorICBmb3IgYWRkaW5nIHZhbHVlcyB0byBhIG1vZHVsZSwgOmM6bWFjcm86YFB5TW9kdWxlX0FkZFN0cmluZ01hY3JvYAorICBhbmQgOmM6bWFjcm86YFB5TW9kdWxlX0FkZEludE1hY3JvKClgLiAgKENvbnRyaWJ1dGVkIGJ5CiAgIENocmlzdGlhbiBIZWltZXMuKQogCiAqIFNvbWUgbWFjcm9zIHdlcmUgcmVuYW1lZCBpbiBib3RoIDMuMCBhbmQgMi42IHRvIG1ha2UgaXQgY2xlYXJlciB0aGF0CiAgIHRoZXkgYXJlIG1hY3JvcywKLSAgbm90IGZ1bmN0aW9ucy4gIDpjbWFjcm86YFB5X1NpemUoKWAgYmVjYW1lIDpjbWFjcm86YFB5X1NJWkUoKWAsCi0gIDpjbWFjcm86YFB5X1R5cGUoKWAgYmVjYW1lIDpjbWFjcm86YFB5X1RZUEUoKWAsIGFuZAotICA6Y21hY3JvOmBQeV9SZWZjbnQoKWAgYmVjYW1lIDpjbWFjcm86YFB5X1JFRkNOVCgpYC4KKyAgbm90IGZ1bmN0aW9ucy4gIDpjOm1hY3JvOmBQeV9TaXplKClgIGJlY2FtZSA6YzptYWNybzpgUHlfU0laRSgpYCwKKyAgOmM6bWFjcm86YFB5X1R5cGUoKWAgYmVjYW1lIDpjOm1hY3JvOmBQeV9UWVBFKClgLCBhbmQKKyAgOmM6bWFjcm86YFB5X1JlZmNudCgpYCBiZWNhbWUgOmM6bWFjcm86YFB5X1JFRkNOVCgpYC4KICAgVGhlIG1peGVkLWNhc2UgbWFjcm9zIGFyZSBzdGlsbCBhdmFpbGFibGUKICAgaW4gUHl0aG9uIDIuNiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAgKDppc3N1ZTpgMTYyOWApCkBAIC0zMTEyLDcgKzMxMTksNyBAQAogCiAqIFRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSdzIHNvY2tldCBvYmplY3RzIG5vdyBoYXZlIGFuCiAgIDptZXRoOmBpb2N0bGAgbWV0aG9kIHRoYXQgcHJvdmlkZXMgYSBsaW1pdGVkIGludGVyZmFjZSB0byB0aGUKLSAgOmNmdW5jOmBXU0FJb2N0bGAgc3lzdGVtIGludGVyZmFjZS4KKyAgOmM6ZnVuYzpgV1NBSW9jdGxgIHN5c3RlbSBpbnRlcmZhY2UuCiAKICogVGhlIDptb2Q6YF93aW5yZWdgIG1vZHVsZSBub3cgaGFzIGEgZnVuY3Rpb24sCiAgIDpmdW5jOmBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NgLApAQCAtMzI1OCwxMyArMzI2NSwxMyBAQAogICB0aGUgaW1wbGVtZW50YXRpb24gbm93IGV4cGxpY2l0bHkgY2hlY2tzIGZvciB0aGlzIGNhc2UgYW5kIHJhaXNlcwogICBhbiA6ZXhjOmBJbXBvcnRFcnJvcmAuCiAKLSogQyBBUEk6IHRoZSA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydGAgYW5kIDpjZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYAorKiBDIEFQSTogdGhlIDpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydGAgYW5kIDpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZWAKICAgZnVuY3Rpb25zIG5vdyBkZWZhdWx0IHRvIGFic29sdXRlIGltcG9ydHMsIG5vdCByZWxhdGl2ZSBpbXBvcnRzLgogICBUaGlzIHdpbGwgYWZmZWN0IEMgZXh0ZW5zaW9ucyB0aGF0IGltcG9ydCBvdGhlciBtb2R1bGVzLgogCiAqIEMgQVBJOiBleHRlbnNpb24gZGF0YSB0eXBlcyB0aGF0IHNob3VsZG4ndCBiZSBoYXNoYWJsZQogICBzaG91bGQgZGVmaW5lIHRoZWlyIGBgdHBfaGFzaGBgIHNsb3QgdG8KLSAgOmNmdW5jOmBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWRgLgorICA6YzpmdW5jOmBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWRgLgogCiAqIFRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSBleGNlcHRpb24gOmV4Yzpgc29ja2V0LmVycm9yYCBub3cgaW5oZXJpdHMKICAgZnJvbSA6ZXhjOmBJT0Vycm9yYC4gIFByZXZpb3VzbHkgaXQgd2Fzbid0IGEgc3ViY2xhc3Mgb2YKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjcucnN0IGIvRG9jL3doYXRzbmV3LzIuNy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxNTYxNwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy93aGF0c25ldy8yLjcucnN0CkBAIC0wLDAgKzEsMjQ4MSBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBXaGF0J3MgTmV3IGluIFB5dGhvbiAyLjcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOkF1dGhvcjogQS5NLiBLdWNobGluZyAoYW1rIGF0IGFtay5jYSkKKzpSZWxlYXNlOiB8cmVsZWFzZXwKKzpEYXRlOiB8dG9kYXl8CisKKy4uICBoeXBlcmxpbmsgYWxsIHRoZSBtZXRob2RzICYgZnVuY3Rpb25zLgorCisuLiBUX1NUUklOR19JTlBMQUNFIG5vdCBkZXNjcmliZWQgaW4gbWFpbiBkb2NzCisuLiAiRm9ybWF0IFN0cmluZyBTeW50YXgiIGluIHN0cmluZy5yc3QgY291bGQgdXNlIG1hbnkgbW9yZSBleGFtcGxlcy4KKworLi4gJElkJAorICAgUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudC4gIERvIG5vdCBzcGVuZCB2ZXJ5IG11Y2ggdGltZQorICAgb24gdGhlIHdvcmRpbmcgb2YgeW91ciBjaGFuZ2VzLCBiZWNhdXNlIHlvdXIgdGV4dCB3aWxsIHByb2JhYmx5CisgICBnZXQgcmV3cml0dGVuIHRvIHNvbWUgZGVncmVlLgorCisgICAqIFRoZSBtYWludGFpbmVyIHdpbGwgZ28gdGhyb3VnaCBNaXNjL05FV1MgcGVyaW9kaWNhbGx5IGFuZCBhZGQKKyAgIGNoYW5nZXM7IGl0J3MgdGhlcmVmb3JlIG1vcmUgaW1wb3J0YW50IHRvIGFkZCB5b3VyIGNoYW5nZXMgdG8KKyAgIE1pc2MvTkVXUyB0aGFuIHRvIHRoaXMgZmlsZS4KKworICAgKiBUaGlzIGlzIG5vdCBhIGNvbXBsZXRlIGxpc3Qgb2YgZXZlcnkgc2luZ2xlIGNoYW5nZTsgY29tcGxldGVuZXNzCisgICBpcyB0aGUgcHVycG9zZSBvZiBNaXNjL05FV1MuICBTb21lIGNoYW5nZXMgSSBjb25zaWRlciB0b28gc21hbGwKKyAgIG9yIGVzb3RlcmljIHRvIGluY2x1ZGUuICBJZiBzdWNoIGEgY2hhbmdlIGlzIGFkZGVkIHRvIHRoZSB0ZXh0LAorICAgSSdsbCBqdXN0IHJlbW92ZSBpdC4gIChUaGlzIGlzIGFub3RoZXIgcmVhc29uIHlvdSBzaG91bGRuJ3Qgc3BlbmQKKyAgIHRvbyBtdWNoIHRpbWUgb24gd3JpdGluZyB5b3VyIGFkZGl0aW9uLikKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBqdXN0IGFkZCBhIGZyYWdtZW50YXJ5IG5vdGUgYWJvdXQgYSBjaGFuZ2UuICBGb3IKKyAgIGV4YW1wbGU6ICJYWFggRGVzY3JpYmUgdGhlIHRyYW5zbW9ncmlmeSgpIGZ1bmN0aW9uIGFkZGVkIHRvIHRoZQorICAgc29ja2V0IG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQuCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICBKdXN0IHRoZSBuYW1lIGlzCisgICBzdWZmaWNpZW50OyB0aGUgZS1tYWlsIGFkZHJlc3MgaXNuJ3QgbmVjZXNzYXJ5LgorCisgICAqIEl0J3MgaGVscGZ1bCB0byBhZGQgdGhlIGJ1Zy9wYXRjaCBudW1iZXIgaW4gYSBwYXJlbnRoZXRpY2FsIGNvbW1lbnQuCisKKyAgIFhYWCBEZXNjcmliZSB0aGUgdHJhbnNtb2dyaWZ5KCkgZnVuY3Rpb24gYWRkZWQgdG8gdGhlIHNvY2tldAorICAgbW9kdWxlLgorICAgKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyOyA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgc29tZSBlZmZvcnQgZ29pbmcgdGhyb3VnaCB0aGUgU1ZOIGxvZ3MKKyAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCisKK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBUaGUgZmluYWwKK3JlbGVhc2Ugb2YgMi43IGlzIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIEp1bHkgMjAxMDsgdGhlIGRldGFpbGVkCitzY2hlZHVsZSBpcyBkZXNjcmliZWQgaW4gOnBlcDpgMzczYC4KKworTnVtZXJpYyBoYW5kbGluZyBoYXMgYmVlbiBpbXByb3ZlZCBpbiBtYW55IHdheXMsIGZvciBib3RoCitmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBmb3IgdGhlIDpjbGFzczpgRGVjaW1hbGAgY2xhc3MuICBUaGVyZSBhcmUKK3NvbWUgdXNlZnVsIGFkZGl0aW9ucyB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSwgc3VjaCBhcyBhIGdyZWF0bHkKK2VuaGFuY2VkIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUsIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlIGZvcgorcGFyc2luZyBjb21tYW5kLWxpbmUgb3B0aW9ucywgY29udmVuaWVudCBvcmRlcmVkLWRpY3Rpb25hcnkgYW5kCis6Y2xhc3M6YENvdW50ZXJgIGNsYXNzZXMgaW4gdGhlIDptb2Q6YGNvbGxlY3Rpb25zYCBtb2R1bGUsIGFuZCBtYW55CitvdGhlciBpbXByb3ZlbWVudHMuCisKK1B5dGhvbiAyLjcgaXMgcGxhbm5lZCB0byBiZSB0aGUgbGFzdCBvZiB0aGUgMi54IHJlbGVhc2VzLCBzbyB3ZSB3b3JrZWQKK29uIG1ha2luZyBpdCBhIGdvb2QgcmVsZWFzZSBmb3IgdGhlIGxvbmcgdGVybS4gIFRvIGhlbHAgd2l0aCBwb3J0aW5nCit0byBQeXRob24gMywgc2V2ZXJhbCBuZXcgZmVhdHVyZXMgZnJvbSB0aGUgUHl0aG9uIDMueCBzZXJpZXMgaGF2ZSBiZWVuCitpbmNsdWRlZCBpbiAyLjcuCisKK1RoaXMgYXJ0aWNsZSBkb2Vzbid0IGF0dGVtcHQgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YKK3RoZSBuZXcgZmVhdHVyZXMsIGJ1dCBpbnN0ZWFkIHByb3ZpZGVzIGEgY29udmVuaWVudCBvdmVydmlldy4gIEZvcgorZnVsbCBkZXRhaWxzLCB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBQeXRob24gMi43IGF0CitodHRwOi8vZG9jcy5weXRob24ub3JnLiBJZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yCit0aGUgZGVzaWduIGFuZCBpbXBsZW1lbnRhdGlvbiwgcmVmZXIgdG8gdGhlIFBFUCBmb3IgYSBwYXJ0aWN1bGFyIG5ldworZmVhdHVyZSBvciB0aGUgaXNzdWUgb24gaHR0cDovL2J1Z3MucHl0aG9uLm9yZyBpbiB3aGljaCBhIGNoYW5nZSB3YXMKK2Rpc2N1c3NlZC4gIFdoZW5ldmVyIHBvc3NpYmxlLCAiV2hhdCdzIE5ldyBpbiBQeXRob24iIGxpbmtzIHRvIHRoZQorYnVnL3BhdGNoIGl0ZW0gZm9yIGVhY2ggY2hhbmdlLgorCisuLiBfd2hhdHNuZXcyNy1weXRob24zMToKKworVGhlIEZ1dHVyZSBmb3IgUHl0aG9uIDIueAorPT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gMi43IGlzIGludGVuZGVkIHRvIGJlIHRoZSBsYXN0IG1ham9yIHJlbGVhc2UgaW4gdGhlIDIueCBzZXJpZXMuCitUaGUgUHl0aG9uIG1haW50YWluZXJzIGFyZSBwbGFubmluZyB0byBmb2N1cyB0aGVpciBmdXR1cmUgZWZmb3J0cyBvbgordGhlIFB5dGhvbiAzLnggc2VyaWVzLgorCitUaGlzIG1lYW5zIHRoYXQgMi43IHdpbGwgcmVtYWluIGluIHBsYWNlIGZvciBhIGxvbmcgdGltZSwgcnVubmluZworcHJvZHVjdGlvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIDMueC4KK1R3byBjb25zZXF1ZW5jZXMgb2YgdGhlIGxvbmctdGVybSBzaWduaWZpY2FuY2Ugb2YgMi43IGFyZToKKworKiBJdCdzIHZlcnkgbGlrZWx5IHRoZSAyLjcgcmVsZWFzZSB3aWxsIGhhdmUgYSBsb25nZXIgcGVyaW9kIG9mCisgIG1haW50ZW5hbmNlIGNvbXBhcmVkIHRvIGVhcmxpZXIgMi54IHZlcnNpb25zLiAgUHl0aG9uIDIuNyB3aWxsCisgIGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgd2hpbGUgdGhlIHRyYW5zaXRpb24gdG8gMy54IGNvbnRpbnVlcywgYW5kCisgIHRoZSBkZXZlbG9wZXJzIGFyZSBwbGFubmluZyB0byBzdXBwb3J0IFB5dGhvbiAyLjcgd2l0aCBidWctZml4CisgIHJlbGVhc2VzIGJleW9uZCB0aGUgdHlwaWNhbCB0d28geWVhcnMuCisKKyogQSBwb2xpY3kgZGVjaXNpb24gd2FzIG1hZGUgdG8gc2lsZW5jZSB3YXJuaW5ncyBvbmx5IG9mIGludGVyZXN0IHRvCisgIGRldmVsb3BlcnMuICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIGFuZCBpdHMKKyAgZGVzY2VuZGFudHMgYXJlIG5vdyBpZ25vcmVkIHVubGVzcyBvdGhlcndpc2UgcmVxdWVzdGVkLCBwcmV2ZW50aW5nCisgIHVzZXJzIGZyb20gc2VlaW5nIHdhcm5pbmdzIHRyaWdnZXJlZCBieSBhbiBhcHBsaWNhdGlvbi4gIFRoaXMgY2hhbmdlCisgIHdhcyBhbHNvIG1hZGUgaW4gdGhlIGJyYW5jaCB0aGF0IHdpbGwgYmVjb21lIFB5dGhvbiAzLjIuIChEaXNjdXNzZWQKKyAgb24gc3RkbGliLXNpZyBhbmQgY2FycmllZCBvdXQgaW4gOmlzc3VlOmA3MzE5YC4pCisKKyAgSW4gcHJldmlvdXMgcmVsZWFzZXMsIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgd2VyZQorICBlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKKyAgaW5kaWNhdGlvbiBvZiB3aGVyZSB0aGVpciBjb2RlIG1heSBicmVhayBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uCisgIG9mIFB5dGhvbi4KKworICBIb3dldmVyLCB0aGVyZSBhcmUgaW5jcmVhc2luZ2x5IG1hbnkgdXNlcnMgb2YgUHl0aG9uLWJhc2VkCisgIGFwcGxpY2F0aW9ucyB3aG8gYXJlIG5vdCBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgb2YKKyAgdGhvc2UgYXBwbGljYXRpb25zLiAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyBhcmUKKyAgaXJyZWxldmFudCB0byBzdWNoIHVzZXJzLCBtYWtpbmcgdGhlbSB3b3JyeSBhYm91dCBhbiBhcHBsaWNhdGlvbgorICB0aGF0J3MgYWN0dWFsbHkgd29ya2luZyBjb3JyZWN0bHkgYW5kIGJ1cmRlbmluZyBhcHBsaWNhdGlvbiBkZXZlbG9wZXJzCisgIHdpdGggcmVzcG9uZGluZyB0byB0aGVzZSBjb25jZXJucy4KKworICBZb3UgY2FuIHJlLWVuYWJsZSBkaXNwbGF5IG9mIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYnkKKyAgcnVubmluZyBQeXRob24gd2l0aCB0aGUgOm9wdGlvbjpgLVdkZWZhdWx0YCAoc2hvcnQgZm9ybToKKyAgOm9wdGlvbjpgLVdkYCkgc3dpdGNoLCBvciBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKKyAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYGAiZGVmYXVsdCJgYCAob3IgYGAiZCJgYCkgYmVmb3JlIHJ1bm5pbmcKKyAgUHl0aG9uLiAgUHl0aG9uIGNvZGUgY2FuIGFsc28gcmUtZW5hYmxlIHRoZW0KKyAgYnkgY2FsbGluZyBgYHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpYGAuCisKKworUHl0aG9uIDMuMSBGZWF0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworTXVjaCBhcyBQeXRob24gMi42IGluY29ycG9yYXRlZCBmZWF0dXJlcyBmcm9tIFB5dGhvbiAzLjAsCit2ZXJzaW9uIDIuNyBpbmNvcnBvcmF0ZXMgc29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzCitpbiBQeXRob24gMy4xLiAgVGhlIDIueCBzZXJpZXMgY29udGludWVzIHRvIHByb3ZpZGUgdG9vbHMKK2ZvciBtaWdyYXRpbmcgdG8gdGhlIDMueCBzZXJpZXMuCisKK0EgcGFydGlhbCBsaXN0IG9mIDMuMSBmZWF0dXJlcyB0aGF0IHdlcmUgYmFja3BvcnRlZCB0byAyLjc6CisKKyogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIChgYHsxLDIsM31gYCBpcyBhIG11dGFibGUgc2V0KS4KKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHsgaTogaSoyIGZvciBpIGluIHJhbmdlKDMpfWBgKS4KKyogTXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyBpbiBhIHNpbmdsZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgorKiBBIG5ldyB2ZXJzaW9uIG9mIHRoZSA6bW9kOmBpb2AgbGlicmFyeSwgcmV3cml0dGVuIGluIEMgZm9yIHBlcmZvcm1hbmNlLgorKiBUaGUgb3JkZXJlZC1kaWN0aW9uYXJ5IHR5cGUgZGVzY3JpYmVkIGluIDpyZWY6YHBlcC0wMzcyYC4KKyogVGhlIG5ldyBgYCIsImBgIGZvcm1hdCBzcGVjaWZpZXIgZGVzY3JpYmVkIGluIDpyZWY6YHBlcC0wMzc4YC4KKyogVGhlIDpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0LgorKiBBIHNtYWxsIHN1YnNldCBvZiB0aGUgOm1vZDpgaW1wb3J0bGliYCBtb2R1bGUsCisgIGBkZXNjcmliZWQgYmVsb3cgPCNpbXBvcnRsaWItc2VjdGlvbj5gX18uCisqIFRoZSA6ZnVuYzpgcmVwcmAgb2YgYSBmbG9hdCBgYHhgYCBpcyBzaG9ydGVyIGluIG1hbnkgY2FzZXM6IGl0J3Mgbm93CisgIGJhc2VkIG9uIHRoZSBzaG9ydGVzdCBkZWNpbWFsIHN0cmluZyB0aGF0J3MgZ3VhcmFudGVlZCB0byByb3VuZCBiYWNrCisgIHRvIGBgeGBgLiAgQXMgaW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgUHl0aG9uLCBpdCdzIGd1YXJhbnRlZWQgdGhhdAorICBgYGZsb2F0KHJlcHIoeCkpYGAgcmVjb3ZlcnMgYGB4YGAuCisqIEZsb2F0LXRvLXN0cmluZyBhbmQgc3RyaW5nLXRvLWZsb2F0IGNvbnZlcnNpb25zIGFyZSBjb3JyZWN0bHkgcm91bmRlZC4KKyAgVGhlIDpmdW5jOmByb3VuZGAgZnVuY3Rpb24gaXMgYWxzbyBub3cgY29ycmVjdGx5IHJvdW5kZWQuCisqIFRoZSA6Yzp0eXBlOmBQeUNhcHN1bGVgIHR5cGUsIHVzZWQgdG8gcHJvdmlkZSBhIEMgQVBJIGZvciBleHRlbnNpb24gbW9kdWxlcy4KKyogVGhlIDpjOmZ1bmM6YFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvd2AgQyBBUEkgZnVuY3Rpb24uCisKK090aGVyIG5ldyBQeXRob24zLW1vZGUgd2FybmluZ3MgaW5jbHVkZToKKworKiA6ZnVuYzpgb3BlcmF0b3IuaXNDYWxsYWJsZWAgYW5kIDpmdW5jOmBvcGVyYXRvci5zZXF1ZW5jZUluY2x1ZGVzYCwKKyAgd2hpY2ggYXJlIG5vdCBzdXBwb3J0ZWQgaW4gMy54LCBub3cgdHJpZ2dlciB3YXJuaW5ncy4KKyogVGhlIDpvcHRpb246YC0zYCBzd2l0Y2ggbm93IGF1dG9tYXRpY2FsbHkKKyAgZW5hYmxlcyB0aGUgOm9wdGlvbjpgLVF3YXJuYCBzd2l0Y2ggdGhhdCBjYXVzZXMgd2FybmluZ3MKKyAgYWJvdXQgdXNpbmcgY2xhc3NpYyBkaXZpc2lvbiB3aXRoIGludGVnZXJzIGFuZCBsb25nIGludGVnZXJzLgorCisKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisuLiBMYXJnZSwgUEVQLWxldmVsIGZlYXR1cmVzIGFuZCBjaGFuZ2VzIHNob3VsZCBiZSBkZXNjcmliZWQgaGVyZS4KKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBfcGVwLTAzNzI6CisKK1BFUCAzNzI6IEFkZGluZyBhbiBPcmRlcmVkIERpY3Rpb25hcnkgdG8gY29sbGVjdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVndWxhciBQeXRob24gZGljdGlvbmFyaWVzIGl0ZXJhdGUgb3ZlciBrZXkvdmFsdWUgcGFpcnMgaW4gYXJiaXRyYXJ5IG9yZGVyLgorT3ZlciB0aGUgeWVhcnMsIGEgbnVtYmVyIG9mIGF1dGhvcnMgaGF2ZSB3cml0dGVuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9ucwordGhhdCByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCB0aGUga2V5cyB3ZXJlIG9yaWdpbmFsbHkgaW5zZXJ0ZWQuICBCYXNlZCBvbgordGhlIGV4cGVyaWVuY2VzIGZyb20gdGhvc2UgaW1wbGVtZW50YXRpb25zLCAyLjcgaW50cm9kdWNlcyBhIG5ldworOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIGNsYXNzIGluIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlLgorCitUaGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIEFQSSBwcm92aWRlcyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgcmVndWxhcgorZGljdGlvbmFyaWVzIGJ1dCBpdGVyYXRlcyBvdmVyIGtleXMgYW5kIHZhbHVlcyBpbiBhIGd1YXJhbnRlZWQgb3JkZXIKK2RlcGVuZGluZyBvbiB3aGVuIGEga2V5IHdhcyBmaXJzdCBpbnNlcnRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKKyAgICA+Pj4gZCA9IE9yZGVyZWREaWN0KFsoJ2ZpcnN0JywgMSksCisgICAgLi4uICAgICAgICAgICAgICAgICAgKCdzZWNvbmQnLCAyKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAoJ3RoaXJkJywgMyldKQorICAgID4+PiBkLml0ZW1zKCkKKyAgICBbKCdmaXJzdCcsIDEpLCAoJ3NlY29uZCcsIDIpLCAoJ3RoaXJkJywgMyldCisKK0lmIGEgbmV3IGVudHJ5IG92ZXJ3cml0ZXMgYW4gZXhpc3RpbmcgZW50cnksIHRoZSBvcmlnaW5hbCBpbnNlcnRpb24KK3Bvc2l0aW9uIGlzIGxlZnQgdW5jaGFuZ2VkOjoKKworICAgID4+PiBkWydzZWNvbmQnXSA9IDQKKyAgICA+Pj4gZC5pdGVtcygpCisgICAgWygnZmlyc3QnLCAxKSwgKCdzZWNvbmQnLCA0KSwgKCd0aGlyZCcsIDMpXQorCitEZWxldGluZyBhbiBlbnRyeSBhbmQgcmVpbnNlcnRpbmcgaXQgd2lsbCBtb3ZlIGl0IHRvIHRoZSBlbmQ6OgorCisgICAgPj4+IGRlbCBkWydzZWNvbmQnXQorICAgID4+PiBkWydzZWNvbmQnXSA9IDUKKyAgICA+Pj4gZC5pdGVtcygpCisgICAgWygnZmlyc3QnLCAxKSwgKCd0aGlyZCcsIDMpLCAoJ3NlY29uZCcsIDUpXQorCitUaGUgOm1ldGg6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5wb3BpdGVtYCBtZXRob2QgaGFzIGFuIG9wdGlvbmFsICpsYXN0KgorYXJndW1lbnQgdGhhdCBkZWZhdWx0cyB0byBUcnVlLiAgSWYgKmxhc3QqIGlzIFRydWUsIHRoZSBtb3N0IHJlY2VudGx5CithZGRlZCBrZXkgaXMgcmV0dXJuZWQgYW5kIHJlbW92ZWQ7IGlmIGl0J3MgRmFsc2UsIHRoZQorb2xkZXN0IGtleSBpcyBzZWxlY3RlZDo6CisKKyAgICA+Pj4gb2QgPSBPcmRlcmVkRGljdChbKHgsMCkgZm9yIHggaW4gcmFuZ2UoMjApXSkKKyAgICA+Pj4gb2QucG9waXRlbSgpCisgICAgKDE5LCAwKQorICAgID4+PiBvZC5wb3BpdGVtKCkKKyAgICAoMTgsIDApCisgICAgPj4+IG9kLnBvcGl0ZW0obGFzdD1GYWxzZSkKKyAgICAoMCwgMCkKKyAgICA+Pj4gb2QucG9waXRlbShsYXN0PUZhbHNlKQorICAgICgxLCAwKQorCitDb21wYXJpbmcgdHdvIG9yZGVyZWQgZGljdGlvbmFyaWVzIGNoZWNrcyBib3RoIHRoZSBrZXlzIGFuZCB2YWx1ZXMsCithbmQgcmVxdWlyZXMgdGhhdCB0aGUgaW5zZXJ0aW9uIG9yZGVyIHdhcyB0aGUgc2FtZTo6CisKKyAgICA+Pj4gb2QxID0gT3JkZXJlZERpY3QoWygnZmlyc3QnLCAxKSwKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICgnc2Vjb25kJywgMiksCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAoJ3RoaXJkJywgMyldKQorICAgID4+PiBvZDIgPSBPcmRlcmVkRGljdChbKCd0aGlyZCcsIDMpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgKCdmaXJzdCcsIDEpLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgKCdzZWNvbmQnLCAyKV0pCisgICAgPj4+IG9kMSA9PSBvZDIKKyAgICBGYWxzZQorICAgID4+PiAjIE1vdmUgJ3RoaXJkJyBrZXkgdG8gdGhlIGVuZAorICAgID4+PiBkZWwgb2QyWyd0aGlyZCddOyBvZDJbJ3RoaXJkJ10gPSAzCisgICAgPj4+IG9kMSA9PSBvZDIKKyAgICBUcnVlCisKK0NvbXBhcmluZyBhbiA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd2l0aCBhIHJlZ3VsYXIgZGljdGlvbmFyeQoraWdub3JlcyB0aGUgaW5zZXJ0aW9uIG9yZGVyIGFuZCBqdXN0IGNvbXBhcmVzIHRoZSBrZXlzIGFuZCB2YWx1ZXMuCisKK0hvdyBkb2VzIHRoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgd29yaz8gIEl0IG1haW50YWlucyBhCitkb3VibHktbGlua2VkIGxpc3Qgb2Yga2V5cywgYXBwZW5kaW5nIG5ldyBrZXlzIHRvIHRoZSBsaXN0IGFzIHRoZXkncmUgaW5zZXJ0ZWQuCitBIHNlY29uZGFyeSBkaWN0aW9uYXJ5IG1hcHMga2V5cyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGxpc3Qgbm9kZSwgc28KK2RlbGV0aW9uIGRvZXNuJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0aGUgZW50aXJlIGxpbmtlZCBsaXN0IGFuZCB0aGVyZWZvcmUKK3JlbWFpbnMgTygxKS4KKworVGhlIHN0YW5kYXJkIGxpYnJhcnkgbm93IHN1cHBvcnRzIHVzZSBvZiBvcmRlcmVkIGRpY3Rpb25hcmllcyBpbiBzZXZlcmFsCittb2R1bGVzLgorCisqIFRoZSA6bW9kOmBDb25maWdQYXJzZXJgIG1vZHVsZSB1c2VzIHRoZW0gYnkgZGVmYXVsdCwgbWVhbmluZyB0aGF0CisgIGNvbmZpZ3VyYXRpb24gZmlsZXMgY2FuIG5vdyBiZSByZWFkLCBtb2RpZmllZCwgYW5kIHRoZW4gd3JpdHRlbiBiYWNrCisgIGluIHRoZWlyIG9yaWdpbmFsIG9yZGVyLgorCisqIFRoZSA6bWV0aDpgfmNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9hc2RpY3QoKWAgbWV0aG9kIGZvcgorICA6ZnVuYzpgY29sbGVjdGlvbnMubmFtZWR0dXBsZWAgbm93IHJldHVybnMgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHdpdGggdGhlCisgIHZhbHVlcyBhcHBlYXJpbmcgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVuZGVybHlpbmcgdHVwbGUgaW5kaWNlcy4KKworKiBUaGUgOm1vZDpganNvbmAgbW9kdWxlJ3MgOmNsYXNzOmB+anNvbi5KU09ORGVjb2RlcmAgY2xhc3MKKyAgY29uc3RydWN0b3Igd2FzIGV4dGVuZGVkIHdpdGggYW4gKm9iamVjdF9wYWlyc19ob29rKiBwYXJhbWV0ZXIgdG8KKyAgYWxsb3cgOmNsYXNzOmBPcmRlcmVkRGljdGAgaW5zdGFuY2VzIHRvIGJlIGJ1aWx0IGJ5IHRoZSBkZWNvZGVyLgorICBTdXBwb3J0IHdhcyBhbHNvIGFkZGVkIGZvciB0aGlyZC1wYXJ0eSB0b29scyBsaWtlCisgIGBQeVlBTUwgPGh0dHA6Ly9weXlhbWwub3JnLz5gXy4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM3MmAgLSBBZGRpbmcgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHRvIGNvbGxlY3Rpb25zCisgICAgIFBFUCB3cml0dGVuIGJ5IEFybWluIFJvbmFjaGVyIGFuZCBSYXltb25kIEhldHRpbmdlcjsKKyAgICAgaW1wbGVtZW50ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuCisKKy4uIF9wZXAtMDM3ODoKKworUEVQIDM3ODogRm9ybWF0IFNwZWNpZmllciBmb3IgVGhvdXNhbmRzIFNlcGFyYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBtYWtlIHByb2dyYW0gb3V0cHV0IG1vcmUgcmVhZGFibGUsIGl0IGNhbiBiZSB1c2VmdWwgdG8gYWRkCitzZXBhcmF0b3JzIHRvIGxhcmdlIG51bWJlcnMsIHJlbmRlcmluZyB0aGVtIGFzCisxOCw0NDYsNzQ0LDA3Myw3MDksNTUxLDYxNiBpbnN0ZWFkIG9mIDE4NDQ2NzQ0MDczNzA5NTUxNjE2LgorCitUaGUgZnVsbHkgZ2VuZXJhbCBzb2x1dGlvbiBmb3IgZG9pbmcgdGhpcyBpcyB0aGUgOm1vZDpgbG9jYWxlYCBtb2R1bGUsCit3aGljaCBjYW4gdXNlIGRpZmZlcmVudCBzZXBhcmF0b3JzICgiLCIgaW4gTm9ydGggQW1lcmljYSwgIi4iIGluCitFdXJvcGUpIGFuZCBkaWZmZXJlbnQgZ3JvdXBpbmcgc2l6ZXMsIGJ1dCA6bW9kOmBsb2NhbGVgIGlzIGNvbXBsaWNhdGVkCit0byB1c2UgYW5kIHVuc3VpdGFibGUgZm9yIG11bHRpLXRocmVhZGVkIGFwcGxpY2F0aW9ucyB3aGVyZSBkaWZmZXJlbnQKK3RocmVhZHMgYXJlIHByb2R1Y2luZyBvdXRwdXQgZm9yIGRpZmZlcmVudCBsb2NhbGVzLgorCitUaGVyZWZvcmUsIGEgc2ltcGxlIGNvbW1hLWdyb3VwaW5nIG1lY2hhbmlzbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUKK21pbmktbGFuZ3VhZ2UgdXNlZCBieSB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgIG1ldGhvZC4gIFdoZW4KK2Zvcm1hdHRpbmcgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIHNpbXBseSBpbmNsdWRlIGEgY29tbWEgYmV0d2VlbiB0aGUKK3dpZHRoIGFuZCB0aGUgcHJlY2lzaW9uOjoKKworICAgPj4+ICd7OjIwLC4yZn0nLmZvcm1hdCgxODQ0Njc0NDA3MzcwOTU1MTYxNi4wKQorICAgJzE4LDQ0Niw3NDQsMDczLDcwOSw1NTEsNjE2LjAwJworCitXaGVuIGZvcm1hdHRpbmcgYW4gaW50ZWdlciwgaW5jbHVkZSB0aGUgY29tbWEgYWZ0ZXIgdGhlIHdpZHRoOgorCisgICA+Pj4gJ3s6MjAsZH0nLmZvcm1hdCgxODQ0Njc0NDA3MzcwOTU1MTYxNikKKyAgICcxOCw0NDYsNzQ0LDA3Myw3MDksNTUxLDYxNicKKworVGhpcyBtZWNoYW5pc20gaXMgbm90IGFkYXB0YWJsZSBhdCBhbGw7IGNvbW1hcyBhcmUgYWx3YXlzIHVzZWQgYXMgdGhlCitzZXBhcmF0b3IgYW5kIHRoZSBncm91cGluZyBpcyBhbHdheXMgaW50byB0aHJlZS1kaWdpdCBncm91cHMuICBUaGUKK2NvbW1hLWZvcm1hdHRpbmcgbWVjaGFuaXNtIGlzbid0IGFzIGdlbmVyYWwgYXMgdGhlIDptb2Q6YGxvY2FsZWAKK21vZHVsZSwgYnV0IGl0J3MgZWFzaWVyIHRvIHVzZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM3OGAgLSBGb3JtYXQgU3BlY2lmaWVyIGZvciBUaG91c2FuZHMgU2VwYXJhdG9yCisgICAgIFBFUCB3cml0dGVuIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyBpbXBsZW1lbnRlZCBieSBFcmljIFNtaXRoLgorCitQRVAgMzg5OiBUaGUgYXJncGFyc2UgTW9kdWxlIGZvciBQYXJzaW5nIENvbW1hbmQgTGluZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZSBmb3IgcGFyc2luZyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHdhcworYWRkZWQgYXMgYSBtb3JlIHBvd2VyZnVsIHJlcGxhY2VtZW50IGZvciB0aGUKKzptb2Q6YG9wdHBhcnNlYCBtb2R1bGUuCisKK1RoaXMgbWVhbnMgUHl0aG9uIG5vdyBzdXBwb3J0cyB0aHJlZSBkaWZmZXJlbnQgbW9kdWxlcyBmb3IgcGFyc2luZworY29tbWFuZC1saW5lIGFyZ3VtZW50czogOm1vZDpgZ2V0b3B0YCwgOm1vZDpgb3B0cGFyc2VgLCBhbmQKKzptb2Q6YGFyZ3BhcnNlYC4gIFRoZSA6bW9kOmBnZXRvcHRgIG1vZHVsZSBjbG9zZWx5IHJlc2VtYmxlcyB0aGUgQworbGlicmFyeSdzIDpjOmZ1bmM6YGdldG9wdGAgZnVuY3Rpb24sIHNvIGl0IHJlbWFpbnMgdXNlZnVsIGlmIHlvdSdyZSB3cml0aW5nIGEKK1B5dGhvbiBwcm90b3R5cGUgdGhhdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmV3cml0dGVuIGluIEMuCis6bW9kOmBvcHRwYXJzZWAgYmVjb21lcyByZWR1bmRhbnQsIGJ1dCB0aGVyZSBhcmUgbm8gcGxhbnMgdG8gcmVtb3ZlIGl0CitiZWNhdXNlIHRoZXJlIGFyZSBtYW55IHNjcmlwdHMgc3RpbGwgdXNpbmcgaXQsIGFuZCB0aGVyZSdzIG5vCithdXRvbWF0ZWQgd2F5IHRvIHVwZGF0ZSB0aGVzZSBzY3JpcHRzLiAgKE1ha2luZyB0aGUgOm1vZDpgYXJncGFyc2VgCitBUEkgY29uc2lzdGVudCB3aXRoIDptb2Q6YG9wdHBhcnNlYCdzIGludGVyZmFjZSB3YXMgZGlzY3Vzc2VkIGJ1dAorcmVqZWN0ZWQgYXMgdG9vIG1lc3N5IGFuZCBkaWZmaWN1bHQuKQorCitJbiBzaG9ydCwgaWYgeW91J3JlIHdyaXRpbmcgYSBuZXcgc2NyaXB0IGFuZCBkb24ndCBuZWVkIHRvIHdvcnJ5CithYm91dCBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24sIHVzZQorOm1vZDpgYXJncGFyc2VgIGluc3RlYWQgb2YgOm1vZDpgb3B0cGFyc2VgLgorCitIZXJlJ3MgYW4gZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgYXJncGFyc2UKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdDb21tYW5kLWxpbmUgZXhhbXBsZS4nKQorCisgICAgIyBBZGQgb3B0aW9uYWwgc3dpdGNoZXMKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2lzX3ZlcmJvc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJvZHVjZSB2ZXJib3NlIG91dHB1dCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCBhY3Rpb249J3N0b3JlJywgZGVzdD0nb3V0cHV0JywKKyAgICAgICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9J0ZJTEUnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlyZWN0IG91dHB1dCB0byBGSUxFIGluc3RlYWQgb2Ygc3Rkb3V0JykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctQycsIGFjdGlvbj0nc3RvcmUnLCB0eXBlPWludCwgZGVzdD0nY29udGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSdOVU0nLCBkZWZhdWx0PTAsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdkaXNwbGF5IE5VTSBsaW5lcyBvZiBhZGRlZCBjb250ZXh0JykKKworICAgICMgQWxsb3cgYW55IG51bWJlciBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KG5hcmdzPScqJywgYWN0aW9uPSdzdG9yZScsIGRlc3Q9J2lucHV0cycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdpbnB1dCBmaWxlbmFtZXMgKGRlZmF1bHQgaXMgc3RkaW4pJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgcHJpbnQgYXJncy5fX2RpY3RfXworCitVbmxlc3MgeW91IG92ZXJyaWRlIGl0LCA6b3B0aW9uOmAtaGAgYW5kIDpvcHRpb246YC0taGVscGAgc3dpdGNoZXMKK2FyZSBhdXRvbWF0aWNhbGx5IGFkZGVkLCBhbmQgcHJvZHVjZSBuZWF0bHkgZm9ybWF0dGVkIG91dHB1dDo6CisKKyAgICAtPiAuL3B5dGhvbi5leGUgYXJncGFyc2UtZXhhbXBsZS5weSAtLWhlbHAKKyAgICB1c2FnZTogYXJncGFyc2UtZXhhbXBsZS5weSBbLWhdIFstdl0gWy1vIEZJTEVdIFstQyBOVU1dIFtpbnB1dHMgW2lucHV0cyAuLi5dXQorCisgICAgQ29tbWFuZC1saW5lIGV4YW1wbGUuCisKKyAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIGlucHV0cyAgICAgIGlucHV0IGZpbGVuYW1lcyAoZGVmYXVsdCBpcyBzdGRpbikKKworICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgIC12ICAgICAgICAgIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQKKyAgICAgIC1vIEZJTEUgICAgIGRpcmVjdCBvdXRwdXQgdG8gRklMRSBpbnN0ZWFkIG9mIHN0ZG91dAorICAgICAgLUMgTlVNICAgICAgZGlzcGxheSBOVU0gbGluZXMgb2YgYWRkZWQgY29udGV4dAorCitBcyB3aXRoIDptb2Q6YG9wdHBhcnNlYCwgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBhbmQgYXJndW1lbnRzCithcmUgcmV0dXJuZWQgYXMgYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlcyBuYW1lZCBieSB0aGUgKmRlc3QqIHBhcmFtZXRlcnM6OgorCisgICAgLT4gLi9weXRob24uZXhlIGFyZ3BhcnNlLWV4YW1wbGUucHkgLXYKKyAgICB7J291dHB1dCc6IE5vbmUsCisgICAgICdpc192ZXJib3NlJzogVHJ1ZSwKKyAgICAgJ2NvbnRleHQnOiAwLAorICAgICAnaW5wdXRzJzogW119CisKKyAgICAtPiAuL3B5dGhvbi5leGUgYXJncGFyc2UtZXhhbXBsZS5weSAtdiAtbyAvdG1wL291dHB1dCAtQyA0IGZpbGUxIGZpbGUyCisgICAgeydvdXRwdXQnOiAnL3RtcC9vdXRwdXQnLAorICAgICAnaXNfdmVyYm9zZSc6IFRydWUsCisgICAgICdjb250ZXh0JzogNCwKKyAgICAgJ2lucHV0cyc6IFsnZmlsZTEnLCAnZmlsZTInXX0KKworOm1vZDpgYXJncGFyc2VgIGhhcyBtdWNoIGZhbmNpZXIgdmFsaWRhdGlvbiB0aGFuIDptb2Q6YG9wdHBhcnNlYDsgeW91CitjYW4gc3BlY2lmeSBhbiBleGFjdCBudW1iZXIgb2YgYXJndW1lbnRzIGFzIGFuIGludGVnZXIsIDAgb3IgbW9yZQorYXJndW1lbnRzIGJ5IHBhc3NpbmcgYGAnKidgYCwgMSBvciBtb3JlIGJ5IHBhc3NpbmcgYGAnKydgYCwgb3IgYW4KK29wdGlvbmFsIGFyZ3VtZW50IHdpdGggYGAnPydgYC4gIEEgdG9wLWxldmVsIHBhcnNlciBjYW4gY29udGFpbgorc3ViLXBhcnNlcnMgdG8gZGVmaW5lIHN1YmNvbW1hbmRzIHRoYXQgaGF2ZSBkaWZmZXJlbnQgc2V0cyBvZgorc3dpdGNoZXMsIGFzIGluIGBgc3ZuIGNvbW1pdGBgLCBgYHN2biBjaGVja291dGBgLCBldGMuICBZb3UgY2FuCitzcGVjaWZ5IGFuIGFyZ3VtZW50J3MgdHlwZSBhcyA6Y2xhc3M6YH5hcmdwYXJzZS5GaWxlVHlwZWAsIHdoaWNoIHdpbGwKK2F1dG9tYXRpY2FsbHkgb3BlbiBmaWxlcyBmb3IgeW91IGFuZCB1bmRlcnN0YW5kcyB0aGF0IGBgJy0nYGAgbWVhbnMKK3N0YW5kYXJkIGlucHV0IG9yIG91dHB1dC4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBhcmdwYXJzZSBtb2R1bGUgZG9jdW1lbnRhdGlvbiA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvbGlicmFyeS9hcmdwYXJzZS5odG1sPmBfXworCisgICBgVXBncmFkaW5nIG9wdHBhcnNlIGNvZGUgdG8gdXNlIGFyZ3BhcnNlIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi9saWJyYXJ5L2FyZ3BhcnNlLmh0bWwjdXBncmFkaW5nLW9wdHBhcnNlLWNvZGU+YF9fCisgICAgIFBhcnQgb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBkZXNjcmliaW5nIGhvdyB0byBjb252ZXJ0CisgICAgIGNvZGUgdGhhdCB1c2VzIDptb2Q6YG9wdHBhcnNlYC4KKworICAgOnBlcDpgMzg5YCAtIGFyZ3BhcnNlIC0gTmV3IENvbW1hbmQgTGluZSBQYXJzaW5nIE1vZHVsZQorICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEJldGhhcmQuCisKK1BFUCAzOTE6IERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBYWFggbm90IGRvY3VtZW50ZWQgaW4gbGlicmFyeSByZWZlcmVuY2UgeWV0OyBhZGQgbGluayBoZXJlIG9uY2UgaXQncyBhZGRlZC4KKworVGhlIDptb2Q6YGxvZ2dpbmdgIG1vZHVsZSBpcyB2ZXJ5IGZsZXhpYmxlOyBhcHBsaWNhdGlvbnMgY2FuIGRlZmluZQorYSB0cmVlIG9mIGxvZ2dpbmcgc3Vic3lzdGVtcywgYW5kIGVhY2ggbG9nZ2VyIGluIHRoaXMgdHJlZSBjYW4gZmlsdGVyCitvdXQgY2VydGFpbiBtZXNzYWdlcywgZm9ybWF0IHRoZW0gZGlmZmVyZW50bHksIGFuZCBkaXJlY3QgbWVzc2FnZXMgdG8KK2EgdmFyeWluZyBudW1iZXIgb2YgaGFuZGxlcnMuCisKK0FsbCB0aGlzIGZsZXhpYmlsaXR5IGNhbiByZXF1aXJlIGEgbG90IG9mIGNvbmZpZ3VyYXRpb24uICBZb3UgY2FuCit3cml0ZSBQeXRob24gc3RhdGVtZW50cyB0byBjcmVhdGUgb2JqZWN0cyBhbmQgc2V0IHRoZWlyIHByb3BlcnRpZXMsCitidXQgYSBjb21wbGV4IHNldC11cCByZXF1aXJlcyB2ZXJib3NlIGJ1dCBib3JpbmcgY29kZS4KKzptb2Q6YGxvZ2dpbmdgIGFsc28gc3VwcG9ydHMgYSA6ZnVuYzpgfmxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWdgCitmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIGZpbGUsIGJ1dCB0aGUgZmlsZSBmb3JtYXQgZG9lc24ndCBzdXBwb3J0Citjb25maWd1cmluZyBmaWx0ZXJzLCBhbmQgaXQncyBtZXNzaWVyIHRvIGdlbmVyYXRlIHByb2dyYW1tYXRpY2FsbHkuCisKK1B5dGhvbiAyLjcgYWRkcyBhIDpmdW5jOmB+bG9nZ2luZy5jb25maWcuZGljdENvbmZpZ2AgZnVuY3Rpb24gdGhhdAordXNlcyBhIGRpY3Rpb25hcnkgdG8gY29uZmlndXJlIGxvZ2dpbmcuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvCitwcm9kdWNlIGEgZGljdGlvbmFyeSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOiBjb25zdHJ1Y3Qgb25lIHdpdGggY29kZTsKK3BhcnNlIGEgZmlsZSBjb250YWluaW5nIEpTT047IG9yIHVzZSBhIFlBTUwgcGFyc2luZyBsaWJyYXJ5IGlmIG9uZSBpcworaW5zdGFsbGVkLgorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29uZmlndXJlcyB0d28gbG9nZ2VycywgdGhlIHJvb3QgbG9nZ2VyIGFuZCBhCitsb2dnZXIgbmFtZWQgIm5ldHdvcmsiLiAgIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIHJvb3QgbG9nZ2VyIHdpbGwgYmUKK3NlbnQgdG8gdGhlIHN5c3RlbSBsb2cgdXNpbmcgdGhlIHN5c2xvZyBwcm90b2NvbCwgYW5kIG1lc3NhZ2VzCit0byB0aGUgIm5ldHdvcmsiIGxvZ2dlciB3aWxsIGJlIHdyaXR0ZW4gdG8gYSA6ZmlsZTpgbmV0d29yay5sb2dgIGZpbGUKK3RoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNYi4KKworOjoKKworICAgIGltcG9ydCBsb2dnaW5nCisgICAgaW1wb3J0IGxvZ2dpbmcuY29uZmlnCisKKyAgICBjb25maWdkaWN0ID0geworICAgICAndmVyc2lvbic6IDEsICAgICMgQ29uZmlndXJhdGlvbiBzY2hlbWEgaW4gdXNlOyBtdXN0IGJlIDEgZm9yIG5vdworICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICdzdGFuZGFyZCc6IHsKKyAgICAgICAgICAgICAnZm9ybWF0JzogKCclKGFzY3RpbWUpcyAlKG5hbWUpLTE1cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAnJShsZXZlbG5hbWUpLThzICUobWVzc2FnZSlzJyl9fSwKKworICAgICAnaGFuZGxlcnMnOiB7J25ldGxvZyc6IHsnYmFja3VwQ291bnQnOiAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnL2xvZ3MvbmV0d29yay5sb2cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdsZXZlbCc6ICdJTkZPJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4Qnl0ZXMnOiAxMDI0KjEwMjR9LAorICAgICAgICAgICAgICAgICAgJ3N5c2xvZyc6IHsnY2xhc3MnOiAnbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICdzdGFuZGFyZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZXZlbCc6ICdFUlJPUid9fSwKKworICAgICAjIFNwZWNpZnkgYWxsIHRoZSBzdWJvcmRpbmF0ZSBsb2dnZXJzCisgICAgICdsb2dnZXJzJzogeworICAgICAgICAgICAgICAgICAnbmV0d29yayc6IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJzogWyduZXRsb2cnXQorICAgICAgICAgICAgICAgICB9CisgICAgIH0sCisgICAgICMgU3BlY2lmeSBwcm9wZXJ0aWVzIG9mIHRoZSByb290IGxvZ2dlcgorICAgICAncm9vdCc6IHsKKyAgICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydzeXNsb2cnXQorICAgICB9LAorICAgIH0KKworICAgICMgU2V0IHVwIGNvbmZpZ3VyYXRpb24KKyAgICBsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnKGNvbmZpZ2RpY3QpCisKKyAgICAjIEFzIGFuIGV4YW1wbGUsIGxvZyB0d28gZXJyb3IgbWVzc2FnZXMKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcignLycpCisgICAgbG9nZ2VyLmVycm9yKCdEYXRhYmFzZSBub3QgZm91bmQnKQorCisgICAgbmV0bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ25ldHdvcmsnKQorICAgIG5ldGxvZ2dlci5lcnJvcignQ29ubmVjdGlvbiBmYWlsZWQnKQorCitUaHJlZSBzbWFsbGVyIGVuaGFuY2VtZW50cyB0byB0aGUgOm1vZDpgbG9nZ2luZ2AgbW9kdWxlLCBhbGwKK2ltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLCBhcmU6CisKKy4uIHJldjc5MjkzCisKKyogVGhlIDpjbGFzczpgfmxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcmAgY2xhc3Mgbm93IHN1cHBvcnRzCisgIHN5c2xvZ2dpbmcgb3ZlciBUQ1AuICBUaGUgY29uc3RydWN0b3IgaGFzIGEgKnNvY2t0eXBlKiBwYXJhbWV0ZXIKKyAgZ2l2aW5nIHRoZSB0eXBlIG9mIHNvY2tldCB0byB1c2UsIGVpdGhlciA6Y29uc3Q6YHNvY2tldC5TT0NLX0RHUkFNYAorICBmb3IgVURQIG9yIDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCBmb3IgVENQLiAgVGhlIGRlZmF1bHQKKyAgcHJvdG9jb2wgcmVtYWlucyBVRFAuCisKKyogOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgZ2V0Q2hpbGRgIG1ldGhvZCB0aGF0IHJldHJpZXZlcyBhCisgIGRlc2NlbmRhbnQgbG9nZ2VyIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4gIEZvciBleGFtcGxlLAorICBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKKyAgY2FsbGluZyBgYGxvZy5nZXRDaGlsZCgnbmV0d29yay5saXN0ZW4nKWBgIGlzIGVxdWl2YWxlbnQgdG8KKyAgYGBnZXRMb2dnZXIoJ2FwcC5uZXR3b3JrLmxpc3RlbicpYGAuCisKKyogVGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3MgZ2FpbmVkIGEgOm1ldGg6YGlzRW5hYmxlZEZvcmAgbWV0aG9kCisgIHRoYXQgdGFrZXMgYSAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCisgIHByb2Nlc3MgYSBtZXNzYWdlIG9mIHRoYXQgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM5MWAgLSBEaWN0aW9uYXJ5LUJhc2VkIENvbmZpZ3VyYXRpb24gRm9yIExvZ2dpbmcKKyAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCitQRVAgMzEwNjogRGljdGlvbmFyeSBWaWV3cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgZGljdGlvbmFyeSBtZXRob2RzIDptZXRoOmBrZXlzYCwgOm1ldGg6YHZhbHVlc2AsIGFuZCA6bWV0aDpgaXRlbXNgCithcmUgZGlmZmVyZW50IGluIFB5dGhvbiAzLnguICBUaGV5IHJldHVybiBhbiBvYmplY3QgY2FsbGVkIGEgOmRmbjpgdmlld2AKK2luc3RlYWQgb2YgYSBmdWxseSBtYXRlcmlhbGl6ZWQgbGlzdC4KKworSXQncyBub3QgcG9zc2libGUgdG8gY2hhbmdlIHRoZSByZXR1cm4gdmFsdWVzIG9mIDptZXRoOmBrZXlzYCwKKzptZXRoOmB2YWx1ZXNgLCBhbmQgOm1ldGg6YGl0ZW1zYCBpbiBQeXRob24gMi43IGJlY2F1c2UgdG9vIG11Y2ggY29kZQord291bGQgYnJlYWsuICBJbnN0ZWFkIHRoZSAzLnggdmVyc2lvbnMgd2VyZSBhZGRlZCB1bmRlciB0aGUgbmV3IG5hbWVzCis6bWV0aDpgdmlld2tleXNgLCA6bWV0aDpgdmlld3ZhbHVlc2AsIGFuZCA6bWV0aDpgdmlld2l0ZW1zYC4KKworOjoKKworICAgID4+PiBkID0gZGljdCgoaSoxMCwgY2hyKDY1K2kpKSBmb3IgaSBpbiByYW5nZSgyNikpCisgICAgPj4+IGQKKyAgICB7MDogJ0EnLCAxMzA6ICdOJywgMTA6ICdCJywgMTQwOiAnTycsIDIwOiAuLi4sIDI1MDogJ1onfQorICAgID4+PiBkLnZpZXdrZXlzKCkKKyAgICBkaWN0X2tleXMoWzAsIDEzMCwgMTAsIDE0MCwgMjAsIDE1MCwgMzAsIC4uLiwgMjUwXSkKKworVmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGJ1dCB0aGUga2V5IGFuZCBpdGVtIHZpZXdzIGFsc28gYmVoYXZlCitsaWtlIHNldHMuICBUaGUgYGAmYGAgb3BlcmF0b3IgcGVyZm9ybXMgaW50ZXJzZWN0aW9uLCBhbmQgYGB8YGAKK3BlcmZvcm1zIGEgdW5pb246OgorCisgICAgPj4+IGQxID0gZGljdCgoaSoxMCwgY2hyKDY1K2kpKSBmb3IgaSBpbiByYW5nZSgyNikpCisgICAgPj4+IGQyID0gZGljdCgoaSoqLjUsIGkpIGZvciBpIGluIHJhbmdlKDEwMDApKQorICAgID4+PiBkMS52aWV3a2V5cygpICYgZDIudmlld2tleXMoKQorICAgIHNldChbMC4wLCAxMC4wLCAyMC4wLCAzMC4wXSkKKyAgICA+Pj4gZDEudmlld2tleXMoKSB8IHJhbmdlKDAsIDMwKQorICAgIHNldChbMCwgMSwgMTMwLCAzLCA0LCA1LCA2LCAuLi4sIDEyMCwgMjUwXSkKKworVGhlIHZpZXcga2VlcHMgdHJhY2sgb2YgdGhlIGRpY3Rpb25hcnkgYW5kIGl0cyBjb250ZW50cyBjaGFuZ2UgYXMgdGhlCitkaWN0aW9uYXJ5IGlzIG1vZGlmaWVkOjoKKworICAgID4+PiB2ayA9IGQudmlld2tleXMoKQorICAgID4+PiB2aworICAgIGRpY3Rfa2V5cyhbMCwgMTMwLCAxMCwgLi4uLCAyNTBdKQorICAgID4+PiBkWzI2MF0gPSAnJicKKyAgICA+Pj4gdmsKKyAgICBkaWN0X2tleXMoWzAsIDEzMCwgMjYwLCAxMCwgLi4uLCAyNTBdKQorCitIb3dldmVyLCBub3RlIHRoYXQgeW91IGNhbid0IGFkZCBvciByZW1vdmUga2V5cyB3aGlsZSB5b3UncmUgaXRlcmF0aW5nCitvdmVyIHRoZSB2aWV3OjoKKworICAgID4+PiBmb3IgayBpbiB2azoKKyAgICAuLi4gICAgIGRbayoyXSA9IGsKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFJ1bnRpbWVFcnJvcjogZGljdGlvbmFyeSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbgorCitZb3UgY2FuIHVzZSB0aGUgdmlldyBtZXRob2RzIGluIFB5dGhvbiAyLnggY29kZSwgYW5kIHRoZSAydG8zCitjb252ZXJ0ZXIgd2lsbCBjaGFuZ2UgdGhlbSB0byB0aGUgc3RhbmRhcmQgOm1ldGg6YGtleXNgLAorOm1ldGg6YHZhbHVlc2AsIGFuZCA6bWV0aDpgaXRlbXNgIG1ldGhvZHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTA2YCAtIFJldmFtcGluZyBkaWN0LmtleXMoKSwgLnZhbHVlcygpIGFuZCAuaXRlbXMoKQorICAgICBQRVAgd3JpdHRlbiBieSBHdWlkbyB2YW4gUm9zc3VtLgorICAgICBCYWNrcG9ydGVkIHRvIDIuNyBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aTsgOmlzc3VlOmAxOTY3YC4KKworCitQRVAgMzEzNzogVGhlIG1lbW9yeXZpZXcgT2JqZWN0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdCBwcm92aWRlcyBhIHZpZXcgb2YgYW5vdGhlciBvYmplY3QncworbWVtb3J5IGNvbnRlbnQgdGhhdCBtYXRjaGVzIHRoZSA6Y2xhc3M6YGJ5dGVzYCB0eXBlJ3MgaW50ZXJmYWNlLgorCisgICAgPj4+IGltcG9ydCBzdHJpbmcKKyAgICA+Pj4gbSA9IG1lbW9yeXZpZXcoc3RyaW5nLmxldHRlcnMpCisgICAgPj4+IG0KKyAgICA8bWVtb3J5IGF0IDB4MzdmODUwPgorICAgID4+PiBsZW4obSkgICAgICAgICAgICMgUmV0dXJucyBsZW5ndGggb2YgdW5kZXJseWluZyBvYmplY3QKKyAgICA1MgorICAgID4+PiBtWzBdLCBtWzI1XSwgbVsyNl0gICAjIEluZGV4aW5nIHJldHVybnMgb25lIGJ5dGUKKyAgICAoJ2EnLCAneicsICdBJykKKyAgICA+Pj4gbTIgPSBtWzA6MjZdICAgICAgICAgIyBTbGljaW5nIHJldHVybnMgYW5vdGhlciBtZW1vcnl2aWV3CisgICAgPj4+IG0yCisgICAgPG1lbW9yeSBhdCAweDM3ZjA4MD4KKworVGhlIGNvbnRlbnQgb2YgdGhlIHZpZXcgY2FuIGJlIGNvbnZlcnRlZCB0byBhIHN0cmluZyBvZiBieXRlcyBvcgorYSBsaXN0IG9mIGludGVnZXJzOgorCisgICAgPj4+IG0yLnRvYnl0ZXMoKQorICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKyAgICA+Pj4gbTIudG9saXN0KCkKKyAgICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAuLi4gMTIxLCAxMjJdCisgICAgPj4+CisKKzpjbGFzczpgbWVtb3J5dmlld2Agb2JqZWN0cyBhbGxvdyBtb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcgb2JqZWN0IGlmCitpdCdzIGEgbXV0YWJsZSBvYmplY3QuCisKKyAgICA+Pj4gbTJbMF0gPSA3NQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgVHlwZUVycm9yOiBjYW5ub3QgbW9kaWZ5IHJlYWQtb25seSBtZW1vcnkKKyAgICA+Pj4gYiA9IGJ5dGVhcnJheShzdHJpbmcubGV0dGVycykgICMgQ3JlYXRpbmcgYSBtdXRhYmxlIG9iamVjdAorICAgID4+PiBiCisgICAgYnl0ZWFycmF5KGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicpCisgICAgPj4+IG1iID0gbWVtb3J5dmlldyhiKQorICAgID4+PiBtYlswXSA9ICcqJyAgICAgICAgICMgQXNzaWduIHRvIHZpZXcsIGNoYW5naW5nIHRoZSBieXRlYXJyYXkuCisgICAgPj4+IGJbMDo1XSAgICAgICAgICAgICAgIyBUaGUgYnl0ZWFycmF5IGhhcyBiZWVuIGNoYW5nZWQuCisgICAgYnl0ZWFycmF5KGInKmJjZGUnKQorICAgID4+PgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzEzN2AgLSBJbW11dGFibGUgQnl0ZXMgYW5kIE11dGFibGUgQnVmZmVyCisgICAgIFBFUCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCisgICAgIEltcGxlbWVudGVkIGJ5IFRyYXZpcyBPbGlwaGFudCwgQW50b2luZSBQaXRyb3UgYW5kIG90aGVycy4KKyAgICAgQmFja3BvcnRlZCB0byAyLjcgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgMjM5NmAuCisKKworCitPdGhlciBMYW5ndWFnZSBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgc21hbGxlciBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvcmUgUHl0aG9uIGxhbmd1YWdlIGFyZToKKworKiBUaGUgc3ludGF4IGZvciBzZXQgbGl0ZXJhbHMgaGFzIGJlZW4gYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzLnguCisgIEN1cmx5IGJyYWNrZXRzIGFyZSB1c2VkIHRvIHN1cnJvdW5kIHRoZSBjb250ZW50cyBvZiB0aGUgcmVzdWx0aW5nCisgIG11dGFibGUgc2V0OyBzZXQgbGl0ZXJhbHMgYXJlCisgIGRpc3Rpbmd1aXNoZWQgZnJvbSBkaWN0aW9uYXJpZXMgYnkgbm90IGNvbnRhaW5pbmcgY29sb25zIGFuZCB2YWx1ZXMuCisgIGBge31gYCBjb250aW51ZXMgdG8gcmVwcmVzZW50IGFuIGVtcHR5IGRpY3Rpb25hcnk7IHVzZQorICBgYHNldCgpYGAgZm9yIGFuIGVtcHR5IHNldC4KKworICAgID4+PiB7MSwyLDMsNCw1fQorICAgIHNldChbMSwgMiwgMywgNCwgNV0pCisgICAgPj4+IHNldCgpICMgZW1wdHkgc2V0CisgICAgc2V0KFtdKQorICAgID4+PiB7fSAgICAjIGVtcHR5IGRpY3QKKyAgICB7fQorCisgIEJhY2twb3J0ZWQgYnkgQWxleGFuZHJlIFZhc3NhbG90dGk7IDppc3N1ZTpgMjMzNWAuCisKKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIGFyZSBhbm90aGVyIGZlYXR1cmUgYmFja3BvcnRlZCBmcm9tCisgIDMueCwgZ2VuZXJhbGl6aW5nIGxpc3QvZ2VuZXJhdG9yIGNvbXByZWhlbnNpb25zIHRvIHVzZQorICB0aGUgbGl0ZXJhbCBzeW50YXggZm9yIHNldHMgYW5kIGRpY3Rpb25hcmllcy4KKworICAgID4+PiB7eDogeCp4IGZvciB4IGluIHJhbmdlKDYpfQorICAgIHswOiAwLCAxOiAxLCAyOiA0LCAzOiA5LCA0OiAxNiwgNTogMjV9CisgICAgPj4+IHsoJ2EnKngpIGZvciB4IGluIHJhbmdlKDYpfQorICAgIHNldChbJycsICdhJywgJ2FhJywgJ2FhYScsICdhYWFhJywgJ2FhYWFhJ10pCisKKyAgQmFja3BvcnRlZCBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aTsgOmlzc3VlOmAyMzMzYC4KKworKiBUaGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBjYW4gbm93IHVzZSBtdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzCisgIGluIG9uZSBzdGF0ZW1lbnQuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0CisgIGFuZCBlYWNoIG9uZSBpcyB0cmVhdGVkIGFzIGJlZ2lubmluZyBhIG5ldyA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgorICBUaGlzIG1lYW5zIHRoYXQ6OgorCisgICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjoKKyAgICAgICAuLi4gc3VpdGUgb2Ygc3RhdGVtZW50cyAuLi4KKworICBpcyBlcXVpdmFsZW50IHRvOjoKKworICAgd2l0aCBBKCkgYXMgYToKKyAgICAgICB3aXRoIEIoKSBhcyBiOgorICAgICAgICAgICAuLi4gc3VpdGUgb2Ygc3RhdGVtZW50cyAuLi4KKworICBUaGUgOmZ1bmM6YGNvbnRleHRsaWIubmVzdGVkYCBmdW5jdGlvbiBwcm92aWRlcyBhIHZlcnkgc2ltaWxhcgorICBmdW5jdGlvbiwgc28gaXQncyBubyBsb25nZXIgbmVjZXNzYXJ5IGFuZCBoYXMgYmVlbiBkZXByZWNhdGVkLgorCisgIChQcm9wb3NlZCBpbiBodHRwOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5NDsgaW1wbGVtZW50ZWQgYnkKKyAgR2VvcmcgQnJhbmRsLikKKworKiBDb252ZXJzaW9ucyBiZXR3ZWVuIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIHN0cmluZ3MgYXJlCisgIG5vdyBjb3JyZWN0bHkgcm91bmRlZCBvbiBtb3N0IHBsYXRmb3Jtcy4gIFRoZXNlIGNvbnZlcnNpb25zIG9jY3VyCisgIGluIG1hbnkgZGlmZmVyZW50IHBsYWNlczogOmZ1bmM6YHN0cmAgb24KKyAgZmxvYXRzIGFuZCBjb21wbGV4IG51bWJlcnM7IHRoZSA6Y2xhc3M6YGZsb2F0YCBhbmQgOmNsYXNzOmBjb21wbGV4YAorICBjb25zdHJ1Y3RvcnM7CisgIG51bWVyaWMgZm9ybWF0dGluZzsgc2VyaWFsaXppbmcgYW5kCisgIGRlc2VyaWFsaXppbmcgZmxvYXRzIGFuZCBjb21wbGV4IG51bWJlcnMgdXNpbmcgdGhlCisgIDptb2Q6YG1hcnNoYWxgLCA6bW9kOmBwaWNrbGVgCisgIGFuZCA6bW9kOmBqc29uYCBtb2R1bGVzOworICBwYXJzaW5nIG9mIGZsb2F0IGFuZCBpbWFnaW5hcnkgbGl0ZXJhbHMgaW4gUHl0aG9uIGNvZGU7CisgIGFuZCA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgLXRvLWZsb2F0IGNvbnZlcnNpb24uCisKKyAgUmVsYXRlZCB0byB0aGlzLCB0aGUgOmZ1bmM6YHJlcHJgIG9mIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyICp4KgorICBub3cgcmV0dXJucyBhIHJlc3VsdCBiYXNlZCBvbiB0aGUgc2hvcnRlc3QgZGVjaW1hbCBzdHJpbmcgdGhhdCdzCisgIGd1YXJhbnRlZWQgdG8gcm91bmQgYmFjayB0byAqeCogdW5kZXIgY29ycmVjdCByb3VuZGluZyAod2l0aAorICByb3VuZC1oYWxmLXRvLWV2ZW4gcm91bmRpbmcgbW9kZSkuICBQcmV2aW91c2x5IGl0IGdhdmUgYSBzdHJpbmcKKyAgYmFzZWQgb24gcm91bmRpbmcgeCB0byAxNyBkZWNpbWFsIGRpZ2l0cy4KKworICAuLiBtYXliZSBhZGQgYW4gZXhhbXBsZT8KKworICBUaGUgcm91bmRpbmcgbGlicmFyeSByZXNwb25zaWJsZSBmb3IgdGhpcyBpbXByb3ZlbWVudCB3b3JrcyBvbgorICBXaW5kb3dzIGFuZCBvbiBVbml4IHBsYXRmb3JtcyB1c2luZyB0aGUgZ2NjLCBpY2MsIG9yIHN1bmNjCisgIGNvbXBpbGVycy4gIFRoZXJlIG1heSBiZSBhIHNtYWxsIG51bWJlciBvZiBwbGF0Zm9ybXMgd2hlcmUgY29ycmVjdAorICBvcGVyYXRpb24gb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBndWFyYW50ZWVkLCBzbyB0aGUgY29kZSBpcyBub3QKKyAgdXNlZCBvbiBzdWNoIHN5c3RlbXMuICBZb3UgY2FuIGZpbmQgb3V0IHdoaWNoIGNvZGUgaXMgYmVpbmcgdXNlZAorICBieSBjaGVja2luZyA6ZGF0YTpgc3lzLmZsb2F0X3JlcHJfc3R5bGVgLCAgd2hpY2ggd2lsbCBiZSBgYHNob3J0YGAKKyAgaWYgdGhlIG5ldyBjb2RlIGlzIGluIHVzZSBhbmQgYGBsZWdhY3lgYCBpZiBpdCBpc24ndC4KKworICBJbXBsZW1lbnRlZCBieSBFcmljIFNtaXRoIGFuZCBNYXJrIERpY2tpbnNvbiwgdXNpbmcgRGF2aWQgR2F5J3MKKyAgOmZpbGU6YGR0b2EuY2AgbGlicmFyeTsgOmlzc3VlOmA3MTE3YC4KKworKiBDb252ZXJzaW9ucyBmcm9tIGxvbmcgaW50ZWdlcnMgYW5kIHJlZ3VsYXIgaW50ZWdlcnMgdG8gZmxvYXRpbmcKKyAgcG9pbnQgbm93IHJvdW5kIGRpZmZlcmVudGx5LCByZXR1cm5pbmcgdGhlIGZsb2F0aW5nLXBvaW50IG51bWJlcgorICBjbG9zZXN0IHRvIHRoZSBudW1iZXIuICBUaGlzIGRvZXNuJ3QgbWF0dGVyIGZvciBzbWFsbCBpbnRlZ2VycyB0aGF0CisgIGNhbiBiZSBjb252ZXJ0ZWQgZXhhY3RseSwgYnV0IGZvciBsYXJnZSBudW1iZXJzIHRoYXQgd2lsbAorICB1bmF2b2lkYWJseSBsb3NlIHByZWNpc2lvbiwgUHl0aG9uIDIuNyBub3cgYXBwcm94aW1hdGVzIG1vcmUKKyAgY2xvc2VseS4gIEZvciBleGFtcGxlLCBQeXRob24gMi42IGNvbXB1dGVkIHRoZSBmb2xsb3dpbmc6OgorCisgICAgPj4+IG4gPSAyOTUxNDc5MDUxNzkzNTI4OTEzOTEKKyAgICA+Pj4gZmxvYXQobikKKyAgICAyLjk1MTQ3OTA1MTc5MzUyODNlKzIwCisgICAgPj4+IG4gLSBsb25nKGZsb2F0KG4pKQorICAgIDY1NTM1TAorCisgIFB5dGhvbiAyLjcncyBmbG9hdGluZy1wb2ludCByZXN1bHQgaXMgbGFyZ2VyLCBidXQgbXVjaCBjbG9zZXIgdG8gdGhlCisgIHRydWUgdmFsdWU6OgorCisgICAgPj4+IG4gPSAyOTUxNDc5MDUxNzkzNTI4OTEzOTEKKyAgICA+Pj4gZmxvYXQobikKKyAgICAyLjk1MTQ3OTA1MTc5MzUyODllKzIwCisgICAgPj4+IG4gLSBsb25nKGZsb2F0KG4pKQorICAgIC0xTAorCisgIChJbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAzMTY2YC4pCisKKyAgSW50ZWdlciBkaXZpc2lvbiBpcyBhbHNvIG1vcmUgYWNjdXJhdGUgaW4gaXRzIHJvdW5kaW5nIGJlaGF2aW91cnMuICAoQWxzbworICBpbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAxODExYC4pCisKKyogSW1wbGljaXQgY29lcmNpb24gZm9yIGNvbXBsZXggbnVtYmVycyBoYXMgYmVlbiByZW1vdmVkOyB0aGUgaW50ZXJwcmV0ZXIKKyAgd2lsbCBubyBsb25nZXIgZXZlciBhdHRlbXB0IHRvIGNhbGwgYSA6bWV0aDpgX19jb2VyY2VfX2AgbWV0aG9kIG9uIGNvbXBsZXgKKyAgb2JqZWN0cy4gIChSZW1vdmVkIGJ5IE1lYWRvciBJbmdlIGFuZCBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA1MjExYC4pCisKKyogVGhlIDptZXRoOmBzdHIuZm9ybWF0YCBtZXRob2Qgbm93IHN1cHBvcnRzIGF1dG9tYXRpYyBudW1iZXJpbmcgb2YgdGhlIHJlcGxhY2VtZW50CisgIGZpZWxkcy4gIFRoaXMgbWFrZXMgdXNpbmcgOm1ldGg6YHN0ci5mb3JtYXRgIG1vcmUgY2xvc2VseSByZXNlbWJsZSB1c2luZworICBgYCVzYGAgZm9ybWF0dGluZzo6CisKKyAgICA+Pj4gJ3t9Ont9Ont9Jy5mb3JtYXQoMjAwOSwgMDQsICdTdW5kYXknKQorICAgICcyMDA5OjQ6U3VuZGF5JworICAgID4+PiAne306e306e2RheX0nLmZvcm1hdCgyMDA5LCA0LCBkYXk9J1N1bmRheScpCisgICAgJzIwMDk6NDpTdW5kYXknCisKKyAgVGhlIGF1dG8tbnVtYmVyaW5nIHRha2VzIHRoZSBmaWVsZHMgZnJvbSBsZWZ0IHRvIHJpZ2h0LCBzbyB0aGUgZmlyc3QgYGB7Li4ufWBgCisgIHNwZWNpZmllciB3aWxsIHVzZSB0aGUgZmlyc3QgYXJndW1lbnQgdG8gOm1ldGg6YHN0ci5mb3JtYXRgLCB0aGUgbmV4dAorICBzcGVjaWZpZXIgd2lsbCB1c2UgdGhlIG5leHQgYXJndW1lbnQsIGFuZCBzbyBvbi4gIFlvdSBjYW4ndCBtaXggYXV0by1udW1iZXJpbmcKKyAgYW5kIGV4cGxpY2l0IG51bWJlcmluZyAtLSBlaXRoZXIgbnVtYmVyIGFsbCBvZiB5b3VyIHNwZWNpZmllciBmaWVsZHMgb3Igbm9uZQorICBvZiB0aGVtIC0tIGJ1dCB5b3UgY2FuIG1peCBhdXRvLW51bWJlcmluZyBhbmQgbmFtZWQgZmllbGRzLCBhcyBpbiB0aGUgc2Vjb25kCisgIGV4YW1wbGUgYWJvdmUuICAoQ29udHJpYnV0ZWQgYnkgRXJpYyBTbWl0aDsgOmlzc3VlOmA1MjM3YC4pCisKKyAgQ29tcGxleCBudW1iZXJzIG5vdyBjb3JyZWN0bHkgc3VwcG9ydCB1c2FnZSB3aXRoIDpmdW5jOmBmb3JtYXRgLAorICBhbmQgZGVmYXVsdCB0byBiZWluZyByaWdodC1hbGlnbmVkLgorICBTcGVjaWZ5aW5nIGEgcHJlY2lzaW9uIG9yIGNvbW1hLXNlcGFyYXRpb24gYXBwbGllcyB0byBib3RoIHRoZSByZWFsCisgIGFuZCBpbWFnaW5hcnkgcGFydHMgb2YgdGhlIG51bWJlciwgYnV0IGEgc3BlY2lmaWVkIGZpZWxkIHdpZHRoIGFuZAorICBhbGlnbm1lbnQgaXMgYXBwbGllZCB0byB0aGUgd2hvbGUgb2YgdGhlIHJlc3VsdGluZyBgYDEuNSszamBgCisgIG91dHB1dC4gIChDb250cmlidXRlZCBieSBFcmljIFNtaXRoOyA6aXNzdWU6YDE1ODhgIGFuZCA6aXNzdWU6YDc5ODhgLikKKworICBUaGUgJ0YnIGZvcm1hdCBjb2RlIG5vdyBhbHdheXMgZm9ybWF0cyBpdHMgb3V0cHV0IHVzaW5nIHVwcGVyY2FzZSBjaGFyYWN0ZXJzLAorICBzbyBpdCB3aWxsIG5vdyBwcm9kdWNlICdJTkYnIGFuZCAnTkFOJy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMgU21pdGg7IDppc3N1ZTpgMzM4MmAuKQorCisgIEEgbG93LWxldmVsIGNoYW5nZTogdGhlIDptZXRoOmBvYmplY3QuX19mb3JtYXRfX2AgbWV0aG9kIG5vdyB0cmlnZ2VycworICBhIDpleGM6YFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmdgIGlmIGl0J3MgcGFzc2VkIGEgZm9ybWF0IHN0cmluZywKKyAgYmVjYXVzZSB0aGUgOm1ldGg6YF9fZm9ybWF0X19gIG1ldGhvZCBmb3IgOmNsYXNzOmBvYmplY3RgIGNvbnZlcnRzCisgIHRoZSBvYmplY3QgdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gYW5kIGZvcm1hdHMgdGhhdC4gIFByZXZpb3VzbHkKKyAgdGhlIG1ldGhvZCBzaWxlbnRseSBhcHBsaWVkIHRoZSBmb3JtYXQgc3RyaW5nIHRvIHRoZSBzdHJpbmcKKyAgcmVwcmVzZW50YXRpb24sIGJ1dCB0aGF0IGNvdWxkIGhpZGUgbWlzdGFrZXMgaW4gUHl0aG9uIGNvZGUuICBJZgorICB5b3UncmUgc3VwcGx5aW5nIGZvcm1hdHRpbmcgaW5mb3JtYXRpb24gc3VjaCBhcyBhbiBhbGlnbm1lbnQgb3IKKyAgcHJlY2lzaW9uLCBwcmVzdW1hYmx5IHlvdSdyZSBleHBlY3RpbmcgdGhlIGZvcm1hdHRpbmcgdG8gYmUgYXBwbGllZAorICBpbiBzb21lIG9iamVjdC1zcGVjaWZpYyB3YXkuICAoRml4ZWQgYnkgRXJpYyBTbWl0aDsgOmlzc3VlOmA3OTk0YC4pCisKKyogVGhlIDpmdW5jOmBpbnRgIGFuZCA6ZnVuYzpgbG9uZ2AgdHlwZXMgZ2FpbmVkIGEgYGBiaXRfbGVuZ3RoYGAKKyAgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudAorICBpdHMgYXJndW1lbnQgaW4gYmluYXJ5OjoKKworICAgICAgPj4+IG4gPSAzNworICAgICAgPj4+IGJpbihuKQorICAgICAgJzBiMTAwMTAxJworICAgICAgPj4+IG4uYml0X2xlbmd0aCgpCisgICAgICA2CisgICAgICA+Pj4gbiA9IDIqKjEyMy0xCisgICAgICA+Pj4gbi5iaXRfbGVuZ3RoKCkKKyAgICAgIDEyMworICAgICAgPj4+IChuKzEpLmJpdF9sZW5ndGgoKQorICAgICAgMTI0CisKKyAgKENvbnRyaWJ1dGVkIGJ5IEZyZWRyaWsgSm9oYW5zc29uIGFuZCBWaWN0b3IgU3Rpbm5lcjsgOmlzc3VlOmAzNDM5YC4pCisKKyogVGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudCB3aWxsIG5vIGxvbmdlciB0cnkgYSByZWxhdGl2ZSBpbXBvcnQKKyAgaWYgYW4gYWJzb2x1dGUgaW1wb3J0IChlLmcuIGBgZnJvbSAub3MgaW1wb3J0IHNlcGBgKSBmYWlscy4gIFRoaXMKKyAgZml4ZXMgYSBidWcsIGJ1dCBjb3VsZCBwb3NzaWJseSBicmVhayBjZXJ0YWluIDprZXl3b3JkOmBpbXBvcnRgCisgIHN0YXRlbWVudHMgdGhhdCB3ZXJlIG9ubHkgd29ya2luZyBieSBhY2NpZGVudC4gIChGaXhlZCBieSBNZWFkb3IgSW5nZTsKKyAgOmlzc3VlOmA3OTAyYC4pCisKKyogSXQncyBub3cgcG9zc2libGUgZm9yIGEgc3ViY2xhc3Mgb2YgdGhlIGJ1aWx0LWluIDpjbGFzczpgdW5pY29kZWAgdHlwZQorICB0byBvdmVycmlkZSB0aGUgOm1ldGg6YF9fdW5pY29kZV9fYCBtZXRob2QuICAoSW1wbGVtZW50ZWQgYnkKKyAgVmljdG9yIFN0aW5uZXI7IDppc3N1ZTpgMTU4Mzg2M2AuKQorCisqIFRoZSA6Y2xhc3M6YGJ5dGVhcnJheWAgdHlwZSdzIDptZXRoOmB+Ynl0ZWFycmF5LnRyYW5zbGF0ZWAgbWV0aG9kIG5vdyBhY2NlcHRzCisgIGBgTm9uZWBgIGFzIGl0cyBmaXJzdCBhcmd1bWVudC4gIChGaXhlZCBieSBHZW9yZyBCcmFuZGw7CisgIDppc3N1ZTpgNDc1OWAuKQorCisgIC4uIGJ5dGVhcnJheSBkb2Vzbid0IHNlZW0gdG8gYmUgZG9jdW1lbnRlZAorCisqIFdoZW4gdXNpbmcgYGBAY2xhc3NtZXRob2RgYCBhbmQgYGBAc3RhdGljbWV0aG9kYGAgdG8gd3JhcAorICBtZXRob2RzIGFzIGNsYXNzIG9yIHN0YXRpYyBtZXRob2RzLCB0aGUgd3JhcHBlciBvYmplY3Qgbm93CisgIGV4cG9zZXMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gYXMgdGhlaXIgOmF0dHI6YF9fZnVuY19fYCBhdHRyaWJ1dGUuCisgIChDb250cmlidXRlZCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYywgYWZ0ZXIgYSBzdWdnZXN0aW9uIGJ5CisgIEdlb3JnZSBTYWtraXM7IDppc3N1ZTpgNTk4MmAuKQorCisqIFdoZW4gYSByZXN0cmljdGVkIHNldCBvZiBhdHRyaWJ1dGVzIHdlcmUgc2V0IHVzaW5nIGBgX19zbG90c19fYGAsCisgIGRlbGV0aW5nIGFuIHVuc2V0IGF0dHJpYnV0ZSB3b3VsZCBub3QgcmFpc2UgOmV4YzpgQXR0cmlidXRlRXJyb3JgCisgIGFzIHlvdSB3b3VsZCBleHBlY3QuICBGaXhlZCBieSBCZW5qYW1pbiBQZXRlcnNvbjsgOmlzc3VlOmA3NjA0YC4pCisKKyogVHdvIG5ldyBlbmNvZGluZ3MgYXJlIG5vdyBzdXBwb3J0ZWQ6ICJjcDcyMCIsIHVzZWQgcHJpbWFyaWx5IGZvcgorICBBcmFiaWMgdGV4dDsgYW5kICJjcDg1OCIsIGEgdmFyaWFudCBvZiBDUCA4NTAgdGhhdCBhZGRzIHRoZSBldXJvCisgIHN5bWJvbC4gIChDUDcyMCBjb250cmlidXRlZCBieSBBbGV4YW5kZXIgQmVsY2hlbmtvIGFuZCBBbWF1cnkKKyAgRm9yZ2VvdCBkJ0FyYyBpbiA6aXNzdWU6YDE2MTY5NzlgOyBDUDg1OCBjb250cmlidXRlZCBieSBUaW0gSGF0Y2ggaW4KKyAgOmlzc3VlOmA4MDE2YC4pCisKKyogVGhlIDpjbGFzczpgZmlsZWAgb2JqZWN0IHdpbGwgbm93IHNldCB0aGUgOmF0dHI6YGZpbGVuYW1lYCBhdHRyaWJ1dGUKKyAgb24gdGhlIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBvcGVuIGEgZGlyZWN0b3J5CisgIG9uIFBPU0lYIHBsYXRmb3JtcyAobm90ZWQgYnkgSmFuIEthbGlzemV3c2tpOyA6aXNzdWU6YDQ3NjRgKSwgYW5kCisgIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYW5kIGZvcmJpZHMgd3JpdGluZyB0byByZWFkLW9ubHkgZmlsZSBvYmplY3RzCisgIGluc3RlYWQgb2YgdHJ1c3RpbmcgdGhlIEMgbGlicmFyeSB0byBjYXRjaCBhbmQgcmVwb3J0IHRoZSBlcnJvcgorICAoZml4ZWQgYnkgU3RlZmFuIEtyYWg7IDppc3N1ZTpgNTY3N2ApLgorCisqIFRoZSBQeXRob24gdG9rZW5pemVyIG5vdyB0cmFuc2xhdGVzIGxpbmUgZW5kaW5ncyBpdHNlbGYsIHNvIHRoZQorICA6ZnVuYzpgY29tcGlsZWAgYnVpbHQtaW4gZnVuY3Rpb24gbm93IGFjY2VwdHMgY29kZSB1c2luZyBhbnkKKyAgbGluZS1lbmRpbmcgY29udmVudGlvbi4gIEFkZGl0aW9uYWxseSwgaXQgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoYXQgdGhlCisgIGNvZGUgZW5kIGluIGEgbmV3bGluZS4KKworKiBFeHRyYSBwYXJlbnRoZXNlcyBpbiBmdW5jdGlvbiBkZWZpbml0aW9ucyBhcmUgaWxsZWdhbCBpbiBQeXRob24gMy54LAorICBtZWFuaW5nIHRoYXQgeW91IGdldCBhIHN5bnRheCBlcnJvciBmcm9tIGBgZGVmIGYoKHgpKTogcGFzc2BgLiAgSW4KKyAgUHl0aG9uMy13YXJuaW5nIG1vZGUsIFB5dGhvbiAyLjcgd2lsbCBub3cgd2FybiBhYm91dCB0aGlzIG9kZCB1c2FnZS4KKyAgKE5vdGVkIGJ5IEphbWVzIExpbmdhcmQ7IDppc3N1ZTpgNzM2MmAuKQorCisqIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGNyZWF0ZSB3ZWFrIHJlZmVyZW5jZXMgdG8gb2xkLXN0eWxlIGNsYXNzCisgIG9iamVjdHMuICBOZXctc3R5bGUgY2xhc3NlcyB3ZXJlIGFsd2F5cyB3ZWFrLXJlZmVyZW5jZWFibGUuICAoRml4ZWQKKyAgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODI2OGAuKQorCisqIFdoZW4gYSBtb2R1bGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCB0aGUgbW9kdWxlJ3MgZGljdGlvbmFyeSBpcworICBub3cgb25seSBjbGVhcmVkIGlmIG5vIG9uZSBlbHNlIGlzIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlCisgIGRpY3Rpb25hcnkgKDppc3N1ZTpgNzE0MGApLgorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIF9uZXctMjctaW50ZXJwcmV0ZXI6CisKK0ludGVycHJldGVyIENoYW5nZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBuZXcgZW52aXJvbm1lbnQgdmFyaWFibGUsIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYCwKK2FsbG93cyBjb250cm9sbGluZyB3YXJuaW5ncy4gIEl0IHNob3VsZCBiZSBzZXQgdG8gYSBzdHJpbmcKK2NvbnRhaW5pbmcgd2FybmluZyBzZXR0aW5ncywgZXF1aXZhbGVudCB0byB0aG9zZQordXNlZCB3aXRoIHRoZSA6b3B0aW9uOmAtV2Agc3dpdGNoLCBzZXBhcmF0ZWQgYnkgY29tbWFzLgorKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbjsgOmlzc3VlOmA3MzAxYC4pCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHNldHRpbmcgd2lsbCBwcmludCB3YXJuaW5ncyBldmVyeSB0aW1lCit0aGV5IG9jY3VyLCBidXQgdHVybiB3YXJuaW5ncyBmcm9tIHRoZSA6bW9kOmBDb29raWVgIG1vZHVsZSBpbnRvIGFuCitlcnJvci4gIChUaGUgZXhhY3Qgc3ludGF4IGZvciBzZXR0aW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHZhcmllcworYWNyb3NzIG9wZXJhdGluZyBzeXN0ZW1zIGFuZCBzaGVsbHMuKQorCis6OgorCisgIGV4cG9ydCBQWVRIT05XQVJOSU5HUz1hbGwsZXJyb3I6OjpDb29raWU6MAorCisuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworT3B0aW1pemF0aW9ucworLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CisKKy4uICogQSBuZXcgOnByb2dyYW06YGNvbmZpZ3VyZWAgb3B0aW9uLCA6b3B0aW9uOmAtLXdpdGgtY29tcHV0ZWQtZ290b3NgLAorICAgY29tcGlsZXMgdGhlIG1haW4gYnl0ZWNvZGUgaW50ZXJwcmV0ZXIgbG9vcCB1c2luZyBhIG5ldyBkaXNwYXRjaAorICAgbWVjaGFuaXNtIHRoYXQgZ2l2ZXMgc3BlZWR1cHMgb2YgdXAgdG8gMjAlLCBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbQorICAgYW5kIGJlbmNobWFyay4gIFRoZSBuZXcgbWVjaGFuaXNtIGlzIG9ubHkgc3VwcG9ydGVkIG9uIGNlcnRhaW4KKyAgIGNvbXBpbGVycywgc3VjaCBhcyBnY2MsIFN1blBybywgYW5kIGljYy4KKworKiBBIG5ldyBvcGNvZGUgd2FzIGFkZGVkIHRvIHBlcmZvcm0gdGhlIGluaXRpYWwgc2V0dXAgZm9yCisgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLCBsb29raW5nIHVwIHRoZSA6bWV0aDpgX19lbnRlcl9fYCBhbmQKKyAgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2RzLiAgKENvbnRyaWJ1dGVkIGJ5IEJlbmphbWluIFBldGVyc29uLikKKworKiBUaGUgZ2FyYmFnZSBjb2xsZWN0b3Igbm93IHBlcmZvcm1zIGJldHRlciBmb3Igb25lIGNvbW1vbiB1c2FnZQorICBwYXR0ZXJuOiB3aGVuIG1hbnkgb2JqZWN0cyBhcmUgYmVpbmcgYWxsb2NhdGVkIHdpdGhvdXQgZGVhbGxvY2F0aW5nCisgIGFueSBvZiB0aGVtLiAgVGhpcyB3b3VsZCBwcmV2aW91c2x5IHRha2UgcXVhZHJhdGljCisgIHRpbWUgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbiwgYnV0IG5vdyB0aGUgbnVtYmVyIG9mIGZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9ucworICBpcyByZWR1Y2VkIGFzIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBvbiB0aGUgaGVhcCBncm93cy4KKyAgVGhlIG5ldyBsb2dpYyBvbmx5IHBlcmZvcm1zIGEgZnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcGFzcyB3aGVuCisgIHRoZSBtaWRkbGUgZ2VuZXJhdGlvbiBoYXMgYmVlbiBjb2xsZWN0ZWQgMTAgdGltZXMgYW5kIHdoZW4gdGhlCisgIG51bWJlciBvZiBzdXJ2aXZvciBvYmplY3RzIGZyb20gdGhlIG1pZGRsZSBnZW5lcmF0aW9uIGV4Y2VlZHMgMTAlIG9mCisgIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgb2xkZXN0IGdlbmVyYXRpb24uICAoU3VnZ2VzdGVkIGJ5IE1hcnRpbgorICB2b24gTMO2d2lzIGFuZCBpbXBsZW1lbnRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA0MDc0YC4pCisKKyogVGhlIGdhcmJhZ2UgY29sbGVjdG9yIHRyaWVzIHRvIGF2b2lkIHRyYWNraW5nIHNpbXBsZSBjb250YWluZXJzCisgIHdoaWNoIGNhbid0IGJlIHBhcnQgb2YgYSBjeWNsZS4gSW4gUHl0aG9uIDIuNywgdGhpcyBpcyBub3cgdHJ1ZSBmb3IKKyAgdHVwbGVzIGFuZCBkaWN0cyBjb250YWluaW5nIGF0b21pYyB0eXBlcyAoc3VjaCBhcyBpbnRzLCBzdHJpbmdzLAorICBldGMuKS4gVHJhbnNpdGl2ZWx5LCBhIGRpY3QgY29udGFpbmluZyB0dXBsZXMgb2YgYXRvbWljIHR5cGVzIHdvbid0CisgIGJlIHRyYWNrZWQgZWl0aGVyLiBUaGlzIGhlbHBzIHJlZHVjZSB0aGUgY29zdCBvZiBlYWNoCisgIGdhcmJhZ2UgY29sbGVjdGlvbiBieSBkZWNyZWFzaW5nIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBiZQorICBjb25zaWRlcmVkIGFuZCB0cmF2ZXJzZWQgYnkgdGhlIGNvbGxlY3Rvci4KKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDQ2ODhgLikKKworKiBMb25nIGludGVnZXJzIGFyZSBub3cgc3RvcmVkIGludGVybmFsbHkgZWl0aGVyIGluIGJhc2UgMioqMTUgb3IgaW4gYmFzZQorICAyKiozMCwgdGhlIGJhc2UgYmVpbmcgZGV0ZXJtaW5lZCBhdCBidWlsZCB0aW1lLiAgUHJldmlvdXNseSwgdGhleQorICB3ZXJlIGFsd2F5cyBzdG9yZWQgaW4gYmFzZSAyKioxNS4gIFVzaW5nIGJhc2UgMioqMzAgZ2l2ZXMKKyAgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9uIDY0LWJpdCBtYWNoaW5lcywgYnV0CisgIGJlbmNobWFyayByZXN1bHRzIG9uIDMyLWJpdCBtYWNoaW5lcyBoYXZlIGJlZW4gbWl4ZWQuICBUaGVyZWZvcmUsCisgIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSBiYXNlIDIqKjMwIG9uIDY0LWJpdCBtYWNoaW5lcyBhbmQgYmFzZSAyKioxNQorICBvbiAzMi1iaXQgbWFjaGluZXM7IG9uIFVuaXgsIHRoZXJlJ3MgYSBuZXcgY29uZmlndXJlIG9wdGlvbgorICA6b3B0aW9uOmAtLWVuYWJsZS1iaWctZGlnaXRzYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4KKworICBBcGFydCBmcm9tIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMgdGhpcyBjaGFuZ2Ugc2hvdWxkIGJlCisgIGludmlzaWJsZSB0byBlbmQgdXNlcnMsIHdpdGggb25lIGV4Y2VwdGlvbjogZm9yIHRlc3RpbmcgYW5kCisgIGRlYnVnZ2luZyBwdXJwb3NlcyB0aGVyZSdzIGEgbmV3IHN0cnVjdHNlcSA6ZGF0YTpgc3lzLmxvbmdfaW5mb2AgdGhhdAorICBwcm92aWRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJuYWwgZm9ybWF0LCBnaXZpbmcgdGhlIG51bWJlciBvZgorICBiaXRzIHBlciBkaWdpdCBhbmQgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIEMgdHlwZSB1c2VkIHRvIHN0b3JlCisgIGVhY2ggZGlnaXQ6OgorCisgICAgID4+PiBpbXBvcnQgc3lzCisgICAgID4+PiBzeXMubG9uZ19pbmZvCisgICAgIHN5cy5sb25nX2luZm8oYml0c19wZXJfZGlnaXQ9MzAsIHNpemVvZl9kaWdpdD00KQorCisgIChDb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA0MjU4YC4pCisKKyAgQW5vdGhlciBzZXQgb2YgY2hhbmdlcyBtYWRlIGxvbmcgb2JqZWN0cyBhIGZldyBieXRlcyBzbWFsbGVyOiAyIGJ5dGVzCisgIHNtYWxsZXIgb24gMzItYml0IHN5c3RlbXMgYW5kIDYgYnl0ZXMgb24gNjQtYml0LgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTI2MGAuKQorCisqIFRoZSBkaXZpc2lvbiBhbGdvcml0aG0gZm9yIGxvbmcgaW50ZWdlcnMgaGFzIGJlZW4gbWFkZSBmYXN0ZXIKKyAgYnkgdGlnaHRlbmluZyB0aGUgaW5uZXIgbG9vcCwgZG9pbmcgc2hpZnRzIGluc3RlYWQgb2YgbXVsdGlwbGljYXRpb25zLAorICBhbmQgZml4aW5nIGFuIHVubmVjZXNzYXJ5IGV4dHJhIGl0ZXJhdGlvbi4KKyAgVmFyaW91cyBiZW5jaG1hcmtzIHNob3cgc3BlZWR1cHMgb2YgYmV0d2VlbiA1MCUgYW5kIDE1MCUgZm9yIGxvbmcKKyAgaW50ZWdlciBkaXZpc2lvbnMgYW5kIG1vZHVsbyBvcGVyYXRpb25zLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTUxMmAuKQorICBCaXR3aXNlIG9wZXJhdGlvbnMgYXJlIGFsc28gc2lnbmlmaWNhbnRseSBmYXN0ZXIgKGluaXRpYWwgcGF0Y2ggYnkKKyAgR3JlZ29yeSBTbWl0aDsgOmlzc3VlOmAxMDg3NDE4YCkuCisKKyogVGhlIGltcGxlbWVudGF0aW9uIG9mIGBgJWBgIGNoZWNrcyBmb3IgdGhlIGxlZnQtc2lkZSBvcGVyYW5kIGJlaW5nCisgIGEgUHl0aG9uIHN0cmluZyBhbmQgc3BlY2lhbC1jYXNlcyBpdDsgdGhpcyByZXN1bHRzIGluIGEgMS0zJQorICBwZXJmb3JtYW5jZSBpbmNyZWFzZSBmb3IgYXBwbGljYXRpb25zIHRoYXQgZnJlcXVlbnRseSB1c2UgYGAlYGAKKyAgd2l0aCBzdHJpbmdzLCBzdWNoIGFzIHRlbXBsYXRpbmcgbGlicmFyaWVzLgorICAoSW1wbGVtZW50ZWQgYnkgQ29sbGluIFdpbnRlcjsgOmlzc3VlOmA1MTc2YC4pCisKKyogTGlzdCBjb21wcmVoZW5zaW9ucyB3aXRoIGFuIGBgaWZgYCBjb25kaXRpb24gYXJlIGNvbXBpbGVkIGludG8KKyAgZmFzdGVyIGJ5dGVjb2RlLiAgKFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LCBiYWNrLXBvcnRlZCB0byAyLjcKKyAgYnkgSmVmZnJleSBZYXNza2luOyA6aXNzdWU6YDQ3MTVgLikKKworKiBDb252ZXJ0aW5nIGFuIGludGVnZXIgb3IgbG9uZyBpbnRlZ2VyIHRvIGEgZGVjaW1hbCBzdHJpbmcgd2FzIG1hZGUKKyAgZmFzdGVyIGJ5IHNwZWNpYWwtY2FzaW5nIGJhc2UgMTAgaW5zdGVhZCBvZiB1c2luZyBhIGdlbmVyYWxpemVkCisgIGNvbnZlcnNpb24gZnVuY3Rpb24gdGhhdCBzdXBwb3J0cyBhcmJpdHJhcnkgYmFzZXMuCisgIChQYXRjaCBieSBHYXdhaW4gQm9sdG9uOyA6aXNzdWU6YDY3MTNgLikKKworKiBUaGUgOm1ldGg6YHNwbGl0YCwgOm1ldGg6YHJlcGxhY2VgLCA6bWV0aDpgcmluZGV4YCwKKyAgOm1ldGg6YHJwYXJ0aXRpb25gLCBhbmQgOm1ldGg6YHJzcGxpdGAgbWV0aG9kcyBvZiBzdHJpbmctbGlrZSB0eXBlcworICAoc3RyaW5ncywgVW5pY29kZSBzdHJpbmdzLCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIG9iamVjdHMpIG5vdyB1c2UgYQorICBmYXN0IHJldmVyc2Utc2VhcmNoIGFsZ29yaXRobSBpbnN0ZWFkIG9mIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlcgorICBzY2FuLiAgVGhpcyBpcyBzb21ldGltZXMgZmFzdGVyIGJ5IGEgZmFjdG9yIG9mIDEwLiAgKEFkZGVkIGJ5CisgIEZsb3JlbnQgWGljbHVuYTsgOmlzc3VlOmA3NDYyYCBhbmQgOmlzc3VlOmA3NjIyYC4pCisKKyogVGhlIDptb2Q6YHBpY2tsZWAgYW5kIDptb2Q6YGNQaWNrbGVgIG1vZHVsZXMgbm93IGF1dG9tYXRpY2FsbHkKKyAgaW50ZXJuIHRoZSBzdHJpbmdzIHVzZWQgZm9yIGF0dHJpYnV0ZSBuYW1lcywgcmVkdWNpbmcgbWVtb3J5IHVzYWdlCisgIG9mIHRoZSBvYmplY3RzIHJlc3VsdGluZyBmcm9tIHVucGlja2xpbmcuICAoQ29udHJpYnV0ZWQgYnkgSmFrZQorICBNY0d1aXJlOyA6aXNzdWU6YDUwODRgLikKKworKiBUaGUgOm1vZDpgY1BpY2tsZWAgbW9kdWxlIG5vdyBzcGVjaWFsLWNhc2VzIGRpY3Rpb25hcmllcywKKyAgbmVhcmx5IGhhbHZpbmcgdGhlIHRpbWUgcmVxdWlyZWQgdG8gcGlja2xlIHRoZW0uCisgIChDb250cmlidXRlZCBieSBDb2xsaW4gV2ludGVyOyA6aXNzdWU6YDU2NzBgLikKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOZXcgYW5kIEltcHJvdmVkIE1vZHVsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitBcyBpbiBldmVyeSByZWxlYXNlLCBQeXRob24ncyBzdGFuZGFyZCBsaWJyYXJ5IHJlY2VpdmVkIGEgbnVtYmVyIG9mCitlbmhhbmNlbWVudHMgYW5kIGJ1ZyBmaXhlcy4gIEhlcmUncyBhIHBhcnRpYWwgbGlzdCBvZiB0aGUgbW9zdCBub3RhYmxlCitjaGFuZ2VzLCBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgYnkgbW9kdWxlIG5hbWUuIENvbnN1bHQgdGhlCis6ZmlsZTpgTWlzYy9ORVdTYCBmaWxlIGluIHRoZSBzb3VyY2UgdHJlZSBmb3IgYSBtb3JlIGNvbXBsZXRlIGxpc3Qgb2YKK2NoYW5nZXMsIG9yIGxvb2sgdGhyb3VnaCB0aGUgU3VidmVyc2lvbiBsb2dzIGZvciBhbGwgdGhlIGRldGFpbHMuCisKKyogVGhlIDptb2Q6YGJkYmAgbW9kdWxlJ3MgYmFzZSBkZWJ1Z2dpbmcgY2xhc3MgOmNsYXNzOmB+YmRiLkJkYmAKKyAgZ2FpbmVkIGEgZmVhdHVyZSBmb3Igc2tpcHBpbmcgbW9kdWxlcy4gIFRoZSBjb25zdHJ1Y3RvcgorICBub3cgdGFrZXMgYW4gaXRlcmFibGUgY29udGFpbmluZyBnbG9iLXN0eWxlIHBhdHRlcm5zIHN1Y2ggYXMKKyAgYGBkamFuZ28uKmBgOyB0aGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIHN0YWNrIGZyYW1lcworICBmcm9tIGEgbW9kdWxlIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgcGF0dGVybnMuCisgIChDb250cmlidXRlZCBieSBNYXJ1IE5ld2J5IGFmdGVyIGEgc3VnZ2VzdGlvbiBieQorICBTZW50aGlsIEt1bWFyYW47IDppc3N1ZTpgNTE0MmAuKQorCisqIFRoZSA6bW9kOmBiaW5hc2NpaWAgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgYnVmZmVyIEFQSSwgc28gaXQgY2FuIGJlCisgIHVzZWQgd2l0aCA6Y2xhc3M6YG1lbW9yeXZpZXdgIGluc3RhbmNlcyBhbmQgb3RoZXIgc2ltaWxhciBidWZmZXIgb2JqZWN0cy4KKyAgKEJhY2twb3J0ZWQgZnJvbSAzLnggYnkgRmxvcmVudCBYaWNsdW5hOyA6aXNzdWU6YDc3MDNgLikKKworKiBVcGRhdGVkIG1vZHVsZTogdGhlIDptb2Q6YGJzZGRiYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCBmcm9tIDQuNy4yZGV2ZWw5CisgIHRvIHZlcnNpb24gNC44LjQgb2YKKyAgYHRoZSBweWJzZGRiIHBhY2thZ2UgPGh0dHA6Ly93d3cuamNlYS5lcy9wcm9ncmFtYWNpb24vcHlic2RkYi5odG0+YF9fLgorICBUaGUgbmV3IHZlcnNpb24gZmVhdHVyZXMgYmV0dGVyIFB5dGhvbiAzLnggY29tcGF0aWJpbGl0eSwgdmFyaW91cyBidWcgZml4ZXMsCisgIGFuZCBhZGRzIHNldmVyYWwgbmV3IEJlcmtlbGV5REIgZmxhZ3MgYW5kIG1ldGhvZHMuCisgIChVcGRhdGVkIGJ5IEplc8O6cyBDZWEgQXZpw7NuOyA6aXNzdWU6YDgxNTZgLiAgVGhlIHB5YnNkZGIKKyAgY2hhbmdlbG9nIGNhbiBiZSByZWFkIGF0IGh0dHA6Ly9oZy5qY2VhLmVzL3B5YnNkZGIvZmlsZS90aXAvQ2hhbmdlTG9nLikKKworKiBUaGUgOm1vZDpgYnoyYCBtb2R1bGUncyA6Y2xhc3M6YH5iejIuQloyRmlsZWAgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0CisgIG1hbmFnZW1lbnQgcHJvdG9jb2wsIHNvIHlvdSBjYW4gd3JpdGUgYGB3aXRoIGJ6Mi5CWjJGaWxlKC4uLikgYXMgZjpgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEhhZ2VuIEbDvHJzdGVuYXU7IDppc3N1ZTpgMzg2MGAuKQorCisqIE5ldyBjbGFzczogdGhlIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIGNsYXNzIGluIHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AKKyAgbW9kdWxlIGlzIHVzZWZ1bCBmb3IgdGFsbHlpbmcgZGF0YS4gIDpjbGFzczpgfmNvbGxlY3Rpb25zLkNvdW50ZXJgIGluc3RhbmNlcworICBiZWhhdmUgbW9zdGx5IGxpa2UgZGljdGlvbmFyaWVzIGJ1dCByZXR1cm4gemVybyBmb3IgbWlzc2luZyBrZXlzIGluc3RlYWQgb2YKKyAgcmFpc2luZyBhIDpleGM6YEtleUVycm9yYDoKKworICAuLiBkb2N0ZXN0OjoKKyAgICAgOm9wdGlvbnM6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorCisgICAgID4+PiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyCisgICAgID4+PiBjID0gQ291bnRlcigpCisgICAgID4+PiBmb3IgbGV0dGVyIGluICdoZXJlIGlzIGEgc2FtcGxlIG9mIGVuZ2xpc2ggdGV4dCc6CisgICAgIC4uLiAgIGNbbGV0dGVyXSArPSAxCisgICAgIC4uLgorICAgICA+Pj4gYworICAgICBDb3VudGVyKHsnICc6IDYsICdlJzogNSwgJ3MnOiAzLCAnYSc6IDIsICdpJzogMiwgJ2gnOiAyLAorICAgICAnbCc6IDIsICd0JzogMiwgJ2cnOiAxLCAnZic6IDEsICdtJzogMSwgJ28nOiAxLCAnbic6IDEsCisgICAgICdwJzogMSwgJ3InOiAxLCAneCc6IDF9KQorICAgICA+Pj4gY1snZSddCisgICAgIDUKKyAgICAgPj4+IGNbJ3onXQorICAgICAwCisKKyAgVGhlcmUgYXJlIHRocmVlIGFkZGl0aW9uYWwgOmNsYXNzOmB+Y29sbGVjdGlvbnMuQ291bnRlcmAgbWV0aG9kcy4KKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5Db3VudGVyLm1vc3RfY29tbW9uYCByZXR1cm5zIHRoZSBOIG1vc3QgY29tbW9uCisgIGVsZW1lbnRzIGFuZCB0aGVpciBjb3VudHMuICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNvdW50ZXIuZWxlbWVudHNgCisgIHJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciB0aGUgY29udGFpbmVkIGVsZW1lbnRzLCByZXBlYXRpbmcgZWFjaAorICBlbGVtZW50IGFzIG1hbnkgdGltZXMgYXMgaXRzIGNvdW50LgorICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNvdW50ZXIuc3VidHJhY3RgIHRha2VzIGFuIGl0ZXJhYmxlIGFuZAorICBzdWJ0cmFjdHMgb25lIGZvciBlYWNoIGVsZW1lbnQgaW5zdGVhZCBvZiBhZGRpbmc7IGlmIHRoZSBhcmd1bWVudCBpcworICBhIGRpY3Rpb25hcnkgb3IgYW5vdGhlciA6Y2xhc3M6YENvdW50ZXJgLCB0aGUgY291bnRzIGFyZQorICBzdWJ0cmFjdGVkLiA6OgorCisgICAgPj4+IGMubW9zdF9jb21tb24oNSkKKyAgICBbKCcgJywgNiksICgnZScsIDUpLCAoJ3MnLCAzKSwgKCdhJywgMiksICgnaScsIDIpXQorICAgID4+PiBjLmVsZW1lbnRzKCkgLT4KKyAgICAgICAnYScsICdhJywgJyAnLCAnICcsICcgJywgJyAnLCAnICcsICcgJywKKyAgICAgICAnZScsICdlJywgJ2UnLCAnZScsICdlJywgJ2cnLCAnZicsICdpJywgJ2knLAorICAgICAgICdoJywgJ2gnLCAnbScsICdsJywgJ2wnLCAnbycsICduJywgJ3AnLCAncycsCisgICAgICAgJ3MnLCAncycsICdyJywgJ3QnLCAndCcsICd4JworICAgID4+PiBjWydlJ10KKyAgICA1CisgICAgPj4+IGMuc3VidHJhY3QoJ3ZlcnkgaGVhdnkgb24gdGhlIGxldHRlciBlJykKKyAgICA+Pj4gY1snZSddICAgICMgQ291bnQgaXMgbm93IGxvd2VyCisgICAgLTEKKworICBDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmAxNjk2MTk5YC4KKworICAuLiByZXZpc2lvbiA3OTY2MAorCisgIE5ldyBjbGFzczogOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIGlzIGRlc2NyaWJlZCBpbiB0aGUgZWFybGllcgorICBzZWN0aW9uIDpyZWY6YHBlcC0wMzcyYC4KKworICBOZXcgbWV0aG9kOiBUaGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMuZGVxdWVgIGRhdGEgdHlwZSBub3cgaGFzIGEKKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5jb3VudGAgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mCisgIGNvbnRhaW5lZCBlbGVtZW50cyBlcXVhbCB0byB0aGUgc3VwcGxpZWQgYXJndW1lbnQgKngqLCBhbmQgYQorICA6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLnJldmVyc2VgIG1ldGhvZCB0aGF0IHJldmVyc2VzIHRoZSBlbGVtZW50cworICBvZiB0aGUgZGVxdWUgaW4tcGxhY2UuICA6Y2xhc3M6YGRlcXVlYCBhbHNvIGV4cG9zZXMgaXRzIG1heGltdW0KKyAgbGVuZ3RoIGFzIHRoZSByZWFkLW9ubHkgOmF0dHI6YH5jb2xsZWN0aW9ucy5kZXF1ZS5tYXhsZW5gIGF0dHJpYnV0ZS4KKyAgKEJvdGggZmVhdHVyZXMgYWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQorCisgIFRoZSA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBjbGFzcyBub3cgaGFzIGFuIG9wdGlvbmFsICpyZW5hbWUqIHBhcmFtZXRlci4KKyAgSWYgKnJlbmFtZSogaXMgdHJ1ZSwgZmllbGQgbmFtZXMgdGhhdCBhcmUgaW52YWxpZCBiZWNhdXNlIHRoZXkndmUKKyAgYmVlbiByZXBlYXRlZCBvciBhcmVuJ3QgbGVnYWwgUHl0aG9uIGlkZW50aWZpZXJzIHdpbGwgYmUKKyAgcmVuYW1lZCB0byBsZWdhbCBuYW1lcyB0aGF0IGFyZSBkZXJpdmVkIGZyb20gdGhlIGZpZWxkJ3MKKyAgcG9zaXRpb24gd2l0aGluIHRoZSBsaXN0IG9mIGZpZWxkczoKKworICAgICA+Pj4gZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorICAgICA+Pj4gVCA9IG5hbWVkdHVwbGUoJ1QnLCBbJ2ZpZWxkMScsICckaWxsZWdhbCcsICdmb3InLCAnZmllbGQyJ10sIHJlbmFtZT1UcnVlKQorICAgICA+Pj4gVC5fZmllbGRzCisgICAgICgnZmllbGQxJywgJ18xJywgJ18yJywgJ2ZpZWxkMicpCisKKyAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDE4MThgLikKKworICBGaW5hbGx5LCB0aGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMuTWFwcGluZ2AgYWJzdHJhY3QgYmFzZSBjbGFzcyBub3cKKyAgcmV0dXJucyA6Y29uc3Q6YE5vdEltcGxlbWVudGVkYCBpZiBhIG1hcHBpbmcgaXMgY29tcGFyZWQgdG8KKyAgYW5vdGhlciB0eXBlIHRoYXQgaXNuJ3QgYSA6Y2xhc3M6YE1hcHBpbmdgLgorICAoRml4ZWQgYnkgRGFuaWVsIFN0dXR6YmFjaDsgOmlzc3VlOmA4NzI5YC4pCisKKyogQ29uc3RydWN0b3JzIGZvciB0aGUgcGFyc2luZyBjbGFzc2VzIGluIHRoZSA6bW9kOmBDb25maWdQYXJzZXJgIG1vZHVsZSBub3cKKyAgdGFrZSBhICphbGxvd19ub192YWx1ZSogcGFyYW1ldGVyLCBkZWZhdWx0aW5nIHRvIGZhbHNlOyBpZiB0cnVlLAorICBvcHRpb25zIHdpdGhvdXQgdmFsdWVzIHdpbGwgYmUgYWxsb3dlZC4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBpbXBvcnQgQ29uZmlnUGFyc2VyLCBTdHJpbmdJTworICAgID4+PiBzYW1wbGVfY29uZmlnID0gIiIiCisgICAgLi4uIFtteXNxbGRdCisgICAgLi4uIHVzZXIgPSBteXNxbAorICAgIC4uLiBwaWQtZmlsZSA9IC92YXIvcnVuL215c3FsZC9teXNxbGQucGlkCisgICAgLi4uIHNraXAtYmRiCisgICAgLi4uICIiIgorICAgID4+PiBjb25maWcgPSBDb25maWdQYXJzZXIuUmF3Q29uZmlnUGFyc2VyKGFsbG93X25vX3ZhbHVlPVRydWUpCisgICAgPj4+IGNvbmZpZy5yZWFkZnAoU3RyaW5nSU8uU3RyaW5nSU8oc2FtcGxlX2NvbmZpZykpCisgICAgPj4+IGNvbmZpZy5nZXQoJ215c3FsZCcsICd1c2VyJykKKyAgICAnbXlzcWwnCisgICAgPj4+IHByaW50IGNvbmZpZy5nZXQoJ215c3FsZCcsICdza2lwLWJkYicpCisgICAgTm9uZQorICAgID4+PiBwcmludCBjb25maWcuZ2V0KCdteXNxbGQnLCAndW5rbm93bicpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgTm9PcHRpb25FcnJvcjogTm8gb3B0aW9uICd1bmtub3duJyBpbiBzZWN0aW9uOiAnbXlzcWxkJworCisgIChDb250cmlidXRlZCBieSBNYXRzIEtpbmRhaGw7IDppc3N1ZTpgNzAwNWAuKQorCisqIERlcHJlY2F0ZWQgZnVuY3Rpb246IDpmdW5jOmBjb250ZXh0bGliLm5lc3RlZGAsIHdoaWNoIGFsbG93cworICBoYW5kbGluZyBtb3JlIHRoYW4gb25lIGNvbnRleHQgbWFuYWdlciB3aXRoIGEgc2luZ2xlIDprZXl3b3JkOmB3aXRoYAorICBzdGF0ZW1lbnQsIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGJlY2F1c2UgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQKKyAgbm93IHN1cHBvcnRzIG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMuCisKKyogVGhlIDptb2Q6YGNvb2tpZWxpYmAgbW9kdWxlIG5vdyBpZ25vcmVzIGNvb2tpZXMgdGhhdCBoYXZlIGFuIGludmFsaWQKKyAgdmVyc2lvbiBmaWVsZCwgb25lIHRoYXQgZG9lc24ndCBjb250YWluIGFuIGludGVnZXIgdmFsdWUuICAoRml4ZWQgYnkKKyAgSm9obiBKLiBMZWU7IDppc3N1ZTpgMzkyNGAuKQorCisqIFRoZSA6bW9kOmBjb3B5YCBtb2R1bGUncyA6ZnVuYzpgfmNvcHkuZGVlcGNvcHlgIGZ1bmN0aW9uIHdpbGwgbm93CisgIGNvcnJlY3RseSBjb3B5IGJvdW5kIGluc3RhbmNlIG1ldGhvZHMuICAoSW1wbGVtZW50ZWQgYnkKKyAgUm9iZXJ0IENvbGxpbnM7IDppc3N1ZTpgMTUxNWAuKQorCisqIFRoZSA6bW9kOmBjdHlwZXNgIG1vZHVsZSBub3cgYWx3YXlzIGNvbnZlcnRzIGBgTm9uZWBgIHRvIGEgQyBOVUxMCisgIHBvaW50ZXIgZm9yIGFyZ3VtZW50cyBkZWNsYXJlZCBhcyBwb2ludGVycy4gIChDaGFuZ2VkIGJ5IFRob21hcworICBIZWxsZXI7IDppc3N1ZTpgNDYwNmAuKSAgVGhlIHVuZGVybHlpbmcgYGxpYmZmaSBsaWJyYXJ5CisgIDxodHRwOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz5gX18gaGFzIGJlZW4gdXBkYXRlZCB0byB2ZXJzaW9uCisgIDMuMC45LCBjb250YWluaW5nIHZhcmlvdXMgZml4ZXMgZm9yIGRpZmZlcmVudCBwbGF0Zm9ybXMuICAoVXBkYXRlZAorICBieSBNYXR0aGlhcyBLbG9zZTsgOmlzc3VlOmA4MTQyYC4pCisKKyogTmV3IG1ldGhvZDogdGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUncyA6Y2xhc3M6YH5kYXRldGltZS50aW1lZGVsdGFgIGNsYXNzCisgIGdhaW5lZCBhIDptZXRoOmB+ZGF0ZXRpbWUudGltZWRlbHRhLnRvdGFsX3NlY29uZHNgIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlCisgIG51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbi4gIChDb250cmlidXRlZCBieSBCcmlhbiBRdWlubGFuOyA6aXNzdWU6YDU3ODhgLikKKworKiBOZXcgbWV0aG9kOiB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBjbGFzcyBnYWluZWQgYQorICA6bWV0aDpgfmRlY2ltYWwuRGVjaW1hbC5mcm9tX2Zsb2F0YCBjbGFzcyBtZXRob2QgdGhhdCBwZXJmb3JtcyBhbiBleGFjdAorICBjb252ZXJzaW9uIG9mIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGEgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYC4KKyAgVGhpcyBleGFjdCBjb252ZXJzaW9uIHN0cml2ZXMgZm9yIHRoZQorICBjbG9zZXN0IGRlY2ltYWwgYXBwcm94aW1hdGlvbiB0byB0aGUgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24ncyB2YWx1ZTsKKyAgdGhlIHJlc3VsdGluZyBkZWNpbWFsIHZhbHVlIHdpbGwgdGhlcmVmb3JlIHN0aWxsIGluY2x1ZGUgdGhlIGluYWNjdXJhY3ksCisgIGlmIGFueS4KKyAgRm9yIGV4YW1wbGUsIGBgRGVjaW1hbC5mcm9tX2Zsb2F0KDAuMSlgYCByZXR1cm5zCisgIGBgRGVjaW1hbCgnMC4xMDAwMDAwMDAwMDAwMDAwMDU1NTExMTUxMjMxMjU3ODI3MDIxMTgxNTgzNDA0NTQxMDE1NjI1JylgYC4KKyAgKEltcGxlbWVudGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDQ3OTZgLikKKworICBDb21wYXJpbmcgaW5zdGFuY2VzIG9mIDpjbGFzczpgRGVjaW1hbGAgd2l0aCBmbG9hdGluZy1wb2ludAorICBudW1iZXJzIG5vdyBwcm9kdWNlcyBzZW5zaWJsZSByZXN1bHRzIGJhc2VkIG9uIHRoZSBudW1lcmljIHZhbHVlcworICBvZiB0aGUgb3BlcmFuZHMuICBQcmV2aW91c2x5IHN1Y2ggY29tcGFyaXNvbnMgd291bGQgZmFsbCBiYWNrIHRvCisgIFB5dGhvbidzIGRlZmF1bHQgcnVsZXMgZm9yIGNvbXBhcmluZyBvYmplY3RzLCB3aGljaCBwcm9kdWNlZCBhcmJpdHJhcnkKKyAgcmVzdWx0cyBiYXNlZCBvbiB0aGVpciB0eXBlLiAgTm90ZSB0aGF0IHlvdSBzdGlsbCBjYW5ub3QgY29tYmluZQorICA6Y2xhc3M6YERlY2ltYWxgIGFuZCBmbG9hdGluZy1wb2ludCBpbiBvdGhlciBvcGVyYXRpb25zIHN1Y2ggYXMgYWRkaXRpb24sCisgIHNpbmNlIHlvdSBzaG91bGQgYmUgZXhwbGljaXRseSBjaG9vc2luZyBob3cgdG8gY29udmVydCBiZXR3ZWVuIGZsb2F0IGFuZAorICA6Y2xhc3M6YERlY2ltYWxgLgorICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMjUzMWAuKQorCisgIFRoZSBjb25zdHJ1Y3RvciBmb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBub3cgYWNjZXB0cworICBmbG9hdGluZy1wb2ludCBudW1iZXJzIChhZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA4MjU3YCkKKyAgYW5kIG5vbi1FdXJvcGVhbiBVbmljb2RlIGNoYXJhY3RlcnMgc3VjaCBhcyBBcmFiaWMtSW5kaWMgZGlnaXRzCisgIChjb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2NTk1YCkuCisKKyAgTW9zdCBvZiB0aGUgbWV0aG9kcyBvZiB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5Db250ZXh0YCBjbGFzcyBub3cgYWNjZXB0IGludGVnZXJzCisgIGFzIHdlbGwgYXMgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXM7IHRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIHRoZQorICA6bWV0aDpgfmRlY2ltYWwuQ29udGV4dC5jYW5vbmljYWxgIGFuZCA6bWV0aDpgfmRlY2ltYWwuQ29udGV4dC5pc19jYW5vbmljYWxgCisgIG1ldGhvZHMuICAoUGF0Y2ggYnkgSnVhbiBKb3PDqSBDb250aTsgOmlzc3VlOmA3NjMzYC4pCisKKyAgV2hlbiB1c2luZyA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlcyB3aXRoIGEgc3RyaW5nJ3MKKyAgOm1ldGg6YH5zdHIuZm9ybWF0YCBtZXRob2QsIHRoZSBkZWZhdWx0IGFsaWdubWVudCB3YXMgcHJldmlvdXNseQorICBsZWZ0LWFsaWdubWVudC4gIFRoaXMgaGFzIGJlZW4gY2hhbmdlZCB0byByaWdodC1hbGlnbm1lbnQsIHdoaWNoIGlzCisgIG1vcmUgc2Vuc2libGUgZm9yIG51bWVyaWMgdHlwZXMuICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2ODU3YC4pCisKKyAgQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiB2YWx1ZSAob3IgYGBzTkFOYGApIG5vdyBzaWduYWwKKyAgOmNvbnN0OmBJbnZhbGlkT3BlcmF0aW9uYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBhIHRydWUgb3IKKyAgZmFsc2UgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yLiAgUXVpZXQgTmFOIHZhbHVlcworICAob3IgYGBOYU5gYCkgYXJlIG5vdyBoYXNoYWJsZS4gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgOmlzc3VlOmA3Mjc5YC4pCisKKyogVGhlIDptb2Q6YGRpZmZsaWJgIG1vZHVsZSBub3cgcHJvZHVjZXMgb3V0cHV0IHRoYXQgaXMgbW9yZQorICBjb21wYXRpYmxlIHdpdGggbW9kZXJuIDpjb21tYW5kOmBkaWZmYC86Y29tbWFuZDpgcGF0Y2hgIHRvb2xzCisgIHRocm91Z2ggb25lIHNtYWxsIGNoYW5nZSwgdXNpbmcgYSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2Ygc3BhY2VzIGFzCisgIGEgc2VwYXJhdG9yIGluIHRoZSBoZWFkZXIgZ2l2aW5nIHRoZSBmaWxlbmFtZS4gIChGaXhlZCBieSBBbmF0b2x5CisgIFRlY2h0b25pazsgOmlzc3VlOmA3NTg1YC4pCisKKyogVGhlIERpc3R1dGlscyBgYHNkaXN0YGAgY29tbWFuZCBub3cgYWx3YXlzIHJlZ2VuZXJhdGVzIHRoZQorICA6ZmlsZTpgTUFOSUZFU1RgIGZpbGUsIHNpbmNlIGV2ZW4gaWYgdGhlIDpmaWxlOmBNQU5JRkVTVC5pbmAgb3IKKyAgOmZpbGU6YHNldHVwLnB5YCBmaWxlcyBoYXZlbid0IGJlZW4gbW9kaWZpZWQsIHRoZSB1c2VyIG1pZ2h0IGhhdmUKKyAgY3JlYXRlZCBzb21lIG5ldyBmaWxlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZC4KKyAgKEZpeGVkIGJ5IFRhcmVrIFppYWTDqTsgOmlzc3VlOmA4Njg4YC4pCisKKyogVGhlIDptb2Q6YGRvY3Rlc3RgIG1vZHVsZSdzIDpjb25zdDpgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUxgIGZsYWcKKyAgd2lsbCBub3cgaWdub3JlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uCisgIGJlaW5nIHRlc3RlZC4gIChQYXRjaCBieSBMZW5uYXJ0IFJlZ2Vicm87IDppc3N1ZTpgNzQ5MGAuKQorCisqIFRoZSA6bW9kOmBlbWFpbGAgbW9kdWxlJ3MgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBjbGFzcyB3aWxsCisgIG5vdyBhY2NlcHQgYSBVbmljb2RlLXZhbHVlZCBwYXlsb2FkLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlCisgIHBheWxvYWQgdG8gdGhlIGVuY29kaW5nIHNwZWNpZmllZCBieSA6YXR0cjpgb3V0cHV0X2NoYXJzZXRgLgorICAoQWRkZWQgYnkgUi4gRGF2aWQgTXVycmF5OyA6aXNzdWU6YDEzNjgyNDdgLikKKworKiBUaGUgOmNsYXNzOmB+ZnJhY3Rpb25zLkZyYWN0aW9uYCBjbGFzcyBub3cgYWNjZXB0cyBhIHNpbmdsZSBmbG9hdCBvcgorICA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIGluc3RhbmNlLCBvciB0d28gcmF0aW9uYWwgbnVtYmVycywgYXMKKyAgYXJndW1lbnRzIHRvIGl0cyBjb25zdHJ1Y3Rvci4gIChJbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgcmF0aW9uYWxzIGFkZGVkIGluIDppc3N1ZTpgNTgxMmAsIGFuZCBmbG9hdC9kZWNpbWFsIGluCisgIDppc3N1ZTpgODI5NGAuKQorCisgIE9yZGVyaW5nIGNvbXBhcmlzb25zIChgYDxgYCwgYGA8PWBgLCBgYD5gYCwgYGA+PWBgKSBiZXR3ZWVuCisgIGZyYWN0aW9ucyBhbmQgY29tcGxleCBudW1iZXJzIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAuCisgIFRoaXMgZml4ZXMgYW4gb3ZlcnNpZ2h0LCBtYWtpbmcgdGhlIDpjbGFzczpgRnJhY3Rpb25gIG1hdGNoIHRoZSBvdGhlcgorICBudW1lcmljIHR5cGVzLgorCisgIC4uIHJldmlzaW9uIDc5NDU1CisKKyogTmV3IGNsYXNzOiA6Y2xhc3M6YH5mdHBsaWIuRlRQX1RMU2AgaW4KKyAgdGhlIDptb2Q6YGZ0cGxpYmAgbW9kdWxlIHByb3ZpZGVzIHNlY3VyZSBGVFAKKyAgY29ubmVjdGlvbnMgdXNpbmcgVExTIGVuY2Fwc3VsYXRpb24gb2YgYXV0aGVudGljYXRpb24gYXMgd2VsbCBhcworICBzdWJzZXF1ZW50IGNvbnRyb2wgYW5kIGRhdGEgdHJhbnNmZXJzLgorICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYTsgOmlzc3VlOmAyMDU0YC4pCisKKyAgVGhlIDptZXRoOmB+ZnRwbGliLkZUUC5zdG9yYmluYXJ5YCBtZXRob2QgZm9yIGJpbmFyeSB1cGxvYWRzIGNhbiBub3cgcmVzdGFydAorICB1cGxvYWRzIHRoYW5rcyB0byBhbiBhZGRlZCAqcmVzdCogcGFyYW1ldGVyIChwYXRjaCBieSBQYWJsbyBNb3V6bzsKKyAgOmlzc3VlOmA2ODQ1YC4pCisKKyogTmV3IGNsYXNzIGRlY29yYXRvcjogOmZ1bmM6YHRvdGFsX29yZGVyaW5nYCBpbiB0aGUgOm1vZDpgZnVuY3Rvb2xzYAorICBtb2R1bGUgdGFrZXMgYSBjbGFzcyB0aGF0IGRlZmluZXMgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kIGFuZCBvbmUgb2YKKyAgOm1ldGg6YF9fbHRfX2AsIDptZXRoOmBfX2xlX19gLCA6bWV0aDpgX19ndF9fYCwgb3IgOm1ldGg6YF9fZ2VfX2AsCisgIGFuZCBnZW5lcmF0ZXMgdGhlIG1pc3NpbmcgY29tcGFyaXNvbiBtZXRob2RzLiAgU2luY2UgdGhlCisgIDptZXRoOmBfX2NtcF9fYCBtZXRob2QgaXMgYmVpbmcgZGVwcmVjYXRlZCBpbiBQeXRob24gMy54LAorICB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXNpZXIgdG8gZGVmaW5lIG9yZGVyZWQgY2xhc3Nlcy4KKyAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDU0NzlgLikKKworICBOZXcgZnVuY3Rpb246IDpmdW5jOmBjbXBfdG9fa2V5YCB3aWxsIHRha2UgYW4gb2xkLXN0eWxlIGNvbXBhcmlzb24KKyAgZnVuY3Rpb24gdGhhdCBleHBlY3RzIHR3byBhcmd1bWVudHMgYW5kIHJldHVybiBhIG5ldyBjYWxsYWJsZSB0aGF0CisgIGNhbiBiZSB1c2VkIGFzIHRoZSAqa2V5KiBwYXJhbWV0ZXIgdG8gZnVuY3Rpb25zIHN1Y2ggYXMKKyAgOmZ1bmM6YHNvcnRlZGAsIDpmdW5jOmBtaW5gIGFuZCA6ZnVuYzpgbWF4YCwgZXRjLiAgVGhlIHByaW1hcnkKKyAgaW50ZW5kZWQgdXNlIGlzIHRvIGhlbHAgd2l0aCBtYWtpbmcgY29kZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMueC4KKyAgKEFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKKworKiBOZXcgZnVuY3Rpb246IHRoZSA6bW9kOmBnY2AgbW9kdWxlJ3MgOmZ1bmM6YH5nYy5pc190cmFja2VkYCByZXR1cm5zCisgIHRydWUgaWYgYSBnaXZlbiBpbnN0YW5jZSBpcyB0cmFja2VkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3RvciwgZmFsc2UKKyAgb3RoZXJ3aXNlLiAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNDY4OGAuKQorCisqIFRoZSA6bW9kOmBnemlwYCBtb2R1bGUncyA6Y2xhc3M6YH5nemlwLkd6aXBGaWxlYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQKKyAgbWFuYWdlbWVudCBwcm90b2NvbCwgc28geW91IGNhbiB3cml0ZSBgYHdpdGggZ3ppcC5HemlwRmlsZSguLi4pIGFzIGY6YGAKKyAgKGNvbnRyaWJ1dGVkIGJ5IEhhZ2VuIEbDvHJzdGVuYXU7IDppc3N1ZTpgMzg2MGApLCBhbmQgaXQgbm93IGltcGxlbWVudHMKKyAgdGhlIDpjbGFzczpgaW8uQnVmZmVyZWRJT0Jhc2VgIEFCQywgc28geW91IGNhbiB3cmFwIGl0IHdpdGgKKyAgOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmAgZm9yIGZhc3RlciBwcm9jZXNzaW5nCisgIChjb250cmlidXRlZCBieSBOaXIgQWlkZXM7IDppc3N1ZTpgNzQ3MWApLgorICBJdCdzIGFsc28gbm93IHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSBtb2RpZmljYXRpb24gdGltZQorICByZWNvcmRlZCBpbiBhIGd6aXBwZWQgZmlsZSBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwgdGltZXN0YW1wIHRvCisgIHRoZSBjb25zdHJ1Y3Rvci4gIChDb250cmlidXRlZCBieSBKYWNxdWVzIEZyZWNoZXQ7IDppc3N1ZTpgNDI3MmAuKQorCisgIEZpbGVzIGluIGd6aXAgZm9ybWF0IGNhbiBiZSBwYWRkZWQgd2l0aCB0cmFpbGluZyB6ZXJvIGJ5dGVzOyB0aGUKKyAgOm1vZDpgZ3ppcGAgbW9kdWxlIHdpbGwgbm93IGNvbnN1bWUgdGhlc2UgdHJhaWxpbmcgYnl0ZXMuICAoRml4ZWQgYnkKKyAgVGFkZWsgUGlldHJhc3playBhbmQgQnJpYW4gQ3VydGluOyA6aXNzdWU6YDI4NDZgLikKKworKiBOZXcgYXR0cmlidXRlOiB0aGUgOm1vZDpgaGFzaGxpYmAgbW9kdWxlIG5vdyBoYXMgYW4gOmF0dHI6YH5oYXNobGliLmhhc2hsaWIuYWxnb3JpdGhtc2AKKyAgYXR0cmlidXRlIGNvbnRhaW5pbmcgYSB0dXBsZSBuYW1pbmcgdGhlIHN1cHBvcnRlZCBhbGdvcml0aG1zLgorICBJbiBQeXRob24gMi43LCBgYGhhc2hsaWIuYWxnb3JpdGhtc2BgIGNvbnRhaW5zCisgIGBgKCdtZDUnLCAnc2hhMScsICdzaGEyMjQnLCAnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInKWBgLgorICAoQ29udHJpYnV0ZWQgYnkgQ2FybCBDaGVuZXQ7IDppc3N1ZTpgNzQxOGAuKQorCisqIFRoZSBkZWZhdWx0IDpjbGFzczpgfmh0dHBsaWIuSFRUUFJlc3BvbnNlYCBjbGFzcyB1c2VkIGJ5IHRoZSA6bW9kOmBodHRwbGliYCBtb2R1bGUgbm93CisgIHN1cHBvcnRzIGJ1ZmZlcmluZywgcmVzdWx0aW5nIGluIG11Y2ggZmFzdGVyIHJlYWRpbmcgb2YgSFRUUCByZXNwb25zZXMuCisgIChDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb247IDppc3N1ZTpgNDg3OWAuKQorCisgIFRoZSA6Y2xhc3M6YH5odHRwbGliLkhUVFBDb25uZWN0aW9uYCBhbmQgOmNsYXNzOmB+aHR0cGxpYi5IVFRQU0Nvbm5lY3Rpb25gIGNsYXNzZXMKKyAgbm93IHN1cHBvcnQgYSAqc291cmNlX2FkZHJlc3MqIHBhcmFtZXRlciwgYSBgYChob3N0LCBwb3J0KWBgIDItdHVwbGUKKyAgZ2l2aW5nIHRoZSBzb3VyY2UgYWRkcmVzcyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24uCisgIChDb250cmlidXRlZCBieSBFbGRvbiBaaWVnbGVyOyA6aXNzdWU6YDM5NzJgLikKKworKiBUaGUgOm1vZDpgaWhvb2tzYCBtb2R1bGUgbm93IHN1cHBvcnRzIHJlbGF0aXZlIGltcG9ydHMuICBOb3RlIHRoYXQKKyAgOm1vZDpgaWhvb2tzYCBpcyBhbiBvbGRlciBtb2R1bGUgZm9yIGN1c3RvbWl6aW5nIGltcG9ydHMsCisgIHN1cGVyc2VkZWQgYnkgdGhlIDptb2Q6YGltcHV0aWxgIG1vZHVsZSBhZGRlZCBpbiBQeXRob24gMi4wLgorICAoUmVsYXRpdmUgaW1wb3J0IHN1cHBvcnQgYWRkZWQgYnkgTmVpbCBTY2hlbWVuYXVlci4pCisKKyAgLi4gcmV2aXNpb24gNzU0MjMKKworKiBUaGUgOm1vZDpgaW1hcGxpYmAgbW9kdWxlIG5vdyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IERlcmVrIE1vcnI7IDppc3N1ZTpgMTY1NWAuKQorCisqIE5ldyBmdW5jdGlvbjogdGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSdzIDpmdW5jOmB+aW5zcGVjdC5nZXRjYWxsYXJnc2AKKyAgdGFrZXMgYSBjYWxsYWJsZSBhbmQgaXRzIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzLAorICBhbmQgZmlndXJlcyBvdXQgd2hpY2ggb2YgdGhlIGNhbGxhYmxlJ3MgcGFyYW1ldGVycyB3aWxsIHJlY2VpdmUgZWFjaCBhcmd1bWVudCwKKyAgcmV0dXJuaW5nIGEgZGljdGlvbmFyeSBtYXBwaW5nIGFyZ3VtZW50IG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBmcm9tIGluc3BlY3QgaW1wb3J0IGdldGNhbGxhcmdzCisgICAgPj4+IGRlZiBmKGEsIGI9MSwgKnBvcywgKipuYW1lZCk6CisgICAgLi4uICAgICBwYXNzCisgICAgPj4+IGdldGNhbGxhcmdzKGYsIDEsIDIsIDMpCisgICAgeydhJzogMSwgJ2InOiAyLCAncG9zJzogKDMsKSwgJ25hbWVkJzoge319CisgICAgPj4+IGdldGNhbGxhcmdzKGYsIGE9MiwgeD00KQorICAgIHsnYSc6IDIsICdiJzogMSwgJ3Bvcyc6ICgpLCAnbmFtZWQnOiB7J3gnOiA0fX0KKyAgICA+Pj4gZ2V0Y2FsbGFyZ3MoZikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgYXQgbGVhc3QgMSBhcmd1bWVudCAoMCBnaXZlbikKKworICBDb250cmlidXRlZCBieSBHZW9yZ2UgU2Fra2lzOyA6aXNzdWU6YDMxMzVgLgorCisqIFVwZGF0ZWQgbW9kdWxlOiBUaGUgOm1vZDpgaW9gIGxpYnJhcnkgaGFzIGJlZW4gdXBncmFkZWQgdG8gdGhlIHZlcnNpb24gc2hpcHBlZCB3aXRoCisgIFB5dGhvbiAzLjEuICBGb3IgMy4xLCB0aGUgSS9PIGxpYnJhcnkgd2FzIGVudGlyZWx5IHJld3JpdHRlbiBpbiBDCisgIGFuZCBpcyAyIHRvIDIwIHRpbWVzIGZhc3RlciBkZXBlbmRpbmcgb24gdGhlIHRhc2sgYmVpbmcgcGVyZm9ybWVkLiAgVGhlCisgIG9yaWdpbmFsIFB5dGhvbiB2ZXJzaW9uIHdhcyByZW5hbWVkIHRvIHRoZSA6bW9kOmBfcHlpb2AgbW9kdWxlLgorCisgIE9uZSBtaW5vciByZXN1bHRpbmcgY2hhbmdlOiB0aGUgOmNsYXNzOmBpby5UZXh0SU9CYXNlYCBjbGFzcyBub3cKKyAgaGFzIGFuIDphdHRyOmBlcnJvcnNgIGF0dHJpYnV0ZSBnaXZpbmcgdGhlIGVycm9yIHNldHRpbmcKKyAgdXNlZCBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGVycm9ycyAob25lIG9mIGBgJ3N0cmljdCdgYCwgYGAncmVwbGFjZSdgYCwKKyAgYGAnaWdub3JlJ2BgKS4KKworICBUaGUgOmNsYXNzOmBpby5GaWxlSU9gIGNsYXNzIG5vdyByYWlzZXMgYW4gOmV4YzpgT1NFcnJvcmAgd2hlbiBwYXNzZWQKKyAgYW4gaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IuICAoSW1wbGVtZW50ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb247CisgIDppc3N1ZTpgNDk5MWAuKSAgVGhlIDptZXRoOmB+aW8uSU9CYXNlLnRydW5jYXRlYCBtZXRob2Qgbm93IHByZXNlcnZlcyB0aGUKKyAgZmlsZSBwb3NpdGlvbjsgcHJldmlvdXNseSBpdCB3b3VsZCBjaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlCisgIGVuZCBvZiB0aGUgbmV3IGZpbGUuICAoRml4ZWQgYnkgUGFzY2FsIENoYW1ib247IDppc3N1ZTpgNjkzOWAuKQorCisqIE5ldyBmdW5jdGlvbjogYGBpdGVydG9vbHMuY29tcHJlc3MoZGF0YSwgc2VsZWN0b3JzKWBgIHRha2VzIHR3bworICBpdGVyYXRvcnMuICBFbGVtZW50cyBvZiAqZGF0YSogYXJlIHJldHVybmVkIGlmIHRoZSBjb3JyZXNwb25kaW5nCisgIHZhbHVlIGluICpzZWxlY3RvcnMqIGlzIHRydWU6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKCdBQkNERUYnLCBbMSwwLDEsMCwxLDFdKSA9PgorICAgICAgQSwgQywgRSwgRgorCisgIC4uIG1heWJlIGhlcmUgaXMgYmV0dGVyIHRvIHVzZSA+Pj4gbGlzdChpdGVydG9vbHMuY29tcHJlc3MoLi4uKSkgaW5zdGVhZAorCisgIE5ldyBmdW5jdGlvbjogYGBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoaXRlciwgcilgYAorICByZXR1cm5zIGFsbCB0aGUgcG9zc2libGUgKnIqLWxlbmd0aCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgZnJvbSB0aGUKKyAgaXRlcmFibGUgKml0ZXIqLiAgVW5saWtlIDpmdW5jOmB+aXRlcnRvb2xzLmNvbWJpbmF0aW9uc2AsIGluZGl2aWR1YWwgZWxlbWVudHMKKyAgY2FuIGJlIHJlcGVhdGVkIGluIHRoZSBnZW5lcmF0ZWQgY29tYmluYXRpb25zOjoKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudCgnYWJjJywgMikgPT4KKyAgICAgICgnYScsICdhJyksICgnYScsICdiJyksICgnYScsICdjJyksCisgICAgICAoJ2InLCAnYicpLCAoJ2InLCAnYycpLCAoJ2MnLCAnYycpCisKKyAgTm90ZSB0aGF0IGVsZW1lbnRzIGFyZSB0cmVhdGVkIGFzIHVuaXF1ZSBkZXBlbmRpbmcgb24gdGhlaXIgcG9zaXRpb24KKyAgaW4gdGhlIGlucHV0LCBub3QgdGhlaXIgYWN0dWFsIHZhbHVlcy4KKworICBUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb3VudGAgZnVuY3Rpb24gbm93IGhhcyBhICpzdGVwKiBhcmd1bWVudCB0aGF0CisgIGFsbG93cyBpbmNyZW1lbnRpbmcgYnkgdmFsdWVzIG90aGVyIHRoYW4gMS4gIDpmdW5jOmB+aXRlcnRvb2xzLmNvdW50YCBhbHNvCisgIG5vdyBhbGxvd3Mga2V5d29yZCBhcmd1bWVudHMsIGFuZCB1c2luZyBub24taW50ZWdlciB2YWx1ZXMgc3VjaCBhcworICBmbG9hdHMgb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXMuICAoSW1wbGVtZW50ZWQgYnkgUmF5bW9uZAorICBIZXR0aW5nZXI7IDppc3N1ZTpgNTAzMmAuKQorCisgIDpmdW5jOmBpdGVydG9vbHMuY29tYmluYXRpb25zYCBhbmQgOmZ1bmM6YGl0ZXJ0b29scy5wcm9kdWN0YAorICBwcmV2aW91c2x5IHJhaXNlZCA6ZXhjOmBWYWx1ZUVycm9yYCBmb3IgdmFsdWVzIG9mICpyKiBsYXJnZXIgdGhhbgorICB0aGUgaW5wdXQgaXRlcmFibGUuICBUaGlzIHdhcyBkZWVtZWQgYSBzcGVjaWZpY2F0aW9uIGVycm9yLCBzbyB0aGV5CisgIG5vdyByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuICAoRml4ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNDgxNmAuKQorCisqIFVwZGF0ZWQgbW9kdWxlOiBUaGUgOm1vZDpganNvbmAgbW9kdWxlIHdhcyB1cGdyYWRlZCB0byB2ZXJzaW9uIDIuMC45IG9mIHRoZQorICBzaW1wbGVqc29uIHBhY2thZ2UsIHdoaWNoIGluY2x1ZGVzIGEgQyBleHRlbnNpb24gdGhhdCBtYWtlcworICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZmFzdGVyLgorICAoQ29udHJpYnV0ZWQgYnkgQm9iIElwcG9saXRvOyA6aXNzdWU6YDQxMzZgLikKKworICBUbyBzdXBwb3J0IHRoZSBuZXcgOmNsYXNzOmBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGAgdHlwZSwgOmZ1bmM6YGpzb24ubG9hZGAKKyAgbm93IGhhcyBhbiBvcHRpb25hbCAqb2JqZWN0X3BhaXJzX2hvb2sqIHBhcmFtZXRlciB0aGF0IHdpbGwgYmUgY2FsbGVkCisgIHdpdGggYW55IG9iamVjdCBsaXRlcmFsIHRoYXQgZGVjb2RlcyB0byBhIGxpc3Qgb2YgcGFpcnMuCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA1MzgxYC4pCisKKyogVGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSdzIDpjbGFzczpgTWFpbGRpcmAgY2xhc3Mgbm93IHJlY29yZHMgdGhlCisgIHRpbWVzdGFtcCBvbiB0aGUgZGlyZWN0b3JpZXMgaXQgcmVhZHMsIGFuZCBvbmx5IHJlLXJlYWRzIHRoZW0gaWYgdGhlCisgIG1vZGlmaWNhdGlvbiB0aW1lIGhhcyBzdWJzZXF1ZW50bHkgY2hhbmdlZC4gIFRoaXMgaW1wcm92ZXMKKyAgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWVkZWQgZGlyZWN0b3J5IHNjYW5zLiAgKEZpeGVkIGJ5CisgIEEuTS4gS3VjaGxpbmcgYW5kIEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDE2MDc5NTFgLCA6aXNzdWU6YDY4OTZgLikKKworKiBOZXcgZnVuY3Rpb25zOiB0aGUgOm1vZDpgbWF0aGAgbW9kdWxlIGdhaW5lZAorICA6ZnVuYzpgfm1hdGguZXJmYCBhbmQgOmZ1bmM6YH5tYXRoLmVyZmNgIGZvciB0aGUgZXJyb3IgZnVuY3Rpb24gYW5kIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uLAorICA6ZnVuYzpgfm1hdGguZXhwbTFgIHdoaWNoIGNvbXB1dGVzIGBgZSoqeCAtIDFgYCB3aXRoIG1vcmUgcHJlY2lzaW9uIHRoYW4KKyAgdXNpbmcgOmZ1bmM6YH5tYXRoLmV4cGAgYW5kIHN1YnRyYWN0aW5nIDEsCisgIDpmdW5jOmB+bWF0aC5nYW1tYWAgZm9yIHRoZSBHYW1tYSBmdW5jdGlvbiwgYW5kCisgIDpmdW5jOmB+bWF0aC5sZ2FtbWFgIGZvciB0aGUgbmF0dXJhbCBsb2cgb2YgdGhlIEdhbW1hIGZ1bmN0aW9uLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gYW5kIG5pcmluQSByYXNlbGlhcmlzb247IDppc3N1ZTpgMzM2NmAuKQorCisqIFRoZSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZSdzIDpjbGFzczpgTWFuYWdlcipgIGNsYXNzZXMKKyAgY2FuIG5vdyBiZSBwYXNzZWQgYSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyCisgIGEgc3VicHJvY2VzcyBpcyBzdGFydGVkLCBhbG9uZyB3aXRoIGEgc2V0IG9mIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUKKyAgcGFzc2VkIHRvIHRoZSBjYWxsYWJsZS4KKyAgKENvbnRyaWJ1dGVkIGJ5IGxla21hOyA6aXNzdWU6YDU1ODVgLikKKworICBUaGUgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlBvb2xgIGNsYXNzLCB3aGljaCBjb250cm9scyBhIHBvb2wgb2Ygd29ya2VyIHByb2Nlc3NlcywKKyAgbm93IGhhcyBhbiBvcHRpb25hbCAqbWF4dGFza3NwZXJjaGlsZCogcGFyYW1ldGVyLiAgV29ya2VyIHByb2Nlc3NlcworICB3aWxsIHBlcmZvcm0gdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgYW5kIHRoZW4gZXhpdCwgY2F1c2luZyB0aGUKKyAgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlBvb2xgIHRvIHN0YXJ0IGEgbmV3IHdvcmtlci4gIFRoaXMgaXMgdXNlZnVsIGlmIHRhc2tzIG1heSBsZWFrCisgIG1lbW9yeSBvciBvdGhlciByZXNvdXJjZXMsIG9yIGlmIHNvbWUgdGFza3Mgd2lsbCBjYXVzZSB0aGUgd29ya2VyIHRvCisgIGJlY29tZSB2ZXJ5IGxhcmdlLgorICAoQ29udHJpYnV0ZWQgYnkgQ2hhcmxlcyBDYXphYm9uOyA6aXNzdWU6YDY5NjNgLikKKworKiBUaGUgOm1vZDpgbm50cGxpYmAgbW9kdWxlIG5vdyBzdXBwb3J0cyBJUHY2IGFkZHJlc3Nlcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IERlcmVrIE1vcnI7IDppc3N1ZTpgMTY2NGAuKQorCisqIE5ldyBmdW5jdGlvbnM6IHRoZSA6bW9kOmBvc2AgbW9kdWxlIHdyYXBzIHRoZSBmb2xsb3dpbmcgUE9TSVggc3lzdGVtCisgIGNhbGxzOiA6ZnVuYzpgfm9zLmdldHJlc2dpZGAgYW5kIDpmdW5jOmB+b3MuZ2V0cmVzdWlkYCwgd2hpY2ggcmV0dXJuIHRoZQorICByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBHSURzIGFuZCBVSURzOworICA6ZnVuYzpgfm9zLnNldHJlc2dpZGAgYW5kIDpmdW5jOmB+b3Muc2V0cmVzdWlkYCwgd2hpY2ggc2V0CisgIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIEdJRHMgYW5kIFVJRHMgdG8gbmV3IHZhbHVlczsKKyAgOmZ1bmM6YH5vcy5pbml0Z3JvdXBzYCwgd2hpY2ggaW5pdGlhbGl6ZSB0aGUgZ3JvdXAgYWNjZXNzIGxpc3QKKyAgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MuICAoR0lEL1VJRCBmdW5jdGlvbnMKKyAgY29udHJpYnV0ZWQgYnkgVHJhdmlzIEguOyA6aXNzdWU6YDY1MDhgLiAgU3VwcG9ydCBmb3IgaW5pdGdyb3VwcyBhZGRlZAorICBieSBKZWFuLVBhdWwgQ2FsZGVyb25lOyA6aXNzdWU6YDczMzNgLikKKworICBUaGUgOmZ1bmM6YG9zLmZvcmtgIGZ1bmN0aW9uIG5vdyByZS1pbml0aWFsaXplcyB0aGUgaW1wb3J0IGxvY2sgaW4KKyAgdGhlIGNoaWxkIHByb2Nlc3M7IHRoaXMgZml4ZXMgcHJvYmxlbXMgb24gU29sYXJpcyB3aGVuIDpmdW5jOmB+b3MuZm9ya2AKKyAgaXMgY2FsbGVkIGZyb20gYSB0aHJlYWQuICAoRml4ZWQgYnkgWnNvbHQgQ3Nlcm5hOyA6aXNzdWU6YDcyNDJgLikKKworKiBJbiB0aGUgOm1vZDpgb3MucGF0aGAgbW9kdWxlLCB0aGUgOmZ1bmM6YH5vcy5wYXRoLm5vcm1wYXRoYCBhbmQKKyAgOmZ1bmM6YH5vcy5wYXRoLmFic3BhdGhgIGZ1bmN0aW9ucyBub3cgcHJlc2VydmUgVW5pY29kZTsgaWYgdGhlaXIgaW5wdXQgcGF0aAorICBpcyBhIFVuaWNvZGUgc3RyaW5nLCB0aGUgcmV0dXJuIHZhbHVlIGlzIGFsc28gYSBVbmljb2RlIHN0cmluZy4KKyAgKDptZXRoOmB+b3MucGF0aC5ub3JtcGF0aGAgZml4ZWQgYnkgTWF0dCBHaXVjYSBpbiA6aXNzdWU6YDU4MjdgOworICA6bWV0aDpgfm9zLnBhdGguYWJzcGF0aGAgZml4ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMzQyNmAuKQorCisqIFRoZSA6bW9kOmBweWRvY2AgbW9kdWxlIG5vdyBoYXMgaGVscCBmb3IgdGhlIHZhcmlvdXMgc3ltYm9scyB0aGF0IFB5dGhvbgorICB1c2VzLiAgWW91IGNhbiBub3cgZG8gYGBoZWxwKCc8PCcpYGAgb3IgYGBoZWxwKCdAJylgYCwgZm9yIGV4YW1wbGUuCisgIChDb250cmlidXRlZCBieSBEYXZpZCBMYWJhbjsgOmlzc3VlOmA0NzM5YC4pCisKKyogVGhlIDptb2Q6YHJlYCBtb2R1bGUncyA6ZnVuYzpgfnJlLnNwbGl0YCwgOmZ1bmM6YH5yZS5zdWJgLCBhbmQgOmZ1bmM6YH5yZS5zdWJuYAorICBub3cgYWNjZXB0IGFuIG9wdGlvbmFsICpmbGFncyogYXJndW1lbnQsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZQorICBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS4gIChBZGRlZCBieSBHcmVnb3J5IFAuIFNtaXRoLikKKworKiBOZXcgZnVuY3Rpb246IDpmdW5jOmB+cnVucHkucnVuX3BhdGhgIGluIHRoZSA6bW9kOmBydW5weWAgbW9kdWxlCisgIHdpbGwgZXhlY3V0ZSB0aGUgY29kZSBhdCBhIHByb3ZpZGVkICpwYXRoKiBhcmd1bWVudC4gICpwYXRoKiBjYW4gYmUKKyAgdGhlIHBhdGggb2YgYSBQeXRob24gc291cmNlIGZpbGUgKDpmaWxlOmBleGFtcGxlLnB5YCksIGEgY29tcGlsZWQKKyAgYnl0ZWNvZGUgZmlsZSAoOmZpbGU6YGV4YW1wbGUucHljYCksIGEgZGlyZWN0b3J5CisgICg6ZmlsZTpgLi9wYWNrYWdlL2ApLCBvciBhIHppcCBhcmNoaXZlICg6ZmlsZTpgZXhhbXBsZS56aXBgKS4gIElmIGEKKyAgZGlyZWN0b3J5IG9yIHppcCBwYXRoIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBmcm9udCBvZgorICBgYHN5cy5wYXRoYGAgYW5kIHRoZSBtb2R1bGUgOm1vZDpgX19tYWluX19gIHdpbGwgYmUgaW1wb3J0ZWQuICBJdCdzCisgIGV4cGVjdGVkIHRoYXQgdGhlIGRpcmVjdG9yeSBvciB6aXAgY29udGFpbnMgYSA6ZmlsZTpgX19tYWluX18ucHlgOworICBpZiBpdCBkb2Vzbid0LCBzb21lIG90aGVyIDpmaWxlOmBfX21haW5fXy5weWAgbWlnaHQgYmUgaW1wb3J0ZWQgZnJvbQorICBhIGxvY2F0aW9uIGxhdGVyIGluIGBgc3lzLnBhdGhgYC4gIFRoaXMgbWFrZXMgbW9yZSBvZiB0aGUgbWFjaGluZXJ5CisgIG9mIDptb2Q6YHJ1bnB5YCBhdmFpbGFibGUgdG8gc2NyaXB0cyB0aGF0IHdhbnQgdG8gbWltaWMgdGhlIHdheQorICBQeXRob24ncyBjb21tYW5kIGxpbmUgcHJvY2Vzc2VzIGFuIGV4cGxpY2l0IHBhdGggbmFtZS4KKyAgKEFkZGVkIGJ5IE5pY2sgQ29naGxhbjsgOmlzc3VlOmA2ODE2YC4pCisKKyogTmV3IGZ1bmN0aW9uOiBpbiB0aGUgOm1vZDpgc2h1dGlsYCBtb2R1bGUsIDpmdW5jOmB+c2h1dGlsLm1ha2VfYXJjaGl2ZWAKKyAgdGFrZXMgYSBmaWxlbmFtZSwgYXJjaGl2ZSB0eXBlICh6aXAgb3IgdGFyLWZvcm1hdCksIGFuZCBhIGRpcmVjdG9yeQorICBwYXRoLCBhbmQgY3JlYXRlcyBhbiBhcmNoaXZlIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeSdzIGNvbnRlbnRzLgorICAoQWRkZWQgYnkgVGFyZWsgWmlhZMOpLikKKworICA6bW9kOmBzaHV0aWxgJ3MgOmZ1bmM6YH5zaHV0aWwuY29weWZpbGVgIGFuZCA6ZnVuYzpgfnNodXRpbC5jb3B5dHJlZWAKKyAgZnVuY3Rpb25zIG5vdyByYWlzZSBhIDpleGM6YH5zaHV0aWwuU3BlY2lhbEZpbGVFcnJvcmAgZXhjZXB0aW9uIHdoZW4KKyAgYXNrZWQgdG8gY29weSBhIG5hbWVkIHBpcGUuICBQcmV2aW91c2x5IHRoZSBjb2RlIHdvdWxkIHRyZWF0CisgIG5hbWVkIHBpcGVzIGxpa2UgYSByZWd1bGFyIGZpbGUgYnkgb3BlbmluZyB0aGVtIGZvciByZWFkaW5nLCBhbmQKKyAgdGhpcyB3b3VsZCBibG9jayBpbmRlZmluaXRlbHkuICAoRml4ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgMzAwMmAuKQorCisqIFRoZSA6bW9kOmBzaWduYWxgIG1vZHVsZSBubyBsb25nZXIgcmUtaW5zdGFsbHMgdGhlIHNpZ25hbCBoYW5kbGVyCisgIHVubGVzcyB0aGlzIGlzIHRydWx5IG5lY2Vzc2FyeSwgd2hpY2ggZml4ZXMgYSBidWcgdGhhdCBjb3VsZCBtYWtlIGl0CisgIGltcG9zc2libGUgdG8gY2F0Y2ggdGhlIEVJTlRSIHNpZ25hbCByb2J1c3RseS4gIChGaXhlZCBieQorICBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaTsgOmlzc3VlOmA4MzU0YC4pCisKKyogTmV3IGZ1bmN0aW9uczogaW4gdGhlIDptb2Q6YHNpdGVgIG1vZHVsZSwgdGhyZWUgbmV3IGZ1bmN0aW9ucworICByZXR1cm4gdmFyaW91cyBzaXRlLSBhbmQgdXNlci1zcGVjaWZpYyBwYXRocy4KKyAgOmZ1bmM6YH5zaXRlLmdldHNpdGVwYWNrYWdlc2AgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyBhbGwKKyAgZ2xvYmFsIHNpdGUtcGFja2FnZXMgZGlyZWN0b3JpZXMsCisgIDpmdW5jOmB+c2l0ZS5nZXR1c2Vyc2l0ZXBhY2thZ2VzYCByZXR1cm5zIHRoZSBwYXRoIG9mIHRoZSB1c2VyJ3MKKyAgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIGFuZAorICA6ZnVuYzpgfnNpdGUuZ2V0dXNlcmJhc2VgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSA6ZW52dmFyOmBVU0VSX0JBU0VgCisgIGVudmlyb25tZW50IHZhcmlhYmxlLCBnaXZpbmcgdGhlIHBhdGggdG8gYSBkaXJlY3RvcnkgdGhhdCBjYW4gYmUgdXNlZAorICB0byBzdG9yZSBkYXRhLgorICAoQ29udHJpYnV0ZWQgYnkgVGFyZWsgWmlhZMOpOyA6aXNzdWU6YDY2OTNgLikKKworICBUaGUgOm1vZDpgc2l0ZWAgbW9kdWxlIG5vdyByZXBvcnRzIGV4Y2VwdGlvbnMgb2NjdXJyaW5nCisgIHdoZW4gdGhlIDptb2Q6YHNpdGVjdXN0b21pemVgIG1vZHVsZSBpcyBpbXBvcnRlZCwgYW5kIHdpbGwgbm8gbG9uZ2VyCisgIGNhdGNoIGFuZCBzd2FsbG93IHRoZSA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLiAgKEZpeGVkIGJ5CisgIFZpY3RvciBTdGlubmVyOyA6aXNzdWU6YDMxMzdgLikKKworKiBUaGUgOmZ1bmM6YH5zb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uCisgIGdhaW5lZCBhICpzb3VyY2VfYWRkcmVzcyogcGFyYW1ldGVyLCBhIGBgKGhvc3QsIHBvcnQpYGAgMi10dXBsZQorICBnaXZpbmcgdGhlIHNvdXJjZSBhZGRyZXNzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEVsZG9uIFppZWdsZXI7IDppc3N1ZTpgMzk3MmAuKQorCisgIFRoZSA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdl9pbnRvYCBhbmQgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3Zmcm9tX2ludG9gCisgIG1ldGhvZHMgd2lsbCBub3cgd3JpdGUgaW50byBvYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgYnVmZmVyIEFQSSwgbW9zdCB1c2VmdWxseQorICB0aGUgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMuICAoSW1wbGVtZW50ZWQgYnkKKyAgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODEwNGAuKQorCisqIFRoZSA6bW9kOmBTb2NrZXRTZXJ2ZXJgIG1vZHVsZSdzIDpjbGFzczpgflNvY2tldFNlcnZlci5UQ1BTZXJ2ZXJgIGNsYXNzIG5vdworICBzdXBwb3J0cyBzb2NrZXQgdGltZW91dHMgYW5kIGRpc2FibGluZyB0aGUgTmFnbGUgYWxnb3JpdGhtLgorICBUaGUgOmF0dHI6YH5Tb2NrZXRTZXJ2ZXIuVENQU2VydmVyLmRpc2FibGVfbmFnbGVfYWxnb3JpdGhtYCBjbGFzcyBhdHRyaWJ1dGUKKyAgZGVmYXVsdHMgdG8gRmFsc2U7IGlmIG92ZXJyaWRkZW4gdG8gYmUgVHJ1ZSwKKyAgbmV3IHJlcXVlc3QgY29ubmVjdGlvbnMgd2lsbCBoYXZlIHRoZSBUQ1BfTk9ERUxBWSBvcHRpb24gc2V0IHRvCisgIHByZXZlbnQgYnVmZmVyaW5nIG1hbnkgc21hbGwgc2VuZHMgaW50byBhIHNpbmdsZSBUQ1AgcGFja2V0LgorICBUaGUgOmF0dHI6YH5Tb2NrZXRTZXJ2ZXIuVENQU2VydmVyLnRpbWVvdXRgIGNsYXNzIGF0dHJpYnV0ZSBjYW4gaG9sZAorICBhIHRpbWVvdXQgaW4gc2Vjb25kcyB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcmVxdWVzdCBzb2NrZXQ7IGlmCisgIG5vIHJlcXVlc3QgaXMgcmVjZWl2ZWQgd2l0aGluIHRoYXQgdGltZSwgOm1ldGg6YGhhbmRsZV90aW1lb3V0YAorICB3aWxsIGJlIGNhbGxlZCBhbmQgOm1ldGg6YGhhbmRsZV9yZXF1ZXN0YCB3aWxsIHJldHVybi4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA2MTkyYCBhbmQgOmlzc3VlOmA2MjY3YC4pCisKKyogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCB0bworICB2ZXJzaW9uIDIuNi4wIG9mIHRoZSBgcHlzcWxpdGUgcGFja2FnZSA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5c3FsaXRlLz5gX18uIFZlcnNpb24gMi42LjAgaW5jbHVkZXMgYSBudW1iZXIgb2YgYnVnZml4ZXMsIGFuZCBhZGRzCisgIHRoZSBhYmlsaXR5IHRvIGxvYWQgU1FMaXRlIGV4dGVuc2lvbnMgZnJvbSBzaGFyZWQgbGlicmFyaWVzLgorICBDYWxsIHRoZSBgYGVuYWJsZV9sb2FkX2V4dGVuc2lvbihUcnVlKWBgIG1ldGhvZCB0byBlbmFibGUgZXh0ZW5zaW9ucywKKyAgYW5kIHRoZW4gY2FsbCA6bWV0aDpgfnNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbmAgdG8gbG9hZCBhIHBhcnRpY3VsYXIgc2hhcmVkIGxpYnJhcnkuCisgIChVcGRhdGVkIGJ5IEdlcmhhcmQgSMOkcmluZy4pCisKKyogVGhlIDptb2Q6YHNzbGAgbW9kdWxlJ3MgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQorICBidWZmZXIgQVBJLCB3aGljaCBmaXhlZCBhIHRlc3Qgc3VpdGUgZmFpbHVyZSAoZml4IGJ5IEFudG9pbmUgUGl0cm91OworICA6aXNzdWU6YDcxMzNgKSBhbmQgYXV0b21hdGljYWxseSBzZXQKKyAgT3BlblNTTCdzIDpjOm1hY3JvOmBTU0xfTU9ERV9BVVRPX1JFVFJZYCwgd2hpY2ggd2lsbCBwcmV2ZW50IGFuIGVycm9yCisgIGNvZGUgYmVpbmcgcmV0dXJuZWQgZnJvbSA6bWV0aDpgcmVjdmAgb3BlcmF0aW9ucyB0aGF0IHRyaWdnZXIgYW4gU1NMCisgIHJlbmVnb3RpYXRpb24gKGZpeCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA4MjIyYCkuCisKKyAgVGhlIDpmdW5jOmBzc2wud3JhcF9zb2NrZXRgIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIG5vdyB0YWtlcyBhCisgICpjaXBoZXJzKiBhcmd1bWVudCB0aGF0J3MgYSBzdHJpbmcgbGlzdGluZyB0aGUgZW5jcnlwdGlvbiBhbGdvcml0aG1zCisgIHRvIGJlIGFsbG93ZWQ7IHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyBpcyBkZXNjcmliZWQKKyAgYGluIHRoZSBPcGVuU1NMIGRvY3VtZW50YXRpb24KKyAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF9fLgorICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODMyMmAuKQorCisgIEFub3RoZXIgY2hhbmdlIG1ha2VzIHRoZSBleHRlbnNpb24gbG9hZCBhbGwgb2YgT3BlblNTTCdzIGNpcGhlcnMgYW5kCisgIGRpZ2VzdCBhbGdvcml0aG1zIHNvIHRoYXQgdGhleSdyZSBhbGwgYXZhaWxhYmxlLiAgU29tZSBTU0wKKyAgY2VydGlmaWNhdGVzIGNvdWxkbid0IGJlIHZlcmlmaWVkLCByZXBvcnRpbmcgYW4gInVua25vd24gYWxnb3JpdGhtIgorICBlcnJvci4gIChSZXBvcnRlZCBieSBCZWRhIEtvc2F0YSwgYW5kIGZpeGVkIGJ5IEFudG9pbmUgUGl0cm91OworICA6aXNzdWU6YDg0ODRgLikKKworICBUaGUgdmVyc2lvbiBvZiBPcGVuU1NMIGJlaW5nIHVzZWQgaXMgbm93IGF2YWlsYWJsZSBhcyB0aGUgbW9kdWxlCisgIGF0dHJpYnV0ZXMgOmRhdGE6YHNzbC5PUEVOU1NMX1ZFUlNJT05gIChhIHN0cmluZyksCisgIDpkYXRhOmBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk9gIChhIDUtdHVwbGUpLCBhbmQKKyAgOmRhdGE6YHNzbC5PUEVOU1NMX1ZFUlNJT05fTlVNQkVSYCAoYW4gaW50ZWdlcikuICAoQWRkZWQgYnkgQW50b2luZQorICBQaXRyb3U7IDppc3N1ZTpgODMyMWAuKQorCisqIFRoZSA6bW9kOmBzdHJ1Y3RgIG1vZHVsZSB3aWxsIG5vIGxvbmdlciBzaWxlbnRseSBpZ25vcmUgb3ZlcmZsb3cKKyAgZXJyb3JzIHdoZW4gYSB2YWx1ZSBpcyB0b28gbGFyZ2UgZm9yIGEgcGFydGljdWxhciBpbnRlZ2VyIGZvcm1hdAorICBjb2RlIChvbmUgb2YgYGBiQmhIaUlsTHFRYGApOyBpdCBub3cgYWx3YXlzIHJhaXNlcyBhCisgIDpleGM6YHN0cnVjdC5lcnJvcmAgZXhjZXB0aW9uLiAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247CisgIDppc3N1ZTpgMTUyM2AuKSAgVGhlIDpmdW5jOmB+c3RydWN0LnBhY2tgIGZ1bmN0aW9uIHdpbGwgYWxzbworICBhdHRlbXB0IHRvIHVzZSA6bWV0aDpgX19pbmRleF9fYCB0byBjb252ZXJ0IGFuZCBwYWNrIG5vbi1pbnRlZ2VycworICBiZWZvcmUgdHJ5aW5nIHRoZSA6bWV0aDpgX19pbnRfX2AgbWV0aG9kIG9yIHJlcG9ydGluZyBhbiBlcnJvci4KKyAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgODMwMGAuKQorCisqIE5ldyBmdW5jdGlvbjogdGhlIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZSdzCisgIDpmdW5jOmB+c3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIHJ1bnMgYSBjb21tYW5kIHdpdGggYSBzcGVjaWZpZWQgc2V0IG9mIGFyZ3VtZW50cworICBhbmQgcmV0dXJucyB0aGUgY29tbWFuZCdzIG91dHB1dCBhcyBhIHN0cmluZyB3aGVuIHRoZSBjb21tYW5kIHJ1bnMgd2l0aG91dAorICBlcnJvciwgb3IgcmFpc2VzIGEgOmV4YzpgfnN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yYCBleGNlcHRpb24gb3RoZXJ3aXNlLgorCisgIDo6CisKKyAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydkZicsICctaCcsICcuJ10pCisgICAgJ0ZpbGVzeXN0ZW0gICAgIFNpemUgICBVc2VkICBBdmFpbCBDYXBhY2l0eSAgTW91bnRlZCBvblxuCisgICAgL2Rldi9kaXNrMHMyICAgIDUyRyAgICA0OUcgICAzLjBHICAgIDk0JSAgICAvXG4nCisKKyAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWydkZicsICctaCcsICcvYm9ndXMnXSkKKyAgICAgIC4uLgorICAgIHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOiBDb21tYW5kICdbJ2RmJywgJy1oJywgJy9ib2d1cyddJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEdyZWdvcnkgUC4gU21pdGguKQorCisgIFRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUgd2lsbCBub3cgcmV0cnkgaXRzIGludGVybmFsIHN5c3RlbSBjYWxscworICBvbiByZWNlaXZpbmcgYW4gOmNvbnN0OmBFSU5UUmAgc2lnbmFsLiAgKFJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlOyBmaW5hbAorICBwYXRjaCBieSBHcmVnb3J5IFAuIFNtaXRoIGluIDppc3N1ZTpgMTA2ODI2OGAuKQorCisqIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5pc19kZWNsYXJlZF9nbG9iYWxgIGluIHRoZSA6bW9kOmBzeW10YWJsZWAgbW9kdWxlCisgIHJldHVybnMgdHJ1ZSBmb3IgdmFyaWFibGVzIHRoYXQgYXJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgdG8gYmUgZ2xvYmFsLAorICBmYWxzZSBmb3Igb25lcyB0aGF0IGFyZSBpbXBsaWNpdGx5IGdsb2JhbC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEplcmVteSBIeWx0b24uKQorCisqIFRoZSA6bW9kOmBzeXNsb2dgIG1vZHVsZSB3aWxsIG5vdyB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmFyZ3ZbMF1gYCBhcyB0aGUKKyAgaWRlbnRpZmllciBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIG9mIGBgJ3B5dGhvbidgYC4KKyAgKENoYW5nZWQgYnkgU2VhbiBSZWlmc2NobmVpZGVyOyA6aXNzdWU6YDg0NTFgLikKKworKiBUaGUgYGBzeXMudmVyc2lvbl9pbmZvYGAgdmFsdWUgaXMgbm93IGEgbmFtZWQgdHVwbGUsIHdpdGggYXR0cmlidXRlcworICBuYW1lZCA6YXR0cjpgbWFqb3JgLCA6YXR0cjpgbWlub3JgLCA6YXR0cjpgbWljcm9gLAorICA6YXR0cjpgcmVsZWFzZWxldmVsYCwgYW5kIDphdHRyOmBzZXJpYWxgLiAgKENvbnRyaWJ1dGVkIGJ5IFJvc3MKKyAgTGlnaHQ7IDppc3N1ZTpgNDI4NWAuKQorCisgIDpmdW5jOmBzeXMuZ2V0d2luZG93c3ZlcnNpb25gIGFsc28gcmV0dXJucyBhIG5hbWVkIHR1cGxlLAorICB3aXRoIGF0dHJpYnV0ZXMgbmFtZWQgOmF0dHI6YG1ham9yYCwgOmF0dHI6YG1pbm9yYCwgOmF0dHI6YGJ1aWxkYCwKKyAgOmF0dHI6YHBsYXRmb3JtYCwgOmF0dHI6YHNlcnZpY2VfcGFja2AsIDphdHRyOmBzZXJ2aWNlX3BhY2tfbWFqb3JgLAorICA6YXR0cjpgc2VydmljZV9wYWNrX21pbm9yYCwgOmF0dHI6YHN1aXRlX21hc2tgLCBhbmQKKyAgOmF0dHI6YHByb2R1Y3RfdHlwZWAuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gQ3VydGluOyA6aXNzdWU6YDc3NjZgLikKKworKiBUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlJ3MgZGVmYXVsdCBlcnJvciBoYW5kbGluZyBoYXMgY2hhbmdlZCwgdG8KKyAgbm8gbG9uZ2VyIHN1cHByZXNzIGZhdGFsIGVycm9ycy4gIFRoZSBkZWZhdWx0IGVycm9yIGxldmVsIHdhcyBwcmV2aW91c2x5IDAsCisgIHdoaWNoIG1lYW50IHRoYXQgZXJyb3JzIHdvdWxkIG9ubHkgcmVzdWx0IGluIGEgbWVzc2FnZSBiZWluZyB3cml0dGVuIHRvIHRoZQorICBkZWJ1ZyBsb2csIGJ1dCBiZWNhdXNlIHRoZSBkZWJ1ZyBsb2cgaXMgbm90IGFjdGl2YXRlZCBieSBkZWZhdWx0LAorICB0aGVzZSBlcnJvcnMgZ28gdW5ub3RpY2VkLiAgVGhlIGRlZmF1bHQgZXJyb3IgbGV2ZWwgaXMgbm93IDEsCisgIHdoaWNoIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlcmUncyBhbiBlcnJvci4KKyAgKENoYW5nZWQgYnkgTGFycyBHdXN0w6RiZWw7IDppc3N1ZTpgNzM1N2AuKQorCisgIDptb2Q6YHRhcmZpbGVgIG5vdyBzdXBwb3J0cyBmaWx0ZXJpbmcgdGhlIDpjbGFzczpgfnRhcmZpbGUuVGFySW5mb2AKKyAgb2JqZWN0cyBiZWluZyBhZGRlZCB0byBhIHRhciBmaWxlLiAgV2hlbiB5b3UgY2FsbCA6bWV0aDpgfnRhcmZpbGUuVGFyRmlsZS5hZGRgLAorICB5b3UgbWF5IHN1cHBseSBhbiBvcHRpb25hbCAqZmlsdGVyKiBhcmd1bWVudAorICB0aGF0J3MgYSBjYWxsYWJsZS4gIFRoZSAqZmlsdGVyKiBjYWxsYWJsZSB3aWxsIGJlIHBhc3NlZCB0aGUKKyAgOmNsYXNzOmB+dGFyZmlsZS5UYXJJbmZvYCBmb3IgZXZlcnkgZmlsZSBiZWluZyBhZGRlZCwgYW5kIGNhbiBtb2RpZnkgYW5kIHJldHVybiBpdC4KKyAgSWYgdGhlIGNhbGxhYmxlIHJldHVybnMgYGBOb25lYGAsIHRoZSBmaWxlIHdpbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGUKKyAgcmVzdWx0aW5nIGFyY2hpdmUuICBUaGlzIGlzIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgZXhpc3RpbmcKKyAgKmV4Y2x1ZGUqIGFyZ3VtZW50LCB3aGljaCBoYXMgdGhlcmVmb3JlIGJlZW4gZGVwcmVjYXRlZC4KKyAgKEFkZGVkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDY4NTZgLikKKyAgVGhlIDpjbGFzczpgfnRhcmZpbGUuVGFyRmlsZWAgY2xhc3MgYWxzbyBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgKEFkZGVkIGJ5IExhcnMgR3VzdMOkYmVsOyA6aXNzdWU6YDcyMzJgLikKKworKiBUaGUgOm1ldGg6YH50aHJlYWRpbmcuRXZlbnQud2FpdGAgbWV0aG9kIG9mIHRoZSA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAgY2xhc3MKKyAgbm93IHJldHVybnMgdGhlIGludGVybmFsIGZsYWcgb24gZXhpdC4gIFRoaXMgbWVhbnMgdGhlIG1ldGhvZCB3aWxsIHVzdWFsbHkKKyAgcmV0dXJuIHRydWUgYmVjYXVzZSA6bWV0aDpgfnRocmVhZGluZy5FdmVudC53YWl0YCBpcyBzdXBwb3NlZCB0byBibG9jayB1bnRpbCB0aGUKKyAgaW50ZXJuYWwgZmxhZyBiZWNvbWVzIHRydWUuICBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgb25seSBiZSBmYWxzZSBpZgorICBhIHRpbWVvdXQgd2FzIHByb3ZpZGVkIGFuZCB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dC4KKyAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBMZXNoZXI7IDppc3N1ZTpgMTY3NDAzMmAuKQorCisqIFRoZSBVbmljb2RlIGRhdGFiYXNlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB1bmljb2RlZGF0YWAgbW9kdWxlIGlzCisgIG5vdyB1c2VkIGludGVybmFsbHkgdG8gZGV0ZXJtaW5lIHdoaWNoIGNoYXJhY3RlcnMgYXJlIG51bWVyaWMsCisgIHdoaXRlc3BhY2UsIG9yIHJlcHJlc2VudCBsaW5lIGJyZWFrcy4gIFRoZSBkYXRhYmFzZSBhbHNvCisgIGluY2x1ZGVzIGluZm9ybWF0aW9uIGZyb20gdGhlIDpmaWxlOmBVbmloYW4udHh0YCBkYXRhIGZpbGUgKHBhdGNoCisgIGJ5IEFuZGVycyBDaHJpZ3N0csO2bSBhbmQgQW1hdXJ5IEZvcmdlb3QgZCdBcmM7IDppc3N1ZTpgMTU3MTE4NGApCisgIGFuZCBoYXMgYmVlbiB1cGRhdGVkIHRvIHZlcnNpb24gNS4yLjAgKHVwZGF0ZWQgYnkKKyAgRmxvcmVudCBYaWNsdW5hOyA6aXNzdWU6YDgwMjRgKS4KKworKiBUaGUgOm1vZDpgdXJscGFyc2VgIG1vZHVsZSdzIDpmdW5jOmB+dXJscGFyc2UudXJsc3BsaXRgIG5vdyBoYW5kbGVzCisgIHVua25vd24gVVJMIHNjaGVtZXMgaW4gYSBmYXNoaW9uIGNvbXBsaWFudCB3aXRoIDpyZmM6YDM5ODZgOiBpZiB0aGUKKyAgVVJMIGlzIG9mIHRoZSBmb3JtIGBgIjxzb21ldGhpbmc+Oi8vLi4uImBgLCB0aGUgdGV4dCBiZWZvcmUgdGhlCisgIGBgOi8vYGAgaXMgdHJlYXRlZCBhcyB0aGUgc2NoZW1lLCBldmVuIGlmIGl0J3MgYSBtYWRlLXVwIHNjaGVtZSB0aGF0CisgIHRoZSBtb2R1bGUgZG9lc24ndCBrbm93IGFib3V0LiAgVGhpcyBjaGFuZ2UgbWF5IGJyZWFrIGNvZGUgdGhhdAorICB3b3JrZWQgYXJvdW5kIHRoZSBvbGQgYmVoYXZpb3VyLiAgRm9yIGV4YW1wbGUsIFB5dGhvbiAyLjYuNCBvciAyLjUKKyAgd2lsbCByZXR1cm4gdGhlIGZvbGxvd2luZzoKKworICAgID4+PiBpbXBvcnQgdXJscGFyc2UKKyAgICA+Pj4gdXJscGFyc2UudXJsc3BsaXQoJ2ludmVudGVkOi8vaG9zdC9maWxlbmFtZT9xdWVyeScpCisgICAgKCdpbnZlbnRlZCcsICcnLCAnLy9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIFB5dGhvbiAyLjcgKGFuZCBQeXRob24gMi42LjUpIHdpbGwgcmV0dXJuOgorCisgICAgPj4+IGltcG9ydCB1cmxwYXJzZQorICAgID4+PiB1cmxwYXJzZS51cmxzcGxpdCgnaW52ZW50ZWQ6Ly9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JykKKyAgICAoJ2ludmVudGVkJywgJ2hvc3QnLCAnL2ZpbGVuYW1lP3F1ZXJ5JywgJycsICcnKQorCisgIChQeXRob24gMi43IGFjdHVhbGx5IHByb2R1Y2VzIHNsaWdodGx5IGRpZmZlcmVudCBvdXRwdXQsIHNpbmNlIGl0CisgIHJldHVybnMgYSBuYW1lZCB0dXBsZSBpbnN0ZWFkIG9mIGEgc3RhbmRhcmQgdHVwbGUuKQorCisgIFRoZSA6bW9kOmB1cmxwYXJzZWAgbW9kdWxlIGFsc28gc3VwcG9ydHMgSVB2NiBsaXRlcmFsIGFkZHJlc3NlcyBhcyBkZWZpbmVkIGJ5CisgIDpyZmM6YDI3MzJgIChjb250cmlidXRlZCBieSBTZW50aGlsIEt1bWFyYW47IDppc3N1ZTpgMjk4N2ApLiA6OgorCisgICAgPj4+IHVybHBhcnNlLnVybHBhcnNlKCdodHRwOi8vWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0vZm9vJykKKyAgICBQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywKKyAgICAgICAgICAgICAgICBwYXRoPScvZm9vJywgcGFyYW1zPScnLCBxdWVyeT0nJywgZnJhZ21lbnQ9JycpCisKKyogTmV3IGNsYXNzOiB0aGUgOmNsYXNzOmB+d2Vha3JlZi5XZWFrU2V0YCBjbGFzcyBpbiB0aGUgOm1vZDpgd2Vha3JlZmAKKyAgbW9kdWxlIGlzIGEgc2V0IHRoYXQgb25seSBob2xkcyB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGVsZW1lbnRzOyBlbGVtZW50cworICB3aWxsIGJlIHJlbW92ZWQgb25jZSB0aGVyZSBhcmUgbm8gcmVmZXJlbmNlcyBwb2ludGluZyB0byB0aGVtLgorICAoT3JpZ2luYWxseSBpbXBsZW1lbnRlZCBpbiBQeXRob24gMy54IGJ5IFJheW1vbmQgSGV0dGluZ2VyLCBhbmQgYmFja3BvcnRlZAorICB0byAyLjcgYnkgTWljaGFlbCBGb29yZC4pCisKKyogVGhlIEVsZW1lbnRUcmVlIGxpYnJhcnksIDptb2Q6YHhtbC5ldHJlZWAsIG5vIGxvbmdlciBlc2NhcGVzCisgIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHdoZW4gb3V0cHV0dGluZyBhbiBYTUwgcHJvY2Vzc2luZworICBpbnN0cnVjdGlvbiAod2hpY2ggbG9va3MgbGlrZSBgYDw/eG1sLXN0eWxlc2hlZXQgaHJlZj0iI3N0eWxlMSI/PmBgKQorICBvciBjb21tZW50ICh3aGljaCBsb29rcyBsaWtlIGBgPCEtLSBjb21tZW50IC0tPmBgKS4KKyAgKFBhdGNoIGJ5IE5laWwgTXVsbGVyOyA6aXNzdWU6YDI3NDZgLikKKworKiBUaGUgWE1MLVJQQyBjbGllbnQgYW5kIHNlcnZlciwgcHJvdmlkZWQgYnkgdGhlIDptb2Q6YHhtbHJwY2xpYmAgYW5kCisgIDptb2Q6YFNpbXBsZVhNTFJQQ1NlcnZlcmAgbW9kdWxlcywgaGF2ZSBpbXByb3ZlZCBwZXJmb3JtYW5jZSBieQorICBzdXBwb3J0aW5nIEhUVFAvMS4xIGtlZXAtYWxpdmUgYW5kIGJ5IG9wdGlvbmFsbHkgdXNpbmcgZ3ppcCBlbmNvZGluZworICB0byBjb21wcmVzcyB0aGUgWE1MIGJlaW5nIGV4Y2hhbmdlZC4gIFRoZSBnemlwIGNvbXByZXNzaW9uIGlzCisgIGNvbnRyb2xsZWQgYnkgdGhlIDphdHRyOmBlbmNvZGVfdGhyZXNob2xkYCBhdHRyaWJ1dGUgb2YKKyAgOmNsYXNzOmBTaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcmAsIHdoaWNoIGNvbnRhaW5zIGEgc2l6ZSBpbiBieXRlczsKKyAgcmVzcG9uc2VzIGxhcmdlciB0aGFuIHRoaXMgd2lsbCBiZSBjb21wcmVzc2VkLgorICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uOyA6aXNzdWU6YDYyNjdgLikKKworKiBUaGUgOm1vZDpgemlwZmlsZWAgbW9kdWxlJ3MgOmNsYXNzOmB+emlwZmlsZS5aaXBGaWxlYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQKKyAgbWFuYWdlbWVudCBwcm90b2NvbCwgc28geW91IGNhbiB3cml0ZSBgYHdpdGggemlwZmlsZS5aaXBGaWxlKC4uLikgYXMgZjpgYC4KKyAgKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIEN1cnRpbjsgOmlzc3VlOmA1NTExYC4pCisKKyAgOm1vZDpgemlwZmlsZWAgbm93IGFsc28gc3VwcG9ydHMgYXJjaGl2aW5nIGVtcHR5IGRpcmVjdG9yaWVzIGFuZAorICBleHRyYWN0cyB0aGVtIGNvcnJlY3RseS4gIChGaXhlZCBieSBLdWJhIFdpZWN6b3JlazsgOmlzc3VlOmA0NzEwYC4pCisgIFJlYWRpbmcgZmlsZXMgb3V0IG9mIGFuIGFyY2hpdmUgaXMgZmFzdGVyLCBhbmQgaW50ZXJsZWF2aW5nCisgIDptZXRoOmB+emlwZmlsZS5aaXBGaWxlLnJlYWRgIGFuZCA6bWV0aDpgfnppcGZpbGUuWmlwRmlsZS5yZWFkbGluZWAgbm93IHdvcmtzIGNvcnJlY3RseS4KKyAgKENvbnRyaWJ1dGVkIGJ5IE5pciBBaWRlczsgOmlzc3VlOmA3NjEwYC4pCisKKyAgVGhlIDpmdW5jOmB+emlwZmlsZS5pc196aXBmaWxlYCBmdW5jdGlvbiBub3cKKyAgYWNjZXB0cyBhIGZpbGUgb2JqZWN0LCBpbiBhZGRpdGlvbiB0byB0aGUgcGF0aCBuYW1lcyBhY2NlcHRlZCBpbiBlYXJsaWVyCisgIHZlcnNpb25zLiAgKENvbnRyaWJ1dGVkIGJ5IEdhYnJpZWwgR2VuZWxsaW5hOyA6aXNzdWU6YDQ3NTZgLikKKworICBUaGUgOm1ldGg6YH56aXBmaWxlLlppcEZpbGUud3JpdGVzdHJgIG1ldGhvZCBub3cgaGFzIGFuIG9wdGlvbmFsICpjb21wcmVzc190eXBlKiBwYXJhbWV0ZXIKKyAgdGhhdCBsZXRzIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBtZXRob2Qgc3BlY2lmaWVkIGluIHRoZQorICA6Y2xhc3M6YH56aXBmaWxlLlppcEZpbGVgIGNvbnN0cnVjdG9yLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbjsKKyAgOmlzc3VlOmA2MDAzYC4pCisKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLi4gd2hvbGUgbmV3IG1vZHVsZXMgZ2V0IGRlc2NyaWJlZCBpbiBzdWJzZWN0aW9ucyBoZXJlCisKKworLi4gX2ltcG9ydGxpYi1zZWN0aW9uOgorCitOZXcgbW9kdWxlOiBpbXBvcnRsaWIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gMy4xIGluY2x1ZGVzIHRoZSA6bW9kOmBpbXBvcnRsaWJgIHBhY2thZ2UsIGEgcmUtaW1wbGVtZW50YXRpb24KK29mIHRoZSBsb2dpYyB1bmRlcmx5aW5nIFB5dGhvbidzIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4KKzptb2Q6YGltcG9ydGxpYmAgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRvcnMgb2YgUHl0aG9uIGludGVycHJldGVycyBhbmQKK3RvIHVzZXJzIHdobyB3aXNoIHRvIHdyaXRlIG5ldyBpbXBvcnRlcnMgdGhhdCBjYW4gcGFydGljaXBhdGUgaW4gdGhlCitpbXBvcnQgcHJvY2Vzcy4gIFB5dGhvbiAyLjcgZG9lc24ndCBjb250YWluIHRoZSBjb21wbGV0ZQorOm1vZDpgaW1wb3J0bGliYCBwYWNrYWdlLCBidXQgaW5zdGVhZCBoYXMgYSB0aW55IHN1YnNldCB0aGF0IGNvbnRhaW5zCithIHNpbmdsZSBmdW5jdGlvbiwgOmZ1bmM6YH5pbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAuCisKK2BgaW1wb3J0X21vZHVsZShuYW1lLCBwYWNrYWdlPU5vbmUpYGAgaW1wb3J0cyBhIG1vZHVsZS4gICpuYW1lKiBpcworYSBzdHJpbmcgY29udGFpbmluZyB0aGUgbW9kdWxlIG9yIHBhY2thZ2UncyBuYW1lLiAgSXQncyBwb3NzaWJsZSB0byBkbworcmVsYXRpdmUgaW1wb3J0cyBieSBwcm92aWRpbmcgYSBzdHJpbmcgdGhhdCBiZWdpbnMgd2l0aCBhIGBgLmBgCitjaGFyYWN0ZXIsIHN1Y2ggYXMgYGAuLnV0aWxzLmVycm9yc2BgLiAgRm9yIHJlbGF0aXZlIGltcG9ydHMsIHRoZQorKnBhY2thZ2UqIGFyZ3VtZW50IG11c3QgYmUgcHJvdmlkZWQgYW5kIGlzIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRoYXQKK3dpbGwgYmUgdXNlZCBhcyB0aGUgYW5jaG9yIGZvcgordGhlIHJlbGF0aXZlIGltcG9ydC4gIDpmdW5jOmB+aW1wb3J0bGliLmltcG9ydF9tb2R1bGVgIGJvdGggaW5zZXJ0cyB0aGUgaW1wb3J0ZWQKK21vZHVsZSBpbnRvIGBgc3lzLm1vZHVsZXNgYCBhbmQgcmV0dXJucyB0aGUgbW9kdWxlIG9iamVjdC4KKworSGVyZSBhcmUgc29tZSBleGFtcGxlczo6CisKKyAgICA+Pj4gZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUKKyAgICA+Pj4gYW55ZGJtID0gaW1wb3J0X21vZHVsZSgnYW55ZGJtJykgICMgU3RhbmRhcmQgYWJzb2x1dGUgaW1wb3J0CisgICAgPj4+IGFueWRibQorICAgIDxtb2R1bGUgJ2FueWRibScgZnJvbSAnL3AvcHl0aG9uL0xpYi9hbnlkYm0ucHknPgorICAgID4+PiAjIFJlbGF0aXZlIGltcG9ydAorICAgID4+PiBmaWxlX3V0aWwgPSBpbXBvcnRfbW9kdWxlKCcuLmZpbGVfdXRpbCcsICdkaXN0dXRpbHMuY29tbWFuZCcpCisgICAgPj4+IGZpbGVfdXRpbAorICAgIDxtb2R1bGUgJ2Rpc3R1dGlscy5maWxlX3V0aWwnIGZyb20gJy9weXRob24vTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHljJz4KKworOm1vZDpgaW1wb3J0bGliYCB3YXMgaW1wbGVtZW50ZWQgYnkgQnJldHQgQ2Fubm9uIGFuZCBpbnRyb2R1Y2VkIGluCitQeXRob24gMy4xLgorCisKK05ldyBtb2R1bGU6IHN5c2NvbmZpZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBzeXNjb25maWdgIG1vZHVsZSBoYXMgYmVlbiBwdWxsZWQgb3V0IG9mIHRoZSBEaXN0dXRpbHMKK3BhY2thZ2UsIGJlY29taW5nIGEgbmV3IHRvcC1sZXZlbCBtb2R1bGUgaW4gaXRzIG93biByaWdodC4KKzptb2Q6YHN5c2NvbmZpZ2AgcHJvdmlkZXMgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGluZm9ybWF0aW9uIGFib3V0CitQeXRob24ncyBidWlsZCBwcm9jZXNzOiBjb21waWxlciBzd2l0Y2hlcywgaW5zdGFsbGF0aW9uIHBhdGhzLCB0aGUKK3BsYXRmb3JtIG5hbWUsIGFuZCB3aGV0aGVyIFB5dGhvbiBpcyBydW5uaW5nIGZyb20gaXRzIHNvdXJjZQorZGlyZWN0b3J5LgorCitTb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZSBhcmU6CisKKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJgIHJldHVybnMgdmFyaWFibGVzIGZyb20gUHl0aG9uJ3MKKyAgTWFrZWZpbGUgYW5kIHRoZSA6ZmlsZTpgcHljb25maWcuaGAgZmlsZS4KKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X2NvbmZpZ192YXJzYCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nCisgIGFsbCBvZiB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuCisqIDpmdW5jOmB+c3lzY29uZmlnLmdldHBhdGhgIHJldHVybnMgdGhlIGNvbmZpZ3VyZWQgcGF0aCBmb3IKKyAgYSBwYXJ0aWN1bGFyIHR5cGUgb2YgbW9kdWxlOiB0aGUgc3RhbmRhcmQgbGlicmFyeSwKKyAgc2l0ZS1zcGVjaWZpYyBtb2R1bGVzLCBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzLCBldGMuCisqIDpmdW5jOmB+c3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZGAgcmV0dXJucyB0cnVlIGlmIHlvdSdyZSBydW5uaW5nIGEKKyAgYmluYXJ5IGZyb20gYSBQeXRob24gc291cmNlIHRyZWUsIGFuZCBmYWxzZSBvdGhlcndpc2UuCisKK0NvbnN1bHQgdGhlIDptb2Q6YHN5c2NvbmZpZ2AgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzIGFuZCBmb3IKK2EgY29tcGxldGUgbGlzdCBvZiBmdW5jdGlvbnMuCisKK1RoZSBEaXN0dXRpbHMgcGFja2FnZSBhbmQgOm1vZDpgc3lzY29uZmlnYCBhcmUgbm93IG1haW50YWluZWQgYnkgVGFyZWsKK1ppYWTDqSwgd2hvIGhhcyBhbHNvIHN0YXJ0ZWQgYSBEaXN0dXRpbHMyIHBhY2thZ2UgKHNvdXJjZSByZXBvc2l0b3J5IGF0CitodHRwOi8vaGcucHl0aG9uLm9yZy9kaXN0dXRpbHMyLykgZm9yIGRldmVsb3BpbmcgYSBuZXh0LWdlbmVyYXRpb24KK3ZlcnNpb24gb2YgRGlzdHV0aWxzLgorCisKK3R0azogVGhlbWVkIFdpZGdldHMgZm9yIFRrCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUY2wvVGsgOC41IGluY2x1ZGVzIGEgc2V0IG9mIHRoZW1lZCB3aWRnZXRzIHRoYXQgcmUtaW1wbGVtZW50IGJhc2ljIFRrCit3aWRnZXRzIGJ1dCBoYXZlIGEgbW9yZSBjdXN0b21pemFibGUgYXBwZWFyYW5jZSBhbmQgY2FuIHRoZXJlZm9yZSBtb3JlCitjbG9zZWx5IHJlc2VtYmxlIHRoZSBuYXRpdmUgcGxhdGZvcm0ncyB3aWRnZXRzLiAgVGhpcyB3aWRnZXQKK3NldCB3YXMgb3JpZ2luYWxseSBjYWxsZWQgVGlsZSwgYnV0IHdhcyByZW5hbWVkIHRvIFR0ayAoZm9yICJ0aGVtZWQgVGsiKQorb24gYmVpbmcgYWRkZWQgdG8gVGNsL1RjayByZWxlYXNlIDguNS4KKworVG8gbGVhcm4gbW9yZSwgcmVhZCB0aGUgOm1vZDpgdHRrYCBtb2R1bGUgZG9jdW1lbnRhdGlvbi4gIFlvdSBtYXkgYWxzbword2lzaCB0byByZWFkIHRoZSBUY2wvVGsgbWFudWFsIHBhZ2UgZGVzY3JpYmluZyB0aGUKK1R0ayB0aGVtZSBlbmdpbmUsIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy50Y2wudGsvbWFuL3RjbDguNS9Ua0NtZC90dGtfaW50cm8uaHRtLiBTb21lCitzY3JlZW5zaG90cyBvZiB0aGUgUHl0aG9uL1R0ayBjb2RlIGluIHVzZSBhcmUgYXQKK2h0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9weXRob24tdHRrL3dpa2kvU2NyZWVuc2hvdHMuCisKK1RoZSA6bW9kOmB0dGtgIG1vZHVsZSB3YXMgd3JpdHRlbiBieSBHdWlsaGVybWUgUG9sbyBhbmQgYWRkZWQgaW4KKzppc3N1ZTpgMjk4M2AuICBBbiBhbHRlcm5hdGUgdmVyc2lvbiBjYWxsZWQgYGBUaWxlLnB5YGAsIHdyaXR0ZW4gYnkKK01hcnRpbiBGcmFua2xpbiBhbmQgbWFpbnRhaW5lZCBieSBLZXZpbiBXYWx6ZXIsIHdhcyBwcm9wb3NlZCBmb3IKK2luY2x1c2lvbiBpbiA6aXNzdWU6YDI2MThgLCBidXQgdGhlIGF1dGhvcnMgYXJndWVkIHRoYXQgR3VpbGhlcm1lCitQb2xvJ3Mgd29yayB3YXMgbW9yZSBjb21wcmVoZW5zaXZlLgorCisKKy4uIF91bml0dGVzdC1zZWN0aW9uOgorCitVcGRhdGVkIG1vZHVsZTogdW5pdHRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgdW5pdHRlc3RgIG1vZHVsZSB3YXMgZ3JlYXRseSBlbmhhbmNlZDsgbWFueQorbmV3IGZlYXR1cmVzIHdlcmUgYWRkZWQuICBNb3N0IG9mIHRoZXNlIGZlYXR1cmVzIHdlcmUgaW1wbGVtZW50ZWQKK2J5IE1pY2hhZWwgRm9vcmQsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBUaGUgZW5oYW5jZWQgdmVyc2lvbiBvZgordGhlIG1vZHVsZSBpcyBkb3dubG9hZGFibGUgc2VwYXJhdGVseSBmb3IgdXNlIHdpdGggUHl0aG9uIHZlcnNpb25zIDIuNCB0byAyLjYsCitwYWNrYWdlZCBhcyB0aGUgOm1vZDpgdW5pdHRlc3QyYCBwYWNrYWdlLCBmcm9tCitodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvdW5pdHRlc3QyLgorCitXaGVuIHVzZWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB0aGUgbW9kdWxlIGNhbiBhdXRvbWF0aWNhbGx5IGRpc2NvdmVyCit0ZXN0cy4gIEl0J3Mgbm90IGFzIGZhbmN5IGFzIGBweS50ZXN0IDxodHRwOi8vcHl0ZXN0Lm9yZz5gX18gb3IKK2Bub3NlIDxodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcHl0aG9uLW5vc2UvPmBfXywgYnV0IHByb3ZpZGVzIGEgc2ltcGxlIHdheQordG8gcnVuIHRlc3RzIGtlcHQgd2l0aGluIGEgc2V0IG9mIHBhY2thZ2UgZGlyZWN0b3JpZXMuICBGb3IgZXhhbXBsZSwKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCB3aWxsIHNlYXJjaCB0aGUgOmZpbGU6YHRlc3QvYCBzdWJkaXJlY3RvcnkgZm9yCithbnkgaW1wb3J0YWJsZSB0ZXN0IGZpbGVzIG5hbWVkIGBgdGVzdCoucHlgYDo6CisKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciAtcyB0ZXN0CisKK0NvbnN1bHQgdGhlIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorKERldmVsb3BlZCBpbiA6aXNzdWU6YDYwMDFgLikKKworVGhlIDpmdW5jOmBtYWluYCBmdW5jdGlvbiBzdXBwb3J0cyBzb21lIG90aGVyIG5ldyBvcHRpb25zOgorCisqIDpvcHRpb246YC1iYCBvciA6b3B0aW9uOmAtLWJ1ZmZlcmAgd2lsbCBidWZmZXIgdGhlIHN0YW5kYXJkIG91dHB1dAorICBhbmQgc3RhbmRhcmQgZXJyb3Igc3RyZWFtcyBkdXJpbmcgZWFjaCB0ZXN0LiAgSWYgdGhlIHRlc3QgcGFzc2VzLAorICBhbnkgcmVzdWx0aW5nIG91dHB1dCB3aWxsIGJlIGRpc2NhcmRlZDsgb24gZmFpbHVyZSwgdGhlIGJ1ZmZlcmVkCisgIG91dHB1dCB3aWxsIGJlIGRpc3BsYXllZC4KKworKiA6b3B0aW9uOmAtY2Agb3IgOm9wdGlvbjpgLS1jYXRjaGAgd2lsbCBjYXVzZSB0aGUgY29udHJvbC1DIGludGVycnVwdAorICB0byBiZSBoYW5kbGVkIG1vcmUgZ3JhY2VmdWxseS4gIEluc3RlYWQgb2YgaW50ZXJydXB0aW5nIHRoZSB0ZXN0CisgIHByb2Nlc3MgaW1tZWRpYXRlbHksIHRoZSBjdXJyZW50bHkgcnVubmluZyB0ZXN0IHdpbGwgYmUgY29tcGxldGVkCisgIGFuZCB0aGVuIHRoZSBwYXJ0aWFsIHJlc3VsdHMgdXAgdG8gdGhlIGludGVycnVwdGlvbiB3aWxsIGJlIHJlcG9ydGVkLgorICBJZiB5b3UncmUgaW1wYXRpZW50LCBhIHNlY29uZCBwcmVzcyBvZiBjb250cm9sLUMgd2lsbCBjYXVzZSBhbiBpbW1lZGlhdGUKKyAgaW50ZXJydXB0aW9uLgorCisgIFRoaXMgY29udHJvbC1DIGhhbmRsZXIgdHJpZXMgdG8gYXZvaWQgY2F1c2luZyBwcm9ibGVtcyB3aGVuIHRoZSBjb2RlCisgIGJlaW5nIHRlc3RlZCBvciB0aGUgdGVzdHMgYmVpbmcgcnVuIGhhdmUgZGVmaW5lZCBhIHNpZ25hbCBoYW5kbGVyIG9mCisgIHRoZWlyIG93biwgYnkgbm90aWNpbmcgdGhhdCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCBhbmQKKyAgY2FsbGluZyBpdC4gIElmIHRoaXMgZG9lc24ndCB3b3JrIGZvciB5b3UsIHRoZXJlJ3MgYQorICA6ZnVuYzpgcmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CisgIHNob3VsZCBoYXZlIHRoZSBjb250cm9sLUMgaGFuZGxpbmcgZGlzYWJsZWQuCisKKyogOm9wdGlvbjpgLWZgIG9yIDpvcHRpb246YC0tZmFpbGZhc3RgIG1ha2VzCisgIHRlc3QgZXhlY3V0aW9uIHN0b3AgaW1tZWRpYXRlbHkgd2hlbiBhIHRlc3QgZmFpbHMgaW5zdGVhZCBvZgorICBjb250aW51aW5nIHRvIGV4ZWN1dGUgZnVydGhlciB0ZXN0cy4gIChTdWdnZXN0ZWQgYnkgQ2xpZmYgRHllciBhbmQKKyAgaW1wbGVtZW50ZWQgYnkgTWljaGFlbCBGb29yZDsgOmlzc3VlOmA4MDc0YC4pCisKK1RoZSBwcm9ncmVzcyBtZXNzYWdlcyBub3cgc2hvdyAneCcgZm9yIGV4cGVjdGVkIGZhaWx1cmVzCithbmQgJ3UnIGZvciB1bmV4cGVjdGVkIHN1Y2Nlc3NlcyB3aGVuIHJ1biBpbiB2ZXJib3NlIG1vZGUuCisoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24uKQorCitUZXN0IGNhc2VzIGNhbiByYWlzZSB0aGUgOmV4YzpgfnVuaXR0ZXN0LlNraXBUZXN0YCBleGNlcHRpb24gdG8gc2tpcCBhCit0ZXN0ICg6aXNzdWU6YDEwMzQwNTNgKS4KKworVGhlIGVycm9yIG1lc3NhZ2VzIGZvciA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYCwKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHJ1ZWAsIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEZhbHNlYAorZmFpbHVyZXMgbm93IHByb3ZpZGUgbW9yZSBpbmZvcm1hdGlvbi4gIElmIHlvdSBzZXQgdGhlCis6YXR0cjpgfnVuaXR0ZXN0LlRlc3RDYXNlLmxvbmdNZXNzYWdlYCBhdHRyaWJ1dGUgb2YgeW91ciA6Y2xhc3M6YH51bml0dGVzdC5UZXN0Q2FzZWAgY2xhc3NlcyB0bworVHJ1ZSwgYm90aCB0aGUgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBhbmQgYW55IGFkZGl0aW9uYWwgbWVzc2FnZSB5b3UKK3Byb3ZpZGUgd2lsbCBiZSBwcmludGVkIGZvciBmYWlsdXJlcy4gIChBZGRlZCBieSBNaWNoYWVsIEZvb3JkOyA6aXNzdWU6YDU2NjNgLikKKworVGhlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmFpc2VzYCBtZXRob2Qgbm93CityZXR1cm5zIGEgY29udGV4dCBoYW5kbGVyIHdoZW4gY2FsbGVkIHdpdGhvdXQgcHJvdmlkaW5nIGEgY2FsbGFibGUKK29iamVjdCB0byBydW4uICBGb3IgZXhhbXBsZSwgeW91IGNhbiB3cml0ZSB0aGlzOjoKKworICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgIHt9Wydmb28nXQorCisoSW1wbGVtZW50ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgNDQ0NGAuKQorCisuLiByZXYgNzg3NzQKKworTW9kdWxlLSBhbmQgY2xhc3MtbGV2ZWwgc2V0dXAgYW5kIHRlYXJkb3duIGZpeHR1cmVzIGFyZSBub3cgc3VwcG9ydGVkLgorTW9kdWxlcyBjYW4gY29udGFpbiA6ZnVuYzpgfnVuaXR0ZXN0LnNldFVwTW9kdWxlYCBhbmQgOmZ1bmM6YH51bml0dGVzdC50ZWFyRG93bk1vZHVsZWAKK2Z1bmN0aW9ucy4gIENsYXNzZXMgY2FuIGhhdmUgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zZXRVcENsYXNzYCBhbmQKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzc2AgbWV0aG9kcyB0aGF0IG11c3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzCisodXNpbmcgYGBAY2xhc3NtZXRob2RgYCBvciBlcXVpdmFsZW50KS4gIFRoZXNlIGZ1bmN0aW9ucyBhbmQKK21ldGhvZHMgYXJlIGludm9rZWQgd2hlbiB0aGUgdGVzdCBydW5uZXIgc3dpdGNoZXMgdG8gYSB0ZXN0IGNhc2UgaW4gYQorZGlmZmVyZW50IG1vZHVsZSBvciBjbGFzcy4KKworVGhlIG1ldGhvZHMgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hZGRDbGVhbnVwYCBhbmQKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuZG9DbGVhbnVwc2Agd2VyZSBhZGRlZC4KKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cGAgbGV0cyB5b3UgYWRkIGNsZWFudXAgZnVuY3Rpb25zIHRoYXQKK3dpbGwgYmUgY2FsbGVkIHVuY29uZGl0aW9uYWxseSAoYWZ0ZXIgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5zZXRVcGAgaWYKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc2V0VXBgIGZhaWxzLCBvdGhlcndpc2UgYWZ0ZXIgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bmApLiBUaGlzIGFsbG93cworZm9yIG11Y2ggc2ltcGxlciByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZHVyaW5nIHRlc3RzCisoOmlzc3VlOmA1Njc5YCkuCisKK0EgbnVtYmVyIG9mIG5ldyBtZXRob2RzIHdlcmUgYWRkZWQgdGhhdCBwcm92aWRlIG1vcmUgc3BlY2lhbGl6ZWQKK3Rlc3RzLiAgTWFueSBvZiB0aGVzZSBtZXRob2RzIHdlcmUgd3JpdHRlbiBieSBHb29nbGUgZW5naW5lZXJzCitmb3IgdXNlIGluIHRoZWlyIHRlc3Qgc3VpdGVzOyBHcmVnb3J5IFAuIFNtaXRoLCBNaWNoYWVsIEZvb3JkLCBhbmQKK0d2UiB3b3JrZWQgb24gbWVyZ2luZyB0aGVtIGludG8gUHl0aG9uJ3MgdmVyc2lvbiBvZiA6bW9kOmB1bml0dGVzdGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc05vbmVgIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydElzTm90Tm9uZWAgdGFrZSBvbmUKKyAgZXhwcmVzc2lvbiBhbmQgdmVyaWZ5IHRoYXQgdGhlIHJlc3VsdCBpcyBvciBpcyBub3QgYGBOb25lYGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc2AgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXNOb3RgCisgIHRha2UgdHdvIHZhbHVlcyBhbmQgY2hlY2sgd2hldGhlciB0aGUgdHdvIHZhbHVlcyBldmFsdWF0ZSB0byB0aGUgc2FtZSBvYmplY3Qgb3Igbm90LgorICAoQWRkZWQgYnkgTWljaGFlbCBGb29yZDsgOmlzc3VlOmAyNTc4YC4pCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJc0luc3RhbmNlYCBhbmQKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RJc0luc3RhbmNlYCBjaGVjayB3aGV0aGVyCisgIHRoZSByZXN1bHRpbmcgb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgcGFydGljdWxhciBjbGFzcywgb3Igb2YKKyAgb25lIG9mIGEgdHVwbGUgb2YgY2xhc3Nlcy4gIChBZGRlZCBieSBHZW9yZyBCcmFuZGw7IDppc3N1ZTpgNzAzMWAuKQorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlcmAsIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0R3JlYXRlckVxdWFsYCwKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMZXNzYCwgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGVzc0VxdWFsYCBjb21wYXJlCisgIHR3byBxdWFudGl0aWVzLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWxgIGNvbXBhcmVzIHR3byBzdHJpbmdzLCBhbmQgaWYgdGhleSdyZQorICBub3QgZXF1YWwsIGRpc3BsYXlzIGEgaGVscGZ1bCBjb21wYXJpc29uIHRoYXQgaGlnaGxpZ2h0cyB0aGUKKyAgZGlmZmVyZW5jZXMgaW4gdGhlIHR3byBzdHJpbmdzLiAgVGhpcyBjb21wYXJpc29uIGlzIG5vdyB1c2VkIGJ5CisgIGRlZmF1bHQgd2hlbiBVbmljb2RlIHN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSZWdleHBNYXRjaGVzYCBhbmQKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RSZWdleHBNYXRjaGVzYCBjaGVja3Mgd2hldGhlciB0aGUKKyAgZmlyc3QgYXJndW1lbnQgaXMgYSBzdHJpbmcgbWF0Y2hpbmcgb3Igbm90IG1hdGNoaW5nIHRoZSByZWd1bGFyCisgIGV4cHJlc3Npb24gcHJvdmlkZWQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCAoOmlzc3VlOmA4MDM4YCkuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNSZWdleHBgIGNoZWNrcyB3aGV0aGVyIGEgcGFydGljdWxhciBleGNlcHRpb24KKyAgaXMgcmFpc2VkLCBhbmQgdGhlbiBhbHNvIGNoZWNrcyB0aGF0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YKKyAgdGhlIGV4Y2VwdGlvbiBtYXRjaGVzIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24uCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRJbmAgYW5kIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90SW5gCisgIHRlc3RzIHdoZXRoZXIgKmZpcnN0KiBpcyBvciBpcyBub3QgaW4gICpzZWNvbmQqLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0SXRlbXNFcXVhbGAgdGVzdHMgd2hldGhlciB0d28gcHJvdmlkZWQgc2VxdWVuY2VzCisgIGNvbnRhaW4gdGhlIHNhbWUgZWxlbWVudHMuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRTZXRFcXVhbGAgY29tcGFyZXMgd2hldGhlciB0d28gc2V0cyBhcmUgZXF1YWwsIGFuZAorICBvbmx5IHJlcG9ydHMgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIHNldHMgaW4gY2FzZSBvZiBlcnJvci4KKworKiBTaW1pbGFybHksIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0TGlzdEVxdWFsYCBhbmQgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRUdXBsZUVxdWFsYAorICBjb21wYXJlIHRoZSBzcGVjaWZpZWQgdHlwZXMgYW5kIGV4cGxhaW4gYW55IGRpZmZlcmVuY2VzIHdpdGhvdXQgbmVjZXNzYXJpbHkKKyAgcHJpbnRpbmcgdGhlaXIgZnVsbCB2YWx1ZXM7IHRoZXNlIG1ldGhvZHMgYXJlIG5vdyB1c2VkIGJ5IGRlZmF1bHQKKyAgd2hlbiBjb21wYXJpbmcgbGlzdHMgYW5kIHR1cGxlcyB1c2luZyA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsYC4KKyAgTW9yZSBnZW5lcmFsbHksIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0U2VxdWVuY2VFcXVhbGAgY29tcGFyZXMgdHdvIHNlcXVlbmNlcworICBhbmQgY2FuIG9wdGlvbmFsbHkgY2hlY2sgd2hldGhlciBib3RoIHNlcXVlbmNlcyBhcmUgb2YgYQorICBwYXJ0aWN1bGFyIHR5cGUuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0RXF1YWxgIGNvbXBhcmVzIHR3byBkaWN0aW9uYXJpZXMgYW5kIHJlcG9ydHMgdGhlCisgIGRpZmZlcmVuY2VzOyBpdCdzIG5vdyB1c2VkIGJ5IGRlZmF1bHQgd2hlbiB5b3UgY29tcGFyZSB0d28gZGljdGlvbmFyaWVzCisgIHVzaW5nIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxgLiAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXRgIGNoZWNrcyB3aGV0aGVyCisgIGFsbCBvZiB0aGUga2V5L3ZhbHVlIHBhaXJzIGluICpmaXJzdCogYXJlIGZvdW5kIGluICpzZWNvbmQqLgorCisqIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWxgIGFuZCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydE5vdEFsbW9zdEVxdWFsYCB0ZXN0CisgIHdoZXRoZXIgKmZpcnN0KiBhbmQgKnNlY29uZCogYXJlIGFwcHJveGltYXRlbHkgZXF1YWwuICBUaGlzIG1ldGhvZAorICBjYW4gZWl0aGVyIHJvdW5kIHRoZWlyIGRpZmZlcmVuY2UgdG8gYW4gb3B0aW9uYWxseS1zcGVjaWZpZWQgbnVtYmVyCisgIG9mICpwbGFjZXMqICh0aGUgZGVmYXVsdCBpcyA3KSBhbmQgY29tcGFyZSBpdCB0byB6ZXJvLCBvciByZXF1aXJlCisgIHRoZSBkaWZmZXJlbmNlIHRvIGJlIHNtYWxsZXIgdGhhbiBhIHN1cHBsaWVkICpkZWx0YSogdmFsdWUuCisKKyogOm1ldGg6YH51bml0dGVzdC5UZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lYCBwcm9wZXJseSBob25vcnMgdGhlCisgIDphdHRyOmB+dW5pdHRlc3QuVGVzdExvYWRlci5zdWl0ZUNsYXNzYCBhdHRyaWJ1dGUgb2YKKyAgdGhlIDpjbGFzczpgfnVuaXR0ZXN0LlRlc3RMb2FkZXJgLiAoRml4ZWQgYnkgTWFyayBSb2RkeTsgOmlzc3VlOmA2ODY2YC4pCisKKyogQSBuZXcgaG9vayBsZXRzIHlvdSBleHRlbmQgdGhlIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0RXF1YWxgIG1ldGhvZCB0byBoYW5kbGUKKyAgbmV3IGRhdGEgdHlwZXMuICBUaGUgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hZGRUeXBlRXF1YWxpdHlGdW5jYCBtZXRob2QgdGFrZXMgYSB0eXBlCisgIG9iamVjdCBhbmQgYSBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB3aGVuIGJvdGggb2YgdGhlCisgIG9iamVjdHMgYmVpbmcgY29tcGFyZWQgYXJlIG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gIFRoaXMgZnVuY3Rpb24KKyAgc2hvdWxkIGNvbXBhcmUgdGhlIHR3byBvYmplY3RzIGFuZCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhleSBkb24ndAorICBtYXRjaDsgaXQncyBhIGdvb2QgaWRlYSBmb3IgdGhlIGZ1bmN0aW9uIHRvIHByb3ZpZGUgYWRkaXRpb25hbAorICBpbmZvcm1hdGlvbiBhYm91dCB3aHkgdGhlIHR3byBvYmplY3RzIGFyZW4ndCBtYXRjaGluZywgbXVjaCBhcyB0aGUgbmV3CisgIHNlcXVlbmNlIGNvbXBhcmlzb24gbWV0aG9kcyBkby4KKworOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyB0YWtlcyBhbiBvcHRpb25hbCBgYGV4aXRgYCBhcmd1bWVudC4gIElmCitGYWxzZSwgOmZ1bmM6YH51bml0dGVzdC5tYWluYCBkb2Vzbid0IGNhbGwgOmZ1bmM6YHN5cy5leGl0YCwgYWxsb3dpbmcKKzpmdW5jOmBtYWluYCB0byBiZSB1c2VkIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorKENvbnRyaWJ1dGVkIGJ5IEouIFBhYmxvIEZlcm7DoW5kZXo7IDppc3N1ZTpgMzM3OWAuKQorCis6Y2xhc3M6YH51bml0dGVzdC5UZXN0UmVzdWx0YCBoYXMgbmV3IDptZXRoOmB+dW5pdHRlc3QuVGVzdFJlc3VsdC5zdGFydFRlc3RSdW5gIGFuZAorOm1ldGg6YH51bml0dGVzdC5UZXN0UmVzdWx0LnN0b3BUZXN0UnVuYCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZCBpbW1lZGlhdGVseSBiZWZvcmUKK2FuZCBhZnRlciBhIHRlc3QgcnVuLiAgKENvbnRyaWJ1dGVkIGJ5IFJvYmVydCBDb2xsaW5zOyA6aXNzdWU6YDU3MjhgLikKKworV2l0aCBhbGwgdGhlc2UgY2hhbmdlcywgdGhlIDpmaWxlOmB1bml0dGVzdC5weWAgd2FzIGJlY29taW5nIGF3a3dhcmRseQorbGFyZ2UsIHNvIHRoZSBtb2R1bGUgd2FzIHR1cm5lZCBpbnRvIGEgcGFja2FnZSBhbmQgdGhlIGNvZGUgc3BsaXQgaW50bworc2V2ZXJhbCBmaWxlcyAoYnkgQmVuamFtaW4gUGV0ZXJzb24pLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCBob3cgdGhlCittb2R1bGUgaXMgaW1wb3J0ZWQgb3IgdXNlZC4KKworLi4gc2VlYWxzbzo6CisKKyAgaHR0cDovL3d3dy52b2lkc3BhY2Uub3JnLnVrL3B5dGhvbi9hcnRpY2xlcy91bml0dGVzdDIuc2h0bWwKKyAgICBEZXNjcmliZXMgdGhlIG5ldyBmZWF0dXJlcywgaG93IHRvIHVzZSB0aGVtLCBhbmQgdGhlCisgICAgcmF0aW9uYWxlIGZvciB2YXJpb3VzIGRlc2lnbiBkZWNpc2lvbnMuICAoQnkgTWljaGFlbCBGb29yZC4pCisKKy4uIF9lbGVtZW50dHJlZS1zZWN0aW9uOgorCitVcGRhdGVkIG1vZHVsZTogRWxlbWVudFRyZWUgMS4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHZlcnNpb24gb2YgdGhlIEVsZW1lbnRUcmVlIGxpYnJhcnkgaW5jbHVkZWQgd2l0aCBQeXRob24gd2FzIHVwZGF0ZWQgdG8KK3ZlcnNpb24gMS4zLiAgU29tZSBvZiB0aGUgbmV3IGZlYXR1cmVzIGFyZToKKworKiBUaGUgdmFyaW91cyBwYXJzaW5nIGZ1bmN0aW9ucyBub3cgdGFrZSBhICpwYXJzZXIqIGtleXdvcmQgYXJndW1lbnQKKyAgZ2l2aW5nIGFuIDpjbGFzczpgWE1MUGFyc2VyYCBpbnN0YW5jZSB0aGF0IHdpbGwKKyAgYmUgdXNlZC4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhlIGZpbGUncyBpbnRlcm5hbCBlbmNvZGluZzo6CisKKyAgICBwID0gRVQuWE1MUGFyc2VyKGVuY29kaW5nPSd1dGYtOCcpCisgICAgdCA9IEVULlhNTCgiIiI8cm9vdC8+IiIiLCBwYXJzZXI9cCkKKworICBFcnJvcnMgaW4gcGFyc2luZyBYTUwgbm93IHJhaXNlIGEgOmV4YzpgUGFyc2VFcnJvcmAgZXhjZXB0aW9uLCB3aG9zZQorICBpbnN0YW5jZXMgaGF2ZSBhIDphdHRyOmBwb3NpdGlvbmAgYXR0cmlidXRlCisgIGNvbnRhaW5pbmcgYSAoKmxpbmUqLCAqY29sdW1uKikgdHVwbGUgZ2l2aW5nIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJvYmxlbS4KKworKiBFbGVtZW50VHJlZSdzIGNvZGUgZm9yIGNvbnZlcnRpbmcgdHJlZXMgdG8gYSBzdHJpbmcgaGFzIGJlZW4KKyAgc2lnbmlmaWNhbnRseSByZXdvcmtlZCwgbWFraW5nIGl0IHJvdWdobHkgdHdpY2UgYXMgZmFzdCBpbiBtYW55CisgIGNhc2VzLiAgVGhlIDpjbGFzczpgRWxlbWVudFRyZWVgIDptZXRoOmB3cml0ZWAgYW5kIDpjbGFzczpgRWxlbWVudGAKKyAgOm1ldGg6YHdyaXRlYCBtZXRob2RzIG5vdyBoYXZlIGEgKm1ldGhvZCogcGFyYW1ldGVyIHRoYXQgY2FuIGJlCisgICJ4bWwiICh0aGUgZGVmYXVsdCksICJodG1sIiwgb3IgInRleHQiLiAgSFRNTCBtb2RlIHdpbGwgb3V0cHV0IGVtcHR5CisgIGVsZW1lbnRzIGFzIGBgPGVtcHR5PjwvZW1wdHk+YGAgaW5zdGVhZCBvZiBgYDxlbXB0eS8+YGAsIGFuZCB0ZXh0CisgIG1vZGUgd2lsbCBza2lwIG92ZXIgZWxlbWVudHMgYW5kIG9ubHkgb3V0cHV0IHRoZSB0ZXh0IGNodW5rcy4gIElmCisgIHlvdSBzZXQgdGhlIDphdHRyOmB0YWdgIGF0dHJpYnV0ZSBvZiBhbiBlbGVtZW50IHRvIGBgTm9uZWBgIGJ1dAorICBsZWF2ZSBpdHMgY2hpbGRyZW4gaW4gcGxhY2UsIHRoZSBlbGVtZW50IHdpbGwgYmUgb21pdHRlZCB3aGVuIHRoZQorICB0cmVlIGlzIHdyaXR0ZW4gb3V0LCBzbyB5b3UgZG9uJ3QgbmVlZCB0byBkbyBtb3JlIGV4dGVuc2l2ZSByZWFycmFuZ2VtZW50CisgIHRvIHJlbW92ZSBhIHNpbmdsZSBlbGVtZW50LgorCisgIE5hbWVzcGFjZSBoYW5kbGluZyBoYXMgYWxzbyBiZWVuIGltcHJvdmVkLiAgQWxsIGBgeG1sbnM6PHdoYXRldmVyPmBgCisgIGRlY2xhcmF0aW9ucyBhcmUgbm93IG91dHB1dCBvbiB0aGUgcm9vdCBlbGVtZW50LCBub3Qgc2NhdHRlcmVkIHRocm91Z2hvdXQKKyAgdGhlIHJlc3VsdGluZyBYTUwuICBZb3UgY2FuIHNldCB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgZm9yIGEgdHJlZQorICBieSBzZXR0aW5nIHRoZSA6YXR0cjpgZGVmYXVsdF9uYW1lc3BhY2VgIGF0dHJpYnV0ZSBhbmQgY2FuCisgIHJlZ2lzdGVyIG5ldyBwcmVmaXhlcyB3aXRoIDptZXRoOmByZWdpc3Rlcl9uYW1lc3BhY2VgLiAgSW4gWE1MIG1vZGUsCisgIHlvdSBjYW4gdXNlIHRoZSB0cnVlL2ZhbHNlICp4bWxfZGVjbGFyYXRpb24qIHBhcmFtZXRlciB0byBzdXBwcmVzcyB0aGUKKyAgWE1MIGRlY2xhcmF0aW9uLgorCisqIE5ldyA6Y2xhc3M6YEVsZW1lbnRgIG1ldGhvZDogOm1ldGg6YGV4dGVuZGAgYXBwZW5kcyB0aGUgaXRlbXMgZnJvbSBhCisgIHNlcXVlbmNlIHRvIHRoZSBlbGVtZW50J3MgY2hpbGRyZW4uICBFbGVtZW50cyB0aGVtc2VsdmVzIGJlaGF2ZSBsaWtlCisgIHNlcXVlbmNlcywgc28gaXQncyBlYXN5IHRvIG1vdmUgY2hpbGRyZW4gZnJvbSBvbmUgZWxlbWVudCB0bworICBhbm90aGVyOjoKKworICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorCisgICAgdCA9IEVULlhNTCgiIiI8bGlzdD4KKyAgICAgIDxpdGVtPjE8L2l0ZW0+IDxpdGVtPjI8L2l0ZW0+ICA8aXRlbT4zPC9pdGVtPgorICAgIDwvbGlzdD4iIiIpCisgICAgbmV3ID0gRVQuWE1MKCc8cm9vdC8+JykKKyAgICBuZXcuZXh0ZW5kKHQpCisKKyAgICAjIE91dHB1dHMgPHJvb3Q+PGl0ZW0+MTwvaXRlbT4uLi48L3Jvb3Q+CisgICAgcHJpbnQgRVQudG9zdHJpbmcobmV3KQorCisqIE5ldyA6Y2xhc3M6YEVsZW1lbnRgIG1ldGhvZDogOm1ldGg6YGl0ZXJgIHlpZWxkcyB0aGUgY2hpbGRyZW4gb2YgdGhlCisgIGVsZW1lbnQgYXMgYSBnZW5lcmF0b3IuICBJdCdzIGFsc28gcG9zc2libGUgdG8gd3JpdGUgYGBmb3IgY2hpbGQgaW4KKyAgZWxlbTpgYCB0byBsb29wIG92ZXIgYW4gZWxlbWVudCdzIGNoaWxkcmVuLiAgVGhlIGV4aXN0aW5nIG1ldGhvZAorICA6bWV0aDpgZ2V0aXRlcmF0b3JgIGlzIG5vdyBkZXByZWNhdGVkLCBhcyBpcyA6bWV0aDpgZ2V0Y2hpbGRyZW5gCisgIHdoaWNoIGNvbnN0cnVjdHMgYW5kIHJldHVybnMgYSBsaXN0IG9mIGNoaWxkcmVuLgorCisqIE5ldyA6Y2xhc3M6YEVsZW1lbnRgIG1ldGhvZDogOm1ldGg6YGl0ZXJ0ZXh0YCB5aWVsZHMgYWxsIGNodW5rcyBvZgorICB0ZXh0IHRoYXQgYXJlIGRlc2NlbmRhbnRzIG9mIHRoZSBlbGVtZW50LiAgRm9yIGV4YW1wbGU6OgorCisgICAgdCA9IEVULlhNTCgiIiI8bGlzdD4KKyAgICAgIDxpdGVtPjE8L2l0ZW0+IDxpdGVtPjI8L2l0ZW0+ICA8aXRlbT4zPC9pdGVtPgorICAgIDwvbGlzdD4iIiIpCisKKyAgICAjIE91dHB1dHMgWydcbiAgJywgJzEnLCAnICcsICcyJywgJyAgJywgJzMnLCAnXG4nXQorICAgIHByaW50IGxpc3QodC5pdGVydGV4dCgpKQorCisqIERlcHJlY2F0ZWQ6IHVzaW5nIGFuIGVsZW1lbnQgYXMgYSBCb29sZWFuIChpLmUuLCBgYGlmIGVsZW06YGApIHdvdWxkCisgIHJldHVybiB0cnVlIGlmIHRoZSBlbGVtZW50IGhhZCBhbnkgY2hpbGRyZW4sIG9yIGZhbHNlIGlmIHRoZXJlIHdlcmUKKyAgbm8gY2hpbGRyZW4uICBUaGlzIGJlaGF2aW91ciBpcyBjb25mdXNpbmcgLS0gYGBOb25lYGAgaXMgZmFsc2UsIGJ1dAorICBzbyBpcyBhIGNoaWxkbGVzcyBlbGVtZW50PyAtLSBzbyBpdCB3aWxsIG5vdyB0cmlnZ2VyIGEKKyAgOmV4YzpgRnV0dXJlV2FybmluZ2AuICBJbiB5b3VyIGNvZGUsIHlvdSBzaG91bGQgYmUgZXhwbGljaXQ6IHdyaXRlCisgIGBgbGVuKGVsZW0pICE9IDBgYCBpZiB5b3UncmUgaW50ZXJlc3RlZCBpbiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLAorICBvciBgYGVsZW0gaXMgbm90IE5vbmVgYC4KKworRnJlZHJpayBMdW5kaCBkZXZlbG9wcyBFbGVtZW50VHJlZSBhbmQgcHJvZHVjZWQgdGhlIDEuMyB2ZXJzaW9uOworeW91IGNhbiByZWFkIGhpcyBhcnRpY2xlIGRlc2NyaWJpbmcgMS4zIGF0CitodHRwOi8vZWZmYm90Lm9yZy96b25lL2VsZW1lbnR0cmVlLTEzLWludHJvLmh0bS4KK0Zsb3JlbnQgWGljbHVuYSB1cGRhdGVkIHRoZSB2ZXJzaW9uIGluY2x1ZGVkIHdpdGgKK1B5dGhvbiwgYWZ0ZXIgZGlzY3Vzc2lvbnMgb24gcHl0aG9uLWRldiBhbmQgaW4gOmlzc3VlOmA2NDcyYC4pCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitCdWlsZCBhbmQgQyBBUEkgQ2hhbmdlcworPT09PT09PT09PT09PT09PT09PT09PT0KKworQ2hhbmdlcyB0byBQeXRob24ncyBidWlsZCBwcm9jZXNzIGFuZCB0byB0aGUgQyBBUEkgaW5jbHVkZToKKworKiBUaGUgbGF0ZXN0IHJlbGVhc2Ugb2YgdGhlIEdOVSBEZWJ1Z2dlciwgR0RCIDcsIGNhbiBiZSBgc2NyaXB0ZWQKKyAgdXNpbmcgUHl0aG9uCisgIDxodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2N1cnJlbnQvb25saW5lZG9jcy9nZGIvUHl0aG9uLmh0bWw+YF9fLgorICBXaGVuIHlvdSBiZWdpbiBkZWJ1Z2dpbmcgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIFAsIEdEQiB3aWxsIGxvb2sgZm9yCisgIGEgZmlsZSBuYW1lZCBgYFAtZ2RiLnB5YGAgYW5kIGF1dG9tYXRpY2FsbHkgcmVhZCBpdC4gIERhdmUgTWFsY29sbQorICBjb250cmlidXRlZCBhIDpmaWxlOmBweXRob24tZ2RiLnB5YCB0aGF0IGFkZHMgYSBudW1iZXIgb2YKKyAgY29tbWFuZHMgdXNlZnVsIHdoZW4gZGVidWdnaW5nIFB5dGhvbiBpdHNlbGYuICBGb3IgZXhhbXBsZSwKKyAgYGBweS11cGBgIGFuZCBgYHB5LWRvd25gYCBnbyB1cCBvciBkb3duIG9uZSBQeXRob24gc3RhY2sgZnJhbWUsCisgIHdoaWNoIHVzdWFsbHkgY29ycmVzcG9uZHMgdG8gc2V2ZXJhbCBDIHN0YWNrIGZyYW1lcy4gIGBgcHktcHJpbnRgYAorICBwcmludHMgdGhlIHZhbHVlIG9mIGEgUHl0aG9uIHZhcmlhYmxlLCBhbmQgYGBweS1idGBgIHByaW50cyB0aGUKKyAgUHl0aG9uIHN0YWNrIHRyYWNlLiAgKEFkZGVkIGFzIGEgcmVzdWx0IG9mIDppc3N1ZTpgODAzMmAuKQorCisqIElmIHlvdSB1c2UgdGhlIDpmaWxlOmAuZ2RiaW5pdGAgZmlsZSBwcm92aWRlZCB3aXRoIFB5dGhvbiwKKyAgdGhlICJweW8iIG1hY3JvIGluIHRoZSAyLjcgdmVyc2lvbiBub3cgd29ya3MgY29ycmVjdGx5IHdoZW4gdGhlIHRocmVhZCBiZWluZworICBkZWJ1Z2dlZCBkb2Vzbid0IGhvbGQgdGhlIEdJTDsgdGhlIG1hY3JvIG5vdyBhY3F1aXJlcyBpdCBiZWZvcmUgcHJpbnRpbmcuCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lcjsgOmlzc3VlOmAzNjMyYC4pCisKKyogOmM6ZnVuYzpgUHlfQWRkUGVuZGluZ0NhbGxgIGlzIG5vdyB0aHJlYWQtc2FmZSwgbGV0dGluZyBhbnkKKyAgd29ya2VyIHRocmVhZCBzdWJtaXQgbm90aWZpY2F0aW9ucyB0byB0aGUgbWFpbiBQeXRob24gdGhyZWFkLiAgVGhpcworICBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhc3luY2hyb25vdXMgSU8gb3BlcmF0aW9ucy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA0MjkzYC4pCisKKyogTmV3IGZ1bmN0aW9uOiA6YzpmdW5jOmBQeUNvZGVfTmV3RW1wdHlgIGNyZWF0ZXMgYW4gZW1wdHkgY29kZSBvYmplY3Q7CisgIG9ubHkgdGhlIGZpbGVuYW1lLCBmdW5jdGlvbiBuYW1lLCBhbmQgZmlyc3QgbGluZSBudW1iZXIgYXJlIHJlcXVpcmVkLgorICBUaGlzIGlzIHVzZWZ1bCBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBhcmUgYXR0ZW1wdGluZyB0bworICBjb25zdHJ1Y3QgYSBtb3JlIHVzZWZ1bCB0cmFjZWJhY2sgc3RhY2suICBQcmV2aW91c2x5IHN1Y2gKKyAgZXh0ZW5zaW9ucyBuZWVkZWQgdG8gY2FsbCA6YzpmdW5jOmBQeUNvZGVfTmV3YCwgd2hpY2ggaGFkIG1hbnkKKyAgbW9yZSBhcmd1bWVudHMuICAoQWRkZWQgYnkgSmVmZnJleSBZYXNza2luLikKKworKiBOZXcgZnVuY3Rpb246IDpjOmZ1bmM6YFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2NgIGNyZWF0ZXMgYSBuZXcKKyAgZXhjZXB0aW9uIGNsYXNzLCBqdXN0IGFzIHRoZSBleGlzdGluZyA6YzpmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25gIGRvZXMsCisgIGJ1dCB0YWtlcyBhbiBleHRyYSBgYGNoYXIgKmBgIGFyZ3VtZW50IGNvbnRhaW5pbmcgdGhlIGRvY3N0cmluZyBmb3IgdGhlCisgIG5ldyBleGNlcHRpb24gY2xhc3MuICAoQWRkZWQgYnkgJ2xla21hJyBvbiB0aGUgUHl0aG9uIGJ1ZyB0cmFja2VyOworICA6aXNzdWU6YDcwMzNgLikKKworKiBOZXcgZnVuY3Rpb246IDpjOmZ1bmM6YFB5RnJhbWVfR2V0TGluZU51bWJlcmAgdGFrZXMgYSBmcmFtZSBvYmplY3QKKyAgYW5kIHJldHVybnMgdGhlIGxpbmUgbnVtYmVyIHRoYXQgdGhlIGZyYW1lIGlzIGN1cnJlbnRseSBleGVjdXRpbmcuCisgIFByZXZpb3VzbHkgY29kZSB3b3VsZCBuZWVkIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGJ5dGVjb2RlCisgIGluc3RydWN0aW9uIGN1cnJlbnRseSBleGVjdXRpbmcsIGFuZCB0aGVuIGxvb2sgdXAgdGhlIGxpbmUgbnVtYmVyCisgIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBhZGRyZXNzLiAgKEFkZGVkIGJ5IEplZmZyZXkgWWFzc2tpbi4pCisKKyogTmV3IGZ1bmN0aW9uczogOmM6ZnVuYzpgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93YCBhbmQKKyAgOmM6ZnVuYzpgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvd2AgIGFwcHJveGltYXRlcyBhIFB5dGhvbiBsb25nCisgIGludGVnZXIgYXMgYSBDIDpjOnR5cGU6YGxvbmdgIG9yIDpjOnR5cGU6YGxvbmcgbG9uZ2AuCisgIElmIHRoZSBudW1iZXIgaXMgdG9vIGxhcmdlIHRvIGZpdCBpbnRvCisgIHRoZSBvdXRwdXQgdHlwZSwgYW4gKm92ZXJmbG93KiBmbGFnIGlzIHNldCBhbmQgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4KKyAgKENvbnRyaWJ1dGVkIGJ5IENhc2UgVmFuIEhvcnNlbjsgOmlzc3VlOmA3NTI4YCBhbmQgOmlzc3VlOmA3NzY3YC4pCisKKyogTmV3IGZ1bmN0aW9uOiBzdGVtbWluZyBmcm9tIHRoZSByZXdyaXRlIG9mIHN0cmluZy10by1mbG9hdCBjb252ZXJzaW9uLAorICBhIG5ldyA6YzpmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGZ1bmN0aW9uIHdhcyBhZGRlZC4gIFRoZSBvbGQKKyAgOmM6ZnVuYzpgUHlPU19hc2NpaV9zdHJ0b2RgIGFuZCA6YzpmdW5jOmBQeU9TX2FzY2lpX2F0b2ZgIGZ1bmN0aW9ucworICBhcmUgbm93IGRlcHJlY2F0ZWQuCisKKyogTmV3IGZ1bmN0aW9uOiA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIHNldHMgdGhlIHZhbHVlIG9mCisgIGBgc3lzLmFyZ3ZgYCBhbmQgY2FuIG9wdGlvbmFsbHkgdXBkYXRlIGBgc3lzLnBhdGhgYCB0byBpbmNsdWRlIHRoZQorICBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgc2NyaXB0IG5hbWVkIGJ5IGBgc3lzLmFyZ3ZbMF1gYCBkZXBlbmRpbmcKKyAgb24gdGhlIHZhbHVlIG9mIGFuICp1cGRhdGVwYXRoKiBwYXJhbWV0ZXIuCisKKyAgVGhpcyBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gY2xvc2UgYSBzZWN1cml0eSBob2xlIGZvciBhcHBsaWNhdGlvbnMKKyAgdGhhdCBlbWJlZCBQeXRob24uICBUaGUgb2xkIGZ1bmN0aW9uLCA6YzpmdW5jOmBQeVN5c19TZXRBcmd2YCwgd291bGQKKyAgYWx3YXlzIHVwZGF0ZSBgYHN5cy5wYXRoYGAsIGFuZCBzb21ldGltZXMgaXQgd291bGQgYWRkIHRoZSBjdXJyZW50CisgIGRpcmVjdG9yeS4gIFRoaXMgbWVhbnQgdGhhdCwgaWYgeW91IHJhbiBhbiBhcHBsaWNhdGlvbiBlbWJlZGRpbmcKKyAgUHl0aG9uIGluIGEgZGlyZWN0b3J5IGNvbnRyb2xsZWQgYnkgc29tZW9uZSBlbHNlLCBhdHRhY2tlcnMgY291bGQKKyAgcHV0IGEgVHJvamFuLWhvcnNlIG1vZHVsZSBpbiB0aGUgZGlyZWN0b3J5IChzYXksIGEgZmlsZSBuYW1lZAorICA6ZmlsZTpgb3MucHlgKSB0aGF0IHlvdXIgYXBwbGljYXRpb24gd291bGQgdGhlbiBpbXBvcnQgYW5kIHJ1bi4KKworICBJZiB5b3UgbWFpbnRhaW4gYSBDL0MrKyBhcHBsaWNhdGlvbiB0aGF0IGVtYmVkcyBQeXRob24sIGNoZWNrCisgIHdoZXRoZXIgeW91J3JlIGNhbGxpbmcgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndmAgYW5kIGNhcmVmdWxseSBjb25zaWRlcgorICB3aGV0aGVyIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQgYmUgdXNpbmcgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YAorICB3aXRoICp1cGRhdGVwYXRoKiBzZXQgdG8gZmFsc2UuCisKKyAgU2VjdXJpdHkgaXNzdWUgcmVwb3J0ZWQgYXMgYENWRS0yMDA4LTU5ODMKKyAgPGh0dHA6Ly9jdmUubWl0cmUub3JnL2NnaS1iaW4vY3ZlbmFtZS5jZ2k/bmFtZT1DVkUtMjAwOC01OTgzPmBfOworICBkaXNjdXNzZWQgaW4gOmlzc3VlOmA1NzUzYCwgYW5kIGZpeGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisqIE5ldyBtYWNyb3M6IHRoZSBQeXRob24gaGVhZGVyIGZpbGVzIG5vdyBkZWZpbmUgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisgIDpjOm1hY3JvOmBQeV9JU0FMTlVNYCwKKyAgOmM6bWFjcm86YFB5X0lTQUxQSEFgLAorICA6YzptYWNybzpgUHlfSVNESUdJVGAsCisgIDpjOm1hY3JvOmBQeV9JU0xPV0VSYCwKKyAgOmM6bWFjcm86YFB5X0lTU1BBQ0VgLAorICA6YzptYWNybzpgUHlfSVNVUFBFUmAsCisgIDpjOm1hY3JvOmBQeV9JU1hESUdJVGAsCisgIGFuZCA6YzptYWNybzpgUHlfVE9MT1dFUmAsIDpjOm1hY3JvOmBQeV9UT1VQUEVSYC4KKyAgQWxsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgYW5hbG9nb3VzIHRvIHRoZSBDCisgIHN0YW5kYXJkIG1hY3JvcyBmb3IgY2xhc3NpZnlpbmcgY2hhcmFjdGVycywgYnV0IGlnbm9yZSB0aGUgY3VycmVudAorICBsb2NhbGUgc2V0dGluZywgYmVjYXVzZSBpbgorICBzZXZlcmFsIHBsYWNlcyBQeXRob24gbmVlZHMgdG8gYW5hbHl6ZSBjaGFyYWN0ZXJzIGluIGEKKyAgbG9jYWxlLWluZGVwZW5kZW50IHdheS4gIChBZGRlZCBieSBFcmljIFNtaXRoOworICA6aXNzdWU6YDU3OTNgLikKKworICAuLiBYWFggdGhlc2UgbWFjcm9zIGRvbid0IHNlZW0gdG8gYmUgZGVzY3JpYmVkIGluIHRoZSBjLWFwaSBkb2NzLgorCisqIFJlbW92ZWQgZnVuY3Rpb246IDpjOm1hY3JvOmBQeUV2YWxfQ2FsbE9iamVjdGAgaXMgbm93IG9ubHkgYXZhaWxhYmxlCisgIGFzIGEgbWFjcm8uICBBIGZ1bmN0aW9uIHZlcnNpb24gd2FzIGJlaW5nIGtlcHQgYXJvdW5kIHRvIHByZXNlcnZlCisgIEFCSSBsaW5raW5nIGNvbXBhdGliaWxpdHksIGJ1dCB0aGF0IHdhcyBpbiAxOTk3OyBpdCBjYW4gY2VydGFpbmx5IGJlCisgIGRlbGV0ZWQgYnkgbm93LiAgKFJlbW92ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODI3NmAuKQorCisqIE5ldyBmb3JtYXQgY29kZXM6IHRoZSA6YzpmdW5jOmBQeUZvcm1hdF9Gcm9tU3RyaW5nYCwKKyAgOmM6ZnVuYzpgUHlGb3JtYXRfRnJvbVN0cmluZ1ZgLCBhbmQgOmM6ZnVuYzpgUHlFcnJfRm9ybWF0YCBmdW5jdGlvbnMgbm93CisgIGFjY2VwdCBgYCVsbGRgYCBhbmQgYGAlbGx1YGAgZm9ybWF0IGNvZGVzIGZvciBkaXNwbGF5aW5nCisgIEMncyA6Yzp0eXBlOmBsb25nIGxvbmdgIHR5cGVzLgorICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNzIyOGAuKQorCisqIFRoZSBjb21wbGljYXRlZCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRocmVhZHMgYW5kIHByb2Nlc3MgZm9ya2luZyBoYXMKKyAgYmVlbiBjaGFuZ2VkLiAgUHJldmlvdXNseSwgdGhlIGNoaWxkIHByb2Nlc3MgY3JlYXRlZCBieQorICA6ZnVuYzpgb3MuZm9ya2AgbWlnaHQgZmFpbCBiZWNhdXNlIHRoZSBjaGlsZCBpcyBjcmVhdGVkIHdpdGggb25seSBhCisgIHNpbmdsZSB0aHJlYWQgcnVubmluZywgdGhlIHRocmVhZCBwZXJmb3JtaW5nIHRoZSA6ZnVuYzpgb3MuZm9ya2AuCisgIElmIG90aGVyIHRocmVhZHMgd2VyZSBob2xkaW5nIGEgbG9jaywgc3VjaCBhcyBQeXRob24ncyBpbXBvcnQgbG9jaywKKyAgd2hlbiB0aGUgZm9yayB3YXMgcGVyZm9ybWVkLCB0aGUgbG9jayB3b3VsZCBzdGlsbCBiZSBtYXJrZWQgYXMKKyAgImhlbGQiIGluIHRoZSBuZXcgcHJvY2Vzcy4gIEJ1dCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBub3RoaW5nIHdvdWxkCisgIGV2ZXIgcmVsZWFzZSB0aGUgbG9jaywgc2luY2UgdGhlIG90aGVyIHRocmVhZHMgd2VyZW4ndCByZXBsaWNhdGVkLAorICBhbmQgdGhlIGNoaWxkIHByb2Nlc3Mgd291bGQgbm8gbG9uZ2VyIGJlIGFibGUgdG8gcGVyZm9ybSBpbXBvcnRzLgorCisgIFB5dGhvbiAyLjcgYWNxdWlyZXMgdGhlIGltcG9ydCBsb2NrIGJlZm9yZSBwZXJmb3JtaW5nIGFuCisgIDpmdW5jOmBvcy5mb3JrYCwgYW5kIHdpbGwgYWxzbyBjbGVhbiB1cCBhbnkgbG9ja3MgY3JlYXRlZCB1c2luZyB0aGUKKyAgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGUuICBDIGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgaGF2ZSBpbnRlcm5hbAorICBsb2Nrcywgb3IgdGhhdCBjYWxsIDpjOmZ1bmM6YGZvcmsoKWAgdGhlbXNlbHZlcywgd2lsbCBub3QgYmVuZWZpdAorICBmcm9tIHRoaXMgY2xlYW4tdXAuCisKKyAgKEZpeGVkIGJ5IFRob21hcyBXb3V0ZXJzOyA6aXNzdWU6YDE1OTA4NjRgLikKKworKiBUaGUgOmM6ZnVuYzpgUHlfRmluYWxpemVgIGZ1bmN0aW9uIG5vdyBjYWxscyB0aGUgaW50ZXJuYWwKKyAgOmZ1bmM6YHRocmVhZGluZy5fc2h1dGRvd25gIGZ1bmN0aW9uOyB0aGlzIHByZXZlbnRzIHNvbWUgZXhjZXB0aW9ucyBmcm9tCisgIGJlaW5nIHJhaXNlZCB3aGVuIGFuIGludGVycHJldGVyIHNodXRzIGRvd24uCisgIChQYXRjaCBieSBBZGFtIE9sc2VuOyA6aXNzdWU6YDE3MjIzNDRgLikKKworKiBXaGVuIHVzaW5nIHRoZSA6Yzp0eXBlOmBQeU1lbWJlckRlZmAgc3RydWN0dXJlIHRvIGRlZmluZSBhdHRyaWJ1dGVzCisgIG9mIGEgdHlwZSwgUHl0aG9uIHdpbGwgbm8gbG9uZ2VyIGxldCB5b3UgdHJ5IHRvIGRlbGV0ZSBvciBzZXQgYQorICA6Y29uc3Q6YFRfU1RSSU5HX0lOUExBQ0VgIGF0dHJpYnV0ZS4KKworICAuLiByZXYgNzk2NDQKKworKiBHbG9iYWwgc3ltYm9scyBkZWZpbmVkIGJ5IHRoZSA6bW9kOmBjdHlwZXNgIG1vZHVsZSBhcmUgbm93IHByZWZpeGVkCisgIHdpdGggYGBQeWBgLCBvciB3aXRoIGBgX2N0eXBlc2BgLiAgKEltcGxlbWVudGVkIGJ5IFRob21hcworICBIZWxsZXI7IDppc3N1ZTpgMzEwMmAuKQorCisqIE5ldyBjb25maWd1cmUgb3B0aW9uOiB0aGUgOm9wdGlvbjpgLS13aXRoLXN5c3RlbS1leHBhdGAgc3dpdGNoIGFsbG93cworICBidWlsZGluZyB0aGUgOm1vZDpgcHlleHBhdGAgbW9kdWxlIHRvIHVzZSB0aGUgc3lzdGVtIEV4cGF0IGxpYnJhcnkuCisgIChDb250cmlidXRlZCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpczsgOmlzc3VlOmA3NjA5YC4pCisKKyogTmV3IGNvbmZpZ3VyZSBvcHRpb246IHRoZQorICA6b3B0aW9uOmAtLXdpdGgtdmFsZ3JpbmRgIG9wdGlvbiB3aWxsIG5vdyBkaXNhYmxlIHRoZSBweW1hbGxvYworICBhbGxvY2F0b3IsIHdoaWNoIGlzIGRpZmZpY3VsdCBmb3IgdGhlIFZhbGdyaW5kIG1lbW9yeS1lcnJvciBkZXRlY3RvcgorICB0byBhbmFseXplIGNvcnJlY3RseS4KKyAgVmFsZ3JpbmQgd2lsbCB0aGVyZWZvcmUgYmUgYmV0dGVyIGF0IGRldGVjdGluZyBtZW1vcnkgbGVha3MgYW5kCisgIG92ZXJydW5zLiAoQ29udHJpYnV0ZWQgYnkgSmFtZXMgSGVuc3RyaWRnZTsgOmlzc3VlOmAyNDIyYC4pCisKKyogTmV3IGNvbmZpZ3VyZSBvcHRpb246IHlvdSBjYW4gbm93IHN1cHBseSBhbiBlbXB0eSBzdHJpbmcgdG8KKyAgOm9wdGlvbjpgLS13aXRoLWRibWxpYm9yZGVyPWAgaW4gb3JkZXIgdG8gZGlzYWJsZSBhbGwgb2YgdGhlIHZhcmlvdXMKKyAgREJNIG1vZHVsZXMuICAoQWRkZWQgYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXM7CisgIDppc3N1ZTpgNjQ5MWAuKQorCisqIFRoZSA6cHJvZ3JhbTpgY29uZmlndXJlYCBzY3JpcHQgbm93IGNoZWNrcyBmb3IgZmxvYXRpbmctcG9pbnQgcm91bmRpbmcgYnVncworICBvbiBjZXJ0YWluIDMyLWJpdCBJbnRlbCBjaGlwcyBhbmQgZGVmaW5lcyBhIDpjOm1hY3JvOmBYODdfRE9VQkxFX1JPVU5ESU5HYAorICBwcmVwcm9jZXNzb3IgZGVmaW5pdGlvbi4gIE5vIGNvZGUgY3VycmVudGx5IHVzZXMgdGhpcyBkZWZpbml0aW9uLAorICBidXQgaXQncyBhdmFpbGFibGUgaWYgYW55b25lIHdpc2hlcyB0byB1c2UgaXQuCisgIChBZGRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAyOTM3YC4pCisKKyAgOnByb2dyYW06YGNvbmZpZ3VyZWAgYWxzbyBub3cgc2V0cyBhIDplbnZ2YXI6YExEQ1hYU0hBUkVEYCBNYWtlZmlsZQorICB2YXJpYWJsZSBmb3Igc3VwcG9ydGluZyBDKysgbGlua2luZy4gIChDb250cmlidXRlZCBieSBBcmZyZXZlcgorICBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpczsgOmlzc3VlOmAxMjIyNTg1YC4pCisKKyogVGhlIGJ1aWxkIHByb2Nlc3Mgbm93IGNyZWF0ZXMgdGhlIG5lY2Vzc2FyeSBmaWxlcyBmb3IgcGtnLWNvbmZpZworICBzdXBwb3J0LiAgKENvbnRyaWJ1dGVkIGJ5IENsaW50b24gUm95OyA6aXNzdWU6YDM1ODVgLikKKworKiBUaGUgYnVpbGQgcHJvY2VzcyBub3cgc3VwcG9ydHMgU3VidmVyc2lvbiAxLjcuICAoQ29udHJpYnV0ZWQgYnkKKyAgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXM7IDppc3N1ZTpgNjA5NGAuKQorCisKKy4uIF93aGF0c25ldzI3LWNhcHN1bGVzOgorCitDYXBzdWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gMy4xIGFkZHMgYSBuZXcgQyBkYXRhdHlwZSwgOmM6dHlwZTpgUHlDYXBzdWxlYCwgZm9yIHByb3ZpZGluZyBhCitDIEFQSSB0byBhbiBleHRlbnNpb24gbW9kdWxlLiAgQSBjYXBzdWxlIGlzIGVzc2VudGlhbGx5IHRoZSBob2xkZXIgb2YKK2EgQyBgYHZvaWQgKmBgIHBvaW50ZXIsIGFuZCBpcyBtYWRlIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSBhdHRyaWJ1dGU7IGZvcgorZXhhbXBsZSwgdGhlIDptb2Q6YHNvY2tldGAgbW9kdWxlJ3MgQVBJIGlzIGV4cG9zZWQgYXMgYGBzb2NrZXQuQ0FQSWBgLAorYW5kIDptb2Q6YHVuaWNvZGVkYXRhYCBleHBvc2VzIGBgdWNuaGFzaF9DQVBJYGAuICBPdGhlciBleHRlbnNpb25zCitjYW4gaW1wb3J0IHRoZSBtb2R1bGUsIGFjY2VzcyBpdHMgZGljdGlvbmFyeSB0byBnZXQgdGhlIGNhcHN1bGUKK29iamVjdCwgYW5kIHRoZW4gZ2V0IHRoZSBgYHZvaWQgKmBgIHBvaW50ZXIsIHdoaWNoIHdpbGwgdXN1YWxseSBwb2ludAordG8gYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlIG1vZHVsZSdzIHZhcmlvdXMgQVBJIGZ1bmN0aW9ucy4KKworVGhlcmUgaXMgYW4gZXhpc3RpbmcgZGF0YSB0eXBlIGFscmVhZHkgdXNlZCBmb3IgdGhpcywKKzpjOnR5cGU6YFB5Q09iamVjdGAsIGJ1dCBpdCBkb2Vzbid0IHByb3ZpZGUgdHlwZSBzYWZldHkuICBFdmlsIGNvZGUKK3dyaXR0ZW4gaW4gcHVyZSBQeXRob24gY291bGQgY2F1c2UgYSBzZWdtZW50YXRpb24gZmF1bHQgYnkgdGFraW5nIGEKKzpjOnR5cGU6YFB5Q09iamVjdGAgZnJvbSBtb2R1bGUgQSBhbmQgc29tZWhvdyBzdWJzdGl0dXRpbmcgaXQgZm9yIHRoZQorOmM6dHlwZTpgUHlDT2JqZWN0YCBpbiBtb2R1bGUgQi4gICBDYXBzdWxlcyBrbm93IHRoZWlyIG93biBuYW1lLAorYW5kIGdldHRpbmcgdGhlIHBvaW50ZXIgcmVxdWlyZXMgcHJvdmlkaW5nIHRoZSBuYW1lOjoKKworICAgdm9pZCAqdnRhYmxlOworCisgICBpZiAoIVB5Q2Fwc3VsZV9Jc1ZhbGlkKGNhcHN1bGUsICJteW1vZHVsZS5DQVBJIikgeworICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImFyZ3VtZW50IHR5cGUgaW52YWxpZCIpOworICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKworICAgdnRhYmxlID0gUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgIm15bW9kdWxlLkNBUEkiKTsKKworWW91IGFyZSBhc3N1cmVkIHRoYXQgYGB2dGFibGVgYCBwb2ludHMgdG8gd2hhdGV2ZXIgeW91J3JlIGV4cGVjdGluZy4KK0lmIGEgZGlmZmVyZW50IGNhcHN1bGUgd2FzIHBhc3NlZCBpbiwgOmM6ZnVuYzpgUHlDYXBzdWxlX0lzVmFsaWRgIHdvdWxkCitkZXRlY3QgdGhlIG1pc21hdGNoZWQgbmFtZSBhbmQgcmV0dXJuIGZhbHNlLiAgUmVmZXIgdG8KKzpyZWY6YHVzaW5nLWNhcHN1bGVzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGVzZSBvYmplY3RzLgorCitQeXRob24gMi43IG5vdyB1c2VzIGNhcHN1bGVzIGludGVybmFsbHkgdG8gcHJvdmlkZSB2YXJpb3VzCitleHRlbnNpb24tbW9kdWxlIEFQSXMsIGJ1dCB0aGUgOmM6ZnVuYzpgUHlDT2JqZWN0X0FzVm9pZFB0cmAgd2FzCittb2RpZmllZCB0byBoYW5kbGUgY2Fwc3VsZXMsIHByZXNlcnZpbmcgY29tcGlsZS10aW1lIGNvbXBhdGliaWxpdHkKK3dpdGggdGhlIDpjOnR5cGU6YENPYmplY3RgIGludGVyZmFjZS4gIFVzZSBvZgorOmM6ZnVuYzpgUHlDT2JqZWN0X0FzVm9pZFB0cmAgd2lsbCBzaWduYWwgYQorOmV4YzpgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ2AsIHdoaWNoIGlzIHNpbGVudCBieSBkZWZhdWx0LgorCitJbXBsZW1lbnRlZCBpbiBQeXRob24gMy4xIGFuZCBiYWNrcG9ydGVkIHRvIDIuNyBieSBMYXJyeSBIYXN0aW5nczsKK2Rpc2N1c3NlZCBpbiA6aXNzdWU6YDU2MzBgLgorCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUG9ydC1TcGVjaWZpYyBDaGFuZ2VzOiBXaW5kb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bW9kOmBtc3ZjcnRgIG1vZHVsZSBub3cgY29udGFpbnMgc29tZSBjb25zdGFudHMgZnJvbQorICB0aGUgOmZpbGU6YGNydGFzc2VtLmhgIGhlYWRlciBmaWxlOgorICA6ZGF0YTpgQ1JUX0FTU0VNQkxZX1ZFUlNJT05gLAorICA6ZGF0YTpgVkNfQVNTRU1CTFlfUFVCTElDS0VZVE9LRU5gLAorICBhbmQgOmRhdGE6YExJQlJBUklFU19BU1NFTUJMWV9OQU1FX1BSRUZJWGAuCisgIChDb250cmlidXRlZCBieSBEYXZpZCBDb3VybmFwZWF1OyA6aXNzdWU6YDQzNjVgLikKKworKiBUaGUgOm1vZDpgX3dpbnJlZ2AgbW9kdWxlIGZvciBhY2Nlc3NpbmcgdGhlIHJlZ2lzdHJ5IG5vdyBpbXBsZW1lbnRzCisgIHRoZSA6ZnVuYzpgQ3JlYXRlS2V5RXhgIGFuZCA6ZnVuYzpgRGVsZXRlS2V5RXhgIGZ1bmN0aW9ucywgZXh0ZW5kZWQKKyAgdmVyc2lvbnMgb2YgcHJldmlvdXNseS1zdXBwb3J0ZWQgZnVuY3Rpb25zIHRoYXQgdGFrZSBzZXZlcmFsIGV4dHJhCisgIGFyZ3VtZW50cy4gIFRoZSA6ZnVuYzpgRGlzYWJsZVJlZmxlY3Rpb25LZXlgLAorICA6ZnVuYzpgRW5hYmxlUmVmbGVjdGlvbktleWAsIGFuZCA6ZnVuYzpgUXVlcnlSZWZsZWN0aW9uS2V5YCB3ZXJlIGFsc28KKyAgdGVzdGVkIGFuZCBkb2N1bWVudGVkLgorICAoSW1wbGVtZW50ZWQgYnkgQnJpYW4gQ3VydGluOiA6aXNzdWU6YDczNDdgLikKKworKiBUaGUgbmV3IDpjOmZ1bmM6YF9iZWdpbnRocmVhZGV4YCBBUEkgaXMgdXNlZCB0byBzdGFydCB0aHJlYWRzLCBhbmQKKyAgdGhlIG5hdGl2ZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBmdW5jdGlvbnMgYXJlIG5vdyB1c2VkLgorICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uOyA6aXNzdWU6YDM1ODJgLikKKworKiBUaGUgOmZ1bmM6YG9zLmtpbGxgIGZ1bmN0aW9uIG5vdyB3b3JrcyBvbiBXaW5kb3dzLiAgVGhlIHNpZ25hbCB2YWx1ZQorICBjYW4gYmUgdGhlIGNvbnN0YW50cyA6Y29uc3Q6YENUUkxfQ19FVkVOVGAsCisgIDpjb25zdDpgQ1RSTF9CUkVBS19FVkVOVGAsIG9yIGFueSBpbnRlZ2VyLiAgVGhlIGZpcnN0IHR3byBjb25zdGFudHMKKyAgd2lsbCBzZW5kIENvbnRyb2wtQyBhbmQgQ29udHJvbC1CcmVhayBrZXlzdHJva2UgZXZlbnRzIHRvCisgIHN1YnByb2Nlc3NlczsgYW55IG90aGVyIHZhbHVlIHdpbGwgdXNlIHRoZSA6YzpmdW5jOmBUZXJtaW5hdGVQcm9jZXNzYAorICBBUEkuICAoQ29udHJpYnV0ZWQgYnkgTWlraSBUZWJla2E7IDppc3N1ZTpgMTIyMDIxMmAuKQorCisqIFRoZSA6ZnVuYzpgb3MubGlzdGRpcmAgZnVuY3Rpb24gbm93IGNvcnJlY3RseSBmYWlscworICBmb3IgYW4gZW1wdHkgcGF0aC4gIChGaXhlZCBieSBIaXJva2F6dSBZYW1hbW90bzsgOmlzc3VlOmA1OTEzYC4pCisKKyogVGhlIDptb2Q6YG1pbWVsaWJgIG1vZHVsZSB3aWxsIG5vdyByZWFkIHRoZSBNSU1FIGRhdGFiYXNlIGZyb20KKyAgdGhlIFdpbmRvd3MgcmVnaXN0cnkgd2hlbiBpbml0aWFsaXppbmcuCisgIChQYXRjaCBieSBHYWJyaWVsIEdlbmVsbGluYTsgOmlzc3VlOmA0OTY5YC4pCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUG9ydC1TcGVjaWZpYyBDaGFuZ2VzOiBNYWMgT1MgWAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgcGF0aCBgYC9MaWJyYXJ5L1B5dGhvbi8yLjcvc2l0ZS1wYWNrYWdlc2BgIGlzIG5vdyBhcHBlbmRlZCB0bworICBgYHN5cy5wYXRoYGAsIGluIG9yZGVyIHRvIHNoYXJlIGFkZGVkIHBhY2thZ2VzIGJldHdlZW4gdGhlIHN5c3RlbQorICBpbnN0YWxsYXRpb24gYW5kIGEgdXNlci1pbnN0YWxsZWQgY29weSBvZiB0aGUgc2FtZSB2ZXJzaW9uLgorICAoQ2hhbmdlZCBieSBSb25hbGQgT3Vzc29yZW47IDppc3N1ZTpgNDg2NWAuKQorCitQb3J0LVNwZWNpZmljIENoYW5nZXM6IEZyZWVCU0QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogRnJlZUJTRCA3LjEncyA6Y29uc3Q6YFNPX1NFVEZJQmAgY29uc3RhbnQsIHVzZWQgd2l0aAorICA6ZnVuYzpgfnNvY2tldC5nZXRzb2Nrb3B0YC86ZnVuYzpgfnNvY2tldC5zZXRzb2Nrb3B0YCB0byBzZWxlY3QgYW4KKyAgYWx0ZXJuYXRlIHJvdXRpbmcgdGFibGUsIGlzIG5vdyBhdmFpbGFibGUgaW4gdGhlIDptb2Q6YHNvY2tldGAKKyAgbW9kdWxlLiAgKEFkZGVkIGJ5IEt5bGUgVmFuZGVyQmVlazsgOmlzc3VlOmA4MjM1YC4pCisKK090aGVyIENoYW5nZXMgYW5kIEZpeGVzCis9PT09PT09PT09PT09PT09PT09PT09PQorCisqIFR3byBiZW5jaG1hcmsgc2NyaXB0cywgOmZpbGU6YGlvYmVuY2hgIGFuZCA6ZmlsZTpgY2NiZW5jaGAsIHdlcmUKKyAgYWRkZWQgdG8gdGhlIDpmaWxlOmBUb29sc2AgZGlyZWN0b3J5LiAgOmZpbGU6YGlvYmVuY2hgIG1lYXN1cmVzIHRoZQorICBzcGVlZCBvZiB0aGUgYnVpbHQtaW4gZmlsZSBJL08gb2JqZWN0cyByZXR1cm5lZCBieSA6ZnVuYzpgb3BlbmAKKyAgd2hpbGUgcGVyZm9ybWluZyB2YXJpb3VzIG9wZXJhdGlvbnMsIGFuZCA6ZmlsZTpgY2NiZW5jaGAgaXMgYQorICBjb25jdXJyZW5jeSBiZW5jaG1hcmsgdGhhdCB0cmllcyB0byBtZWFzdXJlIGNvbXB1dGluZyB0aHJvdWdocHV0LAorICB0aHJlYWQgc3dpdGNoaW5nIGxhdGVuY3ksIGFuZCBJTyBwcm9jZXNzaW5nIGJhbmR3aWR0aCB3aGVuCisgIHBlcmZvcm1pbmcgc2V2ZXJhbCB0YXNrcyB1c2luZyBhIHZhcnlpbmcgbnVtYmVyIG9mIHRocmVhZHMuCisKKyogVGhlIDpmaWxlOmBUb29scy9pMThuL21zZ2ZtdC5weWAgc2NyaXB0IG5vdyB1bmRlcnN0YW5kcyBwbHVyYWwKKyAgZm9ybXMgaW4gOmZpbGU6YC5wb2AgZmlsZXMuICAoRml4ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXM7CisgIDppc3N1ZTpgNTQ2NGAuKQorCisqIFdoZW4gaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSA6ZmlsZTpgLnB5Y2Agb3IgOmZpbGU6YC5weW9gIGZpbGUKKyAgd2l0aCBhbiBleGlzdGluZyA6ZmlsZTpgLnB5YCBjb3VudGVycGFydCwgdGhlIDphdHRyOmBjb19maWxlbmFtZWAKKyAgYXR0cmlidXRlcyBvZiB0aGUgcmVzdWx0aW5nIGNvZGUgb2JqZWN0cyBhcmUgb3ZlcndyaXR0ZW4gd2hlbiB0aGUKKyAgb3JpZ2luYWwgZmlsZW5hbWUgaXMgb2Jzb2xldGUuICBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIGZpbGUgaGFzIGJlZW4KKyAgcmVuYW1lZCwgbW92ZWQsIG9yIGlzIGFjY2Vzc2VkIHRocm91Z2ggZGlmZmVyZW50IHBhdGhzLiAgKFBhdGNoIGJ5CisgIFppZ2EgU2VpbG5hY2h0IGFuZCBKZWFuLVBhdWwgQ2FsZGVyb25lOyA6aXNzdWU6YDExODAxOTNgLikKKworKiBUaGUgOmZpbGU6YHJlZ3J0ZXN0LnB5YCBzY3JpcHQgbm93IHRha2VzIGEgOm9wdGlvbjpgLS1yYW5kc2VlZD1gCisgIHN3aXRjaCB0aGF0IHRha2VzIGFuIGludGVnZXIgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHJhbmRvbSBzZWVkCisgIGZvciB0aGUgOm9wdGlvbjpgLXJgIG9wdGlvbiB0aGF0IGV4ZWN1dGVzIHRlc3RzIGluIHJhbmRvbSBvcmRlci4KKyAgVGhlIDpvcHRpb246YC1yYCBvcHRpb24gYWxzbyByZXBvcnRzIHRoZSBzZWVkIHRoYXQgd2FzIHVzZWQKKyAgKEFkZGVkIGJ5IENvbGxpbiBXaW50ZXIuKQorCisqIEFub3RoZXIgOmZpbGU6YHJlZ3J0ZXN0LnB5YCBzd2l0Y2ggaXMgOm9wdGlvbjpgLWpgLCB3aGljaAorICB0YWtlcyBhbiBpbnRlZ2VyIHNwZWNpZnlpbmcgaG93IG1hbnkgdGVzdHMgcnVuIGluIHBhcmFsbGVsLiBUaGlzCisgIGFsbG93cyByZWR1Y2luZyB0aGUgdG90YWwgcnVudGltZSBvbiBtdWx0aS1jb3JlIG1hY2hpbmVzLgorICBUaGlzIG9wdGlvbiBpcyBjb21wYXRpYmxlIHdpdGggc2V2ZXJhbCBvdGhlciBvcHRpb25zLCBpbmNsdWRpbmcgdGhlCisgIDpvcHRpb246YC1SYCBzd2l0Y2ggd2hpY2ggaXMga25vd24gdG8gcHJvZHVjZSBsb25nIHJ1bnRpbWVzLgorICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3UsIDppc3N1ZTpgNjE1MmAuKSAgVGhpcyBjYW4gYWxzbyBiZSB1c2VkCisgIHdpdGggYSBuZXcgOm9wdGlvbjpgLUZgIHN3aXRjaCB0aGF0IHJ1bnMgc2VsZWN0ZWQgdGVzdHMgaW4gYSBsb29wCisgIHVudGlsIHRoZXkgZmFpbC4gIChBZGRlZCBieSBBbnRvaW5lIFBpdHJvdTsgOmlzc3VlOmA3MzEyYC4pCisKKyogV2hlbiBleGVjdXRlZCBhcyBhIHNjcmlwdCwgdGhlIDpmaWxlOmBweV9jb21waWxlLnB5YCBtb2R1bGUgbm93CisgIGFjY2VwdHMgYGAnLSdgYCBhcyBhbiBhcmd1bWVudCwgd2hpY2ggd2lsbCByZWFkIHN0YW5kYXJkIGlucHV0IGZvcgorICB0aGUgbGlzdCBvZiBmaWxlbmFtZXMgdG8gYmUgY29tcGlsZWQuICAoQ29udHJpYnV0ZWQgYnkgUGlvdHIKKyAgT8W8YXJvd3NraTsgOmlzc3VlOmA4MjMzYC4pCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUG9ydGluZyB0byBQeXRob24gMi43Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGxpc3RzIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNoYW5nZXMgYW5kIG90aGVyIGJ1Z2ZpeGVzCit0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBjb2RlOgorCisqIFRoZSA6ZnVuYzpgcmFuZ2VgIGZ1bmN0aW9uIHByb2Nlc3NlcyBpdHMgYXJndW1lbnRzIG1vcmUKKyAgY29uc2lzdGVudGx5OyBpdCB3aWxsIG5vdyBjYWxsIDptZXRoOmBfX2ludF9fYCBvbiBub24tZmxvYXQsCisgIG5vbi1pbnRlZ2VyIGFyZ3VtZW50cyB0aGF0IGFyZSBzdXBwbGllZCB0byBpdC4gIChGaXhlZCBieSBBbGV4YW5kZXIKKyAgQmVsb3BvbHNreTsgOmlzc3VlOmAxNTMzYC4pCisKKyogVGhlIHN0cmluZyA6bWV0aDpgZm9ybWF0YCBtZXRob2QgY2hhbmdlZCB0aGUgZGVmYXVsdCBwcmVjaXNpb24gdXNlZAorICBmb3IgZmxvYXRpbmctcG9pbnQgYW5kIGNvbXBsZXggbnVtYmVycyBmcm9tIDYgZGVjaW1hbAorICBwbGFjZXMgdG8gMTIsIHdoaWNoIG1hdGNoZXMgdGhlIHByZWNpc2lvbiB1c2VkIGJ5IDpmdW5jOmBzdHJgLgorICAoQ2hhbmdlZCBieSBFcmljIFNtaXRoOyA6aXNzdWU6YDU5MjBgLikKKworKiBCZWNhdXNlIG9mIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHRoZSBzcGVjaWFsCisgIG1ldGhvZHMgOm1ldGg6YF9fZW50ZXJfX2AgYW5kIDptZXRoOmBfX2V4aXRfX2AgbXVzdCBiZWxvbmcgdG8gdGhlIG9iamVjdCdzCisgIHR5cGUsIGFuZCBjYW5ub3QgYmUgZGlyZWN0bHkgYXR0YWNoZWQgdG8gdGhlIG9iamVjdCdzIGluc3RhbmNlLiAgVGhpcworICBhZmZlY3RzIG5ldy1zdHlsZSBjbGFzc2VzIChkZXJpdmVkIGZyb20gOmNsYXNzOmBvYmplY3RgKSBhbmQgQyBleHRlbnNpb24KKyAgdHlwZXMuICAoOmlzc3VlOmA2MTAxYC4pCisKKyogRHVlIHRvIGEgYnVnIGluIFB5dGhvbiAyLjYsIHRoZSAqZXhjX3ZhbHVlKiBwYXJhbWV0ZXIgdG8KKyAgOm1ldGg6YF9fZXhpdF9fYCBtZXRob2RzIHdhcyBvZnRlbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICBleGNlcHRpb24sIG5vdCBhbiBpbnN0YW5jZS4gIFRoaXMgd2FzIGZpeGVkIGluIDIuNywgc28gKmV4Y192YWx1ZSoKKyAgd2lsbCBiZSBhbiBpbnN0YW5jZSBhcyBleHBlY3RlZC4gIChGaXhlZCBieSBGbG9yZW50IFhpY2x1bmE7CisgIDppc3N1ZTpgNzg1M2AuKQorCisqIFdoZW4gYSByZXN0cmljdGVkIHNldCBvZiBhdHRyaWJ1dGVzIHdlcmUgc2V0IHVzaW5nIGBgX19zbG90c19fYGAsCisgIGRlbGV0aW5nIGFuIHVuc2V0IGF0dHJpYnV0ZSB3b3VsZCBub3QgcmFpc2UgOmV4YzpgQXR0cmlidXRlRXJyb3JgCisgIGFzIHlvdSB3b3VsZCBleHBlY3QuICBGaXhlZCBieSBCZW5qYW1pbiBQZXRlcnNvbjsgOmlzc3VlOmA3NjA0YC4pCisKK0luIHRoZSBzdGFuZGFyZCBsaWJyYXJ5OgorCisqIE9wZXJhdGlvbnMgd2l0aCA6Y2xhc3M6YGRhdGV0aW1lYCBpbnN0YW5jZXMgdGhhdCByZXN1bHRlZCBpbiBhIHllYXIKKyAgZmFsbGluZyBvdXRzaWRlIHRoZSBzdXBwb3J0ZWQgcmFuZ2UgZGlkbid0IGFsd2F5cyByYWlzZQorICA6ZXhjOmBPdmVyZmxvd0Vycm9yYC4gIFN1Y2ggZXJyb3JzIGFyZSBub3cgY2hlY2tlZCBtb3JlIGNhcmVmdWxseQorICBhbmQgd2lsbCBub3cgcmFpc2UgdGhlIGV4Y2VwdGlvbi4gKFJlcG9ydGVkIGJ5IE1hcmsgTGVhbmRlciwgcGF0Y2gKKyAgYnkgQW5hbmQgQi4gUGlsbGFpIGFuZCBBbGV4YW5kZXIgQmVsb3BvbHNreTsgOmlzc3VlOmA3MTUwYC4pCisKKyogV2hlbiB1c2luZyA6Y2xhc3M6YERlY2ltYWxgIGluc3RhbmNlcyB3aXRoIGEgc3RyaW5nJ3MKKyAgOm1ldGg6YGZvcm1hdGAgbWV0aG9kLCB0aGUgZGVmYXVsdCBhbGlnbm1lbnQgd2FzIHByZXZpb3VzbHkKKyAgbGVmdC1hbGlnbm1lbnQuICBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgdG8gcmlnaHQtYWxpZ25tZW50LCB3aGljaCBtaWdodAorICBjaGFuZ2UgdGhlIG91dHB1dCBvZiB5b3VyIHByb2dyYW1zLgorICAoQ2hhbmdlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA2ODU3YC4pCisKKyAgQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgc2lnbmFsaW5nIE5hTiB2YWx1ZSAob3IgYGBzTkFOYGApIG5vdyBzaWduYWwKKyAgOmNvbnN0OmBJbnZhbGlkT3BlcmF0aW9uYCBpbnN0ZWFkIG9mIHNpbGVudGx5IHJldHVybmluZyBhIHRydWUgb3IKKyAgZmFsc2UgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yLiAgUXVpZXQgTmFOIHZhbHVlcworICAob3IgYGBOYU5gYCkgYXJlIG5vdyBoYXNoYWJsZS4gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsKKyAgOmlzc3VlOmA3Mjc5YC4pCisKKyogVGhlIEVsZW1lbnRUcmVlIGxpYnJhcnksIDptb2Q6YHhtbC5ldHJlZWAsIG5vIGxvbmdlciBlc2NhcGVzCisgIGFtcGVyc2FuZHMgYW5kIGFuZ2xlIGJyYWNrZXRzIHdoZW4gb3V0cHV0dGluZyBhbiBYTUwgcHJvY2Vzc2luZworICBpbnN0cnVjdGlvbiAod2hpY2ggbG9va3MgbGlrZSBgPD94bWwtc3R5bGVzaGVldCBocmVmPSIjc3R5bGUxIj8+YCkKKyAgb3IgY29tbWVudCAod2hpY2ggbG9va3MgbGlrZSBgPCEtLSBjb21tZW50IC0tPmApLgorICAoUGF0Y2ggYnkgTmVpbCBNdWxsZXI7IDppc3N1ZTpgMjc0NmAuKQorCisqIFRoZSA6bWV0aDpgcmVhZGxpbmVgIG1ldGhvZCBvZiA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3RzIG5vdyBkb2VzCisgIG5vdGhpbmcgd2hlbiBhIG5lZ2F0aXZlIGxlbmd0aCBpcyByZXF1ZXN0ZWQsIGFzIG90aGVyIGZpbGUtbGlrZQorICBvYmplY3RzIGRvLiAgKDppc3N1ZTpgNzM0OGApLgorCisqIFRoZSA6bW9kOmBzeXNsb2dgIG1vZHVsZSB3aWxsIG5vdyB1c2UgdGhlIHZhbHVlIG9mIGBgc3lzLmFyZ3ZbMF1gYCBhcyB0aGUKKyAgaWRlbnRpZmllciBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBkZWZhdWx0IHZhbHVlIG9mIGBgJ3B5dGhvbidgYC4KKyAgKENoYW5nZWQgYnkgU2VhbiBSZWlmc2NobmVpZGVyOyA6aXNzdWU6YDg0NTFgLikKKworKiBUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlJ3MgZGVmYXVsdCBlcnJvciBoYW5kbGluZyBoYXMgY2hhbmdlZCwgdG8KKyAgbm8gbG9uZ2VyIHN1cHByZXNzIGZhdGFsIGVycm9ycy4gIFRoZSBkZWZhdWx0IGVycm9yIGxldmVsIHdhcyBwcmV2aW91c2x5IDAsCisgIHdoaWNoIG1lYW50IHRoYXQgZXJyb3JzIHdvdWxkIG9ubHkgcmVzdWx0IGluIGEgbWVzc2FnZSBiZWluZyB3cml0dGVuIHRvIHRoZQorICBkZWJ1ZyBsb2csIGJ1dCBiZWNhdXNlIHRoZSBkZWJ1ZyBsb2cgaXMgbm90IGFjdGl2YXRlZCBieSBkZWZhdWx0LAorICB0aGVzZSBlcnJvcnMgZ28gdW5ub3RpY2VkLiAgVGhlIGRlZmF1bHQgZXJyb3IgbGV2ZWwgaXMgbm93IDEsCisgIHdoaWNoIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgdGhlcmUncyBhbiBlcnJvci4KKyAgKENoYW5nZWQgYnkgTGFycyBHdXN0w6RiZWw7IDppc3N1ZTpgNzM1N2AuKQorCisqIFRoZSA6bW9kOmB1cmxwYXJzZWAgbW9kdWxlJ3MgOmZ1bmM6YH51cmxwYXJzZS51cmxzcGxpdGAgbm93IGhhbmRsZXMKKyAgdW5rbm93biBVUkwgc2NoZW1lcyBpbiBhIGZhc2hpb24gY29tcGxpYW50IHdpdGggOnJmYzpgMzk4NmA6IGlmIHRoZQorICBVUkwgaXMgb2YgdGhlIGZvcm0gYGAiPHNvbWV0aGluZz46Ly8uLi4iYGAsIHRoZSB0ZXh0IGJlZm9yZSB0aGUKKyAgYGA6Ly9gYCBpcyB0cmVhdGVkIGFzIHRoZSBzY2hlbWUsIGV2ZW4gaWYgaXQncyBhIG1hZGUtdXAgc2NoZW1lIHRoYXQKKyAgdGhlIG1vZHVsZSBkb2Vzbid0IGtub3cgYWJvdXQuICBUaGlzIGNoYW5nZSBtYXkgYnJlYWsgY29kZSB0aGF0CisgIHdvcmtlZCBhcm91bmQgdGhlIG9sZCBiZWhhdmlvdXIuICBGb3IgZXhhbXBsZSwgUHl0aG9uIDIuNi40IG9yIDIuNQorICB3aWxsIHJldHVybiB0aGUgZm9sbG93aW5nOgorCisgICAgPj4+IGltcG9ydCB1cmxwYXJzZQorICAgID4+PiB1cmxwYXJzZS51cmxzcGxpdCgnaW52ZW50ZWQ6Ly9ob3N0L2ZpbGVuYW1lP3F1ZXJ5JykKKyAgICAoJ2ludmVudGVkJywgJycsICcvL2hvc3QvZmlsZW5hbWU/cXVlcnknLCAnJywgJycpCisKKyAgUHl0aG9uIDIuNyAoYW5kIFB5dGhvbiAyLjYuNSkgd2lsbCByZXR1cm46CisKKyAgICA+Pj4gaW1wb3J0IHVybHBhcnNlCisgICAgPj4+IHVybHBhcnNlLnVybHNwbGl0KCdpbnZlbnRlZDovL2hvc3QvZmlsZW5hbWU/cXVlcnknKQorICAgICgnaW52ZW50ZWQnLCAnaG9zdCcsICcvZmlsZW5hbWU/cXVlcnknLCAnJywgJycpCisKKyAgKFB5dGhvbiAyLjcgYWN0dWFsbHkgcHJvZHVjZXMgc2xpZ2h0bHkgZGlmZmVyZW50IG91dHB1dCwgc2luY2UgaXQKKyAgcmV0dXJucyBhIG5hbWVkIHR1cGxlIGluc3RlYWQgb2YgYSBzdGFuZGFyZCB0dXBsZS4pCisKK0ZvciBDIGV4dGVuc2lvbnM6CisKKyogQyBleHRlbnNpb25zIHRoYXQgdXNlIGludGVnZXIgZm9ybWF0IGNvZGVzIHdpdGggdGhlIGBgUHlBcmdfUGFyc2UqYGAKKyAgZmFtaWx5IG9mIGZ1bmN0aW9ucyB3aWxsIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uCisgIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgKDppc3N1ZTpgNTA4MGApLgorCisqIFVzZSB0aGUgbmV3IDpjOmZ1bmM6YFB5T1Nfc3RyaW5nX3RvX2RvdWJsZWAgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGUgb2xkCisgIDpjOmZ1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBhbmQgOmM6ZnVuYzpgUHlPU19hc2NpaV9hdG9mYCBmdW5jdGlvbnMsCisgIHdoaWNoIGFyZSBub3cgZGVwcmVjYXRlZC4KKworRm9yIGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIFB5dGhvbjoKKworKiBUaGUgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCBmdW5jdGlvbiB3YXMgYWRkZWQsIGxldHRpbmcKKyAgYXBwbGljYXRpb25zIGNsb3NlIGEgc2VjdXJpdHkgaG9sZSB3aGVuIHRoZSBleGlzdGluZworICA6YzpmdW5jOmBQeVN5c19TZXRBcmd2YCBmdW5jdGlvbiB3YXMgdXNlZC4gIENoZWNrIHdoZXRoZXIgeW91J3JlCisgIGNhbGxpbmcgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndmAgYW5kIGNhcmVmdWxseSBjb25zaWRlciB3aGV0aGVyIHRoZQorICBhcHBsaWNhdGlvbiBzaG91bGQgYmUgdXNpbmcgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoCisgICp1cGRhdGVwYXRoKiBzZXQgdG8gZmFsc2UuCisKKy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisuLiBfYWNrczI3OgorCitBY2tub3dsZWRnZW1lbnRzCis9PT09PT09PT09PT09PT09CisKK1RoZSBhdXRob3Igd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3Igb2ZmZXJpbmcKK3N1Z2dlc3Rpb25zLCBjb3JyZWN0aW9ucyBhbmQgYXNzaXN0YW5jZSB3aXRoIHZhcmlvdXMgZHJhZnRzIG9mIHRoaXMKK2FydGljbGU6IE5pY2sgQ29naGxhbiwgUGhpbGlwIEplbnZleSwgUnlhbiBMb3ZldHQsIFIuIERhdmlkIE11cnJheSwKK0h1Z2ggU2Vja2VyLVdhbGtlci4KKwpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4wLnJzdAppbmRleCA1NDlmMzE0Li44NTJmODExIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4wLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4wLnJzdApAQCAtOTYsOSArOTYsOSBAQAogUHJpbnQgSXMgQSBGdW5jdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgOmtleXdvcmQ6YHByaW50YCBzdGF0ZW1lbnQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIDpmdW5jOmBwcmludGAKK1RoZSBgYHByaW50YGAgc3RhdGVtZW50IGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSA6ZnVuYzpgcHJpbnRgCiBmdW5jdGlvbiwgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cyB0byByZXBsYWNlIG1vc3Qgb2YgdGhlIHNwZWNpYWwgc3ludGF4Ci1vZiB0aGUgb2xkIDprZXl3b3JkOmBwcmludGAgc3RhdGVtZW50ICg6cGVwOmAzMTA1YCkuICBFeGFtcGxlczo6CitvZiB0aGUgb2xkIGBgcHJpbnRgYCBzdGF0ZW1lbnQgKDpwZXA6YDMxMDVgKS4gIEV4YW1wbGVzOjoKIAogICBPbGQ6IHByaW50ICJUaGUgYW5zd2VyIGlzIiwgMioyCiAgIE5ldzogcHJpbnQoIlRoZSBhbnN3ZXIgaXMiLCAyKjIpCkBAIC0xMjYsNyArMTI2LDcgQEAKIE5vdGU6CiAKICogVGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24gZG9lc24ndCBzdXBwb3J0IHRoZSAic29mdHNwYWNlIiBmZWF0dXJlIG9mCi0gIHRoZSBvbGQgOmtleXdvcmQ6YHByaW50YCBzdGF0ZW1lbnQuICBGb3IgZXhhbXBsZSwgaW4gUHl0aG9uIDIueCwKKyAgdGhlIG9sZCBgYHByaW50YGAgc3RhdGVtZW50LiAgRm9yIGV4YW1wbGUsIGluIFB5dGhvbiAyLngsCiAgIGBgcHJpbnQgIkFcbiIsICJCImBgIHdvdWxkIHdyaXRlIGBgIkFcbkJcbiJgYDsgYnV0IGluIFB5dGhvbiAzLjAsCiAgIGBgcHJpbnQoIkFcbiIsICJCIilgYCB3cml0ZXMgYGAiQVxuIEJcbiJgYC4KIApAQCAtMTM1LDcgKzEzNSw3IEBACiAgIGBgcHJpbnQoeClgYCBpbnN0ZWFkIQogCiAqIFdoZW4gdXNpbmcgdGhlIGBgMnRvM2BgIHNvdXJjZS10by1zb3VyY2UgY29udmVyc2lvbiB0b29sLCBhbGwKLSAgOmtleXdvcmQ6YHByaW50YCBzdGF0ZW1lbnRzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0bworICBgYHByaW50YGAgc3RhdGVtZW50cyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8KICAgOmZ1bmM6YHByaW50YCBmdW5jdGlvbiBjYWxscywgc28gdGhpcyBpcyBtb3N0bHkgYSBub24taXNzdWUgZm9yCiAgIGxhcmdlciBwcm9qZWN0cy4KIApAQCAtMTc4LDcgKzE3OCw3IEBACiAgIG1lYW5pbmdmdWwgbmF0dXJhbCBvcmRlcmluZy4gIFRodXMsIGV4cHJlc3Npb25zIGxpa2UgYGAxIDwgJydgYCwgYGAwCiAgID4gTm9uZWBgIG9yIGBgbGVuIDw9IGxlbmBgIGFyZSBubyBsb25nZXIgdmFsaWQsIGFuZCBlLmcuIGBgTm9uZSA8CiAgIE5vbmVgYCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYCBpbnN0ZWFkIG9mIHJldHVybmluZwotICA6a2V5d29yZDpgRmFsc2VgLiAgQSBjb3JvbGxhcnkgaXMgdGhhdCBzb3J0aW5nIGEgaGV0ZXJvZ2VuZW91cyBsaXN0CisgIGBgRmFsc2VgYC4gIEEgY29yb2xsYXJ5IGlzIHRoYXQgc29ydGluZyBhIGhldGVyb2dlbmVvdXMgbGlzdAogICBubyBsb25nZXIgbWFrZXMgc2Vuc2UgLS0gYWxsIHRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUgdG8gZWFjaAogICBvdGhlci4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBgYD09YGAgYW5kIGBgIT1gYAogICBvcGVyYXRvcnM6IG9iamVjdHMgb2YgZGlmZmVyZW50IGluY29tcGFyYWJsZSB0eXBlcyBhbHdheXMgY29tcGFyZQpAQCAtMjcwLDcgKzI3MCw3IEBACiAgIHNpbmdsZSAiZXVybyIgY2hhcmFjdGVyLiAgKE9mIGNvdXJzZSwgdGhpcyBjaGFuZ2Ugb25seSBhZmZlY3RzIHJhdwogICBzdHJpbmcgbGl0ZXJhbHM7IHRoZSBldXJvIGNoYXJhY3RlciBpcyBgYCdcdTIwYWMnYGAgaW4gUHl0aG9uIDMuMC4pCiAKLSogVGhlIGJ1aWx0aW4gOmNsYXNzOmBiYXNlc3RyaW5nYCBhYnN0cmFjdCB0eXBlIHdhcyByZW1vdmVkLiAgVXNlCisqIFRoZSBidWlsdC1pbiA6Y2xhc3M6YGJhc2VzdHJpbmdgIGFic3RyYWN0IHR5cGUgd2FzIHJlbW92ZWQuICBVc2UKICAgOmNsYXNzOmBzdHJgIGluc3RlYWQuICBUaGUgOmNsYXNzOmBzdHJgIGFuZCA6Y2xhc3M6YGJ5dGVzYCB0eXBlcwogICBkb24ndCBoYXZlIGZ1bmN0aW9uYWxpdHkgZW5vdWdoIGluIGNvbW1vbiB0byB3YXJyYW50IGEgc2hhcmVkIGJhc2UKICAgY2xhc3MuICBUaGUgYGAydG8zYGAgdG9vbCAoc2VlIGJlbG93KSByZXBsYWNlcyBldmVyeSBvY2N1cnJlbmNlIG9mCkBAIC0zODMsMTAgKzM4MywxMCBAQAogICBsaXRlcmFscyAoYGAwNzIwYGApIGFyZSBnb25lLgogCiAqIE5ldyBiaW5hcnkgbGl0ZXJhbHMsIGUuZy4gYGAwYjEwMTBgYCAoYWxyZWFkeSBpbiAyLjYpLCBhbmQKLSAgdGhlcmUgaXMgYSBuZXcgY29ycmVzcG9uZGluZyBidWlsdGluIGZ1bmN0aW9uLCA6ZnVuYzpgYmluYC4KKyAgdGhlcmUgaXMgYSBuZXcgY29ycmVzcG9uZGluZyBidWlsdC1pbiBmdW5jdGlvbiwgOmZ1bmM6YGJpbmAuCiAKICogQnl0ZXMgbGl0ZXJhbHMgYXJlIGludHJvZHVjZWQgd2l0aCBhIGxlYWRpbmcgYGBiYGAgb3IgYGBCYGAsIGFuZAotICB0aGVyZSBpcyBhIG5ldyBjb3JyZXNwb25kaW5nIGJ1aWx0aW4gZnVuY3Rpb24sIDpmdW5jOmBieXRlc2AuCisgIHRoZXJlIGlzIGEgbmV3IGNvcnJlc3BvbmRpbmcgYnVpbHQtaW4gZnVuY3Rpb24sIDpmdW5jOmBieXRlc2AuCiAKIENoYW5nZWQgU3ludGF4CiAtLS0tLS0tLS0tLS0tLQpAQCAtMzk3LDkgKzM5Nyw4IEBACiAqIDprZXl3b3JkOmBhc2AgYW5kIDprZXl3b3JkOmB3aXRoYCBhcmUgbm93IHJlc2VydmVkIHdvcmRzLiAgKFNpbmNlCiAgIDIuNiwgYWN0dWFsbHkuKQogCi0qIDprZXl3b3JkOmBUcnVlYCwgOmtleXdvcmQ6YEZhbHNlYCwgYW5kIDprZXl3b3JkOmBOb25lYCBhcmUgcmVzZXJ2ZWQKLSAgd29yZHMuICAoMi42IHBhcnRpYWxseSBlbmZvcmNlZCB0aGUgcmVzdHJpY3Rpb25zIG9uIDprZXl3b3JkOmBOb25lYAotICBhbHJlYWR5LikKKyogYGBUcnVlYGAsIGBgRmFsc2VgYCwgYW5kIGBgTm9uZWBgIGFyZSByZXNlcnZlZCB3b3Jkcy4gICgyLjYgcGFydGlhbGx5IGVuZm9yY2VkCisgIHRoZSByZXN0cmljdGlvbnMgb24gYGBOb25lYGAgYWxyZWFkeS4pCiAKICogQ2hhbmdlIGZyb20gOmtleXdvcmQ6YGV4Y2VwdGAgKmV4YyosICp2YXIqIHRvCiAgIDprZXl3b3JkOmBleGNlcHRgICpleGMqIDprZXl3b3JkOmBhc2AgKnZhciouICBTZWUgOnBlcDpgMzExMGAuCkBAIC01MDYsNyArNTA1LDcgQEAKICogOnJlZjpgcGVwLTMxMTZgLiAgVGhlIDptb2Q6YGlvYCBtb2R1bGUgaXMgbm93IHRoZSBzdGFuZGFyZCB3YXkgb2YKICAgZG9pbmcgZmlsZSBJL08sIGFuZCB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgOmRhdGE6YHN5cy5zdGRpbmAsCiAgIDpkYXRhOmBzeXMuc3Rkb3V0YCBhbmQgOmRhdGE6YHN5cy5zdGRlcnJgIGFyZSBub3cgaW5zdGFuY2VzIG9mCi0gIDpjbGFzczpgaW8uVGV4dElPQmFzZWAuICBUaGUgYnVpbHRpbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gaXMgbm93IGFuCisgIDpjbGFzczpgaW8uVGV4dElPQmFzZWAuICBUaGUgYnVpbHQtaW4gOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGlzIG5vdyBhbgogICBhbGlhcyBmb3IgOmZ1bmM6YGlvLm9wZW5gIGFuZCBoYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cwogICAqZW5jb2RpbmcqLCAqZXJyb3JzKiwgKm5ld2xpbmUqIGFuZCAqY2xvc2VmZCouICBBbHNvIG5vdGUgdGhhdCBhbgogICBpbnZhbGlkICptb2RlKiBhcmd1bWVudCBub3cgcmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgLCBub3QKQEAgLTUyMSw3ICs1MjAsNyBAQAogCiAqIDpyZWY6YHBlcC0zMTE5YC4gIFRoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbmQgdGhlIEFCQ3MgZGVmaW5lZCBpbiB0aGUKICAgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSBwbGF5cyBhIHNvbWV3aGF0IG1vcmUgcHJvbWluZW50IHJvbGUgaW4KLSAgdGhlIGxhbmd1YWdlIG5vdywgYW5kIGJ1aWx0aW4gY29sbGVjdGlvbiB0eXBlcyBsaWtlIDpjbGFzczpgZGljdGAKKyAgdGhlIGxhbmd1YWdlIG5vdywgYW5kIGJ1aWx0LWluIGNvbGxlY3Rpb24gdHlwZXMgbGlrZSA6Y2xhc3M6YGRpY3RgCiAgIGFuZCA6Y2xhc3M6YGxpc3RgIGNvbmZvcm0gdG8gdGhlIDpjbGFzczpgY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmdgCiAgIGFuZCA6Y2xhc3M6YGNvbGxlY3Rpb25zLk11dGFibGVTZXF1ZW5jZWAgQUJDcywgcmVzcGVjdGl2ZWx5LgogCkBAIC02MTUsNyArNjE0LDcgQEAKIFNvbWUgb3RoZXIgY2hhbmdlcyB0byBzdGFuZGFyZCBsaWJyYXJ5IG1vZHVsZXMsIG5vdCBjb3ZlcmVkIGJ5CiA6cGVwOmAzMTA4YDoKIAotKiBLaWxsZWQgOm1vZDpgc2V0c2AuICBVc2UgdGhlIGJ1aWx0aW4gOmZ1bmM6YHNldGAgZnVuY3Rpb24uCisqIEtpbGxlZCA6bW9kOmBzZXRzYC4gIFVzZSB0aGUgYnVpbHQtaW4gOmZ1bmM6YHNldGAgY2xhc3MuCiAKICogQ2xlYW51cCBvZiB0aGUgOm1vZDpgc3lzYCBtb2R1bGU6IHJlbW92ZWQgOmZ1bmM6YHN5cy5leGl0ZnVuY2AsCiAgIDpmdW5jOmBzeXMuZXhjX2NsZWFyYCwgOmRhdGE6YHN5cy5leGNfdHlwZWAsIDpkYXRhOmBzeXMuZXhjX3ZhbHVlYCwKQEAgLTc5NSw4ICs3OTQsOCBAQAogICBJdCByYWlzZXMgOmV4YzpgRU9GRXJyb3JgIGlmIHRoZSBpbnB1dCBpcyB0ZXJtaW5hdGVkIHByZW1hdHVyZWx5LgogICBUbyBnZXQgdGhlIG9sZCBiZWhhdmlvciBvZiA6ZnVuYzpgaW5wdXRgLCB1c2UgYGBldmFsKGlucHV0KCkpYGAuCiAKLSogQSBuZXcgYnVpbHRpbiA6ZnVuYzpgbmV4dGAgd2FzIGFkZGVkIHRvIGNhbGwgdGhlIDptZXRoOmBfX25leHRfX2AKLSAgbWV0aG9kIG9uIGFuIG9iamVjdC4KKyogQSBuZXcgYnVpbHQtaW4gZnVuY3Rpb24gOmZ1bmM6YG5leHRgIHdhcyBhZGRlZCB0byBjYWxsIHRoZQorICA6bWV0aDpgX19uZXh0X19gIG1ldGhvZCBvbiBhbiBvYmplY3QuCiAKICogVGhlIDpmdW5jOmByb3VuZGAgZnVuY3Rpb24gcm91bmRpbmcgc3RyYXRlZ3kgYW5kIHJldHVybiB0eXBlIGhhdmUKICAgY2hhbmdlZC4gIEV4YWN0IGhhbGZ3YXkgY2FzZXMgYXJlIG5vdyByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGV2ZW4KQEAgLTg1MCwyMSArODQ5LDIxIEBACiAKICogOnBlcDpgMzEyMWA6IEV4dGVuc2lvbiBNb2R1bGUgSW5pdGlhbGl6YXRpb24gJiBGaW5hbGl6YXRpb24uCiAKLSogOnBlcDpgMzEyM2A6IE1ha2luZyA6Y21hY3JvOmBQeU9iamVjdF9IRUFEYCBjb25mb3JtIHRvIHN0YW5kYXJkIEMuCisqIDpwZXA6YDMxMjNgOiBNYWtpbmcgOmM6bWFjcm86YFB5T2JqZWN0X0hFQURgIGNvbmZvcm0gdG8gc3RhbmRhcmQgQy4KIAogKiBObyBtb3JlIEMgQVBJIHN1cHBvcnQgZm9yIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLgogCi0qIDpjZnVuYzpgUHlOdW1iZXJfQ29lcmNlYCwgOmNmdW5jOmBQeU51bWJlcl9Db2VyY2VFeGAsCi0gIDpjZnVuYzpgUHlNZW1iZXJfR2V0YCwgYW5kIDpjZnVuYzpgUHlNZW1iZXJfU2V0YCBDIEFQSXMgYXJlIHJlbW92ZWQuCisqIDpjOmZ1bmM6YFB5TnVtYmVyX0NvZXJjZWAsIDpjOmZ1bmM6YFB5TnVtYmVyX0NvZXJjZUV4YCwKKyAgOmM6ZnVuYzpgUHlNZW1iZXJfR2V0YCwgYW5kIDpjOmZ1bmM6YFB5TWVtYmVyX1NldGAgQyBBUElzIGFyZSByZW1vdmVkLgogCi0qIE5ldyBDIEFQSSA6Y2Z1bmM6YFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2tgLCB3b3JrcyBsaWtlCi0gIDpjZnVuYzpgUHlJbXBvcnRfSW1wb3J0TW9kdWxlYCBidXQgd29uJ3QgYmxvY2sgb24gdGhlIGltcG9ydCBsb2NrCisqIE5ldyBDIEFQSSA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrYCwgd29ya3MgbGlrZQorICA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVgIGJ1dCB3b24ndCBibG9jayBvbiB0aGUgaW1wb3J0IGxvY2sKICAgKHJldHVybmluZyBhbiBlcnJvciBpbnN0ZWFkKS4KIAogKiBSZW5hbWVkIHRoZSBib29sZWFuIGNvbnZlcnNpb24gQy1sZXZlbCBzbG90IGFuZCBtZXRob2Q6CiAgIGBgbmJfbm9uemVyb2BgIGlzIG5vdyBgYG5iX2Jvb2xgYC4KIAotKiBSZW1vdmVkIDpjbWFjcm86YE1FVEhfT0xEQVJHU2AgYW5kIDpjbWFjcm86YFdJVEhfQ1lDTEVfR0NgIGZyb20gdGhlIEMgQVBJLgorKiBSZW1vdmVkIDpjOm1hY3JvOmBNRVRIX09MREFSR1NgIGFuZCA6YzptYWNybzpgV0lUSF9DWUNMRV9HQ2AgZnJvbSB0aGUgQyBBUEkuCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtOTA2LDcgKzkwNSw3IEBACiAKIEl0IGlzIG5vdCByZWNvbW1lbmRlZCB0byB0cnkgdG8gd3JpdGUgc291cmNlIGNvZGUgdGhhdCBydW5zIHVuY2hhbmdlZAogdW5kZXIgYm90aCBQeXRob24gMi42IGFuZCAzLjA7IHlvdSdkIGhhdmUgdG8gdXNlIGEgdmVyeSBjb250b3J0ZWQKLWNvZGluZyBzdHlsZSwgZS5nLiBhdm9pZGluZyA6a2V5d29yZDpgcHJpbnRgIHN0YXRlbWVudHMsIG1ldGFjbGFzc2VzLAorY29kaW5nIHN0eWxlLCBlLmcuIGF2b2lkaW5nIGBgcHJpbnRgYCBzdGF0ZW1lbnRzLCBtZXRhY2xhc3NlcywKIGFuZCBtdWNoIG1vcmUuICBJZiB5b3UgYXJlIG1haW50YWluaW5nIGEgbGlicmFyeSB0aGF0IG5lZWRzIHRvIHN1cHBvcnQKIGJvdGggUHl0aG9uIDIuNiBhbmQgUHl0aG9uIDMuMCwgdGhlIGJlc3QgYXBwcm9hY2ggaXMgdG8gbW9kaWZ5IHN0ZXAgMwogYWJvdmUgYnkgZWRpdGluZyB0aGUgMi42IHZlcnNpb24gb2YgdGhlIHNvdXJjZSBjb2RlIGFuZCBydW5uaW5nIHRoZQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMS5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4xLnJzdAppbmRleCAxYjZiM2NlLi42NGFlMWMxIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4xLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4xLnJzdApAQCAtODEsMzMgKzgxLDExIEBACiAgICAgICBQRVAgd3JpdHRlbiBieSBBcm1pbiBSb25hY2hlciBhbmQgUmF5bW9uZCBIZXR0aW5nZXIuICBJbXBsZW1lbnRhdGlvbgogICAgICAgd3JpdHRlbiBieSBSYXltb25kIEhldHRpbmdlci4KIAotU2luY2UgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IHJlbWVtYmVycyBpdHMgaW5zZXJ0aW9uIG9yZGVyLCBpdCBjYW4gYmUgdXNlZAotaW4gY29uanVjdGlvbiB3aXRoIHNvcnRpbmcgdG8gbWFrZSBhIHNvcnRlZCBkaWN0aW9uYXJ5OjoKLQotICAgID4+PiAjIHJlZ3VsYXIgdW5zb3J0ZWQgZGljdGlvbmFyeQotICAgID4+PiBkID0geydiYW5hbmEnOiAzLCAnYXBwbGUnOjQsICdwZWFyJzogMSwgJ29yYW5nZSc6IDJ9Ci0KLSAgICA+Pj4gIyBkaWN0aW9uYXJ5IHNvcnRlZCBieSBrZXkKLSAgICA+Pj4gT3JkZXJlZERpY3Qoc29ydGVkKGQuaXRlbXMoKSwga2V5PWxhbWJkYSB0OiB0WzBdKSkKLSAgICBPcmRlcmVkRGljdChbKCdhcHBsZScsIDQpLCAoJ2JhbmFuYScsIDMpLCAoJ29yYW5nZScsIDIpLCAoJ3BlYXInLCAxKV0pCi0KLSAgICA+Pj4gIyBkaWN0aW9uYXJ5IHNvcnRlZCBieSB2YWx1ZQotICAgID4+PiBPcmRlcmVkRGljdChzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIHQ6IHRbMV0pKQotICAgIE9yZGVyZWREaWN0KFsoJ3BlYXInLCAxKSwgKCdvcmFuZ2UnLCAyKSwgKCdiYW5hbmEnLCAzKSwgKCdhcHBsZScsIDQpXSkKLQotICAgID4+PiAjIGRpY3Rpb25hcnkgc29ydGVkIGJ5IGxlbmd0aCBvZiB0aGUga2V5IHN0cmluZwotICAgID4+PiBPcmRlcmVkRGljdChzb3J0ZWQoZC5pdGVtcygpLCBrZXk9bGFtYmRhIHQ6IGxlbih0WzBdKSkpCi0gICAgT3JkZXJlZERpY3QoWygncGVhcicsIDEpLCAoJ2FwcGxlJywgNCksICgnb3JhbmdlJywgMiksICgnYmFuYW5hJywgMyldKQotCi1UaGUgbmV3IHNvcnRlZCBkaWN0aW9uYXJpZXMgbWFpbnRhaW4gdGhlaXIgc29ydCBvcmRlciB3aGVuIGVudHJpZXMKLWFyZSBkZWxldGVkLiAgQnV0IHdoZW4gbmV3IGtleXMgYXJlIGFkZGVkLCB0aGUga2V5cyBhcmUgYXBwZW5kZWQKLXRvIHRoZSBlbmQgYW5kIHRoZSBzb3J0IGlzIG5vdCBtYWludGFpbmVkLgotCiAKIFBFUCAzNzg6IEZvcm1hdCBTcGVjaWZpZXIgZm9yIFRob3VzYW5kcyBTZXBhcmF0b3IKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGJ1aWx0aW4gOmZ1bmM6YGZvcm1hdGAgZnVuY3Rpb24gYW5kIHRoZSA6bWV0aDpgc3RyLmZvcm1hdGAgbWV0aG9kIHVzZQorVGhlIGJ1aWx0LWluIDpmdW5jOmBmb3JtYXRgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHN0ci5mb3JtYXRgIG1ldGhvZCB1c2UKIGEgbWluaS1sYW5ndWFnZSB0aGF0IG5vdyBpbmNsdWRlcyBhIHNpbXBsZSwgbm9uLWxvY2FsZSBhd2FyZSB3YXkgdG8gZm9ybWF0CiBhIG51bWJlciB3aXRoIGEgdGhvdXNhbmRzIHNlcGFyYXRvci4gIFRoYXQgcHJvdmlkZXMgYSB3YXkgdG8gaHVtYW5pemUgYQogcHJvZ3JhbSdzIG91dHB1dCwgaW1wcm92aW5nIGl0cyBwcm9mZXNzaW9uYWwgYXBwZWFyYW5jZSBhbmQgcmVhZGFiaWxpdHk6OgpAQCAtNTE5LDIxICs0OTcsMjEgQEAKIAogICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNDI1OGAuKQogCi0qIFRoZSA6Y2Z1bmM6YFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcoKWAgZnVuY3Rpb24gbm93IGhhbmRsZXMgYSBuZWdhdGl2ZQorKiBUaGUgOmM6ZnVuYzpgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZygpYCBmdW5jdGlvbiBub3cgaGFuZGxlcyBhIG5lZ2F0aXZlCiAgICpweWxvbmcqIGJ5IHJhaXNpbmcgOmV4YzpgT3ZlcmZsb3dFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBUeXBlRXJyb3JgLgogCiAgIChDb250cmlidXRlZCBieSBNYXJrIERpY2tpbnNvbiBhbmQgTGlzYW5kcm8gRGFsY3JpbjsgOmlzc3VlOmA1MTc1YC4pCiAKLSogRGVwcmVjYXRlZCA6Y2Z1bmM6YFB5TnVtYmVyX0ludGAuICBVc2UgOmNmdW5jOmBQeU51bWJlcl9Mb25nYCBpbnN0ZWFkLgorKiBEZXByZWNhdGVkIDpjOmZ1bmM6YFB5TnVtYmVyX0ludGAuICBVc2UgOmM6ZnVuYzpgUHlOdW1iZXJfTG9uZ2AgaW5zdGVhZC4KIAogICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNDkxMGAuKQogCi0qIEFkZGVkIGEgbmV3IDpjZnVuYzpgUHlPU19zdHJpbmdfdG9fZG91YmxlYCBmdW5jdGlvbiB0byByZXBsYWNlIHRoZQotICBkZXByZWNhdGVkIGZ1bmN0aW9ucyA6Y2Z1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBhbmQgOmNmdW5jOmBQeU9TX2FzY2lpX2F0b2ZgLgorKiBBZGRlZCBhIG5ldyA6YzpmdW5jOmBQeU9TX3N0cmluZ190b19kb3VibGVgIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhlCisgIGRlcHJlY2F0ZWQgZnVuY3Rpb25zIDpjOmZ1bmM6YFB5T1NfYXNjaWlfc3RydG9kYCBhbmQgOmM6ZnVuYzpgUHlPU19hc2NpaV9hdG9mYC4KIAogICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNTkxNGAuKQogCi0qIEFkZGVkIDpjdHlwZTpgUHlDYXBzdWxlYCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgOmN0eXBlOmBQeUNPYmplY3RgIEFQSS4KKyogQWRkZWQgOmM6dHlwZTpgUHlDYXBzdWxlYCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgOmM6dHlwZTpgUHlDT2JqZWN0YCBBUEkuCiAgIFRoZSBwcmluY2lwYWwgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZSBuZXcgdHlwZSBoYXMgYSB3ZWxsIGRlZmluZWQgaW50ZXJmYWNlCiAgIGZvciBwYXNzaW5nIHR5cGluZyBzYWZldHkgaW5mb3JtYXRpb24gYW5kIGEgbGVzcyBjb21wbGljYXRlZCBzaWduYXR1cmUKICAgZm9yIGNhbGxpbmcgYSBkZXN0cnVjdG9yLiAgVGhlIG9sZCB0eXBlIGhhZCBhIHByb2JsZW1hdGljIEFQSSBhbmQgaXMgbm93CmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4yLnJzdCBiL0RvYy93aGF0c25ldy8zLjIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MTFkODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4yLnJzdApAQCAtMCwwICsxLDI3MDQgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgV2hhdCdzIE5ldyBJbiBQeXRob24gMy4yCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzpBdXRob3I6IFJheW1vbmQgSGV0dGluZ2VyCis6UmVsZWFzZTogfHJlbGVhc2V8Cis6RGF0ZTogfHRvZGF5fAorCisuLiAkSWQkCisgICBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CisKKyAgICogQW55b25lIGNhbiBhZGQgdGV4dCB0byB0aGlzIGRvY3VtZW50LiAgRG8gbm90IHNwZW5kIHZlcnkgbXVjaCB0aW1lCisgICBvbiB0aGUgd29yZGluZyBvZiB5b3VyIGNoYW5nZXMsIGJlY2F1c2UgeW91ciB0ZXh0IHdpbGwgcHJvYmFibHkKKyAgIGdldCByZXdyaXR0ZW4uICAoTm90ZSwgZHVyaW5nIHJlbGVhc2UgY2FuZGlkYXRlIHBoYXNlIG9yIGp1c3QgYmVmb3JlCisgICBhIGJldGEgcmVsZWFzZSwgcGxlYXNlIHVzZSB0aGUgdHJhY2tlciBpbnN0ZWFkIC0tIHRoaXMgaGVscHMgYXZvaWQKKyAgIG1lcmdlIGNvbmZsaWN0cy4gICBJZiB5b3UgbXVzdCBhZGQgYSBzdWdnZXN0ZWQgZW50cnkgZGlyZWN0bHksCisgICBwbGVhc2UgcHV0IGl0IGluIGFuIFhYWCBjb21tZW50IGFuZCB0aGUgbWFpbnRhaW5lciB3aWxsIHRha2Ugbm90aWNlKS4KKworICAgKiBUaGUgbWFpbnRhaW5lciB3aWxsIGdvIHRocm91Z2ggTWlzYy9ORVdTIHBlcmlvZGljYWxseSBhbmQgYWRkCisgICBjaGFuZ2VzOyBpdCdzIHRoZXJlZm9yZSBtb3JlIGltcG9ydGFudCB0byBhZGQgeW91ciBjaGFuZ2VzIHRvCisgICBNaXNjL05FV1MgdGhhbiB0byB0aGlzIGZpbGUuCisKKyAgICogVGhpcyBpcyBub3QgYSBjb21wbGV0ZSBsaXN0IG9mIGV2ZXJ5IHNpbmdsZSBjaGFuZ2U7IGNvbXBsZXRlbmVzcworICAgaXMgdGhlIHB1cnBvc2Ugb2YgTWlzYy9ORVdTLiAgU29tZSBjaGFuZ2VzIEkgY29uc2lkZXIgdG9vIHNtYWxsCisgICBvciBlc290ZXJpYyB0byBpbmNsdWRlLiAgSWYgc3VjaCBhIGNoYW5nZSBpcyBhZGRlZCB0byB0aGUgdGV4dCwKKyAgIEknbGwganVzdCByZW1vdmUgaXQuICAoVGhpcyBpcyBhbm90aGVyIHJlYXNvbiB5b3Ugc2hvdWxkbid0IHNwZW5kCisgICB0b28gbXVjaCB0aW1lIG9uIHdyaXRpbmcgeW91ciBhZGRpdGlvbi4pCisKKyAgICogSWYgeW91IHdhbnQgdG8gZHJhdyB5b3VyIG5ldyB0ZXh0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhlCisgICBtYWludGFpbmVyLCBhZGQgJ1hYWCcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyYWdyYXBoIG9yCisgICBzZWN0aW9uLgorCisgICAqIEl0J3MgT0sgdG8ganVzdCBhZGQgYSBmcmFnbWVudGFyeSBub3RlIGFib3V0IGEgY2hhbmdlLiAgRm9yCisgICBleGFtcGxlOiAiWFhYIERlc2NyaWJlIHRoZSB0cmFuc21vZ3JpZnkoKSBmdW5jdGlvbiBhZGRlZCB0byB0aGUKKyAgIHNvY2tldCBtb2R1bGUuIiAgVGhlIG1haW50YWluZXIgd2lsbCByZXNlYXJjaCB0aGUgY2hhbmdlIGFuZAorICAgd3JpdGUgdGhlIG5lY2Vzc2FyeSB0ZXh0LgorCisgICAqIFlvdSBjYW4gY29tbWVudCBvdXQgeW91ciBhZGRpdGlvbnMgaWYgeW91IGxpa2UsIGJ1dCBpdCdzIG5vdAorICAgbmVjZXNzYXJ5IChlc3BlY2lhbGx5IHdoZW4gYSBmaW5hbCByZWxlYXNlIGlzIHNvbWUgbW9udGhzIGF3YXkpLgorCisgICAqIENyZWRpdCB0aGUgYXV0aG9yIG9mIGEgcGF0Y2ggb3IgYnVnZml4LiAgIEp1c3QgdGhlIG5hbWUgaXMKKyAgIHN1ZmZpY2llbnQ7IHRoZSBlLW1haWwgYWRkcmVzcyBpc24ndCBuZWNlc3NhcnkuICBJdCdzIGhlbHBmdWwgdG8KKyAgIGFkZCB0aGUgaXNzdWUgbnVtYmVyOgorCisgICAgIFhYWCBEZXNjcmliZSB0aGUgdHJhbnNtb2dyaWZ5KCkgZnVuY3Rpb24gYWRkZWQgdG8gdGhlIHNvY2tldAorICAgICBtb2R1bGUuCisKKyAgICAgKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyOyA6aXNzdWU6YDEyMzQ1YC4pCisKKyAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgdGhlIGVmZm9ydCBvZiBnb2luZyB0aHJvdWdoIHRoZSBTVk4gbG9nCisgICB3aGVuIHJlc2VhcmNoaW5nIGEgY2hhbmdlLgorCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy4yIGFzIGNvbXBhcmVkIHRvIDMuMS4gIEl0Citmb2N1c2VzIG9uIGEgZmV3IGhpZ2hsaWdodHMgYW5kIGdpdmVzIGEgZmV3IGV4YW1wbGVzLiAgRm9yIGZ1bGwgZGV0YWlscywgc2VlIHRoZQorOnNvdXJjZTpgTWlzYy9ORVdTIDxNaXNjL05FV1M+YCBmaWxlLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzkyYCAtIFB5dGhvbiAzLjIgUmVsZWFzZSBTY2hlZHVsZQorCisKK1BFUCAzODQ6IERlZmluaW5nIGEgU3RhYmxlIEFCSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIHRoZSBwYXN0LCBleHRlbnNpb24gbW9kdWxlcyBidWlsdCBmb3Igb25lIFB5dGhvbiB2ZXJzaW9uIHdlcmUgb2Z0ZW4KK25vdCB1c2FibGUgd2l0aCBvdGhlciBQeXRob24gdmVyc2lvbnMuIFBhcnRpY3VsYXJseSBvbiBXaW5kb3dzLCBldmVyeQorZmVhdHVyZSByZWxlYXNlIG9mIFB5dGhvbiByZXF1aXJlZCByZWJ1aWxkaW5nIGFsbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0CitvbmUgd2FudGVkIHRvIHVzZS4gVGhpcyByZXF1aXJlbWVudCB3YXMgdGhlIHJlc3VsdCBvZiB0aGUgZnJlZSBhY2Nlc3MgdG8KK1B5dGhvbiBpbnRlcnByZXRlciBpbnRlcm5hbHMgdGhhdCBleHRlbnNpb24gbW9kdWxlcyBjb3VsZCB1c2UuCisKK1dpdGggUHl0aG9uIDMuMiwgYW4gYWx0ZXJuYXRpdmUgYXBwcm9hY2ggYmVjb21lcyBhdmFpbGFibGU6IGV4dGVuc2lvbgorbW9kdWxlcyB3aGljaCByZXN0cmljdCB0aGVtc2VsdmVzIHRvIGEgbGltaXRlZCBBUEkgKGJ5IGRlZmluaW5nCitQeV9MSU1JVEVEX0FQSSkgY2Fubm90IHVzZSBtYW55IG9mIHRoZSBpbnRlcm5hbHMsIGJ1dCBhcmUgY29uc3RyYWluZWQKK3RvIGEgc2V0IG9mIEFQSSBmdW5jdGlvbnMgdGhhdCBhcmUgcHJvbWlzZWQgdG8gYmUgc3RhYmxlIGZvciBzZXZlcmFsCityZWxlYXNlcy4gQXMgYSBjb25zZXF1ZW5jZSwgZXh0ZW5zaW9uIG1vZHVsZXMgYnVpbHQgZm9yIDMuMiBpbiB0aGF0Cittb2RlIHdpbGwgYWxzbyB3b3JrIHdpdGggMy4zLCAzLjQsIGFuZCBzbyBvbi4gRXh0ZW5zaW9uIG1vZHVsZXMgdGhhdAorbWFrZSB1c2Ugb2YgZGV0YWlscyBvZiBtZW1vcnkgc3RydWN0dXJlcyBjYW4gc3RpbGwgYmUgYnVpbHQsIGJ1dCB3aWxsCituZWVkIHRvIGJlIHJlY29tcGlsZWQgZm9yIGV2ZXJ5IGZlYXR1cmUgcmVsZWFzZS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM4NGAgLSBEZWZpbmluZyBhIFN0YWJsZSBBQkkKKyAgICAgIFBFUCB3cml0dGVuIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCisKK1BFUCAzODk6IEFyZ3BhcnNlIENvbW1hbmQgTGluZSBQYXJzaW5nIE1vZHVsZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0EgbmV3IG1vZHVsZSBmb3IgY29tbWFuZCBsaW5lIHBhcnNpbmcsIDptb2Q6YGFyZ3BhcnNlYCwgd2FzIGludHJvZHVjZWQgdG8KK292ZXJjb21lIHRoZSBsaW1pdGF0aW9ucyBvZiA6bW9kOmBvcHRwYXJzZWAgd2hpY2ggZGlkIG5vdCBwcm92aWRlIHN1cHBvcnQgZm9yCitwb3NpdGlvbmFsIGFyZ3VtZW50cyAobm90IGp1c3Qgb3B0aW9ucyksIHN1YmNvbW1hbmRzLCByZXF1aXJlZCBvcHRpb25zIGFuZCBvdGhlcgorY29tbW9uIHBhdHRlcm5zIG9mIHNwZWNpZnlpbmcgYW5kIHZhbGlkYXRpbmcgb3B0aW9ucy4KKworVGhpcyBtb2R1bGUgaGFzIGFscmVhZHkgaGFkIHdpZGVzcHJlYWQgc3VjY2VzcyBpbiB0aGUgY29tbXVuaXR5IGFzIGEKK3RoaXJkLXBhcnR5IG1vZHVsZS4gIEJlaW5nIG1vcmUgZnVsbHkgZmVhdHVyZWQgdGhhbiBpdHMgcHJlZGVjZXNzb3IsIHRoZQorOm1vZDpgYXJncGFyc2VgIG1vZHVsZSBpcyBub3cgdGhlIHByZWZlcnJlZCBtb2R1bGUgZm9yIGNvbW1hbmQtbGluZSBwcm9jZXNzaW5nLgorVGhlIG9sZGVyIG1vZHVsZSBpcyBzdGlsbCBiZWluZyBrZXB0IGF2YWlsYWJsZSBiZWNhdXNlIG9mIHRoZSBzdWJzdGFudGlhbCBhbW91bnQKK29mIGxlZ2FjeSBjb2RlIHRoYXQgZGVwZW5kcyBvbiBpdC4KKworSGVyZSdzIGFuIGFubm90YXRlZCBleGFtcGxlIHBhcnNlciBzaG93aW5nIGZlYXR1cmVzIGxpa2UgbGltaXRpbmcgcmVzdWx0cyB0byBhCitzZXQgb2YgY2hvaWNlcywgc3BlY2lmeWluZyBhICptZXRhdmFyKiBpbiB0aGUgaGVscCBzY3JlZW4sIHZhbGlkYXRpbmcgdGhhdCBvbmUKK29yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgcHJlc2VudCwgYW5kIG1ha2luZyBhIHJlcXVpcmVkIG9wdGlvbjo6CisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9ICdNYW5hZ2Ugc2VydmVycycsICAgICAgICAgIyBtYWluIGRlc2NyaXB0aW9uIGZvciBoZWxwCisgICAgICAgICAgICAgICAgZXBpbG9nID0gJ1Rlc3RlZCBvbiBTb2xhcmlzIGFuZCBMaW51eCcpICMgZGlzcGxheWVkIGFmdGVyIGhlbHAKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdhY3Rpb24nLCAgICAgICAgICAgICAgICAgICAgICAgIyBhcmd1bWVudCBuYW1lCisgICAgICAgICAgICAgICAgY2hvaWNlcyA9IFsnZGVwbG95JywgJ3N0YXJ0JywgJ3N0b3AnXSwgICMgdGhyZWUgYWxsb3dlZCB2YWx1ZXMKKyAgICAgICAgICAgICAgICBoZWxwID0gJ2FjdGlvbiBvbiBlYWNoIHRhcmdldCcpICAgICAgICAgIyBoZWxwIG1zZworICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3RhcmdldHMnLAorICAgICAgICAgICAgICAgIG1ldGF2YXIgPSAnSE9TVE5BTUUnLCAgICAgICAgICAgICAgICAgICAjIHZhciBuYW1lIHVzZWQgaW4gaGVscCBtc2cKKyAgICAgICAgICAgICAgICBuYXJncyA9ICcrJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXF1aXJlIG9uZSBvciBtb3JlIHRhcmdldHMKKyAgICAgICAgICAgICAgICBoZWxwID0gJ3VybCBmb3IgdGFyZ2V0IG1hY2hpbmVzJykgICAgICAgIyBoZWxwIG1zZyBleHBsYW5hdGlvbgorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy11JywgJy0tdXNlcicsICAgICAgICAgICAgICAgICAjIC11IG9yIC0tdXNlciBvcHRpb24KKyAgICAgICAgICAgICAgICByZXF1aXJlZCA9IFRydWUsICAgICAgICAgICAgICAgICAgICAgICAgIyBtYWtlIGl0IGEgcmVxdWlyZWQgYXJndW1lbnQKKyAgICAgICAgICAgICAgICBoZWxwID0gJ2xvZ2luIGFzIHVzZXInKQorCitFeGFtcGxlIG9mIGNhbGxpbmcgdGhlIHBhcnNlciBvbiBhIGNvbW1hbmQgc3RyaW5nOjoKKworICAgID4+PiBjbWQgID0gJ2RlcGxveSBzbmVlenkuZXhhbXBsZS5jb20gc2xlZXB5LmV4YW1wbGUuY29tIC11IHNreWNhcHRhaW4nCisgICAgPj4+IHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKGNtZC5zcGxpdCgpKQorICAgID4+PiByZXN1bHQuYWN0aW9uCisgICAgJ2RlcGxveScKKyAgICA+Pj4gcmVzdWx0LnRhcmdldHMKKyAgICBbJ3NuZWV6eS5leGFtcGxlLmNvbScsICdzbGVlcHkuZXhhbXBsZS5jb20nXQorICAgID4+PiByZXN1bHQudXNlcgorICAgICdza3ljYXB0YWluJworCitFeGFtcGxlIG9mIHRoZSBwYXJzZXIncyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBoZWxwOjoKKworICAgID4+PiBwYXJzZXIucGFyc2VfYXJncygnLWgnLnNwbGl0KCkpCisKKyAgICB1c2FnZTogbWFuYWdlX2Nsb3VkLnB5IFstaF0gLXUgVVNFUgorICAgICAgICAgICAgICAgICAgICAgICAgICAge2RlcGxveSxzdGFydCxzdG9wfSBIT1NUTkFNRSBbSE9TVE5BTUUgLi4uXQorCisgICAgTWFuYWdlIHNlcnZlcnMKKworICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAge2RlcGxveSxzdGFydCxzdG9wfSAgIGFjdGlvbiBvbiBlYWNoIHRhcmdldAorICAgICAgSE9TVE5BTUUgICAgICAgICAgICAgIHVybCBmb3IgdGFyZ2V0IG1hY2hpbmVzCisKKyAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgLXUgVVNFUiwgLS11c2VyIFVTRVIgIGxvZ2luIGFzIHVzZXIKKworICAgIFRlc3RlZCBvbiBTb2xhcmlzIGFuZCBMaW51eAorCitBbiBlc3BlY2lhbGx5IG5pY2UgOm1vZDpgYXJncGFyc2VgIGZlYXR1cmUgaXMgdGhlIGFiaWxpdHkgdG8gZGVmaW5lIHN1YnBhcnNlcnMsCitlYWNoIHdpdGggdGhlaXIgb3duIGFyZ3VtZW50IHBhdHRlcm5zIGFuZCBoZWxwIGRpc3BsYXlzOjoKKworICAgIGltcG9ydCBhcmdwYXJzZQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKHByb2c9J0hFTE0nKQorICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKQorCisgICAgcGFyc2VyX2wgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2xhdW5jaCcsIGhlbHA9J0xhdW5jaCBDb250cm9sJykgICAjIGZpcnN0IHN1Ymdyb3VwCisgICAgcGFyc2VyX2wuYWRkX2FyZ3VtZW50KCctbScsICctLW1pc3NpbGVzJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXJfbC5hZGRfYXJndW1lbnQoJy10JywgJy0tdG9ycGVkb3MnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorCisgICAgcGFyc2VyX20gPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ21vdmUnLCBoZWxwPSdNb3ZlIFZlc3NlbCcsICAgICAgICAjIHNlY29uZCBzdWJncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM9KCdzdGVlcicsICd0dXJuJykpICAgICAgICAgIyBlcXVpdmFsZW50IG5hbWVzCisgICAgcGFyc2VyX20uYWRkX2FyZ3VtZW50KCctYycsICctLWNvdXJzZScsIHR5cGU9aW50LCByZXF1aXJlZD1UcnVlKQorICAgIHBhcnNlcl9tLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zcGVlZCcsIHR5cGU9aW50LCBkZWZhdWx0PTApCisKKyAgICAkIC4vaGVsbS5weSAtLWhlbHAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0b3AgbGV2ZWwgaGVscCAobGF1bmNoIGFuZCBtb3ZlKQorICAgICQgLi9oZWxtLnB5IGxhdW5jaCAtLWhlbHAgICAgICAgICAgICAgICAgICAjIGhlbHAgZm9yIGxhdW5jaCBvcHRpb25zCisgICAgJCAuL2hlbG0ucHkgbGF1bmNoIC0tbWlzc2lsZXMgICAgICAgICAgICAgICMgc2V0IG1pc3NpbGVzPVRydWUgYW5kIHRvcnBlZG9zPUZhbHNlCisgICAgJCAuL2hlbG0ucHkgc3RlZXIgLS1jb3Vyc2UgMTgwIC0tc3BlZWQgNSAgICMgc2V0IG1vdmVtZW50IHBhcmFtZXRlcnMKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDM4OWAgLSBOZXcgQ29tbWFuZCBMaW5lIFBhcnNpbmcgTW9kdWxlCisgICAgICBQRVAgd3JpdHRlbiBieSBTdGV2ZW4gQmV0aGFyZC4KKworICAgOnJlZjpgdXBncmFkaW5nLW9wdHBhcnNlLWNvZGVgIGZvciBkZXRhaWxzIG9uIHRoZSBkaWZmZXJlbmNlcyBmcm9tIDptb2Q6YG9wdHBhcnNlYC4KKworCitQRVAgMzkxOiAgRGljdGlvbmFyeSBCYXNlZCBDb25maWd1cmF0aW9uIGZvciBMb2dnaW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgcHJvdmlkZWQgdHdvIGtpbmRzIG9mIGNvbmZpZ3VyYXRpb24sIG9uZSBzdHlsZSB3aXRoCitmdW5jdGlvbiBjYWxscyBmb3IgZWFjaCBvcHRpb24gb3IgYW5vdGhlciBzdHlsZSBkcml2ZW4gYnkgYW4gZXh0ZXJuYWwgZmlsZSBzYXZlZAoraW4gYSA6bW9kOmBDb25maWdQYXJzZXJgIGZvcm1hdC4gIFRob3NlIG9wdGlvbnMgZGlkIG5vdCBwcm92aWRlIHRoZSBmbGV4aWJpbGl0eQordG8gY3JlYXRlIGNvbmZpZ3VyYXRpb25zIGZyb20gSlNPTiBvciBZQU1MIGZpbGVzLCBub3IgZGlkIHRoZXkgc3VwcG9ydAoraW5jcmVtZW50YWwgY29uZmlndXJhdGlvbiwgd2hpY2ggaXMgbmVlZGVkIGZvciBzcGVjaWZ5aW5nIGxvZ2dlciBvcHRpb25zIGZyb20gYQorY29tbWFuZCBsaW5lLgorCitUbyBzdXBwb3J0IGEgbW9yZSBmbGV4aWJsZSBzdHlsZSwgdGhlIG1vZHVsZSBub3cgb2ZmZXJzCis6ZnVuYzpgbG9nZ2luZy5jb25maWcuZGljdENvbmZpZ2AgZm9yIHNwZWNpZnlpbmcgbG9nZ2luZyBjb25maWd1cmF0aW9uIHdpdGgKK3BsYWluIFB5dGhvbiBkaWN0aW9uYXJpZXMuICBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGUgZm9ybWF0dGVycywKK2hhbmRsZXJzLCBmaWx0ZXJzLCBhbmQgbG9nZ2Vycy4gIEhlcmUncyBhIHdvcmtpbmcgZXhhbXBsZSBvZiBhIGNvbmZpZ3VyYXRpb24KK2RpY3Rpb25hcnk6OgorCisgICB7InZlcnNpb24iOiAxLAorICAgICJmb3JtYXR0ZXJzIjogeyJicmllZiI6IHsiZm9ybWF0IjogIiUobGV2ZWxuYW1lKS04czogJShuYW1lKS0xNXM6ICUobWVzc2FnZSlzIn0sCisgICAgICAgICAgICAgICAgICAgImZ1bGwiOiB7ImZvcm1hdCI6ICIlKGFzY3RpbWUpcyAlKG5hbWUpLTE1cyAlKGxldmVsbmFtZSktOHMgJShtZXNzYWdlKXMifQorICAgICAgICAgICAgICAgICAgIH0sCisgICAgImhhbmRsZXJzIjogeyJjb25zb2xlIjogeworICAgICAgICAgICAgICAgICAgICAgICJjbGFzcyI6ICJsb2dnaW5nLlN0cmVhbUhhbmRsZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXR0ZXIiOiAiYnJpZWYiLAorICAgICAgICAgICAgICAgICAgICAgICJsZXZlbCI6ICJJTkZPIiwKKyAgICAgICAgICAgICAgICAgICAgICAic3RyZWFtIjogImV4dDovL3N5cy5zdGRvdXQifSwKKyAgICAgICAgICAgICAgICAgImNvbnNvbGVfcHJpb3JpdHkiOiB7CisgICAgICAgICAgICAgICAgICAgICAgImNsYXNzIjogImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsCisgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdHRlciI6ICJmdWxsIiwKKyAgICAgICAgICAgICAgICAgICAgICAibGV2ZWwiOiAiRVJST1IiLAorICAgICAgICAgICAgICAgICAgICAgICJzdHJlYW0iOiAiZXh0Oi8vc3lzLnN0ZGVyciJ9CisgICAgICAgICAgICAgICAgIH0sCisgICAgInJvb3QiOiB7ImxldmVsIjogIkRFQlVHIiwgImhhbmRsZXJzIjogWyJjb25zb2xlIiwgImNvbnNvbGVfcHJpb3JpdHkiXX19CisKKworSWYgdGhhdCBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBpbiBhIGZpbGUgY2FsbGVkIDpmaWxlOmBjb25mLmpzb25gLCBpdCBjYW4gYmUKK2xvYWRlZCBhbmQgY2FsbGVkIHdpdGggY29kZSBsaWtlIHRoaXM6OgorCisgICA+Pj4gaW1wb3J0IGpzb24sIGxvZ2dpbmcuY29uZmlnCisgICA+Pj4gd2l0aCBvcGVuKCdjb25mLmpzb24nKSBhcyBmOgorICAgICAgICAgICBjb25mID0ganNvbi5sb2FkKGYpCisgICA+Pj4gbG9nZ2luZy5jb25maWcuZGljdENvbmZpZyhjb25mKQorICAgPj4+IGxvZ2dpbmcuaW5mbygiVHJhbnNhY3Rpb24gY29tcGxldGVkIG5vcm1hbGx5IikKKyAgIElORk8gICAgOiByb290ICAgICAgICAgICA6IFRyYW5zYWN0aW9uIGNvbXBsZXRlZCBub3JtYWxseQorICAgPj4+IGxvZ2dpbmcuY3JpdGljYWwoIkFibm9ybWFsIHRlcm1pbmF0aW9uIikKKyAgIDIwMTEtMDItMTcgMTE6MTQ6MzYsNjk0IHJvb3QgICAgICAgICAgICBDUklUSUNBTCBBYm5vcm1hbCB0ZXJtaW5hdGlvbgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzkxYCAtIERpY3Rpb25hcnkgQmFzZWQgQ29uZmlndXJhdGlvbiBmb3IgTG9nZ2luZworICAgICAgUEVQIHdyaXR0ZW4gYnkgVmluYXkgU2FqaXAuCisKKworUEVQIDMxNDg6ICBUaGUgYGBjb25jdXJyZW50LmZ1dHVyZXNgYCBtb2R1bGUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvZGUgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBjb25jdXJyZW5jeSBpcyBiZWluZyBjb2xsZWN0ZWQgaW4gYSBuZXcgdG9wLWxldmVsCituYW1lc3BhY2UsICpjb25jdXJyZW50Ki4gIEl0cyBmaXJzdCBtZW1iZXIgaXMgYSAqZnV0dXJlcyogcGFja2FnZSB3aGljaCBwcm92aWRlcworYSB1bmlmb3JtIGhpZ2gtbGV2ZWwgaW50ZXJmYWNlIGZvciBtYW5hZ2luZyB0aHJlYWRzIGFuZCBwcm9jZXNzZXMuCisKK1RoZSBkZXNpZ24gZm9yIDptb2Q6YGNvbmN1cnJlbnQuZnV0dXJlc2Agd2FzIGluc3BpcmVkIGJ5CisqamF2YS51dGlsLmNvbmN1cnJlbnQucGFja2FnZSouICBJbiB0aGF0IG1vZGVsLCBhIHJ1bm5pbmcgY2FsbCBhbmQgaXRzIHJlc3VsdAorYXJlIHJlcHJlc2VudGVkIGJ5IGEgOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAgb2JqZWN0IHRoYXQgYWJzdHJhY3RzCitmZWF0dXJlcyBjb21tb24gdG8gdGhyZWFkcywgcHJvY2Vzc2VzLCBhbmQgcmVtb3RlIHByb2NlZHVyZSBjYWxscy4gIFRoYXQgb2JqZWN0CitzdXBwb3J0cyBzdGF0dXMgY2hlY2tzIChydW5uaW5nIG9yIGRvbmUpLCB0aW1lb3V0cywgY2FuY2VsbGF0aW9ucywgYWRkaW5nCitjYWxsYmFja3MsIGFuZCBhY2Nlc3MgdG8gcmVzdWx0cyBvciBleGNlcHRpb25zLgorCitUaGUgcHJpbWFyeSBvZmZlcmluZyBvZiB0aGUgbmV3IG1vZHVsZSBpcyBhIHBhaXIgb2YgZXhlY3V0b3IgY2xhc3NlcyBmb3IKK2xhdW5jaGluZyBhbmQgbWFuYWdpbmcgY2FsbHMuICBUaGUgZ29hbCBvZiB0aGUgZXhlY3V0b3JzIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvCit1c2UgZXhpc3RpbmcgdG9vbHMgZm9yIG1ha2luZyBwYXJhbGxlbCBjYWxscy4gVGhleSBzYXZlIHRoZSBlZmZvcnQgbmVlZGVkIHRvCitzZXR1cCBhIHBvb2wgb2YgcmVzb3VyY2VzLCBsYXVuY2ggdGhlIGNhbGxzLCBjcmVhdGUgYSByZXN1bHRzIHF1ZXVlLCBhZGQKK3RpbWUtb3V0IGhhbmRsaW5nLCBhbmQgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiB0aHJlYWRzLCBwcm9jZXNzZXMsIG9yIHJlbW90ZQorcHJvY2VkdXJlIGNhbGxzLgorCitJZGVhbGx5LCBlYWNoIGFwcGxpY2F0aW9uIHNob3VsZCBzaGFyZSBhIHNpbmdsZSBleGVjdXRvciBhY3Jvc3MgbXVsdGlwbGUKK2NvbXBvbmVudHMgc28gdGhhdCBwcm9jZXNzIGFuZCB0aHJlYWQgbGltaXRzIGNhbiBiZSBjZW50cmFsbHkgbWFuYWdlZC4gIFRoaXMKK3NvbHZlcyB0aGUgZGVzaWduIGNoYWxsZW5nZSB0aGF0IGFyaXNlcyB3aGVuIGVhY2ggY29tcG9uZW50IGhhcyBpdHMgb3duCitjb21wZXRpbmcgc3RyYXRlZ3kgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQuCisKK0JvdGggY2xhc3NlcyBzaGFyZSBhIGNvbW1vbiBpbnRlcmZhY2Ugd2l0aCB0aHJlZSBtZXRob2RzOgorOm1ldGg6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3Iuc3VibWl0YCBmb3Igc2NoZWR1bGluZyBhIGNhbGxhYmxlIGFuZAorcmV0dXJuaW5nIGEgOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAgb2JqZWN0OworOm1ldGg6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3IubWFwYCBmb3Igc2NoZWR1bGluZyBtYW55IGFzeW5jaHJvbm91cyBjYWxscworYXQgYSB0aW1lLCBhbmQgOm1ldGg6YH5jb25jdXJyZW50LmZ1dHVyZXMuRXhlY3V0b3Iuc2h1dGRvd25gIGZvciBmcmVlaW5nCityZXNvdXJjZXMuICBUaGUgY2xhc3MgaXMgYSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBhbmQgY2FuIGJlIHVzZWQgaW4gYQorOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0byBhc3N1cmUgdGhhdCByZXNvdXJjZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVsZWFzZWQKK3doZW4gY3VycmVudGx5IHBlbmRpbmcgZnV0dXJlcyBhcmUgZG9uZSBleGVjdXRpbmcuCisKK0Egc2ltcGxlIG9mIGV4YW1wbGUgb2YgOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcmAgaXMgYQorbGF1bmNoIG9mIGZvdXIgcGFyYWxsZWwgdGhyZWFkcyBmb3IgY29weWluZyBmaWxlczo6CisKKyAgaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcywgc2h1dGlsCisgIHdpdGggY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz00KSBhcyBlOgorICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMxLnR4dCcsICdkZXN0MS50eHQnKQorICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMyLnR4dCcsICdkZXN0Mi50eHQnKQorICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMzLnR4dCcsICdkZXN0My50eHQnKQorICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmM0LnR4dCcsICdkZXN0NC50eHQnKQorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgMzE0OGAgLSBGdXR1cmVzIC0tIEV4ZWN1dGUgQ29tcHV0YXRpb25zIEFzeW5jaHJvbm91c2x5CisgICAgICBQRVAgd3JpdHRlbiBieSBCcmlhbiBRdWlubGFuLgorCisgICA6cmVmOmBDb2RlIGZvciBUaHJlYWRlZCBQYXJhbGxlbCBVUkwgcmVhZHM8dGhyZWFkcG9vbGV4ZWN1dG9yLWV4YW1wbGU+YCwgYW4KKyAgIGV4YW1wbGUgdXNpbmcgdGhyZWFkcyB0byBmZXRjaCBtdWx0aXBsZSB3ZWIgcGFnZXMgaW4gcGFyYWxsZWwuCisKKyAgIDpyZWY6YENvZGUgZm9yIGNvbXB1dGluZyBwcmltZSBudW1iZXJzIGluCisgICBwYXJhbGxlbDxwcm9jZXNzcG9vbGV4ZWN1dG9yLWV4YW1wbGU+YCwgYW4gZXhhbXBsZSBkZW1vbnN0cmF0aW5nCisgICA6Y2xhc3M6YH5jb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcmAuCisKKworUEVQIDMxNDc6ICBQWUMgUmVwb3NpdG9yeSBEaXJlY3RvcmllcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24ncyBzY2hlbWUgZm9yIGNhY2hpbmcgYnl0ZWNvZGUgaW4gKi5weWMqIGZpbGVzIGRpZCBub3Qgd29yayB3ZWxsIGluCitlbnZpcm9ubWVudHMgd2l0aCBtdWx0aXBsZSBQeXRob24gaW50ZXJwcmV0ZXJzLiAgSWYgb25lIGludGVycHJldGVyIGVuY291bnRlcmVkCithIGNhY2hlZCBmaWxlIGNyZWF0ZWQgYnkgYW5vdGhlciBpbnRlcnByZXRlciwgaXQgd291bGQgcmVjb21waWxlIHRoZSBzb3VyY2UgYW5kCitvdmVyd3JpdGUgdGhlIGNhY2hlZCBmaWxlLCB0aHVzIGxvc2luZyB0aGUgYmVuZWZpdHMgb2YgY2FjaGluZy4KKworVGhlIGlzc3VlIG9mICJweWMgZmlnaHRzIiBoYXMgYmVjb21lIG1vcmUgcHJvbm91bmNlZCBhcyBpdCBoYXMgYmVjb21lCitjb21tb25wbGFjZSBmb3IgTGludXggZGlzdHJpYnV0aW9ucyB0byBzaGlwIHdpdGggbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uLgorVGhlc2UgY29uZmxpY3RzIGFsc28gYXJpc2Ugd2l0aCBDUHl0aG9uIGFsdGVybmF0aXZlcyBzdWNoIGFzIFVubGFkZW4gU3dhbGxvdy4KKworVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBQeXRob24ncyBpbXBvcnQgbWFjaGluZXJ5IGhhcyBiZWVuIGV4dGVuZGVkIHRvIHVzZQorZGlzdGluY3QgZmlsZW5hbWVzIGZvciBlYWNoIGludGVycHJldGVyLiAgSW5zdGVhZCBvZiBQeXRob24gMy4yIGFuZCBQeXRob24gMy4zIGFuZAorVW5sYWRlbiBTd2FsbG93IGVhY2ggY29tcGV0aW5nIGZvciBhIGZpbGUgY2FsbGVkICJteW1vZHVsZS5weWMiLCB0aGV5IHdpbGwgbm93Citsb29rIGZvciAibXltb2R1bGUuY3B5dGhvbi0zMi5weWMiLCAibXltb2R1bGUuY3B5dGhvbi0zMy5weWMiLCBhbmQKKyJteW1vZHVsZS51bmxhZGVuMTAucHljIi4gIEFuZCB0byBwcmV2ZW50IGFsbCBvZiB0aGVzZSBuZXcgZmlsZXMgZnJvbQorY2x1dHRlcmluZyBzb3VyY2UgZGlyZWN0b3JpZXMsIHRoZSAqcHljKiBmaWxlcyBhcmUgbm93IGNvbGxlY3RlZCBpbiBhCisiX19weWNhY2hlX18iIGRpcmVjdG9yeSBzdG9yZWQgdW5kZXIgdGhlIHBhY2thZ2UgZGlyZWN0b3J5LgorCitBc2lkZSBmcm9tIHRoZSBmaWxlbmFtZXMgYW5kIHRhcmdldCBkaXJlY3RvcmllcywgdGhlIG5ldyBzY2hlbWUgaGFzIGEgZmV3Cithc3BlY3RzIHRoYXQgYXJlIHZpc2libGUgdG8gdGhlIHByb2dyYW1tZXI6CisKKyogSW1wb3J0ZWQgbW9kdWxlcyBub3cgaGF2ZSBhIDphdHRyOmBfX2NhY2hlZF9fYCBhdHRyaWJ1dGUgd2hpY2ggc3RvcmVzIHRoZSBuYW1lCisgIG9mIHRoZSBhY3R1YWwgZmlsZSB0aGF0IHdhcyBpbXBvcnRlZDoKKworICAgPj4+IGltcG9ydCBjb2xsZWN0aW9ucworICAgPj4+IGNvbGxlY3Rpb25zLl9fY2FjaGVkX18KKyAgICdjOi9weTMyL2xpYi9fX3B5Y2FjaGVfXy9jb2xsZWN0aW9ucy5jcHl0aG9uLTMyLnB5YycKKworKiBUaGUgdGFnIHRoYXQgaXMgdW5pcXVlIHRvIGVhY2ggaW50ZXJwcmV0ZXIgaXMgYWNjZXNzaWJsZSBmcm9tIHRoZSA6bW9kOmBpbXBgCisgIG1vZHVsZToKKworICAgPj4+IGltcG9ydCBpbXAKKyAgID4+PiBpbXAuZ2V0X3RhZygpCisgICAnY3B5dGhvbi0zMicKKworKiBTY3JpcHRzIHRoYXQgdHJ5IHRvIGRlZHVjZSBzb3VyY2UgZmlsZW5hbWUgZnJvbSB0aGUgaW1wb3J0ZWQgZmlsZSBub3cgbmVlZCB0bworICBiZSBzbWFydGVyLiAgSXQgaXMgbm8gbG9uZ2VyIHN1ZmZpY2llbnQgdG8gc2ltcGx5IHN0cmlwIHRoZSAiYyIgZnJvbSBhICIucHljIgorICBmaWxlbmFtZS4gIEluc3RlYWQsIHVzZSB0aGUgbmV3IGZ1bmN0aW9ucyBpbiB0aGUgOm1vZDpgaW1wYCBtb2R1bGU6CisKKyAgPj4+IGltcC5zb3VyY2VfZnJvbV9jYWNoZSgnYzovcHkzMi9saWIvX19weWNhY2hlX18vY29sbGVjdGlvbnMuY3B5dGhvbi0zMi5weWMnKQorICAnYzovcHkzMi9saWIvY29sbGVjdGlvbnMucHknCisgID4+PiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2M6L3B5MzIvbGliL2NvbGxlY3Rpb25zLnB5JykKKyAgJ2M6L3B5MzIvbGliL19fcHljYWNoZV9fL2NvbGxlY3Rpb25zLmNweXRob24tMzIucHljJworCisqIFRoZSA6bW9kOmBweV9jb21waWxlYCBhbmQgOm1vZDpgY29tcGlsZWFsbGAgbW9kdWxlcyBoYXZlIGJlZW4gdXBkYXRlZCB0bworICByZWZsZWN0IHRoZSBuZXcgbmFtaW5nIGNvbnZlbnRpb24gYW5kIHRhcmdldCBkaXJlY3RvcnkuICBUaGUgY29tbWFuZC1saW5lCisgIGludm9jYXRpb24gb2YgKmNvbXBpbGVhbGwqIGhhcyBuZXcgb3B0aW9uczogYGAtaWBgIGZvcgorICBzcGVjaWZ5aW5nIGEgbGlzdCBvZiBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gY29tcGlsZSBhbmQgYGAtYmBgIHdoaWNoIGNhdXNlcworICBieXRlY29kZSBmaWxlcyB0byBiZSB3cml0dGVuIHRvIHRoZWlyIGxlZ2FjeSBsb2NhdGlvbiByYXRoZXIgdGhhbgorICAqX19weWNhY2hlX18qLgorCisqIFRoZSA6bW9kOmBpbXBvcnRsaWIuYWJjYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCB3aXRoIG5ldyA6dGVybTpgYWJzdHJhY3QgYmFzZQorICBjbGFzc2VzIDxhYnN0cmFjdCBiYXNlIGNsYXNzPmAgZm9yIGxvYWRpbmcgYnl0ZWNvZGUgZmlsZXMuICBUaGUgb2Jzb2xldGUKKyAgQUJDcywgOmNsYXNzOmB+aW1wb3J0bGliLmFiYy5QeUxvYWRlcmAgYW5kCisgIDpjbGFzczpgfmltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXJgLCBoYXZlIGJlZW4gZGVwcmVjYXRlZCAoaW5zdHJ1Y3Rpb25zIG9uIGhvdworICB0byBzdGF5IFB5dGhvbiAzLjEgY29tcGF0aWJsZSBhcmUgaW5jbHVkZWQgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbikuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTQ3YCAtIFBZQyBSZXBvc2l0b3J5IERpcmVjdG9yaWVzCisgICAgICBQRVAgd3JpdHRlbiBieSBCYXJyeSBXYXJzYXcuCisKKworUEVQIDMxNDk6IEFCSSBWZXJzaW9uIFRhZ2dlZCAuc28gRmlsZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQWUMgcmVwb3NpdG9yeSBkaXJlY3RvcnkgYWxsb3dzIG11bHRpcGxlIGJ5dGVjb2RlIGNhY2hlIGZpbGVzIHRvIGJlCitjby1sb2NhdGVkLiAgVGhpcyBQRVAgaW1wbGVtZW50cyBhIHNpbWlsYXIgbWVjaGFuaXNtIGZvciBzaGFyZWQgb2JqZWN0IGZpbGVzIGJ5CitnaXZpbmcgdGhlbSBhIGNvbW1vbiBkaXJlY3RvcnkgYW5kIGRpc3RpbmN0IG5hbWVzIGZvciBlYWNoIHZlcnNpb24uCisKK1RoZSBjb21tb24gZGlyZWN0b3J5IGlzICJweXNoYXJlZCIgYW5kIHRoZSBmaWxlIG5hbWVzIGFyZSBtYWRlIGRpc3RpbmN0IGJ5CitpZGVudGlmeWluZyB0aGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIChzdWNoIGFzIENQeXRob24sIFB5UHksIEp5dGhvbiwgZXRjLiksIHRoZQorbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycywgYW5kIG9wdGlvbmFsIGJ1aWxkIGZsYWdzIChzdWNoIGFzICJkIiBmb3IKK2RlYnVnLCAibSIgZm9yIHB5bWFsbG9jLCAidSIgZm9yIHdpZGUtdW5pY29kZSkuICBGb3IgYW4gYXJiaXRyYXJ5IHBhY2thZ2UgImZvbyIsCit5b3UgbWF5IHNlZSB0aGVzZSBmaWxlcyB3aGVuIHRoZSBkaXN0cmlidXRpb24gcGFja2FnZSBpcyBpbnN0YWxsZWQ6OgorCisgICAvdXNyL3NoYXJlL3B5c2hhcmVkL2Zvby5jcHl0aG9uLTMybS5zbworICAgL3Vzci9zaGFyZS9weXNoYXJlZC9mb28uY3B5dGhvbi0zM21kLnNvCisKK0luIFB5dGhvbiBpdHNlbGYsIHRoZSB0YWdzIGFyZSBhY2Nlc3NpYmxlIGZyb20gZnVuY3Rpb25zIGluIHRoZSA6bW9kOmBzeXNjb25maWdgCittb2R1bGU6OgorCisgICA+Pj4gaW1wb3J0IHN5c2NvbmZpZworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU09BQkknKSAgICAjIGZpbmQgdGhlIHZlcnNpb24gdGFnCisgICAnY3B5dGhvbi0zMm11JworICAgPj4+IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSAgICAgICAjIGZpbmQgdGhlIGZ1bGwgZmlsZW5hbWUgZXh0ZW5zaW9uCisgICAnLmNweXRob24tMzJtdS5zbycKKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMxNDlgIC0gQUJJIFZlcnNpb24gVGFnZ2VkIC5zbyBGaWxlcworICAgICAgUEVQIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LgorCisKK1BFUCAzMzMzOiBQeXRob24gV2ViIFNlcnZlciBHYXRld2F5IEludGVyZmFjZSB2MS4wLjEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaW5mb3JtYXRpb25hbCBQRVAgY2xhcmlmaWVzIGhvdyBieXRlcy90ZXh0IGlzc3VlcyBhcmUgdG8gYmUgaGFuZGxlZCBieSB0aGUKK1dHU0kgcHJvdG9jb2wuICBUaGUgY2hhbGxlbmdlIGlzIHRoYXQgc3RyaW5nIGhhbmRsaW5nIGluIFB5dGhvbiAzIGlzIG1vc3QKK2NvbnZlbmllbnRseSBoYW5kbGVkIHdpdGggdGhlIDpjbGFzczpgc3RyYCB0eXBlIGV2ZW4gdGhvdWdoIHRoZSBIVFRQIHByb3RvY29sCitpcyBpdHNlbGYgYnl0ZXMgb3JpZW50ZWQuCisKK1RoZSBQRVAgZGlmZmVyZW50aWF0ZXMgc28tY2FsbGVkICpuYXRpdmUgc3RyaW5ncyogdGhhdCBhcmUgdXNlZCBmb3IKK3JlcXVlc3QvcmVzcG9uc2UgaGVhZGVycyBhbmQgbWV0YWRhdGEgdmVyc3VzICpieXRlIHN0cmluZ3MqIHdoaWNoIGFyZSB1c2VkIGZvcgordGhlIGJvZGllcyBvZiByZXF1ZXN0cyBhbmQgcmVzcG9uc2VzLgorCitUaGUgKm5hdGl2ZSBzdHJpbmdzKiBhcmUgYWx3YXlzIG9mIHR5cGUgOmNsYXNzOmBzdHJgIGJ1dCBhcmUgcmVzdHJpY3RlZCB0byBjb2RlCitwb2ludHMgYmV0d2VlbiAqVSswMDAwKiB0aHJvdWdoICpVKzAwRkYqIHdoaWNoIGFyZSB0cmFuc2xhdGFibGUgdG8gYnl0ZXMgdXNpbmcKKypMYXRpbi0xKiBlbmNvZGluZy4gIFRoZXNlIHN0cmluZ3MgYXJlIHVzZWQgZm9yIHRoZSBrZXlzIGFuZCB2YWx1ZXMgaW4gdGhlCitlbnZpcm9ubWVudCBkaWN0aW9uYXJ5IGFuZCBmb3IgcmVzcG9uc2UgaGVhZGVycyBhbmQgc3RhdHVzZXMgaW4gdGhlCis6ZnVuYzpgc3RhcnRfcmVzcG9uc2VgIGZ1bmN0aW9uLiAgVGhleSBtdXN0IGZvbGxvdyA6cmZjOmAyNjE2YCB3aXRoIHJlc3BlY3QgdG8KK2VuY29kaW5nLiBUaGF0IGlzLCB0aGV5IG11c3QgZWl0aGVyIGJlICpJU08tODg1OS0xKiBjaGFyYWN0ZXJzIG9yIHVzZQorOnJmYzpgMjA0N2AgTUlNRSBlbmNvZGluZy4KKworRm9yIGRldmVsb3BlcnMgcG9ydGluZyBXU0dJIGFwcGxpY2F0aW9ucyBmcm9tIFB5dGhvbiAyLCBoZXJlIGFyZSB0aGUgc2FsaWVudAorcG9pbnRzOgorCisqIElmIHRoZSBhcHAgYWxyZWFkeSB1c2VkIHN0cmluZ3MgZm9yIGhlYWRlcnMgaW4gUHl0aG9uIDIsIG5vIGNoYW5nZSBpcyBuZWVkZWQuCisKKyogSWYgaW5zdGVhZCwgdGhlIGFwcCBlbmNvZGVkIG91dHB1dCBoZWFkZXJzIG9yIGRlY29kZWQgaW5wdXQgaGVhZGVycywgdGhlbiB0aGUKKyAgaGVhZGVycyB3aWxsIG5lZWQgdG8gYmUgcmUtZW5jb2RlZCB0byBMYXRpbi0xLiAgRm9yIGV4YW1wbGUsIGFuIG91dHB1dCBoZWFkZXIKKyAgZW5jb2RlZCBpbiB1dGYtOCB3YXMgdXNpbmcgYGBoLmVuY29kZSgndXRmLTgnKWBgIG5vdyBuZWVkcyB0byBjb252ZXJ0IGZyb20KKyAgYnl0ZXMgdG8gbmF0aXZlIHN0cmluZ3MgdXNpbmcgYGBoLmVuY29kZSgndXRmLTgnKS5kZWNvZGUoJ2xhdGluLTEnKWBgLgorCisqIFZhbHVlcyB5aWVsZGVkIGJ5IGFuIGFwcGxpY2F0aW9uIG9yIHNlbnQgdXNpbmcgdGhlIDptZXRoOmB3cml0ZWAgbWV0aG9kCisgIG11c3QgYmUgYnl0ZSBzdHJpbmdzLiAgVGhlIDpmdW5jOmBzdGFydF9yZXNwb25zZWAgZnVuY3Rpb24gYW5kIGVudmlyb24KKyAgbXVzdCB1c2UgbmF0aXZlIHN0cmluZ3MuICBUaGUgdHdvIGNhbm5vdCBiZSBtaXhlZC4KKworRm9yIHNlcnZlciBpbXBsZW1lbnRlcnMgd3JpdGluZyBDR0ktdG8tV1NHSSBwYXRod2F5cyBvciBvdGhlciBDR0ktc3R5bGUKK3Byb3RvY29scywgdGhlIHVzZXJzIG11c3QgdG8gYmUgYWJsZSBhY2Nlc3MgdGhlIGVudmlyb25tZW50IHVzaW5nIG5hdGl2ZSBzdHJpbmdzCitldmVuIHRob3VnaCB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBtYXkgaGF2ZSBhIGRpZmZlcmVudCBjb252ZW50aW9uLiAgVG8gYnJpZGdlCit0aGlzIGdhcCwgdGhlIDptb2Q6YHdzZ2lyZWZgIG1vZHVsZSBoYXMgYSBuZXcgZnVuY3Rpb24sCis6ZnVuYzpgd3NnaXJlZi5oYW5kbGVycy5yZWFkX2Vudmlyb25gIGZvciB0cmFuc2NvZGluZyBDR0kgdmFyaWFibGVzIGZyb20KKzphdHRyOmBvcy5lbnZpcm9uYCBpbnRvIG5hdGl2ZSBzdHJpbmdzIGFuZCByZXR1cm5pbmcgYSBuZXcgZGljdGlvbmFyeS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpwZXA6YDMzMzNgIC0gUHl0aG9uIFdlYiBTZXJ2ZXIgR2F0ZXdheSBJbnRlcmZhY2UgdjEuMC4xCisgICAgICBQRVAgd3JpdHRlbiBieSBQaGlsbGlwIEVieS4KKworCitPdGhlciBMYW5ndWFnZSBDaGFuZ2VzCis9PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWUgc21hbGxlciBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvcmUgUHl0aG9uIGxhbmd1YWdlIGFyZToKKworKiBTdHJpbmcgZm9ybWF0dGluZyBmb3IgOmZ1bmM6YGZvcm1hdGAgYW5kIDptZXRoOmBzdHIuZm9ybWF0YCBnYWluZWQgbmV3CisgIGNhcGFiaWxpdGllcyBmb3IgdGhlIGZvcm1hdCBjaGFyYWN0ZXIgKiojKiouICBQcmV2aW91c2x5LCBmb3IgaW50ZWdlcnMgaW4KKyAgYmluYXJ5LCBvY3RhbCwgb3IgaGV4YWRlY2ltYWwsIGl0IGNhdXNlZCB0aGUgb3V0cHV0IHRvIGJlIHByZWZpeGVkIHdpdGggJzBiJywKKyAgJzBvJywgb3IgJzB4JyByZXNwZWN0aXZlbHkuICBOb3cgaXQgY2FuIGFsc28gaGFuZGxlIGZsb2F0cywgY29tcGxleCwgYW5kCisgIERlY2ltYWwsIGNhdXNpbmcgdGhlIG91dHB1dCB0byBhbHdheXMgaGF2ZSBhIGRlY2ltYWwgcG9pbnQgZXZlbiB3aGVuIG5vIGRpZ2l0cworICBmb2xsb3cgaXQuCisKKyAgPj4+IGZvcm1hdCgyMCwgJyNvJykKKyAgJzBvMjQnCisgID4+PiBmb3JtYXQoMTIuMzQsICcjNS4wZicpCisgICcgIDEyLicKKworICAoU3VnZ2VzdGVkIGJ5IE1hcmsgRGlja2luc29uIGFuZCBpbXBsZW1lbnRlZCBieSBFcmljIFNtaXRoIGluIDppc3N1ZTpgNzA5NGAuKQorCisqIFRoZXJlIGlzIGFsc28gYSBuZXcgOm1ldGg6YHN0ci5mb3JtYXRfbWFwYCBtZXRob2QgdGhhdCBleHRlbmRzIHRoZQorICBjYXBhYmlsaXRpZXMgb2YgdGhlIGV4aXN0aW5nIDptZXRoOmBzdHIuZm9ybWF0YCBtZXRob2QgYnkgYWNjZXB0aW5nIGFyYml0cmFyeQorICA6dGVybTpgbWFwcGluZ2Agb2JqZWN0cy4gIFRoaXMgbmV3IG1ldGhvZCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2Ugc3RyaW5nCisgIGZvcm1hdHRpbmcgd2l0aCBhbnkgb2YgUHl0aG9uJ3MgbWFueSBkaWN0aW9uYXJ5LWxpa2Ugb2JqZWN0cyBzdWNoIGFzCisgIDpjbGFzczpgfmNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0YCwgOmNsYXNzOmB+c2hlbHZlLlNoZWxmYCwKKyAgOmNsYXNzOmB+Y29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcmAsIG9yIDptb2Q6YGRibWAuICBJdCBpcyBhbHNvIHVzZWZ1bCB3aXRoCisgIGN1c3RvbSA6Y2xhc3M6YGRpY3RgIHN1YmNsYXNzZXMgdGhhdCBub3JtYWxpemUga2V5cyBiZWZvcmUgbG9vay11cCBvciB0aGF0CisgIHN1cHBseSBhIDptZXRoOmBfX21pc3NpbmdfX2AgbWV0aG9kIGZvciB1bmtub3duIGtleXM6OgorCisgICAgPj4+IGltcG9ydCBzaGVsdmUKKyAgICA+Pj4gZCA9IHNoZWx2ZS5vcGVuKCd0bXAuc2hsJykKKyAgICA+Pj4gJ1RoZSB7cHJvamVjdF9uYW1lfSBzdGF0dXMgaXMge3N0YXR1c30gYXMgb2Yge2RhdGV9Jy5mb3JtYXRfbWFwKGQpCisgICAgJ1RoZSB0ZXN0aW5nIHByb2plY3Qgc3RhdHVzIGlzIGdyZWVuIGFzIG9mIEZlYnJ1YXJ5IDE1LCAyMDExJworCisgICAgPj4+IGNsYXNzIExvd2VyQ2FzZWREaWN0KGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5Lmxvd2VyKCkpCisgICAgPj4+IGxjZCA9IExvd2VyQ2FzZWREaWN0KHBhcnQ9J3dpZGdldHMnLCBxdWFudGl0eT0xMCkKKyAgICA+Pj4gJ1RoZXJlIGFyZSB7UVVBTlRJVFl9IHtQYXJ0fSBpbiBzdG9jaycuZm9ybWF0X21hcChsY2QpCisgICAgJ1RoZXJlIGFyZSAxMCB3aWRnZXRzIGluIHN0b2NrJworCisgICAgPj4+IGNsYXNzIFBsYWNlaG9sZGVyRGljdChkaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAnPHt9PicuZm9ybWF0KGtleSkKKyAgICA+Pj4gJ0hlbGxvIHtuYW1lfSwgd2VsY29tZSB0byB7bG9jYXRpb259Jy5mb3JtYXRfbWFwKFBsYWNlaG9sZGVyRGljdCgpKQorICAgICdIZWxsbyA8bmFtZT4sIHdlbGNvbWUgdG8gPGxvY2F0aW9uPicKKworIChTdWdnZXN0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYW5kIGltcGxlbWVudGVkIGJ5IEVyaWMgU21pdGggaW4KKyA6aXNzdWU6YDYwODFgLikKKworKiBUaGUgaW50ZXJwcmV0ZXIgY2FuIG5vdyBiZSBzdGFydGVkIHdpdGggYSBxdWlldCBvcHRpb24sIGBgLXFgYCwgdG8gcHJldmVudAorICB0aGUgY29weXJpZ2h0IGFuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gYmVpbmcgZGlzcGxheWVkIGluIHRoZSBpbnRlcmFjdGl2ZQorICBtb2RlLiAgVGhlIG9wdGlvbiBjYW4gYmUgaW50cm9zcGVjdGVkIHVzaW5nIHRoZSA6YXR0cjpgc3lzLmZsYWdzYCBhdHRyaWJ1dGU6OgorCisgICAgJCBweXRob24gLXEKKyAgICA+Pj4gc3lzLmZsYWdzCisgICAgc3lzLmZsYWdzKGRlYnVnPTAsIGRpdmlzaW9uX3dhcm5pbmc9MCwgaW5zcGVjdD0wLCBpbnRlcmFjdGl2ZT0wLAorICAgIG9wdGltaXplPTAsIGRvbnRfd3JpdGVfYnl0ZWNvZGU9MCwgbm9fdXNlcl9zaXRlPTAsIG5vX3NpdGU9MCwKKyAgICBpZ25vcmVfZW52aXJvbm1lbnQ9MCwgdmVyYm9zZT0wLCBieXRlc193YXJuaW5nPTAsIHF1aWV0PTEpCisKKyAgKENvbnRyaWJ1dGVkIGJ5IE1hcmNpbiBXb2pkeXIgaW4gOmlzc3VlOmAxNzcyODMzYCkuCisKKyogVGhlIDpmdW5jOmBoYXNhdHRyYCBmdW5jdGlvbiB3b3JrcyBieSBjYWxsaW5nIDpmdW5jOmBnZXRhdHRyYCBhbmQgZGV0ZWN0aW5nCisgIHdoZXRoZXIgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4gIFRoaXMgdGVjaG5pcXVlIGFsbG93cyBpdCB0byBkZXRlY3QgbWV0aG9kcworICBjcmVhdGVkIGR5bmFtaWNhbGx5IGJ5IDptZXRoOmBfX2dldGF0dHJfX2Agb3IgOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gIHdoaWNoCisgIHdvdWxkIG90aGVyd2lzZSBiZSBhYnNlbnQgZnJvbSB0aGUgY2xhc3MgZGljdGlvbmFyeS4gIEZvcm1lcmx5LCAqaGFzYXR0cioKKyAgd291bGQgY2F0Y2ggYW55IGV4Y2VwdGlvbiwgcG9zc2libHkgbWFza2luZyBnZW51aW5lIGVycm9ycy4gIE5vdywgKmhhc2F0dHIqCisgIGhhcyBiZWVuIHRpZ2h0ZW5lZCB0byBvbmx5IGNhdGNoIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBhbmQgbGV0IG90aGVyCisgIGV4Y2VwdGlvbnMgcGFzcyB0aHJvdWdoOjoKKworICAgID4+PiBjbGFzcyBBOgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgZihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMSAvLyAwCisKKyAgICA+Pj4gYSA9IEEoKQorICAgID4+PiBoYXNhdHRyKGEsICdmJykKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBaZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybworCisgIChEaXNjb3ZlcmVkIGJ5IFl1cnkgU2VsaXZhbm92IGFuZCBmaXhlZCBieSBCZW5qYW1pbiBQZXRlcnNvbjsgOmlzc3VlOmA5NjY2YC4pCisKKyogVGhlIDpmdW5jOmBzdHJgIG9mIGEgZmxvYXQgb3IgY29tcGxleCBudW1iZXIgaXMgbm93IHRoZSBzYW1lIGFzIGl0cworICA6ZnVuYzpgcmVwcmAuIFByZXZpb3VzbHksIHRoZSA6ZnVuYzpgc3RyYCBmb3JtIHdhcyBzaG9ydGVyIGJ1dCB0aGF0IGp1c3QKKyAgY2F1c2VkIGNvbmZ1c2lvbiBhbmQgaXMgbm8gbG9uZ2VyIG5lZWRlZCBub3cgdGhhdCB0aGUgc2hvcnRlc3QgcG9zc2libGUKKyAgOmZ1bmM6YHJlcHJgIGlzIGRpc3BsYXllZCBieSBkZWZhdWx0OgorCisgICA+Pj4gaW1wb3J0IG1hdGgKKyAgID4+PiByZXByKG1hdGgucGkpCisgICAnMy4xNDE1OTI2NTM1ODk3OTMnCisgICA+Pj4gc3RyKG1hdGgucGkpCisgICAnMy4xNDE1OTI2NTM1ODk3OTMnCisKKyAgKFByb3Bvc2VkIGFuZCBpbXBsZW1lbnRlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmA5MzM3YC4pCisKKyogOmNsYXNzOmBtZW1vcnl2aWV3YCBvYmplY3RzIG5vdyBoYXZlIGEgOm1ldGg6YH5tZW1vcnl2aWV3LnJlbGVhc2UoKWAgbWV0aG9kCisgIGFuZCB0aGV5IGFsc28gbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4gIFRoaXMgYWxsb3dzIHRpbWVseQorICByZWxlYXNlIG9mIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGFjcXVpcmVkIHdoZW4gcmVxdWVzdGluZyBhIGJ1ZmZlciBmcm9tIHRoZQorICBvcmlnaW5hbCBvYmplY3QuCisKKyAgPj4+IHdpdGggbWVtb3J5dmlldyhiJ2FiY2RlZmdoJykgYXMgdjoKKyAgICAgICAgICBwcmludCh2LnRvbGlzdCgpKQorICBbOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDRdCisKKyAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDk3NTdgLikKKworKiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWUgZnJvbSB0aGUgbG9jYWwgbmFtZXNwYWNlIGlmIGl0CisgIG9jY3VycyBhcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWQgYmxvY2s6OgorCisgICAgICAgZGVmIG91dGVyKHgpOgorICAgICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgaW5uZXIoKQorICAgICAgICAgICBkZWwgeAorCisgIFRoaXMgaXMgbm93IGFsbG93ZWQuICBSZW1lbWJlciB0aGF0IHRoZSB0YXJnZXQgb2YgYW4gOmtleXdvcmQ6YGV4Y2VwdGAgY2xhdXNlCisgIGlzIGNsZWFyZWQsIHNvIHRoaXMgY29kZSB3aGljaCB1c2VkIHRvIHdvcmsgd2l0aCBQeXRob24gMi42LCByYWlzZWQgYQorICA6ZXhjOmBTeW50YXhFcnJvcmAgd2l0aCBQeXRob24gMy4xIGFuZCBub3cgd29ya3MgYWdhaW46OgorCisgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgZGVmIHByaW50X2Vycm9yKCk6CisgICAgICAgICAgICAgIHByaW50KGUpCisgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgc29tZXRoaW5nCisgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoKQorICAgICAgICAgICAgICAjIGltcGxpY2l0ICJkZWwgZSIgaGVyZQorCisgIChTZWUgOmlzc3VlOmA0NjE3YC4pCisKKyogVGhlIGludGVybmFsIDpjOnR5cGU6YHN0cnVjdHNlcXVlbmNlYCB0b29sIG5vdyBjcmVhdGVzIHN1YmNsYXNzZXMgb2YgdHVwbGUuCisgIFRoaXMgbWVhbnMgdGhhdCBDIHN0cnVjdHVyZXMgbGlrZSB0aG9zZSByZXR1cm5lZCBieSA6ZnVuYzpgb3Muc3RhdGAsCisgIDpmdW5jOmB0aW1lLmdtdGltZWAsIGFuZCA6YXR0cjpgc3lzLnZlcnNpb25faW5mb2Agbm93IHdvcmsgbGlrZSBhCisgIDp0ZXJtOmBuYW1lZCB0dXBsZWAgYW5kIG5vdyB3b3JrIHdpdGggZnVuY3Rpb25zIGFuZCBtZXRob2RzIHRoYXQKKyAgZXhwZWN0IGEgdHVwbGUgYXMgYW4gYXJndW1lbnQuICBUaGlzIGlzIGEgYmlnIHN0ZXAgZm9yd2FyZCBpbiBtYWtpbmcgdGhlIEMKKyAgc3RydWN0dXJlcyBhcyBmbGV4aWJsZSBhcyB0aGVpciBwdXJlIFB5dGhvbiBjb3VudGVycGFydHM6CisKKyAgPj4+IGlzaW5zdGFuY2Uoc3lzLnZlcnNpb25faW5mbywgdHVwbGUpCisgIFRydWUKKyAgPj4+ICdWZXJzaW9uICVkLiVkLiVkICVzKCVkKScgJSBzeXMudmVyc2lvbl9pbmZvCisgICdWZXJzaW9uIDMuMi4wIGZpbmFsKDApJworCisgIChTdWdnZXN0ZWQgYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMgYW5kIGltcGxlbWVudGVkCisgIGJ5IEJlbmphbWluIFBldGVyc29uIGluIDppc3N1ZTpgODQxM2AuKQorCisqIFdhcm5pbmdzIGFyZSBub3cgZWFzaWVyIHRvIGNvbnRyb2wgdXNpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAorICBlbnZpcm9ubWVudCB2YXJpYWJsZSBhcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBgYC1XYGAgYXQgdGhlIGNvbW1hbmQgbGluZTo6CisKKyAgICAkIGV4cG9ydCBQWVRIT05XQVJOSU5HUz0naWdub3JlOjpSdW50aW1lV2FybmluZzo6LG9uY2U6OlVuaWNvZGVXYXJuaW5nOjonCisKKyAgKFN1Z2dlc3RlZCBieSBCYXJyeSBXYXJzYXcgYW5kIGltcGxlbWVudGVkIGJ5IFBoaWxpcCBKZW52ZXkgaW4gOmlzc3VlOmA3MzAxYC4pCisKKyogQSBuZXcgd2FybmluZyBjYXRlZ29yeSwgOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCwgaGFzIGJlZW4gYWRkZWQuICBJdCBpcworICBlbWl0dGVkIHdoZW4gcG90ZW50aWFsIGlzc3VlcyB3aXRoIHJlc291cmNlIGNvbnN1bXB0aW9uIG9yIGNsZWFudXAKKyAgYXJlIGRldGVjdGVkLiAgSXQgaXMgc2lsZW5jZWQgYnkgZGVmYXVsdCBpbiBub3JtYWwgcmVsZWFzZSBidWlsZHMgYnV0CisgIGNhbiBiZSBlbmFibGVkIHRocm91Z2ggdGhlIG1lYW5zIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB3YXJuaW5nc2AKKyAgbW9kdWxlLCBvciBvbiB0aGUgY29tbWFuZCBsaW5lLgorCisgIEEgOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCBpcyBpc3N1ZWQgYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaWYgdGhlCisgIDpkYXRhOmBnYy5nYXJiYWdlYCBsaXN0IGlzbid0IGVtcHR5LCBhbmQgaWYgOmF0dHI6YGdjLkRFQlVHX1VOQ09MTEVDVEFCTEVgIGlzCisgIHNldCwgYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cyBhcmUgcHJpbnRlZC4gIFRoaXMgaXMgbWVhbnQgdG8gbWFrZSB0aGUKKyAgcHJvZ3JhbW1lciBhd2FyZSB0aGF0IHRoZWlyIGNvZGUgY29udGFpbnMgb2JqZWN0IGZpbmFsaXphdGlvbiBpc3N1ZXMuCisKKyAgQSA6ZXhjOmBSZXNvdXJjZVdhcm5pbmdgIGlzIGFsc28gaXNzdWVkIHdoZW4gYSA6dGVybTpgZmlsZSBvYmplY3RgIGlzIGRlc3Ryb3llZAorICB3aXRob3V0IGhhdmluZyBiZWVuIGV4cGxpY2l0bHkgY2xvc2VkLiAgV2hpbGUgdGhlIGRlYWxsb2NhdG9yIGZvciBzdWNoCisgIG9iamVjdCBlbnN1cmVzIGl0IGNsb3NlcyB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIHJlc291cmNlCisgICh1c3VhbGx5LCBhIGZpbGUgZGVzY3JpcHRvciksIHRoZSBkZWxheSBpbiBkZWFsbG9jYXRpbmcgdGhlIG9iamVjdCBjb3VsZAorICBwcm9kdWNlIHZhcmlvdXMgaXNzdWVzLCBlc3BlY2lhbGx5IHVuZGVyIFdpbmRvd3MuICBIZXJlIGlzIGFuIGV4YW1wbGUKKyAgb2YgZW5hYmxpbmcgdGhlIHdhcm5pbmcgZnJvbSB0aGUgY29tbWFuZCBsaW5lOjoKKworICAgICAgJCBweXRob24gLXEgLVdkZWZhdWx0CisgICAgICA+Pj4gZiA9IG9wZW4oImZvbyIsICJ3YiIpCisgICAgICA+Pj4gZGVsIGYKKyAgICAgIF9fbWFpbl9fOjE6IFJlc291cmNlV2FybmluZzogdW5jbG9zZWQgZmlsZSA8X2lvLkJ1ZmZlcmVkV3JpdGVyIG5hbWU9J2Zvbyc+CisKKyAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBHZW9yZyBCcmFuZGwgaW4gOmlzc3VlOmAxMDA5M2AgYW5kIDppc3N1ZTpgNDc3ODYzYC4pCisKKyogOmNsYXNzOmByYW5nZWAgb2JqZWN0cyBub3cgc3VwcG9ydCAqaW5kZXgqIGFuZCAqY291bnQqIG1ldGhvZHMuIFRoaXMgaXMgcGFydAorICBvZiBhbiBlZmZvcnQgdG8gbWFrZSBtb3JlIG9iamVjdHMgZnVsbHkgaW1wbGVtZW50IHRoZQorICA6Y2xhc3M6YGNvbGxlY3Rpb25zLlNlcXVlbmNlYCA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AuICBBcyBhIHJlc3VsdCwgdGhlCisgIGxhbmd1YWdlIHdpbGwgaGF2ZSBhIG1vcmUgdW5pZm9ybSBBUEkuICBJbiBhZGRpdGlvbiwgOmNsYXNzOmByYW5nZWAgb2JqZWN0cworICBub3cgc3VwcG9ydCBzbGljaW5nIGFuZCBuZWdhdGl2ZSBpbmRpY2VzLCBldmVuIHdpdGggdmFsdWVzIGxhcmdlciB0aGFuCisgIDphdHRyOmBzeXMubWF4c2l6ZWAuICBUaGlzIG1ha2VzICpyYW5nZSogbW9yZSBpbnRlcm9wZXJhYmxlIHdpdGggbGlzdHM6OgorCisgICAgICA+Pj4gcmFuZ2UoMCwgMTAwLCAyKS5jb3VudCgxMCkKKyAgICAgIDEKKyAgICAgID4+PiByYW5nZSgwLCAxMDAsIDIpLmluZGV4KDEwKQorICAgICAgNQorICAgICAgPj4+IHJhbmdlKDAsIDEwMCwgMilbNV0KKyAgICAgIDEwCisgICAgICA+Pj4gcmFuZ2UoMCwgMTAwLCAyKVswOjVdCisgICAgICByYW5nZSgwLCAxMCwgMikKKworICAoQ29udHJpYnV0ZWQgYnkgRGFuaWVsIFN0dXR6YmFjaCBpbiA6aXNzdWU6YDkyMTNgLCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreQorICBpbiA6aXNzdWU6YDI2OTBgLCBhbmQgYnkgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTA4ODlgLikKKworKiBUaGUgOmZ1bmM6YGNhbGxhYmxlYCBidWlsdGluIGZ1bmN0aW9uIGZyb20gUHkyLnggd2FzIHJlc3VycmVjdGVkLiAgSXQgcHJvdmlkZXMKKyAgYSBjb25jaXNlLCByZWFkYWJsZSBhbHRlcm5hdGl2ZSB0byB1c2luZyBhbiA6dGVybTpgYWJzdHJhY3QgYmFzZSBjbGFzc2AgaW4gYW4KKyAgZXhwcmVzc2lvbiBsaWtlIGBgaXNpbnN0YW5jZSh4LCBjb2xsZWN0aW9ucy5DYWxsYWJsZSlgYDoKKworICA+Pj4gY2FsbGFibGUobWF4KQorICBUcnVlCisgID4+PiBjYWxsYWJsZSgyMCkKKyAgRmFsc2UKKworICAoU2VlIDppc3N1ZTpgMTA1MThgLikKKworKiBQeXRob24ncyBpbXBvcnQgbWVjaGFuaXNtIGNhbiBub3cgbG9hZCBtb2R1bGVzIGluc3RhbGxlZCBpbiBkaXJlY3RvcmllcyB3aXRoCisgIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIHRoZSBwYXRoIG5hbWUuICBUaGlzIHNvbHZlZCBhbiBhZ2dyYXZhdGluZyBwcm9ibGVtCisgIHdpdGggaG9tZSBkaXJlY3RvcmllcyBmb3IgdXNlcnMgd2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBpbiB0aGVpciB1c2VybmFtZXMuCisKKyAoUmVxdWlyZWQgZXh0ZW5zaXZlIHdvcmsgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmA5NDI1YC4pCisKKworTmV3LCBJbXByb3ZlZCwgYW5kIERlcHJlY2F0ZWQgTW9kdWxlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24ncyBzdGFuZGFyZCBsaWJyYXJ5IGhhcyB1bmRlcmdvbmUgc2lnbmlmaWNhbnQgbWFpbnRlbmFuY2UgZWZmb3J0cyBhbmQKK3F1YWxpdHkgaW1wcm92ZW1lbnRzLgorCitUaGUgYmlnZ2VzdCBuZXdzIGZvciBQeXRob24gMy4yIGlzIHRoYXQgdGhlIDptb2Q6YGVtYWlsYCBwYWNrYWdlLCA6bW9kOmBtYWlsYm94YAorbW9kdWxlLCBhbmQgOm1vZDpgbm50cGxpYmAgbW9kdWxlcyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCB0aGUgYnl0ZXMvdGV4dCBtb2RlbAoraW4gUHl0aG9uIDMuICBGb3IgdGhlIGZpcnN0IHRpbWUsIHRoZXJlIGlzIGNvcnJlY3QgaGFuZGxpbmcgb2YgbWVzc2FnZXMgd2l0aAorbWl4ZWQgZW5jb2RpbmdzLgorCitUaHJvdWdob3V0IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCB0aGVyZSBoYXMgYmVlbiBtb3JlIGNhcmVmdWwgYXR0ZW50aW9uIHRvCitlbmNvZGluZ3MgYW5kIHRleHQgdmVyc3VzIGJ5dGVzIGlzc3Vlcy4gIEluIHBhcnRpY3VsYXIsIGludGVyYWN0aW9ucyB3aXRoIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBhcmUgbm93IGJldHRlciBhYmxlIHRvIGV4Y2hhbmdlIG5vbi1BU0NJSSBkYXRhIHVzaW5nIHRoZQorV2luZG93cyBNQkNTIGVuY29kaW5nLCBsb2NhbGUtYXdhcmUgZW5jb2RpbmdzLCBvciBVVEYtOC4KKworQW5vdGhlciBzaWduaWZpY2FudCB3aW4gaXMgdGhlIGFkZGl0aW9uIG9mIHN1YnN0YW50aWFsbHkgYmV0dGVyIHN1cHBvcnQgZm9yCisqU1NMKiBjb25uZWN0aW9ucyBhbmQgc2VjdXJpdHkgY2VydGlmaWNhdGVzLgorCitJbiBhZGRpdGlvbiwgbW9yZSBjbGFzc2VzIG5vdyBpbXBsZW1lbnQgYSA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCB0byBzdXBwb3J0Citjb252ZW5pZW50IGFuZCByZWxpYWJsZSByZXNvdXJjZSBjbGVhbi11cCB1c2luZyBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCisKK2VtYWlsCistLS0tLQorCitUaGUgdXNhYmlsaXR5IG9mIHRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSBpbiBQeXRob24gMyBoYXMgYmVlbiBtb3N0bHkgZml4ZWQgYnkKK3RoZSBleHRlbnNpdmUgZWZmb3J0cyBvZiBSLiBEYXZpZCBNdXJyYXkuICBUaGUgcHJvYmxlbSB3YXMgdGhhdCBlbWFpbHMgYXJlCit0eXBpY2FsbHkgcmVhZCBhbmQgc3RvcmVkIGluIHRoZSBmb3JtIG9mIDpjbGFzczpgYnl0ZXNgIHJhdGhlciB0aGFuIDpjbGFzczpgc3RyYAordGV4dCwgYW5kIHRoZXkgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZW5jb2RpbmdzIHdpdGhpbiBhIHNpbmdsZSBlbWFpbC4gIFNvLCB0aGUKK2VtYWlsIHBhY2thZ2UgaGFkIHRvIGJlIGV4dGVuZGVkIHRvIHBhcnNlIGFuZCBnZW5lcmF0ZSBlbWFpbCBtZXNzYWdlcyBpbiBieXRlcworZm9ybWF0LgorCisqIE5ldyBmdW5jdGlvbnMgOmZ1bmM6YH5lbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXNgIGFuZAorICA6ZnVuYzpgfmVtYWlsLm1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZWAsIGFuZCBuZXcgY2xhc3NlcworICA6Y2xhc3M6YH5lbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyYCBhbmQgOmNsYXNzOmB+ZW1haWwucGFyc2VyLkJ5dGVzUGFyc2VyYAorICBhbGxvdyBiaW5hcnkgbWVzc2FnZSBkYXRhIHRvIGJlIHBhcnNlZCBpbnRvIG1vZGVsIG9iamVjdHMuCisKKyogR2l2ZW4gYnl0ZXMgaW5wdXQgdG8gdGhlIG1vZGVsLCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfcGF5bG9hZGAKKyAgd2lsbCBieSBkZWZhdWx0IGRlY29kZSBhIG1lc3NhZ2UgYm9keSB0aGF0IGhhcyBhCisgIDptYWlsaGVhZGVyOmBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nYCBvZiAqOGJpdCogdXNpbmcgdGhlIGNoYXJzZXQKKyAgc3BlY2lmaWVkIGluIHRoZSBNSU1FIGhlYWRlcnMgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIHN0cmluZy4KKworKiBHaXZlbiBieXRlcyBpbnB1dCB0byB0aGUgbW9kZWwsIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3JgIHdpbGwKKyAgY29udmVydCBtZXNzYWdlIGJvZGllcyB0aGF0IGhhdmUgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2Agb2YKKyAgKjhiaXQqIHRvIGluc3RlYWQgaGF2ZSBhICo3Yml0KiA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2AuCisKKyAgSGVhZGVycyB3aXRoIHVuZW5jb2RlZCBub24tQVNDSUkgYnl0ZXMgYXJlIGRlZW1lZCB0byBiZSA6cmZjOmAyMDQ3YFwgLWVuY29kZWQKKyAgdXNpbmcgdGhlICp1bmtub3duLThiaXQqIGNoYXJhY3RlciBzZXQuCisKKyogQSBuZXcgY2xhc3MgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBwcm9kdWNlcyBieXRlcyBhcyBvdXRwdXQsCisgIHByZXNlcnZpbmcgYW55IHVuY2hhbmdlZCBub24tQVNDSUkgZGF0YSB0aGF0IHdhcyBwcmVzZW50IGluIHRoZSBpbnB1dCB1c2VkIHRvCisgIGJ1aWxkIHRoZSBtb2RlbCwgaW5jbHVkaW5nIG1lc3NhZ2UgYm9kaWVzIHdpdGggYQorICA6bWFpbGhlYWRlcjpgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZ2Agb2YgKjhiaXQqLgorCisqIFRoZSA6bW9kOmBzbXRwbGliYCA6Y2xhc3M6YH5zbXRwbGliLlNNVFBgIGNsYXNzIG5vdyBhY2NlcHRzIGEgYnl0ZSBzdHJpbmcKKyAgZm9yIHRoZSAqbXNnKiBhcmd1bWVudCB0byB0aGUgOm1ldGg6YH5zbXRwbGliLlNNVFAuc2VuZG1haWxgIG1ldGhvZCwKKyAgYW5kIGEgbmV3IG1ldGhvZCwgOm1ldGg6YH5zbXRwbGliLlNNVFAuc2VuZF9tZXNzYWdlYCBhY2NlcHRzIGEKKyAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3QgYW5kIGNhbiBvcHRpb25hbGx5IG9idGFpbiB0aGUKKyAgKmZyb21fYWRkciogYW5kICp0b19hZGRycyogYWRkcmVzc2VzIGRpcmVjdGx5IGZyb20gdGhlIG9iamVjdC4KKworKFByb3Bvc2VkIGFuZCBpbXBsZW1lbnRlZCBieSBSLiBEYXZpZCBNdXJyYXksIDppc3N1ZTpgNDY2MWAgYW5kIDppc3N1ZTpgMTAzMjFgLikKKworZWxlbWVudHRyZWUKKy0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIHBhY2thZ2UgYW5kIGl0cyA6bW9kOmB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlYAorY291bnRlcnBhcnQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gdmVyc2lvbiAxLjMuCisKK1NldmVyYWwgbmV3IGFuZCB1c2VmdWwgZnVuY3Rpb25zIGFuZCBtZXRob2RzIGhhdmUgYmVlbiBhZGRlZDoKKworKiA6ZnVuYzpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLmZyb21zdHJpbmdsaXN0YCB3aGljaCBidWlsZHMgYW4gWE1MIGRvY3VtZW50CisgIGZyb20gYSBzZXF1ZW5jZSBvZiBmcmFnbWVudHMKKyogOmZ1bmM6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2VgIGZvciByZWdpc3RlcmluZyBhIGdsb2JhbAorICBuYW1lc3BhY2UgcHJlZml4CisqIDpmdW5jOmB4bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0YCBmb3Igc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgIGluY2x1ZGluZyBhbGwgc3VibGlzdHMKKyogOm1ldGg6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50LmV4dGVuZGAgZm9yIGFwcGVuZGluZyBhIHNlcXVlbmNlIG9mIHplcm8KKyAgb3IgbW9yZSBlbGVtZW50cworKiA6bWV0aDpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnQuaXRlcmZpbmRgIHNlYXJjaGVzIGFuIGVsZW1lbnQgYW5kCisgIHN1YmVsZW1lbnRzCisqIDptZXRoOmB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudC5pdGVydGV4dGAgY3JlYXRlcyBhIHRleHQgaXRlcmF0b3Igb3ZlcgorICBhbiBlbGVtZW50IGFuZCBpdHMgc3ViZWxlbWVudHMKKyogOm1ldGg6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5UcmVlQnVpbGRlci5lbmRgIGNsb3NlcyB0aGUgY3VycmVudCBlbGVtZW50CisqIDptZXRoOmB4bWwuZXRyZWUuRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIuZG9jdHlwZWAgaGFuZGxlcyBhIGRvY3R5cGUKKyAgZGVjbGFyYXRpb24KKworVHdvIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQ6CisKKyogOm1ldGg6YHhtbC5ldHJlZS5FbGVtZW50VHJlZS5nZXRjaGlsZHJlbmAgdXNlIGBgbGlzdChlbGVtKWBgIGluc3RlYWQuCisqIDptZXRoOmB4bWwuZXRyZWUuRWxlbWVudFRyZWUuZ2V0aXRlcmF0b3JgIHVzZSBgYEVsZW1lbnQuaXRlcmBgIGluc3RlYWQuCisKK0ZvciBkZXRhaWxzIG9mIHRoZSB1cGRhdGUsIHNlZSBgSW50cm9kdWNpbmcgRWxlbWVudFRyZWUKKzxodHRwOi8vZWZmYm90Lm9yZy96b25lL2VsZW1lbnR0cmVlLTEzLWludHJvLmh0bT5gXyBvbiBGcmVkcmlrIEx1bmRoJ3Mgd2Vic2l0ZS4KKworKENvbnRyaWJ1dGVkIGJ5IEZsb3JlbnQgWGljbHVuYSBhbmQgRnJlZHJpayBMdW5kaCwgOmlzc3VlOmA2NDcyYC4pCisKK2Z1bmN0b29scworLS0tLS0tLS0tCisKKyogVGhlIDptb2Q6YGZ1bmN0b29sc2AgbW9kdWxlIGluY2x1ZGVzIGEgbmV3IGRlY29yYXRvciBmb3IgY2FjaGluZyBmdW5jdGlvbgorICBjYWxscy4gIDpmdW5jOmBmdW5jdG9vbHMubHJ1X2NhY2hlYCBjYW4gc2F2ZSByZXBlYXRlZCBxdWVyaWVzIHRvIGFuIGV4dGVybmFsCisgIHJlc291cmNlIHdoZW5ldmVyIHRoZSByZXN1bHRzIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgc2FtZS4KKworICBGb3IgZXhhbXBsZSwgYWRkaW5nIGEgY2FjaGluZyBkZWNvcmF0b3IgdG8gYSBkYXRhYmFzZSBxdWVyeSBmdW5jdGlvbiBjYW4gc2F2ZQorICBkYXRhYmFzZSBhY2Nlc3NlcyBmb3IgcG9wdWxhciBzZWFyY2hlczoKKworICA+Pj4gaW1wb3J0IGZ1bmN0b29scworICA+Pj4gQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT0zMDApCisgID4+PiBkZWYgZ2V0X3Bob25lX251bWJlcihuYW1lKToKKyAgICAgICAgICBjID0gY29ubi5jdXJzb3IoKQorICAgICAgICAgIGMuZXhlY3V0ZSgnU0VMRUNUIHBob25lbnVtYmVyIEZST00gcGhvbmVsaXN0IFdIRVJFIG5hbWU9PycsIChuYW1lLCkpCisgICAgICAgICAgcmV0dXJuIGMuZmV0Y2hvbmUoKVswXQorCisgID4+PiBmb3IgbmFtZSBpbiB1c2VyX3JlcXVlc3RzOgorICAgICAgICAgIGdldF9waG9uZV9udW1iZXIobmFtZSkgICAgICAgICMgY2FjaGVkIGxvb2t1cAorCisgIFRvIGhlbHAgd2l0aCBjaG9vc2luZyBhbiBlZmZlY3RpdmUgY2FjaGUgc2l6ZSwgdGhlIHdyYXBwZWQgZnVuY3Rpb24gaXMKKyAgaW5zdHJ1bWVudGVkIGZvciB0cmFja2luZyBjYWNoZSBzdGF0aXN0aWNzOgorCisgID4+PiBnZXRfcGhvbmVfbnVtYmVyLmNhY2hlX2luZm8oKQorICBDYWNoZUluZm8oaGl0cz00ODA1LCBtaXNzZXM9OTgwLCBtYXhzaXplPTMwMCwgY3VycnNpemU9MzAwKQorCisgIElmIHRoZSBwaG9uZWxpc3QgdGFibGUgZ2V0cyB1cGRhdGVkLCB0aGUgb3V0ZGF0ZWQgY29udGVudHMgb2YgdGhlIGNhY2hlIGNhbiBiZQorICBjbGVhcmVkIHdpdGg6CisKKyAgPj4+IGdldF9waG9uZV9udW1iZXIuY2FjaGVfY2xlYXIoKQorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBhbmQgaW5jb3Jwb3JhdGluZyBkZXNpZ24gaWRlYXMgZnJvbSBKaW0KKyAgQmFrZXIsIE1pa2kgVGViZWthLCBhbmQgTmljayBDb2dobGFuOyBzZWUgYHJlY2lwZSA0OTgyNDUKKyAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzQ5ODI0NT5gX1wsIGByZWNpcGUgNTc3NDc5CisgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81Nzc0Nzk+YF9cLCA6aXNzdWU6YDEwNTg2YCwgYW5kCisgIDppc3N1ZTpgMTA1OTNgLikKKworKiBUaGUgOmZ1bmM6YGZ1bmN0b29scy53cmFwc2AgZGVjb3JhdG9yIG5vdyBhZGRzIGEgOmF0dHI6YF9fd3JhcHBlZF9fYCBhdHRyaWJ1dGUKKyAgcG9pbnRpbmcgdG8gdGhlIG9yaWdpbmFsIGNhbGxhYmxlIGZ1bmN0aW9uLiAgVGhpcyBhbGxvd3Mgd3JhcHBlZCBmdW5jdGlvbnMgdG8KKyAgYmUgaW50cm9zcGVjdGVkLiAgSXQgYWxzbyBjb3BpZXMgOmF0dHI6YF9fYW5ub3RhdGlvbnNfX2AgaWYgZGVmaW5lZC4gIEFuZCBub3cKKyAgaXQgYWxzbyBncmFjZWZ1bGx5IHNraXBzIG92ZXIgbWlzc2luZyBhdHRyaWJ1dGVzIHN1Y2ggYXMgOmF0dHI6YF9fZG9jX19gIHdoaWNoCisgIG1pZ2h0IG5vdCBiZSBkZWZpbmVkIGZvciB0aGUgd3JhcHBlZCBjYWxsYWJsZS4KKworICBJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGNhY2hlIGNhbiBiZSByZW1vdmVkIGJ5IHJlY292ZXJpbmcgdGhlIG9yaWdpbmFsCisgIGZ1bmN0aW9uOgorCisgID4+PiBnZXRfcGhvbmVfbnVtYmVyID0gZ2V0X3Bob25lX251bWJlci5fX3dyYXBwZWRfXyAgICAjIHVuY2FjaGVkIGZ1bmN0aW9uCisKKyAgKEJ5IE5pY2sgQ29naGxhbiBhbmQgVGVycmVuY2UgQ29sZTsgOmlzc3VlOmA5NTY3YCwgOmlzc3VlOmAzNDQ1YCwgYW5kCisgIDppc3N1ZTpgODgxNGAuKQorCisqIFRvIGhlbHAgd3JpdGUgY2xhc3NlcyB3aXRoIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzLCBhIG5ldyBkZWNvcmF0b3IKKyAgOmZ1bmM6YGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2Agd2lsbCB1c2UgYSBleGlzdGluZyBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eQorICBtZXRob2RzIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyBtZXRob2RzLgorCisgIEZvciBleGFtcGxlLCBzdXBwbHlpbmcgKl9fZXFfXyogYW5kICpfX2x0X18qIHdpbGwgZW5hYmxlCisgIDpmdW5jOmB+ZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYCB0byBmaWxsLWluICpfX2xlX18qLCAqX19ndF9fKiBhbmQgKl9fZ2VfXyo6OgorCisgICAgQHRvdGFsX29yZGVyaW5nCisgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CisgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCisgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CisgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCisKKyAgV2l0aCB0aGUgKnRvdGFsX29yZGVyaW5nKiBkZWNvcmF0b3IsIHRoZSByZW1haW5pbmcgY29tcGFyaXNvbiBtZXRob2RzCisgIGFyZSBmaWxsZWQgaW4gYXV0b21hdGljYWxseS4KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQorCisqIFRvIGFpZCBpbiBwb3J0aW5nIHByb2dyYW1zIGZyb20gUHl0aG9uIDIsIHRoZSA6ZnVuYzpgZnVuY3Rvb2xzLmNtcF90b19rZXlgCisgIGZ1bmN0aW9uIGNvbnZlcnRzIGFuIG9sZC1zdHlsZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvCisgIG1vZGVybiA6dGVybTpga2V5IGZ1bmN0aW9uYDoKKworICA+Pj4gIyBsb2NhbGUtYXdhcmUgc29ydCBvcmRlcgorICA+Pj4gc29ydGVkKGl0ZXJhYmxlLCBrZXk9Y21wX3RvX2tleShsb2NhbGUuc3RyY29sbCkpCisKKyAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIHRoZSBgU29ydGluZyBIb3dUbworICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfIHR1dG9yaWFsLgorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCisKK2l0ZXJ0b29scworLS0tLS0tLS0tCisKKyogVGhlIDptb2Q6YGl0ZXJ0b29sc2AgbW9kdWxlIGhhcyBhIG5ldyA6ZnVuYzpgfml0ZXJ0b29scy5hY2N1bXVsYXRlYCBmdW5jdGlvbgorICBtb2RlbGVkIG9uIEFQTCdzICpzY2FuKiBvcGVyYXRvciBhbmQgTnVtcHkncyAqYWNjdW11bGF0ZSogZnVuY3Rpb246CisKKyAgPj4+IGZyb20gaXRlcnRvb2xzIGltcG9ydCBhY2N1bXVsYXRlCisgID4+PiBsaXN0KGFjY3VtdWxhdGUoWzgsIDIsIDUwXSkpCisgIFs4LCAxMCwgNjBdCisKKyAgPj4+IHByb2JfZGlzdCA9IFswLjEsIDAuNCwgMC4yLCAwLjNdCisgID4+PiBsaXN0KGFjY3VtdWxhdGUocHJvYl9kaXN0KSkgICAgICAjIGN1bXVsYXRpdmUgcHJvYmFiaWxpdHkgZGlzdHJpYnV0aW9uCisgIFswLjEsIDAuNSwgMC43LCAxLjBdCisKKyAgRm9yIGFuIGV4YW1wbGUgdXNpbmcgOmZ1bmM6YH5pdGVydG9vbHMuYWNjdW11bGF0ZWAsIHNlZSB0aGUgOnJlZjpgZXhhbXBsZXMgZm9yCisgIHRoZSByYW5kb20gbW9kdWxlIDxyYW5kb20tZXhhbXBsZXM+YC4KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYW5kIGluY29ycG9yYXRpbmcgZGVzaWduIHN1Z2dlc3Rpb25zCisgIGZyb20gTWFyayBEaWNraW5zb24uKQorCitjb2xsZWN0aW9ucworLS0tLS0tLS0tLS0KKworKiBUaGUgOmNsYXNzOmBjb2xsZWN0aW9ucy5Db3VudGVyYCBjbGFzcyBub3cgaGFzIHR3byBmb3JtcyBvZiBpbi1wbGFjZQorICBzdWJ0cmFjdGlvbiwgdGhlIGV4aXN0aW5nICotPSogb3BlcmF0b3IgZm9yIGBzYXR1cmF0aW5nIHN1YnRyYWN0aW9uCisgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NhdHVyYXRpb25fYXJpdGhtZXRpYz5gXyBhbmQgdGhlIG5ldworICA6bWV0aDpgfmNvbGxlY3Rpb25zLkNvdW50ZXIuc3VidHJhY3RgIG1ldGhvZCBmb3IgcmVndWxhciBzdWJ0cmFjdGlvbi4gIFRoZQorICBmb3JtZXIgaXMgc3VpdGFibGUgZm9yIGBtdWx0aXNldHMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTXVsdGlzZXQ+YF8KKyAgd2hpY2ggb25seSBoYXZlIHBvc2l0aXZlIGNvdW50cywgYW5kIHRoZSBsYXR0ZXIgaXMgbW9yZSBzdWl0YWJsZSBmb3IgdXNlIGNhc2VzCisgIHRoYXQgYWxsb3cgbmVnYXRpdmUgY291bnRzOgorCisgID4+PiB0YWxseSA9IENvdW50ZXIoZG9ncz01LCBjYXQ9MykKKyAgPj4+IHRhbGx5IC09IENvdW50ZXIoZG9ncz0yLCBjYXRzPTgpICAgICMgc2F0dXJhdGluZyBzdWJ0cmFjdGlvbgorICA+Pj4gdGFsbHkKKyAgQ291bnRlcih7J2RvZ3MnOiAzfSkKKworICA+Pj4gdGFsbHkgPSBDb3VudGVyKGRvZ3M9NSwgY2F0cz0zKQorICA+Pj4gdGFsbHkuc3VidHJhY3QoZG9ncz0yLCBjYXRzPTgpICAgICAgIyByZWd1bGFyIHN1YnRyYWN0aW9uCisgID4+PiB0YWxseQorICBDb3VudGVyKHsnZG9ncyc6IDMsICdjYXRzJzogLTV9KQorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCisKKyogVGhlIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgIGNsYXNzIGhhcyBhIG5ldyBtZXRob2QKKyAgOm1ldGg6YH5jb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5tb3ZlX3RvX2VuZGAgd2hpY2ggdGFrZXMgYW4gZXhpc3Rpbmcga2V5IGFuZAorICBtb3ZlcyBpdCB0byBlaXRoZXIgdGhlIGZpcnN0IG9yIGxhc3QgcG9zaXRpb24gaW4gdGhlIG9yZGVyZWQgc2VxdWVuY2UuCisKKyAgVGhlIGRlZmF1bHQgaXMgdG8gbW92ZSBhbiBpdGVtIHRvIHRoZSBsYXN0IHBvc2l0aW9uLiAgVGhpcyBpcyBlcXVpdmFsZW50IG9mCisgIHJlbmV3aW5nIGFuIGVudHJ5IHdpdGggYGBvZFtrXSA9IG9kLnBvcChrKWBgLgorCisgIEEgZmFzdCBtb3ZlLXRvLWVuZCBvcGVyYXRpb24gaXMgdXNlZnVsIGZvciByZXNlcXVlbmNpbmcgZW50cmllcy4gIEZvciBleGFtcGxlLAorICBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgY2FuIGJlIHVzZWQgdG8gdHJhY2sgb3JkZXIgb2YgYWNjZXNzIGJ5IGFnaW5nIGVudHJpZXMKKyAgZnJvbSB0aGUgb2xkZXN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IGFjY2Vzc2VkLgorCisgID4+PiBkID0gT3JkZXJlZERpY3QuZnJvbWtleXMoWydhJywgJ2InLCAnWCcsICdkJywgJ2UnXSkKKyAgPj4+IGxpc3QoZCkKKyAgWydhJywgJ2InLCAnWCcsICdkJywgJ2UnXQorICA+Pj4gZC5tb3ZlX3RvX2VuZCgnWCcpCisgID4+PiBsaXN0KGQpCisgIFsnYScsICdiJywgJ2QnLCAnZScsICdYJ10KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQorCisqIFRoZSA6Y2xhc3M6YGNvbGxlY3Rpb25zLmRlcXVlYCBjbGFzcyBncmV3IHR3byBuZXcgbWV0aG9kcworICA6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLmNvdW50YCBhbmQgOm1ldGg6YH5jb2xsZWN0aW9ucy5kZXF1ZS5yZXZlcnNlYCB0aGF0CisgIG1ha2UgdGhlbSBtb3JlIHN1YnN0aXR1dGFibGUgZm9yIDpjbGFzczpgbGlzdGAgb2JqZWN0czoKKworICA+Pj4gZCA9IGRlcXVlKCdzaW1zYWxhYmltJykKKyAgPj4+IGQuY291bnQoJ3MnKQorICAyCisgID4+PiBkLnJldmVyc2UoKQorICA+Pj4gZAorICBkZXF1ZShbJ20nLCAnaScsICdiJywgJ2EnLCAnbCcsICdhJywgJ3MnLCAnbScsICdpJywgJ3MnXSkKKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIuKQorCit0aHJlYWRpbmcKKy0tLS0tLS0tLQorCitUaGUgOm1vZDpgdGhyZWFkaW5nYCBtb2R1bGUgaGFzIGEgbmV3IDpjbGFzczpgfnRocmVhZGluZy5CYXJyaWVyYAorc3luY2hyb25pemF0aW9uIGNsYXNzIGZvciBtYWtpbmcgbXVsdGlwbGUgdGhyZWFkcyB3YWl0IHVudGlsIGFsbCBvZiB0aGVtIGhhdmUKK3JlYWNoZWQgYSBjb21tb24gYmFycmllciBwb2ludC4gIEJhcnJpZXJzIGFyZSB1c2VmdWwgZm9yIG1ha2luZyBzdXJlIHRoYXQgYSB0YXNrCit3aXRoIG11bHRpcGxlIHByZWNvbmRpdGlvbnMgZG9lcyBub3QgcnVuIHVudGlsIGFsbCBvZiB0aGUgcHJlZGVjZXNzb3IgdGFza3MgYXJlCitjb21wbGV0ZS4KKworQmFycmllcnMgY2FuIHdvcmsgd2l0aCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHRocmVhZHMuICBUaGlzIGlzIGEgZ2VuZXJhbGl6YXRpb24KK29mIGEgYFJlbmRlenZvdXMgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3luY2hyb25vdXNfcmVuZGV6dm91cz5gXyB3aGljaAoraXMgZGVmaW5lZCBmb3Igb25seSB0d28gdGhyZWFkcy4KKworSW1wbGVtZW50ZWQgYXMgYSB0d28tcGhhc2UgY3ljbGljIGJhcnJpZXIsIDpjbGFzczpgfnRocmVhZGluZy5CYXJyaWVyYCBvYmplY3RzCithcmUgc3VpdGFibGUgZm9yIHVzZSBpbiBsb29wcy4gIFRoZSBzZXBhcmF0ZSAqZmlsbGluZyogYW5kICpkcmFpbmluZyogcGhhc2VzCithc3N1cmUgdGhhdCBhbGwgdGhyZWFkcyBnZXQgcmVsZWFzZWQgKGRyYWluZWQpIGJlZm9yZSBhbnkgb25lIG9mIHRoZW0gY2FuIGxvb3AKK2JhY2sgYW5kIHJlLWVudGVyIHRoZSBiYXJyaWVyLiAgVGhlIGJhcnJpZXIgZnVsbHkgcmVzZXRzIGFmdGVyIGVhY2ggY3ljbGUuCisKK0V4YW1wbGUgb2YgdXNpbmcgYmFycmllcnM6OgorCisgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IEJhcnJpZXIsIFRocmVhZAorCisgICAgZGVmIGdldF92b3RlcyhzaXRlKToKKyAgICAgICAgYmFsbG90cyA9IGNvbmR1Y3RfZWxlY3Rpb24oc2l0ZSkKKyAgICAgICAgYWxsX3BvbGxzX2Nsb3NlZC53YWl0KCkgICAgICAgICMgZG8gbm90IGNvdW50IHVudGlsIGFsbCBwb2xscyBhcmUgY2xvc2VkCisgICAgICAgIHRvdGFscyA9IHN1bW1hcml6ZShiYWxsb3RzKQorICAgICAgICBwdWJsaXNoKHNpdGUsIHRvdGFscykKKworICAgIGFsbF9wb2xsc19jbG9zZWQgPSBCYXJyaWVyKGxlbihzaXRlcykpCisgICAgZm9yIHNpdGUgaW4gc2l0ZXM6CisgICAgICAgIFRocmVhZCh0YXJnZXQ9Z2V0X3ZvdGVzLCBhcmdzPShzaXRlLCkpLnN0YXJ0KCkKKworSW4gdGhpcyBleGFtcGxlLCB0aGUgYmFycmllciBlbmZvcmNlcyBhIHJ1bGUgdGhhdCB2b3RlcyBjYW5ub3QgYmUgY291bnRlZCBhdCBhbnkKK3BvbGxpbmcgc2l0ZSB1bnRpbCBhbGwgcG9sbHMgYXJlIGNsb3NlZC4gIE5vdGljZSBob3cgYSBzb2x1dGlvbiB3aXRoIGEgYmFycmllcgoraXMgc2ltaWxhciB0byBvbmUgd2l0aCA6bWV0aDpgdGhyZWFkaW5nLlRocmVhZC5qb2luYCwgYnV0IHRoZSB0aHJlYWRzIHN0YXkgYWxpdmUKK2FuZCBjb250aW51ZSB0byBkbyB3b3JrIChzdW1tYXJpemluZyBiYWxsb3RzKSBhZnRlciB0aGUgYmFycmllciBwb2ludCBpcworY3Jvc3NlZC4KKworSWYgYW55IG9mIHRoZSBwcmVkZWNlc3NvciB0YXNrcyBjYW4gaGFuZyBvciBiZSBkZWxheWVkLCBhIGJhcnJpZXIgY2FuIGJlIGNyZWF0ZWQKK3dpdGggYW4gb3B0aW9uYWwgKnRpbWVvdXQqIHBhcmFtZXRlci4gIFRoZW4gaWYgdGhlIHRpbWVvdXQgcGVyaW9kIGVsYXBzZXMgYmVmb3JlCithbGwgdGhlIHByZWRlY2Vzc29yIHRhc2tzIHJlYWNoIHRoZSBiYXJyaWVyIHBvaW50LCBhbGwgd2FpdGluZyB0aHJlYWRzIGFyZQorcmVsZWFzZWQgYW5kIGEgOmV4YzpgfnRocmVhZGluZy5Ccm9rZW5CYXJyaWVyRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQ6OgorCisgICAgZGVmIGdldF92b3RlcyhzaXRlKToKKyAgICAgICAgYmFsbG90cyA9IGNvbmR1Y3RfZWxlY3Rpb24oc2l0ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWxsX3BvbGxzX2Nsb3NlZC53YWl0KHRpbWVvdXQgPSBtaWRuaWdodCAtIHRpbWUubm93KCkpCisgICAgICAgIGV4Y2VwdCBCcm9rZW5CYXJyaWVyRXJyb3I6CisgICAgICAgICAgICBsb2NrYm94ID0gc2VhbF9iYWxsb3RzKGJhbGxvdHMpCisgICAgICAgICAgICBxdWV1ZS5wdXQobG9ja2JveCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRvdGFscyA9IHN1bW1hcml6ZShiYWxsb3RzKQorICAgICAgICAgICAgcHVibGlzaChzaXRlLCB0b3RhbHMpCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIGJhcnJpZXIgZW5mb3JjZXMgYSBtb3JlIHJvYnVzdCBydWxlLiAgSWYgc29tZSBlbGVjdGlvbgorc2l0ZXMgZG8gbm90IGZpbmlzaCBiZWZvcmUgbWlkbmlnaHQsIHRoZSBiYXJyaWVyIHRpbWVzLW91dCBhbmQgdGhlIGJhbGxvdHMgYXJlCitzZWFsZWQgYW5kIGRlcG9zaXRlZCBpbiBhIHF1ZXVlIGZvciBsYXRlciBoYW5kbGluZy4KKworU2VlIGBCYXJyaWVyIFN5bmNocm9uaXphdGlvbiBQYXR0ZXJucworPGh0dHA6Ly9wYXJsYWIuZWVjcy5iZXJrZWxleS5lZHUvd2lraS9fbWVkaWEvcGF0dGVybnMvcGFyYXBsb3BfZzFfMy5wZGY+YF8gZm9yCittb3JlIGV4YW1wbGVzIG9mIGhvdyBiYXJyaWVycyBjYW4gYmUgdXNlZCBpbiBwYXJhbGxlbCBjb21wdXRpbmcuICBBbHNvLCB0aGVyZSBpcworYSBzaW1wbGUgYnV0IHRob3JvdWdoIGV4cGxhbmF0aW9uIG9mIGJhcnJpZXJzIGluIGBUaGUgTGl0dGxlIEJvb2sgb2YgU2VtYXBob3JlcworPGh0dHA6Ly9ncmVlbnRlYXByZXNzLmNvbS9zZW1hcGhvcmVzL2Rvd25leTA4c2VtYXBob3Jlcy5wZGY+YF8sICpzZWN0aW9uIDMuNiouCisKKyhDb250cmlidXRlZCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24gd2l0aCBhbiBBUEkgcmV2aWV3IGJ5IEplZmZyZXkgWWFzc2tpbiBpbgorOmlzc3VlOmA4Nzc3YC4pCisKK2RhdGV0aW1lIGFuZCB0aW1lCistLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSA6bW9kOmBkYXRldGltZWAgbW9kdWxlIGhhcyBhIG5ldyB0eXBlIDpjbGFzczpgfmRhdGV0aW1lLnRpbWV6b25lYCB0aGF0CisgIGltcGxlbWVudHMgdGhlIDpjbGFzczpgfmRhdGV0aW1lLnR6aW5mb2AgaW50ZXJmYWNlIGJ5IHJldHVybmluZyBhIGZpeGVkIFVUQworICBvZmZzZXQgYW5kIHRpbWV6b25lIG5hbWUuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGNyZWF0ZSB0aW1lem9uZS1hd2FyZQorICBkYXRldGltZSBvYmplY3RzOjoKKworICAgID4+PiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZXpvbmUKKworICAgID4+PiBkYXRldGltZS5ub3codGltZXpvbmUudXRjKQorICAgIGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDEyLCA4LCAyMSwgNCwgMiwgOTIzNzU0LCB0emluZm89ZGF0ZXRpbWUudGltZXpvbmUudXRjKQorCisgICAgPj4+IGRhdGV0aW1lLnN0cnB0aW1lKCIwMS8wMS8yMDAwIDEyOjAwICswMDAwIiwgIiVtLyVkLyVZICVIOiVNICV6IikKKyAgICBkYXRldGltZS5kYXRldGltZSgyMDAwLCAxLCAxLCAxMiwgMCwgdHppbmZvPWRhdGV0aW1lLnRpbWV6b25lLnV0YykKKworKiBBbHNvLCA6Y2xhc3M6YH5kYXRldGltZS50aW1lZGVsdGFgIG9iamVjdHMgY2FuIG5vdyBiZSBtdWx0aXBsaWVkIGJ5CisgIDpjbGFzczpgZmxvYXRgIGFuZCBkaXZpZGVkIGJ5IDpjbGFzczpgZmxvYXRgIGFuZCA6Y2xhc3M6YGludGAgb2JqZWN0cy4KKyAgQW5kIDpjbGFzczpgfmRhdGV0aW1lLnRpbWVkZWx0YWAgb2JqZWN0cyBjYW4gbm93IGRpdmlkZSBvbmUgYW5vdGhlci4KKworKiBUaGUgOm1ldGg6YGRhdGV0aW1lLmRhdGUuc3RyZnRpbWVgIG1ldGhvZCBpcyBubyBsb25nZXIgcmVzdHJpY3RlZCB0byB5ZWFycworICBhZnRlciAxOTAwLiAgVGhlIG5ldyBzdXBwb3J0ZWQgeWVhciByYW5nZSBpcyBmcm9tIDEwMDAgdG8gOTk5OSBpbmNsdXNpdmUuCisKKyogV2hlbmV2ZXIgYSB0d28tZGlnaXQgeWVhciBpcyB1c2VkIGluIGEgdGltZSB0dXBsZSwgdGhlIGludGVycHJldGF0aW9uIGhhcyBiZWVuCisgIGdvdmVybmVkIGJ5IDphdHRyOmB0aW1lLmFjY2VwdDJkeWVhcmAuICBUaGUgZGVmYXVsdCBpcyAqVHJ1ZSogd2hpY2ggbWVhbnMgdGhhdAorICBmb3IgYSB0d28tZGlnaXQgeWVhciwgdGhlIGNlbnR1cnkgaXMgZ3Vlc3NlZCBhY2NvcmRpbmcgdG8gdGhlIFBPU0lYIHJ1bGVzCisgIGdvdmVybmluZyB0aGUgYGAleWBgIHN0cnB0aW1lIGZvcm1hdC4KKworICBTdGFydGluZyB3aXRoIFB5My4yLCB1c2Ugb2YgdGhlIGNlbnR1cnkgZ3Vlc3NpbmcgaGV1cmlzdGljIHdpbGwgZW1pdCBhCisgIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AuICBJbnN0ZWFkLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0CisgIDphdHRyOmB0aW1lLmFjY2VwdDJkeWVhcmAgYmUgc2V0IHRvICpGYWxzZSogc28gdGhhdCBsYXJnZSBkYXRlIHJhbmdlcworICBjYW4gYmUgdXNlZCB3aXRob3V0IGd1ZXNzd29yazo6CisKKyAgICA+Pj4gaW1wb3J0IHRpbWUsIHdhcm5pbmdzCisgICAgPj4+IHdhcm5pbmdzLnJlc2V0d2FybmluZ3MoKSAgICAgICMgcmVtb3ZlIHRoZSBkZWZhdWx0IHdhcm5pbmcgZmlsdGVycworCisgICAgPj4+IHRpbWUuYWNjZXB0MmR5ZWFyID0gVHJ1ZSAgICAgICMgZ3Vlc3Mgd2hldGhlciAxMSBtZWFucyAxMSBvciAyMDExCisgICAgPj4+IHRpbWUuYXNjdGltZSgoMTEsIDEsIDEsIDEyLCAzNCwgNTYsIDQsIDEsIDApKQorICAgIFdhcm5pbmcgKGZyb20gd2FybmluZ3MgbW9kdWxlKToKKyAgICAgIC4uLgorICAgIERlcHJlY2F0aW9uV2FybmluZzogQ2VudHVyeSBpbmZvIGd1ZXNzZWQgZm9yIGEgMi1kaWdpdCB5ZWFyLgorICAgICdGcmkgSmFuICAxIDEyOjM0OjU2IDIwMTEnCisKKyAgICA+Pj4gdGltZS5hY2NlcHQyZHllYXIgPSBGYWxzZSAgICAgIyB1c2UgdGhlIGZ1bGwgcmFuZ2Ugb2YgYWxsb3dhYmxlIGRhdGVzCisgICAgPj4+IHRpbWUuYXNjdGltZSgoMTEsIDEsIDEsIDEyLCAzNCwgNTYsIDQsIDEsIDApKQorICAgICdGcmkgSmFuICAxIDEyOjM0OjU2IDExJworCisgIFNldmVyYWwgZnVuY3Rpb25zIG5vdyBoYXZlIHNpZ25pZmljYW50bHkgZXhwYW5kZWQgZGF0ZSByYW5nZXMuICBXaGVuCisgIDphdHRyOmB0aW1lLmFjY2VwdDJkeWVhcmAgaXMgZmFsc2UsIHRoZSA6ZnVuYzpgdGltZS5hc2N0aW1lYCBmdW5jdGlvbiB3aWxsCisgIGFjY2VwdCBhbnkgeWVhciB0aGF0IGZpdHMgaW4gYSBDIGludCwgd2hpbGUgdGhlIDpmdW5jOmB0aW1lLm1rdGltZWAgYW5kCisgIDpmdW5jOmB0aW1lLnN0cmZ0aW1lYCBmdW5jdGlvbnMgd2lsbCBhY2NlcHQgdGhlIGZ1bGwgcmFuZ2Ugc3VwcG9ydGVkIGJ5IHRoZQorICBjb3JyZXNwb25kaW5nIG9wZXJhdGluZyBzeXN0ZW0gZnVuY3Rpb25zLgorCisoQ29udHJpYnV0ZWQgYnkgQWxleGFuZGVyIEJlbG9wb2xza3kgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTI4OTExOGAsCis6aXNzdWU6YDUwOTRgLCA6aXNzdWU6YDY2NDFgLCA6aXNzdWU6YDI3MDZgLCA6aXNzdWU6YDE3Nzc0MTJgLCA6aXNzdWU6YDgwMTNgLAorYW5kIDppc3N1ZTpgMTA4MjdgLikKKworLi4gWFhYIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU/JTQwc2VhcmNoX3RleHQ9ZGF0ZXRpbWUmJTQwc29ydD0tYWN0aXZpdHkKKworbWF0aAorLS0tLQorCitUaGUgOm1vZDpgbWF0aGAgbW9kdWxlIGhhcyBiZWVuIHVwZGF0ZWQgd2l0aCBzaXggbmV3IGZ1bmN0aW9ucyBpbnNwaXJlZCBieSB0aGUKK0M5OSBzdGFuZGFyZC4KKworVGhlIDpmdW5jOmB+bWF0aC5pc2Zpbml0ZWAgZnVuY3Rpb24gcHJvdmlkZXMgYSByZWxpYWJsZSBhbmQgZmFzdCB3YXkgdG8gZGV0ZWN0CitzcGVjaWFsIHZhbHVlcy4gIEl0IHJldHVybnMgKlRydWUqIGZvciByZWd1bGFyIG51bWJlcnMgYW5kICpGYWxzZSogZm9yICpOYW4qIG9yCisqSW5maW5pdHkqOgorCis+Pj4gW2lzZmluaXRlKHgpIGZvciB4IGluICgxMjMsIDQuNTYsIGZsb2F0KCdOYW4nKSwgZmxvYXQoJ0luZicpKV0KK1tUcnVlLCBUcnVlLCBGYWxzZSwgRmFsc2VdCisKK1RoZSA6ZnVuYzpgfm1hdGguZXhwbTFgIGZ1bmN0aW9uIGNvbXB1dGVzIGBgZSoqeC0xYGAgZm9yIHNtYWxsIHZhbHVlcyBvZiAqeCoKK3dpdGhvdXQgaW5jdXJyaW5nIHRoZSBsb3NzIG9mIHByZWNpc2lvbiB0aGF0IHVzdWFsbHkgYWNjb21wYW5pZXMgdGhlIHN1YnRyYWN0aW9uCitvZiBuZWFybHkgZXF1YWwgcXVhbnRpdGllczoKKworPj4+IGV4cG0xKDAuMDEzNjcxODc1KSAgICMgbW9yZSBhY2N1cmF0ZSB3YXkgdG8gY29tcHV0ZSBlKip4LTEgZm9yIGEgc21hbGwgeAorMC4wMTM3NjU3NjI0Njc2NTI5MDkKKworVGhlIDpmdW5jOmB+bWF0aC5lcmZgIGZ1bmN0aW9uIGNvbXB1dGVzIGEgcHJvYmFiaWxpdHkgaW50ZWdyYWwgb3IgYEdhdXNzaWFuCitlcnJvciBmdW5jdGlvbiA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FcnJvcl9mdW5jdGlvbj5gXy4gIFRoZQorY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiwgOmZ1bmM6YH5tYXRoLmVyZmNgLCBpcyBgYDEgLSBlcmYoeClgYDoKKworPj4+IGVyZigxLjAvc3FydCgyLjApKSAgICMgcG9ydGlvbiBvZiBub3JtYWwgZGlzdHJpYnV0aW9uIHdpdGhpbiAxIHN0YW5kYXJkIGRldmlhdGlvbgorMC42ODI2ODk0OTIxMzcwODYKKz4+PiBlcmZjKDEuMC9zcXJ0KDIuMCkpICAjIHBvcnRpb24gb2Ygbm9ybWFsIGRpc3RyaWJ1dGlvbiBvdXRzaWRlIDEgc3RhbmRhcmQgZGV2aWF0aW9uCiswLjMxNzMxMDUwNzg2MjkxNDA0Cis+Pj4gZXJmKDEuMC9zcXJ0KDIuMCkpICsgZXJmYygxLjAvc3FydCgyLjApKQorMS4wCisKK1RoZSA6ZnVuYzpgfm1hdGguZ2FtbWFgIGZ1bmN0aW9uIGlzIGEgY29udGludW91cyBleHRlbnNpb24gb2YgdGhlIGZhY3RvcmlhbAorZnVuY3Rpb24uICBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYW1tYV9mdW5jdGlvbiBmb3IgZGV0YWlscy4gIEJlY2F1c2UKK3RoZSBmdW5jdGlvbiBpcyByZWxhdGVkIHRvIGZhY3RvcmlhbHMsIGl0IGdyb3dzIGxhcmdlIGV2ZW4gZm9yIHNtYWxsIHZhbHVlcyBvZgorKngqLCBzbyB0aGVyZSBpcyBhbHNvIGEgOmZ1bmM6YH5tYXRoLmxnYW1tYWAgZnVuY3Rpb24gZm9yIGNvbXB1dGluZyB0aGUgbmF0dXJhbAorbG9nYXJpdGhtIG9mIHRoZSBnYW1tYSBmdW5jdGlvbjoKKworPj4+IGdhbW1hKDcuMCkgICAgICAgICAgICMgc2l4IGZhY3RvcmlhbAorNzIwLjAKKz4+PiBsZ2FtbWEoODAxLjApICAgICAgICAjIGxvZyg4MDAgZmFjdG9yaWFsKQorNDU1MS45NTA3MzA2OTgwNDEKKworKENvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uLikKKworYWJjCistLS0KKworVGhlIDptb2Q6YGFiY2AgbW9kdWxlIG5vdyBzdXBwb3J0cyA6ZnVuYzpgfmFiYy5hYnN0cmFjdGNsYXNzbWV0aG9kYCBhbmQKKzpmdW5jOmB+YWJjLmFic3RyYWN0c3RhdGljbWV0aG9kYC4KKworVGhlc2UgdG9vbHMgbWFrZSBpdCBwb3NzaWJsZSB0byBkZWZpbmUgYW4gOnRlcm06YGFic3RyYWN0IGJhc2UgY2xhc3NgIHRoYXQKK3JlcXVpcmVzIGEgcGFydGljdWxhciA6ZnVuYzpgY2xhc3NtZXRob2RgIG9yIDpmdW5jOmBzdGF0aWNtZXRob2RgIHRvIGJlCitpbXBsZW1lbnRlZDo6CisKKyAgICBjbGFzcyBUZW1wZXJhdHVyZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorICAgICAgICBAYWJjLmFic3RyYWN0Y2xhc3NtZXRob2QKKyAgICAgICAgZGVmIGZyb21fZmFocmVuaGVpdChjbHMsIHQpOgorICAgICAgICAgICAgLi4uCisgICAgICAgIEBhYmMuYWJzdHJhY3RjbGFzc21ldGhvZAorICAgICAgICBkZWYgZnJvbV9jZWxzaXVzKGNscywgdCk6CisgICAgICAgICAgICAuLi4KKworKFBhdGNoIHN1Ym1pdHRlZCBieSBEYW5pZWwgVXJiYW47IDppc3N1ZTpgNTg2N2AuKQorCitpbworLS0KKworVGhlIDpjbGFzczpgaW8uQnl0ZXNJT2AgaGFzIGEgbmV3IG1ldGhvZCwgOm1ldGg6YH5pby5CeXRlc0lPLmdldGJ1ZmZlcmAsIHdoaWNoCitwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gOmZ1bmM6YG1lbW9yeXZpZXdgLiAgSXQgY3JlYXRlcyBhbiBlZGl0YWJsZQordmlldyBvZiB0aGUgZGF0YSB3aXRob3V0IG1ha2luZyBhIGNvcHkuICBUaGUgYnVmZmVyJ3MgcmFuZG9tIGFjY2VzcyBhbmQgc3VwcG9ydAorZm9yIHNsaWNlIG5vdGF0aW9uIGFyZSB3ZWxsLXN1aXRlZCB0byBpbi1wbGFjZSBlZGl0aW5nOjoKKworICAgID4+PiBSRUNfTEVOLCBMT0NfU1RBUlQsIExPQ19MRU4gPSAzNCwgNywgMTEKKworICAgID4+PiBkZWYgY2hhbmdlX2xvY2F0aW9uKGJ1ZmZlciwgcmVjb3JkX251bWJlciwgbG9jYXRpb24pOgorICAgICAgICAgICAgc3RhcnQgPSByZWNvcmRfbnVtYmVyICogUkVDX0xFTiArIExPQ19TVEFSVAorICAgICAgICAgICAgYnVmZmVyW3N0YXJ0OiBzdGFydCtMT0NfTEVOXSA9IGxvY2F0aW9uCisKKyAgICA+Pj4gaW1wb3J0IGlvCisKKyAgICA+Pj4gYnl0ZV9zdHJlYW0gPSBpby5CeXRlc0lPKAorICAgICAgICBiJ0czODA1ICBzdG9yZXJvb20gIE1haW4gY2hhc3NpcyAgICAnCisgICAgICAgIGInWDc4OTkgIHNoaXBwaW5nICAgUmVzZXJ2ZSBjb2cgICAgICcKKyAgICAgICAgYidMNjk4OCAgcmVjZWl2aW5nICBQcmltYXJ5IHNwcm9ja2V0JworICAgICkKKyAgICA+Pj4gYnVmZmVyID0gYnl0ZV9zdHJlYW0uZ2V0YnVmZmVyKCkKKyAgICA+Pj4gY2hhbmdlX2xvY2F0aW9uKGJ1ZmZlciwgMSwgYid3YXJlaG91c2UgICcpCisgICAgPj4+IGNoYW5nZV9sb2NhdGlvbihidWZmZXIsIDAsIGInc2hvd3Jvb20gICAnKQorICAgID4+PiBwcmludChieXRlX3N0cmVhbS5nZXR2YWx1ZSgpKQorICAgIGInRzM4MDUgIHNob3dyb29tICAgTWFpbiBjaGFzc2lzICAgICcKKyAgICBiJ1g3ODk5ICB3YXJlaG91c2UgIFJlc2VydmUgY29nICAgICAnCisgICAgYidMNjk4OCAgcmVjZWl2aW5nICBQcmltYXJ5IHNwcm9ja2V0JworCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmA1NTA2YC4pCisKK3JlcHJsaWIKKy0tLS0tLS0KKworV2hlbiB3cml0aW5nIGEgOm1ldGg6YF9fcmVwcl9fYCBtZXRob2QgZm9yIGEgY3VzdG9tIGNvbnRhaW5lciwgaXQgaXMgZWFzeSB0bworZm9yZ2V0IHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIG1lbWJlciByZWZlcnMgYmFjayB0byB0aGUgY29udGFpbmVyIGl0c2VsZi4KK1B5dGhvbidzIGJ1aWx0aW4gb2JqZWN0cyBzdWNoIGFzIDpjbGFzczpgbGlzdGAgYW5kIDpjbGFzczpgc2V0YCBoYW5kbGUKK3NlbGYtcmVmZXJlbmNlIGJ5IGRpc3BsYXlpbmcgIi4uLiIgaW4gdGhlIHJlY3Vyc2l2ZSBwYXJ0IG9mIHRoZSByZXByZXNlbnRhdGlvbgorc3RyaW5nLgorCitUbyBoZWxwIHdyaXRlIHN1Y2ggOm1ldGg6YF9fcmVwcl9fYCBtZXRob2RzLCB0aGUgOm1vZDpgcmVwcmxpYmAgbW9kdWxlIGhhcyBhIG5ldworZGVjb3JhdG9yLCA6ZnVuYzpgfnJlcHJsaWIucmVjdXJzaXZlX3JlcHJgLCBmb3IgZGV0ZWN0aW5nIHJlY3Vyc2l2ZSBjYWxscyB0bworOm1ldGg6YF9fcmVwcl9fYCBhbmQgc3Vic3RpdHV0aW5nIGEgcGxhY2Vob2xkZXIgc3RyaW5nIGluc3RlYWQ6OgorCisgICAgICAgID4+PiBjbGFzcyBNeUxpc3QobGlzdCk6CisgICAgICAgICAgICAgICAgQHJlY3Vyc2l2ZV9yZXByKCkKKyAgICAgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPCcgKyAnfCcuam9pbihtYXAocmVwciwgc2VsZikpICsgJz4nCisKKyAgICAgICAgPj4+IG0gPSBNeUxpc3QoJ2FiYycpCisgICAgICAgID4+PiBtLmFwcGVuZChtKQorICAgICAgICA+Pj4gbS5hcHBlbmQoJ3gnKQorICAgICAgICA+Pj4gcHJpbnQobSkKKyAgICAgICAgPCdhJ3wnYid8J2MnfC4uLnwneCc+CisKKyhDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDk4MjZgIGFuZCA6aXNzdWU6YDk4NDBgLikKKworbG9nZ2luZworLS0tLS0tLQorCitJbiBhZGRpdGlvbiB0byBkaWN0aW9uYXJ5LWJhc2VkIGNvbmZpZ3VyYXRpb24gZGVzY3JpYmVkIGFib3ZlLCB0aGUKKzptb2Q6YGxvZ2dpbmdgIHBhY2thZ2UgaGFzIG1hbnkgb3RoZXIgaW1wcm92ZW1lbnRzLgorCitUaGUgbG9nZ2luZyBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGF1Z21lbnRlZCBieSBhIDpyZWY6YGJhc2ljIHR1dG9yaWFsCis8bG9nZ2luZy1iYXNpYy10dXRvcmlhbD5gXCwgYW4gOnJlZjpgYWR2YW5jZWQgdHV0b3JpYWwKKzxsb2dnaW5nLWFkdmFuY2VkLXR1dG9yaWFsPmBcLCBhbmQgYSA6cmVmOmBjb29rYm9vayA8bG9nZ2luZy1jb29rYm9vaz5gIG9mCitsb2dnaW5nIHJlY2lwZXMuICBUaGVzZSBkb2N1bWVudHMgYXJlIHRoZSBmYXN0ZXN0IHdheSB0byBsZWFybiBhYm91dCBsb2dnaW5nLgorCitUaGUgOmZ1bmM6YGxvZ2dpbmcuYmFzaWNDb25maWdgIHNldC11cCBmdW5jdGlvbiBnYWluZWQgYSAqc3R5bGUqIGFyZ3VtZW50IHRvCitzdXBwb3J0IHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBzdHJpbmcgZm9ybWF0dGluZy4gIEl0IGRlZmF1bHRzIHRvICIlIiBmb3IKK3RyYWRpdGlvbmFsICUtZm9ybWF0dGluZywgY2FuIGJlIHNldCB0byAieyIgZm9yIHRoZSBuZXcgOm1ldGg6YHN0ci5mb3JtYXRgIHN0eWxlLCBvcgorY2FuIGJlIHNldCB0byAiJCIgZm9yIHRoZSBzaGVsbC1zdHlsZSBmb3JtYXR0aW5nIHByb3ZpZGVkIGJ5Cis6Y2xhc3M6YHN0cmluZy5UZW1wbGF0ZWAuICBUaGUgZm9sbG93aW5nIHRocmVlIGNvbmZpZ3VyYXRpb25zIGFyZSBlcXVpdmFsZW50OjoKKworICAgID4+PiBmcm9tIGxvZ2dpbmcgaW1wb3J0IGJhc2ljQ29uZmlnCisgICAgPj4+IGJhc2ljQ29uZmlnKHN0eWxlPSclJywgZm9ybWF0PSIlKG5hbWUpcyAtPiAlKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcyIpCisgICAgPj4+IGJhc2ljQ29uZmlnKHN0eWxlPSd7JywgZm9ybWF0PSJ7bmFtZX0gLT4ge2xldmVsbmFtZX0ge21lc3NhZ2V9IikKKyAgICA+Pj4gYmFzaWNDb25maWcoc3R5bGU9JyQnLCBmb3JtYXQ9IiRuYW1lIC0+ICRsZXZlbG5hbWU6ICRtZXNzYWdlIikKKworSWYgbm8gY29uZmlndXJhdGlvbiBpcyBzZXQtdXAgYmVmb3JlIGEgbG9nZ2luZyBldmVudCBvY2N1cnMsIHRoZXJlIGlzIG5vdyBhCitkZWZhdWx0IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSA6Y2xhc3M6YH5sb2dnaW5nLlN0cmVhbUhhbmRsZXJgIGRpcmVjdGVkIHRvCis6YXR0cjpgc3lzLnN0ZGVycmAgZm9yIGV2ZW50cyBvZiBgYFdBUk5JTkdgYCBsZXZlbCBvciBoaWdoZXIuICBGb3JtZXJseSwgYW4KK2V2ZW50IG9jY3VycmluZyBiZWZvcmUgYSBjb25maWd1cmF0aW9uIHdhcyBzZXQtdXAgd291bGQgZWl0aGVyIHJhaXNlIGFuCitleGNlcHRpb24gb3Igc2lsZW50bHkgZHJvcCB0aGUgZXZlbnQgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZgorOmF0dHI6YGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zYC4gIFRoZSBuZXcgZGVmYXVsdCBoYW5kbGVyIGlzIHN0b3JlZCBpbgorOmF0dHI6YGxvZ2dpbmcubGFzdFJlc29ydGAuCisKK1RoZSB1c2Ugb2YgZmlsdGVycyBoYXMgYmVlbiBzaW1wbGlmaWVkLiAgSW5zdGVhZCBvZiBjcmVhdGluZyBhCis6Y2xhc3M6YH5sb2dnaW5nLkZpbHRlcmAgb2JqZWN0LCB0aGUgcHJlZGljYXRlIGNhbiBiZSBhbnkgUHl0aG9uIGNhbGxhYmxlIHRoYXQKK3JldHVybnMgKlRydWUqIG9yICpGYWxzZSouCisKK1RoZXJlIHdlcmUgYSBudW1iZXIgb2Ygb3RoZXIgaW1wcm92ZW1lbnRzIHRoYXQgYWRkIGZsZXhpYmlsaXR5IGFuZCBzaW1wbGlmeQorY29uZmlndXJhdGlvbi4gIFNlZSB0aGUgbW9kdWxlIGRvY3VtZW50YXRpb24gZm9yIGEgZnVsbCBsaXN0aW5nIG9mIGNoYW5nZXMgaW4KK1B5dGhvbiAzLjIuCisKK2NzdgorLS0tCisKK1RoZSA6bW9kOmBjc3ZgIG1vZHVsZSBub3cgc3VwcG9ydHMgYSBuZXcgZGlhbGVjdCwgOmNsYXNzOmB+Y3N2LnVuaXhfZGlhbGVjdGAsCit3aGljaCBhcHBsaWVzIHF1b3RpbmcgZm9yIGFsbCBmaWVsZHMgYW5kIGEgdHJhZGl0aW9uYWwgVW5peCBzdHlsZSB3aXRoIGBgJ1xuJ2BgIGFzCit0aGUgbGluZSB0ZXJtaW5hdG9yLiAgVGhlIHJlZ2lzdGVyZWQgZGlhbGVjdCBuYW1lIGlzIGBgdW5peGBgLgorCitUaGUgOmNsYXNzOmBjc3YuRGljdFdyaXRlcmAgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+Y3N2LkRpY3RXcml0ZXIud3JpdGVoZWFkZXJgIGZvciB3cml0aW5nLW91dCBhbiBpbml0aWFsIHJvdyB0byBkb2N1bWVudAordGhlIGZpZWxkIG5hbWVzOjoKKworICAgID4+PiBpbXBvcnQgY3N2LCBzeXMKKyAgICA+Pj4gdyA9IGNzdi5EaWN0V3JpdGVyKHN5cy5zdGRvdXQsIFsnbmFtZScsICdkZXB0J10sIGRpYWxlY3Q9J3VuaXgnKQorICAgID4+PiB3LndyaXRlaGVhZGVyKCkKKyAgICAibmFtZSIsImRlcHQiCisgICAgPj4+IHcud3JpdGVyb3dzKFsKKyAgICAgICAgICAgIHsnbmFtZSc6ICd0b20nLCAnZGVwdCc6ICdhY2NvdW50aW5nJ30sCisgICAgICAgICAgICB7J25hbWUnOiAnc3VzYW4nLCAnZGVwdCc6ICdTYWxlc2wnfV0pCisgICAgInRvbSIsImFjY291bnRpbmciCisgICAgInN1c2FuIiwic2FsZXMiCisKKyhOZXcgZGlhbGVjdCBzdWdnZXN0ZWQgYnkgSmF5IFRhbGJvdCBpbiA6aXNzdWU6YDU5NzVgLCBhbmQgdGhlIG5ldyBtZXRob2QKK3N1Z2dlc3RlZCBieSBFZCBBYnJhaGFtIGluIDppc3N1ZTpgMTUzNzcyMWAuKQorCitjb250ZXh0bGliCistLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgbmV3IGFuZCBzbGlnaHRseSBtaW5kLWJsb3dpbmcgdG9vbAorOmNsYXNzOmB+Y29udGV4dGxpYi5Db250ZXh0RGVjb3JhdG9yYCB0aGF0IGlzIGhlbHBmdWwgZm9yIGNyZWF0aW5nIGEKKzp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIHRoYXQgZG9lcyBkb3VibGUgZHV0eSBhcyBhIGZ1bmN0aW9uIGRlY29yYXRvci4KKworQXMgYSBjb252ZW5pZW5jZSwgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSBpcyB1c2VkIGJ5Cis6ZnVuYzpgfmNvbnRleHRsaWIuY29udGV4dG1hbmFnZXJgIHNvIHRoYXQgbm8gZXh0cmEgZWZmb3J0IGlzIG5lZWRlZCB0byBzdXBwb3J0Citib3RoIHJvbGVzLgorCitUaGUgYmFzaWMgaWRlYSBpcyB0aGF0IGJvdGggY29udGV4dCBtYW5hZ2VycyBhbmQgZnVuY3Rpb24gZGVjb3JhdG9ycyBjYW4gYmUgdXNlZAorZm9yIHByZS1hY3Rpb24gYW5kIHBvc3QtYWN0aW9uIHdyYXBwZXJzLiAgQ29udGV4dCBtYW5hZ2VycyB3cmFwIGEgZ3JvdXAgb2YKK3N0YXRlbWVudHMgdXNpbmcgYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCBhbmQgZnVuY3Rpb24gZGVjb3JhdG9ycyB3cmFwIGEKK2dyb3VwIG9mIHN0YXRlbWVudHMgZW5jbG9zZWQgaW4gYSBmdW5jdGlvbi4gIFNvLCBvY2Nhc2lvbmFsbHkgdGhlcmUgaXMgYSBuZWVkIHRvCit3cml0ZSBhIHByZS1hY3Rpb24gb3IgcG9zdC1hY3Rpb24gd3JhcHBlciB0aGF0IGNhbiBiZSB1c2VkIGluIGVpdGhlciByb2xlLgorCitGb3IgZXhhbXBsZSwgaXQgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byB3cmFwIGZ1bmN0aW9ucyBvciBncm91cHMgb2Ygc3RhdGVtZW50cword2l0aCBhIGxvZ2dlciB0aGF0IGNhbiB0cmFjayB0aGUgdGltZSBvZiBlbnRyeSBhbmQgdGltZSBvZiBleGl0LiAgUmF0aGVyIHRoYW4KK3dyaXRpbmcgYm90aCBhIGZ1bmN0aW9uIGRlY29yYXRvciBhbmQgYSBjb250ZXh0IG1hbmFnZXIgZm9yIHRoZSB0YXNrLCB0aGUKKzpmdW5jOmB+Y29udGV4dGxpYi5jb250ZXh0bWFuYWdlcmAgcHJvdmlkZXMgYm90aCBjYXBhYmlsaXRpZXMgaW4gYSBzaW5nbGUKK2RlZmluaXRpb246OgorCisgICAgZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgorICAgIGltcG9ydCBsb2dnaW5nCisKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTykKKworICAgIEBjb250ZXh0bWFuYWdlcgorICAgIGRlZiB0cmFja19lbnRyeV9hbmRfZXhpdChuYW1lKToKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdFbnRlcmluZzoge30nLmZvcm1hdChuYW1lKSkKKyAgICAgICAgeWllbGQKKyAgICAgICAgbG9nZ2luZy5pbmZvKCdFeGl0aW5nOiB7fScuZm9ybWF0KG5hbWUpKQorCitGb3JtZXJseSwgdGhpcyB3b3VsZCBoYXZlIG9ubHkgYmVlbiB1c2FibGUgYXMgYSBjb250ZXh0IG1hbmFnZXI6OgorCisgICAgd2l0aCB0cmFja19lbnRyeV9hbmRfZXhpdCgnd2lkZ2V0IGxvYWRlcicpOgorICAgICAgICBwcmludCgnU29tZSB0aW1lIGNvbnN1bWluZyBhY3Rpdml0eSBnb2VzIGhlcmUnKQorICAgICAgICBsb2FkX3dpZGdldCgpCisKK05vdywgaXQgY2FuIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IgYXMgd2VsbDo6CisKKyAgICBAdHJhY2tfZW50cnlfYW5kX2V4aXQoJ3dpZGdldCBsb2FkZXInKQorICAgIGRlZiBhY3Rpdml0eSgpOgorICAgICAgICBwcmludCgnU29tZSB0aW1lIGNvbnN1bWluZyBhY3Rpdml0eSBnb2VzIGhlcmUnKQorICAgICAgICBsb2FkX3dpZGdldCgpCisKK1RyeWluZyB0byBmdWxmaWxsIHR3byByb2xlcyBhdCBvbmNlIHBsYWNlcyBzb21lIGxpbWl0YXRpb25zIG9uIHRoZSB0ZWNobmlxdWUuCitDb250ZXh0IG1hbmFnZXJzIG5vcm1hbGx5IGhhdmUgdGhlIGZsZXhpYmlsaXR5IHRvIHJldHVybiBhbiBhcmd1bWVudCB1c2FibGUgYnkKK2EgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgYnV0IHRoZXJlIGlzIG5vIHBhcmFsbGVsIGZvciBmdW5jdGlvbiBkZWNvcmF0b3JzLgorCitJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlcmUgaXMgbm90IGEgY2xlYW4gd2F5IGZvciB0aGUgKnRyYWNrX2VudHJ5X2FuZF9leGl0KgorY29udGV4dCBtYW5hZ2VyIHRvIHJldHVybiBhIGxvZ2dpbmcgaW5zdGFuY2UgZm9yIHVzZSBpbiB0aGUgYm9keSBvZiBlbmNsb3NlZAorc3RhdGVtZW50cy4KKworKENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgRm9vcmQgaW4gOmlzc3VlOmA5MTEwYC4pCisKK2RlY2ltYWwgYW5kIGZyYWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK01hcmsgRGlja2luc29uIGNyYWZ0ZWQgYW4gZWxlZ2FudCBhbmQgZWZmaWNpZW50IHNjaGVtZSBmb3IgYXNzdXJpbmcgdGhhdAorZGlmZmVyZW50IG51bWVyaWMgZGF0YXR5cGVzIHdpbGwgaGF2ZSB0aGUgc2FtZSBoYXNoIHZhbHVlIHdoZW5ldmVyIHRoZWlyIGFjdHVhbAordmFsdWVzIGFyZSBlcXVhbCAoOmlzc3VlOmA4MTg4YCk6OgorCisgICBhc3NlcnQgaGFzaChGcmFjdGlvbigzLCAyKSkgPT0gaGFzaCgxLjUpID09IFwKKyAgICAgICAgICBoYXNoKERlY2ltYWwoIjEuNSIpKSA9PSBoYXNoKGNvbXBsZXgoMS41LCAwKSkKKworU29tZSBvZiB0aGUgaGFzaGluZyBkZXRhaWxzIGFyZSBleHBvc2VkIHRocm91Z2ggYSBuZXcgYXR0cmlidXRlLAorOmF0dHI6YHN5cy5oYXNoX2luZm9gLCB3aGljaCBkZXNjcmliZXMgdGhlIGJpdCB3aWR0aCBvZiB0aGUgaGFzaCB2YWx1ZSwgdGhlCitwcmltZSBtb2R1bHVzLCB0aGUgaGFzaCB2YWx1ZXMgZm9yICppbmZpbml0eSogYW5kICpuYW4qLCBhbmQgdGhlIG11bHRpcGxpZXIKK3VzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIG51bWJlcjoKKworPj4+IHN5cy5oYXNoX2luZm8KK3N5cy5oYXNoX2luZm8od2lkdGg9NjQsIG1vZHVsdXM9MjMwNTg0MzAwOTIxMzY5Mzk1MSwgaW5mPTMxNDE1OSwgbmFuPTAsIGltYWc9MTAwMDAwMykKKworQW4gZWFybHkgZGVjaXNpb24gdG8gbGltaXQgdGhlIGludGVyLW9wZXJhYmlsaXR5IG9mIHZhcmlvdXMgbnVtZXJpYyB0eXBlcyBoYXMKK2JlZW4gcmVsYXhlZC4gIEl0IGlzIHN0aWxsIHVuc3VwcG9ydGVkIChhbmQgaWxsLWFkdmlzZWQpIHRvIGhhdmUgaW1wbGljaXQKK21peGluZyBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIHN1Y2ggYXMgYGBEZWNpbWFsKCcxLjEnKSArIGZsb2F0KCcxLjEnKWBgCitiZWNhdXNlIHRoZSBsYXR0ZXIgbG9zZXMgaW5mb3JtYXRpb24gaW4gdGhlIHByb2Nlc3Mgb2YgY29uc3RydWN0aW5nIHRoZSBiaW5hcnkKK2Zsb2F0LiAgSG93ZXZlciwgc2luY2UgZXhpc3RpbmcgZmxvYXRpbmcgcG9pbnQgdmFsdWUgY2FuIGJlIGNvbnZlcnRlZCBsb3NzbGVzc2x5Cit0byBlaXRoZXIgYSBkZWNpbWFsIG9yIHJhdGlvbmFsIHJlcHJlc2VudGF0aW9uLCBpdCBtYWtlcyBzZW5zZSB0byBhZGQgdGhlbSB0bwordGhlIGNvbnN0cnVjdG9yIGFuZCB0byBzdXBwb3J0IG1peGVkLXR5cGUgY29tcGFyaXNvbnMuCisKKyogVGhlIDpjbGFzczpgZGVjaW1hbC5EZWNpbWFsYCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyA6Y2xhc3M6YGZsb2F0YCBvYmplY3RzCisgIGRpcmVjdGx5IHNvIHRoZXJlIGluIG5vIGxvbmdlciBhIG5lZWQgdG8gdXNlIHRoZSA6bWV0aDpgfmRlY2ltYWwuRGVjaW1hbC5mcm9tX2Zsb2F0YAorICBtZXRob2QgKDppc3N1ZTpgODI1N2ApLgorCisqIE1peGVkIHR5cGUgY29tcGFyaXNvbnMgYXJlIG5vdyBmdWxseSBzdXBwb3J0ZWQgc28gdGhhdAorICA6Y2xhc3M6YH5kZWNpbWFsLkRlY2ltYWxgIG9iamVjdHMgY2FuIGJlIGRpcmVjdGx5IGNvbXBhcmVkIHdpdGggOmNsYXNzOmBmbG9hdGAKKyAgYW5kIDpjbGFzczpgZnJhY3Rpb25zLkZyYWN0aW9uYCAoOmlzc3VlOmAyNTMxYCBhbmQgOmlzc3VlOmA4MTg4YCkuCisKK1NpbWlsYXIgY2hhbmdlcyB3ZXJlIG1hZGUgdG8gOmNsYXNzOmBmcmFjdGlvbnMuRnJhY3Rpb25gIHNvIHRoYXQgdGhlCis6bWV0aDpgfmZyYWN0aW9ucy5GcmFjdGlvbi5mcm9tX2Zsb2F0KClgIGFuZCA6bWV0aDpgfmZyYWN0aW9ucy5GcmFjdGlvbi5mcm9tX2RlY2ltYWxgCittZXRob2RzIGFyZSBubyBsb25nZXIgbmVlZGVkICg6aXNzdWU6YDgyOTRgKToKKworPj4+IERlY2ltYWwoMS4xKQorRGVjaW1hbCgnMS4xMDAwMDAwMDAwMDAwMDAwODg4MTc4NDE5NzAwMTI1MjMyMzM4OTA1MzM0NDcyNjU2MjUnKQorPj4+IEZyYWN0aW9uKDEuMSkKK0ZyYWN0aW9uKDI0NzY5Nzk3OTUwNTM3NzMsIDIyNTE3OTk4MTM2ODUyNDgpCisKK0Fub3RoZXIgdXNlZnVsIGNoYW5nZSBmb3IgdGhlIDptb2Q6YGRlY2ltYWxgIG1vZHVsZSBpcyB0aGF0IHRoZQorOmF0dHI6YENvbnRleHQuY2xhbXBgIGF0dHJpYnV0ZSBpcyBub3cgcHVibGljLiAgVGhpcyBpcyB1c2VmdWwgaW4gY3JlYXRpbmcKK2NvbnRleHRzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgZGVjaW1hbCBpbnRlcmNoYW5nZSBmb3JtYXRzIHNwZWNpZmllZCBpbiBJRUVFCis3NTQgKHNlZSA6aXNzdWU6YDg1NDBgKS4KKworKENvbnRyaWJ1dGVkIGJ5IE1hcmsgRGlja2luc29uIGFuZCBSYXltb25kIEhldHRpbmdlci4pCisKK2Z0cAorLS0tCisKK1RoZSA6Y2xhc3M6YGZ0cGxpYi5GVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvCit1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBGVFAKK2Nvbm5lY3Rpb24gd2hlbiBkb25lOjoKKworID4+PiBmcm9tIGZ0cGxpYiBpbXBvcnQgRlRQCisgPj4+IHdpdGggRlRQKCJmdHAxLmF0LnByb2Z0cGQub3JnIikgYXMgZnRwOgorICAgICAgICAgZnRwLmxvZ2luKCkKKyAgICAgICAgIGZ0cC5kaXIoKQorCisgJzIzMCBBbm9ueW1vdXMgbG9naW4gb2ssIHJlc3RyaWN0aW9ucyBhcHBseS4nCisgZHIteHIteHIteCAgIDkgZnRwICAgICAgZnRwICAgICAgICAgICAxNTQgTWF5ICA2IDEwOjQzIC4KKyBkci14ci14ci14ICAgOSBmdHAgICAgICBmdHAgICAgICAgICAgIDE1NCBNYXkgIDYgMTA6NDMgLi4KKyBkci14ci14ci14ICAgNSBmdHAgICAgICBmdHAgICAgICAgICAgNDA5NiBNYXkgIDYgMTA6NDMgQ2VudE9TCisgZHIteHIteHIteCAgIDMgZnRwICAgICAgZnRwICAgICAgICAgICAgMTggSnVsIDEwICAyMDA4IEZlZG9yYQorCitPdGhlciBmaWxlLWxpa2Ugb2JqZWN0cyBzdWNoIGFzIDpjbGFzczpgbW1hcC5tbWFwYCBhbmQgOmZ1bmM6YGZpbGVpbnB1dC5pbnB1dGAKK2Fsc28gZ3JldyBhdXRvLWNsb3NpbmcgY29udGV4dCBtYW5hZ2Vyczo6CisKKyAgICB3aXRoIGZpbGVpbnB1dC5pbnB1dChmaWxlcz0oJ2xvZzEudHh0JywgJ2xvZzIudHh0JykpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBwcm9jZXNzKGxpbmUpCisKKyhDb250cmlidXRlZCBieSBUYXJlayBaaWFkw6kgYW5kIEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgNDk3MmAsIGFuZAorYnkgR2VvcmcgQnJhbmRsIGluIDppc3N1ZTpgODA0NmAgYW5kIDppc3N1ZTpgMTI4NmAuKQorCitUaGUgOmNsYXNzOmB+ZnRwbGliLkZUUF9UTFNgIGNsYXNzIG5vdyBhY2NlcHRzIGEgKmNvbnRleHQqIHBhcmFtZXRlciwgd2hpY2ggaXMgYQorOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IGFsbG93aW5nIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsCitjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuCisKKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoDsgOmlzc3VlOmA4ODA2YC4pCisKK3BvcGVuCistLS0tLQorCitUaGUgOmZ1bmM6YG9zLnBvcGVuYCBhbmQgOmZ1bmM6YHN1YnByb2Nlc3MuUG9wZW5gIGZ1bmN0aW9ucyBub3cgc3VwcG9ydAorOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMgZm9yIGF1dG8tY2xvc2luZyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9ycy4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmA3NDYxYCBhbmQKKzppc3N1ZTpgMTA1NTRgLikKKworc2VsZWN0CistLS0tLS0KKworVGhlIDptb2Q6YHNlbGVjdGAgbW9kdWxlIG5vdyBleHBvc2VzIGEgbmV3LCBjb25zdGFudCBhdHRyaWJ1dGUsCis6YXR0cjpgfnNlbGVjdC5QSVBFX0JVRmAsIHdoaWNoIGdpdmVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBieXRlcyB3aGljaCBhcmUKK2d1YXJhbnRlZWQgbm90IHRvIGJsb2NrIHdoZW4gOmZ1bmM6YHNlbGVjdC5zZWxlY3RgIHNheXMgYSBwaXBlIGlzIHJlYWR5Citmb3Igd3JpdGluZy4KKworPj4+IGltcG9ydCBzZWxlY3QKKz4+PiBzZWxlY3QuUElQRV9CVUYKKzUxMgorCisoQXZhaWxhYmxlIG9uIFVuaXggc3lzdGVtcy4gUGF0Y2ggYnkgU8OpYmFzdGllbiBTYWJsw6kgaW4gOmlzc3VlOmA5ODYyYCkKKworZ3ppcCBhbmQgemlwZmlsZQorLS0tLS0tLS0tLS0tLS0tLQorCis6Y2xhc3M6YGd6aXAuR3ppcEZpbGVgIG5vdyBpbXBsZW1lbnRzIHRoZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYAorOnRlcm06YGFic3RyYWN0IGJhc2UgY2xhc3NgIChleGNlcHQgZm9yIGBgdHJ1bmNhdGUoKWBgKS4gIEl0IGFsc28gaGFzIGEKKzptZXRoOmB+Z3ppcC5HemlwRmlsZS5wZWVrYCBtZXRob2QgYW5kIHN1cHBvcnRzIHVuc2Vla2FibGUgYXMgd2VsbCBhcworemVyby1wYWRkZWQgZmlsZSBvYmplY3RzLgorCitUaGUgOm1vZDpgZ3ppcGAgbW9kdWxlIGFsc28gZ2FpbnMgdGhlIDpmdW5jOmB+Z3ppcC5jb21wcmVzc2AgYW5kCis6ZnVuYzpgfmd6aXAuZGVjb21wcmVzc2AgZnVuY3Rpb25zIGZvciBlYXNpZXIgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZAorZGVjb21wcmVzc2lvbi4gIEtlZXAgaW4gbWluZCB0aGF0IHRleHQgbmVlZHMgdG8gYmUgZW5jb2RlZCBhcyA6Y2xhc3M6YGJ5dGVzYAorYmVmb3JlIGNvbXByZXNzaW5nIGFuZCBkZWNvbXByZXNzaW5nOgorCis+Pj4gcyA9ICdUaHJlZSBzaGFsbCBiZSB0aGUgbnVtYmVyIHRob3Ugc2hhbHQgY291bnQsICcKKz4+PiBzICs9ICdhbmQgdGhlIG51bWJlciBvZiB0aGUgY291bnRpbmcgc2hhbGwgYmUgdGhyZWUnCis+Pj4gYiA9IHMuZW5jb2RlKCkgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgdG8gdXRmLTgKKz4+PiBsZW4oYikKKzg5Cis+Pj4gYyA9IGd6aXAuY29tcHJlc3MoYikKKz4+PiBsZW4oYykKKzc3Cis+Pj4gZ3ppcC5kZWNvbXByZXNzKGMpLmRlY29kZSgpWzo0Ml0gICAgICAjIGRlY29tcHJlc3MgYW5kIGNvbnZlcnQgdG8gdGV4dAorJ1RocmVlIHNoYWxsIGJlIHRoZSBudW1iZXIgdGhvdSBzaGFsdCBjb3VudCwnCisKKyhDb250cmlidXRlZCBieSBBbmFuZCBCLiBQaWxsYWkgaW4gOmlzc3VlOmAzNDg4YDsgYW5kIGJ5IEFudG9pbmUgUGl0cm91LCBOaXIKK0FpZGVzIGFuZCBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmA5OTYyYCwgOmlzc3VlOmAxNjc1OTUxYCwgOmlzc3VlOmA3NDcxYCBhbmQKKzppc3N1ZTpgMjg0NmAuKQorCitBbHNvLCB0aGUgOmNsYXNzOmB6aXBmaWxlLlppcEV4dEZpbGVgIGNsYXNzIHdhcyByZXdvcmtlZCBpbnRlcm5hbGx5IHRvIHJlcHJlc2VudAorZmlsZXMgc3RvcmVkIGluc2lkZSBhbiBhcmNoaXZlLiAgVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiBpcyBzaWduaWZpY2FudGx5IGZhc3RlcgorYW5kIGNhbiBiZSB3cmFwcGVkIGluIGEgOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmAgb2JqZWN0IGZvciBtb3JlIHNwZWVkdXBzLiAgSXQKK2Fsc28gc29sdmVzIGFuIGlzc3VlIHdoZXJlIGludGVybGVhdmVkIGNhbGxzIHRvICpyZWFkKiBhbmQgKnJlYWRsaW5lKiBnYXZlIHRoZQord3JvbmcgcmVzdWx0cy4KKworKFBhdGNoIHN1Ym1pdHRlZCBieSBOaXIgQWlkZXMgaW4gOmlzc3VlOmA3NjEwYC4pCisKK3RhcmZpbGUKKy0tLS0tLS0KKworVGhlIDpjbGFzczpgfnRhcmZpbGUuVGFyRmlsZWAgY2xhc3MgY2FuIG5vdyBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLiAgSW4KK2FkZGl0aW9uLCBpdHMgOm1ldGg6YH50YXJmaWxlLlRhckZpbGUuYWRkYCBtZXRob2QgaGFzIGEgbmV3IG9wdGlvbiwgKmZpbHRlciosCit0aGF0IGNvbnRyb2xzIHdoaWNoIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgYXJjaGl2ZSBhbmQgYWxsb3dzIHRoZSBmaWxlIG1ldGFkYXRhCit0byBiZSBlZGl0ZWQuCisKK1RoZSBuZXcgKmZpbHRlciogb3B0aW9uIHJlcGxhY2VzIHRoZSBvbGRlciwgbGVzcyBmbGV4aWJsZSAqZXhjbHVkZSogcGFyYW1ldGVyCit3aGljaCBpcyBub3cgZGVwcmVjYXRlZC4gIElmIHNwZWNpZmllZCwgdGhlIG9wdGlvbmFsICpmaWx0ZXIqIHBhcmFtZXRlciBuZWVkcyB0bworYmUgYSA6dGVybTpga2V5d29yZCBhcmd1bWVudGAuICBUaGUgdXNlci1zdXBwbGllZCBmaWx0ZXIgZnVuY3Rpb24gYWNjZXB0cyBhCis6Y2xhc3M6YH50YXJmaWxlLlRhckluZm9gIG9iamVjdCBhbmQgcmV0dXJucyBhbiB1cGRhdGVkCis6Y2xhc3M6YH50YXJmaWxlLlRhckluZm9gIG9iamVjdCwgb3IgaWYgaXQgd2FudHMgdGhlIGZpbGUgdG8gYmUgZXhjbHVkZWQsIHRoZQorZnVuY3Rpb24gY2FuIHJldHVybiAqTm9uZSo6OgorCisgICAgPj4+IGltcG9ydCB0YXJmaWxlLCBnbG9iCisKKyAgICA+Pj4gZGVmIG15ZmlsdGVyKHRhcmluZm8pOgorICAgICAgICAgICBpZiB0YXJpbmZvLmlzZmlsZSgpOiAgICAgICAgICAgICAjIG9ubHkgc2F2ZSByZWFsIGZpbGVzCisgICAgICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9ICdtb250eScgICAgICMgcmVkYWN0IHRoZSB1c2VyIG5hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gdGFyaW5mbworCisgICAgPj4+IHdpdGggdGFyZmlsZS5vcGVuKG5hbWU9J215YXJjaGl2ZS50YXIuZ3onLCBtb2RlPSd3Omd6JykgYXMgdGY6CisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZ2xvYi5nbG9iKCcqLnR4dCcpOgorICAgICAgICAgICAgICAgIHRmLmFkZChmaWxlbmFtZSwgZmlsdGVyPW15ZmlsdGVyKQorICAgICAgICAgICAgdGYubGlzdCgpCisgICAgLXJ3LXItLXItLSBtb250eS81MDEgICAgICAgIDkwMiAyMDExLTAxLTI2IDE3OjU5OjExIGFubm90YXRpb25zLnR4dAorICAgIC1ydy1yLS1yLS0gbW9udHkvNTAxICAgICAgICAxMjMgMjAxMS0wMS0yNiAxNzo1OToxMSBnZW5lcmFsX3F1ZXN0aW9ucy50eHQKKyAgICAtcnctci0tci0tIG1vbnR5LzUwMSAgICAgICAzNTE0IDIwMTEtMDEtMjYgMTc6NTk6MTEgcHJpb24udHh0CisgICAgLXJ3LXItLXItLSBtb250eS81MDEgICAgICAgIDEyNCAyMDExLTAxLTI2IDE3OjU5OjExIHB5X3RvZG8udHh0CisgICAgLXJ3LXItLXItLSBtb250eS81MDEgICAgICAgMTM5OSAyMDExLTAxLTI2IDE3OjU5OjExIHNlbWFwaG9yZV9ub3Rlcy50eHQKKworKFByb3Bvc2VkIGJ5IFRhcmVrIFppYWTDqSBhbmQgaW1wbGVtZW50ZWQgYnkgTGFycyBHdXN0w6RiZWwgaW4gOmlzc3VlOmA2ODU2YC4pCisKK2hhc2hsaWIKKy0tLS0tLS0KKworVGhlIDptb2Q6YGhhc2hsaWJgIG1vZHVsZSBoYXMgdHdvIG5ldyBjb25zdGFudCBhdHRyaWJ1dGVzIGxpc3RpbmcgdGhlIGhhc2hpbmcKK2FsZ29yaXRobXMgZ3VhcmFudGVlZCB0byBiZSBwcmVzZW50IGluIGFsbCBpbXBsZW1lbnRhdGlvbnMgYW5kIHRob3NlIGF2YWlsYWJsZQorb24gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb246OgorCisgICAgPj4+IGltcG9ydCBoYXNobGliCisKKyAgICA+Pj4gaGFzaGxpYi5hbGdvcml0aG1zX2d1YXJhbnRlZWQKKyAgICB7J3NoYTEnLCAnc2hhMjI0JywgJ3NoYTM4NCcsICdzaGEyNTYnLCAnc2hhNTEyJywgJ21kNSd9CisKKyAgICA+Pj4gaGFzaGxpYi5hbGdvcml0aG1zX2F2YWlsYWJsZQorICAgIHsnbWQyJywgJ1NIQTI1NicsICdTSEE1MTInLCAnZHNhV2l0aFNIQScsICdtZGMyJywgJ1NIQTIyNCcsICdNRDQnLCAnc2hhMjU2JywKKyAgICAnc2hhNTEyJywgJ3JpcGVtZDE2MCcsICdTSEExJywgJ01EQzInLCAnU0hBJywgJ1NIQTM4NCcsICdNRDInLAorICAgICdlY2RzYS13aXRoLVNIQTEnLCdtZDQnLCAnbWQ1JywgJ3NoYTEnLCAnRFNBLVNIQScsICdzaGEyMjQnLAorICAgICdkc2FFbmNyeXB0aW9uJywgJ0RTQScsICdSSVBFTUQxNjAnLCAnc2hhJywgJ01ENScsICdzaGEzODQnfQorCisoU3VnZ2VzdGVkIGJ5IENhcmwgQ2hlbmV0IGluIDppc3N1ZTpgNzQxOGAuKQorCithc3QKKy0tLQorCitUaGUgOm1vZDpgYXN0YCBtb2R1bGUgaGFzIGEgd29uZGVyZnVsIGEgZ2VuZXJhbC1wdXJwb3NlIHRvb2wgZm9yIHNhZmVseQorZXZhbHVhdGluZyBleHByZXNzaW9uIHN0cmluZ3MgdXNpbmcgdGhlIFB5dGhvbiBsaXRlcmFsCitzeW50YXguICBUaGUgOmZ1bmM6YGFzdC5saXRlcmFsX2V2YWxgIGZ1bmN0aW9uIHNlcnZlcyBhcyBhIHNlY3VyZSBhbHRlcm5hdGl2ZSB0bwordGhlIGJ1aWx0aW4gOmZ1bmM6YGV2YWxgIGZ1bmN0aW9uIHdoaWNoIGlzIGVhc2lseSBhYnVzZWQuICBQeXRob24gMy4yIGFkZHMKKzpjbGFzczpgYnl0ZXNgIGFuZCA6Y2xhc3M6YHNldGAgbGl0ZXJhbHMgdG8gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIHR5cGVzOgorc3RyaW5ncywgYnl0ZXMsIG51bWJlcnMsIHR1cGxlcywgbGlzdHMsIGRpY3RzLCBzZXRzLCBib29sZWFucywgYW5kIE5vbmUuCisKKzo6CisKKyAgICA+Pj4gZnJvbSBhc3QgaW1wb3J0IGxpdGVyYWxfZXZhbAorCisgICAgPj4+IHJlcXVlc3QgPSAieydyZXEnOiAzLCAnZnVuYyc6ICdwb3cnLCAnYXJncyc6ICgyLCAwLjUpfSIKKyAgICA+Pj4gbGl0ZXJhbF9ldmFsKHJlcXVlc3QpCisgICAgeydhcmdzJzogKDIsIDAuNSksICdyZXEnOiAzLCAnZnVuYyc6ICdwb3cnfQorCisgICAgPj4+IHJlcXVlc3QgPSAib3Muc3lzdGVtKCdkbyBzb21ldGhpbmcgaGFybWZ1bCcpIgorICAgID4+PiBsaXRlcmFsX2V2YWwocmVxdWVzdCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBtYWxmb3JtZWQgbm9kZSBvciBzdHJpbmc6IDxfYXN0LkNhbGwgb2JqZWN0IGF0IDB4MTAxNzM5YTEwPgorCisoSW1wbGVtZW50ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gYW5kIEdlb3JnIEJyYW5kbC4pCisKK29zCistLQorCitEaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMgdXNlIHZhcmlvdXMgZW5jb2RpbmdzIGZvciBmaWxlbmFtZXMgYW5kIGVudmlyb25tZW50Cit2YXJpYWJsZXMuICBUaGUgOm1vZDpgb3NgIG1vZHVsZSBwcm92aWRlcyB0d28gbmV3IGZ1bmN0aW9ucywKKzpmdW5jOmB+b3MuZnNlbmNvZGVgIGFuZCA6ZnVuYzpgfm9zLmZzZGVjb2RlYCwgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZworZmlsZW5hbWVzOgorCis+Pj4gZmlsZW5hbWUgPSAnU2VoZW5zd8O8cmRpZ2tlaXRlbicKKz4+PiBvcy5mc2VuY29kZShmaWxlbmFtZSkKK2InU2VoZW5zd1x4YzNceGJjcmRpZ2tlaXRlbicKKworU29tZSBvcGVyYXRpbmcgc3lzdGVtcyBhbGxvdyBkaXJlY3QgYWNjZXNzIHRvIGVuY29kZWQgYnl0ZXMgaW4gdGhlCitlbnZpcm9ubWVudC4gIElmIHNvLCB0aGUgOmF0dHI6YG9zLnN1cHBvcnRzX2J5dGVzX2Vudmlyb25gIGNvbnN0YW50IHdpbGwgYmUKK3RydWUuCisKK0ZvciBkaXJlY3QgYWNjZXNzIHRvIGVuY29kZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIChpZiBhdmFpbGFibGUpLAordXNlIHRoZSBuZXcgOmZ1bmM6YG9zLmdldGVudmJgIGZ1bmN0aW9uIG9yIHVzZSA6ZGF0YTpgb3MuZW52aXJvbmJgCit3aGljaCBpcyBhIGJ5dGVzIHZlcnNpb24gb2YgOmRhdGE6YG9zLmVudmlyb25gLgorCisoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIuKQorCitzaHV0aWwKKy0tLS0tLQorCitUaGUgOmZ1bmM6YHNodXRpbC5jb3B5dHJlZWAgZnVuY3Rpb24gaGFzIHR3byBuZXcgb3B0aW9uczoKKworKiAqaWdub3JlX2RhbmdsaW5nX3N5bWxpbmtzKjogd2hlbiBgYHN5bWxpbmtzPUZhbHNlYGAgc28gdGhhdCB0aGUgZnVuY3Rpb24KKyAgY29waWVzIGEgZmlsZSBwb2ludGVkIHRvIGJ5IGEgc3ltbGluaywgbm90IHRoZSBzeW1saW5rIGl0c2VsZi4gVGhpcyBvcHRpb24KKyAgd2lsbCBzaWxlbmNlIHRoZSBlcnJvciByYWlzZWQgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdC4KKworKiAqY29weV9mdW5jdGlvbio6IGlzIGEgY2FsbGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29weSBmaWxlcy4KKyAgOmZ1bmM6YHNodXRpbC5jb3B5MmAgaXMgdXNlZCBieSBkZWZhdWx0LgorCisoQ29udHJpYnV0ZWQgYnkgVGFyZWsgWmlhZMOpLikKKworSW4gYWRkaXRpb24sIHRoZSA6bW9kOmBzaHV0aWxgIG1vZHVsZSBub3cgc3VwcG9ydHMgOnJlZjpgYXJjaGl2aW5nIG9wZXJhdGlvbnMKKzxhcmNoaXZpbmctb3BlcmF0aW9ucz5gIGZvciB6aXBmaWxlcywgdW5jb21wcmVzc2VkIHRhcmZpbGVzLCBnemlwcGVkIHRhcmZpbGVzLAorYW5kIGJ6aXBwZWQgdGFyZmlsZXMuICBBbmQgdGhlcmUgYXJlIGZ1bmN0aW9ucyBmb3IgcmVnaXN0ZXJpbmcgYWRkaXRpb25hbAorYXJjaGl2aW5nIGZpbGUgZm9ybWF0cyAoc3VjaCBhcyB4eiBjb21wcmVzc2VkIHRhcmZpbGVzIG9yIGN1c3RvbSBmb3JtYXRzKS4KKworVGhlIHByaW5jaXBhbCBmdW5jdGlvbnMgYXJlIDpmdW5jOmB+c2h1dGlsLm1ha2VfYXJjaGl2ZWAgYW5kCis6ZnVuYzpgfnNodXRpbC51bnBhY2tfYXJjaGl2ZWAuICBCeSBkZWZhdWx0LCBib3RoIG9wZXJhdGUgb24gdGhlIGN1cnJlbnQKK2RpcmVjdG9yeSAod2hpY2ggY2FuIGJlIHNldCBieSA6ZnVuYzpgb3MuY2hkaXJgKSBhbmQgb24gYW55IHN1Yi1kaXJlY3Rvcmllcy4KK1RoZSBhcmNoaXZlIGZpbGVuYW1lIG5lZWRzIHRvIGJlIHNwZWNpZmllZCB3aXRoIGEgZnVsbCBwYXRobmFtZS4gIFRoZSBhcmNoaXZpbmcKK3N0ZXAgaXMgbm9uLWRlc3RydWN0aXZlICh0aGUgb3JpZ2luYWwgZmlsZXMgYXJlIGxlZnQgdW5jaGFuZ2VkKS4KKworOjoKKworICAgID4+PiBpbXBvcnQgc2h1dGlsLCBwcHJpbnQKKworICAgID4+PiBvcy5jaGRpcignbXlkYXRhJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2UgdG8gdGhlIHNvdXJjZSBkaXJlY3RvcnkKKyAgICA+Pj4gZiA9IHNodXRpbC5tYWtlX2FyY2hpdmUoJy92YXIvYmFja3VwL215ZGF0YScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aXAnKSAgICAgICAgICAgICAgICAgICAjIGFyY2hpdmUgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisgICAgPj4+IGYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG5hbWUgb2YgYXJjaGl2ZQorICAgICcvdmFyL2JhY2t1cC9teWRhdGEuemlwJworICAgID4+PiBvcy5jaGRpcigndG1wJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGFuZ2UgdG8gYW4gdW5wYWNraW5nCisgICAgPj4+IHNodXRpbC51bnBhY2tfYXJjaGl2ZSgnL3Zhci9iYWNrdXAvbXlkYXRhLnppcCcpICAjIHJlY292ZXIgdGhlIGRhdGEKKworICAgID4+PiBwcHJpbnQucHByaW50KHNodXRpbC5nZXRfYXJjaGl2ZV9mb3JtYXRzKCkpICAgICAgIyBkaXNwbGF5IGtub3duIGZvcm1hdHMKKyAgICBbKCdienRhcicsICJiemlwMidlZCB0YXItZmlsZSIpLAorICAgICAoJ2d6dGFyJywgImd6aXAnZWQgdGFyLWZpbGUiKSwKKyAgICAgKCd0YXInLCAndW5jb21wcmVzc2VkIHRhciBmaWxlJyksCisgICAgICgnemlwJywgJ1pJUCBmaWxlJyldCisKKyAgICA+Pj4gc2h1dGlsLnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCAgICAgICAgICAgICAgICAgICMgcmVnaXN0ZXIgYSBuZXcgYXJjaGl2ZSBmb3JtYXQKKyAgICAgICAgICAgIG5hbWUgPSAneHonLAorICAgICAgICAgICAgZnVuY3Rpb24gPSB4ei5jb21wcmVzcywgICAgICAgICAgICAgICAgICAgICAgIyBjYWxsYWJsZSBhcmNoaXZpbmcgZnVuY3Rpb24KKyAgICAgICAgICAgIGV4dHJhX2FyZ3MgPSBbKCdsZXZlbCcsIDgpXSwgICAgICAgICAgICAgICAgICMgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbgorICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAneHogY29tcHJlc3Npb24nCisgICAgKQorCisoQ29udHJpYnV0ZWQgYnkgVGFyZWsgWmlhZMOpLikKKworc3FsaXRlMworLS0tLS0tLQorCitUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIHdhcyB1cGRhdGVkIHRvIHB5c3FsaXRlIHZlcnNpb24gMi42LjAuICBJdCBoYXMgdHdvIG5ldyBjYXBhYmlsaXRpZXMuCisKKyogVGhlIDphdHRyOmBzcWxpdGUzLkNvbm5lY3Rpb24uaW5fdHJhbnNpdGAgYXR0cmlidXRlIGlzIHRydWUgaWYgdGhlcmUgaXMgYW4KKyAgYWN0aXZlIHRyYW5zYWN0aW9uIGZvciB1bmNvbW1pdHRlZCBjaGFuZ2VzLgorCisqIFRoZSA6bWV0aDpgc3FsaXRlMy5Db25uZWN0aW9uLmVuYWJsZV9sb2FkX2V4dGVuc2lvbmAgYW5kCisgIDptZXRoOmBzcWxpdGUzLkNvbm5lY3Rpb24ubG9hZF9leHRlbnNpb25gIG1ldGhvZHMgYWxsb3dzIHlvdSB0byBsb2FkIFNRTGl0ZQorICBleHRlbnNpb25zIGZyb20gIi5zbyIgZmlsZXMuICBPbmUgd2VsbC1rbm93biBleHRlbnNpb24gaXMgdGhlIGZ1bGx0ZXh0LXNlYXJjaAorICBleHRlbnNpb24gZGlzdHJpYnV0ZWQgd2l0aCBTUUxpdGUuCisKKyhDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgYW5kIFNoYXNod2F0IEFuYW5kOyA6aXNzdWU6YDg4NDVgLikKKworaHRtbAorLS0tLQorCitBIG5ldyA6bW9kOmBodG1sYCBtb2R1bGUgd2FzIGludHJvZHVjZWQgd2l0aCBvbmx5IGEgc2luZ2xlIGZ1bmN0aW9uLAorOmZ1bmM6YH5odG1sLmVzY2FwZWAsIHdoaWNoIGlzIHVzZWQgZm9yIGVzY2FwaW5nIHJlc2VydmVkIGNoYXJhY3RlcnMgZnJvbSBIVE1MCittYXJrdXA6CisKKz4+PiBpbXBvcnQgaHRtbAorPj4+IGh0bWwuZXNjYXBlKCd4ID4gMiAmJiB4IDwgNycpCisneCAmZ3Q7IDIgJmFtcDsmYW1wOyB4ICZsdDsgNycKKworc29ja2V0CistLS0tLS0KKworVGhlIDptb2Q6YHNvY2tldGAgbW9kdWxlIGhhcyB0d28gbmV3IGltcHJvdmVtZW50cy4KKworKiBTb2NrZXQgb2JqZWN0cyBub3cgaGF2ZSBhIDptZXRoOmB+c29ja2V0LnNvY2tldC5kZXRhY2goKWAgbWV0aG9kIHdoaWNoIHB1dHMKKyAgdGhlIHNvY2tldCBpbnRvIGNsb3NlZCBzdGF0ZSB3aXRob3V0IGFjdHVhbGx5IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZQorICBkZXNjcmlwdG9yLiAgVGhlIGxhdHRlciBjYW4gdGhlbiBiZSByZXVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLgorICAoQWRkZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgODUyNGAuKQorCisqIDpmdW5jOmBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb25gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sCisgIHRvIHVuY29uZGl0aW9uYWxseSBjb25zdW1lIDpleGM6YHNvY2tldC5lcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlCisgIHNvY2tldCB3aGVuIGRvbmUuCisgIChDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoDsgOmlzc3VlOmA5Nzk0YC4pCisKK3NzbAorLS0tCisKK1RoZSA6bW9kOmBzc2xgIG1vZHVsZSBhZGRlZCBhIG51bWJlciBvZiBmZWF0dXJlcyB0byBzYXRpc2Z5IGNvbW1vbiByZXF1aXJlbWVudHMKK2ZvciBzZWN1cmUgKGVuY3J5cHRlZCwgYXV0aGVudGljYXRlZCkgaW50ZXJuZXQgY29ubmVjdGlvbnM6CisKKyogQSBuZXcgY2xhc3MsIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCwgc2VydmVzIGFzIGEgY29udGFpbmVyIGZvciBwZXJzaXN0ZW50CisgIFNTTCBkYXRhLCBzdWNoIGFzIHByb3RvY29sIHNldHRpbmdzLCBjZXJ0aWZpY2F0ZXMsIHByaXZhdGUga2V5cywgYW5kIHZhcmlvdXMKKyAgb3RoZXIgb3B0aW9ucy4gSXQgaW5jbHVkZXMgYSA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LndyYXBfc29ja2V0YCBmb3IgY3JlYXRpbmcKKyAgYW4gU1NMIHNvY2tldCBmcm9tIGFuIFNTTCBjb250ZXh0LgorCisqIEEgbmV3IGZ1bmN0aW9uLCA6ZnVuYzpgc3NsLm1hdGNoX2hvc3RuYW1lYCwgc3VwcG9ydHMgc2VydmVyIGlkZW50aXR5CisgIHZlcmlmaWNhdGlvbiBmb3IgaGlnaGVyLWxldmVsIHByb3RvY29scyBieSBpbXBsZW1lbnRpbmcgdGhlIHJ1bGVzIG9mIEhUVFBTCisgIChmcm9tIDpyZmM6YDI4MThgKSB3aGljaCBhcmUgYWxzbyBzdWl0YWJsZSBmb3Igb3RoZXIgcHJvdG9jb2xzLgorCisqIFRoZSA6ZnVuYzpgc3NsLndyYXBfc29ja2V0YCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBub3cgdGFrZXMgYSAqY2lwaGVycyoKKyAgYXJndW1lbnQuICBUaGUgKmNpcGhlcnMqIHN0cmluZyBsaXN0cyB0aGUgYWxsb3dlZCBlbmNyeXB0aW9uIGFsZ29yaXRobXMgdXNpbmcKKyAgdGhlIGZvcm1hdCBkZXNjcmliZWQgaW4gdGhlIGBPcGVuU1NMIGRvY3VtZW50YXRpb24KKyAgPGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvZG9jcy9hcHBzL2NpcGhlcnMuaHRtbCNDSVBIRVJfTElTVF9GT1JNQVQ+YF9fLgorCisqIFdoZW4gbGlua2VkIGFnYWluc3QgcmVjZW50IHZlcnNpb25zIG9mIE9wZW5TU0wsIHRoZSA6bW9kOmBzc2xgIG1vZHVsZSBub3cKKyAgc3VwcG9ydHMgdGhlIFNlcnZlciBOYW1lIEluZGljYXRpb24gZXh0ZW5zaW9uIHRvIHRoZSBUTFMgcHJvdG9jb2wsIGFsbG93aW5nCisgIG11bHRpcGxlICJ2aXJ0dWFsIGhvc3RzIiB1c2luZyBkaWZmZXJlbnQgY2VydGlmaWNhdGVzIG9uIGEgc2luZ2xlIElQIHBvcnQuCisgIFRoaXMgZXh0ZW5zaW9uIGlzIG9ubHkgc3VwcG9ydGVkIGluIGNsaWVudCBtb2RlLCBhbmQgaXMgYWN0aXZhdGVkIGJ5IHBhc3NpbmcKKyAgdGhlICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IHRvIDptZXRoOmBzc2wuU1NMQ29udGV4dC53cmFwX3NvY2tldGAuCisKKyogVmFyaW91cyBvcHRpb25zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgOm1vZDpgc3NsYCBtb2R1bGUsIHN1Y2ggYXMKKyAgOmRhdGE6YH5zc2wuT1BfTk9fU1NMdjJgIHdoaWNoIGRpc2FibGVzIHRoZSBpbnNlY3VyZSBhbmQgb2Jzb2xldGUgU1NMdjIKKyAgcHJvdG9jb2wuCisKKyogVGhlIGV4dGVuc2lvbiBub3cgbG9hZHMgYWxsIHRoZSBPcGVuU1NMIGNpcGhlcnMgYW5kIGRpZ2VzdCBhbGdvcml0aG1zLiAgSWYKKyAgc29tZSBTU0wgY2VydGlmaWNhdGVzIGNhbm5vdCBiZSB2ZXJpZmllZCwgdGhleSBhcmUgcmVwb3J0ZWQgYXMgYW4gInVua25vd24KKyAgYWxnb3JpdGhtIiBlcnJvci4KKworKiBUaGUgdmVyc2lvbiBvZiBPcGVuU1NMIGJlaW5nIHVzZWQgaXMgbm93IGFjY2Vzc2libGUgdXNpbmcgdGhlIG1vZHVsZQorICBhdHRyaWJ1dGVzIDpkYXRhOmBzc2wuT1BFTlNTTF9WRVJTSU9OYCAoYSBzdHJpbmcpLAorICA6ZGF0YTpgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPYCAoYSA1LXR1cGxlKSwgYW5kCisgIDpkYXRhOmBzc2wuT1BFTlNTTF9WRVJTSU9OX05VTUJFUmAgKGFuIGludGVnZXIpLgorCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmA4ODUwYCwgOmlzc3VlOmAxNTg5YCwgOmlzc3VlOmA4MzIyYCwKKzppc3N1ZTpgNTYzOWAsIDppc3N1ZTpgNDg3MGAsIDppc3N1ZTpgODQ4NGAsIGFuZCA6aXNzdWU6YDgzMjFgLikKKworbm50cAorLS0tLQorCitUaGUgOm1vZDpgbm50cGxpYmAgbW9kdWxlIGhhcyBhIHJldmFtcGVkIGltcGxlbWVudGF0aW9uIHdpdGggYmV0dGVyIGJ5dGVzIGFuZAordGV4dCBzZW1hbnRpY3MgYXMgd2VsbCBhcyBtb3JlIHByYWN0aWNhbCBBUElzLiAgVGhlc2UgaW1wcm92ZW1lbnRzIGJyZWFrCitjb21wYXRpYmlsaXR5IHdpdGggdGhlIG5udHBsaWIgdmVyc2lvbiBpbiBQeXRob24gMy4xLCB3aGljaCB3YXMgcGFydGx5CitkeXNmdW5jdGlvbmFsIGluIGl0c2VsZi4KKworU3VwcG9ydCBmb3Igc2VjdXJlIGNvbm5lY3Rpb25zIHRocm91Z2ggYm90aCBpbXBsaWNpdCAodXNpbmcKKzpjbGFzczpgbm50cGxpYi5OTlRQX1NTTGApIGFuZCBleHBsaWNpdCAodXNpbmcgOm1ldGg6YG5udHBsaWIuTk5UUC5zdGFydHRsc2ApCitUTFMgaGFzIGFsc28gYmVlbiBhZGRlZC4KKworKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgOTM2MGAgYW5kIEFuZHJldyBWYW50IGluIDppc3N1ZTpgMTkyNmAuKQorCitjZXJ0aWZpY2F0ZXMKKy0tLS0tLS0tLS0tLQorCis6Y2xhc3M6YGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbmAsIDpjbGFzczpgdXJsbGliLnJlcXVlc3QuSFRUUFNIYW5kbGVyYAorYW5kIDpmdW5jOmB1cmxsaWIucmVxdWVzdC51cmxvcGVuYCBub3cgdGFrZSBvcHRpb25hbCBhcmd1bWVudHMgdG8gYWxsb3cgZm9yCitzZXJ2ZXIgY2VydGlmaWNhdGUgY2hlY2tpbmcgYWdhaW5zdCBhIHNldCBvZiBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcywKK2FzIHJlY29tbWVuZGVkIGluIHB1YmxpYyB1c2VzIG9mIEhUVFBTLgorCisoQWRkZWQgYnkgQW50b2luZSBQaXRyb3UsIDppc3N1ZTpgOTAwM2AuKQorCitpbWFwbGliCistLS0tLS0tCisKK1N1cHBvcnQgZm9yIGV4cGxpY2l0IFRMUyBvbiBzdGFuZGFyZCBJTUFQNCBjb25uZWN0aW9ucyBoYXMgYmVlbiBhZGRlZCB0aHJvdWdoCit0aGUgbmV3IDptb2Q6YGltYXBsaWIuSU1BUDQuc3RhcnR0bHNgIG1ldGhvZC4KKworKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8gTS4gQ2F0dWNjaSBhbmQgQW50b2luZSBQaXRyb3UsIDppc3N1ZTpgNDQ3MWAuKQorCitodHRwLmNsaWVudAorLS0tLS0tLS0tLS0KKworVGhlcmUgd2VyZSBhIG51bWJlciBvZiBzbWFsbCBBUEkgaW1wcm92ZW1lbnRzIGluIHRoZSA6bW9kOmBodHRwLmNsaWVudGAgbW9kdWxlLgorVGhlIG9sZC1zdHlsZSBIVFRQIDAuOSBzaW1wbGUgcmVzcG9uc2VzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkIGFuZCB0aGUgKnN0cmljdCoKK3BhcmFtZXRlciBpcyBkZXByZWNhdGVkIGluIGFsbCBjbGFzc2VzLgorCitUaGUgOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gIGFuZAorOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uYCBjbGFzc2VzIG5vdyBoYXZlIGEgKnNvdXJjZV9hZGRyZXNzKgorcGFyYW1ldGVyIGZvciBhIChob3N0LCBwb3J0KSB0dXBsZSBpbmRpY2F0aW5nIHdoZXJlIHRoZSBIVFRQIGNvbm5lY3Rpb24gaXMgbWFkZQorZnJvbS4KKworU3VwcG9ydCBmb3IgY2VydGlmaWNhdGUgY2hlY2tpbmcgYW5kIEhUVFBTIHZpcnR1YWwgaG9zdHMgd2VyZSBhZGRlZCB0bworOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uYC4KKworVGhlIDptZXRoOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24ucmVxdWVzdGAgbWV0aG9kIG9uIGNvbm5lY3Rpb24gb2JqZWN0cworYWxsb3dlZCBhbiBvcHRpb25hbCAqYm9keSogYXJndW1lbnQgc28gdGhhdCBhIDp0ZXJtOmBmaWxlIG9iamVjdGAgY291bGQgYmUgdXNlZAordG8gc3VwcGx5IHRoZSBjb250ZW50IG9mIHRoZSByZXF1ZXN0LiAgQ29udmVuaWVudGx5LCB0aGUgKmJvZHkqIGFyZ3VtZW50IG5vdworYWxzbyBhY2NlcHRzIGFuIDp0ZXJtOmBpdGVyYWJsZWAgb2JqZWN0IHNvIGxvbmcgYXMgaXQgaW5jbHVkZXMgYW4gZXhwbGljaXQKK2BgQ29udGVudC1MZW5ndGhgYCBoZWFkZXIuICBUaGlzIGV4dGVuZGVkIGludGVyZmFjZSBpcyBtdWNoIG1vcmUgZmxleGlibGUgdGhhbgorYmVmb3JlLgorCitUbyBlc3RhYmxpc2ggYW4gSFRUUFMgY29ubmVjdGlvbiB0aHJvdWdoIGEgcHJveHkgc2VydmVyLCB0aGVyZSBpcyBhIG5ldworOm1ldGg6YH5odHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbi5zZXRfdHVubmVsYCBtZXRob2QgdGhhdCBzZXRzIHRoZSBob3N0IGFuZAorcG9ydCBmb3IgSFRUUCBDb25uZWN0IHR1bm5lbGluZy4KKworVG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIDptb2Q6YGh0dHAuc2VydmVyYCwgdGhlIEhUVFAgY2xpZW50IGxpYnJhcnkgbm93IGFsc28KK2VuY29kZXMgaGVhZGVycyB3aXRoIElTTy04ODU5LTEgKExhdGluLTEpIGVuY29kaW5nLiAgSXQgd2FzIGFscmVhZHkgZG9pbmcgdGhhdAorZm9yIGluY29taW5nIGhlYWRlcnMsIHNvIG5vdyB0aGUgYmVoYXZpb3IgaXMgY29uc2lzdGVudCBmb3IgYm90aCBpbmNvbWluZyBhbmQKK291dGdvaW5nIHRyYWZmaWMuIChTZWUgd29yayBieSBBcm1pbiBSb25hY2hlciBpbiA6aXNzdWU6YDEwOTgwYC4pCisKK3VuaXR0ZXN0CistLS0tLS0tLQorCitUaGUgdW5pdHRlc3QgbW9kdWxlIGhhcyBhIG51bWJlciBvZiBpbXByb3ZlbWVudHMgc3VwcG9ydGluZyB0ZXN0IGRpc2NvdmVyeSBmb3IKK3BhY2thZ2VzLCBlYXNpZXIgZXhwZXJpbWVudGF0aW9uIGF0IHRoZSBpbnRlcmFjdGl2ZSBwcm9tcHQsIG5ldyB0ZXN0Y2FzZQorbWV0aG9kcywgaW1wcm92ZWQgZGlhZ25vc3RpYyBtZXNzYWdlcyBmb3IgdGVzdCBmYWlsdXJlcywgYW5kIGJldHRlciBtZXRob2QKK25hbWVzLgorCisqIFRoZSBjb21tYW5kLWxpbmUgY2FsbCBgYHB5dGhvbiAtbSB1bml0dGVzdGBgIGNhbiBub3cgYWNjZXB0IGZpbGUgcGF0aHMKKyAgaW5zdGVhZCBvZiBtb2R1bGUgbmFtZXMgZm9yIHJ1bm5pbmcgc3BlY2lmaWMgdGVzdHMgKDppc3N1ZTpgMTA2MjBgKS4gIFRoZSBuZXcKKyAgdGVzdCBkaXNjb3ZlcnkgY2FuIGZpbmQgdGVzdHMgd2l0aGluIHBhY2thZ2VzLCBsb2NhdGluZyBhbnkgdGVzdCBpbXBvcnRhYmxlCisgIGZyb20gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuICBUaGUgdG9wLWxldmVsIGRpcmVjdG9yeSBjYW4gYmUgc3BlY2lmaWVkIHdpdGgKKyAgdGhlIGAtdGAgb3B0aW9uLCBhIHBhdHRlcm4gZm9yIG1hdGNoaW5nIGZpbGVzIHdpdGggYGAtcGBgLCBhbmQgYSBkaXJlY3RvcnkgdG8KKyAgc3RhcnQgZGlzY292ZXJ5IHdpdGggYGAtc2BgOjoKKworICAgICQgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIC1zIG15X3Byb2pfZGlyIC1wIF90ZXN0LnB5CisKKyAgKENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgRm9vcmQuKQorCisqIEV4cGVyaW1lbnRhdGlvbiBhdCB0aGUgaW50ZXJhY3RpdmUgcHJvbXB0IGlzIG5vdyBlYXNpZXIgYmVjYXVzZSB0aGUKKyAgOmNsYXNzOmB1bml0dGVzdC5jYXNlLlRlc3RDYXNlYCBjbGFzcyBjYW4gbm93IGJlIGluc3RhbnRpYXRlZCB3aXRob3V0CisgIGFyZ3VtZW50czoKKworICA+Pj4gVGVzdENhc2UoKS5hc3NlcnRFcXVhbChwb3coMiwgMyksIDgpCisKKyAgKENvbnRyaWJ1dGVkIGJ5IE1pY2hhZWwgRm9vcmQuKQorCisqIFRoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIGhhcyB0d28gbmV3IG1ldGhvZHMsCisgIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0V2FybnNgIGFuZAorICA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFdhcm5zUmVnZXhgIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gd2FybmluZyB0eXBlCisgIGlzIHRyaWdnZXJlZCBieSB0aGUgY29kZSB1bmRlciB0ZXN0OjoKKworICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgbGVnYWN5X2Z1bmN0aW9uKCdYWVonKQorCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSwgOmlzc3VlOmA5NzU0YC4pCisKKyAgQW5vdGhlciBuZXcgbWV0aG9kLCA6bWV0aDpgfnVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydENvdW50RXF1YWxgIGlzIHVzZWQgdG8KKyAgY29tcGFyZSB0d28gaXRlcmFibGVzIHRvIGRldGVybWluZSBpZiB0aGVpciBlbGVtZW50IGNvdW50cyBhcmUgZXF1YWwgKHdoZXRoZXIKKyAgdGhlIHNhbWUgZWxlbWVudHMgYXJlIHByZXNlbnQgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgcmVnYXJkbGVzcworICBvZiBvcmRlcik6OgorCisgICAgIGRlZiB0ZXN0X2FuYWdyYW0oc2VsZik6CisgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoJ2FsZ29yaXRobScsICdsb2dhcml0aG0nKQorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCisKKyogQSBwcmluY2lwYWwgZmVhdHVyZSBvZiB0aGUgdW5pdHRlc3QgbW9kdWxlIGlzIGFuIGVmZm9ydCB0byBwcm9kdWNlIG1lYW5pbmdmdWwKKyAgZGlhZ25vc3RpY3Mgd2hlbiBhIHRlc3QgZmFpbHMuICBXaGVuIHBvc3NpYmxlLCB0aGUgZmFpbHVyZSBpcyByZWNvcmRlZCBhbG9uZworICB3aXRoIGEgZGlmZiBvZiB0aGUgb3V0cHV0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IGhlbHBmdWwgZm9yIGFuYWx5emluZyBsb2cgZmlsZXMKKyAgb2YgZmFpbGVkIHRlc3QgcnVucy4gSG93ZXZlciwgc2luY2UgZGlmZnMgY2FuIHNvbWV0aW1lIGJlIHZvbHVtaW5vdXMsIHRoZXJlIGlzCisgIGEgbmV3IDphdHRyOmB+dW5pdHRlc3QuVGVzdENhc2UubWF4RGlmZmAgYXR0cmlidXRlIHRoYXQgc2V0cyBtYXhpbXVtIGxlbmd0aCBvZgorICBkaWZmcyBkaXNwbGF5ZWQuCisKKyogSW4gYWRkaXRpb24sIHRoZSBtZXRob2QgbmFtZXMgaW4gdGhlIG1vZHVsZSBoYXZlIHVuZGVyZ29uZSBhIG51bWJlciBvZiBjbGVhbi11cHMuCisKKyAgRm9yIGV4YW1wbGUsIDptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0UmVnZXhgIGlzIHRoZSBuZXcgbmFtZSBmb3IKKyAgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSZWdleHBNYXRjaGVzYCB3aGljaCB3YXMgbWlzbmFtZWQgYmVjYXVzZSB0aGUKKyAgdGVzdCB1c2VzIDpmdW5jOmByZS5zZWFyY2hgLCBub3QgOmZ1bmM6YHJlLm1hdGNoYC4gIE90aGVyIG1ldGhvZHMgdXNpbmcKKyAgcmVndWxhciBleHByZXNzaW9ucyBhcmUgbm93IG5hbWVkIHVzaW5nIHNob3J0IGZvcm0gIlJlZ2V4IiBpbiBwcmVmZXJlbmNlIHRvCisgICJSZWdleHAiIC0tIHRoaXMgbWF0Y2hlcyB0aGUgbmFtZXMgdXNlZCBpbiBvdGhlciB1bml0dGVzdCBpbXBsZW1lbnRhdGlvbnMsCisgIG1hdGNoZXMgUHl0aG9uJ3Mgb2xkIG5hbWUgZm9yIHRoZSA6bW9kOmByZWAgbW9kdWxlLCBhbmQgaXQgaGFzIHVuYW1iaWd1b3VzCisgIGNhbWVsLWNhc2luZy4KKworICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYW5kIGltcGxlbWVudGVkIGJ5IEV6aW8gTWVsb3R0aS4pCisKKyogVG8gaW1wcm92ZSBjb25zaXN0ZW5jeSwgc29tZSBsb25nLXN0YW5kaW5nIG1ldGhvZCBhbGlhc2VzIGFyZSBiZWluZworICBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBwcmVmZXJyZWQgbmFtZXM6CisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIE9sZCBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVmZXJyZWQgTmFtZQorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgOm1ldGg6YGFzc2VydF9gICAgICAgICAgICAgICAgICAgIDptZXRoOmAuYXNzZXJ0VHJ1ZWAKKyAgIDptZXRoOmBhc3NlcnRFcXVhbHNgICAgICAgICAgICAgICA6bWV0aDpgLmFzc2VydEVxdWFsYAorICAgOm1ldGg6YGFzc2VydE5vdEVxdWFsc2AgICAgICAgICAgIDptZXRoOmAuYXNzZXJ0Tm90RXF1YWxgCisgICA6bWV0aDpgYXNzZXJ0QWxtb3N0RXF1YWxzYCAgICAgICAgOm1ldGg6YC5hc3NlcnRBbG1vc3RFcXVhbGAKKyAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbHNgICAgICA6bWV0aDpgLmFzc2VydE5vdEFsbW9zdEVxdWFsYAorICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIExpa2V3aXNlLCB0aGUgYGBUZXN0Q2FzZS5mYWlsKmBgIG1ldGhvZHMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4xIGFyZSBleHBlY3RlZAorICB0byBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjMuICBBbHNvIHNlZSB0aGUgOnJlZjpgZGVwcmVjYXRlZC1hbGlhc2VzYCBzZWN0aW9uIGluCisgIHRoZSA6bW9kOmB1bml0dGVzdGAgZG9jdW1lbnRhdGlvbi4KKworICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpOyA6aXNzdWU6YDk0MjRgLikKKworKiBUaGUgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXRgIG1ldGhvZCB3YXMgZGVwcmVjYXRlZAorICBiZWNhdXNlIGl0IHdhcyBtaXNpbXBsZW1lbnRlZCB3aXRoIHRoZSBhcmd1bWVudHMgaW4gdGhlIHdyb25nIG9yZGVyLiAgVGhpcworICBjcmVhdGVkIGhhcmQtdG8tZGVidWcgb3B0aWNhbCBpbGx1c2lvbnMgd2hlcmUgdGVzdHMgbGlrZQorICBgYFRlc3RDYXNlKCkuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6MSwgJ2InOjJ9LCB7J2EnOjF9KWBgIHdvdWxkIGZhaWwuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKKworcmFuZG9tCistLS0tLS0KKworVGhlIGludGVnZXIgbWV0aG9kcyBpbiB0aGUgOm1vZDpgcmFuZG9tYCBtb2R1bGUgbm93IGRvIGEgYmV0dGVyIGpvYiBvZiBwcm9kdWNpbmcKK3VuaWZvcm0gZGlzdHJpYnV0aW9ucy4gIFByZXZpb3VzbHksIHRoZXkgY29tcHV0ZWQgc2VsZWN0aW9ucyB3aXRoCitgYGludChuKnJhbmRvbSgpKWBgIHdoaWNoIGhhZCBhIHNsaWdodCBiaWFzIHdoZW5ldmVyICpuKiB3YXMgbm90IGEgcG93ZXIgb2YgdHdvLgorTm93LCBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBtYWRlIGZyb20gYSByYW5nZSB1cCB0byB0aGUgbmV4dCBwb3dlciBvZiB0d28gYW5kIGEKK3NlbGVjdGlvbiBpcyBrZXB0IG9ubHkgd2hlbiBpdCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIGBgMCA8PSB4IDwgbmBgLiAgVGhlCitmdW5jdGlvbnMgYW5kIG1ldGhvZHMgYWZmZWN0ZWQgYXJlIDpmdW5jOmB+cmFuZG9tLnJhbmRyYW5nZWAsCis6ZnVuYzpgfnJhbmRvbS5yYW5kaW50YCwgOmZ1bmM6YH5yYW5kb20uY2hvaWNlYCwgOmZ1bmM6YH5yYW5kb20uc2h1ZmZsZWAgYW5kCis6ZnVuYzpgfnJhbmRvbS5zYW1wbGVgLgorCisoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgOTAyNWAuKQorCitwb3BsaWIKKy0tLS0tLQorCis6Y2xhc3M6YH5wb3BsaWIuUE9QM19TU0xgIGNsYXNzIG5vdyBhY2NlcHRzIGEgKmNvbnRleHQqIHBhcmFtZXRlciwgd2hpY2ggaXMgYQorOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IGFsbG93aW5nIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsCitjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKQorc3RydWN0dXJlLgorCisoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6A7IDppc3N1ZTpgODgwN2AuKQorCithc3luY29yZQorLS0tLS0tLS0KKworOmNsYXNzOmBhc3luY29yZS5kaXNwYXRjaGVyYCBub3cgcHJvdmlkZXMgYQorOm1ldGg6YH5hc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9hY2NlcHRlZCgpYCBtZXRob2QKK3JldHVybmluZyBhIGAoc29jaywgYWRkcilgIHBhaXIgd2hpY2ggaXMgY2FsbGVkIHdoZW4gYSBjb25uZWN0aW9uIGhhcyBhY3R1YWxseQorYmVlbiBlc3RhYmxpc2hlZCB3aXRoIGEgbmV3IHJlbW90ZSBlbmRwb2ludC4gVGhpcyBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIGFzIGEKK3JlcGxhY2VtZW50IGZvciBvbGQgOm1ldGg6YH5hc3luY29yZS5kaXNwYXRjaGVyLmhhbmRsZV9hY2NlcHQoKWAgYW5kIGF2b2lkcwordGhlIHVzZXIgIHRvIGNhbGwgOm1ldGg6YH5hc3luY29yZS5kaXNwYXRjaGVyLmFjY2VwdCgpYCBkaXJlY3RseS4KKworKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgOyA6aXNzdWU6YDY3MDZgLikKKwordGVtcGZpbGUKKy0tLS0tLS0tCisKK1RoZSA6bW9kOmB0ZW1wZmlsZWAgbW9kdWxlIGhhcyBhIG5ldyBjb250ZXh0IG1hbmFnZXIsCis6Y2xhc3M6YH50ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnlgIHdoaWNoIHByb3ZpZGVzIGVhc3kgZGV0ZXJtaW5pc3RpYworY2xlYW51cCBvZiB0ZW1wb3JhcnkgZGlyZWN0b3JpZXM6OgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXJuYW1lOgorICAgICAgICBwcmludCgnY3JlYXRlZCB0ZW1wb3JhcnkgZGlyOicsIHRtcGRpcm5hbWUpCisKKyhDb250cmlidXRlZCBieSBOZWlsIFNjaGVtZW5hdWVyIGFuZCBOaWNrIENvZ2hsYW47IDppc3N1ZTpgNTE3OGAuKQorCitpbnNwZWN0CistLS0tLS0tCisKKyogVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBoYXMgYSBuZXcgZnVuY3Rpb24KKyAgOmZ1bmM6YH5pbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRlYCB0byBlYXNpbHkgaWRlbnRpZnkgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYQorICBnZW5lcmF0b3ItaXRlcmF0b3I6OgorCisgICAgPj4+IGZyb20gaW5zcGVjdCBpbXBvcnQgZ2V0Z2VuZXJhdG9yc3RhdGUKKyAgICA+Pj4gZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgJ2RlbW8nCisgICAgPj4+IGcgPSBnZW4oKQorICAgID4+PiBnZXRnZW5lcmF0b3JzdGF0ZShnKQorICAgICdHRU5fQ1JFQVRFRCcKKyAgICA+Pj4gbmV4dChnKQorICAgICdkZW1vJworICAgID4+PiBnZXRnZW5lcmF0b3JzdGF0ZShnKQorICAgICdHRU5fU1VTUEVOREVEJworICAgID4+PiBuZXh0KGcsIE5vbmUpCisgICAgPj4+IGdldGdlbmVyYXRvcnN0YXRlKGcpCisgICAgJ0dFTl9DTE9TRUQnCisKKyAgKENvbnRyaWJ1dGVkIGJ5IFJvZG9scGhvIEVja2hhcmR0IGFuZCBOaWNrIENvZ2hsYW4sIDppc3N1ZTpgMTAyMjBgLikKKworKiBUbyBzdXBwb3J0IGxvb2t1cHMgd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgYWN0aXZhdGluZyBhIGR5bmFtaWMgYXR0cmlidXRlLAorICB0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlIGhhcyBhIG5ldyBmdW5jdGlvbiwgOmZ1bmM6YH5pbnNwZWN0LmdldGF0dHJfc3RhdGljYC4KKyAgVW5saWtlIDpmdW5jOmBoYXNhdHRyYCwgdGhpcyBpcyBhIHRydWUgcmVhZC1vbmx5IHNlYXJjaCwgZ3VhcmFudGVlZCBub3QgdG8KKyAgY2hhbmdlIHN0YXRlIHdoaWxlIGl0IGlzIHNlYXJjaGluZzo6CisKKyAgICA+Pj4gY2xhc3MgQToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1J1bm5pbmcnKQorICAgICAgICAgICAgICAgIHJldHVybiAxMAorCisgICAgPj4+IGEgPSBBKCkKKyAgICA+Pj4gZ2V0YXR0cihhLCAnZicpCisgICAgUnVubmluZworICAgIDEwCisgICAgPj4+IGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoYSwgJ2YnKQorICAgIDxwcm9wZXJ0eSBvYmplY3QgYXQgMHgxMDIyYmQ3ODg+CisKKyAoQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBGb29yZC4pCisKK3B5ZG9jCistLS0tLQorCitUaGUgOm1vZDpgcHlkb2NgIG1vZHVsZSBub3cgcHJvdmlkZXMgYSBtdWNoLWltcHJvdmVkIFdlYiBzZXJ2ZXIgaW50ZXJmYWNlLCBhcword2VsbCBhcyBhIG5ldyBjb21tYW5kLWxpbmUgb3B0aW9uIGBgLWJgYCB0byBhdXRvbWF0aWNhbGx5IG9wZW4gYSBicm93c2VyIHdpbmRvdwordG8gZGlzcGxheSB0aGF0IHNlcnZlcjo6CisKKyAgICAkIHB5ZG9jMy4yIC1iCisKKyhDb250cmlidXRlZCBieSBSb24gQWRhbTsgOmlzc3VlOmAyMDAxYC4pCisKK2RpcworLS0tCisKK1RoZSA6bW9kOmBkaXNgIG1vZHVsZSBnYWluZWQgdHdvIG5ldyBmdW5jdGlvbnMgZm9yIGluc3BlY3RpbmcgY29kZSwKKzpmdW5jOmB+ZGlzLmNvZGVfaW5mb2AgYW5kIDpmdW5jOmB+ZGlzLnNob3dfY29kZWAuICBCb3RoIHByb3ZpZGUgZGV0YWlsZWQgY29kZQorb2JqZWN0IGluZm9ybWF0aW9uIGZvciB0aGUgc3VwcGxpZWQgZnVuY3Rpb24sIG1ldGhvZCwgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUKK29iamVjdC4gIFRoZSBmb3JtZXIgcmV0dXJucyBhIHN0cmluZyBhbmQgdGhlIGxhdHRlciBwcmludHMgaXQ6OgorCisgICAgPj4+IGltcG9ydCBkaXMsIHJhbmRvbQorICAgID4+PiBkaXMuc2hvd19jb2RlKHJhbmRvbS5jaG9pY2UpCisgICAgTmFtZTogICAgICAgICAgICAgIGNob2ljZQorICAgIEZpbGVuYW1lOiAgICAgICAgICAvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsvVmVyc2lvbnMvMy4yL2xpYi9weXRob24zLjIvcmFuZG9tLnB5CisgICAgQXJndW1lbnQgY291bnQ6ICAgIDIKKyAgICBLdy1vbmx5IGFyZ3VtZW50czogMAorICAgIE51bWJlciBvZiBsb2NhbHM6ICAzCisgICAgU3RhY2sgc2l6ZTogICAgICAgIDExCisgICAgRmxhZ3M6ICAgICAgICAgICAgIE9QVElNSVpFRCwgTkVXTE9DQUxTLCBOT0ZSRUUKKyAgICBDb25zdGFudHM6CisgICAgICAgMDogJ0Nob29zZSBhIHJhbmRvbSBlbGVtZW50IGZyb20gYSBub24tZW1wdHkgc2VxdWVuY2UuJworICAgICAgIDE6ICdDYW5ub3QgY2hvb3NlIGZyb20gYW4gZW1wdHkgc2VxdWVuY2UnCisgICAgTmFtZXM6CisgICAgICAgMDogX3JhbmRiZWxvdworICAgICAgIDE6IGxlbgorICAgICAgIDI6IFZhbHVlRXJyb3IKKyAgICAgICAzOiBJbmRleEVycm9yCisgICAgVmFyaWFibGUgbmFtZXM6CisgICAgICAgMDogc2VsZgorICAgICAgIDE6IHNlcQorICAgICAgIDI6IGkKKworSW4gYWRkaXRpb24sIHRoZSA6ZnVuYzpgfmRpcy5kaXNgIGZ1bmN0aW9uIG5vdyBhY2NlcHRzIHN0cmluZyBhcmd1bWVudHMKK3NvIHRoYXQgdGhlIGNvbW1vbiBpZGlvbSBgYGRpcyhjb21waWxlKHMsICcnLCAnZXZhbCcpKWBgIGNhbiBiZSBzaG9ydGVuZWQKK3RvIGBgZGlzKHMpYGA6OgorCisgICAgPj4+IGRpcygnMyp4KzEgaWYgeCUyPT0xIGVsc2UgeC8vMicpCisgICAgICAxICAgICAgICAgICAwIExPQURfTkFNRSAgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgICAgICAgMyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoMikKKyAgICAgICAgICAgICAgICAgIDYgQklOQVJZX01PRFVMTworICAgICAgICAgICAgICAgICAgNyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAgICAgMTAgQ09NUEFSRV9PUCAgICAgICAgICAgICAgIDIgKD09KQorICAgICAgICAgICAgICAgICAxMyBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICAyOAorICAgICAgICAgICAgICAgICAxNiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMykKKyAgICAgICAgICAgICAgICAgMTkgTE9BRF9OQU1FICAgICAgICAgICAgICAgIDAgKHgpCisgICAgICAgICAgICAgICAgIDIyIEJJTkFSWV9NVUxUSVBMWQorICAgICAgICAgICAgICAgICAyMyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAgICAgMjYgQklOQVJZX0FERAorICAgICAgICAgICAgICAgICAyNyBSRVRVUk5fVkFMVUUKKyAgICAgICAgICAgID4+ICAgMjggTE9BRF9OQU1FICAgICAgICAgICAgICAgIDAgKHgpCisgICAgICAgICAgICAgICAgIDMxIExPQURfQ09OU1QgICAgICAgICAgICAgICAwICgyKQorICAgICAgICAgICAgICAgICAzNCBCSU5BUllfRkxPT1JfRElWSURFCisgICAgICAgICAgICAgICAgIDM1IFJFVFVSTl9WQUxVRQorCitUYWtlbiB0b2dldGhlciwgdGhlc2UgaW1wcm92ZW1lbnRzIG1ha2UgaXQgZWFzaWVyIHRvIGV4cGxvcmUgaG93IENQeXRob24gaXMKK2ltcGxlbWVudGVkIGFuZCB0byBzZWUgZm9yIHlvdXJzZWxmIHdoYXQgdGhlIGxhbmd1YWdlIHN5bnRheCBkb2VzCit1bmRlci10aGUtaG9vZC4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDkxNDdgLikKKworZGJtCistLS0KKworQWxsIGRhdGFiYXNlIG1vZHVsZXMgbm93IHN1cHBvcnQgdGhlIDptZXRoOmBnZXRgIGFuZCA6bWV0aDpgc2V0ZGVmYXVsdGAgbWV0aG9kcy4KKworKFN1Z2dlc3RlZCBieSBSYXkgQWxsZW4gaW4gOmlzc3VlOmA5NTIzYC4pCisKK2N0eXBlcworLS0tLS0tCisKK0EgbmV3IHR5cGUsIDpjbGFzczpgY3R5cGVzLmNfc3NpemVfdGAgcmVwcmVzZW50cyB0aGUgQyA6Yzp0eXBlOmBzc2l6ZV90YCBkYXRhdHlwZS4KKworc2l0ZQorLS0tLQorCitUaGUgOm1vZDpgc2l0ZWAgbW9kdWxlIGhhcyB0aHJlZSBuZXcgZnVuY3Rpb25zIHVzZWZ1bCBmb3IgcmVwb3J0aW5nIG9uIHRoZQorZGV0YWlscyBvZiBhIGdpdmVuIFB5dGhvbiBpbnN0YWxsYXRpb24uCisKKyogOmZ1bmM6YH5zaXRlLmdldHNpdGVwYWNrYWdlc2AgbGlzdHMgYWxsIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yaWVzLgorCisqIDpmdW5jOmB+c2l0ZS5nZXR1c2VyYmFzZWAgcmVwb3J0cyBvbiB0aGUgdXNlcidzIGJhc2UgZGlyZWN0b3J5IHdoZXJlIGRhdGEgY2FuCisgIGJlIHN0b3JlZC4KKworKiA6ZnVuYzpgfnNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlc2AgcmV2ZWFscyB0aGUgdXNlci1zcGVjaWZpYyBzaXRlLXBhY2thZ2VzCisgIGRpcmVjdG9yeSBwYXRoLgorCis6OgorCisgICAgPj4+IGltcG9ydCBzaXRlCisgICAgPj4+IHNpdGUuZ2V0c2l0ZXBhY2thZ2VzKCkKKyAgICBbJy9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8zLjIvbGliL3B5dGhvbjMuMi9zaXRlLXBhY2thZ2VzJywKKyAgICAgJy9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8zLjIvbGliL3NpdGUtcHl0aG9uJywKKyAgICAgJy9MaWJyYXJ5L1B5dGhvbi8zLjIvc2l0ZS1wYWNrYWdlcyddCisgICAgPj4+IHNpdGUuZ2V0dXNlcmJhc2UoKQorICAgICcvVXNlcnMvcmF5bW9uZGhldHRpbmdlci9MaWJyYXJ5L1B5dGhvbi8zLjInCisgICAgPj4+IHNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlcygpCisgICAgJy9Vc2Vycy9yYXltb25kaGV0dGluZ2VyL0xpYnJhcnkvUHl0aG9uLzMuMi9saWIvcHl0aG9uL3NpdGUtcGFja2FnZXMnCisKK0NvbnZlbmllbnRseSwgc29tZSBvZiBzaXRlJ3MgZnVuY3Rpb25hbGl0eSBpcyBhY2Nlc3NpYmxlIGRpcmVjdGx5IGZyb20gdGhlCitjb21tYW5kLWxpbmU6OgorCisgICAgJCBweXRob24gLW0gc2l0ZSAtLXVzZXItYmFzZQorICAgIC9Vc2Vycy9yYXltb25kaGV0dGluZ2VyLy5sb2NhbAorICAgICQgcHl0aG9uIC1tIHNpdGUgLS11c2VyLXNpdGUKKyAgICAvVXNlcnMvcmF5bW9uZGhldHRpbmdlci8ubG9jYWwvbGliL3B5dGhvbjMuMi9zaXRlLXBhY2thZ2VzCisKKyhDb250cmlidXRlZCBieSBUYXJlayBaaWFkw6kgaW4gOmlzc3VlOmA2NjkzYC4pCisKK3N5c2NvbmZpZworLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3lzY29uZmlnYCBtb2R1bGUgbWFrZXMgaXQgc3RyYWlnaHRmb3J3YXJkIHRvIGRpc2NvdmVyCitpbnN0YWxsYXRpb24gcGF0aHMgYW5kIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIHRoYXQgdmFyeSBhY3Jvc3MgcGxhdGZvcm1zIGFuZAoraW5zdGFsbGF0aW9ucy4KKworVGhlIG1vZHVsZSBvZmZlcnMgYWNjZXNzIHNpbXBsZSBhY2Nlc3MgZnVuY3Rpb25zIGZvciBwbGF0Zm9ybSBhbmQgdmVyc2lvbgoraW5mb3JtYXRpb246CisKKyogOmZ1bmM6YH5zeXNjb25maWcuZ2V0X3BsYXRmb3JtYCByZXR1cm5pbmcgdmFsdWVzIGxpa2UgKmxpbnV4LWk1ODYqIG9yCisgICptYWNvc3gtMTAuNi1wcGMqLgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfcHl0aG9uX3ZlcnNpb25gIHJldHVybnMgYSBQeXRob24gdmVyc2lvbiBzdHJpbmcKKyAgc3VjaCBhcyAiMy4yIi4KKworSXQgYWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHBhdGhzIGFuZCB2YXJpYWJsZXMgY29ycmVzcG9uZGluZyB0byBvbmUgb2YKK3NldmVuIG5hbWVkIHNjaGVtZXMgdXNlZCBieSA6bW9kOmBkaXN0dXRpbHNgLiAgVGhvc2UgaW5jbHVkZSAqcG9zaXhfcHJlZml4KiwKKypwb3NpeF9ob21lKiwgKnBvc2l4X3VzZXIqLCAqbnQqLCAqbnRfdXNlciosICpvczIqLCAqb3MyX2hvbWUqOgorCisqIDpmdW5jOmB+c3lzY29uZmlnLmdldF9wYXRoc2AgbWFrZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgaW5zdGFsbGF0aW9uIHBhdGhzCisgIGZvciB0aGUgY3VycmVudCBpbnN0YWxsYXRpb24gc2NoZW1lLgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNgIHJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIHBsYXRmb3JtIHNwZWNpZmljCisgIHZhcmlhYmxlcy4KKworVGhlcmUgaXMgYWxzbyBhIGNvbnZlbmllbnQgY29tbWFuZC1saW5lIGludGVyZmFjZTo6CisKKyAgQzpcUHl0aG9uMzI+cHl0aG9uIC1tIHN5c2NvbmZpZworICBQbGF0Zm9ybTogIndpbjMyIgorICBQeXRob24gdmVyc2lvbjogIjMuMiIKKyAgQ3VycmVudCBpbnN0YWxsYXRpb24gc2NoZW1lOiAibnQiCisKKyAgUGF0aHM6CisgICAgICAgICAgZGF0YSA9ICJDOlxQeXRob24zMiIKKyAgICAgICAgICBpbmNsdWRlID0gIkM6XFB5dGhvbjMyXEluY2x1ZGUiCisgICAgICAgICAgcGxhdGluY2x1ZGUgPSAiQzpcUHl0aG9uMzJcSW5jbHVkZSIKKyAgICAgICAgICBwbGF0bGliID0gIkM6XFB5dGhvbjMyXExpYlxzaXRlLXBhY2thZ2VzIgorICAgICAgICAgIHBsYXRzdGRsaWIgPSAiQzpcUHl0aG9uMzJcTGliIgorICAgICAgICAgIHB1cmVsaWIgPSAiQzpcUHl0aG9uMzJcTGliXHNpdGUtcGFja2FnZXMiCisgICAgICAgICAgc2NyaXB0cyA9ICJDOlxQeXRob24zMlxTY3JpcHRzIgorICAgICAgICAgIHN0ZGxpYiA9ICJDOlxQeXRob24zMlxMaWIiCisKKyAgVmFyaWFibGVzOgorICAgICAgICAgIEJJTkRJUiA9ICJDOlxQeXRob24zMiIKKyAgICAgICAgICBCSU5MSUJERVNUID0gIkM6XFB5dGhvbjMyXExpYiIKKyAgICAgICAgICBFWEUgPSAiLmV4ZSIKKyAgICAgICAgICBJTkNMVURFUFkgPSAiQzpcUHl0aG9uMzJcSW5jbHVkZSIKKyAgICAgICAgICBMSUJERVNUID0gIkM6XFB5dGhvbjMyXExpYiIKKyAgICAgICAgICBTTyA9ICIucHlkIgorICAgICAgICAgIFZFUlNJT04gPSAiMzIiCisgICAgICAgICAgYWJpZmxhZ3MgPSAiIgorICAgICAgICAgIGJhc2UgPSAiQzpcUHl0aG9uMzIiCisgICAgICAgICAgZXhlY19wcmVmaXggPSAiQzpcUHl0aG9uMzIiCisgICAgICAgICAgcGxhdGJhc2UgPSAiQzpcUHl0aG9uMzIiCisgICAgICAgICAgcHJlZml4ID0gIkM6XFB5dGhvbjMyIgorICAgICAgICAgIHByb2plY3RiYXNlID0gIkM6XFB5dGhvbjMyIgorICAgICAgICAgIHB5X3ZlcnNpb24gPSAiMy4yIgorICAgICAgICAgIHB5X3ZlcnNpb25fbm9kb3QgPSAiMzIiCisgICAgICAgICAgcHlfdmVyc2lvbl9zaG9ydCA9ICIzLjIiCisgICAgICAgICAgc3JjZGlyID0gIkM6XFB5dGhvbjMyIgorICAgICAgICAgIHVzZXJiYXNlID0gIkM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcUmF5bW9uZFxBcHBsaWNhdGlvbiBEYXRhXFB5dGhvbiIKKworKE1vdmVkIG91dCBvZiBEaXN0dXRpbHMgYnkgVGFyZWsgWmlhZMOpLikKKworcGRiCistLS0KKworVGhlIDptb2Q6YHBkYmAgZGVidWdnZXIgbW9kdWxlIGdhaW5lZCBhIG51bWJlciBvZiB1c2FiaWxpdHkgaW1wcm92ZW1lbnRzOgorCisqIDpmaWxlOmBwZGIucHlgIG5vdyBoYXMgYSBgYC1jYGAgb3B0aW9uIHRoYXQgZXhlY3V0ZXMgY29tbWFuZHMgYXMgZ2l2ZW4gaW4gYQorICA6ZmlsZTpgLnBkYnJjYCBzY3JpcHQgZmlsZS4KKyogQSA6ZmlsZTpgLnBkYnJjYCBzY3JpcHQgZmlsZSBjYW4gY29udGFpbiBgYGNvbnRpbnVlYGAgYW5kIGBgbmV4dGBgIGNvbW1hbmRzCisgIHRoYXQgY29udGludWUgZGVidWdnaW5nLgorKiBUaGUgOmNsYXNzOmBQZGJgIGNsYXNzIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIGEgKm5vc2lnaW50KiBhcmd1bWVudC4KKyogTmV3IGNvbW1hbmRzOiBgYGwobGlzdClgYCwgYGBsbChsb25nIGxpc3QpYGAgYW5kIGBgc291cmNlYGAgZm9yCisgIGxpc3Rpbmcgc291cmNlIGNvZGUuCisqIE5ldyBjb21tYW5kczogYGBkaXNwbGF5YGAgYW5kIGBgdW5kaXNwbGF5YGAgZm9yIHNob3dpbmcgb3IgaGlkaW5nCisgIHRoZSB2YWx1ZSBvZiBhbiBleHByZXNzaW9uIGlmIGl0IGhhcyBjaGFuZ2VkLgorKiBOZXcgY29tbWFuZDogYGBpbnRlcmFjdGBgIGZvciBzdGFydGluZyBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBjb250YWluaW5nCisgIHRoZSBnbG9iYWwgYW5kIGxvY2FsICBuYW1lcyBmb3VuZCBpbiB0aGUgY3VycmVudCBzY29wZS4KKyogQnJlYWtwb2ludHMgY2FuIGJlIGNsZWFyZWQgYnkgYnJlYWtwb2ludCBudW1iZXIuCisKKyhDb250cmlidXRlZCBieSBHZW9yZyBCcmFuZGwsIEFudG9uaW8gQ3VuaSBhbmQgSWx5YSBTYW5kbGVyLikKKworY29uZmlncGFyc2VyCistLS0tLS0tLS0tLS0KKworVGhlIDptb2Q6YGNvbmZpZ3BhcnNlcmAgbW9kdWxlIHdhcyBtb2RpZmllZCB0byBpbXByb3ZlIHVzYWJpbGl0eSBhbmQKK3ByZWRpY3RhYmlsaXR5IG9mIHRoZSBkZWZhdWx0IHBhcnNlciBhbmQgaXRzIHN1cHBvcnRlZCBJTkkgc3ludGF4LiAgVGhlIG9sZAorOmNsYXNzOmBDb25maWdQYXJzZXJgIGNsYXNzIHdhcyByZW1vdmVkIGluIGZhdm9yIG9mIDpjbGFzczpgU2FmZUNvbmZpZ1BhcnNlcmAKK3doaWNoIGhhcyBpbiB0dXJuIGJlZW4gcmVuYW1lZCB0byA6Y2xhc3M6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyYC4gU3VwcG9ydAorZm9yIGlubGluZSBjb21tZW50cyBpcyBub3cgdHVybmVkIG9mZiBieSBkZWZhdWx0IGFuZCBzZWN0aW9uIG9yIG9wdGlvbgorZHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBzaW5nbGUgY29uZmlndXJhdGlvbiBzb3VyY2UuCisKK0NvbmZpZyBwYXJzZXJzIGdhaW5lZCBhIG5ldyBBUEkgYmFzZWQgb24gdGhlIG1hcHBpbmcgcHJvdG9jb2w6OgorCisgICAgPj4+IHBhcnNlciA9IENvbmZpZ1BhcnNlcigpCisgICAgPj4+IHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICBbREVGQVVMVF0KKyAgICBsb2NhdGlvbiA9IHVwcGVyIGxlZnQKKyAgICB2aXNpYmxlID0geWVzCisgICAgZWRpdGFibGUgPSBubworICAgIGNvbG9yID0gYmx1ZQorCisgICAgW21haW5dCisgICAgdGl0bGUgPSBNYWluIE1lbnUKKyAgICBjb2xvciA9IGdyZWVuCisKKyAgICBbb3B0aW9uc10KKyAgICB0aXRsZSA9IE9wdGlvbnMKKyAgICAiIiIpCisgICAgPj4+IHBhcnNlclsnbWFpbiddWydjb2xvciddCisgICAgJ2dyZWVuJworICAgID4+PiBwYXJzZXJbJ21haW4nXVsnZWRpdGFibGUnXQorICAgICdubycKKyAgICA+Pj4gc2VjdGlvbiA9IHBhcnNlclsnb3B0aW9ucyddCisgICAgPj4+IHNlY3Rpb25bJ3RpdGxlJ10KKyAgICAnT3B0aW9ucycKKyAgICA+Pj4gc2VjdGlvblsndGl0bGUnXSA9ICdPcHRpb25zIChlZGl0YWJsZTogJShlZGl0YWJsZSlzKScKKyAgICA+Pj4gc2VjdGlvblsndGl0bGUnXQorICAgICdPcHRpb25zIChlZGl0YWJsZTogbm8pJworCitUaGUgbmV3IEFQSSBpcyBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgdGhlIGNsYXNzaWNhbCBBUEksIHNvIGN1c3RvbSBwYXJzZXIKK3N1YmNsYXNzZXMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIGl0IHdpdGhvdXQgbW9kaWZpY2F0aW9ucy4KKworVGhlIElOSSBmaWxlIHN0cnVjdHVyZSBhY2NlcHRlZCBieSBjb25maWcgcGFyc2VycyBjYW4gbm93IGJlIGN1c3RvbWl6ZWQuIFVzZXJzCitjYW4gc3BlY2lmeSBhbHRlcm5hdGl2ZSBvcHRpb24vdmFsdWUgZGVsaW1pdGVycyBhbmQgY29tbWVudCBwcmVmaXhlcywgY2hhbmdlIHRoZQorbmFtZSBvZiB0aGUgKkRFRkFVTFQqIHNlY3Rpb24gb3Igc3dpdGNoIHRoZSBpbnRlcnBvbGF0aW9uIHN5bnRheC4KKworVGhlcmUgaXMgc3VwcG9ydCBmb3IgcGx1Z2dhYmxlIGludGVycG9sYXRpb24gaW5jbHVkaW5nIGFuIGFkZGl0aW9uYWwgaW50ZXJwb2xhdGlvbgoraGFuZGxlciA6Y2xhc3M6YH5jb25maWdwYXJzZXIuRXh0ZW5kZWRJbnRlcnBvbGF0aW9uYDo6CisKKyAgPj4+IHBhcnNlciA9IENvbmZpZ1BhcnNlcihpbnRlcnBvbGF0aW9uPUV4dGVuZGVkSW50ZXJwb2xhdGlvbigpKQorICA+Pj4gcGFyc2VyLnJlYWRfZGljdCh7J2J1aWxkb3V0JzogeydkaXJlY3RvcnknOiAnL2hvbWUvYW1idi96b3BlOSd9LAorICAgICAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbSc6IHsncHJlZml4JzogJy91c3IvbG9jYWwnfX0pCisgID4+PiBwYXJzZXIucmVhZF9zdHJpbmcoIiIiCisgICAgICBbYnVpbGRvdXRdCisgICAgICBwYXJ0cyA9CisgICAgICAgIHpvcGU5CisgICAgICAgIGluc3RhbmNlCisgICAgICBmaW5kLWxpbmtzID0KKyAgICAgICAgJHtidWlsZG91dDpkaXJlY3Rvcnl9L2Rvd25sb2Fkcy9kaXN0CisKKyAgICAgIFt6b3BlOV0KKyAgICAgIHJlY2lwZSA9IHBsb25lLnJlY2lwZS56b3BlOWluc3RhbGwKKyAgICAgIGxvY2F0aW9uID0gL29wdC96b3BlCisKKyAgICAgIFtpbnN0YW5jZV0KKyAgICAgIHJlY2lwZSA9IHBsb25lLnJlY2lwZS56b3BlOWluc3RhbmNlCisgICAgICB6b3BlOS1sb2NhdGlvbiA9ICR7em9wZTk6bG9jYXRpb259CisgICAgICB6b3BlLWNvbmYgPSAke2N1c3RvbTpwcmVmaXh9L2V0Yy96b3BlLmNvbmYKKyAgICAgICIiIikKKyAgPj4+IHBhcnNlclsnYnVpbGRvdXQnXVsnZmluZC1saW5rcyddCisgICdcbi9ob21lL2FtYnYvem9wZTkvZG93bmxvYWRzL2Rpc3QnCisgID4+PiBwYXJzZXJbJ2luc3RhbmNlJ11bJ3pvcGUtY29uZiddCisgICcvdXNyL2xvY2FsL2V0Yy96b3BlLmNvbmYnCisgID4+PiBpbnN0YW5jZSA9IHBhcnNlclsnaW5zdGFuY2UnXQorICA+Pj4gaW5zdGFuY2VbJ3pvcGUtY29uZiddCisgICcvdXNyL2xvY2FsL2V0Yy96b3BlLmNvbmYnCisgID4+PiBpbnN0YW5jZVsnem9wZTktbG9jYXRpb24nXQorICAnL29wdC96b3BlJworCitBIG51bWJlciBvZiBzbWFsbGVyIGZlYXR1cmVzIHdlcmUgYWxzbyBpbnRyb2R1Y2VkLCBsaWtlIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcKK2VuY29kaW5nIGluIHJlYWQgb3BlcmF0aW9ucywgc3BlY2lmeWluZyBmYWxsYmFjayB2YWx1ZXMgZm9yIGdldC1mdW5jdGlvbnMsIG9yCityZWFkaW5nIGRpcmVjdGx5IGZyb20gZGljdGlvbmFyaWVzIGFuZCBzdHJpbmdzLgorCisoQWxsIGNoYW5nZXMgY29udHJpYnV0ZWQgYnkgxYF1a2FzeiBMYW5nYS4pCisKKy4uIFhYWCBjb25zaWRlciBzaG93aW5nIGEgZGlmZmxpYiBleGFtcGxlCisKK3VybGxpYi5wYXJzZQorLS0tLS0tLS0tLS0tCisKK0EgbnVtYmVyIG9mIHVzYWJpbGl0eSBpbXByb3ZlbWVudHMgd2VyZSBtYWRlIGZvciB0aGUgOm1vZDpgdXJsbGliLnBhcnNlYCBtb2R1bGUuCisKK1RoZSA6ZnVuYzpgfnVybGxpYi5wYXJzZS51cmxwYXJzZWAgZnVuY3Rpb24gbm93IHN1cHBvcnRzIGBJUHY2Cis8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JUHY2PmBfIGFkZHJlc3NlcyBhcyBkZXNjcmliZWQgaW4gOnJmYzpgMjczMmA6CisKKyAgICA+Pj4gaW1wb3J0IHVybGxpYi5wYXJzZQorICAgID4+PiB1cmxsaWIucGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJykKKyAgICBQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLAorICAgICAgICAgICAgICAgIG5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLAorICAgICAgICAgICAgICAgIHBhdGg9Jy9mb28vJywKKyAgICAgICAgICAgICAgICBwYXJhbXM9JycsCisgICAgICAgICAgICAgICAgcXVlcnk9JycsCisgICAgICAgICAgICAgICAgZnJhZ21lbnQ9JycpCisKK1RoZSA6ZnVuYzpgfnVybGxpYi5wYXJzZS51cmxkZWZyYWdgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgOnRlcm06YG5hbWVkIHR1cGxlYDo6CisKKyAgICA+Pj4gciA9IHVybGxpYi5wYXJzZS51cmxkZWZyYWcoJ2h0dHA6Ly9weXRob24ub3JnL2Fib3V0LyN0YXJnZXQnKQorICAgID4+PiByCisgICAgRGVmcmFnUmVzdWx0KHVybD0naHR0cDovL3B5dGhvbi5vcmcvYWJvdXQvJywgZnJhZ21lbnQ9J3RhcmdldCcpCisgICAgPj4+IHJbMF0KKyAgICAnaHR0cDovL3B5dGhvbi5vcmcvYWJvdXQvJworICAgID4+PiByLmZyYWdtZW50CisgICAgJ3RhcmdldCcKKworQW5kLCB0aGUgOmZ1bmM6YH51cmxsaWIucGFyc2UudXJsZW5jb2RlYCBmdW5jdGlvbiBpcyBub3cgbXVjaCBtb3JlIGZsZXhpYmxlLAorYWNjZXB0aW5nIGVpdGhlciBhIHN0cmluZyBvciBieXRlcyB0eXBlIGZvciB0aGUgKnF1ZXJ5KiBhcmd1bWVudC4gIElmIGl0IGlzIGEKK3N0cmluZywgdGhlbiB0aGUgKnNhZmUqLCAqZW5jb2RpbmcqLCBhbmQgKmVycm9yKiBwYXJhbWV0ZXJzIGFyZSBzZW50IHRvCis6ZnVuYzpgfnVybGxpYi5wYXJzZS5xdW90ZV9wbHVzYCBmb3IgZW5jb2Rpbmc6OgorCisgICAgPj4+IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoWworICAgICAgICAgICAgICgndHlwZScsICd0ZWxlbm92ZWxhJyksCisgICAgICAgICAgICAgKCduYW1lJywgJ8K/RMOzbmRlIEVzdMOhIEVsaXNhPycpXSwKKyAgICAgICAgICAgICBlbmNvZGluZz0nbGF0aW4tMScpCisgICAgJ3R5cGU9dGVsZW5vdmVsYSZuYW1lPSVCRkQlRjNuZGUrRXN0JUUxK0VsaXNhJTNGJworCitBcyBkZXRhaWxlZCBpbiA6cmVmOmBwYXJzaW5nLWFzY2lpLWVuY29kZWQtYnl0ZXNgLCBhbGwgdGhlIDptb2Q6YHVybGxpYi5wYXJzZWAKK2Z1bmN0aW9ucyBub3cgYWNjZXB0IEFTQ0lJLWVuY29kZWQgYnl0ZSBzdHJpbmdzIGFzIGlucHV0LCBzbyBsb25nIGFzIHRoZXkgYXJlCitub3QgbWl4ZWQgd2l0aCByZWd1bGFyIHN0cmluZ3MuICBJZiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5ncyBhcmUgZ2l2ZW4gYXMKK3BhcmFtZXRlcnMsIHRoZSByZXR1cm4gdHlwZXMgd2lsbCBhbHNvIGJlIGFuIEFTQ0lJLWVuY29kZWQgYnl0ZSBzdHJpbmdzOgorCisgICAgPj4+IHVybGxpYi5wYXJzZS51cmxwYXJzZShiJ2h0dHA6Ly93d3cucHl0aG9uLm9yZzo4MC9hYm91dC8nKQorICAgIFBhcnNlUmVzdWx0Qnl0ZXMoc2NoZW1lPWInaHR0cCcsIG5ldGxvYz1iJ3d3dy5weXRob24ub3JnOjgwJywKKyAgICAgICAgICAgICAgICAgICAgIHBhdGg9YicvYWJvdXQvJywgcGFyYW1zPWInJywgcXVlcnk9YicnLCBmcmFnbWVudD1iJycpCisKKyhXb3JrIGJ5IE5pY2sgQ29naGxhbiwgRGFuIE1haG4sIGFuZCBTZW50aGlsIEt1bWFyYW4gaW4gOmlzc3VlOmAyOTg3YCwKKzppc3N1ZTpgNTQ2OGAsIGFuZCA6aXNzdWU6YDk4NzNgLikKKworbWFpbGJveAorLS0tLS0tLQorCitUaGFua3MgdG8gYSBjb25jZXJ0ZWQgZWZmb3J0IGJ5IFIuIERhdmlkIE11cnJheSwgdGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSBoYXMKK2JlZW4gZml4ZWQgZm9yIFB5dGhvbiAzLjIuICBUaGUgY2hhbGxlbmdlIHdhcyB0aGF0IG1haWxib3ggaGFkIGJlZW4gb3JpZ2luYWxseQorZGVzaWduZWQgd2l0aCBhIHRleHQgaW50ZXJmYWNlLCBidXQgZW1haWwgbWVzc2FnZXMgYXJlIGJlc3QgcmVwcmVzZW50ZWQgd2l0aAorOmNsYXNzOmBieXRlc2AgYmVjYXVzZSB2YXJpb3VzIHBhcnRzIG9mIGEgbWVzc2FnZSBtYXkgaGF2ZSBkaWZmZXJlbnQgZW5jb2RpbmdzLgorCitUaGUgc29sdXRpb24gaGFybmVzc2VkIHRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSdzIGJpbmFyeSBzdXBwb3J0IGZvciBwYXJzaW5nCithcmJpdHJhcnkgZW1haWwgbWVzc2FnZXMuICBJbiBhZGRpdGlvbiwgdGhlIHNvbHV0aW9uIHJlcXVpcmVkIGEgbnVtYmVyIG9mIEFQSQorY2hhbmdlcy4KKworQXMgZXhwZWN0ZWQsIHRoZSA6bWV0aDpgfm1haWxib3guTWFpbGJveC5hZGRgIG1ldGhvZCBmb3IKKzpjbGFzczpgbWFpbGJveC5NYWlsYm94YCBvYmplY3RzIG5vdyBhY2NlcHRzIGJpbmFyeSBpbnB1dC4KKworOmNsYXNzOmB+aW8uU3RyaW5nSU9gIGFuZCB0ZXh0IGZpbGUgaW5wdXQgYXJlIGRlcHJlY2F0ZWQuICBBbHNvLCBzdHJpbmcgaW5wdXQKK3dpbGwgZmFpbCBlYXJseSBpZiBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgdXNlZC4gIFByZXZpb3VzbHkgaXQgd291bGQgZmFpbCB3aGVuCit0aGUgZW1haWwgd2FzIHByb2Nlc3NlZCBpbiBhIGxhdGVyIHN0ZXAuCisKK1RoZXJlIGlzIGFsc28gc3VwcG9ydCBmb3IgYmluYXJ5IG91dHB1dC4gIFRoZSA6bWV0aDpgfm1haWxib3guTWFpbGJveC5nZXRfZmlsZWAKK21ldGhvZCBub3cgcmV0dXJucyBhIGZpbGUgaW4gdGhlIGJpbmFyeSBtb2RlICh3aGVyZSBpdCB1c2VkIHRvIGluY29ycmVjdGx5IHNldAordGhlIGZpbGUgdG8gdGV4dC1tb2RlKS4gIFRoZXJlIGlzIGFsc28gYSBuZXcgOm1ldGg6YH5tYWlsYm94Lk1haWxib3guZ2V0X2J5dGVzYAorbWV0aG9kIHRoYXQgcmV0dXJucyBhIDpjbGFzczpgYnl0ZXNgIHJlcHJlc2VudGF0aW9uIG9mIGEgbWVzc2FnZSBjb3JyZXNwb25kaW5nCit0byBhIGdpdmVuICprZXkqLgorCitJdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBnZXQgbm9uLWJpbmFyeSBvdXRwdXQgdXNpbmcgdGhlIG9sZCBBUEkncworOm1ldGg6YH5tYWlsYm94Lk1haWxib3guZ2V0X3N0cmluZ2AgbWV0aG9kLCBidXQgdGhhdCBhcHByb2FjaAoraXMgbm90IHZlcnkgdXNlZnVsLiAgSW5zdGVhZCwgaXQgaXMgYmVzdCB0byBleHRyYWN0IG1lc3NhZ2VzIGZyb20KK2EgOmNsYXNzOmB+bWFpbGJveC5NZXNzYWdlYCBvYmplY3Qgb3IgdG8gbG9hZCB0aGVtIGZyb20gYmluYXJ5IGlucHV0LgorCisoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQgTXVycmF5LCB3aXRoIGVmZm9ydHMgZnJvbSBTdGVmZmVuIERhb2RlIE51cnBtZXNvIGFuZCBhbgoraW5pdGlhbCBwYXRjaCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDkxMjRgLikKKwordHVydGxlZGVtbworLS0tLS0tLS0tLQorCitUaGUgZGVtb25zdHJhdGlvbiBjb2RlIGZvciB0aGUgOm1vZDpgdHVydGxlYCBtb2R1bGUgd2FzIG1vdmVkIGZyb20gdGhlICpEZW1vKgorZGlyZWN0b3J5IHRvIG1haW4gbGlicmFyeS4gIEl0IGluY2x1ZGVzIG92ZXIgYSBkb3plbiBzYW1wbGUgc2NyaXB0cyB3aXRoCitsaXZlbHkgZGlzcGxheXMuICBCZWluZyBvbiA6YXR0cjpgc3lzLnBhdGhgLCBpdCBjYW4gbm93IGJlIHJ1biBkaXJlY3RseQorZnJvbSB0aGUgY29tbWFuZC1saW5lOjoKKworICAgICQgcHl0aG9uIC1tIHR1cnRsZWRlbW8KKworKE1vdmVkIGZyb20gdGhlIERlbW8gZGlyZWN0b3J5IGJ5IEFsZXhhbmRlciBCZWxvcG9sc2t5IGluIDppc3N1ZTpgMTAxOTlgLikKKworTXVsdGktdGhyZWFkaW5nCis9PT09PT09PT09PT09PT0KKworKiBUaGUgbWVjaGFuaXNtIGZvciBzZXJpYWxpemluZyBleGVjdXRpb24gb2YgY29uY3VycmVudGx5IHJ1bm5pbmcgUHl0aG9uIHRocmVhZHMKKyAgKGdlbmVyYWxseSBrbm93biBhcyB0aGUgOnRlcm06YEdJTGAgb3IgOnRlcm06YEdsb2JhbCBJbnRlcnByZXRlciBMb2NrYCkgaGFzCisgIGJlZW4gcmV3cml0dGVuLiAgQW1vbmcgdGhlIG9iamVjdGl2ZXMgd2VyZSBtb3JlIHByZWRpY3RhYmxlIHN3aXRjaGluZworICBpbnRlcnZhbHMgYW5kIHJlZHVjZWQgb3ZlcmhlYWQgZHVlIHRvIGxvY2sgY29udGVudGlvbiBhbmQgdGhlIG51bWJlciBvZgorICBlbnN1aW5nIHN5c3RlbSBjYWxscy4gIFRoZSBub3Rpb24gb2YgYSAiY2hlY2sgaW50ZXJ2YWwiIHRvIGFsbG93IHRocmVhZAorICBzd2l0Y2hlcyBoYXMgYmVlbiBhYmFuZG9uZWQgYW5kIHJlcGxhY2VkIGJ5IGFuIGFic29sdXRlIGR1cmF0aW9uIGV4cHJlc3NlZCBpbgorICBzZWNvbmRzLiAgVGhpcyBwYXJhbWV0ZXIgaXMgdHVuYWJsZSB0aHJvdWdoIDpmdW5jOmBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoKWAuCisgIEl0IGN1cnJlbnRseSBkZWZhdWx0cyB0byA1IG1pbGxpc2Vjb25kcy4KKworICBBZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWFkIGZyb20gYSBgcHl0aG9uLWRldgorICBtYWlsaW5nLWxpc3QgbWVzc2FnZQorICA8aHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA5LU9jdG9iZXIvMDkzMzIxLmh0bWw+YF8KKyAgKGhvd2V2ZXIsICJwcmlvcml0eSByZXF1ZXN0cyIgYXMgZXhwb3NlZCBpbiB0aGlzIG1lc3NhZ2UgaGF2ZSBub3QgYmVlbiBrZXB0CisgIGZvciBpbmNsdXNpb24pLgorCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdS4pCisKKyogUmVndWxhciBhbmQgcmVjdXJzaXZlIGxvY2tzIG5vdyBhY2NlcHQgYW4gb3B0aW9uYWwgKnRpbWVvdXQqIGFyZ3VtZW50IHRvIHRoZWlyCisgIDptZXRoOmB+dGhyZWFkaW5nLkxvY2suYWNxdWlyZWAgbWV0aG9kLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91OworICA6aXNzdWU6YDczMTZgLikKKworKiBTaW1pbGFybHksIDptZXRoOmB0aHJlYWRpbmcuU2VtYXBob3JlLmFjcXVpcmVgIGFsc28gZ2FpbmVkIGEgKnRpbWVvdXQqCisgIGFyZ3VtZW50LiAgKENvbnRyaWJ1dGVkIGJ5IFRvcnN0ZW4gTGFuZHNjaG9mZjsgOmlzc3VlOmA4NTA3MjhgLikKKworKiBSZWd1bGFyIGFuZCByZWN1cnNpdmUgbG9jayBhY3F1aXNpdGlvbnMgY2FuIG5vdyBiZSBpbnRlcnJ1cHRlZCBieSBzaWduYWxzIG9uCisgIHBsYXRmb3JtcyB1c2luZyBQdGhyZWFkcy4gIFRoaXMgbWVhbnMgdGhhdCBQeXRob24gcHJvZ3JhbXMgdGhhdCBkZWFkbG9jayB3aGlsZQorICBhY3F1aXJpbmcgbG9ja3MgY2FuIGJlIHN1Y2Nlc3NmdWxseSBraWxsZWQgYnkgcmVwZWF0ZWRseSBzZW5kaW5nIFNJR0lOVCB0byB0aGUKKyAgcHJvY2VzcyAoYnkgcHJlc3NpbmcgOmtiZDpgQ3RybCtDYCBpbiBtb3N0IHNoZWxscykuCisgIChDb250cmlidXRlZCBieSBSZWlkIEtsZWNrbmVyOyA6aXNzdWU6YDg4NDRgLikKKworCitPcHRpbWl6YXRpb25zCis9PT09PT09PT09PT09CisKK0EgbnVtYmVyIG9mIHNtYWxsIHBlcmZvcm1hbmNlIGVuaGFuY2VtZW50cyBoYXZlIGJlZW4gYWRkZWQ6CisKKyogUHl0aG9uJ3MgcGVlcGhvbGUgb3B0aW1pemVyIG5vdyByZWNvZ25pemVzIHBhdHRlcm5zIHN1Y2ggYGB4IGluIHsxLCAyLCAzfWBgIGFzCisgIGJlaW5nIGEgdGVzdCBmb3IgbWVtYmVyc2hpcCBpbiBhIHNldCBvZiBjb25zdGFudHMuICBUaGUgb3B0aW1pemVyIHJlY2FzdHMgdGhlCisgIDpjbGFzczpgc2V0YCBhcyBhIDpjbGFzczpgZnJvemVuc2V0YCBhbmQgc3RvcmVzIHRoZSBwcmUtYnVpbHQgY29uc3RhbnQuCisKKyAgTm93IHRoYXQgdGhlIHNwZWVkIHBlbmFsdHkgaXMgZ29uZSwgaXQgaXMgcHJhY3RpY2FsIHRvIHN0YXJ0IHdyaXRpbmcKKyAgbWVtYmVyc2hpcCB0ZXN0cyB1c2luZyBzZXQtbm90YXRpb24uICBUaGlzIHN0eWxlIGlzIGJvdGggc2VtYW50aWNhbGx5IGNsZWFyCisgIGFuZCBvcGVyYXRpb25hbGx5IGZhc3Q6OgorCisgICAgICBleHRlbnNpb24gPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQorICAgICAgaWYgZXh0ZW5zaW9uIGluIHsneG1sJywgJ2h0bWwnLCAneGh0bWwnLCAnY3NzJ306CisgICAgICAgICAgaGFuZGxlKG5hbWUpCisKKyAgKFBhdGNoIGFuZCBhZGRpdGlvbmFsIHRlc3RzIGNvbnRyaWJ1dGVkIGJ5IERhdmUgTWFsY29sbTsgOmlzc3VlOmA2NjkwYCkuCisKKyogU2VyaWFsaXppbmcgYW5kIHVuc2VyaWFsaXppbmcgZGF0YSB1c2luZyB0aGUgOm1vZDpgcGlja2xlYCBtb2R1bGUgaXMgbm93CisgIHNldmVyYWwgdGltZXMgZmFzdGVyLgorCisgIChDb250cmlidXRlZCBieSBBbGV4YW5kcmUgVmFzc2Fsb3R0aSwgQW50b2luZSBQaXRyb3UKKyAgYW5kIHRoZSBVbmxhZGVuIFN3YWxsb3cgdGVhbSBpbiA6aXNzdWU6YDk0MTBgIGFuZCA6aXNzdWU6YDM4NzNgLikKKworKiBUaGUgYFRpbXNvcnQgYWxnb3JpdGhtIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbXNvcnQ+YF8gdXNlZCBpbgorICA6bWV0aDpgbGlzdC5zb3J0YCBhbmQgOmZ1bmM6YHNvcnRlZGAgbm93IHJ1bnMgZmFzdGVyIGFuZCB1c2VzIGxlc3MgbWVtb3J5CisgIHdoZW4gY2FsbGVkIHdpdGggYSA6dGVybTpga2V5IGZ1bmN0aW9uYC4gIFByZXZpb3VzbHksIGV2ZXJ5IGVsZW1lbnQgb2YKKyAgYSBsaXN0IHdhcyB3cmFwcGVkIHdpdGggYSB0ZW1wb3Jhcnkgb2JqZWN0IHRoYXQgcmVtZW1iZXJlZCB0aGUga2V5IHZhbHVlCisgIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGVsZW1lbnQuICBOb3csIHR3byBhcnJheXMgb2Yga2V5cyBhbmQgdmFsdWVzIGFyZQorICBzb3J0ZWQgaW4gcGFyYWxsZWwuICBUaGlzIHNhdmVzIHRoZSBtZW1vcnkgY29uc3VtZWQgYnkgdGhlIHNvcnQgd3JhcHBlcnMsCisgIGFuZCBpdCBzYXZlcyB0aW1lIGxvc3QgdG8gZGVsZWdhdGluZyBjb21wYXJpc29ucy4KKworICAoUGF0Y2ggYnkgRGFuaWVsIFN0dXR6YmFjaCBpbiA6aXNzdWU6YDk5MTVgLikKKworKiBKU09OIGRlY29kaW5nIHBlcmZvcm1hbmNlIGlzIGltcHJvdmVkIGFuZCBtZW1vcnkgY29uc3VtcHRpb24gaXMgcmVkdWNlZAorICB3aGVuZXZlciB0aGUgc2FtZSBzdHJpbmcgaXMgcmVwZWF0ZWQgZm9yIG11bHRpcGxlIGtleXMuICBBbHNvLCBKU09OIGVuY29kaW5nCisgIG5vdyB1c2VzIHRoZSBDIHNwZWVkdXBzIHdoZW4gdGhlIGBgc29ydF9rZXlzYGAgYXJndW1lbnQgaXMgdHJ1ZS4KKworICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmA3NDUxYCBhbmQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYW5kCisgIEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTAzMTRgLikKKworKiBSZWN1cnNpdmUgbG9ja3MgKGNyZWF0ZWQgd2l0aCB0aGUgOmZ1bmM6YHRocmVhZGluZy5STG9ja2AgQVBJKSBub3cgYmVuZWZpdAorICBmcm9tIGEgQyBpbXBsZW1lbnRhdGlvbiB3aGljaCBtYWtlcyB0aGVtIGFzIGZhc3QgYXMgcmVndWxhciBsb2NrcywgYW5kIGJldHdlZW4KKyAgMTB4IGFuZCAxNXggZmFzdGVyIHRoYW4gdGhlaXIgcHJldmlvdXMgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDMwMDFgLikKKworKiBUaGUgZmFzdC1zZWFyY2ggYWxnb3JpdGhtIGluIHN0cmluZ2xpYiBpcyBub3cgdXNlZCBieSB0aGUgOm1ldGg6YHNwbGl0YCwKKyAgOm1ldGg6YHNwbGl0bGluZXNgIGFuZCA6bWV0aDpgcmVwbGFjZWAgbWV0aG9kcyBvbgorICA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIGFuZCA6Y2xhc3M6YHN0cmAgb2JqZWN0cy4gTGlrZXdpc2UsIHRoZQorICBhbGdvcml0aG0gaXMgYWxzbyB1c2VkIGJ5IDptZXRoOmByZmluZGAsIDptZXRoOmByaW5kZXhgLCA6bWV0aDpgcnNwbGl0YCBhbmQKKyAgOm1ldGg6YHJwYXJ0aXRpb25gLgorCisgIChQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEgaW4gOmlzc3VlOmA3NjIyYCBhbmQgOmlzc3VlOmA3NDYyYC4pCisKKworKiBTdHJpbmcgdG8gaW50ZWdlciBjb252ZXJzaW9ucyBub3cgd29yayB0d28gImRpZ2l0cyIgYXQgYSB0aW1lLCByZWR1Y2luZyB0aGUKKyAgbnVtYmVyIG9mIGRpdmlzaW9uIGFuZCBtb2R1bG8gb3BlcmF0aW9ucy4KKworICAoOmlzc3VlOmA2NzEzYCBieSBHYXdhaW4gQm9sdG9uLCBNYXJrIERpY2tpbnNvbiwgYW5kIFZpY3RvciBTdGlubmVyLikKKworVGhlcmUgd2VyZSBzZXZlcmFsIG90aGVyIG1pbm9yIG9wdGltaXphdGlvbnMuIFNldCBkaWZmZXJlbmNpbmcgbm93IHJ1bnMgZmFzdGVyCit3aGVuIG9uZSBvcGVyYW5kIGlzIG11Y2ggbGFyZ2VyIHRoYW4gdGhlIG90aGVyIChwYXRjaCBieSBBbmRyZXNzIEJlbm5ldHRzIGluCis6aXNzdWU6YDg2ODVgKS4gIFRoZSA6bWV0aDpgYXJyYXkucmVwZWF0YCBtZXRob2QgaGFzIGEgZmFzdGVyIGltcGxlbWVudGF0aW9uCisoOmlzc3VlOmAxNTY5MjkxYCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreSkuIFRoZSA6Y2xhc3M6YEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJgCitoYXMgbW9yZSBlZmZpY2llbnQgYnVmZmVyaW5nICg6aXNzdWU6YDM3MDlgIGJ5IEFuZHJldyBTY2hhYWYpLiAgVGhlCis6ZnVuYzpgb3BlcmF0b3IuYXR0cmdldHRlcmAgZnVuY3Rpb24gaGFzIGJlZW4gc3BlZC11cCAoOmlzc3VlOmAxMDE2MGAgYnkKK0NocmlzdG9zIEdlb3JnaW91KS4gIEFuZCA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgbG9hZHMgbXVsdGktbGluZSBhcmd1bWVudHMgYSBiaXQKK2Zhc3RlciAoOmlzc3VlOmA3MTEzYCBieSDFgXVrYXN6IExhbmdhKS4KKworCitVbmljb2RlCis9PT09PT09CisKK1B5dGhvbiBoYXMgYmVlbiB1cGRhdGVkIHRvIGBVbmljb2RlIDYuMC4wCis8aHR0cDovL3VuaWNvZGUub3JnL3ZlcnNpb25zL1VuaWNvZGU2LjAuMC8+YF8uICBUaGUgdXBkYXRlIHRvIHRoZSBzdGFuZGFyZCBhZGRzCitvdmVyIDIsMDAwIG5ldyBjaGFyYWN0ZXJzIGluY2x1ZGluZyBgZW1vamkgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRW1vamk+YF8KK3N5bWJvbHMgd2hpY2ggYXJlIGltcG9ydGFudCBmb3IgbW9iaWxlIHBob25lcy4KKworSW4gYWRkaXRpb24sIHRoZSB1cGRhdGVkIHN0YW5kYXJkIGhhcyBhbHRlcmVkIHRoZSBjaGFyYWN0ZXIgcHJvcGVydGllcyBmb3IgdHdvCitLYW5uYWRhIGNoYXJhY3RlcnMgKFUrMENGMSwgVSswQ0YyKSBhbmQgb25lIE5ldyBUYWkgTHVlIG51bWVyaWMgY2hhcmFjdGVyCisoVSsxOURBKSwgbWFraW5nIHRoZSBmb3JtZXIgZWxpZ2libGUgZm9yIHVzZSBpbiBpZGVudGlmaWVycyB3aGlsZSBkaXNxdWFsaWZ5aW5nCit0aGUgbGF0dGVyLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgQ2hhbmdlcworPGh0dHA6Ly93d3cudW5pY29kZS5vcmcvdmVyc2lvbnMvVW5pY29kZTYuMC4wLyNEYXRhYmFzZV9DaGFuZ2VzPmBfLgorCisKK0NvZGVjcworPT09PT09CisKK1N1cHBvcnQgd2FzIGFkZGVkIGZvciAqY3A3MjAqIEFyYWJpYyBET1MgZW5jb2RpbmcgKDppc3N1ZTpgMTYxNjk3OWApLgorCitNQkNTIGVuY29kaW5nIG5vIGxvbmdlciBpZ25vcmVzIHRoZSBlcnJvciBoYW5kbGVyIGFyZ3VtZW50LiBJbiB0aGUgZGVmYXVsdAorc3RyaWN0IG1vZGUsIGl0IHJhaXNlcyBhbiA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgIHdoZW4gaXQgZW5jb3VudGVycyBhbgordW5kZWNvZGFibGUgYnl0ZSBzZXF1ZW5jZSBhbmQgYW4gOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYCBmb3IgYW4gdW5lbmNvZGFibGUKK2NoYXJhY3Rlci4KKworVGhlIE1CQ1MgY29kZWMgc3VwcG9ydHMgYGAnc3RyaWN0J2BgIGFuZCBgYCdpZ25vcmUnYGAgZXJyb3IgaGFuZGxlcnMgZm9yCitkZWNvZGluZywgYW5kIGBgJ3N0cmljdCdgYCBhbmQgYGAncmVwbGFjZSdgYCBmb3IgZW5jb2RpbmcuCisKK1RvIGVtdWxhdGUgUHl0aG9uMy4xIE1CQ1MgZW5jb2RpbmcsIHNlbGVjdCB0aGUgYGAnaWdub3JlJ2BgIGhhbmRsZXIgZm9yIGRlY29kaW5nCithbmQgdGhlIGBgJ3JlcGxhY2UnYGAgaGFuZGxlciBmb3IgZW5jb2RpbmcuCisKK09uIE1hYyBPUyBYLCBQeXRob24gZGVjb2RlcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHdpdGggYGAndXRmLTgnYGAgcmF0aGVyIHRoYW4KK3RoZSBsb2NhbGUgZW5jb2RpbmcuCisKK0J5IGRlZmF1bHQsIDptb2Q6YHRhcmZpbGVgIHVzZXMgYGAndXRmLTgnYGAgZW5jb2Rpbmcgb24gV2luZG93cyAoaW5zdGVhZCBvZgorYGAnbWJjcydgYCkgYW5kIHRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgZXJyb3IgaGFuZGxlciBvbiBhbGwgb3BlcmF0aW5nCitzeXN0ZW1zLgorCisKK0RvY3VtZW50YXRpb24KKz09PT09PT09PT09PT0KKworVGhlIGRvY3VtZW50YXRpb24gY29udGludWVzIHRvIGJlIGltcHJvdmVkLgorCisqIEEgdGFibGUgb2YgcXVpY2sgbGlua3MgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHRvcCBvZiBsZW5ndGh5IHNlY3Rpb25zIHN1Y2ggYXMKKyAgOnJlZjpgYnVpbHQtaW4tZnVuY3NgLiAgSW4gdGhlIGNhc2Ugb2YgOm1vZDpgaXRlcnRvb2xzYCwgdGhlIGxpbmtzIGFyZQorICBhY2NvbXBhbmllZCBieSB0YWJsZXMgb2YgY2hlYXRzaGVldC1zdHlsZSBzdW1tYXJpZXMgdG8gcHJvdmlkZSBhbiBvdmVydmlldyBhbmQKKyAgbWVtb3J5IGpvZyB3aXRob3V0IGhhdmluZyB0byByZWFkIGFsbCBvZiB0aGUgZG9jcy4KKworKiBJbiBzb21lIGNhc2VzLCB0aGUgcHVyZSBQeXRob24gc291cmNlIGNvZGUgY2FuIGJlIGEgaGVscGZ1bCBhZGp1bmN0IHRvIHRoZQorICBkb2N1bWVudGF0aW9uLCBzbyBub3cgbWFueSBtb2R1bGVzIG5vdyBmZWF0dXJlIHF1aWNrIGxpbmtzIHRvIHRoZSBsYXRlc3QKKyAgdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUuICBGb3IgZXhhbXBsZSwgdGhlIDptb2Q6YGZ1bmN0b29sc2AgbW9kdWxlCisgIGRvY3VtZW50YXRpb24gaGFzIGEgcXVpY2sgbGluayBhdCB0aGUgdG9wIGxhYmVsZWQ6CisKKyAgICAqKlNvdXJjZSBjb2RlKiogOnNvdXJjZTpgTGliL2Z1bmN0b29scy5weWAuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyBzZWUKKyAgYHJhdGlvbmFsZSA8aHR0cDovL3JoZXR0aW5nZXIud29yZHByZXNzLmNvbS8yMDExLzAxLzI4L29wZW4teW91ci1zb3VyY2UtbW9yZS8+YF8uKQorCisqIFRoZSBkb2NzIG5vdyBjb250YWluIG1vcmUgZXhhbXBsZXMgYW5kIHJlY2lwZXMuICBJbiBwYXJ0aWN1bGFyLCA6bW9kOmByZWAKKyAgbW9kdWxlIGhhcyBhbiBleHRlbnNpdmUgc2VjdGlvbiwgOnJlZjpgcmUtZXhhbXBsZXNgLiAgTGlrZXdpc2UsIHRoZQorICA6bW9kOmBpdGVydG9vbHNgIG1vZHVsZSBjb250aW51ZXMgdG8gYmUgdXBkYXRlZCB3aXRoIG5ldworICA6cmVmOmBpdGVydG9vbHMtcmVjaXBlc2AuCisKKyogVGhlIDptb2Q6YGRhdGV0aW1lYCBtb2R1bGUgbm93IGhhcyBhbiBhdXhpbGlhcnkgaW1wbGVtZW50YXRpb24gaW4gcHVyZSBQeXRob24uCisgIE5vIGZ1bmN0aW9uYWxpdHkgd2FzIGNoYW5nZWQuICBUaGlzIGp1c3QgcHJvdmlkZXMgYW4gZWFzaWVyLXRvLXJlYWQgYWx0ZXJuYXRlCisgIGltcGxlbWVudGF0aW9uLgorCisgIChDb250cmlidXRlZCBieSBBbGV4YW5kZXIgQmVsb3BvbHNreSBpbiA6aXNzdWU6YDk1MjhgLikKKworKiBUaGUgdW5tYWludGFpbmVkIDpmaWxlOmBEZW1vYCBkaXJlY3RvcnkgaGFzIGJlZW4gcmVtb3ZlZC4gIFNvbWUgZGVtb3Mgd2VyZQorICBpbnRlZ3JhdGVkIGludG8gdGhlIGRvY3VtZW50YXRpb24sIHNvbWUgd2VyZSBtb3ZlZCB0byB0aGUgOmZpbGU6YFRvb2xzL2RlbW9gCisgIGRpcmVjdG9yeSwgYW5kIG90aGVycyB3ZXJlIHJlbW92ZWQgYWx0b2dldGhlci4KKworICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsIGluIDppc3N1ZTpgNzk2MmAuKQorCisKK0lETEUKKz09PT0KKworKiBUaGUgZm9ybWF0IG1lbnUgbm93IGhhcyBhbiBvcHRpb24gdG8gY2xlYW4gc291cmNlIGZpbGVzIGJ5IHN0cmlwcGluZworICB0cmFpbGluZyB3aGl0ZXNwYWNlLgorCisgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA1MTUwYC4pCisKKyogSURMRSBvbiBNYWMgT1MgWCBub3cgd29ya3Mgd2l0aCBib3RoIENhcmJvbiBBcXVhVGsgYW5kIENvY29hIEFxdWFUay4KKworICAoQ29udHJpYnV0ZWQgYnkgS2V2aW4gV2FsemVyLCBOZWQgRGVpbHksIGFuZCBSb25hbGQgT3Vzc29yZW47IDppc3N1ZTpgNjA3NWAuKQorCitDb2RlIFJlcG9zaXRvcnkKKz09PT09PT09PT09PT09PQorCitJbiBhZGRpdGlvbiB0byB0aGUgZXhpc3RpbmcgU3VidmVyc2lvbiBjb2RlIHJlcG9zaXRvcnkgYXQgaHR0cDovL3N2bi5weXRob24ub3JnCit0aGVyZSBpcyBub3cgYSBgTWVyY3VyaWFsIDxodHRwOi8vbWVyY3VyaWFsLnNlbGVuaWMuY29tLz5gXyByZXBvc2l0b3J5IGF0CitodHRwOi8vaGcucHl0aG9uLm9yZy9cLgorCitBZnRlciB0aGUgMy4yIHJlbGVhc2UsIHRoZXJlIGFyZSBwbGFucyB0byBzd2l0Y2ggdG8gTWVyY3VyaWFsIGFzIHRoZSBwcmltYXJ5CityZXBvc2l0b3J5LiAgVGhpcyBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHNob3VsZCBtYWtlIGl0IGVhc2llciBmb3IKK21lbWJlcnMgb2YgdGhlIGNvbW11bml0eSB0byBjcmVhdGUgYW5kIHNoYXJlIGV4dGVybmFsIGNoYW5nZXNldHMuICBTZWUKKzpwZXA6YDM4NWAgZm9yIGRldGFpbHMuCisKK1RvIGxlYXJuIHRoZSBuZXcgdmVyc2lvbiBjb250cm9sIHN5c3RlbSwgc2VlIHRoZSBgdHV0b3JpYWwgYnkgSm9lbAorU3BvbHNreSA8aHR0cDovL2hnaW5pdC5jb20+YF8gb3IgdGhlIGBHdWlkZSB0byBNZXJjdXJpYWwgV29ya2Zsb3dzCis8aHR0cDovL21lcmN1cmlhbC5zZWxlbmljLmNvbS9ndWlkZS8+YF8uCisKKworQnVpbGQgYW5kIEMgQVBJIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09CisKK0NoYW5nZXMgdG8gUHl0aG9uJ3MgYnVpbGQgcHJvY2VzcyBhbmQgdG8gdGhlIEMgQVBJIGluY2x1ZGU6CisKKyogVGhlICppZGxlKiwgKnB5ZG9jKiBhbmQgKjJ0bzMqIHNjcmlwdHMgYXJlIG5vdyBpbnN0YWxsZWQgd2l0aCBhCisgIHZlcnNpb24tc3BlY2lmaWMgc3VmZml4IG9uIGBgbWFrZSBhbHRpbnN0YWxsYGAgKDppc3N1ZTpgMTA2NzlgKS4KKworKiBUaGUgQyBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIFVuaWNvZGUgRGF0YWJhc2Ugbm93IGFjY2VwdCBhbmQgcmV0dXJuCisgIGNoYXJhY3RlcnMgZnJvbSB0aGUgZnVsbCBVbmljb2RlIHJhbmdlLCBldmVuIG9uIG5hcnJvdyB1bmljb2RlIGJ1aWxkcworICAoUHlfVU5JQ09ERV9UT0xPV0VSLCBQeV9VTklDT0RFX0lTREVDSU1BTCwgYW5kIG90aGVycykuICBBIHZpc2libGUgZGlmZmVyZW5jZQorICBpbiBQeXRob24gaXMgdGhhdCA6ZnVuYzpgdW5pY29kZWRhdGEubnVtZXJpY2Agbm93IHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWUKKyAgZm9yIGxhcmdlIGNvZGUgcG9pbnRzLCBhbmQgOmZ1bmM6YHJlcHJgIG1heSBjb25zaWRlciBtb3JlIGNoYXJhY3RlcnMgYXMKKyAgcHJpbnRhYmxlLgorCisgIChSZXBvcnRlZCBieSBCdXBqb2UgTGVlIGFuZCBmaXhlZCBieSBBbWF1cnkgRm9yZ2VvdCBEJ0FyYzsgOmlzc3VlOmA1MTI3YC4pCisKKyogQ29tcHV0ZWQgZ290b3MgYXJlIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycyAod2hpY2ggYXJlCisgIGRldGVjdGVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0KS4gIFRoZXkgY2FuIHN0aWxsIGJlIGRpc2FibGVkIHNlbGVjdGl2ZWx5IGJ5CisgIHNwZWNpZnlpbmcgYGAtLXdpdGhvdXQtY29tcHV0ZWQtZ290b3NgYC4KKworICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3U7IDppc3N1ZTpgOTIwM2AuKQorCisqIFRoZSBvcHRpb24gYGAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9uc2BgIHdhcyByZW1vdmVkLiAgVGhlIGJ1aWx0LWluIHVuaWNvZGUKKyAgZGF0YWJhc2UgaXMgbm93IHVzZWQgZm9yIGFsbCBmdW5jdGlvbnMuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEFtYXVyeSBGb3JnZW90IEQnQXJjOyA6aXNzdWU6YDkyMTBgLikKKworKiBIYXNoIHZhbHVlcyBhcmUgbm93IHZhbHVlcyBvZiBhIG5ldyB0eXBlLCA6Yzp0eXBlOmBQeV9oYXNoX3RgLCB3aGljaCBpcworICBkZWZpbmVkIHRvIGJlIHRoZSBzYW1lIHNpemUgYXMgYSBwb2ludGVyLiAgUHJldmlvdXNseSB0aGV5IHdlcmUgb2YgdHlwZSBsb25nLAorICB3aGljaCBvbiBzb21lIDY0LWJpdCBvcGVyYXRpbmcgc3lzdGVtcyBpcyBzdGlsbCBvbmx5IDMyIGJpdHMgbG9uZy4gIEFzIGEKKyAgcmVzdWx0IG9mIHRoaXMgZml4LCA6Y2xhc3M6YHNldGAgYW5kIDpjbGFzczpgZGljdGAgY2FuIG5vdyBob2xkIG1vcmUgdGhhbgorICBgYDIqKjMyYGAgZW50cmllcyBvbiBidWlsZHMgd2l0aCA2NC1iaXQgcG9pbnRlcnMgKHByZXZpb3VzbHksIHRoZXkgY291bGQgZ3JvdworICB0byB0aGF0IHNpemUgYnV0IHRoZWlyIHBlcmZvcm1hbmNlIGRlZ3JhZGVkIGNhdGFzdHJvcGhpY2FsbHkpLgorCisgIChTdWdnZXN0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYW5kIGltcGxlbWVudGVkIGJ5IEJlbmphbWluIFBldGVyc29uOworICA6aXNzdWU6YDk3NzhgLikKKworKiBBIG5ldyBtYWNybyA6YzptYWNybzpgUHlfVkFfQ09QWWAgY29waWVzIHRoZSBzdGF0ZSBvZiB0aGUgdmFyaWFibGUgYXJndW1lbnQKKyAgbGlzdC4gIEl0IGlzIGVxdWl2YWxlbnQgdG8gQzk5ICp2YV9jb3B5KiBidXQgYXZhaWxhYmxlIG9uIGFsbCBQeXRob24gcGxhdGZvcm1zCisgICg6aXNzdWU6YDI0NDNgKS4KKworKiBBIG5ldyBDIEFQSSBmdW5jdGlvbiA6YzpmdW5jOmBQeVN5c19TZXRBcmd2RXhgIGFsbG93cyBhbiBlbWJlZGRlZCBpbnRlcnByZXRlcgorICB0byBzZXQgOmF0dHI6YHN5cy5hcmd2YCB3aXRob3V0IGFsc28gbW9kaWZ5aW5nIDphdHRyOmBzeXMucGF0aGAKKyAgKDppc3N1ZTpgNTc1M2ApLgorCisqIDpjOm1hY3JvOmBQeUV2YWxfQ2FsbE9iamVjdGAgaXMgbm93IG9ubHkgYXZhaWxhYmxlIGluIG1hY3JvIGZvcm0uICBUaGUKKyAgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHdoaWNoIHdhcyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpcworICBub3cgcmVtb3ZlZCAtLSB0aGUgbWFjcm8gd2FzIGludHJvZHVjZWQgaW4gMTk5NyAoOmlzc3VlOmA4Mjc2YCkuCisKKyogVGhlcmUgaXMgYSBuZXcgZnVuY3Rpb24gOmM6ZnVuYzpgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvd2Agd2hpY2gKKyAgaXMgYW5hbG9nb3VzIHRvIDpjOmZ1bmM6YFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvd2AuICBUaGV5IGJvdGggc2VydmUgdG8KKyAgY29udmVydCBQeXRob24gOmNsYXNzOmBpbnRgIGludG8gYSBuYXRpdmUgZml4ZWQtd2lkdGggdHlwZSB3aGlsZSBwcm92aWRpbmcKKyAgZGV0ZWN0aW9uIG9mIGNhc2VzIHdoZXJlIHRoZSBjb252ZXJzaW9uIHdvbid0IGZpdCAoOmlzc3VlOmA3NzY3YCkuCisKKyogVGhlIDpjOmZ1bmM6YFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nYCBmdW5jdGlvbiBub3cgcmV0dXJucyAqbm90CisgIGVxdWFsKiBpZiB0aGUgUHl0aG9uIHN0cmluZyBpcyAqTlVMKiB0ZXJtaW5hdGVkLgorCisqIFRoZXJlIGlzIGEgbmV3IGZ1bmN0aW9uIDpjOmZ1bmM6YFB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2NgIHRoYXQgaXMKKyAgbGlrZSA6YzpmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25gIGJ1dCBhbGxvd3MgYSBkb2NzdHJpbmcgdG8gYmUgc3BlY2lmaWVkLgorICBUaGlzIGxldHMgQyBleGNlcHRpb25zIGhhdmUgdGhlIHNhbWUgc2VsZi1kb2N1bWVudGluZyBjYXBhYmlsaXRpZXMgYXMKKyAgdGhlaXIgcHVyZSBQeXRob24gY291bnRlcnBhcnRzICg6aXNzdWU6YDcwMzNgKS4KKworKiBXaGVuIGNvbXBpbGVkIHdpdGggdGhlIGBgLS13aXRoLXZhbGdyaW5kYGAgb3B0aW9uLCB0aGUgcHltYWxsb2MKKyAgYWxsb2NhdG9yIHdpbGwgYmUgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQuICBUaGlzCisgIGdpdmVzIGltcHJvdmVkIG1lbW9yeSBsZWFrIGRldGVjdGlvbiB3aGVuIHJ1bm5pbmcgdW5kZXIgVmFsZ3JpbmQsIHdoaWxlIHRha2luZworICBhZHZhbnRhZ2Ugb2YgcHltYWxsb2MgYXQgb3RoZXIgdGltZXMgKDppc3N1ZTpgMjQyMmApLgorCisqIFJlbW92ZWQgdGhlIGBgTz9gYCBmb3JtYXQgZnJvbSB0aGUgKlB5QXJnX1BhcnNlKiBmdW5jdGlvbnMuICBUaGUgZm9ybWF0IGlzIG5vCisgIGxvbmdlciB1c2VkIGFuZCBpdCBoYWQgbmV2ZXIgYmVlbiBkb2N1bWVudGVkICg6aXNzdWU6YDg4MzdgKS4KKworVGhlcmUgd2VyZSBhIG51bWJlciBvZiBvdGhlciBzbWFsbCBjaGFuZ2VzIHRvIHRoZSBDLUFQSS4gIFNlZSB0aGUKKzpzb3VyY2U6YE1pc2MvTkVXU2AgZmlsZSBmb3IgYSBjb21wbGV0ZSBsaXN0LgorCitBbHNvLCB0aGVyZSB3ZXJlIGEgbnVtYmVyIG9mIHVwZGF0ZXMgdG8gdGhlIE1hYyBPUyBYIGJ1aWxkLCBzZWUKKzpzb3VyY2U6YE1hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0YCBmb3IgZGV0YWlscy4gIEZvciB1c2VycyBydW5uaW5nIGEgMzIvNjQtYml0CitidWlsZCwgdGhlcmUgaXMgYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgVGNsL1RrIG9uIE1hYyBPUyBYIDEwLjYuCitBY2NvcmRpbmdseSwgd2UgcmVjb21tZW5kIGluc3RhbGxpbmcgYW4gdXBkYXRlZCBhbHRlcm5hdGl2ZSBzdWNoIGFzCitgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS45IDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmV0Y2wvZG93bmxvYWRzPmBfXC4KK1NlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorCitQb3J0aW5nIHRvIFB5dGhvbiAzLjIKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gbGlzdHMgcHJldmlvdXNseSBkZXNjcmliZWQgY2hhbmdlcyBhbmQgb3RoZXIgYnVnZml4ZXMgdGhhdCBtYXkKK3JlcXVpcmUgY2hhbmdlcyB0byB5b3VyIGNvZGU6CisKKyogVGhlIDptb2Q6YGNvbmZpZ3BhcnNlcmAgbW9kdWxlIGhhcyBhIG51bWJlciBvZiBjbGVhbi11cHMuICBUaGUgbWFqb3IgY2hhbmdlIGlzCisgIHRvIHJlcGxhY2UgdGhlIG9sZCA6Y2xhc3M6YENvbmZpZ1BhcnNlcmAgY2xhc3Mgd2l0aCBsb25nLXN0YW5kaW5nIHByZWZlcnJlZAorICBhbHRlcm5hdGl2ZSA6Y2xhc3M6YFNhZmVDb25maWdQYXJzZXJgLiAgSW4gYWRkaXRpb24gdGhlcmUgYXJlIGEgbnVtYmVyIG9mCisgIHNtYWxsZXIgaW5jb21wYXRpYmlsaXRpZXM6CisKKyAgKiBUaGUgaW50ZXJwb2xhdGlvbiBzeW50YXggaXMgbm93IHZhbGlkYXRlZCBvbgorICAgIDptZXRoOmB+Y29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5nZXRgIGFuZAorICAgIDptZXRoOmB+Y29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5zZXRgIG9wZXJhdGlvbnMuIEluIHRoZSBkZWZhdWx0CisgICAgaW50ZXJwb2xhdGlvbiBzY2hlbWUsIG9ubHkgdHdvIHRva2VucyB3aXRoIHBlcmNlbnQgc2lnbnMgYXJlIHZhbGlkOiBgYCUobmFtZSlzYGAKKyAgICBhbmQgYGAlJWBgLCB0aGUgbGF0dGVyIGJlaW5nIGFuIGVzY2FwZWQgcGVyY2VudCBzaWduLgorCisgICogVGhlIDptZXRoOmB+Y29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5zZXRgIGFuZAorICAgIDptZXRoOmB+Y29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlci5hZGRfc2VjdGlvbmAgbWV0aG9kcyBub3cgdmVyaWZ5IHRoYXQKKyAgICB2YWx1ZXMgYXJlIGFjdHVhbCBzdHJpbmdzLiAgRm9ybWVybHksIHVuc3VwcG9ydGVkIHR5cGVzIGNvdWxkIGJlIGludHJvZHVjZWQKKyAgICB1bmludGVudGlvbmFsbHkuCisKKyAgKiBEdXBsaWNhdGUgc2VjdGlvbnMgb3Igb3B0aW9ucyBmcm9tIGEgc2luZ2xlIHNvdXJjZSBub3cgcmFpc2UgZWl0aGVyCisgICAgOmV4YzpgfmNvbmZpZ3BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3JgIG9yCisgICAgOmV4YzpgfmNvbmZpZ3BhcnNlci5EdXBsaWNhdGVPcHRpb25FcnJvcmAuICBGb3JtZXJseSwgZHVwbGljYXRlcyB3b3VsZAorICAgIHNpbGVudGx5IG92ZXJ3cml0ZSBhIHByZXZpb3VzIGVudHJ5LgorCisgICogSW5saW5lIGNvbW1lbnRzIGFyZSBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBzbyBub3cgdGhlICoqOyoqIGNoYXJhY3RlcgorICAgIGNhbiBiZSBzYWZlbHkgdXNlZCBpbiB2YWx1ZXMuCisKKyAgKiBDb21tZW50cyBub3cgY2FuIGJlIGluZGVudGVkLiAgQ29uc2VxdWVudGx5LCBmb3IgKio7Kiogb3IgKiojKiogdG8gYXBwZWFyIGF0CisgICAgdGhlIHN0YXJ0IG9mIGEgbGluZSBpbiBtdWx0aWxpbmUgdmFsdWVzLCBpdCBoYXMgdG8gYmUgaW50ZXJwb2xhdGVkLiAgVGhpcworICAgIGtlZXBzIGNvbW1lbnQgcHJlZml4IGNoYXJhY3RlcnMgaW4gdmFsdWVzIGZyb20gYmVpbmcgbWlzdGFrZW4gYXMgY29tbWVudHMuCisKKyAgKiBgYCIiYGAgaXMgbm93IGEgdmFsaWQgdmFsdWUgYW5kIGlzIG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbgorICAgIGVtcHR5IHN0cmluZy4gRm9yIGVtcHR5IHN0cmluZ3MsIHVzZSBgYCJvcHRpb24gPSJgYCBpbiBhIGxpbmUuCisKKyogVGhlIDptb2Q6YG5udHBsaWJgIG1vZHVsZSB3YXMgcmV3b3JrZWQgZXh0ZW5zaXZlbHksIG1lYW5pbmcgdGhhdCBpdHMgQVBJcworICBhcmUgb2Z0ZW4gaW5jb21wYXRpYmxlIHdpdGggdGhlIDMuMSBBUElzLgorCisqIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzIGNhbiBubyBsb25nZXIgYmUgdXNlZCBhcyBmaWxlbmFtZXM7IGluc3RlYWQsCisgIHRoZXkgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byA6Y2xhc3M6YGJ5dGVzYC4KKworKiBUaGUgOm1ldGg6YGFycmF5LnRvc3RyaW5nYCBhbmQgOm1ldGg6YGFycmF5LmZyb21zdHJpbmdgIGhhdmUgYmVlbiByZW5hbWVkIHRvCisgIDptZXRoOmBhcnJheS50b2J5dGVzYCBhbmQgOm1ldGg6YGFycmF5LmZyb21ieXRlc2AgZm9yIGNsYXJpdHkuICBUaGUgb2xkIG5hbWVzCisgIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAoU2VlIDppc3N1ZTpgODk5MGAuKQorCisqIGBgUHlBcmdfUGFyc2UqKClgYCBmdW5jdGlvbnM6CisKKyAgKiAidCMiIGZvcm1hdCBoYXMgYmVlbiByZW1vdmVkOiB1c2UgInMjIiBvciAicyoiIGluc3RlYWQKKyAgKiAidyIgYW5kICJ3IyIgZm9ybWF0cyBoYXMgYmVlbiByZW1vdmVkOiB1c2UgIncqIiBpbnN0ZWFkCisKKyogVGhlIDpjOnR5cGU6YFB5Q09iamVjdGAgdHlwZSwgZGVwcmVjYXRlZCBpbiAzLjEsIGhhcyBiZWVuIHJlbW92ZWQuICBUbyB3cmFwCisgIG9wYXF1ZSBDIHBvaW50ZXJzIGluIFB5dGhvbiBvYmplY3RzLCB0aGUgOmM6dHlwZTpgUHlDYXBzdWxlYCBBUEkgc2hvdWxkIGJlIHVzZWQKKyAgaW5zdGVhZDsgdGhlIG5ldyB0eXBlIGhhcyBhIHdlbGwtZGVmaW5lZCBpbnRlcmZhY2UgZm9yIHBhc3NpbmcgdHlwaW5nIHNhZmV0eQorICBpbmZvcm1hdGlvbiBhbmQgYSBsZXNzIGNvbXBsaWNhdGVkIHNpZ25hdHVyZSBmb3IgY2FsbGluZyBhIGRlc3RydWN0b3IuCisKKyogVGhlIDpmdW5jOmBzeXMuc2V0ZmlsZXN5c3RlbWVuY29kaW5nYCBmdW5jdGlvbiB3YXMgcmVtb3ZlZCBiZWNhdXNlCisgIGl0IGhhZCBhIGZsYXdlZCBkZXNpZ24uCisKKyogVGhlIDpmdW5jOmByYW5kb20uc2VlZGAgZnVuY3Rpb24gYW5kIG1ldGhvZCBub3cgc2FsdCBzdHJpbmcgc2VlZHMgd2l0aCBhbgorICBzaGE1MTIgaGFzaCBmdW5jdGlvbi4gIFRvIGFjY2VzcyB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiAqc2VlZCogaW4gb3JkZXIgdG8KKyAgcmVwcm9kdWNlIFB5dGhvbiAzLjEgc2VxdWVuY2VzLCBzZXQgdGhlICp2ZXJzaW9uKiBhcmd1bWVudCB0byAqMSosCisgIGBgcmFuZG9tLnNlZWQocywgdmVyc2lvbj0xKWBgLgorCisqIFRoZSBwcmV2aW91c2x5IGRlcHJlY2F0ZWQgOmZ1bmM6YHN0cmluZy5tYWtldHJhbnNgIGZ1bmN0aW9uIGhhcyBiZWVuIHJlbW92ZWQKKyAgaW4gZmF2b3Igb2YgdGhlIHN0YXRpYyBtZXRob2RzIDptZXRoOmBieXRlcy5tYWtldHJhbnNgIGFuZAorICA6bWV0aDpgYnl0ZWFycmF5Lm1ha2V0cmFuc2AuICBUaGlzIGNoYW5nZSBzb2x2ZXMgdGhlIGNvbmZ1c2lvbiBhcm91bmQgd2hpY2gKKyAgdHlwZXMgd2VyZSBzdXBwb3J0ZWQgYnkgdGhlIDptb2Q6YHN0cmluZ2AgbW9kdWxlLiAgTm93LCA6Y2xhc3M6YHN0cmAsCisgIDpjbGFzczpgYnl0ZXNgLCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIGVhY2ggaGF2ZSB0aGVpciBvd24gKiptYWtldHJhbnMqKiBhbmQKKyAgKip0cmFuc2xhdGUqKiBtZXRob2RzIHdpdGggaW50ZXJtZWRpYXRlIHRyYW5zbGF0aW9uIHRhYmxlcyBvZiB0aGUgYXBwcm9wcmlhdGUKKyAgdHlwZS4KKworICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsOyA6aXNzdWU6YDU2NzVgLikKKworKiBUaGUgcHJldmlvdXNseSBkZXByZWNhdGVkIDpmdW5jOmBjb250ZXh0bGliLm5lc3RlZGAgZnVuY3Rpb24gaGFzIGJlZW4gcmVtb3ZlZAorICBpbiBmYXZvciBvZiBhIHBsYWluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2hpY2ggY2FuIGFjY2VwdCBtdWx0aXBsZQorICBjb250ZXh0IG1hbmFnZXJzLiAgVGhlIGxhdHRlciB0ZWNobmlxdWUgaXMgZmFzdGVyIChiZWNhdXNlIGl0IGlzIGJ1aWx0LWluKSwKKyAgYW5kIGl0IGRvZXMgYSBiZXR0ZXIgam9iIGZpbmFsaXppbmcgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyB3aGVuIG9uZSBvZiB0aGVtCisgIHJhaXNlcyBhbiBleGNlcHRpb246OgorCisgICAgd2l0aCBvcGVuKCdteWxvZy50eHQnKSBhcyBpbmZpbGUsIG9wZW4oJ2Eub3V0JywgJ3cnKSBhcyBvdXRmaWxlOgorICAgICAgICBmb3IgbGluZSBpbiBpbmZpbGU6CisgICAgICAgICAgICBpZiAnPGNyaXRpY2FsPicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGxpbmUpCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEdlb3JnIEJyYW5kbCBhbmQgTWF0dGlhcyBCcsOkbmRzdHLDtm07CisgIGBhcHBzcG90IGlzc3VlIDUzMDk0IDxodHRwOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5ND5gXy4pCisKKyogOmZ1bmM6YHN0cnVjdC5wYWNrYCBub3cgb25seSBhbGxvd3MgYnl0ZXMgZm9yIHRoZSBgYHNgYCBzdHJpbmcgcGFjayBjb2RlLgorICBGb3JtZXJseSwgaXQgd291bGQgYWNjZXB0IHRleHQgYXJndW1lbnRzIGFuZCBpbXBsaWNpdGx5IGVuY29kZSB0aGVtIHRvIGJ5dGVzCisgIHVzaW5nIFVURi04LiAgVGhpcyB3YXMgcHJvYmxlbWF0aWMgYmVjYXVzZSBpdCBtYWRlIGFzc3VtcHRpb25zIGFib3V0IHRoZQorICBjb3JyZWN0IGVuY29kaW5nIGFuZCBiZWNhdXNlIGEgdmFyaWFibGUtbGVuZ3RoIGVuY29kaW5nIGNhbiBmYWlsIHdoZW4gd3JpdGluZworICB0byBmaXhlZCBsZW5ndGggc2VnbWVudCBvZiBhIHN0cnVjdHVyZS4KKworICBDb2RlIHN1Y2ggYXMgYGBzdHJ1Y3QucGFjaygnPDZzSEhCQkInLCAnR0lGODdhJywgeCwgeSlgYCBzaG91bGQgYmUgcmV3cml0dGVuCisgIHdpdGggdG8gdXNlIGJ5dGVzIGluc3RlYWQgb2YgdGV4dCwgYGBzdHJ1Y3QucGFjaygnPDZzSEhCQkInLCBiJ0dJRjg3YScsIHgsIHkpYGAuCisKKyAgKERpc2NvdmVyZWQgYnkgRGF2aWQgQmVhemxleSBhbmQgZml4ZWQgYnkgVmljdG9yIFN0aW5uZXI7IDppc3N1ZTpgMTA3ODNgLikKKworKiBUaGUgOmNsYXNzOmB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIGNsYXNzIG5vdyByYWlzZXMgYW4KKyAgOmV4YzpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLlBhcnNlRXJyb3JgIHdoZW4gYSBwYXJzZSBmYWlscy4gUHJldmlvdXNseSBpdAorICByYWlzZWQgYSA6ZXhjOmB4bWwucGFyc2Vycy5leHBhdC5FeHBhdEVycm9yYC4KKworKiBUaGUgbmV3LCBsb25nZXIgOmZ1bmM6YHN0cmAgdmFsdWUgb24gZmxvYXRzIG1heSBicmVhayBkb2N0ZXN0cyB3aGljaCByZWx5IG9uCisgIHRoZSBvbGQgb3V0cHV0IGZvcm1hdC4KKworKiBJbiA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gLCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKmNsb3NlX2ZkcyogaXMgbm93CisgIGBgVHJ1ZWBgIHVuZGVyIFVuaXg7IHVuZGVyIFdpbmRvd3MsIGl0IGlzIGBgVHJ1ZWBgIGlmIHRoZSB0aHJlZSBzdGFuZGFyZAorICBzdHJlYW1zIGFyZSBzZXQgdG8gYGBOb25lYGAsIGBgRmFsc2VgYCBvdGhlcndpc2UuICBQcmV2aW91c2x5LCAqY2xvc2VfZmRzKgorICB3YXMgYWx3YXlzIGBgRmFsc2VgYCBieSBkZWZhdWx0LCB3aGljaCBwcm9kdWNlZCBkaWZmaWN1bHQgdG8gc29sdmUgYnVncworICBvciByYWNlIGNvbmRpdGlvbnMgd2hlbiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgd291bGQgbGVhayBpbnRvIHRoZSBjaGlsZAorICBwcm9jZXNzLgorCisqIFN1cHBvcnQgZm9yIGxlZ2FjeSBIVFRQIDAuOSBoYXMgYmVlbiByZW1vdmVkIGZyb20gOm1vZDpgdXJsbGliLnJlcXVlc3RgCisgIGFuZCA6bW9kOmBodHRwLmNsaWVudGAuICBTdWNoIHN1cHBvcnQgaXMgc3RpbGwgcHJlc2VudCBvbiB0aGUgc2VydmVyIHNpZGUKKyAgKGluIDptb2Q6YGh0dHAuc2VydmVyYCkuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91LCA6aXNzdWU6YDEwNzExYC4pCisKKyogU1NMIHNvY2tldHMgaW4gdGltZW91dCBtb2RlIG5vdyByYWlzZSA6ZXhjOmBzb2NrZXQudGltZW91dGAgd2hlbiBhIHRpbWVvdXQKKyAgb2NjdXJzLCByYXRoZXIgdGhhbiBhIGdlbmVyaWMgOmV4YzpgfnNzbC5TU0xFcnJvcmAuCisKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91LCA6aXNzdWU6YDEwMjcyYC4pCisKKyogVGhlIG1pc2xlYWRpbmcgZnVuY3Rpb25zIDpjOmZ1bmM6YFB5RXZhbF9BY3F1aXJlTG9jaygpYCBhbmQKKyAgOmM6ZnVuYzpgUHlFdmFsX1JlbGVhc2VMb2NrKClgIGhhdmUgYmVlbiBvZmZpY2lhbGx5IGRlcHJlY2F0ZWQuICBUaGUKKyAgdGhyZWFkLXN0YXRlIGF3YXJlIEFQSXMgKHN1Y2ggYXMgOmM6ZnVuYzpgUHlFdmFsX1NhdmVUaHJlYWQoKWAKKyAgYW5kIDpjOmZ1bmM6YFB5RXZhbF9SZXN0b3JlVGhyZWFkKClgKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgorCisqIER1ZSB0byBzZWN1cml0eSByaXNrcywgOmZ1bmM6YGFzeW5jb3JlLmhhbmRsZV9hY2NlcHRgIGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFuZAorICBhIG5ldyBmdW5jdGlvbiwgOmZ1bmM6YGFzeW5jb3JlLmhhbmRsZV9hY2NlcHRlZGAsIHdhcyBhZGRlZCB0byByZXBsYWNlIGl0LgorCisgIChDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2xhIGluIDppc3N1ZTpgNjcwNmAuKQorCisqIER1ZSB0byB0aGUgbmV3IDp0ZXJtOmBHSUxgIGltcGxlbWVudGF0aW9uLCA6YzpmdW5jOmBQeUV2YWxfSW5pdFRocmVhZHMoKWAKKyAgY2Fubm90IGJlIGNhbGxlZCBiZWZvcmUgOmM6ZnVuYzpgUHlfSW5pdGlhbGl6ZSgpYCBhbnltb3JlLgorCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0IGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdAppbmRleCBhMWVmZTkyLi44MjIwYmQyIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CisrKyBiL0RvYy93aGF0c25ldy9pbmRleC5yc3QKQEAgLTExLDggKzExLDEwIEBACiAuLiB0b2N0cmVlOjoKICAgIDptYXhkZXB0aDogMgogCisgICAzLjIucnN0CiAgICAzLjEucnN0CiAgICAzLjAucnN0CisgICAyLjcucnN0CiAgICAyLjYucnN0CiAgICAyLjUucnN0CiAgICAyLjQucnN0CmRpZmYgLS1naXQgYS9HcmFtbWFyL0dyYW1tYXIgYi9HcmFtbWFyL0dyYW1tYXIKaW5kZXggMWYyMjZiOC4uODlmNGMzNiAxMDA2NDQKLS0tIGEvR3JhbW1hci9HcmFtbWFyCisrKyBiL0dyYW1tYXIvR3JhbW1hcgpAQCAtMTEsOSArMTEsOSBAQAogIyAiSG93IHRvIENoYW5nZSBQeXRob24ncyBHcmFtbWFyIgogCiAjIFN0YXJ0IHN5bWJvbHMgZm9yIHRoZSBncmFtbWFyOgotIwlzaW5nbGVfaW5wdXQgaXMgYSBzaW5nbGUgaW50ZXJhY3RpdmUgc3RhdGVtZW50OwotIwlmaWxlX2lucHV0IGlzIGEgbW9kdWxlIG9yIHNlcXVlbmNlIG9mIGNvbW1hbmRzIHJlYWQgZnJvbSBhbiBpbnB1dCBmaWxlOwotIwlldmFsX2lucHV0IGlzIHRoZSBpbnB1dCBmb3IgdGhlIGV2YWwoKSBhbmQgaW5wdXQoKSBmdW5jdGlvbnMuCisjICAgICAgIHNpbmdsZV9pbnB1dCBpcyBhIHNpbmdsZSBpbnRlcmFjdGl2ZSBzdGF0ZW1lbnQ7CisjICAgICAgIGZpbGVfaW5wdXQgaXMgYSBtb2R1bGUgb3Igc2VxdWVuY2Ugb2YgY29tbWFuZHMgcmVhZCBmcm9tIGFuIGlucHV0IGZpbGU7CisjICAgICAgIGV2YWxfaW5wdXQgaXMgdGhlIGlucHV0IGZvciB0aGUgZXZhbCgpIGFuZCBpbnB1dCgpIGZ1bmN0aW9ucy4KICMgTkI6IGNvbXBvdW5kX3N0bXQgaW4gc2luZ2xlX2lucHV0IGlzIGZvbGxvd2VkIGJ5IGV4dHJhIE5FV0xJTkUhCiBzaW5nbGVfaW5wdXQ6IE5FV0xJTkUgfCBzaW1wbGVfc3RtdCB8IGNvbXBvdW5kX3N0bXQgTkVXTElORQogZmlsZV9pbnB1dDogKE5FV0xJTkUgfCBzdG10KSogRU5ETUFSS0VSCkBAIC0yNCwyMSArMjQsMjIgQEAKIGRlY29yYXRlZDogZGVjb3JhdG9ycyAoY2xhc3NkZWYgfCBmdW5jZGVmKQogZnVuY2RlZjogJ2RlZicgTkFNRSBwYXJhbWV0ZXJzIFsnLT4nIHRlc3RdICc6JyBzdWl0ZQogcGFyYW1ldGVyczogJygnIFt0eXBlZGFyZ3NsaXN0XSAnKScKLXR5cGVkYXJnc2xpc3Q6ICgodGZwZGVmIFsnPScgdGVzdF0gJywnKSoKLSAgICAgICAgICAgICAgICAoJyonIFt0ZnBkZWZdICgnLCcgdGZwZGVmIFsnPScgdGVzdF0pKiBbJywnICcqKicgdGZwZGVmXSB8ICcqKicgdGZwZGVmKQotICAgICAgICAgICAgICAgIHwgdGZwZGVmIFsnPScgdGVzdF0gKCcsJyB0ZnBkZWYgWyc9JyB0ZXN0XSkqIFsnLCddKQordHlwZWRhcmdzbGlzdDogKHRmcGRlZiBbJz0nIHRlc3RdICgnLCcgdGZwZGVmIFsnPScgdGVzdF0pKiBbJywnCisgICAgICAgWycqJyBbdGZwZGVmXSAoJywnIHRmcGRlZiBbJz0nIHRlc3RdKSogWycsJyAnKionIHRmcGRlZl0gfCAnKionIHRmcGRlZl1dCisgICAgIHwgICcqJyBbdGZwZGVmXSAoJywnIHRmcGRlZiBbJz0nIHRlc3RdKSogWycsJyAnKionIHRmcGRlZl0gfCAnKionIHRmcGRlZikKIHRmcGRlZjogTkFNRSBbJzonIHRlc3RdCi12YXJhcmdzbGlzdDogKCh2ZnBkZWYgWyc9JyB0ZXN0XSAnLCcpKgotICAgICAgICAgICAgICAoJyonIFt2ZnBkZWZdICgnLCcgdmZwZGVmIFsnPScgdGVzdF0pKiAgWycsJyAnKionIHZmcGRlZl0gfCAnKionIHZmcGRlZikKLSAgICAgICAgICAgICAgfCB2ZnBkZWYgWyc9JyB0ZXN0XSAoJywnIHZmcGRlZiBbJz0nIHRlc3RdKSogWycsJ10pCit2YXJhcmdzbGlzdDogKHZmcGRlZiBbJz0nIHRlc3RdICgnLCcgdmZwZGVmIFsnPScgdGVzdF0pKiBbJywnCisgICAgICAgWycqJyBbdmZwZGVmXSAoJywnIHZmcGRlZiBbJz0nIHRlc3RdKSogWycsJyAnKionIHZmcGRlZl0gfCAnKionIHZmcGRlZl1dCisgICAgIHwgICcqJyBbdmZwZGVmXSAoJywnIHZmcGRlZiBbJz0nIHRlc3RdKSogWycsJyAnKionIHZmcGRlZl0gfCAnKionIHZmcGRlZikKIHZmcGRlZjogTkFNRQogCiBzdG10OiBzaW1wbGVfc3RtdCB8IGNvbXBvdW5kX3N0bXQKIHNpbXBsZV9zdG10OiBzbWFsbF9zdG10ICgnOycgc21hbGxfc3RtdCkqIFsnOyddIE5FV0xJTkUKIHNtYWxsX3N0bXQ6IChleHByX3N0bXQgfCBkZWxfc3RtdCB8IHBhc3Nfc3RtdCB8IGZsb3dfc3RtdCB8CiAgICAgICAgICAgICAgaW1wb3J0X3N0bXQgfCBnbG9iYWxfc3RtdCB8IG5vbmxvY2FsX3N0bXQgfCBhc3NlcnRfc3RtdCkKLWV4cHJfc3RtdDogdGVzdGxpc3QgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkgfAotICAgICAgICAgICAgICAgICAgICAgKCc9JyAoeWllbGRfZXhwcnx0ZXN0bGlzdCkpKikKK2V4cHJfc3RtdDogdGVzdGxpc3Rfc3Rhcl9leHByIChhdWdhc3NpZ24gKHlpZWxkX2V4cHJ8dGVzdGxpc3QpIHwKKyAgICAgICAgICAgICAgICAgICAgICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3Rfc3Rhcl9leHByKSkqKQordGVzdGxpc3Rfc3Rhcl9leHByOiAodGVzdHxzdGFyX2V4cHIpICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddCiBhdWdhc3NpZ246ICgnKz0nIHwgJy09JyB8ICcqPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JyB8CiAgICAgICAgICAgICAnPDw9JyB8ICc+Pj0nIHwgJyoqPScgfCAnLy89JykKICMgRm9yIG5vcm1hbCBhc3NpZ25tZW50cywgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgZW5mb3JjZWQgYnkgdGhlIGludGVycHJldGVyCkBAIC03MCw5ICs3MSw5IEBACiBmb3Jfc3RtdDogJ2ZvcicgZXhwcmxpc3QgJ2luJyB0ZXN0bGlzdCAnOicgc3VpdGUgWydlbHNlJyAnOicgc3VpdGVdCiB0cnlfc3RtdDogKCd0cnknICc6JyBzdWl0ZQogICAgICAgICAgICAoKGV4Y2VwdF9jbGF1c2UgJzonIHN1aXRlKSsKLQkgICAgWydlbHNlJyAnOicgc3VpdGVdCi0JICAgIFsnZmluYWxseScgJzonIHN1aXRlXSB8Ci0JICAgJ2ZpbmFsbHknICc6JyBzdWl0ZSkpCisgICAgICAgICAgICBbJ2Vsc2UnICc6JyBzdWl0ZV0KKyAgICAgICAgICAgIFsnZmluYWxseScgJzonIHN1aXRlXSB8CisgICAgICAgICAgICdmaW5hbGx5JyAnOicgc3VpdGUpKQogd2l0aF9zdG10OiAnd2l0aCcgd2l0aF9pdGVtICgnLCcgd2l0aF9pdGVtKSogICc6JyBzdWl0ZQogd2l0aF9pdGVtOiB0ZXN0IFsnYXMnIGV4cHJdCiAjIE5CIGNvbXBpbGUuYyBtYWtlcyBzdXJlIHRoYXQgdGhlIGRlZmF1bHQgZXhjZXB0IGNsYXVzZSBpcyBsYXN0CkBAIC04Niw5ICs4Nyw5IEBACiBvcl90ZXN0OiBhbmRfdGVzdCAoJ29yJyBhbmRfdGVzdCkqCiBhbmRfdGVzdDogbm90X3Rlc3QgKCdhbmQnIG5vdF90ZXN0KSoKIG5vdF90ZXN0OiAnbm90JyBub3RfdGVzdCB8IGNvbXBhcmlzb24KLWNvbXBhcmlzb246IHN0YXJfZXhwciAoY29tcF9vcCBzdGFyX2V4cHIpKgorY29tcGFyaXNvbjogZXhwciAoY29tcF9vcCBleHByKSoKIGNvbXBfb3A6ICc8J3wnPid8Jz09J3wnPj0nfCc8PSd8Jzw+J3wnIT0nfCdpbid8J25vdCcgJ2luJ3wnaXMnfCdpcycgJ25vdCcKLXN0YXJfZXhwcjogWycqJ10gZXhwcgorc3Rhcl9leHByOiAnKicgZXhwcgogZXhwcjogeG9yX2V4cHIgKCd8JyB4b3JfZXhwcikqCiB4b3JfZXhwcjogYW5kX2V4cHIgKCdeJyBhbmRfZXhwcikqCiBhbmRfZXhwcjogc2hpZnRfZXhwciAoJyYnIHNoaWZ0X2V4cHIpKgpAQCAtMTAxLDEyICsxMDIsMTIgQEAKICAgICAgICAnWycgW3Rlc3RsaXN0X2NvbXBdICddJyB8CiAgICAgICAgJ3snIFtkaWN0b3JzZXRtYWtlcl0gJ30nIHwKICAgICAgICBOQU1FIHwgTlVNQkVSIHwgU1RSSU5HKyB8ICcuLi4nIHwgJ05vbmUnIHwgJ1RydWUnIHwgJ0ZhbHNlJykKLXRlc3RsaXN0X2NvbXA6IHRlc3QgKCBjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddICkKK3Rlc3RsaXN0X2NvbXA6ICh0ZXN0fHN0YXJfZXhwcikgKCBjb21wX2ZvciB8ICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddICkKIHRyYWlsZXI6ICcoJyBbYXJnbGlzdF0gJyknIHwgJ1snIHN1YnNjcmlwdGxpc3QgJ10nIHwgJy4nIE5BTUUKIHN1YnNjcmlwdGxpc3Q6IHN1YnNjcmlwdCAoJywnIHN1YnNjcmlwdCkqIFsnLCddCiBzdWJzY3JpcHQ6IHRlc3QgfCBbdGVzdF0gJzonIFt0ZXN0XSBbc2xpY2VvcF0KIHNsaWNlb3A6ICc6JyBbdGVzdF0KLWV4cHJsaXN0OiBzdGFyX2V4cHIgKCcsJyBzdGFyX2V4cHIpKiBbJywnXQorZXhwcmxpc3Q6IChleHByfHN0YXJfZXhwcikgKCcsJyAoZXhwcnxzdGFyX2V4cHIpKSogWycsJ10KIHRlc3RsaXN0OiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddCiBkaWN0b3JzZXRtYWtlcjogKCAodGVzdCAnOicgdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QgJzonIHRlc3QpKiBbJywnXSkpIHwKICAgICAgICAgICAgICAgICAgICh0ZXN0IChjb21wX2ZvciB8ICgnLCcgdGVzdCkqIFsnLCddKSkgKQpAQCAtMTIzLDggKzEyNCw2IEBACiBjb21wX2ZvcjogJ2ZvcicgZXhwcmxpc3QgJ2luJyBvcl90ZXN0IFtjb21wX2l0ZXJdCiBjb21wX2lmOiAnaWYnIHRlc3Rfbm9jb25kIFtjb21wX2l0ZXJdCiAKLXRlc3RsaXN0MTogdGVzdCAoJywnIHRlc3QpKgotCiAjIG5vdCB1c2VkIGluIGdyYW1tYXIsIGJ1dCBtYXkgYXBwZWFyIGluICJub2RlIiBwYXNzZWQgZnJvbSBQYXJzZXIgdG8gQ29tcGlsZXIKIGVuY29kaW5nX2RlY2w6IE5BTUUKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggMGQ4YTVmNS4uZGIzM2E3NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC00OSw2ICs0OSw4IEBACiAKICNpbmNsdWRlICJweXBvcnQuaCIKIAorI2luY2x1ZGUgInB5YXRvbWljLmgiCisKIC8qIERlYnVnLW1vZGUgYnVpbGQgd2l0aCBweW1hbGxvYyBpbXBsaWVzIFBZTUFMTE9DX0RFQlVHLgogICogIFBZTUFMTE9DX0RFQlVHIGlzIGluIGVycm9yIGlmIHB5bWFsbG9jIGlzIG5vdCBpbiB1c2UuCiAgKi8KQEAgLTU5LDEwICs2MSwxMiBAQAogI2Vycm9yICJQWU1BTExPQ19ERUJVRyByZXF1aXJlcyBXSVRIX1BZTUFMTE9DIgogI2VuZGlmCiAjaW5jbHVkZSAicHltYXRoLmgiCisjaW5jbHVkZSAicHl0aW1lLmgiCiAjaW5jbHVkZSAicHltZW0uaCIKIAogI2luY2x1ZGUgIm9iamVjdC5oIgogI2luY2x1ZGUgIm9iamltcGwuaCIKKyNpbmNsdWRlICJ0eXBlc2xvdHMuaCIKIAogI2luY2x1ZGUgInB5ZGVidWcuaCIKIApAQCAtNzMsOSArNzcsNyBAQAogI2luY2x1ZGUgImxvbmdpbnRyZXByLmgiCiAjaW5jbHVkZSAiYm9vbG9iamVjdC5oIgogI2luY2x1ZGUgImZsb2F0b2JqZWN0LmgiCi0jaWZuZGVmIFdJVEhPVVRfQ09NUExFWAogI2luY2x1ZGUgImNvbXBsZXhvYmplY3QuaCIKLSNlbmRpZgogI2luY2x1ZGUgInJhbmdlb2JqZWN0LmgiCiAjaW5jbHVkZSAibWVtb3J5b2JqZWN0LmgiCiAjaW5jbHVkZSAidHVwbGVvYmplY3QuaCIKQEAgLTg4LDcgKzkwLDYgQEAKICNpbmNsdWRlICJmdW5jb2JqZWN0LmgiCiAjaW5jbHVkZSAiY2xhc3NvYmplY3QuaCIKICNpbmNsdWRlICJmaWxlb2JqZWN0LmgiCi0jaW5jbHVkZSAiY29iamVjdC5oIgogI2luY2x1ZGUgInB5Y2Fwc3VsZS5oIgogI2luY2x1ZGUgInRyYWNlYmFjay5oIgogI2luY2x1ZGUgInNsaWNlb2JqZWN0LmgiCkBAIC05OCw2ICs5OSw4IEBACiAjaW5jbHVkZSAiZGVzY3JvYmplY3QuaCIKICNpbmNsdWRlICJ3YXJuaW5ncy5oIgogI2luY2x1ZGUgIndlYWtyZWZvYmplY3QuaCIKKyNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKKwogCiAjaW5jbHVkZSAiY29kZWNzLmgiCiAjaW5jbHVkZSAicHllcnJvcnMuaCIKQEAgLTEyMiw5ICsxMjUsMjAgQEAKICNpbmNsdWRlICJweXN0cnRvZC5oIgogI2luY2x1ZGUgInB5c3RyY21wLmgiCiAjaW5jbHVkZSAiZHRvYS5oIgorI2luY2x1ZGUgImZpbGV1dGlscy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCiAKIC8qIF9QeV9NYW5nbGUgaXMgZGVmaW5lZCBpbiBjb21waWxlLmMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBfUHlfTWFuZ2xlKFB5T2JqZWN0ICpwLCBQeU9iamVjdCAqbmFtZSk7CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKIAogLyogQXJndW1lbnQgbXVzdCBiZSBhIGNoYXIgb3IgYW4gaW50IGluIFstMTI4LCAxMjddIG9yIFswLCAyNTVdLiAqLwogI2RlZmluZSBQeV9DSEFSTUFTSyhjKQkJKCh1bnNpZ25lZCBjaGFyKSgoYykgJiAweGZmKSkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYWJzdHJhY3QuaCBiL0luY2x1ZGUvYWJzdHJhY3QuaAppbmRleCBiYmMwMDkyLi4wZmUwOTU2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2Fic3RyYWN0LmgKKysrIGIvSW5jbHVkZS9hYnN0cmFjdC5oCkBAIC0zODcsNyArMzg3LDkgQEAKICAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeU9iamVjdF9MZW5ndGgoUHlPYmplY3QgKm8pOwogI2RlZmluZSBQeU9iamVjdF9MZW5ndGggUHlPYmplY3RfU2l6ZQogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAgICAgIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOworI2VuZGlmCiAKICAgICAgICAvKgogICAgICBHdWVzcyB0aGUgc2l6ZSBvZiBvYmplY3QgbyB1c2luZyBsZW4obykgb3Igby5fX2xlbmd0aF9oaW50X18oKS4KQEAgLTQ4Niw2ICs0ODgsNyBAQAogCiAgICAgLyogbmV3IGJ1ZmZlciBBUEkgKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeU9iamVjdF9DaGVja0J1ZmZlcihvYmopIFwKICAgICAoKChvYmopLT5vYl90eXBlLT50cF9hc19idWZmZXIgIT0gTlVMTCkgJiYgIFwKICAgICAgKChvYmopLT5vYl90eXBlLT50cF9hc19idWZmZXItPmJmX2dldGJ1ZmZlciAhPSBOVUxMKSkKQEAgLTU3Myw2ICs1NzYsNyBAQAogCiAgICAgICAgLyogUmVsZWFzZXMgYSBQeV9idWZmZXIgb2J0YWluZWQgZnJvbSBnZXRidWZmZXIgUGFyc2VUdXBsZSdzIHMqLgogICAgICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0Zvcm1hdChQeU9iamVjdCogb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZm9ybWF0X3NwZWMpOwpAQCAtNzY1LDkgKzc2OSwxMSBAQAogICAgICB0aGF0IGNhbiBhY2NlcHQgYSBjaGFyKiBuYW1pbmcgaW50ZWdyYWwncyB0eXBlLgogICAgICAgICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlOdW1iZXJfQ29udmVydEludGVncmFsVG9JbnQoCiAgICAgICAgICBQeU9iamVjdCAqaW50ZWdyYWwsCiAgICAgICAgICBjb25zdCBjaGFyKiBlcnJvcl9mb3JtYXQpOworI2VuZGlmCiAKICAgICAgICAvKgogICAgIFJldHVybnMgdGhlIG9iamVjdCBjb252ZXJ0ZWQgdG8gUHlfc3NpemVfdCBieSBnb2luZyB0aHJvdWdoCkBAIC0xMDU3LDExICsxMDYzLDEzIEBACiAgICAgIFVzZSBfX2NvbnRhaW5zX18gaWYgcG9zc2libGUsIGVsc2UgX1B5U2VxdWVuY2VfSXRlclNlYXJjaCgpLgogICAgICAgICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUFlfSVRFUlNFQVJDSF9DT1VOVCAgICAxCiAjZGVmaW5lIFBZX0lURVJTRUFSQ0hfSU5ERVggICAgMgogI2RlZmluZSBQWV9JVEVSU0VBUkNIX0NPTlRBSU5TIDMKICAgICAgUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlTZXF1ZW5jZV9JdGVyU2VhcmNoKFB5T2JqZWN0ICpzZXEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiwgaW50IG9wZXJhdGlvbik7CisjZW5kaWYKICAgICAvKgogICAgICAgSXRlcmF0ZSBvdmVyIHNlcS4gIFJlc3VsdCBkZXBlbmRzIG9uIHRoZSBvcGVyYXRpb246CiAgICAgICBQWV9JVEVSU0VBUkNIX0NPVU5UOiAgcmV0dXJuICMgb2YgdGltZXMgb2JqIGFwcGVhcnMgaW4gc2VxOyAtMSBpZgpAQCAtMTIyOCwxMCArMTIzNiwxNSBAQAogICAgICAgLyogaXNzdWJjbGFzcyhvYmplY3QsIHR5cGVvcmNsYXNzKSAqLwogCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoaW50KSBfUHlPYmplY3RfUmVhbElzSW5zdGFuY2UoUHlPYmplY3QgKmluc3QsIFB5T2JqZWN0ICpjbHMpOwogCiBQeUFQSV9GVU5DKGludCkgX1B5T2JqZWN0X1JlYWxJc1N1YmNsYXNzKFB5T2JqZWN0ICpkZXJpdmVkLCBQeU9iamVjdCAqY2xzKTsKIAorUHlBUElfRlVOQyhjaGFyICpjb25zdCAqKSBfUHlTZXF1ZW5jZV9CeXRlc1RvQ2hhcnBBcnJheShQeU9iamVjdCogc2VsZik7CisKK1B5QVBJX0ZVTkModm9pZCkgX1B5X0ZyZWVDaGFyUEFycmF5KGNoYXIgKmNvbnN0IGFycmF5W10pOworI2VuZGlmCiAKIC8qIEZvciBpbnRlcm5hbCB1c2UgYnkgYnVmZmVyIEFQSSBmdW5jdGlvbnMgKi8KIFB5QVBJX0ZVTkModm9pZCkgX1B5X2FkZF9vbmVfdG9faW5kZXhfRihpbnQgbmQsIFB5X3NzaXplX3QgKmluZGV4LApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc3QuaCBiL0luY2x1ZGUvYXN0LmgKaW5kZXggY2MxNGI3Zi4uYTAxNTMzNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hc3QuaAorKysgYi9JbmNsdWRlL2FzdC5oCkBAIC00LDggKzQsMTEgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLVB5QVBJX0ZVTkMobW9kX3R5KSBQeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICosIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCi0JCQkJICBjb25zdCBjaGFyICosIFB5QXJlbmEgKik7CitQeUFQSV9GVU5DKG1vZF90eSkgUHlBU1RfRnJvbU5vZGUoCisgICAgY29uc3Qgbm9kZSAqbiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBQeUFyZW5hICphcmVuYSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKaW5kZXggZTEyODFhNi4uZWNjZDQ0YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCkBAIC0xOSw2ICsxOSw3IEBACiAgKi8KIAogLyogT2JqZWN0IGxheW91dCAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X1ZBUl9IRUFECiAgICAgLyogWFhYKG5ub3J3aXR6KTogc2hvdWxkIG9iX2V4cG9ydHMgYmUgUHlfc3NpemVfdD8gKi8KQEAgLTI2LDYgKzI3LDcgQEAKICAgICBQeV9zc2l6ZV90IG9iX2FsbG9jOyAvKiBIb3cgbWFueSBieXRlcyBhbGxvY2F0ZWQgKi8KICAgICBjaGFyICpvYl9ieXRlczsKIH0gUHlCeXRlQXJyYXlPYmplY3Q7CisjZW5kaWYKIAogLyogVHlwZSBvYmplY3QgKi8KIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJ5dGVBcnJheV9UeXBlOwpAQCAtNDQsMTIgKzQ2LDE0IEBACiBQeUFQSV9GVU5DKGludCkgUHlCeXRlQXJyYXlfUmVzaXplKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwogCiAvKiBNYWNyb3MsIHRyYWRpbmcgc2FmZXR5IGZvciBzcGVlZCAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZikgXAogICAgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLCBcCiAgICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2JfYnl0ZXMgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQogI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAgKGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSksUHlfU0laRShzZWxmKSkKIAogUHlBUElfREFUQShjaGFyKSBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nW107CisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzX21ldGhvZHMuaCBiL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCmluZGV4IDA5Mzg0NDYuLjE0OThiOGYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCisrKyBiL0luY2x1ZGUvYnl0ZXNfbWV0aG9kcy5oCkBAIC0xLDMgKzEsNCBAQAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9CWVRFU19DVFlQRV9ICiAjZGVmaW5lIFB5X0JZVEVTX0NUWVBFX0gKIApAQCAtMzgsNDIgKzM5LDggQEAKIGV4dGVybiBjb25zdCBjaGFyIF9QeV9zd2FwY2FzZV9fZG9jX19bXTsKIGV4dGVybiBjb25zdCBjaGFyIF9QeV9tYWtldHJhbnNfX2RvY19fW107CiAKLS8qIFRoZXNlIGFyZSBsZWZ0IGluIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCB3aWxsIGJlIHJlbW92ZWQKLSAgIGluIDIuOC8zLjIgKi8KLSNkZWZpbmUgSVNMT1dFUihjKSAgUHlfSVNMT1dFUihjKQotI2RlZmluZSBJU1VQUEVSKGMpICBQeV9JU1VQUEVSKGMpCi0jZGVmaW5lIElTQUxQSEEoYykgIFB5X0lTQUxQSEEoYykKLSNkZWZpbmUgSVNESUdJVChjKSAgUHlfSVNESUdJVChjKQotI2RlZmluZSBJU1hESUdJVChjKSBQeV9JU1hESUdJVChjKQotI2RlZmluZSBJU0FMTlVNKGMpICBQeV9JU0FMTlVNKGMpCi0jZGVmaW5lIElTU1BBQ0UoYykgIFB5X0lTU1BBQ0UoYykKLQotI3VuZGVmIGlzbG93ZXIKLSNkZWZpbmUgaXNsb3dlcihjKSB1bmRlZmluZWRfaXNsb3dlcihjKQotI3VuZGVmIGlzdXBwZXIKLSNkZWZpbmUgaXN1cHBlcihjKSB1bmRlZmluZWRfaXN1cHBlcihjKQotI3VuZGVmIGlzYWxwaGEKLSNkZWZpbmUgaXNhbHBoYShjKSB1bmRlZmluZWRfaXNhbHBoYShjKQotI3VuZGVmIGlzZGlnaXQKLSNkZWZpbmUgaXNkaWdpdChjKSB1bmRlZmluZWRfaXNkaWdpdChjKQotI3VuZGVmIGlzeGRpZ2l0Ci0jZGVmaW5lIGlzeGRpZ2l0KGMpIHVuZGVmaW5lZF9pc3hkaWdpdChjKQotI3VuZGVmIGlzYWxudW0KLSNkZWZpbmUgaXNhbG51bShjKSB1bmRlZmluZWRfaXNhbG51bShjKQotI3VuZGVmIGlzc3BhY2UKLSNkZWZpbmUgaXNzcGFjZShjKSB1bmRlZmluZWRfaXNzcGFjZShjKQotCi0vKiBUaGVzZSBhcmUgbGVmdCBpbiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgd2lsbCBiZSByZW1vdmVkCi0gICBpbiAyLjgvMy4yICovCi0jZGVmaW5lIFRPTE9XRVIoYykgUHlfVE9MT1dFUihjKQotI2RlZmluZSBUT1VQUEVSKGMpIFB5X1RPVVBQRVIoYykKLQotI3VuZGVmIHRvbG93ZXIKLSNkZWZpbmUgdG9sb3dlcihjKSB1bmRlZmluZWRfdG9sb3dlcihjKQotI3VuZGVmIHRvdXBwZXIKLSNkZWZpbmUgdG91cHBlcihjKSB1bmRlZmluZWRfdG91cHBlcihjKQotCiAvKiB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIHNvbWUgZG9jcyBhcmUgc2hhcmVkIGZyb20gdGhlIC5vLCBub3Qgc3RhdGljICovCiAjZGVmaW5lIFB5RG9jX1NUUlZBUl9zaGFyZWQobmFtZSxzdHIpIGNvbnN0IGNoYXIgbmFtZVtdID0gUHlEb2NfU1RSKHN0cikKIAogI2VuZGlmIC8qICFQeV9CWVRFU19DVFlQRV9IICovCisjZW5kaWYgLyogIVB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmggYi9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKaW5kZXggOTE2ZTNmNy4uZTFhZjg5ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlc29iamVjdC5oCisrKyBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaApAQCAtMjcsOSArMjcsMTAgQEAKIC8qIENhY2hpbmcgdGhlIGhhc2ggKG9iX3NoYXNoKSBzYXZlcyByZWNhbGN1bGF0aW9uIG9mIGEgc3RyaW5nJ3MgaGFzaCB2YWx1ZS4KICAgIFRoaXMgc2lnbmlmaWNhbnRseSBzcGVlZHMgdXAgZGljdCBsb29rdXBzLiAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKLSAgICBsb25nIG9iX3NoYXNoOworICAgIFB5X2hhc2hfdCBvYl9zaGFzaDsKICAgICBjaGFyIG9iX3N2YWxbMV07CiAKICAgICAvKiBJbnZhcmlhbnRzOgpAQCAtMzgsNiArMzksNyBAQAogICAgICAqICAgICBvYl9zaGFzaCBpcyB0aGUgaGFzaCBvZiB0aGUgc3RyaW5nIG9yIC0xIGlmIG5vdCBjb21wdXRlZCB5ZXQuCiAgICAgICovCiB9IFB5Qnl0ZXNPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5Qnl0ZXNfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUJ5dGVzSXRlcl9UeXBlOwpAQCAtNTgsMjEgKzYwLDI3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Qnl0ZXNfUmVwcihQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUJ5dGVzX0NvbmNhdChQeU9iamVjdCAqKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsKFB5T2JqZWN0ICoqLCBQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoaW50KSBfUHlCeXRlc19SZXNpemUoUHlPYmplY3QgKiosIFB5X3NzaXplX3QpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlCeXRlc19Gb3JtYXRMb25nKFB5T2JqZWN0KiwgaW50LCBpbnQsCiAJCQkJCQkgIGludCwgY2hhcioqLCBpbnQqKTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUJ5dGVzX0RlY29kZUVzY2FwZShjb25zdCBjaGFyICosIFB5X3NzaXplX3QsCiAJCQkJCQkgICBjb25zdCBjaGFyICosIFB5X3NzaXplX3QsCiAJCQkJCQkgICBjb25zdCBjaGFyICopOwogCiAvKiBNYWNybywgdHJhZGluZyBzYWZldHkgZm9yIHNwZWVkICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5Qnl0ZXNfQVNfU1RSSU5HKG9wKSAoYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2sob3ApKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChQeUJ5dGVzT2JqZWN0ICopKG9wKSktPm9iX3N2YWwpKQogI2RlZmluZSBQeUJ5dGVzX0dFVF9TSVpFKG9wKSAgKGFzc2VydChQeUJ5dGVzX0NoZWNrKG9wKSksUHlfU0laRShvcCkpCisjZW5kaWYKIAogLyogX1B5Qnl0ZXNfSm9pbihzZXAsIHgpIGlzIGxpa2Ugc2VwLmpvaW4oeCkuICBzZXAgbXVzdCBiZSBQeUJ5dGVzT2JqZWN0KiwKICAgIHggbXVzdCBiZSBhbiBpdGVyYWJsZSBvYmplY3QuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUJ5dGVzX0pvaW4oUHlPYmplY3QgKnNlcCwgUHlPYmplY3QgKngpOworI2VuZGlmCiAKIC8qIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaW50ZXJuYWwgZGF0YSBidWZmZXIgYW5kIHNpemUgb2YgYSBzdHJpbmcKICAgIG9iamVjdCBvciB0aGUgZGVmYXVsdCBlbmNvZGVkIHZlcnNpb24gb2YgYW4gVW5pY29kZSBvYmplY3QuIFBhc3NpbmcKQEAgLTkwLDcgKzk4LDcgQEAKIC8qIFVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSwgaW5zZXJ0IHRoZSB0aG91c2FuZHMgZ3JvdXBpbmcKICAgIGludG8gdGhlIHN0cmluZyBwb2ludGVkIHRvIGJ5IGJ1ZmZlci4gIEZvciB0aGUgYXJndW1lbnQgZGVzY3JpcHRpb25zLAogICAgc2VlIE9iamVjdHMvc3RyaW5nbGliL2xvY2FsZXV0aWwuaCAqLwotCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeUJ5dGVzX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlKGNoYXIgKmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgbl9idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkaWdpdHMsCkBAIC0xMDcsNiArMTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwKTsKKyNlbmRpZgogCiAvKiBGbGFncyB1c2VkIGJ5IHN0cmluZyBmb3JtYXR0aW5nICovCiAjZGVmaW5lIEZfTEpVU1QgKDE8PDApCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NlbGxvYmplY3QuaCBiL0luY2x1ZGUvY2VsbG9iamVjdC5oCmluZGV4IGM5MjdlZTUuLmEwYWE0ZDkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY2VsbG9iamVjdC5oCisrKyBiL0luY2x1ZGUvY2VsbG9iamVjdC5oCkBAIC0xLDUgKzEsNSBAQAogLyogQ2VsbCBvYmplY3QgaW50ZXJmYWNlICovCi0KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNpZm5kZWYgUHlfQ0VMTE9CSkVDVF9ICiAjZGVmaW5lIFB5X0NFTExPQkpFQ1RfSAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0yNiwzICsyNiw0IEBACiB9CiAjZW5kaWYKICNlbmRpZiAvKiAhUHlfVFVQTEVPQkpFQ1RfSCAqLworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NldmFsLmggYi9JbmNsdWRlL2NldmFsLmgKaW5kZXggNmQyNDBlNS4uNjgxMTM2NyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jZXZhbC5oCisrKyBiL0luY2x1ZGUvY2V2YWwuaApAQCAtMTAsMTAgKzEwLDYgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAKLS8qIERMTC1sZXZlbCBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogKi8KLSN1bmRlZiBQeUV2YWxfQ2FsbE9iamVjdAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfQ2FsbE9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKLQogLyogSW5saW5lIHRoaXMgKi8KICNkZWZpbmUgUHlFdmFsX0NhbGxPYmplY3QoZnVuYyxhcmcpIFwKICAgICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyhmdW5jLCBhcmcsIChQeU9iamVjdCAqKU5VTEwpCkBAIC0yNCw4ICsyMCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgUHlFdmFsX1NldFByb2ZpbGUoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFdmFsX1NldFRyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKik7CisjZW5kaWYKIAogc3RydWN0IF9mcmFtZTsgLyogQXZvaWQgaW5jbHVkaW5nIGZyYW1lb2JqZWN0LmggKi8KIApAQCAtMzcsNyArMzUsOSBAQAogLyogTG9vayBhdCB0aGUgY3VycmVudCBmcmFtZSdzIChpZiBhbnkpIGNvZGUncyBjb19mbGFncywgYW5kIHR1cm4gb24KICAgIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyIGZsYWdzIGluIGNmLT5jZl9mbGFncy4gIFJldHVybiAxIGlmIGFueQogICAgZmxhZyB3YXMgc2V0LCBlbHNlIHJldHVybiAwLiAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIFB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MoUHlDb21waWxlckZsYWdzICpjZik7CisjZW5kaWYKIAogUHlBUElfRlVOQyhpbnQpIFB5X0FkZFBlbmRpbmdDYWxsKGludCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZyk7CiBQeUFQSV9GVU5DKGludCkgUHlfTWFrZVBlbmRpbmdDYWxscyh2b2lkKTsKQEAgLTExMiwxMCArMTEyLDYgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFdmFsX0V2YWxGcmFtZShzdHJ1Y3QgX2ZyYW1lICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfRXZhbEZyYW1lRXgoc3RydWN0IF9mcmFtZSAqZiwgaW50IGV4Yyk7CiAKLS8qIHRoaXMgdXNlZCB0byBiZSBoYW5kbGVkIG9uIGEgcGVyLXRocmVhZCBiYXNpcyAtIG5vdyBqdXN0IHR3byBnbG9iYWxzICovCi1QeUFQSV9EQVRBKHZvbGF0aWxlIGludCkgX1B5X1RpY2tlcjsKLVB5QVBJX0RBVEEoaW50KSBfUHlfQ2hlY2tJbnRlcnZhbDsKLQogLyogSW50ZXJmYWNlIGZvciB0aHJlYWRzLgogCiAgICBBIG1vZHVsZSB0aGF0IHBsYW5zIHRvIGRvIGEgYmxvY2tpbmcgc3lzdGVtIGNhbGwgKG9yIHNvbWV0aGluZyBlbHNlCkBAIC0xNjgsMTIgKzE2NCwxOCBAQAogCiBQeUFQSV9GVU5DKGludCkgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9Jbml0VGhyZWFkcyh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RXZhbF9GaW5pVGhyZWFkcyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFdmFsX0FjcXVpcmVMb2NrKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUV2YWxfUmVsZWFzZUxvY2sodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9BY3F1aXJlVGhyZWFkKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9SZWxlYXNlVGhyZWFkKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXZhbF9SZUluaXRUaHJlYWRzKHZvaWQpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUV2YWxfU2V0U3dpdGNoSW50ZXJ2YWwodW5zaWduZWQgbG9uZyBtaWNyb3NlY29uZHMpOworUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBfUHlFdmFsX0dldFN3aXRjaEludGVydmFsKHZvaWQpOworI2VuZGlmCisKICNkZWZpbmUgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKl9zYXZlOyBcCiAgICAgICAgICAgICAgICAgICAgICAgICBfc2F2ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7CkBAIC0xOTEsNyArMTkzLDEwIEBACiAKICNlbmRpZiAvKiAhV0lUSF9USFJFQUQgKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeUV2YWxfU2xpY2VJbmRleChQeU9iamVjdCAqLCBQeV9zc2l6ZV90ICopOworUHlBUElfRlVOQyh2b2lkKSBfUHlFdmFsX1NpZ25hbEFzeW5jRXhjKHZvaWQpOworI2VuZGlmCiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NsYXNzb2JqZWN0LmggYi9JbmNsdWRlL2NsYXNzb2JqZWN0LmgKaW5kZXggYjdlZWJlNS4uZWVlYjNlOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jbGFzc29iamVjdC5oCisrKyBiL0luY2x1ZGUvY2xhc3NvYmplY3QuaApAQCAtMiw2ICsyLDcgQEAKIAogLyogUmV2ZWFsaW5nIHNvbWUgc3RydWN0dXJlcyAobm90IGZvciBnZW5lcmFsIHVzZSkgKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9DTEFTU09CSkVDVF9ICiAjZGVmaW5lIFB5X0NMQVNTT0JKRUNUX0gKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTQsMyArNTUsNCBAQAogfQogI2VuZGlmCiAjZW5kaWYgLyogIVB5X0NMQVNTT0JKRUNUX0ggKi8KKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2JqZWN0LmggYi9JbmNsdWRlL2NvYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmZTRjZS4uMDAwMDAwMAotLS0gYS9JbmNsdWRlL2NvYmplY3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLQotLyogCi0gCi1UaGUgQ09iamVjdCBtb2R1bGUgaXMgbm93ICpkZXByZWNhdGVkKiBhcyBvZiBQeXRob24gMy4xLgotUGxlYXNlIHVzZSB0aGUgQ2Fwc3VsZSBBUEkgaW5zdGVhZDsgc2VlICJweWNhcHN1bGUuaCIuCi0KLSovCi0KLSNpZm5kZWYgUHlfQ09CSkVDVF9ICi0jZGVmaW5lIFB5X0NPQkpFQ1RfSAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1QeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlDT2JqZWN0X1R5cGU7Ci0KLSNkZWZpbmUgUHlDT2JqZWN0X0NoZWNrKG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5Q09iamVjdF9UeXBlKQotCi0vKiBDcmVhdGUgYSBQeUNPYmplY3QgZnJvbSBhIHBvaW50ZXIgdG8gYSBDIG9iamVjdCBhbmQgYW4gb3B0aW9uYWwKLSAgIGRlc3RydWN0b3IgZnVuY3Rpb24uICBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vbi1udWxsLCB0aGVuIGl0Ci0gICB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBmaXJzdCBhcmd1bWVudCBpZiBhbmQgd2hlbiB0aGUgUHlDT2JqZWN0IGlzCi0gICBkZXN0cm95ZWQuCi0KLSovCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q09iamVjdF9Gcm9tVm9pZFB0cigKLQl2b2lkICpjb2JqLCB2b2lkICgqZGVzdHJ1Y3QpKHZvaWQqKSk7Ci0KLQotLyogQ3JlYXRlIGEgUHlDT2JqZWN0IGZyb20gYSBwb2ludGVyIHRvIGEgQyBvYmplY3QsIGEgZGVzY3JpcHRpb24gb2JqZWN0LAotICAgYW5kIGFuIG9wdGlvbmFsIGRlc3RydWN0b3IgZnVuY3Rpb24uICBJZiB0aGUgdGhpcmQgYXJndW1lbnQgaXMgbm9uLW51bGwsCi0gICB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzIGlmIGFuZCB3aGVuIAotICAgdGhlIFB5Q09iamVjdCBpcyBkZXN0cm95ZWQuCi0qLwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNPYmplY3RfRnJvbVZvaWRQdHJBbmREZXNjKAotCXZvaWQgKmNvYmosIHZvaWQgKmRlc2MsIHZvaWQgKCpkZXN0cnVjdCkodm9pZCosdm9pZCopKTsKLQotLyogUmV0cmlldmUgYSBwb2ludGVyIHRvIGEgQyBvYmplY3QgZnJvbSBhIFB5Q09iamVjdC4gKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeUNPYmplY3RfQXNWb2lkUHRyKFB5T2JqZWN0ICopOwotCi0vKiBSZXRyaWV2ZSBhIHBvaW50ZXIgdG8gYSBkZXNjcmlwdGlvbiBvYmplY3QgZnJvbSBhIFB5Q09iamVjdC4gKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeUNPYmplY3RfR2V0RGVzYyhQeU9iamVjdCAqKTsKLQotLyogSW1wb3J0IGEgcG9pbnRlciB0byBhIEMgb2JqZWN0IGZyb20gYSBtb2R1bGUgdXNpbmcgYSBQeUNPYmplY3QuICovCi1QeUFQSV9GVU5DKHZvaWQgKikgUHlDT2JqZWN0X0ltcG9ydChjaGFyICptb2R1bGVfbmFtZSwgY2hhciAqY29iamVjdF9uYW1lKTsKLQotLyogTW9kaWZ5IGEgQyBvYmplY3QuIEZhaWxzICg9PTApIGlmIG9iamVjdCBoYXMgYSBkZXN0cnVjdG9yLiAqLwotUHlBUElfRlVOQyhpbnQpIFB5Q09iamVjdF9TZXRWb2lkUHRyKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjb2JqKTsKLQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAotICAgIHZvaWQgKmNvYmplY3Q7Ci0gICAgdm9pZCAqZGVzYzsKLSAgICB2b2lkICgqZGVzdHJ1Y3Rvcikodm9pZCAqKTsKLX0gUHlDT2JqZWN0OwotCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYgLyogIVB5X0NPQkpFQ1RfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2RlLmggYi9JbmNsdWRlL2NvZGUuaAppbmRleCBlZmFmM2M0Li5lNzczYjZhIDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvZGUuaAorKysgYi9JbmNsdWRlL2NvZGUuaApAQCAtMSw1ICsxLDYgQEAKIC8qIERlZmluaXRpb25zIGZvciBieXRlY29kZSAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X0NPREVfSAogI2RlZmluZSBQeV9DT0RFX0gKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMjQsOCArMjUsMTAgQEAKICAgICBQeU9iamVjdCAqY29fZmlsZW5hbWU7CS8qIHVuaWNvZGUgKHdoZXJlIGl0IHdhcyBsb2FkZWQgZnJvbSkgKi8KICAgICBQeU9iamVjdCAqY29fbmFtZTsJCS8qIHVuaWNvZGUgKG5hbWUsIGZvciByZWZlcmVuY2UpICovCiAgICAgaW50IGNvX2ZpcnN0bGluZW5vOwkJLyogZmlyc3Qgc291cmNlIGxpbmUgbnVtYmVyICovCi0gICAgUHlPYmplY3QgKmNvX2xub3RhYjsJLyogc3RyaW5nIChlbmNvZGluZyBhZGRyPC0+bGluZW5vIG1hcHBpbmcpICovCisgICAgUHlPYmplY3QgKmNvX2xub3RhYjsJLyogc3RyaW5nIChlbmNvZGluZyBhZGRyPC0+bGluZW5vIG1hcHBpbmcpIFNlZQorCQkJCSAgIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgZGV0YWlscy4gKi8KICAgICB2b2lkICpjb196b21iaWVmcmFtZTsgICAgIC8qIGZvciBvcHRpbWl6YXRpb24gb25seSAoc2VlIGZyYW1lb2JqZWN0LmMpICovCisgICAgUHlPYmplY3QgKmNvX3dlYWtyZWZsaXN0OyAgIC8qIHRvIHN1cHBvcnQgd2Vha3JlZnMgdG8gY29kZSBvYmplY3RzICovCiB9IFB5Q29kZU9iamVjdDsKIAogLyogTWFza3MgZm9yIGNvX2ZsYWdzIGFib3ZlICovCkBAIC03MCw4ICs3MywxNiBAQAogUHlBUElfRlVOQyhQeUNvZGVPYmplY3QgKikgUHlDb2RlX05ldygKIAlpbnQsIGludCwgaW50LCBpbnQsIGludCwgUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKIAlQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAotCVB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7IAorCVB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgUHlPYmplY3QgKik7CiAgICAgICAgIC8qIHNhbWUgYXMgc3RydWN0IGFib3ZlICovCisKKy8qIENyZWF0ZXMgYSBuZXcgZW1wdHkgY29kZSBvYmplY3Qgd2l0aCB0aGUgc3BlY2lmaWVkIHNvdXJjZSBsb2NhdGlvbi4gKi8KK1B5QVBJX0ZVTkMoUHlDb2RlT2JqZWN0ICopCitQeUNvZGVfTmV3RW1wdHkoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBpbnQgZmlyc3RsaW5lbm8pOworCisvKiBSZXR1cm4gdGhlIGxpbmUgbnVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGJ5dGVjb2RlIGluZGV4CisgICBpbiB0aGlzIGNvZGUgb2JqZWN0LiAgSWYgeW91IGp1c3QgbmVlZCB0aGUgbGluZSBudW1iZXIgb2YgYSBmcmFtZSwKKyAgIHVzZSBQeUZyYW1lX0dldExpbmVOdW1iZXIoKSBpbnN0ZWFkLiAqLwogUHlBUElfRlVOQyhpbnQpIFB5Q29kZV9BZGRyMkxpbmUoUHlDb2RlT2JqZWN0ICosIGludCk7CiAKIC8qIGZvciBpbnRlcm5hbCB1c2Ugb25seSAqLwpAQCAtODAsMTUgKzkxLDEzIEBACiAgICAgICAgIGludCBhcF91cHBlcjsKIH0gUHlBZGRyUGFpcjsKIAotLyogQ2hlY2sgd2hldGhlciBsYXN0aSAoYW4gaW5zdHJ1Y3Rpb24gb2Zmc2V0KSBmYWxscyBvdXRzaWRlIGJvdW5kcwotICAgYW5kIHdoZXRoZXIgaXQgaXMgYSBsaW5lIG51bWJlciB0aGF0IHNob3VsZCBiZSB0cmFjZWQuICBSZXR1cm5zCi0gICBhIGxpbmUgbnVtYmVyIGlmIGl0IHNob3VsZCBiZSB0cmFjZWQgb3IgLTEgaWYgdGhlIGxpbmUgc2hvdWxkIG5vdC4KLQotICAgSWYgbGFzdGkgaXMgbm90IHdpdGhpbiBib3VuZHMsIHVwZGF0ZXMgYm91bmRzLgorLyogVXBkYXRlICpib3VuZHMgdG8gZGVzY3JpYmUgdGhlIGZpcnN0IGFuZCBvbmUtcGFzdC10aGUtbGFzdCBpbnN0cnVjdGlvbnMgaW4gdGhlCisgICBzYW1lIGxpbmUgYXMgbGFzdGkuICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGF0IGxpbmUuCiAqLwotCi1QeUFQSV9GVU5DKGludCkgUHlDb2RlX0NoZWNrTGluZU51bWJlcihQeUNvZGVPYmplY3QqIGNvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKFB5Q29kZU9iamVjdCogY28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpOworI2VuZGlmCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeUNvZGVfT3B0aW1pemUoUHlPYmplY3QgKmNvZGUsIFB5T2JqZWN0KiBjb25zdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lcywgUHlPYmplY3QgKmxpbmVub19vYmopOwpAQCAtOTcsMyArMTA2LDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9DT0RFX0ggKi8KKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb2RlY3MuaCBiL0luY2x1ZGUvY29kZWNzLmgKaW5kZXggNGVhOTM0ZS4uZGZmMDllNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb2RlY3MuaAorKysgYi9JbmNsdWRlL2NvZGVjcy5oCkBAIC00NSw5ICs0NSwxMSBAQAogCiAgKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlDb2RlY19Mb29rdXAoCiAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcKICAgICAgICApOworI2VuZGlmCiAKIC8qIENvZGVjIHJlZ2lzdHJ5IGVuY29kaW5nIGNoZWNrIEFQSS4KIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jb21waWxlLmggYi9JbmNsdWRlL2NvbXBpbGUuaAppbmRleCA3YzMyOWIzLi5iYzUzYjM5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2NvbXBpbGUuaAorKysgYi9JbmNsdWRlL2NvbXBpbGUuaApAQCAtMSw0ICsxLDQgQEAKLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9DT01QSUxFX0gKICNkZWZpbmUgUHlfQ09NUElMRV9ICiAKQEAgLTI5LDggKzI5LDEzIEBACiAjZGVmaW5lIEZVVFVSRV9CQVJSWV9BU19CREZMICJiYXJyeV9hc19GTFVGTCIKIAogc3RydWN0IF9tb2Q7IC8qIERlY2xhcmUgdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIHR5cGUgKi8KLVB5QVBJX0ZVTkMoUHlDb2RlT2JqZWN0ICopIFB5QVNUX0NvbXBpbGUoc3RydWN0IF9tb2QgKiwgY29uc3QgY2hhciAqLAotCQkJCQlQeUNvbXBpbGVyRmxhZ3MgKiwgUHlBcmVuYSAqKTsKKyNkZWZpbmUgUHlBU1RfQ29tcGlsZShtb2QsIHMsIGYsIGFyKSBQeUFTVF9Db21waWxlRXgobW9kLCBzLCBmLCAtMSwgYXIpCitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlRXgoCisgICAgc3RydWN0IF9tb2QgKm1vZCwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgb3B0aW1pemUsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1Qoc3RydWN0IF9tb2QgKiwgY29uc3QgY2hhciAqKTsKIAogCkBAIC0zOCwzICs0Myw0IEBACiB9CiAjZW5kaWYKICNlbmRpZiAvKiAhUHlfQ09NUElMRV9IICovCisjZW5kaWYgLyogIVB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2NvbXBsZXhvYmplY3QuaCBiL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCmluZGV4IDgyOTBhNmQuLmMzNzliMDggMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCisrKyBiL0luY2x1ZGUvY29tcGxleG9iamVjdC5oCkBAIC02LDYgKzYsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGRvdWJsZSByZWFsOwogICAgIGRvdWJsZSBpbWFnOwpAQCAtMjgsNyArMjksNyBAQAogUHlBUElfRlVOQyhQeV9jb21wbGV4KSBjX3F1b3QoUHlfY29tcGxleCwgUHlfY29tcGxleCk7CiBQeUFQSV9GVU5DKFB5X2NvbXBsZXgpIGNfcG93KFB5X2NvbXBsZXgsIFB5X2NvbXBsZXgpOwogUHlBUElfRlVOQyhkb3VibGUpIGNfYWJzKFB5X2NvbXBsZXgpOwotCisjZW5kaWYKIAogLyogQ29tcGxleCBvYmplY3QgaW50ZXJmYWNlICovCiAKQEAgLTM2LDI5ICszNywzNiBAQAogUHlDb21wbGV4T2JqZWN0IHJlcHJlc2VudHMgYSBjb21wbGV4IG51bWJlciB3aXRoIGRvdWJsZS1wcmVjaXNpb24KIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cy4KICovCi0KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlfY29tcGxleCBjdmFsOwotfSBQeUNvbXBsZXhPYmplY3Q7ICAgICAKK30gUHlDb21wbGV4T2JqZWN0OworI2VuZGlmCiAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUNvbXBsZXhfVHlwZTsKIAogI2RlZmluZSBQeUNvbXBsZXhfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlB5Q29tcGxleF9UeXBlKQogI2RlZmluZSBQeUNvbXBsZXhfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeUNvbXBsZXhfVHlwZSkKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KFB5X2NvbXBsZXgpOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5Q29tcGxleF9Gcm9tRG91Ymxlcyhkb3VibGUgcmVhbCwgZG91YmxlIGltYWcpOwogCiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlDb21wbGV4X1JlYWxBc0RvdWJsZShQeU9iamVjdCAqb3ApOwogUHlBUElfRlVOQyhkb3VibGUpIFB5Q29tcGxleF9JbWFnQXNEb3VibGUoUHlPYmplY3QgKm9wKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlfY29tcGxleCkgUHlDb21wbGV4X0FzQ0NvbXBsZXgoUHlPYmplY3QgKm9wKTsKKyNlbmRpZgogCiAvKiBGb3JtYXQgdGhlIG9iamVjdCBiYXNlZCBvbiB0aGUgZm9ybWF0X3NwZWMsIGFzIGRlZmluZWQgaW4gUEVQIDMxMDEKICAgIChBZHZhbmNlZCBTdHJpbmcgRm9ybWF0dGluZykuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWQoUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2RhdGV0aW1lLmggYi9JbmNsdWRlL2RhdGV0aW1lLmgKaW5kZXggY2I5Njc5OS4uZGI1N2ExOCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kYXRldGltZS5oCisrKyBiL0luY2x1ZGUvZGF0ZXRpbWUuaApAQCAtMSw2ICsxLDYgQEAKIC8qICBkYXRldGltZS5oCiAgKi8KLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBEQVRFVElNRV9ICiAjZGVmaW5lIERBVEVUSU1FX0gKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMzQsNyArMzQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QKIHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBoYXNoY29kZTsgICAgICAgICAgICAgIC8qIC0xIHdoZW4gdW5rbm93biAqLworICAgIFB5X2hhc2hfdCBoYXNoY29kZTsgICAgICAgICAvKiAtMSB3aGVuIHVua25vd24gKi8KICAgICBpbnQgZGF5czsgICAgICAgICAgICAgICAgICAgLyogLU1BWF9ERUxUQV9EQVlTIDw9IGRheXMgPD0gTUFYX0RFTFRBX0RBWVMgKi8KICAgICBpbnQgc2Vjb25kczsgICAgICAgICAgICAgICAgLyogMCA8PSBzZWNvbmRzIDwgMjQqMzYwMCBpcyBpbnZhcmlhbnQgKi8KICAgICBpbnQgbWljcm9zZWNvbmRzOyAgICAgICAgICAgLyogMCA8PSBtaWNyb3NlY29uZHMgPCAxMDAwMDAwIGlzIGludmFyaWFudCAqLwpAQCAtNTEsNyArNTEsNyBAQAogICovCiAjZGVmaW5lIF9QeVRaSU5GT19IRUFEICAgICAgICAgIFwKICAgICBQeU9iamVjdF9IRUFEICAgICAgICAgICAgICAgXAotICAgIGxvbmcgaGFzaGNvZGU7ICAgICAgICAgICAgICBcCisgICAgUHlfaGFzaF90IGhhc2hjb2RlOyAgICAgICAgIFwKICAgICBjaGFyIGhhc3R6aW5mbzsgICAgICAgICAgICAgLyogYm9vbGVhbiBmbGFnICovCiAKIC8qIE5vIF9QeURhdGVUaW1lX0Jhc2VUWkluZm8gaXMgYWxsb2NhdGVkOyBpdCdzIGp1c3QgdG8gaGF2ZSBzb21ldGhpbmcKQEAgLTE4Miw3ICsxODIsNyBAQAogI2Vsc2UKIAogLyogRGVmaW5lIGdsb2JhbCB2YXJpYWJsZSBmb3IgdGhlIEMgQVBJIGFuZCBhIG1hY3JvIGZvciBzZXR0aW5nIGl0LiAqLwotc3RhdGljIFB5RGF0ZVRpbWVfQ0FQSSAqUHlEYXRlVGltZUFQSTsKK3N0YXRpYyBQeURhdGVUaW1lX0NBUEkgKlB5RGF0ZVRpbWVBUEkgPSBOVUxMOwogCiAjZGVmaW5lIFB5RGF0ZVRpbWVfSU1QT1JUIFwKICAgICBQeURhdGVUaW1lQVBJID0gKFB5RGF0ZVRpbWVfQ0FQSSAqKVB5Q2Fwc3VsZV9JbXBvcnQoUHlEYXRlVGltZV9DQVBTVUxFX05BTUUsIDApCkBAIC0yMzQsMyArMjM0LDQgQEAKIH0KICNlbmRpZgogI2VuZGlmCisjZW5kaWYgLyogIVB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Rlc2Nyb2JqZWN0LmggYi9JbmNsdWRlL2Rlc2Nyb2JqZWN0LmgKaW5kZXggZDJmZTEwOS4uZjcxNWZlMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9kZXNjcm9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGVzY3JvYmplY3QuaApAQCAtMTYsNiArMTYsNyBAQAogICAgIHZvaWQgKmNsb3N1cmU7CiB9IFB5R2V0U2V0RGVmOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIFB5T2JqZWN0ICooKndyYXBwZXJmdW5jKShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp3cmFwcGVkKTsKIApAQCAtMzcsMTUgKzM4LDE3IEBACiAKIC8qIFZhcmlvdXMga2luZHMgb2YgZGVzY3JpcHRvciBvYmplY3RzICovCiAKLSNkZWZpbmUgUHlEZXNjcl9DT01NT04gXAotICAgIFB5T2JqZWN0X0hFQUQgXAotICAgIFB5VHlwZU9iamVjdCAqZF90eXBlOyBcCi0gICAgUHlPYmplY3QgKmRfbmFtZQotCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlEZXNjcl9DT01NT047CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5VHlwZU9iamVjdCAqZF90eXBlOworICAgIFB5T2JqZWN0ICpkX25hbWU7CiB9IFB5RGVzY3JPYmplY3Q7CiAKKyNkZWZpbmUgUHlEZXNjcl9DT01NT04gUHlEZXNjck9iamVjdCBkX2NvbW1vbgorCisjZGVmaW5lIFB5RGVzY3JfVFlQRSh4KSAoKChQeURlc2NyT2JqZWN0ICopKHgpKS0+ZF90eXBlKQorI2RlZmluZSBQeURlc2NyX05BTUUoeCkgKCgoUHlEZXNjck9iamVjdCAqKSh4KSktPmRfbmFtZSkKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5RGVzY3JfQ09NTU9OOwogICAgIFB5TWV0aG9kRGVmICpkX21ldGhvZDsKQEAgLTY2LDYgKzY5LDcgQEAKICAgICBzdHJ1Y3Qgd3JhcHBlcmJhc2UgKmRfYmFzZTsKICAgICB2b2lkICpkX3dyYXBwZWQ7IC8qIFRoaXMgY2FuIGJlIGFueSBmdW5jdGlvbiBwb2ludGVyICovCiB9IFB5V3JhcHBlckRlc2NyT2JqZWN0OworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCiAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUdldFNldERlc2NyX1R5cGU7CkBAIC03NiwxMyArODAsMTYgQEAKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURlc2NyX05ld01ldGhvZChQeVR5cGVPYmplY3QgKiwgUHlNZXRob2REZWYgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QoUHlUeXBlT2JqZWN0ICosIFB5TWV0aG9kRGVmICopOworc3RydWN0IFB5TWVtYmVyRGVmOyAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIGZvciBmb2xsb3dpbmcgcHJvdG90eXBlICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGVzY3JfTmV3TWVtYmVyKFB5VHlwZU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgUHlNZW1iZXJEZWYgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGVzY3JfTmV3R2V0U2V0KFB5VHlwZU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgUHlHZXRTZXREZWYgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGVzY3JfTmV3V3JhcHBlcihQeVR5cGVPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB3cmFwcGVyYmFzZSAqLCB2b2lkICopOwogI2RlZmluZSBQeURlc2NyX0lzRGF0YShkKSAoUHlfVFlQRShkKS0+dHBfZGVzY3Jfc2V0ICE9IE5VTEwpCisjZW5kaWYKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RQcm94eV9OZXcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5V3JhcHBlcl9OZXcoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvZGljdG9iamVjdC5oCmluZGV4IGQxYjU3NmMuLmIwMjY3ODUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZGljdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGljdG9iamVjdC5oCkBAIC00NSwxNCArNDUsMTIgQEAKICAqIG1ham9yaXR5IG9mIGRpY3RzIChjb25zaXN0aW5nIG1vc3RseSBvZiB1c3VhbGx5LXNtYWxsIGluc3RhbmNlIGRpY3RzIGFuZAogICogdXN1YWxseS1zbWFsbCBkaWN0cyBjcmVhdGVkIHRvIHBhc3Mga2V5d29yZCBhcmd1bWVudHMpLgogICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5RGljdF9NSU5TSVpFIDgKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgbWVfa2V5LiAgTm90ZSB0aGF0IGhhc2ggY29kZXMgYXJlIEMgbG9uZ3MuCi0gICAgICogV2UgaGF2ZSB0byB1c2UgUHlfc3NpemVfdCBpbnN0ZWFkIGJlY2F1c2UgZGljdF9wb3BpdGVtKCkgYWJ1c2VzCi0gICAgICogbWVfaGFzaCB0byBob2xkIGEgc2VhcmNoIGZpbmdlci4KLSAgICAgKi8KLSAgICBQeV9zc2l6ZV90IG1lX2hhc2g7CisgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiBtZV9rZXkuICovCisgICAgUHlfaGFzaF90IG1lX2hhc2g7CiAgICAgUHlPYmplY3QgKm1lX2tleTsKICAgICBQeU9iamVjdCAqbWVfdmFsdWU7CiB9IFB5RGljdEVudHJ5OwpAQCAtODQsOSArODIsMTAgQEAKICAgICAgKiBzZXRpdGVtIGNhbGxzLgogICAgICAqLwogICAgIFB5RGljdEVudHJ5ICptYV90YWJsZTsKLSAgICBQeURpY3RFbnRyeSAqKCptYV9sb29rdXApKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIGxvbmcgaGFzaCk7CisgICAgUHlEaWN0RW50cnkgKigqbWFfbG9va3VwKShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7CiAgICAgUHlEaWN0RW50cnkgbWFfc21hbGx0YWJsZVtQeURpY3RfTUlOU0laRV07CiB9OworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCiAKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeURpY3RfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeURpY3RJdGVyS2V5X1R5cGU7CkBAIC0xMTUsMTcgKzExNCwyMiBAQAogUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfQ2xlYXIoUHlPYmplY3QgKm1wKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfTmV4dCgKICAgICBQeU9iamVjdCAqbXAsIFB5X3NzaXplX3QgKnBvcywgUHlPYmplY3QgKiprZXksIFB5T2JqZWN0ICoqdmFsdWUpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfTmV4dCgKLSAgICBQeU9iamVjdCAqbXAsIFB5X3NzaXplX3QgKnBvcywgUHlPYmplY3QgKiprZXksIFB5T2JqZWN0ICoqdmFsdWUsIGxvbmcgKmhhc2gpOworICAgIFB5T2JqZWN0ICptcCwgUHlfc3NpemVfdCAqcG9zLCBQeU9iamVjdCAqKmtleSwgUHlPYmplY3QgKip2YWx1ZSwgUHlfaGFzaF90ICpoYXNoKTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfS2V5cyhQeU9iamVjdCAqbXApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfVmFsdWVzKFB5T2JqZWN0ICptcCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RGljdF9JdGVtcyhQeU9iamVjdCAqbXApOwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeURpY3RfU2l6ZShQeU9iamVjdCAqbXApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfQ29weShQeU9iamVjdCAqbXApOwogUHlBUElfRlVOQyhpbnQpIFB5RGljdF9Db250YWlucyhQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwotUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfQ29udGFpbnMoUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBsb25nIGhhc2gpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeURpY3RfQ29udGFpbnMoUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfTmV3UHJlc2l6ZWQoUHlfc3NpemVfdCBtaW51c2VkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9NYXliZVVudHJhY2soUHlPYmplY3QgKm1wKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0hhc09ubHlTdHJpbmdLZXlzKFB5T2JqZWN0ICptcCk7CisjZW5kaWYKIAogLyogUHlEaWN0X1VwZGF0ZShtcCwgb3RoZXIpIGlzIGVxdWl2YWxlbnQgdG8gUHlEaWN0X01lcmdlKG1wLCBvdGhlciwgMSkuICovCiBQeUFQSV9GVU5DKGludCkgUHlEaWN0X1VwZGF0ZShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICpvdGhlcik7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2R0b2EuaCBiL0luY2x1ZGUvZHRvYS5oCmluZGV4IDliNDM0YjcuLjgxOWJkMGYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZHRvYS5oCisrKyBiL0luY2x1ZGUvZHRvYS5oCkBAIC0xLDMgKzEsNCBAQAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewpAQCAtMTMsMyArMTQsNCBAQAogfQogI2VuZGlmCiAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9keW5hbWljX2Fubm90YXRpb25zLmggYi9JbmNsdWRlL2R5bmFtaWNfYW5ub3RhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjMzMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9keW5hbWljX2Fubm90YXRpb25zLmgKQEAgLTAsMCArMSw0OTkgQEAKKy8qIENvcHlyaWdodCAoYykgMjAwOC0yMDA5LCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiAtLS0KKyAqIEF1dGhvcjogS29zdHlhIFNlcmVicnlhbnkKKyAqIENvcGllZCB0byBDUHl0aG9uIGJ5IEplZmZyZXkgWWFzc2tpbiwgd2l0aCBhbGwgbWFjcm9zIHJlbmFtZWQgdG8KKyAqIHN0YXJ0IHdpdGggX1B5XyB0byBhdm9pZCBjb2xsaWRpbmcgd2l0aCB1c2VycyBlbWJlZGRpbmcgUHl0aG9uLCBhbmQKKyAqIHdpdGggZGVwcmVjYXRlZCBtYWNyb3MgcmVtb3ZlZC4KKyAqLworCisvKiBUaGlzIGZpbGUgZGVmaW5lcyBkeW5hbWljIGFubm90YXRpb25zIGZvciB1c2Ugd2l0aCBkeW5hbWljIGFuYWx5c2lzCisgICB0b29sIHN1Y2ggYXMgdmFsZ3JpbmQsIFBJTiwgZXRjLgorCisgICBEeW5hbWljIGFubm90YXRpb24gaXMgYSBzb3VyY2UgY29kZSBhbm5vdGF0aW9uIHRoYXQgYWZmZWN0cworICAgdGhlIGdlbmVyYXRlZCBjb2RlICh0aGF0IGlzLCB0aGUgYW5ub3RhdGlvbiBpcyBub3QgYSBjb21tZW50KS4KKyAgIEVhY2ggc3VjaCBhbm5vdGF0aW9uIGlzIGF0dGFjaGVkIHRvIGEgcGFydGljdWxhcgorICAgaW5zdHJ1Y3Rpb24gYW5kL29yIHRvIGEgcGFydGljdWxhciBvYmplY3QgKGFkZHJlc3MpIGluIHRoZSBwcm9ncmFtLgorCisgICBUaGUgYW5ub3RhdGlvbnMgdGhhdCBzaG91bGQgYmUgdXNlZCBieSB1c2VycyBhcmUgbWFjcm9zIGluIGFsbCB1cHBlci1jYXNlCisgICAoZS5nLiwgX1B5X0FOTk9UQVRFX05FV19NRU1PUlkpLgorCisgICBBY3R1YWwgaW1wbGVtZW50YXRpb24gb2YgdGhlc2UgbWFjcm9zIG1heSBkaWZmZXIgZGVwZW5kaW5nIG9uIHRoZQorICAgZHluYW1pYyBhbmFseXNpcyB0b29sIGJlaW5nIHVzZWQuCisKKyAgIFNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZGF0YS1yYWNlLXRlc3QvICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgVGhpcyBmaWxlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZHluYW1pYyBhbmFseXNpcyB0b29sczoKKyAgIC0gTm9uZSAoRFlOQU1JQ19BTk5PVEFUSU9OU19FTkFCTEVEIGlzIG5vdCBkZWZpbmVkIG9yIHplcm8pLgorICAgICAgTWFjcm9zIGFyZSBkZWZpbmVkIGVtcHR5LgorICAgLSBUaHJlYWRTYW5pdGl6ZXIsIEhlbGdyaW5kLCBEUkQgKERZTkFNSUNfQU5OT1RBVElPTlNfRU5BQkxFRCBpcyAxKS4KKyAgICAgIE1hY3JvcyBhcmUgZGVmaW5lZCBhcyBjYWxscyB0byBub24taW5saW5hYmxlIGVtcHR5IGZ1bmN0aW9ucworICAgICAgdGhhdCBhcmUgaW50ZXJjZXB0ZWQgYnkgVmFsZ3JpbmQuICovCisKKyNpZm5kZWYgX19EWU5BTUlDX0FOTk9UQVRJT05TX0hfXworI2RlZmluZSBfX0RZTkFNSUNfQU5OT1RBVElPTlNfSF9fCisKKyNpZm5kZWYgRFlOQU1JQ19BTk5PVEFUSU9OU19FTkFCTEVECisjIGRlZmluZSBEWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQgMAorI2VuZGlmCisKKyNpZiBEWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQgIT0gMAorCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQW5ub3RhdGlvbnMgdXNlZnVsIHdoZW4gaW1wbGVtZW50aW5nIGNvbmRpdGlvbiB2YXJpYWJsZXMgc3VjaCBhcyBDb25kVmFyLAorICAgICB1c2luZyBjb25kaXRpb25hbCBjcml0aWNhbCBzZWN0aW9ucyAoQXdhaXQvTG9ja1doZW4pIGFuZCB3aGVuIGNvbnN0cnVjdGluZworICAgICB1c2VyLWRlZmluZWQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMuCisKKyAgICAgVGhlIGFubm90YXRpb25zIF9QeV9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRSgpIGFuZAorICAgICBfUHlfQU5OT1RBVEVfSEFQUEVOU19BRlRFUigpIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBoYXBwZW5zLWJlZm9yZSBhcmNzIGluCisgICAgIHVzZXItZGVmaW5lZCBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtczogdGhlIHJhY2UgZGV0ZWN0b3Igd2lsbCBpbmZlciBhbgorICAgICBhcmMgZnJvbSB0aGUgZm9ybWVyIHRvIHRoZSBsYXR0ZXIgd2hlbiB0aGV5IHNoYXJlIHRoZSBzYW1lIGFyZ3VtZW50CisgICAgIHBvaW50ZXIuCisKKyAgICAgRXhhbXBsZSAxIChyZWZlcmVuY2UgY291bnRpbmcpOgorCisgICAgIHZvaWQgVW5yZWYoKSB7CisgICAgICAgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQkVGT1JFKCZyZWZjb3VudF8pOworICAgICAgIGlmIChBdG9taWNEZWNyZW1lbnRCeU9uZSgmcmVmY291bnRfKSA9PSAwKSB7CisgICAgICAgICBfUHlfQU5OT1RBVEVfSEFQUEVOU19BRlRFUigmcmVmY291bnRfKTsKKyAgICAgICAgIGRlbGV0ZSB0aGlzOworICAgICAgIH0KKyAgICAgfQorCisgICAgIEV4YW1wbGUgMiAobWVzc2FnZSBxdWV1ZSk6CisKKyAgICAgdm9pZCBNeVF1ZXVlOjpQdXQoVHlwZSAqZSkgeworICAgICAgIE11dGV4TG9jayBsb2NrKCZtdV8pOworICAgICAgIF9QeV9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRShlKTsKKyAgICAgICBQdXRFbGVtZW50SW50b015UXVldWUoZSk7CisgICAgIH0KKworICAgICBUeXBlICpNeVF1ZXVlOjpHZXQoKSB7CisgICAgICAgTXV0ZXhMb2NrIGxvY2soJm11Xyk7CisgICAgICAgVHlwZSAqZSA9IEdldEVsZW1lbnRGcm9tTXlRdWV1ZSgpOworICAgICAgIF9QeV9BTk5PVEFURV9IQVBQRU5TX0FGVEVSKGUpOworICAgICAgIHJldHVybiBlOworICAgICB9CisKKyAgICAgTm90ZTogd2hlbiBwb3NzaWJsZSwgcGxlYXNlIHVzZSB0aGUgZXhpc3RpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBtZXNzYWdlCisgICAgIHF1ZXVlIGltcGxlbWVudGF0aW9ucyBpbnN0ZWFkIG9mIGludmVudGluZyBuZXcgb25lcy4gKi8KKworICAvKiBSZXBvcnQgdGhhdCB3YWl0IG9uIHRoZSBjb25kaXRpb24gdmFyaWFibGUgYXQgYWRkcmVzcyAiY3YiIGhhcyBzdWNjZWVkZWQKKyAgICAgYW5kIHRoZSBsb2NrIGF0IGFkZHJlc3MgImxvY2siIGlzIGhlbGQuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0NPTkRWQVJfTE9DS19XQUlUKGN2LCBsb2NrKSBcCisgICAgQW5ub3RhdGVDb25kVmFyV2FpdChfX0ZJTEVfXywgX19MSU5FX18sIGN2LCBsb2NrKQorCisgIC8qIFJlcG9ydCB0aGF0IHdhaXQgb24gdGhlIGNvbmRpdGlvbiB2YXJpYWJsZSBhdCAiY3YiIGhhcyBzdWNjZWVkZWQuICBWYXJpYW50CisgICAgIHcvbyBsb2NrLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9DT05EVkFSX1dBSVQoY3YpIFwKKyAgICBBbm5vdGF0ZUNvbmRWYXJXYWl0KF9fRklMRV9fLCBfX0xJTkVfXywgY3YsIE5VTEwpCisKKyAgLyogUmVwb3J0IHRoYXQgd2UgYXJlIGFib3V0IHRvIHNpZ25hbCBvbiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGF0IGFkZHJlc3MKKyAgICAgImN2Ii4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQ09ORFZBUl9TSUdOQUwoY3YpIFwKKyAgICBBbm5vdGF0ZUNvbmRWYXJTaWduYWwoX19GSUxFX18sIF9fTElORV9fLCBjdikKKworICAvKiBSZXBvcnQgdGhhdCB3ZSBhcmUgYWJvdXQgdG8gc2lnbmFsX2FsbCBvbiB0aGUgY29uZGl0aW9uIHZhcmlhYmxlIGF0ICJjdiIuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0NPTkRWQVJfU0lHTkFMX0FMTChjdikgXAorICAgIEFubm90YXRlQ29uZFZhclNpZ25hbEFsbChfX0ZJTEVfXywgX19MSU5FX18sIGN2KQorCisgIC8qIEFubm90YXRpb25zIGZvciB1c2VyLWRlZmluZWQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQkVGT1JFKG9iaikgX1B5X0FOTk9UQVRFX0NPTkRWQVJfU0lHTkFMKG9iaikKKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSEFQUEVOU19BRlRFUihvYmopICBfUHlfQU5OT1RBVEVfQ09ORFZBUl9XQUlUKG9iaikKKworICAvKiBSZXBvcnQgdGhhdCB0aGUgYnl0ZXMgaW4gdGhlIHJhbmdlIFtwb2ludGVyLCBwb2ludGVyK3NpemUpIGFyZSBhYm91dAorICAgICB0byBiZSBwdWJsaXNoZWQgc2FmZWx5LiBUaGUgcmFjZSBjaGVja2VyIHdpbGwgY3JlYXRlIGEgaGFwcGVucy1iZWZvcmUKKyAgICAgYXJjIGZyb20gdGhlIGNhbGwgX1B5X0FOTk9UQVRFX1BVQkxJU0hfTUVNT1JZX1JBTkdFKHBvaW50ZXIsIHNpemUpIHRvCisgICAgIHN1YnNlcXVlbnQgYWNjZXNzZXMgdG8gdGhpcyBtZW1vcnkuCisgICAgIE5vdGU6IHRoaXMgYW5ub3RhdGlvbiBtYXkgbm90IHdvcmsgcHJvcGVybHkgaWYgdGhlIHJhY2UgZGV0ZWN0b3IgdXNlcworICAgICBzYW1wbGluZywgaS5lLiBkb2VzIG5vdCBvYnNlcnZlIGFsbCBtZW1vcnkgYWNjZXNzZXMuCisgICAgICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1BVQkxJU0hfTUVNT1JZX1JBTkdFKHBvaW50ZXIsIHNpemUpIFwKKyAgICBBbm5vdGF0ZVB1Ymxpc2hNZW1vcnlSYW5nZShfX0ZJTEVfXywgX19MSU5FX18sIHBvaW50ZXIsIHNpemUpCisKKyAgLyogSW5zdHJ1Y3QgdGhlIHRvb2wgdG8gY3JlYXRlIGEgaGFwcGVucy1iZWZvcmUgYXJjIGJldHdlZW4gbXUtPlVubG9jaygpIGFuZAorICAgICBtdS0+TG9jaygpLiBUaGlzIGFubm90YXRpb24gbWF5IHNsb3cgZG93biB0aGUgcmFjZSBkZXRlY3RvciBhbmQgaGlkZSByZWFsCisgICAgIHJhY2VzLiBOb3JtYWxseSBpdCBpcyB1c2VkIG9ubHkgd2hlbiBpdCB3b3VsZCBiZSBkaWZmaWN1bHQgdG8gYW5ub3RhdGUgZWFjaAorICAgICBvZiB0aGUgbXV0ZXgncyBjcml0aWNhbCBzZWN0aW9ucyBpbmRpdmlkdWFsbHkgdXNpbmcgdGhlIGFubm90YXRpb25zIGFib3ZlLgorICAgICBUaGlzIGFubm90YXRpb24gbWFrZXMgc2Vuc2Ugb25seSBmb3IgaHlicmlkIHJhY2UgZGV0ZWN0b3JzLiBGb3IgcHVyZQorICAgICBoYXBwZW5zLWJlZm9yZSBkZXRlY3RvcnMgdGhpcyBpcyBhIG5vLW9wLiBGb3IgbW9yZSBkZXRhaWxzIHNlZQorICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZGF0YS1yYWNlLXRlc3Qvd2lraS9QdXJlSGFwcGVuc0JlZm9yZVZzSHlicmlkIC4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUFVSRV9IQVBQRU5TX0JFRk9SRV9NVVRFWChtdSkgXAorICAgIEFubm90YXRlTXV0ZXhJc1VzZWRBc0NvbmRWYXIoX19GSUxFX18sIF9fTElORV9fLCBtdSkKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIEFubm90YXRpb25zIHVzZWZ1bCB3aGVuIGRlZmluaW5nIG1lbW9yeSBhbGxvY2F0b3JzLCBvciB3aGVuIG1lbW9yeSB0aGF0CisgICAgIHdhcyBwcm90ZWN0ZWQgaW4gb25lIHdheSBzdGFydHMgdG8gYmUgcHJvdGVjdGVkIGluIGFub3RoZXIuICovCisKKyAgLyogUmVwb3J0IHRoYXQgYSBuZXcgbWVtb3J5IGF0ICJhZGRyZXNzIiBvZiBzaXplICJzaXplIiBoYXMgYmVlbiBhbGxvY2F0ZWQuCisgICAgIFRoaXMgbWlnaHQgYmUgdXNlZCB3aGVuIHRoZSBtZW1vcnkgaGFzIGJlZW4gcmV0cmlldmVkIGZyb20gYSBmcmVlIGxpc3QgYW5kCisgICAgIGlzIGFib3V0IHRvIGJlIHJldXNlZCwgb3Igd2hlbiBhIHRoZSBsb2NraW5nIGRpc2NpcGxpbmUgZm9yIGEgdmFyaWFibGUKKyAgICAgY2hhbmdlcy4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfTkVXX01FTU9SWShhZGRyZXNzLCBzaXplKSBcCisgICAgQW5ub3RhdGVOZXdNZW1vcnkoX19GSUxFX18sIF9fTElORV9fLCBhZGRyZXNzLCBzaXplKQorCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQW5ub3RhdGlvbnMgdXNlZnVsIHdoZW4gZGVmaW5pbmcgRklGTyBxdWV1ZXMgdGhhdCB0cmFuc2ZlciBkYXRhIGJldHdlZW4KKyAgICAgdGhyZWFkcy4gKi8KKworICAvKiBSZXBvcnQgdGhhdCB0aGUgcHJvZHVjZXItY29uc3VtZXIgcXVldWUgKHN1Y2ggYXMgUHJvZHVjZXJDb25zdW1lclF1ZXVlKSBhdAorICAgICBhZGRyZXNzICJwY3EiIGhhcyBiZWVuIGNyZWF0ZWQuICBUaGUgX1B5X0FOTk9UQVRFX1BDUV8qIGFubm90YXRpb25zIHNob3VsZAorICAgICBiZSB1c2VkIG9ubHkgZm9yIEZJRk8gcXVldWVzLiAgRm9yIG5vbi1GSUZPIHF1ZXVlcyB1c2UKKyAgICAgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQkVGT1JFIChmb3IgcHV0KSBhbmQgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQUZURVIgKGZvcgorICAgICBnZXQpLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9QQ1FfQ1JFQVRFKHBjcSkgXAorICAgIEFubm90YXRlUENRQ3JlYXRlKF9fRklMRV9fLCBfX0xJTkVfXywgcGNxKQorCisgIC8qIFJlcG9ydCB0aGF0IHRoZSBxdWV1ZSBhdCBhZGRyZXNzICJwY3EiIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUENRX0RFU1RST1kocGNxKSBcCisgICAgQW5ub3RhdGVQQ1FEZXN0cm95KF9fRklMRV9fLCBfX0xJTkVfXywgcGNxKQorCisgIC8qIFJlcG9ydCB0aGF0IHdlIGFyZSBhYm91dCB0byBwdXQgYW4gZWxlbWVudCBpbnRvIGEgRklGTyBxdWV1ZSBhdCBhZGRyZXNzCisgICAgICJwY3EiLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9QQ1FfUFVUKHBjcSkgXAorICAgIEFubm90YXRlUENRUHV0KF9fRklMRV9fLCBfX0xJTkVfXywgcGNxKQorCisgIC8qIFJlcG9ydCB0aGF0IHdlJ3ZlIGp1c3QgZ290IGFuIGVsZW1lbnQgZnJvbSBhIEZJRk8gcXVldWUgYXQgYWRkcmVzcyAicGNxIi4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUENRX0dFVChwY3EpIFwKKyAgICBBbm5vdGF0ZVBDUUdldChfX0ZJTEVfXywgX19MSU5FX18sIHBjcSkKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIEFubm90YXRpb25zIHRoYXQgc3VwcHJlc3MgZXJyb3JzLiAgSXQgaXMgdXN1YWxseSBiZXR0ZXIgdG8gZXhwcmVzcyB0aGUKKyAgICAgcHJvZ3JhbSdzIHN5bmNocm9uaXphdGlvbiB1c2luZyB0aGUgb3RoZXIgYW5ub3RhdGlvbnMsIGJ1dCB0aGVzZSBjYW4KKyAgICAgYmUgdXNlZCB3aGVuIGFsbCBlbHNlIGZhaWxzLiAqLworCisgIC8qIFJlcG9ydCB0aGF0IHdlIG1heSBoYXZlIGEgYmVuaWduIHJhY2UgYXQgInBvaW50ZXIiLCB3aXRoIHNpemUKKyAgICAgInNpemVvZigqKHBvaW50ZXIpKSIuICJwb2ludGVyIiBtdXN0IGJlIGEgbm9uLXZvaWQqIHBvaW50ZXIuICBJbnNlcnQgYXQgdGhlCisgICAgIHBvaW50IHdoZXJlICJwb2ludGVyIiBoYXMgYmVlbiBhbGxvY2F0ZWQsIHByZWZlcmFibHkgY2xvc2UgdG8gdGhlIHBvaW50CisgICAgIHdoZXJlIHRoZSByYWNlIGhhcHBlbnMuICBTZWUgYWxzbyBfUHlfQU5OT1RBVEVfQkVOSUdOX1JBQ0VfU1RBVElDLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9CRU5JR05fUkFDRShwb2ludGVyLCBkZXNjcmlwdGlvbikgXAorICAgIEFubm90YXRlQmVuaWduUmFjZVNpemVkKF9fRklMRV9fLCBfX0xJTkVfXywgcG9pbnRlciwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqKHBvaW50ZXIpKSwgZGVzY3JpcHRpb24pCisKKyAgLyogU2FtZSBhcyBfUHlfQU5OT1RBVEVfQkVOSUdOX1JBQ0UoYWRkcmVzcywgZGVzY3JpcHRpb24pLCBidXQgYXBwbGllcyB0bworICAgICB0aGUgbWVtb3J5IHJhbmdlIFthZGRyZXNzLCBhZGRyZXNzK3NpemUpLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9CRU5JR05fUkFDRV9TSVpFRChhZGRyZXNzLCBzaXplLCBkZXNjcmlwdGlvbikgXAorICAgIEFubm90YXRlQmVuaWduUmFjZVNpemVkKF9fRklMRV9fLCBfX0xJTkVfXywgYWRkcmVzcywgc2l6ZSwgZGVzY3JpcHRpb24pCisKKyAgLyogUmVxdWVzdCB0aGUgYW5hbHlzaXMgdG9vbCB0byBpZ25vcmUgYWxsIHJlYWRzIGluIHRoZSBjdXJyZW50IHRocmVhZAorICAgICB1bnRpbCBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0VORCBpcyBjYWxsZWQuCisgICAgIFVzZWZ1bCB0byBpZ25vcmUgaW50ZW50aW9uYWwgcmFjZXkgcmVhZHMsIHdoaWxlIHN0aWxsIGNoZWNraW5nCisgICAgIG90aGVyIHJlYWRzIGFuZCBhbGwgd3JpdGVzLgorICAgICBTZWUgYWxzbyBfUHlfQU5OT1RBVEVfVU5QUk9URUNURURfUkVBRC4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOKCkgXAorICAgIEFubm90YXRlSWdub3JlUmVhZHNCZWdpbihfX0ZJTEVfXywgX19MSU5FX18pCisKKyAgLyogU3RvcCBpZ25vcmluZyByZWFkcy4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0VORCgpIFwKKyAgICBBbm5vdGF0ZUlnbm9yZVJlYWRzRW5kKF9fRklMRV9fLCBfX0xJTkVfXykKKworICAvKiBTaW1pbGFyIHRvIF9QeV9BTk5PVEFURV9JR05PUkVfUkVBRFNfQkVHSU4sIGJ1dCBpZ25vcmUgd3JpdGVzLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9JR05PUkVfV1JJVEVTX0JFR0lOKCkgXAorICAgIEFubm90YXRlSWdub3JlV3JpdGVzQmVnaW4oX19GSUxFX18sIF9fTElORV9fKQorCisgIC8qIFN0b3AgaWdub3Jpbmcgd3JpdGVzLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9JR05PUkVfV1JJVEVTX0VORCgpIFwKKyAgICBBbm5vdGF0ZUlnbm9yZVdyaXRlc0VuZChfX0ZJTEVfXywgX19MSU5FX18pCisKKyAgLyogU3RhcnQgaWdub3JpbmcgYWxsIG1lbW9yeSBhY2Nlc3NlcyAocmVhZHMgYW5kIHdyaXRlcykuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0lHTk9SRV9SRUFEU19BTkRfV1JJVEVTX0JFR0lOKCkgXAorICAgIGRvIHtcCisgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOKCk7XAorICAgICAgX1B5X0FOTk9UQVRFX0lHTk9SRV9XUklURVNfQkVHSU4oKTtcCisgICAgfXdoaWxlKDApXAorCisgIC8qIFN0b3AgaWdub3JpbmcgYWxsIG1lbW9yeSBhY2Nlc3Nlcy4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0FORF9XUklURVNfRU5EKCkgXAorICAgIGRvIHtcCisgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1dSSVRFU19FTkQoKTtcCisgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0VORCgpO1wKKyAgICB9d2hpbGUoMClcCisKKyAgLyogU2ltaWxhciB0byBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOLCBidXQgaWdub3JlIHN5bmNocm9uaXphdGlvbiBldmVudHM6CisgICAgIFJXTE9DSyogYW5kIENPTkRWQVIqLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9JR05PUkVfU1lOQ19CRUdJTigpIFwKKyAgICBBbm5vdGF0ZUlnbm9yZVN5bmNCZWdpbihfX0ZJTEVfXywgX19MSU5FX18pCisKKyAgLyogU3RvcCBpZ25vcmluZyBzeW5jIGV2ZW50cy4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1NZTkNfRU5EKCkgXAorICAgIEFubm90YXRlSWdub3JlU3luY0VuZChfX0ZJTEVfXywgX19MSU5FX18pCisKKworICAvKiBFbmFibGUgKGVuYWJsZSE9MCkgb3IgZGlzYWJsZSAoZW5hYmxlPT0wKSByYWNlIGRldGVjdGlvbiBmb3IgYWxsIHRocmVhZHMuCisgICAgIFRoaXMgYW5ub3RhdGlvbiBjb3VsZCBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gc2tpcCBleHBlbnNpdmUgcmFjZSBhbmFseXNpcworICAgICBkdXJpbmcgc29tZSBwZXJpb2Qgb2YgcHJvZ3JhbSBleGVjdXRpb24sIGUuZy4gZHVyaW5nIGluaXRpYWxpemF0aW9uLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9FTkFCTEVfUkFDRV9ERVRFQ1RJT04oZW5hYmxlKSBcCisgICAgQW5ub3RhdGVFbmFibGVSYWNlRGV0ZWN0aW9uKF9fRklMRV9fLCBfX0xJTkVfXywgZW5hYmxlKQorCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQW5ub3RhdGlvbnMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuICovCisKKyAgLyogUmVxdWVzdCB0byB0cmFjZSBldmVyeSBhY2Nlc3MgdG8gImFkZHJlc3MiLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9UUkFDRV9NRU1PUlkoYWRkcmVzcykgXAorICAgIEFubm90YXRlVHJhY2VNZW1vcnkoX19GSUxFX18sIF9fTElORV9fLCBhZGRyZXNzKQorCisgIC8qIFJlcG9ydCB0aGUgY3VycmVudCB0aHJlYWQgbmFtZSB0byBhIHJhY2UgZGV0ZWN0b3IuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1RIUkVBRF9OQU1FKG5hbWUpIFwKKyAgICBBbm5vdGF0ZVRocmVhZE5hbWUoX19GSUxFX18sIF9fTElORV9fLCBuYW1lKQorCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQW5ub3RhdGlvbnMgdXNlZnVsIHdoZW4gaW1wbGVtZW50aW5nIGxvY2tzLiAgVGhleSBhcmUgbm90CisgICAgIG5vcm1hbGx5IG5lZWRlZCBieSBtb2R1bGVzIHRoYXQgbWVyZWx5IHVzZSBsb2Nrcy4KKyAgICAgVGhlICJsb2NrIiBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIGxvY2sgb2JqZWN0LiAqLworCisgIC8qIFJlcG9ydCB0aGF0IGEgbG9jayBoYXMgYmVlbiBjcmVhdGVkIGF0IGFkZHJlc3MgImxvY2siLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9SV0xPQ0tfQ1JFQVRFKGxvY2spIFwKKyAgICBBbm5vdGF0ZVJXTG9ja0NyZWF0ZShfX0ZJTEVfXywgX19MSU5FX18sIGxvY2spCisKKyAgLyogUmVwb3J0IHRoYXQgdGhlIGxvY2sgYXQgYWRkcmVzcyAibG9jayIgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9SV0xPQ0tfREVTVFJPWShsb2NrKSBcCisgICAgQW5ub3RhdGVSV0xvY2tEZXN0cm95KF9fRklMRV9fLCBfX0xJTkVfXywgbG9jaykKKworICAvKiBSZXBvcnQgdGhhdCB0aGUgbG9jayBhdCBhZGRyZXNzICJsb2NrIiBoYXMgYmVlbiBhY3F1aXJlZC4KKyAgICAgaXNfdz0xIGZvciB3cml0ZXIgbG9jaywgaXNfdz0wIGZvciByZWFkZXIgbG9jay4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUldMT0NLX0FDUVVJUkVEKGxvY2ssIGlzX3cpIFwKKyAgICBBbm5vdGF0ZVJXTG9ja0FjcXVpcmVkKF9fRklMRV9fLCBfX0xJTkVfXywgbG9jaywgaXNfdykKKworICAvKiBSZXBvcnQgdGhhdCB0aGUgbG9jayBhdCBhZGRyZXNzICJsb2NrIiBpcyBhYm91dCB0byBiZSByZWxlYXNlZC4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUldMT0NLX1JFTEVBU0VEKGxvY2ssIGlzX3cpIFwKKyAgICBBbm5vdGF0ZVJXTG9ja1JlbGVhc2VkKF9fRklMRV9fLCBfX0xJTkVfXywgbG9jaywgaXNfdykKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIEFubm90YXRpb25zIHVzZWZ1bCB3aGVuIGltcGxlbWVudGluZyBiYXJyaWVycy4gIFRoZXkgYXJlIG5vdAorICAgICBub3JtYWxseSBuZWVkZWQgYnkgbW9kdWxlcyB0aGF0IG1lcmVseSB1c2UgYmFycmllcnMuCisgICAgIFRoZSAiYmFycmllciIgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBiYXJyaWVyIG9iamVjdC4gKi8KKworICAvKiBSZXBvcnQgdGhhdCB0aGUgImJhcnJpZXIiIGhhcyBiZWVuIGluaXRpYWxpemVkIHdpdGggaW5pdGlhbCAiY291bnQiLgorICAgSWYgJ3JlaW5pdGlhbGl6YXRpb25fYWxsb3dlZCcgaXMgdHJ1ZSwgaW5pdGlhbGl6YXRpb24gaXMgYWxsb3dlZCB0byBoYXBwZW4KKyAgIG11bHRpcGxlIHRpbWVzIHcvbyBjYWxsaW5nIGJhcnJpZXJfZGVzdHJveSgpICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0JBUlJJRVJfSU5JVChiYXJyaWVyLCBjb3VudCwgcmVpbml0aWFsaXphdGlvbl9hbGxvd2VkKSBcCisgICAgQW5ub3RhdGVCYXJyaWVySW5pdChfX0ZJTEVfXywgX19MSU5FX18sIGJhcnJpZXIsIGNvdW50LCBcCisgICAgICAgICAgICAgICAgICAgICAgICByZWluaXRpYWxpemF0aW9uX2FsbG93ZWQpCisKKyAgLyogUmVwb3J0IHRoYXQgd2UgYXJlIGFib3V0IHRvIGVudGVyIGJhcnJpZXJfd2FpdCgiYmFycmllciIpLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9CQVJSSUVSX1dBSVRfQkVGT1JFKGJhcnJpZXIpIFwKKyAgICBBbm5vdGF0ZUJhcnJpZXJXYWl0QmVmb3JlKF9fRklMRV9fLCBfX0xJTkVfXywgYmFycmllcikKKworICAvKiBSZXBvcnQgdGhhdCB3ZSBqdXN0IGV4aXRlZCBiYXJyaWVyX3dhaXQoImJhcnJpZXIiKS4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQkFSUklFUl9XQUlUX0FGVEVSKGJhcnJpZXIpIFwKKyAgICBBbm5vdGF0ZUJhcnJpZXJXYWl0QWZ0ZXIoX19GSUxFX18sIF9fTElORV9fLCBiYXJyaWVyKQorCisgIC8qIFJlcG9ydCB0aGF0IHRoZSAiYmFycmllciIgaGFzIGJlZW4gZGVzdHJveWVkLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9CQVJSSUVSX0RFU1RST1koYmFycmllcikgXAorICAgIEFubm90YXRlQmFycmllckRlc3Ryb3koX19GSUxFX18sIF9fTElORV9fLCBiYXJyaWVyKQorCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgQW5ub3RhdGlvbnMgdXNlZnVsIGZvciB0ZXN0aW5nIHJhY2UgZGV0ZWN0b3JzLiAqLworCisgIC8qIFJlcG9ydCB0aGF0IHdlIGV4cGVjdCBhIHJhY2Ugb24gdGhlIHZhcmlhYmxlIGF0ICJhZGRyZXNzIi4KKyAgICAgVXNlIG9ubHkgaW4gdW5pdCB0ZXN0cyBmb3IgYSByYWNlIGRldGVjdG9yLiAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9FWFBFQ1RfUkFDRShhZGRyZXNzLCBkZXNjcmlwdGlvbikgXAorICAgIEFubm90YXRlRXhwZWN0UmFjZShfX0ZJTEVfXywgX19MSU5FX18sIGFkZHJlc3MsIGRlc2NyaXB0aW9uKQorCisgIC8qIEEgbm8tb3AuIEluc2VydCB3aGVyZSB5b3UgbGlrZSB0byB0ZXN0IHRoZSBpbnRlcmNlcHRvcnMuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX05PX09QKGFyZykgXAorICAgIEFubm90YXRlTm9PcChfX0ZJTEVfXywgX19MSU5FX18sIGFyZykKKworICAvKiBGb3JjZSB0aGUgcmFjZSBkZXRlY3RvciB0byBmbHVzaCBpdHMgc3RhdGUuIFRoZSBhY3R1YWwgZWZmZWN0IGRlcGVuZHMgb24KKyAgICogdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBkZXRlY3Rvci4gKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfRkxVU0hfU1RBVEUoKSBcCisgICAgQW5ub3RhdGVGbHVzaFN0YXRlKF9fRklMRV9fLCBfX0xJTkVfXykKKworCisjZWxzZSAgLyogRFlOQU1JQ19BTk5PVEFUSU9OU19FTkFCTEVEID09IDAgKi8KKworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9SV0xPQ0tfQ1JFQVRFKGxvY2spIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1JXTE9DS19ERVNUUk9ZKGxvY2spIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1JXTE9DS19BQ1FVSVJFRChsb2NrLCBpc193KSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9SV0xPQ0tfUkVMRUFTRUQobG9jaywgaXNfdykgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQkFSUklFUl9JTklUKGJhcnJpZXIsIGNvdW50LCByZWluaXRpYWxpemF0aW9uX2FsbG93ZWQpIC8qICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0JBUlJJRVJfV0FJVF9CRUZPUkUoYmFycmllcikgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQkFSUklFUl9XQUlUX0FGVEVSKGJhcnJpZXIpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0JBUlJJRVJfREVTVFJPWShiYXJyaWVyKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9DT05EVkFSX0xPQ0tfV0FJVChjdiwgbG9jaykgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQ09ORFZBUl9XQUlUKGN2KSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9DT05EVkFSX1NJR05BTChjdikgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQ09ORFZBUl9TSUdOQUxfQUxMKGN2KSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9IQVBQRU5TX0JFRk9SRShvYmopIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQUZURVIob2JqKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9QVUJMSVNIX01FTU9SWV9SQU5HRShhZGRyZXNzLCBzaXplKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9VTlBVQkxJU0hfTUVNT1JZX1JBTkdFKGFkZHJlc3MsIHNpemUpICAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9TV0FQX01FTU9SWV9SQU5HRShhZGRyZXNzLCBzaXplKSAgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUENRX0NSRUFURShwY3EpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1BDUV9ERVNUUk9ZKHBjcSkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfUENRX1BVVChwY3EpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1BDUV9HRVQocGNxKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9ORVdfTUVNT1JZKGFkZHJlc3MsIHNpemUpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0VYUEVDVF9SQUNFKGFkZHJlc3MsIGRlc2NyaXB0aW9uKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9CRU5JR05fUkFDRShhZGRyZXNzLCBkZXNjcmlwdGlvbikgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQkVOSUdOX1JBQ0VfU0laRUQoYWRkcmVzcywgc2l6ZSwgZGVzY3JpcHRpb24pIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX1BVUkVfSEFQUEVOU19CRUZPUkVfTVVURVgobXUpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX01VVEVYX0lTX1VTRURfQVNfQ09ORFZBUihtdSkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfVFJBQ0VfTUVNT1JZKGFyZykgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfVEhSRUFEX05BTUUobmFtZSkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOKCkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0VORCgpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0lHTk9SRV9XUklURVNfQkVHSU4oKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9JR05PUkVfV1JJVEVTX0VORCgpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0lHTk9SRV9SRUFEU19BTkRfV1JJVEVTX0JFR0lOKCkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0FORF9XUklURVNfRU5EKCkgLyogZW1wdHkgKi8KKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfSUdOT1JFX1NZTkNfQkVHSU4oKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9JR05PUkVfU1lOQ19FTkQoKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9FTkFCTEVfUkFDRV9ERVRFQ1RJT04oZW5hYmxlKSAvKiBlbXB0eSAqLworICAjZGVmaW5lIF9QeV9BTk5PVEFURV9OT19PUChhcmcpIC8qIGVtcHR5ICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0ZMVVNIX1NUQVRFKCkgLyogZW1wdHkgKi8KKworI2VuZGlmICAvKiBEWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQgKi8KKworLyogVXNlIHRoZSBtYWNyb3MgYWJvdmUgcmF0aGVyIHRoYW4gdXNpbmcgdGhlc2UgZnVuY3Rpb25zIGRpcmVjdGx5LiAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgordm9pZCBBbm5vdGF0ZVJXTG9ja0NyZWF0ZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbG9jayk7Cit2b2lkIEFubm90YXRlUldMb2NrRGVzdHJveShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmxvY2spOwordm9pZCBBbm5vdGF0ZVJXTG9ja0FjcXVpcmVkKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmxvY2ssIGxvbmcgaXNfdyk7Cit2b2lkIEFubm90YXRlUldMb2NrUmVsZWFzZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbG9jaywgbG9uZyBpc193KTsKK3ZvaWQgQW5ub3RhdGVCYXJyaWVySW5pdChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpiYXJyaWVyLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmVpbml0aWFsaXphdGlvbl9hbGxvd2VkKTsKK3ZvaWQgQW5ub3RhdGVCYXJyaWVyV2FpdEJlZm9yZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpiYXJyaWVyKTsKK3ZvaWQgQW5ub3RhdGVCYXJyaWVyV2FpdEFmdGVyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYmFycmllcik7Cit2b2lkIEFubm90YXRlQmFycmllckRlc3Ryb3koY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYmFycmllcik7Cit2b2lkIEFubm90YXRlQ29uZFZhcldhaXQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqY3YsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbG9jayk7Cit2b2lkIEFubm90YXRlQ29uZFZhclNpZ25hbChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmN2KTsKK3ZvaWQgQW5ub3RhdGVDb25kVmFyU2lnbmFsQWxsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqY3YpOwordm9pZCBBbm5vdGF0ZVB1Ymxpc2hNZW1vcnlSYW5nZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKTsKK3ZvaWQgQW5ub3RhdGVVbnB1Ymxpc2hNZW1vcnlSYW5nZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSk7Cit2b2lkIEFubm90YXRlUENRQ3JlYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpwY3EpOwordm9pZCBBbm5vdGF0ZVBDUURlc3Ryb3koY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpwY3EpOwordm9pZCBBbm5vdGF0ZVBDUVB1dChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqcGNxKTsKK3ZvaWQgQW5ub3RhdGVQQ1FHZXQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnBjcSk7Cit2b2lkIEFubm90YXRlTmV3TWVtb3J5KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpOwordm9pZCBBbm5vdGF0ZUV4cGVjdFJhY2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOwordm9pZCBBbm5vdGF0ZUJlbmlnblJhY2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICphZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pOwordm9pZCBBbm5vdGF0ZUJlbmlnblJhY2VTaXplZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbik7Cit2b2lkIEFubm90YXRlTXV0ZXhJc1VzZWRBc0NvbmRWYXIoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbXUpOwordm9pZCBBbm5vdGF0ZVRyYWNlTWVtb3J5KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFyZyk7Cit2b2lkIEFubm90YXRlVGhyZWFkTmFtZShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCBBbm5vdGF0ZUlnbm9yZVJlYWRzQmVnaW4oY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpOwordm9pZCBBbm5vdGF0ZUlnbm9yZVJlYWRzRW5kKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKK3ZvaWQgQW5ub3RhdGVJZ25vcmVXcml0ZXNCZWdpbihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSk7Cit2b2lkIEFubm90YXRlSWdub3JlV3JpdGVzRW5kKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKK3ZvaWQgQW5ub3RhdGVFbmFibGVSYWNlRGV0ZWN0aW9uKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBpbnQgZW5hYmxlKTsKK3ZvaWQgQW5ub3RhdGVOb09wKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYXJnKTsKK3ZvaWQgQW5ub3RhdGVGbHVzaFN0YXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKTsKKworLyogUmV0dXJuIG5vbi16ZXJvIHZhbHVlIGlmIHJ1bm5pbmcgdW5kZXIgdmFsZ3JpbmQuCisKKyAgSWYgInZhbGdyaW5kLmgiIGlzIGluY2x1ZGVkIGludG8gZHluYW1pY19hbm5vdGF0aW9ucy5jLAorICB0aGUgcmVndWxhciB2YWxncmluZCBtZWNoYW5pc20gd2lsbCBiZSB1c2VkLgorICBTZWUgaHR0cDovL3ZhbGdyaW5kLm9yZy9kb2NzL21hbnVhbC9tYW51YWwtY29yZS1hZHYuaHRtbCBhYm91dAorICBSVU5OSU5HX09OX1ZBTEdSSU5EIGFuZCBvdGhlciB2YWxncmluZCAiY2xpZW50IHJlcXVlc3RzIi4KKyAgVGhlIGZpbGUgInZhbGdyaW5kLmgiIG1heSBiZSBvYnRhaW5lZCBieSBkb2luZworICAgICBzdm4gY28gc3ZuOi8vc3ZuLnZhbGdyaW5kLm9yZy92YWxncmluZC90cnVuay9pbmNsdWRlCisKKyAgSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW4ndCB1c2UgInZhbGdyaW5kLmgiIG9yIHdhbnQgdG8gZmFrZSB2YWxncmluZCwKKyAgdGhlcmUgYXJlIHR3byB3YXlzIHRvIG1ha2UgdGhpcyBmdW5jdGlvbiByZXR1cm4gbm9uLXplcm86CisgICAgLSBVc2UgZW52aXJvbm1lbnQgdmFyaWFibGU6IGV4cG9ydCBSVU5OSU5HX09OX1ZBTEdSSU5EPTEKKyAgICAtIE1ha2UgeW91ciB0b29sIGludGVyY2VwdCB0aGUgZnVuY3Rpb24gUnVubmluZ09uVmFsZ3JpbmQoKSBhbmQKKyAgICAgIGNoYW5nZSBpdHMgcmV0dXJuIHZhbHVlLgorICovCitpbnQgUnVubmluZ09uVmFsZ3JpbmQodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNpZiBEWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQgIT0gMCAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorCisgIC8qIF9QeV9BTk5PVEFURV9VTlBST1RFQ1RFRF9SRUFEIGlzIHRoZSBwcmVmZXJyZWQgd2F5IHRvIGFubm90YXRlIHJhY2V5IHJlYWRzLgorCisgICAgIEluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgX1B5X0FOTk9UQVRFX0lHTk9SRV9SRUFEU19CRUdJTigpOworICAgICAgICAuLi4gPSB4OworICAgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0VORCgpOworICAgICBvbmUgY2FuIHVzZQorICAgICAgICAuLi4gPSBfUHlfQU5OT1RBVEVfVU5QUk9URUNURURfUkVBRCh4KTsgKi8KKyAgdGVtcGxhdGUgPGNsYXNzIFQ+CisgIGlubGluZSBUIF9QeV9BTk5PVEFURV9VTlBST1RFQ1RFRF9SRUFEKGNvbnN0IHZvbGF0aWxlIFQgJngpIHsKKyAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOKCk7CisgICAgVCByZXMgPSB4OworICAgIF9QeV9BTk5PVEFURV9JR05PUkVfUkVBRFNfRU5EKCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICAvKiBBcHBseSBfUHlfQU5OT1RBVEVfQkVOSUdOX1JBQ0VfU0laRUQgdG8gYSBzdGF0aWMgdmFyaWFibGUuICovCisgICNkZWZpbmUgX1B5X0FOTk9UQVRFX0JFTklHTl9SQUNFX1NUQVRJQyhzdGF0aWNfdmFyLCBkZXNjcmlwdGlvbikgICAgICAgIFwKKyAgICBuYW1lc3BhY2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjbGFzcyBzdGF0aWNfdmFyICMjIF9hbm5vdGF0b3IgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHB1YmxpYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljX3ZhciAjIyBfYW5ub3RhdG9yKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgX1B5X0FOTk9UQVRFX0JFTklHTl9SQUNFX1NJWkVEKCZzdGF0aWNfdmFyLCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YXRpY192YXIpLCAgICAgICAgICAgICBcCisgICAgICAgICAgICAjIHN0YXRpY192YXIgIjogIiBkZXNjcmlwdGlvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBzdGF0aWMgc3RhdGljX3ZhciAjIyBfYW5ub3RhdG9yIHRoZSAjIyBzdGF0aWNfdmFyICMjIF9hbm5vdGF0b3I7XAorICAgIH0KKyNlbHNlIC8qIERZTkFNSUNfQU5OT1RBVElPTlNfRU5BQkxFRCA9PSAwICovCisKKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfVU5QUk9URUNURURfUkVBRCh4KSAoeCkKKyAgI2RlZmluZSBfUHlfQU5OT1RBVEVfQkVOSUdOX1JBQ0VfU1RBVElDKHN0YXRpY192YXIsIGRlc2NyaXB0aW9uKSAgLyogZW1wdHkgKi8KKworI2VuZGlmIC8qIERZTkFNSUNfQU5OT1RBVElPTlNfRU5BQkxFRCAqLworCisjZW5kaWYgIC8qIF9fRFlOQU1JQ19BTk5PVEFUSU9OU19IX18gKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZXZhbC5oIGIvSW5jbHVkZS9ldmFsLmgKaW5kZXggMWQwM2M5Ny4uYTFjNmU4MSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ldmFsLmgKKysrIGIvSW5jbHVkZS9ldmFsLmgKQEAgLTcsOSArNyw5IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXZhbF9FdmFsQ29kZShQeUNvZGVPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXZhbF9FdmFsQ29kZShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfRXZhbENvZGVFeChQeUNvZGVPYmplY3QgKmNvLAorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV2YWxfRXZhbENvZGVFeChQeU9iamVjdCAqY28sCiAJCQkJCVB5T2JqZWN0ICpnbG9iYWxzLAogCQkJCQlQeU9iamVjdCAqbG9jYWxzLAogCQkJCQlQeU9iamVjdCAqKmFyZ3MsIGludCBhcmdjLApAQCAtMTcsNyArMTcsOSBAQAogCQkJCQlQeU9iamVjdCAqKmRlZnMsIGludCBkZWZjLAogCQkJCQlQeU9iamVjdCAqa3dkZWZzLCBQeU9iamVjdCAqY2xvc3VyZSk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5RXZhbF9DYWxsVHJhY2luZyhQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZ3MpOworI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxlb2JqZWN0LmggYi9JbmNsdWRlL2ZpbGVvYmplY3QuaAppbmRleCA2ZTBlNTVlLi5jNGEyYTJiIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZpbGVvYmplY3QuaApAQCAtMTQsMTkgKzE0LDIxIEBACiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlT2JqZWN0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlGaWxlX1dyaXRlU3RyaW5nKGNvbnN0IGNoYXIgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoY2hhciAqKSBQeV9Vbml2ZXJzYWxOZXdsaW5lRmdldHMoY2hhciAqLCBpbnQsIEZJTEUqLCBQeU9iamVjdCAqKTsKKyNlbmRpZgogCiAvKiBUaGUgZGVmYXVsdCBlbmNvZGluZyB1c2VkIGJ5IHRoZSBwbGF0Zm9ybSBmaWxlIHN5c3RlbSBBUElzCiAgICBJZiBub24tTlVMTCwgdGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgZGVmYXVsdCBlbmNvZGluZyBmb3Igc3RyaW5ncwogKi8KIFB5QVBJX0RBVEEoY29uc3QgY2hhciAqKSBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nOwogUHlBUElfREFUQShpbnQpIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc7Ci1QeUFQSV9GVU5DKGludCkgX1B5X1NldEZpbGVTeXN0ZW1FbmNvZGluZyhQeU9iamVjdCAqKTsKIAogLyogSW50ZXJuYWwgQVBJCiAKICAgIFRoZSBzdGQgcHJpbnRlciBhY3RzIGFzIGEgcHJlbGltaW5hcnkgc3lzLnN0ZGVyciB1bnRpbCB0aGUgbmV3IGlvCiAgICBpbmZyYXN0cnVjdHVyZSBpcyBpbiBwbGFjZS4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX05ld1N0ZFByaW50ZXIoaW50KTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVN0ZFByaW50ZXJfVHlwZTsKIApAQCAtNDAsNiArNDIsNyBAQAogI2Vsc2UKICNkZWZpbmUgX1B5VmVyaWZ5X2ZkKEEpICgxKSAvKiBkdW1teSAqLwogI2VuZGlmCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZpbGV1dGlscy5oIGIvSW5jbHVkZS9maWxldXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFkZTliCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9maWxldXRpbHMuaApAQCAtMCwwICsxLDU4IEBACisjaWZuZGVmIFB5X0ZJTEVVVElMU19ICisjZGVmaW5lIFB5X0ZJTEVVVElMU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworUHlBUElfRlVOQyh3Y2hhcl90ICopIF9QeV9jaGFyMndjaGFyKAorICAgIGNvbnN0IGNoYXIgKmFyZywKKyAgICBzaXplX3QgKnNpemUpOworCitQeUFQSV9GVU5DKGNoYXIqKSBfUHlfd2NoYXIyY2hhcigKKyAgICBjb25zdCB3Y2hhcl90ICp0ZXh0LAorICAgIHNpemVfdCAqZXJyb3JfcG9zKTsKKworI2lmIGRlZmluZWQoSEFWRV9TVEFUKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQorUHlBUElfRlVOQyhpbnQpIF9QeV93c3RhdCgKKyAgICBjb25zdCB3Y2hhcl90KiBwYXRoLAorICAgIHN0cnVjdCBzdGF0ICpidWYpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NUQVQKK1B5QVBJX0ZVTkMoaW50KSBfUHlfc3RhdCgKKyAgICBQeU9iamVjdCAqcGF0aCwKKyAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CisjZW5kaWYKKworUHlBUElfRlVOQyhGSUxFICopIF9QeV93Zm9wZW4oCisgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICBjb25zdCB3Y2hhcl90ICptb2RlKTsKKworUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuKAorICAgIFB5T2JqZWN0ICpwYXRoLAorICAgIGNvbnN0IGNoYXIgKm1vZGUpOworCisjaWZkZWYgSEFWRV9SRUFETElOSworUHlBUElfRlVOQyhpbnQpIF9QeV93cmVhZGxpbmsoCisgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICB3Y2hhcl90ICpidWYsCisgICAgc2l6ZV90IGJ1ZnNpeik7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUkVBTFBBVEgKK1B5QVBJX0ZVTkMod2NoYXJfdCopIF9QeV93cmVhbHBhdGgoCisgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICB3Y2hhcl90ICpyZXNvbHZlZF9wYXRoLAorICAgIHNpemVfdCByZXNvbHZlZF9wYXRoX3NpemUpOworI2VuZGlmCisKK1B5QVBJX0ZVTkMod2NoYXJfdCopIF9QeV93Z2V0Y3dkKAorICAgIHdjaGFyX3QgKmJ1ZiwKKyAgICBzaXplX3Qgc2l6ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfRklMRVVUSUxTX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZmxvYXRvYmplY3QuaCBiL0luY2x1ZGUvZmxvYXRvYmplY3QuaAppbmRleCA1YjhkMWExLi45MGYwYTQ1IDEwMDY0NAotLS0gYS9JbmNsdWRlL2Zsb2F0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9mbG9hdG9iamVjdC5oCkBAIC0xMSwyMiArMTEsMTggQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgZG91YmxlIG9iX2Z2YWw7CiB9IFB5RmxvYXRPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5RmxvYXRfVHlwZTsKIAogI2RlZmluZSBQeUZsb2F0X0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeUZsb2F0X1R5cGUpCiAjZGVmaW5lIFB5RmxvYXRfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeUZsb2F0X1R5cGUpCiAKLS8qIFRoZSBzdHIoKSBwcmVjaXNpb24gUHlGbG9hdF9TVFJfUFJFQ0lTSU9OIGlzIGNob3NlbiBzbyB0aGF0IGluIG1vc3QgY2FzZXMsCi0gICB0aGUgcm91bmRpbmcgbm9pc2UgY3JlYXRlZCBieSB2YXJpb3VzIG9wZXJhdGlvbnMgaXMgc3VwcHJlc3NlZCwgd2hpbGUKLSAgIGdpdmluZyBwbGVudHkgb2YgcHJlY2lzaW9uIGZvciBwcmFjdGljYWwgdXNlLiAqLwotCi0jZGVmaW5lIFB5RmxvYXRfU1RSX1BSRUNJU0lPTiAxMgotCiAjaWZkZWYgUHlfTkFOCiAjZGVmaW5lIFB5X1JFVFVSTl9OQU4gcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShQeV9OQU4pCiAjZW5kaWYKQEAgLTUxLDggKzQ3LDExIEBACiAvKiBFeHRyYWN0IEMgZG91YmxlIGZyb20gUHl0aG9uIGZsb2F0LiAgVGhlIG1hY3JvIHZlcnNpb24gdHJhZGVzIHNhZmV0eSBmb3IKICAgIHNwZWVkLiAqLwogUHlBUElfRlVOQyhkb3VibGUpIFB5RmxvYXRfQXNEb3VibGUoUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5RmxvYXRfQVNfRE9VQkxFKG9wKSAoKChQeUZsb2F0T2JqZWN0ICopKG9wKSktPm9iX2Z2YWwpCisjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogLyogX1B5RmxvYXRfe1BhY2ssVW5wYWNrfXs0LDh9CiAgKgogICogVGhlIHN0cnVjdCBhbmQgcGlja2xlIChhdCBsZWFzdCkgbW9kdWxlcyBuZWVkIGFuIGVmZmljaWVudCBwbGF0Zm9ybS0KQEAgLTExNiw2ICsxMTUsNyBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlGbG9hdF9Gb3JtYXRBZHZhbmNlZChQeU9iamVjdCAqb2JqLAogCQkJCQkgICAgICAgUHlfVU5JQ09ERSAqZm9ybWF0X3NwZWMsCiAJCQkJCSAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmggYi9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKaW5kZXggNjVlYmQyYS4uMWZiNjRiYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mcmFtZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaApAQCAtMSw2ICsxLDcgQEAKIAogLyogRnJhbWUgb2JqZWN0IGludGVyZmFjZSAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X0ZSQU1FT0JKRUNUX0gKICNkZWZpbmUgUHlfRlJBTUVPQkpFQ1RfSAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC0zOCw4ICszOSwxMSBAQAogCiAgICAgUHlUaHJlYWRTdGF0ZSAqZl90c3RhdGU7CiAgICAgaW50IGZfbGFzdGk7CQkvKiBMYXN0IGluc3RydWN0aW9uIGlmIGNhbGxlZCAqLwotICAgIC8qIEFzIG9mIDIuMyBmX2xpbmVubyBpcyBvbmx5IHZhbGlkIHdoZW4gdHJhY2luZyBpcyBhY3RpdmUgKGkuZS4gd2hlbgotICAgICAgIGZfdHJhY2UgaXMgc2V0KSAtLSBhdCBvdGhlciB0aW1lcyB1c2UgUHlDb2RlX0FkZHIyTGluZSBpbnN0ZWFkLiAqLworICAgIC8qIENhbGwgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKCkgaW5zdGVhZCBvZiByZWFkaW5nIHRoaXMgZmllbGQKKyAgICAgICBkaXJlY3RseS4gIEFzIG9mIDIuMyBmX2xpbmVubyBpcyBvbmx5IHZhbGlkIHdoZW4gdHJhY2luZyBpcworICAgICAgIGFjdGl2ZSAoaS5lLiB3aGVuIGZfdHJhY2UgaXMgc2V0KS4gIEF0IG90aGVyIHRpbWVzIHdlIHVzZQorICAgICAgIFB5Q29kZV9BZGRyMkxpbmUgdG8gY2FsY3VsYXRlIHRoZSBsaW5lIGZyb20gdGhlIGN1cnJlbnQKKyAgICAgICBieXRlY29kZSBpbmRleC4gKi8KICAgICBpbnQgZl9saW5lbm87CQkvKiBDdXJyZW50IGxpbmUgbnVtYmVyICovCiAgICAgaW50IGZfaWJsb2NrOwkJLyogaW5kZXggaW4gZl9ibG9ja3N0YWNrICovCiAgICAgUHlUcnlCbG9jayBmX2Jsb2Nrc3RhY2tbQ09fTUFYQkxPQ0tTXTsgLyogZm9yIHRyeSBhbmQgbG9vcCBibG9ja3MgKi8KQEAgLTc1LDcgKzc5LDExIEBACiAKIFB5QVBJX0ZVTkMoaW50KSBQeUZyYW1lX0NsZWFyRnJlZUxpc3Qodm9pZCk7CiAKKy8qIFJldHVybiB0aGUgbGluZSBvZiBjb2RlIHRoZSBmcmFtZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLiAqLworUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfR2V0TGluZU51bWJlcihQeUZyYW1lT2JqZWN0ICopOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9GUkFNRU9CSkVDVF9IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvZnVuY29iamVjdC5oIGIvSW5jbHVkZS9mdW5jb2JqZWN0LmgKaW5kZXggMDU4YzZiZi4uNTIxZDg3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9mdW5jb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9mdW5jb2JqZWN0LmgKQEAgLTEsNiArMSw2IEBACiAKIC8qIEZ1bmN0aW9uIG9iamVjdCBpbnRlcmZhY2UgKi8KLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9GVU5DT0JKRUNUX0gKICNkZWZpbmUgUHlfRlVOQ09CSkVDVF9ICiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTg0LDMgKzg0LDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9GVU5DT0JKRUNUX0ggKi8KKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9nZW5vYmplY3QuaCBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKaW5kZXggMTM1NTYxYi4uZDI5ZmIxZSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9nZW5vYmplY3QuaAorKysgYi9JbmNsdWRlL2dlbm9iamVjdC5oCkBAIC0xLDYgKzEsNyBAQAogCiAvKiBHZW5lcmF0b3Igb2JqZWN0IGludGVyZmFjZSAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X0dFTk9CSkVDVF9ICiAjZGVmaW5lIFB5X0dFTk9CSkVDVF9ICiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTM4LDMgKzM5LDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9HRU5PQkpFQ1RfSCAqLworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL2dyYW1pbml0LmggYi9JbmNsdWRlL2dyYW1pbml0LmgKaW5kZXggMDRmOWI5YS4uZTBlMjdmOSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ncmFtaW5pdC5oCisrKyBiL0luY2x1ZGUvZ3JhbWluaXQuaApAQCAtMTYsNjggKzE2LDY4IEBACiAjZGVmaW5lIHNpbXBsZV9zdG10IDI2OQogI2RlZmluZSBzbWFsbF9zdG10IDI3MAogI2RlZmluZSBleHByX3N0bXQgMjcxCi0jZGVmaW5lIGF1Z2Fzc2lnbiAyNzIKLSNkZWZpbmUgZGVsX3N0bXQgMjczCi0jZGVmaW5lIHBhc3Nfc3RtdCAyNzQKLSNkZWZpbmUgZmxvd19zdG10IDI3NQotI2RlZmluZSBicmVha19zdG10IDI3NgotI2RlZmluZSBjb250aW51ZV9zdG10IDI3NwotI2RlZmluZSByZXR1cm5fc3RtdCAyNzgKLSNkZWZpbmUgeWllbGRfc3RtdCAyNzkKLSNkZWZpbmUgcmFpc2Vfc3RtdCAyODAKLSNkZWZpbmUgaW1wb3J0X3N0bXQgMjgxCi0jZGVmaW5lIGltcG9ydF9uYW1lIDI4MgotI2RlZmluZSBpbXBvcnRfZnJvbSAyODMKLSNkZWZpbmUgaW1wb3J0X2FzX25hbWUgMjg0Ci0jZGVmaW5lIGRvdHRlZF9hc19uYW1lIDI4NQotI2RlZmluZSBpbXBvcnRfYXNfbmFtZXMgMjg2Ci0jZGVmaW5lIGRvdHRlZF9hc19uYW1lcyAyODcKLSNkZWZpbmUgZG90dGVkX25hbWUgMjg4Ci0jZGVmaW5lIGdsb2JhbF9zdG10IDI4OQotI2RlZmluZSBub25sb2NhbF9zdG10IDI5MAotI2RlZmluZSBhc3NlcnRfc3RtdCAyOTEKLSNkZWZpbmUgY29tcG91bmRfc3RtdCAyOTIKLSNkZWZpbmUgaWZfc3RtdCAyOTMKLSNkZWZpbmUgd2hpbGVfc3RtdCAyOTQKLSNkZWZpbmUgZm9yX3N0bXQgMjk1Ci0jZGVmaW5lIHRyeV9zdG10IDI5NgotI2RlZmluZSB3aXRoX3N0bXQgMjk3Ci0jZGVmaW5lIHdpdGhfaXRlbSAyOTgKLSNkZWZpbmUgZXhjZXB0X2NsYXVzZSAyOTkKLSNkZWZpbmUgc3VpdGUgMzAwCi0jZGVmaW5lIHRlc3QgMzAxCi0jZGVmaW5lIHRlc3Rfbm9jb25kIDMwMgotI2RlZmluZSBsYW1iZGVmIDMwMwotI2RlZmluZSBsYW1iZGVmX25vY29uZCAzMDQKLSNkZWZpbmUgb3JfdGVzdCAzMDUKLSNkZWZpbmUgYW5kX3Rlc3QgMzA2Ci0jZGVmaW5lIG5vdF90ZXN0IDMwNwotI2RlZmluZSBjb21wYXJpc29uIDMwOAotI2RlZmluZSBjb21wX29wIDMwOQotI2RlZmluZSBzdGFyX2V4cHIgMzEwCi0jZGVmaW5lIGV4cHIgMzExCi0jZGVmaW5lIHhvcl9leHByIDMxMgotI2RlZmluZSBhbmRfZXhwciAzMTMKLSNkZWZpbmUgc2hpZnRfZXhwciAzMTQKLSNkZWZpbmUgYXJpdGhfZXhwciAzMTUKLSNkZWZpbmUgdGVybSAzMTYKLSNkZWZpbmUgZmFjdG9yIDMxNwotI2RlZmluZSBwb3dlciAzMTgKLSNkZWZpbmUgYXRvbSAzMTkKLSNkZWZpbmUgdGVzdGxpc3RfY29tcCAzMjAKLSNkZWZpbmUgdHJhaWxlciAzMjEKLSNkZWZpbmUgc3Vic2NyaXB0bGlzdCAzMjIKLSNkZWZpbmUgc3Vic2NyaXB0IDMyMwotI2RlZmluZSBzbGljZW9wIDMyNAotI2RlZmluZSBleHBybGlzdCAzMjUKLSNkZWZpbmUgdGVzdGxpc3QgMzI2Ci0jZGVmaW5lIGRpY3RvcnNldG1ha2VyIDMyNwotI2RlZmluZSBjbGFzc2RlZiAzMjgKLSNkZWZpbmUgYXJnbGlzdCAzMjkKLSNkZWZpbmUgYXJndW1lbnQgMzMwCi0jZGVmaW5lIGNvbXBfaXRlciAzMzEKLSNkZWZpbmUgY29tcF9mb3IgMzMyCi0jZGVmaW5lIGNvbXBfaWYgMzMzCi0jZGVmaW5lIHRlc3RsaXN0MSAzMzQKKyNkZWZpbmUgdGVzdGxpc3Rfc3Rhcl9leHByIDI3MgorI2RlZmluZSBhdWdhc3NpZ24gMjczCisjZGVmaW5lIGRlbF9zdG10IDI3NAorI2RlZmluZSBwYXNzX3N0bXQgMjc1CisjZGVmaW5lIGZsb3dfc3RtdCAyNzYKKyNkZWZpbmUgYnJlYWtfc3RtdCAyNzcKKyNkZWZpbmUgY29udGludWVfc3RtdCAyNzgKKyNkZWZpbmUgcmV0dXJuX3N0bXQgMjc5CisjZGVmaW5lIHlpZWxkX3N0bXQgMjgwCisjZGVmaW5lIHJhaXNlX3N0bXQgMjgxCisjZGVmaW5lIGltcG9ydF9zdG10IDI4MgorI2RlZmluZSBpbXBvcnRfbmFtZSAyODMKKyNkZWZpbmUgaW1wb3J0X2Zyb20gMjg0CisjZGVmaW5lIGltcG9ydF9hc19uYW1lIDI4NQorI2RlZmluZSBkb3R0ZWRfYXNfbmFtZSAyODYKKyNkZWZpbmUgaW1wb3J0X2FzX25hbWVzIDI4NworI2RlZmluZSBkb3R0ZWRfYXNfbmFtZXMgMjg4CisjZGVmaW5lIGRvdHRlZF9uYW1lIDI4OQorI2RlZmluZSBnbG9iYWxfc3RtdCAyOTAKKyNkZWZpbmUgbm9ubG9jYWxfc3RtdCAyOTEKKyNkZWZpbmUgYXNzZXJ0X3N0bXQgMjkyCisjZGVmaW5lIGNvbXBvdW5kX3N0bXQgMjkzCisjZGVmaW5lIGlmX3N0bXQgMjk0CisjZGVmaW5lIHdoaWxlX3N0bXQgMjk1CisjZGVmaW5lIGZvcl9zdG10IDI5NgorI2RlZmluZSB0cnlfc3RtdCAyOTcKKyNkZWZpbmUgd2l0aF9zdG10IDI5OAorI2RlZmluZSB3aXRoX2l0ZW0gMjk5CisjZGVmaW5lIGV4Y2VwdF9jbGF1c2UgMzAwCisjZGVmaW5lIHN1aXRlIDMwMQorI2RlZmluZSB0ZXN0IDMwMgorI2RlZmluZSB0ZXN0X25vY29uZCAzMDMKKyNkZWZpbmUgbGFtYmRlZiAzMDQKKyNkZWZpbmUgbGFtYmRlZl9ub2NvbmQgMzA1CisjZGVmaW5lIG9yX3Rlc3QgMzA2CisjZGVmaW5lIGFuZF90ZXN0IDMwNworI2RlZmluZSBub3RfdGVzdCAzMDgKKyNkZWZpbmUgY29tcGFyaXNvbiAzMDkKKyNkZWZpbmUgY29tcF9vcCAzMTAKKyNkZWZpbmUgc3Rhcl9leHByIDMxMQorI2RlZmluZSBleHByIDMxMgorI2RlZmluZSB4b3JfZXhwciAzMTMKKyNkZWZpbmUgYW5kX2V4cHIgMzE0CisjZGVmaW5lIHNoaWZ0X2V4cHIgMzE1CisjZGVmaW5lIGFyaXRoX2V4cHIgMzE2CisjZGVmaW5lIHRlcm0gMzE3CisjZGVmaW5lIGZhY3RvciAzMTgKKyNkZWZpbmUgcG93ZXIgMzE5CisjZGVmaW5lIGF0b20gMzIwCisjZGVmaW5lIHRlc3RsaXN0X2NvbXAgMzIxCisjZGVmaW5lIHRyYWlsZXIgMzIyCisjZGVmaW5lIHN1YnNjcmlwdGxpc3QgMzIzCisjZGVmaW5lIHN1YnNjcmlwdCAzMjQKKyNkZWZpbmUgc2xpY2VvcCAzMjUKKyNkZWZpbmUgZXhwcmxpc3QgMzI2CisjZGVmaW5lIHRlc3RsaXN0IDMyNworI2RlZmluZSBkaWN0b3JzZXRtYWtlciAzMjgKKyNkZWZpbmUgY2xhc3NkZWYgMzI5CisjZGVmaW5lIGFyZ2xpc3QgMzMwCisjZGVmaW5lIGFyZ3VtZW50IDMzMQorI2RlZmluZSBjb21wX2l0ZXIgMzMyCisjZGVmaW5lIGNvbXBfZm9yIDMzMworI2RlZmluZSBjb21wX2lmIDMzNAogI2RlZmluZSBlbmNvZGluZ19kZWNsIDMzNQogI2RlZmluZSB5aWVsZF9leHByIDMzNgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9pbXBvcnQuaCBiL0luY2x1ZGUvaW1wb3J0LmgKaW5kZXggYjhkZTJmZC4uNDAwZTk3YyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9pbXBvcnQuaAorKysgYi9JbmNsdWRlL2ltcG9ydC5oCkBAIC04LDI1ICs4LDUyIEBACiAjZW5kaWYKIAogUHlBUElfRlVOQyhsb25nKSBQeUltcG9ydF9HZXRNYWdpY051bWJlcih2b2lkKTsKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKTsKK1B5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeUltcG9ydF9HZXRNYWdpY1RhZyh2b2lkKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoCisgICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgUHlPYmplY3QgKmNvCisgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgKLQljaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lKTsKKyAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBQeU9iamVjdCAqY28sCisgICAgY2hhciAqcGF0aG5hbWUgICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgICk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygKKyAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBQeU9iamVjdCAqY28sCisgICAgY2hhciAqcGF0aG5hbWUsICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNoYXIgKmNwYXRobmFtZSAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KHZvaWQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9BZGRNb2R1bGUoY29uc3QgY2hhciAqbmFtZSk7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0ltcG9ydE1vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jayhjb25zdCBjaGFyICopOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChjaGFyICpuYW1lLAotCVB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeU9iamVjdCAqZnJvbWxpc3QsIGludCBsZXZlbCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0FkZE1vZHVsZSgKKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygKKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbCgKKyAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBQeU9iamVjdCAqZ2xvYmFscywKKyAgICBQeU9iamVjdCAqbG9jYWxzLAorICAgIFB5T2JqZWN0ICpmcm9tbGlzdCwKKyAgICBpbnQgbGV2ZWwKKyAgICApOwogCiAjZGVmaW5lIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4KG4sIGcsIGwsIGYpIFwKLQlQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChuLCBnLCBsLCBmLCAtMSkKKyAgICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChuLCBnLCBsLCBmLCAtMSkKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9HZXRJbXBvcnRlcihQeU9iamVjdCAqcGF0aCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X0ltcG9ydChQeU9iamVjdCAqbmFtZSk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5SW1wb3J0X1JlbG9hZE1vZHVsZShQeU9iamVjdCAqbSk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5SW1wb3J0X0NsZWFudXAodm9pZCk7Ci1QeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKGNoYXIgKik7CitQeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKAorICAgIGNoYXIgKm5hbWUgICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNpZmRlZiBXSVRIX1RIUkVBRAogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRfQWNxdWlyZUxvY2sodm9pZCk7CiBQeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X1JlbGVhc2VMb2NrKHZvaWQpOwpAQCAtMzUsMjcgKzYyLDM2IEBACiAjZGVmaW5lIF9QeUltcG9ydF9SZWxlYXNlTG9jaygpIDEKICNlbmRpZgogCi1QeUFQSV9GVU5DKHN0cnVjdCBmaWxlZGVzY3IgKikgX1B5SW1wb3J0X0ZpbmRNb2R1bGUoCi0JY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBjaGFyICosIHNpemVfdCwgRklMRSAqKiwgUHlPYmplY3QgKiopOwotUHlBUElfRlVOQyhpbnQpIF9QeUltcG9ydF9Jc1NjcmlwdChzdHJ1Y3QgZmlsZWRlc2NyICopOwogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRfUmVJbml0TG9jayh2b2lkKTsKIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKV9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uKGNoYXIgKiwgY2hhciAqKTsKLVB5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbihQeU9iamVjdCosIGNoYXIgKiwgY2hhciAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKilfUHlJbXBvcnRfRmluZEJ1aWx0aW4oCisgICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKilfUHlJbXBvcnRfRmluZEV4dGVuc2lvblVuaWNvZGUoY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KV9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oCisgICAgUHlPYmplY3QgKm1vZCwKKyAgICBjaGFyICpuYW1lICAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhpbnQpX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uVW5pY29kZShQeU9iamVjdCosIGNoYXIgKiwgUHlPYmplY3QgKik7CiAKIHN0cnVjdCBfaW5pdHRhYiB7CiAgICAgY2hhciAqbmFtZTsKICAgICBQeU9iamVjdCogKCppbml0ZnVuYykodm9pZCk7CiB9OworUHlBUElfREFUQShzdHJ1Y3QgX2luaXR0YWIgKikgUHlJbXBvcnRfSW5pdHRhYjsKK1B5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9FeHRlbmRJbml0dGFiKHN0cnVjdCBfaW5pdHRhYiAqbmV3dGFiKTsKKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwogCiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlOdWxsSW1wb3J0ZXJfVHlwZTsKLVB5QVBJX0RBVEEoc3RydWN0IF9pbml0dGFiICopIFB5SW1wb3J0X0luaXR0YWI7CiAKLVB5QVBJX0ZVTkMoaW50KSBQeUltcG9ydF9BcHBlbmRJbml0dGFiKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0KiAoKmluaXRmdW5jKSh2b2lkKSk7Ci1QeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYihzdHJ1Y3QgX2luaXR0YWIgKm5ld3RhYik7CitQeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfQXBwZW5kSW5pdHRhYigKKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBQeU9iamVjdCogKCppbml0ZnVuYykodm9pZCkKKyAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBzdHJ1Y3QgX2Zyb3plbiB7Ci0gICAgY2hhciAqbmFtZTsKKyAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KICAgICB1bnNpZ25lZCBjaGFyICpjb2RlOwogICAgIGludCBzaXplOwogfTsKQEAgLTY0LDYgKzEwMCw3IEBACiAgICBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzOiAqLwogCiBQeUFQSV9EQVRBKHN0cnVjdCBfZnJvemVuICopIFB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7CisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2xpc3RvYmplY3QuaCBiL0luY2x1ZGUvbGlzdG9iamVjdC5oCmluZGV4IDc1NWZiYmUuLjk0OWIxYTMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbGlzdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvbGlzdG9iamVjdC5oCkBAIC0xOSw2ICsxOSw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfVkFSX0hFQUQKICAgICAvKiBWZWN0b3Igb2YgcG9pbnRlcnMgdG8gbGlzdCBlbGVtZW50cy4gIGxpc3RbMF0gaXMgb2JfaXRlbVswXSwgZXRjLiAqLwpAQCAtMzcsNiArMzgsNyBAQAogICAgICAqLwogICAgIFB5X3NzaXplX3QgYWxsb2NhdGVkOwogfSBQeUxpc3RPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5TGlzdF9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5TGlzdEl0ZXJfVHlwZTsKQEAgLTU4LDEyICs2MCwxNiBAQAogUHlBUElfRlVOQyhpbnQpIFB5TGlzdF9Tb3J0KFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5TGlzdF9SZXZlcnNlKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxpc3RfQXNUdXBsZShQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5TGlzdF9FeHRlbmQoUHlMaXN0T2JqZWN0ICosIFB5T2JqZWN0ICopOworI2VuZGlmCiAKIC8qIE1hY3JvLCB0cmFkaW5nIHNhZmV0eSBmb3Igc3BlZWQgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlMaXN0X0dFVF9JVEVNKG9wLCBpKSAoKChQeUxpc3RPYmplY3QgKikob3ApKS0+b2JfaXRlbVtpXSkKICNkZWZpbmUgUHlMaXN0X1NFVF9JVEVNKG9wLCBpLCB2KSAoKChQeUxpc3RPYmplY3QgKikob3ApKS0+b2JfaXRlbVtpXSA9ICh2KSkKICNkZWZpbmUgUHlMaXN0X0dFVF9TSVpFKG9wKSAgICBQeV9TSVpFKG9wKQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9sb25naW50cmVwci5oIGIvSW5jbHVkZS9sb25naW50cmVwci5oCmluZGV4IDc3NjUxNzIuLmI5NGY3YjIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbG9uZ2ludHJlcHIuaAorKysgYi9JbmNsdWRlL2xvbmdpbnRyZXByLmgKQEAgLTEsMyArMSw0IEBACisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X0xPTkdJTlRSRVBSX0gKICNkZWZpbmUgUHlfTE9OR0lOVFJFUFJfSAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC01MCwxMiArNTEsMTYgQEAKIHR5cGVkZWYgUFlfVUlOVDY0X1QgdHdvZGlnaXRzOwogdHlwZWRlZiBQWV9JTlQ2NF9UIHN0d29kaWdpdHM7IC8qIHNpZ25lZCB2YXJpYW50IG9mIHR3b2RpZ2l0cyAqLwogI2RlZmluZSBQeUxvbmdfU0hJRlQJMzAKKyNkZWZpbmUgX1B5TG9uZ19ERUNJTUFMX1NISUZUCTkgLyogbWF4KGUgc3VjaCB0aGF0IDEwKiplIGZpdHMgaW4gYSBkaWdpdCkgKi8KKyNkZWZpbmUgX1B5TG9uZ19ERUNJTUFMX0JBU0UJKChkaWdpdCkxMDAwMDAwMDAwKSAvKiAxMCAqKiBERUNJTUFMX1NISUZUICovCiAjZWxpZiBQWUxPTkdfQklUU19JTl9ESUdJVCA9PSAxNQogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBkaWdpdDsKIHR5cGVkZWYgc2hvcnQgc2RpZ2l0OyAvKiBzaWduZWQgdmFyaWFudCBvZiBkaWdpdCAqLwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHR3b2RpZ2l0czsKIHR5cGVkZWYgbG9uZyBzdHdvZGlnaXRzOyAvKiBzaWduZWQgdmFyaWFudCBvZiB0d29kaWdpdHMgKi8KICNkZWZpbmUgUHlMb25nX1NISUZUCTE1CisjZGVmaW5lIF9QeUxvbmdfREVDSU1BTF9TSElGVAk0IC8qIG1heChlIHN1Y2ggdGhhdCAxMCoqZSBmaXRzIGluIGEgZGlnaXQpICovCisjZGVmaW5lIF9QeUxvbmdfREVDSU1BTF9CQVNFCSgoZGlnaXQpMTAwMDApIC8qIDEwICoqIERFQ0lNQUxfU0hJRlQgKi8KICNlbHNlCiAjZXJyb3IgIlBZTE9OR19CSVRTX0lOX0RJR0lUIHNob3VsZCBiZSAxNSBvciAzMCIKICNlbmRpZgpAQCAtOTUsMyArMTAwLDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9MT05HSU5UUkVQUl9IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbG9uZ29iamVjdC5oIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKaW5kZXggNmU0ZTFhNC4uYzA5NTY1YSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9sb25nb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9sb25nb2JqZWN0LmgKQEAgLTMyLDE2ICszMiwzNyBAQAogICAgY2xlYW51cCB0byBrZWVwIHRoZSBleHRyYSBpbmZvcm1hdGlvbi4gW0NIXSAqLwogI2RlZmluZSBQeUxvbmdfQVNfTE9ORyhvcCkgUHlMb25nX0FzTG9uZyhvcCkKIAotLyogRm9yIHVzZSBieSBpbnRvYmplY3QuYyBvbmx5ICovCi1QeUFQSV9EQVRBKHVuc2lnbmVkIGNoYXIpIF9QeUxvbmdfRGlnaXRWYWx1ZVsyNTZdOworLyogSXNzdWUgIzE5ODM6IHBpZF90IGNhbiBiZSBsb25nZXIgdGhhbiBhIEMgbG9uZyBvbiBzb21lIHN5c3RlbXMgKi8KKyNpZiAhZGVmaW5lZChTSVpFT0ZfUElEX1QpIHx8IFNJWkVPRl9QSURfVCA9PSBTSVpFT0ZfSU5UCisjZGVmaW5lIF9QeV9QQVJTRV9QSUQgImkiCisjZGVmaW5lIFB5TG9uZ19Gcm9tUGlkIFB5TG9uZ19Gcm9tTG9uZworI2RlZmluZSBQeUxvbmdfQXNQaWQgUHlMb25nX0FzTG9uZworI2VsaWYgU0laRU9GX1BJRF9UID09IFNJWkVPRl9MT05HCisjZGVmaW5lIF9QeV9QQVJTRV9QSUQgImwiCisjZGVmaW5lIFB5TG9uZ19Gcm9tUGlkIFB5TG9uZ19Gcm9tTG9uZworI2RlZmluZSBQeUxvbmdfQXNQaWQgUHlMb25nX0FzTG9uZworI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfUElEX1QgPT0gU0laRU9GX0xPTkdfTE9ORworI2RlZmluZSBfUHlfUEFSU0VfUElEICJMIgorI2RlZmluZSBQeUxvbmdfRnJvbVBpZCBQeUxvbmdfRnJvbUxvbmdMb25nCisjZGVmaW5lIFB5TG9uZ19Bc1BpZCBQeUxvbmdfQXNMb25nTG9uZworI2Vsc2UKKyNlcnJvciAic2l6ZW9mKHBpZF90KSBpcyBuZWl0aGVyIHNpemVvZihpbnQpLCBzaXplb2YobG9uZykgb3Igc2l6ZW9mKGxvbmcgbG9uZykiCisjZW5kaWYgLyogU0laRU9GX1BJRF9UICovCiAKLS8qIF9QeUxvbmdfQXNTY2FsZWREb3VibGUgcmV0dXJucyBhIGRvdWJsZSB4IGFuZCBhbiBleHBvbmVudCBlIHN1Y2ggdGhhdAotICAgdGhlIHRydWUgdmFsdWUgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byB4ICogMioqKFNISUZUKmUpLiAgZSBpcyA+PSAwLgotICAgeCBpcyAwLjAgaWYgYW5kIG9ubHkgaWYgdGhlIGlucHV0IGlzIDAgKGluIHdoaWNoIGNhc2UsIGUgYW5kIHggYXJlIGJvdGgKLSAgIHplcm9lcykuICBPdmVyZmxvdyBpcyBpbXBvc3NpYmxlLiAgTm90ZSB0aGF0IHRoZSBleHBvbmVudCByZXR1cm5lZCBtdXN0Ci0gICBiZSBtdWx0aXBsaWVkIGJ5IFNISUZUISAgVGhlcmUgbWF5IG5vdCBiZSBlbm91Z2ggcm9vbSBpbiBhbiBpbnQgdG8gc3RvcmUKLSAgIGUqU0hJRlQgZGlyZWN0bHkuICovCi1QeUFQSV9GVU5DKGRvdWJsZSkgX1B5TG9uZ19Bc1NjYWxlZERvdWJsZShQeU9iamVjdCAqdnYsIGludCAqZSk7CisvKiBVc2VkIGJ5IFB5dGhvbi9teXN0cnRvdWwuYy4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEodW5zaWduZWQgY2hhcikgX1B5TG9uZ19EaWdpdFZhbHVlWzI1Nl07CisjZW5kaWYKKworLyogX1B5TG9uZ19GcmV4cCByZXR1cm5zIGEgZG91YmxlIHggYW5kIGFuIGV4cG9uZW50IGUgc3VjaCB0aGF0IHRoZQorICAgdHJ1ZSB2YWx1ZSBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIHggKiAyKiplLiAgZSBpcyA+PSAwLiAgeCBpcworICAgMC4wIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnB1dCBpcyAwIChpbiB3aGljaCBjYXNlLCBlIGFuZCB4IGFyZSBib3RoCisgICB6ZXJvZXMpOyBvdGhlcndpc2UsIDAuNSA8PSBhYnMoeCkgPCAxLjAuICBPbiBvdmVyZmxvdywgd2hpY2ggaXMKKyAgIHBvc3NpYmxlIGlmIHRoZSBudW1iZXIgb2YgYml0cyBkb2Vzbid0IGZpdCBpbnRvIGEgUHlfc3NpemVfdCwgc2V0cworICAgT3ZlcmZsb3dFcnJvciBhbmQgcmV0dXJucyAtMS4wIGZvciB4LCAwIGZvciBlLiAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhkb3VibGUpIF9QeUxvbmdfRnJleHAoUHlMb25nT2JqZWN0ICphLCBQeV9zc2l6ZV90ICplKTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKGRvdWJsZSkgUHlMb25nX0FzRG91YmxlKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVZvaWRQdHIodm9pZCAqKTsKQEAgLTUzLDExICs3NCwxNSBAQAogUHlBUElfRlVOQyhQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc0xvbmdMb25nKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh1bnNpZ25lZCBQWV9MT05HX0xPTkcpIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKHVuc2lnbmVkIFBZX0xPTkdfTE9ORykgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFBZX0xPTkdfTE9ORykgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqLCBpbnQgKik7CiAjZW5kaWYgLyogSEFWRV9MT05HX0xPTkcgKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjaGFyICosIGNoYXIgKiosIGludCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFKiwgUHlfc3NpemVfdCwgaW50KTsKKyNlbmRpZgogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBfUHlMb25nX1NpZ24uICBSZXR1cm4gMCBpZiB2IGlzIDAsIC0xIGlmIHYgPCAwLCArMSBpZiB2ID4gMC4KICAgIHYgbXVzdCBub3QgYmUgTlVMTCwgYW5kIG11c3QgYmUgYSBub3JtYWxpemVkIGxvbmcuCiAgICBUaGVyZSBhcmUgbm8gZXJyb3IgY2FzZXMuCkBAIC03NCw2ICs5OSwxNCBAQAogKi8KIFB5QVBJX0ZVTkMoc2l6ZV90KSBfUHlMb25nX051bUJpdHMoUHlPYmplY3QgKnYpOwogCisvKiBfUHlMb25nX0Rpdm1vZE5lYXIuICBHaXZlbiBpbnRlZ2VycyBhIGFuZCBiLCBjb21wdXRlIHRoZSBuZWFyZXN0CisgICBpbnRlZ2VyIHEgdG8gdGhlIGV4YWN0IHF1b3RpZW50IGEgLyBiLCByb3VuZGluZyB0byB0aGUgbmVhcmVzdCBldmVuIGludGVnZXIKKyAgIGluIHRoZSBjYXNlIG9mIGEgdGllLiAgUmV0dXJuIChxLCByKSwgd2hlcmUgciA9IGEgLSBxKmIuICBUaGUgcmVtYWluZGVyIHIKKyAgIHdpbGwgc2F0aXNmeSBhYnMocikgPD0gYWJzKGIpLzIsIHdpdGggZXF1YWxpdHkgcG9zc2libGUgb25seSBpZiBxIGlzCisgICBldmVuLgorKi8KK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5TG9uZ19EaXZtb2ROZWFyKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworCiAvKiBfUHlMb25nX0Zyb21CeXRlQXJyYXk6ICBWaWV3IHRoZSBuIHVuc2lnbmVkIGJ5dGVzIGFzIGEgYmluYXJ5IGludGVnZXIgaW4KICAgIGJhc2UgMjU2LCBhbmQgcmV0dXJuIGEgUHl0aG9uIGxvbmcgd2l0aCB0aGUgc2FtZSBudW1lcmljIHZhbHVlLgogICAgSWYgbiBpcyAwLCB0aGUgaW50ZWdlciBpcyAwLiAgRWxzZToKQEAgLTEyNCw2ICsxNTcsNyBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlMb25nX0Zvcm1hdEFkdmFuY2VkKFB5T2JqZWN0ICpvYmosCiAJCQkJCSAgICAgIFB5X1VOSUNPREUgKmZvcm1hdF9zcGVjLAogCQkJCQkgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogLyogVGhlc2UgYXJlbid0IHJlYWxseSBwYXJ0IG9mIHRoZSBsb25nIG9iamVjdCwgYnV0IHRoZXkncmUgaGFuZHkuIFRoZQogICAgZnVuY3Rpb25zIGFyZSBpbiBQeXRob24vbXlzdHJ0b3VsLmMuCmRpZmYgLS1naXQgYS9JbmNsdWRlL21hcnNoYWwuaCBiL0luY2x1ZGUvbWFyc2hhbC5oCmluZGV4IDQxMWZkY2EuLmU5NmQwNjIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbWFyc2hhbC5oCisrKyBiL0luY2x1ZGUvbWFyc2hhbC5oCkBAIC0xMywxMCArMTMsMTIgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlKFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcoUHlPYmplY3QgKiwgaW50KTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhsb25nKSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhpbnQpIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShGSUxFICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlKEZJTEUgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKEZJTEUgKik7CisjZW5kaWYKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNoYXIgKiwgUHlfc3NpemVfdCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tZW1vcnlvYmplY3QuaCBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKaW5kZXggYmYwYjYyMS4uNjJlY2JkNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tZW1vcnlvYmplY3QuaAorKysgYi9JbmNsdWRlL21lbW9yeW9iamVjdC5oCkBAIC0xMCwxMCArMTAsMTIgQEAKIAogI2RlZmluZSBQeU1lbW9yeVZpZXdfQ2hlY2sob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlNZW1vcnlWaWV3X1R5cGUpCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIEdldCBhIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgUHlfYnVmZmVyIG9mIGEgbWVtb3J5dmlldyBvYmplY3QuICovCiAjZGVmaW5lIFB5TWVtb3J5Vmlld19HRVRfQlVGRkVSKG9wKSAoJigoUHlNZW1vcnlWaWV3T2JqZWN0ICopKG9wKSktPnZpZXcpCiAvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBQeU9iamVjdCBmcm9tIHdoaWNoIG9yaWdpbmF0ZXMgYSBtZW1vcnl2aWV3IG9iamVjdC4gKi8KICNkZWZpbmUgUHlNZW1vcnlWaWV3X0dFVF9CQVNFKG9wKSAoKChQeU1lbW9yeVZpZXdPYmplY3QgKikob3ApKS0+dmlldy5vYmopCisjZW5kaWYKIAogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzKFB5T2JqZWN0ICpiYXNlLCAKQEAgLTUzLDIwICs1NSwyMiBAQAogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWVtb3J5Vmlld19Gcm9tT2JqZWN0KFB5T2JqZWN0ICpiYXNlKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcihQeV9idWZmZXIgKmluZm8pOwogICAgIC8qIGNyZWF0ZSBuZXcgaWYgYnVmcHRyIGlzIE5VTEwgCiAgICAgICAgIHdpbGwgYmUgYSBuZXcgYnl0ZXNvYmplY3QgaW4gYmFzZSAqLworI2VuZGlmCiAKIAogLyogVGhlIHN0cnVjdCBpcyBkZWNsYXJlZCBoZXJlIHNvIHRoYXQgbWFjcm9zIGNhbiB3b3JrLCBidXQgaXQgc2hvdWxkbid0CiAgICBiZSBjb25zaWRlcmVkIHB1YmxpYy4gRG9uJ3QgYWNjZXNzIHRob3NlIGZpZWxkcyBkaXJlY3RseSwgdXNlIHRoZSBtYWNyb3MKICAgIGFuZCBmdW5jdGlvbnMgaW5zdGVhZCEgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgUHlPYmplY3QgKmJhc2U7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiB9IFB5TWVtb3J5Vmlld09iamVjdDsKLQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tZXRob2RvYmplY3QuaCBiL0luY2x1ZGUvbWV0aG9kb2JqZWN0LmgKaW5kZXggODFlODRjZS4uN2U2N2MwYiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tZXRob2RvYmplY3QuaAorKysgYi9JbmNsdWRlL21ldGhvZG9iamVjdC5oCkBAIC0yNiwxMiArMjYsMTQgQEAKIAogLyogTWFjcm9zIGZvciBkaXJlY3QgYWNjZXNzIHRvIHRoZXNlIHZhbHVlcy4gVHlwZSBjaGVja3MgYXJlICpub3QqCiAgICBkb25lLCBzbyB1c2Ugd2l0aCBjYXJlLiAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUNGdW5jdGlvbl9HRVRfRlVOQ1RJT04oZnVuYykgXAogICAgICAgICAoKChQeUNGdW5jdGlvbk9iamVjdCAqKWZ1bmMpIC0+IG1fbWwgLT4gbWxfbWV0aCkKICNkZWZpbmUgUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYykgXAogCSgoKFB5Q0Z1bmN0aW9uT2JqZWN0ICopZnVuYykgLT4gbV9zZWxmKQogI2RlZmluZSBQeUNGdW5jdGlvbl9HRVRfRkxBR1MoZnVuYykgXAogCSgoKFB5Q0Z1bmN0aW9uT2JqZWN0ICopZnVuYykgLT4gbV9tbCAtPiBtbF9mbGFncykKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9DYWxsKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogCiBzdHJ1Y3QgUHlNZXRob2REZWYgewpAQCAtNjgsMTIgKzcwLDE0IEBACiAKICNkZWZpbmUgTUVUSF9DT0VYSVNUICAgMHgwMDQwCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlNZXRob2REZWYgKm1fbWw7IC8qIERlc2NyaXB0aW9uIG9mIHRoZSBDIGZ1bmN0aW9uIHRvIGNhbGwgKi8KICAgICBQeU9iamVjdCAgICAqbV9zZWxmOyAvKiBQYXNzZWQgYXMgJ3NlbGYnIGFyZyB0byB0aGUgQyBmdW5jLCBjYW4gYmUgTlVMTCAqLwogICAgIFB5T2JqZWN0ICAgICptX21vZHVsZTsgLyogVGhlIF9fbW9kdWxlX18gYXR0cmlidXRlLCBjYW4gYmUgYW55dGhpbmcgKi8KIH0gUHlDRnVuY3Rpb25PYmplY3Q7CisjZW5kaWYKIAogUHlBUElfRlVOQyhpbnQpIFB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3Qodm9pZCk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggMjNlOGZhNi4uYmY2NDc4ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI3LDEwICsyNywxMyBAQAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGUoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCAuLi4pIFB5X0ZPUk1BVF9QQVJTRVRVUExFKFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNoYXIgKiosIC4uLik7CitQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1VucGFja1R1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgUHlfc3NpemVfdCwgUHlfc3NpemVfdCwgLi4uKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlfQnVpbGRWYWx1ZShjb25zdCBjaGFyICosIC4uLik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeV9CdWlsZFZhbHVlX1NpemVUKGNvbnN0IGNoYXIgKiwgLi4uKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoaW50KSBfUHlBcmdfTm9LZXl3b3Jkcyhjb25zdCBjaGFyICpmdW5jbmFtZSwgUHlPYmplY3QgKmt3KTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKGludCkgUHlBcmdfVmFQYXJzZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIHZhX2xpc3QpOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCkBAIC05MSw2ICs5NCwxMiBAQAogICAgOS1KYW4tMTk5NQlHdlIJSW5pdGlhbCB2ZXJzaW9uIChpbmNvbXBhdGlibGUgd2l0aCBvbGRlciBBUEkpCiAqLwogCisvKiBUaGUgUFlUSE9OX0FCSV9WRVJTSU9OIGlzIGludHJvZHVjZWQgaW4gUEVQIDM4NC4gRm9yIHRoZSBsaWZldGltZSBvZgorICAgUHl0aG9uIDMsIGl0IHdpbGwgc3RheSBhdCB0aGUgdmFsdWUgb2YgMzsgY2hhbmdlcyB0byB0aGUgbGltaXRlZCBBUEkKKyAgIG11c3QgYmUgcGVyZm9ybWVkIGluIGEgc3RyaWN0bHkgYmFja3dhcmRzLWNvbXBhdGlibGUgbWFubmVyLiAqLworI2RlZmluZSBQWVRIT05fQUJJX1ZFUlNJT04gMworI2RlZmluZSBQWVRIT05fQUJJX1NUUklORyAiMyIKKwogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAvKiBXaGVuIHdlIGFyZSB0cmFjaW5nIHJlZmVyZW5jZSBjb3VudHMsIHJlbmFtZSBQeU1vZHVsZV9DcmVhdGUyIHNvCiAgICAgbW9kdWxlcyBjb21waWxlZCB3aXRoIGluY29tcGF0aWJsZSBzZXR0aW5ncyB3aWxsIGdlbmVyYXRlIGEKQEAgLTEwMSwxMCArMTEwLDE3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0NyZWF0ZTIoc3RydWN0IFB5TW9kdWxlRGVmKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXBpdmVyKTsKIAorI2lmZGVmIFB5X0xJTUlURURfQVBJCisjZGVmaW5lIFB5TW9kdWxlX0NyZWF0ZShtb2R1bGUpIFwKKwlQeU1vZHVsZV9DcmVhdGUyKG1vZHVsZSwgUFlUSE9OX0FCSV9WRVJTSU9OKQorI2Vsc2UKICNkZWZpbmUgUHlNb2R1bGVfQ3JlYXRlKG1vZHVsZSkgXAogCVB5TW9kdWxlX0NyZWF0ZTIobW9kdWxlLCBQWVRIT05fQVBJX1ZFUlNJT04pCisjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQShjaGFyICopIF9QeV9QYWNrYWdlQ29udGV4dDsKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmggYi9JbmNsdWRlL21vZHVsZW9iamVjdC5oCmluZGV4IDQyZWFjODIuLjdiMmJmMWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9tb2R1bGVvYmplY3QuaApAQCAtMTIsMTEgKzEyLDE2IEBACiAjZGVmaW5lIFB5TW9kdWxlX0NoZWNrKG9wKSBQeU9iamVjdF9UeXBlQ2hlY2sob3AsICZQeU1vZHVsZV9UeXBlKQogI2RlZmluZSBQeU1vZHVsZV9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5TW9kdWxlX1R5cGUpCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNb2R1bGVfTmV3KGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX05ldygKKyAgICBjb25zdCBjaGFyICpuYW1lICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1vZHVsZV9HZXREaWN0KFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5TW9kdWxlX0dldE5hbWUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlNb2R1bGVfR2V0RmlsZW5hbWUoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKik7CisjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IFB5TW9kdWxlRGVmKikgUHlNb2R1bGVfR2V0RGVmKFB5T2JqZWN0Kik7CiBQeUFQSV9GVU5DKHZvaWQqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeU9iamVjdCopOwogCkBAIC0yNyw3ICszMiwxMiBAQAogICBQeU9iamVjdCogbV9jb3B5OwogfSBQeU1vZHVsZURlZl9CYXNlOwogCi0jZGVmaW5lIFB5TW9kdWxlRGVmX0hFQURfSU5JVCB7UHlPYmplY3RfSEVBRF9JTklUKE5VTEwpfQorI2RlZmluZSBQeU1vZHVsZURlZl9IRUFEX0lOSVQgeyBcCisgICAgUHlPYmplY3RfSEVBRF9JTklUKE5VTEwpICAgIFwKKyAgICBOVUxMLCAvKiBtX2luaXQgKi8gICAgICAgICAgXAorICAgIDAsICAgIC8qIG1faW5kZXggKi8gICAgICAgICBcCisgICAgTlVMTCwgLyogbV9jb3B5ICovICAgICAgICAgIFwKKyAgfQogCiB0eXBlZGVmIHN0cnVjdCBQeU1vZHVsZURlZnsKICAgUHlNb2R1bGVEZWZfQmFzZSBtX2Jhc2U7CmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamVjdC5oIGIvSW5jbHVkZS9vYmplY3QuaAppbmRleCBlZjczYTIxLi4zNzUzNzg1IDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamVjdC5oCisrKyBiL0luY2x1ZGUvb2JqZWN0LmgKQEAgLTYxLDYgKzYxLDEwIEBACiAjZGVmaW5lIFB5X1JFRl9ERUJVRwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFB5X0xJTUlURURfQVBJKSAmJiBkZWZpbmVkKFB5X1JFRl9ERUJVRykKKyNlcnJvciBQeV9MSU1JVEVEX0FQSSBpcyBpbmNvbXBhdGlibGUgd2l0aCBQeV9ERUJVRywgUHlfVFJBQ0VfUkVGUywgYW5kIFB5X1JFRl9ERUJVRworI2VuZGlmCisKICNpZmRlZiBQeV9UUkFDRV9SRUZTCiAvKiBEZWZpbmUgcG9pbnRlcnMgdG8gc3VwcG9ydCBhIGRvdWJseS1saW5rZWQgbGlzdCBvZiBhbGwgbGl2ZSBoZWFwIG9iamVjdHMuICovCiAjZGVmaW5lIF9QeU9iamVjdF9IRUFEX0VYVFJBICAgICAgICAgICAgXApAQCAtMTM5LDcgKzE0Myw3IEBACiB0eXBlZGVmIGludCgqc3NpemVzc2l6ZW9iamFyZ3Byb2MpKFB5T2JqZWN0ICosIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIFB5T2JqZWN0ICopOwogdHlwZWRlZiBpbnQoKm9iam9iamFyZ3Byb2MpKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogCi0KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIGJ1ZmZlciBpbnRlcmZhY2UgKi8KIHR5cGVkZWYgc3RydWN0IGJ1ZmZlcmluZm8gewogICAgIHZvaWQgKmJ1ZjsKQEAgLTE4OSwxNCArMTkzLDE1IEBACiAKICNkZWZpbmUgUHlCVUZfUkVBRCAgMHgxMDAKICNkZWZpbmUgUHlCVUZfV1JJVEUgMHgyMDAKLSNkZWZpbmUgUHlCVUZfU0hBRE9XIDB4NDAwCiAKIC8qIEVuZCBidWZmZXIgaW50ZXJmYWNlICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogdHlwZWRlZiBpbnQgKCpvYmpvYmpwcm9jKShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHR5cGVkZWYgaW50ICgqdmlzaXRwcm9jKShQeU9iamVjdCAqLCB2b2lkICopOwogdHlwZWRlZiBpbnQgKCp0cmF2ZXJzZXByb2MpKFB5T2JqZWN0ICosIHZpc2l0cHJvYywgdm9pZCAqKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgewogICAgIC8qIE51bWJlciBpbXBsZW1lbnRhdGlvbnMgbXVzdCBjaGVjayAqYm90aCoKICAgICAgICBhcmd1bWVudHMgZm9yIHByb3BlciB0eXBlIGFuZCBpbXBsZW1lbnQgdGhlIG5lY2Vzc2FyeSBjb252ZXJzaW9ucwpAQCAtMjY2LDE2ICsyNzEsMjMgQEAKICAgICAgZ2V0YnVmZmVycHJvYyBiZl9nZXRidWZmZXI7CiAgICAgIHJlbGVhc2VidWZmZXJwcm9jIGJmX3JlbGVhc2VidWZmZXI7CiB9IFB5QnVmZmVyUHJvY3M7CisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogdHlwZWRlZiB2b2lkICgqZnJlZWZ1bmMpKHZvaWQgKik7CiB0eXBlZGVmIHZvaWQgKCpkZXN0cnVjdG9yKShQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKy8qIFdlIGNhbid0IHByb3ZpZGUgYSBmdWxsIGNvbXBpbGUtdGltZSBjaGVjayB0aGF0IGxpbWl0ZWQtQVBJCisgICB1c2VycyB3b24ndCBpbXBsZW1lbnQgdHBfcHJpbnQuIEhvd2V2ZXIsIG5vdCBkZWZpbmluZyBwcmludGZ1bmMKKyAgIGFuZCBtYWtpbmcgdHBfcHJpbnQgb2YgYSBkaWZmZXJlbnQgZnVuY3Rpb24gcG9pbnRlciB0eXBlCisgICBzaG91bGQgYXQgbGVhc3QgY2F1c2UgYSB3YXJuaW5nIGluIG1vc3QgY2FzZXMuICovCiB0eXBlZGVmIGludCAoKnByaW50ZnVuYykoUHlPYmplY3QgKiwgRklMRSAqLCBpbnQpOworI2VuZGlmCiB0eXBlZGVmIFB5T2JqZWN0ICooKmdldGF0dHJmdW5jKShQeU9iamVjdCAqLCBjaGFyICopOwogdHlwZWRlZiBQeU9iamVjdCAqKCpnZXRhdHRyb2Z1bmMpKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogdHlwZWRlZiBpbnQgKCpzZXRhdHRyZnVuYykoUHlPYmplY3QgKiwgY2hhciAqLCBQeU9iamVjdCAqKTsKIHR5cGVkZWYgaW50ICgqc2V0YXR0cm9mdW5jKShQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIHR5cGVkZWYgUHlPYmplY3QgKigqcmVwcmZ1bmMpKFB5T2JqZWN0ICopOwotdHlwZWRlZiBsb25nICgqaGFzaGZ1bmMpKFB5T2JqZWN0ICopOwordHlwZWRlZiBQeV9oYXNoX3QgKCpoYXNoZnVuYykoUHlPYmplY3QgKik7CiB0eXBlZGVmIFB5T2JqZWN0ICooKnJpY2hjbXBmdW5jKSAoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgaW50KTsKIHR5cGVkZWYgUHlPYmplY3QgKigqZ2V0aXRlcmZ1bmMpIChQeU9iamVjdCAqKTsKIHR5cGVkZWYgUHlPYmplY3QgKigqaXRlcm5leHRmdW5jKSAoUHlPYmplY3QgKik7CkBAIC0yODUsNiArMjk3LDkgQEAKIHR5cGVkZWYgUHlPYmplY3QgKigqbmV3ZnVuYykoc3RydWN0IF90eXBlb2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogdHlwZWRlZiBQeU9iamVjdCAqKCphbGxvY2Z1bmMpKHN0cnVjdCBfdHlwZW9iamVjdCAqLCBQeV9zc2l6ZV90KTsKIAorI2lmZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCBfdHlwZW9iamVjdCBQeVR5cGVPYmplY3Q7IC8qIG9wYXF1ZSAqLworI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF90eXBlb2JqZWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAogICAgIGNvbnN0IGNoYXIgKnRwX25hbWU7IC8qIEZvciBwcmludGluZywgaW4gZm9ybWF0ICI8bW9kdWxlPi48bmFtZT4iICovCkBAIC0zNzIsOCArMzg3LDI0IEBACiAgICAgc3RydWN0IF90eXBlb2JqZWN0ICp0cF9uZXh0OwogI2VuZGlmCiB9IFB5VHlwZU9iamVjdDsKKyNlbmRpZgogCit0eXBlZGVmIHN0cnVjdHsKKyAgICBpbnQgc2xvdDsgICAgLyogc2xvdCBpZCwgc2VlIGJlbG93ICovCisgICAgdm9pZCAqcGZ1bmM7IC8qIGZ1bmN0aW9uIHBvaW50ZXIgKi8KK30gUHlUeXBlX1Nsb3Q7CiAKK3R5cGVkZWYgc3RydWN0eworICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgaW50IGJhc2ljc2l6ZTsKKyAgICBpbnQgaXRlbXNpemU7CisgICAgaW50IGZsYWdzOworICAgIFB5VHlwZV9TbG90ICpzbG90czsgLyogdGVybWluYXRlZCBieSBzbG90PT0wLiAqLworfSBQeVR5cGVfU3BlYzsKKworUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VHlwZV9Gcm9tU3BlYyhQeVR5cGVfU3BlYyopOworCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBUaGUgKnJlYWwqIGxheW91dCBvZiBhIHR5cGUgb2JqZWN0IHdoZW4gYWxsb2NhdGVkIG9uIHRoZSBoZWFwICovCiB0eXBlZGVmIHN0cnVjdCBfaGVhcHR5cGVvYmplY3QgewogICAgIC8qIE5vdGU6IHRoZXJlJ3MgYSBkZXBlbmRlbmN5IG9uIHRoZSBvcmRlciBvZiB0aGVzZSBtZW1iZXJzCkBAIC0zOTQsNyArNDI1LDcgQEAKIC8qIGFjY2VzcyBtYWNybyB0byB0aGUgbWVtYmVycyB3aGljaCBhcmUgZmxvYXRpbmcgImJlaGluZCIgdGhlIG9iamVjdCAqLwogI2RlZmluZSBQeUhlYXBUeXBlX0dFVF9NRU1CRVJTKGV0eXBlKSBcCiAgICAgKChQeU1lbWJlckRlZiAqKSgoKGNoYXIgKilldHlwZSkgKyBQeV9UWVBFKGV0eXBlKS0+dHBfYmFzaWNzaXplKSkKLQorI2VuZGlmCiAKIC8qIEdlbmVyaWMgdHlwZSBjaGVjayAqLwogUHlBUElfRlVOQyhpbnQpIFB5VHlwZV9Jc1N1YnR5cGUoUHlUeXBlT2JqZWN0ICosIFB5VHlwZU9iamVjdCAqKTsKQEAgLTQwNSw2ICs0MzYsOCBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5QmFzZU9iamVjdF9UeXBlOyAvKiBidWlsdC1pbiAnb2JqZWN0JyAqLwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U3VwZXJfVHlwZTsgLyogYnVpbHQtaW4gJ3N1cGVyJyAqLwogCitQeUFQSV9GVU5DKGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKKwogI2RlZmluZSBQeVR5cGVfQ2hlY2sob3ApIFwKICAgICBQeVR5cGVfRmFzdFN1YmNsYXNzKFB5X1RZUEUob3ApLCBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MpCiAjZGVmaW5lIFB5VHlwZV9DaGVja0V4YWN0KG9wKSAoUHlfVFlQRShvcCkgPT0gJlB5VHlwZV9UeXBlKQpAQCAtNDEzLDE1ICs0NDYsMTkgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlUeXBlX0dlbmVyaWNBbGxvYyhQeVR5cGVPYmplY3QgKiwgUHlfc3NpemVfdCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VHlwZV9HZW5lcmljTmV3KFB5VHlwZU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5VHlwZV9Mb29rdXAoUHlUeXBlT2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChQeU9iamVjdCAqLCBjaGFyICosIFB5T2JqZWN0ICoqKTsKKyNlbmRpZgogUHlBUElfRlVOQyh1bnNpZ25lZCBpbnQpIFB5VHlwZV9DbGVhckNhY2hlKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVR5cGVfTW9kaWZpZWQoUHlUeXBlT2JqZWN0ICopOwogCiAvKiBHZW5lcmljIG9wZXJhdGlvbnMgb24gb2JqZWN0cyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICosIEZJTEUgKiwgaW50KTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5X0JyZWFrUG9pbnQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EdW1wKFB5T2JqZWN0ICopOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X1JlcHIoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X1N0cihQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQVNDSUkoUHlPYmplY3QgKik7CkBAIC00MzQsMTQgKzQ3MSwxOCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9HZXRBdHRyKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X1NldEF0dHIoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfSGFzQXR0cihQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKiopIF9QeU9iamVjdF9HZXREaWN0UHRyKFB5T2JqZWN0ICopOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X1NlbGZJdGVyKFB5T2JqZWN0ICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfTmV4dE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICopOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyKFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKGxvbmcpIFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKGxvbmcpIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBQeU9iamVjdF9IYXNoKFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZChQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9Jc1RydWUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfTm90KFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIFB5Q2FsbGFibGVfQ2hlY2soUHlPYmplY3QgKik7CkBAIC00NzAsOCArNTExLDEwIEBACiBQeUFQSV9GVU5DKHZvaWQpIFB5X1JlcHJMZWF2ZShQeU9iamVjdCAqKTsKIAogLyogSGVscGVycyBmb3IgaGFzaCBmdW5jdGlvbnMgKi8KLVB5QVBJX0ZVTkMobG9uZykgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMobG9uZykgX1B5X0hhc2hQb2ludGVyKHZvaWQqKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaERvdWJsZShkb3VibGUpOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoUG9pbnRlcih2b2lkKik7CisjZW5kaWYKIAogLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZSAqLwogI2RlZmluZSBQeU9iamVjdF9SRVBSKG9iaikgX1B5VW5pY29kZV9Bc1N0cmluZyhQeU9iamVjdF9SZXByKG9iaikpCkBAIC01NDcsNyArNTkwLDExIEBACiAgICAgICAgICAgICAgICAgIFB5X1RQRkxBR1NfSEFWRV9WRVJTSU9OX1RBRyB8IFwKICAgICAgICAgICAgICAgICAwKQogCisjaWZkZWYgUHlfTElNSVRFRF9BUEkKKyNkZWZpbmUgUHlUeXBlX0hhc0ZlYXR1cmUodCxmKSAgKChQeVR5cGVfR2V0RmxhZ3ModCkgJiAoZikpICE9IDApCisjZWxzZQogI2RlZmluZSBQeVR5cGVfSGFzRmVhdHVyZSh0LGYpICAoKCh0KS0+dHBfZmxhZ3MgJiAoZikpICE9IDApCisjZW5kaWYKICNkZWZpbmUgUHlUeXBlX0Zhc3RTdWJjbGFzcyh0LGYpICBQeVR5cGVfSGFzRmVhdHVyZSh0LGYpCiAKIApAQCAtNjUwLDkgKzY5NywxMyBAQAogCiAjZGVmaW5lIF9QeV9Gb3JnZXRSZWZlcmVuY2Uob3ApIF9QeV9JTkNfVFBGUkVFUyhvcCkKIAorI2lmZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeV9EZWFsbG9jKFB5T2JqZWN0ICopOworI2Vsc2UKICNkZWZpbmUgX1B5X0RlYWxsb2Mob3ApICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9QeV9JTkNfVFBGUkVFUyhvcCkgX1B5X0NPVU5UX0FMTE9DU19DT01NQSAgICAgICAgICBcCiAgICAgKCpQeV9UWVBFKG9wKS0+dHBfZGVhbGxvYykoKFB5T2JqZWN0ICopKG9wKSkpCisjZW5kaWYKICNlbmRpZiAvKiAhUHlfVFJBQ0VfUkVGUyAqLwogCiAjZGVmaW5lIFB5X0lOQ1JFRihvcCkgKCAgICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9JbmNsdWRlL29iamltcGwuaCBiL0luY2x1ZGUvb2JqaW1wbC5oCmluZGV4IDZkNWEwYzQuLjhmYzNmYzEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqaW1wbC5oCisrKyBiL0luY2x1ZGUvb2JqaW1wbC5oCkBAIC0xMDgsNiArMTA4LDEzIEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwogUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MoY29uc3Qgdm9pZCAqcCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7CitQeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOworUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOworUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwogI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKICNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKQEAgLTIzNSwxMCArMjQyLDggQEAKICNkZWZpbmUgUHlPYmplY3RfR0NfUmVzaXplKHR5cGUsIG9wLCBuKSBcCiAgICAgICAgICAgICAgICAgKCAodHlwZSAqKSBfUHlPYmplY3RfR0NfUmVzaXplKChQeVZhck9iamVjdCAqKShvcCksIChuKSkgKQogCi0vKiBmb3Igc291cmNlIGNvbXBhdGliaWxpdHkgd2l0aCAyLjIgKi8KLSNkZWZpbmUgX1B5T2JqZWN0X0dDX0RlbCBQeU9iamVjdF9HQ19EZWwKLQogLyogR0MgaW5mb3JtYXRpb24gaXMgc3RvcmVkIEJFRk9SRSB0aGUgb2JqZWN0IHN0cnVjdHVyZS4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgdW5pb24gX2djX2hlYWQgewogICAgIHN0cnVjdCB7CiAgICAgICAgIHVuaW9uIF9nY19oZWFkICpnY19uZXh0OwpAQCAtMjkxLDcgKzI5Niw3IEBACiAjZGVmaW5lIF9QeU9iamVjdF9HQ19NQVlfQkVfVFJBQ0tFRChvYmopIFwKICAgICAoUHlPYmplY3RfSVNfR0Mob2JqKSAmJiBcCiAgICAgICAgICghUHlUdXBsZV9DaGVja0V4YWN0KG9iaikgfHwgX1B5T2JqZWN0X0dDX0lTX1RSQUNLRUQob2JqKSkpCi0KKyNlbmRpZiAvKiBQeV9MSU1JVEVEX0FQSSAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZV90KTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0dDX05ldyhQeVR5cGVPYmplY3QgKik7CkBAIC0zMjAsMTUgKzMyNSw2IEBACiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAotLyogVGhpcyBpcyBoZXJlIGZvciB0aGUgc2FrZSBvZiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIEV4dGVuc2lvbnMgdGhhdAotICogdXNlIHRoZSBvbGQgR0MgQVBJIHdpbGwgc3RpbGwgY29tcGlsZSBidXQgdGhlIG9iamVjdHMgd2lsbCBub3QgYmUKLSAqIHRyYWNrZWQgYnkgdGhlIEdDLiAqLwotI2RlZmluZSBQeUdDX0hFQURfU0laRSAwCi0jZGVmaW5lIFB5T2JqZWN0X0dDX0luaXQob3ApCi0jZGVmaW5lIFB5T2JqZWN0X0dDX0Zpbmkob3ApCi0jZGVmaW5lIFB5T2JqZWN0X0FTX0dDKG9wKSAob3ApCi0jZGVmaW5lIFB5T2JqZWN0X0ZST01fR0Mob3ApIChvcCkKLQogCiAvKiBUZXN0IGlmIGEgdHlwZSBzdXBwb3J0cyB3ZWFrIHJlZmVyZW5jZXMgKi8KICNkZWZpbmUgUHlUeXBlX1NVUFBPUlRTX1dFQUtSRUZTKHQpICgodCktPnRwX3dlYWtsaXN0b2Zmc2V0ID4gMCkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvb3Bjb2RlLmggYi9JbmNsdWRlL29wY29kZS5oCmluZGV4IDJiMWM1OWQuLjZiMTA5NDQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb3Bjb2RlLmgKKysrIGIvSW5jbHVkZS9vcGNvZGUuaApAQCAtMTIsNyArMTIsNyBAQAogI2RlZmluZSBST1RfVFdPCQkyCiAjZGVmaW5lIFJPVF9USFJFRQkzCiAjZGVmaW5lIERVUF9UT1AJCTQKLSNkZWZpbmUgUk9UX0ZPVVIJNQorI2RlZmluZSBEVVBfVE9QX1RXTyAgICAgNQogI2RlZmluZSBOT1AJCTkKIAogI2RlZmluZSBVTkFSWV9QT1NJVElWRQkxMApAQCAtODMsNyArODMsNyBAQAogI2RlZmluZSBERUxFVEVfQVRUUgk5NgkvKiAiIiAqLwogI2RlZmluZSBTVE9SRV9HTE9CQUwJOTcJLyogIiIgKi8KICNkZWZpbmUgREVMRVRFX0dMT0JBTAk5OAkvKiAiIiAqLwotI2RlZmluZSBEVVBfVE9QWAk5OQkvKiBudW1iZXIgb2YgaXRlbXMgdG8gZHVwbGljYXRlICovCisKICNkZWZpbmUgTE9BRF9DT05TVAkxMDAJLyogSW5kZXggaW4gY29uc3QgbGlzdCAqLwogI2RlZmluZSBMT0FEX05BTUUJMTAxCS8qIEluZGV4IGluIG5hbWUgbGlzdCAqLwogI2RlZmluZSBCVUlMRF9UVVBMRQkxMDIJLyogTnVtYmVyIG9mIHR1cGxlIGl0ZW1zICovCkBAIC0xMjMsNiArMTIzLDcgQEAKICNkZWZpbmUgTE9BRF9DTE9TVVJFICAgIDEzNSAgICAgLyogTG9hZCBmcmVlIHZhcmlhYmxlIGZyb20gY2xvc3VyZSAqLwogI2RlZmluZSBMT0FEX0RFUkVGICAgICAgMTM2ICAgICAvKiBMb2FkIGFuZCBkZXJlZmVyZW5jZSBmcm9tIGNsb3N1cmUgY2VsbCAqLyAKICNkZWZpbmUgU1RPUkVfREVSRUYgICAgIDEzNyAgICAgLyogU3RvcmUgaW50byBjZWxsICovIAorI2RlZmluZSBERUxFVEVfREVSRUYgICAgMTM4ICAgICAvKiBEZWxldGUgY2xvc3VyZSBjZWxsICovIAogCiAvKiBUaGUgbmV4dCAzIG9wY29kZXMgbXVzdCBiZSBjb250aWd1b3VzIGFuZCBzYXRpc2Z5CiAgICAoQ0FMTF9GVU5DVElPTl9WQVIgLSBDQUxMX0ZVTkNUSU9OKSAmIDMgPT0gMSAgKi8KQEAgLTEzMCw4ICsxMzEsMTAgQEAKICNkZWZpbmUgQ0FMTF9GVU5DVElPTl9LVyAgICAgICAgICAgMTQxCS8qICNhcmdzICsgKCNrd2FyZ3M8PDgpICovCiAjZGVmaW5lIENBTExfRlVOQ1RJT05fVkFSX0tXICAgICAgIDE0MgkvKiAjYXJncyArICgja3dhcmdzPDw4KSAqLwogCisjZGVmaW5lIFNFVFVQX1dJVEggMTQzCisKIC8qIFN1cHBvcnQgZm9yIG9wYXJncyBtb3JlIHRoYW4gMTYgYml0cyBsb25nICovCi0jZGVmaW5lIEVYVEVOREVEX0FSRyAgMTQzCisjZGVmaW5lIEVYVEVOREVEX0FSRyAgMTQ0CiAKICNkZWZpbmUgTElTVF9BUFBFTkQgICAgIDE0NQogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CmRpZmYgLS1naXQgYS9JbmNsdWRlL3BhcnNldG9rLmggYi9JbmNsdWRlL3BhcnNldG9rLmgKaW5kZXggYWY4MDU3MC4uNGI3Njk0ZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXJzZXRvay5oCisrKyBiL0luY2x1ZGUvcGFyc2V0b2suaApAQCAtMSw2ICsxLDYgQEAKIAogLyogUGFyc2VyLXRva2VuaXplciBsaW5rIGludGVyZmFjZSAqLwotCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X1BBUlNFVE9LX0gKICNkZWZpbmUgUHlfUEFSU0VUT0tfSAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC05LDEwICs5LDEwIEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBpbnQgZXJyb3I7Ci0gICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7ICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBsaW5lbm87CiAgICAgaW50IG9mZnNldDsKLSAgICBjaGFyICp0ZXh0OworICAgIGNoYXIgKnRleHQ7ICAgICAgICAgICAgICAgICAvKiBVVEYtOC1lbmNvZGVkIHN0cmluZyAqLwogICAgIGludCB0b2tlbjsKICAgICBpbnQgZXhwZWN0ZWQ7CiB9IHBlcnJkZXRhaWw7CkBAIC0zOSwyMyArMzksMzIgQEAKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosIAorUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLAogCQkJCQkgICBjb25zdCBjaGFyKiwgZ3JhbW1hciAqLAogCQkJCQkJIGludCwgY2hhciAqLCBjaGFyICosCiAJCQkJCQkgcGVycmRldGFpbCAqLCBpbnQpOwotUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCAqKTsKK1B5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAorICAgIEZJTEUgKmZwLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY2hhciAqcHMxLAorICAgIGNoYXIgKnBzMiwKKyAgICBwZXJyZGV0YWlsICplcnJfcmV0LAorICAgIGludCAqZmxhZ3MpOwogCiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKIAkJCQkJICAgICAgY29uc3QgY2hhciAqLAogCQkJCQkgICAgICBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgoY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBjb25zdCBjaGFyICosCi0JCQkJCSAgICAgIGdyYW1tYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKiwgaW50ICopOworUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CiAKIC8qIE5vdGUgdGhhdCBoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiBweXRob25ydW4uYyBub3QgcGFyc2V0b2suYy4gKi8KIFB5QVBJX0ZVTkModm9pZCkgUHlQYXJzZXJfU2V0RXJyb3IocGVycmRldGFpbCAqKTsKQEAgLTY0LDMgKzczLDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9QQVJTRVRPS19IICovCisjZW5kaWYgLyogIVB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3BhdGNobGV2ZWwuaCBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCmluZGV4IDU4YTc5ZmUuLmU2YTQ5MDIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCisrKyBiL0luY2x1ZGUvcGF0Y2hsZXZlbC5oCkBAIC0xNywxMyArMTcsMTMgQEAKIC8qIFZlcnNpb24gcGFyc2VkIG91dCBpbnRvIG51bWVyaWMgdmFsdWVzICovCiAvKi0tc3RhcnQgY29uc3RhbnRzLS0qLwogI2RlZmluZSBQWV9NQUpPUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlOT1JfVkVSU0lPTgkxCi0jZGVmaW5lIFBZX01JQ1JPX1ZFUlNJT04JMworI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTIKKyNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgkwCiAjZGVmaW5lIFBZX1JFTEVBU0VfTEVWRUwJUFlfUkVMRUFTRV9MRVZFTF9GSU5BTAogI2RlZmluZSBQWV9SRUxFQVNFX1NFUklBTAkwCiAKIC8qIFZlcnNpb24gYXMgYSBzdHJpbmcgKi8KLSNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy4xLjMrIgorI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjIuMWEwIgogLyotLWVuZCBjb25zdGFudHMtLSovCiAKIC8qIFN1YnZlcnNpb24gUmV2aXNpb24gbnVtYmVyIG9mIHRoaXMgZmlsZSAobm90IG9mIHRoZSByZXBvc2l0b3J5KS4gRW1wdHkKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlhcmVuYS5oIGIvSW5jbHVkZS9weWFyZW5hLmgKaW5kZXggNWYxOTNmZS4uZGIzYWQwMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weWFyZW5hLmgKKysrIGIvSW5jbHVkZS9weWFyZW5hLmgKQEAgLTEsNiArMSw3IEBACiAvKiBBbiBhcmVuYS1saWtlIG1lbW9yeSBpbnRlcmZhY2UgZm9yIHRoZSBjb21waWxlci4KICAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZuZGVmIFB5X1BZQVJFTkFfSAogI2RlZmluZSBQeV9QWUFSRU5BX0gKIApAQCAtNjAsMyArNjEsNCBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiAhUHlfUFlBUkVOQV9IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlhdG9taWMuaCBiL0luY2x1ZGUvcHlhdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDAyOGZkCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weWF0b21pYy5oCkBAIC0wLDAgKzEsMTgxIEBACisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisjaWZuZGVmIFB5X0FUT01JQ19ICisjZGVmaW5lIFB5X0FUT01JQ19ICisvKiBYWFg6IFdoZW4gY29tcGlsZXJzIHN0YXJ0IG9mZmVyaW5nIGEgc3RkYXRvbWljLmggd2l0aCBsb2NrLWZyZWUKKyAgIGF0b21pY19pbnQgYW5kIGF0b21pY19hZGRyZXNzIHR5cGVzLCBpbmNsdWRlIHRoYXQgaGVyZSBhbmQgcmV3cml0ZQorICAgdGhlIGF0b21pYyBvcGVyYXRpb25zIGluIHRlcm1zIG9mIGl0LiAqLworCisjaW5jbHVkZSAiZHluYW1pY19hbm5vdGF0aW9ucy5oIgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoaXMgaXMgbW9kZWxlZCBhZnRlciB0aGUgYXRvbWljcyBpbnRlcmZhY2UgZnJvbSBDMXgsIGFjY29yZGluZyB0bworICogdGhlIGRyYWZ0IGF0CisgKiBodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9KVEMxL1NDMjIvd2cxNC93d3cvZG9jcy9uMTQyNS5wZGYuCisgKiBPcGVyYXRpb25zIGFuZCB0eXBlcyBhcmUgbmFtZWQgdGhlIHNhbWUgZXhjZXB0IHdpdGggYSBfUHlfIHByZWZpeAorICogYW5kIGhhdmUgdGhlIHNhbWUgc2VtYW50aWNzLgorICoKKyAqIEJld2FyZSwgdGhlIGltcGxlbWVudGF0aW9ucyBoZXJlIGFyZSBkZWVwIG1hZ2ljLgorICovCisKK3R5cGVkZWYgZW51bSBfUHlfbWVtb3J5X29yZGVyIHsKKyAgICBfUHlfbWVtb3J5X29yZGVyX3JlbGF4ZWQsCisgICAgX1B5X21lbW9yeV9vcmRlcl9hY3F1aXJlLAorICAgIF9QeV9tZW1vcnlfb3JkZXJfcmVsZWFzZSwKKyAgICBfUHlfbWVtb3J5X29yZGVyX2FjcV9yZWwsCisgICAgX1B5X21lbW9yeV9vcmRlcl9zZXFfY3N0Cit9IF9QeV9tZW1vcnlfb3JkZXI7CisKK3R5cGVkZWYgc3RydWN0IF9QeV9hdG9taWNfYWRkcmVzcyB7CisgICAgdm9pZCAqX3ZhbHVlOworfSBfUHlfYXRvbWljX2FkZHJlc3M7CisKK3R5cGVkZWYgc3RydWN0IF9QeV9hdG9taWNfaW50IHsKKyAgICBpbnQgX3ZhbHVlOworfSBfUHlfYXRvbWljX2ludDsKKworLyogT25seSBzdXBwb3J0IEdDQyAoZm9yIGV4cHJlc3Npb24gc3RhdGVtZW50cykgYW5kIHg4NiAoZm9yIHNpbXBsZQorICogYXRvbWljIHNlbWFudGljcykgZm9yIG5vdyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYW1kNjQpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitfUHlfYXRvbWljX3NpZ25hbF9mZW5jZShfUHlfbWVtb3J5X29yZGVyIG9yZGVyKQoreworICAgIGlmIChvcmRlciAhPSBfUHlfbWVtb3J5X29yZGVyX3JlbGF4ZWQpCisgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoIiI6OjoibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19QeV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9QeV9tZW1vcnlfb3JkZXIgb3JkZXIpCit7CisgICAgaWYgKG9yZGVyICE9IF9QeV9tZW1vcnlfb3JkZXJfcmVsYXhlZCkKKyAgICAgICAgX19hc21fXyB2b2xhdGlsZSgibWZlbmNlIjo6OiJtZW1vcnkiKTsKK30KKworLyogVGVsbCB0aGUgcmFjZSBjaGVja2VyIGFib3V0IHRoaXMgb3BlcmF0aW9uJ3MgZWZmZWN0cy4gKi8KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQKK19QeV9BTk5PVEFURV9NRU1PUllfT1JERVIoY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcmVzcywgX1B5X21lbW9yeV9vcmRlciBvcmRlcikKK3sKKyAgICBzd2l0Y2gob3JkZXIpIHsKKyAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfcmVsZWFzZToKKyAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfYWNxX3JlbDoKKyAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfc2VxX2NzdDoKKyAgICAgICAgX1B5X0FOTk9UQVRFX0hBUFBFTlNfQkVGT1JFKGFkZHJlc3MpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgc3dpdGNoKG9yZGVyKSB7CisgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmU6CisgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX2FjcV9yZWw6CisgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX3NlcV9jc3Q6CisgICAgICAgIF9QeV9BTk5PVEFURV9IQVBQRU5TX0FGVEVSKGFkZHJlc3MpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cit9CisKKyNkZWZpbmUgX1B5X2F0b21pY19zdG9yZV9leHBsaWNpdChBVE9NSUNfVkFMLCBORVdfVkFMLCBPUkRFUikgXAorICAgIF9fZXh0ZW5zaW9uX18gKHsgXAorICAgICAgICBfX3R5cGVvZl9fKEFUT01JQ19WQUwpIGF0b21pY192YWwgPSBBVE9NSUNfVkFMOyBcCisgICAgICAgIF9fdHlwZW9mX18oYXRvbWljX3ZhbC0+X3ZhbHVlKSBuZXdfdmFsID0gTkVXX1ZBTDtcCisgICAgICAgIHZvbGF0aWxlIF9fdHlwZW9mX18obmV3X3ZhbCkgKnZvbGF0aWxlX2RhdGEgPSAmYXRvbWljX3ZhbC0+X3ZhbHVlOyBcCisgICAgICAgIF9QeV9tZW1vcnlfb3JkZXIgb3JkZXIgPSBPUkRFUjsgXAorICAgICAgICBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSKGF0b21pY192YWwsIG9yZGVyKTsgXAorICAgICAgICBcCisgICAgICAgIC8qIFBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gKi8gXAorICAgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1dSSVRFU19CRUdJTigpOyBcCisgICAgICAgIHN3aXRjaChvcmRlcikgeyBcCisgICAgICAgIGNhc2UgX1B5X21lbW9yeV9vcmRlcl9yZWxlYXNlOiBcCisgICAgICAgICAgICBfUHlfYXRvbWljX3NpZ25hbF9mZW5jZShfUHlfbWVtb3J5X29yZGVyX3JlbGVhc2UpOyBcCisgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLyBcCisgICAgICAgIGNhc2UgX1B5X21lbW9yeV9vcmRlcl9yZWxheGVkOiBcCisgICAgICAgICAgICAqdm9sYXRpbGVfZGF0YSA9IG5ld192YWw7IFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmU6IFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX2FjcV9yZWw6IFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX3NlcV9jc3Q6IFwKKyAgICAgICAgICAgIF9fYXNtX18gdm9sYXRpbGUoInhjaGcgJTAsICUxIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAiK3IiKG5ld192YWwpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIihhdG9taWNfdmFsLT5fdmFsdWUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsgXAorICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICAgIF9QeV9BTk5PVEFURV9JR05PUkVfV1JJVEVTX0VORCgpOyBcCisgICAgfSkKKworI2RlZmluZSBfUHlfYXRvbWljX2xvYWRfZXhwbGljaXQoQVRPTUlDX1ZBTCwgT1JERVIpIFwKKyAgICBfX2V4dGVuc2lvbl9fICh7ICBcCisgICAgICAgIF9fdHlwZW9mX18oQVRPTUlDX1ZBTCkgYXRvbWljX3ZhbCA9IEFUT01JQ19WQUw7IFwKKyAgICAgICAgX190eXBlb2ZfXyhhdG9taWNfdmFsLT5fdmFsdWUpIHJlc3VsdDsgXAorICAgICAgICB2b2xhdGlsZSBfX3R5cGVvZl9fKHJlc3VsdCkgKnZvbGF0aWxlX2RhdGEgPSAmYXRvbWljX3ZhbC0+X3ZhbHVlOyBcCisgICAgICAgIF9QeV9tZW1vcnlfb3JkZXIgb3JkZXIgPSBPUkRFUjsgXAorICAgICAgICBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSKGF0b21pY192YWwsIG9yZGVyKTsgXAorICAgICAgICBcCisgICAgICAgIC8qIFBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gKi8gXAorICAgICAgICBfUHlfQU5OT1RBVEVfSUdOT1JFX1JFQURTX0JFR0lOKCk7IFwKKyAgICAgICAgc3dpdGNoKG9yZGVyKSB7IFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX3JlbGVhc2U6IFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX2FjcV9yZWw6IFwKKyAgICAgICAgY2FzZSBfUHlfbWVtb3J5X29yZGVyX3NlcV9jc3Q6IFwKKyAgICAgICAgICAgIC8qIExvYWRzIG9uIHg4NiBhcmUgbm90IHJlbGVhc2VzIGJ5IGRlZmF1bHQsIHNvIG5lZWQgYSAqLyBcCisgICAgICAgICAgICAvKiB0aHJlYWQgZmVuY2UuICovIFwKKyAgICAgICAgICAgIF9QeV9hdG9taWNfdGhyZWFkX2ZlbmNlKF9QeV9tZW1vcnlfb3JkZXJfcmVsZWFzZSk7IFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIGRlZmF1bHQ6IFwKKyAgICAgICAgICAgIC8qIE5vIGZlbmNlICovIFwKKyAgICAgICAgICAgIGJyZWFrOyBcCisgICAgICAgIH0gXAorICAgICAgICByZXN1bHQgPSAqdm9sYXRpbGVfZGF0YTsgXAorICAgICAgICBzd2l0Y2gob3JkZXIpIHsgXAorICAgICAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfYWNxdWlyZTogXAorICAgICAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfYWNxX3JlbDogXAorICAgICAgICBjYXNlIF9QeV9tZW1vcnlfb3JkZXJfc2VxX2NzdDogXAorICAgICAgICAgICAgLyogTG9hZHMgb24geDg2IGFyZSBhdXRvbWF0aWNhbGx5IGFjcXVpcmUgb3BlcmF0aW9ucyBzbyAqLyBcCisgICAgICAgICAgICAvKiBjYW4gZ2V0IGJ5IHdpdGgganVzdCBhIGNvbXBpbGVyIGZlbmNlLiAqLyBcCisgICAgICAgICAgICBfUHlfYXRvbWljX3NpZ25hbF9mZW5jZShfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmUpOyBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICBkZWZhdWx0OiBcCisgICAgICAgICAgICAvKiBObyBmZW5jZSAqLyBcCisgICAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICAgICAgX1B5X0FOTk9UQVRFX0lHTk9SRV9SRUFEU19FTkQoKTsgXAorICAgICAgICByZXN1bHQ7IFwKKyAgICB9KQorCisjZWxzZSAgLyogIWdjYyB4ODYgKi8KKy8qIEZhbGwgYmFjayB0byBvdGhlciBjb21waWxlcnMgYW5kIHByb2Nlc3NvcnMgYnkgYXNzdW1pbmcgdGhhdCBzaW1wbGUKKyAgIHZvbGF0aWxlIGFjY2Vzc2VzIGFyZSBhdG9taWMuICBUaGlzIGlzIGZhbHNlLCBzbyBwZW9wbGUgc2hvdWxkIHBvcnQKKyAgIHRoaXMuICovCisjZGVmaW5lIF9QeV9hdG9taWNfc2lnbmFsX2ZlbmNlKC8qbWVtb3J5X29yZGVyKi8gT1JERVIpICgodm9pZCkwKQorI2RlZmluZSBfUHlfYXRvbWljX3RocmVhZF9mZW5jZSgvKm1lbW9yeV9vcmRlciovIE9SREVSKSAoKHZvaWQpMCkKKyNkZWZpbmUgX1B5X2F0b21pY19zdG9yZV9leHBsaWNpdChBVE9NSUNfVkFMLCBORVdfVkFMLCBPUkRFUikgXAorICAgICgoQVRPTUlDX1ZBTCktPl92YWx1ZSA9IE5FV19WQUwpCisjZGVmaW5lIF9QeV9hdG9taWNfbG9hZF9leHBsaWNpdChBVE9NSUNfVkFMLCBPUkRFUikgXAorICAgICgoQVRPTUlDX1ZBTCktPl92YWx1ZSkKKworI2VuZGlmICAvKiAhZ2NjIHg4NiAqLworCisvKiBTdGFuZGFyZGl6ZWQgc2hvcnRjdXRzLiAqLworI2RlZmluZSBfUHlfYXRvbWljX3N0b3JlKEFUT01JQ19WQUwsIE5FV19WQUwpIFwKKyAgICBfUHlfYXRvbWljX3N0b3JlX2V4cGxpY2l0KEFUT01JQ19WQUwsIE5FV19WQUwsIF9QeV9tZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgX1B5X2F0b21pY19sb2FkKEFUT01JQ19WQUwpIFwKKyAgICBfUHlfYXRvbWljX2xvYWRfZXhwbGljaXQoQVRPTUlDX1ZBTCwgX1B5X21lbW9yeV9vcmRlcl9zZXFfY3N0KQorCisvKiBQeXRob24tbG9jYWwgZXh0ZW5zaW9ucyAqLworCisjZGVmaW5lIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZChBVE9NSUNfVkFMLCBORVdfVkFMKSBcCisgICAgX1B5X2F0b21pY19zdG9yZV9leHBsaWNpdChBVE9NSUNfVkFMLCBORVdfVkFMLCBfUHlfbWVtb3J5X29yZGVyX3JlbGF4ZWQpCisjZGVmaW5lIF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKEFUT01JQ19WQUwpIFwKKyAgICBfUHlfYXRvbWljX2xvYWRfZXhwbGljaXQoQVRPTUlDX1ZBTCwgX1B5X21lbW9yeV9vcmRlcl9yZWxheGVkKQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgIC8qIFB5X0FUT01JQ19IICovCisjZW5kaWYgIC8qIFB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5Y2Fwc3VsZS5oIGIvSW5jbHVkZS9weWNhcHN1bGUuaAppbmRleCBlYmE4MmVlLi5kOWVjZGE3IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5Y2Fwc3VsZS5oCisrKyBiL0luY2x1ZGUvcHljYXBzdWxlLmgKQEAgLTQ4LDcgKzQ4LDkgQEAKIAogUHlBUElfRlVOQyhpbnQpIFB5Q2Fwc3VsZV9TZXRDb250ZXh0KFB5T2JqZWN0ICpjYXBzdWxlLCB2b2lkICpjb250ZXh0KTsKIAotUHlBUElfRlVOQyh2b2lkICopIFB5Q2Fwc3VsZV9JbXBvcnQoY29uc3QgY2hhciAqbmFtZSwgaW50IG5vX2Jsb2NrKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeUNhcHN1bGVfSW1wb3J0KAorICAgIGNvbnN0IGNoYXIgKm5hbWUsICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGludCBub19ibG9jayk7CiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5Y3R5cGUuaCBiL0luY2x1ZGUvcHljdHlwZS5oCmluZGV4IGM1Y2M2MTQuLjc4N2MxYjkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHljdHlwZS5oCisrKyBiL0luY2x1ZGUvcHljdHlwZS5oCkBAIC0xLDMgKzEsNCBAQAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQWUNUWVBFX0gKICNkZWZpbmUgUFlDVFlQRV9ICiAKQEAgLTI5LDMgKzMwLDQgQEAKICNkZWZpbmUgUHlfVE9VUFBFUihjKSAoX1B5X2N0eXBlX3RvdXBwZXJbUHlfQ0hBUk1BU0soYyldKQogCiAjZW5kaWYgLyogIVBZQ1RZUEVfSCAqLworI2VuZGlmIC8qICFQeV9MSU1JVEVEX0FQSSAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWRlYnVnLmggYi9JbmNsdWRlL3B5ZGVidWcuaAppbmRleCAwYTMxZjViLi43MGM4OGY2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZGVidWcuaAorKysgYi9JbmNsdWRlL3B5ZGVidWcuaApAQCAtMSw0ICsxLDQgQEAKLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9QWURFQlVHX0gKICNkZWZpbmUgUHlfUFlERUJVR19ICiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTcsNiArNyw3IEBACiAKIFB5QVBJX0RBVEEoaW50KSBQeV9EZWJ1Z0ZsYWc7CiBQeUFQSV9EQVRBKGludCkgUHlfVmVyYm9zZUZsYWc7CitQeUFQSV9EQVRBKGludCkgUHlfUXVpZXRGbGFnOwogUHlBUElfREFUQShpbnQpIFB5X0ludGVyYWN0aXZlRmxhZzsKIFB5QVBJX0RBVEEoaW50KSBQeV9JbnNwZWN0RmxhZzsKIFB5QVBJX0RBVEEoaW50KSBQeV9PcHRpbWl6ZUZsYWc7CkBAIC0zMSwzICszMiw0IEBACiB9CiAjZW5kaWYKICNlbmRpZiAvKiAhUHlfUFlERUJVR19IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHllcnJvcnMuaCBiL0luY2x1ZGUvcHllcnJvcnMuaAppbmRleCAzYzNhZmFiLi40YmIzYzAxIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZXJyb3JzLmgKKysrIGIvSW5jbHVkZS9weWVycm9ycy5oCkBAIC02LDYgKzYsNyBAQAogCiAvKiBFcnJvciBvYmplY3RzICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIFB5RXhjZXB0aW9uX0hFQUQgZGVmaW5lcyB0aGUgaW5pdGlhbCBzZWdtZW50IG9mIGV2ZXJ5IGV4Y2VwdGlvbiBjbGFzcy4gKi8KICNkZWZpbmUgUHlFeGNlcHRpb25fSEVBRCBQeU9iamVjdF9IRUFEIFB5T2JqZWN0ICpkaWN0O1wKICAgICAgICAgICAgICBQeU9iamVjdCAqYXJnczsgUHlPYmplY3QgKnRyYWNlYmFjaztcCkBAIC01NSwxOCArNTYsMjMgQEAKICAgICBQeU9iamVjdCAqd2luZXJyb3I7CiB9IFB5V2luZG93c0Vycm9yT2JqZWN0OwogI2VuZGlmCisjZW5kaWYKIAogLyogRXJyb3IgaGFuZGxpbmcgZGVmaW5pdGlvbnMgKi8KIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXROb25lKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldFN0cmluZyhQeU9iamVjdCAqLCBjb25zdCBjaGFyICopOworUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKKyAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KKyAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9PY2N1cnJlZCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfQ2xlYXIodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX0ZldGNoKFB5T2JqZWN0ICoqLCBQeU9iamVjdCAqKiwgUHlPYmplY3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9SZXN0b3JlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyh2b2lkKSBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCi0jaWZkZWYgUHlfREVCVUcKKyNpZiBkZWZpbmVkKFB5X0RFQlVHKSB8fCBkZWZpbmVkKFB5X0xJTUlURURfQVBJKQogI2RlZmluZSBfUHlFcnJfT0NDVVJSRUQoKSBQeUVycl9PY2N1cnJlZCgpCiAjZWxzZQogI2RlZmluZSBfUHlFcnJfT0NDVVJSRUQoKSAoX1B5VGhyZWFkU3RhdGVfQ3VycmVudC0+Y3VyZXhjX3R5cGUpCkBAIC0xNjYsNiArMTcyLDcgQEAKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfSW1wb3J0V2FybmluZzsKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfVW5pY29kZVdhcm5pbmc7CiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX0J5dGVzV2FybmluZzsKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgUHlFeGNfUmVzb3VyY2VXYXJuaW5nOwogCiAKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9ucyAqLwpAQCAtMTc1LDI4ICsxODIsNDUgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqLCBjb25zdCBjaGFyICopOwotI2lmZGVmIE1TX1dJTkRPV1MKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKAorICAgIFB5T2JqZWN0ICpleGMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJub1dpdGhVbmljb2RlRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKiwgY29uc3QgUHlfVU5JQ09ERSAqKTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfRm9ybWF0KFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfRm9ybWF0KAorICAgIFB5T2JqZWN0ICpleGNlcHRpb24sCisgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLworICAgIC4uLgorICAgICk7CiAKICNpZmRlZiBNU19XSU5ET1dTCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIGludCwgY29uc3QgY2hhciAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCi0gICAgaW50LCBjb25zdCBjaGFyICopOworICAgIGludCBpZXJyLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogWFhYIHJlZGVjbGFyZSB0byB1c2UgV1NUUklORyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhVbmljb2RlRmlsZW5hbWUoCiAgICAgaW50LCBjb25zdCBQeV9VTklDT0RFICopOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCi0gICAgUHlPYmplY3QgKixpbnQsIGNvbnN0IGNoYXIgKik7CisgICAgUHlPYmplY3QgKmV4YywKKyAgICBpbnQgaWVyciwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoVW5pY29kZUZpbGVuYW1lKAogICAgIFB5T2JqZWN0ICosaW50LCBjb25zdCBQeV9VTklDT0RFICopOworI2VuZGlmCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5T2JqZWN0ICosIGludCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCkBAIC0yMDgsOCArMjMyLDEwIEBACiAjZGVmaW5lIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpIF9QeUVycl9CYWRJbnRlcm5hbENhbGwoX19GSUxFX18sIF9fTElORV9fKQogCiAvKiBGdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgZXhjZXB0aW9uICovCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX05ld0V4Y2VwdGlvbihjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRpY3QpOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9OZXdFeGNlcHRpb24oCisgICAgY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYygKKyAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqKTsKIAogLyogSW4gc2lnY2hlY2suYyBvciBzaWduYWxtb2R1bGUuYyAqLwpAQCAtMjE3LDI2ICsyNDMsNTcgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU2V0SW50ZXJydXB0KHZvaWQpOwogCiAvKiBJbiBzaWduYWxtb2R1bGUuYyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogaW50IFB5U2lnbmFsX1NldFdha2V1cEZkKGludCBmZCk7CisjZW5kaWYKIAogLyogU3VwcG9ydCBmb3IgYWRkaW5nIHByb2dyYW0gdGV4dCB0byBTeW50YXhFcnJvcnMgKi8KLVB5QVBJX0ZVTkModm9pZCkgUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqLCBpbnQpOwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dChjb25zdCBjaGFyICosIGludCk7CitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uKAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBpbnQgbGluZW5vKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlFcnJfU3ludGF4TG9jYXRpb25FeCgKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgaW50IGxpbmVubywKKyAgICBpbnQgY29sX29mZnNldCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0KAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBpbnQgbGluZW5vKTsKIAogLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gY3JlYXRlIGFuZCBtb2RpZnkgdW5pY29kZQogICAgZXhjZXB0aW9ucyBmcm9tIEMgKi8KIAogLyogY3JlYXRlIGEgVW5pY29kZURlY29kZUVycm9yIG9iamVjdCAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUoCi0gICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIGNvbnN0IGNoYXIgKik7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqb2JqZWN0LAorICAgIFB5X3NzaXplX3QgbGVuZ3RoLAorICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQsCisgICAgY29uc3QgY2hhciAqcmVhc29uICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKIAogLyogY3JlYXRlIGEgVW5pY29kZUVuY29kZUVycm9yIG9iamVjdCAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9DcmVhdGUoCi0gICAgY29uc3QgY2hhciAqLCBjb25zdCBQeV9VTklDT0RFICosIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIGNvbnN0IGNoYXIgKik7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LAorICAgIFB5X3NzaXplX3QgbGVuZ3RoLAorICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQsCisgICAgY29uc3QgY2hhciAqcmVhc29uICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKKyNlbmRpZgogCiAvKiBjcmVhdGUgYSBVbmljb2RlVHJhbnNsYXRlRXJyb3Igb2JqZWN0ICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZSgKLSAgICBjb25zdCBQeV9VTklDT0RFICosIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIFB5X3NzaXplX3QsIGNvbnN0IGNoYXIgKik7CisgICAgY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LAorICAgIFB5X3NzaXplX3QgbGVuZ3RoLAorICAgIFB5X3NzaXplX3Qgc3RhcnQsCisgICAgUHlfc3NpemVfdCBlbmQsCisgICAgY29uc3QgY2hhciAqcmVhc29uICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKKyNlbmRpZgogCiAvKiBnZXQgdGhlIGVuY29kaW5nIGF0dHJpYnV0ZSAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhQeU9iamVjdCAqKTsKQEAgLTI3OSwxMSArMzM2LDE3IEBACiAvKiBhc3NpZ24gYSBuZXcgdmFsdWUgdG8gdGhlIHJlYXNvbiBhdHRyaWJ1dGUKICAgIHJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24oCi0gICAgUHlPYmplY3QgKiwgY29uc3QgY2hhciAqKTsKKyAgICBQeU9iamVjdCAqZXhjLAorICAgIGNvbnN0IGNoYXIgKnJlYXNvbiAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgICk7CiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uKAotICAgIFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKik7CisgICAgUHlPYmplY3QgKmV4YywKKyAgICBjb25zdCBjaGFyICpyZWFzb24gICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICApOwogUHlBUElfRlVOQyhpbnQpIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbigKLSAgICBQeU9iamVjdCAqLCBjb25zdCBjaGFyICopOworICAgIFB5T2JqZWN0ICpleGMsCisgICAgY29uc3QgY2hhciAqcmVhc29uICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKIAogCiAvKiBUaGVzZSBBUElzIGFyZW4ndCByZWFsbHkgcGFydCBvZiB0aGUgZXJyb3IgaW1wbGVtZW50YXRpb24sIGJ1dApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWdldG9wdC5oIGIvSW5jbHVkZS9weWdldG9wdC5oCmluZGV4IDE5ZTNmZDEuLjRkZThjMDAgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlnZXRvcHQuaAorKysgYi9JbmNsdWRlL3B5Z2V0b3B0LmgKQEAgLTUsOSArNSwxMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfREFUQShpbnQpIF9QeU9TX29wdGVycjsKIFB5QVBJX0RBVEEoaW50KSBfUHlPU19vcHRpbmQ7CiBQeUFQSV9EQVRBKHdjaGFyX3QgKikgX1B5T1Nfb3B0YXJnOworI2VuZGlmCiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlPU19HZXRPcHQoaW50IGFyZ2MsIHdjaGFyX3QgKiphcmd2LCB3Y2hhcl90ICpvcHRzdHJpbmcpOwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjY29uZmlnLmggYi9JbmNsdWRlL3B5bWFjY29uZmlnLmgKaW5kZXggOWRkOTMxNy4uMjRlN2I4ZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hY2NvbmZpZy5oCisrKyBiL0luY2x1ZGUvcHltYWNjb25maWcuaApAQCAtMTYsNiArMTYsOCBAQAogIyB1bmRlZiBTSVpFT0ZfVElNRV9UCiAjIHVuZGVmIFNJWkVPRl9WT0lEX1AKICMgdW5kZWYgU0laRU9GX19CT09MCisjIHVuZGVmIFNJWkVPRl9VSU5UUFRSX1QKKyMgdW5kZWYgU0laRU9GX1BUSFJFQURfVAogIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KICMgdW5kZWYgRE9VQkxFX0lTX0FSTV9NSVhFRF9FTkRJQU5fSUVFRTc1NAogIyB1bmRlZiBET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0CkBAIC00MSw2ICs0Myw4IEBACiAjICAgICAgICBkZWZpbmUgU0laRU9GX1NJWkVfVCAgICAgICAgICAgOAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9USU1FX1QgICAgICAgICAgIDgKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICA4CisjICAgICAgICBkZWZpbmUgU0laRU9GX1VJTlRQVFJfVCAgICAgICAgOAorIyAgICAgICAgZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgICAgICAgIDgKICMgICAgZWxzZQogIyAgICAgICAgaWZkZWYgX19wcGNfXwogIyAgICAgICAgICAgZGVmaW5lIFNJWkVPRl9fQk9PTCAgICAgICAgIDQKQEAgLTUyLDYgKzU2LDggQEAKICMgICAgICAgIGRlZmluZSBTSVpFT0ZfU0laRV9UICAgICAgICAgICA0CiAjICAgICAgICBkZWZpbmUgU0laRU9GX1RJTUVfVCAgICAgICAgICAgNAogIyAgICAgICAgZGVmaW5lIFNJWkVPRl9WT0lEX1AgICAgICAgICAgIDQKKyMgICAgICAgIGRlZmluZSBTSVpFT0ZfVUlOVFBUUl9UICAgICAgICA0CisjICAgICAgICBkZWZpbmUgU0laRU9GX1BUSFJFQURfVCAgICAgICAgNAogIyAgICBlbmRpZgogCiAjICAgIGlmIGRlZmluZWQoX19MUDY0X18pCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWF0aC5oIGIvSW5jbHVkZS9weW1hdGguaAppbmRleCBkYzJjNDI3Li5iNGVkYTY2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5bWF0aC5oCisrKyBiL0luY2x1ZGUvcHltYXRoLmgKQEAgLTgsOSArOCw5IEBACiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFB5dGhvbiBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvcHlzaWduLCBhY29zaCwgYXNpbmgsIGF0YW5oLCAKLSAqIGxvZzFwIGFuZCBoeXBvdCBpbiBQeXRob24vcHltYXRoLmMganVzdCBpbiBjYXNlIHlvdXIgbWF0aCBsaWJyYXJ5IGRvZXNuJ3QKLSAqIHByb3ZpZGUgdGhlIGZ1bmN0aW9ucy4KKy8qIFB5dGhvbiBwcm92aWRlcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGNvcHlzaWduLCByb3VuZCBhbmQgaHlwb3QgaW4KKyAqIFB5dGhvbi9weW1hdGguYyBqdXN0IGluIGNhc2UgeW91ciBtYXRoIGxpYnJhcnkgZG9lc24ndCBwcm92aWRlIHRoZQorICogZnVuY3Rpb25zLgogICoKICAqTm90ZTogUEMvcHljb25maWcuaCBkZWZpbmVzIGNvcHlzaWduIGFzIF9jb3B5c2lnbgogICovCkBAIC0yMiwyMiArMjIsNiBAQAogZXh0ZXJuIGRvdWJsZSByb3VuZChkb3VibGUpOwogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9BQ09TSAotZXh0ZXJuIGRvdWJsZSBhY29zaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9BU0lOSAotZXh0ZXJuIGRvdWJsZSBhc2luaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9BVEFOSAotZXh0ZXJuIGRvdWJsZSBhdGFuaChkb3VibGUpOwotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9MT0cxUAotZXh0ZXJuIGRvdWJsZSBsb2cxcChkb3VibGUpOwotI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9IWVBPVAogZXh0ZXJuIGRvdWJsZSBoeXBvdChkb3VibGUsIGRvdWJsZSk7CiAjZW5kaWYKQEAgLTgzLDYgKzY3LDcgQEAKICAgIG5vdGhpbmcuICovCiAKIC8qIHdlIHRha2UgZG91YmxlIHJvdW5kaW5nIGFzIGV2aWRlbmNlIG9mIHg4NyB1c2FnZSAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9GT1JDRV9ET1VCTEUKICMgIGlmZGVmIFg4N19ET1VCTEVfUk9VTkRJTkcKIFB5QVBJX0ZVTkMoZG91YmxlKSBfUHlfZm9yY2VfZG91YmxlKGRvdWJsZSk7CkBAIC05MSwxMSArNzYsMTQgQEAKICMgICAgZGVmaW5lIFB5X0ZPUkNFX0RPVUJMRShYKSAoWCkKICMgIGVuZGlmCiAjZW5kaWYKKyNlbmRpZgogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjaWZkZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKIFB5QVBJX0ZVTkModW5zaWduZWQgc2hvcnQpIF9QeV9nZXRfMzg3Y29udHJvbHdvcmQodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIF9QeV9zZXRfMzg3Y29udHJvbHdvcmQodW5zaWduZWQgc2hvcnQpOwogI2VuZGlmCisjZW5kaWYKIAogLyogUHlfSVNfTkFOKFgpCiAgKiBSZXR1cm4gMSBpZiBmbG9hdCBvciBkb3VibGUgYXJnIGlzIGEgTmFOLCBlbHNlIDAuCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggYzg4MDFiYi4uMTBiNWJlYSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtNTksOSArNTksOSBAQAogLyogTWFjcm9zLiAqLwogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCiAvKiBSZWRpcmVjdCBhbGwgbWVtb3J5IG9wZXJhdGlvbnMgdG8gUHl0aG9uJ3MgZGVidWdnaW5nIGFsbG9jYXRvci4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DCQlQeU9iamVjdF9NQUxMT0MKLSNkZWZpbmUgUHlNZW1fUkVBTExPQwkJUHlPYmplY3RfUkVBTExPQwotI2RlZmluZSBQeU1lbV9GUkVFCQlQeU9iamVjdF9GUkVFCisjZGVmaW5lIFB5TWVtX01BTExPQwkJX1B5TWVtX0RlYnVnTWFsbG9jCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MJCV9QeU1lbV9EZWJ1Z1JlYWxsb2MKKyNkZWZpbmUgUHlNZW1fRlJFRQkJX1B5TWVtX0RlYnVnRnJlZQogCiAjZWxzZQkvKiAhIFBZTUFMTE9DX0RFQlVHICovCiAKQEAgLTcxLDkgKzcxLDkgQEAKICAgIHB5bWFsbG9jLiBUbyBzb2x2ZSB0aGVzZSBwcm9ibGVtcywgYWxsb2NhdGUgYW4gZXh0cmEgYnl0ZS4gKi8KIC8qIFJldHVybnMgTlVMTCB0byBpbmRpY2F0ZSBlcnJvciBpZiBhIG5lZ2F0aXZlIHNpemUgb3Igc2l6ZSBsYXJnZXIgdGhhbgogICAgUHlfc3NpemVfdCBjYW4gcmVwcmVzZW50IGlzIHN1cHBsaWVkLiAgSGVscHMgcHJldmVudHMgc2VjdXJpdHkgaG9sZXMuICovCi0jZGVmaW5lIFB5TWVtX01BTExPQyhuKQkJKCgobikgPCAwIHx8IChuKSA+IFBZX1NTSVpFX1RfTUFYKSA/IE5VTEwgXAorI2RlZmluZSBQeU1lbV9NQUxMT0MobikJCSgoc2l6ZV90KShuKSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggPyBOVUxMIFwKIAkJCQk6IG1hbGxvYygobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fUkVBTExPQyhwLCBuKQkoKChuKSA8IDAgfHwgKG4pID4gUFlfU1NJWkVfVF9NQVgpID8gTlVMTCBcCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKIAkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKICNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCAxN2E1Mzc5Li42MmFhNTNhIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTYyLDE1ICs2MiwyMCBAQAogI2RlZmluZSBQWV9MTE9OR19NQVggTExPTkdfTUFYCiAjZGVmaW5lIFBZX1VMTE9OR19NQVggVUxMT05HX01BWAogI2VsaWYgZGVmaW5lZChfX0xPTkdfTE9OR19NQVhfXykKLS8qIE90aGVyd2lzZSwgaWYgR0NDIGhhcyBhIGJ1aWx0aW4gZGVmaW5lLCB1c2UgdGhhdC4gKi8KKy8qIE90aGVyd2lzZSwgaWYgR0NDIGhhcyBhIGJ1aWx0aW4gZGVmaW5lLCB1c2UgdGhhdC4gIChEZWZpbml0aW9uIG9mCisgKiBQWV9MTE9OR19NSU4gYXNzdW1lcyB0d28ncyBjb21wbGVtZW50IHdpdGggbm8gdHJhcCByZXByZXNlbnRhdGlvbi4pICovCiAjZGVmaW5lIFBZX0xMT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXwotI2RlZmluZSBQWV9MTE9OR19NSU4gKC1QWV9MTE9OR19NQVgtMSkKLSNkZWZpbmUgUFlfVUxMT05HX01BWCAoX19MT05HX0xPTkdfTUFYX18qMlVMTCArIDFVTEwpCi0jZWxzZQotLyogT3RoZXJ3aXNlLCByZWx5IG9uIHR3bydzIGNvbXBsZW1lbnQuICovCi0jZGVmaW5lIFBZX1VMTE9OR19NQVggKH4wVUxMKQotI2RlZmluZSBQWV9MTE9OR19NQVggICgobG9uZyBsb25nKShQWV9VTExPTkdfTUFYPj4xKSkKLSNkZWZpbmUgUFlfTExPTkdfTUlOICgtUFlfTExPTkdfTUFYLTEpCisjZGVmaW5lIFBZX0xMT05HX01JTiAoLVBZX0xMT05HX01BWCAtIDEpCisjZGVmaW5lIFBZX1VMTE9OR19NQVggKFBZX0xMT05HX01BWCAqIFB5X1VMTCgyKSArIDEpCisjZWxpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpCisvKiBPdGhlcndpc2UgY29tcHV0ZSBmcm9tIFNJWkVPRl9MT05HX0xPTkcsIGFzc3VtaW5nIHR3bydzIGNvbXBsZW1lbnQsIG5vCisgICBwYWRkaW5nIGJpdHMsIGFuZCBubyB0cmFwIHJlcHJlc2VudGF0aW9uLiAgTm90ZTogUFlfVUxMT05HX01BWCB3YXMKKyAgIHByZXZpb3VzbHkgI2RlZmluZWQgYXMgKH4wVUxMKSBoZXJlOyBidXQgdGhhdCdsbCBnaXZlIHRoZSB3cm9uZyB2YWx1ZSBpbiBhCisgICBwcmVwcm9jZXNzb3IgZXhwcmVzc2lvbiBvbiBzeXN0ZW1zIHdoZXJlIGxvbmcgbG9uZyAhPSBpbnRtYXhfdC4gKi8KKyNkZWZpbmUgUFlfTExPTkdfTUFYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoMSArIDIgKiAoKFB5X0xMKDEpIDw8IChDSEFSX0JJVCAqIFNJWkVPRl9MT05HX0xPTkcgLSAyKSkgLSAxKSkKKyNkZWZpbmUgUFlfTExPTkdfTUlOICgtUFlfTExPTkdfTUFYIC0gMSkKKyNkZWZpbmUgUFlfVUxMT05HX01BWCAoUFlfTExPTkdfTUFYICogUHlfVUxMKDIpICsgMSkKICNlbmRpZiAvKiBMTE9OR19NQVggKi8KICNlbmRpZgogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCkBAIC0xMjYsNiArMTMxLDIwIEBACiAjZW5kaWYKICNlbmRpZgogCisvKiBQYXJhbWV0ZXJzIHVzZWQgZm9yIHRoZSBudW1lcmljIGhhc2ggaW1wbGVtZW50YXRpb24uICBTZWUgbm90ZXMgZm9yCisgICBfUHlIYXNoX0RvdWJsZSBpbiBPYmplY3RzL29iamVjdC5jLiAgTnVtZXJpYyBoYXNoZXMgYXJlIGJhc2VkIG9uCisgICByZWR1Y3Rpb24gbW9kdWxvIHRoZSBwcmltZSAyKipfUHlIQVNIX0JJVFMgLSAxLiAqLworCisjaWYgU0laRU9GX1ZPSURfUCA+PSA4CisjZGVmaW5lIF9QeUhBU0hfQklUUyA2MQorI2Vsc2UKKyNkZWZpbmUgX1B5SEFTSF9CSVRTIDMxCisjZW5kaWYKKyNkZWZpbmUgX1B5SEFTSF9NT0RVTFVTICgoKHNpemVfdCkxIDw8IF9QeUhBU0hfQklUUykgLSAxKQorI2RlZmluZSBfUHlIQVNIX0lORiAzMTQxNTkKKyNkZWZpbmUgX1B5SEFTSF9OQU4gMAorI2RlZmluZSBfUHlIQVNIX0lNQUcgMTAwMDAwM1VMCisKIC8qIHVpbnRwdHJfdCBpcyB0aGUgQzlYIG5hbWUgZm9yIGFuIHVuc2lnbmVkIGludGVncmFsIHR5cGUgc3VjaCB0aGF0IGEKICAqIGxlZ2l0aW1hdGUgdm9pZCogY2FuIGJlIGNhc3QgdG8gdWludHB0cl90IGFuZCB0aGVuIGJhY2sgdG8gdm9pZCogYWdhaW4KICAqIHdpdGhvdXQgbG9zcyBvZiBpbmZvcm1hdGlvbi4gIFNpbWlsYXJseSBmb3IgaW50cHRyX3QsIHdydCBhIHNpZ25lZApAQCAtMTYzLDYgKzE4MiwxMSBAQAogIyAgIGVycm9yICJQeXRob24gbmVlZHMgYSB0eXBlZGVmIGZvciBQeV9zc2l6ZV90IGluIHB5cG9ydC5oLiIKICNlbmRpZgogCisvKiBQeV9oYXNoX3QgaXMgdGhlIHNhbWUgc2l6ZSBhcyBhIHBvaW50ZXIuICovCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OworLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KK3R5cGVkZWYgc2l6ZV90IFB5X3VoYXNoX3Q7CisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksNiArMjQzLDIyIEBACiAjICAgZW5kaWYKICNlbmRpZgogCisvKiBQWV9GT1JNQVRfTE9OR19MT05HIGlzIGFuYWxvZ291cyB0byBQWV9GT1JNQVRfU0laRV9UIGFib3ZlLCBidXQgZm9yCisgKiB0aGUgbG9uZyBsb25nIHR5cGUgaW5zdGVhZCBvZiB0aGUgc2l6ZV90IHR5cGUuICBJdCdzIG9ubHkgYXZhaWxhYmxlCisgKiB3aGVuIEhBVkVfTE9OR19MT05HIGlzIGRlZmluZWQuIFRoZSAiaGlnaCBsZXZlbCIgUHl0aG9uIGZvcm1hdAorICogZnVuY3Rpb25zIGxpc3RlZCBhYm92ZSB3aWxsIGludGVycHJldCAibGxkIiBvciAibGx1IiBjb3JyZWN0bHkgb24KKyAqIGFsbCBwbGF0Zm9ybXMuCisgKi8KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCisjICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgICAgIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HICJJNjQiCisjICAgICAgIGVsc2UKKyMgICAgICAgICAgIGVycm9yICJUaGlzIHBsYXRmb3JtJ3MgcHljb25maWcuaCBuZWVkcyB0byBkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyIKKyMgICAgICAgZW5kaWYKKyMgICBlbmRpZgorI2VuZGlmCisKIC8qIFB5X0xPQ0FMIGNhbiBiZSB1c2VkIGluc3RlYWQgb2Ygc3RhdGljIHRvIGdldCB0aGUgZmFzdGVzdCBwb3NzaWJsZSBjYWxsaW5nCiAgKiBjb252ZW50aW9uIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgbG9jYWwgdG8gYSBnaXZlbiBtb2R1bGUuCiAgKgpAQCAtMjM2LDggKzI3Niw2IEBACiAgKiBzaG91bGQga2VlcCB1c2luZyBzdGF0aWMuCiAgKi8KIAotI3VuZGVmIFVTRV9JTkxJTkUgLyogWFhYIC0gc2V0IHZpYSBjb25maWd1cmU/ICovCi0KICNpZiBkZWZpbmVkKF9NU0NfVkVSKQogI2lmIGRlZmluZWQoUFlfTE9DQUxfQUdHUkVTU0lWRSkKIC8qIGVuYWJsZSBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9uIGZvciB2aXN1YWwgc3R1ZGlvICovCkBAIC03OTMsNCArODMxLDE0IEBACiAjZGVmaW5lIFB5X1VMTCh4KSBQeV9MTCh4IyNVKQogI2VuZGlmCiAKKyNpZmRlZiBWQV9MSVNUX0lTX0FSUkFZCisjZGVmaW5lIFB5X1ZBX0NPUFkoeCwgeSkgUHlfTUVNQ1BZKCh4KSwgKHkpLCBzaXplb2YodmFfbGlzdCkpCisjZWxzZQorI2lmZGVmIF9fdmFfY29weQorI2RlZmluZSBQeV9WQV9DT1BZIF9fdmFfY29weQorI2Vsc2UKKyNkZWZpbmUgUHlfVkFfQ09QWSh4LCB5KSAoeCkgPSAoeSkKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiBQeV9QWVBPUlRfSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0YXRlLmggYi9JbmNsdWRlL3B5c3RhdGUuaAppbmRleCA4MWRlNTY5Li41ZDJlZTYzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5c3RhdGUuaAorKysgYi9JbmNsdWRlL3B5c3RhdGUuaApAQCAtMTMsNiArMTMsOSBAQAogc3RydWN0IF90czsgLyogRm9yd2FyZCAqLwogc3RydWN0IF9pczsgLyogRm9yd2FyZCAqLwogCisjaWZkZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IF9pcyBQeUludGVycHJldGVyU3RhdGU7CisjZWxzZQogdHlwZWRlZiBzdHJ1Y3QgX2lzIHsKIAogICAgIHN0cnVjdCBfaXMgKm5leHQ7CkBAIC0yOCw2ICszMSw3IEBACiAgICAgUHlPYmplY3QgKmNvZGVjX3NlYXJjaF9jYWNoZTsKICAgICBQeU9iamVjdCAqY29kZWNfZXJyb3JfcmVnaXN0cnk7CiAgICAgaW50IGNvZGVjc19pbml0aWFsaXplZDsKKyAgICBpbnQgZnNjb2RlY19pbml0aWFsaXplZDsKIAogI2lmZGVmIEhBVkVfRExPUEVOCiAgICAgaW50IGRsb3BlbmZsYWdzOwpAQCAtMzcsMTIgKzQxLDE0IEBACiAjZW5kaWYKIAogfSBQeUludGVycHJldGVyU3RhdGU7CisjZW5kaWYKIAogCiAvKiBTdGF0ZSB1bmlxdWUgcGVyIHRocmVhZCAqLwogCiBzdHJ1Y3QgX2ZyYW1lOyAvKiBBdm9pZCBpbmNsdWRpbmcgZnJhbWVvYmplY3QuaCAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBQeV90cmFjZWZ1bmMgcmV0dXJuIC0xIHdoZW4gcmFpc2luZyBhbiBleGNlcHRpb24sIG9yIDAgZm9yIHN1Y2Nlc3MuICovCiB0eXBlZGVmIGludCAoKlB5X3RyYWNlZnVuYykoUHlPYmplY3QgKiwgc3RydWN0IF9mcmFtZSAqLCBpbnQsIFB5T2JqZWN0ICopOwogCkBAIC01NCw3ICs2MCwxMSBAQAogI2RlZmluZSBQeVRyYWNlX0NfQ0FMTCA0CiAjZGVmaW5lIFB5VHJhY2VfQ19FWENFUFRJT04gNQogI2RlZmluZSBQeVRyYWNlX0NfUkVUVVJOIDYKKyNlbmRpZgogCisjaWZkZWYgUHlfTElNSVRFRF9BUEkKK3R5cGVkZWYgc3RydWN0IF90cyBQeVRocmVhZFN0YXRlOworI2Vsc2UKIHR5cGVkZWYgc3RydWN0IF90cyB7CiAgICAgLyogU2VlIFB5dGhvbi9jZXZhbC5jIGZvciBjb21tZW50cyBleHBsYWluaW5nIG1vc3QgZmllbGRzICovCiAKQEAgLTg4LDYgKzk4LDggQEAKIAogICAgIFB5T2JqZWN0ICpkaWN0OyAgLyogU3RvcmVzIHBlci10aHJlYWQgc3RhdGUgKi8KIAorICAgIC8qIFhYWCBkb2Vzbid0IG1lYW4gYW55dGhpbmcgYW55bW9yZSAodGhlIGNvbW1lbnQgYmVsb3cgaXMgb2Jzb2xldGUpCisgICAgICAgPT4gZGVwcmVjYXRlIG9yIHJlbW92ZT8gKi8KICAgICAvKiB0aWNrX2NvdW50ZXIgaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGNoZWNrX2ludGVydmFsIHRpY2tlcgogICAgICAqIHJlYWNoZXMgemVyby4gVGhlIHB1cnBvc2UgaXMgdG8gZ2l2ZSBhIHVzZWZ1bCBtZWFzdXJlIG9mIHRoZSBudW1iZXIKICAgICAgKiBvZiBpbnRlcnByZXRlZCBieXRlY29kZSBpbnN0cnVjdGlvbnMgaW4gYSBnaXZlbiB0aHJlYWQuICBUaGlzCkBAIC0xMDQsNiArMTE2LDcgQEAKICAgICAvKiBYWFggc2lnbmFsIGhhbmRsZXJzIHNob3VsZCBhbHNvIGJlIGhlcmUgKi8KIAogfSBQeVRocmVhZFN0YXRlOworI2VuZGlmCiAKIAogUHlBUElfRlVOQyhQeUludGVycHJldGVyU3RhdGUgKikgUHlJbnRlcnByZXRlclN0YXRlX05ldyh2b2lkKTsKQEAgLTExOSw2ICsxMzIsNyBAQAogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0RlbGV0ZShQeVRocmVhZFN0YXRlICopOwogI2lmZGVmIFdJVEhfVEhSRUFECiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCh2b2lkKTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5R0lMU3RhdGVfUmVpbml0KHZvaWQpOwogI2VuZGlmCiAKIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeVRocmVhZFN0YXRlX0dldCh2b2lkKTsKQEAgLTEyOSwxMiArMTQzLDE3IEBACiAKIC8qIFZhcmlhYmxlIGFuZCBtYWNybyBmb3IgaW4tbGluZSBhY2Nlc3MgdG8gY3VycmVudCB0aHJlYWQgc3RhdGUgKi8KIAotUHlBUElfREFUQShQeVRocmVhZFN0YXRlICopIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQ7CisvKiBBc3N1bWluZyB0aGUgY3VycmVudCB0aHJlYWQgaG9sZHMgdGhlIEdJTCwgdGhpcyBpcyB0aGUKKyAgIFB5VGhyZWFkU3RhdGUgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEoX1B5X2F0b21pY19hZGRyZXNzKSBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworI2VuZGlmCiAKLSNpZmRlZiBQeV9ERUJVRworI2lmIGRlZmluZWQoUHlfREVCVUcpIHx8IGRlZmluZWQoUHlfTElNSVRFRF9BUEkpCiAjZGVmaW5lIFB5VGhyZWFkU3RhdGVfR0VUKCkgUHlUaHJlYWRTdGF0ZV9HZXQoKQogI2Vsc2UKLSNkZWZpbmUgUHlUaHJlYWRTdGF0ZV9HRVQoKSAoX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkKKyNkZWZpbmUgUHlUaHJlYWRTdGF0ZV9HRVQoKSBcCisgICAgKChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpCiAjZW5kaWYKIAogdHlwZWRlZgpAQCAtMTg1LDE5ICsyMDQsMjUgQEAKIC8qIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzeXMuX2N1cnJlbnRfZnJhbWVzKCkgIFJldHVybnMgYSBkaWN0IG1hcHBpbmcKICAgIHRocmVhZCBpZCB0byB0aGF0IHRocmVhZCdzIGN1cnJlbnQgZnJhbWUuCiAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUaHJlYWRfQ3VycmVudEZyYW1lcyh2b2lkKTsKKyNlbmRpZgogCiAvKiBSb3V0aW5lcyBmb3IgYWR2YW5jZWQgZGVidWdnZXJzLCByZXF1ZXN0ZWQgYnkgRGF2aWQgQmVhemxleS4KICAgIERvbid0IHVzZSB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nISAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeUludGVycHJldGVyU3RhdGUgKikgUHlJbnRlcnByZXRlclN0YXRlX0hlYWQodm9pZCk7CiBQeUFQSV9GVU5DKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKSBQeUludGVycHJldGVyU3RhdGVfTmV4dChQeUludGVycHJldGVyU3RhdGUgKik7CiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWQoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5VGhyZWFkU3RhdGVfTmV4dChQeVRocmVhZFN0YXRlICopOwogCiB0eXBlZGVmIHN0cnVjdCBfZnJhbWUgKigqUHlUaHJlYWRGcmFtZUdldHRlcikoUHlUaHJlYWRTdGF0ZSAqc2VsZl8pOworI2VuZGlmCiAKIC8qIGhvb2sgZm9yIFB5RXZhbF9HZXRGcmFtZSgpLCByZXF1ZXN0ZWQgZm9yIFBzeWNvICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkRnJhbWVHZXR0ZXIpIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lOworI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXN0cnRvZC5oIGIvSW5jbHVkZS9weXN0cnRvZC5oCmluZGV4IGIxZDg3ODYuLjIzZmQxYzYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHlzdHJ0b2QuaAorKysgYi9JbmNsdWRlL3B5c3RydG9kLmgKQEAgLTYsOSArNiw2IEBACiAjZW5kaWYKIAogCi1QeUFQSV9GVU5DKGRvdWJsZSkgUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyKTsKLVB5QVBJX0ZVTkMoZG91YmxlKSBQeU9TX2FzY2lpX2F0b2YoY29uc3QgY2hhciAqc3RyKTsKLVB5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2FzY2lpX2Zvcm1hdGQoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwgIGNvbnN0IGNoYXIgKmZvcm1hdCwgZG91YmxlIGQpOwogUHlBUElfRlVOQyhkb3VibGUpIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShjb25zdCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiplbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvdmVyZmxvd19leGNlcHRpb24pOwpAQCAtMjEsNyArMTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqdHlwZSk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoZG91YmxlKSBfUHlfcGFyc2VfaW5mX29yX25hbihjb25zdCBjaGFyICpwLCBjaGFyICoqZW5kcHRyKTsKKyNlbmRpZgogCiAKIC8qIFB5T1NfZG91YmxlX3RvX3N0cmluZydzICJmbGFncyIgcGFyYW1ldGVyIGNhbiBiZSBzZXQgdG8gMCBvciBtb3JlIG9mOiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRob25ydW4uaCBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKaW5kZXggOTZhMGUyMy4uYmJjYWU3MyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRob25ydW4uaAorKysgYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCkBAIC0xNiw5ICsxNiwxMSBAQAogI2RlZmluZSBQeUNGX09OTFlfQVNUIDB4MDQwMAogI2RlZmluZSBQeUNGX0lHTk9SRV9DT09LSUUgMHgwODAwCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBpbnQgY2ZfZmxhZ3M7ICAvKiBiaXRtYXNrIG9mIENPX3h4eCBmbGFncyByZWxldmFudCB0byBmdXR1cmUgKi8KIH0gUHlDb21waWxlckZsYWdzOworI2VuZGlmCiAKIFB5QVBJX0ZVTkModm9pZCkgUHlfU2V0UHJvZ3JhbU5hbWUod2NoYXJfdCAqKTsKIFB5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKQEAgLTMzLDQxICszNSw4NyBAQAogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIFB5X05ld0ludGVycHJldGVyKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeV9FbmRJbnRlcnByZXRlcihQeVRocmVhZFN0YXRlICopOwogCi1QeUFQSV9GVU5DKGludCkgUHlSdW5fQW55RmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7Ci1QeUFQSV9GVU5DKGludCkgUHlSdW5fQW55RmlsZUV4RmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosIGludCwgUHlDb21waWxlckZsYWdzICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIFB5UnVuX1NpbXBsZVN0cmluZ0ZsYWdzKGNvbnN0IGNoYXIgKiwgUHlDb21waWxlckZsYWdzICopOwotUHlBUElfRlVOQyhpbnQpIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLCBpbnQsIFB5Q29tcGlsZXJGbGFncyAqKTsKLVB5QVBJX0ZVTkMoaW50KSBQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeUNvbXBpbGVyRmxhZ3MgKik7Ci1QeUFQSV9GVU5DKGludCkgUHlSdW5fSW50ZXJhY3RpdmVMb29wRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosIFB5Q29tcGlsZXJGbGFncyAqKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVJ1bl9BbnlGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosIFB5Q29tcGlsZXJGbGFncyAqKTsKK1B5QVBJX0ZVTkMoaW50KSBQeVJ1bl9BbnlGaWxlRXhGbGFncygKKyAgICBGSUxFICpmcCwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgaW50IGNsb3NlaXQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncyk7CitQeUFQSV9GVU5DKGludCkgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGludCBjbG9zZWl0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzKAorICAgIEZJTEUgKmZwLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKTsKIAotUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCwgUHlDb21waWxlckZsYWdzICpmbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICopOwotUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tRmlsZShGSUxFICosIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqLCBpbnQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqKTsKK1B5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbVN0cmluZygKKyAgICBjb25zdCBjaGFyICpzLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlKAorICAgIEZJTEUgKmZwLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBjb25zdCBjaGFyKiBlbmMsCisgICAgaW50IHN0YXJ0LAorICAgIGNoYXIgKnBzMSwKKyAgICBjaGFyICpwczIsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgKmVycmNvZGUsCisgICAgUHlBcmVuYSAqYXJlbmEpOworI2VuZGlmCisKKyNpZm5kZWYgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcKICNkZWZpbmUgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcoUywgQikgXAogICAgIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MoUywgQiwgMCkKICNkZWZpbmUgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlKEZQLCBTLCBCKSBcCiAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlRmxhZ3MoRlAsIFMsIEIsIDApCisjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IF9ub2RlICopIFB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKIFB5QVBJX0ZVTkMoc3RydWN0IF9ub2RlICopIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzKEZJTEUgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGludCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlSdW5fU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBpbnQsIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICosIFB5Q29tcGlsZXJGbGFncyAqKTsKIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVJ1bl9GaWxlRXhGbGFncyhGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlSdW5fRmlsZUV4RmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGludCBzdGFydCwKKyAgICBQeU9iamVjdCAqZ2xvYmFscywKKyAgICBQeU9iamVjdCAqbG9jYWxzLAorICAgIGludCBjbG9zZWl0LAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOworI2VuZGlmCiAKLSNkZWZpbmUgUHlfQ29tcGlsZVN0cmluZyhzdHIsIHAsIHMpIFB5X0NvbXBpbGVTdHJpbmdGbGFncyhzdHIsIHAsIHMsIE5VTEwpCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5X0NvbXBpbGVTdHJpbmdGbGFncyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICopOwotUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CisjaWZkZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlfQ29tcGlsZVN0cmluZyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyNlbHNlCisjZGVmaW5lIFB5X0NvbXBpbGVTdHJpbmcoc3RyLCBwLCBzKSBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhzdHIsIHAsIHMsIE5VTEwsIC0xKQorI2RlZmluZSBQeV9Db21waWxlU3RyaW5nRmxhZ3Moc3RyLCBwLCBzLCBmKSBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhzdHIsIHAsIHMsIGYsIC0xKQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeV9Db21waWxlU3RyaW5nRXhGbGFncygKKyAgICBjb25zdCBjaGFyICpzdHIsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGludCBzdGFydCwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIGludCBvcHRpbWl6ZSk7CisjZW5kaWYKK1B5QVBJX0ZVTkMoc3RydWN0IHN5bXRhYmxlICopIFB5X1N5bXRhYmxlU3RyaW5nKAorICAgIGNvbnN0IGNoYXIgKnN0ciwKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgaW50IHN0YXJ0KTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnRFeChpbnQpOwpAQCAtNzYsMTYgKzEyNCwyNCBAQAogLyogUHlfUHlBdEV4aXQgaXMgZm9yIHRoZSBhdGV4aXQgbW9kdWxlLCBQeV9BdEV4aXQgaXMgZm9yIGxvdy1sZXZlbAogICogZXhpdCBmdW5jdGlvbnMuCiAgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgX1B5X1B5QXRFeGl0KHZvaWQgKCpmdW5jKSh2b2lkKSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeV9BdEV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeV9FeGl0KGludCk7CiAKKy8qIFJlc3RvcmUgc2lnbmFscyB0aGF0IHRoZSBpbnRlcnByZXRlciBoYXMgY2FsbGVkIFNJR19JR04gb24gdG8gU0lHX0RGTC4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCkgX1B5X1Jlc3RvcmVTaWduYWxzKHZvaWQpOworCiBQeUFQSV9GVU5DKGludCkgUHlfRmRJc0ludGVyYWN0aXZlKEZJTEUgKiwgY29uc3QgY2hhciAqKTsKKyNlbmRpZgogCiAvKiBCb290c3RyYXAgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeV9NYWluKGludCBhcmdjLCB3Y2hhcl90ICoqYXJndik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIFVzZSBtYWNyb3MgZm9yIGEgYnVuY2ggb2Ygb2xkIHZhcmlhbnRzICovCiAjZGVmaW5lIFB5UnVuX1N0cmluZyhzdHIsIHMsIGcsIGwpIFB5UnVuX1N0cmluZ0ZsYWdzKHN0ciwgcywgZywgbCwgTlVMTCkKICNkZWZpbmUgUHlSdW5fQW55RmlsZShmcCwgbmFtZSkgUHlSdW5fQW55RmlsZUV4RmxhZ3MoZnAsIG5hbWUsIDAsIE5VTEwpCkBAIC0xMDQsMTIgKzE2MCwxNyBAQAogICAgIFB5UnVuX0ZpbGVFeEZsYWdzKGZwLCBwLCBzLCBnLCBsLCBjLCBOVUxMKQogI2RlZmluZSBQeVJ1bl9GaWxlRmxhZ3MoZnAsIHAsIHMsIGcsIGwsIGZsYWdzKSBcCiAgICAgUHlSdW5fRmlsZUV4RmxhZ3MoZnAsIHAsIHMsIGcsIGwsIDAsIGZsYWdzKQorI2VuZGlmCiAKIC8qIEluIGdldHBhdGguYyAqLwogUHlBUElfRlVOQyh3Y2hhcl90ICopIFB5X0dldFByb2dyYW1GdWxsUGF0aCh2b2lkKTsKIFB5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQcmVmaXgodm9pZCk7CiBQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0RXhlY1ByZWZpeCh2b2lkKTsKIFB5QVBJX0ZVTkMod2NoYXJfdCAqKSBQeV9HZXRQYXRoKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSAgICAgIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqKTsKKyNpZmRlZiBNU19XSU5ET1dTCitpbnQgX1B5X0NoZWNrUHl0aG9uMygpOworI2VuZGlmCiAKIC8qIEluIHRoZWlyIG93biBmaWxlcyAqLwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldFZlcnNpb24odm9pZCk7CkBAIC0xMTcsMTMgKzE3OCwxNiBAQAogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X0dldENvcHlyaWdodCh2b2lkKTsKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRDb21waWxlcih2b2lkKTsKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeV9HZXRCdWlsZEluZm8odm9pZCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgX1B5X3N2bnZlcnNpb24odm9pZCk7CiBQeUFQSV9GVU5DKGNvbnN0IGNoYXIgKikgUHlfU3VidmVyc2lvblJldmlzaW9uKHZvaWQpOwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIFB5X1N1YnZlcnNpb25TaG9ydEJyYW5jaCh2b2lkKTsKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBfUHlfaGdpZGVudGlmaWVyKHZvaWQpOwogUHlBUElfRlVOQyhjb25zdCBjaGFyICopIF9QeV9oZ3ZlcnNpb24odm9pZCk7CisjZW5kaWYKIAogLyogSW50ZXJuYWwgLS0gdmFyaW91cyBvbmUtdGltZSBpbml0aWFsaXphdGlvbnMgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5QnVpbHRpbl9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTeXNfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0X0luaXQodm9pZCk7CkBAIC0xMzIsOCArMTk2LDEwIEBACiBQeUFQSV9GVU5DKGludCkgX1B5RnJhbWVfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVBcnJheV9Jbml0KHZvaWQpOworI2VuZGlmCiAKIC8qIFZhcmlvdXMgaW50ZXJuYWwgZmluYWxpemVycyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBfUHlFeGNfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5SW1wb3J0X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5TWV0aG9kX0Zpbmkodm9pZCk7CkBAIC0xNDcsMTIgKzIxMywxOCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeUJ5dGVBcnJheV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeUZsb2F0X0Zpbmkodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5T1NfRmluaUludGVycnVwdHModm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdDX0Zpbmkodm9pZCk7CisjZW5kaWYKIAogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CisjZW5kaWYKIFB5QVBJX0RBVEEoaW50KSAoKlB5T1NfSW5wdXRIb29rKSh2b2lkKTsKIFB5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUqKSBfUHlPU19SZWFkbGluZVRTdGF0ZTsKKyNlbmRpZgogCiAvKiBTdGFjayBzaXplLCBpbiAicG9pbnRlcnMiIChzbyB3ZSBnZXQgZXh0cmEgc2FmZXR5IG1hcmdpbnMKICAgIG9uIDY0LWJpdCBwbGF0Zm9ybXMpLiAgT24gYSAzMi1iaXQgcGxhdGZvcm0sIHRoaXMgdHJhbnNsYXRlcwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRocmVhZC5oIGIvSW5jbHVkZS9weXRocmVhZC5oCmluZGV4IGI1YTZlYzMuLjk4MDZjNjEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHl0aHJlYWQuaAorKysgYi9JbmNsdWRlL3B5dGhyZWFkLmgKQEAgLTIsOSArMiw2IEBACiAjaWZuZGVmIFB5X1BZVEhSRUFEX0gKICNkZWZpbmUgUHlfUFlUSFJFQURfSAogCi0jZGVmaW5lIE5PX0VYSVRfUFJPRwkJLyogZG9uJ3QgZGVmaW5lIFB5VGhyZWFkX2V4aXRfcHJvZygpICovCi0JCQkJLyogKHRoZSByZXN1bHQgaXMgbm8gdXNlIG9mIHNpZ25hbHMgb24gU0dJKSAqLwotCiB0eXBlZGVmIHZvaWQgKlB5VGhyZWFkX3R5cGVfbG9jazsKIHR5cGVkZWYgdm9pZCAqUHlUaHJlYWRfdHlwZV9zZW1hOwogCkBAIC0xMiwxMCArOSwxNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorLyogUmV0dXJuIHN0YXR1cyBjb2RlcyBmb3IgUHl0aG9uIGxvY2sgYWNxdWlzaXRpb24uICBDaG9zZW4gZm9yIG1heGltdW0KKyAqIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZSBmYWlsdXJlIC0+IDAsIHN1Y2Nlc3MgLT4gMS4gICovCit0eXBlZGVmIGVudW0gUHlMb2NrU3RhdHVzIHsKKyAgICBQWV9MT0NLX0ZBSUxVUkUgPSAwLAorICAgIFBZX0xPQ0tfQUNRVUlSRUQgPSAxLAorICAgIFBZX0xPQ0tfSU5UUgorfSBQeUxvY2tTdGF0dXM7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfaW5pdF90aHJlYWQodm9pZCk7CiBQeUFQSV9GVU5DKGxvbmcpIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX19QeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKTsKIFB5QVBJX0ZVTkMobG9uZykgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKTsKIAogUHlBUElfRlVOQyhQeVRocmVhZF90eXBlX2xvY2spIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCk7CkBAIC0yMywxNiArMjcsNTMgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrLCBpbnQpOwogI2RlZmluZSBXQUlUX0xPQ0sJMQogI2RlZmluZSBOT1dBSVRfTE9DSwkwCisKKy8qIFBZX1RJTUVPVVRfVCBpcyB0aGUgaW50ZWdyYWwgdHlwZSB1c2VkIHRvIHNwZWNpZnkgdGltZW91dHMgd2hlbiB3YWl0aW5nCisgICBvbiBhIGxvY2sgKHNlZSBQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoKSBiZWxvdykuCisgICBQWV9USU1FT1VUX01BWCBpcyB0aGUgaGlnaGVzdCB1c2FibGUgdmFsdWUgKGluIG1pY3Jvc2Vjb25kcykgb2YgdGhhdAorICAgdHlwZSwgYW5kIGRlcGVuZHMgb24gdGhlIHN5c3RlbSB0aHJlYWRpbmcgQVBJLgorICAgCisgICBOT1RFOiB0aGlzIGlzbid0IHRoZSBzYW1lIHZhbHVlIGFzIGBfdGhyZWFkLlRJTUVPVVRfTUFYYC4gIFRoZSBfdGhyZWFkCisgICBtb2R1bGUgZXhwb3NlcyBhIGhpZ2hlci1sZXZlbCBBUEksIHdpdGggdGltZW91dHMgZXhwcmVzc2VkIGluIHNlY29uZHMKKyAgIGFuZCBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFsbG93ZWQuCisqLworI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCisjZGVmaW5lIFBZX1RJTUVPVVRfVCBQWV9MT05HX0xPTkcKKyNkZWZpbmUgUFlfVElNRU9VVF9NQVggUFlfTExPTkdfTUFYCisjZWxzZQorI2RlZmluZSBQWV9USU1FT1VUX1QgbG9uZworI2RlZmluZSBQWV9USU1FT1VUX01BWCBMT05HX01BWAorI2VuZGlmCisKKy8qIEluIHRoZSBOVCBBUEksIHRoZSB0aW1lb3V0IGlzIGEgRFdPUkQgYW5kIGlzIGV4cHJlc3NlZCBpbiBtaWxsaXNlY29uZHMgKi8KKyNpZiBkZWZpbmVkIChOVF9USFJFQURTKQorI2lmIChQeV9MTCgweEZGRkZGRkZGKSAqIDEwMDAgPCBQWV9USU1FT1VUX01BWCkKKyN1bmRlZiBQWV9USU1FT1VUX01BWAorI2RlZmluZSBQWV9USU1FT1VUX01BWCAoUHlfTEwoMHhGRkZGRkZGRikgKiAxMDAwKQorI2VuZGlmCisjZW5kaWYKKworLyogSWYgbWljcm9zZWNvbmRzID09IDAsIHRoZSBjYWxsIGlzIG5vbi1ibG9ja2luZzogaXQgcmV0dXJucyBpbW1lZGlhdGVseQorICAgZXZlbiB3aGVuIHRoZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkLgorICAgSWYgbWljcm9zZWNvbmRzID4gMCwgdGhlIGNhbGwgd2FpdHMgdXAgdG8gdGhlIHNwZWNpZmllZCBkdXJhdGlvbi4KKyAgIElmIG1pY3Jvc2Vjb25kcyA8IDAsIHRoZSBjYWxsIHdhaXRzIHVudGlsIHN1Y2Nlc3MgKG9yIGFibm9ybWFsIGZhaWx1cmUpCisKKyAgIG1pY3Jvc2Vjb25kcyBtdXN0IGJlIGxlc3MgdGhhbiBQWV9USU1FT1VUX01BWC4gQmVoYXZpb3VyIG90aGVyd2lzZSBpcworICAgdW5kZWZpbmVkLgorCisgICBJZiBpbnRyX2ZsYWcgaXMgdHJ1ZSBhbmQgdGhlIGFjcXVpcmUgaXMgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIHRoZW4gdGhlCisgICBjYWxsIHdpbGwgcmV0dXJuIFBZX0xPQ0tfSU5UUi4gIFRoZSBjYWxsZXIgbWF5IHJlYXR0ZW1wdCB0byBhY3F1aXJlIHRoZQorICAgbG9jay4KKyovCitQeUFQSV9GVU5DKFB5TG9ja1N0YXR1cykgUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKFB5VGhyZWFkX3R5cGVfbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfVElNRU9VVF9UIG1pY3Jvc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludHJfZmxhZyk7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayk7CiAKIFB5QVBJX0ZVTkMoc2l6ZV90KSBQeVRocmVhZF9nZXRfc3RhY2tzaXplKHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIFB5VGhyZWFkX3NldF9zdGFja3NpemUoc2l6ZV90KTsKIAotI2lmbmRlZiBOT19FWElUX1BST0cKLVB5QVBJX0ZVTkModm9pZCkgUHlUaHJlYWRfZXhpdF9wcm9nKGludCk7Ci1QeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkX19QeVRocmVhZF9leGl0X3Byb2coaW50KTsKLSNlbmRpZgotCiAvKiBUaHJlYWQgTG9jYWwgU3RvcmFnZSAoVExTKSBBUEkgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeVRocmVhZF9jcmVhdGVfa2V5KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZF9kZWxldGVfa2V5KGludCk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5dGltZS5oIGIvSW5jbHVkZS9weXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA3YmRiCi0tLSAvZGV2L251bGwKKysrIGIvSW5jbHVkZS9weXRpbWUuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisjaWZuZGVmIFB5X1BZVElNRV9ICisjZGVmaW5lIFB5X1BZVElNRV9ICisKKyNpbmNsdWRlICJweWNvbmZpZy5oIiAvKiBpbmNsdWRlIGZvciBkZWZpbmVzICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU3ltYm9scyBhbmQgbWFjcm9zIHRvIHN1cHBseSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBpbnRlcmZhY2VzIHRvIHRpbWUgcmVsYXRlZAorZnVuY3Rpb25zIGFuZCBjb25zdGFudHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKK3R5cGVkZWYgc3RydWN0IHRpbWV2YWwgX1B5VGltZV90aW1ldmFsOworI2Vsc2UKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB0aW1lX3QgICAgICAgdHZfc2VjOyAgIC8qIHNlY29uZHMgc2luY2UgSmFuLiAxLCAxOTcwICovCisgICAgbG9uZyAgICAgICAgIHR2X3VzZWM7ICAvKiBhbmQgbWljcm9zZWNvbmRzICovCit9IF9QeVRpbWVfdGltZXZhbDsKKyNlbmRpZgorCisvKiBTaW1pbGFyIHRvIFBPU0lYIGdldHRpbWVvZmRheSBidXQgY2Fubm90IGZhaWwuICBJZiBzeXN0ZW0gZ2V0dGltZW9mZGF5CisgKiBmYWlscyBvciBpcyBub3QgYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gbG93ZXIgcmVzb2x1dGlvbiBjbG9ja3MuCisgKi8KK1B5QVBJX0ZVTkModm9pZCkgX1B5VGltZV9nZXR0aW1lb2ZkYXkoX1B5VGltZV90aW1ldmFsICp0cCk7CisKKyNkZWZpbmUgX1B5VGltZV9BRERfU0VDT05EUyh0diwgaW50ZXJ2YWwpIFwKK2RvIHsgXAorICAgIHR2LnR2X3VzZWMgKz0gKGxvbmcpICgoKGxvbmcpIGludGVydmFsIC0gaW50ZXJ2YWwpICogMTAwMDAwMCk7IFwKKyAgICB0di50dl9zZWMgKz0gKHRpbWVfdCkgaW50ZXJ2YWwgKyAodGltZV90KSAodHYudHZfdXNlYyAvIDEwMDAwMDApOyBcCisgICAgdHYudHZfdXNlYyAlPSAxMDAwMDAwOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9QeVRpbWVfSU5URVJWQUwodHZfc3RhcnQsIHR2X2VuZCkgXAorICAgICgodHZfZW5kLnR2X3NlYyAtIHR2X3N0YXJ0LnR2X3NlYykgKyBcCisgICAgICh0dl9lbmQudHZfdXNlYyAtIHR2X3N0YXJ0LnR2X3VzZWMpICogMC4wMDAwMDEpCisKKy8qIER1bW15IHRvIGZvcmNlIGxpbmtpbmcuICovCitQeUFQSV9GVU5DKHZvaWQpIF9QeVRpbWVfSW5pdCh2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFB5X1BZVElNRV9IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvc2V0b2JqZWN0LmggYi9JbmNsdWRlL3NldG9iamVjdC5oCmluZGV4IDU3NGNhZjcuLjYyMzQxMTEgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2V0b2JqZWN0LmgKKysrIGIvSW5jbHVkZS9zZXRvYmplY3QuaApAQCAtMTgsMTUgKzE4LDEyIEBACiBob2xkIGEgc2VhcmNoIGZpbmdlci4gIFRoZSBoYXNoIGZpZWxkIG9mIFVudXNlZCBvciBEdW1teSBzbG90cyBoYXMKIG5vIG1lYW5pbmcgb3RoZXJ3aXNlLgogKi8KLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeVNldF9NSU5TSVpFIDgKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIC8qIENhY2hlZCBoYXNoIGNvZGUgb2YgdGhlIGtleS4gIE5vdGUgdGhhdCBoYXNoIGNvZGVzIGFyZSBDIGxvbmdzLgotICAgICAqIFdlIGhhdmUgdG8gdXNlIFB5X3NzaXplX3QgaW5zdGVhZCBiZWNhdXNlIHNldF9wb3AoKSBhYnVzZXMKLSAgICAgKiB0aGUgaGFzaCBmaWVsZCB0byBob2xkIGEgc2VhcmNoIGZpbmdlci4KLSAgICAgKi8KLSAgICBQeV9zc2l6ZV90IGhhc2g7CisgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiB0aGUga2V5LiAqLworICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5T2JqZWN0ICprZXk7CiB9IHNldGVudHJ5OwogCkBAIC01MywxMiArNTAsMTMgQEAKICAgICAgKiBzYXZlcyByZXBlYXRlZCBydW50aW1lIG51bGwtdGVzdHMuCiAgICAgICovCiAgICAgc2V0ZW50cnkgKnRhYmxlOwotICAgIHNldGVudHJ5ICooKmxvb2t1cCkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBsb25nIGhhc2gpOworICAgIHNldGVudHJ5ICooKmxvb2t1cCkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCk7CiAgICAgc2V0ZW50cnkgc21hbGx0YWJsZVtQeVNldF9NSU5TSVpFXTsKIAotICAgIGxvbmcgaGFzaDsgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KKyAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7ICAgICAgLyogTGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgKi8KIH07CisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlGcm96ZW5TZXRfVHlwZTsKQEAgLTg4LDE0ICs4NiwyMCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNldF9OZXcoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RnJvemVuU2V0X05ldyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlTZXRfU2l6ZShQeU9iamVjdCAqYW55c2V0KTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlTZXRfR0VUX1NJWkUoc28pICgoKFB5U2V0T2JqZWN0ICopKHNvKSktPnVzZWQpCisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeVNldF9DbGVhcihQeU9iamVjdCAqc2V0KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVNldF9Db250YWlucyhQeU9iamVjdCAqYW55c2V0LCBQeU9iamVjdCAqa2V5KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVNldF9EaXNjYXJkKFB5T2JqZWN0ICpzZXQsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhpbnQpIFB5U2V0X0FkZChQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqa2V5KTsKLVB5QVBJX0ZVTkMoaW50KSBfUHlTZXRfTmV4dEVudHJ5KFB5T2JqZWN0ICpzZXQsIFB5X3NzaXplX3QgKnBvcywgUHlPYmplY3QgKiprZXksIGxvbmcgKmhhc2gpOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeVNldF9OZXh0RW50cnkoUHlPYmplY3QgKnNldCwgUHlfc3NpemVfdCAqcG9zLCBQeU9iamVjdCAqKmtleSwgUHlfaGFzaF90ICpoYXNoKTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNldF9Qb3AoUHlPYmplY3QgKnNldCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5U2V0X1VwZGF0ZShQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqaXRlcmFibGUpOworI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zbGljZW9iamVjdC5oIGIvSW5jbHVkZS9zbGljZW9iamVjdC5oCmluZGV4IDhhYjYyZGQuLjhiZWMxNzkgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvc2xpY2VvYmplY3QuaAorKysgYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKQEAgLTE4LDExICsxOCwxMiBAQAogbmFtZXMgYXJlIGZyb20gcmFuZ2UpLiAgQWZ0ZXIgbXVjaCB0YWxrIHdpdGggR3VpZG8sIGl0IHdhcyBkZWNpZGVkIHRvCiBsZXQgdGhlc2UgYmUgYW55IGFyYml0cmFyeSBweXRob24gdHlwZS4gIFB5X05vbmUgc3RhbmRzIGZvciBvbWl0dGVkIHZhbHVlcy4KICovCi0KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlPYmplY3QgKnN0YXJ0LCAqc3RvcCwgKnN0ZXA7CS8qIG5vdCBOVUxMICovCiB9IFB5U2xpY2VPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2xpY2VfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeUVsbGlwc2lzX1R5cGU7CkBAIC0zMSwxMCArMzIsMTIgQEAKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNsaWNlX05ldyhQeU9iamVjdCogc3RhcnQsIFB5T2JqZWN0KiBzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzdGVwKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2xpY2VfRnJvbUluZGljZXMoUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBzdG9wKTsKLVB5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXMoUHlTbGljZU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCisjZW5kaWYKK1B5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXMoUHlPYmplY3QgKnIsIFB5X3NzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCBQeV9zc2l6ZV90ICpzdGVwKTsKLVB5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXNFeChQeVNsaWNlT2JqZWN0ICpyLCBQeV9zc2l6ZV90IGxlbmd0aCwKK1B5QVBJX0ZVTkMoaW50KSBQeVNsaWNlX0dldEluZGljZXNFeChQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAJCQkJICAgIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCAKIAkJCQkgICAgUHlfc3NpemVfdCAqc3RlcCwgUHlfc3NpemVfdCAqc2xpY2VsZW5ndGgpOwogCmRpZmYgLS1naXQgYS9JbmNsdWRlL3N0cnVjdHNlcS5oIGIvSW5jbHVkZS9zdHJ1Y3RzZXEuaAppbmRleCAwYjhkMzg3Li4zMGM1MmFjIDEwMDY0NAotLS0gYS9JbmNsdWRlL3N0cnVjdHNlcS5oCisrKyBiL0luY2x1ZGUvc3RydWN0c2VxLmgKQEAgLTEsNSArMSw1IEBACiAKLS8qIFR1cGxlIG9iamVjdCBpbnRlcmZhY2UgKi8KKy8qIE5hbWVkIHR1cGxlIG9iamVjdCBpbnRlcmZhY2UgKi8KIAogI2lmbmRlZiBQeV9TVFJVQ1RTRVFfSAogI2RlZmluZSBQeV9TVFJVQ1RTRVFfSApAQCAtMjEsMjMgKzIxLDI1IEBACiAKIGV4dGVybiBjaGFyKiBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOworI2VuZGlmCitQeUFQSV9GVU5DKFB5VHlwZU9iamVjdCopIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpOwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3RydWN0U2VxdWVuY2VfTmV3KFB5VHlwZU9iamVjdCogdHlwZSk7CiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9WQVJfSEVBRAotICAgIFB5T2JqZWN0ICpvYl9pdGVtWzFdOwotfSBQeVN0cnVjdFNlcXVlbmNlOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBQeVR1cGxlT2JqZWN0IFB5U3RydWN0U2VxdWVuY2U7CiAKIC8qIE1hY3JvLCAqb25seSogdG8gYmUgdXNlZCB0byBmaWxsIGluIGJyYW5kIG5ldyBvYmplY3RzICovCi0jZGVmaW5lIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0ob3AsIGksIHYpIFwKLSAgICAoKChQeVN0cnVjdFNlcXVlbmNlICopKG9wKSktPm9iX2l0ZW1baV0gPSB2KQorI2RlZmluZSBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKG9wLCBpLCB2KSBQeVR1cGxlX1NFVF9JVEVNKG9wLCBpLCB2KQogCi0jZGVmaW5lIFB5U3RydWN0U2VxdWVuY2VfR0VUX0lURU0ob3AsIGkpIFwKLSAgICAoKChQeVN0cnVjdFNlcXVlbmNlICopKG9wKSktPm9iX2l0ZW1baV0pCisjZGVmaW5lIFB5U3RydWN0U2VxdWVuY2VfR0VUX0lURU0ob3AsIGkpIFB5VHVwbGVfR0VUX0lURU0ob3AsIGkpCisjZW5kaWYKIAorUHlBUElfRlVOQyh2b2lkKSBQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW0oUHlPYmplY3QqLCBQeV9zc2l6ZV90LCBQeU9iamVjdCopOworUHlBUElfRlVOQyhQeU9iamVjdCopIFB5U3RydWN0U2VxdWVuY2VfR2V0SXRlbShQeU9iamVjdCosIFB5X3NzaXplX3QpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCA5YWJjNWIyLi5mZDdkZTA0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC0xLDMgKzEsNCBAQAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9TWU1UQUJMRV9ICiAjZGVmaW5lIFB5X1NZTVRBQkxFX0gKIApAQCAtMTUsNyArMTYsOCBAQAogc3RydWN0IF9zeW10YWJsZV9lbnRyeTsKIAogc3RydWN0IHN5bXRhYmxlIHsKLSAgICBjb25zdCBjaGFyICpzdF9maWxlbmFtZTsgICAgICAgIC8qIG5hbWUgb2YgZmlsZSBiZWluZyBjb21waWxlZCAqLworICAgIGNvbnN0IGNoYXIgKnN0X2ZpbGVuYW1lOyAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfY3VyOyAvKiBjdXJyZW50IHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X3RvcDsgLyogc3ltYm9sIHRhYmxlIGVudHJ5IGZvciBtb2R1bGUgKi8KICAgICBQeU9iamVjdCAqc3RfYmxvY2tzOyAgICAgICAgICAgIC8qIGRpY3Q6IG1hcCBBU1Qgbm9kZSBhZGRyZXNzZXMKQEAgLTQ2LDcgKzQ4LDkgQEAKICAgICB1bnNpZ25lZCBzdGVfcmV0dXJuc192YWx1ZSA6IDE7ICAvKiB0cnVlIGlmIG5hbWVzcGFjZSB1c2VzIHJldHVybiB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgKi8KICAgICBpbnQgc3RlX2xpbmVubzsgICAgICAgICAgLyogZmlyc3QgbGluZSBvZiBibG9jayAqLworICAgIGludCBzdGVfY29sX29mZnNldDsgICAgICAvKiBvZmZzZXQgb2YgZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfb3B0X2xpbmVubzsgICAgICAvKiBsaW5lbm8gb2YgbGFzdCBleGVjIG9yIGltcG9ydCAqICovCisgICAgaW50IHN0ZV9vcHRfY29sX29mZnNldDsgIC8qIG9mZnNldCBvZiBsYXN0IGV4ZWMgb3IgaW1wb3J0ICogKi8KICAgICBpbnQgc3RlX3RtcG5hbWU7ICAgICAgICAgLyogY291bnRlciBmb3IgbGlzdGNvbXAgdGVtcCB2YXJzICovCiAgICAgc3RydWN0IHN5bXRhYmxlICpzdGVfdGFibGU7CiB9IFB5U1RFbnRyeU9iamVjdDsKQEAgLTU3LDggKzYxLDEwIEBACiAKIFB5QVBJX0ZVTkMoaW50KSBQeVNUX0dldFNjb3BlKFB5U1RFbnRyeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAotUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlTeW10YWJsZV9CdWlsZChtb2RfdHksIGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUZ1dHVyZUZlYXR1cmVzICopOworUHlBUElfRlVOQyhzdHJ1Y3Qgc3ltdGFibGUgKikgUHlTeW10YWJsZV9CdWlsZCgKKyAgICBtb2RfdHkgbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpOwogUHlBUElfRlVOQyhQeVNURW50cnlPYmplY3QgKikgUHlTeW10YWJsZV9Mb29rdXAoc3RydWN0IHN5bXRhYmxlICosIHZvaWQgKik7CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlTeW10YWJsZV9GcmVlKHN0cnVjdCBzeW10YWJsZSAqKTsKQEAgLTcwLDEzICs3Niw5IEBACiAjZGVmaW5lIERFRl9QQVJBTSAyPDwxICAgICAgICAgLyogZm9ybWFsIHBhcmFtZXRlciAqLwogI2RlZmluZSBERUZfTk9OTE9DQUwgMjw8MiAgICAgIC8qIG5vbmxvY2FsIHN0bXQgKi8KICNkZWZpbmUgVVNFIDI8PDMgICAgICAgICAgICAgICAvKiBuYW1lIGlzIHVzZWQgKi8KLSNkZWZpbmUgREVGX1NUQVIgMjw8NCAgICAgICAgICAvKiBwYXJhbWV0ZXIgaXMgc3RhciBhcmcgKi8KLSNkZWZpbmUgREVGX0RPVUJMRVNUQVIgMjw8NSAgICAvKiBwYXJhbWV0ZXIgaXMgc3Rhci1zdGFyIGFyZyAqLwotI2RlZmluZSBERUZfSU5UVVBMRSAyPDw2ICAgICAgIC8qIG5hbWUgZGVmaW5lZCBpbiB0dXBsZSBpbiBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIERFRl9GUkVFIDI8PDcgICAgICAgICAgLyogbmFtZSB1c2VkIGJ1dCBub3QgZGVmaW5lZCBpbiBuZXN0ZWQgYmxvY2sgKi8KLSNkZWZpbmUgREVGX0ZSRUVfR0xPQkFMIDI8PDggICAvKiBmcmVlIHZhcmlhYmxlIGlzIGFjdHVhbGx5IGltcGxpY2l0IGdsb2JhbCAqLwotI2RlZmluZSBERUZfRlJFRV9DTEFTUyAyPDw5ICAgIC8qIGZyZWUgdmFyaWFibGUgZnJvbSBjbGFzcydzIG1ldGhvZCAqLwotI2RlZmluZSBERUZfSU1QT1JUIDI8PDEwICAgICAgICAvKiBhc3NpZ25tZW50IG9jY3VycmVkIHZpYSBpbXBvcnQgKi8KKyNkZWZpbmUgREVGX0ZSRUUgMjw8NCAgICAgICAgICAvKiBuYW1lIHVzZWQgYnV0IG5vdCBkZWZpbmVkIGluIG5lc3RlZCBibG9jayAqLworI2RlZmluZSBERUZfRlJFRV9DTEFTUyAyPDw1ICAgIC8qIGZyZWUgdmFyaWFibGUgZnJvbSBjbGFzcydzIG1ldGhvZCAqLworI2RlZmluZSBERUZfSU1QT1JUIDI8PDYgICAgICAgIC8qIGFzc2lnbm1lbnQgb2NjdXJyZWQgdmlhIGltcG9ydCAqLwogCiAjZGVmaW5lIERFRl9CT1VORCAoREVGX0xPQ0FMIHwgREVGX1BBUkFNIHwgREVGX0lNUE9SVCkKIApAQCAtMTA0LDMgKzEwNiw0IEBACiB9CiAjZW5kaWYKICNlbmRpZiAvKiAhUHlfU1lNVEFCTEVfSCAqLworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3N5c21vZHVsZS5oIGIvSW5jbHVkZS9zeXNtb2R1bGUuaAppbmRleCAyMjY4ZjNhLi4wMTBlNmUwIDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5c21vZHVsZS5oCisrKyBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKQEAgLTE0LDE3ICsxNCwyNCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CiAKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfV3JpdGVTdGRvdXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0JCQlQeV9HQ0NfQVRUUklCVVRFKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOworICAgICAgICAgICAgICAgICBQeV9HQ0NfQVRUUklCVVRFKChmb3JtYXQocHJpbnRmLCAxLCAyKSkpOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19Xcml0ZVN0ZGVycihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLQkJCVB5X0dDQ19BVFRSSUJVVEUoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CisgICAgICAgICAgICAgICAgIFB5X0dDQ19BVFRSSUJVVEUoKGZvcm1hdChwcmludGYsIDEsIDIpKSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX0Zvcm1hdFN0ZG91dChjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CitQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX0Zvcm1hdFN0ZGVycihjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U3lzX1RyYWNlRnVuYywgKl9QeVN5c19Qcm9maWxlRnVuYzsKLVB5QVBJX0RBVEEoaW50KSBfUHlTeXNfQ2hlY2tJbnRlcnZhbDsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5U3lzX0FkZFdhcm5PcHRpb24oY29uc3Qgd2NoYXJfdCAqKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlTeXNfQWRkV2Fybk9wdGlvblVuaWNvZGUoUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKGludCkgUHlTeXNfSGFzV2Fybk9wdGlvbnModm9pZCk7CiAKK1B5QVBJX0ZVTkModm9pZCkgUHlTeXNfQWRkWE9wdGlvbihjb25zdCB3Y2hhcl90ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVN5c19HZXRYT3B0aW9ucyh2b2lkKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvdGltZWZ1bmNzLmggYi9JbmNsdWRlL3RpbWVmdW5jcy5oCmluZGV4IDU1MzE0MmQuLjNjNDM1NzUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdGltZWZ1bmNzLmgKKysrIGIvSW5jbHVkZS90aW1lZnVuY3MuaApAQCAtMTQsNyArMTQsOSBAQAogICogdG8gZml0IGluIGEgdGltZV90LiAgVmFsdWVFcnJvciBpcyBzZXQgb24gcmV0dXJuIGlmZiB0aGUgcmV0dXJuCiAgKiB2YWx1ZSBpcyAodGltZV90KS0xIGFuZCBQeUVycl9PY2N1cnJlZCgpLgogICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHRpbWVfdCkgX1B5VGltZV9Eb3VibGVUb1RpbWV0KGRvdWJsZSB4KTsKKyNlbmRpZgogCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IDljMTlmNWMuLmE0NjJjNjQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTEsNiArMSw2IEBACiAKIC8qIFRva2VuIHR5cGVzICovCi0KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNpZm5kZWYgUHlfVE9LRU5fSAogI2RlZmluZSBQeV9UT0tFTl9ICiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTg1LDMgKzg1LDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9UT0tFTl9IICovCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvdHJhY2ViYWNrLmggYi9JbmNsdWRlL3RyYWNlYmFjay5oCmluZGV4IGZjMGM1ODYuLjY5ZTNkMDUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdHJhY2ViYWNrLmgKKysrIGIvSW5jbHVkZS90cmFjZWJhY2suaApAQCAtOCw3ICs4LDcgQEAKIHN0cnVjdCBfZnJhbWU7CiAKIC8qIFRyYWNlYmFjayBpbnRlcmZhY2UgKi8KLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBzdHJ1Y3QgX3RyYWNlYmFjayB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIHN0cnVjdCBfdHJhY2ViYWNrICp0Yl9uZXh0OwpAQCAtMTYsMTAgKzE2LDEzIEBACiAgICAgaW50IHRiX2xhc3RpOwogICAgIGludCB0Yl9saW5lbm87CiB9IFB5VHJhY2ViYWNrT2JqZWN0OworI2VuZGlmCiAKIFB5QVBJX0ZVTkMoaW50KSBQeVRyYWNlQmFja19IZXJlKHN0cnVjdCBfZnJhbWUgKik7CiBQeUFQSV9GVU5DKGludCkgUHlUcmFjZUJhY2tfUHJpbnQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgaW50KTsKKyNlbmRpZgogCiAvKiBSZXZlYWwgdHJhY2ViYWNrIHR5cGUgc28gd2UgY2FuIHR5cGVjaGVjayB0cmFjZWJhY2sgb2JqZWN0cyAqLwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5VHJhY2VCYWNrX1R5cGU7CmRpZmYgLS1naXQgYS9JbmNsdWRlL3R1cGxlb2JqZWN0LmggYi9JbmNsdWRlL3R1cGxlb2JqZWN0LmgKaW5kZXggMTlmZTdhNS4uZjE3Yjc4OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS90dXBsZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvdHVwbGVvYmplY3QuaApAQCAtMjEsNiArMjEsNyBAQAogcmV0dXJuZWQgaXRlbSdzIHJlZmVyZW5jZSBjb3VudC4KICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAogICAgIFB5T2JqZWN0ICpvYl9pdGVtWzFdOwpAQCAtMzAsNiArMzEsNyBAQAogICAgICAqIHRoZSB0dXBsZSBpcyBub3QgeWV0IHZpc2libGUgb3V0c2lkZSB0aGUgZnVuY3Rpb24gdGhhdCBidWlsZHMgaXQuCiAgICAgICovCiB9IFB5VHVwbGVPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5VHVwbGVfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVR1cGxlSXRlcl9UeXBlOwpAQCAtNDMsMTYgKzQ1LDIyIEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VHVwbGVfR2V0SXRlbShQeU9iamVjdCAqLCBQeV9zc2l6ZV90KTsKIFB5QVBJX0ZVTkMoaW50KSBQeVR1cGxlX1NldEl0ZW0oUHlPYmplY3QgKiwgUHlfc3NpemVfdCwgUHlPYmplY3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VHVwbGVfR2V0U2xpY2UoUHlPYmplY3QgKiwgUHlfc3NpemVfdCwgUHlfc3NpemVfdCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5VHVwbGVfUmVzaXplKFB5T2JqZWN0ICoqLCBQeV9zc2l6ZV90KTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVR1cGxlX1BhY2soUHlfc3NpemVfdCwgLi4uKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgX1B5VHVwbGVfTWF5YmVVbnRyYWNrKFB5T2JqZWN0ICopOworI2VuZGlmCiAKIC8qIE1hY3JvLCB0cmFkaW5nIHNhZmV0eSBmb3Igc3BlZWQgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlUdXBsZV9HRVRfSVRFTShvcCwgaSkgKCgoUHlUdXBsZU9iamVjdCAqKShvcCkpLT5vYl9pdGVtW2ldKQogI2RlZmluZSBQeVR1cGxlX0dFVF9TSVpFKG9wKSAgICBQeV9TSVpFKG9wKQogCiAvKiBNYWNybywgKm9ubHkqIHRvIGJlIHVzZWQgdG8gZmlsbCBpbiBicmFuZCBuZXcgdHVwbGVzICovCiAjZGVmaW5lIFB5VHVwbGVfU0VUX0lURU0ob3AsIGksIHYpICgoKFB5VHVwbGVPYmplY3QgKikob3ApKS0+b2JfaXRlbVtpXSA9IHYpCisjZW5kaWYKIAogUHlBUElfRlVOQyhpbnQpIFB5VHVwbGVfQ2xlYXJGcmVlTGlzdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvSW5jbHVkZS90eXBlc2xvdHMuaCBiL0luY2x1ZGUvdHlwZXNsb3RzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzY2RmYgotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvdHlwZXNsb3RzLmgKQEAgLTAsMCArMSw3NiBAQAorLyogRG8gbm90IHJlbnVtYmVyIHRoZSBmaWxlOyB0aGVzZSBudW1iZXJzIGFyZSBwYXJ0IG9mIHRoZSBzdGFibGUgQUJJLiAqLworLyogRGlzYWJsZWQsIHNlZSAjMTAxODEgKi8KKyN1bmRlZiBQeV9iZl9nZXRidWZmZXIKKyN1bmRlZiBQeV9iZl9yZWxlYXNlYnVmZmVyCisjZGVmaW5lIFB5X21wX2Fzc19zdWJzY3JpcHQgMworI2RlZmluZSBQeV9tcF9sZW5ndGggNAorI2RlZmluZSBQeV9tcF9zdWJzY3JpcHQgNQorI2RlZmluZSBQeV9uYl9hYnNvbHV0ZSA2CisjZGVmaW5lIFB5X25iX2FkZCA3CisjZGVmaW5lIFB5X25iX2FuZCA4CisjZGVmaW5lIFB5X25iX2Jvb2wgOQorI2RlZmluZSBQeV9uYl9kaXZtb2QgMTAKKyNkZWZpbmUgUHlfbmJfZmxvYXQgMTEKKyNkZWZpbmUgUHlfbmJfZmxvb3JfZGl2aWRlIDEyCisjZGVmaW5lIFB5X25iX2luZGV4IDEzCisjZGVmaW5lIFB5X25iX2lucGxhY2VfYWRkIDE0CisjZGVmaW5lIFB5X25iX2lucGxhY2VfYW5kIDE1CisjZGVmaW5lIFB5X25iX2lucGxhY2VfZmxvb3JfZGl2aWRlIDE2CisjZGVmaW5lIFB5X25iX2lucGxhY2VfbHNoaWZ0IDE3CisjZGVmaW5lIFB5X25iX2lucGxhY2VfbXVsdGlwbHkgMTgKKyNkZWZpbmUgUHlfbmJfaW5wbGFjZV9vciAxOQorI2RlZmluZSBQeV9uYl9pbnBsYWNlX3Bvd2VyIDIwCisjZGVmaW5lIFB5X25iX2lucGxhY2VfcmVtYWluZGVyIDIxCisjZGVmaW5lIFB5X25iX2lucGxhY2VfcnNoaWZ0IDIyCisjZGVmaW5lIFB5X25iX2lucGxhY2Vfc3VidHJhY3QgMjMKKyNkZWZpbmUgUHlfbmJfaW5wbGFjZV90cnVlX2RpdmlkZSAyNAorI2RlZmluZSBQeV9uYl9pbnBsYWNlX3hvciAyNQorI2RlZmluZSBQeV9uYl9pbnQgMjYKKyNkZWZpbmUgUHlfbmJfaW52ZXJ0IDI3CisjZGVmaW5lIFB5X25iX2xzaGlmdCAyOAorI2RlZmluZSBQeV9uYl9tdWx0aXBseSAyOQorI2RlZmluZSBQeV9uYl9uZWdhdGl2ZSAzMAorI2RlZmluZSBQeV9uYl9vciAzMQorI2RlZmluZSBQeV9uYl9wb3NpdGl2ZSAzMgorI2RlZmluZSBQeV9uYl9wb3dlciAzMworI2RlZmluZSBQeV9uYl9yZW1haW5kZXIgMzQKKyNkZWZpbmUgUHlfbmJfcnNoaWZ0IDM1CisjZGVmaW5lIFB5X25iX3N1YnRyYWN0IDM2CisjZGVmaW5lIFB5X25iX3RydWVfZGl2aWRlIDM3CisjZGVmaW5lIFB5X25iX3hvciAzOAorI2RlZmluZSBQeV9zcV9hc3NfaXRlbSAzOQorI2RlZmluZSBQeV9zcV9jb25jYXQgNDAKKyNkZWZpbmUgUHlfc3FfY29udGFpbnMgNDEKKyNkZWZpbmUgUHlfc3FfaW5wbGFjZV9jb25jYXQgNDIKKyNkZWZpbmUgUHlfc3FfaW5wbGFjZV9yZXBlYXQgNDMKKyNkZWZpbmUgUHlfc3FfaXRlbSA0NAorI2RlZmluZSBQeV9zcV9sZW5ndGggNDUKKyNkZWZpbmUgUHlfc3FfcmVwZWF0IDQ2CisjZGVmaW5lIFB5X3RwX2FsbG9jIDQ3CisjZGVmaW5lIFB5X3RwX2Jhc2UgNDgKKyNkZWZpbmUgUHlfdHBfYmFzZXMgNDkKKyNkZWZpbmUgUHlfdHBfY2FsbCA1MAorI2RlZmluZSBQeV90cF9jbGVhciA1MQorI2RlZmluZSBQeV90cF9kZWFsbG9jIDUyCisjZGVmaW5lIFB5X3RwX2RlbCA1MworI2RlZmluZSBQeV90cF9kZXNjcl9nZXQgNTQKKyNkZWZpbmUgUHlfdHBfZGVzY3Jfc2V0IDU1CisjZGVmaW5lIFB5X3RwX2RvYyA1NgorI2RlZmluZSBQeV90cF9nZXRhdHRyIDU3CisjZGVmaW5lIFB5X3RwX2dldGF0dHJvIDU4CisjZGVmaW5lIFB5X3RwX2hhc2ggNTkKKyNkZWZpbmUgUHlfdHBfaW5pdCA2MAorI2RlZmluZSBQeV90cF9pc19nYyA2MQorI2RlZmluZSBQeV90cF9pdGVyIDYyCisjZGVmaW5lIFB5X3RwX2l0ZXJuZXh0IDYzCisjZGVmaW5lIFB5X3RwX21ldGhvZHMgNjQKKyNkZWZpbmUgUHlfdHBfbmV3IDY1CisjZGVmaW5lIFB5X3RwX3JlcHIgNjYKKyNkZWZpbmUgUHlfdHBfcmljaGNvbXBhcmUgNjcKKyNkZWZpbmUgUHlfdHBfc2V0YXR0ciA2OAorI2RlZmluZSBQeV90cF9zZXRhdHRybyA2OQorI2RlZmluZSBQeV90cF9zdHIgNzAKKyNkZWZpbmUgUHlfdHBfdHJhdmVyc2UgNzEKKyNkZWZpbmUgUHlfdHBfbWVtYmVycyA3MgorI2RlZmluZSBQeV90cF9nZXRzZXQgNzMKKyNkZWZpbmUgUHlfdHBfZnJlZSA3NApkaWZmIC0tZ2l0IGEvSW5jbHVkZS91Y25oYXNoLmggYi9JbmNsdWRlL3Vjbmhhc2guaAppbmRleCA2OWI3Nzc0Li43MGZkZjEzIDEwMDY0NAotLS0gYS9JbmNsdWRlL3Vjbmhhc2guaAorKysgYi9JbmNsdWRlL3Vjbmhhc2guaApAQCAtMSw1ICsxLDUgQEAKIC8qIFVuaWNvZGUgbmFtZSBkYXRhYmFzZSBpbnRlcmZhY2UgKi8KLQorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2lmbmRlZiBQeV9VQ05IQVNIX0gKICNkZWZpbmUgUHlfVUNOSEFTSF9ICiAjaWZkZWYgX19jcGx1c3BsdXMKQEAgLTMxLDMgKzMxLDQgQEAKIH0KICNlbmRpZgogI2VuZGlmIC8qICFQeV9VQ05IQVNIX0ggKi8KKyNlbmRpZiAvKiAhUHlfTElNSVRFRF9BUEkgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvdW5pY29kZW9iamVjdC5oIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKaW5kZXggNjRmMzBlNS4uNGQyYThlNCAxMDA2NDQKLS0tIGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKKysrIGIvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgKQEAgLTc5LDcgKzc5LDcgQEAKICNkZWZpbmUgUHlfVU5JQ09ERV9XSURFCiAjZW5kaWYKIAotLyogU2V0IHRoZXNlIGZsYWdzIGlmIHRoZSBwbGF0Zm9ybSBoYXMgIndjaGFyLmgiLCAid2N0eXBlLmgiIGFuZCB0aGUKKy8qIFNldCB0aGVzZSBmbGFncyBpZiB0aGUgcGxhdGZvcm0gaGFzICJ3Y2hhci5oIiBhbmQgdGhlCiAgICB3Y2hhcl90IHR5cGUgaXMgYSAxNi1iaXQgdW5zaWduZWQgdHlwZSAqLwogLyogI2RlZmluZSBIQVZFX1dDSEFSX0ggKi8KIC8qICNkZWZpbmUgSEFWRV9VU0FCTEVfV0NIQVJfVCAqLwpAQCAtMTAwLDggKzEwMCw4IEBACiAjZW5kaWYKIAogLyogSWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGEgd2NoYXJfdCB0eXBlIHdlIHRyeSB0byBzdXBwb3J0IGl0Ci0gICB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoKSBhbmQKLSAgIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkuICovCisgICB0aHJvdWdoIHRoZSBpbnRlcmZhY2UgZnVuY3Rpb25zIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoKSwKKyAgIFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgYW5kIFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKCkuICovCiAKICNpZmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCiAjIGlmbmRlZiBIQVZFX1dDSEFSX0gKQEAgLTEzMSw3ICsxMzEsOSBAQAogICAgUHl0aG9uIGFuZCByZXByZXNlbnRzIGEgc2luZ2xlIFVuaWNvZGUgZWxlbWVudCBpbiB0aGUgVW5pY29kZQogICAgdHlwZS4gKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogdHlwZWRlZiBQWV9VTklDT0RFX1RZUEUgUHlfVU5JQ09ERTsKKyNlbmRpZgogCiAvKiAtLS0gVUNTLTIvVUNTLTQgTmFtZSBNYW5nbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTU3LDggKzE1OSwxMCBAQAogIyBkZWZpbmUgUHlVbmljb2RlX0FzVW5pY29kZSBQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZQogIyBkZWZpbmUgUHlVbmljb2RlX0FzVW5pY29kZUVzY2FwZVN0cmluZyBQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZwogIyBkZWZpbmUgUHlVbmljb2RlX0FzV2lkZUNoYXIgUHlVbmljb2RlVUNTMl9Bc1dpZGVDaGFyCisjIGRlZmluZSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyBQeVVuaWNvZGVVQ1MyX0FzV2lkZUNoYXJTdHJpbmcKICMgZGVmaW5lIFB5VW5pY29kZV9DbGVhckZyZWVMaXN0IFB5VW5pY29kZVVDUzJfQ2xlYXJGcmVlbGlzdAogIyBkZWZpbmUgUHlVbmljb2RlX0NvbXBhcmUgUHlVbmljb2RlVUNTMl9Db21wYXJlCisjIGRlZmluZSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyBQeVVuaWNvZGVVQ1MyX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcKICMgZGVmaW5lIFB5VW5pY29kZV9Db25jYXQgUHlVbmljb2RlVUNTMl9Db25jYXQKICMgZGVmaW5lIFB5VW5pY29kZV9BcHBlbmQgUHlVbmljb2RlVUNTMl9BcHBlbmQKICMgZGVmaW5lIFB5VW5pY29kZV9BcHBlbmRBbmREZWwgUHlVbmljb2RlVUNTMl9BcHBlbmRBbmREZWwKQEAgLTIwMCw2ICsyMDQsNyBAQAogIyBkZWZpbmUgUHlVbmljb2RlX0Zyb21Vbmljb2RlIFB5VW5pY29kZVVDUzJfRnJvbVVuaWNvZGUKICMgZGVmaW5lIFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIgUHlVbmljb2RlVUNTMl9Gcm9tV2lkZUNoYXIKICMgZGVmaW5lIFB5VW5pY29kZV9GU0NvbnZlcnRlciBQeVVuaWNvZGVVQ1MyX0ZTQ29udmVydGVyCisjIGRlZmluZSBQeVVuaWNvZGVfRlNEZWNvZGVyIFB5VW5pY29kZVVDUzJfRlNEZWNvZGVyCiAjIGRlZmluZSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nIFB5VW5pY29kZVVDUzJfR2V0RGVmYXVsdEVuY29kaW5nCiAjIGRlZmluZSBQeVVuaWNvZGVfR2V0TWF4IFB5VW5pY29kZVVDUzJfR2V0TWF4CiAjIGRlZmluZSBQeVVuaWNvZGVfR2V0U2l6ZSBQeVVuaWNvZGVVQ1MyX0dldFNpemUKQEAgLTIxMSw3ICsyMTYsNiBAQAogIyBkZWZpbmUgUHlVbmljb2RlX1JlcGxhY2UgUHlVbmljb2RlVUNTMl9SZXBsYWNlCiAjIGRlZmluZSBQeVVuaWNvZGVfUmVzaXplIFB5VW5pY29kZVVDUzJfUmVzaXplCiAjIGRlZmluZSBQeVVuaWNvZGVfUmljaENvbXBhcmUgUHlVbmljb2RlVUNTMl9SaWNoQ29tcGFyZQotIyBkZWZpbmUgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZyBQeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZwogIyBkZWZpbmUgUHlVbmljb2RlX1NwbGl0IFB5VW5pY29kZVVDUzJfU3BsaXQKICMgZGVmaW5lIFB5VW5pY29kZV9TcGxpdGxpbmVzIFB5VW5pY29kZVVDUzJfU3BsaXRsaW5lcwogIyBkZWZpbmUgUHlVbmljb2RlX1RhaWxtYXRjaCBQeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaApAQCAtMjIwLDI0ICsyMjQsNyBAQAogIyBkZWZpbmUgX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nIF9QeVVuaWNvZGVVQ1MyX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcKICMgZGVmaW5lIF9QeVVuaWNvZGVfRmluaSBfUHlVbmljb2RlVUNTMl9GaW5pCiAjIGRlZmluZSBfUHlVbmljb2RlX0luaXQgX1B5VW5pY29kZVVDUzJfSW5pdAotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc0FscGhhIF9QeVVuaWNvZGVVQ1MyX0lzQWxwaGEKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNEZWNpbWFsRGlnaXQgX1B5VW5pY29kZVVDUzJfSXNEZWNpbWFsRGlnaXQKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNEaWdpdCBfUHlVbmljb2RlVUNTMl9Jc0RpZ2l0Ci0jIGRlZmluZSBfUHlVbmljb2RlX0lzTGluZWJyZWFrIF9QeVVuaWNvZGVVQ1MyX0lzTGluZWJyZWFrCi0jIGRlZmluZSBfUHlVbmljb2RlX0lzTG93ZXJjYXNlIF9QeVVuaWNvZGVVQ1MyX0lzTG93ZXJjYXNlCi0jIGRlZmluZSBfUHlVbmljb2RlX0lzTnVtZXJpYyBfUHlVbmljb2RlVUNTMl9Jc051bWVyaWMKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNQcmludGFibGUgX1B5VW5pY29kZVVDUzJfSXNQcmludGFibGUKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNUaXRsZWNhc2UgX1B5VW5pY29kZVVDUzJfSXNUaXRsZWNhc2UKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNYaWRTdGFydCBfUHlVbmljb2RlVUNTMl9Jc1hpZFN0YXJ0Ci0jIGRlZmluZSBfUHlVbmljb2RlX0lzWGlkQ29udGludWUgX1B5VW5pY29kZVVDUzJfSXNYaWRDb250aW51ZQotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc1VwcGVyY2FzZSBfUHlVbmljb2RlVUNTMl9Jc1VwcGVyY2FzZQotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UgX1B5VW5pY29kZVVDUzJfSXNXaGl0ZXNwYWNlCi0jIGRlZmluZSBfUHlVbmljb2RlX1RvRGVjaW1hbERpZ2l0IF9QeVVuaWNvZGVVQ1MyX1RvRGVjaW1hbERpZ2l0Ci0jIGRlZmluZSBfUHlVbmljb2RlX1RvRGlnaXQgX1B5VW5pY29kZVVDUzJfVG9EaWdpdAotIyBkZWZpbmUgX1B5VW5pY29kZV9Ub0xvd2VyY2FzZSBfUHlVbmljb2RlVUNTMl9Ub0xvd2VyY2FzZQotIyBkZWZpbmUgX1B5VW5pY29kZV9Ub051bWVyaWMgX1B5VW5pY29kZVVDUzJfVG9OdW1lcmljCi0jIGRlZmluZSBfUHlVbmljb2RlX1RvVGl0bGVjYXNlIF9QeVVuaWNvZGVVQ1MyX1RvVGl0bGVjYXNlCi0jIGRlZmluZSBfUHlVbmljb2RlX1RvVXBwZXJjYXNlIF9QeVVuaWNvZGVVQ1MyX1RvVXBwZXJjYXNlCisjIGRlZmluZSBQeVVuaWNvZGVfc3RyZHVwIFB5VW5pY29kZVVDUzJfc3RyZHVwCiAKICNlbHNlCiAKQEAgLTI1Niw4ICsyNDMsMTAgQEAKICMgZGVmaW5lIFB5VW5pY29kZV9Bc1VuaWNvZGUgUHlVbmljb2RlVUNTNF9Bc1VuaWNvZGUKICMgZGVmaW5lIFB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcgUHlVbmljb2RlVUNTNF9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKICMgZGVmaW5lIFB5VW5pY29kZV9Bc1dpZGVDaGFyIFB5VW5pY29kZVVDUzRfQXNXaWRlQ2hhcgorIyBkZWZpbmUgUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcgUHlVbmljb2RlVUNTNF9Bc1dpZGVDaGFyU3RyaW5nCiAjIGRlZmluZSBQeVVuaWNvZGVfQ2xlYXJGcmVlTGlzdCBQeVVuaWNvZGVVQ1M0X0NsZWFyRnJlZWxpc3QKICMgZGVmaW5lIFB5VW5pY29kZV9Db21wYXJlIFB5VW5pY29kZVVDUzRfQ29tcGFyZQorIyBkZWZpbmUgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcgUHlVbmljb2RlVUNTNF9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCiAjIGRlZmluZSBQeVVuaWNvZGVfQ29uY2F0IFB5VW5pY29kZVVDUzRfQ29uY2F0CiAjIGRlZmluZSBQeVVuaWNvZGVfQXBwZW5kIFB5VW5pY29kZVVDUzRfQXBwZW5kCiAjIGRlZmluZSBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsIFB5VW5pY29kZVVDUzRfQXBwZW5kQW5kRGVsCkBAIC0yOTksNiArMjg4LDcgQEAKICMgZGVmaW5lIFB5VW5pY29kZV9Gcm9tVW5pY29kZSBQeVVuaWNvZGVVQ1M0X0Zyb21Vbmljb2RlCiAjIGRlZmluZSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyIFB5VW5pY29kZVVDUzRfRnJvbVdpZGVDaGFyCiAjIGRlZmluZSBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIgUHlVbmljb2RlVUNTNF9GU0NvbnZlcnRlcgorIyBkZWZpbmUgUHlVbmljb2RlX0ZTRGVjb2RlciBQeVVuaWNvZGVVQ1M0X0ZTRGVjb2RlcgogIyBkZWZpbmUgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZyBQeVVuaWNvZGVVQ1M0X0dldERlZmF1bHRFbmNvZGluZwogIyBkZWZpbmUgUHlVbmljb2RlX0dldE1heCBQeVVuaWNvZGVVQ1M0X0dldE1heAogIyBkZWZpbmUgUHlVbmljb2RlX0dldFNpemUgUHlVbmljb2RlVUNTNF9HZXRTaXplCkBAIC0zMTAsNyArMzAwLDYgQEAKICMgZGVmaW5lIFB5VW5pY29kZV9SZXBsYWNlIFB5VW5pY29kZVVDUzRfUmVwbGFjZQogIyBkZWZpbmUgUHlVbmljb2RlX1Jlc2l6ZSBQeVVuaWNvZGVVQ1M0X1Jlc2l6ZQogIyBkZWZpbmUgUHlVbmljb2RlX1JpY2hDb21wYXJlIFB5VW5pY29kZVVDUzRfUmljaENvbXBhcmUKLSMgZGVmaW5lIFB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcgUHlVbmljb2RlVUNTNF9TZXREZWZhdWx0RW5jb2RpbmcKICMgZGVmaW5lIFB5VW5pY29kZV9TcGxpdCBQeVVuaWNvZGVVQ1M0X1NwbGl0CiAjIGRlZmluZSBQeVVuaWNvZGVfU3BsaXRsaW5lcyBQeVVuaWNvZGVVQ1M0X1NwbGl0bGluZXMKICMgZGVmaW5lIFB5VW5pY29kZV9UYWlsbWF0Y2ggUHlVbmljb2RlVUNTNF9UYWlsbWF0Y2gKQEAgLTMxOSw2OSArMzA4LDE5IEBACiAjIGRlZmluZSBfUHlVbmljb2RlX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcgX1B5VW5pY29kZVVDUzRfQXNEZWZhdWx0RW5jb2RlZFN0cmluZwogIyBkZWZpbmUgX1B5VW5pY29kZV9GaW5pIF9QeVVuaWNvZGVVQ1M0X0ZpbmkKICMgZGVmaW5lIF9QeVVuaWNvZGVfSW5pdCBfUHlVbmljb2RlVUNTNF9Jbml0Ci0jIGRlZmluZSBfUHlVbmljb2RlX0lzQWxwaGEgX1B5VW5pY29kZVVDUzRfSXNBbHBoYQotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc0RlY2ltYWxEaWdpdCBfUHlVbmljb2RlVUNTNF9Jc0RlY2ltYWxEaWdpdAotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc0RpZ2l0IF9QeVVuaWNvZGVVQ1M0X0lzRGlnaXQKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsgX1B5VW5pY29kZVVDUzRfSXNMaW5lYnJlYWsKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNMb3dlcmNhc2UgX1B5VW5pY29kZVVDUzRfSXNMb3dlcmNhc2UKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNOdW1lcmljIF9QeVVuaWNvZGVVQ1M0X0lzTnVtZXJpYwotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc1ByaW50YWJsZSBfUHlVbmljb2RlVUNTNF9Jc1ByaW50YWJsZQotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc1RpdGxlY2FzZSBfUHlVbmljb2RlVUNTNF9Jc1RpdGxlY2FzZQotIyBkZWZpbmUgX1B5VW5pY29kZV9Jc1hpZFN0YXJ0IF9QeVVuaWNvZGVVQ1M0X0lzWGlkU3RhcnQKLSMgZGVmaW5lIF9QeVVuaWNvZGVfSXNYaWRDb250aW51ZSBfUHlVbmljb2RlVUNTNF9Jc1hpZENvbnRpbnVlCi0jIGRlZmluZSBfUHlVbmljb2RlX0lzVXBwZXJjYXNlIF9QeVVuaWNvZGVVQ1M0X0lzVXBwZXJjYXNlCi0jIGRlZmluZSBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZSBfUHlVbmljb2RlVUNTNF9Jc1doaXRlc3BhY2UKLSMgZGVmaW5lIF9QeVVuaWNvZGVfVG9EZWNpbWFsRGlnaXQgX1B5VW5pY29kZVVDUzRfVG9EZWNpbWFsRGlnaXQKLSMgZGVmaW5lIF9QeVVuaWNvZGVfVG9EaWdpdCBfUHlVbmljb2RlVUNTNF9Ub0RpZ2l0Ci0jIGRlZmluZSBfUHlVbmljb2RlX1RvTG93ZXJjYXNlIF9QeVVuaWNvZGVVQ1M0X1RvTG93ZXJjYXNlCi0jIGRlZmluZSBfUHlVbmljb2RlX1RvTnVtZXJpYyBfUHlVbmljb2RlVUNTNF9Ub051bWVyaWMKLSMgZGVmaW5lIF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UgX1B5VW5pY29kZVVDUzRfVG9UaXRsZWNhc2UKLSMgZGVmaW5lIF9QeVVuaWNvZGVfVG9VcHBlcmNhc2UgX1B5VW5pY29kZVVDUzRfVG9VcHBlcmNhc2UKLQorIyBkZWZpbmUgUHlVbmljb2RlX3N0cmR1cCBQeVVuaWNvZGVVQ1M0X3N0cmR1cAogCiAjZW5kaWYKIAogLyogLS0tIEludGVybmFsIFVuaWNvZGUgT3BlcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIElmIHlvdSB3YW50IFB5dGhvbiB0byB1c2UgdGhlIGNvbXBpbGVyJ3Mgd2N0eXBlLmggZnVuY3Rpb25zIGluc3RlYWQKLSAgIG9mIHRoZSBvbmVzIHN1cHBsaWVkIHdpdGggUHl0aG9uLCBkZWZpbmUgV0FOVF9XQ1RZUEVfRlVOQ1RJT05TIG9yCi0gICBjb25maWd1cmUgUHl0aG9uIHVzaW5nIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zLiAgVGhpcyByZWR1Y2VzIHRoZQotICAgaW50ZXJwcmV0ZXIncyBjb2RlIHNpemUuICovCi0KLSNpZiBkZWZpbmVkKEhBVkVfVVNBQkxFX1dDSEFSX1QpICYmIGRlZmluZWQoV0FOVF9XQ1RZUEVfRlVOQ1RJT05TKQotCi0jaW5jbHVkZSA8d2N0eXBlLmg+Ci0KLSNkZWZpbmUgUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSBpc3dzcGFjZShjaCkKLQotI2RlZmluZSBQeV9VTklDT0RFX0lTTE9XRVIoY2gpIGlzd2xvd2VyKGNoKQotI2RlZmluZSBQeV9VTklDT0RFX0lTVVBQRVIoY2gpIGlzd3VwcGVyKGNoKQotI2RlZmluZSBQeV9VTklDT0RFX0lTVElUTEUoY2gpIF9QeVVuaWNvZGVfSXNUaXRsZWNhc2UoY2gpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNMSU5FQlJFQUsoY2gpIF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsoY2gpCi0KLSNkZWZpbmUgUHlfVU5JQ09ERV9UT0xPV0VSKGNoKSB0b3dsb3dlcihjaCkKLSNkZWZpbmUgUHlfVU5JQ09ERV9UT1VQUEVSKGNoKSB0b3d1cHBlcihjaCkKLSNkZWZpbmUgUHlfVU5JQ09ERV9UT1RJVExFKGNoKSBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKGNoKQotCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNERUNJTUFMKGNoKSBfUHlVbmljb2RlX0lzRGVjaW1hbERpZ2l0KGNoKQotI2RlZmluZSBQeV9VTklDT0RFX0lTRElHSVQoY2gpIF9QeVVuaWNvZGVfSXNEaWdpdChjaCkKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU05VTUVSSUMoY2gpIF9QeVVuaWNvZGVfSXNOdW1lcmljKGNoKQotI2RlZmluZSBQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSBfUHlVbmljb2RlX0lzUHJpbnRhYmxlKGNoKQotCi0jZGVmaW5lIFB5X1VOSUNPREVfVE9ERUNJTUFMKGNoKSBfUHlVbmljb2RlX1RvRGVjaW1hbERpZ2l0KGNoKQotI2RlZmluZSBQeV9VTklDT0RFX1RPRElHSVQoY2gpIF9QeVVuaWNvZGVfVG9EaWdpdChjaCkKLSNkZWZpbmUgUHlfVU5JQ09ERV9UT05VTUVSSUMoY2gpIF9QeVVuaWNvZGVfVG9OdW1lcmljKGNoKQotCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNBTFBIQShjaCkgaXN3YWxwaGEoY2gpCi0KLSNlbHNlCi0KIC8qIFNpbmNlIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlIGlzIGFuIGltcG9ydGFudCB1c2UgY2FzZSwgYW5kCiAgICB3aGl0ZXNwYWNlIGluIG1vc3Qgc2l0dWF0aW9ucyBpcyBzb2xlbHkgQVNDSUkgd2hpdGVzcGFjZSwgd2UKICAgIG9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2UgYnkgdXNpbmcgYSBxdWljayBsb29rLXVwIHRhYmxlCiAgICBfUHlfYXNjaWlfd2hpdGVzcGFjZSAoc2VlIGJlbG93KSB3aXRoIGFuIGlubGluZWQgY2hlY2suCiAKICAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeV9VTklDT0RFX0lTU1BBQ0UoY2gpIFwKICAgICAoKGNoKSA8IDEyOFUgPyBfUHlfYXNjaWlfd2hpdGVzcGFjZVsoY2gpXSA6IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNoKSkKIApAQCAtNDA1LDggKzM0NCw2IEBACiAKICNkZWZpbmUgUHlfVU5JQ09ERV9JU0FMUEhBKGNoKSBfUHlVbmljb2RlX0lzQWxwaGEoY2gpCiAKLSNlbmRpZgotCiAjZGVmaW5lIFB5X1VOSUNPREVfSVNBTE5VTShjaCkgXAogICAgICAgIChQeV9VTklDT0RFX0lTQUxQSEEoY2gpIHx8IFwKICAgICBQeV9VTklDT0RFX0lTREVDSU1BTChjaCkgfHwgXApAQCAtNDI4LDYgKzM2NSw3IEBACiAgICAgKCgqKChzdHJpbmcpLT5zdHIgKyAob2Zmc2V0KSkgPT0gKigoc3Vic3RyaW5nKS0+c3RyKSkgJiYgXAogICAgICgoKigoc3RyaW5nKS0+c3RyICsgKG9mZnNldCkgKyAoc3Vic3RyaW5nKS0+bGVuZ3RoLTEpID09ICooKHN1YnN0cmluZyktPnN0ciArIChzdWJzdHJpbmcpLT5sZW5ndGgtMSkpKSAmJiBcCiAgICAgICFtZW1jbXAoKHN0cmluZyktPnN0ciArIChvZmZzZXQpLCAoc3Vic3RyaW5nKS0+c3RyLCAoc3Vic3RyaW5nKS0+bGVuZ3RoKnNpemVvZihQeV9VTklDT0RFKSkpCisjZW5kaWYgLyogUHlfTElNSVRFRF9BUEkgKi8KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTQzNSwxMSArMzczLDEyIEBACiAKIC8qIC0tLSBVbmljb2RlIFR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5X3NzaXplX3QgbGVuZ3RoOyAgICAgICAgICAvKiBMZW5ndGggb2YgcmF3IFVuaWNvZGUgZGF0YSBpbiBidWZmZXIgKi8KICAgICBQeV9VTklDT0RFICpzdHI7ICAgICAgICAgICAgLyogUmF3IFVuaWNvZGUgYnVmZmVyICovCi0gICAgbG9uZyBoYXNoOyAgICAgICAgICAgICAgICAgIC8qIEhhc2ggdmFsdWU7IC0xIGlmIG5vdCBzZXQgKi8KKyAgICBQeV9oYXNoX3QgaGFzaDsgICAgICAgICAgICAgLyogSGFzaCB2YWx1ZTsgLTEgaWYgbm90IHNldCAqLwogICAgIGludCBzdGF0ZTsgICAgICAgICAgICAgICAgICAvKiAhPSAwIGlmIGludGVybmVkLiBJbiB0aGlzIGNhc2UgdGhlIHR3bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByZWZlcmVuY2VzIGZyb20gdGhlIGRpY3Rpb25hcnkgdG8gdGhpcyBvYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYXJlICpub3QqIGNvdW50ZWQgaW4gb2JfcmVmY250LiAqLwpAQCAtNDQ3LDYgKzM4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgb3IgTlVMTDsgdGhpcyBpcyB1c2VkIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRpbmcgdGhlIGJ1ZmZlciBwcm90b2NvbCAqLwogfSBQeVVuaWNvZGVPYmplY3Q7CisjZW5kaWYKIAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5VW5pY29kZV9UeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5VW5pY29kZUl0ZXJfVHlwZTsKQEAgLTQ2MCw2ICs0MDAsNyBAQAogI2RlZmluZSBQeVVuaWNvZGVfQ2hlY2tFeGFjdChvcCkgKFB5X1RZUEUob3ApID09ICZQeVVuaWNvZGVfVHlwZSkKIAogLyogRmFzdCBhY2Nlc3MgbWFjcm9zICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAjZGVmaW5lIFB5VW5pY29kZV9HRVRfU0laRShvcCkgXAogICAgIChhc3NlcnQoUHlVbmljb2RlX0NoZWNrKG9wKSksKCgoUHlVbmljb2RlT2JqZWN0ICopKG9wKSktPmxlbmd0aCkpCiAjZGVmaW5lIFB5VW5pY29kZV9HRVRfREFUQV9TSVpFKG9wKSBcCkBAIC00NjgsNiArNDA5LDcgQEAKICAgICAoYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhvcCkpLCgoKFB5VW5pY29kZU9iamVjdCAqKShvcCkpLT5zdHIpKQogI2RlZmluZSBQeVVuaWNvZGVfQVNfREFUQShvcCkgXAogICAgIChhc3NlcnQoUHlVbmljb2RlX0NoZWNrKG9wKSksKChjb25zdCBjaGFyICopKChQeVVuaWNvZGVPYmplY3QgKikob3ApKS0+c3RyKSkKKyNlbmRpZgogCiAvKiAtLS0gQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNDkyLDI5ICs0MzQsMzMgQEAKIAogICAgVGhlIGJ1ZmZlciBpcyBjb3BpZWQgaW50byB0aGUgbmV3IG9iamVjdC4gKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tVW5pY29kZSgKICAgICBjb25zdCBQeV9VTklDT0RFICp1LCAgICAgICAgLyogVW5pY29kZSBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOworI2VuZGlmCiAKIC8qIFNpbWlsYXIgdG8gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCksIGJ1dCB1IHBvaW50cyB0byBVVEYtOCBlbmNvZGVkIGJ5dGVzICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKAotICAgIGNvbnN0IGNoYXIgKnUsICAgICAgICAvKiBjaGFyIGJ1ZmZlciAqLwotICAgIFB5X3NzaXplX3Qgc2l6ZSAgICAgICAvKiBzaXplIG9mIGJ1ZmZlciAqLworICAgIGNvbnN0IGNoYXIgKnUsICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCiAvKiBTaW1pbGFyIHRvIFB5VW5pY29kZV9Gcm9tVW5pY29kZSgpLCBidXQgdSBwb2ludHMgdG8gbnVsbC10ZXJtaW5hdGVkCiAgICBVVEYtOCBlbmNvZGVkIGJ5dGVzICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21TdHJpbmcoCi0gICAgY29uc3QgY2hhciAqdSAgICAgICAgLyogc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqdSAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICApOwogCiAvKiBSZXR1cm4gYSByZWFkLW9ubHkgcG9pbnRlciB0byB0aGUgVW5pY29kZSBvYmplY3QncyBpbnRlcm5hbAogICAgUHlfVU5JQ09ERSBidWZmZXIuICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlfVU5JQ09ERSAqKSBQeVVuaWNvZGVfQXNVbmljb2RlKAogICAgIFB5T2JqZWN0ICp1bmljb2RlICAgICAgICAgICAvKiBVbmljb2RlIG9iamVjdCAqLwogICAgICk7CisjZW5kaWYKIAogLyogR2V0IHRoZSBsZW5ndGggb2YgdGhlIFVuaWNvZGUgb2JqZWN0LiAqLwogCkBAIC01MjIsOCArNDY4LDEwIEBACiAgICAgUHlPYmplY3QgKnVuaWNvZGUgICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCiAgICAgKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogLyogR2V0IHRoZSBtYXhpbXVtIG9yZGluYWwgZm9yIGEgVW5pY29kZSBjaGFyYWN0ZXIuICovCiBQeUFQSV9GVU5DKFB5X1VOSUNPREUpIFB5VW5pY29kZV9HZXRNYXgodm9pZCk7CisjZW5kaWYKIAogLyogUmVzaXplIGFuIGFscmVhZHkgYWxsb2NhdGVkIFVuaWNvZGUgb2JqZWN0IHRvIHRoZSBuZXcgc2l6ZSBsZW5ndGguCiAKQEAgLTU4NCwxOSArNTMyLDMxIEBACiAgICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9iaiAgICAgIC8qIE9iamVjdCAqLwogICAgICk7CiAKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGNvbnN0IGNoYXIqLCB2YV9saXN0KTsKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlVbmljb2RlX0Zyb21Gb3JtYXQoY29uc3QgY2hhciosIC4uLik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigKKyAgICBjb25zdCBjaGFyICpmb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCisgICAgdmFfbGlzdCB2YXJncworICAgICk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgICAvKiBBU0NJSS1lbmNvZGVkIHN0cmluZyAgKi8KKyAgICAuLi4KKyAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiAvKiBGb3JtYXQgdGhlIG9iamVjdCBiYXNlZCBvbiB0aGUgZm9ybWF0X3NwZWMsIGFzIGRlZmluZWQgaW4gUEVQIDMxMDEKICAgIChBZHZhbmNlZCBTdHJpbmcgRm9ybWF0dGluZykuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVVuaWNvZGVfRm9ybWF0QWR2YW5jZWQoUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VTklDT0RFICpmb3JtYXRfc3BlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGZvcm1hdF9zcGVjX2xlbik7CisjZW5kaWYKIAogUHlBUElfRlVOQyh2b2lkKSBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZShQeU9iamVjdCAqKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbChQeU9iamVjdCAqKik7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKAorICAgIGNvbnN0IGNoYXIgKnUgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgKTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkModm9pZCkgX1B5X1JlbGVhc2VJbnRlcm5lZFVuaWNvZGVTdHJpbmdzKHZvaWQpOworI2VuZGlmCiAKIC8qIFVzZSBvbmx5IGlmIHlvdSBrbm93IGl0J3MgYSBzdHJpbmcgKi8KICNkZWZpbmUgUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKG9wKSAoKChQeVVuaWNvZGVPYmplY3QgKikob3ApKS0+c3RhdGUpCkBAIC02MjgsMTEgKzU4OCwyNCBAQAogICAgZXJyb3IuICovCiAKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlVbmljb2RlX0FzV2lkZUNoYXIoCi0gICAgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlLCAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCisgICAgUHlPYmplY3QgKnVuaWNvZGUsICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCiAgICAgcmVnaXN0ZXIgd2NoYXJfdCAqdywgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIAorLyogQ29udmVydCB0aGUgVW5pY29kZSBvYmplY3QgdG8gYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcuIFRoZSBvdXRwdXQgc3RyaW5nCisgICBhbHdheXMgZW5kcyB3aXRoIGEgbnVsIGNoYXJhY3Rlci4gSWYgc2l6ZSBpcyBub3QgTlVMTCwgd3JpdGUgdGhlIG51bWJlciBvZgorICAgd2lkZSBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgdGhlIG51bCBjaGFyYWN0ZXIpIGludG8gKnNpemUuCisKKyAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IFB5TWVtX0FsbG9jKCkgKHVzZSBQeU1lbV9GcmVlKCkgdG8gZnJlZSBpdCkKKyAgIG9uIHN1Y2Nlc3MuIE9uIGVycm9yLCByZXR1cm5zIE5VTEwsICpzaXplIGlzIHVuZGVmaW5lZCBhbmQgcmFpc2VzIGEKKyAgIE1lbW9yeUVycm9yLiAqLworCitQeUFQSV9GVU5DKHdjaGFyX3QqKSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZygKKyAgICBQeU9iamVjdCAqdW5pY29kZSwgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KKyAgICBQeV9zc2l6ZV90ICpzaXplICAgICAgICAgICAgLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMgb2YgdGhlIHJlc3VsdCAqLworICAgICk7CisKICNlbmRpZgogCiAvKiAtLS0gVW5pY29kZSBvcmRpbmFscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTY5Myw5ICs2NjYsMTEgQEAKIAogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlVbmljb2RlX0FzRGVmYXVsdEVuY29kZWRTdHJpbmcoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsCiAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKyNlbmRpZgogCiAvKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVmYXVsdCBlbmNvZGluZyAoVVRGLTgpIG9mIHRoZQogICAgVW5pY29kZSBvYmplY3QgdW5pY29kZSBhbmQgdGhlIHNpemUgb2YgdGhlIGVuY29kZWQgcmVwcmVzZW50YXRpb24KQEAgLTcxMSw5ICs2ODYsMTEgQEAKIAogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhjaGFyICopIF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKAogICAgIFB5T2JqZWN0ICp1bmljb2RlLAogICAgIFB5X3NzaXplX3QgKnNpemUpOworI2VuZGlmCiAKIC8qIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZWZhdWx0IGVuY29kaW5nIChVVEYtOCkgb2YgdGhlCiAgICBVbmljb2RlIG9iamVjdCB1bmljb2RlLgpAQCAtNzI5LDIyICs3MDYsMTQgQEAKIAogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhjaGFyICopIF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlPYmplY3QgKnVuaWNvZGUpOworI2VuZGlmCiAKIC8qIFJldHVybnMgInV0Zi04Ii4gICovCiAKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciopIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmcodm9pZCk7CiAKLS8qIFNldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgZGVmYXVsdCBlbmNvZGluZy4KLQotICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLSAqLwotCi1QeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZygKLSAgICBjb25zdCBjaGFyICplbmNvZGluZyAgICAgICAgLyogRW5jb2RpbmcgbmFtZSBpbiBzdGFuZGFyZCBmb3JtICovCi0gICAgKTsKLQogLyogLS0tIEdlbmVyaWMgQ29kZWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIC8qIENyZWF0ZSBhIFVuaWNvZGUgb2JqZWN0IGJ5IGRlY29kaW5nIHRoZSBlbmNvZGVkIHN0cmluZyBzIG9mIHRoZQpAQCAtNzc4LDEyICs3NDcsMTQgQEAKIC8qIEVuY29kZXMgYSBQeV9VTklDT0RFIGJ1ZmZlciBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQgcmV0dXJucyBhCiAgICBQeXRob24gc3RyaW5nIG9iamVjdC4gKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGUoCiAgICAgY29uc3QgUHlfVU5JQ09ERSAqcywgICAgICAgIC8qIFVuaWNvZGUgY2hhciBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUsICAgICAgICAgICAgLyogbnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKKyNlbmRpZgogCiAvKiBFbmNvZGVzIGEgVW5pY29kZSBvYmplY3QgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBQeXRob24KICAgIG9iamVjdC4gKi8KQEAgLTgzMyw2ICs4MDQsNyBAQAogICAgIFB5X3NzaXplX3QgKmNvbnN1bWVkICAgICAgICAvKiBieXRlcyBjb25zdW1lZCAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlVVRGNygKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBudW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KQEAgLTg0MCw2ICs4MTIsNyBAQAogICAgIGludCBiYXNlNjRXaGl0ZVNwYWNlLCAgICAgICAvKiBFbmNvZGUgd2hpdGVzcGFjZSAoc3AsIGh0LCBubCwgY3IpIGluIGJhc2U2NCAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CisjZW5kaWYKIAogLyogLS0tIFVURi04IENvZGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTg2MCwxMSArODMzLDEzIEBACiAgICAgUHlPYmplY3QgKnVuaWNvZGUgICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCiAgICAgKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVVVEY4KAogICAgIGNvbnN0IFB5X1VOSUNPREUgKmRhdGEsICAgICAvKiBVbmljb2RlIGNoYXIgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBsZW5ndGgsICAgICAgICAgIC8qIG51bWJlciBvZiBQeV9VTklDT0RFIGNoYXJzIHRvIGVuY29kZSAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CisjZW5kaWYKIAogLyogLS0tIFVURi0zMiBDb2RlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTkzMywxMiArOTA4LDE0IEBACiAKICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlVVRGMzIoCiAgICAgY29uc3QgUHlfVU5JQ09ERSAqZGF0YSwgICAgIC8qIFVuaWNvZGUgY2hhciBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgICAgICAgICAgLyogbnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzLCAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgaW50IGJ5dGVvcmRlciAgICAgICAgICAgICAgIC8qIGJ5dGVvcmRlciB0byB1c2UgMD1CT00rbmF0aXZlOy0xPUxFLDE9QkUgKi8KICAgICApOworI2VuZGlmCiAKIC8qIC0tLSBVVEYtMTYgQ29kZWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMDExLDEyICs5ODgsMTQgQEAKIAogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVVVEYxNigKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBudW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICBjb25zdCBjaGFyICplcnJvcnMsICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICBpbnQgYnl0ZW9yZGVyICAgICAgICAgICAgICAgLyogYnl0ZW9yZGVyIHRvIHVzZSAwPUJPTStuYXRpdmU7LTE9TEUsMT1CRSAqLwogICAgICk7CisjZW5kaWYKIAogLyogLS0tIFVuaWNvZGUtRXNjYXBlIENvZGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKQEAgLTEwMzAsMTAgKzEwMDksMTIgQEAKICAgICBQeU9iamVjdCAqdW5pY29kZSAgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KICAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZVVuaWNvZGVFc2NhcGUoCiAgICAgY29uc3QgUHlfVU5JQ09ERSAqZGF0YSwgICAgIC8qIFVuaWNvZGUgY2hhciBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IGxlbmd0aCAgICAgICAgICAgLyogTnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCiAgICAgKTsKKyNlbmRpZgogCiAvKiAtLS0gUmF3LVVuaWNvZGUtRXNjYXBlIENvZGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTA0NywyMCArMTAyOCwyNCBAQAogICAgIFB5T2JqZWN0ICp1bmljb2RlICAgICAgICAgICAvKiBVbmljb2RlIG9iamVjdCAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlUmF3VW5pY29kZUVzY2FwZSgKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoICAgICAgICAgICAvKiBOdW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICApOworI2VuZGlmCiAKIC8qIC0tLSBVbmljb2RlIEludGVybmFsIENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgT25seSBmb3IgaW50ZXJuYWwgdXNlIGluIF9jb2RlY3Ntb2R1bGUuYyAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeU9iamVjdCAqX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwoCiAgICAgY29uc3QgY2hhciAqc3RyaW5nLAogICAgIFB5X3NzaXplX3QgbGVuZ3RoLAogICAgIGNvbnN0IGNoYXIgKmVycm9ycwogICAgICk7CisjZW5kaWYKIAogLyogLS0tIExhdGluLTEgQ29kZWNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTEwNzgsMTEgKzEwNjMsMTMgQEAKICAgICBQeU9iamVjdCAqdW5pY29kZSAgICAgICAgICAgLyogVW5pY29kZSBvYmplY3QgKi8KICAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZUxhdGluMSgKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBOdW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOworI2VuZGlmCiAKIC8qIC0tLSBBU0NJSSBDb2RlY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTAwLDExICsxMDg3LDEzIEBACiAgICAgUHlPYmplY3QgKnVuaWNvZGUgICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCiAgICAgKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVBU0NJSSgKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBOdW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOworI2VuZGlmCiAKIC8qIC0tLSBDaGFyYWN0ZXIgTWFwIENvZGVjcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTQyLDYgKzExMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5pY29kZSBvcmRpbmFsIC0+IGNoYXIgb3JkaW5hbCkgKi8KICAgICApOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0VuY29kZUNoYXJtYXAoCiAgICAgY29uc3QgUHlfVU5JQ09ERSAqZGF0YSwgICAgIC8qIFVuaWNvZGUgY2hhciBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgICAgICAgICAgLyogTnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCkBAIC0xMTQ5LDYgKzExMzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5pY29kZSBvcmRpbmFsIC0+IGNoYXIgb3JkaW5hbCkgKi8KICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOworI2VuZGlmCiAKIC8qIFRyYW5zbGF0ZSBhIFB5X1VOSUNPREUgYnVmZmVyIG9mIHRoZSBnaXZlbiBsZW5ndGggYnkgYXBwbHlpbmcgYQogICAgY2hhcmFjdGVyIG1hcHBpbmcgdGFibGUgdG8gaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIFVuaWNvZGUKQEAgLTExNjMsMTIgKzExNTQsMTQgQEAKIAogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBOdW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICBQeU9iamVjdCAqdGFibGUsICAgICAgICAgICAgLyogVHJhbnNsYXRlIHRhYmxlICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKKyNlbmRpZgogCiAjaWZkZWYgTVNfV0lOMzIKIApAQCAtMTE5MSwxMSArMTE4NCwxMyBAQAogICAgIFB5T2JqZWN0ICp1bmljb2RlICAgICAgICAgICAvKiBVbmljb2RlIG9iamVjdCAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlTUJDUygKICAgICBjb25zdCBQeV9VTklDT0RFICpkYXRhLCAgICAgLyogVW5pY29kZSBjaGFyIGJ1ZmZlciAqLwogICAgIFB5X3NzaXplX3QgbGVuZ3RoLCAgICAgICAgICAvKiBOdW1iZXIgb2YgUHlfVU5JQ09ERSBjaGFycyB0byBlbmNvZGUgKi8KICAgICBjb25zdCBjaGFyICplcnJvcnMgICAgICAgICAgLyogZXJyb3IgaGFuZGxpbmcgKi8KICAgICApOworI2VuZGlmCiAKICNlbmRpZiAvKiBNU19XSU4zMiAqLwogCkBAIC0xMjIzLDI3ICsxMjE4LDQ3IEBACiAKICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgKICAgICBQeV9VTklDT0RFICpzLCAgICAgICAgICAgICAgLyogVW5pY29kZSBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgICAgICAgICAgLyogTnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gZW5jb2RlICovCiAgICAgY2hhciAqb3V0cHV0LCAgICAgICAgICAgICAgIC8qIE91dHB1dCBidWZmZXI7IG11c3QgaGF2ZSBzaXplID49IGxlbmd0aCAqLwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyAgICAgICAgICAvKiBlcnJvciBoYW5kbGluZyAqLwogICAgICk7CisjZW5kaWYKKworLyogVHJhbnNmb3JtcyBjb2RlIHBvaW50cyB0aGF0IGhhdmUgZGVjaW1hbCBkaWdpdCBwcm9wZXJ0eSB0byB0aGUKKyAgIGNvcnJlc3BvbmRpbmcgQVNDSUkgZGlnaXQgY29kZSBwb2ludHMuCisKKyAgIFJldHVybnMgYSBuZXcgVW5pY29kZSBzdHJpbmcgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorKi8KKworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9UcmFuc2Zvcm1EZWNpbWFsVG9BU0NJSSgKKyAgICBQeV9VTklDT0RFICpzLCAgICAgICAgICAgICAgLyogVW5pY29kZSBidWZmZXIgKi8KKyAgICBQeV9zc2l6ZV90IGxlbmd0aCAgICAgICAgICAgLyogTnVtYmVyIG9mIFB5X1VOSUNPREUgY2hhcnMgdG8gdHJhbnNmb3JtICovCisgICAgKTsKKyNlbmRpZgogCiAvKiAtLS0gRmlsZSBzeXN0ZW0gZW5jb2RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKiBQYXJzZVR1cGxlIGNvbnZlcnRlciB3aGljaCBjb252ZXJ0cyBhIFVuaWNvZGUgb2JqZWN0IGludG8gdGhlIGZpbGUKLSAgIHN5c3RlbSBlbmNvZGluZyBhcyBhIGJ5dGVzIG9iamVjdCwgdXNpbmcgdGhlICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yCi0gICBoYW5kbGVyOyBieXRlcyBvYmplY3RzIGFyZSBvdXRwdXQgYXMtaXMuICovCisvKiBQYXJzZVR1cGxlIGNvbnZlcnRlcjogZW5jb2RlIHN0ciBvYmplY3RzIHRvIGJ5dGVzIHVzaW5nCisgICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCk7IGJ5dGVzIG9iamVjdHMgYXJlIG91dHB1dCBhcy1pcy4gKi8KIAogUHlBUElfRlVOQyhpbnQpIFB5VW5pY29kZV9GU0NvbnZlcnRlcihQeU9iamVjdCosIHZvaWQqKTsKIAorLyogUGFyc2VUdXBsZSBjb252ZXJ0ZXI6IGRlY29kZSBieXRlcyBvYmplY3RzIHRvIHVuaWNvZGUgdXNpbmcKKyAgIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKCk7IHN0ciBvYmplY3RzIGFyZSBvdXRwdXQgYXMtaXMuICovCisKK1B5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfRlNEZWNvZGVyKFB5T2JqZWN0Kiwgdm9pZCopOworCiAvKiBEZWNvZGUgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHVzaW5nIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcKICAgIGFuZCB0aGUgInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IgaGFuZGxlci4KIAotICAgSWYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gVVRGLTguCisgICBJZiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIGlzIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZy4KIAotICAgVXNlIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKCkgaWYgeW91IGhhdmUgdGhlIHN0cmluZyBsZW5ndGguCisgICBVc2UgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoKSBpZiB0aGUgc3RyaW5nIGxlbmd0aCBpcyBrbm93bi4KICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KApAQCAtMTI1Myw3ICsxMjY4LDggQEAKIC8qIERlY29kZSBhIHN0cmluZyB1c2luZyBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nCiAgICBhbmQgdGhlICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIuCiAKLSAgIElmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgaXMgbm90IHNldCwgZmFsbCBiYWNrIHRvIFVURi04LgorICAgSWYgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBpcyBub3Qgc2V0LCBmYWxsIGJhY2sgdG8gdGhlIGxvY2FsZQorICAgZW5jb2RpbmcuCiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoCkBAIC0xMjYxLDYgKzEyNzcsMTcgQEAKICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgIC8qIHNpemUgKi8KICAgICApOwogCisvKiBFbmNvZGUgYSBVbmljb2RlIG9iamVjdCB0byBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIHdpdGggdGhlCisgICAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyLCBhbmQgcmV0dXJuIGJ5dGVzLgorCisgICBJZiBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIGlzIG5vdCBzZXQsIGZhbGwgYmFjayB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZy4KKyovCisKK1B5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KAorICAgIFB5T2JqZWN0ICp1bmljb2RlCisgICAgKTsKKwogLyogLS0tIE1ldGhvZHMgJiBTbG90cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgIFRoZXNlIGFyZSBjYXBhYmxlIG9mIGhhbmRsaW5nIFVuaWNvZGUgb2JqZWN0cyBhbmQgc3RyaW5ncyBvbiBpbnB1dApAQCAtMTQzMCw3ICsxNDU3LDcgQEAKIAogUHlBUElfRlVOQyhpbnQpIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKAogICAgIFB5T2JqZWN0ICpsZWZ0LAotICAgIGNvbnN0IGNoYXIgKnJpZ2h0CisgICAgY29uc3QgY2hhciAqcmlnaHQgICAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIAogLyogUmljaCBjb21wYXJlIHR3byBzdHJpbmdzIGFuZCByZXR1cm4gb25lIG9mIHRoZSBmb2xsb3dpbmc6CkBAIC0xNDc4LDI2ICsxNTA1LDMxIEBACiAKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfSXNJZGVudGlmaWVyKFB5T2JqZWN0ICpzKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogLyogRXh0ZXJuYWxseSB2aXNpYmxlIGZvciBzdHIuc3RyaXAodW5pY29kZSkgKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5VW5pY29kZV9YU3RyaXAoCiAgICAgUHlVbmljb2RlT2JqZWN0ICpzZWxmLAogICAgIGludCBzdHJpcHR5cGUsCiAgICAgUHlPYmplY3QgKnNlcG9iagogICAgICk7CisjZW5kaWYKIAogLyogVXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZwogICAgaW50byB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgYnVmZmVyLiAgRm9yIHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbnMsCiAgICBzZWUgT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oICovCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5VW5pY29kZV9JbnNlcnRUaG91c2FuZHNHcm91cGluZ0xvY2FsZShQeV9VTklDT0RFICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqZGlnaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2RpZ2l0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoKTsKKyNlbmRpZgogCiAvKiBVc2luZyBleHBsaWNpdCBwYXNzZWQtaW4gdmFsdWVzLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZwogICAgaW50byB0aGUgc3RyaW5nIHBvaW50ZWQgdG8gYnkgYnVmZmVyLiAgRm9yIHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbnMsCiAgICBzZWUgT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKFB5X3NzaXplX3QpIF9QeVVuaWNvZGVfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcoUHlfVU5JQ09ERSAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgKmRpZ2l0cywKQEAgLTE1MDUsMTAgKzE1MzcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWluX3dpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0aG91c2FuZHNfc2VwKTsKKyNlbmRpZgogLyogPT09IENoYXJhY3RlcnMgVHlwZSBBUElzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKIC8qIEhlbHBlciBhcnJheSB1c2VkIGJ5IFB5X1VOSUNPREVfSVNTUEFDRSgpLiAqLwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKGNvbnN0IHVuc2lnbmVkIGNoYXIpIF9QeV9hc2NpaV93aGl0ZXNwYWNlW107CiAKIC8qIFRoZXNlIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gVXNlIHRoZSBQeV9VTklDT0RFX0lTKiBhbmQKQEAgLTE1MTksOTIgKzE1NTMsMTIzIEBACiAqLwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc0xvd2VyY2FzZSgKLSAgICBQeV9VTklDT0RFIGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgUHlfVUNTNCBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0lzVXBwZXJjYXNlKAotICAgIFB5X1VOSUNPREUgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KKyAgICBQeV9VQ1M0IGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhpbnQpIF9QeVVuaWNvZGVfSXNUaXRsZWNhc2UoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc1hpZFN0YXJ0KAotICAgIFB5X1VOSUNPREUgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KKyAgICBQeV9VQ1M0IGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhpbnQpIF9QeVVuaWNvZGVfSXNYaWRDb250aW51ZSgKLSAgICBQeV9VTklDT0RFIGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgUHlfVUNTNCBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZSgKLSAgICBjb25zdCBQeV9VTklDT0RFIGNoICAgICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KKyAgICBjb25zdCBQeV9VQ1M0IGNoICAgICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc0xpbmVicmVhaygKLSAgICBjb25zdCBQeV9VTklDT0RFIGNoICAgICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KKyAgICBjb25zdCBQeV9VQ1M0IGNoICAgICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCi1QeUFQSV9GVU5DKFB5X1VOSUNPREUpIF9QeVVuaWNvZGVfVG9Mb3dlcmNhc2UoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworUHlBUElfRlVOQyhQeV9VQ1M0KSBfUHlVbmljb2RlX1RvTG93ZXJjYXNlKAorICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCi1QeUFQSV9GVU5DKFB5X1VOSUNPREUpIF9QeVVuaWNvZGVfVG9VcHBlcmNhc2UoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworUHlBUElfRlVOQyhQeV9VQ1M0KSBfUHlVbmljb2RlX1RvVXBwZXJjYXNlKAorICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCi1QeUFQSV9GVU5DKFB5X1VOSUNPREUpIF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworUHlBUElfRlVOQyhQeV9VQ1M0KSBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKAorICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Ub0RlY2ltYWxEaWdpdCgKLSAgICBQeV9VTklDT0RFIGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgUHlfVUNTNCBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX1RvRGlnaXQoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGRvdWJsZSkgX1B5VW5pY29kZV9Ub051bWVyaWMoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc0RlY2ltYWxEaWdpdCgKLSAgICBQeV9VTklDT0RFIGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgUHlfVUNTNCBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0lzRGlnaXQoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc051bWVyaWMoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCiBQeUFQSV9GVU5DKGludCkgX1B5VW5pY29kZV9Jc1ByaW50YWJsZSgKLSAgICBQeV9VTklDT0RFIGNoICAgICAgIC8qIFVuaWNvZGUgY2hhcmFjdGVyICovCisgICAgUHlfVUNTNCBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLwogICAgICk7CiAKIFB5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0lzQWxwaGEoCi0gICAgUHlfVU5JQ09ERSBjaCAgICAgICAvKiBVbmljb2RlIGNoYXJhY3RlciAqLworICAgIFB5X1VDUzQgY2ggICAgICAgLyogVW5pY29kZSBjaGFyYWN0ZXIgKi8KICAgICApOwogCi1QeUFQSV9GVU5DKHNpemVfdCkgUHlfVU5JQ09ERV9zdHJsZW4oY29uc3QgUHlfVU5JQ09ERSAqdSk7CitQeUFQSV9GVU5DKHNpemVfdCkgUHlfVU5JQ09ERV9zdHJsZW4oCisgICAgY29uc3QgUHlfVU5JQ09ERSAqdQorICAgICk7CiAKIFB5QVBJX0ZVTkMoUHlfVU5JQ09ERSopIFB5X1VOSUNPREVfc3RyY3B5KAorICAgIFB5X1VOSUNPREUgKnMxLAorICAgIGNvbnN0IFB5X1VOSUNPREUgKnMyKTsKKworUHlBUElfRlVOQyhQeV9VTklDT0RFKikgUHlfVU5JQ09ERV9zdHJjYXQoCiAgICAgUHlfVU5JQ09ERSAqczEsIGNvbnN0IFB5X1VOSUNPREUgKnMyKTsKIAogUHlBUElfRlVOQyhQeV9VTklDT0RFKikgUHlfVU5JQ09ERV9zdHJuY3B5KAotICAgIFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMiwgc2l6ZV90IG4pOworICAgIFB5X1VOSUNPREUgKnMxLAorICAgIGNvbnN0IFB5X1VOSUNPREUgKnMyLAorICAgIHNpemVfdCBuKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5X1VOSUNPREVfc3RyY21wKAotICAgIGNvbnN0IFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMik7CisgICAgY29uc3QgUHlfVU5JQ09ERSAqczEsCisgICAgY29uc3QgUHlfVU5JQ09ERSAqczIKKyAgICApOworCitQeUFQSV9GVU5DKGludCkgUHlfVU5JQ09ERV9zdHJuY21wKAorICAgIGNvbnN0IFB5X1VOSUNPREUgKnMxLAorICAgIGNvbnN0IFB5X1VOSUNPREUgKnMyLAorICAgIHNpemVfdCBuCisgICAgKTsKIAogUHlBUElfRlVOQyhQeV9VTklDT0RFKikgUHlfVU5JQ09ERV9zdHJjaHIoCi0gICAgY29uc3QgUHlfVU5JQ09ERSAqcywgUHlfVU5JQ09ERSBjCisgICAgY29uc3QgUHlfVU5JQ09ERSAqcywKKyAgICBQeV9VTklDT0RFIGMKICAgICApOwogCitQeUFQSV9GVU5DKFB5X1VOSUNPREUqKSBQeV9VTklDT0RFX3N0cnJjaHIoCisgICAgY29uc3QgUHlfVU5JQ09ERSAqcywKKyAgICBQeV9VTklDT0RFIGMKKyAgICApOworCisvKiBDcmVhdGUgYSBjb3B5IG9mIGEgdW5pY29kZSBzdHJpbmcgZW5kaW5nIHdpdGggYSBudWwgY2hhcmFjdGVyLiBSZXR1cm4gTlVMTAorICAgYW5kIHJhaXNlIGEgTWVtb3J5RXJyb3IgZXhjZXB0aW9uIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIG90aGVyd2lzZQorICAgcmV0dXJuIGEgbmV3IGFsbG9jYXRlZCBidWZmZXIgKHVzZSBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgYnVmZmVyKS4gKi8KKworUHlBUElfRlVOQyhQeV9VTklDT0RFKikgUHlVbmljb2RlX0FzVW5pY29kZUNvcHkoCisgICAgUHlPYmplY3QgKnVuaWNvZGUKKyAgICApOworI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3dhcm5pbmdzLmggYi9JbmNsdWRlL3dhcm5pbmdzLmgKaW5kZXggZjU0ZWFiZC4uYjdkYjY4MSAxMDA2NDQKLS0tIGEvSW5jbHVkZS93YXJuaW5ncy5oCisrKyBiL0luY2x1ZGUvd2FybmluZ3MuaApAQCAtNCwxNCArNCwzMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CisjZW5kaWYKIAotUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5FeChQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIFB5X3NzaXplX3QpOwotUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5FeHBsaWNpdChQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUVycl9XYXJuRXgoCisgICAgUHlPYmplY3QgKmNhdGVnb3J5LAorICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwpOworUHlBUElfRlVOQyhpbnQpIFB5RXJyX1dhcm5Gb3JtYXQoCisgICAgUHlPYmplY3QgKmNhdGVnb3J5LAorICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCisgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLworICAgIC4uLik7CitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBjb25zdCBjaGFyICptZXNzYWdlLCAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgaW50IGxpbmVubywKKyAgICBjb25zdCBjaGFyICptb2R1bGUsICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBQeU9iamVjdCAqcmVnaXN0cnkpOwogCiAvKiBERVBSRUNBVEVEOiBVc2UgUHlFcnJfV2FybkV4KCkgaW5zdGVhZC4gKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlFcnJfV2FybihjYXRlZ29yeSwgbXNnKSBQeUVycl9XYXJuRXgoY2F0ZWdvcnksIG1zZywgMSkKKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL0luY2x1ZGUvd2Vha3JlZm9iamVjdC5oIGIvSW5jbHVkZS93ZWFrcmVmb2JqZWN0LmgKaW5kZXggZjE1YzlkOWMuLjcyNTgzODcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvd2Vha3JlZm9iamVjdC5oCisrKyBiL0luY2x1ZGUvd2Vha3JlZm9iamVjdC5oCkBAIC0xMiw2ICsxMiw3IEBACiAvKiBQeVdlYWtSZWZlcmVuY2UgaXMgdGhlIGJhc2Ugc3RydWN0IGZvciB0aGUgUHl0aG9uIFJlZmVyZW5jZVR5cGUsIFByb3h5VHlwZSwKICAqIGFuZCBDYWxsYWJsZVByb3h5VHlwZS4KICAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogc3RydWN0IF9QeVdlYWtSZWZlcmVuY2UgewogICAgIFB5T2JqZWN0X0hFQUQKIApAQCAtMjcsNyArMjgsNyBAQAogICAgIC8qIEEgY2FjaGUgZm9yIHdyX29iamVjdCdzIGhhc2ggY29kZS4gIEFzIHVzdWFsIGZvciBoYXNoZXMsIHRoaXMgaXMgLTEKICAgICAgKiBpZiB0aGUgaGFzaCBjb2RlIGlzbid0IGtub3duIHlldC4KICAgICAgKi8KLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAKICAgICAvKiBJZiB3cl9vYmplY3QgaXMgd2Vha2x5IHJlZmVyZW5jZWQsIHdyX29iamVjdCBoYXMgYSBkb3VibHktbGlua2VkIE5VTEwtCiAgICAgICogdGVybWluYXRlZCBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBpdC4gIFRoZXNlIGFyZSB0aGUgbGlzdCBwb2ludGVycy4KQEAgLTM3LDYgKzM4LDcgQEAKICAgICBQeVdlYWtSZWZlcmVuY2UgKndyX3ByZXY7CiAgICAgUHlXZWFrUmVmZXJlbmNlICp3cl9uZXh0OwogfTsKKyNlbmRpZgogCiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgX1B5V2Vha3JlZl9SZWZUeXBlOwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIF9QeVdlYWtyZWZfUHJveHlUeXBlOwpAQCAtNjIsOSArNjQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjYWxsYmFjayk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5V2Vha3JlZl9HZXRPYmplY3QoUHlPYmplY3QgKnJlZik7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoUHlXZWFrUmVmZXJlbmNlICpoZWFkKTsKIAogUHlBUElfRlVOQyh2b2lkKSBfUHlXZWFrcmVmX0NsZWFyUmVmKFB5V2Vha1JlZmVyZW5jZSAqc2VsZik7CisjZW5kaWYKIAogI2RlZmluZSBQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpICgoKFB5V2Vha1JlZmVyZW5jZSAqKShyZWYpKS0+d3Jfb2JqZWN0KQogCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvTElDRU5TRQppbmRleCA4OGUwODlhLi4zNDFkZTE1IDEwMDY0NAotLS0gYS9MSUNFTlNFCisrKyBiL0xJQ0VOU0UKQEAgLTYyLDExICs2MiwxMyBAQAogICAgIDIuNi4yICAgICAgICAgICAyLjYuMSAgICAgICAyMDA5ICAgICAgICBQU0YgICAgICAgICB5ZXMKICAgICAyLjYuMyAgICAgICAgICAgMi42LjIgICAgICAgMjAwOSAgICAgICAgUFNGICAgICAgICAgeWVzCiAgICAgMi42LjQgICAgICAgICAgIDIuNi4zICAgICAgIDIwMDkgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuNi41ICAgICAgICAgICAyLjYuNCAgICAgICAyMDEwICAgICAgICBQU0YgICAgICAgICB5ZXMKICAgICAzLjAgICAgICAgICAgICAgMi42ICAgICAgICAgMjAwOCAgICAgICAgUFNGICAgICAgICAgeWVzCiAgICAgMy4wLjEgICAgICAgICAgIDMuMCAgICAgICAgIDIwMDkgICAgICAgIFBTRiAgICAgICAgIHllcwogICAgIDMuMSAgICAgICAgICAgICAzLjAuMSAgICAgICAyMDA5ICAgICAgICBQU0YgICAgICAgICB5ZXMKICAgICAzLjEuMSAgICAgICAgICAgMy4xICAgICAgICAgMjAwOSAgICAgICAgUFNGICAgICAgICAgeWVzCiAgICAgMy4xLjIgICAgICAgICAgIDMuMSAgICAgICAgIDIwMTAgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDMuMiAgICAgICAgICAgICAzLjEgICAgICAgICAyMDExICAgICAgICBQU0YgICAgICAgICB5ZXMKIAogRm9vdG5vdGVzOgogCkBAIC0xMDEsOSArMTAzLDkgQEAKIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywKIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLAogcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsCi1pLmUuLCAiQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCi1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cyBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvcgotaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KK2kuZS4sICJDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCisyMDExIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgogCiAzLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgogb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQpkaWZmIC0tZ2l0IGEvTGliL19kdW1teV90aHJlYWQucHkgYi9MaWIvX2R1bW15X3RocmVhZC5weQppbmRleCA3YWE2NTc5Li5lZDUwNTIwIDEwMDY0NAotLS0gYS9MaWIvX2R1bW15X3RocmVhZC5weQorKysgYi9MaWIvX2R1bW15X3RocmVhZC5weQpAQCAtMTYsNyArMTYsMTMgQEAKIF9fYWxsX18gPSBbJ2Vycm9yJywgJ3N0YXJ0X25ld190aHJlYWQnLCAnZXhpdCcsICdnZXRfaWRlbnQnLCAnYWxsb2NhdGVfbG9jaycsCiAgICAgICAgICAgICdpbnRlcnJ1cHRfbWFpbicsICdMb2NrVHlwZSddCiAKLWltcG9ydCB0cmFjZWJhY2sgYXMgX3RyYWNlYmFjaworIyBBIGR1bW15IHZhbHVlCitUSU1FT1VUX01BWCA9IDIqKjMxCisKKyMgTk9URTogdGhpcyBtb2R1bGUgY2FuIGJlIGltcG9ydGVkIGVhcmx5IGluIHRoZSBleHRlbnNpb24gYnVpbGRpbmcgcHJvY2VzcywKKyMgYW5kIHNvIHRvcCBsZXZlbCBpbXBvcnRzIG9mIG90aGVyIG1vZHVsZXMgc2hvdWxkIGJlIGF2b2lkZWQuICBJbnN0ZWFkLCBhbGwKKyMgaW1wb3J0cyBhcmUgZG9uZSB3aGVuIG5lZWRlZCBvbiBhIGZ1bmN0aW9uLWJ5LWZ1bmN0aW9uIGJhc2lzLiAgU2luY2UgdGhyZWFkcworIyBhcmUgZGlzYWJsZWQsIHRoZSBpbXBvcnQgbG9jayBzaG91bGQgbm90IGJlIGFuIGlzc3VlIGFueXdheSAoPz8pLgogCiBjbGFzcyBlcnJvcihFeGNlcHRpb24pOgogICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIG9mIF90aHJlYWQuZXJyb3IuIiIiCkBAIC00OCw3ICs1NCw4IEBACiAgICAgZXhjZXB0IFN5c3RlbUV4aXQ6CiAgICAgICAgIHBhc3MKICAgICBleGNlcHQ6Ci0gICAgICAgIF90cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgaW1wb3J0IHRyYWNlYmFjaworICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICBfbWFpbiA9IFRydWUKICAgICBnbG9iYWwgX2ludGVycnVwdAogICAgIGlmIF9pbnRlcnJ1cHQ6CkBAIC05Miw3ICs5OSw3IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBzZWxmLmxvY2tlZF9zdGF0dXMgPSBGYWxzZQogCi0gICAgZGVmIGFjcXVpcmUoc2VsZiwgd2FpdGZsYWc9Tm9uZSk6CisgICAgZGVmIGFjcXVpcmUoc2VsZiwgd2FpdGZsYWc9Tm9uZSwgdGltZW91dD0tMSk6CiAgICAgICAgICIiIkR1bW15IGltcGxlbWVudGF0aW9uIG9mIGFjcXVpcmUoKS4KIAogICAgICAgICBGb3IgYmxvY2tpbmcgY2FsbHMsIHNlbGYubG9ja2VkX3N0YXR1cyBpcyBhdXRvbWF0aWNhbGx5IHNldCB0bwpAQCAtMTExLDYgKzExOCw5IEBACiAgICAgICAgICAgICAgICAgc2VsZi5sb2NrZWRfc3RhdHVzID0gVHJ1ZQogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPiAwOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKHRpbWVvdXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBfX2VudGVyX18gPSBhY3F1aXJlCmRpZmYgLS1naXQgYS9MaWIvX21hcmt1cGJhc2UucHkgYi9MaWIvX21hcmt1cGJhc2UucHkKaW5kZXggYWRmNmJhMi4uOThiOTAzNyAxMDA2NDQKLS0tIGEvTGliL19tYXJrdXBiYXNlLnB5CisrKyBiL0xpYi9fbWFya3VwYmFzZS5weQpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgICAgICAgIyB0aGlzIGNvdWxkIGJlIGhhbmRsZWQgaW4gYSBzZXBhcmF0ZSBkb2N0eXBlIHBhcnNlcgogICAgICAgICAgICAgICAgIGlmIGRlY2x0eXBlID09ICJkb2N0eXBlIjoKICAgICAgICAgICAgICAgICAgICAgaiA9IHNlbGYuX3BhcnNlX2RvY3R5cGVfc3Vic2V0KGogKyAxLCBpKQotICAgICAgICAgICAgICAgIGVsaWYgZGVjbHR5cGUgaW4gKCJhdHRsaXN0IiwgImxpbmt0eXBlIiwgImxpbmsiLCAiZWxlbWVudCIpOgorICAgICAgICAgICAgICAgIGVsaWYgZGVjbHR5cGUgaW4geyJhdHRsaXN0IiwgImxpbmt0eXBlIiwgImxpbmsiLCAiZWxlbWVudCJ9OgogICAgICAgICAgICAgICAgICAgICAjIG11c3QgdG9sZXJhdGUgW10nZCBncm91cHMgaW4gYSBjb250ZW50IG1vZGVsIGluIGFuIGVsZW1lbnQgZGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGluIGRhdGEgYXR0cmlidXRlIHNwZWNpZmljYXRpb25zIG9mIGF0dGxpc3QgZGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAgIyBhbHNvIGxpbmsgdHlwZSBkZWNsYXJhdGlvbiBzdWJzZXRzIGluIGxpbmt0eXBlIGRlY2xhcmF0aW9ucwpAQCAtMTQ1LDEwICsxNDUsMTAgQEAKICAgICAgICAgc2VjdE5hbWUsIGogPSBzZWxmLl9zY2FuX25hbWUoIGkrMywgaSApCiAgICAgICAgIGlmIGogPCAwOgogICAgICAgICAgICAgcmV0dXJuIGoKLSAgICAgICAgaWYgc2VjdE5hbWUgaW4gKCJ0ZW1wIiwgImNkYXRhIiwgImlnbm9yZSIsICJpbmNsdWRlIiwgInJjZGF0YSIpOgorICAgICAgICBpZiBzZWN0TmFtZSBpbiB7InRlbXAiLCAiY2RhdGEiLCAiaWdub3JlIiwgImluY2x1ZGUiLCAicmNkYXRhIn06CiAgICAgICAgICAgICAjIGxvb2sgZm9yIHN0YW5kYXJkIF1dPiBlbmRpbmcKICAgICAgICAgICAgIG1hdGNoPSBfbWFya2Vkc2VjdGlvbmNsb3NlLnNlYXJjaChyYXdkYXRhLCBpKzMpCi0gICAgICAgIGVsaWYgc2VjdE5hbWUgaW4gKCJpZiIsICJlbHNlIiwgImVuZGlmIik6CisgICAgICAgIGVsaWYgc2VjdE5hbWUgaW4geyJpZiIsICJlbHNlIiwgImVuZGlmIn06CiAgICAgICAgICAgICAjIGxvb2sgZm9yIE1TIE9mZmljZSBdPiBlbmRpbmcKICAgICAgICAgICAgIG1hdGNoPSBfbXNtYXJrZWRzZWN0aW9uY2xvc2Uuc2VhcmNoKHJhd2RhdGEsIGkrMykKICAgICAgICAgZWxzZToKQEAgLTIwMyw3ICsyMDMsNyBAQAogICAgICAgICAgICAgICAgIG5hbWUsIGogPSBzZWxmLl9zY2FuX25hbWUoaiArIDIsIGRlY2xzdGFydHBvcykKICAgICAgICAgICAgICAgICBpZiBqID09IC0xOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiAoImF0dGxpc3QiLCAiZWxlbWVudCIsICJlbnRpdHkiLCAibm90YXRpb24iKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiB7ImF0dGxpc3QiLCAiZWxlbWVudCIsICJlbnRpdHkiLCAibm90YXRpb24ifToKICAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVwb3MoZGVjbHN0YXJ0cG9zLCBqICsgMikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGRlY2xhcmF0aW9uICVyIGluIGludGVybmFsIHN1YnNldCIgJSBuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL19weWlvLnB5IGIvTGliL19weWlvLnB5CmluZGV4IGZhMDBlYjQuLjM1ZGVhNDEgMTAwNjQ0Ci0tLSBhL0xpYi9fcHlpby5weQorKysgYi9MaWIvX3B5aW8ucHkKQEAgLTEzLDggKzEzLDggQEAKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgTG9jawogCiBpbXBvcnQgaW8KLWZyb20gaW8gaW1wb3J0IF9fYWxsX18KLWZyb20gaW8gaW1wb3J0IFNFRUtfU0VULCBTRUVLX0NVUiwgU0VFS19FTkQKK2Zyb20gaW8gaW1wb3J0IChfX2FsbF9fLCBTRUVLX1NFVCwgU0VFS19DVVIsIFNFRUtfRU5EKQorZnJvbSBlcnJubyBpbXBvcnQgRUlOVFIKIAogIyBvcGVuKCkgdXNlcyBzdF9ibGtzaXplIHdoZW5ldmVyIHdlIGNhbgogREVGQVVMVF9CVUZGRVJfU0laRSA9IDggKiAxMDI0ICAjIGJ5dGVzCkBAIC0zNSw5ICszNSw4IEBACiAgICAgICAgIHNlbGYuY2hhcmFjdGVyc193cml0dGVuID0gY2hhcmFjdGVyc193cml0dGVuCiAKIAotZGVmIG9wZW4oZmlsZSwgbW9kZSA9ICJyIiwgYnVmZmVyaW5nID0gTm9uZSwKLSAgICAgICAgIGVuY29kaW5nID0gTm9uZSwgZXJyb3JzID0gTm9uZSwKLSAgICAgICAgIG5ld2xpbmUgPSBOb25lLCBjbG9zZWZkID0gVHJ1ZSkgLT4gIklPQmFzZSI6CitkZWYgb3BlbihmaWxlLCBtb2RlPSJyIiwgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwKKyAgICAgICAgIG5ld2xpbmU9Tm9uZSwgY2xvc2VmZD1UcnVlKToKIAogICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgogCkBAIC05Nyw3ICs5Niw3IEBACiAgICAgICB1c2UgbGluZSBidWZmZXJpbmcuICBPdGhlciB0ZXh0IGZpbGVzIHVzZSB0aGUgcG9saWN5IGRlc2NyaWJlZCBhYm92ZQogICAgICAgZm9yIGJpbmFyeSBmaWxlcy4KIAotICAgIGVuY29kaW5nIGlzIHRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSBvciBlbmNvZGUgdGhlCisgICAgZW5jb2RpbmcgaXMgdGhlIHN0ciBuYW1lIG9mIHRoZSBlbmNvZGluZyB1c2VkIHRvIGRlY29kZSBvciBlbmNvZGUgdGhlCiAgICAgZmlsZS4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMKICAgICBwbGF0Zm9ybSBkZXBlbmRlbnQsIGJ1dCBhbnkgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUKICAgICBwYXNzZWQuICBTZWUgdGhlIGNvZGVjcyBtb2R1bGUgZm9yIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBlbmNvZGluZ3MuCkBAIC0xMTAsOSArMTA5LDkgQEAKICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIGNvZGVjcy5yZWdpc3RlciBmb3IgYSBsaXN0IG9mIHRoZSBwZXJtaXR0ZWQKICAgICBlbmNvZGluZyBlcnJvciBzdHJpbmdzLgogCi0gICAgbmV3bGluZSBjb250cm9scyBob3cgdW5pdmVyc2FsIG5ld2xpbmVzIHdvcmtzIChpdCBvbmx5IGFwcGxpZXMgdG8gdGV4dAotICAgIG1vZGUpLiBJdCBjYW4gYmUgTm9uZSwgJycsICdcbicsICdccicsIGFuZCAnXHJcbicuICBJdCB3b3JrcyBhcwotICAgIGZvbGxvd3M6CisgICAgbmV3bGluZSBpcyBhIHN0cmluZyBjb250cm9sbGluZyBob3cgdW5pdmVyc2FsIG5ld2xpbmVzIHdvcmtzIChpdCBvbmx5CisgICAgYXBwbGllcyB0byB0ZXh0IG1vZGUpLiBJdCBjYW4gYmUgTm9uZSwgJycsICdcbicsICdccicsIGFuZCAnXHJcbicuICBJdCB3b3JrcworICAgIGFzIGZvbGxvd3M6CiAKICAgICAqIE9uIGlucHV0LCBpZiBuZXdsaW5lIGlzIE5vbmUsIHVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzCiAgICAgICBlbmFibGVkLiBMaW5lcyBpbiB0aGUgaW5wdXQgY2FuIGVuZCBpbiAnXG4nLCAnXHInLCBvciAnXHJcbicsIGFuZApAQCAtMTI4LDkgKzEyNyw5IEBACiAgICAgICBvdGhlciBsZWdhbCB2YWx1ZXMsIGFueSAnXG4nIGNoYXJhY3RlcnMgd3JpdHRlbiBhcmUgdHJhbnNsYXRlZCB0bwogICAgICAgdGhlIGdpdmVuIHN0cmluZy4KIAotICAgIElmIGNsb3NlZmQgaXMgRmFsc2UsIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciB3aWxsIGJlIGtlcHQgb3BlbgotICAgIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiBUaGlzIGRvZXMgbm90IHdvcmsgd2hlbiBhIGZpbGUgbmFtZSBpcyBnaXZlbgotICAgIGFuZCBtdXN0IGJlIFRydWUgaW4gdGhhdCBjYXNlLgorICAgIGNsb3NlZGZkIGlzIGEgYm9vbC4gSWYgY2xvc2VmZCBpcyBGYWxzZSwgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIHdpbGwKKyAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCisgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKICAgICBvcGVuKCkgcmV0dXJucyBhIGZpbGUgb2JqZWN0IHdob3NlIHR5cGUgZGVwZW5kcyBvbiB0aGUgbW9kZSwgYW5kCiAgICAgdGhyb3VnaCB3aGljaCB0aGUgc3RhbmRhcmQgZmlsZSBvcGVyYXRpb25zIHN1Y2ggYXMgcmVhZGluZyBhbmQgd3JpdGluZwpAQCAtMTUwLDcgKzE0OSw3IEBACiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBmaWxlOiAlciIgJSBmaWxlKQogICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZGUsIHN0cik6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiaW52YWxpZCBtb2RlOiAlciIgJSBtb2RlKQotICAgIGlmIGJ1ZmZlcmluZyBpcyBub3QgTm9uZSBhbmQgbm90IGlzaW5zdGFuY2UoYnVmZmVyaW5nLCBpbnQpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKGJ1ZmZlcmluZywgaW50KToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZzogJXIiICUgYnVmZmVyaW5nKQogICAgIGlmIGVuY29kaW5nIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShlbmNvZGluZywgc3RyKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJpbnZhbGlkIGVuY29kaW5nOiAlciIgJSBlbmNvZGluZykKQEAgLTE4Nyw4ICsxODYsNiBAQAogICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKICAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAogICAgICAgICAgICAgICAgICBjbG9zZWZkKQotICAgIGlmIGJ1ZmZlcmluZyBpcyBOb25lOgotICAgICAgICBidWZmZXJpbmcgPSAtMQogICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKICAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6CiAgICAgICAgIGJ1ZmZlcmluZyA9IC0xCkBAIC0yMjgsNyArMjI1LDcgQEAKICAgICAiIiIKICAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIHR5cCk6CiAgICAgICAgIHJldHVybiAoCi0gICAgICAgICAgICAib3BlbihmaWxlLCBtb2RlPSdyJywgYnVmZmVyaW5nPU5vbmUsIGVuY29kaW5nPU5vbmUsICIKKyAgICAgICAgICAgICJvcGVuKGZpbGUsIG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsICIKICAgICAgICAgICAgICAgICAgImVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUsIGNsb3NlZmQ9VHJ1ZSlcblxuIiArCiAgICAgICAgICAgICBvcGVuLl9fZG9jX18pCiAKQEAgLTI0Niw4ICsyNDMsMTMgQEAKICAgICAgICAgcmV0dXJuIG9wZW4oKmFyZ3MsICoqa3dhcmdzKQogCiAKLWNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uKFZhbHVlRXJyb3IsIElPRXJyb3IpOgotICAgIHBhc3MKKyMgSW4gbm9ybWFsIG9wZXJhdGlvbiwgYm90aCBgVW5zdXBwb3J0ZWRPcGVyYXRpb25gcyBzaG91bGQgYmUgYm91bmQgdG8gdGhlCisjIHNhbWUgb2JqZWN0LgordHJ5OgorICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgcGFzcwogCiAKIGNsYXNzIElPQmFzZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgpAQCAtMjYyLDcgKzI2NCw4IEBACiAgICAgRXZlbiB0aG91Z2ggSU9CYXNlIGRvZXMgbm90IGRlY2xhcmUgcmVhZCwgcmVhZGludG8sIG9yIHdyaXRlIGJlY2F1c2UKICAgICB0aGVpciBzaWduYXR1cmVzIHdpbGwgdmFyeSwgaW1wbGVtZW50YXRpb25zIGFuZCBjbGllbnRzIHNob3VsZAogICAgIGNvbnNpZGVyIHRob3NlIG1ldGhvZHMgcGFydCBvZiB0aGUgaW50ZXJmYWNlLiBBbHNvLCBpbXBsZW1lbnRhdGlvbnMKLSAgICBtYXkgcmFpc2UgYSBJT0Vycm9yIHdoZW4gb3BlcmF0aW9ucyB0aGV5IGRvIG5vdCBzdXBwb3J0IGFyZSBjYWxsZWQuCisgICAgbWF5IHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uIHdoZW4gb3BlcmF0aW9ucyB0aGV5IGRvIG5vdCBzdXBwb3J0IGFyZQorICAgIGNhbGxlZC4KIAogICAgIFRoZSBiYXNpYyB0eXBlIHVzZWQgZm9yIGJpbmFyeSBkYXRhIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGEgZmlsZSBpcwogICAgIGJ5dGVzLiBieXRlYXJyYXlzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzCkBAIC0yODUsMzIgKzI4OCwzMiBAQAogICAgICMjIyBJbnRlcm5hbCAjIyMKIAogICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBleGNlcHRpb24gZm9yIHVuc3VwcG9ydGVkIG9wZXJhdGlvbnMuIiIiCisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24oIiVzLiVzKCkgbm90IHN1cHBvcnRlZCIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIG5hbWUpKQogCiAgICAgIyMjIFBvc2l0aW9uaW5nICMjIwogCi0gICAgZGVmIHNlZWsoc2VsZiwgcG9zLCB3aGVuY2UgPSAwKToKKyAgICBkZWYgc2VlayhzZWxmLCBwb3MsIHdoZW5jZT0wKToKICAgICAgICAgIiIiQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi4KIAogICAgICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byBieXRlIG9mZnNldCBvZmZzZXQuIG9mZnNldCBpcwogICAgICAgICBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5IHdoZW5jZS4gIFZhbHVlcwotICAgICAgICBmb3Igd2hlbmNlIGFyZToKKyAgICAgICAgZm9yIHdoZW5jZSBhcmUgaW50czoKIAogICAgICAgICAqIDAgLS0gc3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCk7IG9mZnNldCBzaG91bGQgYmUgemVybyBvciBwb3NpdGl2ZQogICAgICAgICAqIDEgLS0gY3VycmVudCBzdHJlYW0gcG9zaXRpb247IG9mZnNldCBtYXkgYmUgbmVnYXRpdmUKICAgICAgICAgKiAyIC0tIGVuZCBvZiBzdHJlYW07IG9mZnNldCBpcyB1c3VhbGx5IG5lZ2F0aXZlCiAKLSAgICAgICAgUmV0dXJuIHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24uCisgICAgICAgIFJldHVybiBhbiBpbnQgaW5kaWNhdGluZyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInNlZWsiKQogCiAgICAgZGVmIHRlbGwoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGFuIGludCBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuc2VlaygwLCAxKQogCi0gICAgZGVmIHRydW5jYXRlKHNlbGYsIHBvcyA9IE5vbmUpOgorICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CiAgICAgICAgICIiIlRydW5jYXRlIGZpbGUgdG8gc2l6ZSBieXRlcy4KIAogICAgICAgICBTaXplIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IElPIHBvc2l0aW9uIGFzIHJlcG9ydGVkIGJ5IHRlbGwoKS4gIFJldHVybgpAQCAtMzU0LDQ5ICszNTcsNDcgQEAKICAgICAjIyMgSW5xdWlyaWVzICMjIwogCiAgICAgZGVmIHNlZWthYmxlKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy4KKyAgICAgICAgIiIiUmV0dXJuIGEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgb2JqZWN0IHN1cHBvcnRzIHJhbmRvbSBhY2Nlc3MuCiAKLSAgICAgICAgSWYgRmFsc2UsIHNlZWsoKSwgdGVsbCgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgSU9FcnJvci4KKyAgICAgICAgSWYgRmFsc2UsIHNlZWsoKSwgdGVsbCgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24uCiAgICAgICAgIFRoaXMgbWV0aG9kIG1heSBuZWVkIHRvIGRvIGEgdGVzdCBzZWVrKCkuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBfY2hlY2tTZWVrYWJsZShzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHNlZWthYmxlCisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbiBpZiBmaWxlIGlzIG5vdCBzZWVrYWJsZQogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHNlbGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQotCisgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiRmlsZSBvciBzdHJlYW0gaXMgbm90IHNlZWthYmxlLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQogCiAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBib29sIGluZGljYXRpbmcgd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3IgcmVhZGluZy4KIAotICAgICAgICAiIiJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3IgcmVhZGluZy4KLQotICAgICAgICBJZiBGYWxzZSwgcmVhZCgpIHdpbGwgcmFpc2UgSU9FcnJvci4KKyAgICAgICAgSWYgRmFsc2UsIHJlYWQoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICBkZWYgX2NoZWNrUmVhZGFibGUoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgYW4gSU9FcnJvciBpZiBmaWxlIGlzIG5vdCByZWFkYWJsZQorICAgICAgICAiIiJJbnRlcm5hbDogcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24gaWYgZmlsZSBpcyBub3QgcmVhZGFibGUKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJGaWxlIG9yIHN0cmVhbSBpcyBub3QgcmVhZGFibGUuIgotICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZSBlbHNlIG1zZykKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG9yIHN0cmVhbSBpcyBub3QgcmVhZGFibGUuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmUgZWxzZSBtc2cpCiAKICAgICBkZWYgd3JpdGFibGUoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiB3aGV0aGVyIG9iamVjdCB3YXMgb3BlbmVkIGZvciB3cml0aW5nLgorICAgICAgICAiIiJSZXR1cm4gYSBib29sIGluZGljYXRpbmcgd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy4KIAotICAgICAgICBJZiBGYWxzZSwgd3JpdGUoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuCisgICAgICAgIElmIEZhbHNlLCB3cml0ZSgpIGFuZCB0cnVuY2F0ZSgpIHdpbGwgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24uCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBfY2hlY2tXcml0YWJsZShzZWxmLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGlmIGZpbGUgaXMgbm90IHdyaXRhYmxlCisgICAgICAgICIiIkludGVybmFsOiByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbiBpZiBmaWxlIGlzIG5vdCB3cml0YWJsZQogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHNlbGYud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCB3cml0YWJsZS4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lIGVsc2UgbXNnKQorICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCB3cml0YWJsZS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZSBlbHNlIG1zZykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBjbG9zZWQoc2VsZik6CkBAIC00MTYsNyArNDE3LDcgQEAKICAgICAjIyMgQ29udGV4dCBtYW5hZ2VyICMjIwogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKTogICMgVGhhdCdzIGEgZm9yd2FyZCByZWZlcmVuY2UKLSAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgUmV0dXJucyBzZWxmLiIiIgorICAgICAgICAiIiJDb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBSZXR1cm5zIHNlbGYgKGFuIGluc3RhbmNlIG9mIElPQmFzZSkuIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKICAgICAgICAgcmV0dXJuIHNlbGYKIApAQCAtNDI5LDE0ICs0MzAsMTQgQEAKICAgICAjIFhYWCBTaG91bGQgdGhlc2UgYmUgcHJlc2VudCBldmVuIGlmIHVuaW1wbGVtZW50ZWQ/CiAKICAgICBkZWYgZmlsZW5vKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGlmIG9uZSBleGlzdHMuCisgICAgICAgICIiIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludCkgaWYgb25lIGV4aXN0cy4KIAogICAgICAgICBBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJmaWxlbm8iKQogCiAgICAgZGVmIGlzYXR0eShzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhpcyBpcyBhbiAnaW50ZXJhY3RpdmUnIHN0cmVhbS4KKyAgICAgICAgIiIiUmV0dXJuIGEgYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBpcyBhbiAnaW50ZXJhY3RpdmUnIHN0cmVhbS4KIAogICAgICAgICBSZXR1cm4gRmFsc2UgaWYgaXQgY2FuJ3QgYmUgZGV0ZXJtaW5lZC4KICAgICAgICAgIiIiCkBAIC00NDUsMTAgKzQ0NiwxMSBAQAogCiAgICAgIyMjIFJlYWRsaW5lW3NdIGFuZCB3cml0ZWxpbmVzICMjIwogCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0ID0gLTEpOgotICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBmcm9tIHRoZSBzdHJlYW0uCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIGxpbWl0PS0xKToKKyAgICAgICAgciIiIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgb2YgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLgogCiAgICAgICAgIElmIGxpbWl0IGlzIHNwZWNpZmllZCwgYXQgbW9zdCBsaW1pdCBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICAgIExpbWl0IHNob3VsZCBiZSBhbiBpbnQuCiAKICAgICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYidcbicgZm9yIGJpbmFyeSBmaWxlczsgZm9yIHRleHQKICAgICAgICAgZmlsZXMsIHRoZSBuZXdsaW5lcyBhcmd1bWVudCB0byBvcGVuIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQpAQCAtNTMxLDggKzUzMyw4IEBACiAgICAgIyBwcmltaXRpdmUgb3BlcmF0aW9uLCBidXQgdGhhdCB3b3VsZCBsZWFkIHRvIG5hc3R5IHJlY3Vyc2lvbiBpbiBjYXNlCiAgICAgIyBhIHN1YmNsYXNzIGRvZXNuJ3QgaW1wbGVtZW50IGVpdGhlci4pCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuID0gLTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcy4KKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgogCiAgICAgICAgIFJldHVybnMgYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IG9uIEVPRiwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0IGlzCiAgICAgICAgIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCkBAIC01NTksMTAgKzU2MSwxMCBAQAogICAgICAgICByZXR1cm4gYnl0ZXMocmVzKQogCiAgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGIpOgotICAgICAgICAiIiJSZWFkIHVwIHRvIGxlbihiKSBieXRlcyBpbnRvIGIuCisgICAgICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYnl0ZWFycmF5IGIuCiAKLSAgICAgICAgUmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKSwgb3IgTm9uZSBpZiB0aGUgb2JqZWN0Ci0gICAgICAgIGlzIHNldCBub3QgdG8gYmxvY2sgYW5kIGhhcyBubyBkYXRhIHRvIHJlYWQuCisgICAgICAgIFJldHVybnMgYW4gaW50IHJlcHJlc2VudGluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKDAgZm9yIEVPRiksIG9yCisgICAgICAgIE5vbmUgaWYgdGhlIG9iamVjdCBpcyBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWRpbnRvIikKIApAQCAtNTk1LDggKzU5Nyw4IEBACiAgICAgaW1wbGVtZW50YXRpb24sIGJ1dCB3cmFwIG9uZS4KICAgICAiIiIKIAotICAgIGRlZiByZWFkKHNlbGYsIG4gPSBOb25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCisgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgogCiAgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgcmVhZHMgYW5kCiAgICAgICAgIHJldHVybnMgYWxsIGRhdGEgdW50aWwgRU9GLgpAQCAtNjE1LDE3ICs2MTcsMTkgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkIikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuID0gTm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKKyAgICBkZWYgcmVhZDEoc2VsZiwgbj1Ob25lKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLAorICAgICAgICB3aGVyZSBuIGlzIGFuIGludC4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkMSIpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gYi4KKyAgICAgICAgIiIiUmVhZCB1cCB0byBsZW4oYikgYnl0ZXMgaW50byBieXRlYXJyYXkgYi4KIAogICAgICAgICBMaWtlIHJlYWQoKSwgdGhpcyBtYXkgaXNzdWUgbXVsdGlwbGUgcmVhZHMgdG8gdGhlIHVuZGVybHlpbmcgcmF3CiAgICAgICAgIHN0cmVhbSwgdW5sZXNzIHRoZSBsYXR0ZXIgaXMgJ2ludGVyYWN0aXZlJy4KIAotICAgICAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKS4KKyAgICAgICAgUmV0dXJucyBhbiBpbnQgcmVwcmVzZW50aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCAoMCBmb3IgRU9GKS4KIAogICAgICAgICBSYWlzZXMgQmxvY2tpbmdJT0Vycm9yIGlmIHRoZSB1bmRlcmx5aW5nIHJhdyBzdHJlYW0gaGFzIG5vCiAgICAgICAgIGRhdGEgYXQgdGhlIG1vbWVudC4KQEAgLTY0Myw3ICs2NDcsNyBAQAogICAgICAgICByZXR1cm4gbgogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgotICAgICAgICAiIiJXcml0ZSB0aGUgZ2l2ZW4gYnVmZmVyIHRvIHRoZSBJTyBzdHJlYW0uCisgICAgICAgICIiIldyaXRlIHRoZSBnaXZlbiBieXRlcyBidWZmZXIgdG8gdGhlIElPIHN0cmVhbS4KIAogICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBpcyBuZXZlciBsZXNzIHRoYW4KICAgICAgICAgbGVuKGIpLgpAQCAtNzUwLDYgKzc1NCwxMCBAQAogICAgIGRlZiBtb2RlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yYXcubW9kZQogCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW4gbm90IHNlcmlhbGl6ZSBhICd7MH0nIG9iamVjdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQorCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBjbHNuYW1lID0gc2VsZi5fX2NsYXNzX18uX19uYW1lX18KICAgICAgICAgdHJ5OgpAQCAtNzc5LDYgKzc4NywxMSBAQAogICAgICAgICBzZWxmLl9idWZmZXIgPSBidWYKICAgICAgICAgc2VsZi5fcG9zID0gMAogCisgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJfX2dldHN0YXRlX18gb24gY2xvc2VkIGZpbGUiKQorICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXy5jb3B5KCkKKwogICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBieXRlcyB2YWx1ZSAoY29udGVudHMpIG9mIHRoZSBidWZmZXIKICAgICAgICAgIiIiCkBAIC03ODYsNiArNzk5LDExIEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXR2YWx1ZSBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIHJldHVybiBieXRlcyhzZWxmLl9idWZmZXIpCiAKKyAgICBkZWYgZ2V0YnVmZmVyKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSByZWFkYWJsZSBhbmQgd3JpdGFibGUgdmlldyBvZiB0aGUgYnVmZmVyLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG1lbW9yeXZpZXcoc2VsZi5fYnVmZmVyKQorCiAgICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQpAQCAtODI3LDcgKzg0NSw3IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VlayBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHBvcyA9IHBvcy5fX2luZGV4X18oKQorICAgICAgICAgICAgcG9zLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKICAgICAgICAgaWYgd2hlbmNlID09IDA6CkBAIC04NTIsOCArODcwLDEzIEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0cnVuY2F0ZSBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIHBvcyBpcyBOb25lOgogICAgICAgICAgICAgcG9zID0gc2VsZi5fcG9zCi0gICAgICAgIGVsaWYgcG9zIDwgMDoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRydW5jYXRlIHBvc2l0aW9uICVyIiAlIChwb3MsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwb3MuX19pbmRleF9fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYW4gaW50ZWdlciBpcyByZXF1aXJlZCIpIGZyb20gZXJyCisgICAgICAgICAgICBpZiBwb3MgPCAwOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRydW5jYXRlIHBvc2l0aW9uICVyIiAlIChwb3MsKSkKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcltwb3M6XQogICAgICAgICByZXR1cm4gcG9zCiAKQEAgLTkyMSw3ICs5NDQsMTIgQEAKICAgICAgICAgICAgIGN1cnJlbnRfc2l6ZSA9IDAKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgIyBSZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQgYmxvY2suCi0gICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJhdy5yZWFkKCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5yYXcucmVhZCgpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaW4gZW1wdHlfdmFsdWVzOgogICAgICAgICAgICAgICAgICAgICBub2RhdGFfdmFsID0gY2h1bmsKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKQEAgLTk0MCw3ICs5NjgsMTIgQEAKICAgICAgICAgY2h1bmtzID0gW2J1Zltwb3M6XV0KICAgICAgICAgd2FudGVkID0gbWF4KHNlbGYuYnVmZmVyX3NpemUsIG4pCiAgICAgICAgIHdoaWxlIGF2YWlsIDwgbjoKLSAgICAgICAgICAgIGNodW5rID0gc2VsZi5yYXcucmVhZCh3YW50ZWQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJhdy5yZWFkKHdhbnRlZCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgY2h1bmsgaW4gZW1wdHlfdmFsdWVzOgogICAgICAgICAgICAgICAgIG5vZGF0YV92YWwgPSBjaHVuawogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC05NjksNyArMTAwMiwxNCBAQAogICAgICAgICBoYXZlID0gbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zCiAgICAgICAgIGlmIGhhdmUgPCB3YW50IG9yIGhhdmUgPD0gMDoKICAgICAgICAgICAgIHRvX3JlYWQgPSBzZWxmLmJ1ZmZlcl9zaXplIC0gaGF2ZQotICAgICAgICAgICAgY3VycmVudCA9IHNlbGYucmF3LnJlYWQodG9fcmVhZCkKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gc2VsZi5yYXcucmVhZCh0b19yZWFkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gRUlOVFI6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZiBjdXJyZW50OgogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYnVmID0gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XSArIGN1cnJlbnQKICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKQEAgLTEwNzYsNyArMTExNiwxMiBAQAogICAgICAgICB3cml0dGVuID0gMAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aGlsZSBzZWxmLl93cml0ZV9idWY6Ci0gICAgICAgICAgICAgICAgbiA9IHNlbGYucmF3LndyaXRlKHNlbGYuX3dyaXRlX2J1ZikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG4gPSBzZWxmLnJhdy53cml0ZShzZWxmLl93cml0ZV9idWYpCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgbiA+IGxlbihzZWxmLl93cml0ZV9idWYpIG9yIG4gPCAwOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl93cml0ZV9idWZbOm5dCkBAIC0xMjUyLDIwICsxMjk3LDIyIEBACiAgICAgYXJlIGltbXV0YWJsZS4gVGhlcmUgaXMgbm8gcHVibGljIGNvbnN0cnVjdG9yLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbiA9IC0xKToKLSAgICAgICAgIiIiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbS4KKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgIiIiUmVhZCBhdCBtb3N0IG4gY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgbiBpcyBhbiBpbnQuCiAKICAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCiAgICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCisKKyAgICAgICAgUmV0dXJucyBhIHN0cmluZy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJyZWFkIikKIAogICAgIGRlZiB3cml0ZShzZWxmLCBzKToKLSAgICAgICAgIiIiV3JpdGUgc3RyaW5nIHMgdG8gc3RyZWFtLiIiIgorICAgICAgICAiIiJXcml0ZSBzdHJpbmcgcyB0byBzdHJlYW0gYW5kIHJldHVybmluZyBhbiBpbnQuIiIiCiAgICAgICAgIHNlbGYuX3Vuc3VwcG9ydGVkKCJ3cml0ZSIpCiAKLSAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgcG9zID0gTm9uZSk6Ci0gICAgICAgICIiIlRydW5jYXRlIHNpemUgdG8gcG9zLiIiIgorICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CisgICAgICAgICIiIlRydW5jYXRlIHNpemUgdG8gcG9zLCB3aGVyZSBwb3MgaXMgYW4gaW50LiIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgidHJ1bmNhdGUiKQogCiAgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgpAQCAtMTQ4NCwxMyArMTUzMSwyMCBAQAogICAgICMgICAtICJjaGFyc18uLi4iIGZvciBpbnRlZ2VyIHZhcmlhYmxlcyB0aGF0IGNvdW50IGRlY29kZWQgY2hhcmFjdGVycwogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAiPF9weWlvLlRleHRJT1dyYXBwZXIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uVGV4dElPV3JhcHBlciBlbmNvZGluZz17MCFyfT4iLmZvcm1hdChzZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uVGV4dElPV3JhcHBlciBuYW1lPXswIXJ9IGVuY29kaW5nPXsxIXJ9PiIuZm9ybWF0KAotICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICByZXN1bHQgKz0gIiBuYW1lPXswIXJ9Ii5mb3JtYXQobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbW9kZSA9IHNlbGYubW9kZQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQgKz0gIiBtb2RlPXswIXJ9Ii5mb3JtYXQobW9kZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdCArICIgZW5jb2Rpbmc9ezAhcn0+Ii5mb3JtYXQoc2VsZi5lbmNvZGluZykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBlbmNvZGluZyhzZWxmKToKQEAgLTE1NDAsNyArMTU5NCw4IEBACiAgICAgZGVmIGlzYXR0eShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuYnVmZmVyLmlzYXR0eSgpCiAKLSAgICBkZWYgd3JpdGUoc2VsZiwgczogc3RyKToKKyAgICBkZWYgd3JpdGUoc2VsZiwgcyk6CisgICAgICAgICdXcml0ZSBkYXRhLCB3aGVyZSBzIGlzIGEgc3RyJwogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlIHRvIGNsb3NlZCBmaWxlIikKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uocywgc3RyKToKQEAgLTE2NTEsNyArMTcwNiw3IEBACiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3NlZWthYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5fdGVsbGluZzoKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQogICAgICAgICBzZWxmLmZsdXNoKCkKQEAgLTE3MzAsMTcgKzE3ODUsMTcgQEAKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0ZWxsIG9uIGNsb3NlZCBmaWxlIikKICAgICAgICAgaWYgbm90IHNlbGYuX3NlZWthYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKKyAgICAgICAgICAgIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uKCJ1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUiKQogICAgICAgICBpZiB3aGVuY2UgPT0gMTogIyBzZWVrIHJlbGF0aXZlIHRvIGN1cnJlbnQgcG9zaXRpb24KICAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbid0IGRvIG5vbnplcm8gY3VyLXJlbGF0aXZlIHNlZWtzIikKKyAgICAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiY2FuJ3QgZG8gbm9uemVybyBjdXItcmVsYXRpdmUgc2Vla3MiKQogICAgICAgICAgICAgIyBTZWVraW5nIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNob3VsZCBhdHRlbXB0IHRvCiAgICAgICAgICAgICAjIHN5bmMgdGhlIHVuZGVybHlpbmcgYnVmZmVyIHdpdGggdGhlIGN1cnJlbnQgcG9zaXRpb24uCiAgICAgICAgICAgICB3aGVuY2UgPSAwCiAgICAgICAgICAgICBjb29raWUgPSBzZWxmLnRlbGwoKQogICAgICAgICBpZiB3aGVuY2UgPT0gMjogIyBzZWVrIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlCiAgICAgICAgICAgICBpZiBjb29raWUgIT0gMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW4ndCBkbyBub256ZXJvIGVuZC1yZWxhdGl2ZSBzZWVrcyIpCisgICAgICAgICAgICAgICAgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24oImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIikKICAgICAgICAgICAgIHNlbGYuZmx1c2goKQogICAgICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci5zZWVrKDAsIDIpCiAgICAgICAgICAgICBzZWxmLl9zZXRfZGVjb2RlZF9jaGFycygnJykKQEAgLTE4MDMsNiArMTg1OCwxMCBAQAogICAgICAgICBpZiBuIGlzIE5vbmU6CiAgICAgICAgICAgICBuID0gLTEKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIgb3Igc2VsZi5fZ2V0X2RlY29kZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuLl9faW5kZXhfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKICAgICAgICAgaWYgbiA8IDA6CiAgICAgICAgICAgICAjIFJlYWQgZXZlcnl0aGluZy4KICAgICAgICAgICAgIHJlc3VsdCA9IChzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpICsKZGlmZiAtLWdpdCBhL0xpYi9fc3RycHRpbWUucHkgYi9MaWIvX3N0cnB0aW1lLnB5CmluZGV4IGVlMzBiNDIuLjBlYTRjNDMgMTAwNjQ0Ci0tLSBhL0xpYi9fc3RycHRpbWUucHkKKysrIGIvTGliL19zdHJwdGltZS5weQpAQCAtMTYsNyArMTYsOSBAQAogZnJvbSByZSBpbXBvcnQgY29tcGlsZSBhcyByZV9jb21waWxlCiBmcm9tIHJlIGltcG9ydCBJR05PUkVDQVNFLCBBU0NJSQogZnJvbSByZSBpbXBvcnQgZXNjYXBlIGFzIHJlX2VzY2FwZQotZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSBhcyBkYXRldGltZV9kYXRlCitmcm9tIGRhdGV0aW1lIGltcG9ydCAoZGF0ZSBhcyBkYXRldGltZV9kYXRlLAorICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YSBhcyBkYXRldGltZV90aW1lZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgdGltZXpvbmUgYXMgZGF0ZXRpbWVfdGltZXpvbmUpCiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIF90aHJlYWRfYWxsb2NhdGVfbG9jawogZXhjZXB0OgpAQCAtMjA0LDYgKzIwNiw3IEBACiAgICAgICAgICAgICAjWFhYOiBEb2VzICdZJyBuZWVkIHRvIHdvcnJ5IGFib3V0IGhhdmluZyBsZXNzIG9yIG1vcmUgdGhhbgogICAgICAgICAgICAgIyAgICAgNCBkaWdpdHM/CiAgICAgICAgICAgICAnWSc6IHIiKD9QPFk+XGRcZFxkXGQpIiwKKyAgICAgICAgICAgICd6JzogciIoP1A8ej5bKy1dXGRcZFswLTVdXGQpIiwKICAgICAgICAgICAgICdBJzogc2VsZi5fX3NlcVRvUkUoc2VsZi5sb2NhbGVfdGltZS5mX3dlZWtkYXksICdBJyksCiAgICAgICAgICAgICAnYSc6IHNlbGYuX19zZXFUb1JFKHNlbGYubG9jYWxlX3RpbWUuYV93ZWVrZGF5LCAnYScpLAogICAgICAgICAgICAgJ0InOiBzZWxmLl9fc2VxVG9SRShzZWxmLmxvY2FsZV90aW1lLmZfbW9udGhbMTpdLCAnQicpLApAQCAtMjkzLDcgKzI5Niw5IEBACiAKIAogZGVmIF9zdHJwdGltZShkYXRhX3N0cmluZywgZm9ybWF0PSIlYSAlYiAlZCAlSDolTTolUyAlWSIpOgotICAgICIiIlJldHVybiBhIHRpbWUgc3RydWN0IGJhc2VkIG9uIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZSBmb3JtYXQgc3RyaW5nLiIiIgorICAgICIiIlJldHVybiBhIDItdHVwbGUgY29uc2lzdGluZyBvZiBhIHRpbWUgc3RydWN0IGFuZCBhbiBpbnQgY29udGFpbmluZworICAgIHRoZSBudW1iZXIgb2YgbWljcm9zZWNvbmRzIGJhc2VkIG9uIHRoZSBpbnB1dCBzdHJpbmcgYW5kIHRoZQorICAgIGZvcm1hdCBzdHJpbmcuIiIiCiAKICAgICBmb3IgaW5kZXgsIGFyZyBpbiBlbnVtZXJhdGUoW2RhdGFfc3RyaW5nLCBmb3JtYXRdKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXJnLCBzdHIpOgpAQCAtMzMzLDEwICszMzgsMTIgQEAKICAgICBpZiBsZW4oZGF0YV9zdHJpbmcpICE9IGZvdW5kLmVuZCgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmNvbnZlcnRlZCBkYXRhIHJlbWFpbnM6ICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RyaW5nW2ZvdW5kLmVuZCgpOl0pCisKICAgICB5ZWFyID0gMTkwMAogICAgIG1vbnRoID0gZGF5ID0gMQogICAgIGhvdXIgPSBtaW51dGUgPSBzZWNvbmQgPSBmcmFjdGlvbiA9IDAKICAgICB0eiA9IC0xCisgICAgdHpvZmZzZXQgPSBOb25lCiAgICAgIyBEZWZhdWx0IHRvIC0xIHRvIHNpZ25pZnkgdGhhdCB2YWx1ZXMgbm90IGtub3duOyBub3QgY3JpdGljYWwgdG8gaGF2ZSwKICAgICAjIHRob3VnaAogICAgIHdlZWtfb2ZfeWVhciA9IC0xCkBAIC00MTcsNiArNDI0LDExIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgVyBzdGFydHMgd2VlayBvbiBNb25kYXkuCiAgICAgICAgICAgICAgICAgd2Vla19vZl95ZWFyX3N0YXJ0ID0gMAorICAgICAgICBlbGlmIGdyb3VwX2tleSA9PSAneic6CisgICAgICAgICAgICB6ID0gZm91bmRfZGljdFsneiddCisgICAgICAgICAgICB0em9mZnNldCA9IGludCh6WzE6M10pICogNjAgKyBpbnQoelszOjVdKQorICAgICAgICAgICAgaWYgei5zdGFydHN3aXRoKCItIik6CisgICAgICAgICAgICAgICAgdHpvZmZzZXQgPSAtdHpvZmZzZXQKICAgICAgICAgZWxpZiBncm91cF9rZXkgPT0gJ1onOgogICAgICAgICAgICAgIyBTaW5jZSAtMSBpcyBkZWZhdWx0IHZhbHVlIG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBzZXR0aW5nIHR6IGlmCiAgICAgICAgICAgICAjIGl0IGNhbiBiZSBzb21ldGhpbmcgb3RoZXIgdGhhbiAtMS4KQEAgLTQ1Myw5ICs0NjUsMzUgQEAKICAgICAgICAgZGF5ID0gZGF0ZXRpbWVfcmVzdWx0LmRheQogICAgIGlmIHdlZWtkYXkgPT0gLTE6CiAgICAgICAgIHdlZWtkYXkgPSBkYXRldGltZV9kYXRlKHllYXIsIG1vbnRoLCBkYXkpLndlZWtkYXkoKQotICAgIHJldHVybiAodGltZS5zdHJ1Y3RfdGltZSgoeWVhciwgbW9udGgsIGRheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Vla2RheSwganVsaWFuLCB0eikpLCBmcmFjdGlvbikKKyAgICAjIEFkZCB0aW1lem9uZSBpbmZvCisgICAgdHpuYW1lID0gZm91bmRfZGljdC5nZXQoIloiKQorICAgIGlmIHR6b2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICBnbXRvZmYgPSB0em9mZnNldCAqIDYwCisgICAgZWxzZToKKyAgICAgICAgZ210b2ZmID0gTm9uZQorCisgICAgcmV0dXJuICh5ZWFyLCBtb250aCwgZGF5LAorICAgICAgICAgICAgaG91ciwgbWludXRlLCBzZWNvbmQsCisgICAgICAgICAgICB3ZWVrZGF5LCBqdWxpYW4sIHR6LCBnbXRvZmYsIHR6bmFtZSksIGZyYWN0aW9uCiAKIGRlZiBfc3RycHRpbWVfdGltZShkYXRhX3N0cmluZywgZm9ybWF0PSIlYSAlYiAlZCAlSDolTTolUyAlWSIpOgotICAgIHJldHVybiBfc3RycHRpbWUoZGF0YV9zdHJpbmcsIGZvcm1hdClbMF0KKyAgICAiIiJSZXR1cm4gYSB0aW1lIHN0cnVjdCBiYXNlZCBvbiB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUKKyAgICBmb3JtYXQgc3RyaW5nLiIiIgorICAgIHR0ID0gX3N0cnB0aW1lKGRhdGFfc3RyaW5nLCBmb3JtYXQpWzBdCisgICAgcmV0dXJuIHRpbWUuc3RydWN0X3RpbWUodHRbOjldKQorCitkZWYgX3N0cnB0aW1lX2RhdGV0aW1lKGNscywgZGF0YV9zdHJpbmcsIGZvcm1hdD0iJWEgJWIgJWQgJUg6JU06JVMgJVkiKToKKyAgICAiIiJSZXR1cm4gYSBjbGFzcyBjbHMgaW5zdGFuY2UgYmFzZWQgb24gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlCisgICAgZm9ybWF0IHN0cmluZy4iIiIKKyAgICB0dCwgZnJhY3Rpb24gPSBfc3RycHRpbWUoZGF0YV9zdHJpbmcsIGZvcm1hdCkKKyAgICBnbXRvZmYsIHR6bmFtZSA9IHR0Wy0yOl0KKyAgICBhcmdzID0gdHRbOjZdICsgKGZyYWN0aW9uLCkKKyAgICBpZiBnbXRvZmYgaXMgbm90IE5vbmU6CisgICAgICAgIHR6ZGVsdGEgPSBkYXRldGltZV90aW1lZGVsdGEoc2Vjb25kcz1nbXRvZmYpCisgICAgICAgIGlmIHR6bmFtZToKKyAgICAgICAgICAgIHR6ID0gZGF0ZXRpbWVfdGltZXpvbmUodHpkZWx0YSwgdHpuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHogPSBkYXRldGltZV90aW1lem9uZSh0emRlbHRhKQorICAgICAgICBhcmdzICs9ICh0eiwpCisKKyAgICByZXR1cm4gY2xzKCphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL190aHJlYWRpbmdfbG9jYWwucHkgYi9MaWIvX3RocmVhZGluZ19sb2NhbC5weQppbmRleCBhZmRkNmVhLi40ZWM0ODI4IDEwMDY0NAotLS0gYS9MaWIvX3RocmVhZGluZ19sb2NhbC5weQorKysgYi9MaWIvX3RocmVhZGluZ19sb2NhbC5weQpAQCAtMTMyLDYgKzEzMiw5IEBACiA+Pj4gZGVsIG15ZGF0YQogIiIiCiAKK2Zyb20gd2Vha3JlZiBpbXBvcnQgcmVmCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCisKIF9fYWxsX18gPSBbImxvY2FsIl0KIAogIyBXZSBuZWVkIHRvIHVzZSBvYmplY3RzIGZyb20gdGhlIHRocmVhZGluZyBtb2R1bGUsIGJ1dCB0aGUgdGhyZWFkaW5nCkBAIC0xMzksMTEyICsxNDIsMTA1IEBACiAjIGlzbid0IGNvbXBpbGVkIGluIHRvIHRoZSBgdGhyZWFkYCBtb2R1bGUuICBUaGlzIGNyZWF0ZXMgcG90ZW50aWFsIHByb2JsZW1zCiAjIHdpdGggY2lyY3VsYXIgaW1wb3J0cy4gIEZvciB0aGF0IHJlYXNvbiwgd2UgZG9uJ3QgaW1wb3J0IGB0aHJlYWRpbmdgCiAjIHVudGlsIHRoZSBib3R0b20gb2YgdGhpcyBmaWxlIChhIGhhY2sgc3VmZmljaWVudCB0byB3b3JtIGFyb3VuZCB0aGUKLSMgcG90ZW50aWFsIHByb2JsZW1zKS4gIE5vdGUgdGhhdCBhbG1vc3QgYWxsIHBsYXRmb3JtcyBkbyBoYXZlIHN1cHBvcnQgZm9yCi0jIGxvY2FscyBpbiB0aGUgYHRocmVhZGAgbW9kdWxlLCBhbmQgdGhlcmUgaXMgbm8gY2lyY3VsYXIgaW1wb3J0IHByb2JsZW0KKyMgcG90ZW50aWFsIHByb2JsZW1zKS4gIE5vdGUgdGhhdCBhbGwgcGxhdGZvcm1zIG9uIENQeXRob24gZG8gaGF2ZSBzdXBwb3J0CisjIGZvciBsb2NhbHMgaW4gdGhlIGB0aHJlYWRgIG1vZHVsZSwgYW5kIHRoZXJlIGlzIG5vIGNpcmN1bGFyIGltcG9ydCBwcm9ibGVtCiAjIHRoZW4sIHNvIHByb2JsZW1zIGludHJvZHVjZWQgYnkgZmlkZGxpbmcgdGhlIG9yZGVyIG9mIGltcG9ydHMgaGVyZSB3b24ndAotIyBtYW5pZmVzdCBvbiBtb3N0IGJveGVzLgorIyBtYW5pZmVzdC4KIAotY2xhc3MgX2xvY2FsYmFzZShvYmplY3QpOgotICAgIF9fc2xvdHNfXyA9ICdfbG9jYWxfX2tleScsICdfbG9jYWxfX2FyZ3MnLCAnX2xvY2FsX19sb2NrJworY2xhc3MgX2xvY2FsaW1wbDoKKyAgICAiIiJBIGNsYXNzIG1hbmFnaW5nIHRocmVhZC1sb2NhbCBkaWN0cyIiIgorICAgIF9fc2xvdHNfXyA9ICdrZXknLCAnZGljdHMnLCAnbG9jYWxhcmdzJywgJ2xvY2FsbG9jaycsICdfX3dlYWtyZWZfXycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIyBUaGUga2V5IHVzZWQgaW4gdGhlIFRocmVhZCBvYmplY3RzJyBhdHRyaWJ1dGUgZGljdHMuCisgICAgICAgICMgV2Uga2VlcCBpdCBhIHN0cmluZyBmb3Igc3BlZWQgYnV0IG1ha2UgaXQgdW5saWtlbHkgdG8gY2xhc2ggd2l0aAorICAgICAgICAjIGEgInJlYWwiIGF0dHJpYnV0ZS4KKyAgICAgICAgc2VsZi5rZXkgPSAnX3RocmVhZGluZ19sb2NhbC5fbG9jYWxpbXBsLicgKyBzdHIoaWQoc2VsZikpCisgICAgICAgICMgeyBpZChUaHJlYWQpIC0+IChyZWYoVGhyZWFkKSwgdGhyZWFkLWxvY2FsIGRpY3QpIH0KKyAgICAgICAgc2VsZi5kaWN0cyA9IHt9CisKKyAgICBkZWYgZ2V0X2RpY3Qoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZGljdCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLiBSYWlzZXMgS2V5RXJyb3IgaWYgbm9uZQorICAgICAgICBkZWZpbmVkLiIiIgorICAgICAgICB0aHJlYWQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgICAgIHJldHVybiBzZWxmLmRpY3RzW2lkKHRocmVhZCldWzFdCisKKyAgICBkZWYgY3JlYXRlX2RpY3Qoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBkaWN0IGZvciB0aGUgY3VycmVudCB0aHJlYWQsIGFuZCByZXR1cm4gaXQuIiIiCisgICAgICAgIGxvY2FsZGljdCA9IHt9CisgICAgICAgIGtleSA9IHNlbGYua2V5CisgICAgICAgIHRocmVhZCA9IGN1cnJlbnRfdGhyZWFkKCkKKyAgICAgICAgaWR0ID0gaWQodGhyZWFkKQorICAgICAgICBkZWYgbG9jYWxfZGVsZXRlZChfLCBrZXk9a2V5KToKKyAgICAgICAgICAgICMgV2hlbiB0aGUgbG9jYWxpbXBsIGlzIGRlbGV0ZWQsIHJlbW92ZSB0aGUgdGhyZWFkIGF0dHJpYnV0ZS4KKyAgICAgICAgICAgIHRocmVhZCA9IHdydGhyZWFkKCkKKyAgICAgICAgICAgIGlmIHRocmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBkZWwgdGhyZWFkLl9fZGljdF9fW2tleV0KKyAgICAgICAgZGVmIHRocmVhZF9kZWxldGVkKF8sIGlkdD1pZHQpOgorICAgICAgICAgICAgIyBXaGVuIHRoZSB0aHJlYWQgaXMgZGVsZXRlZCwgcmVtb3ZlIHRoZSBsb2NhbCBkaWN0LgorICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBpcyBzdWJvcHRpbWFsIGlmIHRoZSB0aHJlYWQgb2JqZWN0IGdldHMKKyAgICAgICAgICAgICMgY2F1Z2h0IGluIGEgcmVmZXJlbmNlIGxvb3AuIFdlIHdvdWxkIGxpa2UgdG8gYmUgY2FsbGVkCisgICAgICAgICAgICAjIGFzIHNvb24gYXMgdGhlIE9TLWxldmVsIHRocmVhZCBlbmRzIGluc3RlYWQuCisgICAgICAgICAgICBsb2NhbCA9IHdybG9jYWwoKQorICAgICAgICAgICAgaWYgbG9jYWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZGN0ID0gbG9jYWwuZGljdHMucG9wKGlkdCkKKyAgICAgICAgd3Jsb2NhbCA9IHJlZihzZWxmLCBsb2NhbF9kZWxldGVkKQorICAgICAgICB3cnRocmVhZCA9IHJlZih0aHJlYWQsIHRocmVhZF9kZWxldGVkKQorICAgICAgICB0aHJlYWQuX19kaWN0X19ba2V5XSA9IHdybG9jYWwKKyAgICAgICAgc2VsZi5kaWN0c1tpZHRdID0gd3J0aHJlYWQsIGxvY2FsZGljdAorICAgICAgICByZXR1cm4gbG9jYWxkaWN0CisKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgX3BhdGNoKHNlbGYpOgorICAgIGltcGwgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAnX2xvY2FsX19pbXBsJykKKyAgICB0cnk6CisgICAgICAgIGRjdCA9IGltcGwuZ2V0X2RpY3QoKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZGN0ID0gaW1wbC5jcmVhdGVfZGljdCgpCisgICAgICAgIGFyZ3MsIGt3ID0gaW1wbC5sb2NhbGFyZ3MKKyAgICAgICAgc2VsZi5fX2luaXRfXygqYXJncywgKiprdykKKyAgICB3aXRoIGltcGwubG9jYWxsb2NrOgorICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgJ19fZGljdF9fJywgZGN0KQorICAgICAgICB5aWVsZAorCisKK2NsYXNzIGxvY2FsOgorICAgIF9fc2xvdHNfXyA9ICdfbG9jYWxfX2ltcGwnLCAnX19kaWN0X18nCiAKICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3KToKLSAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKLSAgICAgICAga2V5ID0gJ19sb2NhbF9fa2V5JywgJ3RocmVhZC5sb2NhbC4nICsgc3RyKGlkKHNlbGYpKQotICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgJ19sb2NhbF9fa2V5Jywga2V5KQotICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgJ19sb2NhbF9fYXJncycsIChhcmdzLCBrdykpCi0gICAgICAgIG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCAnX2xvY2FsX19sb2NrJywgUkxvY2soKSkKLQotICAgICAgICBpZiBhcmdzIG9yIGt3IGFuZCAoY2xzLl9faW5pdF9fIGlzIG9iamVjdC5fX2luaXRfXyk6CisgICAgICAgIGlmIChhcmdzIG9yIGt3KSBhbmQgKGNscy5fX2luaXRfXyBpcyBvYmplY3QuX19pbml0X18pOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJJbml0aWFsaXphdGlvbiBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQiKQotCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIGltcGwgPSBfbG9jYWxpbXBsKCkKKyAgICAgICAgaW1wbC5sb2NhbGFyZ3MgPSAoYXJncywga3cpCisgICAgICAgIGltcGwubG9jYWxsb2NrID0gUkxvY2soKQorICAgICAgICBvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgJ19sb2NhbF9faW1wbCcsIGltcGwpCiAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgdGhlIHRocmVhZCBkaWN0IGluIGFudGljaXBhdGlvbiBvZgogICAgICAgICAjIF9faW5pdF9fIGJlaW5nIGNhbGxlZCwgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgaXQKICAgICAgICAgIyBhZ2FpbiBvdXJzZWx2ZXMuCi0gICAgICAgIGRpY3QgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAnX19kaWN0X18nKQotICAgICAgICBjdXJyZW50X3RocmVhZCgpLl9fZGljdF9fW2tleV0gPSBkaWN0Ci0KKyAgICAgICAgaW1wbC5jcmVhdGVfZGljdCgpCiAgICAgICAgIHJldHVybiBzZWxmCiAKLWRlZiBfcGF0Y2goc2VsZik6Ci0gICAga2V5ID0gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgJ19sb2NhbF9fa2V5JykKLSAgICBkID0gY3VycmVudF90aHJlYWQoKS5fX2RpY3RfXy5nZXQoa2V5KQotICAgIGlmIGQgaXMgTm9uZToKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGN1cnJlbnRfdGhyZWFkKCkuX19kaWN0X19ba2V5XSA9IGQKLSAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsICdfX2RpY3RfXycsIGQpCi0KLSAgICAgICAgIyB3ZSBoYXZlIGEgbmV3IGluc3RhbmNlIGRpY3QsIHNvIGNhbGwgb3V0IF9faW5pdF9fIGlmIHdlIGhhdmUKLSAgICAgICAgIyBvbmUKLSAgICAgICAgY2xzID0gdHlwZShzZWxmKQotICAgICAgICBpZiBjbHMuX19pbml0X18gaXMgbm90IG9iamVjdC5fX2luaXRfXzoKLSAgICAgICAgICAgIGFyZ3MsIGt3ID0gb2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgJ19sb2NhbF9fYXJncycpCi0gICAgICAgICAgICBjbHMuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCi0gICAgZWxzZToKLSAgICAgICAgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsICdfX2RpY3RfXycsIGQpCi0KLWNsYXNzIGxvY2FsKF9sb2NhbGJhc2UpOgotCiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSk6Ci0gICAgICAgIGxvY2sgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAnX2xvY2FsX19sb2NrJykKLSAgICAgICAgbG9jay5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX3BhdGNoKHNlbGYpCisgICAgICAgIHdpdGggX3BhdGNoKHNlbGYpOgogICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAgICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKICAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVyIG9iamVjdCBhdHRyaWJ1dGUgJ19fZGljdF9fJyBpcyByZWFkLW9ubHkiCiAgICAgICAgICAgICAgICAgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICAgICAgbG9jayA9IG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsICdfbG9jYWxfX2xvY2snKQotICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfcGF0Y2goc2VsZikKKyAgICAgICAgd2l0aCBfcGF0Y2goc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKIAogICAgIGRlZiBfX2RlbGF0dHJfXyhzZWxmLCBuYW1lKToKICAgICAgICAgaWYgbmFtZSA9PSAnX19kaWN0X18nOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoCiAgICAgICAgICAgICAgICAgIiVyIG9iamVjdCBhdHRyaWJ1dGUgJ19fZGljdF9fJyBpcyByZWFkLW9ubHkiCiAgICAgICAgICAgICAgICAgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICAgICAgbG9jayA9IG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsICdfbG9jYWxfX2xvY2snKQotICAgICAgICBsb2NrLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfcGF0Y2goc2VsZikKKyAgICAgICAgd2l0aCBfcGF0Y2goc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQogCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIGltcG9ydCB0aHJlYWRpbmcKLQotICAgICAgICBrZXkgPSBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCAnX2xvY2FsX19rZXknKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgV2UgdXNlIHRoZSBub24tbG9ja2luZyBBUEkgc2luY2Ugd2UgbWlnaHQgYWxyZWFkeSBob2xkIHRoZSBsb2NrCi0gICAgICAgICAgICAjIChfX2RlbF9fIGNhbiBiZSBjYWxsZWQgYXQgYW55IHBvaW50IGJ5IHRoZSBjeWNsaWMgR0MpLgotICAgICAgICAgICAgdGhyZWFkcyA9IHRocmVhZGluZy5fZW51bWVyYXRlKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgIyBJZiBlbnVtZXJhdGluZyB0aGUgY3VycmVudCB0aHJlYWRzIGZhaWxzLCBhcyBpdCBzZWVtcyB0byBkbwotICAgICAgICAgICAgIyBkdXJpbmcgc2h1dGRvd24sIHdlJ2xsIHNraXAgY2xlYW51cCB1bmRlciB0aGUgYXNzdW1wdGlvbgotICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgdG8gY2xlYW4gdXAuCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX19kaWN0X18gPSB0aHJlYWQuX19kaWN0X18KLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIFRocmVhZCBpcyBkeWluZywgcmVzdCBpbiBwZWFjZS4KLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBpZiBrZXkgaW4gX19kaWN0X186Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkZWwgX19kaWN0X19ba2V5XQotICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcyAjIGRpZG4ndCBoYXZlIGFueXRoaW5nIGluIHRoaXMgdGhyZWFkCiAKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBjdXJyZW50X3RocmVhZCwgUkxvY2sKZGlmZiAtLWdpdCBhL0xpYi9hYmMucHkgYi9MaWIvYWJjLnB5CmluZGV4IDBmOTgwMzYuLmE2YzJkYzQgMTAwNjQ0Ci0tLSBhL0xpYi9hYmMucHkKKysrIGIvTGliL2FiYy5weQpAQCAtMjUsNiArMjUsNDYgQEAKICAgICByZXR1cm4gZnVuY29iagogCiAKK2NsYXNzIGFic3RyYWN0Y2xhc3NtZXRob2QoY2xhc3NtZXRob2QpOgorICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgY2xhc3NtZXRob2RzLgorCisgICAgU2ltaWxhciB0byBhYnN0cmFjdG1ldGhvZC4KKworICAgIFVzYWdlOgorCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICAgICAgICAgQGFic3RyYWN0Y2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBteV9hYnN0cmFjdF9jbGFzc21ldGhvZChjbHMsIC4uLik6CisgICAgICAgICAgICAgICAgLi4uCisgICAgIiIiCisKKyAgICBfX2lzYWJzdHJhY3RtZXRob2RfXyA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYWJsZSk6CisgICAgICAgIGNhbGxhYmxlLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gVHJ1ZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxhYmxlKQorCisKK2NsYXNzIGFic3RyYWN0c3RhdGljbWV0aG9kKHN0YXRpY21ldGhvZCk6CisgICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBzdGF0aWNtZXRob2RzLgorCisgICAgU2ltaWxhciB0byBhYnN0cmFjdG1ldGhvZC4KKworICAgIFVzYWdlOgorCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICAgICAgICAgQGFic3RyYWN0c3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgbXlfYWJzdHJhY3Rfc3RhdGljbWV0aG9kKC4uLik6CisgICAgICAgICAgICAgICAgLi4uCisgICAgIiIiCisKKyAgICBfX2lzYWJzdHJhY3RtZXRob2RfXyA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWxsYWJsZSk6CisgICAgICAgIGNhbGxhYmxlLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gVHJ1ZQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGNhbGxhYmxlKQorCisKIGNsYXNzIGFic3RyYWN0cHJvcGVydHkocHJvcGVydHkpOgogICAgICIiIkEgZGVjb3JhdG9yIGluZGljYXRpbmcgYWJzdHJhY3QgcHJvcGVydGllcy4KIApkaWZmIC0tZ2l0IGEvTGliL2FyZ3BhcnNlLnB5IGIvTGliL2FyZ3BhcnNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzNTYxZjcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXJncGFyc2UucHkKQEAgLTAsMCArMSwyMzY2IEBACisjIEF1dGhvcjogU3RldmVuIEouIEJldGhhcmQgPHN0ZXZlbi5iZXRoYXJkQGdtYWlsLmNvbT4uCisKKyIiIkNvbW1hbmQtbGluZSBwYXJzaW5nIGxpYnJhcnkKKworVGhpcyBtb2R1bGUgaXMgYW4gb3B0cGFyc2UtaW5zcGlyZWQgY29tbWFuZC1saW5lIHBhcnNpbmcgbGlicmFyeSB0aGF0OgorCisgICAgLSBoYW5kbGVzIGJvdGggb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzCisgICAgLSBwcm9kdWNlcyBoaWdobHkgaW5mb3JtYXRpdmUgdXNhZ2UgbWVzc2FnZXMKKyAgICAtIHN1cHBvcnRzIHBhcnNlcnMgdGhhdCBkaXNwYXRjaCB0byBzdWItcGFyc2VycworCitUaGUgZm9sbG93aW5nIGlzIGEgc2ltcGxlIHVzYWdlIGV4YW1wbGUgdGhhdCBzdW1zIGludGVnZXJzIGZyb20gdGhlCitjb21tYW5kLWxpbmUgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIGEgZmlsZTo6CisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigKKyAgICAgICAgZGVzY3JpcHRpb249J3N1bSB0aGUgaW50ZWdlcnMgYXQgdGhlIGNvbW1hbmQgbGluZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJ2ludGVnZXJzJywgbWV0YXZhcj0naW50JywgbmFyZ3M9JysnLCB0eXBlPWludCwKKyAgICAgICAgaGVscD0nYW4gaW50ZWdlciB0byBiZSBzdW1tZWQnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctLWxvZycsIGRlZmF1bHQ9c3lzLnN0ZG91dCwgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpLAorICAgICAgICBoZWxwPSd0aGUgZmlsZSB3aGVyZSB0aGUgc3VtIHNob3VsZCBiZSB3cml0dGVuJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGFyZ3MubG9nLndyaXRlKCclcycgJSBzdW0oYXJncy5pbnRlZ2VycykpCisgICAgYXJncy5sb2cuY2xvc2UoKQorCitUaGUgbW9kdWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgcHVibGljIGNsYXNzZXM6CisKKyAgICAtIEFyZ3VtZW50UGFyc2VyIC0tIFRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBjb21tYW5kLWxpbmUgcGFyc2luZy4gQXMgdGhlCisgICAgICAgIGV4YW1wbGUgYWJvdmUgc2hvd3MsIHRoZSBhZGRfYXJndW1lbnQoKSBtZXRob2QgaXMgdXNlZCB0byBwb3B1bGF0ZQorICAgICAgICB0aGUgcGFyc2VyIHdpdGggYWN0aW9ucyBmb3Igb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzLiBUaGVuCisgICAgICAgIHRoZSBwYXJzZV9hcmdzKCkgbWV0aG9kIGlzIGludm9rZWQgdG8gY29udmVydCB0aGUgYXJncyBhdCB0aGUKKyAgICAgICAgY29tbWFuZC1saW5lIGludG8gYW4gb2JqZWN0IHdpdGggYXR0cmlidXRlcy4KKworICAgIC0gQXJndW1lbnRFcnJvciAtLSBUaGUgZXhjZXB0aW9uIHJhaXNlZCBieSBBcmd1bWVudFBhcnNlciBvYmplY3RzIHdoZW4KKyAgICAgICAgdGhlcmUgYXJlIGVycm9ycyB3aXRoIHRoZSBwYXJzZXIncyBhY3Rpb25zLiBFcnJvcnMgcmFpc2VkIHdoaWxlCisgICAgICAgIHBhcnNpbmcgdGhlIGNvbW1hbmQtbGluZSBhcmUgY2F1Z2h0IGJ5IEFyZ3VtZW50UGFyc2VyIGFuZCBlbWl0dGVkCisgICAgICAgIGFzIGNvbW1hbmQtbGluZSBtZXNzYWdlcy4KKworICAgIC0gRmlsZVR5cGUgLS0gQSBmYWN0b3J5IGZvciBkZWZpbmluZyB0eXBlcyBvZiBmaWxlcyB0byBiZSBjcmVhdGVkLiBBcyB0aGUKKyAgICAgICAgZXhhbXBsZSBhYm92ZSBzaG93cywgaW5zdGFuY2VzIG9mIEZpbGVUeXBlIGFyZSB0eXBpY2FsbHkgcGFzc2VkIGFzCisgICAgICAgIHRoZSB0eXBlPSBhcmd1bWVudCBvZiBhZGRfYXJndW1lbnQoKSBjYWxscy4KKworICAgIC0gQWN0aW9uIC0tIFRoZSBiYXNlIGNsYXNzIGZvciBwYXJzZXIgYWN0aW9ucy4gVHlwaWNhbGx5IGFjdGlvbnMgYXJlCisgICAgICAgIHNlbGVjdGVkIGJ5IHBhc3Npbmcgc3RyaW5ncyBsaWtlICdzdG9yZV90cnVlJyBvciAnYXBwZW5kX2NvbnN0JyB0bworICAgICAgICB0aGUgYWN0aW9uPSBhcmd1bWVudCBvZiBhZGRfYXJndW1lbnQoKS4gSG93ZXZlciwgZm9yIGdyZWF0ZXIKKyAgICAgICAgY3VzdG9taXphdGlvbiBvZiBBcmd1bWVudFBhcnNlciBhY3Rpb25zLCBzdWJjbGFzc2VzIG9mIEFjdGlvbiBtYXkKKyAgICAgICAgYmUgZGVmaW5lZCBhbmQgcGFzc2VkIGFzIHRoZSBhY3Rpb249IGFyZ3VtZW50LgorCisgICAgLSBIZWxwRm9ybWF0dGVyLCBSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIsIFJhd1RleHRIZWxwRm9ybWF0dGVyLAorICAgICAgICBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlciAtLSBGb3JtYXR0ZXIgY2xhc3NlcyB3aGljaAorICAgICAgICBtYXkgYmUgcGFzc2VkIGFzIHRoZSBmb3JtYXR0ZXJfY2xhc3M9IGFyZ3VtZW50IHRvIHRoZQorICAgICAgICBBcmd1bWVudFBhcnNlciBjb25zdHJ1Y3Rvci4gSGVscEZvcm1hdHRlciBpcyB0aGUgZGVmYXVsdCwKKyAgICAgICAgUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyIGFuZCBSYXdUZXh0SGVscEZvcm1hdHRlciB0ZWxsIHRoZSBwYXJzZXIKKyAgICAgICAgbm90IHRvIGNoYW5nZSB0aGUgZm9ybWF0dGluZyBmb3IgaGVscCB0ZXh0LCBhbmQKKyAgICAgICAgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIgYWRkcyBpbmZvcm1hdGlvbiBhYm91dCBhcmd1bWVudCBkZWZhdWx0cworICAgICAgICB0byB0aGUgaGVscC4KKworQWxsIG90aGVyIGNsYXNzZXMgaW4gdGhpcyBtb2R1bGUgYXJlIGNvbnNpZGVyZWQgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKyhBbHNvIG5vdGUgdGhhdCBIZWxwRm9ybWF0dGVyIGFuZCBSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIgYXJlIG9ubHkKK2NvbnNpZGVyZWQgcHVibGljIGFzIG9iamVjdCBuYW1lcyAtLSB0aGUgQVBJIG9mIHRoZSBmb3JtYXR0ZXIgb2JqZWN0cyBpcworc3RpbGwgY29uc2lkZXJlZCBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuKQorIiIiCisKK19fdmVyc2lvbl9fID0gJzEuMScKK19fYWxsX18gPSBbCisgICAgJ0FyZ3VtZW50UGFyc2VyJywKKyAgICAnQXJndW1lbnRFcnJvcicsCisgICAgJ0FyZ3VtZW50VHlwZUVycm9yJywKKyAgICAnRmlsZVR5cGUnLAorICAgICdIZWxwRm9ybWF0dGVyJywKKyAgICAnQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXInLAorICAgICdSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXInLAorICAgICdSYXdUZXh0SGVscEZvcm1hdHRlcicsCisgICAgJ05hbWVzcGFjZScsCisgICAgJ0FjdGlvbicsCisgICAgJ09ORV9PUl9NT1JFJywKKyAgICAnT1BUSU9OQUwnLAorICAgICdQQVJTRVInLAorICAgICdSRU1BSU5ERVInLAorICAgICdTVVBQUkVTUycsCisgICAgJ1pFUk9fT1JfTU9SRScsCitdCisKKworaW1wb3J0IGNvbGxlY3Rpb25zIGFzIF9jb2xsZWN0aW9ucworaW1wb3J0IGNvcHkgYXMgX2NvcHkKK2ltcG9ydCBvcyBhcyBfb3MKK2ltcG9ydCByZSBhcyBfcmUKK2ltcG9ydCBzeXMgYXMgX3N5cworaW1wb3J0IHRleHR3cmFwIGFzIF90ZXh0d3JhcAorCitmcm9tIGdldHRleHQgaW1wb3J0IGdldHRleHQgYXMgXywgbmdldHRleHQKKworCitkZWYgX2NhbGxhYmxlKG9iaik6CisgICAgcmV0dXJuIGhhc2F0dHIob2JqLCAnX19jYWxsX18nKSBvciBoYXNhdHRyKG9iaiwgJ19fYmFzZXNfXycpCisKKworU1VQUFJFU1MgPSAnPT1TVVBQUkVTUz09JworCitPUFRJT05BTCA9ICc/JworWkVST19PUl9NT1JFID0gJyonCitPTkVfT1JfTU9SRSA9ICcrJworUEFSU0VSID0gJ0EuLi4nCitSRU1BSU5ERVIgPSAnLi4uJworX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIgPSAnX3VucmVjb2duaXplZF9hcmdzJworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIFV0aWxpdHkgZnVuY3Rpb25zIGFuZCBjbGFzc2VzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIF9BdHRyaWJ1dGVIb2xkZXIob2JqZWN0KToKKyAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIHRoYXQgcHJvdmlkZXMgX19yZXByX18uCisKKyAgICBUaGUgX19yZXByX18gbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgaW4gdGhlIGZvcm1hdDo6CisgICAgICAgIENsYXNzTmFtZShhdHRyPW5hbWUsIGF0dHI9bmFtZSwgLi4uKQorICAgIFRoZSBhdHRyaWJ1dGVzIGFyZSBkZXRlcm1pbmVkIGVpdGhlciBieSBhIGNsYXNzLWxldmVsIGF0dHJpYnV0ZSwKKyAgICAnX2t3YXJnX25hbWVzJywgb3IgYnkgaW5zcGVjdGluZyB0aGUgaW5zdGFuY2UgX19kaWN0X18uCisgICAgIiIiCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHR5cGVfbmFtZSA9IHR5cGUoc2VsZikuX19uYW1lX18KKyAgICAgICAgYXJnX3N0cmluZ3MgPSBbXQorICAgICAgICBmb3IgYXJnIGluIHNlbGYuX2dldF9hcmdzKCk6CisgICAgICAgICAgICBhcmdfc3RyaW5ncy5hcHBlbmQocmVwcihhcmcpKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc2VsZi5fZ2V0X2t3YXJncygpOgorICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKCclcz0lcicgJSAobmFtZSwgdmFsdWUpKQorICAgICAgICByZXR1cm4gJyVzKCVzKScgJSAodHlwZV9uYW1lLCAnLCAnLmpvaW4oYXJnX3N0cmluZ3MpKQorCisgICAgZGVmIF9nZXRfa3dhcmdzKHNlbGYpOgorICAgICAgICByZXR1cm4gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSkKKworICAgIGRlZiBfZ2V0X2FyZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBbXQorCisKK2RlZiBfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpOgorICAgIGlmIGdldGF0dHIobmFtZXNwYWNlLCBuYW1lLCBOb25lKSBpcyBOb25lOgorICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgbmFtZSwgdmFsdWUpCisgICAgcmV0dXJuIGdldGF0dHIobmFtZXNwYWNlLCBuYW1lKQorCisKKyMgPT09PT09PT09PT09PT09CisjIEZvcm1hdHRpbmcgSGVscAorIyA9PT09PT09PT09PT09PT0KKworY2xhc3MgSGVscEZvcm1hdHRlcihvYmplY3QpOgorICAgICIiIkZvcm1hdHRlciBmb3IgZ2VuZXJhdGluZyB1c2FnZSBtZXNzYWdlcyBhbmQgYXJndW1lbnQgaGVscCBzdHJpbmdzLgorCisgICAgT25seSB0aGUgbmFtZSBvZiB0aGlzIGNsYXNzIGlzIGNvbnNpZGVyZWQgYSBwdWJsaWMgQVBJLiBBbGwgdGhlIG1ldGhvZHMKKyAgICBwcm92aWRlZCBieSB0aGUgY2xhc3MgYXJlIGNvbnNpZGVyZWQgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIHByb2csCisgICAgICAgICAgICAgICAgIGluZGVudF9pbmNyZW1lbnQ9MiwKKyAgICAgICAgICAgICAgICAgbWF4X2hlbHBfcG9zaXRpb249MjQsCisgICAgICAgICAgICAgICAgIHdpZHRoPU5vbmUpOgorCisgICAgICAgICMgZGVmYXVsdCBzZXR0aW5nIGZvciB3aWR0aAorICAgICAgICBpZiB3aWR0aCBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpZHRoID0gaW50KF9vcy5lbnZpcm9uWydDT0xVTU5TJ10pCisgICAgICAgICAgICBleGNlcHQgKEtleUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aWR0aCA9IDgwCisgICAgICAgICAgICB3aWR0aCAtPSAyCisKKyAgICAgICAgc2VsZi5fcHJvZyA9IHByb2cKKyAgICAgICAgc2VsZi5faW5kZW50X2luY3JlbWVudCA9IGluZGVudF9pbmNyZW1lbnQKKyAgICAgICAgc2VsZi5fbWF4X2hlbHBfcG9zaXRpb24gPSBtYXhfaGVscF9wb3NpdGlvbgorICAgICAgICBzZWxmLl93aWR0aCA9IHdpZHRoCisKKyAgICAgICAgc2VsZi5fY3VycmVudF9pbmRlbnQgPSAwCisgICAgICAgIHNlbGYuX2xldmVsID0gMAorICAgICAgICBzZWxmLl9hY3Rpb25fbWF4X2xlbmd0aCA9IDAKKworICAgICAgICBzZWxmLl9yb290X3NlY3Rpb24gPSBzZWxmLl9TZWN0aW9uKHNlbGYsIE5vbmUpCisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiA9IHNlbGYuX3Jvb3Rfc2VjdGlvbgorCisgICAgICAgIHNlbGYuX3doaXRlc3BhY2VfbWF0Y2hlciA9IF9yZS5jb21waWxlKHInXHMrJykKKyAgICAgICAgc2VsZi5fbG9uZ19icmVha19tYXRjaGVyID0gX3JlLmNvbXBpbGUocidcblxuXG4rJykKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgU2VjdGlvbiBhbmQgaW5kZW50YXRpb24gbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBfaW5kZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jdXJyZW50X2luZGVudCArPSBzZWxmLl9pbmRlbnRfaW5jcmVtZW50CisgICAgICAgIHNlbGYuX2xldmVsICs9IDEKKworICAgIGRlZiBfZGVkZW50KHNlbGYpOgorICAgICAgICBzZWxmLl9jdXJyZW50X2luZGVudCAtPSBzZWxmLl9pbmRlbnRfaW5jcmVtZW50CisgICAgICAgIGFzc2VydCBzZWxmLl9jdXJyZW50X2luZGVudCA+PSAwLCAnSW5kZW50IGRlY3JlYXNlZCBiZWxvdyAwLicKKyAgICAgICAgc2VsZi5fbGV2ZWwgLT0gMQorCisgICAgY2xhc3MgX1NlY3Rpb24ob2JqZWN0KToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0dGVyLCBwYXJlbnQsIGhlYWRpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZWxmLmZvcm1hdHRlciA9IGZvcm1hdHRlcgorICAgICAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKKyAgICAgICAgICAgIHNlbGYuaGVhZGluZyA9IGhlYWRpbmcKKyAgICAgICAgICAgIHNlbGYuaXRlbXMgPSBbXQorCisgICAgICAgIGRlZiBmb3JtYXRfaGVscChzZWxmKToKKyAgICAgICAgICAgICMgZm9ybWF0IHRoZSBpbmRlbnRlZCBzZWN0aW9uCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdHRlci5faW5kZW50KCkKKyAgICAgICAgICAgIGpvaW4gPSBzZWxmLmZvcm1hdHRlci5fam9pbl9wYXJ0cworICAgICAgICAgICAgZm9yIGZ1bmMsIGFyZ3MgaW4gc2VsZi5pdGVtczoKKyAgICAgICAgICAgICAgICBmdW5jKCphcmdzKQorICAgICAgICAgICAgaXRlbV9oZWxwID0gam9pbihbZnVuYygqYXJncykgZm9yIGZ1bmMsIGFyZ3MgaW4gc2VsZi5pdGVtc10pCisgICAgICAgICAgICBpZiBzZWxmLnBhcmVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdHRlci5fZGVkZW50KCkKKworICAgICAgICAgICAgIyByZXR1cm4gbm90aGluZyBpZiB0aGUgc2VjdGlvbiB3YXMgZW1wdHkKKyAgICAgICAgICAgIGlmIG5vdCBpdGVtX2hlbHA6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgICAgICMgYWRkIHRoZSBoZWFkaW5nIGlmIHRoZSBzZWN0aW9uIHdhcyBub24tZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuaGVhZGluZyBpcyBub3QgU1VQUFJFU1MgYW5kIHNlbGYuaGVhZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjdXJyZW50X2luZGVudCA9IHNlbGYuZm9ybWF0dGVyLl9jdXJyZW50X2luZGVudAorICAgICAgICAgICAgICAgIGhlYWRpbmcgPSAnJSpzJXM6XG4nICUgKGN1cnJlbnRfaW5kZW50LCAnJywgc2VsZi5oZWFkaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBoZWFkaW5nID0gJycKKworICAgICAgICAgICAgIyBqb2luIHRoZSBzZWN0aW9uLWluaXRpYWwgbmV3bGluZSwgdGhlIGhlYWRpbmcgYW5kIHRoZSBoZWxwCisgICAgICAgICAgICByZXR1cm4gam9pbihbJ1xuJywgaGVhZGluZywgaXRlbV9oZWxwLCAnXG4nXSkKKworICAgIGRlZiBfYWRkX2l0ZW0oc2VsZiwgZnVuYywgYXJncyk6CisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbi5pdGVtcy5hcHBlbmQoKGZ1bmMsIGFyZ3MpKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIE1lc3NhZ2UgYnVpbGRpbmcgbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHN0YXJ0X3NlY3Rpb24oc2VsZiwgaGVhZGluZyk6CisgICAgICAgIHNlbGYuX2luZGVudCgpCisgICAgICAgIHNlY3Rpb24gPSBzZWxmLl9TZWN0aW9uKHNlbGYsIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiwgaGVhZGluZykKKyAgICAgICAgc2VsZi5fYWRkX2l0ZW0oc2VjdGlvbi5mb3JtYXRfaGVscCwgW10pCisgICAgICAgIHNlbGYuX2N1cnJlbnRfc2VjdGlvbiA9IHNlY3Rpb24KKworICAgIGRlZiBlbmRfc2VjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fY3VycmVudF9zZWN0aW9uID0gc2VsZi5fY3VycmVudF9zZWN0aW9uLnBhcmVudAorICAgICAgICBzZWxmLl9kZWRlbnQoKQorCisgICAgZGVmIGFkZF90ZXh0KHNlbGYsIHRleHQpOgorICAgICAgICBpZiB0ZXh0IGlzIG5vdCBTVVBQUkVTUyBhbmQgdGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlbGYuX2Zvcm1hdF90ZXh0LCBbdGV4dF0pCisKKyAgICBkZWYgYWRkX3VzYWdlKHNlbGYsIHVzYWdlLCBhY3Rpb25zLCBncm91cHMsIHByZWZpeD1Ob25lKToKKyAgICAgICAgaWYgdXNhZ2UgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgYXJncyA9IHVzYWdlLCBhY3Rpb25zLCBncm91cHMsIHByZWZpeAorICAgICAgICAgICAgc2VsZi5fYWRkX2l0ZW0oc2VsZi5fZm9ybWF0X3VzYWdlLCBhcmdzKQorCisgICAgZGVmIGFkZF9hcmd1bWVudChzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24uaGVscCBpcyBub3QgU1VQUFJFU1M6CisKKyAgICAgICAgICAgICMgZmluZCBhbGwgaW52b2NhdGlvbnMKKyAgICAgICAgICAgIGdldF9pbnZvY2F0aW9uID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uCisgICAgICAgICAgICBpbnZvY2F0aW9ucyA9IFtnZXRfaW52b2NhdGlvbihhY3Rpb24pXQorICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBzZWxmLl9pdGVyX2luZGVudGVkX3N1YmFjdGlvbnMoYWN0aW9uKToKKyAgICAgICAgICAgICAgICBpbnZvY2F0aW9ucy5hcHBlbmQoZ2V0X2ludm9jYXRpb24oc3ViYWN0aW9uKSkKKworICAgICAgICAgICAgIyB1cGRhdGUgdGhlIG1heGltdW0gaXRlbSBsZW5ndGgKKyAgICAgICAgICAgIGludm9jYXRpb25fbGVuZ3RoID0gbWF4KFtsZW4ocykgZm9yIHMgaW4gaW52b2NhdGlvbnNdKQorICAgICAgICAgICAgYWN0aW9uX2xlbmd0aCA9IGludm9jYXRpb25fbGVuZ3RoICsgc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoID0gbWF4KHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX2xlbmd0aCkKKworICAgICAgICAgICAgIyBhZGQgdGhlIGl0ZW0gdG8gdGhlIGxpc3QKKyAgICAgICAgICAgIHNlbGYuX2FkZF9pdGVtKHNlbGYuX2Zvcm1hdF9hY3Rpb24sIFthY3Rpb25dKQorCisgICAgZGVmIGFkZF9hcmd1bWVudHMoc2VsZiwgYWN0aW9ucyk6CisgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYWRkX2FyZ3VtZW50KGFjdGlvbikKKworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIEhlbHAtZm9ybWF0dGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgIGRlZiBmb3JtYXRfaGVscChzZWxmKToKKyAgICAgICAgaGVscCA9IHNlbGYuX3Jvb3Rfc2VjdGlvbi5mb3JtYXRfaGVscCgpCisgICAgICAgIGlmIGhlbHA6CisgICAgICAgICAgICBoZWxwID0gc2VsZi5fbG9uZ19icmVha19tYXRjaGVyLnN1YignXG5cbicsIGhlbHApCisgICAgICAgICAgICBoZWxwID0gaGVscC5zdHJpcCgnXG4nKSArICdcbicKKyAgICAgICAgcmV0dXJuIGhlbHAKKworICAgIGRlZiBfam9pbl9wYXJ0cyhzZWxmLCBwYXJ0X3N0cmluZ3MpOgorICAgICAgICByZXR1cm4gJycuam9pbihbcGFydAorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGFydF9zdHJpbmdzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0IGFuZCBwYXJ0IGlzIG5vdCBTVVBQUkVTU10pCisKKyAgICBkZWYgX2Zvcm1hdF91c2FnZShzZWxmLCB1c2FnZSwgYWN0aW9ucywgZ3JvdXBzLCBwcmVmaXgpOgorICAgICAgICBpZiBwcmVmaXggaXMgTm9uZToKKyAgICAgICAgICAgIHByZWZpeCA9IF8oJ3VzYWdlOiAnKQorCisgICAgICAgICMgaWYgdXNhZ2UgaXMgc3BlY2lmaWVkLCB1c2UgdGhhdAorICAgICAgICBpZiB1c2FnZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHVzYWdlID0gdXNhZ2UgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKworICAgICAgICAjIGlmIG5vIG9wdGlvbmFscyBvciBwb3NpdGlvbmFscyBhcmUgYXZhaWxhYmxlLCB1c2FnZSBpcyBqdXN0IHByb2cKKyAgICAgICAgZWxpZiB1c2FnZSBpcyBOb25lIGFuZCBub3QgYWN0aW9uczoKKyAgICAgICAgICAgIHVzYWdlID0gJyUocHJvZylzJyAlIGRpY3QocHJvZz1zZWxmLl9wcm9nKQorCisgICAgICAgICMgaWYgb3B0aW9uYWxzIGFuZCBwb3NpdGlvbmFscyBhcmUgYXZhaWxhYmxlLCBjYWxjdWxhdGUgdXNhZ2UKKyAgICAgICAgZWxpZiB1c2FnZSBpcyBOb25lOgorICAgICAgICAgICAgcHJvZyA9ICclKHByb2cpcycgJSBkaWN0KHByb2c9c2VsZi5fcHJvZykKKworICAgICAgICAgICAgIyBzcGxpdCBvcHRpb25hbHMgZnJvbSBwb3NpdGlvbmFscworICAgICAgICAgICAgb3B0aW9uYWxzID0gW10KKyAgICAgICAgICAgIHBvc2l0aW9uYWxzID0gW10KKyAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gYWN0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFscy5hcHBlbmQoYWN0aW9uKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxzLmFwcGVuZChhY3Rpb24pCisKKyAgICAgICAgICAgICMgYnVpbGQgZnVsbCB1c2FnZSBzdHJpbmcKKyAgICAgICAgICAgIGZvcm1hdCA9IHNlbGYuX2Zvcm1hdF9hY3Rpb25zX3VzYWdlCisgICAgICAgICAgICBhY3Rpb25fdXNhZ2UgPSBmb3JtYXQob3B0aW9uYWxzICsgcG9zaXRpb25hbHMsIGdyb3VwcykKKyAgICAgICAgICAgIHVzYWdlID0gJyAnLmpvaW4oW3MgZm9yIHMgaW4gW3Byb2csIGFjdGlvbl91c2FnZV0gaWYgc10pCisKKyAgICAgICAgICAgICMgd3JhcCB0aGUgdXNhZ2UgcGFydHMgaWYgaXQncyB0b28gbG9uZworICAgICAgICAgICAgdGV4dF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gc2VsZi5fY3VycmVudF9pbmRlbnQKKyAgICAgICAgICAgIGlmIGxlbihwcmVmaXgpICsgbGVuKHVzYWdlKSA+IHRleHRfd2lkdGg6CisKKyAgICAgICAgICAgICAgICAjIGJyZWFrIHVzYWdlIGludG8gd3JhcHBhYmxlIHBhcnRzCisgICAgICAgICAgICAgICAgcGFydF9yZWdleHAgPSByJ1woLio/XCkrfFxbLio/XF0rfFxTKycKKyAgICAgICAgICAgICAgICBvcHRfdXNhZ2UgPSBmb3JtYXQob3B0aW9uYWxzLCBncm91cHMpCisgICAgICAgICAgICAgICAgcG9zX3VzYWdlID0gZm9ybWF0KHBvc2l0aW9uYWxzLCBncm91cHMpCisgICAgICAgICAgICAgICAgb3B0X3BhcnRzID0gX3JlLmZpbmRhbGwocGFydF9yZWdleHAsIG9wdF91c2FnZSkKKyAgICAgICAgICAgICAgICBwb3NfcGFydHMgPSBfcmUuZmluZGFsbChwYXJ0X3JlZ2V4cCwgcG9zX3VzYWdlKQorICAgICAgICAgICAgICAgIGFzc2VydCAnICcuam9pbihvcHRfcGFydHMpID09IG9wdF91c2FnZQorICAgICAgICAgICAgICAgIGFzc2VydCAnICcuam9pbihwb3NfcGFydHMpID09IHBvc191c2FnZQorCisgICAgICAgICAgICAgICAgIyBoZWxwZXIgZm9yIHdyYXBwaW5nIGxpbmVzCisgICAgICAgICAgICAgICAgZGVmIGdldF9saW5lcyhwYXJ0cywgaW5kZW50LCBwcmVmaXg9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IFtdCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuID0gbGVuKHByZWZpeCkgLSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbiA9IGxlbihpbmRlbnQpIC0gMQorICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVfbGVuICsgMSArIGxlbihwYXJ0KSA+IHRleHRfd2lkdGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcgJy5qb2luKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfbGVuID0gbGVuKGluZGVudCkgLSAxCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZChwYXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9sZW4gKz0gbGVuKHBhcnQpICsgMQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcgJy5qb2luKGxpbmUpKQorICAgICAgICAgICAgICAgICAgICBpZiBwcmVmaXggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1swXSA9IGxpbmVzWzBdW2xlbihpbmRlbnQpOl0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICAgICAgICAgICAgICAjIGlmIHByb2cgaXMgc2hvcnQsIGZvbGxvdyBpdCB3aXRoIG9wdGlvbmFscyBvciBwb3NpdGlvbmFscworICAgICAgICAgICAgICAgIGlmIGxlbihwcmVmaXgpICsgbGVuKHByb2cpIDw9IDAuNzUgKiB0ZXh0X3dpZHRoOgorICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICcgKiAobGVuKHByZWZpeCkgKyBsZW4ocHJvZykgKyAxKQorICAgICAgICAgICAgICAgICAgICBpZiBvcHRfcGFydHM6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IGdldF9saW5lcyhbcHJvZ10gKyBvcHRfcGFydHMsIGluZGVudCwgcHJlZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdldF9saW5lcyhwb3NfcGFydHMsIGluZGVudCkpCisgICAgICAgICAgICAgICAgICAgIGVsaWYgcG9zX3BhcnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBnZXRfbGluZXMoW3Byb2ddICsgcG9zX3BhcnRzLCBpbmRlbnQsIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW3Byb2ddCisKKyAgICAgICAgICAgICAgICAjIGlmIHByb2cgaXMgbG9uZywgcHV0IGl0IG9uIGl0cyBvd24gbGluZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGluZGVudCA9ICcgJyAqIGxlbihwcmVmaXgpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gb3B0X3BhcnRzICsgcG9zX3BhcnRzCisgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gZ2V0X2xpbmVzKHBhcnRzLCBpbmRlbnQpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcykgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKGdldF9saW5lcyhvcHRfcGFydHMsIGluZGVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5leHRlbmQoZ2V0X2xpbmVzKHBvc19wYXJ0cywgaW5kZW50KSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbcHJvZ10gKyBsaW5lcworCisgICAgICAgICAgICAgICAgIyBqb2luIGxpbmVzIGludG8gdXNhZ2UKKyAgICAgICAgICAgICAgICB1c2FnZSA9ICdcbicuam9pbihsaW5lcykKKworICAgICAgICAjIHByZWZpeCB3aXRoICd1c2FnZTonCisgICAgICAgIHJldHVybiAnJXMlc1xuXG4nICUgKHByZWZpeCwgdXNhZ2UpCisKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb25zX3VzYWdlKHNlbGYsIGFjdGlvbnMsIGdyb3Vwcyk6CisgICAgICAgICMgZmluZCBncm91cCBpbmRpY2VzIGFuZCBpZGVudGlmeSBhY3Rpb25zIGluIGdyb3VwcworICAgICAgICBncm91cF9hY3Rpb25zID0gc2V0KCkKKyAgICAgICAgaW5zZXJ0cyA9IHt9CisgICAgICAgIGZvciBncm91cCBpbiBncm91cHM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3RhcnQgPSBhY3Rpb25zLmluZGV4KGdyb3VwLl9ncm91cF9hY3Rpb25zWzBdKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBsZW4oZ3JvdXAuX2dyb3VwX2FjdGlvbnMpCisgICAgICAgICAgICAgICAgaWYgYWN0aW9uc1tzdGFydDplbmRdID09IGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBfYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZ3JvdXAucmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGFydCBpbiBpbnNlcnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbc3RhcnRdICs9ICcgWycKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tzdGFydF0gPSAnWycKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbZW5kXSA9ICddJworICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhcnQgaW4gaW5zZXJ0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW3N0YXJ0XSArPSAnICgnCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydHNbc3RhcnRdID0gJygnCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRzW2VuZF0gPSAnKScKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc3RhcnQgKyAxLCBlbmQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0c1tpXSA9ICd8JworCisgICAgICAgICMgY29sbGVjdCBhbGwgYWN0aW9ucyBmb3JtYXQgc3RyaW5ncworICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGZvciBpLCBhY3Rpb24gaW4gZW51bWVyYXRlKGFjdGlvbnMpOgorCisgICAgICAgICAgICAjIHN1cHByZXNzZWQgYXJndW1lbnRzIGFyZSBtYXJrZWQgd2l0aCBOb25lCisgICAgICAgICAgICAjIHJlbW92ZSB8IHNlcGFyYXRvcnMgZm9yIHN1cHByZXNzZWQgYXJndW1lbnRzCisgICAgICAgICAgICBpZiBhY3Rpb24uaGVscCBpcyBTVVBQUkVTUzoKKyAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBpbnNlcnRzLmdldChpKSA9PSAnfCc6CisgICAgICAgICAgICAgICAgICAgIGluc2VydHMucG9wKGkpCisgICAgICAgICAgICAgICAgZWxpZiBpbnNlcnRzLmdldChpICsgMSkgPT0gJ3wnOgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRzLnBvcChpICsgMSkKKworICAgICAgICAgICAgIyBwcm9kdWNlIGFsbCBhcmcgc3RyaW5ncworICAgICAgICAgICAgZWxpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIHBhcnQgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGFjdGlvbi5kZXN0KQorCisgICAgICAgICAgICAgICAgIyBpZiBpdCdzIGluIGEgZ3JvdXAsIHN0cmlwIHRoZSBvdXRlciBbXQorICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBpbiBncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0WzBdID09ICdbJyBhbmQgcGFydFstMV0gPT0gJ10nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnRbMTotMV0KKworICAgICAgICAgICAgICAgICMgYWRkIHRoZSBhY3Rpb24gc3RyaW5nIHRvIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgICAgICMgcHJvZHVjZSB0aGUgZmlyc3Qgd2F5IHRvIGludm9rZSB0aGUgb3B0aW9uIGluIGJyYWNrZXRzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcgPSBhY3Rpb24ub3B0aW9uX3N0cmluZ3NbMF0KKworICAgICAgICAgICAgICAgICMgaWYgdGhlIE9wdGlvbmFsIGRvZXNuJ3QgdGFrZSBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAgICAgIyAgICAtcyBvciAtLWxvbmcKKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ubmFyZ3MgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9ICclcycgJSBvcHRpb25fc3RyaW5nCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCB0YWtlcyBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAgICAgIyAgICAtcyBBUkdTIG9yIC0tbG9uZyBBUkdTCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IGFjdGlvbi5kZXN0LnVwcGVyKCkKKyAgICAgICAgICAgICAgICAgICAgYXJnc19zdHJpbmcgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSAnJXMgJXMnICUgKG9wdGlvbl9zdHJpbmcsIGFyZ3Nfc3RyaW5nKQorCisgICAgICAgICAgICAgICAgIyBtYWtlIGl0IGxvb2sgb3B0aW9uYWwgaWYgaXQncyBub3QgcmVxdWlyZWQgb3IgaW4gYSBncm91cAorICAgICAgICAgICAgICAgIGlmIG5vdCBhY3Rpb24ucmVxdWlyZWQgYW5kIGFjdGlvbiBub3QgaW4gZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgcGFydCA9ICdbJXNdJyAlIHBhcnQKKworICAgICAgICAgICAgICAgICMgYWRkIHRoZSBhY3Rpb24gc3RyaW5nIHRvIHRoZSBsaXN0CisgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKHBhcnQpCisKKyAgICAgICAgIyBpbnNlcnQgdGhpbmdzIGF0IHRoZSBuZWNlc3NhcnkgaW5kaWNlcworICAgICAgICBmb3IgaSBpbiBzb3J0ZWQoaW5zZXJ0cywgcmV2ZXJzZT1UcnVlKToKKyAgICAgICAgICAgIHBhcnRzW2k6aV0gPSBbaW5zZXJ0c1tpXV0KKworICAgICAgICAjIGpvaW4gYWxsIHRoZSBhY3Rpb24gaXRlbXMgd2l0aCBzcGFjZXMKKyAgICAgICAgdGV4dCA9ICcgJy5qb2luKFtpdGVtIGZvciBpdGVtIGluIHBhcnRzIGlmIGl0ZW0gaXMgbm90IE5vbmVdKQorCisgICAgICAgICMgY2xlYW4gdXAgc2VwYXJhdG9ycyBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwcworICAgICAgICBvcGVuID0gcidbXFsoXScKKyAgICAgICAgY2xvc2UgPSByJ1tcXSldJworICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJyglcykgJyAlIG9wZW4sIHInXDEnLCB0ZXh0KQorICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJyAoJXMpJyAlIGNsb3NlLCByJ1wxJywgdGV4dCkKKyAgICAgICAgdGV4dCA9IF9yZS5zdWIociclcyAqJXMnICUgKG9wZW4sIGNsb3NlKSwgcicnLCB0ZXh0KQorICAgICAgICB0ZXh0ID0gX3JlLnN1YihyJ1woKFtefF0qKVwpJywgcidcMScsIHRleHQpCisgICAgICAgIHRleHQgPSB0ZXh0LnN0cmlwKCkKKworICAgICAgICAjIHJldHVybiB0aGUgdGV4dAorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF9mb3JtYXRfdGV4dChzZWxmLCB0ZXh0KToKKyAgICAgICAgaWYgJyUocHJvZyknIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dCAlIGRpY3QocHJvZz1zZWxmLl9wcm9nKQorICAgICAgICB0ZXh0X3dpZHRoID0gc2VsZi5fd2lkdGggLSBzZWxmLl9jdXJyZW50X2luZGVudAorICAgICAgICBpbmRlbnQgPSAnICcgKiBzZWxmLl9jdXJyZW50X2luZGVudAorICAgICAgICByZXR1cm4gc2VsZi5fZmlsbF90ZXh0KHRleHQsIHRleHRfd2lkdGgsIGluZGVudCkgKyAnXG5cbicKKworICAgIGRlZiBfZm9ybWF0X2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICAjIGRldGVybWluZSB0aGUgcmVxdWlyZWQgd2lkdGggYW5kIHRoZSBlbnRyeSBsYWJlbAorICAgICAgICBoZWxwX3Bvc2l0aW9uID0gbWluKHNlbGYuX2FjdGlvbl9tYXhfbGVuZ3RoICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXhfaGVscF9wb3NpdGlvbikKKyAgICAgICAgaGVscF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaGVscF9wb3NpdGlvbgorICAgICAgICBhY3Rpb25fd2lkdGggPSBoZWxwX3Bvc2l0aW9uIC0gc2VsZi5fY3VycmVudF9pbmRlbnQgLSAyCisgICAgICAgIGFjdGlvbl9oZWFkZXIgPSBzZWxmLl9mb3JtYXRfYWN0aW9uX2ludm9jYXRpb24oYWN0aW9uKQorCisgICAgICAgICMgaG8gbmVscDsgc3RhcnQgb24gc2FtZSBsaW5lIGFuZCBhZGQgYSBmaW5hbCBuZXdsaW5lCisgICAgICAgIGlmIG5vdCBhY3Rpb24uaGVscDoKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX2hlYWRlcgorICAgICAgICAgICAgYWN0aW9uX2hlYWRlciA9ICclKnMlc1xuJyAlIHR1cAorCisgICAgICAgICMgc2hvcnQgYWN0aW9uIG5hbWU7IHN0YXJ0IG9uIHRoZSBzYW1lIGxpbmUgYW5kIHBhZCB0d28gc3BhY2VzCisgICAgICAgIGVsaWYgbGVuKGFjdGlvbl9oZWFkZXIpIDw9IGFjdGlvbl93aWR0aDoKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX3dpZHRoLCBhY3Rpb25faGVhZGVyCisgICAgICAgICAgICBhY3Rpb25faGVhZGVyID0gJyUqcyUtKnMgICcgJSB0dXAKKyAgICAgICAgICAgIGluZGVudF9maXJzdCA9IDAKKworICAgICAgICAjIGxvbmcgYWN0aW9uIG5hbWU7IHN0YXJ0IG9uIHRoZSBuZXh0IGxpbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHR1cCA9IHNlbGYuX2N1cnJlbnRfaW5kZW50LCAnJywgYWN0aW9uX2hlYWRlcgorICAgICAgICAgICAgYWN0aW9uX2hlYWRlciA9ICclKnMlc1xuJyAlIHR1cAorICAgICAgICAgICAgaW5kZW50X2ZpcnN0ID0gaGVscF9wb3NpdGlvbgorCisgICAgICAgICMgY29sbGVjdCB0aGUgcGllY2VzIG9mIHRoZSBhY3Rpb24gaGVscAorICAgICAgICBwYXJ0cyA9IFthY3Rpb25faGVhZGVyXQorCisgICAgICAgICMgaWYgdGhlcmUgd2FzIGhlbHAgZm9yIHRoZSBhY3Rpb24sIGFkZCBsaW5lcyBvZiBoZWxwIHRleHQKKyAgICAgICAgaWYgYWN0aW9uLmhlbHA6CisgICAgICAgICAgICBoZWxwX3RleHQgPSBzZWxmLl9leHBhbmRfaGVscChhY3Rpb24pCisgICAgICAgICAgICBoZWxwX2xpbmVzID0gc2VsZi5fc3BsaXRfbGluZXMoaGVscF90ZXh0LCBoZWxwX3dpZHRoKQorICAgICAgICAgICAgcGFydHMuYXBwZW5kKCclKnMlc1xuJyAlIChpbmRlbnRfZmlyc3QsICcnLCBoZWxwX2xpbmVzWzBdKSkKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGhlbHBfbGluZXNbMTpdOgorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgnJSpzJXNcbicgJSAoaGVscF9wb3NpdGlvbiwgJycsIGxpbmUpKQorCisgICAgICAgICMgb3IgYWRkIGEgbmV3bGluZSBpZiB0aGUgZGVzY3JpcHRpb24gZG9lc24ndCBlbmQgd2l0aCBvbmUKKyAgICAgICAgZWxpZiBub3QgYWN0aW9uX2hlYWRlci5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgIHBhcnRzLmFwcGVuZCgnXG4nKQorCisgICAgICAgICMgaWYgdGhlcmUgYXJlIGFueSBzdWItYWN0aW9ucywgYWRkIHRoZWlyIGhlbHAgYXMgd2VsbAorICAgICAgICBmb3Igc3ViYWN0aW9uIGluIHNlbGYuX2l0ZXJfaW5kZW50ZWRfc3ViYWN0aW9ucyhhY3Rpb24pOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKHNlbGYuX2Zvcm1hdF9hY3Rpb24oc3ViYWN0aW9uKSkKKworICAgICAgICAjIHJldHVybiBhIHNpbmdsZSBzdHJpbmcKKyAgICAgICAgcmV0dXJuIHNlbGYuX2pvaW5fcGFydHMocGFydHMpCisKKyAgICBkZWYgX2Zvcm1hdF9hY3Rpb25faW52b2NhdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgbWV0YXZhciwgPSBzZWxmLl9tZXRhdmFyX2Zvcm1hdHRlcihhY3Rpb24sIGFjdGlvbi5kZXN0KSgxKQorICAgICAgICAgICAgcmV0dXJuIG1ldGF2YXIKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFydHMgPSBbXQorCisgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCBkb2Vzbid0IHRha2UgYSB2YWx1ZSwgZm9ybWF0IGlzOgorICAgICAgICAgICAgIyAgICAtcywgLS1sb25nCisgICAgICAgICAgICBpZiBhY3Rpb24ubmFyZ3MgPT0gMDoKKyAgICAgICAgICAgICAgICBwYXJ0cy5leHRlbmQoYWN0aW9uLm9wdGlvbl9zdHJpbmdzKQorCisgICAgICAgICAgICAjIGlmIHRoZSBPcHRpb25hbCB0YWtlcyBhIHZhbHVlLCBmb3JtYXQgaXM6CisgICAgICAgICAgICAjICAgIC1zIEFSR1MsIC0tbG9uZyBBUkdTCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlZmF1bHQgPSBhY3Rpb24uZGVzdC51cHBlcigpCisgICAgICAgICAgICAgICAgYXJnc19zdHJpbmcgPSBzZWxmLl9mb3JtYXRfYXJncyhhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoJyVzICVzJyAlIChvcHRpb25fc3RyaW5nLCBhcmdzX3N0cmluZykpCisKKyAgICAgICAgICAgIHJldHVybiAnLCAnLmpvaW4ocGFydHMpCisKKyAgICBkZWYgX21ldGF2YXJfZm9ybWF0dGVyKHNlbGYsIGFjdGlvbiwgZGVmYXVsdF9tZXRhdmFyKToKKyAgICAgICAgaWYgYWN0aW9uLm1ldGF2YXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXN1bHQgPSBhY3Rpb24ubWV0YXZhcgorICAgICAgICBlbGlmIGFjdGlvbi5jaG9pY2VzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2hvaWNlX3N0cnMgPSBbc3RyKGNob2ljZSkgZm9yIGNob2ljZSBpbiBhY3Rpb24uY2hvaWNlc10KKyAgICAgICAgICAgIHJlc3VsdCA9ICd7JXN9JyAlICcsJy5qb2luKGNob2ljZV9zdHJzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gZGVmYXVsdF9tZXRhdmFyCisKKyAgICAgICAgZGVmIGZvcm1hdCh0dXBsZV9zaXplKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCB0dXBsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCwgKSAqIHR1cGxlX3NpemUKKyAgICAgICAgcmV0dXJuIGZvcm1hdAorCisgICAgZGVmIF9mb3JtYXRfYXJncyhzZWxmLCBhY3Rpb24sIGRlZmF1bHRfbWV0YXZhcik6CisgICAgICAgIGdldF9tZXRhdmFyID0gc2VsZi5fbWV0YXZhcl9mb3JtYXR0ZXIoYWN0aW9uLCBkZWZhdWx0X21ldGF2YXIpCisgICAgICAgIGlmIGFjdGlvbi5uYXJncyBpcyBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gJyVzJyAlIGdldF9tZXRhdmFyKDEpCisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IE9QVElPTkFMOgorICAgICAgICAgICAgcmVzdWx0ID0gJ1slc10nICUgZ2V0X21ldGF2YXIoMSkKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gWkVST19PUl9NT1JFOgorICAgICAgICAgICAgcmVzdWx0ID0gJ1slcyBbJXMgLi4uXV0nICUgZ2V0X21ldGF2YXIoMikKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gT05FX09SX01PUkU6CisgICAgICAgICAgICByZXN1bHQgPSAnJXMgWyVzIC4uLl0nICUgZ2V0X21ldGF2YXIoMikKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgcmVzdWx0ID0gJy4uLicKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUEFSU0VSOgorICAgICAgICAgICAgcmVzdWx0ID0gJyVzIC4uLicgJSBnZXRfbWV0YXZhcigxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9ybWF0cyA9IFsnJXMnIGZvciBfIGluIHJhbmdlKGFjdGlvbi5uYXJncyldCisgICAgICAgICAgICByZXN1bHQgPSAnICcuam9pbihmb3JtYXRzKSAlIGdldF9tZXRhdmFyKGFjdGlvbi5uYXJncykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9leHBhbmRfaGVscChzZWxmLCBhY3Rpb24pOgorICAgICAgICBwYXJhbXMgPSBkaWN0KHZhcnMoYWN0aW9uKSwgcHJvZz1zZWxmLl9wcm9nKQorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KHBhcmFtcyk6CisgICAgICAgICAgICBpZiBwYXJhbXNbbmFtZV0gaXMgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgZGVsIHBhcmFtc1tuYW1lXQorICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KHBhcmFtcyk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKHBhcmFtc1tuYW1lXSwgJ19fbmFtZV9fJyk6CisgICAgICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gcGFyYW1zW25hbWVdLl9fbmFtZV9fCisgICAgICAgIGlmIHBhcmFtcy5nZXQoJ2Nob2ljZXMnKSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNob2ljZXNfc3RyID0gJywgJy5qb2luKFtzdHIoYykgZm9yIGMgaW4gcGFyYW1zWydjaG9pY2VzJ11dKQorICAgICAgICAgICAgcGFyYW1zWydjaG9pY2VzJ10gPSBjaG9pY2VzX3N0cgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2hlbHBfc3RyaW5nKGFjdGlvbikgJSBwYXJhbXMKKworICAgIGRlZiBfaXRlcl9pbmRlbnRlZF9zdWJhY3Rpb25zKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdldF9zdWJhY3Rpb25zID0gYWN0aW9uLl9nZXRfc3ViYWN0aW9ucworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9pbmRlbnQoKQorICAgICAgICAgICAgZm9yIHN1YmFjdGlvbiBpbiBnZXRfc3ViYWN0aW9ucygpOgorICAgICAgICAgICAgICAgIHlpZWxkIHN1YmFjdGlvbgorICAgICAgICAgICAgc2VsZi5fZGVkZW50KCkKKworICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgorICAgICAgICB0ZXh0ID0gc2VsZi5fd2hpdGVzcGFjZV9tYXRjaGVyLnN1YignICcsIHRleHQpLnN0cmlwKCkKKyAgICAgICAgcmV0dXJuIF90ZXh0d3JhcC53cmFwKHRleHQsIHdpZHRoKQorCisgICAgZGVmIF9maWxsX3RleHQoc2VsZiwgdGV4dCwgd2lkdGgsIGluZGVudCk6CisgICAgICAgIHRleHQgPSBzZWxmLl93aGl0ZXNwYWNlX21hdGNoZXIuc3ViKCcgJywgdGV4dCkuc3RyaXAoKQorICAgICAgICByZXR1cm4gX3RleHR3cmFwLmZpbGwodGV4dCwgd2lkdGgsIGluaXRpYWxfaW5kZW50PWluZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD1pbmRlbnQpCisKKyAgICBkZWYgX2dldF9oZWxwX3N0cmluZyhzZWxmLCBhY3Rpb24pOgorICAgICAgICByZXR1cm4gYWN0aW9uLmhlbHAKKworCitjbGFzcyBSYXdEZXNjcmlwdGlvbkhlbHBGb3JtYXR0ZXIoSGVscEZvcm1hdHRlcik6CisgICAgIiIiSGVscCBtZXNzYWdlIGZvcm1hdHRlciB3aGljaCByZXRhaW5zIGFueSBmb3JtYXR0aW5nIGluIGRlc2NyaXB0aW9ucy4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfZmlsbF90ZXh0KHNlbGYsIHRleHQsIHdpZHRoLCBpbmRlbnQpOgorICAgICAgICByZXR1cm4gJycuam9pbihbaW5kZW50ICsgbGluZSBmb3IgbGluZSBpbiB0ZXh0LnNwbGl0bGluZXMoVHJ1ZSldKQorCisKK2NsYXNzIFJhd1RleHRIZWxwRm9ybWF0dGVyKFJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcik6CisgICAgIiIiSGVscCBtZXNzYWdlIGZvcm1hdHRlciB3aGljaCByZXRhaW5zIGZvcm1hdHRpbmcgb2YgYWxsIGhlbHAgdGV4dC4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgorICAgICAgICByZXR1cm4gdGV4dC5zcGxpdGxpbmVzKCkKKworCitjbGFzcyBBcmd1bWVudERlZmF1bHRzSGVscEZvcm1hdHRlcihIZWxwRm9ybWF0dGVyKToKKyAgICAiIiJIZWxwIG1lc3NhZ2UgZm9ybWF0dGVyIHdoaWNoIGFkZHMgZGVmYXVsdCB2YWx1ZXMgdG8gYXJndW1lbnQgaGVscC4KKworICAgIE9ubHkgdGhlIG5hbWUgb2YgdGhpcyBjbGFzcyBpcyBjb25zaWRlcmVkIGEgcHVibGljIEFQSS4gQWxsIHRoZSBtZXRob2RzCisgICAgcHJvdmlkZWQgYnkgdGhlIGNsYXNzIGFyZSBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAiIiIKKworICAgIGRlZiBfZ2V0X2hlbHBfc3RyaW5nKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGhlbHAgPSBhY3Rpb24uaGVscAorICAgICAgICBpZiAnJShkZWZhdWx0KScgbm90IGluIGFjdGlvbi5oZWxwOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlZmF1bHQgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGRlZmF1bHRpbmdfbmFyZ3MgPSBbT1BUSU9OQUwsIFpFUk9fT1JfTU9SRV0KKyAgICAgICAgICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3Mgb3IgYWN0aW9uLm5hcmdzIGluIGRlZmF1bHRpbmdfbmFyZ3M6CisgICAgICAgICAgICAgICAgICAgIGhlbHAgKz0gJyAoZGVmYXVsdDogJShkZWZhdWx0KXMpJworICAgICAgICByZXR1cm4gaGVscAorCisKKyMgPT09PT09PT09PT09PT09PT09PT09CisjIE9wdGlvbnMgYW5kIEFyZ3VtZW50cworIyA9PT09PT09PT09PT09PT09PT09PT0KKworZGVmIF9nZXRfYWN0aW9uX25hbWUoYXJndW1lbnQpOgorICAgIGlmIGFyZ3VtZW50IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgZWxpZiBhcmd1bWVudC5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgcmV0dXJuICAnLycuam9pbihhcmd1bWVudC5vcHRpb25fc3RyaW5ncykKKyAgICBlbGlmIGFyZ3VtZW50Lm1ldGF2YXIgbm90IGluIChOb25lLCBTVVBQUkVTUyk6CisgICAgICAgIHJldHVybiBhcmd1bWVudC5tZXRhdmFyCisgICAgZWxpZiBhcmd1bWVudC5kZXN0IG5vdCBpbiAoTm9uZSwgU1VQUFJFU1MpOgorICAgICAgICByZXR1cm4gYXJndW1lbnQuZGVzdAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgQXJndW1lbnRFcnJvcihFeGNlcHRpb24pOgorICAgICIiIkFuIGVycm9yIGZyb20gY3JlYXRpbmcgb3IgdXNpbmcgYW4gYXJndW1lbnQgKG9wdGlvbmFsIG9yIHBvc2l0aW9uYWwpLgorCisgICAgVGhlIHN0cmluZyB2YWx1ZSBvZiB0aGlzIGV4Y2VwdGlvbiBpcyB0aGUgbWVzc2FnZSwgYXVnbWVudGVkIHdpdGgKKyAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXJndW1lbnQgdGhhdCBjYXVzZWQgaXQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYXJndW1lbnQsIG1lc3NhZ2UpOgorICAgICAgICBzZWxmLmFyZ3VtZW50X25hbWUgPSBfZ2V0X2FjdGlvbl9uYW1lKGFyZ3VtZW50KQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5hcmd1bWVudF9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBmb3JtYXQgPSAnJShtZXNzYWdlKXMnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3JtYXQgPSAnYXJndW1lbnQgJShhcmd1bWVudF9uYW1lKXM6ICUobWVzc2FnZSlzJworICAgICAgICByZXR1cm4gZm9ybWF0ICUgZGljdChtZXNzYWdlPXNlbGYubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRfbmFtZT1zZWxmLmFyZ3VtZW50X25hbWUpCisKKworY2xhc3MgQXJndW1lbnRUeXBlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJBbiBlcnJvciBmcm9tIHRyeWluZyB0byBjb252ZXJ0IGEgY29tbWFuZCBsaW5lIHN0cmluZyB0byBhIHR5cGUuIiIiCisgICAgcGFzcworCisKKyMgPT09PT09PT09PT09PT0KKyMgQWN0aW9uIGNsYXNzZXMKKyMgPT09PT09PT09PT09PT0KKworY2xhc3MgQWN0aW9uKF9BdHRyaWJ1dGVIb2xkZXIpOgorICAgICIiIkluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjb252ZXJ0IGNvbW1hbmQgbGluZSBzdHJpbmdzIHRvIFB5dGhvbiBvYmplY3RzLgorCisgICAgQWN0aW9uIG9iamVjdHMgYXJlIHVzZWQgYnkgYW4gQXJndW1lbnRQYXJzZXIgdG8gcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbgorICAgIG5lZWRlZCB0byBwYXJzZSBhIHNpbmdsZSBhcmd1bWVudCBmcm9tIG9uZSBvciBtb3JlIHN0cmluZ3MgZnJvbSB0aGUKKyAgICBjb21tYW5kIGxpbmUuIFRoZSBrZXl3b3JkIGFyZ3VtZW50cyB0byB0aGUgQWN0aW9uIGNvbnN0cnVjdG9yIGFyZSBhbHNvCisgICAgYWxsIGF0dHJpYnV0ZXMgb2YgQWN0aW9uIGluc3RhbmNlcy4KKworICAgIEtleXdvcmQgQXJndW1lbnRzOgorCisgICAgICAgIC0gb3B0aW9uX3N0cmluZ3MgLS0gQSBsaXN0IG9mIGNvbW1hbmQtbGluZSBvcHRpb24gc3RyaW5ncyB3aGljaAorICAgICAgICAgICAgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFjdGlvbi4KKworICAgICAgICAtIGRlc3QgLS0gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBob2xkIHRoZSBjcmVhdGVkIG9iamVjdChzKQorCisgICAgICAgIC0gbmFyZ3MgLS0gVGhlIG51bWJlciBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIHRoYXQgc2hvdWxkIGJlCisgICAgICAgICAgICBjb25zdW1lZC4gQnkgZGVmYXVsdCwgb25lIGFyZ3VtZW50IHdpbGwgYmUgY29uc3VtZWQgYW5kIGEgc2luZ2xlCisgICAgICAgICAgICB2YWx1ZSB3aWxsIGJlIHByb2R1Y2VkLiAgT3RoZXIgdmFsdWVzIGluY2x1ZGU6CisgICAgICAgICAgICAgICAgLSBOIChhbiBpbnRlZ2VyKSBjb25zdW1lcyBOIGFyZ3VtZW50cyAoYW5kIHByb2R1Y2VzIGEgbGlzdCkKKyAgICAgICAgICAgICAgICAtICc/JyBjb25zdW1lcyB6ZXJvIG9yIG9uZSBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICAtICcqJyBjb25zdW1lcyB6ZXJvIG9yIG1vcmUgYXJndW1lbnRzIChhbmQgcHJvZHVjZXMgYSBsaXN0KQorICAgICAgICAgICAgICAgIC0gJysnIGNvbnN1bWVzIG9uZSBvciBtb3JlIGFyZ3VtZW50cyAoYW5kIHByb2R1Y2VzIGEgbGlzdCkKKyAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkZWZhdWx0IGFuZCBuYXJncz0xIGlzIHRoYXQKKyAgICAgICAgICAgIHdpdGggdGhlIGRlZmF1bHQsIGEgc2luZ2xlIHZhbHVlIHdpbGwgYmUgcHJvZHVjZWQsIHdoaWxlIHdpdGgKKyAgICAgICAgICAgIG5hcmdzPTEsIGEgbGlzdCBjb250YWluaW5nIGEgc2luZ2xlIHZhbHVlIHdpbGwgYmUgcHJvZHVjZWQuCisKKyAgICAgICAgLSBjb25zdCAtLSBUaGUgdmFsdWUgdG8gYmUgcHJvZHVjZWQgaWYgdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQgYW5kIHRoZQorICAgICAgICAgICAgb3B0aW9uIHVzZXMgYW4gYWN0aW9uIHRoYXQgdGFrZXMgbm8gdmFsdWVzLgorCisgICAgICAgIC0gZGVmYXVsdCAtLSBUaGUgdmFsdWUgdG8gYmUgcHJvZHVjZWQgaWYgdGhlIG9wdGlvbiBpcyBub3Qgc3BlY2lmaWVkLgorCisgICAgICAgIC0gdHlwZSAtLSBUaGUgdHlwZSB3aGljaCB0aGUgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBzaG91bGQgYmUgY29udmVydGVkCisgICAgICAgICAgICB0bywgc2hvdWxkIGJlIG9uZSBvZiAnc3RyaW5nJywgJ2ludCcsICdmbG9hdCcsICdjb21wbGV4JyBvciBhCisgICAgICAgICAgICBjYWxsYWJsZSBvYmplY3QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudC4gSWYgTm9uZSwKKyAgICAgICAgICAgICdzdHJpbmcnIGlzIGFzc3VtZWQuCisKKyAgICAgICAgLSBjaG9pY2VzIC0tIEEgY29udGFpbmVyIG9mIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBhbGxvd2VkLiBJZiBub3QgTm9uZSwKKyAgICAgICAgICAgIGFmdGVyIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50IGhhcyBiZWVuIGNvbnZlcnRlZCB0byB0aGUgYXBwcm9wcmlhdGUKKyAgICAgICAgICAgIHR5cGUsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCBpZiBpdCBpcyBub3QgYSBtZW1iZXIgb2YgdGhpcworICAgICAgICAgICAgY29sbGVjdGlvbi4KKworICAgICAgICAtIHJlcXVpcmVkIC0tIFRydWUgaWYgdGhlIGFjdGlvbiBtdXN0IGFsd2F5cyBiZSBzcGVjaWZpZWQgYXQgdGhlCisgICAgICAgICAgICBjb21tYW5kIGxpbmUuIFRoaXMgaXMgb25seSBtZWFuaW5nZnVsIGZvciBvcHRpb25hbCBjb21tYW5kLWxpbmUKKyAgICAgICAgICAgIGFyZ3VtZW50cy4KKworICAgICAgICAtIGhlbHAgLS0gVGhlIGhlbHAgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGFyZ3VtZW50LgorCisgICAgICAgIC0gbWV0YXZhciAtLSBUaGUgbmFtZSB0byBiZSB1c2VkIGZvciB0aGUgb3B0aW9uJ3MgYXJndW1lbnQgd2l0aCB0aGUKKyAgICAgICAgICAgIGhlbHAgc3RyaW5nLiBJZiBOb25lLCB0aGUgJ2Rlc3QnIHZhbHVlIHdpbGwgYmUgdXNlZCBhcyB0aGUgbmFtZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgbmFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGNob2ljZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgc2VsZi5vcHRpb25fc3RyaW5ncyA9IG9wdGlvbl9zdHJpbmdzCisgICAgICAgIHNlbGYuZGVzdCA9IGRlc3QKKyAgICAgICAgc2VsZi5uYXJncyA9IG5hcmdzCisgICAgICAgIHNlbGYuY29uc3QgPSBjb25zdAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYudHlwZSA9IHR5cGUKKyAgICAgICAgc2VsZi5jaG9pY2VzID0gY2hvaWNlcworICAgICAgICBzZWxmLnJlcXVpcmVkID0gcmVxdWlyZWQKKyAgICAgICAgc2VsZi5oZWxwID0gaGVscAorICAgICAgICBzZWxmLm1ldGF2YXIgPSBtZXRhdmFyCisKKyAgICBkZWYgX2dldF9rd2FyZ3Moc2VsZik6CisgICAgICAgIG5hbWVzID0gWworICAgICAgICAgICAgJ29wdGlvbl9zdHJpbmdzJywKKyAgICAgICAgICAgICdkZXN0JywKKyAgICAgICAgICAgICduYXJncycsCisgICAgICAgICAgICAnY29uc3QnLAorICAgICAgICAgICAgJ2RlZmF1bHQnLAorICAgICAgICAgICAgJ3R5cGUnLAorICAgICAgICAgICAgJ2Nob2ljZXMnLAorICAgICAgICAgICAgJ2hlbHAnLAorICAgICAgICAgICAgJ21ldGF2YXInLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBbKG5hbWUsIGdldGF0dHIoc2VsZiwgbmFtZSkpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoXygnLl9fY2FsbF9fKCkgbm90IGRlZmluZWQnKSkKKworCitjbGFzcyBfU3RvcmVBY3Rpb24oQWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgbmFyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY29uc3Q9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICB0eXBlPU5vbmUsCisgICAgICAgICAgICAgICAgIGNob2ljZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbWV0YXZhcj1Ob25lKToKKyAgICAgICAgaWYgbmFyZ3MgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIGZvciBzdG9yZSBhY3Rpb25zIG11c3QgYmUgPiAwOyBpZiB5b3UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGF2ZSBub3RoaW5nIHRvIHN0b3JlLCBhY3Rpb25zIHN1Y2ggYXMgc3RvcmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZSBvciBzdG9yZSBjb25zdCBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZScpCisgICAgICAgIGlmIGNvbnN0IGlzIG5vdCBOb25lIGFuZCBuYXJncyAhPSBPUFRJT05BTDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIG11c3QgYmUgJXIgdG8gc3VwcGx5IGNvbnN0JyAlIE9QVElPTkFMKQorICAgICAgICBzdXBlcihfU3RvcmVBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBuYXJncz1uYXJncywKKyAgICAgICAgICAgIGNvbnN0PWNvbnN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgdHlwZT10eXBlLAorICAgICAgICAgICAgY2hvaWNlcz1jaG9pY2VzLAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHAsCisgICAgICAgICAgICBtZXRhdmFyPW1ldGF2YXIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgdmFsdWVzKQorCisKK2NsYXNzIF9TdG9yZUNvbnN0QWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIGNvbnN0LAorICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUsCisgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9TdG9yZUNvbnN0QWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGNvbnN0PWNvbnN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgc2VsZi5jb25zdCkKKworCitjbGFzcyBfU3RvcmVUcnVlQWN0aW9uKF9TdG9yZUNvbnN0QWN0aW9uKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLAorICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgZGVzdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9TdG9yZVRydWVBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBjb25zdD1UcnVlLAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKworY2xhc3MgX1N0b3JlRmFsc2VBY3Rpb24oX1N0b3JlQ29uc3RBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBkZWZhdWx0PVRydWUsCisgICAgICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAorICAgICAgICAgICAgICAgICBoZWxwPU5vbmUpOgorICAgICAgICBzdXBlcihfU3RvcmVGYWxzZUFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIGNvbnN0PUZhbHNlLAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgcmVxdWlyZWQ9cmVxdWlyZWQsCisgICAgICAgICAgICBoZWxwPWhlbHApCisKKworY2xhc3MgX0FwcGVuZEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBuYXJncz1Ob25lLAorICAgICAgICAgICAgICAgICBjb25zdD1Ob25lLAorICAgICAgICAgICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIHR5cGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgY2hvaWNlcz1Ob25lLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorICAgICAgICBpZiBuYXJncyA9PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFyZ3MgZm9yIGFwcGVuZCBhY3Rpb25zIG11c3QgYmUgPiAwOyBpZiBhcmcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5ncyBhcmUgbm90IHN1cHBseWluZyB0aGUgdmFsdWUgdG8gYXBwZW5kLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgYXBwZW5kIGNvbnN0IGFjdGlvbiBtYXkgYmUgbW9yZSBhcHByb3ByaWF0ZScpCisgICAgICAgIGlmIGNvbnN0IGlzIG5vdCBOb25lIGFuZCBuYXJncyAhPSBPUFRJT05BTDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ25hcmdzIG11c3QgYmUgJXIgdG8gc3VwcGx5IGNvbnN0JyAlIE9QVElPTkFMKQorICAgICAgICBzdXBlcihfQXBwZW5kQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgbmFyZ3M9bmFyZ3MsCisgICAgICAgICAgICBjb25zdD1jb25zdCwKKyAgICAgICAgICAgIGRlZmF1bHQ9ZGVmYXVsdCwKKyAgICAgICAgICAgIHR5cGU9dHlwZSwKKyAgICAgICAgICAgIGNob2ljZXM9Y2hvaWNlcywKKyAgICAgICAgICAgIHJlcXVpcmVkPXJlcXVpcmVkLAorICAgICAgICAgICAgaGVscD1oZWxwLAorICAgICAgICAgICAgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIGl0ZW1zID0gX2NvcHkuY29weShfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCBbXSkpCisgICAgICAgIGl0ZW1zLmFwcGVuZCh2YWx1ZXMpCisgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBzZWxmLmRlc3QsIGl0ZW1zKQorCisKK2NsYXNzIF9BcHBlbmRDb25zdEFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICBjb25zdCwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorICAgICAgICBzdXBlcihfQXBwZW5kQ29uc3RBY3Rpb24sIHNlbGYpLl9faW5pdF9fKAorICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICBkZXN0PWRlc3QsCisgICAgICAgICAgICBuYXJncz0wLAorICAgICAgICAgICAgY29uc3Q9Y29uc3QsCisgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQsCisgICAgICAgICAgICByZXF1aXJlZD1yZXF1aXJlZCwKKyAgICAgICAgICAgIGhlbHA9aGVscCwKKyAgICAgICAgICAgIG1ldGF2YXI9bWV0YXZhcikKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBpdGVtcyA9IF9jb3B5LmNvcHkoX2Vuc3VyZV92YWx1ZShuYW1lc3BhY2UsIHNlbGYuZGVzdCwgW10pKQorICAgICAgICBpdGVtcy5hcHBlbmQoc2VsZi5jb25zdCkKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgaXRlbXMpCisKKworY2xhc3MgX0NvdW50QWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3QsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9Db3VudEFjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPTAsCisgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHQsCisgICAgICAgICAgICByZXF1aXJlZD1yZXF1aXJlZCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBuZXdfY291bnQgPSBfZW5zdXJlX3ZhbHVlKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCAwKSArIDEKKyAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgbmV3X2NvdW50KQorCisKK2NsYXNzIF9IZWxwQWN0aW9uKEFjdGlvbik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIGRlc3Q9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGhlbHA9Tm9uZSk6CisgICAgICAgIHN1cGVyKF9IZWxwQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWVzLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIHBhcnNlci5leGl0KCkKKworCitjbGFzcyBfVmVyc2lvbkFjdGlvbihBY3Rpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgICAgICB2ZXJzaW9uPU5vbmUsCisgICAgICAgICAgICAgICAgIGRlc3Q9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9U1VQUFJFU1MsCisgICAgICAgICAgICAgICAgIGhlbHA9InNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0Iik6CisgICAgICAgIHN1cGVyKF9WZXJzaW9uQWN0aW9uLCBzZWxmKS5fX2luaXRfXygKKyAgICAgICAgICAgIG9wdGlvbl9zdHJpbmdzPW9wdGlvbl9zdHJpbmdzLAorICAgICAgICAgICAgZGVzdD1kZXN0LAorICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0LAorICAgICAgICAgICAgbmFyZ3M9MCwKKyAgICAgICAgICAgIGhlbHA9aGVscCkKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgIHZlcnNpb24gPSBzZWxmLnZlcnNpb24KKyAgICAgICAgaWYgdmVyc2lvbiBpcyBOb25lOgorICAgICAgICAgICAgdmVyc2lvbiA9IHBhcnNlci52ZXJzaW9uCisgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlci5fZ2V0X2Zvcm1hdHRlcigpCisgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dCh2ZXJzaW9uKQorICAgICAgICBwYXJzZXIuZXhpdChtZXNzYWdlPWZvcm1hdHRlci5mb3JtYXRfaGVscCgpKQorCisKK2NsYXNzIF9TdWJQYXJzZXJzQWN0aW9uKEFjdGlvbik6CisKKyAgICBjbGFzcyBfQ2hvaWNlc1BzZXVkb0FjdGlvbihBY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBhbGlhc2VzLCBoZWxwKToKKyAgICAgICAgICAgIG1ldGF2YXIgPSBkZXN0ID0gbmFtZQorICAgICAgICAgICAgaWYgYWxpYXNlczoKKyAgICAgICAgICAgICAgICBtZXRhdmFyICs9ICcgKCVzKScgJSAnLCAnLmpvaW4oYWxpYXNlcykKKyAgICAgICAgICAgIHN1cCA9IHN1cGVyKF9TdWJQYXJzZXJzQWN0aW9uLl9DaG9pY2VzUHNldWRvQWN0aW9uLCBzZWxmKQorICAgICAgICAgICAgc3VwLl9faW5pdF9fKG9wdGlvbl9zdHJpbmdzPVtdLCBkZXN0PWRlc3QsIGhlbHA9aGVscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPW1ldGF2YXIpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MsCisgICAgICAgICAgICAgICAgIHByb2csCisgICAgICAgICAgICAgICAgIHBhcnNlcl9jbGFzcywKKyAgICAgICAgICAgICAgICAgZGVzdD1TVVBQUkVTUywKKyAgICAgICAgICAgICAgICAgaGVscD1Ob25lLAorICAgICAgICAgICAgICAgICBtZXRhdmFyPU5vbmUpOgorCisgICAgICAgIHNlbGYuX3Byb2dfcHJlZml4ID0gcHJvZworICAgICAgICBzZWxmLl9wYXJzZXJfY2xhc3MgPSBwYXJzZXJfY2xhc3MKKyAgICAgICAgc2VsZi5fbmFtZV9wYXJzZXJfbWFwID0gX2NvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5fY2hvaWNlc19hY3Rpb25zID0gW10KKworICAgICAgICBzdXBlcihfU3ViUGFyc2Vyc0FjdGlvbiwgc2VsZikuX19pbml0X18oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1vcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgIGRlc3Q9ZGVzdCwKKyAgICAgICAgICAgIG5hcmdzPVBBUlNFUiwKKyAgICAgICAgICAgIGNob2ljZXM9c2VsZi5fbmFtZV9wYXJzZXJfbWFwLAorICAgICAgICAgICAgaGVscD1oZWxwLAorICAgICAgICAgICAgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIGFkZF9wYXJzZXIoc2VsZiwgbmFtZSwgKiprd2FyZ3MpOgorICAgICAgICAjIHNldCBwcm9nIGZyb20gdGhlIGV4aXN0aW5nIHByZWZpeAorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdwcm9nJykgaXMgTm9uZToKKyAgICAgICAgICAgIGt3YXJnc1sncHJvZyddID0gJyVzICVzJyAlIChzZWxmLl9wcm9nX3ByZWZpeCwgbmFtZSkKKworICAgICAgICBhbGlhc2VzID0ga3dhcmdzLnBvcCgnYWxpYXNlcycsICgpKQorCisgICAgICAgICMgY3JlYXRlIGEgcHNldWRvLWFjdGlvbiB0byBob2xkIHRoZSBjaG9pY2UgaGVscAorICAgICAgICBpZiAnaGVscCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgaGVscCA9IGt3YXJncy5wb3AoJ2hlbHAnKQorICAgICAgICAgICAgY2hvaWNlX2FjdGlvbiA9IHNlbGYuX0Nob2ljZXNQc2V1ZG9BY3Rpb24obmFtZSwgYWxpYXNlcywgaGVscCkKKyAgICAgICAgICAgIHNlbGYuX2Nob2ljZXNfYWN0aW9ucy5hcHBlbmQoY2hvaWNlX2FjdGlvbikKKworICAgICAgICAjIGNyZWF0ZSB0aGUgcGFyc2VyIGFuZCBhZGQgaXQgdG8gdGhlIG1hcAorICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXJfY2xhc3MoKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX25hbWVfcGFyc2VyX21hcFtuYW1lXSA9IHBhcnNlcgorCisgICAgICAgICMgbWFrZSBwYXJzZXIgYXZhaWxhYmxlIHVuZGVyIGFsaWFzZXMgYWxzbworICAgICAgICBmb3IgYWxpYXMgaW4gYWxpYXNlczoKKyAgICAgICAgICAgIHNlbGYuX25hbWVfcGFyc2VyX21hcFthbGlhc10gPSBwYXJzZXIKKworICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBkZWYgX2dldF9zdWJhY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2hvaWNlc19hY3Rpb25zCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlcywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgcGFyc2VyX25hbWUgPSB2YWx1ZXNbMF0KKyAgICAgICAgYXJnX3N0cmluZ3MgPSB2YWx1ZXNbMTpdCisKKyAgICAgICAgIyBzZXQgdGhlIHBhcnNlciBuYW1lIGlmIHJlcXVlc3RlZAorICAgICAgICBpZiBzZWxmLmRlc3QgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsIHNlbGYuZGVzdCwgcGFyc2VyX25hbWUpCisKKyAgICAgICAgIyBzZWxlY3QgdGhlIHBhcnNlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9uYW1lX3BhcnNlcl9tYXBbcGFyc2VyX25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGFyZ3MgPSB7J3BhcnNlcl9uYW1lJzogcGFyc2VyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdjaG9pY2VzJzogJywgJy5qb2luKHNlbGYuX25hbWVfcGFyc2VyX21hcCl9CisgICAgICAgICAgICBtc2cgPSBfKCd1bmtub3duIHBhcnNlciAlKHBhcnNlcl9uYW1lKXIgKGNob2ljZXM6ICUoY2hvaWNlcylzKScpICUgYXJncworICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihzZWxmLCBtc2cpCisKKyAgICAgICAgIyBwYXJzZSBhbGwgdGhlIHJlbWFpbmluZyBvcHRpb25zIGludG8gdGhlIG5hbWVzcGFjZQorICAgICAgICAjIHN0b3JlIGFueSB1bnJlY29nbml6ZWQgb3B0aW9ucyBvbiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSB0b3AKKyAgICAgICAgIyBsZXZlbCBwYXJzZXIgY2FuIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlbQorICAgICAgICBuYW1lc3BhY2UsIGFyZ19zdHJpbmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSkKKyAgICAgICAgaWYgYXJnX3N0cmluZ3M6CisgICAgICAgICAgICB2YXJzKG5hbWVzcGFjZSkuc2V0ZGVmYXVsdChfVU5SRUNPR05JWkVEX0FSR1NfQVRUUiwgW10pCisgICAgICAgICAgICBnZXRhdHRyKG5hbWVzcGFjZSwgX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIpLmV4dGVuZChhcmdfc3RyaW5ncykKKworCisjID09PT09PT09PT09PT09CisjIFR5cGUgY2xhc3NlcworIyA9PT09PT09PT09PT09PQorCitjbGFzcyBGaWxlVHlwZShvYmplY3QpOgorICAgICIiIkZhY3RvcnkgZm9yIGNyZWF0aW5nIGZpbGUgb2JqZWN0IHR5cGVzCisKKyAgICBJbnN0YW5jZXMgb2YgRmlsZVR5cGUgYXJlIHR5cGljYWxseSBwYXNzZWQgYXMgdHlwZT0gYXJndW1lbnRzIHRvIHRoZQorICAgIEFyZ3VtZW50UGFyc2VyIGFkZF9hcmd1bWVudCgpIG1ldGhvZC4KKworICAgIEtleXdvcmQgQXJndW1lbnRzOgorICAgICAgICAtIG1vZGUgLS0gQSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIGZpbGUgaXMgdG8gYmUgb3BlbmVkLiBBY2NlcHRzIHRoZQorICAgICAgICAgICAgc2FtZSB2YWx1ZXMgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICAgICAtIGJ1ZnNpemUgLS0gVGhlIGZpbGUncyBkZXNpcmVkIGJ1ZmZlciBzaXplLiBBY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhcworICAgICAgICAgICAgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xKToKKyAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKKyAgICAgICAgc2VsZi5fYnVmc2l6ZSA9IGJ1ZnNpemUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdHJpbmcpOgorICAgICAgICAjIHRoZSBzcGVjaWFsIGFyZ3VtZW50ICItIiBtZWFucyBzeXMuc3Rke2luLG91dH0KKyAgICAgICAgaWYgc3RyaW5nID09ICctJzoKKyAgICAgICAgICAgIGlmICdyJyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfc3lzLnN0ZGluCisgICAgICAgICAgICBlbGlmICd3JyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgIHJldHVybiBfc3lzLnN0ZG91dAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgPSBfKCdhcmd1bWVudCAiLSIgd2l0aCBtb2RlICVyJykgJSBzZWxmLl9tb2RlCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisKKyAgICAgICAgIyBhbGwgb3RoZXIgYXJndW1lbnRzIGFyZSB1c2VkIGFzIGZpbGUgbmFtZXMKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIG9wZW4oc3RyaW5nLCBzZWxmLl9tb2RlLCBzZWxmLl9idWZzaXplKQorICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgbWVzc2FnZSA9IF8oImNhbid0IG9wZW4gJyVzJzogJXMiKQorICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IobWVzc2FnZSAlIChzdHJpbmcsIGUpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZQorICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGFyZ3Nfc3RyKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBPcHRpb25hbCBhbmQgUG9zaXRpb25hbCBQYXJzaW5nCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBOYW1lc3BhY2UoX0F0dHJpYnV0ZUhvbGRlcik6CisgICAgIiIiU2ltcGxlIG9iamVjdCBmb3Igc3RvcmluZyBhdHRyaWJ1dGVzLgorCisgICAgSW1wbGVtZW50cyBlcXVhbGl0eSBieSBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcywgYW5kIHByb3ZpZGVzIGEgc2ltcGxlCisgICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgZm9yIG5hbWUgaW4ga3dhcmdzOgorICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBrd2FyZ3NbbmFtZV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHZhcnMoc2VsZikgPT0gdmFycyhvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IChzZWxmID09IG90aGVyKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX19kaWN0X18KKworCitjbGFzcyBfQWN0aW9uc0NvbnRhaW5lcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICBwcmVmaXhfY2hhcnMsCisgICAgICAgICAgICAgICAgIGFyZ3VtZW50X2RlZmF1bHQsCisgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXIpOgorICAgICAgICBzdXBlcihfQWN0aW9uc0NvbnRhaW5lciwgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmFyZ3VtZW50X2RlZmF1bHQgPSBhcmd1bWVudF9kZWZhdWx0CisgICAgICAgIHNlbGYucHJlZml4X2NoYXJzID0gcHJlZml4X2NoYXJzCisgICAgICAgIHNlbGYuY29uZmxpY3RfaGFuZGxlciA9IGNvbmZsaWN0X2hhbmRsZXIKKworICAgICAgICAjIHNldCB1cCByZWdpc3RyaWVzCisgICAgICAgIHNlbGYuX3JlZ2lzdHJpZXMgPSB7fQorCisgICAgICAgICMgcmVnaXN0ZXIgYWN0aW9ucworICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCBOb25lLCBfU3RvcmVBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdzdG9yZScsIF9TdG9yZUFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3N0b3JlX2NvbnN0JywgX1N0b3JlQ29uc3RBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdzdG9yZV90cnVlJywgX1N0b3JlVHJ1ZUFjdGlvbikKKyAgICAgICAgc2VsZi5yZWdpc3RlcignYWN0aW9uJywgJ3N0b3JlX2ZhbHNlJywgX1N0b3JlRmFsc2VBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdhcHBlbmQnLCBfQXBwZW5kQWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnYXBwZW5kX2NvbnN0JywgX0FwcGVuZENvbnN0QWN0aW9uKQorICAgICAgICBzZWxmLnJlZ2lzdGVyKCdhY3Rpb24nLCAnY291bnQnLCBfQ291bnRBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdoZWxwJywgX0hlbHBBY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICd2ZXJzaW9uJywgX1ZlcnNpb25BY3Rpb24pCisgICAgICAgIHNlbGYucmVnaXN0ZXIoJ2FjdGlvbicsICdwYXJzZXJzJywgX1N1YlBhcnNlcnNBY3Rpb24pCisKKyAgICAgICAgIyByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGNvbmZsaWN0IGhhbmRsZXIgaXMgaW52YWxpZAorICAgICAgICBzZWxmLl9nZXRfaGFuZGxlcigpCisKKyAgICAgICAgIyBhY3Rpb24gc3RvcmFnZQorICAgICAgICBzZWxmLl9hY3Rpb25zID0gW10KKyAgICAgICAgc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zID0ge30KKworICAgICAgICAjIGdyb3VwcworICAgICAgICBzZWxmLl9hY3Rpb25fZ3JvdXBzID0gW10KKyAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcyA9IFtdCisKKyAgICAgICAgIyBkZWZhdWx0cyBzdG9yYWdlCisgICAgICAgIHNlbGYuX2RlZmF1bHRzID0ge30KKworICAgICAgICAjIGRldGVybWluZXMgd2hldGhlciBhbiAib3B0aW9uIiBsb29rcyBsaWtlIGEgbmVnYXRpdmUgbnVtYmVyCisgICAgICAgIHNlbGYuX25lZ2F0aXZlX251bWJlcl9tYXRjaGVyID0gX3JlLmNvbXBpbGUocideLVxkKyR8Xi1cZCpcLlxkKyQnKQorCisgICAgICAgICMgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueSBvcHRpb25hbHMgdGhhdCBsb29rIGxpa2UgbmVnYXRpdmUKKyAgICAgICAgIyBudW1iZXJzIC0tIHVzZXMgYSBsaXN0IHNvIGl0IGNhbiBiZSBzaGFyZWQgYW5kIGVkaXRlZAorICAgICAgICBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFscyA9IFtdCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09CisgICAgIyBSZWdpc3RyYXRpb24gbWV0aG9kcworICAgICMgPT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgcmVnaXN0cnlfbmFtZSwgdmFsdWUsIG9iamVjdCk6CisgICAgICAgIHJlZ2lzdHJ5ID0gc2VsZi5fcmVnaXN0cmllcy5zZXRkZWZhdWx0KHJlZ2lzdHJ5X25hbWUsIHt9KQorICAgICAgICByZWdpc3RyeVt2YWx1ZV0gPSBvYmplY3QKKworICAgIGRlZiBfcmVnaXN0cnlfZ2V0KHNlbGYsIHJlZ2lzdHJ5X25hbWUsIHZhbHVlLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0cmllc1tyZWdpc3RyeV9uYW1lXS5nZXQodmFsdWUsIGRlZmF1bHQpCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAjIE5hbWVzcGFjZSBkZWZhdWx0IGFjY2Vzc29yIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgc2V0X2RlZmF1bHRzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fZGVmYXVsdHMudXBkYXRlKGt3YXJncykKKworICAgICAgICAjIGlmIHRoZXNlIGRlZmF1bHRzIG1hdGNoIGFueSBleGlzdGluZyBhcmd1bWVudHMsIHJlcGxhY2UKKyAgICAgICAgIyB0aGUgcHJldmlvdXMgZGVmYXVsdCBvbiB0aGUgb2JqZWN0IHdpdGggdGhlIG5ldyBvbmUKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlc3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgIGFjdGlvbi5kZWZhdWx0ID0ga3dhcmdzW2FjdGlvbi5kZXN0XQorCisgICAgZGVmIGdldF9kZWZhdWx0KHNlbGYsIGRlc3QpOgorICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnM6CisgICAgICAgICAgICBpZiBhY3Rpb24uZGVzdCA9PSBkZXN0IGFuZCBhY3Rpb24uZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRzLmdldChkZXN0LCBOb25lKQorCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBBZGRpbmcgYXJndW1lbnQgYWN0aW9ucworICAgICMgPT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgYWRkX2FyZ3VtZW50KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBhZGRfYXJndW1lbnQoZGVzdCwgLi4uLCBuYW1lPXZhbHVlLCAuLi4pCisgICAgICAgIGFkZF9hcmd1bWVudChvcHRpb25fc3RyaW5nLCBvcHRpb25fc3RyaW5nLCAuLi4sIG5hbWU9dmFsdWUsIC4uLikKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBpZiBubyBwb3NpdGlvbmFsIGFyZ3MgYXJlIHN1cHBsaWVkIG9yIG9ubHkgb25lIGlzIHN1cHBsaWVkIGFuZAorICAgICAgICAjIGl0IGRvZXNuJ3QgbG9vayBsaWtlIGFuIG9wdGlvbiBzdHJpbmcsIHBhcnNlIGEgcG9zaXRpb25hbAorICAgICAgICAjIGFyZ3VtZW50CisgICAgICAgIGNoYXJzID0gc2VsZi5wcmVmaXhfY2hhcnMKKyAgICAgICAgaWYgbm90IGFyZ3Mgb3IgbGVuKGFyZ3MpID09IDEgYW5kIGFyZ3NbMF1bMF0gbm90IGluIGNoYXJzOgorICAgICAgICAgICAgaWYgYXJncyBhbmQgJ2Rlc3QnIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkZXN0IHN1cHBsaWVkIHR3aWNlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50JykKKyAgICAgICAgICAgIGt3YXJncyA9IHNlbGYuX2dldF9wb3NpdGlvbmFsX2t3YXJncygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgIyBvdGhlcndpc2UsIHdlJ3JlIGFkZGluZyBhbiBvcHRpb25hbCBhcmd1bWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAga3dhcmdzID0gc2VsZi5fZ2V0X29wdGlvbmFsX2t3YXJncygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgIyBpZiBubyBkZWZhdWx0IHdhcyBzdXBwbGllZCwgdXNlIHRoZSBwYXJzZXItbGV2ZWwgZGVmYXVsdAorICAgICAgICBpZiAnZGVmYXVsdCcgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGRlc3QgPSBrd2FyZ3NbJ2Rlc3QnXQorICAgICAgICAgICAgaWYgZGVzdCBpbiBzZWxmLl9kZWZhdWx0czoKKyAgICAgICAgICAgICAgICBrd2FyZ3NbJ2RlZmF1bHQnXSA9IHNlbGYuX2RlZmF1bHRzW2Rlc3RdCisgICAgICAgICAgICBlbGlmIHNlbGYuYXJndW1lbnRfZGVmYXVsdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBrd2FyZ3NbJ2RlZmF1bHQnXSA9IHNlbGYuYXJndW1lbnRfZGVmYXVsdAorCisgICAgICAgICMgY3JlYXRlIHRoZSBhY3Rpb24gb2JqZWN0LCBhbmQgYWRkIGl0IHRvIHRoZSBwYXJzZXIKKyAgICAgICAgYWN0aW9uX2NsYXNzID0gc2VsZi5fcG9wX2FjdGlvbl9jbGFzcyhrd2FyZ3MpCisgICAgICAgIGlmIG5vdCBfY2FsbGFibGUoYWN0aW9uX2NsYXNzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vua25vd24gYWN0aW9uICIlcyInICUgKGFjdGlvbl9jbGFzcywpKQorICAgICAgICBhY3Rpb24gPSBhY3Rpb25fY2xhc3MoKiprd2FyZ3MpCisKKyAgICAgICAgIyByYWlzZSBhbiBlcnJvciBpZiB0aGUgYWN0aW9uIHR5cGUgaXMgbm90IGNhbGxhYmxlCisgICAgICAgIHR5cGVfZnVuYyA9IHNlbGYuX3JlZ2lzdHJ5X2dldCgndHlwZScsIGFjdGlvbi50eXBlLCBhY3Rpb24udHlwZSkKKyAgICAgICAgaWYgbm90IF9jYWxsYWJsZSh0eXBlX2Z1bmMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXIgaXMgbm90IGNhbGxhYmxlJyAlICh0eXBlX2Z1bmMsKSkKKworICAgICAgICAjIHJhaXNlIGFuIGVycm9yIGlmIHRoZSBtZXRhdmFyIGRvZXMgbm90IG1hdGNoIHRoZSB0eXBlCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgIl9nZXRfZm9ybWF0dGVyIik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2Zvcm1hdHRlcigpLl9mb3JtYXRfYXJncyhhY3Rpb24sIE5vbmUpCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxlbmd0aCBvZiBtZXRhdmFyIHR1cGxlIGRvZXMgbm90IG1hdGNoIG5hcmdzIikKKworICAgICAgICByZXR1cm4gc2VsZi5fYWRkX2FjdGlvbihhY3Rpb24pCisKKyAgICBkZWYgYWRkX2FyZ3VtZW50X2dyb3VwKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGdyb3VwID0gX0FyZ3VtZW50R3JvdXAoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLl9hY3Rpb25fZ3JvdXBzLmFwcGVuZChncm91cCkKKyAgICAgICAgcmV0dXJuIGdyb3VwCisKKyAgICBkZWYgYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGdyb3VwID0gX011dHVhbGx5RXhjbHVzaXZlR3JvdXAoc2VsZiwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMuYXBwZW5kKGdyb3VwKQorICAgICAgICByZXR1cm4gZ3JvdXAKKworICAgIGRlZiBfYWRkX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cworICAgICAgICBzZWxmLl9jaGVja19jb25mbGljdChhY3Rpb24pCisKKyAgICAgICAgIyBhZGQgdG8gYWN0aW9ucyBsaXN0CisgICAgICAgIHNlbGYuX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgYWN0aW9uLmNvbnRhaW5lciA9IHNlbGYKKworICAgICAgICAjIGluZGV4IHRoZSBhY3Rpb24gYnkgYW55IG9wdGlvbiBzdHJpbmdzIGl0IGhhcworICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbb3B0aW9uX3N0cmluZ10gPSBhY3Rpb24KKworICAgICAgICAjIHNldCB0aGUgZmxhZyBpZiBhbnkgb3B0aW9uIHN0cmluZ3MgbG9vayBsaWtlIG5lZ2F0aXZlIG51bWJlcnMKKyAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgaWYgc2VsZi5fbmVnYXRpdmVfbnVtYmVyX21hdGNoZXIubWF0Y2gob3B0aW9uX3N0cmluZyk6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2hhc19uZWdhdGl2ZV9udW1iZXJfb3B0aW9uYWxzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFscy5hcHBlbmQoVHJ1ZSkKKworICAgICAgICAjIHJldHVybiB0aGUgY3JlYXRlZCBhY3Rpb24KKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9yZW1vdmVfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuX2FjdGlvbnMucmVtb3ZlKGFjdGlvbikKKworICAgIGRlZiBfYWRkX2NvbnRhaW5lcl9hY3Rpb25zKHNlbGYsIGNvbnRhaW5lcik6CisgICAgICAgICMgY29sbGVjdCBncm91cHMgYnkgdGl0bGVzCisgICAgICAgIHRpdGxlX2dyb3VwX21hcCA9IHt9CisgICAgICAgIGZvciBncm91cCBpbiBzZWxmLl9hY3Rpb25fZ3JvdXBzOgorICAgICAgICAgICAgaWYgZ3JvdXAudGl0bGUgaW4gdGl0bGVfZ3JvdXBfbWFwOgorICAgICAgICAgICAgICAgIG1zZyA9IF8oJ2Nhbm5vdCBtZXJnZSBhY3Rpb25zIC0gdHdvIGdyb3VwcyBhcmUgbmFtZWQgJXInKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnICUgKGdyb3VwLnRpdGxlKSkKKyAgICAgICAgICAgIHRpdGxlX2dyb3VwX21hcFtncm91cC50aXRsZV0gPSBncm91cAorCisgICAgICAgICMgbWFwIGVhY2ggYWN0aW9uIHRvIGl0cyBncm91cAorICAgICAgICBncm91cF9tYXAgPSB7fQorICAgICAgICBmb3IgZ3JvdXAgaW4gY29udGFpbmVyLl9hY3Rpb25fZ3JvdXBzOgorCisgICAgICAgICAgICAjIGlmIGEgZ3JvdXAgd2l0aCB0aGUgdGl0bGUgZXhpc3RzLCB1c2UgdGhhdCwgb3RoZXJ3aXNlCisgICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyBncm91cCBtYXRjaGluZyB0aGUgY29udGFpbmVyJ3MgZ3JvdXAKKyAgICAgICAgICAgIGlmIGdyb3VwLnRpdGxlIG5vdCBpbiB0aXRsZV9ncm91cF9tYXA6CisgICAgICAgICAgICAgICAgdGl0bGVfZ3JvdXBfbWFwW2dyb3VwLnRpdGxlXSA9IHNlbGYuYWRkX2FyZ3VtZW50X2dyb3VwKAorICAgICAgICAgICAgICAgICAgICB0aXRsZT1ncm91cC50aXRsZSwKKyAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Z3JvdXAuZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9Z3JvdXAuY29uZmxpY3RfaGFuZGxlcikKKworICAgICAgICAgICAgIyBtYXAgdGhlIGFjdGlvbnMgdG8gdGhlaXIgbmV3IGdyb3VwCisgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGdyb3VwLl9ncm91cF9hY3Rpb25zOgorICAgICAgICAgICAgICAgIGdyb3VwX21hcFthY3Rpb25dID0gdGl0bGVfZ3JvdXBfbWFwW2dyb3VwLnRpdGxlXQorCisgICAgICAgICMgYWRkIGNvbnRhaW5lcidzIG11dHVhbGx5IGV4Y2x1c2l2ZSBncm91cHMKKyAgICAgICAgIyBOT1RFOiBpZiBhZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwIGV2ZXIgZ2FpbnMgdGl0bGU9IGFuZAorICAgICAgICAjIGRlc2NyaXB0aW9uPSB0aGVuIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gYmUgZXhwYW5kZWQgYXMgYWJvdmUKKyAgICAgICAgZm9yIGdyb3VwIGluIGNvbnRhaW5lci5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwczoKKyAgICAgICAgICAgIG11dGV4X2dyb3VwID0gc2VsZi5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKAorICAgICAgICAgICAgICAgIHJlcXVpcmVkPWdyb3VwLnJlcXVpcmVkKQorCisgICAgICAgICAgICAjIG1hcCB0aGUgYWN0aW9ucyB0byB0aGVpciBuZXcgbXV0ZXggZ3JvdXAKKyAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gZ3JvdXAuX2dyb3VwX2FjdGlvbnM6CisgICAgICAgICAgICAgICAgZ3JvdXBfbWFwW2FjdGlvbl0gPSBtdXRleF9ncm91cAorCisgICAgICAgICMgYWRkIGFsbCBhY3Rpb25zIHRvIHRoaXMgY29udGFpbmVyIG9yIHRoZWlyIGdyb3VwCisgICAgICAgIGZvciBhY3Rpb24gaW4gY29udGFpbmVyLl9hY3Rpb25zOgorICAgICAgICAgICAgZ3JvdXBfbWFwLmdldChhY3Rpb24sIHNlbGYpLl9hZGRfYWN0aW9uKGFjdGlvbikKKworICAgIGRlZiBfZ2V0X3Bvc2l0aW9uYWxfa3dhcmdzKHNlbGYsIGRlc3QsICoqa3dhcmdzKToKKyAgICAgICAgIyBtYWtlIHN1cmUgcmVxdWlyZWQgaXMgbm90IHNwZWNpZmllZAorICAgICAgICBpZiAncmVxdWlyZWQnIGluIGt3YXJnczoKKyAgICAgICAgICAgIG1zZyA9IF8oIidyZXF1aXJlZCcgaXMgYW4gaW52YWxpZCBhcmd1bWVudCBmb3IgcG9zaXRpb25hbHMiKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKworICAgICAgICAjIG1hcmsgcG9zaXRpb25hbCBhcmd1bWVudHMgYXMgcmVxdWlyZWQgaWYgYXQgbGVhc3Qgb25lIGlzCisgICAgICAgICMgYWx3YXlzIHJlcXVpcmVkCisgICAgICAgIGlmIGt3YXJncy5nZXQoJ25hcmdzJykgbm90IGluIFtPUFRJT05BTCwgWkVST19PUl9NT1JFXToKKyAgICAgICAgICAgIGt3YXJnc1sncmVxdWlyZWQnXSA9IFRydWUKKyAgICAgICAgaWYga3dhcmdzLmdldCgnbmFyZ3MnKSA9PSBaRVJPX09SX01PUkUgYW5kICdkZWZhdWx0JyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAga3dhcmdzWydyZXF1aXJlZCddID0gVHJ1ZQorCisgICAgICAgICMgcmV0dXJuIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyB3aXRoIG5vIG9wdGlvbiBzdHJpbmdzCisgICAgICAgIHJldHVybiBkaWN0KGt3YXJncywgZGVzdD1kZXN0LCBvcHRpb25fc3RyaW5ncz1bXSkKKworICAgIGRlZiBfZ2V0X29wdGlvbmFsX2t3YXJncyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIGRldGVybWluZSBzaG9ydCBhbmQgbG9uZyBvcHRpb24gc3RyaW5ncworICAgICAgICBvcHRpb25fc3RyaW5ncyA9IFtdCisgICAgICAgIGxvbmdfb3B0aW9uX3N0cmluZ3MgPSBbXQorICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBhcmdzOgorICAgICAgICAgICAgIyBlcnJvciBvbiBzdHJpbmdzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCBhbiBhcHByb3ByaWF0ZSBwcmVmaXgKKyAgICAgICAgICAgIGlmIG5vdCBvcHRpb25fc3RyaW5nWzBdIGluIHNlbGYucHJlZml4X2NoYXJzOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB7J29wdGlvbic6IG9wdGlvbl9zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAncHJlZml4X2NoYXJzJzogc2VsZi5wcmVmaXhfY2hhcnN9CisgICAgICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCBvcHRpb24gc3RyaW5nICUob3B0aW9uKXI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IHN0YXJ0IHdpdGggYSBjaGFyYWN0ZXIgJShwcmVmaXhfY2hhcnMpcicpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBhcmdzKQorCisgICAgICAgICAgICAjIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCB0d28gcHJlZml4IGNoYXJhY3RlcnMgYXJlIGxvbmcgb3B0aW9ucworICAgICAgICAgICAgb3B0aW9uX3N0cmluZ3MuYXBwZW5kKG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nWzBdIGluIHNlbGYucHJlZml4X2NoYXJzOgorICAgICAgICAgICAgICAgIGlmIGxlbihvcHRpb25fc3RyaW5nKSA+IDE6CisgICAgICAgICAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmdbMV0gaW4gc2VsZi5wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBsb25nX29wdGlvbl9zdHJpbmdzLmFwcGVuZChvcHRpb25fc3RyaW5nKQorCisgICAgICAgICMgaW5mZXIgZGVzdGluYXRpb24sICctLWZvby1iYXInIC0+ICdmb29fYmFyJyBhbmQgJy14JyAtPiAneCcKKyAgICAgICAgZGVzdCA9IGt3YXJncy5wb3AoJ2Rlc3QnLCBOb25lKQorICAgICAgICBpZiBkZXN0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBsb25nX29wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIGRlc3Rfb3B0aW9uX3N0cmluZyA9IGxvbmdfb3B0aW9uX3N0cmluZ3NbMF0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGVzdF9vcHRpb25fc3RyaW5nID0gb3B0aW9uX3N0cmluZ3NbMF0KKyAgICAgICAgICAgIGRlc3QgPSBkZXN0X29wdGlvbl9zdHJpbmcubHN0cmlwKHNlbGYucHJlZml4X2NoYXJzKQorICAgICAgICAgICAgaWYgbm90IGRlc3Q6CisgICAgICAgICAgICAgICAgbXNnID0gXygnZGVzdD0gaXMgcmVxdWlyZWQgZm9yIG9wdGlvbnMgbGlrZSAlcicpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBvcHRpb25fc3RyaW5nKQorICAgICAgICAgICAgZGVzdCA9IGRlc3QucmVwbGFjZSgnLScsICdfJykKKworICAgICAgICAjIHJldHVybiB0aGUgdXBkYXRlZCBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICByZXR1cm4gZGljdChrd2FyZ3MsIGRlc3Q9ZGVzdCwgb3B0aW9uX3N0cmluZ3M9b3B0aW9uX3N0cmluZ3MpCisKKyAgICBkZWYgX3BvcF9hY3Rpb25fY2xhc3Moc2VsZiwga3dhcmdzLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBhY3Rpb24gPSBrd2FyZ3MucG9wKCdhY3Rpb24nLCBkZWZhdWx0KQorICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0cnlfZ2V0KCdhY3Rpb24nLCBhY3Rpb24sIGFjdGlvbikKKworICAgIGRlZiBfZ2V0X2hhbmRsZXIoc2VsZik6CisgICAgICAgICMgZGV0ZXJtaW5lIGZ1bmN0aW9uIGZyb20gY29uZmxpY3QgaGFuZGxlciBzdHJpbmcKKyAgICAgICAgaGFuZGxlcl9mdW5jX25hbWUgPSAnX2hhbmRsZV9jb25mbGljdF8lcycgJSBzZWxmLmNvbmZsaWN0X2hhbmRsZXIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgaGFuZGxlcl9mdW5jX25hbWUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIG1zZyA9IF8oJ2ludmFsaWQgY29uZmxpY3RfcmVzb2x1dGlvbiB2YWx1ZTogJXInKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cgJSBzZWxmLmNvbmZsaWN0X2hhbmRsZXIpCisKKyAgICBkZWYgX2NoZWNrX2NvbmZsaWN0KHNlbGYsIGFjdGlvbik6CisKKyAgICAgICAgIyBmaW5kIGFsbCBvcHRpb25zIHRoYXQgY29uZmxpY3Qgd2l0aCB0aGlzIG9wdGlvbgorICAgICAgICBjb25mbF9vcHRpb25hbHMgPSBbXQorICAgICAgICBmb3Igb3B0aW9uX3N0cmluZyBpbiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBjb25mbF9vcHRpb25hbCA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgIGNvbmZsX29wdGlvbmFscy5hcHBlbmQoKG9wdGlvbl9zdHJpbmcsIGNvbmZsX29wdGlvbmFsKSkKKworICAgICAgICAjIHJlc29sdmUgYW55IGNvbmZsaWN0cworICAgICAgICBpZiBjb25mbF9vcHRpb25hbHM6CisgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyID0gc2VsZi5fZ2V0X2hhbmRsZXIoKQorICAgICAgICAgICAgY29uZmxpY3RfaGFuZGxlcihhY3Rpb24sIGNvbmZsX29wdGlvbmFscykKKworICAgIGRlZiBfaGFuZGxlX2NvbmZsaWN0X2Vycm9yKHNlbGYsIGFjdGlvbiwgY29uZmxpY3RpbmdfYWN0aW9ucyk6CisgICAgICAgIG1lc3NhZ2UgPSBuZ2V0dGV4dCgnY29uZmxpY3Rpbmcgb3B0aW9uIHN0cmluZzogJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZsaWN0aW5nIG9wdGlvbiBzdHJpbmdzOiAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oY29uZmxpY3RpbmdfYWN0aW9ucykpCisgICAgICAgIGNvbmZsaWN0X3N0cmluZyA9ICcsICcuam9pbihbb3B0aW9uX3N0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb25fc3RyaW5nLCBhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBjb25mbGljdGluZ19hY3Rpb25zXSkKKyAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1lc3NhZ2UgJSBjb25mbGljdF9zdHJpbmcpCisKKyAgICBkZWYgX2hhbmRsZV9jb25mbGljdF9yZXNvbHZlKHNlbGYsIGFjdGlvbiwgY29uZmxpY3RpbmdfYWN0aW9ucyk6CisKKyAgICAgICAgIyByZW1vdmUgYWxsIGNvbmZsaWN0aW5nIG9wdGlvbnMKKyAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcsIGFjdGlvbiBpbiBjb25mbGljdGluZ19hY3Rpb25zOgorCisgICAgICAgICAgICAjIHJlbW92ZSB0aGUgY29uZmxpY3Rpbmcgb3B0aW9uCisgICAgICAgICAgICBhY3Rpb24ub3B0aW9uX3N0cmluZ3MucmVtb3ZlKG9wdGlvbl9zdHJpbmcpCisgICAgICAgICAgICBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnMucG9wKG9wdGlvbl9zdHJpbmcsIE5vbmUpCisKKyAgICAgICAgICAgICMgaWYgdGhlIG9wdGlvbiBub3cgaGFzIG5vIG9wdGlvbiBzdHJpbmcsIHJlbW92ZSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgIyBjb250YWluZXIgaG9sZGluZyBpdAorICAgICAgICAgICAgaWYgbm90IGFjdGlvbi5vcHRpb25fc3RyaW5nczoKKyAgICAgICAgICAgICAgICBhY3Rpb24uY29udGFpbmVyLl9yZW1vdmVfYWN0aW9uKGFjdGlvbikKKworCitjbGFzcyBfQXJndW1lbnRHcm91cChfQWN0aW9uc0NvbnRhaW5lcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyLCB0aXRsZT1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgICMgYWRkIGFueSBtaXNzaW5nIGtleXdvcmQgYXJndW1lbnRzIGJ5IGNoZWNraW5nIHRoZSBjb250YWluZXIKKyAgICAgICAgdXBkYXRlID0ga3dhcmdzLnNldGRlZmF1bHQKKyAgICAgICAgdXBkYXRlKCdjb25mbGljdF9oYW5kbGVyJywgY29udGFpbmVyLmNvbmZsaWN0X2hhbmRsZXIpCisgICAgICAgIHVwZGF0ZSgncHJlZml4X2NoYXJzJywgY29udGFpbmVyLnByZWZpeF9jaGFycykKKyAgICAgICAgdXBkYXRlKCdhcmd1bWVudF9kZWZhdWx0JywgY29udGFpbmVyLmFyZ3VtZW50X2RlZmF1bHQpCisgICAgICAgIHN1cGVyX2luaXQgPSBzdXBlcihfQXJndW1lbnRHcm91cCwgc2VsZikuX19pbml0X18KKyAgICAgICAgc3VwZXJfaW5pdChkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwgKiprd2FyZ3MpCisKKyAgICAgICAgIyBncm91cCBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQorICAgICAgICBzZWxmLl9ncm91cF9hY3Rpb25zID0gW10KKworICAgICAgICAjIHNoYXJlIG1vc3QgYXR0cmlidXRlcyB3aXRoIHRoZSBjb250YWluZXIKKyAgICAgICAgc2VsZi5fcmVnaXN0cmllcyA9IGNvbnRhaW5lci5fcmVnaXN0cmllcworICAgICAgICBzZWxmLl9hY3Rpb25zID0gY29udGFpbmVyLl9hY3Rpb25zCisgICAgICAgIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9ucyA9IGNvbnRhaW5lci5fb3B0aW9uX3N0cmluZ19hY3Rpb25zCisgICAgICAgIHNlbGYuX2RlZmF1bHRzID0gY29udGFpbmVyLl9kZWZhdWx0cworICAgICAgICBzZWxmLl9oYXNfbmVnYXRpdmVfbnVtYmVyX29wdGlvbmFscyA9IFwKKyAgICAgICAgICAgIGNvbnRhaW5lci5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHMKKyAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcyA9IGNvbnRhaW5lci5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcworCisgICAgZGVmIF9hZGRfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIGFjdGlvbiA9IHN1cGVyKF9Bcmd1bWVudEdyb3VwLCBzZWxmKS5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9yZW1vdmVfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHN1cGVyKF9Bcmd1bWVudEdyb3VwLCBzZWxmKS5fcmVtb3ZlX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMucmVtb3ZlKGFjdGlvbikKKworCitjbGFzcyBfTXV0dWFsbHlFeGNsdXNpdmVHcm91cChfQXJndW1lbnRHcm91cCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmVyLCByZXF1aXJlZD1GYWxzZSk6CisgICAgICAgIHN1cGVyKF9NdXR1YWxseUV4Y2x1c2l2ZUdyb3VwLCBzZWxmKS5fX2luaXRfXyhjb250YWluZXIpCisgICAgICAgIHNlbGYucmVxdWlyZWQgPSByZXF1aXJlZAorICAgICAgICBzZWxmLl9jb250YWluZXIgPSBjb250YWluZXIKKworICAgIGRlZiBfYWRkX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24ucmVxdWlyZWQ6CisgICAgICAgICAgICBtc2cgPSBfKCdtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIG11c3QgYmUgb3B0aW9uYWwnKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgICAgIGFjdGlvbiA9IHNlbGYuX2NvbnRhaW5lci5fYWRkX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMuYXBwZW5kKGFjdGlvbikKKyAgICAgICAgcmV0dXJuIGFjdGlvbgorCisgICAgZGVmIF9yZW1vdmVfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgICAgIHNlbGYuX2NvbnRhaW5lci5fcmVtb3ZlX2FjdGlvbihhY3Rpb24pCisgICAgICAgIHNlbGYuX2dyb3VwX2FjdGlvbnMucmVtb3ZlKGFjdGlvbikKKworCitjbGFzcyBBcmd1bWVudFBhcnNlcihfQXR0cmlidXRlSG9sZGVyLCBfQWN0aW9uc0NvbnRhaW5lcik6CisgICAgIiIiT2JqZWN0IGZvciBwYXJzaW5nIGNvbW1hbmQgbGluZSBzdHJpbmdzIGludG8gUHl0aG9uIG9iamVjdHMuCisKKyAgICBLZXl3b3JkIEFyZ3VtZW50czoKKyAgICAgICAgLSBwcm9nIC0tIFRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIChkZWZhdWx0OiBzeXMuYXJndlswXSkKKyAgICAgICAgLSB1c2FnZSAtLSBBIHVzYWdlIG1lc3NhZ2UgKGRlZmF1bHQ6IGF1dG8tZ2VuZXJhdGVkIGZyb20gYXJndW1lbnRzKQorICAgICAgICAtIGRlc2NyaXB0aW9uIC0tIEEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgcHJvZ3JhbSBkb2VzCisgICAgICAgIC0gZXBpbG9nIC0tIFRleHQgZm9sbG93aW5nIHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbnMKKyAgICAgICAgLSBwYXJlbnRzIC0tIFBhcnNlcnMgd2hvc2UgYXJndW1lbnRzIHNob3VsZCBiZSBjb3BpZWQgaW50byB0aGlzIG9uZQorICAgICAgICAtIGZvcm1hdHRlcl9jbGFzcyAtLSBIZWxwRm9ybWF0dGVyIGNsYXNzIGZvciBwcmludGluZyBoZWxwIG1lc3NhZ2VzCisgICAgICAgIC0gcHJlZml4X2NoYXJzIC0tIENoYXJhY3RlcnMgdGhhdCBwcmVmaXggb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgIC0gZnJvbWZpbGVfcHJlZml4X2NoYXJzIC0tIENoYXJhY3RlcnMgdGhhdCBwcmVmaXggZmlsZXMgY29udGFpbmluZworICAgICAgICAgICAgYWRkaXRpb25hbCBhcmd1bWVudHMKKyAgICAgICAgLSBhcmd1bWVudF9kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBhbGwgYXJndW1lbnRzCisgICAgICAgIC0gY29uZmxpY3RfaGFuZGxlciAtLSBTdHJpbmcgaW5kaWNhdGluZyBob3cgdG8gaGFuZGxlIGNvbmZsaWN0cworICAgICAgICAtIGFkZF9oZWxwIC0tIEFkZCBhIC1oLy1oZWxwIG9wdGlvbgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsCisgICAgICAgICAgICAgICAgIHByb2c9Tm9uZSwKKyAgICAgICAgICAgICAgICAgdXNhZ2U9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgZXBpbG9nPU5vbmUsCisgICAgICAgICAgICAgICAgIHZlcnNpb249Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGFyZW50cz1bXSwKKyAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPUhlbHBGb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgIHByZWZpeF9jaGFycz0nLScsCisgICAgICAgICAgICAgICAgIGZyb21maWxlX3ByZWZpeF9jaGFycz1Ob25lLAorICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9J2Vycm9yJywKKyAgICAgICAgICAgICAgICAgYWRkX2hlbHA9VHJ1ZSk6CisKKyAgICAgICAgaWYgdmVyc2lvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiIiJUaGUgInZlcnNpb24iIGFyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIGRlcHJlY2F0ZWQuICIiIgorICAgICAgICAgICAgICAgICIiIlBsZWFzZSB1c2UgIiIiCisgICAgICAgICAgICAgICAgIiIiImFkZF9hcmd1bWVudCguLi4sIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249Ik4iLCAuLi4pIiAiIiIKKyAgICAgICAgICAgICAgICAiIiJpbnN0ZWFkIiIiLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgc3VwZXJpbml0ID0gc3VwZXIoQXJndW1lbnRQYXJzZXIsIHNlbGYpLl9faW5pdF9fCisgICAgICAgIHN1cGVyaW5pdChkZXNjcmlwdGlvbj1kZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgIHByZWZpeF9jaGFycz1wcmVmaXhfY2hhcnMsCisgICAgICAgICAgICAgICAgICBhcmd1bWVudF9kZWZhdWx0PWFyZ3VtZW50X2RlZmF1bHQsCisgICAgICAgICAgICAgICAgICBjb25mbGljdF9oYW5kbGVyPWNvbmZsaWN0X2hhbmRsZXIpCisKKyAgICAgICAgIyBkZWZhdWx0IHNldHRpbmcgZm9yIHByb2cKKyAgICAgICAgaWYgcHJvZyBpcyBOb25lOgorICAgICAgICAgICAgcHJvZyA9IF9vcy5wYXRoLmJhc2VuYW1lKF9zeXMuYXJndlswXSkKKworICAgICAgICBzZWxmLnByb2cgPSBwcm9nCisgICAgICAgIHNlbGYudXNhZ2UgPSB1c2FnZQorICAgICAgICBzZWxmLmVwaWxvZyA9IGVwaWxvZworICAgICAgICBzZWxmLnZlcnNpb24gPSB2ZXJzaW9uCisgICAgICAgIHNlbGYuZm9ybWF0dGVyX2NsYXNzID0gZm9ybWF0dGVyX2NsYXNzCisgICAgICAgIHNlbGYuZnJvbWZpbGVfcHJlZml4X2NoYXJzID0gZnJvbWZpbGVfcHJlZml4X2NoYXJzCisgICAgICAgIHNlbGYuYWRkX2hlbHAgPSBhZGRfaGVscAorCisgICAgICAgIGFkZF9ncm91cCA9IHNlbGYuYWRkX2FyZ3VtZW50X2dyb3VwCisgICAgICAgIHNlbGYuX3Bvc2l0aW9uYWxzID0gYWRkX2dyb3VwKF8oJ3Bvc2l0aW9uYWwgYXJndW1lbnRzJykpCisgICAgICAgIHNlbGYuX29wdGlvbmFscyA9IGFkZF9ncm91cChfKCdvcHRpb25hbCBhcmd1bWVudHMnKSkKKyAgICAgICAgc2VsZi5fc3VicGFyc2VycyA9IE5vbmUKKworICAgICAgICAjIHJlZ2lzdGVyIHR5cGVzCisgICAgICAgIGRlZiBpZGVudGl0eShzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuIHN0cmluZworICAgICAgICBzZWxmLnJlZ2lzdGVyKCd0eXBlJywgTm9uZSwgaWRlbnRpdHkpCisKKyAgICAgICAgIyBhZGQgaGVscCBhbmQgdmVyc2lvbiBhcmd1bWVudHMgaWYgbmVjZXNzYXJ5CisgICAgICAgICMgKHVzaW5nIGV4cGxpY2l0IGRlZmF1bHQgdG8gb3ZlcnJpZGUgZ2xvYmFsIGFyZ3VtZW50X2RlZmF1bHQpCisgICAgICAgIGRlZmF1bHRfcHJlZml4ID0gJy0nIGlmICctJyBpbiBwcmVmaXhfY2hhcnMgZWxzZSBwcmVmaXhfY2hhcnNbMF0KKyAgICAgICAgaWYgc2VsZi5hZGRfaGVscDoKKyAgICAgICAgICAgIHNlbGYuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgIGRlZmF1bHRfcHJlZml4KydoJywgZGVmYXVsdF9wcmVmaXgqMisnaGVscCcsCisgICAgICAgICAgICAgICAgYWN0aW9uPSdoZWxwJywgZGVmYXVsdD1TVVBQUkVTUywKKyAgICAgICAgICAgICAgICBoZWxwPV8oJ3Nob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQnKSkKKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uOgorICAgICAgICAgICAgc2VsZi5hZGRfYXJndW1lbnQoCisgICAgICAgICAgICAgICAgZGVmYXVsdF9wcmVmaXgrJ3YnLCBkZWZhdWx0X3ByZWZpeCoyKyd2ZXJzaW9uJywKKyAgICAgICAgICAgICAgICBhY3Rpb249J3ZlcnNpb24nLCBkZWZhdWx0PVNVUFBSRVNTLAorICAgICAgICAgICAgICAgIHZlcnNpb249c2VsZi52ZXJzaW9uLAorICAgICAgICAgICAgICAgIGhlbHA9Xygic2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQiKSkKKworICAgICAgICAjIGFkZCBwYXJlbnQgYXJndW1lbnRzIGFuZCBkZWZhdWx0cworICAgICAgICBmb3IgcGFyZW50IGluIHBhcmVudHM6CisgICAgICAgICAgICBzZWxmLl9hZGRfY29udGFpbmVyX2FjdGlvbnMocGFyZW50KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlZmF1bHRzID0gcGFyZW50Ll9kZWZhdWx0cworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdHMudXBkYXRlKGRlZmF1bHRzKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgUHJldHR5IF9fcmVwcl9fIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIF9nZXRfa3dhcmdzKHNlbGYpOgorICAgICAgICBuYW1lcyA9IFsKKyAgICAgICAgICAgICdwcm9nJywKKyAgICAgICAgICAgICd1c2FnZScsCisgICAgICAgICAgICAnZGVzY3JpcHRpb24nLAorICAgICAgICAgICAgJ3ZlcnNpb24nLAorICAgICAgICAgICAgJ2Zvcm1hdHRlcl9jbGFzcycsCisgICAgICAgICAgICAnY29uZmxpY3RfaGFuZGxlcicsCisgICAgICAgICAgICAnYWRkX2hlbHAnLAorICAgICAgICBdCisgICAgICAgIHJldHVybiBbKG5hbWUsIGdldGF0dHIoc2VsZiwgbmFtZSkpIGZvciBuYW1lIGluIG5hbWVzXQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBPcHRpb25hbC9Qb3NpdGlvbmFsIGFkZGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIGFkZF9zdWJwYXJzZXJzKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5fc3VicGFyc2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoXygnY2Fubm90IGhhdmUgbXVsdGlwbGUgc3VicGFyc2VyIGFyZ3VtZW50cycpKQorCisgICAgICAgICMgYWRkIHRoZSBwYXJzZXIgY2xhc3MgdG8gdGhlIGFyZ3VtZW50cyBpZiBpdCdzIG5vdCBwcmVzZW50CisgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdwYXJzZXJfY2xhc3MnLCB0eXBlKHNlbGYpKQorCisgICAgICAgIGlmICd0aXRsZScgaW4ga3dhcmdzIG9yICdkZXNjcmlwdGlvbicgaW4ga3dhcmdzOgorICAgICAgICAgICAgdGl0bGUgPSBfKGt3YXJncy5wb3AoJ3RpdGxlJywgJ3N1YmNvbW1hbmRzJykpCisgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IF8oa3dhcmdzLnBvcCgnZGVzY3JpcHRpb24nLCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYuX3N1YnBhcnNlcnMgPSBzZWxmLmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZSwgZGVzY3JpcHRpb24pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zdWJwYXJzZXJzID0gc2VsZi5fcG9zaXRpb25hbHMKKworICAgICAgICAjIHByb2cgZGVmYXVsdHMgdG8gdGhlIHVzYWdlIG1lc3NhZ2Ugb2YgdGhpcyBwYXJzZXIsIHNraXBwaW5nCisgICAgICAgICMgb3B0aW9uYWwgYXJndW1lbnRzIGFuZCB3aXRoIG5vICJ1c2FnZToiIHByZWZpeAorICAgICAgICBpZiBrd2FyZ3MuZ2V0KCdwcm9nJykgaXMgTm9uZToKKyAgICAgICAgICAgIGZvcm1hdHRlciA9IHNlbGYuX2dldF9mb3JtYXR0ZXIoKQorICAgICAgICAgICAgcG9zaXRpb25hbHMgPSBzZWxmLl9nZXRfcG9zaXRpb25hbF9hY3Rpb25zKCkKKyAgICAgICAgICAgIGdyb3VwcyA9IHNlbGYuX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cHMKKyAgICAgICAgICAgIGZvcm1hdHRlci5hZGRfdXNhZ2Uoc2VsZi51c2FnZSwgcG9zaXRpb25hbHMsIGdyb3VwcywgJycpCisgICAgICAgICAgICBrd2FyZ3NbJ3Byb2cnXSA9IGZvcm1hdHRlci5mb3JtYXRfaGVscCgpLnN0cmlwKCkKKworICAgICAgICAjIGNyZWF0ZSB0aGUgcGFyc2VycyBhY3Rpb24gYW5kIGFkZCBpdCB0byB0aGUgcG9zaXRpb25hbHMgbGlzdAorICAgICAgICBwYXJzZXJzX2NsYXNzID0gc2VsZi5fcG9wX2FjdGlvbl9jbGFzcyhrd2FyZ3MsICdwYXJzZXJzJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2Vyc19jbGFzcyhvcHRpb25fc3RyaW5ncz1bXSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuX3N1YnBhcnNlcnMuX2FkZF9hY3Rpb24oYWN0aW9uKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjcmVhdGVkIHBhcnNlcnMgYWN0aW9uCisgICAgICAgIHJldHVybiBhY3Rpb24KKworICAgIGRlZiBfYWRkX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBzZWxmLl9vcHRpb25hbHMuX2FkZF9hY3Rpb24oYWN0aW9uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fcG9zaXRpb25hbHMuX2FkZF9hY3Rpb24oYWN0aW9uKQorICAgICAgICByZXR1cm4gYWN0aW9uCisKKyAgICBkZWYgX2dldF9vcHRpb25hbF9hY3Rpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gW2FjdGlvbgorICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gc2VsZi5fYWN0aW9ucworICAgICAgICAgICAgICAgIGlmIGFjdGlvbi5vcHRpb25fc3RyaW5nc10KKworICAgIGRlZiBfZ2V0X3Bvc2l0aW9uYWxfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgcmV0dXJuIFthY3Rpb24KKyAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIHNlbGYuX2FjdGlvbnMKKyAgICAgICAgICAgICAgICBpZiBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzXQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgIyBDb21tYW5kIGxpbmUgYXJndW1lbnQgcGFyc2luZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJncz1Ob25lLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgIGFyZ3MsIGFyZ3YgPSBzZWxmLnBhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICBpZiBhcmd2OgorICAgICAgICAgICAgbXNnID0gXygndW5yZWNvZ25pemVkIGFyZ3VtZW50czogJXMnKQorICAgICAgICAgICAgc2VsZi5lcnJvcihtc2cgJSAnICcuam9pbihhcmd2KSkKKyAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgIGRlZiBwYXJzZV9rbm93bl9hcmdzKHNlbGYsIGFyZ3M9Tm9uZSwgbmFtZXNwYWNlPU5vbmUpOgorICAgICAgICAjIGFyZ3MgZGVmYXVsdCB0byB0aGUgc3lzdGVtIGFyZ3MKKyAgICAgICAgaWYgYXJncyBpcyBOb25lOgorICAgICAgICAgICAgYXJncyA9IF9zeXMuYXJndlsxOl0KKworICAgICAgICAjIGRlZmF1bHQgTmFtZXNwYWNlIGJ1aWx0IGZyb20gcGFyc2VyIGRlZmF1bHRzCisgICAgICAgIGlmIG5hbWVzcGFjZSBpcyBOb25lOgorICAgICAgICAgICAgbmFtZXNwYWNlID0gTmFtZXNwYWNlKCkKKworICAgICAgICAjIGFkZCBhbnkgYWN0aW9uIGRlZmF1bHRzIHRoYXQgYXJlbid0IHByZXNlbnQKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLmRlc3QgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG5hbWVzcGFjZSwgYWN0aW9uLmRlc3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBhY3Rpb24uZGVmYXVsdCBpcyBub3QgU1VQUFJFU1M6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWN0aW9uLmRlZmF1bHQsIHN0cik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuX2dldF92YWx1ZShhY3Rpb24sIGRlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgYWN0aW9uLmRlc3QsIGRlZmF1bHQpCisKKyAgICAgICAgIyBhZGQgYW55IHBhcnNlciBkZWZhdWx0cyB0aGF0IGFyZW4ndCBwcmVzZW50CisgICAgICAgIGZvciBkZXN0IGluIHNlbGYuX2RlZmF1bHRzOgorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobmFtZXNwYWNlLCBkZXN0KToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgZGVzdCwgc2VsZi5fZGVmYXVsdHNbZGVzdF0pCisKKyAgICAgICAgIyBwYXJzZSB0aGUgYXJndW1lbnRzIGFuZCBleGl0IGlmIHRoZXJlIGFyZSBhbnkgZXJyb3JzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWVzcGFjZSwgYXJncyA9IHNlbGYuX3BhcnNlX2tub3duX2FyZ3MoYXJncywgbmFtZXNwYWNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihuYW1lc3BhY2UsIF9VTlJFQ09HTklaRURfQVJHU19BVFRSKToKKyAgICAgICAgICAgICAgICBhcmdzLmV4dGVuZChnZXRhdHRyKG5hbWVzcGFjZSwgX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIpKQorICAgICAgICAgICAgICAgIGRlbGF0dHIobmFtZXNwYWNlLCBfVU5SRUNPR05JWkVEX0FSR1NfQVRUUikKKyAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2UsIGFyZ3MKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50RXJyb3I6CisgICAgICAgICAgICBlcnIgPSBfc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCisKKyAgICBkZWYgX3BhcnNlX2tub3duX2FyZ3Moc2VsZiwgYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSk6CisgICAgICAgICMgcmVwbGFjZSBhcmcgc3RyaW5ncyB0aGF0IGFyZSBmaWxlIHJlZmVyZW5jZXMKKyAgICAgICAgaWYgc2VsZi5mcm9tZmlsZV9wcmVmaXhfY2hhcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQorCisgICAgICAgICMgbWFwIGFsbCBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIHRvIHRoZSBvdGhlciBhcmd1bWVudHMKKyAgICAgICAgIyB0aGV5IGNhbid0IG9jY3VyIHdpdGgKKyAgICAgICAgYWN0aW9uX2NvbmZsaWN0cyA9IHt9CisgICAgICAgIGZvciBtdXRleF9ncm91cCBpbiBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzOgorICAgICAgICAgICAgZ3JvdXBfYWN0aW9ucyA9IG11dGV4X2dyb3VwLl9ncm91cF9hY3Rpb25zCisgICAgICAgICAgICBmb3IgaSwgbXV0ZXhfYWN0aW9uIGluIGVudW1lcmF0ZShtdXRleF9ncm91cC5fZ3JvdXBfYWN0aW9ucyk6CisgICAgICAgICAgICAgICAgY29uZmxpY3RzID0gYWN0aW9uX2NvbmZsaWN0cy5zZXRkZWZhdWx0KG11dGV4X2FjdGlvbiwgW10pCisgICAgICAgICAgICAgICAgY29uZmxpY3RzLmV4dGVuZChncm91cF9hY3Rpb25zWzppXSkKKyAgICAgICAgICAgICAgICBjb25mbGljdHMuZXh0ZW5kKGdyb3VwX2FjdGlvbnNbaSArIDE6XSkKKworICAgICAgICAjIGZpbmQgYWxsIG9wdGlvbiBpbmRpY2VzLCBhbmQgZGV0ZXJtaW5lIHRoZSBhcmdfc3RyaW5nX3BhdHRlcm4KKyAgICAgICAgIyB3aGljaCBoYXMgYW4gJ08nIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBhdCBhbiBpbmRleCwKKyAgICAgICAgIyBhbiAnQScgaWYgdGhlcmUgaXMgYW4gYXJndW1lbnQsIG9yIGEgJy0nIGlmIHRoZXJlIGlzIGEgJy0tJworICAgICAgICBvcHRpb25fc3RyaW5nX2luZGljZXMgPSB7fQorICAgICAgICBhcmdfc3RyaW5nX3BhdHRlcm5fcGFydHMgPSBbXQorICAgICAgICBhcmdfc3RyaW5nc19pdGVyID0gaXRlcihhcmdfc3RyaW5ncykKKyAgICAgICAgZm9yIGksIGFyZ19zdHJpbmcgaW4gZW51bWVyYXRlKGFyZ19zdHJpbmdzX2l0ZXIpOgorCisgICAgICAgICAgICAjIGFsbCBhcmdzIGFmdGVyIC0tIGFyZSBub24tb3B0aW9ucworICAgICAgICAgICAgaWYgYXJnX3N0cmluZyA9PSAnLS0nOgorICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQoJy0nKQorICAgICAgICAgICAgICAgIGZvciBhcmdfc3RyaW5nIGluIGFyZ19zdHJpbmdzX2l0ZXI6CisgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQoJ0EnKQorCisgICAgICAgICAgICAjIG90aGVyd2lzZSwgYWRkIHRoZSBhcmcgdG8gdGhlIGFyZyBzdHJpbmdzCisgICAgICAgICAgICAjIGFuZCBub3RlIHRoZSBpbmRleCBpZiBpdCB3YXMgYW4gb3B0aW9uCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9wdGlvbl90dXBsZSA9IHNlbGYuX3BhcnNlX29wdGlvbmFsKGFyZ19zdHJpbmcpCisgICAgICAgICAgICAgICAgaWYgb3B0aW9uX3R1cGxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAnQScKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nX2luZGljZXNbaV0gPSBvcHRpb25fdHVwbGUKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICdPJworICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cy5hcHBlbmQocGF0dGVybikKKworICAgICAgICAjIGpvaW4gdGhlIHBpZWNlcyB0b2dldGhlciB0byBmb3JtIHRoZSBwYXR0ZXJuCisgICAgICAgIGFyZ19zdHJpbmdzX3BhdHRlcm4gPSAnJy5qb2luKGFyZ19zdHJpbmdfcGF0dGVybl9wYXJ0cykKKworICAgICAgICAjIGNvbnZlcnRzIGFyZyBzdHJpbmdzIHRvIHRoZSBhcHByb3ByaWF0ZSBhbmQgdGhlbiB0YWtlcyB0aGUgYWN0aW9uCisgICAgICAgIHNlZW5fYWN0aW9ucyA9IHNldCgpCisgICAgICAgIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9ucyA9IHNldCgpCisKKyAgICAgICAgZGVmIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJndW1lbnRfc3RyaW5ncywgb3B0aW9uX3N0cmluZz1Ob25lKToKKyAgICAgICAgICAgIHNlZW5fYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgYXJndW1lbnRfdmFsdWVzID0gc2VsZi5fZ2V0X3ZhbHVlcyhhY3Rpb24sIGFyZ3VtZW50X3N0cmluZ3MpCisKKyAgICAgICAgICAgICMgZXJyb3IgaWYgdGhpcyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCB3aXRoIG90aGVyIHByZXZpb3VzbHkKKyAgICAgICAgICAgICMgc2VlbiBhcmd1bWVudHMsIGFzc3VtaW5nIHRoYXQgYWN0aW9ucyB0aGF0IHVzZSB0aGUgZGVmYXVsdAorICAgICAgICAgICAgIyB2YWx1ZSBkb24ndCByZWFsbHkgY291bnQgYXMgInByZXNlbnQiCisgICAgICAgICAgICBpZiBhcmd1bWVudF92YWx1ZXMgaXMgbm90IGFjdGlvbi5kZWZhdWx0OgorICAgICAgICAgICAgICAgIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9ucy5hZGQoYWN0aW9uKQorICAgICAgICAgICAgICAgIGZvciBjb25mbGljdF9hY3Rpb24gaW4gYWN0aW9uX2NvbmZsaWN0cy5nZXQoYWN0aW9uLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvbmZsaWN0X2FjdGlvbiBpbiBzZWVuX25vbl9kZWZhdWx0X2FjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfKCdub3QgYWxsb3dlZCB3aXRoIGFyZ3VtZW50ICVzJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbl9uYW1lID0gX2dldF9hY3Rpb25fbmFtZShjb25mbGljdF9hY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudEVycm9yKGFjdGlvbiwgbXNnICUgYWN0aW9uX25hbWUpCisKKyAgICAgICAgICAgICMgdGFrZSB0aGUgYWN0aW9uIGlmIHdlIGRpZG4ndCByZWNlaXZlIGEgU1VQUFJFU1MgdmFsdWUKKyAgICAgICAgICAgICMgKGUuZy4gZnJvbSBhIGRlZmF1bHQpCisgICAgICAgICAgICBpZiBhcmd1bWVudF92YWx1ZXMgaXMgbm90IFNVUFBSRVNTOgorICAgICAgICAgICAgICAgIGFjdGlvbihzZWxmLCBuYW1lc3BhY2UsIGFyZ3VtZW50X3ZhbHVlcywgb3B0aW9uX3N0cmluZykKKworICAgICAgICAjIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYXJnX3N0cmluZ3MgaW50byBhbiBvcHRpb25hbCBhY3Rpb24KKyAgICAgICAgZGVmIGNvbnN1bWVfb3B0aW9uYWwoc3RhcnRfaW5kZXgpOgorCisgICAgICAgICAgICAjIGdldCB0aGUgb3B0aW9uYWwgaWRlbnRpZmllZCBhdCB0aGlzIGluZGV4CisgICAgICAgICAgICBvcHRpb25fdHVwbGUgPSBvcHRpb25fc3RyaW5nX2luZGljZXNbc3RhcnRfaW5kZXhdCisgICAgICAgICAgICBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZyA9IG9wdGlvbl90dXBsZQorCisgICAgICAgICAgICAjIGlkZW50aWZ5IGFkZGl0aW9uYWwgb3B0aW9uYWxzIGluIHRoZSBzYW1lIGFyZyBzdHJpbmcKKyAgICAgICAgICAgICMgKGUuZy4gLXh5eiBpcyB0aGUgc2FtZSBhcyAteCAteSAteiBpZiBubyBhcmdzIGFyZSByZXF1aXJlZCkKKyAgICAgICAgICAgIG1hdGNoX2FyZ3VtZW50ID0gc2VsZi5fbWF0Y2hfYXJndW1lbnQKKyAgICAgICAgICAgIGFjdGlvbl90dXBsZXMgPSBbXQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKworICAgICAgICAgICAgICAgICMgaWYgd2UgZm91bmQgbm8gb3B0aW9uYWwgYWN0aW9uLCBza2lwIGl0CisgICAgICAgICAgICAgICAgaWYgYWN0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGV4dHJhcy5hcHBlbmQoYXJnX3N0cmluZ3Nbc3RhcnRfaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnRfaW5kZXggKyAxCisKKyAgICAgICAgICAgICAgICAjIGlmIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGFyZ3VtZW50LCB0cnkgdG8gbWF0Y2ggdGhlCisgICAgICAgICAgICAgICAgIyBvcHRpb25hbCdzIHN0cmluZyBhcmd1bWVudHMgdG8gb25seSB0aGlzCisgICAgICAgICAgICAgICAgaWYgZXhwbGljaXRfYXJnIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhcmdfY291bnQgPSBtYXRjaF9hcmd1bWVudChhY3Rpb24sICdBJykKKworICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBhY3Rpb24gaXMgYSBzaW5nbGUtZGFzaCBvcHRpb24gYW5kIHRha2VzIG5vCisgICAgICAgICAgICAgICAgICAgICMgYXJndW1lbnRzLCB0cnkgdG8gcGFyc2UgbW9yZSBzaW5nbGUtZGFzaCBvcHRpb25zIG91dAorICAgICAgICAgICAgICAgICAgICAjIG9mIHRoZSB0YWlsIG9mIHRoZSBvcHRpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIGNoYXJzID0gc2VsZi5wcmVmaXhfY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnX2NvdW50ID09IDAgYW5kIG9wdGlvbl9zdHJpbmdbMV0gbm90IGluIGNoYXJzOgorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgW10sIG9wdGlvbl9zdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9IG9wdGlvbl9zdHJpbmdbMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9zdHJpbmcgPSBjaGFyICsgZXhwbGljaXRfYXJnWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfZXhwbGljaXRfYXJnID0gZXhwbGljaXRfYXJnWzE6XSBvciBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbHNfbWFwID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nIGluIG9wdGlvbmFsc19tYXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gb3B0aW9uYWxzX21hcFtvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IG5ld19leHBsaWNpdF9hcmcKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gXygnaWdub3JlZCBleHBsaWNpdCBhcmd1bWVudCAlcicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZyAlIGV4cGxpY2l0X2FyZykKKworICAgICAgICAgICAgICAgICAgICAjIGlmIHRoZSBhY3Rpb24gZXhwZWN0IGV4YWN0bHkgb25lIGFyZ3VtZW50LCB3ZSd2ZQorICAgICAgICAgICAgICAgICAgICAjIHN1Y2Nlc3NmdWxseSBtYXRjaGVkIHRoZSBvcHRpb247IGV4aXQgdGhlIGxvb3AKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBhcmdfY291bnQgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3AgPSBzdGFydF9pbmRleCArIDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZXhwbGljaXRfYXJnXQorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgICMgZXJyb3IgaWYgYSBkb3VibGUtZGFzaCBvcHRpb24gZGlkIG5vdCB1c2UgdGhlCisgICAgICAgICAgICAgICAgICAgICMgZXhwbGljaXQgYXJndW1lbnQKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9IF8oJ2lnbm9yZWQgZXhwbGljaXQgYXJndW1lbnQgJXInKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRFcnJvcihhY3Rpb24sIG1zZyAlIGV4cGxpY2l0X2FyZykKKworICAgICAgICAgICAgICAgICMgaWYgdGhlcmUgaXMgbm8gZXhwbGljaXQgYXJndW1lbnQsIHRyeSB0byBtYXRjaCB0aGUKKyAgICAgICAgICAgICAgICAjIG9wdGlvbmFsJ3Mgc3RyaW5nIGFyZ3VtZW50cyB3aXRoIHRoZSBmb2xsb3dpbmcgc3RyaW5ncworICAgICAgICAgICAgICAgICMgaWYgc3VjY2Vzc2Z1bCwgZXhpdCB0aGUgbG9vcAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnRfaW5kZXggKyAxCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkX3BhdHRlcm5zID0gYXJnX3N0cmluZ3NfcGF0dGVybltzdGFydDpdCisgICAgICAgICAgICAgICAgICAgIGFyZ19jb3VudCA9IG1hdGNoX2FyZ3VtZW50KGFjdGlvbiwgc2VsZWN0ZWRfcGF0dGVybnMpCisgICAgICAgICAgICAgICAgICAgIHN0b3AgPSBzdGFydCArIGFyZ19jb3VudAorICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJnX3N0cmluZ3Nbc3RhcnQ6c3RvcF0KKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uX3R1cGxlcy5hcHBlbmQoKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICMgYWRkIHRoZSBPcHRpb25hbCB0byB0aGUgbGlzdCBhbmQgcmV0dXJuIHRoZSBpbmRleCBhdCB3aGljaAorICAgICAgICAgICAgIyB0aGUgT3B0aW9uYWwncyBzdHJpbmcgYXJncyBzdG9wcGVkCisgICAgICAgICAgICBhc3NlcnQgYWN0aW9uX3R1cGxlcworICAgICAgICAgICAgZm9yIGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZyBpbiBhY3Rpb25fdHVwbGVzOgorICAgICAgICAgICAgICAgIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJncywgb3B0aW9uX3N0cmluZykKKyAgICAgICAgICAgIHJldHVybiBzdG9wCisKKyAgICAgICAgIyB0aGUgbGlzdCBvZiBQb3NpdGlvbmFscyBsZWZ0IHRvIGJlIHBhcnNlZDsgdGhpcyBpcyBtb2RpZmllZAorICAgICAgICAjIGJ5IGNvbnN1bWVfcG9zaXRpb25hbHMoKQorICAgICAgICBwb3NpdGlvbmFscyA9IHNlbGYuX2dldF9wb3NpdGlvbmFsX2FjdGlvbnMoKQorCisgICAgICAgICMgZnVuY3Rpb24gdG8gY29udmVydCBhcmdfc3RyaW5ncyBpbnRvIHBvc2l0aW9uYWwgYWN0aW9ucworICAgICAgICBkZWYgY29uc3VtZV9wb3NpdGlvbmFscyhzdGFydF9pbmRleCk6CisgICAgICAgICAgICAjIG1hdGNoIGFzIG1hbnkgUG9zaXRpb25hbHMgYXMgcG9zc2libGUKKyAgICAgICAgICAgIG1hdGNoX3BhcnRpYWwgPSBzZWxmLl9tYXRjaF9hcmd1bWVudHNfcGFydGlhbAorICAgICAgICAgICAgc2VsZWN0ZWRfcGF0dGVybiA9IGFyZ19zdHJpbmdzX3BhdHRlcm5bc3RhcnRfaW5kZXg6XQorICAgICAgICAgICAgYXJnX2NvdW50cyA9IG1hdGNoX3BhcnRpYWwocG9zaXRpb25hbHMsIHNlbGVjdGVkX3BhdHRlcm4pCisKKyAgICAgICAgICAgICMgc2xpY2Ugb2ZmIHRoZSBhcHByb3ByaWF0ZSBhcmcgc3RyaW5ncyBmb3IgZWFjaCBQb3NpdGlvbmFsCisgICAgICAgICAgICAjIGFuZCBhZGQgdGhlIFBvc2l0aW9uYWwgYW5kIGl0cyBhcmdzIHRvIHRoZSBsaXN0CisgICAgICAgICAgICBmb3IgYWN0aW9uLCBhcmdfY291bnQgaW4gemlwKHBvc2l0aW9uYWxzLCBhcmdfY291bnRzKToKKyAgICAgICAgICAgICAgICBhcmdzID0gYXJnX3N0cmluZ3Nbc3RhcnRfaW5kZXg6IHN0YXJ0X2luZGV4ICsgYXJnX2NvdW50XQorICAgICAgICAgICAgICAgIHN0YXJ0X2luZGV4ICs9IGFyZ19jb3VudAorICAgICAgICAgICAgICAgIHRha2VfYWN0aW9uKGFjdGlvbiwgYXJncykKKworICAgICAgICAgICAgIyBzbGljZSBvZmYgdGhlIFBvc2l0aW9uYWxzIHRoYXQgd2UganVzdCBwYXJzZWQgYW5kIHJldHVybiB0aGUKKyAgICAgICAgICAgICMgaW5kZXggYXQgd2hpY2ggdGhlIFBvc2l0aW9uYWxzJyBzdHJpbmcgYXJncyBzdG9wcGVkCisgICAgICAgICAgICBwb3NpdGlvbmFsc1s6XSA9IHBvc2l0aW9uYWxzW2xlbihhcmdfY291bnRzKTpdCisgICAgICAgICAgICByZXR1cm4gc3RhcnRfaW5kZXgKKworICAgICAgICAjIGNvbnN1bWUgUG9zaXRpb25hbHMgYW5kIE9wdGlvbmFscyBhbHRlcm5hdGVseSwgdW50aWwgd2UgaGF2ZQorICAgICAgICAjIHBhc3NlZCB0aGUgbGFzdCBvcHRpb24gc3RyaW5nCisgICAgICAgIGV4dHJhcyA9IFtdCisgICAgICAgIHN0YXJ0X2luZGV4ID0gMAorICAgICAgICBpZiBvcHRpb25fc3RyaW5nX2luZGljZXM6CisgICAgICAgICAgICBtYXhfb3B0aW9uX3N0cmluZ19pbmRleCA9IG1heChvcHRpb25fc3RyaW5nX2luZGljZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXhfb3B0aW9uX3N0cmluZ19pbmRleCA9IC0xCisgICAgICAgIHdoaWxlIHN0YXJ0X2luZGV4IDw9IG1heF9vcHRpb25fc3RyaW5nX2luZGV4OgorCisgICAgICAgICAgICAjIGNvbnN1bWUgYW55IFBvc2l0aW9uYWxzIHByZWNlZGluZyB0aGUgbmV4dCBvcHRpb24KKyAgICAgICAgICAgIG5leHRfb3B0aW9uX3N0cmluZ19pbmRleCA9IG1pbihbCisgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgICAgICBmb3IgaW5kZXggaW4gb3B0aW9uX3N0cmluZ19pbmRpY2VzCisgICAgICAgICAgICAgICAgaWYgaW5kZXggPj0gc3RhcnRfaW5kZXhdKQorICAgICAgICAgICAgaWYgc3RhcnRfaW5kZXggIT0gbmV4dF9vcHRpb25fc3RyaW5nX2luZGV4OgorICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxzX2VuZF9pbmRleCA9IGNvbnN1bWVfcG9zaXRpb25hbHMoc3RhcnRfaW5kZXgpCisKKyAgICAgICAgICAgICAgICAjIG9ubHkgdHJ5IHRvIHBhcnNlIHRoZSBuZXh0IG9wdGlvbmFsIGlmIHdlIGRpZG4ndCBjb25zdW1lCisgICAgICAgICAgICAgICAgIyB0aGUgb3B0aW9uIHN0cmluZyBkdXJpbmcgdGhlIHBvc2l0aW9uYWxzIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBpZiBwb3NpdGlvbmFsc19lbmRfaW5kZXggPiBzdGFydF9pbmRleDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBwb3NpdGlvbmFsc19lbmRfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzdGFydF9pbmRleCA9IHBvc2l0aW9uYWxzX2VuZF9pbmRleAorCisgICAgICAgICAgICAjIGlmIHdlIGNvbnN1bWVkIGFsbCB0aGUgcG9zaXRpb25hbHMgd2UgY291bGQgYW5kIHdlJ3JlIG5vdAorICAgICAgICAgICAgIyBhdCB0aGUgaW5kZXggb2YgYW4gb3B0aW9uIHN0cmluZywgdGhlcmUgd2VyZSBleHRyYSBhcmd1bWVudHMKKyAgICAgICAgICAgIGlmIHN0YXJ0X2luZGV4IG5vdCBpbiBvcHRpb25fc3RyaW5nX2luZGljZXM6CisgICAgICAgICAgICAgICAgc3RyaW5ncyA9IGFyZ19zdHJpbmdzW3N0YXJ0X2luZGV4Om5leHRfb3B0aW9uX3N0cmluZ19pbmRleF0KKyAgICAgICAgICAgICAgICBleHRyYXMuZXh0ZW5kKHN0cmluZ3MpCisgICAgICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBuZXh0X29wdGlvbl9zdHJpbmdfaW5kZXgKKworICAgICAgICAgICAgIyBjb25zdW1lIHRoZSBuZXh0IG9wdGlvbmFsIGFuZCBhbnkgYXJndW1lbnRzIGZvciBpdAorICAgICAgICAgICAgc3RhcnRfaW5kZXggPSBjb25zdW1lX29wdGlvbmFsKHN0YXJ0X2luZGV4KQorCisgICAgICAgICMgY29uc3VtZSBhbnkgcG9zaXRpb25hbHMgZm9sbG93aW5nIHRoZSBsYXN0IE9wdGlvbmFsCisgICAgICAgIHN0b3BfaW5kZXggPSBjb25zdW1lX3Bvc2l0aW9uYWxzKHN0YXJ0X2luZGV4KQorCisgICAgICAgICMgaWYgd2UgZGlkbid0IGNvbnN1bWUgYWxsIHRoZSBhcmd1bWVudCBzdHJpbmdzLCB0aGVyZSB3ZXJlIGV4dHJhcworICAgICAgICBleHRyYXMuZXh0ZW5kKGFyZ19zdHJpbmdzW3N0b3BfaW5kZXg6XSkKKworICAgICAgICAjIGlmIHdlIGRpZG4ndCB1c2UgYWxsIHRoZSBQb3NpdGlvbmFsIG9iamVjdHMsIHRoZXJlIHdlcmUgdG9vIGZldworICAgICAgICAjIGFyZyBzdHJpbmdzIHN1cHBsaWVkLgorICAgICAgICBpZiBwb3NpdGlvbmFsczoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoXygndG9vIGZldyBhcmd1bWVudHMnKSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBhbGwgcmVxdWlyZWQgYWN0aW9ucyB3ZXJlIHByZXNlbnQKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBzZWxmLl9hY3Rpb25zOgorICAgICAgICAgICAgaWYgYWN0aW9uLnJlcXVpcmVkOgorICAgICAgICAgICAgICAgIGlmIGFjdGlvbiBub3QgaW4gc2Vlbl9hY3Rpb25zOgorICAgICAgICAgICAgICAgICAgICBuYW1lID0gX2dldF9hY3Rpb25fbmFtZShhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoXygnYXJndW1lbnQgJXMgaXMgcmVxdWlyZWQnKSAlIG5hbWUpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgYWxsIHJlcXVpcmVkIGdyb3VwcyBoYWQgb25lIG9wdGlvbiBwcmVzZW50CisgICAgICAgIGZvciBncm91cCBpbiBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzOgorICAgICAgICAgICAgaWYgZ3JvdXAucmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiBpbiBncm91cC5fZ3JvdXBfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uIGluIHNlZW5fbm9uX2RlZmF1bHRfYWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAjIGlmIG5vIGFjdGlvbnMgd2VyZSB1c2VkLCByZXBvcnQgdGhlIGVycm9yCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMgPSBbX2dldF9hY3Rpb25fbmFtZShhY3Rpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhY3Rpb24gaW4gZ3JvdXAuX2dyb3VwX2FjdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYWN0aW9uLmhlbHAgaXMgbm90IFNVUFBSRVNTXQorICAgICAgICAgICAgICAgICAgICBtc2cgPSBfKCdvbmUgb2YgdGhlIGFyZ3VtZW50cyAlcyBpcyByZXF1aXJlZCcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnICUgJyAnLmpvaW4obmFtZXMpKQorCisgICAgICAgICMgcmV0dXJuIHRoZSB1cGRhdGVkIG5hbWVzcGFjZSBhbmQgdGhlIGV4dHJhIGFyZ3VtZW50cworICAgICAgICByZXR1cm4gbmFtZXNwYWNlLCBleHRyYXMKKworICAgIGRlZiBfcmVhZF9hcmdzX2Zyb21fZmlsZXMoc2VsZiwgYXJnX3N0cmluZ3MpOgorICAgICAgICAjIGV4cGFuZCBhcmd1bWVudHMgcmVmZXJlbmNpbmcgZmlsZXMKKyAgICAgICAgbmV3X2FyZ19zdHJpbmdzID0gW10KKyAgICAgICAgZm9yIGFyZ19zdHJpbmcgaW4gYXJnX3N0cmluZ3M6CisKKyAgICAgICAgICAgICMgZm9yIHJlZ3VsYXIgYXJndW1lbnRzLCBqdXN0IGFkZCB0aGVtIGJhY2sgaW50byB0aGUgbGlzdAorICAgICAgICAgICAgaWYgYXJnX3N0cmluZ1swXSBub3QgaW4gc2VsZi5mcm9tZmlsZV9wcmVmaXhfY2hhcnM6CisgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmFwcGVuZChhcmdfc3RyaW5nKQorCisgICAgICAgICAgICAjIHJlcGxhY2UgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzIHdpdGggdGhlIGZpbGUgY29udGVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZSA9IG9wZW4oYXJnX3N0cmluZ1sxOl0pCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmdfbGluZSBpbiBhcmdzX2ZpbGUucmVhZCgpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIHNlbGYuY29udmVydF9hcmdfbGluZV90b19hcmdzKGFyZ19saW5lKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3N0cmluZ3MuYXBwZW5kKGFyZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzID0gc2VsZi5fcmVhZF9hcmdzX2Zyb21fZmlsZXMoYXJnX3N0cmluZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdfYXJnX3N0cmluZ3MuZXh0ZW5kKGFyZ19zdHJpbmdzKQorICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gX3N5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3Ioc3RyKGVycikpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIG1vZGlmaWVkIGFyZ3VtZW50IGxpc3QKKyAgICAgICAgcmV0dXJuIG5ld19hcmdfc3RyaW5ncworCisgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6CisgICAgICAgIHJldHVybiBbYXJnX2xpbmVdCisKKyAgICBkZWYgX21hdGNoX2FyZ3VtZW50KHNlbGYsIGFjdGlvbiwgYXJnX3N0cmluZ3NfcGF0dGVybik6CisgICAgICAgICMgbWF0Y2ggdGhlIHBhdHRlcm4gZm9yIHRoaXMgYWN0aW9uIHRvIHRoZSBhcmcgc3RyaW5ncworICAgICAgICBuYXJnc19wYXR0ZXJuID0gc2VsZi5fZ2V0X25hcmdzX3BhdHRlcm4oYWN0aW9uKQorICAgICAgICBtYXRjaCA9IF9yZS5tYXRjaChuYXJnc19wYXR0ZXJuLCBhcmdfc3RyaW5nc19wYXR0ZXJuKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHdlIHdlcmVuJ3QgYWJsZSB0byBmaW5kIGEgbWF0Y2gKKyAgICAgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgICAgIG5hcmdzX2Vycm9ycyA9IHsKKyAgICAgICAgICAgICAgICBOb25lOiBfKCdleHBlY3RlZCBvbmUgYXJndW1lbnQnKSwKKyAgICAgICAgICAgICAgICBPUFRJT05BTDogXygnZXhwZWN0ZWQgYXQgbW9zdCBvbmUgYXJndW1lbnQnKSwKKyAgICAgICAgICAgICAgICBPTkVfT1JfTU9SRTogXygnZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIGFyZ3VtZW50JyksCisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0ID0gbmdldHRleHQoJ2V4cGVjdGVkICVzIGFyZ3VtZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQgJXMgYXJndW1lbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24ubmFyZ3MpICUgYWN0aW9uLm5hcmdzCisgICAgICAgICAgICBtc2cgPSBuYXJnc19lcnJvcnMuZ2V0KGFjdGlvbi5uYXJncywgZGVmYXVsdCkKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbWF0Y2hlZAorICAgICAgICByZXR1cm4gbGVuKG1hdGNoLmdyb3VwKDEpKQorCisgICAgZGVmIF9tYXRjaF9hcmd1bWVudHNfcGFydGlhbChzZWxmLCBhY3Rpb25zLCBhcmdfc3RyaW5nc19wYXR0ZXJuKToKKyAgICAgICAgIyBwcm9ncmVzc2l2ZWx5IHNob3J0ZW4gdGhlIGFjdGlvbnMgbGlzdCBieSBzbGljaW5nIG9mZiB0aGUKKyAgICAgICAgIyBmaW5hbCBhY3Rpb25zIHVudGlsIHdlIGZpbmQgYSBtYXRjaAorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oYWN0aW9ucyksIDAsIC0xKToKKyAgICAgICAgICAgIGFjdGlvbnNfc2xpY2UgPSBhY3Rpb25zWzppXQorICAgICAgICAgICAgcGF0dGVybiA9ICcnLmpvaW4oW3NlbGYuX2dldF9uYXJnc19wYXR0ZXJuKGFjdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWN0aW9uIGluIGFjdGlvbnNfc2xpY2VdKQorICAgICAgICAgICAgbWF0Y2ggPSBfcmUubWF0Y2gocGF0dGVybiwgYXJnX3N0cmluZ3NfcGF0dGVybikKKyAgICAgICAgICAgIGlmIG1hdGNoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlc3VsdC5leHRlbmQoW2xlbihzdHJpbmcpIGZvciBzdHJpbmcgaW4gbWF0Y2guZ3JvdXBzKCldKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGxpc3Qgb2YgYXJnIHN0cmluZyBjb3VudHMKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9wYXJzZV9vcHRpb25hbChzZWxmLCBhcmdfc3RyaW5nKToKKyAgICAgICAgIyBpZiBpdCdzIGFuIGVtcHR5IHN0cmluZywgaXQgd2FzIG1lYW50IHRvIGJlIGEgcG9zaXRpb25hbAorICAgICAgICBpZiBub3QgYXJnX3N0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgIyBpZiBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBwcmVmaXgsIGl0IHdhcyBtZWFudCB0byBiZSBwb3NpdGlvbmFsCisgICAgICAgIGlmIG5vdCBhcmdfc3RyaW5nWzBdIGluIHNlbGYucHJlZml4X2NoYXJzOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGlmIHRoZSBvcHRpb24gc3RyaW5nIGlzIHByZXNlbnQgaW4gdGhlIHBhcnNlciwgcmV0dXJuIHRoZSBhY3Rpb24KKyAgICAgICAgaWYgYXJnX3N0cmluZyBpbiBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnM6CisgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbYXJnX3N0cmluZ10KKyAgICAgICAgICAgIHJldHVybiBhY3Rpb24sIGFyZ19zdHJpbmcsIE5vbmUKKworICAgICAgICAjIGlmIGl0J3MganVzdCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGl0IHdhcyBtZWFudCB0byBiZSBwb3NpdGlvbmFsCisgICAgICAgIGlmIGxlbihhcmdfc3RyaW5nKSA9PSAxOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGlmIHRoZSBvcHRpb24gc3RyaW5nIGJlZm9yZSB0aGUgIj0iIGlzIHByZXNlbnQsIHJldHVybiB0aGUgYWN0aW9uCisgICAgICAgIGlmICc9JyBpbiBhcmdfc3RyaW5nOgorICAgICAgICAgICAgb3B0aW9uX3N0cmluZywgZXhwbGljaXRfYXJnID0gYXJnX3N0cmluZy5zcGxpdCgnPScsIDEpCisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbb3B0aW9uX3N0cmluZ10KKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcKKworICAgICAgICAjIHNlYXJjaCB0aHJvdWdoIGFsbCBwb3NzaWJsZSBwcmVmaXhlcyBvZiB0aGUgb3B0aW9uIHN0cmluZworICAgICAgICAjIGFuZCBhbGwgYWN0aW9ucyBpbiB0aGUgcGFyc2VyIGZvciBwb3NzaWJsZSBpbnRlcnByZXRhdGlvbnMKKyAgICAgICAgb3B0aW9uX3R1cGxlcyA9IHNlbGYuX2dldF9vcHRpb25fdHVwbGVzKGFyZ19zdHJpbmcpCisKKyAgICAgICAgIyBpZiBtdWx0aXBsZSBhY3Rpb25zIG1hdGNoLCB0aGUgb3B0aW9uIHN0cmluZyB3YXMgYW1iaWd1b3VzCisgICAgICAgIGlmIGxlbihvcHRpb25fdHVwbGVzKSA+IDE6CisgICAgICAgICAgICBvcHRpb25zID0gJywgJy5qb2luKFtvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgZm9yIGFjdGlvbiwgb3B0aW9uX3N0cmluZywgZXhwbGljaXRfYXJnIGluIG9wdGlvbl90dXBsZXNdKQorICAgICAgICAgICAgYXJncyA9IHsnb3B0aW9uJzogYXJnX3N0cmluZywgJ21hdGNoZXMnOiBvcHRpb25zfQorICAgICAgICAgICAgbXNnID0gXygnYW1iaWd1b3VzIG9wdGlvbjogJShvcHRpb24pcyBjb3VsZCBtYXRjaCAlKG1hdGNoZXMpcycpCisgICAgICAgICAgICBzZWxmLmVycm9yKG1zZyAlIGFyZ3MpCisKKyAgICAgICAgIyBpZiBleGFjdGx5IG9uZSBhY3Rpb24gbWF0Y2hlZCwgdGhpcyBzZWdtZW50YXRpb24gaXMgZ29vZCwKKyAgICAgICAgIyBzbyByZXR1cm4gdGhlIHBhcnNlZCBhY3Rpb24KKyAgICAgICAgZWxpZiBsZW4ob3B0aW9uX3R1cGxlcykgPT0gMToKKyAgICAgICAgICAgIG9wdGlvbl90dXBsZSwgPSBvcHRpb25fdHVwbGVzCisgICAgICAgICAgICByZXR1cm4gb3B0aW9uX3R1cGxlCisKKyAgICAgICAgIyBpZiBpdCB3YXMgbm90IGZvdW5kIGFzIGFuIG9wdGlvbiwgYnV0IGl0IGxvb2tzIGxpa2UgYSBuZWdhdGl2ZQorICAgICAgICAjIG51bWJlciwgaXQgd2FzIG1lYW50IHRvIGJlIHBvc2l0aW9uYWwKKyAgICAgICAgIyB1bmxlc3MgdGhlcmUgYXJlIG5lZ2F0aXZlLW51bWJlci1saWtlIG9wdGlvbnMKKyAgICAgICAgaWYgc2VsZi5fbmVnYXRpdmVfbnVtYmVyX21hdGNoZXIubWF0Y2goYXJnX3N0cmluZyk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5faGFzX25lZ2F0aXZlX251bWJlcl9vcHRpb25hbHM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGlmIGl0IGNvbnRhaW5zIGEgc3BhY2UsIGl0IHdhcyBtZWFudCB0byBiZSBhIHBvc2l0aW9uYWwKKyAgICAgICAgaWYgJyAnIGluIGFyZ19zdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgaXQgd2FzIG1lYW50IHRvIGJlIGFuIG9wdGlvbmFsIGJ1dCB0aGVyZSBpcyBubyBzdWNoIG9wdGlvbgorICAgICAgICAjIGluIHRoaXMgcGFyc2VyICh0aG91Z2ggaXQgbWlnaHQgYmUgYSB2YWxpZCBvcHRpb24gaW4gYSBzdWJwYXJzZXIpCisgICAgICAgIHJldHVybiBOb25lLCBhcmdfc3RyaW5nLCBOb25lCisKKyAgICBkZWYgX2dldF9vcHRpb25fdHVwbGVzKHNlbGYsIG9wdGlvbl9zdHJpbmcpOgorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgICMgb3B0aW9uIHN0cmluZ3Mgc3RhcnRpbmcgd2l0aCB0d28gcHJlZml4IGNoYXJhY3RlcnMgYXJlIG9ubHkKKyAgICAgICAgIyBzcGxpdCBhdCB0aGUgJz0nCisgICAgICAgIGNoYXJzID0gc2VsZi5wcmVmaXhfY2hhcnMKKyAgICAgICAgaWYgb3B0aW9uX3N0cmluZ1swXSBpbiBjaGFycyBhbmQgb3B0aW9uX3N0cmluZ1sxXSBpbiBjaGFyczoKKyAgICAgICAgICAgIGlmICc9JyBpbiBvcHRpb25fc3RyaW5nOgorICAgICAgICAgICAgICAgIG9wdGlvbl9wcmVmaXgsIGV4cGxpY2l0X2FyZyA9IG9wdGlvbl9zdHJpbmcuc3BsaXQoJz0nLCAxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcHRpb25fcHJlZml4ID0gb3B0aW9uX3N0cmluZworICAgICAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IE5vbmUKKyAgICAgICAgICAgIGZvciBvcHRpb25fc3RyaW5nIGluIHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uczoKKyAgICAgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nLnN0YXJ0c3dpdGgob3B0aW9uX3ByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9IHNlbGYuX29wdGlvbl9zdHJpbmdfYWN0aW9uc1tvcHRpb25fc3RyaW5nXQorICAgICAgICAgICAgICAgICAgICB0dXAgPSBhY3Rpb24sIG9wdGlvbl9zdHJpbmcsIGV4cGxpY2l0X2FyZworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHR1cCkKKworICAgICAgICAjIHNpbmdsZSBjaGFyYWN0ZXIgb3B0aW9ucyBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggdGhlaXIgYXJndW1lbnRzCisgICAgICAgICMgYnV0IG11bHRpcGxlIGNoYXJhY3RlciBvcHRpb25zIGFsd2F5cyBoYXZlIHRvIGhhdmUgdGhlaXIgYXJndW1lbnQKKyAgICAgICAgIyBzZXBhcmF0ZQorICAgICAgICBlbGlmIG9wdGlvbl9zdHJpbmdbMF0gaW4gY2hhcnMgYW5kIG9wdGlvbl9zdHJpbmdbMV0gbm90IGluIGNoYXJzOgorICAgICAgICAgICAgb3B0aW9uX3ByZWZpeCA9IG9wdGlvbl9zdHJpbmcKKyAgICAgICAgICAgIGV4cGxpY2l0X2FyZyA9IE5vbmUKKyAgICAgICAgICAgIHNob3J0X29wdGlvbl9wcmVmaXggPSBvcHRpb25fc3RyaW5nWzoyXQorICAgICAgICAgICAgc2hvcnRfZXhwbGljaXRfYXJnID0gb3B0aW9uX3N0cmluZ1syOl0KKworICAgICAgICAgICAgZm9yIG9wdGlvbl9zdHJpbmcgaW4gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zOgorICAgICAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcgPT0gc2hvcnRfb3B0aW9uX3ByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gc2VsZi5fb3B0aW9uX3N0cmluZ19hY3Rpb25zW29wdGlvbl9zdHJpbmddCisgICAgICAgICAgICAgICAgICAgIHR1cCA9IGFjdGlvbiwgb3B0aW9uX3N0cmluZywgc2hvcnRfZXhwbGljaXRfYXJnCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodHVwKQorICAgICAgICAgICAgICAgIGVsaWYgb3B0aW9uX3N0cmluZy5zdGFydHN3aXRoKG9wdGlvbl9wcmVmaXgpOgorICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSBzZWxmLl9vcHRpb25fc3RyaW5nX2FjdGlvbnNbb3B0aW9uX3N0cmluZ10KKyAgICAgICAgICAgICAgICAgICAgdHVwID0gYWN0aW9uLCBvcHRpb25fc3RyaW5nLCBleHBsaWNpdF9hcmcKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0dXApCisKKyAgICAgICAgIyBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5lcnJvcihfKCd1bmV4cGVjdGVkIG9wdGlvbiBzdHJpbmc6ICVzJykgJSBvcHRpb25fc3RyaW5nKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjb2xsZWN0ZWQgb3B0aW9uIHR1cGxlcworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX2dldF9uYXJnc19wYXR0ZXJuKHNlbGYsIGFjdGlvbik6CisgICAgICAgICMgaW4gYWxsIGV4YW1wbGVzIGJlbG93LCB3ZSBoYXZlIHRvIGFsbG93IGZvciAnLS0nIGFyZ3MKKyAgICAgICAgIyB3aGljaCBhcmUgcmVwcmVzZW50ZWQgYXMgJy0nIGluIHRoZSBwYXR0ZXJuCisgICAgICAgIG5hcmdzID0gYWN0aW9uLm5hcmdzCisKKyAgICAgICAgIyB0aGUgZGVmYXVsdCAoTm9uZSkgaXMgYXNzdW1lZCB0byBiZSBhIHNpbmdsZSBhcmd1bWVudAorICAgICAgICBpZiBuYXJncyBpcyBOb25lOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoLSpBLSopJworCisgICAgICAgICMgYWxsb3cgemVybyBvciBvbmUgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gT1BUSU9OQUw6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkE/LSopJworCisgICAgICAgICMgYWxsb3cgemVybyBvciBtb3JlIGFyZ3VtZW50cworICAgICAgICBlbGlmIG5hcmdzID09IFpFUk9fT1JfTU9SRToKKyAgICAgICAgICAgIG5hcmdzX3BhdHRlcm4gPSAnKC0qW0EtXSopJworCisgICAgICAgICMgYWxsb3cgb25lIG9yIG1vcmUgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gT05FX09SX01PUkU6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKkFbQS1dKiknCisKKyAgICAgICAgIyBhbGxvdyBhbnkgbnVtYmVyIG9mIG9wdGlvbnMgb3IgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoWy1BT10qKScKKworICAgICAgICAjIGFsbG93IG9uZSBhcmd1bWVudCBmb2xsb3dlZCBieSBhbnkgbnVtYmVyIG9mIG9wdGlvbnMgb3IgYXJndW1lbnRzCisgICAgICAgIGVsaWYgbmFyZ3MgPT0gUEFSU0VSOgorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9ICcoLSpBWy1BT10qKScKKworICAgICAgICAjIGFsbCBvdGhlcnMgc2hvdWxkIGJlIGludGVnZXJzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gJygtKiVzLSopJyAlICctKicuam9pbignQScgKiBuYXJncykKKworICAgICAgICAjIGlmIHRoaXMgaXMgYW4gb3B0aW9uYWwgYWN0aW9uLCAtLSBpcyBub3QgYWxsb3dlZAorICAgICAgICBpZiBhY3Rpb24ub3B0aW9uX3N0cmluZ3M6CisgICAgICAgICAgICBuYXJnc19wYXR0ZXJuID0gbmFyZ3NfcGF0dGVybi5yZXBsYWNlKCctKicsICcnKQorICAgICAgICAgICAgbmFyZ3NfcGF0dGVybiA9IG5hcmdzX3BhdHRlcm4ucmVwbGFjZSgnLScsICcnKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBwYXR0ZXJuCisgICAgICAgIHJldHVybiBuYXJnc19wYXR0ZXJuCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgVmFsdWUgY29udmVyc2lvbiBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgX2dldF92YWx1ZXMoc2VsZiwgYWN0aW9uLCBhcmdfc3RyaW5ncyk6CisgICAgICAgICMgZm9yIGV2ZXJ5dGhpbmcgYnV0IFBBUlNFUiBhcmdzLCBzdHJpcCBvdXQgJy0tJworICAgICAgICBpZiBhY3Rpb24ubmFyZ3Mgbm90IGluIFtQQVJTRVIsIFJFTUFJTkRFUl06CisgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtzIGZvciBzIGluIGFyZ19zdHJpbmdzIGlmIHMgIT0gJy0tJ10KKworICAgICAgICAjIG9wdGlvbmFsIGFyZ3VtZW50IHByb2R1Y2VzIGEgZGVmYXVsdCB3aGVuIG5vdCBwcmVzZW50CisgICAgICAgIGlmIG5vdCBhcmdfc3RyaW5ncyBhbmQgYWN0aW9uLm5hcmdzID09IE9QVElPTkFMOgorICAgICAgICAgICAgaWYgYWN0aW9uLm9wdGlvbl9zdHJpbmdzOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmNvbnN0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9nZXRfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHZhbHVlKQorCisgICAgICAgICMgd2hlbiBuYXJncz0nKicgb24gYSBwb3NpdGlvbmFsLCBpZiB0aGVyZSB3ZXJlIG5vIGNvbW1hbmQtbGluZQorICAgICAgICAjIGFyZ3MsIHVzZSB0aGUgZGVmYXVsdCBpZiBpdCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIE5vbmUKKyAgICAgICAgZWxpZiAobm90IGFyZ19zdHJpbmdzIGFuZCBhY3Rpb24ubmFyZ3MgPT0gWkVST19PUl9NT1JFIGFuZAorICAgICAgICAgICAgICBub3QgYWN0aW9uLm9wdGlvbl9zdHJpbmdzKToKKyAgICAgICAgICAgIGlmIGFjdGlvbi5kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHZhbHVlID0gYWN0aW9uLmRlZmF1bHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmdfc3RyaW5ncworICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZSkKKworICAgICAgICAjIHNpbmdsZSBhcmd1bWVudCBvciBvcHRpb25hbCBhcmd1bWVudCBwcm9kdWNlcyBhIHNpbmdsZSB2YWx1ZQorICAgICAgICBlbGlmIGxlbihhcmdfc3RyaW5ncykgPT0gMSBhbmQgYWN0aW9uLm5hcmdzIGluIFtOb25lLCBPUFRJT05BTF06CisgICAgICAgICAgICBhcmdfc3RyaW5nLCA9IGFyZ19zdHJpbmdzCisgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX2dldF92YWx1ZShhY3Rpb24sIGFyZ19zdHJpbmcpCisgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHZhbHVlKQorCisgICAgICAgICMgUkVNQUlOREVSIGFyZ3VtZW50cyBjb252ZXJ0IGFsbCB2YWx1ZXMsIGNoZWNraW5nIG5vbmUKKyAgICAgICAgZWxpZiBhY3Rpb24ubmFyZ3MgPT0gUkVNQUlOREVSOgorICAgICAgICAgICAgdmFsdWUgPSBbc2VsZi5fZ2V0X3ZhbHVlKGFjdGlvbiwgdikgZm9yIHYgaW4gYXJnX3N0cmluZ3NdCisKKyAgICAgICAgIyBQQVJTRVIgYXJndW1lbnRzIGNvbnZlcnQgYWxsIHZhbHVlcywgYnV0IGNoZWNrIG9ubHkgdGhlIGZpcnN0CisgICAgICAgIGVsaWYgYWN0aW9uLm5hcmdzID09IFBBUlNFUjoKKyAgICAgICAgICAgIHZhbHVlID0gW3NlbGYuX2dldF92YWx1ZShhY3Rpb24sIHYpIGZvciB2IGluIGFyZ19zdHJpbmdzXQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdmFsdWUoYWN0aW9uLCB2YWx1ZVswXSkKKworICAgICAgICAjIGFsbCBvdGhlciB0eXBlcyBvZiBuYXJncyBwcm9kdWNlIGEgbGlzdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdmFsdWUgPSBbc2VsZi5fZ2V0X3ZhbHVlKGFjdGlvbiwgdikgZm9yIHYgaW4gYXJnX3N0cmluZ3NdCisgICAgICAgICAgICBmb3IgdiBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja192YWx1ZShhY3Rpb24sIHYpCisKKyAgICAgICAgIyByZXR1cm4gdGhlIGNvbnZlcnRlZCB2YWx1ZQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfZ2V0X3ZhbHVlKHNlbGYsIGFjdGlvbiwgYXJnX3N0cmluZyk6CisgICAgICAgIHR5cGVfZnVuYyA9IHNlbGYuX3JlZ2lzdHJ5X2dldCgndHlwZScsIGFjdGlvbi50eXBlLCBhY3Rpb24udHlwZSkKKyAgICAgICAgaWYgbm90IF9jYWxsYWJsZSh0eXBlX2Z1bmMpOgorICAgICAgICAgICAgbXNnID0gXygnJXIgaXMgbm90IGNhbGxhYmxlJykKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSB0eXBlX2Z1bmMpCisKKyAgICAgICAgIyBjb252ZXJ0IHRoZSB2YWx1ZSB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSB0eXBlX2Z1bmMoYXJnX3N0cmluZykKKworICAgICAgICAjIEFyZ3VtZW50VHlwZUVycm9ycyBpbmRpY2F0ZSBlcnJvcnMKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50VHlwZUVycm9yOgorICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIoYWN0aW9uLnR5cGUsICdfX25hbWVfXycsIHJlcHIoYWN0aW9uLnR5cGUpKQorICAgICAgICAgICAgbXNnID0gc3RyKF9zeXMuZXhjX2luZm8oKVsxXSkKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cpCisKKyAgICAgICAgIyBUeXBlRXJyb3JzIG9yIFZhbHVlRXJyb3JzIGFsc28gaW5kaWNhdGUgZXJyb3JzCisgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIG5hbWUgPSBnZXRhdHRyKGFjdGlvbi50eXBlLCAnX19uYW1lX18nLCByZXByKGFjdGlvbi50eXBlKSkKKyAgICAgICAgICAgIGFyZ3MgPSB7J3R5cGUnOiBuYW1lLCAndmFsdWUnOiBhcmdfc3RyaW5nfQorICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCAlKHR5cGUpcyB2YWx1ZTogJSh2YWx1ZSlyJykKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSBhcmdzKQorCisgICAgICAgICMgcmV0dXJuIHRoZSBjb252ZXJ0ZWQgdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9jaGVja192YWx1ZShzZWxmLCBhY3Rpb24sIHZhbHVlKToKKyAgICAgICAgIyBjb252ZXJ0ZWQgdmFsdWUgbXVzdCBiZSBvbmUgb2YgdGhlIGNob2ljZXMgKGlmIHNwZWNpZmllZCkKKyAgICAgICAgaWYgYWN0aW9uLmNob2ljZXMgaXMgbm90IE5vbmUgYW5kIHZhbHVlIG5vdCBpbiBhY3Rpb24uY2hvaWNlczoKKyAgICAgICAgICAgIGFyZ3MgPSB7J3ZhbHVlJzogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICdjaG9pY2VzJzogJywgJy5qb2luKG1hcChyZXByLCBhY3Rpb24uY2hvaWNlcykpfQorICAgICAgICAgICAgbXNnID0gXygnaW52YWxpZCBjaG9pY2U6ICUodmFsdWUpciAoY2hvb3NlIGZyb20gJShjaG9pY2VzKXMpJykKKyAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IoYWN0aW9uLCBtc2cgJSBhcmdzKQorCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PQorICAgICMgSGVscC1mb3JtYXR0aW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PT09PT09PT09CisgICAgZGVmIGZvcm1hdF91c2FnZShzZWxmKToKKyAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZ2V0X2Zvcm1hdHRlcigpCisgICAgICAgIGZvcm1hdHRlci5hZGRfdXNhZ2Uoc2VsZi51c2FnZSwgc2VsZi5fYWN0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXBzKQorICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkKKworICAgIGRlZiBmb3JtYXRfaGVscChzZWxmKToKKyAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZ2V0X2Zvcm1hdHRlcigpCisKKyAgICAgICAgIyB1c2FnZQorICAgICAgICBmb3JtYXR0ZXIuYWRkX3VzYWdlKHNlbGYudXNhZ2UsIHNlbGYuX2FjdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwcykKKworICAgICAgICAjIGRlc2NyaXB0aW9uCisgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dChzZWxmLmRlc2NyaXB0aW9uKQorCisgICAgICAgICMgcG9zaXRpb25hbHMsIG9wdGlvbmFscyBhbmQgdXNlci1kZWZpbmVkIGdyb3VwcworICAgICAgICBmb3IgYWN0aW9uX2dyb3VwIGluIHNlbGYuX2FjdGlvbl9ncm91cHM6CisgICAgICAgICAgICBmb3JtYXR0ZXIuc3RhcnRfc2VjdGlvbihhY3Rpb25fZ3JvdXAudGl0bGUpCisgICAgICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQoYWN0aW9uX2dyb3VwLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAgZm9ybWF0dGVyLmFkZF9hcmd1bWVudHMoYWN0aW9uX2dyb3VwLl9ncm91cF9hY3Rpb25zKQorICAgICAgICAgICAgZm9ybWF0dGVyLmVuZF9zZWN0aW9uKCkKKworICAgICAgICAjIGVwaWxvZworICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQoc2VsZi5lcGlsb2cpCisKKyAgICAgICAgIyBkZXRlcm1pbmUgaGVscCBmcm9tIGZvcm1hdCBhYm92ZQorICAgICAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdF9oZWxwKCkKKworICAgIGRlZiBmb3JtYXRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAnVGhlIGZvcm1hdF92ZXJzaW9uIG1ldGhvZCBpcyBkZXByZWNhdGVkIC0tIHRoZSAidmVyc2lvbiIgJworICAgICAgICAgICAgJ2FyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJywKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgZm9ybWF0dGVyID0gc2VsZi5fZ2V0X2Zvcm1hdHRlcigpCisgICAgICAgIGZvcm1hdHRlci5hZGRfdGV4dChzZWxmLnZlcnNpb24pCisgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKQorCisgICAgZGVmIF9nZXRfZm9ybWF0dGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5mb3JtYXR0ZXJfY2xhc3MocHJvZz1zZWxmLnByb2cpCisKKyAgICAjID09PT09PT09PT09PT09PT09PT09PQorICAgICMgSGVscC1wcmludGluZyBtZXRob2RzCisgICAgIyA9PT09PT09PT09PT09PT09PT09PT0KKyAgICBkZWYgcHJpbnRfdXNhZ2Uoc2VsZiwgZmlsZT1Ob25lKToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZSA9IF9zeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX3ByaW50X21lc3NhZ2Uoc2VsZi5mb3JtYXRfdXNhZ2UoKSwgZmlsZSkKKworICAgIGRlZiBwcmludF9oZWxwKHNlbGYsIGZpbGU9Tm9uZSk6CisgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbGUgPSBfc3lzLnN0ZG91dAorICAgICAgICBzZWxmLl9wcmludF9tZXNzYWdlKHNlbGYuZm9ybWF0X2hlbHAoKSwgZmlsZSkKKworICAgIGRlZiBwcmludF92ZXJzaW9uKHNlbGYsIGZpbGU9Tm9uZSk6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgJ1RoZSBwcmludF92ZXJzaW9uIG1ldGhvZCBpcyBkZXByZWNhdGVkIC0tIHRoZSAidmVyc2lvbiIgJworICAgICAgICAgICAgJ2FyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJywKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgc2VsZi5fcHJpbnRfbWVzc2FnZShzZWxmLmZvcm1hdF92ZXJzaW9uKCksIGZpbGUpCisKKyAgICBkZWYgX3ByaW50X21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZmlsZT1Ob25lKToKKyAgICAgICAgaWYgbWVzc2FnZToKKyAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlID0gX3N5cy5zdGRlcnIKKyAgICAgICAgICAgIGZpbGUud3JpdGUobWVzc2FnZSkKKworICAgICMgPT09PT09PT09PT09PT09CisgICAgIyBFeGl0aW5nIG1ldGhvZHMKKyAgICAjID09PT09PT09PT09PT09PQorICAgIGRlZiBleGl0KHNlbGYsIHN0YXR1cz0wLCBtZXNzYWdlPU5vbmUpOgorICAgICAgICBpZiBtZXNzYWdlOgorICAgICAgICAgICAgc2VsZi5fcHJpbnRfbWVzc2FnZShtZXNzYWdlLCBfc3lzLnN0ZGVycikKKyAgICAgICAgX3N5cy5leGl0KHN0YXR1cykKKworICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgIiIiZXJyb3IobWVzc2FnZTogc3RyaW5nKQorCisgICAgICAgIFByaW50cyBhIHVzYWdlIG1lc3NhZ2UgaW5jb3Jwb3JhdGluZyB0aGUgbWVzc2FnZSB0byBzdGRlcnIgYW5kCisgICAgICAgIGV4aXRzLgorCisgICAgICAgIElmIHlvdSBvdmVycmlkZSB0aGlzIGluIGEgc3ViY2xhc3MsIGl0IHNob3VsZCBub3QgcmV0dXJuIC0tIGl0CisgICAgICAgIHNob3VsZCBlaXRoZXIgZXhpdCBvciByYWlzZSBhbiBleGNlcHRpb24uCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnByaW50X3VzYWdlKF9zeXMuc3RkZXJyKQorICAgICAgICBhcmdzID0geydwcm9nJzogc2VsZi5wcm9nLCAnbWVzc2FnZSc6IG1lc3NhZ2V9CisgICAgICAgIHNlbGYuZXhpdCgyLCBfKCclKHByb2cpczogZXJyb3I6ICUobWVzc2FnZSlzXG4nKSAlIGFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCAxMTJjOTcwLi5mYjVhZGFjIDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTEsNCArMSwzIEBACi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogIiIiCiAgICAgYXN0CiAgICAgfn5+CkBAIC00MSw4ICs0MCw4IEBACiAgICAgIiIiCiAgICAgU2FmZWx5IGV2YWx1YXRlIGFuIGV4cHJlc3Npb24gbm9kZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgUHl0aG9uCiAgICAgZXhwcmVzc2lvbi4gIFRoZSBzdHJpbmcgb3Igbm9kZSBwcm92aWRlZCBtYXkgb25seSBjb25zaXN0IG9mIHRoZSBmb2xsb3dpbmcKLSAgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBudW1iZXJzLCB0dXBsZXMsIGxpc3RzLCBkaWN0cywgYm9vbGVhbnMsCi0gICAgYW5kIE5vbmUuCisgICAgUHl0aG9uIGxpdGVyYWwgc3RydWN0dXJlczogc3RyaW5ncywgYnl0ZXMsIG51bWJlcnMsIHR1cGxlcywgbGlzdHMsIGRpY3RzLAorICAgIHNldHMsIGJvb2xlYW5zLCBhbmQgTm9uZS4KICAgICAiIiIKICAgICBfc2FmZV9uYW1lcyA9IHsnTm9uZSc6IE5vbmUsICdUcnVlJzogVHJ1ZSwgJ0ZhbHNlJzogRmFsc2V9CiAgICAgaWYgaXNpbnN0YW5jZShub2RlX29yX3N0cmluZywgc3RyKToKQEAgLTUwLDcgKzQ5LDcgQEAKICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBFeHByZXNzaW9uKToKICAgICAgICAgbm9kZV9vcl9zdHJpbmcgPSBub2RlX29yX3N0cmluZy5ib2R5CiAgICAgZGVmIF9jb252ZXJ0KG5vZGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUsIFN0cik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uobm9kZSwgKFN0ciwgQnl0ZXMpKToKICAgICAgICAgICAgIHJldHVybiBub2RlLnMKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE51bSk6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5uCkBAIC01OCwyNSArNTcsMzMgQEAKICAgICAgICAgICAgIHJldHVybiB0dXBsZShtYXAoX2NvbnZlcnQsIG5vZGUuZWx0cykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShub2RlLCBMaXN0KToKICAgICAgICAgICAgIHJldHVybiBsaXN0KG1hcChfY29udmVydCwgbm9kZS5lbHRzKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gc2V0KG1hcChfY29udmVydCwgbm9kZS5lbHRzKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIERpY3QpOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QoKF9jb252ZXJ0KGspLCBfY29udmVydCh2KSkgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHppcChub2RlLmtleXMsIG5vZGUudmFsdWVzKSkKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWUpOgogICAgICAgICAgICAgaWYgbm9kZS5pZCBpbiBfc2FmZV9uYW1lczoKICAgICAgICAgICAgICAgICByZXR1cm4gX3NhZmVfbmFtZXNbbm9kZS5pZF0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIFVuYXJ5T3ApIGFuZCBcCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLm9wLCAoVUFkZCwgVVN1YikpIGFuZCBcCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLm9wZXJhbmQsIChOdW0sIFVuYXJ5T3AsIEJpbk9wKSk6CisgICAgICAgICAgICBvcGVyYW5kID0gX2NvbnZlcnQobm9kZS5vcGVyYW5kKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLm9wLCBVQWRkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKyBvcGVyYW5kCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAtIG9wZXJhbmQKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIEJpbk9wKSBhbmQgXAogICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5vcCwgKEFkZCwgU3ViKSkgYW5kIFwKLSAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUucmlnaHQsIE51bSkgYW5kIFwKLSAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUucmlnaHQubiwgY29tcGxleCkgYW5kIFwKLSAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUubGVmdCwgTnVtKSBhbmQgXAotICAgICAgICAgICAgIGlzaW5zdGFuY2Uobm9kZS5sZWZ0Lm4sIChpbnQsIGZsb2F0KSk6Ci0gICAgICAgICAgICBsZWZ0ID0gbm9kZS5sZWZ0Lm4KLSAgICAgICAgICAgIHJpZ2h0ID0gbm9kZS5yaWdodC5uCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLnJpZ2h0LCAoTnVtLCBVbmFyeU9wLCBCaW5PcCkpIGFuZCBcCisgICAgICAgICAgICAgaXNpbnN0YW5jZShub2RlLmxlZnQsIChOdW0sIFVuYXJ5T3AsIEJpbk9wKSk6CisgICAgICAgICAgICBsZWZ0ID0gX2NvbnZlcnQobm9kZS5sZWZ0KQorICAgICAgICAgICAgcmlnaHQgPSBfY29udmVydChub2RlLnJpZ2h0KQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlLm9wLCBBZGQpOgogICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICsgcmlnaHQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodAotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtYWxmb3JtZWQgc3RyaW5nJykKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbWFsZm9ybWVkIG5vZGUgb3Igc3RyaW5nOiAnICsgcmVwcihub2RlKSkKICAgICByZXR1cm4gX2NvbnZlcnQobm9kZV9vcl9zdHJpbmcpCiAKIApkaWZmIC0tZ2l0IGEvTGliL2FzeW5jb3JlLnB5IGIvTGliL2FzeW5jb3JlLnB5CmluZGV4IDAwNDY0YTkuLjVkN2JkZGEgMTAwNjQ0Ci0tLSBhL0xpYi9hc3luY29yZS5weQorKysgYi9MaWIvYXN5bmNvcmUucHkKQEAgLTUwLDEwICs1MCwxMiBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKK2ltcG9ydCB3YXJuaW5ncworCiBpbXBvcnQgb3MKIGZyb20gZXJybm8gaW1wb3J0IEVBTFJFQURZLCBFSU5QUk9HUkVTUywgRVdPVUxEQkxPQ0ssIEVDT05OUkVTRVQsIEVJTlZBTCwgXAotICAgICBFTk9UQ09OTiwgRVNIVVRET1dOLCBFSU5UUiwgRUlTQ09OTiwgRUJBREYsIEVDT05OQUJPUlRFRCwgRVBJUEUsIFwKLSAgICAgRUFHQUlOLCBlcnJvcmNvZGUKKyAgICAgRU5PVENPTk4sIEVTSFVURE9XTiwgRUlOVFIsIEVJU0NPTk4sIEVCQURGLCBFQ09OTkFCT1JURUQsIEVQSVBFLCBFQUdBSU4sIFwKKyAgICAgZXJyb3Jjb2RlCiAKIF9ESVNDT05ORUNURUQgPSBmcm96ZW5zZXQoKEVDT05OUkVTRVQsIEVOT1RDT05OLCBFU0hVVERPV04sIEVDT05OQUJPUlRFRCwgRVBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFQkFERikpCkBAIC0yNzAsNiArMjcyLDggQEAKICAgICAgICAgICAgICAgICBzdGF0dXMuYXBwZW5kKHJlcHIoc2VsZi5hZGRyKSkKICAgICAgICAgcmV0dXJuICc8JXMgYXQgJSN4PicgJSAoJyAnLmpvaW4oc3RhdHVzKSwgaWQoc2VsZikpCiAKKyAgICBfX3N0cl9fID0gX19yZXByX18KKwogICAgIGRlZiBhZGRfY2hhbm5lbChzZWxmLCBtYXA9Tm9uZSk6CiAgICAgICAgICNzZWxmLmxvZ19pbmZvKCdhZGRpbmcgY2hhbm5lbCAlcycgJSBzZWxmKQogICAgICAgICBpZiBtYXAgaXMgTm9uZToKQEAgLTM2Nyw3ICszNzEsNyBAQAogICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdID09IEVXT1VMREJMT0NLOgogICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICBlbGlmIHdoeS5hcmdzWzBdIGluIChFQ09OTlJFU0VULCBFTk9UQ09OTiwgRVNIVVRET1dOLCBFQ09OTkFCT1JURUQpOgorICAgICAgICAgICAgZWxpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICAgICAgZWxzZToKQEAgLTM4NSw3ICszODksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgIyB3aW5zb2NrIHNvbWV0aW1lcyB0aHJvd3MgRU5PVENPTk4KLSAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIGluIFtFQ09OTlJFU0VULCBFTk9UQ09OTiwgRVNIVVRET1dOLCBFQ09OTkFCT1JURURdOgorICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogICAgICAgICAgICAgZWxzZToKQEAgLTQwNSwxMCArNDA5LDE1IEBACiAgICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCiAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnNvY2tldCwgYXR0cikKKyAgICAgICAgICAgIHJldGF0dHIgPSBnZXRhdHRyKHNlbGYuc29ja2V0LCBhdHRyKQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXMgaW5zdGFuY2UgaGFzIG5vIGF0dHJpYnV0ZSAnJXMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJShzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0cikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cgPSAiJShtZSlzLiUoYXR0cilzIGlzIGRlcHJlY2F0ZWQ7IHVzZSAlKG1lKXMuc29ja2V0LiUoYXR0cilzICIgXAorICAgICAgICAgICAgICAgICAgImluc3RlYWQiICUgeydtZScgOiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgJ2F0dHInIDogYXR0cn0KKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICAgICAgICAgIHJldHVybiByZXRhdHRyCiAKICAgICAjIGxvZyBhbmQgbG9nX2luZm8gbWF5IGJlIG92ZXJyaWRkZW4gdG8gcHJvdmlkZSBtb3JlIHNvcGhpc3RpY2F0ZWQKICAgICAjIGxvZ2dpbmcgYW5kIHdhcm5pbmcgbWV0aG9kcy4gSW4gZ2VuZXJhbCwgbG9nIGlzIGZvciAnaGl0JyBsb2dnaW5nCkBAIC01MDIsNyArNTExLDEzIEBACiAgICAgICAgIHNlbGYubG9nX2luZm8oJ3VuaGFuZGxlZCBjb25uZWN0IGV2ZW50JywgJ3dhcm5pbmcnKQogCiAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6Ci0gICAgICAgIHNlbGYubG9nX2luZm8oJ3VuaGFuZGxlZCBhY2NlcHQgZXZlbnQnLCAnd2FybmluZycpCisgICAgICAgIHBhaXIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgIGlmIHBhaXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmhhbmRsZV9hY2NlcHRlZCgqcGFpcikKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgc29jaywgYWRkcik6CisgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmxvZ19pbmZvKCd1bmhhbmRsZWQgYWNjZXB0ZWQgZXZlbnQnLCAnd2FybmluZycpCiAKICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmxvZ19pbmZvKCd1bmhhbmRsZWQgY2xvc2UgZXZlbnQnLCAnd2FybmluZycpCmRpZmYgLS1naXQgYS9MaWIvYmFzZTY0LnB5IGIvTGliL2Jhc2U2NC5weQppbmRleCBmOTNiM2E0Li44OTVkODEzIDEwMDc1NQotLS0gYS9MaWIvYmFzZTY0LnB5CisrKyBiL0xpYi9iYXNlNjQucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJSRkMgMzU0ODogQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCBEYXRhIEVuY29kaW5ncyIiIgogCkBAIC02NSwxNiArNjUsMTkgQEAKICAgICByZXR1cm4gZW5jb2RlZAogCiAKLWRlZiBiNjRkZWNvZGUocywgYWx0Y2hhcnM9Tm9uZSk6CitkZWYgYjY0ZGVjb2RlKHMsIGFsdGNoYXJzPU5vbmUsIHZhbGlkYXRlPUZhbHNlKToKICAgICAiIiJEZWNvZGUgYSBCYXNlNjQgZW5jb2RlZCBieXRlIHN0cmluZy4KIAogICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGRlY29kZS4gIE9wdGlvbmFsIGFsdGNoYXJzIG11c3QgYmUgYQogICAgIHN0cmluZyBvZiBsZW5ndGggMiB3aGljaCBzcGVjaWZpZXMgdGhlIGFsdGVybmF0aXZlIGFscGhhYmV0IHVzZWQKICAgICBpbnN0ZWFkIG9mIHRoZSAnKycgYW5kICcvJyBjaGFyYWN0ZXJzLgogCi0gICAgVGhlIGRlY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuICBiaW5hc2NpaS5FcnJvciBpcyByYWlzZWQgaWYKLSAgICBzIHdlcmUgaW5jb3JyZWN0bHkgcGFkZGVkIG9yIGlmIHRoZXJlIGFyZSBub24tYWxwaGFiZXQgY2hhcmFjdGVycwotICAgIHByZXNlbnQgaW4gdGhlIHN0cmluZy4KKyAgICBUaGUgZGVjb2RlZCBzdHJpbmcgaXMgcmV0dXJuZWQuICBBIGJpbmFzY2lpLkVycm9yIGlzIHJhaXNlZCBpZiBzIGlzCisgICAgaW5jb3JyZWN0bHkgcGFkZGVkLgorCisgICAgSWYgdmFsaWRhdGUgaXMgRmFsc2UgKHRoZSBkZWZhdWx0KSwgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGFyZQorICAgIGRpc2NhcmRlZCBwcmlvciB0byB0aGUgcGFkZGluZyBjaGVjay4gIElmIHZhbGlkYXRlIGlzIFRydWUsCisgICAgbm9uLWJhc2U2NC1hbHBoYWJldCBjaGFyYWN0ZXJzIGluIHRoZSBpbnB1dCByZXN1bHQgaW4gYSBiaW5hc2NpaS5FcnJvci4KICAgICAiIiIKICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKQEAgLTg0LDYgKzg3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGFsdGNoYXJzLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgYXNzZXJ0IGxlbihhbHRjaGFycykgPT0gMiwgcmVwcihhbHRjaGFycykKICAgICAgICAgcyA9IF90cmFuc2xhdGUocywge2NocihhbHRjaGFyc1swXSk6IGInKycsIGNocihhbHRjaGFyc1sxXSk6IGInLyd9KQorICAgIGlmIHZhbGlkYXRlIGFuZCBub3QgcmUubWF0Y2goYideW0EtWmEtejAtOSsvXSo9ezAsMn0kJywgcyk6CisgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTY0IGRpZ2l0IGZvdW5kJykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiAKQEAgLTI0MSw3ICsyNDYsNyBAQAogICAgICAgICBhY2MgKz0gX2IzMnJldltjXSA8PCBzaGlmdAogICAgICAgICBzaGlmdCAtPSA1CiAgICAgICAgIGlmIHNoaWZ0IDwgMDoKLSAgICAgICAgICAgIHBhcnRzLmFwcGVuZChiaW5hc2NpaS51bmhleGxpZnkoJyUwMTB4JyAlIGFjYykpCisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKSkKICAgICAgICAgICAgIGFjYyA9IDAKICAgICAgICAgICAgIHNoaWZ0ID0gMzUKICAgICAjIFByb2Nlc3MgdGhlIGxhc3QsIHBhcnRpYWwgcXVhbnRhCmRpZmYgLS1naXQgYS9MaWIvYmRiLnB5IGIvTGliL2JkYi5weQppbmRleCAzZWQyNWZlLi5mNzExMDA0IDEwMDY0NAotLS0gYS9MaWIvYmRiLnB5CisrKyBiL0xpYi9iZGIucHkKQEAgLTMsMTYgKzMsMTQgQEAKIGltcG9ydCBmbm1hdGNoCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCB0eXBlcwogCi1fX2FsbF9fID0gWyJCZGJRdWl0IiwiQmRiIiwiQnJlYWtwb2ludCJdCitfX2FsbF9fID0gWyJCZGJRdWl0IiwgIkJkYiIsICJCcmVha3BvaW50Il0KIAogY2xhc3MgQmRiUXVpdChFeGNlcHRpb24pOgotICAgICIiIkV4Y2VwdGlvbiB0byBnaXZlIHVwIGNvbXBsZXRlbHkiIiIKKyAgICAiIiJFeGNlcHRpb24gdG8gZ2l2ZSB1cCBjb21wbGV0ZWx5LiIiIgogCiAKIGNsYXNzIEJkYjoKLQogICAgICIiIkdlbmVyaWMgUHl0aG9uIGRlYnVnZ2VyIGJhc2UgY2xhc3MuCiAKICAgICBUaGlzIGNsYXNzIHRha2VzIGNhcmUgb2YgZGV0YWlscyBvZiB0aGUgdHJhY2UgZmFjaWxpdHk7CkBAIC0xMjAsMTQgKzExOCwxNCBAQAogCiAgICAgZGVmIGJyZWFrX2hlcmUoc2VsZiwgZnJhbWUpOgogICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fub25pYyhmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUpCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZSBpbiBzZWxmLmJyZWFrczoKKyAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHNlbGYuYnJlYWtzOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGxpbmVubyA9IGZyYW1lLmZfbGluZW5vCi0gICAgICAgIGlmIG5vdCBsaW5lbm8gaW4gc2VsZi5icmVha3NbZmlsZW5hbWVdOgorICAgICAgICBpZiBsaW5lbm8gbm90IGluIHNlbGYuYnJlYWtzW2ZpbGVuYW1lXToKICAgICAgICAgICAgICMgVGhlIGxpbmUgaXRzZWxmIGhhcyBubyBicmVha3BvaW50LCBidXQgbWF5YmUgdGhlIGxpbmUgaXMgdGhlCiAgICAgICAgICAgICAjIGZpcnN0IGxpbmUgb2YgYSBmdW5jdGlvbiB3aXRoIGJyZWFrcG9pbnQgc2V0IGJ5IGZ1bmN0aW9uIG5hbWUuCiAgICAgICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2NvZGUuY29fZmlyc3RsaW5lbm8KLSAgICAgICAgICAgIGlmIG5vdCBsaW5lbm8gaW4gc2VsZi5icmVha3NbZmlsZW5hbWVdOgorICAgICAgICAgICAgaWYgbGluZW5vIG5vdCBpbiBzZWxmLmJyZWFrc1tmaWxlbmFtZV06CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgIyBmbGFnIHNheXMgb2sgdG8gZGVsZXRlIHRlbXAuIGJwCkBAIC0xNzAsNyArMTY4LDcgQEAKICAgICBkZWYgX3NldF9zdG9waW5mbyhzZWxmLCBzdG9wZnJhbWUsIHJldHVybmZyYW1lLCBzdG9wbGluZW5vPTApOgogICAgICAgICBzZWxmLnN0b3BmcmFtZSA9IHN0b3BmcmFtZQogICAgICAgICBzZWxmLnJldHVybmZyYW1lID0gcmV0dXJuZnJhbWUKLSAgICAgICAgc2VsZi5xdWl0dGluZyA9IDAKKyAgICAgICAgc2VsZi5xdWl0dGluZyA9IEZhbHNlCiAgICAgICAgICMgc3RvcGxpbmVubyA+PSAwIG1lYW5zOiBzdG9wIGF0IGxpbmUgPj0gdGhlIHN0b3BsaW5lbm8KICAgICAgICAgIyBzdG9wbGluZW5vIC0xIG1lYW5zOiBkb24ndCBzdG9wIGF0IGFsbAogICAgICAgICBzZWxmLnN0b3BsaW5lbm8gPSBzdG9wbGluZW5vCkBAIC0xNzgsMTAgKzE3NiwxMyBAQAogICAgICMgRGVyaXZlZCBjbGFzc2VzIGFuZCBjbGllbnRzIGNhbiBjYWxsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcwogICAgICMgdG8gYWZmZWN0IHRoZSBzdGVwcGluZyBzdGF0ZS4KIAotICAgIGRlZiBzZXRfdW50aWwoc2VsZiwgZnJhbWUpOiAjdGhlIG5hbWUgInVudGlsIiBpcyBib3Jyb3dlZCBmcm9tIGdkYgorICAgIGRlZiBzZXRfdW50aWwoc2VsZiwgZnJhbWUsIGxpbmVubz1Ob25lKToKICAgICAgICAgIiIiU3RvcCB3aGVuIHRoZSBsaW5lIHdpdGggdGhlIGxpbmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcwogICAgICAgICByZWFjaGVkIG9yIHdoZW4gcmV0dXJuaW5nIGZyb20gY3VycmVudCBmcmFtZSIiIgotICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUsIGZyYW1lLCBmcmFtZS5mX2xpbmVubysxKQorICAgICAgICAjIHRoZSBuYW1lICJ1bnRpbCIgaXMgYm9ycm93ZWQgZnJvbSBnZGIKKyAgICAgICAgaWYgbGluZW5vIGlzIE5vbmU6CisgICAgICAgICAgICBsaW5lbm8gPSBmcmFtZS5mX2xpbmVubyArIDEKKyAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLCBmcmFtZSwgbGluZW5vKQogCiAgICAgZGVmIHNldF9zdGVwKHNlbGYpOgogICAgICAgICAiIiJTdG9wIGFmdGVyIG9uZSBsaW5lIG9mIGNvZGUuIiIiCkBAIC0yMjQsNyArMjI1LDcgQEAKICAgICBkZWYgc2V0X3F1aXQoc2VsZik6CiAgICAgICAgIHNlbGYuc3RvcGZyYW1lID0gc2VsZi5ib3RmcmFtZQogICAgICAgICBzZWxmLnJldHVybmZyYW1lID0gTm9uZQotICAgICAgICBzZWxmLnF1aXR0aW5nID0gMQorICAgICAgICBzZWxmLnF1aXR0aW5nID0gVHJ1ZQogICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKIAogICAgICMgRGVyaXZlZCBjbGFzc2VzIGFuZCBjbGllbnRzIGNhbiBjYWxsIHRoZSBmb2xsb3dpbmcgbWV0aG9kcwpAQCAtMjM0LDE4ICsyMzUsMTUgQEAKICAgICAjIENhbGwgc2VsZi5nZXRfKmJyZWFrKigpIHRvIHNlZSB0aGUgYnJlYWtwb2ludHMgb3IgYmV0dGVyCiAgICAgIyBmb3IgYnAgaW4gQnJlYWtwb2ludC5icGJ5bnVtYmVyOiBpZiBicDogYnAuYnBwcmludCgpLgogCi0gICAgZGVmIHNldF9icmVhayhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB0ZW1wb3Jhcnk9MCwgY29uZCA9IE5vbmUsCisgICAgZGVmIHNldF9icmVhayhzZWxmLCBmaWxlbmFtZSwgbGluZW5vLCB0ZW1wb3Jhcnk9RmFsc2UsIGNvbmQ9Tm9uZSwKICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lPU5vbmUpOgogICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fub25pYyhmaWxlbmFtZSkKICAgICAgICAgaW1wb3J0IGxpbmVjYWNoZSAjIEltcG9ydCBhcyBsYXRlIGFzIHBvc3NpYmxlCiAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKQogICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgIHJldHVybiAnTGluZSAlczolZCBkb2VzIG5vdCBleGlzdCcgJSAoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubykKLSAgICAgICAgaWYgbm90IGZpbGVuYW1lIGluIHNlbGYuYnJlYWtzOgotICAgICAgICAgICAgc2VsZi5icmVha3NbZmlsZW5hbWVdID0gW10KLSAgICAgICAgbGlzdCA9IHNlbGYuYnJlYWtzW2ZpbGVuYW1lXQotICAgICAgICBpZiBub3QgbGluZW5vIGluIGxpc3Q6CisgICAgICAgICAgICByZXR1cm4gJ0xpbmUgJXM6JWQgZG9lcyBub3QgZXhpc3QnICUgKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIGxpc3QgPSBzZWxmLmJyZWFrcy5zZXRkZWZhdWx0KGZpbGVuYW1lLCBbXSkKKyAgICAgICAgaWYgbGluZW5vIG5vdCBpbiBsaXN0OgogICAgICAgICAgICAgbGlzdC5hcHBlbmQobGluZW5vKQogICAgICAgICBicCA9IEJyZWFrcG9pbnQoZmlsZW5hbWUsIGxpbmVubywgdGVtcG9yYXJ5LCBjb25kLCBmdW5jbmFtZSkKIApAQCAtMjU3LDExICsyNTUsMTAgQEAKIAogICAgIGRlZiBjbGVhcl9icmVhayhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZSBpbiBzZWxmLmJyZWFrczoKKyAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHNlbGYuYnJlYWtzOgogICAgICAgICAgICAgcmV0dXJuICdUaGVyZSBhcmUgbm8gYnJlYWtwb2ludHMgaW4gJXMnICUgZmlsZW5hbWUKICAgICAgICAgaWYgbGluZW5vIG5vdCBpbiBzZWxmLmJyZWFrc1tmaWxlbmFtZV06Ci0gICAgICAgICAgICByZXR1cm4gJ1RoZXJlIGlzIG5vIGJyZWFrcG9pbnQgYXQgJXM6JWQnICUgKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vKQorICAgICAgICAgICAgcmV0dXJuICdUaGVyZSBpcyBubyBicmVha3BvaW50IGF0ICVzOiVkJyAlIChmaWxlbmFtZSwgbGluZW5vKQogICAgICAgICAjIElmIHRoZXJlJ3Mgb25seSBvbmUgYnAgaW4gdGhlIGxpc3QgZm9yIHRoYXQgZmlsZSxsaW5lCiAgICAgICAgICMgcGFpciwgdGhlbiByZW1vdmUgdGhlIGJyZWFrcyBlbnRyeQogICAgICAgICBmb3IgYnAgaW4gQnJlYWtwb2ludC5icGxpc3RbZmlsZW5hbWUsIGxpbmVub11bOl06CkBAIC0yNzAsMjEgKzI2NywxNSBAQAogCiAgICAgZGVmIGNsZWFyX2JwYnludW1iZXIoc2VsZiwgYXJnKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbnVtYmVyID0gaW50KGFyZykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcmV0dXJuICdOb24tbnVtZXJpYyBicmVha3BvaW50IG51bWJlciAoJXMpJyAlIGFyZwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBicCA9IEJyZWFrcG9pbnQuYnBieW51bWJlcltudW1iZXJdCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmV0dXJuICdCcmVha3BvaW50IG51bWJlciAoJWQpIG91dCBvZiByYW5nZScgJSBudW1iZXIKLSAgICAgICAgaWYgbm90IGJwOgotICAgICAgICAgICAgcmV0dXJuICdCcmVha3BvaW50ICglZCkgYWxyZWFkeSBkZWxldGVkJyAlIG51bWJlcgorICAgICAgICAgICAgYnAgPSBzZWxmLmdldF9icGJ5bnVtYmVyKGFyZykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcmV0dXJuIHN0cihlcnIpCiAgICAgICAgIGJwLmRlbGV0ZU1lKCkKICAgICAgICAgc2VsZi5fcHJ1bmVfYnJlYWtzKGJwLmZpbGUsIGJwLmxpbmUpCiAKICAgICBkZWYgY2xlYXJfYWxsX2ZpbGVfYnJlYWtzKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZSBpbiBzZWxmLmJyZWFrczoKKyAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIHNlbGYuYnJlYWtzOgogICAgICAgICAgICAgcmV0dXJuICdUaGVyZSBhcmUgbm8gYnJlYWtwb2ludHMgaW4gJXMnICUgZmlsZW5hbWUKICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5icmVha3NbZmlsZW5hbWVdOgogICAgICAgICAgICAgYmxpc3QgPSBCcmVha3BvaW50LmJwbGlzdFtmaWxlbmFtZSwgbGluZV0KQEAgLTMwMCw2ICsyOTEsMjEgQEAKICAgICAgICAgICAgICAgICBicC5kZWxldGVNZSgpCiAgICAgICAgIHNlbGYuYnJlYWtzID0ge30KIAorICAgIGRlZiBnZXRfYnBieW51bWJlcihzZWxmLCBhcmcpOgorICAgICAgICBpZiBub3QgYXJnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQnJlYWtwb2ludCBudW1iZXIgZXhwZWN0ZWQnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBudW1iZXIgPSBpbnQoYXJnKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vbi1udW1lcmljIGJyZWFrcG9pbnQgbnVtYmVyICVzJyAlIGFyZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnAgPSBCcmVha3BvaW50LmJwYnludW1iZXJbbnVtYmVyXQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JyZWFrcG9pbnQgbnVtYmVyICVkIG91dCBvZiByYW5nZScgJSBudW1iZXIpCisgICAgICAgIGlmIGJwIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdCcmVha3BvaW50ICVkIGFscmVhZHkgZGVsZXRlZCcgJSBudW1iZXIpCisgICAgICAgIHJldHVybiBicAorCiAgICAgZGVmIGdldF9icmVhayhzZWxmLCBmaWxlbmFtZSwgbGluZW5vKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCiAgICAgICAgIHJldHVybiBmaWxlbmFtZSBpbiBzZWxmLmJyZWFrcyBhbmQgXApAQCAtMzQyLDM1ICszNDgsMzUgQEAKICAgICAgICAgICAgIGkgPSBtYXgoMCwgbGVuKHN0YWNrKSAtIDEpCiAgICAgICAgIHJldHVybiBzdGFjaywgaQogCi0gICAgIwotCiAgICAgZGVmIGZvcm1hdF9zdGFja19lbnRyeShzZWxmLCBmcmFtZV9saW5lbm8sIGxwcmVmaXg9JzogJyk6CiAgICAgICAgIGltcG9ydCBsaW5lY2FjaGUsIHJlcHJsaWIKICAgICAgICAgZnJhbWUsIGxpbmVubyA9IGZyYW1lX2xpbmVubwogICAgICAgICBmaWxlbmFtZSA9IHNlbGYuY2Fub25pYyhmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUpCiAgICAgICAgIHMgPSAnJXMoJXIpJyAlIChmaWxlbmFtZSwgbGluZW5vKQogICAgICAgICBpZiBmcmFtZS5mX2NvZGUuY29fbmFtZToKLSAgICAgICAgICAgIHMgPSBzICsgZnJhbWUuZl9jb2RlLmNvX25hbWUKKyAgICAgICAgICAgIHMgKz0gZnJhbWUuZl9jb2RlLmNvX25hbWUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHMgPSBzICsgIjxsYW1iZGE+IgorICAgICAgICAgICAgcyArPSAiPGxhbWJkYT4iCiAgICAgICAgIGlmICdfX2FyZ3NfXycgaW4gZnJhbWUuZl9sb2NhbHM6CiAgICAgICAgICAgICBhcmdzID0gZnJhbWUuZl9sb2NhbHNbJ19fYXJnc19fJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFyZ3MgPSBOb25lCiAgICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICBzID0gcyArIHJlcHJsaWIucmVwcihhcmdzKQorICAgICAgICAgICAgcyArPSByZXBybGliLnJlcHIoYXJncykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHMgPSBzICsgJygpJworICAgICAgICAgICAgcyArPSAnKCknCiAgICAgICAgIGlmICdfX3JldHVybl9fJyBpbiBmcmFtZS5mX2xvY2FsczoKICAgICAgICAgICAgIHJ2ID0gZnJhbWUuZl9sb2NhbHNbJ19fcmV0dXJuX18nXQotICAgICAgICAgICAgcyA9IHMgKyAnLT4nCi0gICAgICAgICAgICBzID0gcyArIHJlcHJsaWIucmVwcihydikKKyAgICAgICAgICAgIHMgKz0gJy0+JworICAgICAgICAgICAgcyArPSByZXBybGliLnJlcHIocnYpCiAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmcmFtZS5mX2dsb2JhbHMpCi0gICAgICAgIGlmIGxpbmU6IHMgPSBzICsgbHByZWZpeCArIGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgcyArPSBscHJlZml4ICsgbGluZS5zdHJpcCgpCiAgICAgICAgIHJldHVybiBzCiAKLSAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIG1ldGhvZHMgY2FuIGJlIGNhbGxlZCBieSBjbGllbnRzIHRvIHVzZQotICAgICMgYSBkZWJ1Z2dlciB0byBkZWJ1ZyBhIHN0YXRlbWVudCwgZ2l2ZW4gYXMgYSBzdHJpbmcuCisgICAgIyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGNhbGxlZCBieSBjbGllbnRzIHRvIHVzZQorICAgICMgYSBkZWJ1Z2dlciB0byBkZWJ1ZyBhIHN0YXRlbWVudCBvciBhbiBleHByZXNzaW9uLgorICAgICMgQm90aCBjYW4gYmUgZ2l2ZW4gYXMgYSBzdHJpbmcsIG9yIGEgY29kZSBvYmplY3QuCiAKICAgICBkZWYgcnVuKHNlbGYsIGNtZCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSk6CiAgICAgICAgIGlmIGdsb2JhbHMgaXMgTm9uZToKQEAgLTM3OSwxNSArMzg1LDE1IEBACiAgICAgICAgIGlmIGxvY2FscyBpcyBOb25lOgogICAgICAgICAgICAgbG9jYWxzID0gZ2xvYmFscwogICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjbWQsIHN0cik6CisgICAgICAgICAgICBjbWQgPSBjb21waWxlKGNtZCwgIjxzdHJpbmc+IiwgImV4ZWMiKQogICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi50cmFjZV9kaXNwYXRjaCkKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY21kLCB0eXBlcy5Db2RlVHlwZSk6Ci0gICAgICAgICAgICBjbWQgPSBjbWQrJ1xuJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBleGVjKGNtZCwgZ2xvYmFscywgbG9jYWxzKQogICAgICAgICBleGNlcHQgQmRiUXVpdDoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYucXVpdHRpbmcgPSAxCisgICAgICAgICAgICBzZWxmLnF1aXR0aW5nID0gVHJ1ZQogICAgICAgICAgICAgc3lzLnNldHRyYWNlKE5vbmUpCiAKICAgICBkZWYgcnVuZXZhbChzZWxmLCBleHByLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKToKQEAgLTM5OCwxNCArNDA0LDEyIEBACiAgICAgICAgICAgICBsb2NhbHMgPSBnbG9iYWxzCiAgICAgICAgIHNlbGYucmVzZXQoKQogICAgICAgICBzeXMuc2V0dHJhY2Uoc2VsZi50cmFjZV9kaXNwYXRjaCkKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhwciwgdHlwZXMuQ29kZVR5cGUpOgotICAgICAgICAgICAgZXhwciA9IGV4cHIrJ1xuJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gZXZhbChleHByLCBnbG9iYWxzLCBsb2NhbHMpCiAgICAgICAgIGV4Y2VwdCBCZGJRdWl0OgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5xdWl0dGluZyA9IDEKKyAgICAgICAgICAgIHNlbGYucXVpdHRpbmcgPSBUcnVlCiAgICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKIAogICAgIGRlZiBydW5jdHgoc2VsZiwgY21kLCBnbG9iYWxzLCBsb2NhbHMpOgpAQCAtNDIzLDcgKzQyNyw3IEBACiAgICAgICAgIGV4Y2VwdCBCZGJRdWl0OgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5xdWl0dGluZyA9IDEKKyAgICAgICAgICAgIHNlbGYucXVpdHRpbmcgPSBUcnVlCiAgICAgICAgICAgICBzeXMuc2V0dHJhY2UoTm9uZSkKICAgICAgICAgcmV0dXJuIHJlcwogCkBAIC00MzMsOCArNDM3LDcgQEAKIAogCiBjbGFzcyBCcmVha3BvaW50OgotCi0gICAgIiIiQnJlYWtwb2ludCBjbGFzcworICAgICIiIkJyZWFrcG9pbnQgY2xhc3MuCiAKICAgICBJbXBsZW1lbnRzIHRlbXBvcmFyeSBicmVha3BvaW50cywgaWdub3JlIGNvdW50cywgZGlzYWJsaW5nIGFuZAogICAgIChyZSktZW5hYmxpbmcsIGFuZCBjb25kaXRpb25hbHMuCkBAIC00NTYsNyArNDU5LDcgQEAKICAgICAgICAgICAgICAgICAjIGluZGV4IDAgaXMgdW51c2VkLCBleGNlcHQgZm9yIG1hcmtpbmcgYW4KICAgICAgICAgICAgICAgICAjIGVmZmVjdGl2ZSBicmVhayAuLi4uIHNlZSBlZmZlY3RpdmUoKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGxpbmUsIHRlbXBvcmFyeT0wLCBjb25kPU5vbmUsIGZ1bmNuYW1lPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBsaW5lLCB0ZW1wb3Jhcnk9RmFsc2UsIGNvbmQ9Tm9uZSwgZnVuY25hbWU9Tm9uZSk6CiAgICAgICAgIHNlbGYuZnVuY25hbWUgPSBmdW5jbmFtZQogICAgICAgICAjIE5lZWRlZCBpZiBmdW5jbmFtZSBpcyBub3QgTm9uZS4KICAgICAgICAgc2VsZi5mdW5jX2ZpcnN0X2V4ZWN1dGFibGVfbGluZSA9IE5vbmUKQEAgLTQ2NCwxMSArNDY3LDExIEBACiAgICAgICAgIHNlbGYubGluZSA9IGxpbmUKICAgICAgICAgc2VsZi50ZW1wb3JhcnkgPSB0ZW1wb3JhcnkKICAgICAgICAgc2VsZi5jb25kID0gY29uZAotICAgICAgICBzZWxmLmVuYWJsZWQgPSAxCisgICAgICAgIHNlbGYuZW5hYmxlZCA9IFRydWUKICAgICAgICAgc2VsZi5pZ25vcmUgPSAwCiAgICAgICAgIHNlbGYuaGl0cyA9IDAKICAgICAgICAgc2VsZi5udW1iZXIgPSBCcmVha3BvaW50Lm5leHQKLSAgICAgICAgQnJlYWtwb2ludC5uZXh0ID0gQnJlYWtwb2ludC5uZXh0ICsgMQorICAgICAgICBCcmVha3BvaW50Lm5leHQgKz0gMQogICAgICAgICAjIEJ1aWxkIHRoZSB0d28gbGlzdHMKICAgICAgICAgc2VsZi5icGJ5bnVtYmVyLmFwcGVuZChzZWxmKQogICAgICAgICBpZiAoZmlsZSwgbGluZSkgaW4gc2VsZi5icGxpc3Q6CkBAIC00NzYsNyArNDc5LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYnBsaXN0W2ZpbGUsIGxpbmVdID0gW3NlbGZdCiAKLQogICAgIGRlZiBkZWxldGVNZShzZWxmKToKICAgICAgICAgaW5kZXggPSAoc2VsZi5maWxlLCBzZWxmLmxpbmUpCiAgICAgICAgIHNlbGYuYnBieW51bWJlcltzZWxmLm51bWJlcl0gPSBOb25lICAgIyBObyBsb25nZXIgaW4gbGlzdApAQCAtNDg2LDE0ICs0ODgsMTcgQEAKICAgICAgICAgICAgIGRlbCBzZWxmLmJwbGlzdFtpbmRleF0KIAogICAgIGRlZiBlbmFibGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZW5hYmxlZCA9IDEKKyAgICAgICAgc2VsZi5lbmFibGVkID0gVHJ1ZQogCiAgICAgZGVmIGRpc2FibGUoc2VsZik6Ci0gICAgICAgIHNlbGYuZW5hYmxlZCA9IDAKKyAgICAgICAgc2VsZi5lbmFibGVkID0gRmFsc2UKIAogICAgIGRlZiBicHByaW50KHNlbGYsIG91dD1Ob25lKToKICAgICAgICAgaWYgb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICBvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHByaW50KHNlbGYuYnBmb3JtYXQoKSwgZmlsZT1vdXQpCisKKyAgICBkZWYgYnBmb3JtYXQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYudGVtcG9yYXJ5OgogICAgICAgICAgICAgZGlzcCA9ICdkZWwgICcKICAgICAgICAgZWxzZToKQEAgLTUwMiwxNyArNTA3LDIyIEBACiAgICAgICAgICAgICBkaXNwID0gZGlzcCArICd5ZXMgICcKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRpc3AgPSBkaXNwICsgJ25vICAgJwotICAgICAgICBwcmludCgnJS00ZGJyZWFrcG9pbnQgICAlcyBhdCAlczolZCcgJSAoc2VsZi5udW1iZXIsIGRpc3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLCBzZWxmLmxpbmUpLCBmaWxlPW91dCkKKyAgICAgICAgcmV0ID0gJyUtNGRicmVha3BvaW50ICAgJXMgYXQgJXM6JWQnICUgKHNlbGYubnVtYmVyLCBkaXNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLCBzZWxmLmxpbmUpCiAgICAgICAgIGlmIHNlbGYuY29uZDoKLSAgICAgICAgICAgIHByaW50KCdcdHN0b3Agb25seSBpZiAlcycgJSAoc2VsZi5jb25kLCksIGZpbGU9b3V0KQorICAgICAgICAgICAgcmV0ICs9ICdcblx0c3RvcCBvbmx5IGlmICVzJyAlIChzZWxmLmNvbmQsKQogICAgICAgICBpZiBzZWxmLmlnbm9yZToKLSAgICAgICAgICAgIHByaW50KCdcdGlnbm9yZSBuZXh0ICVkIGhpdHMnICUgKHNlbGYuaWdub3JlKSwgZmlsZT1vdXQpCi0gICAgICAgIGlmIChzZWxmLmhpdHMpOgotICAgICAgICAgICAgaWYgKHNlbGYuaGl0cyA+IDEpOiBzcyA9ICdzJwotICAgICAgICAgICAgZWxzZTogc3MgPSAnJwotICAgICAgICAgICAgcHJpbnQoKCdcdGJyZWFrcG9pbnQgYWxyZWFkeSBoaXQgJWQgdGltZSVzJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLmhpdHMsIHNzKSksIGZpbGU9b3V0KQorICAgICAgICAgICAgcmV0ICs9ICdcblx0aWdub3JlIG5leHQgJWQgaGl0cycgJSAoc2VsZi5pZ25vcmUsKQorICAgICAgICBpZiBzZWxmLmhpdHM6CisgICAgICAgICAgICBpZiBzZWxmLmhpdHMgPiAxOgorICAgICAgICAgICAgICAgIHNzID0gJ3MnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzID0gJycKKyAgICAgICAgICAgIHJldCArPSAnXG5cdGJyZWFrcG9pbnQgYWxyZWFkeSBoaXQgJWQgdGltZSVzJyAlIChzZWxmLmhpdHMsIHNzKQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdicmVha3BvaW50ICVzIGF0ICVzOiVzJyAlIChzZWxmLm51bWJlciwgc2VsZi5maWxlLCBzZWxmLmxpbmUpCiAKICMgLS0tLS0tLS0tLS1lbmQgb2YgQnJlYWtwb2ludCBjbGFzcy0tLS0tLS0tLS0KIApAQCAtNTUyLDQ5ICs1NjIsNDQgQEAKICAgICB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBvayB0byBkZWxldGUgYSB0ZW1wb3JhcnkgYnAuCiAKICAgICAiIiIKLSAgICBwb3NzaWJsZXMgPSBCcmVha3BvaW50LmJwbGlzdFtmaWxlLGxpbmVdCi0gICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHBvc3NpYmxlcykpOgotICAgICAgICBiID0gcG9zc2libGVzW2ldCi0gICAgICAgIGlmIGIuZW5hYmxlZCA9PSAwOgorICAgIHBvc3NpYmxlcyA9IEJyZWFrcG9pbnQuYnBsaXN0W2ZpbGUsIGxpbmVdCisgICAgZm9yIGIgaW4gcG9zc2libGVzOgorICAgICAgICBpZiBub3QgYi5lbmFibGVkOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IGNoZWNrZnVuY25hbWUoYiwgZnJhbWUpOgogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgIyBDb3VudCBldmVyeSBoaXQgd2hlbiBicCBpcyBlbmFibGVkCi0gICAgICAgIGIuaGl0cyA9IGIuaGl0cyArIDEKKyAgICAgICAgYi5oaXRzICs9IDEKICAgICAgICAgaWYgbm90IGIuY29uZDoKLSAgICAgICAgICAgICMgSWYgdW5jb25kaXRpb25hbCwgYW5kIGlnbm9yaW5nLAotICAgICAgICAgICAgIyBnbyBvbiB0byBuZXh0LCBlbHNlIGJyZWFrCisgICAgICAgICAgICAjIElmIHVuY29uZGl0aW9uYWwsIGFuZCBpZ25vcmluZyBnbyBvbiB0byBuZXh0LCBlbHNlIGJyZWFrCiAgICAgICAgICAgICBpZiBiLmlnbm9yZSA+IDA6Ci0gICAgICAgICAgICAgICAgYi5pZ25vcmUgPSBiLmlnbm9yZSAtMQorICAgICAgICAgICAgICAgIGIuaWdub3JlIC09IDEKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIGJyZWFrcG9pbnQgYW5kIG1hcmtlciB0aGF0J3Mgb2sKLSAgICAgICAgICAgICAgICAjIHRvIGRlbGV0ZSBpZiB0ZW1wb3JhcnkKLSAgICAgICAgICAgICAgICByZXR1cm4gKGIsMSkKKyAgICAgICAgICAgICAgICAjIGJyZWFrcG9pbnQgYW5kIG1hcmtlciB0aGF0IGl0J3Mgb2sgdG8gZGVsZXRlIGlmIHRlbXBvcmFyeQorICAgICAgICAgICAgICAgIHJldHVybiAoYiwgVHJ1ZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ29uZGl0aW9uYWwgYnAuCiAgICAgICAgICAgICAjIElnbm9yZSBjb3VudCBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgYnB0IGhpdHMgd2hlcmUgdGhlCiAgICAgICAgICAgICAjIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS4KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWwgPSBldmFsKGIuY29uZCwgZnJhbWUuZl9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mX2xvY2FscykKKyAgICAgICAgICAgICAgICB2YWwgPSBldmFsKGIuY29uZCwgZnJhbWUuZl9nbG9iYWxzLCBmcmFtZS5mX2xvY2FscykKICAgICAgICAgICAgICAgICBpZiB2YWw6CiAgICAgICAgICAgICAgICAgICAgIGlmIGIuaWdub3JlID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGIuaWdub3JlID0gYi5pZ25vcmUgLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIGIuaWdub3JlIC09IDEKICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYiwxKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChiLCBUcnVlKQogICAgICAgICAgICAgICAgICMgZWxzZToKICAgICAgICAgICAgICAgICAjICAgY29udGludWUKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIGlmIGV2YWwgZmFpbHMsIG1vc3QgY29uc2VydmF0aXZlCi0gICAgICAgICAgICAgICAgIyB0aGluZyBpcyB0byBzdG9wIG9uIGJyZWFrcG9pbnQKLSAgICAgICAgICAgICAgICAjIHJlZ2FyZGxlc3Mgb2YgaWdub3JlIGNvdW50LgotICAgICAgICAgICAgICAgICMgRG9uJ3QgZGVsZXRlIHRlbXBvcmFyeSwKLSAgICAgICAgICAgICAgICAjIGFzIGFub3RoZXIgaGludCB0byB1c2VyLgotICAgICAgICAgICAgICAgIHJldHVybiAoYiwwKQorICAgICAgICAgICAgICAgICMgaWYgZXZhbCBmYWlscywgbW9zdCBjb25zZXJ2YXRpdmUgdGhpbmcgaXMgdG8gc3RvcCBvbgorICAgICAgICAgICAgICAgICMgYnJlYWtwb2ludCByZWdhcmRsZXNzIG9mIGlnbm9yZSBjb3VudC4gIERvbid0IGRlbGV0ZQorICAgICAgICAgICAgICAgICMgdGVtcG9yYXJ5LCBhcyBhbm90aGVyIGhpbnQgdG8gdXNlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gKGIsIEZhbHNlKQogICAgIHJldHVybiAoTm9uZSwgTm9uZSkKIAorCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHRlc3RpbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogY2xhc3MgVGRiKEJkYik6CkBAIC02MjcsNSArNjMyLDMgQEAKIGRlZiB0ZXN0KCk6CiAgICAgdCA9IFRkYigpCiAgICAgdC5ydW4oJ2ltcG9ydCBiZGI7IGJkYi5mb28oMTApJykKLQotIyBlbmQKZGlmZiAtLWdpdCBhL0xpYi9iaW5oZXgucHkgYi9MaWIvYmluaGV4LnB5CmluZGV4IDRiNzk5N2EuLjk5OWE2NzUgMTAwNjQ0Ci0tLSBhL0xpYi9iaW5oZXgucHkKKysrIGIvTGliL2JpbmhleC5weQpAQCAtNTIsMTQgKzUyLDEzIEBACiAKIGRlZiBnZXRmaWxlaW5mbyhuYW1lKToKICAgICBmaW5mbyA9IEZJbmZvKCkKLSAgICBmcCA9IGlvLm9wZW4obmFtZSwgJ3JiJykKLSAgICAjIFF1aWNrIGNoZWNrIGZvciB0ZXh0ZmlsZQotICAgIGRhdGEgPSBmcC5yZWFkKDUxMikKLSAgICBpZiAwIG5vdCBpbiBkYXRhOgotICAgICAgICBmaW5mby5UeXBlID0gJ1RFWFQnCi0gICAgZnAuc2VlaygwLCAyKQotICAgIGRzaXplID0gZnAudGVsbCgpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggaW8ub3BlbihuYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgIyBRdWljayBjaGVjayBmb3IgdGV4dGZpbGUKKyAgICAgICAgZGF0YSA9IGZwLnJlYWQoNTEyKQorICAgICAgICBpZiAwIG5vdCBpbiBkYXRhOgorICAgICAgICAgICAgZmluZm8uVHlwZSA9ICdURVhUJworICAgICAgICBmcC5zZWVrKDAsIDIpCisgICAgICAgIGRzaXplID0gZnAudGVsbCgpCiAgICAgZGlyLCBmaWxlID0gb3MucGF0aC5zcGxpdChuYW1lKQogICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoJzonLCAnLScsIDEpCiAgICAgcmV0dXJuIGZpbGUsIGZpbmZvLCBkc2l6ZSwgMApAQCAtMTQwLDE5ICsxMzksMjYgQEAKIGNsYXNzIEJpbkhleDoKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZV9maW5mb19kbGVuX3JsZW4sIG9mcCk6CiAgICAgICAgIG5hbWUsIGZpbmZvLCBkbGVuLCBybGVuID0gbmFtZV9maW5mb19kbGVuX3JsZW4KKyAgICAgICAgY2xvc2Vfb25fZXJyb3IgPSBGYWxzZQogICAgICAgICBpZiBpc2luc3RhbmNlKG9mcCwgc3RyKToKICAgICAgICAgICAgIG9mbmFtZSA9IG9mcAogICAgICAgICAgICAgb2ZwID0gaW8ub3BlbihvZm5hbWUsICd3YicpCi0gICAgICAgIG9mcC53cml0ZShiJyhUaGlzIGZpbGUgbXVzdCBiZSBjb252ZXJ0ZWQgd2l0aCBCaW5IZXggNC4wKVxyXHI6JykKLSAgICAgICAgaHF4ZXIgPSBfSHF4Y29kZXJlbmdpbmUob2ZwKQotICAgICAgICBzZWxmLm9mcCA9IF9SbGVjb2RlcmVuZ2luZShocXhlcikKLSAgICAgICAgc2VsZi5jcmMgPSAwCi0gICAgICAgIGlmIGZpbmZvIGlzIE5vbmU6Ci0gICAgICAgICAgICBmaW5mbyA9IEZJbmZvKCkKLSAgICAgICAgc2VsZi5kbGVuID0gZGxlbgotICAgICAgICBzZWxmLnJsZW4gPSBybGVuCi0gICAgICAgIHNlbGYuX3dyaXRlaW5mbyhuYW1lLCBmaW5mbykKLSAgICAgICAgc2VsZi5zdGF0ZSA9IF9ESURfSEVBREVSCisgICAgICAgICAgICBjbG9zZV9vbl9lcnJvciA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2ZwLndyaXRlKGInKFRoaXMgZmlsZSBtdXN0IGJlIGNvbnZlcnRlZCB3aXRoIEJpbkhleCA0LjApXHJccjonKQorICAgICAgICAgICAgaHF4ZXIgPSBfSHF4Y29kZXJlbmdpbmUob2ZwKQorICAgICAgICAgICAgc2VsZi5vZnAgPSBfUmxlY29kZXJlbmdpbmUoaHF4ZXIpCisgICAgICAgICAgICBzZWxmLmNyYyA9IDAKKyAgICAgICAgICAgIGlmIGZpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZmluZm8gPSBGSW5mbygpCisgICAgICAgICAgICBzZWxmLmRsZW4gPSBkbGVuCisgICAgICAgICAgICBzZWxmLnJsZW4gPSBybGVuCisgICAgICAgICAgICBzZWxmLl93cml0ZWluZm8obmFtZSwgZmluZm8pCisgICAgICAgICAgICBzZWxmLnN0YXRlID0gX0RJRF9IRUFERVIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgY2xvc2Vfb25fZXJyb3I6CisgICAgICAgICAgICAgICAgb2ZwLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX3dyaXRlaW5mbyhzZWxmLCBuYW1lLCBmaW5mbyk6CiAgICAgICAgIG5sID0gbGVuKG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggM2U5MjRiYS4uYzI0ZDQ1YiAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtMSwxMCArMSwxMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiUHl0aG9uIGludGVyZmFjZSBmb3IgdGhlICdsc3Byb2YnIHByb2ZpbGVyLgogICAgQ29tcGF0aWJsZSB3aXRoIHRoZSAncHJvZmlsZScgbW9kdWxlLgogIiIiCiAKLV9fYWxsX18gPSBbInJ1biIsICJydW5jdHgiLCAiaGVscCIsICJQcm9maWxlIl0KK19fYWxsX18gPSBbInJ1biIsICJydW5jdHgiLCAiUHJvZmlsZSJdCiAKIGltcG9ydCBfbHNwcm9mCiAKQEAgLTU2LDExICs1Niw2IEBACiAgICAgICAgICAgICByZXN1bHQgPSBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAgICAgcmV0dXJuIHJlc3VsdAogCi0jIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotZGVmIGhlbHAoKToKLSAgICBwcmludCgiRG9jdW1lbnRhdGlvbiBmb3IgdGhlIHByb2ZpbGUvY1Byb2ZpbGUgbW9kdWxlcyBjYW4gYmUgZm91bmQgIikKLSAgICBwcmludCgiaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSwgc2VjdGlvbiAnVGhlIFB5dGhvbiBQcm9maWxlcicuIikKLQogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KIAogY2xhc3MgUHJvZmlsZShfbHNwcm9mLlByb2ZpbGVyKToKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IDdkYTJiMjMuLmUxOThlZDggMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtMzEsMTMgKzMxLDE1IEBACiAjIEltcG9ydHMKICMgPT09PT09PQogCi1mcm9tIG9wZXJhdG9yIGltcG9ydCBhdHRyZ2V0dGVyCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8sIFRleHRJT1dyYXBwZXIKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHVybGxpYi5wYXJzZQotaW1wb3J0IGVtYWlsLnBhcnNlcgorZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IEZlZWRQYXJzZXIKIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2ltcG9ydCBodG1sCitpbXBvcnQgbG9jYWxlCitpbXBvcnQgdGVtcGZpbGUKIAogX19hbGxfXyA9IFsiTWluaUZpZWxkU3RvcmFnZSIsICJGaWVsZFN0b3JhZ2UiLAogICAgICAgICAgICAicGFyc2UiLCAicGFyc2VfcXMiLCAicGFyc2VfcXNsIiwgInBhcnNlX211bHRpcGFydCIsCkBAIC0xMDksNyArMTExLDcgQEAKIAogICAgICAgICBBcmd1bWVudHMsIGFsbCBvcHRpb25hbDoKIAotICAgICAgICBmcCAgICAgICAgICAgICAgOiBmaWxlIHBvaW50ZXI7IGRlZmF1bHQ6IHN5cy5zdGRpbgorICAgICAgICBmcCAgICAgICAgICAgICAgOiBmaWxlIHBvaW50ZXI7IGRlZmF1bHQ6IHN5cy5zdGRpbi5idWZmZXIKIAogICAgICAgICBlbnZpcm9uICAgICAgICAgOiBlbnZpcm9ubWVudCBkaWN0aW9uYXJ5OyBkZWZhdWx0OiBvcy5lbnZpcm9uCiAKQEAgLTEyNiw2ICsxMjgsMTggQEAKICAgICAiIiIKICAgICBpZiBmcCBpcyBOb25lOgogICAgICAgICBmcCA9IHN5cy5zdGRpbgorCisgICAgIyBmaWVsZCBrZXlzIGFuZCB2YWx1ZXMgKGV4Y2VwdCBmb3IgZmlsZXMpIGFyZSByZXR1cm5lZCBhcyBzdHJpbmdzCisgICAgIyBhbiBlbmNvZGluZyBpcyByZXF1aXJlZCB0byBkZWNvZGUgdGhlIGJ5dGVzIHJlYWQgZnJvbSBzZWxmLmZwCisgICAgaWYgaGFzYXR0cihmcCwnZW5jb2RpbmcnKToKKyAgICAgICAgZW5jb2RpbmcgPSBmcC5lbmNvZGluZworICAgIGVsc2U6CisgICAgICAgIGVuY29kaW5nID0gJ2xhdGluLTEnCisKKyAgICAjIGZwLnJlYWQoKSBtdXN0IHJldHVybiBieXRlcworICAgIGlmIGlzaW5zdGFuY2UoZnAsIFRleHRJT1dyYXBwZXIpOgorICAgICAgICBmcCA9IGZwLmJ1ZmZlcgorCiAgICAgaWYgbm90ICdSRVFVRVNUX01FVEhPRCcgaW4gZW52aXJvbjoKICAgICAgICAgZW52aXJvblsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnICAgICAgICMgRm9yIHRlc3Rpbmcgc3RhbmQtYWxvbmUKICAgICBpZiBlbnZpcm9uWydSRVFVRVNUX01FVEhPRCddID09ICdQT1NUJzoKQEAgLTEzNiw3ICsxNTAsNyBAQAogICAgICAgICAgICAgY2xlbmd0aCA9IGludChlbnZpcm9uWydDT05URU5UX0xFTkdUSCddKQogICAgICAgICAgICAgaWYgbWF4bGVuIGFuZCBjbGVuZ3RoID4gbWF4bGVuOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01heGltdW0gY29udGVudCBsZW5ndGggZXhjZWVkZWQnKQotICAgICAgICAgICAgcXMgPSBmcC5yZWFkKGNsZW5ndGgpCisgICAgICAgICAgICBxcyA9IGZwLnJlYWQoY2xlbmd0aCkuZGVjb2RlKGVuY29kaW5nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcXMgPSAnJyAgICAgICAgICAgICAgICAgICAgICMgVW5rbm93biBjb250ZW50LXR5cGUKICAgICAgICAgaWYgJ1FVRVJZX1NUUklORycgaW4gZW52aXJvbjoKQEAgLTE1NCw3ICsxNjgsOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcXMgPSAiIgogICAgICAgICBlbnZpcm9uWydRVUVSWV9TVFJJTkcnXSA9IHFzICAgICMgWFhYIFNob3VsZG4ndCwgcmVhbGx5Ci0gICAgcmV0dXJuIHVybGxpYi5wYXJzZS5wYXJzZV9xcyhxcywga2VlcF9ibGFua192YWx1ZXMsIHN0cmljdF9wYXJzaW5nKQorICAgIHJldHVybiB1cmxsaWIucGFyc2UucGFyc2VfcXMocXMsIGtlZXBfYmxhbmtfdmFsdWVzLCBzdHJpY3RfcGFyc2luZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nKQogCiAKICMgcGFyc2UgcXVlcnkgc3RyaW5nIGZ1bmN0aW9uIGNhbGxlZCBmcm9tIHVybHBhcnNlLApAQCAtMjM2LDggKzI1MSw4IEBACiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yID0gbGFzdHBhcnQgIyBFbmQgb3V0ZXIgbG9vcAogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBsaW5lWzoyXSA9PSAiLS0iOgotICAgICAgICAgICAgICAgIHRlcm1pbmF0b3IgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiLS0iKToKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdG9yID0gbGluZS5yc3RyaXAoKQogICAgICAgICAgICAgICAgIGlmIHRlcm1pbmF0b3IgaW4gKG5leHRwYXJ0LCBsYXN0cGFydCk6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKQEAgLTM1Miw5ICszNjcsMTAgQEAKIAogICAgIHZhbHVlOiB0aGUgdmFsdWUgYXMgYSAqc3RyaW5nKjsgZm9yIGZpbGUgdXBsb2FkcywgdGhpcwogICAgICAgICB0cmFuc3BhcmVudGx5IHJlYWRzIHRoZSBmaWxlIGV2ZXJ5IHRpbWUgeW91IHJlcXVlc3QgdGhlIHZhbHVlCisgICAgICAgIGFuZCByZXR1cm5zICpieXRlcyoKIAotICAgIGZpbGU6IHRoZSBmaWxlKC1saWtlKSBvYmplY3QgZnJvbSB3aGljaCB5b3UgY2FuIHJlYWQgdGhlIGRhdGE7Ci0gICAgICAgIE5vbmUgaWYgdGhlIGRhdGEgaXMgc3RvcmVkIGEgc2ltcGxlIHN0cmluZworICAgIGZpbGU6IHRoZSBmaWxlKC1saWtlKSBvYmplY3QgZnJvbSB3aGljaCB5b3UgY2FuIHJlYWQgdGhlIGRhdGEgKmFzCisgICAgICAgIGJ5dGVzKiA7IE5vbmUgaWYgdGhlIGRhdGEgaXMgc3RvcmVkIGEgc2ltcGxlIHN0cmluZwogCiAgICAgdHlwZTogdGhlIGNvbnRlbnQtdHlwZSwgb3IgTm9uZSBpZiBub3Qgc3BlY2lmaWVkCiAKQEAgLTM3NSwxNSArMzkxLDE4IEBACiAgICAgZGlyZWN0b3J5IGFuZCB1bmxpbmtpbmcgdGhlbSBhcyBzb29uIGFzIHRoZXkgaGF2ZSBiZWVuIG9wZW5lZC4KIAogICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwPU5vbmUsIGhlYWRlcnM9Tm9uZSwgb3V0ZXJib3VuZGFyeT0iIiwKLSAgICAgICAgICAgICAgICAgZW52aXJvbj1vcy5lbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcz0wLCBzdHJpY3RfcGFyc2luZz0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnA9Tm9uZSwgaGVhZGVycz1Ob25lLCBvdXRlcmJvdW5kYXJ5PWInJywKKyAgICAgICAgICAgICAgICAgZW52aXJvbj1vcy5lbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcz0wLCBzdHJpY3RfcGFyc2luZz0wLAorICAgICAgICAgICAgICAgICBsaW1pdD1Ob25lLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3JlcGxhY2UnKToKICAgICAgICAgIiIiQ29uc3RydWN0b3IuICBSZWFkIG11bHRpcGFydC8qIHVudGlsIGxhc3QgcGFydC4KIAogICAgICAgICBBcmd1bWVudHMsIGFsbCBvcHRpb25hbDoKIAotICAgICAgICBmcCAgICAgICAgICAgICAgOiBmaWxlIHBvaW50ZXI7IGRlZmF1bHQ6IHN5cy5zdGRpbgorICAgICAgICBmcCAgICAgICAgICAgICAgOiBmaWxlIHBvaW50ZXI7IGRlZmF1bHQ6IHN5cy5zdGRpbi5idWZmZXIKICAgICAgICAgICAgIChub3QgdXNlZCB3aGVuIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBHRVQpCisgICAgICAgICAgICBDYW4gYmUgOgorICAgICAgICAgICAgMS4gYSBUZXh0SU9XcmFwcGVyIG9iamVjdAorICAgICAgICAgICAgMi4gYW4gb2JqZWN0IHdob3NlIHJlYWQoKSBhbmQgcmVhZGxpbmUoKSBtZXRob2RzIHJldHVybiBieXRlcwogCiAgICAgICAgIGhlYWRlcnMgICAgICAgICA6IGhlYWRlciBkaWN0aW9uYXJ5LWxpa2Ugb2JqZWN0OyBkZWZhdWx0OgogICAgICAgICAgICAgdGFrZW4gZnJvbSBlbnZpcm9uIGFzIHBlciBDR0kgc3BlYwpAQCAtNDA0LDYgKzQyMywxNiBAQAogICAgICAgICAgICAgSWYgZmFsc2UgKHRoZSBkZWZhdWx0KSwgZXJyb3JzIGFyZSBzaWxlbnRseSBpZ25vcmVkLgogICAgICAgICAgICAgSWYgdHJ1ZSwgZXJyb3JzIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24uCiAKKyAgICAgICAgbGltaXQgOiB1c2VkIGludGVybmFsbHkgdG8gcmVhZCBwYXJ0cyBvZiBtdWx0aXBhcnQvZm9ybS1kYXRhIGZvcm1zLAorICAgICAgICAgICAgdG8gZXhpdCBmcm9tIHRoZSByZWFkaW5nIGxvb3Agd2hlbiByZWFjaGVkLiBJdCBpcyB0aGUgZGlmZmVyZW5jZQorICAgICAgICAgICAgYmV0d2VlbiB0aGUgZm9ybSBjb250ZW50LWxlbmd0aCBhbmQgdGhlIG51bWJlciBvZiBieXRlcyBhbHJlYWR5CisgICAgICAgICAgICByZWFkCisKKyAgICAgICAgZW5jb2RpbmcsIGVycm9ycyA6IHRoZSBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlciB1c2VkIHRvIGRlY29kZSB0aGUKKyAgICAgICAgICAgIGJpbmFyeSBzdHJlYW0gdG8gc3RyaW5ncy4gTXVzdCBiZSB0aGUgc2FtZSBhcyB0aGUgY2hhcnNldCBkZWZpbmVkCisgICAgICAgICAgICBmb3IgdGhlIHBhZ2Ugc2VuZGluZyB0aGUgZm9ybSAoY29udGVudC10eXBlIDogbWV0YSBodHRwLWVxdWl2IG9yCisgICAgICAgICAgICBoZWFkZXIpCisKICAgICAgICAgIiIiCiAgICAgICAgIG1ldGhvZCA9ICdHRVQnCiAgICAgICAgIHNlbGYua2VlcF9ibGFua192YWx1ZXMgPSBrZWVwX2JsYW5rX3ZhbHVlcwpAQCAtNDE4LDcgKzQ0Nyw4IEBACiAgICAgICAgICAgICAgICAgcXMgPSBzeXMuYXJndlsxXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBxcyA9ICIiCi0gICAgICAgICAgICBmcCA9IFN0cmluZ0lPKHFzKQorICAgICAgICAgICAgcXMgPSBxcy5lbmNvZGUobG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCksICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICAgICAgZnAgPSBCeXRlc0lPKHFzKQogICAgICAgICAgICAgaWYgaGVhZGVycyBpcyBOb25lOgogICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7J2NvbnRlbnQtdHlwZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIn0KQEAgLTQzMywxMCArNDYzLDI2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5xc19vbl9wb3N0ID0gZW52aXJvblsnUVVFUllfU1RSSU5HJ10KICAgICAgICAgICAgIGlmICdDT05URU5UX0xFTkdUSCcgaW4gZW52aXJvbjoKICAgICAgICAgICAgICAgICBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddID0gZW52aXJvblsnQ09OVEVOVF9MRU5HVEgnXQotICAgICAgICBzZWxmLmZwID0gZnAgb3Igc3lzLnN0ZGluCisgICAgICAgIGlmIGZwIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmZwID0gc3lzLnN0ZGluLmJ1ZmZlcgorICAgICAgICAjIHNlbGYuZnAucmVhZCgpIG11c3QgcmV0dXJuIGJ5dGVzCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmcCwgVGV4dElPV3JhcHBlcik6CisgICAgICAgICAgICBzZWxmLmZwID0gZnAuYnVmZmVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZwID0gZnAKKworICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKwogICAgICAgICBzZWxmLmhlYWRlcnMgPSBoZWFkZXJzCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG91dGVyYm91bmRhcnksIGJ5dGVzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignb3V0ZXJib3VuZGFyeSBtdXN0IGJlIGJ5dGVzLCBub3QgJXMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0eXBlKG91dGVyYm91bmRhcnkpLl9fbmFtZV9fKQogICAgICAgICBzZWxmLm91dGVyYm91bmRhcnkgPSBvdXRlcmJvdW5kYXJ5CiAKKyAgICAgICAgc2VsZi5ieXRlc19yZWFkID0gMAorICAgICAgICBzZWxmLmxpbWl0ID0gbGltaXQKKwogICAgICAgICAjIFByb2Nlc3MgY29udGVudC1kaXNwb3NpdGlvbiBoZWFkZXIKICAgICAgICAgY2Rpc3AsIHBkaWN0ID0gIiIsIHt9CiAgICAgICAgIGlmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBzZWxmLmhlYWRlcnM6CkBAIC00NDksNiArNDk1LDcgQEAKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKICAgICAgICAgaWYgJ2ZpbGVuYW1lJyBpbiBwZGljdDoKICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBwZGljdFsnZmlsZW5hbWUnXQorICAgICAgICBzZWxmLl9iaW5hcnlfZmlsZSA9IHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmUKIAogICAgICAgICAjIFByb2Nlc3MgY29udGVudC10eXBlIGhlYWRlcgogICAgICAgICAjCkBAIC00NzAsOSArNTE3LDExIEBACiAgICAgICAgICAgICBjdHlwZSwgcGRpY3QgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywge30KICAgICAgICAgc2VsZi50eXBlID0gY3R5cGUKICAgICAgICAgc2VsZi50eXBlX29wdGlvbnMgPSBwZGljdAotICAgICAgICBzZWxmLmlubmVyYm91bmRhcnkgPSAiIgogICAgICAgICBpZiAnYm91bmRhcnknIGluIHBkaWN0OgotICAgICAgICAgICAgc2VsZi5pbm5lcmJvdW5kYXJ5ID0gcGRpY3RbJ2JvdW5kYXJ5J10KKyAgICAgICAgICAgIHNlbGYuaW5uZXJib3VuZGFyeSA9IHBkaWN0Wydib3VuZGFyeSddLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5pbm5lcmJvdW5kYXJ5ID0gYiIiCisKICAgICAgICAgY2xlbiA9IC0xCiAgICAgICAgIGlmICdjb250ZW50LWxlbmd0aCcgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICAgdHJ5OgpAQCAtNDgyLDYgKzUzMSw4IEBACiAgICAgICAgICAgICBpZiBtYXhsZW4gYW5kIGNsZW4gPiBtYXhsZW46CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTWF4aW11bSBjb250ZW50IGxlbmd0aCBleGNlZWRlZCcpCiAgICAgICAgIHNlbGYubGVuZ3RoID0gY2xlbgorICAgICAgICBpZiBzZWxmLmxpbWl0IGlzIE5vbmUgYW5kIGNsZW46CisgICAgICAgICAgICBzZWxmLmxpbWl0ID0gY2xlbgogCiAgICAgICAgIHNlbGYubGlzdCA9IHNlbGYuZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5kb25lID0gMApAQCAtNTMxLDcgKzU4Miw3IEBACiAgICAgICAgICIiIkRpY3Rpb25hcnkgc3R5bGUgZ2V0KCkgbWV0aG9kLCBpbmNsdWRpbmcgJ3ZhbHVlJyBsb29rdXAuIiIiCiAgICAgICAgIGlmIGtleSBpbiBzZWxmOgogICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIHR5cGUoW10pOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFt4LnZhbHVlIGZvciB4IGluIHZhbHVlXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUKQEAgLTU0Miw3ICs1OTMsNyBAQAogICAgICAgICAiIiIgUmV0dXJuIHRoZSBmaXJzdCB2YWx1ZSByZWNlaXZlZC4iIiIKICAgICAgICAgaWYga2V5IGluIHNlbGY6CiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgdHlwZShbXSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF0udmFsdWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlCkBAIC01NTMsNyArNjA0LDcgQEAKICAgICAgICAgIiIiIFJldHVybiBsaXN0IG9mIHJlY2VpdmVkIHZhbHVlcy4iIiIKICAgICAgICAgaWYga2V5IGluIHNlbGY6CiAgICAgICAgICAgICB2YWx1ZSA9IHNlbGZba2V5XQotICAgICAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgdHlwZShbXSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gW3gudmFsdWUgZm9yIHggaW4gdmFsdWVdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBbdmFsdWUudmFsdWVdCkBAIC01ODIsMTIgKzYzMywxOCBAQAogICAgIGRlZiByZWFkX3VybGVuY29kZWQoc2VsZik6CiAgICAgICAgICIiIkludGVybmFsOiByZWFkIGRhdGEgaW4gcXVlcnkgc3RyaW5nIGZvcm1hdC4iIiIKICAgICAgICAgcXMgPSBzZWxmLmZwLnJlYWQoc2VsZi5sZW5ndGgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHFzLCBieXRlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBzaG91bGQgcmV0dXJuIGJ5dGVzLCBnb3QgJXMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mcCwgdHlwZShxcykuX19uYW1lX18pKQorICAgICAgICBxcyA9IHFzLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKICAgICAgICAgaWYgc2VsZi5xc19vbl9wb3N0OgogICAgICAgICAgICAgcXMgKz0gJyYnICsgc2VsZi5xc19vbl9wb3N0Ci0gICAgICAgIHNlbGYubGlzdCA9IGxpc3QgPSBbXQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB1cmxsaWIucGFyc2UucGFyc2VfcXNsKHFzLCBzZWxmLmtlZXBfYmxhbmtfdmFsdWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0cmljdF9wYXJzaW5nKToKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCisgICAgICAgIHNlbGYubGlzdCA9IFtdCisgICAgICAgIHF1ZXJ5ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzbCgKKyAgICAgICAgICAgIHFzLCBzZWxmLmtlZXBfYmxhbmtfdmFsdWVzLCBzZWxmLnN0cmljdF9wYXJzaW5nLAorICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgZXJyb3JzPXNlbGYuZXJyb3JzKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBxdWVyeToKKyAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQoTWluaUZpZWxkU3RvcmFnZShrZXksIHZhbHVlKSkKICAgICAgICAgc2VsZi5za2lwX2xpbmVzKCkKIAogICAgIEZpZWxkU3RvcmFnZUNsYXNzID0gTm9uZQpAQCAtNTk5LDI0ICs2NTYsNDIgQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgYm91bmRhcnkgaW4gbXVsdGlwYXJ0IGZvcm06ICVyJyAlIChpYiwpKQogICAgICAgICBzZWxmLmxpc3QgPSBbXQogICAgICAgICBpZiBzZWxmLnFzX29uX3Bvc3Q6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB1cmxsaWIucGFyc2UucGFyc2VfcXNsKHNlbGYucXNfb25fcG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYua2VlcF9ibGFua192YWx1ZXMsIHNlbGYuc3RyaWN0X3BhcnNpbmcpOgorICAgICAgICAgICAgcXVlcnkgPSB1cmxsaWIucGFyc2UucGFyc2VfcXNsKAorICAgICAgICAgICAgICAgIHNlbGYucXNfb25fcG9zdCwgc2VsZi5rZWVwX2JsYW5rX3ZhbHVlcywgc2VsZi5zdHJpY3RfcGFyc2luZywKKyAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBlcnJvcnM9c2VsZi5lcnJvcnMpCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBxdWVyeToKICAgICAgICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCiAgICAgICAgICAgICBGaWVsZFN0b3JhZ2VDbGFzcyA9IE5vbmUKIAogICAgICAgICBrbGFzcyA9IHNlbGYuRmllbGRTdG9yYWdlQ2xhc3Mgb3Igc2VsZi5fX2NsYXNzX18KLSAgICAgICAgcGFyc2VyID0gZW1haWwucGFyc2VyLkZlZWRQYXJzZXIoKQotICAgICAgICAjIENyZWF0ZSBib2d1cyBjb250ZW50LXR5cGUgaGVhZGVyIGZvciBwcm9wZXIgbXVsdGlwYXJ0IHBhcnNpbmcKLSAgICAgICAgcGFyc2VyLmZlZWQoJ0NvbnRlbnQtVHlwZTogJXM7IGJvdW5kYXJ5PSVzXHJcblxyXG4nICUgKHNlbGYudHlwZSwgaWIpKQotICAgICAgICBwYXJzZXIuZmVlZChzZWxmLmZwLnJlYWQoKSkKLSAgICAgICAgZnVsbF9tc2cgPSBwYXJzZXIuY2xvc2UoKQotICAgICAgICAjIEdldCBzdWJwYXJ0cwotICAgICAgICBtc2dzID0gZnVsbF9tc2cuZ2V0X3BheWxvYWQoKQotICAgICAgICBmb3IgbXNnIGluIG1zZ3M6Ci0gICAgICAgICAgICBmcCA9IFN0cmluZ0lPKG1zZy5nZXRfcGF5bG9hZCgpKQotICAgICAgICAgICAgcGFydCA9IGtsYXNzKGZwLCBtc2csIGliLCBlbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfcGFyc2luZykKKyAgICAgICAgZmlyc3RfbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKSAjIGJ5dGVzCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpcnN0X2xpbmUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVzIHNob3VsZCByZXR1cm4gYnl0ZXMsIGdvdCAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmZwLCB0eXBlKGZpcnN0X2xpbmUpLl9fbmFtZV9fKSkKKyAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihmaXJzdF9saW5lKQorICAgICAgICAjIGZpcnN0IGxpbmUgaG9sZHMgYm91bmRhcnkgOyBpZ25vcmUgaXQsIG9yIGNoZWNrIHRoYXQKKyAgICAgICAgIyBiIi0tIiArIGliID09IGZpcnN0X2xpbmUuc3RyaXAoKSA/CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBwYXJzZXIgPSBGZWVkUGFyc2VyKCkKKyAgICAgICAgICAgIGhkcl90ZXh0ID0gYiIiCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBoZHJfdGV4dCArPSBkYXRhCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGEuc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIG5vdCBoZHJfdGV4dDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgIyBwYXJzZXIgdGFrZXMgc3RyaW5ncywgbm90IGJ5dGVzCisgICAgICAgICAgICBzZWxmLmJ5dGVzX3JlYWQgKz0gbGVuKGhkcl90ZXh0KQorICAgICAgICAgICAgcGFyc2VyLmZlZWQoaGRyX3RleHQuZGVjb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKSkKKyAgICAgICAgICAgIGhlYWRlcnMgPSBwYXJzZXIuY2xvc2UoKQorICAgICAgICAgICAgcGFydCA9IGtsYXNzKHNlbGYuZnAsIGhlYWRlcnMsIGliLCBlbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfcGFyc2luZyxzZWxmLmxpbWl0LXNlbGYuYnl0ZXNfcmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKKyAgICAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBwYXJ0LmJ5dGVzX3JlYWQKICAgICAgICAgICAgIHNlbGYubGlzdC5hcHBlbmQocGFydCkKKyAgICAgICAgICAgIGlmIHNlbGYuYnl0ZXNfcmVhZCA+PSBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBzZWxmLnNraXBfbGluZXMoKQogCiAgICAgZGVmIHJlYWRfc2luZ2xlKHNlbGYpOgpAQCAtNjM2LDcgKzcxMSwxMSBAQAogICAgICAgICB0b2RvID0gc2VsZi5sZW5ndGgKICAgICAgICAgaWYgdG9kbyA+PSAwOgogICAgICAgICAgICAgd2hpbGUgdG9kbyA+IDA6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZnAucmVhZChtaW4odG9kbywgc2VsZi5idWZzaXplKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5mcC5yZWFkKG1pbih0b2RvLCBzZWxmLmJ1ZnNpemUpKSAjIGJ5dGVzCisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgYnl0ZXMpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBzaG91bGQgcmV0dXJuIGJ5dGVzLCBnb3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mcCwgdHlwZShkYXRhKS5fX25hbWVfXykpCisgICAgICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihkYXRhKQogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAtMQogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNjQ1LDU5ICs3MjQsNzcgQEAKIAogICAgIGRlZiByZWFkX2xpbmVzKHNlbGYpOgogICAgICAgICAiIiJJbnRlcm5hbDogcmVhZCBsaW5lcyB1bnRpbCBFT0Ygb3Igb3V0ZXJib3VuZGFyeS4iIiIKLSAgICAgICAgc2VsZi5maWxlID0gc2VsZi5fX2ZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIGlmIHNlbGYuX2JpbmFyeV9maWxlOgorICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5fX2ZpbGUgPSBCeXRlc0lPKCkgIyBzdG9yZSBkYXRhIGFzIGJ5dGVzIGZvciBmaWxlcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5fX2ZpbGUgPSBTdHJpbmdJTygpICMgYXMgc3RyaW5ncyBmb3Igb3RoZXIgZmllbGRzCiAgICAgICAgIGlmIHNlbGYub3V0ZXJib3VuZGFyeToKICAgICAgICAgICAgIHNlbGYucmVhZF9saW5lc190b19vdXRlcmJvdW5kYXJ5KCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVhZF9saW5lc190b19lb2YoKQogCiAgICAgZGVmIF9fd3JpdGUoc2VsZiwgbGluZSk6CisgICAgICAgICIiImxpbmUgaXMgYWx3YXlzIGJ5dGVzLCBub3Qgc3RyaW5nIiIiCiAgICAgICAgIGlmIHNlbGYuX19maWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgc2VsZi5fX2ZpbGUudGVsbCgpICsgbGVuKGxpbmUpID4gMTAwMDoKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLm1ha2VfZmlsZSgpCiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX19maWxlLmdldHZhbHVlKCkKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUoZGF0YSkKICAgICAgICAgICAgICAgICBzZWxmLl9fZmlsZSA9IE5vbmUKLSAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCisgICAgICAgIGlmIHNlbGYuX2JpbmFyeV9maWxlOgorICAgICAgICAgICAgIyBrZWVwIGJ5dGVzCisgICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUobGluZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZGVjb2RlIHRvIHN0cmluZworICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUuZGVjb2RlKHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKSkKIAogICAgIGRlZiByZWFkX2xpbmVzX3RvX2VvZihzZWxmKToKICAgICAgICAgIiIiSW50ZXJuYWw6IHJlYWQgbGluZXMgdW50aWwgRU9GLiIiIgogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoMTw8MTYpCisgICAgICAgICAgICBsaW5lID0gc2VsZi5mcC5yZWFkbGluZSgxPDwxNikgIyBieXRlcworICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihsaW5lKQogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5kb25lID0gLTEKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgc2VsZi5fX3dyaXRlKGxpbmUpCiAKICAgICBkZWYgcmVhZF9saW5lc190b19vdXRlcmJvdW5kYXJ5KHNlbGYpOgotICAgICAgICAiIiJJbnRlcm5hbDogcmVhZCBsaW5lcyB1bnRpbCBvdXRlcmJvdW5kYXJ5LiIiIgotICAgICAgICBuZXh0ID0gIi0tIiArIHNlbGYub3V0ZXJib3VuZGFyeQotICAgICAgICBsYXN0ID0gbmV4dCArICItLSIKLSAgICAgICAgZGVsaW0gPSAiIgorICAgICAgICAiIiJJbnRlcm5hbDogcmVhZCBsaW5lcyB1bnRpbCBvdXRlcmJvdW5kYXJ5LgorICAgICAgICBEYXRhIGlzIHJlYWQgYXMgYnl0ZXM6IGJvdW5kYXJpZXMgYW5kIGxpbmUgZW5kcyBtdXN0IGJlIGNvbnZlcnRlZAorICAgICAgICB0byBieXRlcyBmb3IgY29tcGFyaXNvbnMuCisgICAgICAgICIiIgorICAgICAgICBuZXh0X2JvdW5kYXJ5ID0gYiItLSIgKyBzZWxmLm91dGVyYm91bmRhcnkKKyAgICAgICAgbGFzdF9ib3VuZGFyeSA9IG5leHRfYm91bmRhcnkgKyBiIi0tIgorICAgICAgICBkZWxpbSA9IGIiIgogICAgICAgICBsYXN0X2xpbmVfbGZlbmQgPSBUcnVlCisgICAgICAgIF9yZWFkID0gMAogICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoMTw8MTYpCisgICAgICAgICAgICBpZiBfcmVhZCA+PSBzZWxmLmxpbWl0OgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBsaW5lID0gc2VsZi5mcC5yZWFkbGluZSgxPDwxNikgIyBieXRlcworICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihsaW5lKQorICAgICAgICAgICAgX3JlYWQgKz0gbGVuKGxpbmUpCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAtMQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBsaW5lWzoyXSA9PSAiLS0iIGFuZCBsYXN0X2xpbmVfbGZlbmQ6Ci0gICAgICAgICAgICAgICAgc3RyaXBwZWRsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgc3RyaXBwZWRsaW5lID09IG5leHQ6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoYiItLSIpIGFuZCBsYXN0X2xpbmVfbGZlbmQ6CisgICAgICAgICAgICAgICAgc3RyaXBwZWRsaW5lID0gbGluZS5yc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBuZXh0X2JvdW5kYXJ5OgogICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBsYXN0OgorICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBsYXN0X2JvdW5kYXJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAxCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBvZGVsaW0gPSBkZWxpbQotICAgICAgICAgICAgaWYgbGluZVstMjpdID09ICJcclxuIjoKLSAgICAgICAgICAgICAgICBkZWxpbSA9ICJcclxuIgorICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChiIlxyXG4iKToKKyAgICAgICAgICAgICAgICBkZWxpbSA9IGIiXHJcbiIKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdCiAgICAgICAgICAgICAgICAgbGFzdF9saW5lX2xmZW5kID0gVHJ1ZQotICAgICAgICAgICAgZWxpZiBsaW5lWy0xXSA9PSAiXG4iOgotICAgICAgICAgICAgICAgIGRlbGltID0gIlxuIgorICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKGIiXG4iKToKKyAgICAgICAgICAgICAgICBkZWxpbSA9IGIiXG4iCiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICAgICAgICAgIGxhc3RfbGluZV9sZmVuZCA9IFRydWUKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVsaW0gPSAiIgorICAgICAgICAgICAgICAgIGRlbGltID0gYiIiCiAgICAgICAgICAgICAgICAgbGFzdF9saW5lX2xmZW5kID0gRmFsc2UKICAgICAgICAgICAgIHNlbGYuX193cml0ZShvZGVsaW0gKyBsaW5lKQogCkBAIC03MDUsMjIgKzgwMiwyMyBAQAogICAgICAgICAiIiJJbnRlcm5hbDogc2tpcCBsaW5lcyB1bnRpbCBvdXRlciBib3VuZGFyeSBpZiBkZWZpbmVkLiIiIgogICAgICAgICBpZiBub3Qgc2VsZi5vdXRlcmJvdW5kYXJ5IG9yIHNlbGYuZG9uZToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBuZXh0ID0gIi0tIiArIHNlbGYub3V0ZXJib3VuZGFyeQotICAgICAgICBsYXN0ID0gbmV4dCArICItLSIKKyAgICAgICAgbmV4dF9ib3VuZGFyeSA9IGIiLS0iICsgc2VsZi5vdXRlcmJvdW5kYXJ5CisgICAgICAgIGxhc3RfYm91bmRhcnkgPSBuZXh0X2JvdW5kYXJ5ICsgYiItLSIKICAgICAgICAgbGFzdF9saW5lX2xmZW5kID0gVHJ1ZQotICAgICAgICB3aGlsZSAxOgorICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoMTw8MTYpCisgICAgICAgICAgICBzZWxmLmJ5dGVzX3JlYWQgKz0gbGVuKGxpbmUpCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAtMQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiBsaW5lWzoyXSA9PSAiLS0iIGFuZCBsYXN0X2xpbmVfbGZlbmQ6CisgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGIiLS0iKSBhbmQgbGFzdF9saW5lX2xmZW5kOgogICAgICAgICAgICAgICAgIHN0cmlwcGVkbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBuZXh0OgorICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBuZXh0X2JvdW5kYXJ5OgogICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBsYXN0OgorICAgICAgICAgICAgICAgIGlmIHN0cmlwcGVkbGluZSA9PSBsYXN0X2JvdW5kYXJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvbmUgPSAxCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBsYXN0X2xpbmVfbGZlbmQgPSBsaW5lLmVuZHN3aXRoKCdcbicpCisgICAgICAgICAgICBsYXN0X2xpbmVfbGZlbmQgPSBsaW5lLmVuZHN3aXRoKGInXG4nKQogCiAgICAgZGVmIG1ha2VfZmlsZShzZWxmKToKICAgICAgICAgIiIiT3ZlcnJpZGFibGU6IHJldHVybiBhIHJlYWRhYmxlICYgd3JpdGFibGUgZmlsZS4KQEAgLTczMCw3ICs4MjgsOCBAQAogICAgICAgICAtIHNlZWsoMCkKICAgICAgICAgLSBkYXRhIGlzIHJlYWQgZnJvbSBpdAogCi0gICAgICAgIFRoZSBmaWxlIGlzIGFsd2F5cyBvcGVuZWQgaW4gdGV4dCBtb2RlLgorICAgICAgICBUaGUgZmlsZSBpcyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUgZm9yIGZpbGVzLCBpbiB0ZXh0IG1vZGUKKyAgICAgICAgZm9yIG90aGVyIGZpZWxkcwogCiAgICAgICAgIFRoaXMgdmVyc2lvbiBvcGVucyBhIHRlbXBvcmFyeSBmaWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLAogICAgICAgICBhbmQgaW1tZWRpYXRlbHkgZGVsZXRlcyAodW5saW5rcykgaXQuICBUaGUgdHJpY2sgKG9uIFVuaXghKSBpcwpAQCAtNzQ1LDggKzg0NCwxMSBAQAogICAgICAgICB3aGljaCB1bmxpbmtzIHRoZSB0ZW1wb3JhcnkgZmlsZXMgeW91IGhhdmUgY3JlYXRlZC4KIAogICAgICAgICAiIiIKLSAgICAgICAgaW1wb3J0IHRlbXBmaWxlCi0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCJ3KyIsIGVuY29kaW5nPSJ1dGYtOCIsIG5ld2xpbmU9IlxuIikKKyAgICAgICAgaWYgc2VsZi5fYmluYXJ5X2ZpbGU6CisgICAgICAgICAgICByZXR1cm4gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgid2IrIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCJ3KyIsCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgbmV3bGluZSA9ICdcbicpCiAKIAogIyBUZXN0L2RlYnVnIGNvZGUKQEAgLTgwMCw4ICs5MDIsOCBAQAogICAgIGxpc3QgPSB0cmFjZWJhY2suZm9ybWF0X3RiKHRiLCBsaW1pdCkgKyBcCiAgICAgICAgICAgIHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSwgdmFsdWUpCiAgICAgcHJpbnQoIjxQUkU+JXM8Qj4lczwvQj48L1BSRT4iICUgKAotICAgICAgICBlc2NhcGUoIiIuam9pbihsaXN0WzotMV0pKSwKLSAgICAgICAgZXNjYXBlKGxpc3RbLTFdKSwKKyAgICAgICAgaHRtbC5lc2NhcGUoIiIuam9pbihsaXN0WzotMV0pKSwKKyAgICAgICAgaHRtbC5lc2NhcGUobGlzdFstMV0pLAogICAgICAgICApKQogICAgIGRlbCB0YgogCkBAIC04MTIsNyArOTE0LDcgQEAKICAgICBwcmludCgiPEgzPlNoZWxsIEVudmlyb25tZW50OjwvSDM+IikKICAgICBwcmludCgiPERMPiIpCiAgICAgZm9yIGtleSBpbiBrZXlzOgotICAgICAgICBwcmludCgiPERUPiIsIGVzY2FwZShrZXkpLCAiPEREPiIsIGVzY2FwZShlbnZpcm9uW2tleV0pKQorICAgICAgICBwcmludCgiPERUPiIsIGh0bWwuZXNjYXBlKGtleSksICI8REQ+IiwgaHRtbC5lc2NhcGUoZW52aXJvbltrZXldKSkKICAgICBwcmludCgiPC9ETD4iKQogICAgIHByaW50KCkKIApAQCAtODI1LDEwICs5MjcsMTAgQEAKICAgICAgICAgcHJpbnQoIjxQPk5vIGZvcm0gZmllbGRzLiIpCiAgICAgcHJpbnQoIjxETD4iKQogICAgIGZvciBrZXkgaW4ga2V5czoKLSAgICAgICAgcHJpbnQoIjxEVD4iICsgZXNjYXBlKGtleSkgKyAiOiIsIGVuZD0nICcpCisgICAgICAgIHByaW50KCI8RFQ+IiArIGh0bWwuZXNjYXBlKGtleSkgKyAiOiIsIGVuZD0nICcpCiAgICAgICAgIHZhbHVlID0gZm9ybVtrZXldCi0gICAgICAgIHByaW50KCI8aT4iICsgZXNjYXBlKHJlcHIodHlwZSh2YWx1ZSkpKSArICI8L2k+IikKLSAgICAgICAgcHJpbnQoIjxERD4iICsgZXNjYXBlKHJlcHIodmFsdWUpKSkKKyAgICAgICAgcHJpbnQoIjxpPiIgKyBodG1sLmVzY2FwZShyZXByKHR5cGUodmFsdWUpKSkgKyAiPC9pPiIpCisgICAgICAgIHByaW50KCI8REQ+IiArIGh0bWwuZXNjYXBlKHJlcHIodmFsdWUpKSkKICAgICBwcmludCgiPC9ETD4iKQogICAgIHByaW50KCkKIApAQCAtODM5LDkgKzk0MSw5IEBACiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQogICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBlc2NhcGUoc3RyKG1zZykpKQorICAgICAgICBwcmludCgib3MuZXJyb3I6IiwgaHRtbC5lc2NhcGUoc3RyKG1zZykpKQogICAgIGVsc2U6Ci0gICAgICAgIHByaW50KGVzY2FwZShwd2QpKQorICAgICAgICBwcmludChodG1sLmVzY2FwZShwd2QpKQogICAgIHByaW50KCkKIAogZGVmIHByaW50X2FyZ3VtZW50cygpOgpAQCAtODk5LDkgKzEwMDEsOSBAQAogIyA9PT09PT09PT0KIAogZGVmIGVzY2FwZShzLCBxdW90ZT1Ob25lKToKLSAgICAnJydSZXBsYWNlIHNwZWNpYWwgY2hhcmFjdGVycyAiJiIsICI8IiBhbmQgIj4iIHRvIEhUTUwtc2FmZSBzZXF1ZW5jZXMuCi0gICAgSWYgdGhlIG9wdGlvbmFsIGZsYWcgcXVvdGUgaXMgdHJ1ZSwgdGhlIHF1b3RhdGlvbiBtYXJrIGNoYXJhY3RlciAoIikKLSAgICBpcyBhbHNvIHRyYW5zbGF0ZWQuJycnCisgICAgIiIiRGVwcmVjYXRlZCBBUEkuIiIiCisgICAgd2FybigiY2dpLmVzY2FwZSBpcyBkZXByZWNhdGVkLCB1c2UgaHRtbC5lc2NhcGUgaW5zdGVhZCIsCisgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgcyA9IHMucmVwbGFjZSgiJiIsICImYW1wOyIpICMgTXVzdCBiZSBkb25lIGZpcnN0IQogICAgIHMgPSBzLnJlcGxhY2UoIjwiLCAiJmx0OyIpCiAgICAgcyA9IHMucmVwbGFjZSgiPiIsICImZ3Q7IikKQEAgLTkwOSw4ICsxMDExLDEzIEBACiAgICAgICAgIHMgPSBzLnJlcGxhY2UoJyInLCAiJnF1b3Q7IikKICAgICByZXR1cm4gcwogCi1kZWYgdmFsaWRfYm91bmRhcnkocywgX3ZiX3BhdHRlcm49Il5bIC1+XXswLDIwMH1bIS1+XSQiKToKKworZGVmIHZhbGlkX2JvdW5kYXJ5KHMsIF92Yl9wYXR0ZXJuPU5vbmUpOgogICAgIGltcG9ydCByZQorICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgorICAgICAgICBfdmJfcGF0dGVybiA9IGIiXlsgLX5dezAsMjAwfVshLX5dJCIKKyAgICBlbHNlOgorICAgICAgICBfdmJfcGF0dGVybiA9ICJeWyAtfl17MCwyMDB9WyEtfl0kIgogICAgIHJldHVybiByZS5tYXRjaChfdmJfcGF0dGVybiwgcykKIAogIyBJbnZva2UgbWFpbmxpbmUKZGlmZiAtLWdpdCBhL0xpYi9jbWQucHkgYi9MaWIvY21kLnB5CmluZGV4IDEwYWE1YWMuLjhmYTdkMDEgMTAwNjQ0Ci0tLSBhL0xpYi9jbWQucHkKKysrIGIvTGliL2NtZC5weQpAQCAtODQsNyArODQsNiBAQAogICAgICAgICBzeXMuc3RkaW4gYW5kIHN5cy5zdGRvdXQgYXJlIHVzZWQuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnN0ZGluID0gc3RkaW4KICAgICAgICAgZWxzZToKQEAgLTI3OCwyMSArMjc3LDE4IEBACiAgICAgICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGdldF9uYW1lcyhzZWxmKToKLSAgICAgICAgIyBJbmhlcml0YW5jZSBzYXlzIHdlIGhhdmUgdG8gbG9vayBpbiBjbGFzcyBhbmQKLSAgICAgICAgIyBiYXNlIGNsYXNzZXM7IG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQuCi0gICAgICAgIG5hbWVzID0gW10KLSAgICAgICAgY2xhc3NlcyA9IFtzZWxmLl9fY2xhc3NfX10KLSAgICAgICAgd2hpbGUgY2xhc3NlczoKLSAgICAgICAgICAgIGFjbGFzcyA9IGNsYXNzZXMucG9wKDApCi0gICAgICAgICAgICBpZiBhY2xhc3MuX19iYXNlc19fOgotICAgICAgICAgICAgICAgIGNsYXNzZXMgPSBjbGFzc2VzICsgbGlzdChhY2xhc3MuX19iYXNlc19fKQotICAgICAgICAgICAgbmFtZXMgPSBuYW1lcyArIGRpcihhY2xhc3MpCi0gICAgICAgIHJldHVybiBuYW1lcworICAgICAgICAjIFRoaXMgbWV0aG9kIHVzZWQgdG8gcHVsbCBpbiBiYXNlIGNsYXNzIGF0dHJpYnV0ZXMKKyAgICAgICAgIyBhdCBhIHRpbWUgZGlyKCkgZGlkbid0IGRvIGl0IHlldC4KKyAgICAgICAgcmV0dXJuIGRpcihzZWxmLl9fY2xhc3NfXykKIAogICAgIGRlZiBjb21wbGV0ZV9oZWxwKHNlbGYsICphcmdzKToKLSAgICAgICAgcmV0dXJuIHNlbGYuY29tcGxldGVuYW1lcygqYXJncykKKyAgICAgICAgY29tbWFuZHMgPSBzZXQoc2VsZi5jb21wbGV0ZW5hbWVzKCphcmdzKSkKKyAgICAgICAgdG9waWNzID0gc2V0KGFbNTpdIGZvciBhIGluIHNlbGYuZ2V0X25hbWVzKCkKKyAgICAgICAgICAgICAgICAgICAgIGlmIGEuc3RhcnRzd2l0aCgnaGVscF8nICsgYXJnc1swXSkpCisgICAgICAgIHJldHVybiBsaXN0KGNvbW1hbmRzIHwgdG9waWNzKQogCiAgICAgZGVmIGRvX2hlbHAoc2VsZiwgYXJnKToKKyAgICAgICAgJ0xpc3QgYXZhaWxhYmxlIGNvbW1hbmRzIHdpdGggImhlbHAiIG9yIGRldGFpbGVkIGhlbHAgd2l0aCAiaGVscCBjbWQiLicKICAgICAgICAgaWYgYXJnOgogICAgICAgICAgICAgIyBYWFggY2hlY2sgYXJnIHN5bnRheAogICAgICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL2NvZGUucHkgYi9MaWIvY29kZS5weQppbmRleCA4OTYyOTI3Li42MDVhZWRlIDEwMDY0NAotLS0gYS9MaWIvY29kZS5weQorKysgYi9MaWIvY29kZS5weQpAQCAtMjg3LDYgKzI4Nyw1IEBACiAgICAgY29uc29sZS5pbnRlcmFjdChiYW5uZXIpCiAKIAotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgcGRiCi0gICAgcGRiLnJ1bigiaW50ZXJhY3QoKVxuIikKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaW50ZXJhY3QoKQpkaWZmIC0tZ2l0IGEvTGliL2NvZGVjcy5weSBiL0xpYi9jb2RlY3MucHkKaW5kZXggZjZjMjQ0OC4uYjE1MGQ2NCAxMDA2NDQKLS0tIGEvTGliL2NvZGVjcy5weQorKysgYi9MaWIvY29kZWNzLnB5CkBAIC0zOTYsNiArMzk2LDggQEAKIAogY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjKToKIAorICAgIGNoYXJidWZmZXJ0eXBlID0gc3RyCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBlcnJvcnM9J3N0cmljdCcpOgogCiAgICAgICAgICIiIiBDcmVhdGVzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlLgpAQCAtNDE3LDkgKzQxOSw4IEBACiAgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCiAgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCiAgICAgICAgIHNlbGYuYnl0ZWJ1ZmZlciA9IGIiIgotICAgICAgICAjIEZvciBzdHItPnN0ciBkZWNvZGluZyB0aGlzIHdpbGwgc3RheSBhIHN0cgotICAgICAgICAjIEZvciBzdHItPnVuaWNvZGUgZGVjb2RpbmcgdGhlIGZpcnN0IHJlYWQgd2lsbCBwcm9tb3RlIGl0IHRvIHVuaWNvZGUKLSAgICAgICAgc2VsZi5jaGFyYnVmZmVyID0gIiIKKyAgICAgICAgc2VsZi5fZW1wdHlfY2hhcmJ1ZmZlciA9IHNlbGYuY2hhcmJ1ZmZlcnR5cGUoKQorICAgICAgICBzZWxmLmNoYXJidWZmZXIgPSBzZWxmLl9lbXB0eV9jaGFyYnVmZmVyCiAgICAgICAgIHNlbGYubGluZWJ1ZmZlciA9IE5vbmUKIAogICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CkBAIC00NTUsNyArNDU2LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgICMgSWYgd2UgaGF2ZSBsaW5lcyBjYWNoZWQsIGZpcnN0IG1lcmdlIHRoZW0gYmFjayBpbnRvIGNoYXJhY3RlcnMKICAgICAgICAgaWYgc2VsZi5saW5lYnVmZmVyOgotICAgICAgICAgICAgc2VsZi5jaGFyYnVmZmVyID0gIiIuam9pbihzZWxmLmxpbmVidWZmZXIpCisgICAgICAgICAgICBzZWxmLmNoYXJidWZmZXIgPSBzZWxmLl9lbXB0eV9jaGFyYnVmZmVyLmpvaW4oc2VsZi5saW5lYnVmZmVyKQogICAgICAgICAgICAgc2VsZi5saW5lYnVmZmVyID0gTm9uZQogCiAgICAgICAgICMgcmVhZCB1bnRpbCB3ZSBnZXQgdGhlIHJlcXVpcmVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIChpZiBhdmFpbGFibGUpCkBAIC00OTgsNyArNDk5LDcgQEAKICAgICAgICAgaWYgY2hhcnMgPCAwOgogICAgICAgICAgICAgIyBSZXR1cm4gZXZlcnl0aGluZyB3ZSd2ZSBnb3QKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY2hhcmJ1ZmZlcgotICAgICAgICAgICAgc2VsZi5jaGFyYnVmZmVyID0gIiIKKyAgICAgICAgICAgIHNlbGYuY2hhcmJ1ZmZlciA9IHNlbGYuX2VtcHR5X2NoYXJidWZmZXIKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgUmV0dXJuIHRoZSBmaXJzdCBjaGFycyBjaGFyYWN0ZXJzCiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNoYXJidWZmZXJbOmNoYXJzXQpAQCAtNTI5LDcgKzUzMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gbGluZQogCiAgICAgICAgIHJlYWRzaXplID0gc2l6ZSBvciA3MgotICAgICAgICBsaW5lID0gIiIKKyAgICAgICAgbGluZSA9IHNlbGYuX2VtcHR5X2NoYXJidWZmZXIKICAgICAgICAgIyBJZiBzaXplIGlzIGdpdmVuLCB3ZSBjYWxsIHJlYWQoKSBvbmx5IG9uY2UKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQocmVhZHNpemUsIGZpcnN0bGluZT1UcnVlKQpAQCAtNTM3LDcgKzUzOCw4IEBACiAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSBhdCBhICJcciIgcmVhZCBvbmUgZXh0cmEgY2hhcmFjdGVyICh3aGljaCBtaWdodAogICAgICAgICAgICAgICAgICMgYmUgYSAiXG4iKSB0byBnZXQgYSBwcm9wZXIgbGluZSBlbmRpbmcuIElmIHRoZSBzdHJlYW0gaXMKICAgICAgICAgICAgICAgICAjIHRlbXBvcmFyaWx5IGV4aGF1c3RlZCB3ZSByZXR1cm4gdGhlIHdyb25nIGxpbmUgZW5kaW5nLgotICAgICAgICAgICAgICAgIGlmIGRhdGEuZW5kc3dpdGgoIlxyIik6CisgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UoZGF0YSwgc3RyKSBhbmQgZGF0YS5lbmRzd2l0aCgiXHIiKSkgb3IgXAorICAgICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKGRhdGEsIGJ5dGVzKSBhbmQgZGF0YS5lbmRzd2l0aChiIlxyIikpOgogICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHNlbGYucmVhZChzaXplPTEsIGNoYXJzPTEpCiAKICAgICAgICAgICAgIGxpbmUgKz0gZGF0YQpAQCAtNTYzLDcgKzU2NSw4IEBACiAgICAgICAgICAgICAgICAgbGluZTB3aXRob3V0ZW5kID0gbGluZXNbMF0uc3BsaXRsaW5lcyhGYWxzZSlbMF0KICAgICAgICAgICAgICAgICBpZiBsaW5lMHdpdGhlbmQgIT0gbGluZTB3aXRob3V0ZW5kOiAjIFdlIHJlYWxseSBoYXZlIGEgbGluZSBlbmQKICAgICAgICAgICAgICAgICAgICAgIyBQdXQgdGhlIHJlc3QgYmFjayB0b2dldGhlciBhbmQga2VlcCBpdCB1bnRpbCB0aGUgbmV4dCBjYWxsCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhcmJ1ZmZlciA9ICIiLmpvaW4obGluZXNbMTpdKSArIHNlbGYuY2hhcmJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoYXJidWZmZXIgPSBzZWxmLl9lbXB0eV9jaGFyYnVmZmVyLmpvaW4obGluZXNbMTpdKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGFyYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgIGlmIGtlZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUwd2l0aGVuZAogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtNTc0LDcgKzU3Nyw3IEBACiAgICAgICAgICAgICAgICAgaWYgbGluZSBhbmQgbm90IGtlZXBlbmRzOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdGxpbmVzKEZhbHNlKVswXQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiByZWFkc2l6ZTw4MDAwOgorICAgICAgICAgICAgaWYgcmVhZHNpemUgPCA4MDAwOgogICAgICAgICAgICAgICAgIHJlYWRzaXplICo9IDIKICAgICAgICAgcmV0dXJuIGxpbmUKIApAQCAtNjAzLDcgKzYwNiw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYnl0ZWJ1ZmZlciA9IGIiIgotICAgICAgICBzZWxmLmNoYXJidWZmZXIgPSAiIgorICAgICAgICBzZWxmLmNoYXJidWZmZXIgPSBzZWxmLl9lbXB0eV9jaGFyYnVmZmVyCiAgICAgICAgIHNlbGYubGluZWJ1ZmZlciA9IE5vbmUKIAogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zLnB5IGIvTGliL2NvbGxlY3Rpb25zLnB5CmluZGV4IGIyYTU5MGIuLmVjN2ZhZWIgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMucHkKQEAgLTEzLDYgKzEzLDcgQEAKIGltcG9ydCBoZWFwcSBhcyBfaGVhcHEKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkgYXMgX3Byb3h5CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcmVwZWF0IGFzIF9yZXBlYXQsIGNoYWluIGFzIF9jaGFpbiwgc3Rhcm1hcCBhcyBfc3Rhcm1hcAorZnJvbSByZXBybGliIGltcG9ydCByZWN1cnNpdmVfcmVwciBhcyBfcmVjdXJzaXZlX3JlcHIKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBPcmRlcmVkRGljdApAQCAtMjYsNTkgKzI3LDU3IEBACiAgICAgIyBBbiBpbmhlcml0ZWQgZGljdCBtYXBzIGtleXMgdG8gdmFsdWVzLgogICAgICMgVGhlIGluaGVyaXRlZCBkaWN0IHByb3ZpZGVzIF9fZ2V0aXRlbV9fLCBfX2xlbl9fLCBfX2NvbnRhaW5zX18sIGFuZCBnZXQuCiAgICAgIyBUaGUgcmVtYWluaW5nIG1ldGhvZHMgYXJlIG9yZGVyLWF3YXJlLgotICAgICMgQmlnLU8gcnVubmluZyB0aW1lcyBmb3IgYWxsIG1ldGhvZHMgYXJlIHRoZSBzYW1lIGFzIGZvciByZWd1bGFyIGRpY3Rpb25hcmllcy4KKyAgICAjIEJpZy1PIHJ1bm5pbmcgdGltZXMgZm9yIGFsbCBtZXRob2RzIGFyZSB0aGUgc2FtZSBhcyByZWd1bGFyIGRpY3Rpb25hcmllcy4KIAotICAgICMgVGhlIGludGVybmFsIHNlbGYuX19tYXAgZGljdGlvbmFyeSBtYXBzIGtleXMgdG8gbGlua3MgaW4gYSBkb3VibHkgbGlua2VkIGxpc3QuCisgICAgIyBUaGUgaW50ZXJuYWwgc2VsZi5fX21hcCBkaWN0IG1hcHMga2V5cyB0byBsaW5rcyBpbiBhIGRvdWJseSBsaW5rZWQgbGlzdC4KICAgICAjIFRoZSBjaXJjdWxhciBkb3VibHkgbGlua2VkIGxpc3Qgc3RhcnRzIGFuZCBlbmRzIHdpdGggYSBzZW50aW5lbCBlbGVtZW50LgogICAgICMgVGhlIHNlbnRpbmVsIGVsZW1lbnQgbmV2ZXIgZ2V0cyBkZWxldGVkICh0aGlzIHNpbXBsaWZpZXMgdGhlIGFsZ29yaXRobSkuCisgICAgIyBUaGUgc2VudGluZWwgaXMgaW4gc2VsZi5fX2hhcmRyb290IHdpdGggYSB3ZWFrcmVmIHByb3h5IGluIHNlbGYuX19yb290LgogICAgICMgVGhlIHByZXYvbmV4dCBsaW5rcyBhcmUgd2Vha3JlZiBwcm94aWVzICh0byBwcmV2ZW50IGNpcmN1bGFyIHJlZmVyZW5jZXMpLgogICAgICMgSW5kaXZpZHVhbCBsaW5rcyBhcmUga2VwdCBhbGl2ZSBieSB0aGUgaGFyZCByZWZlcmVuY2UgaW4gc2VsZi5fX21hcC4KICAgICAjIFRob3NlIGhhcmQgcmVmZXJlbmNlcyBkaXNhcHBlYXIgd2hlbiBhIGtleSBpcyBkZWxldGVkIGZyb20gYW4gT3JkZXJlZERpY3QuCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgICcnJ0luaXRpYWxpemUgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LiAgU2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIGZvcgotICAgICAgICByZWd1bGFyIGRpY3Rpb25hcmllcywgYnV0IGtleXdvcmQgYXJndW1lbnRzIGFyZSBub3QgcmVjb21tZW5kZWQKLSAgICAgICAgYmVjYXVzZSB0aGVpciBpbnNlcnRpb24gb3JkZXIgaXMgYXJiaXRyYXJ5LgorICAgICAgICAnJydJbml0aWFsaXplIGFuIG9yZGVyZWQgZGljdGlvbmFyeS4gIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMKKyAgICAgICAgcmVndWxhciBkaWN0aW9uYXJpZXMsIGJ1dCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UKKyAgICAgICAgdGhlaXIgaW5zZXJ0aW9uIG9yZGVyIGlzIGFyYml0cmFyeS4KIAogICAgICAgICAnJycKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAlIGxlbihhcmdzKSkKLSAgICAgICAgc2VsZi5fX2luX3JlcHIgPSBGYWxzZSAgICAgICAgICAgICAgIyBkZXRlY3RzIHJlY3Vyc2l2ZSByZXByCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX19yb290CiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuX19yb290ID0gcm9vdCA9IF9MaW5rKCkgICAgIyBzZW50aW5lbCBub2RlIGZvciB0aGUgZG91Ymx5IGxpbmtlZCBsaXN0CisgICAgICAgICAgICBzZWxmLl9faGFyZHJvb3QgPSBfTGluaygpCisgICAgICAgICAgICBzZWxmLl9fcm9vdCA9IHJvb3QgPSBfcHJveHkoc2VsZi5fX2hhcmRyb290KQogICAgICAgICAgICAgcm9vdC5wcmV2ID0gcm9vdC5uZXh0ID0gcm9vdAogICAgICAgICAgICAgc2VsZi5fX21hcCA9IHt9CiAgICAgICAgIHNlbGYuX191cGRhdGUoKmFyZ3MsICoqa3dkcykKIAotICAgIGRlZiBjbGVhcihzZWxmKToKLSAgICAgICAgJ29kLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBvZC4nCi0gICAgICAgIHJvb3QgPSBzZWxmLl9fcm9vdAotICAgICAgICByb290LnByZXYgPSByb290Lm5leHQgPSByb290Ci0gICAgICAgIHNlbGYuX19tYXAuY2xlYXIoKQotICAgICAgICBkaWN0LmNsZWFyKHNlbGYpCi0KLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgIGRpY3Rfc2V0aXRlbT1kaWN0Ll9fc2V0aXRlbV9fLCBwcm94eT1fcHJveHksIExpbms9X0xpbmspOgogICAgICAgICAnb2QuX19zZXRpdGVtX18oaSwgeSkgPD09PiBvZFtpXT15JwotICAgICAgICAjIFNldHRpbmcgYSBuZXcgaXRlbSBjcmVhdGVzIGEgbmV3IGxpbmsgd2hpY2ggZ29lcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5rZWQKLSAgICAgICAgIyBsaXN0LCBhbmQgdGhlIGluaGVyaXRlZCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGtleS92YWx1ZSBwYWlyLgorICAgICAgICAjIFNldHRpbmcgYSBuZXcgaXRlbSBjcmVhdGVzIGEgbmV3IGxpbmsgYXQgdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QsCisgICAgICAgICMgYW5kIHRoZSBpbmhlcml0ZWQgZGljdGlvbmFyeSBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBrZXkvdmFsdWUgcGFpci4KICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmOgotICAgICAgICAgICAgc2VsZi5fX21hcFtrZXldID0gbGluayA9IF9MaW5rKCkKKyAgICAgICAgICAgIHNlbGYuX19tYXBba2V5XSA9IGxpbmsgPSBMaW5rKCkKICAgICAgICAgICAgIHJvb3QgPSBzZWxmLl9fcm9vdAogICAgICAgICAgICAgbGFzdCA9IHJvb3QucHJldgogICAgICAgICAgICAgbGluay5wcmV2LCBsaW5rLm5leHQsIGxpbmsua2V5ID0gbGFzdCwgcm9vdCwga2V5Ci0gICAgICAgICAgICBsYXN0Lm5leHQgPSByb290LnByZXYgPSBfcHJveHkobGluaykKLSAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKQorICAgICAgICAgICAgbGFzdC5uZXh0ID0gbGluaworICAgICAgICAgICAgcm9vdC5wcmV2ID0gcHJveHkobGluaykKKyAgICAgICAgZGljdF9zZXRpdGVtKHNlbGYsIGtleSwgdmFsdWUpCiAKLSAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKKyAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5LCBkaWN0X2RlbGl0ZW09ZGljdC5fX2RlbGl0ZW1fXyk6CiAgICAgICAgICdvZC5fX2RlbGl0ZW1fXyh5KSA8PT0+IGRlbCBvZFt5XScKLSAgICAgICAgIyBEZWxldGluZyBhbiBleGlzdGluZyBpdGVtIHVzZXMgc2VsZi5fX21hcCB0byBmaW5kIHRoZSBsaW5rIHdoaWNoIGlzCi0gICAgICAgICMgdGhlbiByZW1vdmVkIGJ5IHVwZGF0aW5nIHRoZSBsaW5rcyBpbiB0aGUgcHJlZGVjZXNzb3IgYW5kIHN1Y2Nlc3NvciBub2Rlcy4KLSAgICAgICAgZGljdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgICMgRGVsZXRpbmcgYW4gZXhpc3RpbmcgaXRlbSB1c2VzIHNlbGYuX19tYXAgdG8gZmluZCB0aGUgbGluayB3aGljaCBnZXRzCisgICAgICAgICMgcmVtb3ZlZCBieSB1cGRhdGluZyB0aGUgbGlua3MgaW4gdGhlIHByZWRlY2Vzc29yIGFuZCBzdWNjZXNzb3Igbm9kZXMuCisgICAgICAgIGRpY3RfZGVsaXRlbShzZWxmLCBrZXkpCiAgICAgICAgIGxpbmsgPSBzZWxmLl9fbWFwLnBvcChrZXkpCi0gICAgICAgIGxpbmsucHJldi5uZXh0ID0gbGluay5uZXh0Ci0gICAgICAgIGxpbmsubmV4dC5wcmV2ID0gbGluay5wcmV2CisgICAgICAgIGxpbmtfcHJldiA9IGxpbmsucHJldgorICAgICAgICBsaW5rX25leHQgPSBsaW5rLm5leHQKKyAgICAgICAgbGlua19wcmV2Lm5leHQgPSBsaW5rX25leHQKKyAgICAgICAgbGlua19uZXh0LnByZXYgPSBsaW5rX3ByZXYKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgJ29kLl9faXRlcl9fKCkgPD09PiBpdGVyKG9kKScKQEAgLTk4LDYgKzk3LDY5IEBACiAgICAgICAgICAgICB5aWVsZCBjdXJyLmtleQogICAgICAgICAgICAgY3VyciA9IGN1cnIucHJldgogCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnb2QuY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG9kLicKKyAgICAgICAgcm9vdCA9IHNlbGYuX19yb290CisgICAgICAgIHJvb3QucHJldiA9IHJvb3QubmV4dCA9IHJvb3QKKyAgICAgICAgc2VsZi5fX21hcC5jbGVhcigpCisgICAgICAgIGRpY3QuY2xlYXIoc2VsZikKKworICAgIGRlZiBwb3BpdGVtKHNlbGYsIGxhc3Q9VHJ1ZSk6CisgICAgICAgICcnJ29kLnBvcGl0ZW0oKSAtPiAoaywgdiksIHJldHVybiBhbmQgcmVtb3ZlIGEgKGtleSwgdmFsdWUpIHBhaXIuCisgICAgICAgIFBhaXJzIGFyZSByZXR1cm5lZCBpbiBMSUZPIG9yZGVyIGlmIGxhc3QgaXMgdHJ1ZSBvciBGSUZPIG9yZGVyIGlmIGZhbHNlLgorCisgICAgICAgICcnJworICAgICAgICBpZiBub3Qgc2VsZjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdkaWN0aW9uYXJ5IGlzIGVtcHR5JykKKyAgICAgICAgcm9vdCA9IHNlbGYuX19yb290CisgICAgICAgIGlmIGxhc3Q6CisgICAgICAgICAgICBsaW5rID0gcm9vdC5wcmV2CisgICAgICAgICAgICBsaW5rX3ByZXYgPSBsaW5rLnByZXYKKyAgICAgICAgICAgIGxpbmtfcHJldi5uZXh0ID0gcm9vdAorICAgICAgICAgICAgcm9vdC5wcmV2ID0gbGlua19wcmV2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5rID0gcm9vdC5uZXh0CisgICAgICAgICAgICBsaW5rX25leHQgPSBsaW5rLm5leHQKKyAgICAgICAgICAgIHJvb3QubmV4dCA9IGxpbmtfbmV4dAorICAgICAgICAgICAgbGlua19uZXh0LnByZXYgPSByb290CisgICAgICAgIGtleSA9IGxpbmsua2V5CisgICAgICAgIGRlbCBzZWxmLl9fbWFwW2tleV0KKyAgICAgICAgdmFsdWUgPSBkaWN0LnBvcChzZWxmLCBrZXkpCisgICAgICAgIHJldHVybiBrZXksIHZhbHVlCisKKyAgICBkZWYgbW92ZV90b19lbmQoc2VsZiwga2V5LCBsYXN0PVRydWUpOgorICAgICAgICAnJydNb3ZlIGFuIGV4aXN0aW5nIGVsZW1lbnQgdG8gdGhlIGVuZCAob3IgYmVnaW5uaW5nIGlmIGxhc3Q9PUZhbHNlKS4KKworICAgICAgICBSYWlzZXMgS2V5RXJyb3IgaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCisgICAgICAgIFdoZW4gbGFzdD1UcnVlLCBhY3RzIGxpa2UgYSBmYXN0IHZlcnNpb24gb2Ygc2VsZltrZXldPXNlbGYucG9wKGtleSkuCisKKyAgICAgICAgJycnCisgICAgICAgIGxpbmsgPSBzZWxmLl9fbWFwW2tleV0KKyAgICAgICAgbGlua19wcmV2ID0gbGluay5wcmV2CisgICAgICAgIGxpbmtfbmV4dCA9IGxpbmsubmV4dAorICAgICAgICBsaW5rX3ByZXYubmV4dCA9IGxpbmtfbmV4dAorICAgICAgICBsaW5rX25leHQucHJldiA9IGxpbmtfcHJldgorICAgICAgICByb290ID0gc2VsZi5fX3Jvb3QKKyAgICAgICAgaWYgbGFzdDoKKyAgICAgICAgICAgIGxhc3QgPSByb290LnByZXYKKyAgICAgICAgICAgIGxpbmsucHJldiA9IGxhc3QKKyAgICAgICAgICAgIGxpbmsubmV4dCA9IHJvb3QKKyAgICAgICAgICAgIGxhc3QubmV4dCA9IHJvb3QucHJldiA9IGxpbmsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpcnN0ID0gcm9vdC5uZXh0CisgICAgICAgICAgICBsaW5rLnByZXYgPSByb290CisgICAgICAgICAgICBsaW5rLm5leHQgPSBmaXJzdAorICAgICAgICAgICAgcm9vdC5uZXh0ID0gZmlyc3QucHJldiA9IGxpbmsKKworICAgIGRlZiBfX3NpemVvZl9fKHNlbGYpOgorICAgICAgICBzaXplb2YgPSBfc3lzLmdldHNpemVvZgorICAgICAgICBuID0gbGVuKHNlbGYpICsgMSAgICAgICAgICAgICAgICAgICAgICAgIyBudW1iZXIgb2YgbGlua3MgaW5jbHVkaW5nIHJvb3QKKyAgICAgICAgc2l6ZSA9IHNpemVvZihzZWxmLl9fZGljdF9fKSAgICAgICAgICAgICMgaW5zdGFuY2UgZGljdGlvbmFyeQorICAgICAgICBzaXplICs9IHNpemVvZihzZWxmLl9fbWFwKSAqIDIgICAgICAgICAgIyBpbnRlcm5hbCBkaWN0IGFuZCBpbmhlcml0ZWQgZGljdAorICAgICAgICBzaXplICs9IHNpemVvZihzZWxmLl9faGFyZHJvb3QpICogbiAgICAgIyBsaW5rIG9iamVjdHMKKyAgICAgICAgc2l6ZSArPSBzaXplb2Yoc2VsZi5fX3Jvb3QpICogbiAgICAgICAgICMgcHJveHkgb2JqZWN0cworICAgICAgICByZXR1cm4gc2l6ZQorCiAgICAgdXBkYXRlID0gX191cGRhdGUgPSBNdXRhYmxlTWFwcGluZy51cGRhdGUKICAgICBrZXlzID0gTXV0YWJsZU1hcHBpbmcua2V5cwogICAgIHZhbHVlcyA9IE11dGFibGVNYXBwaW5nLnZhbHVlcwpAQCAtMTA3LDYgKzE2OSwxMSBAQAogICAgIF9fbWFya2VyID0gb2JqZWN0KCkKIAogICAgIGRlZiBwb3Aoc2VsZiwga2V5LCBkZWZhdWx0PV9fbWFya2VyKToKKyAgICAgICAgJycnb2QucG9wKGtbLGRdKSAtPiB2LCByZW1vdmUgc3BlY2lmaWVkIGtleSBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgIHZhbHVlLiAgSWYga2V5IGlzIG5vdCBmb3VuZCwgZCBpcyByZXR1cm5lZCBpZiBnaXZlbiwgb3RoZXJ3aXNlIEtleUVycm9yCisgICAgICAgIGlzIHJhaXNlZC4KKworICAgICAgICAnJycKICAgICAgICAgaWYga2V5IGluIHNlbGY6CiAgICAgICAgICAgICByZXN1bHQgPSBzZWxmW2tleV0KICAgICAgICAgICAgIGRlbCBzZWxmW2tleV0KQEAgLTEyMiwyOSArMTg5LDEyIEBACiAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIAotICAgIGRlZiBwb3BpdGVtKHNlbGYsIGxhc3Q9VHJ1ZSk6Ci0gICAgICAgICcnJ29kLnBvcGl0ZW0oKSAtPiAoaywgdiksIHJldHVybiBhbmQgcmVtb3ZlIGEgKGtleSwgdmFsdWUpIHBhaXIuCi0gICAgICAgIFBhaXJzIGFyZSByZXR1cm5lZCBpbiBMSUZPIG9yZGVyIGlmIGxhc3QgaXMgdHJ1ZSBvciBGSUZPIG9yZGVyIGlmIGZhbHNlLgotCi0gICAgICAgICcnJwotICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdkaWN0aW9uYXJ5IGlzIGVtcHR5JykKLSAgICAgICAga2V5ID0gbmV4dChyZXZlcnNlZChzZWxmKSBpZiBsYXN0IGVsc2UgaXRlcihzZWxmKSkKLSAgICAgICAgdmFsdWUgPSBzZWxmLnBvcChrZXkpCi0gICAgICAgIHJldHVybiBrZXksIHZhbHVlCi0KKyAgICBAX3JlY3Vyc2l2ZV9yZXByKCkKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgICdvZC5fX3JlcHJfXygpIDw9PT4gcmVwcihvZCknCi0gICAgICAgIGlmIHNlbGYuX19pbl9yZXByOgotICAgICAgICAgICAgcmV0dXJuICcuLi4nCiAgICAgICAgIGlmIG5vdCBzZWxmOgogICAgICAgICAgICAgcmV0dXJuICclcygpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywpCi0gICAgICAgIHNlbGYuX19pbl9yZXByID0gVHJ1ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXN1bHQgPSAnJXMoJXIpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbGlzdChzZWxmLml0ZW1zKCkpKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fX2luX3JlcHIgPSBGYWxzZQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiAnJXMoJXIpJyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbGlzdChzZWxmLml0ZW1zKCkpKQogCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgICdSZXR1cm4gc3RhdGUgaW5mb3JtYXRpb24gZm9yIHBpY2tsaW5nJwpAQCAtMTYyLDE0ICsyMTIsMTQgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9ta2V5cyhjbHMsIGl0ZXJhYmxlLCB2YWx1ZT1Ob25lKToKLSAgICAgICAgJycnT0QuZnJvbWtleXMoU1ssIHZdKSAtPiBOZXcgb3JkZXJlZCBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tIFMKLSAgICAgICAgYW5kIHZhbHVlcyBlcXVhbCB0byB2ICh3aGljaCBkZWZhdWx0cyB0byBOb25lKS4KKyAgICAgICAgJycnT0QuZnJvbWtleXMoU1ssIHZdKSAtPiBOZXcgb3JkZXJlZCBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tIFMuCisgICAgICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBkZWZhdWx0cyB0byBOb25lLgogCiAgICAgICAgICcnJwotICAgICAgICBkID0gY2xzKCkKKyAgICAgICAgc2VsZiA9IGNscygpCiAgICAgICAgIGZvciBrZXkgaW4gaXRlcmFibGU6Ci0gICAgICAgICAgICBkW2tleV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gZAorICAgICAgICAgICAgc2VsZltrZXldID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICAnJydvZC5fX2VxX18oeSkgPD09PiBvZD09eS4gIENvbXBhcmlzb24gdG8gYW5vdGhlciBPRCBpcyBvcmRlci1zZW5zaXRpdmUKQEAgLTE4MSwxNCArMjMxLDYgQEAKICAgICAgICAgICAgICAgICAgICBhbGwocD09cSBmb3IgcCwgcSBpbiB6aXAoc2VsZi5pdGVtcygpLCBvdGhlci5pdGVtcygpKSkKICAgICAgICAgcmV0dXJuIGRpY3QuX19lcV9fKHNlbGYsIG90aGVyKQogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICcnJ29kLl9fbmVfXyh5KSA8PT0+IG9kIT15LiAgQ29tcGFyaXNvbiB0byBhbm90aGVyIE9EIGlzIG9yZGVyLXNlbnNpdGl2ZQotICAgICAgICB3aGlsZSBjb21wYXJpc29uIHRvIGEgcmVndWxhciBtYXBwaW5nIGlzIG9yZGVyLWluc2Vuc2l0aXZlLgotCi0gICAgICAgICcnJwotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQotCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgbmFtZWR0dXBsZQpAQCAtMjU3LDYgKzI5OSw3IEBACiAgICAgICAgIF9fc2xvdHNfXyA9ICgpIFxuCiAgICAgICAgIF9maWVsZHMgPSAlKGZpZWxkX25hbWVzKXIgXG4KICAgICAgICAgZGVmIF9fbmV3X18oX2NscywgJShhcmd0eHQpcyk6CisgICAgICAgICAgICAnQ3JlYXRlIG5ldyBpbnN0YW5jZSBvZiAlKHR5cGVuYW1lKXMoJShhcmd0eHQpcyknCiAgICAgICAgICAgICByZXR1cm4gX3R1cGxlLl9fbmV3X18oX2NscywgKCUoYXJndHh0KXMpKSBcbgogICAgICAgICBAY2xhc3NtZXRob2QKICAgICAgICAgZGVmIF9tYWtlKGNscywgaXRlcmFibGUsIG5ldz10dXBsZS5fX25ld19fLCBsZW49bGVuKToKQEAgLTI2Niw3ICszMDksOCBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgJShudW1maWVsZHMpZCBhcmd1bWVudHMsIGdvdCAlJWQnICUlIGxlbihyZXN1bHQpKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCBcbgogICAgICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gJyUodHlwZW5hbWUpcyglKHJlcHJ0eHQpcyknICUlIHNlbGYgXG4KKyAgICAgICAgICAgICdSZXR1cm4gYSBuaWNlbHkgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIHN0cmluZycKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcoJShyZXBydHh0KXMpJyAlJSBzZWxmIFxuCiAgICAgICAgIGRlZiBfYXNkaWN0KHNlbGYpOgogICAgICAgICAgICAgJ1JldHVybiBhIG5ldyBPcmRlcmVkRGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcycKICAgICAgICAgICAgIHJldHVybiBPcmRlcmVkRGljdCh6aXAoc2VsZi5fZmllbGRzLCBzZWxmKSkgXG4KQEAgLTI3Nyw5ICszMjEsMTAgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdHb3QgdW5leHBlY3RlZCBmaWVsZCBuYW1lczogJSVyJyAlJSBrd2RzLmtleXMoKSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQgXG4KICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgJ1JldHVybiBzZWxmIGFzIGEgcGxhaW4gdHVwbGUuICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgICAgICByZXR1cm4gdHVwbGUoc2VsZikgXG5cbicnJyAlIGxvY2FscygpCiAgICAgZm9yIGksIG5hbWUgaW4gZW51bWVyYXRlKGZpZWxkX25hbWVzKToKLSAgICAgICAgdGVtcGxhdGUgKz0gJyAgICAgICAgJXMgPSBfcHJvcGVydHkoX2l0ZW1nZXR0ZXIoJWQpKVxuJyAlIChuYW1lLCBpKQorICAgICAgICB0ZW1wbGF0ZSArPSAiICAgICAgICAlcyA9IF9wcm9wZXJ0eShfaXRlbWdldHRlciglZCksIGRvYz0nQWxpYXMgZm9yIGZpZWxkIG51bWJlciAlZCcpXG4iICUgKG5hbWUsIGksIGkpCiAgICAgaWYgdmVyYm9zZToKICAgICAgICAgcHJpbnQodGVtcGxhdGUpCiAKQEAgLTI5MCw3ICszMzUsNyBAQAogICAgIHRyeToKICAgICAgICAgZXhlYyh0ZW1wbGF0ZSwgbmFtZXNwYWNlKQogICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBlOgotICAgICAgICByYWlzZSBTeW50YXhFcnJvcihlLm1zZyArICc6XG4nICsgdGVtcGxhdGUpIGZyb20gZQorICAgICAgICByYWlzZSBTeW50YXhFcnJvcihlLm1zZyArICc6XG5cbicgKyB0ZW1wbGF0ZSkKICAgICByZXN1bHQgPSBuYW1lc3BhY2VbdHlwZW5hbWVdCiAKICAgICAjIEZvciBwaWNrbGluZyB0byB3b3JrLCB0aGUgX19tb2R1bGVfXyB2YXJpYWJsZSBuZWVkcyB0byBiZSBzZXQgdG8gdGhlIGZyYW1lCkBAIC0zMDksNiArMzU0LDE3IEBACiAjIyMgIENvdW50ZXIKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCitkZWYgX2NvdW50X2VsZW1lbnRzKG1hcHBpbmcsIGl0ZXJhYmxlKToKKyAgICAnVGFsbHkgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUuJworICAgIG1hcHBpbmdfZ2V0ID0gbWFwcGluZy5nZXQKKyAgICBmb3IgZWxlbSBpbiBpdGVyYWJsZToKKyAgICAgICAgbWFwcGluZ1tlbGVtXSA9IG1hcHBpbmdfZ2V0KGVsZW0sIDApICsgMQorCit0cnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMb2FkIEMgaGVscGVyIGZ1bmN0aW9uIGlmIGF2YWlsYWJsZQorICAgIGZyb20gX2NvbGxlY3Rpb25zIGltcG9ydCBfY291bnRfZWxlbWVudHMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCisKIGNsYXNzIENvdW50ZXIoZGljdCk6CiAgICAgJycnRGljdCBzdWJjbGFzcyBmb3IgY291bnRpbmcgaGFzaGFibGUgaXRlbXMuICBTb21ldGltZXMgY2FsbGVkIGEgYmFnCiAgICAgb3IgbXVsdGlzZXQuICBFbGVtZW50cyBhcmUgc3RvcmVkIGFzIGRpY3Rpb25hcnkga2V5cyBhbmQgdGhlaXIgY291bnRzCkBAIC00NTIsMTIgKzUwOCwzNyBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHN1cGVyKCkudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZl9nZXQgPSBzZWxmLmdldAotICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGl0ZXJhYmxlOgotICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gMSArIHNlbGZfZ2V0KGVsZW0sIDApCisgICAgICAgICAgICAgICAgX2NvdW50X2VsZW1lbnRzKHNlbGYsIGl0ZXJhYmxlKQogICAgICAgICBpZiBrd2RzOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoa3dkcykKIAorICAgIGRlZiBzdWJ0cmFjdChzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgICAgICAnJydMaWtlIGRpY3QudXBkYXRlKCkgYnV0IHN1YnRyYWN0cyBjb3VudHMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KKyAgICAgICAgQ291bnRzIGNhbiBiZSByZWR1Y2VkIGJlbG93IHplcm8uICBCb3RoIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgYXJlCisgICAgICAgIGFsbG93ZWQgdG8gY29udGFpbiB6ZXJvIGFuZCBuZWdhdGl2ZSBjb3VudHMuCisKKyAgICAgICAgU291cmNlIGNhbiBiZSBhbiBpdGVyYWJsZSwgYSBkaWN0aW9uYXJ5LCBvciBhbm90aGVyIENvdW50ZXIgaW5zdGFuY2UuCisKKyAgICAgICAgPj4+IGMgPSBDb3VudGVyKCd3aGljaCcpCisgICAgICAgID4+PiBjLnN1YnRyYWN0KCd3aXRjaCcpICAgICAgICAgICAgICMgc3VidHJhY3QgZWxlbWVudHMgZnJvbSBhbm90aGVyIGl0ZXJhYmxlCisgICAgICAgID4+PiBjLnN1YnRyYWN0KENvdW50ZXIoJ3dhdGNoJykpICAgICMgc3VidHJhY3QgZWxlbWVudHMgZnJvbSBhbm90aGVyIGNvdW50ZXIKKyAgICAgICAgPj4+IGNbJ2gnXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyAyIGluIHdoaWNoLCBtaW51cyAxIGluIHdpdGNoLCBtaW51cyAxIGluIHdhdGNoCisgICAgICAgIDAKKyAgICAgICAgPj4+IGNbJ3cnXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyAxIGluIHdoaWNoLCBtaW51cyAxIGluIHdpdGNoLCBtaW51cyAxIGluIHdhdGNoCisgICAgICAgIC0xCisKKyAgICAgICAgJycnCisgICAgICAgIGlmIGl0ZXJhYmxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZl9nZXQgPSBzZWxmLmdldAorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVyYWJsZSwgTWFwcGluZyk6CisgICAgICAgICAgICAgICAgZm9yIGVsZW0sIGNvdW50IGluIGl0ZXJhYmxlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGZbZWxlbV0gPSBzZWxmX2dldChlbGVtLCAwKSAtIGNvdW50CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGl0ZXJhYmxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gc2VsZl9nZXQoZWxlbSwgMCkgLSAxCisgICAgICAgIGlmIGt3ZHM6CisgICAgICAgICAgICBzZWxmLnN1YnRyYWN0KGt3ZHMpCisKICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgJ1JldHVybiBhIHNoYWxsb3cgY29weS4nCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmKQpAQCAtNTYxLDYgKzY0MiwxMDYgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjICBDaGFpbk1hcCAoaGVscGVyIGZvciBjb25maWdwYXJzZXIpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgX0NoYWluTWFwKE11dGFibGVNYXBwaW5nKToKKyAgICAnJycgQSBDaGFpbk1hcCBncm91cHMgbXVsdGlwbGUgZGljdHMgKG9yIG90aGVyIG1hcHBpbmdzKSB0b2dldGhlcgorICAgIHRvIGNyZWF0ZSBhIHNpbmdsZSwgdXBkYXRlYWJsZSB2aWV3LgorCisgICAgVGhlIHVuZGVybHlpbmcgbWFwcGluZ3MgYXJlIHN0b3JlZCBpbiBhIGxpc3QuICBUaGF0IGxpc3QgaXMgcHVibGljIGFuZCBjYW4KKyAgICBhY2Nlc3NlZCBvciB1cGRhdGVkIHVzaW5nIHRoZSAqbWFwcyogYXR0cmlidXRlLiAgVGhlcmUgaXMgbm8gb3RoZXIgc3RhdGUuCisKKyAgICBMb29rdXBzIHNlYXJjaCB0aGUgdW5kZXJseWluZyBtYXBwaW5ncyBzdWNjZXNzaXZlbHkgdW50aWwgYSBrZXkgaXMgZm91bmQuCisgICAgSW4gY29udHJhc3QsIHdyaXRlcywgdXBkYXRlcywgYW5kIGRlbGV0aW9ucyBvbmx5IG9wZXJhdGUgb24gdGhlIGZpcnN0CisgICAgbWFwcGluZy4KKworICAgICcnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICptYXBzKToKKyAgICAgICAgJycnSW5pdGlhbGl6ZSBhIENoYWluTWFwIGJ5IHNldHRpbmcgKm1hcHMqIHRvIHRoZSBnaXZlbiBtYXBwaW5ncy4KKyAgICAgICAgSWYgbm8gbWFwcGluZ3MgYXJlIHByb3ZpZGVkLCBhIHNpbmdsZSBlbXB0eSBkaWN0aW9uYXJ5IGlzIHVzZWQuCisKKyAgICAgICAgJycnCisgICAgICAgIHNlbGYubWFwcyA9IGxpc3QobWFwcykgb3IgW3t9XSAgICAgICAgICAjIGFsd2F5cyBhdCBsZWFzdCBvbmUgbWFwCisKKyAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFwczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGluZ1trZXldICAgICAgICAgICAgICMgY2FuJ3QgdXNlICdrZXkgaW4gbWFwcGluZycgd2l0aCBkZWZhdWx0ZGljdAorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIHNlbGYuX19taXNzaW5nX18oa2V5KSAgICAgICAgICAgICMgc3VwcG9ydCBzdWJjbGFzc2VzIHRoYXQgZGVmaW5lIF9fbWlzc2luZ19fCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGZba2V5XSBpZiBrZXkgaW4gc2VsZiBlbHNlIGRlZmF1bHQKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNldCgpLnVuaW9uKCpzZWxmLm1hcHMpKSAgICAgIyByZXVzZXMgc3RvcmVkIGhhc2ggdmFsdWVzIGlmIHBvc3NpYmxlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHNldCgpLnVuaW9uKCpzZWxmLm1hcHMpKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gYW55KGtleSBpbiBtIGZvciBtIGluIHNlbGYubWFwcykKKworICAgIEBfcmVjdXJzaXZlX3JlcHIoKQorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHsxfSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYsICcsICcuam9pbihtYXAocmVwciwgc2VsZi5tYXBzKSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbWtleXMoY2xzLCBpdGVyYWJsZSwgKmFyZ3MpOgorICAgICAgICAnQ3JlYXRlIGEgQ2hhaW5NYXAgd2l0aCBhIHNpbmdsZSBkaWN0IGNyZWF0ZWQgZnJvbSB0aGUgaXRlcmFibGUuJworICAgICAgICByZXR1cm4gY2xzKGRpY3QuZnJvbWtleXMoaXRlcmFibGUsICphcmdzKSkKKworICAgIGRlZiBjb3B5KHNlbGYpOgorICAgICAgICAnTmV3IENoYWluTWFwIG9yIHN1YmNsYXNzIHdpdGggYSBuZXcgY29weSBvZiBtYXBzWzBdIGFuZCByZWZzIHRvIG1hcHNbMTpdJworICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5tYXBzWzBdLmNvcHkoKSwgKnNlbGYubWFwc1sxOl0pCisKKyAgICBfX2NvcHlfXyA9IGNvcHkKKworICAgIGRlZiBuZXdfY2hpbGQoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucHVzaCgpCisgICAgICAgICdOZXcgQ2hhaW5NYXAgd2l0aCBhIG5ldyBkaWN0IGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLicKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHt9LCAqc2VsZi5tYXBzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudHMoc2VsZik6ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wb3AoKQorICAgICAgICAnTmV3IENoYWluTWFwIGZyb20gbWFwc1sxOl0uJworICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oKnNlbGYubWFwc1sxOl0pCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgIHNlbGYubWFwc1swXVtrZXldID0gdmFsdWUKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5tYXBzWzBdW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ0tleSBub3QgZm91bmQgaW4gdGhlIGZpcnN0IG1hcHBpbmc6IHshcn0nLmZvcm1hdChrZXkpKQorCisgICAgZGVmIHBvcGl0ZW0oc2VsZik6CisgICAgICAgICdSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIHBhaXIgZnJvbSBtYXBzWzBdLiBSYWlzZSBLZXlFcnJvciBpcyBtYXBzWzBdIGlzIGVtcHR5LicKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubWFwc1swXS5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIGtleXMgZm91bmQgaW4gdGhlIGZpcnN0IG1hcHBpbmcuJykKKworICAgIGRlZiBwb3Aoc2VsZiwga2V5LCAqYXJncyk6CisgICAgICAgICdSZW1vdmUgKmtleSogZnJvbSBtYXBzWzBdIGFuZCByZXR1cm4gaXRzIHZhbHVlLiBSYWlzZSBLZXlFcnJvciBpZiAqa2V5KiBub3QgaW4gbWFwc1swXS4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcHNbMF0ucG9wKGtleSwgKmFyZ3MpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdLZXkgbm90IGZvdW5kIGluIHRoZSBmaXJzdCBtYXBwaW5nOiB7IXJ9Jy5mb3JtYXQoa2V5KSkKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgJ0NsZWFyIG1hcHNbMF0sIGxlYXZpbmcgbWFwc1sxOl0gaW50YWN0LicKKyAgICAgICAgc2VsZi5tYXBzWzBdLmNsZWFyKCkKKworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIFVzZXJEaWN0CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtODAyLDYgKzk4Myw4IEBACiAgICAgICAgICAgICBuZXcgPSBuZXcuZGF0YQogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5kYXRhLnJlcGxhY2Uob2xkLCBuZXcsIG1heHNwbGl0KSkKICAgICBkZWYgcmZpbmQoc2VsZiwgc3ViLCBzdGFydD0wLCBlbmQ9X3N5cy5tYXhzaXplKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzdWIsIFVzZXJTdHJpbmcpOgorICAgICAgICAgICAgc3ViID0gc3ViLmRhdGEKICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YS5yZmluZChzdWIsIHN0YXJ0LCBlbmQpCiAgICAgZGVmIHJpbmRleChzZWxmLCBzdWIsIHN0YXJ0PTAsIGVuZD1fc3lzLm1heHNpemUpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLnJpbmRleChzdWIsIHN0YXJ0LCBlbmQpCmRpZmYgLS1naXQgYS9MaWIvY29tcGlsZWFsbC5weSBiL0xpYi9jb21waWxlYWxsLnB5CmluZGV4IDI0MzI4NDIuLmQ3OWExYmIgMTAwNjQ0Ci0tLSBhL0xpYi9jb21waWxlYWxsLnB5CisrKyBiL0xpYi9jb21waWxlYWxsLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIiTW9kdWxlL3NjcmlwdCB0byAiY29tcGlsZSIgYWxsIC5weSBmaWxlcyB0byAucHljIChvciAucHlvKSBmaWxlLgorIiIiTW9kdWxlL3NjcmlwdCB0byBieXRlLWNvbXBpbGUgYWxsIC5weSBmaWxlcyB0byAucHljIChvciAucHlvKSBmaWxlcy4KIAogV2hlbiBjYWxsZWQgYXMgYSBzY3JpcHQgd2l0aCBhcmd1bWVudHMsIHRoaXMgY29tcGlsZXMgdGhlIGRpcmVjdG9yaWVzCiBnaXZlbiBhcyBhcmd1bWVudHMgcmVjdXJzaXZlbHk7IHRoZSAtbCBvcHRpb24gcHJldmVudHMgaXQgZnJvbQpAQCAtOSwyOSArOSwzMCBAQAogcGFja2FnZXMgLS0gZm9yIG5vdywgeW91J2xsIGhhdmUgdG8gZGVhbCB3aXRoIHBhY2thZ2VzIHNlcGFyYXRlbHkuKQogCiBTZWUgbW9kdWxlIHB5X2NvbXBpbGUgZm9yIGRldGFpbHMgb2YgdGhlIGFjdHVhbCBieXRlLWNvbXBpbGF0aW9uLgotCiAiIiIKIGltcG9ydCBvcwogaW1wb3J0IHN5cworaW1wb3J0IGVycm5vCitpbXBvcnQgaW1wCiBpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN0cnVjdAotaW1wb3J0IGltcAogCi1fX2FsbF9fID0gWyJjb21waWxlX2RpciIsImNvbXBpbGVfcGF0aCJdCitfX2FsbF9fID0gWyJjb21waWxlX2RpciIsImNvbXBpbGVfZmlsZSIsImNvbXBpbGVfcGF0aCJdCiAKLWRlZiBjb21waWxlX2RpcihkaXIsIG1heGxldmVscz0xMCwgZGRpcj1Ob25lLAotICAgICAgICAgICAgICAgIGZvcmNlPTAsIHJ4PU5vbmUsIHF1aWV0PTApOgorZGVmIGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzPTEwLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLAorICAgICAgICAgICAgICAgIHF1aWV0PUZhbHNlLCBsZWdhY3k9RmFsc2UsIG9wdGltaXplPS0xKToKICAgICAiIiJCeXRlLWNvbXBpbGUgYWxsIG1vZHVsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeSB0cmVlLgogCiAgICAgQXJndW1lbnRzIChvbmx5IGRpciBpcyByZXF1aXJlZCk6CiAKICAgICBkaXI6ICAgICAgIHRoZSBkaXJlY3RvcnkgdG8gYnl0ZS1jb21waWxlCiAgICAgbWF4bGV2ZWxzOiBtYXhpbXVtIHJlY3Vyc2lvbiBsZXZlbCAoZGVmYXVsdCAxMCkKLSAgICBkZGlyOiAgICAgIGlmIGdpdmVuLCBwdXJwb3J0ZWQgZGlyZWN0b3J5IG5hbWUgKHRoaXMgaXMgdGhlCi0gICAgICAgICAgICAgICBkaXJlY3RvcnkgbmFtZSB0aGF0IHdpbGwgc2hvdyB1cCBpbiBlcnJvciBtZXNzYWdlcykKLSAgICBmb3JjZTogICAgIGlmIDEsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKLSAgICBxdWlldDogICAgIGlmIDEsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgotCisgICAgZGRpcjogICAgICB0aGUgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8gdGhlIHBhdGggdG8gdGhlCisgICAgICAgICAgICAgICBmaWxlIGFzIGl0IGlzIGNvbXBpbGVkIGludG8gZWFjaCBieXRlLWNvZGUgZmlsZS4KKyAgICBmb3JjZTogICAgIGlmIFRydWUsIGZvcmNlIGNvbXBpbGF0aW9uLCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUKKyAgICBxdWlldDogICAgIGlmIFRydWUsIGJlIHF1aWV0IGR1cmluZyBjb21waWxhdGlvbgorICAgIGxlZ2FjeTogICAgaWYgVHJ1ZSwgcHJvZHVjZSBsZWdhY3kgcHljIHBhdGhzIGluc3RlYWQgb2YgUEVQIDMxNDcgcGF0aHMKKyAgICBvcHRpbWl6ZTogIG9wdGltaXphdGlvbiBsZXZlbCBvciAtMSBmb3IgbGV2ZWwgb2YgdGhlIGludGVycHJldGVyCiAgICAgIiIiCiAgICAgaWYgbm90IHF1aWV0OgogICAgICAgICBwcmludCgnTGlzdGluZycsIGRpciwgJy4uLicpCkBAIC00Myw3NCArNDQsMTEwIEBACiAgICAgbmFtZXMuc29ydCgpCiAgICAgc3VjY2VzcyA9IDEKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgaWYgbmFtZSA9PSAnX19weWNhY2hlX18nOgorICAgICAgICAgICAgY29udGludWUKICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKQogICAgICAgICBpZiBkZGlyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZGZpbGUgPSBvcy5wYXRoLmpvaW4oZGRpciwgbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRmaWxlID0gTm9uZQotICAgICAgICBpZiByeCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIG1vID0gcnguc2VhcmNoKGZ1bGxuYW1lKQotICAgICAgICAgICAgaWYgbW86Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbG5hbWUpOgotICAgICAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCi0gICAgICAgICAgICBpZiB0YWlsID09ICcucHknOgotICAgICAgICAgICAgICAgIGlmIG5vdCBmb3JjZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChmdWxsbmFtZSkuc3RfbXRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihjZmlsZSwgJ3JiJykgYXMgY2hhbmRsZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBjaGFuZGxlLnJlYWQoOCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaWYgbm90IHF1aWV0OgotICAgICAgICAgICAgICAgICAgICBwcmludCgnQ29tcGlsaW5nJywgZnVsbG5hbWUsICcuLi4nKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb2sgPSBweV9jb21waWxlLmNvbXBpbGUoZnVsbG5hbWUsIE5vbmUsIGRmaWxlLCBUcnVlKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHF1aWV0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBjb21waWxpbmcnLCBmdWxsbmFtZSwgJy4uLicpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqICcsIGVuZD0nJykKLSAgICAgICAgICAgICAgICAgICAgIyBlc2NhcGUgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzIGluIG1zZwotICAgICAgICAgICAgICAgICAgICBtc2cgPSBlcnIubXNnLmVuY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nLCAnYmFja3NsYXNocmVwbGFjZScpCi0gICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZy5kZWNvZGUoc3lzLnN0ZG91dC5lbmNvZGluZykKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgICAgIGV4Y2VwdCAoU3ludGF4RXJyb3IsIFVuaWNvZGVFcnJvciwgSU9FcnJvcikgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJykKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogJywgZW5kPScnKQotICAgICAgICAgICAgICAgICAgICBwcmludChlLl9fY2xhc3NfXy5fX25hbWVfXyArICc6JywgZSkKLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBvayA9PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IDAKLSAgICAgICAgZWxpZiBtYXhsZXZlbHMgPiAwIGFuZCBcCi0gICAgICAgICAgICAgbmFtZSAhPSBvcy5jdXJkaXIgYW5kIG5hbWUgIT0gb3MucGFyZGlyIGFuZCBcCi0gICAgICAgICAgICAgb3MucGF0aC5pc2RpcihmdWxsbmFtZSkgYW5kIFwKLSAgICAgICAgICAgICBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpOgorICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6CisgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyLCBmb3JjZSwgcngsIHF1aWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWdhY3ksIG9wdGltaXplKToKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICBlbGlmIChtYXhsZXZlbHMgPiAwIGFuZCBuYW1lICE9IG9zLmN1cmRpciBhbmQgbmFtZSAhPSBvcy5wYXJkaXIgYW5kCisgICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpKToKICAgICAgICAgICAgIGlmIG5vdCBjb21waWxlX2RpcihmdWxsbmFtZSwgbWF4bGV2ZWxzIC0gMSwgZGZpbGUsIGZvcmNlLCByeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWlldCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpZXQsIGxlZ2FjeSwgb3B0aW1pemUpOgogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSAwCiAgICAgcmV0dXJuIHN1Y2Nlc3MKIAotZGVmIGNvbXBpbGVfcGF0aChza2lwX2N1cmRpcj0xLCBtYXhsZXZlbHM9MCwgZm9yY2U9MCwgcXVpZXQ9MCk6CitkZWYgY29tcGlsZV9maWxlKGZ1bGxuYW1lLCBkZGlyPU5vbmUsIGZvcmNlPUZhbHNlLCByeD1Ob25lLCBxdWlldD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSk6CisgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBmaWxlLgorCisgICAgQXJndW1lbnRzIChvbmx5IGZ1bGxuYW1lIGlzIHJlcXVpcmVkKToKKworICAgIGZ1bGxuYW1lOiAgdGhlIGZpbGUgdG8gYnl0ZS1jb21waWxlCisgICAgZGRpcjogICAgICBpZiBnaXZlbiwgdGhlIGRpcmVjdG9yeSBuYW1lIGNvbXBpbGVkIGluIHRvIHRoZQorICAgICAgICAgICAgICAgYnl0ZS1jb2RlIGZpbGUuCisgICAgZm9yY2U6ICAgICBpZiBUcnVlLCBmb3JjZSBjb21waWxhdGlvbiwgZXZlbiBpZiB0aW1lc3RhbXBzIGFyZSB1cC10by1kYXRlCisgICAgcXVpZXQ6ICAgICBpZiBUcnVlLCBiZSBxdWlldCBkdXJpbmcgY29tcGlsYXRpb24KKyAgICBsZWdhY3k6ICAgIGlmIFRydWUsIHByb2R1Y2UgbGVnYWN5IHB5YyBwYXRocyBpbnN0ZWFkIG9mIFBFUCAzMTQ3IHBhdGhzCisgICAgb3B0aW1pemU6ICBvcHRpbWl6YXRpb24gbGV2ZWwgb3IgLTEgZm9yIGxldmVsIG9mIHRoZSBpbnRlcnByZXRlcgorICAgICIiIgorICAgIHN1Y2Nlc3MgPSAxCisgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoZnVsbG5hbWUpCisgICAgaWYgZGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgZGZpbGUgPSBvcy5wYXRoLmpvaW4oZGRpciwgbmFtZSkKKyAgICBlbHNlOgorICAgICAgICBkZmlsZSA9IE5vbmUKKyAgICBpZiByeCBpcyBub3QgTm9uZToKKyAgICAgICAgbW8gPSByeC5zZWFyY2goZnVsbG5hbWUpCisgICAgICAgIGlmIG1vOgorICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3MKKyAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsbmFtZSk6CisgICAgICAgIGlmIGxlZ2FjeToKKyAgICAgICAgICAgIGNmaWxlID0gZnVsbG5hbWUgKyAoJ2MnIGlmIF9fZGVidWdfXyBlbHNlICdvJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgICAgIGNhY2hlX2RpciA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKKyAgICAgICAgaGVhZCwgdGFpbCA9IG5hbWVbOi0zXSwgbmFtZVstMzpdCisgICAgICAgIGlmIHRhaWwgPT0gJy5weSc6CisgICAgICAgICAgICBpZiBub3QgZm9yY2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtdGltZSA9IGludChvcy5zdGF0KGZ1bGxuYW1lKS5zdF9tdGltZSkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ID0gc3RydWN0LnBhY2soJzw0c2wnLCBpbXAuZ2V0X21hZ2ljKCksIG10aW1lKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oY2ZpbGUsICdyYicpIGFzIGNoYW5kbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWwgPSBjaGFuZGxlLnJlYWQoOCkKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ID09IGFjdHVhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWNjZXNzCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBwcmludCgnQ29tcGlsaW5nJywgZnVsbG5hbWUsICcuLi4nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9rID0gcHlfY29tcGlsZS5jb21waWxlKGZ1bGxuYW1lLCBjZmlsZSwgZGZpbGUsIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9b3B0aW1pemUpCisgICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogRXJyb3IgY29tcGlsaW5nJywgZnVsbG5hbWUsICcuLi4nKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogJywgZW5kPScnKQorICAgICAgICAgICAgICAgICMgZXNjYXBlIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyBpbiBtc2cKKyAgICAgICAgICAgICAgICBtc2cgPSBlcnIubXNnLmVuY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0nYmFja3NsYXNocmVwbGFjZScpCisgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQorICAgICAgICAgICAgICAgIHByaW50KG1zZykKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZycsIGZ1bGxuYW1lLCAnLi4uJykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqICcsIGVuZD0nJykKKyAgICAgICAgICAgICAgICBwcmludChlLl9fY2xhc3NfXy5fX25hbWVfXyArICc6JywgZSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBvayA9PSAwOgorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgIHJldHVybiBzdWNjZXNzCisKK2RlZiBjb21waWxlX3BhdGgoc2tpcF9jdXJkaXI9MSwgbWF4bGV2ZWxzPTAsIGZvcmNlPUZhbHNlLCBxdWlldD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgbGVnYWN5PUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIGFsbCBtb2R1bGUgb24gc3lzLnBhdGguCiAKICAgICBBcmd1bWVudHMgKGFsbCBvcHRpb25hbCk6CiAKICAgICBza2lwX2N1cmRpcjogaWYgdHJ1ZSwgc2tpcCBjdXJyZW50IGRpcmVjdG9yeSAoZGVmYXVsdCB0cnVlKQogICAgIG1heGxldmVsczogICBtYXggcmVjdXJzaW9uIGxldmVsIChkZWZhdWx0IDApCi0gICAgZm9yY2U6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IDApCi0gICAgcXVpZXQ6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IDApCi0KKyAgICBmb3JjZTogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgRmFsc2UpCisgICAgcXVpZXQ6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IEZhbHNlKQorICAgIGxlZ2FjeTogYXMgZm9yIGNvbXBpbGVfZGlyKCkgKGRlZmF1bHQgRmFsc2UpCisgICAgb3B0aW1pemU6IGFzIGZvciBjb21waWxlX2RpcigpIChkZWZhdWx0IC0xKQogICAgICIiIgogICAgIHN1Y2Nlc3MgPSAxCiAgICAgZm9yIGRpciBpbiBzeXMucGF0aDoKQEAgLTExOCw1NiArMTU1LDg1IEBACiAgICAgICAgICAgICBwcmludCgnU2tpcHBpbmcgY3VycmVudCBkaXJlY3RvcnknKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgYW5kIGNvbXBpbGVfZGlyKGRpciwgbWF4bGV2ZWxzLCBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCBxdWlldD1xdWlldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZSwgcXVpZXQ9cXVpZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVnYWN5PWxlZ2FjeSwgb3B0aW1pemU9b3B0aW1pemUpCiAgICAgcmV0dXJuIHN1Y2Nlc3MKIAorCiBkZWYgbWFpbigpOgogICAgICIiIlNjcmlwdCBtYWluIHByb2dyYW0uIiIiCi0gICAgaW1wb3J0IGdldG9wdAorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdVdGlsaXRpZXMgdG8gc3VwcG9ydCBpbnN0YWxsaW5nIFB5dGhvbiBsaWJyYXJpZXMuJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbCcsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0xMCwgZGVzdD0nbWF4bGV2ZWxzJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImRvbid0IHJlY3Vyc2UgaW50byBzdWJkaXJlY3RvcmllcyIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWYnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdmb3JjZScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmb3JjZSByZWJ1aWxkIGV2ZW4gaWYgdGltZXN0YW1wcyBhcmUgdXAgdG8gZGF0ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXEnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdxdWlldCcsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgb25seSBlcnJvciBtZXNzYWdlcycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdsZWdhY3knLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndXNlIGxlZ2FjeSAocHJlLVBFUDMxNDcpIGNvbXBpbGVkIGZpbGUgbG9jYXRpb25zJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctZCcsIG1ldGF2YXI9J0RFU1RESVInLCAgZGVzdD0nZGRpcicsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdkaXJlY3RvcnkgdG8gcHJlcGVuZCB0byBmaWxlIHBhdGhzIGZvciB1c2UgaW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBpbGUgdGltZSB0cmFjZWJhY2tzIGFuZCBpbiBydW50aW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFjZWJhY2tzIGluIGNhc2VzIHdoZXJlIHRoZSBzb3VyY2UgZmlsZSBpcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5hdmFpbGFibGUnKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIG1ldGF2YXI9J1JFR0VYUCcsIGRlc3Q9J3J4JywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0oJ3NraXAgZmlsZXMgbWF0Y2hpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSByZWdleHAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBmdWxsIHBhdGggJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIGVhY2ggZmlsZSBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbi4nKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctaScsIG1ldGF2YXI9J0ZJTEUnLCBkZXN0PSdmbGlzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnYWRkIGFsbCB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRklMRSB0byB0aGUgbGlzdCBjb25zaWRlcmVkIGZvciBjb21waWxhdGlvbi4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0lmICItIiwgbmFtZXMgYXJlIHJlYWQgZnJvbSBzdGRpbi4nKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdjb21waWxlX2Rlc3QnLCBtZXRhdmFyPSdGSUxFfERJUicsIG5hcmdzPScqJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCd6ZXJvIG9yIG1vcmUgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBjb21waWxlOyBpZiBubyBhcmd1bWVudHMgZ2l2ZW4sIGRlZmF1bHRzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byB0aGUgZXF1aXZhbGVudCBvZiAtbCBzeXMucGF0aCcpKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBjb21waWxlX2Rlc3RzID0gYXJncy5jb21waWxlX2Rlc3QKKworICAgIGlmIChhcmdzLmRkaXIgYW5kIChsZW4oY29tcGlsZV9kZXN0cykgIT0gMQorICAgICAgICAgICAgb3Igbm90IG9zLnBhdGguaXNkaXIoY29tcGlsZV9kZXN0c1swXSkpKToKKyAgICAgICAgcGFyc2VyLmV4aXQoJy1kIGRlc3RkaXIgcmVxdWlyZXMgZXhhY3RseSBvbmUgZGlyZWN0b3J5IGFyZ3VtZW50JykKKyAgICBpZiBhcmdzLnJ4OgorICAgICAgICBpbXBvcnQgcmUKKyAgICAgICAgYXJncy5yeCA9IHJlLmNvbXBpbGUoYXJncy5yeCkKKworICAgICMgaWYgZmxpc3QgaXMgcHJvdmlkZWQgdGhlbiBsb2FkIGl0CisgICAgaWYgYXJncy5mbGlzdDoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCAoc3lzLnN0ZGluIGlmIGFyZ3MuZmxpc3Q9PSctJyBlbHNlIG9wZW4oYXJncy5mbGlzdCkpIGFzIGY6CisgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZV9kZXN0cy5hcHBlbmQobGluZS5zdHJpcCgpKQorICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBzdWNjZXNzID0gVHJ1ZQogICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnbGZxZDp4OicpCi0gICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KG1zZykKLSAgICAgICAgcHJpbnQoInVzYWdlOiBweXRob24gY29tcGlsZWFsbC5weSBbLWxdIFstZl0gWy1xXSBbLWQgZGVzdGRpcl0gIiBcCi0gICAgICAgICAgICAgICJbLXggcmVnZXhwXSBbZGlyZWN0b3J5IC4uLl0iKQotICAgICAgICBwcmludCgiLWw6IGRvbid0IHJlY3Vyc2UgZG93biIpCi0gICAgICAgIHByaW50KCItZjogZm9yY2UgcmVidWlsZCBldmVuIGlmIHRpbWVzdGFtcHMgYXJlIHVwLXRvLWRhdGUiKQotICAgICAgICBwcmludCgiLXE6IHF1aWV0IG9wZXJhdGlvbiIpCi0gICAgICAgIHByaW50KCItZCBkZXN0ZGlyOiBwdXJwb3J0ZWQgZGlyZWN0b3J5IG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzIikKLSAgICAgICAgcHJpbnQoIiAgIGlmIG5vIGRpcmVjdG9yeSBhcmd1bWVudHMsIC1sIHN5cy5wYXRoIGlzIGFzc3VtZWQiKQotICAgICAgICBwcmludCgiLXggcmVnZXhwOiBza2lwIGZpbGVzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gcmVnZXhwIikKLSAgICAgICAgcHJpbnQoIiAgIHRoZSByZWdleHAgaXMgc2VhcmNoZWQgZm9yIGluIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpbGUiKQotICAgICAgICBzeXMuZXhpdCgyKQotICAgIG1heGxldmVscyA9IDEwCi0gICAgZGRpciA9IE5vbmUKLSAgICBmb3JjZSA9IDAKLSAgICBxdWlldCA9IDAKLSAgICByeCA9IE5vbmUKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvID09ICctbCc6IG1heGxldmVscyA9IDAKLSAgICAgICAgaWYgbyA9PSAnLWQnOiBkZGlyID0gYQotICAgICAgICBpZiBvID09ICctZic6IGZvcmNlID0gMQotICAgICAgICBpZiBvID09ICctcSc6IHF1aWV0ID0gMQotICAgICAgICBpZiBvID09ICcteCc6Ci0gICAgICAgICAgICBpbXBvcnQgcmUKLSAgICAgICAgICAgIHJ4ID0gcmUuY29tcGlsZShhKQotICAgIGlmIGRkaXI6Ci0gICAgICAgIGlmIGxlbihhcmdzKSAhPSAxOgotICAgICAgICAgICAgcHJpbnQoIi1kIGRlc3RkaXIgcmVxdWlyZSBleGFjdGx5IG9uZSBkaXJlY3RvcnkgYXJndW1lbnQiKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICBzdWNjZXNzID0gMQotICAgIHRyeToKLSAgICAgICAgaWYgYXJnczoKLSAgICAgICAgICAgIGZvciBkaXIgaW4gYXJnczoKLSAgICAgICAgICAgICAgICBpZiBub3QgY29tcGlsZV9kaXIoZGlyLCBtYXhsZXZlbHMsIGRkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlLCByeCwgcXVpZXQpOgotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAorICAgICAgICBpZiBjb21waWxlX2Rlc3RzOgorICAgICAgICAgICAgZm9yIGRlc3QgaW4gY29tcGlsZV9kZXN0czoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShkZXN0KToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZmlsZShkZXN0LCBhcmdzLmRkaXIsIGFyZ3MuZm9yY2UsIGFyZ3MucngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5xdWlldCwgYXJncy5sZWdhY3kpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBpbGVfZGlyKGRlc3QsIGFyZ3MubWF4bGV2ZWxzLCBhcmdzLmRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmZvcmNlLCBhcmdzLnJ4LCBhcmdzLnF1aWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5sZWdhY3kpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gc3VjY2VzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3VjY2VzcyA9IGNvbXBpbGVfcGF0aCgpCisgICAgICAgICAgICByZXR1cm4gY29tcGlsZV9wYXRoKGxlZ2FjeT1hcmdzLmxlZ2FjeSkKICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHByaW50KCJcbltpbnRlcnJ1cHRdIikKLSAgICAgICAgc3VjY2VzcyA9IDAKLSAgICByZXR1cm4gc3VjY2VzcworICAgICAgICBwcmludCgiXG5baW50ZXJydXB0ZWRdIikKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIGV4aXRfc3RhdHVzID0gaW50KG5vdCBtYWluKCkpCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9fX2luaXRfXy5weSBiL0xpYi9jb25jdXJyZW50L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NmQzNzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY29uY3VycmVudC9fX2luaXRfXy5weQpAQCAtMCwwICsxIEBACisjIFRoaXMgZGlyZWN0b3J5IGlzIGEgUHl0aG9uIHBhY2thZ2UuCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL19faW5pdF9fLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTIzMWY4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE4IEBACisjIENvcHlyaWdodCAyMDA5IEJyaWFuIFF1aW5sYW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworIiIiRXhlY3V0ZSBjb21wdXRhdGlvbnMgYXN5bmNocm9ub3VzbHkgdXNpbmcgdGhyZWFkcyBvciBwcm9jZXNzZXMuIiIiCisKK19fYXV0aG9yX18gPSAnQnJpYW4gUXVpbmxhbiAoYnJpYW5Ac3dlZXRhcHAuY29tKScKKworZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMuX2Jhc2UgaW1wb3J0IChGSVJTVF9DT01QTEVURUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJUlNUX0VYQ0VQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxMX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnV0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGVjdXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNfY29tcGxldGVkKQorZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMucHJvY2VzcyBpbXBvcnQgUHJvY2Vzc1Bvb2xFeGVjdXRvcgorZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMudGhyZWFkIGltcG9ydCBUaHJlYWRQb29sRXhlY3V0b3IKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjkxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CkBAIC0wLDAgKzEsNTY3IEBACisjIENvcHlyaWdodCAyMDA5IEJyaWFuIFF1aW5sYW4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJworCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQorCitGSVJTVF9DT01QTEVURUQgPSAnRklSU1RfQ09NUExFVEVEJworRklSU1RfRVhDRVBUSU9OID0gJ0ZJUlNUX0VYQ0VQVElPTicKK0FMTF9DT01QTEVURUQgPSAnQUxMX0NPTVBMRVRFRCcKK19BU19DT01QTEVURUQgPSAnX0FTX0NPTVBMRVRFRCcKKworIyBQb3NzaWJsZSBmdXR1cmUgc3RhdGVzIChmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBmdXR1cmVzIHBhY2thZ2UpLgorUEVORElORyA9ICdQRU5ESU5HJworUlVOTklORyA9ICdSVU5OSU5HJworIyBUaGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQgYnkgdGhlIHVzZXIuLi4KK0NBTkNFTExFRCA9ICdDQU5DRUxMRUQnCisjIC4uLmFuZCBfV2FpdGVyLmFkZF9jYW5jZWxsZWQoKSB3YXMgY2FsbGVkIGJ5IGEgd29ya2VyLgorQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCA9ICdDQU5DRUxMRURfQU5EX05PVElGSUVEJworRklOSVNIRUQgPSAnRklOSVNIRUQnCisKK19GVVRVUkVfU1RBVEVTID0gWworICAgIFBFTkRJTkcsCisgICAgUlVOTklORywKKyAgICBDQU5DRUxMRUQsCisgICAgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCwKKyAgICBGSU5JU0hFRAorXQorCitfU1RBVEVfVE9fREVTQ1JJUFRJT05fTUFQID0geworICAgIFBFTkRJTkc6ICJwZW5kaW5nIiwKKyAgICBSVU5OSU5HOiAicnVubmluZyIsCisgICAgQ0FOQ0VMTEVEOiAiY2FuY2VsbGVkIiwKKyAgICBDQU5DRUxMRURfQU5EX05PVElGSUVEOiAiY2FuY2VsbGVkIiwKKyAgICBGSU5JU0hFRDogImZpbmlzaGVkIgorfQorCisjIExvZ2dlciBmb3IgaW50ZXJuYWwgdXNlIGJ5IHRoZSBmdXR1cmVzIHBhY2thZ2UuCitMT0dHRVIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29uY3VycmVudC5mdXR1cmVzIikKKworY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBhbGwgZnV0dXJlLXJlbGF0ZWQgZXhjZXB0aW9ucy4iIiIKKyAgICBwYXNzCisKK2NsYXNzIENhbmNlbGxlZEVycm9yKEVycm9yKToKKyAgICAiIiJUaGUgRnV0dXJlIHdhcyBjYW5jZWxsZWQuIiIiCisgICAgcGFzcworCitjbGFzcyBUaW1lb3V0RXJyb3IoRXJyb3IpOgorICAgICIiIlRoZSBvcGVyYXRpb24gZXhjZWVkZWQgdGhlIGdpdmVuIGRlYWRsaW5lLiIiIgorICAgIHBhc3MKKworY2xhc3MgX1dhaXRlcihvYmplY3QpOgorICAgICIiIlByb3ZpZGVzIHRoZSBldmVudCB0aGF0IHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgYmxvY2sgb24uIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5maW5pc2hlZF9mdXR1cmVzID0gW10KKworICAgIGRlZiBhZGRfcmVzdWx0KHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHNlbGYuZmluaXNoZWRfZnV0dXJlcy5hcHBlbmQoZnV0dXJlKQorCisgICAgZGVmIGFkZF9leGNlcHRpb24oc2VsZiwgZnV0dXJlKToKKyAgICAgICAgc2VsZi5maW5pc2hlZF9mdXR1cmVzLmFwcGVuZChmdXR1cmUpCisKKyAgICBkZWYgYWRkX2NhbmNlbGxlZChzZWxmLCBmdXR1cmUpOgorICAgICAgICBzZWxmLmZpbmlzaGVkX2Z1dHVyZXMuYXBwZW5kKGZ1dHVyZSkKKworY2xhc3MgX0FzQ29tcGxldGVkV2FpdGVyKF9XYWl0ZXIpOgorICAgICIiIlVzZWQgYnkgYXNfY29tcGxldGVkKCkuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKF9Bc0NvbXBsZXRlZFdhaXRlciwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLmxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKyAgICBkZWYgYWRkX3Jlc3VsdChzZWxmLCBmdXR1cmUpOgorICAgICAgICB3aXRoIHNlbGYubG9jazoKKyAgICAgICAgICAgIHN1cGVyKF9Bc0NvbXBsZXRlZFdhaXRlciwgc2VsZikuYWRkX3Jlc3VsdChmdXR1cmUpCisgICAgICAgICAgICBzZWxmLmV2ZW50LnNldCgpCisKKyAgICBkZWYgYWRkX2V4Y2VwdGlvbihzZWxmLCBmdXR1cmUpOgorICAgICAgICB3aXRoIHNlbGYubG9jazoKKyAgICAgICAgICAgIHN1cGVyKF9Bc0NvbXBsZXRlZFdhaXRlciwgc2VsZikuYWRkX2V4Y2VwdGlvbihmdXR1cmUpCisgICAgICAgICAgICBzZWxmLmV2ZW50LnNldCgpCisKKyAgICBkZWYgYWRkX2NhbmNlbGxlZChzZWxmLCBmdXR1cmUpOgorICAgICAgICB3aXRoIHNlbGYubG9jazoKKyAgICAgICAgICAgIHN1cGVyKF9Bc0NvbXBsZXRlZFdhaXRlciwgc2VsZikuYWRkX2NhbmNlbGxlZChmdXR1cmUpCisgICAgICAgICAgICBzZWxmLmV2ZW50LnNldCgpCisKK2NsYXNzIF9GaXJzdENvbXBsZXRlZFdhaXRlcihfV2FpdGVyKToKKyAgICAiIiJVc2VkIGJ5IHdhaXQocmV0dXJuX3doZW49RklSU1RfQ09NUExFVEVEKS4iIiIKKworICAgIGRlZiBhZGRfcmVzdWx0KHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHN1cGVyKCkuYWRkX3Jlc3VsdChmdXR1cmUpCisgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKworICAgIGRlZiBhZGRfZXhjZXB0aW9uKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHN1cGVyKCkuYWRkX2V4Y2VwdGlvbihmdXR1cmUpCisgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKworICAgIGRlZiBhZGRfY2FuY2VsbGVkKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHN1cGVyKCkuYWRkX2NhbmNlbGxlZChmdXR1cmUpCisgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKworY2xhc3MgX0FsbENvbXBsZXRlZFdhaXRlcihfV2FpdGVyKToKKyAgICAiIiJVc2VkIGJ5IHdhaXQocmV0dXJuX3doZW49RklSU1RfRVhDRVBUSU9OIGFuZCBBTExfQ09NUExFVEVEKS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fcGVuZGluZ19jYWxscywgc3RvcF9vbl9leGNlcHRpb24pOgorICAgICAgICBzZWxmLm51bV9wZW5kaW5nX2NhbGxzID0gbnVtX3BlbmRpbmdfY2FsbHMKKyAgICAgICAgc2VsZi5zdG9wX29uX2V4Y2VwdGlvbiA9IHN0b3Bfb25fZXhjZXB0aW9uCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgZGVmIF9kZWNyZW1lbnRfcGVuZGluZ19jYWxscyhzZWxmKToKKyAgICAgICAgc2VsZi5udW1fcGVuZGluZ19jYWxscyAtPSAxCisgICAgICAgIGlmIG5vdCBzZWxmLm51bV9wZW5kaW5nX2NhbGxzOgorICAgICAgICAgICAgc2VsZi5ldmVudC5zZXQoKQorCisgICAgZGVmIGFkZF9yZXN1bHQoc2VsZiwgZnV0dXJlKToKKyAgICAgICAgc3VwZXIoKS5hZGRfcmVzdWx0KGZ1dHVyZSkKKyAgICAgICAgc2VsZi5fZGVjcmVtZW50X3BlbmRpbmdfY2FsbHMoKQorCisgICAgZGVmIGFkZF9leGNlcHRpb24oc2VsZiwgZnV0dXJlKToKKyAgICAgICAgc3VwZXIoKS5hZGRfZXhjZXB0aW9uKGZ1dHVyZSkKKyAgICAgICAgaWYgc2VsZi5zdG9wX29uX2V4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2RlY3JlbWVudF9wZW5kaW5nX2NhbGxzKCkKKworICAgIGRlZiBhZGRfY2FuY2VsbGVkKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHN1cGVyKCkuYWRkX2NhbmNlbGxlZChmdXR1cmUpCisgICAgICAgIHNlbGYuX2RlY3JlbWVudF9wZW5kaW5nX2NhbGxzKCkKKworY2xhc3MgX0FjcXVpcmVGdXR1cmVzKG9iamVjdCk6CisgICAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBkb2VzIGFuIG9yZGVyZWQgYWNxdWlyZSBvZiBGdXR1cmUgY29uZGl0aW9ucy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdXR1cmVzKToKKyAgICAgICAgc2VsZi5mdXR1cmVzID0gc29ydGVkKGZ1dHVyZXMsIGtleT1pZCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIGZvciBmdXR1cmUgaW4gc2VsZi5mdXR1cmVzOgorICAgICAgICAgICAgZnV0dXJlLl9jb25kaXRpb24uYWNxdWlyZSgpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBmb3IgZnV0dXJlIGluIHNlbGYuZnV0dXJlczoKKyAgICAgICAgICAgIGZ1dHVyZS5fY29uZGl0aW9uLnJlbGVhc2UoKQorCitkZWYgX2NyZWF0ZV9hbmRfaW5zdGFsbF93YWl0ZXJzKGZzLCByZXR1cm5fd2hlbik6CisgICAgaWYgcmV0dXJuX3doZW4gPT0gX0FTX0NPTVBMRVRFRDoKKyAgICAgICAgd2FpdGVyID0gX0FzQ29tcGxldGVkV2FpdGVyKCkKKyAgICBlbGlmIHJldHVybl93aGVuID09IEZJUlNUX0NPTVBMRVRFRDoKKyAgICAgICAgd2FpdGVyID0gX0ZpcnN0Q29tcGxldGVkV2FpdGVyKCkKKyAgICBlbHNlOgorICAgICAgICBwZW5kaW5nX2NvdW50ID0gc3VtKAorICAgICAgICAgICAgICAgIGYuX3N0YXRlIG5vdCBpbiBbQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCwgRklOSVNIRURdIGZvciBmIGluIGZzKQorCisgICAgICAgIGlmIHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTjoKKyAgICAgICAgICAgIHdhaXRlciA9IF9BbGxDb21wbGV0ZWRXYWl0ZXIocGVuZGluZ19jb3VudCwgc3RvcF9vbl9leGNlcHRpb249VHJ1ZSkKKyAgICAgICAgZWxpZiByZXR1cm5fd2hlbiA9PSBBTExfQ09NUExFVEVEOgorICAgICAgICAgICAgd2FpdGVyID0gX0FsbENvbXBsZXRlZFdhaXRlcihwZW5kaW5nX2NvdW50LCBzdG9wX29uX2V4Y2VwdGlvbj1GYWxzZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgcmV0dXJuIGNvbmRpdGlvbjogJXIiICUgcmV0dXJuX3doZW4pCisKKyAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgZi5fd2FpdGVycy5hcHBlbmQod2FpdGVyKQorCisgICAgcmV0dXJuIHdhaXRlcgorCitkZWYgYXNfY29tcGxldGVkKGZzLCB0aW1lb3V0PU5vbmUpOgorICAgICIiIkFuIGl0ZXJhdG9yIG92ZXIgdGhlIGdpdmVuIGZ1dHVyZXMgdGhhdCB5aWVsZHMgZWFjaCBhcyBpdCBjb21wbGV0ZXMuCisKKyAgICBBcmdzOgorICAgICAgICBmczogVGhlIHNlcXVlbmNlIG9mIEZ1dHVyZXMgKHBvc3NpYmx5IGNyZWF0ZWQgYnkgZGlmZmVyZW50IEV4ZWN1dG9ycykgdG8KKyAgICAgICAgICAgIGl0ZXJhdGUgb3Zlci4KKyAgICAgICAgdGltZW91dDogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdC4gSWYgTm9uZSwgdGhlbiB0aGVyZQorICAgICAgICAgICAgaXMgbm8gbGltaXQgb24gdGhlIHdhaXQgdGltZS4KKworICAgIFJldHVybnM6CisgICAgICAgIEFuIGl0ZXJhdG9yIHRoYXQgeWllbGRzIHRoZSBnaXZlbiBGdXR1cmVzIGFzIHRoZXkgY29tcGxldGUgKGZpbmlzaGVkIG9yCisgICAgICAgIGNhbmNlbGxlZCkuCisKKyAgICBSYWlzZXM6CisgICAgICAgIFRpbWVvdXRFcnJvcjogSWYgdGhlIGVudGlyZSByZXN1bHQgaXRlcmF0b3IgY291bGQgbm90IGJlIGdlbmVyYXRlZAorICAgICAgICAgICAgYmVmb3JlIHRoZSBnaXZlbiB0aW1lb3V0LgorICAgICIiIgorICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIGVuZF90aW1lID0gdGltZW91dCArIHRpbWUudGltZSgpCisKKyAgICB3aXRoIF9BY3F1aXJlRnV0dXJlcyhmcyk6CisgICAgICAgIGZpbmlzaGVkID0gc2V0KAorICAgICAgICAgICAgICAgIGYgZm9yIGYgaW4gZnMKKyAgICAgICAgICAgICAgICBpZiBmLl9zdGF0ZSBpbiBbQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCwgRklOSVNIRURdKQorICAgICAgICBwZW5kaW5nID0gc2V0KGZzKSAtIGZpbmlzaGVkCisgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKKworICAgIHRyeToKKyAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKKyAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorCisgICAgICAgIHdoaWxlIHBlbmRpbmc6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgd2FpdF90aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3YWl0X3RpbWVvdXQgPSBlbmRfdGltZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgaWYgd2FpdF90aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICclZCAob2YgJWQpIGZ1dHVyZXMgdW5maW5pc2hlZCcgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHBlbmRpbmcpLCBsZW4oZnMpKSkKKworICAgICAgICAgICAgd2FpdGVyLmV2ZW50LndhaXQod2FpdF90aW1lb3V0KQorCisgICAgICAgICAgICB3aXRoIHdhaXRlci5sb2NrOgorICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gd2FpdGVyLmZpbmlzaGVkX2Z1dHVyZXMKKyAgICAgICAgICAgICAgICB3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcyA9IFtdCisgICAgICAgICAgICAgICAgd2FpdGVyLmV2ZW50LmNsZWFyKCkKKworICAgICAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKKyAgICAgICAgICAgICAgICB5aWVsZCBmdXR1cmUKKyAgICAgICAgICAgICAgICBwZW5kaW5nLnJlbW92ZShmdXR1cmUpCisKKyAgICBmaW5hbGx5OgorICAgICAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgICAgIGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKworRG9uZUFuZE5vdERvbmVGdXR1cmVzID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgKKyAgICAgICAgJ0RvbmVBbmROb3REb25lRnV0dXJlcycsICdkb25lIG5vdF9kb25lJykKK2RlZiB3YWl0KGZzLCB0aW1lb3V0PU5vbmUsIHJldHVybl93aGVuPUFMTF9DT01QTEVURUQpOgorICAgICIiIldhaXQgZm9yIHRoZSBmdXR1cmVzIGluIHRoZSBnaXZlbiBzZXF1ZW5jZSB0byBjb21wbGV0ZS4KKworICAgIEFyZ3M6CisgICAgICAgIGZzOiBUaGUgc2VxdWVuY2Ugb2YgRnV0dXJlcyAocG9zc2libHkgY3JlYXRlZCBieSBkaWZmZXJlbnQgRXhlY3V0b3JzKSB0bworICAgICAgICAgICAgd2FpdCB1cG9uLgorICAgICAgICB0aW1lb3V0OiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0LiBJZiBOb25lLCB0aGVuIHRoZXJlCisgICAgICAgICAgICBpcyBubyBsaW1pdCBvbiB0aGUgd2FpdCB0aW1lLgorICAgICAgICByZXR1cm5fd2hlbjogSW5kaWNhdGVzIHdoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuLiBUaGUgb3B0aW9ucworICAgICAgICAgICAgYXJlOgorCisgICAgICAgICAgICBGSVJTVF9DT01QTEVURUQgLSBSZXR1cm4gd2hlbiBhbnkgZnV0dXJlIGZpbmlzaGVzIG9yIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxsZWQuCisgICAgICAgICAgICBGSVJTVF9FWENFUFRJT04gLSBSZXR1cm4gd2hlbiBhbnkgZnV0dXJlIGZpbmlzaGVzIGJ5IHJhaXNpbmcgYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbi4gSWYgbm8gZnV0dXJlIHJhaXNlcyBhbiBleGNlcHRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4gaXQgaXMgZXF1aXZhbGVudCB0byBBTExfQ09NUExFVEVELgorICAgICAgICAgICAgQUxMX0NPTVBMRVRFRCAtICAgUmV0dXJuIHdoZW4gYWxsIGZ1dHVyZXMgZmluaXNoIG9yIGFyZSBjYW5jZWxsZWQuCisKKyAgICBSZXR1cm5zOgorICAgICAgICBBIG5hbWVkIDItdHVwbGUgb2Ygc2V0cy4gVGhlIGZpcnN0IHNldCwgbmFtZWQgJ2RvbmUnLCBjb250YWlucyB0aGUKKyAgICAgICAgZnV0dXJlcyB0aGF0IGNvbXBsZXRlZCAoaXMgZmluaXNoZWQgb3IgY2FuY2VsbGVkKSBiZWZvcmUgdGhlIHdhaXQKKyAgICAgICAgY29tcGxldGVkLiBUaGUgc2Vjb25kIHNldCwgbmFtZWQgJ25vdF9kb25lJywgY29udGFpbnMgdW5jb21wbGV0ZWQKKyAgICAgICAgZnV0dXJlcy4KKyAgICAiIiIKKyAgICB3aXRoIF9BY3F1aXJlRnV0dXJlcyhmcyk6CisgICAgICAgIGRvbmUgPSBzZXQoZiBmb3IgZiBpbiBmcworICAgICAgICAgICAgICAgICAgIGlmIGYuX3N0YXRlIGluIFtDQU5DRUxMRURfQU5EX05PVElGSUVELCBGSU5JU0hFRF0pCisgICAgICAgIG5vdF9kb25lID0gc2V0KGZzKSAtIGRvbmUKKworICAgICAgICBpZiAocmV0dXJuX3doZW4gPT0gRklSU1RfQ09NUExFVEVEKSBhbmQgZG9uZToKKyAgICAgICAgICAgIHJldHVybiBEb25lQW5kTm90RG9uZUZ1dHVyZXMoZG9uZSwgbm90X2RvbmUpCisgICAgICAgIGVsaWYgKHJldHVybl93aGVuID09IEZJUlNUX0VYQ0VQVElPTikgYW5kIGRvbmU6CisgICAgICAgICAgICBpZiBhbnkoZiBmb3IgZiBpbiBkb25lCisgICAgICAgICAgICAgICAgICAgaWYgbm90IGYuY2FuY2VsbGVkKCkgYW5kIGYuZXhjZXB0aW9uKCkgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBEb25lQW5kTm90RG9uZUZ1dHVyZXMoZG9uZSwgbm90X2RvbmUpCisKKyAgICAgICAgaWYgbGVuKGRvbmUpID09IGxlbihmcyk6CisgICAgICAgICAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIG5vdF9kb25lKQorCisgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgcmV0dXJuX3doZW4pCisKKyAgICB3YWl0ZXIuZXZlbnQud2FpdCh0aW1lb3V0KQorICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisKKyAgICBkb25lLnVwZGF0ZSh3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcykKKyAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIHNldChmcykgLSBkb25lKQorCitjbGFzcyBGdXR1cmUob2JqZWN0KToKKyAgICAiIiJSZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgYW4gYXN5bmNocm9ub3VzIGNvbXB1dGF0aW9uLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAiIiJJbml0aWFsaXplcyB0aGUgZnV0dXJlLiBTaG91bGQgbm90IGJlIGNhbGxlZCBieSBjbGllbnRzLiIiIgorICAgICAgICBzZWxmLl9jb25kaXRpb24gPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBQRU5ESU5HCisgICAgICAgIHNlbGYuX3Jlc3VsdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gW10KKyAgICAgICAgc2VsZi5fZG9uZV9jYWxsYmFja3MgPSBbXQorCisgICAgZGVmIF9pbnZva2VfY2FsbGJhY2tzKHNlbGYpOgorICAgICAgICBmb3IgY2FsbGJhY2sgaW4gc2VsZi5fZG9uZV9jYWxsYmFja3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgTE9HR0VSLmV4Y2VwdGlvbignZXhjZXB0aW9uIGNhbGxpbmcgY2FsbGJhY2sgZm9yICVyJywgc2VsZikKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kaXRpb246CisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBGSU5JU0hFRDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9leGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPEZ1dHVyZSBhdCAlcyBzdGF0ZT0lcyByYWlzZWQgJXM+JyAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgIGhleChpZChzZWxmKSksCisgICAgICAgICAgICAgICAgICAgICAgICBfU1RBVEVfVE9fREVTQ1JJUFRJT05fTUFQW3NlbGYuX3N0YXRlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4Y2VwdGlvbi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8RnV0dXJlIGF0ICVzIHN0YXRlPSVzIHJldHVybmVkICVzPicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBoZXgoaWQoc2VsZikpLAorICAgICAgICAgICAgICAgICAgICAgICAgX1NUQVRFX1RPX0RFU0NSSVBUSU9OX01BUFtzZWxmLl9zdGF0ZV0sCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHQuX19jbGFzc19fLl9fbmFtZV9fKQorICAgICAgICAgICAgcmV0dXJuICc8RnV0dXJlIGF0ICVzIHN0YXRlPSVzPicgJSAoCisgICAgICAgICAgICAgICAgICAgIGhleChpZChzZWxmKSksCisgICAgICAgICAgICAgICAgICAgX1NUQVRFX1RPX0RFU0NSSVBUSU9OX01BUFtzZWxmLl9zdGF0ZV0pCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJDYW5jZWwgdGhlIGZ1dHVyZSBpZiBwb3NzaWJsZS4KKworICAgICAgICBSZXR1cm5zIFRydWUgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLCBGYWxzZSBvdGhlcndpc2UuIEEgZnV0dXJlCisgICAgICAgIGNhbm5vdCBiZSBjYW5jZWxsZWQgaWYgaXQgaXMgcnVubmluZyBvciBoYXMgYWxyZWFkeSBjb21wbGV0ZWQuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlIGluIFtSVU5OSU5HLCBGSU5JU0hFRF06CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlIGluIFtDQU5DRUxMRUQsIENBTkNFTExFRF9BTkRfTk9USUZJRURdOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gQ0FOQ0VMTEVECisgICAgICAgICAgICBzZWxmLl9jb25kaXRpb24ubm90aWZ5X2FsbCgpCisKKyAgICAgICAgc2VsZi5faW52b2tlX2NhbGxiYWNrcygpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgZnV0dXJlIGhhcyBjYW5jZWxsZWQuIiIiCisgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlIGluIFtDQU5DRUxMRUQsIENBTkNFTExFRF9BTkRfTk9USUZJRURdCisKKyAgICBkZWYgcnVubmluZyhzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBjdXJyZW50bHkgZXhlY3V0aW5nLiIiIgorICAgICAgICB3aXRoIHNlbGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSBSVU5OSU5HCisKKyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgb2YgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkIG9yIGZpbmlzaGVkIGV4ZWN1dGluZy4iIiIKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kaXRpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgaW4gW0NBTkNFTExFRCwgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCwgRklOSVNIRURdCisKKyAgICBkZWYgX19nZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb246CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXN1bHQKKworICAgIGRlZiBhZGRfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIkF0dGFjaGVzIGEgY2FsbGFibGUgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBmdXR1cmUgZmluaXNoZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGZuOiBBIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGlzIGZ1dHVyZSBhcyBpdHMgb25seQorICAgICAgICAgICAgICAgIGFyZ3VtZW50IHdoZW4gdGhlIGZ1dHVyZSBjb21wbGV0ZXMgb3IgaXMgY2FuY2VsbGVkLiBUaGUgY2FsbGFibGUKKyAgICAgICAgICAgICAgICB3aWxsIGFsd2F5cyBiZSBjYWxsZWQgYnkgYSB0aHJlYWQgaW4gdGhlIHNhbWUgcHJvY2VzcyBpbiB3aGljaAorICAgICAgICAgICAgICAgIGl0IHdhcyBhZGRlZC4gSWYgdGhlIGZ1dHVyZSBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgb3IgYmVlbgorICAgICAgICAgICAgICAgIGNhbmNlbGxlZCB0aGVuIHRoZSBjYWxsYWJsZSB3aWxsIGJlIGNhbGxlZCBpbW1lZGlhdGVseS4gVGhlc2UKKyAgICAgICAgICAgICAgICBjYWxsYWJsZXMgYXJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGV5IHdlcmUgYWRkZWQuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlIG5vdCBpbiBbQ0FOQ0VMTEVELCBDQU5DRUxMRURfQU5EX05PVElGSUVELCBGSU5JU0hFRF06CisgICAgICAgICAgICAgICAgc2VsZi5fZG9uZV9jYWxsYmFja3MuYXBwZW5kKGZuKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBmbihzZWxmKQorCisgICAgZGVmIHJlc3VsdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCB0aGF0IHRoZSBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGltZW91dDogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSByZXN1bHQgaWYgdGhlIGZ1dHVyZQorICAgICAgICAgICAgICAgIGlzbid0IGRvbmUuIElmIE5vbmUsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHdhaXQgdGltZS4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGUgY2FsbCB0aGF0IHRoZSBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBDYW5jZWxsZWRFcnJvcjogSWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLgorICAgICAgICAgICAgVGltZW91dEVycm9yOiBJZiB0aGUgZnV0dXJlIGRpZG4ndCBmaW5pc2ggZXhlY3V0aW5nIGJlZm9yZSB0aGUgZ2l2ZW4KKyAgICAgICAgICAgICAgICB0aW1lb3V0LgorICAgICAgICAgICAgRXhjZXB0aW9uOiBJZiB0aGUgY2FsbCByYWlzZWQgdGhlbiB0aGF0IGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgaW4gW0NBTkNFTExFRCwgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF06CisgICAgICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZSA9PSBGSU5JU0hFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2dldF9yZXN1bHQoKQorCisgICAgICAgICAgICBzZWxmLl9jb25kaXRpb24ud2FpdCh0aW1lb3V0KQorCisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSBpbiBbQ0FOQ0VMTEVELCBDQU5DRUxMRURfQU5EX05PVElGSUVEXToKKyAgICAgICAgICAgICAgICByYWlzZSBDYW5jZWxsZWRFcnJvcigpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlID09IEZJTklTSEVEOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0X3Jlc3VsdCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcigpCisKKyAgICBkZWYgZXhjZXB0aW9uKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgY2FsbCB0aGF0IHRoZSBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGltZW91dDogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRvIHdhaXQgZm9yIHRoZSBleGNlcHRpb24gaWYgdGhlCisgICAgICAgICAgICAgICAgZnV0dXJlIGlzbid0IGRvbmUuIElmIE5vbmUsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXQgb24gdGhlIHdhaXQKKyAgICAgICAgICAgICAgICB0aW1lLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBUaGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgY2FsbCB0aGF0IHRoZSBmdXR1cmUgcmVwcmVzZW50cyBvciBOb25lCisgICAgICAgICAgICBpZiB0aGUgY2FsbCBjb21wbGV0ZWQgd2l0aG91dCByYWlzaW5nLgorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICAgIENhbmNlbGxlZEVycm9yOiBJZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisgICAgICAgICAgICBUaW1lb3V0RXJyb3I6IElmIHRoZSBmdXR1cmUgZGlkbid0IGZpbmlzaCBleGVjdXRpbmcgYmVmb3JlIHRoZSBnaXZlbgorICAgICAgICAgICAgICAgIHRpbWVvdXQuCisgICAgICAgICIiIgorCisgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgaW4gW0NBTkNFTExFRCwgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF06CisgICAgICAgICAgICAgICAgcmFpc2UgQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZSA9PSBGSU5JU0hFRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgICAgIHNlbGYuX2NvbmRpdGlvbi53YWl0KHRpbWVvdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlIGluIFtDQU5DRUxMRUQsIENBTkNFTExFRF9BTkRfTk9USUZJRURdOgorICAgICAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgPT0gRklOSVNIRUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4Y2VwdGlvbgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXJyb3IoKQorCisgICAgIyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBFeGVjdXRvcnMgYW5kIGluIHRlc3RzLgorICAgIGRlZiBzZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgYXMgcnVubmluZyBvciBwcm9jZXNzIGFueSBjYW5jZWwgbm90aWZpY2F0aW9ucy4KKworICAgICAgICBTaG91bGQgb25seSBiZSB1c2VkIGJ5IEV4ZWN1dG9yIGltcGxlbWVudGF0aW9ucyBhbmQgdW5pdCB0ZXN0cy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGhhcyBiZWVuIGNhbmNlbGxlZCAoY2FuY2VsKCkgd2FzIGNhbGxlZCBhbmQgcmV0dXJuZWQKKyAgICAgICAgVHJ1ZSkgdGhlbiBhbnkgdGhyZWFkcyB3YWl0aW5nIG9uIHRoZSBmdXR1cmUgY29tcGxldGluZyAodGhvdWdoIGNhbGxzCisgICAgICAgIHRvIGFzX2NvbXBsZXRlZCgpIG9yIHdhaXQoKSkgYXJlIG5vdGlmaWVkIGFuZCBGYWxzZSBpcyByZXR1cm5lZC4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIHdhcyBub3QgY2FuY2VsbGVkIHRoZW4gaXQgaXMgcHV0IGluIHRoZSBydW5uaW5nIHN0YXRlCisgICAgICAgIChmdXR1cmUgY2FsbHMgdG8gcnVubmluZygpIHdpbGwgcmV0dXJuIFRydWUpIGFuZCBUcnVlIGlzIHJldHVybmVkLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgYnkgRXhlY3V0b3IgaW1wbGVtZW50YXRpb25zIGJlZm9yZQorICAgICAgICBleGVjdXRpbmcgdGhlIHdvcmsgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZnV0dXJlLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgICAgIEZhbHNlIHRoZW4gdGhlIHdvcmsgc2hvdWxkIG5vdCBiZSBleGVjdXRlZC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgRmFsc2UgaWYgdGhlIEZ1dHVyZSB3YXMgY2FuY2VsbGVkLCBUcnVlIG90aGVyd2lzZS4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBSdW50aW1lRXJyb3I6IGlmIHRoaXMgbWV0aG9kIHdhcyBhbHJlYWR5IGNhbGxlZCBvciBpZiBzZXRfcmVzdWx0KCkKKyAgICAgICAgICAgICAgICBvciBzZXRfZXhjZXB0aW9uKCkgd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gQ0FOQ0VMTEVEOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gQ0FOQ0VMTEVEX0FORF9OT1RJRklFRAorICAgICAgICAgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgICAgICAgICAgd2FpdGVyLmFkZF9jYW5jZWxsZWQoc2VsZikKKyAgICAgICAgICAgICAgICAjIHNlbGYuX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCkgaXMgbm90IG5lY2Vzc2FyeSBiZWNhdXNlCisgICAgICAgICAgICAgICAgIyBzZWxmLmNhbmNlbCgpIHRyaWdnZXJzIGEgbm90aWZpY2F0aW9uLgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZSA9PSBQRU5ESU5HOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gUlVOTklORworICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIExPR0dFUi5jcml0aWNhbCgnRnV0dXJlICVzIGluIHVuZXhwZWN0ZWQgc3RhdGU6ICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZi5mdXR1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZ1dHVyZS5fc3RhdGUpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdGdXR1cmUgaW4gdW5leHBlY3RlZCBzdGF0ZScpCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJTZXRzIHRoZSByZXR1cm4gdmFsdWUgb2Ygd29yayBhc3NvY2lhdGVkIHdpdGggdGhlIGZ1dHVyZS4KKworICAgICAgICBTaG91bGQgb25seSBiZSB1c2VkIGJ5IEV4ZWN1dG9yIGltcGxlbWVudGF0aW9ucyBhbmQgdW5pdCB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc2VsZi5fY29uZGl0aW9uOgorICAgICAgICAgICAgc2VsZi5fcmVzdWx0ID0gcmVzdWx0CisgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IEZJTklTSEVECisgICAgICAgICAgICBmb3Igd2FpdGVyIGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgd2FpdGVyLmFkZF9yZXN1bHQoc2VsZikKKyAgICAgICAgICAgIHNlbGYuX2NvbmRpdGlvbi5ub3RpZnlfYWxsKCkKKyAgICAgICAgc2VsZi5faW52b2tlX2NhbGxiYWNrcygpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICAiIiJTZXRzIHRoZSByZXN1bHQgb2YgdGhlIGZ1dHVyZSBhcyBiZWluZyB0aGUgZ2l2ZW4gZXhjZXB0aW9uLgorCisgICAgICAgIFNob3VsZCBvbmx5IGJlIHVzZWQgYnkgRXhlY3V0b3IgaW1wbGVtZW50YXRpb25zIGFuZCB1bml0IHRlc3RzLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kaXRpb246CisgICAgICAgICAgICBzZWxmLl9leGNlcHRpb24gPSBleGNlcHRpb24KKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gRklOSVNIRUQKKyAgICAgICAgICAgIGZvciB3YWl0ZXIgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgICAgICB3YWl0ZXIuYWRkX2V4Y2VwdGlvbihzZWxmKQorICAgICAgICAgICAgc2VsZi5fY29uZGl0aW9uLm5vdGlmeV9hbGwoKQorICAgICAgICBzZWxmLl9pbnZva2VfY2FsbGJhY2tzKCkKKworY2xhc3MgRXhlY3V0b3Iob2JqZWN0KToKKyAgICAiIiJUaGlzIGlzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbmNyZXRlIGFzeW5jaHJvbm91cyBleGVjdXRvcnMuIiIiCisKKyAgICBkZWYgc3VibWl0KHNlbGYsIGZuLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJTdWJtaXRzIGEgY2FsbGFibGUgdG8gYmUgZXhlY3V0ZWQgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgorCisgICAgICAgIFNjaGVkdWxlcyB0aGUgY2FsbGFibGUgdG8gYmUgZXhlY3V0ZWQgYXMgZm4oKmFyZ3MsICoqa3dhcmdzKSBhbmQgcmV0dXJucworICAgICAgICBhIEZ1dHVyZSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY2FsbGFibGUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEEgRnV0dXJlIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gY2FsbC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIG1hcChzZWxmLCBmbiwgKml0ZXJhYmxlcywgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJucyBhIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG8gbWFwKGZuLCBpdGVyKS4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgZm46IEEgY2FsbGFibGUgdGhhdCB3aWxsIHRha2UgdGFrZSBhcyBtYW55IGFyZ3VtZW50cyBhcyB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICBwYXNzZWQgaXRlcmFibGVzLgorICAgICAgICAgICAgdGltZW91dDogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgdG8gd2FpdC4gSWYgTm9uZSwgdGhlbiB0aGVyZQorICAgICAgICAgICAgICAgIGlzIG5vIGxpbWl0IG9uIHRoZSB3YWl0IHRpbWUuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEFuIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG86IG1hcChmdW5jLCAqaXRlcmFibGVzKSBidXQgdGhlIGNhbGxzIG1heQorICAgICAgICAgICAgYmUgZXZhbHVhdGVkIG91dC1vZi1vcmRlci4KKworICAgICAgICBSYWlzZXM6CisgICAgICAgICAgICBUaW1lb3V0RXJyb3I6IElmIHRoZSBlbnRpcmUgcmVzdWx0IGl0ZXJhdG9yIGNvdWxkIG5vdCBiZSBnZW5lcmF0ZWQKKyAgICAgICAgICAgICAgICBiZWZvcmUgdGhlIGdpdmVuIHRpbWVvdXQuCisgICAgICAgICAgICBFeGNlcHRpb246IElmIGZuKCphcmdzKSByYWlzZXMgZm9yIGFueSB2YWx1ZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5kX3RpbWUgPSB0aW1lb3V0ICsgdGltZS50aW1lKCkKKworICAgICAgICBmcyA9IFtzZWxmLnN1Ym1pdChmbiwgKmFyZ3MpIGZvciBhcmdzIGluIHppcCgqaXRlcmFibGVzKV0KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZnV0dXJlIGluIGZzOgorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnV0dXJlLnJlc3VsdCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnV0dXJlLnJlc3VsdChlbmRfdGltZSAtIHRpbWUudGltZSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIGZ1dHVyZSBpbiBmczoKKyAgICAgICAgICAgICAgICBmdXR1cmUuY2FuY2VsKCkKKworICAgIGRlZiBzaHV0ZG93bihzZWxmLCB3YWl0PVRydWUpOgorICAgICAgICAiIiJDbGVhbi11cCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRXhlY3V0b3IuCisKKyAgICAgICAgSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgbWV0aG9kIHNldmVyYWwgdGltZXMuIE90aGVyd2lzZSwgbm8gb3RoZXIKKyAgICAgICAgbWV0aG9kcyBjYW4gYmUgY2FsbGVkIGFmdGVyIHRoaXMgb25lLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB3YWl0OiBJZiBUcnVlIHRoZW4gc2h1dGRvd24gd2lsbCBub3QgcmV0dXJuIHVudGlsIGFsbCBydW5uaW5nCisgICAgICAgICAgICAgICAgZnV0dXJlcyBoYXZlIGZpbmlzaGVkIGV4ZWN1dGluZyBhbmQgdGhlIHJlc291cmNlcyB1c2VkIGJ5IHRoZQorICAgICAgICAgICAgICAgIGV4ZWN1dG9yIGhhdmUgYmVlbiByZWNsYWltZWQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsLCBleGNfdGIpOgorICAgICAgICBzZWxmLnNodXRkb3duKHdhaXQ9VHJ1ZSkKKyAgICAgICAgcmV0dXJuIEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDQxMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQpAQCAtMCwwICsxLDM2MCBAQAorIyBDb3B5cmlnaHQgMjAwOSBCcmlhbiBRdWlubGFuLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisKKyIiIkltcGxlbWVudHMgUHJvY2Vzc1Bvb2xFeGVjdXRvci4KKworVGhlIGZvbGxvdyBkaWFncmFtIGFuZCB0ZXh0IGRlc2NyaWJlIHRoZSBkYXRhLWZsb3cgdGhyb3VnaCB0aGUgc3lzdGVtOgorCit8PT09PT09PT09PT09PT09PT09PT09PT0gSW4tcHJvY2VzcyA9PT09PT09PT09PT09PT09PT09PT18PT0gT3V0LW9mLXByb2Nlc3MgPT18CisKKystLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLS0rICAgICAgICstLS0tLS0tLSsgICAgICstLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsKK3wgICAgICAgICAgfCAgPT4gfCBXb3JrIElkcyB8ICAgID0+IHwgICAgICAgIHwgID0+IHwgQ2FsbCBRICAgIHwgPT4gfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0rICAgICAgIHwgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCAuLi4gICAgICB8ICAgICAgIHwgICAgICAgIHwgICAgIHwgLi4uICAgICAgIHwgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCA2ICAgICAgICB8ICAgICAgIHwgICAgICAgIHwgICAgIHwgNSwgY2FsbCgpIHwgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCA3ICAgICAgICB8ICAgICAgIHwgICAgICAgIHwgICAgIHwgLi4uICAgICAgIHwgICAgfCAgICAgICAgIHwKK3wgUHJvY2VzcyAgfCAgICAgfCAuLi4gICAgICB8ICAgICAgIHwgTG9jYWwgIHwgICAgICstLS0tLS0tLS0tLSsgICAgfCBQcm9jZXNzIHwKK3wgIFBvb2wgICAgfCAgICAgKy0tLS0tLS0tLS0rICAgICAgIHwgV29ya2VyIHwgICAgICAgICAgICAgICAgICAgICAgfCAgIzEuLm4gIHwKK3wgRXhlY3V0b3IgfCAgICAgICAgICAgICAgICAgICAgICAgIHwgVGhyZWFkIHwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tICsgICAgIHwgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCA8PT4gfCBXb3JrIEl0ZW1zIHwgPD0+IHwgICAgICAgIHwgPD0gIHwgUmVzdWx0IFEgIHwgPD0gfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgKy0tLS0tLS0tLS0tLSsgICAgIHwgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCA2OiBjYWxsKCkgIHwgICAgIHwgICAgICAgIHwgICAgIHwgLi4uICAgICAgIHwgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCAgICBmdXR1cmUgIHwgICAgIHwgICAgICAgIHwgICAgIHwgNCwgcmVzdWx0IHwgICAgfCAgICAgICAgIHwKK3wgICAgICAgICAgfCAgICAgfCAuLi4gICAgICAgIHwgICAgIHwgICAgICAgIHwgICAgIHwgMywgZXhjZXB0IHwgICAgfCAgICAgICAgIHwKKystLS0tLS0tLS0tKyAgICAgKy0tLS0tLS0tLS0tLSsgICAgICstLS0tLS0tLSsgICAgICstLS0tLS0tLS0tLSsgICAgKy0tLS0tLS0tLSsKKworRXhlY3V0b3Iuc3VibWl0KCkgY2FsbGVkOgorLSBjcmVhdGVzIGEgdW5pcXVlbHkgbnVtYmVyZWQgX1dvcmtJdGVtIGFuZCBhZGRzIGl0IHRvIHRoZSAiV29yayBJdGVtcyIgZGljdAorLSBhZGRzIHRoZSBpZCBvZiB0aGUgX1dvcmtJdGVtIHRvIHRoZSAiV29yayBJZHMiIHF1ZXVlCisKK0xvY2FsIHdvcmtlciB0aHJlYWQ6CistIHJlYWRzIHdvcmsgaWRzIGZyb20gdGhlICJXb3JrIElkcyIgcXVldWUgYW5kIGxvb2tzIHVwIHRoZSBjb3JyZXNwb25kaW5nCisgIFdvcmtJdGVtIGZyb20gdGhlICJXb3JrIEl0ZW1zIiBkaWN0OiBpZiB0aGUgd29yayBpdGVtIGhhcyBiZWVuIGNhbmNlbGxlZCB0aGVuCisgIGl0IGlzIHNpbXBseSByZW1vdmVkIGZyb20gdGhlIGRpY3QsIG90aGVyd2lzZSBpdCBpcyByZXBhY2thZ2VkIGFzIGEKKyAgX0NhbGxJdGVtIGFuZCBwdXQgaW4gdGhlICJDYWxsIFEiLiBOZXcgX0NhbGxJdGVtcyBhcmUgcHV0IGluIHRoZSAiQ2FsbCBRIgorICB1bnRpbCAiQ2FsbCBRIiBpcyBmdWxsLiBOT1RFOiB0aGUgc2l6ZSBvZiB0aGUgIkNhbGwgUSIgaXMga2VwdCBzbWFsbCBiZWNhdXNlCisgIGNhbGxzIHBsYWNlZCBpbiB0aGUgIkNhbGwgUSIgY2FuIG5vIGxvbmdlciBiZSBjYW5jZWxsZWQgd2l0aCBGdXR1cmUuY2FuY2VsKCkuCistIHJlYWRzIF9SZXN1bHRJdGVtcyBmcm9tICJSZXN1bHQgUSIsIHVwZGF0ZXMgdGhlIGZ1dHVyZSBzdG9yZWQgaW4gdGhlCisgICJXb3JrIEl0ZW1zIiBkaWN0IGFuZCBkZWxldGVzIHRoZSBkaWN0IGVudHJ5CisKK1Byb2Nlc3MgIzEuLm46CistIHJlYWRzIF9DYWxsSXRlbXMgZnJvbSAiQ2FsbCBRIiwgZXhlY3V0ZXMgdGhlIGNhbGxzLCBhbmQgcHV0cyB0aGUgcmVzdWx0aW5nCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVxdWVzdCBRIgorIiIiCisKK19fYXV0aG9yX18gPSAnQnJpYW4gUXVpbmxhbiAoYnJpYW5Ac3dlZXRhcHAuY29tKScKKworaW1wb3J0IGF0ZXhpdAorZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IF9iYXNlCitpbXBvcnQgcXVldWUKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB3ZWFrcmVmCisKKyMgV29ya2VycyBhcmUgY3JlYXRlZCBhcyBkYWVtb24gdGhyZWFkcyBhbmQgcHJvY2Vzc2VzLiBUaGlzIGlzIGRvbmUgdG8gYWxsb3cgdGhlCisjIGludGVycHJldGVyIHRvIGV4aXQgd2hlbiB0aGVyZSBhcmUgc3RpbGwgaWRsZSBwcm9jZXNzZXMgaW4gYQorIyBQcm9jZXNzUG9vbEV4ZWN1dG9yJ3MgcHJvY2VzcyBwb29sIChpLmUuIHNodXRkb3duKCkgd2FzIG5vdCBjYWxsZWQpLiBIb3dldmVyLAorIyBhbGxvd2luZyB3b3JrZXJzIHRvIGRpZSB3aXRoIHRoZSBpbnRlcnByZXRlciBoYXMgdHdvIHVuZGVzaXJhYmxlIHByb3BlcnRpZXM6CisjICAgLSBUaGUgd29ya2VycyB3b3VsZCBzdGlsbCBiZSBydW5uaW5nIGR1cmluZyBpbnRlcnByZXRvciBzaHV0ZG93biwKKyMgICAgIG1lYW5pbmcgdGhhdCB0aGV5IHdvdWxkIGZhaWwgaW4gdW5wcmVkaWN0YWJsZSB3YXlzLgorIyAgIC0gVGhlIHdvcmtlcnMgY291bGQgYmUga2lsbGVkIHdoaWxlIGV2YWx1YXRpbmcgYSB3b3JrIGl0ZW0sIHdoaWNoIGNvdWxkCisjICAgICBiZSBiYWQgaWYgdGhlIGNhbGxhYmxlIGJlaW5nIGV2YWx1YXRlZCBoYXMgZXh0ZXJuYWwgc2lkZS1lZmZlY3RzIGUuZy4KKyMgICAgIHdyaXRpbmcgdG8gYSBmaWxlLgorIworIyBUbyB3b3JrIGFyb3VuZCB0aGlzIHByb2JsZW0sIGFuIGV4aXQgaGFuZGxlciBpcyBpbnN0YWxsZWQgd2hpY2ggdGVsbHMgdGhlCisjIHdvcmtlcnMgdG8gZXhpdCB3aGVuIHRoZWlyIHdvcmsgcXVldWVzIGFyZSBlbXB0eSBhbmQgdGhlbiB3YWl0cyB1bnRpbCB0aGUKKyMgdGhyZWFkcy9wcm9jZXNzZXMgZmluaXNoLgorCitfdGhyZWFkc19xdWV1ZXMgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKK19zaHV0ZG93biA9IEZhbHNlCisKK2RlZiBfcHl0aG9uX2V4aXQoKToKKyAgICBnbG9iYWwgX3NodXRkb3duCisgICAgX3NodXRkb3duID0gVHJ1ZQorICAgIGl0ZW1zID0gbGlzdChfdGhyZWFkc19xdWV1ZXMuaXRlbXMoKSkKKyAgICBmb3IgdCwgcSBpbiBpdGVtczoKKyAgICAgICAgcS5wdXQoTm9uZSkKKyAgICBmb3IgdCwgcSBpbiBpdGVtczoKKyAgICAgICAgdC5qb2luKCkKKworIyBDb250cm9scyBob3cgbWFueSBtb3JlIGNhbGxzIHRoYW4gcHJvY2Vzc2VzIHdpbGwgYmUgcXVldWVkIGluIHRoZSBjYWxsIHF1ZXVlLgorIyBBIHNtYWxsZXIgbnVtYmVyIHdpbGwgbWVhbiB0aGF0IHByb2Nlc3NlcyBzcGVuZCBtb3JlIHRpbWUgaWRsZSB3YWl0aW5nIGZvcgorIyB3b3JrIHdoaWxlIGEgbGFyZ2VyIG51bWJlciB3aWxsIG1ha2UgRnV0dXJlLmNhbmNlbCgpIHN1Y2NlZWQgbGVzcyBmcmVxdWVudGx5CisjIChGdXR1cmVzIGluIHRoZSBjYWxsIHF1ZXVlIGNhbm5vdCBiZSBjYW5jZWxsZWQpLgorRVhUUkFfUVVFVUVEX0NBTExTID0gMQorCitjbGFzcyBfV29ya0l0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnV0dXJlLCBmbiwgYXJncywga3dhcmdzKToKKyAgICAgICAgc2VsZi5mdXR1cmUgPSBmdXR1cmUKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKworY2xhc3MgX1Jlc3VsdEl0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya19pZCwgZXhjZXB0aW9uPU5vbmUsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi53b3JrX2lkID0gd29ya19pZAorICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorCitjbGFzcyBfQ2FsbEl0ZW0ob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya19pZCwgZm4sIGFyZ3MsIGt3YXJncyk6CisgICAgICAgIHNlbGYud29ya19pZCA9IHdvcmtfaWQKKyAgICAgICAgc2VsZi5mbiA9IGZuCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKworZGVmIF9wcm9jZXNzX3dvcmtlcihjYWxsX3F1ZXVlLCByZXN1bHRfcXVldWUpOgorICAgICIiIkV2YWx1YXRlcyBjYWxscyBmcm9tIGNhbGxfcXVldWUgYW5kIHBsYWNlcyB0aGUgcmVzdWx0cyBpbiByZXN1bHRfcXVldWUuCisKKyAgICBUaGlzIHdvcmtlciBpcyBydW4gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLgorCisgICAgQXJnczoKKyAgICAgICAgY2FsbF9xdWV1ZTogQSBtdWx0aXByb2Nlc3NpbmcuUXVldWUgb2YgX0NhbGxJdGVtcyB0aGF0IHdpbGwgYmUgcmVhZCBhbmQKKyAgICAgICAgICAgIGV2YWx1YXRlZCBieSB0aGUgd29ya2VyLgorICAgICAgICByZXN1bHRfcXVldWU6IEEgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlIG9mIF9SZXN1bHRJdGVtcyB0aGF0IHdpbGwgd3JpdHRlbgorICAgICAgICAgICAgdG8gYnkgdGhlIHdvcmtlci4KKyAgICAgICAgc2h1dGRvd246IEEgbXVsdGlwcm9jZXNzaW5nLkV2ZW50IHRoYXQgd2lsbCBiZSBzZXQgYXMgYSBzaWduYWwgdG8gdGhlCisgICAgICAgICAgICB3b3JrZXIgdGhhdCBpdCBzaG91bGQgZXhpdCB3aGVuIGNhbGxfcXVldWUgaXMgZW1wdHkuCisgICAgIiIiCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY2FsbF9pdGVtID0gY2FsbF9xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKKyAgICAgICAgaWYgY2FsbF9pdGVtIGlzIE5vbmU6CisgICAgICAgICAgICAjIFdha2UgdXAgcXVldWUgbWFuYWdlbWVudCB0aHJlYWQKKyAgICAgICAgICAgIHJlc3VsdF9xdWV1ZS5wdXQoTm9uZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICByID0gY2FsbF9pdGVtLmZuKCpjYWxsX2l0ZW0uYXJncywgKipjYWxsX2l0ZW0ua3dhcmdzKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmVzdWx0X3F1ZXVlLnB1dChfUmVzdWx0SXRlbShjYWxsX2l0ZW0ud29ya19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uPWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0X3F1ZXVlLnB1dChfUmVzdWx0SXRlbShjYWxsX2l0ZW0ud29ya19pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PXIpKQorCitkZWYgX2FkZF9jYWxsX2l0ZW1fdG9fcXVldWUocGVuZGluZ193b3JrX2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfaWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcXVldWUpOgorICAgICIiIkZpbGxzIGNhbGxfcXVldWUgd2l0aCBfV29ya0l0ZW1zIGZyb20gcGVuZGluZ193b3JrX2l0ZW1zLgorCisgICAgVGhpcyBmdW5jdGlvbiBuZXZlciBibG9ja3MuCisKKyAgICBBcmdzOgorICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXM6IEEgZGljdCBtYXBwaW5nIHdvcmsgaWRzIHRvIF9Xb3JrSXRlbXMgZS5nLgorICAgICAgICAgICAgezU6IDxfV29ya0l0ZW0uLi4+LCA2OiA8X1dvcmtJdGVtLi4uPiwgLi4ufQorICAgICAgICB3b3JrX2lkczogQSBxdWV1ZS5RdWV1ZSBvZiB3b3JrIGlkcyBlLmcuIFF1ZXVlKFs1LCA2LCAuLi5dKS4gV29yayBpZHMKKyAgICAgICAgICAgIGFyZSBjb25zdW1lZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgX1dvcmtJdGVtcyBmcm9tCisgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMgYXJlIHRyYW5zZm9ybWVkIGludG8gX0NhbGxJdGVtcyBhbmQgcHV0IGluCisgICAgICAgICAgICBjYWxsX3F1ZXVlLgorICAgICAgICBjYWxsX3F1ZXVlOiBBIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggX0NhbGxJdGVtcworICAgICAgICAgICAgZGVyaXZlZCBmcm9tIF9Xb3JrSXRlbXMuCisgICAgIiIiCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgY2FsbF9xdWV1ZS5mdWxsKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd29ya19pZCA9IHdvcmtfaWRzLmdldChibG9jaz1GYWxzZSkKKyAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3b3JrX2l0ZW0gPSBwZW5kaW5nX3dvcmtfaXRlbXNbd29ya19pZF0KKworICAgICAgICAgICAgaWYgd29ya19pdGVtLmZ1dHVyZS5zZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKCk6CisgICAgICAgICAgICAgICAgY2FsbF9xdWV1ZS5wdXQoX0NhbGxJdGVtKHdvcmtfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfaXRlbS5mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtfaXRlbS5rd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrPVRydWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBwZW5kaW5nX3dvcmtfaXRlbXNbd29ya19pZF0KKyAgICAgICAgICAgICAgICBjb250aW51ZQorCitkZWYgX3F1ZXVlX21hbmFuZ2VtZW50X3dvcmtlcihleGVjdXRvcl9yZWZlcmVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2lkc19xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRfcXVldWUpOgorICAgICIiIk1hbmFnZXMgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGlzIHByb2Nlc3MgYW5kIHRoZSB3b3JrZXIgcHJvY2Vzc2VzLgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBydW4gaW4gYSBsb2NhbCB0aHJlYWQuCisKKyAgICBBcmdzOgorICAgICAgICBleGVjdXRvcl9yZWZlcmVuY2U6IEEgd2Vha3JlZi5yZWYgdG8gdGhlIFByb2Nlc3NQb29sRXhlY3V0b3IgdGhhdCBvd25zCisgICAgICAgICAgICB0aGlzIHRocmVhZC4gVXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIFByb2Nlc3NQb29sRXhlY3V0b3IgaGFzIGJlZW4KKyAgICAgICAgICAgIGdhcmJhZ2UgY29sbGVjdGVkIGFuZCB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGV4aXQuCisgICAgICAgIHByb2Nlc3M6IEEgbGlzdCBvZiB0aGUgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgaW5zdGFuY2VzIHVzZWQgYXMKKyAgICAgICAgICAgIHdvcmtlcnMuCisgICAgICAgIHBlbmRpbmdfd29ya19pdGVtczogQSBkaWN0IG1hcHBpbmcgd29yayBpZHMgdG8gX1dvcmtJdGVtcyBlLmcuCisgICAgICAgICAgICB7NTogPF9Xb3JrSXRlbS4uLj4sIDY6IDxfV29ya0l0ZW0uLi4+LCAuLi59CisgICAgICAgIHdvcmtfaWRzX3F1ZXVlOiBBIHF1ZXVlLlF1ZXVlIG9mIHdvcmsgaWRzIGUuZy4gUXVldWUoWzUsIDYsIC4uLl0pLgorICAgICAgICBjYWxsX3F1ZXVlOiBBIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggX0NhbGxJdGVtcworICAgICAgICAgICAgZGVyaXZlZCBmcm9tIF9Xb3JrSXRlbXMgZm9yIHByb2Nlc3NpbmcgYnkgdGhlIHByb2Nlc3Mgd29ya2Vycy4KKyAgICAgICAgcmVzdWx0X3F1ZXVlOiBBIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSBvZiBfUmVzdWx0SXRlbXMgZ2VuZXJhdGVkIGJ5IHRoZQorICAgICAgICAgICAgcHJvY2VzcyB3b3JrZXJzLgorICAgICIiIgorICAgIG5iX3NodXRkb3duX3Byb2Nlc3NlcyA9IDAKKyAgICBkZWYgc2h1dGRvd25fb25lX3Byb2Nlc3MoKToKKyAgICAgICAgIiIiVGVsbCBhIHdvcmtlciB0byB0ZXJtaW5hdGUsIHdoaWNoIHdpbGwgaW4gdHVybiB3YWtlIHVzIGFnYWluIiIiCisgICAgICAgIG5vbmxvY2FsIG5iX3NodXRkb3duX3Byb2Nlc3NlcworICAgICAgICBjYWxsX3F1ZXVlLnB1dChOb25lKQorICAgICAgICBuYl9zaHV0ZG93bl9wcm9jZXNzZXMgKz0gMQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIF9hZGRfY2FsbF9pdGVtX3RvX3F1ZXVlKHBlbmRpbmdfd29ya19pdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya19pZHNfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxfcXVldWUpCisKKyAgICAgICAgcmVzdWx0X2l0ZW0gPSByZXN1bHRfcXVldWUuZ2V0KGJsb2NrPVRydWUpCisgICAgICAgIGlmIHJlc3VsdF9pdGVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd29ya19pdGVtID0gcGVuZGluZ193b3JrX2l0ZW1zW3Jlc3VsdF9pdGVtLndvcmtfaWRdCisgICAgICAgICAgICBkZWwgcGVuZGluZ193b3JrX2l0ZW1zW3Jlc3VsdF9pdGVtLndvcmtfaWRdCisKKyAgICAgICAgICAgIGlmIHJlc3VsdF9pdGVtLmV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9leGNlcHRpb24ocmVzdWx0X2l0ZW0uZXhjZXB0aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBJZiB3ZSBjb21lIGhlcmUsIHdlIGVpdGhlciBnb3QgYSB0aW1lb3V0IG9yIHdlcmUgZXhwbGljaXRseSB3b2tlbiB1cC4KKyAgICAgICAgIyBJbiBlaXRoZXIgY2FzZSwgY2hlY2sgd2hldGhlciB3ZSBzaG91bGQgc3RhcnQgc2h1dHRpbmcgZG93bi4KKyAgICAgICAgZXhlY3V0b3IgPSBleGVjdXRvcl9yZWZlcmVuY2UoKQorICAgICAgICAjIE5vIG1vcmUgd29yayBpdGVtcyBjYW4gYmUgYWRkZWQgaWY6CisgICAgICAgICMgICAtIFRoZSBpbnRlcnByZXRlciBpcyBzaHV0dGluZyBkb3duIE9SCisgICAgICAgICMgICAtIFRoZSBleGVjdXRvciB0aGF0IG93bnMgdGhpcyB3b3JrZXIgaGFzIGJlZW4gY29sbGVjdGVkIE9SCisgICAgICAgICMgICAtIFRoZSBleGVjdXRvciB0aGF0IG93bnMgdGhpcyB3b3JrZXIgaGFzIGJlZW4gc2h1dGRvd24uCisgICAgICAgIGlmIF9zaHV0ZG93biBvciBleGVjdXRvciBpcyBOb25lIG9yIGV4ZWN1dG9yLl9zaHV0ZG93bl90aHJlYWQ6CisgICAgICAgICAgICAjIFNpbmNlIG5vIG5ldyB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCwgaXQgaXMgc2FmZSB0byBzaHV0ZG93bgorICAgICAgICAgICAgIyB0aGlzIHRocmVhZCBpZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB3b3JrIGl0ZW1zLgorICAgICAgICAgICAgaWYgbm90IHBlbmRpbmdfd29ya19pdGVtczoKKyAgICAgICAgICAgICAgICB3aGlsZSBuYl9zaHV0ZG93bl9wcm9jZXNzZXMgPCBsZW4ocHJvY2Vzc2VzKToKKyAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25fb25lX3Byb2Nlc3MoKQorICAgICAgICAgICAgICAgICMgSWYgLmpvaW4oKSBpcyBub3QgY2FsbGVkIG9uIHRoZSBjcmVhdGVkIHByb2Nlc3NlcyB0aGVuCisgICAgICAgICAgICAgICAgIyBzb21lIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSBtZXRob2RzIG1heSBkZWFkbG9jayBvbiBNYWMgT1MKKyAgICAgICAgICAgICAgICAjIFguCisgICAgICAgICAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgorICAgICAgICAgICAgICAgICAgICBwLmpvaW4oKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFN0YXJ0IHNodXR0aW5nIGRvd24gYnkgdGVsbGluZyBhIHByb2Nlc3MgaXQgY2FuIGV4aXQuCisgICAgICAgICAgICAgICAgc2h1dGRvd25fb25lX3Byb2Nlc3MoKQorICAgICAgICBkZWwgZXhlY3V0b3IKKworX3N5c3RlbV9saW1pdHNfY2hlY2tlZCA9IEZhbHNlCitfc3lzdGVtX2xpbWl0ZWQgPSBOb25lCitkZWYgX2NoZWNrX3N5c3RlbV9saW1pdHMoKToKKyAgICBnbG9iYWwgX3N5c3RlbV9saW1pdHNfY2hlY2tlZCwgX3N5c3RlbV9saW1pdGVkCisgICAgaWYgX3N5c3RlbV9saW1pdHNfY2hlY2tlZDoKKyAgICAgICAgaWYgX3N5c3RlbV9saW1pdGVkOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcihfc3lzdGVtX2xpbWl0ZWQpCisgICAgX3N5c3RlbV9saW1pdHNfY2hlY2tlZCA9IFRydWUKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBvcworICAgICAgICBuc2Vtc19tYXggPSBvcy5zeXNjb25mKCJTQ19TRU1fTlNFTVNfTUFYIikKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgIyBzeXNjb25mIG5vdCBhdmFpbGFibGUgb3Igc2V0dGluZyBub3QgYXZhaWxhYmxlCisgICAgICAgIHJldHVybgorICAgIGlmIG5zZW1zX21heCA9PSAtMToKKyAgICAgICAgIyBpbmRldGVybWluZSBsaW1pdCwgYXNzdW1lIHRoYXQgbGltaXQgaXMgZGV0ZXJtaW5lZAorICAgICAgICAjIGJ5IGF2YWlsYWJsZSBtZW1vcnkgb25seQorICAgICAgICByZXR1cm4KKyAgICBpZiBuc2Vtc19tYXggPj0gMjU2OgorICAgICAgICAjIG1pbmltdW0gbnVtYmVyIG9mIHNlbWFwaG9yZXMgYXZhaWxhYmxlCisgICAgICAgICMgYWNjb3JkaW5nIHRvIFBPU0lYCisgICAgICAgIHJldHVybgorICAgIF9zeXN0ZW1fbGltaXRlZCA9ICJzeXN0ZW0gcHJvdmlkZXMgdG9vIGZldyBzZW1hcGhvcmVzICglZCBhdmFpbGFibGUsIDI1NiBuZWNlc3NhcnkpIiAlIG5zZW1zX21heAorICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoX3N5c3RlbV9saW1pdGVkKQorCitjbGFzcyBQcm9jZXNzUG9vbEV4ZWN1dG9yKF9iYXNlLkV4ZWN1dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4X3dvcmtlcnM9Tm9uZSk6CisgICAgICAgICIiIkluaXRpYWxpemVzIGEgbmV3IFByb2Nlc3NQb29sRXhlY3V0b3IgaW5zdGFuY2UuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIG1heF93b3JrZXJzOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvY2Vzc2VzIHRoYXQgY2FuIGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBnaXZlbiBjYWxscy4gSWYgTm9uZSBvciBub3QgZ2l2ZW4gdGhlbiBhcyBtYW55CisgICAgICAgICAgICAgICAgd29ya2VyIHByb2Nlc3NlcyB3aWxsIGJlIGNyZWF0ZWQgYXMgdGhlIG1hY2hpbmUgaGFzIHByb2Nlc3NvcnMuCisgICAgICAgICIiIgorICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCisKKyAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG1heF93b3JrZXJzCisKKyAgICAgICAgIyBNYWtlIHRoZSBjYWxsIHF1ZXVlIHNsaWdodGx5IGxhcmdlciB0aGFuIHRoZSBudW1iZXIgb2YgcHJvY2Vzc2VzIHRvCisgICAgICAgICMgcHJldmVudCB0aGUgd29ya2VyIHByb2Nlc3NlcyBmcm9tIGlkbGluZy4gQnV0IGRvbid0IG1ha2UgaXQgdG9vIGJpZworICAgICAgICAjIGJlY2F1c2UgZnV0dXJlcyBpbiB0aGUgY2FsbCBxdWV1ZSBjYW5ub3QgYmUgY2FuY2VsbGVkLgorICAgICAgICBzZWxmLl9jYWxsX3F1ZXVlID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKHNlbGYuX21heF93b3JrZXJzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQV9RVUVVRURfQ0FMTFMpCisgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuX3dvcmtfaWRzID0gcXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl9xdWV1ZV9tYW5hZ2VtZW50X3RocmVhZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvY2Vzc2VzID0gc2V0KCkKKworICAgICAgICAjIFNodXRkb3duIGlzIGEgdHdvLXN0ZXAgcHJvY2Vzcy4KKyAgICAgICAgc2VsZi5fc2h1dGRvd25fdGhyZWFkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc2h1dGRvd25fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKKyAgICAgICAgc2VsZi5fcXVldWVfY291bnQgPSAwCisgICAgICAgIHNlbGYuX3BlbmRpbmdfd29ya19pdGVtcyA9IHt9CisKKyAgICBkZWYgX3N0YXJ0X3F1ZXVlX21hbmFnZW1lbnRfdGhyZWFkKHNlbGYpOgorICAgICAgICAjIFdoZW4gdGhlIGV4ZWN1dG9yIGdldHMgbG9zdCwgdGhlIHdlYWtyZWYgY2FsbGJhY2sgd2lsbCB3YWtlIHVwCisgICAgICAgICMgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgdGhyZWFkLgorICAgICAgICBkZWYgd2Vha3JlZl9jYihfLCBxPXNlbGYuX3Jlc3VsdF9xdWV1ZSk6CisgICAgICAgICAgICBxLnB1dChOb25lKQorICAgICAgICBpZiBzZWxmLl9xdWV1ZV9tYW5hZ2VtZW50X3RocmVhZCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fcXVldWVfbWFuYWdlbWVudF90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9X3F1ZXVlX21hbmFuZ2VtZW50X3dvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgYXJncz0od2Vha3JlZi5yZWYoc2VsZiwgd2Vha3JlZl9jYiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3NlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGVuZGluZ193b3JrX2l0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrX2lkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0X3F1ZXVlKSkKKyAgICAgICAgICAgIHNlbGYuX3F1ZXVlX21hbmFnZW1lbnRfdGhyZWFkLmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3F1ZXVlX21hbmFnZW1lbnRfdGhyZWFkLnN0YXJ0KCkKKyAgICAgICAgICAgIF90aHJlYWRzX3F1ZXVlc1tzZWxmLl9xdWV1ZV9tYW5hZ2VtZW50X3RocmVhZF0gPSBzZWxmLl9yZXN1bHRfcXVldWUKKworICAgIGRlZiBfYWRqdXN0X3Byb2Nlc3NfY291bnQoc2VsZik6CisgICAgICAgIGZvciBfIGluIHJhbmdlKGxlbihzZWxmLl9wcm9jZXNzZXMpLCBzZWxmLl9tYXhfd29ya2Vycyk6CisgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCisgICAgICAgICAgICAgICAgICAgIHRhcmdldD1fcHJvY2Vzc193b3JrZXIsCisgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2NhbGxfcXVldWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSkpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Nlcy5hZGQocCkKKworICAgIGRlZiBzdWJtaXQoc2VsZiwgZm4sICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggc2VsZi5fc2h1dGRvd25fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX3NodXRkb3duX3RocmVhZDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2Nhbm5vdCBzY2hlZHVsZSBuZXcgZnV0dXJlcyBhZnRlciBzaHV0ZG93bicpCisKKyAgICAgICAgICAgIGYgPSBfYmFzZS5GdXR1cmUoKQorICAgICAgICAgICAgdyA9IF9Xb3JrSXRlbShmLCBmbiwgYXJncywga3dhcmdzKQorCisgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3dvcmtfaXRlbXNbc2VsZi5fcXVldWVfY291bnRdID0gdworICAgICAgICAgICAgc2VsZi5fd29ya19pZHMucHV0KHNlbGYuX3F1ZXVlX2NvdW50KQorICAgICAgICAgICAgc2VsZi5fcXVldWVfY291bnQgKz0gMQorICAgICAgICAgICAgIyBXYWtlIHVwIHF1ZXVlIG1hbmFnZW1lbnQgdGhyZWFkCisgICAgICAgICAgICBzZWxmLl9yZXN1bHRfcXVldWUucHV0KE5vbmUpCisKKyAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3F1ZXVlX21hbmFnZW1lbnRfdGhyZWFkKCkKKyAgICAgICAgICAgIHNlbGYuX2FkanVzdF9wcm9jZXNzX2NvdW50KCkKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgc3VibWl0Ll9fZG9jX18gPSBfYmFzZS5FeGVjdXRvci5zdWJtaXQuX19kb2NfXworCisgICAgZGVmIHNodXRkb3duKHNlbGYsIHdhaXQ9VHJ1ZSk6CisgICAgICAgIHdpdGggc2VsZi5fc2h1dGRvd25fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX3NodXRkb3duX3RocmVhZCA9IFRydWUKKyAgICAgICAgaWYgc2VsZi5fcXVldWVfbWFuYWdlbWVudF90aHJlYWQ6CisgICAgICAgICAgICAjIFdha2UgdXAgcXVldWUgbWFuYWdlbWVudCB0aHJlYWQKKyAgICAgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZS5wdXQoTm9uZSkKKyAgICAgICAgICAgIGlmIHdhaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcXVldWVfbWFuYWdlbWVudF90aHJlYWQuam9pbigpCisgICAgICAgICMgVG8gcmVkdWNlIHRoZSByaXNrIG9mIG9wZW5uaW5nIHRvbyBtYW55IGZpbGVzLCByZW1vdmUgcmVmZXJlbmNlcyB0bworICAgICAgICAjIG9iamVjdHMgdGhhdCB1c2UgZmlsZSBkZXNjcmlwdG9ycy4KKyAgICAgICAgc2VsZi5fcXVldWVfbWFuYWdlbWVudF90aHJlYWQgPSBOb25lCisgICAgICAgIHNlbGYuX2NhbGxfcXVldWUgPSBOb25lCisgICAgICAgIHNlbGYuX3Jlc3VsdF9xdWV1ZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvY2Vzc2VzID0gTm9uZQorICAgIHNodXRkb3duLl9fZG9jX18gPSBfYmFzZS5FeGVjdXRvci5zaHV0ZG93bi5fX2RvY19fCisKK2F0ZXhpdC5yZWdpc3RlcihfcHl0aG9uX2V4aXQpCmRpZmYgLS1naXQgYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weSBiL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvdGhyZWFkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiYWMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtMCwwICsxLDEzMCBAQAorIyBDb3B5cmlnaHQgMjAwOSBCcmlhbiBRdWlubGFuLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisKKyIiIkltcGxlbWVudHMgVGhyZWFkUG9vbEV4ZWN1dG9yLiIiIgorCitfX2F1dGhvcl9fID0gJ0JyaWFuIFF1aW5sYW4gKGJyaWFuQHN3ZWV0YXBwLmNvbSknCisKK2ltcG9ydCBhdGV4aXQKK2Zyb20gY29uY3VycmVudC5mdXR1cmVzIGltcG9ydCBfYmFzZQoraW1wb3J0IHF1ZXVlCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2Vha3JlZgorCisjIFdvcmtlcnMgYXJlIGNyZWF0ZWQgYXMgZGFlbW9uIHRocmVhZHMuIFRoaXMgaXMgZG9uZSB0byBhbGxvdyB0aGUgaW50ZXJwcmV0ZXIKKyMgdG8gZXhpdCB3aGVuIHRoZXJlIGFyZSBzdGlsbCBpZGxlIHRocmVhZHMgaW4gYSBUaHJlYWRQb29sRXhlY3V0b3IncyB0aHJlYWQKKyMgcG9vbCAoaS5lLiBzaHV0ZG93bigpIHdhcyBub3QgY2FsbGVkKS4gSG93ZXZlciwgYWxsb3dpbmcgd29ya2VycyB0byBkaWUgd2l0aAorIyB0aGUgaW50ZXJwcmV0ZXIgaGFzIHR3byB1bmRlc2lyYWJsZSBwcm9wZXJ0aWVzOgorIyAgIC0gVGhlIHdvcmtlcnMgd291bGQgc3RpbGwgYmUgcnVubmluZyBkdXJpbmcgaW50ZXJwcmV0b3Igc2h1dGRvd24sCisjICAgICBtZWFuaW5nIHRoYXQgdGhleSB3b3VsZCBmYWlsIGluIHVucHJlZGljdGFibGUgd2F5cy4KKyMgICAtIFRoZSB3b3JrZXJzIGNvdWxkIGJlIGtpbGxlZCB3aGlsZSBldmFsdWF0aW5nIGEgd29yayBpdGVtLCB3aGljaCBjb3VsZAorIyAgICAgYmUgYmFkIGlmIHRoZSBjYWxsYWJsZSBiZWluZyBldmFsdWF0ZWQgaGFzIGV4dGVybmFsIHNpZGUtZWZmZWN0cyBlLmcuCisjICAgICB3cml0aW5nIHRvIGEgZmlsZS4KKyMKKyMgVG8gd29yayBhcm91bmQgdGhpcyBwcm9ibGVtLCBhbiBleGl0IGhhbmRsZXIgaXMgaW5zdGFsbGVkIHdoaWNoIHRlbGxzIHRoZQorIyB3b3JrZXJzIHRvIGV4aXQgd2hlbiB0aGVpciB3b3JrIHF1ZXVlcyBhcmUgZW1wdHkgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlCisjIHRocmVhZHMgZmluaXNoLgorCitfdGhyZWFkc19xdWV1ZXMgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKK19zaHV0ZG93biA9IEZhbHNlCisKK2RlZiBfcHl0aG9uX2V4aXQoKToKKyAgICBnbG9iYWwgX3NodXRkb3duCisgICAgX3NodXRkb3duID0gVHJ1ZQorICAgIGl0ZW1zID0gbGlzdChfdGhyZWFkc19xdWV1ZXMuaXRlbXMoKSkKKyAgICBmb3IgdCwgcSBpbiBpdGVtczoKKyAgICAgICAgcS5wdXQoTm9uZSkKKyAgICBmb3IgdCwgcSBpbiBpdGVtczoKKyAgICAgICAgdC5qb2luKCkKKworYXRleGl0LnJlZ2lzdGVyKF9weXRob25fZXhpdCkKKworY2xhc3MgX1dvcmtJdGVtKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1dHVyZSwgZm4sIGFyZ3MsIGt3YXJncyk6CisgICAgICAgIHNlbGYuZnV0dXJlID0gZnV0dXJlCisgICAgICAgIHNlbGYuZm4gPSBmbgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5mdXR1cmUuc2V0X3J1bm5pbmdfb3Jfbm90aWZ5X2NhbmNlbCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mbigqc2VsZi5hcmdzLCAqKnNlbGYua3dhcmdzKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5mdXR1cmUuc2V0X2V4Y2VwdGlvbihlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mdXR1cmUuc2V0X3Jlc3VsdChyZXN1bHQpCisKK2RlZiBfd29ya2VyKGV4ZWN1dG9yX3JlZmVyZW5jZSwgd29ya19xdWV1ZSk6CisgICAgdHJ5OgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhlY3V0b3IgPSBleGVjdXRvcl9yZWZlcmVuY2UoKQorICAgICAgICAgICAgIyBFeGl0IGlmOgorICAgICAgICAgICAgIyAgIC0gVGhlIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd24gT1IKKyAgICAgICAgICAgICMgICAtIFRoZSBleGVjdXRvciB0aGF0IG93bnMgdGhlIHdvcmtlciBoYXMgYmVlbiBjb2xsZWN0ZWQgT1IKKyAgICAgICAgICAgICMgICAtIFRoZSBleGVjdXRvciB0aGF0IG93bnMgdGhlIHdvcmtlciBoYXMgYmVlbiBzaHV0ZG93bi4KKyAgICAgICAgICAgIGlmIF9zaHV0ZG93biBvciBleGVjdXRvciBpcyBOb25lIG9yIGV4ZWN1dG9yLl9zaHV0ZG93bjoKKyAgICAgICAgICAgICAgICAjIE5vdGljZSBvdGhlciB3b3JrZXJzCisgICAgICAgICAgICAgICAgd29ya19xdWV1ZS5wdXQoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGRlbCBleGVjdXRvcgorICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIF9iYXNlLkxPR0dFUi5jcml0aWNhbCgnRXhjZXB0aW9uIGluIHdvcmtlcicsIGV4Y19pbmZvPVRydWUpCisKK2NsYXNzIFRocmVhZFBvb2xFeGVjdXRvcihfYmFzZS5FeGVjdXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1heF93b3JrZXJzKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZXMgYSBuZXcgVGhyZWFkUG9vbEV4ZWN1dG9yIGluc3RhbmNlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBtYXhfd29ya2VyczogVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBjYW4gYmUgdXNlZCB0bworICAgICAgICAgICAgICAgIGV4ZWN1dGUgdGhlIGdpdmVuIGNhbGxzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fbWF4X3dvcmtlcnMgPSBtYXhfd29ya2VycworICAgICAgICBzZWxmLl93b3JrX3F1ZXVlID0gcXVldWUuUXVldWUoKQorICAgICAgICBzZWxmLl90aHJlYWRzID0gc2V0KCkKKyAgICAgICAgc2VsZi5fc2h1dGRvd24gPSBGYWxzZQorICAgICAgICBzZWxmLl9zaHV0ZG93bl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgZGVmIHN1Ym1pdChzZWxmLCBmbiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLl9zaHV0ZG93bl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fc2h1dGRvd246CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3Qgc2NoZWR1bGUgbmV3IGZ1dHVyZXMgYWZ0ZXIgc2h1dGRvd24nKQorCisgICAgICAgICAgICBmID0gX2Jhc2UuRnV0dXJlKCkKKyAgICAgICAgICAgIHcgPSBfV29ya0l0ZW0oZiwgZm4sIGFyZ3MsIGt3YXJncykKKworICAgICAgICAgICAgc2VsZi5fd29ya19xdWV1ZS5wdXQodykKKyAgICAgICAgICAgIHNlbGYuX2FkanVzdF90aHJlYWRfY291bnQoKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICBzdWJtaXQuX19kb2NfXyA9IF9iYXNlLkV4ZWN1dG9yLnN1Ym1pdC5fX2RvY19fCisKKyAgICBkZWYgX2FkanVzdF90aHJlYWRfY291bnQoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgZXhlY3V0b3IgZ2V0cyBsb3N0LCB0aGUgd2Vha3JlZiBjYWxsYmFjayB3aWxsIHdha2UgdXAKKyAgICAgICAgIyB0aGUgd29ya2VyIHRocmVhZHMuCisgICAgICAgIGRlZiB3ZWFrcmVmX2NiKF8sIHE9c2VsZi5fd29ya19xdWV1ZSk6CisgICAgICAgICAgICBxLnB1dChOb25lKQorICAgICAgICAjIFRPRE8oYnF1aW5sYW4pOiBTaG91bGQgYXZvaWQgY3JlYXRpbmcgbmV3IHRocmVhZHMgaWYgdGhlcmUgYXJlIG1vcmUKKyAgICAgICAgIyBpZGxlIHRocmVhZHMgdGhhbiBpdGVtcyBpbiB0aGUgd29yayBxdWV1ZS4KKyAgICAgICAgaWYgbGVuKHNlbGYuX3RocmVhZHMpIDwgc2VsZi5fbWF4X3dvcmtlcnM6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3dvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KHdlYWtyZWYucmVmKHNlbGYsIHdlYWtyZWZfY2IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd29ya19xdWV1ZSkpCisgICAgICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAgICAgc2VsZi5fdGhyZWFkcy5hZGQodCkKKyAgICAgICAgICAgIF90aHJlYWRzX3F1ZXVlc1t0XSA9IHNlbGYuX3dvcmtfcXVldWUKKworICAgIGRlZiBzaHV0ZG93bihzZWxmLCB3YWl0PVRydWUpOgorICAgICAgICB3aXRoIHNlbGYuX3NodXRkb3duX2xvY2s6CisgICAgICAgICAgICBzZWxmLl9zaHV0ZG93biA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3dvcmtfcXVldWUucHV0KE5vbmUpCisgICAgICAgIGlmIHdhaXQ6CisgICAgICAgICAgICBmb3IgdCBpbiBzZWxmLl90aHJlYWRzOgorICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgc2h1dGRvd24uX19kb2NfXyA9IF9iYXNlLkV4ZWN1dG9yLnNodXRkb3duLl9fZG9jX18KZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGM3YWUyNzAuLjEyYmE1YWQgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtMSwxMDIgKzEsMTM0IEBACiAiIiJDb25maWd1cmF0aW9uIGZpbGUgcGFyc2VyLgogCi1BIHNldHVwIGZpbGUgY29uc2lzdHMgb2Ygc2VjdGlvbnMsIGxlYWQgYnkgYSAiW3NlY3Rpb25dIiBoZWFkZXIsCitBIGNvbmZpZ3VyYXRpb24gZmlsZSBjb25zaXN0cyBvZiBzZWN0aW9ucywgbGVhZCBieSBhICJbc2VjdGlvbl0iIGhlYWRlciwKIGFuZCBmb2xsb3dlZCBieSAibmFtZTogdmFsdWUiIGVudHJpZXMsIHdpdGggY29udGludWF0aW9ucyBhbmQgc3VjaCBpbgogdGhlIHN0eWxlIG9mIFJGQyA4MjIuCiAKLVRoZSBvcHRpb24gdmFsdWVzIGNhbiBjb250YWluIGZvcm1hdCBzdHJpbmdzIHdoaWNoIHJlZmVyIHRvIG90aGVyIHZhbHVlcyBpbgotdGhlIHNhbWUgc2VjdGlvbiwgb3IgdmFsdWVzIGluIGEgc3BlY2lhbCBbREVGQVVMVF0gc2VjdGlvbi4KLQotRm9yIGV4YW1wbGU6Ci0KLSAgICBzb21ldGhpbmc6ICUoZGlyKXMvd2hhdGV2ZXIKLQotd291bGQgcmVzb2x2ZSB0aGUgIiUoZGlyKXMiIHRvIHRoZSB2YWx1ZSBvZiBkaXIuICBBbGwgcmVmZXJlbmNlCi1leHBhbnNpb25zIGFyZSBkb25lIGxhdGUsIG9uIGRlbWFuZC4KLQogSW50cmluc2ljIGRlZmF1bHRzIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGFzc2luZyB0aGVtIGludG8gdGhlCiBDb25maWdQYXJzZXIgY29uc3RydWN0b3IgYXMgYSBkaWN0aW9uYXJ5LgogCiBjbGFzczoKIAogQ29uZmlnUGFyc2VyIC0tIHJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIGEgbGlzdCBvZgotICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGFuZCBtYW5hZ2luZyB0aGUgcGFyc2VkIGRhdGFiYXNlLgorICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLCBhbmQgbWFuYWdpbmcgdGhlIHBhcnNlZCBkYXRhYmFzZS4KIAogICAgIG1ldGhvZHM6CiAKLSAgICBfX2luaXRfXyhkZWZhdWx0cz1Ob25lKQotICAgICAgICBjcmVhdGUgdGhlIHBhcnNlciBhbmQgc3BlY2lmeSBhIGRpY3Rpb25hcnkgb2YgaW50cmluc2ljIGRlZmF1bHRzLiAgVGhlCi0gICAgICAgIGtleXMgbXVzdCBiZSBzdHJpbmdzLCB0aGUgdmFsdWVzIG11c3QgYmUgYXBwcm9wcmlhdGUgZm9yICUoKXMgc3RyaW5nCi0gICAgICAgIGludGVycG9sYXRpb24uICBOb3RlIHRoYXQgYF9fbmFtZV9fJyBpcyBhbHdheXMgYW4gaW50cmluc2ljIGRlZmF1bHQ7Ci0gICAgICAgIGl0cyB2YWx1ZSBpcyB0aGUgc2VjdGlvbidzIG5hbWUuCisgICAgX19pbml0X18oZGVmYXVsdHM9Tm9uZSwgZGljdF90eXBlPV9kZWZhdWx0X2RpY3QsIGFsbG93X25vX3ZhbHVlPUZhbHNlLAorICAgICAgICAgICAgIGRlbGltaXRlcnM9KCc9JywgJzonKSwgY29tbWVudF9wcmVmaXhlcz0oJyMnLCAnOycpLAorICAgICAgICAgICAgIGlubGluZV9jb21tZW50X3ByZWZpeGVzPU5vbmUsIHN0cmljdD1UcnVlLAorICAgICAgICAgICAgIGVtcHR5X2xpbmVzX2luX3ZhbHVlcz1UcnVlKToKKyAgICAgICAgQ3JlYXRlIHRoZSBwYXJzZXIuIFdoZW4gYGRlZmF1bHRzJyBpcyBnaXZlbiwgaXQgaXMgaW5pdGlhbGl6ZWQgaW50byB0aGUKKyAgICAgICAgZGljdGlvbmFyeSBvciBpbnRyaW5zaWMgZGVmYXVsdHMuIFRoZSBrZXlzIG11c3QgYmUgc3RyaW5ncywgdGhlIHZhbHVlcworICAgICAgICBtdXN0IGJlIGFwcHJvcHJpYXRlIGZvciAlKClzIHN0cmluZyBpbnRlcnBvbGF0aW9uLgorCisgICAgICAgIFdoZW4gYGRpY3RfdHlwZScgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGRpY3Rpb25hcnkKKyAgICAgICAgb2JqZWN0cyBmb3IgdGhlIGxpc3Qgb2Ygc2VjdGlvbnMsIGZvciB0aGUgb3B0aW9ucyB3aXRoaW4gYSBzZWN0aW9uLCBhbmQKKyAgICAgICAgZm9yIHRoZSBkZWZhdWx0IHZhbHVlcy4KKworICAgICAgICBXaGVuIGBkZWxpbWl0ZXJzJyBpcyBnaXZlbiwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBzZXQgb2Ygc3Vic3RyaW5ncworICAgICAgICB0aGF0IGRpdmlkZSBrZXlzIGZyb20gdmFsdWVzLgorCisgICAgICAgIFdoZW4gYGNvbW1lbnRfcHJlZml4ZXMnIGlzIGdpdmVuLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNldCBvZgorICAgICAgICBzdWJzdHJpbmdzIHRoYXQgcHJlZml4IGNvbW1lbnRzIGluIGVtcHR5IGxpbmVzLiBDb21tZW50cyBjYW4gYmUKKyAgICAgICAgaW5kZW50ZWQuCisKKyAgICAgICAgV2hlbiBgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMnIGlzIGdpdmVuLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNldCBvZgorICAgICAgICBzdWJzdHJpbmdzIHRoYXQgcHJlZml4IGNvbW1lbnRzIGluIG5vbi1lbXB0eSBsaW5lcy4KKworICAgICAgICBXaGVuIGBzdHJpY3RgIGlzIFRydWUsIHRoZSBwYXJzZXIgd29uJ3QgYWxsb3cgZm9yIGFueSBzZWN0aW9uIG9yIG9wdGlvbgorICAgICAgICBkdXBsaWNhdGVzIHdoaWxlIHJlYWRpbmcgZnJvbSBhIHNpbmdsZSBzb3VyY2UgKGZpbGUsIHN0cmluZyBvcgorICAgICAgICBkaWN0aW9uYXJ5KS4gRGVmYXVsdCBpcyBUcnVlLgorCisgICAgICAgIFdoZW4gYGVtcHR5X2xpbmVzX2luX3ZhbHVlcycgaXMgRmFsc2UgKGRlZmF1bHQ6IFRydWUpLCBlYWNoIGVtcHR5IGxpbmUKKyAgICAgICAgbWFya3MgdGhlIGVuZCBvZiBhbiBvcHRpb24uIE90aGVyd2lzZSwgaW50ZXJuYWwgZW1wdHkgbGluZXMgb2YKKyAgICAgICAgYSBtdWx0aWxpbmUgb3B0aW9uIGFyZSBrZXB0IGFzIHBhcnQgb2YgdGhlIHZhbHVlLgorCisgICAgICAgIFdoZW4gYGFsbG93X25vX3ZhbHVlJyBpcyBUcnVlIChkZWZhdWx0OiBGYWxzZSksIG9wdGlvbnMgd2l0aG91dAorICAgICAgICB2YWx1ZXMgYXJlIGFjY2VwdGVkOyB0aGUgdmFsdWUgcHJlc2VudGVkIGZvciB0aGVzZSBpcyBOb25lLgogCiAgICAgc2VjdGlvbnMoKQotICAgICAgICByZXR1cm4gYWxsIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gbmFtZXMsIHNhbnMgREVGQVVMVAorICAgICAgICBSZXR1cm4gYWxsIHRoZSBjb25maWd1cmF0aW9uIHNlY3Rpb24gbmFtZXMsIHNhbnMgREVGQVVMVC4KIAogICAgIGhhc19zZWN0aW9uKHNlY3Rpb24pCi0gICAgICAgIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBzZWN0aW9uIGV4aXN0cworICAgICAgICBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gc2VjdGlvbiBleGlzdHMuCiAKICAgICBoYXNfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbikKLSAgICAgICAgcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9wdGlvbiBleGlzdHMgaW4gdGhlIGdpdmVuIHNlY3Rpb24KKyAgICAgICAgUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9wdGlvbiBleGlzdHMgaW4gdGhlIGdpdmVuIHNlY3Rpb24uCiAKICAgICBvcHRpb25zKHNlY3Rpb24pCi0gICAgICAgIHJldHVybiBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG5hbWVkIHNlY3Rpb24KKyAgICAgICAgUmV0dXJuIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbmFtZWQgc2VjdGlvbi4KIAotICAgIHJlYWQoZmlsZW5hbWVzKQotICAgICAgICByZWFkIGFuZCBwYXJzZSB0aGUgbGlzdCBvZiBuYW1lZCBjb25maWd1cmF0aW9uIGZpbGVzLCBnaXZlbiBieQorICAgIHJlYWQoZmlsZW5hbWVzLCBlbmNvZGluZz1Ob25lKQorICAgICAgICBSZWFkIGFuZCBwYXJzZSB0aGUgbGlzdCBvZiBuYW1lZCBjb25maWd1cmF0aW9uIGZpbGVzLCBnaXZlbiBieQogICAgICAgICBuYW1lLiAgQSBzaW5nbGUgZmlsZW5hbWUgaXMgYWxzbyBhbGxvd2VkLiAgTm9uLWV4aXN0aW5nIGZpbGVzCiAgICAgICAgIGFyZSBpZ25vcmVkLiAgUmV0dXJuIGxpc3Qgb2Ygc3VjY2Vzc2Z1bGx5IHJlYWQgZmlsZXMuCiAKLSAgICByZWFkZnAoZnAsIGZpbGVuYW1lPU5vbmUpCi0gICAgICAgIHJlYWQgYW5kIHBhcnNlIG9uZSBjb25maWd1cmF0aW9uIGZpbGUsIGdpdmVuIGFzIGEgZmlsZSBvYmplY3QuCi0gICAgICAgIFRoZSBmaWxlbmFtZSBkZWZhdWx0cyB0byBmcC5uYW1lOyBpdCBpcyBvbmx5IHVzZWQgaW4gZXJyb3IKLSAgICAgICAgbWVzc2FnZXMgKGlmIGZwIGhhcyBubyBgbmFtZScgYXR0cmlidXRlLCB0aGUgc3RyaW5nIGA8Pz8/PicgaXMgdXNlZCkuCisgICAgcmVhZF9maWxlKGYsIGZpbGVuYW1lPU5vbmUpCisgICAgICAgIFJlYWQgYW5kIHBhcnNlIG9uZSBjb25maWd1cmF0aW9uIGZpbGUsIGdpdmVuIGFzIGEgZmlsZSBvYmplY3QuCisgICAgICAgIFRoZSBmaWxlbmFtZSBkZWZhdWx0cyB0byBmLm5hbWU7IGl0IGlzIG9ubHkgdXNlZCBpbiBlcnJvcgorICAgICAgICBtZXNzYWdlcyAoaWYgZiBoYXMgbm8gYG5hbWUnIGF0dHJpYnV0ZSwgdGhlIHN0cmluZyBgPD8/Pz4nIGlzIHVzZWQpLgogCi0gICAgZ2V0KHNlY3Rpb24sIG9wdGlvbiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpCi0gICAgICAgIHJldHVybiBhIHN0cmluZyB2YWx1ZSBmb3IgdGhlIG5hbWVkIG9wdGlvbi4gIEFsbCAlIGludGVycG9sYXRpb25zIGFyZQorICAgIHJlYWRfc3RyaW5nKHN0cmluZykKKyAgICAgICAgUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYSBnaXZlbiBzdHJpbmcuCisKKyAgICByZWFkX2RpY3QoZGljdGlvbmFyeSkKKyAgICAgICAgUmVhZCBjb25maWd1cmF0aW9uIGZyb20gYSBkaWN0aW9uYXJ5LiBLZXlzIGFyZSBzZWN0aW9uIG5hbWVzLAorICAgICAgICB2YWx1ZXMgYXJlIGRpY3Rpb25hcmllcyB3aXRoIGtleXMgYW5kIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBwcmVzZW50CisgICAgICAgIGluIHRoZSBzZWN0aW9uLiBJZiB0aGUgdXNlZCBkaWN0aW9uYXJ5IHR5cGUgcHJlc2VydmVzIG9yZGVyLCBzZWN0aW9ucworICAgICAgICBhbmQgdGhlaXIga2V5cyB3aWxsIGJlIGFkZGVkIGluIG9yZGVyLiBWYWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgY29udmVydGVkIHRvIHN0cmluZ3MuCisKKyAgICBnZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwgZmFsbGJhY2s9X1VOU0VUKQorICAgICAgICBSZXR1cm4gYSBzdHJpbmcgdmFsdWUgZm9yIHRoZSBuYW1lZCBvcHRpb24uICBBbGwgJSBpbnRlcnBvbGF0aW9ucyBhcmUKICAgICAgICAgZXhwYW5kZWQgaW4gdGhlIHJldHVybiB2YWx1ZXMsIGJhc2VkIG9uIHRoZSBkZWZhdWx0cyBwYXNzZWQgaW50byB0aGUKICAgICAgICAgY29uc3RydWN0b3IgYW5kIHRoZSBERUZBVUxUIHNlY3Rpb24uICBBZGRpdGlvbmFsIHN1YnN0aXR1dGlvbnMgbWF5IGJlCiAgICAgICAgIHByb3ZpZGVkIHVzaW5nIHRoZSBgdmFycycgYXJndW1lbnQsIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IHdob3NlCi0gICAgICAgIGNvbnRlbnRzIG92ZXJyaWRlIGFueSBwcmUtZXhpc3RpbmcgZGVmYXVsdHMuCisgICAgICAgIGNvbnRlbnRzIG92ZXJyaWRlIGFueSBwcmUtZXhpc3RpbmcgZGVmYXVsdHMuIElmIGBvcHRpb24nIGlzIGEga2V5IGluCisgICAgICAgIGB2YXJzJywgdGhlIHZhbHVlIGZyb20gYHZhcnMnIGlzIHVzZWQuCiAKLSAgICBnZXRpbnQoc2VjdGlvbiwgb3B0aW9ucykKLSAgICAgICAgbGlrZSBnZXQoKSwgYnV0IGNvbnZlcnQgdmFsdWUgdG8gYW4gaW50ZWdlcgorICAgIGdldGludChzZWN0aW9uLCBvcHRpb25zLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwgZmFsbGJhY2s9X1VOU0VUKQorICAgICAgICBMaWtlIGdldCgpLCBidXQgY29udmVydCB2YWx1ZSB0byBhbiBpbnRlZ2VyLgogCi0gICAgZ2V0ZmxvYXQoc2VjdGlvbiwgb3B0aW9ucykKLSAgICAgICAgbGlrZSBnZXQoKSwgYnV0IGNvbnZlcnQgdmFsdWUgdG8gYSBmbG9hdAorICAgIGdldGZsb2F0KHNlY3Rpb24sIG9wdGlvbnMsIHJhdz1GYWxzZSwgdmFycz1Ob25lLCBmYWxsYmFjaz1fVU5TRVQpCisgICAgICAgIExpa2UgZ2V0KCksIGJ1dCBjb252ZXJ0IHZhbHVlIHRvIGEgZmxvYXQuCiAKLSAgICBnZXRib29sZWFuKHNlY3Rpb24sIG9wdGlvbnMpCi0gICAgICAgIGxpa2UgZ2V0KCksIGJ1dCBjb252ZXJ0IHZhbHVlIHRvIGEgYm9vbGVhbiAoY3VycmVudGx5IGNhc2UKKyAgICBnZXRib29sZWFuKHNlY3Rpb24sIG9wdGlvbnMsIHJhdz1GYWxzZSwgdmFycz1Ob25lLCBmYWxsYmFjaz1fVU5TRVQpCisgICAgICAgIExpa2UgZ2V0KCksIGJ1dCBjb252ZXJ0IHZhbHVlIHRvIGEgYm9vbGVhbiAoY3VycmVudGx5IGNhc2UKICAgICAgICAgaW5zZW5zaXRpdmVseSBkZWZpbmVkIGFzIDAsIGZhbHNlLCBubywgb2ZmIGZvciBGYWxzZSwgYW5kIDEsIHRydWUsCiAgICAgICAgIHllcywgb24gZm9yIFRydWUpLiAgUmV0dXJucyBGYWxzZSBvciBUcnVlLgogCi0gICAgaXRlbXMoc2VjdGlvbiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpCisgICAgaXRlbXMoc2VjdGlvbj1fVU5TRVQsIHJhdz1GYWxzZSwgdmFycz1Ob25lKQorICAgICAgICBJZiBzZWN0aW9uIGlzIGdpdmVuLCByZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyB3aXRoIChzZWN0aW9uX25hbWUsCisgICAgICAgIHNlY3Rpb25fcHJveHkpIGZvciBlYWNoIHNlY3Rpb24sIGluY2x1ZGluZyBERUZBVUxUU0VDVC4gT3RoZXJ3aXNlLAogICAgICAgICByZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyB3aXRoIChuYW1lLCB2YWx1ZSkgZm9yIGVhY2ggb3B0aW9uCiAgICAgICAgIGluIHRoZSBzZWN0aW9uLgogCiAgICAgcmVtb3ZlX3NlY3Rpb24oc2VjdGlvbikKLSAgICAgICAgcmVtb3ZlIHRoZSBnaXZlbiBmaWxlIHNlY3Rpb24gYW5kIGFsbCBpdHMgb3B0aW9ucworICAgICAgICBSZW1vdmUgdGhlIGdpdmVuIGZpbGUgc2VjdGlvbiBhbmQgYWxsIGl0cyBvcHRpb25zLgogCiAgICAgcmVtb3ZlX29wdGlvbihzZWN0aW9uLCBvcHRpb24pCi0gICAgICAgIHJlbW92ZSB0aGUgZ2l2ZW4gb3B0aW9uIGZyb20gdGhlIGdpdmVuIHNlY3Rpb24KKyAgICAgICAgUmVtb3ZlIHRoZSBnaXZlbiBvcHRpb24gZnJvbSB0aGUgZ2l2ZW4gc2VjdGlvbi4KIAogICAgIHNldChzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQotICAgICAgICBzZXQgdGhlIGdpdmVuIG9wdGlvbgorICAgICAgICBTZXQgdGhlIGdpdmVuIG9wdGlvbi4KIAotICAgIHdyaXRlKGZwKQotICAgICAgICB3cml0ZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZSBpbiAuaW5pIGZvcm1hdAorICAgIHdyaXRlKGZwLCBzcGFjZV9hcm91bmRfZGVsaW1pdGVycz1UcnVlKQorICAgICAgICBXcml0ZSB0aGUgY29uZmlndXJhdGlvbiBzdGF0ZSBpbiAuaW5pIGZvcm1hdC4gSWYKKyAgICAgICAgYHNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzJyBpcyBUcnVlICh0aGUgZGVmYXVsdCksIGRlbGltaXRlcnMKKyAgICAgICAgYmV0d2VlbiBrZXlzIGFuZCB2YWx1ZXMgYXJlIHN1cnJvdW5kZWQgYnkgc3BhY2VzLgogIiIiCiAKLXRyeToKLSAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfZGVmYXVsdF9kaWN0Ci1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBmYWxsYmFjayBmb3Igc2V0dXAucHkgd2hpY2ggaGFzbid0IHlldCBidWlsdCBfY29sbGVjdGlvbnMKLSAgICBfZGVmYXVsdF9kaWN0ID0gZGljdAotCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBNdXRhYmxlTWFwcGluZywgT3JkZXJlZERpY3QgYXMgX2RlZmF1bHRfZGljdCwgX0NoYWluTWFwCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCiAKLV9fYWxsX18gPSBbIk5vU2VjdGlvbkVycm9yIiwgIkR1cGxpY2F0ZVNlY3Rpb25FcnJvciIsICJOb09wdGlvbkVycm9yIiwKLSAgICAgICAgICAgIkludGVycG9sYXRpb25FcnJvciIsICJJbnRlcnBvbGF0aW9uRGVwdGhFcnJvciIsCitfX2FsbF9fID0gWyJOb1NlY3Rpb25FcnJvciIsICJEdXBsaWNhdGVPcHRpb25FcnJvciIsICJEdXBsaWNhdGVTZWN0aW9uRXJyb3IiLAorICAgICAgICAgICAiTm9PcHRpb25FcnJvciIsICJJbnRlcnBvbGF0aW9uRXJyb3IiLCAiSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3IiLAogICAgICAgICAgICAiSW50ZXJwb2xhdGlvblN5bnRheEVycm9yIiwgIlBhcnNpbmdFcnJvciIsCiAgICAgICAgICAgICJNaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yIiwKICAgICAgICAgICAgIkNvbmZpZ1BhcnNlciIsICJTYWZlQ29uZmlnUGFyc2VyIiwgIlJhd0NvbmZpZ1BhcnNlciIsCkBAIC0xMTQsMTIgKzE0NiwxNCBAQAogCiAgICAgZGVmIF9nZXRfbWVzc2FnZShzZWxmKToKICAgICAgICAgIiIiR2V0dGVyIGZvciAnbWVzc2FnZSc7IG5lZWRlZCBvbmx5IHRvIG92ZXJyaWRlIGRlcHJlY2F0aW9uIGluCi0gICAgICAgIEJhc2VFeGNlcHRpb24uIiIiCisgICAgICAgIEJhc2VFeGNlcHRpb24uCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5fX21lc3NhZ2UKIAogICAgIGRlZiBfc2V0X21lc3NhZ2Uoc2VsZiwgdmFsdWUpOgogICAgICAgICAiIiJTZXR0ZXIgZm9yICdtZXNzYWdlJzsgbmVlZGVkIG9ubHkgdG8gb3ZlcnJpZGUgZGVwcmVjYXRpb24gaW4KLSAgICAgICAgQmFzZUV4Y2VwdGlvbi4iIiIKKyAgICAgICAgQmFzZUV4Y2VwdGlvbi4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX19tZXNzYWdlID0gdmFsdWUKIAogICAgICMgQmFzZUV4Y2VwdGlvbi5tZXNzYWdlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDIuNi4gIFRvIHByZXZlbnQKQEAgLTEzNiwxOSArMTcwLDY4IEBACiAKICAgICBfX3N0cl9fID0gX19yZXByX18KIAorCiBjbGFzcyBOb1NlY3Rpb25FcnJvcihFcnJvcik6CiAgICAgIiIiUmFpc2VkIHdoZW4gbm8gc2VjdGlvbiBtYXRjaGVzIGEgcmVxdWVzdGVkIG9wdGlvbi4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWN0aW9uKToKICAgICAgICAgRXJyb3IuX19pbml0X18oc2VsZiwgJ05vIHNlY3Rpb246ICVyJyAlIChzZWN0aW9uLCkpCiAgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKyAgICAgICAgc2VsZi5hcmdzID0gKHNlY3Rpb24sICkKKwogCiBjbGFzcyBEdXBsaWNhdGVTZWN0aW9uRXJyb3IoRXJyb3IpOgotICAgICIiIlJhaXNlZCB3aGVuIGEgc2VjdGlvbiBpcyBtdWx0aXBseS1jcmVhdGVkLiIiIgorICAgICIiIlJhaXNlZCB3aGVuIGEgc2VjdGlvbiBpcyByZXBlYXRlZCBpbiBhbiBpbnB1dCBzb3VyY2UuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VjdGlvbik6Ci0gICAgICAgIEVycm9yLl9faW5pdF9fKHNlbGYsICJTZWN0aW9uICVyIGFscmVhZHkgZXhpc3RzIiAlIHNlY3Rpb24pCisgICAgUG9zc2libGUgcmVwZXRpdGlvbnMgdGhhdCByYWlzZSB0aGlzIGV4Y2VwdGlvbiBhcmU6IG11bHRpcGxlIGNyZWF0aW9uCisgICAgdXNpbmcgdGhlIEFQSSBvciBpbiBzdHJpY3QgcGFyc2VycyB3aGVuIGEgc2VjdGlvbiBpcyBmb3VuZCBtb3JlIHRoYW4gb25jZQorICAgIGluIGEgc2luZ2xlIGlucHV0IGZpbGUsIHN0cmluZyBvciBkaWN0aW9uYXJ5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlY3Rpb24sIHNvdXJjZT1Ob25lLCBsaW5lbm89Tm9uZSk6CisgICAgICAgIG1zZyA9IFtyZXByKHNlY3Rpb24pLCAiIGFscmVhZHkgZXhpc3RzIl0KKyAgICAgICAgaWYgc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IFsiV2hpbGUgcmVhZGluZyBmcm9tICIsIHNvdXJjZV0KKyAgICAgICAgICAgIGlmIGxpbmVubyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgiIFtsaW5lIHswOjJkfV0iLmZvcm1hdChsaW5lbm8pKQorICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoIjogc2VjdGlvbiAiKQorICAgICAgICAgICAgbWVzc2FnZS5leHRlbmQobXNnKQorICAgICAgICAgICAgbXNnID0gbWVzc2FnZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnLmluc2VydCgwLCAiU2VjdGlvbiAiKQorICAgICAgICBFcnJvci5fX2luaXRfXyhzZWxmLCAiIi5qb2luKG1zZykpCiAgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKKyAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KKyAgICAgICAgc2VsZi5hcmdzID0gKHNlY3Rpb24sIHNvdXJjZSwgbGluZW5vKQorCisKK2NsYXNzIER1cGxpY2F0ZU9wdGlvbkVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgYnkgc3RyaWN0IHBhcnNlcnMgd2hlbiBhbiBvcHRpb24gaXMgcmVwZWF0ZWQgaW4gYW4gaW5wdXQgc291cmNlLgorCisgICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiByYWlzZXMgdGhpcyBleGNlcHRpb24gb25seSB3aGVuIGFuIG9wdGlvbiBpcyBmb3VuZAorICAgIG1vcmUgdGhhbiBvbmNlIGluIGEgc2luZ2xlIGZpbGUsIHN0cmluZyBvciBkaWN0aW9uYXJ5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgc291cmNlPU5vbmUsIGxpbmVubz1Ob25lKToKKyAgICAgICAgbXNnID0gW3JlcHIob3B0aW9uKSwgIiBpbiBzZWN0aW9uICIsIHJlcHIoc2VjdGlvbiksCisgICAgICAgICAgICAgICAiIGFscmVhZHkgZXhpc3RzIl0KKyAgICAgICAgaWYgc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IFsiV2hpbGUgcmVhZGluZyBmcm9tICIsIHNvdXJjZV0KKyAgICAgICAgICAgIGlmIGxpbmVubyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCgiIFtsaW5lIHswOjJkfV0iLmZvcm1hdChsaW5lbm8pKQorICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoIjogb3B0aW9uICIpCisgICAgICAgICAgICBtZXNzYWdlLmV4dGVuZChtc2cpCisgICAgICAgICAgICBtc2cgPSBtZXNzYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtc2cuaW5zZXJ0KDAsICJPcHRpb24gIikKKyAgICAgICAgRXJyb3IuX19pbml0X18oc2VsZiwgIiIuam9pbihtc2cpKQorICAgICAgICBzZWxmLnNlY3Rpb24gPSBzZWN0aW9uCisgICAgICAgIHNlbGYub3B0aW9uID0gb3B0aW9uCisgICAgICAgIHNlbGYuc291cmNlID0gc291cmNlCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIHNlbGYuYXJncyA9IChzZWN0aW9uLCBvcHRpb24sIHNvdXJjZSwgbGluZW5vKQorCiAKIGNsYXNzIE5vT3B0aW9uRXJyb3IoRXJyb3IpOgogICAgICIiIkEgcmVxdWVzdGVkIG9wdGlvbiB3YXMgbm90IGZvdW5kLiIiIgpAQCAtMTU4LDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24sIHNlY3Rpb24pKQogICAgICAgICBzZWxmLm9wdGlvbiA9IG9wdGlvbgogICAgICAgICBzZWxmLnNlY3Rpb24gPSBzZWN0aW9uCisgICAgICAgIHNlbGYuYXJncyA9IChvcHRpb24sIHNlY3Rpb24pCisKIAogY2xhc3MgSW50ZXJwb2xhdGlvbkVycm9yKEVycm9yKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciBpbnRlcnBvbGF0aW9uLXJlbGF0ZWQgZXhjZXB0aW9ucy4iIiIKQEAgLTE2Niw2ICsyNTEsOCBAQAogICAgICAgICBFcnJvci5fX2luaXRfXyhzZWxmLCBtc2cpCiAgICAgICAgIHNlbGYub3B0aW9uID0gb3B0aW9uCiAgICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KKyAgICAgICAgc2VsZi5hcmdzID0gKG9wdGlvbiwgc2VjdGlvbiwgbXNnKQorCiAKIGNsYXNzIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoSW50ZXJwb2xhdGlvbkVycm9yKToKICAgICAiIiJBIHN0cmluZyBzdWJzdGl0dXRpb24gcmVxdWlyZWQgYSBzZXR0aW5nIHdoaWNoIHdhcyBub3QgYXZhaWxhYmxlLiIiIgpAQCAtMTc5LDEwICsyNjYsMTYgQEAKICAgICAgICAgICAgICAgICUgKHNlY3Rpb24sIG9wdGlvbiwgcmVmZXJlbmNlLCByYXd2YWwpKQogICAgICAgICBJbnRlcnBvbGF0aW9uRXJyb3IuX19pbml0X18oc2VsZiwgb3B0aW9uLCBzZWN0aW9uLCBtc2cpCiAgICAgICAgIHNlbGYucmVmZXJlbmNlID0gcmVmZXJlbmNlCisgICAgICAgIHNlbGYuYXJncyA9IChvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgcmVmZXJlbmNlKQorCiAKIGNsYXNzIEludGVycG9sYXRpb25TeW50YXhFcnJvcihJbnRlcnBvbGF0aW9uRXJyb3IpOgotICAgICIiIlJhaXNlZCB3aGVuIHRoZSBzb3VyY2UgdGV4dCBpbnRvIHdoaWNoIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUKLSAgICBkb2VzIG5vdCBjb25mb3JtIHRvIHRoZSByZXF1aXJlZCBzeW50YXguIiIiCisgICAgIiIiUmFpc2VkIHdoZW4gdGhlIHNvdXJjZSB0ZXh0IGNvbnRhaW5zIGludmFsaWQgc3ludGF4LgorCisgICAgQ3VycmVudCBpbXBsZW1lbnRhdGlvbiByYWlzZXMgdGhpcyBleGNlcHRpb24gd2hlbiB0aGUgc291cmNlIHRleHQgaW50bworICAgIHdoaWNoIHN1YnN0aXR1dGlvbnMgYXJlIG1hZGUgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgcmVxdWlyZWQgc3ludGF4LgorICAgICIiIgorCiAKIGNsYXNzIEludGVycG9sYXRpb25EZXB0aEVycm9yKEludGVycG9sYXRpb25FcnJvcik6CiAgICAgIiIiUmFpc2VkIHdoZW4gc3Vic3RpdHV0aW9ucyBhcmUgbmVzdGVkIHRvbyBkZWVwbHkuIiIiCkBAIC0xOTQsMTkgKzI4Nyw1MiBAQAogICAgICAgICAgICAgICAgIlx0cmF3dmFsIDogJXNcbiIKICAgICAgICAgICAgICAgICUgKHNlY3Rpb24sIG9wdGlvbiwgcmF3dmFsKSkKICAgICAgICAgSW50ZXJwb2xhdGlvbkVycm9yLl9faW5pdF9fKHNlbGYsIG9wdGlvbiwgc2VjdGlvbiwgbXNnKQorICAgICAgICBzZWxmLmFyZ3MgPSAob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCisKIAogY2xhc3MgUGFyc2luZ0Vycm9yKEVycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2VzIG5vdCBmb2xsb3cgbGVnYWwgc3ludGF4LiIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgRXJyb3IuX19pbml0X18oc2VsZiwgJ0ZpbGUgY29udGFpbnMgcGFyc2luZyBlcnJvcnM6ICVzJyAlIGZpbGVuYW1lKQotICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlPU5vbmUsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICAjIEV4YWN0bHkgb25lIG9mIGBzb3VyY2UnL2BmaWxlbmFtZScgYXJndW1lbnRzIGhhcyB0byBiZSBnaXZlbi4KKyAgICAgICAgIyBgZmlsZW5hbWUnIGtlcHQgZm9yIGNvbXBhdGliaWxpdHkuCisgICAgICAgIGlmIGZpbGVuYW1lIGFuZCBzb3VyY2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBmaWxlbmFtZScgYW5kIGBzb3VyY2UnLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2UgYHNvdXJjZScuIikKKyAgICAgICAgZWxpZiBub3QgZmlsZW5hbWUgYW5kIG5vdCBzb3VyY2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZXF1aXJlZCBhcmd1bWVudCBgc291cmNlJyBub3QgZ2l2ZW4uIikKKyAgICAgICAgZWxpZiBmaWxlbmFtZToKKyAgICAgICAgICAgIHNvdXJjZSA9IGZpbGVuYW1lCisgICAgICAgIEVycm9yLl9faW5pdF9fKHNlbGYsICdTb3VyY2UgY29udGFpbnMgcGFyc2luZyBlcnJvcnM6ICVzJyAlIHNvdXJjZSkKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBzb3VyY2UKICAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLmFyZ3MgPSAoc291cmNlLCApCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZmlsZW5hbWUoc2VsZik6CisgICAgICAgICIiIkRlcHJlY2F0ZWQsIHVzZSBgc291cmNlJy4iIiIKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJUaGUgJ2ZpbGVuYW1lJyBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICJVc2UgJ3NvdXJjZScgaW5zdGVhZC4iLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2UKKworICAgIEBmaWxlbmFtZS5zZXR0ZXIKKyAgICBkZWYgZmlsZW5hbWUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJEZXByZWNhdGVkLCB1c2VyIGBzb3VyY2UnLiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoZSAnZmlsZW5hbWUnIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgIlVzZSAnc291cmNlJyBpbnN0ZWFkLiIsCisgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICApCisgICAgICAgIHNlbGYuc291cmNlID0gdmFsdWUKIAogICAgIGRlZiBhcHBlbmQoc2VsZiwgbGluZW5vLCBsaW5lKToKICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKChsaW5lbm8sIGxpbmUpKQogICAgICAgICBzZWxmLm1lc3NhZ2UgKz0gJ1xuXHRbbGluZSAlMmRdOiAlcycgJSAobGluZW5vLCBsaW5lKQogCisKIGNsYXNzIE1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IoUGFyc2luZ0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGtleS12YWx1ZSBwYWlyIGlzIGZvdW5kIGJlZm9yZSBhbnkgc2VjdGlvbiBoZWFkZXIuIiIiCiAKQEAgLTIxNSwxOSArMzQxLDI5NCBAQAogICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICdGaWxlIGNvbnRhaW5zIG5vIHNlY3Rpb24gaGVhZGVycy5cbmZpbGU6ICVzLCBsaW5lOiAlZFxuJXInICUKICAgICAgICAgICAgIChmaWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYuc291cmNlID0gZmlsZW5hbWUKICAgICAgICAgc2VsZi5saW5lbm8gPSBsaW5lbm8KICAgICAgICAgc2VsZi5saW5lID0gbGluZQorICAgICAgICBzZWxmLmFyZ3MgPSAoZmlsZW5hbWUsIGxpbmVubywgbGluZSkKIAogCi1jbGFzcyBSYXdDb25maWdQYXJzZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRzPU5vbmUsIGRpY3RfdHlwZT1fZGVmYXVsdF9kaWN0KToKKyMgVXNlZCBpbiBwYXJzZXIgZ2V0dGVycyB0byBpbmRpY2F0ZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiBhIHNwZWNpZmljCisjIG9wdGlvbiBpcyBub3QgZm91bmQgaXQgdG8gcmFpc2UgYW4gZXhjZXB0aW9uLiBDcmVhdGVkIHRvIGVuYWJsZSBgTm9uZScgYXMKKyMgYSB2YWxpZCBmYWxsYmFjayB2YWx1ZS4KK19VTlNFVCA9IG9iamVjdCgpCisKKworY2xhc3MgSW50ZXJwb2xhdGlvbjoKKyAgICAiIiJEdW1teSBpbnRlcnBvbGF0aW9uIHRoYXQgcGFzc2VzIHRoZSB2YWx1ZSB0aHJvdWdoIHdpdGggbm8gY2hhbmdlcy4iIiIKKworICAgIGRlZiBiZWZvcmVfZ2V0KHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSwgZGVmYXVsdHMpOgorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBiZWZvcmVfc2V0KHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGJlZm9yZV9yZWFkKHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgZGVmIGJlZm9yZV93cml0ZShzZWxmLCBwYXJzZXIsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgICAgICByZXR1cm4gdmFsdWUKKworCitjbGFzcyBCYXNpY0ludGVycG9sYXRpb24oSW50ZXJwb2xhdGlvbik6CisgICAgIiIiSW50ZXJwb2xhdGlvbiBhcyBpbXBsZW1lbnRlZCBpbiB0aGUgY2xhc3NpYyBDb25maWdQYXJzZXIuCisKKyAgICBUaGUgb3B0aW9uIHZhbHVlcyBjYW4gY29udGFpbiBmb3JtYXQgc3RyaW5ncyB3aGljaCByZWZlciB0byBvdGhlciB2YWx1ZXMgaW4KKyAgICB0aGUgc2FtZSBzZWN0aW9uLCBvciB2YWx1ZXMgaW4gdGhlIHNwZWNpYWwgZGVmYXVsdCBzZWN0aW9uLgorCisgICAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgc29tZXRoaW5nOiAlKGRpcilzL3doYXRldmVyCisKKyAgICB3b3VsZCByZXNvbHZlIHRoZSAiJShkaXIpcyIgdG8gdGhlIHZhbHVlIG9mIGRpci4gIEFsbCByZWZlcmVuY2UKKyAgICBleHBhbnNpb25zIGFyZSBkb25lIGxhdGUsIG9uIGRlbWFuZC4gSWYgYSB1c2VyIG5lZWRzIHRvIHVzZSBhIGJhcmUgJSBpbgorICAgIGEgY29uZmlndXJhdGlvbiBmaWxlLCBzaGUgY2FuIGVzY2FwZSBpdCBieSB3cml0aW5nICUlLiBPdGhlciBvdGhlciAlIHVzYWdlCisgICAgaXMgY29uc2lkZXJlZCBhIHVzZXIgZXJyb3IgYW5kIHJhaXNlcyBgSW50ZXJwb2xhdGlvblN5bnRheEVycm9yJy4iIiIKKworICAgIF9LRVlDUkUgPSByZS5jb21waWxlKHIiJVwoKFteKV0rKVwpcyIpCisKKyAgICBkZWYgYmVmb3JlX2dldChzZWxmLCBwYXJzZXIsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUsIGRlZmF1bHRzKToKKyAgICAgICAgTCA9IFtdCisgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHRpb24sIEwsIHZhbHVlLCBzZWN0aW9uLCBkZWZhdWx0cywgMSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oTCkKKworICAgIGRlZiBiZWZvcmVfc2V0KHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgICAgIHRtcF92YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyUlJywgJycpICMgZXNjYXBlZCBwZXJjZW50IHNpZ25zCisgICAgICAgIHRtcF92YWx1ZSA9IHNlbGYuX0tFWUNSRS5zdWIoJycsIHRtcF92YWx1ZSkgIyB2YWxpZCBzeW50YXgKKyAgICAgICAgaWYgJyUnIGluIHRtcF92YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgaW50ZXJwb2xhdGlvbiBzeW50YXggaW4gJXIgYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJWQiICUgKHZhbHVlLCB0bXBfdmFsdWUuZmluZCgnJScpKSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgX2ludGVycG9sYXRlX3NvbWUoc2VsZiwgcGFyc2VyLCBvcHRpb24sIGFjY3VtLCByZXN0LCBzZWN0aW9uLCBtYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKToKKyAgICAgICAgaWYgZGVwdGggPiBNQVhfSU5URVJQT0xBVElPTl9ERVBUSDoKKyAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmVzdCkKKyAgICAgICAgd2hpbGUgcmVzdDoKKyAgICAgICAgICAgIHAgPSByZXN0LmZpbmQoIiUiKQorICAgICAgICAgICAgaWYgcCA8IDA6CisgICAgICAgICAgICAgICAgYWNjdW0uYXBwZW5kKHJlc3QpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBwID4gMDoKKyAgICAgICAgICAgICAgICBhY2N1bS5hcHBlbmQocmVzdFs6cF0pCisgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbcDpdCisgICAgICAgICAgICAjIHAgaXMgbm8gbG9uZ2VyIHVzZWQKKyAgICAgICAgICAgIGMgPSByZXN0WzE6Ml0KKyAgICAgICAgICAgIGlmIGMgPT0gIiUiOgorICAgICAgICAgICAgICAgIGFjY3VtLmFwcGVuZCgiJSIpCisgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbMjpdCisgICAgICAgICAgICBlbGlmIGMgPT0gIigiOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9LRVlDUkUubWF0Y2gocmVzdCkKKyAgICAgICAgICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25TeW50YXhFcnJvcihvcHRpb24sIHNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGludGVycG9sYXRpb24gdmFyaWFibGUgcmVmZXJlbmNlICVyIiAlIHJlc3QpCisgICAgICAgICAgICAgICAgdmFyID0gcGFyc2VyLm9wdGlvbnhmb3JtKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2ID0gbWFwW3Zhcl0KKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJlc3QsIHZhcikKKyAgICAgICAgICAgICAgICBpZiAiJSIgaW4gdjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW50ZXJwb2xhdGVfc29tZShwYXJzZXIsIG9wdGlvbiwgYWNjdW0sIHYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgbWFwLCBkZXB0aCArIDEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYWNjdW0uYXBwZW5kKHYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25TeW50YXhFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAiJyUlJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICclJScgb3IgJygnLCAiCisgICAgICAgICAgICAgICAgICAgICJmb3VuZDogJXIiICUgKHJlc3QsKSkKKworCitjbGFzcyBFeHRlbmRlZEludGVycG9sYXRpb24oSW50ZXJwb2xhdGlvbik6CisgICAgIiIiQWR2YW5jZWQgdmFyaWFudCBvZiBpbnRlcnBvbGF0aW9uLCBzdXBwb3J0cyB0aGUgc3ludGF4IHVzZWQgYnkKKyAgICBgemMuYnVpbGRvdXQnLiBFbmFibGVzIGludGVycG9sYXRpb24gYmV0d2VlbiBzZWN0aW9ucy4iIiIKKworICAgIF9LRVlDUkUgPSByZS5jb21waWxlKHIiXCRceyhbXn1dKylcfSIpCisKKyAgICBkZWYgYmVmb3JlX2dldChzZWxmLCBwYXJzZXIsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUsIGRlZmF1bHRzKToKKyAgICAgICAgTCA9IFtdCisgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHRpb24sIEwsIHZhbHVlLCBzZWN0aW9uLCBkZWZhdWx0cywgMSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oTCkKKworICAgIGRlZiBiZWZvcmVfc2V0KHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgICAgIHRtcF92YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyQkJywgJycpICMgZXNjYXBlZCBkb2xsYXIgc2lnbnMKKyAgICAgICAgdG1wX3ZhbHVlID0gc2VsZi5fS0VZQ1JFLnN1YignJywgdG1wX3ZhbHVlKSAjIHZhbGlkIHN5bnRheAorICAgICAgICBpZiAnJCcgaW4gdG1wX3ZhbHVlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBpbnRlcnBvbGF0aW9uIHN5bnRheCBpbiAlciBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiAlZCIgJSAodmFsdWUsIHRtcF92YWx1ZS5maW5kKCclJykpKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBfaW50ZXJwb2xhdGVfc29tZShzZWxmLCBwYXJzZXIsIG9wdGlvbiwgYWNjdW0sIHJlc3QsIHNlY3Rpb24sIG1hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgpOgorICAgICAgICBpZiBkZXB0aCA+IE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIOgorICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByZXN0KQorICAgICAgICB3aGlsZSByZXN0OgorICAgICAgICAgICAgcCA9IHJlc3QuZmluZCgiJCIpCisgICAgICAgICAgICBpZiBwIDwgMDoKKyAgICAgICAgICAgICAgICBhY2N1bS5hcHBlbmQocmVzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIHAgPiAwOgorICAgICAgICAgICAgICAgIGFjY3VtLmFwcGVuZChyZXN0WzpwXSkKKyAgICAgICAgICAgICAgICByZXN0ID0gcmVzdFtwOl0KKyAgICAgICAgICAgICMgcCBpcyBubyBsb25nZXIgdXNlZAorICAgICAgICAgICAgYyA9IHJlc3RbMToyXQorICAgICAgICAgICAgaWYgYyA9PSAiJCI6CisgICAgICAgICAgICAgICAgYWNjdW0uYXBwZW5kKCIkIikKKyAgICAgICAgICAgICAgICByZXN0ID0gcmVzdFsyOl0KKyAgICAgICAgICAgIGVsaWYgYyA9PSAieyI6CisgICAgICAgICAgICAgICAgbSA9IHNlbGYuX0tFWUNSRS5tYXRjaChyZXN0KQorICAgICAgICAgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvblN5bnRheEVycm9yKG9wdGlvbiwgc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgaW50ZXJwb2xhdGlvbiB2YXJpYWJsZSByZWZlcmVuY2UgJXIiICUgcmVzdCkKKyAgICAgICAgICAgICAgICBwYXRoID0gbS5ncm91cCgxKS5zcGxpdCgnOicpCisgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgc2VjdCA9IHNlY3Rpb24KKyAgICAgICAgICAgICAgICBvcHQgPSBvcHRpb24KKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihwYXRoKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0ID0gcGFyc2VyLm9wdGlvbnhmb3JtKHBhdGhbMF0pCisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gbWFwW29wdF0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsZW4ocGF0aCkgPT0gMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY3QgPSBwYXRoWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBvcHQgPSBwYXJzZXIub3B0aW9ueGZvcm0ocGF0aFsxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBwYXJzZXIuZ2V0KHNlY3QsIG9wdCwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNb3JlIHRoYW4gb25lICc6JyBmb3VuZDogJXIiICUgKHJlc3QsKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEtleUVycm9yLCBOb1NlY3Rpb25FcnJvciwgTm9PcHRpb25FcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJlc3QsICI6Ii5qb2luKHBhdGgpKQorICAgICAgICAgICAgICAgIGlmICIkIiBpbiB2OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcnBvbGF0ZV9zb21lKHBhcnNlciwgb3B0LCBhY2N1bSwgdiwgc2VjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0KHBhcnNlci5pdGVtcyhzZWN0LCByYXc9VHJ1ZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoICsgMSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBhY2N1bS5hcHBlbmQodikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvblN5bnRheEVycm9yKAorICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICInJCcgbXVzdCBiZSBmb2xsb3dlZCBieSAnJCcgb3IgJ3snLCAiCisgICAgICAgICAgICAgICAgICAgICJmb3VuZDogJXIiICUgKHJlc3QsKSkKKworCitjbGFzcyBMZWdhY3lJbnRlcnBvbGF0aW9uKEludGVycG9sYXRpb24pOgorICAgICIiIkRlcHJlY2F0ZWQgaW50ZXJwb2xhdGlvbiB1c2VkIGluIG9sZCB2ZXJzaW9ucyBvZiBDb25maWdQYXJzZXIuCisgICAgVXNlIEJhc2ljSW50ZXJwb2xhdGlvbiBvciBFeHRlbmRlZEludGVycG9sYXRpb24gaW5zdGVhZC4iIiIKKworICAgIF9LRVlDUkUgPSByZS5jb21waWxlKHIiJVwoKFteKV0qKVwpc3wuIikKKworICAgIGRlZiBiZWZvcmVfZ2V0KHNlbGYsIHBhcnNlciwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSwgdmFycyk6CisgICAgICAgIHJhd3ZhbCA9IHZhbHVlCisgICAgICAgIGRlcHRoID0gTUFYX0lOVEVSUE9MQVRJT05fREVQVEgKKyAgICAgICAgd2hpbGUgZGVwdGg6ICAgICAgICAgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCB0aGlzIHVudGlsIGl0J3MgZG9uZQorICAgICAgICAgICAgZGVwdGggLT0gMQorICAgICAgICAgICAgaWYgdmFsdWUgYW5kICIlKCIgaW4gdmFsdWU6CisgICAgICAgICAgICAgICAgcmVwbGFjZSA9IGZ1bmN0b29scy5wYXJ0aWFsKHNlbGYuX2ludGVycG9sYXRpb25fcmVwbGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyPXBhcnNlcikKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX0tFWUNSRS5zdWIocmVwbGFjZSwgdmFsdWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICUgdmFycworICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIGUuYXJnc1swXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdmFsdWUgYW5kICIlKCIgaW4gdmFsdWU6CisgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uRGVwdGhFcnJvcihvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgYmVmb3JlX3NldChzZWxmLCBwYXJzZXIsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ludGVycG9sYXRpb25fcmVwbGFjZShtYXRjaCwgcGFyc2VyKToKKyAgICAgICAgcyA9IG1hdGNoLmdyb3VwKDEpCisgICAgICAgIGlmIHMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiUlKCVzKXMiICUgcGFyc2VyLm9wdGlvbnhmb3JtKHMpCisKKworY2xhc3MgUmF3Q29uZmlnUGFyc2VyKE11dGFibGVNYXBwaW5nKToKKyAgICAiIiJDb25maWdQYXJzZXIgdGhhdCBkb2VzIG5vdCBkbyBpbnRlcnBvbGF0aW9uLiIiIgorCisgICAgIyBSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBwYXJzaW5nIHNlY3Rpb24gaGVhZGVycyBhbmQgb3B0aW9ucworICAgIF9TRUNUX1RNUEwgPSByIiIiCisgICAgICAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisgICAgICAgICg/UDxoZWFkZXI+W15dXSspICAgICAgICAgICAgICAgICAgIyB2ZXJ5IHBlcm1pc3NpdmUhCisgICAgICAgIFxdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBdCisgICAgICAgICIiIgorICAgIF9PUFRfVE1QTCA9IHIiIiIKKyAgICAgICAgKD9QPG9wdGlvbj4uKj8pICAgICAgICAgICAgICAgICAgICAjIHZlcnkgcGVybWlzc2l2ZSEKKyAgICAgICAgXHMqKD9QPHZpPntkZWxpbX0pXHMqICAgICAgICAgICAgICAjIGFueSBudW1iZXIgb2Ygc3BhY2UvdGFiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3dlZCBkZWxpbWl0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgYW55IHNwYWNlL3RhYgorICAgICAgICAoP1A8dmFsdWU+LiopJCAgICAgICAgICAgICAgICAgICAgICMgZXZlcnl0aGluZyB1cCB0byBlb2wKKyAgICAgICAgIiIiCisgICAgX09QVF9OVl9UTVBMID0gciIiIgorICAgICAgICAoP1A8b3B0aW9uPi4qPykgICAgICAgICAgICAgICAgICAgICMgdmVyeSBwZXJtaXNzaXZlIQorICAgICAgICBccyooPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYW55IG51bWJlciBvZiBzcGFjZS90YWIsCisgICAgICAgICg/UDx2aT57ZGVsaW19KVxzKiAgICAgICAgICAgICAgICAgIyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhbnkgb2YgdGhlIGFsbG93ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlbGltaXRlcnMsIGZvbGxvd2VkIGJ5IGFueQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3BhY2UvdGFiCisgICAgICAgICg/UDx2YWx1ZT4uKikpPyQgICAgICAgICAgICAgICAgICAgIyBldmVyeXRoaW5nIHVwIHRvIGVvbAorICAgICAgICAiIiIKKyAgICAjIEludGVycG9sYXRpb24gYWxnb3JpdGhtIHRvIGJlIHVzZWQgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbm90aGVyCisgICAgX0RFRkFVTFRfSU5URVJQT0xBVElPTiA9IEludGVycG9sYXRpb24oKQorICAgICMgQ29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIGZvciBtYXRjaGluZyBzZWN0aW9ucworICAgIFNFQ1RDUkUgPSByZS5jb21waWxlKF9TRUNUX1RNUEwsIHJlLlZFUkJPU0UpCisgICAgIyBDb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIG9wdGlvbnMgd2l0aCB0eXBpY2FsIHNlcGFyYXRvcnMKKyAgICBPUFRDUkUgPSByZS5jb21waWxlKF9PUFRfVE1QTC5mb3JtYXQoZGVsaW09Ij18OiIpLCByZS5WRVJCT1NFKQorICAgICMgQ29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIGZvciBtYXRjaGluZyBvcHRpb25zIHdpdGggb3B0aW9uYWwgdmFsdWVzCisgICAgIyBkZWxpbWl0ZWQgdXNpbmcgdHlwaWNhbCBzZXBhcmF0b3JzCisgICAgT1BUQ1JFX05WID0gcmUuY29tcGlsZShfT1BUX05WX1RNUEwuZm9ybWF0KGRlbGltPSI9fDoiKSwgcmUuVkVSQk9TRSkKKyAgICAjIENvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgbWF0Y2hpbmcgbGVhZGluZyB3aGl0ZXNwYWNlIGluIGEgbGluZQorICAgIE5PTlNQQUNFQ1JFID0gcmUuY29tcGlsZShyIlxTIikKKyAgICAjIFBvc3NpYmxlIGJvb2xlYW4gdmFsdWVzIGluIHRoZSBjb25maWd1cmF0aW9uLgorICAgIEJPT0xFQU5fU1RBVEVTID0geycxJzogVHJ1ZSwgJ3llcyc6IFRydWUsICd0cnVlJzogVHJ1ZSwgJ29uJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAnMCc6IEZhbHNlLCAnbm8nOiBGYWxzZSwgJ2ZhbHNlJzogRmFsc2UsICdvZmYnOiBGYWxzZX0KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWZhdWx0cz1Ob25lLCBkaWN0X3R5cGU9X2RlZmF1bHRfZGljdCwKKyAgICAgICAgICAgICAgICAgYWxsb3dfbm9fdmFsdWU9RmFsc2UsICosIGRlbGltaXRlcnM9KCc9JywgJzonKSwKKyAgICAgICAgICAgICAgICAgY29tbWVudF9wcmVmaXhlcz0oJyMnLCAnOycpLCBpbmxpbmVfY29tbWVudF9wcmVmaXhlcz1Ob25lLAorICAgICAgICAgICAgICAgICBzdHJpY3Q9VHJ1ZSwgZW1wdHlfbGluZXNfaW5fdmFsdWVzPVRydWUsCisgICAgICAgICAgICAgICAgIGRlZmF1bHRfc2VjdGlvbj1ERUZBVUxUU0VDVCwKKyAgICAgICAgICAgICAgICAgaW50ZXJwb2xhdGlvbj1fVU5TRVQpOgorCiAgICAgICAgIHNlbGYuX2RpY3QgPSBkaWN0X3R5cGUKICAgICAgICAgc2VsZi5fc2VjdGlvbnMgPSBzZWxmLl9kaWN0KCkKICAgICAgICAgc2VsZi5fZGVmYXVsdHMgPSBzZWxmLl9kaWN0KCkKKyAgICAgICAgc2VsZi5fcHJveGllcyA9IHNlbGYuX2RpY3QoKQorICAgICAgICBzZWxmLl9wcm94aWVzW2RlZmF1bHRfc2VjdGlvbl0gPSBTZWN0aW9uUHJveHkoc2VsZiwgZGVmYXVsdF9zZWN0aW9uKQogICAgICAgICBpZiBkZWZhdWx0czoKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGRlZmF1bHRzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgc2VsZi5fZGVmYXVsdHNbc2VsZi5vcHRpb254Zm9ybShrZXkpXSA9IHZhbHVlCisgICAgICAgIHNlbGYuX2RlbGltaXRlcnMgPSB0dXBsZShkZWxpbWl0ZXJzKQorICAgICAgICBpZiBkZWxpbWl0ZXJzID09ICgnPScsICc6Jyk6CisgICAgICAgICAgICBzZWxmLl9vcHRjcmUgPSBzZWxmLk9QVENSRV9OViBpZiBhbGxvd19ub192YWx1ZSBlbHNlIHNlbGYuT1BUQ1JFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkID0gInwiLmpvaW4ocmUuZXNjYXBlKGQpIGZvciBkIGluIGRlbGltaXRlcnMpCisgICAgICAgICAgICBpZiBhbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9vcHRjcmUgPSByZS5jb21waWxlKHNlbGYuX09QVF9OVl9UTVBMLmZvcm1hdChkZWxpbT1kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLlZFUkJPU0UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX29wdGNyZSA9IHJlLmNvbXBpbGUoc2VsZi5fT1BUX1RNUEwuZm9ybWF0KGRlbGltPWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuVkVSQk9TRSkKKyAgICAgICAgc2VsZi5fY29tbWVudF9wcmVmaXhlcyA9IHR1cGxlKGNvbW1lbnRfcHJlZml4ZXMgb3IgKCkpCisgICAgICAgIHNlbGYuX2lubGluZV9jb21tZW50X3ByZWZpeGVzID0gdHVwbGUoaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMgb3IgKCkpCisgICAgICAgIHNlbGYuX3N0cmljdCA9IHN0cmljdAorICAgICAgICBzZWxmLl9hbGxvd19ub192YWx1ZSA9IGFsbG93X25vX3ZhbHVlCisgICAgICAgIHNlbGYuX2VtcHR5X2xpbmVzX2luX3ZhbHVlcyA9IGVtcHR5X2xpbmVzX2luX3ZhbHVlcworICAgICAgICBzZWxmLmRlZmF1bHRfc2VjdGlvbj1kZWZhdWx0X3NlY3Rpb24KKyAgICAgICAgc2VsZi5faW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb24KKyAgICAgICAgaWYgc2VsZi5faW50ZXJwb2xhdGlvbiBpcyBfVU5TRVQ6CisgICAgICAgICAgICBzZWxmLl9pbnRlcnBvbGF0aW9uID0gc2VsZi5fREVGQVVMVF9JTlRFUlBPTEFUSU9OCisgICAgICAgIGlmIHNlbGYuX2ludGVycG9sYXRpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRpb24gPSBJbnRlcnBvbGF0aW9uKCkKIAogICAgIGRlZiBkZWZhdWx0cyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRzCkBAIC0yNDEsMTUgKzY0MiwxNSBAQAogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgc2VjdGlvbiBpbiB0aGUgY29uZmlndXJhdGlvbi4KIAogICAgICAgICBSYWlzZSBEdXBsaWNhdGVTZWN0aW9uRXJyb3IgaWYgYSBzZWN0aW9uIGJ5IHRoZSBzcGVjaWZpZWQgbmFtZQotICAgICAgICBhbHJlYWR5IGV4aXN0cy4gUmFpc2UgVmFsdWVFcnJvciBpZiBuYW1lIGlzIERFRkFVTFQgb3IgYW55IG9mIGl0J3MKLSAgICAgICAgY2FzZS1pbnNlbnNpdGl2ZSB2YXJpYW50cy4KKyAgICAgICAgYWxyZWFkeSBleGlzdHMuIFJhaXNlIFZhbHVlRXJyb3IgaWYgbmFtZSBpcyBERUZBVUxULgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2VjdGlvbi5sb3dlcigpID09ICJkZWZhdWx0IjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgc2VjdGlvbiBuYW1lOiAlcycgJSBzZWN0aW9uKQorICAgICAgICBpZiBzZWN0aW9uID09IHNlbGYuZGVmYXVsdF9zZWN0aW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBzZWN0aW9uIG5hbWU6ICVyJyAlIHNlY3Rpb24pCiAKICAgICAgICAgaWYgc2VjdGlvbiBpbiBzZWxmLl9zZWN0aW9uczoKICAgICAgICAgICAgIHJhaXNlIER1cGxpY2F0ZVNlY3Rpb25FcnJvcihzZWN0aW9uKQogICAgICAgICBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXSA9IHNlbGYuX2RpY3QoKQorICAgICAgICBzZWxmLl9wcm94aWVzW3NlY3Rpb25dID0gU2VjdGlvblByb3h5KHNlbGYsIHNlY3Rpb24pCiAKICAgICBkZWYgaGFzX3NlY3Rpb24oc2VsZiwgc2VjdGlvbik6CiAgICAgICAgICIiIkluZGljYXRlIHdoZXRoZXIgdGhlIG5hbWVkIHNlY3Rpb24gaXMgcHJlc2VudCBpbiB0aGUgY29uZmlndXJhdGlvbi4KQEAgLTI2NSwxMSArNjY2LDkgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgTm9TZWN0aW9uRXJyb3Ioc2VjdGlvbikKICAgICAgICAgb3B0cy51cGRhdGUoc2VsZi5fZGVmYXVsdHMpCi0gICAgICAgIGlmICdfX25hbWVfXycgaW4gb3B0czoKLSAgICAgICAgICAgIGRlbCBvcHRzWydfX25hbWVfXyddCiAgICAgICAgIHJldHVybiBsaXN0KG9wdHMua2V5cygpKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgZmlsZW5hbWVzKToKKyAgICBkZWYgcmVhZChzZWxmLCBmaWxlbmFtZXMsIGVuY29kaW5nPU5vbmUpOgogICAgICAgICAiIiJSZWFkIGFuZCBwYXJzZSBhIGZpbGVuYW1lIG9yIGEgbGlzdCBvZiBmaWxlbmFtZXMuCiAKICAgICAgICAgRmlsZXMgdGhhdCBjYW5ub3QgYmUgb3BlbmVkIGFyZSBzaWxlbnRseSBpZ25vcmVkOyB0aGlzIGlzCkBAIC0yODYsODMgKzY4NSwxODEgQEAKICAgICAgICAgcmVhZF9vayA9IFtdCiAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKGZwLCBmaWxlbmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLl9yZWFkKGZwLCBmaWxlbmFtZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgIHJlYWRfb2suYXBwZW5kKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gcmVhZF9vawogCi0gICAgZGVmIHJlYWRmcChzZWxmLCBmcCwgZmlsZW5hbWU9Tm9uZSk6CisgICAgZGVmIHJlYWRfZmlsZShzZWxmLCBmLCBzb3VyY2U9Tm9uZSk6CiAgICAgICAgICIiIkxpa2UgcmVhZCgpIGJ1dCB0aGUgYXJndW1lbnQgbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3QuCiAKLSAgICAgICAgVGhlIGBmcCcgYXJndW1lbnQgbXVzdCBoYXZlIGEgYHJlYWRsaW5lJyBtZXRob2QuICBPcHRpb25hbAotICAgICAgICBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGBmaWxlbmFtZScsIHdoaWNoIGlmIG5vdCBnaXZlbiwgaXMKLSAgICAgICAgdGFrZW4gZnJvbSBmcC5uYW1lLiAgSWYgZnAgaGFzIG5vIGBuYW1lJyBhdHRyaWJ1dGUsIGA8Pz8/PicgaXMKLSAgICAgICAgdXNlZC4KLQorICAgICAgICBUaGUgYGYnIGFyZ3VtZW50IG11c3QgYmUgaXRlcmFibGUsIHJldHVybmluZyBvbmUgbGluZSBhdCBhIHRpbWUuCisgICAgICAgIE9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgYHNvdXJjZScgc3BlY2lmeWluZyB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgZmlsZSBiZWluZyByZWFkLiBJZiBub3QgZ2l2ZW4sIGl0IGlzIHRha2VuIGZyb20gZi5uYW1lLiBJZiBgZicgaGFzIG5vCisgICAgICAgIGBuYW1lJyBhdHRyaWJ1dGUsIGA8Pz8/PicgaXMgdXNlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZnAubmFtZQorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGYubmFtZQogICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gJzw/Pz8+JwotICAgICAgICBzZWxmLl9yZWFkKGZwLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSAnPD8/Pz4nCisgICAgICAgIHNlbGYuX3JlYWQoZiwgc291cmNlKQogCi0gICAgZGVmIGdldChzZWxmLCBzZWN0aW9uLCBvcHRpb24pOgotICAgICAgICBvcHQgPSBzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbikKLSAgICAgICAgaWYgc2VjdGlvbiBub3QgaW4gc2VsZi5fc2VjdGlvbnM6Ci0gICAgICAgICAgICBpZiBzZWN0aW9uICE9IERFRkFVTFRTRUNUOgotICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pCi0gICAgICAgICAgICBpZiBvcHQgaW4gc2VsZi5fZGVmYXVsdHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2RlZmF1bHRzW29wdF0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgTm9PcHRpb25FcnJvcihvcHRpb24sIHNlY3Rpb24pCi0gICAgICAgIGVsaWYgb3B0IGluIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dW29wdF0KLSAgICAgICAgZWxpZiBvcHQgaW4gc2VsZi5fZGVmYXVsdHM6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVsdHNbb3B0XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgTm9PcHRpb25FcnJvcihvcHRpb24sIHNlY3Rpb24pCisgICAgZGVmIHJlYWRfc3RyaW5nKHNlbGYsIHN0cmluZywgc291cmNlPSc8c3RyaW5nPicpOgorICAgICAgICAiIiJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGdpdmVuIHN0cmluZy4iIiIKKyAgICAgICAgc2ZpbGUgPSBpby5TdHJpbmdJTyhzdHJpbmcpCisgICAgICAgIHNlbGYucmVhZF9maWxlKHNmaWxlLCBzb3VyY2UpCiAKLSAgICBkZWYgaXRlbXMoc2VsZiwgc2VjdGlvbik6CisgICAgZGVmIHJlYWRfZGljdChzZWxmLCBkaWN0aW9uYXJ5LCBzb3VyY2U9JzxkaWN0PicpOgorICAgICAgICAiIiJSZWFkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIGRpY3Rpb25hcnkuCisKKyAgICAgICAgS2V5cyBhcmUgc2VjdGlvbiBuYW1lcywgdmFsdWVzIGFyZSBkaWN0aW9uYXJpZXMgd2l0aCBrZXlzIGFuZCB2YWx1ZXMKKyAgICAgICAgdGhhdCBzaG91bGQgYmUgcHJlc2VudCBpbiB0aGUgc2VjdGlvbi4gSWYgdGhlIHVzZWQgZGljdGlvbmFyeSB0eXBlCisgICAgICAgIHByZXNlcnZlcyBvcmRlciwgc2VjdGlvbnMgYW5kIHRoZWlyIGtleXMgd2lsbCBiZSBhZGRlZCBpbiBvcmRlci4KKworICAgICAgICBBbGwgdHlwZXMgaGVsZCBpbiB0aGUgZGljdGlvbmFyeSBhcmUgY29udmVydGVkIHRvIHN0cmluZ3MgZHVyaW5nCisgICAgICAgIHJlYWRpbmcsIGluY2x1ZGluZyBzZWN0aW9uIG5hbWVzLCBvcHRpb24gbmFtZXMgYW5kIGtleXMuCisKKyAgICAgICAgT3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBgc291cmNlJyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZQorICAgICAgICBkaWN0aW9uYXJ5IGJlaW5nIHJlYWQuCisgICAgICAgICIiIgorICAgICAgICBlbGVtZW50c19hZGRlZCA9IHNldCgpCisgICAgICAgIGZvciBzZWN0aW9uLCBrZXlzIGluIGRpY3Rpb25hcnkuaXRlbXMoKToKKyAgICAgICAgICAgIHNlY3Rpb24gPSBzdHIoc2VjdGlvbikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF9zZWN0aW9uKHNlY3Rpb24pCisgICAgICAgICAgICBleGNlcHQgKER1cGxpY2F0ZVNlY3Rpb25FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc3RyaWN0IGFuZCBzZWN0aW9uIGluIGVsZW1lbnRzX2FkZGVkOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxlbWVudHNfYWRkZWQuYWRkKHNlY3Rpb24pCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrZXlzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5vcHRpb254Zm9ybShzdHIoa2V5KSkKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc3RyaWN0IGFuZCAoc2VjdGlvbiwga2V5KSBpbiBlbGVtZW50c19hZGRlZDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRHVwbGljYXRlT3B0aW9uRXJyb3Ioc2VjdGlvbiwga2V5LCBzb3VyY2UpCisgICAgICAgICAgICAgICAgZWxlbWVudHNfYWRkZWQuYWRkKChzZWN0aW9uLCBrZXkpKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0KHNlY3Rpb24sIGtleSwgdmFsdWUpCisKKyAgICBkZWYgcmVhZGZwKHNlbGYsIGZwLCBmaWxlbmFtZT1Ob25lKToKKyAgICAgICAgIiIiRGVwcmVjYXRlZCwgdXNlIHJlYWRfZmlsZSBpbnN0ZWFkLiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlICdwYXJzZXIucmVhZF9maWxlKCknIGluc3RlYWQuIiwKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWFkX2ZpbGUoZnAsIHNvdXJjZT1maWxlbmFtZSkKKworICAgIGRlZiBnZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwgZmFsbGJhY2s9X1VOU0VUKToKKyAgICAgICAgIiIiR2V0IGFuIG9wdGlvbiB2YWx1ZSBmb3IgYSBnaXZlbiBzZWN0aW9uLgorCisgICAgICAgIElmIGB2YXJzJyBpcyBwcm92aWRlZCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIFRoZSBvcHRpb24gaXMgbG9va2VkIHVwCisgICAgICAgIGluIGB2YXJzJyAoaWYgcHJvdmlkZWQpLCBgc2VjdGlvbicsIGFuZCBpbiBgREVGQVVMVFNFQ1QnIGluIHRoYXQgb3JkZXIuCisgICAgICAgIElmIHRoZSBrZXkgaXMgbm90IGZvdW5kIGFuZCBgZmFsbGJhY2snIGlzIHByb3ZpZGVkLCBpdCBpcyB1c2VkIGFzCisgICAgICAgIGEgZmFsbGJhY2sgdmFsdWUuIGBOb25lJyBjYW4gYmUgcHJvdmlkZWQgYXMgYSBgZmFsbGJhY2snIHZhbHVlLgorCisgICAgICAgIElmIGludGVycG9sYXRpb24gaXMgZW5hYmxlZCBhbmQgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IGByYXcnIGlzIEZhbHNlLAorICAgICAgICBhbGwgaW50ZXJwb2xhdGlvbnMgYXJlIGV4cGFuZGVkIGluIHRoZSByZXR1cm4gdmFsdWVzLgorCisgICAgICAgIEFyZ3VtZW50cyBgcmF3JywgYHZhcnMnLCBhbmQgYGZhbGxiYWNrJyBhcmUga2V5d29yZCBvbmx5LgorCisgICAgICAgIFRoZSBzZWN0aW9uIERFRkFVTFQgaXMgc3BlY2lhbC4KKyAgICAgICAgIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGQyID0gc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0KKyAgICAgICAgICAgIGQgPSBzZWxmLl91bmlmeV92YWx1ZXMoc2VjdGlvbiwgdmFycykKKyAgICAgICAgZXhjZXB0IE5vU2VjdGlvbkVycm9yOgorICAgICAgICAgICAgaWYgZmFsbGJhY2sgaXMgX1VOU0VUOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworICAgICAgICBvcHRpb24gPSBzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBkW29wdGlvbl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgc2VjdGlvbiAhPSBERUZBVUxUU0VDVDoKLSAgICAgICAgICAgICAgICByYWlzZSBOb1NlY3Rpb25FcnJvcihzZWN0aW9uKQotICAgICAgICAgICAgZDIgPSBzZWxmLl9kaWN0KCkKKyAgICAgICAgICAgIGlmIGZhbGxiYWNrIGlzIF9VTlNFVDoKKyAgICAgICAgICAgICAgICByYWlzZSBOb09wdGlvbkVycm9yKG9wdGlvbiwgc2VjdGlvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICAgICAgaWYgcmF3IG9yIHZhbHVlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRlcnBvbGF0aW9uLmJlZm9yZV9nZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCkKKworICAgIGRlZiBfZ2V0KHNlbGYsIHNlY3Rpb24sIGNvbnYsIG9wdGlvbiwgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gY29udihzZWxmLmdldChzZWN0aW9uLCBvcHRpb24sICoqa3dhcmdzKSkKKworICAgIGRlZiBnZXRpbnQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwKKyAgICAgICAgICAgICAgIGZhbGxiYWNrPV9VTlNFVCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXQoc2VjdGlvbiwgaW50LCBvcHRpb24sIHJhdz1yYXcsIHZhcnM9dmFycykKKyAgICAgICAgZXhjZXB0IChOb1NlY3Rpb25FcnJvciwgTm9PcHRpb25FcnJvcik6CisgICAgICAgICAgICBpZiBmYWxsYmFjayBpcyBfVU5TRVQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbGxiYWNrCisKKyAgICBkZWYgZ2V0ZmxvYXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZmFsbGJhY2s9X1VOU0VUKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBmbG9hdCwgb3B0aW9uLCByYXc9cmF3LCB2YXJzPXZhcnMpCisgICAgICAgIGV4Y2VwdCAoTm9TZWN0aW9uRXJyb3IsIE5vT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgaWYgZmFsbGJhY2sgaXMgX1VOU0VUOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGdldGJvb2xlYW4oc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1fVU5TRVQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0KHNlY3Rpb24sIHNlbGYuX2NvbnZlcnRfdG9fYm9vbGVhbiwgb3B0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXc9cmF3LCB2YXJzPXZhcnMpCisgICAgICAgIGV4Y2VwdCAoTm9TZWN0aW9uRXJyb3IsIE5vT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgaWYgZmFsbGJhY2sgaXMgX1VOU0VUOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxsYmFjaworCisgICAgZGVmIGl0ZW1zKHNlbGYsIHNlY3Rpb249X1VOU0VULCByYXc9RmFsc2UsIHZhcnM9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMgZm9yIGVhY2ggb3B0aW9uIGluIGEgc2VjdGlvbi4KKworICAgICAgICBBbGwgJSBpbnRlcnBvbGF0aW9ucyBhcmUgZXhwYW5kZWQgaW4gdGhlIHJldHVybiB2YWx1ZXMsIGJhc2VkIG9uIHRoZQorICAgICAgICBkZWZhdWx0cyBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3IsIHVubGVzcyB0aGUgb3B0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgYHJhdycgaXMgdHJ1ZS4gIEFkZGl0aW9uYWwgc3Vic3RpdHV0aW9ucyBtYXkgYmUgcHJvdmlkZWQgdXNpbmcgdGhlCisgICAgICAgIGB2YXJzJyBhcmd1bWVudCwgd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgd2hvc2UgY29udGVudHMgb3ZlcnJpZGVzCisgICAgICAgIGFueSBwcmUtZXhpc3RpbmcgZGVmYXVsdHMuCisKKyAgICAgICAgVGhlIHNlY3Rpb24gREVGQVVMVCBpcyBzcGVjaWFsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VjdGlvbiBpcyBfVU5TRVQ6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5pdGVtcygpCiAgICAgICAgIGQgPSBzZWxmLl9kZWZhdWx0cy5jb3B5KCkKLSAgICAgICAgZC51cGRhdGUoZDIpCi0gICAgICAgIGlmICJfX25hbWVfXyIgaW4gZDoKLSAgICAgICAgICAgIGRlbCBkWyJfX25hbWVfXyJdCi0gICAgICAgIHJldHVybiBkLml0ZW1zKCkKLQotICAgIGRlZiBfZ2V0KHNlbGYsIHNlY3Rpb24sIGNvbnYsIG9wdGlvbik6Ci0gICAgICAgIHJldHVybiBjb252KHNlbGYuZ2V0KHNlY3Rpb24sIG9wdGlvbikpCi0KLSAgICBkZWYgZ2V0aW50KHNlbGYsIHNlY3Rpb24sIG9wdGlvbik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9nZXQoc2VjdGlvbiwgaW50LCBvcHRpb24pCi0KLSAgICBkZWYgZ2V0ZmxvYXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dldChzZWN0aW9uLCBmbG9hdCwgb3B0aW9uKQotCi0gICAgX2Jvb2xlYW5fc3RhdGVzID0geycxJzogVHJ1ZSwgJ3llcyc6IFRydWUsICd0cnVlJzogVHJ1ZSwgJ29uJzogVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJzAnOiBGYWxzZSwgJ25vJzogRmFsc2UsICdmYWxzZSc6IEZhbHNlLCAnb2ZmJzogRmFsc2V9Ci0KLSAgICBkZWYgZ2V0Ym9vbGVhbihzZWxmLCBzZWN0aW9uLCBvcHRpb24pOgotICAgICAgICB2ID0gc2VsZi5nZXQoc2VjdGlvbiwgb3B0aW9uKQotICAgICAgICBpZiB2Lmxvd2VyKCkgbm90IGluIHNlbGYuX2Jvb2xlYW5fc3RhdGVzOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTm90IGEgYm9vbGVhbjogJXMnICUgdikKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Jvb2xlYW5fc3RhdGVzW3YubG93ZXIoKV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZC51cGRhdGUoc2VsZi5fc2VjdGlvbnNbc2VjdGlvbl0pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIGlmIHNlY3Rpb24gIT0gc2VsZi5kZWZhdWx0X3NlY3Rpb246CisgICAgICAgICAgICAgICAgcmFpc2UgTm9TZWN0aW9uRXJyb3Ioc2VjdGlvbikKKyAgICAgICAgIyBVcGRhdGUgd2l0aCB0aGUgZW50cnkgc3BlY2lmaWMgdmFyaWFibGVzCisgICAgICAgIGlmIHZhcnM6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2YXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgZFtzZWxmLm9wdGlvbnhmb3JtKGtleSldID0gdmFsdWUKKyAgICAgICAgdmFsdWVfZ2V0dGVyID0gbGFtYmRhIG9wdGlvbjogc2VsZi5faW50ZXJwb2xhdGlvbi5iZWZvcmVfZ2V0KHNlbGYsCisgICAgICAgICAgICBzZWN0aW9uLCBvcHRpb24sIGRbb3B0aW9uXSwgZCkKKyAgICAgICAgaWYgcmF3OgorICAgICAgICAgICAgdmFsdWVfZ2V0dGVyID0gbGFtYmRhIG9wdGlvbjogZFtvcHRpb25dCisgICAgICAgIHJldHVybiBbKG9wdGlvbiwgdmFsdWVfZ2V0dGVyKG9wdGlvbikpIGZvciBvcHRpb24gaW4gZC5rZXlzKCldCiAKICAgICBkZWYgb3B0aW9ueGZvcm0oc2VsZiwgb3B0aW9uc3RyKToKICAgICAgICAgcmV0dXJuIG9wdGlvbnN0ci5sb3dlcigpCiAKICAgICBkZWYgaGFzX29wdGlvbihzZWxmLCBzZWN0aW9uLCBvcHRpb24pOgotICAgICAgICAiIiJDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBhIGdpdmVuIG9wdGlvbiBpbiBhIGdpdmVuIHNlY3Rpb24uIiIiCi0gICAgICAgIGlmIG5vdCBzZWN0aW9uIG9yIHNlY3Rpb24gPT0gREVGQVVMVFNFQ1Q6CisgICAgICAgICIiIkNoZWNrIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgZ2l2ZW4gb3B0aW9uIGluIGEgZ2l2ZW4gc2VjdGlvbi4KKyAgICAgICAgSWYgdGhlIHNwZWNpZmllZCBgc2VjdGlvbicgaXMgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIERFRkFVTFQgaXMKKyAgICAgICAgYXNzdW1lZC4gSWYgdGhlIHNwZWNpZmllZCBgc2VjdGlvbicgZG9lcyBub3QgZXhpc3QsIHJldHVybnMgRmFsc2UuIiIiCisgICAgICAgIGlmIG5vdCBzZWN0aW9uIG9yIHNlY3Rpb24gPT0gc2VsZi5kZWZhdWx0X3NlY3Rpb246CiAgICAgICAgICAgICBvcHRpb24gPSBzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbikKICAgICAgICAgICAgIHJldHVybiBvcHRpb24gaW4gc2VsZi5fZGVmYXVsdHMKICAgICAgICAgZWxpZiBzZWN0aW9uIG5vdCBpbiBzZWxmLl9zZWN0aW9uczoKQEAgLTM3Miw5ICs4NjksMTIgQEAKICAgICAgICAgICAgIHJldHVybiAob3B0aW9uIGluIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dCiAgICAgICAgICAgICAgICAgICAgIG9yIG9wdGlvbiBpbiBzZWxmLl9kZWZhdWx0cykKIAotICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6CisgICAgZGVmIHNldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHZhbHVlPU5vbmUpOgogICAgICAgICAiIiJTZXQgYW4gb3B0aW9uLiIiIgotICAgICAgICBpZiBub3Qgc2VjdGlvbiBvciBzZWN0aW9uID09IERFRkFVTFRTRUNUOgorICAgICAgICBpZiB2YWx1ZToKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5faW50ZXJwb2xhdGlvbi5iZWZvcmVfc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKQorICAgICAgICBpZiBub3Qgc2VjdGlvbiBvciBzZWN0aW9uID09IHNlbGYuZGVmYXVsdF9zZWN0aW9uOgogICAgICAgICAgICAgc2VjdGRpY3QgPSBzZWxmLl9kZWZhdWx0cwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgpAQCAtMzgzLDI0ICs4ODMsMzkgQEAKICAgICAgICAgICAgICAgICByYWlzZSBOb1NlY3Rpb25FcnJvcihzZWN0aW9uKQogICAgICAgICBzZWN0ZGljdFtzZWxmLm9wdGlvbnhmb3JtKG9wdGlvbildID0gdmFsdWUKIAotICAgIGRlZiB3cml0ZShzZWxmLCBmcCk6Ci0gICAgICAgICIiIldyaXRlIGFuIC5pbmktZm9ybWF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXRlLiIiIgorICAgIGRlZiB3cml0ZShzZWxmLCBmcCwgc3BhY2VfYXJvdW5kX2RlbGltaXRlcnM9VHJ1ZSk6CisgICAgICAgICIiIldyaXRlIGFuIC5pbmktZm9ybWF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb25maWd1cmF0aW9uIHN0YXRlLgorCisgICAgICAgIElmIGBzcGFjZV9hcm91bmRfZGVsaW1pdGVycycgaXMgVHJ1ZSAodGhlIGRlZmF1bHQpLCBkZWxpbWl0ZXJzCisgICAgICAgIGJldHdlZW4ga2V5cyBhbmQgdmFsdWVzIGFyZSBzdXJyb3VuZGVkIGJ5IHNwYWNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzOgorICAgICAgICAgICAgZCA9ICIge30gIi5mb3JtYXQoc2VsZi5fZGVsaW1pdGVyc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGQgPSBzZWxmLl9kZWxpbWl0ZXJzWzBdCiAgICAgICAgIGlmIHNlbGYuX2RlZmF1bHRzOgotICAgICAgICAgICAgZnAud3JpdGUoIlslc11cbiIgJSBERUZBVUxUU0VDVCkKLSAgICAgICAgICAgIGZvciAoa2V5LCB2YWx1ZSkgaW4gc2VsZi5fZGVmYXVsdHMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICBmcC53cml0ZSgiJXMgPSAlc1xuIiAlIChrZXksIHN0cih2YWx1ZSkucmVwbGFjZSgnXG4nLCAnXG5cdCcpKSkKLSAgICAgICAgICAgIGZwLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9zZWN0aW9uKGZwLCBzZWxmLmRlZmF1bHRfc2VjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRzLml0ZW1zKCksIGQpCiAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlbGYuX3NlY3Rpb25zOgotICAgICAgICAgICAgZnAud3JpdGUoIlslc11cbiIgJSBzZWN0aW9uKQotICAgICAgICAgICAgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXS5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIGtleSAhPSAiX19uYW1lX18iOgotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZSgiJXMgPSAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXksIHN0cih2YWx1ZSkucmVwbGFjZSgnXG4nLCAnXG5cdCcpKSkKLSAgICAgICAgICAgIGZwLndyaXRlKCJcbiIpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9zZWN0aW9uKGZwLCBzZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uc1tzZWN0aW9uXS5pdGVtcygpLCBkKQorCisgICAgZGVmIF93cml0ZV9zZWN0aW9uKHNlbGYsIGZwLCBzZWN0aW9uX25hbWUsIHNlY3Rpb25faXRlbXMsIGRlbGltaXRlcik6CisgICAgICAgICIiIldyaXRlIGEgc2luZ2xlIHNlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBgZnAnLiIiIgorICAgICAgICBmcC53cml0ZSgiW3t9XVxuIi5mb3JtYXQoc2VjdGlvbl9uYW1lKSkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VjdGlvbl9pdGVtczoKKyAgICAgICAgICAgIHZhbHVlID0gc2VsZi5faW50ZXJwb2xhdGlvbi5iZWZvcmVfd3JpdGUoc2VsZiwgc2VjdGlvbl9uYW1lLCBrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKQorICAgICAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmUgb3Igbm90IHNlbGYuX2FsbG93X25vX3ZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gZGVsaW1pdGVyICsgc3RyKHZhbHVlKS5yZXBsYWNlKCdcbicsICdcblx0JykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdmFsdWUgPSAiIgorICAgICAgICAgICAgZnAud3JpdGUoInt9e31cbiIuZm9ybWF0KGtleSwgdmFsdWUpKQorICAgICAgICBmcC53cml0ZSgiXG4iKQogCiAgICAgZGVmIHJlbW92ZV9vcHRpb24oc2VsZiwgc2VjdGlvbiwgb3B0aW9uKToKICAgICAgICAgIiIiUmVtb3ZlIGFuIG9wdGlvbi4iIiIKLSAgICAgICAgaWYgbm90IHNlY3Rpb24gb3Igc2VjdGlvbiA9PSBERUZBVUxUU0VDVDoKKyAgICAgICAgaWYgbm90IHNlY3Rpb24gb3Igc2VjdGlvbiA9PSBzZWxmLmRlZmF1bHRfc2VjdGlvbjoKICAgICAgICAgICAgIHNlY3RkaWN0ID0gc2VsZi5fZGVmYXVsdHMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKQEAgLTQxOCw2OSArOTMzLDExNyBAQAogICAgICAgICBleGlzdGVkID0gc2VjdGlvbiBpbiBzZWxmLl9zZWN0aW9ucwogICAgICAgICBpZiBleGlzdGVkOgogICAgICAgICAgICAgZGVsIHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dCisgICAgICAgICAgICBkZWwgc2VsZi5fcHJveGllc1tzZWN0aW9uXQogICAgICAgICByZXR1cm4gZXhpc3RlZAogCi0gICAgIwotICAgICMgUmVndWxhciBleHByZXNzaW9ucyBmb3IgcGFyc2luZyBzZWN0aW9uIGhlYWRlcnMgYW5kIG9wdGlvbnMuCi0gICAgIwotICAgIFNFQ1RDUkUgPSByZS5jb21waWxlKAotICAgICAgICByJ1xbJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWwotICAgICAgICByJyg/UDxoZWFkZXI+W15dXSspJyAgICAgICAgICAgICAgICAgICMgdmVyeSBwZXJtaXNzaXZlIQotICAgICAgICByJ1xdJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgXQotICAgICAgICApCi0gICAgT1BUQ1JFID0gcmUuY29tcGlsZSgKLSAgICAgICAgcicoP1A8b3B0aW9uPlteOj1cc11bXjo9XSopJyAgICAgICAgICAjIHZlcnkgcGVybWlzc2l2ZSEKLSAgICAgICAgcidccyooP1A8dmk+Wzo9XSlccyonICAgICAgICAgICAgICAgICAjIGFueSBudW1iZXIgb2Ygc3BhY2UvdGFiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgc2VwYXJhdG9yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoZWl0aGVyIDogb3IgPSksIGZvbGxvd2VkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBieSBhbnkgIyBzcGFjZS90YWIKLSAgICAgICAgcicoP1A8dmFsdWU+LiopJCcgICAgICAgICAgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgdXAgdG8gZW9sCi0gICAgICAgICkKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYga2V5ICE9IHNlbGYuZGVmYXVsdF9zZWN0aW9uIGFuZCBub3Qgc2VsZi5oYXNfc2VjdGlvbihrZXkpOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICByZXR1cm4gc2VsZi5fcHJveGllc1trZXldCisKKyAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICMgVG8gY29uZm9ybSB3aXRoIHRoZSBtYXBwaW5nIHByb3RvY29sLCBvdmVyd3JpdGVzIGV4aXN0aW5nIHZhbHVlcyBpbgorICAgICAgICAjIHRoZSBzZWN0aW9uLgorCisgICAgICAgICMgWFhYIHRoaXMgaXMgbm90IGF0b21pYyBpZiByZWFkX2RpY3QgZmFpbHMgYXQgYW55IHBvaW50LiBUaGVuIGFnYWluLAorICAgICAgICAjIG5vIHVwZGF0ZSBtZXRob2QgaW4gY29uZmlncGFyc2VyIGlzIGF0b21pYyBpbiB0aGlzIGltcGxlbWVudGF0aW9uLgorICAgICAgICBzZWxmLnJlbW92ZV9zZWN0aW9uKGtleSkKKyAgICAgICAgc2VsZi5yZWFkX2RpY3Qoe2tleTogdmFsdWV9KQorCisgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGlmIGtleSA9PSBzZWxmLmRlZmF1bHRfc2VjdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCByZW1vdmUgdGhlIGRlZmF1bHQgc2VjdGlvbi4iKQorICAgICAgICBpZiBub3Qgc2VsZi5oYXNfc2VjdGlvbihrZXkpOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQorICAgICAgICBzZWxmLnJlbW92ZV9zZWN0aW9uKGtleSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKKyAgICAgICAgcmV0dXJuIGtleSA9PSBzZWxmLmRlZmF1bHRfc2VjdGlvbiBvciBzZWxmLmhhc19zZWN0aW9uKGtleSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3NlY3Rpb25zKSArIDEgIyB0aGUgZGVmYXVsdCBzZWN0aW9uCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICMgWFhYIGRvZXMgaXQgYnJlYWsgd2hlbiB1bmRlcmx5aW5nIGNvbnRhaW5lciBzdGF0ZSBjaGFuZ2VkPworICAgICAgICByZXR1cm4gaXRlcnRvb2xzLmNoYWluKChzZWxmLmRlZmF1bHRfc2VjdGlvbiwpLCBzZWxmLl9zZWN0aW9ucy5rZXlzKCkpCiAKICAgICBkZWYgX3JlYWQoc2VsZiwgZnAsIGZwbmFtZSk6Ci0gICAgICAgICIiIlBhcnNlIGEgc2VjdGlvbmVkIHNldHVwIGZpbGUuCisgICAgICAgICIiIlBhcnNlIGEgc2VjdGlvbmVkIGNvbmZpZ3VyYXRpb24gZmlsZS4KIAotICAgICAgICBUaGUgc2VjdGlvbnMgaW4gc2V0dXAgZmlsZSBjb250YWlucyBhIHRpdGxlIGxpbmUgYXQgdGhlIHRvcCwKLSAgICAgICAgaW5kaWNhdGVkIGJ5IGEgbmFtZSBpbiBzcXVhcmUgYnJhY2tldHMgKGBbXScpLCBwbHVzIGtleS92YWx1ZQotICAgICAgICBvcHRpb25zIGxpbmVzLCBpbmRpY2F0ZWQgYnkgYG5hbWU6IHZhbHVlJyBmb3JtYXQgbGluZXMuCi0gICAgICAgIENvbnRpbnVhdGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IGFuIGVtYmVkZGVkIG5ld2xpbmUgdGhlbgotICAgICAgICBsZWFkaW5nIHdoaXRlc3BhY2UuICBCbGFuayBsaW5lcywgbGluZXMgYmVnaW5uaW5nIHdpdGggYSAnIycsCi0gICAgICAgIGFuZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgZWxzZSBhcmUgaWdub3JlZC4KKyAgICAgICAgRWFjaCBzZWN0aW9uIGluIGEgY29uZmlndXJhdGlvbiBmaWxlIGNvbnRhaW5zIGEgaGVhZGVyLCBpbmRpY2F0ZWQgYnkKKyAgICAgICAgYSBuYW1lIGluIHNxdWFyZSBicmFja2V0cyAoYFtdJyksIHBsdXMga2V5L3ZhbHVlIG9wdGlvbnMsIGluZGljYXRlZCBieQorICAgICAgICBgbmFtZScgYW5kIGB2YWx1ZScgZGVsaW1pdGVkIHdpdGggYSBzcGVjaWZpYyBzdWJzdHJpbmcgKGA9JyBvciBgOicgYnkKKyAgICAgICAgZGVmYXVsdCkuCisKKyAgICAgICAgVmFsdWVzIGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLCBhcyBsb25nIGFzIHRoZXkgYXJlIGluZGVudGVkIGRlZXBlcgorICAgICAgICB0aGFuIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB2YWx1ZS4gRGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIncyBtb2RlLCBibGFuaworICAgICAgICBsaW5lcyBtYXkgYmUgdHJlYXRlZCBhcyBwYXJ0cyBvZiBtdWx0aWxpbmUgdmFsdWVzIG9yIGlnbm9yZWQuCisKKyAgICAgICAgQ29uZmlndXJhdGlvbiBmaWxlcyBtYXkgaW5jbHVkZSBjb21tZW50cywgcHJlZml4ZWQgYnkgc3BlY2lmaWMKKyAgICAgICAgY2hhcmFjdGVycyAoYCMnIGFuZCBgOycgYnkgZGVmYXVsdCkuIENvbW1lbnRzIG1heSBhcHBlYXIgb24gdGhlaXIgb3duCisgICAgICAgIGluIGFuIG90aGVyd2lzZSBlbXB0eSBsaW5lIG9yIG1heSBiZSBlbnRlcmVkIGluIGxpbmVzIGhvbGRpbmcgdmFsdWVzIG9yCisgICAgICAgIHNlY3Rpb24gbmFtZXMuCiAgICAgICAgICIiIgotICAgICAgICBjdXJzZWN0ID0gTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUsIG9yIGEgZGljdGlvbmFyeQorICAgICAgICBlbGVtZW50c19hZGRlZCA9IHNldCgpCisgICAgICAgIGN1cnNlY3QgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgIyBOb25lLCBvciBhIGRpY3Rpb25hcnkKKyAgICAgICAgc2VjdG5hbWUgPSBOb25lCiAgICAgICAgIG9wdG5hbWUgPSBOb25lCiAgICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgZSA9IE5vbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb25lLCBvciBhbiBleGNlcHRpb24KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQotICAgICAgICAgICAgIyBjb21tZW50IG9yIGJsYW5rIGxpbmU/Ci0gICAgICAgICAgICBpZiBsaW5lLnN0cmlwKCkgPT0gJycgb3IgbGluZVswXSBpbiAnIzsnOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBsaW5lLnNwbGl0KE5vbmUsIDEpWzBdLmxvd2VyKCkgPT0gJ3JlbScgYW5kIGxpbmVbMF0gaW4gInJSIjoKLSAgICAgICAgICAgICAgICAjIG5vIGxlYWRpbmcgd2hpdGVzcGFjZQorICAgICAgICBpbmRlbnRfbGV2ZWwgPSAwCisgICAgICAgIGUgPSBOb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOb25lLCBvciBhbiBleGNlcHRpb24KKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUoZnAsIHN0YXJ0PTEpOgorICAgICAgICAgICAgY29tbWVudF9zdGFydCA9IE5vbmUKKyAgICAgICAgICAgICMgc3RyaXAgaW5saW5lIGNvbW1lbnRzCisgICAgICAgICAgICBmb3IgcHJlZml4IGluIHNlbGYuX2lubGluZV9jb21tZW50X3ByZWZpeGVzOgorICAgICAgICAgICAgICAgIGluZGV4ID0gbGluZS5maW5kKHByZWZpeCkKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA9PSAwIG9yIChpbmRleCA+IDAgYW5kIGxpbmVbaW5kZXgtMV0uaXNzcGFjZSgpKToKKyAgICAgICAgICAgICAgICAgICAgY29tbWVudF9zdGFydCA9IGluZGV4CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAjIHN0cmlwIGZ1bGwgbGluZSBjb21tZW50cworICAgICAgICAgICAgZm9yIHByZWZpeCBpbiBzZWxmLl9jb21tZW50X3ByZWZpeGVzOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RyaXAoKS5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRfc3RhcnQgPSAwCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB2YWx1ZSA9IGxpbmVbOmNvbW1lbnRfc3RhcnRdLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9lbXB0eV9saW5lc19pbl92YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgICMgYWRkIGVtcHR5IGxpbmUgdG8gdGhlIHZhbHVlLCBidXQgb25seSBpZiB0aGVyZSB3YXMgbm8KKyAgICAgICAgICAgICAgICAgICAgIyBjb21tZW50IG9uIHRoZSBsaW5lCisgICAgICAgICAgICAgICAgICAgIGlmIChjb21tZW50X3N0YXJ0IGlzIE5vbmUgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0IGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXS5hcHBlbmQoJycpICMgbmV3bGluZXMgYWRkZWQgYXQgam9pbgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgZW1wdHkgbGluZSBtYXJrcyBlbmQgb2YgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50X2xldmVsID0gc3lzLm1heHNpemUKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgIyBjb250aW51YXRpb24gbGluZT8KLSAgICAgICAgICAgIGlmIGxpbmVbMF0uaXNzcGFjZSgpIGFuZCBjdXJzZWN0IGlzIG5vdCBOb25lIGFuZCBvcHRuYW1lOgotICAgICAgICAgICAgICAgIHZhbHVlID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gPSAiJXNcbiVzIiAlIChjdXJzZWN0W29wdG5hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgIGZpcnN0X25vbnNwYWNlID0gc2VsZi5OT05TUEFDRUNSRS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGN1cl9pbmRlbnRfbGV2ZWwgPSBmaXJzdF9ub25zcGFjZS5zdGFydCgpIGlmIGZpcnN0X25vbnNwYWNlIGVsc2UgMAorICAgICAgICAgICAgaWYgKGN1cnNlY3QgaXMgbm90IE5vbmUgYW5kIG9wdG5hbWUgYW5kCisgICAgICAgICAgICAgICAgY3VyX2luZGVudF9sZXZlbCA+IGluZGVudF9sZXZlbCk6CisgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXS5hcHBlbmQodmFsdWUpCiAgICAgICAgICAgICAjIGEgc2VjdGlvbiBoZWFkZXIgb3Igb3B0aW9uIGhlYWRlcj8KICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5kZW50X2xldmVsID0gY3VyX2luZGVudF9sZXZlbAogICAgICAgICAgICAgICAgICMgaXMgaXQgYSBzZWN0aW9uIGhlYWRlcj8KLSAgICAgICAgICAgICAgICBtbyA9IHNlbGYuU0VDVENSRS5tYXRjaChsaW5lKQorICAgICAgICAgICAgICAgIG1vID0gc2VsZi5TRUNUQ1JFLm1hdGNoKHZhbHVlKQogICAgICAgICAgICAgICAgIGlmIG1vOgogICAgICAgICAgICAgICAgICAgICBzZWN0bmFtZSA9IG1vLmdyb3VwKCdoZWFkZXInKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWN0bmFtZSBpbiBzZWxmLl9zZWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3N0cmljdCBhbmQgc2VjdG5hbWUgaW4gZWxlbWVudHNfYWRkZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRHVwbGljYXRlU2VjdGlvbkVycm9yKHNlY3RuYW1lLCBmcG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubykKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3QgPSBzZWxmLl9zZWN0aW9uc1tzZWN0bmFtZV0KLSAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWN0bmFtZSA9PSBERUZBVUxUU0VDVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzX2FkZGVkLmFkZChzZWN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWN0bmFtZSA9PSBzZWxmLmRlZmF1bHRfc2VjdGlvbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3QgPSBzZWxmLl9kZWZhdWx0cwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdCA9IHNlbGYuX2RpY3QoKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFsnX19uYW1lX18nXSA9IHNlY3RuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWN0aW9uc1tzZWN0bmFtZV0gPSBjdXJzZWN0CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wcm94aWVzW3NlY3RuYW1lXSA9IFNlY3Rpb25Qcm94eShzZWxmLCBzZWN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzX2FkZGVkLmFkZChzZWN0bmFtZSkKICAgICAgICAgICAgICAgICAgICAgIyBTbyBzZWN0aW9ucyBjYW4ndCBzdGFydCB3aXRoIGEgY29udGludWF0aW9uIGxpbmUKICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSA9IE5vbmUKICAgICAgICAgICAgICAgICAjIG5vIHNlY3Rpb24gaGVhZGVyIGluIHRoZSBmaWxlPwpAQCAtNDg4LDI1MyArMTA1MSwxOTcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcihmcG5hbWUsIGxpbmVubywgbGluZSkKICAgICAgICAgICAgICAgICAjIGFuIG9wdGlvbiBsaW5lPwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vID0gc2VsZi5PUFRDUkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgbW8gPSBzZWxmLl9vcHRjcmUubWF0Y2godmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIG1vOgogICAgICAgICAgICAgICAgICAgICAgICAgb3B0bmFtZSwgdmksIG9wdHZhbCA9IG1vLmdyb3VwKCdvcHRpb24nLCAndmknLCAndmFsdWUnKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmkgaW4gKCc9JywgJzonKSBhbmQgJzsnIGluIG9wdHZhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICc7JyBpcyBhIGNvbW1lbnQgZGVsaW1pdGVyIG9ubHkgaWYgaXQgZm9sbG93cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYSBzcGFjaW5nIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IG9wdHZhbC5maW5kKCc7JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwb3MgIT0gLTEgYW5kIG9wdHZhbFtwb3MtMV0uaXNzcGFjZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSBvcHR2YWxbOnBvc10KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdHZhbCA9IG9wdHZhbC5zdHJpcCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93IGVtcHR5IHZhbHVlcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3B0dmFsID09ICciIic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0dmFsID0gJycKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcHRuYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9oYW5kbGVfZXJyb3IoZSwgZnBuYW1lLCBsaW5lbm8sIGxpbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRuYW1lID0gc2VsZi5vcHRpb254Zm9ybShvcHRuYW1lLnJzdHJpcCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc2VjdFtvcHRuYW1lXSA9IG9wdHZhbAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuX3N0cmljdCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VjdG5hbWUsIG9wdG5hbWUpIGluIGVsZW1lbnRzX2FkZGVkKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEdXBsaWNhdGVPcHRpb25FcnJvcihzZWN0bmFtZSwgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcG5hbWUsIGxpbmVubykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzX2FkZGVkLmFkZCgoc2VjdG5hbWUsIG9wdG5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGNoZWNrIGlzIGZpbmUgYmVjYXVzZSB0aGUgT1BUQ1JFIGNhbm5vdAorICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXRjaCBpZiBpdCB3b3VsZCBzZXQgb3B0dmFsIHRvIE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wdHZhbCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHR2YWwgPSBvcHR2YWwuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNlY3Rbb3B0bmFtZV0gPSBbb3B0dmFsXQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZhbHVlbGVzcyBvcHRpb24gaGFuZGxpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzZWN0W29wdG5hbWVdID0gTm9uZQogICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG5vbi1mYXRhbCBwYXJzaW5nIGVycm9yIG9jY3VycmVkLiAgc2V0IHVwIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG5vbi1mYXRhbCBwYXJzaW5nIGVycm9yIG9jY3VycmVkLiBzZXQgdXAgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGV4Y2VwdGlvbiBidXQga2VlcCBnb2luZy4gdGhlIGV4Y2VwdGlvbiB3aWxsIGJlCiAgICAgICAgICAgICAgICAgICAgICAgICAjIHJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCB3aWxsIGNvbnRhaW4gYQogICAgICAgICAgICAgICAgICAgICAgICAgIyBsaXN0IG9mIGFsbCBib2d1cyBsaW5lcwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFBhcnNpbmdFcnJvcihmcG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBlLmFwcGVuZChsaW5lbm8sIHJlcHIobGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBlID0gc2VsZi5faGFuZGxlX2Vycm9yKGUsIGZwbmFtZSwgbGluZW5vLCBsaW5lKQogICAgICAgICAjIGlmIGFueSBwYXJzaW5nIGVycm9ycyBvY2N1cnJlZCwgcmFpc2UgYW4gZXhjZXB0aW9uCiAgICAgICAgIGlmIGU6CiAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuX2pvaW5fbXVsdGlsaW5lX3ZhbHVlcygpCiAKLWNsYXNzIF9DaGFpbm1hcDoKLSAgICAiIiJDb21iaW5lIG11bHRpcGxlIG1hcHBpbmdzIGZvciBzdWNjZXNzaXZlIGxvb2t1cHMuCisgICAgZGVmIF9qb2luX211bHRpbGluZV92YWx1ZXMoc2VsZik6CisgICAgICAgIGRlZmF1bHRzID0gc2VsZi5kZWZhdWx0X3NlY3Rpb24sIHNlbGYuX2RlZmF1bHRzCisgICAgICAgIGFsbF9zZWN0aW9ucyA9IGl0ZXJ0b29scy5jaGFpbigoZGVmYXVsdHMsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlY3Rpb25zLml0ZW1zKCkpCisgICAgICAgIGZvciBzZWN0aW9uLCBvcHRpb25zIGluIGFsbF9zZWN0aW9uczoKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWwgaW4gb3B0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsLCBsaXN0KToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gJ1xuJy5qb2luKHZhbCkucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBvcHRpb25zW25hbWVdID0gc2VsZi5faW50ZXJwb2xhdGlvbi5iZWZvcmVfcmVhZChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgdmFsKQogCi0gICAgRm9yIGV4YW1wbGUsIHRvIGVtdWxhdGUgUHl0aG9uJ3Mgbm9ybWFsIGxvb2t1cCBzZXF1ZW5jZToKKyAgICBkZWYgX2hhbmRsZV9lcnJvcihzZWxmLCBleGMsIGZwbmFtZSwgbGluZW5vLCBsaW5lKToKKyAgICAgICAgaWYgbm90IGV4YzoKKyAgICAgICAgICAgIGV4YyA9IFBhcnNpbmdFcnJvcihmcG5hbWUpCisgICAgICAgIGV4Yy5hcHBlbmQobGluZW5vLCByZXByKGxpbmUpKQorICAgICAgICByZXR1cm4gZXhjCiAKLSAgICAgICAgaW1wb3J0IF9fYnVpbHRpbl9fCi0gICAgICAgIHB5bG9va3VwID0gX0NoYWlubWFwKGxvY2FscygpLCBnbG9iYWxzKCksIHZhcnMoX19idWlsdGluX18pKQotICAgICIiIgorICAgIGRlZiBfdW5pZnlfdmFsdWVzKHNlbGYsIHNlY3Rpb24sIHZhcnMpOgorICAgICAgICAiIiJDcmVhdGUgYSBzZXF1ZW5jZSBvZiBsb29rdXBzIHdpdGggJ3ZhcnMnIHRha2luZyBwcmlvcml0eSBvdmVyCisgICAgICAgIHRoZSAnc2VjdGlvbicgd2hpY2ggdGFrZXMgcHJpb3JpdHkgb3ZlciB0aGUgREVGQVVMVFNFQ1QuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKm1hcHMpOgotICAgICAgICBzZWxmLm1hcHMgPSBtYXBzCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5tYXBzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBtYXBwaW5nW2tleV0KLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHJhaXNlIEtleUVycm9yKGtleSkKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgc2VlbiA9IHNldCgpCi0gICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFwczoKLSAgICAgICAgICAgIHMgPSBzZXQobWFwcGluZykgLSBzZWVuCi0gICAgICAgICAgICBmb3IgZWxlbSBpbiBzOgotICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KLSAgICAgICAgICAgIHNlZW4udXBkYXRlKHMpCi0KLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcyA9IHNldCgpCi0gICAgICAgIHMudXBkYXRlKCpzZWxmLm1hcHMpCi0gICAgICAgIHJldHVybiBsZW4ocykKLQotICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFsoaywgc2VsZltrXSkgZm9yIGsgaW4gc2VsZl0KLQotICAgIGRlZiB2YWx1ZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZltrXSBmb3IgayBpbiBzZWxmXQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBkaWN0KHNlbGYuaXRlbXMoKSkgPT0gZGljdChvdGhlci5pdGVtcygpKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCi0KLQotY2xhc3MgQ29uZmlnUGFyc2VyKFJhd0NvbmZpZ1BhcnNlcik6Ci0KLSAgICBkZWYgZ2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpOgotICAgICAgICAiIiJHZXQgYW4gb3B0aW9uIHZhbHVlIGZvciBhIGdpdmVuIHNlY3Rpb24uCi0KLSAgICAgICAgSWYgYHZhcnMnIGlzIHByb3ZpZGVkLCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeS4gVGhlIG9wdGlvbiBpcyBsb29rZWQgdXAKLSAgICAgICAgaW4gYHZhcnMnIChpZiBwcm92aWRlZCksIGBzZWN0aW9uJywgYW5kIGluIGBkZWZhdWx0cycgaW4gdGhhdCBvcmRlci4KLQotICAgICAgICBBbGwgJSBpbnRlcnBvbGF0aW9ucyBhcmUgZXhwYW5kZWQgaW4gdGhlIHJldHVybiB2YWx1ZXMsIHVubGVzcyB0aGUKLSAgICAgICAgb3B0aW9uYWwgYXJndW1lbnQgYHJhdycgaXMgdHJ1ZS4gIFZhbHVlcyBmb3IgaW50ZXJwb2xhdGlvbiBrZXlzIGFyZQotICAgICAgICBsb29rZWQgdXAgaW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvcHRpb24uCi0KLSAgICAgICAgVGhlIHNlY3Rpb24gREVGQVVMVCBpcyBzcGVjaWFsLgogICAgICAgICAiIiIKICAgICAgICAgc2VjdGlvbmRpY3QgPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWN0aW9uZGljdCA9IHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIHNlY3Rpb24gIT0gREVGQVVMVFNFQ1Q6CisgICAgICAgICAgICBpZiBzZWN0aW9uICE9IHNlbGYuZGVmYXVsdF9zZWN0aW9uOgogICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pCiAgICAgICAgICMgVXBkYXRlIHdpdGggdGhlIGVudHJ5IHNwZWNpZmljIHZhcmlhYmxlcwogICAgICAgICB2YXJkaWN0ID0ge30KICAgICAgICAgaWYgdmFyczoKICAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHZhcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpCiAgICAgICAgICAgICAgICAgdmFyZGljdFtzZWxmLm9wdGlvbnhmb3JtKGtleSldID0gdmFsdWUKLSAgICAgICAgZCA9IF9DaGFpbm1hcCh2YXJkaWN0LCBzZWN0aW9uZGljdCwgc2VsZi5fZGVmYXVsdHMpCi0gICAgICAgIG9wdGlvbiA9IHNlbGYub3B0aW9ueGZvcm0ob3B0aW9uKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB2YWx1ZSA9IGRbb3B0aW9uXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBOb09wdGlvbkVycm9yKG9wdGlvbiwgc2VjdGlvbikKKyAgICAgICAgcmV0dXJuIF9DaGFpbk1hcCh2YXJkaWN0LCBzZWN0aW9uZGljdCwgc2VsZi5fZGVmYXVsdHMpCiAKLSAgICAgICAgaWYgcmF3OgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5faW50ZXJwb2xhdGUoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSwgZCkKLQotICAgIGRlZiBpdGVtcyhzZWxmLCBzZWN0aW9uLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSk6Ci0gICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgdHVwbGVzIHdpdGggKG5hbWUsIHZhbHVlKSBmb3IgZWFjaCBvcHRpb24KLSAgICAgICAgaW4gdGhlIHNlY3Rpb24uCi0KLSAgICAgICAgQWxsICUgaW50ZXJwb2xhdGlvbnMgYXJlIGV4cGFuZGVkIGluIHRoZSByZXR1cm4gdmFsdWVzLCBiYXNlZCBvbiB0aGUKLSAgICAgICAgZGVmYXVsdHMgcGFzc2VkIGludG8gdGhlIGNvbnN0cnVjdG9yLCB1bmxlc3MgdGhlIG9wdGlvbmFsIGFyZ3VtZW50Ci0gICAgICAgIGByYXcnIGlzIHRydWUuICBBZGRpdGlvbmFsIHN1YnN0aXR1dGlvbnMgbWF5IGJlIHByb3ZpZGVkIHVzaW5nIHRoZQotICAgICAgICBgdmFycycgYXJndW1lbnQsIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IHdob3NlIGNvbnRlbnRzIG92ZXJyaWRlcwotICAgICAgICBhbnkgcHJlLWV4aXN0aW5nIGRlZmF1bHRzLgotCi0gICAgICAgIFRoZSBzZWN0aW9uIERFRkFVTFQgaXMgc3BlY2lhbC4KKyAgICBkZWYgX2NvbnZlcnRfdG9fYm9vbGVhbihzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJldHVybiBhIGJvb2xlYW4gdmFsdWUgdHJhbnNsYXRpbmcgZnJvbSBvdGhlciB0eXBlcyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICIiIgotICAgICAgICBkID0gc2VsZi5fZGVmYXVsdHMuY29weSgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQudXBkYXRlKHNlbGYuX3NlY3Rpb25zW3NlY3Rpb25dKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBpZiBzZWN0aW9uICE9IERFRkFVTFRTRUNUOgotICAgICAgICAgICAgICAgIHJhaXNlIE5vU2VjdGlvbkVycm9yKHNlY3Rpb24pCi0gICAgICAgICMgVXBkYXRlIHdpdGggdGhlIGVudHJ5IHNwZWNpZmljIHZhcmlhYmxlcwotICAgICAgICBpZiB2YXJzOgotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gdmFycy5pdGVtcygpOgotICAgICAgICAgICAgICAgIGRbc2VsZi5vcHRpb254Zm9ybShrZXkpXSA9IHZhbHVlCi0gICAgICAgIG9wdGlvbnMgPSBsaXN0KGQua2V5cygpKQotICAgICAgICBpZiAiX19uYW1lX18iIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICBvcHRpb25zLnJlbW92ZSgiX19uYW1lX18iKQotICAgICAgICBpZiByYXc6Ci0gICAgICAgICAgICByZXR1cm4gWyhvcHRpb24sIGRbb3B0aW9uXSkKLSAgICAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIFsob3B0aW9uLCBzZWxmLl9pbnRlcnBvbGF0ZShzZWN0aW9uLCBvcHRpb24sIGRbb3B0aW9uXSwgZCkpCi0gICAgICAgICAgICAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uc10KKyAgICAgICAgaWYgdmFsdWUubG93ZXIoKSBub3QgaW4gc2VsZi5CT09MRUFOX1NUQVRFUzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIGJvb2xlYW46ICVzJyAlIHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZi5CT09MRUFOX1NUQVRFU1t2YWx1ZS5sb3dlcigpXQogCi0gICAgZGVmIF9pbnRlcnBvbGF0ZShzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHJhd3ZhbCwgdmFycyk6Ci0gICAgICAgICMgZG8gdGhlIHN0cmluZyBpbnRlcnBvbGF0aW9uCi0gICAgICAgIHZhbHVlID0gcmF3dmFsCi0gICAgICAgIGRlcHRoID0gTUFYX0lOVEVSUE9MQVRJT05fREVQVEgKLSAgICAgICAgd2hpbGUgZGVwdGg6ICAgICAgICAgICAgICAgICAgICAjIExvb3AgdGhyb3VnaCB0aGlzIHVudGlsIGl0J3MgZG9uZQotICAgICAgICAgICAgZGVwdGggLT0gMQotICAgICAgICAgICAgaWYgIiUoIiBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX0tFWUNSRS5zdWIoc2VsZi5faW50ZXJwb2xhdGlvbl9yZXBsYWNlLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgJSB2YXJzCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgZS5hcmdzWzBdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiAiJSgiIGluIHZhbHVlOgotICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCi0gICAgICAgIHJldHVybiB2YWx1ZQorICAgIGRlZiBfdmFsaWRhdGVfdmFsdWVfdHlwZXMoc2VsZiwgKiwgc2VjdGlvbj0iIiwgb3B0aW9uPSIiLCB2YWx1ZT0iIik6CisgICAgICAgICIiIlJhaXNlcyBhIFR5cGVFcnJvciBmb3Igbm9uLXN0cmluZyB2YWx1ZXMuCiAKLSAgICBfS0VZQ1JFID0gcmUuY29tcGlsZShyIiVcKChbXildKilcKXN8LiIpCisgICAgICAgIFRoZSBvbmx5IGxlZ2FsIG5vbi1zdHJpbmcgdmFsdWUgaWYgd2UgYWxsb3cgdmFsdWVsZXNzCisgICAgICAgIG9wdGlvbnMgaXMgTm9uZSwgc28gd2UgbmVlZCB0byBjaGVjayBpZiB0aGUgdmFsdWUgaXMgYQorICAgICAgICBzdHJpbmcgaWY6CisgICAgICAgIC0gd2UgZG8gbm90IGFsbG93IHZhbHVlbGVzcyBvcHRpb25zLCBvcgorICAgICAgICAtIHdlIGFsbG93IHZhbHVlbGVzcyBvcHRpb25zIGJ1dCB0aGUgdmFsdWUgaXMgbm90IE5vbmUKIAotICAgIGRlZiBfaW50ZXJwb2xhdGlvbl9yZXBsYWNlKHNlbGYsIG1hdGNoKToKLSAgICAgICAgcyA9IG1hdGNoLmdyb3VwKDEpCi0gICAgICAgIGlmIHMgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gIiUlKCVzKXMiICUgc2VsZi5vcHRpb254Zm9ybShzKQorICAgICAgICBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIHRoaXMgbWV0aG9kIGlzIG5vdCB1c2VkIGluIGNsYXNzaWMgc2V0KCkKKyAgICAgICAgZm9yIFJhd0NvbmZpZ1BhcnNlcnMuIEl0IGlzIGludm9rZWQgaW4gZXZlcnkgY2FzZSBmb3IgbWFwcGluZyBwcm90b2NvbAorICAgICAgICBhY2Nlc3MgYW5kIGluIENvbmZpZ1BhcnNlci5zZXQoKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlY3Rpb24sIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNlY3Rpb24gbmFtZXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3B0aW9uLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJvcHRpb24ga2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICBpZiBub3Qgc2VsZi5fYWxsb3dfbm9fdmFsdWUgb3IgdmFsdWU6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm9wdGlvbiB2YWx1ZXMgbXVzdCBiZSBzdHJpbmdzIikKKworCitjbGFzcyBDb25maWdQYXJzZXIoUmF3Q29uZmlnUGFyc2VyKToKKyAgICAiIiJDb25maWdQYXJzZXIgaW1wbGVtZW50aW5nIGludGVycG9sYXRpb24uIiIiCisKKyAgICBfREVGQVVMVF9JTlRFUlBPTEFUSU9OID0gQmFzaWNJbnRlcnBvbGF0aW9uKCkKKworICAgIGRlZiBzZXQoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZT1Ob25lKToKKyAgICAgICAgIiIiU2V0IGFuIG9wdGlvbi4gIEV4dGVuZHMgUmF3Q29uZmlnUGFyc2VyLnNldCBieSB2YWxpZGF0aW5nIHR5cGUgYW5kCisgICAgICAgIGludGVycG9sYXRpb24gc3ludGF4IG9uIHRoZSB2YWx1ZS4iIiIKKyAgICAgICAgc2VsZi5fdmFsaWRhdGVfdmFsdWVfdHlwZXMob3B0aW9uPW9wdGlvbiwgdmFsdWU9dmFsdWUpCisgICAgICAgIHN1cGVyKCkuc2V0KHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCisKKyAgICBkZWYgYWRkX3NlY3Rpb24oc2VsZiwgc2VjdGlvbik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBzZWN0aW9uIGluIHRoZSBjb25maWd1cmF0aW9uLiAgRXh0ZW5kcworICAgICAgICBSYXdDb25maWdQYXJzZXIuYWRkX3NlY3Rpb24gYnkgdmFsaWRhdGluZyBpZiB0aGUgc2VjdGlvbiBuYW1lIGlzCisgICAgICAgIGEgc3RyaW5nLiIiIgorICAgICAgICBzZWxmLl92YWxpZGF0ZV92YWx1ZV90eXBlcyhzZWN0aW9uPXNlY3Rpb24pCisgICAgICAgIHN1cGVyKCkuYWRkX3NlY3Rpb24oc2VjdGlvbikKIAogCiBjbGFzcyBTYWZlQ29uZmlnUGFyc2VyKENvbmZpZ1BhcnNlcik6CisgICAgIiIiQ29uZmlnUGFyc2VyIGFsaWFzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy4iIiIKIAotICAgIGRlZiBfaW50ZXJwb2xhdGUoc2VsZiwgc2VjdGlvbiwgb3B0aW9uLCByYXd2YWwsIHZhcnMpOgotICAgICAgICAjIGRvIHRoZSBzdHJpbmcgaW50ZXJwb2xhdGlvbgotICAgICAgICBMID0gW10KLSAgICAgICAgc2VsZi5faW50ZXJwb2xhdGVfc29tZShvcHRpb24sIEwsIHJhd3ZhbCwgc2VjdGlvbiwgdmFycywgMSkKLSAgICAgICAgcmV0dXJuICcnLmpvaW4oTCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAiVGhlIFNhZmVDb25maWdQYXJzZXIgY2xhc3MgaGFzIGJlZW4gcmVuYW1lZCB0byBDb25maWdQYXJzZXIgIgorICAgICAgICAgICAgImluIFB5dGhvbiAzLjIuIFRoaXMgYWxpYXMgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4iCisgICAgICAgICAgICAiIFVzZSBDb25maWdQYXJzZXIgZGlyZWN0bHkgaW5zdGVhZC4iLAorICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgKQogCi0gICAgX2ludGVycHZhcl9yZSA9IHJlLmNvbXBpbGUociIlXCgoW14pXSspXClzIikKIAotICAgIGRlZiBfaW50ZXJwb2xhdGVfc29tZShzZWxmLCBvcHRpb24sIGFjY3VtLCByZXN0LCBzZWN0aW9uLCBtYXAsIGRlcHRoKToKLSAgICAgICAgaWYgZGVwdGggPiBNQVhfSU5URVJQT0xBVElPTl9ERVBUSDoKLSAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmVzdCkKLSAgICAgICAgd2hpbGUgcmVzdDoKLSAgICAgICAgICAgIHAgPSByZXN0LmZpbmQoIiUiKQotICAgICAgICAgICAgaWYgcCA8IDA6Ci0gICAgICAgICAgICAgICAgYWNjdW0uYXBwZW5kKHJlc3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBwID4gMDoKLSAgICAgICAgICAgICAgICBhY2N1bS5hcHBlbmQocmVzdFs6cF0pCi0gICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbcDpdCi0gICAgICAgICAgICAjIHAgaXMgbm8gbG9uZ2VyIHVzZWQKLSAgICAgICAgICAgIGMgPSByZXN0WzE6Ml0KLSAgICAgICAgICAgIGlmIGMgPT0gIiUiOgotICAgICAgICAgICAgICAgIGFjY3VtLmFwcGVuZCgiJSIpCi0gICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbMjpdCi0gICAgICAgICAgICBlbGlmIGMgPT0gIigiOgotICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9pbnRlcnB2YXJfcmUubWF0Y2gocmVzdCkKLSAgICAgICAgICAgICAgICBpZiBtIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25TeW50YXhFcnJvcihvcHRpb24sIHNlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGludGVycG9sYXRpb24gdmFyaWFibGUgcmVmZXJlbmNlICVyIiAlIHJlc3QpCi0gICAgICAgICAgICAgICAgdmFyID0gc2VsZi5vcHRpb254Zm9ybShtLmdyb3VwKDEpKQotICAgICAgICAgICAgICAgIHJlc3QgPSByZXN0W20uZW5kKCk6XQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdiA9IG1hcFt2YXJdCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLCBzZWN0aW9uLCByZXN0LCB2YXIpCi0gICAgICAgICAgICAgICAgaWYgIiUiIGluIHY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUob3B0aW9uLCBhY2N1bSwgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uLCBtYXAsIGRlcHRoICsgMSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBhY2N1bS5hcHBlbmQodikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvblN5bnRheEVycm9yKAotICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICInJSUnIG11c3QgYmUgZm9sbG93ZWQgYnkgJyUlJyBvciAnKCcsIGZvdW5kOiAlciIgJSAocmVzdCwpKQorY2xhc3MgU2VjdGlvblByb3h5KE11dGFibGVNYXBwaW5nKToKKyAgICAiIiJBIHByb3h5IGZvciBhIHNpbmdsZSBzZWN0aW9uIGZyb20gYSBwYXJzZXIuIiIiCiAKLSAgICBkZWYgc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgotICAgICAgICAiIiJTZXQgYW4gb3B0aW9uLiAgRXh0ZW5kIENvbmZpZ1BhcnNlci5zZXQ6IGNoZWNrIGZvciBzdHJpbmcgdmFsdWVzLiIiIgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigib3B0aW9uIHZhbHVlcyBtdXN0IGJlIHN0cmluZ3MiKQotICAgICAgICAjIGNoZWNrIGZvciBiYWQgcGVyY2VudCBzaWduczoKLSAgICAgICAgIyBmaXJzdCwgcmVwbGFjZSBhbGwgImdvb2QiIGludGVycG9sYXRpb25zCi0gICAgICAgIHRtcF92YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJyUlJywgJycpCi0gICAgICAgIHRtcF92YWx1ZSA9IHNlbGYuX2ludGVycHZhcl9yZS5zdWIoJycsIHRtcF92YWx1ZSkKLSAgICAgICAgIyB0aGVuLCBjaGVjayBpZiB0aGVyZSdzIGEgbG9uZSBwZXJjZW50IHNpZ24gbGVmdAotICAgICAgICBwZXJjZW50X2luZGV4ID0gdG1wX3ZhbHVlLmZpbmQoJyUnKQotICAgICAgICBpZiBwZXJjZW50X2luZGV4ICE9IC0xOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBpbnRlcnBvbGF0aW9uIHN5bnRheCBpbiAlciBhdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3NpdGlvbiAlZCIgJSAodmFsdWUsIHBlcmNlbnRfaW5kZXgpKQotICAgICAgICBDb25maWdQYXJzZXIuc2V0KHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlciwgbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZXMgYSB2aWV3IG9uIGEgc2VjdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGBuYW1lYCBpbiBgcGFyc2VyYC4iIiIKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPFNlY3Rpb246IHt9PicuZm9ybWF0KHNlbGYuX25hbWUpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhcnNlci5oYXNfb3B0aW9uKHNlbGYuX25hbWUsIGtleSk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZXIuZ2V0KHNlbGYuX25hbWUsIGtleSkKKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgc2VsZi5fcGFyc2VyLl92YWxpZGF0ZV92YWx1ZV90eXBlcyhvcHRpb249a2V5LCB2YWx1ZT12YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5zZXQoc2VsZi5fbmFtZSwga2V5LCB2YWx1ZSkKKworICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBpZiBub3QgKHNlbGYuX3BhcnNlci5oYXNfb3B0aW9uKHNlbGYuX25hbWUsIGtleSkgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLnJlbW92ZV9vcHRpb24oc2VsZi5fbmFtZSwga2V5KSk6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcihrZXkpCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZXIuaGFzX29wdGlvbihzZWxmLl9uYW1lLCBrZXkpCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9vcHRpb25zKCkpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9vcHRpb25zKCkuX19pdGVyX18oKQorCisgICAgZGVmIF9vcHRpb25zKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9uYW1lICE9IHNlbGYuX3BhcnNlci5kZWZhdWx0X3NlY3Rpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VyLm9wdGlvbnMoc2VsZi5fbmFtZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZXIuZGVmYXVsdHMoKQorCisgICAgZGVmIGdldChzZWxmLCBvcHRpb24sIGZhbGxiYWNrPU5vbmUsICosIHJhdz1GYWxzZSwgdmFycz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5nZXQoc2VsZi5fbmFtZSwgb3B0aW9uLCByYXc9cmF3LCB2YXJzPXZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWZhbGxiYWNrKQorCisgICAgZGVmIGdldGludChzZWxmLCBvcHRpb24sIGZhbGxiYWNrPU5vbmUsICosIHJhdz1GYWxzZSwgdmFycz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3BhcnNlci5nZXRpbnQoc2VsZi5fbmFtZSwgb3B0aW9uLCByYXc9cmF3LCB2YXJzPXZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWZhbGxiYWNrKQorCisgICAgZGVmIGdldGZsb2F0KHNlbGYsIG9wdGlvbiwgZmFsbGJhY2s9Tm9uZSwgKiwgcmF3PUZhbHNlLCB2YXJzPU5vbmUpOgorICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VyLmdldGZsb2F0KHNlbGYuX25hbWUsIG9wdGlvbiwgcmF3PXJhdywgdmFycz12YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWZhbGxiYWNrKQorCisgICAgZGVmIGdldGJvb2xlYW4oc2VsZiwgb3B0aW9uLCBmYWxsYmFjaz1Ob25lLCAqLCByYXc9RmFsc2UsIHZhcnM9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wYXJzZXIuZ2V0Ym9vbGVhbihzZWxmLl9uYW1lLCBvcHRpb24sIHJhdz1yYXcsIHZhcnM9dmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPWZhbGxiYWNrKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnNlcihzZWxmKToKKyAgICAgICAgIyBUaGUgcGFyc2VyIG9iamVjdCBvZiB0aGUgcHJveHkgaXMgcmVhZC1vbmx5LgorICAgICAgICByZXR1cm4gc2VsZi5fcGFyc2VyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIyBUaGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBvbiBhIHByb3h5IGlzIHJlYWQtb25seS4KKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggYmZmYTBjNC4uNDYzM2NmZiAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTQsOSArNCwyMCBAQAogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiBmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAKLV9fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgIm5lc3RlZCIsICJjbG9zaW5nIl0KK19fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciJdCiAKLWNsYXNzIEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyKG9iamVjdCk6CisKK2NsYXNzIENvbnRleHREZWNvcmF0b3Iob2JqZWN0KToKKyAgICAiQSBiYXNlIGNsYXNzIG9yIG1peGluIHRoYXQgZW5hYmxlcyBjb250ZXh0IG1hbmFnZXJzIHRvIHdvcmsgYXMgZGVjb3JhdG9ycy4iCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGZ1bmMpOgorICAgICAgICBAd3JhcHMoZnVuYykKKyAgICAgICAgZGVmIGlubmVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgd2l0aCBzZWxmOgorICAgICAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3ZHMpCisgICAgICAgIHJldHVybiBpbm5lcgorCisKK2NsYXNzIF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlcihDb250ZXh0RGVjb3JhdG9yKToKICAgICAiIiJIZWxwZXIgZm9yIEBjb250ZXh0bWFuYWdlciBkZWNvcmF0b3IuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuKToKQEAgLTgxLDU1ICs5MiwxMCBAQAogICAgICIiIgogICAgIEB3cmFwcyhmdW5jKQogICAgIGRlZiBoZWxwZXIoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBHZW5lcmF0b3JDb250ZXh0TWFuYWdlcihmdW5jKCphcmdzLCAqKmt3ZHMpKQorICAgICAgICByZXR1cm4gX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyKGZ1bmMoKmFyZ3MsICoqa3dkcykpCiAgICAgcmV0dXJuIGhlbHBlcgogCiAKLUBjb250ZXh0bWFuYWdlcgotZGVmIG5lc3RlZCgqbWFuYWdlcnMpOgotICAgICIiIkNvbWJpbmUgbXVsdGlwbGUgY29udGV4dCBtYW5hZ2VycyBpbnRvIGEgc2luZ2xlIG5lc3RlZCBjb250ZXh0IG1hbmFnZXIuCi0KLSAgIFRoaXMgZnVuY3Rpb24gaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgdGhlIG11bHRpcGxlIG1hbmFnZXIgZm9ybQotICAgb2YgdGhlIHdpdGggc3RhdGVtZW50LgotCi0gICBUaGUgb25lIGFkdmFudGFnZSBvZiB0aGlzIGZ1bmN0aW9uIG92ZXIgdGhlIG11bHRpcGxlIG1hbmFnZXIgZm9ybSBvZiB0aGUKLSAgIHdpdGggc3RhdGVtZW50IGlzIHRoYXQgYXJndW1lbnQgdW5wYWNraW5nIGFsbG93cyBpdCB0byBiZQotICAgdXNlZCB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mIGNvbnRleHQgbWFuYWdlcnMgYXMgZm9sbG93czoKLQotICAgICAgd2l0aCBuZXN0ZWQoKm1hbmFnZXJzKToKLSAgICAgICAgICBkb19zb21ldGhpbmcoKQotCi0gICAgIiIiCi0gICAgd2FybigiV2l0aC1zdGF0ZW1lbnRzIG5vdyBkaXJlY3RseSBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgbWFuYWdlcnMiLAotICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDMpCi0gICAgZXhpdHMgPSBbXQotICAgIHZhcnMgPSBbXQotICAgIGV4YyA9IChOb25lLCBOb25lLCBOb25lKQotICAgIHRyeToKLSAgICAgICAgZm9yIG1nciBpbiBtYW5hZ2VyczoKLSAgICAgICAgICAgIGV4aXQgPSBtZ3IuX19leGl0X18KLSAgICAgICAgICAgIGVudGVyID0gbWdyLl9fZW50ZXJfXwotICAgICAgICAgICAgdmFycy5hcHBlbmQoZW50ZXIoKSkKLSAgICAgICAgICAgIGV4aXRzLmFwcGVuZChleGl0KQotICAgICAgICB5aWVsZCB2YXJzCi0gICAgZXhjZXB0OgotICAgICAgICBleGMgPSBzeXMuZXhjX2luZm8oKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHdoaWxlIGV4aXRzOgotICAgICAgICAgICAgZXhpdCA9IGV4aXRzLnBvcCgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgZXhpdCgqZXhjKToKLSAgICAgICAgICAgICAgICAgICAgZXhjID0gKE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgZXhjID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgaWYgZXhjICE9IChOb25lLCBOb25lLCBOb25lKToKLSAgICAgICAgICAgICMgRG9uJ3QgcmVseSBvbiBzeXMuZXhjX2luZm8oKSBzdGlsbCBjb250YWluaW5nCi0gICAgICAgICAgICAjIHRoZSByaWdodCBpbmZvcm1hdGlvbi4gQW5vdGhlciBleGNlcHRpb24gbWF5Ci0gICAgICAgICAgICAjIGhhdmUgYmVlbiByYWlzZWQgYW5kIGNhdWdodCBieSBhbiBleGl0IG1ldGhvZAotICAgICAgICAgICAgIyBleGNbMV0gYWxyZWFkeSBoYXMgdGhlIF9fdHJhY2ViYWNrX18gYXR0cmlidXRlIHBvcHVsYXRlZAotICAgICAgICAgICAgcmFpc2UgZXhjWzFdCi0KLQogY2xhc3MgY2xvc2luZyhvYmplY3QpOgogICAgICIiIkNvbnRleHQgdG8gYXV0b21hdGljYWxseSBjbG9zZSBzb21ldGhpbmcgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgogCmRpZmYgLS1naXQgYS9MaWIvY29weS5weSBiL0xpYi9jb3B5LnB5CmluZGV4IDRiNzU1MTEuLjA4OWQxMDEgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5LnB5CisrKyBiL0xpYi9jb3B5LnB5CkBAIC0yMzksNiArMjM5LDEwIEBACiBpZiBQeVN0cmluZ01hcCBpcyBub3QgTm9uZToKICAgICBkW1B5U3RyaW5nTWFwXSA9IF9kZWVwY29weV9kaWN0CiAKK2RlZiBfZGVlcGNvcHlfbWV0aG9kKHgsIG1lbW8pOiAjIENvcHkgaW5zdGFuY2UgbWV0aG9kcworICAgIHJldHVybiB0eXBlKHgpKHguX19mdW5jX18sIGRlZXBjb3B5KHguX19zZWxmX18sIG1lbW8pKQorX2RlZXBjb3B5X2Rpc3BhdGNoW3R5cGVzLk1ldGhvZFR5cGVdID0gX2RlZXBjb3B5X21ldGhvZAorCiBkZWYgX2tlZXBfYWxpdmUoeCwgbWVtbyk6CiAgICAgIiIiS2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB4IGluIHRoZSBtZW1vLgogCmRpZmYgLS1naXQgYS9MaWIvY3N2LnB5IGIvTGliL2Nzdi5weQppbmRleCBkYmU2ZGI3Li44ZGZjNzdlIDEwMDY0NAotLS0gYS9MaWIvY3N2LnB5CisrKyBiL0xpYi9jc3YucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICAgICAgICAgICJ1bnJlZ2lzdGVyX2RpYWxlY3QiLCAiX192ZXJzaW9uX18iLCAiRGljdFJlYWRlciIsICJEaWN0V3JpdGVyIiBdCiAKIGNsYXNzIERpYWxlY3Q6Ci0gICAgIiIiRGVzY3JpYmUgYW4gRXhjZWwgZGlhbGVjdC4KKyAgICAiIiJEZXNjcmliZSBhIENTViBkaWFsZWN0LgogCiAgICAgVGhpcyBtdXN0IGJlIHN1YmNsYXNzZWQgKHNlZSBjc3YuZXhjZWwpLiAgVmFsaWQgYXR0cmlidXRlcyBhcmU6CiAgICAgZGVsaW1pdGVyLCBxdW90ZWNoYXIsIGVzY2FwZWNoYXIsIGRvdWJsZXF1b3RlLCBza2lwaW5pdGlhbHNwYWNlLApAQCAtNjUsNiArNjUsMTYgQEAKICAgICBkZWxpbWl0ZXIgPSAnXHQnCiByZWdpc3Rlcl9kaWFsZWN0KCJleGNlbC10YWIiLCBleGNlbF90YWIpCiAKK2NsYXNzIHVuaXhfZGlhbGVjdChEaWFsZWN0KToKKyAgICAiIiJEZXNjcmliZSB0aGUgdXN1YWwgcHJvcGVydGllcyBvZiBVbml4LWdlbmVyYXRlZCBDU1YgZmlsZXMuIiIiCisgICAgZGVsaW1pdGVyID0gJywnCisgICAgcXVvdGVjaGFyID0gJyInCisgICAgZG91YmxlcXVvdGUgPSBUcnVlCisgICAgc2tpcGluaXRpYWxzcGFjZSA9IEZhbHNlCisgICAgbGluZXRlcm1pbmF0b3IgPSAnXG4nCisgICAgcXVvdGluZyA9IFFVT1RFX0FMTAorcmVnaXN0ZXJfZGlhbGVjdCgidW5peCIsIHVuaXhfZGlhbGVjdCkKKwogCiBjbGFzcyBEaWN0UmVhZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmLCBmaWVsZG5hbWVzPU5vbmUsIHJlc3RrZXk9Tm9uZSwgcmVzdHZhbD1Ob25lLApAQCAtMTI3LDYgKzEzNywxMCBAQAogICAgICAgICBzZWxmLmV4dHJhc2FjdGlvbiA9IGV4dHJhc2FjdGlvbgogICAgICAgICBzZWxmLndyaXRlciA9IHdyaXRlcihmLCBkaWFsZWN0LCAqYXJncywgKiprd2RzKQogCisgICAgZGVmIHdyaXRlaGVhZGVyKHNlbGYpOgorICAgICAgICBoZWFkZXIgPSBkaWN0KHppcChzZWxmLmZpZWxkbmFtZXMsIHNlbGYuZmllbGRuYW1lcykpCisgICAgICAgIHNlbGYud3JpdGVyb3coaGVhZGVyKQorCiAgICAgZGVmIF9kaWN0X3RvX2xpc3Qoc2VsZiwgcm93ZGljdCk6CiAgICAgICAgIGlmIHNlbGYuZXh0cmFzYWN0aW9uID09ICJyYWlzZSI6CiAgICAgICAgICAgICB3cm9uZ19maWVsZHMgPSBbayBmb3IgayBpbiByb3dkaWN0IGlmIGsgbm90IGluIHNlbGYuZmllbGRuYW1lc10KZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkgYi9MaWIvY3R5cGVzL19faW5pdF9fLnB5CmluZGV4IDEyODNmMjguLjcxNjg2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvX19pbml0X18ucHkKKysrIGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQpAQCAtMjU5LDQxICsyNTksMzEgQEAKIAogZnJvbSBfY3R5cGVzIGltcG9ydCBQT0lOVEVSLCBwb2ludGVyLCBfcG9pbnRlcl90eXBlX2NhY2hlCiAKLXRyeToKLSAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IHNldF9jb252ZXJzaW9uX21vZGUKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGlmIF9vcy5uYW1lIGluICgibnQiLCAiY2UiKToKLSAgICAgICAgc2V0X2NvbnZlcnNpb25fbW9kZSgibWJjcyIsICJpZ25vcmUiKQotICAgIGVsc2U6Ci0gICAgICAgIHNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCitjbGFzcyBjX3djaGFyX3AoX1NpbXBsZUNEYXRhKToKKyAgICBfdHlwZV8gPSAiWiIKIAotICAgIGNsYXNzIGNfd2NoYXJfcChfU2ltcGxlQ0RhdGEpOgotICAgICAgICBfdHlwZV8gPSAiWiIKK2NsYXNzIGNfd2NoYXIoX1NpbXBsZUNEYXRhKToKKyAgICBfdHlwZV8gPSAidSIKIAotICAgIGNsYXNzIGNfd2NoYXIoX1NpbXBsZUNEYXRhKToKLSAgICAgICAgX3R5cGVfID0gInUiCitQT0lOVEVSKGNfd2NoYXIpLmZyb21fcGFyYW0gPSBjX3djaGFyX3AuZnJvbV9wYXJhbSAjX1NpbXBsZUNEYXRhLmNfd2NoYXJfcF9mcm9tX3BhcmFtCiAKLSAgICBQT0lOVEVSKGNfd2NoYXIpLmZyb21fcGFyYW0gPSBjX3djaGFyX3AuZnJvbV9wYXJhbSAjX1NpbXBsZUNEYXRhLmNfd2NoYXJfcF9mcm9tX3BhcmFtCi0KLSAgICBkZWYgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGluaXQsIHNpemU9Tm9uZSk6Ci0gICAgICAgICIiImNyZWF0ZV91bmljb2RlX2J1ZmZlcihhU3RyaW5nKSAtPiBjaGFyYWN0ZXIgYXJyYXkKLSAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5Ci0gICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcihhU3RyaW5nLCBhbkludGVnZXIpIC0+IGNoYXJhY3RlciBhcnJheQotICAgICAgICAiIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShpbml0LCAoc3RyLCBieXRlcykpOgotICAgICAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNpemUgPSBsZW4oaW5pdCkrMQotICAgICAgICAgICAgYnVmdHlwZSA9IGNfd2NoYXIgKiBzaXplCi0gICAgICAgICAgICBidWYgPSBidWZ0eXBlKCkKLSAgICAgICAgICAgIGJ1Zi52YWx1ZSA9IGluaXQKLSAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKGluaXQsIGludCk6Ci0gICAgICAgICAgICBidWZ0eXBlID0gY193Y2hhciAqIGluaXQKLSAgICAgICAgICAgIGJ1ZiA9IGJ1ZnR5cGUoKQotICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoaW5pdCkKK2RlZiBjcmVhdGVfdW5pY29kZV9idWZmZXIoaW5pdCwgc2l6ZT1Ob25lKToKKyAgICAiIiJjcmVhdGVfdW5pY29kZV9idWZmZXIoYVN0cmluZykgLT4gY2hhcmFjdGVyIGFycmF5CisgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CisgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFTdHJpbmcsIGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShpbml0LCAoc3RyLCBieXRlcykpOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gbGVuKGluaXQpKzEKKyAgICAgICAgYnVmdHlwZSA9IGNfd2NoYXIgKiBzaXplCisgICAgICAgIGJ1ZiA9IGJ1ZnR5cGUoKQorICAgICAgICBidWYudmFsdWUgPSBpbml0CisgICAgICAgIHJldHVybiBidWYKKyAgICBlbGlmIGlzaW5zdGFuY2UoaW5pdCwgaW50KToKKyAgICAgICAgYnVmdHlwZSA9IGNfd2NoYXIgKiBpbml0CisgICAgICAgIGJ1ZiA9IGJ1ZnR5cGUoKQorICAgICAgICByZXR1cm4gYnVmCisgICAgcmFpc2UgVHlwZUVycm9yKGluaXQpCiAKIFBPSU5URVIoY19jaGFyKS5mcm9tX3BhcmFtID0gY19jaGFyX3AuZnJvbV9wYXJhbSAjX1NpbXBsZUNEYXRhLmNfY2hhcl9wX2Zyb21fcGFyYW0KIApAQCAtNDU5LDEwICs0NDksMTMgQEAKIAogaWYgc2l6ZW9mKGNfdWludCkgPT0gc2l6ZW9mKGNfdm9pZF9wKToKICAgICBjX3NpemVfdCA9IGNfdWludAorICAgIGNfc3NpemVfdCA9IGNfaW50CiBlbGlmIHNpemVvZihjX3Vsb25nKSA9PSBzaXplb2YoY192b2lkX3ApOgogICAgIGNfc2l6ZV90ID0gY191bG9uZworICAgIGNfc3NpemVfdCA9IGNfbG9uZwogZWxpZiBzaXplb2YoY191bG9uZ2xvbmcpID09IHNpemVvZihjX3ZvaWRfcCk6CiAgICAgY19zaXplX3QgPSBjX3Vsb25nbG9uZworICAgIGNfc3NpemVfdCA9IGNfbG9uZ2xvbmcKIAogIyBmdW5jdGlvbnMKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CmluZGV4IGQxMWRlMjguLmYyYTlmMDcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKQEAgLTQyLDcgKzQyLDcgQEAKIAogICAgICAgICBDaGFyQXJyYXkgPSBBUlJBWShjX2NoYXIsIDMpCiAKLSAgICAgICAgY2EgPSBDaGFyQXJyYXkoImEiLCAiYiIsICJjIikKKyAgICAgICAgY2EgPSBDaGFyQXJyYXkoYiJhIiwgYiJiIiwgYiJjIikKIAogICAgICAgICAjIFNob3VsZCB0aGlzIHdvcms/IEl0IGRvZXNuJ3Q6CiAgICAgICAgICMgQ2hhckFycmF5KCJhYmMiKQpAQCAtODksNyArODksNyBAQAogCiAgICAgZGVmIHRlc3RfZnJvbV9hZGRyZXNzKHNlbGYpOgogICAgICAgICAjIEZhaWxlZCB3aXRoIDAuOS44LCByZXBvcnRlZCBieSBKVXJuZXIKLSAgICAgICAgcCA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJmb28iKQorICAgICAgICBwID0gY3JlYXRlX3N0cmluZ19idWZmZXIoYiJmb28iKQogICAgICAgICBzeiA9IChjX2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzpdLCBiImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjpdLCBiImZvbyIpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKaW5kZXggNGViOTU3MS4uOWUwODI1YyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQpAQCAtMzcsMTQgKzM3LDE0IEBACiAgICAgICAgICAgICBmb3IgbmFtZSBpbiAiQUJDREVGR0hJIjoKICAgICAgICAgICAgICAgICBiID0gQklUUygpCiAgICAgICAgICAgICAgICAgc2V0YXR0cihiLCBuYW1lLCBpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIGksIGdldGF0dHIoYiwgbmFtZSkpLCAobmFtZSwgaSwgZnVuYyhieXJlZihiKSwgbmFtZSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihiLCBuYW1lKSwgZnVuYyhieXJlZihiKSwgbmFtZS5lbmNvZGUoJ2FzY2lpJykpKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgogICAgICAgICAgICAgZm9yIG5hbWUgaW4gIk1OT1BRUlMiOgogICAgICAgICAgICAgICAgIGIgPSBCSVRTKCkKICAgICAgICAgICAgICAgICBzZXRhdHRyKGIsIG5hbWUsIGkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgaSwgZ2V0YXR0cihiLCBuYW1lKSksIChuYW1lLCBpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGIsIG5hbWUpLCBmdW5jKGJ5cmVmKGIpLCBuYW1lLmVuY29kZSgnYXNjaWknKSkpCiAKIHNpZ25lZF9pbnRfdHlwZXMgPSAoY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2xvbmdsb25nKQogdW5zaWduZWRfaW50X3R5cGVzID0gKGNfdWJ5dGUsIGNfdXNob3J0LCBjX3VpbnQsIGNfdWxvbmcsIGNfdWxvbmdsb25nKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKaW5kZXggM2Y4YTU4Ny4uYzE5YzA1YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CkBAIC05LDE5ICs5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfY2hhcikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGJbMF0pIGlzIGJ5dGVzKQogCi0gICAgICAgIGIgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigiYWJjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY19jaGFyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoYlswXSkgaXMgYnl0ZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYlswXSwgYiJhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCBiImFiY1wwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgYiJhYmNcMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Oi0xXSwgYiJcMGNiYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCBiImFjIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sIGIiYSIpCi0KLSAgICBkZWYgdGVzdF9zdHJpbmdfY29udmVyc2lvbihzZWxmKToKLSAgICAgICAgYiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJhYmMiKQorICAgICAgICBiID0gY3JlYXRlX3N0cmluZ19idWZmZXIoYiJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiKSwgNCkgIyB0cmFpbGluZyBudWwgY2hhcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgNCAqIHNpemVvZihjX2NoYXIpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShiWzBdKSBpcyBieXRlcykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggMzc0YjJkNy4uZWU0OWM0NSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkKQEAgLTExLDM0ICsxMSwzMCBAQAogICAgICAgICAoY19jaGFyICogMykoYiJhIiwgYiJiIiwgYiJjIikKIAogICAgIGRlZiB0ZXN0X2Nfd2NoYXIoc2VsZik6Ci0gICAgICAgIHggPSBjX3djaGFyKGIieCIpCi0gICAgICAgIHgudmFsdWUgPSBiInkiCi0gICAgICAgIGNfd2NoYXIuZnJvbV9wYXJhbShiIngiKQotICAgICAgICAoY193Y2hhciAqIDMpKGIiYSIsIGIiYiIsIGIiYyIpCisgICAgICAgIHggPSBjX3djaGFyKCJ4IikKKyAgICAgICAgeC52YWx1ZSA9ICJ5IgorICAgICAgICBjX3djaGFyLmZyb21fcGFyYW0oIngiKQorICAgICAgICAoY193Y2hhciAqIDMpKCJhIiwgImIiLCAiYyIpCiAKICAgICBkZWYgdGVzdF9jX2NoYXJfcChzZWxmKToKLSAgICAgICAgY19jaGFyX3AoImZvbyBiYXIiKQogICAgICAgICBjX2NoYXJfcChiImZvbyBiYXIiKQogCiAgICAgZGVmIHRlc3RfY193Y2hhcl9wKHNlbGYpOgogICAgICAgICBjX3djaGFyX3AoImZvbyBiYXIiKQotICAgICAgICBjX3djaGFyX3AoYiJmb28gYmFyIikKIAogICAgIGRlZiB0ZXN0X3N0cnVjdChzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19jaGFyICogMyldCiAKLSAgICAgICAgWCgiYWJjIikKICAgICAgICAgeCA9IFgoYiJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh4LmEpLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCBiImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh4LmEpLCBieXRlcykKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9XKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3djaGFyICogMyldCiAKLSAgICAgICAgWCgiYWJjIikKLSAgICAgICAgeCA9IFgoYiJhYmMiKQorICAgICAgICB4ID0gWCgiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeC5hKSwgc3RyKQogCkBAIC00OSw3ICs0NSw2IEBACiAgICAgICAgICAgICAgICAgX3R5cGVfID0gIlgiCiAKICAgICAgICAgICAgIEJTVFIoImFiYyIpCi0gICAgICAgICAgICBCU1RSKGIiYWJjIikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQppbmRleCBkYWJjZGU2Li44ODAxY2NkIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CkBAIC0xNjYsNiArMTY2LDQwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRpZmYsIDAuMDEsICIlcyBub3QgbGVzcyB0aGFuIDAuMDEiICUgZGlmZikKIAorICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CisgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6CisgICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICBsaWJjID0gQ0RMTChsaWJjX3BhdGgpCisKKyAgICAgICAgQENGVU5DVFlQRShjX2ludCwgUE9JTlRFUihjX2ludCksIFBPSU5URVIoY19pbnQpKQorICAgICAgICBkZWYgY21wX2Z1bmMoYSwgYik6CisgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF0KKworICAgICAgICBhcnJheSA9IChjX2ludCAqIDUpKDUsIDEsIDk5LCA3LCAzMykKKworICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCisKKyAgICB0cnk6CisgICAgICAgIFdJTkZVTkNUWVBFCisgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgcGFzcworICAgIGVsc2U6CisgICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKKyAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAorICAgICAgICAgICAgd2luZG93Q291bnQgPSAwCisKKyAgICAgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgICAgICBkZWYgRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMoaHduZCwgbFBhcmFtKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgd2luZG93Q291bnQKKyAgICAgICAgICAgICAgICB3aW5kb3dDb3VudCArPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUgI0FsbG93IHdpbmRvd3MgdG8ga2VlcCBlbnVtZXJhdGluZworCisgICAgICAgICAgICB3aW5kbGwudXNlcjMyLkVudW1XaW5kb3dzKEVudW1XaW5kb3dzQ2FsbGJhY2tGdW5jLCAwKQorCiAgICAgZGVmIHRlc3RfY2FsbGJhY2tfcmVnaXN0ZXJfaW50KHNlbGYpOgogICAgICAgICAjIElzc3VlICM4Mjc1OiBidWdneSBoYW5kbGluZyBvZiBjYWxsYmFjayBhcmdzIHVuZGVyIFdpbjY0CiAgICAgICAgICMgTk9URTogc2hvdWxkIGJlIHJ1biBvbiByZWxlYXNlIGJ1aWxkcyBhcyB3ZWxsCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQppbmRleCA0YzRhMmU4Li43MDJkZTNjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKQEAgLTMzLDE3ICszMywxNyBAQAogICAgIGRlZiB0ZXN0X3AyYV9vYmplY3RzKHNlbGYpOgogICAgICAgICBhcnJheSA9IChjX2NoYXJfcCAqIDUpKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheS5fb2JqZWN0cywgTm9uZSkKLSAgICAgICAgYXJyYXlbMF0gPSAiZm9vIGJhciIKKyAgICAgICAgYXJyYXlbMF0gPSBiImZvbyBiYXIiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkuX29iamVjdHMsIHsnMCc6IGIiZm9vIGJhciJ9KQogCiAgICAgICAgIHAgPSBjYXN0KGFycmF5LCBQT0lOVEVSKGNfY2hhcl9wKSkKICAgICAgICAgIyBhcnJheSBhbmQgcCBzaGFyZSBhIGNvbW1vbiBfb2JqZWN0cyBhdHRyaWJ1dGUKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuX29iamVjdHMgaXMgYXJyYXkuX29iamVjdHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJyYXkuX29iamVjdHMsIHsnMCc6IGIiZm9vIGJhciIsIGlkKGFycmF5KTogYXJyYXl9KQotICAgICAgICBwWzBdID0gInNwYW0gc3BhbSIKKyAgICAgICAgcFswXSA9IGIic3BhbSBzcGFtIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX29iamVjdHMsIHsnMCc6IGIic3BhbSBzcGFtIiwgaWQoYXJyYXkpOiBhcnJheX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcnJheS5fb2JqZWN0cyBpcyBwLl9vYmplY3RzKQotICAgICAgICBwWzFdID0gImZvbyBiYXIiCisgICAgICAgIHBbMV0gPSBiImZvbyBiYXIiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fb2JqZWN0cywgeycxJzogYidmb28gYmFyJywgJzAnOiBiInNwYW0gc3BhbSIsIGlkKGFycmF5KTogYXJyYXl9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJyYXkuX29iamVjdHMgaXMgcC5fb2JqZWN0cykKIApAQCAtNzEsNyArNzEsNyBAQAogCiAgICAgZGVmIHRlc3RfY2hhcl9wKHNlbGYpOgogICAgICAgICAjIFRoaXMgZGlkbid0IHdvcms6IGJhZCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5jdGlvbgotICAgICAgICBzID0gY19jaGFyX3AoImhpaG8iKQorICAgICAgICBzID0gY19jaGFyX3AoYiJoaWhvIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXN0KGNhc3QocywgY192b2lkX3ApLCBjX2NoYXJfcCkudmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaGlobyIpCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQppbmRleCA0OTNjYmU5Li5mNGJkM2IxIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICBkZWYgdGVzdF91bG9uZ19wbHVzKHNlbGYpOgogICAgICAgICBzZWxmLl9kbGwudGZfYkwucmVzdHlwZSA9IGNfdWxvbmcKICAgICAgICAgc2VsZi5fZGxsLnRmX2JMLmFyZ3R5cGVzID0gKGNfY2hhciwgY191bG9uZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkwoJyAnLCA0Mjk0OTY3Mjk1KSwgMTQzMTY1NTc2NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kbGwudGZfYkwoYicgJywgNDI5NDk2NzI5NSksIDE0MzE2NTU3NjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5VKCksIDQyOTQ5NjcyOTUpCiAKICAgICBkZWYgdGVzdF9sb25nbG9uZyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Vycm5vLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKaW5kZXggMDI1NGMzYi4uNDY5MGEwZCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZXJybm8ucHkKQEAgLTEsMjcgKzEsMzEgQEAKIGltcG9ydCB1bml0dGVzdCwgb3MsIGVycm5vCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgogZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Ci1pbXBvcnQgdGhyZWFkaW5nCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfb3BlbihzZWxmKToKICAgICAgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKLSAgICAgICAgaWYgbGliY19uYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgbGliYyA9IENETEwobGliY19uYW1lLCB1c2VfZXJybm89VHJ1ZSkKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLl9vcGVuCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGxpYmNfb3BlbiA9IGxpYmMub3BlbgorICAgICAgICBpZiBsaWJjX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gZmluZCBDIGxpYnJhcnkiKQorICAgICAgICBsaWJjID0gQ0RMTChsaWJjX25hbWUsIHVzZV9lcnJubz1UcnVlKQorICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLl9vcGVuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaWJjX29wZW4gPSBsaWJjLm9wZW4KIAotICAgICAgICAgICAgbGliY19vcGVuLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfaW50CisgICAgICAgIGxpYmNfb3Blbi5hcmd0eXBlcyA9IGNfY2hhcl9wLCBjX2ludAogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYmNfb3BlbigiIiwgMCksIC0xKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgZXJybm8uRU5PRU5UKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYmNfb3BlbihiIiIsIDApLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgZXJybm8uRU5PRU5UKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9lcnJubygzMiksIGVycm5vLkVOT0VOVCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2Vycm5vKCksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldF9lcnJubygzMiksIGVycm5vLkVOT0VOVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMzIpCiAKLQorICAgICAgICBpZiB0aHJlYWRpbmc6CiAgICAgICAgICAgICBkZWYgX3dvcmtlcigpOgogICAgICAgICAgICAgICAgIHNldF9lcnJubygwKQogCkBAIC0zMSw3ICszNSw3IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbGliY19vcGVuID0gbGliYy5vcGVuCiAgICAgICAgICAgICAgICAgbGliY19vcGVuLmFyZ3R5cGVzID0gY19jaGFyX3AsIGNfaW50Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaWJjX29wZW4oIiIsIDApLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpYmNfb3BlbihiIiIsIDApLCAtMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJubygpLCAwKQogCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X3dvcmtlcikKQEAgLTQxLDM2ICs0NSwzNSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfZXJybm8oKSwgMzIpCiAgICAgICAgICAgICBzZXRfZXJybm8oMCkKIAotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICdUZXN0IHNwZWNpZmljIHRvIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X0dldExhc3RFcnJvcihzZWxmKToKKyAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPVRydWUpCisgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVBCisgICAgICAgIEdldE1vZHVsZUhhbmRsZS5hcmd0eXBlcyA9IFtjX3djaGFyX3BdCiAKLSAgICAgICAgZGVmIHRlc3RfR2V0TGFzdEVycm9yKHNlbGYpOgotICAgICAgICAgICAgZGxsID0gV2luRExMKCJrZXJuZWwzMiIsIHVzZV9sYXN0X2Vycm9yPVRydWUpCi0gICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUgPSBkbGwuR2V0TW9kdWxlSGFuZGxlQQotICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlLmFyZ3R5cGVzID0gW2Nfd2NoYXJfcF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBHZXRNb2R1bGVIYW5kbGUoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDEyNikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBHZXRNb2R1bGVIYW5kbGUoImZvbyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfbGFzdF9lcnJvcigpLCAxMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2xhc3RfZXJyb3IoMzIpLCAxMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMzIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0X2xhc3RfZXJyb3IoMzIpLCAxMjYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDMyKQotCi0gICAgICAgICAgICBkZWYgX3dvcmtlcigpOgotICAgICAgICAgICAgICAgIHNldF9sYXN0X2Vycm9yKDApCi0KLSAgICAgICAgICAgICAgICBkbGwgPSBXaW5ETEwoImtlcm5lbDMyIiwgdXNlX2xhc3RfZXJyb3I9RmFsc2UpCi0gICAgICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlID0gZGxsLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUuYXJndHlwZXMgPSBbY193Y2hhcl9wXQotICAgICAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSgiYmFyIikKLQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMCkKLQotICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV93b3JrZXIpCi0gICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHQuam9pbigpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMzIpCi0KKyAgICAgICAgZGVmIF93b3JrZXIoKToKICAgICAgICAgICAgIHNldF9sYXN0X2Vycm9yKDApCiAKKyAgICAgICAgICAgIGRsbCA9IFdpbkRMTCgia2VybmVsMzIiLCB1c2VfbGFzdF9lcnJvcj1GYWxzZSkKKyAgICAgICAgICAgIEdldE1vZHVsZUhhbmRsZSA9IGRsbC5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICBHZXRNb2R1bGVIYW5kbGUuYXJndHlwZXMgPSBbY193Y2hhcl9wXQorICAgICAgICAgICAgR2V0TW9kdWxlSGFuZGxlKCJiYXIiKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9sYXN0X2Vycm9yKCksIDApCisKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV93b3JrZXIpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LmpvaW4oKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X2xhc3RfZXJyb3IoKSwgMzIpCisKKyAgICAgICAgc2V0X2xhc3RfZXJyb3IoMCkKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQppbmRleCAwM2Q4MjBlLi5jYmYyZTA1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CkBAIC0yMywxNiArMjMsMTYgQEAKIAogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CiAgICAgICAgIGkgPSA0MjAwMDEyMwotICAgICAgICByYyA9IGdyYyhpKQorICAgICAgICByZWZjbnQgPSBncmMoaSkKICAgICAgICAgY2kgPSBjX2ludChpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCBncmMoaSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVmY250LCBncmMoaSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2kuX29iamVjdHMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9jX2NoYXJfcChzZWxmKToKICAgICAgICAgcyA9IGIiSGVsbG8sIFdvcmxkIgotICAgICAgICByYyA9IGdyYyhzKQorICAgICAgICByZWZjbnQgPSBncmMocykKICAgICAgICAgY3MgPSBjX2NoYXJfcChzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjICsgMSwgZ3JjKHMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlZmNudCArIDEsIGdyYyhzKSkKICAgICAgICAgc2VsZi5hc3NlcnRTYW1lKGNzLl9vYmplY3RzLCBzKQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX3N0cnVjdChzZWxmKToKQEAgLTcwLDE5ICs3MCwxNyBAQAogICAgICAgICBjbGFzcyBZKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBYKSwgKCJ5IiwgWCldCiAKLSAgICAgICAgczEgPSAiSGVsbG8sIFdvcmxkIgotICAgICAgICBzMiA9ICJIYWxsbywgV2VsdCIKKyAgICAgICAgczEgPSBiIkhlbGxvLCBXb3JsZCIKKyAgICAgICAgczIgPSBiIkhhbGxvLCBXZWx0IgogCiAgICAgICAgIHggPSBYKCkKICAgICAgICAgeC5hID0gczEKICAgICAgICAgeC5iID0gczIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7IjAiOiBieXRlcyhzMSwgImFzY2lpIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSI6IGJ5dGVzKHMyLCAiYXNjaWkiKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgeyIwIjogczEsICIxIjogczJ9KQogCiAgICAgICAgIHkgPSBZKCkKICAgICAgICAgeS54ID0geAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuX29iamVjdHMsIHsiMCI6IHsiMCI6IGJ5dGVzKHMxLCAiYXNjaWkiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIjogYnl0ZXMoczIsICJhc2NpaSIpfX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fb2JqZWN0cywgeyIwIjogeyIwIjogczEsICIxIjogczJ9fSkKICMjICAgICAgICB4ID0geS54CiAjIyAgICAgICAgZGVsIHkKICMjICAgICAgICBwcmludCB4Ll9iX2Jhc2VfLl9vYmplY3RzCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9rZWVwcmVmcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CmluZGV4IGZhZmVmNjUuLmRiOGFkZmIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5CkBAIC0xMyw5ICsxMyw5IEBACiAgICAgZGVmIHRlc3RfY2NoYXJwKHNlbGYpOgogICAgICAgICB4ID0gY19jaGFyX3AoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIE5vbmUpCi0gICAgICAgIHgudmFsdWUgPSAiYWJjIgorICAgICAgICB4LnZhbHVlID0gYiJhYmMiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgYiJhYmMiKQotICAgICAgICB4ID0gY19jaGFyX3AoInNwYW0iKQorICAgICAgICB4ID0gY19jaGFyX3AoYiJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBiInNwYW0iKQogCiBjbGFzcyBTdHJ1Y3R1cmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNyw4ICszNyw4IEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCBOb25lKQogCi0gICAgICAgIHguYSA9ICJzcGFtIgotICAgICAgICB4LmIgPSAiZm9vIgorICAgICAgICB4LmEgPSBiInNwYW0iCisgICAgICAgIHguYiA9IGIiZm9vIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX29iamVjdHMsIHsiMCI6IGIic3BhbSIsICIxIjogYiJmb28ifSkKIAogICAgIGRlZiB0ZXN0X3N0cnVjdF9zdHJ1Y3Qoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbGliYy5weQppbmRleCBjY2U0MDlmLi41NjI4NWI1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9saWJjLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xpYmMucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgZGVmIHNvcnQoYSwgYik6CiAgICAgICAgICAgICByZXR1cm4gdGhyZWVfd2F5X2NtcChhWzBdLCBiWzBdKQogCi0gICAgICAgIGNoYXJzID0gY3JlYXRlX3N0cmluZ19idWZmZXIoInNwYW0sIHNwYW0sIGFuZCBzcGFtIikKKyAgICAgICAgY2hhcnMgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcihiInNwYW0sIHNwYW0sIGFuZCBzcGFtIikKICAgICAgICAgbGliLm15X3Fzb3J0KGNoYXJzLCBsZW4oY2hhcnMpLTEsIHNpemVvZihjX2NoYXIpLCBjb21wYXJlZnVuYyhzb3J0KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjaGFycy5yYXcsIGIiICAgLCxhYWFhZG1tbW5wcHBzc3NceDAwIikKIApkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKaW5kZXggMDdiNjllYy4uNDAyOWI0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CkBAIC05Nyw3ICs5Nyw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCiAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MuYXJndHlwZXMgPSBjX3ZvaWRfcCwgY19jaGFyX3AKICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKLSAgICAgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwgIkNsb3NlRXZlbnRMb2ciKQorICAgICAgICAgICAgcHJvYyA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhhZHZhcGkzMi5faGFuZGxlLCBiIkNsb3NlRXZlbnRMb2ciKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCiAgICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X29iamVjdHMucHkKaW5kZXggNzUwZDkwNC4uZjA3NWMyMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9vYmplY3RzLnB5CkBAIC0yMCw3ICsyMCw3IEBACiBUaGUgbWVtb3J5IGJsb2NrIHN0b3JlcyBwb2ludGVycyB0byBzdHJpbmdzLCBhbmQgdGhlIHN0cmluZ3MgaXRzZWxmCiBhc3NpZ25lZCBmcm9tIFB5dGhvbiBtdXN0IGJlIGtlcHQuCiAKLT4+PiBhcnJheVs0XSA9ICdmb28gYmFyJworPj4+IGFycmF5WzRdID0gYidmb28gYmFyJwogPj4+IGFycmF5Ll9vYmplY3RzCiB7JzQnOiBiJ2ZvbyBiYXInfQogPj4+IGFycmF5WzRdCkBAIC00NSw3ICs0NSw3IEBACiA8Y3R5cGVzLnRlc3QudGVzdF9vYmplY3RzLlggb2JqZWN0IGF0IDB4Li4uPgogPj4+CiAKLT4+PiB4LmFycmF5WzBdID0gJ3NwYW0gc3BhbSBzcGFtJworPj4+IHguYXJyYXlbMF0gPSBiJ3NwYW0gc3BhbSBzcGFtJwogPj4+IHguX29iamVjdHMKIHsnMDoyJzogYidzcGFtIHNwYW0gc3BhbSd9CiA+Pj4geC5hcnJheS5fYl9iYXNlXy5fb2JqZWN0cwpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKaW5kZXggNmEzZjMzZC4uZTgzZmQ5YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CkBAIC0xOSw3ICsxOSw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZXRfY29udmVyc2lvbl9tb2RlKCpzZWxmLnByZXZfY29udl9tb2RlKQogCi0KICAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY192b2lkX3AsIGNfY2hhcl9wCiAgICAgICAgICMgY3R5cGVzIDAuOS41IGFuZCBiZWZvcmUgZGlkIG92ZXJ3cml0ZSBmcm9tX3BhcmFtIGluIFNpbXBsZVR5cGVfbmV3CkBAIC01OCwxNCArNTcsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNfY2hhcl9wLmZyb21fcGFyYW0ocykuX29iaiBpcyBzKQogCiAgICAgICAgICMgbmV3IGluIDAuOS4xOiBjb252ZXJ0IChlbmNvZGUpIHVuaWNvZGUgdG8gYXNjaWkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKS5fb2JqLCBiIjEyMyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgY19jaGFyX3AuZnJvbV9wYXJhbSwgIjEyM1wzNzciKQotCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19jaGFyX3AuZnJvbV9wYXJhbShiIjEyMyIpLl9vYmosIGIiMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX2NoYXJfcC5mcm9tX3BhcmFtLCAiMTIzXDM3NyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19jaGFyX3AuZnJvbV9wYXJhbSwgNDIpCiAKICAgICAgICAgIyBjYWxsaW5nIGNfY2hhcl9wLmZyb21fcGFyYW0gd2l0aCBhIGNfY2hhcl9wIGluc3RhbmNlCiAgICAgICAgICMgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmOgotICAgICAgICBhID0gY19jaGFyX3AoIjEyMyIpCisgICAgICAgIGEgPSBjX2NoYXJfcChiIjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjX2NoYXJfcC5mcm9tX3BhcmFtKGEpIGlzIGEpCiAKICAgICBkZWYgdGVzdF9jd19zdHJpbmdzKHNlbGYpOgpAQCAtODIsNyArODAsNyBAQAogCiAgICAgICAgICAgICAjIG5ldyBpbiAwLjkuMTogY29udmVydCAoZGVjb2RlKSBhc2NpaSB0byB1bmljb2RlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKS5fb2JqLCAiMTIzIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgYiIxMjNcMzc3IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AuZnJvbV9wYXJhbSwgYiIxMjNcMzc3IikKIAogICAgICAgICBwYSA9IGNfd2NoYXJfcC5mcm9tX3BhcmFtKGNfd2NoYXJfcCgiMTIzIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwYSksIGNfd2NoYXJfcCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CmluZGV4IGQyZTRjMGIuLjZlZjFiMWIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQpAQCAtMTI3LDcgKzEyNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX2NoYXJfcChOb25lKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIjEyMyIsIGZ1bmMoY19idWZmZXIoYiIxMjMiKSkpCi0gICAgICAgIGNhID0gY19jaGFyKCJhIikKKyAgICAgICAgY2EgPSBjX2NoYXIoYiJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoYiJhIiksIGZ1bmMocG9pbnRlcihjYSkpWzBdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yZChiImEiKSwgZnVuYyhieXJlZihjYSkpWzBdKQogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQppbmRleCBiNzQ3NjdhLi4xZjRjNjAzIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKQEAgLTcyLDEwICs3MiwxMCBAQAogICAgICAgICBQeU9TX3NucHJpbnRmLmFyZ3R5cGVzID0gUE9JTlRFUihjX2NoYXIpLCBjX3NpemVfdCwgY19jaGFyX3AKIAogICAgICAgICBidWYgPSBjX2J1ZmZlcigyNTYpCi0gICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkhlbGxvIGZyb20gJXMiLCBiImN0eXBlcyIpCisgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgYiJIZWxsbyBmcm9tICVzIiwgYiJjdHlwZXMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgYiJIZWxsbyBmcm9tIGN0eXBlcyIpCiAKLSAgICAgICAgUHlPU19zbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiSGVsbG8gZnJvbSAlcyAoJWQsICVkLCAlZCkiLCBiImN0eXBlcyIsIDEsIDIsIDMpCisgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgYiJIZWxsbyBmcm9tICVzICglZCwgJWQsICVkKSIsIGIiY3R5cGVzIiwgMSwgMiwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGIiSGVsbG8gZnJvbSBjdHlwZXMgKDEsIDIsIDMpIikKIAogICAgICAgICAjIG5vdCBlbm91Z2ggYXJndW1lbnRzCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQppbmRleCA3YmI5ZGI4Li41MTVhY2Y1IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKQEAgLTE4LDcgKzE4LDcgQEAKICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKIAogICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoYiJrZXJuZWwzMiIpCi0gICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCAiR2V0TW9kdWxlSGFuZGxlQSIpCisgICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCBiIkdldE1vZHVsZUhhbmRsZUEiKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpCkBAIC02Niw3ICs2Niw3IEBACiAKICAgICBkZWYgdGVzdF9UeXBlRXJyb3JEaXZpc2lvbkVycm9yKHNlbGYpOgogICAgICAgICBjYiA9IENGVU5DVFlQRShjX2ludCwgY19jaGFyX3ApKGNhbGxiYWNrX2Z1bmMpCi0gICAgICAgIG91dCA9IHNlbGYuY2FwdHVyZV9zdGRlcnIoY2IsICJzcGFtIikKKyAgICAgICAgb3V0ID0gc2VsZi5jYXB0dXJlX3N0ZGVycihjYiwgYiJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3BsaXRsaW5lcygpWy0xXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGVFcnJvcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlKHMpIGZvciAvOiAnaW50JyBhbmQgJ2J5dGVzJyIpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmVwci5weQppbmRleCA5YTFlMjM4Li42MGEyYzgwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXByLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JlcHIucHkKQEAgLTIyLDggKzIyLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxYIG9iamVjdCBhdCIsIHJlcHIodHlwKDQyKSlbOjEyXSkKIAogICAgIGRlZiB0ZXN0X2NoYXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImNfY2hhcihiJ3gnKSIsIHJlcHIoY19jaGFyKCd4JykpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8WCBvYmplY3QgYXQiLCByZXByKFgoJ3gnKSlbOjEyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiY19jaGFyKGIneCcpIiwgcmVwcihjX2NoYXIoYid4JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8WCBvYmplY3QgYXQiLCByZXByKFgoYid4JykpWzoxMl0pCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yZXR1cm5mdW5jcHRycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JldHVybmZ1bmNwdHJzLnB5CmluZGV4IDExZGEwN2IuLmFmMWNhZGQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JldHVybmZ1bmNwdHJzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JldHVybmZ1bmNwdHJzLnB5CkBAIC0yOCwxMCArMjgsMTAgQEAKICAgICAgICAgIyBfQ0Z1bmNQdHIgaW5zdGFuY2VzIGFyZSBub3cgY2FsbGFibGUgd2l0aCBhbiBpbnRlZ2VyIGFyZ3VtZW50CiAgICAgICAgICMgd2hpY2ggZGVub3RlcyBhIGZ1bmN0aW9uIGFkZHJlc3M6CiAgICAgICAgIHN0cmNociA9IENGVU5DVFlQRShjX2NoYXJfcCwgY19jaGFyX3AsIGNfY2hhcikoYWRkcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmNocigiYWJjZGVmIiwgImIiKSwgImJjZGVmIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJjaHIoImFiY2RlZiIsICJ4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgImFiY2RlZiIsIDMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdHJjaHIsICJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyY2hyKGIiYWJjZGVmIiwgYiJiIiksICJiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyY2hyKGIiYWJjZGVmIiwgYiJ4IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50RXJyb3IsIHN0cmNociwgYiJhYmNkZWYiLCAzLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3RyY2hyLCBiImFiY2RlZiIpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zaXplcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CmluZGV4IDA1MDljYmIuLmY5YjVlOTcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NpemVzLnB5CkBAIC0xLDggKzEsMTEgQEAKICMgVGVzdCBzcGVjaWZpY2FsbHktc2l6ZWQgY29udGFpbmVycy4KIAotaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgogCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCiBjbGFzcyBTaXplc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF84KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNpemVvZihjX2ludDgpKQpAQCAtMjMsNSArMjYsOSBAQAogICAgIGRlZiB0ZXN0X3NpemVfdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoY192b2lkX3ApLCBzaXplb2YoY19zaXplX3QpKQogCisgICAgZGVmIHRlc3Rfc3NpemVfdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoY192b2lkX3ApLCBzaXplb2YoY19zc2l6ZV90KSkKKworCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncHRyLnB5CmluZGV4IDhiMTZkY2IuLjNkMjVmYTUgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3B0ci5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdwdHIucHkKQEAgLTE0LDcgKzE0LDcgQEAKIAogICAgICAgICAjIE5VTEwgcG9pbnRlciBhY2Nlc3MKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0YXR0ciwgeC5zdHIsICJjb250ZW50cyIpCi0gICAgICAgIGIgPSBjX2J1ZmZlcigiSGVsbG8sIFdvcmxkIikKKyAgICAgICAgYiA9IGNfYnVmZmVyKGIiSGVsbG8sIFdvcmxkIikKICAgICAgICAgZnJvbSBzeXMgaW1wb3J0IGdldHJlZmNvdW50IGFzIGdyYwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhiKSwgMikKICAgICAgICAgeC5zdHIgPSBiCkBAIC02Myw4ICs2Myw4IEBACiAgICAgICAgICMgU28gd2UgbXVzdCBrZWVwIGEgcmVmZXJlbmNlIHRvIGJ1ZiBzZXBhcmF0ZWx5CiAKICAgICAgICAgc3RyY2hyLnJlc3R5cGUgPSBQT0lOVEVSKGNfY2hhcikKLSAgICAgICAgYnVmID0gY19idWZmZXIoImFiY2RlZiIpCi0gICAgICAgIHIgPSBzdHJjaHIoYnVmLCAiYyIpCisgICAgICAgIGJ1ZiA9IGNfYnVmZmVyKGIiYWJjZGVmIikKKyAgICAgICAgciA9IHN0cmNocihidWYsIGIiYyIpCiAgICAgICAgIHggPSByWzBdLCByWzFdLCByWzJdLCByWzNdLCByWzRdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgKGIiYyIsIGIiZCIsIGIiZSIsIGIiZiIsIGIiXDAwMCIpKQogICAgICAgICBkZWwgYnVmCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQppbmRleCAzY2QxZjg0Li4xYTliZGJjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKQEAgLTUsMjMgKzUsMjMgQEAKICAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAgQlVGID0gY19jaGFyICogNAogCi0gICAgICAgIGJ1ZiA9IEJVRigiYSIsICJiIiwgImMiKQorICAgICAgICBidWYgPSBCVUYoYiJhIiwgYiJiIiwgYiJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGIiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYucmF3LCBiImFiY1wwMDAiKQogCi0gICAgICAgIGJ1Zi52YWx1ZSA9ICJBQkNEIgorICAgICAgICBidWYudmFsdWUgPSBiIkFCQ0QiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCBiIkFCQ0QiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi5yYXcsIGIiQUJDRCIpCiAKLSAgICAgICAgYnVmLnZhbHVlID0gIngiCisgICAgICAgIGJ1Zi52YWx1ZSA9IGIieCIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGIieCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnJhdywgYiJ4XDAwMENEIikKIAotICAgICAgICBidWZbMV0gPSAiWiIKKyAgICAgICAgYnVmWzFdID0gYiJaIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgYiJ4WkNEIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYucmF3LCBiInhaQ0QiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGJ1ZiwgInZhbHVlIiwgImFhYWFhYWFhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgYnVmLCAidmFsdWUiLCBiImFhYWFhYWFhIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZXRhdHRyLCBidWYsICJ2YWx1ZSIsIDQyKQogCiAgICAgZGVmIHRlc3RfY19idWZmZXJfdmFsdWUoc2VsZik6CkBAIC03NCw2ICs3NCwxMyBAQAogICAgICAgICAgICAgYnVmWzFdID0gIloiCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQogCisgICAgICAgIEB1bml0dGVzdC5za2lwSWYoc2l6ZW9mKGNfd2NoYXIpIDwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZW9mKHdjaGFyX3QpIGlzIHNtYWxsZXIgdGhhbiA0IGJ5dGVzIikKKyAgICAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgorICAgICAgICAgICAgdSA9IGNocigweDEwZmZmZikKKyAgICAgICAgICAgIHcgPSBjX3djaGFyKHUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcudmFsdWUsIHUpCisKIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgWFhfdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgogICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggYzU4ZDk0OS4uNTM2ZWE1MCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0yMDUsMTUgKzIwNSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQZXJzb24sIDQyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb24sICJhc2xka2phc2xrZGphc2xrZGoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQZXJzb24sIGIiYXNsZGtqYXNsa2RqYXNsa2RqIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQZXJzb24sICJOYW1lIiwgIkhJIikKIAogICAgICAgICAjIHNob3J0IGVub3VnaAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvbigiMTIzNDUiLCA1KS5uYW1lLCAiMTIzNDUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvbihiIjEyMzQ1IiwgNSkubmFtZSwgYiIxMjM0NSIpCiAgICAgICAgICMgZXhhY3QgZml0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUGVyc29uKCIxMjM0NTYiLCA1KS5uYW1lLCAiMTIzNDU2IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb24oYiIxMjM0NTYiLCA1KS5uYW1lLCBiIjEyMzQ1NiIpCiAgICAgICAgICMgdG9vIGxvbmcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUGVyc29uLCAiMTIzNDU2NyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFBlcnNvbiwgYiIxMjM0NTY3IiwgNSkKIAogICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX2luaXRpYWxpemVycyhzZWxmKToKICAgICAgICAgY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKQEAgLTI2NywxMSArMjY3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoInBob25lIiwgUGhvbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCiAKLSAgICAgICAgcCA9IFBlcnNvbigiU29tZW9uZSIsICgiMTIzNCIsICI1Njc4IiksIDUpCisgICAgICAgIHAgPSBQZXJzb24oYiJTb21lb25lIiwgKGIiMTIzNCIsIGIiNTY3OCIpLCA1KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uYW1lLCAiU29tZW9uZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5hcmVhY29kZSwgIjEyMzQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGhvbmUubnVtYmVyLCAiNTY3OCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uYW1lLCBiIlNvbWVvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGhvbmUuYXJlYWNvZGUsIGIiMTIzNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5udW1iZXIsIGIiNTY3OCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZ2UsIDUpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3R1cmVzX3dpdGhfd2NoYXIoc2VsZik6CkBAIC0yODQsOCArMjg0LDggQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfd2NoYXIgKiAxMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImFnZSIsIGNfaW50KV0KIAotICAgICAgICBwID0gUGVyc29uVygiU29tZW9uZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uYW1lLCAiU29tZW9uZSIpCisgICAgICAgIHAgPSBQZXJzb25XKCJTb21lb25lIFx4ZTkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmFtZSwgIlNvbWVvbmUgXHhlOSIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQZXJzb25XKCIxMjM0NTY3ODkwIikubmFtZSwgIjEyMzQ1Njc4OTAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBlcnNvblcoIjEyMzQ1Njc4OTAxIikubmFtZSwgIjEyMzQ1Njc4OTAxIikKQEAgLTMwNCwxMyArMzA0LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAoInBob25lIiwgUGhvbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgKCJhZ2UiLCBjX2ludCldCiAKLSAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCAiU29tZW9uZSIsICgxLCAyKSkKKyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCBiIlNvbWVvbmUiLCAoMSwgMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFBob25lKSA8Y2xhc3MgJ1R5cGVFcnJvcic+OiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzdHJpbmcsIGludCBmb3VuZCIpCiAKLSAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCAiU29tZW9uZSIsICgiYSIsICJiIiwgImMiKSkKKyAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCBiIlNvbWVvbmUiLCAoYiJhIiwgYiJiIiwgYiJjIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCiAgICAgICAgIGlmIGlzc3ViY2xhc3MoRXhjZXB0aW9uLCBvYmplY3QpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCBiNGQzZGYzLi5jM2IyZDQ4IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTcsMTIyICs3LDUzIEBACiAgICAgcGFzcwogZWxzZToKICAgICBpbXBvcnQgX2N0eXBlc190ZXN0Ci0gICAgZGxsID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgIHdjc2xlbiA9IGRsbC5teV93Y3NsZW4KLSAgICB3Y3NsZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfd2NoYXJfcF0KLQogCiAgICAgY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5wcmV2X2NvbnZfbW9kZSA9IGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQorICAgICAgICBkZWYgdGVzdF93Y3NsZW4oc2VsZik6CisgICAgICAgICAgICBkbGwgPSBjdHlwZXMuQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgICAgICB3Y3NsZW4gPSBkbGwubXlfd2NzbGVuCisgICAgICAgICAgICB3Y3NsZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfd2NoYXJfcF0KIAotICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgqc2VsZi5wcmV2X2NvbnZfbW9kZSkKLQotICAgICAgICBkZWYgdGVzdF9hc2NpaV9zdHJpY3Qoc2VsZik6Ci0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAic3RyaWN0IikKLSAgICAgICAgICAgICMgbm8gY29udmVyc2lvbnMgdGFrZSBwbGFjZSB3aXRoIHVuaWNvZGUgYXJndW1lbnRzCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJcdTIwNzAiKSwgMykKLSAgICAgICAgICAgICMgc3RyaW5nIGFyZ3MgYXJlIGNvbnZlcnRlZAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIHdjc2xlbiwgYiJhYlx4ZTQiKQogCi0gICAgICAgIGRlZiB0ZXN0X2FzY2lpX3JlcGxhY2Uoc2VsZik6Ci0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAicmVwbGFjZSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJcdTIwNzAiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYlx4ZTQiKSwgMykKLQotICAgICAgICBkZWYgdGVzdF9hc2NpaV9pZ25vcmUoc2VsZik6Ci0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYlx1MjA3MCIpLCAzKQotICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3IgbW9kZSBza2lwcyBub24tYXNjaWkgY2hhcmFjdGVycwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oYiJceGU0XHhmNlx4ZmNceGRmIiksIDApCi0KLSAgICAgICAgZGVmIHRlc3RfbGF0aW4xX3N0cmljdChzZWxmKToKLSAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJsYXRpbi0xIiwgInN0cmljdCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJjIiksIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjc2xlbigiYWJcdTIwNzAiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJceGU0XHhmNlx4ZmNceGRmIiksIDQpCi0KICAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKLSAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQogICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKIAotICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcihiImFiXHhlNFx4ZjZceGZjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJcdUZGRkRcdUZGRkRcdUZGRkRcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlx1RkZGRFx1RkZGRFx1RkZGRFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAiXDBcdUZGRkRcdUZGRkRcdUZGRkRiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCAiYVx1RkZGRFx1RkZGRCIpCisgICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYlx4ZTRceGY2XHhmYyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgImFiXHhlNFx4ZjZceGZjXDAiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgJ1x4MDBceGZjXHhmNlx4ZTRiYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCAnYVx4ZTRceGZjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sICIiKQogCi0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoYiJhYlx4ZTRceGY2XHhmYyIpCi0gICAgICAgICAgICAjIGlzIHRoYXQgY29ycmVjdD8gbm90IHN1cmUuICBCdXQgd2l0aCAnaWdub3JlJywgeW91IGdldCB3aGF0IHlvdSBwYXkgZm9yLi4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJcMFwwXDBcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAiXDBcMFwwXDBiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCAiYVwwXDAiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgIiIpCi0KLSAgICBpbXBvcnQgX2N0eXBlc190ZXN0CiAgICAgZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAogCiAgICAgY2xhc3MgU3RyaW5nVGVzdENhc2UoVW5pY29kZVRlc3RDYXNlKToKICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5wcmV2X2NvbnZfbW9kZSA9IGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQogICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFtjdHlwZXMuY19jaGFyX3BdCiAgICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKIAogICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgqc2VsZi5wcmV2X2NvbnZfbW9kZSkKICAgICAgICAgICAgIGZ1bmMuYXJndHlwZXMgPSBOb25lCiAgICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKIAotICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgotICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInN0cmljdCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoImFiYyIpLCAiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygiYWJjIiksICJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3R5cGVzLkFyZ3VtZW50RXJyb3IsIGZ1bmMsICJhYlx4ZTQiKQotCi0gICAgICAgIGRlZiB0ZXN0X2FzY2lpX2lnbm9yZShzZWxmKToKLSAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJpZ25vcmUiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgYiJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgYiJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJceGU0XHhmNlx4ZmNceGRmIiksIGIiIikKLQotICAgICAgICBkZWYgdGVzdF9hc2NpaV9yZXBsYWNlKHNlbGYpOgotICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgYiJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJhYmMiKSwgYiJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJceGU0XHhmNlx4ZmNceGRmIiksIGIiPz8/PyIpCisgICAgICAgIGRlZiB0ZXN0X2Z1bmMoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJhYmNceGU0IiksIGIiYWJjXHhlNCIpCiAKICAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKLSAgICAgICAgICAgIGN0eXBlcy5zZXRfY29udmVyc2lvbl9tb2RlKCJhc2NpaSIsICJzdHJpY3QiKQotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJhYmMiKQorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKIAotICAgICAgICAgICAgY3R5cGVzLnNldF9jb252ZXJzaW9uX21vZGUoImFzY2lpIiwgInJlcGxhY2UiKQotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKCJhYlx4ZTRceGY2XHhmYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgYiJhYj8/P1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYj8/P1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCBiIlwwPz8/YmEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgYiJhPz8iKQorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGIiYWJceGU0XHhmNlx4ZmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Oi0xXSwgYidceDAwXHhmY1x4ZjZceGU0YmEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgYidhXHhlNFx4ZmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgYiIiKQogCi0gICAgICAgICAgICBjdHlwZXMuc2V0X2NvbnZlcnNpb25fbW9kZSgiYXNjaWkiLCAiaWdub3JlIikKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigiYWJceGU0XHhmNlx4ZmMiKQotICAgICAgICAgICAgIyBpcyB0aGF0IGNvcnJlY3Q/IG5vdCBzdXJlLiAgQnV0IHdpdGggJ2lnbm9yZScsIHlvdSBnZXQgd2hhdCB5b3UgcGF5IGZvci4uCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgYiJhYlwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYlwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCBiIlwwXDBcMFwwYmEiKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy91dGlsLnB5IGIvTGliL2N0eXBlcy91dGlsLnB5CmluZGV4IDUyYmMyOTYuLjE4ODFlODkgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdXRpbC5weQorKysgYi9MaWIvY3R5cGVzL3V0aWwucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgc3lzLCBvcworaW1wb3J0IGNvbnRleHRsaWIKIAogIyBmaW5kX2xpYnJhcnkobmFtZSkgcmV0dXJucyB0aGUgcGF0aG5hbWUgb2YgYSBsaWJyYXJ5LCBvciBOb25lLgogaWYgb3MubmFtZSA9PSAibnQiOgpAQCAtMTE3LDExICsxMTgsOCBAQAogICAgICAgICAgICAgaWYgbm90IGY6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGNtZCA9ICIvdXNyL2Njcy9iaW4vZHVtcCAtTHB2IDI+L2Rldi9udWxsICIgKyBmCi0gICAgICAgICAgICBmID0gb3MucG9wZW4oY21kKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByZXMgPSByZS5zZWFyY2gocidcWy4qXF1cc1NPTkFNRVxzKyhbXlxzXSspJywgZGF0YSkKICAgICAgICAgICAgIGlmIG5vdCByZXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTEzOCwxMSArMTM2LDggQEAKICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJykKLSAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhvcy5wb3BlbihjbWQpKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtMTY2LDExICsxNjEsOCBAQAogICAgICAgICBkZWYgZmluZF9saWJyYXJ5KG5hbWUpOgogICAgICAgICAgICAgZW5hbWUgPSByZS5lc2NhcGUobmFtZSkKICAgICAgICAgICAgIGV4cHIgPSByJzotbCVzXC5cUysgPT4gXFMqLyhsaWIlc1wuXFMrKScgJSAoZW5hbWUsIGVuYW1lKQotICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtciAyPi9kZXYvbnVsbCcpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNvbnRleHRsaWIuY2xvc2luZyhvcy5wb3BlbignL3NiaW4vbGRjb25maWcgLXIgMj4vZGV2L251bGwnKSkgYXMgZjoKICAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICByZXMgPSByZS5maW5kYWxsKGV4cHIsIGRhdGEpCiAgICAgICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0X3NvbmFtZShfZmluZExpYl9nY2MobmFtZSkpCkBAIC0xODIsMjAgKzE3NCwxNCBAQAogICAgICAgICBkZWYgX2ZpbmRMaWJfbGRjb25maWcobmFtZSk6CiAgICAgICAgICAgICAjIFhYWCBhc3N1bWluZyBHTElCQydzIGxkY29uZmlnICh3aXRoIG9wdGlvbiAtcCkKICAgICAgICAgICAgIGV4cHIgPSByJy9bXlwoXClcc10qbGliJXNcLlteXChcKVxzXSonICUgcmUuZXNjYXBlKG5hbWUpCi0gICAgICAgICAgICBmID0gb3MucG9wZW4oJy9zYmluL2xkY29uZmlnIC1wIDI+L2Rldi9udWxsJykKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY29udGV4dGxpYi5jbG9zaW5nKG9zLnBvcGVuKCcvc2Jpbi9sZGNvbmZpZyAtcCAyPi9kZXYvbnVsbCcpKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICAjIEhtLCB0aGlzIHdvcmtzIG9ubHkgZm9yIGxpYnMgbmVlZGVkIGJ5IHRoZSBweXRob24gZXhlY3V0YWJsZS4KICAgICAgICAgICAgICAgICBjbWQgPSAnbGRkICVzIDI+L2Rldi9udWxsJyAlIHN5cy5leGVjdXRhYmxlCi0gICAgICAgICAgICAgICAgZiA9IG9zLnBvcGVuKGNtZCkKLSAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmVzID0gcmUuc2VhcmNoKGV4cHIsIGRhdGEpCiAgICAgICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTIxOSwxMSArMjA1LDggQEAKICAgICAgICAgICAgICMgWFhYIGFzc3VtaW5nIEdMSUJDJ3MgbGRjb25maWcgKHdpdGggb3B0aW9uIC1wKQogICAgICAgICAgICAgZXhwciA9IHInKFxTKylccytcKCglcyg/OiwgT1MgQUJJOlteXCldKik/KVwpW14vXSooL1teXChcKVxzXSpsaWIlc1wuW15cKFwpXHNdKiknIFwKICAgICAgICAgICAgICAgICAgICAlIChhYmlfdHlwZSwgcmUuZXNjYXBlKG5hbWUpKQotICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCdMQ19BTEw9QyBMQU5HPUMgL3NiaW4vbGRjb25maWcgLXAgMj4vZGV2L251bGwnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oJ0xDX0FMTD1DIExBTkc9QyAvc2Jpbi9sZGNvbmZpZyAtcCAyPi9kZXYvbnVsbCcpKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChleHByLCBkYXRhKQogICAgICAgICAgICAgaWYgbm90IHJlczoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy93aW50eXBlcy5weSBiL0xpYi9jdHlwZXMvd2ludHlwZXMucHkKaW5kZXggZTdmNTY5Yy4uYzYxOWQyNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy93aW50eXBlcy5weQorKysgYi9MaWIvY3R5cGVzL3dpbnR5cGVzLnB5CkBAIC0xLDQ5ICsxLDUwIEBACiAjIFRoZSBtb3N0IHVzZWZ1bCB3aW5kb3dzIGRhdGF0eXBlcwotZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2ltcG9ydCBjdHlwZXMKIAotQllURSA9IGNfYnl0ZQotV09SRCA9IGNfdXNob3J0Ci1EV09SRCA9IGNfdWxvbmcKK0JZVEUgPSBjdHlwZXMuY19ieXRlCitXT1JEID0gY3R5cGVzLmNfdXNob3J0CitEV09SRCA9IGN0eXBlcy5jX3Vsb25nCiAKLVdDSEFSID0gY193Y2hhcgotVUlOVCA9IGNfdWludAotSU5UID0gY19pbnQKKyNVQ0hBUiA9IGN0eXBlcy5jX3VjaGFyCitDSEFSID0gY3R5cGVzLmNfY2hhcgorV0NIQVIgPSBjdHlwZXMuY193Y2hhcgorVUlOVCA9IGN0eXBlcy5jX3VpbnQKK0lOVCA9IGN0eXBlcy5jX2ludAogCi1ET1VCTEUgPSBjX2RvdWJsZQotRkxPQVQgPSBjX2Zsb2F0CitET1VCTEUgPSBjdHlwZXMuY19kb3VibGUKK0ZMT0FUID0gY3R5cGVzLmNfZmxvYXQKIAogQk9PTEVBTiA9IEJZVEUKLUJPT0wgPSBjX2xvbmcKK0JPT0wgPSBjdHlwZXMuY19sb25nCiAKLWZyb20gY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKLWNsYXNzIFZBUklBTlRfQk9PTChfU2ltcGxlQ0RhdGEpOgorY2xhc3MgVkFSSUFOVF9CT09MKGN0eXBlcy5fU2ltcGxlQ0RhdGEpOgogICAgIF90eXBlXyA9ICJ2IgogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICIlcyglcikiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnZhbHVlKQogCi1VTE9ORyA9IGNfdWxvbmcKLUxPTkcgPSBjX2xvbmcKK1VMT05HID0gY3R5cGVzLmNfdWxvbmcKK0xPTkcgPSBjdHlwZXMuY19sb25nCiAKLVVTSE9SVCA9IGNfdXNob3J0Ci1TSE9SVCA9IGNfc2hvcnQKK1VTSE9SVCA9IGN0eXBlcy5jX3VzaG9ydAorU0hPUlQgPSBjdHlwZXMuY19zaG9ydAogCiAjIGluIHRoZSB3aW5kb3dzIGhlYWRlciBmaWxlcywgdGhlc2UgYXJlIHN0cnVjdHVyZXMuCi1fTEFSR0VfSU5URUdFUiA9IExBUkdFX0lOVEVHRVIgPSBjX2xvbmdsb25nCi1fVUxBUkdFX0lOVEVHRVIgPSBVTEFSR0VfSU5URUdFUiA9IGNfdWxvbmdsb25nCitfTEFSR0VfSU5URUdFUiA9IExBUkdFX0lOVEVHRVIgPSBjdHlwZXMuY19sb25nbG9uZworX1VMQVJHRV9JTlRFR0VSID0gVUxBUkdFX0lOVEVHRVIgPSBjdHlwZXMuY191bG9uZ2xvbmcKIAotTFBDT0xFU1RSID0gTFBPTEVTVFIgPSBPTEVTVFIgPSBjX3djaGFyX3AKLUxQQ1dTVFIgPSBMUFdTVFIgPSBjX3djaGFyX3AKLUxQQ1NUUiA9IExQU1RSID0gY19jaGFyX3AKLUxQQ1ZPSUQgPSBMUFZPSUQgPSBjX3ZvaWRfcAorTFBDT0xFU1RSID0gTFBPTEVTVFIgPSBPTEVTVFIgPSBjdHlwZXMuY193Y2hhcl9wCitMUENXU1RSID0gTFBXU1RSID0gY3R5cGVzLmNfd2NoYXJfcAorTFBDU1RSID0gTFBTVFIgPSBjdHlwZXMuY19jaGFyX3AKK0xQQ1ZPSUQgPSBMUFZPSUQgPSBjdHlwZXMuY192b2lkX3AKIAogIyBXUEFSQU0gaXMgZGVmaW5lZCBhcyBVSU5UX1BUUiAodW5zaWduZWQgdHlwZSkKICMgTFBBUkFNIGlzIGRlZmluZWQgYXMgTE9OR19QVFIgKHNpZ25lZCB0eXBlKQotaWYgc2l6ZW9mKGNfbG9uZykgPT0gc2l6ZW9mKGNfdm9pZF9wKToKLSAgICBXUEFSQU0gPSBjX3Vsb25nCi0gICAgTFBBUkFNID0gY19sb25nCi1lbGlmIHNpemVvZihjX2xvbmdsb25nKSA9PSBzaXplb2YoY192b2lkX3ApOgotICAgIFdQQVJBTSA9IGNfdWxvbmdsb25nCi0gICAgTFBBUkFNID0gY19sb25nbG9uZworaWYgY3R5cGVzLnNpemVvZihjdHlwZXMuY19sb25nKSA9PSBjdHlwZXMuc2l6ZW9mKGN0eXBlcy5jX3ZvaWRfcCk6CisgICAgV1BBUkFNID0gY3R5cGVzLmNfdWxvbmcKKyAgICBMUEFSQU0gPSBjdHlwZXMuY19sb25nCitlbGlmIGN0eXBlcy5zaXplb2YoY3R5cGVzLmNfbG9uZ2xvbmcpID09IGN0eXBlcy5zaXplb2YoY3R5cGVzLmNfdm9pZF9wKToKKyAgICBXUEFSQU0gPSBjdHlwZXMuY191bG9uZ2xvbmcKKyAgICBMUEFSQU0gPSBjdHlwZXMuY19sb25nbG9uZwogCiBBVE9NID0gV09SRAogTEFOR0lEID0gV09SRApAQCAtNTYsNyArNTcsNyBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEhBTkRMRSB0eXBlcwotSEFORExFID0gY192b2lkX3AgIyBpbiB0aGUgaGVhZGVyIGZpbGVzOiB2b2lkICoKK0hBTkRMRSA9IGN0eXBlcy5jX3ZvaWRfcCAjIGluIHRoZSBoZWFkZXIgZmlsZXM6IHZvaWQgKgogCiBIQUNDRUwgPSBIQU5ETEUKIEhCSVRNQVAgPSBIQU5ETEUKQEAgLTkzLDQ1ICs5NCw0NSBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTb21lIGltcG9ydGFudCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKIAotY2xhc3MgUkVDVChTdHJ1Y3R1cmUpOgotICAgIF9maWVsZHNfID0gWygibGVmdCIsIGNfbG9uZyksCi0gICAgICAgICAgICAgICAgKCJ0b3AiLCBjX2xvbmcpLAotICAgICAgICAgICAgICAgICgicmlnaHQiLCBjX2xvbmcpLAotICAgICAgICAgICAgICAgICgiYm90dG9tIiwgY19sb25nKV0KK2NsYXNzIFJFQ1QoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJsZWZ0IiwgTE9ORyksCisgICAgICAgICAgICAgICAgKCJ0b3AiLCBMT05HKSwKKyAgICAgICAgICAgICAgICAoInJpZ2h0IiwgTE9ORyksCisgICAgICAgICAgICAgICAgKCJib3R0b20iLCBMT05HKV0KIHRhZ1JFQ1QgPSBfUkVDVEwgPSBSRUNUTCA9IFJFQ1QKIAotY2xhc3MgX1NNQUxMX1JFQ1QoU3RydWN0dXJlKToKLSAgICBfZmllbGRzXyA9IFsoJ0xlZnQnLCBjX3Nob3J0KSwKLSAgICAgICAgICAgICAgICAoJ1RvcCcsIGNfc2hvcnQpLAotICAgICAgICAgICAgICAgICgnUmlnaHQnLCBjX3Nob3J0KSwKLSAgICAgICAgICAgICAgICAoJ0JvdHRvbScsIGNfc2hvcnQpXQorY2xhc3MgX1NNQUxMX1JFQ1QoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCdMZWZ0JywgU0hPUlQpLAorICAgICAgICAgICAgICAgICgnVG9wJywgU0hPUlQpLAorICAgICAgICAgICAgICAgICgnUmlnaHQnLCBTSE9SVCksCisgICAgICAgICAgICAgICAgKCdCb3R0b20nLCBTSE9SVCldCiBTTUFMTF9SRUNUID0gX1NNQUxMX1JFQ1QKIAotY2xhc3MgX0NPT1JEKFN0cnVjdHVyZSk6Ci0gICAgX2ZpZWxkc18gPSBbKCdYJywgY19zaG9ydCksCi0gICAgICAgICAgICAgICAgKCdZJywgY19zaG9ydCldCitjbGFzcyBfQ09PUkQoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCdYJywgU0hPUlQpLAorICAgICAgICAgICAgICAgICgnWScsIFNIT1JUKV0KIAotY2xhc3MgUE9JTlQoU3RydWN0dXJlKToKLSAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLAotICAgICAgICAgICAgICAgICgieSIsIGNfbG9uZyldCitjbGFzcyBQT0lOVChjdHlwZXMuU3RydWN0dXJlKToKKyAgICBfZmllbGRzXyA9IFsoIngiLCBMT05HKSwKKyAgICAgICAgICAgICAgICAoInkiLCBMT05HKV0KIHRhZ1BPSU5UID0gX1BPSU5UTCA9IFBPSU5UTCA9IFBPSU5UCiAKLWNsYXNzIFNJWkUoU3RydWN0dXJlKToKLSAgICBfZmllbGRzXyA9IFsoImN4IiwgY19sb25nKSwKLSAgICAgICAgICAgICAgICAoImN5IiwgY19sb25nKV0KK2NsYXNzIFNJWkUoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgX2ZpZWxkc18gPSBbKCJjeCIsIExPTkcpLAorICAgICAgICAgICAgICAgICgiY3kiLCBMT05HKV0KIHRhZ1NJWkUgPSBTSVpFTCA9IFNJWkUKIAogZGVmIFJHQihyZWQsIGdyZWVuLCBibHVlKToKICAgICByZXR1cm4gcmVkICsgKGdyZWVuIDw8IDgpICsgKGJsdWUgPDwgMTYpCiAKLWNsYXNzIEZJTEVUSU1FKFN0cnVjdHVyZSk6CitjbGFzcyBGSUxFVElNRShjdHlwZXMuU3RydWN0dXJlKToKICAgICBfZmllbGRzXyA9IFsoImR3TG93RGF0ZVRpbWUiLCBEV09SRCksCiAgICAgICAgICAgICAgICAgKCJkd0hpZ2hEYXRlVGltZSIsIERXT1JEKV0KIF9GSUxFVElNRSA9IEZJTEVUSU1FCiAKLWNsYXNzIE1TRyhTdHJ1Y3R1cmUpOgorY2xhc3MgTVNHKGN0eXBlcy5TdHJ1Y3R1cmUpOgogICAgIF9maWVsZHNfID0gWygiaFduZCIsIEhXTkQpLAotICAgICAgICAgICAgICAgICgibWVzc2FnZSIsIGNfdWludCksCisgICAgICAgICAgICAgICAgKCJtZXNzYWdlIiwgVUlOVCksCiAgICAgICAgICAgICAgICAgKCJ3UGFyYW0iLCBXUEFSQU0pLAogICAgICAgICAgICAgICAgICgibFBhcmFtIiwgTFBBUkFNKSwKICAgICAgICAgICAgICAgICAoInRpbWUiLCBEV09SRCksCkBAIC0xMzksNyArMTQwLDcgQEAKIHRhZ01TRyA9IE1TRwogTUFYX1BBVEggPSAyNjAKIAotY2xhc3MgV0lOMzJfRklORF9EQVRBQShTdHJ1Y3R1cmUpOgorY2xhc3MgV0lOMzJfRklORF9EQVRBQShjdHlwZXMuU3RydWN0dXJlKToKICAgICBfZmllbGRzXyA9IFsoImR3RmlsZUF0dHJpYnV0ZXMiLCBEV09SRCksCiAgICAgICAgICAgICAgICAgKCJmdENyZWF0aW9uVGltZSIsIEZJTEVUSU1FKSwKICAgICAgICAgICAgICAgICAoImZ0TGFzdEFjY2Vzc1RpbWUiLCBGSUxFVElNRSksCkBAIC0xNDgsMTAgKzE0OSwxMCBAQAogICAgICAgICAgICAgICAgICgibkZpbGVTaXplTG93IiwgRFdPUkQpLAogICAgICAgICAgICAgICAgICgiZHdSZXNlcnZlZDAiLCBEV09SRCksCiAgICAgICAgICAgICAgICAgKCJkd1Jlc2VydmVkMSIsIERXT1JEKSwKLSAgICAgICAgICAgICAgICAoImNGaWxlTmFtZSIsIGNfY2hhciAqIE1BWF9QQVRIKSwKLSAgICAgICAgICAgICAgICAoImNBbHRlcm5hdGVGaWxlTmFtZSIsIGNfY2hhciAqIDE0KV0KKyAgICAgICAgICAgICAgICAoImNGaWxlTmFtZSIsIENIQVIgKiBNQVhfUEFUSCksCisgICAgICAgICAgICAgICAgKCJjQWx0ZXJuYXRlRmlsZU5hbWUiLCBDSEFSICogMTQpXQogCi1jbGFzcyBXSU4zMl9GSU5EX0RBVEFXKFN0cnVjdHVyZSk6CitjbGFzcyBXSU4zMl9GSU5EX0RBVEFXKGN0eXBlcy5TdHJ1Y3R1cmUpOgogICAgIF9maWVsZHNfID0gWygiZHdGaWxlQXR0cmlidXRlcyIsIERXT1JEKSwKICAgICAgICAgICAgICAgICAoImZ0Q3JlYXRpb25UaW1lIiwgRklMRVRJTUUpLAogICAgICAgICAgICAgICAgICgiZnRMYXN0QWNjZXNzVGltZSIsIEZJTEVUSU1FKSwKQEAgLTE2MCwyMiArMTYxLDQyIEBACiAgICAgICAgICAgICAgICAgKCJuRmlsZVNpemVMb3ciLCBEV09SRCksCiAgICAgICAgICAgICAgICAgKCJkd1Jlc2VydmVkMCIsIERXT1JEKSwKICAgICAgICAgICAgICAgICAoImR3UmVzZXJ2ZWQxIiwgRFdPUkQpLAotICAgICAgICAgICAgICAgICgiY0ZpbGVOYW1lIiwgY193Y2hhciAqIE1BWF9QQVRIKSwKLSAgICAgICAgICAgICAgICAoImNBbHRlcm5hdGVGaWxlTmFtZSIsIGNfd2NoYXIgKiAxNCldCisgICAgICAgICAgICAgICAgKCJjRmlsZU5hbWUiLCBXQ0hBUiAqIE1BWF9QQVRIKSwKKyAgICAgICAgICAgICAgICAoImNBbHRlcm5hdGVGaWxlTmFtZSIsIFdDSEFSICogMTQpXQogCi1fX2FsbF9fID0gWydBVE9NJywgJ0JPT0wnLCAnQk9PTEVBTicsICdCWVRFJywgJ0NPTE9SUkVGJywgJ0RPVUJMRScsICdEV09SRCcsCi0gICAgICAgICAgICdGSUxFVElNRScsICdGTE9BVCcsICdIQUNDRUwnLCAnSEFORExFJywgJ0hCSVRNQVAnLCAnSEJSVVNIJywKLSAgICAgICAgICAgJ0hDT0xPUlNQQUNFJywgJ0hEQycsICdIREVTSycsICdIRFdQJywgJ0hFTkhNRVRBRklMRScsICdIRk9OVCcsCi0gICAgICAgICAgICdIR0RJT0JKJywgJ0hHTE9CQUwnLCAnSEhPT0snLCAnSElDT04nLCAnSElOU1RBTkNFJywgJ0hLRVknLAotICAgICAgICAgICAnSEtMJywgJ0hMT0NBTCcsICdITUVOVScsICdITUVUQUZJTEUnLCAnSE1PRFVMRScsICdITU9OSVRPUicsCi0gICAgICAgICAgICdIUEFMRVRURScsICdIUEVOJywgJ0hSR04nLCAnSFJTUkMnLCAnSFNUUicsICdIVEFTSycsICdIV0lOU1RBJywKLSAgICAgICAgICAgJ0hXTkQnLCAnSU5UJywgJ0xBTkdJRCcsICdMQVJHRV9JTlRFR0VSJywgJ0xDSUQnLCAnTENUWVBFJywKLSAgICAgICAgICAgJ0xHUlBJRCcsICdMT05HJywgJ0xQQVJBTScsICdMUENPTEVTVFInLCAnTFBDU1RSJywgJ0xQQ1ZPSUQnLAotICAgICAgICAgICAnTFBDV1NUUicsICdMUE9MRVNUUicsICdMUFNUUicsICdMUFZPSUQnLCAnTFBXU1RSJywgJ01BWF9QQVRIJywKLSAgICAgICAgICAgJ01TRycsICdPTEVTVFInLCAnUE9JTlQnLCAnUE9JTlRMJywgJ1JFQ1QnLCAnUkVDVEwnLCAnUkdCJywKLSAgICAgICAgICAgJ1NDX0hBTkRMRScsICdTRVJWSUNFX1NUQVRVU19IQU5ETEUnLCAnU0hPUlQnLCAnU0laRScsICdTSVpFTCcsCi0gICAgICAgICAgICdTTUFMTF9SRUNUJywgJ1VJTlQnLCAnVUxBUkdFX0lOVEVHRVInLCAnVUxPTkcnLCAnVVNIT1JUJywKLSAgICAgICAgICAgJ1ZBUklBTlRfQk9PTCcsICdXQ0hBUicsICdXSU4zMl9GSU5EX0RBVEFBJywgJ1dJTjMyX0ZJTkRfREFUQVcnLAotICAgICAgICAgICAnV09SRCcsICdXUEFSQU0nLCAnX0NPT1JEJywgJ19GSUxFVElNRScsICdfTEFSR0VfSU5URUdFUicsCi0gICAgICAgICAgICdfUE9JTlRMJywgJ19SRUNUTCcsICdfU01BTExfUkVDVCcsICdfVUxBUkdFX0lOVEVHRVInLCAndGFnTVNHJywKLSAgICAgICAgICAgJ3RhZ1BPSU5UJywgJ3RhZ1JFQ1QnLCAndGFnU0laRSddCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFBvaW50ZXIgdHlwZXMKKworTFBCT09MID0gUEJPT0wgPSBjdHlwZXMuUE9JTlRFUihCT09MKQorUEJPT0xFQU4gPSBjdHlwZXMuUE9JTlRFUihCT09MRUFOKQorTFBCWVRFID0gUEJZVEUgPSBjdHlwZXMuUE9JTlRFUihCWVRFKQorUENIQVIgPSBjdHlwZXMuUE9JTlRFUihDSEFSKQorTFBDT0xPUlJFRiA9IGN0eXBlcy5QT0lOVEVSKENPTE9SUkVGKQorTFBEV09SRCA9IFBEV09SRCA9IGN0eXBlcy5QT0lOVEVSKERXT1JEKQorTFBGSUxFVElNRSA9IFBGSUxFVElNRSA9IGN0eXBlcy5QT0lOVEVSKEZJTEVUSU1FKQorUEZMT0FUID0gY3R5cGVzLlBPSU5URVIoRkxPQVQpCitMUEhBTkRMRSA9IFBIQU5ETEUgPSBjdHlwZXMuUE9JTlRFUihIQU5ETEUpCitQSEtFWSA9IGN0eXBlcy5QT0lOVEVSKEhLRVkpCitMUEhLTCA9IGN0eXBlcy5QT0lOVEVSKEhLTCkKK0xQSU5UID0gUElOVCA9IGN0eXBlcy5QT0lOVEVSKElOVCkKK1BMQVJHRV9JTlRFR0VSID0gY3R5cGVzLlBPSU5URVIoTEFSR0VfSU5URUdFUikKK1BMQ0lEID0gY3R5cGVzLlBPSU5URVIoTENJRCkKK0xQTE9ORyA9IFBMT05HID0gY3R5cGVzLlBPSU5URVIoTE9ORykKK0xQTVNHID0gUE1TRyA9IGN0eXBlcy5QT0lOVEVSKE1TRykKK0xQUE9JTlQgPSBQUE9JTlQgPSBjdHlwZXMuUE9JTlRFUihQT0lOVCkKK1BQT0lOVEwgPSBjdHlwZXMuUE9JTlRFUihQT0lOVEwpCitMUFJFQ1QgPSBQUkVDVCA9IGN0eXBlcy5QT0lOVEVSKFJFQ1QpCitMUFJFQ1RMID0gUFJFQ1RMID0gY3R5cGVzLlBPSU5URVIoUkVDVEwpCitMUFNDX0hBTkRMRSA9IGN0eXBlcy5QT0lOVEVSKFNDX0hBTkRMRSkKK1BTSE9SVCA9IGN0eXBlcy5QT0lOVEVSKFNIT1JUKQorTFBTSVpFID0gUFNJWkUgPSBjdHlwZXMuUE9JTlRFUihTSVpFKQorTFBTSVpFTCA9IFBTSVpFTCA9IGN0eXBlcy5QT0lOVEVSKFNJWkVMKQorUFNNQUxMX1JFQ1QgPSBjdHlwZXMuUE9JTlRFUihTTUFMTF9SRUNUKQorTFBVSU5UID0gUFVJTlQgPSBjdHlwZXMuUE9JTlRFUihVSU5UKQorUFVMQVJHRV9JTlRFR0VSID0gY3R5cGVzLlBPSU5URVIoVUxBUkdFX0lOVEVHRVIpCitQVUxPTkcgPSBjdHlwZXMuUE9JTlRFUihVTE9ORykKK1BVU0hPUlQgPSBjdHlwZXMuUE9JTlRFUihVU0hPUlQpCitQV0NIQVIgPSBjdHlwZXMuUE9JTlRFUihXQ0hBUikKK0xQV0lOMzJfRklORF9EQVRBQSA9IFBXSU4zMl9GSU5EX0RBVEFBID0gY3R5cGVzLlBPSU5URVIoV0lOMzJfRklORF9EQVRBQSkKK0xQV0lOMzJfRklORF9EQVRBVyA9IFBXSU4zMl9GSU5EX0RBVEFXID0gY3R5cGVzLlBPSU5URVIoV0lOMzJfRklORF9EQVRBVykKK0xQV09SRCA9IFBXT1JEID0gY3R5cGVzLlBPSU5URVIoV09SRCkKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWU3Y2I1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0wLDAgKzEsMjExMiBAQAorIiIiQ29uY3JldGUgZGF0ZS90aW1lIGFuZCByZWxhdGVkIHR5cGVzIC0tIHByb3RvdHlwZSBpbXBsZW1lbnRlZCBpbiBQeXRob24uCisKK1NlZSBodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvZmRyYWtlL0RhdGVUaW1lV2lraS9Gcm9udFBhZ2UKKworU2VlIGFsc28gaHR0cDovL2Rpci55YWhvby5jb20vUmVmZXJlbmNlL2NhbGVuZGFycy8KKworRm9yIGEgcHJpbWVyIG9uIERTVCwgaW5jbHVkaW5nIG1hbnkgY3VycmVudCBEU1QgcnVsZXMsIHNlZQoraHR0cDovL3dlYmV4aGliaXRzLm9yZy9kYXlsaWdodHNhdmluZy8KKworRm9yIG1vcmUgYWJvdXQgRFNUIHRoYW4geW91IGV2ZXIgd2FudGVkIHRvIGtub3csIHNlZQorZnRwOi8vZWxzaWUubmNpLm5paC5nb3YvcHViLworCitTb3VyY2VzIGZvciB0aW1lIHpvbmUgYW5kIERTVCBkYXRhOiBodHRwOi8vd3d3LnR3aW5zdW4uY29tL3R6L3R6LWxpbmsuaHRtCisKK1RoaXMgd2FzIG9yaWdpbmFsbHkgY29waWVkIGZyb20gdGhlIHNhbmRib3ggb2YgdGhlIENQeXRob24gQ1ZTIHJlcG9zaXRvcnkuCitUaGFua3MgdG8gVGltIFBldGVycyBmb3Igc3VnZ2VzdGluZyB1c2luZyBpdC4KKyIiIgorCitpbXBvcnQgdGltZSBhcyBfdGltZQoraW1wb3J0IG1hdGggYXMgX21hdGgKKworZGVmIF9jbXAoeCwgeSk6CisgICAgcmV0dXJuIDAgaWYgeCA9PSB5IGVsc2UgMSBpZiB4ID4geSBlbHNlIC0xCisKK01JTllFQVIgPSAxCitNQVhZRUFSID0gOTk5OQorX01BWE9SRElOQUwgPSAzNjUyMDU5ICMgZGF0ZS5tYXgudG9vcmRpbmFsKCkKKworIyBVdGlsaXR5IGZ1bmN0aW9ucywgYWRhcHRlZCBmcm9tIFB5dGhvbidzIERlbW8vY2xhc3Nlcy9EYXRlcy5weSwgd2hpY2gKKyMgYWxzbyBhc3N1bWVzIHRoZSBjdXJyZW50IEdyZWdvcmlhbiBjYWxlbmRhciBpbmRlZmluaXRlbHkgZXh0ZW5kZWQgaW4KKyMgYm90aCBkaXJlY3Rpb25zLiAgRGlmZmVyZW5jZTogIERhdGVzLnB5IGNhbGxzIEphbnVhcnkgMSBvZiB5ZWFyIDAgZGF5CisjIG51bWJlciAxLiAgVGhlIGNvZGUgaGVyZSBjYWxscyBKYW51YXJ5IDEgb2YgeWVhciAxIGRheSBudW1iZXIgMS4gIFRoaXMgaXMKKyMgdG8gbWF0Y2ggdGhlIGRlZmluaXRpb24gb2YgdGhlICJwcm9sZXB0aWMgR3JlZ29yaWFuIiBjYWxlbmRhciBpbiBEZXJzaG93aXR6CisjIGFuZCBSZWluZ29sZCdzICJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnMiLCB3aGVyZSBpdCdzIHRoZSBiYXNlIGNhbGVuZGFyCisjIGZvciBhbGwgY29tcHV0YXRpb25zLiAgU2VlIHRoZSBib29rIGZvciBhbGdvcml0aG1zIGZvciBjb252ZXJ0aW5nIGJldHdlZW4KKyMgcHJvbGVwdGljIEdyZWdvcmlhbiBvcmRpbmFscyBhbmQgbWFueSBvdGhlciBjYWxlbmRhciBzeXN0ZW1zLgorCitfREFZU19JTl9NT05USCA9IFtOb25lLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXQorCitfREFZU19CRUZPUkVfTU9OVEggPSBbTm9uZV0KK2RibSA9IDAKK2ZvciBkaW0gaW4gX0RBWVNfSU5fTU9OVEhbMTpdOgorICAgIF9EQVlTX0JFRk9SRV9NT05USC5hcHBlbmQoZGJtKQorICAgIGRibSArPSBkaW0KK2RlbCBkYm0sIGRpbQorCitkZWYgX2lzX2xlYXAoeWVhcik6CisgICAgInllYXIgLT4gMSBpZiBsZWFwIHllYXIsIGVsc2UgMC4iCisgICAgcmV0dXJuIHllYXIgJSA0ID09IDAgYW5kICh5ZWFyICUgMTAwICE9IDAgb3IgeWVhciAlIDQwMCA9PSAwKQorCitkZWYgX2RheXNfYmVmb3JlX3llYXIoeWVhcik6CisgICAgInllYXIgLT4gbnVtYmVyIG9mIGRheXMgYmVmb3JlIEphbnVhcnkgMXN0IG9mIHllYXIuIgorICAgIHkgPSB5ZWFyIC0gMQorICAgIHJldHVybiB5KjM2NSArIHkvLzQgLSB5Ly8xMDAgKyB5Ly80MDAKKworZGVmIF9kYXlzX2luX21vbnRoKHllYXIsIG1vbnRoKToKKyAgICAieWVhciwgbW9udGggLT4gbnVtYmVyIG9mIGRheXMgaW4gdGhhdCBtb250aCBpbiB0aGF0IHllYXIuIgorICAgIGFzc2VydCAxIDw9IG1vbnRoIDw9IDEyLCBtb250aAorICAgIGlmIG1vbnRoID09IDIgYW5kIF9pc19sZWFwKHllYXIpOgorICAgICAgICByZXR1cm4gMjkKKyAgICByZXR1cm4gX0RBWVNfSU5fTU9OVEhbbW9udGhdCisKK2RlZiBfZGF5c19iZWZvcmVfbW9udGgoeWVhciwgbW9udGgpOgorICAgICJ5ZWFyLCBtb250aCAtPiBudW1iZXIgb2YgZGF5cyBpbiB5ZWFyIHByZWNlZWRpbmcgZmlyc3QgZGF5IG9mIG1vbnRoLiIKKyAgICBhc3NlcnQgMSA8PSBtb250aCA8PSAxMiwgJ21vbnRoIG11c3QgYmUgaW4gMS4uMTInCisgICAgcmV0dXJuIF9EQVlTX0JFRk9SRV9NT05USFttb250aF0gKyAobW9udGggPiAyIGFuZCBfaXNfbGVhcCh5ZWFyKSkKKworZGVmIF95bWQyb3JkKHllYXIsIG1vbnRoLCBkYXkpOgorICAgICJ5ZWFyLCBtb250aCwgZGF5IC0+IG9yZGluYWwsIGNvbnNpZGVyaW5nIDAxLUphbi0wMDAxIGFzIGRheSAxLiIKKyAgICBhc3NlcnQgMSA8PSBtb250aCA8PSAxMiwgJ21vbnRoIG11c3QgYmUgaW4gMS4uMTInCisgICAgZGltID0gX2RheXNfaW5fbW9udGgoeWVhciwgbW9udGgpCisgICAgYXNzZXJ0IDEgPD0gZGF5IDw9IGRpbSwgKCdkYXkgbXVzdCBiZSBpbiAxLi4lZCcgJSBkaW0pCisgICAgcmV0dXJuIChfZGF5c19iZWZvcmVfeWVhcih5ZWFyKSArCisgICAgICAgICAgICBfZGF5c19iZWZvcmVfbW9udGgoeWVhciwgbW9udGgpICsKKyAgICAgICAgICAgIGRheSkKKworX0RJNDAwWSA9IF9kYXlzX2JlZm9yZV95ZWFyKDQwMSkgICAgIyBudW1iZXIgb2YgZGF5cyBpbiA0MDAgeWVhcnMKK19ESTEwMFkgPSBfZGF5c19iZWZvcmVfeWVhcigxMDEpICAgICMgICAgIiAgICAiICAgIiAgICIgMTAwICAgIgorX0RJNFkgICA9IF9kYXlzX2JlZm9yZV95ZWFyKDUpICAgICAgIyAgICAiICAgICIgICAiICAgIiAgIDQgICAiCisKKyMgQSA0LXllYXIgY3ljbGUgaGFzIGFuIGV4dHJhIGxlYXAgZGF5IG92ZXIgd2hhdCB3ZSdkIGdldCBmcm9tIHBhc3RpbmcKKyMgdG9nZXRoZXIgNCBzaW5nbGUgeWVhcnMuCithc3NlcnQgX0RJNFkgPT0gNCAqIDM2NSArIDEKKworIyBTaW1pbGFybHksIGEgNDAwLXllYXIgY3ljbGUgaGFzIGFuIGV4dHJhIGxlYXAgZGF5IG92ZXIgd2hhdCB3ZSdkIGdldCBmcm9tCisjIHBhc3RpbmcgdG9nZXRoZXIgNCAxMDAteWVhciBjeWNsZXMuCithc3NlcnQgX0RJNDAwWSA9PSA0ICogX0RJMTAwWSArIDEKKworIyBPVE9ILCBhIDEwMC15ZWFyIGN5Y2xlIGhhcyBvbmUgZmV3ZXIgbGVhcCBkYXkgdGhhbiB3ZSdkIGdldCBmcm9tCisjIHBhc3RpbmcgdG9nZXRoZXIgMjUgNC15ZWFyIGN5Y2xlcy4KK2Fzc2VydCBfREkxMDBZID09IDI1ICogX0RJNFkgLSAxCisKK2RlZiBfb3JkMnltZChuKToKKyAgICAib3JkaW5hbCAtPiAoeWVhciwgbW9udGgsIGRheSksIGNvbnNpZGVyaW5nIDAxLUphbi0wMDAxIGFzIGRheSAxLiIKKworICAgICMgbiBpcyBhIDEtYmFzZWQgaW5kZXgsIHN0YXJ0aW5nIGF0IDEtSmFuLTEuICBUaGUgcGF0dGVybiBvZiBsZWFwIHllYXJzCisgICAgIyByZXBlYXRzIGV4YWN0bHkgZXZlcnkgNDAwIHllYXJzLiAgVGhlIGJhc2ljIHN0cmF0ZWd5IGlzIHRvIGZpbmQgdGhlCisgICAgIyBjbG9zZXN0IDQwMC15ZWFyIGJvdW5kYXJ5IGF0IG9yIGJlZm9yZSBuLCB0aGVuIHdvcmsgd2l0aCB0aGUgb2Zmc2V0CisgICAgIyBmcm9tIHRoYXQgYm91bmRhcnkgdG8gbi4gIExpZmUgaXMgbXVjaCBjbGVhcmVyIGlmIHdlIHN1YnRyYWN0IDEgZnJvbQorICAgICMgbiBmaXJzdCAtLSB0aGVuIHRoZSB2YWx1ZXMgb2YgbiBhdCA0MDAteWVhciBib3VuZGFyaWVzIGFyZSBleGFjdGx5CisgICAgIyB0aG9zZSBkaXZpc2libGUgYnkgX0RJNDAwWToKKyAgICAjCisgICAgIyAgICAgRCAgTSAgIFkgICAgICAgICAgICBuICAgICAgICAgICAgICBuLTEKKyAgICAjICAgICAtLSAtLS0gLS0tLSAgICAgICAgLS0tLS0tLS0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLQorICAgICMgICAgIDMxIERlYyAtNDAwICAgICAgICAtX0RJNDAwWSAgICAgICAtX0RJNDAwWSAtMQorICAgICMgICAgICAxIEphbiAtMzk5ICAgICAgICAgLV9ESTQwMFkgKzEgICAtX0RJNDAwWSAgICAgIDQwMC15ZWFyIGJvdW5kYXJ5CisgICAgIyAgICAgLi4uCisgICAgIyAgICAgMzAgRGVjICAwMDAgICAgICAgIC0xICAgICAgICAgICAgIC0yCisgICAgIyAgICAgMzEgRGVjICAwMDAgICAgICAgICAwICAgICAgICAgICAgIC0xCisgICAgIyAgICAgIDEgSmFuICAwMDEgICAgICAgICAxICAgICAgICAgICAgICAwICAgICAgICAgICAgNDAwLXllYXIgYm91bmRhcnkKKyAgICAjICAgICAgMiBKYW4gIDAwMSAgICAgICAgIDIgICAgICAgICAgICAgIDEKKyAgICAjICAgICAgMyBKYW4gIDAwMSAgICAgICAgIDMgICAgICAgICAgICAgIDIKKyAgICAjICAgICAuLi4KKyAgICAjICAgICAzMSBEZWMgIDQwMCAgICAgICAgIF9ESTQwMFkgICAgICAgIF9ESTQwMFkgLTEKKyAgICAjICAgICAgMSBKYW4gIDQwMSAgICAgICAgIF9ESTQwMFkgKzEgICAgIF9ESTQwMFkgICAgICA0MDAteWVhciBib3VuZGFyeQorICAgIG4gLT0gMQorICAgIG40MDAsIG4gPSBkaXZtb2QobiwgX0RJNDAwWSkKKyAgICB5ZWFyID0gbjQwMCAqIDQwMCArIDEgICAjIC4uLiwgLTM5OSwgMSwgNDAxLCAuLi4KKworICAgICMgTm93IG4gaXMgdGhlIChub24tbmVnYXRpdmUpIG9mZnNldCwgaW4gZGF5cywgZnJvbSBKYW51YXJ5IDEgb2YgeWVhciwgdG8KKyAgICAjIHRoZSBkZXNpcmVkIGRhdGUuICBOb3cgY29tcHV0ZSBob3cgbWFueSAxMDAteWVhciBjeWNsZXMgcHJlY2VkZSBuLgorICAgICMgTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgZm9yIG4xMDAgdG8gZXF1YWwgNCEgIEluIHRoYXQgY2FzZSA0IGZ1bGwKKyAgICAjIDEwMC15ZWFyIGN5Y2xlcyBwcmVjZWRlIHRoZSBkZXNpcmVkIGRheSwgd2hpY2ggaW1wbGllcyB0aGUgZGVzaXJlZAorICAgICMgZGF5IGlzIERlY2VtYmVyIDMxIGF0IHRoZSBlbmQgb2YgYSA0MDAteWVhciBjeWNsZS4KKyAgICBuMTAwLCBuID0gZGl2bW9kKG4sIF9ESTEwMFkpCisKKyAgICAjIE5vdyBjb21wdXRlIGhvdyBtYW55IDQteWVhciBjeWNsZXMgcHJlY2VkZSBpdC4KKyAgICBuNCwgbiA9IGRpdm1vZChuLCBfREk0WSkKKworICAgICMgQW5kIG5vdyBob3cgbWFueSBzaW5nbGUgeWVhcnMuICBBZ2FpbiBuMSBjYW4gYmUgNCwgYW5kIGFnYWluIG1lYW5pbmcKKyAgICAjIHRoYXQgdGhlIGRlc2lyZWQgZGF5IGlzIERlY2VtYmVyIDMxIGF0IHRoZSBlbmQgb2YgdGhlIDQteWVhciBjeWNsZS4KKyAgICBuMSwgbiA9IGRpdm1vZChuLCAzNjUpCisKKyAgICB5ZWFyICs9IG4xMDAgKiAxMDAgKyBuNCAqIDQgKyBuMQorICAgIGlmIG4xID09IDQgb3IgbjEwMCA9PSA0OgorICAgICAgICBhc3NlcnQgbiA9PSAwCisgICAgICAgIHJldHVybiB5ZWFyLTEsIDEyLCAzMQorCisgICAgIyBOb3cgdGhlIHllYXIgaXMgY29ycmVjdCwgYW5kIG4gaXMgdGhlIG9mZnNldCBmcm9tIEphbnVhcnkgMS4gIFdlIGZpbmQKKyAgICAjIHRoZSBtb250aCB2aWEgYW4gZXN0aW1hdGUgdGhhdCdzIGVpdGhlciBleGFjdCBvciBvbmUgdG9vIGxhcmdlLgorICAgIGxlYXB5ZWFyID0gbjEgPT0gMyBhbmQgKG40ICE9IDI0IG9yIG4xMDAgPT0gMykKKyAgICBhc3NlcnQgbGVhcHllYXIgPT0gX2lzX2xlYXAoeWVhcikKKyAgICBtb250aCA9IChuICsgNTApID4+IDUKKyAgICBwcmVjZWRpbmcgPSBfREFZU19CRUZPUkVfTU9OVEhbbW9udGhdICsgKG1vbnRoID4gMiBhbmQgbGVhcHllYXIpCisgICAgaWYgcHJlY2VkaW5nID4gbjogICMgZXN0aW1hdGUgaXMgdG9vIGxhcmdlCisgICAgICAgIG1vbnRoIC09IDEKKyAgICAgICAgcHJlY2VkaW5nIC09IF9EQVlTX0lOX01PTlRIW21vbnRoXSArIChtb250aCA9PSAyIGFuZCBsZWFweWVhcikKKyAgICBuIC09IHByZWNlZGluZworICAgIGFzc2VydCAwIDw9IG4gPCBfZGF5c19pbl9tb250aCh5ZWFyLCBtb250aCkKKworICAgICMgTm93IHRoZSB5ZWFyIGFuZCBtb250aCBhcmUgY29ycmVjdCwgYW5kIG4gaXMgdGhlIG9mZnNldCBmcm9tIHRoZQorICAgICMgc3RhcnQgb2YgdGhhdCBtb250aDogIHdlJ3JlIGRvbmUhCisgICAgcmV0dXJuIHllYXIsIG1vbnRoLCBuKzEKKworIyBNb250aCBhbmQgZGF5IG5hbWVzLiAgRm9yIGxvY2FsaXplZCB2ZXJzaW9ucywgc2VlIHRoZSBjYWxlbmRhciBtb2R1bGUuCitfTU9OVEhOQU1FUyA9IFtOb25lLCAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorICAgICAgICAgICAgICAgICAgICAgIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIl0KK19EQVlOQU1FUyA9IFtOb25lLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiLCAiU3VuIl0KKworCitkZWYgX2J1aWxkX3N0cnVjdF90aW1lKHksIG0sIGQsIGhoLCBtbSwgc3MsIGRzdGZsYWcpOgorICAgIHdkYXkgPSAoX3ltZDJvcmQoeSwgbSwgZCkgKyA2KSAlIDcKKyAgICBkbnVtID0gX2RheXNfYmVmb3JlX21vbnRoKHksIG0pICsgZAorICAgIHJldHVybiBfdGltZS5zdHJ1Y3RfdGltZSgoeSwgbSwgZCwgaGgsIG1tLCBzcywgd2RheSwgZG51bSwgZHN0ZmxhZykpCisKK2RlZiBfZm9ybWF0X3RpbWUoaGgsIG1tLCBzcywgdXMpOgorICAgICMgU2tpcCB0cmFpbGluZyBtaWNyb3NlY29uZHMgd2hlbiB1cz09MC4KKyAgICByZXN1bHQgPSAiJTAyZDolMDJkOiUwMmQiICUgKGhoLCBtbSwgc3MpCisgICAgaWYgdXM6CisgICAgICAgIHJlc3VsdCArPSAiLiUwNmQiICUgdXMKKyAgICByZXR1cm4gcmVzdWx0CisKKyMgQ29ycmVjdGx5IHN1YnN0aXR1dGUgZm9yICV6IGFuZCAlWiBlc2NhcGVzIGluIHN0cmZ0aW1lIGZvcm1hdHMuCitkZWYgX3dyYXBfc3RyZnRpbWUob2JqZWN0LCBmb3JtYXQsIHRpbWV0dXBsZSk6CisgICAgeWVhciA9IHRpbWV0dXBsZVswXQorICAgIGlmIHllYXIgPCAxMDAwOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ5ZWFyPSVkIGlzIGJlZm9yZSAxMDAwOyB0aGUgZGF0ZXRpbWUgc3RyZnRpbWUoKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm1ldGhvZHMgcmVxdWlyZSB5ZWFyID49IDEwMDAiICUgeWVhcikKKyAgICAjIERvbid0IGNhbGwgdXRjb2Zmc2V0KCkgb3IgdHpuYW1lKCkgdW5sZXNzIGFjdHVhbGx5IG5lZWRlZC4KKyAgICBmcmVwbGFjZSA9IE5vbmUgIyB0aGUgc3RyaW5nIHRvIHVzZSBmb3IgJWYKKyAgICB6cmVwbGFjZSA9IE5vbmUgIyB0aGUgc3RyaW5nIHRvIHVzZSBmb3IgJXoKKyAgICBacmVwbGFjZSA9IE5vbmUgIyB0aGUgc3RyaW5nIHRvIHVzZSBmb3IgJVoKKworICAgICMgU2NhbiBmb3JtYXQgZm9yICV6IGFuZCAlWiBlc2NhcGVzLCByZXBsYWNpbmcgYXMgbmVlZGVkLgorICAgIG5ld2Zvcm1hdCA9IFtdCisgICAgcHVzaCA9IG5ld2Zvcm1hdC5hcHBlbmQKKyAgICBpLCBuID0gMCwgbGVuKGZvcm1hdCkKKyAgICB3aGlsZSBpIDwgbjoKKyAgICAgICAgY2ggPSBmb3JtYXRbaV0KKyAgICAgICAgaSArPSAxCisgICAgICAgIGlmIGNoID09ICclJzoKKyAgICAgICAgICAgIGlmIGkgPCBuOgorICAgICAgICAgICAgICAgIGNoID0gZm9ybWF0W2ldCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgaWYgY2ggPT0gJ2YnOgorICAgICAgICAgICAgICAgICAgICBpZiBmcmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJlcGxhY2UgPSAnJTA2ZCcgJSBnZXRhdHRyKG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWljcm9zZWNvbmQnLCAwKQorICAgICAgICAgICAgICAgICAgICBuZXdmb3JtYXQuYXBwZW5kKGZyZXBsYWNlKQorICAgICAgICAgICAgICAgIGVsaWYgY2ggPT0gJ3onOgorICAgICAgICAgICAgICAgICAgICBpZiB6cmVwbGFjZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgenJlcGxhY2UgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICJ1dGNvZmZzZXQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvYmplY3QudXRjb2Zmc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAnKycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgb2Zmc2V0LmRheXMgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICctJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLCBtID0gZGl2bW9kKG9mZnNldCwgdGltZWRlbHRhKGhvdXJzPTEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IG0gJSB0aW1lZGVsdGEobWludXRlcz0xKSwgIndob2xlIG1pbnV0ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSAvLz0gdGltZWRlbHRhKG1pbnV0ZXM9MSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgenJlcGxhY2UgPSAnJWMlMDJkJTAyZCcgJSAoc2lnbiwgaCwgbSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ICclJyBub3QgaW4genJlcGxhY2UKKyAgICAgICAgICAgICAgICAgICAgbmV3Zm9ybWF0LmFwcGVuZCh6cmVwbGFjZSkKKyAgICAgICAgICAgICAgICBlbGlmIGNoID09ICdaJzoKKyAgICAgICAgICAgICAgICAgICAgaWYgWnJlcGxhY2UgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIFpyZXBsYWNlID0gIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAidHpuYW1lIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IG9iamVjdC50em5hbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RyZnRpbWUgaXMgZ29pbmcgdG8gaGF2ZSBhdCB0aGlzOiBlc2NhcGUgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBacmVwbGFjZSA9IHMucmVwbGFjZSgnJScsICclJScpCisgICAgICAgICAgICAgICAgICAgIG5ld2Zvcm1hdC5hcHBlbmQoWnJlcGxhY2UpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcHVzaCgnJScpCisgICAgICAgICAgICAgICAgICAgIHB1c2goY2gpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHB1c2goJyUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHVzaChjaCkKKyAgICBuZXdmb3JtYXQgPSAiIi5qb2luKG5ld2Zvcm1hdCkKKyAgICByZXR1cm4gX3RpbWUuc3RyZnRpbWUobmV3Zm9ybWF0LCB0aW1ldHVwbGUpCisKK2RlZiBfY2FsbF90emluZm9fbWV0aG9kKHR6aW5mbywgbWV0aG5hbWUsIHR6aW5mb2FyZyk6CisgICAgaWYgdHppbmZvIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIGdldGF0dHIodHppbmZvLCBtZXRobmFtZSkodHppbmZvYXJnKQorCisjIEp1c3QgcmFpc2UgVHlwZUVycm9yIGlmIHRoZSBhcmcgaXNuJ3QgTm9uZSBvciBhIHN0cmluZy4KK2RlZiBfY2hlY2tfdHpuYW1lKG5hbWUpOgorICAgIGlmIG5hbWUgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG5hbWUsIHN0cik6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidHppbmZvLnR6bmFtZSgpIG11c3QgcmV0dXJuIE5vbmUgb3Igc3RyaW5nLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAibm90ICclcyciICUgdHlwZShuYW1lKSkKKworIyBuYW1lIGlzIHRoZSBvZmZzZXQtcHJvZHVjaW5nIG1ldGhvZCwgInV0Y29mZnNldCIgb3IgImRzdCIuCisjIG9mZnNldCBpcyB3aGF0IGl0IHJldHVybmVkLgorIyBJZiBvZmZzZXQgaXNuJ3QgTm9uZSBvciB0aW1lZGVsdGEsIHJhaXNlcyBUeXBlRXJyb3IuCisjIElmIG9mZnNldCBpcyBOb25lLCByZXR1cm5zIE5vbmUuCisjIEVsc2Ugb2Zmc2V0IGlzIGNoZWNrZWQgZm9yIGJlaW5nIGluIHJhbmdlLCBhbmQgYSB3aG9sZSAjIG9mIG1pbnV0ZXMuCisjIElmIGl0IGlzLCBpdHMgaW50ZWdlciB2YWx1ZSBpcyByZXR1cm5lZC4gIEVsc2UgVmFsdWVFcnJvciBpcyByYWlzZWQuCitkZWYgX2NoZWNrX3V0Y19vZmZzZXQobmFtZSwgb2Zmc2V0KToKKyAgICBhc3NlcnQgbmFtZSBpbiAoInV0Y29mZnNldCIsICJkc3QiKQorICAgIGlmIG9mZnNldCBpcyBOb25lOgorICAgICAgICByZXR1cm4KKyAgICBpZiBub3QgaXNpbnN0YW5jZShvZmZzZXQsIHRpbWVkZWx0YSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidHppbmZvLiVzKCkgbXVzdCByZXR1cm4gTm9uZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAib3IgdGltZWRlbHRhLCBub3QgJyVzJyIgJSAobmFtZSwgdHlwZShvZmZzZXQpKSkKKyAgICBpZiBvZmZzZXQgJSB0aW1lZGVsdGEobWludXRlcz0xKSBvciBvZmZzZXQubWljcm9zZWNvbmRzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0emluZm8uJXMoKSBtdXN0IHJldHVybiBhIHdob2xlIG51bWJlciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIm9mIG1pbnV0ZXMsIGdvdCAlcyIgJSAobmFtZSwgb2Zmc2V0KSkKKyAgICBpZiBub3QgLXRpbWVkZWx0YSgxKSA8IG9mZnNldCA8IHRpbWVkZWx0YSgxKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXMoKT0lcywgbXVzdCBiZSBtdXN0IGJlIHN0cmljdGx5IGJldHdlZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIiAtdGltZWRlbHRhKGhvdXJzPTI0KSBhbmQgdGltZWRlbHRhKGhvdXJzPTI0KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChuYW1lLCBvZmZzZXQpKQorCitkZWYgX2NoZWNrX2RhdGVfZmllbGRzKHllYXIsIG1vbnRoLCBkYXkpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHllYXIsIGludCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignaW50IGV4cGVjdGVkJykKKyAgICBpZiBub3QgTUlOWUVBUiA8PSB5ZWFyIDw9IE1BWFlFQVI6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3llYXIgbXVzdCBiZSBpbiAlZC4uJWQnICUgKE1JTllFQVIsIE1BWFlFQVIpLCB5ZWFyKQorICAgIGlmIG5vdCAxIDw9IG1vbnRoIDw9IDEyOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtb250aCBtdXN0IGJlIGluIDEuLjEyJywgbW9udGgpCisgICAgZGltID0gX2RheXNfaW5fbW9udGgoeWVhciwgbW9udGgpCisgICAgaWYgbm90IDEgPD0gZGF5IDw9IGRpbToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZGF5IG11c3QgYmUgaW4gMS4uJWQnICUgZGltLCBkYXkpCisKK2RlZiBfY2hlY2tfdGltZV9maWVsZHMoaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShob3VyLCBpbnQpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ludCBleHBlY3RlZCcpCisgICAgaWYgbm90IDAgPD0gaG91ciA8PSAyMzoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaG91ciBtdXN0IGJlIGluIDAuLjIzJywgaG91cikKKyAgICBpZiBub3QgMCA8PSBtaW51dGUgPD0gNTk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ21pbnV0ZSBtdXN0IGJlIGluIDAuLjU5JywgbWludXRlKQorICAgIGlmIG5vdCAwIDw9IHNlY29uZCA8PSA1OToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc2Vjb25kIG11c3QgYmUgaW4gMC4uNTknLCBzZWNvbmQpCisgICAgaWYgbm90IDAgPD0gbWljcm9zZWNvbmQgPD0gOTk5OTk5OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtaWNyb3NlY29uZCBtdXN0IGJlIGluIDAuLjk5OTk5OScsIG1pY3Jvc2Vjb25kKQorCitkZWYgX2NoZWNrX3R6aW5mb19hcmcodHopOgorICAgIGlmIHR6IGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZSh0eiwgdHppbmZvKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0emluZm8gYXJndW1lbnQgbXVzdCBiZSBOb25lIG9yIG9mIGEgdHppbmZvIHN1YmNsYXNzIikKKworZGVmIF9jbXBlcnJvcih4LCB5KToKKyAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IGNvbXBhcmUgJyVzJyB0byAnJXMnIiAlICgKKyAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXywgdHlwZSh5KS5fX25hbWVfXykpCisKK2NsYXNzIHRpbWVkZWx0YToKKyAgICAiIiJSZXByZXNlbnQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXRpbWUgb2JqZWN0cy4KKworICAgIFN1cHBvcnRlZCBvcGVyYXRvcnM6CisKKyAgICAtIGFkZCwgc3VidHJhY3QgdGltZWRlbHRhCisgICAgLSB1bmFyeSBwbHVzLCBtaW51cywgYWJzCisgICAgLSBjb21wYXJlIHRvIHRpbWVkZWx0YQorICAgIC0gbXVsdGlwbHksIGRpdmlkZSBieSBpbnQvbG9uZworCisgICAgSW4gYWRkaXRpb24sIGRhdGV0aW1lIHN1cHBvcnRzIHN1YnRyYWN0aW9uIG9mIHR3byBkYXRldGltZSBvYmplY3RzCisgICAgcmV0dXJuaW5nIGEgdGltZWRlbHRhLCBhbmQgYWRkaXRpb24gb3Igc3VidHJhY3Rpb24gb2YgYSBkYXRldGltZQorICAgIGFuZCBhIHRpbWVkZWx0YSBnaXZpbmcgYSBkYXRldGltZS4KKworICAgIFJlcHJlc2VudGF0aW9uOiAoZGF5cywgc2Vjb25kcywgbWljcm9zZWNvbmRzKS4gIFdoeT8gIEJlY2F1c2UgSQorICAgIGZlbHQgbGlrZSBpdC4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAnX2RheXMnLCAnX3NlY29uZHMnLCAnX21pY3Jvc2Vjb25kcycKKworICAgIGRlZiBfX25ld19fKGNscywgZGF5cz0wLCBzZWNvbmRzPTAsIG1pY3Jvc2Vjb25kcz0wLAorICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcz0wLCBtaW51dGVzPTAsIGhvdXJzPTAsIHdlZWtzPTApOgorICAgICAgICAjIERvaW5nIHRoaXMgZWZmaWNpZW50bHkgYW5kIGFjY3VyYXRlbHkgaW4gQyBpcyBnb2luZyB0byBiZSBkaWZmaWN1bHQKKyAgICAgICAgIyBhbmQgZXJyb3ItcHJvbmUsIGR1ZSB0byB1YmlxdWl0b3VzIG92ZXJmbG93IHBvc3NpYmlsaXRpZXMsIGFuZCB0aGF0CisgICAgICAgICMgQyBkb3VibGUgZG9lc24ndCBoYXZlIGVub3VnaCBiaXRzIG9mIHByZWNpc2lvbiB0byByZXByZXNlbnQKKyAgICAgICAgIyBtaWNyb3NlY29uZHMgb3ZlciAxMEsgeWVhcnMgZmFpdGhmdWxseS4gIFRoZSBjb2RlIGhlcmUgdHJpZXMgdG8gbWFrZQorICAgICAgICAjIGV4cGxpY2l0IHdoZXJlIGdvLWZhc3QgYXNzdW1wdGlvbnMgY2FuIGJlIHJlbGllZCBvbiwgaW4gb3JkZXIgdG8KKyAgICAgICAgIyBndWlkZSB0aGUgQyBpbXBsZW1lbnRhdGlvbjsgaXQncyB3YXkgbW9yZSBjb252b2x1dGVkIHRoYW4gc3BlZWQtCisgICAgICAgICMgaWdub3JpbmcgYXV0by1vdmVyZmxvdy10by1sb25nIGlkaW9tYXRpYyBQeXRob24gY291bGQgYmUuCisKKyAgICAgICAgIyBYWFggQ2hlY2sgdGhhdCBhbGwgaW5wdXRzIGFyZSBpbnRzIG9yIGZsb2F0cy4KKworICAgICAgICAjIEZpbmFsIHZhbHVlcywgYWxsIGludGVnZXIuCisgICAgICAgICMgcyBhbmQgdXMgZml0IGluIDMyLWJpdCBzaWduZWQgaW50czsgZCBpc24ndCBib3VuZGVkLgorICAgICAgICBkID0gcyA9IHVzID0gMAorCisgICAgICAgICMgTm9ybWFsaXplIGV2ZXJ5dGhpbmcgdG8gZGF5cywgc2Vjb25kcywgbWljcm9zZWNvbmRzLgorICAgICAgICBkYXlzICs9IHdlZWtzKjcKKyAgICAgICAgc2Vjb25kcyArPSBtaW51dGVzKjYwICsgaG91cnMqMzYwMAorICAgICAgICBtaWNyb3NlY29uZHMgKz0gbWlsbGlzZWNvbmRzKjEwMDAKKworICAgICAgICAjIEdldCByaWQgb2YgYWxsIGZyYWN0aW9ucywgYW5kIG5vcm1hbGl6ZSBzIGFuZCB1cy4KKyAgICAgICAgIyBUYWtlIGEgZGVlcCBicmVhdGggPHdpbms+LgorICAgICAgICBpZiBpc2luc3RhbmNlKGRheXMsIGZsb2F0KToKKyAgICAgICAgICAgIGRheWZyYWMsIGRheXMgPSBfbWF0aC5tb2RmKGRheXMpCisgICAgICAgICAgICBkYXlzZWNvbmRzZnJhYywgZGF5c2Vjb25kc3dob2xlID0gX21hdGgubW9kZihkYXlmcmFjICogKDI0LiozNjAwLikpCisgICAgICAgICAgICBhc3NlcnQgZGF5c2Vjb25kc3dob2xlID09IGludChkYXlzZWNvbmRzd2hvbGUpICAjIGNhbid0IG92ZXJmbG93CisgICAgICAgICAgICBzID0gaW50KGRheXNlY29uZHN3aG9sZSkKKyAgICAgICAgICAgIGFzc2VydCBkYXlzID09IGludChkYXlzKQorICAgICAgICAgICAgZCA9IGludChkYXlzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF5c2Vjb25kc2ZyYWMgPSAwLjAKKyAgICAgICAgICAgIGQgPSBkYXlzCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRheXNlY29uZHNmcmFjLCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IGFicyhkYXlzZWNvbmRzZnJhYykgPD0gMS4wCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGludCkKKyAgICAgICAgYXNzZXJ0IGFicyhzKSA8PSAyNCAqIDM2MDAKKyAgICAgICAgIyBkYXlzIGlzbid0IHJlZmVyZW5jZWQgYWdhaW4gYmVmb3JlIHJlZGVmaW5pdGlvbgorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2Vjb25kcywgZmxvYXQpOgorICAgICAgICAgICAgc2Vjb25kc2ZyYWMsIHNlY29uZHMgPSBfbWF0aC5tb2RmKHNlY29uZHMpCisgICAgICAgICAgICBhc3NlcnQgc2Vjb25kcyA9PSBpbnQoc2Vjb25kcykKKyAgICAgICAgICAgIHNlY29uZHMgPSBpbnQoc2Vjb25kcykKKyAgICAgICAgICAgIHNlY29uZHNmcmFjICs9IGRheXNlY29uZHNmcmFjCisgICAgICAgICAgICBhc3NlcnQgYWJzKHNlY29uZHNmcmFjKSA8PSAyLjAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlY29uZHNmcmFjID0gZGF5c2Vjb25kc2ZyYWMKKyAgICAgICAgIyBkYXlzZWNvbmRzZnJhYyBpc24ndCByZWZlcmVuY2VkIGFnYWluCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlY29uZHNmcmFjLCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IGFicyhzZWNvbmRzZnJhYykgPD0gMi4wCisKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2Vjb25kcywgaW50KQorICAgICAgICBkYXlzLCBzZWNvbmRzID0gZGl2bW9kKHNlY29uZHMsIDI0KjM2MDApCisgICAgICAgIGQgKz0gZGF5cworICAgICAgICBzICs9IGludChzZWNvbmRzKSAgICAjIGNhbid0IG92ZXJmbG93CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHMsIGludCkKKyAgICAgICAgYXNzZXJ0IGFicyhzKSA8PSAyICogMjQgKiAzNjAwCisgICAgICAgICMgc2Vjb25kcyBpc24ndCByZWZlcmVuY2VkIGFnYWluIGJlZm9yZSByZWRlZmluaXRpb24KKworICAgICAgICB1c2RvdWJsZSA9IHNlY29uZHNmcmFjICogMWU2CisgICAgICAgIGFzc2VydCBhYnModXNkb3VibGUpIDwgMi4xZTYgICAgIyBleGFjdCB2YWx1ZSBub3QgY3JpdGljYWwKKyAgICAgICAgIyBzZWNvbmRzZnJhYyBpc24ndCByZWZlcmVuY2VkIGFnYWluCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtaWNyb3NlY29uZHMsIGZsb2F0KToKKyAgICAgICAgICAgIG1pY3Jvc2Vjb25kcyArPSB1c2RvdWJsZQorICAgICAgICAgICAgbWljcm9zZWNvbmRzID0gcm91bmQobWljcm9zZWNvbmRzLCAwKQorICAgICAgICAgICAgc2Vjb25kcywgbWljcm9zZWNvbmRzID0gZGl2bW9kKG1pY3Jvc2Vjb25kcywgMWU2KQorICAgICAgICAgICAgYXNzZXJ0IG1pY3Jvc2Vjb25kcyA9PSBpbnQobWljcm9zZWNvbmRzKQorICAgICAgICAgICAgYXNzZXJ0IHNlY29uZHMgPT0gaW50KHNlY29uZHMpCisgICAgICAgICAgICBkYXlzLCBzZWNvbmRzID0gZGl2bW9kKHNlY29uZHMsIDI0LiozNjAwLikKKyAgICAgICAgICAgIGFzc2VydCBkYXlzID09IGludChkYXlzKQorICAgICAgICAgICAgYXNzZXJ0IHNlY29uZHMgPT0gaW50KHNlY29uZHMpCisgICAgICAgICAgICBkICs9IGludChkYXlzKQorICAgICAgICAgICAgcyArPSBpbnQoc2Vjb25kcykgICAjIGNhbid0IG92ZXJmbG93CisgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBpbnQpCisgICAgICAgICAgICBhc3NlcnQgYWJzKHMpIDw9IDMgKiAyNCAqIDM2MDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlY29uZHMsIG1pY3Jvc2Vjb25kcyA9IGRpdm1vZChtaWNyb3NlY29uZHMsIDEwMDAwMDApCisgICAgICAgICAgICBkYXlzLCBzZWNvbmRzID0gZGl2bW9kKHNlY29uZHMsIDI0KjM2MDApCisgICAgICAgICAgICBkICs9IGRheXMKKyAgICAgICAgICAgIHMgKz0gaW50KHNlY29uZHMpICAgICMgY2FuJ3Qgb3ZlcmZsb3cKKyAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHMsIGludCkKKyAgICAgICAgICAgIGFzc2VydCBhYnMocykgPD0gMyAqIDI0ICogMzYwMAorICAgICAgICAgICAgbWljcm9zZWNvbmRzID0gZmxvYXQobWljcm9zZWNvbmRzKQorICAgICAgICAgICAgbWljcm9zZWNvbmRzICs9IHVzZG91YmxlCisgICAgICAgICAgICBtaWNyb3NlY29uZHMgPSByb3VuZChtaWNyb3NlY29uZHMsIDApCisgICAgICAgIGFzc2VydCBhYnMocykgPD0gMyAqIDI0ICogMzYwMAorICAgICAgICBhc3NlcnQgYWJzKG1pY3Jvc2Vjb25kcykgPCAzLjFlNgorCisgICAgICAgICMgSnVzdCBhIGxpdHRsZSBiaXQgb2YgY2FycnlpbmcgcG9zc2libGUgZm9yIG1pY3Jvc2Vjb25kcyBhbmQgc2Vjb25kcy4KKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UobWljcm9zZWNvbmRzLCBmbG9hdCkKKyAgICAgICAgYXNzZXJ0IGludChtaWNyb3NlY29uZHMpID09IG1pY3Jvc2Vjb25kcworICAgICAgICB1cyA9IGludChtaWNyb3NlY29uZHMpCisgICAgICAgIHNlY29uZHMsIHVzID0gZGl2bW9kKHVzLCAxMDAwMDAwKQorICAgICAgICBzICs9IHNlY29uZHMgICAgIyBjYW50J3Qgb3ZlcmZsb3cKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgaW50KQorICAgICAgICBkYXlzLCBzID0gZGl2bW9kKHMsIDI0KjM2MDApCisgICAgICAgIGQgKz0gZGF5cworCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGludCkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UocywgaW50KSBhbmQgMCA8PSBzIDwgMjQqMzYwMAorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh1cywgaW50KSBhbmQgMCA8PSB1cyA8IDEwMDAwMDAKKworICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorCisgICAgICAgIHNlbGYuX2RheXMgPSBkCisgICAgICAgIHNlbGYuX3NlY29uZHMgPSBzCisgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcyA9IHVzCisgICAgICAgIGlmIGFicyhkKSA+IDk5OTk5OTk5OToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoInRpbWVkZWx0YSAjIG9mIGRheXMgaXMgdG9vIGxhcmdlOiAlZCIgJSBkKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX21pY3Jvc2Vjb25kczoKKyAgICAgICAgICAgIHJldHVybiAiJXMoJWQsICVkLCAlZCkiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcykKKyAgICAgICAgaWYgc2VsZi5fc2Vjb25kczoKKyAgICAgICAgICAgIHJldHVybiAiJXMoJWQsICVkKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcykKKyAgICAgICAgcmV0dXJuICIlcyglZCkiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX2RheXMpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgbW0sIHNzID0gZGl2bW9kKHNlbGYuX3NlY29uZHMsIDYwKQorICAgICAgICBoaCwgbW0gPSBkaXZtb2QobW0sIDYwKQorICAgICAgICBzID0gIiVkOiUwMmQ6JTAyZCIgJSAoaGgsIG1tLCBzcykKKyAgICAgICAgaWYgc2VsZi5fZGF5czoKKyAgICAgICAgICAgIGRlZiBwbHVyYWwobik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4sIGFicyhuKSAhPSAxIGFuZCAicyIgb3IgIiIKKyAgICAgICAgICAgIHMgPSAoIiVkIGRheSVzLCAiICUgcGx1cmFsKHNlbGYuX2RheXMpKSArIHMKKyAgICAgICAgaWYgc2VsZi5fbWljcm9zZWNvbmRzOgorICAgICAgICAgICAgcyA9IHMgKyAiLiUwNmQiICUgc2VsZi5fbWljcm9zZWNvbmRzCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgdG90YWxfc2Vjb25kcyhzZWxmKToKKyAgICAgICAgIiIiVG90YWwgc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uIiIiCisgICAgICAgIHJldHVybiAoKHNlbGYuZGF5cyAqIDg2NDAwICsgc2VsZi5zZWNvbmRzKSoxMCoqNiArCisgICAgICAgICAgICAgICAgc2VsZi5taWNyb3NlY29uZHMpIC8gMTAqKjYKKworICAgICMgUmVhZC1vbmx5IGZpZWxkIGFjY2Vzc29ycworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBkYXlzKHNlbGYpOgorICAgICAgICAiIiJkYXlzIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9kYXlzCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2Vjb25kcyhzZWxmKToKKyAgICAgICAgIiIic2Vjb25kcyIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc2Vjb25kcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pY3Jvc2Vjb25kcyhzZWxmKToKKyAgICAgICAgIiIibWljcm9zZWNvbmRzIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9taWNyb3NlY29uZHMKKworICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgICMgZm9yIENQeXRob24gY29tcGF0aWJpbGl0eSwgd2UgY2Fubm90IHVzZQorICAgICAgICAgICAgIyBvdXIgX19jbGFzc19fIGhlcmUsIGJ1dCBuZWVkIGEgcmVhbCB0aW1lZGVsdGEKKyAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEoc2VsZi5fZGF5cyArIG90aGVyLl9kYXlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZWNvbmRzICsgb3RoZXIuX3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcyArIG90aGVyLl9taWNyb3NlY29uZHMpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICAjIGZvciBDUHl0aG9uIGNvbXBhdGliaWxpdHksIHdlIGNhbm5vdCB1c2UKKyAgICAgICAgICAgICMgb3VyIF9fY2xhc3NfXyBoZXJlLCBidXQgbmVlZCBhIHJlYWwgdGltZWRlbHRhCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKHNlbGYuX2RheXMgLSBvdGhlci5fZGF5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcyAtIG90aGVyLl9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZHMgLSBvdGhlci5fbWljcm9zZWNvbmRzKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICByZXR1cm4gLXNlbGYgKyBvdGhlcgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX25lZ19fKHNlbGYpOgorICAgICAgICAjIGZvciBDUHl0aG9uIGNvbXBhdGliaWxpdHksIHdlIGNhbm5vdCB1c2UKKyAgICAgICAgIyBvdXIgX19jbGFzc19fIGhlcmUsIGJ1dCBuZWVkIGEgcmVhbCB0aW1lZGVsdGEKKyAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgtc2VsZi5fZGF5cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAtc2VsZi5fc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAtc2VsZi5fbWljcm9zZWNvbmRzKQorCisgICAgZGVmIF9fcG9zX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19hYnNfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGF5cyA8IDA6CisgICAgICAgICAgICByZXR1cm4gLXNlbGYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19tdWxfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGludCk6CisgICAgICAgICAgICAjIGZvciBDUHl0aG9uIGNvbXBhdGliaWxpdHksIHdlIGNhbm5vdCB1c2UKKyAgICAgICAgICAgICMgb3VyIF9fY2xhc3NfXyBoZXJlLCBidXQgbmVlZCBhIHJlYWwgdGltZWRlbHRhCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKHNlbGYuX2RheXMgKiBvdGhlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcyAqIG90aGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZHMgKiBvdGhlcikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgorICAgICAgICAgICAgYSwgYiA9IG90aGVyLmFzX2ludGVnZXJfcmF0aW8oKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYgKiBhIC8gYgorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIF9fcm11bF9fID0gX19tdWxfXworCisgICAgZGVmIF90b19taWNyb3NlY29uZHMoc2VsZik6CisgICAgICAgIHJldHVybiAoKHNlbGYuX2RheXMgKiAoMjQqMzYwMCkgKyBzZWxmLl9zZWNvbmRzKSAqIDEwMDAwMDAgKworICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcykKKworICAgIGRlZiBfX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgKGludCwgdGltZWRlbHRhKSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgdXNlYyA9IHNlbGYuX3RvX21pY3Jvc2Vjb25kcygpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICByZXR1cm4gdXNlYyAvLyBvdGhlci5fdG9fbWljcm9zZWNvbmRzKCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgaW50KToKKyAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEoMCwgMCwgdXNlYyAvLyBvdGhlcikKKworICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCAoaW50LCBmbG9hdCwgdGltZWRlbHRhKSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgdXNlYyA9IHNlbGYuX3RvX21pY3Jvc2Vjb25kcygpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICByZXR1cm4gdXNlYyAvIG90aGVyLl90b19taWNyb3NlY29uZHMoKQorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgwLCAwLCB1c2VjIC8gb3RoZXIpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKKyAgICAgICAgICAgIGEsIGIgPSBvdGhlci5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEoMCwgMCwgYiAqIHVzZWMgLyBhKQorCisgICAgZGVmIF9fbW9kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgciA9IHNlbGYuX3RvX21pY3Jvc2Vjb25kcygpICUgb3RoZXIuX3RvX21pY3Jvc2Vjb25kcygpCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIHIpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fZGl2bW9kX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgcSwgciA9IGRpdm1vZChzZWxmLl90b19taWNyb3NlY29uZHMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuX3RvX21pY3Jvc2Vjb25kcygpKQorICAgICAgICAgICAgcmV0dXJuIHEsIHRpbWVkZWx0YSgwLCAwLCByKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICMgQ29tcGFyaXNvbnMgb2YgdGltZWRlbHRhIG9iamVjdHMgd2l0aCBvdGhlci4KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPT0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpICE9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY21wZXJyb3Ioc2VsZiwgb3RoZXIpCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID49IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY21wZXJyb3Ioc2VsZiwgb3RoZXIpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG90aGVyLCB0aW1lZGVsdGEpCisgICAgICAgIHJldHVybiBfY21wKHNlbGYuX2dldHN0YXRlKCksIG90aGVyLl9nZXRzdGF0ZSgpKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9nZXRzdGF0ZSgpKQorCisgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2RheXMgIT0gMCBvcgorICAgICAgICAgICAgICAgIHNlbGYuX3NlY29uZHMgIT0gMCBvcgorICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kcyAhPSAwKQorCisgICAgIyBQaWNrbGUgc3VwcG9ydC4KKworICAgIGRlZiBfZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZGF5cywgc2VsZi5fc2Vjb25kcywgc2VsZi5fbWljcm9zZWNvbmRzKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIHNlbGYuX2dldHN0YXRlKCkpCisKK3RpbWVkZWx0YS5taW4gPSB0aW1lZGVsdGEoLTk5OTk5OTk5OSkKK3RpbWVkZWx0YS5tYXggPSB0aW1lZGVsdGEoZGF5cz05OTk5OTk5OTksIGhvdXJzPTIzLCBtaW51dGVzPTU5LCBzZWNvbmRzPTU5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9OTk5OTk5KQordGltZWRlbHRhLnJlc29sdXRpb24gPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpCisKK2NsYXNzIGRhdGU6CisgICAgIiIiQ29uY3JldGUgZGF0ZSB0eXBlLgorCisgICAgQ29uc3RydWN0b3JzOgorCisgICAgX19uZXdfXygpCisgICAgZnJvbXRpbWVzdGFtcCgpCisgICAgdG9kYXkoKQorICAgIGZyb21vcmRpbmFsKCkKKworICAgIE9wZXJhdG9yczoKKworICAgIF9fcmVwcl9fLCBfX3N0cl9fCisgICAgX19jbXBfXywgX19oYXNoX18KKyAgICBfX2FkZF9fLCBfX3JhZGRfXywgX19zdWJfXyAoYWRkL3JhZGQgb25seSB3aXRoIHRpbWVkZWx0YSBhcmcpCisKKyAgICBNZXRob2RzOgorCisgICAgdGltZXR1cGxlKCkKKyAgICB0b29yZGluYWwoKQorICAgIHdlZWtkYXkoKQorICAgIGlzb3dlZWtkYXkoKSwgaXNvY2FsZW5kYXIoKSwgaXNvZm9ybWF0KCkKKyAgICBjdGltZSgpCisgICAgc3RyZnRpbWUoKQorCisgICAgUHJvcGVydGllcyAocmVhZG9ubHkpOgorICAgIHllYXIsIG1vbnRoLCBkYXkKKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAnX3llYXInLCAnX21vbnRoJywgJ19kYXknCisKKyAgICBkZWYgX19uZXdfXyhjbHMsIHllYXIsIG1vbnRoPU5vbmUsIGRheT1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgQXJndW1lbnRzOgorCisgICAgICAgIHllYXIsIG1vbnRoLCBkYXkgKHJlcXVpcmVkLCBiYXNlIDEpCisgICAgICAgICIiIgorICAgICAgICBpZiAoaXNpbnN0YW5jZSh5ZWFyLCBieXRlcykgYW5kIGxlbih5ZWFyKSA9PSA0IGFuZAorICAgICAgICAgICAgMSA8PSB5ZWFyWzJdIDw9IDEyIGFuZCBtb250aCBpcyBOb25lKTogICMgTW9udGggaXMgc2FuZQorICAgICAgICAgICAgIyBQaWNrbGUgc3VwcG9ydAorICAgICAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgICAgIHNlbGYuX19zZXRzdGF0ZSh5ZWFyKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgX2NoZWNrX2RhdGVfZmllbGRzKHllYXIsIG1vbnRoLCBkYXkpCisgICAgICAgIHNlbGYgPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuX3llYXIgPSB5ZWFyCisgICAgICAgIHNlbGYuX21vbnRoID0gbW9udGgKKyAgICAgICAgc2VsZi5fZGF5ID0gZGF5CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICAjIEFkZGl0aW9uYWwgY29uc3RydWN0b3JzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbXRpbWVzdGFtcChjbHMsIHQpOgorICAgICAgICAiQ29uc3RydWN0IGEgZGF0ZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wIChsaWtlIHRpbWUudGltZSgpKS4iCisgICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IF90aW1lLmxvY2FsdGltZSh0KQorICAgICAgICByZXR1cm4gY2xzKHksIG0sIGQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdG9kYXkoY2xzKToKKyAgICAgICAgIkNvbnN0cnVjdCBhIGRhdGUgZnJvbSB0aW1lLnRpbWUoKS4iCisgICAgICAgIHQgPSBfdGltZS50aW1lKCkKKyAgICAgICAgcmV0dXJuIGNscy5mcm9tdGltZXN0YW1wKHQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW9yZGluYWwoY2xzLCBuKToKKyAgICAgICAgIiIiQ29udHJ1Y3QgYSBkYXRlIGZyb20gYSBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWwuCisKKyAgICAgICAgSmFudWFyeSAxIG9mIHllYXIgMSBpcyBkYXkgMS4gIE9ubHkgdGhlIHllYXIsIG1vbnRoIGFuZCBkYXkgYXJlCisgICAgICAgIG5vbi16ZXJvIGluIHRoZSByZXN1bHQuCisgICAgICAgICIiIgorICAgICAgICB5LCBtLCBkID0gX29yZDJ5bWQobikKKyAgICAgICAgcmV0dXJuIGNscyh5LCBtLCBkKQorCisgICAgIyBDb252ZXJzaW9ucyB0byBzdHJpbmcKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCB0byBmb3JtYWwgc3RyaW5nLCBmb3IgcmVwcigpLgorCisgICAgICAgID4+PiBkdCA9IGRhdGV0aW1lKDIwMTAsIDEsIDEpCisgICAgICAgID4+PiByZXByKGR0KQorICAgICAgICAnZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgMSwgMSwgMCwgMCknCisKKyAgICAgICAgPj4+IGR0ID0gZGF0ZXRpbWUoMjAxMCwgMSwgMSwgdHppbmZvPXRpbWV6b25lLnV0YykKKyAgICAgICAgPj4+IHJlcHIoZHQpCisgICAgICAgICdkYXRldGltZS5kYXRldGltZSgyMDEwLCAxLCAxLCAwLCAwLCB0emluZm89ZGF0ZXRpbWUudGltZXpvbmUudXRjKScKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiJXMoJWQsICVkLCAlZCkiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3llYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21vbnRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXkpCisgICAgIyBYWFggVGhlc2Ugc2hvdWxkbid0IGRlcGVuZCBvbiB0aW1lLmxvY2FsdGltZSgpLCBiZWNhdXNlIHRoYXQKKyAgICAjIGNsaXBzIHRoZSB1c2FibGUgZGF0ZXMgdG8gWzE5NzAgLi4gMjAzOCkuICBBdCBsZWFzdCBjdGltZSgpIGlzCisgICAgIyBlYXNpbHkgZG9uZSB3aXRob3V0IHVzaW5nIHN0cmZ0aW1lKCkgLS0gdGhhdCdzIGJldHRlciB0b28gYmVjYXVzZQorICAgICMgc3RyZnRpbWUoIiVjIiwgLi4uKSBpcyBsb2NhbGUgc3BlY2lmaWMuCisKKworICAgIGRlZiBjdGltZShzZWxmKToKKyAgICAgICAgIlJldHVybiBjdGltZSgpIHN0eWxlIHN0cmluZy4iCisgICAgICAgIHdlZWtkYXkgPSBzZWxmLnRvb3JkaW5hbCgpICUgNyBvciA3CisgICAgICAgIHJldHVybiAiJXMgJXMgJTJkIDAwOjAwOjAwICUwNGQiICUgKAorICAgICAgICAgICAgX0RBWU5BTUVTW3dlZWtkYXldLAorICAgICAgICAgICAgX01PTlRITkFNRVNbc2VsZi5fbW9udGhdLAorICAgICAgICAgICAgc2VsZi5fZGF5LCBzZWxmLl95ZWFyKQorCisgICAgZGVmIHN0cmZ0aW1lKHNlbGYsIGZtdCk6CisgICAgICAgICJGb3JtYXQgdXNpbmcgc3RyZnRpbWUoKS4iCisgICAgICAgIHJldHVybiBfd3JhcF9zdHJmdGltZShzZWxmLCBmbXQsIHNlbGYudGltZXR1cGxlKCkpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmbXQpOgorICAgICAgICBpZiBsZW4oZm10KSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RyZnRpbWUoZm10KQorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyAgICBkZWYgaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGRhdGUgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJU08uCisKKyAgICAgICAgVGhpcyBpcyAnWVlZWS1NTS1ERCcuCisKKyAgICAgICAgUmVmZXJlbmNlczoKKyAgICAgICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9OT1RFLWRhdGV0aW1lCisgICAgICAgIC0gaHR0cDovL3d3dy5jbC5jYW0uYWMudWsvfm1nazI1L2lzby10aW1lLmh0bWwKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiJTA0ZC0lMDJkLSUwMmQiICUgKHNlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXkpCisKKyAgICBfX3N0cl9fID0gaXNvZm9ybWF0CisKKyAgICAjIFJlYWQtb25seSBmaWVsZCBhY2Nlc3NvcnMKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgeWVhcihzZWxmKToKKyAgICAgICAgIiIieWVhciAoMS05OTk5KSIiIgorICAgICAgICByZXR1cm4gc2VsZi5feWVhcgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1vbnRoKHNlbGYpOgorICAgICAgICAiIiJtb250aCAoMS0xMikiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vbnRoCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZGF5KHNlbGYpOgorICAgICAgICAiIiJkYXkgKDEtMzEpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9kYXkKKworICAgICMgU3RhbmRhcmQgY29udmVyc2lvbnMsIF9fY21wX18sIF9faGFzaF9fIChhbmQgaGVscGVycykKKworICAgIGRlZiB0aW1ldHVwbGUoc2VsZik6CisgICAgICAgICJSZXR1cm4gbG9jYWwgdGltZSB0dXBsZSBjb21wYXRpYmxlIHdpdGggdGltZS5sb2NhbHRpbWUoKS4iCisgICAgICAgIHJldHVybiBfYnVpbGRfc3RydWN0X3RpbWUoc2VsZi5feWVhciwgc2VsZi5fbW9udGgsIHNlbGYuX2RheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAtMSkKKworICAgIGRlZiB0b29yZGluYWwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBwcm9sZXB0aWMgR3JlZ29yaWFuIG9yZGluYWwgZm9yIHRoZSB5ZWFyLCBtb250aCBhbmQgZGF5LgorCisgICAgICAgIEphbnVhcnkgMSBvZiB5ZWFyIDEgaXMgZGF5IDEuICBPbmx5IHRoZSB5ZWFyLCBtb250aCBhbmQgZGF5IHZhbHVlcworICAgICAgICBjb250cmlidXRlIHRvIHRoZSByZXN1bHQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX3ltZDJvcmQoc2VsZi5feWVhciwgc2VsZi5fbW9udGgsIHNlbGYuX2RheSkKKworICAgIGRlZiByZXBsYWNlKHNlbGYsIHllYXI9Tm9uZSwgbW9udGg9Tm9uZSwgZGF5PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgZGF0ZSB3aXRoIG5ldyB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRzLiIiIgorICAgICAgICBpZiB5ZWFyIGlzIE5vbmU6CisgICAgICAgICAgICB5ZWFyID0gc2VsZi5feWVhcgorICAgICAgICBpZiBtb250aCBpcyBOb25lOgorICAgICAgICAgICAgbW9udGggPSBzZWxmLl9tb250aAorICAgICAgICBpZiBkYXkgaXMgTm9uZToKKyAgICAgICAgICAgIGRheSA9IHNlbGYuX2RheQorICAgICAgICBfY2hlY2tfZGF0ZV9maWVsZHMoeWVhciwgbW9udGgsIGRheSkKKyAgICAgICAgcmV0dXJuIGRhdGUoeWVhciwgbW9udGgsIGRheSkKKworICAgICMgQ29tcGFyaXNvbnMgb2YgZGF0ZSBvYmplY3RzIHdpdGggb3RoZXIuCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgIT0gMAorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8IDAKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+PSAwCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSkKKyAgICAgICAgeSwgbSwgZCA9IHNlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXkKKyAgICAgICAgeTIsIG0yLCBkMiA9IG90aGVyLl95ZWFyLCBvdGhlci5fbW9udGgsIG90aGVyLl9kYXkKKyAgICAgICAgcmV0dXJuIF9jbXAoKHksIG0sIGQpLCAoeTIsIG0yLCBkMikpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgICJIYXNoLiIKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5fZ2V0c3RhdGUoKSkKKworICAgICMgQ29tcHV0YXRpb25zCisKKyAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICJBZGQgYSBkYXRlIHRvIGEgdGltZWRlbHRhLiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgIG8gPSBzZWxmLnRvb3JkaW5hbCgpICsgb3RoZXIuZGF5cworICAgICAgICAgICAgaWYgMCA8IG8gPD0gX01BWE9SRElOQUw6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUuZnJvbW9yZGluYWwobykKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoInJlc3VsdCBvdXQgb2YgcmFuZ2UiKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiIiJTdWJ0cmFjdCB0d28gZGF0ZXMsIG9yIGEgZGF0ZSBhbmQgYSB0aW1lZGVsdGEuIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZiArIHRpbWVkZWx0YSgtb3RoZXIuZGF5cykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICBkYXlzMSA9IHNlbGYudG9vcmRpbmFsKCkKKyAgICAgICAgICAgIGRheXMyID0gb3RoZXIudG9vcmRpbmFsKCkKKyAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEoZGF5czEgLSBkYXlzMikKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICBkZWYgd2Vla2RheShzZWxmKToKKyAgICAgICAgIlJldHVybiBkYXkgb2YgdGhlIHdlZWssIHdoZXJlIE1vbmRheSA9PSAwIC4uLiBTdW5kYXkgPT0gNi4iCisgICAgICAgIHJldHVybiAoc2VsZi50b29yZGluYWwoKSArIDYpICUgNworCisgICAgIyBEYXktb2YtdGhlLXdlZWsgYW5kIHdlZWstb2YtdGhlLXllYXIsIGFjY29yZGluZyB0byBJU08KKworICAgIGRlZiBpc293ZWVrZGF5KHNlbGYpOgorICAgICAgICAiUmV0dXJuIGRheSBvZiB0aGUgd2Vlaywgd2hlcmUgTW9uZGF5ID09IDEgLi4uIFN1bmRheSA9PSA3LiIKKyAgICAgICAgIyAxLUphbi0wMDAxIGlzIGEgTW9uZGF5CisgICAgICAgIHJldHVybiBzZWxmLnRvb3JkaW5hbCgpICUgNyBvciA3CisKKyAgICBkZWYgaXNvY2FsZW5kYXIoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyBJU08geWVhciwgd2VlayBudW1iZXIsIGFuZCB3ZWVrZGF5LgorCisgICAgICAgIFRoZSBmaXJzdCBJU08gd2VlayBvZiB0aGUgeWVhciBpcyB0aGUgKE1vbi1TdW4pIHdlZWsKKyAgICAgICAgY29udGFpbmluZyB0aGUgeWVhcidzIGZpcnN0IFRodXJzZGF5OyBldmVyeXRoaW5nIGVsc2UgZGVyaXZlcworICAgICAgICBmcm9tIHRoYXQuCisKKyAgICAgICAgVGhlIGZpcnN0IHdlZWsgaXMgMTsgTW9uZGF5IGlzIDEgLi4uIFN1bmRheSBpcyA3LgorCisgICAgICAgIElTTyBjYWxlbmRhciBhbGdvcml0aG0gdGFrZW4gZnJvbQorICAgICAgICBodHRwOi8vd3d3LnBoeXMudXUubmwvfnZnZW50L2NhbGVuZGFyL2lzb2NhbGVuZGFyLmh0bQorICAgICAgICAiIiIKKyAgICAgICAgeWVhciA9IHNlbGYuX3llYXIKKyAgICAgICAgd2VlazFtb25kYXkgPSBfaXNvd2VlazFtb25kYXkoeWVhcikKKyAgICAgICAgdG9kYXkgPSBfeW1kMm9yZChzZWxmLl95ZWFyLCBzZWxmLl9tb250aCwgc2VsZi5fZGF5KQorICAgICAgICAjIEludGVybmFsbHksIHdlZWsgYW5kIGRheSBoYXZlIG9yaWdpbiAwCisgICAgICAgIHdlZWssIGRheSA9IGRpdm1vZCh0b2RheSAtIHdlZWsxbW9uZGF5LCA3KQorICAgICAgICBpZiB3ZWVrIDwgMDoKKyAgICAgICAgICAgIHllYXIgLT0gMQorICAgICAgICAgICAgd2VlazFtb25kYXkgPSBfaXNvd2VlazFtb25kYXkoeWVhcikKKyAgICAgICAgICAgIHdlZWssIGRheSA9IGRpdm1vZCh0b2RheSAtIHdlZWsxbW9uZGF5LCA3KQorICAgICAgICBlbGlmIHdlZWsgPj0gNTI6CisgICAgICAgICAgICBpZiB0b2RheSA+PSBfaXNvd2VlazFtb25kYXkoeWVhcisxKToKKyAgICAgICAgICAgICAgICB5ZWFyICs9IDEKKyAgICAgICAgICAgICAgICB3ZWVrID0gMAorICAgICAgICByZXR1cm4geWVhciwgd2VlaysxLCBkYXkrMQorCisgICAgIyBQaWNrbGUgc3VwcG9ydC4KKworICAgIGRlZiBfZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIHloaSwgeWxvID0gZGl2bW9kKHNlbGYuX3llYXIsIDI1NikKKyAgICAgICAgcmV0dXJuIGJ5dGVzKFt5aGksIHlsbywgc2VsZi5fbW9udGgsIHNlbGYuX2RheV0pLAorCisgICAgZGVmIF9fc2V0c3RhdGUoc2VsZiwgc3RyaW5nKToKKyAgICAgICAgaWYgbGVuKHN0cmluZykgIT0gNCBvciBub3QgKDEgPD0gc3RyaW5nWzJdIDw9IDEyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm90IGVub3VnaCBhcmd1bWVudHMiKQorICAgICAgICB5aGksIHlsbywgc2VsZi5fbW9udGgsIHNlbGYuX2RheSA9IHN0cmluZworICAgICAgICBzZWxmLl95ZWFyID0geWhpICogMjU2ICsgeWxvCisKKyAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgc2VsZi5fZ2V0c3RhdGUoKSkKKworX2RhdGVfY2xhc3MgPSBkYXRlICAjIHNvIGZ1bmN0aW9ucyB3LyBhcmdzIG5hbWVkICJkYXRlIiBjYW4gZ2V0IGF0IHRoZSBjbGFzcworCitkYXRlLm1pbiA9IGRhdGUoMSwgMSwgMSkKK2RhdGUubWF4ID0gZGF0ZSg5OTk5LCAxMiwgMzEpCitkYXRlLnJlc29sdXRpb24gPSB0aW1lZGVsdGEoZGF5cz0xKQorCitjbGFzcyB0emluZm86CisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgdGltZSB6b25lIGluZm8gY2xhc3Nlcy4KKworICAgIFN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSB0aGUgbmFtZSgpLCB1dGNvZmZzZXQoKSBhbmQgZHN0KCkgbWV0aG9kcy4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoKQorICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICAiZGF0ZXRpbWUgLT4gc3RyaW5nIG5hbWUgb2YgdGltZSB6b25lLiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigidHppbmZvIHN1YmNsYXNzIG11c3Qgb3ZlcnJpZGUgdHpuYW1lKCkiKQorCisgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICJkYXRldGltZSAtPiBtaW51dGVzIGVhc3Qgb2YgVVRDIChuZWdhdGl2ZSBmb3Igd2VzdCBvZiBVVEMpIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJ0emluZm8gc3ViY2xhc3MgbXVzdCBvdmVycmlkZSB1dGNvZmZzZXQoKSIpCisKKyAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgIiIiZGF0ZXRpbWUgLT4gRFNUIG9mZnNldCBpbiBtaW51dGVzIGVhc3Qgb2YgVVRDLgorCisgICAgICAgIFJldHVybiAwIGlmIERTVCBub3QgaW4gZWZmZWN0LiAgdXRjb2Zmc2V0KCkgbXVzdCBpbmNsdWRlIHRoZSBEU1QKKyAgICAgICAgb2Zmc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigidHppbmZvIHN1YmNsYXNzIG11c3Qgb3ZlcnJpZGUgZHN0KCkiKQorCisgICAgZGVmIGZyb211dGMoc2VsZiwgZHQpOgorICAgICAgICAiZGF0ZXRpbWUgaW4gVVRDIC0+IGRhdGV0aW1lIGluIGxvY2FsIHRpbWUuIgorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGR0LCBkYXRldGltZSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZyb211dGMoKSByZXF1aXJlcyBhIGRhdGV0aW1lIGFyZ3VtZW50IikKKyAgICAgICAgaWYgZHQudHppbmZvIGlzIG5vdCBzZWxmOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZHQudHppbmZvIGlzIG5vdCBzZWxmIikKKworICAgICAgICBkdG9mZiA9IGR0LnV0Y29mZnNldCgpCisgICAgICAgIGlmIGR0b2ZmIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmcm9tdXRjKCkgcmVxdWlyZXMgYSBub24tTm9uZSB1dGNvZmZzZXQoKSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHQiKQorCisgICAgICAgICMgU2VlIHRoZSBsb25nIGNvbW1lbnQgYmxvY2sgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yIGFuCisgICAgICAgICMgZXhwbGFuYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uCisgICAgICAgIGR0ZHN0ID0gZHQuZHN0KCkKKyAgICAgICAgaWYgZHRkc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyb211dGMoKSByZXF1aXJlcyBhIG5vbi1Ob25lIGRzdCgpIHJlc3VsdCIpCisgICAgICAgIGRlbHRhID0gZHRvZmYgLSBkdGRzdAorICAgICAgICBpZiBkZWx0YToKKyAgICAgICAgICAgIGR0ICs9IGRlbHRhCisgICAgICAgICAgICBkdGRzdCA9IGR0LmRzdCgpCisgICAgICAgICAgICBpZiBkdGRzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImZyb211dGMoKTogZHQuZHN0IGdhdmUgaW5jb25zaXN0ZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXN1bHRzOyBjYW5ub3QgY29udmVydCIpCisgICAgICAgIHJldHVybiBkdCArIGR0ZHN0CisKKyAgICAjIFBpY2tsZSBzdXBwb3J0LgorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIGdldGluaXRhcmdzID0gZ2V0YXR0cihzZWxmLCAiX19nZXRpbml0YXJnc19fIiwgTm9uZSkKKyAgICAgICAgaWYgZ2V0aW5pdGFyZ3M6CisgICAgICAgICAgICBhcmdzID0gZ2V0aW5pdGFyZ3MoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXJncyA9ICgpCisgICAgICAgIGdldHN0YXRlID0gZ2V0YXR0cihzZWxmLCAiX19nZXRzdGF0ZV9fIiwgTm9uZSkKKyAgICAgICAgaWYgZ2V0c3RhdGU6CisgICAgICAgICAgICBzdGF0ZSA9IGdldHN0YXRlKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihzZWxmLCAiX19kaWN0X18iLCBOb25lKSBvciBOb25lCisgICAgICAgIGlmIHN0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCBhcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXywgYXJncywgc3RhdGUpCisKK190emluZm9fY2xhc3MgPSB0emluZm8KKworY2xhc3MgdGltZToKKyAgICAiIiJUaW1lIHdpdGggdGltZSB6b25lLgorCisgICAgQ29uc3RydWN0b3JzOgorCisgICAgX19uZXdfXygpCisKKyAgICBPcGVyYXRvcnM6CisKKyAgICBfX3JlcHJfXywgX19zdHJfXworICAgIF9fY21wX18sIF9faGFzaF9fCisKKyAgICBNZXRob2RzOgorCisgICAgc3RyZnRpbWUoKQorICAgIGlzb2Zvcm1hdCgpCisgICAgdXRjb2Zmc2V0KCkKKyAgICB0em5hbWUoKQorICAgIGRzdCgpCisKKyAgICBQcm9wZXJ0aWVzIChyZWFkb25seSk6CisgICAgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kLCB0emluZm8KKyAgICAiIiIKKworICAgIGRlZiBfX25ld19fKGNscywgaG91cj0wLCBtaW51dGU9MCwgc2Vjb25kPTAsIG1pY3Jvc2Vjb25kPTAsIHR6aW5mbz1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0b3IuCisKKyAgICAgICAgQXJndW1lbnRzOgorCisgICAgICAgIGhvdXIsIG1pbnV0ZSAocmVxdWlyZWQpCisgICAgICAgIHNlY29uZCwgbWljcm9zZWNvbmQgKGRlZmF1bHQgdG8gemVybykKKyAgICAgICAgdHppbmZvIChkZWZhdWx0IHRvIE5vbmUpCisgICAgICAgICIiIgorICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICBpZiBpc2luc3RhbmNlKGhvdXIsIGJ5dGVzKSBhbmQgbGVuKGhvdXIpID09IDY6CisgICAgICAgICAgICAjIFBpY2tsZSBzdXBwb3J0CisgICAgICAgICAgICBzZWxmLl9fc2V0c3RhdGUoaG91ciwgbWludXRlIG9yIE5vbmUpCisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBfY2hlY2tfdHppbmZvX2FyZyh0emluZm8pCisgICAgICAgIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCisgICAgICAgIHNlbGYuX2hvdXIgPSBob3VyCisgICAgICAgIHNlbGYuX21pbnV0ZSA9IG1pbnV0ZQorICAgICAgICBzZWxmLl9zZWNvbmQgPSBzZWNvbmQKKyAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQgPSBtaWNyb3NlY29uZAorICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICMgUmVhZC1vbmx5IGZpZWxkIGFjY2Vzc29ycworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBob3VyKHNlbGYpOgorICAgICAgICAiIiJob3VyICgwLTIzKSIiIgorICAgICAgICByZXR1cm4gc2VsZi5faG91cgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pbnV0ZShzZWxmKToKKyAgICAgICAgIiIibWludXRlICgwLTU5KSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWludXRlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgc2Vjb25kKHNlbGYpOgorICAgICAgICAiIiJzZWNvbmQgKDAtNTkpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zZWNvbmQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBtaWNyb3NlY29uZChzZWxmKToKKyAgICAgICAgIiIibWljcm9zZWNvbmQgKDAtOTk5OTk5KSIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWljcm9zZWNvbmQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0emluZm8oc2VsZik6CisgICAgICAgICIiInRpbWV6b25lIGluZm8gb2JqZWN0IiIiCisgICAgICAgIHJldHVybiBzZWxmLl90emluZm8KKworICAgICMgU3RhbmRhcmQgY29udmVyc2lvbnMsIF9faGFzaF9fIChhbmQgaGVscGVycykKKworICAgICMgQ29tcGFyaXNvbnMgb2YgdGltZSBvYmplY3RzIHdpdGggb3RoZXIuCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpICE9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8PSAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY21wZXJyb3Ioc2VsZiwgb3RoZXIpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID49IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCB0aW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2NtcGVycm9yKHNlbGYsIG90aGVyKQorCisgICAgZGVmIF9jbXAoc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdGhlciwgdGltZSkKKyAgICAgICAgbXl0eiA9IHNlbGYuX3R6aW5mbworICAgICAgICBvdHR6ID0gb3RoZXIuX3R6aW5mbworICAgICAgICBteW9mZiA9IG90b2ZmID0gTm9uZQorCisgICAgICAgIGlmIG15dHogaXMgb3R0ejoKKyAgICAgICAgICAgIGJhc2VfY29tcGFyZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG15b2ZmID0gc2VsZi51dGNvZmZzZXQoKQorICAgICAgICAgICAgb3RvZmYgPSBvdGhlci51dGNvZmZzZXQoKQorICAgICAgICAgICAgYmFzZV9jb21wYXJlID0gbXlvZmYgPT0gb3RvZmYKKworICAgICAgICBpZiBiYXNlX2NvbXBhcmU6CisgICAgICAgICAgICByZXR1cm4gX2NtcCgoc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzZWxmLl9zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIuX2hvdXIsIG90aGVyLl9taW51dGUsIG90aGVyLl9zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlci5fbWljcm9zZWNvbmQpKQorICAgICAgICBpZiBteW9mZiBpcyBOb25lIG9yIG90b2ZmIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhbm5vdCBjb21wYXJlIG5haXZlIGFuZCBhd2FyZSB0aW1lcyIpCisgICAgICAgIG15aGhtbSA9IHNlbGYuX2hvdXIgKiA2MCArIHNlbGYuX21pbnV0ZSAtIG15b2ZmLy90aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICBvdGhobW0gPSBvdGhlci5faG91ciAqIDYwICsgb3RoZXIuX21pbnV0ZSAtIG90b2ZmLy90aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICByZXR1cm4gX2NtcCgobXloaG1tLCBzZWxmLl9zZWNvbmQsIHNlbGYuX21pY3Jvc2Vjb25kKSwKKyAgICAgICAgICAgICAgICAgICAgKG90aGhtbSwgb3RoZXIuX3NlY29uZCwgb3RoZXIuX21pY3Jvc2Vjb25kKSkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgIiIiSGFzaC4iIiIKKyAgICAgICAgdHpvZmYgPSBzZWxmLnV0Y29mZnNldCgpCisgICAgICAgIGlmIG5vdCB0em9mZjogIyB6ZXJvIG9yIE5vbmUKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2dldHN0YXRlKClbMF0pCisgICAgICAgIGgsIG0gPSBkaXZtb2QodGltZWRlbHRhKGhvdXJzPXNlbGYuaG91ciwgbWludXRlcz1zZWxmLm1pbnV0ZSkgLSB0em9mZiwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoaG91cnM9MSkpCisgICAgICAgIGFzc2VydCBub3QgbSAlIHRpbWVkZWx0YShtaW51dGVzPTEpLCAid2hvbGUgbWludXRlIgorICAgICAgICBtIC8vPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICBpZiAwIDw9IGggPCAyNDoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHRpbWUoaCwgbSwgc2VsZi5zZWNvbmQsIHNlbGYubWljcm9zZWNvbmQpKQorICAgICAgICByZXR1cm4gaGFzaCgoaCwgbSwgc2VsZi5zZWNvbmQsIHNlbGYubWljcm9zZWNvbmQpKQorCisgICAgIyBDb252ZXJzaW9uIHRvIHN0cmluZworCisgICAgZGVmIF90enN0cihzZWxmLCBzZXA9IjoiKToKKyAgICAgICAgIiIiUmV0dXJuIGZvcm1hdHRlZCB0aW1lem9uZSBvZmZzZXQgKCt4eDp4eCkgb3IgTm9uZS4iIiIKKyAgICAgICAgb2ZmID0gc2VsZi51dGNvZmZzZXQoKQorICAgICAgICBpZiBvZmYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBvZmYuZGF5cyA8IDA6CisgICAgICAgICAgICAgICAgc2lnbiA9ICItIgorICAgICAgICAgICAgICAgIG9mZiA9IC1vZmYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2lnbiA9ICIrIgorICAgICAgICAgICAgaGgsIG1tID0gZGl2bW9kKG9mZiwgdGltZWRlbHRhKGhvdXJzPTEpKQorICAgICAgICAgICAgYXNzZXJ0IG5vdCBtbSAlIHRpbWVkZWx0YShtaW51dGVzPTEpLCAid2hvbGUgbWludXRlIgorICAgICAgICAgICAgbW0gLy89IHRpbWVkZWx0YShtaW51dGVzPTEpCisgICAgICAgICAgICBhc3NlcnQgMCA8PSBoaCA8IDI0CisgICAgICAgICAgICBvZmYgPSAiJXMlMDJkJXMlMDJkIiAlIChzaWduLCBoaCwgc2VwLCBtbSkKKyAgICAgICAgcmV0dXJuIG9mZgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAiIiJDb252ZXJ0IHRvIGZvcm1hbCBzdHJpbmcsIGZvciByZXByKCkuIiIiCisgICAgICAgIGlmIHNlbGYuX21pY3Jvc2Vjb25kICE9IDA6CisgICAgICAgICAgICBzID0gIiwgJWQsICVkIiAlIChzZWxmLl9zZWNvbmQsIHNlbGYuX21pY3Jvc2Vjb25kKQorICAgICAgICBlbGlmIHNlbGYuX3NlY29uZCAhPSAwOgorICAgICAgICAgICAgcyA9ICIsICVkIiAlIHNlbGYuX3NlY29uZAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcyA9ICIiCisgICAgICAgIHM9ICIlcyglZCwgJWQlcykiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgcykKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IHNbLTE6XSA9PSAiKSIKKyAgICAgICAgICAgIHMgPSBzWzotMV0gKyAiLCB0emluZm89JXIiICUgc2VsZi5fdHppbmZvICsgIikiCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHRpbWUgZm9ybWF0dGVkIGFjY29yZGluZyB0byBJU08uCisKKyAgICAgICAgVGhpcyBpcyAnSEg6TU06U1MubW1tbW1tK3p6Onp6Jywgb3IgJ0hIOk1NOlNTK3p6Onp6JyBpZgorICAgICAgICBzZWxmLm1pY3Jvc2Vjb25kID09IDAuCisgICAgICAgICIiIgorICAgICAgICBzID0gX2Zvcm1hdF90aW1lKHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kKQorICAgICAgICB0eiA9IHNlbGYuX3R6c3RyKCkKKyAgICAgICAgaWYgdHo6CisgICAgICAgICAgICBzICs9IHR6CisgICAgICAgIHJldHVybiBzCisKKyAgICBfX3N0cl9fID0gaXNvZm9ybWF0CisKKyAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm10KToKKyAgICAgICAgIiIiRm9ybWF0IHVzaW5nIHN0cmZ0aW1lKCkuICBUaGUgZGF0ZSBwYXJ0IG9mIHRoZSB0aW1lc3RhbXAgcGFzc2VkCisgICAgICAgIHRvIHVuZGVybHlpbmcgc3RyZnRpbWUgc2hvdWxkIG5vdCBiZSB1c2VkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgeWVhciBtdXN0IGJlID49IDEwMDAgZWxzZSBQeXRob24ncyBzdHJmdGltZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIGNhbiByYWlzZSBhIGJvZ3VzIGV4Y2VwdGlvbi4KKyAgICAgICAgdGltZXR1cGxlID0gKDE5MDAsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDEsIC0xKQorICAgICAgICByZXR1cm4gX3dyYXBfc3RyZnRpbWUoc2VsZiwgZm10LCB0aW1ldHVwbGUpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmbXQpOgorICAgICAgICBpZiBsZW4oZm10KSAhPSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RyZnRpbWUoZm10KQorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyAgICAjIFRpbWV6b25lIGZ1bmN0aW9ucworCisgICAgZGVmIHV0Y29mZnNldChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lem9uZSBvZmZzZXQgaW4gbWludXRlcyBlYXN0IG9mIFVUQyAobmVnYXRpdmUgd2VzdCBvZgorICAgICAgICBVVEMpLiIiIgorICAgICAgICBpZiBzZWxmLl90emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG9mZnNldCA9IHNlbGYuX3R6aW5mby51dGNvZmZzZXQoTm9uZSkKKyAgICAgICAgX2NoZWNrX3V0Y19vZmZzZXQoInV0Y29mZnNldCIsIG9mZnNldCkKKyAgICAgICAgcmV0dXJuIG9mZnNldAorCisgICAgZGVmIHR6bmFtZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lem9uZSBuYW1lLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgbmFtZSBpcyAxMDAlIGluZm9ybWF0aW9uYWwgLS0gdGhlcmUncyBubyByZXF1aXJlbWVudCB0aGF0CisgICAgICAgIGl0IG1lYW4gYW55dGhpbmcgaW4gcGFydGljdWxhci4gRm9yIGV4YW1wbGUsICJHTVQiLCAiVVRDIiwgIi01MDAiLAorICAgICAgICAiLTU6MDAiLCAiRURUIiwgIlVTL0Vhc3Rlcm4iLCAiQW1lcmljYS9OZXcgWW9yayIgYXJlIGFsbCB2YWxpZCByZXBsaWVzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBuYW1lID0gc2VsZi5fdHppbmZvLnR6bmFtZShOb25lKQorICAgICAgICBfY2hlY2tfdHpuYW1lKG5hbWUpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgZHN0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gMCBpZiBEU1QgaXMgbm90IGluIGVmZmVjdCwgb3IgdGhlIERTVCBvZmZzZXQgKGluIG1pbnV0ZXMKKyAgICAgICAgZWFzdHdhcmQpIGlmIERTVCBpcyBpbiBlZmZlY3QuCisKKyAgICAgICAgVGhpcyBpcyBwdXJlbHkgaW5mb3JtYXRpb25hbDsgdGhlIERTVCBvZmZzZXQgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0bworICAgICAgICB0aGUgVVRDIG9mZnNldCByZXR1cm5lZCBieSB1dGNvZmZzZXQoKSBpZiBhcHBsaWNhYmxlLCBzbyB0aGVyZSdzIG5vCisgICAgICAgIG5lZWQgdG8gY29uc3VsdCBkc3QoKSB1bmxlc3MgeW91J3JlIGludGVyZXN0ZWQgaW4gZGlzcGxheWluZyB0aGUgRFNUCisgICAgICAgIGluZm8uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl90emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIG9mZnNldCA9IHNlbGYuX3R6aW5mby5kc3QoTm9uZSkKKyAgICAgICAgX2NoZWNrX3V0Y19vZmZzZXQoImRzdCIsIG9mZnNldCkKKyAgICAgICAgcmV0dXJuIG9mZnNldAorCisgICAgZGVmIHJlcGxhY2Uoc2VsZiwgaG91cj1Ob25lLCBtaW51dGU9Tm9uZSwgc2Vjb25kPU5vbmUsIG1pY3Jvc2Vjb25kPU5vbmUsCisgICAgICAgICAgICAgICAgdHppbmZvPVRydWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgdGltZSB3aXRoIG5ldyB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRzLiIiIgorICAgICAgICBpZiBob3VyIGlzIE5vbmU6CisgICAgICAgICAgICBob3VyID0gc2VsZi5ob3VyCisgICAgICAgIGlmIG1pbnV0ZSBpcyBOb25lOgorICAgICAgICAgICAgbWludXRlID0gc2VsZi5taW51dGUKKyAgICAgICAgaWYgc2Vjb25kIGlzIE5vbmU6CisgICAgICAgICAgICBzZWNvbmQgPSBzZWxmLnNlY29uZAorICAgICAgICBpZiBtaWNyb3NlY29uZCBpcyBOb25lOgorICAgICAgICAgICAgbWljcm9zZWNvbmQgPSBzZWxmLm1pY3Jvc2Vjb25kCisgICAgICAgIGlmIHR6aW5mbyBpcyBUcnVlOgorICAgICAgICAgICAgdHppbmZvID0gc2VsZi50emluZm8KKyAgICAgICAgX2NoZWNrX3RpbWVfZmllbGRzKGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWNyb3NlY29uZCkKKyAgICAgICAgX2NoZWNrX3R6aW5mb19hcmcodHppbmZvKQorICAgICAgICByZXR1cm4gdGltZShob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQsIHR6aW5mbykKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zZWNvbmQgb3Igc2VsZi5taWNyb3NlY29uZDoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIG9mZnNldCA9IHNlbGYudXRjb2Zmc2V0KCkgb3IgdGltZWRlbHRhKDApCisgICAgICAgIHJldHVybiB0aW1lZGVsdGEoaG91cnM9c2VsZi5ob3VyLCBtaW51dGVzPXNlbGYubWludXRlKSAhPSBvZmZzZXQKKworICAgICMgUGlja2xlIHN1cHBvcnQuCisKKyAgICBkZWYgX2dldHN0YXRlKHNlbGYpOgorICAgICAgICB1czIsIHVzMyA9IGRpdm1vZChzZWxmLl9taWNyb3NlY29uZCwgMjU2KQorICAgICAgICB1czEsIHVzMiA9IGRpdm1vZCh1czIsIDI1NikKKyAgICAgICAgYmFzZXN0YXRlID0gYnl0ZXMoW3NlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdXMxLCB1czIsIHVzM10pCisgICAgICAgIGlmIHNlbGYuX3R6aW5mbyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIChiYXNlc3RhdGUsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIChiYXNlc3RhdGUsIHNlbGYuX3R6aW5mbykKKworICAgIGRlZiBfX3NldHN0YXRlKHNlbGYsIHN0cmluZywgdHppbmZvKToKKyAgICAgICAgaWYgbGVuKHN0cmluZykgIT0gNiBvciBzdHJpbmdbMF0gPj0gMjQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKQorICAgICAgICAoc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzZWxmLl9zZWNvbmQsCisgICAgICAgICB1czEsIHVzMiwgdXMzKSA9IHN0cmluZworICAgICAgICBzZWxmLl9taWNyb3NlY29uZCA9ICgoKHVzMSA8PCA4KSB8IHVzMikgPDwgOCkgfCB1czMKKyAgICAgICAgaWYgdHppbmZvIGlzIE5vbmUgb3IgaXNpbnN0YW5jZSh0emluZm8sIF90emluZm9fY2xhc3MpOgorICAgICAgICAgICAgc2VsZi5fdHppbmZvID0gdHppbmZvCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJhZCB0emluZm8gc3RhdGUgYXJnICVyIiAlIHR6aW5mbykKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKHRpbWUsIHNlbGYuX2dldHN0YXRlKCkpCisKK190aW1lX2NsYXNzID0gdGltZSAgIyBzbyBmdW5jdGlvbnMgdy8gYXJncyBuYW1lZCAidGltZSIgY2FuIGdldCBhdCB0aGUgY2xhc3MKKwordGltZS5taW4gPSB0aW1lKDAsIDAsIDApCit0aW1lLm1heCA9IHRpbWUoMjMsIDU5LCA1OSwgOTk5OTk5KQordGltZS5yZXNvbHV0aW9uID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKQorCitjbGFzcyBkYXRldGltZShkYXRlKToKKyAgICAiIiJkYXRldGltZSh5ZWFyLCBtb250aCwgZGF5WywgaG91clssIG1pbnV0ZVssIHNlY29uZFssIG1pY3Jvc2Vjb25kWyx0emluZm9dXV1dXSkKKworICAgIFRoZSB5ZWFyLCBtb250aCBhbmQgZGF5IGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQuIHR6aW5mbyBtYXkgYmUgTm9uZSwgb3IgYW4KKyAgICBpbnN0YW5jZSBvZiBhIHR6aW5mbyBzdWJjbGFzcy4gVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgbWF5IGJlIGludHMgb3IgbG9uZ3MuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSBkYXRlLl9fc2xvdHNfXyArICgKKyAgICAgICAgJ19ob3VyJywgJ19taW51dGUnLCAnX3NlY29uZCcsCisgICAgICAgICdfbWljcm9zZWNvbmQnLCAnX3R6aW5mbycpCisgICAgZGVmIF9fbmV3X18oY2xzLCB5ZWFyLCBtb250aD1Ob25lLCBkYXk9Tm9uZSwgaG91cj0wLCBtaW51dGU9MCwgc2Vjb25kPTAsCisgICAgICAgICAgICAgICAgbWljcm9zZWNvbmQ9MCwgdHppbmZvPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHllYXIsIGJ5dGVzKSBhbmQgbGVuKHllYXIpID09IDEwOgorICAgICAgICAgICAgIyBQaWNrbGUgc3VwcG9ydAorICAgICAgICAgICAgc2VsZiA9IGRhdGUuX19uZXdfXyhjbHMsIHllYXJbOjRdKQorICAgICAgICAgICAgc2VsZi5fX3NldHN0YXRlKHllYXIsIG1vbnRoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgX2NoZWNrX3R6aW5mb19hcmcodHppbmZvKQorICAgICAgICBfY2hlY2tfdGltZV9maWVsZHMoaG91ciwgbWludXRlLCBzZWNvbmQsIG1pY3Jvc2Vjb25kKQorICAgICAgICBzZWxmID0gZGF0ZS5fX25ld19fKGNscywgeWVhciwgbW9udGgsIGRheSkKKyAgICAgICAgc2VsZi5faG91ciA9IGhvdXIKKyAgICAgICAgc2VsZi5fbWludXRlID0gbWludXRlCisgICAgICAgIHNlbGYuX3NlY29uZCA9IHNlY29uZAorICAgICAgICBzZWxmLl9taWNyb3NlY29uZCA9IG1pY3Jvc2Vjb25kCisgICAgICAgIHNlbGYuX3R6aW5mbyA9IHR6aW5mbworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgIyBSZWFkLW9ubHkgZmllbGQgYWNjZXNzb3JzCisgICAgQHByb3BlcnR5CisgICAgZGVmIGhvdXIoc2VsZik6CisgICAgICAgICIiImhvdXIgKDAtMjMpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ob3VyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWludXRlKHNlbGYpOgorICAgICAgICAiIiJtaW51dGUgKDAtNTkpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9taW51dGUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzZWNvbmQoc2VsZik6CisgICAgICAgICIiInNlY29uZCAoMC01OSkiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlY29uZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG1pY3Jvc2Vjb25kKHNlbGYpOgorICAgICAgICAiIiJtaWNyb3NlY29uZCAoMC05OTk5OTkpIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9taWNyb3NlY29uZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHR6aW5mbyhzZWxmKToKKyAgICAgICAgIiIidGltZXpvbmUgaW5mbyBvYmplY3QiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3R6aW5mbworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb210aW1lc3RhbXAoY2xzLCB0LCB0ej1Ob25lKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgZGF0ZXRpbWUgZnJvbSBhIFBPU0lYIHRpbWVzdGFtcCAobGlrZSB0aW1lLnRpbWUoKSkuCisKKyAgICAgICAgQSB0aW1lem9uZSBpbmZvIG9iamVjdCBtYXkgYmUgcGFzc2VkIGluIGFzIHdlbGwuCisgICAgICAgICIiIgorCisgICAgICAgIF9jaGVja190emluZm9fYXJnKHR6KQorCisgICAgICAgIGNvbnZlcnRlciA9IF90aW1lLmxvY2FsdGltZSBpZiB0eiBpcyBOb25lIGVsc2UgX3RpbWUuZ210aW1lCisKKyAgICAgICAgdCwgZnJhYyA9IGRpdm1vZCh0LCAxLjApCisgICAgICAgIHVzID0gcm91bmQoZnJhYyAqIDFlNikKKworICAgICAgICAjIElmIHRpbWVzdGFtcCBpcyBsZXNzIHRoYW4gb25lIG1pY3Jvc2Vjb25kIHNtYWxsZXIgdGhhbiBhCisgICAgICAgICMgZnVsbCBzZWNvbmQsIHVzIGNhbiBiZSByb3VuZGVkIHVwIHRvIDEwMDAwMDAuICBJbiB0aGlzIGNhc2UsCisgICAgICAgICMgcm9sbCBvdmVyIHRvIHNlY29uZHMsIG90aGVyd2lzZSwgVmFsdWVFcnJvciBpcyByYWlzZWQKKyAgICAgICAgIyBieSB0aGUgY29uc3RydWN0b3IuCisgICAgICAgIGlmIHVzID09IDEwMDAwMDA6CisgICAgICAgICAgICB0ICs9IDEKKyAgICAgICAgICAgIHVzID0gMAorICAgICAgICB5LCBtLCBkLCBoaCwgbW0sIHNzLCB3ZWVrZGF5LCBqZGF5LCBkc3QgPSBjb252ZXJ0ZXIodCkKKyAgICAgICAgc3MgPSBtaW4oc3MsIDU5KSAgICAjIGNsYW1wIG91dCBsZWFwIHNlY29uZHMgaWYgdGhlIHBsYXRmb3JtIGhhcyB0aGVtCisgICAgICAgIHJlc3VsdCA9IGNscyh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cywgdHopCisgICAgICAgIGlmIHR6IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gdHouZnJvbXV0YyhyZXN1bHQpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB1dGNmcm9tdGltZXN0YW1wKGNscywgdCk6CisgICAgICAgICJDb25zdHJ1Y3QgYSBVVEMgZGF0ZXRpbWUgZnJvbSBhIFBPU0lYIHRpbWVzdGFtcCAobGlrZSB0aW1lLnRpbWUoKSkuIgorICAgICAgICB0LCBmcmFjID0gZGl2bW9kKHQsIDEuMCkKKyAgICAgICAgdXMgPSByb3VuZChmcmFjICogMWU2KQorCisgICAgICAgICMgSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKKyAgICAgICAgIyBmdWxsIHNlY29uZCwgdXMgY2FuIGJlIHJvdW5kZWQgdXAgdG8gMTAwMDAwMC4gIEluIHRoaXMgY2FzZSwKKyAgICAgICAgIyByb2xsIG92ZXIgdG8gc2Vjb25kcywgb3RoZXJ3aXNlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZAorICAgICAgICAjIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgdXMgPT0gMTAwMDAwMDoKKyAgICAgICAgICAgIHQgKz0gMQorICAgICAgICAgICAgdXMgPSAwCisgICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IF90aW1lLmdtdGltZSh0KQorICAgICAgICBzcyA9IG1pbihzcywgNTkpICAgICMgY2xhbXAgb3V0IGxlYXAgc2Vjb25kcyBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZW0KKyAgICAgICAgcmV0dXJuIGNscyh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cykKKworICAgICMgWFhYIFRoaXMgaXMgc3VwcG9zZWQgdG8gZG8gYmV0dGVyIHRoYW4gd2UgKmNhbiogZG8gYnkgdXNpbmcgdGltZS50aW1lKCksCisgICAgIyBYWFggaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIGEgbW9yZSBhY2N1cmF0ZSB3YXkuICBUaGUgQyBpbXBsZW1lbnRhdGlvbgorICAgICMgWFhYIHVzZXMgZ2V0dGltZW9mZGF5IG9uIHBsYXRmb3JtcyB0aGF0IGhhdmUgaXQsIGJ1dCB0aGF0IGlzbid0CisgICAgIyBYWFggYXZhaWxhYmxlIGZyb20gUHl0aG9uLiAgU28gbm93KCkgbWF5IHJldHVybiBkaWZmZXJlbnQgcmVzdWx0cworICAgICMgWFhYIGFjcm9zcyB0aGUgaW1wbGVtZW50YXRpb25zLgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBub3coY2xzLCB0ej1Ob25lKToKKyAgICAgICAgIkNvbnN0cnVjdCBhIGRhdGV0aW1lIGZyb20gdGltZS50aW1lKCkgYW5kIG9wdGlvbmFsIHRpbWUgem9uZSBpbmZvLiIKKyAgICAgICAgdCA9IF90aW1lLnRpbWUoKQorICAgICAgICByZXR1cm4gY2xzLmZyb210aW1lc3RhbXAodCwgdHopCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdXRjbm93KGNscyk6CisgICAgICAgICJDb25zdHJ1Y3QgYSBVVEMgZGF0ZXRpbWUgZnJvbSB0aW1lLnRpbWUoKS4iCisgICAgICAgIHQgPSBfdGltZS50aW1lKCkKKyAgICAgICAgcmV0dXJuIGNscy51dGNmcm9tdGltZXN0YW1wKHQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY29tYmluZShjbHMsIGRhdGUsIHRpbWUpOgorICAgICAgICAiQ29uc3RydWN0IGEgZGF0ZXRpbWUgZnJvbSBhIGdpdmVuIGRhdGUgYW5kIGEgZ2l2ZW4gdGltZS4iCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGUsIF9kYXRlX2NsYXNzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGF0ZSBhcmd1bWVudCBtdXN0IGJlIGEgZGF0ZSBpbnN0YW5jZSIpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRpbWUsIF90aW1lX2NsYXNzKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGltZSBhcmd1bWVudCBtdXN0IGJlIGEgdGltZSBpbnN0YW5jZSIpCisgICAgICAgIHJldHVybiBjbHMoZGF0ZS55ZWFyLCBkYXRlLm1vbnRoLCBkYXRlLmRheSwKKyAgICAgICAgICAgICAgICAgICB0aW1lLmhvdXIsIHRpbWUubWludXRlLCB0aW1lLnNlY29uZCwgdGltZS5taWNyb3NlY29uZCwKKyAgICAgICAgICAgICAgICAgICB0aW1lLnR6aW5mbykKKworICAgIGRlZiB0aW1ldHVwbGUoc2VsZik6CisgICAgICAgICJSZXR1cm4gbG9jYWwgdGltZSB0dXBsZSBjb21wYXRpYmxlIHdpdGggdGltZS5sb2NhbHRpbWUoKS4iCisgICAgICAgIGRzdCA9IHNlbGYuZHN0KCkKKyAgICAgICAgaWYgZHN0IGlzIE5vbmU6CisgICAgICAgICAgICBkc3QgPSAtMQorICAgICAgICBlbGlmIGRzdDoKKyAgICAgICAgICAgIGRzdCA9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRzdCA9IDAKKyAgICAgICAgcmV0dXJuIF9idWlsZF9zdHJ1Y3RfdGltZShzZWxmLnllYXIsIHNlbGYubW9udGgsIHNlbGYuZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaG91ciwgc2VsZi5taW51dGUsIHNlbGYuc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdCkKKworICAgIGRlZiB1dGN0aW1ldHVwbGUoc2VsZik6CisgICAgICAgICJSZXR1cm4gVVRDIHRpbWUgdHVwbGUgY29tcGF0aWJsZSB3aXRoIHRpbWUuZ210aW1lKCkuIgorICAgICAgICBvZmZzZXQgPSBzZWxmLnV0Y29mZnNldCgpCisgICAgICAgIGlmIG9mZnNldDoKKyAgICAgICAgICAgIHNlbGYgLT0gb2Zmc2V0CisgICAgICAgIHksIG0sIGQgPSBzZWxmLnllYXIsIHNlbGYubW9udGgsIHNlbGYuZGF5CisgICAgICAgIGhoLCBtbSwgc3MgPSBzZWxmLmhvdXIsIHNlbGYubWludXRlLCBzZWxmLnNlY29uZAorICAgICAgICByZXR1cm4gX2J1aWxkX3N0cnVjdF90aW1lKHksIG0sIGQsIGhoLCBtbSwgc3MsIDApCisKKyAgICBkZWYgZGF0ZShzZWxmKToKKyAgICAgICAgIlJldHVybiB0aGUgZGF0ZSBwYXJ0LiIKKyAgICAgICAgcmV0dXJuIGRhdGUoc2VsZi5feWVhciwgc2VsZi5fbW9udGgsIHNlbGYuX2RheSkKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICAiUmV0dXJuIHRoZSB0aW1lIHBhcnQsIHdpdGggdHppbmZvIE5vbmUuIgorICAgICAgICByZXR1cm4gdGltZShzZWxmLmhvdXIsIHNlbGYubWludXRlLCBzZWxmLnNlY29uZCwgc2VsZi5taWNyb3NlY29uZCkKKworICAgIGRlZiB0aW1ldHooc2VsZik6CisgICAgICAgICJSZXR1cm4gdGhlIHRpbWUgcGFydCwgd2l0aCBzYW1lIHR6aW5mby4iCisgICAgICAgIHJldHVybiB0aW1lKHNlbGYuaG91ciwgc2VsZi5taW51dGUsIHNlbGYuc2Vjb25kLCBzZWxmLm1pY3Jvc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICBzZWxmLl90emluZm8pCisKKyAgICBkZWYgcmVwbGFjZShzZWxmLCB5ZWFyPU5vbmUsIG1vbnRoPU5vbmUsIGRheT1Ob25lLCBob3VyPU5vbmUsCisgICAgICAgICAgICAgICAgbWludXRlPU5vbmUsIHNlY29uZD1Ob25lLCBtaWNyb3NlY29uZD1Ob25lLCB0emluZm89VHJ1ZSk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBkYXRldGltZSB3aXRoIG5ldyB2YWx1ZXMgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRzLiIiIgorICAgICAgICBpZiB5ZWFyIGlzIE5vbmU6CisgICAgICAgICAgICB5ZWFyID0gc2VsZi55ZWFyCisgICAgICAgIGlmIG1vbnRoIGlzIE5vbmU6CisgICAgICAgICAgICBtb250aCA9IHNlbGYubW9udGgKKyAgICAgICAgaWYgZGF5IGlzIE5vbmU6CisgICAgICAgICAgICBkYXkgPSBzZWxmLmRheQorICAgICAgICBpZiBob3VyIGlzIE5vbmU6CisgICAgICAgICAgICBob3VyID0gc2VsZi5ob3VyCisgICAgICAgIGlmIG1pbnV0ZSBpcyBOb25lOgorICAgICAgICAgICAgbWludXRlID0gc2VsZi5taW51dGUKKyAgICAgICAgaWYgc2Vjb25kIGlzIE5vbmU6CisgICAgICAgICAgICBzZWNvbmQgPSBzZWxmLnNlY29uZAorICAgICAgICBpZiBtaWNyb3NlY29uZCBpcyBOb25lOgorICAgICAgICAgICAgbWljcm9zZWNvbmQgPSBzZWxmLm1pY3Jvc2Vjb25kCisgICAgICAgIGlmIHR6aW5mbyBpcyBUcnVlOgorICAgICAgICAgICAgdHppbmZvID0gc2VsZi50emluZm8KKyAgICAgICAgX2NoZWNrX2RhdGVfZmllbGRzKHllYXIsIG1vbnRoLCBkYXkpCisgICAgICAgIF9jaGVja190aW1lX2ZpZWxkcyhob3VyLCBtaW51dGUsIHNlY29uZCwgbWljcm9zZWNvbmQpCisgICAgICAgIF9jaGVja190emluZm9fYXJnKHR6aW5mbykKKyAgICAgICAgcmV0dXJuIGRhdGV0aW1lKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZCwgdHppbmZvKQorCisgICAgZGVmIGFzdGltZXpvbmUoc2VsZiwgdHopOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0eiwgdHppbmZvKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidHogYXJndW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiB0emluZm8iKQorCisgICAgICAgIG15dHogPSBzZWxmLnR6aW5mbworICAgICAgICBpZiBteXR6IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhc3RpbWV6b25lKCkgcmVxdWlyZXMgYW4gYXdhcmUgZGF0ZXRpbWUiKQorCisgICAgICAgIGlmIHR6IGlzIG15dHo6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgICMgQ29udmVydCBzZWxmIHRvIFVUQywgYW5kIGF0dGFjaCB0aGUgbmV3IHRpbWUgem9uZSBvYmplY3QuCisgICAgICAgIG15b2Zmc2V0ID0gc2VsZi51dGNvZmZzZXQoKQorICAgICAgICBpZiBteW9mZnNldCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXN0aW1lem9uZSgpIHJlcXVpcmVzIGFuIGF3YXJlIGRhdGV0aW1lIikKKyAgICAgICAgdXRjID0gKHNlbGYgLSBteW9mZnNldCkucmVwbGFjZSh0emluZm89dHopCisKKyAgICAgICAgIyBDb252ZXJ0IGZyb20gVVRDIHRvIHR6J3MgbG9jYWwgdGltZS4KKyAgICAgICAgcmV0dXJuIHR6LmZyb211dGModXRjKQorCisgICAgIyBXYXlzIHRvIHByb2R1Y2UgYSBzdHJpbmcuCisKKyAgICBkZWYgY3RpbWUoc2VsZik6CisgICAgICAgICJSZXR1cm4gY3RpbWUoKSBzdHlsZSBzdHJpbmcuIgorICAgICAgICB3ZWVrZGF5ID0gc2VsZi50b29yZGluYWwoKSAlIDcgb3IgNworICAgICAgICByZXR1cm4gIiVzICVzICUyZCAlMDJkOiUwMmQ6JTAyZCAlMDRkIiAlICgKKyAgICAgICAgICAgIF9EQVlOQU1FU1t3ZWVrZGF5XSwKKyAgICAgICAgICAgIF9NT05USE5BTUVTW3NlbGYuX21vbnRoXSwKKyAgICAgICAgICAgIHNlbGYuX2RheSwKKyAgICAgICAgICAgIHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLAorICAgICAgICAgICAgc2VsZi5feWVhcikKKworICAgIGRlZiBpc29mb3JtYXQoc2VsZiwgc2VwPSdUJyk6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZSBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIElTTy4KKworICAgICAgICBUaGlzIGlzICdZWVlZLU1NLUREIEhIOk1NOlNTLm1tbW1tbScsIG9yICdZWVlZLU1NLUREIEhIOk1NOlNTJyBpZgorICAgICAgICBzZWxmLm1pY3Jvc2Vjb25kID09IDAuCisKKyAgICAgICAgSWYgc2VsZi50emluZm8gaXMgbm90IE5vbmUsIHRoZSBVVEMgb2Zmc2V0IGlzIGFsc28gYXR0YWNoZWQsIGdpdmluZworICAgICAgICAnWVlZWS1NTS1ERCBISDpNTTpTUy5tbW1tbW0rSEg6TU0nIG9yICdZWVlZLU1NLUREIEhIOk1NOlNTK0hIOk1NJy4KKworICAgICAgICBPcHRpb25hbCBhcmd1bWVudCBzZXAgc3BlY2lmaWVzIHRoZSBzZXBhcmF0b3IgYmV0d2VlbiBkYXRlIGFuZAorICAgICAgICB0aW1lLCBkZWZhdWx0ICdUJy4KKyAgICAgICAgIiIiCisgICAgICAgIHMgPSAoIiUwNGQtJTAyZC0lMDJkJWMiICUgKHNlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwKSArCisgICAgICAgICAgICAgICAgX2Zvcm1hdF90aW1lKHNlbGYuX2hvdXIsIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZCkpCisgICAgICAgIG9mZiA9IHNlbGYudXRjb2Zmc2V0KCkKKyAgICAgICAgaWYgb2ZmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgb2ZmLmRheXMgPCAwOgorICAgICAgICAgICAgICAgIHNpZ24gPSAiLSIKKyAgICAgICAgICAgICAgICBvZmYgPSAtb2ZmCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNpZ24gPSAiKyIKKyAgICAgICAgICAgIGhoLCBtbSA9IGRpdm1vZChvZmYsIHRpbWVkZWx0YShob3Vycz0xKSkKKyAgICAgICAgICAgIGFzc2VydCBub3QgbW0gJSB0aW1lZGVsdGEobWludXRlcz0xKSwgIndob2xlIG1pbnV0ZSIKKyAgICAgICAgICAgIG1tIC8vPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICAgICAgcyArPSAiJXMlMDJkOiUwMmQiICUgKHNpZ24sIGhoLCBtbSkKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCB0byBmb3JtYWwgc3RyaW5nLCBmb3IgcmVwcigpLiIiIgorICAgICAgICBMID0gW3NlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksICMgVGhlc2UgYXJlIG5ldmVyIHplcm8KKyAgICAgICAgICAgICBzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwgc2VsZi5fbWljcm9zZWNvbmRdCisgICAgICAgIGlmIExbLTFdID09IDA6CisgICAgICAgICAgICBkZWwgTFstMV0KKyAgICAgICAgaWYgTFstMV0gPT0gMDoKKyAgICAgICAgICAgIGRlbCBMWy0xXQorICAgICAgICBzID0gIiwgIi5qb2luKG1hcChzdHIsIEwpKQorICAgICAgICBzID0gIiVzKCVzKSIgJSAoJ2RhdGV0aW1lLicgKyBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgcykKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgYXNzZXJ0IHNbLTE6XSA9PSAiKSIKKyAgICAgICAgICAgIHMgPSBzWzotMV0gKyAiLCB0emluZm89JXIiICUgc2VsZi5fdHppbmZvICsgIikiCisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgIkNvbnZlcnQgdG8gc3RyaW5nLCBmb3Igc3RyKCkuIgorICAgICAgICByZXR1cm4gc2VsZi5pc29mb3JtYXQoc2VwPScgJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdHJwdGltZShjbHMsIGRhdGVfc3RyaW5nLCBmb3JtYXQpOgorICAgICAgICAnc3RyaW5nLCBmb3JtYXQgLT4gbmV3IGRhdGV0aW1lIHBhcnNlZCBmcm9tIGEgc3RyaW5nIChsaWtlIHRpbWUuc3RycHRpbWUoKSkuJworICAgICAgICBpbXBvcnQgX3N0cnB0aW1lCisgICAgICAgIHJldHVybiBfc3RycHRpbWUuX3N0cnB0aW1lX2RhdGV0aW1lKGNscywgZGF0ZV9zdHJpbmcsIGZvcm1hdCkKKworICAgIGRlZiB1dGNvZmZzZXQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIG1pbnV0ZXMgZWFzdCBvZiBVVEMgKG5lZ2F0aXZlIHdlc3Qgb2YKKyAgICAgICAgVVRDKS4iIiIKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBvZmZzZXQgPSBzZWxmLl90emluZm8udXRjb2Zmc2V0KHNlbGYpCisgICAgICAgIF9jaGVja191dGNfb2Zmc2V0KCJ1dGNvZmZzZXQiLCBvZmZzZXQpCisgICAgICAgIHJldHVybiBvZmZzZXQKKworICAgIGRlZiB0em5hbWUoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgdGltZXpvbmUgbmFtZS4KKworICAgICAgICBOb3RlIHRoYXQgdGhlIG5hbWUgaXMgMTAwJSBpbmZvcm1hdGlvbmFsIC0tIHRoZXJlJ3Mgbm8gcmVxdWlyZW1lbnQgdGhhdAorICAgICAgICBpdCBtZWFuIGFueXRoaW5nIGluIHBhcnRpY3VsYXIuIEZvciBleGFtcGxlLCAiR01UIiwgIlVUQyIsICItNTAwIiwKKyAgICAgICAgIi01OjAwIiwgIkVEVCIsICJVUy9FYXN0ZXJuIiwgIkFtZXJpY2EvTmV3IFlvcmsiIGFyZSBhbGwgdmFsaWQgcmVwbGllcy4KKyAgICAgICAgIiIiCisgICAgICAgIG5hbWUgPSBfY2FsbF90emluZm9fbWV0aG9kKHNlbGYuX3R6aW5mbywgInR6bmFtZSIsIHNlbGYpCisgICAgICAgIF9jaGVja190em5hbWUobmFtZSkKKyAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiBkc3Qoc2VsZik6CisgICAgICAgICIiIlJldHVybiAwIGlmIERTVCBpcyBub3QgaW4gZWZmZWN0LCBvciB0aGUgRFNUIG9mZnNldCAoaW4gbWludXRlcworICAgICAgICBlYXN0d2FyZCkgaWYgRFNUIGlzIGluIGVmZmVjdC4KKworICAgICAgICBUaGlzIGlzIHB1cmVseSBpbmZvcm1hdGlvbmFsOyB0aGUgRFNUIG9mZnNldCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvCisgICAgICAgIHRoZSBVVEMgb2Zmc2V0IHJldHVybmVkIGJ5IHV0Y29mZnNldCgpIGlmIGFwcGxpY2FibGUsIHNvIHRoZXJlJ3Mgbm8KKyAgICAgICAgbmVlZCB0byBjb25zdWx0IGRzdCgpIHVubGVzcyB5b3UncmUgaW50ZXJlc3RlZCBpbiBkaXNwbGF5aW5nIHRoZSBEU1QKKyAgICAgICAgaW5mby4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3R6aW5mbyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5fdHppbmZvLmRzdChzZWxmKQorICAgICAgICBfY2hlY2tfdXRjX29mZnNldCgiZHN0Iiwgb2Zmc2V0KQorICAgICAgICByZXR1cm4gb2Zmc2V0CisKKyAgICAjIENvbXBhcmlzb25zIG9mIGRhdGV0aW1lIG9iamVjdHMgd2l0aCBvdGhlci4KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSAhPSAwCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGRhdGV0aW1lKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA8IDAKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgZGF0ZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jbXBlcnJvcihzZWxmLCBvdGhlcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+PSAwCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY21wZXJyb3Ioc2VsZiwgb3RoZXIpCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZGF0ZXRpbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NtcChvdGhlcikgPiAwCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIGRhdGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfY21wZXJyb3Ioc2VsZiwgb3RoZXIpCisKKyAgICBkZWYgX2NtcChzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG90aGVyLCBkYXRldGltZSkKKyAgICAgICAgbXl0eiA9IHNlbGYuX3R6aW5mbworICAgICAgICBvdHR6ID0gb3RoZXIuX3R6aW5mbworICAgICAgICBteW9mZiA9IG90b2ZmID0gTm9uZQorCisgICAgICAgIGlmIG15dHogaXMgb3R0ejoKKyAgICAgICAgICAgIGJhc2VfY29tcGFyZSA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG15dHogaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbXlvZmYgPSBzZWxmLnV0Y29mZnNldCgpCisgICAgICAgICAgICBpZiBvdHR6IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG90b2ZmID0gb3RoZXIudXRjb2Zmc2V0KCkKKyAgICAgICAgICAgIGJhc2VfY29tcGFyZSA9IG15b2ZmID09IG90b2ZmCisKKyAgICAgICAgaWYgYmFzZV9jb21wYXJlOgorICAgICAgICAgICAgcmV0dXJuIF9jbXAoKHNlbGYuX3llYXIsIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faG91ciwgc2VsZi5fbWludXRlLCBzZWxmLl9zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWljcm9zZWNvbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAob3RoZXIuX3llYXIsIG90aGVyLl9tb250aCwgb3RoZXIuX2RheSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLl9ob3VyLCBvdGhlci5fbWludXRlLCBvdGhlci5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIuX21pY3Jvc2Vjb25kKSkKKyAgICAgICAgaWYgbXlvZmYgaXMgTm9uZSBvciBvdG9mZiBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJjYW5ub3QgY29tcGFyZSBuYWl2ZSBhbmQgYXdhcmUgZGF0ZXRpbWVzIikKKyAgICAgICAgIyBYWFggV2hhdCBmb2xsb3dzIGNvdWxkIGJlIGRvbmUgbW9yZSBlZmZpY2llbnRseS4uLgorICAgICAgICBkaWZmID0gc2VsZiAtIG90aGVyICAgICAjIHRoaXMgd2lsbCB0YWtlIG9mZnNldHMgaW50byBhY2NvdW50CisgICAgICAgIGlmIGRpZmYuZGF5cyA8IDA6CisgICAgICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIGRpZmYgYW5kIDEgb3IgMAorCisgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiQWRkIGEgZGF0ZXRpbWUgYW5kIGEgdGltZWRlbHRhLiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgZGVsdGEgPSB0aW1lZGVsdGEoc2VsZi50b29yZGluYWwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaG91cnM9c2VsZi5faG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlcz1zZWxmLl9taW51dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2VsZi5fc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9c2VsZi5fbWljcm9zZWNvbmQpCisgICAgICAgIGRlbHRhICs9IG90aGVyCisgICAgICAgIGhvdXIsIHJlbSA9IGRpdm1vZChkZWx0YS5zZWNvbmRzLCAzNjAwKQorICAgICAgICBtaW51dGUsIHNlY29uZCA9IGRpdm1vZChyZW0sIDYwKQorICAgICAgICBpZiAwIDwgZGVsdGEuZGF5cyA8PSBfTUFYT1JESU5BTDoKKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5jb21iaW5lKGRhdGUuZnJvbW9yZGluYWwoZGVsdGEuZGF5cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lKGhvdXIsIG1pbnV0ZSwgc2Vjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YS5taWNyb3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1zZWxmLl90emluZm8pKQorICAgICAgICByYWlzZSBPdmVyZmxvd0Vycm9yKCJyZXN1bHQgb3V0IG9mIHJhbmdlIikKKworICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAiU3VidHJhY3QgdHdvIGRhdGV0aW1lcywgb3IgYSBkYXRldGltZSBhbmQgYSB0aW1lZGVsdGEuIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgZGF0ZXRpbWUpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiArIC1vdGhlcgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgZGF5czEgPSBzZWxmLnRvb3JkaW5hbCgpCisgICAgICAgIGRheXMyID0gb3RoZXIudG9vcmRpbmFsKCkKKyAgICAgICAgc2VjczEgPSBzZWxmLl9zZWNvbmQgKyBzZWxmLl9taW51dGUgKiA2MCArIHNlbGYuX2hvdXIgKiAzNjAwCisgICAgICAgIHNlY3MyID0gb3RoZXIuX3NlY29uZCArIG90aGVyLl9taW51dGUgKiA2MCArIG90aGVyLl9ob3VyICogMzYwMAorICAgICAgICBiYXNlID0gdGltZWRlbHRhKGRheXMxIC0gZGF5czIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VjczEgLSBzZWNzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZCAtIG90aGVyLl9taWNyb3NlY29uZCkKKyAgICAgICAgaWYgc2VsZi5fdHppbmZvIGlzIG90aGVyLl90emluZm86CisgICAgICAgICAgICByZXR1cm4gYmFzZQorICAgICAgICBteW9mZiA9IHNlbGYudXRjb2Zmc2V0KCkKKyAgICAgICAgb3RvZmYgPSBvdGhlci51dGNvZmZzZXQoKQorICAgICAgICBpZiBteW9mZiA9PSBvdG9mZjoKKyAgICAgICAgICAgIHJldHVybiBiYXNlCisgICAgICAgIGlmIG15b2ZmIGlzIE5vbmUgb3Igb3RvZmYgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2Fubm90IG1peCBuYWl2ZSBhbmQgdGltZXpvbmUtYXdhcmUgdGltZSIpCisgICAgICAgIHJldHVybiBiYXNlICsgb3RvZmYgLSBteW9mZgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICB0em9mZiA9IHNlbGYudXRjb2Zmc2V0KCkKKyAgICAgICAgaWYgdHpvZmYgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2dldHN0YXRlKClbMF0pCisgICAgICAgIGRheXMgPSBfeW1kMm9yZChzZWxmLnllYXIsIHNlbGYubW9udGgsIHNlbGYuZGF5KQorICAgICAgICBzZWNvbmRzID0gc2VsZi5ob3VyICogMzYwMCArIHNlbGYubWludXRlICogNjAgKyBzZWxmLnNlY29uZAorICAgICAgICByZXR1cm4gaGFzaCh0aW1lZGVsdGEoZGF5cywgc2Vjb25kcywgc2VsZi5taWNyb3NlY29uZCkgLSB0em9mZikKKworICAgICMgUGlja2xlIHN1cHBvcnQuCisKKyAgICBkZWYgX2dldHN0YXRlKHNlbGYpOgorICAgICAgICB5aGksIHlsbyA9IGRpdm1vZChzZWxmLl95ZWFyLCAyNTYpCisgICAgICAgIHVzMiwgdXMzID0gZGl2bW9kKHNlbGYuX21pY3Jvc2Vjb25kLCAyNTYpCisgICAgICAgIHVzMSwgdXMyID0gZGl2bW9kKHVzMiwgMjU2KQorICAgICAgICBiYXNlc3RhdGUgPSBieXRlcyhbeWhpLCB5bG8sIHNlbGYuX21vbnRoLCBzZWxmLl9kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ob3VyLCBzZWxmLl9taW51dGUsIHNlbGYuX3NlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzMSwgdXMyLCB1czNdKQorICAgICAgICBpZiBzZWxmLl90emluZm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAoYmFzZXN0YXRlLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAoYmFzZXN0YXRlLCBzZWxmLl90emluZm8pCisKKyAgICBkZWYgX19zZXRzdGF0ZShzZWxmLCBzdHJpbmcsIHR6aW5mbyk6CisgICAgICAgICh5aGksIHlsbywgc2VsZi5fbW9udGgsIHNlbGYuX2RheSwgc2VsZi5faG91ciwKKyAgICAgICAgIHNlbGYuX21pbnV0ZSwgc2VsZi5fc2Vjb25kLCB1czEsIHVzMiwgdXMzKSA9IHN0cmluZworICAgICAgICBzZWxmLl95ZWFyID0geWhpICogMjU2ICsgeWxvCisgICAgICAgIHNlbGYuX21pY3Jvc2Vjb25kID0gKCgodXMxIDw8IDgpIHwgdXMyKSA8PCA4KSB8IHVzMworICAgICAgICBpZiB0emluZm8gaXMgTm9uZSBvciBpc2luc3RhbmNlKHR6aW5mbywgX3R6aW5mb19jbGFzcyk6CisgICAgICAgICAgICBzZWxmLl90emluZm8gPSB0emluZm8KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYmFkIHR6aW5mbyBzdGF0ZSBhcmcgJXIiICUgdHppbmZvKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIHNlbGYuX2dldHN0YXRlKCkpCisKKworZGF0ZXRpbWUubWluID0gZGF0ZXRpbWUoMSwgMSwgMSkKK2RhdGV0aW1lLm1heCA9IGRhdGV0aW1lKDk5OTksIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5OTk5KQorZGF0ZXRpbWUucmVzb2x1dGlvbiA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkKKworCitkZWYgX2lzb3dlZWsxbW9uZGF5KHllYXIpOgorICAgICMgSGVscGVyIHRvIGNhbGN1bGF0ZSB0aGUgZGF5IG51bWJlciBvZiB0aGUgTW9uZGF5IHN0YXJ0aW5nIHdlZWsgMQorICAgICMgWFhYIFRoaXMgY291bGQgYmUgZG9uZSBtb3JlIGVmZmljaWVudGx5CisgICAgVEhVUlNEQVkgPSAzCisgICAgZmlyc3RkYXkgPSBfeW1kMm9yZCh5ZWFyLCAxLCAxKQorICAgIGZpcnN0d2Vla2RheSA9IChmaXJzdGRheSArIDYpICUgNyAjIFNlZSB3ZWVrZGF5KCkgYWJvdmUKKyAgICB3ZWVrMW1vbmRheSA9IGZpcnN0ZGF5IC0gZmlyc3R3ZWVrZGF5CisgICAgaWYgZmlyc3R3ZWVrZGF5ID4gVEhVUlNEQVk6CisgICAgICAgIHdlZWsxbW9uZGF5ICs9IDcKKyAgICByZXR1cm4gd2VlazFtb25kYXkKKworY2xhc3MgdGltZXpvbmUodHppbmZvKToKKyAgICBfX3Nsb3RzX18gPSAnX29mZnNldCcsICdfbmFtZScKKworICAgICMgU2VudGluZWwgdmFsdWUgdG8gZGlzYWxsb3cgTm9uZQorICAgIF9PbWl0dGVkID0gb2JqZWN0KCkKKyAgICBkZWYgX19uZXdfXyhjbHMsIG9mZnNldCwgbmFtZT1fT21pdHRlZCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG9mZnNldCwgdGltZWRlbHRhKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB0aW1lZGVsdGEiKQorICAgICAgICBpZiBuYW1lIGlzIGNscy5fT21pdHRlZDoKKyAgICAgICAgICAgIGlmIG5vdCBvZmZzZXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy51dGMKKyAgICAgICAgICAgIG5hbWUgPSBOb25lCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyaW5nIikKKyAgICAgICAgaWYgbm90IGNscy5fbWlub2Zmc2V0IDw9IG9mZnNldCA8PSBjbHMuX21heG9mZnNldDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdGltZWRlbHRhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHN0cmljdGx5IGJldHdlZW4gLXRpbWVkZWx0YShob3Vycz0yNCkgYW5kIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRpbWVkZWx0YShob3Vycz0yNCkuIikKKyAgICAgICAgaWYgKG9mZnNldC5taWNyb3NlY29uZHMgIT0gMCBvcgorICAgICAgICAgICAgb2Zmc2V0LnNlY29uZHMgJSA2MCAhPSAwKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdGltZWRlbHRhIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlcHJlc2VudGluZyBhIHdob2xlIG51bWJlciBvZiBtaW51dGVzIikKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlKG9mZnNldCwgbmFtZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY3JlYXRlKGNscywgb2Zmc2V0LCBuYW1lPU5vbmUpOgorICAgICAgICBzZWxmID0gdHppbmZvLl9fbmV3X18oY2xzKQorICAgICAgICBzZWxmLl9vZmZzZXQgPSBvZmZzZXQKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2dldGluaXRhcmdzX18oc2VsZik6CisgICAgICAgICIiInBpY2tsZSBzdXBwb3J0IiIiCisgICAgICAgIGlmIHNlbGYuX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAoc2VsZi5fb2Zmc2V0LCkKKyAgICAgICAgcmV0dXJuIChzZWxmLl9vZmZzZXQsIHNlbGYuX25hbWUpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX29mZnNldCA9PSBvdGhlci5fb2Zmc2V0CisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX29mZnNldCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udmVydCB0byBmb3JtYWwgc3RyaW5nLCBmb3IgcmVwcigpLgorCisgICAgICAgID4+PiB0eiA9IHRpbWV6b25lLnV0YworICAgICAgICA+Pj4gcmVwcih0eikKKyAgICAgICAgJ2RhdGV0aW1lLnRpbWV6b25lLnV0YycKKyAgICAgICAgPj4+IHR6ID0gdGltZXpvbmUodGltZWRlbHRhKGhvdXJzPS01KSwgJ0VTVCcpCisgICAgICAgID4+PiByZXByKHR6KQorICAgICAgICAiZGF0ZXRpbWUudGltZXpvbmUoZGF0ZXRpbWUudGltZWRlbHRhKC0xLCA2ODQwMCksICdFU1QnKSIKKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYgaXMgc2VsZi51dGM6CisgICAgICAgICAgICByZXR1cm4gJ2RhdGV0aW1lLnRpbWV6b25lLnV0YycKKyAgICAgICAgaWYgc2VsZi5fbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICIlcyglcikiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0KQorICAgICAgICByZXR1cm4gIiVzKCVyLCAlcikiICUgKCdkYXRldGltZS4nICsgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0LCBzZWxmLl9uYW1lKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnR6bmFtZShOb25lKQorCisgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZHQsIGRhdGV0aW1lKSBvciBkdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29mZnNldAorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInV0Y29mZnNldCgpIGFyZ3VtZW50IG11c3QgYmUgYSBkYXRldGltZSBpbnN0YW5jZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgb3IgTm9uZSIpCisKKyAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShkdCwgZGF0ZXRpbWUpIG9yIGR0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfZnJvbV9vZmZzZXQoc2VsZi5fb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0em5hbWUoKSBhcmd1bWVudCBtdXN0IGJlIGEgZGF0ZXRpbWUgaW5zdGFuY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIE5vbmUiKQorCisgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZHQsIGRhdGV0aW1lKSBvciBkdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkc3QoKSBhcmd1bWVudCBtdXN0IGJlIGEgZGF0ZXRpbWUgaW5zdGFuY2UiCisgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIE5vbmUiKQorCisgICAgZGVmIGZyb211dGMoc2VsZiwgZHQpOgorICAgICAgICBpZiBpc2luc3RhbmNlKGR0LCBkYXRldGltZSk6CisgICAgICAgICAgICBpZiBkdC50emluZm8gaXMgbm90IHNlbGY6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnJvbXV0YzogZHQudHppbmZvICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBub3Qgc2VsZiIpCisgICAgICAgICAgICByZXR1cm4gZHQgKyBzZWxmLl9vZmZzZXQKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJmcm9tdXRjKCkgYXJndW1lbnQgbXVzdCBiZSBhIGRhdGV0aW1lIGluc3RhbmNlIgorICAgICAgICAgICAgICAgICAgICAgICAgIiBvciBOb25lIikKKworICAgIF9tYXhvZmZzZXQgPSB0aW1lZGVsdGEoaG91cnM9MjMsIG1pbnV0ZXM9NTkpCisgICAgX21pbm9mZnNldCA9IC1fbWF4b2Zmc2V0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9uYW1lX2Zyb21fb2Zmc2V0KGRlbHRhKToKKyAgICAgICAgaWYgZGVsdGEgPCB0aW1lZGVsdGEoMCk6CisgICAgICAgICAgICBzaWduID0gJy0nCisgICAgICAgICAgICBkZWx0YSA9IC1kZWx0YQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2lnbiA9ICcrJworICAgICAgICBob3VycywgcmVzdCA9IGRpdm1vZChkZWx0YSwgdGltZWRlbHRhKGhvdXJzPTEpKQorICAgICAgICBtaW51dGVzID0gcmVzdCAvLyB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICByZXR1cm4gJ1VUQ3t9ezowMmR9Ons6MDJkfScuZm9ybWF0KHNpZ24sIGhvdXJzLCBtaW51dGVzKQorCit0aW1lem9uZS51dGMgPSB0aW1lem9uZS5fY3JlYXRlKHRpbWVkZWx0YSgwKSkKK3RpbWV6b25lLm1pbiA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21pbm9mZnNldCkKK3RpbWV6b25lLm1heCA9IHRpbWV6b25lLl9jcmVhdGUodGltZXpvbmUuX21heG9mZnNldCkKKworIiIiCitTb21lIHRpbWUgem9uZSBhbGdlYnJhLiAgRm9yIGEgZGF0ZXRpbWUgeCwgbGV0CisgICAgeC5uID0geCBzdHJpcHBlZCBvZiBpdHMgdGltZXpvbmUgLS0gaXRzIG5haXZlIHRpbWUuCisgICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyAgICAgICAgICByZXR1cm4gTm9uZQorICAgIHguZCA9IHguZHN0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCisgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICB4LnMgPSB4J3Mgc3RhbmRhcmQgb2Zmc2V0LCB4Lm8gLSB4LmQKKworTm93IHNvbWUgZGVyaXZlZCBydWxlcywgd2hlcmUgayBpcyBhIGR1cmF0aW9uICh0aW1lZGVsdGEpLgorCisxLiB4Lm8gPSB4LnMgKyB4LmQKKyAgIFRoaXMgZm9sbG93cyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mIHgucy4KKworMi4gSWYgeCBhbmQgeSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsIHgucyA9IHkucy4KKyAgIFRoaXMgaXMgYWN0dWFsbHkgYSByZXF1aXJlbWVudCwgYW4gYXNzdW1wdGlvbiB3ZSBuZWVkIHRvIG1ha2UgYWJvdXQKKyAgIHNhbmUgdHppbmZvIGNsYXNzZXMuCisKKzMuIFRoZSBuYWl2ZSBVVEMgdGltZSBjb3JyZXNwb25kaW5nIHRvIHggaXMgeC5uIC0geC5vLgorICAgVGhpcyBpcyBhZ2FpbiBhIHJlcXVpcmVtZW50IGZvciBhIHNhbmUgdHppbmZvIGNsYXNzLgorCis0LiAoeCtrKS5zID0geC5zCisgICBUaGlzIGZvbGxvd3MgZnJvbSAjMiwgYW5kIHRoYXQgZGF0aW1ldGltZXR6K3RpbWVkZWx0YSBwcmVzZXJ2ZXMgdHppbmZvLgorCis1LiAoeCtrKS5uID0geC5uICsgaworICAgQWdhaW4gZm9sbG93cyBmcm9tIGhvdyBhcml0aG1ldGljIGlzIGRlZmluZWQuCisKK05vdyB3ZSBjYW4gZXhwbGFpbiB0ei5mcm9tdXRjKHgpLiAgTGV0J3MgYXNzdW1lIGl0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZQorKG1lYW5pbmcgdGhhdCB0aGUgdmFyaW91cyB0emluZm8gbWV0aG9kcyBleGlzdCwgYW5kIGRvbid0IGJsb3cgdXAgb3IgcmV0dXJuCitOb25lIHdoZW4gY2FsbGVkKS4KKworVGhlIGZ1bmN0aW9uIHdhbnRzIHRvIHJldHVybiBhIGRhdGV0aW1lIHkgd2l0aCB0aW1lem9uZSB0eiwgZXF1aXZhbGVudCB0byB4LgoreCBpcyBhbHJlYWR5IGluIFVUQy4KKworQnkgIzMsIHdlIHdhbnQKKworICAgIHkubiAtIHkubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdCisKK1RoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGF0dGFjaGluZyB0eiB0byB4Lm4sIGFuZCBjYWxsaW5nIHRoYXQgeS4gIFNvCit4Lm4gPSB5Lm4gYXQgdGhlIHN0YXJ0LiAgVGhlbiBpdCB3YW50cyB0byBhZGQgYSBkdXJhdGlvbiBrIHRvIHksIHNvIHRoYXQgWzFdCitiZWNvbWVzIHRydWU7IGluIGVmZmVjdCwgd2Ugd2FudCB0byBzb2x2ZSBbMl0gZm9yIGs6CisKKyAgICh5K2spLm4gLSAoeStrKS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgIFsyXQorCitCeSAjMSwgdGhpcyBpcyB0aGUgc2FtZSBhcworCisgICAoeStrKS5uIC0gKCh5K2spLnMgKyAoeStrKS5kKSA9IHgubiAgICAgICAgICBbM10KKworQnkgIzUsICh5K2spLm4gPSB5Lm4gKyBrLCB3aGljaCBlcXVhbHMgeC5uICsgayBiZWNhdXNlIHgubj15Lm4gYXQgdGhlIHN0YXJ0LgorU3Vic3RpdHV0aW5nIHRoYXQgaW50byBbM10sCisKKyAgIHgubiArIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IHgubjsgdGhlIHgubiB0ZXJtcyBjYW5jZWwsIGxlYXZpbmcKKyAgIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IDA7IHJlYXJyYW5naW5nLAorICAgayA9ICh5K2spLnMgLSAoeStrKS5kOyBieSAjNCwgKHkraykucyA9PSB5LnMsIHNvCisgICBrID0geS5zIC0gKHkraykuZAorCitPbiB0aGUgUkhTLCAoeStrKS5kIGNhbid0IGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgeS5zIGNhbiBiZSwgYW5kIHdlCithcHByb3hpbWF0ZSBrIGJ5IGlnbm9yaW5nIHRoZSAoeStrKS5kIHRlcm0gYXQgZmlyc3QuICBOb3RlIHRoYXQgayBjYW4ndCBiZQordmVyeSBsYXJnZSwgc2luY2UgYWxsIG9mZnNldC1yZXR1cm5pbmcgbWV0aG9kcyByZXR1cm4gYSBkdXJhdGlvbiBvZiBtYWduaXR1ZGUKK2xlc3MgdGhhbiAyNCBob3Vycy4gIEZvciB0aGF0IHJlYXNvbiwgaWYgeSBpcyBmaXJtbHkgaW4gc3RkIHRpbWUsICh5K2spLmQgbXVzdAorYmUgMCwgc28gaWdub3JpbmcgaXQgaGFzIG5vIGNvbnNlcXVlbmNlIHRoZW4uCisKK0luIGFueSBjYXNlLCB0aGUgbmV3IHZhbHVlIGlzCisKKyAgICB6ID0geSArIHkucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs0XQorCitJdCdzIGhlbHBmdWwgdG8gc3RlcCBiYWNrIGF0IGxvb2sgYXQgWzRdIGZyb20gYSBoaWdoZXIgbGV2ZWw6ICBpdCdzIHNpbXBseQorbWFwcGluZyBmcm9tIFVUQyB0byB0eidzIHN0YW5kYXJkIHRpbWUuCisKK0F0IHRoaXMgcG9pbnQsIGlmCisKKyAgICB6Lm4gLSB6Lm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1XQorCit3ZSBoYXZlIGFuIGVxdWl2YWxlbnQgdGltZSwgYW5kIGFyZSBhbG1vc3QgZG9uZS4gIFRoZSBpbnNlY3VyaXR5IGhlcmUgaXMKK2F0IHRoZSBzdGFydCBvZiBkYXlsaWdodCB0aW1lLiAgUGljdHVyZSBVUyBFYXN0ZXJuIGZvciBjb25jcmV0ZW5lc3MuICBUaGUgd2FsbAordGltZSBqdW1wcyBmcm9tIDE6NTkgdG8gMzowMCwgYW5kIHdhbGwgaG91cnMgb2YgdGhlIGZvcm0gMjpNTSBkb24ndCBtYWtlIGdvb2QKK3NlbnNlIHRoZW4uICBUaGUgZG9jcyBhc2sgdGhhdCBhbiBFYXN0ZXJuIHR6aW5mbyBjbGFzcyBjb25zaWRlciBzdWNoIGEgdGltZSB0bworYmUgRURUIChiZWNhdXNlIGl0J3MgImFmdGVyIDIiKSwgd2hpY2ggaXMgYSByZWR1bmRhbnQgc3BlbGxpbmcgb2YgMTpNTSBFU1QKK29uIHRoZSBkYXkgRFNUIHN0YXJ0cy4gIFdlIHdhbnQgdG8gcmV0dXJuIHRoZSAxOk1NIEVTVCBzcGVsbGluZyBiZWNhdXNlIHRoYXQncwordGhlIG9ubHkgc3BlbGxpbmcgdGhhdCBtYWtlcyBzZW5zZSBvbiB0aGUgbG9jYWwgd2FsbCBjbG9jay4KKworSW4gZmFjdCwgaWYgWzVdIGhvbGRzIGF0IHRoaXMgcG9pbnQsIHdlIGRvIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcsCitidXQgdGhhdCB0YWtlcyBhIGJpdCBvZiBwcm9vZi4gIFdlIGZpcnN0IHByb3ZlIGEgc3Ryb25nZXIgcmVzdWx0LiAgV2hhdCdzIHRoZQorZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbNV0/ICBMZXQKKworICAgIGRpZmYgPSB4Lm4gLSAoei5uIC0gei5vKSAgICAgICAgICAgICAgICAgICAgWzZdCisKK05vdworICAgIHoubiA9ICAgICAgICAgICAgICAgICAgICAgICBieSBbNF0KKyAgICAoeSArIHkucykubiA9ICAgICAgICAgICAgICAgYnkgIzUKKyAgICB5Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeS5uID0geC5uCisgICAgeC5uICsgeS5zID0gICAgICAgICAgICAgICAgIHNpbmNlIHogYW5kIHkgYXJlIGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkucyA9IHoucyBieSAjMgorICAgIHgubiArIHoucworCitQbHVnZ2luZyB0aGF0IGJhY2sgaW50byBbNl0gZ2l2ZXMKKworICAgIGRpZmYgPQorICAgIHgubiAtICgoeC5uICsgei5zKSAtIHoubykgPSAgICAgZXhwYW5kaW5nCisgICAgeC5uIC0geC5uIC0gei5zICsgei5vID0gICAgICAgICBjYW5jZWxsaW5nCisgICAgLSB6LnMgKyB6Lm8gPSAgICAgICAgICAgICAgICAgICBieSAjMgorICAgIHouZAorCitTbyBkaWZmID0gei5kLgorCitJZiBbNV0gaXMgdHJ1ZSBub3csIGRpZmYgPSAwLCBzbyB6LmQgPSAwIHRvbywgYW5kIHdlIGhhdmUgdGhlIHN0YW5kYXJkLXRpbWUKK3NwZWxsaW5nIHdlIHdhbnRlZCBpbiB0aGUgZW5kY2FzZSBkZXNjcmliZWQgYWJvdmUuICBXZSdyZSBkb25lLiAgQ29udHJhcmlseSwKK2lmIHouZCA9IDAsIHRoZW4gd2UgaGF2ZSBhIFVUQyBlcXVpdmFsZW50LCBhbmQgYXJlIGFsc28gZG9uZS4KKworSWYgWzVdIGlzIG5vdCB0cnVlIG5vdywgZGlmZiA9IHouZCAhPSAwLCBhbmQgei5kIGlzIHRoZSBvZmZzZXQgd2UgbmVlZCB0bworYWRkIHRvIHogKGluIGVmZmVjdCwgeiBpcyBpbiB0eidzIHN0YW5kYXJkIHRpbWUsIGFuZCB3ZSBuZWVkIHRvIHNoaWZ0IHRoZQorbG9jYWwgY2xvY2sgaW50byB0eidzIGRheWxpZ2h0IHRpbWUpLgorCitMZXQKKworICAgIHonID0geiArIHouZCA9IHogKyBkaWZmICAgICAgICAgICAgICAgICAgICAgWzddCisKK2FuZCB3ZSBjYW4gYWdhaW4gYXNrIHdoZXRoZXIKKworICAgIHonLm4gLSB6Jy5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgWzhdCisKK0lmIHNvLCB3ZSdyZSBkb25lLiAgSWYgbm90LCB0aGUgdHppbmZvIGNsYXNzIGlzIGluc2FuZSwgYWNjb3JkaW5nIHRvIHRoZQorYXNzdW1wdGlvbnMgd2UndmUgbWFkZS4gIFRoaXMgYWxzbyByZXF1aXJlcyBhIGJpdCBvZiBwcm9vZi4gIEFzIGJlZm9yZSwgbGV0J3MKK2NvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgTEhTIGFuZCBSSFMgb2YgWzhdIChhbmQgc2tpcHBpbmcgc29tZSBvZgordGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUga2luZHMgb2Ygc3Vic3RpdHV0aW9ucyB3ZSd2ZSBkb25lIHNldmVyYWwgdGltZXMKK2FscmVhZHkpOgorCisgICAgZGlmZicgPSB4Lm4gLSAoeicubiAtIHonLm8pID0gICAgICAgICAgIHJlcGxhY2luZyB6Jy5uIHZpYSBbN10KKyAgICAgICAgICAgIHgubiAgLSAoei5uICsgZGlmZiAtIHonLm8pID0gICAgcmVwbGFjaW5nIGRpZmYgdmlhIFs2XQorICAgICAgICAgICAgeC5uIC0gKHoubiArIHgubiAtICh6Lm4gLSB6Lm8pIC0geicubykgPQorICAgICAgICAgICAgeC5uIC0gei5uIC0geC5uICsgei5uIC0gei5vICsgeicubyA9ICAgIGNhbmNlbCB4Lm4KKyAgICAgICAgICAgIC0gei5uICsgei5uIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICBjYW5jZWwgei5uCisgICAgICAgICAgICAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgICAgICAgICAjMSB0d2ljZQorICAgICAgICAgICAgLXoucyAtIHouZCArIHonLnMgKyB6Jy5kID0gICAgICAgICAgeiBhbmQgeicgaGF2ZSBzYW1lIHR6aW5mbworICAgICAgICAgICAgeicuZCAtIHouZAorCitTbyB6JyBpcyBVVEMtZXF1aXZhbGVudCB0byB4IGlmZiB6Jy5kID0gei5kIGF0IHRoaXMgcG9pbnQuICBJZiB0aGV5IGFyZSBlcXVhbCwKK3dlJ3ZlIGZvdW5kIHRoZSBVVEMtZXF1aXZhbGVudCBzbyBhcmUgZG9uZS4gIEluIGZhY3QsIHdlIHN0b3Agd2l0aCBbN10gYW5kCityZXR1cm4geicsIG5vdCBib3RoZXJpbmcgdG8gY29tcHV0ZSB6Jy5kLgorCitIb3cgY291bGQgei5kIGFuZCB6J2QgZGlmZmVyPyAgeicgPSB6ICsgei5kIFs3XSwgc28gbWVyZWx5IG1vdmluZyB6JyBieQorYSBkc3QoKSBvZmZzZXQsIGFuZCBzdGFydGluZyAqZnJvbSogYSB0aW1lIGFscmVhZHkgaW4gRFNUICh3ZSBrbm93IHouZCAhPSAwKSwKK3dvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSByZXN1bHQgZHN0KCkgcmV0dXJuczogIHdlIHN0YXJ0IGluIERTVCwgYW5kIG1vdmluZworYSBsaXR0bGUgZnVydGhlciBpbnRvIGl0IHRha2VzIHVzIG91dCBvZiBEU1QuCisKK1RoZXJlIGlzbid0IGEgc2FuZSBjYXNlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbi4gIFRoZSBjbG9zZXN0IGl0IGdldHMgaXMgYXQKK3RoZSBlbmQgb2YgRFNULCB3aGVyZSB0aGVyZSdzIGFuIGhvdXIgaW4gVVRDIHdpdGggbm8gc3BlbGxpbmcgaW4gYSBoeWJyaWQKK3R6aW5mbyBjbGFzcy4gIEluIFVTIEVhc3Rlcm4sIHRoYXQncyA1Ok1NIFVUQyA9IDA6TU0gRVNUID0gMTpNTSBFRFQuICBEdXJpbmcKK3RoYXQgaG91ciwgb24gYW4gRWFzdGVybiBjbG9jayAxOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgKDY6TU0KK1VUQykgYmVjYXVzZSB0aGUgZG9jcyBpbnNpc3Qgb24gdGhhdCwgYnV0IDA6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gZGF5bGlnaHQKK3RpbWUgKDQ6TU0gVVRDKS4gIFRoZXJlIGlzIG5vIGxvY2FsIHRpbWUgbWFwcGluZyB0byA1Ok1NIFVUQy4gIFRoZSBsb2NhbAorY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMCBhZ2FpbiwgYW5kIHJlcGVhdHMgdGhlIDE6TU0gaG91ciBpbgorc3RhbmRhcmQgdGltZS4gIFNpbmNlIHRoYXQncyB3aGF0IHRoZSBsb2NhbCBjbG9jayAqZG9lcyosIHdlIHdhbnQgdG8gbWFwIGJvdGgKK1VUQyBob3VycyA1Ok1NIGFuZCA2Ok1NIHRvIDE6TU0gRWFzdGVybi4gIFRoZSByZXN1bHQgaXMgYW1iaWd1b3VzCitpbiBsb2NhbCB0aW1lLCBidXQgc28gaXQgZ29lcyAtLSBpdCdzIHRoZSB3YXkgdGhlIGxvY2FsIGNsb2NrIHdvcmtzLgorCitXaGVuIHggPSA1Ok1NIFVUQyBpcyB0aGUgaW5wdXQgdG8gdGhpcyBhbGdvcml0aG0sIHgubz0wLCB5Lm89LTUgYW5kIHkuZD0wLAorc28gej0wOk1NLiAgei5kPTYwIChtaW51dGVzKSB0aGVuLCBzbyBbNV0gZG9lc24ndCBob2xkIGFuZCB3ZSBrZWVwIGdvaW5nLgoreicgPSB6ICsgei5kID0gMTpNTSB0aGVuLCBhbmQgeicuZD0wLCBhbmQgeicuZCAtIHouZCA9IC02MCAhPSAwIHNvIFs4XQorKGNvcnJlY3RseSkgY29uY2x1ZGVzIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IHRvIHguCisKK0JlY2F1c2Ugd2Uga25vdyB6LmQgc2FpZCB6IHdhcyBpbiBkYXlsaWdodCB0aW1lIChlbHNlIFs1XSB3b3VsZCBoYXZlIGhlbGQgYW5kCit3ZSB3b3VsZCBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB3ZSBrbm93IHouZCAhPSB6Jy5kIChlbHNlIFs4XSB3b3VsZCBoYXZlIGhlbGQKK2FuZCB3ZSB3ZSBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB0aGVyZSBhcmUgb25seSAyIHBvc3NpYmxlIHZhbHVlcyBkc3QoKSBjYW4KK3JldHVybiBpbiBFYXN0ZXJuLCBpdCBmb2xsb3dzIHRoYXQgeicuZCBtdXN0IGJlIDAgKHdoaWNoIGl0IGlzIGluIHRoZSBleGFtcGxlLAorYnV0IHRoZSByZWFzb25pbmcgZG9lc24ndCBkZXBlbmQgb24gdGhlIGV4YW1wbGUgLS0gaXQgZGVwZW5kcyBvbiB0aGVyZSBiZWluZwordHdvIHBvc3NpYmxlIGRzdCgpIG91dGNvbWVzLCBvbmUgemVybyBhbmQgdGhlIG90aGVyIG5vbi16ZXJvKS4gIFRoZXJlZm9yZQoreicgbXVzdCBiZSBpbiBzdGFuZGFyZCB0aW1lLCBhbmQgaXMgdGhlIHNwZWxsaW5nIHdlIHdhbnQgaW4gdGhpcyBjYXNlLgorCitOb3RlIGFnYWluIHRoYXQgeicgaXMgbm90IFVUQy1lcXVpdmFsZW50IGFzIGZhciBhcyB0aGUgaHlicmlkIHR6aW5mbyBjbGFzcyBpcworY29uY2VybmVkIChiZWNhdXNlIGl0IHRha2VzIHonIGFzIGJlaW5nIGluIHN0YW5kYXJkIHRpbWUgcmF0aGVyIHRoYW4gdGhlCitkYXlsaWdodCB0aW1lIHdlIGludGVuZCBoZXJlKSwgYnV0IHJldHVybmluZyBpdCBnaXZlcyB0aGUgcmVhbC1saWZlICJsb2NhbAorY2xvY2sgcmVwZWF0cyBhbiBob3VyIiBiZWhhdmlvciB3aGVuIG1hcHBpbmcgdGhlICJ1bnNwZWxsYWJsZSIgVVRDIGhvdXIgaW50bwordHouCisKK1doZW4gdGhlIGlucHV0IGlzIDY6TU0sIHo9MTpNTSBhbmQgei5kPTAsIGFuZCB3ZSBzdG9wIGF0IG9uY2UsIGFnYWluIHdpdGgKK3RoZSAxOk1NIHN0YW5kYXJkIHRpbWUgc3BlbGxpbmcgd2Ugd2FudC4KKworU28gaG93IGNhbiB0aGlzIGJyZWFrPyAgT25lIG9mIHRoZSBhc3N1bXB0aW9ucyBtdXN0IGJlIHZpb2xhdGVkLiAgVHdvCitwb3NzaWJpbGl0aWVzOgorCisxKSBbMl0gZWZmZWN0aXZlbHkgc2F5cyB0aGF0IHkucyBpcyBpbnZhcmlhbnQgYWNyb3NzIGFsbCB5IGJlbG9uZyB0byBhIGdpdmVuCisgICB0aW1lIHpvbmUuICBUaGlzIGlzbid0IHRydWUgaWYsIGZvciBwb2xpdGljYWwgcmVhc29ucyBvciBjb250aW5lbnRhbCBkcmlmdCwKKyAgIGEgcmVnaW9uIGRlY2lkZXMgdG8gY2hhbmdlIGl0cyBiYXNlIG9mZnNldCBmcm9tIFVUQy4KKworMikgVGhlcmUgbWF5IGJlIHZlcnNpb25zIG9mICJkb3VibGUgZGF5bGlnaHQiIHRpbWUgd2hlcmUgdGhlIHRhaWwgZW5kIG9mCisgICB0aGUgYW5hbHlzaXMgZ2l2ZXMgdXAgYSBzdGVwIHRvbyBlYXJseS4gIEkgaGF2ZW4ndCB0aG91Z2h0IGFib3V0IHRoYXQKKyAgIGVub3VnaCB0byBzYXkuCisKK0luIGFueSBjYXNlLCBpdCdzIGNsZWFyIHRoYXQgdGhlIGRlZmF1bHQgZnJvbXV0YygpIGlzIHN0cm9uZyBlbm91Z2ggdG8gaGFuZGxlCisiYWxtb3N0IGFsbCIgdGltZSB6b25lczogIHNvIGxvbmcgYXMgdGhlIHN0YW5kYXJkIG9mZnNldCBpcyBpbnZhcmlhbnQsIGl0Citkb2Vzbid0IG1hdHRlciBpZiBkYXlsaWdodCB0aW1lIHRyYW5zaXRpb24gcG9pbnRzIGNoYW5nZSBmcm9tIHllYXIgdG8geWVhciwgb3IKK2lmIGRheWxpZ2h0IHRpbWUgaXMgc2tpcHBlZCBpbiBzb21lIHllYXJzOyBpdCBkb2Vzbid0IG1hdHRlciBob3cgbGFyZ2Ugb3IKK3NtYWxsIGRzdCgpIG1heSBnZXQgd2l0aGluIGl0cyBib3VuZHM7IGFuZCBpdCBkb2Vzbid0IGV2ZW4gbWF0dGVyIGlmIHNvbWUKK3BlcnZlcnNlIHRpbWUgem9uZSByZXR1cm5zIGEgbmVnYXRpdmUgZHN0KCkpLiAgU28gYSBicmVha2luZyBjYXNlIG11c3QgYmUKK3ByZXR0eSBiaXphcnJlLCBhbmQgYSB0emluZm8gc3ViY2xhc3MgY2FuIG92ZXJyaWRlIGZyb211dGMoKSBpZiBpdCBpcy4KKyIiIgordHJ5OgorICAgIGZyb20gX2RhdGV0aW1lIGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICAjIENsZWFuIHVwIHVudXNlZCBuYW1lcworICAgIGRlbCAoX0RBWU5BTUVTLCBfREFZU19CRUZPUkVfTU9OVEgsIF9EQVlTX0lOX01PTlRILAorICAgICAgICAgX0RJMTAwWSwgX0RJNDAwWSwgX0RJNFksIF9NQVhPUkRJTkFMLCBfTU9OVEhOQU1FUywKKyAgICAgICAgIF9idWlsZF9zdHJ1Y3RfdGltZSwgX2NhbGxfdHppbmZvX21ldGhvZCwgX2NoZWNrX2RhdGVfZmllbGRzLAorICAgICAgICAgX2NoZWNrX3RpbWVfZmllbGRzLCBfY2hlY2tfdHppbmZvX2FyZywgX2NoZWNrX3R6bmFtZSwKKyAgICAgICAgIF9jaGVja191dGNfb2Zmc2V0LCBfY21wLCBfY21wZXJyb3IsIF9kYXRlX2NsYXNzLCBfZGF5c19iZWZvcmVfbW9udGgsCisgICAgICAgICBfZGF5c19iZWZvcmVfeWVhciwgX2RheXNfaW5fbW9udGgsIF9mb3JtYXRfdGltZSwgX2lzX2xlYXAsCisgICAgICAgICBfaXNvd2VlazFtb25kYXksIF9tYXRoLCBfb3JkMnltZCwgX3RpbWUsIF90aW1lX2NsYXNzLCBfdHppbmZvX2NsYXNzLAorICAgICAgICAgX3dyYXBfc3RyZnRpbWUsIF95bWQyb3JkKQorICAgICMgWFhYIFNpbmNlIGltcG9ydCAqIGFib3ZlIGV4Y2x1ZGVzIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBfLAorICAgICMgZG9jc3RyaW5nIGRvZXMgbm90IGdldCBvdmVyd3JpdHRlbi4gSW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlCisgICAgIyBhcHByb3ByaWF0ZSB0byBtYWludGFpbiBhIHNpbmdsZSBtb2R1bGUgbGV2ZWwgZG9jc3RyaW5nIGFuZAorICAgICMgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZS4KKyAgICBmcm9tIF9kYXRldGltZSBpbXBvcnQgX19kb2NfXwpkaWZmIC0tZ2l0IGEvTGliL2RibS9fX2luaXRfXy5weSBiL0xpYi9kYm0vX19pbml0X18ucHkKaW5kZXggNTdiZTE3Yi4uNzZhNDNjNCAxMDA2NDQKLS0tIGEvTGliL2RibS9fX2luaXRfXy5weQorKysgYi9MaWIvZGJtL19faW5pdF9fLnB5CkBAIC01LDEyICs1LDExIEBACiAgICAgICAgIGltcG9ydCBkYm0KICAgICAgICAgZCA9IGRibS5vcGVuKGZpbGUsICd3JywgMG82NjYpCiAKLVRoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBkYm0uYnNkLCBkYm0uZ251LCBkYm0ubmRibSBvciBkYm0uZHVtYgotb2JqZWN0LCBkZXBlbmRlbnQgb24gdGhlIHR5cGUgb2YgZGF0YWJhc2UgYmVpbmcgb3BlbmVkIChkZXRlcm1pbmVkIGJ5Ci10aGUgd2hpY2hkYiBmdW5jdGlvbikgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpc3RpbmcgZGJtLiAgSWYgdGhlIGRibSBkb2VzCi1ub3QgZXhpc3QgYW5kIHRoZSBjcmVhdGUgb3IgbmV3IGZsYWcgKCdjJyBvciAnbicpIHdhcyBzcGVjaWZpZWQsIHRoZQotZGJtIHR5cGUgd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG1vZHVsZXMgKHRlc3RlZAotaW4gdGhlIGFib3ZlIG9yZGVyKS4KK1RoZSByZXR1cm5lZCBvYmplY3QgaXMgYSBkYm0uZ251LCBkYm0ubmRibSBvciBkYm0uZHVtYiBvYmplY3QsIGRlcGVuZGVudCBvbiB0aGUKK3R5cGUgb2YgZGF0YWJhc2UgYmVpbmcgb3BlbmVkIChkZXRlcm1pbmVkIGJ5IHRoZSB3aGljaGRiIGZ1bmN0aW9uKSBpbiB0aGUgY2FzZQorb2YgYW4gZXhpc3RpbmcgZGJtLiBJZiB0aGUgZGJtIGRvZXMgbm90IGV4aXN0IGFuZCB0aGUgY3JlYXRlIG9yIG5ldyBmbGFnICgnYycKK29yICduJykgd2FzIHNwZWNpZmllZCwgdGhlIGRibSB0eXBlIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgYXZhaWxhYmlsaXR5IG9mCit0aGUgbW9kdWxlcyAodGVzdGVkIGluIHRoZSBhYm92ZSBvcmRlcikuCiAKIEl0IGhhcyB0aGUgZm9sbG93aW5nIGludGVyZmFjZSAoa2V5IGFuZCBkYXRhIGFyZSBzdHJpbmdzKToKIApAQCAtMjgsNyArMjcsNyBAQAogaW1wbGVtZW50YXRpb25zLgogIiIiCiAKLV9fYWxsX18gPSBbJ29wZW4nLCAnd2hpY2hkYicsICdlcnJvcicsICdlcnJvciddCitfX2FsbF9fID0gWydvcGVuJywgJ3doaWNoZGInLCAnZXJyb3InXQogCiBpbXBvcnQgaW8KIGltcG9ydCBvcwpAQCAtMzksNyArMzgsNyBAQAogY2xhc3MgZXJyb3IoRXhjZXB0aW9uKToKICAgICBwYXNzCiAKLV9uYW1lcyA9IFsnZGJtLmJzZCcsICdkYm0uZ251JywgJ2RibS5uZGJtJywgJ2RibS5kdW1iJ10KK19uYW1lcyA9IFsnZGJtLmdudScsICdkYm0ubmRibScsICdkYm0uZHVtYiddCiBfZGVmYXVsdG1vZCA9IE5vbmUKIF9tb2R1bGVzID0ge30KIApAQCAtMTcwLDEwICsxNjksNiBAQAogICAgIGlmIG1hZ2ljID09IDB4MTM1NzlhY2U6CiAgICAgICAgIHJldHVybiAiZGJtLmdudSIKIAotICAgICMjIENoZWNrIGZvciBvbGQgQmVya2VsZXkgZGIgaGFzaCBmaWxlIGZvcm1hdCB2MgotICAgICNpZiBtYWdpYyBpbiAoMHgwMDA2MTU2MSwgMHg2MTE1MDYwMCk6Ci0gICAgIyAgICByZXR1cm4gImJzZGRiMTg1IiAjIG5vdCBzdXBwb3J0ZWQgYW55bW9yZQotCiAgICAgIyBMYXRlciB2ZXJzaW9ucyBvZiBCZXJrZWxleSBkYiBoYXNoIGZpbGUgaGF2ZSBhIDEyLWJ5dGUgcGFkIGluCiAgICAgIyBmcm9udCBvZiB0aGUgZmlsZSB0eXBlCiAgICAgdHJ5OgpAQCAtMTgxLDEwICsxNzYsNiBAQAogICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3I6CiAgICAgICAgIHJldHVybiAiIgogCi0gICAgIyMgQ2hlY2sgZm9yIEJTRCBoYXNoCi0gICAgI2lmIG1hZ2ljIGluICgweDAwMDYxNTYxLCAweDYxMTUwNjAwKToKLSAgICAjICAgIHJldHVybiAiZGJtLmJzZCIKLQogICAgICMgVW5rbm93bgogICAgIHJldHVybiAiIgogCmRpZmYgLS1naXQgYS9MaWIvZGJtL2R1bWIucHkgYi9MaWIvZGJtL2R1bWIucHkKaW5kZXggNGQ4MDRkYS4uY2ZiOTEyMyAxMDA2NDQKLS0tIGEvTGliL2RibS9kdW1iLnB5CisrKyBiL0xpYi9kYm0vZHVtYi5weQpAQCAtMjAzLDcgKzIwMyw3IEBACiAgICAgICAgICMgVGhlIGJsb2NrcyB1c2VkIGJ5IHRoZSBhc3NvY2lhdGVkIHZhbHVlIGFyZSBsb3N0LgogICAgICAgICBkZWwgc2VsZi5faW5kZXhba2V5XQogICAgICAgICAjIFhYWCBJdCdzIHVuY2xlYXIgd2h5IHdlIGRvIGEgX2NvbW1pdCgpIGhlcmUgKHRoZSBjb2RlIGFsd2F5cwotICAgICAgICAjIFhYWCBoYXMsIHNvIEknbSBub3QgY2hhbmdpbmcgaXQpLiAgX3NldGl0ZW1fXyBkb2Vzbid0IHRyeSB0bworICAgICAgICAjIFhYWCBoYXMsIHNvIEknbSBub3QgY2hhbmdpbmcgaXQpLiAgX19zZXRpdGVtX18gZG9lc24ndCB0cnkgdG8KICAgICAgICAgIyBYWFgga2VlcCB0aGUgZGlyZWN0b3J5IGZpbGUgaW4gc3luY2guICBXaHkgc2hvdWxkIHdlPyAgT3IKICAgICAgICAgIyBYWFggd2h5IHNob3VsZG4ndCBfX3NldGl0ZW1fXz8KICAgICAgICAgc2VsZi5fY29tbWl0KCkKQEAgLTIzMiw3ICsyMzIsNyBAQAogCiAgICAgX19kZWxfXyA9IGNsb3NlCiAKLSAgICBkZWYgX2NobW9kIChzZWxmLCBmaWxlKToKKyAgICBkZWYgX2NobW9kKHNlbGYsIGZpbGUpOgogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX29zLCAnY2htb2QnKToKICAgICAgICAgICAgIHNlbGYuX29zLmNobW9kKGZpbGUsIHNlbGYuX21vZGUpCiAKZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggNWQ1MTdlZC4uZjUyNzdjNSAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTMxLDcgKzMxLDggQEAKIHVzZWZ1bCBmb3IgZmluYW5jaWFsIGFwcGxpY2F0aW9ucyBvciBmb3IgY29udGV4dHMgd2hlcmUgdXNlcnMgaGF2ZQogZXhwZWN0YXRpb25zIHRoYXQgYXJlIGF0IG9kZHMgd2l0aCBiaW5hcnkgZmxvYXRpbmcgcG9pbnQgKGZvciBpbnN0YW5jZSwKIGluIGJpbmFyeSBmbG9hdGluZyBwb2ludCwgMS4wMCAlIDAuMSBnaXZlcyAwLjA5OTk5OTk5OTk5OTk5OTk1IGluc3RlYWQKLW9mIHRoZSBleHBlY3RlZCBEZWNpbWFsKCcwLjAwJykgcmV0dXJuZWQgYnkgZGVjaW1hbCBmbG9hdGluZyBwb2ludCkuCitvZiAwLjA7IERlY2ltYWwoJzEuMDAnKSAlIERlY2ltYWwoJzAuMScpIHJldHVybnMgdGhlIGV4cGVjdGVkCitEZWNpbWFsKCcwLjAwJykpLgogCiBIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHVzaW5nIHRoZSBkZWNpbWFsIG1vZHVsZToKIApAQCAtMTMxLDYgKzEzMiw3IEBACiBdCiAKIF9fdmVyc2lvbl9fID0gJzEuNzAnICAgICMgSGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoaXMgY29tcGxpZXMgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgIyBTZWUgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsLwogCiBpbXBvcnQgY29weSBhcyBfY29weQogaW1wb3J0IG1hdGggYXMgX21hdGgKQEAgLTY0OCw4ICs2NTAsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZmxvYXQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBmbG9hdCBpbiBEZWNpbWFsIGNvbnN0cnVjdG9yLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVzZSBmcm9tX2Zsb2F0IGNsYXNzIG1ldGhvZC4iKQorICAgICAgICAgICAgdmFsdWUgPSBEZWNpbWFsLmZyb21fZmxvYXQodmFsdWUpCisgICAgICAgICAgICBzZWxmLl9leHAgID0gdmFsdWUuX2V4cAorICAgICAgICAgICAgc2VsZi5fc2lnbiA9IHZhbHVlLl9zaWduCisgICAgICAgICAgICBzZWxmLl9pbnQgID0gdmFsdWUuX2ludAorICAgICAgICAgICAgc2VsZi5faXNfc3BlY2lhbCAgPSB2YWx1ZS5faXNfc3BlY2lhbAorICAgICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvIERlY2ltYWwiICUgdmFsdWUpCiAKQEAgLTg0NSw4ICs4NTEsMTEgQEAKICAgICAjIHN1YmplY3Qgb2Ygd2hhdCBzaG91bGQgaGFwcGVuIGZvciBhIGNvbXBhcmlzb24gaW52b2x2aW5nIGEgTmFOLgogICAgICMgV2UgdGFrZSB0aGUgZm9sbG93aW5nIGFwcHJvYWNoOgogICAgICMKLSAgICAjICAgPT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgTmFOIGFsd2F5cyByZXR1cm4gRmFsc2UKLSAgICAjICAgIT0gY29tcGFyaXNvbnMgaW52b2x2aW5nIGEgTmFOIGFsd2F5cyByZXR1cm4gVHJ1ZQorICAgICMgICA9PSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBGYWxzZQorICAgICMgICAhPSBjb21wYXJpc29ucyBpbnZvbHZpbmcgYSBxdWlldCBOYU4gYWx3YXlzIHJldHVybiBUcnVlCisgICAgIyAgID09IG9yICE9IGNvbXBhcmlzb25zIGludm9sdmluZyBhIHNpZ25hbGluZyBOYU4gc2lnbmFsCisgICAgIyAgICAgIEludmFsaWRPcGVyYXRpb24sIGFuZCByZXR1cm4gRmFsc2Ugb3IgVHJ1ZSBhcyBhYm92ZSBpZiB0aGUKKyAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KICAgICAjICAgPCwgPiwgPD0gYW5kID49IGNvbXBhcmlzb25zIGludm9sdmluZyBhIChxdWlldCBvciBzaWduYWxpbmcpCiAgICAgIyAgICAgIE5hTiBzaWduYWwgSW52YWxpZE9wZXJhdGlvbiwgYW5kIHJldHVybiBGYWxzZSBpZiB0aGUKICAgICAjICAgICAgSW52YWxpZE9wZXJhdGlvbiBpcyBub3QgdHJhcHBlZC4KQEAgLTg1NCwyNSArODYzLDI1IEBACiAgICAgIyBUaGlzIGJlaGF2aW9yIGlzIGRlc2lnbmVkIHRvIGNvbmZvcm0gYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB0bwogICAgICMgdGhhdCBzcGVjaWZpZWQgYnkgSUVFRSA3NTQuCiAKLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyLCBlcXVhbGl0eV9vcD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLmlzX25hbigpIG9yIG90aGVyLmlzX25hbigpOgorICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA9PSAwCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgorICAgICAgICBzZWxmLCBvdGhlciA9IF9jb252ZXJ0X2Zvcl9jb21wYXJpc29uKHNlbGYsIG90aGVyLCBlcXVhbGl0eV9vcD1UcnVlKQogICAgICAgICBpZiBvdGhlciBpcyBOb3RJbXBsZW1lbnRlZDoKICAgICAgICAgICAgIHJldHVybiBvdGhlcgotICAgICAgICBpZiBzZWxmLmlzX25hbigpIG9yIG90aGVyLmlzX25hbigpOgorICAgICAgICBpZiBzZWxmLl9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KToKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpICE9IDAKIAogCiAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgc2VsZiwgb3RoZXIgPSBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlcikKICAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CiAgICAgICAgICAgICByZXR1cm4gb3RoZXIKICAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQpAQCAtODgxLDcgKzg5MCw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDwgMAogCiAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlciwgY29udGV4dD1Ob25lKToKLSAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlcikKKyAgICAgICAgc2VsZiwgb3RoZXIgPSBfY29udmVydF9mb3JfY29tcGFyaXNvbihzZWxmLCBvdGhlcikKICAgICAgICAgaWYgb3RoZXIgaXMgTm90SW1wbGVtZW50ZWQ6CiAgICAgICAgICAgICByZXR1cm4gb3RoZXIKICAgICAgICAgYW5zID0gc2VsZi5fY29tcGFyZV9jaGVja19uYW5zKG90aGVyLCBjb250ZXh0KQpAQCAtODkwLDcgKzg5OSw3IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpIDw9IDAKIAogICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIHNlbGYsIG90aGVyID0gX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTg5OSw3ICs5MDgsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5fY21wKG90aGVyKSA+IDAKIAogICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIsIGNvbnRleHQ9Tm9uZSk6Ci0gICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIpCisgICAgICAgIHNlbGYsIG90aGVyID0gX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIpCiAgICAgICAgIGlmIG90aGVyIGlzIE5vdEltcGxlbWVudGVkOgogICAgICAgICAgICAgcmV0dXJuIG90aGVyCiAgICAgICAgIGFucyA9IHNlbGYuX2NvbXBhcmVfY2hlY2tfbmFucyhvdGhlciwgY29udGV4dCkKQEAgLTkyOCwzMyArOTM3LDI5IEBACiAKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgICIiInguX19oYXNoX18oKSA8PT0+IGhhc2goeCkiIiIKLSAgICAgICAgIyBEZWNpbWFsIGludGVnZXJzIG11c3QgaGFzaCB0aGUgc2FtZSBhcyB0aGUgaW50cwotICAgICAgICAjCi0gICAgICAgICMgVGhlIGhhc2ggb2YgYSBub25zcGVjaWFsIG5vbmludGVnZXIgRGVjaW1hbCBtdXN0IGRlcGVuZCBvbmx5Ci0gICAgICAgICMgb24gdGhlIHZhbHVlIG9mIHRoYXQgRGVjaW1hbCwgYW5kIG5vdCBvbiBpdHMgcmVwcmVzZW50YXRpb24uCi0gICAgICAgICMgRm9yIGV4YW1wbGU6IGhhc2goRGVjaW1hbCgnMTAwRS0xJykpID09IGhhc2goRGVjaW1hbCgnMTAnKSkuCisKKyAgICAgICAgIyBJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgaGFzaCBvZiBhIERlY2ltYWwgaW5zdGFuY2UKKyAgICAgICAgIyBhZ3JlZXMgd2l0aCB0aGUgaGFzaCBvZiBhIG51bWVyaWNhbGx5IGVxdWFsIGludGVnZXIsIGZsb2F0CisgICAgICAgICMgb3IgRnJhY3Rpb24sIHdlIGZvbGxvdyB0aGUgcnVsZXMgZm9yIG51bWVyaWMgaGFzaGVzIG91dGxpbmVkCisgICAgICAgICMgaW4gdGhlIGRvY3VtZW50YXRpb24uICAoU2VlIGxpYnJhcnkgZG9jcywgJ0J1aWx0LWluIFR5cGVzJykuCiAgICAgICAgIGlmIHNlbGYuX2lzX3NwZWNpYWw6Ci0gICAgICAgICAgICBpZiBzZWxmLl9pc25hbigpOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQ2Fubm90IGhhc2ggYSBOYU4gdmFsdWUuJykKLSAgICAgICAgICAgIHJldHVybiBoYXNoKHN0cihzZWxmKSkKLSAgICAgICAgaWYgbm90IHNlbGY6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBzZWxmLl9pc2ludGVnZXIoKToKLSAgICAgICAgICAgIG9wID0gX1dvcmtSZXAoc2VsZi50b19pbnRlZ3JhbF92YWx1ZSgpKQotICAgICAgICAgICAgIyB0byBtYWtlIGNvbXB1dGF0aW9uIGZlYXNpYmxlIGZvciBEZWNpbWFscyB3aXRoIGxhcmdlCi0gICAgICAgICAgICAjIGV4cG9uZW50LCB3ZSB1c2UgdGhlIGZhY3QgdGhhdCBoYXNoKG4pID09IGhhc2gobSkgZm9yCi0gICAgICAgICAgICAjIGFueSB0d28gbm9uemVybyBpbnRlZ2VycyBuIGFuZCBtIHN1Y2ggdGhhdCAoaSkgbiBhbmQgbQotICAgICAgICAgICAgIyBoYXZlIHRoZSBzYW1lIHNpZ24sIGFuZCAoaWkpIG4gaXMgY29uZ3J1ZW50IHRvIG0gbW9kdWxvCi0gICAgICAgICAgICAjIDIqKjY0LTEuICBTbyB3ZSBjYW4gcmVwbGFjZSBoYXNoKCgtMSkqKnMqYyoxMCoqZSkgd2l0aAotICAgICAgICAgICAgIyBoYXNoKCgtMSkqKnMqYypwb3coMTAsIGUsIDIqKjY0LTEpLgotICAgICAgICAgICAgcmV0dXJuIGhhc2goKC0xKSoqb3Auc2lnbipvcC5pbnQqcG93KDEwLCBvcC5leHAsIDIqKjY0LTEpKQotICAgICAgICAjIFRoZSB2YWx1ZSBvZiBhIG5vbnplcm8gbm9uc3BlY2lhbCBEZWNpbWFsIGluc3RhbmNlIGlzCi0gICAgICAgICMgZmFpdGhmdWxseSByZXByZXNlbnRlZCBieSB0aGUgdHJpcGxlIGNvbnNpc3Rpbmcgb2YgaXRzIHNpZ24sCi0gICAgICAgICMgaXRzIGFkanVzdGVkIGV4cG9uZW50LCBhbmQgaXRzIGNvZWZmaWNpZW50IHdpdGggdHJhaWxpbmcKLSAgICAgICAgIyB6ZXJvcyByZW1vdmVkLgotICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi5fc2lnbiwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4cCtsZW4oc2VsZi5faW50KSwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludC5yc3RyaXAoJzAnKSkpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3NuYW4oKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0Nhbm5vdCBoYXNoIGEgc2lnbmFsaW5nIE5hTiB2YWx1ZS4nKQorICAgICAgICAgICAgZWxpZiBzZWxmLmlzX25hbigpOgorICAgICAgICAgICAgICAgIHJldHVybiBfUHlIQVNIX05BTgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zaWduOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLV9QeUhBU0hfSU5GCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfSU5GCisKKyAgICAgICAgaWYgc2VsZi5fZXhwID49IDA6CisgICAgICAgICAgICBleHBfaGFzaCA9IHBvdygxMCwgc2VsZi5fZXhwLCBfUHlIQVNIX01PRFVMVVMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHBfaGFzaCA9IHBvdyhfUHlIQVNIXzEwSU5WLCAtc2VsZi5fZXhwLCBfUHlIQVNIX01PRFVMVVMpCisgICAgICAgIGhhc2hfID0gaW50KHNlbGYuX2ludCkgKiBleHBfaGFzaCAlIF9QeUhBU0hfTU9EVUxVUworICAgICAgICBhbnMgPSBoYXNoXyBpZiBzZWxmID49IDAgZWxzZSAtaGFzaF8KKyAgICAgICAgcmV0dXJuIC0yIGlmIGFucyA9PSAtMSBlbHNlIGFucwogCiAgICAgZGVmIGFzX3R1cGxlKHNlbGYpOgogICAgICAgICAiIiJSZXByZXNlbnRzIHRoZSBudW1iZXIgYXMgYSB0cmlwbGUgdHVwbGUuCkBAIC0xNTg1LDkgKzE1OTAsOSBAQAogICAgICAgICAiIiJEZWNhcGl0YXRlIHRoZSBwYXlsb2FkIG9mIGEgTmFOIHRvIGZpdCB0aGUgY29udGV4dCIiIgogICAgICAgICBwYXlsb2FkID0gc2VsZi5faW50CiAKLSAgICAgICAgIyBtYXhpbXVtIGxlbmd0aCBvZiBwYXlsb2FkIGlzIHByZWNpc2lvbiBpZiBfY2xhbXA9MCwKLSAgICAgICAgIyBwcmVjaXNpb24tMSBpZiBfY2xhbXA9MS4KLSAgICAgICAgbWF4X3BheWxvYWRfbGVuID0gY29udGV4dC5wcmVjIC0gY29udGV4dC5fY2xhbXAKKyAgICAgICAgIyBtYXhpbXVtIGxlbmd0aCBvZiBwYXlsb2FkIGlzIHByZWNpc2lvbiBpZiBjbGFtcD0wLAorICAgICAgICAjIHByZWNpc2lvbi0xIGlmIGNsYW1wPTEuCisgICAgICAgIG1heF9wYXlsb2FkX2xlbiA9IGNvbnRleHQucHJlYyAtIGNvbnRleHQuY2xhbXAKICAgICAgICAgaWYgbGVuKHBheWxvYWQpID4gbWF4X3BheWxvYWRfbGVuOgogICAgICAgICAgICAgcGF5bG9hZCA9IHBheWxvYWRbbGVuKHBheWxvYWQpLW1heF9wYXlsb2FkX2xlbjpdLmxzdHJpcCgnMCcpCiAgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCBwYXlsb2FkLCBzZWxmLl9leHAsIFRydWUpCkBAIC0xNjEyLDExICsxNjE3LDExIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIERlY2ltYWwoc2VsZikKIAogICAgICAgICAjIGlmIHNlbGYgaXMgemVybyB0aGVuIGV4cG9uZW50IHNob3VsZCBiZSBiZXR3ZWVuIEV0aW55IGFuZAotICAgICAgICAjIEVtYXggaWYgX2NsYW1wPT0wLCBhbmQgYmV0d2VlbiBFdGlueSBhbmQgRXRvcCBpZiBfY2xhbXA9PTEuCisgICAgICAgICMgRW1heCBpZiBjbGFtcD09MCwgYW5kIGJldHdlZW4gRXRpbnkgYW5kIEV0b3AgaWYgY2xhbXA9PTEuCiAgICAgICAgIEV0aW55ID0gY29udGV4dC5FdGlueSgpCiAgICAgICAgIEV0b3AgPSBjb250ZXh0LkV0b3AoKQogICAgICAgICBpZiBub3Qgc2VsZjoKLSAgICAgICAgICAgIGV4cF9tYXggPSBbY29udGV4dC5FbWF4LCBFdG9wXVtjb250ZXh0Ll9jbGFtcF0KKyAgICAgICAgICAgIGV4cF9tYXggPSBbY29udGV4dC5FbWF4LCBFdG9wXVtjb250ZXh0LmNsYW1wXQogICAgICAgICAgICAgbmV3X2V4cCA9IG1pbihtYXgoc2VsZi5fZXhwLCBFdGlueSksIGV4cF9tYXgpCiAgICAgICAgICAgICBpZiBuZXdfZXhwICE9IHNlbGYuX2V4cDoKICAgICAgICAgICAgICAgICBjb250ZXh0Ll9yYWlzZV9lcnJvcihDbGFtcGVkKQpAQCAtMTY0NSw3ICsxNjUwLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLCAnMScsIGV4cF9taW4tMSkKICAgICAgICAgICAgICAgICBkaWdpdHMgPSAwCiAgICAgICAgICAgICByb3VuZGluZ19tZXRob2QgPSBzZWxmLl9waWNrX3JvdW5kaW5nX2Z1bmN0aW9uW2NvbnRleHQucm91bmRpbmddCi0gICAgICAgICAgICBjaGFuZ2VkID0gZ2V0YXR0cihzZWxmLCByb3VuZGluZ19tZXRob2QpKGRpZ2l0cykKKyAgICAgICAgICAgIGNoYW5nZWQgPSByb3VuZGluZ19tZXRob2Qoc2VsZiwgZGlnaXRzKQogICAgICAgICAgICAgY29lZmYgPSBzZWxmLl9pbnRbOmRpZ2l0c10gb3IgJzAnCiAgICAgICAgICAgICBpZiBjaGFuZ2VkID4gMDoKICAgICAgICAgICAgICAgICBjb2VmZiA9IHN0cihpbnQoY29lZmYpKzEpCkBAIC0xNjc2LDggKzE2ODEsOCBAQAogICAgICAgICBpZiBzZWxmX2lzX3N1Ym5vcm1hbDoKICAgICAgICAgICAgIGNvbnRleHQuX3JhaXNlX2Vycm9yKFN1Ym5vcm1hbCkKIAotICAgICAgICAjIGZvbGQgZG93biBpZiBfY2xhbXAgPT0gMSBhbmQgc2VsZiBoYXMgdG9vIGZldyBkaWdpdHMKLSAgICAgICAgaWYgY29udGV4dC5fY2xhbXAgPT0gMSBhbmQgc2VsZi5fZXhwID4gRXRvcDoKKyAgICAgICAgIyBmb2xkIGRvd24gaWYgY2xhbXAgPT0gMSBhbmQgc2VsZiBoYXMgdG9vIGZldyBkaWdpdHMKKyAgICAgICAgaWYgY29udGV4dC5jbGFtcCA9PSAxIGFuZCBzZWxmLl9leHAgPiBFdG9wOgogICAgICAgICAgICAgY29udGV4dC5fcmFpc2VfZXJyb3IoQ2xhbXBlZCkKICAgICAgICAgICAgIHNlbGZfcGFkZGVkID0gc2VsZi5faW50ICsgJzAnKihzZWxmLl9leHAgLSBFdG9wKQogICAgICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgc2VsZl9wYWRkZWQsIEV0b3ApCkBAIC0xNjg1LDggKzE2OTAsNiBAQAogICAgICAgICAjIGhlcmUgc2VsZiB3YXMgcmVwcmVzZW50YWJsZSB0byBiZWdpbiB3aXRoOyByZXR1cm4gdW5jaGFuZ2VkCiAgICAgICAgIHJldHVybiBEZWNpbWFsKHNlbGYpCiAKLSAgICBfcGlja19yb3VuZGluZ19mdW5jdGlvbiA9IHt9Ci0KICAgICAjIGZvciBlYWNoIG9mIHRoZSByb3VuZGluZyBmdW5jdGlvbnMgYmVsb3c6CiAgICAgIyAgIHNlbGYgaXMgYSBmaW5pdGUsIG5vbnplcm8gRGVjaW1hbAogICAgICMgICBwcmVjIGlzIGFuIGludGVnZXIgc2F0aXNmeWluZyAwIDw9IHByZWMgPCBsZW4oc2VsZi5faW50KQpAQCAtMTc1Myw2ICsxNzU2LDE3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gLXNlbGYuX3JvdW5kX2Rvd24ocHJlYykKIAorICAgIF9waWNrX3JvdW5kaW5nX2Z1bmN0aW9uID0gZGljdCgKKyAgICAgICAgUk9VTkRfRE9XTiA9IF9yb3VuZF9kb3duLAorICAgICAgICBST1VORF9VUCA9IF9yb3VuZF91cCwKKyAgICAgICAgUk9VTkRfSEFMRl9VUCA9IF9yb3VuZF9oYWxmX3VwLAorICAgICAgICBST1VORF9IQUxGX0RPV04gPSBfcm91bmRfaGFsZl9kb3duLAorICAgICAgICBST1VORF9IQUxGX0VWRU4gPSBfcm91bmRfaGFsZl9ldmVuLAorICAgICAgICBST1VORF9DRUlMSU5HID0gX3JvdW5kX2NlaWxpbmcsCisgICAgICAgIFJPVU5EX0ZMT09SID0gX3JvdW5kX2Zsb29yLAorICAgICAgICBST1VORF8wNVVQID0gX3JvdW5kXzA1dXAsCisgICAgKQorCiAgICAgZGVmIF9fcm91bmRfXyhzZWxmLCBuPU5vbmUpOgogICAgICAgICAiIiJSb3VuZCBzZWxmIHRvIHRoZSBuZWFyZXN0IGludGVnZXIsIG9yIHRvIGEgZ2l2ZW4gcHJlY2lzaW9uLgogCkBAIC0yNDI4LDcgKzI0NDIsNyBAQAogCiAgICAgICAgIGlmIG5vdCBkdXA6CiAgICAgICAgICAgICByZXR1cm4gX2RlY19mcm9tX3RyaXBsZShkdXAuX3NpZ24sICcwJywgMCkKLSAgICAgICAgZXhwX21heCA9IFtjb250ZXh0LkVtYXgsIGNvbnRleHQuRXRvcCgpXVtjb250ZXh0Ll9jbGFtcF0KKyAgICAgICAgZXhwX21heCA9IFtjb250ZXh0LkVtYXgsIGNvbnRleHQuRXRvcCgpXVtjb250ZXh0LmNsYW1wXQogICAgICAgICBlbmQgPSBsZW4oZHVwLl9pbnQpCiAgICAgICAgIGV4cCA9IGR1cC5fZXhwCiAgICAgICAgIHdoaWxlIGR1cC5faW50W2VuZC0xXSA9PSAnMCcgYW5kIGV4cCA8IGV4cF9tYXg6CkBAIC0yNTQ5LDggKzI1NjMsOCBAQAogICAgICAgICBpZiBkaWdpdHMgPCAwOgogICAgICAgICAgICAgc2VsZiA9IF9kZWNfZnJvbV90cmlwbGUoc2VsZi5fc2lnbiwgJzEnLCBleHAtMSkKICAgICAgICAgICAgIGRpZ2l0cyA9IDAKLSAgICAgICAgdGhpc19mdW5jdGlvbiA9IGdldGF0dHIoc2VsZiwgc2VsZi5fcGlja19yb3VuZGluZ19mdW5jdGlvbltyb3VuZGluZ10pCi0gICAgICAgIGNoYW5nZWQgPSB0aGlzX2Z1bmN0aW9uKGRpZ2l0cykKKyAgICAgICAgdGhpc19mdW5jdGlvbiA9IHNlbGYuX3BpY2tfcm91bmRpbmdfZnVuY3Rpb25bcm91bmRpbmddCisgICAgICAgIGNoYW5nZWQgPSB0aGlzX2Z1bmN0aW9uKHNlbGYsIGRpZ2l0cykKICAgICAgICAgY29lZmYgPSBzZWxmLl9pbnRbOmRpZ2l0c10gb3IgJzAnCiAgICAgICAgIGlmIGNoYW5nZWQgPT0gMToKICAgICAgICAgICAgIGNvZWZmID0gc3RyKGludChjb2VmZikrMSkKQEAgLTI5NDIsNiArMjk1Niw3IEBACiAKICAgICBkZWYgY29weV9zaWduKHNlbGYsIG90aGVyKToKICAgICAgICAgIiIiUmV0dXJucyBzZWxmIHdpdGggdGhlIHNpZ24gb2Ygb3RoZXIuIiIiCisgICAgICAgIG90aGVyID0gX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIF9kZWNfZnJvbV90cmlwbGUob3RoZXIuX3NpZ24sIHNlbGYuX2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwLCBzZWxmLl9pc19zcGVjaWFsKQogCkBAIC0zNjQ2LDEyICszNjYxLDEyIEBACiAgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIChzdHIoc2VsZiksKSkKIAogICAgIGRlZiBfX2NvcHlfXyhzZWxmKToKLSAgICAgICAgaWYgdHlwZShzZWxmKSA9PSBEZWNpbWFsOgorICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIERlY2ltYWw6CiAgICAgICAgICAgICByZXR1cm4gc2VsZiAgICAgIyBJJ20gaW1tdXRhYmxlOyB0aGVyZWZvcmUgSSBhbSBteSBvd24gY2xvbmUKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN0cihzZWxmKSkKIAogICAgIGRlZiBfX2RlZXBjb3B5X18oc2VsZiwgbWVtbyk6Ci0gICAgICAgIGlmIHR5cGUoc2VsZikgPT0gRGVjaW1hbDoKKyAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBEZWNpbWFsOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYgICAgICMgTXkgY29tcG9uZW50cyBhcmUgYWxzbyBpbW11dGFibGUKICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN0cihzZWxmKSkKIApAQCAtMzc2MSwxOCArMzc3Niw2IEBACiAKICMjIyMjIENvbnRleHQgY2xhc3MgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0KLSMgZ2V0IHJvdW5kaW5nIG1ldGhvZCBmdW5jdGlvbjoKLXJvdW5kaW5nX2Z1bmN0aW9ucyA9IFtuYW1lIGZvciBuYW1lIGluIERlY2ltYWwuX19kaWN0X18ua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19yb3VuZF8nKV0KLWZvciBuYW1lIGluIHJvdW5kaW5nX2Z1bmN0aW9uczoKLSAgICAjIG5hbWUgaXMgbGlrZSBfcm91bmRfaGFsZl9ldmVuLCBnb2VzIHRvIHRoZSBnbG9iYWwgUk9VTkRfSEFMRl9FVkVOIHZhbHVlLgotICAgIGdsb2JhbG5hbWUgPSBuYW1lWzE6XS51cHBlcigpCi0gICAgdmFsID0gZ2xvYmFscygpW2dsb2JhbG5hbWVdCi0gICAgRGVjaW1hbC5fcGlja19yb3VuZGluZ19mdW5jdGlvblt2YWxdID0gbmFtZQotCi1kZWwgbmFtZSwgdmFsLCBnbG9iYWxuYW1lLCByb3VuZGluZ19mdW5jdGlvbnMKLQogY2xhc3MgX0NvbnRleHRNYW5hZ2VyKG9iamVjdCk6CiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGNsYXNzIHRvIHN1cHBvcnQgbG9jYWxjb250ZXh0KCkuCiAKQEAgLTM4MDQsMTMgKzM4MDcsMTMgQEAKICAgICBFbWF4IC0gICBNYXhpbXVtIGV4cG9uZW50CiAgICAgY2FwaXRhbHMgLSAgICAgIElmIDEsIDEqMTBeMSBpcyBwcmludGVkIGFzIDFFKzEuCiAgICAgICAgICAgICAgICAgICAgIElmIDAsIHByaW50ZWQgYXMgMWUxCi0gICAgX2NsYW1wIC0gSWYgMSwgY2hhbmdlIGV4cG9uZW50cyBpZiB0b28gaGlnaCAoRGVmYXVsdCAwKQorICAgIGNsYW1wIC0gIElmIDEsIGNoYW5nZSBleHBvbmVudHMgaWYgdG9vIGhpZ2ggKERlZmF1bHQgMCkKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcmVjPU5vbmUsIHJvdW5kaW5nPU5vbmUsCiAgICAgICAgICAgICAgICAgIHRyYXBzPU5vbmUsIGZsYWdzPU5vbmUsCiAgICAgICAgICAgICAgICAgIEVtaW49Tm9uZSwgRW1heD1Ob25lLAotICAgICAgICAgICAgICAgICBjYXBpdGFscz1Ob25lLCBfY2xhbXA9MCwKKyAgICAgICAgICAgICAgICAgY2FwaXRhbHM9Tm9uZSwgY2xhbXA9Tm9uZSwKICAgICAgICAgICAgICAgICAgX2lnbm9yZWRfZmxhZ3M9Tm9uZSk6CiAgICAgICAgICMgU2V0IGRlZmF1bHRzOyBmb3IgZXZlcnl0aGluZyBleGNlcHQgZmxhZ3MgYW5kIF9pZ25vcmVkX2ZsYWdzLAogICAgICAgICAjIGluaGVyaXQgZnJvbSBEZWZhdWx0Q29udGV4dC4KQEAgLTM4MjQsNyArMzgyNyw3IEBACiAgICAgICAgIHNlbGYuRW1pbiA9IEVtaW4gaWYgRW1pbiBpcyBub3QgTm9uZSBlbHNlIGRjLkVtaW4KICAgICAgICAgc2VsZi5FbWF4ID0gRW1heCBpZiBFbWF4IGlzIG5vdCBOb25lIGVsc2UgZGMuRW1heAogICAgICAgICBzZWxmLmNhcGl0YWxzID0gY2FwaXRhbHMgaWYgY2FwaXRhbHMgaXMgbm90IE5vbmUgZWxzZSBkYy5jYXBpdGFscwotICAgICAgICBzZWxmLl9jbGFtcCA9IF9jbGFtcCBpZiBfY2xhbXAgaXMgbm90IE5vbmUgZWxzZSBkYy5fY2xhbXAKKyAgICAgICAgc2VsZi5jbGFtcCA9IGNsYW1wIGlmIGNsYW1wIGlzIG5vdCBOb25lIGVsc2UgZGMuY2xhbXAKIAogICAgICAgICBpZiBfaWdub3JlZF9mbGFncyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5faWdub3JlZF9mbGFncyA9IFtdCkBAIC0zODQ5LDcgKzM4NTIsOCBAQAogICAgICAgICAiIiJTaG93IHRoZSBjdXJyZW50IGNvbnRleHQuIiIiCiAgICAgICAgIHMgPSBbXQogICAgICAgICBzLmFwcGVuZCgnQ29udGV4dChwcmVjPSUocHJlYylkLCByb3VuZGluZz0lKHJvdW5kaW5nKXMsICcKLSAgICAgICAgICAgICAgICAgJ0VtaW49JShFbWluKWQsIEVtYXg9JShFbWF4KWQsIGNhcGl0YWxzPSUoY2FwaXRhbHMpZCcKKyAgICAgICAgICAgICAgICAgJ0VtaW49JShFbWluKWQsIEVtYXg9JShFbWF4KWQsIGNhcGl0YWxzPSUoY2FwaXRhbHMpZCwgJworICAgICAgICAgICAgICAgICAnY2xhbXA9JShjbGFtcClkJwogICAgICAgICAgICAgICAgICAlIHZhcnMoc2VsZikpCiAgICAgICAgIG5hbWVzID0gW2YuX19uYW1lX18gZm9yIGYsIHYgaW4gc2VsZi5mbGFncy5pdGVtcygpIGlmIHZdCiAgICAgICAgIHMuYXBwZW5kKCdmbGFncz1bJyArICcsICcuam9pbihuYW1lcykgKyAnXScpCkBAIC0zODY2LDE3ICszODcwLDM5IEBACiAgICAgICAgICIiIlJldHVybnMgYSBzaGFsbG93IGNvcHkgZnJvbSBzZWxmLiIiIgogICAgICAgICBuYyA9IENvbnRleHQoc2VsZi5wcmVjLCBzZWxmLnJvdW5kaW5nLCBzZWxmLnRyYXBzLAogICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbGFncywgc2VsZi5FbWluLCBzZWxmLkVtYXgsCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLmNhcGl0YWxzLCBzZWxmLl9jbGFtcCwgc2VsZi5faWdub3JlZF9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuY2xhbXAsIHNlbGYuX2lnbm9yZWRfZmxhZ3MpCiAgICAgICAgIHJldHVybiBuYwogCiAgICAgZGVmIGNvcHkoc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgYSBkZWVwIGNvcHkgZnJvbSBzZWxmLiIiIgogICAgICAgICBuYyA9IENvbnRleHQoc2VsZi5wcmVjLCBzZWxmLnJvdW5kaW5nLCBzZWxmLnRyYXBzLmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmxhZ3MuY29weSgpLCBzZWxmLkVtaW4sIHNlbGYuRW1heCwKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FwaXRhbHMsIHNlbGYuX2NsYW1wLCBzZWxmLl9pZ25vcmVkX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYXBpdGFscywgc2VsZi5jbGFtcCwgc2VsZi5faWdub3JlZF9mbGFncykKICAgICAgICAgcmV0dXJuIG5jCiAgICAgX19jb3B5X18gPSBjb3B5CiAKKyAgICAjIF9jbGFtcCBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCB0aGlyZC1wYXJ0eQorICAgICMgY29kZS4gIE1heSBiZSByZW1vdmVkIGluIFB5dGhvbiA+PSAzLjMuCisgICAgZGVmIF9nZXRfY2xhbXAoc2VsZik6CisgICAgICAgICJfY2xhbXAgbWlycm9ycyB0aGUgY2xhbXAgYXR0cmlidXRlLiAgSXRzIHVzZSBpcyBkZXByZWNhdGVkLiIKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1VzZSBvZiB0aGUgX2NsYW1wIGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkLiAnCisgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgY2xhbXAgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgcmV0dXJuIHNlbGYuY2xhbXAKKworICAgIGRlZiBfc2V0X2NsYW1wKHNlbGYsIGNsYW1wKToKKyAgICAgICAgIl9jbGFtcCBtaXJyb3JzIHRoZSBjbGFtcCBhdHRyaWJ1dGUuICBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuIgorICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgd2FybmluZ3Mud2FybignVXNlIG9mIHRoZSBfY2xhbXAgYXR0cmlidXRlIGlzIGRlcHJlY2F0ZWQuICcKKyAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIHVzZSBjbGFtcCBpbnN0ZWFkLicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzZWxmLmNsYW1wID0gY2xhbXAKKworICAgICMgZG9uJ3QgYm90aGVyIHdpdGggX2RlbF9jbGFtcDsgIG5vIHNhbmUgM3JkIHBhcnR5IGNvZGUgc2hvdWxkCisgICAgIyBiZSBkZWxldGluZyB0aGUgX2NsYW1wIGF0dHJpYnV0ZQorICAgIF9jbGFtcCA9IHByb3BlcnR5KF9nZXRfY2xhbXAsIF9zZXRfY2xhbXApCisKICAgICBkZWYgX3JhaXNlX2Vycm9yKHNlbGYsIGNvbmRpdGlvbiwgZXhwbGFuYXRpb24gPSBOb25lLCAqYXJncyk6CiAgICAgICAgICIiIkhhbmRsZXMgYW4gZXJyb3IKIApAQCAtMzk1OSw3ICszOTg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybWl0dGVkLiIpCiAKICAgICAgICAgZCA9IERlY2ltYWwobnVtLCBjb250ZXh0PXNlbGYpCi0gICAgICAgIGlmIGQuX2lzbmFuKCkgYW5kIGxlbihkLl9pbnQpID4gc2VsZi5wcmVjIC0gc2VsZi5fY2xhbXA6CisgICAgICAgIGlmIGQuX2lzbmFuKCkgYW5kIGxlbihkLl9pbnQpID4gc2VsZi5wcmVjIC0gc2VsZi5jbGFtcDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yYWlzZV9lcnJvcihDb252ZXJzaW9uU3ludGF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWFnbm9zdGljIGluZm8gdG9vIGxvbmcgaW4gTmFOIikKICAgICAgICAgcmV0dXJuIGQuX2ZpeChzZWxmKQpAQCAtMzk5Nyw3ICs0MDIzLDEwIEBACiAgICAgICAgIERlY2ltYWwoJzEwMS41JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoRGVjaW1hbCgnLTEwMS41JykpCiAgICAgICAgIERlY2ltYWwoJzEwMS41JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hYnMoLTEpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19hYnNfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgYWRkKHNlbGYsIGEsIGIpOgpAQCAtNDAwNyw4ICs0MDM2LDE5IEBACiAgICAgICAgIERlY2ltYWwoJzE5LjAwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCgnMUUrMicpLCBEZWNpbWFsKCcxLjAxRSs0JykpCiAgICAgICAgIERlY2ltYWwoJzEuMDJFKzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZCgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5hZGQoRGVjaW1hbCg4KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMTMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmFkZCg1LCA1KQorICAgICAgICBEZWNpbWFsKCcxMCcpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX2FkZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19hZGRfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgX2FwcGx5KHNlbGYsIGEpOgogICAgICAgICByZXR1cm4gc3RyKGEuX2ZpeChzZWxmKSkKQEAgLTQwNTAsNyArNDA5MCwxNCBAQAogICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb21wYXJlKERlY2ltYWwoJy0zJyksIERlY2ltYWwoJzIuMScpKQogICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZSgxLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZShEZWNpbWFsKDEpLCAyKQorICAgICAgICBEZWNpbWFsKCctMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZSgxLCBEZWNpbWFsKDIpKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb21wYXJlKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBjb21wYXJlX3NpZ25hbChzZWxmLCBhLCBiKToKQEAgLTQwNzgsNyArNDEyNSwxNCBAQAogICAgICAgICBEZWNpbWFsKCdOYU4nKQogICAgICAgICA+Pj4gcHJpbnQoYy5mbGFnc1tJbnZhbGlkT3BlcmF0aW9uXSkKICAgICAgICAgMQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbChEZWNpbWFsKC0xKSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gYy5jb21wYXJlX3NpZ25hbCgtMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29tcGFyZV9zaWduYWwoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGNvbXBhcmVfdG90YWwoc2VsZiwgYSwgYik6CkBAIC00MTAwLDcgKzQxNTQsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29tcGFyZV90b3RhbChEZWNpbWFsKCcxMi4zJyksICBEZWNpbWFsKCdOYU4nKSkKICAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoMSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvbXBhcmVfdG90YWwoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29tcGFyZV90b3RhbChiKQogCiAgICAgZGVmIGNvbXBhcmVfdG90YWxfbWFnKHNlbGYsIGEsIGIpOgpAQCAtNDEwOCw2ICs0MTY5LDcgQEAKIAogICAgICAgICBMaWtlIGNvbXBhcmVfdG90YWwsIGJ1dCB3aXRoIG9wZXJhbmQncyBzaWduIGlnbm9yZWQgYW5kIGFzc3VtZWQgdG8gYmUgMC4KICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvbXBhcmVfdG90YWxfbWFnKGIpCiAKICAgICBkZWYgY29weV9hYnMoc2VsZiwgYSk6CkBAIC00MTE3LDE3ICs0MTc5LDIzIEBACiAgICAgICAgIERlY2ltYWwoJzIuMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9hYnMoRGVjaW1hbCgnLTEwMCcpKQogICAgICAgICBEZWNpbWFsKCcxMDAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfYWJzKC0xKQorICAgICAgICBEZWNpbWFsKCcxJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmNvcHlfYWJzKCkKIAogICAgIGRlZiBjb3B5X2RlY2ltYWwoc2VsZiwgYSk6Ci0gICAgICAgICIiIlJldHVybnMgYSBjb3B5IG9mIHRoZSBkZWNpbWFsIG9iamV0LgorICAgICAgICAiIiJSZXR1cm5zIGEgY29weSBvZiB0aGUgZGVjaW1hbCBvYmplY3QuCiAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2RlY2ltYWwoRGVjaW1hbCgnMi4xJykpCiAgICAgICAgIERlY2ltYWwoJzIuMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9kZWNpbWFsKERlY2ltYWwoJy0xLjAwJykpCiAgICAgICAgIERlY2ltYWwoJy0xLjAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X2RlY2ltYWwoMSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gRGVjaW1hbChhKQogCiAgICAgZGVmIGNvcHlfbmVnYXRlKHNlbGYsIGEpOgpAQCAtNDEzNyw3ICs0MjA1LDEwIEBACiAgICAgICAgIERlY2ltYWwoJy0xMDEuNScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuY29weV9uZWdhdGUoRGVjaW1hbCgnLTEwMS41JykpCiAgICAgICAgIERlY2ltYWwoJzEwMS41JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X25lZ2F0ZSgxKQorICAgICAgICBEZWNpbWFsKCctMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5jb3B5X25lZ2F0ZSgpCiAKICAgICBkZWYgY29weV9zaWduKHNlbGYsIGEsIGIpOgpAQCAtNDE1NCw3ICs0MjI1LDE0IEBACiAgICAgICAgIERlY2ltYWwoJy0xLjUwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5jb3B5X3NpZ24oRGVjaW1hbCgnLTEuNTAnKSwgRGVjaW1hbCgnLTcuMzMnKSkKICAgICAgICAgRGVjaW1hbCgnLTEuNTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbihEZWNpbWFsKDEpLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmNvcHlfc2lnbigxLCBEZWNpbWFsKC0yKSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuY29weV9zaWduKGIpCiAKICAgICBkZWYgZGl2aWRlKHNlbGYsIGEsIGIpOgpAQCAtNDE4MCw4ICs0MjU4LDE5IEBACiAgICAgICAgIERlY2ltYWwoJzEwMDAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZShEZWNpbWFsKCcyLjQwRSs2JyksIERlY2ltYWwoJzInKSkKICAgICAgICAgRGVjaW1hbCgnMS4yMEUrNicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlKDUsIDUpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdmlkZShEZWNpbWFsKDUpLCA1KQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGUoNSwgRGVjaW1hbCg1KSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX3RydWVkaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fdHJ1ZWRpdl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBkaXZpZGVfaW50KHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJEaXZpZGVzIHR3byBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHJlc3VsdC4KQEAgLTQxOTIsMTggKzQyODEsNDAgQEAKICAgICAgICAgRGVjaW1hbCgnMycpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2aWRlX2ludChEZWNpbWFsKCcxJyksIERlY2ltYWwoJzAuMycpKQogICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KDEwLCAzKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KERlY2ltYWwoMTApLCAzKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZpZGVfaW50KDEwLCBEZWNpbWFsKDMpKQorICAgICAgICBEZWNpbWFsKCczJykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLl9fZmxvb3JkaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fZmxvb3JkaXZfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgZGl2bW9kKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJSZXR1cm4gKGEgLy8gYiwgYSAlIGIpCisgICAgICAgICIiIlJldHVybiAoYSAvLyBiLCBhICUgYikuCiAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoRGVjaW1hbCg4KSwgRGVjaW1hbCgzKSkKICAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMicpKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZChEZWNpbWFsKDgpLCBEZWNpbWFsKDQpKQogICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZGl2bW9kKDgsIDQpCisgICAgICAgIChEZWNpbWFsKCcyJyksIERlY2ltYWwoJzAnKSkKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5kaXZtb2QoRGVjaW1hbCg4KSwgNCkKKyAgICAgICAgKERlY2ltYWwoJzInKSwgRGVjaW1hbCgnMCcpKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmRpdm1vZCg4LCBEZWNpbWFsKDQpKQorICAgICAgICAoRGVjaW1hbCgnMicpLCBEZWNpbWFsKCcwJykpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX2Rpdm1vZF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19kaXZtb2RfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgZXhwKHNlbGYsIGEpOgogICAgICAgICAiIiJSZXR1cm5zIGUgKiogYS4KQEAgLTQyMjMsNyArNDMzNCwxMCBAQAogICAgICAgICBEZWNpbWFsKCcyLjAwMDAwMDAwJykKICAgICAgICAgPj4+IGMuZXhwKERlY2ltYWwoJytJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmV4cCgxMCkKKyAgICAgICAgRGVjaW1hbCgnMjIwMjYuNDY1OCcpCiAgICAgICAgICIiIgorICAgICAgICBhID1fY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmV4cChjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgZm1hKHNlbGYsIGEsIGIsIGMpOgpAQCAtNDIzOSw3ICs0MzUzLDE0IEBACiAgICAgICAgIERlY2ltYWwoJy04JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoRGVjaW1hbCgnODg4NTY1MjkwJyksIERlY2ltYWwoJzE1NTcuOTY5MzAnKSwgRGVjaW1hbCgnLTg2MDg3Ljc1NzgnKSkKICAgICAgICAgRGVjaW1hbCgnMS4zODQzNTczNkUrMTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmZtYSgxLCAzLCA0KQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5mbWEoMSwgRGVjaW1hbCgzKSwgNCkKKyAgICAgICAgRGVjaW1hbCgnNycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuZm1hKDEsIDMsIERlY2ltYWwoNCkpCisgICAgICAgIERlY2ltYWwoJzcnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuZm1hKGIsIGMsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc19jYW5vbmljYWwoc2VsZiwgYSk6CkBAIC00MjY5LDcgKzQzOTAsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19maW5pdGUoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfZmluaXRlKDEpCisgICAgICAgIFRydWUKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX2Zpbml0ZSgpCiAKICAgICBkZWYgaXNfaW5maW5pdGUoc2VsZiwgYSk6CkBAIC00MjgxLDcgKzQ0MDUsMTAgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKERlY2ltYWwoJ05hTicpKQogICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX2luZmluaXRlKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19pbmZpbml0ZSgpCiAKICAgICBkZWYgaXNfbmFuKHNlbGYsIGEpOgpAQCAtNDI5NCw3ICs0NDIxLDEwIEBACiAgICAgICAgIFRydWUKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19uYW4oRGVjaW1hbCgnLXNOYU4nKSkKICAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX25hbigxKQorICAgICAgICBGYWxzZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfbmFuKCkKIAogICAgIGRlZiBpc19ub3JtYWwoc2VsZiwgYSk6CkBAIC00MzE0LDcgKzQ0NDQsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IGMuaXNfbm9ybWFsKERlY2ltYWwoJ05hTicpKQogICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gYy5pc19ub3JtYWwoMSkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfbm9ybWFsKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc19xbmFuKHNlbGYsIGEpOgpAQCAtNDMyNiw3ICs0NDU5LDEwIEBACiAgICAgICAgIFRydWUKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKERlY2ltYWwoJ3NOYU4nKSkKICAgICAgICAgRmFsc2UKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19xbmFuKDEpCisgICAgICAgIEZhbHNlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19xbmFuKCkKIAogICAgIGRlZiBpc19zaWduZWQoc2VsZiwgYSk6CkBAIC00MzM4LDcgKzQ0NzQsMTIgQEAKICAgICAgICAgVHJ1ZQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NpZ25lZChEZWNpbWFsKCctMCcpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKDgpCisgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfc2lnbmVkKC04KQorICAgICAgICBUcnVlCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5pc19zaWduZWQoKQogCiAgICAgZGVmIGlzX3NuYW4oc2VsZiwgYSk6CkBAIC00MzUxLDcgKzQ0OTIsMTAgQEAKICAgICAgICAgRmFsc2UKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5pc19zbmFuKERlY2ltYWwoJ3NOYU4nKSkKICAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3NuYW4oMSkKKyAgICAgICAgRmFsc2UKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmlzX3NuYW4oKQogCiAgICAgZGVmIGlzX3N1Ym5vcm1hbChzZWxmLCBhKToKQEAgLTQzNzAsNyArNDUxNCwxMCBAQAogICAgICAgICBGYWxzZQogICAgICAgICA+Pj4gYy5pc19zdWJub3JtYWwoRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIEZhbHNlCisgICAgICAgID4+PiBjLmlzX3N1Ym5vcm1hbCgxKQorICAgICAgICBGYWxzZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfc3Vibm9ybWFsKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBpc196ZXJvKHNlbGYsIGEpOgpAQCAtNDM4Miw3ICs0NTI5LDEyIEBACiAgICAgICAgIEZhbHNlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybyhEZWNpbWFsKCctMEUrMicpKQogICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuaXNfemVybygxKQorICAgICAgICBGYWxzZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmlzX3plcm8oMCkKKyAgICAgICAgVHJ1ZQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuaXNfemVybygpCiAKICAgICBkZWYgbG4oc2VsZiwgYSk6CkBAIC00NDAxLDcgKzQ1NTMsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMi4zMDI1ODUwOScpCiAgICAgICAgID4+PiBjLmxuKERlY2ltYWwoJytJbmZpbml0eScpKQogICAgICAgICBEZWNpbWFsKCdJbmZpbml0eScpCisgICAgICAgID4+PiBjLmxuKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG4oY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZzEwKHNlbGYsIGEpOgpAQCAtNDQyNCw3ICs0NTc5LDEyIEBACiAgICAgICAgIERlY2ltYWwoJzEuODQ1MDk4MDQnKQogICAgICAgICA+Pj4gYy5sb2cxMChEZWNpbWFsKCcrSW5maW5pdHknKSkKICAgICAgICAgRGVjaW1hbCgnSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5sb2cxMCgwKQorICAgICAgICBEZWNpbWFsKCctSW5maW5pdHknKQorICAgICAgICA+Pj4gYy5sb2cxMCgxKQorICAgICAgICBEZWNpbWFsKCcwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZzEwKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBsb2diKHNlbGYsIGEpOgpAQCAtNDQ0Myw3ICs0NjAzLDE0IEBACiAgICAgICAgIERlY2ltYWwoJy0yJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKERlY2ltYWwoJzAnKSkKICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2diKDEpCisgICAgICAgIERlY2ltYWwoJzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMTApCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2IoMTAwKQorICAgICAgICBEZWNpbWFsKCcyJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2IoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfYW5kKHNlbGYsIGEsIGIpOgpAQCAtNDQ2Myw3ICs0NjMwLDE0IEBACiAgICAgICAgIERlY2ltYWwoJzEwMDAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMTAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfYW5kKDExMCwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX2FuZChEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9hbmQoMTEwLCBEZWNpbWFsKDExMDEpKQorICAgICAgICBEZWNpbWFsKCcxMDAnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubG9naWNhbF9hbmQoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfaW52ZXJ0KHNlbGYsIGEpOgpAQCAtNDQ3OSw3ICs0NjUzLDEwIEBACiAgICAgICAgIERlY2ltYWwoJzAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfaW52ZXJ0KERlY2ltYWwoJzEwMTAxMDEwMScpKQogICAgICAgICBEZWNpbWFsKCcxMDEwMTAxMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9pbnZlcnQoMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMTEwMDEwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfaW52ZXJ0KGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBsb2dpY2FsX29yKHNlbGYsIGEsIGIpOgpAQCAtNDQ5OSw3ICs0Njc2LDE0IEBACiAgICAgICAgIERlY2ltYWwoJzExMTAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoRGVjaW1hbCgnMTExMCcpLCBEZWNpbWFsKCcxMCcpKQogICAgICAgICBEZWNpbWFsKCcxMTEwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX29yKDExMCwgMTEwMSkKKyAgICAgICAgRGVjaW1hbCgnMTExMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF9vcihEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzExMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfb3IoMTEwLCBEZWNpbWFsKDExMDEpKQorICAgICAgICBEZWNpbWFsKCcxMTExJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLmxvZ2ljYWxfb3IoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIGxvZ2ljYWxfeG9yKHNlbGYsIGEsIGIpOgpAQCAtNDUxOSwxMCArNDcwMywxNyBAQAogICAgICAgICBEZWNpbWFsKCcxMTAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKERlY2ltYWwoJzExMTEnKSwgRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMTEwMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubG9naWNhbF94b3IoMTEwLCAxMTAxKQorICAgICAgICBEZWNpbWFsKCcxMDExJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5sb2dpY2FsX3hvcihEZWNpbWFsKDExMCksIDExMDEpCisgICAgICAgIERlY2ltYWwoJzEwMTEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LmxvZ2ljYWxfeG9yKDExMCwgRGVjaW1hbCgxMTAxKSkKKyAgICAgICAgRGVjaW1hbCgnMTAxMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5sb2dpY2FsX3hvcihiLCBjb250ZXh0PXNlbGYpCiAKLSAgICBkZWYgbWF4KHNlbGYsIGEsYik6CisgICAgZGVmIG1heChzZWxmLCBhLCBiKToKICAgICAgICAgIiIibWF4IGNvbXBhcmVzIHR3byB2YWx1ZXMgbnVtZXJpY2FsbHkgYW5kIHJldHVybnMgdGhlIG1heGltdW0uCiAKICAgICAgICAgSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBOYU4gdGhlbiB0aGUgZ2VuZXJhbCBydWxlcyBhcHBseS4KQEAgLTQ1MzksMTQgKzQ3MzAsMzQgQEAKICAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnTmFOJykpCiAgICAgICAgIERlY2ltYWwoJzcnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heCgxLCAyKQorICAgICAgICBEZWNpbWFsKCcyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXgoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4KDEsIERlY2ltYWwoMikpCisgICAgICAgIERlY2ltYWwoJzInKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEubWF4KGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBtYXhfbWFnKHNlbGYsIGEsIGIpOgotICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLiIiIgorICAgICAgICAiIiJDb21wYXJlcyB0aGUgdmFsdWVzIG51bWVyaWNhbGx5IHdpdGggdGhlaXIgc2lnbiBpZ25vcmVkLgorCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZyhEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQorICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKERlY2ltYWwoJzcnKSwgRGVjaW1hbCgnLTEwJykpCisgICAgICAgIERlY2ltYWwoJy0xMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWF4X21hZygxLCAtMikKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1heF9tYWcoRGVjaW1hbCgxKSwgLTIpCisgICAgICAgIERlY2ltYWwoJy0yJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tYXhfbWFnKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCctMicpCisgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5tYXhfbWFnKGIsIGNvbnRleHQ9c2VsZikKIAotICAgIGRlZiBtaW4oc2VsZiwgYSxiKToKKyAgICBkZWYgbWluKHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJtaW4gY29tcGFyZXMgdHdvIHZhbHVlcyBudW1lcmljYWxseSBhbmQgcmV0dXJucyB0aGUgbWluaW11bS4KIAogICAgICAgICBJZiBlaXRoZXIgb3BlcmFuZCBpcyBhIE5hTiB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgpAQCAtNDU2MywxMSArNDc3NCwzMSBAQAogICAgICAgICBEZWNpbWFsKCcxLjAnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbihEZWNpbWFsKCc3JyksIERlY2ltYWwoJ05hTicpKQogICAgICAgICBEZWNpbWFsKCc3JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW4oMSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWluKERlY2ltYWwoMSksIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbigxLCBEZWNpbWFsKDI5KSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5taW4oYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG1pbl9tYWcoc2VsZiwgYSwgYik6Ci0gICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuIiIiCisgICAgICAgICIiIkNvbXBhcmVzIHRoZSB2YWx1ZXMgbnVtZXJpY2FsbHkgd2l0aCB0aGVpciBzaWduIGlnbm9yZWQuCisKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKERlY2ltYWwoJzMnKSwgRGVjaW1hbCgnLTInKSkKKyAgICAgICAgRGVjaW1hbCgnLTInKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm1pbl9tYWcoRGVjaW1hbCgnLTMnKSwgRGVjaW1hbCgnTmFOJykpCisgICAgICAgIERlY2ltYWwoJy0zJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKDEsIC0yKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKERlY2ltYWwoMSksIC0yKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW5fbWFnKDEsIERlY2ltYWwoLTIpKQorICAgICAgICBEZWNpbWFsKCcxJykKKyAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm1pbl9tYWcoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG1pbnVzKHNlbGYsIGEpOgpAQCAtNDU4MSwxNiArNDgxMiwxOSBAQAogICAgICAgICBEZWNpbWFsKCctMS4zJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5taW51cyhEZWNpbWFsKCctMS4zJykpCiAgICAgICAgIERlY2ltYWwoJzEuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubWludXMoMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19uZWdfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgbXVsdGlwbHkoc2VsZiwgYSwgYik6CiAgICAgICAgICIiIm11bHRpcGx5IG11bHRpcGxpZXMgdHdvIG9wZXJhbmRzLgogCiAgICAgICAgIElmIGVpdGhlciBvcGVyYW5kIGlzIGEgc3BlY2lhbCB2YWx1ZSB0aGVuIHRoZSBnZW5lcmFsIHJ1bGVzIGFwcGx5LgotICAgICAgICBPdGhlcndpc2UsIHRoZSBvcGVyYW5kcyBhcmUgbXVsdGlwbGllZCB0b2dldGhlciAoJ2xvbmcgbXVsdGlwbGljYXRpb24nKSwKLSAgICAgICAgcmVzdWx0aW5nIGluIGEgbnVtYmVyIHdoaWNoIG1heSBiZSBhcyBsb25nIGFzIHRoZSBzdW0gb2YgdGhlIGxlbmd0aHMKLSAgICAgICAgb2YgdGhlIHR3byBvcGVyYW5kcy4KKyAgICAgICAgT3RoZXJ3aXNlLCB0aGUgb3BlcmFuZHMgYXJlIG11bHRpcGxpZWQgdG9nZXRoZXIKKyAgICAgICAgKCdsb25nIG11bHRpcGxpY2F0aW9uJyksIHJlc3VsdGluZyBpbiBhIG51bWJlciB3aGljaCBtYXkgYmUgYXMgbG9uZyBhcworICAgICAgICB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIHRoZSB0d28gb3BlcmFuZHMuCiAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseShEZWNpbWFsKCcxLjIwJyksIERlY2ltYWwoJzMnKSkKICAgICAgICAgRGVjaW1hbCgnMy42MCcpCkBAIC00NjAyLDggKzQ4MzYsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnLTAuMCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoRGVjaW1hbCgnNjU0MzIxJyksIERlY2ltYWwoJzY1NDMyMScpKQogICAgICAgICBEZWNpbWFsKCc0LjI4MTM1OTcxRSsxMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQubXVsdGlwbHkoNywgNykKKyAgICAgICAgRGVjaW1hbCgnNDknKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0Lm11bHRpcGx5KERlY2ltYWwoNyksIDcpCisgICAgICAgIERlY2ltYWwoJzQ5JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5tdWx0aXBseSg3LCBEZWNpbWFsKDcpKQorICAgICAgICBEZWNpbWFsKCc0OScpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX211bF9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19tdWxfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgbmV4dF9taW51cyhzZWxmLCBhKToKICAgICAgICAgIiIiUmV0dXJucyB0aGUgbGFyZ2VzdCByZXByZXNlbnRhYmxlIG51bWJlciBzbWFsbGVyIHRoYW4gYS4KQEAgLTQ2MTksNyArNDg2NCwxMCBAQAogICAgICAgICBEZWNpbWFsKCctMS4wMDAwMDAwNCcpCiAgICAgICAgID4+PiBjLm5leHRfbWludXMoRGVjaW1hbCgnSW5maW5pdHknKSkKICAgICAgICAgRGVjaW1hbCgnOS45OTk5OTk5OUUrOTk5JykKKyAgICAgICAgPj4+IGMubmV4dF9taW51cygxKQorICAgICAgICBEZWNpbWFsKCcwLjk5OTk5OTk5OScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5uZXh0X21pbnVzKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBuZXh0X3BsdXMoc2VsZiwgYSk6CkBAIC00NjM2LDcgKzQ4ODQsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnLTEuMDAwMDAwMDInKQogICAgICAgICA+Pj4gYy5uZXh0X3BsdXMoRGVjaW1hbCgnLUluZmluaXR5JykpCiAgICAgICAgIERlY2ltYWwoJy05Ljk5OTk5OTk5RSs5OTknKQorICAgICAgICA+Pj4gYy5uZXh0X3BsdXMoMSkKKyAgICAgICAgRGVjaW1hbCgnMS4wMDAwMDAwMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5uZXh0X3BsdXMoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG5leHRfdG93YXJkKHNlbGYsIGEsIGIpOgpAQCAtNDY2NCw3ICs0OTE1LDE0IEBACiAgICAgICAgIERlY2ltYWwoJy0xLjAwMDAwMDA0JykKICAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoRGVjaW1hbCgnMC4wMCcpLCBEZWNpbWFsKCctMC4wMDAwJykpCiAgICAgICAgIERlY2ltYWwoJy0wLjAwJykKKyAgICAgICAgPj4+IGMubmV4dF90b3dhcmQoMCwgMSkKKyAgICAgICAgRGVjaW1hbCgnMUUtMTAwNycpCisgICAgICAgID4+PiBjLm5leHRfdG93YXJkKERlY2ltYWwoMCksIDEpCisgICAgICAgIERlY2ltYWwoJzFFLTEwMDcnKQorICAgICAgICA+Pj4gYy5uZXh0X3Rvd2FyZCgwLCBEZWNpbWFsKDEpKQorICAgICAgICBEZWNpbWFsKCcxRS0xMDA3JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLm5leHRfdG93YXJkKGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBub3JtYWxpemUoc2VsZiwgYSk6CkBAIC00Njg1LDcgKzQ5NDMsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMS4yRSsyJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoRGVjaW1hbCgnMC4wMCcpKQogICAgICAgICBEZWNpbWFsKCcwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5ub3JtYWxpemUoNikKKyAgICAgICAgRGVjaW1hbCgnNicpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5ub3JtYWxpemUoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIG51bWJlcl9jbGFzcyhzZWxmLCBhKToKQEAgLTQ3MzIsNyArNDk5MywxMCBAQAogICAgICAgICAnTmFOJwogICAgICAgICA+Pj4gYy5udW1iZXJfY2xhc3MoRGVjaW1hbCgnc05hTicpKQogICAgICAgICAnc05hTicKKyAgICAgICAgPj4+IGMubnVtYmVyX2NsYXNzKDEyMykKKyAgICAgICAgJytOb3JtYWwnCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5udW1iZXJfY2xhc3MoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHBsdXMoc2VsZiwgYSk6CkBAIC00NzQ2LDcgKzUwMTAsMTAgQEAKICAgICAgICAgRGVjaW1hbCgnMS4zJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wbHVzKERlY2ltYWwoJy0xLjMnKSkKICAgICAgICAgRGVjaW1hbCgnLTEuMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucGx1cygtMSkKKyAgICAgICAgRGVjaW1hbCgnLTEnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEuX19wb3NfXyhjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcG93ZXIoc2VsZiwgYSwgYiwgbW9kdWxvPU5vbmUpOgpAQCAtNDgxNSw4ICs1MDgyLDE5IEBACiAgICAgICAgIERlY2ltYWwoJy0wJykKICAgICAgICAgPj4+IGMucG93ZXIoRGVjaW1hbCgnLTIzJyksIERlY2ltYWwoJzAnKSwgRGVjaW1hbCgnNjU1MzcnKSkKICAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucG93ZXIoNywgNykKKyAgICAgICAgRGVjaW1hbCgnODIzNTQzJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wb3dlcihEZWNpbWFsKDcpLCA3KQorICAgICAgICBEZWNpbWFsKCc4MjM1NDMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnBvd2VyKDcsIERlY2ltYWwoNyksIDIpCisgICAgICAgIERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19wb3dfXyhiLCBtb2R1bG8sIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19wb3dfXyhiLCBtb2R1bG8sIGNvbnRleHQ9c2VsZikKKyAgICAgICAgaWYgciBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVW5hYmxlIHRvIGNvbnZlcnQgJXMgdG8gRGVjaW1hbCIgJSBiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHIKIAogICAgIGRlZiBxdWFudGl6ZShzZWxmLCBhLCBiKToKICAgICAgICAgIiIiUmV0dXJucyBhIHZhbHVlIGVxdWFsIHRvICdhJyAocm91bmRlZCksIGhhdmluZyB0aGUgZXhwb25lbnQgb2YgJ2InLgpAQCAtNDg2Niw3ICs1MTQ0LDE0IEBACiAgICAgICAgIERlY2ltYWwoJzIuMkUrMicpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgnMjE3JyksIERlY2ltYWwoJzFlKzInKSkKICAgICAgICAgRGVjaW1hbCgnMkUrMicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoMSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoRGVjaW1hbCgxKSwgMikKKyAgICAgICAgRGVjaW1hbCgnMScpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucXVhbnRpemUoMSwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnMScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS5xdWFudGl6ZShiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgcmFkaXgoc2VsZik6CkBAIC00OTAxLDggKzUxODYsMTkgQEAKICAgICAgICAgRGVjaW1hbCgnMC4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoRGVjaW1hbCgnMy42JyksIERlY2ltYWwoJzEuMycpKQogICAgICAgICBEZWNpbWFsKCcxLjAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcigyMiwgNikKKyAgICAgICAgRGVjaW1hbCgnNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyKERlY2ltYWwoMjIpLCA2KQorICAgICAgICBEZWNpbWFsKCc0JykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXIoMjIsIERlY2ltYWwoNikpCisgICAgICAgIERlY2ltYWwoJzQnKQogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIGEuX19tb2RfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCisgICAgICAgIHIgPSBhLl9fbW9kX18oYiwgY29udGV4dD1zZWxmKQorICAgICAgICBpZiByIGlzIE5vdEltcGxlbWVudGVkOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIGIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcgogCiAgICAgZGVmIHJlbWFpbmRlcl9uZWFyKHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJSZXR1cm5zIHRvIGJlICJhIC0gYiAqIG4iLCB3aGVyZSBuIGlzIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdGhlIGV4YWN0CkBAIC00OTI4LDcgKzUyMjQsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMC4xJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKCczLjYnKSwgRGVjaW1hbCgnMS4zJykpCiAgICAgICAgIERlY2ltYWwoJy0wLjMnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJlbWFpbmRlcl9uZWFyKDMsIDExKQorICAgICAgICBEZWNpbWFsKCczJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yZW1haW5kZXJfbmVhcihEZWNpbWFsKDMpLCAxMSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucmVtYWluZGVyX25lYXIoMywgRGVjaW1hbCgxMSkpCisgICAgICAgIERlY2ltYWwoJzMnKQogICAgICAgICAiIiIKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKICAgICAgICAgcmV0dXJuIGEucmVtYWluZGVyX25lYXIoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHJvdGF0ZShzZWxmLCBhLCBiKToKQEAgLTQ5NTAsNyArNTI1MywxNCBAQAogICAgICAgICBEZWNpbWFsKCcxMjM0NTY3ODknKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnKzInKSkKICAgICAgICAgRGVjaW1hbCgnMzQ1Njc4OTEyJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5yb3RhdGUoMTMzMzMzMywgMSkKKyAgICAgICAgRGVjaW1hbCgnMTMzMzMzMzAnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnJvdGF0ZShEZWNpbWFsKDEzMzMzMzMpLCAxKQorICAgICAgICBEZWNpbWFsKCcxMzMzMzMzMCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQucm90YXRlKDEzMzMzMzMsIERlY2ltYWwoMSkpCisgICAgICAgIERlY2ltYWwoJzEzMzMzMzMwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnJvdGF0ZShiLCBjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgc2FtZV9xdWFudHVtKHNlbGYsIGEsIGIpOgpAQCAtNDk2Nyw3ICs1Mjc3LDE0IEBACiAgICAgICAgIEZhbHNlCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoJ0luZicpLCBEZWNpbWFsKCctSW5mJykpCiAgICAgICAgIFRydWUKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zYW1lX3F1YW50dW0oMTAwMDAsIC0xKQorICAgICAgICBUcnVlCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2FtZV9xdWFudHVtKERlY2ltYWwoMTAwMDApLCAtMSkKKyAgICAgICAgVHJ1ZQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNhbWVfcXVhbnR1bSgxMDAwMCwgRGVjaW1hbCgtMSkpCisgICAgICAgIFRydWUKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNhbWVfcXVhbnR1bShiKQogCiAgICAgZGVmIHNjYWxlYiAoc2VsZiwgYSwgYik6CkBAIC00OTc5LDggKzUyOTYsMTUgQEAKICAgICAgICAgRGVjaW1hbCgnNy41MCcpCiAgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoJzcuNTAnKSwgRGVjaW1hbCgnMycpKQogICAgICAgICBEZWNpbWFsKCc3LjUwRSszJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zY2FsZWIoMSwgNCkKKyAgICAgICAgRGVjaW1hbCgnMUUrNCcpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc2NhbGViKERlY2ltYWwoMSksIDQpCisgICAgICAgIERlY2ltYWwoJzFFKzQnKQorICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNjYWxlYigxLCBEZWNpbWFsKDQpKQorICAgICAgICBEZWNpbWFsKCcxRSs0JykKICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBhLnNjYWxlYiAoYiwgY29udGV4dD1zZWxmKQorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQorICAgICAgICByZXR1cm4gYS5zY2FsZWIoYiwgY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHNoaWZ0KHNlbGYsIGEsIGIpOgogICAgICAgICAiIiJSZXR1cm5zIGEgc2hpZnRlZCBjb3B5IG9mIGEsIGIgdGltZXMuCkBAIC01MDAyLDcgKzUzMjYsMTQgQEAKICAgICAgICAgRGVjaW1hbCgnMTIzNDU2Nzg5JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKCcxMjM0NTY3ODknKSwgRGVjaW1hbCgnKzInKSkKICAgICAgICAgRGVjaW1hbCgnMzQ1Njc4OTAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdCg4ODg4ODg4OCwgMikKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdChEZWNpbWFsKDg4ODg4ODg4KSwgMikKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKKyAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zaGlmdCg4ODg4ODg4OCwgRGVjaW1hbCgyKSkKKyAgICAgICAgRGVjaW1hbCgnODg4ODg4ODAwJykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNoaWZ0KGIsIGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiBzcXJ0KHNlbGYsIGEpOgpAQCAtNTAyOSw5ICs1MzYwLDEyIEBACiAgICAgICAgIERlY2ltYWwoJzIuNjQ1NzUxMzEnKQogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnNxcnQoRGVjaW1hbCgnMTAnKSkKICAgICAgICAgRGVjaW1hbCgnMy4xNjIyNzc2NicpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3FydCgyKQorICAgICAgICBEZWNpbWFsKCcxLjQxNDIxMzU2JykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5wcmVjCiAgICAgICAgIDkKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnNxcnQoY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHN1YnRyYWN0KHNlbGYsIGEsIGIpOgpAQCAtNTA0MywxNCArNTM3NywyNiBAQAogICAgICAgICBEZWNpbWFsKCcwLjAwJykKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC5zdWJ0cmFjdChEZWNpbWFsKCcxLjMnKSwgRGVjaW1hbCgnMi4wNycpKQogICAgICAgICBEZWNpbWFsKCctMC43NycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoRGVjaW1hbCg4KSwgNSkKKyAgICAgICAgRGVjaW1hbCgnMycpCisgICAgICAgID4+PiBFeHRlbmRlZENvbnRleHQuc3VidHJhY3QoOCwgRGVjaW1hbCg1KSkKKyAgICAgICAgRGVjaW1hbCgnMycpCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gYS5fX3N1Yl9fKGIsIGNvbnRleHQ9c2VsZikKKyAgICAgICAgYSA9IF9jb252ZXJ0X290aGVyKGEsIHJhaXNlaXQ9VHJ1ZSkKKyAgICAgICAgciA9IGEuX19zdWJfXyhiLCBjb250ZXh0PXNlbGYpCisgICAgICAgIGlmIHIgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlVuYWJsZSB0byBjb252ZXJ0ICVzIHRvIERlY2ltYWwiICUgYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiByCiAKICAgICBkZWYgdG9fZW5nX3N0cmluZyhzZWxmLCBhKToKICAgICAgICAgIiIiQ29udmVydHMgYSBudW1iZXIgdG8gYSBzdHJpbmcsIHVzaW5nIHNjaWVudGlmaWMgbm90YXRpb24uCiAKICAgICAgICAgVGhlIG9wZXJhdGlvbiBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIGNvbnRleHQuCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS50b19lbmdfc3RyaW5nKGNvbnRleHQ9c2VsZikKIAogICAgIGRlZiB0b19zY2lfc3RyaW5nKHNlbGYsIGEpOgpAQCAtNTA1OCw2ICs1NDA0LDcgQEAKIAogICAgICAgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgY29udGV4dC4KICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLl9fc3RyX18oY29udGV4dD1zZWxmKQogCiAgICAgZGVmIHRvX2ludGVncmFsX2V4YWN0KHNlbGYsIGEpOgpAQCAtNTA4Nyw2ICs1NDM0LDcgQEAKICAgICAgICAgPj4+IEV4dGVuZGVkQ29udGV4dC50b19pbnRlZ3JhbF9leGFjdChEZWNpbWFsKCctSW5mJykpCiAgICAgICAgIERlY2ltYWwoJy1JbmZpbml0eScpCiAgICAgICAgICIiIgorICAgICAgICBhID0gX2NvbnZlcnRfb3RoZXIoYSwgcmFpc2VpdD1UcnVlKQogICAgICAgICByZXR1cm4gYS50b19pbnRlZ3JhbF9leGFjdChjb250ZXh0PXNlbGYpCiAKICAgICBkZWYgdG9faW50ZWdyYWxfdmFsdWUoc2VsZiwgYSk6CkBAIC01MTE1LDYgKzU0NjMsNyBAQAogICAgICAgICA+Pj4gRXh0ZW5kZWRDb250ZXh0LnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoJy1JbmYnKSkKICAgICAgICAgRGVjaW1hbCgnLUluZmluaXR5JykKICAgICAgICAgIiIiCisgICAgICAgIGEgPSBfY29udmVydF9vdGhlcihhLCByYWlzZWl0PVRydWUpCiAgICAgICAgIHJldHVybiBhLnRvX2ludGVncmFsX3ZhbHVlKGNvbnRleHQ9c2VsZikKIAogICAgICMgdGhlIG1ldGhvZCBuYW1lIGNoYW5nZWQsIGJ1dCB3ZSBwcm92aWRlIGFsc28gdGhlIG9sZCBvbmUsIGZvciBjb21wYXRpYmlsaXR5CkBAIC01MTc4LDIzICs1NTI3LDcgQEAKIAogIyMjIyMgSW50ZWdlciBhcml0aG1ldGljIGZ1bmN0aW9ucyB1c2VkIGJ5IGxuLCBsb2cxMCwgZXhwIGFuZCBfX3Bvd19fICMjIyMjCiAKLSMgVGhpcyBmdW5jdGlvbiBmcm9tIFRpbSBQZXRlcnMgd2FzIHRha2VuIGZyb20gaGVyZToKLSMgaHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWxpc3QvMTk5OS1KdWx5LzAwNzc1OC5odG1sCi0jIFRoZSBjb3JyZWN0aW9uIGJlaW5nIGluIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGZvciBzcGVlZCwgYW5kCi0jIHRoZSB3aG9sZSBmdW5jdGlvbiBpcyBub3QgcmVzb2x2ZWQgd2l0aCBtYXRoLmxvZyBiZWNhdXNlIG9mIGF2b2lkaW5nCi0jIHRoZSB1c2Ugb2YgZmxvYXRzLgotZGVmIF9uYml0cyhuLCBjb3JyZWN0aW9uID0gewotICAgICAgICAnMCc6IDQsICcxJzogMywgJzInOiAyLCAnMyc6IDIsCi0gICAgICAgICc0JzogMSwgJzUnOiAxLCAnNic6IDEsICc3JzogMSwKLSAgICAgICAgJzgnOiAwLCAnOSc6IDAsICdhJzogMCwgJ2InOiAwLAotICAgICAgICAnYyc6IDAsICdkJzogMCwgJ2UnOiAwLCAnZic6IDB9KToKLSAgICAiIiJOdW1iZXIgb2YgYml0cyBpbiBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvc2l0aXZlIGludGVnZXIgbiwKLSAgICBvciAwIGlmIG4gPT0gMC4KLSAgICAiIiIKLSAgICBpZiBuIDwgMDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVGhlIGFyZ3VtZW50IHRvIF9uYml0cyBzaG91bGQgYmUgbm9ubmVnYXRpdmUuIikKLSAgICBoZXhfbiA9ICIleCIgJSBuCi0gICAgcmV0dXJuIDQqbGVuKGhleF9uKSAtIGNvcnJlY3Rpb25baGV4X25bMF1dCitfbmJpdHMgPSBpbnQuYml0X2xlbmd0aAogCiBkZWYgX3NxcnRfbmVhcmVzdChuLCBhKToKICAgICAiIiJDbG9zZXN0IGludGVnZXIgdG8gdGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3NpdGl2ZSBpbnRlZ2VyIG4uICBhIGlzCkBAIC01NTE2LDE5ICs1ODQ5LDU2IEBACiAKICMjIyMjIEhlbHBlciBGdW5jdGlvbnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1kZWYgX2NvbnZlcnRfb3RoZXIob3RoZXIsIHJhaXNlaXQ9RmFsc2UpOgorZGVmIF9jb252ZXJ0X290aGVyKG90aGVyLCByYWlzZWl0PUZhbHNlLCBhbGxvd19mbG9hdD1GYWxzZSk6CiAgICAgIiIiQ29udmVydCBvdGhlciB0byBEZWNpbWFsLgogCiAgICAgVmVyaWZpZXMgdGhhdCBpdCdzIG9rIHRvIHVzZSBpbiBhbiBpbXBsaWNpdCBjb25zdHJ1Y3Rpb24uCisgICAgSWYgYWxsb3dfZmxvYXQgaXMgdHJ1ZSwgYWxsb3cgY29udmVyc2lvbiBmcm9tIGZsb2F0OyAgdGhpcworICAgIGlzIHVzZWQgaW4gdGhlIGNvbXBhcmlzb24gbWV0aG9kcyAoX19lcV9fIGFuZCBmcmllbmRzKS4KKwogICAgICIiIgogICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIERlY2ltYWwpOgogICAgICAgICByZXR1cm4gb3RoZXIKICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgogICAgICAgICByZXR1cm4gRGVjaW1hbChvdGhlcikKKyAgICBpZiBhbGxvd19mbG9hdCBhbmQgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgorICAgICAgICByZXR1cm4gRGVjaW1hbC5mcm9tX2Zsb2F0KG90aGVyKQorCiAgICAgaWYgcmFpc2VpdDoKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlcyB0byBEZWNpbWFsIiAlIG90aGVyKQogICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCitkZWYgX2NvbnZlcnRfZm9yX2NvbXBhcmlzb24oc2VsZiwgb3RoZXIsIGVxdWFsaXR5X29wPUZhbHNlKToKKyAgICAiIiJHaXZlbiBhIERlY2ltYWwgaW5zdGFuY2Ugc2VsZiBhbmQgYSBQeXRob24gb2JqZWN0IG90aGVyLCByZXR1cm4KKyAgICBhIHBhaXIgKHMsIG8pIG9mIERlY2ltYWwgaW5zdGFuY2VzIHN1Y2ggdGhhdCAicyBvcCBvIiBpcworICAgIGVxdWl2YWxlbnQgdG8gInNlbGYgb3Agb3RoZXIiIGZvciBhbnkgb2YgdGhlIDYgY29tcGFyaXNvbgorICAgIG9wZXJhdG9ycyAib3AiLgorCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgRGVjaW1hbCk6CisgICAgICAgIHJldHVybiBzZWxmLCBvdGhlcgorCisgICAgIyBDb21wYXJpc29uIHdpdGggYSBSYXRpb25hbCBpbnN0YW5jZSAoYWxzbyBpbmNsdWRlcyBpbnRlZ2Vycyk6CisgICAgIyBzZWxmIG9wIG4vZCA8PT4gc2VsZipkIG9wIG4gKGZvciBuIGFuZCBkIGludGVnZXJzLCBkIHBvc2l0aXZlKS4KKyAgICAjIEEgTmFOIG9yIGluZmluaXR5IGNhbiBiZSBsZWZ0IHVuY2hhbmdlZCB3aXRob3V0IGFmZmVjdGluZyB0aGUKKyAgICAjIGNvbXBhcmlzb24gcmVzdWx0LgorICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIF9udW1iZXJzLlJhdGlvbmFsKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2lzX3NwZWNpYWw6CisgICAgICAgICAgICBzZWxmID0gX2RlY19mcm9tX3RyaXBsZShzZWxmLl9zaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGludChzZWxmLl9pbnQpICogb3RoZXIuZGVub21pbmF0b3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXhwKQorICAgICAgICByZXR1cm4gc2VsZiwgRGVjaW1hbChvdGhlci5udW1lcmF0b3IpCisKKyAgICAjIENvbXBhcmlzb25zIHdpdGggZmxvYXQgYW5kIGNvbXBsZXggdHlwZXMuICA9PSBhbmQgIT0gY29tcGFyaXNvbnMKKyAgICAjIHdpdGggY29tcGxleCBudW1iZXJzIHNob3VsZCBzdWNjZWVkLCByZXR1cm5pbmcgZWl0aGVyIFRydWUgb3IgRmFsc2UKKyAgICAjIGFzIGFwcHJvcHJpYXRlLiAgT3RoZXIgY29tcGFyaXNvbnMgcmV0dXJuIE5vdEltcGxlbWVudGVkLgorICAgIGlmIGVxdWFsaXR5X29wIGFuZCBpc2luc3RhbmNlKG90aGVyLCBfbnVtYmVycy5Db21wbGV4KSBhbmQgb3RoZXIuaW1hZyA9PSAwOgorICAgICAgICBvdGhlciA9IG90aGVyLnJlYWwKKyAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBmbG9hdCk6CisgICAgICAgIHJldHVybiBzZWxmLCBEZWNpbWFsLmZyb21fZmxvYXQob3RoZXIpCisgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkLCBOb3RJbXBsZW1lbnRlZAorCisKICMjIyMjIFNldHVwIFNwZWNpZmljIENvbnRleHRzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgVGhlIGRlZmF1bHQgY29udGV4dCBwcm90b3R5cGUgdXNlZCBieSBDb250ZXh0KCkKQEAgLTU1NDAsNyArNTkxMCw4IEBACiAgICAgICAgIGZsYWdzPVtdLAogICAgICAgICBFbWF4PTk5OTk5OTk5OSwKICAgICAgICAgRW1pbj0tOTk5OTk5OTk5LAotICAgICAgICBjYXBpdGFscz0xCisgICAgICAgIGNhcGl0YWxzPTEsCisgICAgICAgIGNsYW1wPTAKICkKIAogIyBQcmUtbWFkZSBhbHRlcm5hdGUgY29udGV4dHMgb2ZmZXJlZCBieSB0aGUgc3BlY2lmaWNhdGlvbgpAQCAtNTYwNSw3ICs1OTc2LDcgQEAKICMKICMgQSBmb3JtYXQgc3BlY2lmaWVyIGZvciBEZWNpbWFsIGxvb2tzIGxpa2U6CiAjCi0jICAgW1tmaWxsXWFsaWduXVtzaWduXVswXVttaW5pbXVtd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdCisjICAgW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVttaW5pbXVtd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdCiAKIF9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyX3JlZ2V4ID0gcmUuY29tcGlsZShyIiIiXEEKICg/OgpAQCAtNTYxMyw2ICs1OTg0LDcgQEAKICAgICg/UDxhbGlnbj5bPD49Xl0pCiApPwogKD9QPHNpZ24+Wy0rIF0pPworKD9QPGFsdD5cIyk/CiAoP1A8emVyb3BhZD4wKT8KICg/UDxtaW5pbXVtd2lkdGg+KD8hMClcZCspPwogKD9QPHRob3VzYW5kc19zZXA+LCk/CkBAIC01NjcwLDcgKzYwNDIsMTAgQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFsaWdubWVudCBjb25mbGljdHMgd2l0aCAnMCcgaW4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IHNwZWNpZmllcjogIiArIGZvcm1hdF9zcGVjKQogICAgIGZvcm1hdF9kaWN0WydmaWxsJ10gPSBmaWxsIG9yICcgJwotICAgIGZvcm1hdF9kaWN0WydhbGlnbiddID0gYWxpZ24gb3IgJzwnCisgICAgIyBQRVAgMzEwMSBvcmlnaW5hbGx5IHNwZWNpZmllZCB0aGF0IHRoZSBkZWZhdWx0IGFsaWdubWVudCBzaG91bGQKKyAgICAjIGJlIGxlZnQ7ICBpdCB3YXMgbGF0ZXIgYWdyZWVkIHRoYXQgcmlnaHQtYWxpZ25lZCBtYWtlcyBtb3JlIHNlbnNlCisgICAgIyBmb3IgbnVtZXJpYyB0eXBlcy4gIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjg1Ny4KKyAgICBmb3JtYXRfZGljdFsnYWxpZ24nXSA9IGFsaWduIG9yICc+JwogCiAgICAgIyBkZWZhdWx0IHNpZ24gaGFuZGxpbmc6ICctJyBmb3IgbmVnYXRpdmUsICcnIGZvciBwb3NpdGl2ZQogICAgIGlmIGZvcm1hdF9kaWN0WydzaWduJ10gaXMgTm9uZToKQEAgLTU4MjUsNyArNjIwMCw3IEBACiAKICAgICBzaWduID0gX2Zvcm1hdF9zaWduKGlzX25lZ2F0aXZlLCBzcGVjKQogCi0gICAgaWYgZnJhY3BhcnQ6CisgICAgaWYgZnJhY3BhcnQgb3Igc3BlY1snYWx0J106CiAgICAgICAgIGZyYWNwYXJ0ID0gc3BlY1snZGVjaW1hbF9wb2ludCddICsgZnJhY3BhcnQKIAogICAgIGlmIGV4cCAhPSAwIG9yIHNwZWNbJ3R5cGUnXSBpbiAnZUUnOgpAQCAtNTg1Niw4ICs2MjMxLDE5IEBACiAjIF9TaWduZWRJbmZpbml0eVtzaWduXSBpcyBpbmZpbml0eSB3LyB0aGF0IHNpZ24KIF9TaWduZWRJbmZpbml0eSA9IChfSW5maW5pdHksIF9OZWdhdGl2ZUluZmluaXR5KQogCisjIENvbnN0YW50cyByZWxhdGVkIHRvIHRoZSBoYXNoIGltcGxlbWVudGF0aW9uOyAgaGFzaCh4KSBpcyBiYXNlZAorIyBvbiB0aGUgcmVkdWN0aW9uIG9mIHggbW9kdWxvIF9QeUhBU0hfTU9EVUxVUworaW1wb3J0IHN5cworX1B5SEFTSF9NT0RVTFVTID0gc3lzLmhhc2hfaW5mby5tb2R1bHVzCisjIGhhc2ggdmFsdWVzIHRvIHVzZSBmb3IgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXRpZXMsIGFuZCBuYW5zCitfUHlIQVNIX0lORiA9IHN5cy5oYXNoX2luZm8uaW5mCitfUHlIQVNIX05BTiA9IHN5cy5oYXNoX2luZm8ubmFuCitkZWwgc3lzCisKKyMgX1B5SEFTSF8xMElOViBpcyB0aGUgaW52ZXJzZSBvZiAxMCBtb2R1bG8gdGhlIHByaW1lIF9QeUhBU0hfTU9EVUxVUworX1B5SEFTSF8xMElOViA9IHBvdygxMCwgX1B5SEFTSF9NT0RVTFVTIC0gMiwgX1B5SEFTSF9NT0RVTFVTKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IGRvY3Rlc3QsIHN5cwotICAgIGRvY3Rlc3QudGVzdG1vZChzeXMubW9kdWxlc1tfX25hbWVfX10pCisgICAgaW1wb3J0IGRvY3Rlc3QsIGRlY2ltYWwKKyAgICBkb2N0ZXN0LnRlc3Rtb2QoZGVjaW1hbCkKZGlmZiAtLWdpdCBhL0xpYi9kaWZmbGliLnB5IGIvTGliL2RpZmZsaWIucHkKaW5kZXggODczZmMwMi4uZTZjYzZlZSAxMDA2NDQKLS0tIGEvTGliL2RpZmZsaWIucHkKKysrIGIvTGliL2RpZmZsaWIucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKIE1vZHVsZSBkaWZmbGliIC0tIGhlbHBlcnMgZm9yIGNvbXB1dGluZyBkZWx0YXMgYmV0d2VlbiBvYmplY3RzLgpAQCAtMzIsNiArMzIsNyBAQAogICAgICAgICAgICAnRGlmZmVyJywnSVNfQ0hBUkFDVEVSX0pVTksnLCAnSVNfTElORV9KVU5LJywgJ2NvbnRleHRfZGlmZicsCiAgICAgICAgICAgICd1bmlmaWVkX2RpZmYnLCAnSHRtbERpZmYnLCAnTWF0Y2gnXQogCitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBoZWFwcQogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSBhcyBfbmFtZWR0dXBsZQogCkBAIC0xNTAsNyArMTUxLDcgQEAKICAgICAgICAgUmV0dXJuIGFuIHVwcGVyIGJvdW5kIG9uIHJhdGlvKCkgdmVyeSBxdWlja2x5LgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGlzanVuaz1Ob25lLCBhPScnLCBiPScnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXNqdW5rPU5vbmUsIGE9JycsIGI9JycsIGF1dG9qdW5rPVRydWUpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBTZXF1ZW5jZU1hdGNoZXIuCiAKICAgICAgICAgT3B0aW9uYWwgYXJnIGlzanVuayBpcyBOb25lICh0aGUgZGVmYXVsdCksIG9yIGEgb25lLWFyZ3VtZW50CkBAIC0xNjgsNiArMTY5LDEwIEBACiAgICAgICAgIE9wdGlvbmFsIGFyZyBiIGlzIHRoZSBzZWNvbmQgb2YgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4gIEJ5CiAgICAgICAgIGRlZmF1bHQsIGFuIGVtcHR5IHN0cmluZy4gIFRoZSBlbGVtZW50cyBvZiBiIG11c3QgYmUgaGFzaGFibGUuIFNlZQogICAgICAgICBhbHNvIC5zZXRfc2VxcygpIGFuZCAuc2V0X3NlcTIoKS4KKworICAgICAgICBPcHRpb25hbCBhcmcgYXV0b2p1bmsgc2hvdWxkIGJlIHNldCB0byBGYWxzZSB0byBkaXNhYmxlIHRoZQorICAgICAgICAiYXV0b21hdGljIGp1bmsgaGV1cmlzdGljIiB0aGF0IHRyZWF0cyBwb3B1bGFyIGVsZW1lbnRzIGFzIGp1bmsKKyAgICAgICAgKHNlZSBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAgICAgICAgICIiIgogCiAgICAgICAgICMgTWVtYmVyczoKQEAgLTE3OCw3ICsxODMsNyBAQAogICAgICAgICAjICAgICAgd2UgbmVlZCB0byBkbyB0byAnYScgdG8gY2hhbmdlIGl0IGludG8gJ2InPyIKICAgICAgICAgIyBiMmoKICAgICAgICAgIyAgICAgIGZvciB4IGluIGIsIGIyalt4XSBpcyBhIGxpc3Qgb2YgdGhlIGluZGljZXMgKGludG8gYikKLSAgICAgICAgIyAgICAgIGF0IHdoaWNoIHggYXBwZWFyczsganVuayBlbGVtZW50cyBkbyBub3QgYXBwZWFyCisgICAgICAgICMgICAgICBhdCB3aGljaCB4IGFwcGVhcnM7IGp1bmsgYW5kIHBvcHVsYXIgZWxlbWVudHMgZG8gbm90IGFwcGVhcgogICAgICAgICAjIGZ1bGxiY291bnQKICAgICAgICAgIyAgICAgIGZvciB4IGluIGIsIGZ1bGxiY291bnRbeF0gPT0gdGhlIG51bWJlciBvZiB0aW1lcyB4CiAgICAgICAgICMgICAgICBhcHBlYXJzIGluIGI7IG9ubHkgbWF0ZXJpYWxpemVkIGlmIHJlYWxseSBuZWVkZWQgKHVzZWQKQEAgLTIwMCwxNyArMjA1LDE0IEBACiAgICAgICAgICMgICAgICBzdWJ0bGUgYnV0IGhlbHBmdWwgZWZmZWN0cyBvbiB0aGUgYWxnb3JpdGhtLCB3aGljaCBJJ2xsCiAgICAgICAgICMgICAgICBnZXQgYXJvdW5kIHRvIHdyaXRpbmcgdXAgc29tZWRheSA8MC45IHdpbms+LgogICAgICAgICAjICAgICAgRE9OJ1QgVVNFISAgT25seSBfX2NoYWluX2IgdXNlcyB0aGlzLiAgVXNlIGlzYmp1bmsuCi0gICAgICAgICMgaXNianVuawotICAgICAgICAjICAgICAgZm9yIHggaW4gYiwgaXNianVuayh4KSA9PSBpc2p1bmsoeCkgYnV0IG11Y2ggZmFzdGVyOwotICAgICAgICAjICAgICAgaXQncyByZWFsbHkgdGhlIF9fY29udGFpbnNfXyBtZXRob2Qgb2YgYSBoaWRkZW4gZGljdC4KLSAgICAgICAgIyAgICAgIERPRVMgTk9UIFdPUksgZm9yIHggaW4gYSEKLSAgICAgICAgIyBpc2Jwb3B1bGFyCi0gICAgICAgICMgICAgICBmb3IgeCBpbiBiLCBpc2Jwb3B1bGFyKHgpIGlzIHRydWUgaWZmIGIgaXMgcmVhc29uYWJseSBsb25nCi0gICAgICAgICMgICAgICAoYXQgbGVhc3QgMjAwIGVsZW1lbnRzKSBhbmQgeCBhY2NvdW50cyBmb3IgbW9yZSB0aGFuIDElIG9mCi0gICAgICAgICMgICAgICBpdHMgZWxlbWVudHMuICBET0VTIE5PVCBXT1JLIGZvciB4IGluIGEhCisgICAgICAgICMgYmp1bmsKKyAgICAgICAgIyAgICAgIHRoZSBpdGVtcyBpbiBiIGZvciB3aGljaCBpc2p1bmsgaXMgVHJ1ZS4KKyAgICAgICAgIyBicG9wdWxhcgorICAgICAgICAjICAgICAgbm9uanVuayBpdGVtcyBpbiBiIHRyZWF0ZWQgYXMganVuayBieSB0aGUgaGV1cmlzdGljIChpZiB1c2VkKS4KIAogICAgICAgICBzZWxmLmlzanVuayA9IGlzanVuawogICAgICAgICBzZWxmLmEgPSBzZWxmLmIgPSBOb25lCisgICAgICAgIHNlbGYuYXV0b2p1bmsgPSBhdXRvanVuawogICAgICAgICBzZWxmLnNldF9zZXFzKGEsIGIpCiAKICAgICBkZWYgc2V0X3NlcXMoc2VsZiwgYSwgYik6CkBAIC0yODcsNyArMjg5LDcgQEAKICAgICAjIGZyb20gc3RhcnRpbmcgYW55IG1hdGNoaW5nIGJsb2NrIGF0IGEganVuayBlbGVtZW50IC4uLgogICAgICMgYWxzbyBjcmVhdGVzIHRoZSBmYXN0IGlzYmp1bmsgZnVuY3Rpb24gLi4uCiAgICAgIyBiMmogYWxzbyBkb2VzIG5vdCBjb250YWluIGVudHJpZXMgZm9yICJwb3B1bGFyIiBlbGVtZW50cywgbWVhbmluZwotICAgICMgZWxlbWVudHMgdGhhdCBhY2NvdW50IGZvciBtb3JlIHRoYW4gMSUgb2YgdGhlIHRvdGFsIGVsZW1lbnRzLCBhbmQKKyAgICAjIGVsZW1lbnRzIHRoYXQgYWNjb3VudCBmb3IgbW9yZSB0aGFuIDEgKyAxJSBvZiB0aGUgdG90YWwgZWxlbWVudHMsIGFuZAogICAgICMgd2hlbiB0aGUgc2VxdWVuY2UgaXMgcmVhc29uYWJseSBsYXJnZSAoPj0gMjAwIGVsZW1lbnRzKTsgdGhpcyBjYW4KICAgICAjIGJlIHZpZXdlZCBhcyBhbiBhZGFwdGl2ZSBub3Rpb24gb2Ygc2VtaS1qdW5rLCBhbmQgeWllbGRzIGFuIGVub3Jtb3VzCiAgICAgIyBzcGVlZHVwIHdoZW4sIGUuZy4sIGNvbXBhcmluZyBwcm9ncmFtIGZpbGVzIHdpdGggaHVuZHJlZHMgb2YKQEAgLTMwOCw0NCArMzEwLDQ2IEBACiAgICAgICAgICMgb3V0IHRoZSBqdW5rIGxhdGVyIGlzIG11Y2ggY2hlYXBlciB0aGFuIGJ1aWxkaW5nIGIyaiAicmlnaHQiCiAgICAgICAgICMgZnJvbSB0aGUgc3RhcnQuCiAgICAgICAgIGIgPSBzZWxmLmIKLSAgICAgICAgbiA9IGxlbihiKQogICAgICAgICBzZWxmLmIyaiA9IGIyaiA9IHt9Ci0gICAgICAgIHBvcHVsYXJkaWN0ID0ge30KKwogICAgICAgICBmb3IgaSwgZWx0IGluIGVudW1lcmF0ZShiKToKLSAgICAgICAgICAgIGlmIGVsdCBpbiBiMmo6Ci0gICAgICAgICAgICAgICAgaW5kaWNlcyA9IGIyaltlbHRdCi0gICAgICAgICAgICAgICAgaWYgbiA+PSAyMDAgYW5kIGxlbihpbmRpY2VzKSAqIDEwMCA+IG46Ci0gICAgICAgICAgICAgICAgICAgIHBvcHVsYXJkaWN0W2VsdF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGRlbCBpbmRpY2VzWzpdCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaW5kaWNlcy5hcHBlbmQoaSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYjJqW2VsdF0gPSBbaV0KKyAgICAgICAgICAgIGluZGljZXMgPSBiMmouc2V0ZGVmYXVsdChlbHQsIFtdKQorICAgICAgICAgICAgaW5kaWNlcy5hcHBlbmQoaSkKIAotICAgICAgICAjIFB1cmdlIGxlZnRvdmVyIGluZGljZXMgZm9yIHBvcHVsYXIgZWxlbWVudHMuCi0gICAgICAgIGZvciBlbHQgaW4gcG9wdWxhcmRpY3Q6Ci0gICAgICAgICAgICBkZWwgYjJqW2VsdF0KLQotICAgICAgICAjIE5vdyBiMmoua2V5cygpIGNvbnRhaW5zIGVsZW1lbnRzIHVuaXF1ZWx5LCBhbmQgZXNwZWNpYWxseSB3aGVuCi0gICAgICAgICMgdGhlIHNlcXVlbmNlIGlzIGEgc3RyaW5nLCB0aGF0J3MgdXN1YWxseSBhIGdvb2QgZGVhbCBzbWFsbGVyCi0gICAgICAgICMgdGhhbiBsZW4oc3RyaW5nKS4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoZSBudW1iZXIgb2YgaXNqdW5rIGNhbGxzCi0gICAgICAgICMgc2F2ZWQuCisgICAgICAgICMgUHVyZ2UganVuayBlbGVtZW50cworICAgICAgICBzZWxmLmJqdW5rID0ganVuayA9IHNldCgpCiAgICAgICAgIGlzanVuayA9IHNlbGYuaXNqdW5rCi0gICAgICAgIGp1bmtkaWN0ID0ge30KICAgICAgICAgaWYgaXNqdW5rOgotICAgICAgICAgICAgZm9yIGQgaW4gcG9wdWxhcmRpY3QsIGIyajoKLSAgICAgICAgICAgICAgICBmb3IgZWx0IGluIGxpc3QoZC5rZXlzKCkpOgotICAgICAgICAgICAgICAgICAgICBpZiBpc2p1bmsoZWx0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtkaWN0W2VsdF0gPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWwgZFtlbHRdCisgICAgICAgICAgICBmb3IgZWx0IGluIGIyai5rZXlzKCk6CisgICAgICAgICAgICAgICAgaWYgaXNqdW5rKGVsdCk6CisgICAgICAgICAgICAgICAgICAgIGp1bmsuYWRkKGVsdCkKKyAgICAgICAgICAgIGZvciBlbHQgaW4ganVuazogIyBzZXBhcmF0ZSBsb29wIGF2b2lkcyBzZXBhcmF0ZSBsaXN0IG9mIGtleXMKKyAgICAgICAgICAgICAgICBkZWwgYjJqW2VsdF0KIAotICAgICAgICAjIE5vdyBmb3IgeCBpbiBiLCBpc2p1bmsoeCkgPT0geCBpbiBqdW5rZGljdCwgYnV0IHRoZQotICAgICAgICAjIGxhdHRlciBpcyBtdWNoIGZhc3Rlci4gIE5vdGUgdG9vIHRoYXQgd2hpbGUgdGhlcmUgbWF5IGJlIGEKLSAgICAgICAgIyBsb3Qgb2YganVuayBpbiB0aGUgc2VxdWVuY2UsIHRoZSBudW1iZXIgb2YgKnVuaXF1ZSoganVuawotICAgICAgICAjIGVsZW1lbnRzIGlzIHByb2JhYmx5IHNtYWxsLiAgU28gdGhlIG1lbW9yeSBidXJkZW4gb2Yga2VlcGluZwotICAgICAgICAjIHRoaXMgZGljdCBhbGl2ZSBpcyBsaWtlbHkgdHJpdmlhbCBjb21wYXJlZCB0byB0aGUgc2l6ZSBvZiBiMmouCi0gICAgICAgIHNlbGYuaXNianVuayA9IGp1bmtkaWN0Ll9fY29udGFpbnNfXwotICAgICAgICBzZWxmLmlzYnBvcHVsYXIgPSBwb3B1bGFyZGljdC5fX2NvbnRhaW5zX18KKyAgICAgICAgIyBQdXJnZSBwb3B1bGFyIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBqdW5rCisgICAgICAgIHNlbGYuYnBvcHVsYXIgPSBwb3B1bGFyID0gc2V0KCkKKyAgICAgICAgbiA9IGxlbihiKQorICAgICAgICBpZiBzZWxmLmF1dG9qdW5rIGFuZCBuID49IDIwMDoKKyAgICAgICAgICAgIG50ZXN0ID0gbiAvLyAxMDAgKyAxCisgICAgICAgICAgICBmb3IgZWx0LCBpZHhzIGluIGIyai5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGxlbihpZHhzKSA+IG50ZXN0OgorICAgICAgICAgICAgICAgICAgICBwb3B1bGFyLmFkZChlbHQpCisgICAgICAgICAgICBmb3IgZWx0IGluIHBvcHVsYXI6ICMgZGl0dG87IGFzIGZhc3QgZm9yIDElIGRlbGV0aW9uCisgICAgICAgICAgICAgICAgZGVsIGIyaltlbHRdCisKKyAgICBkZWYgaXNianVuayhzZWxmLCBpdGVtKToKKyAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5ianVuaycuIgorICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNianVuayhpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYmp1bmsnIGluc3RlYWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYmp1bmsKKworICAgIGRlZiBpc2Jwb3B1bGFyKHNlbGYsIGl0ZW0pOgorICAgICAgICAiRGVwcmVjYXRlZDsgdXNlICdpdGVtIGluIFNlcXVlbmNlTWF0Y2hlcigpLmJwb3B1bGFyJy4iCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidTZXF1ZW5jZU1hdGNoZXIoKS5pc2Jwb3B1bGFyKGl0ZW0pJyBpcyBkZXByZWNhdGVkO1xuIgorICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJ2l0ZW0gaW4gU01pbnN0YW5jZS5icG9wdWxhcicgaW5zdGVhZC4iLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgcmV0dXJuIGl0ZW0gaW4gc2VsZi5icG9wdWxhcgogCiAgICAgZGVmIGZpbmRfbG9uZ2VzdF9tYXRjaChzZWxmLCBhbG8sIGFoaSwgYmxvLCBiaGkpOgogICAgICAgICAiIiJGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KQEAgLTQwMyw3ICs0MDcsNyBAQAogICAgICAgICAjIFdpbmRpZmYgZW5kcyB1cCBhdCB0aGUgc2FtZSBwbGFjZSBhcyBkaWZmLCBidXQgYnkgcGFpcmluZyB1cAogICAgICAgICAjIHRoZSB1bmlxdWUgJ2IncyBhbmQgdGhlbiBtYXRjaGluZyB0aGUgZmlyc3QgdHdvICdhJ3MuCiAKLSAgICAgICAgYSwgYiwgYjJqLCBpc2JqdW5rID0gc2VsZi5hLCBzZWxmLmIsIHNlbGYuYjJqLCBzZWxmLmlzYmp1bmsKKyAgICAgICAgYSwgYiwgYjJqLCBpc2JqdW5rID0gc2VsZi5hLCBzZWxmLmIsIHNlbGYuYjJqLCBzZWxmLmJqdW5rLl9fY29udGFpbnNfXwogICAgICAgICBiZXN0aSwgYmVzdGosIGJlc3RzaXplID0gYWxvLCBibG8sIDAKICAgICAgICAgIyBmaW5kIGxvbmdlc3QganVuay1mcmVlIG1hdGNoCiAgICAgICAgICMgZHVyaW5nIGFuIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgajJsZW5bal0gPSBsZW5ndGggb2YgbG9uZ2VzdApkaWZmIC0tZ2l0IGEvTGliL2Rpcy5weSBiL0xpYi9kaXMucHkKaW5kZXggMmI0MDBkYy4uZjY0YmFlNiAxMDA2NDQKLS0tIGEvTGliL2Rpcy5weQorKysgYi9MaWIvZGlzLnB5CkBAIC02LDEwICs2LDI1IEBACiBmcm9tIG9wY29kZSBpbXBvcnQgKgogZnJvbSBvcGNvZGUgaW1wb3J0IF9fYWxsX18gYXMgX29wY29kZXNfYWxsCiAKLV9fYWxsX18gPSBbImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIl0gKyBfb3Bjb2Rlc19hbGwKK19fYWxsX18gPSBbImNvZGVfaW5mbyIsICJkaXMiLCAiZGlzYXNzZW1ibGUiLCAiZGlzdGIiLCAiZGlzY28iLAorICAgICAgICAgICAiZmluZGxpbmVzdGFydHMiLCAiZmluZGxhYmVscyIsICJzaG93X2NvZGUiXSArIF9vcGNvZGVzX2FsbAogZGVsIF9vcGNvZGVzX2FsbAogCitfaGF2ZV9jb2RlID0gKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwgdHlwZXMuQ29kZVR5cGUsIHR5cGUpCisKK2RlZiBfdHJ5X2NvbXBpbGUoc291cmNlLCBuYW1lKToKKyAgICAiIiJBdHRlbXB0cyB0byBjb21waWxlIHRoZSBnaXZlbiBzb3VyY2UsIGZpcnN0IGFzIGFuIGV4cHJlc3Npb24gYW5kCisgICAgICAgdGhlbiBhcyBhIHN0YXRlbWVudCBpZiB0aGUgZmlyc3QgYXBwcm9hY2ggZmFpbHMuCisKKyAgICAgICBVdGlsaXR5IGZ1bmN0aW9uIHRvIGFjY2VwdCBzdHJpbmdzIGluIGZ1bmN0aW9ucyB0aGF0IG90aGVyd2lzZQorICAgICAgIGV4cGVjdCBjb2RlIG9iamVjdHMKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGMgPSBjb21waWxlKHNvdXJjZSwgbmFtZSwgJ2V2YWwnKQorICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgYyA9IGNvbXBpbGUoc291cmNlLCBuYW1lLCAnZXhlYycpCisgICAgcmV0dXJuIGMKKwogZGVmIGRpcyh4PU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4KIApAQCAtMTksMjUgKzM0LDI2IEBACiAgICAgaWYgeCBpcyBOb25lOgogICAgICAgICBkaXN0YigpCiAgICAgICAgIHJldHVybgotICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6CisgICAgaWYgaGFzYXR0cih4LCAnX19mdW5jX18nKTogICMgTWV0aG9kCiAgICAgICAgIHggPSB4Ll9fZnVuY19fCi0gICAgaWYgaGFzYXR0cih4LCAnX19jb2RlX18nKToKKyAgICBpZiBoYXNhdHRyKHgsICdfX2NvZGVfXycpOiAgIyBGdW5jdGlvbgogICAgICAgICB4ID0geC5fX2NvZGVfXwotICAgIGlmIGhhc2F0dHIoeCwgJ19fZGljdF9fJyk6CisgICAgaWYgaGFzYXR0cih4LCAnX19kaWN0X18nKTogICMgQ2xhc3Mgb3IgbW9kdWxlCiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHguX19kaWN0X18uaXRlbXMoKSkKICAgICAgICAgZm9yIG5hbWUsIHgxIGluIGl0ZW1zOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgKHR5cGVzLk1ldGhvZFR5cGUsIHR5cGVzLkZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5Db2RlVHlwZSwgdHlwZSkpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgX2hhdmVfY29kZSk6CiAgICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGlzKHgxKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgICAgICBwcmludCgiU29ycnk6IiwgbXNnKQogICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICBlbGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKToKKyAgICBlbGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogIyBDb2RlIG9iamVjdAogICAgICAgICBkaXNhc3NlbWJsZSh4KQotICAgIGVsaWYgaXNpbnN0YW5jZSh4LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgotICAgICAgICBkaXNhc3NlbWJsZV9zdHJpbmcoeCkKKyAgICBlbGlmIGlzaW5zdGFuY2UoeCwgKGJ5dGVzLCBieXRlYXJyYXkpKTogIyBSYXcgYnl0ZWNvZGUKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgpCisgICAgZWxpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICMgU291cmNlIGNvZGUKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX3N0cih4KQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKQEAgLTUyLDkgKzY4LDEwIEBACiAgICAgICAgIHdoaWxlIHRiLnRiX25leHQ6IHRiID0gdGIudGJfbmV4dAogICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGkpCiAKLSMgWFhYIFRoaXMgZHVwbGljYXRlcyBpbmZvcm1hdGlvbiBmcm9tIGNvZGUuaCwgYWxzbyBkdXBsaWNhdGVkIGluIGluc3BlY3QucHkuCi0jIFhYWCBNYXliZSB0aGlzIG91Z2h0IHRvIGJlIHB1dCBpbiBhIGNlbnRyYWwgbG9jYXRpb24sIGxpa2Ugb3Bjb2RlLnB5PwotZmxhZzJuYW1lID0geworIyBUaGUgaW5zcGVjdCBtb2R1bGUgaW50ZXJyb2dhdGVzIHRoaXMgZGljdGlvbmFyeSB0byBidWlsZCBpdHMKKyMgbGlzdCBvZiBDT18qIGNvbnN0YW50cy4gSXQgaXMgYWxzbyB1c2VkIGJ5IHByZXR0eV9mbGFncyB0bworIyB0dXJuIHRoZSBjb19mbGFncyBmaWVsZCBpbnRvIGEgaHVtYW4gcmVhZGFibGUgbGlzdC4KK0NPTVBJTEVSX0ZMQUdfTkFNRVMgPSB7CiAgICAgIDE6ICJPUFRJTUlaRUQiLAogICAgICAyOiAiTkVXTE9DQUxTIiwKICAgICAgNDogIlZBUkFSR1MiLApAQCAtNzAsNyArODcsNyBAQAogICAgIGZvciBpIGluIHJhbmdlKDMyKToKICAgICAgICAgZmxhZyA9IDE8PGkKICAgICAgICAgaWYgZmxhZ3MgJiBmbGFnOgotICAgICAgICAgICAgbmFtZXMuYXBwZW5kKGZsYWcybmFtZS5nZXQoZmxhZywgaGV4KGZsYWcpKSkKKyAgICAgICAgICAgIG5hbWVzLmFwcGVuZChDT01QSUxFUl9GTEFHX05BTUVTLmdldChmbGFnLCBoZXgoZmxhZykpKQogICAgICAgICAgICAgZmxhZ3MgXj0gZmxhZwogICAgICAgICAgICAgaWYgbm90IGZsYWdzOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC03OCwzNSArOTUsNTQgQEAKICAgICAgICAgbmFtZXMuYXBwZW5kKGhleChmbGFncykpCiAgICAgcmV0dXJuICIsICIuam9pbihuYW1lcykKIAotZGVmIHNob3dfY29kZShjbyk6Ci0gICAgIiIiU2hvdyBkZXRhaWxzIGFib3V0IGEgY29kZSBvYmplY3QuIiIiCi0gICAgcHJpbnQoIk5hbWU6ICAgICAgICAgICAgICIsIGNvLmNvX25hbWUpCi0gICAgcHJpbnQoIkZpbGVuYW1lOiAgICAgICAgICIsIGNvLmNvX2ZpbGVuYW1lKQotICAgIHByaW50KCJBcmd1bWVudCBjb3VudDogICAiLCBjby5jb19hcmdjb3VudCkKLSAgICBwcmludCgiS3ctb25seSBhcmd1bWVudHM6IiwgY28uY29fa3dvbmx5YXJnY291bnQpCi0gICAgcHJpbnQoIk51bWJlciBvZiBsb2NhbHM6ICIsIGNvLmNvX25sb2NhbHMpCi0gICAgcHJpbnQoIlN0YWNrIHNpemU6ICAgICAgICIsIGNvLmNvX3N0YWNrc2l6ZSkKLSAgICBwcmludCgiRmxhZ3M6ICAgICAgICAgICAgIiwgcHJldHR5X2ZsYWdzKGNvLmNvX2ZsYWdzKSkKK2RlZiBjb2RlX2luZm8oeCk6CisgICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICMgTWV0aG9kCisgICAgICAgIHggPSB4Ll9fZnVuY19fCisgICAgaWYgaGFzYXR0cih4LCAnX19jb2RlX18nKTogIyBGdW5jdGlvbgorICAgICAgICB4ID0geC5fX2NvZGVfXworICAgIGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgICMgU291cmNlIGNvZGUKKyAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGNvZGVfaW5mbz4iKQorICAgIGlmIGhhc2F0dHIoeCwgJ2NvX2NvZGUnKTogICMgQ29kZSBvYmplY3QKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHgpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKHgpLl9fbmFtZV9fKQorCitkZWYgX2Zvcm1hdF9jb2RlX2luZm8oY28pOgorICAgIGxpbmVzID0gW10KKyAgICBsaW5lcy5hcHBlbmQoIk5hbWU6ICAgICAgICAgICAgICAlcyIgJSBjby5jb19uYW1lKQorICAgIGxpbmVzLmFwcGVuZCgiRmlsZW5hbWU6ICAgICAgICAgICVzIiAlIGNvLmNvX2ZpbGVuYW1lKQorICAgIGxpbmVzLmFwcGVuZCgiQXJndW1lbnQgY291bnQ6ICAgICVzIiAlIGNvLmNvX2FyZ2NvdW50KQorICAgIGxpbmVzLmFwcGVuZCgiS3ctb25seSBhcmd1bWVudHM6ICVzIiAlIGNvLmNvX2t3b25seWFyZ2NvdW50KQorICAgIGxpbmVzLmFwcGVuZCgiTnVtYmVyIG9mIGxvY2FsczogICVzIiAlIGNvLmNvX25sb2NhbHMpCisgICAgbGluZXMuYXBwZW5kKCJTdGFjayBzaXplOiAgICAgICAgJXMiICUgY28uY29fc3RhY2tzaXplKQorICAgIGxpbmVzLmFwcGVuZCgiRmxhZ3M6ICAgICAgICAgICAgICVzIiAlIHByZXR0eV9mbGFncyhjby5jb19mbGFncykpCiAgICAgaWYgY28uY29fY29uc3RzOgotICAgICAgICBwcmludCgiQ29uc3RhbnRzOiIpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiQ29uc3RhbnRzOiIpCiAgICAgICAgIGZvciBpX2MgaW4gZW51bWVyYXRlKGNvLmNvX2NvbnN0cyk6Ci0gICAgICAgICAgICBwcmludCgiJTRkOiAlciIgJSBpX2MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXIiICUgaV9jKQogICAgIGlmIGNvLmNvX25hbWVzOgotICAgICAgICBwcmludCgiTmFtZXM6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJOYW1lczoiKQogICAgICAgICBmb3IgaV9uIGluIGVudW1lcmF0ZShjby5jb19uYW1lcyk6Ci0gICAgICAgICAgICBwcmludCgiJTRkOiAlcyIgJSBpX24pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXMiICUgaV9uKQogICAgIGlmIGNvLmNvX3Zhcm5hbWVzOgotICAgICAgICBwcmludCgiVmFyaWFibGUgbmFtZXM6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJWYXJpYWJsZSBuYW1lczoiKQogICAgICAgICBmb3IgaV9uIGluIGVudW1lcmF0ZShjby5jb192YXJuYW1lcyk6Ci0gICAgICAgICAgICBwcmludCgiJTRkOiAlcyIgJSBpX24pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXMiICUgaV9uKQogICAgIGlmIGNvLmNvX2ZyZWV2YXJzOgotICAgICAgICBwcmludCgiRnJlZSB2YXJpYWJsZXM6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJGcmVlIHZhcmlhYmxlczoiKQogICAgICAgICBmb3IgaV9uIGluIGVudW1lcmF0ZShjby5jb19mcmVldmFycyk6Ci0gICAgICAgICAgICBwcmludCgiJTRkOiAlcyIgJSBpX24pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXMiICUgaV9uKQogICAgIGlmIGNvLmNvX2NlbGx2YXJzOgotICAgICAgICBwcmludCgiQ2VsbCB2YXJpYWJsZXM6IikKKyAgICAgICAgbGluZXMuYXBwZW5kKCJDZWxsIHZhcmlhYmxlczoiKQogICAgICAgICBmb3IgaV9uIGluIGVudW1lcmF0ZShjby5jb19jZWxsdmFycyk6Ci0gICAgICAgICAgICBwcmludCgiJTRkOiAlcyIgJSBpX24pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiU0ZDogJXMiICUgaV9uKQorICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKK2RlZiBzaG93X2NvZGUoY28pOgorICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvIHN0ZG91dC4iIiIKKyAgICBwcmludChjb2RlX2luZm8oY28pKQogCiBkZWYgZGlzYXNzZW1ibGUoY28sIGxhc3RpPS0xKToKICAgICAiIiJEaXNhc3NlbWJsZSBhIGNvZGUgb2JqZWN0LiIiIgpAQCAtMTU2LDcgKzE5Miw3IEBACiAgICAgICAgICAgICAgICAgcHJpbnQoJygnICsgZnJlZVtvcGFyZ10gKyAnKScsIGVuZD0nICcpCiAgICAgICAgIHByaW50KCkKIAotZGVmIGRpc2Fzc2VtYmxlX3N0cmluZyhjb2RlLCBsYXN0aT0tMSwgdmFybmFtZXM9Tm9uZSwgbmFtZXM9Tm9uZSwKK2RlZiBfZGlzYXNzZW1ibGVfYnl0ZXMoY29kZSwgbGFzdGk9LTEsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lKToKICAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCiAgICAgbiA9IGxlbihjb2RlKQpAQCAtMTk1LDYgKzIzMSwxMCBAQAogICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCiAgICAgICAgIHByaW50KCkKIAorZGVmIF9kaXNhc3NlbWJsZV9zdHIoc291cmNlKToKKyAgICAiIiJDb21waWxlIHRoZSBzb3VyY2Ugc3RyaW5nLCB0aGVuIGRpc2Fzc2VtYmxlIHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICBkaXNhc3NlbWJsZShfdHJ5X2NvbXBpbGUoc291cmNlLCAnPGRpcz4nKSkKKwogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCiBkZWYgZmluZGxhYmVscyhjb2RlKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkgYi9MaWIvZGlzdHV0aWxzL19faW5pdF9fLnB5CmluZGV4IDZmNTVmMDEuLjQ5YjZkNTEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvX19pbml0X18ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9fX2luaXRfXy5weQpAQCAtMTUsNSArMTUsNSBAQAogIyBVcGRhdGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIFB5dGhvbiByZWxlYXNlIHByb2Nlc3MuCiAjCiAjLS1zdGFydCBjb25zdGFudHMtLQotX192ZXJzaW9uX18gPSAiMy4xLjMiCitfX3ZlcnNpb25fXyA9ICIzLjIiCiAjLS1lbmQgY29uc3RhbnRzLS0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9tc2kucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3RfbXNpLnB5CmluZGV4IDhhNDU4ZDguLmIxMTk1N2EgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9tc2kucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X21zaS5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiAjIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBNYXJ0aW4gdm9uIEzDtndpcwogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjIFRoZSBiZGlzdF93aW5pbnN0IGNvbW1hbmQgcHJvcGVyCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQppbmRleCA1MDJiMzlhLi5mYjMxNjQ4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKQEAgLTc1NCw5ICs3NTQsOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogICAgICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQeV9FTkFCTEVfU0hBUkVEJyk6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQuJWQiCi0gICAgICAgICAgICAgICAgcHl0aG9ubGliID0gKHRlbXBsYXRlICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN5cy5oZXh2ZXJzaW9uID4+IDI0LCAoc3lzLmhleHZlcnNpb24gPj4gMTYpICYgMHhmZikpCisgICAgICAgICAgICAgICAgcHl0aG9ubGliID0gJ3B5dGhvbnt9Lnt9e30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgc3lzLmhleHZlcnNpb24gPj4gMjQsIChzeXMuaGV4dmVyc2lvbiA+PiAxNikgJiAweGZmLAorICAgICAgICAgICAgICAgICAgICBzeXMuYWJpZmxhZ3MpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMgKyBbcHl0aG9ubGliXQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gZXh0LmxpYnJhcmllcwpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQppbmRleCAyYTkwNWQ5Li5iZGMzYTA5IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbC5weQpAQCAtNDgsNyArNDgsNyBAQAogICAgICd1bml4X3ByZWZpeCc6IHsKICAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAogICAgICAgICAncGxhdGxpYic6ICckcGxhdGJhc2UvbGliL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0L3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0LyRkaXN0X25hbWUnLAorICAgICAgICAnaGVhZGVycyc6ICckYmFzZS9pbmNsdWRlL3B5dGhvbiRweV92ZXJzaW9uX3Nob3J0JGFiaWZsYWdzLyRkaXN0X25hbWUnLAogICAgICAgICAnc2NyaXB0cyc6ICckYmFzZS9iaW4nLAogICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCiAgICAgICAgIH0sCkBAIC02MCwxNCArNjAsNiBAQAogICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCiAgICAgICAgIH0sCiAgICAgJ250JzogV0lORE9XU19TQ0hFTUUsCi0gICAgJ21hYyc6IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgICAgIH0sCi0KICAgICAnb3MyJzogewogICAgICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCiAgICAgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKQEAgLTkwLDE1ICs4Miw4IEBACiAgICAgSU5TVEFMTF9TQ0hFTUVTWyd1bml4X3VzZXInXSA9IHsKICAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKICAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9Ci0KLSAgICBJTlNUQUxMX1NDSEVNRVNbJ21hY191c2VyJ10gPSB7Ci0gICAgICAgICdwdXJlbGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdwbGF0bGliJzogJyR1c2Vyc2l0ZScsCi0gICAgICAgICdoZWFkZXJzJzogJyR1c2VyYmFzZS8kcHlfdmVyc2lvbl9zaG9ydC9pbmNsdWRlLyRkaXN0X25hbWUnLAorICAgICAgICAnaGVhZGVycyc6CisgICAgICAgICAgICAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQkYWJpZmxhZ3MvJGRpc3RfbmFtZScsCiAgICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAogICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAogICAgICAgICB9CkBAIC0zMjgsNiArMzEzLDExIEBACiAKICAgICAgICAgcHlfdmVyc2lvbiA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0KICAgICAgICAgKHByZWZpeCwgZXhlY19wcmVmaXgpID0gZ2V0X2NvbmZpZ192YXJzKCdwcmVmaXgnLCAnZXhlY19wcmVmaXgnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhYmlmbGFncyA9IHN5cy5hYmlmbGFncworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIHN5cy5hYmlmbGFncyBtYXkgbm90IGJlIGRlZmluZWQgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICAgICAgICAgIGFiaWZsYWdzID0gJycKICAgICAgICAgc2VsZi5jb25maWdfdmFycyA9IHsnZGlzdF9uYW1lJzogc2VsZi5kaXN0cmlidXRpb24uZ2V0X25hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzdF92ZXJzaW9uJzogc2VsZi5kaXN0cmlidXRpb24uZ2V0X3ZlcnNpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzdF9mdWxsbmFtZSc6IHNlbGYuZGlzdHJpYnV0aW9uLmdldF9mdWxsbmFtZSgpLApAQCAtMzM4LDYgKzMyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZWZpeCc6IHByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzX2V4ZWNfcHJlZml4JzogZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4ZWNfcHJlZml4JzogZXhlY19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FiaWZsYWdzJzogYWJpZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgaWYgSEFTX1VTRVJfU0lURToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKaW5kZXggYzM2ZTcxMi4uZTFlYjkzMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkKQEAgLTEzMCwxNSArMTMwLDYgQEAKICAgICBpZiBkcnlfcnVuOgogICAgICAgICByZXR1cm4gKGRzdCwgMSkKIAotICAgICMgT24gTWFjIE9TLCB1c2UgdGhlIG5hdGl2ZSBmaWxlIGNvcHkgcm91dGluZQotICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgIGltcG9ydCBtYWNvc3Rvb2xzCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1hY29zdG9vbHMuY29weShzcmMsIGRzdCwgMCwgcHJlc2VydmVfdGltZXMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCi0gICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvcHkgJyVzJyB0byAnJXMnOiAlcyIgJSAoc3JjLCBkc3QsIGV4Yy5hcmdzWy0xXSkpCi0KICAgICAjIElmIGxpbmtpbmcgKGhhcmQgb3Igc3ltYm9saWMpLCB1c2UgdGhlIGFwcHJvcHJpYXRlIHN5c3RlbSBjYWxsCiAgICAgIyAoVW5peCBvbmx5LCBvZiBjb3Vyc2UsIGJ1dCB0aGF0J3MgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5KQogICAgIGVsaWYgbGluayA9PSAnaGFyZCc6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3N5c2NvbmZpZy5weSBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CmluZGV4IDk4NDJkMjYuLjg5N2I3ZDYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5CkBAIC0xMSw3ICsxMSw2IEBACiAKIF9fcmV2aXNpb25fXyA9ICIkSWQkIgogCi1pbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCkBAIC0yNSw3ICsyNCw3IEBACiAjIFBhdGggdG8gdGhlIGJhc2UgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LiBPbiBXaW5kb3dzIHRoZSBiaW5hcnkgbWF5CiAjIGxpdmUgaW4gcHJvamVjdC9QQ0J1aWxkOS4gIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiB4NjQgV2luZG93cyBidWlsZCwKICMgaXQnbGwgbGl2ZSBpbiBwcm9qZWN0L1BDYnVpbGQvYW1kNjQuCi1wcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCitwcm9qZWN0X2Jhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKIGlmIG9zLm5hbWUgPT0gIm50IiBhbmQgInBjYnVpbGQiIGluIHByb2plY3RfYmFzZVstODpdLmxvd2VyKCk6CiAgICAgcHJvamVjdF9iYXNlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwcm9qZWN0X2Jhc2UsIG9zLnBhdGgucGFyZGlyKSkKICMgUEMvVlM3LjEKQEAgLTQ5LDYgKzQ4LDE4IEBACiAgICAgcmV0dXJuIEZhbHNlCiBweXRob25fYnVpbGQgPSBfcHl0aG9uX2J1aWxkKCkKIAorIyBDYWxjdWxhdGUgdGhlIGJ1aWxkIHF1YWxpZmllciBmbGFncyBpZiB0aGV5IGFyZSBkZWZpbmVkLiAgQWRkaW5nIHRoZSBmbGFncworIyB0byB0aGUgaW5jbHVkZSBhbmQgbGliIGRpcmVjdG9yaWVzIG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGFuIGluc3RhbGxhdGlvbiwgbm90CisjIGFuIGluLXNvdXJjZSBidWlsZC4KK2J1aWxkX2ZsYWdzID0gJycKK3RyeToKKyAgICBpZiBub3QgcHl0aG9uX2J1aWxkOgorICAgICAgICBidWlsZF9mbGFncyA9IHN5cy5hYmlmbGFncworZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICMgSXQncyBub3QgYSBjb25maWd1cmUtYmFzZWQgYnVpbGQsIHNvIHRoZSBzeXMgbW9kdWxlIGRvZXNuJ3QgaGF2ZQorICAgICMgdGhpcyBhdHRyaWJ1dGUsIHdoaWNoIGlzIGZpbmUuCisgICAgcGFzcworCiBkZWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCk6CiAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1ham9yIGFuZCBtaW5vciBQeXRob24gdmVyc2lvbiwKICAgICBsZWF2aW5nIG9mZiB0aGUgcGF0Y2hsZXZlbC4gIFNhbXBsZSByZXR1cm4gdmFsdWVzIGNvdWxkIGJlICcxLjUnCkBAIC03NywyMCArODgsMTYgQEAKICAgICAgICAgICAgICMgdGhlIGJ1aWxkIGRpcmVjdG9yeSBtYXkgbm90IGJlIHRoZSBzb3VyY2UgZGlyZWN0b3J5LCB3ZQogICAgICAgICAgICAgIyBtdXN0IHVzZSAic3JjZGlyIiBmcm9tIHRoZSBtYWtlZmlsZSB0byBmaW5kIHRoZSAiSW5jbHVkZSIKICAgICAgICAgICAgICMgZGlyZWN0b3J5LgotICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICAgICAgICAgIGJhc2UgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKICAgICAgICAgICAgIGlmIHBsYXRfc3BlY2lmaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaW5jZGlyID0gb3MucGF0aC5qb2luKGdldF9jb25maWdfdmFyKCdzcmNkaXInKSwgJ0luY2x1ZGUnKQogICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLm5vcm1wYXRoKGluY2RpcikKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJpbmNsdWRlIiwgInB5dGhvbiIgKyBnZXRfcHl0aG9uX3ZlcnNpb24oKSkKKyAgICAgICAgcHl0aG9uX2RpciA9ICdweXRob24nICsgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgKyBidWlsZF9mbGFncworICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiLCBweXRob25fZGlyKQogICAgIGVsaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiKQotICAgIGVsaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTWFjIiwgIkluY2x1ZGUiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJJbmNsdWRlIikKICAgICBlbGlmIG9zLm5hbWUgPT0gIm9zMiI6CiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiSW5jbHVkZSIpCiAgICAgZWxzZToKQEAgLTEzMSwxNyArMTM4LDYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQotICAgIGVsaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICAgICAgaWYgcGxhdF9zcGVjaWZpYzoKLSAgICAgICAgICAgIGlmIHN0YW5kYXJkX2xpYjoKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJsaWItZHlubG9hZCIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCiAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgogICAgICAgICBpZiBzdGFuZGFyZF9saWI6CiAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIpCkBAIC0yMjMsMTAgKzIxOSwxMCBAQAogZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgogICAgICIiIlJldHVybiBmdWxsIHBhdGhuYW1lIG9mIGluc3RhbGxlZCBNYWtlZmlsZSBmcm9tIHRoZSBQeXRob24gYnVpbGQuIiIiCiAgICAgaWYgcHl0aG9uX2J1aWxkOgotICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1ha2VmaWxlIikKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLCAiTWFrZWZpbGUiKQogICAgIGxpYl9kaXIgPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEsIHN0YW5kYXJkX2xpYj0xKQotICAgIHJldHVybiBvcy5wYXRoLmpvaW4obGliX2RpciwgImNvbmZpZyIsICJNYWtlZmlsZSIpCisgICAgY29uZmlnX2ZpbGUgPSAnY29uZmlnLXt9e30nLmZvcm1hdChnZXRfcHl0aG9uX3ZlcnNpb24oKSwgYnVpbGRfZmxhZ3MpCisgICAgcmV0dXJuIG9zLnBhdGguam9pbihsaWJfZGlyLCBjb25maWdfZmlsZSwgJ01ha2VmaWxlJykKIAogCiBkZWYgcGFyc2VfY29uZmlnX2goZnAsIGc9Tm9uZSk6CkBAIC0yNzIsNyArMjY4LDcgQEAKICAgICB1c2VkIGluc3RlYWQgb2YgYSBuZXcgZGljdGlvbmFyeS4KICAgICAiIiIKICAgICBmcm9tIGRpc3R1dGlscy50ZXh0X2ZpbGUgaW1wb3J0IFRleHRGaWxlCi0gICAgZnAgPSBUZXh0RmlsZShmbiwgc3RyaXBfY29tbWVudHM9MSwgc2tpcF9ibGFua3M9MSwgam9pbl9saW5lcz0xKQorICAgIGZwID0gVGV4dEZpbGUoZm4sIHN0cmlwX2NvbW1lbnRzPTEsIHNraXBfYmxhbmtzPTEsIGpvaW5fbGluZXM9MSwgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKQogCiAgICAgaWYgZyBpcyBOb25lOgogICAgICAgICBnID0ge30KQEAgLTMwMSw2ICsyOTcsMTIgQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBkb25lW25dID0gdgogCisgICAgIyBWYXJpYWJsZXMgd2l0aCBhICdQWV8nIHByZWZpeCBpbiB0aGUgbWFrZWZpbGUuIFRoZXNlIG5lZWQgdG8KKyAgICAjIGJlIG1hZGUgYXZhaWxhYmxlIHdpdGhvdXQgdGhhdCBwcmVmaXggdGhyb3VnaCBzeXNjb25maWcuCisgICAgIyBTcGVjaWFsIGNhcmUgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGF0IHZhcmlhYmxlIGV4cGFuc2lvbiB3b3JrcywgZXZlbgorICAgICMgaWYgdGhlIGV4cGFuc2lvbiB1c2VzIHRoZSBuYW1lIHdpdGhvdXQgYSBwcmVmaXguCisgICAgcmVuYW1lZF92YXJpYWJsZXMgPSAoJ0NGTEFHUycsICdMREZMQUdTJywgJ0NQUEZMQUdTJykKKwogICAgICMgZG8gdmFyaWFibGUgaW50ZXJwb2xhdGlvbiBoZXJlCiAgICAgd2hpbGUgbm90ZG9uZToKICAgICAgICAgZm9yIG5hbWUgaW4gbGlzdChub3Rkb25lKToKQEAgLTMxNyw2ICszMTksMTYgQEAKICAgICAgICAgICAgICAgICBlbGlmIG4gaW4gb3MuZW52aXJvbjoKICAgICAgICAgICAgICAgICAgICAgIyBkbyBpdCBsaWtlIG1ha2U6IGZhbGwgYmFjayB0byBlbnZpcm9ubWVudAogICAgICAgICAgICAgICAgICAgICBpdGVtID0gb3MuZW52aXJvbltuXQorCisgICAgICAgICAgICAgICAgZWxpZiBuIGluIHJlbmFtZWRfdmFyaWFibGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1BZXycpIGFuZCBuYW1lWzM6XSBpbiByZW5hbWVkX3ZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSAiIgorCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ1BZXycgKyBuIGluIG5vdGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHIoZG9uZVsnUFlfJyArIG5dKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSBpdGVtID0gIiIKICAgICAgICAgICAgICAgICBpZiBmb3VuZDoKQEAgLTMzMSwxMiArMzQzLDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVbbmFtZV0gPSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgZGVsIG5vdGRvbmVbbmFtZV0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdQWV8nKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5hbWVbMzpdIGluIHJlbmFtZWRfdmFyaWFibGVzOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVbMzpdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBub3QgaW4gZG9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZVtuYW1lXSA9IHZhbHVlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgYm9ndXMgdmFyaWFibGUgcmVmZXJlbmNlOyBqdXN0IGRyb3AgaXQgc2luY2Ugd2UgY2FuJ3QgZGVhbAogICAgICAgICAgICAgICAgIGRlbCBub3Rkb25lW25hbWVdCiAKICAgICBmcC5jbG9zZSgpCiAKKyAgICAjIHN0cmlwIHNwdXJpb3VzIHNwYWNlcworICAgIGZvciBrLCB2IGluIGRvbmUuaXRlbXMoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBzdHIpOgorICAgICAgICAgICAgZG9uZVtrXSA9IHYuc3RyaXAoKQorCiAgICAgIyBzYXZlIHRoZSByZXN1bHRzIGluIHRoZSBnbG9iYWwgZGljdGlvbmFyeQogICAgIGcudXBkYXRlKGRvbmUpCiAgICAgcmV0dXJuIGcKQEAgLTM4Niw3ICs0MTAsOCBAQAogICAgICMgbG9hZCB0aGUgaW5zdGFsbGVkIHB5Y29uZmlnLmg6CiAgICAgdHJ5OgogICAgICAgICBmaWxlbmFtZSA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgICAgIHBhcnNlX2NvbmZpZ19oKGlvLm9wZW4oZmlsZW5hbWUpLCBnKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZpbGU6CisgICAgICAgICAgICBwYXJzZV9jb25maWdfaChmaWxlLCBnKQogICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgbXlfbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgZmlsZW5hbWUKICAgICAgICAgaWYgaGFzYXR0cihtc2csICJzdHJlcnJvciIpOgpAQCAtNDQzLDM4ICs0NjgsMTIgQEAKICAgICBnWydTTyddID0gJy5weWQnCiAgICAgZ1snRVhFJ10gPSAiLmV4ZSIKICAgICBnWydWRVJTSU9OJ10gPSBnZXRfcHl0aG9uX3ZlcnNpb24oKS5yZXBsYWNlKCIuIiwgIiIpCi0gICAgZ1snQklORElSJ10gPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCisgICAgZ1snQklORElSJ10gPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKIAogICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKICAgICBfY29uZmlnX3ZhcnMgPSBnCiAKIAotZGVmIF9pbml0X21hYygpOgotICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgTWFjaW50b3NoIHN5c3RlbXMiIiIKLSAgICBnID0ge30KLSAgICAjIHNldCBiYXNpYyBpbnN0YWxsIGRpcmVjdG9yaWVzCi0gICAgZ1snTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0wLCBzdGFuZGFyZF9saWI9MSkKLSAgICBnWydCSU5MSUJERVNUJ10gPSBnZXRfcHl0aG9uX2xpYihwbGF0X3NwZWNpZmljPTEsIHN0YW5kYXJkX2xpYj0xKQotCi0gICAgIyBYWFggaG1tbS4uIGEgbm9ybWFsIGluc3RhbGwgcHV0cyBpbmNsdWRlIGZpbGVzIGhlcmUKLSAgICBnWydJTkNMVURFUFknXSA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MCkKLQotICAgIGltcG9ydCBNYWNPUwotICAgIGlmIG5vdCBoYXNhdHRyKE1hY09TLCAncnVudGltZW1vZGVsJyk6Ci0gICAgICAgIGdbJ1NPJ10gPSAnLnBwYy5zbGInCi0gICAgZWxzZToKLSAgICAgICAgZ1snU08nXSA9ICcuJXMuc2xiJyAlIE1hY09TLnJ1bnRpbWVtb2RlbAotCi0gICAgIyBYWFggYXJlIHRoZXNlIHVzZWQgYW55d2hlcmU/Ci0gICAgZ1snaW5zdGFsbF9saWInXSA9IG9zLnBhdGguam9pbihFWEVDX1BSRUZJWCwgIkxpYiIpCi0gICAgZ1snaW5zdGFsbF9wbGF0bGliJ10gPSBvcy5wYXRoLmpvaW4oRVhFQ19QUkVGSVgsICJNYWMiLCAiTGliIikKLQotICAgICMgVGhlc2UgYXJlIHVzZWQgYnkgdGhlIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGQKLSAgICBnWydzcmNkaXInXSA9ICc6JwotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIF9pbml0X29zMigpOgogICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgT1MvMiIiIgogICAgIGcgPSB7fQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X21zaS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9tc2kucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMwOGM3OQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9tc2kucHkKQEAgLTAsMCArMSwyNSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJkaXN0X21zaS4iIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CisKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybT09IndpbjMyIiwgIlRoZXNlIHRlc3RzIGFyZSBvbmx5IGZvciB3aW4zMiIpCitjbGFzcyBCRGlzdE1TSVRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuTG9nZ2luZ1NpbGVuY2VyLAorICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9taW5pbWFsKHNlbGYpOgorICAgICAgICAjIG1pbmltYWwgdGVzdCBYWFggbmVlZCBtb3JlIHRlc3RzCisgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYmRpc3RfbXNpIGltcG9ydCBiZGlzdF9tc2kKKyAgICAgICAgcGtnX3B0aCwgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QoKQorICAgICAgICBjbWQgPSBiZGlzdF9tc2koZGlzdCkKKyAgICAgICAgY21kLmVuc3VyZV9maW5hbGl6ZWQoKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQkRpc3RNU0lUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzOTFmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGQucHkKQEAgLTAsMCArMSw1NSBAQAorIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZCBpbXBvcnQgYnVpbGQKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BsYXRmb3JtCisKK2NsYXNzIEJ1aWxkVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CisgICAgICAgIHBrZ19kaXIsIGRpc3QgPSBzZWxmLmNyZWF0ZV9kaXN0KCkKKyAgICAgICAgY21kID0gYnVpbGQoZGlzdCkKKyAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQorCisgICAgICAgICMgaWYgbm90IHNwZWNpZmllZCwgcGxhdF9uYW1lIGdldHMgdGhlIGN1cnJlbnQgcGxhdGZvcm0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQucGxhdF9uYW1lLCBnZXRfcGxhdGZvcm0oKSkKKworICAgICAgICAjIGJ1aWxkX3B1cmVsaWIgaXMgYnVpbGQgKyBsaWIKKyAgICAgICAgd2FudGVkID0gb3MucGF0aC5qb2luKGNtZC5idWlsZF9iYXNlLCAnbGliJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWQuYnVpbGRfcHVyZWxpYiwgd2FudGVkKQorCisgICAgICAgICMgYnVpbGRfcGxhdGxpYiBpcyAnYnVpbGQvbGliLnBsYXRmb3JtLXgueFstcHlkZWJ1Z10nCisgICAgICAgICMgZXhhbXBsZXM6CisgICAgICAgICMgICBidWlsZC9saWIubWFjb3N4LTEwLjMtaTM4Ni0yLjcKKyAgICAgICAgcGxhdF9zcGVjID0gJy4lcy0lcycgJSAoY21kLnBsYXRfbmFtZSwgc3lzLnZlcnNpb25bMDozXSkKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY21kLmJ1aWxkX3BsYXRsaWIuZW5kc3dpdGgoJy1weWRlYnVnJykpCisgICAgICAgICAgICBwbGF0X3NwZWMgKz0gJy1weWRlYnVnJworICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oY21kLmJ1aWxkX2Jhc2UsICdsaWInICsgcGxhdF9zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9wbGF0bGliLCB3YW50ZWQpCisKKyAgICAgICAgIyBieSBkZWZhdWx0LCBidWlsZF9saWIgPSBidWlsZF9wdXJlbGliCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmJ1aWxkX2xpYiwgY21kLmJ1aWxkX3B1cmVsaWIpCisKKyAgICAgICAgIyBidWlsZF90ZW1wIGlzIGJ1aWxkL3RlbXAuPHBsYXQ+CisgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3RlbXAnICsgcGxhdF9zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF90ZW1wLCB3YW50ZWQpCisKKyAgICAgICAgIyBidWlsZF9zY3JpcHRzIGlzIGJ1aWxkL3NjcmlwdHMteC54CisgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbihjbWQuYnVpbGRfYmFzZSwgJ3NjcmlwdHMtJyArICBzeXMudmVyc2lvblswOjNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5idWlsZF9zY3JpcHRzLCB3YW50ZWQpCisKKyAgICAgICAgIyBleGVjdXRhYmxlIGlzIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLmV4ZWN1dGFibGUsIG9zLnBhdGgubm9ybXBhdGgoc3lzLmV4ZWN1dGFibGUpKQorCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQnVpbGRUZXN0Q2FzZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKaW5kZXggMTE4NDRkNi4uZGNiYTc1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CkBAIC0xLDE3ICsxLDE2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHNodXRpbAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRXh0ZW5zaW9uLCBEaXN0cmlidXRpb24KK2Zyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQgaW1wb3J0IGJ1aWxkX2V4dAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogZnJvbSBkaXN0dXRpbHMudGVzdHMuc3VwcG9ydCBpbXBvcnQgVGVtcGRpck1hbmFnZXIKIGZyb20gZGlzdHV0aWxzLnRlc3RzLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdTaWxlbmNlcgogZnJvbSBkaXN0dXRpbHMuZXh0ZW5zaW9uIGltcG9ydCBFeHRlbnNpb24KLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgKFVua25vd25GaWxlRXJyb3IsIERpc3R1dGlsc1NldHVwRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlRXJyb3IpCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICgKKyAgICBDb21waWxlRXJyb3IsIERpc3R1dGlsc1NldHVwRXJyb3IsIFVua25vd25GaWxlRXJyb3IpCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0yNTYsNyArMjU1LDggQEAKICAgICAgICAgY21kLmZpbmFsaXplX29wdGlvbnMoKQogCiAgICAgICAgICMnZXh0ZW5zaW9ucycgb3B0aW9uIG11c3QgYmUgYSBsaXN0IG9mIEV4dGVuc2lvbiBpbnN0YW5jZXMKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzU2V0dXBFcnJvciwgY21kLmNoZWNrX2V4dGVuc2lvbnNfbGlzdCwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1NldHVwRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZC5jaGVja19leHRlbnNpb25zX2xpc3QsICdmb28nKQogCiAgICAgICAgICMgZWFjaCBlbGVtZW50IG9mICdleHRfbW9kdWxlcycgb3B0aW9uIG11c3QgYmUgYW4KICAgICAgICAgIyBFeHRlbnNpb24gaW5zdGFuY2Ugb3IgMi10dXBsZQpAQCAtMzE4LDcgKzMxOCw3IEBACiAgICAgZGVmIHRlc3RfZ2V0X291dHB1dHMoc2VsZik6CiAgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBjX2ZpbGUgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2Zvby5jJykKLSAgICAgICAgc2VsZi53cml0ZV9maWxlKGNfZmlsZSwgJ3ZvaWQgUHlJbml0X2Zvbyh2b2lkKSB7fTtcbicpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShjX2ZpbGUsICd2b2lkIFB5SW5pdF9mb28odm9pZCkge31cbicpCiAgICAgICAgIGV4dCA9IEV4dGVuc2lvbignZm9vJywgW2NfZmlsZV0sIG9wdGlvbmFsPUZhbHNlKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKHsnbmFtZSc6ICd4eCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRfbW9kdWxlcyc6IFtleHRdfSkKQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2hkaXIob2xkX3dkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc29fZmlsZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQorICAgICAgICBzb19leHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvX2ZpbGUuZW5kc3dpdGgoc29fZXh0KSkKICAgICAgICAgc29fZGlyID0gb3MucGF0aC5kaXJuYW1lKHNvX2ZpbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29fZGlyLCBvdGhlcl90bXBfZGlyKQogCkBAIC0zNTUsOCArMzU1LDcgQEAKICAgICAgICAgY21kLnJ1bigpCiAgICAgICAgIHNvX2ZpbGUgPSBjbWQuZ2V0X291dHB1dHMoKVswXQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc29fZmlsZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucGF0aC5zcGxpdGV4dChzb19maWxlKVstMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29fZmlsZS5lbmRzd2l0aChzb19leHQpKQogICAgICAgICBzb19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc29fZmlsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb19kaXIsIGNtZC5idWlsZF9saWIpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jbGVhbi5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGVwX3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxYzM2NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kZXBfdXRpbC5weQpAQCAtMCwwICsxLDgxIEBACisiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmRlcF91dGlsLiIiIgoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2ltcG9ydCB0aW1lCisKK2Zyb20gZGlzdHV0aWxzLmRlcF91dGlsIGltcG9ydCBuZXdlciwgbmV3ZXJfcGFpcndpc2UsIG5ld2VyX2dyb3VwCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKworY2xhc3MgRGVwVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25ld2VyKHNlbGYpOgorCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG5ld19maWxlID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ25ldycpCisgICAgICAgIG9sZF9maWxlID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorCisgICAgICAgICMgUmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yIGlmICduZXdfZmlsZScgZG9lcyBub3QgZXhpc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc0ZpbGVFcnJvciwgbmV3ZXIsIG5ld19maWxlLCBvbGRfZmlsZSkKKworICAgICAgICAjIFJldHVybiB0cnVlIGlmICduZXdfZmlsZScgZXhpc3RzIGFuZCBpcyBtb3JlIHJlY2VudGx5IG1vZGlmaWVkIHRoYW4KKyAgICAgICAgIyAnb2xkX2ZpbGUnLCBvciBpZiAnbmV3X2ZpbGUnIGV4aXN0cyBhbmQgJ29sZF9maWxlJyBkb2Vzbid0LgorICAgICAgICBzZWxmLndyaXRlX2ZpbGUobmV3X2ZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdlcihuZXdfZmlsZSwgJ0lfZG9udF9leGlzdCcpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3ZXIobmV3X2ZpbGUsIG9sZF9maWxlKSkKKworICAgICAgICAjIFJldHVybiBmYWxzZSBpZiBib3RoIGV4aXN0IGFuZCAnb2xkX2ZpbGUnIGlzIHRoZSBzYW1lIGFnZSBvciB5b3VuZ2VyCisgICAgICAgICMgdGhhbiAnbmV3X2ZpbGUnLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld2VyKG9sZF9maWxlLCBuZXdfZmlsZSkpCisKKyAgICBkZWYgdGVzdF9uZXdlcl9wYWlyd2lzZShzZWxmKToKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc291cmNlcyA9IG9zLnBhdGguam9pbih0bXBkaXIsICdzb3VyY2VzJykKKyAgICAgICAgdGFyZ2V0cyA9IG9zLnBhdGguam9pbih0bXBkaXIsICd0YXJnZXRzJykKKyAgICAgICAgb3MubWtkaXIoc291cmNlcykKKyAgICAgICAgb3MubWtkaXIodGFyZ2V0cykKKyAgICAgICAgb25lID0gb3MucGF0aC5qb2luKHNvdXJjZXMsICdvbmUnKQorICAgICAgICB0d28gPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ3R3bycpCisgICAgICAgIHRocmVlID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSAgICAjIEkgYW0gdGhlIG9sZCBmaWxlCisgICAgICAgIGZvdXIgPSBvcy5wYXRoLmpvaW4odGFyZ2V0cywgJ2ZvdXInKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUob25lKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUodHdvKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoZm91cikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2VyX3BhaXJ3aXNlKFtvbmUsIHR3b10sIFt0aHJlZSwgZm91cl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIChbb25lXSxbdGhyZWVdKSkKKworICAgIGRlZiB0ZXN0X25ld2VyX2dyb3VwKHNlbGYpOgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzb3VyY2VzID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ3NvdXJjZXMnKQorICAgICAgICBvcy5ta2Rpcihzb3VyY2VzKQorICAgICAgICBvbmUgPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ29uZScpCisgICAgICAgIHR3byA9IG9zLnBhdGguam9pbihzb3VyY2VzLCAndHdvJykKKyAgICAgICAgdGhyZWUgPSBvcy5wYXRoLmpvaW4oc291cmNlcywgJ3RocmVlJykKKyAgICAgICAgb2xkX2ZpbGUgPSBvcy5wYXRoLmFic3BhdGgoX19maWxlX18pCisKKyAgICAgICAgIyByZXR1cm4gdHJ1ZSBpZiAnb2xkX2ZpbGUnIGlzIG91dC1vZi1kYXRlIHdpdGggcmVzcGVjdCB0byBhbnkgZmlsZQorICAgICAgICAjIGxpc3RlZCBpbiAnc291cmNlcycuCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShvbmUpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSh0d28pCisgICAgICAgIHNlbGYud3JpdGVfZmlsZSh0aHJlZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5ld2VyX2dyb3VwKFtvbmUsIHR3bywgdGhyZWVdLCBvbGRfZmlsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlKSkKKworICAgICAgICAjIG1pc3NpbmcgaGFuZGxpbmcKKyAgICAgICAgb3MucmVtb3ZlKG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbmV3ZXJfZ3JvdXAsIFtvbmUsIHR3bywgb2xkX2ZpbGVdLCB0aHJlZSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5ld2VyX2dyb3VwKFtvbmUsIHR3bywgb2xkX2ZpbGVdLCB0aHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nPSdpZ25vcmUnKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3ZXJfZ3JvdXAoW29uZSwgdHdvLCBvbGRfZmlsZV0sIHRocmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZz0nbmV3ZXInKSkKKworCitkZWYgdGVzdF9zdWl0ZSgpOgorICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoRGVwVXRpbFRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CmluZGV4IDE2MjRmMDAuLmEyMGQ2YzggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXN0LnB5CkBAIC0xLDQgKzEsMyBAQAotIyAtKi0gY29kaW5nOiB1dGY4IC0qLQogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5kaXN0LiIiIgogaW1wb3J0IG9zCiBpbXBvcnQgaW8KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CmluZGV4IDQxNDE0YmIuLmZiZTI2YmYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQpAQCAtODMsNyArODMsNyBAQAogICAgICAgICAgICAgZmQuY2xvc2UoKQogICAgICAgICBkID0gc3lzY29uZmlnLnBhcnNlX21ha2VmaWxlKHNlbGYubWFrZWZpbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgeydDT05GSUdfQVJHUyc6ICInLS1hcmcxPW9wdGFyZzEnICdFTlY9TElCJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdPVEhFUic6ICdmb28nfSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX21ha2VmaWxlX2xpdGVyYWxfZG9sbGFyKHNlbGYpOgogICAgICAgICBzZWxmLm1ha2VmaWxlID0gVEVTVEZOCkBAIC05OCw2ICs5OCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnT1RIRVInOiAnZm9vJ30pCiAKIAorICAgIGRlZiB0ZXN0X3N5c2NvbmZpZ19tb2R1bGUoc2VsZik6CisgICAgICAgIGltcG9ydCBzeXNjb25maWcgYXMgZ2xvYmFsX3N5c2NvbmZpZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMREZMQUdTJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSxzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xEU0hBUkVEJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpKQorCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCiAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5tYWtlU3VpdGUoU3lzY29uZmlnVGVzdENhc2UpKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXh0X2ZpbGUucHkgYi9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQppbmRleCA5NzQ1OWZiLi40NTQ3MjVjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQpAQCAtNTgsNiArNTgsOCBAQAogICAgICAgICAgY29sbGFwc2Vfam9pbiBbZGVmYXVsdDogZmFsc2VdCiAgICAgICAgICAgIHN0cmlwIGxlYWRpbmcgd2hpdGVzcGFjZSBmcm9tIGxpbmVzIHRoYXQgYXJlIGpvaW5lZCB0byB0aGVpcgogICAgICAgICAgICBwcmVkZWNlc3Nvcjsgb25seSBtYXR0ZXJzIGlmIChqb2luX2xpbmVzIGFuZCBub3QgbHN0cmlwX3dzKQorICAgICAgICAgZXJyb3JzIFtkZWZhdWx0OiAnc3RyaWN0J10KKyAgICAgICAgICAgZXJyb3IgaGFuZGxlciB1c2VkIHRvIGRlY29kZSB0aGUgZmlsZSBjb250ZW50CiAKICAgICAgICBOb3RlIHRoYXQgc2luY2UgJ3JzdHJpcF93cycgY2FuIHN0cmlwIHRoZSB0cmFpbGluZyBuZXdsaW5lLCB0aGUKICAgICAgICBzZW1hbnRpY3Mgb2YgJ3JlYWRsaW5lKCknIG11c3QgZGlmZmVyIGZyb20gdGhvc2Ugb2YgdGhlIGJ1aWx0aW4gZmlsZQpAQCAtNzIsNiArNzQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJ3JzdHJpcF93cyc6ICAgICAgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICdqb2luX2xpbmVzJzogICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAnY29sbGFwc2Vfam9pbic6ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9ycyc6ICAgICAgICAgJ3N0cmljdCcsCiAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUsIGZpbGU9Tm9uZSwgKipvcHRpb25zKToKQEAgLTExMSw3ICsxMTQsNyBAQAogICAgICAgICAiIiJPcGVuIGEgbmV3IGZpbGUgbmFtZWQgJ2ZpbGVuYW1lJy4gIFRoaXMgb3ZlcnJpZGVzIGJvdGggdGhlCiAgICAgICAgICAgICdmaWxlbmFtZScgYW5kICdmaWxlJyBhcmd1bWVudHMgdG8gdGhlIGNvbnN0cnVjdG9yLiIiIgogICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKLSAgICAgICAgc2VsZi5maWxlID0gaW8ub3BlbihzZWxmLmZpbGVuYW1lLCAncicpCisgICAgICAgIHNlbGYuZmlsZSA9IGlvLm9wZW4oc2VsZi5maWxlbmFtZSwgJ3InLCBlcnJvcnM9c2VsZi5lcnJvcnMpCiAgICAgICAgIHNlbGYuY3VycmVudF9saW5lID0gMAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IDMwODEyNDUuLmNlM2NkNmMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTIzNSwxNSArMjM1LDYgQEAKICAgICAgICAgICAgIHBhdGggPSBwYXRoWzE6XQogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRoKQogCi0gICAgZWxpZiBvcy5uYW1lID09ICdtYWMnOgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhwYXRobmFtZSk6Ci0gICAgICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKG5ld19yb290LCBwYXRobmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgQ2hvcCBvZmYgdm9sdW1lIG5hbWUgZnJvbSBzdGFydCBvZiBwYXRoCi0gICAgICAgICAgICBlbGVtZW50cyA9IHBhdGhuYW1lLnNwbGl0KCI6IiwgMSkKLSAgICAgICAgICAgIHBhdGhuYW1lID0gIjoiICsgZWxlbWVudHNbMV0KLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGhuYW1lKQotCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigibm90aGluZyBrbm93biBhYm91dCBwbGF0Zm9ybSAnJXMnIiAlIG9zLm5hbWUpCiAKZGlmZiAtLWdpdCBhL0xpYi9kb2N0ZXN0LnB5IGIvTGliL2RvY3Rlc3QucHkKaW5kZXggZmFlMzMzZS4uOWViYTRlMCAxMDA2NDQKLS0tIGEvTGliL2RvY3Rlc3QucHkKKysrIGIvTGliL2RvY3Rlc3QucHkKQEAgLTMxOCw3ICszMTgsOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQpOgogICAgICAgICBzZWxmLl9fb3V0ID0gb3V0CiAgICAgICAgIHNlbGYuX19kZWJ1Z2dlcl91c2VkID0gRmFsc2UKLSAgICAgICAgcGRiLlBkYi5fX2luaXRfXyhzZWxmLCBzdGRvdXQ9b3V0KQorICAgICAgICAjIGRvIG5vdCBwbGF5IHNpZ25hbCBnYW1lcyBpbiB0aGUgcGRiCisgICAgICAgIHBkYi5QZGIuX19pbml0X18oc2VsZiwgc3Rkb3V0PW91dCwgbm9zaWdpbnQ9VHJ1ZSkKICAgICAgICAgIyBzdGlsbCB1c2UgaW5wdXQoKSB0byBnZXQgdXNlciBpbnB1dAogICAgICAgICBzZWxmLnVzZV9yYXdpbnB1dCA9IDEKIApAQCAtMTI4MCw5ICsxMjgxLDkgQEAKIAogICAgICAgICAgICAgICAgICMgQW5vdGhlciBjaGFuY2UgaWYgdGhleSBkaWRuJ3QgY2FyZSBhYm91dCB0aGUgZGV0YWlsLgogICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5vcHRpb25mbGFncyAmIElHTk9SRV9FWENFUFRJT05fREVUQUlMOgotICAgICAgICAgICAgICAgICAgICBtMSA9IHJlLm1hdGNoKHInW146XSo6JywgZXhhbXBsZS5leGNfbXNnKQotICAgICAgICAgICAgICAgICAgICBtMiA9IHJlLm1hdGNoKHInW146XSo6JywgZXhjX21zZykKLSAgICAgICAgICAgICAgICAgICAgaWYgbTEgYW5kIG0yIGFuZCBjaGVjayhtMS5ncm91cCgwKSwgbTIuZ3JvdXAoMCksCisgICAgICAgICAgICAgICAgICAgIG0xID0gcmUubWF0Y2gocicoPzpbXjpdKlwuKT8oW146XSo6KScsIGV4YW1wbGUuZXhjX21zZykKKyAgICAgICAgICAgICAgICAgICAgbTIgPSByZS5tYXRjaChyJyg/OlteOl0qXC4pPyhbXjpdKjopJywgZXhjX21zZykKKyAgICAgICAgICAgICAgICAgICAgaWYgbTEgYW5kIG0yIGFuZCBjaGVjayhtMS5ncm91cCgxKSwgbTIuZ3JvdXAoMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vcHRpb25mbGFncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjb21lID0gU1VDQ0VTUwogCkBAIC0xMzIwLDcgKzEzMjEsNyBAQAogICAgICAgICBzZWxmLnRyaWVzICs9IHQKIAogICAgIF9fTElORUNBQ0hFX0ZJTEVOQU1FX1JFID0gcmUuY29tcGlsZShyJzxkb2N0ZXN0ICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicoP1A8bmFtZT5bXHdcLl0rKScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicoP1A8bmFtZT4uKyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInXFsoP1A8ZXhhbXBsZW51bT5cZCspXF0+JCcpCiAgICAgZGVmIF9fcGF0Y2hlZF9saW5lY2FjaGVfZ2V0bGluZXMoc2VsZiwgZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzPU5vbmUpOgogICAgICAgICBtID0gc2VsZi5fX0xJTkVDQUNIRV9GSUxFTkFNRV9SRS5tYXRjaChmaWxlbmFtZSkKQEAgLTIyMDcsNiArMjIwOCwxOSBAQAogICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgogICAgICAgICByZXR1cm4gIkRvY3Rlc3Q6ICIgKyBzZWxmLl9kdF90ZXN0Lm5hbWUKIAorY2xhc3MgU2tpcERvY1Rlc3RDYXNlKERvY1Rlc3RDYXNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIERvY1Rlc3RDYXNlLl9faW5pdF9fKHNlbGYsIE5vbmUpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoIkRvY1Rlc3RTdWl0ZSB3aWxsIG5vdCB3b3JrIHdpdGggLU8yIGFuZCBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9za2lwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgcmV0dXJuICJTa2lwcGluZyB0ZXN0cyBmcm9tICVzIiAlIG1vZHVsZS5fX25hbWVfXworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMjQ5LDEzICsyMjYzLDIwIEBACiAKICAgICBtb2R1bGUgPSBfbm9ybWFsaXplX21vZHVsZShtb2R1bGUpCiAgICAgdGVzdHMgPSB0ZXN0X2ZpbmRlci5maW5kKG1vZHVsZSwgZ2xvYnM9Z2xvYnMsIGV4dHJhZ2xvYnM9ZXh0cmFnbG9icykKLSAgICBpZiBub3QgdGVzdHM6CisKKyAgICBpZiBub3QgdGVzdHMgYW5kIHN5cy5mbGFncy5vcHRpbWl6ZSA+PTI6CisgICAgICAgICMgU2tpcCBkb2N0ZXN0cyB3aGVuIHJ1bm5pbmcgd2l0aCAtTzIKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KFNraXBEb2NUZXN0Q2FzZSgpKQorICAgICAgICByZXR1cm4gc3VpdGUKKyAgICBlbGlmIG5vdCB0ZXN0czoKICAgICAgICAgIyBXaHkgZG8gd2Ugd2FudCB0byBkbyB0aGlzPyBCZWNhdXNlIGl0IHJldmVhbHMgYSBidWcgdGhhdCBtaWdodAogICAgICAgICAjIG90aGVyd2lzZSBiZSBoaWRkZW4uCiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobW9kdWxlLCAiaGFzIG5vIHRlc3RzIikKIAogICAgIHRlc3RzLnNvcnQoKQogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKwogICAgIGZvciB0ZXN0IGluIHRlc3RzOgogICAgICAgICBpZiBsZW4odGVzdC5leGFtcGxlcykgPT0gMDoKICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0yNTA4LDE0ICsyNTI5LDE2IEBACiAgICAgICAgICAgICAgICAgICAgIGV4ZWMoZi5yZWFkKCksIGdsb2JzLCBnbG9icykKICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICBwcmludChzeXMuZXhjX2luZm8oKVsxXSkKLSAgICAgICAgICAgICAgICBwZGIucG9zdF9tb3J0ZW0oc3lzLmV4Y19pbmZvKClbMl0pCisgICAgICAgICAgICAgICAgcCA9IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkKKyAgICAgICAgICAgICAgICBwLnJlc2V0KCkKKyAgICAgICAgICAgICAgICBwLmludGVyYWN0aW9uKE5vbmUsIHN5cy5leGNfaW5mbygpWzJdKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZnAgPSBvcGVuKHNyY2ZpbGVuYW1lKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNjcmlwdCA9IGZwLnJlYWQoKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICBwZGIucnVuKCJleGVjKCVyKSIgJSBzY3JpcHQsIGdsb2JzLCBnbG9icykKKyAgICAgICAgICAgIHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkucnVuKCJleGVjKCVyKSIgJSBzY3JpcHQsIGdsb2JzLCBnbG9icykKIAogICAgIGZpbmFsbHk6CiAgICAgICAgIG9zLnJlbW92ZShzcmNmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi9lbWFpbC9fX2luaXRfXy5weQppbmRleCA4NzAyMjEyLi5iZDMxNmZkIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX19pbml0X18ucHkKKysrIGIvTGliL2VtYWlsL19faW5pdF9fLnB5CkBAIC00LDcgKzQsNyBAQAogCiAiIiJBIHBhY2thZ2UgZm9yIHBhcnNpbmcsIGhhbmRsaW5nLCBhbmQgZ2VuZXJhdGluZyBlbWFpbCBtZXNzYWdlcy4iIiIKIAotX192ZXJzaW9uX18gPSAnNS4wLjAnCitfX3ZlcnNpb25fXyA9ICc1LjEuMCcKIAogX19hbGxfXyA9IFsKICAgICAnYmFzZTY0bWltZScsCkBAIC0xNiw3ICsxNiw5IEBACiAgICAgJ2l0ZXJhdG9ycycsCiAgICAgJ21lc3NhZ2UnLAogICAgICdtZXNzYWdlX2Zyb21fZmlsZScsCisgICAgJ21lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZScsCiAgICAgJ21lc3NhZ2VfZnJvbV9zdHJpbmcnLAorICAgICdtZXNzYWdlX2Zyb21fYnl0ZXMnLAogICAgICdtaW1lJywKICAgICAncGFyc2VyJywKICAgICAncXVvcHJpbWltZScsCkBAIC0zNiw2ICszOCwxMyBAQAogICAgIGZyb20gZW1haWwucGFyc2VyIGltcG9ydCBQYXJzZXIKICAgICByZXR1cm4gUGFyc2VyKCphcmdzLCAqKmt3cykucGFyc2VzdHIocykKIAorZGVmIG1lc3NhZ2VfZnJvbV9ieXRlcyhzLCAqYXJncywgKiprd3MpOgorICAgICIiIlBhcnNlIGEgYnl0ZXMgc3RyaW5nIGludG8gYSBNZXNzYWdlIG9iamVjdCBtb2RlbC4KKworICAgIE9wdGlvbmFsIF9jbGFzcyBhbmQgc3RyaWN0IGFyZSBwYXNzZWQgdG8gdGhlIFBhcnNlciBjb25zdHJ1Y3Rvci4KKyAgICAiIiIKKyAgICBmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgQnl0ZXNQYXJzZXIKKyAgICByZXR1cm4gQnl0ZXNQYXJzZXIoKmFyZ3MsICoqa3dzKS5wYXJzZWJ5dGVzKHMpCiAKIGRlZiBtZXNzYWdlX2Zyb21fZmlsZShmcCwgKmFyZ3MsICoqa3dzKToKICAgICAiIiJSZWFkIGEgZmlsZSBhbmQgcGFyc2UgaXRzIGNvbnRlbnRzIGludG8gYSBNZXNzYWdlIG9iamVjdCBtb2RlbC4KQEAgLTQ0LDMgKzUzLDExIEBACiAgICAgIiIiCiAgICAgZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IFBhcnNlcgogICAgIHJldHVybiBQYXJzZXIoKmFyZ3MsICoqa3dzKS5wYXJzZShmcCkKKworZGVmIG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShmcCwgKmFyZ3MsICoqa3dzKToKKyAgICAiIiJSZWFkIGEgYmluYXJ5IGZpbGUgYW5kIHBhcnNlIGl0cyBjb250ZW50cyBpbnRvIGEgTWVzc2FnZSBvYmplY3QgbW9kZWwuCisKKyAgICBPcHRpb25hbCBfY2xhc3MgYW5kIHN0cmljdCBhcmUgcGFzc2VkIHRvIHRoZSBQYXJzZXIgY29uc3RydWN0b3IuCisgICAgIiIiCisgICAgZnJvbSBlbWFpbC5wYXJzZXIgaW1wb3J0IEJ5dGVzUGFyc2VyCisgICAgcmV0dXJuIEJ5dGVzUGFyc2VyKCphcmdzLCAqKmt3cykucGFyc2UoZnApCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX3BhcnNlYWRkci5weSBiL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CmluZGV4IDNiZDRiYTQuLjQxNjk0ZjkgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CisrKyBiL0xpYi9lbWFpbC9fcGFyc2VhZGRyLnB5CkBAIC02NCw4ICs2NCwxMCBAQAogICAgIGlmIGxlbihkYXRhKSA9PSA0OgogICAgICAgICBzID0gZGF0YVszXQogICAgICAgICBpID0gcy5maW5kKCcrJykKKyAgICAgICAgaWYgaSA9PSAtMToKKyAgICAgICAgICAgIGkgPSBzLmZpbmQoJy0nKQogICAgICAgICBpZiBpID4gMDoKLSAgICAgICAgICAgIGRhdGFbMzpdID0gW3NbOmldLCBzW2krMTpdXQorICAgICAgICAgICAgZGF0YVszOl0gPSBbc1s6aV0sIHNbaTpdXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGF0YS5hcHBlbmQoJycpICMgRHVtbXkgdHoKICAgICBpZiBsZW4oZGF0YSkgPCA1OgpAQCAtMTk5LDE0ICsyMDEsMTggQEAKICAgICAgICAgc2VsZi5jb21tZW50bGlzdCA9IFtdCiAKICAgICBkZWYgZ290b25leHQoc2VsZik6Ci0gICAgICAgICIiIlBhcnNlIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBhZGRyZXNzLiIiIgorICAgICAgICAiIiJTa2lwIHdoaXRlIHNwYWNlIGFuZCBleHRyYWN0IGNvbW1lbnRzLiIiIgorICAgICAgICB3c2xpc3QgPSBbXQogICAgICAgICB3aGlsZSBzZWxmLnBvcyA8IGxlbihzZWxmLmZpZWxkKToKICAgICAgICAgICAgIGlmIHNlbGYuZmllbGRbc2VsZi5wb3NdIGluIHNlbGYuTFdTICsgJ1xuXHInOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuZmllbGRbc2VsZi5wb3NdIG5vdCBpbiAnXG5ccic6CisgICAgICAgICAgICAgICAgICAgIHdzbGlzdC5hcHBlbmQoc2VsZi5maWVsZFtzZWxmLnBvc10pCiAgICAgICAgICAgICAgICAgc2VsZi5wb3MgKz0gMQogICAgICAgICAgICAgZWxpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSA9PSAnKCc6CiAgICAgICAgICAgICAgICAgc2VsZi5jb21tZW50bGlzdC5hcHBlbmQoc2VsZi5nZXRjb21tZW50KCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBFTVBUWVNUUklORy5qb2luKHdzbGlzdCkKIAogICAgIGRlZiBnZXRhZGRybGlzdChzZWxmKToKICAgICAgICAgIiIiUGFyc2UgYWxsIGFkZHJlc3Nlcy4KQEAgLTMxOSwxNiArMzI1LDI0IEBACiAKICAgICAgICAgc2VsZi5nb3RvbmV4dCgpCiAgICAgICAgIHdoaWxlIHNlbGYucG9zIDwgbGVuKHNlbGYuZmllbGQpOgorICAgICAgICAgICAgcHJlc2VydmVfd3MgPSBUcnVlCiAgICAgICAgICAgICBpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSA9PSAnLic6CisgICAgICAgICAgICAgICAgaWYgYXNsaXN0IGFuZCBub3QgYXNsaXN0Wy0xXS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBhc2xpc3QucG9wKCkKICAgICAgICAgICAgICAgICBhc2xpc3QuYXBwZW5kKCcuJykKICAgICAgICAgICAgICAgICBzZWxmLnBvcyArPSAxCisgICAgICAgICAgICAgICAgcHJlc2VydmVfd3MgPSBGYWxzZQogICAgICAgICAgICAgZWxpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSA9PSAnIic6CiAgICAgICAgICAgICAgICAgYXNsaXN0LmFwcGVuZCgnIiVzIicgJSBxdW90ZShzZWxmLmdldHF1b3RlKCkpKQogICAgICAgICAgICAgZWxpZiBzZWxmLmZpZWxkW3NlbGYucG9zXSBpbiBzZWxmLmF0b21lbmRzOgorICAgICAgICAgICAgICAgIGlmIGFzbGlzdCBhbmQgbm90IGFzbGlzdFstMV0uc3RyaXAoKToKKyAgICAgICAgICAgICAgICAgICAgYXNsaXN0LnBvcCgpCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYXNsaXN0LmFwcGVuZChzZWxmLmdldGF0b20oKSkKLSAgICAgICAgICAgIHNlbGYuZ290b25leHQoKQorICAgICAgICAgICAgd3MgPSBzZWxmLmdvdG9uZXh0KCkKKyAgICAgICAgICAgIGlmIHByZXNlcnZlX3dzIGFuZCB3czoKKyAgICAgICAgICAgICAgICBhc2xpc3QuYXBwZW5kKHdzKQogCiAgICAgICAgIGlmIHNlbGYucG9zID49IGxlbihzZWxmLmZpZWxkKSBvciBzZWxmLmZpZWxkW3NlbGYucG9zXSAhPSAnQCc6CiAgICAgICAgICAgICByZXR1cm4gRU1QVFlTVFJJTkcuam9pbihhc2xpc3QpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvYmFzZTY0bWltZS5weSBiL0xpYi9lbWFpbC9iYXNlNjRtaW1lLnB5CmluZGV4IDI4ZTI1NDIuLmYzYmJhYzEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9iYXNlNjRtaW1lLnB5CisrKyBiL0xpYi9lbWFpbC9iYXNlNjRtaW1lLnB5CkBAIC0yMCw3ICsyMCw3IEBACiAKIFRoaXMgbW9kdWxlIGRvZXMgbm90IGRvIHRoZSBsaW5lIHdyYXBwaW5nIG9yIGVuZC1vZi1saW5lIGNoYXJhY3RlciBjb252ZXJzaW9uCiBuZWNlc3NhcnkgZm9yIHByb3BlciBpbnRlcm5hdGlvbmFsaXplZCBoZWFkZXJzOyBpdCBvbmx5IGRvZXMgZHVtYiBlbmNvZGluZyBhbmQKLWRlY29kaW5nLiAgVG8gZGVhbCB3aXRoIHRoZSB2YXJpb3VzIGxpbmUgd3JhcHBpbmcgaXNzdWVzLCB1c2UgdGhlIGVtYWlsLkhlYWRlcgorZGVjb2RpbmcuICBUbyBkZWFsIHdpdGggdGhlIHZhcmlvdXMgbGluZSB3cmFwcGluZyBpc3N1ZXMsIHVzZSB0aGUgZW1haWwuaGVhZGVyCiBtb2R1bGUuCiAiIiIKIApAQCAtNzQsMTIgKzc0LDEyIEBACiAKIAwKIGRlZiBib2R5X2VuY29kZShzLCBtYXhsaW5lbGVuPTc2LCBlb2w9TkwpOgotICAgICIiIkVuY29kZSBhIHN0cmluZyB3aXRoIGJhc2U2NC4KKyAgICByIiIiRW5jb2RlIGEgc3RyaW5nIHdpdGggYmFzZTY0LgogCiAgICAgRWFjaCBsaW5lIHdpbGwgYmUgd3JhcHBlZCBhdCwgYXQgbW9zdCwgbWF4bGluZWxlbiBjaGFyYWN0ZXJzIChkZWZhdWx0cyB0bwogICAgIDc2IGNoYXJhY3RlcnMpLgogCi0gICAgRWFjaCBsaW5lIG9mIGVuY29kZWQgdGV4dCB3aWxsIGVuZCB3aXRoIGVvbCwgd2hpY2ggZGVmYXVsdHMgdG8gIlxcbiIuICBTZXQKKyAgICBFYWNoIGxpbmUgb2YgZW5jb2RlZCB0ZXh0IHdpbGwgZW5kIHdpdGggZW9sLCB3aGljaCBkZWZhdWx0cyB0byAiXG4iLiAgU2V0CiAgICAgdGhpcyB0byAiXHJcbiIgaWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uIGRpcmVjdGx5CiAgICAgaW4gYW4gZW1haWwuCiAgICAgIiIiCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgYSBmdWxsIE1JTUUgaGVhZGVyIHZhbHVlIGVuY29kZWQgd2l0aAogICAgIGJhc2U2NCAobGlrZSA9P2lzby04ODk1LTE/Yj9ibWxvSVNCdWFXZ2g/PSkgLS0gcGxlYXNlIHVzZSB0aGUgaGlnaAotICAgIGxldmVsIGVtYWlsLkhlYWRlciBjbGFzcyBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5LgorICAgIGxldmVsIGVtYWlsLmhlYWRlciBjbGFzcyBmb3IgdGhhdCBmdW5jdGlvbmFsaXR5LgogICAgICIiIgogICAgIGlmIG5vdCBzdHJpbmc6CiAgICAgICAgIHJldHVybiBieXRlcygpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY2hhcnNldC5weSBiL0xpYi9lbWFpbC9jaGFyc2V0LnB5CmluZGV4IDg5OGJlZWQuLmYyMmJlMmMgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9jaGFyc2V0LnB5CisrKyBiL0xpYi9lbWFpbC9jaGFyc2V0LnB5CkBAIC0yOCw2ICsyOCw3IEBACiBSRkMyMDQ3X0NIUk9NRV9MRU4gPSA3CiAKIERFRkFVTFRfQ0hBUlNFVCA9ICd1cy1hc2NpaScKK1VOS05PV044QklUID0gJ3Vua25vd24tOGJpdCcKIEVNUFRZU1RSSU5HID0gJycKIAogCkBAIC0xNTMsNiArMTU0LDE2IEBACiAKIAogDAorIyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZW5jb2Rpbmcgc3RyaW5ncywgdGFraW5nIGludG8gYWNjb3VudAorIyB0aGF0IHRoZXkgbWlnaHQgYmUgdW5rbm93bi04Yml0IChpZTogaGF2ZSBzdXJyb2dhdGUtZXNjYXBlZCBieXRlcykKK2RlZiBfZW5jb2RlKHN0cmluZywgY29kZWMpOgorICAgIGlmIGNvZGVjID09IFVOS05PV044QklUOgorICAgICAgICByZXR1cm4gc3RyaW5nLmVuY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RyaW5nLmVuY29kZShjb2RlYykKKworCisMCiBjbGFzcyBDaGFyc2V0OgogICAgICIiIk1hcCBjaGFyYWN0ZXIgc2V0cyB0byB0aGVpciBlbWFpbCBwcm9wZXJ0aWVzLgogCkBAIC0yNTIsNyArMjYzLDcgQEAKIAogICAgICAgICBSZXR1cm5zICJxdW90ZWQtcHJpbnRhYmxlIiBpZiBzZWxmLmJvZHlfZW5jb2RpbmcgaXMgUVAuCiAgICAgICAgIFJldHVybnMgImJhc2U2NCIgaWYgc2VsZi5ib2R5X2VuY29kaW5nIGlzIEJBU0U2NC4KLSAgICAgICAgUmV0dXJucyAiN2JpdCIgb3RoZXJ3aXNlLgorICAgICAgICBSZXR1cm5zIGNvbnZlcnNpb24gZnVuY3Rpb24gb3RoZXJ3aXNlLgogICAgICAgICAiIiIKICAgICAgICAgYXNzZXJ0IHNlbGYuYm9keV9lbmNvZGluZyAhPSBTSE9SVEVTVAogICAgICAgICBpZiBzZWxmLmJvZHlfZW5jb2RpbmcgPT0gUVA6CkBAIC0yODIsOCArMjkzLDcgQEAKICAgICAgICAgOnJldHVybjogVGhlIGVuY29kZWQgc3RyaW5nLCB3aXRoIFJGQyAyMDQ3IGNocm9tZS4KICAgICAgICAgIiIiCiAgICAgICAgIGNvZGVjID0gc2VsZi5vdXRwdXRfY29kZWMgb3IgJ3VzLWFzY2lpJwotICAgICAgICBjaGFyc2V0ID0gc2VsZi5nZXRfb3V0cHV0X2NoYXJzZXQoKQotICAgICAgICBoZWFkZXJfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKGNvZGVjKQorICAgICAgICBoZWFkZXJfYnl0ZXMgPSBfZW5jb2RlKHN0cmluZywgY29kZWMpCiAgICAgICAgICMgN2JpdC84Yml0IGVuY29kaW5ncyByZXR1cm4gdGhlIHN0cmluZyB1bmNoYW5nZWQgKG1vZHVsbyBjb252ZXJzaW9ucykKICAgICAgICAgZW5jb2Rlcl9tb2R1bGUgPSBzZWxmLl9nZXRfZW5jb2RlcihoZWFkZXJfYnl0ZXMpCiAgICAgICAgIGlmIGVuY29kZXJfbW9kdWxlIGlzIE5vbmU6CkBAIC0zMDksOSArMzE5LDkgQEAKICAgICAgICAgIiIiCiAgICAgICAgICMgU2VlIHdoaWNoIGVuY29kaW5nIHdlIHNob3VsZCB1c2UuCiAgICAgICAgIGNvZGVjID0gc2VsZi5vdXRwdXRfY29kZWMgb3IgJ3VzLWFzY2lpJwotICAgICAgICBoZWFkZXJfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKGNvZGVjKQorICAgICAgICBoZWFkZXJfYnl0ZXMgPSBfZW5jb2RlKHN0cmluZywgY29kZWMpCiAgICAgICAgIGVuY29kZXJfbW9kdWxlID0gc2VsZi5fZ2V0X2VuY29kZXIoaGVhZGVyX2J5dGVzKQotICAgICAgICBlbmNvZGVyID0gcGFydGlhbChlbmNvZGVyX21vZHVsZS5oZWFkZXJfZW5jb2RlLCBjaGFyc2V0PXN0cihzZWxmKSkKKyAgICAgICAgZW5jb2RlciA9IHBhcnRpYWwoZW5jb2Rlcl9tb2R1bGUuaGVhZGVyX2VuY29kZSwgY2hhcnNldD1jb2RlYykKICAgICAgICAgIyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgdGhlIFJGQyAyMDQ3IGNocm9tZSB3aWxsCiAgICAgICAgICMgY29udHJpYnV0ZSB0byBlYWNoIGxpbmUuCiAgICAgICAgIGNoYXJzZXQgPSBzZWxmLmdldF9vdXRwdXRfY2hhcnNldCgpCkBAIC0zMzMsNyArMzQzLDcgQEAKICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBzdHJpbmc6CiAgICAgICAgICAgICBjdXJyZW50X2xpbmUuYXBwZW5kKGNoYXJhY3RlcikKICAgICAgICAgICAgIHRoaXNfbGluZSA9IEVNUFRZU1RSSU5HLmpvaW4oY3VycmVudF9saW5lKQotICAgICAgICAgICAgbGVuZ3RoID0gZW5jb2Rlcl9tb2R1bGUuaGVhZGVyX2xlbmd0aCh0aGlzX2xpbmUuZW5jb2RlKGNoYXJzZXQpKQorICAgICAgICAgICAgbGVuZ3RoID0gZW5jb2Rlcl9tb2R1bGUuaGVhZGVyX2xlbmd0aChfZW5jb2RlKHRoaXNfbGluZSwgY2hhcnNldCkpCiAgICAgICAgICAgICBpZiBsZW5ndGggPiBtYXhsZW46CiAgICAgICAgICAgICAgICAgIyBUaGlzIGxhc3QgY2hhcmFjdGVyIGRvZXNuJ3QgZml0IHNvIHBvcCBpdCBvZmYuCiAgICAgICAgICAgICAgICAgY3VycmVudF9saW5lLnBvcCgpCkBAIC0zNDMsMTIgKzM1MywxMiBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvciA9ICgnICcgaWYgbGluZXMgZWxzZSAnJykKICAgICAgICAgICAgICAgICAgICAgam9pbmVkX2xpbmUgPSBFTVBUWVNUUklORy5qb2luKGN1cnJlbnRfbGluZSkKLSAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2J5dGVzID0gam9pbmVkX2xpbmUuZW5jb2RlKGNvZGVjKQorICAgICAgICAgICAgICAgICAgICBoZWFkZXJfYnl0ZXMgPSBfZW5jb2RlKGpvaW5lZF9saW5lLCBjb2RlYykKICAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGVuY29kZXIoaGVhZGVyX2J5dGVzKSkKICAgICAgICAgICAgICAgICBjdXJyZW50X2xpbmUgPSBbY2hhcmFjdGVyXQogICAgICAgICAgICAgICAgIG1heGxlbiA9IG5leHQobWF4bGVuZ3RocykgLSBleHRyYQogICAgICAgICBqb2luZWRfbGluZSA9IEVNUFRZU1RSSU5HLmpvaW4oY3VycmVudF9saW5lKQotICAgICAgICBoZWFkZXJfYnl0ZXMgPSBqb2luZWRfbGluZS5lbmNvZGUoY29kZWMpCisgICAgICAgIGhlYWRlcl9ieXRlcyA9IF9lbmNvZGUoam9pbmVkX2xpbmUsIGNvZGVjKQogICAgICAgICBsaW5lcy5hcHBlbmQoZW5jb2RlcihoZWFkZXJfYnl0ZXMpKQogICAgICAgICByZXR1cm4gbGluZXMKIApAQCAtMzcxLDcgKzM4MSwxMCBAQAogICAgICAgICAiIiJCb2R5LWVuY29kZSBhIHN0cmluZyBieSBjb252ZXJ0aW5nIGl0IGZpcnN0IHRvIGJ5dGVzLgogCiAgICAgICAgIFRoZSB0eXBlIG9mIGVuY29kaW5nIChiYXNlNjQgb3IgcXVvdGVkLXByaW50YWJsZSkgd2lsbCBiZSBiYXNlZCBvbgotICAgICAgICBzZWxmLmJvZHlfZW5jb2RpbmcuCisgICAgICAgIHNlbGYuYm9keV9lbmNvZGluZy4gIElmIGJvZHlfZW5jb2RpbmcgaXMgTm9uZSwgd2UgYXNzdW1lIHRoZQorICAgICAgICBvdXRwdXQgY2hhcnNldCBpcyBhIDdiaXQgZW5jb2RpbmcsIHNvIHJlLWVuY29kaW5nIHRoZSBkZWNvZGVkCisgICAgICAgIHN0cmluZyB1c2luZyB0aGUgYXNjaWkgY29kZWMgcHJvZHVjZXMgdGhlIGNvcnJlY3Qgc3RyaW5nIHZlcnNpb24KKyAgICAgICAgb2YgdGhlIGNvbnRlbnQuCiAgICAgICAgICIiIgogICAgICAgICAjIDdiaXQvOGJpdCBlbmNvZGluZ3MgcmV0dXJuIHRoZSBzdHJpbmcgdW5jaGFuZ2VkIChtb2R1bGUgY29udmVyc2lvbnMpCiAgICAgICAgIGlmIHNlbGYuYm9keV9lbmNvZGluZyBpcyBCQVNFNjQ6CkBAIC0zODEsNCArMzk0LDYgQEAKICAgICAgICAgZWxpZiBzZWxmLmJvZHlfZW5jb2RpbmcgaXMgUVA6CiAgICAgICAgICAgICByZXR1cm4gZW1haWwucXVvcHJpbWltZS5ib2R5X2VuY29kZShzdHJpbmcpCiAgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHN0cmluZywgc3RyKToKKyAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuZW5jb2RlKHNlbGYub3V0cHV0X2NoYXJzZXQpLmRlY29kZSgnYXNjaWknKQogICAgICAgICAgICAgcmV0dXJuIHN0cmluZwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2VuY29kZXJzLnB5IGIvTGliL2VtYWlsL2VuY29kZXJzLnB5CmluZGV4IGRmYWFjNTguLmU1YzA5OWYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9lbmNvZGVycy5weQorKysgYi9MaWIvZW1haWwvZW5jb2RlcnMucHkKQEAgLTU0LDEwICs1NCwxMyBAQAogICAgICAgICAjIFRoZXJlJ3Mgbm8gcGF5bG9hZC4gIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB1c2UgN2JpdAogICAgICAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9ICc3Yml0JwogICAgICAgICByZXR1cm4KLSAgICAjIFdlIHBsYXkgYSB0cmljayB0byBtYWtlIHRoaXMgZ28gZmFzdC4gIElmIGVuY29kaW5nIHRvIEFTQ0lJIHN1Y2NlZWRzLCB3ZQotICAgICMga25vdyB0aGUgZGF0YSBtdXN0IGJlIDdiaXQsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyA4Yml0LgorICAgICMgV2UgcGxheSBhIHRyaWNrIHRvIG1ha2UgdGhpcyBnbyBmYXN0LiAgSWYgZW5jb2RpbmcvZGVjb2RlIHRvIEFTQ0lJCisgICAgIyBzdWNjZWVkcywgd2Uga25vdyB0aGUgZGF0YSBtdXN0IGJlIDdiaXQsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyA4Yml0LgogICAgIHRyeToKLSAgICAgICAgb3JpZy5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvcmlnLCBzdHIpOgorICAgICAgICAgICAgb3JpZy5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9yaWcuZGVjb2RlKCdhc2NpaScpCiAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKICAgICAgICAgIyBpc28tMjAyMi0qIGlzIG5vbi1BU0NJSSBidXQgc3RpbGwgNy1iaXQKICAgICAgICAgY2hhcnNldCA9IG1zZy5nZXRfY2hhcnNldCgpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weSBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CmluZGV4IDhkYjcwYjMuLjYwYTgzMjUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9mZWVkcGFyc2VyLnB5CkBAIC0zNjgsMTIgKzM2OCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBsZW4obW8uZ3JvdXAoMCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3QuZXBpbG9ndWUgPSBlcGlsb2d1ZVs6LWVuZF0KICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZWxmLl9sYXN0LmdldF9wYXlsb2FkKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBzZWxmLl9sYXN0Ll9wYXlsb2FkCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIHN0cik6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW8gPSBOTENSRV9lb2wuc2VhcmNoKHBheWxvYWQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbW86CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBwYXlsb2FkWzotbGVuKG1vLmdyb3VwKDApKV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGFzdC5zZXRfcGF5bG9hZChwYXlsb2FkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0Ll9wYXlsb2FkID0gcGF5bG9hZAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5wb3BfZW9mX21hdGNoZXIoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3BfbWVzc2FnZSgpCiAgICAgICAgICAgICAgICAgICAgICMgU2V0IHRoZSBtdWx0aXBhcnQgdXAgZm9yIG5ld2xpbmUgY2xlYW5zaW5nLCB3aGljaCB3aWxsCkBAIC00ODIsMyArNDgyLDEwIEBACiAgICAgICAgIGlmIGxhc3RoZWFkZXI6CiAgICAgICAgICAgICAjIFhYWCByZWNvbnNpZGVyIHRoZSBqb2luaW5nIG9mIGZvbGRlZCBsaW5lcwogICAgICAgICAgICAgc2VsZi5fY3VyW2xhc3RoZWFkZXJdID0gRU1QVFlTVFJJTkcuam9pbihsYXN0dmFsdWUpLnJzdHJpcCgnXHJcbicpCisKKwwKK2NsYXNzIEJ5dGVzRmVlZFBhcnNlcihGZWVkUGFyc2VyKToKKyAgICAiIiJMaWtlIEZlZWRQYXJzZXIsIGJ1dCBmZWVkIGFjY2VwdHMgYnl0ZXMuIiIiCisKKyAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKKyAgICAgICAgc3VwZXIoKS5mZWVkKGRhdGEuZGVjb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKSkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkgYi9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CmluZGV4IGNjMzBhZmYuLmYwZTdhOTUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKKysrIGIvTGliL2VtYWlsL2dlbmVyYXRvci5weQpAQCAtMTIsMTEgKzEyLDEyIEBACiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgd2FybmluZ3MKIAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGVtYWlsLmhlYWRlciBpbXBvcnQgSGVhZGVyCitmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IF9oYXNfc3Vycm9nYXRlcwogCiBVTkRFUlNDT1JFID0gJ18nCi1OTCA9ICdcbicKK05MID0gJ1xuJyAgIyBYWFg6IG5vIGxvbmdlciB1c2VkIGJ5IHRoZSBjb2RlIGJlbG93LgogCiBmY3JlID0gcmUuY29tcGlsZShyJ15Gcm9tICcsIHJlLk1VTFRJTElORSkKIApAQCAtNTcsOCArNTgsOCBAQAogICAgICAgICAjIEp1c3QgZGVsZWdhdGUgdG8gdGhlIGZpbGUgb2JqZWN0CiAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHMpCiAKLSAgICBkZWYgZmxhdHRlbihzZWxmLCBtc2csIHVuaXhmcm9tPUZhbHNlKToKLSAgICAgICAgIiIiUHJpbnQgdGhlIG1lc3NhZ2Ugb2JqZWN0IHRyZWUgcm9vdGVkIGF0IG1zZyB0byB0aGUgb3V0cHV0IGZpbGUKKyAgICBkZWYgZmxhdHRlbihzZWxmLCBtc2csIHVuaXhmcm9tPUZhbHNlLCBsaW5lc2VwPSdcbicpOgorICAgICAgICByIiIiUHJpbnQgdGhlIG1lc3NhZ2Ugb2JqZWN0IHRyZWUgcm9vdGVkIGF0IG1zZyB0byB0aGUgb3V0cHV0IGZpbGUKICAgICAgICAgc3BlY2lmaWVkIHdoZW4gdGhlIEdlbmVyYXRvciBpbnN0YW5jZSB3YXMgY3JlYXRlZC4KIAogICAgICAgICB1bml4ZnJvbSBpcyBhIGZsYWcgdGhhdCBmb3JjZXMgdGhlIHByaW50aW5nIG9mIGEgVW5peCBGcm9tXyBkZWxpbWl0ZXIKQEAgLTY3LDEyICs2OCwyNiBAQAogICAgICAgICBpcyBGYWxzZSB0byBpbmhpYml0IHRoZSBwcmludGluZyBvZiBhbnkgRnJvbV8gZGVsaW1pdGVyLgogCiAgICAgICAgIE5vdGUgdGhhdCBmb3Igc3Vib2JqZWN0cywgbm8gRnJvbV8gbGluZSBpcyBwcmludGVkLgorCisgICAgICAgIGxpbmVzZXAgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbgorICAgICAgICB0aGUgb3V0cHV0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIG1vc3QgdXNlZnVsIGZvciB0eXBpY2FsCisgICAgICAgIFB5dGhvbiBhcHBsaWNhdGlvbnMsIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIFxyXG4gdG8gcHJvZHVjZSBSRkMtY29tcGxpYW50CisgICAgICAgIGxpbmUgc2VwYXJhdG9ycyB3aGVuIG5lZWRlZC4KKwogICAgICAgICAiIiIKKyAgICAgICAgIyBXZSB1c2UgdGhlIF9YWFggY29uc3RhbnRzIGZvciBvcGVyYXRpbmcgb24gZGF0YSB0aGF0IGNvbWVzIGRpcmVjdGx5CisgICAgICAgICMgZnJvbSB0aGUgbXNnLCBhbmQgX2VuY29kZWRfWFhYIGNvbnN0YW50cyBmb3Igb3BlcmF0aW5nIG9uIGRhdGEgdGhhdAorICAgICAgICAjIGhhcyBhbHJlYWR5IGJlZW4gY29udmVydGVkICh0byBieXRlcyBpbiB0aGUgQnl0ZXNHZW5lcmF0b3IpIGFuZAorICAgICAgICAjIGluc2VydGVkIGludG8gYSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgICAgICBzZWxmLl9OTCA9IGxpbmVzZXAKKyAgICAgICAgc2VsZi5fZW5jb2RlZF9OTCA9IHNlbGYuX2VuY29kZShsaW5lc2VwKQorICAgICAgICBzZWxmLl9FTVBUWSA9ICcnCisgICAgICAgIHNlbGYuX2VuY29kZWRfRU1UUFkgPSBzZWxmLl9lbmNvZGUoJycpCiAgICAgICAgIGlmIHVuaXhmcm9tOgogICAgICAgICAgICAgdWZyb20gPSBtc2cuZ2V0X3VuaXhmcm9tKCkKICAgICAgICAgICAgIGlmIG5vdCB1ZnJvbToKICAgICAgICAgICAgICAgICB1ZnJvbSA9ICdGcm9tIG5vYm9keSAnICsgdGltZS5jdGltZSh0aW1lLnRpbWUoKSkKLSAgICAgICAgICAgIHByaW50KHVmcm9tLCBmaWxlPXNlbGYuX2ZwKQorICAgICAgICAgICAgc2VsZi53cml0ZSh1ZnJvbSArIHNlbGYuX05MKQogICAgICAgICBzZWxmLl93cml0ZShtc2cpCiAKICAgICBkZWYgY2xvbmUoc2VsZiwgZnApOgpAQCAtODMsNiArOTgsMjcgQEAKICAgICAjIFByb3RlY3RlZCBpbnRlcmZhY2UgLSB1bmRvY3VtZW50ZWQgOy8KICAgICAjCiAKKyAgICAjIE5vdGUgdGhhdCB3ZSB1c2UgJ3NlbGYud3JpdGUnIHdoZW4gd2hhdCB3ZSBhcmUgd3JpdGluZyBpcyBjb21pbmcgZnJvbQorICAgICMgdGhlIHNvdXJjZSwgYW5kIHNlbGYuX2ZwLndyaXRlIHdoZW4gd2hhdCB3ZSBhcmUgd3JpdGluZyBpcyBjb21pbmcgZnJvbSBhCisgICAgIyBidWZmZXIgKGJlY2F1c2UgdGhlIEJ5dGVzIHN1YmNsYXNzIGhhcyBhbHJlYWR5IGhhZCBhIGNoYW5jZSB0byB0cmFuc2Zvcm0KKyAgICAjIHRoZSBkYXRhIGluIGl0cyB3cml0ZSBtZXRob2QgaW4gdGhhdCBjYXNlKS4gIFRoaXMgaXMgYW4gZW50aXJlbHkKKyAgICAjIHByYWdtYXRpYyBzcGxpdCBkZXRlcm1pbmVkIGJ5IGV4cGVyaW1lbnQ7IHdlIGNvdWxkIGJlIG1vcmUgZ2VuZXJhbCBieQorICAgICMgYWx3YXlzIHVzaW5nIHdyaXRlIGFuZCBoYXZpbmcgdGhlIEJ5dGVzIHN1YmNsYXNzIHdyaXRlIG1ldGhvZCBkZXRlY3Qgd2hlbgorICAgICMgaXQgaGFzIGFscmVhZHkgdHJhbnNmb3JtZWQgdGhlIGlucHV0OyBidXQsIHNpbmNlIHRoaXMgd2hvbGUgdGhpbmcgaXMgYQorICAgICMgaGFjayBhbnl3YXkgdGhpcyBzZWVtcyBnb29kIGVub3VnaC4KKworICAgICMgU2ltaWxhcmx5LCB3ZSBoYXZlIF9YWFggYW5kIF9lbmNvZGVkX1hYWCBhdHRyaWJ1dGVzIHRoYXQgYXJlIHVzZWQgb24KKyAgICAjIHNvdXJjZSBhbmQgYnVmZmVyIGRhdGEsIHJlc3BlY3RpdmVseS4KKyAgICBfZW5jb2RlZF9FTVBUWSA9ICcnCisKKyAgICBkZWYgX25ld19idWZmZXIoc2VsZik6CisgICAgICAgICMgQnl0ZXNHZW5lcmF0b3Igb3ZlcnJpZGVzIHRoaXMgdG8gcmV0dXJuIEJ5dGVzSU8uCisgICAgICAgIHJldHVybiBTdHJpbmdJTygpCisKKyAgICBkZWYgX2VuY29kZShzZWxmLCBzKToKKyAgICAgICAgIyBCeXRlc0dlbmVyYXRvciBvdmVycmlkZXMgdGhpcyB0byBlbmNvZGUgc3RyaW5ncyB0byBieXRlcy4KKyAgICAgICAgcmV0dXJuIHMKKwogICAgIGRlZiBfd3JpdGUoc2VsZiwgbXNnKToKICAgICAgICAgIyBXZSBjYW4ndCB3cml0ZSB0aGUgaGVhZGVycyB5ZXQgYmVjYXVzZSBvZiB0aGUgZm9sbG93aW5nIHNjZW5hcmlvOgogICAgICAgICAjIHNheSBhIG11bHRpcGFydCBtZXNzYWdlIGluY2x1ZGVzIHRoZSBib3VuZGFyeSBzdHJpbmcgc29tZXdoZXJlIGluCkBAIC05MSwxMyArMTI3LDEzIEBACiAgICAgICAgICMgcGFyYW1ldGVyLgogICAgICAgICAjCiAgICAgICAgICMgVGhlIHdheSB3ZSBkbyB0aGlzLCBzbyBhcyB0byBtYWtlIHRoZSBfaGFuZGxlXyooKSBtZXRob2RzIHNpbXBsZXIsCi0gICAgICAgICMgaXMgdG8gY2FjaGUgYW55IHN1YnBhcnQgd3JpdGVzIGludG8gYSBTdHJpbmdJTy4gIFRoZSB3ZSB3cml0ZSB0aGUKLSAgICAgICAgIyBoZWFkZXJzIGFuZCB0aGUgU3RyaW5nSU8gY29udGVudHMuICBUaGF0IHdheSwgc3VicGFydCBoYW5kbGVycyBjYW4KKyAgICAgICAgIyBpcyB0byBjYWNoZSBhbnkgc3VicGFydCB3cml0ZXMgaW50byBhIGJ1ZmZlci4gIFRoZSB3ZSB3cml0ZSB0aGUKKyAgICAgICAgIyBoZWFkZXJzIGFuZCB0aGUgYnVmZmVyIGNvbnRlbnRzLiAgVGhhdCB3YXksIHN1YnBhcnQgaGFuZGxlcnMgY2FuCiAgICAgICAgICMgRG8gVGhlIFJpZ2h0IFRoaW5nLCBhbmQgY2FuIHN0aWxsIG1vZGlmeSB0aGUgQ29udGVudC1UeXBlOiBoZWFkZXIgaWYKICAgICAgICAgIyBuZWNlc3NhcnkuCiAgICAgICAgIG9sZGZwID0gc2VsZi5fZnAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fZnAgPSBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgICAgICBzZWxmLl9mcCA9IHNmcCA9IHNlbGYuX25ld19idWZmZXIoKQogICAgICAgICAgICAgc2VsZi5fZGlzcGF0Y2gobXNnKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fZnAgPSBvbGRmcApAQCAtMTMyLDE2ICsxNjgsMTcgQEAKIAogICAgIGRlZiBfd3JpdGVfaGVhZGVycyhzZWxmLCBtc2cpOgogICAgICAgICBmb3IgaCwgdiBpbiBtc2cuaXRlbXMoKToKLSAgICAgICAgICAgIHByaW50KCclczonICUgaCwgZW5kPScgJywgZmlsZT1zZWxmLl9mcCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoJyVzOiAnICUgaCkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgSGVhZGVyKToKLSAgICAgICAgICAgICAgICBwcmludCh2LmVuY29kZShtYXhsaW5lbGVuPXNlbGYuX21heGhlYWRlcmxlbiksIGZpbGU9c2VsZi5fZnApCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh2LmVuY29kZSgKKyAgICAgICAgICAgICAgICAgICAgbWF4bGluZWxlbj1zZWxmLl9tYXhoZWFkZXJsZW4sIGxpbmVzZXA9c2VsZi5fTkwpK3NlbGYuX05MKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIEhlYWRlcidzIGdvdCBsb3RzIG9mIHNtYXJ0cywgc28gdXNlIGl0LgogICAgICAgICAgICAgICAgIGhlYWRlciA9IEhlYWRlcih2LCBtYXhsaW5lbGVuPXNlbGYuX21heGhlYWRlcmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX25hbWU9aCkKLSAgICAgICAgICAgICAgICBwcmludChoZWFkZXIuZW5jb2RlKCksIGZpbGU9c2VsZi5fZnApCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShoZWFkZXIuZW5jb2RlKGxpbmVzZXA9c2VsZi5fTkwpK3NlbGYuX05MKQogICAgICAgICAjIEEgYmxhbmsgbGluZSBhbHdheXMgc2VwYXJhdGVzIGhlYWRlcnMgZnJvbSBib2R5Ci0gICAgICAgIHByaW50KGZpbGU9c2VsZi5fZnApCisgICAgICAgIHNlbGYud3JpdGUoc2VsZi5fTkwpCiAKICAgICAjCiAgICAgIyBIYW5kbGVycyBmb3Igd3JpdGluZyB0eXBlcyBhbmQgc3VidHlwZXMKQEAgLTE1Myw5ICsxOTAsMTUgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXlsb2FkLCBzdHIpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzdHJpbmcgcGF5bG9hZCBleHBlY3RlZDogJXMnICUgdHlwZShwYXlsb2FkKSkKKyAgICAgICAgaWYgX2hhc19zdXJyb2dhdGVzKG1zZy5fcGF5bG9hZCk6CisgICAgICAgICAgICBjaGFyc2V0ID0gbXNnLmdldF9wYXJhbSgnY2hhcnNldCcpCisgICAgICAgICAgICBpZiBjaGFyc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXQorICAgICAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChwYXlsb2FkLCBjaGFyc2V0KQorICAgICAgICAgICAgICAgIHBheWxvYWQgPSBtc2cuZ2V0X3BheWxvYWQoKQogICAgICAgICBpZiBzZWxmLl9tYW5nbGVfZnJvbV86CiAgICAgICAgICAgICBwYXlsb2FkID0gZmNyZS5zdWIoJz5Gcm9tICcsIHBheWxvYWQpCi0gICAgICAgIHNlbGYuX2ZwLndyaXRlKHBheWxvYWQpCisgICAgICAgIHNlbGYud3JpdGUocGF5bG9hZCkKIAogICAgICMgRGVmYXVsdCBib2R5IGhhbmRsZXIKICAgICBfd3JpdGVCb2R5ID0gX2hhbmRsZV90ZXh0CkBAIC0xNzAsMjkgKzIxMywyOSBAQAogICAgICAgICAgICAgc3VicGFydHMgPSBbXQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3VicGFydHMsIHN0cik6CiAgICAgICAgICAgICAjIGUuZy4gYSBub24tc3RyaWN0IHBhcnNlIG9mIGEgbWVzc2FnZSB3aXRoIG5vIHN0YXJ0aW5nIGJvdW5kYXJ5LgotICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3VicGFydHMpCisgICAgICAgICAgICBzZWxmLndyaXRlKHN1YnBhcnRzKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc3VicGFydHMsIGxpc3QpOgogICAgICAgICAgICAgIyBTY2FsYXIgcGF5bG9hZAogICAgICAgICAgICAgc3VicGFydHMgPSBbc3VicGFydHNdCiAgICAgICAgIGZvciBwYXJ0IGluIHN1YnBhcnRzOgotICAgICAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHMgPSBzZWxmLl9uZXdfYnVmZmVyKCkKICAgICAgICAgICAgIGcgPSBzZWxmLmNsb25lKHMpCi0gICAgICAgICAgICBnLmZsYXR0ZW4ocGFydCwgdW5peGZyb209RmFsc2UpCisgICAgICAgICAgICBnLmZsYXR0ZW4ocGFydCwgdW5peGZyb209RmFsc2UsIGxpbmVzZXA9c2VsZi5fTkwpCiAgICAgICAgICAgICBtc2d0ZXh0cy5hcHBlbmQocy5nZXR2YWx1ZSgpKQogICAgICAgICAjIEJBVzogV2hhdCBhYm91dCBib3VuZGFyaWVzIHRoYXQgYXJlIHdyYXBwZWQgaW4gZG91YmxlLXF1b3Rlcz8KICAgICAgICAgYm91bmRhcnkgPSBtc2cuZ2V0X2JvdW5kYXJ5KCkKICAgICAgICAgaWYgbm90IGJvdW5kYXJ5OgogICAgICAgICAgICAgIyBDcmVhdGUgYSBib3VuZGFyeSB0aGF0IGRvZXNuJ3QgYXBwZWFyIGluIGFueSBvZiB0aGUKICAgICAgICAgICAgICMgbWVzc2FnZSB0ZXh0cy4KLSAgICAgICAgICAgIGFsbHRleHQgPSBOTC5qb2luKG1zZ3RleHRzKQotICAgICAgICAgICAgYm91bmRhcnkgPSBfbWFrZV9ib3VuZGFyeShhbGx0ZXh0KQorICAgICAgICAgICAgYWxsdGV4dCA9IHNlbGYuX2VuY29kZWRfTkwuam9pbihtc2d0ZXh0cykKKyAgICAgICAgICAgIGJvdW5kYXJ5ID0gc2VsZi5fbWFrZV9ib3VuZGFyeShhbGx0ZXh0KQogICAgICAgICAgICAgbXNnLnNldF9ib3VuZGFyeShib3VuZGFyeSkKICAgICAgICAgIyBJZiB0aGVyZSdzIGEgcHJlYW1ibGUsIHdyaXRlIGl0IG91dCwgd2l0aCBhIHRyYWlsaW5nIENSTEYKICAgICAgICAgaWYgbXNnLnByZWFtYmxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJpbnQobXNnLnByZWFtYmxlLCBmaWxlPXNlbGYuX2ZwKQorICAgICAgICAgICAgc2VsZi53cml0ZShtc2cucHJlYW1ibGUgKyBzZWxmLl9OTCkKICAgICAgICAgIyBkYXNoLWJvdW5kYXJ5IHRyYW5zcG9ydC1wYWRkaW5nIENSTEYKLSAgICAgICAgcHJpbnQoJy0tJyArIGJvdW5kYXJ5LCBmaWxlPXNlbGYuX2ZwKQorICAgICAgICBzZWxmLndyaXRlKCctLScgKyBib3VuZGFyeSArIHNlbGYuX05MKQogICAgICAgICAjIGJvZHktcGFydAogICAgICAgICBpZiBtc2d0ZXh0czoKICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKG1zZ3RleHRzLnBvcCgwKSkKQEAgLTIwMSwxNCArMjQ0LDE0IEBACiAgICAgICAgICMgLS0+IENSTEYgYm9keS1wYXJ0CiAgICAgICAgIGZvciBib2R5X3BhcnQgaW4gbXNndGV4dHM6CiAgICAgICAgICAgICAjIGRlbGltaXRlciB0cmFuc3BvcnQtcGFkZGluZyBDUkxGCi0gICAgICAgICAgICBwcmludCgnXG4tLScgKyBib3VuZGFyeSwgZmlsZT1zZWxmLl9mcCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5fTkwgKyAnLS0nICsgYm91bmRhcnkgKyBzZWxmLl9OTCkKICAgICAgICAgICAgICMgYm9keS1wYXJ0CiAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShib2R5X3BhcnQpCiAgICAgICAgICMgY2xvc2UtZGVsaW1pdGVyIHRyYW5zcG9ydC1wYWRkaW5nCi0gICAgICAgIHNlbGYuX2ZwLndyaXRlKCdcbi0tJyArIGJvdW5kYXJ5ICsgJy0tJykKKyAgICAgICAgc2VsZi53cml0ZShzZWxmLl9OTCArICctLScgKyBib3VuZGFyeSArICctLScpCiAgICAgICAgIGlmIG1zZy5lcGlsb2d1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByaW50KGZpbGU9c2VsZi5fZnApCi0gICAgICAgICAgICBzZWxmLl9mcC53cml0ZShtc2cuZXBpbG9ndWUpCisgICAgICAgICAgICBzZWxmLndyaXRlKHNlbGYuX05MKQorICAgICAgICAgICAgc2VsZi53cml0ZShtc2cuZXBpbG9ndWUpCiAKICAgICBkZWYgX2hhbmRsZV9tdWx0aXBhcnRfc2lnbmVkKHNlbGYsIG1zZyk6CiAgICAgICAgICMgVGhlIGNvbnRlbnRzIG9mIHNpZ25lZCBwYXJ0cyBoYXMgdG8gc3RheSB1bm1vZGlmaWVkIGluIG9yZGVyIHRvIGtlZXAKQEAgLTIyNywyMyArMjcwLDIzIEBACiAgICAgICAgICMgYmxvY2sgYW5kIHRoZSBib3VuZGFyeS4gIFNpZ2guCiAgICAgICAgIGJsb2NrcyA9IFtdCiAgICAgICAgIGZvciBwYXJ0IGluIG1zZy5nZXRfcGF5bG9hZCgpOgotICAgICAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHMgPSBzZWxmLl9uZXdfYnVmZmVyKCkKICAgICAgICAgICAgIGcgPSBzZWxmLmNsb25lKHMpCi0gICAgICAgICAgICBnLmZsYXR0ZW4ocGFydCwgdW5peGZyb209RmFsc2UpCisgICAgICAgICAgICBnLmZsYXR0ZW4ocGFydCwgdW5peGZyb209RmFsc2UsIGxpbmVzZXA9c2VsZi5fTkwpCiAgICAgICAgICAgICB0ZXh0ID0gcy5nZXR2YWx1ZSgpCi0gICAgICAgICAgICBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJykKKyAgICAgICAgICAgIGxpbmVzID0gdGV4dC5zcGxpdChzZWxmLl9lbmNvZGVkX05MKQogICAgICAgICAgICAgIyBTdHJpcCBvZmYgdGhlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIGVtcHR5IGxpbmUKLSAgICAgICAgICAgIGlmIGxpbmVzIGFuZCBsaW5lc1stMV0gPT0gJyc6Ci0gICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChOTC5qb2luKGxpbmVzWzotMV0pKQorICAgICAgICAgICAgaWYgbGluZXMgYW5kIGxpbmVzWy0xXSA9PSBzZWxmLl9lbmNvZGVkX0VNUFRZOgorICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoc2VsZi5fZW5jb2RlZF9OTC5qb2luKGxpbmVzWzotMV0pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKHRleHQpCiAgICAgICAgICMgTm93IGpvaW4gYWxsIHRoZSBibG9ja3Mgd2l0aCBhbiBlbXB0eSBsaW5lLiAgVGhpcyBoYXMgdGhlIGxvdmVseQogICAgICAgICAjIGVmZmVjdCBvZiBzZXBhcmF0aW5nIGVhY2ggYmxvY2sgd2l0aCBhbiBlbXB0eSBsaW5lLCBidXQgbm90IGFkZGluZwogICAgICAgICAjIGFuIGV4dHJhIG9uZSBhZnRlciB0aGUgbGFzdCBvbmUuCi0gICAgICAgIHNlbGYuX2ZwLndyaXRlKE5MLmpvaW4oYmxvY2tzKSkKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc2VsZi5fZW5jb2RlZF9OTC5qb2luKGJsb2NrcykpCiAKICAgICBkZWYgX2hhbmRsZV9tZXNzYWdlKHNlbGYsIG1zZyk6Ci0gICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIHMgPSBzZWxmLl9uZXdfYnVmZmVyKCkKICAgICAgICAgZyA9IHNlbGYuY2xvbmUocykKICAgICAgICAgIyBUaGUgcGF5bG9hZCBvZiBhIG1lc3NhZ2UvcmZjODIyIHBhcnQgc2hvdWxkIGJlIGEgbXVsdGlwYXJ0IHNlcXVlbmNlCiAgICAgICAgICMgb2YgbGVuZ3RoIDEuICBUaGUgemVyb3RoIGVsZW1lbnQgb2YgdGhlIGxpc3Qgc2hvdWxkIGJlIHRoZSBNZXNzYWdlCkBAIC0yNTYsMTAgKzI5OSw5OCBAQAogICAgICAgICAjIGluIHRoYXQgY2FzZSB3ZSBqdXN0IGVtaXQgdGhlIHN0cmluZyBib2R5LgogICAgICAgICBwYXlsb2FkID0gbXNnLmdldF9wYXlsb2FkKCkKICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBsaXN0KToKLSAgICAgICAgICAgIGcuZmxhdHRlbihtc2cuZ2V0X3BheWxvYWQoMCksIHVuaXhmcm9tPUZhbHNlKQorICAgICAgICAgICAgZy5mbGF0dGVuKG1zZy5nZXRfcGF5bG9hZCgwKSwgdW5peGZyb209RmFsc2UsIGxpbmVzZXA9c2VsZi5fTkwpCiAgICAgICAgICAgICBwYXlsb2FkID0gcy5nZXR2YWx1ZSgpCiAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHBheWxvYWQpCiAKKyAgICAjIFRoaXMgdXNlZCB0byBiZSBhIG1vZHVsZSBsZXZlbCBmdW5jdGlvbjsgd2UgdXNlIGEgY2xhc3NtZXRob2QgZm9yIHRoaXMKKyAgICAjIGFuZCBfY29tcGlsZV9yZSBzbyB3ZSBjYW4gY29udGludWUgdG8gcHJvdmlkZSB0aGUgbW9kdWxlIGxldmVsIGZ1bmN0aW9uCisgICAgIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBieSBkb2luZworICAgICMgICBfbWFrZV9ib3VkYXJ5ID0gR2VuZXJhdG9yLl9tYWtlX2JvdW5kYXJ5CisgICAgIyBhdCB0aGUgZW5kIG9mIHRoZSBtb2R1bGUuICBJdCAqaXMqIGludGVybmFsLCBzbyB3ZSBjb3VsZCBkcm9wIHRoYXQuLi4KKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX21ha2VfYm91bmRhcnkoY2xzLCB0ZXh0PU5vbmUpOgorICAgICAgICAjIENyYWZ0IGEgcmFuZG9tIGJvdW5kYXJ5LiAgSWYgdGV4dCBpcyBnaXZlbiwgZW5zdXJlIHRoYXQgdGhlIGNob3NlbgorICAgICAgICAjIGJvdW5kYXJ5IGRvZXNuJ3QgYXBwZWFyIGluIHRoZSB0ZXh0LgorICAgICAgICB0b2tlbiA9IHJhbmRvbS5yYW5kcmFuZ2Uoc3lzLm1heHNpemUpCisgICAgICAgIGJvdW5kYXJ5ID0gKCc9JyAqIDE1KSArIChfZm10ICUgdG9rZW4pICsgJz09JworICAgICAgICBpZiB0ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gYm91bmRhcnkKKyAgICAgICAgYiA9IGJvdW5kYXJ5CisgICAgICAgIGNvdW50ZXIgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBjcmUgPSBjbHMuX2NvbXBpbGVfcmUoJ14tLScgKyByZS5lc2NhcGUoYikgKyAnKC0tKT8kJywgcmUuTVVMVElMSU5FKQorICAgICAgICAgICAgaWYgbm90IGNyZS5zZWFyY2godGV4dCk6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGIgPSBib3VuZGFyeSArICcuJyArIHN0cihjb3VudGVyKQorICAgICAgICAgICAgY291bnRlciArPSAxCisgICAgICAgIHJldHVybiBiCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NvbXBpbGVfcmUoY2xzLCBzLCBmbGFncyk6CisgICAgICAgIHJldHVybiByZS5jb21waWxlKHMsIGZsYWdzKQorCisMCitjbGFzcyBCeXRlc0dlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgICIiIkdlbmVyYXRlcyBhIGJ5dGVzIHZlcnNpb24gb2YgYSBNZXNzYWdlIG9iamVjdCB0cmVlLgorCisgICAgRnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byB0aGUgYmFzZSBHZW5lcmF0b3IgZXhjZXB0IHRoYXQgdGhlIG91dHB1dCBpcworICAgIGJ5dGVzIGFuZCBub3Qgc3RyaW5nLiAgV2hlbiBzdXJyb2dhdGVzIHdlcmUgdXNlZCBpbiB0aGUgaW5wdXQgdG8gZW5jb2RlCisgICAgYnl0ZXMsIHRoZXNlIGFyZSBkZWNvZGVkIGJhY2sgdG8gYnl0ZXMgZm9yIG91dHB1dC4KKworICAgIFRoZSBvdXRmcCBvYmplY3QgbXVzdCBhY2NlcHQgYnl0ZXMgaW4gaXRzIHdyaXRlIG1ldGhvZC4KKyAgICAiIiIKKworICAgICMgQnl0ZXMgdmVyc2lvbnMgb2YgdGhpcyBjb25zdGFudCBmb3IgdXNlIGluIG1hbmlwdWxhdGluZyBkYXRhIGZyb20KKyAgICAjIHRoZSBCeXRlc0lPIGJ1ZmZlci4KKyAgICBfZW5jb2RlZF9FTVBUWSA9IGInJworCisgICAgZGVmIHdyaXRlKHNlbGYsIHMpOgorICAgICAgICBzZWxmLl9mcC53cml0ZShzLmVuY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykpCisKKyAgICBkZWYgX25ld19idWZmZXIoc2VsZik6CisgICAgICAgIHJldHVybiBCeXRlc0lPKCkKKworICAgIGRlZiBfZW5jb2RlKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcy5lbmNvZGUoJ2FzY2lpJykKKworICAgIGRlZiBfd3JpdGVfaGVhZGVycyhzZWxmLCBtc2cpOgorICAgICAgICAjIFRoaXMgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIHRoZSBzdHJpbmcgdmVyc2lvbiwgZXhjZXB0IGZvciBoYW5kbGluZworICAgICAgICAjIHN0cmluZ3Mgd2l0aCA4Yml0IGJ5dGVzLgorICAgICAgICBmb3IgaCwgdiBpbiBtc2cuX2hlYWRlcnM6CisgICAgICAgICAgICBzZWxmLndyaXRlKCclczogJyAlIGgpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIEhlYWRlcik6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh2LmVuY29kZShtYXhsaW5lbGVuPXNlbGYuX21heGhlYWRlcmxlbikrTkwpCisgICAgICAgICAgICBlbGlmIF9oYXNfc3Vycm9nYXRlcyh2KToKKyAgICAgICAgICAgICAgICAjIElmIHdlIGhhdmUgcmF3IDhiaXQgZGF0YSBpbiBhIGJ5dGUgc3RyaW5nLCB3ZSBoYXZlIG5vIGlkZWEKKyAgICAgICAgICAgICAgICAjIHdoYXQgdGhlIGVuY29kaW5nIGlzLiAgVGhlcmUgaXMgbm8gc2FmZSB3YXkgdG8gc3BsaXQgdGhpcworICAgICAgICAgICAgICAgICMgc3RyaW5nLiAgSWYgaXQncyBhc2NpaS1zdWJzZXQsIHRoZW4gd2UgY291bGQgZG8gYSBub3JtYWwKKyAgICAgICAgICAgICAgICAjIGFzY2lpIHNwbGl0LCBidXQgaWYgaXQncyBtdWx0aWJ5dGUgdGhlbiB3ZSBjb3VsZCBicmVhayB0aGUKKyAgICAgICAgICAgICAgICAjIHN0cmluZy4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgc28gdGhlIGxlYXN0IGhhcm0gc2VlbXMgdG8KKyAgICAgICAgICAgICAgICAjIGJlIHRvIG5vdCBzcGxpdCB0aGUgc3RyaW5nIGFuZCByaXNrIGl0IGJlaW5nIHRvbyBsb25nLgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoditOTCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBIZWFkZXIncyBnb3QgbG90cyBvZiBzbWFydHMgYW5kIHRoaXMgc3RyaW5nIGlzIHNhZmUuLi4KKyAgICAgICAgICAgICAgICBoZWFkZXIgPSBIZWFkZXIodiwgbWF4bGluZWxlbj1zZWxmLl9tYXhoZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9uYW1lPWgpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShoZWFkZXIuZW5jb2RlKGxpbmVzZXA9c2VsZi5fTkwpK3NlbGYuX05MKQorICAgICAgICAjIEEgYmxhbmsgbGluZSBhbHdheXMgc2VwYXJhdGVzIGhlYWRlcnMgZnJvbSBib2R5CisgICAgICAgIHNlbGYud3JpdGUoc2VsZi5fTkwpCisKKyAgICBkZWYgX2hhbmRsZV90ZXh0KHNlbGYsIG1zZyk6CisgICAgICAgICMgSWYgdGhlIHN0cmluZyBoYXMgc3Vycm9nYXRlcyB0aGUgb3JpZ2luYWwgc291cmNlIHdhcyBieXRlcywgc28KKyAgICAgICAgIyBqdXN0IHdyaXRlIGl0IGJhY2sgb3V0LgorICAgICAgICBpZiBtc2cuX3BheWxvYWQgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBfaGFzX3N1cnJvZ2F0ZXMobXNnLl9wYXlsb2FkKToKKyAgICAgICAgICAgIHNlbGYud3JpdGUobXNnLl9wYXlsb2FkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VwZXIoQnl0ZXNHZW5lcmF0b3Isc2VsZikuX2hhbmRsZV90ZXh0KG1zZykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY29tcGlsZV9yZShjbHMsIHMsIGZsYWdzKToKKyAgICAgICAgcmV0dXJuIHJlLmNvbXBpbGUocy5lbmNvZGUoJ2FzY2lpJyksIGZsYWdzKQorCiAKIAwKIF9GTVQgPSAnW05vbi10ZXh0ICglKHR5cGUpcykgcGFydCBvZiBtZXNzYWdlIG9taXR0ZWQsIGZpbGVuYW1lICUoZmlsZW5hbWUpc10nCkBAIC0zMjAsMjMgKzQ1MSw5IEBACiAKIAogDAotIyBIZWxwZXIKKyMgSGVscGVyIHVzZWQgYnkgR2VuZXJhdG9yLl9tYWtlX2JvdW5kYXJ5CiBfd2lkdGggPSBsZW4ocmVwcihzeXMubWF4c2l6ZS0xKSkKIF9mbXQgPSAnJSUwJWRkJyAlIF93aWR0aAogCi1kZWYgX21ha2VfYm91bmRhcnkodGV4dD1Ob25lKToKLSAgICAjIENyYWZ0IGEgcmFuZG9tIGJvdW5kYXJ5LiAgSWYgdGV4dCBpcyBnaXZlbiwgZW5zdXJlIHRoYXQgdGhlIGNob3NlbgotICAgICMgYm91bmRhcnkgZG9lc24ndCBhcHBlYXIgaW4gdGhlIHRleHQuCi0gICAgdG9rZW4gPSByYW5kb20ucmFuZHJhbmdlKHN5cy5tYXhzaXplKQotICAgIGJvdW5kYXJ5ID0gKCc9JyAqIDE1KSArIChfZm10ICUgdG9rZW4pICsgJz09JwotICAgIGlmIHRleHQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIGJvdW5kYXJ5Ci0gICAgYiA9IGJvdW5kYXJ5Ci0gICAgY291bnRlciA9IDAKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBjcmUgPSByZS5jb21waWxlKCdeLS0nICsgcmUuZXNjYXBlKGIpICsgJygtLSk/JCcsIHJlLk1VTFRJTElORSkKLSAgICAgICAgaWYgbm90IGNyZS5zZWFyY2godGV4dCk6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBiID0gYm91bmRhcnkgKyAnLicgKyBzdHIoY291bnRlcikKLSAgICAgICAgY291bnRlciArPSAxCi0gICAgcmV0dXJuIGIKKyMgQmFja3dhcmQgY29tcGF0aWJpbGl0eQorX21ha2VfYm91bmRhcnkgPSBHZW5lcmF0b3IuX21ha2VfYm91bmRhcnkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9oZWFkZXIucHkgYi9MaWIvZW1haWwvaGVhZGVyLnB5CmluZGV4IGQxZmQ5YTAuLjBhNjZkZjUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9oZWFkZXIucHkKKysrIGIvTGliL2VtYWlsL2hlYWRlci5weQpAQCAtMTcsNyArMTcsOCBAQAogaW1wb3J0IGVtYWlsLmJhc2U2NG1pbWUKIAogZnJvbSBlbWFpbC5lcnJvcnMgaW1wb3J0IEhlYWRlclBhcnNlRXJyb3IKLWZyb20gZW1haWwuY2hhcnNldCBpbXBvcnQgQ2hhcnNldAorZnJvbSBlbWFpbCBpbXBvcnQgY2hhcnNldCBhcyBfY2hhcnNldAorQ2hhcnNldCA9IF9jaGFyc2V0LkNoYXJzZXQKIAogTkwgPSAnXG4nCiBTUEFDRSA9ICcgJwpAQCAtMjUsNiArMjYsNyBAQAogU1BBQ0U4ID0gJyAnICogOAogRU1QVFlTVFJJTkcgPSAnJwogTUFYTElORUxFTiA9IDc4CitGV1MgPSAnIFx0JwogCiBVU0FTQ0lJID0gQ2hhcnNldCgndXMtYXNjaWknKQogVVRGOCA9IENoYXJzZXQoJ3V0Zi04JykKQEAgLTY1LDkgKzY3LDE1IEBACiAgICAgb3RoZXJ3aXNlIGEgbG93ZXItY2FzZSBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgY2hhcmFjdGVyIHNldAogICAgIHNwZWNpZmllZCBpbiB0aGUgZW5jb2RlZCBzdHJpbmcuCiAKLSAgICBBbiBlbWFpbC5FcnJvcnMuSGVhZGVyUGFyc2VFcnJvciBtYXkgYmUgcmFpc2VkIHdoZW4gY2VydGFpbiBkZWNvZGluZyBlcnJvcgorICAgIGhlYWRlciBtYXkgYmUgYSBzdHJpbmcgdGhhdCBtYXkgb3IgbWF5IG5vdCBjb250YWluIFJGQzIwNDcgZW5jb2RlZCB3b3JkcywKKyAgICBvciBpdCBtYXkgYmUgYSBIZWFkZXIgb2JqZWN0LgorCisgICAgQW4gZW1haWwuZXJyb3JzLkhlYWRlclBhcnNlRXJyb3IgbWF5IGJlIHJhaXNlZCB3aGVuIGNlcnRhaW4gZGVjb2RpbmcgZXJyb3IKICAgICBvY2N1cnMgKGUuZy4gYSBiYXNlNjQgZGVjb2RpbmcgZXhjZXB0aW9uKS4KICAgICAiIiIKKyAgICAjIElmIGl0IGlzIGEgSGVhZGVyIG9iamVjdCwgd2UgY2FuIGp1c3QgcmV0dXJuIHRoZSBjaHVua3MuCisgICAgaWYgaGFzYXR0cihoZWFkZXIsICdfY2h1bmtzJyk6CisgICAgICAgIHJldHVybiBsaXN0KGhlYWRlci5fY2h1bmtzKQogICAgICMgSWYgbm8gZW5jb2RpbmcsIGp1c3QgcmV0dXJuIHRoZSBoZWFkZXIgd2l0aCBubyBjaGFyc2V0LgogICAgIGlmIG5vdCBlY3JlLnNlYXJjaChoZWFkZXIpOgogICAgICAgICByZXR1cm4gWyhoZWFkZXIsIE5vbmUpXQpAQCAtMjE0LDYgKzIyMiw5IEBACiAgICAgICAgICAgICAjIGZyb20gYSBjaGFyc2V0IHRvIE5vbmUvdXMtYXNjaWksIG9yIGZyb20gTm9uZS91cy1hc2NpaSB0byBhCiAgICAgICAgICAgICAjIGNoYXJzZXQuICBPbmx5IGRvIHRoaXMgZm9yIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY2h1bmtzLgogICAgICAgICAgICAgbmV4dGNzID0gY2hhcnNldAorICAgICAgICAgICAgaWYgbmV4dGNzID09IF9jaGFyc2V0LlVOS05PV044QklUOgorICAgICAgICAgICAgICAgIG9yaWdpbmFsX2J5dGVzID0gc3RyaW5nLmVuY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgICAgICAgICBzdHJpbmcgPSBvcmlnaW5hbF9ieXRlcy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKQogICAgICAgICAgICAgaWYgdWNodW5rczoKICAgICAgICAgICAgICAgICBpZiBsYXN0Y3Mgbm90IGluIChOb25lLCAndXMtYXNjaWknKToKICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dGNzIGluIChOb25lLCAndXMtYXNjaWknKToKQEAgLTI2NywxMSArMjc4LDEyIEBACiAgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIGJ5dGVzIHdlJ3JlIHN0b3JpbmcgY2FuIGJlIGRlY29kZWQgdG8gdGhlIG91dHB1dAogICAgICAgICAjIGNoYXJhY3RlciBzZXQsIG90aGVyd2lzZSBhbiBlYXJseSBlcnJvciBpcyB0aHJvd24uCiAgICAgICAgIG91dHB1dF9jaGFyc2V0ID0gY2hhcnNldC5vdXRwdXRfY29kZWMgb3IgJ3VzLWFzY2lpJwotICAgICAgICBzLmVuY29kZShvdXRwdXRfY2hhcnNldCwgZXJyb3JzKQorICAgICAgICBpZiBvdXRwdXRfY2hhcnNldCAhPSBfY2hhcnNldC5VTktOT1dOOEJJVDoKKyAgICAgICAgICAgIHMuZW5jb2RlKG91dHB1dF9jaGFyc2V0LCBlcnJvcnMpCiAgICAgICAgIHNlbGYuX2NodW5rcy5hcHBlbmQoKHMsIGNoYXJzZXQpKQogCi0gICAgZGVmIGVuY29kZShzZWxmLCBzcGxpdGNoYXJzPSc7LCBcdCcsIG1heGxpbmVsZW49Tm9uZSk6Ci0gICAgICAgICIiIkVuY29kZSBhIG1lc3NhZ2UgaGVhZGVyIGludG8gYW4gUkZDLWNvbXBsaWFudCBmb3JtYXQuCisgICAgZGVmIGVuY29kZShzZWxmLCBzcGxpdGNoYXJzPSc7LCBcdCcsIG1heGxpbmVsZW49Tm9uZSwgbGluZXNlcD0nXG4nKToKKyAgICAgICAgciIiIkVuY29kZSBhIG1lc3NhZ2UgaGVhZGVyIGludG8gYW4gUkZDLWNvbXBsaWFudCBmb3JtYXQuCiAKICAgICAgICAgVGhlcmUgYXJlIG1hbnkgaXNzdWVzIGludm9sdmVkIGluIGNvbnZlcnRpbmcgYSBnaXZlbiBzdHJpbmcgZm9yIHVzZSBpbgogICAgICAgICBhbiBlbWFpbCBoZWFkZXIuICBPbmx5IGNlcnRhaW4gY2hhcmFjdGVyIHNldHMgYXJlIHJlYWRhYmxlIGluIG1vc3QKQEAgLTI4OCw5ICszMDAsMjAgQEAKICAgICAgICAgbmFtZSB3YXMgc3BlY2lmaWVkIGF0IEhlYWRlciBjb25zdHJ1Y3Rpb24gdGltZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvcgogICAgICAgICBtYXhsaW5lbGVuIGlzIGRldGVybWluZWQgYXQgaGVhZGVyIGNvbnN0cnVjdGlvbiB0aW1lLgogCi0gICAgICAgIE9wdGlvbmFsIHNwbGl0Y2hhcnMgaXMgYSBzdHJpbmcgY29udGFpbmluZyBjaGFyYWN0ZXJzIHRvIHNwbGl0IGxvbmcKLSAgICAgICAgQVNDSUkgbGluZXMgb24sIGluIHJvdWdoIHN1cHBvcnQgb2YgUkZDIDI4MjIncyBgaGlnaGVzdCBsZXZlbAotICAgICAgICBzeW50YWN0aWMgYnJlYWtzJy4gIFRoaXMgZG9lc24ndCBhZmZlY3QgUkZDIDIwNDcgZW5jb2RlZCBsaW5lcy4KKyAgICAgICAgT3B0aW9uYWwgc3BsaXRjaGFycyBpcyBhIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgd2hpY2ggc2hvdWxkIGJlCisgICAgICAgIGdpdmVuIGV4dHJhIHdlaWdodCBieSB0aGUgc3BsaXR0aW5nIGFsZ29yaXRobSBkdXJpbmcgbm9ybWFsIGhlYWRlcgorICAgICAgICB3cmFwcGluZy4gIFRoaXMgaXMgaW4gdmVyeSByb3VnaCBzdXBwb3J0IG9mIFJGQyAyODIyJ3MgYGhpZ2hlciBsZXZlbAorICAgICAgICBzeW50YWN0aWMgYnJlYWtzJzogIHNwbGl0IHBvaW50cyBwcmVjZWRlZCBieSBhIHNwbGl0Y2hhciBhcmUgcHJlZmVycmVkCisgICAgICAgIGR1cmluZyBsaW5lIHNwbGl0dGluZywgd2l0aCB0aGUgY2hhcmFjdGVycyBwcmVmZXJyZWQgaW4gdGhlIG9yZGVyIGluCisgICAgICAgIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBzdHJpbmcuICBTcGFjZSBhbmQgdGFiIG1heSBiZSBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgc3RyaW5nIHRvIGluZGljYXRlIHdoZXRoZXIgcHJlZmVyZW5jZSBzaG91bGQgYmUgZ2l2ZW4gdG8gb25lIG92ZXIgdGhlCisgICAgICAgIG90aGVyIGFzIGEgc3BsaXQgcG9pbnQgd2hlbiBvdGhlciBzcGxpdCBjaGFycyBkbyBub3QgYXBwZWFyIGluIHRoZSBsaW5lCisgICAgICAgIGJlaW5nIHNwbGl0LiAgU3BsaXRjaGFycyBkb2VzIG5vdCBhZmZlY3QgUkZDIDIwNDcgZW5jb2RlZCBsaW5lcy4KKworICAgICAgICBPcHRpb25hbCBsaW5lc2VwIGlzIGEgc3RyaW5nIHRvIGJlIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGxpbmVzIG9mCisgICAgICAgIHRoZSB2YWx1ZS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBtb3N0IHVzZWZ1bCBmb3IgdHlwaWNhbAorICAgICAgICBQeXRob24gYXBwbGljYXRpb25zLCBidXQgaXQgY2FuIGJlIHNldCB0byBcclxuIHRvIHByb2R1Y2UgUkZDLWNvbXBsaWFudAorICAgICAgICBsaW5lIHNlcGFyYXRvcnMgd2hlbiBuZWVkZWQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9ub3JtYWxpemUoKQogICAgICAgICBpZiBtYXhsaW5lbGVuIGlzIE5vbmU6CkBAIC0zMDQsMTcgKzMyNywyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29udGludWF0aW9uX3dzLCBzcGxpdGNoYXJzKQogICAgICAgICBmb3Igc3RyaW5nLCBjaGFyc2V0IGluIHNlbGYuX2NodW5rczoKICAgICAgICAgICAgIGxpbmVzID0gc3RyaW5nLnNwbGl0bGluZXMoKQotICAgICAgICAgICAgZm9ybWF0dGVyLmZlZWQobGluZXNbMF0gaWYgbGluZXMgZWxzZSAnJywgY2hhcnNldCkKKyAgICAgICAgICAgIGlmIGxpbmVzOgorICAgICAgICAgICAgICAgIGZvcm1hdHRlci5mZWVkKCcnLCBsaW5lc1swXSwgY2hhcnNldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmZlZWQoJycsICcnLCBjaGFyc2V0KQogICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXNbMTpdOgogICAgICAgICAgICAgICAgIGZvcm1hdHRlci5uZXdsaW5lKCkKICAgICAgICAgICAgICAgICBpZiBjaGFyc2V0LmhlYWRlcl9lbmNvZGluZyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmZlZWQoc2VsZi5fY29udGludWF0aW9uX3dzLCBVU0FTQ0lJKQotICAgICAgICAgICAgICAgICAgICBsaW5lID0gJyAnICsgbGluZS5sc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvcm1hdHRlci5mZWVkKGxpbmUsIGNoYXJzZXQpCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5mZWVkKHNlbGYuX2NvbnRpbnVhdGlvbl93cywgJyAnICsgbGluZS5sc3RyaXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzbGluZSA9IGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgZndzID0gbGluZVs6bGVuKGxpbmUpLWxlbihzbGluZSldCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5mZWVkKGZ3cywgc2xpbmUsIGNoYXJzZXQpCiAgICAgICAgICAgICBpZiBsZW4obGluZXMpID4gMToKICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIubmV3bGluZSgpCiAgICAgICAgICAgICBmb3JtYXR0ZXIuYWRkX3RyYW5zaXRpb24oKQotICAgICAgICB2YWx1ZSA9IHN0cihmb3JtYXR0ZXIpCisgICAgICAgIHZhbHVlID0gZm9ybWF0dGVyLl9zdHIobGluZXNlcCkKICAgICAgICAgaWYgX2VtYmVkZWRfaGVhZGVyLnNlYXJjaCh2YWx1ZSk6CiAgICAgICAgICAgICByYWlzZSBIZWFkZXJQYXJzZUVycm9yKCJoZWFkZXIgdmFsdWUgYXBwZWFycyB0byBjb250YWluICIKICAgICAgICAgICAgICAgICAiYW4gZW1iZWRkZWQgaGVhZGVyOiB7IXJ9Ii5mb3JtYXQodmFsdWUpKQpAQCAtMzQ0LDU0ICszNzMsNDAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgaGVhZGVybGVuLCBtYXhsZW4sIGNvbnRpbnVhdGlvbl93cywgc3BsaXRjaGFycyk6CiAgICAgICAgIHNlbGYuX21heGxlbiA9IG1heGxlbgogICAgICAgICBzZWxmLl9jb250aW51YXRpb25fd3MgPSBjb250aW51YXRpb25fd3MKLSAgICAgICAgc2VsZi5fY29udGludWF0aW9uX3dzX2xlbiA9IGxlbihjb250aW51YXRpb25fd3MucmVwbGFjZSgnXHQnLCBTUEFDRTgpKQorICAgICAgICBzZWxmLl9jb250aW51YXRpb25fd3NfbGVuID0gbGVuKGNvbnRpbnVhdGlvbl93cykKICAgICAgICAgc2VsZi5fc3BsaXRjaGFycyA9IHNwbGl0Y2hhcnMKICAgICAgICAgc2VsZi5fbGluZXMgPSBbXQogICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUgPSBfQWNjdW11bGF0b3IoaGVhZGVybGVuKQogCi0gICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgZGVmIF9zdHIoc2VsZiwgbGluZXNlcCk6CiAgICAgICAgIHNlbGYubmV3bGluZSgpCi0gICAgICAgIHJldHVybiBOTC5qb2luKHNlbGYuX2xpbmVzKQorICAgICAgICByZXR1cm4gbGluZXNlcC5qb2luKHNlbGYuX2xpbmVzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHIoTkwpCiAKICAgICBkZWYgbmV3bGluZShzZWxmKToKICAgICAgICAgZW5kX29mX2xpbmUgPSBzZWxmLl9jdXJyZW50X2xpbmUucG9wKCkKLSAgICAgICAgaWYgZW5kX29mX2xpbmUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChlbmRfb2ZfbGluZSkKKyAgICAgICAgaWYgZW5kX29mX2xpbmUgIT0gKCcgJywgJycpOgorICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goKmVuZF9vZl9saW5lKQogICAgICAgICBpZiBsZW4oc2VsZi5fY3VycmVudF9saW5lKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLl9saW5lcy5hcHBlbmQoc3RyKHNlbGYuX2N1cnJlbnRfbGluZSkpCisgICAgICAgICAgICBpZiBzZWxmLl9jdXJyZW50X2xpbmUuaXNfb25seXdzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fbGluZXNbLTFdICs9IHN0cihzZWxmLl9jdXJyZW50X2xpbmUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzLmFwcGVuZChzdHIoc2VsZi5fY3VycmVudF9saW5lKSkKICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnJlc2V0KCkKIAogICAgIGRlZiBhZGRfdHJhbnNpdGlvbihzZWxmKToKLSAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goTm9uZSkKKyAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goJyAnLCAnJykKIAotICAgIGRlZiBmZWVkKHNlbGYsIHN0cmluZywgY2hhcnNldCk6Ci0gICAgICAgICMgSWYgdGhlIHN0cmluZyBpdHNlbGYgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lIGluIGl0cyBlbmNvZGVkIGZvcm1hdCwKLSAgICAgICAgIyB0aGVuIGFkZCBpdCBub3cgYW5kIGJlIGRvbmUgd2l0aCBpdC4KLSAgICAgICAgZW5jb2RlZF9zdHJpbmcgPSBjaGFyc2V0LmhlYWRlcl9lbmNvZGUoc3RyaW5nKQotICAgICAgICBpZiBsZW4oZW5jb2RlZF9zdHJpbmcpICsgbGVuKHNlbGYuX2N1cnJlbnRfbGluZSkgPD0gc2VsZi5fbWF4bGVuOgotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goZW5jb2RlZF9zdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4KKyAgICBkZWYgZmVlZChzZWxmLCBmd3MsIHN0cmluZywgY2hhcnNldCk6CiAgICAgICAgICMgSWYgdGhlIGNoYXJzZXQgaGFzIG5vIGhlYWRlciBlbmNvZGluZyAoaS5lLiBpdCBpcyBhbiBBU0NJSSBlbmNvZGluZykKICAgICAgICAgIyB0aGVuIHdlIG11c3Qgc3BsaXQgdGhlIGhlYWRlciBhdCB0aGUgImhpZ2hlc3QgbGV2ZWwgc3ludGFjdGljIGJyZWFrIgogICAgICAgICAjIHBvc3NpYmxlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhIGxvdCBvZiBzbWFydHMgYWJvdXQgZmllbGQKICAgICAgICAgIyBzeW50YXg7IHdlIGp1c3QgdHJ5IHRvIGJyZWFrIG9uIHNlbWktY29sb25zLCB0aGVuIGNvbW1hcywgdGhlbgogICAgICAgICAjIHdoaXRlc3BhY2UuICBFdmVudHVhbGx5LCB0aGlzIHNob3VsZCBiZSBwbHVnZ2FibGUuCiAgICAgICAgIGlmIGNoYXJzZXQuaGVhZGVyX2VuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICBmb3IgY2ggaW4gc2VsZi5fc3BsaXRjaGFyczoKLSAgICAgICAgICAgICAgICBpZiBjaCBpbiBzdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNoID0gTm9uZQotICAgICAgICAgICAgIyBJZiB0aGVyZSdzIG5vIGF2YWlsYWJsZSBzcGxpdCBjaGFyYWN0ZXIgdGhlbiByZWdhcmRsZXNzIG9mCi0gICAgICAgICAgICAjIHdoZXRoZXIgdGhlIHN0cmluZyBmaXRzIG9uIHRoZSBsaW5lLCB3ZSBoYXZlIHRvIHB1dCBpdCBvbiBhIGxpbmUKLSAgICAgICAgICAgICMgYnkgaXRzZWxmLgotICAgICAgICAgICAgaWYgY2ggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY3VycmVudF9saW5lLmlzX29ubHl3cygpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9saW5lcy5hcHBlbmQoc3RyKHNlbGYuX2N1cnJlbnRfbGluZSkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5yZXNldChzZWxmLl9jb250aW51YXRpb25fd3MpCi0gICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goZW5jb2RlZF9zdHJpbmcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2FzY2lpX3NwbGl0KHN0cmluZywgY2gpCisgICAgICAgICAgICBzZWxmLl9hc2NpaV9zcGxpdChmd3MsIHN0cmluZywgc2VsZi5fc3BsaXRjaGFycykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIE90aGVyd2lzZSwgd2UncmUgZG9pbmcgZWl0aGVyIGEgQmFzZTY0IG9yIGEgcXVvdGVkLXByaW50YWJsZQogICAgICAgICAjIGVuY29kaW5nIHdoaWNoIG1lYW5zIHdlIGRvbid0IG5lZWQgdG8gc3BsaXQgdGhlIGxpbmUgb24gc3ludGFjdGljCkBAIC00MDksMTUgKzQyNCwxNCBAQAogICAgICAgICAgICAgIyBUaGVyZSBhcmUgbm8gZW5jb2RlZCBsaW5lcywgc28gd2UncmUgZG9uZS4KICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBmaXJzdF9saW5lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goZmlyc3RfbGluZSkKLSAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHN0cihzZWxmLl9jdXJyZW50X2xpbmUpKQotICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucmVzZXQoc2VsZi5fY29udGludWF0aW9uX3dzKQorICAgICAgICAgICAgc2VsZi5fYXBwZW5kX2NodW5rKGZ3cywgZmlyc3RfbGluZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGFzdF9saW5lID0gZW5jb2RlZF9saW5lcy5wb3AoKQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICMgVGhlcmUgd2FzIG9ubHkgb25lIGxpbmUuCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2gobGFzdF9saW5lKQorICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChzZWxmLl9jb250aW51YXRpb25fd3MsIGxhc3RfbGluZSkKICAgICAgICAgIyBFdmVyeXRoaW5nIGVsc2UgYXJlIGZ1bGwgbGluZXMgaW4gdGhlbXNlbHZlcy4KICAgICAgICAgZm9yIGxpbmUgaW4gZW5jb2RlZF9saW5lczoKICAgICAgICAgICAgIHNlbGYuX2xpbmVzLmFwcGVuZChzZWxmLl9jb250aW51YXRpb25fd3MgKyBsaW5lKQpAQCAtNDI4LDE2MiArNDQyLDk2IEBACiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXhsZW4gLSBzZWxmLl9jb250aW51YXRpb25fd3NfbGVuCiAKLSAgICBkZWYgX2FzY2lpX3NwbGl0KHNlbGYsIHN0cmluZywgY2gpOgotICAgICAgICBob2xkaW5nID0gX0FjY3VtdWxhdG9yKCkKLSAgICAgICAgIyBTcGxpdCB0aGUgbGluZSBvbiB0aGUgc3BsaXQgY2hhcmFjdGVyLCBwcmVzZXJ2aW5nIGl0LiAgSWYgdGhlIHNwbGl0Ci0gICAgICAgICMgY2hhcmFjdGVyIGlzIHdoaXRlc3BhY2UgUkZDIDI4MjIgJDIuMi4zIHJlcXVpcmVzIHVzIHRvIGZvbGQgb24gdGhlCi0gICAgICAgICMgd2hpdGVzcGFjZSwgc28gdGhhdCB0aGUgbGluZSBsZWFkcyB3aXRoIHRoZSBvcmlnaW5hbCB3aGl0ZXNwYWNlIHdlCi0gICAgICAgICMgc3BsaXQgb24uICBIb3dldmVyLCBpZiBhIGhpZ2hlciBzeW50YWN0aWMgYnJlYWsgaXMgdXNlZCBpbnN0ZWFkCi0gICAgICAgICMgKGUuZy4gY29tbWEgb3Igc2VtaWNvbG9uKSwgdGhlIGZvbGRpbmcgc2hvdWxkIGhhcHBlbiBhZnRlciB0aGUgc3BsaXQKLSAgICAgICAgIyBjaGFyYWN0ZXIuICBCdXQgdGhlbiBpbiB0aGF0IGNhc2UsIHdlIG5lZWQgdG8gYWRkIG91ciBvd24KLSAgICAgICAgIyBjb250aW51YXRpb24gd2hpdGVzcGFjZSAtLSBhbHRob3VnaCB3b24ndCB0aGF0IGJyZWFrIHVuZm9sZGluZz8KLSAgICAgICAgZm9yIHBhcnQsIHNwbGl0cGFydCwgbmV4dHBhcnQgaW4gX3NwbGl0ZXJhdG9yKGNoLCBzdHJpbmcpOgotICAgICAgICAgICAgaWYgbm90IHNwbGl0cGFydDoKLSAgICAgICAgICAgICAgICAjIE5vIHNwbGl0cGFydCBtZWFucyB0aGlzIGlzIHRoZSBsYXN0IGNodW5rLiAgUHV0IHRoaXMgcGFydAotICAgICAgICAgICAgICAgICMgZWl0aGVyIG9uIHRoZSBjdXJyZW50IGxpbmUgb3IgdGhlIG5leHQgbGluZSBkZXBlbmRpbmcgb24KLSAgICAgICAgICAgICAgICAjIHdoZXRoZXIgaXQgZml0cy4KLSAgICAgICAgICAgICAgICBob2xkaW5nLnB1c2gocGFydCkKLSAgICAgICAgICAgICAgICBpZiBsZW4oaG9sZGluZykgKyBsZW4oc2VsZi5fY3VycmVudF9saW5lKSA8PSBzZWxmLl9tYXhsZW46Ci0gICAgICAgICAgICAgICAgICAgICMgSXQgZml0cywgYnV0IHdlJ3JlIGRvbmUuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5wdXNoKHN0cihob2xkaW5nKSkKKyAgICBkZWYgX2FzY2lpX3NwbGl0KHNlbGYsIGZ3cywgc3RyaW5nLCBzcGxpdGNoYXJzKToKKyAgICAgICAgIyBUaGUgUkZDIDI4MjIgaGVhZGVyIGZvbGRpbmcgYWxnb3JpdGhtIGlzIHNpbXBsZSBpbiBwcmluY2lwbGUgYnV0CisgICAgICAgICMgY29tcGxleCBpbiBwcmFjdGljZS4gIExpbmVzIG1heSBiZSBmb2xkZWQgYW55IHBsYWNlIHdoZXJlICJmb2xkaW5nCisgICAgICAgICMgd2hpdGUgc3BhY2UiIGFwcGVhcnMgYnkgaW5zZXJ0aW5nIGEgbGluZXNlcCBjaGFyYWN0ZXIgaW4gZnJvbnQgb2YgdGhlCisgICAgICAgICMgRldTLiAgVGhlIGNvbXBsaWNhdGlvbiBpcyB0aGF0IG5vdCBhbGwgc3BhY2VzIG9yIHRhYnMgcXVhbGlmeSBhcyBGV1MsCisgICAgICAgICMgYW5kIHdlIGFyZSBhbHNvIHN1cHBvc2VkIHRvIHByZWZlciB0byBicmVhayBhdCAiaGlnaGVyIGxldmVsCisgICAgICAgICMgc3ludGFjdGljIGJyZWFrcyIuICBXZSBjYW4ndCBkbyBlaXRoZXIgb2YgdGhlc2Ugd2l0aG91dCBpbnRpbWF0ZQorICAgICAgICAjIGtub3dsZWRnZSBvZiB0aGUgc3RydWN0dXJlIG9mIHN0cnVjdHVyZWQgaGVhZGVycywgd2hpY2ggd2UgZG9uJ3QgaGF2ZQorICAgICAgICAjIGhlcmUuICBTbyB0aGUgYmVzdCB3ZSBjYW4gZG8gaGVyZSBpcyBwcmVmZXIgdG8gYnJlYWsgYXQgdGhlIHNwZWNpZmllZAorICAgICAgICAjIHNwbGl0Y2hhcnMsIGFuZCBob3BlIHRoYXQgd2UgZG9uJ3QgY2hvb3NlIGFueSBzcGFjZXMgb3IgdGFicyB0aGF0CisgICAgICAgICMgYXJlbid0IGxlZ2FsIEZXUy4gIChUaGlzIGlzIGF0IGxlYXN0IGJldHRlciB0aGFuIHRoZSBvbGQgYWxnb3JpdGhtLAorICAgICAgICAjIHdoZXJlIHdlIHdvdWxkIHNvbWV0aW1lcyAqaW50cm9kdWNlKiBGV1MgYWZ0ZXIgYSBzcGxpdGNoYXIsIG9yIHRoZQorICAgICAgICAjIGFsZ29yaXRobSBiZWZvcmUgdGhhdCwgd2hlcmUgd2Ugd291bGQgdHVybiBhbGwgd2hpdGUgc3BhY2UgcnVucyBpbnRvCisgICAgICAgICMgc2luZ2xlIHNwYWNlcyBvciB0YWJzLikKKyAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiKFsiK0ZXUysiXSspIiwgZndzK3N0cmluZykKKyAgICAgICAgaWYgcGFydHNbMF06CisgICAgICAgICAgICBwYXJ0c1s6MF0gPSBbJyddCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJ0cy5wb3AoMCkKKyAgICAgICAgZm9yIGZ3cywgcGFydCBpbiB6aXAoKltpdGVyKHBhcnRzKV0qMik6CisgICAgICAgICAgICBzZWxmLl9hcHBlbmRfY2h1bmsoZndzLCBwYXJ0KQorCisgICAgZGVmIF9hcHBlbmRfY2h1bmsoc2VsZiwgZndzLCBzdHJpbmcpOgorICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChmd3MsIHN0cmluZykKKyAgICAgICAgaWYgbGVuKHNlbGYuX2N1cnJlbnRfbGluZSkgPiBzZWxmLl9tYXhsZW46CisgICAgICAgICAgICAjIEZpbmQgdGhlIGJlc3Qgc3BsaXQgcG9pbnQsIHdvcmtpbmcgYmFja3dhcmQgZnJvbSB0aGUgZW5kLgorICAgICAgICAgICAgIyBUaGVyZSBtaWdodCBiZSBub25lLCBvbiBhIGxvbmcgZmlyc3QgbGluZS4KKyAgICAgICAgICAgIGZvciBjaCBpbiBzZWxmLl9zcGxpdGNoYXJzOgorICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNlbGYuX2N1cnJlbnRfbGluZS5wYXJ0X2NvdW50KCktMSwgMCwgLTEpOgorICAgICAgICAgICAgICAgICAgICBpZiBjaC5pc3NwYWNlKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBmd3MgPSBzZWxmLl9jdXJyZW50X2xpbmVbaV1bMF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZ3cyBhbmQgZndzWzBdPT1jaDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBwcmV2cGFydCA9IHNlbGYuX2N1cnJlbnRfbGluZVtpLTFdWzFdCisgICAgICAgICAgICAgICAgICAgIGlmIHByZXZwYXJ0IGFuZCBwcmV2cGFydFstMV09PWNoOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEl0IGRvZXNuJ3QgZml0LCBidXQgd2UncmUgZG9uZS4gIEJlZm9yZSBwdXNoaW5nIGEgbmV3Ci0gICAgICAgICAgICAgICAgICAgICMgbGluZSwgd2F0Y2ggb3V0IGZvciB0aGUgY3VycmVudCBsaW5lIGNvbnRhaW5pbmcgb25seQotICAgICAgICAgICAgICAgICAgICAjIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucG9wKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fY3VycmVudF9saW5lLmlzX29ubHl3cygpIGFuZCBob2xkaW5nLmlzX29ubHl3cygpOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBzdGFydCBhIG5ldyBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgaG9sZGluZy5wdXNoKHBhcnQpCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChzdHIoaG9sZGluZykpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzLmFwcGVuZChzdHIoc2VsZi5fY3VycmVudF9saW5lKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgcGFydCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnJlc2V0KCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQocGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5yZXNldChzdHIoaG9sZGluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBlbGlmIG5vdCBuZXh0cGFydDoKLSAgICAgICAgICAgICAgICAjIFRoZXJlIG11c3QgYmUgc29tZSB0cmFpbGluZyBvciBkdXBsaWNhdGVkIHNwbGl0IGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugd2UKLSAgICAgICAgICAgICAgICAjIGZvdW5kIGEgc3BsaXQgY2hhcmFjdGVyIGJ1dCBubyBuZXh0IHBhcnQuICBJbiB0aGlzIGNhc2Ugd2UKLSAgICAgICAgICAgICAgICAjIG11c3QgdHJlYXQgdGhlIHRoaW5nIHRvIGZpdCBhcyB0aGUgcGFydCArIHNwbGl0cGFydCBiZWNhdXNlCi0gICAgICAgICAgICAgICAgIyBpZiBzcGxpdHBhcnQgaXMgd2hpdGVzcGFjZSBpdCdzIG5vdCBhbGxvd2VkIHRvIGJlIHRoZSBvbmx5Ci0gICAgICAgICAgICAgICAgIyB0aGluZyBvbiB0aGUgbGluZSwgYW5kIGlmIGl0J3Mgbm90IHdoaXRlc3BhY2Ugd2UgbXVzdCBzcGxpdAotICAgICAgICAgICAgICAgICMgYWZ0ZXIgdGhlIHN5bnRhY3RpYyBicmVhay4KLSAgICAgICAgICAgICAgICBob2xkaW5nX3ByZWxlbiA9IGxlbihob2xkaW5nKQotICAgICAgICAgICAgICAgIGhvbGRpbmcucHVzaChwYXJ0ICsgc3BsaXRwYXJ0KQotICAgICAgICAgICAgICAgIGlmIGxlbihob2xkaW5nKSArIGxlbihzZWxmLl9jdXJyZW50X2xpbmUpIDw9IHNlbGYuX21heGxlbjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goc3RyKGhvbGRpbmcpKQotICAgICAgICAgICAgICAgIGVsaWYgaG9sZGluZ19wcmVsZW4gPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIHRoZSBvbmx5IGNodW5rIGxlZnQgc28gaXQgaGFzIHRvIGdvIG9uIHRoZQotICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goc3RyKGhvbGRpbmcpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNhdmVfcGFydCA9IGhvbGRpbmcucG9wKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goc3RyKGhvbGRpbmcpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9saW5lcy5hcHBlbmQoc3RyKHNlbGYuX2N1cnJlbnRfbGluZSkpCi0gICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQoc2F2ZV9wYXJ0KQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucmVzZXQoc3RyKGhvbGRpbmcpKQotICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQoKQotICAgICAgICAgICAgZWxpZiBub3QgcGFydDoKLSAgICAgICAgICAgICAgICAjIFdlJ3JlIGxlYWRpbmcgd2l0aCBhIHNwbGl0IGNoYXJhY3Rlci4gIFNlZSBpZiB0aGUgc3BsaXRwYXJ0Ci0gICAgICAgICAgICAgICAgIyBhbmQgbmV4dHBhcnQgZml0cyBvbiB0aGUgY3VycmVudCBsaW5lLgotICAgICAgICAgICAgICAgIGhvbGRpbmcucHVzaChzcGxpdHBhcnQgKyBuZXh0cGFydCkKLSAgICAgICAgICAgICAgICBob2xkaW5nX2xlbiA9IGxlbihob2xkaW5nKQotICAgICAgICAgICAgICAgICMgV2Uga25vdyB3ZSdyZSBub3QgbGVhdmluZyB0aGUgbmV4dHBhcnQgb24gdGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIGhvbGRpbmcucG9wKCkKLSAgICAgICAgICAgICAgICBpZiBob2xkaW5nX2xlbiArIGxlbihzZWxmLl9jdXJyZW50X2xpbmUpIDw9IHNlbGYuX21heGxlbjoKLSAgICAgICAgICAgICAgICAgICAgaG9sZGluZy5wdXNoKHNwbGl0cGFydCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEl0IGRvZXNuJ3QgZml0LiAgU2luY2UgdGhlcmUncyBubyBjdXJyZW50IHBhcnQgcmVhbGx5Ci0gICAgICAgICAgICAgICAgICAgICMgdGhlIGJlc3Qgd2UgY2FuIGRvIGlzIHN0YXJ0IGEgbmV3IGxpbmUgYW5kIHB1c2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICMgc3BsaXQgcGFydCBvbnRvIGl0LgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChzdHIoaG9sZGluZykpCi0gICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQoKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5fY3VycmVudF9saW5lKSA+IDAgYW5kIHNlbGYuX2xpbmVzOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHN0cihzZWxmLl9jdXJyZW50X2xpbmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnJlc2V0KCkKLSAgICAgICAgICAgICAgICAgICAgaG9sZGluZy5wdXNoKHNwbGl0cGFydCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEFsbCB0aHJlZSBwYXJ0cyBhcmUgcHJlc2VudC4gIEZpcnN0IGxldCdzIHNlZSBpZiBhbGwgdGhyZWUKLSAgICAgICAgICAgICAgICAjIHBhcnRzIHdpbGwgZml0IG9uIHRoZSBjdXJyZW50IGxpbmUuICBJZiBzbywgd2UgZG9uJ3QgbmVlZCB0bwotICAgICAgICAgICAgICAgICMgc3BsaXQgaXQuCi0gICAgICAgICAgICAgICAgaG9sZGluZy5wdXNoKHBhcnQgKyBzcGxpdHBhcnQgKyBuZXh0cGFydCkKLSAgICAgICAgICAgICAgICBob2xkaW5nX2xlbiA9IGxlbihob2xkaW5nKQotICAgICAgICAgICAgICAgICMgUG9wIHRoZSBwYXJ0IGJlY2F1c2Ugd2UnbGwgcHVzaCBuZXh0cGFydCBvbiB0aGUgbmV4dAotICAgICAgICAgICAgICAgICMgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGxvb3AuCi0gICAgICAgICAgICAgICAgaG9sZGluZy5wb3AoKQotICAgICAgICAgICAgICAgIGlmIGhvbGRpbmdfbGVuICsgbGVuKHNlbGYuX2N1cnJlbnRfbGluZSkgPD0gc2VsZi5fbWF4bGVuOgotICAgICAgICAgICAgICAgICAgICBob2xkaW5nLnB1c2gocGFydCArIHNwbGl0cGFydCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoZSBlbnRpcmUgdGhpbmcgZG9lc24ndCBmaXQuICBTZWUgaWYgd2UgbmVlZCB0byBzcGxpdAotICAgICAgICAgICAgICAgICAgICAjIGJlZm9yZSBvciBhZnRlciB0aGUgc3BsaXQgY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgaWYgc3BsaXRwYXJ0Lmlzc3BhY2UoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgU3BsaXQgYmVmb3JlIHdoaXRlc3BhY2UuICBSZW1lbWJlciB0aGF0IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgIyB3aGl0ZXNwYWNlIGJlY29tZXMgdGhlIGNvbnRpbnVhdGlvbiB3aGl0ZXNwYWNlIG9mCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBuZXh0IGxpbmUgc28gaXQgZ29lcyB0byBjdXJyZW50X2xpbmUgbm90IGhvbGRpbmcuCi0gICAgICAgICAgICAgICAgICAgICAgICBob2xkaW5nLnB1c2gocGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5wdXNoKHN0cihob2xkaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHN0cihzZWxmLl9jdXJyZW50X2xpbmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnJlc2V0KHNwbGl0cGFydCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgU3BsaXQgYWZ0ZXIgbm9uLXdoaXRlc3BhY2UuICBUaGUgY29udGludWF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAjIHdoaXRlc3BhY2UgY29tZXMgZnJvbSB0aGUgaW5zdGFuY2UgdmFyaWFibGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBob2xkaW5nLnB1c2gocGFydCArIHNwbGl0cGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5wdXNoKHN0cihob2xkaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvbGRpbmcucmVzZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHN0cihzZWxmLl9jdXJyZW50X2xpbmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmV4dHBhcnRbMF0uaXNzcGFjZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5yZXNldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5yZXNldChzZWxmLl9jb250aW51YXRpb25fd3MpCi0gICAgICAgICMgR2V0IHRoZSBsYXN0IG9mIHRoZSBob2xkaW5nIHBhcnQKLSAgICAgICAgc2VsZi5fY3VycmVudF9saW5lLnB1c2goc3RyKGhvbGRpbmcpKQorICAgICAgICAgICAgICAgIGZ3cywgcGFydCA9IHNlbGYuX2N1cnJlbnRfbGluZS5wb3AoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2N1cnJlbnRfbGluZS5faW5pdGlhbF9zaXplID4gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVyZSB3aWxsIGJlIGEgaGVhZGVyLCBzbyBsZWF2ZSBpdCBvbiBhIGxpbmUgYnkgaXRzZWxmLgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZndzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCB1c2UgY29udGludWF0aW9uX3dzIGhlcmUgYmVjYXVzZSB0aGUgd2hpdGVzcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBhZnRlciBhIGhlYWRlciBzaG91bGQgYWx3YXlzIGJlIGEgc3BhY2UuCisgICAgICAgICAgICAgICAgICAgICAgICBmd3MgPSAnICcKKyAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2xpbmUucHVzaChmd3MsIHBhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICByZW1haW5kZXIgPSBzZWxmLl9jdXJyZW50X2xpbmUucG9wX2Zyb20oaSkKKyAgICAgICAgICAgIHNlbGYuX2xpbmVzLmFwcGVuZChzdHIoc2VsZi5fY3VycmVudF9saW5lKSkKKyAgICAgICAgICAgIHNlbGYuX2N1cnJlbnRfbGluZS5yZXNldChyZW1haW5kZXIpCiAKIAotDAotZGVmIF9zcGxpdGVyYXRvcihjaGFyYWN0ZXIsIHN0cmluZyk6Ci0gICAgcGFydHMgPSBsaXN0KHJldmVyc2VkKHJlLnNwbGl0KCcoJXMpJyAlIGNoYXJhY3Rlciwgc3RyaW5nKSkpCi0gICAgd2hpbGUgcGFydHM6Ci0gICAgICAgIHBhcnQgPSBwYXJ0cy5wb3AoKQotICAgICAgICBzcGxpdHBhcnRzID0gKHBhcnRzLnBvcCgpIGlmIHBhcnRzIGVsc2UgTm9uZSkKLSAgICAgICAgbmV4dHBhcnQgPSAocGFydHMucG9wKCkgaWYgcGFydHMgZWxzZSBOb25lKQotICAgICAgICB5aWVsZCAocGFydCwgc3BsaXRwYXJ0cywgbmV4dHBhcnQpCi0gICAgICAgIGlmIG5leHRwYXJ0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcGFydHMuYXBwZW5kKG5leHRwYXJ0KQorY2xhc3MgX0FjY3VtdWxhdG9yKGxpc3QpOgogCi0KLWNsYXNzIF9BY2N1bXVsYXRvcjoKICAgICBkZWYgX19pbml0X18oc2VsZiwgaW5pdGlhbF9zaXplPTApOgogICAgICAgICBzZWxmLl9pbml0aWFsX3NpemUgPSBpbml0aWFsX3NpemUKLSAgICAgICAgc2VsZi5fY3VycmVudCA9IFtdCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQogCi0gICAgZGVmIHB1c2goc2VsZiwgc3RyaW5nKToKLSAgICAgICAgc2VsZi5fY3VycmVudC5hcHBlbmQoc3RyaW5nKQorICAgIGRlZiBwdXNoKHNlbGYsIGZ3cywgc3RyaW5nKToKKyAgICAgICAgc2VsZi5hcHBlbmQoKGZ3cywgc3RyaW5nKSkKKworICAgIGRlZiBwb3BfZnJvbShzZWxmLCBpPTApOgorICAgICAgICBwb3BwZWQgPSBzZWxmW2k6XQorICAgICAgICBzZWxmW2k6XSA9IFtdCisgICAgICAgIHJldHVybiBwb3BwZWQKIAogICAgIGRlZiBwb3Aoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9jdXJyZW50OgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIHNlbGYuX2N1cnJlbnQucG9wKCkKKyAgICAgICAgaWYgc2VsZi5wYXJ0X2NvdW50KCk9PTA6CisgICAgICAgICAgICByZXR1cm4gKCcnLCAnJykKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkucG9wKCkKIAogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc3VtKCgoMSBpZiBzdHJpbmcgaXMgTm9uZSBlbHNlIGxlbihzdHJpbmcpKQotICAgICAgICAgICAgICAgICAgICBmb3Igc3RyaW5nIGluIHNlbGYuX2N1cnJlbnQpLAorICAgICAgICByZXR1cm4gc3VtKChsZW4oZndzKStsZW4ocGFydCkgZm9yIGZ3cywgcGFydCBpbiBzZWxmKSwKICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbml0aWFsX3NpemUpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fY3VycmVudCBhbmQgc2VsZi5fY3VycmVudFstMV0gaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX2N1cnJlbnQucG9wKCkKLSAgICAgICAgcmV0dXJuIEVNUFRZU1RSSU5HLmpvaW4oKCcgJyBpZiBzdHJpbmcgaXMgTm9uZSBlbHNlIHN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN0cmluZyBpbiBzZWxmLl9jdXJyZW50KQorICAgICAgICByZXR1cm4gRU1QVFlTVFJJTkcuam9pbigoRU1QVFlTVFJJTkcuam9pbigoZndzLCBwYXJ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZ3cywgcGFydCBpbiBzZWxmKSkKIAotICAgIGRlZiByZXNldChzZWxmLCBzdHJpbmc9Tm9uZSk6Ci0gICAgICAgIHNlbGYuX2N1cnJlbnQgPSBbXQorICAgIGRlZiByZXNldChzZWxmLCBzdGFydHZhbD1Ob25lKToKKyAgICAgICAgaWYgc3RhcnR2YWwgaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXJ0dmFsID0gW10KKyAgICAgICAgc2VsZls6XSA9IHN0YXJ0dmFsCiAgICAgICAgIHNlbGYuX2luaXRpYWxfc2l6ZSA9IDAKLSAgICAgICAgaWYgc3RyaW5nIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5wdXNoKHN0cmluZykKIAogICAgIGRlZiBpc19vbmx5d3Moc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gMCBvciBzdHIoc2VsZikuaXNzcGFjZSgpCisgICAgICAgIHJldHVybiBzZWxmLl9pbml0aWFsX3NpemU9PTAgYW5kIChub3Qgc2VsZiBvciBzdHIoc2VsZikuaXNzcGFjZSgpKQorCisgICAgZGVmIHBhcnRfY291bnQoc2VsZik6CisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbGVuX18oKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21lc3NhZ2UucHkgYi9MaWIvZW1haWwvbWVzc2FnZS5weQppbmRleCBkMzBmMTA5Li45MjI2MTdhIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWVzc2FnZS5weQorKysgYi9MaWIvZW1haWwvbWVzc2FnZS5weQpAQCAtMTYsNyArMTYsOSBAQAogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwogZnJvbSBlbWFpbCBpbXBvcnQgdXRpbHMKIGZyb20gZW1haWwgaW1wb3J0IGVycm9ycwotZnJvbSBlbWFpbC5jaGFyc2V0IGltcG9ydCBDaGFyc2V0Citmcm9tIGVtYWlsIGltcG9ydCBoZWFkZXIKK2Zyb20gZW1haWwgaW1wb3J0IGNoYXJzZXQgYXMgX2NoYXJzZXQKK0NoYXJzZXQgPSBfY2hhcnNldC5DaGFyc2V0CiAKIFNFTUlTUEFDRSA9ICc7ICcKIApAQCAtMjQsMTQgKzI2LDMxIEBACiAjIGV4aXN0ZW5jZSBvZiB3aGljaCBmb3JjZSBxdW90aW5nIG9mIHRoZSBwYXJhbWV0ZXIgdmFsdWUuCiB0c3BlY2lhbHMgPSByZS5jb21waWxlKHInWyBcKFwpPD5ALDs6XFwiL1xbXF1cPz1dJykKIAorIyBIb3cgdG8gZmlndXJlIG91dCBpZiB3ZSBhcmUgcHJvY2Vzc2luZyBzdHJpbmdzIHRoYXQgY29tZSBmcm9tIGEgYnl0ZQorIyBzb3VyY2Ugd2l0aCB1bmRlY29kYWJsZSBjaGFyYWN0ZXJzLgorX2hhc19zdXJyb2dhdGVzID0gcmUuY29tcGlsZSgKKyAgICAnKFteXHVkODAwLVx1ZGJmZl18XEEpW1x1ZGMwMC1cdWRmZmZdKFteXHVkYzAwLVx1ZGZmZl18XFopJykuc2VhcmNoCisKIAogIyBIZWxwZXIgZnVuY3Rpb25zCitkZWYgX3Nhbml0aXplX2hlYWRlcihuYW1lLCB2YWx1ZSk6CisgICAgIyBJZiB0aGUgaGVhZGVyIHZhbHVlIGNvbnRhaW5zIHN1cnJvZ2F0ZXMsIHJldHVybiBhIEhlYWRlciB1c2luZworICAgICMgdGhlIHVua25vd24tOGJpdCBjaGFyc2V0IHRvIGVuY29kZSB0aGUgYnl0ZXMgYXMgZW5jb2RlZCB3b3Jkcy4KKyAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgIyBBc3N1bWUgaXQgaXMgYWxyZWFkeSBhIGhlYWRlciBvYmplY3QKKyAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgaWYgX2hhc19zdXJyb2dhdGVzKHZhbHVlKToKKyAgICAgICAgcmV0dXJuIGhlYWRlci5IZWFkZXIodmFsdWUsIGNoYXJzZXQ9X2NoYXJzZXQuVU5LTk9XTjhCSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9uYW1lPW5hbWUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKIGRlZiBfc3BsaXRwYXJhbShwYXJhbSk6CiAgICAgIyBTcGxpdCBoZWFkZXIgcGFyYW1ldGVycy4gIEJBVzogdGhpcyBtYXkgYmUgdG9vIHNpbXBsZS4gIEl0IGlzbid0CiAgICAgIyBzdHJpY3RseSBSRkMgMjA0NSAoc2VjdGlvbiA1LjEpIGNvbXBsaWFudCwgYnV0IGl0IGNhdGNoZXMgbW9zdCBoZWFkZXJzCi0gICAgIyBmb3VuZCBpbiB0aGUgd2lsZC4gIFdlIG1heSBldmVudHVhbGx5IG5lZWQgYSBmdWxsIGZsZWRnZWQgcGFyc2VyCi0gICAgIyBldmVudHVhbGx5LgotICAgIGEsIHNlcCwgYiA9IHBhcmFtLnBhcnRpdGlvbignOycpCisgICAgIyBmb3VuZCBpbiB0aGUgd2lsZC4gIFdlIG1heSBldmVudHVhbGx5IG5lZWQgYSBmdWxsIGZsZWRnZWQgcGFyc2VyLgorICAgICMgUkRNOiB3ZSBtaWdodCBoYXZlIGEgSGVhZGVyIGhlcmU7IGZvciBub3cganVzdCBzdHJpbmdpZnkgaXQuCisgICAgYSwgc2VwLCBiID0gc3RyKHBhcmFtKS5wYXJ0aXRpb24oJzsnKQogICAgIGlmIG5vdCBzZXA6CiAgICAgICAgIHJldHVybiBhLnN0cmlwKCksIE5vbmUKICAgICByZXR1cm4gYS5zdHJpcCgpLCBiLnN0cmlwKCkKQEAgLTQ4LDE3ICs2NywxOSBAQAogICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lIGFuZCBsZW4odmFsdWUpID4gMDoKICAgICAgICAgIyBBIHR1cGxlIGlzIHVzZWQgZm9yIFJGQyAyMjMxIGVuY29kZWQgcGFyYW1ldGVyIHZhbHVlcyB3aGVyZSBpdGVtcwogICAgICAgICAjIGFyZSAoY2hhcnNldCwgbGFuZ3VhZ2UsIHZhbHVlKS4gIGNoYXJzZXQgaXMgYSBzdHJpbmcsIG5vdCBhIENoYXJzZXQKLSAgICAgICAgIyBpbnN0YW5jZS4KKyAgICAgICAgIyBpbnN0YW5jZS4gIFJGQyAyMjMxIGVuY29kZWQgdmFsdWVzIGFyZSBuZXZlciBxdW90ZWQsIHBlciBSRkMuCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKICAgICAgICAgICAgICMgRW5jb2RlIGFzIHBlciBSRkMgMjIzMQogICAgICAgICAgICAgcGFyYW0gKz0gJyonCiAgICAgICAgICAgICB2YWx1ZSA9IHV0aWxzLmVuY29kZV9yZmMyMjMxKHZhbHVlWzJdLCB2YWx1ZVswXSwgdmFsdWVbMV0pCisgICAgICAgICAgICByZXR1cm4gJyVzPSVzJyAlIChwYXJhbSwgdmFsdWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdmFsdWUuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHBhcmFtICs9ICcqJwogICAgICAgICAgICAgICAgIHZhbHVlID0gdXRpbHMuZW5jb2RlX3JmYzIyMzEodmFsdWUsICd1dGYtOCcsICcnKQorICAgICAgICAgICAgICAgIHJldHVybiAnJXM9JXMnICUgKHBhcmFtLCB2YWx1ZSkKICAgICAgICAgIyBCQVc6IFBsZWFzZSBjaGVjayB0aGlzLiAgSSB0aGluayB0aGF0IGlmIHF1b3RlIGlzIHNldCBpdCBzaG91bGQKICAgICAgICAgIyBmb3JjZSBxdW90aW5nIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4KICAgICAgICAgaWYgcXVvdGUgb3IgdHNwZWNpYWxzLnNlYXJjaCh2YWx1ZSk6CkBAIC02OSw2ICs5MCw4IEBACiAgICAgICAgIHJldHVybiBwYXJhbQogCiBkZWYgX3BhcnNlcGFyYW0ocyk6CisgICAgIyBSRE0gVGhpcyBtaWdodCBiZSBhIEhlYWRlciwgc28gZm9yIG5vdyBzdHJpbmdpZnkgaXQuCisgICAgcyA9ICc7JyArIHN0cihzKQogICAgIHBsaXN0ID0gW10KICAgICB3aGlsZSBzWzoxXSA9PSAnOyc6CiAgICAgICAgIHMgPSBzWzE6XQpAQCAtMTkzLDQzICsyMTYsNzMgQEAKICAgICAgICAgSWYgdGhlIG1lc3NhZ2UgaXMgYSBtdWx0aXBhcnQgYW5kIHRoZSBkZWNvZGUgZmxhZyBpcyBUcnVlLCB0aGVuIE5vbmUKICAgICAgICAgaXMgcmV0dXJuZWQuCiAgICAgICAgICIiIgotICAgICAgICBpZiBpIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXlsb2FkID0gc2VsZi5fcGF5bG9hZAotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuX3BheWxvYWQsIGxpc3QpOgorICAgICAgICAjIEhlcmUgaXMgdGhlIGxvZ2ljIHRhYmxlIGZvciB0aGlzIGNvZGUsIGJhc2VkIG9uIHRoZSBlbWFpbDUuMC4wIGNvZGU6CisgICAgICAgICMgICBpICAgICBkZWNvZGUgIGlzX211bHRpcGFydCAgcmVzdWx0CisgICAgICAgICMgLS0tLS0tICAtLS0tLS0gIC0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgIE5vbmUgICBUcnVlICAgIFRydWUgICAgICAgICAgTm9uZQorICAgICAgICAjICAgaSAgICAgVHJ1ZSAgICBUcnVlICAgICAgICAgIE5vbmUKKyAgICAgICAgIyAgTm9uZSAgIEZhbHNlICAgVHJ1ZSAgICAgICAgICBfcGF5bG9hZCAoYSBsaXN0KQorICAgICAgICAjICAgaSAgICAgRmFsc2UgICBUcnVlICAgICAgICAgIF9wYXlsb2FkIGVsZW1lbnQgaSAoYSBNZXNzYWdlKQorICAgICAgICAjICAgaSAgICAgRmFsc2UgICBGYWxzZSAgICAgICAgIGVycm9yIChub3QgYSBsaXN0KQorICAgICAgICAjICAgaSAgICAgVHJ1ZSAgICBGYWxzZSAgICAgICAgIGVycm9yIChub3QgYSBsaXN0KQorICAgICAgICAjICBOb25lICAgRmFsc2UgICBGYWxzZSAgICAgICAgIF9wYXlsb2FkCisgICAgICAgICMgIE5vbmUgICBUcnVlICAgIEZhbHNlICAgICAgICAgX3BheWxvYWQgZGVjb2RlZCAoYnl0ZXMpCisgICAgICAgICMgTm90ZSB0aGF0IEJhcnJ5IHBsYW5uZWQgdG8gZmFjdG9yIG91dCB0aGUgJ2RlY29kZScgY2FzZSwgYnV0IHRoYXQKKyAgICAgICAgIyBpc24ndCBzbyBlYXN5IG5vdyB0aGF0IHdlIGhhbmRsZSB0aGUgOCBiaXQgZGF0YSwgd2hpY2ggbmVlZHMgdG8gYmUKKyAgICAgICAgIyBjb252ZXJ0ZWQgaW4gYm90aCB0aGUgZGVjb2RlIGFuZCBub24tZGVjb2RlIHBhdGguCisgICAgICAgIGlmIHNlbGYuaXNfbXVsdGlwYXJ0KCk6CisgICAgICAgICAgICBpZiBkZWNvZGU6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGlmIGkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGF5bG9hZAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGF5bG9hZFtpXQorICAgICAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBVc2UgaXNpbnN0YW5jZSBhbmQgdGhpcyBlcnJvciBtZXNzYWdlCisgICAgICAgICMgaW5zdGVhZCBvZiB0aGUgbW9yZSBsb2dpY2FsIGlzX211bHRpcGFydCB0ZXN0LgorICAgICAgICBpZiBpIGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShzZWxmLl9wYXlsb2FkLCBsaXN0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgbGlzdCwgZ290ICVzJyAlIHR5cGUoc2VsZi5fcGF5bG9hZCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXlsb2FkID0gc2VsZi5fcGF5bG9hZFtpXQorICAgICAgICBwYXlsb2FkID0gc2VsZi5fcGF5bG9hZAorICAgICAgICAjIGN0ZSBtaWdodCBiZSBhIEhlYWRlciwgc28gZm9yIG5vdyBzdHJpbmdpZnkgaXQuCisgICAgICAgIGN0ZSA9IHN0cihzZWxmLmdldCgnY29udGVudC10cmFuc2Zlci1lbmNvZGluZycsICcnKSkubG93ZXIoKQorICAgICAgICAjIHBheWxvYWQgbWF5IGJlIGJ5dGVzIGhlcmUuCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGF5bG9hZCwgc3RyKToKKyAgICAgICAgICAgIGlmIF9oYXNfc3Vycm9nYXRlcyhwYXlsb2FkKToKKyAgICAgICAgICAgICAgICBicGF5bG9hZCA9IHBheWxvYWQuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICAgICAgICAgIGlmIG5vdCBkZWNvZGU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQgPSBicGF5bG9hZC5kZWNvZGUoc2VsZi5nZXRfcGFyYW0oJ2NoYXJzZXQnLCAnYXNjaWknKSwgJ3JlcGxhY2UnKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gYnBheWxvYWQuZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJykKKyAgICAgICAgICAgIGVsaWYgZGVjb2RlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYnBheWxvYWQgPSBwYXlsb2FkLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyB3b24ndCBoYXBwZW4gZm9yIFJGQyBjb21wbGlhbnQgbWVzc2FnZXMgKG1lc3NhZ2VzCisgICAgICAgICAgICAgICAgICAgICMgY29udGFpbmluZyBvbmx5IEFTQ0lJIGNvZGVwb2ludHMgaW4gdGhlIHVuaWNvZGUgaW5wdXQpLgorICAgICAgICAgICAgICAgICAgICAjIElmIGl0IGRvZXMgaGFwcGVuLCB0dXJuIHRoZSBzdHJpbmcgaW50byBieXRlcyBpbiBhIHdheQorICAgICAgICAgICAgICAgICAgICAjIGd1YXJhbnRlZWQgbm90IHRvIGZhaWwuCisgICAgICAgICAgICAgICAgICAgIGJwYXlsb2FkID0gcGF5bG9hZC5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpCiAgICAgICAgIGlmIG5vdCBkZWNvZGU6CiAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZAotICAgICAgICAjIERlY29kZWQgcGF5bG9hZHMgYWx3YXlzIHJldHVybiBieXRlcy4gIFhYWCBzcGxpdCB0aGlzIHBhcnQgb3V0IGludG8KLSAgICAgICAgIyBhIG5ldyBtZXRob2QgY2FsbGVkIC5nZXRfZGVjb2RlZF9wYXlsb2FkKCkuCi0gICAgICAgIGlmIHNlbGYuaXNfbXVsdGlwYXJ0KCk6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBjdGUgPSBzZWxmLmdldCgnY29udGVudC10cmFuc2Zlci1lbmNvZGluZycsICcnKS5sb3dlcigpCiAgICAgICAgIGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6Ci0gICAgICAgICAgICByZXR1cm4gdXRpbHMuX3FkZWNvZGUocGF5bG9hZCkKKyAgICAgICAgICAgIHJldHVybiB1dGlscy5fcWRlY29kZShicGF5bG9hZCkKICAgICAgICAgZWxpZiBjdGUgPT0gJ2Jhc2U2NCc6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXlsb2FkLCBzdHIpOgotICAgICAgICAgICAgICAgICAgICBwYXlsb2FkID0gcGF5bG9hZC5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRkZWNvZGUocGF5bG9hZCkKLSAgICAgICAgICAgICAgICAjcmV0dXJuIHV0aWxzLl9iZGVjb2RlKHBheWxvYWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U2NC5iNjRkZWNvZGUoYnBheWxvYWQpCiAgICAgICAgICAgICBleGNlcHQgYmluYXNjaWkuRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBJbmNvcnJlY3QgcGFkZGluZwotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICByZXR1cm4gYnBheWxvYWQKICAgICAgICAgZWxpZiBjdGUgaW4gKCd4LXV1ZW5jb2RlJywgJ3V1ZW5jb2RlJywgJ3V1ZScsICd4LXV1ZScpOgotICAgICAgICAgICAgaW5fZmlsZSA9IEJ5dGVzSU8ocGF5bG9hZC5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpKQorICAgICAgICAgICAgaW5fZmlsZSA9IEJ5dGVzSU8oYnBheWxvYWQpCiAgICAgICAgICAgICBvdXRfZmlsZSA9IEJ5dGVzSU8oKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHV1LmRlY29kZShpbl9maWxlLCBvdXRfZmlsZSwgcXVpZXQ9VHJ1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3V0X2ZpbGUuZ2V0dmFsdWUoKQogICAgICAgICAgICAgZXhjZXB0IHV1LkVycm9yOgogICAgICAgICAgICAgICAgICMgU29tZSBkZWNvZGluZyBwcm9ibGVtCi0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzPyAgV2UgY2FuJ3QgdXNlIHRoZSBieXRlcwotICAgICAgICAjIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgICAgIHJldHVybiBicGF5bG9hZAogICAgICAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIHN0cik6Ci0gICAgICAgICAgICByZXR1cm4gcGF5bG9hZC5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpCisgICAgICAgICAgICByZXR1cm4gYnBheWxvYWQKICAgICAgICAgcmV0dXJuIHBheWxvYWQKIAogICAgIGRlZiBzZXRfcGF5bG9hZChzZWxmLCBwYXlsb2FkLCBjaGFyc2V0PU5vbmUpOgpAQCAtMzQ4LDcgKzQwMSw3IEBACiAgICAgICAgIEFueSBmaWVsZHMgZGVsZXRlZCBhbmQgcmUtaW5zZXJ0ZWQgYXJlIGFsd2F5cyBhcHBlbmRlZCB0byB0aGUgaGVhZGVyCiAgICAgICAgIGxpc3QuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gW3YgZm9yIGssIHYgaW4gc2VsZi5faGVhZGVyc10KKyAgICAgICAgcmV0dXJuIFtfc2FuaXRpemVfaGVhZGVyKGssIHYpIGZvciBrLCB2IGluIHNlbGYuX2hlYWRlcnNdCiAKICAgICBkZWYgaXRlbXMoc2VsZik6CiAgICAgICAgICIiIkdldCBhbGwgdGhlIG1lc3NhZ2UncyBoZWFkZXIgZmllbGRzIGFuZCB2YWx1ZXMuCkBAIC0zNTgsNyArNDExLDcgQEAKICAgICAgICAgQW55IGZpZWxkcyBkZWxldGVkIGFuZCByZS1pbnNlcnRlZCBhcmUgYWx3YXlzIGFwcGVuZGVkIHRvIHRoZSBoZWFkZXIKICAgICAgICAgbGlzdC4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJzWzpdCisgICAgICAgIHJldHVybiBbKGssIF9zYW5pdGl6ZV9oZWFkZXIoaywgdikpIGZvciBrLCB2IGluIHNlbGYuX2hlYWRlcnNdCiAKICAgICBkZWYgZ2V0KHNlbGYsIG5hbWUsIGZhaWxvYmo9Tm9uZSk6CiAgICAgICAgICIiIkdldCBhIGhlYWRlciB2YWx1ZS4KQEAgLTM2OSw3ICs0MjIsNyBAQAogICAgICAgICBuYW1lID0gbmFtZS5sb3dlcigpCiAgICAgICAgIGZvciBrLCB2IGluIHNlbGYuX2hlYWRlcnM6CiAgICAgICAgICAgICBpZiBrLmxvd2VyKCkgPT0gbmFtZToKLSAgICAgICAgICAgICAgICByZXR1cm4gdgorICAgICAgICAgICAgICAgIHJldHVybiBfc2FuaXRpemVfaGVhZGVyKGssIHYpCiAgICAgICAgIHJldHVybiBmYWlsb2JqCiAKICAgICAjCkBAIC0zODksNyArNDQyLDcgQEAKICAgICAgICAgbmFtZSA9IG5hbWUubG93ZXIoKQogICAgICAgICBmb3IgaywgdiBpbiBzZWxmLl9oZWFkZXJzOgogICAgICAgICAgICAgaWYgay5sb3dlcigpID09IG5hbWU6Ci0gICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCh2KQorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoX3Nhbml0aXplX2hlYWRlcihrLCB2KSkKICAgICAgICAgaWYgbm90IHZhbHVlczoKICAgICAgICAgICAgIHJldHVybiBmYWlsb2JqCiAgICAgICAgIHJldHVybiB2YWx1ZXMKQEAgLTUxMSw3ICs1NjQsNyBAQAogICAgICAgICBpZiB2YWx1ZSBpcyBtaXNzaW5nOgogICAgICAgICAgICAgcmV0dXJuIGZhaWxvYmoKICAgICAgICAgcGFyYW1zID0gW10KLSAgICAgICAgZm9yIHAgaW4gX3BhcnNlcGFyYW0oJzsnICsgdmFsdWUpOgorICAgICAgICBmb3IgcCBpbiBfcGFyc2VwYXJhbSh2YWx1ZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbmFtZSwgdmFsID0gcC5zcGxpdCgnPScsIDEpCiAgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3RyaXAoKQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BhcnNlci5weSBiL0xpYi9lbWFpbC9wYXJzZXIucHkKaW5kZXggMDYwMTRlMi4uNmNhYWZmNSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BhcnNlci5weQorKysgYi9MaWIvZW1haWwvcGFyc2VyLnB5CkBAIC03LDcgKzcsNyBAQAogX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlciddCiAKIGltcG9ydCB3YXJuaW5ncwotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBUZXh0SU9XcmFwcGVyCiAKIGZyb20gZW1haWwuZmVlZHBhcnNlciBpbXBvcnQgRmVlZFBhcnNlcgogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCkBAIC04OSwzICs4OSw0OCBAQAogCiAgICAgZGVmIHBhcnNlc3RyKHNlbGYsIHRleHQsIGhlYWRlcnNvbmx5PVRydWUpOgogICAgICAgICByZXR1cm4gUGFyc2VyLnBhcnNlc3RyKHNlbGYsIHRleHQsIFRydWUpCisKKwwKK2NsYXNzIEJ5dGVzUGFyc2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgIiIiUGFyc2VyIG9mIGJpbmFyeSBSRkMgMjgyMiBhbmQgTUlNRSBlbWFpbCBtZXNzYWdlcy4KKworICAgICAgICBDcmVhdGVzIGFuIGluLW1lbW9yeSBvYmplY3QgdHJlZSByZXByZXNlbnRpbmcgdGhlIGVtYWlsIG1lc3NhZ2UsIHdoaWNoCisgICAgICAgIGNhbiB0aGVuIGJlIG1hbmlwdWxhdGVkIGFuZCB0dXJuZWQgb3ZlciB0byBhIEdlbmVyYXRvciB0byByZXR1cm4gdGhlCisgICAgICAgIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1lc3NhZ2UuCisKKyAgICAgICAgVGhlIGlucHV0IG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgYmxvY2sgb2YgUkZDIDI4MjIgaGVhZGVycyBhbmQgaGVhZGVyCisgICAgICAgIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWVkZWQgYnkgYSBgVW5peC1mcm9tJyBoZWFkZXIuICBUaGUKKyAgICAgICAgaGVhZGVyIGJsb2NrIGlzIHRlcm1pbmF0ZWQgZWl0aGVyIGJ5IHRoZSBlbmQgb2YgdGhlIGlucHV0IG9yIGJ5IGEKKyAgICAgICAgYmxhbmsgbGluZS4KKworICAgICAgICBfY2xhc3MgaXMgdGhlIGNsYXNzIHRvIGluc3RhbnRpYXRlIGZvciBuZXcgbWVzc2FnZSBvYmplY3RzIHdoZW4gdGhleQorICAgICAgICBtdXN0IGJlIGNyZWF0ZWQuICBUaGlzIGNsYXNzIG11c3QgaGF2ZSBhIGNvbnN0cnVjdG9yIHRoYXQgY2FuIHRha2UKKyAgICAgICAgemVybyBhcmd1bWVudHMuICBEZWZhdWx0IGlzIE1lc3NhZ2UuTWVzc2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucGFyc2VyID0gUGFyc2VyKCphcmdzLCAqKmt3KQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZwLCBoZWFkZXJzb25seT1GYWxzZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG1lc3NhZ2Ugc3RydWN0dXJlIGZyb20gdGhlIGRhdGEgaW4gYSBiaW5hcnkgZmlsZS4KKworICAgICAgICBSZWFkcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgZmlsZSBhbmQgcmV0dXJucyB0aGUgcm9vdCBvZiB0aGUgbWVzc2FnZQorICAgICAgICBzdHJ1Y3R1cmUuICBPcHRpb25hbCBoZWFkZXJzb25seSBpcyBhIGZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIHRvIHN0b3AKKyAgICAgICAgcGFyc2luZyBhZnRlciByZWFkaW5nIHRoZSBoZWFkZXJzIG9yIG5vdC4gIFRoZSBkZWZhdWx0IGlzIEZhbHNlLAorICAgICAgICBtZWFuaW5nIGl0IHBhcnNlcyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorICAgICAgICAiIiIKKyAgICAgICAgZnAgPSBUZXh0SU9XcmFwcGVyKGZwLCBlbmNvZGluZz0nYXNjaWknLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIHdpdGggZnA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZXIucGFyc2UoZnAsIGhlYWRlcnNvbmx5KQorCisKKyAgICBkZWYgcGFyc2VieXRlcyhzZWxmLCB0ZXh0LCBoZWFkZXJzb25seT1GYWxzZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIG1lc3NhZ2Ugc3RydWN0dXJlIGZyb20gYSBieXRlIHN0cmluZy4KKworICAgICAgICBSZXR1cm5zIHRoZSByb290IG9mIHRoZSBtZXNzYWdlIHN0cnVjdHVyZS4gIE9wdGlvbmFsIGhlYWRlcnNvbmx5IGlzIGEKKyAgICAgICAgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdG8gc3RvcCBwYXJzaW5nIGFmdGVyIHJlYWRpbmcgdGhlIGhlYWRlcnMgb3IKKyAgICAgICAgbm90LiAgVGhlIGRlZmF1bHQgaXMgRmFsc2UsIG1lYW5pbmcgaXQgcGFyc2VzIHRoZSBlbnRpcmUgY29udGVudHMgb2YKKyAgICAgICAgdGhlIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB0ZXh0ID0gdGV4dC5kZWNvZGUoJ0FTQ0lJJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICByZXR1cm4gc2VsZi5wYXJzZXIucGFyc2VzdHIodGV4dCwgaGVhZGVyc29ubHkpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcXVvcHJpbWltZS5weSBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CmluZGV4IGY4ODExNWUuLjc4NjM4ZDUgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CisrKyBiL0xpYi9lbWFpbC9xdW9wcmltaW1lLnB5CkBAIC0xMSw3ICsxMSw3IEBACiBhbGxvd2VkIGluIGVtYWlsIGJvZGllcyBvciBoZWFkZXJzLgogCiBRdW90ZWQtcHJpbnRhYmxlIGlzIHZlcnkgc3BhY2UtaW5lZmZpY2llbnQgZm9yIGVuY29kaW5nIGJpbmFyeSBmaWxlczsgdXNlIHRoZQotZW1haWwuYmFzZTY0TUlNRSBtb2R1bGUgZm9yIHRoYXQgaW5zdGVhZC4KK2VtYWlsLmJhc2U2NG1pbWUgbW9kdWxlIGZvciB0aGF0IGluc3RlYWQuCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byBlbmNvZGUgYW5kIGRlY29kZSBib3RoIGhlYWRlcnMgYW5kIGJvZGllcwogd2l0aCBxdW90ZWQtcHJpbnRhYmxlIGVuY29kaW5nLgpAQCAtMjMsNyArMjMsNyBAQAogVGhpcyBtb2R1bGUgZG9lcyBub3QgZG8gdGhlIGxpbmUgd3JhcHBpbmcgb3IgZW5kLW9mLWxpbmUgY2hhcmFjdGVyCiBjb252ZXJzaW9uIG5lY2Vzc2FyeSBmb3IgcHJvcGVyIGludGVybmF0aW9uYWxpemVkIGhlYWRlcnM7IGl0IG9ubHkKIGRvZXMgZHVtYiBlbmNvZGluZyBhbmQgZGVjb2RpbmcuICBUbyBkZWFsIHdpdGggdGhlIHZhcmlvdXMgbGluZQotd3JhcHBpbmcgaXNzdWVzLCB1c2UgdGhlIGVtYWlsLkhlYWRlciBtb2R1bGUuCit3cmFwcGluZyBpc3N1ZXMsIHVzZSB0aGUgZW1haWwuaGVhZGVyIG1vZHVsZS4KICIiIgogCiBfX2FsbF9fID0gWwpAQCAtMzE2LDcgKzMxNiw3IEBACiAKICAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhcnNlIGEgZnVsbCBNSU1FIGhlYWRlciB2YWx1ZSBlbmNvZGVkIHdpdGgKICAgICBxdW90ZWQtcHJpbnRhYmxlIChsaWtlID0/aXNvLTg4OTUtMT9xP0hlbGxvX1dvcmxkPz0pIC0tIHBsZWFzZSB1c2UKLSAgICB0aGUgaGlnaCBsZXZlbCBlbWFpbC5IZWFkZXIgY2xhc3MgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eS4KKyAgICB0aGUgaGlnaCBsZXZlbCBlbWFpbC5oZWFkZXIgY2xhc3MgZm9yIHRoYXQgZnVuY3Rpb25hbGl0eS4KICAgICAiIiIKICAgICBzID0gcy5yZXBsYWNlKCdfJywgJyAnKQogICAgIHJldHVybiByZS5zdWIocic9W2EtZkEtRjAtOV17Mn0nLCBfdW5xdW90ZV9tYXRjaCwgcywgcmUuQVNDSUkpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQgYi9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18xMC50eHQKaW5kZXggYmQzMGQxMy4uMDc5MDM5NiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMTAudHh0CisrKyBiL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzEwLnR4dApAQCAtMjYsNiArMjYsMTMgQEAKIAogLS1CT1VOREFSWQogQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogQmFzZTY0CisKK1ZHaHBjeUJwY3lCaElFSmhjMlUyTkNCbGJtTnZaR1ZrSUcxbGMzTmhaMlV1Q2c9PQorCisKKy0tQk9VTkRBUlkKK0NvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMSIKIAogVGhpcyBoYXMgbm8gQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogaGVhZGVyLgogCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18yNi50eHQgYi9MaWIvZW1haWwvdGVzdC9kYXRhL21zZ18yNi50eHQKaW5kZXggNmM3MWJjZS4uNThlZmFhOSAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3Rlc3QvZGF0YS9tc2dfMjYudHh0CisrKyBiL0xpYi9lbWFpbC90ZXN0L2RhdGEvbXNnXzI2LnR4dApAQCAtMjQsNyArMjQsOCBAQAogDQogDQogLS0xNjE4NDkyODYwLS0yMDUxMzAxMTkwLS0xMTM4NTM2ODANCi1Db250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3Jpc2NvczsgbmFtZT0iY2xvY2suYm1wLDY5YyI7IHR5cGU9Qk1QOyBsb2FkPSZmZmY2OWM0YjsgZXhlYz0mMzU1ZGQ0ZDE7IGFjY2Vzcz0mMDMNCitDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3Jpc2NvczsgbmFtZT0iY2xvY2suYm1wLDY5YyI7IHR5cGU9Qk1QOw0KKwlsb2FkPSZmZmY2OWM0YjsgZXhlYz0mMzU1ZGQ0ZDE7IGFjY2Vzcz0mMDMNCiBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iY2xvY2suYm1wIg0KIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NA0KIA0KZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsLnB5CmluZGV4IGUwNmM0NjEuLjI4MWE2NWEgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWwucHkKKysrIGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbC5weQpAQCAtMyw2ICszLDcgQEAKICMgZW1haWwgcGFja2FnZSB1bml0IHRlc3RzCiAKIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IGJhc2U2NApAQCAtMTEsNyArMTIsNyBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgdGV4dHdyYXAKIAotZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgY2hhaW4KIAogaW1wb3J0IGVtYWlsCkBAIC0zNSw3ICszNiw3IEBACiBmcm9tIGVtYWlsIGltcG9ydCBiYXNlNjRtaW1lCiBmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdCwgdW5saW5rCiBmcm9tIGVtYWlsLnRlc3QgaW1wb3J0IF9fZmlsZV9fIGFzIGxhbmRtYXJrCiAKIApAQCAtMTkzLDggKzE5NCw4IEBACiAgICAgZGVmIHRlc3RfbWVzc2FnZV9yZmM4MjJfb25seShzZWxmKToKICAgICAgICAgIyBJc3N1ZSA3OTcwOiBtZXNzYWdlL3JmYzgyMiBub3QgaW4gbXVsdGlwYXJ0IHBhcnNlZCBieQogICAgICAgICAjIEhlYWRlclBhcnNlciBjYXVzZWQgYW4gZXhjZXB0aW9uIHdoZW4gZmxhdHRlbmVkLgotICAgICAgICBmcCA9IG9wZW5maWxlKGZpbmRmaWxlKCdtc2dfNDYudHh0JykpCi0gICAgICAgIG1zZ2RhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuZmlsZShmaW5kZmlsZSgnbXNnXzQ2LnR4dCcpKSBhcyBmcDoKKyAgICAgICAgICAgIG1zZ2RhdGEgPSBmcC5yZWFkKCkKICAgICAgICAgcGFyc2VyID0gSGVhZGVyUGFyc2VyKCkKICAgICAgICAgbXNnID0gcGFyc2VyLnBhcnNlc3RyKG1zZ2RhdGEpCiAgICAgICAgIG91dCA9IFN0cmluZ0lPKCkKQEAgLTIxNiw4ICsyMTcsMTIgQEAKICAgICAgICAgIyBTdWJwYXJ0IDMgaXMgYmFzZTY0CiAgICAgICAgIGVxKG1zZy5nZXRfcGF5bG9hZCgyKS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCiAgICAgICAgICAgIGInVGhpcyBpcyBhIEJhc2U2NCBlbmNvZGVkIG1lc3NhZ2UuJykKLSAgICAgICAgIyBTdWJwYXJ0IDQgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci4KKyAgICAgICAgIyBTdWJwYXJ0IDQgaXMgYmFzZTY0IHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLCB3aGljaAorICAgICAgICAjIHVzZWQgdG8gYmUgc3RyaXBwZWQgKGlzc3VlIDcxNDMpLgogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoMykuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICBiJ1RoaXMgaXMgYSBCYXNlNjQgZW5jb2RlZCBtZXNzYWdlLlxuJykKKyAgICAgICAgIyBTdWJwYXJ0IDUgaGFzIG5vIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGhlYWRlci4KKyAgICAgICAgZXEobXNnLmdldF9wYXlsb2FkKDQpLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKICAgICAgICAgICAgYidUaGlzIGhhcyBubyBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBoZWFkZXIuXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X2RlY29kZWRfdXVfcGF5bG9hZChzZWxmKToKQEAgLTIzMSw2ICsyMzYsMTAgQEAKICAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdmb28nKQogICAgICAgICBlcShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBiJ2ZvbycpCiAKKyAgICBkZWYgdGVzdF9nZXRfcGF5bG9hZF9uX3JhaXNlc19vbl9ub25fbXVsdGlwYXJ0KHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtc2cuZ2V0X3BheWxvYWQsIDEpCisKICAgICBkZWYgdGVzdF9kZWNvZGVkX2dlbmVyYXRvcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzA3LnR4dCcpCkBAIC0zODYsNiArMzk1LDE3IEBACiAgICAgICAgIG1zZy5kZWxfcGFyYW0oJ2ZpbGVuYW1lJywgJ2NvbnRlbnQtZGlzcG9zaXRpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snY29udGVudC1kaXNwb3NpdGlvbiddLCAnYXR0YWNobWVudCcpCiAKKyAgICBkZWYgdGVzdF9kZWxfcGFyYW1fb25fbm9uZXhpc3RlbnRfaGVhZGVyKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmRlbF9wYXJhbSgnZmlsZW5hbWUnLCAnY29udGVudC1kaXNwb3NpdGlvbicpCisKKyAgICBkZWYgdGVzdF9kZWxfbm9uZXhpc3RlbnRfcGFyYW0oc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nLCBjaGFyc2V0PSd1dGYtOCcpCisgICAgICAgIGV4aXN0aW5nX2hlYWRlciA9IG1zZ1snQ29udGVudC1UeXBlJ10KKyAgICAgICAgbXNnLmRlbF9wYXJhbSgnZm9vYmFyJywgaGVhZGVyPSdDb250ZW50LVR5cGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snQ29udGVudC1UeXBlJ10sICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCInKQorCiAgICAgZGVmIHRlc3Rfc2V0X3R5cGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKQEAgLTUxNiw2ICs1MzYsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKHgsICdyYXctdW5pY29kZS1lc2NhcGUnKSkKIAorICAgIGRlZiB0ZXN0X2Jyb2tlbl91bmljb2RlX3BheWxvYWQoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGltcHJvdmVzIGNvdmVyYWdlIGJ1dCBpcyBub3QgYSBjb21wbGlhbmNlIHRlc3QuCisgICAgICAgICMgVGhlIGJlaGF2aW9yIGluIHRoaXMgc2l0dWF0aW9uIGlzIGN1cnJlbnRseSB1bmRlZmluZWQgYnkgdGhlIEFQSS4KKyAgICAgICAgeCA9ICd0aGlzIGlzIGEgYnJceGY2a2VuIHRoaW5nIHRvIGRvJworICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnWydjb250ZW50LXR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtc2dbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXSA9ICc4Yml0JworICAgICAgICBtc2cuc2V0X3BheWxvYWQoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKHgsICdyYXctdW5pY29kZS1lc2NhcGUnKSkKKworICAgIGRlZiB0ZXN0X3F1ZXN0aW9uYWJsZV9ieXRlc19wYXlsb2FkKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBpbXByb3ZlcyBjb3ZlcmFnZSBidXQgaXMgbm90IGEgY29tcGxpYW5jZSB0ZXN0LAorICAgICAgICAjIHNpbmNlIGl0IGludm9sdmVzIHBva2luZyBpbnNpZGUgdGhlIGJsYWNrIGJveC4KKyAgICAgICAgeCA9ICd0aGlzIGlzIGEgcXXDqXN0aW9uYWJsZSB0aGluZyB0byBkbycuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ2NvbnRlbnQtdHlwZSddID0gJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IicKKyAgICAgICAgbXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10gPSAnOGJpdCcKKyAgICAgICAgbXNnLl9wYXlsb2FkID0geAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIHgpCisKICAgICAjIElzc3VlIDEwNzg5MTkKICAgICBkZWYgdGVzdF9hc2NpaV9hZGRfaGVhZGVyKHNlbGYpOgogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKQEAgLTUyOSw3ICs1NzAsNyBAQAogICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKICAgICAgICAgICAgIGZpbGVuYW1lPSJGdcOfYmFsbGVyLnBwdCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWUqPSJ1dGYtOFwnXCdGdSVDMyU5RmJhbGxlci5wcHQiJywKKyAgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZSo9dXRmLThcJ1wnRnUlQzMlOUZiYWxsZXIucHB0JywKICAgICAgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQogCiAgICAgZGVmIHRlc3Rfbm9uYXNjaWlfYWRkX2hlYWRlcl92aWFfdHJpcGxlKHNlbGYpOgpAQCAtNTM3LDkgKzU3OCwzNCBAQAogICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdhdHRhY2htZW50JywKICAgICAgICAgICAgIGZpbGVuYW1lPSgnaXNvLTg4NTktMScsICcnLCAnRnXDn2JhbGxlci5wcHQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICdhdHRhY2htZW50OyBmaWxlbmFtZSo9Imlzby04ODU5LTFcJ1wnRnUlREZiYWxsZXIucHB0IicsCisgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWUqPWlzby04ODU5LTFcJ1wnRnUlREZiYWxsZXIucHB0JywKICAgICAgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQogCisgICAgZGVmIHRlc3RfYXNjaWlfYWRkX2hlYWRlcl93aXRoX3RzcGVjaWFsKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICBmaWxlbmFtZT0id2luZG93cyBbZmlsZW5hbWVdLnBwdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9IndpbmRvd3MgW2ZpbGVuYW1lXS5wcHQiJywKKyAgICAgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQorCisgICAgZGVmIHRlc3Rfbm9uYXNjaWlfYWRkX2hlYWRlcl93aXRoX3RzcGVjaWFsKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsCisgICAgICAgICAgICBmaWxlbmFtZT0iRnXDn2JhbGxlciBbZmlsZW5hbWVdLnBwdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAiYXR0YWNobWVudDsgZmlsZW5hbWUqPXV0Zi04JydGdSVDMyU5RmJhbGxlciUyMCU1QmZpbGVuYW1lJTVELnBwdCIsCisgICAgICAgICAgICBtc2dbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSkKKworICAgIGRlZiB0ZXN0X2FkZF9oZWFkZXJfd2l0aF9uYW1lX29ubHlfcGFyYW0oc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2cuYWRkX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnLCBmb29fYmFyPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImlubGluZTsgZm9vLWJhciIsIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddKQorCisgICAgZGVmIHRlc3RfYWRkX2hlYWRlcl93aXRoX25vX3ZhbHVlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLmFkZF9oZWFkZXIoJ1gtU3RhdHVzJywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJywgbXNnWydYLVN0YXR1cyddKQogCiAgICAgIyBJc3N1ZSA1ODcxOiByZWplY3QgYW4gYXR0ZW1wdCB0byBlbWJlZCBhIGhlYWRlciBpbnNpZGUgYSBoZWFkZXIgdmFsdWUKICAgICAjIChoZWFkZXIgaW5qZWN0aW9uIGF0dGFjaykuCkBAIC01OTQsNiArNjYwLDkgQEAKIAogIyBUZXN0IGxvbmcgaGVhZGVyIHdyYXBwaW5nCiBjbGFzcyBUZXN0TG9uZ0hlYWRlcnMoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBtYXhEaWZmID0gTm9uZQorCiAgICAgZGVmIHRlc3Rfc3BsaXRfbG9uZ19jb250aW51YXRpb24oc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9zdHJpbmcoIiIiXApAQCAtNzE0LDYgKzc4MywyMCBAQAogd2Fzbmlwb29wOyBnaXJhZmZlcz0idmVyeS1sb25nLW5lY2tlZC1hbmltYWxzIjsKIFx0c3Bvb2dlPSJ5dW1teSI7IGhpcHBvcz0iZ2FyZ2FudHVhbiI7IG1hcnNobWFsbG93cz0iZ29vZXkiJycnKQogCisgICAgZGVmIHRlc3RfaGVhZGVyX2VuY29kZV93aXRoX2RpZmZlcmVudF9vdXRwdXRfY2hhcnNldChzZWxmKToKKyAgICAgICAgaCA9IEhlYWRlcign5paHJywgJ2V1Yy1qcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5lbmNvZGUoKSwgIj0/aXNvLTIwMjItanA/Yj9HeVJDU2pnYktFST0/PSIpCisKKyAgICBkZWYgdGVzdF9sb25nX2hlYWRlcl9lbmNvZGVfd2l0aF9kaWZmZXJlbnRfb3V0cHV0X2NoYXJzZXQoc2VsZik6CisgICAgICAgIGggPSBIZWFkZXIoYid0ZXN0LWphIFx4YTRceGQ4XHhjNVx4ZWFceGI5XHhjNlx4YTRceGI1XHhhNFx4ZWNceGE0JworICAgICAgICAgICAgYidceGJmXHhhNVx4ZTFceGExXHhiY1x4YTVceGViXHhhNFx4Y2ZceGJiXHhjYVx4YjJceGYxXHhiY1x4ZDQnCisgICAgICAgICAgICBiJ1x4YTRceGNlXHhiZVx4YjVceGM3XHhhN1x4YTRceGYyXHhjMlx4ZDRceGE0XHhjM1x4YTRceGM2XHhhNCcKKyAgICAgICAgICAgIGInXHhhNFx4YTRceGRlXHhhNFx4YjknLmRlY29kZSgnZXVjLWpwJyksICdldWMtanAnKQorICAgICAgICByZXMgPSAiIiJcCis9P2lzby0yMDIyLWpwP2I/ZEdWemRDMXFZU0FiSkVJa1dFVnFPVVlrTlNSc0pEOGxZU0U4Sldza1R6dEtNbkU4VkNST1BqVWJLRUk9Pz0KKyA9P2lzby0yMDIyLWpwP2I/R3lSQ1J5Y2tja0pVSkVNa1JpUWtKRjRrT1Jzb1FnPT0/PSIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZW5jb2RlKCksIHJlcykKKwogICAgIGRlZiB0ZXN0X2hlYWRlcl9zcGxpdHRlcihzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgbXNnID0gTUlNRVRleHQoJycpCkBAIC03ODgsMTQgKzg3MSwxMiBAQAogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAogICAgICAgICBoID0gSGVhZGVyKCc7ICcKICAgICAgICAgICAgICd0aGlzX3BhcnRfZG9lc19ub3RfZml0X3dpdGhpbl9tYXhsaW5lbGVuX2FuZF90aHVzX3Nob3VsZF8nCi0gICAgICAgICAgICAnYmVfb25fYV9saW5lX2FsbF9ieV9pdHNlbGY7JykKKyAgICAgICAgICAgICdiZV9vbl9hX2xpbmVfYWxsX2J5X2l0c2VsZjsgJykKICAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAogOwotIHRoaXNfcGFydF9kb2VzX25vdF9maXRfd2l0aGluX21heGxpbmVsZW5fYW5kX3RodXNfc2hvdWxkX2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmOyIiIikKKyB0aGlzX3BhcnRfZG9lc19ub3RfZml0X3dpdGhpbl9tYXhsaW5lbGVuX2FuZF90aHVzX3Nob3VsZF9iZV9vbl9hX2xpbmVfYWxsX2J5X2l0c2VsZjsgIiIiKQogCiAgICAgZGVmIHRlc3RfbG9uZ19oZWFkZXJfd2l0aF9tdWx0aXBsZV9zZXF1ZW50aWFsX3NwbGl0X2NoYXJzKHNlbGYpOgotICAgICAgICAjIElzc3VlIDExNDkyCi0KICAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgaCA9IEhlYWRlcignVGhpcyBpcyBhIGxvbmcgbGluZSB0aGF0IGhhcyB0d28gd2hpdGVzcGFjZXMgIGluIGEgcm93LiAgJwogICAgICAgICAgICAgJ1RoaXMgdXNlZCB0byBjYXVzZSB0cnVuY2F0aW9uIG9mIHRoZSBoZWFkZXIgd2hlbiBmb2xkZWQnKQpAQCAtODAzLDYgKzg4NCwxMDUgQEAKIFRoaXMgaXMgYSBsb25nIGxpbmUgdGhhdCBoYXMgdHdvIHdoaXRlc3BhY2VzICBpbiBhIHJvdy4gIFRoaXMgdXNlZCB0byBjYXVzZQogIHRydW5jYXRpb24gb2YgdGhlIGhlYWRlciB3aGVuIGZvbGRlZCIiIikKIAorICAgIGRlZiB0ZXN0X3NwbGl0dGVyX3NwbGl0X29uX3B1bmN0dWF0aW9uX29ubHlfaWZfZndzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCd0aGlzdmVyeWxvbmdoZWFkZXJoYXM7c2VtaWNvbG9uczthbmQsY29tbWFzLGJ1dCcKKyAgICAgICAgICAgICd0aGV5O2FyZW5vdGxlZ2FsO2ZvbGQscG9pbnRzJykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgInRoaXN2ZXJ5bG9uZ2hlYWRlcmhhcztzZW1pY29sb25zO2FuZCxjb21tYXMsYnV0dGhleTsiCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJlbm90bGVnYWw7Zm9sZCxwb2ludHMiKQorCisgICAgZGVmIHRlc3RfbGVhZGluZ19zcGxpdHRhYmxlX2luX3RoZV9taWRkbGVfanVzdF9iZWZvcmVfb3ZlcmxvbmdfbGFzdF9wYXJ0KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCd0aGlzIGlzIGEgIHRlc3Qgd2hlcmUgd2UgbmVlZCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZSAnCisgICAgICAgICAgICAnYmVmb3JlOyBvdXIgZmluYWwgbGluZSB0aGF0IGlzIGp1c3QgdG9vIGJpZyB0byBmaXQ7OyAnCisgICAgICAgICAgICAndGhpc19wYXJ0X2RvZXNfbm90X2ZpdF93aXRoaW5fbWF4bGluZWxlbl9hbmRfdGh1c19zaG91bGRfJworICAgICAgICAgICAgJ2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmOycpCisgICAgICAgIGVxKGguZW5jb2RlKCksICIiIlwKK3RoaXMgaXMgYSAgdGVzdCB3aGVyZSB3ZSBuZWVkIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBsaW5lIGJlZm9yZTsKKyBvdXIgZmluYWwgbGluZSB0aGF0IGlzIGp1c3QgdG9vIGJpZyB0byBmaXQ7OworIHRoaXNfcGFydF9kb2VzX25vdF9maXRfd2l0aGluX21heGxpbmVsZW5fYW5kX3RodXNfc2hvdWxkX2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmOyIiIikKKworICAgIGRlZiB0ZXN0X292ZXJsb25nX2xhc3RfcGFydF9mb2xsb3dlZF9ieV9zcGxpdF9wb2ludChzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgaCA9IEhlYWRlcigndGhpc19wYXJ0X2RvZXNfbm90X2ZpdF93aXRoaW5fbWF4bGluZWxlbl9hbmRfdGh1c19zaG91bGRfJworICAgICAgICAgICAgJ2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmICcpCisgICAgICAgIGVxKGguZW5jb2RlKCksICJ0aGlzX3BhcnRfZG9lc19ub3RfZml0X3dpdGhpbl9tYXhsaW5lbGVuX2FuZF90aHVzXyIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGRfYmVfb25fYV9saW5lX2FsbF9ieV9pdHNlbGYgIikKKworICAgIGRlZiB0ZXN0X211bHRpbGluZV93aXRoX292ZXJsb25nX3BhcnRzX3NlcGFyYXRlZF9ieV90d29fc3BsaXRfcG9pbnRzKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCd0aGlzX2lzX2FfX3Rlc3Rfd2hlcmVfd2VfbmVlZF90b19oYXZlX21vcmVfdGhhbl9vbmVfbGluZV8nCisgICAgICAgICAgICAnYmVmb3JlX291cl9maW5hbF9saW5lXzsgOyAnCisgICAgICAgICAgICAndGhpc19wYXJ0X2RvZXNfbm90X2ZpdF93aXRoaW5fbWF4bGluZWxlbl9hbmRfdGh1c19zaG91bGRfJworICAgICAgICAgICAgJ2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmOyAnKQorICAgICAgICBlcShoLmVuY29kZSgpLCAiIiJcCit0aGlzX2lzX2FfX3Rlc3Rfd2hlcmVfd2VfbmVlZF90b19oYXZlX21vcmVfdGhhbl9vbmVfbGluZV9iZWZvcmVfb3VyX2ZpbmFsX2xpbmVfOworIDsKKyB0aGlzX3BhcnRfZG9lc19ub3RfZml0X3dpdGhpbl9tYXhsaW5lbGVuX2FuZF90aHVzX3Nob3VsZF9iZV9vbl9hX2xpbmVfYWxsX2J5X2l0c2VsZjsgIiIiKQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX3dpdGhfb3ZlcmxvbmdfbGFzdF9wYXJ0X2ZvbGxvd2VkX2J5X3NwbGl0X3BvaW50KHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAorICAgICAgICBoID0gSGVhZGVyKCd0aGlzIGlzIGEgdGVzdCB3aGVyZSB3ZSBuZWVkIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBsaW5lICcKKyAgICAgICAgICAgICdiZWZvcmUgb3VyIGZpbmFsIGxpbmU7IDsgJworICAgICAgICAgICAgJ3RoaXNfcGFydF9kb2VzX25vdF9maXRfd2l0aGluX21heGxpbmVsZW5fYW5kX3RodXNfc2hvdWxkXycKKyAgICAgICAgICAgICdiZV9vbl9hX2xpbmVfYWxsX2J5X2l0c2VsZjsgJykKKyAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAordGhpcyBpcyBhIHRlc3Qgd2hlcmUgd2UgbmVlZCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZSBiZWZvcmUgb3VyIGZpbmFsIGxpbmU7CisgOworIHRoaXNfcGFydF9kb2VzX25vdF9maXRfd2l0aGluX21heGxpbmVsZW5fYW5kX3RodXNfc2hvdWxkX2JlX29uX2FfbGluZV9hbGxfYnlfaXRzZWxmOyAiIiIpCisKKyAgICBkZWYgdGVzdF9sb25nX2hlYWRlcl93aXRoX3doaXRlc3BhY2VfcnVucyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRnJvbSddID0gJ3Rlc3RAZG9tLmFpbicKKyAgICAgICAgbXNnWydSZWZlcmVuY2VzJ10gPSBTUEFDRS5qb2luKFsnPGZvb0Bkb20uYWluPiAgJ10gKiAxMCkKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdUZXN0JykKKyAgICAgICAgc2ZwID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHNmcCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZXEoc2ZwLmdldHZhbHVlKCksICIiIlwKK0Zyb206IHRlc3RAZG9tLmFpbgorUmVmZXJlbmNlczogPGZvb0Bkb20uYWluPiAgIDxmb29AZG9tLmFpbj4gICA8Zm9vQGRvbS5haW4+ICAgPGZvb0Bkb20uYWluPgorICAgPGZvb0Bkb20uYWluPiAgIDxmb29AZG9tLmFpbj4gICA8Zm9vQGRvbS5haW4+ICAgPGZvb0Bkb20uYWluPgorICAgPGZvb0Bkb20uYWluPiAgIDxmb29AZG9tLmFpbj5ceDIwXHgyMAorCitUZXN0IiIiKQorCisgICAgZGVmIHRlc3RfbG9uZ19ydW5fd2l0aF9zZW1pX2hlYWRlcl9zcGxpdHRlcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRnJvbSddID0gJ3Rlc3RAZG9tLmFpbicKKyAgICAgICAgbXNnWydSZWZlcmVuY2VzJ10gPSBTUEFDRS5qb2luKFsnPGZvb0Bkb20uYWluPiddICogMTApICsgJzsgYWJjJworICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ1Rlc3QnKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorRnJvbTogdGVzdEBkb20uYWluCitSZWZlcmVuY2VzOiA8Zm9vQGRvbS5haW4+IDxmb29AZG9tLmFpbj4gPGZvb0Bkb20uYWluPiA8Zm9vQGRvbS5haW4+CisgPGZvb0Bkb20uYWluPiA8Zm9vQGRvbS5haW4+IDxmb29AZG9tLmFpbj4gPGZvb0Bkb20uYWluPiA8Zm9vQGRvbS5haW4+CisgPGZvb0Bkb20uYWluPjsgYWJjCisKK1Rlc3QiIiIpCisKKyAgICBkZWYgdGVzdF9zcGxpdHRlcl9zcGxpdF9vbl9wdW5jdHVhdGlvbl9vbmx5X2lmX2Z3cyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snRnJvbSddID0gJ3Rlc3RAZG9tLmFpbicKKyAgICAgICAgbXNnWydSZWZlcmVuY2VzJ10gPSAoJ3RoaXN2ZXJ5bG9uZ2hlYWRlcmhhcztzZW1pY29sb25zO2FuZCxjb21tYXMsYnV0JworICAgICAgICAgICAgJ3RoZXk7YXJlbm90bGVnYWw7Zm9sZCxwb2ludHMnKQorICAgICAgICBtc2cuc2V0X3BheWxvYWQoJ1Rlc3QnKQorICAgICAgICBzZnAgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3Ioc2ZwKQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICAjIFhYWCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGhlYWRlciBzaG91bGQgbm90IGJlIHRoZXJlLgorICAgICAgICBlcShzZnAuZ2V0dmFsdWUoKSwgIiIiXAorRnJvbTogdGVzdEBkb20uYWluCitSZWZlcmVuY2VzOlx4MjAKKyB0aGlzdmVyeWxvbmdoZWFkZXJoYXM7c2VtaWNvbG9uczthbmQsY29tbWFzLGJ1dHRoZXk7YXJlbm90bGVnYWw7Zm9sZCxwb2ludHMKKworVGVzdCIiIikKKwogICAgIGRlZiB0ZXN0X25vX3NwbGl0X2xvbmdfaGVhZGVyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAogICAgICAgICBoc3RyID0gJ1JlZmVyZW5jZXM6ICcgKyAneCcgKiA4MApAQCAtODkzLDcgKzEwNzMsNyBAQAogICAgIGRlZiB0ZXN0X2xvbmdfdG9faGVhZGVyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAogICAgICAgICB0byA9ICgnIlNvbWVvbmUgVGVzdCAjQSIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+LCcKLSAgICAgICAgICAgICAgJzxzb21lb25lQGVlY3MudW1pY2guZWR1PiwnCisgICAgICAgICAgICAgICc8c29tZW9uZUBlZWNzLnVtaWNoLmVkdT4sICcKICAgICAgICAgICAgICAgJyJTb21lb25lIFRlc3QgI0IiIDxzb21lb25lQHVtaWNoLmVkdT4sICcKICAgICAgICAgICAgICAgJyJTb21lb25lIFRlc3QgI0MiIDxzb21lb25lQGVlY3MudW1pY2guZWR1PiwgJwogICAgICAgICAgICAgICAnIlNvbWVvbmUgVGVzdCAjRCIgPHNvbWVvbmVAZWVjcy51bWljaC5lZHU+JykKQEAgLTk0OCw5ICsxMTI4LDExIEBACiAgICAgICAgIG1zZ1snUmVjZWl2ZWQtMiddID0gaAogICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIHNwbGl0dGluZyBvbiBzcGFjZXMgbm90IHNlbWljb2xvbnMuCiAgICAgICAgIHNlbGYubmRpZmZBc3NlcnRFcXVhbChtc2cuYXNfc3RyaW5nKG1heGhlYWRlcmxlbj03OCksICIiIlwKLVJlY2VpdmVkLTE6IGZyb20gRk9PLlRMRCAodml6d29ybGQuYWNsLmZvby50bGQgWzEyMy40NTIuNjc4LjldKSBieSBocm90aGdhci5sYS5tYXN0YWxlci5jb20gKHRtZGEtb2ZtaXBkKSB3aXRoIEVTTVRQOworUmVjZWl2ZWQtMTogZnJvbSBGT08uVExEICh2aXp3b3JsZC5hY2wuZm9vLnRsZCBbMTIzLjQ1Mi42NzguOV0pIGJ5CisgaHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKICBXZWQsIDA1IE1hciAyMDAzIDE4OjEwOjE4IC0wNzAwCi1SZWNlaXZlZC0yOiBmcm9tIEZPTy5UTEQgKHZpendvcmxkLmFjbC5mb28udGxkIFsxMjMuNDUyLjY3OC45XSkgYnkgaHJvdGhnYXIubGEubWFzdGFsZXIuY29tICh0bWRhLW9mbWlwZCkgd2l0aCBFU01UUDsKK1JlY2VpdmVkLTI6IGZyb20gRk9PLlRMRCAodml6d29ybGQuYWNsLmZvby50bGQgWzEyMy40NTIuNjc4LjldKSBieQorIGhyb3RoZ2FyLmxhLm1hc3RhbGVyLmNvbSAodG1kYS1vZm1pcGQpIHdpdGggRVNNVFA7CiAgV2VkLCAwNSBNYXIgMjAwMyAxODoxMDoxOCAtMDcwMAogCiAiIiIpCkBAIC05NjMsMTIgKzExNDUsMTQgQEAKICAgICAgICAgbXNnWydSZWNlaXZlZC0xJ10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J1JlY2VpdmVkLTEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51YXRpb25fd3M9J1x0JykKICAgICAgICAgbXNnWydSZWNlaXZlZC0yJ10gPSBoCi0gICAgICAgICMgWFhYIFRoaXMgc2hvdWxkIGJlIHNwbGl0dGluZyBvbiBzcGFjZXMgbm90IGNvbW1hcy4KKyAgICAgICAgIyBYWFggVGhlIHNwYWNlIGFmdGVyIHRoZSAnOicgc2hvdWxkIG5vdCBiZSB0aGVyZS4KICAgICAgICAgc2VsZi5uZGlmZkFzc2VydEVxdWFsKG1zZy5hc19zdHJpbmcobWF4aGVhZGVybGVuPTc4KSwgIiIiXAotUmVjZWl2ZWQtMTogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgXCJUaHUsCi0gNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMFwiKQotUmVjZWl2ZWQtMjogPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQgQnJlbW5lcidzIG1lc3NhZ2Ugb2YgXCJUaHUsCi0gNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMFwiKQorUmVjZWl2ZWQtMTpceDIwCisgPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQKKyBCcmVtbmVyJ3MgbWVzc2FnZSBvZiBcIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMFwiKQorUmVjZWl2ZWQtMjpceDIwCisgPDE1OTc1LjE3OTAxLjIwNzI0MC40MTQ2MDRAc2dpZ3JpdHptYW5uMS5tYXRoZW1hdGlrLnR1LW11ZW5jaGVuLmRlPiAoRGF2aWQKKyBCcmVtbmVyJ3MgbWVzc2FnZSBvZiBcIlRodSwgNiBNYXIgMjAwMyAxMzo1ODoyMSArMDEwMFwiKQogCiAiIiIpCiAKQEAgLTk4MCw4ICsxMTY0LDkgQEAKICBsb2NRRFE0ekp5a0ZCQVhKZldEakFBQUNZVWxFUVZSNG5GMlRRWS9qSUF5RmM2bHlkbEc1eDhOeXAxWTY5d2oxUE4ySTVnenAiIiIKICAgICAgICAgbXNnWydGYWNlLTEnXSA9IHQKICAgICAgICAgbXNnWydGYWNlLTInXSA9IEhlYWRlcih0LCBoZWFkZXJfbmFtZT0nRmFjZS0yJykKKyAgICAgICAgbXNnWydGYWNlLTMnXSA9ICcgJyArIHQKICAgICAgICAgIyBYWFggVGhpcyBzcGxpdHRpbmcgaXMgYWxsIHdyb25nLiAgSXQgdGhlIGZpcnN0IHZhbHVlIGxpbmUgc2hvdWxkIGJlCi0gICAgICAgICMgc251ZyBhZ2FpbnN0IHRoZSBmaWVsZCBuYW1lLgorICAgICAgICAjIHNudWcgYWdhaW5zdCB0aGUgZmllbGQgbmFtZSBvciB0aGUgc3BhY2UgYWZ0ZXIgdGhlIGhlYWRlciBub3QgdGhlcmUuCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcobWF4aGVhZGVybGVuPTc4KSwgIiIiXAogRmFjZS0xOlx4MjAKICBpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBREFBQUFBd0JBTUFBQUNsTE9TMEFBQUFHRkJNVkVVQUFBQWtIaUplUlVJY0dCaTkKQEAgLTk4OSw2ICsxMTc0LDkgQEAKIEZhY2UtMjpceDIwCiAgaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQURBQUFBQXdCQU1BQUFDbExPUzBBQUFBR0ZCTVZFVUFBQUFrSGlKZVJVSWNHQmk5CiAgbG9jUURRNHpKeWtGQkFYSmZXRGpBQUFDWVVsRVFWUjRuRjJUUVkvaklBeUZjNmx5ZGxHNXg4TnlwMVk2OXdqMVBOMkk1Z3pwCitGYWNlLTM6XHgyMAorIGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFEQUFBQUF3QkFNQUFBQ2xMT1MwQUFBQUdGQk1WRVVBQUFBa0hpSmVSVUljR0JpOQorIGxvY1FEUTR6SnlrRkJBWEpmV0RqQUFBQ1lVbEVRVlI0bkYyVFFZL2pJQXlGYzZseWRsRzV4OE55cDFZNjl3ajFQTjJJNWd6cAogCiAiIiIpCiAKQEAgLTEwMDAsOCArMTE4OCw4IEBACiAgICAgICAgICAgICAgJ1dlZCwgMTYgT2N0IDIwMDIgMDc6NDE6MTEgLTA3MDAnKQogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCiAgICAgICAgIGVxKG1zZy5hc19zdHJpbmcobWF4aGVhZGVybGVuPTc4KSwgJycnXAotUmVjZWl2ZWQ6IGZyb20gc2lpbWFnZS5jb20gKFsxNzIuMjUuMS4zXSkgYnkgemltYS5zaWxpY29uaW1hZ2UuY29tIHdpdGggTWljcm9zb2Z0IFNNVFBTVkMoNS4wLjIxOTUuNDkwNSk7Ci0gV2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMAorUmVjZWl2ZWQ6IGZyb20gc2lpbWFnZS5jb20gKFsxNzIuMjUuMS4zXSkgYnkgemltYS5zaWxpY29uaW1hZ2UuY29tIHdpdGgKKyBNaWNyb3NvZnQgU01UUFNWQyg1LjAuMjE5NS40OTA1KTsgV2VkLCAxNiBPY3QgMjAwMiAwNzo0MToxMSAtMDcwMAogCiAnJycpCiAKQEAgLTEwMTUsOSArMTIwMywxMSBAQAogICAgICAgICBtc2dbJ0xpc3QnXSA9IGgKICAgICAgICAgbXNnWydMaXN0J10gPSBIZWFkZXIoaCwgaGVhZGVyX25hbWU9J0xpc3QnKQogICAgICAgICBlcShtc2cuYXNfc3RyaW5nKG1heGhlYWRlcmxlbj03OCksICIiIlwKLUxpc3Q6IExpc3QtVW5zdWJzY3JpYmU6IDxodHRwOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwYW1hc3Nhc3Npbi10YWxrPiwKK0xpc3Q6IExpc3QtVW5zdWJzY3JpYmU6CisgPGh0dHA6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlzdHMvbGlzdGluZm8vc3BhbWFzc2Fzc2luLXRhbGs+LAogICAgICAgICA8bWFpbHRvOnNwYW1hc3Nhc3Npbi10YWxrLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0P3N1YmplY3Q9dW5zdWJzY3JpYmU+Ci1MaXN0OiBMaXN0LVVuc3Vic2NyaWJlOiA8aHR0cDovL2xpc3RzLnNvdXJjZWZvcmdlLm5ldC9saXN0cy9saXN0aW5mby9zcGFtYXNzYXNzaW4tdGFsaz4sCitMaXN0OiBMaXN0LVVuc3Vic2NyaWJlOgorIDxodHRwOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL3NwYW1hc3Nhc3Npbi10YWxrPiwKICAgICAgICAgPG1haWx0bzpzcGFtYXNzYXNzaW4tdGFsay1yZXF1ZXN0QGxpc3RzLnNvdXJjZWZvcmdlLm5ldD9zdWJqZWN0PXVuc3Vic2NyaWJlPgogCiAiIiIpCkBAIC0yMDkzLDE3ICsyMjgzLDIwIEBACiAjIHNob3VsZCBiZSBpZGVudGljYWwuICBOb3RlOiB0aGF0IHdlIGlnbm9yZSB0aGUgVW5peC1Gcm9tIHNpbmNlIHRoYXQgbWF5CiAjIGNvbnRhaW4gYSBjaGFuZ2VkIGRhdGUuCiBjbGFzcyBUZXN0SWRlbXBvdGVudChUZXN0RW1haWxCYXNlKToKKworICAgIGxpbmVzZXAgPSAnXG4nCisKICAgICBkZWYgX21zZ29iaihzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgIHdpdGggb3BlbmZpbGUoZmlsZW5hbWUpIGFzIGZwOgogICAgICAgICAgICAgZGF0YSA9IGZwLnJlYWQoKQogICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKGRhdGEpCiAgICAgICAgIHJldHVybiBtc2csIGRhdGEKIAotICAgIGRlZiBfaWRlbXBvdGVudChzZWxmLCBtc2csIHRleHQpOgorICAgIGRlZiBfaWRlbXBvdGVudChzZWxmLCBtc2csIHRleHQsIHVuaXhmcm9tPUZhbHNlKToKICAgICAgICAgZXEgPSBzZWxmLm5kaWZmQXNzZXJ0RXF1YWwKICAgICAgICAgcyA9IFN0cmluZ0lPKCkKICAgICAgICAgZyA9IEdlbmVyYXRvcihzLCBtYXhoZWFkZXJsZW49MCkKLSAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgZy5mbGF0dGVuKG1zZywgdW5peGZyb209dW5peGZyb20pCiAgICAgICAgIGVxKHRleHQsIHMuZ2V0dmFsdWUoKSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX3RleHRfbWVzc2FnZShzZWxmKToKQEAgLTIxOTAsNiArMjM4MywxNCBAQAogICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ18zNi50eHQnKQogICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCkKIAorICAgIGRlZiB0ZXN0X21lc3NhZ2VfZGVsaXZlcnlfc3RhdHVzKHNlbGYpOgorICAgICAgICBtc2csIHRleHQgPSBzZWxmLl9tc2dvYmooJ21zZ180My50eHQnKQorICAgICAgICBzZWxmLl9pZGVtcG90ZW50KG1zZywgdGV4dCwgdW5peGZyb209VHJ1ZSkKKworICAgIGRlZiB0ZXN0X21lc3NhZ2Vfc2lnbmVkX2lkZW1wb3RlbnQoc2VsZik6CisgICAgICAgIG1zZywgdGV4dCA9IHNlbGYuX21zZ29iaignbXNnXzQ1LnR4dCcpCisgICAgICAgIHNlbGYuX2lkZW1wb3RlbnQobXNnLCB0ZXh0KQorCiAgICAgZGVmIHRlc3RfY29udGVudF90eXBlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgdW5sZXNzID0gc2VsZi5hc3NlcnRUcnVlCkBAIC0yMjAyLDE2ICsyNDAzLDE2IEBACiAgICAgICAgICAgICBwYXJhbXNbcGtdID0gcHYKICAgICAgICAgZXEocGFyYW1zWydyZXBvcnQtdHlwZSddLCAnZGVsaXZlcnktc3RhdHVzJykKICAgICAgICAgZXEocGFyYW1zWydib3VuZGFyeSddLCAnRDE2OTBBN0FDMS45OTY4NTYwOTAvbWFpbC5leGFtcGxlLmNvbScpCi0gICAgICAgIGVxKG1zZy5wcmVhbWJsZSwgJ1RoaXMgaXMgYSBNSU1FLWVuY2Fwc3VsYXRlZCBtZXNzYWdlLlxuJykKLSAgICAgICAgZXEobXNnLmVwaWxvZ3VlLCAnXG4nKQorICAgICAgICBlcShtc2cucHJlYW1ibGUsICdUaGlzIGlzIGEgTUlNRS1lbmNhcHN1bGF0ZWQgbWVzc2FnZS4nICsgc2VsZi5saW5lc2VwKQorICAgICAgICBlcShtc2cuZXBpbG9ndWUsIHNlbGYubGluZXNlcCkKICAgICAgICAgZXEobGVuKG1zZy5nZXRfcGF5bG9hZCgpKSwgMykKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHN1YnBhcnRzIGFyZSB3aGF0IHdlIGV4cGVjdAogICAgICAgICBtc2cxID0gbXNnLmdldF9wYXlsb2FkKDApCiAgICAgICAgIGVxKG1zZzEuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCi0gICAgICAgIGVxKG1zZzEuZ2V0X3BheWxvYWQoKSwgJ1lhZGRhIHlhZGRhIHlhZGRhXG4nKQorICAgICAgICBlcShtc2cxLmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYScgKyBzZWxmLmxpbmVzZXApCiAgICAgICAgIG1zZzIgPSBtc2cuZ2V0X3BheWxvYWQoMSkKICAgICAgICAgZXEobXNnMi5nZXRfY29udGVudF90eXBlKCksICd0ZXh0L3BsYWluJykKLSAgICAgICAgZXEobXNnMi5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGFcbicpCisgICAgICAgIGVxKG1zZzIuZ2V0X3BheWxvYWQoKSwgJ1lhZGRhIHlhZGRhIHlhZGRhJyArIHNlbGYubGluZXNlcCkKICAgICAgICAgbXNnMyA9IG1zZy5nZXRfcGF5bG9hZCgyKQogICAgICAgICBlcShtc2czLmdldF9jb250ZW50X3R5cGUoKSwgJ21lc3NhZ2UvcmZjODIyJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnMywgTWVzc2FnZSkpCkBAIC0yMjIwLDcgKzI0MjEsNyBAQAogICAgICAgICBlcShsZW4ocGF5bG9hZCksIDEpCiAgICAgICAgIG1zZzQgPSBwYXlsb2FkWzBdCiAgICAgICAgIHVubGVzcyhpc2luc3RhbmNlKG1zZzQsIE1lc3NhZ2UpKQotICAgICAgICBlcShtc2c0LmdldF9wYXlsb2FkKCksICdZYWRkYSB5YWRkYSB5YWRkYVxuJykKKyAgICAgICAgZXEobXNnNC5nZXRfcGF5bG9hZCgpLCAnWWFkZGEgeWFkZGEgeWFkZGEnICsgc2VsZi5saW5lc2VwKQogCiAgICAgZGVmIHRlc3RfcGFyc2VyKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTIyMzcsNyArMjQzOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZzEsIE1lc3NhZ2UpKQogICAgICAgICBlcShtc2cxLmdldF9jb250ZW50X3R5cGUoKSwgJ3RleHQvcGxhaW4nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cxLmdldF9wYXlsb2FkKCksIHN0cikpCi0gICAgICAgIGVxKG1zZzEuZ2V0X3BheWxvYWQoKSwgJ1xuJykKKyAgICAgICAgZXEobXNnMS5nZXRfcGF5bG9hZCgpLCBzZWxmLmxpbmVzZXApCiAKIAogCkBAIC0yMzA2LDcgKzI1MDcsOCBAQAogICAgICAgICBhbGwuc29ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsLCBbCiAgICAgICAgICAgICAnYmFzZTY0bWltZScsICdjaGFyc2V0JywgJ2VuY29kZXJzJywgJ2Vycm9ycycsICdnZW5lcmF0b3InLAotICAgICAgICAgICAgJ2hlYWRlcicsICdpdGVyYXRvcnMnLCAnbWVzc2FnZScsICdtZXNzYWdlX2Zyb21fZmlsZScsCisgICAgICAgICAgICAnaGVhZGVyJywgJ2l0ZXJhdG9ycycsICdtZXNzYWdlJywgJ21lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZScsCisgICAgICAgICAgICAnbWVzc2FnZV9mcm9tX2J5dGVzJywgJ21lc3NhZ2VfZnJvbV9maWxlJywKICAgICAgICAgICAgICdtZXNzYWdlX2Zyb21fc3RyaW5nJywgJ21pbWUnLCAncGFyc2VyJywKICAgICAgICAgICAgICdxdW9wcmltaW1lJywgJ3V0aWxzJywKICAgICAgICAgICAgIF0pCkBAIC0yMzQ5LDYgKzI1NTEsMTYgQEAKICAgICAgICAgZXEodXRpbHMucGFyc2VkYXRlX3R6KCc1IEZlYiAyMDAzIDEzOjQ3OjI2IC0wODAwJyksCiAgICAgICAgICAgICgyMDAzLCAyLCA1LCAxMywgNDcsIDI2LCAwLCAxLCAtMSwgLTI4ODAwKSkKIAorICAgIGRlZiB0ZXN0X3BhcnNlZGF0ZV9ub19zcGFjZV9iZWZvcmVfcG9zaXRpdmVfb2Zmc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHV0aWxzLnBhcnNlZGF0ZV90eignV2VkLCAzIEFwciAyMDAyIDE0OjU4OjI2KzA4MDAnKSwKKyAgICAgICAgICAgKDIwMDIsIDQsIDMsIDE0LCA1OCwgMjYsIDAsIDEsIC0xLCAyODgwMCkpCisKKyAgICBkZWYgdGVzdF9wYXJzZWRhdGVfbm9fc3BhY2VfYmVmb3JlX25lZ2F0aXZlX29mZnNldChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMTU1MzYyOiB3ZSBhbHJlYWR5IGhhbmRsZWQgJysnIGZvciB0aGlzIGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXRpbHMucGFyc2VkYXRlX3R6KCdXZWQsIDMgQXByIDIwMDIgMTQ6NTg6MjYtMDgwMCcpLAorICAgICAgICAgICAoMjAwMiwgNCwgMywgMTQsIDU4LCAyNiwgMCwgMSwgLTEsIC0yODgwMCkpCisKKwogICAgIGRlZiB0ZXN0X3BhcnNlZGF0ZV9hY2NlcHRhYmxlX3RvX3RpbWVfZnVuY3Rpb25zKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgdGltZXR1cCA9IHV0aWxzLnBhcnNlZGF0ZSgnNSBGZWIgMjAwMyAxMzo0NzoyNiAtMDgwMCcpCkBAIC0yNDI1LDYgKzI2MzcsMjQgQEAKICAgICAgICAgZXEodXRpbHMucGFyc2VhZGRyKCciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSwKICAgICAgICAgICAoJycsICciXFxcXCJleGFtcGxlXFxcXCIgZXhhbXBsZSJAZXhhbXBsZS5jb20nKSkKIAorICAgIGRlZiB0ZXN0X3BhcnNlYWRkcl9wcmVzZXJ2ZXNfc3BhY2VzX2luX2xvY2FsX3BhcnQoc2VsZik6CisgICAgICAgICMgaXNzdWUgOTI4Ni4gIEEgbm9ybWFsIFJGQzUzMjIgbG9jYWwgcGFydCBzaG91bGQgbm90IGNvbnRhaW4gYW55CisgICAgICAgICMgZm9sZGluZyB3aGl0ZSBzcGFjZSwgYnV0IGxlZ2FjeSBsb2NhbCBwYXJ0cyBjYW4gKHRoZXkgYXJlIGEgc2VxdWVuY2UKKyAgICAgICAgIyBvZiBhdG9tcywgbm90IGRvdGF0b21zKS4gIE9uIHRoZSBvdGhlciBoYW5kIHdlIHN0cmlwIHdoaXRlc3BhY2UgZnJvbQorICAgICAgICAjIGJlZm9yZSB0aGUgQCBhbmQgYXJvdW5kIGRvdHMsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIHdoaXRlc3BhY2UKKyAgICAgICAgIyBhcm91bmQgdGhlIHB1bmN0dWF0aW9uIGlzIGEgbWlzdGFrZSBpbiB3aGF0IHdvdWxkIG90aGVyd2lzZSBiZQorICAgICAgICAjIGFuIFJGQzUzMjIgbG9jYWwgcGFydC4gIExlYWRpbmcgd2hpdGVzcGFjZSBpcywgdXN1YWwsIHN0cmlwcGVkIGFzIHdlbGwuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCcnLCAibWVyd29rIHdva0B4YW1wbGUuY29tIiksCisgICAgICAgICAgICB1dGlscy5wYXJzZWFkZHIoIm1lcndvayB3b2tAeGFtcGxlLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnJywgIm1lcndvayAgd29rQHhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIHV0aWxzLnBhcnNlYWRkcigibWVyd29rICB3b2tAeGFtcGxlLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnJywgIm1lcndvayAgd29rQHhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIHV0aWxzLnBhcnNlYWRkcigiIG1lcndvayAgd29rICBAeGFtcGxlLmNvbSIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgnJywgJ21lcndvayJ3b2siICB3b2tAeGFtcGxlLmNvbScpLAorICAgICAgICAgICAgdXRpbHMucGFyc2VhZGRyKCdtZXJ3b2sid29rIiAgd29rQHhhbXBsZS5jb20nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJycsICdtZXJ3b2sud29rLndva0B4YW1wbGUuY29tJyksCisgICAgICAgICAgICB1dGlscy5wYXJzZWFkZHIoJ21lcndvay4gd29rIC4gIHdva0B4YW1wbGUuY29tJykpCisKICAgICBkZWYgdGVzdF9tdWx0aWxpbmVfZnJvbV9jb21tZW50KHNlbGYpOgogICAgICAgICB4ID0gIiIiXAogRm9vCkBAIC0yNTYzLDYgKzI3OTMsMTAgQEAKICAgICB0ZXh0L3JmYzgyMi1oZWFkZXJzCiAiIiIpCiAKKyAgICBkZWYgdGVzdF9tYWtlX21zZ2lkX2RvbWFpbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGVtYWlsLnV0aWxzLm1ha2VfbXNnaWQoZG9tYWluPSd0ZXN0ZG9tYWluLXN0cmluZycpWy0xOTpdLAorICAgICAgICAgICAgJ0B0ZXN0ZG9tYWluLXN0cmluZz4nKQogCiAKICMgVGVzdCB0aGUgaXRlcmF0b3IvZ2VuZXJhdG9ycwpAQCAtMjcxNCw2ICsyOTQ4LDE4IEBACiAgICAgICAgIHBhcnQyID0gbXNnLmdldF9wYXlsb2FkKDEpCiAgICAgICAgIGVxKHBhcnQyLmdldF9jb250ZW50X3R5cGUoKSwgJ2FwcGxpY2F0aW9uL3Jpc2NvcycpCiAKKyAgICBkZWYgdGVzdF9jcmxmX2ZsYXR0ZW4oc2VsZik6CisgICAgICAgICMgVXNpbmcgbmV3bGluZT0nXG4nIHByZXNlcnZlcyB0aGUgY3JsZnMgaW4gdGhpcyBpbnB1dCBmaWxlLgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMjYudHh0JywgbmV3bGluZT0nXG4nKSBhcyBmcDoKKyAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyh0ZXh0KQorICAgICAgICBzID0gU3RyaW5nSU8oKQorICAgICAgICBnID0gR2VuZXJhdG9yKHMpCisgICAgICAgIGcuZmxhdHRlbihtc2csIGxpbmVzZXA9J1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgdGV4dCkKKworICAgIG1heERpZmYgPSBOb25lCisKICAgICBkZWYgdGVzdF9tdWx0aXBhcnRfZGlnZXN0X3dpdGhfZXh0cmFfbWltZV9oZWFkZXJzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgbmVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCkBAIC0yODA3LDYgKzMwNTMsNDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtc2cuZ2V0X3BheWxvYWQoMCkuZ2V0X3BheWxvYWQoKS5lbmRzd2l0aCgnXHJcbicpKQogCiAKK2NsYXNzIFRlc3Q4Qml0Qnl0ZXNIYW5kbGluZyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBJbiBQeXRob24zIGFsbCBpbnB1dCBpcyBzdHJpbmcsIGJ1dCB0aGF0IGRvZXNuJ3Qgd29yayBpZiB0aGUgYWN0dWFsIGlucHV0CisgICAgIyB1c2VzIGFuIDhiaXQgdHJhbnNmZXIgZW5jb2RpbmcuICBUbyBoYWNrIGFyb3VuZCB0aGF0LCBpbiBlbWFpbCA1LjEgd2UKKyAgICAjIGRlY29kZSBieXRlIHN0cmVhbXMgdXNpbmcgdGhlIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyLCBhbmQKKyAgICAjIHJlY29udmVydCB0byBiaW5hcnkgYXQgYXBwcm9wcmlhdGUgcGxhY2VzIGlmIHdlIGRldGVjdCBzdXJyb2dhdGVzLiAgVGhpcworICAgICMgZG9lc24ndCBhbGxvdyB1cyB0byB0cmFuc2Zvcm0gaGVhZGVycyB3aXRoIDhiaXQgYnl0ZXMgKHRoZXkgZ2V0IG11bmdlZCksCisgICAgIyBidXQgaXQgZG9lcyBhbGxvdyB1cyB0byBwYXJzZSBhbmQgcHJlc2VydmUgdGhlbSwgYW5kIHRvIGRlY29kZSBib2R5CisgICAgIyBwYXJ0cyB0aGF0IHVzZSBhbiA4Yml0IENURS4KKworICAgIGJvZHl0ZXN0X21zZyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgIEZyb206IGZvb0BiYXIuY29tCisgICAgICAgIFRvOiBiYXoKKyAgICAgICAgTWltZS1WZXJzaW9uOiAxLjAKKyAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXtjaGFyc2V0fQorICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiB7Y3RlfQorCisgICAgICAgIHtib2R5bGluZX0KKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3Rfa25vd25fOGJpdF9DVEUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLmJvZHl0ZXN0X21zZy5mb3JtYXQoY2hhcnNldD0ndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZT0nOGJpdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keWxpbmU9J3DDtnN0YWwnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksICJww7ZzdGFsXG4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgInDDtnN0YWxcbiIuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgZGVmIHRlc3RfdW5rbm93bl84Yml0X0NURShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuYm9keXRlc3RfbXNnLmZvcm1hdChjaGFyc2V0PSdub3RhdmFsaWRjaGFyc2V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGU9JzhiaXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlsaW5lPSdww7ZzdGFsJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCAicFx1RkZGRFx1RkZGRHN0YWxcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicMO2c3RhbFxuIi5lbmNvZGUoJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF84Yml0X2luX3F1b3ByaV9ib2R5KHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgbm9uLVJGQyBjb21wbGlhbnQgZGF0YS4uLndpdGhvdXQgJ2RlY29kZScgdGhlIGxpYnJhcnkgY29kZQorICAgICAgICAjIGRlY29kZXMgdGhlIGJvZHkgdXNpbmcgdGhlIGNoYXJzZXQgZnJvbSB0aGUgaGVhZGVycywgYW5kIGJlY2F1c2UgdGhlCisgICAgICAgICMgc291cmNlIGJ5dGUgcmVhbGx5IGlzIHV0Zi04IHRoaXMgd29ya3MuICBUaGlzIGlzIGxpa2VseSB0byBmYWlsCisgICAgICAgICMgYWdhaW5zdCByZWFsIGRpcnR5IGRhdGEgKGllOiBwcm9kdWNlIG1vamliYWtlKSwgYnV0IHRoZSBkYXRhIGlzCisgICAgICAgICMgaW52YWxpZCBhbnl3YXkgc28gaXQgaXMgYXMgZ29vZCBhIGd1ZXNzIGFzIGFueS4gIEJ1dCB0aGlzIG1lYW5zIHRoYXQKKyAgICAgICAgIyB0aGlzIHRlc3QganVzdCBjb25maXJtcyB0aGUgY3VycmVudCBiZWhhdmlvcjsgdGhhdCBiZWhhdmlvciBpcyBub3QKKyAgICAgICAgIyBuZWNlc3NhcmlseSB0aGUgYmVzdCBwb3NzaWJsZSBiZWhhdmlvci4gIFdpdGggJ2RlY29kZScgaXQgaXMKKyAgICAgICAgIyByZXR1cm5pbmcgdGhlIHJhdyBieXRlcywgc28gdGhhdCB0ZXN0IHNob3VsZCBiZSBvZiBjb3JyZWN0IGJlaGF2aW9yLAorICAgICAgICAjIG9yIGF0IGxlYXN0IHByb2R1Y2UgdGhlIHNhbWUgcmVzdWx0IHRoYXQgZW1haWw0IGRpZC4KKyAgICAgICAgbSA9IHNlbGYuYm9keXRlc3RfbXNnLmZvcm1hdChjaGFyc2V0PSd1dGYtOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2R5bGluZT0ncD1DMz1CNnN0w6FsJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCAncD1DMz1CNnN0w6FsXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3DDtnN0w6FsXG4nLmVuY29kZSgndXRmLTgnKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfOGJpdF9pbl9ub25fOGJpdF9jdGVfdXNlc19yZXBsYWNlKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgdGVzdCwgYnV0IHByb3ZlcyB0aGF0IGlmIHRoZSA4Yml0CisgICAgICAgICMgYnl0ZSBpcyB1bmRlY29kZWFibGUgaW4gdGhlIHNwZWNpZmllZCBjaGFyc2V0LCBpdCBnZXRzIHJlcGxhY2VkCisgICAgICAgICMgYnkgdGhlIHVuaWNvZGUgJ3Vua25vd24nIGNoYXJhY3Rlci4gIEFnYWluLCB0aGlzIG1heSBvciBtYXkgbm90CisgICAgICAgICMgYmUgdGhlIGlkZWFsIGJlaGF2aW9yLiAgTm90ZSB0aGF0IGlmIGRlY29kZT1GYWxzZSBub25lIG9mIHRoZQorICAgICAgICAjIGRlY29kZXJzIHdpbGwgZ2V0IGludm9sdmVkLCBzbyB0aGlzIGlzIHRoZSBvbmx5IHRlc3Qgd2UgbmVlZAorICAgICAgICAjIGZvciB0aGlzIGJlaGF2aW9yLgorICAgICAgICBtID0gc2VsZi5ib2R5dGVzdF9tc2cuZm9ybWF0KGNoYXJzZXQ9J2FzY2lpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdGU9J3F1b3RlZC1wcmludGFibGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlsaW5lPSdwPUMzPUI2c3TDoWwnKS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksICdwPUMzPUI2c3RcdUZGRkRcdUZGRkRsXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAncMO2c3TDoWxcbicuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgZGVmIHRlc3RfOGJpdF9pbl9iYXNlNjRfYm9keShzZWxmKToKKyAgICAgICAgIyBTdGlja2luZyBhbiA4Yml0IGJ5dGUgaW4gYSBiYXNlNjQgYmxvY2sgbWFrZXMgaXQgdW5kZWNvZGFibGUgYnkKKyAgICAgICAgIyBub3JtYWwgbWVhbnMsIHNvIHRoZSBibG9jayBpcyByZXR1cm5lZCB1bmRlY29kZWQsIGJ1dCBhcyBieXRlcy4KKyAgICAgICAgbSA9IHNlbGYuYm9keXRlc3RfbXNnLmZvcm1hdChjaGFyc2V0PSd1dGYtOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RlPSdiYXNlNjQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlsaW5lPSdjTU8yYzNSaGJBw6E9JykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2NNTzJjM1JoYkHDoT1cbicuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgZGVmIHRlc3RfOGJpdF9pbl91dWVuY29kZV9ib2R5KHNlbGYpOgorICAgICAgICAjIFN0aWNraW5nIGFuIDhiaXQgYnl0ZSBpbiBhIHV1ZW5jb2RlIGJsb2NrIG1ha2VzIGl0IHVuZGVjb2RhYmxlIGJ5CisgICAgICAgICMgbm9ybWFsIG1lYW5zLCBzbyB0aGUgYmxvY2sgaXMgcmV0dXJuZWQgdW5kZWNvZGVkLCBidXQgYXMgYnl0ZXMuCisgICAgICAgIG0gPSBzZWxmLmJvZHl0ZXN0X21zZy5mb3JtYXQoY2hhcnNldD0ndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZT0ndXVlbmNvZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlsaW5lPSc8LC5WPFcxQTsgw6EgJykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzwsLlY8VzFBOyDDoSBcbicuZW5jb2RlKCd1dGYtOCcpKQorCisKKyAgICBoZWFkZXJ0ZXN0X2hlYWRlcnMgPSAoCisgICAgICAgICgnRnJvbTogZm9vQGJhci5jb20nLCAoJ0Zyb20nLCAnZm9vQGJhci5jb20nKSksCisgICAgICAgICgnVG86IGLDoXonLCAoJ1RvJywgJz0/dW5rbm93bi04Yml0P3E/Yj1DMz1BMXo/PScpKSwKKyAgICAgICAgKCdTdWJqZWN0OiBNYWludGVuYW50IGplIHZvdXMgcHLDqXNlbnRlIG1vbiBjb2xsw6hndWUsIGxlIHBvdWYgY8OpbMOoYnJlXG4nCisgICAgICAgICAgICAnXHRKZWFuIGRlIEJhZGRpZScsCisgICAgICAgICAgICAoJ1N1YmplY3QnLCAnPT91bmtub3duLThiaXQ/cT9NYWludGVuYW50X2plX3ZvdXNfcHI9QzM9QTlzZW50ZV9tb25fJworICAgICAgICAgICAgICAgICdjb2xsPUMzPUE4Z3VlPTJDX2xlX3BvdWZfYz1DMz1BOWw9QzM9QThicmU/PVxuJworICAgICAgICAgICAgICAgICcgPT91bmtub3duLThiaXQ/cT9fSmVhbl9kZV9CYWRkaWU/PScpKSwKKyAgICAgICAgKCdGcm9tOiBnw7ZzdCcsICgnRnJvbScsICc9P3Vua25vd24tOGJpdD9iP1o4TzJjM1E9Pz0nKSksCisgICAgICAgICkKKyAgICBoZWFkZXJ0ZXN0X21zZyA9ICgnXG4nLmpvaW4oW3NyYyBmb3IgKHNyYywgXykgaW4gaGVhZGVydGVzdF9oZWFkZXJzXSkgKworICAgICAgICAnXG5ZZXMsIHRoZXkgYXJlIGZseWluZy5cbicpLmVuY29kZSgndXRmLTgnKQorCisgICAgZGVmIHRlc3RfZ2V0XzhiaXRfaGVhZGVyKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoc2VsZi5oZWFkZXJ0ZXN0X21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobXNnLmdldCgndG8nKSksICdiXHVGRkZEXHVGRkZEeicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG1zZ1sndG8nXSksICdiXHVGRkZEXHVGRkZEeicpCisKKyAgICBkZWYgdGVzdF9wcmludF84Yml0X2hlYWRlcnMoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhzZWxmLmhlYWRlcnRlc3RfbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnJvbToge30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbzoge30KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJqZWN0OiB7fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyb206IHt9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBZZXMsIHRoZXkgYXJlIGZseWluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpLmZvcm1hdCgqW2V4cGVjdGVkWzFdIGZvciAoXywgZXhwZWN0ZWQpIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXJ0ZXN0X2hlYWRlcnNdKSkKKworICAgIGRlZiB0ZXN0X3ZhbHVlc193aXRoXzhiaXRfaGVhZGVycyhzZWxmKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKHNlbGYuaGVhZGVydGVzdF9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFtzdHIoeCkgZm9yIHggaW4gbXNnLnZhbHVlcygpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZm9vQGJhci5jb20nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiXHVGRkZEXHVGRkZEeicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01haW50ZW5hbnQgamUgdm91cyBwclx1RkZGRFx1RkZGRHNlbnRlIG1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xsXHVGRkZEXHVGRkZEZ3VlLCBsZSBwb3VmICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NcdUZGRkRcdUZGRkRsXHVGRkZEXHVGRkZEYnJlXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcdEplYW4gZGUgQmFkZGllJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ1x1RkZGRFx1RkZGRHN0Il0pCisKKyAgICBkZWYgdGVzdF9pdGVtc193aXRoXzhiaXRfaGVhZGVycyhzZWxmKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKHNlbGYuaGVhZGVydGVzdF9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFsoc3RyKHgpLCBzdHIoeSkpIGZvciAoeCwgeSkgaW4gbXNnLml0ZW1zKCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygnRnJvbScsICdmb29AYmFyLmNvbScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnVG8nLCAnYlx1RkZGRFx1RkZGRHonKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1N1YmplY3QnLCAnTWFpbnRlbmFudCBqZSB2b3VzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJcdUZGRkRcdUZGRkRzZW50ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vbiBjb2xsXHVGRkZEXHVGRkZEZ3VlLCBsZSBwb3VmICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY1x1RkZGRFx1RkZGRGxcdUZGRkRcdUZGRkRicmVcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHRKZWFuIGRlIEJhZGRpZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRnJvbScsICdnXHVGRkZEXHVGRkZEc3QnKV0pCisKKyAgICBkZWYgdGVzdF9nZXRfYWxsX3dpdGhfOGJpdF9oZWFkZXJzKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoc2VsZi5oZWFkZXJ0ZXN0X21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoW3N0cih4KSBmb3IgeCBpbiBtc2cuZ2V0X2FsbCgnZnJvbScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZm9vQGJhci5jb20nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnXHVGRkZEXHVGRkZEc3QnXSkKKworICAgIGRlZiB0ZXN0X2dldF9jb250ZW50X3R5cGVfd2l0aF84Yml0KHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXModGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbFx4QTdpbjsgY2hhcnNldD11dGYtOAorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpLCAidGV4dC9wbFx1RkZGRGluIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSwgInRleHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfY29udGVudF9zdWJ0eXBlKCksICJwbFx1RkZGRGluIikKKworICAgIGRlZiB0ZXN0X2dldF9wYXJhbXNfd2l0aF84Yml0KHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoCisgICAgICAgICAgICAnWC1IZWFkZXI6IGZvbz1ceGE3bmU7IGJceGE3cj10d287IGJhej10aHJlZVxuJy5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtcyhoZWFkZXI9J3gtaGVhZGVyJyksCisgICAgICAgICAgIFsoJ2ZvbycsICdcdUZGRkRuZScpLCAoJ2JcdUZGRkRyJywgJ3R3bycpLCAoJ2JheicsICd0aHJlZScpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCdGb28nLCBoZWFkZXI9J3gtaGVhZGVyJyksICdcdUZGRmRuZScpCisgICAgICAgICMgWFhYOiBzb21lZGF5IHlvdSBtaWdodCBiZSBhYmxlIHRvIGdldCAnYlx4YTdyJywgZm9yIG5vdyB5b3UgY2FuJ3QuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgnYlx4YTdyJywgaGVhZGVyPSd4LWhlYWRlcicpLCBOb25lKQorCisgICAgZGVmIHRlc3RfZ2V0X3JmYzIyMzFfcGFyYW1zX3dpdGhfOGJpdChzZWxmKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWk7CisgICAgICAgICAgICAgdGl0bGUqPXVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMG5vdCUyMGZceGE3biIiIgorICAgICAgICAgICAgICkuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXJhbSgndGl0bGUnKSwKKyAgICAgICAgICAgICgndXMtYXNjaWknLCAnZW4nLCAnVGhpcyBpcyBub3QgZlx1RkZGRG4nKSkKKworICAgIGRlZiB0ZXN0X3NldF9yZmMyMjMxX3BhcmFtc193aXRoXzhiaXQoc2VsZik6CisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXVzLWFzY2lpOworICAgICAgICAgICAgIHRpdGxlKj11cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBub3QlMjBmXHhhN24iIiIKKyAgICAgICAgICAgICApLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BhcmFtKCd0aXRsZScpLCAndGVzdCcpCisKKyAgICBkZWYgdGVzdF9kZWxfcmZjMjIzMV9wYXJhbXNfd2l0aF84Yml0KHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXModGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaTsKKyAgICAgICAgICAgICB0aXRsZSo9dXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwbm90JTIwZlx4YTduIiIiCisgICAgICAgICAgICAgKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgbXNnLmRlbF9wYXJhbSgndGl0bGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGFyYW0oJ3RpdGxlJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9jb250ZW50X21haW50eXBlKCksICd0ZXh0JykKKworICAgIGRlZiB0ZXN0X2dldF9wYXlsb2FkX3dpdGhfOGJpdF9jdGVfaGVhZGVyKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXModGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJceGE3c2U2NAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PWxhdGluLTEKKworICAgICAgICAgICAgcGF5bG9hZAorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cuZ2V0X3BheWxvYWQoKSwgJ3BheWxvYWRcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgYidwYXlsb2FkXG4nKQorCisgICAgbm9uX2xhdGluX2Jpbl9tc2cgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICBGcm9tOiBmb29AYmFyLmNvbQorICAgICAgICBUbzogYsOhegorICAgICAgICBTdWJqZWN0OiBNYWludGVuYW50IGplIHZvdXMgcHLDqXNlbnRlIG1vbiBjb2xsw6hndWUsIGxlIHBvdWYgY8OpbMOoYnJlCisgICAgICAgIFx0SmVhbiBkZSBCYWRkaWUKKyAgICAgICAgTWltZS1WZXJzaW9uOiAxLjAKKyAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgINCU0LAsINC+0L3QuCDQu9C10YLRj9GCLgorICAgICAgICAiIiIpLmVuY29kZSgndXRmLTgnKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoc2VsZi5ub25fbGF0aW5fYmluX21zZykKKyAgICAgICAgb3V0ID0gQnl0ZXNJTygpCisgICAgICAgIGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihvdXQpLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBzZWxmLm5vbl9sYXRpbl9iaW5fbXNnKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZ2VuZXJhdG9yX2hhbmRsZXNfTm9uZV9ib2R5KHNlbGYpOgorICAgICAgICAjSXNzdWUgMTEwMTkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZS5NZXNzYWdlKCkKKyAgICAgICAgb3V0ID0gQnl0ZXNJTygpCisgICAgICAgIGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihvdXQpLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBiIlxuIikKKworICAgIG5vbl9sYXRpbl9iaW5fbXNnX2FzN2JpdF93cmFwcGVkID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgRnJvbTogZm9vQGJhci5jb20KKyAgICAgICAgVG86ID0/dW5rbm93bi04Yml0P3E/Yj1DMz1BMXo/PQorICAgICAgICBTdWJqZWN0OiA9P3Vua25vd24tOGJpdD9xP01haW50ZW5hbnRfamVfdm91c19wcj1DMz1BOXNlbnRlX21vbl9jb2xsPUMzPUE4Z3VlPz0KKyAgICAgICAgID0/dW5rbm93bi04Yml0P3E/PTJDX2xlX3BvdWZfYz1DMz1BOWw9QzM9QThicmU/PQorICAgICAgICAgPT91bmtub3duLThiaXQ/cT9fSmVhbl9kZV9CYWRkaWU/PQorICAgICAgICBNaW1lLVZlcnNpb246IDEuMAorICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAwSlRRc0N3ZzBMN1F2ZEM0SU5DNzBMWFJndEdQMFlJdUNnPT0KKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZ2VuZXJhdG9yX2hhbmRsZXNfOGJpdChzZWxmKToKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKHNlbGYubm9uX2xhdGluX2Jpbl9tc2cpCisgICAgICAgIG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcihvdXQpLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBzZWxmLm5vbl9sYXRpbl9iaW5fbXNnX2FzN2JpdF93cmFwcGVkKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZ2VuZXJhdG9yX3dpdGhfdW5peF9mcm9tKHNlbGYpOgorICAgICAgICAjIFRoZSB1bml4ZnJvbSBjb250YWlucyBhIGN1cnJlbnQgZGF0ZSwgc28gd2UgY2FuJ3QgY2hlY2sgaXQKKyAgICAgICAgIyBsaXRlcmFsbHkuICBKdXN0IG1ha2Ugc3VyZSB0aGUgZmlyc3Qgd29yZCBpcyAnRnJvbScgYW5kIHRoZQorICAgICAgICAjIHJlc3Qgb2YgdGhlIG1lc3NhZ2UgbWF0Y2hlcyB0aGUgaW5wdXQuCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhzZWxmLm5vbl9sYXRpbl9iaW5fbXNnKQorICAgICAgICBvdXQgPSBCeXRlc0lPKCkKKyAgICAgICAgZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yKG91dCkuZmxhdHRlbihtc2csIHVuaXhmcm9tPVRydWUpCisgICAgICAgIGxpbmVzID0gb3V0LmdldHZhbHVlKCkuc3BsaXQoYidcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbMF0uc3BsaXQoKVswXSwgYidGcm9tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1xuJy5qb2luKGxpbmVzWzE6XSksIHNlbGYubm9uX2xhdGluX2Jpbl9tc2cpCisKKyAgICBub25fbGF0aW5fYmluX21zZ19hczdiaXQgPSBub25fbGF0aW5fYmluX21zZ19hczdiaXRfd3JhcHBlZC5zcGxpdCgnXG4nKQorICAgIG5vbl9sYXRpbl9iaW5fbXNnX2FzN2JpdFsyOjRdID0gWworICAgICAgICAnU3ViamVjdDogPT91bmtub3duLThiaXQ/cT9NYWludGVuYW50X2plX3ZvdXNfcHI9QzM9QTlzZW50ZV9tb25fJworICAgICAgICAgJ2NvbGw9QzM9QThndWU9MkNfbGVfcG91Zl9jPUMzPUE5bD1DMz1BOGJyZT89J10KKyAgICBub25fbGF0aW5fYmluX21zZ19hczdiaXQgPSAnXG4nLmpvaW4obm9uX2xhdGluX2Jpbl9tc2dfYXM3Yml0KQorCisgICAgZGVmIHRlc3RfbWVzc2FnZV9mcm9tX2JpbmFyeV9maWxlKHNlbGYpOgorICAgICAgICBmbiA9ICd0ZXN0Lm1zZycKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgZm4pCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB0ZXN0ZmlsZS53cml0ZShzZWxmLm5vbl9sYXRpbl9iaW5fbXNnKQorICAgICAgICB3aXRoIG9wZW4oZm4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgbSA9IGVtYWlsLnBhcnNlci5CeXRlc1BhcnNlcigpLnBhcnNlKHRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgc2VsZi5ub25fbGF0aW5fYmluX21zZ19hczdiaXQpCisKKyAgICBsYXRpbl9iaW5fbXNnID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgRnJvbTogZm9vQGJhci5jb20KKyAgICAgICAgVG86IERpbnNkYWxlCisgICAgICAgIFN1YmplY3Q6IE51ZGdlIG51ZGdlLCB3aW5rLCB3aW5rCisgICAgICAgIE1pbWUtVmVyc2lvbjogMS4wCisgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0ibGF0aW4tMSIKKyAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgIG9oIGzDoCBsw6AsIGtub3cgd2hhdCBJIG1lYW4sIGtub3cgd2hhdCBJIG1lYW4/CisgICAgICAgICIiIikuZW5jb2RlKCdsYXRpbi0xJykKKworICAgIGxhdGluX2Jpbl9tc2dfYXM3Yml0ID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgRnJvbTogZm9vQGJhci5jb20KKyAgICAgICAgVG86IERpbnNkYWxlCisgICAgICAgIFN1YmplY3Q6IE51ZGdlIG51ZGdlLCB3aW5rLCB3aW5rCisgICAgICAgIE1pbWUtVmVyc2lvbjogMS4wCisgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTktMSIKKyAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgIG9oIGw9RTAgbD1FMCwga25vdyB3aGF0IEkgbWVhbiwga25vdyB3aGF0IEkgbWVhbj8KKyAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2dlbmVyYXRvcl9yZWVuY29kZXNfdG9fcXVvcHJpX3doZW5fYXBwcm9wcmlhdGUoc2VsZik6CisgICAgICAgIG0gPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoc2VsZi5sYXRpbl9iaW5fbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgc2VsZi5sYXRpbl9iaW5fbXNnX2FzN2JpdCkKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfZ2VuZXJhdG9yX2VtaXRzX3VuaWNvZGVfYm9keShzZWxmKToKKyAgICAgICAgbSA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhzZWxmLmxhdGluX2Jpbl9tc2cpCisgICAgICAgIG91dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZW1haWwuZ2VuZXJhdG9yLkRlY29kZWRHZW5lcmF0b3Iob3V0KS5mbGF0dGVuKG0pCisgICAgICAgICNEZWNvZGVkSGVhZGVyIG91dHB1dCBjb250YWlucyBhbiBleHRyYSBibGFuayBsaW5lIGNvbXBhcmVkCisgICAgICAgICN0byB0aGUgaW5wdXQgbWVzc2FnZS4gIFJETTogbm90IHN1cmUgaWYgdGhpcyBpcyBhIGJ1ZyBvciBub3QsCisgICAgICAgICNidXQgaXQgaXMgbm90IHNwZWNpZmljIHRvIHRoZSA4Yml0LT43Yml0IGNvbnZlcnNpb24uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCksCisgICAgICAgICAgICBzZWxmLmxhdGluX2Jpbl9tc2cuZGVjb2RlKCdsYXRpbi0xJykrJ1xuJykKKworICAgIGRlZiB0ZXN0X2J5dGVzX2ZlZWRwYXJzZXIoc2VsZik6CisgICAgICAgIGJmcCA9IGVtYWlsLmZlZWRwYXJzZXIuQnl0ZXNGZWVkUGFyc2VyKCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYubGF0aW5fYmluX21zZyksIDEwKToKKyAgICAgICAgICAgIGJmcC5mZWVkKHNlbGYubGF0aW5fYmluX21zZ1tpOmkrMTBdKQorICAgICAgICBtID0gYmZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHNlbGYubGF0aW5fYmluX21zZ19hczdiaXQpCisKKyAgICBkZWYgdGVzdF9jcmxmX2ZsYXR0ZW4oc2VsZik6CisgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18yNi50eHQnLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2J5dGVzKHRleHQpCisgICAgICAgIHMgPSBCeXRlc0lPKCkKKyAgICAgICAgZyA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihzKQorICAgICAgICBnLmZsYXR0ZW4obXNnLCBsaW5lc2VwPSdcclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIHRleHQpCisKKyAgICBkZWYgdGVzdF84Yml0X211bHRpcGFydChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxMTYwNQorICAgICAgICBzb3VyY2UgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgRGF0ZTogRnJpLCAxOCBNYXIgMjAxMSAxNzoxNTo0MyArMDEwMAorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vZHdhdGNoLU5ld3NsZXR0ZXIgPGJhckBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgIFN1YmplY3Q6IEFrdHVlbGxlcyB6dSBKYXBhbiwgS2xvbmZsZWlzY2ggdW5kIFNtaWxleS1TeXN0ZW0KKyAgICAgICAgICAgIE1lc3NhZ2UtSUQ6IDw3NmE0ODZiZWU2MmIwZDIwMGYzM2RjMmNhMDgyMjBhZEBsb2NhbGhvc3QubG9jYWxkb21haW4+CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7CisgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5PSJiMV83NmE0ODZiZWU2MmIwZDIwMGYzM2RjMmNhMDgyMjBhZCIKKworICAgICAgICAgICAgLS1iMV83NmE0ODZiZWU2MmIwZDIwMGYzM2RjMmNhMDgyMjBhZAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgR3V0ZW4gVGFnLCAsCisKKyAgICAgICAgICAgIG1pdCBncm/Dn2VyIEJldHJvZmZlbmhlaXQgdmVyZm9sZ2VuIGF1Y2ggd2lyIGltIGZvb2R3YXRjaC1UZWFtIGRpZQorICAgICAgICAgICAgTmFjaHJpY2h0ZW4gYXVzIEphcGFuLgorCisKKyAgICAgICAgICAgIC0tYjFfNzZhNDg2YmVlNjJiMGQyMDBmMzNkYzJjYTA4MjIwYWQKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKyAgICAgICAgICAgIDxodG1sIGxhbmc9ImRlIj4KKyAgICAgICAgICAgIDxoZWFkPgorICAgICAgICAgICAgICAgICAgICA8dGl0bGU+Zm9vZHdhdGNoIC0gTmV3c2xldHRlcjwvdGl0bGU+CisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgICAgICA8Ym9keT4KKyAgICAgICAgICAgICAgPHA+bWl0IGdybyZzemxpZztlciBCZXRyb2ZmZW5oZWl0IHZlcmZvbGdlbiBhdWNoIHdpciBpbSBmb29kd2F0Y2gtVGVhbQorICAgICAgICAgICAgICAgICBkaWUgTmFjaHJpY2h0ZW4gYXVzIEphcGFuLjwvcD4KKyAgICAgICAgICAgIDwvYm9keT4KKyAgICAgICAgICAgIDwvaHRtbD4KKyAgICAgICAgICAgIC0tYjFfNzZhNDg2YmVlNjJiMGQyMDBmMzNkYzJjYTA4MjIwYWQtLQorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgndXRmLTgnKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoc291cmNlKQorICAgICAgICBzID0gQnl0ZXNJTygpCisgICAgICAgIGcgPSBlbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IocykKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIHNvdXJjZSkKKworICAgIG1heERpZmYgPSBOb25lCisKKworY2xhc3MgQmFzZVRlc3RCeXRlc0dlbmVyYXRvcklkZW1wb3RlbnQ6CisKKyAgICBtYXhEaWZmID0gTm9uZQorCisgICAgZGVmIF9tc2dvYmooc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICB3aXRoIG9wZW5maWxlKGZpbGVuYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubm9ybWFsaXplX2xpbmVzZXBfcmVnZXguc3ViKHNlbGYuYmxpbmVzZXAsIGRhdGEpCisgICAgICAgIG1zZyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhkYXRhKQorICAgICAgICByZXR1cm4gbXNnLCBkYXRhCisKKyAgICBkZWYgX2lkZW1wb3RlbnQoc2VsZiwgbXNnLCBkYXRhLCB1bml4ZnJvbT1GYWxzZSk6CisgICAgICAgIGIgPSBCeXRlc0lPKCkKKyAgICAgICAgZyA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihiLCBtYXhoZWFkZXJsZW49MCkKKyAgICAgICAgZy5mbGF0dGVuKG1zZywgdW5peGZyb209dW5peGZyb20sIGxpbmVzZXA9c2VsZi5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydEJ5dGVTdHJpbmdzRXF1YWwoZGF0YSwgYi5nZXR2YWx1ZSgpKQorCisgICAgZGVmIGFzc2VydEJ5dGVTdHJpbmdzRXF1YWwoc2VsZiwgc3RyMSwgc3RyMik6CisgICAgICAgICMgTm90IHVzaW5nIHNlbGYuYmxpbmVzZXAgaGVyZSBpcyBpbnRlbnRpb25hbC4gIFRoaXMgd2F5IHRoZSBvdXRwdXQKKyAgICAgICAgIyBpcyBtb3JlIHVzZWZ1bCB3aGVuIHRoZSBmYWlsdXJlIHJlc3VsdHMgaW4gbWl4ZWQgbGluZSBlbmRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChzdHIxLnNwbGl0KGInXG4nKSwgc3RyMi5zcGxpdChiJ1xuJykpCisKKworY2xhc3MgVGVzdEJ5dGVzR2VuZXJhdG9ySWRlbXBvdGVudE5MKEJhc2VUZXN0Qnl0ZXNHZW5lcmF0b3JJZGVtcG90ZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdElkZW1wb3RlbnQpOgorICAgIGxpbmVzZXAgPSAnXG4nCisgICAgYmxpbmVzZXAgPSBiJ1xuJworICAgIG5vcm1hbGl6ZV9saW5lc2VwX3JlZ2V4ID0gcmUuY29tcGlsZShicidcclxuJykKKworCitjbGFzcyBUZXN0Qnl0ZXNHZW5lcmF0b3JJZGVtcG90ZW50Q1JMRihCYXNlVGVzdEJ5dGVzR2VuZXJhdG9ySWRlbXBvdGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RJZGVtcG90ZW50KToKKyAgICBsaW5lc2VwID0gJ1xyXG4nCisgICAgYmxpbmVzZXAgPSBiJ1xyXG4nCisgICAgbm9ybWFsaXplX2xpbmVzZXBfcmVnZXggPSByZS5jb21waWxlKGJyJyg/PCFccilcbicpCisKKwogY2xhc3MgVGVzdEJhc2U2NCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbGVuKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTMyMjIsOSArMzg3OSw5IEBACiAgICAgICAgICMgYnVpbHQtaW4gZW5jb2RpbmdzIHdoZXJlIHRoZSBoZWFkZXIgZW5jb2RpbmcgaXMgUVAgYnV0IHRoZSBib2R5CiAgICAgICAgICMgZW5jb2RpbmcgaXMgbm90LgogICAgICAgICBmcm9tIGVtYWlsIGltcG9ydCBjaGFyc2V0IGFzIENoYXJzZXRNb2R1bGUKLSAgICAgICAgQ2hhcnNldE1vZHVsZS5hZGRfY2hhcnNldCgnZmFrZScsIENoYXJzZXRNb2R1bGUuUVAsIE5vbmUpCisgICAgICAgIENoYXJzZXRNb2R1bGUuYWRkX2NoYXJzZXQoJ2Zha2UnLCBDaGFyc2V0TW9kdWxlLlFQLCBOb25lLCAndXRmLTgnKQogICAgICAgICBjID0gQ2hhcnNldCgnZmFrZScpCi0gICAgICAgIGVxKCdoZWxsbyB3XHhmNnJsZCcsIGMuYm9keV9lbmNvZGUoJ2hlbGxvIHdceGY2cmxkJykpCisgICAgICAgIGVxKCdoZWxsbyB3b3JsZCcsIGMuYm9keV9lbmNvZGUoJ2hlbGxvIHdvcmxkJykpCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2NoYXJzZXRfbmFtZShzZWxmKToKICAgICAgICAgY2hhcnNldCA9IENoYXJzZXQoJ3VzLWFzY2lpJykKQEAgLTM1MTcsNiArNDE3NCwyMCBAQAogICAgICAgICBoLmFwcGVuZCh4LCBlcnJvcnM9J3JlcGxhY2UnKQogICAgICAgICBlcShzdHIoaCksIGUpCiAKKyAgICBkZWYgdGVzdF9lc2NhcGVkXzhiaXRfaGVhZGVyKHNlbGYpOgorICAgICAgICB4ID0gYidZbndwNGRVRWJheSBBdWN0aW9uIFNlbWlhci0gTm8gQ2hhcmdlIFx4OTYgRWFybiBCaWcnCisgICAgICAgIHggPSB4LmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgaCA9IEhlYWRlcih4LCBjaGFyc2V0PWVtYWlsLmNoYXJzZXQuVU5LTk9XTjhCSVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1lud3A0ZFVFYmF5IEF1Y3Rpb24gU2VtaWFyLSBObyBDaGFyZ2UgXHVGRkZEIEVhcm4gQmlnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlcihoKSwgWyh4LCAndW5rbm93bi04Yml0JyldKQorCisgICAgZGVmIHRlc3RfbW9kaWZ5X3JldHVybmVkX2xpc3RfZG9lc19ub3RfY2hhbmdlX2hlYWRlcihzZWxmKToKKyAgICAgICAgaCA9IEhlYWRlcigndGVzdCcpCisgICAgICAgIGNodW5rcyA9IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyKGgpCisgICAgICAgIGNodW5rcy5hcHBlbmQoKCdhc2NpaScsICd0ZXN0MicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwgJ3Rlc3QnKQorCiAgICAgZGVmIHRlc3RfZW5jb2RlZF9hZGphY2VudF9ub25lbmNvZGVkKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgaCA9IEhlYWRlcigpCkBAIC0zNTUyLDYgKzQyMjMsMTEgQEAKICAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiRW1wdHlIZWFkZXI6IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobXNnKSwgIkVtcHR5SGVhZGVyOiBcblxuIikKIAorICAgIGRlZiB0ZXN0X2VuY29kZV9wcmVzZXJ2ZXNfbGVhZGluZ193c19vbl92YWx1ZShzZWxmKToKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZ1snU29tZUhlYWRlciddID0gJyAgIHZhbHVlIHdpdGggbGVhZGluZyB3cycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobXNnKSwgIlNvbWVIZWFkZXI6ICAgIHZhbHVlIHdpdGggbGVhZGluZyB3c1xuXG4iKQorCiAKIAogIyBUZXN0IFJGQyAyMjMxIGhlYWRlciBwYXJhbWV0ZXJzIChlbi9kZSljb2RpbmcKQEAgLTM1OTEsNyArNDI2Nyw3IEBACiBTdWJqZWN0OiBUaGlzIGlzIGEgdGVzdCBtZXNzYWdlCiBEYXRlOiBGcmksIDQgTWF5IDIwMDEgMTQ6MDU6NDQgLTA0MDAKIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD11cy1hc2NpaTsKLSB0aXRsZSo9InVzLWFzY2lpJ2VuJ1RoaXMlMjBpcyUyMGV2ZW4lMjBtb3JlJTIwJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwaXNuJTI3dCUyMGl0JTIxIgorIHRpdGxlKj11cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMQogCiAKIEhpLApAQCAtMzYwMSw2ICs0Mjc3LDE2IEBACiAtTWUKICIiIikKIAorICAgIGRlZiB0ZXN0X3NldF9wYXJhbV9yZXF1b3RlKHNlbGYpOgorICAgICAgICBtc2cgPSBNZXNzYWdlKCkKKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgdGl0bGU9ImZvbyInKQorICAgICAgICBtc2cuc2V0X3BhcmFtKCd0aXRsZScsICdiYXInLCByZXF1b3RlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZ1snY29udGVudC10eXBlJ10sICd0ZXh0L3BsYWluOyB0aXRsZT1iYXInKQorICAgICAgICAjIHRzcGVjaWFsIGlzIHN0aWxsIHF1b3RlZC4KKyAgICAgICAgbXNnLnNldF9wYXJhbSgndGl0bGUnLCAiKGJhciliZWxsIiwgcmVxdW90ZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ2NvbnRlbnQtdHlwZSddLCAndGV4dC9wbGFpbjsgdGl0bGU9IihiYXIpYmVsbCInKQorCiAgICAgZGVmIHRlc3RfZGVsX3BhcmFtKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYubmRpZmZBc3NlcnRFcXVhbAogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18wMS50eHQnKQpAQCAtMzYyMSw3ICs0MzA3LDcgQEAKIFN1YmplY3Q6IFRoaXMgaXMgYSB0ZXN0IG1lc3NhZ2UKIERhdGU6IEZyaSwgNCBNYXkgMjAwMSAxNDowNTo0NCAtMDQwMAogQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1cy1hc2NpaSI7Ci0gdGl0bGUqPSJ1cy1hc2NpaSdlbidUaGlzJTIwaXMlMjBldmVuJTIwbW9yZSUyMCUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMGlzbiUyN3QlMjBpdCUyMSIKKyB0aXRsZSo9dXMtYXNjaWknZW4nVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAlMkElMkElMkFmdW4lMkElMkElMkElMjBpc24lMjd0JTIwaXQlMjEKIAogCiBIaSwKQEAgLTM2MzYsNiArNDMyMiwzMiBAQAogICAgICAgICBtc2cgPSBzZWxmLl9tc2dvYmooJ21zZ18zMi50eHQnKQogICAgICAgICBlcShtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpLCAndXMtYXNjaWknKQogCisgICAgZGVmIHRlc3RfcmZjMjIzMV9wYXJzZV9yZmNfcXVvdGluZyhzZWxmKToKKyAgICAgICAgbSA9IHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7CisgICAgICAgICAgICBcdGZpbGVuYW1lKjAqPScnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjA7CisgICAgICAgICAgICBcdGZpbGVuYW1lKjEqPSUyQSUyQSUyQWZ1biUyQSUyQSUyQSUyMDsKKyAgICAgICAgICAgIFx0ZmlsZW5hbWUqMj0iaXMgaXQgbm90LnBkZiIKKworICAgICAgICAgICAgJycnKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgbXNnLmFzX3N0cmluZygpKQorCisgICAgZGVmIHRlc3RfcmZjMjIzMV9wYXJzZV9leHRyYV9xdW90aW5nKHNlbGYpOgorICAgICAgICBtID0gdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsKKyAgICAgICAgICAgIFx0ZmlsZW5hbWUqMCo9IicnVGhpcyUyMGlzJTIwZXZlbiUyMG1vcmUlMjAiOworICAgICAgICAgICAgXHRmaWxlbmFtZSoxKj0iJTJBJTJBJTJBZnVuJTJBJTJBJTJBJTIwIjsKKyAgICAgICAgICAgIFx0ZmlsZW5hbWUqMj0iaXMgaXQgbm90LnBkZiIKKworICAgICAgICAgICAgJycnKQorICAgICAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9maWxlbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIGlzIGV2ZW4gbW9yZSAqKipmdW4qKiogaXMgaXQgbm90LnBkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgbXNnLmFzX3N0cmluZygpKQorCiAgICAgZGVmIHRlc3RfcmZjMjIzMV9ub19sYW5ndWFnZV9vcl9jaGFyc2V0KHNlbGYpOgogICAgICAgICBtID0gJycnXAogQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF9jb2RlY3MucHkgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weQppbmRleCBhY2MxOWMzLi5jYTg1ZjU3IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weQorKysgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX2NvZGVjcy5weQpAQCAtMTMsNyArMTMsNyBAQAogIyBXZSdyZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIuMywgYnV0IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgYnVpbHQtaW4gQXNpYW4KICMgY29kZWNzLCBzbyB3ZSBoYXZlIHRvIHNraXAgYWxsIHRoZXNlIHRlc3RzLgogdHJ5OgotICAgIHN0cignZm9vJywgJ2V1Yy1qcCcpCisgICAgc3RyKGInZm9vJywgJ2V1Yy1qcCcpCiBleGNlcHQgTG9va3VwRXJyb3I6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QKIApAQCAtMjIsMTEgKzIyLDE0IEBACiBjbGFzcyBUZXN0RW1haWxBc2lhbkNvZGVjcyhUZXN0RW1haWxCYXNlKToKICAgICBkZWYgdGVzdF9qYXBhbmVzZV9jb2RlY3Moc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCi0gICAgICAgIGogPSBDaGFyc2V0KCJldWMtanAiKQotICAgICAgICBnID0gQ2hhcnNldCgiaXNvLTg4NTktMSIpCisgICAgICAgIGpjb2RlID0gImV1Yy1qcCIKKyAgICAgICAgZ2NvZGUgPSAiaXNvLTg4NTktMSIKKyAgICAgICAgaiA9IENoYXJzZXQoamNvZGUpCisgICAgICAgIGcgPSBDaGFyc2V0KGdjb2RlKQogICAgICAgICBoID0gSGVhZGVyKCJIZWxsbyBXb3JsZCEiKQotICAgICAgICBqaGVsbG8gPSAnXHhhNVx4Y2ZceGE1XHhlZFx4YTFceGJjXHhhNVx4ZWZceGExXHhiY1x4YTVceGViXHhhNVx4YzlceGExXHhhYScKLSAgICAgICAgZ2hlbGxvID0gJ0dyXHhmY1x4ZGYgR290dCEnCisgICAgICAgIGpoZWxsbyA9IHN0cihiJ1x4YTVceGNmXHhhNVx4ZWRceGExXHhiY1x4YTVceGVmXHhhMVx4YmMnCisgICAgICAgICAgICAgICAgICAgICBiJ1x4YTVceGViXHhhNVx4YzlceGExXHhhYScsIGpjb2RlKQorICAgICAgICBnaGVsbG8gPSBzdHIoYidHclx4ZmNceGRmIEdvdHQhJywgZ2NvZGUpCiAgICAgICAgIGguYXBwZW5kKGpoZWxsbywgaikKICAgICAgICAgaC5hcHBlbmQoZ2hlbGxvLCBnKQogICAgICAgICAjIEJBVzogVGhpcyB1c2VkIHRvIC0tIGFuZCBtYXliZSBzaG91bGQgLS0gZm9sZCB0aGUgdHdvIGlzby04ODU5LTEKQEAgLTM2LDEzICszOSwxNyBAQAogICAgICAgICAjIGVuY29kZWQgd29yZC4KICAgICAgICAgZXEoaC5lbmNvZGUoKSwgIiIiXAogSGVsbG8gV29ybGQhID0/aXNvLTIwMjItanA/Yj9HeVJDSlU4bGJTRThKVzhoUENWckpVa2hLaHNvUWc9PT89Ci0gPT9pc28tODg1OS0xP3E/R3I9RkM9REY/PSA9P2lzby04ODU5LTE/cT9fR290dCE/PSIiIikKKyA9P2lzby04ODU5LTE/cT9Hcj1GQz1ERl9Hb3R0IT89IiIiKQogICAgICAgICBlcShkZWNvZGVfaGVhZGVyKGguZW5jb2RlKCkpLAotICAgICAgICAgICBbKCdIZWxsbyBXb3JsZCEnLCBOb25lKSwKLSAgICAgICAgICAgICgnXHgxYiRCJU8lbSE8JW8hPCVrJUkhKlx4MWIoQicsICdpc28tMjAyMi1qcCcpLAotICAgICAgICAgICAgKCdHclx4ZmNceGRmIEdvdHQhJywgJ2lzby04ODU5LTEnKV0pCi0gICAgICAgIGludCA9ICd0ZXN0LWphIFx4YTRceGQ4XHhjNVx4ZWFceGI5XHhjNlx4YTRceGI1XHhhNFx4ZWNceGE0XHhiZlx4YTVceGUxXHhhMVx4YmNceGE1XHhlYlx4YTRceGNmXHhiYlx4Y2FceGIyXHhmMVx4YmNceGQ0XHhhNFx4Y2VceGJlXHhiNVx4YzdceGE3XHhhNFx4ZjJceGMyXHhkNFx4YTRceGMzXHhhNFx4YzZceGE0XHhhNFx4YTRceGRlXHhhNFx4YjknCi0gICAgICAgIGggPSBIZWFkZXIoaW50LCBqLCBoZWFkZXJfbmFtZT0iU3ViamVjdCIpCisgICAgICAgICAgIFsoYidIZWxsbyBXb3JsZCEnLCBOb25lKSwKKyAgICAgICAgICAgIChiJ1x4MWIkQiVPJW0hPCVvITwlayVJISpceDFiKEInLCAnaXNvLTIwMjItanAnKSwKKyAgICAgICAgICAgIChiJ0dyXHhmY1x4ZGYgR290dCEnLCBnY29kZSldKQorICAgICAgICBzdWJqZWN0X2J5dGVzID0gKGIndGVzdC1qYSBceGE0XHhkOFx4YzVceGVhXHhiOVx4YzZceGE0XHhiNScKKyAgICAgICAgICAgIGInXHhhNFx4ZWNceGE0XHhiZlx4YTVceGUxXHhhMVx4YmNceGE1XHhlYlx4YTRceGNmXHhiYlx4Y2FceGIyJworICAgICAgICAgICAgYidceGYxXHhiY1x4ZDRceGE0XHhjZVx4YmVceGI1XHhjN1x4YTdceGE0XHhmMlx4YzJceGQ0XHhhNFx4YzMnCisgICAgICAgICAgICBiJ1x4YTRceGM2XHhhNFx4YTRceGE0XHhkZVx4YTRceGI5JykKKyAgICAgICAgc3ViamVjdCA9IHN0cihzdWJqZWN0X2J5dGVzLCBqY29kZSkKKyAgICAgICAgaCA9IEhlYWRlcihzdWJqZWN0LCBqLCBoZWFkZXJfbmFtZT0iU3ViamVjdCIpCiAgICAgICAgICMgdGVzdCBhIHZlcnkgbG9uZyBoZWFkZXIKICAgICAgICAgZW5jID0gaC5lbmNvZGUoKQogICAgICAgICAjIFRLOiBzcGxpdHRpbmcgcG9pbnQgbWF5IGRpZmZlciBieSBjb2RlYyBkZXNpZ24gYW5kL29yIEhlYWRlciBlbmNvZGluZwpAQCAtNTAsMTUgKzU3LDI0IEBACiA9P2lzby0yMDIyLWpwP2I/ZEdWemRDMXFZU0FiSkVJa1dFVnFPVVlrTlNSc0pEOGxZU0U4Sldza1R6dEtHeWhDPz0KICA9P2lzby0yMDIyLWpwP2I/R3lSQ01uRThWQ1JPUGpWSEp5UnlRbFFrUXlSR0pDUWtYaVE1R3loQz89IiIiKQogICAgICAgICAjIFRLOiBmdWxsIGRlY29kZSBjb21wYXJpc29uCi0gICAgICAgIGVxKGguX191bmljb2RlX18oKS5lbmNvZGUoJ2V1Yy1qcCcpLCBpbnQpCisgICAgICAgIGVxKHN0cihoKS5lbmNvZGUoamNvZGUpLCBzdWJqZWN0X2J5dGVzKQorCisgICAgZGVmIHRlc3RfcGF5bG9hZF9lbmNvZGluZ191dGY4KHNlbGYpOgorICAgICAgICBqaGVsbG8gPSBzdHIoYidceGE1XHhjZlx4YTVceGVkXHhhMVx4YmNceGE1XHhlZlx4YTFceGJjJworICAgICAgICAgICAgICAgICAgICAgYidceGE1XHhlYlx4YTVceGM5XHhhMVx4YWEnLCAnZXVjLWpwJykKKyAgICAgICAgbXNnID0gTWVzc2FnZSgpCisgICAgICAgIG1zZy5zZXRfcGF5bG9hZChqaGVsbG8sICd1dGYtOCcpCisgICAgICAgIHVzdHIgPSBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZShtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpoZWxsbywgdXN0cikKIAogICAgIGRlZiB0ZXN0X3BheWxvYWRfZW5jb2Rpbmcoc2VsZik6Ci0gICAgICAgIGpoZWxsbyA9ICdceGE1XHhjZlx4YTVceGVkXHhhMVx4YmNceGE1XHhlZlx4YTFceGJjXHhhNVx4ZWJceGE1XHhjOVx4YTFceGFhJwogICAgICAgICBqY29kZSAgPSAnZXVjLWpwJworICAgICAgICBqaGVsbG8gPSBzdHIoYidceGE1XHhjZlx4YTVceGVkXHhhMVx4YmNceGE1XHhlZlx4YTFceGJjJworICAgICAgICAgICAgICAgICAgICAgYidceGE1XHhlYlx4YTVceGM5XHhhMVx4YWEnLCBqY29kZSkKICAgICAgICAgbXNnID0gTWVzc2FnZSgpCiAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChqaGVsbG8sIGpjb2RlKQotICAgICAgICB1c3RyID0gc3RyKG1zZy5nZXRfcGF5bG9hZCgpLCBtc2cuZ2V0X2NvbnRlbnRfY2hhcnNldCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpoZWxsbywgdXN0ci5lbmNvZGUoamNvZGUpKQorICAgICAgICB1c3RyID0gbXNnLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKS5kZWNvZGUobXNnLmdldF9jb250ZW50X2NoYXJzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqaGVsbG8sIHVzdHIpCiAKIAogDApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF90b3J0dXJlLnB5IGIvTGliL2VtYWlsL3Rlc3QvdGVzdF9lbWFpbF90b3J0dXJlLnB5CmluZGV4IDU3MjMzYmYuLjU0NGIxYmIgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC90ZXN0L3Rlc3RfZW1haWxfdG9ydHVyZS5weQorKysgYi9MaWIvZW1haWwvdGVzdC90ZXN0X2VtYWlsX3RvcnR1cmUucHkKQEAgLTEzLDExICsxMywxMSBAQAogZnJvbSB0eXBlcyBpbXBvcnQgTGlzdFR5cGUKIAogZnJvbSBlbWFpbC50ZXN0LnRlc3RfZW1haWwgaW1wb3J0IFRlc3RFbWFpbEJhc2UKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBUZXN0U2tpcHBlZAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRlc3RTa2lwcGVkLCBydW5fdW5pdHRlc3QKIAogaW1wb3J0IGVtYWlsCiBmcm9tIGVtYWlsIGltcG9ydCBfX2ZpbGVfXyBhcyB0ZXN0ZmlsZQotZnJvbSBlbWFpbC5JdGVyYXRvcnMgaW1wb3J0IF9zdHJ1Y3R1cmUKK2Zyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCBfc3RydWN0dXJlCiAKIGRlZiBvcGVuZmlsZShmaWxlbmFtZSk6CiAgICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBkaXJuYW1lLCBhYnNwYXRoCkBAIC0xMjgsNyArMTI4LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIGZvciB0ZXN0Y2xhc3MgaW4gX3Rlc3RjbGFzc2VzKCk6Ci0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RjbGFzcykKKyAgICAgICAgcnVuX3VuaXR0ZXN0KHRlc3RjbGFzcykKIAogCiAMCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvdXRpbHMucHkgYi9MaWIvZW1haWwvdXRpbHMucHkKaW5kZXggNWY0MGJhYy4uYWM0ZGEzNyAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3V0aWxzLnB5CisrKyBiL0xpYi9lbWFpbC91dGlscy5weQpAQCAtMTQ4LDEzICsxNDgsMTUgQEAKIAogCiAKLWRlZiBtYWtlX21zZ2lkKGlkc3RyaW5nPU5vbmUpOgorZGVmIG1ha2VfbXNnaWQoaWRzdHJpbmc9Tm9uZSwgZG9tYWluPU5vbmUpOgogICAgICIiIlJldHVybnMgYSBzdHJpbmcgc3VpdGFibGUgZm9yIFJGQyAyODIyIGNvbXBsaWFudCBNZXNzYWdlLUlELCBlLmc6CiAKICAgICA8MjAwMjAyMDExOTU2MjcuMzM1MzkuOTY2NzFAbmlnaHRzaGFkZS5sYS5tYXN0YWxlci5jb20+CiAKICAgICBPcHRpb25hbCBpZHN0cmluZyBpZiBnaXZlbiBpcyBhIHN0cmluZyB1c2VkIHRvIHN0cmVuZ3RoZW4gdGhlCi0gICAgdW5pcXVlbmVzcyBvZiB0aGUgbWVzc2FnZSBpZC4KKyAgICB1bmlxdWVuZXNzIG9mIHRoZSBtZXNzYWdlIGlkLiAgT3B0aW9uYWwgZG9tYWluIGlmIGdpdmVuIHByb3ZpZGVzIHRoZQorICAgIHBvcnRpb24gb2YgdGhlIG1lc3NhZ2UgaWQgYWZ0ZXIgdGhlICdAJy4gIEl0IGRlZmF1bHRzIHRvIHRoZSBsb2NhbGx5CisgICAgZGVmaW5lZCBob3N0bmFtZS4KICAgICAiIiIKICAgICB0aW1ldmFsID0gdGltZS50aW1lKCkKICAgICB1dGNkYXRlID0gdGltZS5zdHJmdGltZSgnJVklbSVkJUglTSVTJywgdGltZS5nbXRpbWUodGltZXZhbCkpCkBAIC0xNjQsOCArMTY2LDkgQEAKICAgICAgICAgaWRzdHJpbmcgPSAnJwogICAgIGVsc2U6CiAgICAgICAgIGlkc3RyaW5nID0gJy4nICsgaWRzdHJpbmcKLSAgICBpZGhvc3QgPSBzb2NrZXQuZ2V0ZnFkbigpCi0gICAgbXNnaWQgPSAnPCVzLiVzLiVzJXNAJXM+JyAlICh1dGNkYXRlLCBwaWQsIHJhbmRpbnQsIGlkc3RyaW5nLCBpZGhvc3QpCisgICAgaWYgZG9tYWluIGlzIE5vbmU6CisgICAgICAgIGRvbWFpbiA9IHNvY2tldC5nZXRmcWRuKCkKKyAgICBtc2dpZCA9ICc8JXMuJXMuJXMlc0Alcz4nICUgKHV0Y2RhdGUsIHBpZCwgcmFuZGludCwgaWRzdHJpbmcsIGRvbWFpbikKICAgICByZXR1cm4gbXNnaWQKIAogCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5IGIvTGliL2VuY29kaW5ncy9fX2luaXRfXy5weQppbmRleCBkNzJlYWU5Li5iMTg5YmQ5IDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL19faW5pdF9fLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvX19pbml0X18ucHkKQEAgLTEwLDcgKzEwLDcgQEAKICAgICBFYWNoIGNvZGVjIG1vZHVsZSBtdXN0IGV4cG9ydCB0aGUgZm9sbG93aW5nIGludGVyZmFjZToKIAogICAgICogZ2V0cmVnZW50cnkoKSAtPiBjb2RlY3MuQ29kZWNJbmZvIG9iamVjdAotICAgIFRoZSBnZXRyZWdlbnRyeSgpIEFQSSBtdXN0IGEgQ29kZWNJbmZvIG9iamVjdCB3aXRoIGVuY29kZXIsIGRlY29kZXIsCisgICAgVGhlIGdldHJlZ2VudHJ5KCkgQVBJIG11c3QgcmV0dXJuIGEgQ29kZWNJbmZvIG9iamVjdCB3aXRoIGVuY29kZXIsIGRlY29kZXIsCiAgICAgaW5jcmVtZW50YWxlbmNvZGVyLCBpbmNyZW1lbnRhbGRlY29kZXIsIHN0cmVhbXdyaXRlciBhbmQgc3RyZWFtcmVhZGVyCiAgICAgYXR0dHJpYnV0ZXMgd2hpY2ggYWRoZXJlIHRvIHRoZSBQeXRob24gQ29kZWMgSW50ZXJmYWNlIFN0YW5kYXJkLgogCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKaW5kZXggNGMzNTU4OC4uMjM1ZGViNSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQpAQCAtMTQ2LDYgKzE0NiwxMSBAQAogICAgICdjc2libTg1NycgICAgICAgICAgIDogJ2NwODU3JywKICAgICAnaWJtODU3JyAgICAgICAgICAgICA6ICdjcDg1NycsCiAKKyAgICAjIGNwODU4IGNvZGVjCisgICAgJzg1OCcgICAgICAgICAgICAgICAgOiAnY3A4NTgnLAorICAgICdjc2libTg1OCcgICAgICAgICAgIDogJ2NwODU4JywKKyAgICAnaWJtODU4JyAgICAgICAgICAgICA6ICdjcDg1OCcsCisKICAgICAjIGNwODYwIGNvZGVjCiAgICAgJzg2MCcgICAgICAgICAgICAgICAgOiAnY3A4NjAnLAogICAgICdjc2libTg2MCcgICAgICAgICAgIDogJ2NwODYwJywKQEAgLTQzMCw2ICs0MzUsNyBAQAogICAgICdtYWNsYXRpbjInICAgICAgICAgIDogJ21hY19sYXRpbjInLAogCiAgICAgIyBtYWNfcm9tYW4gY29kZWMKKyAgICAnbWFjaW50b3NoJyAgICAgICAgICA6ICdtYWNfcm9tYW4nLAogICAgICdtYWNyb21hbicgICAgICAgICAgIDogJ21hY19yb21hbicsCiAKICAgICAjIG1hY190dXJraXNoIGNvZGVjCkBAIC00NDIsNyArNDQ4LDcgQEAKICAgICAnY3NwdGNwMTU0JyAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAncHQxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKICAgICAnY3AxNTQnICAgICAgICAgICAgICA6ICdwdGNwMTU0JywKLSAgICAnY3lyaWxsaWMtYXNpYW4nICAgICA6ICdwdGNwMTU0JywKKyAgICAnY3lyaWxsaWNfYXNpYW4nICAgICA6ICdwdGNwMTU0JywKIAogICAgICMjIHF1b3ByaV9jb2RlYyBjb2RlYwogICAgICMncXVvcHJpJyAgICAgICAgICAgICA6ICdxdW9wcmlfY29kZWMnLApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2Jhc2U2NF9jb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjFhOTYxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9iYXNlNjRfY29kZWMucHkKQEAgLTAsMCArMSw1NSBAQAorIiIiUHl0aG9uICdiYXNlNjRfY29kZWMnIENvZGVjIC0gYmFzZTY0IGNvbnRlbnQgdHJhbnNmZXIgZW5jb2RpbmcuCisKK1RoaXMgY29kZWMgZGUvZW5jb2RlcyBmcm9tIGJ5dGVzIHRvIGJ5dGVzIGFuZCBpcyB0aGVyZWZvcmUgdXNhYmxlIHdpdGgKK2J5dGVzLnRyYW5zZm9ybSgpIGFuZCBieXRlcy51bnRyYW5zZm9ybSgpLgorCitXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKyIiIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgYmFzZTY0CisKKyMjIyBDb2RlYyBBUElzCisKK2RlZiBiYXNlNjRfZW5jb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICByZXR1cm4gKGJhc2U2NC5lbmNvZGVieXRlcyhpbnB1dCksIGxlbihpbnB1dCkpCisKK2RlZiBiYXNlNjRfZGVjb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICByZXR1cm4gKGJhc2U2NC5kZWNvZGVieXRlcyhpbnB1dCksIGxlbihpbnB1dCkpCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoaW5wdXQsIGVycm9ycykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gYmFzZTY0X2RlY29kZShpbnB1dCwgZXJyb3JzKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICBhc3NlcnQgc2VsZi5lcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgcmV0dXJuIGJhc2U2NC5lbmNvZGVieXRlcyhpbnB1dCkKKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuZXJyb3JzID09ICdzdHJpY3QnCisgICAgICAgIHJldHVybiBiYXNlNjQuZGVjb2RlYnl0ZXMoaW5wdXQpCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYywgY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgY2hhcmJ1ZmZlcnR5cGUgPSBieXRlcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIGNoYXJidWZmZXJ0eXBlID0gYnl0ZXMKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdiYXNlNjQnLAorICAgICAgICBlbmNvZGU9YmFzZTY0X2VuY29kZSwKKyAgICAgICAgZGVjb2RlPWJhc2U2NF9kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2J6Ml9jb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVkMjI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9iejJfY29kZWMucHkKQEAgLTAsMCArMSw3NyBAQAorIiIiUHl0aG9uICdiejJfY29kZWMnIENvZGVjIC0gYnoyIGNvbXByZXNzaW9uIGVuY29kaW5nLgorCitUaGlzIGNvZGVjIGRlL2VuY29kZXMgZnJvbSBieXRlcyB0byBieXRlcyBhbmQgaXMgdGhlcmVmb3JlIHVzYWJsZSB3aXRoCitieXRlcy50cmFuc2Zvcm0oKSBhbmQgYnl0ZXMudW50cmFuc2Zvcm0oKS4KKworQWRhcHRlZCBieSBSYXltb25kIEhldHRpbmdlciBmcm9tIHpsaWJfY29kZWMucHkgd2hpY2ggd2FzIHdyaXR0ZW4KK2J5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKyIiIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgYnoyICMgdGhpcyBjb2RlYyBuZWVkcyB0aGUgb3B0aW9uYWwgYnoyIG1vZHVsZSAhCisKKyMjIyBDb2RlYyBBUElzCisKK2RlZiBiejJfZW5jb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICByZXR1cm4gKGJ6Mi5jb21wcmVzcyhpbnB1dCksIGxlbihpbnB1dCkpCisKK2RlZiBiejJfZGVjb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICByZXR1cm4gKGJ6Mi5kZWNvbXByZXNzKGlucHV0KSwgbGVuKGlucHV0KSkKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gYnoyX2VuY29kZShpbnB1dCwgZXJyb3JzKQorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBiejJfZGVjb2RlKGlucHV0LCBlcnJvcnMpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycworICAgICAgICBzZWxmLmNvbXByZXNzb2JqID0gYnoyLkJaMkNvbXByZXNzb3IoKQorCisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICBpZiBmaW5hbDoKKyAgICAgICAgICAgIGMgPSBzZWxmLmNvbXByZXNzb2JqLmNvbXByZXNzKGlucHV0KQorICAgICAgICAgICAgcmV0dXJuIGMgKyBzZWxmLmNvbXByZXNzb2JqLmZsdXNoKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbXByZXNzb2JqLmNvbXByZXNzKGlucHV0KQorCisgICAgZGVmIHJlc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmNvbXByZXNzb2JqID0gYnoyLkJaMkNvbXByZXNzb3IoKQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5kZWNvbXByZXNzb2JqID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmRlY29tcHJlc3NvYmouZGVjb21wcmVzcyhpbnB1dCkKKyAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZGVjb21wcmVzc29iaiA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIGNoYXJidWZmZXJ0eXBlID0gYnl0ZXMKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBjaGFyYnVmZmVydHlwZSA9IGJ5dGVzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0iYnoyIiwKKyAgICAgICAgZW5jb2RlPWJ6Ml9lbmNvZGUsCisgICAgICAgIGRlY29kZT1iejJfZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3A3MjAucHkgYi9MaWIvZW5jb2RpbmdzL2NwNzIwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZDYwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwNzIwLnB5CkBAIC0wLDAgKzEsMzA5IEBACisiIiJQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgY3A3MjAgZ2VuZXJhdGVkIG9uIFdpbmRvd3M6CitWaXN0YSA2LjAuNjAwMiBTUDIgTXVsdGlwcm9jZXNzb3IgRnJlZSB3aXRoIHRoZSBjb21tYW5kOgorICBweXRob24gVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weSA3MjAKKyIiIiMiCisKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorCisgICAgZGVmIGVuY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsZXJyb3JzLGVuY29kaW5nX3RhYmxlKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwNzIwJywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQorCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICAjICAweDAwIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MDEnICAgICAgIyAgMHgwMSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDAyJyAgICAgICMgIDB4MDIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgwMycgICAgICAjICAweDAzIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MDQnICAgICAgIyAgMHgwNCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDA1JyAgICAgICMgIDB4MDUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgwNicgICAgICAjICAweDA2IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MDcnICAgICAgIyAgMHgwNyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDA4JyAgICAgICMgIDB4MDggLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHQnICAgICAgICAjICAweDA5IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1xuJyAgICAgICAgIyAgMHgwQSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDBiJyAgICAgICMgIDB4MEIgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgwYycgICAgICAjICAweDBDIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1xyJyAgICAgICAgIyAgMHgwRCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDBlJyAgICAgICMgIDB4MEUgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgwZicgICAgICAjICAweDBGIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MTAnICAgICAgIyAgMHgxMCAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDExJyAgICAgICMgIDB4MTEgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgxMicgICAgICAjICAweDEyIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MTMnICAgICAgIyAgMHgxMyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDE0JyAgICAgICMgIDB4MTQgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgxNScgICAgICAjICAweDE1IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MTYnICAgICAgIyAgMHgxNiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDE3JyAgICAgICMgIDB4MTcgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgxOCcgICAgICAjICAweDE4IC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MTknICAgICAgIyAgMHgxOSAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDFhJyAgICAgICMgIDB4MUEgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgxYicgICAgICAjICAweDFCIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MWMnICAgICAgIyAgMHgxQyAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDFkJyAgICAgICMgIDB4MUQgLT4gQ09OVFJPTCBDSEFSQUNURVIKKyAgICAnXHgxZScgICAgICAjICAweDFFIC0+IENPTlRST0wgQ0hBUkFDVEVSCisgICAgJ1x4MWYnICAgICAgIyAgMHgxRiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICcgJyAgICAgICAgICMgIDB4MjAgLT4gU1BBQ0UKKyAgICAnIScgICAgICAgICAjICAweDIxIC0+IEVYQ0xBTUFUSU9OIE1BUksKKyAgICAnIicgICAgICAgICAjICAweDIyIC0+IFFVT1RBVElPTiBNQVJLCisgICAgJyMnICAgICAgICAgIyAgMHgyMyAtPiBOVU1CRVIgU0lHTgorICAgICckJyAgICAgICAgICMgIDB4MjQgLT4gRE9MTEFSIFNJR04KKyAgICAnJScgICAgICAgICAjICAweDI1IC0+IFBFUkNFTlQgU0lHTgorICAgICcmJyAgICAgICAgICMgIDB4MjYgLT4gQU1QRVJTQU5ECisgICAgIiciICAgICAgICAgIyAgMHgyNyAtPiBBUE9TVFJPUEhFCisgICAgJygnICAgICAgICAgIyAgMHgyOCAtPiBMRUZUIFBBUkVOVEhFU0lTCisgICAgJyknICAgICAgICAgIyAgMHgyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICcqJyAgICAgICAgICMgIDB4MkEgLT4gQVNURVJJU0sKKyAgICAnKycgICAgICAgICAjICAweDJCIC0+IFBMVVMgU0lHTgorICAgICcsJyAgICAgICAgICMgIDB4MkMgLT4gQ09NTUEKKyAgICAnLScgICAgICAgICAjICAweDJEIC0+IEhZUEhFTi1NSU5VUworICAgICcuJyAgICAgICAgICMgIDB4MkUgLT4gRlVMTCBTVE9QCisgICAgJy8nICAgICAgICAgIyAgMHgyRiAtPiBTT0xJRFVTCisgICAgJzAnICAgICAgICAgIyAgMHgzMCAtPiBESUdJVCBaRVJPCisgICAgJzEnICAgICAgICAgIyAgMHgzMSAtPiBESUdJVCBPTkUKKyAgICAnMicgICAgICAgICAjICAweDMyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgICMgIDB4MzMgLT4gRElHSVQgVEhSRUUKKyAgICAnNCcgICAgICAgICAjICAweDM0IC0+IERJR0lUIEZPVVIKKyAgICAnNScgICAgICAgICAjICAweDM1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICAjICAweDM2IC0+IERJR0lUIFNJWAorICAgICc3JyAgICAgICAgICMgIDB4MzcgLT4gRElHSVQgU0VWRU4KKyAgICAnOCcgICAgICAgICAjICAweDM4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAgIyAgMHgzOSAtPiBESUdJVCBOSU5FCisgICAgJzonICAgICAgICAgIyAgMHgzQSAtPiBDT0xPTgorICAgICc7JyAgICAgICAgICMgIDB4M0IgLT4gU0VNSUNPTE9OCisgICAgJzwnICAgICAgICAgIyAgMHgzQyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICc9JyAgICAgICAgICMgIDB4M0QgLT4gRVFVQUxTIFNJR04KKyAgICAnPicgICAgICAgICAjICAweDNFIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAgIyAgMHgzRiAtPiBRVUVTVElPTiBNQVJLCisgICAgJ0AnICAgICAgICAgIyAgMHg0MCAtPiBDT01NRVJDSUFMIEFUCisgICAgJ0EnICAgICAgICAgIyAgMHg0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAgIyAgMHg0MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAgIyAgMHg0MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAgIyAgMHg0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAgIyAgMHg0NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAgIyAgMHg0NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAgIyAgMHg0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAgIyAgMHg0OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAgIyAgMHg0OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ0onICAgICAgICAgIyAgMHg0QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAgIyAgMHg0QiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisgICAgJ0wnICAgICAgICAgIyAgMHg0QyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBMCisgICAgJ00nICAgICAgICAgIyAgMHg0RCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAgIyAgMHg0RSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisgICAgJ08nICAgICAgICAgIyAgMHg0RiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPCisgICAgJ1AnICAgICAgICAgIyAgMHg1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAgIyAgMHg1MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisgICAgJ1InICAgICAgICAgIyAgMHg1MiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBSCisgICAgJ1MnICAgICAgICAgIyAgMHg1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAgIyAgMHg1NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAgIyAgMHg1NSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAgIyAgMHg1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAgIyAgMHg1NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAgIyAgMHg1OCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAgIyAgMHg1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAgIyAgMHg1QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1snICAgICAgICAgIyAgMHg1QiAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1xcJyAgICAgICAgIyAgMHg1QyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXScgICAgICAgICAjICAweDVEIC0+IFJJR0hUIFNRVUFSRSBCUkFDS0VUCisgICAgJ14nICAgICAgICAgIyAgMHg1RSAtPiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgICdfJyAgICAgICAgICMgIDB4NUYgLT4gTE9XIExJTkUKKyAgICAnYCcgICAgICAgICAjICAweDYwIC0+IEdSQVZFIEFDQ0VOVAorICAgICdhJyAgICAgICAgICMgIDB4NjEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEKKyAgICAnYicgICAgICAgICAjICAweDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAgIyAgMHg2MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQworICAgICdkJyAgICAgICAgICMgIDB4NjQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEQKKyAgICAnZScgICAgICAgICAjICAweDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAgIyAgMHg2NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRgorICAgICdnJyAgICAgICAgICMgIDB4NjcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEcKKyAgICAnaCcgICAgICAgICAjICAweDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAgIyAgMHg2OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSQorICAgICdqJyAgICAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICAjICAweDZCIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAgIyAgMHg2QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgICMgIDB4NkQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICAjICAweDZFIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAgIyAgMHg2RiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICAjICAweDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAgIyAgMHg3MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdzJyAgICAgICAgICMgIDB4NzMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFMKKyAgICAndCcgICAgICAgICAjICAweDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAgIyAgMHg3NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVQorICAgICd2JyAgICAgICAgICMgIDB4NzYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFYKKyAgICAndycgICAgICAgICAjICAweDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAgIyAgMHg3OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWAorICAgICd5JyAgICAgICAgICMgIDB4NzkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFkKKyAgICAneicgICAgICAgICAjICAweDdBIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ3snICAgICAgICAgIyAgMHg3QiAtPiBMRUZUIENVUkxZIEJSQUNLRVQKKyAgICAnfCcgICAgICAgICAjICAweDdDIC0+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICAjICAweDdEIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnficgICAgICAgICAjICAweDdFIC0+IFRJTERFCisgICAgJ1x4N2YnICAgICAgIyAgMHg3RiAtPiBDT05UUk9MIENIQVJBQ1RFUgorICAgICdceDgwJworICAgICdceDgxJworICAgICdceGU5JyAgICAgICMgIDB4ODIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGUyJyAgICAgICMgIDB4ODMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ODQnCisgICAgJ1x4ZTAnICAgICAgIyAgMHg4NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgJ1x4ODYnCisgICAgJ1x4ZTcnICAgICAgIyAgMHg4NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAnXHhlYScgICAgICAjICAweDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGViJyAgICAgICMgIDB4ODkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhlOCcgICAgICAjICAweDhBIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAnXHhlZicgICAgICAjICAweDhCIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZWUnICAgICAgIyAgMHg4QyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHg4ZCcKKyAgICAnXHg4ZScKKyAgICAnXHg4ZicKKyAgICAnXHg5MCcKKyAgICAnXHUwNjUxJyAgICAjICAweDkxIC0+IEFSQUJJQyBTSEFEREEKKyAgICAnXHUwNjUyJyAgICAjICAweDkyIC0+IEFSQUJJQyBTVUtVTgorICAgICdceGY0JyAgICAgICMgIDB4OTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4YTQnICAgICAgIyAgMHg5NCAtPiBDVVJSRU5DWSBTSUdOCisgICAgJ1x1MDY0MCcgICAgIyAgMHg5NSAtPiBBUkFCSUMgVEFUV0VFTAorICAgICdceGZiJyAgICAgICMgIDB4OTYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZjknICAgICAgIyAgMHg5NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgJ1x1MDYyMScgICAgIyAgMHg5OCAtPiBBUkFCSUMgTEVUVEVSIEhBTVpBCisgICAgJ1x1MDYyMicgICAgIyAgMHg5OSAtPiBBUkFCSUMgTEVUVEVSIEFMRUYgV0lUSCBNQUREQSBBQk9WRQorICAgICdcdTA2MjMnICAgICMgIDB4OUEgLT4gQVJBQklDIExFVFRFUiBBTEVGIFdJVEggSEFNWkEgQUJPVkUKKyAgICAnXHUwNjI0JyAgICAjICAweDlCIC0+IEFSQUJJQyBMRVRURVIgV0FXIFdJVEggSEFNWkEgQUJPVkUKKyAgICAnXHhhMycgICAgICAjICAweDlDIC0+IFBPVU5EIFNJR04KKyAgICAnXHUwNjI1JyAgICAjICAweDlEIC0+IEFSQUJJQyBMRVRURVIgQUxFRiBXSVRIIEhBTVpBIEJFTE9XCisgICAgJ1x1MDYyNicgICAgIyAgMHg5RSAtPiBBUkFCSUMgTEVUVEVSIFlFSCBXSVRIIEhBTVpBIEFCT1ZFCisgICAgJ1x1MDYyNycgICAgIyAgMHg5RiAtPiBBUkFCSUMgTEVUVEVSIEFMRUYKKyAgICAnXHUwNjI4JyAgICAjICAweEEwIC0+IEFSQUJJQyBMRVRURVIgQkVICisgICAgJ1x1MDYyOScgICAgIyAgMHhBMSAtPiBBUkFCSUMgTEVUVEVSIFRFSCBNQVJCVVRBCisgICAgJ1x1MDYyYScgICAgIyAgMHhBMiAtPiBBUkFCSUMgTEVUVEVSIFRFSAorICAgICdcdTA2MmInICAgICMgIDB4QTMgLT4gQVJBQklDIExFVFRFUiBUSEVICisgICAgJ1x1MDYyYycgICAgIyAgMHhBNCAtPiBBUkFCSUMgTEVUVEVSIEpFRU0KKyAgICAnXHUwNjJkJyAgICAjICAweEE1IC0+IEFSQUJJQyBMRVRURVIgSEFICisgICAgJ1x1MDYyZScgICAgIyAgMHhBNiAtPiBBUkFCSUMgTEVUVEVSIEtIQUgKKyAgICAnXHUwNjJmJyAgICAjICAweEE3IC0+IEFSQUJJQyBMRVRURVIgREFMCisgICAgJ1x1MDYzMCcgICAgIyAgMHhBOCAtPiBBUkFCSUMgTEVUVEVSIFRIQUwKKyAgICAnXHUwNjMxJyAgICAjICAweEE5IC0+IEFSQUJJQyBMRVRURVIgUkVICisgICAgJ1x1MDYzMicgICAgIyAgMHhBQSAtPiBBUkFCSUMgTEVUVEVSIFpBSU4KKyAgICAnXHUwNjMzJyAgICAjICAweEFCIC0+IEFSQUJJQyBMRVRURVIgU0VFTgorICAgICdcdTA2MzQnICAgICMgIDB4QUMgLT4gQVJBQklDIExFVFRFUiBTSEVFTgorICAgICdcdTA2MzUnICAgICMgIDB4QUQgLT4gQVJBQklDIExFVFRFUiBTQUQKKyAgICAnXHhhYicgICAgICAjICAweEFFIC0+IExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4YmInICAgICAgIyAgMHhBRiAtPiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHUyNTkxJyAgICAjICAweEIwIC0+IExJR0hUIFNIQURFCisgICAgJ1x1MjU5MicgICAgIyAgMHhCMSAtPiBNRURJVU0gU0hBREUKKyAgICAnXHUyNTkzJyAgICAjICAweEIyIC0+IERBUksgU0hBREUKKyAgICAnXHUyNTAyJyAgICAjICAweEIzIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgICdcdTI1MjQnICAgICMgIDB4QjQgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x1MjU2MScgICAgIyAgMHhCNSAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1NjInICAgICMgIDB4QjYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU2JyAgICAjICAweEI3IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU1JyAgICAjICAweEI4IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTYzJyAgICAjICAweEI5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTUxJyAgICAjICAweEJBIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAnXHUyNTU3JyAgICAjICAweEJCIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1NWQnICAgICMgIDB4QkMgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgICdcdTI1NWMnICAgICMgIDB4QkQgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTViJyAgICAjICAweEJFIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjUxMCcgICAgIyAgMHhCRiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgICdcdTI1MTQnICAgICMgIDB4QzAgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgICdcdTI1MzQnICAgICMgIDB4QzEgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUyYycgICAgIyAgMHhDMiAtPiBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1MWMnICAgICMgIDB4QzMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgICdcdTI1MDAnICAgICMgIDB4QzQgLT4gQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAnXHUyNTNjJyAgICAjICAweEM1IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NWUnICAgICMgIDB4QzYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1ZicgICAgIyAgMHhDNyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTVhJyAgICAjICAweEM4IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjU1NCcgICAgIyAgMHhDOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU2OScgICAgIyAgMHhDQSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU2NicgICAgIyAgMHhDQiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTYwJyAgICAjICAweENDIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjU1MCcgICAgIyAgMHhDRCAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAnXHUyNTZjJyAgICAjICAweENFIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTY3JyAgICAjICAweENGIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjU2OCcgICAgIyAgMHhEMCAtPiBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NjQnICAgICMgIDB4RDEgLT4gQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBIT1JJWk9OVEFMIERPVUJMRQorICAgICdcdTI1NjUnICAgICMgIDB4RDIgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NTknICAgICMgIDB4RDMgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU1OCcgICAgIyAgMHhENCAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAnXHUyNTUyJyAgICAjICAweEQ1IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1MycgICAgIyAgMHhENiAtPiBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NmInICAgICMgIDB4RDcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTZhJyAgICAjICAweEQ4IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjUxOCcgICAgIyAgMHhEOSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAnXHUyNTBjJyAgICAjICAweERBIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBSSUdIVAorICAgICdcdTI1ODgnICAgICMgIDB4REIgLT4gRlVMTCBCTE9DSworICAgICdcdTI1ODQnICAgICMgIDB4REMgLT4gTE9XRVIgSEFMRiBCTE9DSworICAgICdcdTI1OGMnICAgICMgIDB4REQgLT4gTEVGVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU5MCcgICAgIyAgMHhERSAtPiBSSUdIVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU4MCcgICAgIyAgMHhERiAtPiBVUFBFUiBIQUxGIEJMT0NLCisgICAgJ1x1MDYzNicgICAgIyAgMHhFMCAtPiBBUkFCSUMgTEVUVEVSIERBRAorICAgICdcdTA2MzcnICAgICMgIDB4RTEgLT4gQVJBQklDIExFVFRFUiBUQUgKKyAgICAnXHUwNjM4JyAgICAjICAweEUyIC0+IEFSQUJJQyBMRVRURVIgWkFICisgICAgJ1x1MDYzOScgICAgIyAgMHhFMyAtPiBBUkFCSUMgTEVUVEVSIEFJTgorICAgICdcdTA2M2EnICAgICMgIDB4RTQgLT4gQVJBQklDIExFVFRFUiBHSEFJTgorICAgICdcdTA2NDEnICAgICMgIDB4RTUgLT4gQVJBQklDIExFVFRFUiBGRUgKKyAgICAnXHhiNScgICAgICAjICAweEU2IC0+IE1JQ1JPIFNJR04KKyAgICAnXHUwNjQyJyAgICAjICAweEU3IC0+IEFSQUJJQyBMRVRURVIgUUFGCisgICAgJ1x1MDY0MycgICAgIyAgMHhFOCAtPiBBUkFCSUMgTEVUVEVSIEtBRgorICAgICdcdTA2NDQnICAgICMgIDB4RTkgLT4gQVJBQklDIExFVFRFUiBMQU0KKyAgICAnXHUwNjQ1JyAgICAjICAweEVBIC0+IEFSQUJJQyBMRVRURVIgTUVFTQorICAgICdcdTA2NDYnICAgICMgIDB4RUIgLT4gQVJBQklDIExFVFRFUiBOT09OCisgICAgJ1x1MDY0NycgICAgIyAgMHhFQyAtPiBBUkFCSUMgTEVUVEVSIEhFSAorICAgICdcdTA2NDgnICAgICMgIDB4RUQgLT4gQVJBQklDIExFVFRFUiBXQVcKKyAgICAnXHUwNjQ5JyAgICAjICAweEVFIC0+IEFSQUJJQyBMRVRURVIgQUxFRiBNQUtTVVJBCisgICAgJ1x1MDY0YScgICAgIyAgMHhFRiAtPiBBUkFCSUMgTEVUVEVSIFlFSAorICAgICdcdTIyNjEnICAgICMgIDB4RjAgLT4gSURFTlRJQ0FMIFRPCisgICAgJ1x1MDY0YicgICAgIyAgMHhGMSAtPiBBUkFCSUMgRkFUSEFUQU4KKyAgICAnXHUwNjRjJyAgICAjICAweEYyIC0+IEFSQUJJQyBEQU1NQVRBTgorICAgICdcdTA2NGQnICAgICMgIDB4RjMgLT4gQVJBQklDIEtBU1JBVEFOCisgICAgJ1x1MDY0ZScgICAgIyAgMHhGNCAtPiBBUkFCSUMgRkFUSEEKKyAgICAnXHUwNjRmJyAgICAjICAweEY1IC0+IEFSQUJJQyBEQU1NQQorICAgICdcdTA2NTAnICAgICMgIDB4RjYgLT4gQVJBQklDIEtBU1JBCisgICAgJ1x1MjI0OCcgICAgIyAgMHhGNyAtPiBBTE1PU1QgRVFVQUwgVE8KKyAgICAnXHhiMCcgICAgICAjICAweEY4IC0+IERFR1JFRSBTSUdOCisgICAgJ1x1MjIxOScgICAgIyAgMHhGOSAtPiBCVUxMRVQgT1BFUkFUT1IKKyAgICAnXHhiNycgICAgICAjICAweEZBIC0+IE1JRERMRSBET1QKKyAgICAnXHUyMjFhJyAgICAjICAweEZCIC0+IFNRVUFSRSBST09UCisgICAgJ1x1MjA3ZicgICAgIyAgMHhGQyAtPiBTVVBFUlNDUklQVCBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgICdceGIyJyAgICAgICMgIDB4RkQgLT4gU1VQRVJTQ1JJUFQgVFdPCisgICAgJ1x1MjVhMCcgICAgIyAgMHhGRSAtPiBCTEFDSyBTUVVBUkUKKyAgICAnXHhhMCcgICAgICAjICAweEZGIC0+IE5PLUJSRUFLIFNQQUNFCispCisKKyMjIyBFbmNvZGluZyB0YWJsZQorZW5jb2RpbmdfdGFibGU9Y29kZWNzLmNoYXJtYXBfYnVpbGQoZGVjb2RpbmdfdGFibGUpCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwODU4LnB5IGIvTGliL2VuY29kaW5ncy9jcDg1OC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTc5ZjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9jcDg1OC5weQpAQCAtMCwwICsxLDY5OCBAQAorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBmb3IgQ1A4NTgsIG1vZGlmaWVkIGZyb20gY3A4NTAuCisKKyIiIgorCitpbXBvcnQgY29kZWNzCisKKyMjIyBDb2RlYyBBUElzCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisKKyAgICBkZWYgZW5jb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxlcnJvcnMsZW5jb2RpbmdfbWFwKQorCisgICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nX3RhYmxlKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LHNlbGYuZXJyb3JzLGVuY29kaW5nX21hcClbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdjcDg1OCcsCisgICAgICAgIGVuY29kZT1Db2RlYygpLmVuY29kZSwKKyAgICAgICAgZGVjb2RlPUNvZGVjKCkuZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICkKKworIyMjIERlY29kaW5nIE1hcAorCitkZWNvZGluZ19tYXAgPSBjb2RlY3MubWFrZV9pZGVudGl0eV9kaWN0KHJhbmdlKDI1NikpCitkZWNvZGluZ19tYXAudXBkYXRlKHsKKyAgICAweDAwODA6IDB4MDBjNywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgMHgwMDgxOiAweDAwZmMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA4MjogMHgwMGU5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIDB4MDA4MzogMHgwMGUyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMDg0OiAweDAwZTQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgIDB4MDA4NTogMHgwMGUwLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgIDB4MDA4NjogMHgwMGU1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgMHgwMDg3OiAweDAwZTcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAweDAwODg6IDB4MDBlYSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDA4OTogMHgwMGViLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOGE6IDB4MDBlOCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwOGI6IDB4MDBlZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDhjOiAweDAwZWUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwOGQ6IDB4MDBlYywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAweDAwOGU6IDB4MDBjNCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwOGY6IDB4MDBjNSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisgICAgMHgwMDkwOiAweDAwYzksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAweDAwOTE6IDB4MDBlNiwgICAgICMgIExBVElOIFNNQUxMIExJR0FUVVJFIEFFCisgICAgMHgwMDkyOiAweDAwYzYsICAgICAjICBMQVRJTiBDQVBJVEFMIExJR0FUVVJFIEFFCisgICAgMHgwMDkzOiAweDAwZjQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwOTQ6IDB4MDBmNiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDk1OiAweDAwZjIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgMHgwMDk2OiAweDAwZmIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwOTc6IDB4MDBmOSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAweDAwOTg6IDB4MDBmZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDk5OiAweDAwZDYsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDlhOiAweDAwZGMsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgMHgwMDliOiAweDAwZjgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgIDB4MDA5YzogMHgwMGEzLCAgICAgIyAgUE9VTkQgU0lHTgorICAgIDB4MDA5ZDogMHgwMGQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgIDB4MDA5ZTogMHgwMGQ3LCAgICAgIyAgTVVMVElQTElDQVRJT04gU0lHTgorICAgIDB4MDA5ZjogMHgwMTkyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHgwMGEwOiAweDAwZTEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgMHgwMGExOiAweDAwZWQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgMHgwMGEyOiAweDAwZjMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgMHgwMGEzOiAweDAwZmEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgMHgwMGE0OiAweDAwZjEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTiBXSVRIIFRJTERFCisgICAgMHgwMGE1OiAweDAwZDEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwYTY6IDB4MDBhYSwgICAgICMgIEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgMHgwMGE3OiAweDAwYmEsICAgICAjICBNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAweDAwYTg6IDB4MDBiZiwgICAgICMgIElOVkVSVEVEIFFVRVNUSU9OIE1BUksKKyAgICAweDAwYTk6IDB4MDBhZSwgICAgICMgIFJFR0lTVEVSRUQgU0lHTgorICAgIDB4MDBhYTogMHgwMGFjLCAgICAgIyAgTk9UIFNJR04KKyAgICAweDAwYWI6IDB4MDBiZCwgICAgICMgIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorICAgIDB4MDBhYzogMHgwMGJjLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisgICAgMHgwMGFkOiAweDAwYTEsICAgICAjICBJTlZFUlRFRCBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMGFlOiAweDAwYWIsICAgICAjICBMRUZULVBPSU5USU5HIERPVUJMRSBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4MDBhZjogMHgwMGJiLCAgICAgIyAgUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMGIwOiAweDI1OTEsICAgICAjICBMSUdIVCBTSEFERQorICAgIDB4MDBiMTogMHgyNTkyLCAgICAgIyAgTUVESVVNIFNIQURFCisgICAgMHgwMGIyOiAweDI1OTMsICAgICAjICBEQVJLIFNIQURFCisgICAgMHgwMGIzOiAweDI1MDIsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwKKyAgICAweDAwYjQ6IDB4MjUyNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiNTogMHgwMGMxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgMHgwMGI2OiAweDAwYzIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBiNzogMHgwMGMwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgMHgwMGI4OiAweDAwYTksICAgICAjICBDT1BZUklHSFQgU0lHTgorICAgIDB4MDBiOTogMHgyNTYzLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiYTogMHgyNTUxLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MDBiYjogMHgyNTU3LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgwMGJjOiAweDI1NWQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgMHgwMGJkOiAweDAwYTIsICAgICAjICBDRU5UIFNJR04KKyAgICAweDAwYmU6IDB4MDBhNSwgICAgICMgIFlFTiBTSUdOCisgICAgMHgwMGJmOiAweDI1MTAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIDB4MDBjMDogMHgyNTE0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgIDB4MDBjMTogMHgyNTM0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMyOiAweDI1MmMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjMzogMHgyNTFjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjNDogMHgyNTAwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAweDAwYzU6IDB4MjUzYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjNjogMHgwMGUzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIDB4MDBjNzogMHgwMGMzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgMHgwMGM4OiAweDI1NWEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBSSUdIVAorICAgIDB4MDBjOTogMHgyNTU0LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBSSUdIVAorICAgIDB4MDBjYTogMHgyNTY5LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYjogMHgyNTY2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNjOiAweDI1NjAsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MDBjZDogMHgyNTUwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgMHgwMGNlOiAweDI1NmMsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGNmOiAweDAwYTQsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGQwOiAweDAwZjAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRVRICisgICAgMHgwMGQxOiAweDAwZDAsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFVEgKKyAgICAweDAwZDI6IDB4MDBjYSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGQzOiAweDAwY2IsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGQ0OiAweDAwYzgsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwZDU6IDB4MjBhYywgICAgICMgIEVVUk8gU0lHTgorICAgIDB4MDBkNjogMHgwMGNkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgMHgwMGQ3OiAweDAwY2UsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBkODogMHgwMGNmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBkOTogMHgyNTE4LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgMHgwMGRhOiAweDI1MGMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwZGI6IDB4MjU4OCwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDAwZGM6IDB4MjU4NCwgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDAwZGQ6IDB4MDBhNiwgICAgICMgIEJST0tFTiBCQVIKKyAgICAweDAwZGU6IDB4MDBjYywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIDB4MDBkZjogMHgyNTgwLCAgICAgIyAgVVBQRVIgSEFMRiBCTE9DSworICAgIDB4MDBlMDogMHgwMGQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgMHgwMGUxOiAweDAwZGYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgU0hBUlAgUworICAgIDB4MDBlMjogMHgwMGQ0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZTM6IDB4MDBkMiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIDB4MDBlNDogMHgwMGY1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgIDB4MDBlNTogMHgwMGQ1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgMHgwMGU2OiAweDAwYjUsICAgICAjICBNSUNSTyBTSUdOCisgICAgMHgwMGU3OiAweDAwZmUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZTg6IDB4MDBkZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOCisgICAgMHgwMGU5OiAweDAwZGEsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAweDAwZWE6IDB4MDBkYiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBDSVJDVU1GTEVYCisgICAgMHgwMGViOiAweDAwZDksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAweDAwZWM6IDB4MDBmZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAweDAwZWQ6IDB4MDBkZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgIDB4MDBlZTogMHgwMGFmLCAgICAgIyAgTUFDUk9OCisgICAgMHgwMGVmOiAweDAwYjQsICAgICAjICBBQ1VURSBBQ0NFTlQKKyAgICAweDAwZjA6IDB4MDBhZCwgICAgICMgIFNPRlQgSFlQSEVOCisgICAgMHgwMGYxOiAweDAwYjEsICAgICAjICBQTFVTLU1JTlVTIFNJR04KKyAgICAweDAwZjI6IDB4MjAxNywgICAgICMgIERPVUJMRSBMT1cgTElORQorICAgIDB4MDBmMzogMHgwMGJlLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisgICAgMHgwMGY0OiAweDAwYjYsICAgICAjICBQSUxDUk9XIFNJR04KKyAgICAweDAwZjU6IDB4MDBhNywgICAgICMgIFNFQ1RJT04gU0lHTgorICAgIDB4MDBmNjogMHgwMGY3LCAgICAgIyAgRElWSVNJT04gU0lHTgorICAgIDB4MDBmNzogMHgwMGI4LCAgICAgIyAgQ0VESUxMQQorICAgIDB4MDBmODogMHgwMGIwLCAgICAgIyAgREVHUkVFIFNJR04KKyAgICAweDAwZjk6IDB4MDBhOCwgICAgICMgIERJQUVSRVNJUworICAgIDB4MDBmYTogMHgwMGI3LCAgICAgIyAgTUlERExFIERPVAorICAgIDB4MDBmYjogMHgwMGI5LCAgICAgIyAgU1VQRVJTQ1JJUFQgT05FCisgICAgMHgwMGZjOiAweDAwYjMsICAgICAjICBTVVBFUlNDUklQVCBUSFJFRQorICAgIDB4MDBmZDogMHgwMGIyLCAgICAgIyAgU1VQRVJTQ1JJUFQgVFdPCisgICAgMHgwMGZlOiAweDI1YTAsICAgICAjICBCTEFDSyBTUVVBUkUKKyAgICAweDAwZmY6IDB4MDBhMCwgICAgICMgIE5PLUJSRUFLIFNQQUNFCit9KQorCisjIyMgRGVjb2RpbmcgVGFibGUKKworZGVjb2RpbmdfdGFibGUgPSAoCisgICAgJ1x4MDAnICAgICAjICAweDAwMDAgLT4gTlVMTAorICAgICdceDAxJyAgICAgIyAgMHgwMDAxIC0+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+IFZFUlRJQ0FMIExJTkUKKyAgICAnfScgICAgICAgICMgIDB4MDA3ZCAtPiBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgJ34nICAgICAgICAjICAweDAwN2UgLT4gVElMREUKKyAgICAnXHg3ZicgICAgICMgIDB4MDA3ZiAtPiBERUxFVEUKKyAgICAnXHhjNycgICAgICMgIDB4MDA4MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGZjJyAgICAgIyAgMHgwMDgxIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZTknICAgICAjICAweDAwODIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGUyJyAgICAgIyAgMHgwMDgzIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGU0JyAgICAgIyAgMHgwMDg0IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZTAnICAgICAjICAweDAwODUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorICAgICdceGU1JyAgICAgIyAgMHgwMDg2IC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGU3JyAgICAgIyAgMHgwMDg3IC0+IExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGVhJyAgICAgIyAgMHgwMDg4IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGViJyAgICAgIyAgMHgwMDg5IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZTgnICAgICAjICAweDAwOGEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgICdceGVmJyAgICAgIyAgMHgwMDhiIC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZWUnICAgICAjICAweDAwOGMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4ZWMnICAgICAjICAweDAwOGQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgICdceGM0JyAgICAgIyAgMHgwMDhlIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhjNScgICAgICMgIDB4MDA4ZiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGM5JyAgICAgIyAgMHgwMDkwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGU2JyAgICAgIyAgMHgwMDkxIC0+IExBVElOIFNNQUxMIExJR0FUVVJFIEFFCisgICAgJ1x4YzYnICAgICAjICAweDAwOTIgLT4gTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBBRQorICAgICdceGY0JyAgICAgIyAgMHgwMDkzIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGY2JyAgICAgIyAgMHgwMDk0IC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZjInICAgICAjICAweDAwOTUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgICdceGZiJyAgICAgIyAgMHgwMDk2IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGY5JyAgICAgIyAgMHgwMDk3IC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhmZicgICAgICMgIDB4MDA5OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIERJQUVSRVNJUworICAgICdceGQ2JyAgICAgIyAgMHgwMDk5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAnXHhkYycgICAgICMgIDB4MDA5YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZjgnICAgICAjICAweDAwOWIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAnXHhhMycgICAgICMgIDB4MDA5YyAtPiBQT1VORCBTSUdOCisgICAgJ1x4ZDgnICAgICAjICAweDAwOWQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFNUUk9LRQorICAgICdceGQ3JyAgICAgIyAgMHgwMDllIC0+IE1VTFRJUExJQ0FUSU9OIFNJR04KKyAgICAnXHUwMTkyJyAgICMgIDB4MDA5ZiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRiBXSVRIIEhPT0sKKyAgICAnXHhlMScgICAgICMgIDB4MDBhMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4ZWQnICAgICAjICAweDAwYTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBBQ1VURQorICAgICdceGYzJyAgICAgIyAgMHgwMGEyIC0+IExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAnXHhmYScgICAgICMgIDB4MDBhMyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4ZjEnICAgICAjICAweDAwYTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGQxJyAgICAgIyAgMHgwMGE1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGFhJyAgICAgIyAgMHgwMGE2IC0+IEZFTUlOSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4YmEnICAgICAjICAweDAwYTcgLT4gTUFTQ1VMSU5FIE9SRElOQUwgSU5ESUNBVE9SCisgICAgJ1x4YmYnICAgICAjICAweDAwYTggLT4gSU5WRVJURUQgUVVFU1RJT04gTUFSSworICAgICdceGFlJyAgICAgIyAgMHgwMGE5IC0+IFJFR0lTVEVSRUQgU0lHTgorICAgICdceGFjJyAgICAgIyAgMHgwMGFhIC0+IE5PVCBTSUdOCisgICAgJ1x4YmQnICAgICAjICAweDAwYWIgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgJ1x4YmMnICAgICAjICAweDAwYWMgLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisgICAgJ1x4YTEnICAgICAjICAweDAwYWQgLT4gSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgICdceGFiJyAgICAgIyAgMHgwMGFlIC0+IExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4YmInICAgICAjICAweDAwYWYgLT4gUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x1MjU5MScgICAjICAweDAwYjAgLT4gTElHSFQgU0hBREUKKyAgICAnXHUyNTkyJyAgICMgIDB4MDBiMSAtPiBNRURJVU0gU0hBREUKKyAgICAnXHUyNTkzJyAgICMgIDB4MDBiMiAtPiBEQVJLIFNIQURFCisgICAgJ1x1MjUwMicgICAjICAweDAwYjMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgJ1x1MjUyNCcgICAjICAweDAwYjQgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x4YzEnICAgICAjICAweDAwYjUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4YzInICAgICAjICAweDAwYjYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjMCcgICAgICMgIDB4MDBiNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAnXHhhOScgICAgICMgIDB4MDBiOCAtPiBDT1BZUklHSFQgU0lHTgorICAgICdcdTI1NjMnICAgIyAgMHgwMGI5IC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIExFRlQKKyAgICAnXHUyNTUxJyAgICMgIDB4MDBiYSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgJ1x1MjU1NycgICAjICAweDAwYmIgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgJ1x1MjU1ZCcgICAjICAweDAwYmMgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgTEVGVAorICAgICdceGEyJyAgICAgIyAgMHgwMGJkIC0+IENFTlQgU0lHTgorICAgICdceGE1JyAgICAgIyAgMHgwMGJlIC0+IFlFTiBTSUdOCisgICAgJ1x1MjUxMCcgICAjICAweDAwYmYgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIExFRlQKKyAgICAnXHUyNTE0JyAgICMgIDB4MDBjMCAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgJ1x1MjUzNCcgICAjICAweDAwYzEgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUyYycgICAjICAweDAwYzIgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAnXHUyNTFjJyAgICMgIDB4MDBjMyAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjUwMCcgICAjICAweDAwYzQgLT4gQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAnXHUyNTNjJyAgICMgIDB4MDBjNSAtPiBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAnXHhlMycgICAgICMgIDB4MDBjNiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x4YzMnICAgICAjICAweDAwYzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x1MjU1YScgICAjICAweDAwYzggLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAnXHUyNTU0JyAgICMgIDB4MDBjOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU2OScgICAjICAweDAwY2EgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjYnICAgIyAgMHgwMGNiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjAnICAgIyAgMHgwMGNjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjU1MCcgICAjICAweDAwY2QgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgJ1x1MjU2YycgICAjICAweDAwY2UgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdceGE0JyAgICAgIyAgMHgwMGNmIC0+IENVUlJFTkNZIFNJR04KKyAgICAnXHhmMCcgICAgICMgIDB4MDBkMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRVRICisgICAgJ1x4ZDAnICAgICAjICAweDAwZDEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICisgICAgJ1x4Y2EnICAgICAjICAweDAwZDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjYicgICAgICMgIDB4MDBkMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisgICAgJ1x4YzgnICAgICAjICAweDAwZDQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIEdSQVZFCisgICAgJ1x1MjBhYycgICAjICAweDAwZDUgLT4gRVVSTyBTSUdOCisgICAgJ1x4Y2QnICAgICAjICAweDAwZDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgJ1x4Y2UnICAgICAjICAweDAwZDcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjZicgICAgICMgIDB4MDBkOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggRElBRVJFU0lTCisgICAgJ1x1MjUxOCcgICAjICAweDAwZDkgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgJ1x1MjUwYycgICAjICAweDAwZGEgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU4OCcgICAjICAweDAwZGIgLT4gRlVMTCBCTE9DSworICAgICdcdTI1ODQnICAgIyAgMHgwMGRjIC0+IExPV0VSIEhBTEYgQkxPQ0sKKyAgICAnXHhhNicgICAgICMgIDB4MDBkZCAtPiBCUk9LRU4gQkFSCisgICAgJ1x4Y2MnICAgICAjICAweDAwZGUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgJ1x1MjU4MCcgICAjICAweDAwZGYgLT4gVVBQRVIgSEFMRiBCTE9DSworICAgICdceGQzJyAgICAgIyAgMHgwMGUwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBBQ1VURQorICAgICdceGRmJyAgICAgIyAgMHgwMGUxIC0+IExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCisgICAgJ1x4ZDQnICAgICAjICAweDAwZTIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhkMicgICAgICMgIDB4MDBlMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAnXHhmNScgICAgICMgIDB4MDBlNCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJ1x4ZDUnICAgICAjICAweDAwZTUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJ1x4YjUnICAgICAjICAweDAwZTYgLT4gTUlDUk8gU0lHTgorICAgICdceGZlJyAgICAgIyAgMHgwMGU3IC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STgorICAgICdceGRlJyAgICAgIyAgMHgwMGU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOCisgICAgJ1x4ZGEnICAgICAjICAweDAwZTkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4ZGInICAgICAjICAweDAwZWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhkOScgICAgICMgIDB4MDBlYiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhmZCcgICAgICMgIDB4MDBlYyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4ZGQnICAgICAjICAweDAwZWQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgJ1x4YWYnICAgICAjICAweDAwZWUgLT4gTUFDUk9OCisgICAgJ1x4YjQnICAgICAjICAweDAwZWYgLT4gQUNVVEUgQUNDRU5UCisgICAgJ1x4YWQnICAgICAjICAweDAwZjAgLT4gU09GVCBIWVBIRU4KKyAgICAnXHhiMScgICAgICMgIDB4MDBmMSAtPiBQTFVTLU1JTlVTIFNJR04KKyAgICAnXHUyMDE3JyAgICMgIDB4MDBmMiAtPiBET1VCTEUgTE9XIExJTkUKKyAgICAnXHhiZScgICAgICMgIDB4MDBmMyAtPiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICAnXHhiNicgICAgICMgIDB4MDBmNCAtPiBQSUxDUk9XIFNJR04KKyAgICAnXHhhNycgICAgICMgIDB4MDBmNSAtPiBTRUNUSU9OIFNJR04KKyAgICAnXHhmNycgICAgICMgIDB4MDBmNiAtPiBESVZJU0lPTiBTSUdOCisgICAgJ1x4YjgnICAgICAjICAweDAwZjcgLT4gQ0VESUxMQQorICAgICdceGIwJyAgICAgIyAgMHgwMGY4IC0+IERFR1JFRSBTSUdOCisgICAgJ1x4YTgnICAgICAjICAweDAwZjkgLT4gRElBRVJFU0lTCisgICAgJ1x4YjcnICAgICAjICAweDAwZmEgLT4gTUlERExFIERPVAorICAgICdceGI5JyAgICAgIyAgMHgwMGZiIC0+IFNVUEVSU0NSSVBUIE9ORQorICAgICdceGIzJyAgICAgIyAgMHgwMGZjIC0+IFNVUEVSU0NSSVBUIFRIUkVFCisgICAgJ1x4YjInICAgICAjICAweDAwZmQgLT4gU1VQRVJTQ1JJUFQgVFdPCisgICAgJ1x1MjVhMCcgICAjICAweDAwZmUgLT4gQkxBQ0sgU1FVQVJFCisgICAgJ1x4YTAnICAgICAjICAweDAwZmYgLT4gTk8tQlJFQUsgU1BBQ0UKKykKKworIyMjIEVuY29kaW5nIE1hcAorCitlbmNvZGluZ19tYXAgPSB7CisgICAgMHgwMDAwOiAweDAwMDAsICAgICAjICBOVUxMCisgICAgMHgwMDAxOiAweDAwMDEsICAgICAjICBTVEFSVCBPRiBIRUFESU5HCisgICAgMHgwMDAyOiAweDAwMDIsICAgICAjICBTVEFSVCBPRiBURVhUCisgICAgMHgwMDAzOiAweDAwMDMsICAgICAjICBFTkQgT0YgVEVYVAorICAgIDB4MDAwNDogMHgwMDA0LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTgorICAgIDB4MDAwNTogMHgwMDA1LCAgICAgIyAgRU5RVUlSWQorICAgIDB4MDAwNjogMHgwMDA2LCAgICAgIyAgQUNLTk9XTEVER0UKKyAgICAweDAwMDc6IDB4MDAwNywgICAgICMgIEJFTEwKKyAgICAweDAwMDg6IDB4MDAwOCwgICAgICMgIEJBQ0tTUEFDRQorICAgIDB4MDAwOTogMHgwMDA5LCAgICAgIyAgSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBhOiAweDAwMGEsICAgICAjICBMSU5FIEZFRUQKKyAgICAweDAwMGI6IDB4MDAwYiwgICAgICMgIFZFUlRJQ0FMIFRBQlVMQVRJT04KKyAgICAweDAwMGM6IDB4MDAwYywgICAgICMgIEZPUk0gRkVFRAorICAgIDB4MDAwZDogMHgwMDBkLCAgICAgIyAgQ0FSUklBR0UgUkVUVVJOCisgICAgMHgwMDBlOiAweDAwMGUsICAgICAjICBTSElGVCBPVVQKKyAgICAweDAwMGY6IDB4MDAwZiwgICAgICMgIFNISUZUIElOCisgICAgMHgwMDEwOiAweDAwMTAsICAgICAjICBEQVRBIExJTksgRVNDQVBFCisgICAgMHgwMDExOiAweDAwMTEsICAgICAjICBERVZJQ0UgQ09OVFJPTCBPTkUKKyAgICAweDAwMTI6IDB4MDAxMiwgICAgICMgIERFVklDRSBDT05UUk9MIFRXTworICAgIDB4MDAxMzogMHgwMDEzLCAgICAgIyAgREVWSUNFIENPTlRST0wgVEhSRUUKKyAgICAweDAwMTQ6IDB4MDAxNCwgICAgICMgIERFVklDRSBDT05UUk9MIEZPVVIKKyAgICAweDAwMTU6IDB4MDAxNSwgICAgICMgIE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgMHgwMDE2OiAweDAwMTYsICAgICAjICBTWU5DSFJPTk9VUyBJRExFCisgICAgMHgwMDE3OiAweDAwMTcsICAgICAjICBFTkQgT0YgVFJBTlNNSVNTSU9OIEJMT0NLCisgICAgMHgwMDE4OiAweDAwMTgsICAgICAjICBDQU5DRUwKKyAgICAweDAwMTk6IDB4MDAxOSwgICAgICMgIEVORCBPRiBNRURJVU0KKyAgICAweDAwMWE6IDB4MDAxYSwgICAgICMgIFNVQlNUSVRVVEUKKyAgICAweDAwMWI6IDB4MDAxYiwgICAgICMgIEVTQ0FQRQorICAgIDB4MDAxYzogMHgwMDFjLCAgICAgIyAgRklMRSBTRVBBUkFUT1IKKyAgICAweDAwMWQ6IDB4MDAxZCwgICAgICMgIEdST1VQIFNFUEFSQVRPUgorICAgIDB4MDAxZTogMHgwMDFlLCAgICAgIyAgUkVDT1JEIFNFUEFSQVRPUgorICAgIDB4MDAxZjogMHgwMDFmLCAgICAgIyAgVU5JVCBTRVBBUkFUT1IKKyAgICAweDAwMjA6IDB4MDAyMCwgICAgICMgIFNQQUNFCisgICAgMHgwMDIxOiAweDAwMjEsICAgICAjICBFWENMQU1BVElPTiBNQVJLCisgICAgMHgwMDIyOiAweDAwMjIsICAgICAjICBRVU9UQVRJT04gTUFSSworICAgIDB4MDAyMzogMHgwMDIzLCAgICAgIyAgTlVNQkVSIFNJR04KKyAgICAweDAwMjQ6IDB4MDAyNCwgICAgICMgIERPTExBUiBTSUdOCisgICAgMHgwMDI1OiAweDAwMjUsICAgICAjICBQRVJDRU5UIFNJR04KKyAgICAweDAwMjY6IDB4MDAyNiwgICAgICMgIEFNUEVSU0FORAorICAgIDB4MDAyNzogMHgwMDI3LCAgICAgIyAgQVBPU1RST1BIRQorICAgIDB4MDAyODogMHgwMDI4LCAgICAgIyAgTEVGVCBQQVJFTlRIRVNJUworICAgIDB4MDAyOTogMHgwMDI5LCAgICAgIyAgUklHSFQgUEFSRU5USEVTSVMKKyAgICAweDAwMmE6IDB4MDAyYSwgICAgICMgIEFTVEVSSVNLCisgICAgMHgwMDJiOiAweDAwMmIsICAgICAjICBQTFVTIFNJR04KKyAgICAweDAwMmM6IDB4MDAyYywgICAgICMgIENPTU1BCisgICAgMHgwMDJkOiAweDAwMmQsICAgICAjICBIWVBIRU4tTUlOVVMKKyAgICAweDAwMmU6IDB4MDAyZSwgICAgICMgIEZVTEwgU1RPUAorICAgIDB4MDAyZjogMHgwMDJmLCAgICAgIyAgU09MSURVUworICAgIDB4MDAzMDogMHgwMDMwLCAgICAgIyAgRElHSVQgWkVSTworICAgIDB4MDAzMTogMHgwMDMxLCAgICAgIyAgRElHSVQgT05FCisgICAgMHgwMDMyOiAweDAwMzIsICAgICAjICBESUdJVCBUV08KKyAgICAweDAwMzM6IDB4MDAzMywgICAgICMgIERJR0lUIFRIUkVFCisgICAgMHgwMDM0OiAweDAwMzQsICAgICAjICBESUdJVCBGT1VSCisgICAgMHgwMDM1OiAweDAwMzUsICAgICAjICBESUdJVCBGSVZFCisgICAgMHgwMDM2OiAweDAwMzYsICAgICAjICBESUdJVCBTSVgKKyAgICAweDAwMzc6IDB4MDAzNywgICAgICMgIERJR0lUIFNFVkVOCisgICAgMHgwMDM4OiAweDAwMzgsICAgICAjICBESUdJVCBFSUdIVAorICAgIDB4MDAzOTogMHgwMDM5LCAgICAgIyAgRElHSVQgTklORQorICAgIDB4MDAzYTogMHgwMDNhLCAgICAgIyAgQ09MT04KKyAgICAweDAwM2I6IDB4MDAzYiwgICAgICMgIFNFTUlDT0xPTgorICAgIDB4MDAzYzogMHgwMDNjLCAgICAgIyAgTEVTUy1USEFOIFNJR04KKyAgICAweDAwM2Q6IDB4MDAzZCwgICAgICMgIEVRVUFMUyBTSUdOCisgICAgMHgwMDNlOiAweDAwM2UsICAgICAjICBHUkVBVEVSLVRIQU4gU0lHTgorICAgIDB4MDAzZjogMHgwMDNmLCAgICAgIyAgUVVFU1RJT04gTUFSSworICAgIDB4MDA0MDogMHgwMDQwLCAgICAgIyAgQ09NTUVSQ0lBTCBBVAorICAgIDB4MDA0MTogMHgwMDQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQQorICAgIDB4MDA0MjogMHgwMDQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgIDB4MDA0MzogMHgwMDQzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQworICAgIDB4MDA0NDogMHgwMDQ0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRAorICAgIDB4MDA0NTogMHgwMDQ1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgIDB4MDA0NjogMHgwMDQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRgorICAgIDB4MDA0NzogMHgwMDQ3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRworICAgIDB4MDA0ODogMHgwMDQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgIDB4MDA0OTogMHgwMDQ5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSQorICAgIDB4MDA0YTogMHgwMDRhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgIDB4MDA0YjogMHgwMDRiLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgIDB4MDA0YzogMHgwMDRjLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgIDB4MDA0ZDogMHgwMDRkLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgIDB4MDA0ZTogMHgwMDRlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgIDB4MDA0ZjogMHgwMDRmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgIDB4MDA1MDogMHgwMDUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgIDB4MDA1MTogMHgwMDUxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgIDB4MDA1MjogMHgwMDUyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgIDB4MDA1MzogMHgwMDUzLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgUworICAgIDB4MDA1NDogMHgwMDU0LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgIDB4MDA1NTogMHgwMDU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA1NjogMHgwMDU2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVgorICAgIDB4MDA1NzogMHgwMDU3LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgIDB4MDA1ODogMHgwMDU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWAorICAgIDB4MDA1OTogMHgwMDU5LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWQorICAgIDB4MDA1YTogMHgwMDVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgIDB4MDA1YjogMHgwMDViLCAgICAgIyAgTEVGVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1YzogMHgwMDVjLCAgICAgIyAgUkVWRVJTRSBTT0xJRFVTCisgICAgMHgwMDVkOiAweDAwNWQsICAgICAjICBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgIDB4MDA1ZTogMHgwMDVlLCAgICAgIyAgQ0lSQ1VNRkxFWCBBQ0NFTlQKKyAgICAweDAwNWY6IDB4MDA1ZiwgICAgICMgIExPVyBMSU5FCisgICAgMHgwMDYwOiAweDAwNjAsICAgICAjICBHUkFWRSBBQ0NFTlQKKyAgICAweDAwNjE6IDB4MDA2MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgMHgwMDYyOiAweDAwNjIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgIDB4MDA2MzogMHgwMDYzLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAweDAwNjQ6IDB4MDA2NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBECisgICAgMHgwMDY1OiAweDAwNjUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgIDB4MDA2NjogMHgwMDY2LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAweDAwNjc6IDB4MDA2NywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgMHgwMDY4OiAweDAwNjgsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgIDB4MDA2OTogMHgwMDY5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAweDAwNmE6IDB4MDA2YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBKCisgICAgMHgwMDZiOiAweDAwNmIsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSworICAgIDB4MDA2YzogMHgwMDZjLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAweDAwNmQ6IDB4MDA2ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBNCisgICAgMHgwMDZlOiAweDAwNmUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTgorICAgIDB4MDA2ZjogMHgwMDZmLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAweDAwNzA6IDB4MDA3MCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBQCisgICAgMHgwMDcxOiAweDAwNzEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUQorICAgIDB4MDA3MjogMHgwMDcyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAweDAwNzM6IDB4MDA3MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgMHgwMDc0OiAweDAwNzQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgIDB4MDA3NTogMHgwMDc1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAweDAwNzY6IDB4MDA3NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgMHgwMDc3OiAweDAwNzcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgIDB4MDA3ODogMHgwMDc4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAweDAwNzk6IDB4MDA3OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgMHgwMDdhOiAweDAwN2EsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgIDB4MDA3YjogMHgwMDdiLCAgICAgIyAgTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdjOiAweDAwN2MsICAgICAjICBWRVJUSUNBTCBMSU5FCisgICAgMHgwMDdkOiAweDAwN2QsICAgICAjICBSSUdIVCBDVVJMWSBCUkFDS0VUCisgICAgMHgwMDdlOiAweDAwN2UsICAgICAjICBUSUxERQorICAgIDB4MDA3ZjogMHgwMDdmLCAgICAgIyAgREVMRVRFCisgICAgMHgwMGEwOiAweDAwZmYsICAgICAjICBOTy1CUkVBSyBTUEFDRQorICAgIDB4MDBhMTogMHgwMGFkLCAgICAgIyAgSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgIDB4MDBhMjogMHgwMGJkLCAgICAgIyAgQ0VOVCBTSUdOCisgICAgMHgwMGEzOiAweDAwOWMsICAgICAjICBQT1VORCBTSUdOCisgICAgMHgwMGE0OiAweDAwY2YsICAgICAjICBDVVJSRU5DWSBTSUdOCisgICAgMHgwMGE1OiAweDAwYmUsICAgICAjICBZRU4gU0lHTgorICAgIDB4MDBhNjogMHgwMGRkLCAgICAgIyAgQlJPS0VOIEJBUgorICAgIDB4MDBhNzogMHgwMGY1LCAgICAgIyAgU0VDVElPTiBTSUdOCisgICAgMHgwMGE4OiAweDAwZjksICAgICAjICBESUFFUkVTSVMKKyAgICAweDAwYTk6IDB4MDBiOCwgICAgICMgIENPUFlSSUdIVCBTSUdOCisgICAgMHgwMGFhOiAweDAwYTYsICAgICAjICBGRU1JTklORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBhYjogMHgwMGFlLCAgICAgIyAgTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwYWM6IDB4MDBhYSwgICAgICMgIE5PVCBTSUdOCisgICAgMHgwMGFkOiAweDAwZjAsICAgICAjICBTT0ZUIEhZUEhFTgorICAgIDB4MDBhZTogMHgwMGE5LCAgICAgIyAgUkVHSVNURVJFRCBTSUdOCisgICAgMHgwMGFmOiAweDAwZWUsICAgICAjICBNQUNST04KKyAgICAweDAwYjA6IDB4MDBmOCwgICAgICMgIERFR1JFRSBTSUdOCisgICAgMHgwMGIxOiAweDAwZjEsICAgICAjICBQTFVTLU1JTlVTIFNJR04KKyAgICAweDAwYjI6IDB4MDBmZCwgICAgICMgIFNVUEVSU0NSSVBUIFRXTworICAgIDB4MDBiMzogMHgwMGZjLCAgICAgIyAgU1VQRVJTQ1JJUFQgVEhSRUUKKyAgICAweDAwYjQ6IDB4MDBlZiwgICAgICMgIEFDVVRFIEFDQ0VOVAorICAgIDB4MDBiNTogMHgwMGU2LCAgICAgIyAgTUlDUk8gU0lHTgorICAgIDB4MDBiNjogMHgwMGY0LCAgICAgIyAgUElMQ1JPVyBTSUdOCisgICAgMHgwMGI3OiAweDAwZmEsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwMGI4OiAweDAwZjcsICAgICAjICBDRURJTExBCisgICAgMHgwMGI5OiAweDAwZmIsICAgICAjICBTVVBFUlNDUklQVCBPTkUKKyAgICAweDAwYmE6IDB4MDBhNywgICAgICMgIE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgIDB4MDBiYjogMHgwMGFmLCAgICAgIyAgUklHSFQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHgwMGJjOiAweDAwYWMsICAgICAjICBWVUxHQVIgRlJBQ1RJT04gT05FIFFVQVJURVIKKyAgICAweDAwYmQ6IDB4MDBhYiwgICAgICMgIFZVTEdBUiBGUkFDVElPTiBPTkUgSEFMRgorICAgIDB4MDBiZTogMHgwMGYzLCAgICAgIyAgVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisgICAgMHgwMGJmOiAweDAwYTgsICAgICAjICBJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisgICAgMHgwMGMwOiAweDAwYjcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAweDAwYzE6IDB4MDBiNSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgIDB4MDBjMjogMHgwMGI2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwYzM6IDB4MDBjNywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBUSUxERQorICAgIDB4MDBjNDogMHgwMDhlLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBjNTogMHgwMDhmLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwYzY6IDB4MDA5MiwgICAgICMgIExBVElOIENBUElUQUwgTElHQVRVUkUgQUUKKyAgICAweDAwYzc6IDB4MDA4MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisgICAgMHgwMGM4OiAweDAwZDQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwYzk6IDB4MDA5MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgIDB4MDBjYTogMHgwMGQyLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwY2I6IDB4MDBkMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwY2M6IDB4MDBkZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBHUkFWRQorICAgIDB4MDBjZDogMHgwMGQ2LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgMHgwMGNlOiAweDAwZDcsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBjZjogMHgwMGQ4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgIDB4MDBkMDogMHgwMGQxLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRICisgICAgMHgwMGQxOiAweDAwYTUsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwZDI6IDB4MDBlMywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgIDB4MDBkMzogMHgwMGUwLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgMHgwMGQ0OiAweDAwZTIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBkNTogMHgwMGU1LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgMHgwMGQ2OiAweDAwOTksICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGQ3OiAweDAwOWUsICAgICAjICBNVUxUSVBMSUNBVElPTiBTSUdOCisgICAgMHgwMGQ4OiAweDAwOWQsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMGQ5OiAweDAwZWIsICAgICAjICBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAweDAwZGE6IDB4MDBlOSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorICAgIDB4MDBkYjogMHgwMGVhLCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZGM6IDB4MDA5YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZGQ6IDB4MDBlZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFkgV0lUSCBBQ1VURQorICAgIDB4MDBkZTogMHgwMGU4LCAgICAgIyAgTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZGY6IDB4MDBlMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTCisgICAgMHgwMGUwOiAweDAwODUsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgMHgwMGUxOiAweDAwYTAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgMHgwMGUyOiAweDAwODMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZTM6IDB4MDBjNiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggVElMREUKKyAgICAweDAwZTQ6IDB4MDA4NCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGU1OiAweDAwODYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAweDAwZTY6IDB4MDA5MSwgICAgICMgIExBVElOIFNNQUxMIExJR0FUVVJFIEFFCisgICAgMHgwMGU3OiAweDAwODcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAweDAwZTg6IDB4MDA4YSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAweDAwZTk6IDB4MDA4MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAweDAwZWE6IDB4MDA4OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlYjogMHgwMDg5LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZWM6IDB4MDA4ZCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAweDAwZWQ6IDB4MDBhMSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAweDAwZWU6IDB4MDA4YywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBlZjogMHgwMDhiLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZjA6IDB4MDBkMCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBFVEgKKyAgICAweDAwZjE6IDB4MDBhNCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBOIFdJVEggVElMREUKKyAgICAweDAwZjI6IDB4MDA5NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggR1JBVkUKKyAgICAweDAwZjM6IDB4MDBhMiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQUNVVEUKKyAgICAweDAwZjQ6IDB4MDA5MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorICAgIDB4MDBmNTogMHgwMGU0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBUSUxERQorICAgIDB4MDBmNjogMHgwMDk0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAweDAwZjc6IDB4MDBmNiwgICAgICMgIERJVklTSU9OIFNJR04KKyAgICAweDAwZjg6IDB4MDA5YiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggU1RST0tFCisgICAgMHgwMGY5OiAweDAwOTcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisgICAgMHgwMGZhOiAweDAwYTMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgMHgwMGZiOiAweDAwOTYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAweDAwZmM6IDB4MDA4MSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgMHgwMGZkOiAweDAwZWMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWSBXSVRIIEFDVVRFCisgICAgMHgwMGZlOiAweDAwZTcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVEhPUk4KKyAgICAweDAwZmY6IDB4MDA5OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgMHgyMGFjOiAweDAwZDUsICAgICAjICBFVVJPIFNJR04KKyAgICAweDAxOTI6IDB4MDA5ZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBGIFdJVEggSE9PSworICAgIDB4MjAxNzogMHgwMGYyLCAgICAgIyAgRE9VQkxFIExPVyBMSU5FCisgICAgMHgyNTAwOiAweDAwYzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MjUwMjogMHgwMGIzLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgyNTBjOiAweDAwZGEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1MTA6IDB4MDBiZiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgyNTE0OiAweDAwYzAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgyNTE4OiAweDAwZDksICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIExFRlQKKyAgICAweDI1MWM6IDB4MDBjMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDI1MjQ6IDB4MDBiNCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MjUyYzogMHgwMGMyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1MzQ6IDB4MDBjMSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjUzYzogMHgwMGM1LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTUwOiAweDAwY2QsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIEhPUklaT05UQUwKKyAgICAweDI1NTE6IDB4MDBiYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAweDI1NTQ6IDB4MDBjOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1NTc6IDB4MDBiYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MjU1YTogMHgwMGM4LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDI1NWQ6IDB4MDBiYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDI1NjA6IDB4MDBjYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTYzOiAweDAwYjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTY2OiAweDAwY2IsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1Njk6IDB4MDBjYSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1NmM6IDB4MDBjZSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIEhPUklaT05UQUwKKyAgICAweDI1ODA6IDB4MDBkZiwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODQ6IDB4MDBkYywgICAgICMgIExPV0VSIEhBTEYgQkxPQ0sKKyAgICAweDI1ODg6IDB4MDBkYiwgICAgICMgIEZVTEwgQkxPQ0sKKyAgICAweDI1OTE6IDB4MDBiMCwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgyNTkyOiAweDAwYjEsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDI1OTM6IDB4MDBiMiwgICAgICMgIERBUksgU0hBREUKKyAgICAweDI1YTA6IDB4MDBmZSwgICAgICMgIEJMQUNLIFNRVUFSRQorfQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkgYi9MaWIvZW5jb2RpbmdzL2hleF9jb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDAzZmMzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9oZXhfY29kZWMucHkKQEAgLTAsMCArMSw1NSBAQAorIiIiUHl0aG9uICdoZXhfY29kZWMnIENvZGVjIC0gMi1kaWdpdCBoZXggY29udGVudCB0cmFuc2ZlciBlbmNvZGluZy4KKworVGhpcyBjb2RlYyBkZS9lbmNvZGVzIGZyb20gYnl0ZXMgdG8gYnl0ZXMgYW5kIGlzIHRoZXJlZm9yZSB1c2FibGUgd2l0aAorYnl0ZXMudHJhbnNmb3JtKCkgYW5kIGJ5dGVzLnVudHJhbnNmb3JtKCkuCisKK1dyaXR0ZW4gYnkgTWFyYy1BbmRyZSBMZW1idXJnIChtYWxAbGVtYnVyZy5jb20pLgorIiIiCisKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBiaW5hc2NpaQorCisjIyMgQ29kZWMgQVBJcworCitkZWYgaGV4X2VuY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCisgICAgcmV0dXJuIChiaW5hc2NpaS5iMmFfaGV4KGlucHV0KSwgbGVuKGlucHV0KSkKKworZGVmIGhleF9kZWNvZGUoaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgIHJldHVybiAoYmluYXNjaWkuYTJiX2hleChpbnB1dCksIGxlbihpbnB1dCkpCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGhleF9lbmNvZGUoaW5wdXQsIGVycm9ycykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gaGV4X2RlY29kZShpbnB1dCwgZXJyb3JzKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICBhc3NlcnQgc2VsZi5lcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgcmV0dXJuIGJpbmFzY2lpLmIyYV9oZXgoaW5wdXQpCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIGFzc2VydCBzZWxmLmVycm9ycyA9PSAnc3RyaWN0JworICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2hleChpbnB1dCkKKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBjaGFyYnVmZmVydHlwZSA9IGJ5dGVzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYywgY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgY2hhcmJ1ZmZlcnR5cGUgPSBieXRlcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2hleCcsCisgICAgICAgIGVuY29kZT1oZXhfZW5jb2RlLAorICAgICAgICBkZWNvZGU9aGV4X2RlY29kZSwKKyAgICAgICAgaW5jcmVtZW50YWxlbmNvZGVyPUluY3JlbWVudGFsRW5jb2RlciwKKyAgICAgICAgaW5jcmVtZW50YWxkZWNvZGVyPUluY3JlbWVudGFsRGVjb2RlciwKKyAgICAgICAgc3RyZWFtd3JpdGVyPVN0cmVhbVdyaXRlciwKKyAgICAgICAgc3RyZWFtcmVhZGVyPVN0cmVhbVJlYWRlciwKKyAgICApCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3B1bnljb2RlLnB5IGIvTGliL2VuY29kaW5ncy9wdW55Y29kZS5weQppbmRleCA4MTI5YWYyLi42NmM1MTAxIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL3B1bnljb2RlLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvcHVueWNvZGUucHkKQEAgLTEsNCArMSwzIEBACi0jIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQogIiIiIENvZGVjIGZvciB0aGUgUHVuaWNvZGUgZW5jb2RpbmcsIGFzIHNwZWNpZmllZCBpbiBSRkMgMzQ5MgogCiBXcml0dGVuIGJ5IE1hcnRpbiB2LiBMw7Z3aXMuCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDNmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weQpAQCAtMCwwICsxLDU2IEBACisiIiJDb2RlYyBmb3IgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy4KKworVGhpcyBjb2RlYyBkZS9lbmNvZGVzIGZyb20gYnl0ZXMgdG8gYnl0ZXMgYW5kIGlzIHRoZXJlZm9yZSB1c2FibGUgd2l0aAorYnl0ZXMudHJhbnNmb3JtKCkgYW5kIGJ5dGVzLnVudHJhbnNmb3JtKCkuCisiIiIKKworaW1wb3J0IGNvZGVjcworaW1wb3J0IHF1b3ByaQorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworCitkZWYgcXVvcHJpX2VuY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCisgICAgZiA9IEJ5dGVzSU8oaW5wdXQpCisgICAgZyA9IEJ5dGVzSU8oKQorICAgIHF1b3ByaS5lbmNvZGUoZiwgZywgMSkKKyAgICByZXR1cm4gKGcuZ2V0dmFsdWUoKSwgbGVuKGlucHV0KSkKKworZGVmIHF1b3ByaV9kZWNvZGUoaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgIGYgPSBCeXRlc0lPKGlucHV0KQorICAgIGcgPSBCeXRlc0lPKCkKKyAgICBxdW9wcmkuZGVjb2RlKGYsIGcpCisgICAgcmV0dXJuIChnLmdldHZhbHVlKCksIGxlbihpbnB1dCkpCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIHF1b3ByaV9lbmNvZGUoaW5wdXQsIGVycm9ycykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gcXVvcHJpX2RlY29kZShpbnB1dCwgZXJyb3JzKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gcXVvcHJpX2VuY29kZShpbnB1dCwgc2VsZi5lcnJvcnMpWzBdCisKK2NsYXNzIEluY3JlbWVudGFsRGVjb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxEZWNvZGVyKToKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBxdW9wcmlfZGVjb2RlKGlucHV0LCBzZWxmLmVycm9ycylbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBjaGFyYnVmZmVydHlwZSA9IGJ5dGVzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYywgY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgY2hhcmJ1ZmZlcnR5cGUgPSBieXRlcworCisjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdxdW9wcmknLAorICAgICAgICBlbmNvZGU9cXVvcHJpX2VuY29kZSwKKyAgICAgICAgZGVjb2RlPXF1b3ByaV9kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9yb3RfMTMucHkgYi9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMTQwYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2VuY29kaW5ncy9yb3RfMTMucHkKQEAgLTAsMCArMSwxMTMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBmb3IgUk9UMTMuCisKK1RoaXMgY29kZWMgZGUvZW5jb2RlcyBmcm9tIHN0ciB0byBzdHIgYW5kIGlzIHRoZXJlZm9yZSB1c2FibGUgd2l0aAorc3RyLnRyYW5zZm9ybSgpIGFuZCBzdHIudW50cmFuc2Zvcm0oKS4KKworV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuCisiIiIKKworaW1wb3J0IGNvZGVjcworCisjIyMgQ29kZWMgQVBJcworCitjbGFzcyBDb2RlYyhjb2RlY3MuQ29kZWMpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiAoaW5wdXQudHJhbnNsYXRlKHJvdDEzX21hcCksIGxlbihpbnB1dCkpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gKGlucHV0LnRyYW5zbGF0ZShyb3QxM19tYXApLCBsZW4oaW5wdXQpKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gaW5wdXQudHJhbnNsYXRlKHJvdDEzX21hcCkKKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGlucHV0LnRyYW5zbGF0ZShyb3QxM19tYXApCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYyxjb2RlY3MuU3RyZWFtV3JpdGVyKToKKyAgICBwYXNzCisKK2NsYXNzIFN0cmVhbVJlYWRlcihDb2RlYyxjb2RlY3MuU3RyZWFtUmVhZGVyKToKKyAgICBwYXNzCisKKyMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQorCitkZWYgZ2V0cmVnZW50cnkoKToKKyAgICByZXR1cm4gY29kZWNzLkNvZGVjSW5mbygKKyAgICAgICAgbmFtZT0ncm90LTEzJywKKyAgICAgICAgZW5jb2RlPUNvZGVjKCkuZW5jb2RlLAorICAgICAgICBkZWNvZGU9Q29kZWMoKS5kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgKQorCisjIyMgTWFwCisKK3JvdDEzX21hcCA9IGNvZGVjcy5tYWtlX2lkZW50aXR5X2RpY3QocmFuZ2UoMjU2KSkKK3JvdDEzX21hcC51cGRhdGUoeworICAgMHgwMDQxOiAweDAwNGUsCisgICAweDAwNDI6IDB4MDA0ZiwKKyAgIDB4MDA0MzogMHgwMDUwLAorICAgMHgwMDQ0OiAweDAwNTEsCisgICAweDAwNDU6IDB4MDA1MiwKKyAgIDB4MDA0NjogMHgwMDUzLAorICAgMHgwMDQ3OiAweDAwNTQsCisgICAweDAwNDg6IDB4MDA1NSwKKyAgIDB4MDA0OTogMHgwMDU2LAorICAgMHgwMDRhOiAweDAwNTcsCisgICAweDAwNGI6IDB4MDA1OCwKKyAgIDB4MDA0YzogMHgwMDU5LAorICAgMHgwMDRkOiAweDAwNWEsCisgICAweDAwNGU6IDB4MDA0MSwKKyAgIDB4MDA0ZjogMHgwMDQyLAorICAgMHgwMDUwOiAweDAwNDMsCisgICAweDAwNTE6IDB4MDA0NCwKKyAgIDB4MDA1MjogMHgwMDQ1LAorICAgMHgwMDUzOiAweDAwNDYsCisgICAweDAwNTQ6IDB4MDA0NywKKyAgIDB4MDA1NTogMHgwMDQ4LAorICAgMHgwMDU2OiAweDAwNDksCisgICAweDAwNTc6IDB4MDA0YSwKKyAgIDB4MDA1ODogMHgwMDRiLAorICAgMHgwMDU5OiAweDAwNGMsCisgICAweDAwNWE6IDB4MDA0ZCwKKyAgIDB4MDA2MTogMHgwMDZlLAorICAgMHgwMDYyOiAweDAwNmYsCisgICAweDAwNjM6IDB4MDA3MCwKKyAgIDB4MDA2NDogMHgwMDcxLAorICAgMHgwMDY1OiAweDAwNzIsCisgICAweDAwNjY6IDB4MDA3MywKKyAgIDB4MDA2NzogMHgwMDc0LAorICAgMHgwMDY4OiAweDAwNzUsCisgICAweDAwNjk6IDB4MDA3NiwKKyAgIDB4MDA2YTogMHgwMDc3LAorICAgMHgwMDZiOiAweDAwNzgsCisgICAweDAwNmM6IDB4MDA3OSwKKyAgIDB4MDA2ZDogMHgwMDdhLAorICAgMHgwMDZlOiAweDAwNjEsCisgICAweDAwNmY6IDB4MDA2MiwKKyAgIDB4MDA3MDogMHgwMDYzLAorICAgMHgwMDcxOiAweDAwNjQsCisgICAweDAwNzI6IDB4MDA2NSwKKyAgIDB4MDA3MzogMHgwMDY2LAorICAgMHgwMDc0OiAweDAwNjcsCisgICAweDAwNzU6IDB4MDA2OCwKKyAgIDB4MDA3NjogMHgwMDY5LAorICAgMHgwMDc3OiAweDAwNmEsCisgICAweDAwNzg6IDB4MDA2YiwKKyAgIDB4MDA3OTogMHgwMDZjLAorICAgMHgwMDdhOiAweDAwNmQsCit9KQorCisjIyMgRmlsdGVyIEFQSQorCitkZWYgcm90MTMoaW5maWxlLCBvdXRmaWxlKToKKyAgICBvdXRmaWxlLndyaXRlKGluZmlsZS5yZWFkKCkuZW5jb2RlKCdyb3QtMTMnKSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgcm90MTMoc3lzLnN0ZGluLCBzeXMuc3Rkb3V0KQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNmYxNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKQEAgLTAsMCArMSw5OSBAQAorIiIiUHl0aG9uICd1dV9jb2RlYycgQ29kZWMgLSBVVSBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nLgorCitUaGlzIGNvZGVjIGRlL2VuY29kZXMgZnJvbSBieXRlcyB0byBieXRlcyBhbmQgaXMgdGhlcmVmb3JlIHVzYWJsZSB3aXRoCitieXRlcy50cmFuc2Zvcm0oKSBhbmQgYnl0ZXMudW50cmFuc2Zvcm0oKS4KKworV3JpdHRlbiBieSBNYXJjLUFuZHJlIExlbWJ1cmcgKG1hbEBsZW1idXJnLmNvbSkuIFNvbWUgZGV0YWlscyB3ZXJlCithZGFwdGVkIGZyb20gdXUucHkgd2hpY2ggd2FzIHdyaXR0ZW4gYnkgTGFuY2UgRWxsaW5naG91c2UgYW5kCittb2RpZmllZCBieSBKYWNrIEphbnNlbiBhbmQgRnJlZHJpayBMdW5kaC4KKyIiIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgYmluYXNjaWkKK2Zyb20gaW8gaW1wb3J0IEJ5dGVzSU8KKworIyMjIENvZGVjIEFQSXMKKworZGVmIHV1X2VuY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnLCBmaWxlbmFtZT0nPGRhdGE+JywgbW9kZT0wbzY2Nik6CisgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgIGluZmlsZSA9IEJ5dGVzSU8oaW5wdXQpCisgICAgb3V0ZmlsZSA9IEJ5dGVzSU8oKQorICAgIHJlYWQgPSBpbmZpbGUucmVhZAorICAgIHdyaXRlID0gb3V0ZmlsZS53cml0ZQorCisgICAgIyBFbmNvZGUKKyAgICB3cml0ZSgoJ2JlZ2luICVvICVzXG4nICUgKG1vZGUgJiAwbzc3NywgZmlsZW5hbWUpKS5lbmNvZGUoJ2FzY2lpJykpCisgICAgY2h1bmsgPSByZWFkKDQ1KQorICAgIHdoaWxlIGNodW5rOgorICAgICAgICB3cml0ZShiaW5hc2NpaS5iMmFfdXUoY2h1bmspKQorICAgICAgICBjaHVuayA9IHJlYWQoNDUpCisgICAgd3JpdGUoYicgXG5lbmRcbicpCisKKyAgICByZXR1cm4gKG91dGZpbGUuZ2V0dmFsdWUoKSwgbGVuKGlucHV0KSkKKworZGVmIHV1X2RlY29kZShpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCisgICAgaW5maWxlID0gQnl0ZXNJTyhpbnB1dCkKKyAgICBvdXRmaWxlID0gQnl0ZXNJTygpCisgICAgcmVhZGxpbmUgPSBpbmZpbGUucmVhZGxpbmUKKyAgICB3cml0ZSA9IG91dGZpbGUud3JpdGUKKworICAgICMgRmluZCBzdGFydCBvZiBlbmNvZGVkIGRhdGEKKyAgICB3aGlsZSAxOgorICAgICAgICBzID0gcmVhZGxpbmUoKQorICAgICAgICBpZiBub3QgczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ01pc3NpbmcgImJlZ2luIiBsaW5lIGluIGlucHV0IGRhdGEnKQorICAgICAgICBpZiBzWzo1XSA9PSBiJ2JlZ2luJzoKKyAgICAgICAgICAgIGJyZWFrCisKKyAgICAjIERlY29kZQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHMgPSByZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBzIG9yIHMgPT0gYidlbmRcbic6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHMpCisgICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciBhcyB2OgorICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBicm9rZW4gdXVlbmNvZGVycyBieSAvRnJlZHJpayBMdW5kaAorICAgICAgICAgICAgbmJ5dGVzID0gKCgob3JkKHNbMF0pLTMyKSAmIDYzKSAqIDQgKyA1KSAvIDMKKyAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUoc1s6bmJ5dGVzXSkKKyAgICAgICAgICAgICNzeXMuc3RkZXJyLndyaXRlKCJXYXJuaW5nOiAlc1xuIiAlIHN0cih2KSkKKyAgICAgICAgd3JpdGUoZGF0YSkKKyAgICBpZiBub3QgczoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHJ1bmNhdGVkIGlucHV0IGRhdGEnKQorCisgICAgcmV0dXJuIChvdXRmaWxlLmdldHZhbHVlKCksIGxlbihpbnB1dCkpCisKK2NsYXNzIENvZGVjKGNvZGVjcy5Db2RlYyk6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIHV1X2VuY29kZShpbnB1dCwgZXJyb3JzKQorCisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIHV1X2RlY29kZShpbnB1dCwgZXJyb3JzKQorCitjbGFzcyBJbmNyZW1lbnRhbEVuY29kZXIoY29kZWNzLkluY3JlbWVudGFsRW5jb2Rlcik6CisgICAgZGVmIGVuY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gdXVfZW5jb2RlKGlucHV0LCBzZWxmLmVycm9ycylbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHV1X2RlY29kZShpbnB1dCwgc2VsZi5lcnJvcnMpWzBdCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYywgY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgY2hhcmJ1ZmZlcnR5cGUgPSBieXRlcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIGNoYXJidWZmZXJ0eXBlID0gYnl0ZXMKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSd1dScsCisgICAgICAgIGVuY29kZT11dV9lbmNvZGUsCisgICAgICAgIGRlY29kZT11dV9kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5IGIvTGliL2VuY29kaW5ncy96bGliX2NvZGVjLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjljZGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL3psaWJfY29kZWMucHkKQEAgLTAsMCArMSw3NyBAQAorIiIiUHl0aG9uICd6bGliX2NvZGVjJyBDb2RlYyAtIHpsaWIgY29tcHJlc3Npb24gZW5jb2RpbmcuCisKK1RoaXMgY29kZWMgZGUvZW5jb2RlcyBmcm9tIGJ5dGVzIHRvIGJ5dGVzIGFuZCBpcyB0aGVyZWZvcmUgdXNhYmxlIHdpdGgKK2J5dGVzLnRyYW5zZm9ybSgpIGFuZCBieXRlcy51bnRyYW5zZm9ybSgpLgorCitXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KKyIiIgorCitpbXBvcnQgY29kZWNzCitpbXBvcnQgemxpYiAjIHRoaXMgY29kZWMgbmVlZHMgdGhlIG9wdGlvbmFsIHpsaWIgbW9kdWxlICEKKworIyMjIENvZGVjIEFQSXMKKworZGVmIHpsaWJfZW5jb2RlKGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICByZXR1cm4gKHpsaWIuY29tcHJlc3MoaW5wdXQpLCBsZW4oaW5wdXQpKQorCitkZWYgemxpYl9kZWNvZGUoaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JworICAgIHJldHVybiAoemxpYi5kZWNvbXByZXNzKGlucHV0KSwgbGVuKGlucHV0KSkKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gemxpYl9lbmNvZGUoaW5wdXQsIGVycm9ycykKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gemxpYl9kZWNvZGUoaW5wdXQsIGVycm9ycykKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICBhc3NlcnQgZXJyb3JzID09ICdzdHJpY3QnCisgICAgICAgIHNlbGYuZXJyb3JzID0gZXJyb3JzCisgICAgICAgIHNlbGYuY29tcHJlc3NvYmogPSB6bGliLmNvbXByZXNzb2JqKCkKKworICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgaWYgZmluYWw6CisgICAgICAgICAgICBjID0gc2VsZi5jb21wcmVzc29iai5jb21wcmVzcyhpbnB1dCkKKyAgICAgICAgICAgIHJldHVybiBjICsgc2VsZi5jb21wcmVzc29iai5mbHVzaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21wcmVzc29iai5jb21wcmVzcyhpbnB1dCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgc2VsZi5jb21wcmVzc29iaiA9IHpsaWIuY29tcHJlc3NvYmooKQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIGFzc2VydCBlcnJvcnMgPT0gJ3N0cmljdCcKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKKyAgICAgICAgc2VsZi5kZWNvbXByZXNzb2JqID0gemxpYi5kZWNvbXByZXNzb2JqKCkKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgaWYgZmluYWw6CisgICAgICAgICAgICBjID0gc2VsZi5kZWNvbXByZXNzb2JqLmRlY29tcHJlc3MoaW5wdXQpCisgICAgICAgICAgICByZXR1cm4gYyArIHNlbGYuZGVjb21wcmVzc29iai5mbHVzaCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNvbXByZXNzb2JqLmRlY29tcHJlc3MoaW5wdXQpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZGVjb21wcmVzc29iaiA9IHpsaWIuZGVjb21wcmVzc29iaigpCisKK2NsYXNzIFN0cmVhbVdyaXRlcihDb2RlYywgY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgY2hhcmJ1ZmZlcnR5cGUgPSBieXRlcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIGNoYXJidWZmZXJ0eXBlID0gYnl0ZXMKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSd6bGliJywKKyAgICAgICAgZW5jb2RlPXpsaWJfZW5jb2RlLAorICAgICAgICBkZWNvZGU9emxpYl9kZWNvZGUsCisgICAgICAgIGluY3JlbWVudGFsZW5jb2Rlcj1JbmNyZW1lbnRhbEVuY29kZXIsCisgICAgICAgIGluY3JlbWVudGFsZGVjb2Rlcj1JbmNyZW1lbnRhbERlY29kZXIsCisgICAgICAgIHN0cmVhbXJlYWRlcj1TdHJlYW1SZWFkZXIsCisgICAgICAgIHN0cmVhbXdyaXRlcj1TdHJlYW1Xcml0ZXIsCisgICAgKQpkaWZmIC0tZ2l0IGEvTGliL2ZpbGVpbnB1dC5weSBiL0xpYi9maWxlaW5wdXQucHkKaW5kZXggOTBhNjAwYi4uYTI1YTAyMSAxMDA2NDQKLS0tIGEvTGliL2ZpbGVpbnB1dC5weQorKysgYi9MaWIvZmlsZWlucHV0LnB5CkBAIC0yMzgsNiArMjM4LDEyIEBACiAgICAgICAgIHNlbGYubmV4dGZpbGUoKQogICAgICAgICBzZWxmLl9maWxlcyA9ICgpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIApkaWZmIC0tZ2l0IGEvTGliL2ZubWF0Y2gucHkgYi9MaWIvZm5tYXRjaC5weQppbmRleCBiZTFmZDFkLi43MjZmYmU1IDEwMDY0NAotLS0gYS9MaWIvZm5tYXRjaC5weQorKysgYi9MaWIvZm5tYXRjaC5weQpAQCAtOSwyMCArOSwxMyBAQAogVGhlIGZ1bmN0aW9uIHRyYW5zbGF0ZShQQVRURVJOKSByZXR1cm5zIGEgcmVndWxhciBleHByZXNzaW9uCiBjb3JyZXNwb25kaW5nIHRvIFBBVFRFUk4uICAoSXQgZG9lcyBub3QgY29tcGlsZSBpdC4pCiAiIiIKLQoraW1wb3J0IG9zCitpbXBvcnQgcG9zaXhwYXRoCiBpbXBvcnQgcmUKK2ltcG9ydCBmdW5jdG9vbHMKIAogX19hbGxfXyA9IFsiZmlsdGVyIiwgImZubWF0Y2giLCAiZm5tYXRjaGNhc2UiLCAidHJhbnNsYXRlIl0KIAotX2NhY2hlID0ge30gICMgTWFwcyB0ZXh0IHBhdHRlcm5zIHRvIGNvbXBpbGVkIHJlZ2V4ZW4uCi1fY2FjaGViID0ge30gICMgRGl0dG8gZm9yIGJ5dGVzIHBhdHRlcm5zLgotX01BWENBQ0hFID0gMTAwICMgTWF4aW11bSBzaXplIG9mIGNhY2hlcwotCi1kZWYgX3B1cmdlKCk6Ci0gICAgIiIiQ2xlYXIgdGhlIHBhdHRlcm4gY2FjaGUiIiIKLSAgICBfY2FjaGUuY2xlYXIoKQotICAgIF9jYWNoZWIuY2xlYXIoKQotCiBkZWYgZm5tYXRjaChuYW1lLCBwYXQpOgogICAgICIiIlRlc3Qgd2hldGhlciBGSUxFTkFNRSBtYXRjaGVzIFBBVFRFUk4uCiAKQEAgLTM4LDMzICszMSwyNSBAQAogICAgIGlmIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHJlcXVpcmVzIGl0LgogICAgIElmIHlvdSBkb24ndCB3YW50IHRoaXMsIHVzZSBmbm1hdGNoY2FzZShGSUxFTkFNRSwgUEFUVEVSTikuCiAgICAgIiIiCi0KLSAgICBpbXBvcnQgb3MKICAgICBuYW1lID0gb3MucGF0aC5ub3JtY2FzZShuYW1lKQogICAgIHBhdCA9IG9zLnBhdGgubm9ybWNhc2UocGF0KQogICAgIHJldHVybiBmbm1hdGNoY2FzZShuYW1lLCBwYXQpCiAKLWRlZiBfY29tcGlsZV9wYXR0ZXJuKHBhdCk6Ci0gICAgY2FjaGUgPSBfY2FjaGViIGlmIGlzaW5zdGFuY2UocGF0LCBieXRlcykgZWxzZSBfY2FjaGUKLSAgICByZWdleCA9IGNhY2hlLmdldChwYXQpCi0gICAgaWYgcmVnZXggaXMgTm9uZToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXQsIGJ5dGVzKToKLSAgICAgICAgICAgIHBhdF9zdHIgPSBzdHIocGF0LCAnSVNPLTg4NTktMScpCi0gICAgICAgICAgICByZXNfc3RyID0gdHJhbnNsYXRlKHBhdF9zdHIpCi0gICAgICAgICAgICByZXMgPSBieXRlcyhyZXNfc3RyLCAnSVNPLTg4NTktMScpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXMgPSB0cmFuc2xhdGUocGF0KQotICAgICAgICBpZiBsZW4oY2FjaGUpID49IF9NQVhDQUNIRToKLSAgICAgICAgICAgIGNhY2hlLmNsZWFyKCkKLSAgICAgICAgY2FjaGVbcGF0XSA9IHJlZ2V4ID0gcmUuY29tcGlsZShyZXMpCi0gICAgcmV0dXJuIHJlZ2V4Lm1hdGNoCitAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTI1MCkKK2RlZiBfY29tcGlsZV9wYXR0ZXJuKHBhdCwgaXNfYnl0ZXM9RmFsc2UpOgorICAgIGlmIGlzX2J5dGVzOgorICAgICAgICBwYXRfc3RyID0gc3RyKHBhdCwgJ0lTTy04ODU5LTEnKQorICAgICAgICByZXNfc3RyID0gdHJhbnNsYXRlKHBhdF9zdHIpCisgICAgICAgIHJlcyA9IGJ5dGVzKHJlc19zdHIsICdJU08tODg1OS0xJykKKyAgICBlbHNlOgorICAgICAgICByZXMgPSB0cmFuc2xhdGUocGF0KQorICAgIHJldHVybiByZS5jb21waWxlKHJlcykubWF0Y2gKIAogZGVmIGZpbHRlcihuYW1lcywgcGF0KToKLSAgICAiIiJSZXR1cm4gdGhlIHN1YnNldCBvZiB0aGUgbGlzdCBOQU1FUyB0aGF0IG1hdGNoIFBBVCIiIgotICAgIGltcG9ydCBvcyxwb3NpeHBhdGgKKyAgICAiIiJSZXR1cm4gdGhlIHN1YnNldCBvZiB0aGUgbGlzdCBOQU1FUyB0aGF0IG1hdGNoIFBBVC4iIiIKICAgICByZXN1bHQgPSBbXQogICAgIHBhdCA9IG9zLnBhdGgubm9ybWNhc2UocGF0KQotICAgIG1hdGNoID0gX2NvbXBpbGVfcGF0dGVybihwYXQpCisgICAgbWF0Y2ggPSBfY29tcGlsZV9wYXR0ZXJuKHBhdCwgaXNpbnN0YW5jZShwYXQsIGJ5dGVzKSkKICAgICBpZiBvcy5wYXRoIGlzIHBvc2l4cGF0aDoKICAgICAgICAgIyBub3JtY2FzZSBvbiBwb3NpeCBpcyBOT1AuIE9wdGltaXplIGl0IGF3YXkgZnJvbSB0aGUgbG9vcC4KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC04MiwxMCArNjcsMTAgQEAKICAgICBUaGlzIGlzIGEgdmVyc2lvbiBvZiBmbm1hdGNoKCkgd2hpY2ggZG9lc24ndCBjYXNlLW5vcm1hbGl6ZQogICAgIGl0cyBhcmd1bWVudHMuCiAgICAgIiIiCi0KLSAgICBtYXRjaCA9IF9jb21waWxlX3BhdHRlcm4ocGF0KQorICAgIG1hdGNoID0gX2NvbXBpbGVfcGF0dGVybihwYXQsIGlzaW5zdGFuY2UocGF0LCBieXRlcykpCiAgICAgcmV0dXJuIG1hdGNoKG5hbWUpIGlzIG5vdCBOb25lCiAKKwogZGVmIHRyYW5zbGF0ZShwYXQpOgogICAgICIiIlRyYW5zbGF0ZSBhIHNoZWxsIFBBVFRFUk4gdG8gYSByZWd1bGFyIGV4cHJlc3Npb24uCiAKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5CmluZGV4IDI3YjI3ZjQuLjhiZTUyZDIgMTAwNjQ0Ci0tLSBhL0xpYi9mcmFjdGlvbnMucHkKKysrIGIvTGliL2ZyYWN0aW9ucy5weQpAQCAtMywxMCArMywxMiBAQAogCiAiIiJGcmFjdGlvbiwgaW5maW5pdGUtcHJlY2lzaW9uLCByZWFsIG51bWJlcnMuIiIiCiAKK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAogaW1wb3J0IG1hdGgKIGltcG9ydCBudW1iZXJzCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCByZQoraW1wb3J0IHN5cwogCiBfX2FsbF9fID0gWydGcmFjdGlvbicsICdnY2QnXQogCkBAIC0yMiw2ICsyNCwxMiBAQAogICAgICAgICBhLCBiID0gYiwgYSViCiAgICAgcmV0dXJuIGEKIAorIyBDb25zdGFudHMgcmVsYXRlZCB0byB0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbjsgIGhhc2goeCkgaXMgYmFzZWQKKyMgb24gdGhlIHJlZHVjdGlvbiBvZiB4IG1vZHVsbyB0aGUgcHJpbWUgX1B5SEFTSF9NT0RVTFVTLgorX1B5SEFTSF9NT0RVTFVTID0gc3lzLmhhc2hfaW5mby5tb2R1bHVzCisjIFZhbHVlIHRvIGJlIHVzZWQgZm9yIHJhdGlvbmFscyB0aGF0IHJlZHVjZSB0byBpbmZpbml0eSBtb2R1bG8KKyMgX1B5SEFTSF9NT0RVTFVTLgorX1B5SEFTSF9JTkYgPSBzeXMuaGFzaF9pbmZvLmluZgogCiBfUkFUSU9OQUxfRk9STUFUID0gcmUuY29tcGlsZShyIiIiCiAgICAgXEFccyogICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydCwgdGhlbgpAQCAtNDEsMTMgKzQ5LDIxIEBACiBjbGFzcyBGcmFjdGlvbihudW1iZXJzLlJhdGlvbmFsKToKICAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgcmF0aW9uYWwgbnVtYmVycy4KIAotICAgIEZyYWN0aW9uKDgsIDYpIHdpbGwgcHJvZHVjZSBhIHJhdGlvbmFsIG51bWJlciBlcXVpdmFsZW50IHRvCi0gICAgNC8zLiBCb3RoIGFyZ3VtZW50cyBtdXN0IGJlIEludGVncmFsLiBUaGUgbnVtZXJhdG9yIGRlZmF1bHRzIHRvIDAKLSAgICBhbmQgdGhlIGRlbm9taW5hdG9yIGRlZmF1bHRzIHRvIDEgc28gdGhhdCBGcmFjdGlvbigzKSA9PSAzIGFuZAotICAgIEZyYWN0aW9uKCkgPT0gMC4KKyAgICBJbiB0aGUgdHdvLWFyZ3VtZW50IGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yLCBGcmFjdGlvbig4LCA2KSB3aWxsCisgICAgcHJvZHVjZSBhIHJhdGlvbmFsIG51bWJlciBlcXVpdmFsZW50IHRvIDQvMy4gQm90aCBhcmd1bWVudHMgbXVzdAorICAgIGJlIFJhdGlvbmFsLiBUaGUgbnVtZXJhdG9yIGRlZmF1bHRzIHRvIDAgYW5kIHRoZSBkZW5vbWluYXRvcgorICAgIGRlZmF1bHRzIHRvIDEgc28gdGhhdCBGcmFjdGlvbigzKSA9PSAzIGFuZCBGcmFjdGlvbigpID09IDAuCiAKLSAgICBGcmFjdGlvbiBjYW4gYWxzbyBiZSBjb25zdHJ1Y3RlZCBmcm9tIHN0cmluZ3Mgb2YgdGhlIGZvcm0KLSAgICAnWy0rXT9bMC05XSsoKC98LilbMC05XSspPycsIG9wdGlvbmFsbHkgc3Vycm91bmRlZCBieSBzcGFjZXMuCisgICAgRnJhY3Rpb25zIGNhbiBhbHNvIGJlIGNvbnN0cnVjdGVkIGZyb206CisKKyAgICAgIC0gbnVtZXJpYyBzdHJpbmdzIHNpbWlsYXIgdG8gdGhvc2UgYWNjZXB0ZWQgYnkgdGhlCisgICAgICAgIGZsb2F0IGNvbnN0cnVjdG9yIChmb3IgZXhhbXBsZSwgJy0yLjMnIG9yICcxZTEwJykKKworICAgICAgLSBzdHJpbmdzIG9mIHRoZSBmb3JtICcxMjMvNDU2JworCisgICAgICAtIGZsb2F0IGFuZCBEZWNpbWFsIGluc3RhbmNlcworCisgICAgICAtIG90aGVyIFJhdGlvbmFsIGluc3RhbmNlcyAoaW5jbHVkaW5nIGludGVnZXJzKQogCiAgICAgIiIiCiAKQEAgLTU3LDggKzczLDMyIEBACiAgICAgZGVmIF9fbmV3X18oY2xzLCBudW1lcmF0b3I9MCwgZGVub21pbmF0b3I9Tm9uZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdHMgYSBSYXRpb25hbC4KIAotICAgICAgICBUYWtlcyBhIHN0cmluZyBsaWtlICczLzInIG9yICcxLjUnLCBhbm90aGVyIFJhdGlvbmFsLCBvciBhCi0gICAgICAgIG51bWVyYXRvci9kZW5vbWluYXRvciBwYWlyLgorICAgICAgICBUYWtlcyBhIHN0cmluZyBsaWtlICczLzInIG9yICcxLjUnLCBhbm90aGVyIFJhdGlvbmFsIGluc3RhbmNlLCBhCisgICAgICAgIG51bWVyYXRvci9kZW5vbWluYXRvciBwYWlyLCBvciBhIGZsb2F0LgorCisgICAgICAgIEV4YW1wbGVzCisgICAgICAgIC0tLS0tLS0tCisKKyAgICAgICAgPj4+IEZyYWN0aW9uKDEwLCAtOCkKKyAgICAgICAgRnJhY3Rpb24oLTUsIDQpCisgICAgICAgID4+PiBGcmFjdGlvbihGcmFjdGlvbigxLCA3KSwgNSkKKyAgICAgICAgRnJhY3Rpb24oMSwgMzUpCisgICAgICAgID4+PiBGcmFjdGlvbihGcmFjdGlvbigxLCA3KSwgRnJhY3Rpb24oMiwgMykpCisgICAgICAgIEZyYWN0aW9uKDMsIDE0KQorICAgICAgICA+Pj4gRnJhY3Rpb24oJzMxNCcpCisgICAgICAgIEZyYWN0aW9uKDMxNCwgMSkKKyAgICAgICAgPj4+IEZyYWN0aW9uKCctMzUvNCcpCisgICAgICAgIEZyYWN0aW9uKC0zNSwgNCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKCczLjE0MTUnKSAjIGNvbnZlcnNpb24gZnJvbSBudW1lcmljIHN0cmluZworICAgICAgICBGcmFjdGlvbig2MjgzLCAyMDAwKQorICAgICAgICA+Pj4gRnJhY3Rpb24oJy00N2UtMicpICMgc3RyaW5nIG1heSBpbmNsdWRlIGEgZGVjaW1hbCBleHBvbmVudAorICAgICAgICBGcmFjdGlvbigtNDcsIDEwMCkKKyAgICAgICAgPj4+IEZyYWN0aW9uKDEuNDcpICAjIGRpcmVjdCBjb25zdHJ1Y3Rpb24gZnJvbSBmbG9hdCAoZXhhY3QgY29udmVyc2lvbikKKyAgICAgICAgRnJhY3Rpb24oNjYyMDI5MTQ1MjIzNDYyOSwgNDUwMzU5OTYyNzM3MDQ5NikKKyAgICAgICAgPj4+IEZyYWN0aW9uKDIuMjUpCisgICAgICAgIEZyYWN0aW9uKDksIDQpCisgICAgICAgID4+PiBGcmFjdGlvbihEZWNpbWFsKCcxLjQ3JykpCisgICAgICAgIEZyYWN0aW9uKDE0NywgMTAwKQogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmID0gc3VwZXIoRnJhY3Rpb24sIGNscykuX19uZXdfXyhjbHMpCkBAIC02OSw2ICsxMDksMTkgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IG51bWVyYXRvci5kZW5vbWluYXRvcgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShudW1lcmF0b3IsIGZsb2F0KToKKyAgICAgICAgICAgICAgICAjIEV4YWN0IGNvbnZlcnNpb24gZnJvbSBmbG9hdAorICAgICAgICAgICAgICAgIHZhbHVlID0gRnJhY3Rpb24uZnJvbV9mbG9hdChudW1lcmF0b3IpCisgICAgICAgICAgICAgICAgc2VsZi5fbnVtZXJhdG9yID0gdmFsdWUuX251bWVyYXRvcgorICAgICAgICAgICAgICAgIHNlbGYuX2Rlbm9taW5hdG9yID0gdmFsdWUuX2Rlbm9taW5hdG9yCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG51bWVyYXRvciwgRGVjaW1hbCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBGcmFjdGlvbi5mcm9tX2RlY2ltYWwobnVtZXJhdG9yKQorICAgICAgICAgICAgICAgIHNlbGYuX251bWVyYXRvciA9IHZhbHVlLl9udW1lcmF0b3IKKyAgICAgICAgICAgICAgICBzZWxmLl9kZW5vbWluYXRvciA9IHZhbHVlLl9kZW5vbWluYXRvcgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShudW1lcmF0b3IsIHN0cik6CiAgICAgICAgICAgICAgICAgIyBIYW5kbGUgY29uc3RydWN0aW9uIGZyb20gc3RyaW5ncy4KICAgICAgICAgICAgICAgICBtID0gX1JBVElPTkFMX0ZPUk1BVC5tYXRjaChudW1lcmF0b3IpCkBAIC00NzUsMjMgKzUyOCwyNiBAQAogICAgICAgICAgICAgcmV0dXJuIEZyYWN0aW9uKHJvdW5kKHNlbGYgLyBzaGlmdCkgKiBzaGlmdCkKIAogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgIiIiaGFzaChzZWxmKQorICAgICAgICAiIiJoYXNoKHNlbGYpIiIiCiAKLSAgICAgICAgVHJpY2t5IGJlY2F1c2UgdmFsdWVzIHRoYXQgYXJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhCi0gICAgICAgIGZsb2F0IG11c3QgaGF2ZSB0aGUgc2FtZSBoYXNoIGFzIHRoYXQgZmxvYXQuCi0KLSAgICAgICAgIiIiCiAgICAgICAgICMgWFhYIHNpbmNlIHRoaXMgbWV0aG9kIGlzIGV4cGVuc2l2ZSwgY29uc2lkZXIgY2FjaGluZyB0aGUgcmVzdWx0Ci0gICAgICAgIGlmIHNlbGYuX2Rlbm9taW5hdG9yID09IDE6Ci0gICAgICAgICAgICAjIEdldCBpbnRlZ2VycyByaWdodC4KLSAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX251bWVyYXRvcikKLSAgICAgICAgIyBFeHBlbnNpdmUgY2hlY2ssIGJ1dCBkZWZpbml0ZWx5IGNvcnJlY3QuCi0gICAgICAgIGlmIHNlbGYgPT0gZmxvYXQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gaGFzaChmbG9hdChzZWxmKSkKKworICAgICAgICAjIEluIG9yZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBoYXNoIG9mIGEgRnJhY3Rpb24gYWdyZWVzCisgICAgICAgICMgd2l0aCB0aGUgaGFzaCBvZiBhIG51bWVyaWNhbGx5IGVxdWFsIGludGVnZXIsIGZsb2F0IG9yCisgICAgICAgICMgRGVjaW1hbCBpbnN0YW5jZSwgd2UgZm9sbG93IHRoZSBydWxlcyBmb3IgbnVtZXJpYyBoYXNoZXMKKyAgICAgICAgIyBvdXRsaW5lZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gIChTZWUgbGlicmFyeSBkb2NzLCAnQnVpbHQtaW4KKyAgICAgICAgIyBUeXBlcycpLgorCisgICAgICAgICMgZGludiBpcyB0aGUgaW52ZXJzZSBvZiBzZWxmLl9kZW5vbWluYXRvciBtb2R1bG8gdGhlIHByaW1lCisgICAgICAgICMgX1B5SEFTSF9NT0RVTFVTLCBvciAwIGlmIHNlbGYuX2Rlbm9taW5hdG9yIGlzIGRpdmlzaWJsZSBieQorICAgICAgICAjIF9QeUhBU0hfTU9EVUxVUy4KKyAgICAgICAgZGludiA9IHBvdyhzZWxmLl9kZW5vbWluYXRvciwgX1B5SEFTSF9NT0RVTFVTIC0gMiwgX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICBpZiBub3QgZGludjoKKyAgICAgICAgICAgIGhhc2hfID0gX1B5SEFTSF9JTkYKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVXNlIHR1cGxlJ3MgaGFzaCB0byBhdm9pZCBhIGhpZ2ggY29sbGlzaW9uIHJhdGUgb24KLSAgICAgICAgICAgICMgc2ltcGxlIGZyYWN0aW9ucy4KLSAgICAgICAgICAgIHJldHVybiBoYXNoKChzZWxmLl9udW1lcmF0b3IsIHNlbGYuX2Rlbm9taW5hdG9yKSkKKyAgICAgICAgICAgIGhhc2hfID0gYWJzKHNlbGYuX251bWVyYXRvcikgKiBkaW52ICUgX1B5SEFTSF9NT0RVTFVTCisgICAgICAgIHJlc3VsdCA9IGhhc2hfIGlmIHNlbGYgPj0gMCBlbHNlIC1oYXNoXworICAgICAgICByZXR1cm4gLTIgaWYgcmVzdWx0ID09IC0xIGVsc2UgcmVzdWx0CiAKICAgICBkZWYgX19lcV9fKGEsIGIpOgogICAgICAgICAiIiJhID09IGIiIiIKQEAgLTUyNiw4ICs1ODIsNiBAQAogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBudW1iZXJzLlJhdGlvbmFsKToKICAgICAgICAgICAgIHJldHVybiBvcChzZWxmLl9udW1lcmF0b3IgKiBvdGhlci5kZW5vbWluYXRvciwKICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kZW5vbWluYXRvciAqIG90aGVyLm51bWVyYXRvcikKLSAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgbnVtYmVycy5Db21wbGV4KSBhbmQgb3RoZXIuaW1hZyA9PSAwOgotICAgICAgICAgICAgb3RoZXIgPSBvdGhlci5yZWFsCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIGZsb2F0KToKICAgICAgICAgICAgIGlmIG1hdGguaXNuYW4ob3RoZXIpIG9yIG1hdGguaXNpbmYob3RoZXIpOgogICAgICAgICAgICAgICAgIHJldHVybiBvcCgwLjAsIG90aGVyKQpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggZWE5MWMxNy4uN2MzOTg4NyAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zMywxNyArMzMsMTIgQEAKICMgTW9kaWZpZWQgYnkgSmFjayB0byB3b3JrIG9uIHRoZSBtYWMuCiAjIE1vZGlmaWVkIGJ5IFNpZWJyZW4gdG8gc3VwcG9ydCBkb2NzdHJpbmdzIGFuZCBQQVNWLgogIyBNb2RpZmllZCBieSBQaGlsIFNjaHdhcnR6IHRvIGFkZCBzdG9yYmluYXJ5IGFuZCBzdG9ybGluZXMgY2FsbGJhY2tzLgorIyBNb2RpZmllZCBieSBHaWFtcGFvbG8gUm9kb2xhJyB0byBhZGQgVExTIHN1cHBvcnQuCiAjCiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotCi0jIEltcG9ydCBTT0NLUyBtb2R1bGUgaWYgaXQgZXhpc3RzLCBlbHNlIHN0YW5kYXJkIHNvY2tldCBtb2R1bGUgc29ja2V0Ci10cnk6Ci0gICAgaW1wb3J0IFNPQ0tTOyBzb2NrZXQgPSBTT0NLUzsgZGVsIFNPQ0tTICMgaW1wb3J0IFNPQ0tTIGFzIHNvY2tldAotICAgIGZyb20gc29ja2V0IGltcG9ydCBnZXRmcWRuOyBzb2NrZXQuZ2V0ZnFkbiA9IGdldGZxZG47IGRlbCBnZXRmcWRuCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IHNvY2tldAoraW1wb3J0IHNvY2tldAogZnJvbSBzb2NrZXQgaW1wb3J0IF9HTE9CQUxfREVGQVVMVF9USU1FT1VUCiAKIF9fYWxsX18gPSBbIkZUUCIsIk5ldHJjIl0KQEAgLTExOSw2ICsxMTQsMjAgQEAKICAgICAgICAgICAgIGlmIHVzZXI6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2dpbih1c2VyLCBwYXNzd2QsIGFjY3QpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgIyBDb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2w6IHRyeSB0byBxdWl0KCkgaWYgYWN0aXZlCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucXVpdCgpCisgICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3Q9JycsIHBvcnQ9MCwgdGltZW91dD0tOTk5KToKICAgICAgICAgJycnQ29ubmVjdCB0byBob3N0LiAgQXJndW1lbnRzIGFyZToKICAgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgdG8gY29ubmVjdCB0byAoc3RyaW5nLCBkZWZhdWx0IHByZXZpb3VzIGhvc3QpCkBAIC0xNjIsNyArMTcxLDcgQEAKICAgICBkZWYgc2FuaXRpemUoc2VsZiwgcyk6CiAgICAgICAgIGlmIHNbOjVdID09ICdwYXNzICcgb3Igc1s6NV0gPT0gJ1BBU1MgJzoKICAgICAgICAgICAgIGkgPSBsZW4ocykKLSAgICAgICAgICAgIHdoaWxlIGkgPiA1IGFuZCBzW2ktMV0gaW4gJ1xyXG4nOgorICAgICAgICAgICAgd2hpbGUgaSA+IDUgYW5kIHNbaS0xXSBpbiB7J1xyJywgJ1xuJ306CiAgICAgICAgICAgICAgICAgaSA9IGktMQogICAgICAgICAgICAgcyA9IHNbOjVdICsgJyonKihpLTUpICsgc1tpOl0KICAgICAgICAgcmV0dXJuIHJlcHIocykKQEAgLTIxMiw3ICsyMjEsNyBAQAogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCiAgICAgICAgIHNlbGYubGFzdHJlc3AgPSByZXNwWzozXQogICAgICAgICBjID0gcmVzcFs6MV0KLSAgICAgICAgaWYgYyBpbiAoJzEnLCAnMicsICczJyk6CisgICAgICAgIGlmIGMgaW4geycxJywgJzInLCAnMyd9OgogICAgICAgICAgICAgcmV0dXJuIHJlc3AKICAgICAgICAgaWYgYyA9PSAnNCc6CiAgICAgICAgICAgICByYWlzZSBlcnJvcl90ZW1wKHJlc3ApCkBAIC0yMzYsNyArMjQ1LDcgQEAKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOiBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZSwgTVNHX09PQikKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKLSAgICAgICAgaWYgcmVzcFs6M10gbm90IGluICgnNDI2JywgJzIyNScsICcyMjYnKToKKyAgICAgICAgaWYgcmVzcFs6M10gbm90IGluIHsnNDI2JywgJzIyNScsICcyMjYnfToKICAgICAgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvKHJlc3ApCiAKICAgICBkZWYgc2VuZGNtZChzZWxmLCBjbWQpOgpAQCAtMzUyLDYgKzM2MSw3IEBACiAgICAgICAgICAgICBjb25uLCBzb2NrYWRkciA9IHNvY2suYWNjZXB0KCkKICAgICAgICAgICAgIGlmIHNlbGYudGltZW91dCBpcyBub3QgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQ6CiAgICAgICAgICAgICAgICAgY29ubi5zZXR0aW1lb3V0KHNlbGYudGltZW91dCkKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQogICAgICAgICBpZiByZXNwWzozXSA9PSAnMTUwJzoKICAgICAgICAgICAgICMgdGhpcyBpcyBjb25kaXRpb25hbCBpbiBjYXNlIHdlIHJlY2VpdmVkIGEgMTI1CiAgICAgICAgICAgICBzaXplID0gcGFyc2UxNTAocmVzcCkKQEAgLTM2Niw3ICszNzYsNyBAQAogICAgICAgICBpZiBub3QgdXNlcjogdXNlciA9ICdhbm9ueW1vdXMnCiAgICAgICAgIGlmIG5vdCBwYXNzd2Q6IHBhc3N3ZCA9ICcnCiAgICAgICAgIGlmIG5vdCBhY2N0OiBhY2N0ID0gJycKLSAgICAgICAgaWYgdXNlciA9PSAnYW5vbnltb3VzJyBhbmQgcGFzc3dkIGluICgnJywgJy0nKToKKyAgICAgICAgaWYgdXNlciA9PSAnYW5vbnltb3VzJyBhbmQgcGFzc3dkIGluIHsnJywgJy0nfToKICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gYW5vbnltb3VzIGZ0cCBwYXNzd29yZCBzcGVjaWZpZWQKICAgICAgICAgICAgICMgdGhlbiB3ZSdsbCBqdXN0IHVzZSBhbm9ueW1vdXNACiAgICAgICAgICAgICAjIFdlIGRvbid0IHNlbmQgYW55IG90aGVyIHRoaW5nIGJlY2F1c2U6CkBAIC0zOTcsMTMgKzQwNywxMiBAQAogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBjYWxsYmFjayhkYXRhKQotICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihibG9ja3NpemUpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6CkBAIC00MjAsMjMgKzQyOSwyMSBAQAogICAgICAgICAiIiIKICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCi0gICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKLSAgICAgICAgZnAgPSBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKLSAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubiwgXAorICAgICAgICAgICAgICAgICBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgZnA6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICAgICAgICAgIGVsaWYgbGluZVstMTpdID09ICdcbic6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKLSAgICBkZWYgc3RvcmJpbmFyeShzZWxmLCBjbWQsIGZwLCBibG9ja3NpemU9ODE5MiwgY2FsbGJhY2s9Tm9uZSk6CisgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CiAgICAgICAgICIiIlN0b3JlIGEgZmlsZSBpbiBiaW5hcnkgbW9kZS4gIEEgbmV3IHBvcnQgaXMgY3JlYXRlZCBmb3IgeW91LgogCiAgICAgICAgIEFyZ3M6CkBAIC00NDYsMTggKzQ1MywxOCBAQAogICAgICAgICAgICAgICAgICAgICAgdGhlIGNvbm5lY3Rpb24gYXQgb25jZS4gIFtkZWZhdWx0OiA4MTkyXQogICAgICAgICAgIGNhbGxiYWNrOiBBbiBvcHRpb25hbCBzaW5nbGUgcGFyYW1ldGVyIGNhbGxhYmxlIHRoYXQgaXMgY2FsbGVkIG9uCiAgICAgICAgICAgICAgICAgICAgIG9uIGVhY2ggYmxvY2sgb2YgZGF0YSBhZnRlciBpdCBpcyBzZW50LiAgW2RlZmF1bHQ6IE5vbmVdCisgICAgICAgICAgcmVzdDogUGFzc2VkIHRvIHRyYW5zZmVyY21kKCkuICBbZGVmYXVsdDogTm9uZV0KIAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCi0gICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgpAQCAtNDczLDE2ICs0ODAsMTUgQEAKICAgICAgICAgICBUaGUgcmVzcG9uc2UgY29kZS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBBJykKLSAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgIGlmIGJ1ZlstMjpdICE9IEJfQ1JMRjoKLSAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KLSAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKLSAgICAgICAgICAgIGNvbm4uc2VuZGFsbChidWYpCi0gICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQotICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgorICAgICAgICAgICAgICAgICAgICBpZiBidWZbLTFdIGluIEJfQ1JMRjogYnVmID0gYnVmWzotMV0KKyAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICsgQl9DUkxGCisgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgYWNjdChzZWxmLCBwYXNzd29yZCk6CkBAIC01MjQsNyArNTMwLDcgQEAKICAgICBkZWYgZGVsZXRlKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgJycnRGVsZXRlIGEgZmlsZS4nJycKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnREVMRSAnICsgZmlsZW5hbWUpCi0gICAgICAgIGlmIHJlc3BbOjNdIGluICgnMjUwJywgJzIwMCcpOgorICAgICAgICBpZiByZXNwWzozXSBpbiB7JzI1MCcsICcyMDAnfToKICAgICAgICAgICAgIHJldHVybiByZXNwCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBlcnJvcl9yZXBseShyZXNwKQpAQCAtNTU1LDcgKzU2MSwxMSBAQAogCiAgICAgZGVmIG1rZChzZWxmLCBkaXJuYW1lKToKICAgICAgICAgJycnTWFrZSBhIGRpcmVjdG9yeSwgcmV0dXJuIGl0cyBmdWxsIHBhdGhuYW1lLicnJwotICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdNS0QgJyArIGRpcm5hbWUpCisgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ01LRCAnICsgZGlybmFtZSkKKyAgICAgICAgIyBmaXggYXJvdW5kIG5vbi1jb21wbGlhbnQgaW1wbGVtZW50YXRpb25zIHN1Y2ggYXMgSUlTIHNoaXBwZWQKKyAgICAgICAgIyB3aXRoIFdpbmRvd3Mgc2VydmVyIDIwMDMKKyAgICAgICAgaWYgbm90IHJlc3Auc3RhcnRzd2l0aCgnMjU3Jyk6CisgICAgICAgICAgICByZXR1cm4gJycKICAgICAgICAgcmV0dXJuIHBhcnNlMjU3KHJlc3ApCiAKICAgICBkZWYgcm1kKHNlbGYsIGRpcm5hbWUpOgpAQCAtNTY0LDcgKzU3NCwxMSBAQAogCiAgICAgZGVmIHB3ZChzZWxmKToKICAgICAgICAgJycnUmV0dXJuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuJycnCi0gICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BXRCcpCisgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ1BXRCcpCisgICAgICAgICMgZml4IGFyb3VuZCBub24tY29tcGxpYW50IGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIElJUyBzaGlwcGVkCisgICAgICAgICMgd2l0aCBXaW5kb3dzIHNlcnZlciAyMDAzCisgICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoJzI1NycpOgorICAgICAgICAgICAgcmV0dXJuICcnCiAgICAgICAgIHJldHVybiBwYXJzZTI1NyhyZXNwKQogCiAgICAgZGVmIHF1aXQoc2VsZik6CkBAIC01ODEsNiArNTk1LDE5NiBAQAogICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrID0gTm9uZQogCiAKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBjbGFzcyBGVFBfVExTKEZUUCk6CisgICAgICAgICcnJ0EgRlRQIHN1YmNsYXNzIHdoaWNoIGFkZHMgVExTIHN1cHBvcnQgdG8gRlRQIGFzIGRlc2NyaWJlZAorICAgICAgICBpbiBSRkMtNDIxNy4KKworICAgICAgICBDb25uZWN0IGFzIHVzdWFsIHRvIHBvcnQgMjEgaW1wbGljaXRseSBzZWN1cmluZyB0aGUgRlRQIGNvbnRyb2wKKyAgICAgICAgY29ubmVjdGlvbiBiZWZvcmUgYXV0aGVudGljYXRpbmcuCisKKyAgICAgICAgU2VjdXJpbmcgdGhlIGRhdGEgY29ubmVjdGlvbiByZXF1aXJlcyB1c2VyIHRvIGV4cGxpY2l0bHkgYXNrCisgICAgICAgIGZvciBpdCBieSBjYWxsaW5nIHByb3RfcCgpIG1ldGhvZC4KKworICAgICAgICBVc2FnZSBleGFtcGxlOgorICAgICAgICA+Pj4gZnJvbSBmdHBsaWIgaW1wb3J0IEZUUF9UTFMKKyAgICAgICAgPj4+IGZ0cHMgPSBGVFBfVExTKCdmdHAucHl0aG9uLm9yZycpCisgICAgICAgID4+PiBmdHBzLmxvZ2luKCkgICMgbG9naW4gYW5vbnltb3VzbHkgcHJldmlvdXNseSBzZWN1cmluZyBjb250cm9sIGNoYW5uZWwKKyAgICAgICAgJzIzMCBHdWVzdCBsb2dpbiBvaywgYWNjZXNzIHJlc3RyaWN0aW9ucyBhcHBseS4nCisgICAgICAgID4+PiBmdHBzLnByb3RfcCgpICAjIHN3aXRjaCB0byBzZWN1cmUgZGF0YSBjb25uZWN0aW9uCisgICAgICAgICcyMDAgUHJvdGVjdGlvbiBsZXZlbCBzZXQgdG8gUCcKKyAgICAgICAgPj4+IGZ0cHMucmV0cmxpbmVzKCdMSVNUJykgICMgbGlzdCBkaXJlY3RvcnkgY29udGVudCBzZWN1cmVseQorICAgICAgICB0b3RhbCA5CisgICAgICAgIGRyd3hyLXhyLXggICA4IHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCAuCisgICAgICAgIGRyd3hyLXhyLXggICA4IHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCAuLgorICAgICAgICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgYmluCisgICAgICAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCBldGMKKyAgICAgICAgZC13eHJ3eHIteCAgIDIgZnRwICAgICAgd2hlZWwgICAgICAgIDEwMjQgU2VwICA1IDEzOjQzIGluY29taW5nCisgICAgICAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IE5vdiAxNyAgMTk5MyBsaWIKKyAgICAgICAgZHJ3eHIteHIteCAgIDYgMTA5NCAgICAgd2hlZWwgICAgICAgIDEwMjQgU2VwIDEzIDE5OjA3IHB1YgorICAgICAgICBkcnd4ci14ci14ICAgMyByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgdXNyCisgICAgICAgIC1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMzEyIEF1ZyAgMSAgMTk5NCB3ZWxjb21lLm1zZworICAgICAgICAnMjI2IFRyYW5zZmVyIGNvbXBsZXRlLicKKyAgICAgICAgPj4+IGZ0cHMucXVpdCgpCisgICAgICAgICcyMjEgR29vZGJ5ZS4nCisgICAgICAgID4+PgorICAgICAgICAnJycKKyAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nJywgdXNlcj0nJywgcGFzc3dkPScnLCBhY2N0PScnLCBrZXlmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1Ob25lLCBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PV9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmUgYW5kIGtleWZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBhbmQga2V5ZmlsZSBhcmd1bWVudHMgYXJlIG11dHVhbGx5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZSBhbmQgY2VydGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBhbmQgY2VydGZpbGUgYXJndW1lbnRzIGFyZSBtdXR1YWxseSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKKyAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKKyAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAorICAgICAgICAgICAgc2VsZi5fcHJvdF9wID0gRmFsc2UKKyAgICAgICAgICAgIEZUUC5fX2luaXRfXyhzZWxmLCBob3N0LCB1c2VyLCBwYXNzd2QsIGFjY3QsIHRpbWVvdXQpCisKKyAgICAgICAgZGVmIGxvZ2luKHNlbGYsIHVzZXI9JycsIHBhc3N3ZD0nJywgYWNjdD0nJywgc2VjdXJlPVRydWUpOgorICAgICAgICAgICAgaWYgc2VjdXJlIGFuZCBub3QgaXNpbnN0YW5jZShzZWxmLnNvY2ssIHNzbC5TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIHNlbGYuYXV0aCgpCisgICAgICAgICAgICByZXR1cm4gRlRQLmxvZ2luKHNlbGYsIHVzZXIsIHBhc3N3ZCwgYWNjdCkKKworICAgICAgICBkZWYgYXV0aChzZWxmKToKKyAgICAgICAgICAgICcnJ1NldCB1cCBzZWN1cmUgY29udHJvbCBjb25uZWN0aW9uIGJ5IHVzaW5nIFRMUy9TU0wuJycnCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYuc29jaywgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQWxyZWFkeSB1c2luZyBUTFMiKQorICAgICAgICAgICAgaWYgc2VsZi5zc2xfdmVyc2lvbiA9PSBzc2wuUFJPVE9DT0xfVExTdjE6CisgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBUTFMnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdBVVRIIFNTTCcpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VsZi5rZXlmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKG1vZGU9J3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQorICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgcHJvdF9wKHNlbGYpOgorICAgICAgICAgICAgJycnU2V0IHVwIHNlY3VyZSBkYXRhIGNvbm5lY3Rpb24uJycnCisgICAgICAgICAgICAjIFBST1QgZGVmaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgZGF0YSBjaGFubmVsIGlzIHRvIGJlIHByb3RlY3RlZC4KKyAgICAgICAgICAgICMgVGhvdWdoIFJGQy0yMjI4IGRlZmluZXMgZm91ciBwb3NzaWJsZSBwcm90ZWN0aW9uIGxldmVscywKKyAgICAgICAgICAgICMgUkZDLTQyMTcgb25seSByZWNvbW1lbmRzIHR3bywgQ2xlYXIgYW5kIFByaXZhdGUuCisgICAgICAgICAgICAjIENsZWFyIChQUk9UIEMpIG1lYW5zIHRoYXQgbm8gc2VjdXJpdHkgaXMgdG8gYmUgdXNlZCBvbiB0aGUKKyAgICAgICAgICAgICMgZGF0YS1jaGFubmVsLCBQcml2YXRlIChQUk9UIFApIG1lYW5zIHRoYXQgdGhlIGRhdGEtY2hhbm5lbAorICAgICAgICAgICAgIyBzaG91bGQgYmUgcHJvdGVjdGVkIGJ5IFRMUy4KKyAgICAgICAgICAgICMgUEJTWiBjb21tYW5kIE1VU1Qgc3RpbGwgYmUgaXNzdWVkLCBidXQgbXVzdCBoYXZlIGEgcGFyYW1ldGVyIG9mCisgICAgICAgICAgICAjICcwJyB0byBpbmRpY2F0ZSB0aGF0IG5vIGJ1ZmZlcmluZyBpcyB0YWtpbmcgcGxhY2UgYW5kIHRoZSBkYXRhCisgICAgICAgICAgICAjIGNvbm5lY3Rpb24gc2hvdWxkIG5vdCBiZSBlbmNhcHN1bGF0ZWQuCisgICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1BCU1ogMCcpCisgICAgICAgICAgICByZXNwID0gc2VsZi52b2lkY21kKCdQUk9UIFAnKQorICAgICAgICAgICAgc2VsZi5fcHJvdF9wID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHJlc3AKKworICAgICAgICBkZWYgcHJvdF9jKHNlbGYpOgorICAgICAgICAgICAgJycnU2V0IHVwIGNsZWFyIHRleHQgZGF0YSBjb25uZWN0aW9uLicnJworICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnUFJPVCBDJykKKyAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gcmVzcAorCisgICAgICAgICMgLS0tIE92ZXJyaWRkZW4gRlRQIG1ldGhvZHMKKworICAgICAgICBkZWYgbnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdD1Ob25lKToKKyAgICAgICAgICAgIGNvbm4sIHNpemUgPSBGVFAubnRyYW5zZmVyY21kKHNlbGYsIGNtZCwgcmVzdCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3Byb3RfcDoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoY29ubikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBjb25uID0gc3NsLndyYXBfc29ja2V0KGNvbm4sIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zZWxmLnNzbF92ZXJzaW9uKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4sIHNpemUKKworICAgICAgICBkZWYgcmV0cmJpbmFyeShzZWxmLCBjbWQsIGNhbGxiYWNrLCBibG9ja3NpemU9ODE5MiwgcmVzdD1Ob25lKToKKyAgICAgICAgICAgIHNlbGYudm9pZGNtZCgnVFlQRSBJJykKKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KGJsb2Nrc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKKworICAgICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKKyAgICAgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6IGNhbGxiYWNrID0gcHJpbnRfbGluZQorICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLnRyYW5zZmVyY21kKGNtZCkKKyAgICAgICAgICAgIGZwID0gY29ubi5tYWtlZmlsZSgncicsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAyOiBwcmludCgnKnJldHIqJywgcmVwcihsaW5lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gQ1JMRjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKKyAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQorCisgICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgYnVmOiBicmVhaworICAgICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQorICAgICAgICAgICAgICAgICAgICBpZiBjYWxsYmFjazogY2FsbGJhY2soYnVmKQorICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKKyAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKKworICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgorICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQorICAgICAgICAgICAgY29ubiA9IHNlbGYudHJhbnNmZXJjbWQoY21kKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKKyAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKKyAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCisKKyAgICBfX2FsbF9fLmFwcGVuZCgnRlRQX1RMUycpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgSU9FcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKKworCiBfMTUwX3JlID0gTm9uZQogCiBkZWYgcGFyc2UxNTAocmVzcCk6CkBAIC02ODksOSArODkzLDkgQEAKICAgICAjIHRyYW5zZmVyIHJlcXVlc3QuCiAgICAgIyBTbzogU1RPUiBiZWZvcmUgUkVUUiwgYmVjYXVzZSBoZXJlIHRoZSB0YXJnZXQgaXMgYSAidXNlciIuCiAgICAgdHJlcGx5ID0gdGFyZ2V0LnNlbmRjbWQoJ1NUT1IgJyArIHRhcmdldG5hbWUpCi0gICAgaWYgdHJlcGx5WzozXSBub3QgaW4gKCcxMjUnLCAnMTUwJyk6IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfTogcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNyZXBseSA9IHNvdXJjZS5zZW5kY21kKCdSRVRSICcgKyBzb3VyY2VuYW1lKQotICAgIGlmIHNyZXBseVs6M10gbm90IGluICgnMTI1JywgJzE1MCcpOiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzb3VyY2Uudm9pZHJlc3AoKQogICAgIHRhcmdldC52b2lkcmVzcCgpCiAKZGlmZiAtLWdpdCBhL0xpYi9mdW5jdG9vbHMucHkgYi9MaWIvZnVuY3Rvb2xzLnB5CmluZGV4IDEwM2RkNDIuLmU5MmEyZmMgMTAwNjQ0Ci0tLSBhL0xpYi9mdW5jdG9vbHMucHkKKysrIGIvTGliL2Z1bmN0b29scy5weQpAQCAtNCwxMCArNCwxOSBAQAogIyB0byBhbGxvdyB1dGlsaXRpZXMgd3JpdHRlbiBpbiBQeXRob24gdG8gYmUgYWRkZWQKICMgdG8gdGhlIGZ1bmN0b29scyBtb2R1bGUuCiAjIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+Ci0jICAgQ29weXJpZ2h0IChDKSAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIyBhbmQgUmF5bW9uZCBIZXR0aW5nZXIgPHB5dGhvbiBhdCByY24uY29tPgorIyAgIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogIyBTZWUgQyBzb3VyY2UgY29kZSBmb3IgX2Z1bmN0b29scyBjcmVkaXRzL2NvcHlyaWdodAogCitfX2FsbF9fID0gWyd1cGRhdGVfd3JhcHBlcicsICd3cmFwcycsICdXUkFQUEVSX0FTU0lHTk1FTlRTJywgJ1dSQVBQRVJfVVBEQVRFUycsCisgICAgICAgICAgICd0b3RhbF9vcmRlcmluZycsICdjbXBfdG9fa2V5JywgJ2xydV9jYWNoZScsICdyZWR1Y2UnLCAncGFydGlhbCddCisKIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCwgbmFtZWR0dXBsZQordHJ5OgorICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBMb2NrCitleGNlcHQ6CisgICAgZnJvbSBfZHVtbXlfdGhyZWFkIGltcG9ydCBhbGxvY2F0ZV9sb2NrIGFzIExvY2sKIAogIyB1cGRhdGVfd3JhcHBlcigpIGFuZCB3cmFwcygpIGFyZSB0b29scyB0byBoZWxwIHdyaXRlCiAjIHdyYXBwZXIgZnVuY3Rpb25zIHRoYXQgY2FuIGhhbmRsZSBuYWl2ZSBpbnRyb3NwZWN0aW9uCkBAIC0yOSw5ICszOCwxNCBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKKyAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgotICAgICAgICBpZiBoYXNhdHRyKHdyYXBwZWQsIGF0dHIpOgotICAgICAgICAgICAgc2V0YXR0cih3cmFwcGVyLCBhdHRyLCBnZXRhdHRyKHdyYXBwZWQsIGF0dHIpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2V0YXR0cih3cmFwcGVyLCBhdHRyLCB2YWx1ZSkKICAgICBmb3IgYXR0ciBpbiB1cGRhdGVkOgogICAgICAgICBnZXRhdHRyKHdyYXBwZXIsIGF0dHIpLnVwZGF0ZShnZXRhdHRyKHdyYXBwZWQsIGF0dHIsIHt9KSkKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKQEAgLTUwLDMgKzY0LDE0MiBAQAogICAgICIiIgogICAgIHJldHVybiBwYXJ0aWFsKHVwZGF0ZV93cmFwcGVyLCB3cmFwcGVkPXdyYXBwZWQsCiAgICAgICAgICAgICAgICAgICAgYXNzaWduZWQ9YXNzaWduZWQsIHVwZGF0ZWQ9dXBkYXRlZCkKKworZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CisgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCisgICAgY29udmVydCA9IHsKKyAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKKyAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKKyAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAorICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKKyAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgfQorICAgICMgRmluZCB1c2VyLWRlZmluZWQgY29tcGFyaXNvbnMgKG5vdCB0aG9zZSBpbmhlcml0ZWQgZnJvbSBvYmplY3QpLgorICAgIHJvb3RzID0gW29wIGZvciBvcCBpbiBjb252ZXJ0IGlmIGdldGF0dHIoY2xzLCBvcCwgTm9uZSkgaXMgbm90IGdldGF0dHIob2JqZWN0LCBvcCwgTm9uZSldCisgICAgaWYgbm90IHJvb3RzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgb3JkZXJpbmcgb3BlcmF0aW9uOiA8ID4gPD0gPj0nKQorICAgIHJvb3QgPSBtYXgocm9vdHMpICAgICAgICMgcHJlZmVyIF9fbHRfXyB0byBfX2xlX18gdG8gX19ndF9fIHRvIF9fZ2VfXworICAgIGZvciBvcG5hbWUsIG9wZnVuYyBpbiBjb252ZXJ0W3Jvb3RdOgorICAgICAgICBpZiBvcG5hbWUgbm90IGluIHJvb3RzOgorICAgICAgICAgICAgb3BmdW5jLl9fbmFtZV9fID0gb3BuYW1lCisgICAgICAgICAgICBvcGZ1bmMuX19kb2NfXyA9IGdldGF0dHIoaW50LCBvcG5hbWUpLl9fZG9jX18KKyAgICAgICAgICAgIHNldGF0dHIoY2xzLCBvcG5hbWUsIG9wZnVuYykKKyAgICByZXR1cm4gY2xzCisKK2RlZiBjbXBfdG9fa2V5KG15Y21wKToKKyAgICAiIiJDb252ZXJ0IGEgY21wPSBmdW5jdGlvbiBpbnRvIGEga2V5PSBmdW5jdGlvbiIiIgorICAgIGNsYXNzIEsob2JqZWN0KToKKyAgICAgICAgX19zbG90c19fID0gWydvYmonXQorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2JqLCAqYXJncyk6CisgICAgICAgICAgICBzZWxmLm9iaiA9IG9iagorICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA8IDAKKyAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPiAwCisgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopID09IDAKKyAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPD0gMAorICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBteWNtcChzZWxmLm9iaiwgb3RoZXIub2JqKSA+PSAwCisgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIG15Y21wKHNlbGYub2JqLCBvdGhlci5vYmopICE9IDAKKyAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdoYXNoIG5vdCBpbXBsZW1lbnRlZCcpCisgICAgcmV0dXJuIEsKKworX0NhY2hlSW5mbyA9IG5hbWVkdHVwbGUoIkNhY2hlSW5mbyIsICJoaXRzIG1pc3NlcyBtYXhzaXplIGN1cnJzaXplIikKKworZGVmIGxydV9jYWNoZShtYXhzaXplPTEwMCk6CisgICAgIiIiTGVhc3QtcmVjZW50bHktdXNlZCBjYWNoZSBkZWNvcmF0b3IuCisKKyAgICBJZiAqbWF4c2l6ZSogaXMgc2V0IHRvIE5vbmUsIHRoZSBMUlUgZmVhdHVyZXMgYXJlIGRpc2FibGVkIGFuZCB0aGUgY2FjaGUKKyAgICBjYW4gZ3JvdyB3aXRob3V0IGJvdW5kLgorCisgICAgQXJndW1lbnRzIHRvIHRoZSBjYWNoZWQgZnVuY3Rpb24gbXVzdCBiZSBoYXNoYWJsZS4KKworICAgIFZpZXcgdGhlIGNhY2hlIHN0YXRpc3RpY3MgbmFtZWQgdHVwbGUgKGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUpIHdpdGgKKyAgICBmLmNhY2hlX2luZm8oKS4gIENsZWFyIHRoZSBjYWNoZSBhbmQgc3RhdGlzdGljcyB3aXRoIGYuY2FjaGVfY2xlYXIoKS4KKyAgICBBY2Nlc3MgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gd2l0aCBmLl9fd3JhcHBlZF9fLgorCisgICAgU2VlOiAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zI0xlYXN0X1JlY2VudGx5X1VzZWQKKworICAgICIiIgorICAgICMgVXNlcnMgc2hvdWxkIG9ubHkgYWNjZXNzIHRoZSBscnVfY2FjaGUgdGhyb3VnaCBpdHMgcHVibGljIEFQSToKKyAgICAjICAgICAgIGNhY2hlX2luZm8sIGNhY2hlX2NsZWFyLCBhbmQgZi5fX3dyYXBwZWRfXworICAgICMgVGhlIGludGVybmFscyBvZiB0aGUgbHJ1X2NhY2hlIGFyZSBlbmNhcHN1bGF0ZWQgZm9yIHRocmVhZCBzYWZldHkgYW5kCisgICAgIyB0byBhbGxvdyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2hhbmdlIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBDIHZlcnNpb24pLgorCisgICAgZGVmIGRlY29yYXRpbmdfZnVuY3Rpb24odXNlcl9mdW5jdGlvbiwKKyAgICAgICAgICAgICAgICB0dXBsZT10dXBsZSwgc29ydGVkPXNvcnRlZCwgbGVuPWxlbiwgS2V5RXJyb3I9S2V5RXJyb3IpOgorCisgICAgICAgIGhpdHMgPSBtaXNzZXMgPSAwCisgICAgICAgIGt3ZF9tYXJrID0gb2JqZWN0KCkgICAgICAgICAgICAgIyBzZXBhcmF0ZXMgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmdzCisgICAgICAgIGxvY2sgPSBMb2NrKCkgICAgICAgICAgICAgICAgICAgIyBuZWVkZWQgYmVjYXVzZSBvcmRlcmVkZGljdHMgYXJlbid0IHRocmVhZHNhZmUKKworICAgICAgICBpZiBtYXhzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBjYWNoZSA9IGRpY3QoKSAgICAgICAgICAgICAgIyBzaW1wbGUgY2FjaGUgd2l0aG91dCBvcmRlcmluZyBvciBzaXplIGxpbWl0CisKKyAgICAgICAgICAgIEB3cmFwcyh1c2VyX2Z1bmN0aW9uKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgaGl0cywgbWlzc2VzCisgICAgICAgICAgICAgICAga2V5ID0gYXJncworICAgICAgICAgICAgICAgIGlmIGt3ZHM6CisgICAgICAgICAgICAgICAgICAgIGtleSArPSAoa3dkX21hcmssKSArIHR1cGxlKHNvcnRlZChrd2RzLml0ZW1zKCkpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FjaGVba2V5XQorICAgICAgICAgICAgICAgICAgICBoaXRzICs9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHVzZXJfZnVuY3Rpb24oKmFyZ3MsICoqa3dkcykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgICAgICAgICBtaXNzZXMgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhY2hlID0gT3JkZXJlZERpY3QoKSAgICAgICAjIG9yZGVyZWQgbGVhc3QgcmVjZW50IHRvIG1vc3QgcmVjZW50CisgICAgICAgICAgICBjYWNoZV9wb3BpdGVtID0gY2FjaGUucG9waXRlbQorICAgICAgICAgICAgY2FjaGVfcmVuZXcgPSBjYWNoZS5tb3ZlX3RvX2VuZAorCisgICAgICAgICAgICBAd3JhcHModXNlcl9mdW5jdGlvbikKKyAgICAgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIGhpdHMsIG1pc3NlcworICAgICAgICAgICAgICAgIGtleSA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBrd2RzOgorICAgICAgICAgICAgICAgICAgICBrZXkgKz0gKGt3ZF9tYXJrLCkgKyB0dXBsZShzb3J0ZWQoa3dkcy5pdGVtcygpKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhY2hlW2tleV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX3JlbmV3KGtleSkgICAgICAgICMgcmVjb3JkIHJlY2VudCB1c2Ugb2YgdGhpcyBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAgIGhpdHMgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbigqYXJncywgKiprd2RzKQorICAgICAgICAgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtrZXldID0gcmVzdWx0ICAgICAjIHJlY29yZCByZWNlbnQgdXNlIG9mIHRoaXMga2V5CisgICAgICAgICAgICAgICAgICAgICAgICBtaXNzZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGNhY2hlKSA+IG1heHNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfcG9waXRlbSgwKSAgICAjIHB1cmdlIGxlYXN0IHJlY2VudGx5IHVzZWQgY2FjaGUgZW50cnkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgZGVmIGNhY2hlX2luZm8oKToKKyAgICAgICAgICAgICIiIlJlcG9ydCBjYWNoZSBzdGF0aXN0aWNzIiIiCisgICAgICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9DYWNoZUluZm8oaGl0cywgbWlzc2VzLCBtYXhzaXplLCBsZW4oY2FjaGUpKQorCisgICAgICAgIGRlZiBjYWNoZV9jbGVhcigpOgorICAgICAgICAgICAgIiIiQ2xlYXIgdGhlIGNhY2hlIGFuZCBjYWNoZSBzdGF0aXN0aWNzIiIiCisgICAgICAgICAgICBub25sb2NhbCBoaXRzLCBtaXNzZXMKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBjYWNoZS5jbGVhcigpCisgICAgICAgICAgICAgICAgaGl0cyA9IG1pc3NlcyA9IDAKKworICAgICAgICB3cmFwcGVyLmNhY2hlX2luZm8gPSBjYWNoZV9pbmZvCisgICAgICAgIHdyYXBwZXIuY2FjaGVfY2xlYXIgPSBjYWNoZV9jbGVhcgorICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xpYi9nZW5lcmljcGF0aC5weSBiL0xpYi9nZW5lcmljcGF0aC5weQppbmRleCA0MWFkMjM0Li4yMTc0MTg3IDEwMDY0NAotLS0gYS9MaWIvZ2VuZXJpY3BhdGgucHkKKysrIGIvTGliL2dlbmVyaWNwYXRoLnB5CkBAIC0xNSw3ICsxNSw3IEBACiBkZWYgZXhpc3RzKHBhdGgpOgogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQocGF0aCkKKyAgICAgICAgb3Muc3RhdChwYXRoKQogICAgIGV4Y2VwdCBvcy5lcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKZGlmZiAtLWdpdCBhL0xpYi9nZXRvcHQucHkgYi9MaWIvZ2V0b3B0LnB5CmluZGV4IGFjNzcxMjYuLjk4MDg2MWQgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRvcHQucHkKKysrIGIvTGliL2dldG9wdC5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiAiIiJQYXJzZXIgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zLgogCiBUaGlzIG1vZHVsZSBoZWxwcyBzY3JpcHRzIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGluCmRpZmYgLS1naXQgYS9MaWIvZ2V0dGV4dC5weSBiL0xpYi9nZXR0ZXh0LnB5CmluZGV4IGQ1MzIxYjguLjI1NmUzMzEgMTAwNjQ0Ci0tLSBhL0xpYi9nZXR0ZXh0LnB5CisrKyBiL0xpYi9nZXR0ZXh0LnB5CkBAIC00Niw3ICs0Niw3IEBACiAjICAgZmluZCB0aGlzIGZvcm1hdCBkb2N1bWVudGVkIGFueXdoZXJlLgogCiAKLWltcG9ydCBsb2NhbGUsIGNvcHksIG9zLCByZSwgc3RydWN0LCBzeXMKK2ltcG9ydCBsb2NhbGUsIGNvcHksIGlvLCBvcywgcmUsIHN0cnVjdCwgc3lzCiBmcm9tIGVycm5vIGltcG9ydCBFTk9FTlQKIAogCkBAIC01OCwyOCArNTgsMTMgQEAKIF9kZWZhdWx0X2xvY2FsZWRpciA9IG9zLnBhdGguam9pbihzeXMucHJlZml4LCAnc2hhcmUnLCAnbG9jYWxlJykKIAogCi1kZWYgdGVzdChjb25kaXRpb24sIHRydWUsIGZhbHNlKToKLSAgICAiIiIKLSAgICBJbXBsZW1lbnRzIHRoZSBDIGV4cHJlc3Npb246Ci0KLSAgICAgIGNvbmRpdGlvbiA/IHRydWUgOiBmYWxzZQotCi0gICAgUmVxdWlyZWQgdG8gY29ycmVjdGx5IGludGVycHJldCBwbHVyYWwgZm9ybXMuCi0gICAgIiIiCi0gICAgaWYgY29uZGl0aW9uOgotICAgICAgICByZXR1cm4gdHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBmYWxzZQotCi0KIGRlZiBjMnB5KHBsdXJhbCk6CiAgICAgIiIiR2V0cyBhIEMgZXhwcmVzc2lvbiBhcyB1c2VkIGluIFBPIGZpbGVzIGZvciBwbHVyYWwgZm9ybXMgYW5kIHJldHVybnMgYQogICAgIFB5dGhvbiBsYW1iZGEgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIGFuIGVxdWl2YWxlbnQgZXhwcmVzc2lvbi4KICAgICAiIiIKICAgICAjIFNlY3VyaXR5IGNoZWNrLCBhbGxvdyBvbmx5IHRoZSAibiIgaWRlbnRpZmllcgotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAgICAgaW1wb3J0IHRva2VuLCB0b2tlbml6ZQotICAgIHRva2VucyA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhTdHJpbmdJTyhwbHVyYWwpLnJlYWRsaW5lKQorICAgIHRva2VucyA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2Vucyhpby5TdHJpbmdJTyhwbHVyYWwpLnJlYWRsaW5lKQogICAgIHRyeToKICAgICAgICAgZGFuZ2VyID0gW3ggZm9yIHggaW4gdG9rZW5zIGlmIHhbMF0gPT0gdG9rZW4uTkFNRSBhbmQgeFsxXSAhPSAnbiddCiAgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3I6CkBAIC05NiwxMSArODEsMTEgQEAKICAgICBwbHVyYWwgPSBleHByLnN1YignIG5vdCBcXDEnLCBwbHVyYWwpCiAKICAgICAjIFJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgcmVwbGFjZW1lbnQgZnVuY3Rpb24gdXNlZCB0byB0cmFuc2Zvcm0KLSAgICAjICJhP2I6YyIgdG8gInRlc3QoYSxiLGMpIi4KKyAgICAjICJhP2I6YyIgdG8gImIgaWYgYSBlbHNlIGMiLgogICAgIGV4cHIgPSByZS5jb21waWxlKHInKC4qPylcPyguKj8pOiguKiknKQogICAgIGRlZiByZXBsKHgpOgotICAgICAgICByZXR1cm4gInRlc3QoJXMsICVzLCAlcykiICUgKHguZ3JvdXAoMSksIHguZ3JvdXAoMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwci5zdWIocmVwbCwgeC5ncm91cCgzKSkpCisgICAgICAgIHJldHVybiAiKCVzIGlmICVzIGVsc2UgJXMpIiAlICh4Lmdyb3VwKDIpLCB4Lmdyb3VwKDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwci5zdWIocmVwbCwgeC5ncm91cCgzKSkpCiAKICAgICAjIENvZGUgdG8gdHJhbnNmb3JtIHRoZSBwbHVyYWwgZXhwcmVzc2lvbiwgdGFraW5nIGNhcmUgb2YgcGFyZW50aGVzZXMKICAgICBzdGFjayA9IFsnJ10KQEAgLTEyMywzNiArMTA4LDM1IEBACiAKIAogCi1kZWYgX2V4cGFuZF9sYW5nKGxvY2FsZSk6Ci0gICAgZnJvbSBsb2NhbGUgaW1wb3J0IG5vcm1hbGl6ZQotICAgIGxvY2FsZSA9IG5vcm1hbGl6ZShsb2NhbGUpCitkZWYgX2V4cGFuZF9sYW5nKGxvYyk6CisgICAgbG9jID0gbG9jYWxlLm5vcm1hbGl6ZShsb2MpCiAgICAgQ09NUE9ORU5UX0NPREVTRVQgICA9IDEgPDwgMAogICAgIENPTVBPTkVOVF9URVJSSVRPUlkgPSAxIDw8IDEKICAgICBDT01QT05FTlRfTU9ESUZJRVIgID0gMSA8PCAyCiAgICAgIyBzcGxpdCB1cCB0aGUgbG9jYWxlIGludG8gaXRzIGJhc2UgY29tcG9uZW50cwogICAgIG1hc2sgPSAwCi0gICAgcG9zID0gbG9jYWxlLmZpbmQoJ0AnKQorICAgIHBvcyA9IGxvYy5maW5kKCdAJykKICAgICBpZiBwb3MgPj0gMDoKLSAgICAgICAgbW9kaWZpZXIgPSBsb2NhbGVbcG9zOl0KLSAgICAgICAgbG9jYWxlID0gbG9jYWxlWzpwb3NdCisgICAgICAgIG1vZGlmaWVyID0gbG9jW3BvczpdCisgICAgICAgIGxvYyA9IGxvY1s6cG9zXQogICAgICAgICBtYXNrIHw9IENPTVBPTkVOVF9NT0RJRklFUgogICAgIGVsc2U6CiAgICAgICAgIG1vZGlmaWVyID0gJycKLSAgICBwb3MgPSBsb2NhbGUuZmluZCgnLicpCisgICAgcG9zID0gbG9jLmZpbmQoJy4nKQogICAgIGlmIHBvcyA+PSAwOgotICAgICAgICBjb2Rlc2V0ID0gbG9jYWxlW3BvczpdCi0gICAgICAgIGxvY2FsZSA9IGxvY2FsZVs6cG9zXQorICAgICAgICBjb2Rlc2V0ID0gbG9jW3BvczpdCisgICAgICAgIGxvYyA9IGxvY1s6cG9zXQogICAgICAgICBtYXNrIHw9IENPTVBPTkVOVF9DT0RFU0VUCiAgICAgZWxzZToKICAgICAgICAgY29kZXNldCA9ICcnCi0gICAgcG9zID0gbG9jYWxlLmZpbmQoJ18nKQorICAgIHBvcyA9IGxvYy5maW5kKCdfJykKICAgICBpZiBwb3MgPj0gMDoKLSAgICAgICAgdGVycml0b3J5ID0gbG9jYWxlW3BvczpdCi0gICAgICAgIGxvY2FsZSA9IGxvY2FsZVs6cG9zXQorICAgICAgICB0ZXJyaXRvcnkgPSBsb2NbcG9zOl0KKyAgICAgICAgbG9jID0gbG9jWzpwb3NdCiAgICAgICAgIG1hc2sgfD0gQ09NUE9ORU5UX1RFUlJJVE9SWQogICAgIGVsc2U6CiAgICAgICAgIHRlcnJpdG9yeSA9ICcnCi0gICAgbGFuZ3VhZ2UgPSBsb2NhbGUKKyAgICBsYW5ndWFnZSA9IGxvYwogICAgIHJldCA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UobWFzaysxKToKICAgICAgICAgaWYgbm90IChpICYgfm1hc2spOiAgIyBpZiBhbGwgY29tcG9uZW50cyBmb3IgdGhpcyBjb21ibyBleGlzdCAuLi4KZGlmZiAtLWdpdCBhL0xpYi9nemlwLnB5IGIvTGliL2d6aXAucHkKaW5kZXggOGEyYTcxOC4uYmEyMTQ5ZSAxMDA2NDQKLS0tIGEvTGliL2d6aXAucHkKKysrIGIvTGliL2d6aXAucHkKQEAgLTUsMTEgKzUsMTIgQEAKIAogIyBiYXNlZCBvbiBBbmRyZXcgS3VjaGxpbmcncyBtaW5pZ3ppcC5weSBkaXN0cmlidXRlZCB3aXRoIHRoZSB6bGliIG1vZHVsZQogCi1pbXBvcnQgc3RydWN0LCBzeXMsIHRpbWUKK2ltcG9ydCBzdHJ1Y3QsIHN5cywgdGltZSwgb3MKIGltcG9ydCB6bGliCiBpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBpbwogCi1fX2FsbF9fID0gWyJHemlwRmlsZSIsIm9wZW4iXQorX19hbGxfXyA9IFsiR3ppcEZpbGUiLCAib3BlbiIsICJjb21wcmVzcyIsICJkZWNvbXByZXNzIl0KIAogRlRFWFQsIEZIQ1JDLCBGRVhUUkEsIEZOQU1FLCBGQ09NTUVOVCA9IDEsIDIsIDQsIDgsIDE2CiAKQEAgLTQ0LDcgKzQ1LDYzIEBACiAgICAgIiIiCiAgICAgcmV0dXJuIEd6aXBGaWxlKGZpbGVuYW1lLCBtb2RlLCBjb21wcmVzc2xldmVsKQogCi1jbGFzcyBHemlwRmlsZToKK2NsYXNzIF9QYWRkZWRGaWxlOgorICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCisgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKKyAgICBlc3NlbnRpYWwgZnVuY3Rpb25hbGl0eS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmLCBwcmVwZW5kPWInJyk6CisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHByZXBlbmQKKyAgICAgICAgc2VsZi5fbGVuZ3RoID0gbGVuKHByZXBlbmQpCisgICAgICAgIHNlbGYuZmlsZSA9IGYKKyAgICAgICAgc2VsZi5fcmVhZCA9IDAKKworICAgIGRlZiByZWFkKHNlbGYsIHNpemUpOgorICAgICAgICBpZiBzZWxmLl9yZWFkIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlLnJlYWQoc2l6ZSkKKyAgICAgICAgaWYgc2VsZi5fcmVhZCArIHNpemUgPD0gc2VsZi5fbGVuZ3RoOgorICAgICAgICAgICAgcmVhZCA9IHNlbGYuX3JlYWQKKyAgICAgICAgICAgIHNlbGYuX3JlYWQgKz0gc2l6ZQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcltyZWFkOnNlbGYuX3JlYWRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkID0gc2VsZi5fcmVhZAorICAgICAgICAgICAgc2VsZi5fcmVhZCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9idWZmZXJbcmVhZDpdICsgXAorICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5yZWFkKHNpemUtc2VsZi5fbGVuZ3RoK3JlYWQpCisKKyAgICBkZWYgcHJlcGVuZChzZWxmLCBwcmVwZW5kPWInJywgcmVhZHByZXZpb3VzPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fcmVhZCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gcHJlcGVuZAorICAgICAgICBlbGlmIHJlYWRwcmV2aW91cyBhbmQgbGVuKHByZXBlbmQpIDw9IHNlbGYuX3JlYWQ6CisgICAgICAgICAgICBzZWxmLl9yZWFkIC09IGxlbihwcmVwZW5kKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbcmVhZDpdICsgcHJlcGVuZAorICAgICAgICBzZWxmLl9sZW5ndGggPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBzZWxmLl9yZWFkID0gMAorCisgICAgZGVmIHVudXNlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcmVhZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGInJworICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX3JlYWQ6XQorCisgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9MCk6CisgICAgICAgICMgVGhpcyBpcyBvbmx5IGV2ZXIgY2FsbGVkIHdpdGggb2Zmc2V0PXdoZW5jZT0wCisgICAgICAgIGlmIHdoZW5jZSA9PSAxIGFuZCBzZWxmLl9yZWFkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgMCA8PSBvZmZzZXQgKyBzZWxmLl9yZWFkIDw9IHNlbGYuX2xlbmd0aDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkICs9IG9mZnNldAorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvZmZzZXQgKz0gc2VsZi5fbGVuZ3RoIC0gc2VsZi5fcmVhZAorICAgICAgICBzZWxmLl9yZWFkID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLmZpbGUuc2VlayhvZmZzZXQsIHdoZW5jZSkKKworICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5maWxlLCBuYW1lKQorCisKK2NsYXNzIEd6aXBGaWxlKGlvLkJ1ZmZlcmVkSU9CYXNlKToKICAgICAiIiJUaGUgR3ppcEZpbGUgY2xhc3Mgc2ltdWxhdGVzIG1vc3Qgb2YgdGhlIG1ldGhvZHMgb2YgYSBmaWxlIG9iamVjdCB3aXRoCiAgICAgdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcmVhZGludG8oKSBhbmQgdHJ1bmNhdGUoKSBtZXRob2RzLgogCkBAIC0xMDksMTEgKzE2NiwxNiBAQAogICAgICAgICAgICAgc2VsZi5tb2RlID0gUkVBRAogICAgICAgICAgICAgIyBTZXQgZmxhZyBpbmRpY2F0aW5nIHN0YXJ0IG9mIGEgbmV3IG1lbWJlcgogICAgICAgICAgICAgc2VsZi5fbmV3X21lbWJlciA9IFRydWUKKyAgICAgICAgICAgICMgQnVmZmVyIGRhdGEgcmVhZCBmcm9tIGd6aXAgZmlsZS4gZXh0cmFzdGFydCBpcyBvZmZzZXQgaW4KKyAgICAgICAgICAgICMgc3RyZWFtIHdoZXJlIGJ1ZmZlciBzdGFydHMuIGV4dHJhc2l6ZSBpcyBudW1iZXIgb2YKKyAgICAgICAgICAgICMgYnl0ZXMgcmVtYWluaW5nIGluIGJ1ZmZlciBmcm9tIGN1cnJlbnQgc3RyZWFtIHBvc2l0aW9uLgogICAgICAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IGIiIgogICAgICAgICAgICAgc2VsZi5leHRyYXNpemUgPSAwCisgICAgICAgICAgICBzZWxmLmV4dHJhc3RhcnQgPSAwCiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBmaWxlbmFtZQogICAgICAgICAgICAgIyBTdGFydHMgc21hbGwsIHNjYWxlcyBleHBvbmVudGlhbGx5CiAgICAgICAgICAgICBzZWxmLm1pbl9yZWFkc2l6ZSA9IDEwMAorICAgICAgICAgICAgZmlsZW9iaiA9IF9QYWRkZWRGaWxlKGZpbGVvYmopCiAKICAgICAgICAgZWxpZiBtb2RlWzA6MV0gPT0gJ3cnIG9yIG1vZGVbMDoxXSA9PSAnYSc6CiAgICAgICAgICAgICBzZWxmLm1vZGUgPSBXUklURQpAQCAtMTI5LDcgKzE5MSw2IEBACiAgICAgICAgIHNlbGYuZmlsZW9iaiA9IGZpbGVvYmoKICAgICAgICAgc2VsZi5vZmZzZXQgPSAwCiAgICAgICAgIHNlbGYubXRpbWUgPSBtdGltZQotICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgogICAgICAgICAgICAgc2VsZi5fd3JpdGVfZ3ppcF9oZWFkZXIoKQpAQCAtMTQzLDcgKzIwNCwxMCBAQAogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHMgPSByZXByKHNlbGYuZmlsZW9iaikKKyAgICAgICAgZmlsZW9iaiA9IHNlbGYuZmlsZW9iagorICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIF9QYWRkZWRGaWxlKToKKyAgICAgICAgICAgIGZpbGVvYmogPSBmaWxlb2JqLmZpbGUKKyAgICAgICAgcyA9IHJlcHIoZmlsZW9iaikKICAgICAgICAgcmV0dXJuICc8Z3ppcCAnICsgc1sxOi0xXSArICcgJyArIGhleChpZChzZWxmKSkgKyAnPicKIAogICAgIGRlZiBfY2hlY2tfY2xvc2VkKHNlbGYpOgpAQCAtMTY2LDcgKzIzMCw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgUkZDIDE5NTIgcmVxdWlyZXMgdGhlIEZOQU1FIGZpZWxkIHRvIGJlIExhdGluLTEuIERvIG5vdAogICAgICAgICAgICAgIyBpbmNsdWRlIGZpbGVuYW1lcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCB0aGF0IHdheS4KLSAgICAgICAgICAgIGZuYW1lID0gc2VsZi5uYW1lLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5uYW1lKQorICAgICAgICAgICAgZm5hbWUgPSBmbmFtZS5lbmNvZGUoJ2xhdGluLTEnKQogICAgICAgICAgICAgaWYgZm5hbWUuZW5kc3dpdGgoYicuZ3onKToKICAgICAgICAgICAgICAgICBmbmFtZSA9IGZuYW1lWzotM10KICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKQEAgLTE5MCw2ICsyNTUsOSBAQAogCiAgICAgZGVmIF9yZWFkX2d6aXBfaGVhZGVyKHNlbGYpOgogICAgICAgICBtYWdpYyA9IHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgIGlmIG1hZ2ljID09IGInJzoKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJSZWFjaGVkIEVPRiIpCisKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6CiAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQogICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKQEAgLTIyMSw2ICsyODksMTAgQEAKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgogICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCiAKKyAgICAgICAgdW51c2VkID0gc2VsZi5maWxlb2JqLnVudXNlZCgpCisgICAgICAgIGlmIHVudXNlZDoKKyAgICAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyh1bnVzZWQpCisgICAgICAgICAgICBzZWxmLl9hZGRfcmVhZF9kYXRhKHVuY29tcHJlc3MpCiAKICAgICBkZWYgd3JpdGUoc2VsZixkYXRhKToKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKQEAgLTIzMCwxMiArMzAyLDE5IEBACiAKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ3cml0ZSgpIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3QiKQorCisgICAgICAgICMgQ29udmVydCBkYXRhIHR5cGUgaWYgY2FsbGVkIGJ5IGlvLkJ1ZmZlcmVkV3JpdGVyLgorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIG1lbW9yeXZpZXcpOgorICAgICAgICAgICAgZGF0YSA9IGRhdGEudG9ieXRlcygpCisKICAgICAgICAgaWYgbGVuKGRhdGEpID4gMDoKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNlbGYuc2l6ZSArIGxlbihkYXRhKQogICAgICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmYKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSggc2VsZi5jb21wcmVzcy5jb21wcmVzcyhkYXRhKSApCiAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBsZW4oZGF0YSkKIAorICAgICAgICByZXR1cm4gbGVuKGRhdGEpCisKICAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CkBAIC0yNjIsMTUgKzM0MSwzNiBAQAogICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCiAKLSAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmWzpzaXplXQotICAgICAgICBzZWxmLmV4dHJhYnVmID0gc2VsZi5leHRyYWJ1ZltzaXplOl0KKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKKyAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KICAgICAgICAgc2VsZi5leHRyYXNpemUgPSBzZWxmLmV4dHJhc2l6ZSAtIHNpemUKIAogICAgICAgICBzZWxmLm9mZnNldCArPSBzaXplCiAgICAgICAgIHJldHVybiBjaHVuawogCisgICAgZGVmIHBlZWsoc2VsZiwgbik6CisgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgorICAgICAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicGVlaygpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKKworICAgICAgICAjIERvIG5vdCByZXR1cm4gcmlkaWN1bG91c2x5IHNtYWxsIGJ1ZmZlcnMsIGZvciBvbmUgY29tbW9uIGlkaW9tCisgICAgICAgICMgaXMgdG8gY2FsbCBwZWVrKDEpIGFuZCBleHBlY3QgbW9yZSBieXRlcyBpbiByZXR1cm4uCisgICAgICAgIGlmIG4gPCAxMDA6CisgICAgICAgICAgICBuID0gMTAwCisgICAgICAgIGlmIHNlbGYuZXh0cmFzaXplID09IDA6CisgICAgICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYicnCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyAxMDI0IGlzIHRoZSBzYW1lIGJ1ZmZlcmluZyBoZXVyaXN0aWMgdXNlZCBpbiByZWFkKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKG1heChuLCAxMDI0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CisgICAgICAgIHJlbWFpbmluZyA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgIGFzc2VydCByZW1haW5pbmcgPT0gbGVuKHNlbGYuZXh0cmFidWYpIC0gb2Zmc2V0CisgICAgICAgIHJldHVybiBzZWxmLmV4dHJhYnVmW29mZnNldDpvZmZzZXQgKyBuXQorCiAgICAgZGVmIF91bnJlYWQoc2VsZiwgYnVmKToKLSAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IGJ1ZiArIHNlbGYuZXh0cmFidWYKICAgICAgICAgc2VsZi5leHRyYXNpemUgPSBsZW4oYnVmKSArIHNlbGYuZXh0cmFzaXplCiAgICAgICAgIHNlbGYub2Zmc2V0IC09IGxlbihidWYpCiAKQEAgLTI4MSwxNiArMzgxLDYgQEAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIEZpcnN0LCBjaGVjayBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlOwotICAgICAgICAgICAgIyBpZiBzbywgaXQncyB0aW1lIHRvIHN0b3A7IG5vIG1vcmUgbWVtYmVycyB0byByZWFkLgotICAgICAgICAgICAgcG9zID0gc2VsZi5maWxlb2JqLnRlbGwoKSAgICMgU2F2ZSBjdXJyZW50IHBvc2l0aW9uCi0gICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwLCAyKSAgICAgIyBTZWVrIHRvIGVuZCBvZiBmaWxlCi0gICAgICAgICAgICBpZiBwb3MgPT0gc2VsZi5maWxlb2JqLnRlbGwoKToKLSAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlayggcG9zICkgIyBSZXR1cm4gdG8gb3JpZ2luYWwgcG9zaXRpb24KLQogICAgICAgICAgICAgc2VsZi5faW5pdF9yZWFkKCkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZ3ppcF9oZWFkZXIoKQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKQEAgLTMwNCw2ICszOTQsOSBAQAogCiAgICAgICAgIGlmIGJ1ZiA9PSBiIiI6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmZsdXNoKCkKKyAgICAgICAgICAgICMgUHJlcGVuZCB0aGUgYWxyZWFkeSByZWFkIGJ5dGVzIHRvIHRoZSBmaWxlb2JqIHRvIHRoZXkgY2FuIGJlCisgICAgICAgICAgICAjIHNlZW4gYnkgX3JlYWRfZW9mKCkKKyAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQogICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKQEAgLTMxNSwxMCArNDA4LDkgQEAKICAgICAgICAgICAgICMgRW5kaW5nIGNhc2U6IHdlJ3ZlIGNvbWUgdG8gdGhlIGVuZCBvZiBhIG1lbWJlciBpbiB0aGUgZmlsZSwKICAgICAgICAgICAgICMgc28gc2VlayBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgdW51c2VkIGRhdGEsIGZpbmlzaCB1cAogICAgICAgICAgICAgIyB0aGlzIG1lbWJlciwgYW5kIHJlYWQgYSBuZXcgZ3ppcCBoZWFkZXIuCi0gICAgICAgICAgICAjIChUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNlZWsgYmFjayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSB1bnVzZWQKLSAgICAgICAgICAgICMgZGF0YSwgbWludXMgOCBiZWNhdXNlIF9yZWFkX2VvZigpIHdpbGwgcmV3aW5kIGEgZnVydGhlciA4IGJ5dGVzKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoIC1sZW4oc2VsZi5kZWNvbXByZXNzLnVudXNlZF9kYXRhKSs4LCAxKQotCisgICAgICAgICAgICAjIFByZXBlbmQgdGhlIGFscmVhZHkgcmVhZCBieXRlcyB0byB0aGUgZmlsZW9iaiB0byB0aGV5IGNhbiBiZQorICAgICAgICAgICAgIyBzZWVuIGJ5IF9yZWFkX2VvZigpIGFuZCBfcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBzZWxmLmZpbGVvYmoucHJlcGVuZChzZWxmLmRlY29tcHJlc3MudW51c2VkX2RhdGEsIFRydWUpCiAgICAgICAgICAgICAjIENoZWNrIHRoZSBDUkMgYW5kIGZpbGUgc2l6ZSwgYW5kIHNldCB0aGUgZmxhZyBzbyB3ZSByZWFkCiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCkBAIC0zMjYsMTcgKzQxOCwxNyBAQAogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgotICAgICAgICBzZWxmLmV4dHJhYnVmID0gc2VsZi5leHRyYWJ1ZiArIGRhdGEKKyAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKKyAgICAgICAgc2VsZi5leHRyYWJ1ZiA9IHNlbGYuZXh0cmFidWZbb2Zmc2V0Ol0gKyBkYXRhCiAgICAgICAgIHNlbGYuZXh0cmFzaXplID0gc2VsZi5leHRyYXNpemUgKyBsZW4oZGF0YSkKKyAgICAgICAgc2VsZi5leHRyYXN0YXJ0ID0gc2VsZi5vZmZzZXQKICAgICAgICAgc2VsZi5zaXplID0gc2VsZi5zaXplICsgbGVuKGRhdGEpCiAKICAgICBkZWYgX3JlYWRfZW9mKHNlbGYpOgotICAgICAgICAjIFdlJ3ZlIHJlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSwgc28gd2UgaGF2ZSB0byByZXdpbmQgaW4gb3JkZXIKLSAgICAgICAgIyB0byByZXJlYWQgdGhlIDggYnl0ZXMgY29udGFpbmluZyB0aGUgQ1JDIGFuZCB0aGUgZmlsZSBzaXplLgorICAgICAgICAjIFdlJ3ZlIHJlYWQgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZQogICAgICAgICAjIFdlIGNoZWNrIHRoZSB0aGF0IHRoZSBjb21wdXRlZCBDUkMgYW5kIHNpemUgb2YgdGhlCiAgICAgICAgICMgdW5jb21wcmVzc2VkIGRhdGEgbWF0Y2hlcyB0aGUgc3RvcmVkIHZhbHVlcy4gIE5vdGUgdGhhdCB0aGUgc2l6ZQogICAgICAgICAjIHN0b3JlZCBpcyB0aGUgdHJ1ZSBmaWxlIHNpemUgbW9kIDIqKjMyLgotICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygtOCwgMSkKICAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQogICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgpAQCAtMzQ1LDYgKzQzNywxOSBAQAogICAgICAgICBlbGlmIGlzaXplICE9IChzZWxmLnNpemUgJiAweGZmZmZmZmZmKToKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkluY29ycmVjdCBsZW5ndGggb2YgZGF0YSBwcm9kdWNlZCIpCiAKKyAgICAgICAgIyBHemlwIGZpbGVzIGNhbiBiZSBwYWRkZWQgd2l0aCB6ZXJvZXMgYW5kIHN0aWxsIGhhdmUgYXJjaGl2ZXMuCisgICAgICAgICMgQ29uc3VtZSBhbGwgemVybyBieXRlcyBhbmQgc2V0IHRoZSBmaWxlIHBvc2l0aW9uIHRvIHRoZSBmaXJzdAorICAgICAgICAjIG5vbi16ZXJvIGJ5dGUuIFNlZSBodHRwOi8vd3d3Lmd6aXAub3JnLyNmYXE4CisgICAgICAgIGMgPSBiIlx4MDAiCisgICAgICAgIHdoaWxlIGMgPT0gYiJceDAwIjoKKyAgICAgICAgICAgIGMgPSBzZWxmLmZpbGVvYmoucmVhZCgxKQorICAgICAgICBpZiBjOgorICAgICAgICAgICAgc2VsZi5maWxlb2JqLnByZXBlbmQoYywgVHJ1ZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZpbGVvYmogaXMgTm9uZQorCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgpAQCAtMzU5LDE2ICs0NjQsNiBAQAogICAgICAgICBpZiBzZWxmLm15ZmlsZW9iajoKICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqID0gTm9uZQotICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKLQotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiAoc2VsZi5teWZpbGVvYmogaXMgTm9uZSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmogaXMgTm9uZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmNsb3NlKCkKIAogICAgIGRlZiBmbHVzaChzZWxmLHpsaWJfbW9kZT16bGliLlpfU1lOQ19GTFVTSCk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCkBAIC0zODUsMTMgKzQ4MCw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5maWxlb2JqLmZpbGVubygpCiAKLSAgICBkZWYgaXNhdHR5KHNlbGYpOgotICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQotICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKLQogICAgIGRlZiByZXdpbmQoc2VsZik6CiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCkBAIC00MDEsOCArNDg5LDE4IEBACiAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBUcnVlCiAgICAgICAgIHNlbGYuZXh0cmFidWYgPSBiIiIKICAgICAgICAgc2VsZi5leHRyYXNpemUgPSAwCisgICAgICAgIHNlbGYuZXh0cmFzdGFydCA9IDAKICAgICAgICAgc2VsZi5vZmZzZXQgPSAwCiAKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm1vZGUgPT0gUkVBRAorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tb2RlID09IFdSSVRFCisKKyAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKICAgICBkZWYgc2VlayhzZWxmLCBvZmZzZXQsIHdoZW5jZT0wKToKICAgICAgICAgaWYgd2hlbmNlOgogICAgICAgICAgICAgaWYgd2hlbmNlID09IDE6CkBAIC00MjYsOCArNTI0LDE4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZWFkKDEwMjQpCiAgICAgICAgICAgICBzZWxmLnJlYWQoY291bnQgJSAxMDI0KQogCisgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAorCiAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgogICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgICMgU2hvcnRjdXQgY29tbW9uIGNhc2UgLSBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlci4KKyAgICAgICAgICAgIG9mZnNldCA9IHNlbGYub2Zmc2V0IC0gc2VsZi5leHRyYXN0YXJ0CisgICAgICAgICAgICBpID0gc2VsZi5leHRyYWJ1Zi5maW5kKGInXG4nLCBvZmZzZXQpICsgMQorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi5leHRyYXNpemUgLT0gaSAtIG9mZnNldAorICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IGkgLSBvZmZzZXQKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRyYWJ1ZltvZmZzZXQ6IGldCisKICAgICAgICAgICAgIHNpemUgPSBzeXMubWF4c2l6ZQogICAgICAgICAgICAgcmVhZHNpemUgPSBzZWxmLm1pbl9yZWFkc2l6ZQogICAgICAgICBlbHNlOgpAQCAtNDU3LDQxICs1NjUsMjIgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gbWluKHJlYWRzaXplLCBzZWxmLm1pbl9yZWFkc2l6ZSAqIDIsIDUxMikKICAgICAgICAgcmV0dXJuIGInJy5qb2luKGJ1ZnMpICMgUmV0dXJuIHJlc3VsdGluZyBsaW5lCiAKLSAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIHNpemVoaW50PTApOgotICAgICAgICAjIE5lZ2F0aXZlIG51bWJlcnMgcmVzdWx0IGluIHJlYWRpbmcgYWxsIHRoZSBsaW5lcwotICAgICAgICBpZiBzaXplaGludCA8PSAwOgotICAgICAgICAgICAgc2l6ZWhpbnQgPSBzeXMubWF4c2l6ZQotICAgICAgICBMID0gW10KLSAgICAgICAgd2hpbGUgc2l6ZWhpbnQgPiAwOgotICAgICAgICAgICAgbGluZSA9IHNlbGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbGluZSA9PSBiIiI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIEwuYXBwZW5kKGxpbmUpCi0gICAgICAgICAgICBzaXplaGludCA9IHNpemVoaW50IC0gbGVuKGxpbmUpCiAKLSAgICAgICAgcmV0dXJuIEwKK2RlZiBjb21wcmVzcyhkYXRhLCBjb21wcmVzc2xldmVsPTkpOgorICAgICIiIkNvbXByZXNzIGRhdGEgaW4gb25lIHNob3QgYW5kIHJldHVybiB0aGUgY29tcHJlc3NlZCBzdHJpbmcuCisgICAgT3B0aW9uYWwgYXJndW1lbnQgaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLCBpbiByYW5nZSBvZiAxLTkuCisgICAgIiIiCisgICAgYnVmID0gaW8uQnl0ZXNJTygpCisgICAgd2l0aCBHemlwRmlsZShmaWxlb2JqPWJ1ZiwgbW9kZT0nd2InLCBjb21wcmVzc2xldmVsPWNvbXByZXNzbGV2ZWwpIGFzIGY6CisgICAgICAgIGYud3JpdGUoZGF0YSkKKyAgICByZXR1cm4gYnVmLmdldHZhbHVlKCkKIAotICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIEwpOgotICAgICAgICBmb3IgbGluZSBpbiBMOgotICAgICAgICAgICAgc2VsZi53cml0ZShsaW5lKQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICByZXR1cm4gbGluZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBHemlwRmlsZSBvYmplY3QiKQotICAgICAgICByZXR1cm4gc2VsZgotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5jbG9zZSgpCitkZWYgZGVjb21wcmVzcyhkYXRhKToKKyAgICAiIiJEZWNvbXByZXNzIGEgZ3ppcCBjb21wcmVzc2VkIHN0cmluZyBpbiBvbmUgc2hvdC4KKyAgICBSZXR1cm4gdGhlIGRlY29tcHJlc3NlZCBzdHJpbmcuCisgICAgIiIiCisgICAgd2l0aCBHemlwRmlsZShmaWxlb2JqPWlvLkJ5dGVzSU8oZGF0YSkpIGFzIGY6CisgICAgICAgIHJldHVybiBmLnJlYWQoKQogCiAKIGRlZiBfdGVzdCgpOgpkaWZmIC0tZ2l0IGEvTGliL2hhc2hsaWIucHkgYi9MaWIvaGFzaGxpYi5weQppbmRleCAzNGVkMTk1Li4wZDdlMzI1IDEwMDY0NAotLS0gYS9MaWIvaGFzaGxpYi5weQorKysgYi9MaWIvaGFzaGxpYi5weQpAQCAtMSw2ICsxLDQgQEAKLSMgJElkJAotIwotIyAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgICBHcmVnb3J5IFAuIFNtaXRoIChncmVnQGtyeXB0by5vcmcpCisjICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIApAQCAtMTUsOCArMTMsOSBAQAogCiBtZDUoKSwgc2hhMSgpLCBzaGEyMjQoKSwgc2hhMjU2KCksIHNoYTM4NCgpLCBhbmQgc2hhNTEyKCkKIAotTW9yZSBhbGdvcml0aG1zIG1heSBiZSBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybSBidXQgdGhlIGFib3ZlIGFyZQotZ3VhcmFudGVlZCB0byBleGlzdC4KK01vcmUgYWxnb3JpdGhtcyBtYXkgYmUgYXZhaWxhYmxlIG9uIHlvdXIgcGxhdGZvcm0gYnV0IHRoZSBhYm92ZSBhcmUgZ3VhcmFudGVlZAordG8gZXhpc3QuICBTZWUgdGhlIGFsZ29yaXRobXNfZ3VhcmFudGVlZCBhbmQgYWxnb3JpdGhtc19hdmFpbGFibGUgYXR0cmlidXRlcwordG8gZmluZCBvdXQgd2hhdCBhbGdvcml0aG0gbmFtZXMgY2FuIGJlIHBhc3NlZCB0byBuZXcoKS4KIAogTk9URTogSWYgeW91IHdhbnQgdGhlIGFkbGVyMzIgb3IgY3JjMzIgaGFzaCBmdW5jdGlvbnMgdGhleSBhcmUgYXZhaWxhYmxlIGluCiB0aGUgemxpYiBtb2R1bGUuCkBAIC01Myw2ICs1MiwxNiBAQAogCiAiIiIKIAorIyBUaGlzIHR1cGxlIGFuZCBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCkgbXVzdCBiZSBtb2RpZmllZCBpZiBhIG5ldworIyBhbHdheXMgYXZhaWxhYmxlIGFsZ29yaXRobSBpcyBhZGRlZC4KK19fYWx3YXlzX3N1cHBvcnRlZCA9ICgnbWQ1JywgJ3NoYTEnLCAnc2hhMjI0JywgJ3NoYTI1NicsICdzaGEzODQnLCAnc2hhNTEyJykKKworYWxnb3JpdGhtc19ndWFyYW50ZWVkID0gc2V0KF9fYWx3YXlzX3N1cHBvcnRlZCkKK2FsZ29yaXRobXNfYXZhaWxhYmxlID0gc2V0KF9fYWx3YXlzX3N1cHBvcnRlZCkKKworX19hbGxfXyA9IF9fYWx3YXlzX3N1cHBvcnRlZCArICgnbmV3JywgJ2FsZ29yaXRobXNfZ3VhcmFudGVlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGdvcml0aG1zX2F2YWlsYWJsZScpCisKIAogZGVmIF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IobmFtZSk6CiAgICAgaWYgbmFtZSBpbiAoJ1NIQTEnLCAnc2hhMScpOgpAQCAtNzYsNyArODUsMTkgQEAKICAgICAgICAgZWxpZiBicyA9PSAnMzg0JzoKICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTM4NAogCi0gICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgaGFzaCB0eXBlIikKKyAgICByYWlzZSBWYWx1ZUVycm9yKCd1bnN1cHBvcnRlZCBoYXNoIHR5cGUgJXMnICUgbmFtZSkKKworCitkZWYgX19nZXRfb3BlbnNzbF9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICB0cnk6CisgICAgICAgIGYgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nICsgbmFtZSkKKyAgICAgICAgIyBBbGxvdyB0aGUgQyBtb2R1bGUgdG8gcmFpc2UgVmFsdWVFcnJvci4gIFRoZSBmdW5jdGlvbiB3aWxsIGJlCisgICAgICAgICMgZGVmaW5lZCBidXQgdGhlIGhhc2ggbm90IGFjdHVhbGx5IGF2YWlsYWJsZSB0aGFua3MgdG8gT3BlblNTTC4KKyAgICAgICAgZigpCisgICAgICAgICMgVXNlIHRoZSBDIGZ1bmN0aW9uIGRpcmVjdGx5ICh2ZXJ5IGZhc3QpCisgICAgICAgIHJldHVybiBmCisgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgIHJldHVybiBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpCiAKIAogZGVmIF9fcHlfbmV3KG5hbWUsIGRhdGE9YicnKToKQEAgLTEwMiwzOSArMTIzLDIzIEBACiAKIHRyeToKICAgICBpbXBvcnQgX2hhc2hsaWIKLSAgICAjIHVzZSB0aGUgd3JhcHBlciBvZiB0aGUgQyBpbXBsZW1lbnRhdGlvbgogICAgIG5ldyA9IF9faGFzaF9uZXcKLQotICAgIGZvciBvcGVuc3NsRnVuY05hbWUgaW4gZmlsdGVyKGxhbWJkYSBuOiBuLnN0YXJ0c3dpdGgoJ29wZW5zc2xfJyksIGRpcihfaGFzaGxpYikpOgotICAgICAgICBmdW5jTmFtZSA9IG9wZW5zc2xGdW5jTmFtZVtsZW4oJ29wZW5zc2xfJyk6XQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHRyeSB0aGVtIGFsbCwgc29tZSBtYXkgbm90IHdvcmsgZHVlIHRvIHRoZSBPcGVuU1NMCi0gICAgICAgICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCi0gICAgICAgICAgICBmID0gZ2V0YXR0cihfaGFzaGxpYiwgb3BlbnNzbEZ1bmNOYW1lKQotICAgICAgICAgICAgZigpCi0gICAgICAgICAgICAjIFVzZSB0aGUgQyBmdW5jdGlvbiBkaXJlY3RseSAodmVyeSBmYXN0KQotICAgICAgICAgICAgZXhlYyhmdW5jTmFtZSArICcgPSBmJykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBVc2UgdGhlIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gZGlyZWN0bHkgKGZhc3QpCi0gICAgICAgICAgICAgICAgZXhlYyhmdW5jTmFtZSArICcgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKGZ1bmNOYW1lKScpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIHRoaXMgb25lIGhhcyBubyBidWlsdGluIGltcGxlbWVudGF0aW9uLCBkb24ndCBkZWZpbmUgaXQKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgIyBjbGVhbiB1cCBvdXIgbG9jYWxzCi0gICAgZGVsIGYKLSAgICBkZWwgb3BlbnNzbEZ1bmNOYW1lCi0gICAgZGVsIGZ1bmNOYW1lCi0KKyAgICBfX2dldF9oYXNoID0gX19nZXRfb3BlbnNzbF9jb25zdHJ1Y3RvcgorICAgIGFsZ29yaXRobXNfYXZhaWxhYmxlID0gYWxnb3JpdGhtc19hdmFpbGFibGUudW5pb24oCisgICAgICAgICAgICBfaGFzaGxpYi5vcGVuc3NsX21kX21ldGhfbmFtZXMpCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBXZSBkb24ndCBoYXZlIHRoZSBfaGFzaGxpYiBPcGVuU1NMIG1vZHVsZT8KLSAgICAjIHVzZSB0aGUgYnVpbHQgaW4gbGVnYWN5IGludGVyZmFjZXMgdmlhIGEgd3JhcHBlciBmdW5jdGlvbgogICAgIG5ldyA9IF9fcHlfbmV3CisgICAgX19nZXRfaGFzaCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IKIAotICAgICMgbG9va3VwIHRoZSBDIGZ1bmN0aW9uIHRvIHVzZSBkaXJlY3RseSBmb3IgdGhlIG5hbWVkIGNvbnN0cnVjdG9ycwotICAgIG1kNSA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ21kNScpCi0gICAgc2hhMSA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTEnKQotICAgIHNoYTIyNCA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTIyNCcpCi0gICAgc2hhMjU2ID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjU2JykKLSAgICBzaGEzODQgPSBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEzODQnKQotICAgIHNoYTUxMiA9IF9fZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTUxMicpCitmb3IgX19mdW5jX25hbWUgaW4gX19hbHdheXNfc3VwcG9ydGVkOgorICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKKyAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCisgICAgdHJ5OgorICAgICAgICBnbG9iYWxzKClbX19mdW5jX25hbWVdID0gX19nZXRfaGFzaChfX2Z1bmNfbmFtZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ2NvZGUgZm9yIGhhc2ggJXMgd2FzIG5vdCBmb3VuZC4nLCBfX2Z1bmNfbmFtZSkKKworIyBDbGVhbnVwIGxvY2FscygpCitkZWwgX19hbHdheXNfc3VwcG9ydGVkLCBfX2Z1bmNfbmFtZSwgX19nZXRfaGFzaAorZGVsIF9fcHlfbmV3LCBfX2hhc2hfbmV3LCBfX2dldF9vcGVuc3NsX2NvbnN0cnVjdG9yCmRpZmYgLS1naXQgYS9MaWIvaGVhcHEucHkgYi9MaWIvaGVhcHEucHkKaW5kZXggY2M2MTI5NC4uZjc1NjAzNSAxMDA2NDQKLS0tIGEvTGliL2hlYXBxLnB5CisrKyBiL0xpYi9oZWFwcS5weQpAQCAtMSw1ICsxLDMgQEAKLSMgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KLQogIiIiSGVhcCBxdWV1ZSBhbGdvcml0aG0gKGEuay5hLiBwcmlvcml0eSBxdWV1ZSkuCiAKIEhlYXBzIGFyZSBhcnJheXMgZm9yIHdoaWNoIGFba10gPD0gYVsyKmsrMV0gYW5kIGFba10gPD0gYVsyKmsrMl0gZm9yCkBAIC0zNCw3ICszMiw3IEBACiAKIF9fYWJvdXRfXyA9ICIiIkhlYXAgcXVldWVzCiAKLVtleHBsYW5hdGlvbiBieSBGcmFu529pcyBQaW5hcmRdCitbZXhwbGFuYXRpb24gYnkgRnJhbsOnb2lzIFBpbmFyZF0KIAogSGVhcHMgYXJlIGFycmF5cyBmb3Igd2hpY2ggYVtrXSA8PSBhWzIqaysxXSBhbmQgYVtrXSA8PSBhWzIqaysyXSBmb3IKIGFsbCBrLCBjb3VudGluZyBlbGVtZW50cyBmcm9tIDAuICBGb3IgdGhlIHNha2Ugb2YgY29tcGFyaXNvbiwKQEAgLTIxNCwxMSArMjEyLDEwIEBACiAgICAgICAgIHBvcCA9IHJlc3VsdC5wb3AKICAgICAgICAgbG9zID0gcmVzdWx0Wy0xXSAgICAjIGxvcyAtLT4gTGFyZ2VzdCBvZiB0aGUgbnNtYWxsZXN0CiAgICAgICAgIGZvciBlbGVtIGluIGl0OgotICAgICAgICAgICAgaWYgbG9zIDw9IGVsZW06Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGluc29ydChyZXN1bHQsIGVsZW0pCi0gICAgICAgICAgICBwb3AoKQotICAgICAgICAgICAgbG9zID0gcmVzdWx0Wy0xXQorICAgICAgICAgICAgaWYgZWxlbSA8IGxvczoKKyAgICAgICAgICAgICAgICBpbnNvcnQocmVzdWx0LCBlbGVtKQorICAgICAgICAgICAgICAgIHBvcCgpCisgICAgICAgICAgICAgICAgbG9zID0gcmVzdWx0Wy0xXQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgIyBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBtYW5pZmVzdHMgdGhlIHdob2xlIGl0ZXJhYmxlIGluIG1lbW9yeSBidXQKICAgICAjIHNhdmVzIGNvbXBhcmlzb25zIGJ5IGhlYXBpZnlpbmcgYWxsIGF0IG9uY2UuICBBbHNvLCBzYXZlcyB0aW1lCmRpZmYgLS1naXQgYS9MaWIvaG1hYy5weSBiL0xpYi9obWFjLnB5CmluZGV4IDBmNTlmZDQuLmU4NzhlMWEgMTAwNjQ0Ci0tLSBhL0xpYi9obWFjLnB5CisrKyBiL0xpYi9obWFjLnB5CkBAIC0xMiwxMCArMTIsNiBAQAogIyBoYXNoaW5nIG1vZHVsZSB1c2VkLiAgVXNlIGRpZ2VzdF9zaXplIGZyb20gdGhlIGluc3RhbmNlIG9mIEhNQUMgaW5zdGVhZC4KIGRpZ2VzdF9zaXplID0gTm9uZQogCi0jIEEgdW5pcXVlIG9iamVjdCBwYXNzZWQgYnkgSE1BQy5jb3B5KCkgdG8gdGhlIEhNQUMgY29uc3RydWN0b3IsIGluIG9yZGVyCi0jIHRoYXQgdGhlIGxhdHRlciByZXR1cm4gdmVyeSBxdWlja2x5LiAgSE1BQygiIikgaW4gY29udHJhc3QgaXMgcXVpdGUKLSMgZXhwZW5zaXZlLgotX3NlY3JldF9iYWNrZG9vcl9rZXkgPSBbXQogCiBjbGFzcyBITUFDOgogICAgICIiIlJGQyAyMTA0IEhNQUMgY2xhc3MuICBBbHNvIGNvbXBsaWVzIHdpdGggUkZDIDQyMzEuCkBAIC0zNiw5ICszMiw2IEBACiAgICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KICAgICAgICAgIiIiCiAKLSAgICAgICAgaWYga2V5IGlzIF9zZWNyZXRfYmFja2Rvb3Jfa2V5OiAjIGNoZWFwCi0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCkBAIC01OCw4ICs1MSw2IEBACiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5pbm5lciwgJ2Jsb2NrX3NpemUnKToKICAgICAgICAgICAgIGJsb2Nrc2l6ZSA9IHNlbGYuaW5uZXIuYmxvY2tfc2l6ZQogICAgICAgICAgICAgaWYgYmxvY2tzaXplIDwgMTY6Ci0gICAgICAgICAgICAgICAgIyBWZXJ5IGxvdyBibG9ja3NpemUsIG1vc3QgbGlrZWx5IGEgbGVnYWN5IHZhbHVlIGxpa2UKLSAgICAgICAgICAgICAgICAjIExpYi9zaGEucHkgYW5kIExpYi9tZDUucHkgaGF2ZS4KICAgICAgICAgICAgICAgICBfd2FybmluZ3Mud2FybignYmxvY2tfc2l6ZSBvZiAlZCBzZWVtcyB0b28gc21hbGw7IHVzaW5nIG91ciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHQgb2YgJWQuJyAlIChibG9ja3NpemUsIHNlbGYuYmxvY2tzaXplKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgMikKQEAgLTc5LDkgKzcwLDYgQEAKICAgICAgICAgaWYgbXNnIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi51cGRhdGUobXNnKQogCi0jIyAgICBkZWYgY2xlYXIoc2VsZik6Ci0jIyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgImNsZWFyKCkgbWV0aG9kIG5vdCBhdmFpbGFibGUgaW4gSE1BQy4iCi0KICAgICBkZWYgdXBkYXRlKHNlbGYsIG1zZyk6CiAgICAgICAgICIiIlVwZGF0ZSB0aGlzIGhhc2hpbmcgb2JqZWN0IHdpdGggdGhlIHN0cmluZyBtc2cuCiAgICAgICAgICIiIgpAQCAtOTQsNyArODIsOCBAQAogCiAgICAgICAgIEFuIHVwZGF0ZSB0byB0aGlzIGNvcHkgd29uJ3QgYWZmZWN0IHRoZSBvcmlnaW5hbCBvYmplY3QuCiAgICAgICAgICIiIgotICAgICAgICBvdGhlciA9IHNlbGYuX19jbGFzc19fKF9zZWNyZXRfYmFja2Rvb3Jfa2V5KQorICAgICAgICAjIENhbGwgX19uZXdfXyBkaXJlY3RseSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIF9faW5pdF9fLgorICAgICAgICBvdGhlciA9IHNlbGYuX19jbGFzc19fLl9fbmV3X18oc2VsZi5fX2NsYXNzX18pCiAgICAgICAgIG90aGVyLmRpZ2VzdF9jb25zID0gc2VsZi5kaWdlc3RfY29ucwogICAgICAgICBvdGhlci5kaWdlc3Rfc2l6ZSA9IHNlbGYuZGlnZXN0X3NpemUKICAgICAgICAgb3RoZXIuaW5uZXIgPSBzZWxmLmlubmVyLmNvcHkoKQpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvX19pbml0X18ucHkgYi9MaWIvaHRtbC9fX2luaXRfXy5weQppbmRleCAxOTZkMzc4Li4zMzVkMjE0IDEwMDY0NAotLS0gYS9MaWIvaHRtbC9fX2luaXRfXy5weQorKysgYi9MaWIvaHRtbC9fX2luaXRfXy5weQpAQCAtMSArMSwyMCBAQAotIyBUaGlzIGRpcmVjdG9yeSBpcyBhIFB5dGhvbiBwYWNrYWdlLgorIiIiCitHZW5lcmFsIGZ1bmN0aW9ucyBmb3IgSFRNTCBtYW5pcHVsYXRpb24uCisiIiIKKworCitfZXNjYXBlX21hcCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7J30KK19lc2NhcGVfbWFwX2Z1bGwgPSB7b3JkKCcmJyk6ICcmYW1wOycsIG9yZCgnPCcpOiAnJmx0OycsIG9yZCgnPicpOiAnJmd0OycsCisgICAgICAgICAgICAgICAgICAgIG9yZCgnIicpOiAnJnF1b3Q7Jywgb3JkKCdcJycpOiAnJiN4Mjc7J30KKworIyBOQjogdGhpcyBpcyBhIGNhbmRpZGF0ZSBmb3IgYSBieXRlcy9zdHJpbmcgcG9seW1vcnBoaWMgaW50ZXJmYWNlCisKK2RlZiBlc2NhcGUocywgcXVvdGU9VHJ1ZSk6CisgICAgIiIiCisgICAgUmVwbGFjZSBzcGVjaWFsIGNoYXJhY3RlcnMgIiYiLCAiPCIgYW5kICI+IiB0byBIVE1MLXNhZmUgc2VxdWVuY2VzLgorICAgIElmIHRoZSBvcHRpb25hbCBmbGFnIHF1b3RlIGlzIHRydWUgKHRoZSBkZWZhdWx0KSwgdGhlIHF1b3RhdGlvbiBtYXJrCisgICAgY2hhcmFjdGVyICgiKSBpcyBhbHNvIHRyYW5zbGF0ZWQuCisgICAgIiIiCisgICAgaWYgcXVvdGU6CisgICAgICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcF9mdWxsKQorICAgIHJldHVybiBzLnRyYW5zbGF0ZShfZXNjYXBlX21hcCkKZGlmZiAtLWdpdCBhL0xpYi9odG1sL3BhcnNlci5weSBiL0xpYi9odG1sL3BhcnNlci5weQppbmRleCAzZjY4ZTE4Li5hMzU4NmViIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9wYXJzZXIucHkKKysrIGIvTGliL2h0bWwvcGFyc2VyLnB5CkBAIC0yNCwxMCArMjQsMTQgQEAKIHBpY2xvc2UgPSByZS5jb21waWxlKCc+JykKIGNvbW1lbnRjbG9zZSA9IHJlLmNvbXBpbGUocictLVxzKj4nKQogdGFnZmluZCA9IHJlLmNvbXBpbGUoJ1thLXpBLVpdWy0uYS16QS1aMC05Ol9dKicpCisjIE5vdGUsIHRoZSBzdHJpY3Qgb25lIG9mIHRoaXMgcGFpciBpc24ndCByZWFsbHkgc3RyaWN0LCBidXQgd2UgY2FuJ3QKKyMgbWFrZSBpdCBjb3JyZWN0bHkgc3RyaWN0IHdpdGhvdXQgYnJlYWtpbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIGF0dHJmaW5kID0gcmUuY29tcGlsZSgKICAgICByJ1xzKihbYS16QS1aX11bLS46YS16QS1aXzAtOV0qKShccyo9XHMqJwotICAgIHInKFwnW15cJ10qXCd8IlteIl0qInxbLWEtekEtWjAtOS4vLDo7KyolPyEmJFwoXClfIz1+QF0qKSk/JykKLQorICAgIHInKFwnW15cJ10qXCd8IlteIl0qInxbXlxzIlwnPTw+YF0qKSk/JykKK2F0dHJmaW5kX3RvbGVyYW50ID0gcmUuY29tcGlsZSgKKyAgICByJ1xzKihbYS16QS1aX11bLS46YS16QS1aXzAtOV0qKShccyo9XHMqJworICAgIHInKFwnW15cJ10qXCd8IlteIl0qInxbXj5cc10qKSk/JykKIGxvY2F0ZXN0YXJ0dGFnZW5kID0gcmUuY29tcGlsZShyIiIiCiAgIDxbYS16QS1aXVstLmEtekEtWjAtOTpfXSogICAgICAgICAgIyB0YWcgbmFtZQogICAoPzpccysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2hpdGVzcGFjZSBiZWZvcmUgYXR0cmlidXRlIG5hbWUKQEAgLTQyLDYgKzQ2LDIxIEBACiAgICApKgogICBccyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgd2hpdGVzcGFjZQogIiIiLCByZS5WRVJCT1NFKQorbG9jYXRlc3RhcnR0YWdlbmRfdG9sZXJhbnQgPSByZS5jb21waWxlKHIiIiIKKyAgPFthLXpBLVpdWy0uYS16QS1aMC05Ol9dKiAgICAgICAgICAjIHRhZyBuYW1lCisgICg/OlxzKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB3aGl0ZXNwYWNlIGJlZm9yZSBhdHRyaWJ1dGUgbmFtZQorICAgICg/OlthLXpBLVpfXVstLjphLXpBLVowLTlfXSogICAgICMgYXR0cmlidXRlIG5hbWUKKyAgICAgICg/OlxzKj1ccyogICAgICAgICAgICAgICAgICAgICAjIHZhbHVlIGluZGljYXRvcgorICAgICAgICAoPzonW14nXSonICAgICAgICAgICAgICAgICAgICMgTElUQS1lbmNsb3NlZCB2YWx1ZQorICAgICAgICAgIHxcIlteXCJdKlwiICAgICAgICAgICAgICAgICMgTElULWVuY2xvc2VkIHZhbHVlCisgICAgICAgICAgfFteJ1wiPlxzXSsgICAgICAgICAgICAgICAgIyBiYXJlIHZhbHVlCisgICAgICAgICApCisgICAgICAgICAoPzpccyosKSogICAgICAgICAgICAgICAgICAgIyBwb3NzaWJseSBmb2xsb3dlZCBieSBhIGNvbW1hCisgICAgICAgKT8KKyAgICAgKQorICAgKSoKKyAgXHMqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRyYWlsaW5nIHdoaXRlc3BhY2UKKyIiIiwgcmUuVkVSQk9TRSkKIGVuZGVuZHRhZyA9IHJlLmNvbXBpbGUoJz4nKQogZW5kdGFnZmluZCA9IHJlLmNvbXBpbGUoJzwvXHMqKFthLXpBLVpdWy0uYS16QS1aMC05Ol9dKilccyo+JykKIApAQCAtODYsOSArMTA1LDE1IEBACiAKICAgICBDREFUQV9DT05URU5UX0VMRU1FTlRTID0gKCJzY3JpcHQiLCAic3R5bGUiKQogCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmljdD1UcnVlKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbmQgcmVzZXQgdGhpcyBpbnN0YW5jZS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSBhbmQgcmVzZXQgdGhpcyBpbnN0YW5jZS4iIiIKKyAgICAgICAgSWYgc3RyaWN0IGlzIHNldCB0byBUcnVlICh0aGUgZGVmYXVsdCksIGVycm9ycyBhcmUgcmFpc2VkIHdoZW4gaW52YWxpZAorICAgICAgICBIVE1MIGlzIGVuY291bnRlcmVkLiAgSWYgc2V0IHRvIEZhbHNlLCBhbiBhdHRlbXB0IGlzIGluc3RlYWQgbWFkZSB0bworICAgICAgICBjb250aW51ZSBwYXJzaW5nLCBtYWtpbmcgImJlc3QgZ3Vlc3NlcyIgYWJvdXQgdGhlIGludGVuZGVkIG1lYW5pbmcsIGluCisgICAgICAgIGEgZmFzaGlvbiBzaW1pbGFyIHRvIHdoYXQgYnJvd3NlcnMgdHlwaWNhbGx5IGRvLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKICAgICAgICAgc2VsZi5yZXNldCgpCiAKICAgICBkZWYgcmVzZXQoc2VsZik6CkBAIC0xNjAsOSArMTg1LDE4IEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBrIDwgMDoKLSAgICAgICAgICAgICAgICAgICAgaWYgZW5kOgorICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJFT0YgaW4gbWlkZGxlIG9mIGNvbnN0cnVjdCIpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGsgPSByYXdkYXRhLmZpbmQoJz4nLCBpICsgMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgayA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBrID0gcmF3ZGF0YS5maW5kKCc8JywgaSArIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gaSArIDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTprXSkKICAgICAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgaykKICAgICAgICAgICAgIGVsaWYgc3RhcnRzd2l0aCgiJiMiLCBpKToKICAgICAgICAgICAgICAgICBtYXRjaCA9IGNoYXJyZWYubWF0Y2gocmF3ZGF0YSwgaSkKQEAgLTE5Myw3ICsyMjcsMTIgQEAKICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKICAgICAgICAgICAgICAgICAgICAgIyBtYXRjaC5ncm91cCgpIHdpbGwgY29udGFpbiBhdCBsZWFzdCAyIGNoYXJzCiAgICAgICAgICAgICAgICAgICAgIGlmIGVuZCBhbmQgbWF0Y2guZ3JvdXAoKSA9PSByYXdkYXRhW2k6XToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIkVPRiBpbiBtaWRkbGUgb2YgZW50aXR5IG9yIGNoYXIgcmVmIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIkVPRiBpbiBtaWRkbGUgb2YgZW50aXR5IG9yIGNoYXIgcmVmIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgayA8PSBpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBpICsgMSkKICAgICAgICAgICAgICAgICAgICAgIyBpbmNvbXBsZXRlCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxpZiAoaSArIDEpIDwgbjoKQEAgLTI0MCw3ICsyNzksMTAgQEAKICAgICAgICAgc2VsZi5sYXN0dGFnID0gdGFnID0gcmF3ZGF0YVtpKzE6a10ubG93ZXIoKQogCiAgICAgICAgIHdoaWxlIGsgPCBlbmRwb3M6Ci0gICAgICAgICAgICBtID0gYXR0cmZpbmQubWF0Y2gocmF3ZGF0YSwgaykKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIG0gPSBhdHRyZmluZC5tYXRjaChyYXdkYXRhLCBrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtID0gYXR0cmZpbmRfdG9sZXJhbnQuc2VhcmNoKHJhd2RhdGEsIGspCiAgICAgICAgICAgICBpZiBub3QgbToKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgYXR0cm5hbWUsIHJlc3QsIGF0dHJ2YWx1ZSA9IG0uZ3JvdXAoMSwgMiwgMykKQEAgLTI2Miw4ICszMDQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtIHNlbGYuX19zdGFydHRhZ190ZXh0LnJmaW5kKCJcbiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCArIGxlbihzZWxmLl9fc3RhcnR0YWdfdGV4dCkKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoImp1bmsgY2hhcmFjdGVycyBpbiBzdGFydCB0YWc6ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAlIChyYXdkYXRhW2s6ZW5kcG9zXVs6MjBdLCkpCisgICAgICAgICAgICBpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJqdW5rIGNoYXJhY3RlcnMgaW4gc3RhcnQgdGFnOiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHJhd2RhdGFbazplbmRwb3NdWzoyMF0sKSkKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmVuZHBvc10pCisgICAgICAgICAgICByZXR1cm4gZW5kcG9zCiAgICAgICAgIGlmIGVuZC5lbmRzd2l0aCgnLz4nKToKICAgICAgICAgICAgICMgWEhUTUwtc3R5bGUgZW1wdHkgdGFnOiA8c3BhbiBhdHRyPSJ2YWx1ZSIgLz4KICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3N0YXJ0ZW5kdGFnKHRhZywgYXR0cnMpCkBAIC0yNzcsNyArMzIyLDEwIEBACiAgICAgIyBvciAtMSBpZiBpbmNvbXBsZXRlLgogICAgIGRlZiBjaGVja19mb3Jfd2hvbGVfc3RhcnRfdGFnKHNlbGYsIGkpOgogICAgICAgICByYXdkYXRhID0gc2VsZi5yYXdkYXRhCi0gICAgICAgIG0gPSBsb2NhdGVzdGFydHRhZ2VuZC5tYXRjaChyYXdkYXRhLCBpKQorICAgICAgICBpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgIG0gPSBsb2NhdGVzdGFydHRhZ2VuZC5tYXRjaChyYXdkYXRhLCBpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbSA9IGxvY2F0ZXN0YXJ0dGFnZW5kX3RvbGVyYW50Lm1hdGNoKHJhd2RhdGEsIGkpCiAgICAgICAgIGlmIG06CiAgICAgICAgICAgICBqID0gbS5lbmQoKQogICAgICAgICAgICAgbmV4dCA9IHJhd2RhdGFbajpqKzFdCkBAIC0yOTAsOCArMzM4LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICMgYnVmZmVyIGJvdW5kYXJ5CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgICAgICAgICAgICMgZWxzZSBib2d1cyBpbnB1dAotICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlcG9zKGksIGogKyAxKQotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIm1hbGZvcm1lZCBlbXB0eSBzdGFydCB0YWciKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZXBvcyhpLCBqICsgMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigibWFsZm9ybWVkIGVtcHR5IHN0YXJ0IHRhZyIpCisgICAgICAgICAgICAgICAgaWYgaiA+IGk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxCiAgICAgICAgICAgICBpZiBuZXh0ID09ICIiOgogICAgICAgICAgICAgICAgICMgZW5kIG9mIGlucHV0CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xCkBAIC0zMDAsOCArMzUzLDEzIEBACiAgICAgICAgICAgICAgICAgIyBlbmQgb2YgaW5wdXQgaW4gb3IgYmVmb3JlIGF0dHJpYnV0ZSB2YWx1ZSwgb3Igd2UgaGF2ZSB0aGUKICAgICAgICAgICAgICAgICAjICcvJyBmcm9tIGEgJy8+JyBlbmRpbmcKICAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgIHNlbGYudXBkYXRlcG9zKGksIGopCi0gICAgICAgICAgICBzZWxmLmVycm9yKCJtYWxmb3JtZWQgc3RhcnQgdGFnIikKKyAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlcG9zKGksIGopCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigibWFsZm9ybWVkIHN0YXJ0IHRhZyIpCisgICAgICAgICAgICBpZiBqID4gaToKKyAgICAgICAgICAgICAgICByZXR1cm4gagorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gaSArIDEKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIndlIHNob3VsZCBub3QgZ2V0IGhlcmUhIikKIAogICAgICMgSW50ZXJuYWwgLS0gcGFyc2UgZW5kdGFnLCByZXR1cm4gZW5kIG9yIC0xIGlmIGluY29tcGxldGUKQEAgLTMxNCw3ICszNzIsMTUgQEAKICAgICAgICAgaiA9IG1hdGNoLmVuZCgpCiAgICAgICAgIG1hdGNoID0gZW5kdGFnZmluZC5tYXRjaChyYXdkYXRhLCBpKSAjIDwvICsgdGFnICsgPgogICAgICAgICBpZiBub3QgbWF0Y2g6Ci0gICAgICAgICAgICBzZWxmLmVycm9yKCJiYWQgZW5kIHRhZzogJXIiICUgKHJhd2RhdGFbaTpqXSwpKQorICAgICAgICAgICAgaWYgc2VsZi5zdHJpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcigiYmFkIGVuZCB0YWc6ICVyIiAlIChyYXdkYXRhW2k6al0sKSkKKyAgICAgICAgICAgIGsgPSByYXdkYXRhLmZpbmQoJzwnLCBpICsgMSwgaikKKyAgICAgICAgICAgIGlmIGsgPiBpOgorICAgICAgICAgICAgICAgIGogPSBrCisgICAgICAgICAgICBpZiBqIDw9IGk6CisgICAgICAgICAgICAgICAgaiA9IGkgKyAxCisgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhKHJhd2RhdGFbaTpqXSkKKyAgICAgICAgICAgIHJldHVybiBqCiAgICAgICAgIHRhZyA9IG1hdGNoLmdyb3VwKDEpCiAgICAgICAgIHNlbGYuaGFuZGxlX2VuZHRhZyh0YWcubG93ZXIoKSkKICAgICAgICAgc2VsZi5jbGVhcl9jZGF0YV9tb2RlKCkKQEAgLTM1OCw3ICs0MjQsOCBAQAogICAgICAgICBwYXNzCiAKICAgICBkZWYgdW5rbm93bl9kZWNsKHNlbGYsIGRhdGEpOgotICAgICAgICBzZWxmLmVycm9yKCJ1bmtub3duIGRlY2xhcmF0aW9uOiAlciIgJSAoZGF0YSwpKQorICAgICAgICBpZiBzZWxmLnN0cmljdDoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoInVua25vd24gZGVjbGFyYXRpb246ICVyIiAlIChkYXRhLCkpCiAKICAgICAjIEludGVybmFsIC0tIGhlbHBlciB0byByZW1vdmUgc3BlY2lhbCBjaGFyYWN0ZXIgcXVvdGluZwogICAgIGVudGl0eWRlZnMgPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jbGllbnQucHkgYi9MaWIvaHR0cC9jbGllbnQucHkKaW5kZXggNGE2NTEyNS4uNjA0NTc3YyAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY2xpZW50LnB5CisrKyBiL0xpYi9odHRwL2NsaWVudC5weQpAQCAtNzEsNiArNzEsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKK2ltcG9ydCBjb2xsZWN0aW9ucwogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHNwbGl0CiBpbXBvcnQgd2FybmluZ3MKIApAQCAtMjU3LDEzICsyNTgsMTAgQEAKICAgICBoc3RyaW5nID0gYicnLmpvaW4oaGVhZGVycykuZGVjb2RlKCdpc28tODg1OS0xJykKICAgICByZXR1cm4gZW1haWwucGFyc2VyLlBhcnNlcihfY2xhc3M9X2NsYXNzKS5wYXJzZXN0cihoc3RyaW5nKQogCi1jbGFzcyBIVFRQUmVzcG9uc2UoaW8uUmF3SU9CYXNlKToKIAotICAgICMgc3RyaWN0OiBJZiB0cnVlLCByYWlzZSBCYWRTdGF0dXNMaW5lIGlmIHRoZSBzdGF0dXMgbGluZSBjYW4ndCBiZQotICAgICMgcGFyc2VkIGFzIGEgdmFsaWQgSFRUUC8xLjAgb3IgMS4xIHN0YXR1cyBsaW5lLiAgQnkgZGVmYXVsdCBpdCBpcwotICAgICMgZmFsc2UgYmVjYXVzZSBpdCBwcmV2ZW50cyBjbGllbnRzIGZyb20gdGFsa2luZyB0byBIVFRQLzAuOQotICAgICMgc2VydmVycy4gIE5vdGUgdGhhdCBhIHJlc3BvbnNlIHdpdGggYSBzdWZmaWNpZW50bHkgY29ycnVwdGVkCi0gICAgIyBzdGF0dXMgbGluZSB3aWxsIGxvb2sgbGlrZSBhbiBIVFRQLzAuOSByZXNwb25zZS4KK19zdHJpY3Rfc2VudGluZWwgPSBvYmplY3QoKQorCitjbGFzcyBIVFRQUmVzcG9uc2UoaW8uUmF3SU9CYXNlKToKIAogICAgICMgU2VlIFJGQyAyNjE2IHNlYyAxOS42IGFuZCBSRkMgMTk0NSBzZWMgNiBmb3IgZGV0YWlscy4KIApAQCAtMjcyLDcgKzI3MCw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD0wLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgogICAgICAgICAjIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIGNvbnRlbnQtbGVuZ3RoIGhlYWRlciwgd2UgbmVlZCB0bwogICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IHRoZSBjbGllbnQgZG9lc24ndCByZWFkIG1vcmUgdGhhbiB0aGUKICAgICAgICAgIyBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzLiAgSWYgaXQgZG9lcywgaXQgd2lsbCBibG9jayB1bnRpbApAQCAtMjgyLDcgKzI4MCwxMCBAQAogICAgICAgICAjIGNsaWVudHMgdW5sZXNzIHRoZXkga25vdyB3aGF0IHRoZXkgYXJlIGRvaW5nLgogICAgICAgICBzZWxmLmZwID0gc29jay5tYWtlZmlsZSgicmIiKQogICAgICAgICBzZWxmLmRlYnVnbGV2ZWwgPSBkZWJ1Z2xldmVsCi0gICAgICAgIHNlbGYuc3RyaWN0ID0gc3RyaWN0CisgICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgorICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKKyAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHNlbGYuX21ldGhvZCA9IG1ldGhvZAogCiAgICAgICAgICMgVGhlIEhUVFBSZXNwb25zZSBvYmplY3QgaXMgcmV0dXJuZWQgdmlhIHVybGxpYi4gIFRoZSBjbGllbnRzCkBAIC0zMDQsOCArMzA1LDkgQEAKICAgICAgICAgc2VsZi53aWxsX2Nsb3NlID0gX1VOS05PV04gICAgICAjIGNvbm4gd2lsbCBjbG9zZSBhdCBlbmQgb2YgcmVzcG9uc2UKIAogICAgIGRlZiBfcmVhZF9zdGF0dXMoc2VsZik6Ci0gICAgICAgICMgSW5pdGlhbGl6ZSB3aXRoIFNpbXBsZS1SZXNwb25zZSBkZWZhdWx0cy4KLSAgICAgICAgbGluZSA9IHN0cihzZWxmLmZwLnJlYWRsaW5lKCksICJpc28tODg1OS0xIikKKyAgICAgICAgbGluZSA9IHN0cihzZWxmLmZwLnJlYWRsaW5lKF9NQVhMSU5FICsgMSksICJpc28tODg1OS0xIikKKyAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICByYWlzZSBMaW5lVG9vTG9uZygic3RhdHVzIGxpbmUiKQogICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgogICAgICAgICAgICAgcHJpbnQoInJlcGx5OiIsIHJlcHIobGluZSkpCiAgICAgICAgIGlmIG5vdCBsaW5lOgpAQCAtMzEzLDI1ICszMTUsMTcgQEAKICAgICAgICAgICAgICMgc2VuZGluZyBhIHZhbGlkIHJlc3BvbnNlLgogICAgICAgICAgICAgcmFpc2UgQmFkU3RhdHVzTGluZShsaW5lKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBbdmVyc2lvbiwgc3RhdHVzLCByZWFzb25dID0gbGluZS5zcGxpdChOb25lLCAyKQorICAgICAgICAgICAgdmVyc2lvbiwgc3RhdHVzLCByZWFzb24gPSBsaW5lLnNwbGl0KE5vbmUsIDIpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIFt2ZXJzaW9uLCBzdGF0dXNdID0gbGluZS5zcGxpdChOb25lLCAxKQorICAgICAgICAgICAgICAgIHZlcnNpb24sIHN0YXR1cyA9IGxpbmUuc3BsaXQoTm9uZSwgMSkKICAgICAgICAgICAgICAgICByZWFzb24gPSAiIgogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgIyBlbXB0eSB2ZXJzaW9uIHdpbGwgY2F1c2UgbmV4dCB0ZXN0IHRvIGZhaWwgYW5kIHN0YXR1cwotICAgICAgICAgICAgICAgICMgd2lsbCBiZSB0cmVhdGVkIGFzIDAuOSByZXNwb25zZS4KKyAgICAgICAgICAgICAgICAjIGVtcHR5IHZlcnNpb24gd2lsbCBjYXVzZSBuZXh0IHRlc3QgdG8gZmFpbC4KICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gIiIKICAgICAgICAgaWYgbm90IHZlcnNpb24uc3RhcnRzd2l0aCgiSFRUUC8iKToKLSAgICAgICAgICAgIGlmIHNlbGYuc3RyaWN0OgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlIEJhZFN0YXR1c0xpbmUobGluZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBBc3N1bWUgaXQncyBhIFNpbXBsZS1SZXNwb25zZSBmcm9tIGFuIDAuOSBzZXJ2ZXIuCi0gICAgICAgICAgICAgICAgIyBXZSBoYXZlIHRvIGNvbnZlcnQgdGhlIGZpcnN0IGxpbmUgYmFjayB0byByYXcgYnl0ZXMKLSAgICAgICAgICAgICAgICAjIGJlY2F1c2Ugc2VsZi5mcC5yZWFkbGluZSgpIG5lZWRzIHRvIHJldHVybiBieXRlcy4KLSAgICAgICAgICAgICAgICBzZWxmLmZwID0gTGluZUFuZEZpbGVXcmFwcGVyKGJ5dGVzKGxpbmUsICJhc2NpaSIpLCBzZWxmLmZwKQotICAgICAgICAgICAgICAgIHJldHVybiAiSFRUUC8wLjkiLCAyMDAsICIiCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIEJhZFN0YXR1c0xpbmUobGluZSkKIAogICAgICAgICAjIFRoZSBzdGF0dXMgY29kZSBpcyBhIHRocmVlLWRpZ2l0IG51bWJlcgogICAgICAgICB0cnk6CkBAIC0zNjUsMjIgKzM1OSwxNCBAQAogCiAgICAgICAgIHNlbGYuY29kZSA9IHNlbGYuc3RhdHVzID0gc3RhdHVzCiAgICAgICAgIHNlbGYucmVhc29uID0gcmVhc29uLnN0cmlwKCkKLSAgICAgICAgaWYgdmVyc2lvbiA9PSAiSFRUUC8xLjAiOgorICAgICAgICBpZiB2ZXJzaW9uIGluICgiSFRUUC8xLjAiLCAiSFRUUC8wLjkiKToKKyAgICAgICAgICAgICMgU29tZSBzZXJ2ZXJzIG1pZ2h0IHN0aWxsIHJldHVybiAiMC45IiwgdHJlYXQgaXQgYXMgMS4wIGFueXdheQogICAgICAgICAgICAgc2VsZi52ZXJzaW9uID0gMTAKICAgICAgICAgZWxpZiB2ZXJzaW9uLnN0YXJ0c3dpdGgoIkhUVFAvMS4iKToKICAgICAgICAgICAgIHNlbGYudmVyc2lvbiA9IDExICAgIyB1c2UgSFRUUC8xLjEgY29kZSBmb3IgSFRUUC8xLnggd2hlcmUgeD49MQotICAgICAgICBlbGlmIHZlcnNpb24gPT0gIkhUVFAvMC45IjoKLSAgICAgICAgICAgIHNlbGYudmVyc2lvbiA9IDkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFVua25vd25Qcm90b2NvbCh2ZXJzaW9uKQogCi0gICAgICAgIGlmIHNlbGYudmVyc2lvbiA9PSA5OgotICAgICAgICAgICAgc2VsZi5sZW5ndGggPSBOb25lCi0gICAgICAgICAgICBzZWxmLmNodW5rZWQgPSBGYWxzZQotICAgICAgICAgICAgc2VsZi53aWxsX2Nsb3NlID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5oZWFkZXJzID0gc2VsZi5tc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCcnKQotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgc2VsZi5oZWFkZXJzID0gc2VsZi5tc2cgPSBwYXJzZV9oZWFkZXJzKHNlbGYuZnApCiAKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTY1MSwxMSArNjM3LDE1IEBACiAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUF9QT1JUCiAgICAgYXV0b19vcGVuID0gMQogICAgIGRlYnVnbGV2ZWwgPSAwCi0gICAgc3RyaWN0ID0gMAogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgc3RyaWN0PU5vbmUsCi0gICAgICAgICAgICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBzdHJpY3Q9X3N0cmljdF9zZW50aW5lbCwKKyAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgorICAgICAgICBpZiBzdHJpY3QgaXMgbm90IF9zdHJpY3Rfc2VudGluZWw6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ0aGUgJ3N0cmljdCcgYXJndW1lbnQgaXNuJ3Qgc3VwcG9ydGVkIGFueW1vcmU7ICIKKyAgICAgICAgICAgICAgICAiaHR0cC5jbGllbnQgbm93IGFsd2F5cyBhc3N1bWVzIEhUVFAvMS54IGNvbXBsaWFudCBzZXJ2ZXJzLiIsCisgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCiAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCiAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKQEAgLTY2NiwxMCArNjU2LDEzIEBACiAgICAgICAgIHNlbGYuX3R1bm5lbF9oZWFkZXJzID0ge30KIAogICAgICAgICBzZWxmLl9zZXRfaG9zdHBvcnQoaG9zdCwgcG9ydCkKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zdHJpY3QgPSBzdHJpY3QKIAotICAgIGRlZiBfc2V0X3R1bm5lbChzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgZGVmIHNldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgICAgICAiIiIgU2V0cyB1cCB0aGUgaG9zdCBhbmQgdGhlIHBvcnQgZm9yIHRoZSBIVFRQIENPTk5FQ1QgVHVubmVsbGluZy4KKworICAgICAgICBUaGUgaGVhZGVycyBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAgaGVhZGVycworICAgICAgICB0byBzZW5kIHdpdGggdGhlIENPTk5FQ1QgcmVxdWVzdC4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCA9IHBvcnQKICAgICAgICAgaWYgaGVhZGVyczoKQEAgLTcwNCwxMiArNjk3LDExIEBACiAgICAgICAgIHNlbGYuc2VuZChjb25uZWN0X2J5dGVzKQogICAgICAgICBmb3IgaGVhZGVyLCB2YWx1ZSBpbiBzZWxmLl90dW5uZWxfaGVhZGVycy5pdGVtcygpOgogICAgICAgICAgICAgaGVhZGVyX3N0ciA9ICIlczogJXNcclxuIiAlIChoZWFkZXIsIHZhbHVlKQotICAgICAgICAgICAgaGVhZGVyX2J5dGVzID0gaGVhZGVyX3N0ci5lbmNvZGUoImFzY2lpIikKKyAgICAgICAgICAgIGhlYWRlcl9ieXRlcyA9IGhlYWRlcl9zdHIuZW5jb2RlKCJsYXRpbjEiKQogICAgICAgICAgICAgc2VsZi5zZW5kKGhlYWRlcl9ieXRlcykKICAgICAgICAgc2VsZi5zZW5kKGInXHJcbicpCiAKLSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlc3BvbnNlX2NsYXNzKHNlbGYuc29jaywgc3RyaWN0ID0gc2VsZi5zdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBzZWxmLl9tZXRob2QpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcyhzZWxmLnNvY2ssIG1ldGhvZD1zZWxmLl9tZXRob2QpCiAgICAgICAgICh2ZXJzaW9uLCBjb2RlLCBtZXNzYWdlKSA9IHJlc3BvbnNlLl9yZWFkX3N0YXR1cygpCiAKICAgICAgICAgaWYgY29kZSAhPSAyMDA6CkBAIC03MjYsNyArNzE4LDcgQEAKICAgICBkZWYgY29ubmVjdChzZWxmKToKICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCiAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LHNlbGYucG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCiAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKIApAQCAtNzQxLDE4ICs3MzMsMTcgQEAKICAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKIAogICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEpOgotICAgICAgICAiIiJTZW5kIGBkYXRhJyB0byB0aGUgc2VydmVyLiIiIgorICAgICAgICAiIiJTZW5kIGBkYXRhJyB0byB0aGUgc2VydmVyLgorICAgICAgICBgYGRhdGFgYCBjYW4gYmUgYSBzdHJpbmcgb2JqZWN0LCBhIGJ5dGVzIG9iamVjdCwgYW4gYXJyYXkgb2JqZWN0LCBhCisgICAgICAgIGZpbGUtbGlrZSBvYmplY3QgdGhhdCBzdXBwb3J0cyBhIC5yZWFkKCkgbWV0aG9kLCBvciBhbiBpdGVyYWJsZSBvYmplY3QuCisgICAgICAgICIiIgorCiAgICAgICAgIGlmIHNlbGYuc29jayBpcyBOb25lOgogICAgICAgICAgICAgaWYgc2VsZi5hdXRvX29wZW46CiAgICAgICAgICAgICAgICAgc2VsZi5jb25uZWN0KCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90Q29ubmVjdGVkKCkKIAotICAgICAgICAjIHNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlci4gaWYgd2UgZ2V0IGEgYnJva2VuIHBpcGUsIHRoZW4gY2xvc2UKLSAgICAgICAgIyB0aGUgc29ja2V0LiB3ZSB3YW50IHRvIHJlY29ubmVjdCB3aGVuIHNvbWVib2R5IHRyaWVzIHRvIHNlbmQgYWdhaW4uCi0gICAgICAgICMKLSAgICAgICAgIyBOT1RFOiB3ZSBETyBwcm9wYWdhdGUgdGhlIGVycm9yLCB0aG91Z2gsIGJlY2F1c2Ugd2UgY2Fubm90IHNpbXBseQotICAgICAgICAjICAgICAgIGlnbm9yZSB0aGUgZXJyb3IuLi4gdGhlIGNhbGxlciB3aWxsIGtub3cgaWYgdGhleSBjYW4gcmV0cnkuCiAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICBwcmludCgic2VuZDoiLCByZXByKGRhdGEpKQogICAgICAgICBibG9ja3NpemUgPSA4MTkyCkBAIC03NzgsOCArNzY5LDE2IEBACiAgICAgICAgICAgICAgICAgaWYgZW5jb2RlOgogICAgICAgICAgICAgICAgICAgICBkYXRhYmxvY2sgPSBkYXRhYmxvY2suZW5jb2RlKCJpc28tODg1OS0xIikKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChkYXRhYmxvY2spCi0gICAgICAgIGVsc2U6CisKKyAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwoZGF0YSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgY29sbGVjdGlvbnMuSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIGZvciBkIGluIGRhdGE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGF0YSBzaG91bGQgYmUgYSBieXRlcy1saWtlIG9iamVjdFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFuIGl0ZXJhYmxlLCBnb3QgJXIgIiAlIHR5cGUoaXQpKQogCiAgICAgZGVmIF9vdXRwdXQoc2VsZiwgcyk6CiAgICAgICAgICIiIkFkZCBhIGxpbmUgb2Ygb3V0cHV0IHRvIHRoZSBjdXJyZW50IHJlcXVlc3QgYnVmZmVyLgpAQCAtOTM4LDcgKzkzNyw3IEBACiAgICAgICAgIHZhbHVlcyA9IGxpc3QodmFsdWVzKQogICAgICAgICBmb3IgaSwgb25lX3ZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgogICAgICAgICAgICAgaWYgaGFzYXR0cihvbmVfdmFsdWUsICdlbmNvZGUnKToKLSAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvbmVfdmFsdWUuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gb25lX3ZhbHVlLmVuY29kZSgnbGF0aW4xJykKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvbmVfdmFsdWUsIGludCk6CiAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gc3RyKG9uZV92YWx1ZSkuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgIHZhbHVlID0gYidcclxuXHQnLmpvaW4odmFsdWVzKQpAQCAtMTA0MCwxMSArMTAzOSw5IEBACiAKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcyhzZWxmLnNvY2ssIHNlbGYuZGVidWdsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9c2VsZi5zdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPXNlbGYuX21ldGhvZCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXNwb25zZV9jbGFzcyhzZWxmLnNvY2ssIHN0cmljdD1zZWxmLnN0cmljdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9c2VsZi5fbWV0aG9kKQorICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlc3BvbnNlX2NsYXNzKHNlbGYuc29jaywgbWV0aG9kPXNlbGYuX21ldGhvZCkKIAogICAgICAgICByZXNwb25zZS5iZWdpbigpCiAgICAgICAgIGFzc2VydCByZXNwb25zZS53aWxsX2Nsb3NlICE9IF9VTktOT1dOCkBAIC0xMDY5LDMwICsxMDY2LDUwIEBACiAKICAgICAgICAgZGVmYXVsdF9wb3J0ID0gSFRUUFNfUE9SVAogCisgICAgICAgICMgWFhYIFNob3VsZCBrZXlfZmlsZSBhbmQgY2VydF9maWxlIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGNvbnRleHQ/CisKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwga2V5X2ZpbGU9Tm9uZSwgY2VydF9maWxlPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJpY3Q9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgotICAgICAgICAgICAgSFRUUENvbm5lY3Rpb24uX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBjaGVja19ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcykKICAgICAgICAgICAgIHNlbGYua2V5X2ZpbGUgPSBrZXlfZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0X2ZpbGUgPSBjZXJ0X2ZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cworICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgICAgIHdpbGxfdmVyaWZ5ID0gY29udGV4dC52ZXJpZnlfbW9kZSAhPSBzc2wuQ0VSVF9OT05FCisgICAgICAgICAgICBpZiBjaGVja19ob3N0bmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lID0gd2lsbF92ZXJpZnkKKyAgICAgICAgICAgIGVsaWYgY2hlY2tfaG9zdG5hbWUgYW5kIG5vdCB3aWxsX3ZlcmlmeToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjaGVja19ob3N0bmFtZSBuZWVkcyBhIFNTTCBjb250ZXh0IHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVpdGhlciBDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKQorICAgICAgICAgICAgaWYga2V5X2ZpbGUgb3IgY2VydF9maWxlOgorICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRfZmlsZSwga2V5X2ZpbGUpCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gY29udGV4dAorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaG9zdG5hbWUgPSBjaGVja19ob3N0bmFtZQogCiAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gKFNTTCkgcG9ydC4iCiAKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCiAKICAgICAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2sKICAgICAgICAgICAgICAgICBzZWxmLl90dW5uZWwoKQogCi0gICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VsZi5rZXlfZmlsZSwgc2VsZi5jZXJ0X2ZpbGUpCi0KLQotICAgIGRlZiBGYWtlU29ja2V0IChzb2NrLCBzc2xvYmopOgotICAgICAgICB3YXJuaW5ncy53YXJuKCJGYWtlU29ja2V0IGlzIGRlcHJlY2F0ZWQsIGFuZCB3b24ndCBiZSBpbiAzLnguICAiICsKLSAgICAgICAgICAgICAgICAgICAgICAiVXNlIHRoZSByZXN1bHQgb2Ygc3NsLndyYXBfc29ja2V0KCkgZGlyZWN0bHkgaW5zdGVhZC4iLAotICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQotICAgICAgICByZXR1cm4gc3Nsb2JqCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBzZWxmLmhvc3QgaWYgc3NsLkhBU19TTkkgZWxzZSBOb25lCisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fY2hlY2tfaG9zdG5hbWU6CisgICAgICAgICAgICAgICAgICAgIHNzbC5tYXRjaF9ob3N0bmFtZShzZWxmLnNvY2suZ2V0cGVlcmNlcnQoKSwgc2VsZi5ob3N0KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBfX2FsbF9fLmFwcGVuZCgiSFRUUFNDb25uZWN0aW9uIikKIApAQCAtMTE0Niw2ICsxMTYzLDggQEAKIAogY2xhc3MgQmFkU3RhdHVzTGluZShIVFRQRXhjZXB0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSk6CisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgbGluZSA9IHJlcHIobGluZSkKICAgICAgICAgc2VsZi5hcmdzID0gbGluZSwKICAgICAgICAgc2VsZi5saW5lID0gbGluZQogCkBAIC0xMTU2LDcxICsxMTc1LDMgQEAKIAogIyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKIGVycm9yID0gSFRUUEV4Y2VwdGlvbgotCi1jbGFzcyBMaW5lQW5kRmlsZVdyYXBwZXI6Ci0gICAgIiIiQSBsaW1pdGVkIGZpbGUtbGlrZSBvYmplY3QgZm9yIEhUVFAvMC45IHJlc3BvbnNlcy4iIiIKLQotICAgICMgVGhlIHN0YXR1cy1saW5lIHBhcnNpbmcgY29kZSBjYWxscyByZWFkbGluZSgpLCB3aGljaCBub3JtYWxseQotICAgICMgZ2V0IHRoZSBIVFRQIHN0YXR1cyBsaW5lLiAgRm9yIGEgMC45IHJlc3BvbnNlLCBob3dldmVyLCB0aGlzIGlzCi0gICAgIyBhY3R1YWxseSB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYm9keSEgIENsaWVudHMgbmVlZCB0byBnZXQgYQotICAgICMgcmVhZGFibGUgZmlsZSBvYmplY3QgdGhhdCBjb250YWlucyB0aGF0IGxpbmUuCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbGluZSwgZmlsZSk6Ci0gICAgICAgIHNlbGYuX2xpbmUgPSBsaW5lCi0gICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCi0gICAgICAgIHNlbGYuX2xpbmVfY29uc3VtZWQgPSAwCi0gICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gMAotICAgICAgICBzZWxmLl9saW5lX2xlZnQgPSBsZW4obGluZSkKLQotICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZi5fZmlsZSwgYXR0cikKLQotICAgIGRlZiBfZG9uZShzZWxmKToKLSAgICAgICAgIyBjYWxsZWQgd2hlbiB0aGUgbGFzdCBieXRlIGlzIHJlYWQgZnJvbSB0aGUgbGluZS4gIEFmdGVyIHRoZQotICAgICAgICAjIGNhbGwsIGFsbCByZWFkIG1ldGhvZHMgYXJlIGRlbGVnYXRlZCB0byB0aGUgdW5kZXJseWluZyBmaWxlCi0gICAgICAgICMgb2JqZWN0LgotICAgICAgICBzZWxmLl9saW5lX2NvbnN1bWVkID0gMQotICAgICAgICBzZWxmLnJlYWQgPSBzZWxmLl9maWxlLnJlYWQKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuX2ZpbGUucmVhZGxpbmUKLSAgICAgICAgc2VsZi5yZWFkbGluZXMgPSBzZWxmLl9maWxlLnJlYWRsaW5lcwotCi0gICAgZGVmIHJlYWQoc2VsZiwgYW10PU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9saW5lX2NvbnN1bWVkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZChhbXQpCi0gICAgICAgIGFzc2VydCBzZWxmLl9saW5lX2xlZnQKLSAgICAgICAgaWYgYW10IGlzIE5vbmUgb3IgYW10ID4gc2VsZi5fbGluZV9sZWZ0OgotICAgICAgICAgICAgcyA9IHNlbGYuX2xpbmVbc2VsZi5fbGluZV9vZmZzZXQ6XQotICAgICAgICAgICAgc2VsZi5fZG9uZSgpCi0gICAgICAgICAgICBpZiBhbXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICByZXR1cm4gcyArIHNlbGYuX2ZpbGUucmVhZCgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzICsgc2VsZi5fZmlsZS5yZWFkKGFtdCAtIGxlbihzKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGFzc2VydCBhbXQgPD0gc2VsZi5fbGluZV9sZWZ0Ci0gICAgICAgICAgICBpID0gc2VsZi5fbGluZV9vZmZzZXQKLSAgICAgICAgICAgIGogPSBpICsgYW10Ci0gICAgICAgICAgICBzID0gc2VsZi5fbGluZVtpOmpdCi0gICAgICAgICAgICBzZWxmLl9saW5lX29mZnNldCA9IGoKLSAgICAgICAgICAgIHNlbGYuX2xpbmVfbGVmdCAtPSBhbXQKLSAgICAgICAgICAgIGlmIHNlbGYuX2xpbmVfbGVmdCA9PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX2RvbmUoKQotICAgICAgICAgICAgcmV0dXJuIHMKLQotICAgIGRlZiByZWFkbGluZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fbGluZV9jb25zdW1lZDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpbmVfbGVmdAotICAgICAgICBzID0gc2VsZi5fbGluZVtzZWxmLl9saW5lX29mZnNldDpdCi0gICAgICAgIHNlbGYuX2RvbmUoKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBzaXplPU5vbmUpOgotICAgICAgICBpZiBzZWxmLl9saW5lX2NvbnN1bWVkOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUucmVhZGxpbmVzKHNpemUpCi0gICAgICAgIGFzc2VydCBzZWxmLl9saW5lX2xlZnQKLSAgICAgICAgTCA9IFtzZWxmLl9saW5lW3NlbGYuX2xpbmVfb2Zmc2V0Ol1dCi0gICAgICAgIHNlbGYuX2RvbmUoKQotICAgICAgICBpZiBzaXplIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTCArIHNlbGYuX2ZpbGUucmVhZGxpbmVzKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBMICsgc2VsZi5fZmlsZS5yZWFkbGluZXMoc2l6ZSkKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2Nvb2tpZWphci5weSBiL0xpYi9odHRwL2Nvb2tpZWphci5weQppbmRleCBlN2YwYjRiLi45ZDc5OGU4IDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVqYXIucHkKKysrIGIvTGliL2h0dHAvY29va2llamFyLnB5CkBAIC00NDIsNiArNDQyLDEzIEBACiAgICAgICAgIGlmIGF0dHI6IGhlYWRlcnMuYXBwZW5kKCI7ICIuam9pbihhdHRyKSkKICAgICByZXR1cm4gIiwgIi5qb2luKGhlYWRlcnMpCiAKK2RlZiBzdHJpcF9xdW90ZXModGV4dCk6CisgICAgaWYgdGV4dC5zdGFydHN3aXRoKCciJyk6CisgICAgICAgIHRleHQgPSB0ZXh0WzE6XQorICAgIGlmIHRleHQuZW5kc3dpdGgoJyInKToKKyAgICAgICAgdGV4dCA9IHRleHRbOi0xXQorICAgIHJldHVybiB0ZXh0CisKIGRlZiBwYXJzZV9uc19oZWFkZXJzKG5zX2hlYWRlcnMpOgogICAgICIiIkFkLWhvYyBwYXJzZXIgZm9yIE5ldHNjYXBlIHByb3RvY29sIGNvb2tpZS1hdHRyaWJ1dGVzLgogCkBAIC00NTksNyArNDY2LDcgQEAKICAgICAiIiIKICAgICBrbm93bl9hdHRycyA9ICgiZXhwaXJlcyIsICJkb21haW4iLCAicGF0aCIsICJzZWN1cmUiLAogICAgICAgICAgICAgICAgICAgICMgUkZDIDIxMDkgYXR0cnMgKG1heSB0dXJuIHVwIGluIE5ldHNjYXBlIGNvb2tpZXMsIHRvbykKLSAgICAgICAgICAgICAgICAgICAicG9ydCIsICJtYXgtYWdlIikKKyAgICAgICAgICAgICAgICAgICAidmVyc2lvbiIsICJwb3J0IiwgIm1heC1hZ2UiKQogCiAgICAgcmVzdWx0ID0gW10KICAgICBmb3IgbnNfaGVhZGVyIGluIG5zX2hlYWRlcnM6CkBAIC00NzksMTIgKzQ4NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICBrID0gbGMKICAgICAgICAgICAgICAgICBpZiBrID09ICJ2ZXJzaW9uIjoKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIFJGQyAyMTA5IGNvb2tpZS4KKyAgICAgICAgICAgICAgICAgICAgdiA9IHN0cmlwX3F1b3Rlcyh2KQogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX3NldCA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBrID09ICJleHBpcmVzIjoKICAgICAgICAgICAgICAgICAgICAgIyBjb252ZXJ0IGV4cGlyZXMgZGF0ZSB0byBzZWNvbmRzIHNpbmNlIGVwb2NoCi0gICAgICAgICAgICAgICAgICAgIGlmIHYuc3RhcnRzd2l0aCgnIicpOiB2ID0gdlsxOl0KLSAgICAgICAgICAgICAgICAgICAgaWYgdi5lbmRzd2l0aCgnIicpOiB2ID0gdls6LTFdCi0gICAgICAgICAgICAgICAgICAgIHYgPSBodHRwMnRpbWUodikgICMgTm9uZSBpZiBpbnZhbGlkCisgICAgICAgICAgICAgICAgICAgIHYgPSBodHRwMnRpbWUoc3RyaXBfcXVvdGVzKHYpKSAgIyBOb25lIGlmIGludmFsaWQKICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgoaywgdikpCiAKICAgICAgICAgaWYgcGFpcnM6CkBAIC0xNDQ5LDcgKzE0NTUsMTEgQEAKIAogICAgICAgICAjIHNldCB0aGUgZWFzeSBkZWZhdWx0cwogICAgICAgICB2ZXJzaW9uID0gc3RhbmRhcmQuZ2V0KCJ2ZXJzaW9uIiwgTm9uZSkKLSAgICAgICAgaWYgdmVyc2lvbiBpcyBub3QgTm9uZTogdmVyc2lvbiA9IGludCh2ZXJzaW9uKQorICAgICAgICBpZiB2ZXJzaW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZlcnNpb24gPSBpbnQodmVyc2lvbikKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lICAjIGludmFsaWQgdmVyc2lvbiwgaWdub3JlIGNvb2tpZQogICAgICAgICBzZWN1cmUgPSBzdGFuZGFyZC5nZXQoInNlY3VyZSIsIEZhbHNlKQogICAgICAgICAjIChkaXNjYXJkIGlzIGFsc28gc2V0IGlmIGV4cGlyZXMgaXMgQWJzZW50KQogICAgICAgICBkaXNjYXJkID0gc3RhbmRhcmQuZ2V0KCJkaXNjYXJkIiwgRmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaHR0cC9jb29raWVzLnB5IGIvTGliL2h0dHAvY29va2llcy5weQppbmRleCAwZDllNmQwLi45M2RhNjI3IDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jb29raWVzLnB5CisrKyBiL0xpYi9odHRwL2Nvb2tpZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKIAogIyMjIwpAQCAtNDYsNyArNDYsNyBAQAogVGhlIEJhc2ljcwogLS0tLS0tLS0tLQogCi1JbXBvcnRpbmcgaXMgZWFzeS4uCitJbXBvcnRpbmcgaXMgZWFzeS4uLgogCiAgICA+Pj4gZnJvbSBodHRwIGltcG9ydCBjb29raWVzCiAKQEAgLTEyNywxOSArMTI3LDE0IEBACiAgICAnU2V0LUNvb2tpZTogbnVtYmVyPTdcclxuU2V0LUNvb2tpZTogc3RyaW5nPXNldmVuJwogCiBGaW5pcy4KLSIiIiAgIyIKLSMgICAgIF4KLSMgICAgIHwtLS0taGVscHMgb3V0IGZvbnQtbG9jaworIiIiCiAKICMKICMgSW1wb3J0IG91ciByZXF1aXJlZCBtb2R1bGVzCiAjCitpbXBvcnQgcmUKIGltcG9ydCBzdHJpbmcKIAotZnJvbSBwaWNrbGUgaW1wb3J0IGR1bXBzLCBsb2FkcwotCi1pbXBvcnQgcmUsIHdhcm5pbmdzCi0KIF9fYWxsX18gPSBbIkNvb2tpZUVycm9yIiwgIkJhc2VDb29raWUiLCAiU2ltcGxlQ29va2llIl0KIAogX251bGxqb2luID0gJycuam9pbgpAQCAtMjMxLDE3ICsyMjYsMTYgQEAKICAgICB9CiAKIGRlZiBfcXVvdGUoc3RyLCBMZWdhbENoYXJzPV9MZWdhbENoYXJzKToKLSAgICAjCi0gICAgIyBJZiB0aGUgc3RyaW5nIGRvZXMgbm90IG5lZWQgdG8gYmUgZG91YmxlLXF1b3RlZCwKLSAgICAjIHRoZW4ganVzdCByZXR1cm4gdGhlIHN0cmluZy4gIE90aGVyd2lzZSwgc3Vycm91bmQKLSAgICAjIHRoZSBzdHJpbmcgaW4gZG91YmxlcXVvdGVzIGFuZCBwcmVjZWRlIHF1b3RlICh3aXRoIGEgXCkKLSAgICAjIHNwZWNpYWwgY2hhcmFjdGVycy4KLSAgICAjCisgICAgciIiIlF1b3RlIGEgc3RyaW5nIGZvciB1c2UgaW4gYSBjb29raWUgaGVhZGVyLgorCisgICAgSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBuZWVkIHRvIGJlIGRvdWJsZS1xdW90ZWQsIHRoZW4ganVzdCByZXR1cm4gdGhlCisgICAgc3RyaW5nLiAgT3RoZXJ3aXNlLCBzdXJyb3VuZCB0aGUgc3RyaW5nIGluIGRvdWJsZXF1b3RlcyBhbmQgcXVvdGUKKyAgICAod2l0aCBhIFwpIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKICAgICBpZiBhbGwoYyBpbiBMZWdhbENoYXJzIGZvciBjIGluIHN0cik6CiAgICAgICAgIHJldHVybiBzdHIKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gJyInICsgX251bGxqb2luKCBtYXAoX1RyYW5zbGF0b3IuZ2V0LCBzdHIsIHN0cikgKSArICciJwotIyBlbmQgX3F1b3RlCisgICAgICAgIHJldHVybiAnIicgKyBfbnVsbGpvaW4oX1RyYW5zbGF0b3IuZ2V0KHMsIHMpIGZvciBzIGluIHN0cikgKyAnIicKIAogCiBfT2N0YWxQYXR0ID0gcmUuY29tcGlsZShyIlxcWzAtM11bMC03XVswLTddIikKQEAgLTI1MCw3ICsyNDQsNyBAQAogZGVmIF91bnF1b3RlKHN0cik6CiAgICAgIyBJZiB0aGVyZSBhcmVuJ3QgYW55IGRvdWJsZXF1b3RlcywKICAgICAjIHRoZW4gdGhlcmUgY2FuJ3QgYmUgYW55IHNwZWNpYWwgY2hhcmFjdGVycy4gIFNlZSBSRkMgMjEwOS4KLSAgICBpZiAgbGVuKHN0cikgPCAyOgorICAgIGlmIGxlbihzdHIpIDwgMjoKICAgICAgICAgcmV0dXJuIHN0cgogICAgIGlmIHN0clswXSAhPSAnIicgb3Igc3RyWy0xXSAhPSAnIic6CiAgICAgICAgIHJldHVybiBzdHIKQEAgLTI2OSwzMiArMjYzLDMyIEBACiAgICAgbiA9IGxlbihzdHIpCiAgICAgcmVzID0gW10KICAgICB3aGlsZSAwIDw9IGkgPCBuOgotICAgICAgICBPbWF0Y2ggPSBfT2N0YWxQYXR0LnNlYXJjaChzdHIsIGkpCi0gICAgICAgIFFtYXRjaCA9IF9RdW90ZVBhdHQuc2VhcmNoKHN0ciwgaSkKLSAgICAgICAgaWYgbm90IE9tYXRjaCBhbmQgbm90IFFtYXRjaDogICAgICAgICAgICAgICMgTmVpdGhlciBtYXRjaGVkCisgICAgICAgIG9fbWF0Y2ggPSBfT2N0YWxQYXR0LnNlYXJjaChzdHIsIGkpCisgICAgICAgIHFfbWF0Y2ggPSBfUXVvdGVQYXR0LnNlYXJjaChzdHIsIGkpCisgICAgICAgIGlmIG5vdCBvX21hdGNoIGFuZCBub3QgcV9tYXRjaDogICAgICAgICAgICAgICMgTmVpdGhlciBtYXRjaGVkCiAgICAgICAgICAgICByZXMuYXBwZW5kKHN0cltpOl0pCiAgICAgICAgICAgICBicmVhawogICAgICAgICAjIGVsc2U6CiAgICAgICAgIGogPSBrID0gLTEKLSAgICAgICAgaWYgT21hdGNoOiBqID0gT21hdGNoLnN0YXJ0KDApCi0gICAgICAgIGlmIFFtYXRjaDogayA9IFFtYXRjaC5zdGFydCgwKQotICAgICAgICBpZiBRbWF0Y2ggYW5kICggbm90IE9tYXRjaCBvciBrIDwgaiApOiAgICAgIyBRdW90ZVBhdHQgbWF0Y2hlZAorICAgICAgICBpZiBvX21hdGNoOgorICAgICAgICAgICAgaiA9IG9fbWF0Y2guc3RhcnQoMCkKKyAgICAgICAgaWYgcV9tYXRjaDoKKyAgICAgICAgICAgIGsgPSBxX21hdGNoLnN0YXJ0KDApCisgICAgICAgIGlmIHFfbWF0Y2ggYW5kIChub3Qgb19tYXRjaCBvciBrIDwgaik6ICAgICAjIFF1b3RlUGF0dCBtYXRjaGVkCiAgICAgICAgICAgICByZXMuYXBwZW5kKHN0cltpOmtdKQogICAgICAgICAgICAgcmVzLmFwcGVuZChzdHJbaysxXSkKLSAgICAgICAgICAgIGkgPSBrKzIKKyAgICAgICAgICAgIGkgPSBrICsgMgogICAgICAgICBlbHNlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPY3RhbFBhdHQgbWF0Y2hlZAogICAgICAgICAgICAgcmVzLmFwcGVuZChzdHJbaTpqXSkKLSAgICAgICAgICAgIHJlcy5hcHBlbmQoIGNociggaW50KHN0cltqKzE6ais0XSwgOCkgKSApCi0gICAgICAgICAgICBpID0gais0CisgICAgICAgICAgICByZXMuYXBwZW5kKGNocihpbnQoc3RyW2orMTpqKzRdLCA4KSkpCisgICAgICAgICAgICBpID0gaiArIDQKICAgICByZXR1cm4gX251bGxqb2luKHJlcykKLSMgZW5kIF91bnF1b3RlCiAKLSMgVGhlIF9nZXRkYXRlKCkgcm91dGluZSBpcyB1c2VkIHRvIHNldCB0aGUgZXhwaXJhdGlvbiB0aW1lIGluCi0jIHRoZSBjb29raWUncyBIVFRQIGhlYWRlci4gICAgICBCeSBkZWZhdWx0LCBfZ2V0ZGF0ZSgpIHJldHVybnMgdGhlCi0jIGN1cnJlbnQgdGltZSBpbiB0aGUgYXBwcm9wcmlhdGUgImV4cGlyZXMiIGZvcm1hdCBmb3IgYQotIyBTZXQtQ29va2llIGhlYWRlci4gICAgIFRoZSBvbmUgb3B0aW9uYWwgYXJndW1lbnQgaXMgYW4gb2Zmc2V0IGZyb20KLSMgbm93LCBpbiBzZWNvbmRzLiAgICAgIEZvciBleGFtcGxlLCBhbiBvZmZzZXQgb2YgLTM2MDAgbWVhbnMgIm9uZSBob3VyIGFnbyIuCi0jIFRoZSBvZmZzZXQgbWF5IGJlIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLgorIyBUaGUgX2dldGRhdGUoKSByb3V0aW5lIGlzIHVzZWQgdG8gc2V0IHRoZSBleHBpcmF0aW9uIHRpbWUgaW4gdGhlIGNvb2tpZSdzIEhUVFAKKyMgaGVhZGVyLiAgQnkgZGVmYXVsdCwgX2dldGRhdGUoKSByZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgaW4gdGhlIGFwcHJvcHJpYXRlCisjICJleHBpcmVzIiBmb3JtYXQgZm9yIGEgU2V0LUNvb2tpZSBoZWFkZXIuICBUaGUgb25lIG9wdGlvbmFsIGFyZ3VtZW50IGlzIGFuCisjIG9mZnNldCBmcm9tIG5vdywgaW4gc2Vjb25kcy4gIEZvciBleGFtcGxlLCBhbiBvZmZzZXQgb2YgLTM2MDAgbWVhbnMgIm9uZSBob3VyCisjIGFnbyIuICBUaGUgb2Zmc2V0IG1heSBiZSBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4KICMKIAogX3dlZWtkYXluYW1lID0gWydNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsICdTdW4nXQpAQCAtMzExLDE4ICszMDUsMTUgQEAKICAgICAgICAgICAgKHdlZWtkYXluYW1lW3dkXSwgZGF5LCBtb250aG5hbWVbbW9udGhdLCB5ZWFyLCBoaCwgbW0sIHNzKQogCiAKLSMKLSMgQSBjbGFzcyB0byBob2xkIE9ORSBrZXksdmFsdWUgcGFpci4KLSMgSW4gYSBjb29raWUsIGVhY2ggc3VjaCBwYWlyIG1heSBoYXZlIHNldmVyYWwgYXR0cmlidXRlcy4KLSMgICAgICAgc28gdGhpcyBjbGFzcyBpcyB1c2VkIHRvIGtlZXAgdGhlIGF0dHJpYnV0ZXMgYXNzb2NpYXRlZAotIyAgICAgICB3aXRoIHRoZSBhcHByb3ByaWF0ZSBrZXksdmFsdWUgcGFpci4KLSMgVGhpcyBjbGFzcyBhbHNvIGluY2x1ZGVzIGEgY29kZWRfdmFsdWUgYXR0cmlidXRlLCB3aGljaAotIyAgICAgICBpcyB1c2VkIHRvIGhvbGQgdGhlIG5ldHdvcmsgcmVwcmVzZW50YXRpb24gb2YgdGhlCi0jICAgICAgIHZhbHVlLiAgVGhpcyBpcyBtb3N0IHVzZWZ1bCB3aGVuIFB5dGhvbiBvYmplY3RzIGFyZQotIyAgICAgICBwaWNrbGVkIGZvciBuZXR3b3JrIHRyYW5zaXQuCi0jCi0KIGNsYXNzIE1vcnNlbChkaWN0KToKKyAgICAiIiJBIGNsYXNzIHRvIGhvbGQgT05FIChrZXksIHZhbHVlKSBwYWlyLgorCisgICAgSW4gYSBjb29raWUsIGVhY2ggc3VjaCBwYWlyIG1heSBoYXZlIHNldmVyYWwgYXR0cmlidXRlcywgc28gdGhpcyBjbGFzcyBpcworICAgIHVzZWQgdG8ga2VlcCB0aGUgYXR0cmlidXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtleSx2YWx1ZSBwYWlyLgorICAgIFRoaXMgY2xhc3MgYWxzbyBpbmNsdWRlcyBhIGNvZGVkX3ZhbHVlIGF0dHJpYnV0ZSwgd2hpY2ggaXMgdXNlZCB0byBob2xkCisgICAgdGhlIG5ldHdvcmsgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLiAgVGhpcyBpcyBtb3N0IHVzZWZ1bCB3aGVuIFB5dGhvbgorICAgIG9iamVjdHMgYXJlIHBpY2tsZWQgZm9yIG5ldHdvcmsgdHJhbnNpdC4KKyAgICAiIiIKICAgICAjIFJGQyAyMTA5IGxpc3RzIHRoZXNlIGF0dHJpYnV0ZXMgYXMgcmVzZXJ2ZWQ6CiAgICAgIyAgIHBhdGggICAgICAgY29tbWVudCAgICAgICAgIGRvbWFpbgogICAgICMgICBtYXgtYWdlICAgIHNlY3VyZSAgICAgIHZlcnNpb24KQEAgLTMzNiwzNSArMzI3LDMzIEBACiAgICAgIyBUaGlzIGRpY3Rpb25hcnkgcHJvdmlkZXMgYSBtYXBwaW5nIGZyb20gdGhlIGxvd2VyY2FzZQogICAgICMgdmFyaWFudCBvbiB0aGUgbGVmdCB0byB0aGUgYXBwcm9wcmlhdGUgdHJhZGl0aW9uYWwKICAgICAjIGZvcm1hdHRpbmcgb24gdGhlIHJpZ2h0LgotICAgIF9yZXNlcnZlZCA9IHsgImV4cGlyZXMiIDogImV4cGlyZXMiLAotICAgICAgICAgICAgICAgICAgICJwYXRoIiAgICAgICAgOiAiUGF0aCIsCi0gICAgICAgICAgICAgICAgICAgImNvbW1lbnQiIDogIkNvbW1lbnQiLAotICAgICAgICAgICAgICAgICAgICJkb21haW4iICAgICAgOiAiRG9tYWluIiwKLSAgICAgICAgICAgICAgICAgICAibWF4LWFnZSIgOiAiTWF4LUFnZSIsCi0gICAgICAgICAgICAgICAgICAgInNlY3VyZSIgICAgICA6ICJzZWN1cmUiLAotICAgICAgICAgICAgICAgICAgICJodHRwb25seSIgIDogImh0dHBvbmx5IiwKLSAgICAgICAgICAgICAgICAgICAidmVyc2lvbiIgOiAiVmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgfQorICAgIF9yZXNlcnZlZCA9IHsKKyAgICAgICAgImV4cGlyZXMiICA6ICJleHBpcmVzIiwKKyAgICAgICAgInBhdGgiICAgICA6ICJQYXRoIiwKKyAgICAgICAgImNvbW1lbnQiICA6ICJDb21tZW50IiwKKyAgICAgICAgImRvbWFpbiIgICA6ICJEb21haW4iLAorICAgICAgICAibWF4LWFnZSIgIDogIk1heC1BZ2UiLAorICAgICAgICAic2VjdXJlIiAgIDogInNlY3VyZSIsCisgICAgICAgICJodHRwb25seSIgOiAiaHR0cG9ubHkiLAorICAgICAgICAidmVyc2lvbiIgIDogIlZlcnNpb24iLAorICAgIH0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgIyBTZXQgZGVmYXVsdHMKICAgICAgICAgc2VsZi5rZXkgPSBzZWxmLnZhbHVlID0gc2VsZi5jb2RlZF92YWx1ZSA9IE5vbmUKIAogICAgICAgICAjIFNldCBkZWZhdWx0IGF0dHJpYnV0ZXMKLSAgICAgICAgZm9yIEsgaW4gc2VsZi5fcmVzZXJ2ZWQ6Ci0gICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIEssICIiKQotICAgICMgZW5kIF9faW5pdF9fCisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fcmVzZXJ2ZWQ6CisgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgIiIpCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgSywgVik6CiAgICAgICAgIEsgPSBLLmxvd2VyKCkKICAgICAgICAgaWYgbm90IEsgaW4gc2VsZi5fcmVzZXJ2ZWQ6CiAgICAgICAgICAgICByYWlzZSBDb29raWVFcnJvcigiSW52YWxpZCBBdHRyaWJ1dGUgJXMiICUgSykKICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBLLCBWKQotICAgICMgZW5kIF9fc2V0aXRlbV9fCiAKICAgICBkZWYgaXNSZXNlcnZlZEtleShzZWxmLCBLKToKICAgICAgICAgcmV0dXJuIEsubG93ZXIoKSBpbiBzZWxmLl9yZXNlcnZlZAotICAgICMgZW5kIGlzUmVzZXJ2ZWRLZXkKIAogICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWwsIGNvZGVkX3ZhbCwgTGVnYWxDaGFycz1fTGVnYWxDaGFycyk6CiAgICAgICAgICMgRmlyc3Qgd2UgdmVyaWZ5IHRoYXQgdGhlIGtleSBpc24ndCBhIHJlc2VydmVkIHdvcmQKQEAgLTM3NSwxOSArMzY0LDE4IEBACiAgICAgICAgICAgICByYWlzZSBDb29raWVFcnJvcigiSWxsZWdhbCBrZXkgdmFsdWU6ICVzIiAlIGtleSkKIAogICAgICAgICAjIEl0J3MgYSBnb29kIGtleSwgc28gc2F2ZSBpdC4KLSAgICAgICAgc2VsZi5rZXkgICAgICAgICAgICAgICAgID0ga2V5Ci0gICAgICAgIHNlbGYudmFsdWUgICAgICAgICAgICAgICA9IHZhbAotICAgICAgICBzZWxmLmNvZGVkX3ZhbHVlICAgICAgICAgPSBjb2RlZF92YWwKLSAgICAjIGVuZCBzZXQKKyAgICAgICAgc2VsZi5rZXkgPSBrZXkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbAorICAgICAgICBzZWxmLmNvZGVkX3ZhbHVlID0gY29kZWRfdmFsCiAKLSAgICBkZWYgb3V0cHV0KHNlbGYsIGF0dHJzPU5vbmUsIGhlYWRlciA9ICJTZXQtQ29va2llOiIpOgotICAgICAgICByZXR1cm4gIiVzICVzIiAlICggaGVhZGVyLCBzZWxmLk91dHB1dFN0cmluZyhhdHRycykgKQorICAgIGRlZiBvdXRwdXQoc2VsZiwgYXR0cnM9Tm9uZSwgaGVhZGVyPSJTZXQtQ29va2llOiIpOgorICAgICAgICByZXR1cm4gIiVzICVzIiAlIChoZWFkZXIsIHNlbGYuT3V0cHV0U3RyaW5nKGF0dHJzKSkKIAogICAgIF9fc3RyX18gPSBvdXRwdXQKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICc8JXM6ICVzPSVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYua2V5LCByZXByKHNlbGYudmFsdWUpICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5rZXksIHJlcHIoc2VsZi52YWx1ZSkpCiAKICAgICBkZWYganNfb3V0cHV0KHNlbGYsIGF0dHJzPU5vbmUpOgogICAgICAgICAjIFByaW50IGphdmFzY3JpcHQKQEAgLTM5Nyw0MSArMzg1LDM5IEBACiAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IFwiJXNcIjsKICAgICAgICAgLy8gZW5kIGhpZGluZyAtLT4KICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICIiIiAlICggc2VsZi5PdXRwdXRTdHJpbmcoYXR0cnMpLnJlcGxhY2UoJyInLHInXCInKSkKLSAgICAjIGVuZCBqc19vdXRwdXQoKQorICAgICAgICAiIiIgJSAoc2VsZi5PdXRwdXRTdHJpbmcoYXR0cnMpLnJlcGxhY2UoJyInLCByJ1wiJykpCiAKICAgICBkZWYgT3V0cHV0U3RyaW5nKHNlbGYsIGF0dHJzPU5vbmUpOgogICAgICAgICAjIEJ1aWxkIHVwIG91ciByZXN1bHQKICAgICAgICAgIwogICAgICAgICByZXN1bHQgPSBbXQotICAgICAgICBSQSA9IHJlc3VsdC5hcHBlbmQKKyAgICAgICAgYXBwZW5kID0gcmVzdWx0LmFwcGVuZAogCiAgICAgICAgICMgRmlyc3QsIHRoZSBrZXk9dmFsdWUgcGFpcgotICAgICAgICBSQSgiJXM9JXMiICUgKHNlbGYua2V5LCBzZWxmLmNvZGVkX3ZhbHVlKSkKKyAgICAgICAgYXBwZW5kKCIlcz0lcyIgJSAoc2VsZi5rZXksIHNlbGYuY29kZWRfdmFsdWUpKQogCiAgICAgICAgICMgTm93IGFkZCBhbnkgZGVmaW5lZCBhdHRyaWJ1dGVzCiAgICAgICAgIGlmIGF0dHJzIGlzIE5vbmU6CiAgICAgICAgICAgICBhdHRycyA9IHNlbGYuX3Jlc2VydmVkCiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHNlbGYuaXRlbXMoKSkKLSAgICAgICAgZm9yIEssViBpbiBpdGVtczoKLSAgICAgICAgICAgIGlmIFYgPT0gIiI6IGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBLIG5vdCBpbiBhdHRyczogY29udGludWUKLSAgICAgICAgICAgIGlmIEsgPT0gImV4cGlyZXMiIGFuZCB0eXBlKFYpID09IHR5cGUoMSk6Ci0gICAgICAgICAgICAgICAgUkEoIiVzPSVzIiAlIChzZWxmLl9yZXNlcnZlZFtLXSwgX2dldGRhdGUoVikpKQotICAgICAgICAgICAgZWxpZiBLID09ICJtYXgtYWdlIiBhbmQgdHlwZShWKSA9PSB0eXBlKDEpOgotICAgICAgICAgICAgICAgIFJBKCIlcz0lZCIgJSAoc2VsZi5fcmVzZXJ2ZWRbS10sIFYpKQotICAgICAgICAgICAgZWxpZiBLID09ICJzZWN1cmUiOgotICAgICAgICAgICAgICAgIFJBKHN0cihzZWxmLl9yZXNlcnZlZFtLXSkpCi0gICAgICAgICAgICBlbGlmIEsgPT0gImh0dHBvbmx5IjoKLSAgICAgICAgICAgICAgICBSQShzdHIoc2VsZi5fcmVzZXJ2ZWRbS10pKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgIGlmIHZhbHVlID09ICIiOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGF0dHJzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBrZXkgPT0gImV4cGlyZXMiIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgICAgIGFwcGVuZCgiJXM9JXMiICUgKHNlbGYuX3Jlc2VydmVkW2tleV0sIF9nZXRkYXRlKHZhbHVlKSkpCisgICAgICAgICAgICBlbGlmIGtleSA9PSAibWF4LWFnZSIgYW5kIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICAgICAgYXBwZW5kKCIlcz0lZCIgJSAoc2VsZi5fcmVzZXJ2ZWRba2V5XSwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiBrZXkgPT0gInNlY3VyZSI6CisgICAgICAgICAgICAgICAgYXBwZW5kKHN0cihzZWxmLl9yZXNlcnZlZFtrZXldKSkKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICJodHRwb25seSI6CisgICAgICAgICAgICAgICAgYXBwZW5kKHN0cihzZWxmLl9yZXNlcnZlZFtrZXldKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgUkEoIiVzPSVzIiAlIChzZWxmLl9yZXNlcnZlZFtLXSwgVikpCisgICAgICAgICAgICAgICAgYXBwZW5kKCIlcz0lcyIgJSAoc2VsZi5fcmVzZXJ2ZWRba2V5XSwgdmFsdWUpKQogCiAgICAgICAgICMgUmV0dXJuIHRoZSByZXN1bHQKICAgICAgICAgcmV0dXJuIF9zZW1pc3BhY2Vqb2luKHJlc3VsdCkKLSAgICAjIGVuZCBPdXRwdXRTdHJpbmcKLSMgZW5kIE1vcnNlbCBjbGFzcwotCiAKIAogIwpAQCAtNDYxLDEzICs0NDcsMTEgQEAKICAgICAiIiIsIHJlLkFTQ0lJKSAgICAgICAgICAgICAgICAgIyBNYXkgYmUgcmVtb3ZlZCBpZiBzYWZlLgogCiAKLSMgQXQgbG9uZyBsYXN0LCBoZXJlIGlzIHRoZSBjb29raWUgY2xhc3MuCi0jICAgVXNpbmcgdGhpcyBjbGFzcyBpcyBhbG1vc3QganVzdCBsaWtlIHVzaW5nIGEgZGljdGlvbmFyeS4KLSMgU2VlIHRoaXMgbW9kdWxlJ3MgZG9jc3RyaW5nIGZvciBleGFtcGxlIHVzYWdlLgorIyBBdCBsb25nIGxhc3QsIGhlcmUgaXMgdGhlIGNvb2tpZSBjbGFzcy4gIFVzaW5nIHRoaXMgY2xhc3MgaXMgYWxtb3N0IGp1c3QgbGlrZQorIyB1c2luZyBhIGRpY3Rpb25hcnkuICBTZWUgdGhpcyBtb2R1bGUncyBkb2NzdHJpbmcgZm9yIGV4YW1wbGUgdXNhZ2UuCiAjCiBjbGFzcyBCYXNlQ29va2llKGRpY3QpOgotICAgICMgQSBjb250YWluZXIgY2xhc3MgZm9yIGEgc2V0IG9mIE1vcnNlbHMKLSAgICAjCisgICAgIiIiQSBjb250YWluZXIgY2xhc3MgZm9yIGEgc2V0IG9mIE1vcnNlbHMuIiIiCiAKICAgICBkZWYgdmFsdWVfZGVjb2RlKHNlbGYsIHZhbCk6CiAgICAgICAgICIiInJlYWxfdmFsdWUsIGNvZGVkX3ZhbHVlID0gdmFsdWVfZGVjb2RlKFNUUklORykKQEAgLTQ3Nyw3ICs0NjEsNiBAQAogICAgICAgICBPdmVycmlkZSB0aGlzIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgY29va2llcy4KICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiB2YWwsIHZhbAotICAgICMgZW5kIHZhbHVlX2VuY29kZQogCiAgICAgZGVmIHZhbHVlX2VuY29kZShzZWxmLCB2YWwpOgogICAgICAgICAiIiJyZWFsX3ZhbHVlLCBjb2RlZF92YWx1ZSA9IHZhbHVlX2VuY29kZShWQUxVRSkKQEAgLTQ4Nyw1MSArNDcwLDQ2IEBACiAgICAgICAgICIiIgogICAgICAgICBzdHJ2YWwgPSBzdHIodmFsKQogICAgICAgICByZXR1cm4gc3RydmFsLCBzdHJ2YWwKLSAgICAjIGVuZCB2YWx1ZV9lbmNvZGUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnB1dD1Ob25lKToKLSAgICAgICAgaWYgaW5wdXQ6IHNlbGYubG9hZChpbnB1dCkKLSAgICAjIGVuZCBfX2luaXRfXworICAgICAgICBpZiBpbnB1dDoKKyAgICAgICAgICAgIHNlbGYubG9hZChpbnB1dCkKIAogICAgIGRlZiBfX3NldChzZWxmLCBrZXksIHJlYWxfdmFsdWUsIGNvZGVkX3ZhbHVlKToKICAgICAgICAgIiIiUHJpdmF0ZSBtZXRob2QgZm9yIHNldHRpbmcgYSBjb29raWUncyB2YWx1ZSIiIgogICAgICAgICBNID0gc2VsZi5nZXQoa2V5LCBNb3JzZWwoKSkKICAgICAgICAgTS5zZXQoa2V5LCByZWFsX3ZhbHVlLCBjb2RlZF92YWx1ZSkKICAgICAgICAgZGljdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIE0pCi0gICAgIyBlbmQgX19zZXQKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKICAgICAgICAgIiIiRGljdGlvbmFyeSBzdHlsZSBhc3NpZ25tZW50LiIiIgogICAgICAgICBydmFsLCBjdmFsID0gc2VsZi52YWx1ZV9lbmNvZGUodmFsdWUpCiAgICAgICAgIHNlbGYuX19zZXQoa2V5LCBydmFsLCBjdmFsKQotICAgICMgZW5kIF9fc2V0aXRlbV9fCiAKICAgICBkZWYgb3V0cHV0KHNlbGYsIGF0dHJzPU5vbmUsIGhlYWRlcj0iU2V0LUNvb2tpZToiLCBzZXA9IlwwMTVcMDEyIik6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBzdWl0YWJsZSBmb3IgSFRUUC4iIiIKICAgICAgICAgcmVzdWx0ID0gW10KICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoc2VsZi5pdGVtcygpKQotICAgICAgICBmb3IgSyxWIGluIGl0ZW1zOgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCggVi5vdXRwdXQoYXR0cnMsIGhlYWRlcikgKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBpdGVtczoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodmFsdWUub3V0cHV0KGF0dHJzLCBoZWFkZXIpKQogICAgICAgICByZXR1cm4gc2VwLmpvaW4ocmVzdWx0KQotICAgICMgZW5kIG91dHB1dAogCiAgICAgX19zdHJfXyA9IG91dHB1dAogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICBMID0gW10KKyAgICAgICAgbCA9IFtdCiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHNlbGYuaXRlbXMoKSkKLSAgICAgICAgZm9yIEssViBpbiBpdGVtczoKLSAgICAgICAgICAgIEwuYXBwZW5kKCAnJXM9JXMnICUgKEsscmVwcihWLnZhbHVlKSApICkKLSAgICAgICAgcmV0dXJuICc8JXM6ICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIF9zcGFjZWpvaW4oTCkpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgbC5hcHBlbmQoJyVzPSVzJyAlIChrZXksIHJlcHIodmFsdWUudmFsdWUpKSkKKyAgICAgICAgcmV0dXJuICc8JXM6ICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIF9zcGFjZWpvaW4obCkpCiAKICAgICBkZWYganNfb3V0cHV0KHNlbGYsIGF0dHJzPU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgc3VpdGFibGUgZm9yIEphdmFTY3JpcHQuIiIiCiAgICAgICAgIHJlc3VsdCA9IFtdCiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHNlbGYuaXRlbXMoKSkKLSAgICAgICAgZm9yIEssViBpbiBpdGVtczoKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIFYuanNfb3V0cHV0KGF0dHJzKSApCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGl0ZW1zOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh2YWx1ZS5qc19vdXRwdXQoYXR0cnMpKQogICAgICAgICByZXR1cm4gX251bGxqb2luKHJlc3VsdCkKLSAgICAjIGVuZCBqc19vdXRwdXQKIAogICAgIGRlZiBsb2FkKHNlbGYsIHJhd2RhdGEpOgogICAgICAgICAiIiJMb2FkIGNvb2tpZXMgZnJvbSBhIHN0cmluZyAocHJlc3VtYWJseSBIVFRQX0NPT0tJRSkgb3IKQEAgLTUzOSwxNiArNTE3LDE1IEBACiAgICAgICAgIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZzoKICAgICAgICAgICAgIG1hcChDb29raWUuX19zZXRpdGVtX18sIGQua2V5cygpLCBkLnZhbHVlcygpKQogICAgICAgICAiIiIKLSAgICAgICAgaWYgdHlwZShyYXdkYXRhKSA9PSB0eXBlKCIiKToKLSAgICAgICAgICAgIHNlbGYuX19QYXJzZVN0cmluZyhyYXdkYXRhKQorICAgICAgICBpZiBpc2luc3RhbmNlKHJhd2RhdGEsIHN0cik6CisgICAgICAgICAgICBzZWxmLl9fcGFyc2Vfc3RyaW5nKHJhd2RhdGEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIHNlbGYudXBkYXRlKCkgd291bGRuJ3QgY2FsbCBvdXIgY3VzdG9tIF9fc2V0aXRlbV9fCi0gICAgICAgICAgICBmb3IgaywgdiBpbiByYXdkYXRhLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgc2VsZltrXSA9IHYKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHJhd2RhdGEuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQogICAgICAgICByZXR1cm4KLSAgICAjIGVuZCBsb2FkKCkKIAotICAgIGRlZiBfX1BhcnNlU3RyaW5nKHNlbGYsIHN0ciwgcGF0dD1fQ29va2llUGF0dGVybik6CisgICAgZGVmIF9fcGFyc2Vfc3RyaW5nKHNlbGYsIHN0ciwgcGF0dD1fQ29va2llUGF0dGVybik6CiAgICAgICAgIGkgPSAwICAgICAgICAgICAgIyBPdXIgc3RhcnRpbmcgcG9pbnQKICAgICAgICAgbiA9IGxlbihzdHIpICAgICAjIExlbmd0aCBvZiBzdHJpbmcKICAgICAgICAgTSA9IE5vbmUgICAgICAgICAjIGN1cnJlbnQgbW9yc2VsCkBAIC01NTYsNDggKzUzMywzOSBAQAogICAgICAgICB3aGlsZSAwIDw9IGkgPCBuOgogICAgICAgICAgICAgIyBTdGFydCBsb29raW5nIGZvciBhIGNvb2tpZQogICAgICAgICAgICAgbWF0Y2ggPSBwYXR0LnNlYXJjaChzdHIsIGkpCi0gICAgICAgICAgICBpZiBub3QgbWF0Y2g6IGJyZWFrICAgICAgICAgICMgTm8gbW9yZSBjb29raWVzCisgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICAgICAgIyBObyBtb3JlIGNvb2tpZXMKKyAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBLLFYgPSBtYXRjaC5ncm91cCgia2V5IiksIG1hdGNoLmdyb3VwKCJ2YWwiKQorICAgICAgICAgICAga2V5LCB2YWx1ZSA9IG1hdGNoLmdyb3VwKCJrZXkiKSwgbWF0Y2guZ3JvdXAoInZhbCIpCiAgICAgICAgICAgICBpID0gbWF0Y2guZW5kKDApCiAKICAgICAgICAgICAgICMgUGFyc2UgdGhlIGtleSwgdmFsdWUgaW4gY2FzZSBpdCdzIG1ldGFpbmZvCi0gICAgICAgICAgICBpZiBLWzBdID09ICIkIjoKKyAgICAgICAgICAgIGlmIGtleVswXSA9PSAiJCI6CiAgICAgICAgICAgICAgICAgIyBXZSBpZ25vcmUgYXR0cmlidXRlcyB3aGljaCBwZXJ0YWluIHRvIHRoZSBjb29raWUKICAgICAgICAgICAgICAgICAjIG1lY2hhbmlzbSBhcyBhIHdob2xlLiAgU2VlIFJGQyAyMTA5LgogICAgICAgICAgICAgICAgICMgKERvZXMgYW55b25lIGNhcmU/KQogICAgICAgICAgICAgICAgIGlmIE06Ci0gICAgICAgICAgICAgICAgICAgIE1bIEtbMTpdIF0gPSBWCi0gICAgICAgICAgICBlbGlmIEsubG93ZXIoKSBpbiBNb3JzZWwuX3Jlc2VydmVkOgorICAgICAgICAgICAgICAgICAgICBNW2tleVsxOl1dID0gdmFsdWUKKyAgICAgICAgICAgIGVsaWYga2V5Lmxvd2VyKCkgaW4gTW9yc2VsLl9yZXNlcnZlZDoKICAgICAgICAgICAgICAgICBpZiBNOgotICAgICAgICAgICAgICAgICAgICBNWyBLIF0gPSBfdW5xdW90ZShWKQorICAgICAgICAgICAgICAgICAgICBNW2tleV0gPSBfdW5xdW90ZSh2YWx1ZSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcnZhbCwgY3ZhbCA9IHNlbGYudmFsdWVfZGVjb2RlKFYpCi0gICAgICAgICAgICAgICAgc2VsZi5fX3NldChLLCBydmFsLCBjdmFsKQotICAgICAgICAgICAgICAgIE0gPSBzZWxmW0tdCi0gICAgIyBlbmQgX19QYXJzZVN0cmluZwotIyBlbmQgQmFzZUNvb2tpZSBjbGFzcworICAgICAgICAgICAgICAgIHJ2YWwsIGN2YWwgPSBzZWxmLnZhbHVlX2RlY29kZSh2YWx1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9fc2V0KGtleSwgcnZhbCwgY3ZhbCkKKyAgICAgICAgICAgICAgICBNID0gc2VsZltrZXldCisKIAogY2xhc3MgU2ltcGxlQ29va2llKEJhc2VDb29raWUpOgotICAgICIiIlNpbXBsZUNvb2tpZQorICAgICIiIgogICAgIFNpbXBsZUNvb2tpZSBzdXBwb3J0cyBzdHJpbmdzIGFzIGNvb2tpZSB2YWx1ZXMuICBXaGVuIHNldHRpbmcKICAgICB0aGUgdmFsdWUgdXNpbmcgdGhlIGRpY3Rpb25hcnkgYXNzaWdubWVudCBub3RhdGlvbiwgU2ltcGxlQ29va2llCiAgICAgY2FsbHMgdGhlIGJ1aWx0aW4gc3RyKCkgdG8gY29udmVydCB0aGUgdmFsdWUgdG8gYSBzdHJpbmcuICBWYWx1ZXMKICAgICByZWNlaXZlZCBmcm9tIEhUVFAgYXJlIGtlcHQgYXMgc3RyaW5ncy4KICAgICAiIiIKICAgICBkZWYgdmFsdWVfZGVjb2RlKHNlbGYsIHZhbCk6Ci0gICAgICAgIHJldHVybiBfdW5xdW90ZSggdmFsICksIHZhbAorICAgICAgICByZXR1cm4gX3VucXVvdGUodmFsKSwgdmFsCisKICAgICBkZWYgdmFsdWVfZW5jb2RlKHNlbGYsIHZhbCk6CiAgICAgICAgIHN0cnZhbCA9IHN0cih2YWwpCi0gICAgICAgIHJldHVybiBzdHJ2YWwsIF9xdW90ZSggc3RydmFsICkKLSMgZW5kIFNpbXBsZUNvb2tpZQotCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1kZWYgX3Rlc3QoKToKLSAgICBpbXBvcnQgZG9jdGVzdCwgaHR0cC5jb29raWVzCi0gICAgcmV0dXJuIGRvY3Rlc3QudGVzdG1vZChodHRwLmNvb2tpZXMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgX3Rlc3QoKQorICAgICAgICByZXR1cm4gc3RydmFsLCBfcXVvdGUoc3RydmFsKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvc2VydmVyLnB5IGIvTGliL2h0dHAvc2VydmVyLnB5CmluZGV4IGZjY2RjNGMuLjg2ZmEzN2YgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL3NlcnZlci5weQorKysgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKQEAgLTg0LDcgKzg0LDcgQEAKIAogX19hbGxfXyA9IFsiSFRUUFNlcnZlciIsICJCYXNlSFRUUFJlcXVlc3RIYW5kbGVyIl0KIAotaW1wb3J0IGNnaQoraW1wb3J0IGh0bWwKIGltcG9ydCBlbWFpbC5tZXNzYWdlCiBpbXBvcnQgZW1haWwucGFyc2VyCiBpbXBvcnQgaHR0cC5jbGllbnQKQEAgLTMzMSw2ICszMzEsMzAgQEAKICAgICAgICAgZWxpZiAoY29ubnR5cGUubG93ZXIoKSA9PSAna2VlcC1hbGl2ZScgYW5kCiAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2xfdmVyc2lvbiA+PSAiSFRUUC8xLjEiKToKICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDAKKyAgICAgICAgIyBFeGFtaW5lIHRoZSBoZWFkZXJzIGFuZCBsb29rIGZvciBhbiBFeHBlY3QgZGlyZWN0aXZlCisgICAgICAgIGV4cGVjdCA9IHNlbGYuaGVhZGVycy5nZXQoJ0V4cGVjdCcsICIiKQorICAgICAgICBpZiAoZXhwZWN0Lmxvd2VyKCkgPT0gIjEwMC1jb250aW51ZSIgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbF92ZXJzaW9uID49ICJIVFRQLzEuMSIgYW5kCisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0X3ZlcnNpb24gPj0gIkhUVFAvMS4xIik6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYW5kbGVfZXhwZWN0XzEwMCgpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGhhbmRsZV9leHBlY3RfMTAwKHNlbGYpOgorICAgICAgICAiIiJEZWNpZGUgd2hhdCB0byBkbyB3aXRoIGFuICJFeHBlY3Q6IDEwMC1jb250aW51ZSIgaGVhZGVyLgorCisgICAgICAgIElmIHRoZSBjbGllbnQgaXMgZXhwZWN0aW5nIGEgMTAwIENvbnRpbnVlIHJlc3BvbnNlLCB3ZSBtdXN0CisgICAgICAgIHJlc3BvbmQgd2l0aCBlaXRoZXIgYSAxMDAgQ29udGludWUgb3IgYSBmaW5hbCByZXNwb25zZSBiZWZvcmUKKyAgICAgICAgd2FpdGluZyBmb3IgdGhlIHJlcXVlc3QgYm9keS4gVGhlIGRlZmF1bHQgaXMgdG8gYWx3YXlzIHJlc3BvbmQKKyAgICAgICAgd2l0aCBhIDEwMCBDb250aW51ZS4gWW91IGNhbiBiZWhhdmUgZGlmZmVyZW50bHkgKGZvciBleGFtcGxlLAorICAgICAgICByZWplY3QgdW5hdXRob3JpemVkIHJlcXVlc3RzKSBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCBlaXRoZXIgcmV0dXJuIFRydWUgKHBvc3NpYmx5IGFmdGVyIHNlbmRpbmcKKyAgICAgICAgYSAxMDAgQ29udGludWUgcmVzcG9uc2UpIG9yIHNlbmQgYW4gZXJyb3IgcmVzcG9uc2UgYW5kIHJldHVybgorICAgICAgICBGYWxzZS4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlX29ubHkoMTAwKQogICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIGhhbmRsZV9vbmVfcmVxdWVzdChzZWxmKToKQEAgLTM0MSwyNCArMzY1LDMyIEBACiAgICAgICAgIGNvbW1hbmRzIHN1Y2ggYXMgR0VUIGFuZCBQT1NULgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLnJhd19yZXF1ZXN0bGluZSA9IHNlbGYucmZpbGUucmVhZGxpbmUoNjU1MzcpCi0gICAgICAgIGlmIGxlbihzZWxmLnJhd19yZXF1ZXN0bGluZSkgPiA2NTUzNjoKLSAgICAgICAgICAgIHNlbGYucmVxdWVzdGxpbmUgPSAnJwotICAgICAgICAgICAgc2VsZi5yZXF1ZXN0X3ZlcnNpb24gPSAnJwotICAgICAgICAgICAgc2VsZi5jb21tYW5kID0gJycKLSAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MTQpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IHNlbGYucmF3X3JlcXVlc3RsaW5lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJhd19yZXF1ZXN0bGluZSA9IHNlbGYucmZpbGUucmVhZGxpbmUoNjU1MzcpCisgICAgICAgICAgICBpZiBsZW4oc2VsZi5yYXdfcmVxdWVzdGxpbmUpID4gNjU1MzY6CisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0X3ZlcnNpb24gPSAnJworICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZCA9ICcnCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQxNCkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJhd19yZXF1ZXN0bGluZToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXJzZV9yZXF1ZXN0KCk6CisgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdAorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgbW5hbWUgPSAnZG9fJyArIHNlbGYuY29tbWFuZAorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgbW5hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig1MDEsICJVbnN1cHBvcnRlZCBtZXRob2QgKCVyKSIgJSBzZWxmLmNvbW1hbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1uYW1lKQorICAgICAgICAgICAgbWV0aG9kKCkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKSAjYWN0dWFsbHkgc2VuZCB0aGUgcmVzcG9uc2UgaWYgbm90IGFscmVhZHkgZG9uZS4KKyAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0IGFzIGU6CisgICAgICAgICAgICAjYSByZWFkIG9yIGEgd3JpdGUgdGltZWQgb3V0LiAgRGlzY2FyZCB0aGlzIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJSZXF1ZXN0IHRpbWVkIG91dDogJXIiLCBlKQogICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBzZWxmLnBhcnNlX3JlcXVlc3QoKTogIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdAotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG1uYW1lID0gJ2RvXycgKyBzZWxmLmNvbW1hbmQKLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgbW5hbWUpOgotICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDUwMSwgIlVuc3VwcG9ydGVkIG1ldGhvZCAoJXIpIiAlIHNlbGYuY29tbWFuZCkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1uYW1lKQotICAgICAgICBtZXRob2QoKQogCiAgICAgZGVmIGhhbmRsZShzZWxmKToKICAgICAgICAgIiIiSGFuZGxlIG11bHRpcGxlIHJlcXVlc3RzIGlmIG5lY2Vzc2FyeS4iIiIKQEAgLTQwNyw2ICs0MzksMTIgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5sb2dfcmVxdWVzdChjb2RlKQorICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2Vfb25seShjb2RlLCBtZXNzYWdlKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdTZXJ2ZXInLCBzZWxmLnZlcnNpb25fc3RyaW5nKCkpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0RhdGUnLCBzZWxmLmRhdGVfdGltZV9zdHJpbmcoKSkKKworICAgIGRlZiBzZW5kX3Jlc3BvbnNlX29ubHkoc2VsZiwgY29kZSwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgIiIiU2VuZCB0aGUgcmVzcG9uc2UgaGVhZGVyIG9ubHkuIiIiCiAgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgIGlmIGNvZGUgaW4gc2VsZi5yZXNwb25zZXM6CiAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYucmVzcG9uc2VzW2NvZGVdWzBdCkBAIC00MTQsMTUgKzQ1MiwxNSBAQAogICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnJwogICAgICAgICBpZiBzZWxmLnJlcXVlc3RfdmVyc2lvbiAhPSAnSFRUUC8wLjknOgogICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgoIiVzICVkICVzXHJcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYucHJvdG9jb2xfdmVyc2lvbiwgY29kZSwgbWVzc2FnZSkpLmVuY29kZSgnQVNDSUknLCAnc3RyaWN0JykpCi0gICAgICAgICAgICAjIHByaW50IChzZWxmLnByb3RvY29sX3ZlcnNpb24sIGNvZGUsIG1lc3NhZ2UpCi0gICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ1NlcnZlcicsIHNlbGYudmVyc2lvbl9zdHJpbmcoKSkKLSAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignRGF0ZScsIHNlbGYuZGF0ZV90aW1lX3N0cmluZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYucHJvdG9jb2xfdmVyc2lvbiwgY29kZSwgbWVzc2FnZSkpLmVuY29kZSgnbGF0aW4xJywgJ3N0cmljdCcpKQogCiAgICAgZGVmIHNlbmRfaGVhZGVyKHNlbGYsIGtleXdvcmQsIHZhbHVlKToKICAgICAgICAgIiIiU2VuZCBhIE1JTUUgaGVhZGVyLiIiIgogICAgICAgICBpZiBzZWxmLnJlcXVlc3RfdmVyc2lvbiAhPSAnSFRUUC8wLjknOgotICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZSgoIiVzOiAlc1xyXG4iICUgKGtleXdvcmQsIHZhbHVlKSkuZW5jb2RlKCdBU0NJSScsICdzdHJpY3QnKSkKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdfaGVhZGVyc19idWZmZXInKToKKyAgICAgICAgICAgICAgICBzZWxmLl9oZWFkZXJzX2J1ZmZlciA9IFtdCisgICAgICAgICAgICBzZWxmLl9oZWFkZXJzX2J1ZmZlci5hcHBlbmQoCisgICAgICAgICAgICAgICAgKCIlczogJXNcclxuIiAlIChrZXl3b3JkLCB2YWx1ZSkpLmVuY29kZSgnbGF0aW4xJywgJ3N0cmljdCcpKQogCiAgICAgICAgIGlmIGtleXdvcmQubG93ZXIoKSA9PSAnY29ubmVjdGlvbic6CiAgICAgICAgICAgICBpZiB2YWx1ZS5sb3dlcigpID09ICdjbG9zZSc6CkBAIC00MzMsNyArNDcxLDkgQEAKICAgICBkZWYgZW5kX2hlYWRlcnMoc2VsZik6CiAgICAgICAgICIiIlNlbmQgdGhlIGJsYW5rIGxpbmUgZW5kaW5nIHRoZSBNSU1FIGhlYWRlcnMuIiIiCiAgICAgICAgIGlmIHNlbGYucmVxdWVzdF92ZXJzaW9uICE9ICdIVFRQLzAuOSc6Ci0gICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKGIiXHJcbiIpCisgICAgICAgICAgICBzZWxmLl9oZWFkZXJzX2J1ZmZlci5hcHBlbmQoYiJcclxuIikKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYiIiLmpvaW4oc2VsZi5faGVhZGVyc19idWZmZXIpKQorICAgICAgICAgICAgc2VsZi5faGVhZGVyc19idWZmZXIgPSBbXQogCiAgICAgZGVmIGxvZ19yZXF1ZXN0KHNlbGYsIGNvZGU9Jy0nLCBzaXplPSctJyk6CiAgICAgICAgICIiIkxvZyBhbiBhY2NlcHRlZCByZXF1ZXN0LgpAQCAtNjg0LDcgKzcyNCw3IEBACiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBsaXN0LnNvcnQoa2V5PWxhbWJkYSBhOiBhLmxvd2VyKCkpCiAgICAgICAgIHIgPSBbXQotICAgICAgICBkaXNwbGF5cGF0aCA9IGNnaS5lc2NhcGUodXJsbGliLnBhcnNlLnVucXVvdGUoc2VsZi5wYXRoKSkKKyAgICAgICAgZGlzcGxheXBhdGggPSBodG1sLmVzY2FwZSh1cmxsaWIucGFyc2UudW5xdW90ZShzZWxmLnBhdGgpKQogICAgICAgICByLmFwcGVuZCgnPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMiBGaW5hbC8vRU4iPicpCiAgICAgICAgIHIuYXBwZW5kKCI8aHRtbD5cbjx0aXRsZT5EaXJlY3RvcnkgbGlzdGluZyBmb3IgJXM8L3RpdGxlPlxuIiAlIGRpc3BsYXlwYXRoKQogICAgICAgICByLmFwcGVuZCgiPGJvZHk+XG48aDI+RGlyZWN0b3J5IGxpc3RpbmcgZm9yICVzPC9oMj5cbiIgJSBkaXNwbGF5cGF0aCkKQEAgLTcwMCw3ICs3NDAsNyBAQAogICAgICAgICAgICAgICAgIGRpc3BsYXluYW1lID0gbmFtZSArICJAIgogICAgICAgICAgICAgICAgICMgTm90ZTogYSBsaW5rIHRvIGEgZGlyZWN0b3J5IGRpc3BsYXlzIHdpdGggQCBhbmQgbGlua3Mgd2l0aCAvCiAgICAgICAgICAgICByLmFwcGVuZCgnPGxpPjxhIGhyZWY9IiVzIj4lczwvYT5cbicKLSAgICAgICAgICAgICAgICAgICAgJSAodXJsbGliLnBhcnNlLnF1b3RlKGxpbmtuYW1lKSwgY2dpLmVzY2FwZShkaXNwbGF5bmFtZSkpKQorICAgICAgICAgICAgICAgICAgICAlICh1cmxsaWIucGFyc2UucXVvdGUobGlua25hbWUpLCBodG1sLmVzY2FwZShkaXNwbGF5bmFtZSkpKQogICAgICAgICByLmFwcGVuZCgiPC91bD5cbjxocj5cbjwvYm9keT5cbjwvaHRtbD5cbiIpCiAgICAgICAgIGVuYyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQogICAgICAgICBlbmNvZGVkID0gJycuam9pbihyKS5lbmNvZGUoZW5jKQpAQCAtODQyLDcgKzg4Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBub2JvZHkgPSAxICsgbWF4KG1hcChsYW1iZGEgeDogeFsyXSwgcHdkLmdldHB3YWxsKCkpKQorICAgICAgICBub2JvZHkgPSAxICsgbWF4KHhbMl0gZm9yIHggaW4gcHdkLmdldHB3YWxsKCkpCiAgICAgcmV0dXJuIG5vYm9keQogCiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0JpbmRpbmdzLnB5IGIvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKaW5kZXggNzRhOTNkMy4uZWMyNzIwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKKysrIGIvTGliL2lkbGVsaWIvQmluZGluZ3MucHkKQEAgLTk4LDE0ICs5OCw2IEBACiAgICAgIyBtZW51CiAgICAgZGVsIG1lbnVkZWZzWy0xXVsxXVswOjJdCiAKLSAgICBtZW51ZGVmcy5pbnNlcnQoMCwKLSAgICAgICAgICAgICgnYXBwbGljYXRpb24nLCBbCi0gICAgICAgICAgICAgICAgKCdBYm91dCBJRExFJywgJzw8YWJvdXQtaWRsZT4+JyksCi0gICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgICAgICAoJ19QcmVmZXJlbmNlcy4uLi4nLCAnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicpLAotICAgICAgICAgICAgXSkpCi0KLQogZGVmYXVsdF9rZXlkZWZzID0gaWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpCiAKIGRlbCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weSBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQppbmRleCA5OGVjMDJiLi5kNzdmMGE0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKKysrIGIvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CkBAIC0zLDcgKzMsNiBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgaW1wCi1mcm9tIGl0ZXJ0b29scyBpbXBvcnQgY291bnQKIGZyb20gdGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IHRraW50ZXIuc2ltcGxlZGlhbG9nIGFzIHRrU2ltcGxlRGlhbG9nCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveApAQCAtNTEsNiArNTAsMTcgQEAKICAgICAgICAgICAgIHBhdGggPSBtb2R1bGUuX19wYXRoX18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vIHNvdXJjZSBmb3IgbW9kdWxlICcgKyBtb2R1bGUuX19uYW1lX18pCisgICAgaWYgZGVzY3JbMl0gIT0gaW1wLlBZX1NPVVJDRToKKyAgICAgICAgIyBJZiBhbGwgb2YgdGhlIGFib3ZlIGZhaWxzIGFuZCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uLGZhbGxiYWNrCisgICAgICAgICMgdG8gYSBzdHJhaWdodCBpbXBvcnQgd2hpY2ggY2FuIGZpbmQgX19pbml0X18ucHkgaW4gYSBwYWNrYWdlLgorICAgICAgICBtID0gX19pbXBvcnRfXyhmdWxsbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZW5hbWUgPSBtLl9fZmlsZV9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGUgPSBOb25lCisgICAgICAgICAgICBkZXNjciA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdLCBOb25lLCBpbXAuUFlfU09VUkNFCiAgICAgcmV0dXJuIGZpbGUsIGZpbGVuYW1lLCBkZXNjcgogCiBjbGFzcyBFZGl0b3JXaW5kb3cob2JqZWN0KToKQEAgLTM4NSw3ICszOTUsNyBAQAogICAgICAgICAgICAgdW5kZXJsaW5lLCBsYWJlbCA9IHByZXBzdHIobGFiZWwpCiAgICAgICAgICAgICBtZW51ZGljdFtuYW1lXSA9IG1lbnUgPSBNZW51KG1iYXIsIG5hbWU9bmFtZSkKICAgICAgICAgICAgIG1iYXIuYWRkX2Nhc2NhZGUobGFiZWw9bGFiZWwsIG1lbnU9bWVudSwgdW5kZXJsaW5lPXVuZGVybGluZSkKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NhcmJvbkFxdWFUayhzZWxmLnJvb3QpOgogICAgICAgICAgICAgIyBJbnNlcnQgdGhlIGFwcGxpY2F0aW9uIG1lbnUKICAgICAgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT0nYXBwbGUnKQogICAgICAgICAgICAgbWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKQEAgLTc5OSw4ICs4MDksOCBAQAogICAgICAgICBmb3IgaW5zdGFuY2UgaW4gc2VsZi50b3AuaW5zdGFuY2VfZGljdDoKICAgICAgICAgICAgIG1lbnUgPSBpbnN0YW5jZS5yZWNlbnRfZmlsZXNfbWVudQogICAgICAgICAgICAgbWVudS5kZWxldGUoMSwgRU5EKSAgIyBjbGVhciwgYW5kIHJlYnVpbGQ6Ci0gICAgICAgICAgICBmb3IgaSwgZmlsZSBpbiB6aXAoY291bnQoKSwgcmZfbGlzdCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gZmlsZVswOi0xXSAgIyB6YXAgXG4KKyAgICAgICAgICAgIGZvciBpLCBmaWxlX25hbWUgaW4gZW51bWVyYXRlKHJmX2xpc3QpOgorICAgICAgICAgICAgICAgIGZpbGVfbmFtZSA9IGZpbGVfbmFtZS5yc3RyaXAoKSAgIyB6YXAgXG4KICAgICAgICAgICAgICAgICAjIG1ha2UgdW5pY29kZSBzdHJpbmcgdG8gZGlzcGxheSBub24tQVNDSUkgY2hhcnMgY29ycmVjdGx5CiAgICAgICAgICAgICAgICAgdWZpbGVfbmFtZSA9IHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoZmlsZV9uYW1lKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gaW5zdGFuY2UuX19yZWNlbnRfZmlsZV9jYWxsYmFjayhmaWxlX25hbWUpCkBAIC0xNTQ0LDcgKzE1NTQsMTIgQEAKIAogZGVmIGdldF9hY2NlbGVyYXRvcihrZXlkZWZzLCBldmVudG5hbWUpOgogICAgIGtleWxpc3QgPSBrZXlkZWZzLmdldChldmVudG5hbWUpCi0gICAgaWYgbm90IGtleWxpc3Q6CisgICAgIyBpc3N1ZTEwOTQwOiB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBwcmV2ZW50IGhhbmcgd2l0aCBPUyBYIENvY29hIFRrIDguNQorICAgICMgaWYgbm90IGtleWxpc3Q6CisgICAgaWYgKG5vdCBrZXlsaXN0KSBvciAobWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKSBhbmQgZXZlbnRuYW1lIGluIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDxvcGVuLW1vZHVsZT4+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDxnb3RvLWxpbmU+PiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8Y2hhbmdlLWluZGVudHdpZHRoPj4ifSk6CiAgICAgICAgIHJldHVybiAiIgogICAgIHMgPSBrZXlsaXN0WzBdCiAgICAgcyA9IHJlLnN1YihyIi1bYS16XVxiIiwgbGFtYmRhIG06IG0uZ3JvdXAoKS51cHBlcigpLCBzKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvTkVXUy50eHQgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dAppbmRleCA2YTAzMWUxLi5kZWViNGE2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ORVdTLnR4dAorKysgYi9MaWIvaWRsZWxpYi9ORVdTLnR4dApAQCAtMTIsNyArMTIsNyBAQAogV2hhdCdzIE5ldyBpbiBJRExFIDMuMWIxPwogPT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiBYWC1YWFgtMDkqCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMDkqCiAKIC0gVXNlIG9mICdmaWx0ZXInIGluIGtleWJpbmRpbmdEaWFsb2cucHkgd2FzIGNhdXNpbmcgY3VzdG9tIGtleSBhc3NpZ25tZW50IHRvCiAgIGZhaWwuICBQYXRjaCA1NzA3IGFtYXVyeS5mb3JnZW90ZGFyYy4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkgYi9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CmluZGV4IDBmYTNkNzYuLjA2YzhiYmEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKKysrIGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKQEAgLTU1LDIwICs1NSwyMSBAQAogZWxzZToKICAgICBkZWYgaWRsZV9zaG93d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPU5vbmUsIGxpbmU9Tm9uZSk6Ci0gICAgICAgIGZpbGUgPSB3YXJuaW5nX3N0cmVhbQorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICBmaWxlID0gd2FybmluZ19zdHJlYW0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZS53cml0ZSh3YXJuaW5ncy5mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSxcCisgICAgICAgICAgICBmaWxlLndyaXRlKHdhcm5pbmdzLmZvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywgZmlsZT1maWxlLCBsaW5lPWxpbmUpKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIHBhc3MgICMjIGZpbGUgKHByb2JhYmx5IF9fc3RkZXJyX18pIGlzIGludmFsaWQsIHdhcm5pbmcgZHJvcHBlZC4KICAgICB3YXJuaW5ncy5zaG93d2FybmluZyA9IGlkbGVfc2hvd3dhcm5pbmcKLSAgICBkZWYgaWRsZV9mb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgIGRlZiBpZGxlX2Zvcm1hdHdhcm5pbmcobWVzc2FnZSwgY2F0ZWdvcnksIGZpbGVuYW1lLCBsaW5lbm8sIGxpbmU9Tm9uZSk6CiAgICAgICAgICIiIkZvcm1hdCB3YXJuaW5ncyB0aGUgSURMRSB3YXkiIiIKICAgICAgICAgcyA9ICJcbldhcm5pbmcgKGZyb20gd2FybmluZ3MgbW9kdWxlKTpcbiIKICAgICAgICAgcyArPSAnICBGaWxlIFwiJXNcIiwgbGluZSAlc1xuJyAlIChmaWxlbmFtZSwgbGluZW5vKQotICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykuc3RyaXAoKSBcCi0gICAgICAgICAgICBpZiBsaW5lIGlzIE5vbmUgZWxzZSBsaW5lCisgICAgICAgIGlmIGxpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCiAgICAgICAgIGlmIGxpbmU6CiAgICAgICAgICAgICBzICs9ICIgICAgJXNcbiIgJSBsaW5lCiAgICAgICAgIHMgKz0gIiVzOiAlc1xuPj4+ICIgJSAoY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCkBAIC04MSwxOCArODIsMTcgQEAKIAogICAgIFJhdGhlciB0aGFuIHJlcGVhdGluZyB0aGUgbGluZWNhY2hlIGNvZGUsIHBhdGNoIGl0IHRvIHNhdmUgdGhlCiAgICAgPHB5c2hlbGwjLi4uPiBlbnRyaWVzLCBjYWxsIHRoZSBvcmlnaW5hbCBsaW5lY2FjaGUuY2hlY2tjYWNoZSgpCi0gICAgKHdoaWNoIGRlc3Ryb3lzIHRoZW0pLCBhbmQgdGhlbiByZXN0b3JlIHRoZSBzYXZlZCBlbnRyaWVzLgorICAgIChza2lwcGluZyB0aGVtKSwgYW5kIHRoZW4gcmVzdG9yZSB0aGUgc2F2ZWQgZW50cmllcy4KIAogICAgIG9yaWdfY2hlY2tjYWNoZSBpcyBib3VuZCBhdCBkZWZpbml0aW9uIHRpbWUgdG8gdGhlIG9yaWdpbmFsCiAgICAgbWV0aG9kLCBhbGxvd2luZyBpdCB0byBiZSBwYXRjaGVkLgotCiAgICAgIiIiCiAgICAgY2FjaGUgPSBsaW5lY2FjaGUuY2FjaGUKICAgICBzYXZlID0ge30KLSAgICBmb3IgZmlsZW5hbWUgaW4gY2FjaGU6Ci0gICAgICAgIGlmIGZpbGVuYW1lWzoxXSArIGZpbGVuYW1lWy0xOl0gPT0gJzw+JzoKLSAgICAgICAgICAgIHNhdmVbZmlsZW5hbWVdID0gY2FjaGVbZmlsZW5hbWVdCi0gICAgb3JpZ19jaGVja2NhY2hlKCkKKyAgICBmb3Iga2V5IGluIGxpc3QoY2FjaGUpOgorICAgICAgICBpZiBrZXlbOjFdICsga2V5Wy0xOl0gPT0gJzw+JzoKKyAgICAgICAgICAgIHNhdmVba2V5XSA9IGNhY2hlLnBvcChrZXkpCisgICAgb3JpZ19jaGVja2NhY2hlKGZpbGVuYW1lKQogICAgIGNhY2hlLnVwZGF0ZShzYXZlKQogCiAjIFBhdGNoIGxpbmVjYWNoZS5jaGVja2NhY2hlKCk6CkBAIC0xNDE3LDYgKzE0MTcsMTMgQEAKICAgICAgICAgICAgIHNoZWxsLmludGVycC5wcmVwZW5kX3N5c3BhdGgoc2NyaXB0KQogICAgICAgICAgICAgc2hlbGwuaW50ZXJwLmV4ZWNmaWxlKHNjcmlwdCkKIAorICAgICMgQ2hlY2sgZm9yIHByb2JsZW1hdGljIE9TIFggVGsgdmVyc2lvbnMgYW5kIHByaW50IGEgd2FybmluZyBtZXNzYWdlCisgICAgIyBpbiB0aGUgSURMRSBzaGVsbCB3aW5kb3c7IHRoaXMgaXMgbGVzcyBpbnRydXNpdmUgdGhhbiBhbHdheXMgb3BlbmluZworICAgICMgYSBzZXBhcmF0ZSB3aW5kb3cuCisgICAgdGt2ZXJzaW9ud2FybmluZyA9IG1hY29zeFN1cHBvcnQudGtWZXJzaW9uV2FybmluZyhyb290KQorICAgIGlmIHRrdmVyc2lvbndhcm5pbmc6CisgICAgICAgIHNoZWxsLmludGVycC5ydW5jb21tYW5kKCcnLmpvaW4oKCJwcmludCgnIiwgdGt2ZXJzaW9ud2FybmluZywgIicpIikpKQorCiAgICAgcm9vdC5tYWlubG9vcCgpCiAgICAgcm9vdC5kZXN0cm95KCkKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZXZlci5weSBiL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKaW5kZXggOGVlNjFhMi4uNWIwOTA3ZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZXZlci5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CkBAIC0xICsxIEBACi1JRExFX1ZFUlNJT04gPSAiMy4xLjMiCitJRExFX1ZFUlNJT04gPSAiMy4yIgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weSBiL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKaW5kZXggZGE1MTlmNy4uZjkzZWYxMSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQorKysgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CkBAIC00LDYgKzQsMTAgQEAKICIiIgogaW1wb3J0IHN5cwogaW1wb3J0IHRraW50ZXIKK2Zyb20gb3MgaW1wb3J0IHBhdGgKKworCitfYXBwYnVuZGxlID0gTm9uZQogCiBkZWYgcnVubmluZ0FzT1NYQXBwKCk6CiAgICAgIiIiCkBAIC0xMSw3ICsxNSw0MSBAQAogICAgIElmIHNvLCBhc3N1bWUgdGhhdCBQeXRob24gd2FzIGJ1aWx0IHdpdGggQXF1YSBUY2wvVGsgcmF0aGVyIHRoYW4KICAgICBYMTEgVGNsL1RrLgogICAgICIiIgotICAgIHJldHVybiAoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAnLmFwcCcgaW4gc3lzLmV4ZWN1dGFibGUpCisgICAgZ2xvYmFsIF9hcHBidW5kbGUKKyAgICBpZiBfYXBwYnVuZGxlIGlzIE5vbmU6CisgICAgICAgIF9hcHBidW5kbGUgPSAoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAnLmFwcCcgaW4gc3lzLmV4ZWN1dGFibGUpCisgICAgcmV0dXJuIF9hcHBidW5kbGUKKworX2NhcmJvbmFxdWF0ayA9IE5vbmUKKworZGVmIGlzQ2FyYm9uQXF1YVRrKHJvb3QpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBJRExFIGlzIHVzaW5nIGEgQ2FyYm9uIEFxdWEgVGsgKGluc3RlYWQgb2YgdGhlCisgICAgbmV3ZXIgQ29jb2EgQXF1YSBUaykuCisgICAgIiIiCisgICAgZ2xvYmFsIF9jYXJib25hcXVhdGsKKyAgICBpZiBfY2FyYm9uYXF1YXRrIGlzIE5vbmU6CisgICAgICAgIF9jYXJib25hcXVhdGsgPSAocnVubmluZ0FzT1NYQXBwKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FxdWEnIGluIHJvb3QudGsuY2FsbCgndGsnLCAnd2luZG93aW5nc3lzdGVtJykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FwcEtpdCcgbm90IGluIHJvb3QudGsuY2FsbCgnd2luZm8nLCAnc2VydmVyJywgJy4nKSkKKyAgICByZXR1cm4gX2NhcmJvbmFxdWF0aworCitkZWYgdGtWZXJzaW9uV2FybmluZyhyb290KToKKyAgICAiIiIKKyAgICBSZXR1cm5zIGEgc3RyaW5nIHdhcm5pbmcgbWVzc2FnZSBpZiB0aGUgVGsgdmVyc2lvbiBpbiB1c2UgYXBwZWFycyB0bworICAgIGJlIG9uZSBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIElETEUuICBUaGUgQXBwbGUgQ29jb2EtYmFzZWQgVGsgOC41CisgICAgdGhhdCB3YXMgc2hpcHBlZCB3aXRoIE1hYyBPUyBYIDEwLjYuCisgICAgIiIiCisKKyAgICBpZiAocnVubmluZ0FzT1NYQXBwKCkgYW5kCisgICAgICAgICAgICAoJ0FwcEtpdCcgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKSBhbmQKKyAgICAgICAgICAgIChyb290LnRrLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpID09ICc4LjUuNycpICk6CisgICAgICAgIHJldHVybiAociJXQVJOSU5HOiBUaGUgdmVyc2lvbiBvZiBUY2wvVGsgKDguNS43KSBpbiB1c2UgbWF5IgorICAgICAgICAgICAgICAgIHIiIGJlIHVuc3RhYmxlLlxuIgorICAgICAgICAgICAgICAgIHIiVmlzaXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8iCisgICAgICAgICAgICAgICAgciIgZm9yIGN1cnJlbnQgaW5mb3JtYXRpb24uIikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKIAogZGVmIGFkZE9wZW5FdmVudFN1cHBvcnQocm9vdCwgZmxpc3QpOgogICAgICIiIgpAQCAtNzMsOSArMTExLDYgQEAKICAgICAgICAgV2luZG93TGlzdC5hZGRfd2luZG93c190b19tZW51KG1lbnUpCiAgICAgV2luZG93TGlzdC5yZWdpc3Rlcl9jYWxsYmFjayhwb3N0d2luZG93c21lbnUpCiAKLSAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1lbnViYXIsIG5hbWU9J2FwcGxlJykKLSAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQotCiAgICAgZGVmIGFib3V0X2RpYWxvZyhldmVudD1Ob25lKToKICAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBhYm91dERpYWxvZwogICAgICAgICBhYm91dERpYWxvZy5BYm91dERpYWxvZyhyb290LCAnQWJvdXQgSURMRScpCkBAIC05MSw5ICsxMjYsMTQgQEAKICAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKICAgICAgICAgY29uZmlnRGlhbG9nLkNvbmZpZ0RpYWxvZyhyb290LCAnU2V0dGluZ3MnKQogCisgICAgZGVmIGhlbHBfZGlhbG9nKGV2ZW50PU5vbmUpOgorICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3CisgICAgICAgIGZuID0gcGF0aC5qb2luKHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAudHh0JykKKyAgICAgICAgdGV4dFZpZXcudmlld19maWxlKHJvb3QsICdIZWxwJywgZm4pCiAKICAgICByb290LmJpbmQoJzw8YWJvdXQtaWRsZT4+JywgYWJvdXRfZGlhbG9nKQogICAgIHJvb3QuYmluZCgnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicsIGNvbmZpZ19kaWFsb2cpCisgICAgcm9vdC5jcmVhdGVjb21tYW5kKCc6OnRrOjptYWM6OlNob3dQcmVmZXJlbmNlcycsIGNvbmZpZ19kaWFsb2cpCiAgICAgaWYgZmxpc3Q6CiAgICAgICAgIHJvb3QuYmluZCgnPDxjbG9zZS1hbGwtd2luZG93cz4+JywgZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogCkBAIC0xMDIsMzUgKzE0MiwyOSBAQAogICAgICAgICAjIHJpZ2h0IHRoaW5nIGZvciBub3cuCiAgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnZXhpdCcsIGZsaXN0LmNsb3NlX2FsbF9jYWxsYmFjaykKIAotCi0gICAgIyMjY2hlY2sgaWYgVGsgdmVyc2lvbiA+PSA4LjQuMTQ7IGlmIHNvLCB1c2UgaGFyZC1jb2RlZCBzaG93cHJlZnMgYmluZGluZwotICAgIHRrdmVyc2lvbiA9IHJvb3QudGsuZXZhbCgnaW5mbyBwYXRjaGxldmVsJykKLSAgICAjIE5vdGU6IHdlIGNhbm5vdCBjaGVjayBpZiB0aGUgc3RyaW5nIHRrdmVyc2lvbiA+PSAnOC40LjE0JywgYmVjYXVzZQotICAgICMgdGhlIHN0cmluZyAnOC40LjcnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RyaW5nICc4LjQuMTQnLgotICAgIGlmIHR1cGxlKG1hcChpbnQsIHRrdmVyc2lvbi5zcGxpdCgnLicpKSkgPj0gKDgsIDQsIDE0KToKLSAgICAgICAgQmluZGluZ3MubWVudWRlZnNbMF0gPSAgKCdhcHBsaWNhdGlvbicsIFsKKyAgICBpZiBpc0NhcmJvbkFxdWFUayhyb290KToKKyAgICAgICAgIyBmb3IgQ2FyYm9uIEFxdWFUaywgcmVwbGFjZSB0aGUgZGVmYXVsdCBUayBhcHBsZSBtZW51CisgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nYXBwbGUnKQorICAgICAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQorICAgICAgICBCaW5kaW5ncy5tZW51ZGVmcy5pbnNlcnQoMCwKKyAgICAgICAgICAgICgnYXBwbGljYXRpb24nLCBbCiAgICAgICAgICAgICAgICAgKCdBYm91dCBJRExFJywgJzw8YWJvdXQtaWRsZT4+JyksCi0gICAgICAgICAgICAgICAgTm9uZSwKLSAgICAgICAgICAgIF0pCi0gICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnOjp0azo6bWFjOjpTaG93UHJlZmVyZW5jZXMnLCBjb25maWdfZGlhbG9nKQorICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgIF0pKQorICAgICAgICB0a3ZlcnNpb24gPSByb290LnRrLmV2YWwoJ2luZm8gcGF0Y2hsZXZlbCcpCisgICAgICAgIGlmIHR1cGxlKG1hcChpbnQsIHRrdmVyc2lvbi5zcGxpdCgnLicpKSkgPCAoOCwgNCwgMTQpOgorICAgICAgICAgICAgIyBmb3IgZWFybGllciBBcXVhVGsgdmVyc2lvbnMsIHN1cHBseSBhIFByZWZlcmVuY2VzIG1lbnUgaXRlbQorICAgICAgICAgICAgQmluZGluZ3MubWVudWRlZnNbMF1bMV0uYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAoJ19QcmVmZXJlbmNlcy4uLi4nLCAnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicpLAorICAgICAgICAgICAgICAgICkKICAgICBlbHNlOgotICAgICAgICBmb3IgbW5hbWUsIGVudHJ5bGlzdCBpbiBCaW5kaW5ncy5tZW51ZGVmczoKLSAgICAgICAgICAgIG1lbnUgPSBtZW51ZGljdC5nZXQobW5hbWUpCi0gICAgICAgICAgICBpZiBub3QgbWVudToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgZW50cnkgaW4gZW50cnlsaXN0OgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZW50cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtZW51LmFkZF9zZXBhcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwsIGV2ZW50bmFtZSA9IGVudHJ5Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmUsIGxhYmVsID0gcHJlcHN0cihsYWJlbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VsZXJhdG9yID0gZ2V0X2FjY2VsZXJhdG9yKEJpbmRpbmdzLmRlZmF1bHRfa2V5ZGVmcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBjb21tYW5kKHRleHQ9cm9vdCwgZXZlbnRuYW1lPWV2ZW50bmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5ldmVudF9nZW5lcmF0ZShldmVudG5hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW51LmFkZF9jb21tYW5kKGxhYmVsPWxhYmVsLCB1bmRlcmxpbmU9dW5kZXJsaW5lLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1jb21tYW5kLCBhY2NlbGVyYXRvcj1hY2NlbGVyYXRvcikKKyAgICAgICAgIyBhc3N1bWUgQ29jb2EgQXF1YVRrCisgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0IEFib3V0IGRpYWxvZyB3aXRoIEFib3V0IElETEUgb25lCisgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgndGtBYm91dERpYWxvZycsIGFib3V0X2RpYWxvZykKKyAgICAgICAgIyByZXBsYWNlIGRlZmF1bHQgIkhlbHAiIGl0ZW0gaW4gSGVscCBtZW51CisgICAgICAgIHJvb3QuY3JlYXRlY29tbWFuZCgnOjp0azo6bWFjOjpTaG93SGVscCcsIGhlbHBfZGlhbG9nKQorICAgICAgICAjIHJlbW92ZSByZWR1bmRhbnQgIklETEUgSGVscCIgZnJvbSBtZW51CisgICAgICAgIGRlbCBCaW5kaW5ncy5tZW51ZGVmc1stMV1bMV1bMF0KIAogZGVmIHNldHVwQXBwKHJvb3QsIGZsaXN0KToKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3J1bi5weSBiL0xpYi9pZGxlbGliL3J1bi5weQppbmRleCBmZDJjYzA5Li4yNTMzOGZmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ydW4ucHkKKysrIGIvTGliL2lkbGVsaWIvcnVuLnB5CkBAIC0yNSwxMiArMjUsMTMgQEAKICAgICBwYXNzCiBlbHNlOgogICAgIGRlZiBpZGxlX2Zvcm1hdHdhcm5pbmdfc3VicHJvYyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1Ob25lLCBsaW5lPU5vbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lPU5vbmUpOgogICAgICAgICAiIiJGb3JtYXQgd2FybmluZ3MgdGhlIElETEUgd2F5IiIiCiAgICAgICAgIHMgPSAiXG5XYXJuaW5nIChmcm9tIHdhcm5pbmdzIG1vZHVsZSk6XG4iCiAgICAgICAgIHMgKz0gJyAgRmlsZSBcIiVzXCIsIGxpbmUgJXNcbicgJSAoZmlsZW5hbWUsIGxpbmVubykKLSAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pLnN0cmlwKCkgXAotICAgICAgICAgICAgaWYgbGluZSBpcyBOb25lIGVsc2UgbGluZQorICAgICAgICBpZiBsaW5lIGlzIE5vbmU6CisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICBpZiBsaW5lOgogICAgICAgICAgICAgcyArPSAiICAgICVzXG4iICUgbGluZQogICAgICAgICBzICs9ICIlczogJXNcbiIgJSAoY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9MaWIvaW1hcGxpYi5weSBiL0xpYi9pbWFwbGliLnB5CmluZGV4IGZjMWUyMGEuLjEwMjJlNzcgMTAwNjQ0Ci0tLSBhL0xpYi9pbWFwbGliLnB5CisrKyBiL0xpYi9pbWFwbGliLnB5CkBAIC0yNCw2ICsyNCwxMiBAQAogCiBpbXBvcnQgYmluYXNjaWksIGVycm5vLCByYW5kb20sIHJlLCBzb2NrZXQsIHN1YnByb2Nlc3MsIHN5cywgdGltZQogCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKKwogX19hbGxfXyA9IFsiSU1BUDQiLCAiSU1BUDRfc3RyZWFtIiwgIkludGVybmFsZGF0ZTJ0dXBsZSIsCiAgICAgICAgICAgICJJbnQyQVAiLCAiUGFyc2VGbGFncyIsICJUaW1lMkludGVybmFsZGF0ZSJdCiAKQEAgLTcxLDYgKzc3LDcgQEAKICAgICAgICAgJ1NFVEFOTk9UQVRJT04nOignQVVUSCcsICdTRUxFQ1RFRCcpLAogICAgICAgICAnU0VUUVVPVEEnOiAgICAgKCdBVVRIJywgJ1NFTEVDVEVEJyksCiAgICAgICAgICdTT1JUJzogICAgICAgICAoJ1NFTEVDVEVEJywpLAorICAgICAgICAnU1RBUlRUTFMnOiAgICAgKCdOT05BVVRIJywpLAogICAgICAgICAnU1RBVFVTJzogICAgICAgKCdBVVRIJywgJ1NFTEVDVEVEJyksCiAgICAgICAgICdTVE9SRSc6ICAgICAgICAoJ1NFTEVDVEVEJywpLAogICAgICAgICAnU1VCU0NSSUJFJzogICAgKCdBVVRIJywgJ1NFTEVDVEVEJyksCkBAIC0xNTYsMTEgKzE2MywyMyBAQAogICAgICAgICBzZWxmLmNvbnRpbnVhdGlvbl9yZXNwb25zZSA9ICcnICMgTGFzdCBjb250aW51YXRpb24gcmVzcG9uc2UKICAgICAgICAgc2VsZi5pc19yZWFkb25seSA9IEZhbHNlICAgICAgICAjIFJFQUQtT05MWSBkZXNpcmVkIHN0YXRlCiAgICAgICAgIHNlbGYudGFnbnVtID0gMAorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBGYWxzZQogCiAgICAgICAgICMgT3BlbiBzb2NrZXQgdG8gc2VydmVyLgogCiAgICAgICAgIHNlbGYub3Blbihob3N0LCBwb3J0KQogCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3QoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd24oKQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByYWlzZQorCisKKyAgICBkZWYgX2Nvbm5lY3Qoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIHVuaXF1ZSB0YWcgZm9yIHRoaXMgc2Vzc2lvbiwKICAgICAgICAgIyBhbmQgY29tcGlsZSB0YWdnZWQgcmVzcG9uc2UgbWF0Y2hlci4KIApAQCAtMTg4LDEzICsyMDcsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcihzZWxmLndlbGNvbWUpCiAKLSAgICAgICAgdHlwLCBkYXQgPSBzZWxmLmNhcGFiaWxpdHkoKQotICAgICAgICBpZiBkYXQgPT0gW05vbmVdOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcignbm8gQ0FQQUJJTElUWSByZXNwb25zZSBmcm9tIHNlcnZlcicpCi0gICAgICAgIGRhdCA9IHN0cihkYXRbLTFdLCAiQVNDSUkiKQotICAgICAgICBkYXQgPSBkYXQudXBwZXIoKQotICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9IHR1cGxlKGRhdC5zcGxpdCgpKQotCisgICAgICAgIHNlbGYuX2dldF9jYXBhYmlsaXRpZXMoKQogICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnID49IDM6CiAgICAgICAgICAgICAgICAgc2VsZi5fbWVzZygnQ0FQQUJJTElUSUVTOiAlcicgJSAoc2VsZi5jYXBhYmlsaXRpZXMsKSkKQEAgLTcxMSw2ICs3MjQsMzAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3VudGFnZ2VkX3Jlc3BvbnNlKHR5cCwgZGF0LCBuYW1lKQogCiAKKyAgICBkZWYgc3RhcnR0bHMoc2VsZiwgc3NsX2NvbnRleHQ9Tm9uZSk6CisgICAgICAgIG5hbWUgPSAnU1RBUlRUTFMnCisgICAgICAgIGlmIG5vdCBIQVZFX1NTTDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZXJyb3IoJ1NTTCBzdXBwb3J0IG1pc3NpbmcnKQorICAgICAgICBpZiBzZWxmLl90bHNfZXN0YWJsaXNoZWQ6CisgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdUTFMgc2Vzc2lvbiBhbHJlYWR5IGVzdGFibGlzaGVkJykKKyAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5jYXBhYmlsaXRpZXM6CisgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQorICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCisgICAgICAgIGlmIHNzbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KKyAgICAgICAgICAgIHNzbF9jb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHR5cCwgZGF0ID0gc2VsZi5fc2ltcGxlX2NvbW1hbmQobmFtZSkKKyAgICAgICAgaWYgdHlwID09ICdPSyc6CisgICAgICAgICAgICBzZWxmLnNvY2sgPSBzc2xfY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKKyAgICAgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2dldF9jYXBhYmlsaXRpZXMoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcigiQ291bGRuJ3QgZXN0YWJsaXNoIFRMUyBzZXNzaW9uIikKKyAgICAgICAgcmV0dXJuIHNlbGYuX3VudGFnZ2VkX3Jlc3BvbnNlKHR5cCwgZGF0LCBuYW1lKQorCisKICAgICBkZWYgc3RhdHVzKHNlbGYsIG1haWxib3gsIG5hbWVzKToKICAgICAgICAgIiIiUmVxdWVzdCBuYW1lZCBzdGF0dXMgY29uZGl0aW9ucyBmb3IgbWFpbGJveC4KIApAQCAtOTIxLDYgKzk1OCwxNSBAQAogICAgICAgICByZXR1cm4gdHlwLCBkYXRhCiAKIAorICAgIGRlZiBfZ2V0X2NhcGFiaWxpdGllcyhzZWxmKToKKyAgICAgICAgdHlwLCBkYXQgPSBzZWxmLmNhcGFiaWxpdHkoKQorICAgICAgICBpZiBkYXQgPT0gW05vbmVdOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5lcnJvcignbm8gQ0FQQUJJTElUWSByZXNwb25zZSBmcm9tIHNlcnZlcicpCisgICAgICAgIGRhdCA9IHN0cihkYXRbLTFdLCAiQVNDSUkiKQorICAgICAgICBkYXQgPSBkYXQudXBwZXIoKQorICAgICAgICBzZWxmLmNhcGFiaWxpdGllcyA9IHR1cGxlKGRhdC5zcGxpdCgpKQorCisKICAgICBkZWYgX2dldF9yZXNwb25zZShzZWxmKToKIAogICAgICAgICAjIFJlYWQgcmVzcG9uc2UgYW5kIHN0b3JlLgpAQCAtMTEyNSwxMiArMTE3MSw4IEBACiAgICAgICAgICAgICAgICAgbiAtPSAxCiAKIAoraWYgSEFWRV9TU0w6CiAKLXRyeToKLSAgICBpbXBvcnQgc3NsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKICAgICBjbGFzcyBJTUFQNF9TU0woSU1BUDQpOgogCiAgICAgICAgICIiIklNQVA0IGNsaWVudCBjbGFzcyBvdmVyIFNTTCBjb25uZWN0aW9uCkBAIC0xMjcwLDkgKzEzMTIsMTAgQEAKICAgICAgICAgICAgYidKdWwnOiA3LCBiJ0F1Zyc6IDgsIGInU2VwJzogOSwgYidPY3QnOiAxMCwgYidOb3YnOiAxMSwgYidEZWMnOiAxMn0KIAogZGVmIEludGVybmFsZGF0ZTJ0dXBsZShyZXNwKToKLSAgICAiIiJDb252ZXJ0IElNQVA0IElOVEVSTkFMREFURSB0byBVVC4KKyAgICAiIiJQYXJzZSBhbiBJTUFQNCBJTlRFUk5BTERBVEUgc3RyaW5nLgogCi0gICAgUmV0dXJucyBQeXRob24gdGltZSBtb2R1bGUgdHVwbGUuCisgICAgUmV0dXJuIGNvcnJlc3BvbmRpbmcgbG9jYWwgdGltZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYQorICAgIHRpbWUuc3RydWN0X3RpbWUgdHVwbGUgb3IgTm9uZSBpZiB0aGUgc3RyaW5nIGhhcyB3cm9uZyBmb3JtYXQuCiAgICAgIiIiCiAKICAgICBtbyA9IEludGVybmFsRGF0ZS5tYXRjaChyZXNwKQpAQCAtMTMzOSw5ICsxMzgyLDE0IEBACiAKIGRlZiBUaW1lMkludGVybmFsZGF0ZShkYXRlX3RpbWUpOgogCi0gICAgIiIiQ29udmVydCAnZGF0ZV90aW1lJyB0byBJTUFQNCBJTlRFUk5BTERBVEUgcmVwcmVzZW50YXRpb24uCisgICAgIiIiQ29udmVydCBkYXRlX3RpbWUgdG8gSU1BUDQgSU5URVJOQUxEQVRFIHJlcHJlc2VudGF0aW9uLgogCi0gICAgUmV0dXJuIHN0cmluZyBpbiBmb3JtOiAnIkRELU1tbS1ZWVlZIEhIOk1NOlNTICtISE1NIicKKyAgICBSZXR1cm4gc3RyaW5nIGluIGZvcm06ICciREQtTW1tLVlZWVkgSEg6TU06U1MgK0hITU0iJy4gIFRoZQorICAgIGRhdGVfdGltZSBhcmd1bWVudCBjYW4gYmUgYSBudW1iZXIgKGludCBvciBmbG9hdCkgcmVwcmVzZW5pbmcKKyAgICBzZWNvbmRzIHNpbmNlIGVwb2NoIChhcyByZXR1cm5lZCBieSB0aW1lLnRpbWUoKSksIGEgOS10dXBsZQorICAgIHJlcHJlc2VudGluZyBsb2NhbCB0aW1lIChhcyByZXR1cm5lZCBieSB0aW1lLmxvY2FsdGltZSgpKSwgb3IgYQorICAgIGRvdWJsZS1xdW90ZWQgc3RyaW5nLiAgSW4gdGhlIGxhc3QgY2FzZSwgaXQgaXMgYXNzdW1lZCB0byBhbHJlYWR5CisgICAgYmUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LgogICAgICIiIgogCiAgICAgaWYgaXNpbnN0YW5jZShkYXRlX3RpbWUsIChpbnQsIGZsb2F0KSk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAzNzU3N2ZmLi4yYmFhZjkzIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAiIiIKICAgICBpZiAnUFlUSE9OQ0FTRU9LJyBpbiBvcy5lbnZpcm9uOgogICAgICAgICByZXR1cm4gVHJ1ZQotICAgIGVsaWYgY2hlY2sgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgorICAgIGVsaWYgY2hlY2sgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkgaWYgZGlyZWN0b3J5IGVsc2Ugb3MuZ2V0Y3dkKCkpOgogICAgICAgICByZXR1cm4gVHJ1ZQogICAgIHJldHVybiBGYWxzZQogCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKaW5kZXggNmY2MDg0My4uNDI1YjhiZiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQpAQCAtMjIsNyArMjIsNyBAQAogZGVmIF9wYXRoX2pvaW4oKmFyZ3MpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmpvaW4uIiIiCiAgICAgcmV0dXJuIHBhdGhfc2VwLmpvaW4oeFs6LWxlbihwYXRoX3NlcCldIGlmIHguZW5kc3dpdGgocGF0aF9zZXApIGVsc2UgeAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gYXJncyBpZiB4KQogCiAKIGRlZiBfcGF0aF9leGlzdHMocGF0aCk6CkBAIC01Myw2ICs1Myw4IEBACiAjIFhYWCBDb3VsZCBhbHNvIGV4cG9zZSBNb2R1bGVzL2dldHBhdGguYzppc2RpcigpCiBkZWYgX3BhdGhfaXNkaXIocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguaXNkaXIuIiIiCisgICAgaWYgbm90IHBhdGg6CisgICAgICAgIHBhdGggPSBfb3MuZ2V0Y3dkKCkKICAgICByZXR1cm4gX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIDBvMDQwMDAwKQogCiAKQEAgLTc4LDIwICs4MCw2IEBACiAgICAgICAgICAgICByZXR1cm4gX3BhdGhfam9pbihfb3MuZ2V0Y3dkKCksIHBhdGgpCiAKIAotY2xhc3MgX2Nsb3Npbmc6Ci0KLSAgICAiIiJTaW1wbGUgcmVwbGFjZW1lbnQgZm9yIGNvbnRleHRsaWIuY2xvc2luZy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgotICAgICAgICBzZWxmLm9iaiA9IG9iagotCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYub2JqCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLm9iai5jbG9zZSgpCi0KLQogZGVmIF93cmFwKG5ldywgb2xkKToKICAgICAiIiJTaW1wbGUgc3Vic3RpdHV0ZSBmb3IgZnVuY3Rvb2xzLndyYXBzLiIiIgogICAgIGZvciByZXBsYWNlIGluIFsnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdfX2RvY19fJ106CkBAIC05OSw2ICs4Nyw4IEBACiAgICAgbmV3Ll9fZGljdF9fLnVwZGF0ZShvbGQuX19kaWN0X18pCiAKIAorY29kZV90eXBlID0gdHlwZShfd3JhcC5fX2NvZGVfXykKKwogIyBGaW5kZXIvbG9hZGVyIHV0aWxpdHkgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBkZWYgc2V0X3BhY2thZ2UoZnhuKToKQEAgLTEzOCw3ICsxMjgsNyBAQAogICAgIHRoZSBzZWNvbmQgYXJndW1lbnQuCiAKICAgICAiIiIKLSAgICBkZWYgZGVjb3JhdGVkKHNlbGYsIGZ1bGxuYW1lKToKKyAgICBkZWYgZGVjb3JhdGVkKHNlbGYsIGZ1bGxuYW1lLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQoZnVsbG5hbWUpCiAgICAgICAgIGlzX3JlbG9hZCA9IGJvb2wobW9kdWxlKQogICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgpAQCAtMTQ4LDcgKzEzOCw3IEBACiAgICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShmdWxsbmFtZSkKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXSA9IG1vZHVsZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSkKKyAgICAgICAgICAgIHJldHVybiBmeG4oc2VsZiwgbW9kdWxlLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQpAQCAtMzAxLDI0NCArMjkxLDI0MCBAQAogICAgICAgICByZXR1cm4gaW1wLmlzX2Zyb3plbl9wYWNrYWdlKGZ1bGxuYW1lKQogCiAKLWNsYXNzIFB5TG9hZGVyOgorY2xhc3MgX0xvYWRlckJhc2ljczoKIAotICAgICIiIkxvYWRlciBiYXNlIGNsYXNzIGZvciBQeXRob24gc291cmNlIGNvZGUuCisgICAgIiIiQmFzZSBjbGFzcyBvZiBjb21tb24gY29kZSBuZWVkZWQgYnkgYm90aCBTb3VyY2VMb2FkZXIgYW5kCisgICAgX1NvdXJjZWxlc3NGaWxlTG9hZGVyLiIiIgogCi0gICAgU3ViY2xhc3NlcyBuZWVkIHRvIGltcGxlbWVudCB0aGUgbWV0aG9kczoKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuaXNfcGFja2FnZSBieSBjaGVja2luZyBpZgorICAgICAgICB0aGUgcGF0aCByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUgaGFzIGEgZmlsZW5hbWUgb2YgJ19faW5pdF9fLnB5Jy4iIiIKKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkucnBhcnRpdGlvbihwYXRoX3NlcClbMl0KKyAgICAgICAgcmV0dXJuIGZpbGVuYW1lLnJzcGxpdCgnLicsIDEpWzBdID09ICdfX2luaXRfXycKIAotICAgIC0gc291cmNlX3BhdGgKLSAgICAtIGdldF9kYXRhCi0gICAgLSBpc19wYWNrYWdlCisgICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBzb3VyY2VfbXRpbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYworICAgICAgICBudW1iZXIgYW5kIHRpbWVzdGFtcCBhbG9uZyB0aGUgd2F5LgogCi0gICAgIiIiCisgICAgICAgIElmIHNvdXJjZV9tdGltZSBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgorCisgICAgICAgICIiIgorICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCisgICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KKyAgICAgICAgaWYgbGVuKG1hZ2ljKSAhPSA0IG9yIG1hZ2ljICE9IGltcC5nZXRfbWFnaWMoKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJiYWQgbWFnaWMgbnVtYmVyIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQorICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCB0aW1lc3RhbXAgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCisgICAgICAgIGVsaWYgc291cmNlX210aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbWFyc2hhbC5fcl9sb25nKHJhd190aW1lc3RhbXApICE9IHNvdXJjZV9tdGltZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQorICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KKyAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCisgICAgICAgIHJldHVybiBkYXRhWzg6XQogCiAgICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICIiIkxvYWQgYSBzb3VyY2UgbW9kdWxlLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUobW9kdWxlKQotCi0gICAgZGVmIF9sb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJJbml0aWFsaXplIGEgbW9kdWxlIGZyb20gc291cmNlLiIiIgorICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKKyAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKKyAgICAgICAgbG9hZGluZy4iIiIKICAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobW9kdWxlLl9fbmFtZV9fKQotICAgICAgICAjIF9fZmlsZV9fIG1heSBoYXZlIGJlZW4gc2V0IGJ5IHRoZSBjYWxsZXIsIGUuZy4gYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKToKLSAgICAgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYuc291cmNlX3BhdGgobmFtZSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmdldF9jb2RlKG5hbWUpCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgIGlmIG5vdCBzb3VyY2VsZXNzOgorICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KKyAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQogICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gID0gW21vZHVsZS5fX2ZpbGVfXy5yc3BsaXQocGF0aF9zZXAsIDEpWzBdXQotICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFttb2R1bGUuX19maWxlX18ucnNwbGl0KHBhdGhfc2VwLCAxKVswXV0KKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCiAgICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKICAgICAgICAgcmV0dXJuIG1vZHVsZQogCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiR2V0IGEgY29kZSBvYmplY3QgZnJvbSBzb3VyY2UuIiIiCi0gICAgICAgIHNvdXJjZV9wYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgc291cmNlX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiYSBzb3VyY2UgcGF0aCBtdXN0IGV4aXN0IHRvIGxvYWQgezB9Ii5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlKQotICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQotICAgICAgICAjIENvbnZlcnQgdG8gdW5pdmVyc2FsIG5ld2xpbmVzLgotICAgICAgICBsaW5lX2VuZGluZ3MgPSBiJ1xuJwotICAgICAgICBmb3IgaW5kZXgsIGMgaW4gZW51bWVyYXRlKHNvdXJjZSk6Ci0gICAgICAgICAgICBpZiBjID09IG9yZChiJ1xuJyk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsaWYgYyA9PSBvcmQoYidccicpOgotICAgICAgICAgICAgICAgIGxpbmVfZW5kaW5ncyA9IGInXHInCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpZiBzb3VyY2VbaW5kZXgrMV0gPT0gb3JkKGInXG4nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVfZW5kaW5ncyArPSBiJ1xuJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbGluZV9lbmRpbmdzICE9IGInXG4nOgotICAgICAgICAgICAgc291cmNlID0gc291cmNlLnJlcGxhY2UobGluZV9lbmRpbmdzLCBiJ1xuJykKLSAgICAgICAgcmV0dXJuIGNvbXBpbGUoc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKIAotICAgICMgTmV2ZXIgdXNlIGluIGltcGxlbWVudGluZyBpbXBvcnQhIEltcG9ydHMgY29kZSB3aXRoaW4gdGhlIG1ldGhvZC4KLSAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc291cmNlIGNvZGUgZm9yIGEgbW9kdWxlLgorY2xhc3MgU291cmNlTG9hZGVyKF9Mb2FkZXJCYXNpY3MpOgogCi0gICAgICAgIHNlbGYuc291cmNlX3BhdGgoKSBhbmQgc2VsZi5nZXRfZGF0YSgpIGFyZSB1c2VkIHRvIGltcGxlbWVudCB0aGlzCi0gICAgICAgIG1ldGhvZC4KKyAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgKGFuIGludCkgZm9yIHRoZQorICAgICAgICBzcGVjaWZpZWQgcGF0aCwgd2hlcmUgcGF0aCBpcyBhIHN0ci4KKworICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIHRoZSBsb2FkZXIgdG8gcmVhZCBieXRlY29kZSBmaWxlcy4KIAogICAgICAgICAiIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKKyAgICAgICAgIiIiT3B0aW9uYWwgbWV0aG9kIHdoaWNoIHdyaXRlcyBkYXRhIChieXRlcykgdG8gYSBmaWxlIHBhdGggKGEgc3RyKS4KKworICAgICAgICBJbXBsZW1lbnRpbmcgdGhpcyBtZXRob2QgYWxsb3dzIGZvciB0aGUgd3JpdGluZyBvZiBieXRlY29kZSBmaWxlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKKyAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X3NvdXJjZS4iIiIKKyAgICAgICAgaW1wb3J0IHRva2VuaXplCisgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5nZXRfZGF0YShwYXRoKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHJldHVybiBJbXBvcnRFcnJvcigic291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpIikKLSAgICAgICAgaW1wb3J0IGlvCi0gICAgICAgIGltcG9ydCB0b2tlbml6ZQotICAgICAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhpby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUpCi0gICAgICAgIHJldHVybiBzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKLQotICAgICIiIkxvYWRlciBiYXNlIGNsYXNzIGZvciBQeXRob24gc291cmNlIGFuZCBieXRlY29kZS4KLQotICAgIFJlcXVpcmVzIGltcGxlbWVudGluZyB0aGUgbWV0aG9kcyBuZWVkZWQgZm9yIFB5TG9hZGVyIGFzIHdlbGwgYXMKLSAgICBzb3VyY2VfbXRpbWUsIGJ5dGVjb2RlX3BhdGgsIGFuZCB3cml0ZV9ieXRlY29kZS4KLQotICAgICIiIgotCi0gICAgQG1vZHVsZV9mb3JfbG9hZGVyCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBzb3VyY2Ugb3IgYnl0ZWNvZGUuIiIiCi0gICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoKG5hbWUpCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLmJ5dGVjb2RlX3BhdGgobmFtZSkKLSAgICAgICAgIyBnZXRfY29kZSBjYW4gd29ycnkgYWJvdXQgbm8gdmlhYmxlIHBhdGhzIGV4aXN0aW5nLgotICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzb3VyY2VfcGF0aCBvciBieXRlY29kZV9wYXRoCi0gICAgICAgIHJldHVybiBzZWxmLl9sb2FkX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigic291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpIikKKyAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoX2lvLkJ5dGVzSU8oc291cmNlX2J5dGVzKS5yZWFkbGluZSkKKyAgICAgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICAgICAgcmV0dXJuIG5ld2xpbmVfZGVjb2Rlci5kZWNvZGUoc291cmNlX2J5dGVzLmRlY29kZShlbmNvZGluZ1swXSkpCiAKICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKLSAgICAgICAgIyBYWFggQ2FyZSBlbm91Z2ggdG8gbWFrZSBzdXJlIHRoaXMgY2FsbCBkb2VzIG5vdCBoYXBwZW4gaWYgdGhlIG1hZ2ljCi0gICAgICAgICMgICAgIG51bWJlciBpcyBiYWQ/Ci0gICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLnNvdXJjZV9tdGltZShmdWxsbmFtZSkKLSAgICAgICAgIyBUcnkgdG8gdXNlIGJ5dGVjb2RlIGlmIGl0IGlzIGF2YWlsYWJsZS4KLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmdldF9kYXRhKGJ5dGVjb2RlX3BhdGgpCisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCisKKyAgICAgICAgUmVhZGluZyBvZiBieXRlY29kZSByZXF1aXJlcyBwYXRoX210aW1lIHRvIGJlIGltcGxlbWVudGVkLiBUbyB3cml0ZQorICAgICAgICBieXRlY29kZSwgc2V0X2RhdGEgbXVzdCBhbHNvIGJlIGltcGxlbWVudGVkLgorCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZV9wYXRoKQorICAgICAgICBzb3VyY2VfbXRpbWUgPSBOb25lCisgICAgICAgIGlmIGJ5dGVjb2RlX3BhdGggaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWFnaWMgPSBkYXRhWzo0XQotICAgICAgICAgICAgICAgIGlmIGxlbihtYWdpYykgPCA0OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCi0gICAgICAgICAgICAgICAgaWYgbGVuKHJhd190aW1lc3RhbXApIDwgNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCB0aW1lc3RhbXAgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgcHljX3RpbWVzdGFtcCA9IG1hcnNoYWwuX3JfbG9uZyhyYXdfdGltZXN0YW1wKQotICAgICAgICAgICAgICAgIGJ5dGVjb2RlID0gZGF0YVs4Ol0KLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBtYWdpYyBudW1iZXIgaXMgdmFsaWQuCi0gICAgICAgICAgICAgICAgaWYgaW1wLmdldF9tYWdpYygpICE9IG1hZ2ljOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBieXRlY29kZSBpcyBub3Qgc3RhbGUgKG9ubHkgbWF0dGVycyB3aGVuCi0gICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBzb3VyY2UgdG8gZmFsbCBiYWNrIG9uLgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHB5Y190aW1lc3RhbXAgPCBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJ5dGVjb2RlIGlzIHN0YWxlIikKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICAjIElmIHNvdXJjZSBpcyBhdmFpbGFibGUgZ2l2ZSBpdCBhIHNob3QuCi0gICAgICAgICAgICAgICAgaWYgc291cmNlX3RpbWVzdGFtcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBzZWxmLnBhdGhfbXRpbWUoc291cmNlX3BhdGgpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgQnl0ZWNvZGUgc2VlbXMgZmluZSwgc28gdHJ5IHRvIHVzZSBpdC4KLSAgICAgICAgICAgICAgICAjIFhYWCBJZiB0aGUgYnl0ZWNvZGUgaXMgaWxsLWZvcm1lZCwgd291bGQgaXQgYmUgYmVuZWZpY2lhbCB0bwotICAgICAgICAgICAgICAgICMgICAgIHRyeSBmb3IgdXNpbmcgc291cmNlIGlmIGF2YWlsYWJsZSBhbmQgaXNzdWUgYSB3YXJuaW5nPwotICAgICAgICAgICAgICAgIHJldHVybiBtYXJzaGFsLmxvYWRzKGJ5dGVjb2RlKQotICAgICAgICBlbGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgYXZhaWxhYmxlIHRvIGNyZWF0ZSBjb2RlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBmb3IgezAhcn0iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICMgVXNlIHRoZSBzb3VyY2UuCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc3VwZXIoKS5nZXRfY29kZShmdWxsbmFtZSkKLSAgICAgICAgIyBHZW5lcmF0ZSBieXRlY29kZSBhbmQgd3JpdGUgaXQgb3V0LgotICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX2RhdGEgPSBzZWxmLl9ieXRlc19mcm9tX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX210aW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIGNvZGVfdHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSkKKyAgICAgICAgc291cmNlX2J5dGVzID0gc2VsZi5nZXRfZGF0YShzb3VyY2VfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNvdXJjZV9ieXRlcywgc291cmNlX3BhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGlmIChub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgYW5kIGJ5dGVjb2RlX3BhdGggaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICMgSWYgZS5nLiBKeXRob24gZXZlciBpbXBsZW1lbnRzIGltcC5jYWNoZV9mcm9tX3NvdXJjZSB0byBoYXZlCisgICAgICAgICAgICAjIHRoZWlyIG93biBjYWNoZWQgZmlsZSBmb3JtYXQsIHRoaXMgYmxvY2sgb2YgY29kZSB3aWxsIG1vc3QgbGlrZWx5CisgICAgICAgICAgICAjIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5fd19sb25nKHNvdXJjZV90aW1lc3RhbXApKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5fd19sb25nKHNvdXJjZV9tdGltZSkpCiAgICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKLSAgICAgICAgICAgIHNlbGYud3JpdGVfYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXRfZGF0YShieXRlY29kZV9wYXRoLCBkYXRhKQorICAgICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKIAorICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIExvYWRlci5sb2FkX21vZHVsZS4KIAotY2xhc3MgX1B5RmlsZUxvYWRlcihQeUxvYWRlcik6CisgICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCisgICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCisgICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgogCi0gICAgIiIiTG9hZCBhIFB5dGhvbiBzb3VyY2UgZmlsZS4iIiIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX21vZHVsZShmdWxsbmFtZSkKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBpc19wa2cpOgotICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQotICAgICAgICBzZWxmLl9pc19wa2cgPSBpc19wa2cKLSAgICAgICAgIyBGaWd1cmUgb3V0IHRoZSBiYXNlIHBhdGggYmFzZWQgb24gd2hldGhlciBpdCB3YXMgc291cmNlIG9yIGJ5dGVjb2RlCi0gICAgICAgICMgdGhhdCB3YXMgZm91bmQuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2Jhc2VfcGF0aCA9IF9wYXRoX3dpdGhvdXRfZXh0KHBhdGgsIGltcC5QWV9TT1VSQ0UpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgc2VsZi5fYmFzZV9wYXRoID0gX3BhdGhfd2l0aG91dF9leHQocGF0aCwgaW1wLlBZX0NPTVBJTEVEKQogCi0gICAgZGVmIF9maW5kX3BhdGgoc2VsZiwgZXh0X3R5cGUpOgotICAgICAgICAiIiJGaW5kIGEgcGF0aCBmcm9tIHRoZSBiYXNlIHBhdGggYW5kIHRoZSBzcGVjaWZpZWQgZXh0ZW5zaW9uIHR5cGUgdGhhdAotICAgICAgICBleGlzdHMsIHJldHVybmluZyBOb25lIGlmIG9uZSBpcyBub3QgZm91bmQuIiIiCi0gICAgICAgIGZvciBzdWZmaXggaW4gX3N1ZmZpeF9saXN0KGV4dF90eXBlKToKLSAgICAgICAgICAgIHBhdGggPSBzZWxmLl9iYXNlX3BhdGggKyBzdWZmaXgKLSAgICAgICAgICAgIGlmIF9wYXRoX2V4aXN0cyhwYXRoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0aAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKK2NsYXNzIF9GaWxlTG9hZGVyOgorCisgICAgIiIiQmFzZSBmaWxlIGxvYWRlciBjbGFzcyB3aGljaCBpbXBsZW1lbnRzIHRoZSBsb2FkZXIgcHJvdG9jb2wgbWV0aG9kcyB0aGF0CisgICAgcmVxdWlyZSBmaWxlIHN5c3RlbSB1c2FnZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgICAgICIiIkNhY2hlIHRoZSBtb2R1bGUgbmFtZSBhbmQgdGhlIHBhdGggdG8gdGhlIGZpbGUgZm91bmQgYnkgdGhlCisgICAgICAgIGZpbmRlci4iIiIKKyAgICAgICAgc2VsZi5fbmFtZSA9IGZ1bGxuYW1lCisgICAgICAgIHNlbGYuX3BhdGggPSBwYXRoCiAKICAgICBAX2NoZWNrX25hbWUKLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBhdGggdG8gYW4gZXhpc3Rpbmcgc291cmNlIGZpbGUgZm9yIHRoZSBtb2R1bGUsIG9yIE5vbmUKLSAgICAgICAgaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4iIiIKLSAgICAgICAgIyBOb3QgYSBwcm9wZXJ0eSBzbyB0aGF0IGl0IGlzIGVhc3kgdG8gb3ZlcnJpZGUuCi0gICAgICAgIHJldHVybiBzZWxmLl9maW5kX3BhdGgoaW1wLlBZX1NPVVJDRSkKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCiAgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIGRhdGEgZnJvbSBwYXRoIGFzIHJhdyBieXRlcy4iIiIKLSAgICAgICAgcmV0dXJuIF9pby5GaWxlSU8ocGF0aCwgJ3InKS5yZWFkKCkgICMgQXNzdW1pbmcgYnl0ZXMuCi0KLSAgICBAX2NoZWNrX25hbWUKLSAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiBhIGJvb2xlYW4gYmFzZWQgb24gd2hldGhlciB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZS4KLQotICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgKGxpa2UgZ2V0X3NvdXJjZSkgaWYgdGhlIGxvYWRlciBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBwYWNrYWdlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5faXNfcGtnCisgICAgICAgIHdpdGggX2lvLkZpbGVJTyhwYXRoLCAncicpIGFzIGZpbGU6CisgICAgICAgICAgICByZXR1cm4gZmlsZS5yZWFkKCkKIAogCi1jbGFzcyBfUHlQeWNGaWxlTG9hZGVyKFB5UHljTG9hZGVyLCBfUHlGaWxlTG9hZGVyKToKK2NsYXNzIF9Tb3VyY2VGaWxlTG9hZGVyKF9GaWxlTG9hZGVyLCBTb3VyY2VMb2FkZXIpOgogCi0gICAgIiIiTG9hZCBhIG1vZHVsZSBmcm9tIGEgc291cmNlIG9yIGJ5dGVjb2RlIGZpbGUuIiIiCisgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgU291cmNlTG9hZGVyIHVzaW5nIHRoZSBmaWxlIHN5c3RlbS4iIiIKIAotICAgIEBfY2hlY2tfbmFtZQotICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgdGhlIHNvdXJjZSBmb3IgdGhlIHNwZWNpZmllZAotICAgICAgICBtb2R1bGUuIiIiCi0gICAgICAgIHNvdXJjZV9wYXRoID0gc2VsZi5zb3VyY2VfcGF0aChuYW1lKQotICAgICAgICBpZiBub3Qgc291cmNlX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICByZXR1cm4gaW50KF9vcy5zdGF0KHNvdXJjZV9wYXRoKS5zdF9tdGltZSkKKyAgICBkZWYgcGF0aF9tdGltZShzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHBhdGguIiIiCisgICAgICAgIHJldHVybiBpbnQoX29zLnN0YXQocGF0aCkuc3RfbXRpbWUpCiAKLSAgICBAX2NoZWNrX25hbWUKLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byBhIGJ5dGVjb2RlIGZpbGUsIG9yIE5vbmUgaWYgb25lIGRvZXMgbm90Ci0gICAgICAgIGV4aXN0LiIiIgotICAgICAgICAjIE5vdCBhIHByb3BlcnR5IGZvciBlYXN5IG92ZXJyaWRpbmcuCi0gICAgICAgIHJldHVybiBzZWxmLl9maW5kX3BhdGgoaW1wLlBZX0NPTVBJTEVEKQotCi0gICAgQF9jaGVja19uYW1lCi0gICAgZGVmIHdyaXRlX2J5dGVjb2RlKHNlbGYsIG5hbWUsIGRhdGEpOgotICAgICAgICAiIiJXcml0ZSBvdXQgJ2RhdGEnIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgcmV0dXJuaW5nIGEgYm9vbGVhbgotICAgICAgICBzaWduaWZ5aW5nIGlmIHRoZSB3cml0ZS1vdXQgYWN0dWFsbHkgb2NjdXJyZWQuCi0KLSAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIChqdXN0IGxpa2UgZ2V0X3NvdXJjZSkgaWYgdGhlIHNwZWNpZmllZCBtb2R1bGUKLSAgICAgICAgY2Fubm90IGJlIGhhbmRsZWQgYnkgdGhlIGxvYWRlci4KLQotICAgICAgICAiIiIKLSAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChuYW1lKQotICAgICAgICBpZiBub3QgYnl0ZWNvZGVfcGF0aDoKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLl9iYXNlX3BhdGggKyBfc3VmZml4X2xpc3QoaW1wLlBZX0NPTVBJTEVEKVswXQorICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKKyAgICAgICAgIiIiV3JpdGUgYnl0ZXMgZGF0YSB0byBhIGZpbGUuIiIiCisgICAgICAgIHBhcmVudCwgXywgZmlsZW5hbWUgPSBwYXRoLnJwYXJ0aXRpb24ocGF0aF9zZXApCisgICAgICAgIHBhdGhfcGFydHMgPSBbXQorICAgICAgICAjIEZpZ3VyZSBvdXQgd2hhdCBkaXJlY3RvcmllcyBhcmUgbWlzc2luZy4KKyAgICAgICAgd2hpbGUgcGFyZW50IGFuZCBub3QgX3BhdGhfaXNkaXIocGFyZW50KToKKyAgICAgICAgICAgIHBhcmVudCwgXywgcGFydCA9IHBhcmVudC5ycGFydGl0aW9uKHBhdGhfc2VwKQorICAgICAgICAgICAgcGF0aF9wYXJ0cy5hcHBlbmQocGFydCkKKyAgICAgICAgIyBDcmVhdGUgbmVlZGVkIGRpcmVjdG9yaWVzLgorICAgICAgICBmb3IgcGFydCBpbiByZXZlcnNlZChwYXRoX3BhcnRzKToKKyAgICAgICAgICAgIHBhcmVudCA9IF9wYXRoX2pvaW4ocGFyZW50LCBwYXJ0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9vcy5ta2RpcihwYXJlbnQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgIyBQcm9iYWJseSBhbm90aGVyIFB5dGhvbiBwcm9jZXNzIGFscmVhZHkgY3JlYXRlZCB0aGUgZGlyLgorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIElmIGNhbid0IGdldCBwcm9wZXIgYWNjZXNzLCB0aGVuIGp1c3QgZm9yZ2V0IGFib3V0IHdyaXRpbmcKKyAgICAgICAgICAgICAgICAjIHRoZSBkYXRhLgorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FQUNDRVM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgICMgQXNzdW1pbmcgYnl0ZXMuCi0gICAgICAgICAgICB3aXRoIF9jbG9zaW5nKF9pby5GaWxlSU8oYnl0ZWNvZGVfcGF0aCwgJ3cnKSkgYXMgYnl0ZWNvZGVfZmlsZToKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHdpdGggX2lvLkZpbGVJTyhwYXRoLCAnd2InKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoZGF0YSkKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgIyBEb24ndCB3b3JyeSBpZiB5b3UgY2FuJ3Qgd3JpdGUgYnl0ZWNvZGUuCiAgICAgICAgICAgICBpZiBleGMuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQogCiAKK2NsYXNzIF9Tb3VyY2VsZXNzRmlsZUxvYWRlcihfRmlsZUxvYWRlciwgX0xvYWRlckJhc2ljcyk6CisKKyAgICAiIiJMb2FkZXIgd2hpY2ggaGFuZGxlcyBzb3VyY2VsZXNzIGZpbGUgaW1wb3J0cy4iIiIKKworICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9sb2FkX21vZHVsZShmdWxsbmFtZSwgc291cmNlbGVzcz1UcnVlKQorCisgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShwYXRoKQorICAgICAgICBieXRlc19kYXRhID0gc2VsZi5fYnl0ZXNfZnJvbV9ieXRlY29kZShmdWxsbmFtZSwgZGF0YSwgTm9uZSkKKyAgICAgICAgZm91bmQgPSBtYXJzaGFsLmxvYWRzKGJ5dGVzX2RhdGEpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIGNvZGVfdHlwZSk6CisgICAgICAgICAgICByZXR1cm4gZm91bmQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJOb24tY29kZSBvYmplY3QgaW4ge30iLmZvcm1hdChwYXRoKSkKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIE5vbmUgYXMgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuIiIiCisgICAgICAgIHJldHVybiBOb25lCisKKwogY2xhc3MgX0V4dGVuc2lvbkZpbGVMb2FkZXI6CiAKICAgICAiIiJMb2FkZXIgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLgpAQCAtNTQ3LDcgKzUzMyw3IEBACiAKICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBpc19wa2cpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgbG9hZGVyLgogCiAgICAgICAgIElmIGlzX3BrZyBpcyBUcnVlIHRoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhcyBleHRlbnNpb24gbW9kdWxlcwpAQCAtNTU2LDggKzU0Miw2IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQogICAgICAgICBzZWxmLl9wYXRoID0gcGF0aAotICAgICAgICBpZiBpc19wa2c6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJleHRlbnNpb24gbW9kdWxlcyBjYW5ub3QgYmUgcGFja2FnZXMiKQogCiAgICAgQF9jaGVja19uYW1lCiAgICAgQHNldF9wYWNrYWdlCkBAIC02NTUsMTQ3ICs2MzksODggQEAKICAgICAgICAgICAgIHJldHVybiBOb25lCiAKIAotY2xhc3MgX0NoYWluZWRGaW5kZXI6Ci0KLSAgICAiIiJGaW5kZXIgdGhhdCBzZXF1ZW50aWFsbHkgY2FsbHMgb3RoZXIgZmluZGVycy4iIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqZmluZGVycyk6Ci0gICAgICAgIHNlbGYuX2ZpbmRlcnMgPSBmaW5kZXJzCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIGZvciBmaW5kZXIgaW4gc2VsZi5fZmluZGVyczoKLSAgICAgICAgICAgIHJlc3VsdCA9IGZpbmRlci5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLSAgICAgICAgICAgIGlmIHJlc3VsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KIGNsYXNzIF9GaWxlRmluZGVyOgogCi0gICAgIiIiQmFzZSBjbGFzcyBmb3IgZmlsZSBmaW5kZXJzLgorICAgICIiIkZpbGUtYmFzZWQgZmluZGVyLgogCi0gICAgU3ViY2xhc3NlcyBhcmUgZXhwZWN0ZWQgdG8gZGVmaW5lIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKLQotICAgICAgICAqIF9zdWZmaXhlcwotICAgICAgICAgICAgU2VxdWVuY2Ugb2YgZmlsZSBzdWZmaXhlcyB3aG9zZSBvcmRlciB3aWxsIGJlIGZvbGxvd2VkLgotCi0gICAgICAgICogX3Bvc3NpYmxlX3BhY2thZ2UKLSAgICAgICAgICAgIFRydWUgaWYgaW1wb3J0ZXIgc2hvdWxkIGNoZWNrIGZvciBwYWNrYWdlcy4KLQotICAgICAgICAqIF9sb2FkZXIKLSAgICAgICAgICAgIEEgY2FsbGFibGUgdGhhdCB0YWtlcyB0aGUgbW9kdWxlIG5hbWUsIGEgZmlsZSBwYXRoLCBhbmQgd2hldGhlcgotICAgICAgICAgICAgdGhlIHBhdGggcG9pbnRzIHRvIGEgcGFja2FnZSBhbmQgcmV0dXJucyBhIGxvYWRlciBmb3IgdGhlIG1vZHVsZQotICAgICAgICAgICAgZm91bmQgYXQgdGhhdCBwYXRoLgorICAgIENvbnN0cnVjdG9yIHRha2VzIGEgbGlzdCBvZiBvYmplY3RzIGRldGFpbGluZyB3aGF0IGZpbGUgZXh0ZW5zaW9ucyB0aGVpcgorICAgIGxvYWRlciBzdXBwb3J0cyBhbG9uZyB3aXRoIHdoZXRoZXIgaXQgY2FuIGJlIHVzZWQgZm9yIGEgcGFja2FnZS4KIAogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhfZW50cnkpOgotICAgICAgICAiIiJJbml0aWFsaXplIGFuIGltcG9ydGVyIGZvciB0aGUgcGFzc2VkLWluIHN5cy5wYXRoIGVudHJ5ICh3aGljaCBpcwotICAgICAgICBhc3N1bWVkIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHZlcmlmaWVkIGFzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSkuCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsICpkZXRhaWxzKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB3aXRoIGZpbmRlciBkZXRhaWxzLiIiIgorICAgICAgICBwYWNrYWdlcyA9IFtdCisgICAgICAgIG1vZHVsZXMgPSBbXQorICAgICAgICBmb3IgZGV0YWlsIGluIGRldGFpbHM6CisgICAgICAgICAgICBtb2R1bGVzLmV4dGVuZCgoc3VmZml4LCBkZXRhaWwubG9hZGVyKSBmb3Igc3VmZml4IGluIGRldGFpbC5zdWZmaXhlcykKKyAgICAgICAgICAgIGlmIGRldGFpbC5zdXBwb3J0c19wYWNrYWdlczoKKyAgICAgICAgICAgICAgICBwYWNrYWdlcy5leHRlbmQoKHN1ZmZpeCwgZGV0YWlsLmxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCBpbiBkZXRhaWwuc3VmZml4ZXMpCisgICAgICAgIHNlbGYucGFja2FnZXMgPSBwYWNrYWdlcworICAgICAgICBzZWxmLm1vZHVsZXMgPSBtb2R1bGVzCisgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKIAotICAgICAgICBDYW4gYmUgdXNlZCBhcyBhbiBlbnRyeSBvbiBzeXMucGF0aF9ob29rLgotCi0gICAgICAgICIiIgotICAgICAgICBhYnNvbHV0ZV9wYXRoID0gX3BhdGhfYWJzb2x1dGUocGF0aF9lbnRyeSkKLSAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKGFic29sdXRlX3BhdGgpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm9ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCIpCi0gICAgICAgIHNlbGYuX3BhdGhfZW50cnkgPSBhYnNvbHV0ZV9wYXRoCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiIiIgogICAgICAgICB0YWlsX21vZHVsZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQotICAgICAgICBwYWNrYWdlX2RpcmVjdG9yeSA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fcG9zc2libGVfcGFja2FnZToKLSAgICAgICAgICAgIGZvciBleHQgaW4gc2VsZi5fc3VmZml4ZXM6Ci0gICAgICAgICAgICAgICAgcGFja2FnZV9kaXJlY3RvcnkgPSBfcGF0aF9qb2luKHNlbGYuX3BhdGhfZW50cnksIHRhaWxfbW9kdWxlKQotICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgZXh0Ci0gICAgICAgICAgICAgICAgcGFja2FnZV9pbml0ID0gX3BhdGhfam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgaW5pdF9maWxlbmFtZSkKLSAgICAgICAgICAgICAgICBpZiAoX3BhdGhfaXNmaWxlKHBhY2thZ2VfaW5pdCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBfY2FzZV9vayhzZWxmLl9wYXRoX2VudHJ5LCB0YWlsX21vZHVsZSkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBfY2FzZV9vayhwYWNrYWdlX2RpcmVjdG9yeSwgaW5pdF9maWxlbmFtZSkpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZGVyKGZ1bGxuYW1lLCBwYWNrYWdlX2luaXQsIFRydWUpCi0gICAgICAgIGZvciBleHQgaW4gc2VsZi5fc3VmZml4ZXM6Ci0gICAgICAgICAgICBmaWxlX25hbWUgPSB0YWlsX21vZHVsZSArIGV4dAotICAgICAgICAgICAgZmlsZV9wYXRoID0gX3BhdGhfam9pbihzZWxmLl9wYXRoX2VudHJ5LCBmaWxlX25hbWUpCi0gICAgICAgICAgICBpZiAoX3BhdGhfaXNmaWxlKGZpbGVfcGF0aCkgYW5kCi0gICAgICAgICAgICAgICAgICAgIF9jYXNlX29rKHNlbGYuX3BhdGhfZW50cnksIGZpbGVfbmFtZSkpOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9sb2FkZXIoZnVsbG5hbWUsIGZpbGVfcGF0aCwgRmFsc2UpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFJhaXNlIGEgd2FybmluZyBpZiBpdCBtYXRjaGVzIGEgZGlyZWN0b3J5IHcvbyBhbiBfX2luaXRfXyBmaWxlLgotICAgICAgICAgICAgaWYgKHBhY2thZ2VfZGlyZWN0b3J5IGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgICAgICAgICBfcGF0aF9pc2RpcihwYWNrYWdlX2RpcmVjdG9yeSkgYW5kCi0gICAgICAgICAgICAgICAgICAgIF9jYXNlX29rKHNlbGYuX3BhdGhfZW50cnksIHRhaWxfbW9kdWxlKSk6Ci0gICAgICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4oIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5ICVzOiBtaXNzaW5nIF9faW5pdF9fIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHBhY2thZ2VfZGlyZWN0b3J5LCBJbXBvcnRXYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgYmFzZV9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlKQorICAgICAgICBpZiBfcGF0aF9pc2RpcihiYXNlX3BhdGgpIGFuZCBfY2FzZV9vayhzZWxmLnBhdGgsIHRhaWxfbW9kdWxlKToKKyAgICAgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlciBpbiBzZWxmLnBhY2thZ2VzOgorICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihiYXNlX3BhdGgsIGluaXRfZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgaWYgKF9wYXRoX2lzZmlsZShmdWxsX3BhdGgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgX2Nhc2Vfb2soYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIoZnVsbG5hbWUsIGZ1bGxfcGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNnID0gIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fIgorICAgICAgICAgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQoYmFzZV9wYXRoKSwgSW1wb3J0V2FybmluZykKKyAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYubW9kdWxlczoKKyAgICAgICAgICAgIG1vZF9maWxlbmFtZSA9IHRhaWxfbW9kdWxlICsgc3VmZml4CisgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKHNlbGYucGF0aCwgbW9kX2ZpbGVuYW1lKQorICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCkgYW5kIF9jYXNlX29rKHNlbGYucGF0aCwgbW9kX2ZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIF9Tb3VyY2VGaW5kZXJEZXRhaWxzOgorCisgICAgbG9hZGVyID0gX1NvdXJjZUZpbGVMb2FkZXIKKyAgICBzdXBwb3J0c19wYWNrYWdlcyA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdWZmaXhlcyA9IF9zdWZmaXhfbGlzdChpbXAuUFlfU09VUkNFKQorCitjbGFzcyBfU291cmNlbGVzc0ZpbmRlckRldGFpbHM6CisKKyAgICBsb2FkZXIgPSBfU291cmNlbGVzc0ZpbGVMb2FkZXIKKyAgICBzdXBwb3J0c19wYWNrYWdlcyA9IFRydWUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdWZmaXhlcyA9IF9zdWZmaXhfbGlzdChpbXAuUFlfQ09NUElMRUQpCiAKIAotY2xhc3MgX1B5RmlsZUZpbmRlcihfRmlsZUZpbmRlcik6CitjbGFzcyBfRXh0ZW5zaW9uRmluZGVyRGV0YWlsczoKIAotICAgICIiIkltcG9ydGVyIGZvciBzb3VyY2UvYnl0ZWNvZGUgZmlsZXMuIiIiCisgICAgbG9hZGVyID0gX0V4dGVuc2lvbkZpbGVMb2FkZXIKKyAgICBzdXBwb3J0c19wYWNrYWdlcyA9IEZhbHNlCiAKLSAgICBfcG9zc2libGVfcGFja2FnZSA9IFRydWUKLSAgICBfbG9hZGVyID0gX1B5RmlsZUxvYWRlcgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGhfZW50cnkpOgotICAgICAgICAjIExhY2sgb2YgaW1wIGR1cmluZyBjbGFzcyBjcmVhdGlvbiBtZWFucyBfc3VmZml4ZXMgaXMgc2V0IGhlcmUuCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQgUHl0aG9uIHNvdXJjZSBmaWxlcyBhcmUgbGlzdGVkIGZpcnN0ISAgTmVlZGVkIGZvciBhbgotICAgICAgICAjIG9wdGltaXphdGlvbiBieSB0aGUgbG9hZGVyLgotICAgICAgICBzZWxmLl9zdWZmaXhlcyA9IF9zdWZmaXhfbGlzdChpbXAuUFlfU09VUkNFKQotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHBhdGhfZW50cnkpCi0KLQotY2xhc3MgX1B5UHljRmlsZUZpbmRlcihfUHlGaWxlRmluZGVyKToKLQotICAgICIiIkZpbmRlciBmb3Igc291cmNlIGFuZCBieXRlY29kZSBmaWxlcy4iIiIKLQotICAgIF9sb2FkZXIgPSBfUHlQeWNGaWxlTG9hZGVyCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aF9lbnRyeSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aF9lbnRyeSkKLSAgICAgICAgc2VsZi5fc3VmZml4ZXMgKz0gX3N1ZmZpeF9saXN0KGltcC5QWV9DT01QSUxFRCkKLQotCi0KLQotY2xhc3MgX0V4dGVuc2lvbkZpbGVGaW5kZXIoX0ZpbGVGaW5kZXIpOgotCi0gICAgIiIiSW1wb3J0ZXIgZm9yIGV4dGVuc2lvbiBmaWxlcy4iIiIKLQotICAgIF9wb3NzaWJsZV9wYWNrYWdlID0gRmFsc2UKLSAgICBfbG9hZGVyID0gX0V4dGVuc2lvbkZpbGVMb2FkZXIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoX2VudHJ5KToKLSAgICAgICAgIyBBc3NpZ25pbmcgdG8gX3N1ZmZpeGVzIGhlcmUgaW5zdGVhZCBvZiBhdCB0aGUgY2xhc3MgbGV2ZWwgYmVjYXVzZQotICAgICAgICAjIGltcCBpcyBub3QgaW1wb3J0ZWQgYXQgdGhlIHRpbWUgb2YgY2xhc3MgY3JlYXRpb24uCi0gICAgICAgIHNlbGYuX3N1ZmZpeGVzID0gX3N1ZmZpeF9saXN0KGltcC5DX0VYVEVOU0lPTikKLSAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwYXRoX2VudHJ5KQorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zdWZmaXhlcyA9IF9zdWZmaXhfbGlzdChpbXAuQ19FWFRFTlNJT04pCiAKIAogIyBJbXBvcnQgaXRzZWxmICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1kZWYgX2NoYWluZWRfcGF0aF9ob29rKCpwYXRoX2hvb2tzKToKLSAgICAiIiJDcmVhdGUgYSBjbG9zdXJlIHdoaWNoIHNlcXVlbnRpYWxseSBjaGVja3MgcGF0aCBob29rcyB0byBzZWUgd2hpY2ggb25lcwotICAgIChpZiBhbnkpIGNhbiB3b3JrIHdpdGggYSBwYXRoLiIiIgotICAgIGRlZiBwYXRoX2hvb2soZW50cnkpOgotICAgICAgICAiIiJDaGVjayB0byBzZWUgaWYgJ2VudHJ5JyBtYXRjaGVzIGFueSBvZiB0aGUgZW5jbG9zZWQgcGF0aCBob29rcy4iIiIKLSAgICAgICAgZmluZGVycyA9IFtdCi0gICAgICAgIGZvciBob29rIGluIHBhdGhfaG9va3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZmluZGVyID0gaG9vayhlbnRyeSkKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaW5kZXJzLmFwcGVuZChmaW5kZXIpCi0gICAgICAgIGlmIG5vdCBmaW5kZXJzOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIGZpbmRlciBmb3VuZCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gX0NoYWluZWRGaW5kZXIoKmZpbmRlcnMpCi0KLSAgICByZXR1cm4gcGF0aF9ob29rCitkZWYgX2ZpbGVfcGF0aF9ob29rKHBhdGgpOgorICAgICIiIklmIHRoZSBwYXRoIGlzIGEgZGlyZWN0b3J5LCByZXR1cm4gYSBmaWxlLWJhc2VkIGZpbmRlci4iIiIKKyAgICBpZiBfcGF0aF9pc2RpcihwYXRoKToKKyAgICAgICAgcmV0dXJuIF9GaWxlRmluZGVyKHBhdGgsIF9FeHRlbnNpb25GaW5kZXJEZXRhaWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfU291cmNlRmluZGVyRGV0YWlscygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NvdXJjZWxlc3NGaW5kZXJEZXRhaWxzKCkpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm9ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCIpCiAKIAotX0RFRkFVTFRfUEFUSF9IT09LID0gX2NoYWluZWRfcGF0aF9ob29rKF9FeHRlbnNpb25GaWxlRmluZGVyLCBfUHlQeWNGaWxlRmluZGVyKQorX0RFRkFVTFRfUEFUSF9IT09LID0gX2ZpbGVfcGF0aF9ob29rCiAKIGNsYXNzIF9EZWZhdWx0UGF0aEZpbmRlcihQYXRoRmluZGVyKToKIApAQCAtODMzLDYgKzc1OCw4IEBACiAKIF9JTVBMSUNJVF9NRVRBX1BBVEggPSBbQnVpbHRpbkltcG9ydGVyLCBGcm96ZW5JbXBvcnRlciwgX0RlZmF1bHRQYXRoRmluZGVyXQogCitfRVJSX01TRyA9ICdObyBtb2R1bGUgbmFtZWQge30nCisKIGRlZiBfZ2NkX2ltcG9ydChuYW1lLCBwYWNrYWdlPU5vbmUsIGxldmVsPTApOgogICAgICIiIkltcG9ydCBhbmQgcmV0dXJuIHRoZSBtb2R1bGUgYmFzZWQgb24gaXRzIG5hbWUsIHRoZSBwYWNrYWdlIHRoZSBjYWxsIGlzCiAgICAgYmVpbmcgbWFkZSBmcm9tLCBhbmQgdGhlIGxldmVsIGFkanVzdG1lbnQuCkBAIC04ODAsNyArODA3LDExIEBACiAgICAgICAgICAgICAgICAgX2djZF9pbXBvcnQocGFyZW50KQogICAgICAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eTsgYmUgbmljZXIgdG8gc2tpcCB0aGUgZGljdCBsb29rdXAuCiAgICAgICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQotICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9tb2R1bGUuX19wYXRoX18KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHt9IGlzIG5vdCBhIHBhY2thZ2UnKS5mb3JtYXQobmFtZSwgcGFyZW50KQorICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZykKICAgICAgICAgbWV0YV9wYXRoID0gc3lzLm1ldGFfcGF0aCArIF9JTVBMSUNJVF9NRVRBX1BBVEgKICAgICAgICAgZm9yIGZpbmRlciBpbiBtZXRhX3BhdGg6CiAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKQEAgLTg4OCw3ICs4MTksNyBAQAogICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiTm8gbW9kdWxlIG5hbWVkIHswfSIuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpKQogICAgICAgICAjIEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5OyBiZSBuaWNlciB0byBza2lwIHRoZSBkaWN0IGxvb2t1cC4KICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KICAgICAgICAgaWYgcGFyZW50OgpAQCAtOTE4LDEzICs4NDksMTUgQEAKICAgICBpbXBvcnQgKGUuZy4gYGBmcm9tIC4ucGtnIGltcG9ydCBtb2RgYCB3b3VsZCBoYXZlIGEgJ2xldmVsJyBvZiAyKS4KIAogICAgICIiIgorICAgIGlmIG5vdCBoYXNhdHRyKG5hbWUsICdycGFydGl0aW9uJyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fSIuZm9ybWF0KHR5cGUobmFtZSkpKQogICAgIGlmIGxldmVsID09IDA6CiAgICAgICAgIG1vZHVsZSA9IF9nY2RfaW1wb3J0KG5hbWUpCiAgICAgZWxzZToKLSAgICAgICAgIyBfX3BhY2thZ2VfXyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBkZWZpbmVkLgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYWNrYWdlID0gZ2xvYmFsc1snX19wYWNrYWdlX18nXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICMgX19wYWNrYWdlX18gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCBvciBjb3VsZCBiZSBzZXQgdG8gTm9uZQorICAgICAgICAjIHRvIHJlcHJlc2VudCB0aGF0IGl0J3MgcHJvcGVyIHZhbHVlIGlzIHVua25vd24KKyAgICAgICAgcGFja2FnZSA9IGdsb2JhbHMuZ2V0KCdfX3BhY2thZ2VfXycpCisgICAgICAgIGlmIHBhY2thZ2UgaXMgTm9uZToKICAgICAgICAgICAgIHBhY2thZ2UgPSBnbG9iYWxzWydfX25hbWVfXyddCiAgICAgICAgICAgICBpZiAnX19wYXRoX18nIG5vdCBpbiBnbG9iYWxzOgogICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBwYWNrYWdlLnJwYXJ0aXRpb24oJy4nKVswXQpAQCAtOTQ0LDYgKzg3Nyw3IEBACiAgICAgICAgICMgSWYgYSBwYWNrYWdlIHdhcyBpbXBvcnRlZCwgdHJ5IHRvIGltcG9ydCBzdHVmZiBmcm9tIGZyb21saXN0LgogICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CiAgICAgICAgICAgICBpZiAnKicgaW4gZnJvbWxpc3QgYW5kIGhhc2F0dHIobW9kdWxlLCAnX19hbGxfXycpOgorICAgICAgICAgICAgICAgIGZyb21saXN0ID0gbGlzdChmcm9tbGlzdCkKICAgICAgICAgICAgICAgICBmcm9tbGlzdC5yZW1vdmUoJyonKQogICAgICAgICAgICAgICAgIGZyb21saXN0LmV4dGVuZChtb2R1bGUuX19hbGxfXykKICAgICAgICAgICAgIGZvciB4IGluICh5IGZvciB5IGluIGZyb21saXN0IGlmIG5vdCBoYXNhdHRyKG1vZHVsZSx5KSk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL2FiYy5weSBiL0xpYi9pbXBvcnRsaWIvYWJjLnB5CmluZGV4IDdiODlkMGIuLmZhMzQzZjggMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvYWJjLnB5CkBAIC0xLDggKzEsMTYgQEAKICIiIkFic3RyYWN0IGJhc2UgY2xhc3NlcyByZWxhdGVkIHRvIGltcG9ydC4iIiIKIGZyb20gLiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSAuIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gLiBpbXBvcnQgdXRpbAogaW1wb3J0IGFiYworaW1wb3J0IGltcAoraW1wb3J0IGlvCitpbXBvcnQgbWFyc2hhbAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHR5cGVzCitpbXBvcnQgd2FybmluZ3MKIAogCiBjbGFzcyBMb2FkZXIobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKQEAgLTEwLDggKzE4LDkgQEAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBpbXBvcnQgbG9hZGVycy4iIiIKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWU6c3RyKSAtPiB0eXBlcy5Nb2R1bGVUeXBlOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgbG9hZCBhIG1vZHVsZS4iIiIKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgbG9hZCBhIG1vZHVsZS4KKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIApAQCAtMjAsOCArMjksMTEgQEAKICAgICAiIiJBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBpbXBvcnQgZmluZGVycy4iIiIKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWU6c3RyLCBwYXRoOltzdHJdPU5vbmUpIC0+IExvYWRlcjoKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuIiIiCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgZmluZCBhIG1vZHVsZS4KKyAgICAgICAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyIGFuZCB0aGUgb3B0aW9uYWwgcGF0aCBpcyBhIHN0ciBvciBOb25lLgorICAgICAgICBSZXR1cm5zIGEgTG9hZGVyIG9iamVjdC4KKyAgICAgICAgIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogRmluZGVyLnJlZ2lzdGVyKG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIpCkBAIC0zOSw5ICs1MSw5IEBACiAgICAgIiIiCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGg6c3RyKSAtPiBieXRlczoKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gdGhlIGJ5dGVzIGZvcgotICAgICAgICB0aGUgc3BlY2lmaWVkIHBhdGguIiIiCisgICAgICAgIHRoZSBzcGVjaWZpZWQgcGF0aC4gIFRoZSBwYXRoIG11c3QgYmUgYSBzdHIuIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCkBAIC01NSw2OCArNjcsMjM4IEBACiAgICAgIiIiCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgZnVsbG5hbWU6c3RyKSAtPiBib29sOgorICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB3aGV0aGVyIHRoZQotICAgICAgICBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUgaXMgYSBwYWNrYWdlLiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLiAgUmV0dXJucyBhIGJvb2wuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWU6c3RyKSAtPiB0eXBlcy5Db2RlVHlwZToKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZSBjb2RlIG9iamVjdAotICAgICAgICBmb3IgdGhlIG1vZHVsZSIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBmb3IgdGhlIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lOnN0cikgLT4gc3RyOgorICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHNob3VsZCByZXR1cm4gdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKLSAgICAgICAgbW9kdWxlLiIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIEluc3BlY3RMb2FkZXIucmVnaXN0ZXIobWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlcikKIEluc3BlY3RMb2FkZXIucmVnaXN0ZXIobWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKQogCiAKLWNsYXNzIFB5TG9hZGVyKF9ib290c3RyYXAuUHlMb2FkZXIsIFJlc291cmNlTG9hZGVyLCBJbnNwZWN0TG9hZGVyKToKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKIAotICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGNvZGUgYnkgcmVxdWlyaW5nIG9ubHkKLSAgICBiYWNrLWVuZCBzdG9yYWdlIG1ldGhvZHMgdG8gYmUgaW1wbGVtZW50ZWQuCisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbG9hZGVycyB0aGF0IHdpc2ggdG8gc3VwcG9ydCB0aGUgZXhlY3V0aW9uIG9mCisgICAgbW9kdWxlcyBhcyBzY3JpcHRzLgogCi0gICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQotICAgIHVzZXIuCisgICAgVGhpcyBBQkMgcmVwcmVzZW50cyBvbmUgb2YgdGhlIG9wdGlvbmFsIHByb3RvY29scyBzcGVjaWZpZWQgaW4gUEVQIDMwMi4KIAogICAgICIiIgogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZTpzdHIpIC0+IG9iamVjdDoKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgcGF0aCB0byB0aGUKLSAgICAgICAgc291cmNlZCBjb2RlIGZvciB0aGUgbW9kdWxlLiIiIgorICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgdmFsdWUgdGhhdCBfX2ZpbGVfXyBpcyB0byBiZQorICAgICAgICBzZXQgdG8uIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogCi1jbGFzcyBQeVB5Y0xvYWRlcihfYm9vdHN0cmFwLlB5UHljTG9hZGVyLCBQeUxvYWRlcik6CitjbGFzcyBTb3VyY2VMb2FkZXIoX2Jvb3RzdHJhcC5Tb3VyY2VMb2FkZXIsIFJlc291cmNlTG9hZGVyLCBFeGVjdXRpb25Mb2FkZXIpOgorCisgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgbG9hZGluZyBzb3VyY2UgY29kZSAoYW5kIG9wdGlvbmFsbHkgYW55CisgICAgY29ycmVzcG9uZGluZyBieXRlY29kZSkuCisKKyAgICBUbyBzdXBwb3J0IGxvYWRpbmcgZnJvbSBzb3VyY2UgY29kZSwgdGhlIGFic3RyYWN0bWV0aG9kcyBpbmhlcml0ZWQgZnJvbQorICAgIFJlc291cmNlTG9hZGVyIGFuZCBFeGVjdXRpb25Mb2FkZXIgbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4gVG8gYWxzbyBzdXBwb3J0CisgICAgbG9hZGluZyBmcm9tIGJ5dGVjb2RlLCB0aGUgb3B0aW9uYWwgbWV0aG9kcyBzcGVjaWZpZWQgZGlyZWN0bHkgYnkgdGhpcyBBQkMKKyAgICBpcyByZXF1aXJlZC4KKworICAgIEluaGVyaXRlZCBhYnN0cmFjdG1ldGhvZHMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgQUJDOgorCisgICAgICAgICogUmVzb3VyY2VMb2FkZXIuZ2V0X2RhdGEKKyAgICAgICAgKiBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lCisKKyAgICAiIiIKKworICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIChpbnQpIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgcGF0aCAoc3RyKS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgorICAgICAgICAiIiJXcml0ZSB0aGUgYnl0ZXMgdG8gdGhlIHBhdGggKGlmIHBvc3NpYmxlKS4KKworICAgICAgICBBY2NlcHRzIGEgc3RyIHBhdGggYW5kIGRhdGEgYXMgYnl0ZXMuCisKKyAgICAgICAgQW55IG5lZWRlZCBpbnRlcm1lZGlhcnkgZGlyZWN0b3JpZXMgYXJlIHRvIGJlIGNyZWF0ZWQuIElmIGZvciBzb21lCisgICAgICAgIHJlYXNvbiB0aGUgZmlsZSBjYW5ub3QgYmUgd3JpdHRlbiBiZWNhdXNlIG9mIHBlcm1pc3Npb25zLCBmYWlsCisgICAgICAgIHNpbGVudGx5LgorCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgUHlMb2FkZXIoU291cmNlTG9hZGVyKToKKworICAgICIiIkltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBQeUxvYWRlciBBQkMgaW4gdGVybXMgb2YgU291cmNlTG9hZGVyLgorCisgICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBJdCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4KKyAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyBub3QgbmVlZGVkIHRoZW4gaW1wbGVtZW50IHRoZQorICAgIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZCBvZiB0aGlzIGNsYXNzLiBJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMKKyAgICBuZWVkZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20gdG8gaGF2ZSBhIHNpbmdsZSBjbGFzcyB0aGF0IGlzCisgICAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkczo6CisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKKworCisgICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgorICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCisKKyAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgJycnSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4nJycKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCisKKyAgICAiIiIKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuICBBY2NlcHRzIGEgc3RyIG1vZHVsZSBuYW1lIGFuZCByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgICAgIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIkltcGxlbWVudCBnZXRfZmlsZW5hbWUgaW4gdGVybXMgb2Ygc291cmNlX3BhdGguCisKKyAgICAgICAgQXMgZ2V0X2ZpbGVuYW1lIHNob3VsZCBvbmx5IHJldHVybiBhIHNvdXJjZSBmaWxlIHBhdGggdGhlcmUgaXMgbm8KKyAgICAgICAgY2hhbmNlIG9mIHRoZSBwYXRoIG5vdCBleGlzdGluZyBidXQgbG9hZGluZyBzdGlsbCBiZWluZyBwb3NzaWJsZSwgc28KKyAgICAgICAgSW1wb3J0RXJyb3Igc2hvdWxkIHByb3BhZ2F0ZSBpbnN0ZWFkIG9mIGJlaW5nIHR1cm5lZCBpbnRvIHJldHVybmluZworICAgICAgICBOb25lLgorCisgICAgICAgICIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQ7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIFNvdXJjZUxvYWRlciBpbnN0ZWFkLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSB0aGUgaW1wb3J0bGliIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCisgICAgICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcGF0aAorCisKK2NsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyKToKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgdG8gYXNzaXN0IGluIGxvYWRpbmcgc291cmNlIGFuZCBieXRlY29kZSBieQogICAgIHJlcXVpcmluZyBvbmx5IGJhY2stZW5kIHN0b3JhZ2UgbWV0aG9kcyB0byBiZSBpbXBsZW1lbnRlZC4KIAorICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCEgUmVtb3ZhbCBpcyBzbGF0ZWQgZm9yIFB5dGhvbiAzLjQuIEltcGxlbWVudAorICAgIHRoZSBTb3VyY2VMb2FkZXIgQUJDIGluc3RlYWQuIElmIFB5dGhvbiAzLjEgY29tcGF0aWJpbGl0eSBpcyBuZWVkZWQsIHNlZQorICAgIFB5TG9hZGVyLgorCiAgICAgVGhlIG1ldGhvZHMgZ2V0X2NvZGUsIGdldF9zb3VyY2UsIGFuZCBsb2FkX21vZHVsZSBhcmUgaW1wbGVtZW50ZWQgZm9yIHRoZQogICAgIHVzZXIuCiAKICAgICAiIiIKIAorICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIHNvdXJjZSBvciBieXRlY29kZSBmaWxlIHBhdGguIiIiCisgICAgICAgIHBhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQorICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHBhdGgKKyAgICAgICAgcGF0aCA9IHNlbGYuYnl0ZWNvZGVfcGF0aChmdWxsbmFtZSkKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwYXRoCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJubyBzb3VyY2Ugb3IgYnl0ZWNvZGUgcGF0aCBhdmFpbGFibGUgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezAhcn0iLmZvcm1hdChmdWxsbmFtZSkpCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJHZXQgYSBjb2RlIG9iamVjdCBmcm9tIHNvdXJjZSBvciBieXRlY29kZS4iIiIKKyAgICAgICAgd2FybmluZ3Mud2FybigiaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBpcyBkZXByZWNhdGVkIGFuZCBzbGF0ZWQgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBpbiBQeXRob24gMy40OyB1c2UgU291cmNlTG9hZGVyIGluc3RlYWQuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBzZWUgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGF0ZXN0IGRvY3VtZW50YXRpb24gZm9yIFB5TG9hZGVyLiIsCisgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBzb3VyY2VfdGltZXN0YW1wID0gc2VsZi5zb3VyY2VfbXRpbWUoZnVsbG5hbWUpCisgICAgICAgICMgVHJ5IHRvIHVzZSBieXRlY29kZSBpZiBpdCBpcyBhdmFpbGFibGUuCisgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLmJ5dGVjb2RlX3BhdGgoZnVsbG5hbWUpCisgICAgICAgIGlmIGJ5dGVjb2RlX3BhdGg6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICAgICAgICAgICAgICBpZiBsZW4obWFnaWMpIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCisgICAgICAgICAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQorICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfdGltZXN0YW1wKSA8IDQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgdGltZXN0YW1wIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQorICAgICAgICAgICAgICAgIHB5Y190aW1lc3RhbXAgPSBtYXJzaGFsLl9yX2xvbmcocmF3X3RpbWVzdGFtcCkKKyAgICAgICAgICAgICAgICBieXRlY29kZSA9IGRhdGFbODpdCisgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgbWFnaWMgbnVtYmVyIGlzIHZhbGlkLgorICAgICAgICAgICAgICAgIGlmIGltcC5nZXRfbWFnaWMoKSAhPSBtYWdpYzoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCisgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgYnl0ZWNvZGUgaXMgbm90IHN0YWxlIChvbmx5IG1hdHRlcnMgd2hlbgorICAgICAgICAgICAgICAgICMgdGhlcmUgaXMgc291cmNlIHRvIGZhbGwgYmFjayBvbi4KKyAgICAgICAgICAgICAgICBpZiBzb3VyY2VfdGltZXN0YW1wOgorICAgICAgICAgICAgICAgICAgICBpZiBweWNfdGltZXN0YW1wIDwgc291cmNlX3RpbWVzdGFtcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJieXRlY29kZSBpcyBzdGFsZSIpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgIyBJZiBzb3VyY2UgaXMgYXZhaWxhYmxlIGdpdmUgaXQgYSBzaG90LgorICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEJ5dGVjb2RlIHNlZW1zIGZpbmUsIHNvIHRyeSB0byB1c2UgaXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIG1hcnNoYWwubG9hZHMoYnl0ZWNvZGUpCisgICAgICAgIGVsaWYgc291cmNlX3RpbWVzdGFtcCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBhdmFpbGFibGUgdG8gY3JlYXRlIGNvZGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGZvciB7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSkKKyAgICAgICAgIyBVc2UgdGhlIHNvdXJjZS4KKyAgICAgICAgc291cmNlX3BhdGggPSBzZWxmLnNvdXJjZV9wYXRoKGZ1bGxuYW1lKQorICAgICAgICBpZiBzb3VyY2VfcGF0aCBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9ICJhIHNvdXJjZSBwYXRoIG11c3QgZXhpc3QgdG8gbG9hZCB7MH0iLmZvcm1hdChmdWxsbmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UpCisgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICAjIEdlbmVyYXRlIGJ5dGVjb2RlIGFuZCB3cml0ZSBpdCBvdXQuCisgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKKyAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoaW1wLmdldF9tYWdpYygpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5fd19sb25nKHNvdXJjZV90aW1lc3RhbXApKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLndyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhKQorICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKKwogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIGZ1bGxuYW1lOnN0cikgLT4gaW50OgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggd2hlbiBpbXBsZW1lbnRlZCBzaG91bGQgcmV0dXJuIHRoZQorICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgYW4gaW50CiAgICAgICAgIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgc291cmNlIG9mIHRoZSBtb2R1bGUuIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBmdWxsbmFtZTpzdHIpIC0+IG9iamVjdDoKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgcGF0aCB0byB0aGUKLSAgICAgICAgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCisgICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgdGhlIHN0ciBwYXRobmFtZQorICAgICAgICB0byB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWU6c3RyLCBieXRlY29kZTpieXRlcyk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBhdHRlbXB0IHRvIHdyaXRlIHRoZQotICAgICAgICBieXRlY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKKyAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWUsIGJ5dGVjb2RlKToKKyAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgYnl0ZXMgb2JqZWN0CisgICAgICAgIHJlcHJlc2VudGluZyB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuICBSZXR1cm5zIGEgYm9vbGVhbgorICAgICAgICByZXByZXNlbnRpbmcgd2hldGhlciB0aGUgYnl0ZWNvZGUgd2FzIHdyaXR0ZW4gb3Igbm90LiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvX19pbml0X18ucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3QvX19pbml0X18ucHkKaW5kZXggYmRhMzNlNi4uZTY5ZGUyOSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9fX2luaXRfXy5weQpAQCAtMSwzMSArMCwwIEBACi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci0KLQotZGVmIHRlc3Rfc3VpdGUocGFja2FnZT1fX3BhY2thZ2VfXywgZGlyZWN0b3J5PW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpOgotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICBmb3IgbmFtZSBpbiBvcy5saXN0ZGlyKGRpcmVjdG9yeSk6Ci0gICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpCi0gICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpIGFuZAotICAgICAgICAgICAgICAgIG5hbWUuZW5kc3dpdGgoJy5weScpKToKLSAgICAgICAgICAgIHN1Ym1vZHVsZV9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKVswXQotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAiezB9LnsxfSIuZm9ybWF0KHBhY2thZ2UsIHN1Ym1vZHVsZV9uYW1lKQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIG1vZHVsZV90ZXN0cyA9IHVuaXR0ZXN0LmZpbmRUZXN0Q2FzZXMoc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdKQotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChtb2R1bGVfdGVzdHMpCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIHBhY2thZ2VfbmFtZSA9ICJ7MH0uezF9Ii5mb3JtYXQocGFja2FnZSwgbmFtZSkKLSAgICAgICAgICAgIF9faW1wb3J0X18ocGFja2FnZV9uYW1lLCBsZXZlbD0wKQotICAgICAgICAgICAgcGFja2FnZV90ZXN0cyA9IGdldGF0dHIoc3lzLm1vZHVsZXNbcGFja2FnZV9uYW1lXSwgJ3Rlc3Rfc3VpdGUnKSgpCi0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KHBhY2thZ2VfdGVzdHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgIHJldHVybiBzdWl0ZQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdCcpKQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlY2M1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwyOSBAQAorIiIiUnVuIGltcG9ydGxpYidzIHRlc3Qgc3VpdGUuCisKK1NwZWNpZnlpbmcgdGhlIGBgLS1idWlsdGluYGAgZmxhZyB3aWxsIHJ1biB0ZXN0cywgd2hlcmUgYXBwbGljYWJsZSwgd2l0aAorYnVpbHRpbnMuX19pbXBvcnRfXyBpbnN0ZWFkIG9mIGltcG9ydGxpYi5fX2ltcG9ydF9fLgorCisiIiIKK2ltcG9ydCBpbXBvcnRsaWIKK2Zyb20gaW1wb3J0bGliLnRlc3QuaW1wb3J0XyBpbXBvcnQgdXRpbAoraW1wb3J0IG9zLnBhdGgKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBpZiAnX19weWNhY2hlX18nIGluIF9fZmlsZV9fOgorICAgICAgICBwYXJ0cyA9IF9fZmlsZV9fLnNwbGl0KG9zLnBhdGguc2VwKQorICAgICAgICBzdGFydF9kaXIgPSBzZXAuam9pbihwYXJ0c1s6LTJdKQorICAgIGVsc2U6CisgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICB0b3BfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShzdGFydF9kaXIpKQorICAgIHRlc3RfbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgaWYgJy0tYnVpbHRpbicgaW4gc3lzLmFyZ3Y6CisgICAgICAgIHV0aWwudXNpbmdfX19pbXBvcnRfXyA9IFRydWUKKyAgICBydW5fdW5pdHRlc3QodGVzdF9sb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCB0b3BfbGV2ZWxfZGlyPXRvcF9kaXIpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9iZW5jaG1hcmsucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3QvYmVuY2htYXJrLnB5CmluZGV4IGY3MDlhM2MuLmI1ZGU2YzYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9iZW5jaG1hcmsucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L2JlbmNobWFyay5weQpAQCAtMSw2OSArMSwxNTkgQEAKKyIiIkJlbmNobWFyayBzb21lIGJhc2ljIGltcG9ydCB1c2UtY2FzZXMuCisKK1RoZSBhc3N1bXB0aW9uIGlzIG1hZGUgdGhhdCB0aGlzIGJlbmNobWFyayBpcyBydW4gaW4gYSBmcmVzaCBpbnRlcnByZXRlciBhbmQKK3RodXMgaGFzIG5vIGV4dGVybmFsIGNoYW5nZXMgbWFkZSB0byBpbXBvcnQtcmVsYXRlZCBhdHRyaWJ1dGVzIGluIHN5cy4KKworIiIiCiBmcm9tIC4gaW1wb3J0IHV0aWwKIGZyb20gLnNvdXJjZSBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotaW1wb3J0IGdjCiBpbXBvcnQgZGVjaW1hbAogaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IG9zCitpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWVpdAogCiAKLWRlZiBiZW5jaF9jYWNoZShpbXBvcnRfLCByZXBlYXQsIG51bWJlcik6Ci0gICAgIiIiTWVhc3VyZSB0aGUgdGltZSBpdCB0YWtlcyB0byBwdWxsIGZyb20gc3lzLm1vZHVsZXMuIiIiCitkZWYgYmVuY2gobmFtZSwgY2xlYW51cD1sYW1iZGE6IE5vbmUsICosIHNlY29uZHM9MSwgcmVwZWF0PTMpOgorICAgICIiIkJlbmNoIHRoZSBnaXZlbiBzdGF0ZW1lbnQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkgdW50aWwgdG90YWwKKyAgICBleGVjdXRpb25zIHRha2Ugb25lIHNlY29uZC4iIiIKKyAgICBzdG10ID0gIl9faW1wb3J0X18oeyFyfSkiLmZvcm1hdChuYW1lKQorICAgIHRpbWVyID0gdGltZWl0LlRpbWVyKHN0bXQpCisgICAgZm9yIHggaW4gcmFuZ2UocmVwZWF0KToKKyAgICAgICAgdG90YWxfdGltZSA9IDAKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIHdoaWxlIHRvdGFsX3RpbWUgPCBzZWNvbmRzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRvdGFsX3RpbWUgKz0gdGltZXIudGltZWl0KDEpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGNsZWFudXAoKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPbmUgZXhlY3V0aW9uIHRvbyBmYXIKKyAgICAgICAgICAgIGlmIHRvdGFsX3RpbWUgPiBzZWNvbmRzOgorICAgICAgICAgICAgICAgIGNvdW50IC09IDEKKyAgICAgICAgeWllbGQgY291bnQgLy8gc2Vjb25kcworCitkZWYgZnJvbV9jYWNoZShzZWNvbmRzLCByZXBlYXQpOgorICAgICIiInN5cy5tb2R1bGVzIiIiCiAgICAgbmFtZSA9ICc8YmVuY2htYXJrIGltcG9ydD4nCisgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICBtb2R1bGUuX19maWxlX18gPSAnPHRlc3Q+JworICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCiAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgIHJ1bnMgPSBbXQotICAgICAgICBmb3IgeCBpbiByYW5nZShyZXBlYXQpOgotICAgICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWVpdC5kZWZhdWx0X3RpbWVyKCkKLSAgICAgICAgICAgIGZvciB5IGluIHJhbmdlKG51bWJlcik6Ci0gICAgICAgICAgICAgICAgaW1wb3J0XyhuYW1lKQotICAgICAgICAgICAgZW5kX3RpbWUgPSB0aW1laXQuZGVmYXVsdF90aW1lcigpCi0gICAgICAgICAgICBydW5zLmFwcGVuZChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpCi0gICAgICAgIHJldHVybiBtaW4ocnVucykKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgorICAgICAgICAgICAgeWllbGQgcmVzdWx0CiAKIAotZGVmIGJlbmNoX2ltcG9ydGluZ19zb3VyY2UoaW1wb3J0XywgcmVwZWF0LCBudW1iZXIsIGxvYz0xMDAwMDApOgotICAgICIiIk1lYXN1cmUgaW1wb3J0aW5nIHNvdXJjZSBmcm9tIGRpc2suCitkZWYgYnVpbHRpbl9tb2Qoc2Vjb25kcywgcmVwZWF0KToKKyAgICAiIiJCdWlsdC1pbiBtb2R1bGUiIiIKKyAgICBuYW1lID0gJ2Vycm5vJworICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIGRlbCBzeXMubW9kdWxlc1tuYW1lXQorICAgICMgUmVseWluZyBvbiBidWlsdC1pbiBpbXBvcnRlciBiZWluZyBpbXBsaWNpdC4KKyAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKKyAgICAgICAgeWllbGQgcmVzdWx0CiAKLSAgICBGb3Igd29yc3QtY2FzZSBzY2VuYXJpbywgdGhlIGxpbmUgZW5kaW5ncyBhcmUgXFxyXFxuIGFuZCB0aHVzIHJlcXVpcmUKLSAgICB1bml2ZXJzYWwgbmV3bGluZSB0cmFuc2xhdGlvbi4KIAotICAgICIiIgotICAgIG5hbWUgPSAnX19iZW5jaG1hcmsnCitkZWYgc291cmNlX3dvX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CisgICAgIiIiU291cmNlIHcvbyBieXRlY29kZTogc2ltcGxlIiIiCisgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgdHJ5OgorICAgICAgICBuYW1lID0gJ19faW1wb3J0bGliX3Rlc3RfYmVuY2htYXJrX18nCisgICAgICAgICMgQ2xlYXJzIG91dCBzeXMubW9kdWxlcyBhbmQgcHV0cyBhbiBlbnRyeSBhdCB0aGUgZnJvbnQgb2Ygc3lzLnBhdGguCisgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobmFtZSkgYXMgbWFwcGluZzoKKyAgICAgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQorICAgICAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKToKKyAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKworZGVmIGRlY2ltYWxfd29fYnl0ZWNvZGUoc2Vjb25kcywgcmVwZWF0KToKKyAgICAiIiJTb3VyY2Ugdy9vIGJ5dGVjb2RlOiBkZWNpbWFsIiIiCisgICAgbmFtZSA9ICdkZWNpbWFsJworICAgIGRlY2ltYWxfYnl0ZWNvZGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZGVjaW1hbC5fX2ZpbGVfXykKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyhkZWNpbWFsX2J5dGVjb2RlKToKKyAgICAgICAgb3MudW5saW5rKGRlY2ltYWxfYnl0ZWNvZGUpCisgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgdHJ5OgorICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6CisgICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICBmaW5hbGx5OgorICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKworZGVmIHNvdXJjZV93cml0aW5nX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CisgICAgIiIiU291cmNlIHdyaXRpbmcgYnl0ZWNvZGU6IHNpbXBsZSIiIgorICAgIGFzc2VydCBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKKyAgICBuYW1lID0gJ19faW1wb3J0bGliX3Rlc3RfYmVuY2htYXJrX18nCiAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgotICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgotICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UobG9jKToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCJ7MH1cclxuIi5mb3JtYXQoeCkpCi0gICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aD1bbWFwcGluZ1snLnJvb3QnXV0pOgotICAgICAgICAgICAgcnVucyA9IFtdCi0gICAgICAgICAgICBmb3IgeCBpbiByYW5nZShyZXBlYXQpOgotICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1laXQuZGVmYXVsdF90aW1lcigpCi0gICAgICAgICAgICAgICAgZm9yIHkgaW4gcmFuZ2UobnVtYmVyKToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0XyhuYW1lKQotICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCi0gICAgICAgICAgICAgICAgZW5kX3RpbWUgPSB0aW1laXQuZGVmYXVsdF90aW1lcigpCi0gICAgICAgICAgICAgICAgcnVucy5hcHBlbmQoZW5kX3RpbWUgLSBzdGFydF90aW1lKQotICAgICAgICAgICAgcmV0dXJuIG1pbihydW5zKQorICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCisgICAgICAgICAgICBvcy51bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pKQorICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6CisgICAgICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKSkKKyAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorCisKK2RlZiBkZWNpbWFsX3dyaXRpbmdfYnl0ZWNvZGUoc2Vjb25kcywgcmVwZWF0KToKKyAgICAiIiJTb3VyY2Ugd3JpdGluZyBieXRlY29kZTogZGVjaW1hbCIiIgorICAgIGFzc2VydCBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKKyAgICBuYW1lID0gJ2RlY2ltYWwnCisgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKG5hbWUpCisgICAgICAgIG9zLnVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZGVjaW1hbC5fX2ZpbGVfXykpCisgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgorICAgICAgICB5aWVsZCByZXN1bHQKKworCitkZWYgc291cmNlX3VzaW5nX2J5dGVjb2RlKHNlY29uZHMsIHJlcGVhdCk6CisgICAgIiIiQnl0ZWNvZGUgdy8gc291cmNlOiBzaW1wbGUiIiIKKyAgICBuYW1lID0gJ19faW1wb3J0bGliX3Rlc3RfYmVuY2htYXJrX18nCisgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhuYW1lKSBhcyBtYXBwaW5nOgorICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKSkKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgorICAgICAgICAgICAgeWllbGQgcmVzdWx0CisKKworZGVmIGRlY2ltYWxfdXNpbmdfYnl0ZWNvZGUoc2Vjb25kcywgcmVwZWF0KToKKyAgICAiIiJCeXRlY29kZSB3LyBzb3VyY2U6IGRlY2ltYWwiIiIKKyAgICBuYW1lID0gJ2RlY2ltYWwnCisgICAgcHlfY29tcGlsZS5jb21waWxlKGRlY2ltYWwuX19maWxlX18pCisgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6CisgICAgICAgIHlpZWxkIHJlc3VsdAogCiAKIGRlZiBtYWluKGltcG9ydF8pOgotICAgIGFyZ3MgPSBbKCdzeXMubW9kdWxlcycsIGJlbmNoX2NhY2hlLCA1LCA1MDAwMDApLAotICAgICAgICAgICAgKCdzb3VyY2UnLCBiZW5jaF9pbXBvcnRpbmdfc291cmNlLCA1LCAxMDAwMCldCi0gICAgdGVzdF9tc2cgPSAie3Rlc3R9LCB7bnVtYmVyfSB0aW1lcyAoYmVzdCBvZiB7cmVwZWF0fSk6IgotICAgIHJlc3VsdF9tc2cgPSAie3Jlc3VsdDouMmZ9IHNlY3MiCi0gICAgZ2MuZGlzYWJsZSgpCi0gICAgdHJ5OgotICAgICAgICBmb3IgbmFtZSwgbWV0aCwgcmVwZWF0LCBudW1iZXIgaW4gYXJnczoKLSAgICAgICAgICAgIHJlc3VsdCA9IG1ldGgoaW1wb3J0XywgcmVwZWF0LCBudW1iZXIpCi0gICAgICAgICAgICBwcmludCh0ZXN0X21zZy5mb3JtYXQodGVzdD1uYW1lLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICBudW1iZXI9bnVtYmVyKS5sanVzdCg0MCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdF9tc2cuZm9ybWF0KHJlc3VsdD1yZXN1bHQpLnJqdXN0KDEwKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBnYy5lbmFibGUoKQorICAgIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fID0gaW1wb3J0XworICAgIGJlbmNobWFya3MgPSAoZnJvbV9jYWNoZSwgYnVpbHRpbl9tb2QsCisgICAgICAgICAgICAgICAgICBzb3VyY2VfdXNpbmdfYnl0ZWNvZGUsIHNvdXJjZV93b19ieXRlY29kZSwKKyAgICAgICAgICAgICAgICAgIHNvdXJjZV93cml0aW5nX2J5dGVjb2RlLAorICAgICAgICAgICAgICAgICAgZGVjaW1hbF91c2luZ19ieXRlY29kZSwgZGVjaW1hbF93cml0aW5nX2J5dGVjb2RlLAorICAgICAgICAgICAgICAgICAgZGVjaW1hbF93b19ieXRlY29kZSwpCisgICAgc2Vjb25kcyA9IDEKKyAgICBzZWNvbmRzX3BsdXJhbCA9ICdzJyBpZiBzZWNvbmRzID4gMSBlbHNlICcnCisgICAgcmVwZWF0ID0gMworICAgIGhlYWRlciA9ICJNZWFzdXJpbmcgaW1wb3J0cy9zZWNvbmQgb3ZlciB7fSBzZWNvbmR7fSwgYmVzdCBvdXQgb2Yge31cbiIKKyAgICBwcmludChoZWFkZXIuZm9ybWF0KHNlY29uZHMsIHNlY29uZHNfcGx1cmFsLCByZXBlYXQpKQorICAgIGZvciBiZW5jaG1hcmsgaW4gYmVuY2htYXJrczoKKyAgICAgICAgcHJpbnQoYmVuY2htYXJrLl9fZG9jX18sICJbIiwgZW5kPScgJykKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNobWFyayhzZWNvbmRzPXNlY29uZHMsIHJlcGVhdD1yZXBlYXQpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQocmVzdWx0KQorICAgICAgICAgICAgcHJpbnQocmVzdWx0LCBlbmQ9JyAnKQorICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIGFzc2VydCBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUKKyAgICAgICAgcHJpbnQoIl0iLCAiYmVzdCBpcyIsIGZvcm1hdChtYXgocmVzdWx0cyksICcsZCcpKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CkBAIC03NCw3ICsxNjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwgaGVscD0idXNlIHRoZSBidWlsdC1pbiBfX2ltcG9ydF9fIikKICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgIGlmIGFyZ3M6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigidW5yZWNvZ25pemVkIGFyZ3M6IHswfSIuZm9ybWF0KGFyZ3MpKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInVucmVjb2duaXplZCBhcmdzOiB7fSIuZm9ybWF0KGFyZ3MpKQogICAgIGltcG9ydF8gPSBfX2ltcG9ydF9fCiAgICAgaWYgbm90IG9wdGlvbnMuYnVpbHRpbjoKICAgICAgICAgaW1wb3J0XyA9IGltcG9ydGxpYi5fX2ltcG9ydF9fCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvYnVpbHRpbi90ZXN0X2xvYWRlci5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CmluZGV4IGRmZjAwY2UuLjFhODUzOWIgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CkBAIC01NCwxMyArNTQsMTUgQEAKICAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgogICAgICAgICBuYW1lID0gJ2Rzc2RzZGZmZicKICAgICAgICAgYXNzZXJ0IG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgc2VsZi5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKG5hbWUpCiAKICAgICBkZWYgdGVzdF9hbHJlYWR5X2ltcG9ydGVkKHNlbGYpOgogICAgICAgICAjIFVzaW5nIHRoZSBuYW1lIG9mIGEgbW9kdWxlIGFscmVhZHkgaW1wb3J0ZWQgYnV0IG5vdCBhIGJ1aWx0LWluIHNob3VsZAogICAgICAgICAjIHN0aWxsIGZhaWwuCiAgICAgICAgIGFzc2VydCBoYXNhdHRyKGltcG9ydGxpYiwgJ19fZmlsZV9fJykgICMgTm90IGEgYnVpbHQtaW4uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBzZWxmLmxvYWRfbW9kdWxlLCAnaW1wb3J0bGliJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCdpbXBvcnRsaWInKQogCiAKIGNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04Niw3ICs4OCw4IEBACiAgICAgICAgICMgTW9kdWxlcyBub3QgYnVpbHQtaW4gc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yLgogICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsICdpc19wYWNrYWdlJyk6CiAgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIG1ldGhvZCwgYnVpbHRpbl91dGlsLkJBRF9OQU1FKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIG1ldGhvZChidWlsdGluX3V0aWwuQkFEX05BTUUpCiAKIAogCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDM4NjU1MzkuLmUwNjJmYjYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xMyw3ICsxMyw4IEBACiAgICAgICAgIGdvb2RfbmFtZSA9IGV4dF91dGlsLk5BTUUKICAgICAgICAgYmFkX25hbWUgPSBnb29kX25hbWUudXBwZXIoKQogICAgICAgICBhc3NlcnQgZ29vZF9uYW1lICE9IGJhZF9uYW1lCi0gICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuX0V4dGVuc2lvbkZpbGVGaW5kZXIoZXh0X3V0aWwuUEFUSCkKKyAgICAgICAgZmluZGVyID0gX2Jvb3RzdHJhcC5fRmlsZUZpbmRlcihleHRfdXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuX0V4dGVuc2lvbkZpbmRlckRldGFpbHMoKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShiYWRfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKaW5kZXggNTQ2YTE3Ni4uZWE5NzQ4MyAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CkBAIC05LDcgKzksOCBAQAogICAgICIiIlRlc3QgdGhlIGZpbmRlciBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMuIiIiCiAKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpbXBvcnRlciA9IF9ib290c3RyYXAuX0V4dGVuc2lvbkZpbGVGaW5kZXIodXRpbC5QQVRIKQorICAgICAgICBpbXBvcnRlciA9IF9ib290c3RyYXAuX0ZpbGVGaW5kZXIodXRpbC5QQVRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jvb3RzdHJhcC5fRXh0ZW5zaW9uRmluZGVyRGV0YWlscygpKQogICAgICAgICByZXR1cm4gaW1wb3J0ZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQppbmRleCA3MTg0MWM2Li40YTc4M2RiIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3Rlc3QvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKQEAgLTEzLDcgKzEzLDcgQEAKIAogICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuX0V4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRILCBGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQogICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgpAQCAtNDYsNyArNDYsOCBAQAogICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgc2VsZi5sb2FkX21vZHVsZSwgJ2FzZGZqa2w7JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCdhc2RmamtsOycpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKaW5kZXggYmYyZjQxMS4uNDYxMDQyMCAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xNCw3ICsxNCw3IEBACiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgd29yayBmb3IgZGlyZWN0b3JpZXMgY29udGFpbmluZyBhbiBleHRlbnNpb24gbW9kdWxlPwogCiAgICAgZGVmIGhvb2soc2VsZiwgZW50cnkpOgotICAgICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fRXh0ZW5zaW9uRmlsZUZpbmRlcihlbnRyeSkKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2ZpbGVfcGF0aF9ob29rKGVudHJ5KQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBQYXRoIGhvb2sgc2hvdWxkIGhhbmRsZSBhIGRpcmVjdG9yeSB3aGVyZSBhIGtub3duIGV4dGVuc2lvbiBtb2R1bGUKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9mcm96ZW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3QvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CmluZGV4IGZhNjRmMzAuLmMwNWUyMmMgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9mcm96ZW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L2Zyb3plbi90ZXN0X2xvYWRlci5weQpAQCAtNTEsOCArNTEsOCBAQAogCiAgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKICAgICAgICAgYXNzZXJ0IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfbm90X3JlYWwnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX25vdF9yZWFsJykKIAogCiBjbGFzcyBJbnNwZWN0TG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODQsNyArODQsOCBAQAogICAgICAgICAjIFJhaXNlIEltcG9ydEVycm9yIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBmcm96ZW4uCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKICAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgbWV0aG9kLCAnaW1wb3J0bGliJykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIG1ldGhvZCgnaW1wb3J0bGliJykKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQppbmRleCA0ZGM2OTAxLi41MDU2YWU1IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKQEAgLTE5LDggKzE5LDkgQEAKICAgICAgICAgICBiYXNlID0gcGFja2FnZS5yc3BsaXQoJy4nLCBsZXZlbClbMF0KICAgICAgICAgICByZXR1cm4gJ3swfS57MX0nLmZvcm1hdChiYXNlLCBuYW1lKQogCi0gICAgQnV0IHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IF9fcGFja2FnZV9fIGhhcyBiZWVuIHNldCwgdGhlcmUgaGFzIHRvCi0gICAgYmUgYSB3YXkgdG8gY2FsY3VsYXRlIHRoZSBhdHRyaWJ1dGUncyB2YWx1ZSBbX19uYW1lX19dOjoKKyAgICBCdXQgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgX19wYWNrYWdlX18gaGFzIGJlZW4gc2V0IChvciBub3QgYmVlbgorICAgIHNldCB0byBOb25lIFtOb25lXSksIHRoZXJlIGhhcyB0byBiZSBhIHdheSB0byBjYWxjdWxhdGUgdGhlIGF0dHJpYnV0ZSdzIHZhbHVlCisgICAgW19fbmFtZV9fXTo6CiAKICAgICAgIGRlZiBjYWxjX3BhY2thZ2UoY2FsbGVyX25hbWUsIGhhc19fX3BhdGhfXyk6CiAgICAgICAgICAgaWYgaGFzX19wYXRoX186CkBAIC00MywyOCArNDQsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIAotICAgIGRlZiB0ZXN0X3VzaW5nX19fbmFtZV9fKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VzaW5nX19fbmFtZV9fKHNlbGYsIHBhY2thZ2VfYXNfTm9uZT1GYWxzZSk6CiAgICAgICAgICMgW19fbmFtZV9fXQorICAgICAgICBnbG9iYWxzXyA9IHsnX19uYW1lX18nOiAncGtnLmZha2UnLCAnX19wYXRoX18nOiBbXX0KKyAgICAgICAgaWYgcGFja2FnZV9hc19Ob25lOgorICAgICAgICAgICAgZ2xvYmFsc19bJ19fcGFja2FnZV9fJ10gPSBOb25lCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6CiAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLmZha2UnKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPXsnX19uYW1lX18nOiAncGtnLmZha2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW119LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WydhdHRyJ10sIGxldmVsPTIpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIAorICAgIGRlZiB0ZXN0X05vbmVfYXNfX19wYWNrYWdlX18oc2VsZik6CisgICAgICAgICMgW05vbmVdCisgICAgICAgIHNlbGYudGVzdF91c2luZ19fX25hbWVfXyhwYWNrYWdlX2FzX05vbmU9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X2JhZF9fcGFja2FnZV9fKHNlbGYpOgogICAgICAgICBnbG9iYWxzID0geydfX3BhY2thZ2VfXyc6ICc8bm90IHJlYWw+J30KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIGltcG9ydF91dGlsLmltcG9ydF8sJycsIGdsb2JhbHMsIHt9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IpOgorICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCiAKICAgICBkZWYgdGVzdF9idW5rX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgIGdsb2JhbHMgPSB7J19fcGFja2FnZV9fJzogNDJ9Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGltcG9ydF91dGlsLmltcG9ydF8sICcnLCBnbG9iYWxzLCB7fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3JlbGltcG9ydCddLCAxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCiAKIAorQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiBjbGFzcyBTZXR0aW5nX19wYWNrYWdlX18odW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIiIiQmVjYXVzZSBfX3BhY2thZ2VfXyBpcyBhIG5ldyBmZWF0dXJlLCBpdCBpcyBub3QgYWx3YXlzIHNldCBieSBhIGxvYWRlci4KZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfYXBpLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3NWQ0MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfYXBpLnB5CkBAIC0wLDAgKzEsMjIgQEAKK2Zyb20gLiBpbXBvcnQgdXRpbAoraW1wb3J0IHVuaXR0ZXN0CisKKworY2xhc3MgQVBJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IEFQSS1zcGVjaWZpYyBkZXRhaWxzIGZvciBfX2ltcG9ydF9fIChlLmcuIHJhaXNpbmcgdGhlIHJpZ2h0CisgICAgZXhjZXB0aW9uIHdoZW4gcGFzc2luZyBpbiBhbiBpbnQgZm9yIHRoZSBtb2R1bGUgbmFtZSkuIiIiCisKKyAgICBkZWYgdGVzdF9uYW1lX3JlcXVpcmVzX3JwYXJpdGlvbihzZWxmKToKKyAgICAgICAgIyBSYWlzZSBUeXBlRXJyb3IgaWYgYSBub24tc3RyaW5nIGlzIHBhc3NlZCBpbiBmb3IgdGhlIG1vZHVsZSBuYW1lLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB1dGlsLmltcG9ydF8oNDIpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKKyAgICBydW5fdW5pdHRlc3QoQVBJVGVzdCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQppbmRleCBkZGQzNTVlLi5iOTAzZThlIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKQEAgLTg0LDE2ICs4NCwyMyBAQAogICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2QnLCBmcm9tbGlzdD1bJyddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZCcpCiAKLSAgICBkZWYgdGVzdF91c2luZ19zdGFyKHNlbGYpOgorICAgIGRlZiBiYXNpY19zdGFyX3Rlc3Qoc2VsZiwgZnJvbWxpc3Q9WycqJ10pOgogICAgICAgICAjIFt1c2luZyAqXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vY2tbJ3BrZyddLl9fYWxsX18gPSBbJ21vZHVsZSddCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9WycqJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9ZnJvbWxpc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZScpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLm1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQogCisgICAgZGVmIHRlc3RfdXNpbmdfc3RhcihzZWxmKToKKyAgICAgICAgIyBbdXNpbmcgKl0KKyAgICAgICAgc2VsZi5iYXNpY19zdGFyX3Rlc3QoKQorCisgICAgZGVmIHRlc3RfZnJvbWxpc3RfYXNfdHVwbGUoc2VsZik6CisgICAgICAgIHNlbGYuYmFzaWNfc3Rhcl90ZXN0KCgnKicsKSkKKwogICAgIGRlZiB0ZXN0X3N0YXJfd2l0aF9vdGhlcnMoc2VsZik6CiAgICAgICAgICMgW3VzaW5nICogd2l0aCBvdGhlcnNdCiAgICAgICAgIGNvbnRleHQgPSB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUxJywgJ3BrZy5tb2R1bGUyJykKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CmluZGV4IGI0MWMzNmYuLmZhYWRjMzIgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQpAQCAtMTgsOCArMTgsMTQgQEAKICAgICBkZWYgdGVzdF9iYWRfcGFyZW50KHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cubW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfLCAncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICAjIFRyeSB0byBpbXBvcnQgYSBzdWJtb2R1bGUgZnJvbSBhIG5vbi1wYWNrYWdlIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgYXNzZXJ0IG5vdCBoYXNhdHRyKHN5cywgJ19fcGF0aF9fJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzeXMubm9fc3VibW9kdWxlc19oZXJlJykKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X3BhdGgucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X3BhdGgucHkKaW5kZXggMGUwNTViMS4uMmZhYTIzMSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9wYXRoLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfcGF0aC5weQpAQCAtMiwxMCArMiwxMCBAQAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IG5lc3RlZAogaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0eXBlcyBpbXBvcnQgTWV0aG9kVHlwZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC04MSwyMyArODEsMjggQEAKIAogICAgIGRlZiB0ZXN0X2ltcGxpY2l0X2hvb2tzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgaW1wbGljaXQgcGF0aCBob29rcyBhcmUgdXNlZC4KLSAgICAgICAgZXhpc3RpbmdfcGF0aCA9IG9zLnBhdGguZGlybmFtZShzdXBwb3J0LlRFU1RGTikKICAgICAgICAgYmFkX3BhdGggPSAnPHBhdGg+JwogICAgICAgICBtb2R1bGUgPSAnPG1vZHVsZT4nCiAgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHMoYmFkX3BhdGgpCi0gICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUoKToKLSAgICAgICAgICAgIG5vdGhpbmcgPSBfYm9vdHN0cmFwLl9EZWZhdWx0UGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W2V4aXN0aW5nX3BhdGhdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdGhpbmcgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGlzdGluZ19wYXRoIGluIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2V4aXN0aW5nX3BhdGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcC5OdWxsSW1wb3J0ZXIpKQotICAgICAgICAgICAgbm90aGluZyA9IF9ib290c3RyYXAuX0RlZmF1bHRQYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoPVtiYWRfcGF0aF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90aGluZyBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhZF9wYXRoIGluIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVbYmFkX3BhdGhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wLk51bGxJbXBvcnRlcikpCisgICAgICAgIGV4aXN0aW5nX3BhdGggPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZSgpOgorICAgICAgICAgICAgICAgIG5vdGhpbmcgPSBfYm9vdHN0cmFwLl9EZWZhdWx0UGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W2V4aXN0aW5nX3BhdGhdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3RoaW5nIGlzIE5vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4aXN0aW5nX3BhdGggaW4gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNpbnN0YW5jZShzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtleGlzdGluZ19wYXRoXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcC5OdWxsSW1wb3J0ZXIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQpCisgICAgICAgICAgICAgICAgbm90aGluZyA9IF9ib290c3RyYXAuX0RlZmF1bHRQYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W2JhZF9wYXRoXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90aGluZyBpcyBOb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYWRfcGF0aCBpbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtiYWRfcGF0aF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wLk51bGxJbXBvcnRlcikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihleGlzdGluZ19wYXRoKQorCiAKICAgICBkZWYgdGVzdF9wYXRoX2ltcG9ydGVyX2NhY2hlX2hhc19Ob25lKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBob29rIGlzIHVzZWQgd2hlbiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5CmluZGV4IDU1NDdkNGMuLmEwZjZiMmQgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3Rlc3RfcmVsYXRpdmVfaW1wb3J0cy5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKQEAgLTE1NCw4ICsxNTQsOSBAQAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZycsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgogICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGltcG9ydF91dGlsLmltcG9ydF8sICcnLCBnbG9iYWxfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLCBsZXZlbD0yKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIAogICAgIGRlZiB0ZXN0X3Rvb19oaWdoX2Zyb21fbW9kdWxlKHNlbGYpOgpAQCAtMTY0LDEzICsxNjUsMTUgQEAKICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6CiAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW1wb3J0X3V0aWwuaW1wb3J0XywgJycsIGdsb2JhbF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21saXN0PVsndG9wX2xldmVsJ10sIGxldmVsPTIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsndG9wX2xldmVsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogICAgICAgICBzZWxmLnJlbGF0aXZlX2ltcG9ydF90ZXN0KGNyZWF0ZSwgZ2xvYmFsc18sIGNhbGxiYWNrKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfbmFtZV93X2xldmVsXzAoc2VsZik6CiAgICAgICAgICMgW2VtcHR5IG5hbWVdCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGltcG9ydF91dGlsLmltcG9ydF8sICcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJykKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9mcm9tX2RpZmZlcmVudF9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSB0aGFuIHRoZSBjYWxsZXIuCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L2ltcG9ydF8vdXRpbC5weQppbmRleCA1YTFiNzI3Li42NDljNWVkIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3Rlc3QvaW1wb3J0Xy91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9pbXBvcnRfL3V0aWwucHkKQEAgLTEsNSArMSw3IEBACiBpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCB1bml0dGVzdAogCiAKIHVzaW5nX19faW1wb3J0X18gPSBGYWxzZQpAQCAtMTAsMTkgKzEyLDEyIEBACiAgICAgaWYgdXNpbmdfX19pbXBvcnRfXzoKICAgICAgICAgcmV0dXJuIF9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQogICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5fX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKIAogCiBkZWYgaW1wb3J0bGliX29ubHkoZnhuKToKLSAgICAiIiJEZWNvcmF0b3IgdG8gbWFyayB3aGljaCB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudAotICAgIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4iIiIKLSAgICBkZWYgaW5uZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgaWYgdXNpbmdfX19pbXBvcnRfXzoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGZ4bigqYXJncywgKiprd2FyZ3MpCi0gICAgZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyKGlubmVyLCBmeG4pCi0gICAgcmV0dXJuIGlubmVyCisgICAgIiIiRGVjb3JhdG9yIHRvIHNraXAgYSB0ZXN0IGlmIHVzaW5nIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fLiIiIgorICAgIHJldHVybiB1bml0dGVzdC5za2lwSWYodXNpbmdfX19pbXBvcnRfXywgImltcG9ydGxpYi1zcGVjaWZpYyB0ZXN0IikoZnhuKQogCiAKIGRlZiBtb2NrX3BhdGhfaG9vaygqZW50cmllcywgaW1wb3J0ZXIpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3JlZ3J0ZXN0LnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDNhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvcmVncnRlc3QucHkKQEAgLTAsMCArMSwzNSBAQAorIiIiUnVuIFB5dGhvbidzIHN0YW5kYXJkIHRlc3Qgc3VpdGUgdXNpbmcgaW1wb3J0bGliLl9faW1wb3J0X18uCisKK1Rlc3RzIGtub3duIHRvIGZhaWwgYmVjYXVzZSBvZiBhc3N1bXB0aW9ucyB0aGF0IGltcG9ydGxpYiAocHJvcGVybHkpCitpbnZhbGlkYXRlcyBhcmUgYXV0b21hdGljYWxseSBza2lwcGVkIGlmIHRoZSBlbnRpcmUgdGVzdCBzdWl0ZSBpcyBydW4uCitPdGhlcndpc2UgYWxsIGNvbW1hbmQtbGluZSBvcHRpb25zIHZhbGlkIGZvciB0ZXN0LnJlZ3J0ZXN0IGFyZSBhbHNvIHZhbGlkIGZvcgordGhpcyBzY3JpcHQuCisKK1hYWCBGQUlMSU5HCisgICogdGVzdF9pbXBvcnQKKyAgICAtIHRlc3RfaW5jb3JyZWN0X2NvZGVfbmFtZQorICAgICAgICBmaWxlIG5hbWUgZGlmZmVyaW5nIGJldHdlZW4gX19maWxlX18gYW5kIGNvX2ZpbGVuYW1lIChyNjgzNjAgb24gdHJ1bmspCisgICAgLSB0ZXN0X2ltcG9ydF9ieV9maWxlbmFtZQorICAgICAgICBleGNlcHRpb24gZm9yIHRyeWluZyB0byBpbXBvcnQgYnkgZmlsZSBuYW1lIGRvZXMgbm90IG1hdGNoCisKKyIiIgoraW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIF9fYnVpbHRpbnNfXy5fX2ltcG9ydF9fID0gaW1wb3J0bGliLl9faW1wb3J0X18KKworICAgIGV4Y2x1ZGUgPSBbJy0tZXhjbHVkZScsCisgICAgICAgICAgICAgICAgJ3Rlc3RfZnJvemVuJywgIyBEb2VzIG5vdCBleHBlY3QgX19sb2FkZXJfXyBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAndGVzdF9wa2cnLCAgIyBEb2VzIG5vdCBleHBlY3QgX19sb2FkZXJfXyBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICAndGVzdF9weWRvYycsICMgRG9lcyBub3QgZXhwZWN0IF9fbG9hZGVyX18gYXR0cmlidXRlCisgICAgICAgICAgICAgIF0KKworICAgICMgU3dpdGNoaW5nIG9uIC0tZXhjbHVkZSBpbXBsaWVzIHJ1bm5pbmcgYWxsIHRlc3QgYnV0IHRoZSBvbmVzIGxpc3RlZCwgc28KKyAgICAjIG9ubHkgdXNlIGl0IHdoZW4gb25lIGlzIG5vdCBydW5uaW5nIGFuIGV4cGxpY2l0IHRlc3QKKyAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDE6CisgICAgICAgICMgTm8gcHJvZ3JhbW1hdGljIHdheSB0byBzcGVjaWZ5IHRlc3RzIHRvIGV4Y2x1ZGUKKyAgICAgICAgc3lzLmFyZ3YuZXh0ZW5kKGV4Y2x1ZGUpCisKKyAgICByZWdydGVzdC5tYWluKHF1aWV0PVRydWUsIHZlcmJvc2UyPVRydWUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3RfYWJjX2xvYWRlci5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmluZGV4IDFjZTgzZmIuLjMyNDU5MDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CkBAIC0xLDE0ICsxLDY4IEBACiBpbXBvcnQgaW1wb3J0bGliCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgYWJjCisKIGZyb20gLi4gaW1wb3J0IGFiYyBhcyB0ZXN0aW5nX2FiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHNvdXJjZV91dGlsCisKIGltcG9ydCBpbXAKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaW8KIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworCitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyTW9jayhhYmMuU291cmNlTG9hZGVyKToKKworICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KKyAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fY2FjaGVkX18sIF9fcGFja2FnZV9fLCAiCisgICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBhc3NlcnQgc2VsZi5wYXRoID09IHBhdGgKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCisKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisKK2NsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgorCisgICAgc291cmNlX210aW1lID0gMQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKKyAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKKyAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKKyAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCisgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQorICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgc2VsZi53cml0dGVuID0ge30KKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQorICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKworICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgorICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlX210aW1lCisKKyAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdHRlbltwYXRoXSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHJldHVybiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aAogCiAKIGNsYXNzIFB5TG9hZGVyTW9jayhhYmMuUHlMb2FkZXIpOgpAQCAtMzMsMTAgKzg3LDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCiAKICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuICdfX2luaXRfXycgaW4gc2VsZi5tb2R1bGVfcGF0aHNbbmFtZV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKG5hbWUpKQorICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwogCiAgICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIG5hbWUpOgogICAgICAgICB0cnk6CkBAIC00NCw2ICs5NiwzMyBAQAogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgogCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgIiIiU2lsZW5jZSBkZXByZWNhdGlvbiB3YXJuaW5nLiIiIgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgcGF0aCA9IHN1cGVyKCkuZ2V0X2ZpbGVuYW1lKG5hbWUpCisgICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKKyAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gcGF0aAorCisKK2NsYXNzIFB5TG9hZGVyQ29tcGF0TW9jayhQeUxvYWRlck1vY2spOgorCisgICAgIiIiTW9jayB0aGF0IG1hdGNoZXMgd2hhdCBpcyBzdWdnZXN0ZWQgdG8gaGF2ZSBhIGxvYWRlciB0aGF0IGlzIGNvbXBhdGlibGUKKyAgICBmcm9tIFB5dGhvbiAzLjEgb253YXJkcy4iIiIKKworICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGVfcGF0aHNbZnVsbG5hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKIAogY2xhc3MgUHlQeWNMb2FkZXJNb2NrKGFiYy5QeVB5Y0xvYWRlciwgUHlMb2FkZXJNb2NrKToKIApAQCAtMTE0LDYgKzE5MywxMyBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcmV0dXJuICdfX2luaXRfXycgaW4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCiAKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHN1cGVyKCkuZ2V0X2NvZGUobmFtZSkKKyAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQorICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCiBjbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKIApAQCAtMTgzLDcgKzI2OSw4IEBACiAgICAgICAgIG1vY2suc291cmNlID0gYiIxLzAiCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBtb2NrLmxvYWRfbW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5tb2R1bGVzW25hbWVdIGlzIG1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2JsYWgnKSkKICAgICAgICAgcmV0dXJuIG1vY2sKQEAgLTE5MywxMSArMjgwLDIwIEBACiAgICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKICAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbW9jay5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuYW1lIG5vdCBpbiBzeXMubW9kdWxlcykKICAgICAgICAgcmV0dXJuIG1vY2sKIAogCitjbGFzcyBQeUxvYWRlckNvbXBhdFRlc3RzKFB5TG9hZGVyVGVzdHMpOgorCisgICAgIiIiVGVzdCB0aGF0IHRoZSBzdWdnZXN0ZWQgY29kZSB0byBtYWtlIGEgbG9hZGVyIHRoYXQgaXMgY29tcGF0aWJsZSBmcm9tCisgICAgUHl0aG9uIDMuMSBmb3J3YXJkIHdvcmtzLiIiIgorCisgICAgbW9ja2VyID0gUHlMb2FkZXJDb21wYXRNb2NrCisKKwogY2xhc3MgUHlMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeUxvYWRlciB0byBtYWtlIHN1cmUgdGhhdCB3aGVuIHNvdXJjZV9wYXRoKCkKQEAgLTIwNywzOCArMzAzLDI5IEBACiAgICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCiAgICAgICAgIG5hbWUgPSAnbW9kJwogICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBtb2NrLmxvYWRfbW9kdWxlLCBuYW1lKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQogCiAgICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKICAgICAgICAgbmFtZSA9ICdtb2QnCiAgICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6CisgICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKKyAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIG1vY2subG9hZF9tb2R1bGUsIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpLCBwYXRoKQogCi0KLWNsYXNzIFB5TG9hZGVyR2V0U291cmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgIiIiVGVzdHMgZm9yIGltcG9ydGxpYi5hYmMuUHlMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX25vX3NvdXJjZV9wYXRoKHNlbGYpOgorICAgICAgICAjIGdldF9maWxlbmFtZSgpIHNob3VsZCByYWlzZSBJbXBvcnRFcnJvciBpZiBzb3VyY2VfcGF0aCByZXR1cm5zIE5vbmUuCiAgICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHtuYW1lOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyl9KQotICAgICAgICBzb3VyY2UgPSAneCA9ICLDvCInCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotICAgIGRlZiB0ZXN0X2RlY29kZWRfc291cmNlKHNlbGYpOgotICAgICAgICAjIERlY29kaW5nIHNob3VsZCB3b3JrLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCi0gICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKyAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQogCiAKIGNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6CkBAIC0yODEsNiArMzY4LDM4IEBACiAgICAgICAgIHN1cGVyKCkudGVzdF91bmxvYWRhYmxlKCkKIAogCitjbGFzcyBQeVB5Y0xvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgZm9yIHRoZSBpbnRlcmZhY2Ugb2YgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKKworICAgIGRlZiBnZXRfZmlsZW5hbWVfY2hlY2soc2VsZiwgc3JjX3BhdGgsIGJjX3BhdGgsIGV4cGVjdCk6CisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBzcmNfcGF0aH0sIHtuYW1lOiB7J3BhdGgnOiBiY19wYXRofX0pCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgYXNzZXJ0IG1vY2suc291cmNlX3BhdGgobmFtZSkgPT0gc3JjX3BhdGgKKyAgICAgICAgICAgIGFzc2VydCBtb2NrLmJ5dGVjb2RlX3BhdGgobmFtZSkgPT0gYmNfcGF0aAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9zb3VyY2VfYmMoc2VsZik6CisgICAgICAgICMgV2hlbiBzb3VyY2UgYW5kIGJ5dGVjb2RlIHBhdGhzIHByZXNlbnQsIHJldHVybiB0aGUgc291cmNlIHBhdGguCisgICAgICAgIHNlbGYuZ2V0X2ZpbGVuYW1lX2NoZWNrKCdzb3VyY2VfcGF0aCcsICdiY19wYXRoJywgJ3NvdXJjZV9wYXRoJykKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX25vX2JjKHNlbGYpOgorICAgICAgICAjIFdpdGggc291cmNlIGJ1dCBubyBiYywgcmV0dXJuIHNvdXJjZSBwYXRoLgorICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCBOb25lLCAnc291cmNlX3BhdGgnKQorCisgICAgZGVmIHRlc3RfZmlsZW5hbWVfd2l0aF9ub19zb3VyY2VfYmMoc2VsZik6CisgICAgICAgICMgV2l0aCBub3Qgc291cmNlIGJ1dCBiYywgcmV0dXJuIHRoZSBiYyBwYXRoLgorICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjayhOb25lLCAnYmNfcGF0aCcsICdiY19wYXRoJykKKworICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX29yX2JjKHNlbGYpOgorICAgICAgICAjIFdpdGggbm8gc291cmNlIG9yIGJjLCByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogTm9uZX19KQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbW9jay5nZXRfZmlsZW5hbWUobmFtZSkKKworCiBjbGFzcyBTa2lwV3JpdGluZ0J5dGVjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIiIiVGVzdCB0aGF0IGJ5dGVjb2RlIGlzIHByb3Blcmx5IGhhbmRsZWQgYmFzZWQgb24KQEAgLTM0NiwyMCArNDY1LDI4IEBACiAgICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgogICAgICAgICBuYW1lID0gJ21vZCcKICAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIG1vY2subG9hZF9tb2R1bGUsIG5hbWUpCisgICAgICAgIGJjID0ge25hbWU6CisgICAgICAgICAgICAgICAgeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLAorICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fQorICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBNaXNzaW5nIGNvZGUgb2JqZWN0IGJ5dGVjb2RlIHNob3VsZCBsZWFkIHRvIGFuIEVPRkVycm9yLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgYmMgPSB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLCAnYmMnOiBiJyd9fQorICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvcik6CisgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCiAKICAgICBkZWYgdGVzdF9iYWRfYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgQmFkIGNvZGUgb2JqZWN0IGJ5dGVjb2RlIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgorICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCiAgICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmMnOiBiJyd9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgbW9jay5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgYmMgPSB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpLCAnYmMnOiBiJzEyMzQnfX0KKyAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCiAKIAogZGVmIHJhaXNlX0ltcG9ydEVycm9yKCphcmdzLCAqKmt3YXJncyk6CkBAIC0zODcsMTYgKzUxNCwxNiBAQAogICAgICAgICAjIElmIGFsbCAqX3BhdGggbWV0aG9kcyByZXR1cm4gTm9uZSwgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIG5hbWUgPSAnbW9kJwogICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgbW9jay5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKIAogICAgIGRlZiB0ZXN0X3NvdXJjZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgogICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gc291cmNlX3BhdGggc2hvdWxkIHRyaWdnZXIgYW4gSW1wb3J0RXJyb3IuCiAgICAgICAgIG5hbWUgPSAnbW9kJwogICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHt9LCB7bmFtZTogeydwYXRoJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9kJyl9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgbW9jay5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKIAogICAgIGRlZiB0ZXN0X2J5dGVjb2RlX3BhdGhfSW1wb3J0RXJyb3Ioc2VsZik6CiAgICAgICAgICMgQW4gSW1wb3J0RXJyb3IgZnJvbSBieXRlY29kZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgpAQCAtNDA0LDE2ICs1MzEsMzQ1IEBACiAgICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCiAgICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKICAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgbW9jay5sb2FkX21vZHVsZSwgbmFtZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKKworCitjbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCisgICAgICAgIGlmIGlzX3BhY2thZ2U6CisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCisgICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKKworICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKKyAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCisKKyAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgorICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAorICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCisgICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKKyAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKKworCitjbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KKworICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKKyAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKworICAgICIiIgorCisgICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaworCisgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgorICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKKyAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3RfbG9hZF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgTG9hZGluZyBhIG1vZHVsZSBzaG91bGQgc2V0IF9fbmFtZV9fLCBfX2xvYWRlcl9fLCBfX3BhY2thZ2VfXywKKyAgICAgICAgIyBfX3BhdGhfXyAoZm9yIHBhY2thZ2VzKSwgX19maWxlX18sIGFuZCBfX2NhY2hlZF9fLgorICAgICAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIGFsc28gYmUgcHV0IGludG8gc3lzLm1vZHVsZXMuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYXRoX18sIFtvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5uYW1lIGluIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9zZXR0aW5ncyhzZWxmKToKKyAgICAgICAgIyBfX3BhY2thZ2VfXyBuZWVkcyB0byBiZSBzZXQsIHdoaWxlIF9fcGF0aF9fIGlzIHNldCBvbiBpZiB0aGUgbW9kdWxlCisgICAgICAgICMgaXMgYSBwYWNrYWdlLgorICAgICAgICAjIFRlc3RpbmcgdGhlIHZhbHVlcyBmb3IgYSBwYWNrYWdlIGFyZSBjb3ZlcmVkIGJ5IHRlc3RfbG9hZF9tb2R1bGUuCisgICAgICAgIHNlbGYuc2V0VXAoaXNfcGFja2FnZT1GYWxzZSkKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU291cmNlIGlzIGNvbnNpZGVyZWQgZW5jb2RlZCBpbiBVVEYtOCBieSBkZWZhdWx0IHVubGVzcyBvdGhlcndpc2UKKyAgICAgICAgIyBzcGVjaWZpZWQgYnkgYW4gZW5jb2RpbmcgbGluZS4KKyAgICAgICAgc291cmNlID0gIl8gPSAnw7wnIgorICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IGxhdGluLTFcbl8gPSDDvCIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsICJzeXMuZG9udF93cml0ZV9ieXRlY29kZSBpcyB0cnVlIikKK2NsYXNzIFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgorCisgICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcidzIHVzZSBvZiBieXRlY29kZS4KKworICAgIFNvdXJjZS1vbmx5IHRlc3RpbmcgaGFuZGxlZCBieSBTb3VyY2VPbmx5TG9hZGVyVGVzdHMuCisKKyAgICAiIiIKKworICAgIGxvYWRlcl9tb2NrID0gU291cmNlTG9hZGVyTW9jaworCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0LCAqLCBieXRlY29kZV93cml0dGVuPUZhbHNlKToKKyAgICAgICAgc3VwZXIoKS52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgaWYgYnl0ZWNvZGVfd3JpdHRlbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGltcC5nZXRfbWFnaWMoKSkKKyAgICAgICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKKworICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgorICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKKyAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCisgICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCisgICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKKyAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKKyAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCisKKyAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgorICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCisKKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworCitjbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJworICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCisKKyAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KKyAgICAgICAgbmFtZSA9ICdtb2QnCisgICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKKyAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKKworY2xhc3MgQWJzdHJhY3RNZXRob2RJbXBsVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVGVzdCB0aGUgY29uY3JldGUgYWJzdHJhY3RtZXRob2QgaW1wbGVtZW50YXRpb25zLiIiIgorCisgICAgY2xhc3MgTG9hZGVyKGFiYy5Mb2FkZXIpOgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAgICAgc3VwZXIoKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKKworICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKKyAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgorICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQorCisgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6CisgICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCisKKyAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgorICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKKyAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQorCisgICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKKyAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKKworICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKKyAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQorCisgICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgorICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgorICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKKworICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6CisgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKKyAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKKworICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgorICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKKyAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQorCisgICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6CisgICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQorCisgICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6CisgICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQorCisgICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgorICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKKyAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQorICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQorCisgICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCisKKyAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQorICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQorCisgICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6CisgICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCisKKyAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQorCisgICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCisKKyAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6CisgICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKKyAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCisgICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKKyAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCisgICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX210aW1lJywgJ3NldF9kYXRhJykKKworICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCisKKyAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsIFB5TG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLCBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgTWlzc2luZ1BhdGhzVGVzdHMpCisgICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCisgICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCisgICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDZmYWQ4ODEuLjczNzc3ZGUgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CkBAIC0xOSw3ICsxOSw5IEBACiAgICAgYXNzZXJ0IG5hbWUgIT0gbmFtZS5sb3dlcigpCiAKICAgICBkZWYgZmluZChzZWxmLCBwYXRoKToKLSAgICAgICAgZmluZGVyID0gX2Jvb3RzdHJhcC5fUHlQeWNGaWxlRmluZGVyKHBhdGgpCisgICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuX0ZpbGVGaW5kZXIocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLl9Tb3VyY2VGaW5kZXJEZXRhaWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jvb3RzdHJhcC5fU291cmNlbGVzc0ZpbmRlckRldGFpbHMoKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCiAKICAgICBkZWYgc2Vuc2l0aXZpdHlfdGVzdChzZWxmKToKQEAgLTI3LDcgKzI5LDcgQEAKICAgICAgICAgc2Vuc2l0aXZlX3BrZyA9ICdzZW5zaXRpdmUuezB9Jy5mb3JtYXQoc2VsZi5uYW1lKQogICAgICAgICBpbnNlbnNpdGl2ZV9wa2cgPSAnaW5zZW5zaXRpdmUuezB9Jy5mb3JtYXQoc2VsZi5uYW1lLmxvd2VyKCkpCiAgICAgICAgIGNvbnRleHQgPSBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhpbnNlbnNpdGl2ZV9wa2csIHNlbnNpdGl2ZV9wa2cpCi0gICAgICAgIHdpdGggIGNvbnRleHQgYXMgbWFwcGluZzoKKyAgICAgICAgd2l0aCBjb250ZXh0IGFzIG1hcHBpbmc6CiAgICAgICAgICAgICBzZW5zaXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbihtYXBwaW5nWycucm9vdCddLCAnc2Vuc2l0aXZlJykKICAgICAgICAgICAgIGluc2Vuc2l0aXZlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFwcGluZ1snLnJvb3QnXSwgJ2luc2Vuc2l0aXZlJykKICAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbmQoc2Vuc2l0aXZlX3BhdGgpLCBzZWxmLmZpbmQoaW5zZW5zaXRpdmVfcGF0aCkKQEAgLTM3LDcgKzM5LDcgQEAKICAgICAgICAgICAgIGVudi51bnNldCgnUFlUSE9OQ0FTRU9LJykKICAgICAgICAgICAgIHNlbnNpdGl2ZSwgaW5zZW5zaXRpdmUgPSBzZWxmLnNlbnNpdGl2aXR5X3Rlc3QoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzZW5zaXRpdmUuX2Jhc2VfcGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNlbnNpdGl2ZSkKIAogICAgIGRlZiB0ZXN0X2luc2Vuc2l0aXZlKHNlbGYpOgpAQCAtNDUsOSArNDcsOSBAQAogICAgICAgICAgICAgZW52LnNldCgnUFlUSE9OQ0FTRU9LJywgJzEnKQogICAgICAgICAgICAgc2Vuc2l0aXZlLCBpbnNlbnNpdGl2ZSA9IHNlbGYuc2Vuc2l0aXZpdHlfdGVzdCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHNlbnNpdGl2ZS5fYmFzZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIHNlbnNpdGl2ZS5nZXRfZmlsZW5hbWUoc2VsZi5uYW1lKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGluc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBpbnNlbnNpdGl2ZS5fYmFzZV9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLm5hbWUsIGluc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9maWxlX2xvYWRlci5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9maWxlX2xvYWRlci5weQppbmRleCAxNDVkMDc2Li4wZmZlNzhkIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5CkBAIC0xLDE1ICsxLDIwIEBACiBpbXBvcnQgaW1wb3J0bGliCiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAogaW1wb3J0IGltcAoraW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHB5X2NvbXBpbGUKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzdGF0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YworCiAKIGNsYXNzIFNpbXBsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yMSw4ICsyNiw3IEBACiAgICAgIyBbYmFzaWNdCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKKyAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1NvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfdGVtcCcgaW4gc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3RlbXAnLCAnX19maWxlX18nOiBtYXBwaW5nWydfdGVtcCddLApAQCAtMzIsOSArMzYsOCBAQAogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoJ19wa2cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5fU291cmNlRmlsZUxvYWRlcignX3BrZycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5fX2luaXRfXyddKQogICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfcGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3BrZycgaW4gc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZycsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSwKQEAgLTQ2LDggKzQ5LDggQEAKIAogICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJywgJ19wa2cubW9kJylhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5fUHlQeWNGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSwgRmFsc2UpCisgICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfcGtnLm1vZCcgaW4gc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiAnX3BrZy5tb2QnLCAnX19maWxlX18nOiBtYXBwaW5nWydfcGtnLm1vZCddLApAQCAtNjEsOCArNjQsNyBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKKyAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1NvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgbW9kdWxlX2lkID0gaWQobW9kdWxlKQogICAgICAgICAgICAgbW9kdWxlX2RpY3RfaWQgPSBpZChtb2R1bGUuX19kaWN0X18pCkBAIC03Miw3ICs3NCw3IEBACiAgICAgICAgICAgICAjIGV2ZXJ5dGhpbmcgdGhhdCBoYXMgaGFwcGVuZWQgYWJvdmUgY2FuIGJlIHRvbyBmYXN0OwogICAgICAgICAgICAgIyBmb3JjZSBhbiBtdGltZSBvbiB0aGUgc291cmNlIHRoYXQgaXMgZ3VhcmFudGVlZCB0byBiZSBkaWZmZXJlbnQKICAgICAgICAgICAgICMgdGhhbiB0aGUgb3JpZ2luYWwgbXRpbWUuCi0gICAgICAgICAgICBsb2FkZXIuc291cmNlX210aW1lID0gc2VsZi5mYWtlX210aW1lKGxvYWRlci5zb3VyY2VfbXRpbWUpCisgICAgICAgICAgICBsb2FkZXIucGF0aF9tdGltZSA9IHNlbGYuZmFrZV9tdGltZShsb2FkZXIucGF0aF9tdGltZSkKICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd0ZXN0aW5nX3ZhcicgaW4gbW9kdWxlLl9fZGljdF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICIndGVzdGluZ192YXInIG5vdCBpbiAiCkBAIC05Miw5ICs5NCw5IEBACiAgICAgICAgICAgICAgICAgc2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciwgdmFsdWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tuYW1lXSwgJ3cnKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoJysrKyBiYWQgc3ludGF4ICsrKycpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBsb2FkZXIubG9hZF9tb2R1bGUsIG5hbWUpCisgICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9yaWdfbW9kdWxlLCBhdHRyKSwgdmFsdWUpCiAKQEAgLTEwMywxNiArMTA1LDM0IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnPScpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBsb2FkZXIubG9hZF9tb2R1bGUsICdfdGVtcCcpCisgICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX3RlbXAnIG5vdCBpbiBzeXMubW9kdWxlcykKIAorICAgIGRlZiB0ZXN0X2ZpbGVfZnJvbV9lbXB0eV9zdHJpbmdfZGlyKHNlbGYpOgorICAgICAgICAjIExvYWRpbmcgYSBtb2R1bGUgZm91bmQgZnJvbSBhbiBlbXB0eSBzdHJpbmcgZW50cnkgb24gc3lzLnBhdGggc2hvdWxkCisgICAgICAgICMgbm90IG9ubHkgd29yaywgYnV0IGtlZXAgYWxsIGF0dHJpYnV0ZXMgcmVsYXRpdmUuCisgICAgICAgIGZpbGVfcGF0aCA9ICdfdGVtcC5weScKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZSgiIyB0ZXN0IGZpbGUgZm9yIGltcG9ydGxpYiIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfdGVtcCcpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1NvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgIG1vZCA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9wYXRoLCBtb2QuX19maWxlX18pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5fX2NhY2hlZF9fKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfcGF0aCkKKyAgICAgICAgICAgIHB5Y2FjaGUgPSBvcy5wYXRoLmRpcm5hbWUoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCkpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHB5Y2FjaGUpCisKIAogY2xhc3MgQmFkQnl0ZWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIGZpbGUsIG1vZHVsZV9uYW1lKToKLSAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5fUHlQeWNGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLCBmaWxlLCBGYWxzZSkKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIobW9kdWxlX25hbWUsIGZpbGUpCiAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzKQogCkBAIC0xMjUsMTA2ICsxNDUsMTYyIEBACiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbbmFtZV0pCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzb3VyY2VfdXRpbC5ieXRlY29kZV9wYXRoKG1hcHBpbmdbbmFtZV0pCi0gICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncmInKSBhcyBmaWxlOgotICAgICAgICAgICAgYmMgPSBmaWxlLnJlYWQoKQotICAgICAgICBuZXdfYmMgPSBtYW5pcHVsYXRvcihiYykKLSAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICd3YicpIGFzIGZpbGU6Ci0gICAgICAgICAgICBpZiBuZXdfYmM6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0ZShuZXdfYmMpCi0gICAgICAgIGlmIGRlbF9zb3VyY2U6CisgICAgICAgIGlmIG5vdCBkZWxfc291cmNlOgorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKQorICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3MudW5saW5rKG1hcHBpbmdbbmFtZV0pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gbWFrZV9sZWdhY3lfcHljKG1hcHBpbmdbbmFtZV0pCisgICAgICAgIGlmIG1hbmlwdWxhdG9yOgorICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgYmMgPSBmaWxlLnJlYWQoKQorICAgICAgICAgICAgICAgIG5ld19iYyA9IG1hbmlwdWxhdG9yKGJjKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICd3YicpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgaWYgbmV3X2JjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKG5ld19iYykKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX3BhdGgKIAorICAgIGRlZiBfdGVzdF9lbXB0eV9maWxlKHNlbGYsIHRlc3QsICosIGRlbF9zb3VyY2U9RmFsc2UpOgorICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6CisgICAgICAgICAgICBiY19wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGInJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbF9zb3VyY2U9ZGVsX3NvdXJjZSkKKyAgICAgICAgICAgIHRlc3QoJ190ZW1wJywgbWFwcGluZywgYmNfcGF0aCkKKworICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKKyAgICBkZWYgX3Rlc3RfcGFydGlhbF9tYWdpYyhzZWxmLCB0ZXN0LCAqLCBkZWxfc291cmNlPUZhbHNlKToKKyAgICAgICAgIyBXaGVuIHRoZWlyIGFyZSBsZXNzIHRoYW4gNCBieXRlcyB0byBhIC5weWMsIHJlZ2VuZXJhdGUgaXQgaWYKKyAgICAgICAgIyBwb3NzaWJsZSwgZWxzZSByYWlzZSBJbXBvcnRFcnJvci4KKyAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPWRlbF9zb3VyY2UpCisgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCisKKyAgICBkZWYgX3Rlc3RfbWFnaWNfb25seShzZWxmLCB0ZXN0LCAqLCBkZWxfc291cmNlPUZhbHNlKToKKyAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6NF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPWRlbF9zb3VyY2UpCisgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCisKKyAgICBkZWYgX3Rlc3RfcGFydGlhbF90aW1lc3RhbXAoc2VsZiwgdGVzdCwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6CisgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYmNbOjddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQorICAgICAgICAgICAgdGVzdCgnX3RlbXAnLCBtYXBwaW5nLCBiY19wYXRoKQorCisgICAgZGVmIF90ZXN0X25vX21hcnNoYWwoc2VsZiwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6CisgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYmNbOjhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gbWFwcGluZ1snX3RlbXAnXSBpZiBub3QgZGVsX3NvdXJjZSBlbHNlIGJjX3BhdGgKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhmaWxlX3BhdGgsICdfdGVtcCcpCisKKyAgICBkZWYgX3Rlc3Rfbm9uX2NvZGVfbWFyc2hhbChzZWxmLCAqLCBkZWxfc291cmNlPUZhbHNlKToKKyAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgorICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6OF0gKyBtYXJzaGFsLmR1bXBzKGInYWJjZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gbWFwcGluZ1snX3RlbXAnXSBpZiBub3QgZGVsX3NvdXJjZSBlbHNlIGJ5dGVjb2RlX3BhdGgKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhmaWxlX3BhdGgsICdfdGVtcCcpCisKKyAgICBkZWYgX3Rlc3RfYmFkX21hcnNoYWwoc2VsZiwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6CisgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYmNbOjhdICsgYic8dGVzdD4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1kZWxfc291cmNlKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gbWFwcGluZ1snX3RlbXAnXSBpZiBub3QgZGVsX3NvdXJjZSBlbHNlIGJ5dGVjb2RlX3BhdGgKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKGZpbGVfcGF0aCwgJ190ZW1wJykKKworICAgIGRlZiBfdGVzdF9iYWRfbWFnaWMoc2VsZiwgdGVzdCwgKiwgZGVsX3NvdXJjZT1GYWxzZSk6CisgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKKyAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogYidceDAwXHgwMFx4MDBceDAwJyArIGJjWzQ6XSkKKyAgICAgICAgICAgIHRlc3QoJ190ZW1wJywgbWFwcGluZywgYmNfcGF0aCkKKworCitjbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKKworICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1NvdXJjZUZpbGVMb2FkZXIKKwogICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlKHNlbGYpOgogICAgICAgICAjIFdoZW4gYSAucHljIGlzIGVtcHR5LCByZWdlbmVyYXRlIGl0IGlmIHBvc3NpYmxlLCBlbHNlIHJhaXNlCiAgICAgICAgICMgSW1wb3J0RXJyb3IuCi0gICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGJjX3BhdGggPSBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBiYzogTm9uZSkKLSAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nWydfdGVtcCddLCAnX3RlbXAnKQotICAgICAgICAgICAgd2l0aCBvcGVuKGJjX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbbmFtZV0sIG5hbWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGUucmVhZCgpKSwgOCkKLSAgICAgICAgICAgIHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLCBsYW1iZGEgYmM6IE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1UcnVlKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCiAKLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCisgICAgICAgIHNlbGYuX3Rlc3RfZW1wdHlfZmlsZSh0ZXN0KQorCiAgICAgZGVmIHRlc3RfcGFydGlhbF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBXaGVuIHRoZWlyIGFyZSBsZXNzIHRoYW4gNCBieXRlcyB0byBhIC5weWMsIHJlZ2VuZXJhdGUgaXQgaWYKLSAgICAgICAgIyBwb3NzaWJsZSwgZWxzZSByYWlzZSBJbXBvcnRFcnJvci4KLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6M10pCi0gICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKLSAgICAgICAgICAgIHdpdGggb3BlbihiY19wYXRoLCAncmInKSBhcyBmaWxlOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlLnJlYWQoKSksIDgpCi0gICAgICAgICAgICBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywgbGFtYmRhIGJjOiBiY1s6M10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1UcnVlKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCisKKyAgICAgICAgc2VsZi5fdGVzdF9wYXJ0aWFsX21hZ2ljKHRlc3QpCiAKICAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCiAgICAgZGVmIHRlc3RfbWFnaWNfb25seShzZWxmKToKICAgICAgICAgIyBXaGVuIHRoZXJlIGlzIG9ubHkgdGhlIG1hZ2ljIG51bWJlciwgcmVnZW5lcmF0ZSB0aGUgLnB5YyBpZiBwb3NzaWJsZSwKICAgICAgICAgIyBlbHNlIHJhaXNlIEVPRkVycm9yLgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBiY19wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGJjWzo0XSkKLSAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nWydfdGVtcCddLCAnX3RlbXAnKQotICAgICAgICAgICAgd2l0aCBvcGVuKGJjX3BhdGgsICdyYicpIGFzIGZpbGU6CisgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbbmFtZV0sIG5hbWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGUucmVhZCgpKSwgOCkKLSAgICAgICAgICAgIHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLCBsYW1iZGEgYmM6IGJjWzo0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxfc291cmNlPVRydWUpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9wYXJ0aWFsX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBXaGVuIHRoZSB0aW1lc3RhbXAgaXMgcGFydGlhbCwgcmVnZW5lcmF0ZSB0aGUgLnB5YywgZWxzZQotICAgICAgICAjIHJhaXNlIEVPRkVycm9yLgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBiY19wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGJjWzo3XSkKLSAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nWydfdGVtcCddLCAnX3RlbXAnKQotICAgICAgICAgICAgd2l0aCBvcGVuKGJjX3BhdGgsICdyYicpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihmaWxlLnJlYWQoKSksIDgpCi0gICAgICAgICAgICBzZWxmLm1hbmlwdWxhdGVfYnl0ZWNvZGUoJ190ZW1wJywgbWFwcGluZywgbGFtYmRhIGJjOiBiY1s6N10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3NvdXJjZT1UcnVlKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvcik6Ci0gICAgICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbJ190ZW1wJ10sICdfdGVtcCcpCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3Rfbm9fbWFyc2hhbChzZWxmKToKLSAgICAgICAgIyBXaGVuIHRoZXJlIGlzIG9ubHkgdGhlIG1hZ2ljIG51bWJlciBhbmQgdGltZXN0YW1wLCByYWlzZSBFT0ZFcnJvci4KLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgYmNfcGF0aCA9IHNlbGYubWFuaXB1bGF0ZV9ieXRlY29kZSgnX3RlbXAnLCBtYXBwaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIGJjOiBiY1s6OF0pCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKIAogICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKICAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6CiAgICAgICAgICMgV2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIGRpZmZlcmVudCwgdGhlIGJ5dGVjb2RlIHNob3VsZCBiZQogICAgICAgICAjIHJlZ2VuZXJhdGVkLgotICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBiY19wYXRoID0gc2VsZi5tYW5pcHVsYXRlX2J5dGVjb2RlKCdfdGVtcCcsIG1hcHBpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGInXHgwMFx4MDBceDAwXHgwMCcgKyBiY1s0Ol0pCi0gICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKLSAgICAgICAgICAgIHdpdGggb3BlbihiY19wYXRoLCAncmInKSBhcyBieXRlY29kZV9maWxlOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nW25hbWVdLCBuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGJ5dGVjb2RlX3BhdGgsICdyYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlY29kZV9maWxlLnJlYWQoNCksIGltcC5nZXRfbWFnaWMoKSkKIAorICAgICAgICBzZWxmLl90ZXN0X2JhZF9tYWdpYyh0ZXN0KQorCisgICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIGRlZiB0ZXN0X3BhcnRpYWxfdGltZXN0YW1wKHNlbGYpOgorICAgICAgICAjIFdoZW4gdGhlIHRpbWVzdGFtcCBpcyBwYXJ0aWFsLCByZWdlbmVyYXRlIHRoZSAucHljLCBlbHNlCisgICAgICAgICMgcmFpc2UgRU9GRXJyb3IuCisgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJjX3BhdGgpOgorICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbbmFtZV0sIG5hbWUpCisgICAgICAgICAgICB3aXRoIG9wZW4oYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGZpbGUucmVhZCgpKSwgOCkKKworICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKKyAgICBkZWYgdGVzdF9ub19tYXJzaGFsKHNlbGYpOgorICAgICAgICAjIFdoZW4gdGhlcmUgaXMgb25seSB0aGUgbWFnaWMgbnVtYmVyIGFuZCB0aW1lc3RhbXAsIHJhaXNlIEVPRkVycm9yLgorICAgICAgICBzZWxmLl90ZXN0X25vX21hcnNoYWwoKQorCisgICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIGRlZiB0ZXN0X25vbl9jb2RlX21hcnNoYWwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfbm9uX2NvZGVfbWFyc2hhbCgpCisgICAgICAgICMgWFhYIEltcG9ydEVycm9yIHdoZW4gc291cmNlbGVzcworCisgICAgIyBbYmFkIG1hcnNoYWxdCisgICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcworICAgIGRlZiB0ZXN0X2JhZF9tYXJzaGFsKHNlbGYpOgorICAgICAgICAjIEJhZCBtYXJzaGFsIGRhdGEgc2hvdWxkIHJhaXNlIGEgVmFsdWVFcnJvci4KKyAgICAgICAgc2VsZi5fdGVzdF9iYWRfbWFyc2hhbCgpCisKICAgICAjIFtiYWQgdGltZXN0YW1wXQogICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9iYWRfYnl0ZWNvZGUoc2VsZik6CisgICAgZGVmIHRlc3Rfb2xkX3RpbWVzdGFtcChzZWxmKToKICAgICAgICAgIyBXaGVuIHRoZSB0aW1lc3RhbXAgaXMgb2xkZXIgdGhhbiB0aGUgc291cmNlLCBieXRlY29kZSBzaG91bGQgYmUKICAgICAgICAgIyByZWdlbmVyYXRlZC4KICAgICAgICAgemVyb3MgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNvdXJjZV91dGlsLmJ5dGVjb2RlX3BhdGgobWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncitiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoNCkKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKHplcm9zKQpAQCAtMjM1LDIyICszMTEsNiBAQAogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWNvZGVfZmlsZS5yZWFkKDQpLCBzb3VyY2VfdGltZXN0YW1wKQogCi0gICAgIyBbYmFkIG1hcnNoYWxdCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB0ZXN0X2JhZF9tYXJzaGFsKHNlbGYpOgotICAgICAgICAjIEJhZCBtYXJzaGFsIGRhdGEgc2hvdWxkIHJhaXNlIGEgVmFsdWVFcnJvci4KLSAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNvdXJjZV91dGlsLmJ5dGVjb2RlX3BhdGgobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBpbXBvcnRsaWIuX3dfbG9uZyhzb3VyY2VfbXRpbWUpCi0gICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3diJykgYXMgYnl0ZWNvZGVfZmlsZToKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKHNvdXJjZV90aW1lc3RhbXApCi0gICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZShiJ0FBQUEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5pbXBvcnRfLCBtYXBwaW5nWydfdGVtcCddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX3RlbXAnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfdGVtcCcgbm90IGluIHN5cy5tb2R1bGVzKQotCiAgICAgIyBbYnl0ZWNvZGUgcmVhZC1vbmx5XQogICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKICAgICBkZWYgdGVzdF9yZWFkX29ubHlfYnl0ZWNvZGUoc2VsZik6CkBAIC0yNTgsNyArMzE4LDcgQEAKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgIyBDcmVhdGUgYnl0ZWNvZGUgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmUtY3JlYXRlZC4KICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgYnl0ZWNvZGVfcGF0aCA9IHNvdXJjZV91dGlsLmJ5dGVjb2RlX3BhdGgobWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncitiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoMCkKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKGInXHgwMFx4MDBceDAwXHgwMCcpCkBAIC0yNzMsOSArMzMzLDU3IEBACiAgICAgICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwgc3RhdC5TX0lXVVNSKQogCiAKK2NsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKKworICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1NvdXJjZWxlc3NGaWxlTG9hZGVyCisKKyAgICBkZWYgdGVzdF9lbXB0eV9maWxlKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhieXRlY29kZV9wYXRoLCBuYW1lKQorCisgICAgICAgIHNlbGYuX3Rlc3RfZW1wdHlfZmlsZSh0ZXN0LCBkZWxfc291cmNlPVRydWUpCisKKyAgICBkZWYgdGVzdF9wYXJ0aWFsX21hZ2ljKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhieXRlY29kZV9wYXRoLCBuYW1lKQorICAgICAgICBzZWxmLl90ZXN0X3BhcnRpYWxfbWFnaWModGVzdCwgZGVsX3NvdXJjZT1UcnVlKQorCisgICAgZGVmIHRlc3RfbWFnaWNfb25seShzZWxmKToKKyAgICAgICAgZGVmIHRlc3QobmFtZSwgbWFwcGluZywgYnl0ZWNvZGVfcGF0aCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8oYnl0ZWNvZGVfcGF0aCwgbmFtZSkKKworICAgICAgICBzZWxmLl90ZXN0X21hZ2ljX29ubHkodGVzdCwgZGVsX3NvdXJjZT1UcnVlKQorCisgICAgZGVmIHRlc3RfYmFkX21hZ2ljKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhieXRlY29kZV9wYXRoLCBuYW1lKQorCisgICAgICAgIHNlbGYuX3Rlc3RfYmFkX21hZ2ljKHRlc3QsIGRlbF9zb3VyY2U9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3BhcnRpYWxfdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChuYW1lLCBtYXBwaW5nLCBieXRlY29kZV9wYXRoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhieXRlY29kZV9wYXRoLCBuYW1lKQorCisgICAgICAgIHNlbGYuX3Rlc3RfcGFydGlhbF90aW1lc3RhbXAodGVzdCwgZGVsX3NvdXJjZT1UcnVlKQorCisgICAgZGVmIHRlc3Rfbm9fbWFyc2hhbChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9ub19tYXJzaGFsKGRlbF9zb3VyY2U9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X25vbl9jb2RlX21hcnNoYWwoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfbm9uX2NvZGVfbWFyc2hhbChkZWxfc291cmNlPVRydWUpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoU2ltcGxlVGVzdCwgQmFkQnl0ZWNvZGVUZXN0KQorICAgIHJ1bl91bml0dGVzdChTaW1wbGVUZXN0LAorICAgICAgICAgICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsCisgICAgICAgICAgICAgICAgIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3QKKyAgICAgICAgICAgICAgICApCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9maW5kZXIucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3RfZmluZGVyLnB5CmluZGV4IGM0OTVjNWEuLjdiOTA4OGQgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9maW5kZXIucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS90ZXN0X2ZpbmRlci5weQpAQCAtMSw3ICsxLDkgQEAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBfYm9vdHN0cmFwCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5YwogaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwpAQCAtMzIsNyArMzQsOSBAQAogICAgICIiIgogCiAgICAgZGVmIGltcG9ydF8oc2VsZiwgcm9vdCwgbW9kdWxlKToKLSAgICAgICAgZmluZGVyID0gX2Jvb3RzdHJhcC5fUHlQeWNGaWxlRmluZGVyKHJvb3QpCisgICAgICAgIGZpbmRlciA9IF9ib290c3RyYXAuX0ZpbGVGaW5kZXIocm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYm9vdHN0cmFwLl9Tb3VyY2VGaW5kZXJEZXRhaWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jvb3RzdHJhcC5fU291cmNlbGVzc0ZpbmRlckRldGFpbHMoKSkKICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdCwgY3JlYXRlPU5vbmUsICosIGNvbXBpbGVfPU5vbmUsIHVubGluaz1Ob25lKToKQEAgLTUyLDYgKzU2LDE0IEBACiAgICAgICAgICAgICBpZiB1bmxpbms6CiAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gdW5saW5rOgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsobWFwcGluZ1tuYW1lXSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgbWFrZV9sZWdhY3lfcHljKG1hcHBpbmdbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBTb21lIHRlc3RzIGRvIG5vdCBzZXQgY29tcGlsZV89VHJ1ZSBzbyB0aGUgc291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAjIG1vZHVsZSB3aWxsIG5vdCBnZXQgY29tcGlsZWQgYW5kIHRoZXJlIHdpbGwgYmUgbm8KKyAgICAgICAgICAgICAgICAgICAgICAgICMgUEVQIDMxNDcgcHljIGZpbGUgdG8gcmVuYW1lLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLmltcG9ydF8obWFwcGluZ1snLnJvb3QnXSwgdGVzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGxvYWRlciwgJ2xvYWRfbW9kdWxlJykpCiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCkBAIC02MCw3ICs3Miw4IEBACiAgICAgICAgICMgW3RvcC1sZXZlbCBzb3VyY2VdCiAgICAgICAgIHNlbGYucnVuX3Rlc3QoJ3RvcF9sZXZlbCcpCiAgICAgICAgICMgW3RvcC1sZXZlbCBiY10KLSAgICAgICAgc2VsZi5ydW5fdGVzdCgndG9wX2xldmVsJywgY29tcGlsZV89eyd0b3BfbGV2ZWwnfSwgdW5saW5rPXsndG9wX2xldmVsJ30pCisgICAgICAgIHNlbGYucnVuX3Rlc3QoJ3RvcF9sZXZlbCcsIGNvbXBpbGVfPXsndG9wX2xldmVsJ30sCisgICAgICAgICAgICAgICAgICAgICAgdW5saW5rPXsndG9wX2xldmVsJ30pCiAgICAgICAgICMgW3RvcC1sZXZlbCBib3RoXQogICAgICAgICBzZWxmLnJ1bl90ZXN0KCd0b3BfbGV2ZWwnLCBjb21waWxlXz17J3RvcF9sZXZlbCd9KQogCkBAIC05NywxNSArMTEwLDE0IEBACiAgICAgICAgICAgICB3aXRoIGNvbnRleHQgYXMgbWFwcGluZzoKICAgICAgICAgICAgICAgICBvcy51bmxpbmsobWFwcGluZ1sncGtnLnN1Yi5fX2luaXRfXyddKQogICAgICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmRpcm5hbWUobWFwcGluZ1sncGtnLl9faW5pdF9fJ10pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0V2FybmluZywgc2VsZi5pbXBvcnRfLCBwa2dfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BrZy5zdWInKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0V2FybmluZyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0Xyhwa2dfZGlyLCAncGtnLnN1YicpCiAKICAgICAjIFtwYWNrYWdlIG92ZXIgbW9kdWxlc10KICAgICBkZWYgdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlKHNlbGYpOgotICAgICAgICAjIFhYWCBUaGlzIGlzIG5vdCBhIGJsYWNrYm94IHRlc3QhCiAgICAgICAgIG5hbWUgPSAnX3RlbXAnCiAgICAgICAgIGxvYWRlciA9IHNlbGYucnVuX3Rlc3QobmFtZSwgeyd7MH0uX19pbml0X18nLmZvcm1hdChuYW1lKSwgbmFtZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX19pbml0X18nIGluIGxvYWRlci5fYmFzZV9wYXRoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19faW5pdF9fJyBpbiBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpKQogCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgpAQCAtMTE3LDggKzEyOSwxOSBAQAogICAgIGRlZiB0ZXN0X2VtcHR5X2RpcihzZWxmKToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJlcnJvciIsIEltcG9ydFdhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRXYXJuaW5nLCBzZWxmLnJ1bl90ZXN0LCAncGtnJywKLSAgICAgICAgICAgIHsncGtnLl9faW5pdF9fJ30sIHVubGluaz17J3BrZy5fX2luaXRfXyd9KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRXYXJuaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLnJ1bl90ZXN0KCdwa2cnLCB7J3BrZy5fX2luaXRfXyd9LCB1bmxpbms9eydwa2cuX19pbml0X18nfSkKKworICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZ19mb3JfZGlyKHNlbGYpOgorICAgICAgICAjIFRoZSBlbXB0eSBzdHJpbmcgZnJvbSBzeXMucGF0aCBtZWFucyB0byBzZWFyY2ggaW4gdGhlIGN3ZC4KKyAgICAgICAgZmluZGVyID0gX2Jvb3RzdHJhcC5fRmlsZUZpbmRlcignJywgX2Jvb3RzdHJhcC5fU291cmNlRmluZGVyRGV0YWlscygpKQorICAgICAgICB3aXRoIG9wZW4oJ21vZC5weScsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoJ21vZCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MudW5saW5rKCdtb2QucHknKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkgYi9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CmluZGV4IDNlZmIzYmUuLjM3NGY3YjYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQpAQCAtOCwxMSArOCwxNCBAQAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3Igc291cmNlLiIiIgogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKLSAgICAgICAgIyBYWFggT25seSB3b3JrIG9uIGV4aXN0aW5nIGRpcmVjdG9yaWVzPwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdkdW1teScpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfYm9vdHN0cmFwLl9GaWxlRmluZGVyKG1hcHBpbmdbJy5yb290J10pLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2Jvb3RzdHJhcC5fZmlsZV9wYXRoX2hvb2sobWFwcGluZ1snLnJvb3QnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmluZF9tb2R1bGUnKSkKIAorICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHJlcHJlc2VudHMgdGhlIGN3ZC4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoX2Jvb3RzdHJhcC5fZmlsZV9wYXRoX2hvb2soJycpLCAnZmluZF9tb2R1bGUnKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdApkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKaW5kZXggMzczNDcxMi4uNzk0YTNkZiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0zMywxMCArMzMsMTAgQEAKIAogICAgIGRlZiBydW5fdGVzdChzZWxmLCBzb3VyY2UpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKHNlbGYubW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSwgJ3diJylhcyBmaWxlOgorICAgICAgICAgICAgd2l0aCBvcGVuKG1hcHBpbmdbc2VsZi5tb2R1bGVfbmFtZV0sICd3YicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzb3VyY2UpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9QeVB5Y0ZpbGVMb2FkZXIoc2VsZi5tb2R1bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbc2VsZi5tb2R1bGVfbmFtZV0sIEZhbHNlKQorICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5fU291cmNlRmlsZUxvYWRlcihzZWxmLm1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1tzZWxmLm1vZHVsZV9uYW1lXSkKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKIAogICAgIGRlZiBjcmVhdGVfc291cmNlKHNlbGYsIGVuY29kaW5nKToKQEAgLTgxLDcgKzgxLDggQEAKICAgICAjIFtCT00gY29uZmxpY3RdCiAgICAgZGVmIHRlc3RfYm9tX2NvbmZsaWN0KHNlbGYpOgogICAgICAgICBzb3VyY2UgPSBjb2RlY3MuQk9NX1VURjggKyBzZWxmLmNyZWF0ZV9zb3VyY2UoJ2xhdGluLTEnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgc2VsZi5ydW5fdGVzdCwgc291cmNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKKyAgICAgICAgICAgIHNlbGYucnVuX3Rlc3Qoc291cmNlKQogCiAKIGNsYXNzIExpbmVFbmRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk2LDggKzk3LDggQEAKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcyhtb2R1bGVfbmFtZSkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nW21vZHVsZV9uYW1lXSwgJ3diJykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKHNvdXJjZSkKLSAgICAgICAgICAgIGxvYWRlciA9IF9ib290c3RyYXAuX1B5UHljRmlsZUxvYWRlcihtb2R1bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nW21vZHVsZV9uYW1lXSwgRmFsc2UpCisgICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLl9Tb3VyY2VGaWxlTG9hZGVyKG1vZHVsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbbW9kdWxlX25hbWVdKQogICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKIAogICAgICMgW2NyXQpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L3NvdXJjZS91dGlsLnB5CmluZGV4IDJiOTQ1YzUuLmFlNjU2NjMgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC9zb3VyY2UvdXRpbC5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3Qvc291cmNlL3V0aWwucHkKQEAgLTEsNSArMSw2IEBACiBmcm9tIC4uIGltcG9ydCB1dGlsCiBpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGVycm5vCiBpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaW1wCiBpbXBvcnQgb3MKQEAgLTI2LDE0ICsyNywxNiBAQAogICAgIHJldHVybiB3cmFwcGVyCiAKIAotZGVmIGJ5dGVjb2RlX3BhdGgoc291cmNlX3BhdGgpOgotICAgIGZvciBzdWZmaXgsIF8sIHR5cGVfIGluIGltcC5nZXRfc3VmZml4ZXMoKToKLSAgICAgICAgaWYgdHlwZV8gPT0gaW1wLlBZX0NPTVBJTEVEOgotICAgICAgICAgICAgYmNfc3VmZml4ID0gc3VmZml4Ci0gICAgICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIGJ5dGVjb2RlIHN1ZmZpeCBpcyBkZWZpbmVkIikKLSAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChzb3VyY2VfcGF0aClbMF0gKyBiY19zdWZmaXgKK2RlZiBlbnN1cmVfYnl0ZWNvZGVfcGF0aChieXRlY29kZV9wYXRoKToKKyAgICAiIiJFbnN1cmUgdGhhdCB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGZvciBQRVAgMzE0NyBweWMgZmlsZSBleGlzdHMuCisKKyAgICA6cGFyYW0gYnl0ZWNvZGVfcGF0aDogRmlsZSBzeXN0ZW0gcGF0aCB0byBQRVAgMzE0NyBweWMgZmlsZS4KKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguZGlybmFtZShieXRlY29kZV9wYXRoKSkKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgaWYgZXJyb3IuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgcmFpc2UKIAogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfYWJjLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IDZlMDk1MzQuLjBlY2JlMzkgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC90ZXN0X2FiYy5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvdGVzdF9hYmMucHkKQEAgLTUzLDkgKzUzLDIwIEBACiAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcl0KIAogCitjbGFzcyBFeGVjdXRpb25Mb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgc3VwZXJjbGFzc2VzID0gW2FiYy5JbnNwZWN0TG9hZGVyXQorICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyXQorCisKK2NsYXNzIFNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQorCisKIGNsYXNzIFB5TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5JbnNwZWN0TG9hZGVyXQorICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCiAKIAogY2xhc3MgUHlQeWNMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfYXBpLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfYXBpLnB5CmluZGV4IDY1ZjhkMDQuLjBmZmEzYzQgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvdGVzdC90ZXN0X2FwaS5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvdGVzdF9hcGkucHkKQEAgLTI3LDcgKzI3LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKIAogICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6Ci0gICAgICAgICMgVGVzdCBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2UgdGhyb3VnaCBhIHJlbGF0dmUgaW1wb3J0LgorICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlIHRocm91Z2ggYSByZWxhdGl2ZSBpbXBvcnQuCiAgICAgICAgIHBrZ19uYW1lID0gJ3BrZycKICAgICAgICAgcGtnX2xvbmdfbmFtZSA9ICd7MH0uX19pbml0X18nLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgbW9kdWxlX25hbWUgPSAnbW9kJwpAQCAtNjMsNyArNjMsOCBAQAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF93b19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFJlbGF0aXZlIGltcG9ydHMgY2Fubm90IGhhcHBlbiB3aXRob3V0IHRoZSAncGFja2FnZScgYXJndW1lbnQgYmVpbmcKICAgICAgICAgIyBzZXQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUsICcuc3VwcG9ydCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuc3VwcG9ydCcpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfdXRpbC5weSBiL0xpYi9pbXBvcnRsaWIvdGVzdC90ZXN0X3V0aWwucHkKaW5kZXggNDA2NDc3ZC4uNjAyNDQ3ZiAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L3Rlc3RfdXRpbC5weQorKysgYi9MaWIvaW1wb3J0bGliL3Rlc3QvdGVzdF91dGlsLnB5CkBAIC00MCw3ICs0MCw3IEBACiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgcmV0dXJuZWRfbW9kdWxlID0gc2VsZi5yZXR1cm5fbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLm1vZHVsZXNbbmFtZV0gaXMgcmV0dXJuZWRfbW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXR1cm5lZF9tb2R1bGUsIHN5cy5tb2R1bGVzW25hbWVdKQogCiAgICAgZGVmIHRlc3RfbmV3X21vZHVsZV9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMgaWYgYWRkZWQgYnV0IGFuCkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgc2VsZi5yYWlzZV9leGNlcHRpb24obmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubW9kdWxlc1tuYW1lXSBpcyBtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZSwgc3lzLm1vZHVsZXNbbmFtZV0pCiAKIAogY2xhc3MgU2V0UGFja2FnZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdGVzdC91dGlsLnB5IGIvTGliL2ltcG9ydGxpYi90ZXN0L3V0aWwucHkKaW5kZXggODQ1ZTM4MC4uMGMwYzg0YyAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi90ZXN0L3V0aWwucHkKKysrIGIvTGliL2ltcG9ydGxpYi90ZXN0L3V0aWwucHkKQEAgLTYsMjEgKzYsMjIgQEAKIGltcG9ydCBzeXMKIAogCi1kZWYgY2FzZV9pbnNlbnNpdGl2ZV90ZXN0cyhjbGFzc18pOgorQ0FTRV9JTlNFTlNJVElWRV9GUyA9IFRydWUKKyMgV2luZG93cyBpcyB0aGUgb25seSBPUyB0aGF0IGlzICphbHdheXMqIGNhc2UtaW5zZW5zaXRpdmUKKyMgKE9TIFggKmNhbiogYmUgY2FzZS1zZW5zaXRpdmUpLgoraWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgorICAgIGNoYW5nZWRfbmFtZSA9IF9fZmlsZV9fLnVwcGVyKCkKKyAgICBpZiBjaGFuZ2VkX25hbWUgPT0gX19maWxlX186CisgICAgICAgIGNoYW5nZWRfbmFtZSA9IF9fZmlsZV9fLmxvd2VyKCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2hhbmdlZF9uYW1lKToKKyAgICAgICAgQ0FTRV9JTlNFTlNJVElWRV9GUyA9IEZhbHNlCisKKworZGVmIGNhc2VfaW5zZW5zaXRpdmVfdGVzdHModGVzdCk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgbnVsbGlmaWVzIHRlc3RzIHJlcXVpcmluZyBhIGNhc2UtaW5zZW5zaXRpdmUKICAgICBmaWxlIHN5c3RlbS4iIiIKLSAgICAjIFdpbmRvd3MgaXMgdGhlIG9ubHkgT1MgdGhhdCBpcyAqYWx3YXlzKiBjYXNlLWluc2Vuc2l0aXZlCi0gICAgIyAoT1MgWCAqY2FuKiBiZSBjYXNlLXNlbnNpdGl2ZSkuCi0gICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiAoJ3dpbjMyJywgJ2N5Z3dpbicpOgotICAgICAgICBjaGFuZ2VkX25hbWUgPSBfX2ZpbGVfXy51cHBlcigpCi0gICAgICAgIGlmIGNoYW5nZWRfbmFtZSA9PSBfX2ZpbGVfXzoKLSAgICAgICAgICAgIGNoYW5nZWRfbmFtZSA9IF9fZmlsZV9fLmxvd2VyKCkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY2hhbmdlZF9uYW1lKToKLSAgICAgICAgICAgIHJldHVybiBjbGFzc18KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0Q2FzZQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBjbGFzc18KKyAgICByZXR1cm4gdW5pdHRlc3Quc2tpcElmKG5vdCBDQVNFX0lOU0VOU0lUSVZFX0ZTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSIpKHRlc3QpCiAKIAogQGNvbnRleHRtYW5hZ2VyCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL3V0aWwucHkgYi9MaWIvaW1wb3J0bGliL3V0aWwucHkKaW5kZXggM2FiYzZhOS4uN2I0NGZhMSAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQpAQCAtMSw0ICsxLDUgQEAKICIiIlV0aWxpdHkgY29kZSBmb3IgY29uc3RydWN0aW5nIGltcG9ydGVycywgZXRjLiIiIgorCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBtb2R1bGVfZm9yX2xvYWRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X2xvYWRlcgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X3BhY2thZ2UKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggZmZlMDViNy4uNDg5OWNiZiAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTEsNCArMSwzIEBACi0jIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCiAiIiJHZXQgdXNlZnVsIGluZm9ybWF0aW9uIGZyb20gbGl2ZSBQeXRob24gb2JqZWN0cy4KIAogVGhpcyBtb2R1bGUgZW5jYXBzdWxhdGVzIHRoZSBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIGludGVybmFsIHNwZWNpYWwKQEAgLTE3LDcgKzE2LDcgQEAKICAgICBnZXRtb2R1bGUoKSAtIGRldGVybWluZSB0aGUgbW9kdWxlIHRoYXQgYW4gb2JqZWN0IGNhbWUgZnJvbQogICAgIGdldGNsYXNzdHJlZSgpIC0gYXJyYW5nZSBjbGFzc2VzIHNvIGFzIHRvIHJlcHJlc2VudCB0aGVpciBoaWVyYXJjaHkKIAotICAgIGdldGFyZ3NwZWMoKSwgZ2V0YXJndmFsdWVzKCkgLSBnZXQgaW5mbyBhYm91dCBmdW5jdGlvbiBhcmd1bWVudHMKKyAgICBnZXRhcmdzcGVjKCksIGdldGFyZ3ZhbHVlcygpLCBnZXRjYWxsYXJncygpIC0gZ2V0IGluZm8gYWJvdXQgZnVuY3Rpb24gYXJndW1lbnRzCiAgICAgZ2V0ZnVsbGFyZ3NwZWMoKSAtIHNhbWUsIHdpdGggc3VwcG9ydCBmb3IgUHl0aG9uLTMwMDAgZmVhdHVyZXMKICAgICBmb3JtYXRhcmdzcGVjKCksIGZvcm1hdGFyZ3ZhbHVlcygpIC0gZm9ybWF0IGFuIGFyZ3VtZW50IHNwZWMKICAgICBnZXRvdXRlcmZyYW1lcygpLCBnZXRpbm5lcmZyYW1lcygpIC0gZ2V0IGluZm8gYWJvdXQgZnJhbWVzCkBAIC0zMywxNyArMzIsMjggQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHR5cGVzCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgcmUKLWltcG9ydCBkaXMKIGltcG9ydCBpbXAKIGltcG9ydCB0b2tlbml6ZQogaW1wb3J0IGxpbmVjYWNoZQogZnJvbSBvcGVyYXRvciBpbXBvcnQgYXR0cmdldHRlcgogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQotIyBUaGVzZSBjb25zdGFudHMgYXJlIGZyb20gSW5jbHVkZS9jb2RlLmguCi1DT19PUFRJTUlaRUQsIENPX05FV0xPQ0FMUywgQ09fVkFSQVJHUywgQ09fVkFSS0VZV09SRFMgPSAweDEsIDB4MiwgMHg0LCAweDgKLUNPX05FU1RFRCwgQ09fR0VORVJBVE9SLCBDT19OT0ZSRUUgPSAweDEwLCAweDIwLCAweDQwCisKKyMgQ3JlYXRlIGNvbnN0YW50cyBmb3IgdGhlIGNvbXBpbGVyIGZsYWdzIGluIEluY2x1ZGUvY29kZS5oCisjIFdlIHRyeSB0byBnZXQgdGhlbSBmcm9tIGRpcyB0byBhdm9pZCBkdXBsaWNhdGlvbiwgYnV0IGZhbGwKKyMgYmFjayB0byBoYXJkY29yZGluZyBzbyB0aGUgZGVwZW5kZW5jeSBpcyBvcHRpb25hbAordHJ5OgorICAgIGZyb20gZGlzIGltcG9ydCBDT01QSUxFUl9GTEFHX05BTUVTIGFzIF9mbGFnX25hbWVzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgQ09fT1BUSU1JWkVELCBDT19ORVdMT0NBTFMgPSAweDEsIDB4MgorICAgIENPX1ZBUkFSR1MsIENPX1ZBUktFWVdPUkRTID0gMHg0LCAweDgKKyAgICBDT19ORVNURUQsIENPX0dFTkVSQVRPUiwgQ09fTk9GUkVFID0gMHgxMCwgMHgyMCwgMHg0MAorZWxzZToKKyAgICBtb2RfZGljdCA9IGdsb2JhbHMoKQorICAgIGZvciBrLCB2IGluIF9mbGFnX25hbWVzLml0ZW1zKCk6CisgICAgICAgIG1vZF9kaWN0WyJDT18iICsgdl0gPSBrCiAKICMgU2VlIEluY2x1ZGUvb2JqZWN0LmgKIFRQRkxBR1NfSVNfQUJTVFJBQ1QgPSAxIDw8IDIwCkBAIC01Myw2ICs2Myw3IEBACiAgICAgIiIiUmV0dXJuIHRydWUgaWYgdGhlIG9iamVjdCBpcyBhIG1vZHVsZS4KIAogICAgIE1vZHVsZSBvYmplY3RzIHByb3ZpZGUgdGhlc2UgYXR0cmlidXRlczoKKyAgICAgICAgX19jYWNoZWRfXyAgICAgIHBhdGhuYW1lIHRvIGJ5dGUgY29tcGlsZWQgZmlsZQogICAgICAgICBfX2RvY19fICAgICAgICAgZG9jdW1lbnRhdGlvbiBzdHJpbmcKICAgICAgICAgX19maWxlX18gICAgICAgIGZpbGVuYW1lIChtaXNzaW5nIGZvciBidWlsdC1pbiBtb2R1bGVzKSIiIgogICAgIHJldHVybiBpc2luc3RhbmNlKG9iamVjdCwgdHlwZXMuTW9kdWxlVHlwZSkKQEAgLTMyNywyMiArMzM4LDEwIEBACiAgICAgcmV0dXJuIHJlc3VsdAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNsYXNzIGhlbHBlcnMKLWRlZiBfc2VhcmNoYmFzZXMoY2xzLCBhY2N1bSk6Ci0gICAgIyBTaW11bGF0ZSB0aGUgImNsYXNzaWMgY2xhc3MiIHNlYXJjaCBvcmRlci4KLSAgICBpZiBjbHMgaW4gYWNjdW06Ci0gICAgICAgIHJldHVybgotICAgIGFjY3VtLmFwcGVuZChjbHMpCi0gICAgZm9yIGJhc2UgaW4gY2xzLl9fYmFzZXNfXzoKLSAgICAgICAgX3NlYXJjaGJhc2VzKGJhc2UsIGFjY3VtKQogCiBkZWYgZ2V0bXJvKGNscyk6CiAgICAgIlJldHVybiB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgKGluY2x1ZGluZyBjbHMpIGluIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyLiIKLSAgICBpZiBoYXNhdHRyKGNscywgIl9fbXJvX18iKToKLSAgICAgICAgcmV0dXJuIGNscy5fX21yb19fCi0gICAgZWxzZToKLSAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAgX3NlYXJjaGJhc2VzKGNscywgcmVzdWx0KQotICAgICAgICByZXR1cm4gdHVwbGUocmVzdWx0KQorICAgIHJldHVybiBjbHMuX19tcm9fXwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNvdXJjZSBjb2RlIGV4dHJhY3Rpb24KIGRlZiBpbmRlbnRzaXplKGxpbmUpOgpAQCAtOTE1LDYgKzkxNCw3NyBAQAogICAgICAgICBzcGVjcy5hcHBlbmQoZm9ybWF0dmFya3codmFya3cpICsgZm9ybWF0dmFsdWUobG9jYWxzW3Zhcmt3XSkpCiAgICAgcmV0dXJuICcoJyArICcsICcuam9pbihzcGVjcykgKyAnKScKIAorZGVmIGdldGNhbGxhcmdzKGZ1bmMsICpwb3NpdGlvbmFsLCAqKm5hbWVkKToKKyAgICAiIiJHZXQgdGhlIG1hcHBpbmcgb2YgYXJndW1lbnRzIHRvIHZhbHVlcy4KKworICAgIEEgZGljdCBpcyByZXR1cm5lZCwgd2l0aCBrZXlzIHRoZSBmdW5jdGlvbiBhcmd1bWVudCBuYW1lcyAoaW5jbHVkaW5nIHRoZQorICAgIG5hbWVzIG9mIHRoZSAqIGFuZCAqKiBhcmd1bWVudHMsIGlmIGFueSksIGFuZCB2YWx1ZXMgdGhlIHJlc3BlY3RpdmUgYm91bmQKKyAgICB2YWx1ZXMgZnJvbSAncG9zaXRpb25hbCcgYW5kICduYW1lZCcuIiIiCisgICAgc3BlYyA9IGdldGZ1bGxhcmdzcGVjKGZ1bmMpCisgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd29ubHlkZWZhdWx0cywgYW5uID0gc3BlYworICAgIGZfbmFtZSA9IGZ1bmMuX19uYW1lX18KKyAgICBhcmcydmFsdWUgPSB7fQorCisgICAgaWYgaXNtZXRob2QoZnVuYykgYW5kIGZ1bmMuX19zZWxmX18gaXMgbm90IE5vbmU6CisgICAgICAgICMgaW1wbGljaXQgJ3NlbGYnIChvciAnY2xzJyBmb3IgY2xhc3NtZXRob2RzKSBhcmd1bWVudAorICAgICAgICBwb3NpdGlvbmFsID0gKGZ1bmMuX19zZWxmX18sKSArIHBvc2l0aW9uYWwKKyAgICBudW1fcG9zID0gbGVuKHBvc2l0aW9uYWwpCisgICAgbnVtX3RvdGFsID0gbnVtX3BvcyArIGxlbihuYW1lZCkKKyAgICBudW1fYXJncyA9IGxlbihhcmdzKQorICAgIG51bV9kZWZhdWx0cyA9IGxlbihkZWZhdWx0cykgaWYgZGVmYXVsdHMgZWxzZSAwCisgICAgZm9yIGFyZywgdmFsdWUgaW4gemlwKGFyZ3MsIHBvc2l0aW9uYWwpOgorICAgICAgICBhcmcydmFsdWVbYXJnXSA9IHZhbHVlCisgICAgaWYgdmFyYXJnczoKKyAgICAgICAgaWYgbnVtX3BvcyA+IG51bV9hcmdzOgorICAgICAgICAgICAgYXJnMnZhbHVlW3ZhcmFyZ3NdID0gcG9zaXRpb25hbFstKG51bV9wb3MtbnVtX2FyZ3MpOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZzJ2YWx1ZVt2YXJhcmdzXSA9ICgpCisgICAgZWxpZiAwIDwgbnVtX2FyZ3MgPCBudW1fcG9zOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzKCkgdGFrZXMgJXMgJWQgcG9zaXRpb25hbCAlcyAoJWQgZ2l2ZW4pJyAlICgKKyAgICAgICAgICAgIGZfbmFtZSwgJ2F0IG1vc3QnIGlmIGRlZmF1bHRzIGVsc2UgJ2V4YWN0bHknLCBudW1fYXJncywKKyAgICAgICAgICAgICdhcmd1bWVudHMnIGlmIG51bV9hcmdzID4gMSBlbHNlICdhcmd1bWVudCcsIG51bV90b3RhbCkpCisgICAgZWxpZiBudW1fYXJncyA9PSAwIGFuZCBudW1fdG90YWw6CisgICAgICAgIGlmIHZhcmt3IG9yIGt3b25seWFyZ3M6CisgICAgICAgICAgICBpZiBudW1fcG9zOgorICAgICAgICAgICAgICAgICMgWFhYOiBXZSBzaG91bGQgdXNlIG51bV9wb3MsIGJ1dCBQeXRob24gYWxzbyB1c2VzIG51bV90b3RhbDoKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzKCkgdGFrZXMgZXhhY3RseSAwIHBvc2l0aW9uYWwgYXJndW1lbnRzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyglZCBnaXZlbiknICUgKGZfbmFtZSwgbnVtX3RvdGFsKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMoKSB0YWtlcyBubyBhcmd1bWVudHMgKCVkIGdpdmVuKScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmX25hbWUsIG51bV90b3RhbCkpCisKKyAgICBmb3IgYXJnIGluIGl0ZXJ0b29scy5jaGFpbihhcmdzLCBrd29ubHlhcmdzKToKKyAgICAgICAgaWYgYXJnIGluIG5hbWVkOgorICAgICAgICAgICAgaWYgYXJnIGluIGFyZzJ2YWx1ZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVzKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAnJXMnIiAlIChmX25hbWUsIGFyZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZzJ2YWx1ZVthcmddID0gbmFtZWQucG9wKGFyZykKKyAgICBmb3Iga3dvbmx5YXJnIGluIGt3b25seWFyZ3M6CisgICAgICAgIGlmIGt3b25seWFyZyBub3QgaW4gYXJnMnZhbHVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGFyZzJ2YWx1ZVtrd29ubHlhcmddID0ga3dvbmx5ZGVmYXVsdHNba3dvbmx5YXJnXQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMoKSBuZWVkcyBrZXl3b3JkLW9ubHkgYXJndW1lbnQgJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZfbmFtZSwga3dvbmx5YXJnKSkKKyAgICBpZiBkZWZhdWx0czogICAgIyBmaWxsIGluIGFueSBtaXNzaW5nIHZhbHVlcyB3aXRoIHRoZSBkZWZhdWx0cworICAgICAgICBmb3IgYXJnLCB2YWx1ZSBpbiB6aXAoYXJnc1stbnVtX2RlZmF1bHRzOl0sIGRlZmF1bHRzKToKKyAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gYXJnMnZhbHVlOgorICAgICAgICAgICAgICAgIGFyZzJ2YWx1ZVthcmddID0gdmFsdWUKKyAgICBpZiB2YXJrdzoKKyAgICAgICAgYXJnMnZhbHVlW3Zhcmt3XSA9IG5hbWVkCisgICAgZWxpZiBuYW1lZDoKKyAgICAgICAgdW5leHBlY3RlZCA9IG5leHQoaXRlcihuYW1lZCkpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50ICclcyciICUKKyAgICAgICAgICAgICAgICAgICAgICAgIChmX25hbWUsIHVuZXhwZWN0ZWQpKQorICAgIHVuYXNzaWduZWQgPSBudW1fYXJncyAtIGxlbihbYXJnIGZvciBhcmcgaW4gYXJncyBpZiBhcmcgaW4gYXJnMnZhbHVlXSkKKyAgICBpZiB1bmFzc2lnbmVkOgorICAgICAgICBudW1fcmVxdWlyZWQgPSBudW1fYXJncyAtIG51bV9kZWZhdWx0cworICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzKCkgdGFrZXMgJXMgJWQgJXMgKCVkIGdpdmVuKScgJSAoCisgICAgICAgICAgICBmX25hbWUsICdhdCBsZWFzdCcgaWYgZGVmYXVsdHMgZWxzZSAnZXhhY3RseScsIG51bV9yZXF1aXJlZCwKKyAgICAgICAgICAgICdhcmd1bWVudHMnIGlmIG51bV9yZXF1aXJlZCA+IDEgZWxzZSAnYXJndW1lbnQnLCBudW1fdG90YWwpKQorICAgIHJldHVybiBhcmcydmFsdWUKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzdGFjayBmcmFtZSBleHRyYWN0aW9uCiAKIFRyYWNlYmFjayA9IG5hbWVkdHVwbGUoJ1RyYWNlYmFjaycsICdmaWxlbmFtZSBsaW5lbm8gZnVuY3Rpb24gY29kZV9jb250ZXh0IGluZGV4JykKQEAgLTk3OSwxMCArMTA0OSw5IEBACiAgICAgICAgIHRiID0gdGIudGJfbmV4dAogICAgIHJldHVybiBmcmFtZWxpc3QKIAotaWYgaGFzYXR0cihzeXMsICdfZ2V0ZnJhbWUnKToKLSAgICBjdXJyZW50ZnJhbWUgPSBzeXMuX2dldGZyYW1lCi1lbHNlOgotICAgIGN1cnJlbnRmcmFtZSA9IGxhbWJkYSBfPU5vbmU6IE5vbmUKK2RlZiBjdXJyZW50ZnJhbWUoKToKKyAgICAiIiJSZXR1cm4gdGhlIGZyYW1lIG9mIHRoZSBjYWxsZXIgb3IgTm9uZSBpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZS4iIiIKKyAgICByZXR1cm4gc3lzLl9nZXRmcmFtZSgxKSBpZiBoYXNhdHRyKHN5cywgIl9nZXRmcmFtZSIpIGVsc2UgTm9uZQogCiBkZWYgc3RhY2soY29udGV4dD0xKToKICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHJlY29yZHMgZm9yIHRoZSBzdGFjayBhYm92ZSB0aGUgY2FsbGVyJ3MgZnJhbWUuIiIiCkBAIC05OTEsMyArMTA2MCwxMTUgQEAKIGRlZiB0cmFjZShjb250ZXh0PTEpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2YgcmVjb3JkcyBmb3IgdGhlIHN0YWNrIGJlbG93IHRoZSBjdXJyZW50IGV4Y2VwdGlvbi4iIiIKICAgICByZXR1cm4gZ2V0aW5uZXJmcmFtZXMoc3lzLmV4Y19pbmZvKClbMl0sIGNvbnRleHQpCisKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGljIHZlcnNpb24gb2YgZ2V0YXR0cgorCitfc2VudGluZWwgPSBvYmplY3QoKQorCitkZWYgX3N0YXRpY19nZXRtcm8oa2xhc3MpOgorICAgIHJldHVybiB0eXBlLl9fZGljdF9fWydfX21yb19fJ10uX19nZXRfXyhrbGFzcykKKworZGVmIF9jaGVja19pbnN0YW5jZShvYmosIGF0dHIpOgorICAgIGluc3RhbmNlX2RpY3QgPSB7fQorICAgIHRyeToKKyAgICAgICAgaW5zdGFuY2VfZGljdCA9IG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKG9iaiwgIl9fZGljdF9fIikKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICByZXR1cm4gZGljdC5nZXQoaW5zdGFuY2VfZGljdCwgYXR0ciwgX3NlbnRpbmVsKQorCisKK2RlZiBfY2hlY2tfY2xhc3Moa2xhc3MsIGF0dHIpOgorICAgIGZvciBlbnRyeSBpbiBfc3RhdGljX2dldG1ybyhrbGFzcyk6CisgICAgICAgIGlmIG5vdCBfc2hhZG93ZWRfZGljdCh0eXBlKGVudHJ5KSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5Ll9fZGljdF9fW2F0dHJdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIHJldHVybiBfc2VudGluZWwKKworZGVmIF9pc190eXBlKG9iaik6CisgICAgdHJ5OgorICAgICAgICBfc3RhdGljX2dldG1ybyhvYmopCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIF9zaGFkb3dlZF9kaWN0KGtsYXNzKToKKyAgICBkaWN0X2F0dHIgPSB0eXBlLl9fZGljdF9fWyJfX2RpY3RfXyJdCisgICAgZm9yIGVudHJ5IGluIF9zdGF0aWNfZ2V0bXJvKGtsYXNzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2xhc3NfZGljdCA9IGRpY3RfYXR0ci5fX2dldF9fKGVudHJ5KVsiX19kaWN0X18iXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgKHR5cGUoY2xhc3NfZGljdCkgaXMgdHlwZXMuR2V0U2V0RGVzY3JpcHRvclR5cGUgYW5kCisgICAgICAgICAgICAgICAgICAgIGNsYXNzX2RpY3QuX19uYW1lX18gPT0gIl9fZGljdF9fIiBhbmQKKyAgICAgICAgICAgICAgICAgICAgY2xhc3NfZGljdC5fX29iamNsYXNzX18gaXMgZW50cnkpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBnZXRhdHRyX3N0YXRpYyhvYmosIGF0dHIsIGRlZmF1bHQ9X3NlbnRpbmVsKToKKyAgICAiIiJSZXRyaWV2ZSBhdHRyaWJ1dGVzIHdpdGhvdXQgdHJpZ2dlcmluZyBkeW5hbWljIGxvb2t1cCB2aWEgdGhlCisgICAgICAgZGVzY3JpcHRvciBwcm90b2NvbCwgIF9fZ2V0YXR0cl9fIG9yIF9fZ2V0YXR0cmlidXRlX18uCisKKyAgICAgICBOb3RlOiB0aGlzIGZ1bmN0aW9uIG1heSBub3QgYmUgYWJsZSB0byByZXRyaWV2ZSBhbGwgYXR0cmlidXRlcworICAgICAgIHRoYXQgZ2V0YXR0ciBjYW4gZmV0Y2ggKGxpa2UgZHluYW1pY2FsbHkgY3JlYXRlZCBhdHRyaWJ1dGVzKQorICAgICAgIGFuZCBtYXkgZmluZCBhdHRyaWJ1dGVzIHRoYXQgZ2V0YXR0ciBjYW4ndCAobGlrZSBkZXNjcmlwdG9ycworICAgICAgIHRoYXQgcmFpc2UgQXR0cmlidXRlRXJyb3IpLiBJdCBjYW4gYWxzbyByZXR1cm4gZGVzY3JpcHRvciBvYmplY3RzCisgICAgICAgaW5zdGVhZCBvZiBpbnN0YW5jZSBtZW1iZXJzIGluIHNvbWUgY2FzZXMuIFNlZSB0aGUKKyAgICAgICBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorICAgICIiIgorICAgIGluc3RhbmNlX3Jlc3VsdCA9IF9zZW50aW5lbAorICAgIGlmIG5vdCBfaXNfdHlwZShvYmopOgorICAgICAgICBrbGFzcyA9IHR5cGUob2JqKQorICAgICAgICBpZiBub3QgX3NoYWRvd2VkX2RpY3Qoa2xhc3MpOgorICAgICAgICAgICAgaW5zdGFuY2VfcmVzdWx0ID0gX2NoZWNrX2luc3RhbmNlKG9iaiwgYXR0cikKKyAgICBlbHNlOgorICAgICAgICBrbGFzcyA9IG9iagorCisgICAga2xhc3NfcmVzdWx0ID0gX2NoZWNrX2NsYXNzKGtsYXNzLCBhdHRyKQorCisgICAgaWYgaW5zdGFuY2VfcmVzdWx0IGlzIG5vdCBfc2VudGluZWwgYW5kIGtsYXNzX3Jlc3VsdCBpcyBub3QgX3NlbnRpbmVsOgorICAgICAgICBpZiAoX2NoZWNrX2NsYXNzKHR5cGUoa2xhc3NfcmVzdWx0KSwgJ19fZ2V0X18nKSBpcyBub3QgX3NlbnRpbmVsIGFuZAorICAgICAgICAgICAgX2NoZWNrX2NsYXNzKHR5cGUoa2xhc3NfcmVzdWx0KSwgJ19fc2V0X18nKSBpcyBub3QgX3NlbnRpbmVsKToKKyAgICAgICAgICAgIHJldHVybiBrbGFzc19yZXN1bHQKKworICAgIGlmIGluc3RhbmNlX3Jlc3VsdCBpcyBub3QgX3NlbnRpbmVsOgorICAgICAgICByZXR1cm4gaW5zdGFuY2VfcmVzdWx0CisgICAgaWYga2xhc3NfcmVzdWx0IGlzIG5vdCBfc2VudGluZWw6CisgICAgICAgIHJldHVybiBrbGFzc19yZXN1bHQKKworICAgIGlmIG9iaiBpcyBrbGFzczoKKyAgICAgICAgIyBmb3IgdHlwZXMgd2UgY2hlY2sgdGhlIG1ldGFjbGFzcyB0b28KKyAgICAgICAgZm9yIGVudHJ5IGluIF9zdGF0aWNfZ2V0bXJvKHR5cGUoa2xhc3MpKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnkuX19kaWN0X19bYXR0cl0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgaWYgZGVmYXVsdCBpcyBub3QgX3NlbnRpbmVsOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCisKKworR0VOX0NSRUFURUQgPSAnR0VOX0NSRUFURUQnCitHRU5fUlVOTklORyA9ICdHRU5fUlVOTklORycKK0dFTl9TVVNQRU5ERUQgPSAnR0VOX1NVU1BFTkRFRCcKK0dFTl9DTE9TRUQgPSAnR0VOX0NMT1NFRCcKKworZGVmIGdldGdlbmVyYXRvcnN0YXRlKGdlbmVyYXRvcik6CisgICAgIiIiR2V0IGN1cnJlbnQgc3RhdGUgb2YgYSBnZW5lcmF0b3ItaXRlcmF0b3IuCisKKyAgICBQb3NzaWJsZSBzdGF0ZXMgYXJlOgorICAgICAgR0VOX0NSRUFURUQ6IFdhaXRpbmcgdG8gc3RhcnQgZXhlY3V0aW9uLgorICAgICAgR0VOX1JVTk5JTkc6IEN1cnJlbnRseSBiZWluZyBleGVjdXRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICBHRU5fU1VTUEVOREVEOiBDdXJyZW50bHkgc3VzcGVuZGVkIGF0IGEgeWllbGQgZXhwcmVzc2lvbi4KKyAgICAgIEdFTl9DTE9TRUQ6IEV4ZWN1dGlvbiBoYXMgY29tcGxldGVkLgorICAgICIiIgorICAgIGlmIGdlbmVyYXRvci5naV9ydW5uaW5nOgorICAgICAgICByZXR1cm4gR0VOX1JVTk5JTkcKKyAgICBpZiBnZW5lcmF0b3IuZ2lfZnJhbWUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIEdFTl9DTE9TRUQKKyAgICBpZiBnZW5lcmF0b3IuZ2lfZnJhbWUuZl9sYXN0aSA9PSAtMToKKyAgICAgICAgcmV0dXJuIEdFTl9DUkVBVEVECisgICAgcmV0dXJuIEdFTl9TVVNQRU5ERUQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2RlY29kZXIucHkgYi9MaWIvanNvbi9kZWNvZGVyLnB5CmluZGV4IDEyZmE4MTUuLmExOWNmMGYgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2RlY29kZXIucHkKKysrIGIvTGliL2pzb24vZGVjb2Rlci5weQpAQCAtMTQ3LDEwICsxNDcsMTQgQEAKIAogCiBkZWYgSlNPTk9iamVjdChzX2FuZF9lbmQsIHN0cmljdCwgc2Nhbl9vbmNlLCBvYmplY3RfaG9vaywgb2JqZWN0X3BhaXJzX2hvb2ssCi0gICAgICAgIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NUUik6CisgICAgICAgICAgICAgICBtZW1vPU5vbmUsIF93PVdISVRFU1BBQ0UubWF0Y2gsIF93cz1XSElURVNQQUNFX1NUUik6CiAgICAgcywgZW5kID0gc19hbmRfZW5kCiAgICAgcGFpcnMgPSBbXQogICAgIHBhaXJzX2FwcGVuZCA9IHBhaXJzLmFwcGVuZAorICAgICMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICBpZiBtZW1vIGlzIE5vbmU6CisgICAgICAgIG1lbW8gPSB7fQorICAgIG1lbW9fZ2V0ID0gbWVtby5zZXRkZWZhdWx0CiAgICAgIyBVc2UgYSBzbGljZSB0byBwcmV2ZW50IEluZGV4RXJyb3IgZnJvbSBiZWluZyByYWlzZWQsIHRoZSBmb2xsb3dpbmcKICAgICAjIGNoZWNrIHdpbGwgcmFpc2UgYSBtb3JlIHNwZWNpZmljIFZhbHVlRXJyb3IgaWYgdGhlIHN0cmluZyBpcyBlbXB0eQogICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KQEAgLTE3Myw2ICsxNzcsNyBAQAogICAgIGVuZCArPSAxCiAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAga2V5LCBlbmQgPSBzY2Fuc3RyaW5nKHMsIGVuZCwgc3RyaWN0KQorICAgICAgICBrZXkgPSBtZW1vX2dldChrZXksIGtleSkKICAgICAgICAgIyBUbyBza2lwIHNvbWUgZnVuY3Rpb24gY2FsbCBvdmVyaGVhZCB3ZSBvcHRpbWl6ZSB0aGUgZmFzdCBwYXRocyB3aGVyZQogICAgICAgICAjIHRoZSBKU09OIGtleSBzZXBhcmF0b3IgaXMgIjogIiBvciBqdXN0ICI6Ii4KICAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgpAQCAtMzM0LDYgKzMzOSw3IEBACiAgICAgICAgIHNlbGYucGFyc2Vfb2JqZWN0ID0gSlNPTk9iamVjdAogICAgICAgICBzZWxmLnBhcnNlX2FycmF5ID0gSlNPTkFycmF5CiAgICAgICAgIHNlbGYucGFyc2Vfc3RyaW5nID0gc2NhbnN0cmluZworICAgICAgICBzZWxmLm1lbW8gPSB7fQogICAgICAgICBzZWxmLnNjYW5fb25jZSA9IG1ha2Vfc2Nhbm5lcihzZWxmKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IGFjY2JkZTAuLjRiMjE0ZWIgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMjU5LDYgKzI1OSw5IEBACiAgICAgICAgIHR1cGxlPXR1cGxlLAogICAgICk6CiAKKyAgICBpZiBfaW5kZW50IGlzIG5vdCBOb25lIGFuZCBub3QgaXNpbnN0YW5jZShfaW5kZW50LCBzdHIpOgorICAgICAgICBfaW5kZW50ID0gJyAnICogX2luZGVudAorCiAgICAgZGVmIF9pdGVyZW5jb2RlX2xpc3QobHN0LCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgogICAgICAgICBpZiBub3QgbHN0OgogICAgICAgICAgICAgeWllbGQgJ1tdJwpAQCAtMjcxLDcgKzI3NCw3IEBACiAgICAgICAgIGJ1ZiA9ICdbJwogICAgICAgICBpZiBfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsICs9IDEKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCiAgICAgICAgICAgICBzZXBhcmF0b3IgPSBfaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAogICAgICAgICAgICAgYnVmICs9IG5ld2xpbmVfaW5kZW50CiAgICAgICAgIGVsc2U6CkBAIC0zMDcsNyArMzEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQotICAgICAgICAgICAgeWllbGQgJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICAgICB5aWVsZCAnXG4nICsgX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbAogICAgICAgICB5aWVsZCAnXScKICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQpAQCAtMzI0LDcgKzMyNyw3IEBACiAgICAgICAgIHlpZWxkICd7JwogICAgICAgICBpZiBfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsICs9IDEKLSAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gJ1xuJyArICgnICcgKiAoX2luZGVudCAqIF9jdXJyZW50X2luZGVudF9sZXZlbCkpCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9ICdcbicgKyBfaW5kZW50ICogX2N1cnJlbnRfaW5kZW50X2xldmVsCiAgICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IF9pdGVtX3NlcGFyYXRvciArIG5ld2xpbmVfaW5kZW50CiAgICAgICAgICAgICB5aWVsZCBuZXdsaW5lX2luZGVudAogICAgICAgICBlbHNlOgpAQCAtMzgzLDcgKzM4Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCiAgICAgICAgIGlmIG5ld2xpbmVfaW5kZW50IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgX2N1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKLSAgICAgICAgICAgIHlpZWxkICdcbicgKyAoJyAnICogKF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwpKQorICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKICAgICAgICAgeWllbGQgJ30nCiAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IGY5NGQyMzYuLjIzZWVmNjEgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMjMsNiArMjMsNyBAQAogICAgIHBhcnNlX2NvbnN0YW50ID0gY29udGV4dC5wYXJzZV9jb25zdGFudAogICAgIG9iamVjdF9ob29rID0gY29udGV4dC5vYmplY3RfaG9vawogICAgIG9iamVjdF9wYWlyc19ob29rID0gY29udGV4dC5vYmplY3RfcGFpcnNfaG9vaworICAgIG1lbW8gPSBjb250ZXh0Lm1lbW8KIAogICAgIGRlZiBfc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKICAgICAgICAgdHJ5OgpAQCAtMzQsNyArMzUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIHN0cmljdCkKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAneyc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2Vfb2JqZWN0KChzdHJpbmcsIGlkeCArIDEpLCBzdHJpY3QsCi0gICAgICAgICAgICAgICAgX3NjYW5fb25jZSwgb2JqZWN0X2hvb2ssIG9iamVjdF9wYWlyc19ob29rKQorICAgICAgICAgICAgICAgIF9zY2FuX29uY2UsIG9iamVjdF9ob29rLCBvYmplY3RfcGFpcnNfaG9vaywgbWVtbykKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnWyc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VfYXJyYXkoKHN0cmluZywgaWR4ICsgMSksIF9zY2FuX29uY2UpCiAgICAgICAgIGVsaWYgbmV4dGNoYXIgPT0gJ24nIGFuZCBzdHJpbmdbaWR4OmlkeCArIDRdID09ICdudWxsJzoKQEAgLTYxLDYgKzYyLDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAKKyAgICBkZWYgc2Nhbl9vbmNlKHN0cmluZywgaWR4KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIF9zY2FuX29uY2Uoc3RyaW5nLCBpZHgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBtZW1vLmNsZWFyKCkKKwogICAgIHJldHVybiBfc2Nhbl9vbmNlCiAKIG1ha2Vfc2Nhbm5lciA9IGNfbWFrZV9zY2FubmVyIG9yIHB5X21ha2Vfc2Nhbm5lcgpkaWZmIC0tZ2l0IGEvTGliL2tleXdvcmQucHkgYi9MaWIva2V5d29yZC5weQppbmRleCBhN2FiZTJiLi5hMzc4OGE2IDEwMDc1NQotLS0gYS9MaWIva2V5d29yZC5weQorKysgYi9MaWIva2V5d29yZC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIktleXdvcmRzIChmcm9tICJncmFtaW5pdC5jIikKIApAQCAtNjEsMjEgKzYxLDE5IEBACiAgICAgZWxzZTogb3B0ZmlsZSA9ICJMaWIva2V5d29yZC5weSIKIAogICAgICMgc2NhbiB0aGUgc291cmNlIGZpbGUgZm9yIGtleXdvcmRzCi0gICAgZnAgPSBvcGVuKGlwdGZpbGUpCi0gICAgc3RycHJvZyA9IHJlLmNvbXBpbGUoJyIoW14iXSspIicpCi0gICAgbGluZXMgPSBbXQotICAgIGZvciBsaW5lIGluIGZwOgotICAgICAgICBpZiAnezEsICInIGluIGxpbmU6Ci0gICAgICAgICAgICBtYXRjaCA9IHN0cnByb2cuc2VhcmNoKGxpbmUpCi0gICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICAgICAgJyIgKyBtYXRjaC5ncm91cCgxKSArICInLFxuIikKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBvcGVuKGlwdGZpbGUpIGFzIGZwOgorICAgICAgICBzdHJwcm9nID0gcmUuY29tcGlsZSgnIihbXiJdKykiJykKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiBmcDoKKyAgICAgICAgICAgIGlmICd7MSwgIicgaW4gbGluZToKKyAgICAgICAgICAgICAgICBtYXRjaCA9IHN0cnByb2cuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsXG4iKQogICAgIGxpbmVzLnNvcnQoKQogCiAgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0Ci0gICAgZnAgPSBvcGVuKG9wdGZpbGUpCi0gICAgZm9ybWF0ID0gZnAucmVhZGxpbmVzKCkKLSAgICBmcC5jbG9zZSgpCisgICAgd2l0aCBvcGVuKG9wdGZpbGUpIGFzIGZwOgorICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQogCiAgICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzCiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkgYi9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQppbmRleCAxYzgxMDY1Li42YTZkMGI2IDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIlRva2VuIGNvbnN0YW50cyAoZnJvbSAidG9rZW4uaCIpLiIiIgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKaW5kZXggNDE0ZWI0ZC4uYTAyYmJmZSAxMDA3NTUKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CisrKyBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBDb3B5cmlnaHQgMjAwNiBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogCmRpZmYgLS1naXQgYS9MaWIvbGluZWNhY2hlLnB5IGIvTGliL2xpbmVjYWNoZS5weQppbmRleCA5NzRiMWQ5Li5jM2YyYzNmIDEwMDY0NAotLS0gYS9MaWIvbGluZWNhY2hlLnB5CisrKyBiL0xpYi9saW5lY2FjaGUucHkKQEAgLTEyMyw5ICsxMjMsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgdHJ5OgotICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICdyYicpIGFzIGZwOgotICAgICAgICAgICAgY29kaW5nLCBsaW5lID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZwLnJlYWRsaW5lKQotICAgICAgICB3aXRoIG9wZW4oZnVsbG5hbWUsICdyJywgZW5jb2Rpbmc9Y29kaW5nKSBhcyBmcDoKKyAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZ1bGxuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCA4YzQ0NjI1Li43Yjk4N2JlIDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTEyMSwxMiArMTIxLDE1IEBACiAKICMgSXRlcmF0ZSBvdmVyIGdyb3VwaW5nIGludGVydmFscwogZGVmIF9ncm91cGluZ19pbnRlcnZhbHMoZ3JvdXBpbmcpOgorICAgIGxhc3RfaW50ZXJ2YWwgPSBOb25lCiAgICAgZm9yIGludGVydmFsIGluIGdyb3VwaW5nOgogICAgICAgICAjIGlmIGdyb3VwaW5nIGlzIC0xLCB3ZSBhcmUgZG9uZQogICAgICAgICBpZiBpbnRlcnZhbCA9PSBDSEFSX01BWDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIDA6IHJlLXVzZSBsYXN0IGdyb3VwIGFkIGluZmluaXR1bQogICAgICAgICBpZiBpbnRlcnZhbCA9PSAwOgorICAgICAgICAgICAgaWYgbGFzdF9pbnRlcnZhbCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZ3JvdXBpbmciKQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICB5aWVsZCBsYXN0X2ludGVydmFsCiAgICAgICAgIHlpZWxkIGludGVydmFsCkBAIC03MTUsNiArNzE4LDI4IEBACiAjICAgIHVwZGF0ZWQgJ3NyX3l1Lm1pY3Jvc29mdGNwMTI1MUBjeXJpbGxpYycgLT4gJ3NyX1lVLkNQMTI1MScgdG8gJ3NyX0NTLkNQMTI1MScKICMgICAgdXBkYXRlZCAnc3JfeXUudXRmOEBjeXJpbGxpYycgLT4gJ3NyX1lVLlVURi04JyB0byAnc3JfQ1MuVVRGLTgnCiAjICAgIHVwZGF0ZWQgJ3NyX3l1QGN5cmlsbGljJyAtPiAnc3JfWVUuSVNPODg1OS01JyB0byAnc3JfQ1MuSVNPODg1OS01JworIworIyBBUCAyMDEwLTA0LTEyOgorIyBVcGRhdGVkIGFsaWFzIG1hcHBpbmcgdG8gbW9zdCByZWNlbnQgbG9jYWxlLmFsaWFzIGZpbGUKKyMgZnJvbSBYLm9yZyBkaXN0cmlidXRpb24gdXNpbmcgbWFrZWxvY2FsZWFsaWFzLnB5LgorIworIyBUaGVzZSBhcmUgdGhlIGRpZmZlcmVuY2VzIGNvbXBhcmVkIHRvIHRoZSBvbGQgbWFwcGluZyAoUHl0aG9uIDIuNi41CisjIGFuZCBvbGRlcik6CisjCisjICAgIHVwZGF0ZWQgJ3J1JyAtPiAncnVfUlUuSVNPODg1OS01JyB0byAncnVfUlUuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3J1X3J1JyAtPiAncnVfUlUuSVNPODg1OS01JyB0byAncnVfUlUuVVRGLTgnCisjICAgIHVwZGF0ZWQgJ3NlcmJvY3JvYXRpYW4nIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc2gnIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc2hfeXUnIC0+ICdzcl9DUy5JU084ODU5LTInIHRvICdzcl9SUy5VVEYtOEBsYXRpbicKKyMgICAgdXBkYXRlZCAnc3InIC0+ICdzcl9DUy5JU084ODU5LTUnIHRvICdzcl9SUy5VVEYtOCcKKyMgICAgdXBkYXRlZCAnc3JAY3lyaWxsaWMnIC0+ICdzcl9DUy5JU084ODU5LTUnIHRvICdzcl9SUy5VVEYtOCcKKyMgICAgdXBkYXRlZCAnc3JAbGF0bicgLT4gJ3NyX0NTLklTTzg4NTktMicgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl9jcy51dGY4QGxhdG4nIC0+ICdzcl9DUy5VVEYtOCcgdG8gJ3NyX1JTLlVURi04QGxhdGluJworIyAgICB1cGRhdGVkICdzcl9jc0BsYXRuJyAtPiAnc3JfQ1MuSVNPODg1OS0yJyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NyX3l1JyAtPiAnc3JfQ1MuSVNPODg1OS01JyB0byAnc3JfUlMuVVRGLThAbGF0aW4nCisjICAgIHVwZGF0ZWQgJ3NyX3l1LnV0ZjhAY3lyaWxsaWMnIC0+ICdzcl9DUy5VVEYtOCcgdG8gJ3NyX1JTLlVURi04JworIyAgICB1cGRhdGVkICdzcl95dUBjeXJpbGxpYycgLT4gJ3NyX0NTLklTTzg4NTktNScgdG8gJ3NyX1JTLlVURi04JworIwogCiBsb2NhbGVfYWxpYXMgPSB7CiAgICAgJ2EzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhM19BWi5LT0k4LUMnLApAQCAtNzY2LDEzICs3OTEsMTcgQEAKICAgICAnYXJfeWUuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1lFLklTTzg4NTktNicsCiAgICAgJ2FyYWJpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAogICAgICdhcmFiaWMuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKKyAgICAnYXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKICAgICAnYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLklTTzg4NTktOUUnLAogICAgICdhel9heic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCiAgICAgJ2F6X2F6Lmlzbzg4NTk5ZSc6ICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKICAgICAnYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCisgICAgJ2JlQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCiAgICAgJ2JlX2J5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAogICAgICdiZV9ieS5jcDEyNTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKICAgICAnYmVfYnkubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCisgICAgJ2JlX2J5LnV0ZjhAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCisgICAgJ2JlX2J5QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5VVEYtOEBsYXRpbicsCiAgICAgJ2JnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAogICAgICdiZ19iZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCkBAIC04MDIsMTIgKzgzMSwzMCBAQAogICAgICdjX2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2NfYy5jJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCisgICAgJ2NhX2FkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTEnLAorICAgICdjYV9hZC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xJywKKyAgICAnY2FfYWQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAorICAgICdjYV9hZC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCisgICAgJ2NhX2FkLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5VVEYtOCcsCisgICAgJ2NhX2FkQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKICAgICAnY2FfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NhX2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjYV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCiAgICAgJ2NhX2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKICAgICAnY2FfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLlVURi04JywKICAgICAnY2FfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAorICAgICdjYV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xJywKKyAgICAnY2FfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCisgICAgJ2NhX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKKyAgICAnY2FfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAorICAgICdjYV9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuVVRGLTgnLAorICAgICdjYV9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCisgICAgJ2NhX2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTEnLAorICAgICdjYV9pdC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKKyAgICAnY2FfaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAorICAgICdjYV9pdC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCisgICAgJ2NhX2l0LnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5VVEYtOCcsCisgICAgJ2NhX2l0QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKICAgICAnY2F0YWxhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCiAgICAgJ2NleHRlbmQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kLmVuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKQEAgLTgyOSw2ICs4NzYsNyBAQAogICAgICdjel9jeic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3plY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2RhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAorICAgICdkYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCiAgICAgJ2RhX2RrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYV9kay44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGFfZGsuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMTUnLApAQCAtODM5LDYgKzg4Nyw3IEBACiAgICAgJ2RhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYW5zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCisgICAgJ2RlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfYXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMScsCiAgICAgJ2RlX2F0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAogICAgICdkZV9hdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCkBAIC0xMDIwLDYgKzEwNjksNyBAQAogICAgICdmYV9pcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuVVRGLTgnLAogICAgICdmYV9pci5pc2lyaTMzNDInOiAgICAgICAgICAgICAgICAgICAgICAnZmFfSVIuSVNJUkktMzM0MicsCiAgICAgJ2ZpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKKyAgICAnZmkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAogICAgICdmaV9maSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCiAgICAgJ2ZpX2ZpLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTEnLAogICAgICdmaV9maS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKQEAgLTEwMzUsNiArMTA4NSw3IEBACiAgICAgJ2ZvX2ZvLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTE1JywKICAgICAnZm9fZm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMTUnLAogICAgICdmcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKKyAgICAnZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAogICAgICdmcl9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKICAgICAnZnJfYmUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCiAgICAgJ2ZyX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLApAQCAtMTEyMSw2ICsxMTcyLDcgQEAKICAgICAnaGknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCiAgICAgJ2hpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAogICAgICdoaV9pbi5pc2NpaWRldic6ICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKKyAgICAnaG5lJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2huZV9JTi5VVEYtOCcsCiAgICAgJ2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdocl9ocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnaHJfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCkBAIC0xMTQ3LDYgKzExOTksNyBAQAogICAgICdpc29fODg1OV8xJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnaXNvXzg4NTlfMTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdpdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKKyAgICAnaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAogICAgICdpdF9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xJywKICAgICAnaXRfY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMScsCiAgICAgJ2l0X2NoLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTE1JywKQEAgLTExNzgsNiArMTIzMSw3IEBACiAgICAgJ2phX2pwLmppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKICAgICAnamFfanAuamlzNyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAogICAgICdqYV9qcC5tc2NvZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCisgICAgJ2phX2pwLnBjayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnamFfanAuc2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqYV9qcC51amlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYXBhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLApAQCAtMTE5Nyw2ICsxMjUxLDcgQEAKICAgICAna2xfZ2wuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMTUnLAogICAgICdrbF9nbEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xNScsCiAgICAgJ2ttX2toJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbV9LSC5VVEYtOCcsCisgICAgJ2tuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tuX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvX2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCkBAIC0xMjA0LDYgKzEyNTksOCBAQAogICAgICdrb19rci5ldWNrcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4uZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAorICAgICdrcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAorICAgICdrc19pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAna3NfSU5AZGV2YW5hZ2FyaS5VVEYtOCcsCiAgICAgJ2t3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAogICAgICdrd19nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKICAgICAna3dfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCkBAIC0xMjI2LDYgKzEyODMsNyBAQAogICAgICdsdl9sdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCiAgICAgJ2x2X2x2Lmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKICAgICAnbHZfbHYuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktNCcsCisgICAgJ21haSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWlfSU4uVVRGLTgnLAogICAgICdtaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKICAgICAnbWlfbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21pX256Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLApAQCAtMTIzNCw2ICsxMjkyLDggQEAKICAgICAnbWtfbWsuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLkNQMTI1MScsCiAgICAgJ21rX21rLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAogICAgICdta19tay5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKKyAgICAnbWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKKyAgICAnbXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21yX0lOLlVURi04JywKICAgICAnbXJfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21yX0lOLlVURi04JywKICAgICAnbXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCiAgICAgJ21zX215JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLApAQCAtMTI0OCw2ICsxMzA4LDcgQEAKICAgICAnbmJfbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAogICAgICduYl9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xNScsCiAgICAgJ25sJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAorICAgICdubC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCiAgICAgJ25sX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAogICAgICdubF9iZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKICAgICAnbmxfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCkBAIC0xMjc0LDYgKzEzMzUsOCBAQAogICAgICdub19uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9fbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTE1JywKKyAgICAnbm9fbm8uaXNvODg1OTFAYm9rbWFsJzogICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCisgICAgJ25vX25vLmlzbzg4NTkxQG55bm9yc2snOiAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub19ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xNScsCiAgICAgJ25vcndlZ2lhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAogICAgICdub3J3ZWdpYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKQEAgLTEyOTUsNiArMTM1OCw4IEBACiAgICAgJ29jX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTEnLAogICAgICdvY19mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xNScsCiAgICAgJ29jX2ZyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTE1JywKKyAgICAnb3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29yX0lOLlVURi04JywKKyAgICAncGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhX0lOLlVURi04JywKICAgICAncGFfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhX0lOLlVURi04JywKICAgICAncGQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMScsCiAgICAgJ3BkX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTEnLApAQCAtMTMyMiw2ICsxMzg3LDcgQEAKICAgICAncHBfYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCiAgICAgJ3BwX2FuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAogICAgICdwdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKKyAgICAncHQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMTUnLAogICAgICdwdF9icic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKICAgICAncHRfYnIuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCiAgICAgJ3B0X2JyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLApAQCAtMTMzOCw4ICsxNDA0LDkgQEAKICAgICAncm9fcm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3JvX3JvLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb21hbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKLSAgICAncnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLklTTzg4NTktNScsCi0gICAgJ3J1X3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAorICAgICdydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuVVRGLTgnLAorICAgICdydS5rb2k4cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuS09JOC1SJywKKyAgICAncnVfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKICAgICAncnVfcnUuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLkNQMTI1MScsCiAgICAgJ3J1X3J1Lmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAogICAgICdydV9ydS5rb2k4cic6ICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuS09JOC1SJywKQEAgLTEzNTMsMTMgKzE0MjAsMTUgQEAKICAgICAncncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCiAgICAgJ3J3X3J3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAogICAgICdyd19ydy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKKyAgICAnc2QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOQGRldmFuYWdhcmkuVVRGLTgnLAogICAgICdzZV9ubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2VfTk8uVVRGLTgnLAotICAgICdzZXJib2Nyb2F0aWFuJzogICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKLSAgICAnc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCisgICAgJ3NlcmJvY3JvYXRpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NoX2JhLmlzbzg4NTkyQGJvc25pYSc6ICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzaF9ocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hfSFIuSVNPODg1OS0yJywKICAgICAnc2hfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ3NoX3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAotICAgICdzaF95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKKyAgICAnc2hfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKICAgICAnc2lfbGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKICAgICAnc2luaGFsYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKQEAgLTEzODIsMjMgKzE0NTEsMzAgQEAKICAgICAnc3EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCiAgICAgJ3NxX2FsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAogICAgICdzcV9hbC5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKLSAgICAnc3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCi0gICAgJ3NyQGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAotICAgICdzckBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKKyAgICAnc3InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKKyAgICAnc3JAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKKyAgICAnc3JAbGF0aW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKKyAgICAnc3JfY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JfY3MuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCiAgICAgJ3NyX2NzLmlzbzg4NTkyQGxhdG4nOiAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzcl9jcy5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKLSAgICAnc3JfY3MudXRmOEBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLlVURi04JywKLSAgICAnc3JfY3NAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCisgICAgJ3NyX2NzLnV0ZjhAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyX2NzQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyX21lJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9NRS5VVEYtOCcsCisgICAgJ3NyX3JzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOCcsCisgICAgJ3NyX3JzLnV0ZjhAbGF0bic6ICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyX3JzQGxhdGluJzogICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCisgICAgJ3NyX3JzQGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9SUy5VVEYtOEBsYXRpbicsCiAgICAgJ3NyX3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAotICAgICdzcl95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKKyAgICAnc3JfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc3JfeXUuY3AxMjUxQGN5cmlsbGljJzogICAgICAgICAgICAgICAgJ3NyX0NTLkNQMTI1MScsCiAgICAgJ3NyX3l1Lmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzcl95dS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3JfeXUuaXNvODg1OTVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NyX3l1Lm1pY3Jvc29mdGNwMTI1MUBjeXJpbGxpYyc6ICAgICAgICdzcl9DUy5DUDEyNTEnLAotICAgICdzcl95dS51dGY4QGN5cmlsbGljJzogICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLTgnLAotICAgICdzcl95dUBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKKyAgICAnc3JfeXUudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKKyAgICAnc3JfeXVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCiAgICAgJ3NzX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAogICAgICdzc196YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKQEAgLTE0MDYsNiArMTQ4Miw3IEBACiAgICAgJ3N0X3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAogICAgICdzdF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKICAgICAnc3YnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCisgICAgJ3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKICAgICAnc3ZfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMScsCiAgICAgJ3N2X2ZpLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTEnLAogICAgICdzdl9maS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xNScsCkBAIC0xNDIzLDYgKzE1MDAsNyBAQAogICAgICd0YV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCiAgICAgJ3RhX2luLnRzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKICAgICAndGFfaW4udHNjaWkwJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAorICAgICd0ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVfSU4uVVRGLTgnLAogICAgICd0Zyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKICAgICAndGdfdGonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCiAgICAgJ3RnX3RqLmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLApAQCAtMTQ5OCw2ICsxNTc2LDcgQEAKICAgICAnemhfY24uZ2JrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0NOLmdiaycsCiAgICAgJ3poX2hrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAogICAgICd6aF9oay5iaWc1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNScsCisgICAgJ3poX2hrLmJpZzVoayc6ICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAogICAgICd6aF9oay5iaWc1aGtzY3MnOiAgICAgICAgICAgICAgICAgICAgICAnemhfSEsuYmlnNWhrc2NzJywKICAgICAnemhfdHcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF90dy5iaWc1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuYmlnNScsCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weSBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CmluZGV4IDY4NWVmZWIuLmU0YjM0YTEgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDA5IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDEwIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMjMsNyArMjMsOCBAQAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IHN5cywgb3MsIHRpbWUsIGlvLCB0cmFjZWJhY2ssIHdhcm5pbmdzCitpbXBvcnQgc3lzLCBvcywgdGltZSwgaW8sIHRyYWNlYmFjaywgd2FybmluZ3MsIHdlYWtyZWYKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiBfX2FsbF9fID0gWydCQVNJQ19GT1JNQVQnLCAnQnVmZmVyaW5nRm9ybWF0dGVyJywgJ0NSSVRJQ0FMJywgJ0RFQlVHJywgJ0VSUk9SJywKICAgICAgICAgICAgJ0ZBVEFMJywgJ0ZpbGVIYW5kbGVyJywgJ0ZpbHRlcicsICdGb3JtYXR0ZXInLCAnSGFuZGxlcicsICdJTkZPJywKQEAgLTMxLDcgKzMyLDggQEAKICAgICAgICAgICAgJ1N0cmVhbUhhbmRsZXInLCAnV0FSTicsICdXQVJOSU5HJywgJ2FkZExldmVsTmFtZScsICdiYXNpY0NvbmZpZycsCiAgICAgICAgICAgICdjYXB0dXJlV2FybmluZ3MnLCAnY3JpdGljYWwnLCAnZGVidWcnLCAnZGlzYWJsZScsICdlcnJvcicsCiAgICAgICAgICAgICdleGNlcHRpb24nLCAnZmF0YWwnLCAnZ2V0TGV2ZWxOYW1lJywgJ2dldExvZ2dlcicsICdnZXRMb2dnZXJDbGFzcycsCi0gICAgICAgICAgICdpbmZvJywgJ2xvZycsICdtYWtlTG9nUmVjb3JkJywgJ3NldExvZ2dlckNsYXNzJywgJ3dhcm4nLCAnd2FybmluZyddCisgICAgICAgICAgICdpbmZvJywgJ2xvZycsICdtYWtlTG9nUmVjb3JkJywgJ3NldExvZ2dlckNsYXNzJywgJ3dhcm4nLCAnd2FybmluZycsCisgICAgICAgICAgICdnZXRMb2dSZWNvcmRGYWN0b3J5JywgJ3NldExvZ1JlY29yZEZhY3RvcnknLCAnbGFzdFJlc29ydCddCiAKIHRyeToKICAgICBpbXBvcnQgY29kZWNzCkBAIC00NiwxNSArNDgsMTMgQEAKIAogX19hdXRob3JfXyAgPSAiVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4iCiBfX3N0YXR1c19fICA9ICJwcm9kdWN0aW9uIgotX192ZXJzaW9uX18gPSAiMC41LjAuNyIKLV9fZGF0ZV9fICAgID0gIjIwIEphbnVhcnkgMjAwOSIKK19fdmVyc2lvbl9fID0gIjAuNS4xLjIiCitfX2RhdGVfXyAgICA9ICIwNyBGZWJydWFyeSAyMDEwIgogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjICAgTWlzY2VsbGFuZW91cyBtb2R1bGUgZGF0YQogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1fdW5pY29kZSA9ICd1bmljb2RlJyBpbiBkaXIoX19idWlsdGluc19fKQotCiAjCiAjIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKICMgY2FsbGVyIHN0YWNrIGZyYW1lLgpAQCAtMTc2LDE5ICsxNzYsMzQgQEAKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCitkZWYgX2NoZWNrTGV2ZWwobGV2ZWwpOgorICAgIGlmIGlzaW5zdGFuY2UobGV2ZWwsIGludCk6CisgICAgICAgIHJ2ID0gbGV2ZWwKKyAgICBlbGlmIHN0cihsZXZlbCkgPT0gbGV2ZWw6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbGV2ZWxOYW1lczoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gbGV2ZWw6ICVyIiAlIGxldmVsKQorICAgICAgICBydiA9IF9sZXZlbE5hbWVzW2xldmVsXQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiTGV2ZWwgbm90IGFuIGludGVnZXIgb3IgYSB2YWxpZCBzdHJpbmc6ICVyIiAlIGxldmVsKQorICAgIHJldHVybiBydgorCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjICAgVGhyZWFkLXJlbGF0ZWQgc3R1ZmYKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogIwogI19sb2NrIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFjY2VzcyB0byBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzIGluIHRoaXMgbW9kdWxlLgotI1RoaXMgbmVlZHMgdG8gYmUgYW4gUkxvY2sgYmVjYXVzZSBmaWxlQ29uZmlnKCkgY3JlYXRlcyBIYW5kbGVycyBhbmQgc28KLSNtaWdodCBhcmJpdHJhcnkgdXNlciB0aHJlYWRzLiBTaW5jZSBIYW5kbGVyLl9faW5pdF9fKCkgdXBkYXRlcyB0aGUgc2hhcmVkCi0jZGljdGlvbmFyeSBfaGFuZGxlcnMsIGl0IG5lZWRzIHRvIGFjcXVpcmUgdGhlIGxvY2suIEJ1dCBpZiBjb25maWd1cmluZywKKyNUaGlzIG5lZWRzIHRvIGJlIGFuIFJMb2NrIGJlY2F1c2UgZmlsZUNvbmZpZygpIGNyZWF0ZXMgYW5kIGNvbmZpZ3VyZXMKKyNIYW5kbGVycywgYW5kIHNvIG1pZ2h0IGFyYml0cmFyeSB1c2VyIHRocmVhZHMuIFNpbmNlIEhhbmRsZXIgY29kZSB1cGRhdGVzIHRoZQorI3NoYXJlZCBkaWN0aW9uYXJ5IF9oYW5kbGVycywgaXQgbmVlZHMgdG8gYWNxdWlyZSB0aGUgbG9jay4gQnV0IGlmIGNvbmZpZ3VyaW5nLAogI3RoZSBsb2NrIHdvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGFjcXVpcmVkIC0gc28gd2UgbmVlZCBhbiBSTG9jay4KICNUaGUgc2FtZSBhcmd1bWVudCBhcHBsaWVzIHRvIExvZ2dlcnMgYW5kIE1hbmFnZXIubG9nZ2VyRGljdC4KICMKLV9sb2NrID0gTm9uZQoraWYgdGhyZWFkOgorICAgIF9sb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKK2Vsc2U6CisgICAgX2xvY2sgPSBOb25lCisKIAogZGVmIF9hY3F1aXJlTG9jaygpOgogICAgICIiIgpAQCAtMTk2LDkgKzIxMSw2IEBACiAKICAgICBUaGlzIHNob3VsZCBiZSByZWxlYXNlZCB3aXRoIF9yZWxlYXNlTG9jaygpLgogICAgICIiIgotICAgIGdsb2JhbCBfbG9jawotICAgIGlmIChub3QgX2xvY2spIGFuZCB0aHJlYWQ6Ci0gICAgICAgIF9sb2NrID0gdGhyZWFkaW5nLlJMb2NrKCkKICAgICBpZiBfbG9jazoKICAgICAgICAgX2xvY2suYWNxdWlyZSgpCiAKQEAgLTIxMyw3ICsyMjUsNyBAQAogIyAgIFRoZSBsb2dnaW5nIHJlY29yZAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBMb2dSZWNvcmQ6CitjbGFzcyBMb2dSZWNvcmQob2JqZWN0KToKICAgICAiIiIKICAgICBBIExvZ1JlY29yZCBpbnN0YW5jZSByZXByZXNlbnRzIGFuIGV2ZW50IGJlaW5nIGxvZ2dlZC4KIApAQCAtMjI2LDcgKzIzOCw3IEBACiAgICAgaW5mb3JtYXRpb24gdG8gYmUgbG9nZ2VkLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsZXZlbCwgcGF0aG5hbWUsIGxpbmVubywKLSAgICAgICAgICAgICAgICAgbXNnLCBhcmdzLCBleGNfaW5mbywgZnVuYz1Ob25lKToKKyAgICAgICAgICAgICAgICAgbXNnLCBhcmdzLCBleGNfaW5mbywgZnVuYz1Ob25lLCBzaW5mbz1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIGEgbG9nZ2luZyByZWNvcmQgd2l0aCBpbnRlcmVzdGluZyBpbmZvcm1hdGlvbi4KICAgICAgICAgIiIiCkBAIC0yNjAsNiArMjcyLDcgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gIlVua25vd24gbW9kdWxlIgogICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KICAgICAgICAgc2VsZi5leGNfdGV4dCA9IE5vbmUgICAgICAjIHVzZWQgdG8gY2FjaGUgdGhlIHRyYWNlYmFjayB0ZXh0CisgICAgICAgIHNlbGYuc3RhY2tfaW5mbyA9IHNpbmZvCiAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCiAgICAgICAgIHNlbGYuZnVuY05hbWUgPSBmdW5jCiAgICAgICAgIHNlbGYuY3JlYXRlZCA9IGN0CkBAIC0yNzQsMTEgKzI4NywxNyBAQAogICAgICAgICBpZiBub3QgbG9nTXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9IE5vbmUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzCi0gICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9IGN1cnJlbnRfcHJvY2VzcygpLm5hbWUKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NOYW1lID0gTm9uZQorICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9ICdNYWluUHJvY2VzcycKKyAgICAgICAgICAgIG1wID0gc3lzLm1vZHVsZXMuZ2V0KCdtdWx0aXByb2Nlc3NpbmcnKQorICAgICAgICAgICAgaWYgbXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBFcnJvcnMgbWF5IG9jY3VyIGlmIG11bHRpcHJvY2Vzc2luZyBoYXMgbm90IGZpbmlzaGVkIGxvYWRpbmcKKyAgICAgICAgICAgICAgICAjIHlldCAtIGUuZy4gaWYgYSBjdXN0b20gaW1wb3J0IGhvb2sgY2F1c2VzIHRoaXJkLXBhcnR5IGNvZGUKKyAgICAgICAgICAgICAgICAjIHRvIHJ1biB3aGVuIG11bHRpcHJvY2Vzc2luZyBjYWxscyBpbXBvcnQuIFNlZSBpc3N1ZSA4MjAwCisgICAgICAgICAgICAgICAgIyBmb3IgYW4gZXhhbXBsZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzTmFtZSA9IG1wLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKKyAgICAgICAgICAgICAgICBleGNlcHQgU3RhbmRhcmRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBsb2dQcm9jZXNzZXMgYW5kIGhhc2F0dHIob3MsICdnZXRwaWQnKToKICAgICAgICAgICAgIHNlbGYucHJvY2VzcyA9IG9zLmdldHBpZCgpCiAgICAgICAgIGVsc2U6CkBAIC0yOTUsMTkgKzMxNCwzMyBAQAogICAgICAgICBSZXR1cm4gdGhlIG1lc3NhZ2UgZm9yIHRoaXMgTG9nUmVjb3JkIGFmdGVyIG1lcmdpbmcgYW55IHVzZXItc3VwcGxpZWQKICAgICAgICAgYXJndW1lbnRzIHdpdGggdGhlIG1lc3NhZ2UuCiAgICAgICAgICIiIgotICAgICAgICBpZiBub3QgX3VuaWNvZGU6ICNpZiBubyB1bmljb2RlIHN1cHBvcnQuLi4KLSAgICAgICAgICAgIG1zZyA9IHN0cihzZWxmLm1zZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9IHNlbGYubXNnCi0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtc2csIHN0cik6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtc2cgPSBzdHIoc2VsZi5tc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5tc2cgICAgICAjRGVmZXIgZW5jb2RpbmcgdGlsbCBsYXRlcgorICAgICAgICBtc2cgPSBzdHIoc2VsZi5tc2cpCiAgICAgICAgIGlmIHNlbGYuYXJnczoKICAgICAgICAgICAgIG1zZyA9IG1zZyAlIHNlbGYuYXJncwogICAgICAgICByZXR1cm4gbXNnCiAKKyMKKyMgICBEZXRlcm1pbmUgd2hpY2ggY2xhc3MgdG8gdXNlIHdoZW4gaW5zdGFudGlhdGluZyBsb2cgcmVjb3Jkcy4KKyMKK19sb2dSZWNvcmRGYWN0b3J5ID0gTG9nUmVjb3JkCisKK2RlZiBzZXRMb2dSZWNvcmRGYWN0b3J5KGZhY3RvcnkpOgorICAgICIiIgorICAgIFNldCB0aGUgZmFjdG9yeSB0byBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGxvZyByZWNvcmQuCisKKyAgICA6cGFyYW0gZmFjdG9yeTogQSBjYWxsYWJsZSB3aGljaCB3aWxsIGJlIGNhbGxlZCB0byBpbnN0YW50aWF0ZQorICAgIGEgbG9nIHJlY29yZC4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2xvZ1JlY29yZEZhY3RvcnkKKyAgICBfbG9nUmVjb3JkRmFjdG9yeSA9IGZhY3RvcnkKKworZGVmIGdldExvZ1JlY29yZEZhY3RvcnkoKToKKyAgICAiIiIKKyAgICBSZXR1cm4gdGhlIGZhY3RvcnkgdG8gYmUgdXNlZCB3aGVuIGluc3RhbnRpYXRpbmcgYSBsb2cgcmVjb3JkLgorICAgICIiIgorCisgICAgcmV0dXJuIF9sb2dSZWNvcmRGYWN0b3J5CisKIGRlZiBtYWtlTG9nUmVjb3JkKGRpY3QpOgogICAgICIiIgogICAgIE1ha2UgYSBMb2dSZWNvcmQgd2hvc2UgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCBieSB0aGUgc3BlY2lmaWVkIGRpY3Rpb25hcnksCkBAIC0zMTUsNyArMzQ4LDcgQEAKICAgICBhIHNvY2tldCBjb25uZWN0aW9uICh3aGljaCBpcyBzZW50IGFzIGEgZGljdGlvbmFyeSkgaW50byBhIExvZ1JlY29yZAogICAgIGluc3RhbmNlLgogICAgICIiIgotICAgIHJ2ID0gTG9nUmVjb3JkKE5vbmUsIE5vbmUsICIiLCAwLCAiIiwgKCksIE5vbmUsIE5vbmUpCisgICAgcnYgPSBfbG9nUmVjb3JkRmFjdG9yeShOb25lLCBOb25lLCAiIiwgMCwgIiIsICgpLCBOb25lLCBOb25lKQogICAgIHJ2Ll9fZGljdF9fLnVwZGF0ZShkaWN0KQogICAgIHJldHVybiBydgogCkBAIC0zMjMsNyArMzU2LDUzIEBACiAjICAgRm9ybWF0dGVyIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1jbGFzcyBGb3JtYXR0ZXI6CitjbGFzcyBQZXJjZW50U3R5bGUob2JqZWN0KToKKworICAgIGRlZmF1bHRfZm9ybWF0ID0gJyUobWVzc2FnZSlzJworICAgIGFzY3RpbWVfZm9ybWF0ID0gJyUoYXNjdGltZSlzJworICAgIGFzY3RpbWVfc2VhcmNoID0gJyUoYXNjdGltZSknCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZm10KToKKyAgICAgICAgc2VsZi5fZm10ID0gZm10IG9yIHNlbGYuZGVmYXVsdF9mb3JtYXQKKworICAgIGRlZiB1c2VzVGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZtdC5maW5kKHNlbGYuYXNjdGltZV9zZWFyY2gpID49IDAKKworICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZtdCAlIHJlY29yZC5fX2RpY3RfXworCitjbGFzcyBTdHJGb3JtYXRTdHlsZShQZXJjZW50U3R5bGUpOgorICAgIGRlZmF1bHRfZm9ybWF0ID0gJ3ttZXNzYWdlfScKKyAgICBhc2N0aW1lX2Zvcm1hdCA9ICd7YXNjdGltZX0nCisgICAgYXNjdGltZV9zZWFyY2ggPSAne2FzY3RpbWUnCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9mbXQuZm9ybWF0KCoqcmVjb3JkLl9fZGljdF9fKQorCisKK2NsYXNzIFN0cmluZ1RlbXBsYXRlU3R5bGUoUGVyY2VudFN0eWxlKToKKyAgICBkZWZhdWx0X2Zvcm1hdCA9ICcke21lc3NhZ2V9JworICAgIGFzY3RpbWVfZm9ybWF0ID0gJyR7YXNjdGltZX0nCisgICAgYXNjdGltZV9zZWFyY2ggPSAnJHthc2N0aW1lfScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbXQpOgorICAgICAgICBzZWxmLl9mbXQgPSBmbXQgb3Igc2VsZi5kZWZhdWx0X2Zvcm1hdAorICAgICAgICBzZWxmLl90cGwgPSBUZW1wbGF0ZShzZWxmLl9mbXQpCisKKyAgICBkZWYgdXNlc1RpbWUoc2VsZik6CisgICAgICAgIGZtdCA9IHNlbGYuX2ZtdAorICAgICAgICByZXR1cm4gZm10LmZpbmQoJyRhc2N0aW1lJykgPj0gMCBvciBmbXQuZmluZChzZWxmLmFzY3RpbWVfZm9ybWF0KSA+PSAwCisKKyAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiBzZWxmLl90cGwuc3Vic3RpdHV0ZSgqKnJlY29yZC5fX2RpY3RfXykKKworX1NUWUxFUyA9IHsKKyAgICAnJSc6IFBlcmNlbnRTdHlsZSwKKyAgICAneyc6IFN0ckZvcm1hdFN0eWxlLAorICAgICckJzogU3RyaW5nVGVtcGxhdGVTdHlsZQorfQorCitjbGFzcyBGb3JtYXR0ZXIob2JqZWN0KToKICAgICAiIiIKICAgICBGb3JtYXR0ZXIgaW5zdGFuY2VzIGFyZSB1c2VkIHRvIGNvbnZlcnQgYSBMb2dSZWNvcmQgdG8gdGV4dC4KIApAQCAtMzMxLDcgKzQxMCw3IEBACiAgICAgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgYSBMb2dSZWNvcmQgdG8gKHVzdWFsbHkpIGEgc3RyaW5nIHdoaWNoIGNhbgogICAgIGJlIGludGVycHJldGVkIGJ5IGVpdGhlciBhIGh1bWFuIG9yIGFuIGV4dGVybmFsIHN5c3RlbS4gVGhlIGJhc2UgRm9ybWF0dGVyCiAgICAgYWxsb3dzIGEgZm9ybWF0dGluZyBzdHJpbmcgdG8gYmUgc3BlY2lmaWVkLiBJZiBub25lIGlzIHN1cHBsaWVkLCB0aGUKLSAgICBkZWZhdWx0IHZhbHVlIG9mICIlcyhtZXNzYWdlKVxcbiIgaXMgdXNlZC4KKyAgICBkZWZhdWx0IHZhbHVlIG9mICIlcyhtZXNzYWdlKSIgaXMgdXNlZC4KIAogICAgIFRoZSBGb3JtYXR0ZXIgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggYSBmb3JtYXQgc3RyaW5nIHdoaWNoIG1ha2VzIHVzZSBvZgogICAgIGtub3dsZWRnZSBvZiB0aGUgTG9nUmVjb3JkIGF0dHJpYnV0ZXMgLSBlLmcuIHRoZSBkZWZhdWx0IHZhbHVlIG1lbnRpb25lZApAQCAtMzY3LDE4ICs0NDYsMjYgQEAKIAogICAgIGNvbnZlcnRlciA9IHRpbWUubG9jYWx0aW1lCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZm10PU5vbmUsIGRhdGVmbXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZtdD1Ob25lLCBkYXRlZm10PU5vbmUsIHN0eWxlPSclJyk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBmb3JtYXR0ZXIgd2l0aCBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZ3MuCiAKICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgZm9ybWF0dGVyIGVpdGhlciB3aXRoIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZywgb3IgYQogICAgICAgICBkZWZhdWx0IGFzIGRlc2NyaWJlZCBhYm92ZS4gQWxsb3cgZm9yIHNwZWNpYWxpemVkIGRhdGUgZm9ybWF0dGluZyB3aXRoCiAgICAgICAgIHRoZSBvcHRpb25hbCBkYXRlZm10IGFyZ3VtZW50IChpZiBvbWl0dGVkLCB5b3UgZ2V0IHRoZSBJU084NjAxIGZvcm1hdCkuCisKKyAgICAgICAgVXNlIGEgc3R5bGUgcGFyYW1ldGVyIG9mICclJywgJ3snIG9yICckJyB0byBzcGVjaWZ5IHRoYXQgeW91IHdhbnQgdG8KKyAgICAgICAgdXNlIG9uZSBvZiAlLWZvcm1hdHRpbmcsIDptZXRoOmBzdHIuZm9ybWF0YCAoYGB7fWBgKSBmb3JtYXR0aW5nIG9yCisgICAgICAgIDpjbGFzczpgc3RyaW5nLlRlbXBsYXRlYCBmb3JtYXR0aW5nIGluIHlvdXIgZm9ybWF0IHN0cmluZy4KKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDogMy4yCisgICAgICAgICAgIEFkZGVkIHRoZSBgYHN0eWxlYGAgcGFyYW1ldGVyLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgZm10OgotICAgICAgICAgICAgc2VsZi5fZm10ID0gZm10Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9mbXQgPSAiJShtZXNzYWdlKXMiCisgICAgICAgIGlmIHN0eWxlIG5vdCBpbiBfU1RZTEVTOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU3R5bGUgbXVzdCBiZSBvbmUgb2Y6ICVzJyAlICcsJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU1RZTEVTLmtleXMoKSkpCisgICAgICAgIHNlbGYuX3N0eWxlID0gX1NUWUxFU1tzdHlsZV0oZm10KQorICAgICAgICBzZWxmLl9mbXQgPSBzZWxmLl9zdHlsZS5fZm10CiAgICAgICAgIHNlbGYuZGF0ZWZtdCA9IGRhdGVmbXQKIAogICAgIGRlZiBmb3JtYXRUaW1lKHNlbGYsIHJlY29yZCwgZGF0ZWZtdD1Ob25lKToKQEAgLTQwNCw3ICs0OTEsNyBAQAogICAgICAgICAgICAgcyA9IHRpbWUuc3RyZnRpbWUoZGF0ZWZtdCwgY3QpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0ID0gdGltZS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiLCBjdCkKLSAgICAgICAgICAgIHMgPSAiJXMsJTAzZCIgJSAodCwgcmVjb3JkLm1zZWNzKQorICAgICAgICAgICAgcyA9ICIlcywlMDNkIiAlICh0LCByZWNvcmQubXNlY3MpICMgdGhlIHVzZSBvZiAlIGhlcmUgaXMgaW50ZXJuYWwKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBmb3JtYXRFeGNlcHRpb24oc2VsZiwgZWkpOgpAQCAtNDE1LDEzICs1MDIsMzkgQEAKICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbigpCiAgICAgICAgICIiIgogICAgICAgICBzaW8gPSBpby5TdHJpbmdJTygpCi0gICAgICAgIHRyYWNlYmFjay5wcmludF9leGNlcHRpb24oZWlbMF0sIGVpWzFdLCBlaVsyXSwgTm9uZSwgc2lvKQorICAgICAgICB0YiA9IGVpWzJdCisgICAgICAgICMgU2VlIGlzc3VlcyAjOTQyNywgIzE1NTMzNzUuIENvbW1lbnRlZCBvdXQgZm9yIG5vdy4KKyAgICAgICAgI2lmIGdldGF0dHIoc2VsZiwgJ2Z1bGxzdGFjaycsIEZhbHNlKToKKyAgICAgICAgIyAgICB0cmFjZWJhY2sucHJpbnRfc3RhY2sodGIudGJfZnJhbWUuZl9iYWNrLCBmaWxlPXNpbykKKyAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIHRiLCBOb25lLCBzaW8pCiAgICAgICAgIHMgPSBzaW8uZ2V0dmFsdWUoKQogICAgICAgICBzaW8uY2xvc2UoKQogICAgICAgICBpZiBzWy0xOl0gPT0gIlxuIjoKICAgICAgICAgICAgIHMgPSBzWzotMV0KICAgICAgICAgcmV0dXJuIHMKIAorICAgIGRlZiB1c2VzVGltZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIENoZWNrIGlmIHRoZSBmb3JtYXQgdXNlcyB0aGUgY3JlYXRpb24gdGltZSBvZiB0aGUgcmVjb3JkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3N0eWxlLnVzZXNUaW1lKCkKKworICAgIGRlZiBmb3JtYXRNZXNzYWdlKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9zdHlsZS5mb3JtYXQocmVjb3JkKQorCisgICAgZGVmIGZvcm1hdFN0YWNrKHNlbGYsIHN0YWNrX2luZm8pOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IGZvciBzcGVjaWFsaXplZAorICAgICAgICBmb3JtYXR0aW5nIG9mIHN0YWNrIGluZm9ybWF0aW9uLgorCisgICAgICAgIFRoZSBpbnB1dCBkYXRhIGlzIGEgc3RyaW5nIGFzIHJldHVybmVkIGZyb20gYSBjYWxsIHRvCisgICAgICAgIDpmdW5jOmB0cmFjZWJhY2sucHJpbnRfc3RhY2tgLCBidXQgd2l0aCB0aGUgbGFzdCB0cmFpbGluZyBuZXdsaW5lCisgICAgICAgIHJlbW92ZWQuCisKKyAgICAgICAgVGhlIGJhc2UgaW1wbGVtZW50YXRpb24ganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBwYXNzZWQgaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc3RhY2tfaW5mbworCiAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKICAgICAgICAgRm9ybWF0IHRoZSBzcGVjaWZpZWQgcmVjb3JkIGFzIHRleHQuCkBAIC00MzAsMTUgKzU0MywxNSBAQAogICAgICAgICBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24gd2hpY2ggeWllbGRzIHRoZSByZXR1cm5lZCBzdHJpbmcuCiAgICAgICAgIEJlZm9yZSBmb3JtYXR0aW5nIHRoZSBkaWN0aW9uYXJ5LCBhIGNvdXBsZSBvZiBwcmVwYXJhdG9yeSBzdGVwcwogICAgICAgICBhcmUgY2FycmllZCBvdXQuIFRoZSBtZXNzYWdlIGF0dHJpYnV0ZSBvZiB0aGUgcmVjb3JkIGlzIGNvbXB1dGVkCi0gICAgICAgIHVzaW5nIExvZ1JlY29yZC5nZXRNZXNzYWdlKCkuIElmIHRoZSBmb3JtYXR0aW5nIHN0cmluZyBjb250YWlucwotICAgICAgICAiJShhc2N0aW1lKSIsIGZvcm1hdFRpbWUoKSBpcyBjYWxsZWQgdG8gZm9ybWF0IHRoZSBldmVudCB0aW1lLgotICAgICAgICBJZiB0aGVyZSBpcyBleGNlcHRpb24gaW5mb3JtYXRpb24sIGl0IGlzIGZvcm1hdHRlZCB1c2luZwotICAgICAgICBmb3JtYXRFeGNlcHRpb24oKSBhbmQgYXBwZW5kZWQgdG8gdGhlIG1lc3NhZ2UuCisgICAgICAgIHVzaW5nIExvZ1JlY29yZC5nZXRNZXNzYWdlKCkuIElmIHRoZSBmb3JtYXR0aW5nIHN0cmluZyB1c2VzIHRoZQorICAgICAgICB0aW1lIChhcyBkZXRlcm1pbmVkIGJ5IGEgY2FsbCB0byB1c2VzVGltZSgpLCBmb3JtYXRUaW1lKCkgaXMKKyAgICAgICAgY2FsbGVkIHRvIGZvcm1hdCB0aGUgZXZlbnQgdGltZS4gSWYgdGhlcmUgaXMgZXhjZXB0aW9uIGluZm9ybWF0aW9uLAorICAgICAgICBpdCBpcyBmb3JtYXR0ZWQgdXNpbmcgZm9ybWF0RXhjZXB0aW9uKCkgYW5kIGFwcGVuZGVkIHRvIHRoZSBtZXNzYWdlLgogICAgICAgICAiIiIKICAgICAgICAgcmVjb3JkLm1lc3NhZ2UgPSByZWNvcmQuZ2V0TWVzc2FnZSgpCi0gICAgICAgIGlmIHNlbGYuX2ZtdC5maW5kKCIlKGFzY3RpbWUpIikgPj0gMDoKKyAgICAgICAgaWYgc2VsZi51c2VzVGltZSgpOgogICAgICAgICAgICAgcmVjb3JkLmFzY3RpbWUgPSBzZWxmLmZvcm1hdFRpbWUocmVjb3JkLCBzZWxmLmRhdGVmbXQpCi0gICAgICAgIHMgPSBzZWxmLl9mbXQgJSByZWNvcmQuX19kaWN0X18KKyAgICAgICAgcyA9IHNlbGYuZm9ybWF0TWVzc2FnZShyZWNvcmQpCiAgICAgICAgIGlmIHJlY29yZC5leGNfaW5mbzoKICAgICAgICAgICAgICMgQ2FjaGUgdGhlIHRyYWNlYmFjayB0ZXh0IHRvIGF2b2lkIGNvbnZlcnRpbmcgaXQgbXVsdGlwbGUgdGltZXMKICAgICAgICAgICAgICMgKGl0J3MgY29uc3RhbnQgYW55d2F5KQpAQCAtNDQ4LDYgKzU2MSwxMCBAQAogICAgICAgICAgICAgaWYgc1stMTpdICE9ICJcbiI6CiAgICAgICAgICAgICAgICAgcyA9IHMgKyAiXG4iCiAgICAgICAgICAgICBzID0gcyArIHJlY29yZC5leGNfdGV4dAorICAgICAgICBpZiByZWNvcmQuc3RhY2tfaW5mbzoKKyAgICAgICAgICAgIGlmIHNbLTE6XSAhPSAiXG4iOgorICAgICAgICAgICAgICAgIHMgPSBzICsgIlxuIgorICAgICAgICAgICAgcyA9IHMgKyBzZWxmLmZvcm1hdFN0YWNrKHJlY29yZC5zdGFja19pbmZvKQogICAgICAgICByZXR1cm4gcwogCiAjCkBAIC00NTUsNyArNTcyLDcgQEAKICMKIF9kZWZhdWx0Rm9ybWF0dGVyID0gRm9ybWF0dGVyKCkKIAotY2xhc3MgQnVmZmVyaW5nRm9ybWF0dGVyOgorY2xhc3MgQnVmZmVyaW5nRm9ybWF0dGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgQSBmb3JtYXR0ZXIgc3VpdGFibGUgZm9yIGZvcm1hdHRpbmcgYSBudW1iZXIgb2YgcmVjb3Jkcy4KICAgICAiIiIKQEAgLTQ5Nyw3ICs2MTQsNyBAQAogIyAgIEZpbHRlciBjbGFzc2VzIGFuZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotY2xhc3MgRmlsdGVyOgorY2xhc3MgRmlsdGVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgRmlsdGVyIGluc3RhbmNlcyBhcmUgdXNlZCB0byBwZXJmb3JtIGFyYml0cmFyeSBmaWx0ZXJpbmcgb2YgTG9nUmVjb3Jkcy4KIApAQCAtNTM0LDcgKzY1MSw3IEBACiAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICByZXR1cm4gKHJlY29yZC5uYW1lW3NlbGYubmxlbl0gPT0gIi4iKQogCi1jbGFzcyBGaWx0ZXJlcjoKK2NsYXNzIEZpbHRlcmVyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgQSBiYXNlIGNsYXNzIGZvciBsb2dnZXJzIGFuZCBoYW5kbGVycyB3aGljaCBhbGxvd3MgdGhlbSB0byBzaGFyZQogICAgIGNvbW1vbiBjb2RlLgpAQCAtNTY2LDEwICs2ODMsMTggQEAKICAgICAgICAgVGhlIGRlZmF1bHQgaXMgdG8gYWxsb3cgdGhlIHJlY29yZCB0byBiZSBsb2dnZWQ7IGFueSBmaWx0ZXIgY2FuIHZldG8KICAgICAgICAgdGhpcyBhbmQgdGhlIHJlY29yZCBpcyB0aGVuIGRyb3BwZWQuIFJldHVybnMgYSB6ZXJvIHZhbHVlIGlmIGEgcmVjb3JkCiAgICAgICAgIGlzIHRvIGJlIGRyb3BwZWQsIGVsc2Ugbm9uLXplcm8uCisKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6IDMuMgorCisgICAgICAgICAgIEFsbG93IGZpbHRlcnMgdG8gYmUganVzdCBjYWxsYWJsZXMuCiAgICAgICAgICIiIgogICAgICAgICBydiA9IDEKICAgICAgICAgZm9yIGYgaW4gc2VsZi5maWx0ZXJzOgotICAgICAgICAgICAgaWYgbm90IGYuZmlsdGVyKHJlY29yZCk6CisgICAgICAgICAgICBpZiBoYXNhdHRyKGYsICdmaWx0ZXInKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmLmZpbHRlcihyZWNvcmQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGYocmVjb3JkKSAjIGFzc3VtZSBjYWxsYWJsZSAtIHdpbGwgcmFpc2UgaWYgbm90CisgICAgICAgICAgICBpZiBub3QgcmVzdWx0OgogICAgICAgICAgICAgICAgIHJ2ID0gMAogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHJldHVybiBydgpAQCAtNTc4LDkgKzcwMywzNCBAQAogIyAgIEhhbmRsZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLV9oYW5kbGVycyA9IHt9ICAjcmVwb3NpdG9yeSBvZiBoYW5kbGVycyAoZm9yIGZsdXNoaW5nIHdoZW4gc2h1dGRvd24gY2FsbGVkKQorX2hhbmRsZXJzID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkgICNtYXAgb2YgaGFuZGxlciBuYW1lcyB0byBoYW5kbGVycwogX2hhbmRsZXJMaXN0ID0gW10gIyBhZGRlZCB0byBhbGxvdyBoYW5kbGVycyB0byBiZSByZW1vdmVkIGluIHJldmVyc2Ugb2Ygb3JkZXIgaW5pdGlhbGl6ZWQKIAorZGVmIF9yZW1vdmVIYW5kbGVyUmVmKHdyKToKKyAgICAiIiIKKyAgICBSZW1vdmUgYSBoYW5kbGVyIHJlZmVyZW5jZSBmcm9tIHRoZSBpbnRlcm5hbCBjbGVhbnVwIGxpc3QuCisgICAgIiIiCisgICAgIyBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZHVyaW5nIG1vZHVsZSB0ZWFyZG93biwgd2hlbiBnbG9iYWxzIGFyZQorICAgICMgc2V0IHRvIE5vbmUuIElmIF9hY3F1aXJlTG9jayBpcyBOb25lLCBhc3N1bWUgdGhpcyBpcyB0aGUgY2FzZSBhbmQgZG8KKyAgICAjIG5vdGhpbmcuCisgICAgaWYgX2FjcXVpcmVMb2NrIGlzIG5vdCBOb25lOgorICAgICAgICBfYWNxdWlyZUxvY2soKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3ciBpbiBfaGFuZGxlckxpc3Q6CisgICAgICAgICAgICAgICAgX2hhbmRsZXJMaXN0LnJlbW92ZSh3cikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCisKK2RlZiBfYWRkSGFuZGxlclJlZihoYW5kbGVyKToKKyAgICAiIiIKKyAgICBBZGQgYSBoYW5kbGVyIHRvIHRoZSBpbnRlcm5hbCBjbGVhbnVwIGxpc3QgdXNpbmcgYSB3ZWFrIHJlZmVyZW5jZS4KKyAgICAiIiIKKyAgICBfYWNxdWlyZUxvY2soKQorICAgIHRyeToKKyAgICAgICAgX2hhbmRsZXJMaXN0LmFwcGVuZCh3ZWFrcmVmLnJlZihoYW5kbGVyLCBfcmVtb3ZlSGFuZGxlclJlZikpCisgICAgZmluYWxseToKKyAgICAgICAgX3JlbGVhc2VMb2NrKCkKKwogY2xhc3MgSGFuZGxlcihGaWx0ZXJlcik6CiAgICAgIiIiCiAgICAgSGFuZGxlciBpbnN0YW5jZXMgZGlzcGF0Y2ggbG9nZ2luZyBldmVudHMgdG8gc3BlY2lmaWMgZGVzdGluYXRpb25zLgpAQCAtNTk2LDE2ICs3NDYsMjggQEAKICAgICAgICAgYW5kIHRoZSBmaWx0ZXIgbGlzdCB0byBlbXB0eS4KICAgICAgICAgIiIiCiAgICAgICAgIEZpbHRlcmVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorICAgICAgICBzZWxmLl9uYW1lID0gTm9uZQorICAgICAgICBzZWxmLmxldmVsID0gX2NoZWNrTGV2ZWwobGV2ZWwpCiAgICAgICAgIHNlbGYuZm9ybWF0dGVyID0gTm9uZQotICAgICAgICAjZ2V0IHRoZSBtb2R1bGUgZGF0YSBsb2NrLCBhcyB3ZSdyZSB1cGRhdGluZyBhIHNoYXJlZCBzdHJ1Y3R1cmUuCisgICAgICAgICMgQWRkIHRoZSBoYW5kbGVyIHRvIHRoZSBnbG9iYWwgX2hhbmRsZXJMaXN0IChmb3IgY2xlYW51cCBvbiBzaHV0ZG93bikKKyAgICAgICAgX2FkZEhhbmRsZXJSZWYoc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVMb2NrKCkKKworICAgIGRlZiBnZXRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBzZXRfbmFtZShzZWxmLCBuYW1lKToKICAgICAgICAgX2FjcXVpcmVMb2NrKCkKLSAgICAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gcmFpc2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgICAgIF9oYW5kbGVyc1tzZWxmXSA9IDEKLSAgICAgICAgICAgIF9oYW5kbGVyTGlzdC5pbnNlcnQoMCwgc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fbmFtZSBpbiBfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgZGVsIF9oYW5kbGVyc1tzZWxmLl9uYW1lXQorICAgICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgICAgIGlmIG5hbWU6CisgICAgICAgICAgICAgICAgX2hhbmRsZXJzW25hbWVdID0gc2VsZgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKLSAgICAgICAgc2VsZi5jcmVhdGVMb2NrKCkKKworICAgIG5hbWUgPSBwcm9wZXJ0eShnZXRfbmFtZSwgc2V0X25hbWUpCiAKICAgICBkZWYgY3JlYXRlTG9jayhzZWxmKToKICAgICAgICAgIiIiCkBAIC02MzQsNyArNzk2LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFNldCB0aGUgbG9nZ2luZyBsZXZlbCBvZiB0aGlzIGhhbmRsZXIuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmxldmVsID0gbGV2ZWwKKyAgICAgICAgc2VsZi5sZXZlbCA9IF9jaGVja0xldmVsKGxldmVsKQogCiAgICAgZGVmIGZvcm1hdChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKQEAgLTY5NiwxNiArODU4LDE2IEBACiAgICAgICAgICIiIgogICAgICAgICBUaWR5IHVwIGFueSByZXNvdXJjZXMgdXNlZCBieSB0aGUgaGFuZGxlci4KIAotICAgICAgICBUaGlzIHZlcnNpb24gZG9lcyByZW1vdmVzIHRoZSBoYW5kbGVyIGZyb20gYW4gaW50ZXJuYWwgbGlzdAotICAgICAgICBvZiBoYW5kbGVycyB3aGljaCBpcyBjbG9zZWQgd2hlbiBzaHV0ZG93bigpIGlzIGNhbGxlZC4gU3ViY2xhc3NlcworICAgICAgICBUaGlzIHZlcnNpb24gcmVtb3ZlcyB0aGUgaGFuZGxlciBmcm9tIGFuIGludGVybmFsIG1hcCBvZiBoYW5kbGVycywKKyAgICAgICAgX2hhbmRsZXJzLCB3aGljaCBpcyB1c2VkIGZvciBoYW5kbGVyIGxvb2t1cCBieSBuYW1lLiBTdWJjbGFzc2VzCiAgICAgICAgIHNob3VsZCBlbnN1cmUgdGhhdCB0aGlzIGdldHMgY2FsbGVkIGZyb20gb3ZlcnJpZGRlbiBjbG9zZSgpCiAgICAgICAgIG1ldGhvZHMuCiAgICAgICAgICIiIgogICAgICAgICAjZ2V0IHRoZSBtb2R1bGUgZGF0YSBsb2NrLCBhcyB3ZSdyZSB1cGRhdGluZyBhIHNoYXJlZCBzdHJ1Y3R1cmUuCiAgICAgICAgIF9hY3F1aXJlTG9jaygpCiAgICAgICAgIHRyeTogICAgI3VubGlrZWx5IHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiwgYnV0IHlvdSBuZXZlciBrbm93Li4uCi0gICAgICAgICAgICBkZWwgX2hhbmRsZXJzW3NlbGZdCi0gICAgICAgICAgICBfaGFuZGxlckxpc3QucmVtb3ZlKHNlbGYpCisgICAgICAgICAgICBpZiBzZWxmLl9uYW1lIGFuZCBzZWxmLl9uYW1lIGluIF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBkZWwgX2hhbmRsZXJzW3NlbGYuX25hbWVdCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogCkBAIC03MjQsNyArODg2LDEwIEBACiAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9uczoKICAgICAgICAgICAgIGVpID0gc3lzLmV4Y19pbmZvKCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKGVpWzBdLCBlaVsxXSwgZWlbMl0sIE5vbmUsIHN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MgICAgIyBzZWUgaXNzdWUgNTk3MQogICAgICAgICAgICAgZmluYWxseToKQEAgLTczNyw2ICs5MDIsOCBAQAogICAgIHN5cy5zdGRvdXQgb3Igc3lzLnN0ZGVyciBtYXkgYmUgdXNlZC4KICAgICAiIiIKIAorICAgIHRlcm1pbmF0b3IgPSAnXG4nCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgaGFuZGxlci4KQEAgLTc2OSwyOCArOTM2LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQogICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdHJlYW0KLSAgICAgICAgICAgIGZzID0gIiVzXG4iCi0gICAgICAgICAgICBpZiBub3QgX3VuaWNvZGU6ICNpZiBubyB1bmljb2RlIHN1cHBvcnQuLi4KLSAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoZnMgJSBtc2cpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzaW5zdGFuY2UobXNnLCB1bmljb2RlKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc3RyZWFtLCAnZW5jb2RpbmcnLCBOb25lKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcyA9IGZzLmRlY29kZShzdHJlYW0uZW5jb2RpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKGZzICUgbXNnKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjUHJpbnRpbmcgdG8gdGVybWluYWxzIHNvbWV0aW1lcyBmYWlscy4gRm9yIGV4YW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgI3dpdGggYW4gZW5jb2Rpbmcgb2YgJ2NwMTI1MScsIHRoZSBhYm92ZSB3cml0ZSB3aWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgI3dvcmsgaWYgd3JpdHRlbiB0byBhIHN0cmVhbSBvcGVuZWQgb3Igd3JhcHBlZCBieQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0aGUgY29kZWNzIG1vZHVsZSwgYnV0IGZhaWwgd2hlbiB3cml0aW5nIHRvIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVybWluYWwgZXZlbiB3aGVuIHRoZSBjb2RlcGFnZSBpcyBzZXQgdG8gY3AxMjUxLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBbiBleHRyYSBlbmNvZGluZyBzdGVwIHNlZW1zIHRvIGJlIG5lZWRlZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoKGZzICUgbXNnKS5lbmNvZGUoc3RyZWFtLmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZShmcyAlIG1zZykKLSAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoZnMgJSBtc2cuZW5jb2RlKCJVVEYtOCIpKQorICAgICAgICAgICAgc3RyZWFtLndyaXRlKG1zZykKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShzZWxmLnRlcm1pbmF0b3IpCiAgICAgICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6CiAgICAgICAgICAgICByYWlzZQpAQCAtODUzLDExICsxMDAwLDMxIEBACiAgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IHNlbGYuX29wZW4oKQogICAgICAgICBTdHJlYW1IYW5kbGVyLmVtaXQoc2VsZiwgcmVjb3JkKQogCitjbGFzcyBfU3RkZXJySGFuZGxlcihTdHJlYW1IYW5kbGVyKToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGlzIGxpa2UgYSBTdHJlYW1IYW5kbGVyIHVzaW5nIHN5cy5zdGRlcnIsIGJ1dCBhbHdheXMgdXNlcworICAgIHdoYXRldmVyIHN5cy5zdGRlcnIgaXMgY3VycmVudGx5IHNldCB0byByYXRoZXIgdGhhbiB0aGUgdmFsdWUgb2YKKyAgICBzeXMuc3RkZXJyIGF0IGhhbmRsZXIgY29uc3RydWN0aW9uIHRpbWUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxldmVsPU5PVFNFVCk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXplIHRoZSBoYW5kbGVyLgorICAgICAgICAiIiIKKyAgICAgICAgSGFuZGxlci5fX2luaXRfXyhzZWxmLCBsZXZlbCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdHJlYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMuc3RkZXJyCisKKworX2RlZmF1bHRMYXN0UmVzb3J0ID0gX1N0ZGVyckhhbmRsZXIoV0FSTklORykKK2xhc3RSZXNvcnQgPSBfZGVmYXVsdExhc3RSZXNvcnQKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAgIE1hbmFnZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWNsYXNzIFBsYWNlSG9sZGVyOgorY2xhc3MgUGxhY2VIb2xkZXIob2JqZWN0KToKICAgICAiIiIKICAgICBQbGFjZUhvbGRlciBpbnN0YW5jZXMgYXJlIHVzZWQgaW4gdGhlIE1hbmFnZXIgbG9nZ2VyIGhpZXJhcmNoeSB0byB0YWtlCiAgICAgdGhlIHBsYWNlIG9mIG5vZGVzIGZvciB3aGljaCBubyBsb2dnZXJzIGhhdmUgYmVlbiBkZWZpbmVkLiBUaGlzIGNsYXNzIGlzCkBAIC04NjcsMTYgKzEwMzQsMTMgQEAKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgd2l0aCB0aGUgc3BlY2lmaWVkIGxvZ2dlciBiZWluZyBhIGNoaWxkIG9mIHRoaXMgcGxhY2Vob2xkZXIuCiAgICAgICAgICIiIgotICAgICAgICAjc2VsZi5sb2dnZXJzID0gW2Fsb2dnZXJdCiAgICAgICAgIHNlbGYubG9nZ2VyTWFwID0geyBhbG9nZ2VyIDogTm9uZSB9CiAKICAgICBkZWYgYXBwZW5kKHNlbGYsIGFsb2dnZXIpOgogICAgICAgICAiIiIKICAgICAgICAgQWRkIHRoZSBzcGVjaWZpZWQgbG9nZ2VyIGFzIGEgY2hpbGQgb2YgdGhpcyBwbGFjZWhvbGRlci4KICAgICAgICAgIiIiCi0gICAgICAgICNpZiBhbG9nZ2VyIG5vdCBpbiBzZWxmLmxvZ2dlcnM6CiAgICAgICAgIGlmIGFsb2dnZXIgbm90IGluIHNlbGYubG9nZ2VyTWFwOgotICAgICAgICAgICAgI3NlbGYubG9nZ2Vycy5hcHBlbmQoYWxvZ2dlcikKICAgICAgICAgICAgIHNlbGYubG9nZ2VyTWFwW2Fsb2dnZXJdID0gTm9uZQogCiAjCkBAIC05MDQsNyArMTA2OCw3IEBACiAKICAgICByZXR1cm4gX2xvZ2dlckNsYXNzCiAKLWNsYXNzIE1hbmFnZXI6CitjbGFzcyBNYW5hZ2VyKG9iamVjdCk6CiAgICAgIiIiCiAgICAgVGhlcmUgaXMgW3VuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzXSBqdXN0IG9uZSBNYW5hZ2VyIGluc3RhbmNlLCB3aGljaAogICAgIGhvbGRzIHRoZSBoaWVyYXJjaHkgb2YgbG9nZ2Vycy4KQEAgLTkxNSw4ICsxMDc5LDEwIEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnJvb3QgPSByb290bm9kZQogICAgICAgICBzZWxmLmRpc2FibGUgPSAwCi0gICAgICAgIHNlbGYuZW1pdHRlZE5vSGFuZGxlcldhcm5pbmcgPSAwCisgICAgICAgIHNlbGYuZW1pdHRlZE5vSGFuZGxlcldhcm5pbmcgPSBGYWxzZQogICAgICAgICBzZWxmLmxvZ2dlckRpY3QgPSB7fQorICAgICAgICBzZWxmLmxvZ2dlckNsYXNzID0gTm9uZQorICAgICAgICBzZWxmLmxvZ1JlY29yZEZhY3RvcnkgPSBOb25lCiAKICAgICBkZWYgZ2V0TG9nZ2VyKHNlbGYsIG5hbWUpOgogICAgICAgICAiIiIKQEAgLTkzNiwxMyArMTEwMiwxMyBAQAogICAgICAgICAgICAgICAgIHJ2ID0gc2VsZi5sb2dnZXJEaWN0W25hbWVdCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShydiwgUGxhY2VIb2xkZXIpOgogICAgICAgICAgICAgICAgICAgICBwaCA9IHJ2Ci0gICAgICAgICAgICAgICAgICAgIHJ2ID0gX2xvZ2dlckNsYXNzKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHJ2ID0gKHNlbGYubG9nZ2VyQ2xhc3Mgb3IgX2xvZ2dlckNsYXNzKShuYW1lKQogICAgICAgICAgICAgICAgICAgICBydi5tYW5hZ2VyID0gc2VsZgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2dlckRpY3RbbmFtZV0gPSBydgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maXh1cENoaWxkcmVuKHBoLCBydikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZml4dXBQYXJlbnRzKHJ2KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBydiA9IF9sb2dnZXJDbGFzcyhuYW1lKQorICAgICAgICAgICAgICAgIHJ2ID0gKHNlbGYubG9nZ2VyQ2xhc3Mgb3IgX2xvZ2dlckNsYXNzKShuYW1lKQogICAgICAgICAgICAgICAgIHJ2Lm1hbmFnZXIgPSBzZWxmCiAgICAgICAgICAgICAgICAgc2VsZi5sb2dnZXJEaWN0W25hbWVdID0gcnYKICAgICAgICAgICAgICAgICBzZWxmLl9maXh1cFBhcmVudHMocnYpCkBAIC05NTAsNiArMTExNiwyMyBAQAogICAgICAgICAgICAgX3JlbGVhc2VMb2NrKCkKICAgICAgICAgcmV0dXJuIHJ2CiAKKyAgICBkZWYgc2V0TG9nZ2VyQ2xhc3Moc2VsZiwga2xhc3MpOgorICAgICAgICAiIiIKKyAgICAgICAgU2V0IHRoZSBjbGFzcyB0byBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGxvZ2dlciB3aXRoIHRoaXMgTWFuYWdlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGtsYXNzICE9IExvZ2dlcjoKKyAgICAgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGtsYXNzLCBMb2dnZXIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibG9nZ2VyIG5vdCBkZXJpdmVkIGZyb20gbG9nZ2luZy5Mb2dnZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBrbGFzcy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5sb2dnZXJDbGFzcyA9IGtsYXNzCisKKyAgICBkZWYgc2V0TG9nUmVjb3JkRmFjdG9yeShzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCB0aGUgZmFjdG9yeSB0byBiZSB1c2VkIHdoZW4gaW5zdGFudGlhdGluZyBhIGxvZyByZWNvcmQgd2l0aCB0aGlzCisgICAgICAgIE1hbmFnZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvZ1JlY29yZEZhY3RvcnkgPSBmYWN0b3J5CisKICAgICBkZWYgX2ZpeHVwUGFyZW50cyhzZWxmLCBhbG9nZ2VyKToKICAgICAgICAgIiIiCiAgICAgICAgIEVuc3VyZSB0aGF0IHRoZXJlIGFyZSBlaXRoZXIgbG9nZ2VycyBvciBwbGFjZWhvbGRlcnMgYWxsIHRoZSB3YXkKQEAgLTEwMTIsNyArMTE5NSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBGaWx0ZXJlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYubGV2ZWwgPSBsZXZlbAorICAgICAgICBzZWxmLmxldmVsID0gX2NoZWNrTGV2ZWwobGV2ZWwpCiAgICAgICAgIHNlbGYucGFyZW50ID0gTm9uZQogICAgICAgICBzZWxmLnByb3BhZ2F0ZSA9IDEKICAgICAgICAgc2VsZi5oYW5kbGVycyA9IFtdCkBAIC0xMDIyLDcgKzEyMDUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgU2V0IHRoZSBsb2dnaW5nIGxldmVsIG9mIHRoaXMgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCisgICAgICAgIHNlbGYubGV2ZWwgPSBfY2hlY2tMZXZlbChsZXZlbCkKIAogICAgIGRlZiBkZWJ1ZyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgpAQCAtMTA3NCwxMSArMTI1NywxMiBAQAogICAgICAgICBpZiBzZWxmLmlzRW5hYmxlZEZvcihFUlJPUik6CiAgICAgICAgICAgICBzZWxmLl9sb2coRVJST1IsIG1zZywgYXJncywgKiprd2FyZ3MpCiAKLSAgICBkZWYgZXhjZXB0aW9uKHNlbGYsIG1zZywgKmFyZ3MpOgorICAgIGRlZiBleGNlcHRpb24oc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgQ29udmVuaWVuY2UgbWV0aG9kIGZvciBsb2dnaW5nIGFuIEVSUk9SIHdpdGggZXhjZXB0aW9uIGluZm9ybWF0aW9uLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5lcnJvcihtc2csIGV4Y19pbmZvPTEsICphcmdzKQorICAgICAgICBrd2FyZ3NbJ2V4Y19pbmZvJ10gPSBUcnVlCisgICAgICAgIHNlbGYuZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgY3JpdGljYWwoc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKQEAgLTExMTEsNyArMTI5NSw3IEBACiAgICAgICAgIGlmIHNlbGYuaXNFbmFibGVkRm9yKGxldmVsKToKICAgICAgICAgICAgIHNlbGYuX2xvZyhsZXZlbCwgbXNnLCBhcmdzLCAqKmt3YXJncykKIAotICAgIGRlZiBmaW5kQ2FsbGVyKHNlbGYpOgorICAgIGRlZiBmaW5kQ2FsbGVyKHNlbGYsIHN0YWNrX2luZm89RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgRmluZCB0aGUgc3RhY2sgZnJhbWUgb2YgdGhlIGNhbGxlciBzbyB0aGF0IHdlIGNhbiBub3RlIHRoZSBzb3VyY2UKICAgICAgICAgZmlsZSBuYW1lLCBsaW5lIG51bWJlciBhbmQgZnVuY3Rpb24gbmFtZS4KQEAgLTExMjEsMjMgKzEzMDUsMzQgQEAKICAgICAgICAgI0lyb25QeXRob24gaXNuJ3QgcnVuIHdpdGggLVg6RnJhbWVzLgogICAgICAgICBpZiBmIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZiA9IGYuZl9iYWNrCi0gICAgICAgIHJ2ID0gIih1bmtub3duIGZpbGUpIiwgMCwgIih1bmtub3duIGZ1bmN0aW9uKSIKKyAgICAgICAgcnYgPSAiKHVua25vd24gZmlsZSkiLCAwLCAiKHVua25vd24gZnVuY3Rpb24pIiwgTm9uZQogICAgICAgICB3aGlsZSBoYXNhdHRyKGYsICJmX2NvZGUiKToKICAgICAgICAgICAgIGNvID0gZi5mX2NvZGUKICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5ub3JtY2FzZShjby5jb19maWxlbmFtZSkKICAgICAgICAgICAgIGlmIGZpbGVuYW1lID09IF9zcmNmaWxlOgogICAgICAgICAgICAgICAgIGYgPSBmLmZfYmFjawogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBydiA9IChmaWxlbmFtZSwgZi5mX2xpbmVubywgY28uY29fbmFtZSkKKyAgICAgICAgICAgIHNpbmZvID0gTm9uZQorICAgICAgICAgICAgaWYgc3RhY2tfaW5mbzoKKyAgICAgICAgICAgICAgICBzaW8gPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgc2lvLndyaXRlKCdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicpCisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKGYsIGZpbGU9c2lvKQorICAgICAgICAgICAgICAgIHNpbmZvID0gc2lvLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBpZiBzaW5mb1stMV0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgc2luZm8gPSBzaW5mb1s6LTFdCisgICAgICAgICAgICAgICAgc2lvLmNsb3NlKCkKKyAgICAgICAgICAgIHJ2ID0gKGNvLmNvX2ZpbGVuYW1lLCBmLmZfbGluZW5vLCBjby5jb19uYW1lLCBzaW5mbykKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHJldHVybiBydgogCi0gICAgZGVmIG1ha2VSZWNvcmQoc2VsZiwgbmFtZSwgbGV2ZWwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmM9Tm9uZSwgZXh0cmE9Tm9uZSk6CisgICAgZGVmIG1ha2VSZWNvcmQoc2VsZiwgbmFtZSwgbGV2ZWwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8sCisgICAgICAgICAgICAgICAgICAgZnVuYz1Ob25lLCBleHRyYT1Ob25lLCBzaW5mbz1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3NlcyB0byBjcmVhdGUKICAgICAgICAgc3BlY2lhbGl6ZWQgTG9nUmVjb3Jkcy4KICAgICAgICAgIiIiCi0gICAgICAgIHJ2ID0gTG9nUmVjb3JkKG5hbWUsIGxldmVsLCBmbiwgbG5vLCBtc2csIGFyZ3MsIGV4Y19pbmZvLCBmdW5jKQorICAgICAgICBydiA9IF9sb2dSZWNvcmRGYWN0b3J5KG5hbWUsIGxldmVsLCBmbiwgbG5vLCBtc2csIGFyZ3MsIGV4Y19pbmZvLCBmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5mbykKICAgICAgICAgaWYgZXh0cmEgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmb3Iga2V5IGluIGV4dHJhOgogICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gWyJtZXNzYWdlIiwgImFzY3RpbWUiXSkgb3IgKGtleSBpbiBydi5fX2RpY3RfXyk6CkBAIC0xMTQ1LDE3ICsxMzQwLDE4IEBACiAgICAgICAgICAgICAgICAgcnYuX19kaWN0X19ba2V5XSA9IGV4dHJhW2tleV0KICAgICAgICAgcmV0dXJuIHJ2CiAKLSAgICBkZWYgX2xvZyhzZWxmLCBsZXZlbCwgbXNnLCBhcmdzLCBleGNfaW5mbz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICBkZWYgX2xvZyhzZWxmLCBsZXZlbCwgbXNnLCBhcmdzLCBleGNfaW5mbz1Ob25lLCBleHRyYT1Ob25lLCBzdGFja19pbmZvPUZhbHNlKToKICAgICAgICAgIiIiCiAgICAgICAgIExvdy1sZXZlbCBsb2dnaW5nIHJvdXRpbmUgd2hpY2ggY3JlYXRlcyBhIExvZ1JlY29yZCBhbmQgdGhlbiBjYWxscwogICAgICAgICBhbGwgdGhlIGhhbmRsZXJzIG9mIHRoaXMgbG9nZ2VyIHRvIGhhbmRsZSB0aGUgcmVjb3JkLgogICAgICAgICAiIiIKKyAgICAgICAgc2luZm8gPSBOb25lCiAgICAgICAgIGlmIF9zcmNmaWxlOgogICAgICAgICAgICAgI0lyb25QeXRob24gZG9lc24ndCB0cmFjayBQeXRob24gZnJhbWVzLCBzbyBmaW5kQ2FsbGVyIHRocm93cyBhbgogICAgICAgICAgICAgI2V4Y2VwdGlvbiBvbiBzb21lIHZlcnNpb25zIG9mIElyb25QeXRob24uIFdlIHRyYXAgaXQgaGVyZSBzbyB0aGF0CiAgICAgICAgICAgICAjSXJvblB5dGhvbiBjYW4gdXNlIGxvZ2dpbmcuCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm4sIGxubywgZnVuYyA9IHNlbGYuZmluZENhbGxlcigpCisgICAgICAgICAgICAgICAgZm4sIGxubywgZnVuYywgc2luZm8gPSBzZWxmLmZpbmRDYWxsZXIoc3RhY2tfaW5mbykKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIGZuLCBsbm8sIGZ1bmMgPSAiKHVua25vd24gZmlsZSkiLCAwLCAiKHVua25vd24gZnVuY3Rpb24pIgogICAgICAgICBlbHNlOgpAQCAtMTE2Myw3ICsxMzU5LDggQEAKICAgICAgICAgaWYgZXhjX2luZm86CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShleGNfaW5mbywgdHVwbGUpOgogICAgICAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgcmVjb3JkID0gc2VsZi5tYWtlUmVjb3JkKHNlbGYubmFtZSwgbGV2ZWwsIGZuLCBsbm8sIG1zZywgYXJncywgZXhjX2luZm8sIGZ1bmMsIGV4dHJhKQorICAgICAgICByZWNvcmQgPSBzZWxmLm1ha2VSZWNvcmQoc2VsZi5uYW1lLCBsZXZlbCwgZm4sIGxubywgbXNnLCBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm8sIGZ1bmMsIGV4dHJhLCBzaW5mbykKICAgICAgICAgc2VsZi5oYW5kbGUocmVjb3JkKQogCiAgICAgZGVmIGhhbmRsZShzZWxmLCByZWNvcmQpOgpAQCAtMTE5OCw2ICsxMzk1LDI4IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBfcmVsZWFzZUxvY2soKQogCisgICAgZGVmIGhhc0hhbmRsZXJzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGlmIHRoaXMgbG9nZ2VyIGhhcyBhbnkgaGFuZGxlcnMgY29uZmlndXJlZC4KKworICAgICAgICBMb29wIHRocm91Z2ggYWxsIGhhbmRsZXJzIGZvciB0aGlzIGxvZ2dlciBhbmQgaXRzIHBhcmVudHMgaW4gdGhlCisgICAgICAgIGxvZ2dlciBoaWVyYXJjaHkuIFJldHVybiBUcnVlIGlmIGEgaGFuZGxlciB3YXMgZm91bmQsIGVsc2UgRmFsc2UuCisgICAgICAgIFN0b3Agc2VhcmNoaW5nIHVwIHRoZSBoaWVyYXJjaHkgd2hlbmV2ZXIgYSBsb2dnZXIgd2l0aCB0aGUgInByb3BhZ2F0ZSIKKyAgICAgICAgYXR0cmlidXRlIHNldCB0byB6ZXJvIGlzIGZvdW5kIC0gdGhhdCB3aWxsIGJlIHRoZSBsYXN0IGxvZ2dlciB3aGljaAorICAgICAgICBpcyBjaGVja2VkIGZvciB0aGUgZXhpc3RlbmNlIG9mIGhhbmRsZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgYyA9IHNlbGYKKyAgICAgICAgcnYgPSBGYWxzZQorICAgICAgICB3aGlsZSBjOgorICAgICAgICAgICAgaWYgYy5oYW5kbGVyczoKKyAgICAgICAgICAgICAgICBydiA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgbm90IGMucHJvcGFnYXRlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGMgPSBjLnBhcmVudAorICAgICAgICByZXR1cm4gcnYKKwogICAgIGRlZiBjYWxsSGFuZGxlcnMoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCiAgICAgICAgIFBhc3MgYSByZWNvcmQgdG8gYWxsIHJlbGV2YW50IGhhbmRsZXJzLgpAQCAtMTIxOSwxMCArMTQzOCwxMyBAQAogICAgICAgICAgICAgICAgIGMgPSBOb25lICAgICNicmVhayBvdXQKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYyA9IGMucGFyZW50Ci0gICAgICAgIGlmIChmb3VuZCA9PSAwKSBhbmQgcmFpc2VFeGNlcHRpb25zIGFuZCBub3Qgc2VsZi5tYW5hZ2VyLmVtaXR0ZWROb0hhbmRsZXJXYXJuaW5nOgotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiTm8gaGFuZGxlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcIiVzXCJcbiIgJSBzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLm1hbmFnZXIuZW1pdHRlZE5vSGFuZGxlcldhcm5pbmcgPSAxCisgICAgICAgIGlmIChmb3VuZCA9PSAwKToKKyAgICAgICAgICAgIGlmIGxhc3RSZXNvcnQ6CisgICAgICAgICAgICAgICAgbGFzdFJlc29ydC5oYW5kbGUocmVjb3JkKQorICAgICAgICAgICAgZWxpZiByYWlzZUV4Y2VwdGlvbnMgYW5kIG5vdCBzZWxmLm1hbmFnZXIuZW1pdHRlZE5vSGFuZGxlcldhcm5pbmc6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiTm8gaGFuZGxlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgXCIlc1wiXG4iICUgc2VsZi5uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlci5lbWl0dGVkTm9IYW5kbGVyV2FybmluZyA9IFRydWUKIAogICAgIGRlZiBnZXRFZmZlY3RpdmVMZXZlbChzZWxmKToKICAgICAgICAgIiIiCkBAIC0xMjQ2LDYgKzE0NjgsMjUgQEAKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHJldHVybiBsZXZlbCA+PSBzZWxmLmdldEVmZmVjdGl2ZUxldmVsKCkKIAorICAgIGRlZiBnZXRDaGlsZChzZWxmLCBzdWZmaXgpOgorICAgICAgICAiIiIKKyAgICAgICAgR2V0IGEgbG9nZ2VyIHdoaWNoIGlzIGEgZGVzY2VuZGFudCB0byB0aGlzIG9uZS4KKworICAgICAgICBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kLCBzdWNoIHRoYXQKKworICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignYWJjJykuZ2V0Q2hpbGQoJ2RlZi5naGknKQorCisgICAgICAgIGlzIHRoZSBzYW1lIGFzCisKKyAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykKKworICAgICAgICBJdCdzIHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHdoZW4gdGhlIHBhcmVudCBsb2dnZXIgaXMgbmFtZWQgdXNpbmcKKyAgICAgICAgX19uYW1lX18gcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYucm9vdCBpcyBub3Qgc2VsZjoKKyAgICAgICAgICAgIHN1ZmZpeCA9ICcuJy5qb2luKChzZWxmLm5hbWUsIHN1ZmZpeCkpCisgICAgICAgIHJldHVybiBzZWxmLm1hbmFnZXIuZ2V0TG9nZ2VyKHN1ZmZpeCkKKwogY2xhc3MgUm9vdExvZ2dlcihMb2dnZXIpOgogICAgICIiIgogICAgIEEgcm9vdCBsb2dnZXIgaXMgbm90IHRoYXQgZGlmZmVyZW50IHRvIGFueSBvdGhlciBsb2dnZXIsIGV4Y2VwdCB0aGF0CkBAIC0xMjYwLDcgKzE1MDEsNyBAQAogCiBfbG9nZ2VyQ2xhc3MgPSBMb2dnZXIKIAotY2xhc3MgTG9nZ2VyQWRhcHRlcjoKK2NsYXNzIExvZ2dlckFkYXB0ZXIob2JqZWN0KToKICAgICAiIiIKICAgICBBbiBhZGFwdGVyIGZvciBsb2dnZXJzIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzcGVjaWZ5IGNvbnRleHR1YWwKICAgICBpbmZvcm1hdGlvbiBpbiBsb2dnaW5nIG91dHB1dC4KQEAgLTEyOTMsNjIgKzE1MzQsODIgQEAKICAgICAgICAga3dhcmdzWyJleHRyYSJdID0gc2VsZi5leHRyYQogICAgICAgICByZXR1cm4gbXNnLCBrd2FyZ3MKIAorICAgICMKKyAgICAjIEJvaWxlcnBsYXRlIGNvbnZlbmllbmNlIG1ldGhvZHMKKyAgICAjCiAgICAgZGVmIGRlYnVnKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiCi0gICAgICAgIERlbGVnYXRlIGEgZGVidWcgY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIsIGFmdGVyIGFkZGluZwotICAgICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZyb20gdGhpcyBhZGFwdGVyIGluc3RhbmNlLgorICAgICAgICBEZWxlZ2F0ZSBhIGRlYnVnIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnLCBrd2FyZ3MgPSBzZWxmLnByb2Nlc3MobXNnLCBrd2FyZ3MpCi0gICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxvZyhERUJVRywgbXNnLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgaW5mbyhzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgotICAgICAgICBEZWxlZ2F0ZSBhbiBpbmZvIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLCBhZnRlciBhZGRpbmcKLSAgICAgICAgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgYWRhcHRlciBpbnN0YW5jZS4KKyAgICAgICAgRGVsZWdhdGUgYW4gaW5mbyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KICAgICAgICAgIiIiCi0gICAgICAgIG1zZywga3dhcmdzID0gc2VsZi5wcm9jZXNzKG1zZywga3dhcmdzKQotICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxvZyhJTkZPLCBtc2csICphcmdzLCAqKmt3YXJncykKIAogICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiCi0gICAgICAgIERlbGVnYXRlIGEgd2FybmluZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciwgYWZ0ZXIgYWRkaW5nCi0gICAgICAgIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIGFkYXB0ZXIgaW5zdGFuY2UuCisgICAgICAgIERlbGVnYXRlIGEgd2FybmluZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KICAgICAgICAgIiIiCi0gICAgICAgIG1zZywga3dhcmdzID0gc2VsZi5wcm9jZXNzKG1zZywga3dhcmdzKQotICAgICAgICBzZWxmLmxvZ2dlci53YXJuaW5nKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxvZyhXQVJOSU5HLCBtc2csICphcmdzLCAqKmt3YXJncykKKworICAgIHdhcm4gPSB3YXJuaW5nCiAKICAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiIKLSAgICAgICAgRGVsZWdhdGUgYW4gZXJyb3IgY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIsIGFmdGVyIGFkZGluZwotICAgICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZyb20gdGhpcyBhZGFwdGVyIGluc3RhbmNlLgorICAgICAgICBEZWxlZ2F0ZSBhbiBlcnJvciBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlci4KICAgICAgICAgIiIiCi0gICAgICAgIG1zZywga3dhcmdzID0gc2VsZi5wcm9jZXNzKG1zZywga3dhcmdzKQotICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2csICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5sb2coRVJST1IsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIGV4Y2VwdGlvbihzZWxmLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgotICAgICAgICBEZWxlZ2F0ZSBhbiBleGNlcHRpb24gY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIsIGFmdGVyIGFkZGluZwotICAgICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZyb20gdGhpcyBhZGFwdGVyIGluc3RhbmNlLgorICAgICAgICBEZWxlZ2F0ZSBhbiBleGNlcHRpb24gY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIuCiAgICAgICAgICIiIgotICAgICAgICBtc2csIGt3YXJncyA9IHNlbGYucHJvY2Vzcyhtc2csIGt3YXJncykKICAgICAgICAga3dhcmdzWyJleGNfaW5mbyJdID0gMQotICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihtc2csICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5sb2coRVJST1IsIG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIGNyaXRpY2FsKHNlbGYsIG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiCi0gICAgICAgIERlbGVnYXRlIGEgY3JpdGljYWwgY2FsbCB0byB0aGUgdW5kZXJseWluZyBsb2dnZXIsIGFmdGVyIGFkZGluZwotICAgICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZyb20gdGhpcyBhZGFwdGVyIGluc3RhbmNlLgorICAgICAgICBEZWxlZ2F0ZSBhIGNyaXRpY2FsIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcgbG9nZ2VyLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnLCBrd2FyZ3MgPSBzZWxmLnByb2Nlc3MobXNnLCBrd2FyZ3MpCi0gICAgICAgIHNlbGYubG9nZ2VyLmNyaXRpY2FsKG1zZywgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmxvZyhDUklUSUNBTCwgbXNnLCAqYXJncywgKiprd2FyZ3MpCiAKICAgICBkZWYgbG9nKHNlbGYsIGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBEZWxlZ2F0ZSBhIGxvZyBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciwgYWZ0ZXIgYWRkaW5nCiAgICAgICAgIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gZnJvbSB0aGlzIGFkYXB0ZXIgaW5zdGFuY2UuCiAgICAgICAgICIiIgotICAgICAgICBtc2csIGt3YXJncyA9IHNlbGYucHJvY2Vzcyhtc2csIGt3YXJncykKLSAgICAgICAgc2VsZi5sb2dnZXIubG9nKGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgaWYgc2VsZi5pc0VuYWJsZWRGb3IobGV2ZWwpOgorICAgICAgICAgICAgbXNnLCBrd2FyZ3MgPSBzZWxmLnByb2Nlc3MobXNnLCBrd2FyZ3MpCisgICAgICAgICAgICBzZWxmLmxvZ2dlci5fbG9nKGxldmVsLCBtc2csIGFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGlzRW5hYmxlZEZvcihzZWxmLCBsZXZlbCk6CisgICAgICAgICIiIgorICAgICAgICBJcyB0aGlzIGxvZ2dlciBlbmFibGVkIGZvciBsZXZlbCAnbGV2ZWwnPworICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5sb2dnZXIubWFuYWdlci5kaXNhYmxlID49IGxldmVsOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBsZXZlbCA+PSBzZWxmLmdldEVmZmVjdGl2ZUxldmVsKCkKKworICAgIGRlZiBzZXRMZXZlbChzZWxmLCBsZXZlbCk6CisgICAgICAgICIiIgorICAgICAgICBTZXQgdGhlIHNwZWNpZmllZCBsZXZlbCBvbiB0aGUgdW5kZXJseWluZyBsb2dnZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmxvZ2dlci5zZXRMZXZlbChsZXZlbCkKKworICAgIGRlZiBnZXRFZmZlY3RpdmVMZXZlbChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEdldCB0aGUgZWZmZWN0aXZlIGxldmVsIGZvciB0aGUgdW5kZXJseWluZyBsb2dnZXIuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorCisgICAgZGVmIGhhc0hhbmRsZXJzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2VlIGlmIHRoZSB1bmRlcmx5aW5nIGxvZ2dlciBoYXMgYW55IGhhbmRsZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYubG9nZ2VyLmhhc0hhbmRsZXJzKCkKIAogcm9vdCA9IFJvb3RMb2dnZXIoV0FSTklORykKIExvZ2dlci5yb290ID0gcm9vdApAQCAtMTM4MSw2ICsxNjQyLDEwIEBACiAgICAgICAgICAgICAgIChpZiBmaWxlbW9kZSBpcyB1bnNwZWNpZmllZCwgaXQgZGVmYXVsdHMgdG8gJ2EnKS4KICAgICBmb3JtYXQgICAgVXNlIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZyBmb3IgdGhlIGhhbmRsZXIuCiAgICAgZGF0ZWZtdCAgIFVzZSB0aGUgc3BlY2lmaWVkIGRhdGUvdGltZSBmb3JtYXQuCisgICAgc3R5bGUgICAgIElmIGEgZm9ybWF0IHN0cmluZyBpcyBzcGVjaWZpZWQsIHVzZSB0aGlzIHRvIHNwZWNpZnkgdGhlCisgICAgICAgICAgICAgIHR5cGUgb2YgZm9ybWF0IHN0cmluZyAocG9zc2libGUgdmFsdWVzICclJywgJ3snLCAnJCcsIGZvcgorICAgICAgICAgICAgICAlLWZvcm1hdHRpbmcsIDptZXRoOmBzdHIuZm9ybWF0YCBhbmQgOmNsYXNzOmBzdHJpbmcuVGVtcGxhdGVgCisgICAgICAgICAgICAgIC0gZGVmYXVsdHMgdG8gJyUnKS4KICAgICBsZXZlbCAgICAgU2V0IHRoZSByb290IGxvZ2dlciBsZXZlbCB0byB0aGUgc3BlY2lmaWVkIGxldmVsLgogICAgIHN0cmVhbSAgICBVc2UgdGhlIHNwZWNpZmllZCBzdHJlYW0gdG8gaW5pdGlhbGl6ZSB0aGUgU3RyZWFtSGFuZGxlci4gTm90ZQogICAgICAgICAgICAgICB0aGF0IHRoaXMgYXJndW1lbnQgaXMgaW5jb21wYXRpYmxlIHdpdGggJ2ZpbGVuYW1lJyAtIGlmIGJvdGgKQEAgLTEzOTEsNiArMTY1Niw5IEBACiAgICAgcmVtZW1iZXJlZCB0aGF0IFN0cmVhbUhhbmRsZXIgZG9lcyBub3QgY2xvc2UgaXRzIHN0cmVhbSAoc2luY2UgaXQgbWF5IGJlCiAgICAgdXNpbmcgc3lzLnN0ZG91dCBvciBzeXMuc3RkZXJyKSwgd2hlcmVhcyBGaWxlSGFuZGxlciBjbG9zZXMgaXRzIHN0cmVhbQogICAgIHdoZW4gdGhlIGhhbmRsZXIgaXMgY2xvc2VkLgorCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6IDMuMgorICAgICAgIEFkZGVkIHRoZSBgYHN0eWxlYGAgcGFyYW1ldGVyLgogICAgICIiIgogICAgICMgQWRkIHRocmVhZCBzYWZldHkgaW4gY2FzZSBzb21lb25lIG1pc3Rha2VubHkgY2FsbHMKICAgICAjIGJhc2ljQ29uZmlnKCkgZnJvbSBtdWx0aXBsZSB0aHJlYWRzCkBAIC0xNDA2LDcgKzE2NzQsOCBAQAogICAgICAgICAgICAgICAgIGhkbHIgPSBTdHJlYW1IYW5kbGVyKHN0cmVhbSkKICAgICAgICAgICAgIGZzID0ga3dhcmdzLmdldCgiZm9ybWF0IiwgQkFTSUNfRk9STUFUKQogICAgICAgICAgICAgZGZzID0ga3dhcmdzLmdldCgiZGF0ZWZtdCIsIE5vbmUpCi0gICAgICAgICAgICBmbXQgPSBGb3JtYXR0ZXIoZnMsIGRmcykKKyAgICAgICAgICAgIHN0eWxlID0ga3dhcmdzLmdldCgic3R5bGUiLCAnJScpCisgICAgICAgICAgICBmbXQgPSBGb3JtYXR0ZXIoZnMsIGRmcywgc3R5bGUpCiAgICAgICAgICAgICBoZGxyLnNldEZvcm1hdHRlcihmbXQpCiAgICAgICAgICAgICByb290LmFkZEhhbmRsZXIoaGRscikKICAgICAgICAgICAgIGxldmVsID0ga3dhcmdzLmdldCgibGV2ZWwiKQpAQCAtMTQzMyw3ICsxNzAyLDkgQEAKIAogZGVmIGNyaXRpY2FsKG1zZywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAiIiIKLSAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0NSSVRJQ0FMJyBvbiB0aGUgcm9vdCBsb2dnZXIuCisgICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdDUklUSUNBTCcgb24gdGhlIHJvb3QgbG9nZ2VyLiBJZiB0aGUgbG9nZ2VyCisgICAgaGFzIG5vIGhhbmRsZXJzLCBjYWxsIGJhc2ljQ29uZmlnKCkgdG8gYWRkIGEgY29uc29sZSBoYW5kbGVyIHdpdGggYQorICAgIHByZS1kZWZpbmVkIGZvcm1hdC4KICAgICAiIiIKICAgICBpZiBsZW4ocm9vdC5oYW5kbGVycykgPT0gMDoKICAgICAgICAgYmFzaWNDb25maWcoKQpAQCAtMTQ0MywyMiArMTcxNCwyOCBAQAogCiBkZWYgZXJyb3IobXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgotICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnRVJST1InIG9uIHRoZSByb290IGxvZ2dlci4KKyAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0VSUk9SJyBvbiB0aGUgcm9vdCBsb2dnZXIuIElmIHRoZSBsb2dnZXIgaGFzCisgICAgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkCisgICAgZm9ybWF0LgogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCiAgICAgcm9vdC5lcnJvcihtc2csICphcmdzLCAqKmt3YXJncykKIAotZGVmIGV4Y2VwdGlvbihtc2csICphcmdzKToKK2RlZiBleGNlcHRpb24obXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgotICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnRVJST1InIG9uIHRoZSByb290IGxvZ2dlciwKLSAgICB3aXRoIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbi4KKyAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0VSUk9SJyBvbiB0aGUgcm9vdCBsb2dnZXIsIHdpdGggZXhjZXB0aW9uCisgICAgaW5mb3JtYXRpb24uIElmIHRoZSBsb2dnZXIgaGFzIG5vIGhhbmRsZXJzLCBiYXNpY0NvbmZpZygpIGlzIGNhbGxlZCB0byBhZGQKKyAgICBhIGNvbnNvbGUgaGFuZGxlciB3aXRoIGEgcHJlLWRlZmluZWQgZm9ybWF0LgogICAgICIiIgotICAgIGVycm9yKG1zZywgZXhjX2luZm89MSwgKmFyZ3MpCisgICAga3dhcmdzWydleGNfaW5mbyddID0gVHJ1ZQorICAgIGVycm9yKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiBkZWYgd2FybmluZyhtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgIiIiCi0gICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdXQVJOSU5HJyBvbiB0aGUgcm9vdCBsb2dnZXIuCisgICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdXQVJOSU5HJyBvbiB0aGUgcm9vdCBsb2dnZXIuIElmIHRoZSBsb2dnZXIgaGFzCisgICAgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkCisgICAgZm9ybWF0LgogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCkBAIC0xNDY4LDcgKzE3NDUsOSBAQAogCiBkZWYgaW5mbyhtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgIiIiCi0gICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdJTkZPJyBvbiB0aGUgcm9vdCBsb2dnZXIuCisgICAgTG9nIGEgbWVzc2FnZSB3aXRoIHNldmVyaXR5ICdJTkZPJyBvbiB0aGUgcm9vdCBsb2dnZXIuIElmIHRoZSBsb2dnZXIgaGFzCisgICAgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkCisgICAgZm9ybWF0LgogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCkBAIC0xNDc2LDcgKzE3NTUsOSBAQAogCiBkZWYgZGVidWcobXNnLCAqYXJncywgKiprd2FyZ3MpOgogICAgICIiIgotICAgIExvZyBhIG1lc3NhZ2Ugd2l0aCBzZXZlcml0eSAnREVCVUcnIG9uIHRoZSByb290IGxvZ2dlci4KKyAgICBMb2cgYSBtZXNzYWdlIHdpdGggc2V2ZXJpdHkgJ0RFQlVHJyBvbiB0aGUgcm9vdCBsb2dnZXIuIElmIHRoZSBsb2dnZXIgaGFzCisgICAgbm8gaGFuZGxlcnMsIGNhbGwgYmFzaWNDb25maWcoKSB0byBhZGQgYSBjb25zb2xlIGhhbmRsZXIgd2l0aCBhIHByZS1kZWZpbmVkCisgICAgZm9ybWF0LgogICAgICIiIgogICAgIGlmIGxlbihyb290LmhhbmRsZXJzKSA9PSAwOgogICAgICAgICBiYXNpY0NvbmZpZygpCkBAIC0xNDg0LDcgKzE3NjUsOSBAQAogCiBkZWYgbG9nKGxldmVsLCBtc2csICphcmdzLCAqKmt3YXJncyk6CiAgICAgIiIiCi0gICAgTG9nICdtc2cgJSBhcmdzJyB3aXRoIHRoZSBpbnRlZ2VyIHNldmVyaXR5ICdsZXZlbCcgb24gdGhlIHJvb3QgbG9nZ2VyLgorICAgIExvZyAnbXNnICUgYXJncycgd2l0aCB0aGUgaW50ZWdlciBzZXZlcml0eSAnbGV2ZWwnIG9uIHRoZSByb290IGxvZ2dlci4gSWYKKyAgICB0aGUgbG9nZ2VyIGhhcyBubyBoYW5kbGVycywgY2FsbCBiYXNpY0NvbmZpZygpIHRvIGFkZCBhIGNvbnNvbGUgaGFuZGxlcgorICAgIHdpdGggYSBwcmUtZGVmaW5lZCBmb3JtYXQuCiAgICAgIiIiCiAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6CiAgICAgICAgIGJhc2ljQ29uZmlnKCkKQEAgLTE0OTIsNyArMTc3NSw3IEBACiAKIGRlZiBkaXNhYmxlKGxldmVsKToKICAgICAiIiIKLSAgICBEaXNhYmxlIGFsbCBsb2dnaW5nIGNhbGxzIGxlc3Mgc2V2ZXJlIHRoYW4gJ2xldmVsJy4KKyAgICBEaXNhYmxlIGFsbCBsb2dnaW5nIGNhbGxzIG9mIHNldmVyaXR5ICdsZXZlbCcgYW5kIGJlbG93LgogICAgICIiIgogICAgIHJvb3QubWFuYWdlci5kaXNhYmxlID0gbGV2ZWwKIApAQCAtMTUwMywzMiArMTc4NiwzMiBAQAogCiAgICAgU2hvdWxkIGJlIGNhbGxlZCBhdCBhcHBsaWNhdGlvbiBleGl0LgogICAgICIiIgotICAgIGZvciBoIGluIGhhbmRsZXJMaXN0WzpdOgorICAgIGZvciB3ciBpbiByZXZlcnNlZChoYW5kbGVyTGlzdFs6XSk6CiAgICAgICAgICNlcnJvcnMgbWlnaHQgb2NjdXIsIGZvciBleGFtcGxlLCBpZiBmaWxlcyBhcmUgbG9ja2VkCiAgICAgICAgICN3ZSBqdXN0IGlnbm9yZSB0aGVtIGlmIHJhaXNlRXhjZXB0aW9ucyBpcyBub3Qgc2V0CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGguYWNxdWlyZSgpCi0gICAgICAgICAgICBoLmZsdXNoKCkKLSAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgaCA9IHdyKCkKKyAgICAgICAgICAgIGlmIGg6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBoLmFjcXVpcmUoKQorICAgICAgICAgICAgICAgICAgICBoLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAorICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKKyAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdAorICAgICAgICAgICAgICAgICAgICAjIGFwcGxpY2F0aW9uIGV4aXQuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBoLnJlbGVhc2UoKQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93Ci0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBoLnJlbGVhc2UoKQogCiAjTGV0J3MgdHJ5IGFuZCBzaHV0ZG93biBhdXRvbWF0aWNhbGx5IG9uIGFwcGxpY2F0aW9uIGV4aXQuLi4KLXRyeToKLSAgICBpbXBvcnQgYXRleGl0Ci0gICAgYXRleGl0LnJlZ2lzdGVyKHNodXRkb3duKQotZXhjZXB0IEltcG9ydEVycm9yOiAjIGZvciBQeXRob24gdmVyc2lvbnMgPCAyLjAKLSAgICBkZWYgZXhpdGhvb2soc3RhdHVzLCBvbGRfZXhpdD1zeXMuZXhpdCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNodXRkb3duKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9sZF9leGl0KHN0YXR1cykKLQotICAgIHN5cy5leGl0ID0gZXhpdGhvb2sKK2ltcG9ydCBhdGV4aXQKK2F0ZXhpdC5yZWdpc3RlcihzaHV0ZG93bikKIAogIyBOdWxsIGhhbmRsZXIKIApkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5IGIvTGliL2xvZ2dpbmcvY29uZmlnLnB5CmluZGV4IDI1ZjM0ZWMuLmM3MzU5Y2EgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL2NvbmZpZy5weQorKysgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAyMDAxLTIwMDcgYnkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIENvcHlyaWdodCAyMDAxLTIwMTAgYnkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCkBAIC0yNCw3ICsyNCw4IEBACiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgc3lzLCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzLCBzb2NrZXQsIHN0cnVjdCwgb3MsIHRyYWNlYmFjaworaW1wb3J0IHN5cywgbG9nZ2luZywgbG9nZ2luZy5oYW5kbGVycywgc29ja2V0LCBzdHJ1Y3QsIG9zLCB0cmFjZWJhY2ssIHJlCitpbXBvcnQgdHlwZXMsIGlvCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKQEAgLTU3LDE2ICs1OCwxMiBAQAogICAgIHRoZSBhYmlsaXR5IHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZCBjb25maWd1cmF0aW9ucyAoaWYgdGhlCiAgICAgZGV2ZWxvcGVyIHByb3ZpZGVzIGEgbWVjaGFuaXNtIHRvIHByZXNlbnQgdGhlIGNob2ljZXMgYW5kIGxvYWQgdGhlIGNob3NlbgogICAgIGNvbmZpZ3VyYXRpb24pLgotICAgIEluIHZlcnNpb25zIG9mIENvbmZpZ1BhcnNlciB3aGljaCBoYXZlIHRoZSByZWFkZnAgbWV0aG9kIFt0eXBpY2FsbHkKLSAgICBzaGlwcGVkIGluIDIueCB2ZXJzaW9ucyBvZiBQeXRob25dLCB5b3UgY2FuIHBhc3MgaW4gYSBmaWxlLWxpa2Ugb2JqZWN0Ci0gICAgcmF0aGVyIHRoYW4gYSBmaWxlbmFtZSwgaW4gd2hpY2ggY2FzZSB0aGUgZmlsZS1saWtlIG9iamVjdCB3aWxsIGJlIHJlYWQKLSAgICB1c2luZyByZWFkZnAuCiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCiAgICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoY3AsICdyZWFkZnAnKSBhbmQgaGFzYXR0cihmbmFtZSwgJ3JlYWRsaW5lJyk6Ci0gICAgICAgIGNwLnJlYWRmcChmbmFtZSkKKyAgICBpZiBoYXNhdHRyKGZuYW1lLCAncmVhZGxpbmUnKToKKyAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQogICAgIGVsc2U6CiAgICAgICAgIGNwLnJlYWQoZm5hbWUpCiAKQEAgLTEwMSw5ICs5OCwxMiBAQAogZGVmIF9zdHJpcF9zcGFjZXMoYWxpc3QpOgogICAgIHJldHVybiBtYXAobGFtYmRhIHg6IHguc3RyaXAoKSwgYWxpc3QpCiAKK2RlZiBfZW5jb2RlZChzKToKKyAgICByZXR1cm4gcyBpZiBpc2luc3RhbmNlKHMsIHN0cikgZWxzZSBzLmVuY29kZSgndXRmLTgnKQorCiBkZWYgX2NyZWF0ZV9mb3JtYXR0ZXJzKGNwKToKICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiBmb3JtYXR0ZXJzIiIiCi0gICAgZmxpc3QgPSBjcC5nZXQoImZvcm1hdHRlcnMiLCAia2V5cyIpCisgICAgZmxpc3QgPSBjcFsiZm9ybWF0dGVycyJdWyJrZXlzIl0KICAgICBpZiBub3QgbGVuKGZsaXN0KToKICAgICAgICAgcmV0dXJuIHt9CiAgICAgZmxpc3QgPSBmbGlzdC5zcGxpdCgiLCIpCkBAIC0xMTEsMjAgKzExMSwxMiBAQAogICAgIGZvcm1hdHRlcnMgPSB7fQogICAgIGZvciBmb3JtIGluIGZsaXN0OgogICAgICAgICBzZWN0bmFtZSA9ICJmb3JtYXR0ZXJfJXMiICUgZm9ybQotICAgICAgICBvcHRzID0gY3Aub3B0aW9ucyhzZWN0bmFtZSkKLSAgICAgICAgaWYgImZvcm1hdCIgaW4gb3B0czoKLSAgICAgICAgICAgIGZzID0gY3AuZ2V0KHNlY3RuYW1lLCAiZm9ybWF0IiwgMSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZzID0gTm9uZQotICAgICAgICBpZiAiZGF0ZWZtdCIgaW4gb3B0czoKLSAgICAgICAgICAgIGRmcyA9IGNwLmdldChzZWN0bmFtZSwgImRhdGVmbXQiLCAxKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGZzID0gTm9uZQorICAgICAgICBmcyA9IGNwLmdldChzZWN0bmFtZSwgImZvcm1hdCIsIHJhdz1UcnVlLCBmYWxsYmFjaz1Ob25lKQorICAgICAgICBkZnMgPSBjcC5nZXQoc2VjdG5hbWUsICJkYXRlZm10IiwgcmF3PVRydWUsIGZhbGxiYWNrPU5vbmUpCiAgICAgICAgIGMgPSBsb2dnaW5nLkZvcm1hdHRlcgotICAgICAgICBpZiAiY2xhc3MiIGluIG9wdHM6Ci0gICAgICAgICAgICBjbGFzc19uYW1lID0gY3AuZ2V0KHNlY3RuYW1lLCAiY2xhc3MiKQotICAgICAgICAgICAgaWYgY2xhc3NfbmFtZToKLSAgICAgICAgICAgICAgICBjID0gX3Jlc29sdmUoY2xhc3NfbmFtZSkKKyAgICAgICAgY2xhc3NfbmFtZSA9IGNwW3NlY3RuYW1lXS5nZXQoImNsYXNzIikKKyAgICAgICAgaWYgY2xhc3NfbmFtZToKKyAgICAgICAgICAgIGMgPSBfcmVzb2x2ZShjbGFzc19uYW1lKQogICAgICAgICBmID0gYyhmcywgZGZzKQogICAgICAgICBmb3JtYXR0ZXJzW2Zvcm1dID0gZgogICAgIHJldHVybiBmb3JtYXR0ZXJzCkBAIC0xMzIsNyArMTI0LDcgQEAKIAogZGVmIF9pbnN0YWxsX2hhbmRsZXJzKGNwLCBmb3JtYXR0ZXJzKToKICAgICAiIiJJbnN0YWxsIGFuZCByZXR1cm4gaGFuZGxlcnMiIiIKLSAgICBobGlzdCA9IGNwLmdldCgiaGFuZGxlcnMiLCAia2V5cyIpCisgICAgaGxpc3QgPSBjcFsiaGFuZGxlcnMiXVsia2V5cyJdCiAgICAgaWYgbm90IGxlbihobGlzdCk6CiAgICAgICAgIHJldHVybiB7fQogICAgIGhsaXN0ID0gaGxpc3Quc3BsaXQoIiwiKQpAQCAtMTQwLDMwICsxMzIsMjMgQEAKICAgICBoYW5kbGVycyA9IHt9CiAgICAgZml4dXBzID0gW10gI2ZvciBpbnRlci1oYW5kbGVyIHJlZmVyZW5jZXMKICAgICBmb3IgaGFuZCBpbiBobGlzdDoKLSAgICAgICAgc2VjdG5hbWUgPSAiaGFuZGxlcl8lcyIgJSBoYW5kCi0gICAgICAgIGtsYXNzID0gY3AuZ2V0KHNlY3RuYW1lLCAiY2xhc3MiKQotICAgICAgICBvcHRzID0gY3Aub3B0aW9ucyhzZWN0bmFtZSkKLSAgICAgICAgaWYgImZvcm1hdHRlciIgaW4gb3B0czoKLSAgICAgICAgICAgIGZtdCA9IGNwLmdldChzZWN0bmFtZSwgImZvcm1hdHRlciIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmbXQgPSAiIgorICAgICAgICBzZWN0aW9uID0gY3BbImhhbmRsZXJfJXMiICUgaGFuZF0KKyAgICAgICAga2xhc3MgPSBzZWN0aW9uWyJjbGFzcyJdCisgICAgICAgIGZtdCA9IHNlY3Rpb24uZ2V0KCJmb3JtYXR0ZXIiLCAiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAga2xhc3MgPSBldmFsKGtsYXNzLCB2YXJzKGxvZ2dpbmcpKQogICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBOYW1lRXJyb3IpOgogICAgICAgICAgICAga2xhc3MgPSBfcmVzb2x2ZShrbGFzcykKLSAgICAgICAgYXJncyA9IGNwLmdldChzZWN0bmFtZSwgImFyZ3MiKQorICAgICAgICBhcmdzID0gc2VjdGlvblsiYXJncyJdCiAgICAgICAgIGFyZ3MgPSBldmFsKGFyZ3MsIHZhcnMobG9nZ2luZykpCiAgICAgICAgIGggPSBrbGFzcygqYXJncykKLSAgICAgICAgaWYgImxldmVsIiBpbiBvcHRzOgotICAgICAgICAgICAgbGV2ZWwgPSBjcC5nZXQoc2VjdG5hbWUsICJsZXZlbCIpCisgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKKyAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQogICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKICAgICAgICAgaWYgbGVuKGZtdCk6CiAgICAgICAgICAgICBoLnNldEZvcm1hdHRlcihmb3JtYXR0ZXJzW2ZtdF0pCiAgICAgICAgIGlmIGlzc3ViY2xhc3Moa2xhc3MsIGxvZ2dpbmcuaGFuZGxlcnMuTWVtb3J5SGFuZGxlcik6Ci0gICAgICAgICAgICBpZiAidGFyZ2V0IiBpbiBvcHRzOgotICAgICAgICAgICAgICAgIHRhcmdldCA9IGNwLmdldChzZWN0bmFtZSwidGFyZ2V0IikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGFyZ2V0ID0gIiIKKyAgICAgICAgICAgIHRhcmdldCA9IHNlY3Rpb24uZ2V0KCJ0YXJnZXQiLCAiIikKICAgICAgICAgICAgIGlmIGxlbih0YXJnZXQpOiAjdGhlIHRhcmdldCBoYW5kbGVyIG1heSBub3QgYmUgbG9hZGVkIHlldCwgc28ga2VlcCBmb3IgbGF0ZXIuLi4KICAgICAgICAgICAgICAgICBmaXh1cHMuYXBwZW5kKChoLCB0YXJnZXQpKQogICAgICAgICBoYW5kbGVyc1toYW5kXSA9IGgKQEAgLTE3MiwyNSArMTU3LDQ0IEBACiAgICAgICAgIGguc2V0VGFyZ2V0KGhhbmRsZXJzW3RdKQogICAgIHJldHVybiBoYW5kbGVycwogCitkZWYgX2hhbmRsZV9leGlzdGluZ19sb2dnZXJzKGV4aXN0aW5nLCBjaGlsZF9sb2dnZXJzLCBkaXNhYmxlX2V4aXN0aW5nKToKKyAgICAiIiIKKyAgICBXaGVuIChyZSljb25maWd1cmluZyBsb2dnaW5nLCBoYW5kbGUgbG9nZ2VycyB3aGljaCB3ZXJlIGluIHRoZSBwcmV2aW91cworICAgIGNvbmZpZ3VyYXRpb24gYnV0IGFyZSBub3QgaW4gdGhlIG5ldyBjb25maWd1cmF0aW9uLiBUaGVyZSdzIG5vIHBvaW50CisgICAgZGVsZXRpbmcgdGhlbSBhcyBvdGhlciB0aHJlYWRzIG1heSBjb250aW51ZSB0byBob2xkIHJlZmVyZW5jZXMgdG8gdGhlbTsKKyAgICBhbmQgYnkgZGlzYWJsaW5nIHRoZW0sIHlvdSBzdG9wIHRoZW0gZG9pbmcgYW55IGxvZ2dpbmcuCiAKLWRlZiBfaW5zdGFsbF9sb2dnZXJzKGNwLCBoYW5kbGVycywgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzKToKKyAgICBIb3dldmVyLCBkb24ndCBkaXNhYmxlIGNoaWxkcmVuIG9mIG5hbWVkIGxvZ2dlcnMsIGFzIHRoYXQncyBwcm9iYWJseSBub3QKKyAgICB3aGF0IHdhcyBpbnRlbmRlZCBieSB0aGUgdXNlci4gQWxzbywgYWxsb3cgZXhpc3RpbmcgbG9nZ2VycyB0byBOT1QgYmUKKyAgICBkaXNhYmxlZCBpZiBkaXNhYmxlX2V4aXN0aW5nIGlzIGZhbHNlLgorICAgICIiIgorICAgIHJvb3QgPSBsb2dnaW5nLnJvb3QKKyAgICBmb3IgbG9nIGluIGV4aXN0aW5nOgorICAgICAgICBsb2dnZXIgPSByb290Lm1hbmFnZXIubG9nZ2VyRGljdFtsb2ddCisgICAgICAgIGlmIGxvZyBpbiBjaGlsZF9sb2dnZXJzOgorICAgICAgICAgICAgbG9nZ2VyLmxldmVsID0gbG9nZ2luZy5OT1RTRVQKKyAgICAgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtdCisgICAgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gVHJ1ZQorICAgICAgICBlbGlmIGRpc2FibGVfZXhpc3Rpbmc6CisgICAgICAgICAgICBsb2dnZXIuZGlzYWJsZWQgPSBUcnVlCisKK2RlZiBfaW5zdGFsbF9sb2dnZXJzKGNwLCBoYW5kbGVycywgZGlzYWJsZV9leGlzdGluZyk6CiAgICAgIiIiQ3JlYXRlIGFuZCBpbnN0YWxsIGxvZ2dlcnMiIiIKIAogICAgICMgY29uZmlndXJlIHRoZSByb290IGZpcnN0Ci0gICAgbGxpc3QgPSBjcC5nZXQoImxvZ2dlcnMiLCAia2V5cyIpCisgICAgbGxpc3QgPSBjcFsibG9nZ2VycyJdWyJrZXlzIl0KICAgICBsbGlzdCA9IGxsaXN0LnNwbGl0KCIsIikKICAgICBsbGlzdCA9IGxpc3QobWFwKGxhbWJkYSB4OiB4LnN0cmlwKCksIGxsaXN0KSkKICAgICBsbGlzdC5yZW1vdmUoInJvb3QiKQotICAgIHNlY3RuYW1lID0gImxvZ2dlcl9yb290IgorICAgIHNlY3Rpb24gPSBjcFsibG9nZ2VyX3Jvb3QiXQogICAgIHJvb3QgPSBsb2dnaW5nLnJvb3QKICAgICBsb2cgPSByb290Ci0gICAgb3B0cyA9IGNwLm9wdGlvbnMoc2VjdG5hbWUpCi0gICAgaWYgImxldmVsIiBpbiBvcHRzOgotICAgICAgICBsZXZlbCA9IGNwLmdldChzZWN0bmFtZSwgImxldmVsIikKKyAgICBpZiAibGV2ZWwiIGluIHNlY3Rpb246CisgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQogICAgICAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5fbGV2ZWxOYW1lc1tsZXZlbF0pCiAgICAgZm9yIGggaW4gcm9vdC5oYW5kbGVyc1s6XToKICAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKGgpCi0gICAgaGxpc3QgPSBjcC5nZXQoc2VjdG5hbWUsICJoYW5kbGVycyIpCisgICAgaGxpc3QgPSBzZWN0aW9uWyJoYW5kbGVycyJdCiAgICAgaWYgbGVuKGhsaXN0KToKICAgICAgICAgaGxpc3QgPSBobGlzdC5zcGxpdCgiLCIpCiAgICAgICAgIGhsaXN0ID0gX3N0cmlwX3NwYWNlcyhobGlzdCkKQEAgLTIxMSwxOSArMjE1LDE1IEBACiAgICAgI2F2b2lkIGRpc2FibGluZyBjaGlsZCBsb2dnZXJzIG9mIGV4cGxpY2l0bHkKICAgICAjbmFtZWQgbG9nZ2Vycy4gV2l0aCBhIHNvcnRlZCBsaXN0IGl0IGlzIGVhc2llcgogICAgICN0byBmaW5kIHRoZSBjaGlsZCBsb2dnZXJzLgotICAgIGV4aXN0aW5nLnNvcnQoKQorICAgIGV4aXN0aW5nLnNvcnQoa2V5PV9lbmNvZGVkKQogICAgICNXZSdsbCBrZWVwIHRoZSBsaXN0IG9mIGV4aXN0aW5nIGxvZ2dlcnMKICAgICAjd2hpY2ggYXJlIGNoaWxkcmVuIG9mIG5hbWVkIGxvZ2dlcnMgaGVyZS4uLgogICAgIGNoaWxkX2xvZ2dlcnMgPSBbXQogICAgICNub3cgc2V0IHVwIHRoZSBuZXcgb25lcy4uLgogICAgIGZvciBsb2cgaW4gbGxpc3Q6Ci0gICAgICAgIHNlY3RuYW1lID0gImxvZ2dlcl8lcyIgJSBsb2cKLSAgICAgICAgcW4gPSBjcC5nZXQoc2VjdG5hbWUsICJxdWFsbmFtZSIpCi0gICAgICAgIG9wdHMgPSBjcC5vcHRpb25zKHNlY3RuYW1lKQotICAgICAgICBpZiAicHJvcGFnYXRlIiBpbiBvcHRzOgotICAgICAgICAgICAgcHJvcGFnYXRlID0gY3AuZ2V0aW50KHNlY3RuYW1lLCAicHJvcGFnYXRlIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb3BhZ2F0ZSA9IDEKKyAgICAgICAgc2VjdGlvbiA9IGNwWyJsb2dnZXJfJXMiICUgbG9nXQorICAgICAgICBxbiA9IHNlY3Rpb25bInF1YWxuYW1lIl0KKyAgICAgICAgcHJvcGFnYXRlID0gc2VjdGlvbi5nZXRpbnQoInByb3BhZ2F0ZSIsIGZhbGxiYWNrPTEpCiAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKHFuKQogICAgICAgICBpZiBxbiBpbiBleGlzdGluZzoKICAgICAgICAgICAgIGkgPSBleGlzdGluZy5pbmRleChxbikgKyAxICMgc3RhcnQgd2l0aCB0aGUgZW50cnkgYWZ0ZXIgcW4KQEAgLTIzNSwxNCArMjM1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2xvZ2dlcnMuYXBwZW5kKGV4aXN0aW5nW2ldKQogICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICAgZXhpc3RpbmcucmVtb3ZlKHFuKQotICAgICAgICBpZiAibGV2ZWwiIGluIG9wdHM6Ci0gICAgICAgICAgICBsZXZlbCA9IGNwLmdldChzZWN0bmFtZSwgImxldmVsIikKKyAgICAgICAgaWYgImxldmVsIiBpbiBzZWN0aW9uOgorICAgICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCiAgICAgICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5fbGV2ZWxOYW1lc1tsZXZlbF0pCiAgICAgICAgIGZvciBoIGluIGxvZ2dlci5oYW5kbGVyc1s6XToKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBwcm9wYWdhdGUKICAgICAgICAgbG9nZ2VyLmRpc2FibGVkID0gMAotICAgICAgICBobGlzdCA9IGNwLmdldChzZWN0bmFtZSwgImhhbmRsZXJzIikKKyAgICAgICAgaGxpc3QgPSBzZWN0aW9uWyJoYW5kbGVycyJdCiAgICAgICAgIGlmIGxlbihobGlzdCk6CiAgICAgICAgICAgICBobGlzdCA9IGhsaXN0LnNwbGl0KCIsIikKICAgICAgICAgICAgIGhsaXN0ID0gX3N0cmlwX3NwYWNlcyhobGlzdCkKQEAgLTI1NCwxNCArMjU0LDUyNiBAQAogICAgICNhbmQgYnkgZGlzYWJsaW5nIHRoZW0sIHlvdSBzdG9wIHRoZW0gZG9pbmcgYW55IGxvZ2dpbmcuCiAgICAgI0hvd2V2ZXIsIGRvbid0IGRpc2FibGUgY2hpbGRyZW4gb2YgbmFtZWQgbG9nZ2VycywgYXMgdGhhdCdzCiAgICAgI3Byb2JhYmx5IG5vdCB3aGF0IHdhcyBpbnRlbmRlZCBieSB0aGUgdXNlci4KLSAgICBmb3IgbG9nIGluIGV4aXN0aW5nOgotICAgICAgICBsb2dnZXIgPSByb290Lm1hbmFnZXIubG9nZ2VyRGljdFtsb2ddCi0gICAgICAgIGlmIGxvZyBpbiBjaGlsZF9sb2dnZXJzOgotICAgICAgICAgICAgbG9nZ2VyLmxldmVsID0gbG9nZ2luZy5OT1RTRVQKLSAgICAgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtdCi0gICAgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gMQotICAgICAgICBlbGlmIGRpc2FibGVfZXhpc3RpbmdfbG9nZ2VyczoKLSAgICAgICAgICAgIGxvZ2dlci5kaXNhYmxlZCA9IDEKKyAgICAjZm9yIGxvZyBpbiBleGlzdGluZzoKKyAgICAjICAgIGxvZ2dlciA9IHJvb3QubWFuYWdlci5sb2dnZXJEaWN0W2xvZ10KKyAgICAjICAgIGlmIGxvZyBpbiBjaGlsZF9sb2dnZXJzOgorICAgICMgICAgICAgIGxvZ2dlci5sZXZlbCA9IGxvZ2dpbmcuTk9UU0VUCisgICAgIyAgICAgICAgbG9nZ2VyLmhhbmRsZXJzID0gW10KKyAgICAjICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gMQorICAgICMgICAgZWxpZiBkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6CisgICAgIyAgICAgICAgbG9nZ2VyLmRpc2FibGVkID0gMQorICAgIF9oYW5kbGVfZXhpc3RpbmdfbG9nZ2VycyhleGlzdGluZywgY2hpbGRfbG9nZ2VycywgZGlzYWJsZV9leGlzdGluZykKKworSURFTlRJRklFUiA9IHJlLmNvbXBpbGUoJ15bYS16X11bYS16MC05X10qJCcsIHJlLkkpCisKKworZGVmIHZhbGlkX2lkZW50KHMpOgorICAgIG0gPSBJREVOVElGSUVSLm1hdGNoKHMpCisgICAgaWYgbm90IG06CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vdCBhIHZhbGlkIFB5dGhvbiBpZGVudGlmaWVyOiAlcicgJSBzKQorICAgIHJldHVybiBUcnVlCisKKworIyBUaGUgQ29udmVydGluZ1hYWCBjbGFzc2VzIGFyZSB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgUHl0aG9uIGNvbnRhaW5lcnMsCisjIGFuZCB0aGV5IHNlcnZlIHRvIGNvbnZlcnQgYW55IHN1aXRhYmxlIHZhbHVlcyBpbiB0aGUgY29udGFpbmVyLiBUaGUKKyMgY29udmVyc2lvbiBjb252ZXJ0cyBiYXNlIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIHRvIHRoZWlyIHdyYXBwZWQKKyMgZXF1aXZhbGVudHMsIHdoZXJlYXMgc3RyaW5ncyB3aGljaCBtYXRjaCBhIGNvbnZlcnNpb24gZm9ybWF0IGFyZSBjb252ZXJ0ZWQKKyMgYXBwcm9wcmlhdGVseS4KKyMKKyMgRWFjaCB3cmFwcGVyIHNob3VsZCBoYXZlIGEgY29uZmlndXJhdG9yIGF0dHJpYnV0ZSBob2xkaW5nIHRoZSBhY3R1YWwKKyMgY29uZmlndXJhdG9yIHRvIHVzZSBmb3IgY29udmVyc2lvbi4KKworY2xhc3MgQ29udmVydGluZ0RpY3QoZGljdCk6CisgICAgIiIiQSBjb252ZXJ0aW5nIGRpY3Rpb25hcnkgd3JhcHBlci4iIiIKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICB2YWx1ZSA9IGRpY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICAjSWYgdGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBkaWZmZXJlbnQsIHNhdmUgZm9yIG5leHQgdGltZQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgc2VsZltrZXldID0gcmVzdWx0CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHZhbHVlID0gZGljdC5nZXQoc2VsZiwga2V5LCBkZWZhdWx0KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICAjSWYgdGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBkaWZmZXJlbnQsIHNhdmUgZm9yIG5leHQgdGltZQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgc2VsZltrZXldID0gcmVzdWx0CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHZhbHVlID0gZGljdC5wb3Aoc2VsZiwga2V5LCBkZWZhdWx0KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQ29udmVydGluZ0xpc3QobGlzdCk6CisgICAgIiIiQSBjb252ZXJ0aW5nIGxpc3Qgd3JhcHBlci4iIiIKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdmFsdWUgPSBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKKyAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKKyAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBwb3Aoc2VsZiwgaWR4PS0xKToKKyAgICAgICAgdmFsdWUgPSBsaXN0LnBvcChzZWxmLCBpZHgpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIENvbnZlcnRpbmdUdXBsZSh0dXBsZSk6CisgICAgIiIiQSBjb252ZXJ0aW5nIHR1cGxlIHdyYXBwZXIuIiIiCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIHZhbHVlID0gdHVwbGUuX19nZXRpdGVtX18oc2VsZiwga2V5KQorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKKyAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5CisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQmFzZUNvbmZpZ3VyYXRvcihvYmplY3QpOgorICAgICIiIgorICAgIFRoZSBjb25maWd1cmF0b3IgYmFzZSBjbGFzcyB3aGljaCBkZWZpbmVzIHNvbWUgdXNlZnVsIGRlZmF1bHRzLgorICAgICIiIgorCisgICAgQ09OVkVSVF9QQVRURVJOID0gcmUuY29tcGlsZShyJ14oP1A8cHJlZml4PlthLXpdKyk6Ly8oP1A8c3VmZml4Pi4qKSQnKQorCisgICAgV09SRF9QQVRURVJOID0gcmUuY29tcGlsZShyJ15ccyooXHcrKVxzKicpCisgICAgRE9UX1BBVFRFUk4gPSByZS5jb21waWxlKHInXlwuXHMqKFx3KylccyonKQorICAgIElOREVYX1BBVFRFUk4gPSByZS5jb21waWxlKHInXlxbXHMqKFx3KylccypcXVxzKicpCisgICAgRElHSVRfUEFUVEVSTiA9IHJlLmNvbXBpbGUocideXGQrJCcpCisKKyAgICB2YWx1ZV9jb252ZXJ0ZXJzID0geworICAgICAgICAnZXh0JyA6ICdleHRfY29udmVydCcsCisgICAgICAgICdjZmcnIDogJ2NmZ19jb252ZXJ0JywKKyAgICB9CisKKyAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG9uZSwgZS5nLiBpbXBvcnRsaWIKKyAgICBpbXBvcnRlciA9IHN0YXRpY21ldGhvZChfX2ltcG9ydF9fKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbmZpZyk6CisgICAgICAgIHNlbGYuY29uZmlnID0gQ29udmVydGluZ0RpY3QoY29uZmlnKQorICAgICAgICBzZWxmLmNvbmZpZy5jb25maWd1cmF0b3IgPSBzZWxmCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmLCBzKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc29sdmUgc3RyaW5ncyB0byBvYmplY3RzIHVzaW5nIHN0YW5kYXJkIGltcG9ydCBhbmQgYXR0cmlidXRlCisgICAgICAgIHN5bnRheC4KKyAgICAgICAgIiIiCisgICAgICAgIG5hbWUgPSBzLnNwbGl0KCcuJykKKyAgICAgICAgdXNlZCA9IG5hbWUucG9wKDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5pbXBvcnRlcih1c2VkKQorICAgICAgICAgICAgZm9yIGZyYWcgaW4gbmFtZToKKyAgICAgICAgICAgICAgICB1c2VkICs9ICcuJyArIGZyYWcKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihmb3VuZCwgZnJhZykKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW1wb3J0ZXIodXNlZCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBnZXRhdHRyKGZvdW5kLCBmcmFnKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGUsIHRiID0gc3lzLmV4Y19pbmZvKClbMTpdCisgICAgICAgICAgICB2ID0gVmFsdWVFcnJvcignQ2Fubm90IHJlc29sdmUgJXI6ICVzJyAlIChzLCBlKSkKKyAgICAgICAgICAgIHYuX19jYXVzZV9fLCB2Ll9fdHJhY2ViYWNrX18gPSBlLCB0YgorICAgICAgICAgICAgcmFpc2UgdgorCisgICAgZGVmIGV4dF9jb252ZXJ0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiRGVmYXVsdCBjb252ZXJ0ZXIgZm9yIHRoZSBleHQ6Ly8gcHJvdG9jb2wuIiIiCisgICAgICAgIHJldHVybiBzZWxmLnJlc29sdmUodmFsdWUpCisKKyAgICBkZWYgY2ZnX2NvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJEZWZhdWx0IGNvbnZlcnRlciBmb3IgdGhlIGNmZzovLyBwcm90b2NvbC4iIiIKKyAgICAgICAgcmVzdCA9IHZhbHVlCisgICAgICAgIG0gPSBzZWxmLldPUkRfUEFUVEVSTi5tYXRjaChyZXN0KQorICAgICAgICBpZiBtIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmFibGUgdG8gY29udmVydCAlciIgJSB2YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3QgPSByZXN0W20uZW5kKCk6XQorICAgICAgICAgICAgZCA9IHNlbGYuY29uZmlnW20uZ3JvdXBzKClbMF1dCisgICAgICAgICAgICAjcHJpbnQgZCwgcmVzdAorICAgICAgICAgICAgd2hpbGUgcmVzdDoKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5ET1RfUEFUVEVSTi5tYXRjaChyZXN0KQorICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgIGQgPSBkW20uZ3JvdXBzKClbMF1dCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbSA9IHNlbGYuSU5ERVhfUEFUVEVSTi5tYXRjaChyZXN0KQorICAgICAgICAgICAgICAgICAgICBpZiBtOgorICAgICAgICAgICAgICAgICAgICAgICAgaWR4ID0gbS5ncm91cHMoKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuRElHSVRfUEFUVEVSTi5tYXRjaChpZHgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBkW2lkeF0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gaW50KGlkeCkgIyB0cnkgYXMgbnVtYmVyIGZpcnN0IChtb3N0IGxpa2VseSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGRbbl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gZFtpZHhdCisgICAgICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICAgICAgcmVzdCA9IHJlc3RbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbnZlcnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclciBhdCAlcicgJSAodmFsdWUsIHJlc3QpKQorICAgICAgICAjcmVzdCBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgcmV0dXJuIGQKKworICAgIGRlZiBjb252ZXJ0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbnZlcnQgdmFsdWVzIHRvIGFuIGFwcHJvcHJpYXRlIHR5cGUuIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIGFyZQorICAgICAgICByZXBsYWNlZCBieSB0aGVpciBjb252ZXJ0aW5nIGFsdGVybmF0aXZlcy4gU3RyaW5ncyBhcmUgY2hlY2tlZCB0bworICAgICAgICBzZWUgaWYgdGhleSBoYXZlIGEgY29udmVyc2lvbiBmb3JtYXQgYW5kIGFyZSBjb252ZXJ0ZWQgaWYgdGhleSBkby4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBDb252ZXJ0aW5nRGljdCkgYW5kIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgdmFsdWUgPSBDb252ZXJ0aW5nRGljdCh2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlLmNvbmZpZ3VyYXRvciA9IHNlbGYKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgQ29udmVydGluZ0xpc3QpIGFuZCBpc2luc3RhbmNlKHZhbHVlLCBsaXN0KToKKyAgICAgICAgICAgIHZhbHVlID0gQ29udmVydGluZ0xpc3QodmFsdWUpCisgICAgICAgICAgICB2YWx1ZS5jb25maWd1cmF0b3IgPSBzZWxmCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIENvbnZlcnRpbmdUdXBsZSkgYW5kXAorICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CisgICAgICAgICAgICB2YWx1ZSA9IENvbnZlcnRpbmdUdXBsZSh2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlLmNvbmZpZ3VyYXRvciA9IHNlbGYKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOiAjIHN0ciBmb3IgcHkzaworICAgICAgICAgICAgbSA9IHNlbGYuQ09OVkVSVF9QQVRURVJOLm1hdGNoKHZhbHVlKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQorICAgICAgICAgICAgICAgIHByZWZpeCA9IGRbJ3ByZWZpeCddCisgICAgICAgICAgICAgICAgY29udmVydGVyID0gc2VsZi52YWx1ZV9jb252ZXJ0ZXJzLmdldChwcmVmaXgsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgY29udmVydGVyOgorICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSBkWydzdWZmaXgnXQorICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZXIgPSBnZXRhdHRyKHNlbGYsIGNvbnZlcnRlcikKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb252ZXJ0ZXIoc3VmZml4KQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBjb25maWd1cmVfY3VzdG9tKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhbiBvYmplY3Qgd2l0aCBhIHVzZXItc3VwcGxpZWQgZmFjdG9yeS4iIiIKKyAgICAgICAgYyA9IGNvbmZpZy5wb3AoJygpJykKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoYywgJ19fY2FsbF9fJyk6CisgICAgICAgICAgICBjID0gc2VsZi5yZXNvbHZlKGMpCisgICAgICAgIHByb3BzID0gY29uZmlnLnBvcCgnLicsIE5vbmUpCisgICAgICAgICMgQ2hlY2sgZm9yIHZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIGt3YXJncyA9IGRpY3QoWyhrLCBjb25maWdba10pIGZvciBrIGluIGNvbmZpZyBpZiB2YWxpZF9pZGVudChrKV0pCisgICAgICAgIHJlc3VsdCA9IGMoKiprd2FyZ3MpCisgICAgICAgIGlmIHByb3BzOgorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIHByb3BzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2V0YXR0cihyZXN1bHQsIG5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgYXNfdHVwbGUoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJVdGlsaXR5IGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIGxpc3RzIHRvIHR1cGxlcy4iIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgbGlzdCk6CisgICAgICAgICAgICB2YWx1ZSA9IHR1cGxlKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworY2xhc3MgRGljdENvbmZpZ3VyYXRvcihCYXNlQ29uZmlndXJhdG9yKToKKyAgICAiIiIKKyAgICBDb25maWd1cmUgbG9nZ2luZyB1c2luZyBhIGRpY3Rpb25hcnktbGlrZSBvYmplY3QgdG8gZGVzY3JpYmUgdGhlCisgICAgY29uZmlndXJhdGlvbi4KKyAgICAiIiIKKworICAgIGRlZiBjb25maWd1cmUoc2VsZik6CisgICAgICAgICIiIkRvIHRoZSBjb25maWd1cmF0aW9uLiIiIgorCisgICAgICAgIGNvbmZpZyA9IHNlbGYuY29uZmlnCisgICAgICAgIGlmICd2ZXJzaW9uJyBub3QgaW4gY29uZmlnOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZGljdGlvbmFyeSBkb2Vzbid0IHNwZWNpZnkgYSB2ZXJzaW9uIikKKyAgICAgICAgaWYgY29uZmlnWyd2ZXJzaW9uJ10gIT0gMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIHZlcnNpb246ICVzIiAlIGNvbmZpZ1sndmVyc2lvbiddKQorICAgICAgICBpbmNyZW1lbnRhbCA9IGNvbmZpZy5wb3AoJ2luY3JlbWVudGFsJywgRmFsc2UpCisgICAgICAgIEVNUFRZX0RJQ1QgPSB7fQorICAgICAgICBsb2dnaW5nLl9hY3F1aXJlTG9jaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGluY3JlbWVudGFsOgorICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gY29uZmlnLmdldCgnaGFuZGxlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBsb2dnaW5nLl9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIGhhbmRsZXIgZm91bmQgd2l0aCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lICVyJyAgJSBuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLl9oYW5kbGVyc1tuYW1lXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJfY29uZmlnID0gaGFuZGxlcnNbbmFtZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IGhhbmRsZXJfY29uZmlnLmdldCgnbGV2ZWwnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldmVsOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNldExldmVsKGxvZ2dpbmcuX2NoZWNrTGV2ZWwobGV2ZWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXI6ICVzJyAlIChuYW1lLCBlKSkKKyAgICAgICAgICAgICAgICBsb2dnZXJzID0gY29uZmlnLmdldCgnbG9nZ2VycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWd1cmVfbG9nZ2VyKG5hbWUsIGxvZ2dlcnNbbmFtZV0sIFRydWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgbG9nZ2VyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICAgICAgcm9vdCA9IGNvbmZpZy5nZXQoJ3Jvb3QnLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX3Jvb3Qocm9vdCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5hYmxlIHRvIGNvbmZpZ3VyZSByb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvZ2dlcjogJXMnICUgZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGlzYWJsZV9leGlzdGluZyA9IGNvbmZpZy5wb3AoJ2Rpc2FibGVfZXhpc3RpbmdfbG9nZ2VycycsIFRydWUpCisKKyAgICAgICAgICAgICAgICBsb2dnaW5nLl9oYW5kbGVycy5jbGVhcigpCisgICAgICAgICAgICAgICAgZGVsIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCisKKyAgICAgICAgICAgICAgICAjIERvIGZvcm1hdHRlcnMgZmlyc3QgLSB0aGV5IGRvbid0IHJlZmVyIHRvIGFueXRoaW5nIGVsc2UKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXJzID0gY29uZmlnLmdldCgnZm9ybWF0dGVycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZm9ybWF0dGVyczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyc1tuYW1lXSA9IHNlbGYuY29uZmlndXJlX2Zvcm1hdHRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcnNbbmFtZV0pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICAgICAgIyBOZXh0LCBkbyBmaWx0ZXJzIC0gdGhleSBkb24ndCByZWZlciB0byBhbnl0aGluZyBlbHNlLCBlaXRoZXIKKyAgICAgICAgICAgICAgICBmaWx0ZXJzID0gY29uZmlnLmdldCgnZmlsdGVycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsdGVyczoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1tuYW1lXSA9IHNlbGYuY29uZmlndXJlX2ZpbHRlcihmaWx0ZXJzW25hbWVdKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlciAlcjogJXMnICUgKG5hbWUsIGUpKQorCisgICAgICAgICAgICAgICAgIyBOZXh0LCBkbyBoYW5kbGVycyAtIHRoZXkgcmVmZXIgdG8gZm9ybWF0dGVycyBhbmQgZmlsdGVycworICAgICAgICAgICAgICAgICMgQXMgaGFuZGxlcnMgY2FuIHJlZmVyIHRvIG90aGVyIGhhbmRsZXJzLCBzb3J0IHRoZSBrZXlzCisgICAgICAgICAgICAgICAgIyB0byBhbGxvdyBhIGRldGVybWluaXN0aWMgb3JkZXIgb2YgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gY29uZmlnLmdldCgnaGFuZGxlcnMnLCBFTVBUWV9ESUNUKQorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChoYW5kbGVycyk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBzZWxmLmNvbmZpZ3VyZV9oYW5kbGVyKGhhbmRsZXJzW25hbWVdKQorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5uYW1lID0gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorICAgICAgICAgICAgICAgICMgTmV4dCwgZG8gbG9nZ2VycyAtIHRoZXkgcmVmZXIgdG8gaGFuZGxlcnMgYW5kIGZpbHRlcnMKKworICAgICAgICAgICAgICAgICN3ZSBkb24ndCB3YW50IHRvIGxvc2UgdGhlIGV4aXN0aW5nIGxvZ2dlcnMsCisgICAgICAgICAgICAgICAgI3NpbmNlIG90aGVyIHRocmVhZHMgbWF5IGhhdmUgcG9pbnRlcnMgdG8gdGhlbS4KKyAgICAgICAgICAgICAgICAjZXhpc3RpbmcgaXMgc2V0IHRvIGNvbnRhaW4gYWxsIGV4aXN0aW5nIGxvZ2dlcnMsCisgICAgICAgICAgICAgICAgI2FuZCBhcyB3ZSBnbyB0aHJvdWdoIHRoZSBuZXcgY29uZmlndXJhdGlvbiB3ZQorICAgICAgICAgICAgICAgICNyZW1vdmUgYW55IHdoaWNoIGFyZSBjb25maWd1cmVkLiBBdCB0aGUgZW5kLAorICAgICAgICAgICAgICAgICN3aGF0J3MgbGVmdCBpbiBleGlzdGluZyBpcyB0aGUgc2V0IG9mIGxvZ2dlcnMKKyAgICAgICAgICAgICAgICAjd2hpY2ggd2VyZSBpbiB0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbiBidXQKKyAgICAgICAgICAgICAgICAjd2hpY2ggYXJlIG5vdCBpbiB0aGUgbmV3IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICAgICAgICAgcm9vdCA9IGxvZ2dpbmcucm9vdAorICAgICAgICAgICAgICAgIGV4aXN0aW5nID0gbGlzdChyb290Lm1hbmFnZXIubG9nZ2VyRGljdC5rZXlzKCkpCisgICAgICAgICAgICAgICAgI1RoZSBsaXN0IG5lZWRzIHRvIGJlIHNvcnRlZCBzbyB0aGF0IHdlIGNhbgorICAgICAgICAgICAgICAgICNhdm9pZCBkaXNhYmxpbmcgY2hpbGQgbG9nZ2VycyBvZiBleHBsaWNpdGx5CisgICAgICAgICAgICAgICAgI25hbWVkIGxvZ2dlcnMuIFdpdGggYSBzb3J0ZWQgbGlzdCBpdCBpcyBlYXNpZXIKKyAgICAgICAgICAgICAgICAjdG8gZmluZCB0aGUgY2hpbGQgbG9nZ2Vycy4KKyAgICAgICAgICAgICAgICBleGlzdGluZy5zb3J0KGtleT1fZW5jb2RlZCkKKyAgICAgICAgICAgICAgICAjV2UnbGwga2VlcCB0aGUgbGlzdCBvZiBleGlzdGluZyBsb2dnZXJzCisgICAgICAgICAgICAgICAgI3doaWNoIGFyZSBjaGlsZHJlbiBvZiBuYW1lZCBsb2dnZXJzIGhlcmUuLi4KKyAgICAgICAgICAgICAgICBjaGlsZF9sb2dnZXJzID0gW10KKyAgICAgICAgICAgICAgICAjbm93IHNldCB1cCB0aGUgbmV3IG9uZXMuLi4KKyAgICAgICAgICAgICAgICBsb2dnZXJzID0gY29uZmlnLmdldCgnbG9nZ2VycycsIEVNUFRZX0RJQ1QpCisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gbG9nZ2VyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBleGlzdGluZzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBleGlzdGluZy5pbmRleChuYW1lKSArIDEgIyBsb29rIGFmdGVyIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVkID0gbmFtZSArICIuIgorICAgICAgICAgICAgICAgICAgICAgICAgcGZsZW4gPSBsZW4ocHJlZml4ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBudW1fZXhpc3RpbmcgPSBsZW4oZXhpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBpIDwgbnVtX2V4aXN0aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGV4aXN0aW5nW2ldWzpwZmxlbl0gPT0gcHJlZml4ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkX2xvZ2dlcnMuYXBwZW5kKGV4aXN0aW5nW2ldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX2xvZ2dlcihuYW1lLCBsb2dnZXJzW25hbWVdKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY29uZmlndXJlIGxvZ2dlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICclcjogJXMnICUgKG5hbWUsIGUpKQorCisgICAgICAgICAgICAgICAgI0Rpc2FibGUgYW55IG9sZCBsb2dnZXJzLiBUaGVyZSdzIG5vIHBvaW50IGRlbGV0aW5nCisgICAgICAgICAgICAgICAgI3RoZW0gYXMgb3RoZXIgdGhyZWFkcyBtYXkgY29udGludWUgdG8gaG9sZCByZWZlcmVuY2VzCisgICAgICAgICAgICAgICAgI2FuZCBieSBkaXNhYmxpbmcgdGhlbSwgeW91IHN0b3AgdGhlbSBkb2luZyBhbnkgbG9nZ2luZy4KKyAgICAgICAgICAgICAgICAjSG93ZXZlciwgZG9uJ3QgZGlzYWJsZSBjaGlsZHJlbiBvZiBuYW1lZCBsb2dnZXJzLCBhcyB0aGF0J3MKKyAgICAgICAgICAgICAgICAjcHJvYmFibHkgbm90IHdoYXQgd2FzIGludGVuZGVkIGJ5IHRoZSB1c2VyLgorICAgICAgICAgICAgICAgICNmb3IgbG9nIGluIGV4aXN0aW5nOgorICAgICAgICAgICAgICAgICMgICAgbG9nZ2VyID0gcm9vdC5tYW5hZ2VyLmxvZ2dlckRpY3RbbG9nXQorICAgICAgICAgICAgICAgICMgICAgaWYgbG9nIGluIGNoaWxkX2xvZ2dlcnM6CisgICAgICAgICAgICAgICAgIyAgICAgICAgbG9nZ2VyLmxldmVsID0gbG9nZ2luZy5OT1RTRVQKKyAgICAgICAgICAgICAgICAjICAgICAgICBsb2dnZXIuaGFuZGxlcnMgPSBbXQorICAgICAgICAgICAgICAgICMgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBUcnVlCisgICAgICAgICAgICAgICAgIyAgICBlbGlmIGRpc2FibGVfZXhpc3Rpbmc6CisgICAgICAgICAgICAgICAgIyAgICAgICAgbG9nZ2VyLmRpc2FibGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIF9oYW5kbGVfZXhpc3RpbmdfbG9nZ2VycyhleGlzdGluZywgY2hpbGRfbG9nZ2VycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZV9leGlzdGluZykKKworICAgICAgICAgICAgICAgICMgQW5kIGZpbmFsbHksIGRvIHRoZSByb290IGxvZ2dlcgorICAgICAgICAgICAgICAgIHJvb3QgPSBjb25maWcuZ2V0KCdyb290JywgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiByb290OgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ3VyZV9yb290KHJvb3QpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1VuYWJsZSB0byBjb25maWd1cmUgcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb2dnZXI6ICVzJyAlIGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCisKKyAgICBkZWYgY29uZmlndXJlX2Zvcm1hdHRlcihzZWxmLCBjb25maWcpOgorICAgICAgICAiIiJDb25maWd1cmUgYSBmb3JtYXR0ZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIGlmICcoKScgaW4gY29uZmlnOgorICAgICAgICAgICAgZmFjdG9yeSA9IGNvbmZpZ1snKCknXSAjIGZvciB1c2UgaW4gZXhjZXB0aW9uIGhhbmRsZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyZV9jdXN0b20oY29uZmlnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyB0ZToKKyAgICAgICAgICAgICAgICBpZiAiJ2Zvcm1hdCciIG5vdCBpbiBzdHIodGUpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICNOYW1lIG9mIHBhcmFtZXRlciBjaGFuZ2VkIGZyb20gZm10IHRvIGZvcm1hdC4KKyAgICAgICAgICAgICAgICAjUmV0cnkgd2l0aCBvbGQgbmFtZS4KKyAgICAgICAgICAgICAgICAjVGhpcyBpcyBzbyB0aGF0IGNvZGUgY2FuIGJlIHVzZWQgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAjKGUuZy4gYnkgRGphbmdvKQorICAgICAgICAgICAgICAgIGNvbmZpZ1snZm10J10gPSBjb25maWcucG9wKCdmb3JtYXQnKQorICAgICAgICAgICAgICAgIGNvbmZpZ1snKCknXSA9IGZhY3RvcnkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyZV9jdXN0b20oY29uZmlnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm10ID0gY29uZmlnLmdldCgnZm9ybWF0JywgTm9uZSkKKyAgICAgICAgICAgIGRmbXQgPSBjb25maWcuZ2V0KCdkYXRlZm10JywgTm9uZSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGxvZ2dpbmcuRm9ybWF0dGVyKGZtdCwgZGZtdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbmZpZ3VyZV9maWx0ZXIoc2VsZiwgY29uZmlnKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgZmlsdGVyIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorICAgICAgICBpZiAnKCknIGluIGNvbmZpZzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJlX2N1c3RvbShjb25maWcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gY29uZmlnLmdldCgnbmFtZScsICcnKQorICAgICAgICAgICAgcmVzdWx0ID0gbG9nZ2luZy5GaWx0ZXIobmFtZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGFkZF9maWx0ZXJzKHNlbGYsIGZpbHRlcmVyLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiQWRkIGZpbHRlcnMgdG8gYSBmaWx0ZXJlciBmcm9tIGEgbGlzdCBvZiBuYW1lcy4iIiIKKyAgICAgICAgZm9yIGYgaW4gZmlsdGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaWx0ZXJlci5hZGRGaWx0ZXIoc2VsZi5jb25maWdbJ2ZpbHRlcnMnXVtmXSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gYWRkIGZpbHRlciAlcjogJXMnICUgKGYsIGUpKQorCisgICAgZGVmIGNvbmZpZ3VyZV9oYW5kbGVyKHNlbGYsIGNvbmZpZyk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIGhhbmRsZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIGZvcm1hdHRlciA9IGNvbmZpZy5wb3AoJ2Zvcm1hdHRlcicsIE5vbmUpCisgICAgICAgIGlmIGZvcm1hdHRlcjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3JtYXR0ZXIgPSBzZWxmLmNvbmZpZ1snZm9ybWF0dGVycyddW2Zvcm1hdHRlcl0KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gc2V0IGZvcm1hdHRlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXI6ICVzJyAlIChmb3JtYXR0ZXIsIGUpKQorICAgICAgICBsZXZlbCA9IGNvbmZpZy5wb3AoJ2xldmVsJywgTm9uZSkKKyAgICAgICAgZmlsdGVycyA9IGNvbmZpZy5wb3AoJ2ZpbHRlcnMnLCBOb25lKQorICAgICAgICBpZiAnKCknIGluIGNvbmZpZzoKKyAgICAgICAgICAgIGMgPSBjb25maWcucG9wKCcoKScpCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjLCAnX19jYWxsX18nKSBhbmQgaGFzYXR0cih0eXBlcywgJ0NsYXNzVHlwZScpIGFuZCB0eXBlKGMpICE9IHR5cGVzLkNsYXNzVHlwZToKKyAgICAgICAgICAgICAgICBjID0gc2VsZi5yZXNvbHZlKGMpCisgICAgICAgICAgICBmYWN0b3J5ID0gYworICAgICAgICBlbHNlOgorICAgICAgICAgICAga2xhc3MgPSBzZWxmLnJlc29sdmUoY29uZmlnLnBvcCgnY2xhc3MnKSkKKyAgICAgICAgICAgICNTcGVjaWFsIGNhc2UgZm9yIGhhbmRsZXIgd2hpY2ggcmVmZXJzIHRvIGFub3RoZXIgaGFuZGxlcgorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhrbGFzcywgbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyKSBhbmRcCisgICAgICAgICAgICAgICAgJ3RhcmdldCcgaW4gY29uZmlnOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnWyd0YXJnZXQnXSA9IHNlbGYuY29uZmlnWydoYW5kbGVycyddW2NvbmZpZ1sndGFyZ2V0J11dCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gc2V0IHRhcmdldCBoYW5kbGVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXI6ICVzJyAlIChjb25maWdbJ3RhcmdldCddLCBlKSkKKyAgICAgICAgICAgIGVsaWYgaXNzdWJjbGFzcyhrbGFzcywgbG9nZ2luZy5oYW5kbGVycy5TTVRQSGFuZGxlcikgYW5kXAorICAgICAgICAgICAgICAgICdtYWlsaG9zdCcgaW4gY29uZmlnOgorICAgICAgICAgICAgICAgIGNvbmZpZ1snbWFpbGhvc3QnXSA9IHNlbGYuYXNfdHVwbGUoY29uZmlnWydtYWlsaG9zdCddKQorICAgICAgICAgICAgZWxpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLlN5c0xvZ0hhbmRsZXIpIGFuZFwKKyAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgorICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKKyAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIHRlOgorICAgICAgICAgICAgaWYgIidzdHJlYW0nIiBub3QgaW4gc3RyKHRlKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgI1RoZSBhcmd1bWVudCBuYW1lIGNoYW5nZWQgZnJvbSBzdHJtIHRvIHN0cmVhbQorICAgICAgICAgICAgI1JldHJ5IHdpdGggb2xkIG5hbWUuCisgICAgICAgICAgICAjVGhpcyBpcyBzbyB0aGF0IGNvZGUgY2FuIGJlIHVzZWQgd2l0aCBvbGRlciBQeXRob24gdmVyc2lvbnMKKyAgICAgICAgICAgICMoZS5nLiBieSBEamFuZ28pCisgICAgICAgICAgICBrd2FyZ3NbJ3N0cm0nXSA9IGt3YXJncy5wb3AoJ3N0cmVhbScpCisgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQorICAgICAgICBpZiBmb3JtYXR0ZXI6CisgICAgICAgICAgICByZXN1bHQuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKKyAgICAgICAgaWYgbGV2ZWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCisgICAgICAgIGlmIGZpbHRlcnM6CisgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGFkZF9oYW5kbGVycyhzZWxmLCBsb2dnZXIsIGhhbmRsZXJzKToKKyAgICAgICAgIiIiQWRkIGhhbmRsZXJzIHRvIGEgbG9nZ2VyIGZyb20gYSBsaXN0IG9mIG5hbWVzLiIiIgorICAgICAgICBmb3IgaCBpbiBoYW5kbGVyczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihzZWxmLmNvbmZpZ1snaGFuZGxlcnMnXVtoXSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gYWRkIGhhbmRsZXIgJXI6ICVzJyAlIChoLCBlKSkKKworICAgIGRlZiBjb21tb25fbG9nZ2VyX2NvbmZpZyhzZWxmLCBsb2dnZXIsIGNvbmZpZywgaW5jcmVtZW50YWw9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgUGVyZm9ybSBjb25maWd1cmF0aW9uIHdoaWNoIGlzIGNvbW1vbiB0byByb290IGFuZCBub24tcm9vdCBsb2dnZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgbGV2ZWwgPSBjb25maWcuZ2V0KCdsZXZlbCcsIE5vbmUpCisgICAgICAgIGlmIGxldmVsIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2NoZWNrTGV2ZWwobGV2ZWwpKQorICAgICAgICBpZiBub3QgaW5jcmVtZW50YWw6CisgICAgICAgICAgICAjUmVtb3ZlIGFueSBleGlzdGluZyBoYW5kbGVycworICAgICAgICAgICAgZm9yIGggaW4gbG9nZ2VyLmhhbmRsZXJzWzpdOgorICAgICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICBoYW5kbGVycyA9IGNvbmZpZy5nZXQoJ2hhbmRsZXJzJywgTm9uZSkKKyAgICAgICAgICAgIGlmIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2hhbmRsZXJzKGxvZ2dlciwgaGFuZGxlcnMpCisgICAgICAgICAgICBmaWx0ZXJzID0gY29uZmlnLmdldCgnZmlsdGVycycsIE5vbmUpCisgICAgICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkX2ZpbHRlcnMobG9nZ2VyLCBmaWx0ZXJzKQorCisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnZXIoc2VsZiwgbmFtZSwgY29uZmlnLCBpbmNyZW1lbnRhbD1GYWxzZSk6CisgICAgICAgICIiIkNvbmZpZ3VyZSBhIG5vbi1yb290IGxvZ2dlciBmcm9tIGEgZGljdGlvbmFyeS4iIiIKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIobmFtZSkKKyAgICAgICAgc2VsZi5jb21tb25fbG9nZ2VyX2NvbmZpZyhsb2dnZXIsIGNvbmZpZywgaW5jcmVtZW50YWwpCisgICAgICAgIHByb3BhZ2F0ZSA9IGNvbmZpZy5nZXQoJ3Byb3BhZ2F0ZScsIE5vbmUpCisgICAgICAgIGlmIHByb3BhZ2F0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5wcm9wYWdhdGUgPSBwcm9wYWdhdGUKKworICAgIGRlZiBjb25maWd1cmVfcm9vdChzZWxmLCBjb25maWcsIGluY3JlbWVudGFsPUZhbHNlKToKKyAgICAgICAgIiIiQ29uZmlndXJlIGEgcm9vdCBsb2dnZXIgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCisgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHNlbGYuY29tbW9uX2xvZ2dlcl9jb25maWcocm9vdCwgY29uZmlnLCBpbmNyZW1lbnRhbCkKKworZGljdENvbmZpZ0NsYXNzID0gRGljdENvbmZpZ3VyYXRvcgorCitkZWYgZGljdENvbmZpZyhjb25maWcpOgorICAgICIiIkNvbmZpZ3VyZSBsb2dnaW5nIHVzaW5nIGEgZGljdGlvbmFyeS4iIiIKKyAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKIGRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgpAQCAtMzAxLDI0ICs4MTMsMjYgQEAKICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLmNvbm5lY3Rpb24ucmVjdihzbGVuKQogICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZW4oY2h1bmspIDwgc2xlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgKyBjb25uLnJlY3Yoc2xlbiAtIGxlbihjaHVuaykpCi0gICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4gV2UnZCBsaWtlIHRvIGJlIGFibGUgdG8KLSAgICAgICAgICAgICAgICAgICAgI2NyZWF0ZSBhIFN0cmluZ0lPIGFuZCBwYXNzIHRoYXQgaW4sIGJ1dCB1bmZvcnR1bmF0ZWx5Ci0gICAgICAgICAgICAgICAgICAgICMxLjUuMiBDb25maWdQYXJzZXIgZG9lcyBub3Qgc3VwcG9ydCByZWFkaW5nIGZpbGUKLSAgICAgICAgICAgICAgICAgICAgI29iamVjdHMsIG9ubHkgYWN0dWFsIGZpbGVzLiBTbyB3ZSBjcmVhdGUgYSB0ZW1wb3JhcnkKLSAgICAgICAgICAgICAgICAgICAgI2ZpbGUgYW5kIHJlbW92ZSBpdCBsYXRlci4KLSAgICAgICAgICAgICAgICAgICAgZmlsZSA9IHRlbXBmaWxlLm1rdGVtcCgiLmluaSIpCi0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGUsICJ3IikKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZShjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGpzb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkLCBkaWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgZGljdENvbmZpZyhkKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICAjQXBwbHkgbmV3IGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ29uZmlnKGZpbGUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5yZWFkeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnJlYWR5LnNldCgpCiAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2V0eXBlKGUuYXJncywgdHVwbGUpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGVycmNvZGUgPSBlLmFyZ3NbMF0KQEAgLTMzMywxMiArODQ3LDEzIEBACiAgICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULAotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSk6CiAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIuX19pbml0X18oc2VsZiwgKGhvc3QsIHBvcnQpLCBoYW5kbGVyKQogICAgICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICAgICAgc2VsZi5hYm9ydCA9IDAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlbGYudGltZW91dCA9IDEKKyAgICAgICAgICAgIHNlbGYucmVhZHkgPSByZWFkeQogCiAgICAgICAgIGRlZiBzZXJ2ZV91bnRpbF9zdG9wcGVkKHNlbGYpOgogICAgICAgICAgICAgaW1wb3J0IHNlbGVjdApAQCAtMzU0LDE3ICs4NjksMjggQEAKICAgICAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZWxmLnNvY2tldC5jbG9zZSgpCiAKLSAgICBkZWYgc2VydmUocmN2ciwgaGRsciwgcG9ydCk6Ci0gICAgICAgIHNlcnZlciA9IHJjdnIocG9ydD1wb3J0LCBoYW5kbGVyPWhkbHIpCi0gICAgICAgIGdsb2JhbCBfbGlzdGVuZXIKLSAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQotICAgICAgICBfbGlzdGVuZXIgPSBzZXJ2ZXIKLSAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQotICAgICAgICBzZXJ2ZXIuc2VydmVfdW50aWxfc3RvcHBlZCgpCisgICAgY2xhc3MgU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCi0gICAgcmV0dXJuIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KENvbmZpZ1NvY2tldFJlY2VpdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQpKQorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmN2ciwgaGRsciwgcG9ydCk6CisgICAgICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgICAgIHNlbGYucmN2ciA9IHJjdnIKKyAgICAgICAgICAgIHNlbGYuaGRsciA9IGhkbHIKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgICAgIHNlbGYucmVhZHkgPSB0aHJlYWRpbmcuRXZlbnQoKQorCisgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLnJjdnIocG9ydD1zZWxmLnBvcnQsIGhhbmRsZXI9c2VsZi5oZGxyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHkpCisgICAgICAgICAgICBpZiBzZWxmLnBvcnQgPT0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0KKyAgICAgICAgICAgIHNlbGYucmVhZHkuc2V0KCkKKyAgICAgICAgICAgIGdsb2JhbCBfbGlzdGVuZXIKKyAgICAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKKyAgICAgICAgICAgIF9saXN0ZW5lciA9IHNlcnZlcgorICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQorICAgICAgICAgICAgc2VydmVyLnNlcnZlX3VudGlsX3N0b3BwZWQoKQorCisgICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCkKIAogZGVmIHN0b3BMaXN0ZW5pbmcoKToKICAgICAiIiIKZGlmZiAtLWdpdCBhL0xpYi9sb2dnaW5nL2hhbmRsZXJzLnB5IGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKaW5kZXggZTlkYWM0My4uM2E0ODYyOCAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKKysrIGIvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAyMDAxLTIwMDcgYnkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIENvcHlyaWdodCAyMDAxLTIwMTAgYnkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAjCiAjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwogIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCkBAIC0xOSwxMyArMTksMTUgQEAKIGJhc2VkIG9uIFBFUCAyODIgYW5kIGNvbW1lbnRzIHRoZXJldG8gaW4gY29tcC5sYW5nLnB5dGhvbiwgYW5kIGluZmx1ZW5jZWQgYnkKIEFwYWNoZSdzIGxvZzRqIHN5c3RlbS4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMDkgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nLmhhbmRsZXJzJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAogaW1wb3J0IGxvZ2dpbmcsIHNvY2tldCwgb3MsIHBpY2tsZSwgc3RydWN0LCB0aW1lLCByZQogZnJvbSBzdGF0IGltcG9ydCBTVF9ERVYsIFNUX0lOTywgU1RfTVRJTUUKK2ltcG9ydCBxdWV1ZQoraW1wb3J0IHRocmVhZGluZwogCiB0cnk6CiAgICAgaW1wb3J0IGNvZGVjcwpAQCAtNDEsNiArNDMsNyBAQAogREVGQVVMVF9IVFRQX0xPR0dJTkdfUE9SVCAgID0gOTAyMgogREVGQVVMVF9TT0FQX0xPR0dJTkdfUE9SVCAgID0gOTAyMwogU1lTTE9HX1VEUF9QT1JUICAgICAgICAgICAgID0gNTE0CitTWVNMT0dfVENQX1BPUlQgICAgICAgICAgICAgPSA1MTQKIAogX01JRE5JR0hUID0gMjQgKiA2MCAqIDYwICAjIG51bWJlciBvZiBzZWNvbmRzIGluIGEgZGF5CiAKQEAgLTEwMiw4ICsxMDUsMTMgQEAKIAogICAgICAgICBJZiBtYXhCeXRlcyBpcyB6ZXJvLCByb2xsb3ZlciBuZXZlciBvY2N1cnMuCiAgICAgICAgICIiIgorICAgICAgICAjIElmIHJvdGF0aW9uL3JvbGxvdmVyIGlzIHdhbnRlZCwgaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHVzZSBhbm90aGVyCisgICAgICAgICMgbW9kZS4gSWYgZm9yIGV4YW1wbGUgJ3cnIHdlcmUgc3BlY2lmaWVkLCB0aGVuIGlmIHRoZXJlIHdlcmUgbXVsdGlwbGUKKyAgICAgICAgIyBydW5zIG9mIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uLCB0aGUgbG9ncyBmcm9tIHByZXZpb3VzIHJ1bnMgd291bGQgYmUKKyAgICAgICAgIyBsb3N0IGlmIHRoZSAndycgaXMgcmVzcGVjdGVkLCBiZWNhdXNlIHRoZSBsb2cgZmlsZSB3b3VsZCBiZSB0cnVuY2F0ZWQKKyAgICAgICAgIyBvbiBlYWNoIHJ1bi4KICAgICAgICAgaWYgbWF4Qnl0ZXMgPiAwOgotICAgICAgICAgICAgbW9kZSA9ICdhJyAjIGRvZXNuJ3QgbWFrZSBzZW5zZSBvdGhlcndpc2UhCisgICAgICAgICAgICBtb2RlID0gJ2EnCiAgICAgICAgIEJhc2VSb3RhdGluZ0hhbmRsZXIuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsIG1vZGUsIGVuY29kaW5nLCBkZWxheSkKICAgICAgICAgc2VsZi5tYXhCeXRlcyA9IG1heEJ5dGVzCiAgICAgICAgIHNlbGYuYmFja3VwQ291bnQgPSBiYWNrdXBDb3VudApAQCAtMTIwLDcgKzEyOCw2IEBACiAgICAgICAgICAgICAgICAgc2ZuID0gIiVzLiVkIiAlIChzZWxmLmJhc2VGaWxlbmFtZSwgaSkKICAgICAgICAgICAgICAgICBkZm4gPSAiJXMuJWQiICUgKHNlbGYuYmFzZUZpbGVuYW1lLCBpICsgMSkKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZm4pOgotICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIiVzIC0+ICVzIiAlIChzZm4sIGRmbikKICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGZuKToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkZm4pCiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShzZm4sIGRmbikKQEAgLTEyOCw3ICsxMzUsNiBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZGZuKToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZGZuKQogICAgICAgICAgICAgb3MucmVuYW1lKHNlbGYuYmFzZUZpbGVuYW1lLCBkZm4pCi0gICAgICAgICAgICAjcHJpbnQgIiVzIC0+ICVzIiAlIChzZWxmLmJhc2VGaWxlbmFtZSwgZGZuKQogICAgICAgICBzZWxmLm1vZGUgPSAndycKICAgICAgICAgc2VsZi5zdHJlYW0gPSBzZWxmLl9vcGVuKCkKIApAQCAtMTU2LDcgKzE2Miw3IEBACiAgICAgSWYgYmFja3VwQ291bnQgaXMgPiAwLCB3aGVuIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXBDb3VudAogICAgIGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkLgogICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgd2hlbj0naCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIGVuY29kaW5nPU5vbmUsIGRlbGF5PTAsIHV0Yz1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSk6CiAgICAgICAgIEJhc2VSb3RhdGluZ0hhbmRsZXIuX19pbml0X18oc2VsZiwgZmlsZW5hbWUsICdhJywgZW5jb2RpbmcsIGRlbGF5KQogICAgICAgICBzZWxmLndoZW4gPSB3aGVuLnVwcGVyKCkKICAgICAgICAgc2VsZi5iYWNrdXBDb3VudCA9IGJhY2t1cENvdW50CkBAIC0yNzgsNyArMjg0LDYgQEAKICAgICAgICAgdCA9IGludCh0aW1lLnRpbWUoKSkKICAgICAgICAgaWYgdCA+PSBzZWxmLnJvbGxvdmVyQXQ6CiAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAjcHJpbnQgIk5vIG5lZWQgdG8gcm9sbG92ZXI6ICVkLCAlZCIgJSAodCwgc2VsZi5yb2xsb3ZlckF0KQogICAgICAgICByZXR1cm4gMAogCiAgICAgZGVmIGdldEZpbGVzVG9EZWxldGUoc2VsZik6CkBAIC0zMjYsMTQgKzMzMSw4IEBACiAgICAgICAgICAgICBvcy5yZW1vdmUoZGZuKQogICAgICAgICBvcy5yZW5hbWUoc2VsZi5iYXNlRmlsZW5hbWUsIGRmbikKICAgICAgICAgaWYgc2VsZi5iYWNrdXBDb3VudCA+IDA6Ci0gICAgICAgICAgICAjIGZpbmQgdGhlIG9sZGVzdCBsb2cgZmlsZSBhbmQgZGVsZXRlIGl0Ci0gICAgICAgICAgICAjcyA9IGdsb2IuZ2xvYihzZWxmLmJhc2VGaWxlbmFtZSArICIuMjAqIikKLSAgICAgICAgICAgICNpZiBsZW4ocykgPiBzZWxmLmJhY2t1cENvdW50OgotICAgICAgICAgICAgIyAgICBzLnNvcnQoKQotICAgICAgICAgICAgIyAgICBvcy5yZW1vdmUoc1swXSkKICAgICAgICAgICAgIGZvciBzIGluIHNlbGYuZ2V0RmlsZXNUb0RlbGV0ZSgpOgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzKQotICAgICAgICAjcHJpbnQgIiVzIC0+ICVzIiAlIChzZWxmLmJhc2VGaWxlbmFtZSwgZGZuKQogICAgICAgICBzZWxmLm1vZGUgPSAndycKICAgICAgICAgc2VsZi5zdHJlYW0gPSBzZWxmLl9vcGVuKCkKICAgICAgICAgY3VycmVudFRpbWUgPSBpbnQodGltZS50aW1lKCkpCkBAIC02MzQsNyArNjMzLDggQEAKICAgICBMT0dfTkVXUyAgICAgID0gNyAgICAgICAjICBuZXR3b3JrIG5ld3Mgc3Vic3lzdGVtCiAgICAgTE9HX1VVQ1AgICAgICA9IDggICAgICAgIyAgVVVDUCBzdWJzeXN0ZW0KICAgICBMT0dfQ1JPTiAgICAgID0gOSAgICAgICAjICBjbG9jayBkYWVtb24KLSAgICBMT0dfQVVUSFBSSVYgID0gMTAgICMgIHNlY3VyaXR5L2F1dGhvcml6YXRpb24gbWVzc2FnZXMgKHByaXZhdGUpCisgICAgTE9HX0FVVEhQUklWICA9IDEwICAgICAgIyAgc2VjdXJpdHkvYXV0aG9yaXphdGlvbiBtZXNzYWdlcyAocHJpdmF0ZSkKKyAgICBMT0dfRlRQICAgICAgID0gMTEgICAgICAjICBGVFAgZGFlbW9uCiAKICAgICAjICBvdGhlciBjb2RlcyB0aHJvdWdoIDE1IHJlc2VydmVkIGZvciBzeXN0ZW0gdXNlCiAgICAgTE9HX0xPQ0FMMCAgICA9IDE2ICAgICAgIyAgcmVzZXJ2ZWQgZm9yIGxvY2FsIHVzZQpAQCAtNjY2LDYgKzY2Niw3IEBACiAgICAgICAgICJhdXRocHJpdiI6IExPR19BVVRIUFJJViwKICAgICAgICAgImNyb24iOiAgICAgTE9HX0NST04sCiAgICAgICAgICJkYWVtb24iOiAgIExPR19EQUVNT04sCisgICAgICAgICJmdHAiOiAgICAgIExPR19GVFAsCiAgICAgICAgICJrZXJuIjogICAgIExPR19LRVJOLAogICAgICAgICAibHByIjogICAgICBMT0dfTFBSLAogICAgICAgICAibWFpbCI6ICAgICBMT0dfTUFJTCwKQEAgLTY5Niw3ICs2OTcsOCBAQAogICAgICAgICAiQ1JJVElDQUwiIDogImNyaXRpY2FsIgogICAgIH0KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPSgnbG9jYWxob3N0JywgU1lTTE9HX1VEUF9QT1JUKSwgZmFjaWxpdHk9TE9HX1VTRVIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzPSgnbG9jYWxob3N0JywgU1lTTE9HX1VEUF9QT1JUKSwKKyAgICAgICAgICAgICAgICAgZmFjaWxpdHk9TE9HX1VTRVIsIHNvY2t0eXBlPXNvY2tldC5TT0NLX0RHUkFNKToKICAgICAgICAgIiIiCiAgICAgICAgIEluaXRpYWxpemUgYSBoYW5kbGVyLgogCkBAIC03MDgsMTMgKzcxMCwxNiBAQAogCiAgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKICAgICAgICAgc2VsZi5mYWNpbGl0eSA9IGZhY2lsaXR5CisgICAgICAgIHNlbGYuc29ja3R5cGUgPSBzb2NrdHlwZQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoYWRkcmVzcywgc3RyKToKICAgICAgICAgICAgIHNlbGYudW5peHNvY2tldCA9IDEKICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RfdW5peHNvY2tldChhZGRyZXNzKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi51bml4c29ja2V0ID0gMAotICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKLQorICAgICAgICAgICAgc2VsZi5zb2NrZXQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrdHlwZSkKKyAgICAgICAgICAgIGlmIHNvY2t0eXBlID09IHNvY2tldC5TT0NLX1NUUkVBTToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgIHNlbGYuZm9ybWF0dGVyID0gTm9uZQogCiAgICAgZGVmIF9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZiwgYWRkcmVzcyk6CkBAIC03MjcsMTIgKzczMiw2IEBACiAgICAgICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKIAotICAgICMgY3VyaW91czogd2hlbiB0YWxraW5nIHRvIHRoZSB1bml4LWRvbWFpbiAnL2Rldi9sb2cnIHNvY2tldCwgYQotICAgICMgICB6ZXJvLXRlcm1pbmF0b3Igc2VlbXMgdG8gYmUgcmVxdWlyZWQuICB0aGlzIHN0cmluZyBpcyBwbGFjZWQKLSAgICAjICAgaW50byBhIGNsYXNzIHZhcmlhYmxlIHNvIHRoYXQgaXQgY2FuIGJlIG92ZXJyaWRkZW4gaWYKLSAgICAjICAgbmVjZXNzYXJ5LgotICAgIGxvZ19mb3JtYXRfc3RyaW5nID0gJzwlZD4lc1wwMDAnCi0KICAgICBkZWYgZW5jb2RlUHJpb3JpdHkoc2VsZiwgZmFjaWxpdHksIHByaW9yaXR5KToKICAgICAgICAgIiIiCiAgICAgICAgIEVuY29kZSB0aGUgZmFjaWxpdHkgYW5kIHByaW9yaXR5LiBZb3UgY2FuIHBhc3MgaW4gc3RyaW5ncyBvcgpAQCAtNzcxLDE4ICs3NzAsMTkgQEAKICAgICAgICAgVGhlIHJlY29yZCBpcyBmb3JtYXR0ZWQsIGFuZCB0aGVuIHNlbnQgdG8gdGhlIHN5c2xvZyBzZXJ2ZXIuIElmCiAgICAgICAgIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCBpdCBpcyBOT1Qgc2VudCB0byB0aGUgc2VydmVyLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnID0gc2VsZi5mb3JtYXQocmVjb3JkKQorICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpICsgJ1wwMDAnCiAgICAgICAgICIiIgogICAgICAgICBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCiAgICAgICAgIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgogICAgICAgICAiIiIKLSAgICAgICAgbXNnID0gc2VsZi5sb2dfZm9ybWF0X3N0cmluZyAlICgKLSAgICAgICAgICAgIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZykKKyAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXBQcmlvcml0eShyZWNvcmQubGV2ZWxuYW1lKSkKKyAgICAgICAgcHJpbyA9IHByaW8uZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICMgTWVzc2FnZSBpcyBhIHN0cmluZy4gQ29udmVydCB0byBieXRlcyBhcyByZXF1aXJlZCBieSBSRkMgNTQyNAogICAgICAgICBtc2cgPSBtc2cuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIGlmIGNvZGVjczoKICAgICAgICAgICAgIG1zZyA9IGNvZGVjcy5CT01fVVRGOCArIG1zZworICAgICAgICBtc2cgPSBwcmlvICsgbXNnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYudW5peHNvY2tldDoKICAgICAgICAgICAgICAgICB0cnk6CkBAIC03OTAsOCArNzkwLDEwIEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdF91bml4c29ja2V0KHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgZWxpZiBzZWxmLnNvY2t0eXBlID09IHNvY2tldC5TT0NLX0RHUkFNOgogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCiAgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgogICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZXhjZXB0OgpAQCAtODAxLDcgKzgwMyw4IEBACiAgICAgIiIiCiAgICAgQSBoYW5kbGVyIGNsYXNzIHdoaWNoIHNlbmRzIGFuIFNNVFAgZW1haWwgZm9yIGVhY2ggbG9nZ2luZyBldmVudC4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWFpbGhvc3QsIGZyb21hZGRyLCB0b2FkZHJzLCBzdWJqZWN0LCBjcmVkZW50aWFscz1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWFpbGhvc3QsIGZyb21hZGRyLCB0b2FkZHJzLCBzdWJqZWN0LAorICAgICAgICAgICAgICAgICBjcmVkZW50aWFscz1Ob25lLCBzZWN1cmU9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBoYW5kbGVyLgogCkBAIC04MDksNyArODEyLDEyIEBACiAgICAgICAgIGxpbmUgb2YgdGhlIGVtYWlsLiBUbyBzcGVjaWZ5IGEgbm9uLXN0YW5kYXJkIFNNVFAgcG9ydCwgdXNlIHRoZQogICAgICAgICAoaG9zdCwgcG9ydCkgdHVwbGUgZm9ybWF0IGZvciB0aGUgbWFpbGhvc3QgYXJndW1lbnQuIFRvIHNwZWNpZnkKICAgICAgICAgYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMsIHN1cHBseSBhICh1c2VybmFtZSwgcGFzc3dvcmQpIHR1cGxlCi0gICAgICAgIGZvciB0aGUgY3JlZGVudGlhbHMgYXJndW1lbnQuCisgICAgICAgIGZvciB0aGUgY3JlZGVudGlhbHMgYXJndW1lbnQuIFRvIHNwZWNpZnkgdGhlIHVzZSBvZiBhIHNlY3VyZQorICAgICAgICBwcm90b2NvbCAoVExTKSwgcGFzcyBpbiBhIHR1cGxlIGZvciB0aGUgc2VjdXJlIGFyZ3VtZW50LiBUaGlzIHdpbGwKKyAgICAgICAgb25seSBiZSB1c2VkIHdoZW4gYXV0aGVudGljYXRpb24gY3JlZGVudGlhbHMgYXJlIHN1cHBsaWVkLiBUaGUgdHVwbGUKKyAgICAgICAgd2lsbCBiZSBlaXRoZXIgYW4gZW1wdHkgdHVwbGUsIG9yIGEgc2luZ2xlLXZhbHVlIHR1cGxlIHdpdGggdGhlIG5hbWUKKyAgICAgICAgb2YgYSBrZXlmaWxlLCBvciBhIDItdmFsdWUgdHVwbGUgd2l0aCB0aGUgbmFtZXMgb2YgdGhlIGtleWZpbGUgYW5kCisgICAgICAgIGNlcnRpZmljYXRlIGZpbGUuIChUaGlzIHR1cGxlIGlzIHBhc3NlZCB0byB0aGUgYHN0YXJ0dGxzYCBtZXRob2QpLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFpbGhvc3QsIHR1cGxlKToKQEAgLTgyNSw2ICs4MzMsNyBAQAogICAgICAgICAgICAgdG9hZGRycyA9IFt0b2FkZHJzXQogICAgICAgICBzZWxmLnRvYWRkcnMgPSB0b2FkZHJzCiAgICAgICAgIHNlbGYuc3ViamVjdCA9IHN1YmplY3QKKyAgICAgICAgc2VsZi5zZWN1cmUgPSBzZWN1cmUKIAogICAgIGRlZiBnZXRTdWJqZWN0KHNlbGYsIHJlY29yZCk6CiAgICAgICAgICIiIgpAQCAtODM1LDI0ICs4NDQsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuc3ViamVjdAogCi0gICAgd2Vla2RheW5hbWUgPSBbJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JywgJ1N1biddCi0KLSAgICBtb250aG5hbWUgPSBbTm9uZSwKLSAgICAgICAgICAgICAgICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywKLSAgICAgICAgICAgICAgICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ10KLQotICAgIGRlZiBkYXRlX3RpbWUoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm4gdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBmb3JtYXR0ZWQgZm9yIGEgTUlNRSBoZWFkZXIuCi0gICAgICAgIE5lZWRlZCBmb3IgUHl0aG9uIDEuNS4yIChubyBlbWFpbCBwYWNrYWdlIGF2YWlsYWJsZSkKLSAgICAgICAgIiIiCi0gICAgICAgIHllYXIsIG1vbnRoLCBkYXksIGhoLCBtbSwgc3MsIHdkLCB5LCB6ID0gdGltZS5nbXRpbWUodGltZS50aW1lKCkpCi0gICAgICAgIHMgPSAiJXMsICUwMmQgJTNzICU0ZCAlMDJkOiUwMmQ6JTAyZCBHTVQiICUgKAotICAgICAgICAgICAgICAgIHNlbGYud2Vla2RheW5hbWVbd2RdLAotICAgICAgICAgICAgICAgIGRheSwgc2VsZi5tb250aG5hbWVbbW9udGhdLCB5ZWFyLAotICAgICAgICAgICAgICAgIGhoLCBtbSwgc3MpCi0gICAgICAgIHJldHVybiBzCi0KICAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKICAgICAgICAgRW1pdCBhIHJlY29yZC4KQEAgLTg2MSwxMCArODUyLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBzbXRwbGliCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgZm9ybWF0ZGF0ZQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUgPSBzZWxmLmRhdGVfdGltZQorICAgICAgICAgICAgZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgZm9ybWF0ZGF0ZQogICAgICAgICAgICAgcG9ydCA9IHNlbGYubWFpbHBvcnQKICAgICAgICAgICAgIGlmIG5vdCBwb3J0OgogICAgICAgICAgICAgICAgIHBvcnQgPSBzbXRwbGliLlNNVFBfUE9SVApAQCAtODc2LDYgKzg2NCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0U3ViamVjdChyZWNvcmQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUoKSwgbXNnKQogICAgICAgICAgICAgaWYgc2VsZi51c2VybmFtZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNlY3VyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc210cC5laGxvKCkKKyAgICAgICAgICAgICAgICAgICAgc210cC5zdGFydHRscygqc2VsZi5zZWN1cmUpCisgICAgICAgICAgICAgICAgICAgIHNtdHAuZWhsbygpCiAgICAgICAgICAgICAgICAgc210cC5sb2dpbihzZWxmLnVzZXJuYW1lLCBzZWxmLnBhc3N3b3JkKQogICAgICAgICAgICAgc210cC5zZW5kbWFpbChzZWxmLmZyb21hZGRyLCBzZWxmLnRvYWRkcnMsIG1zZykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCkBAIC05ODksNyArOTgxLDcgQEAKICAgICBBIGNsYXNzIHdoaWNoIHNlbmRzIHJlY29yZHMgdG8gYSBXZWIgc2VydmVyLCB1c2luZyBlaXRoZXIgR0VUIG9yCiAgICAgUE9TVCBzZW1hbnRpY3MuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHVybCwgbWV0aG9kPSJHRVQiKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXJsLCBtZXRob2Q9IkdFVCIsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBob3N0LCB0aGUgcmVxdWVzdCBVUkwsIGFuZCB0aGUgbWV0aG9kCiAgICAgICAgICgiR0VUIiBvciAiUE9TVCIpCkBAIC0xMDAxLDEyICs5OTMsMTQgQEAKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnVybCA9IHVybAogICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAorICAgICAgICBzZWxmLnNlY3VyZSA9IHNlY3VyZQorICAgICAgICBzZWxmLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMKIAogICAgIGRlZiBtYXBMb2dSZWNvcmQoc2VsZiwgcmVjb3JkKToKICAgICAgICAgIiIiCiAgICAgICAgIERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFwcGluZyB0aGUgbG9nIHJlY29yZCBpbnRvIGEgZGljdAogICAgICAgICB0aGF0IGlzIHNlbnQgYXMgdGhlIENHSSBkYXRhLiBPdmVyd3JpdGUgaW4geW91ciBjbGFzcy4KLSAgICAgICAgQ29udHJpYnV0ZWQgYnkgRnJhbnogIEdsYXNuZXIuCisgICAgICAgIENvbnRyaWJ1dGVkIGJ5IEZyYW56IEdsYXNuZXIuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gcmVjb3JkLl9fZGljdF9fCiAKQEAgLTEwMTksNyArMTAxMywxMCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgaHR0cC5jbGllbnQsIHVybGxpYi5wYXJzZQogICAgICAgICAgICAgaG9zdCA9IHNlbGYuaG9zdAotICAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFAoaG9zdCkKKyAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJlOgorICAgICAgICAgICAgICAgIGggPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oaG9zdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKGhvc3QpCiAgICAgICAgICAgICB1cmwgPSBzZWxmLnVybAogICAgICAgICAgICAgZGF0YSA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUoc2VsZi5tYXBMb2dSZWNvcmQocmVjb3JkKSkKICAgICAgICAgICAgIGlmIHNlbGYubWV0aG9kID09ICJHRVQiOgpAQCAtMTAzOSw4ICsxMDM2LDEzIEBACiAgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkNvbnRlbnQtdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCiAgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihkYXRhKSkpCisgICAgICAgICAgICBpZiBzZWxmLmNyZWRlbnRpYWxzOgorICAgICAgICAgICAgICAgIGltcG9ydCBiYXNlNjQKKyAgICAgICAgICAgICAgICBzID0gKCd1JXM6JXMnICUgc2VsZi5jcmVkZW50aWFscykuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgICAgICAgICAgcyA9ICdCYXNpYyAnICsgYmFzZTY0LmI2NGVuY29kZShzKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgaC5wdXRoZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBzKQogICAgICAgICAgICAgaC5lbmRoZWFkZXJzKGRhdGEgaWYgc2VsZi5tZXRob2QgPT0gIlBPU1QiIGVsc2UgTm9uZSkKLSAgICAgICAgICAgIGguZ2V0cmVwbHkoKSAgICAjY2FuJ3QgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0CisgICAgICAgICAgICBoLmdldHJlc3BvbnNlKCkgICAgI2Nhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdAogICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KToKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdDoKQEAgLTExMzMsNiArMTEzNSw4IEBACiAgICAgICAgIEZvciBhIE1lbW9yeUhhbmRsZXIsIGZsdXNoaW5nIG1lYW5zIGp1c3Qgc2VuZGluZyB0aGUgYnVmZmVyZWQKICAgICAgICAgcmVjb3JkcyB0byB0aGUgdGFyZ2V0LCBpZiB0aGVyZSBpcyBvbmUuIE92ZXJyaWRlIGlmIHlvdSB3YW50CiAgICAgICAgIGRpZmZlcmVudCBiZWhhdmlvdXIuCisKKyAgICAgICAgVGhlIHJlY29yZCBidWZmZXIgaXMgYWxzbyBjbGVhcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi50YXJnZXQ6CiAgICAgICAgICAgICBmb3IgcmVjb3JkIGluIHNlbGYuYnVmZmVyOgpAQCAtMTE0NiwzICsxMTUwLDE3NCBAQAogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgc2VsZi50YXJnZXQgPSBOb25lCiAgICAgICAgIEJ1ZmZlcmluZ0hhbmRsZXIuY2xvc2Uoc2VsZikKKworCitjbGFzcyBRdWV1ZUhhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAiIiIKKyAgICBUaGlzIGhhbmRsZXIgc2VuZHMgZXZlbnRzIHRvIGEgcXVldWUuIFR5cGljYWxseSwgaXQgd291bGQgYmUgdXNlZCB0b2dldGhlcgorICAgIHdpdGggYSBtdWx0aXByb2Nlc3NpbmcgUXVldWUgdG8gY2VudHJhbGlzZSBsb2dnaW5nIHRvIGZpbGUgaW4gb25lIHByb2Nlc3MKKyAgICAoaW4gYSBtdWx0aS1wcm9jZXNzIGFwcGxpY2F0aW9uKSwgc28gYXMgdG8gYXZvaWQgZmlsZSB3cml0ZSBjb250ZW50aW9uCisgICAgYmV0d2VlbiBwcm9jZXNzZXMuCisKKyAgICBUaGlzIGNvZGUgaXMgbmV3IGluIFB5dGhvbiAzLjIsIGJ1dCB0aGlzIGNsYXNzIGNhbiBiZSBjb3B5IHBhc3RlZCBpbnRvCisgICAgdXNlciBjb2RlIGZvciB1c2Ugd2l0aCBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSk6CisgICAgICAgICIiIgorICAgICAgICBJbml0aWFsaXNlIGFuIGluc3RhbmNlLCB1c2luZyB0aGUgcGFzc2VkIHF1ZXVlLgorICAgICAgICAiIiIKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQorCisgICAgZGVmIGVucXVldWUoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgIiIiCisgICAgICAgIEVucXVldWUgYSByZWNvcmQuCisKKyAgICAgICAgVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gdXNlcyBwdXRfbm93YWl0LiBZb3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUKKyAgICAgICAgdGhpcyBtZXRob2QgaWYgeW91IHdhbnQgdG8gdXNlIGJsb2NraW5nLCB0aW1lb3V0cyBvciBjdXN0b20gcXVldWUKKyAgICAgICAgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5xdWV1ZS5wdXRfbm93YWl0KHJlY29yZCkKKworICAgIGRlZiBwcmVwYXJlKHNlbGYsIHJlY29yZCk6CisgICAgICAgICIiIgorICAgICAgICBQcmVwYXJlcyBhIHJlY29yZCBmb3IgcXVldWluZy4gVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGlzIG1ldGhvZCBpcworICAgICAgICBlbnF1ZXVlZC4KKworICAgICAgICBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBmb3JtYXRzIHRoZSByZWNvcmQgdG8gbWVyZ2UgdGhlIG1lc3NhZ2UKKyAgICAgICAgYW5kIGFyZ3VtZW50cywgYW5kIHJlbW92ZXMgdW5waWNrbGVhYmxlIGl0ZW1zIGZyb20gdGhlIHJlY29yZAorICAgICAgICBpbi1wbGFjZS4KKworICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB5b3Ugd2FudCB0byBjb252ZXJ0CisgICAgICAgIHRoZSByZWNvcmQgdG8gYSBkaWN0IG9yIEpTT04gc3RyaW5nLCBvciBzZW5kIGEgbW9kaWZpZWQgY29weQorICAgICAgICBvZiB0aGUgcmVjb3JkIHdoaWxlIGxlYXZpbmcgdGhlIG9yaWdpbmFsIGludGFjdC4KKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIGZvcm1hdCBvcGVyYXRpb24gZ2V0cyB0cmFjZWJhY2sgdGV4dCBpbnRvIHJlY29yZC5leGNfdGV4dAorICAgICAgICAjIChpZiB0aGVyZSdzIGV4Y2VwdGlvbiBkYXRhKSwgYW5kIGFsc28gcHV0cyB0aGUgbWVzc2FnZSBpbnRvCisgICAgICAgICMgcmVjb3JkLm1lc3NhZ2UuIFdlIGNhbiB0aGVuIHVzZSB0aGlzIHRvIHJlcGxhY2UgdGhlIG9yaWdpbmFsCisgICAgICAgICMgbXNnICsgYXJncywgYXMgdGhlc2UgbWlnaHQgYmUgdW5waWNrbGVhYmxlLiBXZSBhbHNvIHphcCB0aGUKKyAgICAgICAgIyBleGNfaW5mbyBhdHRyaWJ1dGUsIGFzIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZCBhbmQsIGlmIG5vdCBOb25lLAorICAgICAgICAjIHdpbGwgdHlwaWNhbGx5IG5vdCBiZSBwaWNrbGVhYmxlLgorICAgICAgICBzZWxmLmZvcm1hdChyZWNvcmQpCisgICAgICAgIHJlY29yZC5tc2cgPSByZWNvcmQubWVzc2FnZQorICAgICAgICByZWNvcmQuYXJncyA9IE5vbmUKKyAgICAgICAgcmVjb3JkLmV4Y19pbmZvID0gTm9uZQorICAgICAgICByZXR1cm4gcmVjb3JkCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAiIiIKKyAgICAgICAgRW1pdCBhIHJlY29yZC4KKworICAgICAgICBXcml0ZXMgdGhlIExvZ1JlY29yZCB0byB0aGUgcXVldWUsIHByZXBhcmluZyBpdCBmb3IgcGlja2xpbmcgZmlyc3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmVucXVldWUoc2VsZi5wcmVwYXJlKHJlY29yZCkpCisgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCisKK2NsYXNzIFF1ZXVlTGlzdGVuZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYW4gaW50ZXJuYWwgdGhyZWFkZWQgbGlzdGVuZXIgd2hpY2ggd2F0Y2hlcyBmb3IKKyAgICBMb2dSZWNvcmRzIGJlaW5nIGFkZGVkIHRvIGEgcXVldWUsIHJlbW92ZXMgdGhlbSBhbmQgcGFzc2VzIHRoZW0gdG8gYQorICAgIGxpc3Qgb2YgaGFuZGxlcnMgZm9yIHByb2Nlc3NpbmcuCisgICAgIiIiCisgICAgX3NlbnRpbmVsID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlLCAqaGFuZGxlcnMpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5pdGlhbGlzZSBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVldWUgYW5kCisgICAgICAgIGhhbmRsZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5xdWV1ZSA9IHF1ZXVlCisgICAgICAgIHNlbGYuaGFuZGxlcnMgPSBoYW5kbGVycworICAgICAgICBzZWxmLl9zdG9wID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorCisgICAgZGVmIGRlcXVldWUoc2VsZiwgYmxvY2spOgorICAgICAgICAiIiIKKyAgICAgICAgRGVxdWV1ZSBhIHJlY29yZCBhbmQgcmV0dXJuIGl0LCBvcHRpb25hbGx5IGJsb2NraW5nLgorCisgICAgICAgIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIHVzZXMgZ2V0LiBZb3UgbWF5IHdhbnQgdG8gb3ZlcnJpZGUgdGhpcyBtZXRob2QKKyAgICAgICAgaWYgeW91IHdhbnQgdG8gdXNlIHRpbWVvdXRzIG9yIHdvcmsgd2l0aCBjdXN0b20gcXVldWUgaW1wbGVtZW50YXRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYucXVldWUuZ2V0KGJsb2NrKQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU3RhcnQgdGhlIGxpc3RlbmVyLgorCisgICAgICAgIFRoaXMgc3RhcnRzIHVwIGEgYmFja2dyb3VuZCB0aHJlYWQgdG8gbW9uaXRvciB0aGUgcXVldWUgZm9yCisgICAgICAgIExvZ1JlY29yZHMgdG8gcHJvY2Vzcy4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3RocmVhZCA9IHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9tb25pdG9yKQorICAgICAgICB0LnNldERhZW1vbihUcnVlKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgIGRlZiBwcmVwYXJlKHNlbGYgLCByZWNvcmQpOgorICAgICAgICAiIiIKKyAgICAgICAgUHJlcGFyZSBhIHJlY29yZCBmb3IgaGFuZGxpbmcuCisKKyAgICAgICAgVGhpcyBtZXRob2QganVzdCByZXR1cm5zIHRoZSBwYXNzZWQtaW4gcmVjb3JkLiBZb3UgbWF5IHdhbnQgdG8KKyAgICAgICAgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgeW91IG5lZWQgdG8gZG8gYW55IGN1c3RvbSBtYXJzaGFsbGluZyBvcgorICAgICAgICBtYW5pcHVsYXRpb24gb2YgdGhlIHJlY29yZCBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgaGFuZGxlcnMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gcmVjb3JkCisKKyAgICBkZWYgaGFuZGxlKHNlbGYsIHJlY29yZCk6CisgICAgICAgICIiIgorICAgICAgICBIYW5kbGUgYSByZWNvcmQuCisKKyAgICAgICAgVGhpcyBqdXN0IGxvb3BzIHRocm91Z2ggdGhlIGhhbmRsZXJzIG9mZmVyaW5nIHRoZW0gdGhlIHJlY29yZAorICAgICAgICB0byBoYW5kbGUuCisgICAgICAgICIiIgorICAgICAgICByZWNvcmQgPSBzZWxmLnByZXBhcmUocmVjb3JkKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBzZWxmLmhhbmRsZXJzOgorICAgICAgICAgICAgaGFuZGxlci5oYW5kbGUocmVjb3JkKQorCisgICAgZGVmIF9tb25pdG9yKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTW9uaXRvciB0aGUgcXVldWUgZm9yIHJlY29yZHMsIGFuZCBhc2sgdGhlIGhhbmRsZXIKKyAgICAgICAgdG8gZGVhbCB3aXRoIHRoZW0uCisKKyAgICAgICAgVGhpcyBtZXRob2QgcnVucyBvbiBhIHNlcGFyYXRlLCBpbnRlcm5hbCB0aHJlYWQuCisgICAgICAgIFRoZSB0aHJlYWQgd2lsbCB0ZXJtaW5hdGUgaWYgaXQgc2VlcyBhIHNlbnRpbmVsIG9iamVjdCBpbiB0aGUgcXVldWUuCisgICAgICAgICIiIgorICAgICAgICBxID0gc2VsZi5xdWV1ZQorICAgICAgICBoYXNfdGFza19kb25lID0gaGFzYXR0cihxLCAndGFza19kb25lJykKKyAgICAgICAgd2hpbGUgbm90IHNlbGYuX3N0b3AuaXNTZXQoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWNvcmQgPSBzZWxmLmRlcXVldWUoVHJ1ZSkKKyAgICAgICAgICAgICAgICBpZiByZWNvcmQgaXMgc2VsZi5fc2VudGluZWw6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGUocmVjb3JkKQorICAgICAgICAgICAgICAgIGlmIGhhc190YXNrX2RvbmU6CisgICAgICAgICAgICAgICAgICAgIHEudGFza19kb25lKCkKKyAgICAgICAgICAgIGV4Y2VwdCBxdWV1ZS5FbXB0eToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgVGhlcmUgbWlnaHQgc3RpbGwgYmUgcmVjb3JkcyBpbiB0aGUgcXVldWUuCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVjb3JkID0gc2VsZi5kZXF1ZXVlKEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIHJlY29yZCBpcyBzZWxmLl9zZW50aW5lbDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZShyZWNvcmQpCisgICAgICAgICAgICAgICAgaWYgaGFzX3Rhc2tfZG9uZToKKyAgICAgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorICAgICAgICAgICAgZXhjZXB0IHF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0b3AgdGhlIGxpc3RlbmVyLgorCisgICAgICAgIFRoaXMgYXNrcyB0aGUgdGhyZWFkIHRvIHRlcm1pbmF0ZSwgYW5kIHRoZW4gd2FpdHMgZm9yIGl0IHRvIGRvIHNvLgorICAgICAgICBOb3RlIHRoYXQgaWYgeW91IGRvbid0IGNhbGwgdGhpcyBiZWZvcmUgeW91ciBhcHBsaWNhdGlvbiBleGl0cywgdGhlcmUKKyAgICAgICAgbWF5IGJlIHNvbWUgcmVjb3JkcyBzdGlsbCBsZWZ0IG9uIHRoZSBxdWV1ZSwgd2hpY2ggd29uJ3QgYmUgcHJvY2Vzc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3RvcC5zZXQoKQorICAgICAgICBzZWxmLnF1ZXVlLnB1dF9ub3dhaXQoc2VsZi5fc2VudGluZWwpCisgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKCkKKyAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL21hY3BhdGgucHkgYi9MaWIvbWFjcGF0aC5weQppbmRleCAzYjNlNGZmLi4xNjE1ZDkxIDEwMDY0NAotLS0gYS9MaWIvbWFjcGF0aC5weQorKysgYi9MaWIvbWFjcGF0aC5weQpAQCAtMzIsNiArMzIsOSBAQAogIyBOb3JtYWxpemUgdGhlIGNhc2Ugb2YgYSBwYXRobmFtZS4gIER1bW15IGluIFBvc2l4LCBidXQgPHM+Lmxvd2VyKCkgaGVyZS4KIAogZGVmIG5vcm1jYXNlKHBhdGgpOgorICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhdGgsIChieXRlcywgc3RyKSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm9ybWNhc2UoKSBhcmd1bWVudCBtdXN0IGJlIHN0ciBvciBieXRlcywgIgorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAne30nIi5mb3JtYXQocGF0aC5fX2NsYXNzX18uX19uYW1lX18pKQogICAgIHJldHVybiBwYXRoLmxvd2VyKCkKIAogCkBAIC0xOTksNCArMjAyLDQgQEAKICAgICAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcGF0aAogCi1zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IEZhbHNlCitzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyA9IFRydWUKZGlmZiAtLWdpdCBhL0xpYi9tYWlsYm94LnB5IGIvTGliL21haWxib3gucHkKaW5kZXggZDljMjg5Yi4uYWNlMTcwOSAxMDA2NDQKLS0tIGEvTGliL21haWxib3gucHkKKysrIGIvTGliL21haWxib3gucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJSZWFkL3dyaXRlIHN1cHBvcnQgZm9yIE1haWxkaXIsIG1ib3gsIE1ILCBCYWJ5bCwgYW5kIE1NREYgbWFpbGJveGVzLiIiIgogCkBAIC0xNSw2ICsxNSw3IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgZXJybm8KIGltcG9ydCBjb3B5CitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBlbWFpbAogaW1wb3J0IGVtYWlsLm1lc3NhZ2UKIGltcG9ydCBlbWFpbC5nZW5lcmF0b3IKQEAgLTMxLDYgKzMyLDggQEAKICAgICAgICAgICAgICdNZXNzYWdlJywgJ01haWxkaXJNZXNzYWdlJywgJ21ib3hNZXNzYWdlJywgJ01ITWVzc2FnZScsCiAgICAgICAgICAgICAnQmFieWxNZXNzYWdlJywgJ01NREZNZXNzYWdlJ10KIAorbGluZXNlcCA9IG9zLmxpbmVzZXAuZW5jb2RlKCdhc2NpaScpCisKIGNsYXNzIE1haWxib3g6CiAgICAgIiIiQSBncm91cCBvZiBtZXNzYWdlcyBpbiBhIHBhcnRpY3VsYXIgcGxhY2UuIiIiCiAKQEAgLTgwLDcgKzgzLDE0IEBACiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ01ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzJykKIAogICAgIGRlZiBnZXRfc3RyaW5nKHNlbGYsIGtleSk6Ci0gICAgICAgICIiIlJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4KKworICAgICAgICBVc2VzIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSB0byBjcmVhdGUgYSA3Yml0IGNsZWFuIHN0cmluZworICAgICAgICByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZS4iIiIKKyAgICAgICAgcmV0dXJuIGVtYWlsLm1lc3NhZ2VfZnJvbV9ieXRlcyhzZWxmLmdldF9ieXRlcyhrZXkpKS5hc19zdHJpbmcoKQorCisgICAgZGVmIGdldF9ieXRlcyhzZWxmLCBrZXkpOgorICAgICAgICAiIiJSZXR1cm4gYSBieXRlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdNZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcycpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKQEAgLTE4NiwzMSArMTk2LDU1IEBACiAgICAgICAgICIiIkZsdXNoIGFuZCBjbG9zZSB0aGUgbWFpbGJveC4iIiIKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignTWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3MnKQogCisgICAgZGVmIF9zdHJpbmdfdG9fYnl0ZXMoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgICMgSWYgYSBtZXNzYWdlIGlzIG5vdCA3Yml0IGNsZWFuLCB3ZSByZWZ1c2UgdG8gaGFuZGxlIGl0IHNpbmNlIGl0CisgICAgICAgICMgbGlrZWx5IGNhbWUgZnJvbSByZWFkaW5nIGludmFsaWQgbWVzc2FnZXMgaW4gdGV4dCBtb2RlLCBhbmQgdGhhdCB3YXkKKyAgICAgICAgIyBsaWVzIG1vamliYWtlLgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlN0cmluZyBpbnB1dCBtdXN0IGJlIEFTQ0lJLW9ubHk7ICIKKyAgICAgICAgICAgICAgICAidXNlIGJ5dGVzIG9yIGEgTWVzc2FnZSBpbnN0ZWFkIikKKwogICAgIGRlZiBfZHVtcF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UsIHRhcmdldCwgbWFuZ2xlX2Zyb21fPUZhbHNlKToKLSAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhlIHRhcmdldCBmaWxlIGlzIG9wZW4gaW4gKnRleHQqIG1vZGUgd2l0aCB0aGUKLSAgICAgICAgIyBkZXNpcmVkIGVuY29kaW5nIGFuZCBuZXdsaW5lIHNldHRpbmcuCisgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoZSB0YXJnZXQgZmlsZSBpcyBvcGVuIGluIGJpbmFyeSBtb2RlLgogICAgICAgICAiIiJEdW1wIG1lc3NhZ2UgY29udGVudHMgdG8gdGFyZ2V0IGZpbGUuIiIiCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgZW1haWwubWVzc2FnZS5NZXNzYWdlKToKLSAgICAgICAgICAgIGJ1ZmZlciA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgIGdlbiA9IGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IoYnVmZmVyLCBtYW5nbGVfZnJvbV8sIDApCisgICAgICAgICAgICBidWZmZXIgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgICAgIGdlbiA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihidWZmZXIsIG1hbmdsZV9mcm9tXywgMCkKICAgICAgICAgICAgIGdlbi5mbGF0dGVuKG1lc3NhZ2UpCiAgICAgICAgICAgICBidWZmZXIuc2VlaygwKQogICAgICAgICAgICAgZGF0YSA9IGJ1ZmZlci5yZWFkKCkKLSAgICAgICAgICAgICMjZGF0YSA9IGRhdGEucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShiJ1xuJywgbGluZXNlcCkKICAgICAgICAgICAgIHRhcmdldC53cml0ZShkYXRhKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgc3RyKToKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIChzdHIsIGJ5dGVzLCBpby5TdHJpbmdJTykpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBpby5TdHJpbmdJTyk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIFN0cmluZ0lPIGlucHV0IGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgInVzZSBCeXRlc0lPIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDMpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9zdHJpbmdfdG9fYnl0ZXMobWVzc2FnZSkKICAgICAgICAgICAgIGlmIG1hbmdsZV9mcm9tXzoKLSAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKCdcbkZyb20gJywgJ1xuPkZyb20gJykKLSAgICAgICAgICAgICMjbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKQorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoYidcbkZyb20gJywgYidcbj5Gcm9tICcpCisgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKQogICAgICAgICAgICAgdGFyZ2V0LndyaXRlKG1lc3NhZ2UpCiAgICAgICAgIGVsaWYgaGFzYXR0cihtZXNzYWdlLCAncmVhZCcpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihtZXNzYWdlLCAnYnVmZmVyJyk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIHRleHQgbW9kZSBmaWxlcyBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICJ1c2UgYSBiaW5hcnkgbW9kZSBmaWxlIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDMpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuYnVmZmVyCiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGxpbmUgPSBtZXNzYWdlLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAjIFVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChiJ1xyXG4nKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXSArIGInXG4nCisgICAgICAgICAgICAgICAgZWxpZiBsaW5lLmVuZHN3aXRoKGInXHInKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXSArIGInXG4nCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgbWFuZ2xlX2Zyb21fIGFuZCBsaW5lLnN0YXJ0c3dpdGgoJ0Zyb20gJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSAnPkZyb20gJyArIGxpbmVbNTpdCi0gICAgICAgICAgICAgICAgIyNsaW5lID0gbGluZS5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApCisgICAgICAgICAgICAgICAgaWYgbWFuZ2xlX2Zyb21fIGFuZCBsaW5lLnN0YXJ0c3dpdGgoYidGcm9tICcpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gYic+RnJvbSAnICsgbGluZVs1Ol0KKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKQogICAgICAgICAgICAgICAgIHRhcmdldC53cml0ZShsaW5lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdJbnZhbGlkIG1lc3NhZ2UgdHlwZTogJXMnICUgdHlwZShtZXNzYWdlKSkKQEAgLTI0Myw4ICsyNzcsMTEgQEAKICAgICAgICAgdG1wX2ZpbGUgPSBzZWxmLl9jcmVhdGVfdG1wKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fZHVtcF9tZXNzYWdlKG1lc3NhZ2UsIHRtcF9maWxlKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgX3N5bmNfY2xvc2UodG1wX2ZpbGUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgdG1wX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRtcF9maWxlLm5hbWUpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBfc3luY19jbG9zZSh0bXBfZmlsZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNYWlsZGlyTWVzc2FnZSk6CiAgICAgICAgICAgICBzdWJkaXIgPSBtZXNzYWdlLmdldF9zdWJkaXIoKQogICAgICAgICAgICAgc3VmZml4ID0gc2VsZi5jb2xvbiArIG1lc3NhZ2UuZ2V0X2luZm8oKQpAQCAtMzE5LDcgKzM1Niw3IEBACiAgICAgZGVmIGdldF9tZXNzYWdlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIE1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgc3VicGF0aCA9IHNlbGYuX2xvb2t1cChrZXkpCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdWJwYXRoKSwgJ3InLCBuZXdsaW5lPScnKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX2ZhY3Rvcnk6CiAgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQpAQCAtMzM0LDE3ICszNzEsMTcgQEAKICAgICAgICAgbXNnLnNldF9kYXRlKG9zLnBhdGguZ2V0bXRpbWUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpKSkKICAgICAgICAgcmV0dXJuIG1zZwogCi0gICAgZGVmIGdldF9zdHJpbmcoc2VsZiwga2V5KToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCi0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyJywgbmV3bGluZT0nJykKKyAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSk6CisgICAgICAgICIiIlJldHVybiBhIGJ5dGVzIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzZWxmLl9sb29rdXAoa2V5KSksICdyYicpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBmLnJlYWQoKQorICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpLnJlcGxhY2UobGluZXNlcCwgYidcbicpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBnZXRfZmlsZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHNlbGYuX2xvb2t1cChrZXkpKSwgJ3InLCBuZXdsaW5lPScnKQorICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKQogICAgICAgICByZXR1cm4gX1Byb3h5RmlsZShmKQogCiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgpAQCAtNDY5LDEyICs1MDYsMjEgQEAKIAogICAgIGRlZiBfcmVmcmVzaChzZWxmKToKICAgICAgICAgIiIiVXBkYXRlIHRhYmxlIG9mIGNvbnRlbnRzIG1hcHBpbmcuIiIiCi0gICAgICAgIG5ld19tdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICduZXcnKSkKLSAgICAgICAgY3VyX210aW1lID0gb3MucGF0aC5nZXRtdGltZShvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ2N1cicpKQorICAgICAgICBpZiBzZWxmLl9sYXN0X3JlYWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3Igc3ViZGlyIGluICgnbmV3JywgJ2N1cicpOgorICAgICAgICAgICAgICAgIG10aW1lID0gb3MucGF0aC5nZXRtdGltZShvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3ViZGlyKSkKKyAgICAgICAgICAgICAgICBpZiBtdGltZSA+IHNlbGYuX2xhc3RfcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgKHNlbGYuX2xhc3RfcmVhZCBpcyBub3QgTm9uZSBhbmQKLSAgICAgICAgICAgIG5ld19tdGltZSA8PSBzZWxmLl9sYXN0X3JlYWQgYW5kIGN1cl9tdGltZSA8PSBzZWxmLl9sYXN0X3JlYWQpOgotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgV2UgcmVjb3JkIHRoZSBjdXJyZW50IHRpbWUgLSAxc2VjIHNvIHRoYXQsIGlmIF9yZWZyZXNoKCkgaXMgY2FsbGVkCisgICAgICAgICMgYWdhaW4gaW4gdGhlIHNhbWUgc2Vjb25kLCB3ZSB3aWxsIGFsd2F5cyByZS1yZWFkIHRoZSBtYWlsYm94CisgICAgICAgICMganVzdCBpbiBjYXNlIGl0J3MgYmVlbiBtb2RpZmllZC4gIChvcy5wYXRoLm10aW1lKCkgb25seSBoYXMKKyAgICAgICAgIyAxc2VjIHJlc29sdXRpb24uKSAgVGhpcyByZXN1bHRzIGluIGEgZmV3IHVubmVjZXNzYXJ5IHJlLXJlYWRzCisgICAgICAgICMgd2hlbiBfcmVmcmVzaCgpIGlzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSBzZWNvbmQsCisgICAgICAgICMgYnV0IG9uY2UgdGhlIGNsb2NrIHRpY2tzIG92ZXIsIHdlIHdpbGwgb25seSByZS1yZWFkIGFzIG5lZWRlZC4KKyAgICAgICAgbm93ID0gdGltZS50aW1lKCkgLSAxCiAKICAgICAgICAgc2VsZi5fdG9jID0ge30KICAgICAgICAgZGVmIHVwZGF0ZV9kaXIgKHN1YmRpcik6CkBAIC00ODksMTQgKzUzNSw3IEBACiAgICAgICAgIHVwZGF0ZV9kaXIoJ25ldycpCiAgICAgICAgIHVwZGF0ZV9kaXIoJ2N1cicpCiAKLSAgICAgICAgIyBXZSByZWNvcmQgdGhlIGN1cnJlbnQgdGltZSAtIDFzZWMgc28gdGhhdCwgaWYgX3JlZnJlc2goKSBpcyBjYWxsZWQKLSAgICAgICAgIyBhZ2FpbiBpbiB0aGUgc2FtZSBzZWNvbmQsIHdlIHdpbGwgYWx3YXlzIHJlLXJlYWQgdGhlIG1haWxib3gKLSAgICAgICAgIyBqdXN0IGluIGNhc2UgaXQncyBiZWVuIG1vZGlmaWVkLiAgKG9zLnBhdGgubXRpbWUoKSBvbmx5IGhhcwotICAgICAgICAjIDFzZWMgcmVzb2x1dGlvbi4pICBUaGlzIHJlc3VsdHMgaW4gYSBmZXcgdW5uZWNlc3NhcnkgcmUtcmVhZHMKLSAgICAgICAgIyB3aGVuIF9yZWZyZXNoKCkgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIHNlY29uZCwKLSAgICAgICAgIyBidXQgb25jZSB0aGUgY2xvY2sgdGlja3Mgb3Zlciwgd2Ugd2lsbCBvbmx5IHJlLXJlYWQgYXMgbmVlZGVkLgotICAgICAgICBub3cgPSBpbnQodGltZS50aW1lKCkgLSAxKQotICAgICAgICBzZWxmLl9sYXN0X3JlYWQgPSB0aW1lLnRpbWUoKSAtIDEKKyAgICAgICAgc2VsZi5fbGFzdF9yZWFkID0gbm93CiAKICAgICBkZWYgX2xvb2t1cChzZWxmLCBrZXkpOgogICAgICAgICAiIiJVc2UgVE9DIHRvIHJldHVybiBzdWJwYXRoIGZvciBnaXZlbiBrZXksIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCkBAIC01MzIsMTUgKzU3MSwxNSBAQAogICAgICAgICAiIiJJbml0aWFsaXplIGEgc2luZ2xlLWZpbGUgbWFpbGJveC4iIiIKICAgICAgICAgTWFpbGJveC5fX2luaXRfXyhzZWxmLCBwYXRoLCBmYWN0b3J5LCBjcmVhdGUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyKycsIG5ld2xpbmU9JycpCisgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIGlmIGNyZWF0ZToKLSAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3crJywgbmV3bGluZT0nJykKKyAgICAgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3diKycpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTm9TdWNoTWFpbGJveEVycm9yKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gZXJybm8uRUFDQ0VTOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyJywgbmV3bGluZT0nJykKKyAgICAgICAgICAgIGVsaWYgZS5lcnJubyBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CisgICAgICAgICAgICAgICAgZiA9IG9wZW4oc2VsZi5fcGF0aCwgJ3JiJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgc2VsZi5fZmlsZSA9IGYKQEAgLTY4OCw5ICs3MjcsMTQgQEAKICAgICBkZWYgX2FwcGVuZF9tZXNzYWdlKHNlbGYsIG1lc3NhZ2UpOgogICAgICAgICAiIiJBcHBlbmQgbWVzc2FnZSB0byBtYWlsYm94IGFuZCByZXR1cm4gKHN0YXJ0LCBzdG9wKSBvZmZzZXRzLiIiIgogICAgICAgICBzZWxmLl9maWxlLnNlZWsoMCwgMikKLSAgICAgICAgc2VsZi5fcHJlX21lc3NhZ2VfaG9vayhzZWxmLl9maWxlKQotICAgICAgICBvZmZzZXRzID0gc2VsZi5faW5zdGFsbF9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgIHNlbGYuX3Bvc3RfbWVzc2FnZV9ob29rKHNlbGYuX2ZpbGUpCisgICAgICAgIGJlZm9yZSA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3ByZV9tZXNzYWdlX2hvb2soc2VsZi5fZmlsZSkKKyAgICAgICAgICAgIG9mZnNldHMgPSBzZWxmLl9pbnN0YWxsX21lc3NhZ2UobWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuX3Bvc3RfbWVzc2FnZV9ob29rKHNlbGYuX2ZpbGUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5fZmlsZS50cnVuY2F0ZShiZWZvcmUpCisgICAgICAgICAgICByYWlzZQogICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKICAgICAgICAgc2VsZi5fZmlsZV9sZW5ndGggPSBzZWxmLl9maWxlLnRlbGwoKSAgIyBSZWNvcmQgY3VycmVudCBsZW5ndGggb2YgbWFpbGJveAogICAgICAgICByZXR1cm4gb2Zmc2V0cwpAQCAtNzA2LDIwICs3NTAsMjUgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICBzdGFydCwgc3RvcCA9IHNlbGYuX2xvb2t1cChrZXkpCiAgICAgICAgIHNlbGYuX2ZpbGUuc2VlayhzdGFydCkKLSAgICAgICAgZnJvbV9saW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpLnJlcGxhY2Uob3MubGluZXNlcCwgJycpCisgICAgICAgIGZyb21fbGluZSA9IHNlbGYuX2ZpbGUucmVhZGxpbmUoKS5yZXBsYWNlKGxpbmVzZXAsIGInJykKICAgICAgICAgc3RyaW5nID0gc2VsZi5fZmlsZS5yZWFkKHN0b3AgLSBzZWxmLl9maWxlLnRlbGwoKSkKLSAgICAgICAgbXNnID0gc2VsZi5fbWVzc2FnZV9mYWN0b3J5KHN0cmluZy5yZXBsYWNlKG9zLmxpbmVzZXAsICdcbicpKQotICAgICAgICBtc2cuc2V0X2Zyb20oZnJvbV9saW5lWzU6XSkKKyAgICAgICAgbXNnID0gc2VsZi5fbWVzc2FnZV9mYWN0b3J5KHN0cmluZy5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKSkKKyAgICAgICAgbXNnLnNldF9mcm9tKGZyb21fbGluZVs1Ol0uZGVjb2RlKCdhc2NpaScpKQogICAgICAgICByZXR1cm4gbXNnCiAKICAgICBkZWYgZ2V0X3N0cmluZyhzZWxmLCBrZXksIGZyb21fPUZhbHNlKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCisgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoCisgICAgICAgICAgICBzZWxmLmdldF9ieXRlcyhrZXkpKS5hc19zdHJpbmcodW5peGZyb209ZnJvbV8pCisKKyAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSwgZnJvbV89RmFsc2UpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgc3RhcnQsIHN0b3AgPSBzZWxmLl9sb29rdXAoa2V5KQogICAgICAgICBzZWxmLl9maWxlLnNlZWsoc3RhcnQpCiAgICAgICAgIGlmIG5vdCBmcm9tXzoKICAgICAgICAgICAgIHNlbGYuX2ZpbGUucmVhZGxpbmUoKQogICAgICAgICBzdHJpbmcgPSBzZWxmLl9maWxlLnJlYWQoc3RvcCAtIHNlbGYuX2ZpbGUudGVsbCgpKQotICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJykKKyAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSwgZnJvbV89RmFsc2UpOgogICAgICAgICAiIiJSZXR1cm4gYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKQEAgLTczMiwyMiArNzgxLDI3IEBACiAgICAgZGVmIF9pbnN0YWxsX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgICIiIkZvcm1hdCBhIG1lc3NhZ2UgYW5kIGJsaW5kbHkgd3JpdGUgdG8gc2VsZi5fZmlsZS4iIiIKICAgICAgICAgZnJvbV9saW5lID0gTm9uZQotICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIHN0cikgYW5kIG1lc3NhZ2Uuc3RhcnRzd2l0aCgnRnJvbSAnKToKLSAgICAgICAgICAgIG5ld2xpbmUgPSBtZXNzYWdlLmZpbmQoJ1xuJykKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3N0cmluZ190b19ieXRlcyhtZXNzYWdlKQorICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIGJ5dGVzKSBhbmQgbWVzc2FnZS5zdGFydHN3aXRoKGInRnJvbSAnKToKKyAgICAgICAgICAgIG5ld2xpbmUgPSBtZXNzYWdlLmZpbmQoYidcbicpCiAgICAgICAgICAgICBpZiBuZXdsaW5lICE9IC0xOgogICAgICAgICAgICAgICAgIGZyb21fbGluZSA9IG1lc3NhZ2VbOm5ld2xpbmVdCiAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbbmV3bGluZSArIDE6XQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmcm9tX2xpbmUgPSBtZXNzYWdlCi0gICAgICAgICAgICAgICAgbWVzc2FnZSA9ICcnCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGInJwogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgX21ib3hNTURGTWVzc2FnZSk6Ci0gICAgICAgICAgICBmcm9tX2xpbmUgPSAnRnJvbSAnICsgbWVzc2FnZS5nZXRfZnJvbSgpCisgICAgICAgICAgICBhdXRob3IgPSBtZXNzYWdlLmdldF9mcm9tKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICBmcm9tX2xpbmUgPSBiJ0Zyb20gJyArIGF1dGhvcgogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgZW1haWwubWVzc2FnZS5NZXNzYWdlKToKICAgICAgICAgICAgIGZyb21fbGluZSA9IG1lc3NhZ2UuZ2V0X3VuaXhmcm9tKCkgICMgTWF5IGJlIE5vbmUuCisgICAgICAgICAgICBpZiBmcm9tX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZnJvbV9saW5lID0gZnJvbV9saW5lLmVuY29kZSgnYXNjaWknKQogICAgICAgICBpZiBmcm9tX2xpbmUgaXMgTm9uZToKLSAgICAgICAgICAgIGZyb21fbGluZSA9ICdGcm9tIE1BSUxFUi1EQUVNT04gJXMnICUgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKCkpCisgICAgICAgICAgICBmcm9tX2xpbmUgPSBiJ0Zyb20gTUFJTEVSLURBRU1PTiAnICsgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKCkpLmVuY29kZSgpCiAgICAgICAgIHN0YXJ0ID0gc2VsZi5fZmlsZS50ZWxsKCkKLSAgICAgICAgc2VsZi5fZmlsZS53cml0ZShmcm9tX2xpbmUgKyBvcy5saW5lc2VwKQorICAgICAgICBzZWxmLl9maWxlLndyaXRlKGZyb21fbGluZSArIGxpbmVzZXApCiAgICAgICAgIHNlbGYuX2R1bXBfbWVzc2FnZShtZXNzYWdlLCBzZWxmLl9maWxlLCBzZWxmLl9tYW5nbGVfZnJvbV8pCiAgICAgICAgIHN0b3AgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICByZXR1cm4gKHN0YXJ0LCBzdG9wKQpAQCAtNzY2LDcgKzgyMCw3IEBACiAgICAgZGVmIF9wcmVfbWVzc2FnZV9ob29rKHNlbGYsIGYpOgogICAgICAgICAiIiJDYWxsZWQgYmVmb3JlIHdyaXRpbmcgZWFjaCBtZXNzYWdlIHRvIGZpbGUgZi4iIiIKICAgICAgICAgaWYgZi50ZWxsKCkgIT0gMDoKLSAgICAgICAgICAgIGYud3JpdGUob3MubGluZXNlcCkKKyAgICAgICAgICAgIGYud3JpdGUobGluZXNlcCkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdG9jKHNlbGYpOgogICAgICAgICAiIiJHZW5lcmF0ZSBrZXktdG8tKHN0YXJ0LCBzdG9wKSB0YWJsZSBvZiBjb250ZW50cy4iIiIKQEAgLTc3NSw5ICs4MjksOSBAQAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgbGluZV9wb3MgPSBzZWxmLl9maWxlLnRlbGwoKQogICAgICAgICAgICAgbGluZSA9IHNlbGYuX2ZpbGUucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdGcm9tICcpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGInRnJvbSAnKToKICAgICAgICAgICAgICAgICBpZiBsZW4oc3RvcHMpIDwgbGVuKHN0YXJ0cyk6Ci0gICAgICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcyAtIGxlbihvcy5saW5lc2VwKSkKKyAgICAgICAgICAgICAgICAgICAgc3RvcHMuYXBwZW5kKGxpbmVfcG9zIC0gbGVuKGxpbmVzZXApKQogICAgICAgICAgICAgICAgIHN0YXJ0cy5hcHBlbmQobGluZV9wb3MpCiAgICAgICAgICAgICBlbGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcykKQEAgLTc5NywxMSArODUxLDExIEBACiAKICAgICBkZWYgX3ByZV9tZXNzYWdlX2hvb2soc2VsZiwgZik6CiAgICAgICAgICIiIkNhbGxlZCBiZWZvcmUgd3JpdGluZyBlYWNoIG1lc3NhZ2UgdG8gZmlsZSBmLiIiIgotICAgICAgICBmLndyaXRlKCdcMDAxXDAwMVwwMDFcMDAxJyArIG9zLmxpbmVzZXApCisgICAgICAgIGYud3JpdGUoYidcMDAxXDAwMVwwMDFcMDAxJyArIGxpbmVzZXApCiAKICAgICBkZWYgX3Bvc3RfbWVzc2FnZV9ob29rKHNlbGYsIGYpOgogICAgICAgICAiIiJDYWxsZWQgYWZ0ZXIgd3JpdGluZyBlYWNoIG1lc3NhZ2UgdG8gZmlsZSBmLiIiIgotICAgICAgICBmLndyaXRlKG9zLmxpbmVzZXAgKyAnXDAwMVwwMDFcMDAxXDAwMScgKyBvcy5saW5lc2VwKQorICAgICAgICBmLndyaXRlKGxpbmVzZXAgKyBiJ1wwMDFcMDAxXDAwMVwwMDEnICsgbGluZXNlcCkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdG9jKHNlbGYpOgogICAgICAgICAiIiJHZW5lcmF0ZSBrZXktdG8tKHN0YXJ0LCBzdG9wKSB0YWJsZSBvZiBjb250ZW50cy4iIiIKQEAgLTgxMiwxNCArODY2LDE0IEBACiAgICAgICAgICAgICBsaW5lX3BvcyA9IG5leHRfcG9zCiAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCiAgICAgICAgICAgICBuZXh0X3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ1wwMDFcMDAxXDAwMVwwMDEnICsgb3MubGluZXNlcCk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoYidcMDAxXDAwMVwwMDFcMDAxJyArIGxpbmVzZXApOgogICAgICAgICAgICAgICAgIHN0YXJ0cy5hcHBlbmQobmV4dF9wb3MpCiAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgbGluZV9wb3MgPSBuZXh0X3BvcwogICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAgIG5leHRfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnXDAwMVwwMDFcMDAxXDAwMScgKyBvcy5saW5lc2VwOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHMuYXBwZW5kKGxpbmVfcG9zIC0gbGVuKG9zLmxpbmVzZXApKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09IGInXDAwMVwwMDFcMDAxXDAwMScgKyBsaW5lc2VwOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcHMuYXBwZW5kKGxpbmVfcG9zIC0gbGVuKGxpbmVzZXApKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZWxpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcykKQEAgLTg1NiwxOCArOTEwLDI5IEBACiAgICAgICAgICAgICBuZXdfa2V5ID0gbWF4KGtleXMpICsgMQogICAgICAgICBuZXdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIobmV3X2tleSkpCiAgICAgICAgIGYgPSBfY3JlYXRlX2NhcmVmdWxseShuZXdfcGF0aCkKKyAgICAgICAgY2xvc2VkID0gRmFsc2UKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX21lc3NhZ2UobWVzc2FnZSwgZikKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2R1bXBfbWVzc2FnZShtZXNzYWdlLCBmKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIFVubG9jayBhbmQgY2xvc2Ugc28gaXQgY2FuIGJlIGRlbGV0ZWQgb24gV2luZG93cworICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKKyAgICAgICAgICAgICAgICAgICAgX3N5bmNfY2xvc2UoZikKKyAgICAgICAgICAgICAgICAgICAgY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUobmV3X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNSE1lc3NhZ2UpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdW1wX3NlcXVlbmNlcyhtZXNzYWdlLCBuZXdfa2V5KQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgX3N5bmNfY2xvc2UoZikKKyAgICAgICAgICAgIGlmIG5vdCBjbG9zZWQ6CisgICAgICAgICAgICAgICAgX3N5bmNfY2xvc2UoZikKICAgICAgICAgcmV0dXJuIG5ld19rZXkKIAogICAgIGRlZiByZW1vdmUoc2VsZiwga2V5KToKQEAgLTg4MCwyMyArOTQ1LDE1IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgICAgICBfdW5sb2NrX2ZpbGUoZikKLSAgICAgICAgZmluYWxseToKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwga2V5LCBtZXNzYWdlKToKICAgICAgICAgIiIiUmVwbGFjZSB0aGUga2V5ZWQgbWVzc2FnZTsgcmFpc2UgS2V5RXJyb3IgaWYgaXQgZG9lc24ndCBleGlzdC4iIiIKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3IrJywgbmV3bGluZT0nJykKKyAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYisnKQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKQEAgLTkyMCw5ICs5NzcsOSBAQAogICAgICAgICAiIiJSZXR1cm4gYSBNZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncisnLCBuZXdsaW5lPScnKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYisnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncicsIG5ld2xpbmU9JycpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCkBAIC05NDMsMTMgKzEwMDAsMTMgQEAKICAgICAgICAgICAgICAgICBtc2cuYWRkX3NlcXVlbmNlKG5hbWUpCiAgICAgICAgIHJldHVybiBtc2cKIAotICAgIGRlZiBnZXRfc3RyaW5nKHNlbGYsIGtleSk6Ci0gICAgICAgICIiIlJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgorICAgIGRlZiBnZXRfYnl0ZXMoc2VsZiwga2V5KToKKyAgICAgICAgIiIiUmV0dXJuIGEgYnl0ZXMgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyKycsIG5ld2xpbmU9JycpCisgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiKycpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyJywgbmV3bGluZT0nJykKKyAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKQEAgLTk1OSw3ICsxMDE2LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICBfbG9ja19maWxlKGYpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpLnJlcGxhY2UobGluZXNlcCwgYidcbicpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCkBAIC05NjksNyArMTAyNiw3IEBACiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncicsIG5ld2xpbmU9JycpCisgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKQEAgLTEwNDcsNyArMTEwNCw3IEBACiAgICAgZGVmIGdldF9zZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIG5hbWUtdG8ta2V5LWxpc3QgZGljdGlvbmFyeSB0byBkZWZpbmUgZWFjaCBzZXF1ZW5jZS4iIiIKICAgICAgICAgcmVzdWx0cyA9IHt9Ci0gICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnLm1oX3NlcXVlbmNlcycpLCAncicsIG5ld2xpbmU9JycpCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnLm1oX3NlcXVlbmNlcycpLCAncicpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFsbF9rZXlzID0gc2V0KHNlbGYua2V5cygpKQogICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKQEAgLTEwNzMsMTMgKzExMzAsMTMgQEAKIAogICAgIGRlZiBzZXRfc2VxdWVuY2VzKHNlbGYsIHNlcXVlbmNlcyk6CiAgICAgICAgICIiIlNldCBzZXF1ZW5jZXMgdXNpbmcgdGhlIGdpdmVuIG5hbWUtdG8ta2V5LWxpc3QgZGljdGlvbmFyeS4iIiIKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsICcubWhfc2VxdWVuY2VzJyksICdyKycsIG5ld2xpbmU9JycpCisgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAnLm1oX3NlcXVlbmNlcycpLCAncisnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5jbG9zZShvcy5vcGVuKGYubmFtZSwgb3MuT19XUk9OTFkgfCBvcy5PX1RSVU5DKSkKICAgICAgICAgICAgIGZvciBuYW1lLCBrZXlzIGluIHNlcXVlbmNlcy5pdGVtcygpOgogICAgICAgICAgICAgICAgIGlmIGxlbihrZXlzKSA9PSAwOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGYud3JpdGUoJyVzOicgJSBuYW1lKQorICAgICAgICAgICAgICAgIGYud3JpdGUobmFtZSArICc6JykKICAgICAgICAgICAgICAgICBwcmV2ID0gTm9uZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpbmcgPSBGYWxzZQogICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKHNldChrZXlzKSk6CkBAIC0xMTc0LDUwICsxMjMxLDU1IEBACiAgICAgICAgICIiIlJldHVybiBhIE1lc3NhZ2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKICAgICAgICAgc3RhcnQsIHN0b3AgPSBzZWxmLl9sb29rdXAoa2V5KQogICAgICAgICBzZWxmLl9maWxlLnNlZWsoc3RhcnQpCi0gICAgICAgIHNlbGYuX2ZpbGUucmVhZGxpbmUoKSAgICMgU2tpcCAnMSwnIGxpbmUgc3BlY2lmeWluZyBsYWJlbHMuCi0gICAgICAgIG9yaWdpbmFsX2hlYWRlcnMgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuX2ZpbGUucmVhZGxpbmUoKSAgICMgU2tpcCBiJzEsJyBsaW5lIHNwZWNpZnlpbmcgbGFiZWxzLgorICAgICAgICBvcmlnaW5hbF9oZWFkZXJzID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBsaW5lID09ICcqKiogRU9PSCAqKionICsgb3MubGluZXNlcCBvciBub3QgbGluZToKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gYicqKiogRU9PSCAqKionICsgbGluZXNlcCBvciBub3QgbGluZToKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgb3JpZ2luYWxfaGVhZGVycy53cml0ZShsaW5lLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJykpCi0gICAgICAgIHZpc2libGVfaGVhZGVycyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIG9yaWdpbmFsX2hlYWRlcnMud3JpdGUobGluZS5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKSkKKyAgICAgICAgdmlzaWJsZV9oZWFkZXJzID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBsaW5lID09IG9zLmxpbmVzZXAgb3Igbm90IGxpbmU6CisgICAgICAgICAgICBpZiBsaW5lID09IGxpbmVzZXAgb3Igbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHZpc2libGVfaGVhZGVycy53cml0ZShsaW5lLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJykpCi0gICAgICAgIGJvZHkgPSBzZWxmLl9maWxlLnJlYWQoc3RvcCAtIHNlbGYuX2ZpbGUudGVsbCgpKS5yZXBsYWNlKG9zLmxpbmVzZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicpCisgICAgICAgICAgICB2aXNpYmxlX2hlYWRlcnMud3JpdGUobGluZS5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKSkKKyAgICAgICAgIyBSZWFkIHVwIHRvIHRoZSBzdG9wLCBvciB0byB0aGUgZW5kCisgICAgICAgIG4gPSBzdG9wIC0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgYXNzZXJ0IG4gPj0gMAorICAgICAgICBib2R5ID0gc2VsZi5fZmlsZS5yZWFkKG4pCisgICAgICAgIGJvZHkgPSBib2R5LnJlcGxhY2UobGluZXNlcCwgYidcbicpCiAgICAgICAgIG1zZyA9IEJhYnlsTWVzc2FnZShvcmlnaW5hbF9oZWFkZXJzLmdldHZhbHVlKCkgKyBib2R5KQogICAgICAgICBtc2cuc2V0X3Zpc2libGUodmlzaWJsZV9oZWFkZXJzLmdldHZhbHVlKCkpCiAgICAgICAgIGlmIGtleSBpbiBzZWxmLl9sYWJlbHM6CiAgICAgICAgICAgICBtc2cuc2V0X2xhYmVscyhzZWxmLl9sYWJlbHNba2V5XSkKICAgICAgICAgcmV0dXJuIG1zZwogCi0gICAgZGVmIGdldF9zdHJpbmcoc2VsZiwga2V5KToKKyAgICBkZWYgZ2V0X2J5dGVzKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICBzdGFydCwgc3RvcCA9IHNlbGYuX2xvb2t1cChrZXkpCiAgICAgICAgIHNlbGYuX2ZpbGUuc2VlayhzdGFydCkKLSAgICAgICAgc2VsZi5fZmlsZS5yZWFkbGluZSgpICAgIyBTa2lwICcxLCcgbGluZSBzcGVjaWZ5aW5nIGxhYmVscy4KLSAgICAgICAgb3JpZ2luYWxfaGVhZGVycyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgc2VsZi5fZmlsZS5yZWFkbGluZSgpICAgIyBTa2lwIGInMSwnIGxpbmUgc3BlY2lmeWluZyBsYWJlbHMuCisgICAgICAgIG9yaWdpbmFsX2hlYWRlcnMgPSBpby5CeXRlc0lPKCkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIGxpbmUgPT0gJyoqKiBFT09IICoqKicgKyBvcy5saW5lc2VwIG9yIG5vdCBsaW5lOgorICAgICAgICAgICAgaWYgbGluZSA9PSBiJyoqKiBFT09IICoqKicgKyBsaW5lc2VwIG9yIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBvcmlnaW5hbF9oZWFkZXJzLndyaXRlKGxpbmUucmVwbGFjZShvcy5saW5lc2VwLCAnXG4nKSkKKyAgICAgICAgICAgIG9yaWdpbmFsX2hlYWRlcnMud3JpdGUobGluZS5yZXBsYWNlKGxpbmVzZXAsIGInXG4nKSkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9maWxlLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIGxpbmUgPT0gb3MubGluZXNlcCBvciBub3QgbGluZToKKyAgICAgICAgICAgIGlmIGxpbmUgPT0gbGluZXNlcCBvciBub3QgbGluZToKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICByZXR1cm4gb3JpZ2luYWxfaGVhZGVycy5nZXR2YWx1ZSgpICsgXAotICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5yZWFkKHN0b3AgLSBzZWxmLl9maWxlLnRlbGwoKSkucmVwbGFjZShvcy5saW5lc2VwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nKQorICAgICAgICBoZWFkZXJzID0gb3JpZ2luYWxfaGVhZGVycy5nZXR2YWx1ZSgpCisgICAgICAgIG4gPSBzdG9wIC0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgYXNzZXJ0IG4gPj0gMAorICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKG4pCisgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UobGluZXNlcCwgYidcbicpCisgICAgICAgIHJldHVybiBoZWFkZXJzICsgZGF0YQogCiAgICAgZGVmIGdldF9maWxlKHNlbGYsIGtleSk6CiAgICAgICAgICIiIlJldHVybiBhIGZpbGUtbGlrZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICByZXR1cm4gaW8uU3RyaW5nSU8oc2VsZi5nZXRfc3RyaW5nKGtleSkucmVwbGFjZSgnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8oc2VsZi5nZXRfYnl0ZXMoa2V5KS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKIAogICAgIGRlZiBnZXRfbGFiZWxzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHVzZXItZGVmaW5lZCBsYWJlbHMgaW4gdGhlIG1haWxib3guIiIiCkBAIC0xMjM4LDE5ICsxMzAwLDE5IEBACiAgICAgICAgICAgICBsaW5lX3BvcyA9IG5leHRfcG9zCiAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZmlsZS5yZWFkbGluZSgpCiAgICAgICAgICAgICBuZXh0X3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCi0gICAgICAgICAgICBpZiBsaW5lID09ICdcMDM3XDAxNCcgKyBvcy5saW5lc2VwOgorICAgICAgICAgICAgaWYgbGluZSA9PSBiJ1wwMzdcMDE0JyArIGxpbmVzZXA6CiAgICAgICAgICAgICAgICAgaWYgbGVuKHN0b3BzKSA8IGxlbihzdGFydHMpOgotICAgICAgICAgICAgICAgICAgICBzdG9wcy5hcHBlbmQobGluZV9wb3MgLSBsZW4ob3MubGluZXNlcCkpCisgICAgICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcyAtIGxlbihsaW5lc2VwKSkKICAgICAgICAgICAgICAgICBzdGFydHMuYXBwZW5kKG5leHRfcG9zKQogICAgICAgICAgICAgICAgIGxhYmVscyA9IFtsYWJlbC5zdHJpcCgpIGZvciBsYWJlbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2ZpbGUucmVhZGxpbmUoKVsxOl0uc3BsaXQoJywnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHNlbGYuX2ZpbGUucmVhZGxpbmUoKVsxOl0uc3BsaXQoYicsJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsYWJlbC5zdHJpcCgpXQogICAgICAgICAgICAgICAgIGxhYmVsX2xpc3RzLmFwcGVuZChsYWJlbHMpCi0gICAgICAgICAgICBlbGlmIGxpbmUgPT0gJ1wwMzcnIG9yIGxpbmUgPT0gJ1wwMzcnICsgb3MubGluZXNlcDoKKyAgICAgICAgICAgIGVsaWYgbGluZSA9PSBiJ1wwMzcnIG9yIGxpbmUgPT0gYidcMDM3JyArIGxpbmVzZXA6CiAgICAgICAgICAgICAgICAgaWYgbGVuKHN0b3BzKSA8IGxlbihzdGFydHMpOgotICAgICAgICAgICAgICAgICAgICBzdG9wcy5hcHBlbmQobGluZV9wb3MgLSBsZW4ob3MubGluZXNlcCkpCisgICAgICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcyAtIGxlbihsaW5lc2VwKSkKICAgICAgICAgICAgIGVsaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgc3RvcHMuYXBwZW5kKGxpbmVfcG9zIC0gbGVuKG9zLmxpbmVzZXApKQorICAgICAgICAgICAgICAgIHN0b3BzLmFwcGVuZChsaW5lX3BvcyAtIGxlbihsaW5lc2VwKSkKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBzZWxmLl90b2MgPSBkaWN0KGVudW1lcmF0ZSh6aXAoc3RhcnRzLCBzdG9wcykpKQogICAgICAgICBzZWxmLl9sYWJlbHMgPSBkaWN0KGVudW1lcmF0ZShsYWJlbF9saXN0cykpCkBAIC0xMjYwLDE3ICsxMzIyLDIxIEBACiAKICAgICBkZWYgX3ByZV9tYWlsYm94X2hvb2soc2VsZiwgZik6CiAgICAgICAgICIiIkNhbGxlZCBiZWZvcmUgd3JpdGluZyB0aGUgbWFpbGJveCB0byBmaWxlIGYuIiIiCi0gICAgICAgIGYud3JpdGUoJ0JBQllMIE9QVElPTlM6JXNWZXJzaW9uOiA1JXNMYWJlbHM6JXMlc1wwMzcnICUKLSAgICAgICAgICAgICAgICAob3MubGluZXNlcCwgb3MubGluZXNlcCwgJywnLmpvaW4oc2VsZi5nZXRfbGFiZWxzKCkpLAotICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgYmFieWwgPSBiJ0JBQllMIE9QVElPTlM6JyArIGxpbmVzZXAKKyAgICAgICAgYmFieWwgKz0gYidWZXJzaW9uOiA1JyArIGxpbmVzZXAKKyAgICAgICAgbGFiZWxzID0gc2VsZi5nZXRfbGFiZWxzKCkKKyAgICAgICAgbGFiZWxzID0gKGxhYmVsLmVuY29kZSgpIGZvciBsYWJlbCBpbiBsYWJlbHMpCisgICAgICAgIGJhYnlsICs9IGInTGFiZWxzOicgKyBiJywnLmpvaW4obGFiZWxzKSArIGxpbmVzZXAKKyAgICAgICAgYmFieWwgKz0gYidcMDM3JworICAgICAgICBmLndyaXRlKGJhYnlsKQogCiAgICAgZGVmIF9wcmVfbWVzc2FnZV9ob29rKHNlbGYsIGYpOgogICAgICAgICAiIiJDYWxsZWQgYmVmb3JlIHdyaXRpbmcgZWFjaCBtZXNzYWdlIHRvIGZpbGUgZi4iIiIKLSAgICAgICAgZi53cml0ZSgnXDAxNCcgKyBvcy5saW5lc2VwKQorICAgICAgICBmLndyaXRlKGInXDAxNCcgKyBsaW5lc2VwKQogCiAgICAgZGVmIF9wb3N0X21lc3NhZ2VfaG9vayhzZWxmLCBmKToKICAgICAgICAgIiIiQ2FsbGVkIGFmdGVyIHdyaXRpbmcgZWFjaCBtZXNzYWdlIHRvIGZpbGUgZi4iIiIKLSAgICAgICAgZi53cml0ZShvcy5saW5lc2VwICsgJ1wwMzcnKQorICAgICAgICBmLndyaXRlKGxpbmVzZXAgKyBiJ1wwMzcnKQogCiAgICAgZGVmIF9pbnN0YWxsX21lc3NhZ2Uoc2VsZiwgbWVzc2FnZSk6CiAgICAgICAgICIiIldyaXRlIG1lc3NhZ2UgY29udGVudHMgYW5kIHJldHVybiAoc3RhcnQsIHN0b3ApLiIiIgpAQCAtMTI4Myw2OCArMTM0OSw4MCBAQAogICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX2xhYmVscy5hcHBlbmQobGFiZWwpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKLSAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJzEnKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShiJzEnKQogICAgICAgICAgICAgZm9yIGxhYmVsIGluIHNwZWNpYWxfbGFiZWxzOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJywgJyArIGxhYmVsKQotICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnLCwnKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoYicsICcgKyBsYWJlbC5lbmNvZGUoKSkKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoYicsLCcpCiAgICAgICAgICAgICBmb3IgbGFiZWwgaW4gbGFiZWxzOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyAnICsgbGFiZWwgKyAnLCcpCi0gICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKG9zLmxpbmVzZXApCisgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShiJyAnICsgbGFiZWwuZW5jb2RlKCkgKyBiJywnKQorICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShsaW5lc2VwKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnMSwsJyArIG9zLmxpbmVzZXApCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGInMSwsJyArIGxpbmVzZXApCiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgZW1haWwubWVzc2FnZS5NZXNzYWdlKToKLSAgICAgICAgICAgIG9yaWdfYnVmZmVyID0gaW8uU3RyaW5nSU8oKQotICAgICAgICAgICAgb3JpZ19nZW5lcmF0b3IgPSBlbWFpbC5nZW5lcmF0b3IuR2VuZXJhdG9yKG9yaWdfYnVmZmVyLCBGYWxzZSwgMCkKKyAgICAgICAgICAgIG9yaWdfYnVmZmVyID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICBvcmlnX2dlbmVyYXRvciA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihvcmlnX2J1ZmZlciwgRmFsc2UsIDApCiAgICAgICAgICAgICBvcmlnX2dlbmVyYXRvci5mbGF0dGVuKG1lc3NhZ2UpCiAgICAgICAgICAgICBvcmlnX2J1ZmZlci5zZWVrKDApCiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGxpbmUgPSBvcmlnX2J1ZmZlci5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShsaW5lLnJlcGxhY2UoJ1xuJywgb3MubGluZXNlcCkpCi0gICAgICAgICAgICAgICAgaWYgbGluZSA9PSAnXG4nIG9yIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobGluZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09IGInXG4nIG9yIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnKioqIEVPT0ggKioqJyArIG9zLmxpbmVzZXApCisgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGInKioqIEVPT0ggKioqJyArIGxpbmVzZXApCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIEJhYnlsTWVzc2FnZSk6Ci0gICAgICAgICAgICAgICAgdmlzX2J1ZmZlciA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgICAgICAgICB2aXNfZ2VuZXJhdG9yID0gZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvcih2aXNfYnVmZmVyLCBGYWxzZSwgMCkKKyAgICAgICAgICAgICAgICB2aXNfYnVmZmVyID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgdmlzX2dlbmVyYXRvciA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcih2aXNfYnVmZmVyLCBGYWxzZSwgMCkKICAgICAgICAgICAgICAgICB2aXNfZ2VuZXJhdG9yLmZsYXR0ZW4obWVzc2FnZS5nZXRfdmlzaWJsZSgpKQogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSB2aXNfYnVmZmVyLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShsaW5lLnJlcGxhY2UoJ1xuJywgb3MubGluZXNlcCkpCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ1xuJyBvciBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShsaW5lLnJlcGxhY2UoYidcbicsIGxpbmVzZXApKQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09IGInXG4nIG9yIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgb3JpZ19idWZmZXIuc2VlaygwKQogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBvcmlnX2J1ZmZlci5yZWFkbGluZSgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobGluZS5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApKQotICAgICAgICAgICAgICAgICAgICBpZiBsaW5lID09ICdcbicgb3Igbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobGluZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZSA9PSBiJ1xuJyBvciBub3QgbGluZToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG9yaWdfYnVmZmVyLnJlYWQoNDA5NikgIyBCdWZmZXIgc2l6ZSBpcyBhcmJpdHJhcnkuCiAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGJ1ZmZlci5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobWVzc2FnZSwgc3RyKToKLSAgICAgICAgICAgIGJvZHlfc3RhcnQgPSBtZXNzYWdlLmZpbmQoJ1xuXG4nKSArIDIKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGJ1ZmZlci5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIChieXRlcywgc3RyLCBpby5TdHJpbmdJTykpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBpby5TdHJpbmdJTyk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIFN0cmluZ0lPIGlucHV0IGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICAgICAgICAgInVzZSBCeXRlc0lPIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDMpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuZ2V0dmFsdWUoKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl9zdHJpbmdfdG9fYnl0ZXMobWVzc2FnZSkKKyAgICAgICAgICAgIGJvZHlfc3RhcnQgPSBtZXNzYWdlLmZpbmQoYidcblxuJykgKyAyCiAgICAgICAgICAgICBpZiBib2R5X3N0YXJ0IC0gMiAhPSAtMToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKG1lc3NhZ2VbOmJvZHlfc3RhcnRdLnJlcGxhY2UoJ1xuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubGluZXNlcCkpCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnKioqIEVPT0ggKioqJyArIG9zLmxpbmVzZXApCi0gICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShtZXNzYWdlWzpib2R5X3N0YXJ0XS5yZXBsYWNlKCdcbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmxpbmVzZXApKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobWVzc2FnZVtib2R5X3N0YXJ0Ol0ucmVwbGFjZSgnXG4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKG1lc3NhZ2VbOmJvZHlfc3RhcnRdLnJlcGxhY2UoYidcbicsIGxpbmVzZXApKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoYicqKiogRU9PSCAqKionICsgbGluZXNlcCkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKG1lc3NhZ2VbOmJvZHlfc3RhcnRdLnJlcGxhY2UoYidcbicsIGxpbmVzZXApKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobWVzc2FnZVtib2R5X3N0YXJ0Ol0ucmVwbGFjZShiJ1xuJywgbGluZXNlcCkpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoJyoqKiBFT09IICoqKicgKyBvcy5saW5lc2VwICsgb3MubGluZXNlcCkKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKG1lc3NhZ2UucmVwbGFjZSgnXG4nLCBvcy5saW5lc2VwKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGInKioqIEVPT0ggKioqJyArIGxpbmVzZXAgKyBsaW5lc2VwKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobWVzc2FnZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKICAgICAgICAgZWxpZiBoYXNhdHRyKG1lc3NhZ2UsICdyZWFkbGluZScpOgorICAgICAgICAgICAgaWYgaGFzYXR0cihtZXNzYWdlLCAnYnVmZmVyJyk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVXNlIG9mIHRleHQgbW9kZSBmaWxlcyBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAgICAgICAgICJ1c2UgYSBiaW5hcnkgbW9kZSBmaWxlIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDMpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UuYnVmZmVyCiAgICAgICAgICAgICBvcmlnaW5hbF9wb3MgPSBtZXNzYWdlLnRlbGwoKQogICAgICAgICAgICAgZmlyc3RfcGFzcyA9IFRydWUKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgbGluZSA9IG1lc3NhZ2UucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobGluZS5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApKQotICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gJ1xuJyBvciBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZSgnKioqIEVPT0ggKioqJyArIG9zLmxpbmVzZXApCisgICAgICAgICAgICAgICAgIyBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0LgorICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcclxuJyk6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0gKyBiJ1xuJworICAgICAgICAgICAgICAgIGVsaWYgbGluZS5lbmRzd2l0aChiJ1xyJyk6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0gKyBiJ1xuJworICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUobGluZS5yZXBsYWNlKGInXG4nLCBsaW5lc2VwKSkKKyAgICAgICAgICAgICAgICBpZiBsaW5lID09IGInXG4nIG9yIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGInKioqIEVPT0ggKioqJyArIGxpbmVzZXApCiAgICAgICAgICAgICAgICAgICAgIGlmIGZpcnN0X3Bhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9wYXNzID0gRmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2VlayhvcmlnaW5hbF9wb3MpCkBAIC0xMzU0LDcgKzE0MzIsNyBAQAogICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG1lc3NhZ2UucmVhZCg0MDk2KSAgICAgIyBCdWZmZXIgc2l6ZSBpcyBhcmJpdHJhcnkuCiAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZmZlcjoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlLndyaXRlKGJ1ZmZlci5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoYnVmZmVyLnJlcGxhY2UoYidcbicsIGxpbmVzZXApKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdJbnZhbGlkIG1lc3NhZ2UgdHlwZTogJXMnICUgdHlwZShtZXNzYWdlKSkKICAgICAgICAgc3RvcCA9IHNlbGYuX2ZpbGUudGVsbCgpCkBAIC0xMzcwLDEwICsxNDQ4LDE0IEBACiAgICAgICAgICAgICBzZWxmLl9iZWNvbWVfbWVzc2FnZShjb3B5LmRlZXBjb3B5KG1lc3NhZ2UpKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBNZXNzYWdlKToKICAgICAgICAgICAgICAgICBtZXNzYWdlLl9leHBsYWluX3RvKHNlbGYpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBieXRlcyk6CisgICAgICAgICAgICBzZWxmLl9iZWNvbWVfbWVzc2FnZShlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMobWVzc2FnZSkpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpOgogICAgICAgICAgICAgc2VsZi5fYmVjb21lX21lc3NhZ2UoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhtZXNzYWdlKSkKLSAgICAgICAgZWxpZiBoYXNhdHRyKG1lc3NhZ2UsICJyZWFkIik6CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShtZXNzYWdlLCBpby5UZXh0SU9XcmFwcGVyKToKICAgICAgICAgICAgIHNlbGYuX2JlY29tZV9tZXNzYWdlKGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKG1lc3NhZ2UpKQorICAgICAgICBlbGlmIGhhc2F0dHIobWVzc2FnZSwgInJlYWQiKToKKyAgICAgICAgICAgIHNlbGYuX2JlY29tZV9tZXNzYWdlKGVtYWlsLm1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShtZXNzYWdlKSkKICAgICAgICAgZWxpZiBtZXNzYWdlIGlzIE5vbmU6CiAgICAgICAgICAgICBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UuX19pbml0X18oc2VsZikKICAgICAgICAgZWxzZToKQEAgLTE2MzcsNyArMTcxOSw3IEBACiAgICAgICAgICAgICBpZiBub3Qgc2VxdWVuY2UgaW4gc2VsZi5fc2VxdWVuY2VzOgogICAgICAgICAgICAgICAgIHNlbGYuX3NlcXVlbmNlcy5hcHBlbmQoc2VxdWVuY2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3NlcXVlbmNlIG11c3QgYmUgYSBzdHJpbmc6ICVzJyAlIHR5cGUoc2VxdWVuY2UpKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzZXF1ZW5jZSB0eXBlIG11c3QgYmUgc3RyOiAlcycgJSB0eXBlKHNlcXVlbmNlKSkKIAogICAgIGRlZiByZW1vdmVfc2VxdWVuY2Uoc2VsZiwgc2VxdWVuY2UpOgogICAgICAgICAiIiJSZW1vdmUgc2VxdWVuY2UgZnJvbSB0aGUgbGlzdCBvZiBzZXF1ZW5jZXMgaW5jbHVkaW5nIHRoZSBtZXNzYWdlLiIiIgpAQCAtMTc5Nyw2ICsxODc5LDEwIEBACiAgICAgICAgICIiIlJlYWQgYnl0ZXMuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKHNpemUsIHNlbGYuX2ZpbGUucmVhZCkKIAorICAgIGRlZiByZWFkMShzZWxmLCBzaXplPU5vbmUpOgorICAgICAgICAiIiJSZWFkIGJ5dGVzLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChzaXplLCBzZWxmLl9maWxlLnJlYWQxKQorCiAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9Tm9uZSk6CiAgICAgICAgICIiIlJlYWQgYSBsaW5lLiIiIgogICAgICAgICByZXR1cm4gc2VsZi5fcmVhZChzaXplLCBzZWxmLl9maWxlLnJlYWRsaW5lKQpAQCAtMTgzMyw2ICsxOTE5LDggQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGZpbGUuIiIiCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5fZmlsZSwgJ2Nsb3NlJyk6CisgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKICAgICAgICAgZGVsIHNlbGYuX2ZpbGUKIAogICAgIGRlZiBfcmVhZChzZWxmLCBzaXplLCByZWFkX21ldGhvZCk6CkBAIC0xODQ0LDYgKzE5MzIsMjkgQEAKICAgICAgICAgc2VsZi5fcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHN1cHBvcnQuIiIiCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5yZWFkYWJsZSgpCisKKyAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9maWxlLndyaXRhYmxlKCkKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUuc2Vla2FibGUoKQorCisgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5mbHVzaCgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZS5jbG9zZWQKKwogCiBjbGFzcyBfUGFydGlhbEZpbGUoX1Byb3h5RmlsZSk6CiAgICAgIiIiQSByZWFkLW9ubHkgd3JhcHBlciBvZiBwYXJ0IG9mIGEgZmlsZS4iIiIKQEAgLTE4NzIsMTEgKzE5ODMsMTYgQEAKICAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzIHVzaW5nIHJlYWRfbWV0aG9kLCBob25vcmluZyBzdGFydCBhbmQgc3RvcC4iIiIKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5fc3RvcCAtIHNlbGYuX3BvcwogICAgICAgICBpZiByZW1haW5pbmcgPD0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICAgICAgcmV0dXJuIGInJwogICAgICAgICBpZiBzaXplIGlzIE5vbmUgb3Igc2l6ZSA8IDAgb3Igc2l6ZSA+IHJlbWFpbmluZzoKICAgICAgICAgICAgIHNpemUgPSByZW1haW5pbmcKICAgICAgICAgcmV0dXJuIF9Qcm94eUZpbGUuX3JlYWQoc2VsZiwgc2l6ZSwgcmVhZF9tZXRob2QpCiAKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgZG8gKm5vdCogY2xvc2UgdGhlIHVuZGVybHlpbmcgZmlsZSBvYmplY3QgZm9yIHBhcnRpYWwgZmlsZXMsCisgICAgICAgICMgc2luY2UgaXQncyBnbG9iYWwgdG8gdGhlIG1haWxib3ggb2JqZWN0CisgICAgICAgIGRlbCBzZWxmLl9maWxlCisKIAogZGVmIF9sb2NrX2ZpbGUoZiwgZG90bG9jaz1UcnVlKToKICAgICAiIiJMb2NrIGZpbGUgZiB1c2luZyBsb2NrZiBhbmQgZG90IGxvY2tpbmcuIiIiCkBAIC0xODg2LDcgKzIwMDIsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZjbnRsLmxvY2tmKGYsIGZjbnRsLkxPQ0tfRVggfCBmY250bC5MT0NLX05CKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUdBSU4sIGVycm5vLkVBQ0NFUyk6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFHQUlOLCBlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXh0ZXJuYWxDbGFzaEVycm9yKCdsb2NrZjogbG9jayB1bmF2YWlsYWJsZTogJXMnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMTg5Niw3ICsyMDEyLDcgQEAKICAgICAgICAgICAgICAgICBwcmVfbG9jayA9IF9jcmVhdGVfdGVtcG9yYXJ5KGYubmFtZSArICcubG9jaycpCiAgICAgICAgICAgICAgICAgcHJlX2xvY2suY2xvc2UoKQogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBQ0NFUzoKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMTkzNCw3ICsyMDUwLDcgQEAKICAgICAiIiJDcmVhdGUgYSBmaWxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIG9wZW4gZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcuIiIiCiAgICAgZmQgPSBvcy5vcGVuKHBhdGgsIG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wgfCBvcy5PX1JEV1IsIDBvNjY2KQogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIG9wZW4ocGF0aCwgJ3IrJywgbmV3bGluZT0nJykKKyAgICAgICAgcmV0dXJuIG9wZW4ocGF0aCwgJ3JiKycpCiAgICAgZmluYWxseToKICAgICAgICAgb3MuY2xvc2UoZmQpCiAKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IDg3NDAzN2UuLjJlZjcxZjkgMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMTgsMTMgKzE4LDE5IEBACiAKIEZ1bmN0aW9uczoKIAotaW5pdChbZmlsZXNdKSAtLSBwYXJzZSBhIGxpc3Qgb2YgZmlsZXMsIGRlZmF1bHQga25vd25maWxlcworaW5pdChbZmlsZXNdKSAtLSBwYXJzZSBhIGxpc3Qgb2YgZmlsZXMsIGRlZmF1bHQga25vd25maWxlcyAob24gV2luZG93cywgdGhlCisgIGRlZmF1bHQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIHRoZSByZWdpc3RyeSkKIHJlYWRfbWltZV90eXBlcyhmaWxlKSAtLSBwYXJzZSBvbmUgZmlsZSwgcmV0dXJuIGEgZGljdGlvbmFyeSBvciBOb25lCiAiIiIKIAogaW1wb3J0IG9zCitpbXBvcnQgc3lzCiBpbXBvcnQgcG9zaXhwYXRoCiBpbXBvcnQgdXJsbGliLnBhcnNlCit0cnk6CisgICAgaW1wb3J0IHdpbnJlZyBhcyBfd2lucmVnCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3dpbnJlZyA9IE5vbmUKIAogX19hbGxfXyA9IFsKICAgICAiZ3Vlc3NfdHlwZSIsImd1ZXNzX2V4dGVuc2lvbiIsImd1ZXNzX2FsbF9leHRlbnNpb25zIiwKQEAgLTIxOSw2ICsyMjUsNDUgQEAKICAgICAgICAgICAgIGZvciBzdWZmIGluIHN1ZmZpeGVzOgogICAgICAgICAgICAgICAgIHNlbGYuYWRkX3R5cGUodHlwZSwgJy4nICsgc3VmZiwgc3RyaWN0KQogCisgICAgZGVmIHJlYWRfd2luZG93c19yZWdpc3RyeShzZWxmLCBzdHJpY3Q9VHJ1ZSk6CisgICAgICAgICIiIgorICAgICAgICBMb2FkIHRoZSBNSU1FIHR5cGVzIGRhdGFiYXNlIGZyb20gV2luZG93cyByZWdpc3RyeS4KKworICAgICAgICBJZiBzdHJpY3QgaXMgdHJ1ZSwgaW5mb3JtYXRpb24gd2lsbCBiZSBhZGRlZCB0bworICAgICAgICBsaXN0IG9mIHN0YW5kYXJkIHR5cGVzLCBlbHNlIHRvIHRoZSBsaXN0IG9mIG5vbi1zdGFuZGFyZAorICAgICAgICB0eXBlcy4KKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXaW5kb3dzIG9ubHkKKyAgICAgICAgaWYgbm90IF93aW5yZWc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgZW51bV90eXBlcyhtaW1lZGIpOgorICAgICAgICAgICAgaSA9IDAKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjdHlwZSA9IF93aW5yZWcuRW51bUtleShtaW1lZGIsIGkpCisgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgY3R5cGUKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICBkZWZhdWx0X2VuY29kaW5nID0gc3lzLmdldGRlZmF1bHRlbmNvZGluZygpCisgICAgICAgIHdpdGggX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DTEFTU0VTX1JPT1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInTUlNRVxEYXRhYmFzZVxDb250ZW50IFR5cGUnKSBhcyBtaW1lZGI6CisgICAgICAgICAgICBmb3IgY3R5cGUgaW4gZW51bV90eXBlcyhtaW1lZGIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBfd2lucmVnLk9wZW5LZXkobWltZWRiLCBjdHlwZSkgYXMga2V5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4LCBkYXRhdHlwZSA9IF93aW5yZWcuUXVlcnlWYWx1ZUV4KGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXh0ZW5zaW9uJykKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBkYXRhdHlwZSAhPSBfd2lucmVnLlJFR19TWjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFkZF90eXBlKGN0eXBlLCBzdWZmaXgsIHN0cmljdCkKKworCiBkZWYgZ3Vlc3NfdHlwZSh1cmwsIHN0cmljdD1UcnVlKToKICAgICAiIiJHdWVzcyB0aGUgdHlwZSBvZiBhIGZpbGUgYmFzZWQgb24gaXRzIFVSTC4KIApAQCAtMjk4LDYgKzM0Myw4IEBACiAgICAgaW5pdGVkID0gVHJ1ZSAgICAjIHNvIHRoYXQgTWltZVR5cGVzLl9faW5pdF9fKCkgZG9lc24ndCBjYWxsIHVzIGFnYWluCiAgICAgZGIgPSBNaW1lVHlwZXMoKQogICAgIGlmIGZpbGVzIGlzIE5vbmU6CisgICAgICAgIGlmIF93aW5yZWc6CisgICAgICAgICAgICBkYi5yZWFkX3dpbmRvd3NfcmVnaXN0cnkoKQogICAgICAgICBmaWxlcyA9IGtub3duZmlsZXMKICAgICBmb3IgZmlsZSBpbiBmaWxlczoKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6CkBAIC0zMjcsNiArMzc0LDcgQEAKICAgICBnbG9iYWwgY29tbW9uX3R5cGVzCiAKICAgICBzdWZmaXhfbWFwID0geworICAgICAgICAnLnN2Z3onOiAnLnN2Zy5neicsCiAgICAgICAgICcudGd6JzogJy50YXIuZ3onLAogICAgICAgICAnLnRheic6ICcudGFyLmd6JywKICAgICAgICAgJy50eic6ICcudGFyLmd6JywKQEAgLTM0MCw3ICszODgsNyBAQAogICAgICAgICB9CiAKICAgICAjIEJlZm9yZSBhZGRpbmcgbmV3IHR5cGVzLCBtYWtlIHN1cmUgdGhleSBhcmUgZWl0aGVyIHJlZ2lzdGVyZWQgd2l0aCBJQU5BLAotICAgICMgYXQgaHR0cDovL3d3dy5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMKKyAgICAjIGF0IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvbWVkaWEtdHlwZXMKICAgICAjIG9yIGV4dGVuc2lvbnMsIGkuZS4gdXNpbmcgdGhlIHgtIHByZWZpeAogCiAgICAgIyBJZiB5b3UgYWRkIHRvIHRoZXNlLCBwbGVhc2Uga2VlcCB0aGVtIHNvcnRlZCEKQEAgLTQ0MSw2ICs0ODksNyBAQAogICAgICAgICAnLnNyYycgICAgOiAnYXBwbGljYXRpb24veC13YWlzLXNvdXJjZScsCiAgICAgICAgICcuc3Y0Y3Bpbyc6ICdhcHBsaWNhdGlvbi94LXN2NGNwaW8nLAogICAgICAgICAnLnN2NGNyYycgOiAnYXBwbGljYXRpb24veC1zdjRjcmMnLAorICAgICAgICAnLnN2ZycgICAgOiAnaW1hZ2Uvc3ZnK3htbCcsCiAgICAgICAgICcuc3dmJyAgICA6ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsCiAgICAgICAgICcudCcgICAgICA6ICdhcHBsaWNhdGlvbi94LXRyb2ZmJywKICAgICAgICAgJy50YXInICAgIDogJ2FwcGxpY2F0aW9uL3gtdGFyJywKQEAgLTQ5MSw3ICs1NDAsNiBAQAogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaW1wb3J0IHN5cwogICAgIGltcG9ydCBnZXRvcHQKIAogICAgIFVTQUdFID0gIiIiXApkaWZmIC0tZ2l0IGEvTGliL21vZHVsZWZpbmRlci5weSBiL0xpYi9tb2R1bGVmaW5kZXIucHkKaW5kZXggNDc4Yzc0OS4uNjQ2YTc4NSAxMDA2NDQKLS0tIGEvTGliL21vZHVsZWZpbmRlci5weQorKysgYi9MaWIvbW9kdWxlZmluZGVyLnB5CkBAIC0xMDUsMTYgKzEwNSwxNiBAQAogCiAgICAgZGVmIHJ1bl9zY3JpcHQoc2VsZiwgcGF0aG5hbWUpOgogICAgICAgICBzZWxmLm1zZygyLCAicnVuX3NjcmlwdCIsIHBhdGhuYW1lKQotICAgICAgICBmcCA9IG9wZW4ocGF0aG5hbWUsIFJFQURfTU9ERSkKLSAgICAgICAgc3R1ZmYgPSAoIiIsICJyIiwgaW1wLlBZX1NPVVJDRSkKLSAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnX19tYWluX18nLCBmcCwgcGF0aG5hbWUsIHN0dWZmKQorICAgICAgICB3aXRoIG9wZW4ocGF0aG5hbWUsIFJFQURfTU9ERSkgYXMgZnA6CisgICAgICAgICAgICBzdHVmZiA9ICgiIiwgInIiLCBpbXAuUFlfU09VUkNFKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZSgnX19tYWluX18nLCBmcCwgcGF0aG5hbWUsIHN0dWZmKQogCiAgICAgZGVmIGxvYWRfZmlsZShzZWxmLCBwYXRobmFtZSk6CiAgICAgICAgIGRpciwgbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCiAgICAgICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKLSAgICAgICAgZnAgPSBvcGVuKHBhdGhuYW1lLCBSRUFEX01PREUpCi0gICAgICAgIHN0dWZmID0gKGV4dCwgInIiLCBpbXAuUFlfU09VUkNFKQotICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKG5hbWUsIGZwLCBwYXRobmFtZSwgc3R1ZmYpCisgICAgICAgIHdpdGggb3BlbihwYXRobmFtZSwgUkVBRF9NT0RFKSBhcyBmcDoKKyAgICAgICAgICAgIHN0dWZmID0gKGV4dCwgInIiLCBpbXAuUFlfU09VUkNFKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShuYW1lLCBmcCwgcGF0aG5hbWUsIHN0dWZmKQogCiAgICAgZGVmIGltcG9ydF9ob29rKHNlbGYsIG5hbWUsIGNhbGxlcj1Ob25lLCBmcm9tbGlzdD1Ob25lLCBsZXZlbD0tMSk6CiAgICAgICAgIHNlbGYubXNnKDMsICJpbXBvcnRfaG9vayIsIG5hbWUsIGNhbGxlciwgZnJvbWxpc3QsIGxldmVsKQpAQCAtNDUxLDkgKzQ1MSwxMyBAQAogICAgICAgICBtLl9fcGF0aF9fID0gbS5fX3BhdGhfXyArIHBhY2thZ2VQYXRoTWFwLmdldChmcW5hbWUsIFtdKQogCiAgICAgICAgIGZwLCBidWYsIHN0dWZmID0gc2VsZi5maW5kX21vZHVsZSgiX19pbml0X18iLCBtLl9fcGF0aF9fKQotICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKGZxbmFtZSwgZnAsIGJ1Ziwgc3R1ZmYpCi0gICAgICAgIHNlbGYubXNnb3V0KDIsICJsb2FkX3BhY2thZ2UgLT4iLCBtKQotICAgICAgICByZXR1cm4gbQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKGZxbmFtZSwgZnAsIGJ1Ziwgc3R1ZmYpCisgICAgICAgICAgICBzZWxmLm1zZ291dCgyLCAibG9hZF9wYWNrYWdlIC0+IiwgbSkKKyAgICAgICAgICAgIHJldHVybiBtCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBmcDoKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCiAKICAgICBkZWYgYWRkX21vZHVsZShzZWxmLCBmcW5hbWUpOgogICAgICAgICBpZiBmcW5hbWUgaW4gc2VsZi5tb2R1bGVzOgpkaWZmIC0tZ2l0IGEvTGliL21zaWxpYi9fX2luaXRfXy5weSBiL0xpYi9tc2lsaWIvX19pbml0X18ucHkKaW5kZXggZGJkYjMyNS4uNmVmZjg5YyAxMDA2NDQKLS0tIGEvTGliL21zaWxpYi9fX2luaXRfXy5weQorKysgYi9MaWIvbXNpbGliL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsMyBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KICMgQ29weXJpZ2h0IChDKSAyMDA1IE1hcnRpbiB2LiBMw7Z3aXMKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogZnJvbSBfbXNpIGltcG9ydCAqCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQppbmRleCBmZGQwMTJlLi5kZWIwMzFjIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKQEAgLTIyMywxMiArMjIzLDEyIEBACiAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBKb2luYWJsZVF1ZXVlCiAgICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSkKIAotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpKToKK2RlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKICAgICAnJycKICAgICBSZXR1cm5zIGEgcHJvY2VzcyBwb29sIG9iamVjdAogICAgICcnJwogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnBvb2wgaW1wb3J0IFBvb2wKLSAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncykKKyAgICByZXR1cm4gUG9vbChwcm9jZXNzZXMsIGluaXRpYWxpemVyLCBpbml0YXJncywgbWF4dGFza3NwZXJjaGlsZCkKIAogZGVmIFJhd1ZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKICAgICAnJycKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQppbmRleCA4NDZkMzk2Li5kNmMyM2ZiIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CkBAIC0yODEsMjUgKzI4MSwyNCBAQAogICAgIFJldHVybiBhIGNvbm5lY3Rpb24gb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc29ja2V0IGdpdmVuIGJ5IGBhZGRyZXNzYAogICAgICcnJwogICAgIGZhbWlseSA9IGFkZHJlc3NfdHlwZShhZGRyZXNzKQotICAgIHMgPSBzb2NrZXQuc29ja2V0KCBnZXRhdHRyKHNvY2tldCwgZmFtaWx5KSApCi0gICAgdCA9IF9pbml0X3RpbWVvdXQoKQorICAgIHdpdGggc29ja2V0LnNvY2tldCggZ2V0YXR0cihzb2NrZXQsIGZhbWlseSkgKSBhcyBzOgorICAgICAgICB0ID0gX2luaXRfdGltZW91dCgpCiAKLSAgICB3aGlsZSAxOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoYWRkcmVzcykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5hcmdzWzBdICE9IGVycm5vLkVDT05OUkVGVVNFRCBvciBfY2hlY2tfdGltZW91dCh0KToKLSAgICAgICAgICAgICAgICBkZWJ1ZygnZmFpbGVkIHRvIGNvbm5lY3QgdG8gYWRkcmVzcyAlcycsIGFkZHJlc3MpCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmFyZ3NbMF0gIT0gZXJybm8uRUNPTk5SRUZVU0VEIG9yIF9jaGVja190aW1lb3V0KHQpOgorICAgICAgICAgICAgICAgICAgICBkZWJ1ZygnZmFpbGVkIHRvIGNvbm5lY3QgdG8gYWRkcmVzcyAlcycsIGFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICByYWlzZQorICAgICAgICAgICAgcmFpc2UKIAotICAgIGZkID0gZHVwbGljYXRlKHMuZmlsZW5vKCkpCisgICAgICAgIGZkID0gZHVwbGljYXRlKHMuZmlsZW5vKCkpCiAgICAgY29ubiA9IF9tdWx0aXByb2Nlc3NpbmcuQ29ubmVjdGlvbihmZCkKLSAgICBzLmNsb3NlKCkKICAgICByZXR1cm4gY29ubgogCiAjCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2ZvcmtpbmcucHkKaW5kZXggMDMwMGE0Yi4uY2M3YzMyNiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQpAQCAtNDYwLDEyICs0NjAsMjAgQEAKICAgICAgICAgcHJvY2Vzcy5PUklHSU5BTF9ESVIgPSBkYXRhWydvcmlnX2RpciddCiAKICAgICBpZiAnbWFpbl9wYXRoJyBpbiBkYXRhOgorICAgICAgICAjIFhYWCAobmNvZ2hsYW4pOiBUaGUgZm9sbG93aW5nIGNvZGUgbWFrZXMgc2V2ZXJhbCBib2d1cworICAgICAgICAjIGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gX19maWxlX18KKyAgICAgICAgIyBhbmQgYSBtb2R1bGUncyByZWFsIG5hbWUuIFNlZSBQRVAgMzAyIGFuZCBpc3N1ZSAjMTA4NDUKICAgICAgICAgbWFpbl9wYXRoID0gZGF0YVsnbWFpbl9wYXRoJ10KICAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkpWzBdCiAgICAgICAgIGlmIG1haW5fbmFtZSA9PSAnX19pbml0X18nOgogICAgICAgICAgICAgbWFpbl9uYW1lID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSkKIAotICAgICAgICBpZiBtYWluX25hbWUgIT0gJ2lweXRob24nOgorICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgIG1haW5fbW9kdWxlID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KKyAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fZmlsZV9fID0gbWFpbl9wYXRoCisgICAgICAgIGVsaWYgbWFpbl9uYW1lICE9ICdpcHl0aG9uJzoKKyAgICAgICAgICAgICMgTWFpbiBtb2R1bGVzIG5vdCBhY3R1YWxseSBjYWxsZWQgX19tYWluX18ucHkgbWF5CisgICAgICAgICAgICAjIGNvbnRhaW4gYWRkaXRpb25hbCBjb2RlIHRoYXQgc2hvdWxkIHN0aWxsIGJlIGV4ZWN1dGVkCiAgICAgICAgICAgICBpbXBvcnQgaW1wCiAKICAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKaW5kZXggYjc3YzY5My4uMzg4YmZlMyAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CkBAIC01OCw3ICs1OCw3IEBACiAjCiAKIGRlZiByZWR1Y2VfYXJyYXkoYSk6Ci0gICAgcmV0dXJuIGFycmF5LmFycmF5LCAoYS50eXBlY29kZSwgYS50b3N0cmluZygpKQorICAgIHJldHVybiBhcnJheS5hcnJheSwgKGEudHlwZWNvZGUsIGEudG9ieXRlcygpKQogRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoYXJyYXkuYXJyYXksIHJlZHVjZV9hcnJheSkKIAogdmlld190eXBlcyA9IFt0eXBlKGdldGF0dHIoe30sIG5hbWUpKCkpIGZvciBuYW1lIGluICgnaXRlbXMnLCdrZXlzJywndmFsdWVzJyldCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKaW5kZXggZmMwM2EwYS4uOTIxNzBmMiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQpAQCAtNjgsNyArNjgsMjUgQEAKICMgQ29kZSBydW4gYnkgd29ya2VyIHByb2Nlc3NlcwogIwogCi1kZWYgd29ya2VyKGlucXVldWUsIG91dHF1ZXVlLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CitjbGFzcyBNYXliZUVuY29kaW5nRXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJXcmFwcyBwb3NzaWJsZSB1bnBpY2tsZWFibGUgZXJyb3JzLCBzbyB0aGV5IGNhbiBiZQorICAgIHNhZmVseSBzZW50IHRocm91Z2ggdGhlIHNvY2tldC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGMsIHZhbHVlKToKKyAgICAgICAgc2VsZi5leGMgPSByZXByKGV4YykKKyAgICAgICAgc2VsZi52YWx1ZSA9IHJlcHIodmFsdWUpCisgICAgICAgIHN1cGVyKE1heWJlRW5jb2RpbmdFcnJvciwgc2VsZikuX19pbml0X18oc2VsZi5leGMsIHNlbGYudmFsdWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJFcnJvciBzZW5kaW5nIHJlc3VsdDogJyVzJy4gUmVhc29uOiAnJXMnIiAlIChzZWxmLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjxNYXliZUVuY29kaW5nRXJyb3I6ICVzPiIgJSBzdHIoc2VsZikKKworCitkZWYgd29ya2VyKGlucXVldWUsIG91dHF1ZXVlLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwgbWF4dGFza3M9Tm9uZSk6CisgICAgYXNzZXJ0IG1heHRhc2tzIGlzIE5vbmUgb3IgKHR5cGUobWF4dGFza3MpID09IGludCBhbmQgbWF4dGFza3MgPiAwKQogICAgIHB1dCA9IG91dHF1ZXVlLnB1dAogICAgIGdldCA9IGlucXVldWUuZ2V0CiAgICAgaWYgaGFzYXR0cihpbnF1ZXVlLCAnX3dyaXRlcicpOgpAQCAtNzgsNyArOTYsOCBAQAogICAgIGlmIGluaXRpYWxpemVyIGlzIG5vdCBOb25lOgogICAgICAgICBpbml0aWFsaXplcigqaW5pdGFyZ3MpCiAKLSAgICB3aGlsZSAxOgorICAgIGNvbXBsZXRlZCA9IDAKKyAgICB3aGlsZSBtYXh0YXNrcyBpcyBOb25lIG9yIChtYXh0YXNrcyBhbmQgY29tcGxldGVkIDwgbWF4dGFza3MpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKICAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgSU9FcnJvcik6CkBAIC05NCw3ICsxMTMsMTUgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IChUcnVlLCBmdW5jKCphcmdzLCAqKmt3ZHMpKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICByZXN1bHQgPSAoRmFsc2UsIGUpCi0gICAgICAgIHB1dCgoam9iLCBpLCByZXN1bHQpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwdXQoKGpvYiwgaSwgcmVzdWx0KSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgd3JhcHBlZCA9IE1heWJlRW5jb2RpbmdFcnJvcihlLCByZXN1bHRbMV0pCisgICAgICAgICAgICBkZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKKyAgICAgICAgICAgICAgICB3cmFwcGVkKSkKKyAgICAgICAgICAgIHB1dCgoam9iLCBpLCAoRmFsc2UsIHdyYXBwZWQpKSkKKyAgICAgICAgY29tcGxldGVkICs9IDEKKyAgICBkZWJ1Zygnd29ya2VyIGV4aXRpbmcgYWZ0ZXIgJWQgdGFza3MnICUgY29tcGxldGVkKQogCiAjCiAjIENsYXNzIHJlcHJlc2VudGluZyBhIHByb2Nlc3MgcG9vbApAQCAtMTA2LDExICsxMzMsMTUgQEAKICAgICAnJycKICAgICBQcm9jZXNzID0gUHJvY2VzcwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSwKKyAgICAgICAgICAgICAgICAgbWF4dGFza3NwZXJjaGlsZD1Ob25lKToKICAgICAgICAgc2VsZi5fc2V0dXBfcXVldWVzKCkKICAgICAgICAgc2VsZi5fdGFza3F1ZXVlID0gcXVldWUuUXVldWUoKQogICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CiAgICAgICAgIHNlbGYuX3N0YXRlID0gUlVOCisgICAgICAgIHNlbGYuX21heHRhc2tzcGVyY2hpbGQgPSBtYXh0YXNrc3BlcmNoaWxkCisgICAgICAgIHNlbGYuX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIKKyAgICAgICAgc2VsZi5faW5pdGFyZ3MgPSBpbml0YXJncwogCiAgICAgICAgIGlmIHByb2Nlc3NlcyBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgpAQCAtMTIxLDE2ICsxNTIsMTggQEAKICAgICAgICAgaWYgaW5pdGlhbGl6ZXIgaXMgbm90IE5vbmUgYW5kIG5vdCBoYXNhdHRyKGluaXRpYWxpemVyLCAnX19jYWxsX18nKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignaW5pdGlhbGl6ZXIgbXVzdCBiZSBhIGNhbGxhYmxlJykKIAorICAgICAgICBzZWxmLl9wcm9jZXNzZXMgPSBwcm9jZXNzZXMKICAgICAgICAgc2VsZi5fcG9vbCA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKHByb2Nlc3Nlcyk6Ci0gICAgICAgICAgICB3ID0gc2VsZi5Qcm9jZXNzKAotICAgICAgICAgICAgICAgIHRhcmdldD13b3JrZXIsCi0gICAgICAgICAgICAgICAgYXJncz0oc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIGluaXRpYWxpemVyLCBpbml0YXJncykKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLl9wb29sLmFwcGVuZCh3KQotICAgICAgICAgICAgdy5uYW1lID0gdy5uYW1lLnJlcGxhY2UoJ1Byb2Nlc3MnLCAnUG9vbFdvcmtlcicpCi0gICAgICAgICAgICB3LmRhZW1vbiA9IFRydWUKLSAgICAgICAgICAgIHcuc3RhcnQoKQorICAgICAgICBzZWxmLl9yZXBvcHVsYXRlX3Bvb2woKQorCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyID0gdGhyZWFkaW5nLlRocmVhZCgKKyAgICAgICAgICAgIHRhcmdldD1Qb29sLl9oYW5kbGVfd29ya2VycywKKyAgICAgICAgICAgIGFyZ3M9KHNlbGYsICkKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuZGFlbW9uID0gVHJ1ZQorICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBSVU4KKyAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuc3RhcnQoKQorCiAKICAgICAgICAgc2VsZi5fdGFza19oYW5kbGVyID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgIHRhcmdldD1Qb29sLl9oYW5kbGVfdGFza3MsCkBAIC0xNTEsMTAgKzE4NCw0OCBAQAogICAgICAgICBzZWxmLl90ZXJtaW5hdGUgPSBGaW5hbGl6ZSgKICAgICAgICAgICAgIHNlbGYsIHNlbGYuX3Rlcm1pbmF0ZV9wb29sLAogICAgICAgICAgICAgYXJncz0oc2VsZi5fdGFza3F1ZXVlLCBzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwgc2VsZi5fcG9vbCwKLSAgICAgICAgICAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlciwgc2VsZi5fcmVzdWx0X2hhbmRsZXIsIHNlbGYuX2NhY2hlKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLCBzZWxmLl90YXNrX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlciwgc2VsZi5fY2FjaGUpLAogICAgICAgICAgICAgZXhpdHByaW9yaXR5PTE1CiAgICAgICAgICAgICApCiAKKyAgICBkZWYgX2pvaW5fZXhpdGVkX3dvcmtlcnMoc2VsZik6CisgICAgICAgICIiIkNsZWFudXAgYWZ0ZXIgYW55IHdvcmtlciBwcm9jZXNzZXMgd2hpY2ggaGF2ZSBleGl0ZWQgZHVlIHRvIHJlYWNoaW5nCisgICAgICAgIHRoZWlyIHNwZWNpZmllZCBsaWZldGltZS4gIFJldHVybnMgVHJ1ZSBpZiBhbnkgd29ya2VycyB3ZXJlIGNsZWFuZWQgdXAuCisgICAgICAgICIiIgorICAgICAgICBjbGVhbmVkID0gRmFsc2UKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYuX3Bvb2wpKSk6CisgICAgICAgICAgICB3b3JrZXIgPSBzZWxmLl9wb29sW2ldCisgICAgICAgICAgICBpZiB3b3JrZXIuZXhpdGNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyB3b3JrZXIgZXhpdGVkCisgICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQorICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKKyAgICAgICAgICAgICAgICBjbGVhbmVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9wb29sW2ldCisgICAgICAgIHJldHVybiBjbGVhbmVkCisKKyAgICBkZWYgX3JlcG9wdWxhdGVfcG9vbChzZWxmKToKKyAgICAgICAgIiIiQnJpbmcgdGhlIG51bWJlciBvZiBwb29sIHByb2Nlc3NlcyB1cCB0byB0aGUgc3BlY2lmaWVkIG51bWJlciwKKyAgICAgICAgZm9yIHVzZSBhZnRlciByZWFwaW5nIHdvcmtlcnMgd2hpY2ggaGF2ZSBleGl0ZWQuCisgICAgICAgICIiIgorICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLl9wcm9jZXNzZXMgLSBsZW4oc2VsZi5fcG9vbCkpOgorICAgICAgICAgICAgdyA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9d29ya2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRhcmdzLCBzZWxmLl9tYXh0YXNrc3BlcmNoaWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuX3Bvb2wuYXBwZW5kKHcpCisgICAgICAgICAgICB3Lm5hbWUgPSB3Lm5hbWUucmVwbGFjZSgnUHJvY2VzcycsICdQb29sV29ya2VyJykKKyAgICAgICAgICAgIHcuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdy5zdGFydCgpCisgICAgICAgICAgICBkZWJ1ZygnYWRkZWQgd29ya2VyJykKKworICAgIGRlZiBfbWFpbnRhaW5fcG9vbChzZWxmKToKKyAgICAgICAgIiIiQ2xlYW4gdXAgYW55IGV4aXRlZCB3b3JrZXJzIGFuZCBzdGFydCByZXBsYWNlbWVudHMgZm9yIHRoZW0uCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9qb2luX2V4aXRlZF93b3JrZXJzKCk6CisgICAgICAgICAgICBzZWxmLl9yZXBvcHVsYXRlX3Bvb2woKQorCiAgICAgZGVmIF9zZXR1cF9xdWV1ZXMoc2VsZik6CiAgICAgICAgIGZyb20gLnF1ZXVlcyBpbXBvcnQgU2ltcGxlUXVldWUKICAgICAgICAgc2VsZi5faW5xdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKQEAgLTIxMywxNiArMjg0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICBmb3IgaSwgeCBpbiBlbnVtZXJhdGUodGFza19iYXRjaGVzKSksIHJlc3VsdC5fc2V0X2xlbmd0aCkpCiAgICAgICAgICAgICByZXR1cm4gKGl0ZW0gZm9yIGNodW5rIGluIHJlc3VsdCBmb3IgaXRlbSBpbiBjaHVuaykKIAotICAgIGRlZiBhcHBseV9hc3luYyhzZWxmLCBmdW5jLCBhcmdzPSgpLCBrd2RzPXt9LCBjYWxsYmFjaz1Ob25lKToKKyAgICBkZWYgYXBwbHlfYXN5bmMoc2VsZiwgZnVuYywgYXJncz0oKSwga3dkcz17fSwgY2FsbGJhY2s9Tm9uZSwKKyAgICAgICAgICAgIGVycm9yX2NhbGxiYWNrPU5vbmUpOgogICAgICAgICAnJycKICAgICAgICAgQXN5bmNocm9ub3VzIHZlcnNpb24gb2YgYGFwcGx5KClgIG1ldGhvZC4KICAgICAgICAgJycnCiAgICAgICAgIGFzc2VydCBzZWxmLl9zdGF0ZSA9PSBSVU4KLSAgICAgICAgcmVzdWx0ID0gQXBwbHlSZXN1bHQoc2VsZi5fY2FjaGUsIGNhbGxiYWNrKQorICAgICAgICByZXN1bHQgPSBBcHBseVJlc3VsdChzZWxmLl9jYWNoZSwgY2FsbGJhY2ssIGVycm9yX2NhbGxiYWNrKQogICAgICAgICBzZWxmLl90YXNrcXVldWUucHV0KChbKHJlc3VsdC5fam9iLCBOb25lLCBmdW5jLCBhcmdzLCBrd2RzKV0sIE5vbmUpKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKLSAgICBkZWYgbWFwX2FzeW5jKHNlbGYsIGZ1bmMsIGl0ZXJhYmxlLCBjaHVua3NpemU9Tm9uZSwgY2FsbGJhY2s9Tm9uZSk6CisgICAgZGVmIG1hcF9hc3luYyhzZWxmLCBmdW5jLCBpdGVyYWJsZSwgY2h1bmtzaXplPU5vbmUsIGNhbGxiYWNrPU5vbmUsCisgICAgICAgICAgICBlcnJvcl9jYWxsYmFjaz1Ob25lKToKICAgICAgICAgJycnCiAgICAgICAgIEFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIGBtYXAoKWAgbWV0aG9kLgogICAgICAgICAnJycKQEAgLTIzOCwxMiArMzExLDIyIEBACiAgICAgICAgICAgICBjaHVua3NpemUgPSAwCiAKICAgICAgICAgdGFza19iYXRjaGVzID0gUG9vbC5fZ2V0X3Rhc2tzKGZ1bmMsIGl0ZXJhYmxlLCBjaHVua3NpemUpCi0gICAgICAgIHJlc3VsdCA9IE1hcFJlc3VsdChzZWxmLl9jYWNoZSwgY2h1bmtzaXplLCBsZW4oaXRlcmFibGUpLCBjYWxsYmFjaykKKyAgICAgICAgcmVzdWx0ID0gTWFwUmVzdWx0KHNlbGYuX2NhY2hlLCBjaHVua3NpemUsIGxlbihpdGVyYWJsZSksIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY2FsbGJhY2s9ZXJyb3JfY2FsbGJhY2spCiAgICAgICAgIHNlbGYuX3Rhc2txdWV1ZS5wdXQoKCgocmVzdWx0Ll9qb2IsIGksIG1hcHN0YXIsICh4LCksIHt9KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGksIHggaW4gZW51bWVyYXRlKHRhc2tfYmF0Y2hlcykpLCBOb25lKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfaGFuZGxlX3dvcmtlcnMocG9vbCk6CisgICAgICAgIHdoaWxlIHBvb2wuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9PSBSVU4gYW5kIHBvb2wuX3N0YXRlID09IFJVTjoKKyAgICAgICAgICAgIHBvb2wuX21haW50YWluX3Bvb2woKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgICMgc2VuZCBzZW50aW5lbCB0byBzdG9wIHdvcmtlcnMKKyAgICAgICAgcG9vbC5fdGFza3F1ZXVlLnB1dChOb25lKQorICAgICAgICBkZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCisKKyAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sKToKICAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkKIApAQCAtMzU4LDE2ICs0NDEsMTggQEAKICAgICAgICAgZGVidWcoJ2Nsb3NpbmcgcG9vbCcpCiAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IFJVTjoKICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gQ0xPU0UKLSAgICAgICAgICAgIHNlbGYuX3Rhc2txdWV1ZS5wdXQoTm9uZSkKKyAgICAgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IENMT1NFCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICBkZWJ1ZygndGVybWluYXRpbmcgcG9vbCcpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gVEVSTUlOQVRFCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBzZWxmLl90ZXJtaW5hdGUoKQogCiAgICAgZGVmIGpvaW4oc2VsZik6CiAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wnKQogICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgaW4gKENMT1NFLCBURVJNSU5BVEUpCisgICAgICAgIHNlbGYuX3dvcmtlcl9oYW5kbGVyLmpvaW4oKQogICAgICAgICBzZWxmLl90YXNrX2hhbmRsZXIuam9pbigpCiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLmpvaW4oKQogICAgICAgICBmb3IgcCBpbiBzZWxmLl9wb29sOgpAQCAtMzg0LDEyICs0NjksMTIgQEAKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBfdGVybWluYXRlX3Bvb2woY2xzLCB0YXNrcXVldWUsIGlucXVldWUsIG91dHF1ZXVlLCBwb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgdGFza19oYW5kbGVyLCByZXN1bHRfaGFuZGxlciwgY2FjaGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIsIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKICAgICAgICAgIyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBiZSBjYWxsZWQgb25jZQogICAgICAgICBkZWJ1ZygnZmluYWxpemluZyBwb29sJykKIAorICAgICAgICB3b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza19oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQotICAgICAgICB0YXNrcXVldWUucHV0KE5vbmUpICAgICAgICAgICAgICAgICAjIHNlbnRpbmVsCiAKICAgICAgICAgZGVidWcoJ2hlbHBpbmcgdGFzayBoYW5kbGVyL3dvcmtlcnMgdG8gZmluaXNoJykKICAgICAgICAgY2xzLl9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIGxlbihwb29sKSkKQEAgLTM5OSwxNiArNDg0LDIzIEBACiAgICAgICAgIHJlc3VsdF9oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogICAgICAgICBvdXRxdWV1ZS5wdXQoTm9uZSkgICAgICAgICAgICAgICAgICAjIHNlbnRpbmVsCiAKKyAgICAgICAgIyBXZSBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXIgaGFuZGxlciB0byBleGl0IGJlZm9yZSB0ZXJtaW5hdGluZworICAgICAgICAjIHdvcmtlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHdvcmtlcnMgdG8gYmUgcmVzdGFydGVkIGJlaGluZCBvdXIgYmFjay4KKyAgICAgICAgZGVidWcoJ2pvaW5pbmcgd29ya2VyIGhhbmRsZXInKQorICAgICAgICB3b3JrZXJfaGFuZGxlci5qb2luKCkKKworICAgICAgICAjIFRlcm1pbmF0ZSB3b3JrZXJzIHdoaWNoIGhhdmVuJ3QgYWxyZWFkeSBmaW5pc2hlZC4KICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6CiAgICAgICAgICAgICBkZWJ1ZygndGVybWluYXRpbmcgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgotICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKKyAgICAgICAgICAgICAgICBpZiBwLmV4aXRjb2RlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBkZWJ1Zygnam9pbmluZyB0YXNrIGhhbmRsZXInKQotICAgICAgICB0YXNrX2hhbmRsZXIuam9pbigxZTEwMCkKKyAgICAgICAgdGFza19oYW5kbGVyLmpvaW4oKQogCiAgICAgICAgIGRlYnVnKCdqb2luaW5nIHJlc3VsdCBoYW5kbGVyJykKLSAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigxZTEwMCkKKyAgICAgICAgcmVzdWx0X2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgaWYgcG9vbCBhbmQgaGFzYXR0cihwb29sWzBdLCAndGVybWluYXRlJyk6CiAgICAgICAgICAgICBkZWJ1Zygnam9pbmluZyBwb29sIHdvcmtlcnMnKQpAQCAtNDI0LDEyICs1MTYsMTMgQEAKIAogY2xhc3MgQXBwbHlSZXN1bHQob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZSwgY2FsbGJhY2spOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYWNoZSwgY2FsbGJhY2ssIGVycm9yX2NhbGxiYWNrKToKICAgICAgICAgc2VsZi5fY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24odGhyZWFkaW5nLkxvY2soKSkKICAgICAgICAgc2VsZi5fam9iID0gbmV4dChqb2JfY291bnRlcikKICAgICAgICAgc2VsZi5fY2FjaGUgPSBjYWNoZQogICAgICAgICBzZWxmLl9yZWFkeSA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgc2VsZi5fZXJyb3JfY2FsbGJhY2sgPSBlcnJvcl9jYWxsYmFjawogICAgICAgICBjYWNoZVtzZWxmLl9qb2JdID0gc2VsZgogCiAgICAgZGVmIHJlYWR5KHNlbGYpOgpAQCAtNDYwLDYgKzU1Myw4IEBACiAgICAgICAgIHNlbGYuX3N1Y2Nlc3MsIHNlbGYuX3ZhbHVlID0gb2JqCiAgICAgICAgIGlmIHNlbGYuX2NhbGxiYWNrIGFuZCBzZWxmLl9zdWNjZXNzOgogICAgICAgICAgICAgc2VsZi5fY2FsbGJhY2soc2VsZi5fdmFsdWUpCisgICAgICAgIGlmIHNlbGYuX2Vycm9yX2NhbGxiYWNrIGFuZCBub3Qgc2VsZi5fc3VjY2VzczoKKyAgICAgICAgICAgIHNlbGYuX2Vycm9yX2NhbGxiYWNrKHNlbGYuX3ZhbHVlKQogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9yZWFkeSA9IFRydWUKQEAgLTQ3NCw4ICs1NjksOSBAQAogCiBjbGFzcyBNYXBSZXN1bHQoQXBwbHlSZXN1bHQpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlLCBjaHVua3NpemUsIGxlbmd0aCwgY2FsbGJhY2spOgotICAgICAgICBBcHBseVJlc3VsdC5fX2luaXRfXyhzZWxmLCBjYWNoZSwgY2FsbGJhY2spCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhY2hlLCBjaHVua3NpemUsIGxlbmd0aCwgY2FsbGJhY2ssIGVycm9yX2NhbGxiYWNrKToKKyAgICAgICAgQXBwbHlSZXN1bHQuX19pbml0X18oc2VsZiwgY2FjaGUsIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jYWxsYmFjaz1lcnJvcl9jYWxsYmFjaykKICAgICAgICAgc2VsZi5fc3VjY2VzcyA9IFRydWUKICAgICAgICAgc2VsZi5fdmFsdWUgPSBbTm9uZV0gKiBsZW5ndGgKICAgICAgICAgc2VsZi5fY2h1bmtzaXplID0gY2h1bmtzaXplCkBAIC01MDAsMTAgKzU5NiwxMSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLm5vdGlmeSgpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKLQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fc3VjY2VzcyA9IEZhbHNlCiAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3JfY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3JfY2FsbGJhY2soc2VsZi5fdmFsdWUpCiAgICAgICAgICAgICBkZWwgc2VsZi5fY2FjaGVbc2VsZi5fam9iXQogICAgICAgICAgICAgc2VsZi5fY29uZC5hY3F1aXJlKCkKICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CmluZGV4IDYxN2QwYjYuLjcwYWU4MjUgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQpAQCAtMjQzLDcgKzI0Myw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB3YWl0IGZvciBub3RpZmljYXRpb24gb3IgdGltZW91dAotICAgICAgICAgICAgc2VsZi5fd2FpdF9zZW1hcGhvcmUuYWNxdWlyZShUcnVlLCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0ID0gc2VsZi5fd2FpdF9zZW1hcGhvcmUuYWNxdWlyZShUcnVlLCB0aW1lb3V0KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgIyBpbmRpY2F0ZSB0aGF0IHRoaXMgdGhyZWFkIGhhcyB3b2tlbgogICAgICAgICAgICAgc2VsZi5fd29rZW5fY291bnQucmVsZWFzZSgpCkBAIC0yNTEsNiArMjUxLDcgQEAKICAgICAgICAgICAgICMgcmVhY3F1aXJlIGxvY2sKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGNvdW50KToKICAgICAgICAgICAgICAgICBzZWxmLl9sb2NrLmFjcXVpcmUoKQorICAgICAgICAgICAgcmV0dXJuIHJldAogCiAgICAgZGVmIG5vdGlmeShzZWxmKToKICAgICAgICAgYXNzZXJ0IHNlbGYuX2xvY2suX3NlbWxvY2suX2lzX21pbmUoKSwgJ2xvY2sgaXMgbm90IG93bmVkJwpkaWZmIC0tZ2l0IGEvTGliL25udHBsaWIucHkgYi9MaWIvbm50cGxpYi5weQppbmRleCAzMjZjNjJkLi5iZjY2NzM0IDEwMDY0NAotLS0gYS9MaWIvbm50cGxpYi5weQorKysgYi9MaWIvbm50cGxpYi5weQpAQCAtMSw0ICsxLDcgQEAKLSIiIkFuIE5OVFAgY2xpZW50IGNsYXNzIGJhc2VkIG9uIFJGQyA5Nzc6IE5ldHdvcmsgTmV3cyBUcmFuc2ZlciBQcm90b2NvbC4KKyIiIkFuIE5OVFAgY2xpZW50IGNsYXNzIGJhc2VkIG9uOgorLSBSRkMgOTc3OiBOZXR3b3JrIE5ld3MgVHJhbnNmZXIgUHJvdG9jb2wKKy0gUkZDIDI5ODA6IENvbW1vbiBOTlRQIEV4dGVuc2lvbnMKKy0gUkZDIDM5Nzc6IE5ldHdvcmsgTmV3cyBUcmFuc2ZlciBQcm90b2NvbCAodmVyc2lvbiAyKQogCiBFeGFtcGxlOgogCkBAIC0yNywxNSArMzAsNjAgQEAKICMgUkZDIDk3NyBieSBCcmlhbiBLYW50b3IgYW5kIFBoaWwgTGFwc2xleS4KICMgeG92ZXIsIHhndGl0bGUsIHhwYXRoLCBkYXRlIG1ldGhvZHMgYnkgS2V2YW4gSGV5ZG9uCiAKKyMgSW5jb21wYXRpYmxlIGNoYW5nZXMgZnJvbSB0aGUgMi54IG5udHBsaWI6CisjIC0gYWxsIGNvbW1hbmRzIGFyZSBlbmNvZGVkIGFzIFVURi04IGRhdGEgKHVzaW5nIHRoZSAic3Vycm9nYXRlZXNjYXBlIgorIyAgIGVycm9yIGhhbmRsZXIpLCBleGNlcHQgZm9yIHJhdyBtZXNzYWdlIGRhdGEgKFBPU1QsIElIQVZFKQorIyAtIGFsbCByZXNwb25zZXMgYXJlIGRlY29kZWQgYXMgVVRGLTggZGF0YSAodXNpbmcgdGhlICJzdXJyb2dhdGVlc2NhcGUiCisjICAgZXJyb3IgaGFuZGxlciksIGV4Y2VwdCBmb3IgcmF3IG1lc3NhZ2UgZGF0YSAoQVJUSUNMRSwgSEVBRCwgQk9EWSkKKyMgLSB0aGUgYGZpbGVgIGFyZ3VtZW50IHRvIHZhcmlvdXMgbWV0aG9kcyBpcyBrZXl3b3JkLW9ubHkKKyMKKyMgLSBOTlRQLmRhdGUoKSByZXR1cm5zIGEgZGF0ZXRpbWUgb2JqZWN0CisjIC0gTk5UUC5uZXdncm91cHMoKSBhbmQgTk5UUC5uZXduZXdzKCkgdGFrZSBhIGRhdGV0aW1lIChvciBkYXRlKSBvYmplY3QsCisjICAgcmF0aGVyIHRoYW4gYSBwYWlyIG9mIChkYXRlLCB0aW1lKSBzdHJpbmdzLgorIyAtIE5OVFAubmV3Z3JvdXBzKCkgYW5kIE5OVFAubGlzdCgpIHJldHVybiBhIGxpc3Qgb2YgR3JvdXBJbmZvIG5hbWVkIHR1cGxlcworIyAtIE5OVFAuZGVzY3JpcHRpb25zKCkgcmV0dXJucyBhIGRpY3QgbWFwcGluZyBncm91cCBuYW1lcyB0byBkZXNjcmlwdGlvbnMKKyMgLSBOTlRQLnhvdmVyKCkgcmV0dXJucyBhIGxpc3Qgb2YgZGljdHMgbWFwcGluZyBmaWVsZCBuYW1lcyAoaGVhZGVyIG9yIG1ldGFkYXRhKQorIyAgIHRvIGZpZWxkIHZhbHVlczsgZWFjaCBkaWN0IHJlcHJlc2VudGluZyBhIG1lc3NhZ2Ugb3ZlcnZpZXcuCisjIC0gTk5UUC5hcnRpY2xlKCksIE5OVFAuaGVhZCgpIGFuZCBOTlRQLmJvZHkoKSByZXR1cm4gYSAocmVzcG9uc2UsIEFydGljbGVJbmZvKQorIyAgIHR1cGxlLgorIyAtIHRoZSAiaW50ZXJuYWwiIG1ldGhvZHMgaGF2ZSBiZWVuIG1hcmtlZCBwcml2YXRlICh0aGV5IG5vdyBzdGFydCB3aXRoCisjICAgYW4gdW5kZXJzY29yZSkKKworIyBPdGhlciBjaGFuZ2VzIGZyb20gdGhlIDIueC8zLjEgbm50cGxpYjoKKyMgLSBhdXRvbWF0aWMgcXVlcnlpbmcgb2YgY2FwYWJpbGl0aWVzIGF0IGNvbm5lY3QKKyMgLSBOZXcgbWV0aG9kIE5OVFAuZ2V0Y2FwYWJpbGl0aWVzKCkKKyMgLSBOZXcgbWV0aG9kIE5OVFAub3ZlcigpCisjIC0gTmV3IGhlbHBlciBmdW5jdGlvbiBkZWNvZGVfaGVhZGVyKCkKKyMgLSBOTlRQLnBvc3QoKSBhbmQgTk5UUC5paGF2ZSgpIGFjY2VwdCBmaWxlIG9iamVjdHMsIGJ5dGVzLWxpa2Ugb2JqZWN0cyBhbmQKKyMgICBhcmJpdHJhcnkgaXRlcmFibGVzIHlpZWxkaW5nIGxpbmVzLgorIyAtIEFuIGV4dGVuc2l2ZSB0ZXN0IHN1aXRlIDotKQorCisjIFRPRE86CisjIC0gcmV0dXJuIHN0cnVjdHVyZWQgZGF0YSAoR3JvdXBJbmZvIGV0Yy4pIGV2ZXJ5d2hlcmUKKyMgLSBzdXBwb3J0IEhEUgogCiAjIEltcG9ydHMKIGltcG9ydCByZQogaW1wb3J0IHNvY2tldAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCB3YXJuaW5ncwogCi1fX2FsbF9fID0gWyJOTlRQIiwiTk5UUFJlcGx5RXJyb3IiLCJOTlRQVGVtcG9yYXJ5RXJyb3IiLAotICAgICAgICAgICAiTk5UUFBlcm1hbmVudEVycm9yIiwiTk5UUFByb3RvY29sRXJyb3IiLCJOTlRQRGF0YUVycm9yIiwKLSAgICAgICAgICAgImVycm9yX3JlcGx5IiwiZXJyb3JfdGVtcCIsImVycm9yX3Blcm0iLCJlcnJvcl9wcm90byIsCi0gICAgICAgICAgICJlcnJvcl9kYXRhIixdCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9oYXZlX3NzbCA9IEZhbHNlCitlbHNlOgorICAgIF9oYXZlX3NzbCA9IFRydWUKKworZnJvbSBlbWFpbC5oZWFkZXIgaW1wb3J0IGRlY29kZV9oZWFkZXIgYXMgX2VtYWlsX2RlY29kZV9oZWFkZXIKK2Zyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAorCitfX2FsbF9fID0gWyJOTlRQIiwKKyAgICAgICAgICAgIk5OVFBSZXBseUVycm9yIiwgIk5OVFBUZW1wb3JhcnlFcnJvciIsICJOTlRQUGVybWFuZW50RXJyb3IiLAorICAgICAgICAgICAiTk5UUFByb3RvY29sRXJyb3IiLCAiTk5UUERhdGFFcnJvciIsCisgICAgICAgICAgICJkZWNvZGVfaGVhZGVyIiwKKyAgICAgICAgICAgXQogCiAjIEV4Y2VwdGlvbnMgcmFpc2VkIHdoZW4gYW4gZXJyb3Igb3IgaW52YWxpZCByZXNwb25zZSBpcyByZWNlaXZlZAogY2xhc3MgTk5UUEVycm9yKEV4Y2VwdGlvbik6CkBAIC02NywzOSArMTE1LDIwMyBAQAogICAgICIiIkVycm9yIGluIHJlc3BvbnNlIGRhdGEiIiIKICAgICBwYXNzCiAKLSMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci1lcnJvcl9yZXBseSA9IE5OVFBSZXBseUVycm9yCi1lcnJvcl90ZW1wID0gTk5UUFRlbXBvcmFyeUVycm9yCi1lcnJvcl9wZXJtID0gTk5UUFBlcm1hbmVudEVycm9yCi1lcnJvcl9wcm90byA9IE5OVFBQcm90b2NvbEVycm9yCi1lcnJvcl9kYXRhID0gTk5UUERhdGFFcnJvcgotCi0KIAogIyBTdGFuZGFyZCBwb3J0IHVzZWQgYnkgTk5UUCBzZXJ2ZXJzCiBOTlRQX1BPUlQgPSAxMTkKLQorTk5UUF9TU0xfUE9SVCA9IDU2MwogCiAjIFJlc3BvbnNlIG51bWJlcnMgdGhhdCBhcmUgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCB0ZXh0IChlLmcuIGFydGljbGUpCi1MT05HUkVTUCA9IFtiJzEwMCcsIGInMjE1JywgYicyMjAnLCBiJzIyMScsIGInMjIyJywgYicyMjQnLCBiJzIzMCcsIGInMjMxJywgYicyODInXQorX0xPTkdSRVNQID0geworICAgICcxMDAnLCAgICMgSEVMUAorICAgICcxMDEnLCAgICMgQ0FQQUJJTElUSUVTCisgICAgJzIxMScsICAgIyBMSVNUR1JPVVAgICAoYWxzbyBub3QgbXVsdGktbGluZSB3aXRoIEdST1VQKQorICAgICcyMTUnLCAgICMgTElTVAorICAgICcyMjAnLCAgICMgQVJUSUNMRQorICAgICcyMjEnLCAgICMgSEVBRCwgWEhEUgorICAgICcyMjInLCAgICMgQk9EWQorICAgICcyMjQnLCAgICMgT1ZFUiwgWE9WRVIKKyAgICAnMjI1JywgICAjIEhEUgorICAgICcyMzAnLCAgICMgTkVXTkVXUworICAgICcyMzEnLCAgICMgTkVXR1JPVVBTCisgICAgJzI4MicsICAgIyBYR1RJVExFCit9CiAKKyMgRGVmYXVsdCBkZWNvZGVkIHZhbHVlIGZvciBMSVNUIE9WRVJWSUVXLkZNVCBpZiBub3Qgc3VwcG9ydGVkCitfREVGQVVMVF9PVkVSVklFV19GTVQgPSBbCisgICAgInN1YmplY3QiLCAiZnJvbSIsICJkYXRlIiwgIm1lc3NhZ2UtaWQiLCAicmVmZXJlbmNlcyIsICI6Ynl0ZXMiLCAiOmxpbmVzIl0KKworIyBBbHRlcm5hdGl2ZSBuYW1lcyBhbGxvd2VkIGluIExJU1QgT1ZFUlZJRVcuRk1UIHJlc3BvbnNlCitfT1ZFUlZJRVdfRk1UX0FMVEVSTkFUSVZFUyA9IHsKKyAgICAnYnl0ZXMnOiAnOmJ5dGVzJywKKyAgICAnbGluZXMnOiAnOmxpbmVzJywKK30KIAogIyBMaW5lIHRlcm1pbmF0b3JzICh3ZSBhbHdheXMgb3V0cHV0IENSTEYsIGJ1dCBhY2NlcHQgYW55IG9mIENSTEYsIENSLCBMRikKLUNSTEYgPSBiJ1xyXG4nCitfQ1JMRiA9IGInXHJcbicKKworR3JvdXBJbmZvID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgnR3JvdXBJbmZvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydncm91cCcsICdsYXN0JywgJ2ZpcnN0JywgJ2ZsYWcnXSkKKworQXJ0aWNsZUluZm8gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCdBcnRpY2xlSW5mbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydudW1iZXInLCAnbWVzc2FnZV9pZCcsICdsaW5lcyddKQogCiAKKyMgSGVscGVyIGZ1bmN0aW9uKHMpCitkZWYgZGVjb2RlX2hlYWRlcihoZWFkZXJfc3RyKToKKyAgICAiIiJUYWtlcyBhbiB1bmljb2RlIHN0cmluZyByZXByZXNlbnRpbmcgYSBtdW5nZWQgaGVhZGVyIHZhbHVlCisgICAgYW5kIGRlY29kZXMgaXQgYXMgYSAocG9zc2libHkgbm9uLUFTQ0lJKSByZWFkYWJsZSB2YWx1ZS4iIiIKKyAgICBwYXJ0cyA9IFtdCisgICAgZm9yIHYsIGVuYyBpbiBfZW1haWxfZGVjb2RlX2hlYWRlcihoZWFkZXJfc3RyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBieXRlcyk6CisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQodi5kZWNvZGUoZW5jIG9yICdhc2NpaScpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFydHMuYXBwZW5kKHYpCisgICAgcmV0dXJuICcgJy5qb2luKHBhcnRzKQogCi0jIFRoZSBjbGFzcyBpdHNlbGYKLWNsYXNzIE5OVFA6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tk5UUF9QT1JULCB1c2VyPU5vbmUsIHBhc3N3b3JkPU5vbmUsCi0gICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9Tm9uZSwgdXNlbmV0cmM9VHJ1ZSk6CitkZWYgX3BhcnNlX292ZXJ2aWV3X2ZtdChsaW5lcyk6CisgICAgIiIiUGFyc2UgYSBsaXN0IG9mIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIHRvIExJU1QgT1ZFUlZJRVcuRk1UCisgICAgYW5kIHJldHVybiBhIGxpc3Qgb2YgaGVhZGVyL21ldGFkYXRhIG5hbWVzLgorICAgIFJhaXNlcyBOTlRQRGF0YUVycm9yIGlmIHRoZSByZXNwb25zZSBpcyBub3QgY29tcGxpYW50CisgICAgKGNmLiBSRkMgMzk3Nywgc2VjdGlvbiA4LjQpLiIiIgorICAgIGZtdCA9IFtdCisgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgIGlmIGxpbmVbMF0gPT0gJzonOgorICAgICAgICAgICAgIyBNZXRhZGF0YSBuYW1lIChlLmcuICI6Ynl0ZXMiKQorICAgICAgICAgICAgbmFtZSwgXywgc3VmZml4ID0gbGluZVsxOl0ucGFydGl0aW9uKCc6JykKKyAgICAgICAgICAgIG5hbWUgPSAnOicgKyBuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEhlYWRlciBuYW1lIChlLmcuICJTdWJqZWN0OiIgb3IgIlhyZWY6ZnVsbCIpCisgICAgICAgICAgICBuYW1lLCBfLCBzdWZmaXggPSBsaW5lLnBhcnRpdGlvbignOicpCisgICAgICAgIG5hbWUgPSBuYW1lLmxvd2VyKCkKKyAgICAgICAgbmFtZSA9IF9PVkVSVklFV19GTVRfQUxURVJOQVRJVkVTLmdldChuYW1lLCBuYW1lKQorICAgICAgICAjIFNob3VsZCB3ZSBkbyBzb21ldGhpbmcgd2l0aCB0aGUgc3VmZml4PworICAgICAgICBmbXQuYXBwZW5kKG5hbWUpCisgICAgZGVmYXVsdHMgPSBfREVGQVVMVF9PVkVSVklFV19GTVQKKyAgICBpZiBsZW4oZm10KSA8IGxlbihkZWZhdWx0cyk6CisgICAgICAgIHJhaXNlIE5OVFBEYXRhRXJyb3IoIkxJU1QgT1ZFUlZJRVcuRk1UIHJlc3BvbnNlIHRvbyBzaG9ydCIpCisgICAgaWYgZm10WzpsZW4oZGVmYXVsdHMpXSAhPSBkZWZhdWx0czoKKyAgICAgICAgcmFpc2UgTk5UUERhdGFFcnJvcigiTElTVCBPVkVSVklFVy5GTVQgcmVkZWZpbmVzIGRlZmF1bHQgZmllbGRzIikKKyAgICByZXR1cm4gZm10CisKK2RlZiBfcGFyc2Vfb3ZlcnZpZXcobGluZXMsIGZtdCwgZGF0YV9wcm9jZXNzX2Z1bmM9Tm9uZSk6CisgICAgIiIiUGFyc2UgdGhlIHJlc3BvbnNlIHRvIGEgT1ZFUiBvciBYT1ZFUiBjb21tYW5kIGFjY29yZGluZyB0byB0aGUKKyAgICBvdmVydmlldyBmb3JtYXQgYGZtdGAuIiIiCisgICAgbl9kZWZhdWx0cyA9IGxlbihfREVGQVVMVF9PVkVSVklFV19GTVQpCisgICAgb3ZlcnZpZXcgPSBbXQorICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBmaWVsZHMgPSB7fQorICAgICAgICBhcnRpY2xlX251bWJlciwgKnRva2VucyA9IGxpbmUuc3BsaXQoJ1x0JykKKyAgICAgICAgYXJ0aWNsZV9udW1iZXIgPSBpbnQoYXJ0aWNsZV9udW1iZXIpCisgICAgICAgIGZvciBpLCB0b2tlbiBpbiBlbnVtZXJhdGUodG9rZW5zKToKKyAgICAgICAgICAgIGlmIGkgPj0gbGVuKGZtdCk6CisgICAgICAgICAgICAgICAgIyBYWFggc2hvdWxkIHdlIHJhaXNlIGFuIGVycm9yPyBTb21lIHNlcnZlcnMgbWlnaHQgbm90CisgICAgICAgICAgICAgICAgIyBzdXBwb3J0IExJU1QgT1ZFUlZJRVcuRk1UIGFuZCBzdGlsbCByZXR1cm4gYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICMgaGVhZGVycy4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmllbGRfbmFtZSA9IGZtdFtpXQorICAgICAgICAgICAgaXNfbWV0YWRhdGEgPSBmaWVsZF9uYW1lLnN0YXJ0c3dpdGgoJzonKQorICAgICAgICAgICAgaWYgaSA+PSBuX2RlZmF1bHRzIGFuZCBub3QgaXNfbWV0YWRhdGE6CisgICAgICAgICAgICAgICAgIyBOb24tZGVmYXVsdCBoZWFkZXIgbmFtZXMgYXJlIGluY2x1ZGVkIGluIGZ1bGwgaW4gdGhlIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgIyAodW5sZXNzIHRoZSBmaWVsZCBpcyB0b3RhbGx5IGVtcHR5KQorICAgICAgICAgICAgICAgIGggPSBmaWVsZF9uYW1lICsgIjogIgorICAgICAgICAgICAgICAgIGlmIHRva2VuIGFuZCB0b2tlbls6bGVuKGgpXS5sb3dlcigpICE9IGg6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIE5OVFBEYXRhRXJyb3IoIk9WRVIvWE9WRVIgcmVzcG9uc2UgZG9lc24ndCBpbmNsdWRlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXMgb2YgYWRkaXRpb25hbCBoZWFkZXJzIikKKyAgICAgICAgICAgICAgICB0b2tlbiA9IHRva2VuW2xlbihoKTpdIGlmIHRva2VuIGVsc2UgTm9uZQorICAgICAgICAgICAgZmllbGRzW2ZtdFtpXV0gPSB0b2tlbgorICAgICAgICBvdmVydmlldy5hcHBlbmQoKGFydGljbGVfbnVtYmVyLCBmaWVsZHMpKQorICAgIHJldHVybiBvdmVydmlldworCitkZWYgX3BhcnNlX2RhdGV0aW1lKGRhdGVfc3RyLCB0aW1lX3N0cj1Ob25lKToKKyAgICAiIiJQYXJzZSBhIHBhaXIgb2YgKGRhdGUsIHRpbWUpIHN0cmluZ3MsIGFuZCByZXR1cm4gYSBkYXRldGltZSBvYmplY3QuCisgICAgSWYgb25seSB0aGUgZGF0ZSBpcyBnaXZlbiwgaXQgaXMgYXNzdW1lZCB0byBiZSBkYXRlIGFuZCB0aW1lCisgICAgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIChlLmcuIHJlc3BvbnNlIHRvIHRoZSBEQVRFIGNvbW1hbmQpLgorICAgICIiIgorICAgIGlmIHRpbWVfc3RyIGlzIE5vbmU6CisgICAgICAgIHRpbWVfc3RyID0gZGF0ZV9zdHJbLTY6XQorICAgICAgICBkYXRlX3N0ciA9IGRhdGVfc3RyWzotNl0KKyAgICBob3VycyA9IGludCh0aW1lX3N0cls6Ml0pCisgICAgbWludXRlcyA9IGludCh0aW1lX3N0clsyOjRdKQorICAgIHNlY29uZHMgPSBpbnQodGltZV9zdHJbNDpdKQorICAgIHllYXIgPSBpbnQoZGF0ZV9zdHJbOi00XSkKKyAgICBtb250aCA9IGludChkYXRlX3N0clstNDotMl0pCisgICAgZGF5ID0gaW50KGRhdGVfc3RyWy0yOl0pCisgICAgIyBSRkMgMzk3NyBkb2Vzbid0IHNheSBob3cgdG8gaW50ZXJwcmV0IDItY2hhciB5ZWFycy4gIEFzc3VtZSB0aGF0CisgICAgIyB0aGVyZSBhcmUgbm8gZGF0ZXMgYmVmb3JlIDE5NzAgb24gVXNlbmV0LgorICAgIGlmIHllYXIgPCA3MDoKKyAgICAgICAgeWVhciArPSAyMDAwCisgICAgZWxpZiB5ZWFyIDwgMTAwOgorICAgICAgICB5ZWFyICs9IDE5MDAKKyAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUoeWVhciwgbW9udGgsIGRheSwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpCisKK2RlZiBfdW5wYXJzZV9kYXRldGltZShkdCwgbGVnYWN5PUZhbHNlKToKKyAgICAiIiJGb3JtYXQgYSBkYXRlIG9yIGRhdGV0aW1lIG9iamVjdCBhcyBhIHBhaXIgb2YgKGRhdGUsIHRpbWUpIHN0cmluZ3MKKyAgICBpbiB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IHRoZSBORVdORVdTIGFuZCBORVdHUk9VUFMgY29tbWFuZHMuICBJZiBhCisgICAgZGF0ZSBvYmplY3QgaXMgcGFzc2VkLCB0aGUgdGltZSBpcyBhc3N1bWVkIHRvIGJlIG1pZG5pZ2h0ICgwMGgwMCkuCisKKyAgICBUaGUgcmV0dXJuZWQgcmVwcmVzZW50YXRpb24gZGVwZW5kcyBvbiB0aGUgbGVnYWN5IGZsYWc6CisgICAgKiBpZiBsZWdhY3kgaXMgRmFsc2UgKHRoZSBkZWZhdWx0KToKKyAgICAgIGRhdGUgaGFzIHRoZSBZWVlZTU1ERCBmb3JtYXQgYW5kIHRpbWUgdGhlIEhITU1TUyBmb3JtYXQKKyAgICAqIGlmIGxlZ2FjeSBpcyBUcnVlOgorICAgICAgZGF0ZSBoYXMgdGhlIFlZTU1ERCBmb3JtYXQgYW5kIHRpbWUgdGhlIEhITU1TUyBmb3JtYXQuCisgICAgUkZDIDM5NzcgY29tcGxpYW50IHNlcnZlcnMgc2hvdWxkIHVuZGVyc3RhbmQgYm90aCBmb3JtYXRzOyB0aGVyZWZvcmUsCisgICAgbGVnYWN5IGlzIG9ubHkgbmVlZGVkIHdoZW4gdGFsa2luZyB0byBvbGQgc2VydmVycy4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShkdCwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgorICAgICAgICB0aW1lX3N0ciA9ICIwMDAwMDAiCisgICAgZWxzZToKKyAgICAgICAgdGltZV9zdHIgPSAiezAuaG91cjowMmR9ezAubWludXRlOjAyZH17MC5zZWNvbmQ6MDJkfSIuZm9ybWF0KGR0KQorICAgIHkgPSBkdC55ZWFyCisgICAgaWYgbGVnYWN5OgorICAgICAgICB5ID0geSAlIDEwMAorICAgICAgICBkYXRlX3N0ciA9ICJ7MDowMmR9ezEubW9udGg6MDJkfXsxLmRheTowMmR9Ii5mb3JtYXQoeSwgZHQpCisgICAgZWxzZToKKyAgICAgICAgZGF0ZV9zdHIgPSAiezA6MDRkfXsxLm1vbnRoOjAyZH17MS5kYXk6MDJkfSIuZm9ybWF0KHksIGR0KQorICAgIHJldHVybiBkYXRlX3N0ciwgdGltZV9zdHIKKworCitpZiBfaGF2ZV9zc2w6CisKKyAgICBkZWYgX2VuY3J5cHRfb24oc29jaywgY29udGV4dCk6CisgICAgICAgICIiIldyYXAgYSBzb2NrZXQgaW4gU1NML1RMUy4gQXJndW1lbnRzOgorICAgICAgICAtIHNvY2s6IFNvY2tldCB0byB3cmFwCisgICAgICAgIC0gY29udGV4dDogU1NMIGNvbnRleHQgdG8gdXNlIGZvciB0aGUgZW5jcnlwdGVkIGNvbm5lY3Rpb24KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgLSBzb2NrOiBOZXcsIGVuY3J5cHRlZCBzb2NrZXQuCisgICAgICAgICIiIgorICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCisgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCisgICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spCisKKworIyBUaGUgY2xhc3NlcyB0aGVtc2VsdmVzCitjbGFzcyBfTk5UUEJhc2U6CisgICAgIyBVVEYtOCBpcyB0aGUgY2hhcmFjdGVyIHNldCBmb3IgYWxsIE5OVFAgY29tbWFuZHMgYW5kIHJlc3BvbnNlczogdGhleQorICAgICMgYXJlIGF1dG9tYXRpY2FsbHkgZW5jb2RlZCAod2hlbiBzZW5kaW5nKSBhbmQgZGVjb2RlZCAoYW5kIHJlY2VpdmluZykKKyAgICAjIGJ5IHRoaXMgY2xhc3MuCisgICAgIyBIb3dldmVyLCBzb21lIG11bHRpLWxpbmUgZGF0YSBibG9ja3MgY2FuIGNvbnRhaW4gYXJiaXRyYXJ5IGJ5dGVzIChmb3IKKyAgICAjIGV4YW1wbGUsIGxhdGluLTEgb3IgdXRmLTE2IGRhdGEgaW4gdGhlIGJvZHkgb2YgYSBtZXNzYWdlKS4gQ29tbWFuZHMKKyAgICAjIHRha2luZyAoUE9TVCwgSUhBVkUpIG9yIHJldHVybmluZyAoSEVBRCwgQk9EWSwgQVJUSUNMRSkgcmF3IG1lc3NhZ2UKKyAgICAjIGRhdGEgd2lsbCB0aGVyZWZvcmUgb25seSBhY2NlcHQgYW5kIHByb2R1Y2UgYnl0ZXMgb2JqZWN0cy4KKyAgICAjIEZ1cnRoZXJtb3JlLCBzaW5jZSB0aGVyZSBjb3VsZCBiZSBub24tY29tcGxpYW50IHNlcnZlcnMgb3V0IHRoZXJlLAorICAgICMgd2UgdXNlICdzdXJyb2dhdGVlc2NhcGUnIGFzIHRoZSBlcnJvciBoYW5kbGVyIGZvciBmYXVsdCB0b2xlcmFuY2UKKyAgICAjIGFuZCBlYXN5IHJvdW5kLXRyaXBwaW5nLiBUaGlzIGNvdWxkIGJlIHVzZWZ1bCBmb3Igc29tZSBhcHBsaWNhdGlvbnMKKyAgICAjIChlLmcuIE5OVFAgZ2F0ZXdheXMpLgorCisgICAgZW5jb2RpbmcgPSAndXRmLTgnCisgICAgZXJyb3JzID0gJ3N1cnJvZ2F0ZWVzY2FwZScKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICByZWFkZXJtb2RlPU5vbmUsIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFuIGluc3RhbmNlLiAgQXJndW1lbnRzOgotICAgICAgICAtIGhvc3Q6IGhvc3RuYW1lIHRvIGNvbm5lY3QgdG8KLSAgICAgICAgLSBwb3J0OiBwb3J0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgdGhlIHN0YW5kYXJkIE5OVFAgcG9ydCkKLSAgICAgICAgLSB1c2VyOiB1c2VybmFtZSB0byBhdXRoZW50aWNhdGUgd2l0aAotICAgICAgICAtIHBhc3N3b3JkOiBwYXNzd29yZCB0byB1c2Ugd2l0aCB1c2VybmFtZQorICAgICAgICAtIGZpbGU6IGZpbGUtbGlrZSBvYmplY3QgKG9wZW4gZm9yIHJlYWQvd3JpdGUgaW4gYmluYXJ5IG1vZGUpCisgICAgICAgIC0gaG9zdDogaG9zdG5hbWUgb2YgdGhlIHNlcnZlcgogICAgICAgICAtIHJlYWRlcm1vZGU6IGlmIHRydWUsIHNlbmQgJ21vZGUgcmVhZGVyJyBjb21tYW5kIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZy4KKyAgICAgICAgLSB0aW1lb3V0OiB0aW1lb3V0IChpbiBzZWNvbmRzKSB1c2VkIGZvciBzb2NrZXQgY29ubmVjdGlvbnMKIAogICAgICAgICByZWFkZXJtb2RlIGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkgaWYgeW91IGFyZSBjb25uZWN0aW5nIHRvIGFuCiAgICAgICAgIE5OVFAgc2VydmVyIG9uIHRoZSBsb2NhbCBtYWNoaW5lIGFuZCBpbnRlbmQgdG8gY2FsbApAQCAtMTA4LDY1ICszMjAsMzEgQEAKICAgICAgICAgcmVhZGVybW9kZS4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpKQotICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKKyAgICAgICAgc2VsZi5maWxlID0gZmlsZQogICAgICAgICBzZWxmLmRlYnVnZ2luZyA9IDAKLSAgICAgICAgc2VsZi53ZWxjb21lID0gc2VsZi5nZXRyZXNwKCkKKyAgICAgICAgc2VsZi53ZWxjb21lID0gc2VsZi5fZ2V0cmVzcCgpCiAKLSAgICAgICAgIyAnbW9kZSByZWFkZXInIGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkgdG8gZW5hYmxlICdyZWFkZXInIG1vZGUuCi0gICAgICAgICMgSG93ZXZlciwgdGhlIG9yZGVyIGluIHdoaWNoICdtb2RlIHJlYWRlcicgYW5kICdhdXRoaW5mbycgbmVlZCB0bwotICAgICAgICAjIGFycml2ZSBkaWZmZXJzIGJldHdlZW4gc29tZSBOTlRQIHNlcnZlcnMuIFRyeSB0byBzZW5kCi0gICAgICAgICMgJ21vZGUgcmVhZGVyJywgYW5kIGlmIGl0IGZhaWxzIHdpdGggYW4gYXV0aG9yaXphdGlvbiBmYWlsZWQKLSAgICAgICAgIyBlcnJvciwgdHJ5IGFnYWluIGFmdGVyIHNlbmRpbmcgYXV0aGluZm8uCi0gICAgICAgIHJlYWRlcm1vZGVfYWZ0ZXJhdXRoID0gMAorICAgICAgICAjICdNT0RFIFJFQURFUicgaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSB0byBlbmFibGUgJ3JlYWRlcicgbW9kZS4KKyAgICAgICAgIyBIb3dldmVyLCB0aGUgb3JkZXIgaW4gd2hpY2ggJ01PREUgUkVBREVSJyBhbmQgJ0FVVEhJTkZPJyBuZWVkIHRvCisgICAgICAgICMgYXJyaXZlIGRpZmZlcnMgYmV0d2VlbiBzb21lIE5OVFAgc2VydmVycy4gSWYgX3NldHJlYWRlcm1vZGUoKSBmYWlscworICAgICAgICAjIHdpdGggYW4gYXV0aG9yaXphdGlvbiBmYWlsZWQgZXJyb3IsIGl0IHdpbGwgc2V0IHRoaXMgdG8gVHJ1ZTsKKyAgICAgICAgIyB0aGUgbG9naW4oKSByb3V0aW5lIHdpbGwgaW50ZXJwcmV0IHRoYXQgYXMgYSByZXF1ZXN0IHRvIHRyeSBhZ2FpbgorICAgICAgICAjIGFmdGVyIHBlcmZvcm1pbmcgaXRzIG5vcm1hbCBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5yZWFkZXJtb2RlX2FmdGVyYXV0aCA9IEZhbHNlCiAgICAgICAgIGlmIHJlYWRlcm1vZGU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi53ZWxjb21lID0gc2VsZi5zaG9ydGNtZCgnbW9kZSByZWFkZXInKQotICAgICAgICAgICAgZXhjZXB0IE5OVFBQZXJtYW5lbnRFcnJvcjoKLSAgICAgICAgICAgICAgICAjIGVycm9yIDUwMCwgcHJvYmFibHkgJ25vdCBpbXBsZW1lbnRlZCcKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBleGNlcHQgTk5UUFRlbXBvcmFyeUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgdXNlciBhbmQgZS5yZXNwb25zZS5zdGFydHN3aXRoKGInNDgwJyk6Ci0gICAgICAgICAgICAgICAgICAgICMgTmVlZCBhdXRob3JpemF0aW9uIGJlZm9yZSAnbW9kZSByZWFkZXInCi0gICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGVfYWZ0ZXJhdXRoID0gMQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICMgSWYgbm8gbG9naW4vcGFzc3dvcmQgd2FzIHNwZWNpZmllZCwgdHJ5IHRvIGdldCB0aGVtIGZyb20gfi8ubmV0cmMKLSAgICAgICAgIyBQcmVzdW1lIHRoYXQgaWYgLm5ldGMgaGFzIGFuIGVudHJ5LCBOTlJQIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB1c2VuZXRyYyBhbmQgbm90IHVzZXI6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IG5ldHJjCi0gICAgICAgICAgICAgICAgY3JlZGVudGlhbHMgPSBuZXRyYy5uZXRyYygpCi0gICAgICAgICAgICAgICAgYXV0aCA9IGNyZWRlbnRpYWxzLmF1dGhlbnRpY2F0b3JzKGhvc3QpCi0gICAgICAgICAgICAgICAgaWYgYXV0aDoKLSAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KLSAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIFBlcmZvcm0gTk5SUCBhdXRoZW50aWNhdGlvbiBpZiBuZWVkZWQuCi0gICAgICAgIGlmIHVzZXI6Ci0gICAgICAgICAgICByZXNwID0gc2VsZi5zaG9ydGNtZCgnYXV0aGluZm8gdXNlciAnK3VzZXIpCi0gICAgICAgICAgICBpZiByZXNwLnN0YXJ0c3dpdGgoYiczODEnKToKLSAgICAgICAgICAgICAgICBpZiBub3QgcGFzc3dvcmQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIE5OVFBSZXBseUVycm9yKHJlc3ApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYuc2hvcnRjbWQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dGhpbmZvIHBhc3MgJytwYXNzd29yZCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlc3Auc3RhcnRzd2l0aChiJzI4MScpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTk5UUFBlcm1hbmVudEVycm9yKHJlc3ApCi0gICAgICAgICAgICBpZiByZWFkZXJtb2RlX2FmdGVyYXV0aDoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYud2VsY29tZSA9IHNlbGYuc2hvcnRjbWQoJ21vZGUgcmVhZGVyJykKLSAgICAgICAgICAgICAgICBleGNlcHQgTk5UUFBlcm1hbmVudEVycm9yOgotICAgICAgICAgICAgICAgICAgICAjIGVycm9yIDUwMCwgcHJvYmFibHkgJ25vdCBpbXBsZW1lbnRlZCcKLSAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5fc2V0cmVhZGVybW9kZSgpCiAKKyAgICAgICAgIyBSRkMgNDY0MiAyLjIuMjogQm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyIE1VU1Qga25vdyBpZiB0aGVyZSBpcworICAgICAgICAjIGEgVExTIHNlc3Npb24gYWN0aXZlLiAgQSBjbGllbnQgTVVTVCBOT1QgYXR0ZW1wdCB0byBzdGFydCBhIFRMUworICAgICAgICAjIHNlc3Npb24gaWYgYSBUTFMgc2Vzc2lvbiBpcyBhbHJlYWR5IGFjdGl2ZS4KKyAgICAgICAgc2VsZi50bHNfb24gPSBGYWxzZQogCi0gICAgIyBHZXQgdGhlIHdlbGNvbWUgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIKLSAgICAjICh0aGlzIGlzIHJlYWQgYW5kIHNxdWlycmVsZWQgYXdheSBieSBfX2luaXRfXygpKS4KLSAgICAjIElmIHRoZSByZXNwb25zZSBjb2RlIGlzIDIwMCwgcG9zdGluZyBpcyBhbGxvd2VkOwotICAgICMgaWYgaXQgMjAxLCBwb3N0aW5nIGlzIG5vdCBhbGxvd2VkCisgICAgICAgICMgSW5xdWlyZSBhYm91dCBjYXBhYmlsaXRpZXMgKFJGQyAzOTc3KS4KKyAgICAgICAgc2VsZi5fY2FwcyA9IE5vbmUKKyAgICAgICAgc2VsZi5nZXRjYXBhYmlsaXRpZXMoKQorCisgICAgICAgICMgTG9nIGluIGFuZCBlbmNyeXB0aW9uIHNldHVwIG9yZGVyIGlzIGxlZnQgdG8gc3ViY2xhc3Nlcy4KKyAgICAgICAgc2VsZi5hdXRoZW50aWNhdGVkID0gRmFsc2UKIAogICAgIGRlZiBnZXR3ZWxjb21lKHNlbGYpOgogICAgICAgICAiIiJHZXQgdGhlIHdlbGNvbWUgbWVzc2FnZSBmcm9tIHRoZSBzZXJ2ZXIKQEAgLTE3Nyw2ICszNTUsMjggQEAKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmc6IHByaW50KCcqd2VsY29tZSonLCByZXByKHNlbGYud2VsY29tZSkpCiAgICAgICAgIHJldHVybiBzZWxmLndlbGNvbWUKIAorICAgIGRlZiBnZXRjYXBhYmlsaXRpZXMoc2VsZik6CisgICAgICAgICIiIkdldCB0aGUgc2VydmVyIGNhcGFiaWxpdGllcywgYXMgcmVhZCBieSBfX2luaXRfXygpLgorICAgICAgICBJZiB0aGUgQ0FQQUJJTElUSUVTIGNvbW1hbmQgaXMgbm90IHN1cHBvcnRlZCwgYW4gZW1wdHkgZGljdCBpcworICAgICAgICByZXR1cm5lZC4iIiIKKyAgICAgICAgaWYgc2VsZi5fY2FwcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5ubnRwX3ZlcnNpb24gPSAxCisgICAgICAgICAgICBzZWxmLm5udHBfaW1wbGVtZW50YXRpb24gPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzcCwgY2FwcyA9IHNlbGYuY2FwYWJpbGl0aWVzKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOTlRQUGVybWFuZW50RXJyb3I6CisgICAgICAgICAgICAgICAgIyBTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IGNhcGFiaWxpdGllcworICAgICAgICAgICAgICAgIHNlbGYuX2NhcHMgPSB7fQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9jYXBzID0gY2FwcworICAgICAgICAgICAgICAgIGlmICdWRVJTSU9OJyBpbiBjYXBzOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgY2FuIGFkdmVydGlzZSBzZXZlcmFsIHN1cHBvcnRlZCB2ZXJzaW9ucywKKyAgICAgICAgICAgICAgICAgICAgIyBjaG9vc2UgdGhlIGhpZ2hlc3QuCisgICAgICAgICAgICAgICAgICAgIHNlbGYubm50cF92ZXJzaW9uID0gbWF4KG1hcChpbnQsIGNhcHNbJ1ZFUlNJT04nXSkpCisgICAgICAgICAgICAgICAgaWYgJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5udHBfaW1wbGVtZW50YXRpb24gPSAnICcuam9pbihjYXBzWydJTVBMRU1FTlRBVElPTiddKQorICAgICAgICByZXR1cm4gc2VsZi5fY2FwcworCiAgICAgZGVmIHNldF9kZWJ1Z2xldmVsKHNlbGYsIGxldmVsKToKICAgICAgICAgIiIiU2V0IHRoZSBkZWJ1Z2dpbmcgbGV2ZWwuICBBcmd1bWVudCAnbGV2ZWwnIG1lYW5zOgogICAgICAgICAwOiBubyBkZWJ1Z2dpbmcgb3V0cHV0IChkZWZhdWx0KQpAQCAtMTg2LDEyMSArMzg2LDIyNiBAQAogICAgICAgICBzZWxmLmRlYnVnZ2luZyA9IGxldmVsCiAgICAgZGVidWcgPSBzZXRfZGVidWdsZXZlbAogCi0gICAgZGVmIHB1dGxpbmUoc2VsZiwgbGluZSk6Ci0gICAgICAgICIiIkludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGLiIiIgotICAgICAgICBsaW5lID0gbGluZSArIENSTEYKKyAgICBkZWYgX3B1dGxpbmUoc2VsZiwgbGluZSk6CisgICAgICAgICIiIkludGVybmFsOiBzZW5kIG9uZSBsaW5lIHRvIHRoZSBzZXJ2ZXIsIGFwcGVuZGluZyBDUkxGLgorICAgICAgICBUaGUgYGxpbmVgIG11c3QgYmUgYSBieXRlcy1saWtlIG9iamVjdC4iIiIKKyAgICAgICAgbGluZSA9IGxpbmUgKyBfQ1JMRgogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0KicsIHJlcHIobGluZSkpCi0gICAgICAgIHNlbGYuc29jay5zZW5kYWxsKGxpbmUpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUuZmx1c2goKQogCi0gICAgZGVmIHB1dGNtZChzZWxmLCBsaW5lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHNlbmQgb25lIGNvbW1hbmQgdG8gdGhlIHNlcnZlciAodGhyb3VnaCBwdXRsaW5lKCkpLiIiIgorICAgIGRlZiBfcHV0Y21kKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJJbnRlcm5hbDogc2VuZCBvbmUgY29tbWFuZCB0byB0aGUgc2VydmVyICh0aHJvdWdoIF9wdXRsaW5lKCkpLgorICAgICAgICBUaGUgYGxpbmVgIG11c3QgYmUgYW4gdW5pY29kZSBzdHJpbmcuIiIiCiAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nOiBwcmludCgnKmNtZConLCByZXByKGxpbmUpKQotICAgICAgICBsaW5lID0gYnl0ZXMobGluZSwgIkFTQ0lJIikKLSAgICAgICAgc2VsZi5wdXRsaW5lKGxpbmUpCisgICAgICAgIGxpbmUgPSBsaW5lLmVuY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKKyAgICAgICAgc2VsZi5fcHV0bGluZShsaW5lKQogCi0gICAgZGVmIGdldGxpbmUoc2VsZik6Ci0gICAgICAgICIiIkludGVybmFsOiByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc2VydmVyLCBzdHJpcHBpbmcgQ1JMRi4KLSAgICAgICAgUmFpc2UgRU9GRXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLiIiIgorICAgIGRlZiBfZ2V0bGluZShzZWxmLCBzdHJpcF9jcmxmPVRydWUpOgorICAgICAgICAiIiJJbnRlcm5hbDogcmV0dXJuIG9uZSBsaW5lIGZyb20gdGhlIHNlcnZlciwgc3RyaXBwaW5nIF9DUkxGLgorICAgICAgICBSYWlzZSBFT0ZFcnJvciBpZiB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCisgICAgICAgIFJldHVybnMgYSBieXRlcyBvYmplY3QuIiIiCiAgICAgICAgIGxpbmUgPSBzZWxmLmZpbGUucmVhZGxpbmUoKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CiAgICAgICAgICAgICBwcmludCgnKmdldConLCByZXByKGxpbmUpKQogICAgICAgICBpZiBub3QgbGluZTogcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6Ci0gICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdCi0gICAgICAgIGVsaWYgbGluZVstMTpdIGluIENSTEY6Ci0gICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgIGlmIHN0cmlwX2NybGY6CisgICAgICAgICAgICBpZiBsaW5lWy0yOl0gPT0gX0NSTEY6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gX0NSTEY6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICByZXR1cm4gbGluZQogCi0gICAgZGVmIGdldHJlc3Aoc2VsZik6CisgICAgZGVmIF9nZXRyZXNwKHNlbGYpOgogICAgICAgICAiIiJJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLgotICAgICAgICBSYWlzZSB2YXJpb3VzIGVycm9ycyBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIGFuIGVycm9yLiIiIgotICAgICAgICByZXNwID0gc2VsZi5nZXRsaW5lKCkKKyAgICAgICAgUmFpc2UgdmFyaW91cyBlcnJvcnMgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBhbiBlcnJvci4KKyAgICAgICAgUmV0dXJucyBhbiB1bmljb2RlIHN0cmluZy4iIiIKKyAgICAgICAgcmVzcCA9IHNlbGYuX2dldGxpbmUoKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHJlcHIocmVzcCkpCisgICAgICAgIHJlc3AgPSByZXNwLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKICAgICAgICAgYyA9IHJlc3BbOjFdCi0gICAgICAgIGlmIGMgPT0gYic0JzoKKyAgICAgICAgaWYgYyA9PSAnNCc6CiAgICAgICAgICAgICByYWlzZSBOTlRQVGVtcG9yYXJ5RXJyb3IocmVzcCkKLSAgICAgICAgaWYgYyA9PSBiJzUnOgorICAgICAgICBpZiBjID09ICc1JzoKICAgICAgICAgICAgIHJhaXNlIE5OVFBQZXJtYW5lbnRFcnJvcihyZXNwKQotICAgICAgICBpZiBjIG5vdCBpbiBiJzEyMyc6CisgICAgICAgIGlmIGMgbm90IGluICcxMjMnOgogICAgICAgICAgICAgcmFpc2UgTk5UUFByb3RvY29sRXJyb3IocmVzcCkKICAgICAgICAgcmV0dXJuIHJlc3AKIAotICAgIGRlZiBnZXRsb25ncmVzcChzZWxmLCBmaWxlPU5vbmUpOgorICAgIGRlZiBfZ2V0bG9uZ3Jlc3Aoc2VsZiwgZmlsZT1Ob25lKToKICAgICAgICAgIiIiSW50ZXJuYWw6IGdldCBhIHJlc3BvbnNlIHBsdXMgZm9sbG93aW5nIHRleHQgZnJvbSB0aGUgc2VydmVyLgotICAgICAgICBSYWlzZSB2YXJpb3VzIGVycm9ycyBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIGFuIGVycm9yLiIiIgorICAgICAgICBSYWlzZSB2YXJpb3VzIGVycm9ycyBpZiB0aGUgcmVzcG9uc2UgaW5kaWNhdGVzIGFuIGVycm9yLgorCisgICAgICAgIFJldHVybnMgYSAocmVzcG9uc2UsIGxpbmVzKSB0dXBsZSB3aGVyZSBgcmVzcG9uc2VgIGlzIGFuIHVuaWNvZGUKKyAgICAgICAgc3RyaW5nIGFuZCBgbGluZXNgIGlzIGEgbGlzdCBvZiBieXRlcyBvYmplY3RzLgorICAgICAgICBJZiBgZmlsZWAgaXMgYSBmaWxlLWxpa2Ugb2JqZWN0LCBpdCBtdXN0IGJlIG9wZW4gaW4gYmluYXJ5IG1vZGUuCisgICAgICAgICIiIgogCiAgICAgICAgIG9wZW5lZEZpbGUgPSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgSWYgYSBzdHJpbmcgd2FzIHBhc3NlZCB0aGVuIG9wZW4gYSBmaWxlIHdpdGggdGhhdCBuYW1lCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGUsIHN0cik6Ci0gICAgICAgICAgICAgICAgb3BlbmVkRmlsZSA9IGZpbGUgPSBvcGVuKGZpbGUsICJ3IikKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZSwgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgICAgICBvcGVuZWRGaWxlID0gZmlsZSA9IG9wZW4oZmlsZSwgIndiIikKIAotICAgICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0cmVzcCgpCi0gICAgICAgICAgICBpZiByZXNwWzozXSBub3QgaW4gTE9OR1JFU1A6CisgICAgICAgICAgICByZXNwID0gc2VsZi5fZ2V0cmVzcCgpCisgICAgICAgICAgICBpZiByZXNwWzozXSBub3QgaW4gX0xPTkdSRVNQOgogICAgICAgICAgICAgICAgIHJhaXNlIE5OVFBSZXBseUVycm9yKHJlc3ApCi0gICAgICAgICAgICBsaXN0ID0gW10KLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZ2V0bGluZSgpCi0gICAgICAgICAgICAgICAgaWYgbGluZSA9PSBiJy4nOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChiJy4uJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzE6XQotICAgICAgICAgICAgICAgIGlmIGZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUobGluZSArIGInXG4nKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKGxpbmUpCisKKyAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgIyBYWFggbGluZXMgPSBOb25lIGluc3RlYWQ/CisgICAgICAgICAgICAgICAgdGVybWluYXRvcnMgPSAoYicuJyArIF9DUkxGLCBiJy5cbicpCisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX2dldGxpbmUoRmFsc2UpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgaW4gdGVybWluYXRvcnM6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoYicuLicpOgorICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbMTpdCisgICAgICAgICAgICAgICAgICAgIGZpbGUud3JpdGUobGluZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdGVybWluYXRvciA9IGInLicKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fZ2V0bGluZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gdGVybWluYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aChiJy4uJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVsxOl0KKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAjIElmIHRoaXMgbWV0aG9kIGNyZWF0ZWQgdGhlIGZpbGUsIHRoZW4gaXQgbXVzdCBjbG9zZSBpdAogICAgICAgICAgICAgaWYgb3BlbmVkRmlsZToKICAgICAgICAgICAgICAgICBvcGVuZWRGaWxlLmNsb3NlKCkKIAotICAgICAgICByZXR1cm4gcmVzcCwgbGlzdAorICAgICAgICByZXR1cm4gcmVzcCwgbGluZXMKIAotICAgIGRlZiBzaG9ydGNtZChzZWxmLCBsaW5lKToKLSAgICAgICAgIiIiSW50ZXJuYWw6IHNlbmQgYSBjb21tYW5kIGFuZCBnZXQgdGhlIHJlc3BvbnNlLiIiIgotICAgICAgICBzZWxmLnB1dGNtZChsaW5lKQotICAgICAgICByZXR1cm4gc2VsZi5nZXRyZXNwKCkKKyAgICBkZWYgX3Nob3J0Y21kKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiJJbnRlcm5hbDogc2VuZCBhIGNvbW1hbmQgYW5kIGdldCB0aGUgcmVzcG9uc2UuCisgICAgICAgIFNhbWUgcmV0dXJuIHZhbHVlIGFzIF9nZXRyZXNwKCkuIiIiCisgICAgICAgIHNlbGYuX3B1dGNtZChsaW5lKQorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0cmVzcCgpCiAKLSAgICBkZWYgbG9uZ2NtZChzZWxmLCBsaW5lLCBmaWxlPU5vbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogc2VuZCBhIGNvbW1hbmQgYW5kIGdldCB0aGUgcmVzcG9uc2UgcGx1cyBmb2xsb3dpbmcgdGV4dC4iIiIKLSAgICAgICAgc2VsZi5wdXRjbWQobGluZSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bG9uZ3Jlc3AoZmlsZSkKKyAgICBkZWYgX2xvbmdjbWQoc2VsZiwgbGluZSwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IHNlbmQgYSBjb21tYW5kIGFuZCBnZXQgdGhlIHJlc3BvbnNlIHBsdXMgZm9sbG93aW5nIHRleHQuCisgICAgICAgIFNhbWUgcmV0dXJuIHZhbHVlIGFzIF9nZXRsb25ncmVzcCgpLiIiIgorICAgICAgICBzZWxmLl9wdXRjbWQobGluZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dldGxvbmdyZXNwKGZpbGUpCiAKLSAgICBkZWYgbmV3Z3JvdXBzKHNlbGYsIGRhdGUsIHRpbWUsIGZpbGU9Tm9uZSk6Ci0gICAgICAgICIiIlByb2Nlc3MgYSBORVdHUk9VUFMgY29tbWFuZC4gIEFyZ3VtZW50czoKLSAgICAgICAgLSBkYXRlOiBzdHJpbmcgJ3l5bW1kZCcgaW5kaWNhdGluZyB0aGUgZGF0ZQotICAgICAgICAtIHRpbWU6IHN0cmluZyAnaGhtbXNzJyBpbmRpY2F0aW5nIHRoZSB0aW1lCisgICAgZGVmIF9sb25nY21kc3RyaW5nKHNlbGYsIGxpbmUsIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIkludGVybmFsOiBzZW5kIGEgY29tbWFuZCBhbmQgZ2V0IHRoZSByZXNwb25zZSBwbHVzIGZvbGxvd2luZyB0ZXh0LgorICAgICAgICBTYW1lIGFzIF9sb25nY21kKCkgYW5kIF9nZXRsb25ncmVzcCgpLCBleGNlcHQgdGhhdCB0aGUgcmV0dXJuZWQgYGxpbmVzYAorICAgICAgICBhcmUgdW5pY29kZSBzdHJpbmdzIHJhdGhlciB0aGFuIGJ5dGVzIG9iamVjdHMuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9wdXRjbWQobGluZSkKKyAgICAgICAgcmVzcCwgbGlzdCA9IHNlbGYuX2dldGxvbmdyZXNwKGZpbGUpCisgICAgICAgIHJldHVybiByZXNwLCBbbGluZS5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCisgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gbGlzdF0KKworICAgIGRlZiBfZ2V0b3ZlcnZpZXdmbXQoc2VsZik6CisgICAgICAgICIiIkludGVybmFsOiBnZXQgdGhlIG92ZXJ2aWV3IGZvcm1hdC4gUXVlcmllcyB0aGUgc2VydmVyIGlmIG5vdAorICAgICAgICBhbHJlYWR5IGRvbmUsIGVsc2UgcmV0dXJucyB0aGUgY2FjaGVkIHZhbHVlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkb3ZlcnZpZXdmbXQKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuX2xvbmdjbWRzdHJpbmcoIkxJU1QgT1ZFUlZJRVcuRk1UIikKKyAgICAgICAgZXhjZXB0IE5OVFBQZXJtYW5lbnRFcnJvcjoKKyAgICAgICAgICAgICMgTm90IHN1cHBvcnRlZCBieSBzZXJ2ZXI/CisgICAgICAgICAgICBmbXQgPSBfREVGQVVMVF9PVkVSVklFV19GTVRbOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZtdCA9IF9wYXJzZV9vdmVydmlld19mbXQobGluZXMpCisgICAgICAgIHNlbGYuX2NhY2hlZG92ZXJ2aWV3Zm10ID0gZm10CisgICAgICAgIHJldHVybiBmbXQKKworICAgIGRlZiBfZ3JvdXBsaXN0KHNlbGYsIGxpbmVzKToKKyAgICAgICAgIyBQYXJzZSBsaW5lcyBpbnRvICJncm91cCBsYXN0IGZpcnN0IGZsYWciCisgICAgICAgIHJldHVybiBbR3JvdXBJbmZvKCpsaW5lLnNwbGl0KCkpIGZvciBsaW5lIGluIGxpbmVzXQorCisgICAgZGVmIGNhcGFiaWxpdGllcyhzZWxmKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIENBUEFCSUxJVElFUyBjb21tYW5kLiAgTm90IHN1cHBvcnRlZCBieSBhbGwgc2VydmVycy4KICAgICAgICAgUmV0dXJuOgogICAgICAgICAtIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCi0gICAgICAgIC0gbGlzdDogbGlzdCBvZiBuZXdzZ3JvdXAgbmFtZXMiIiIKKyAgICAgICAgLSBjYXBzOiBhIGRpY3Rpb25hcnkgbWFwcGluZyBjYXBhYmlsaXR5IG5hbWVzIHRvIGxpc3RzIG9mIHRva2VucworICAgICAgICAoZm9yIGV4YW1wbGUgeydWRVJTSU9OJzogWycyJ10sICdPVkVSJzogW10sIExJU1Q6IFsnQUNUSVZFJywgJ0hFQURFUlMnXSB9KQorICAgICAgICAiIiIKKyAgICAgICAgY2FwcyA9IHt9CisgICAgICAgIHJlc3AsIGxpbmVzID0gc2VsZi5fbG9uZ2NtZHN0cmluZygiQ0FQQUJJTElUSUVTIikKKyAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6CisgICAgICAgICAgICBuYW1lLCAqdG9rZW5zID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICBjYXBzW25hbWVdID0gdG9rZW5zCisgICAgICAgIHJldHVybiByZXNwLCBjYXBzCiAKLSAgICAgICAgcmV0dXJuIHNlbGYubG9uZ2NtZCgnTkVXR1JPVVBTICcgKyBkYXRlICsgJyAnICsgdGltZSwgZmlsZSkKKyAgICBkZWYgbmV3Z3JvdXBzKHNlbGYsIGRhdGUsICosIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBORVdHUk9VUFMgY29tbWFuZC4gIEFyZ3VtZW50czoKKyAgICAgICAgLSBkYXRlOiBhIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0CisgICAgICAgIFJldHVybjoKKyAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAtIGxpc3Q6IGxpc3Qgb2YgbmV3c2dyb3VwIG5hbWVzCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRlLCAoZGF0ZXRpbWUuZGF0ZSwgZGF0ZXRpbWUuZGF0ZSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICJ0aGUgZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgIm5vdCAnezo0MH0nIi5mb3JtYXQoZGF0ZS5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICBkYXRlX3N0ciwgdGltZV9zdHIgPSBfdW5wYXJzZV9kYXRldGltZShkYXRlLCBzZWxmLm5udHBfdmVyc2lvbiA8IDIpCisgICAgICAgIGNtZCA9ICdORVdHUk9VUFMgezB9IHsxfScuZm9ybWF0KGRhdGVfc3RyLCB0aW1lX3N0cikKKyAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLl9sb25nY21kc3RyaW5nKGNtZCwgZmlsZSkKKyAgICAgICAgcmV0dXJuIHJlc3AsIHNlbGYuX2dyb3VwbGlzdChsaW5lcykKIAotICAgIGRlZiBuZXduZXdzKHNlbGYsIGdyb3VwLCBkYXRlLCB0aW1lLCBmaWxlPU5vbmUpOgorICAgIGRlZiBuZXduZXdzKHNlbGYsIGdyb3VwLCBkYXRlLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGEgTkVXTkVXUyBjb21tYW5kLiAgQXJndW1lbnRzOgogICAgICAgICAtIGdyb3VwOiBncm91cCBuYW1lIG9yICcqJwotICAgICAgICAtIGRhdGU6IHN0cmluZyAneXltbWRkJyBpbmRpY2F0aW5nIHRoZSBkYXRlCi0gICAgICAgIC0gdGltZTogc3RyaW5nICdoaG1tc3MnIGluZGljYXRpbmcgdGhlIHRpbWUKKyAgICAgICAgLSBkYXRlOiBhIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0CiAgICAgICAgIFJldHVybjoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAotICAgICAgICAtIGxpc3Q6IGxpc3Qgb2YgbWVzc2FnZSBpZHMiIiIKKyAgICAgICAgLSBsaXN0OiBsaXN0IG9mIG1lc3NhZ2UgaWRzCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRlLCAoZGF0ZXRpbWUuZGF0ZSwgZGF0ZXRpbWUuZGF0ZSkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgICAgICJ0aGUgZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGRhdGUgb3IgZGF0ZXRpbWUgb2JqZWN0LCAiCisgICAgICAgICAgICAgICAgIm5vdCAnezo0MH0nIi5mb3JtYXQoZGF0ZS5fX2NsYXNzX18uX19uYW1lX18pKQorICAgICAgICBkYXRlX3N0ciwgdGltZV9zdHIgPSBfdW5wYXJzZV9kYXRldGltZShkYXRlLCBzZWxmLm5udHBfdmVyc2lvbiA8IDIpCisgICAgICAgIGNtZCA9ICdORVdORVdTIHswfSB7MX0gezJ9Jy5mb3JtYXQoZ3JvdXAsIGRhdGVfc3RyLCB0aW1lX3N0cikKKyAgICAgICAgcmV0dXJuIHNlbGYuX2xvbmdjbWRzdHJpbmcoY21kLCBmaWxlKQogCi0gICAgICAgIGNtZCA9ICdORVdORVdTICcgKyBncm91cCArICcgJyArIGRhdGUgKyAnICcgKyB0aW1lCi0gICAgICAgIHJldHVybiBzZWxmLmxvbmdjbWQoY21kLCBmaWxlKQotCi0gICAgZGVmIGxpc3Qoc2VsZiwgZmlsZT1Ob25lKToKLSAgICAgICAgIiIiUHJvY2VzcyBhIExJU1QgY29tbWFuZC4gIFJldHVybjoKKyAgICBkZWYgbGlzdChzZWxmLCBncm91cF9wYXR0ZXJuPU5vbmUsICosIGZpbGU9Tm9uZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBMSVNUIG9yIExJU1QgQUNUSVZFIGNvbW1hbmQuIEFyZ3VtZW50czoKKyAgICAgICAgLSBncm91cF9wYXR0ZXJuOiBhIHBhdHRlcm4gaW5kaWNhdGluZyB3aGljaCBncm91cHMgdG8gcXVlcnkKKyAgICAgICAgLSBmaWxlOiBGaWxlbmFtZSBzdHJpbmcgb3IgZmlsZSBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgorICAgICAgICBSZXR1cm5zOgogICAgICAgICAtIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCi0gICAgICAgIC0gbGlzdDogbGlzdCBvZiAoZ3JvdXAsIGxhc3QsIGZpcnN0LCBmbGFnKSAoc3RyaW5ncykiIiIKKyAgICAgICAgLSBsaXN0OiBsaXN0IG9mIChncm91cCwgbGFzdCwgZmlyc3QsIGZsYWcpIChzdHJpbmdzKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgZ3JvdXBfcGF0dGVybiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNvbW1hbmQgPSAnTElTVCBBQ1RJVkUgJyArIGdyb3VwX3BhdHRlcm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbW1hbmQgPSAnTElTVCcKKyAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLl9sb25nY21kc3RyaW5nKGNvbW1hbmQsIGZpbGUpCisgICAgICAgIHJldHVybiByZXNwLCBzZWxmLl9ncm91cGxpc3QobGluZXMpCiAKLSAgICAgICAgcmVzcCwgbGlzdCA9IHNlbGYubG9uZ2NtZCgnTElTVCcsIGZpbGUpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihsaXN0KSk6Ci0gICAgICAgICAgICAjIFBhcnNlIGxpbmVzIGludG8gImdyb3VwIGxhc3QgZmlyc3QgZmxhZyIKLSAgICAgICAgICAgIGxpc3RbaV0gPSB0dXBsZShsaXN0W2ldLnNwbGl0KCkpCi0gICAgICAgIHJldHVybiByZXNwLCBsaXN0CisgICAgZGVmIF9nZXRkZXNjcmlwdGlvbnMoc2VsZiwgZ3JvdXBfcGF0dGVybiwgcmV0dXJuX2FsbCk6CisgICAgICAgIGxpbmVfcGF0ID0gcmUuY29tcGlsZSgnXig/UDxncm91cD5bXiBcdF0rKVsgXHRdKyguKikkJykKKyAgICAgICAgIyBUcnkgdGhlIG1vcmUgc3RkIChhY2MuIHRvIFJGQzI5ODApIExJU1QgTkVXU0dST1VQUyBmaXJzdAorICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuX2xvbmdjbWRzdHJpbmcoJ0xJU1QgTkVXU0dST1VQUyAnICsgZ3JvdXBfcGF0dGVybikKKyAgICAgICAgaWYgbm90IHJlc3Auc3RhcnRzd2l0aCgnMjE1Jyk6CisgICAgICAgICAgICAjIE5vdyB0aGUgZGVwcmVjYXRlZCBYR1RJVExFLiAgVGhpcyBlaXRoZXIgcmFpc2VzIGFuIGVycm9yCisgICAgICAgICAgICAjIG9yIHN1Y2NlZWRzIHdpdGggdGhlIHNhbWUgb3V0cHV0IHN0cnVjdHVyZSBhcyBMSVNUCisgICAgICAgICAgICAjIE5FV1NHUk9VUFMuCisgICAgICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuX2xvbmdjbWRzdHJpbmcoJ1hHVElUTEUgJyArIGdyb3VwX3BhdHRlcm4pCisgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAgIGZvciByYXdfbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIG1hdGNoID0gbGluZV9wYXQuc2VhcmNoKHJhd19saW5lLnN0cmlwKCkpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBuYW1lLCBkZXNjID0gbWF0Y2guZ3JvdXAoMSwgMikKKyAgICAgICAgICAgICAgICBpZiBub3QgcmV0dXJuX2FsbDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2MKKyAgICAgICAgICAgICAgICBncm91cHNbbmFtZV0gPSBkZXNjCisgICAgICAgIGlmIHJldHVybl9hbGw6CisgICAgICAgICAgICByZXR1cm4gcmVzcCwgZ3JvdXBzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE5vdGhpbmcgZm91bmQKKyAgICAgICAgICAgIHJldHVybiAnJwogCiAgICAgZGVmIGRlc2NyaXB0aW9uKHNlbGYsIGdyb3VwKToKLQogICAgICAgICAiIiJHZXQgYSBkZXNjcmlwdGlvbiBmb3IgYSBzaW5nbGUgZ3JvdXAuICBJZiBtb3JlIHRoYW4gb25lCiAgICAgICAgIGdyb3VwIG1hdGNoZXMgKCdncm91cCcgaXMgYSBwYXR0ZXJuKSwgcmV0dXJuIHRoZSBmaXJzdC4gIElmIG5vCiAgICAgICAgIGdyb3VwIG1hdGNoZXMsIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCkBAIC0zMTEsNDIgKzYxNiwyNCBAQAogCiAgICAgICAgIE5PVEU6IFRoaXMgbmVpdGhlciBjaGVja3MgZm9yIGEgd2lsZGNhcmQgaW4gJ2dyb3VwJyBub3IgZG9lcwogICAgICAgICBpdCBjaGVjayB3aGV0aGVyIHRoZSBncm91cCBhY3R1YWxseSBleGlzdHMuIiIiCi0KLSAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLmRlc2NyaXB0aW9ucyhncm91cCkKLSAgICAgICAgaWYgbGVuKGxpbmVzKSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIGxpbmVzWzBdWzFdCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRkZXNjcmlwdGlvbnMoZ3JvdXAsIEZhbHNlKQogCiAgICAgZGVmIGRlc2NyaXB0aW9ucyhzZWxmLCBncm91cF9wYXR0ZXJuKToKICAgICAgICAgIiIiR2V0IGRlc2NyaXB0aW9ucyBmb3IgYSByYW5nZSBvZiBncm91cHMuIiIiCi0gICAgICAgIGxpbmVfcGF0ID0gcmUuY29tcGlsZShiJ14oP1A8Z3JvdXA+W14gXHRdKylbIFx0XSsoLiopJCcpCi0gICAgICAgICMgVHJ5IHRoZSBtb3JlIHN0ZCAoYWNjLiB0byBSRkMyOTgwKSBMSVNUIE5FV1NHUk9VUFMgZmlyc3QKLSAgICAgICAgcmVzcCwgcmF3X2xpbmVzID0gc2VsZi5sb25nY21kKCdMSVNUIE5FV1NHUk9VUFMgJyArIGdyb3VwX3BhdHRlcm4pCi0gICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoYicyMTUnKToKLSAgICAgICAgICAgICMgTm93IHRoZSBkZXByZWNhdGVkIFhHVElUTEUuICBUaGlzIGVpdGhlciByYWlzZXMgYW4gZXJyb3IKLSAgICAgICAgICAgICMgb3Igc3VjY2VlZHMgd2l0aCB0aGUgc2FtZSBvdXRwdXQgc3RydWN0dXJlIGFzIExJU1QKLSAgICAgICAgICAgICMgTkVXU0dST1VQUy4KLSAgICAgICAgICAgIHJlc3AsIHJhd19saW5lcyA9IHNlbGYubG9uZ2NtZCgnWEdUSVRMRSAnICsgZ3JvdXBfcGF0dGVybikKLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgcmF3X2xpbmUgaW4gcmF3X2xpbmVzOgotICAgICAgICAgICAgbWF0Y2ggPSBsaW5lX3BhdC5zZWFyY2gocmF3X2xpbmUuc3RyaXAoKSkKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChtYXRjaC5ncm91cCgxLCAyKSkKLSAgICAgICAgcmV0dXJuIHJlc3AsIGxpbmVzCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRkZXNjcmlwdGlvbnMoZ3JvdXBfcGF0dGVybiwgVHJ1ZSkKIAogICAgIGRlZiBncm91cChzZWxmLCBuYW1lKToKICAgICAgICAgIiIiUHJvY2VzcyBhIEdST1VQIGNvbW1hbmQuICBBcmd1bWVudDoKICAgICAgICAgLSBncm91cDogdGhlIGdyb3VwIG5hbWUKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAotICAgICAgICAtIGNvdW50OiBudW1iZXIgb2YgYXJ0aWNsZXMgKHN0cmluZykKLSAgICAgICAgLSBmaXJzdDogZmlyc3QgYXJ0aWNsZSBudW1iZXIgKHN0cmluZykKLSAgICAgICAgLSBsYXN0OiBsYXN0IGFydGljbGUgbnVtYmVyIChzdHJpbmcpCi0gICAgICAgIC0gbmFtZTogdGhlIGdyb3VwIG5hbWUiIiIKLQotICAgICAgICByZXNwID0gc2VsZi5zaG9ydGNtZCgnR1JPVVAgJyArIG5hbWUpCi0gICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoYicyMTEnKToKKyAgICAgICAgLSBjb3VudDogbnVtYmVyIG9mIGFydGljbGVzCisgICAgICAgIC0gZmlyc3Q6IGZpcnN0IGFydGljbGUgbnVtYmVyCisgICAgICAgIC0gbGFzdDogbGFzdCBhcnRpY2xlIG51bWJlcgorICAgICAgICAtIG5hbWU6IHRoZSBncm91cCBuYW1lCisgICAgICAgICIiIgorICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ0dST1VQICcgKyBuYW1lKQorICAgICAgICBpZiBub3QgcmVzcC5zdGFydHN3aXRoKCcyMTEnKToKICAgICAgICAgICAgIHJhaXNlIE5OVFBSZXBseUVycm9yKHJlc3ApCiAgICAgICAgIHdvcmRzID0gcmVzcC5zcGxpdCgpCiAgICAgICAgIGNvdW50ID0gZmlyc3QgPSBsYXN0ID0gMApAQCAtMzU5LDE1MSArNjQ2LDE3NyBAQAogICAgICAgICAgICAgICAgICAgICBsYXN0ID0gd29yZHNbM10KICAgICAgICAgICAgICAgICAgICAgaWYgbiA+IDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gd29yZHNbNF0ubG93ZXIoKQotICAgICAgICByZXR1cm4gcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lCisgICAgICAgIHJldHVybiByZXNwLCBpbnQoY291bnQpLCBpbnQoZmlyc3QpLCBpbnQobGFzdCksIG5hbWUKIAotICAgIGRlZiBoZWxwKHNlbGYsIGZpbGU9Tm9uZSk6Ci0gICAgICAgICIiIlByb2Nlc3MgYSBIRUxQIGNvbW1hbmQuICBSZXR1cm5zOgotICAgICAgICAtIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCi0gICAgICAgIC0gbGlzdDogbGlzdCBvZiBzdHJpbmdzIiIiCi0KLSAgICAgICAgcmV0dXJuIHNlbGYubG9uZ2NtZCgnSEVMUCcsZmlsZSkKLQotICAgIGRlZiBzdGF0cGFyc2Uoc2VsZiwgcmVzcCk6Ci0gICAgICAgICIiIkludGVybmFsOiBwYXJzZSB0aGUgcmVzcG9uc2Ugb2YgYSBTVEFULCBORVhUIG9yIExBU1QgY29tbWFuZC4iIiIKLSAgICAgICAgaWYgbm90IHJlc3Auc3RhcnRzd2l0aChiJzIyJyk6Ci0gICAgICAgICAgICByYWlzZSBOTlRQUmVwbHlFcnJvcihyZXNwKQotICAgICAgICB3b3JkcyA9IHJlc3Auc3BsaXQoKQotICAgICAgICBuciA9IDAKLSAgICAgICAgaWQgPSBiJycKLSAgICAgICAgbiA9IGxlbih3b3JkcykKLSAgICAgICAgaWYgbiA+IDE6Ci0gICAgICAgICAgICBuciA9IHdvcmRzWzFdCi0gICAgICAgICAgICBpZiBuID4gMjoKLSAgICAgICAgICAgICAgICBpZCA9IHdvcmRzWzJdCi0gICAgICAgIHJldHVybiByZXNwLCBuciwgaWQKLQotICAgIGRlZiBzdGF0Y21kKHNlbGYsIGxpbmUpOgotICAgICAgICAiIiJJbnRlcm5hbDogcHJvY2VzcyBhIFNUQVQsIE5FWFQgb3IgTEFTVCBjb21tYW5kLiIiIgotICAgICAgICByZXNwID0gc2VsZi5zaG9ydGNtZChsaW5lKQotICAgICAgICByZXR1cm4gc2VsZi5zdGF0cGFyc2UocmVzcCkKLQotICAgIGRlZiBzdGF0KHNlbGYsIGlkKToKLSAgICAgICAgIiIiUHJvY2VzcyBhIFNUQVQgY29tbWFuZC4gIEFyZ3VtZW50OgotICAgICAgICAtIGlkOiBhcnRpY2xlIG51bWJlciBvciBtZXNzYWdlIGlkCisgICAgZGVmIGhlbHAoc2VsZiwgKiwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIEhFTFAgY29tbWFuZC4gQXJndW1lbnQ6CisgICAgICAgIC0gZmlsZTogRmlsZW5hbWUgc3RyaW5nIG9yIGZpbGUgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4KICAgICAgICAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAotICAgICAgICAtIG5yOiAgIHRoZSBhcnRpY2xlIG51bWJlcgotICAgICAgICAtIGlkOiAgIHRoZSBtZXNzYWdlIGlkIiIiCisgICAgICAgIC0gbGlzdDogbGlzdCBvZiBzdHJpbmdzIHJldHVybmVkIGJ5IHRoZSBzZXJ2ZXIgaW4gcmVzcG9uc2UgdG8gdGhlCisgICAgICAgICAgICAgICAgSEVMUCBjb21tYW5kCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9uZ2NtZHN0cmluZygnSEVMUCcsIGZpbGUpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNtZCgnU1RBVCB7MH0nLmZvcm1hdChpZCkpCisgICAgZGVmIF9zdGF0cGFyc2Uoc2VsZiwgcmVzcCk6CisgICAgICAgICIiIkludGVybmFsOiBwYXJzZSB0aGUgcmVzcG9uc2UgbGluZSBvZiBhIFNUQVQsIE5FWFQsIExBU1QsCisgICAgICAgIEFSVElDTEUsIEhFQUQgb3IgQk9EWSBjb21tYW5kLiIiIgorICAgICAgICBpZiBub3QgcmVzcC5zdGFydHN3aXRoKCcyMicpOgorICAgICAgICAgICAgcmFpc2UgTk5UUFJlcGx5RXJyb3IocmVzcCkKKyAgICAgICAgd29yZHMgPSByZXNwLnNwbGl0KCkKKyAgICAgICAgYXJ0X251bSA9IGludCh3b3Jkc1sxXSkKKyAgICAgICAgbWVzc2FnZV9pZCA9IHdvcmRzWzJdCisgICAgICAgIHJldHVybiByZXNwLCBhcnRfbnVtLCBtZXNzYWdlX2lkCisKKyAgICBkZWYgX3N0YXRjbWQoc2VsZiwgbGluZSk6CisgICAgICAgICIiIkludGVybmFsOiBwcm9jZXNzIGEgU1RBVCwgTkVYVCBvciBMQVNUIGNvbW1hbmQuIiIiCisgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZChsaW5lKQorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdHBhcnNlKHJlc3ApCisKKyAgICBkZWYgc3RhdChzZWxmLCBtZXNzYWdlX3NwZWM9Tm9uZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBTVEFUIGNvbW1hbmQuICBBcmd1bWVudDoKKyAgICAgICAgLSBtZXNzYWdlX3NwZWM6IGFydGljbGUgbnVtYmVyIG9yIG1lc3NhZ2UgaWQgKGlmIG5vdCBzcGVjaWZpZWQsCisgICAgICAgICAgdGhlIGN1cnJlbnQgYXJ0aWNsZSBpcyBzZWxlY3RlZCkKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAtIGFydF9udW06IHRoZSBhcnRpY2xlIG51bWJlcgorICAgICAgICAtIG1lc3NhZ2VfaWQ6IHRoZSBtZXNzYWdlIGlkCisgICAgICAgICIiIgorICAgICAgICBpZiBtZXNzYWdlX3NwZWM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGNtZCgnU1RBVCB7MH0nLmZvcm1hdChtZXNzYWdlX3NwZWMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRjbWQoJ1NUQVQnKQogCiAgICAgZGVmIG5leHQoc2VsZik6CiAgICAgICAgICIiIlByb2Nlc3MgYSBORVhUIGNvbW1hbmQuICBObyBhcmd1bWVudHMuICBSZXR1cm4gYXMgZm9yIFNUQVQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnN0YXRjbWQoJ05FWFQnKQorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGNtZCgnTkVYVCcpCiAKICAgICBkZWYgbGFzdChzZWxmKToKICAgICAgICAgIiIiUHJvY2VzcyBhIExBU1QgY29tbWFuZC4gIE5vIGFyZ3VtZW50cy4gIFJldHVybiBhcyBmb3IgU1RBVC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGNtZCgnTEFTVCcpCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0Y21kKCdMQVNUJykKIAotICAgIGRlZiBhcnRjbWQoc2VsZiwgbGluZSwgZmlsZT1Ob25lKToKKyAgICBkZWYgX2FydGNtZChzZWxmLCBsaW5lLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJJbnRlcm5hbDogcHJvY2VzcyBhIEhFQUQsIEJPRFkgb3IgQVJUSUNMRSBjb21tYW5kLiIiIgotICAgICAgICByZXNwLCBsaXN0ID0gc2VsZi5sb25nY21kKGxpbmUsIGZpbGUpCi0gICAgICAgIHJlc3AsIG5yLCBpZCA9IHNlbGYuc3RhdHBhcnNlKHJlc3ApCi0gICAgICAgIHJldHVybiByZXNwLCBuciwgaWQsIGxpc3QKKyAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLl9sb25nY21kKGxpbmUsIGZpbGUpCisgICAgICAgIHJlc3AsIGFydF9udW0sIG1lc3NhZ2VfaWQgPSBzZWxmLl9zdGF0cGFyc2UocmVzcCkKKyAgICAgICAgcmV0dXJuIHJlc3AsIEFydGljbGVJbmZvKGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzKQogCi0gICAgZGVmIGhlYWQoc2VsZiwgaWQpOgorICAgIGRlZiBoZWFkKHNlbGYsIG1lc3NhZ2Vfc3BlYz1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGEgSEVBRCBjb21tYW5kLiAgQXJndW1lbnQ6Ci0gICAgICAgIC0gaWQ6IGFydGljbGUgbnVtYmVyIG9yIG1lc3NhZ2UgaWQKKyAgICAgICAgLSBtZXNzYWdlX3NwZWM6IGFydGljbGUgbnVtYmVyIG9yIG1lc3NhZ2UgaWQKKyAgICAgICAgLSBmaWxlOiBmaWxlbmFtZSBzdHJpbmcgb3IgZmlsZSBvYmplY3QgdG8gc3RvcmUgdGhlIGhlYWRlcnMgaW4KICAgICAgICAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAotICAgICAgICAtIG5yOiBhcnRpY2xlIG51bWJlcgotICAgICAgICAtIGlkOiBtZXNzYWdlIGlkCi0gICAgICAgIC0gbGlzdDogdGhlIGxpbmVzIG9mIHRoZSBhcnRpY2xlJ3MgaGVhZGVyIiIiCisgICAgICAgIC0gQXJ0aWNsZUluZm86IChhcnRpY2xlIG51bWJlciwgbWVzc2FnZSBpZCwgbGlzdCBvZiBoZWFkZXIgbGluZXMpCisgICAgICAgICIiIgorICAgICAgICBpZiBtZXNzYWdlX3NwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbWQgPSAnSEVBRCB7MH0nLmZvcm1hdChtZXNzYWdlX3NwZWMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbWQgPSAnSEVBRCcKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FydGNtZChjbWQsIGZpbGUpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYuYXJ0Y21kKCdIRUFEIHswfScuZm9ybWF0KGlkKSkKLQotICAgIGRlZiBib2R5KHNlbGYsIGlkLCBmaWxlPU5vbmUpOgorICAgIGRlZiBib2R5KHNlbGYsIG1lc3NhZ2Vfc3BlYz1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGEgQk9EWSBjb21tYW5kLiAgQXJndW1lbnQ6Ci0gICAgICAgIC0gaWQ6IGFydGljbGUgbnVtYmVyIG9yIG1lc3NhZ2UgaWQKLSAgICAgICAgLSBmaWxlOiBGaWxlbmFtZSBzdHJpbmcgb3IgZmlsZSBvYmplY3QgdG8gc3RvcmUgdGhlIGFydGljbGUgaW4KKyAgICAgICAgLSBtZXNzYWdlX3NwZWM6IGFydGljbGUgbnVtYmVyIG9yIG1lc3NhZ2UgaWQKKyAgICAgICAgLSBmaWxlOiBmaWxlbmFtZSBzdHJpbmcgb3IgZmlsZSBvYmplY3QgdG8gc3RvcmUgdGhlIGJvZHkgaW4KICAgICAgICAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAotICAgICAgICAtIG5yOiBhcnRpY2xlIG51bWJlcgotICAgICAgICAtIGlkOiBtZXNzYWdlIGlkCi0gICAgICAgIC0gbGlzdDogdGhlIGxpbmVzIG9mIHRoZSBhcnRpY2xlJ3MgYm9keSBvciBhbiBlbXB0eSBsaXN0Ci0gICAgICAgICAgICAgICAgaWYgZmlsZSB3YXMgdXNlZCIiIgorICAgICAgICAtIEFydGljbGVJbmZvOiAoYXJ0aWNsZSBudW1iZXIsIG1lc3NhZ2UgaWQsIGxpc3Qgb2YgYm9keSBsaW5lcykKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG1lc3NhZ2Vfc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNtZCA9ICdCT0RZIHswfScuZm9ybWF0KG1lc3NhZ2Vfc3BlYykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZCA9ICdCT0RZJworICAgICAgICByZXR1cm4gc2VsZi5fYXJ0Y21kKGNtZCwgZmlsZSkKIAotICAgICAgICByZXR1cm4gc2VsZi5hcnRjbWQoJ0JPRFkgezB9Jy5mb3JtYXQoaWQpLCBmaWxlKQotCi0gICAgZGVmIGFydGljbGUoc2VsZiwgaWQpOgorICAgIGRlZiBhcnRpY2xlKHNlbGYsIG1lc3NhZ2Vfc3BlYz1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGFuIEFSVElDTEUgY29tbWFuZC4gIEFyZ3VtZW50OgotICAgICAgICAtIGlkOiBhcnRpY2xlIG51bWJlciBvciBtZXNzYWdlIGlkCisgICAgICAgIC0gbWVzc2FnZV9zcGVjOiBhcnRpY2xlIG51bWJlciBvciBtZXNzYWdlIGlkCisgICAgICAgIC0gZmlsZTogZmlsZW5hbWUgc3RyaW5nIG9yIGZpbGUgb2JqZWN0IHRvIHN0b3JlIHRoZSBhcnRpY2xlIGluCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgIC0gcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwKLSAgICAgICAgLSBucjogYXJ0aWNsZSBudW1iZXIKLSAgICAgICAgLSBpZDogbWVzc2FnZSBpZAotICAgICAgICAtIGxpc3Q6IHRoZSBsaW5lcyBvZiB0aGUgYXJ0aWNsZSIiIgotCi0gICAgICAgIHJldHVybiBzZWxmLmFydGNtZCgnQVJUSUNMRSB7MH0nLmZvcm1hdChpZCkpCisgICAgICAgIC0gQXJ0aWNsZUluZm86IChhcnRpY2xlIG51bWJlciwgbWVzc2FnZSBpZCwgbGlzdCBvZiBhcnRpY2xlIGxpbmVzKQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbWVzc2FnZV9zcGVjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY21kID0gJ0FSVElDTEUgezB9Jy5mb3JtYXQobWVzc2FnZV9zcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY21kID0gJ0FSVElDTEUnCisgICAgICAgIHJldHVybiBzZWxmLl9hcnRjbWQoY21kLCBmaWxlKQogCiAgICAgZGVmIHNsYXZlKHNlbGYpOgogICAgICAgICAiIiJQcm9jZXNzIGEgU0xBVkUgY29tbWFuZC4gIFJldHVybnM6Ci0gICAgICAgIC0gcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwiIiIKKyAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3J0Y21kKCdTTEFWRScpCiAKLSAgICAgICAgcmV0dXJuIHNlbGYuc2hvcnRjbWQoJ1NMQVZFJykKLQotICAgIGRlZiB4aGRyKHNlbGYsIGhkciwgc3RyLCBmaWxlPU5vbmUpOgorICAgIGRlZiB4aGRyKHNlbGYsIGhkciwgc3RyLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGFuIFhIRFIgY29tbWFuZCAob3B0aW9uYWwgc2VydmVyIGV4dGVuc2lvbikuICBBcmd1bWVudHM6CiAgICAgICAgIC0gaGRyOiB0aGUgaGVhZGVyIHR5cGUgKGUuZy4gJ3N1YmplY3QnKQogICAgICAgICAtIHN0cjogYW4gYXJ0aWNsZSBuciwgYSBtZXNzYWdlIGlkLCBvciBhIHJhbmdlIG5yMS1ucjIKKyAgICAgICAgLSBmaWxlOiBGaWxlbmFtZSBzdHJpbmcgb3IgZmlsZSBvYmplY3QgdG8gc3RvcmUgdGhlIHJlc3VsdCBpbgogICAgICAgICBSZXR1cm5zOgogICAgICAgICAtIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCi0gICAgICAgIC0gbGlzdDogbGlzdCBvZiAobnIsIHZhbHVlKSBzdHJpbmdzIiIiCi0KLSAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJ14oWzAtOV0rKSA/KC4qKVxuPycpCi0gICAgICAgIHJlc3AsIGxpbmVzID0gc2VsZi5sb25nY21kKCdYSERSIHswfSB7MX0nLmZvcm1hdChoZHIsIHN0ciksIGZpbGUpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihsaW5lcykpOgotICAgICAgICAgICAgbGluZSA9IGxpbmVzW2ldCisgICAgICAgIC0gbGlzdDogbGlzdCBvZiAobnIsIHZhbHVlKSBzdHJpbmdzCisgICAgICAgICIiIgorICAgICAgICBwYXQgPSByZS5jb21waWxlKCdeKFswLTldKykgPyguKilcbj8nKQorICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuX2xvbmdjbWRzdHJpbmcoJ1hIRFIgezB9IHsxfScuZm9ybWF0KGhkciwgc3RyKSwgZmlsZSkKKyAgICAgICAgZGVmIHJlbW92ZV9udW1iZXIobGluZSk6CiAgICAgICAgICAgICBtID0gcGF0Lm1hdGNoKGxpbmUpCi0gICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gbS5ncm91cCgxLCAyKQotICAgICAgICByZXR1cm4gcmVzcCwgbGluZXMKKyAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEsIDIpIGlmIG0gZWxzZSBsaW5lCisgICAgICAgIHJldHVybiByZXNwLCBbcmVtb3ZlX251bWJlcihsaW5lKSBmb3IgbGluZSBpbiBsaW5lc10KIAotICAgIGRlZiB4b3ZlcihzZWxmLCBzdGFydCwgZW5kLCBmaWxlPU5vbmUpOgorICAgIGRlZiB4b3ZlcihzZWxmLCBzdGFydCwgZW5kLCAqLCBmaWxlPU5vbmUpOgogICAgICAgICAiIiJQcm9jZXNzIGFuIFhPVkVSIGNvbW1hbmQgKG9wdGlvbmFsIHNlcnZlciBleHRlbnNpb24pIEFyZ3VtZW50czoKICAgICAgICAgLSBzdGFydDogc3RhcnQgb2YgcmFuZ2UKICAgICAgICAgLSBlbmQ6IGVuZCBvZiByYW5nZQorICAgICAgICAtIGZpbGU6IEZpbGVuYW1lIHN0cmluZyBvciBmaWxlIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgIC0gcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwKLSAgICAgICAgLSBsaXN0OiBsaXN0IG9mIChhcnQtbnIsIHN1YmplY3QsIHBvc3RlciwgZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpZCwgcmVmZXJlbmNlcywgc2l6ZSwgbGluZXMpIiIiCisgICAgICAgIC0gbGlzdDogbGlzdCBvZiBkaWN0cyBjb250YWluaW5nIHRoZSByZXNwb25zZSBmaWVsZHMKKyAgICAgICAgIiIiCisgICAgICAgIHJlc3AsIGxpbmVzID0gc2VsZi5fbG9uZ2NtZHN0cmluZygnWE9WRVIgezB9LXsxfScuZm9ybWF0KHN0YXJ0LCBlbmQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSkKKyAgICAgICAgZm10ID0gc2VsZi5fZ2V0b3ZlcnZpZXdmbXQoKQorICAgICAgICByZXR1cm4gcmVzcCwgX3BhcnNlX292ZXJ2aWV3KGxpbmVzLCBmbXQpCiAKLSAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLmxvbmdjbWQoJ1hPVkVSIHswfS17MX0nLmZvcm1hdChzdGFydCwgZW5kKSwgZmlsZSkKLSAgICAgICAgeG92ZXJfbGluZXMgPSBbXQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGVsZW0gPSBsaW5lLnNwbGl0KGInXHQnKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHhvdmVyX2xpbmVzLmFwcGVuZCgoZWxlbVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1bNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWzVdLnNwbGl0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtWzZdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbVs3XSkpCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZSBOTlRQRGF0YUVycm9yKGxpbmUpCi0gICAgICAgIHJldHVybiByZXNwLHhvdmVyX2xpbmVzCisgICAgZGVmIG92ZXIoc2VsZiwgbWVzc2FnZV9zcGVjLCAqLCBmaWxlPU5vbmUpOgorICAgICAgICAiIiJQcm9jZXNzIGFuIE9WRVIgY29tbWFuZC4gIElmIHRoZSBjb21tYW5kIGlzbid0IHN1cHBvcnRlZCwgZmFsbAorICAgICAgICBiYWNrIHRvIFhPVkVSLiBBcmd1bWVudHM6CisgICAgICAgIC0gbWVzc2FnZV9zcGVjOgorICAgICAgICAgICAgLSBlaXRoZXIgYSBtZXNzYWdlIGlkLCBpbmRpY2F0aW5nIHRoZSBhcnRpY2xlIHRvIGZldGNoCisgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0CisgICAgICAgICAgICAtIG9yIGEgKHN0YXJ0LCBlbmQpIHR1cGxlLCBpbmRpY2F0aW5nIGEgcmFuZ2Ugb2YgYXJ0aWNsZSBudW1iZXJzOworICAgICAgICAgICAgICBpZiBlbmQgaXMgTm9uZSwgaW5mb3JtYXRpb24gdXAgdG8gdGhlIG5ld2VzdCBtZXNzYWdlIHdpbGwgYmUKKyAgICAgICAgICAgICAgcmV0cmlldmVkCisgICAgICAgICAgICAtIG9yIE5vbmUsIGluZGljYXRpbmcgdGhlIGN1cnJlbnQgYXJ0aWNsZSBudW1iZXIgbXVzdCBiZSB1c2VkCisgICAgICAgIC0gZmlsZTogRmlsZW5hbWUgc3RyaW5nIG9yIGZpbGUgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAorICAgICAgICAtIGxpc3Q6IGxpc3Qgb2YgZGljdHMgY29udGFpbmluZyB0aGUgcmVzcG9uc2UgZmllbGRzCiAKLSAgICBkZWYgeGd0aXRsZShzZWxmLCBncm91cCwgZmlsZT1Ob25lKToKKyAgICAgICAgTk9URTogdGhlICJtZXNzYWdlIGlkIiBmb3JtIGlzbid0IHN1cHBvcnRlZCBieSBYT1ZFUgorICAgICAgICAiIiIKKyAgICAgICAgY21kID0gJ09WRVInIGlmICdPVkVSJyBpbiBzZWxmLl9jYXBzIGVsc2UgJ1hPVkVSJworICAgICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2Vfc3BlYywgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICBzdGFydCwgZW5kID0gbWVzc2FnZV9zcGVjCisgICAgICAgICAgICBjbWQgKz0gJyB7MH0tezF9Jy5mb3JtYXQoc3RhcnQsIGVuZCBvciAnJykKKyAgICAgICAgZWxpZiBtZXNzYWdlX3NwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbWQgPSBjbWQgKyAnICcgKyBtZXNzYWdlX3NwZWMKKyAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLl9sb25nY21kc3RyaW5nKGNtZCwgZmlsZSkKKyAgICAgICAgZm10ID0gc2VsZi5fZ2V0b3ZlcnZpZXdmbXQoKQorICAgICAgICByZXR1cm4gcmVzcCwgX3BhcnNlX292ZXJ2aWV3KGxpbmVzLCBmbXQpCisKKyAgICBkZWYgeGd0aXRsZShzZWxmLCBncm91cCwgKiwgZmlsZT1Ob25lKToKICAgICAgICAgIiIiUHJvY2VzcyBhbiBYR1RJVExFIGNvbW1hbmQgKG9wdGlvbmFsIHNlcnZlciBleHRlbnNpb24pIEFyZ3VtZW50czoKICAgICAgICAgLSBncm91cDogZ3JvdXAgbmFtZSB3aWxkY2FyZCAoaS5lLiBuZXdzLiopCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgIC0gcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwKICAgICAgICAgLSBsaXN0OiBsaXN0IG9mIChuYW1lLHRpdGxlKSBzdHJpbmdzIiIiCi0KLSAgICAgICAgbGluZV9wYXQgPSByZS5jb21waWxlKGInXihbXiBcdF0rKVsgXHRdKyguKikkJykKLSAgICAgICAgcmVzcCwgcmF3X2xpbmVzID0gc2VsZi5sb25nY21kKCdYR1RJVExFICcgKyBncm91cCwgZmlsZSkKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIFhHVElUTEUgZXh0ZW5zaW9uIGlzIG5vdCBhY3RpdmVseSB1c2VkLCAiCisgICAgICAgICAgICAgICAgICAgICAgInVzZSBkZXNjcmlwdGlvbnMoKSBpbnN0ZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICBsaW5lX3BhdCA9IHJlLmNvbXBpbGUoJ14oW14gXHRdKylbIFx0XSsoLiopJCcpCisgICAgICAgIHJlc3AsIHJhd19saW5lcyA9IHNlbGYuX2xvbmdjbWRzdHJpbmcoJ1hHVElUTEUgJyArIGdyb3VwLCBmaWxlKQogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciByYXdfbGluZSBpbiByYXdfbGluZXM6CiAgICAgICAgICAgICBtYXRjaCA9IGxpbmVfcGF0LnNlYXJjaChyYXdfbGluZS5zdHJpcCgpKQpAQCAtNTExLDE1ICs4MjQsMTggQEAKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobWF0Y2guZ3JvdXAoMSwgMikpCiAgICAgICAgIHJldHVybiByZXNwLCBsaW5lcwogCi0gICAgZGVmIHhwYXRoKHNlbGYsaWQpOgorICAgIGRlZiB4cGF0aChzZWxmLCBpZCk6CiAgICAgICAgICIiIlByb2Nlc3MgYW4gWFBBVEggY29tbWFuZCAob3B0aW9uYWwgc2VydmVyIGV4dGVuc2lvbikgQXJndW1lbnRzOgogICAgICAgICAtIGlkOiBNZXNzYWdlIGlkIG9mIGFydGljbGUKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwKLSAgICAgICAgcGF0aDogZGlyZWN0b3J5IHBhdGggdG8gYXJ0aWNsZSIiIgorICAgICAgICBwYXRoOiBkaXJlY3RvcnkgcGF0aCB0byBhcnRpY2xlCisgICAgICAgICIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgWFBBVEggZXh0ZW5zaW9uIGlzIG5vdCBhY3RpdmVseSB1c2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogCi0gICAgICAgIHJlc3AgPSBzZWxmLnNob3J0Y21kKCdYUEFUSCB7MH0nLmZvcm1hdChpZCkpCi0gICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoYicyMjMnKToKKyAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdYUEFUSCB7MH0nLmZvcm1hdChpZCkpCisgICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoJzIyMycpOgogICAgICAgICAgICAgcmFpc2UgTk5UUFJlcGx5RXJyb3IocmVzcCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgW3Jlc3BfbnVtLCBwYXRoXSA9IHJlc3Auc3BsaXQoKQpAQCAtNTI4LDg5ICs4NDQsMjU4IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gcmVzcCwgcGF0aAogCi0gICAgZGVmIGRhdGUgKHNlbGYpOgotICAgICAgICAiIiJQcm9jZXNzIHRoZSBEQVRFIGNvbW1hbmQuIEFyZ3VtZW50czoKLSAgICAgICAgTm9uZQorICAgIGRlZiBkYXRlKHNlbGYpOgorICAgICAgICAiIiJQcm9jZXNzIHRoZSBEQVRFIGNvbW1hbmQuCiAgICAgICAgIFJldHVybnM6Ci0gICAgICAgIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCi0gICAgICAgIGRhdGU6IERhdGUgc3VpdGFibGUgZm9yIG5ld25ld3MvbmV3Z3JvdXBzIGNvbW1hbmRzIGV0Yy4KLSAgICAgICAgdGltZTogVGltZSBzdWl0YWJsZSBmb3IgbmV3bmV3cy9uZXdncm91cHMgY29tbWFuZHMgZXRjLiIiIgotCi0gICAgICAgIHJlc3AgPSBzZWxmLnNob3J0Y21kKCJEQVRFIikKLSAgICAgICAgaWYgbm90IHJlc3Auc3RhcnRzd2l0aChiJzExMScpOgorICAgICAgICAtIHJlc3A6IHNlcnZlciByZXNwb25zZSBpZiBzdWNjZXNzZnVsCisgICAgICAgIC0gZGF0ZTogZGF0ZXRpbWUgb2JqZWN0CisgICAgICAgICIiIgorICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoIkRBVEUiKQorICAgICAgICBpZiBub3QgcmVzcC5zdGFydHN3aXRoKCcxMTEnKToKICAgICAgICAgICAgIHJhaXNlIE5OVFBSZXBseUVycm9yKHJlc3ApCiAgICAgICAgIGVsZW0gPSByZXNwLnNwbGl0KCkKICAgICAgICAgaWYgbGVuKGVsZW0pICE9IDI6CiAgICAgICAgICAgICByYWlzZSBOTlRQRGF0YUVycm9yKHJlc3ApCi0gICAgICAgIGRhdGUgPSBlbGVtWzFdWzI6OF0KLSAgICAgICAgdGltZSA9IGVsZW1bMV1bLTY6XQotICAgICAgICBpZiBsZW4oZGF0ZSkgIT0gNiBvciBsZW4odGltZSkgIT0gNjoKKyAgICAgICAgZGF0ZSA9IGVsZW1bMV0KKyAgICAgICAgaWYgbGVuKGRhdGUpICE9IDE0OgogICAgICAgICAgICAgcmFpc2UgTk5UUERhdGFFcnJvcihyZXNwKQotICAgICAgICByZXR1cm4gcmVzcCwgZGF0ZSwgdGltZQorICAgICAgICByZXR1cm4gcmVzcCwgX3BhcnNlX2RhdGV0aW1lKGRhdGUsIE5vbmUpCiAKICAgICBkZWYgX3Bvc3Qoc2VsZiwgY29tbWFuZCwgZik6Ci0gICAgICAgIHJlc3AgPSBzZWxmLnNob3J0Y21kKGNvbW1hbmQpCi0gICAgICAgICMgUmFpc2VzIGVycm9yXz8/PyBpZiBwb3N0aW5nIGlzIG5vdCBhbGxvd2VkCi0gICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoYiczJyk6CisgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZChjb21tYW5kKQorICAgICAgICAjIFJhaXNlcyBhIHNwZWNpZmljIGV4Y2VwdGlvbiBpZiBwb3N0aW5nIGlzIG5vdCBhbGxvd2VkCisgICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoJzMnKToKICAgICAgICAgICAgIHJhaXNlIE5OVFBSZXBseUVycm9yKHJlc3ApCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgaWYgbGluZS5lbmRzd2l0aChiJ1xuJyk6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICBpZiBpc2luc3RhbmNlKGYsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBmID0gZi5zcGxpdGxpbmVzKCkKKyAgICAgICAgIyBXZSBkb24ndCB1c2UgX3B1dGxpbmUoKSBiZWNhdXNlOgorICAgICAgICAjIC0gd2UgZG9uJ3Qgd2FudCBhZGRpdGlvbmFsIENSTEYgaWYgdGhlIGZpbGUgb3IgaXRlcmFibGUgaXMgYWxyZWFkeQorICAgICAgICAjICAgaW4gdGhlIHJpZ2h0IGZvcm1hdAorICAgICAgICAjIC0gd2UgZG9uJ3Qgd2FudCBhIHNwdXJpb3VzIGZsdXNoKCkgYWZ0ZXIgZWFjaCBsaW5lIGlzIHdyaXR0ZW4KKyAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLmVuZHN3aXRoKF9DUkxGKToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoYiJcclxuIikgKyBfQ1JMRgogICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKGInLicpOgogICAgICAgICAgICAgICAgIGxpbmUgPSBiJy4nICsgbGluZQotICAgICAgICAgICAgc2VsZi5wdXRsaW5lKGxpbmUpCi0gICAgICAgIHNlbGYucHV0bGluZShiJy4nKQotICAgICAgICByZXR1cm4gc2VsZi5nZXRyZXNwKCkKKyAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShsaW5lKQorICAgICAgICBzZWxmLmZpbGUud3JpdGUoYiIuXHJcbiIpCisgICAgICAgIHNlbGYuZmlsZS5mbHVzaCgpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRyZXNwKCkKIAotICAgIGRlZiBwb3N0KHNlbGYsIGYpOgorICAgIGRlZiBwb3N0KHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJQcm9jZXNzIGEgUE9TVCBjb21tYW5kLiAgQXJndW1lbnRzOgotICAgICAgICAtIGY6IGZpbGUgY29udGFpbmluZyB0aGUgYXJ0aWNsZQorICAgICAgICAtIGRhdGE6IGJ5dGVzIG9iamVjdCwgaXRlcmFibGUgb3IgZmlsZSBjb250YWluaW5nIHRoZSBhcnRpY2xlCiAgICAgICAgIFJldHVybnM6CiAgICAgICAgIC0gcmVzcDogc2VydmVyIHJlc3BvbnNlIGlmIHN1Y2Nlc3NmdWwiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Bvc3QoJ1BPU1QnLCBmKQorICAgICAgICByZXR1cm4gc2VsZi5fcG9zdCgnUE9TVCcsIGRhdGEpCiAKLSAgICBkZWYgaWhhdmUoc2VsZiwgaWQsIGYpOgorICAgIGRlZiBpaGF2ZShzZWxmLCBtZXNzYWdlX2lkLCBkYXRhKToKICAgICAgICAgIiIiUHJvY2VzcyBhbiBJSEFWRSBjb21tYW5kLiAgQXJndW1lbnRzOgotICAgICAgICAtIGlkOiBtZXNzYWdlLWlkIG9mIHRoZSBhcnRpY2xlCi0gICAgICAgIC0gZjogIGZpbGUgY29udGFpbmluZyB0aGUgYXJ0aWNsZQorICAgICAgICAtIG1lc3NhZ2VfaWQ6IG1lc3NhZ2UtaWQgb2YgdGhlIGFydGljbGUKKyAgICAgICAgLSBkYXRhOiBmaWxlIGNvbnRhaW5pbmcgdGhlIGFydGljbGUKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bAogICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIHNlcnZlciByZWZ1c2VzIHRoZSBhcnRpY2xlIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9wb3N0KCdJSEFWRSB7MH0nLmZvcm1hdChpZCksIGYpCisgICAgICAgIHJldHVybiBzZWxmLl9wb3N0KCdJSEFWRSB7MH0nLmZvcm1hdChtZXNzYWdlX2lkKSwgZGF0YSkKKworICAgIGRlZiBfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLmZpbGUKIAogICAgIGRlZiBxdWl0KHNlbGYpOgogICAgICAgICAiIiJQcm9jZXNzIGEgUVVJVCBjb21tYW5kIGFuZCBjbG9zZSB0aGUgc29ja2V0LiAgUmV0dXJuczoKICAgICAgICAgLSByZXNwOiBzZXJ2ZXIgcmVzcG9uc2UgaWYgc3VjY2Vzc2Z1bCIiIgotCi0gICAgICAgIHJlc3AgPSBzZWxmLnNob3J0Y21kKCdRVUlUJykKLSAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgZGVsIHNlbGYuZmlsZSwgc2VsZi5zb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZCgnUVVJVCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9jbG9zZSgpCiAgICAgICAgIHJldHVybiByZXNwCiAKKyAgICBkZWYgbG9naW4oc2VsZiwgdXNlcj1Ob25lLCBwYXNzd29yZD1Ob25lLCB1c2VuZXRyYz1UcnVlKToKKyAgICAgICAgaWYgc2VsZi5hdXRoZW50aWNhdGVkOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQWxyZWFkeSBsb2dnZWQgaW4uIikKKyAgICAgICAgaWYgbm90IHVzZXIgYW5kIG5vdCB1c2VuZXRyYzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIkF0IGxlYXN0IG9uZSBvZiBgdXNlcmAgYW5kIGB1c2VuZXRyY2AgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAjIElmIG5vIGxvZ2luL3Bhc3N3b3JkIHdhcyBzcGVjaWZpZWQgYnV0IG5ldHJjIHdhcyByZXF1ZXN0ZWQsCisgICAgICAgICMgdHJ5IHRvIGdldCB0aGVtIGZyb20gfi8ubmV0cmMKKyAgICAgICAgIyBQcmVzdW1lIHRoYXQgaWYgLm5ldHJjIGhhcyBhbiBlbnRyeSwgTk5SUCBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdXNlbmV0cmMgYW5kIG5vdCB1c2VyOgorICAgICAgICAgICAgICAgIGltcG9ydCBuZXRyYworICAgICAgICAgICAgICAgIGNyZWRlbnRpYWxzID0gbmV0cmMubmV0cmMoKQorICAgICAgICAgICAgICAgIGF1dGggPSBjcmVkZW50aWFscy5hdXRoZW50aWNhdG9ycyhzZWxmLmhvc3QpCisgICAgICAgICAgICAgICAgaWYgYXV0aDoKKyAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KKyAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICAjIFBlcmZvcm0gTk5UUCBhdXRoZW50aWNhdGlvbiBpZiBuZWVkZWQuCisgICAgICAgIGlmIG5vdCB1c2VyOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHJlc3AgPSBzZWxmLl9zaG9ydGNtZCgnYXV0aGluZm8gdXNlciAnICsgdXNlcikKKyAgICAgICAgaWYgcmVzcC5zdGFydHN3aXRoKCczODEnKToKKyAgICAgICAgICAgIGlmIG5vdCBwYXNzd29yZDoKKyAgICAgICAgICAgICAgICByYWlzZSBOTlRQUmVwbHlFcnJvcihyZXNwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ2F1dGhpbmZvIHBhc3MgJyArIHBhc3N3b3JkKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZXNwLnN0YXJ0c3dpdGgoJzI4MScpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBOTlRQUGVybWFuZW50RXJyb3IocmVzcCkKKyAgICAgICAgIyBBdHRlbXB0IHRvIHNlbmQgbW9kZSByZWFkZXIgaWYgaXQgd2FzIHJlcXVlc3RlZCBhZnRlciBsb2dpbi4KKyAgICAgICAgaWYgc2VsZi5yZWFkZXJtb2RlX2FmdGVyYXV0aDoKKyAgICAgICAgICAgIHNlbGYuX3NldHJlYWRlcm1vZGUoKQorCisgICAgZGVmIF9zZXRyZWFkZXJtb2RlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLndlbGNvbWUgPSBzZWxmLl9zaG9ydGNtZCgnbW9kZSByZWFkZXInKQorICAgICAgICBleGNlcHQgTk5UUFBlcm1hbmVudEVycm9yOgorICAgICAgICAgICAgIyBFcnJvciA1eHgsIHByb2JhYmx5ICdub3QgaW1wbGVtZW50ZWQnCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBOTlRQVGVtcG9yYXJ5RXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUucmVzcG9uc2Uuc3RhcnRzd2l0aCgnNDgwJyk6CisgICAgICAgICAgICAgICAgIyBOZWVkIGF1dGhvcml6YXRpb24gYmVmb3JlICdtb2RlIHJlYWRlcicKKyAgICAgICAgICAgICAgICBzZWxmLnJlYWRlcm1vZGVfYWZ0ZXJhdXRoID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgaWYgX2hhdmVfc3NsOgorICAgICAgICBkZWYgc3RhcnR0bHMoc2VsZiwgY29udGV4dD1Ob25lKToKKyAgICAgICAgICAgICIiIlByb2Nlc3MgYSBTVEFSVFRMUyBjb21tYW5kLiBBcmd1bWVudHM6CisgICAgICAgICAgICAtIGNvbnRleHQ6IFNTTCBjb250ZXh0IHRvIHVzZSBmb3IgdGhlIGVuY3J5cHRlZCBjb25uZWN0aW9uCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICMgUGVyIFJGQyA0NjQyLCBTVEFSVFRMUyBNVVNUIE5PVCBiZSBzZW50IGFmdGVyIGF1dGhlbnRpY2F0aW9uIG9yIGlmCisgICAgICAgICAgICAjIGEgVExTIHNlc3Npb24gYWxyZWFkeSBleGlzdHMuCisgICAgICAgICAgICBpZiBzZWxmLnRsc19vbjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUTFMgaXMgYWxyZWFkeSBlbmFibGVkLiIpCisgICAgICAgICAgICBpZiBzZWxmLmF1dGhlbnRpY2F0ZWQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVExTIGNhbm5vdCBiZSBzdGFydGVkIGFmdGVyIGF1dGhlbnRpY2F0aW9uLiIpCisgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUQVJUVExTJykKKyAgICAgICAgICAgIGlmIHJlc3Auc3RhcnRzd2l0aCgnMzgyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIGNvbnRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX29uID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgQ2FwYWJpbGl0aWVzIG1heSBjaGFuZ2UgYWZ0ZXIgVExTIHN0YXJ0cyB1cCwgc28gYXNrIGZvciB0aGVtCisgICAgICAgICAgICAgICAgIyBhZ2Fpbi4KKyAgICAgICAgICAgICAgICBzZWxmLl9jYXBzID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y2FwYWJpbGl0aWVzKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgTk5UUEVycm9yKCJUTFMgZmFpbGVkIHRvIHN0YXJ0LiIpCisKKworY2xhc3MgTk5UUChfTk5UUEJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tk5UUF9QT1JULCB1c2VyPU5vbmUsIHBhc3N3b3JkPU5vbmUsCisgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9Tm9uZSwgdXNlbmV0cmM9RmFsc2UsCisgICAgICAgICAgICAgICAgIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgICAgICAiIiJJbml0aWFsaXplIGFuIGluc3RhbmNlLiAgQXJndW1lbnRzOgorICAgICAgICAtIGhvc3Q6IGhvc3RuYW1lIHRvIGNvbm5lY3QgdG8KKyAgICAgICAgLSBwb3J0OiBwb3J0IHRvIGNvbm5lY3QgdG8gKGRlZmF1bHQgdGhlIHN0YW5kYXJkIE5OVFAgcG9ydCkKKyAgICAgICAgLSB1c2VyOiB1c2VybmFtZSB0byBhdXRoZW50aWNhdGUgd2l0aAorICAgICAgICAtIHBhc3N3b3JkOiBwYXNzd29yZCB0byB1c2Ugd2l0aCB1c2VybmFtZQorICAgICAgICAtIHJlYWRlcm1vZGU6IGlmIHRydWUsIHNlbmQgJ21vZGUgcmVhZGVyJyBjb21tYW5kIGFmdGVyCisgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGluZy4KKyAgICAgICAgLSB1c2VuZXRyYzogYWxsb3cgbG9hZGluZyB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZnJvbSB+Ly5uZXRyYyBmaWxlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzcGVjaWZpZWQgZXhwbGljaXRseQorICAgICAgICAtIHRpbWVvdXQ6IHRpbWVvdXQgKGluIHNlY29uZHMpIHVzZWQgZm9yIHNvY2tldCBjb25uZWN0aW9ucworCisgICAgICAgIHJlYWRlcm1vZGUgaXMgc29tZXRpbWVzIG5lY2Vzc2FyeSBpZiB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gYW4KKyAgICAgICAgTk5UUCBzZXJ2ZXIgb24gdGhlIGxvY2FsIG1hY2hpbmUgYW5kIGludGVuZCB0byBjYWxsCisgICAgICAgIHJlYWRlci1zcGVjaWZpYyBjb21tYW5kcywgc3VjaCBhcyBgZ3JvdXAnLiAgSWYgeW91IGdldAorICAgICAgICB1bmV4cGVjdGVkIE5OVFBQZXJtYW5lbnRFcnJvcnMsIHlvdSBtaWdodCBuZWVkIHRvIHNldAorICAgICAgICByZWFkZXJtb2RlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQpCisgICAgICAgIGZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoInJ3YiIpCisgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVybW9kZSwgdGltZW91dCkKKyAgICAgICAgaWYgdXNlciBvciB1c2VuZXRyYzoKKyAgICAgICAgICAgIHNlbGYubG9naW4odXNlciwgcGFzc3dvcmQsIHVzZW5ldHJjKQorCisgICAgZGVmIF9jbG9zZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX05OVFBCYXNlLl9jbG9zZShzZWxmKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKworCitpZiBfaGF2ZV9zc2w6CisgICAgY2xhc3MgTk5UUF9TU0woX05OVFBCYXNlKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1OTlRQX1NTTF9QT1JULAorICAgICAgICAgICAgICAgICAgICB1c2VyPU5vbmUsIHBhc3N3b3JkPU5vbmUsIHNzbF9jb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9Tm9uZSwgdXNlbmV0cmM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgICAgICAgICAgIiIiVGhpcyB3b3JrcyBpZGVudGljYWxseSB0byBOTlRQLl9faW5pdF9fLCBleGNlcHQgZm9yIHRoZSBjaGFuZ2UKKyAgICAgICAgICAgIGluIGRlZmF1bHQgcG9ydCBhbmQgdGhlIGBzc2xfY29udGV4dGAgYXJndW1lbnQgZm9yIFNTTCBjb25uZWN0aW9ucy4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCkKKyAgICAgICAgICAgIHNlbGYuc29jayA9IF9lbmNyeXB0X29uKHNlbGYuc29jaywgc3NsX2NvbnRleHQpCisgICAgICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQorICAgICAgICAgICAgX05OVFBCYXNlLl9faW5pdF9fKHNlbGYsIGZpbGUsIGhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVybW9kZT1yZWFkZXJtb2RlLCB0aW1lb3V0PXRpbWVvdXQpCisgICAgICAgICAgICBpZiB1c2VyIG9yIHVzZW5ldHJjOgorICAgICAgICAgICAgICAgIHNlbGYubG9naW4odXNlciwgcGFzc3dvcmQsIHVzZW5ldHJjKQorCisgICAgICAgIGRlZiBfY2xvc2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX05OVFBCYXNlLl9jbG9zZShzZWxmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorCisgICAgX19hbGxfXy5hcHBlbmQoIk5OVFBfU1NMIikKKwogCiAjIFRlc3QgcmV0cmlldmFsIHdoZW4gcnVuIGFzIGEgc2NyaXB0LgotIyBBc3N1bXB0aW9uOiBpZiB0aGVyZSdzIGEgbG9jYWwgbmV3cyBzZXJ2ZXIsIGl0J3MgY2FsbGVkICduZXdzJy4KLSMgQXNzdW1wdGlvbjogaWYgdXNlciBxdWVyaWVzIGEgcmVtb3RlIG5ld3Mgc2VydmVyLCBpdCdzIG5hbWVkCi0jIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBOTlRQU0VSVkVSICh1c2VkIGJ5IHNscm4gYW5kIGtpbikKLSMgYW5kIHdlIHdhbnQgcmVhZGVybW9kZSBvZmYuCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGltcG9ydCBvcwotICAgIG5ld3Nob3N0ID0gJ25ld3MnIGFuZCBvcy5lbnZpcm9uWyJOTlRQU0VSVkVSIl0KLSAgICBpZiBuZXdzaG9zdC5maW5kKCcuJykgPT0gLTE6Ci0gICAgICAgIG1vZGUgPSAncmVhZGVybW9kZScKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBwYXJzZWRhdGUKKworICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKKyAgICAgICAgbm50cGxpYiBidWlsdC1pbiBkZW1vIC0gZGlzcGxheSB0aGUgbGF0ZXN0IGFydGljbGVzIGluIGEgbmV3c2dyb3VwIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1nJywgJy0tZ3JvdXAnLCBkZWZhdWx0PSdnbWFuZS5jb21wLnB5dGhvbi5nZW5lcmFsJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2dyb3VwIHRvIGZldGNoIG1lc3NhZ2VzIGZyb20gKGRlZmF1bHQ6ICUoZGVmYXVsdClzKScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zZXJ2ZXInLCBkZWZhdWx0PSduZXdzLmdtYW5lLm9yZycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdOTlRQIHNlcnZlciBob3N0bmFtZSAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBvcnQnLCBkZWZhdWx0PS0xLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J05OVFAgcG9ydCBudW1iZXIgKGRlZmF1bHQ6ICVzIC8gJXMpJyAlIChOTlRQX1BPUlQsIE5OVFBfU1NMX1BPUlQpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1uJywgJy0tbmItYXJ0aWNsZXMnLCBkZWZhdWx0PTEwLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J251bWJlciBvZiBhcnRpY2xlcyB0byBmZXRjaCAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctUycsICctLXNzbCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd1c2UgTk5UUCBvdmVyIFNTTCcpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKworICAgIHBvcnQgPSBhcmdzLnBvcnQKKyAgICBpZiBub3QgYXJncy5zc2w6CisgICAgICAgIGlmIHBvcnQgPT0gLTE6CisgICAgICAgICAgICBwb3J0ID0gTk5UUF9QT1JUCisgICAgICAgIHMgPSBOTlRQKGhvc3Q9YXJncy5zZXJ2ZXIsIHBvcnQ9cG9ydCkKICAgICBlbHNlOgotICAgICAgICBtb2RlID0gTm9uZQotICAgIHMgPSBOTlRQKG5ld3Nob3N0LCByZWFkZXJtb2RlPW1vZGUpCi0gICAgcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gcy5ncm91cCgnY29tcC5sYW5nLnB5dGhvbicpCi0gICAgcHJpbnQocmVzcCkKKyAgICAgICAgaWYgcG9ydCA9PSAtMToKKyAgICAgICAgICAgIHBvcnQgPSBOTlRQX1NTTF9QT1JUCisgICAgICAgIHMgPSBOTlRQX1NTTChob3N0PWFyZ3Muc2VydmVyLCBwb3J0PXBvcnQpCisKKyAgICBjYXBzID0gcy5nZXRjYXBhYmlsaXRpZXMoKQorICAgIGlmICdTVEFSVFRMUycgaW4gY2FwczoKKyAgICAgICAgcy5zdGFydHRscygpCisgICAgcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gcy5ncm91cChhcmdzLmdyb3VwKQogICAgIHByaW50KCdHcm91cCcsIG5hbWUsICdoYXMnLCBjb3VudCwgJ2FydGljbGVzLCByYW5nZScsIGZpcnN0LCAndG8nLCBsYXN0KQotICAgIHJlc3AsIHN1YnMgPSBzLnhoZHIoJ3N1YmplY3QnLCAnezB9LXsxfScuZm9ybWF0KGZpcnN0LCBsYXN0KSkKLSAgICBwcmludChyZXNwKQotICAgIGZvciBpdGVtIGluIHN1YnM6Ci0gICAgICAgIHByaW50KCIlN3MgJXMiICUgaXRlbSkKLSAgICByZXNwID0gcy5xdWl0KCkKLSAgICBwcmludChyZXNwKQorCisgICAgZGVmIGN1dChzLCBsaW0pOgorICAgICAgICBpZiBsZW4ocykgPiBsaW06CisgICAgICAgICAgICBzID0gc1s6bGltIC0gNF0gKyAiLi4uIgorICAgICAgICByZXR1cm4gcworCisgICAgZmlyc3QgPSBzdHIoaW50KGxhc3QpIC0gYXJncy5uYl9hcnRpY2xlcyArIDEpCisgICAgcmVzcCwgb3ZlcnZpZXdzID0gcy54b3ZlcihmaXJzdCwgbGFzdCkKKyAgICBmb3IgYXJ0bnVtLCBvdmVyIGluIG92ZXJ2aWV3czoKKyAgICAgICAgYXV0aG9yID0gZGVjb2RlX2hlYWRlcihvdmVyWydmcm9tJ10pLnNwbGl0KCc8JywgMSlbMF0KKyAgICAgICAgc3ViamVjdCA9IGRlY29kZV9oZWFkZXIob3Zlclsnc3ViamVjdCddKQorICAgICAgICBsaW5lcyA9IGludChvdmVyWyc6bGluZXMnXSkKKyAgICAgICAgcHJpbnQoIns6N30gezoyMH0gezo0Mn0gKHt9KSIuZm9ybWF0KAorICAgICAgICAgICAgICBhcnRudW0sIGN1dChhdXRob3IsIDIwKSwgY3V0KHN1YmplY3QsIDQyKSwgbGluZXMpCisgICAgICAgICAgICAgICkKKworICAgIHMucXVpdCgpCmRpZmYgLS1naXQgYS9MaWIvbnRwYXRoLnB5IGIvTGliL250cGF0aC5weQppbmRleCBhZTlkY2YyLi40MTkzNDJkIDEwMDY0NAotLS0gYS9MaWIvbnRwYXRoLnB5CisrKyBiL0xpYi9udHBhdGgucHkKQEAgLTE2LDcgKzE2LDggQEAKICAgICAgICAgICAgImdldGF0aW1lIiwiZ2V0Y3RpbWUiLCAiaXNsaW5rIiwiZXhpc3RzIiwibGV4aXN0cyIsImlzZGlyIiwiaXNmaWxlIiwKICAgICAgICAgICAgImlzbW91bnQiLCAiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAogICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCi0gICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyIsInJlbHBhdGgiXQorICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiLCJyZWxwYXRoIiwKKyAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsXQogCiAjIHN0cmluZ3MgcmVwcmVzZW50aW5nIHZhcmlvdXMgcGF0aC1yZWxhdGVkIGJpdHMgYW5kIHBpZWNlcwogIyBUaGVzZSBhcmUgcHJpbWFyaWx5IGZvciBleHBvcnQ7IGludGVybmFsbHksIHRoZXkgYXJlIGhhcmRjb2RlZC4KQEAgLTg0LDYgKzg1LDkgQEAKICAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4KIAogICAgIE1ha2VzIGFsbCBjaGFyYWN0ZXJzIGxvd2VyY2FzZSBhbmQgYWxsIHNsYXNoZXMgaW50byBiYWNrc2xhc2hlcy4iIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgICByZXR1cm4gcy5yZXBsYWNlKF9nZXRfYWx0c2VwKHMpLCBfZ2V0X3NlcChzKSkubG93ZXIoKQogCiAKQEAgLTIzOSw3ICsyNDMsNyBAQAogICAgICIiIgogICAgIGltcG9ydCB3YXJuaW5ncwogICAgIHdhcm5pbmdzLndhcm4oIm50cGF0aC5zcGxpdHVuYyBpcyBkZXByZWNhdGVkLCB1c2UgbnRwYXRoLnNwbGl0ZHJpdmUgaW5zdGVhZCIsCi0gICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQogICAgIHNlcCA9IF9nZXRfc2VwKHApCiAgICAgaWYgbm90IHBbMToyXToKICAgICAgICAgcmV0dXJuIHBbOjBdLCBwICMgRHJpdmUgbGV0dGVyIHByZXNlbnQKQEAgLTMxMiwxNiArMzE2LDI4IEBACiAgICAgcmV0dXJuIHNwbGl0KHApWzBdCiAKICMgSXMgYSBwYXRoIGEgc3ltYm9saWMgbGluaz8KLSMgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2Ugb24gc3lzdGVtcyB3aGVyZSBwb3NpeC5sc3RhdCBkb2Vzbid0IGV4aXN0LgorIyBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBvbiBzeXN0ZW1zIHdoZXJlIG9zLmxzdGF0IGRvZXNuJ3QgZXhpc3QuCiAKIGRlZiBpc2xpbmsocGF0aCk6Ci0gICAgIiIiVGVzdCBmb3Igc3ltYm9saWMgbGluay4KLSAgICBPbiBXaW5kb3dzTlQvOTUgYW5kIE9TLzIgYWx3YXlzIHJldHVybnMgZmFsc2UKKyAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KKyAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAKKyAgICBhbmQgZm9yIE9TLzIuCiAgICAgIiIiCi0gICAgcmV0dXJuIEZhbHNlCisgICAgdHJ5OgorICAgICAgICBzdCA9IG9zLmxzdGF0KHBhdGgpCisgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gc3RhdC5TX0lTTE5LKHN0LnN0X21vZGUpCiAKLSMgYWxpYXMgZXhpc3RzIHRvIGxleGlzdHMKLWxleGlzdHMgPSBleGlzdHMKKyMgQmVpbmcgdHJ1ZSBmb3IgZGFuZ2xpbmcgc3ltYm9saWMgbGlua3MgaXMgYWxzbyB1c2VmdWwuCisKK2RlZiBsZXhpc3RzKHBhdGgpOgorICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKKyAgICB0cnk6CisgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKKyAgICBleGNlcHQgKG9zLmVycm9yLCBXaW5kb3dzRXJyb3IpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQogCiAjIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKICMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KQEAgLTYyMiwzICs2MzgsMzcgQEAKICAgICBpZiBub3QgcmVsX2xpc3Q6CiAgICAgICAgIHJldHVybiBfZ2V0X2RvdChwYXRoKQogICAgIHJldHVybiBqb2luKCpyZWxfbGlzdCkKKworCisjIGRldGVybWluZSBpZiB0d28gZmlsZXMgYXJlIGluIGZhY3QgdGhlIHNhbWUgZmlsZQordHJ5OgorICAgICMgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIGlzIGF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFdpbmRvd3MgNi4wLgorICAgICMgV2luZG93cyBYUCBhbmQgbm9uLVdpbmRvd3MgT1MnZXMgd2lsbCBtb2NrIF9nZXRmaW5hbHBhdGhuYW1lLgorICAgIGlmIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXSA+PSAoNiwgMCk6CisgICAgICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaW5hbHBhdGhuYW1lCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKK2V4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKToKKyAgICAjIE9uIFdpbmRvd3MgWFAgYW5kIGVhcmxpZXIsIHR3byBmaWxlcyBhcmUgdGhlIHNhbWUgaWYgdGhlaXIgYWJzb2x1dGUKKyAgICAjIHBhdGhuYW1lcyBhcmUgdGhlIHNhbWUuCisgICAgIyBOb24tV2luZG93cyBvcGVyYXRpbmcgc3lzdGVtcyBmYWtlIHRoaXMgbWV0aG9kIHdpdGggYW4gWFAKKyAgICAjIGFwcHJveGltYXRpb24uCisgICAgZGVmIF9nZXRmaW5hbHBhdGhuYW1lKGYpOgorICAgICAgICByZXR1cm4gYWJzcGF0aChmKQorCitkZWYgc2FtZWZpbGUoZjEsIGYyKToKKyAgICAiVGVzdCB3aGV0aGVyIHR3byBwYXRobmFtZXMgcmVmZXJlbmNlIHRoZSBzYW1lIGFjdHVhbCBmaWxlIgorICAgIHJldHVybiBfZ2V0ZmluYWxwYXRobmFtZShmMSkgPT0gX2dldGZpbmFscGF0aG5hbWUoZjIpCisKKwordHJ5OgorICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaWxlaW5mb3JtYXRpb24KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIE9uIG90aGVyIG9wZXJhdGluZyBzeXN0ZW1zLCBqdXN0IHJldHVybiB0aGUgZmQgYW5kIHNlZSB0aGF0CisgICAgIyBpdCBjb21wYXJlcyBlcXVhbCBpbiBzYW1lb3BlbmZpbGUuCisgICAgZGVmIF9nZXRmaWxlaW5mb3JtYXRpb24oZmQpOgorICAgICAgICByZXR1cm4gZmQKKworZGVmIHNhbWVvcGVuZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCisgICAgcmV0dXJuIF9nZXRmaWxlaW5mb3JtYXRpb24oZjEpID09IF9nZXRmaWxlaW5mb3JtYXRpb24oZjIpCmRpZmYgLS1naXQgYS9MaWIvbnVtYmVycy5weSBiL0xpYi9udW1iZXJzLnB5CmluZGV4IDIwMWRjM2MuLmYzNTcwNGQgMTAwNjQ0Ci0tLSBhL0xpYi9udW1iZXJzLnB5CisrKyBiL0xpYi9udW1iZXJzLnB5CkBAIC0zMDMsNyArMzAzLDcgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKLSAgICAgICAgIiIiaW5kZXgoc2VsZikiIiIKKyAgICAgICAgIiIic29tZW9iamVjdFtzZWxmXSIiIgogICAgICAgICByZXR1cm4gaW50KHNlbGYpCiAKICAgICBAYWJzdHJhY3RtZXRob2QKZGlmZiAtLWdpdCBhL0xpYi9vcGNvZGUucHkgYi9MaWIvb3Bjb2RlLnB5CmluZGV4IDg2ZWJjNWM1Li44ZTE1ZDEzIDEwMDY0NAotLS0gYS9MaWIvb3Bjb2RlLnB5CisrKyBiL0xpYi9vcGNvZGUucHkKQEAgLTQ4LDcgKzQ4LDcgQEAKIGRlZl9vcCgnUk9UX1RXTycsIDIpCiBkZWZfb3AoJ1JPVF9USFJFRScsIDMpCiBkZWZfb3AoJ0RVUF9UT1AnLCA0KQotZGVmX29wKCdST1RfRk9VUicsIDUpCitkZWZfb3AoJ0RVUF9UT1BfVFdPJywgNSkKIAogZGVmX29wKCdOT1AnLCA5KQogZGVmX29wKCdVTkFSWV9QT1NJVElWRScsIDEwKQpAQCAtMTE2LDcgKzExNiw2IEBACiBuYW1lX29wKCdERUxFVEVfQVRUUicsIDk2KSAgICAgICMgIiIKIG5hbWVfb3AoJ1NUT1JFX0dMT0JBTCcsIDk3KSAgICAgIyAiIgogbmFtZV9vcCgnREVMRVRFX0dMT0JBTCcsIDk4KSAgICAjICIiCi1kZWZfb3AoJ0RVUF9UT1BYJywgOTkpICAgICAgICAgICMgbnVtYmVyIG9mIGl0ZW1zIHRvIGR1cGxpY2F0ZQogZGVmX29wKCdMT0FEX0NPTlNUJywgMTAwKSAgICAgICAjIEluZGV4IGluIGNvbnN0IGxpc3QKIGhhc2NvbnN0LmFwcGVuZCgxMDApCiBuYW1lX29wKCdMT0FEX05BTUUnLCAxMDEpICAgICAgICMgSW5kZXggaW4gbmFtZSBsaXN0CkBAIC0xNjIsMTYgKzE2MSwyMCBAQAogaGFzZnJlZS5hcHBlbmQoMTM2KQogZGVmX29wKCdTVE9SRV9ERVJFRicsIDEzNykKIGhhc2ZyZWUuYXBwZW5kKDEzNykKK2RlZl9vcCgnREVMRVRFX0RFUkVGJywgMTM4KQoraGFzZnJlZS5hcHBlbmQoMTM4KQogCiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fVkFSJywgMTQwKSAgICAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fS1cnLCAxNDEpICAgICAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCiBkZWZfb3AoJ0NBTExfRlVOQ1RJT05fVkFSX0tXJywgMTQyKSAgIyAjYXJncyArICgja3dhcmdzIDw8IDgpCi1kZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0MykKLUVYVEVOREVEX0FSRyA9IDE0MworCitqcmVsX29wKCdTRVRVUF9XSVRIJywgMTQzKQogCiBkZWZfb3AoJ0xJU1RfQVBQRU5EJywgMTQ1KQogZGVmX29wKCdTRVRfQUREJywgMTQ2KQogZGVmX29wKCdNQVBfQUREJywgMTQ3KQogCitkZWZfb3AoJ0VYVEVOREVEX0FSRycsIDE0NCkKK0VYVEVOREVEX0FSRyA9IDE0NAogCiBkZWwgZGVmX29wLCBuYW1lX29wLCBqcmVsX29wLCBqYWJzX29wCmRpZmYgLS1naXQgYS9MaWIvb3MucHkgYi9MaWIvb3MucHkKaW5kZXggYjQ2YzAyZi4uYTg5NGVlMCAxMDA2NDQKLS0tIGEvTGliL29zLnB5CisrKyBiL0xpYi9vcy5weQpAQCAtMTE0LDE4ICsxMTQsMjYgQEAKIFNFRUtfQ1VSID0gMQogU0VFS19FTkQgPSAyCiAKKworZGVmIF9nZXRfbWFza2VkX21vZGUobW9kZSk6CisgICAgbWFzayA9IHVtYXNrKDApCisgICAgdW1hc2sobWFzaykKKyAgICByZXR1cm4gbW9kZSAmIH5tYXNrCisKICMnCiAKICMgU3VwZXIgZGlyZWN0b3J5IHV0aWxpdGllcy4KICMgKEluc3BpcmVkIGJ5IEVyaWMgUmF5bW9uZDsgdGhlIGRvYyBzdHJpbmdzIGFyZSBtb3N0bHkgaGlzKQogCi1kZWYgbWFrZWRpcnMobmFtZSwgbW9kZT0wbzc3Nyk6Ci0gICAgIiIibWFrZWRpcnMocGF0aCBbLCBtb2RlPTBvNzc3XSkKK2RlZiBtYWtlZGlycyhuYW1lLCBtb2RlPTBvNzc3LCBleGlzdF9vaz1GYWxzZSk6CisgICAgIiIibWFrZWRpcnMocGF0aCBbLCBtb2RlPTBvNzc3XVssIGV4aXN0X29rPUZhbHNlXSkKIAogICAgIFN1cGVyLW1rZGlyOyBjcmVhdGUgYSBsZWFmIGRpcmVjdG9yeSBhbmQgYWxsIGludGVybWVkaWF0ZSBvbmVzLgogICAgIFdvcmtzIGxpa2UgbWtkaXIsIGV4Y2VwdCB0aGF0IGFueSBpbnRlcm1lZGlhdGUgcGF0aCBzZWdtZW50IChub3QKLSAgICBqdXN0IHRoZSByaWdodG1vc3QpIHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gIFRoaXMgaXMKLSAgICByZWN1cnNpdmUuCisgICAganVzdCB0aGUgcmlnaHRtb3N0KSB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgZXhpc3QuIElmIHRoZQorICAgIHRhcmdldCBkaXJlY3Rvcnkgd2l0aCB0aGUgc2FtZSBtb2RlIGFzIHdlIHNwZWNpZmllZCBhbHJlYWR5IGV4aXN0cywKKyAgICByYWlzZXMgYW4gT1NFcnJvciBpZiBleGlzdF9vayBpcyBGYWxzZSwgb3RoZXJ3aXNlIG5vIGV4Y2VwdGlvbiBpcworICAgIHJhaXNlZC4gIFRoaXMgaXMgcmVjdXJzaXZlLgogCiAgICAgIiIiCiAgICAgaGVhZCwgdGFpbCA9IHBhdGguc3BsaXQobmFtZSkKQEAgLTEzMywxNCArMTQxLDIwIEBACiAgICAgICAgIGhlYWQsIHRhaWwgPSBwYXRoLnNwbGl0KGhlYWQpCiAgICAgaWYgaGVhZCBhbmQgdGFpbCBhbmQgbm90IHBhdGguZXhpc3RzKGhlYWQpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtYWtlZGlycyhoZWFkLCBtb2RlKQorICAgICAgICAgICAgbWFrZWRpcnMoaGVhZCwgbW9kZSwgZXhpc3Rfb2spCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIGJlIGhhcHB5IGlmIHNvbWVvbmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBwYXRoCiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICBpZiB0YWlsID09IGN1cmRpcjogICAgICAgICAgICMgeHh4L25ld2Rpci8uIGV4aXN0cyBpZiB4eHgvbmV3ZGlyIGV4aXN0cwogICAgICAgICAgICAgcmV0dXJuCi0gICAgbWtkaXIobmFtZSwgbW9kZSkKKyAgICB0cnk6CisgICAgICAgIG1rZGlyKG5hbWUsIG1vZGUpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgaW1wb3J0IHN0YXQgYXMgc3QKKyAgICAgICAgaWYgbm90IChlLmVycm5vID09IGVycm5vLkVFWElTVCBhbmQgZXhpc3Rfb2sgYW5kIHBhdGguaXNkaXIobmFtZSkgYW5kCisgICAgICAgICAgICAgICAgc3QuU19JTU9ERShsc3RhdChuYW1lKS5zdF9tb2RlKSA9PSBfZ2V0X21hc2tlZF9tb2RlKG1vZGUpKToKKyAgICAgICAgICAgIHJhaXNlCiAKIGRlZiByZW1vdmVkaXJzKG5hbWUpOgogICAgICIiInJlbW92ZWRpcnMocGF0aCkKQEAgLTI0OSw3ICsyNjMsNyBAQAogICAgICAgICAgICAgZGlycy5yZW1vdmUoJ0NWUycpICAjIGRvbid0IHZpc2l0IENWUyBkaXJlY3RvcmllcwogICAgICIiIgogCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBpc2RpciwgaXNsaW5rCisgICAgaXNsaW5rLCBqb2luLCBpc2RpciA9IHBhdGguaXNsaW5rLCBwYXRoLmpvaW4sIHBhdGguaXNkaXIKIAogICAgICMgV2UgbWF5IG5vdCBoYXZlIHJlYWQgcGVybWlzc2lvbiBmb3IgdG9wLCBpbiB3aGljaCBjYXNlIHdlIGNhbid0CiAgICAgIyBnZXQgYSBsaXN0IG9mIHRoZSBmaWxlcyB0aGUgZGlyZWN0b3J5IGNvbnRhaW5zLiAgb3Mud2FsawpAQCAtMjc1LDkgKzI4OSw5IEBACiAgICAgaWYgdG9wZG93bjoKICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCiAgICAgZm9yIG5hbWUgaW4gZGlyczoKLSAgICAgICAgcGF0aCA9IGpvaW4odG9wLCBuYW1lKQotICAgICAgICBpZiBmb2xsb3dsaW5rcyBvciBub3QgaXNsaW5rKHBhdGgpOgotICAgICAgICAgICAgZm9yIHggaW4gd2FsayhwYXRoLCB0b3Bkb3duLCBvbmVycm9yLCBmb2xsb3dsaW5rcyk6CisgICAgICAgIG5ld19wYXRoID0gam9pbih0b3AsIG5hbWUpCisgICAgICAgIGlmIGZvbGxvd2xpbmtzIG9yIG5vdCBpc2xpbmsobmV3X3BhdGgpOgorICAgICAgICAgICAgZm9yIHggaW4gd2FsayhuZXdfcGF0aCwgdG9wZG93biwgb25lcnJvciwgZm9sbG93bGlua3MpOgogICAgICAgICAgICAgICAgIHlpZWxkIHgKICAgICBpZiBub3QgdG9wZG93bjoKICAgICAgICAgeWllbGQgdG9wLCBkaXJzLCBub25kaXJzCkBAIC0zNDIsMjggKzM1NiwyNyBAQAogCiBkZWYgX2V4ZWN2cGUoZmlsZSwgYXJncywgZW52PU5vbmUpOgogICAgIGlmIGVudiBpcyBub3QgTm9uZToKLSAgICAgICAgZnVuYyA9IGV4ZWN2ZQorICAgICAgICBleGVjX2Z1bmMgPSBleGVjdmUKICAgICAgICAgYXJncmVzdCA9IChhcmdzLCBlbnYpCiAgICAgZWxzZToKLSAgICAgICAgZnVuYyA9IGV4ZWN2CisgICAgICAgIGV4ZWNfZnVuYyA9IGV4ZWN2CiAgICAgICAgIGFyZ3Jlc3QgPSAoYXJncywpCiAgICAgICAgIGVudiA9IGVudmlyb24KIAogICAgIGhlYWQsIHRhaWwgPSBwYXRoLnNwbGl0KGZpbGUpCiAgICAgaWYgaGVhZDoKLSAgICAgICAgZnVuYyhmaWxlLCAqYXJncmVzdCkKKyAgICAgICAgZXhlY19mdW5jKGZpbGUsICphcmdyZXN0KQogICAgICAgICByZXR1cm4KLSAgICBpZiAnUEFUSCcgaW4gZW52OgotICAgICAgICBlbnZwYXRoID0gZW52WydQQVRIJ10KLSAgICBlbHNlOgotICAgICAgICBlbnZwYXRoID0gZGVmcGF0aAotICAgIFBBVEggPSBlbnZwYXRoLnNwbGl0KHBhdGhzZXApCiAgICAgbGFzdF9leGMgPSBzYXZlZF9leGMgPSBOb25lCiAgICAgc2F2ZWRfdGIgPSBOb25lCi0gICAgZm9yIGRpciBpbiBQQVRIOgorICAgIHBhdGhfbGlzdCA9IGdldF9leGVjX3BhdGgoZW52KQorICAgIGlmIG5hbWUgIT0gJ250JzoKKyAgICAgICAgZmlsZSA9IGZzZW5jb2RlKGZpbGUpCisgICAgICAgIHBhdGhfbGlzdCA9IG1hcChmc2VuY29kZSwgcGF0aF9saXN0KQorICAgIGZvciBkaXIgaW4gcGF0aF9saXN0OgogICAgICAgICBmdWxsbmFtZSA9IHBhdGguam9pbihkaXIsIGZpbGUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmMoZnVsbG5hbWUsICphcmdyZXN0KQorICAgICAgICAgICAgZXhlY19mdW5jKGZ1bGxuYW1lLCAqYXJncmVzdCkKICAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CiAgICAgICAgICAgICBsYXN0X2V4YyA9IGUKICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KQEAgLTM3NiwzOSArMzg5LDg5IEBACiAgICAgcmFpc2UgbGFzdF9leGMud2l0aF90cmFjZWJhY2sodGIpCiAKIAorZGVmIGdldF9leGVjX3BhdGgoZW52PU5vbmUpOgorICAgICIiIlJldHVybnMgdGhlIHNlcXVlbmNlIG9mIGRpcmVjdG9yaWVzIHRoYXQgd2lsbCBiZSBzZWFyY2hlZCBmb3IgdGhlCisgICAgbmFtZWQgZXhlY3V0YWJsZSAoc2ltaWxhciB0byBhIHNoZWxsKSB3aGVuIGxhdW5jaGluZyBhIHByb2Nlc3MuCisKKyAgICAqZW52KiBtdXN0IGJlIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGRpY3Qgb3IgTm9uZS4gIElmICplbnYqIGlzIE5vbmUsCisgICAgb3MuZW52aXJvbiB3aWxsIGJlIHVzZWQuCisgICAgIiIiCisgICAgIyBVc2UgYSBsb2NhbCBpbXBvcnQgaW5zdGVhZCBvZiBhIGdsb2JhbCBpbXBvcnQgdG8gbGltaXQgdGhlIG51bWJlciBvZgorICAgICMgbW9kdWxlcyBsb2FkZWQgYXQgc3RhcnR1cDogdGhlIG9zIG1vZHVsZSBpcyBhbHdheXMgbG9hZGVkIGF0IHN0YXJ0dXAgYnkKKyAgICAjIFB5dGhvbi4gSXQgbWF5IGFsc28gYXZvaWQgYSBib290c3RyYXAgaXNzdWUuCisgICAgaW1wb3J0IHdhcm5pbmdzCisKKyAgICBpZiBlbnYgaXMgTm9uZToKKyAgICAgICAgZW52ID0gZW52aXJvbgorCisgICAgIyB7YidQQVRIJzogLi4ufS5nZXQoJ1BBVEgnKSBhbmQgeydQQVRIJzogLi4ufS5nZXQoYidQQVRIJykgZW1pdCBhCisgICAgIyBCeXRlc1dhcm5pbmcgd2hlbiB1c2luZyBweXRob24gLWIgb3IgcHl0aG9uIC1iYjogaWdub3JlIHRoZSB3YXJuaW5nCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIEJ5dGVzV2FybmluZykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoX2xpc3QgPSBlbnYuZ2V0KCdQQVRIJykKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhdGhfbGlzdCA9IE5vbmUKKworICAgICAgICBpZiBzdXBwb3J0c19ieXRlc19lbnZpcm9uOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBhdGhfbGlzdGIgPSBlbnZbYidQQVRIJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXRoX2xpc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiZW52IGNhbm5vdCBjb250YWluICdQQVRIJyBhbmQgYidQQVRIJyBrZXlzIikKKyAgICAgICAgICAgICAgICBwYXRoX2xpc3QgPSBwYXRoX2xpc3RiCisKKyAgICAgICAgICAgIGlmIHBhdGhfbGlzdCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShwYXRoX2xpc3QsIGJ5dGVzKToKKyAgICAgICAgICAgICAgICBwYXRoX2xpc3QgPSBmc2RlY29kZShwYXRoX2xpc3QpCisKKyAgICBpZiBwYXRoX2xpc3QgaXMgTm9uZToKKyAgICAgICAgcGF0aF9saXN0ID0gZGVmcGF0aAorICAgIHJldHVybiBwYXRoX2xpc3Quc3BsaXQocGF0aHNlcCkKKworCiAjIENoYW5nZSBlbnZpcm9uIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCBwdXRlbnYoKSwgdW5zZXRlbnYgaWYgdGhleSBleGlzdC4KIGZyb20gX2FiY29sbCBpbXBvcnQgTXV0YWJsZU1hcHBpbmcgICMgQ2FuJ3QgdXNlIGNvbGxlY3Rpb25zIChib290c3RyYXApCiAKIGNsYXNzIF9FbnZpcm9uKE11dGFibGVNYXBwaW5nKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZW52aXJvbiwga2V5bWFwLCBwdXRlbnYsIHVuc2V0ZW52KToKLSAgICAgICAgc2VsZi5rZXltYXAgPSBrZXltYXAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YSwgZW5jb2Rla2V5LCBkZWNvZGVrZXksIGVuY29kZXZhbHVlLCBkZWNvZGV2YWx1ZSwgcHV0ZW52LCB1bnNldGVudik6CisgICAgICAgIHNlbGYuZW5jb2Rla2V5ID0gZW5jb2Rla2V5CisgICAgICAgIHNlbGYuZGVjb2Rla2V5ID0gZGVjb2Rla2V5CisgICAgICAgIHNlbGYuZW5jb2RldmFsdWUgPSBlbmNvZGV2YWx1ZQorICAgICAgICBzZWxmLmRlY29kZXZhbHVlID0gZGVjb2RldmFsdWUKICAgICAgICAgc2VsZi5wdXRlbnYgPSBwdXRlbnYKICAgICAgICAgc2VsZi51bnNldGVudiA9IHVuc2V0ZW52Ci0gICAgICAgIHNlbGYuZGF0YSA9IGRhdGEgPSB7fQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBlbnZpcm9uLml0ZW1zKCk6Ci0gICAgICAgICAgICBkYXRhW2tleW1hcChrZXkpXSA9IHN0cih2YWx1ZSkKKyAgICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKIAogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gc2VsZi5kYXRhW3NlbGYua2V5bWFwKGtleSldCisgICAgICAgIHZhbHVlID0gc2VsZi5fZGF0YVtzZWxmLmVuY29kZWtleShrZXkpXQorICAgICAgICByZXR1cm4gc2VsZi5kZWNvZGV2YWx1ZSh2YWx1ZSkKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpCisgICAgICAgIGtleSA9IHNlbGYuZW5jb2Rla2V5KGtleSkKKyAgICAgICAgdmFsdWUgPSBzZWxmLmVuY29kZXZhbHVlKHZhbHVlKQogICAgICAgICBzZWxmLnB1dGVudihrZXksIHZhbHVlKQotICAgICAgICBzZWxmLmRhdGFbc2VsZi5rZXltYXAoa2V5KV0gPSB2YWx1ZQorICAgICAgICBzZWxmLl9kYXRhW2tleV0gPSB2YWx1ZQogCiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGtleSk6CisgICAgICAgIGtleSA9IHNlbGYuZW5jb2Rla2V5KGtleSkKICAgICAgICAgc2VsZi51bnNldGVudihrZXkpCi0gICAgICAgIGRlbCBzZWxmLmRhdGFbc2VsZi5rZXltYXAoa2V5KV0KKyAgICAgICAgZGVsIHNlbGYuX2RhdGFba2V5XQogCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGF0YToKLSAgICAgICAgICAgIHlpZWxkIGtleQorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2RhdGE6CisgICAgICAgICAgICB5aWVsZCBzZWxmLmRlY29kZWtleShrZXkpCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZGF0YSkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICdlbnZpcm9uKHshcn0pJy5mb3JtYXQoc2VsZi5kYXRhKQorICAgICAgICByZXR1cm4gJ2Vudmlyb24oe3t7fX19KScuZm9ybWF0KCcsICcuam9pbigKKyAgICAgICAgICAgICgneyFyfTogeyFyfScuZm9ybWF0KHNlbGYuZGVjb2Rla2V5KGtleSksIHNlbGYuZGVjb2RldmFsdWUodmFsdWUpKQorICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5fZGF0YS5pdGVtcygpKSkpCiAKICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZikKQEAgLTQzMiwyMSArNDk1LDEwOCBAQAogZWxzZToKICAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQogCi1pZiBuYW1lIGluICgnb3MyJywgJ250Jyk6ICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQotICAgIF9rZXltYXAgPSBsYW1iZGEga2V5OiBzdHIoa2V5LnVwcGVyKCkpCi1lbHNlOiAgIyBXaGVyZSBFbnYgVmFyIE5hbWVzIENhbiBCZSBNaXhlZCBDYXNlCi0gICAgX2tleW1hcCA9IGxhbWJkYSBrZXk6IHN0cihrZXkpCitkZWYgX2NyZWF0ZWVudmlyb24oKToKKyAgICBpZiBuYW1lIGluICgnb3MyJywgJ250Jyk6CisgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBNdXN0IEJlIFVQUEVSQ0FTRQorICAgICAgICBkZWYgY2hlY2tfc3RyKHZhbHVlKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic3RyIGV4cGVjdGVkLCBub3QgJXMiICUgdHlwZSh2YWx1ZSkuX19uYW1lX18pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUKKyAgICAgICAgZW5jb2RlID0gY2hlY2tfc3RyCisgICAgICAgIGRlY29kZSA9IHN0cgorICAgICAgICBkZWYgZW5jb2Rla2V5KGtleSk6CisgICAgICAgICAgICByZXR1cm4gZW5jb2RlKGtleSkudXBwZXIoKQorICAgICAgICBkYXRhID0ge30KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZW52aXJvbi5pdGVtcygpOgorICAgICAgICAgICAgZGF0YVtlbmNvZGVrZXkoa2V5KV0gPSB2YWx1ZQorICAgIGVsc2U6CisgICAgICAgICMgV2hlcmUgRW52IFZhciBOYW1lcyBDYW4gQmUgTWl4ZWQgQ2FzZQorICAgICAgICBlbmNvZGluZyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQorICAgICAgICBkZWYgZW5jb2RlKHZhbHVlKToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic3RyIGV4cGVjdGVkLCBub3QgJXMiICUgdHlwZSh2YWx1ZSkuX19uYW1lX18pCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuZW5jb2RlKGVuY29kaW5nLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgZGVmIGRlY29kZSh2YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUuZGVjb2RlKGVuY29kaW5nLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgZW5jb2Rla2V5ID0gZW5jb2RlCisgICAgICAgIGRhdGEgPSBlbnZpcm9uCisgICAgcmV0dXJuIF9FbnZpcm9uKGRhdGEsCisgICAgICAgIGVuY29kZWtleSwgZGVjb2RlLAorICAgICAgICBlbmNvZGUsIGRlY29kZSwKKyAgICAgICAgX3B1dGVudiwgX3Vuc2V0ZW52KQogCi1lbnZpcm9uID0gX0Vudmlyb24oZW52aXJvbiwgX2tleW1hcCwgX3B1dGVudiwgX3Vuc2V0ZW52KQorIyB1bmljb2RlIGVudmlyb24KK2Vudmlyb24gPSBfY3JlYXRlZW52aXJvbigpCitkZWwgX2NyZWF0ZWVudmlyb24KIAogCiBkZWYgZ2V0ZW52KGtleSwgZGVmYXVsdD1Ob25lKToKICAgICAiIiJHZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHJldHVybiBOb25lIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCi0gICAgVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGUgZGVmYXVsdC4iIiIKLSAgICBpZiBpc2luc3RhbmNlKGtleSwgYnl0ZXMpOgotICAgICAgICBrZXkgPSBrZXkuZGVjb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSwgInN1cnJvZ2F0ZWVzY2FwZSIpCisgICAgVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGUgZGVmYXVsdC4KKyAgICBrZXksIGRlZmF1bHQgYW5kIHRoZSByZXN1bHQgYXJlIHN0ci4iIiIKICAgICByZXR1cm4gZW52aXJvbi5nZXQoa2V5LCBkZWZhdWx0KQotX19hbGxfXy5hcHBlbmQoImdldGVudiIpCisKK3N1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSBuYW1lIG5vdCBpbiAoJ29zMicsICdudCcpCitfX2FsbF9fLmV4dGVuZCgoImdldGVudiIsICJzdXBwb3J0c19ieXRlc19lbnZpcm9uIikpCisKK2lmIHN1cHBvcnRzX2J5dGVzX2Vudmlyb246CisgICAgZGVmIF9jaGVja19ieXRlcyh2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHZhbHVlLCBieXRlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImJ5dGVzIGV4cGVjdGVkLCBub3QgJXMiICUgdHlwZSh2YWx1ZSkuX19uYW1lX18pCisgICAgICAgIHJldHVybiB2YWx1ZQorCisgICAgIyBieXRlcyBlbnZpcm9uCisgICAgZW52aXJvbmIgPSBfRW52aXJvbihlbnZpcm9uLl9kYXRhLAorICAgICAgICBfY2hlY2tfYnl0ZXMsIGJ5dGVzLAorICAgICAgICBfY2hlY2tfYnl0ZXMsIGJ5dGVzLAorICAgICAgICBfcHV0ZW52LCBfdW5zZXRlbnYpCisgICAgZGVsIF9jaGVja19ieXRlcworCisgICAgZGVmIGdldGVudmIoa2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAiIiJHZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUsIHJldHVybiBOb25lIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgIFRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgY2FuIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIGRlZmF1bHQuCisgICAgICAgIGtleSwgZGVmYXVsdCBhbmQgdGhlIHJlc3VsdCBhcmUgYnl0ZXMuIiIiCisgICAgICAgIHJldHVybiBlbnZpcm9uYi5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgX19hbGxfXy5leHRlbmQoKCJlbnZpcm9uYiIsICJnZXRlbnZiIikpCisKK2RlZiBfZnNjb2RlYygpOgorICAgIGVuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgaWYgZW5jb2RpbmcgPT0gJ21iY3MnOgorICAgICAgICBlcnJvcnMgPSAnc3RyaWN0JworICAgIGVsc2U6CisgICAgICAgIGVycm9ycyA9ICdzdXJyb2dhdGVlc2NhcGUnCisKKyAgICBkZWYgZnNlbmNvZGUoZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgRW5jb2RlIGZpbGVuYW1lIHRvIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIHdpdGggJ3N1cnJvZ2F0ZWVzY2FwZScgZXJyb3IKKyAgICAgICAgaGFuZGxlciwgcmV0dXJuIGJ5dGVzIHVuY2hhbmdlZC4gT24gV2luZG93cywgdXNlICdzdHJpY3QnIGVycm9yIGhhbmRsZXIgaWYKKyAgICAgICAgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGlzICdtYmNzJyAod2hpY2ggaXMgdGhlIGRlZmF1bHQgZW5jb2RpbmcpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYnl0ZXMpOgorICAgICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZS5lbmNvZGUoZW5jb2RpbmcsIGVycm9ycykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0IGJ5dGVzIG9yIHN0ciwgbm90ICVzIiAlIHR5cGUoZmlsZW5hbWUpLl9fbmFtZV9fKQorCisgICAgZGVmIGZzZGVjb2RlKGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIERlY29kZSBmaWxlbmFtZSBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIHdpdGggJ3N1cnJvZ2F0ZWVzY2FwZScgZXJyb3IKKyAgICAgICAgaGFuZGxlciwgcmV0dXJuIHN0ciB1bmNoYW5nZWQuIE9uIFdpbmRvd3MsIHVzZSAnc3RyaWN0JyBlcnJvciBoYW5kbGVyIGlmCisgICAgICAgIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyAnbWJjcycgKHdoaWNoIGlzIHRoZSBkZWZhdWx0IGVuY29kaW5nKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlsZW5hbWUsIHN0cik6CisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBieXRlcyk6CisgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZGVjb2RlKGVuY29kaW5nLCBlcnJvcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdCBieXRlcyBvciBzdHIsIG5vdCAlcyIgJSB0eXBlKGZpbGVuYW1lKS5fX25hbWVfXykKKworICAgIHJldHVybiBmc2VuY29kZSwgZnNkZWNvZGUKKworZnNlbmNvZGUsIGZzZGVjb2RlID0gX2ZzY29kZWMoKQorZGVsIF9mc2NvZGVjCiAKIGRlZiBfZXhpc3RzKG5hbWUpOgogICAgIHJldHVybiBuYW1lIGluIGdsb2JhbHMoKQpkaWZmIC0tZ2l0IGEvTGliL29zMmVteHBhdGgucHkgYi9MaWIvb3MyZW14cGF0aC5weQppbmRleCAxODRjOWIxLi4wY2NiZjhhIDEwMDY0NAotLS0gYS9MaWIvb3MyZW14cGF0aC5weQorKysgYi9MaWIvb3MyZW14cGF0aC5weQpAQCAtMzYsNiArMzYsOSBAQAogICAgICIiIk5vcm1hbGl6ZSBjYXNlIG9mIHBhdGhuYW1lLgogCiAgICAgTWFrZXMgYWxsIGNoYXJhY3RlcnMgbG93ZXJjYXNlIGFuZCBhbGwgYWx0c2VwcyBpbnRvIHNlcHMuIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UocywgKGJ5dGVzLCBzdHIpKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJub3JtY2FzZSgpIGFyZ3VtZW50IG11c3QgYmUgc3RyIG9yIGJ5dGVzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAibm90ICd7fSciLmZvcm1hdChzLl9fY2xhc3NfXy5fX25hbWVfXykpCiAgICAgcmV0dXJuIHMucmVwbGFjZSgnXFwnLCAnLycpLmxvd2VyKCkKIAogCmRpZmYgLS1naXQgYS9MaWIvcGRiLmRvYyBiL0xpYi9wZGIuZG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDMyODAwLi4wMDAwMDAwCi0tLSBhL0xpYi9wZGIuZG9jCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLVRoZSBQeXRob24gRGVidWdnZXIgUGRiCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyB1c2UgdGhlIGRlYnVnZ2VyIGluIGl0cyBzaW1wbGVzdCBmb3JtOgotCi0gICAgICAgID4+PiBpbXBvcnQgcGRiCi0gICAgICAgID4+PiBwZGIucnVuKCc8YSBzdGF0ZW1lbnQ+JykKLQotVGhlIGRlYnVnZ2VyJ3MgcHJvbXB0IGlzICcoUGRiKSAnLiAgVGhpcyB3aWxsIHN0b3AgaW4gdGhlIGZpcnN0Ci1mdW5jdGlvbiBjYWxsIGluIDxhIHN0YXRlbWVudD4uCi0KLUFsdGVybmF0aXZlbHksIGlmIGEgc3RhdGVtZW50IHRlcm1pbmF0ZWQgd2l0aCBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLAoteW91IGNhbiB1c2UgcGRiJ3MgcG9zdC1tb3J0ZW0gZmFjaWxpdHkgdG8gaW5zcGVjdCB0aGUgY29udGVudHMgb2YgdGhlCi10cmFjZWJhY2s6Ci0KLSAgICAgICAgPj4+IDxhIHN0YXRlbWVudD4KLSAgICAgICAgPGV4Y2VwdGlvbiB0cmFjZWJhY2s+Ci0gICAgICAgID4+PiBpbXBvcnQgcGRiCi0gICAgICAgID4+PiBwZGIucG0oKQotCi1UaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBpbiB0aGUgbmV4dAotc2VjdGlvbi4gIE1vc3QgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGluZGljYXRlZDsgZS5nLiwgaChlbHApIG1lYW5zCi10aGF0ICdoZWxwJyBjYW4gYmUgdHlwZWQgYXMgJ2gnIG9yICdoZWxwJyAoYnV0IG5vdCBhcyAnaGUnIG9yICdoZWwnLAotbm9yIGFzICdIJyBvciAnSGVscCcgb3IgJ0hFTFAnKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4KLXNxdWFyZSBicmFja2V0cy4KLQotQSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIHByZXZpb3VzIGNvbW1hbmQgbGl0ZXJhbGx5LCBleGNlcHQgZm9yCi0nbGlzdCcsIHdoZXJlIGl0IGxpc3RzIHRoZSBuZXh0IDExIGxpbmVzLgotCi1Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2Vzbid0IHJlY29nbml6ZSBhcmUgYXNzdW1lZCB0byBiZSBQeXRob24KLXN0YXRlbWVudHMgYW5kIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbSBiZWluZwotZGVidWdnZWQuICBQeXRob24gc3RhdGVtZW50cyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uCi1wb2ludCAoJyEnKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZwotZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIHZhcmlhYmxlcy4gIFdoZW4gYW4gZXhjZXB0aW9uCi1vY2N1cnMgaW4gc3VjaCBhIHN0YXRlbWVudCwgdGhlIGV4Y2VwdGlvbiBuYW1lIGlzIHByaW50ZWQgYnV0IHRoZQotZGVidWdnZXIncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC4KLQotVGhlIGRlYnVnZ2VyIHN1cHBvcnRzIGFsaWFzZXMsIHdoaWNoIGNhbiBzYXZlIHR5cGluZy4gIEFuZCBhbGlhc2VzIGNhbgotaGF2ZSBwYXJhbWV0ZXJzIChzZWUgdGhlIGFsaWFzIGhlbHAgZW50cnkpIHdoaWNoIGFsbG93cyBvbmUgYSBjZXJ0YWluCi1sZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXIgZXhhbWluYXRpb24uCi0KLU11bHRpcGxlIGNvbW1hbmRzIG1heSBiZSBlbnRlcmVkIG9uIGEgc2luZ2xlIGxpbmUsIHNlcGFyYXRlZCBieSB0aGUKLXBhaXIgJzs7Jy4gIE5vIGludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUKLWlucHV0IGlzIHNwbGl0IGF0IHRoZSBmaXJzdCAnOzsnLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYQotcXVvdGVkIHN0cmluZy4KLQotSWYgYSBmaWxlICIucGRicmMiIGV4aXN0cyBpbiB5b3VyIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZSBjdXJyZW50Ci1kaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkIGF0IHRoZQotZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWYgYm90aAotZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kIGFsaWFzZXMKLWRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRlbiBieSB0aGUgbG9jYWwgZmlsZS4KLQotQXNpZGUgZnJvbSBhbGlhc2VzLCB0aGUgZGVidWdnZXIgaXMgbm90IGRpcmVjdGx5IHByb2dyYW1tYWJsZTsgYnV0IGl0Ci1pcyBpbXBsZW1lbnRlZCBhcyBhIGNsYXNzIGZyb20gd2hpY2ggeW91IGNhbiBkZXJpdmUgeW91ciBvd24gZGVidWdnZXIKLWNsYXNzLCB3aGljaCB5b3UgY2FuIG1ha2UgYXMgZmFuY3kgYXMgeW91IGxpa2UuCi0KLQotRGVidWdnZXIgY29tbWFuZHMKLT09PT09PT09PT09PT09PT09Ci0KLWgoZWxwKQotICAgICAgICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoCi0gICAgICAgIGEgY29tbWFuZCBuYW1lIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZAotICAgICAgICAodGhpcyBpcyBjdXJyZW50bHkgbm90IGltcGxlbWVudGVkKS4KLQotdyhoZXJlKQotICAgICAgICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLgotICAgICAgICBBbiBhcnJvdyBpbmRpY2F0ZXMgdGhlICJjdXJyZW50IGZyYW1lIiwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUKLSAgICAgICAgY29udGV4dCBvZiBtb3N0IGNvbW1hbmRzLgotCi1kKG93bikKLSAgICAgICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSBvbmUgbGV2ZWwgZG93biBpbiB0aGUgc3RhY2sgdHJhY2UKLSAgICAgICAgKHRvIGEgbmV3ZXIgZnJhbWUpLgotCi11KHApCi0gICAgICAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgb25lIGxldmVsIHVwIGluIHRoZSBzdGFjayB0cmFjZQotICAgICAgICAodG8gYW4gb2xkZXIgZnJhbWUpLgotCi1iKHJlYWspIFsgKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl0gXQotICAgICAgICBXaXRoIGEgZmlsZW5hbWU6bGluZSBudW1iZXIgYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlLiAgSWYKLSAgICAgICAgZmlsZW5hbWUgaXMgb21pdHRlZCwgdXNlIHRoZSBjdXJyZW50IGZpbGUuICBXaXRoIGEgZnVuY3Rpb24KLSAgICAgICAgbmFtZSwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGUgbGluZSBvZiB0aGF0Ci0gICAgICAgIGZ1bmN0aW9uLiAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLiAgRWFjaCBicmVha3BvaW50Ci0gICAgICAgIGlzIGFzc2lnbmVkIGEgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludAotICAgICAgICBjb21tYW5kcyByZWZlci4KLQotICAgICAgICBUaGUgY29uZGl0aW9uIGFyZ3VtZW50LCBpZiBwcmVzZW50LCBpcyBhIHN0cmluZyB3aGljaCBtdXN0Ci0gICAgICAgIGV2YWx1YXRlIHRvIHRydWUgaW4gb3JkZXIgZm9yIHRoZSBicmVha3BvaW50IHRvIGJlIGhvbm9yZWQuCi0KLXRicmVhayBbIChbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dIF0KLSAgICAgICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0Ci0gICAgICAgIGlzIGZpcnN0IGhpdC4gIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGJyZWFrLgotCi1jbChlYXIpIFticG51bWJlciBbYnBudW1iZXIgLi4uXSBdCi0gICAgICAgIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyIHRob3NlCi0gICAgICAgIGJyZWFrcG9pbnRzLiAgV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0Ci0gICAgICAgIGFzayBjb25maXJtYXRpb24pLgotCi1kaXNhYmxlIGJwbnVtYmVyIFticG51bWJlciAuLi5dCi0gICAgICAgIERpc2FibGVzIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mCi0gICAgICAgIGJyZWFrcG9pbnQgbnVtYmVycy4gIERpc2FibGluZyBhIGJyZWFrcG9pbnQgbWVhbnMgaXQgY2Fubm90Ci0gICAgICAgIGNhdXNlIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEKLSAgICAgICAgYnJlYWtwb2ludCwgaXQgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlCi0gICAgICAgIChyZS0pZW5hYmxlZC4KLQotZW5hYmxlIGJwbnVtYmVyIFticG51bWJlciAuLi5dCi0gICAgICAgIEVuYWJsZXMgdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC4KLQotaWdub3JlIGJwbnVtYmVyIGNvdW50Ci0gICAgICAgIFNldHMgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYKLSAgICAgICAgY291bnQgaXMgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludAotICAgICAgICBiZWNvbWVzIGFjdGl2ZSB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sCi0gICAgICAgIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZAotICAgICAgICBhbmQgdGhlIGJyZWFrcG9pbnQgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZAotICAgICAgICBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuCi0KLWNvbmRpdGlvbiBicG51bWJlciBjb25kaXRpb24KLSAgICAgICAgY29uZGl0aW9uIGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdCBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZQotICAgICAgICB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgY29uZGl0aW9uIGlzIGFic2VudCwgYW55Ci0gICAgICAgIGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludCBpcyBtYWRlCi0gICAgICAgIHVuY29uZGl0aW9uYWwuCi0KLXModGVwKQotICAgICAgICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uCi0gICAgICAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBpbiB0aGUgY3VycmVudCBmdW5jdGlvbikuCi0KLW4oZXh0KQotICAgICAgICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbgotICAgICAgICBpcyByZWFjaGVkIG9yIGl0IHJldHVybnMuCi0KLXVudChpbCkKLSAgICAgICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSAKLSAgICAgICAgY3VycmVudCBvbmUgaXMgcmVhY2hlZCBvciB1bnRpbCB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLgotCi1yKGV0dXJuKQotICAgICAgICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy4KLQotcnVuIFthcmdzLi4uXQotICAgICAgICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBweXRob24gcHJvZ3JhbS4gSWYgYSBzdHJpbmcgaXMgc3VwcGxpZWQgaXQgaXMKLSAgICAgICAgc3BsaXR0ZWQgd2l0aCAic2hsZXgiLCBhbmQgdGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuZXcgc3lzLmFyZ3YuCi0JSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlIHByZXNlcnZlZC4KLQkicmVzdGFydCIgaXMgYW4gYWxpYXMgZm9yICJydW4iLgotCi1jKG9udChpbnVlKSkKLSAgICAgICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuCi0KLWwoaXN0KSBbZmlyc3QgWyxsYXN0XV0KLSAgICAgICAgTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KLSAgICAgICAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUKLSAgICAgICAgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuCi0gICAgICAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIHN0YXJ0aW5nIGF0IHRoYXQgbGluZS4KLSAgICAgICAgV2l0aCB0d28gYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsKLSAgICAgICAgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBhIGNvdW50LgotCi1hKHJncykKLSAgICAgICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCi0KLXAgZXhwcmVzc2lvbgotICAgICAgICBQcmludCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uCi0KLSghKSBzdGF0ZW1lbnQKLSAgICAgICAgRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSBzdGF0ZW1lbnQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQKLSAgICAgICAgc3RhY2sgZnJhbWUuICBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZQotICAgICAgICBmaXJzdCB3b3JkIG9mIHRoZSBzdGF0ZW1lbnQgcmVzZW1ibGVzIGEgZGVidWdnZXIgY29tbWFuZC4gIFRvCi0gICAgICAgIGFzc2lnbiB0byBhIGdsb2JhbCB2YXJpYWJsZSB5b3UgbXVzdCBhbHdheXMgcHJlZml4IHRoZSBjb21tYW5kCi0gICAgICAgIHdpdGggYSAnZ2xvYmFsJyBjb21tYW5kLCBlLmcuOgotICAgICAgICAoUGRiKSBnbG9iYWwgbGlzdF9vcHRpb25zOyBsaXN0X29wdGlvbnMgPSBbJy1sJ10KLSAgICAgICAgKFBkYikKLQotCi13aGF0aXMgYXJnCi0gICAgICAgICBQcmludHMgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LgotCi1hbGlhcyBbbmFtZSBbY29tbWFuZF1dCi0gICAgICAgIENyZWF0ZXMgYW4gYWxpYXMgY2FsbGVkICduYW1lJyB0aGF0IGV4ZWN1dGVzICdjb21tYW5kJy4gIFRoZQotICAgICAgICBjb21tYW5kIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUKLSAgICAgICAgcGFyYW1ldGVycyBjYW4gYmUgaW5kaWNhdGVkIGJ5ICUxLCAlMiwgYW5kIHNvIG9uLCB3aGlsZSAlKiBpcwotICAgICAgICByZXBsYWNlZCBieSBhbGwgdGhlIHBhcmFtZXRlcnMuICBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUKLSAgICAgICAgY3VycmVudCBhbGlhcyBmb3IgbmFtZSBpcyBzaG93bi4gSWYgbm8gbmFtZSBpcyBnaXZlbiwgYWxsCi0gICAgICAgIGFsaWFzZXMgYXJlIGxpc3RlZC4KLQotICAgICAgICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlCi0gICAgICAgIGxlZ2FsbHkgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlISAgWW91ICpjYW4qIG92ZXJyaWRlCi0gICAgICAgIGludGVybmFsIHBkYiBjb21tYW5kcyB3aXRoIGFsaWFzZXMhICBUaG9zZSBpbnRlcm5hbCBjb21tYW5kcwotICAgICAgICBhcmUgdGhlbiBoaWRkZW4gdW50aWwgdGhlIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcwotICAgICAgICByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbAotICAgICAgICBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdCBhbG9uZS4KLQotICAgICAgICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbgotICAgICAgICBwbGFjZWQgaW4gdGhlIC5wZGJyYyBmaWxlKToKLQotICAgICAgICAjUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKLSAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCAiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXQotICAgICAgICAjUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGYKLSAgICAgICAgYWxpYXMgcHMgcGkgc2VsZgotICAgICAgICAgICAgICAgIAotdW5hbGlhcyBuYW1lCi0gICAgICAgIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBhbGlhcy4KLQotcSh1aXQpCi0gICAgICAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuCi0gICAgICAgIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuCmRpZmYgLS1naXQgYS9MaWIvcGRiLnB5IGIvTGliL3BkYi5weQppbmRleCAxZmI1MTc0Li42Nzc2YTNmIDEwMDc1NQotLS0gYS9MaWIvcGRiLnB5CisrKyBiL0xpYi9wZGIucHkKQEAgLTEsMzAgKzEsODkgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKLSIiIkEgUHl0aG9uIGRlYnVnZ2VyLiIiIgorIiIiCitUaGUgUHl0aG9uIERlYnVnZ2VyIFBkYgorPT09PT09PT09PT09PT09PT09PT09PT0KIAotIyAoU2VlIHBkYi5kb2MgZm9yIGRvY3VtZW50YXRpb24uKQorVG8gdXNlIHRoZSBkZWJ1Z2dlciBpbiBpdHMgc2ltcGxlc3QgZm9ybToKIAotaW1wb3J0IHN5cwotaW1wb3J0IGxpbmVjYWNoZQotaW1wb3J0IGNtZAotaW1wb3J0IGJkYgotZnJvbSByZXBybGliIGltcG9ydCBSZXByCisgICAgICAgID4+PiBpbXBvcnQgcGRiCisgICAgICAgID4+PiBwZGIucnVuKCc8YSBzdGF0ZW1lbnQ+JykKKworVGhlIGRlYnVnZ2VyJ3MgcHJvbXB0IGlzICcoUGRiKSAnLiAgVGhpcyB3aWxsIHN0b3AgaW4gdGhlIGZpcnN0CitmdW5jdGlvbiBjYWxsIGluIDxhIHN0YXRlbWVudD4uCisKK0FsdGVybmF0aXZlbHksIGlmIGEgc3RhdGVtZW50IHRlcm1pbmF0ZWQgd2l0aCBhbiB1bmhhbmRsZWQgZXhjZXB0aW9uLAoreW91IGNhbiB1c2UgcGRiJ3MgcG9zdC1tb3J0ZW0gZmFjaWxpdHkgdG8gaW5zcGVjdCB0aGUgY29udGVudHMgb2YgdGhlCit0cmFjZWJhY2s6CisKKyAgICAgICAgPj4+IDxhIHN0YXRlbWVudD4KKyAgICAgICAgPGV4Y2VwdGlvbiB0cmFjZWJhY2s+CisgICAgICAgID4+PiBpbXBvcnQgcGRiCisgICAgICAgID4+PiBwZGIucG0oKQorCitUaGUgY29tbWFuZHMgcmVjb2duaXplZCBieSB0aGUgZGVidWdnZXIgYXJlIGxpc3RlZCBpbiB0aGUgbmV4dAorc2VjdGlvbi4gIE1vc3QgY2FuIGJlIGFiYnJldmlhdGVkIGFzIGluZGljYXRlZDsgZS5nLiwgaChlbHApIG1lYW5zCit0aGF0ICdoZWxwJyBjYW4gYmUgdHlwZWQgYXMgJ2gnIG9yICdoZWxwJyAoYnV0IG5vdCBhcyAnaGUnIG9yICdoZWwnLAorbm9yIGFzICdIJyBvciAnSGVscCcgb3IgJ0hFTFAnKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4KK3NxdWFyZSBicmFja2V0cy4gIEFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZAorYnkgYSB2ZXJ0aWNhbCBiYXIgKHwpLgorCitBIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgcHJldmlvdXMgY29tbWFuZCBsaXRlcmFsbHksIGV4Y2VwdCBmb3IKKydsaXN0Jywgd2hlcmUgaXQgbGlzdHMgdGhlIG5leHQgMTEgbGluZXMuCisKK0NvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvbgorc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nCitkZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb24KK3BvaW50ICgnIScpLiAgVGhpcyBpcyBhIHBvd2VyZnVsIHdheSB0byBpbnNwZWN0IHRoZSBwcm9ncmFtIGJlaW5nCitkZWJ1Z2dlZDsgaXQgaXMgZXZlbiBwb3NzaWJsZSB0byBjaGFuZ2UgdmFyaWFibGVzIG9yIGNhbGwgZnVuY3Rpb25zLgorV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpcworcHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyJ3Mgc3RhdGUgaXMgbm90IGNoYW5nZWQuCisKK1RoZSBkZWJ1Z2dlciBzdXBwb3J0cyBhbGlhc2VzLCB3aGljaCBjYW4gc2F2ZSB0eXBpbmcuICBBbmQgYWxpYXNlcyBjYW4KK2hhdmUgcGFyYW1ldGVycyAoc2VlIHRoZSBhbGlhcyBoZWxwIGVudHJ5KSB3aGljaCBhbGxvd3Mgb25lIGEgY2VydGFpbgorbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyIGV4YW1pbmF0aW9uLgorCitNdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnkgdGhlCitwYWlyICc7OycuICBObyBpbnRlbGxpZ2VuY2UgaXMgYXBwbGllZCB0byBzZXBhcmF0aW5nIHRoZSBjb21tYW5kczsgdGhlCitpbnB1dCBpcyBzcGxpdCBhdCB0aGUgZmlyc3QgJzs7JywgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEKK3F1b3RlZCBzdHJpbmcuCisKK0lmIGEgZmlsZSAiLnBkYnJjIiBleGlzdHMgaW4geW91ciBob21lIGRpcmVjdG9yeSBvciBpbiB0aGUgY3VycmVudAorZGlyZWN0b3J5LCBpdCBpcyByZWFkIGluIGFuZCBleGVjdXRlZCBhcyBpZiBpdCBoYWQgYmVlbiB0eXBlZCBhdCB0aGUKK2RlYnVnZ2VyIHByb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmIGJvdGgKK2ZpbGVzIGV4aXN0LCB0aGUgb25lIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZCBhbGlhc2VzCitkZWZpbmVkIHRoZXJlIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGxvY2FsIGZpbGUuCisKK0FzaWRlIGZyb20gYWxpYXNlcywgdGhlIGRlYnVnZ2VyIGlzIG5vdCBkaXJlY3RseSBwcm9ncmFtbWFibGU7IGJ1dCBpdAoraXMgaW1wbGVtZW50ZWQgYXMgYSBjbGFzcyBmcm9tIHdoaWNoIHlvdSBjYW4gZGVyaXZlIHlvdXIgb3duIGRlYnVnZ2VyCitjbGFzcywgd2hpY2ggeW91IGNhbiBtYWtlIGFzIGZhbmN5IGFzIHlvdSBsaWtlLgorCisKK0RlYnVnZ2VyIGNvbW1hbmRzCis9PT09PT09PT09PT09PT09PQorCisiIiIKKyMgTk9URTogdGhlIGFjdHVhbCBjb21tYW5kIGRvY3VtZW50YXRpb24gaXMgY29sbGVjdGVkIGZyb20gZG9jc3RyaW5ncyBvZiB0aGUKKyMgY29tbWFuZHMgYW5kIGlzIGFwcGVuZGVkIHRvIF9fZG9jX18gYWZ0ZXIgdGhlIGNsYXNzIGhhcyBiZWVuIGRlZmluZWQuCisKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgY21kCitpbXBvcnQgYmRiCitpbXBvcnQgZGlzCitpbXBvcnQgY29kZQogaW1wb3J0IHBwcmludAoraW1wb3J0IHNpZ25hbAoraW1wb3J0IGluc3BlY3QKIGltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBsaW5lY2FjaGUKIAogCiBjbGFzcyBSZXN0YXJ0KEV4Y2VwdGlvbik6CiAgICAgIiIiQ2F1c2VzIGEgZGVidWdnZXIgdG8gYmUgcmVzdGFydGVkIGZvciB0aGUgZGVidWdnZWQgcHl0aG9uIHByb2dyYW0uIiIiCiAgICAgcGFzcwogCi0jIENyZWF0ZSBhIGN1c3RvbSBzYWZlIFJlcHIgaW5zdGFuY2UgYW5kIGluY3JlYXNlIGl0cyBtYXhzdHJpbmcuCi0jIFRoZSBkZWZhdWx0IG9mIDMwIHRydW5jYXRlcyBlcnJvciBtZXNzYWdlcyB0b28gZWFzaWx5LgotX3JlcHIgPSBSZXByKCkKLV9yZXByLm1heHN0cmluZyA9IDIwMAotX3NhZmVyZXByID0gX3JlcHIucmVwcgotCiBfX2FsbF9fID0gWyJydW4iLCAicG0iLCAiUGRiIiwgInJ1bmV2YWwiLCAicnVuY3R4IiwgInJ1bmNhbGwiLCAic2V0X3RyYWNlIiwKICAgICAgICAgICAgInBvc3RfbW9ydGVtIiwgImhlbHAiXQogCkBAIC0zNywxNyArOTYsNDAgQEAKICAgICAjIGNvbnN1bWVyIG9mIHRoaXMgaW5mbyBleHBlY3RzIHRoZSBmaXJzdCBsaW5lIHRvIGJlIDEKICAgICBsaW5lbm8gPSAxCiAgICAgYW5zd2VyID0gTm9uZQotICAgIHdoaWxlIDE6CisgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKICAgICAgICAgaWYgbGluZSA9PSAnJzoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKICAgICAgICAgICAgIGFuc3dlciA9IGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vCiAgICAgICAgICAgICBicmVhawotICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCisgICAgICAgIGxpbmVubyArPSAxCiAgICAgZnAuY2xvc2UoKQogICAgIHJldHVybiBhbnN3ZXIKIAorZGVmIGdldHNvdXJjZWxpbmVzKG9iaik6CisgICAgbGluZXMsIGxpbmVubyA9IGluc3BlY3QuZmluZHNvdXJjZShvYmopCisgICAgaWYgaW5zcGVjdC5pc2ZyYW1lKG9iaikgYW5kIG9iai5mX2dsb2JhbHMgaXMgb2JqLmZfbG9jYWxzOgorICAgICAgICAjIG11c3QgYmUgYSBtb2R1bGUgZnJhbWU6IGRvIG5vdCB0cnkgdG8gY3V0IGEgYmxvY2sgb3V0IG9mIGl0CisgICAgICAgIHJldHVybiBsaW5lcywgMQorICAgIGVsaWYgaW5zcGVjdC5pc21vZHVsZShvYmopOgorICAgICAgICByZXR1cm4gbGluZXMsIDEKKyAgICByZXR1cm4gaW5zcGVjdC5nZXRibG9jayhsaW5lc1tsaW5lbm86XSksIGxpbmVubysxCisKK2RlZiBsYXN0aTJsaW5lbm8oY29kZSwgbGFzdGkpOgorICAgIGxpbmVzdGFydHMgPSBsaXN0KGRpcy5maW5kbGluZXN0YXJ0cyhjb2RlKSkKKyAgICBsaW5lc3RhcnRzLnJldmVyc2UoKQorICAgIGZvciBpLCBsaW5lbm8gaW4gbGluZXN0YXJ0czoKKyAgICAgICAgaWYgbGFzdGkgPj0gaToKKyAgICAgICAgICAgIHJldHVybiBsaW5lbm8KKyAgICByZXR1cm4gMAorCisKK2NsYXNzIF9yc3RyKHN0cik6CisgICAgIiIiU3RyaW5nIHRoYXQgZG9lc24ndCBxdW90ZSBpdHMgcmVwci4iIiIKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKIAogIyBJbnRlcmFjdGlvbiBwcm9tcHQgbGluZSB3aWxsIHNlcGFyYXRlIGZpbGUgYW5kIGNhbGwgaW5mbyBmcm9tIGNvZGUKICMgdGV4dCB1c2luZyB2YWx1ZSBvZiBsaW5lX3ByZWZpeCBzdHJpbmcuICBBIG5ld2xpbmUgYW5kIGFycm93IG1heQpAQCAtNTgsNDEgKzE0MCw0MCBAQAogCiBjbGFzcyBQZGIoYmRiLkJkYiwgY21kLkNtZCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgY29tcGxldGVrZXk9J3RhYicsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21wbGV0ZWtleT0ndGFiJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwKKyAgICAgICAgICAgICAgICAgbm9zaWdpbnQ9RmFsc2UpOgogICAgICAgICBiZGIuQmRiLl9faW5pdF9fKHNlbGYsIHNraXA9c2tpcCkKICAgICAgICAgY21kLkNtZC5fX2luaXRfXyhzZWxmLCBjb21wbGV0ZWtleSwgc3RkaW4sIHN0ZG91dCkKICAgICAgICAgaWYgc3Rkb3V0OgogICAgICAgICAgICAgc2VsZi51c2VfcmF3aW5wdXQgPSAwCiAgICAgICAgIHNlbGYucHJvbXB0ID0gJyhQZGIpICcKICAgICAgICAgc2VsZi5hbGlhc2VzID0ge30KKyAgICAgICAgc2VsZi5kaXNwbGF5aW5nID0ge30KICAgICAgICAgc2VsZi5tYWlucHlmaWxlID0gJycKLSAgICAgICAgc2VsZi5fd2FpdF9mb3JfbWFpbnB5ZmlsZSA9IDAKKyAgICAgICAgc2VsZi5fd2FpdF9mb3JfbWFpbnB5ZmlsZSA9IEZhbHNlCisgICAgICAgIHNlbGYudGJfbGluZW5vID0ge30KICAgICAgICAgIyBUcnkgdG8gbG9hZCByZWFkbGluZSBpZiBpdCBleGlzdHMKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IHJlYWRsaW5lCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hbGxvd19rYmRpbnQgPSBGYWxzZQorICAgICAgICBzZWxmLm5vc2lnaW50ID0gbm9zaWdpbnQKIAogICAgICAgICAjIFJlYWQgJEhPTUUvLnBkYnJjIGFuZCAuLy5wZGJyYwogICAgICAgICBzZWxmLnJjTGluZXMgPSBbXQogICAgICAgICBpZiAnSE9NRScgaW4gb3MuZW52aXJvbjoKICAgICAgICAgICAgIGVudkhvbWUgPSBvcy5lbnZpcm9uWydIT01FJ10KICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByY0ZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihlbnZIb21lLCAiLnBkYnJjIikpCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlbnZIb21lLCAiLnBkYnJjIikpIGFzIHJjRmlsZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHJjRmlsZS5yZWFkbGluZXMoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICAgICAgICAgIHJjRmlsZS5jbG9zZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJjRmlsZSA9IG9wZW4oIi5wZGJyYyIpCisgICAgICAgICAgICB3aXRoIG9wZW4oIi5wZGJyYyIpIGFzIHJjRmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLnJjTGluZXMuZXh0ZW5kKHJjRmlsZSkKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiByY0ZpbGUucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICAgICAgcmNGaWxlLmNsb3NlKCkKIAogICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30gIyBhc3NvY2lhdGVzIGEgY29tbWFuZCBsaXN0IHRvIGJyZWFrcG9pbnQgbnVtYmVycwogICAgICAgICBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0ID0ge30gIyBmb3IgZWFjaCBicCBudW0sIHRlbGxzIGlmIHRoZSBwcm9tcHQKQEAgLTEwNCw2ICsxODUsMTUgQEAKICAgICAgICAgc2VsZi5jb21tYW5kc19ibnVtID0gTm9uZSAjIFRoZSBicmVha3BvaW50IG51bWJlciBmb3Igd2hpY2ggd2UgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkZWZpbmluZyBhIGxpc3QKIAorICAgIGRlZiBzaWdpbnRfaGFuZGxlcihzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaWYgc2VsZi5hbGxvd19rYmRpbnQ6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBzZWxmLm1lc3NhZ2UoIlxuUHJvZ3JhbSBpbnRlcnJ1cHRlZC4gKFVzZSAnY29udCcgdG8gcmVzdW1lKS4iKQorICAgICAgICBzZWxmLnNldF9zdGVwKCkKKyAgICAgICAgc2VsZi5zZXRfdHJhY2UoZnJhbWUpCisgICAgICAgICMgcmVzdG9yZSBwcmV2aW91cyBzaWduYWwgaGFuZGxlcgorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNlbGYuX3ByZXZpb3VzX3NpZ2ludF9oYW5kbGVyKQorCiAgICAgZGVmIHJlc2V0KHNlbGYpOgogICAgICAgICBiZGIuQmRiLnJlc2V0KHNlbGYpCiAgICAgICAgIHNlbGYuZm9yZ2V0KCkKQEAgLTExMywyOCArMjAzLDQzIEBACiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQogICAgICAgICBzZWxmLmN1cmluZGV4ID0gMAogICAgICAgICBzZWxmLmN1cmZyYW1lID0gTm9uZQorICAgICAgICBzZWxmLnRiX2xpbmVuby5jbGVhcigpCiAKLSAgICBkZWYgc2V0dXAoc2VsZiwgZiwgdCk6CisgICAgZGVmIHNldHVwKHNlbGYsIGYsIHRiKToKICAgICAgICAgc2VsZi5mb3JnZXQoKQotICAgICAgICBzZWxmLnN0YWNrLCBzZWxmLmN1cmluZGV4ID0gc2VsZi5nZXRfc3RhY2soZiwgdCkKKyAgICAgICAgc2VsZi5zdGFjaywgc2VsZi5jdXJpbmRleCA9IHNlbGYuZ2V0X3N0YWNrKGYsIHRiKQorICAgICAgICB3aGlsZSB0YjoKKyAgICAgICAgICAgICMgd2hlbiBzZXR0aW5nIHVwIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyB3aXRoIGEgdHJhY2ViYWNrLCBzYXZlIGFsbAorICAgICAgICAgICAgIyB0aGUgb3JpZ2luYWwgbGluZSBudW1iZXJzIHRvIGJlIGRpc3BsYXllZCBhbG9uZyB0aGUgY3VycmVudCBsaW5lCisgICAgICAgICAgICAjIG51bWJlcnMgKHdoaWNoIGNhbiBiZSBkaWZmZXJlbnQsIGUuZy4gZHVlIHRvIGZpbmFsbHkgY2xhdXNlcykKKyAgICAgICAgICAgIGxpbmVubyA9IGxhc3RpMmxpbmVubyh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpKQorICAgICAgICAgICAgc2VsZi50Yl9saW5lbm9bdGIudGJfZnJhbWVdID0gbGluZW5vCisgICAgICAgICAgICB0YiA9IHRiLnRiX25leHQKICAgICAgICAgc2VsZi5jdXJmcmFtZSA9IHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF1bMF0KICAgICAgICAgIyBUaGUgZl9sb2NhbHMgZGljdGlvbmFyeSBpcyB1cGRhdGVkIGZyb20gdGhlIGFjdHVhbCBmcmFtZQogICAgICAgICAjIGxvY2FscyB3aGVuZXZlciB0aGUgLmZfbG9jYWxzIGFjY2Vzc29yIGlzIGNhbGxlZCwgc28gd2UKICAgICAgICAgIyBjYWNoZSBpdCBoZXJlIHRvIGVuc3VyZSB0aGF0IG1vZGlmaWNhdGlvbnMgYXJlIG5vdCBvdmVyd3JpdHRlbi4KICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMgPSBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzCi0gICAgICAgIHNlbGYuZXhlY1JjTGluZXMoKQorICAgICAgICByZXR1cm4gc2VsZi5leGVjUmNMaW5lcygpCiAKICAgICAjIENhbiBiZSBleGVjdXRlZCBlYXJsaWVyIHRoYW4gJ3NldHVwJyBpZiBkZXNpcmVkCiAgICAgZGVmIGV4ZWNSY0xpbmVzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLnJjTGluZXM6Ci0gICAgICAgICAgICAjIE1ha2UgbG9jYWwgY29weSBiZWNhdXNlIG9mIHJlY3Vyc2lvbgotICAgICAgICAgICAgcmNMaW5lcyA9IHNlbGYucmNMaW5lcwotICAgICAgICAgICAgIyBleGVjdXRlZCBvbmx5IG9uY2UKLSAgICAgICAgICAgIHNlbGYucmNMaW5lcyA9IFtdCi0gICAgICAgICAgICBmb3IgbGluZSBpbiByY0xpbmVzOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiAwIGFuZCBsaW5lWzBdICE9ICcjJzoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5vbmVjbWQobGluZSkKKyAgICAgICAgaWYgbm90IHNlbGYucmNMaW5lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIGxvY2FsIGNvcHkgYmVjYXVzZSBvZiByZWN1cnNpb24KKyAgICAgICAgcmNMaW5lcyA9IHNlbGYucmNMaW5lcworICAgICAgICByY0xpbmVzLnJldmVyc2UoKQorICAgICAgICAjIGV4ZWN1dGUgZXZlcnkgbGluZSBvbmx5IG9uY2UKKyAgICAgICAgc2VsZi5yY0xpbmVzID0gW10KKyAgICAgICAgd2hpbGUgcmNMaW5lczoKKyAgICAgICAgICAgIGxpbmUgPSByY0xpbmVzLnBvcCgpLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIGxpbmUgYW5kIGxpbmVbMF0gIT0gJyMnOgorICAgICAgICAgICAgICAgIGlmIHNlbGYub25lY21kKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAjIGlmIG9uZWNtZCByZXR1cm5zIFRydWUsIHRoZSBjb21tYW5kIHdhbnRzIHRvIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgIyBmcm9tIHRoZSBpbnRlcmFjdGlvbiwgc2F2ZSBsZWZ0b3ZlciByYyBsaW5lcworICAgICAgICAgICAgICAgICAgICAjIHRvIGV4ZWN1dGUgYmVmb3JlIG5leHQgaW50ZXJhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzICs9IHJldmVyc2VkKHJjTGluZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIE92ZXJyaWRlIEJkYiBtZXRob2RzCiAKQEAgLTE0NCwyMCArMjQ5LDIwIEBACiAgICAgICAgIGlmIHNlbGYuX3dhaXRfZm9yX21haW5weWZpbGU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgc2VsZi5zdG9wX2hlcmUoZnJhbWUpOgotICAgICAgICAgICAgcHJpbnQoJy0tQ2FsbC0tJywgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnLS1DYWxsLS0nKQogICAgICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgTm9uZSkKIAogICAgIGRlZiB1c2VyX2xpbmUoc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHdlIHN0b3Agb3IgYnJlYWsgYXQgdGhpcyBsaW5lLiIiIgogICAgICAgICBpZiBzZWxmLl93YWl0X2Zvcl9tYWlucHlmaWxlOgogICAgICAgICAgICAgaWYgKHNlbGYubWFpbnB5ZmlsZSAhPSBzZWxmLmNhbm9uaWMoZnJhbWUuZl9jb2RlLmNvX2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgIG9yIGZyYW1lLmZfbGluZW5vPD0gMCk6CisgICAgICAgICAgICAgICAgb3IgZnJhbWUuZl9saW5lbm8gPD0gMCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl9tYWlucHlmaWxlID0gMAorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfbWFpbnB5ZmlsZSA9IEZhbHNlCiAgICAgICAgIGlmIHNlbGYuYnBfY29tbWFuZHMoZnJhbWUpOgogICAgICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgTm9uZSkKIAotICAgIGRlZiBicF9jb21tYW5kcyhzZWxmLGZyYW1lKToKKyAgICBkZWYgYnBfY29tbWFuZHMoc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJDYWxsIGV2ZXJ5IGNvbW1hbmQgdGhhdCB3YXMgc2V0IGZvciB0aGUgY3VycmVudCBhY3RpdmUgYnJlYWtwb2ludAogICAgICAgICAoaWYgdGhlcmUgaXMgb25lKS4KIApAQCAtMTc2LDcgKzI4MSw3IEBACiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jb21tYW5kc19zaWxlbnRbY3VycmVudGJwXToKICAgICAgICAgICAgICAgICBzZWxmLnByaW50X3N0YWNrX2VudHJ5KHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0pCiAgICAgICAgICAgICBpZiBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0W2N1cnJlbnRicF06Ci0gICAgICAgICAgICAgICAgc2VsZi5jbWRsb29wKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jbWRsb29wKCkKICAgICAgICAgICAgIHNlbGYuZm9yZ2V0KCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICByZXR1cm4gMQpAQCAtMTg2LDcgKzI5MSw3IEBACiAgICAgICAgIGlmIHNlbGYuX3dhaXRfZm9yX21haW5weWZpbGU6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZnJhbWUuZl9sb2NhbHNbJ19fcmV0dXJuX18nXSA9IHJldHVybl92YWx1ZQotICAgICAgICBwcmludCgnLS1SZXR1cm4tLScsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgIHNlbGYubWVzc2FnZSgnLS1SZXR1cm4tLScpCiAgICAgICAgIHNlbGYuaW50ZXJhY3Rpb24oZnJhbWUsIE5vbmUpCiAKICAgICBkZWYgdXNlcl9leGNlcHRpb24oc2VsZiwgZnJhbWUsIGV4Y19pbmZvKToKQEAgLTE5NiwxNiArMzAxLDQ1IEBACiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSwgZXhjX3RyYWNlYmFjayA9IGV4Y19pbmZvCiAgICAgICAgIGZyYW1lLmZfbG9jYWxzWydfX2V4Y2VwdGlvbl9fJ10gPSBleGNfdHlwZSwgZXhjX3ZhbHVlCi0gICAgICAgIGV4Y190eXBlX25hbWUgPSBleGNfdHlwZS5fX25hbWVfXwotICAgICAgICBwcmludChleGNfdHlwZV9uYW1lICsgJzonLCBfc2FmZXJlcHIoZXhjX3ZhbHVlKSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgc2VsZi5tZXNzYWdlKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y192YWx1ZSlbLTFdLnN0cmlwKCkpCiAgICAgICAgIHNlbGYuaW50ZXJhY3Rpb24oZnJhbWUsIGV4Y190cmFjZWJhY2spCiAKICAgICAjIEdlbmVyYWwgaW50ZXJhY3Rpb24gZnVuY3Rpb24KKyAgICBkZWYgX2NtZGxvb3Aoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBrZXlib2FyZCBpbnRlcnJ1cHRzIGFsbG93IGZvciBhbiBlYXN5IHdheSB0byBjYW5jZWwKKyAgICAgICAgICAgICAgICAjIHRoZSBjdXJyZW50IGNvbW1hbmQsIHNvIGFsbG93IHRoZW0gZHVyaW5nIGludGVyYWN0aXZlIGlucHV0CisgICAgICAgICAgICAgICAgc2VsZi5hbGxvd19rYmRpbnQgPSBUcnVlCisgICAgICAgICAgICAgICAgc2VsZi5jbWRsb29wKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFsbG93X2tiZGludCA9IEZhbHNlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoJy0tS2V5Ym9hcmRJbnRlcnJ1cHQtLScpCisKKyAgICAjIENhbGxlZCBiZWZvcmUgbG9vcCwgaGFuZGxlcyBkaXNwbGF5IGV4cHJlc3Npb25zCisgICAgZGVmIHByZWxvb3Aoc2VsZik6CisgICAgICAgIGRpc3BsYXlpbmcgPSBzZWxmLmRpc3BsYXlpbmcuZ2V0KHNlbGYuY3VyZnJhbWUpCisgICAgICAgIGlmIGRpc3BsYXlpbmc6CisgICAgICAgICAgICBmb3IgZXhwciwgb2xkdmFsdWUgaW4gZGlzcGxheWluZy5pdGVtcygpOgorICAgICAgICAgICAgICAgIG5ld3ZhbHVlID0gc2VsZi5fZ2V0dmFsX2V4Y2VwdChleHByKQorICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIGlkZW50aXR5IGZpcnN0OyB0aGlzIHByZXZlbnRzIGN1c3RvbSBfX2VxX18gdG8KKyAgICAgICAgICAgICAgICAjIGJlIGNhbGxlZCBhdCBldmVyeSBsb29wLCBhbmQgYWxzbyBwcmV2ZW50cyBpbnN0YW5jZXMgd2hvc2UKKyAgICAgICAgICAgICAgICAjIGZpZWxkcyBhcmUgY2hhbmdlZCB0byBiZSBkaXNwbGF5ZWQKKyAgICAgICAgICAgICAgICBpZiBuZXd2YWx1ZSBpcyBub3Qgb2xkdmFsdWUgYW5kIG5ld3ZhbHVlICE9IG9sZHZhbHVlOgorICAgICAgICAgICAgICAgICAgICBkaXNwbGF5aW5nW2V4cHJdID0gbmV3dmFsdWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdkaXNwbGF5ICVzOiAlciAgW29sZDogJXJdJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwciwgbmV3dmFsdWUsIG9sZHZhbHVlKSkKIAogICAgIGRlZiBpbnRlcmFjdGlvbihzZWxmLCBmcmFtZSwgdHJhY2ViYWNrKToKLSAgICAgICAgc2VsZi5zZXR1cChmcmFtZSwgdHJhY2ViYWNrKQorICAgICAgICBpZiBzZWxmLnNldHVwKGZyYW1lLCB0cmFjZWJhY2spOgorICAgICAgICAgICAgIyBubyBpbnRlcmFjdGlvbiBkZXNpcmVkIGF0IHRoaXMgdGltZSAoaGFwcGVucyBpZiAucGRicmMgY29udGFpbnMKKyAgICAgICAgICAgICMgYSBjb21tYW5kIGxpa2UgImNvbnRpbnVlIikKKyAgICAgICAgICAgIHNlbGYuZm9yZ2V0KCkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLnByaW50X3N0YWNrX2VudHJ5KHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF0pCi0gICAgICAgIHNlbGYuY21kbG9vcCgpCisgICAgICAgIHNlbGYuX2NtZGxvb3AoKQogICAgICAgICBzZWxmLmZvcmdldCgpCiAKICAgICBkZWYgZGlzcGxheWhvb2soc2VsZiwgb2JqKToKQEAgLTIxNCw3ICszNDgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgIyByZXByb2R1Y2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzdGFuZGFyZCBkaXNwbGF5aG9vaywgbm90IHByaW50aW5nIE5vbmUKICAgICAgICAgaWYgb2JqIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJpbnQocmVwcihvYmopKQorICAgICAgICAgICAgc2VsZi5tZXNzYWdlKHJlcHIob2JqKSkKIAogICAgIGRlZiBkZWZhdWx0KHNlbGYsIGxpbmUpOgogICAgICAgICBpZiBsaW5lWzoxXSA9PSAnISc6IGxpbmUgPSBsaW5lWzE6XQpAQCAtMjM1LDExICszNjksOCBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRpbiA9IHNhdmVfc3RkaW4KICAgICAgICAgICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBzYXZlX2Rpc3BsYXlob29rCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHQsIHYgPSBzeXMuZXhjX2luZm8oKVs6Ml0KLSAgICAgICAgICAgIGlmIHR5cGUodCkgPT0gdHlwZSgnJyk6Ci0gICAgICAgICAgICAgICAgZXhjX3R5cGVfbmFtZSA9IHQKLSAgICAgICAgICAgIGVsc2U6IGV4Y190eXBlX25hbWUgPSB0Ll9fbmFtZV9fCi0gICAgICAgICAgICBwcmludCgnKioqJywgZXhjX3R5cGVfbmFtZSArICc6JywgdiwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgICAgICBzZWxmLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKmV4Y19pbmZvKVstMV0uc3RyaXAoKSkKIAogICAgIGRlZiBwcmVjbWQoc2VsZiwgbGluZSk6CiAgICAgICAgICIiIkhhbmRsZSBhbGlhcyBleHBhbnNpb24gYW5kICc7Oycgc2VwYXJhdG9yLiIiIgpAQCAtMjUyLDcgKzM4Myw3IEBACiAgICAgICAgICAgICBmb3IgdG1wQXJnIGluIGFyZ3NbMTpdOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIiUiICsgc3RyKGlpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQXJnKQotICAgICAgICAgICAgICAgIGlpID0gaWkgKyAxCisgICAgICAgICAgICAgICAgaWkgKz0gMQogICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiJSoiLCAnICcuam9pbihhcmdzWzE6XSkpCiAgICAgICAgICAgICBhcmdzID0gbGluZS5zcGxpdCgpCiAgICAgICAgICMgc3BsaXQgaW50byAnOzsnIHNlcGFyYXRlZCBjb21tYW5kcwpAQCAtMjc4LDcgKzQwOSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY29tbWFuZF9kZWYobGluZSkKIAotICAgIGRlZiBoYW5kbGVfY29tbWFuZF9kZWYoc2VsZixsaW5lKToKKyAgICBkZWYgaGFuZGxlX2NvbW1hbmRfZGVmKHNlbGYsIGxpbmUpOgogICAgICAgICAiIiJIYW5kbGVzIG9uZSBjb21tYW5kIGxpbmUgZHVyaW5nIGNvbW1hbmQgbGlzdCBkZWZpbml0aW9uLiIiIgogICAgICAgICBjbWQsIGFyZywgbGluZSA9IHNlbGYucGFyc2VsaW5lKGxpbmUpCiAgICAgICAgIGlmIG5vdCBjbWQ6CkBAIC0zMDYsNDcgKzQzNywxMTYgQEAKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgIHJldHVybgogCisgICAgIyBpbnRlcmZhY2UgYWJzdHJhY3Rpb24gZnVuY3Rpb25zCisKKyAgICBkZWYgbWVzc2FnZShzZWxmLCBtc2cpOgorICAgICAgICBwcmludChtc2csIGZpbGU9c2VsZi5zdGRvdXQpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAgICAgICAgcHJpbnQoJyoqKicsIG1zZywgZmlsZT1zZWxmLnN0ZG91dCkKKwogICAgICMgQ29tbWFuZCBkZWZpbml0aW9ucywgY2FsbGVkIGJ5IGNtZGxvb3AoKQogICAgICMgVGhlIGFyZ3VtZW50IGlzIHRoZSByZW1haW5pbmcgc3RyaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUKICAgICAjIFJldHVybiB0cnVlIHRvIGV4aXQgZnJvbSB0aGUgY29tbWFuZCBsb29wCiAKLSAgICBkb19oID0gY21kLkNtZC5kb19oZWxwCi0KICAgICBkZWYgZG9fY29tbWFuZHMoc2VsZiwgYXJnKToKLSAgICAgICAgIiIiRGVmaW5lcyBhIGxpc3Qgb2YgY29tbWFuZHMgYXNzb2NpYXRlZCB0byBhIGJyZWFrcG9pbnQuCisgICAgICAgICIiImNvbW1hbmRzIFticG51bWJlcl0KKyAgICAgICAgKGNvbSkgLi4uCisgICAgICAgIChjb20pIGVuZAorICAgICAgICAoUGRiKQogCi0gICAgICAgIFRob3NlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIGJyZWFrcG9pbnQgY2F1c2VzCi0gICAgICAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLiIiIgorICAgICAgICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgYnBudW1iZXIuCisgICAgICAgIFRoZSBjb21tYW5kcyB0aGVtc2VsdmVzIGFyZSBlbnRlcmVkIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuCisgICAgICAgIFR5cGUgYSBsaW5lIGNvbnRhaW5pbmcganVzdCAnZW5kJyB0byB0ZXJtaW5hdGUgdGhlIGNvbW1hbmRzLgorICAgICAgICBUaGUgY29tbWFuZHMgYXJlIGV4ZWN1dGVkIHdoZW4gdGhlIGJyZWFrcG9pbnQgaXMgaGl0LgorCisgICAgICAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kCisgICAgICAgIGZvbGxvdyBpdCBpbW1lZGlhdGVseSB3aXRoIGVuZDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy4KKworICAgICAgICBXaXRoIG5vIGJwbnVtYmVyIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QKKyAgICAgICAgYnJlYWtwb2ludCBzZXQuCisKKyAgICAgICAgWW91IGNhbiB1c2UgYnJlYWtwb2ludCBjb21tYW5kcyB0byBzdGFydCB5b3VyIHByb2dyYW0gdXAKKyAgICAgICAgYWdhaW4uICBTaW1wbHkgdXNlIHRoZSBjb250aW51ZSBjb21tYW5kLCBvciBzdGVwLCBvciBhbnkgb3RoZXIKKyAgICAgICAgY29tbWFuZCB0aGF0IHJlc3VtZXMgZXhlY3V0aW9uLgorCisgICAgICAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsCisgICAgICAgIHN0ZXAsIG5leHQsIHJldHVybiwganVtcCwgcXVpdCBhbmQgdGhlaXIgYWJicmV2aWF0aW9ucykKKyAgICAgICAgdGVybWluYXRlcyB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzCisgICAgICAgIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGVuZCkuICBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91CisgICAgICAgIHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5CisgICAgICAgIGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQgLS0gd2hpY2ggY291bGQgaGF2ZSBpdHMgb3duCisgICAgICAgIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaCBsaXN0IHRvCisgICAgICAgIGV4ZWN1dGUuCisKKyAgICAgICAgSWYgeW91IHVzZSB0aGUgJ3NpbGVudCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWwKKyAgICAgICAgbWVzc2FnZSBhYm91dCBzdG9wcGluZyBhdCBhIGJyZWFrcG9pbnQgaXMgbm90IHByaW50ZWQuICBUaGlzCisgICAgICAgIG1heSBiZSBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMKKyAgICAgICAgbWVzc2FnZSBhbmQgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzCisgICAgICAgIHByaW50IGFueXRoaW5nLCB5b3Ugd2lsbCBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcworICAgICAgICByZWFjaGVkLgorICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IGFyZzoKLSAgICAgICAgICAgIGJudW0gPSBsZW4oYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlciktMQorICAgICAgICAgICAgYm51bSA9IGxlbihiZGIuQnJlYWtwb2ludC5icGJ5bnVtYmVyKSAtIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBibnVtID0gaW50KGFyZykKICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwcmludCgiVXNhZ2UgOiBjb21tYW5kcyBbYm51bV1cbiAgICAgICAgLi4uXG4gICAgICAgIGVuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJVc2FnZTogY29tbWFuZHMgW2JudW1dXG4gICAgICAgIC4uLlxuICAgICAgICBlbmQiKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmNvbW1hbmRzX2JudW0gPSBibnVtCisgICAgICAgICMgU2F2ZSBvbGQgZGVmaW5pdGlvbnMgZm9yIHRoZSBjYXNlIG9mIGEga2V5Ym9hcmQgaW50ZXJydXB0LgorICAgICAgICBpZiBibnVtIGluIHNlbGYuY29tbWFuZHM6CisgICAgICAgICAgICBvbGRfY29tbWFuZF9kZWZzID0gKHNlbGYuY29tbWFuZHNbYm51bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfZG9wcm9tcHRbYm51bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfc2lsZW50W2JudW1dKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2xkX2NvbW1hbmRfZGVmcyA9IE5vbmUKICAgICAgICAgc2VsZi5jb21tYW5kc1tibnVtXSA9IFtdCiAgICAgICAgIHNlbGYuY29tbWFuZHNfZG9wcm9tcHRbYm51bV0gPSBUcnVlCiAgICAgICAgIHNlbGYuY29tbWFuZHNfc2lsZW50W2JudW1dID0gRmFsc2UKKwogICAgICAgICBwcm9tcHRfYmFjayA9IHNlbGYucHJvbXB0CiAgICAgICAgIHNlbGYucHJvbXB0ID0gJyhjb20pICcKICAgICAgICAgc2VsZi5jb21tYW5kc19kZWZpbmluZyA9IFRydWUKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jbWRsb29wKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgIyBSZXN0b3JlIG9sZCBkZWZpbml0aW9ucy4KKyAgICAgICAgICAgIGlmIG9sZF9jb21tYW5kX2RlZnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb21tYW5kc1tibnVtXSA9IG9sZF9jb21tYW5kX2RlZnNbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0W2JudW1dID0gb2xkX2NvbW1hbmRfZGVmc1sxXQorICAgICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfc2lsZW50W2JudW1dID0gb2xkX2NvbW1hbmRfZGVmc1syXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5jb21tYW5kc1tibnVtXQorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmNvbW1hbmRzX2RvcHJvbXB0W2JudW1dCisgICAgICAgICAgICAgICAgZGVsIHNlbGYuY29tbWFuZHNfc2lsZW50W2JudW1dCisgICAgICAgICAgICBzZWxmLmVycm9yKCdjb21tYW5kIGRlZmluaXRpb24gYWJvcnRlZCwgb2xkIGNvbW1hbmRzIHJlc3RvcmVkJykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuY29tbWFuZHNfZGVmaW5pbmcgPSBGYWxzZQogICAgICAgICAgICAgc2VsZi5wcm9tcHQgPSBwcm9tcHRfYmFjawogCiAgICAgZGVmIGRvX2JyZWFrKHNlbGYsIGFyZywgdGVtcG9yYXJ5ID0gMCk6Ci0gICAgICAgICMgYnJlYWsgWyAoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgImNvbmRpdGlvbiJdIF0KKyAgICAgICAgIiIiYihyZWFrKSBbIChbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dIF0KKyAgICAgICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLgorCisgICAgICAgIFdpdGggYSBsaW5lIG51bWJlciBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhpcyBsaW5lIGluIHRoZQorICAgICAgICBjdXJyZW50IGZpbGUuICBXaXRoIGEgZnVuY3Rpb24gbmFtZSwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0CisgICAgICAgIGV4ZWN1dGFibGUgbGluZSBvZiB0aGF0IGZ1bmN0aW9uLiAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMKKyAgICAgICAgcHJlc2VudCwgaXQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3QKKyAgICAgICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4KKworICAgICAgICBUaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwKKyAgICAgICAgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlciBmaWxlIChwcm9iYWJseSBvbmUgdGhhdAorICAgICAgICBoYXNuJ3QgYmVlbiBsb2FkZWQgeWV0KS4gIFRoZSBmaWxlIGlzIHNlYXJjaGVkIGZvciBvbgorICAgICAgICBzeXMucGF0aDsgdGhlIC5weSBzdWZmaXggbWF5IGJlIG9taXR0ZWQuCisgICAgICAgICIiIgogICAgICAgICBpZiBub3QgYXJnOgogICAgICAgICAgICAgaWYgc2VsZi5icmVha3M6ICAjIFRoZXJlJ3MgYXQgbGVhc3Qgb25lCi0gICAgICAgICAgICAgICAgcHJpbnQoIk51bSBUeXBlICAgICAgICAgRGlzcCBFbmIgICBXaGVyZSIsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJOdW0gVHlwZSAgICAgICAgIERpc3AgRW5iICAgV2hlcmUiKQogICAgICAgICAgICAgICAgIGZvciBicCBpbiBiZGIuQnJlYWtwb2ludC5icGJ5bnVtYmVyOgogICAgICAgICAgICAgICAgICAgICBpZiBicDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJwLmJwcHJpbnQoc2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoYnAuYnBmb3JtYXQoKSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIHBhcnNlIGFyZ3VtZW50czsgY29tbWEgaGFzIGxvd2VzdCBwcmVjZWRlbmNlCiAgICAgICAgICMgYW5kIGNhbm5vdCBvY2N1ciBpbiBmaWxlbmFtZQpAQCAtMzY1LDE2ICs1NjUsMTUgQEAKICAgICAgICAgICAgIGZpbGVuYW1lID0gYXJnWzpjb2xvbl0ucnN0cmlwKCkKICAgICAgICAgICAgIGYgPSBzZWxmLmxvb2t1cG1vZHVsZShmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBmOgotICAgICAgICAgICAgICAgIHByaW50KCcqKiogJywgcmVwcihmaWxlbmFtZSksIGVuZD0nICcsIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgcHJpbnQoJ25vdCBmb3VuZCBmcm9tIHN5cy5wYXRoJywgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCclciBub3QgZm91bmQgZnJvbSBzeXMucGF0aCcgJSBmaWxlbmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmCiAgICAgICAgICAgICBhcmcgPSBhcmdbY29sb24rMTpdLmxzdHJpcCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZW5vID0gaW50KGFyZykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICBwcmludCgnKioqIEJhZCBsaW5lbm86JywgYXJnLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignQmFkIGxpbmVubzogJXMnICUgYXJnKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBubyBjb2xvbjsgY2FuIGJlIGxpbmVubyBvciBmdW5jdGlvbgpAQCAtNDAwLDEwICs1OTksOCBAQAogICAgICAgICAgICAgICAgICAgICAjIGxhc3QgdGhpbmcgdG8gdHJ5CiAgICAgICAgICAgICAgICAgICAgIChvaywgZmlsZW5hbWUsIGxuKSA9IHNlbGYubGluZWluZm8oYXJnKQogICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb2s6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIFRoZSBzcGVjaWZpZWQgb2JqZWN0JywgZW5kPScgJywgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIoYXJnKSwgZW5kPScgJywgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdpcyBub3QgYSBmdW5jdGlvbicsIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnb3Igd2FzIG5vdCBmb3VuZCBhbG9uZyBzeXMucGF0aC4nLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignVGhlIHNwZWNpZmllZCBvYmplY3QgJXIgaXMgbm90IGEgZnVuY3Rpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3Igd2FzIG5vdCBmb3VuZCBhbG9uZyBzeXMucGF0aC4nICUgYXJnKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgIGZ1bmNuYW1lID0gb2sgIyBvayBjb250YWlucyBhIGZ1bmN0aW9uIG5hbWUKICAgICAgICAgICAgICAgICAgICAgbGluZW5vID0gaW50KGxuKQpAQCAtNDE0LDEyICs2MTEsMTIgQEAKICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICMgbm93IHNldCB0aGUgYnJlYWsgcG9pbnQKICAgICAgICAgICAgIGVyciA9IHNlbGYuc2V0X2JyZWFrKGZpbGVuYW1lLCBsaW5lLCB0ZW1wb3JhcnksIGNvbmQsIGZ1bmNuYW1lKQotICAgICAgICAgICAgaWYgZXJyOiBwcmludCgnKioqJywgZXJyLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgaWYgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyLCBmaWxlPXNlbGYuc3Rkb3V0KQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicCA9IHNlbGYuZ2V0X2JyZWFrcyhmaWxlbmFtZSwgbGluZSlbLTFdCi0gICAgICAgICAgICAgICAgcHJpbnQoIkJyZWFrcG9pbnQgJWQgYXQgJXM6JWQiICUgKGJwLm51bWJlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAuZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAubGluZSksIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJCcmVha3BvaW50ICVkIGF0ICVzOiVkIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChicC5udW1iZXIsIGJwLmZpbGUsIGJwLmxpbmUpKQogCiAgICAgIyBUbyBiZSBvdmVycmlkZGVuIGluIGRlcml2ZWQgZGVidWdnZXJzCiAgICAgZGVmIGRlZmF1bHRGaWxlKHNlbGYpOgpAQCAtNDMyLDYgKzYyOSwxMCBAQAogICAgIGRvX2IgPSBkb19icmVhawogCiAgICAgZGVmIGRvX3RicmVhayhzZWxmLCBhcmcpOgorICAgICAgICAiIiJ0YnJlYWsgWyAoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXSBdCisgICAgICAgIFNhbWUgYXJndW1lbnRzIGFzIGJyZWFrLCBidXQgc2V0cyBhIHRlbXBvcmFyeSBicmVha3BvaW50OiBpdAorICAgICAgICBpcyBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgd2hlbiBmaXJzdCBoaXQuCisgICAgICAgICIiIgogICAgICAgICBzZWxmLmRvX2JyZWFrKGFyZywgMSkKIAogICAgIGRlZiBsaW5laW5mbyhzZWxmLCBpZGVudGlmaWVyKToKQEAgLTQ3OCwxMTIgKzY3OSwxMTAgQEAKICAgICAgICAgZ2xvYnMgPSBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscyBpZiBoYXNhdHRyKHNlbGYsICdjdXJmcmFtZScpIGVsc2UgTm9uZQogICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZ2xvYnMpCiAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgcHJpbnQoJ0VuZCBvZiBmaWxlJywgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnRW5kIG9mIGZpbGUnKQogICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQogICAgICAgICAjIERvbid0IGFsbG93IHNldHRpbmcgYnJlYWtwb2ludCBhdCBhIGJsYW5rIGxpbmUKICAgICAgICAgaWYgKG5vdCBsaW5lIG9yIChsaW5lWzBdID09ICcjJykgb3IKICAgICAgICAgICAgICAobGluZVs6M10gPT0gJyIiIicpIG9yIGxpbmVbOjNdID09ICInJyciKToKLSAgICAgICAgICAgIHByaW50KCcqKiogQmxhbmsgb3IgY29tbWVudCcsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLmVycm9yKCdCbGFuayBvciBjb21tZW50JykKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHJldHVybiBsaW5lbm8KIAogICAgIGRlZiBkb19lbmFibGUoc2VsZiwgYXJnKToKKyAgICAgICAgIiIiZW5hYmxlIGJwbnVtYmVyIFticG51bWJlciAuLi5dCisgICAgICAgIEVuYWJsZXMgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgYnJlYWtwb2ludCBudW1iZXJzLgorICAgICAgICAiIiIKICAgICAgICAgYXJncyA9IGFyZy5zcGxpdCgpCiAgICAgICAgIGZvciBpIGluIGFyZ3M6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaSA9IGludChpKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ0JyZWFrcG9pbnQgaW5kZXggJXIgaXMgbm90IGEgbnVtYmVyJyAlIGksIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgbm90ICgwIDw9IGkgPCBsZW4oYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlcikpOgotICAgICAgICAgICAgICAgIHByaW50KCdObyBicmVha3BvaW50IG51bWJlcmVkJywgaSwgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBicCA9IGJkYi5CcmVha3BvaW50LmJwYnludW1iZXJbaV0KLSAgICAgICAgICAgIGlmIGJwOgorICAgICAgICAgICAgICAgIGJwID0gc2VsZi5nZXRfYnBieW51bWJlcihpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicC5lbmFibGUoKQorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnRW5hYmxlZCAlcycgJSBicCkKIAogICAgIGRlZiBkb19kaXNhYmxlKHNlbGYsIGFyZyk6CisgICAgICAgICIiImRpc2FibGUgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl0KKyAgICAgICAgRGlzYWJsZXMgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YKKyAgICAgICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QKKyAgICAgICAgY2F1c2UgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYQorICAgICAgICBicmVha3BvaW50LCBpdCByZW1haW5zIGluIHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGFuZCBjYW4gYmUKKyAgICAgICAgKHJlLSllbmFibGVkLgorICAgICAgICAiIiIKICAgICAgICAgYXJncyA9IGFyZy5zcGxpdCgpCiAgICAgICAgIGZvciBpIGluIGFyZ3M6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaSA9IGludChpKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcHJpbnQoJ0JyZWFrcG9pbnQgaW5kZXggJXIgaXMgbm90IGEgbnVtYmVyJyAlIGksIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAgICAgICAgICAgaWYgbm90ICgwIDw9IGkgPCBsZW4oYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlcikpOgotICAgICAgICAgICAgICAgIHByaW50KCdObyBicmVha3BvaW50IG51bWJlcmVkJywgaSwgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotCi0gICAgICAgICAgICBicCA9IGJkYi5CcmVha3BvaW50LmJwYnludW1iZXJbaV0KLSAgICAgICAgICAgIGlmIGJwOgorICAgICAgICAgICAgICAgIGJwID0gc2VsZi5nZXRfYnBieW51bWJlcihpKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoZXJyKQorICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBicC5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoJ0Rpc2FibGVkICVzJyAlIGJwKQogCiAgICAgZGVmIGRvX2NvbmRpdGlvbihzZWxmLCBhcmcpOgotICAgICAgICAjIGFyZyBpcyBicmVha3BvaW50IG51bWJlciBhbmQgY29uZGl0aW9uCisgICAgICAgICIiImNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXQorICAgICAgICBTZXQgYSBuZXcgY29uZGl0aW9uIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaAorICAgICAgICBtdXN0IGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZgorICAgICAgICBjb25kaXRpb24gaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sCisgICAgICAgIHRoZSBicmVha3BvaW50IGlzIG1hZGUgdW5jb25kaXRpb25hbC4KKyAgICAgICAgIiIiCiAgICAgICAgIGFyZ3MgPSBhcmcuc3BsaXQoJyAnLCAxKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBicG51bSA9IGludChhcmdzWzBdLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwotICAgICAgICAgICAgcHJpbnQoJ0JyZWFrcG9pbnQgaW5kZXggJXIgaXMgbm90IGEgbnVtYmVyJyAlIGFyZ3NbMF0sIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgdHJ5OgogICAgICAgICAgICAgY29uZCA9IGFyZ3NbMV0KLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgIGNvbmQgPSBOb25lCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGJwID0gYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlclticG51bV0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBwcmludCgnQnJlYWtwb2ludCBpbmRleCAlciBpcyBub3QgdmFsaWQnICUgYXJnc1swXSwKLSAgICAgICAgICAgICAgICAgIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgYnA6CisgICAgICAgICAgICBicCA9IHNlbGYuZ2V0X2JwYnludW1iZXIoYXJnc1swXS5zdHJpcCgpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJwLmNvbmQgPSBjb25kCiAgICAgICAgICAgICBpZiBub3QgY29uZDoKLSAgICAgICAgICAgICAgICBwcmludCgnQnJlYWtwb2ludCcsIGJwbnVtLCBlbmQ9JyAnLCBmaWxlPXNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgIHByaW50KCdpcyBub3cgdW5jb25kaXRpb25hbC4nLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnQnJlYWtwb2ludCAlZCBpcyBub3cgdW5jb25kaXRpb25hbC4nICUgYnAubnVtYmVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoJ05ldyBjb25kaXRpb24gc2V0IGZvciBicmVha3BvaW50ICVkLicgJSBicC5udW1iZXIpCiAKLSAgICBkZWYgZG9faWdub3JlKHNlbGYsYXJnKToKLSAgICAgICAgIiIiYXJnIGlzIGJwIG51bWJlciBmb2xsb3dlZCBieSBpZ25vcmUgY291bnQuIiIiCisgICAgZGVmIGRvX2lnbm9yZShzZWxmLCBhcmcpOgorICAgICAgICAiIiJpZ25vcmUgYnBudW1iZXIgW2NvdW50XQorICAgICAgICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYKKyAgICAgICAgY291bnQgaXMgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludAorICAgICAgICBiZWNvbWVzIGFjdGl2ZSB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sCisgICAgICAgIHRoZSBjb3VudCBpcyBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZAorICAgICAgICBhbmQgdGhlIGJyZWFrcG9pbnQgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZAorICAgICAgICBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuCisgICAgICAgICIiIgogICAgICAgICBhcmdzID0gYXJnLnNwbGl0KCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnBudW0gPSBpbnQoYXJnc1swXS5zdHJpcCgpKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICAgICAgICAgIHByaW50KCdCcmVha3BvaW50IGluZGV4ICVyIGlzIG5vdCBhIG51bWJlcicgJSBhcmdzWzBdLCBmaWxlPXNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHRyeToKICAgICAgICAgICAgIGNvdW50ID0gaW50KGFyZ3NbMV0uc3RyaXAoKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgY291bnQgPSAwCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGJwID0gYmRiLkJyZWFrcG9pbnQuYnBieW51bWJlclticG51bV0KLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBwcmludCgnQnJlYWtwb2ludCBpbmRleCAlciBpcyBub3QgdmFsaWQnICUgYXJnc1swXSwKLSAgICAgICAgICAgICAgICAgIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgYnA6CisgICAgICAgICAgICBicCA9IHNlbGYuZ2V0X2JwYnludW1iZXIoYXJnc1swXS5zdHJpcCgpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKKyAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJwLmlnbm9yZSA9IGNvdW50CiAgICAgICAgICAgICBpZiBjb3VudCA+IDA6Ci0gICAgICAgICAgICAgICAgcmVwbHkgPSAnV2lsbCBpZ25vcmUgbmV4dCAnCiAgICAgICAgICAgICAgICAgaWYgY291bnQgPiAxOgotICAgICAgICAgICAgICAgICAgICByZXBseSA9IHJlcGx5ICsgJyVkIGNyb3NzaW5ncycgJSBjb3VudAorICAgICAgICAgICAgICAgICAgICBjb3VudHN0ciA9ICclZCBjcm9zc2luZ3MnICUgY291bnQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXBseSA9IHJlcGx5ICsgJzEgY3Jvc3NpbmcnCi0gICAgICAgICAgICAgICAgcHJpbnQocmVwbHkgKyAnIG9mIGJyZWFrcG9pbnQgJWQuJyAlIGJwbnVtLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgICAgICBjb3VudHN0ciA9ICcxIGNyb3NzaW5nJworICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnV2lsbCBpZ25vcmUgbmV4dCAlcyBvZiBicmVha3BvaW50ICVkLicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY291bnRzdHIsIGJwLm51bWJlcikpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCdXaWxsIHN0b3AgbmV4dCB0aW1lIGJyZWFrcG9pbnQnLCBlbmQ9JyAnLCBmaWxlPXNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgIHByaW50KGJwbnVtLCAnaXMgcmVhY2hlZC4nLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnV2lsbCBzdG9wIG5leHQgdGltZSBicmVha3BvaW50ICVkIGlzIHJlYWNoZWQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIGJwLm51bWJlcikKIAogICAgIGRlZiBkb19jbGVhcihzZWxmLCBhcmcpOgotICAgICAgICAiIiJUaHJlZSBwb3NzaWJpbGl0aWVzLCB0cmllZCBpbiB0aGlzIG9yZGVyOgotICAgICAgICBjbGVhciAtPiBjbGVhciBhbGwgYnJlYWtzLCBhc2sgZm9yIGNvbmZpcm1hdGlvbgotICAgICAgICBjbGVhciBmaWxlOmxpbmVubyAtPiBjbGVhciBhbGwgYnJlYWtzIGF0IGZpbGU6bGluZW5vCi0gICAgICAgIGNsZWFyIGJwbm8gYnBubyAuLi4gLT4gY2xlYXIgYnJlYWtwb2ludHMgYnkgbnVtYmVyIiIiCisgICAgICAgICIiImNsKGVhcikgZmlsZW5hbWU6bGluZW5vXG5jbChlYXIpIFticG51bWJlciBbYnBudW1iZXIuLi5dXQorICAgICAgICBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhcgorICAgICAgICB0aG9zZSBicmVha3BvaW50cy4gIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dAorICAgICAgICBmaXJzdCBhc2sgY29uZmlybWF0aW9uKS4gIFdpdGggYSBmaWxlbmFtZTpsaW5lbm8gYXJndW1lbnQsCisgICAgICAgIGNsZWFyIGFsbCBicmVha3MgYXQgdGhhdCBsaW5lIGluIHRoYXQgZmlsZS4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBhcmc6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcmVwbHkgPSBpbnB1dCgnQ2xlYXIgYWxsIGJyZWFrcz8gJykKQEAgLTU5MSw3ICs3OTAsMTAgQEAKICAgICAgICAgICAgICAgICByZXBseSA9ICdubycKICAgICAgICAgICAgIHJlcGx5ID0gcmVwbHkuc3RyaXAoKS5sb3dlcigpCiAgICAgICAgICAgICBpZiByZXBseSBpbiAoJ3knLCAneWVzJyk6CisgICAgICAgICAgICAgICAgYnBsaXN0ID0gW2JwIGZvciBicCBpbiBiZGIuQnJlYWtwb2ludC5icGJ5bnVtYmVyIGlmIGJwXQogICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJfYWxsX2JyZWFrcygpCisgICAgICAgICAgICAgICAgZm9yIGJwIGluIGJwbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdEZWxldGVkICVzJyAlIGJwKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmICc6JyBpbiBhcmc6CiAgICAgICAgICAgICAjIE1ha2Ugc3VyZSBpdCB3b3JrcyBmb3IgImNsZWFyIEM6XGZvb1xiYXIucHk6MTIiCkBAIC02MDMsOTkgKzgwNSwxODAgQEAKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIGVyciA9ICJJbnZhbGlkIGxpbmUgbnVtYmVyICglcykiICUgYXJnCiAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJwbGlzdCA9IHNlbGYuZ2V0X2JyZWFrcyhmaWxlbmFtZSwgbGluZW5vKQogICAgICAgICAgICAgICAgIGVyciA9IHNlbGYuY2xlYXJfYnJlYWsoZmlsZW5hbWUsIGxpbmVubykKLSAgICAgICAgICAgIGlmIGVycjogcHJpbnQoJyoqKicsIGVyciwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGJwIGluIGJwbGlzdDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdEZWxldGVkICVzJyAlIGJwKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIG51bWJlcmxpc3QgPSBhcmcuc3BsaXQoKQogICAgICAgICBmb3IgaSBpbiBudW1iZXJsaXN0OgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGkgPSBpbnQoaSkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHByaW50KCdCcmVha3BvaW50IGluZGV4ICVyIGlzIG5vdCBhIG51bWJlcicgJSBpLCBmaWxlPXNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGlmIG5vdCAoMCA8PSBpIDwgbGVuKGJkYi5CcmVha3BvaW50LmJwYnludW1iZXIpKToKLSAgICAgICAgICAgICAgICBwcmludCgnTm8gYnJlYWtwb2ludCBudW1iZXJlZCcsIGksIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGVyciA9IHNlbGYuY2xlYXJfYnBieW51bWJlcihpKQotICAgICAgICAgICAgaWYgZXJyOgotICAgICAgICAgICAgICAgIHByaW50KCcqKionLCBlcnIsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgYnAgPSBzZWxmLmdldF9icGJ5bnVtYmVyKGkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCdEZWxldGVkIGJyZWFrcG9pbnQnLCBpLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJfYnBieW51bWJlcihpKQorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnRGVsZXRlZCAlcycgJSBicCkKICAgICBkb19jbCA9IGRvX2NsZWFyICMgJ2MnIGlzIGFscmVhZHkgYW4gYWJicmV2aWF0aW9uIGZvciAnY29udGludWUnCiAKICAgICBkZWYgZG9fd2hlcmUoc2VsZiwgYXJnKToKKyAgICAgICAgIiIidyhoZXJlKQorICAgICAgICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLgorICAgICAgICBBbiBhcnJvdyBpbmRpY2F0ZXMgdGhlICJjdXJyZW50IGZyYW1lIiwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUKKyAgICAgICAgY29udGV4dCBvZiBtb3N0IGNvbW1hbmRzLiAgJ2J0JyBpcyBhbiBhbGlhcyBmb3IgdGhpcyBjb21tYW5kLgorICAgICAgICAiIiIKICAgICAgICAgc2VsZi5wcmludF9zdGFja190cmFjZSgpCiAgICAgZG9fdyA9IGRvX3doZXJlCiAgICAgZG9fYnQgPSBkb193aGVyZQogCisgICAgZGVmIF9zZWxlY3RfZnJhbWUoc2VsZiwgbnVtYmVyKToKKyAgICAgICAgYXNzZXJ0IDAgPD0gbnVtYmVyIDwgbGVuKHNlbGYuc3RhY2spCisgICAgICAgIHNlbGYuY3VyaW5kZXggPSBudW1iZXIKKyAgICAgICAgc2VsZi5jdXJmcmFtZSA9IHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF1bMF0KKyAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMgPSBzZWxmLmN1cmZyYW1lLmZfbG9jYWxzCisgICAgICAgIHNlbGYucHJpbnRfc3RhY2tfZW50cnkoc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XSkKKyAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisKICAgICBkZWYgZG9fdXAoc2VsZiwgYXJnKToKKyAgICAgICAgIiIidShwKSBbY291bnRdCisgICAgICAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgY291bnQgKGRlZmF1bHQgb25lKSBsZXZlbHMgdXAgaW4gdGhlCisgICAgICAgIHN0YWNrIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuCisgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLmN1cmluZGV4ID09IDA6Ci0gICAgICAgICAgICBwcmludCgnKioqIE9sZGVzdCBmcmFtZScsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLmVycm9yKCdPbGRlc3QgZnJhbWUnKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvdW50ID0gaW50KGFyZyBvciAxKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoJ0ludmFsaWQgZnJhbWUgY291bnQgKCVzKScgJSBhcmcpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgY291bnQgPCAwOgorICAgICAgICAgICAgbmV3ZnJhbWUgPSAwCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmN1cmluZGV4ID0gc2VsZi5jdXJpbmRleCAtIDEKLSAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUgPSBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdWzBdCi0gICAgICAgICAgICBzZWxmLmN1cmZyYW1lX2xvY2FscyA9IHNlbGYuY3VyZnJhbWUuZl9sb2NhbHMKLSAgICAgICAgICAgIHNlbGYucHJpbnRfc3RhY2tfZW50cnkoc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XSkKLSAgICAgICAgICAgIHNlbGYubGluZW5vID0gTm9uZQorICAgICAgICAgICAgbmV3ZnJhbWUgPSBtYXgoMCwgc2VsZi5jdXJpbmRleCAtIGNvdW50KQorICAgICAgICBzZWxmLl9zZWxlY3RfZnJhbWUobmV3ZnJhbWUpCiAgICAgZG9fdSA9IGRvX3VwCiAKICAgICBkZWYgZG9fZG93bihzZWxmLCBhcmcpOgorICAgICAgICAiIiJkKG93bikgW2NvdW50XQorICAgICAgICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lIGNvdW50IChkZWZhdWx0IG9uZSkgbGV2ZWxzIGRvd24gaW4gdGhlCisgICAgICAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuY3VyaW5kZXggKyAxID09IGxlbihzZWxmLnN0YWNrKToKLSAgICAgICAgICAgIHByaW50KCcqKiogTmV3ZXN0IGZyYW1lJywgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYuZXJyb3IoJ05ld2VzdCBmcmFtZScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY291bnQgPSBpbnQoYXJnIG9yIDEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5lcnJvcignSW52YWxpZCBmcmFtZSBjb3VudCAoJXMpJyAlIGFyZykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBjb3VudCA8IDA6CisgICAgICAgICAgICBuZXdmcmFtZSA9IGxlbihzZWxmLnN0YWNrKSAtIDEKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY3VyaW5kZXggPSBzZWxmLmN1cmluZGV4ICsgMQotICAgICAgICAgICAgc2VsZi5jdXJmcmFtZSA9IHNlbGYuc3RhY2tbc2VsZi5jdXJpbmRleF1bMF0KLSAgICAgICAgICAgIHNlbGYuY3VyZnJhbWVfbG9jYWxzID0gc2VsZi5jdXJmcmFtZS5mX2xvY2FscwotICAgICAgICAgICAgc2VsZi5wcmludF9zdGFja19lbnRyeShzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdKQotICAgICAgICAgICAgc2VsZi5saW5lbm8gPSBOb25lCisgICAgICAgICAgICBuZXdmcmFtZSA9IG1pbihsZW4oc2VsZi5zdGFjaykgLSAxLCBzZWxmLmN1cmluZGV4ICsgY291bnQpCisgICAgICAgIHNlbGYuX3NlbGVjdF9mcmFtZShuZXdmcmFtZSkKICAgICBkb19kID0gZG9fZG93bgogCiAgICAgZGVmIGRvX3VudGlsKHNlbGYsIGFyZyk6Ci0gICAgICAgIHNlbGYuc2V0X3VudGlsKHNlbGYuY3VyZnJhbWUpCisgICAgICAgICIiInVudChpbCkgW2xpbmVub10KKyAgICAgICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYQorICAgICAgICBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLiAgV2l0aCBhIGxpbmUKKyAgICAgICAgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXIgZ3JlYXRlcgorICAgICAgICBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlbgorICAgICAgICB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgYXJnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxpbmVubyA9IGludChhcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCdFcnJvciBpbiBhcmd1bWVudDogJXInICUgYXJnKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgbGluZW5vIDw9IHNlbGYuY3VyZnJhbWUuZl9saW5lbm86CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignInVudGlsIiBsaW5lIG51bWJlciBpcyBzbWFsbGVyIHRoYW4gY3VycmVudCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGluZSBudW1iZXInKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZW5vID0gTm9uZQorICAgICAgICBzZWxmLnNldF91bnRpbChzZWxmLmN1cmZyYW1lLCBsaW5lbm8pCiAgICAgICAgIHJldHVybiAxCiAgICAgZG9fdW50ID0gZG9fdW50aWwKIAogICAgIGRlZiBkb19zdGVwKHNlbGYsIGFyZyk6CisgICAgICAgICIiInModGVwKQorICAgICAgICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uCisgICAgICAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBpbiB0aGUgY3VycmVudAorICAgICAgICBmdW5jdGlvbikuCisgICAgICAgICIiIgogICAgICAgICBzZWxmLnNldF9zdGVwKCkKICAgICAgICAgcmV0dXJuIDEKICAgICBkb19zID0gZG9fc3RlcAogCiAgICAgZGVmIGRvX25leHQoc2VsZiwgYXJnKToKKyAgICAgICAgIiIibihleHQpCisgICAgICAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uCisgICAgICAgIGlzIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuc2V0X25leHQoc2VsZi5jdXJmcmFtZSkKICAgICAgICAgcmV0dXJuIDEKICAgICBkb19uID0gZG9fbmV4dAogCiAgICAgZGVmIGRvX3J1bihzZWxmLCBhcmcpOgotICAgICAgICAiIiJSZXN0YXJ0IHByb2dyYW0gYnkgcmFpc2luZyBhbiBleGNlcHRpb24gdG8gYmUgY2F1Z2h0IGluIHRoZSBtYWluCi0gICAgICAgIGRlYnVnZ2VyIGxvb3AuICBJZiBhcmd1bWVudHMgd2VyZSBnaXZlbiwgc2V0IHRoZW0gaW4gc3lzLmFyZ3YuIiIiCisgICAgICAgICIiInJ1biBbYXJncy4uLl0KKyAgICAgICAgUmVzdGFydCB0aGUgZGVidWdnZWQgcHl0aG9uIHByb2dyYW0uIElmIGEgc3RyaW5nIGlzIHN1cHBsaWVkCisgICAgICAgIGl0IGlzIHNwbGl0dGVkIHdpdGggInNobGV4IiwgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3CisgICAgICAgIHN5cy5hcmd2LiAgSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMKKyAgICAgICAgYXJlIHByZXNlcnZlZC4gICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuCisgICAgICAgICIiIgogICAgICAgICBpZiBhcmc6CiAgICAgICAgICAgICBpbXBvcnQgc2hsZXgKICAgICAgICAgICAgIGFyZ3YwID0gc3lzLmFyZ3ZbMDoxXQogICAgICAgICAgICAgc3lzLmFyZ3YgPSBzaGxleC5zcGxpdChhcmcpCiAgICAgICAgICAgICBzeXMuYXJndls6MF0gPSBhcmd2MAorICAgICAgICAjIHRoaXMgaXMgY2F1Z2h0IGluIHRoZSBtYWluIGRlYnVnZ2VyIGxvb3AKICAgICAgICAgcmFpc2UgUmVzdGFydAogCiAgICAgZG9fcmVzdGFydCA9IGRvX3J1bgogCiAgICAgZGVmIGRvX3JldHVybihzZWxmLCBhcmcpOgorICAgICAgICAiIiJyKGV0dXJuKQorICAgICAgICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy4KKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuc2V0X3JldHVybihzZWxmLmN1cmZyYW1lKQogICAgICAgICByZXR1cm4gMQogICAgIGRvX3IgPSBkb19yZXR1cm4KIAogICAgIGRlZiBkb19jb250aW51ZShzZWxmLCBhcmcpOgorICAgICAgICAiIiJjKG9udChpbnVlKSkKKyAgICAgICAgQ29udGludWUgZXhlY3V0aW9uLCBvbmx5IHN0b3Agd2hlbiBhIGJyZWFrcG9pbnQgaXMgZW5jb3VudGVyZWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5ub3NpZ2ludDoKKyAgICAgICAgICAgIHNlbGYuX3ByZXZpb3VzX3NpZ2ludF9oYW5kbGVyID0gXAorICAgICAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgc2VsZi5zaWdpbnRfaGFuZGxlcikKICAgICAgICAgc2VsZi5zZXRfY29udGludWUoKQogICAgICAgICByZXR1cm4gMQogICAgIGRvX2MgPSBkb19jb250ID0gZG9fY29udGludWUKIAogICAgIGRlZiBkb19qdW1wKHNlbGYsIGFyZyk6CisgICAgICAgICIiImoodW1wKSBsaW5lbm8KKyAgICAgICAgU2V0IHRoZSBuZXh0IGxpbmUgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkLiAgT25seSBhdmFpbGFibGUgaW4KKyAgICAgICAgdGhlIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUKKyAgICAgICAgY29kZSBhZ2Fpbiwgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb24ndCB3YW50CisgICAgICAgIHRvIHJ1bi4KKworICAgICAgICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvcgorICAgICAgICBpbnN0YW5jZSBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYQorICAgICAgICBmb3IgbG9vcCBvciBvdXQgb2YgYSBmaW5hbGx5IGNsYXVzZS4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuY3VyaW5kZXggKyAxICE9IGxlbihzZWxmLnN0YWNrKToKLSAgICAgICAgICAgIHByaW50KCIqKiogWW91IGNhbiBvbmx5IGp1bXAgd2l0aGluIHRoZSBib3R0b20gZnJhbWUiLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5lcnJvcignWW91IGNhbiBvbmx5IGp1bXAgd2l0aGluIHRoZSBib3R0b20gZnJhbWUnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFyZyA9IGludChhcmcpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQoIioqKiBUaGUgJ2p1bXAnIGNvbW1hbmQgcmVxdWlyZXMgYSBsaW5lIG51bWJlci4iLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5lcnJvcigiVGhlICdqdW1wJyBjb21tYW5kIHJlcXVpcmVzIGEgbGluZSBudW1iZXIiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICMgRG8gdGhlIGp1bXAsIGZpeCB1cCBvdXIgY29weSBvZiB0aGUgc3RhY2ssIGFuZCBkaXNwbGF5IHRoZQpAQCAtNzA0LDIzICs5ODcsMzEgQEAKICAgICAgICAgICAgICAgICBzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdID0gc2VsZi5zdGFja1tzZWxmLmN1cmluZGV4XVswXSwgYXJnCiAgICAgICAgICAgICAgICAgc2VsZi5wcmludF9zdGFja19lbnRyeShzZWxmLnN0YWNrW3NlbGYuY3VyaW5kZXhdKQogICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBwcmludCgnKioqIEp1bXAgZmFpbGVkOicsIGUsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignSnVtcCBmYWlsZWQ6ICVzJyAlIGUpCiAgICAgZG9faiA9IGRvX2p1bXAKIAogICAgIGRlZiBkb19kZWJ1ZyhzZWxmLCBhcmcpOgorICAgICAgICAiIiJkZWJ1ZyBjb2RlCisgICAgICAgIEVudGVyIGEgcmVjdXJzaXZlIGRlYnVnZ2VyIHRoYXQgc3RlcHMgdGhyb3VnaCB0aGUgY29kZQorICAgICAgICBhcmd1bWVudCAod2hpY2ggaXMgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IHRvIGJlCisgICAgICAgIGV4ZWN1dGVkIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50KS4KKyAgICAgICAgIiIiCiAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQogICAgICAgICBnbG9iYWxzID0gc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMKICAgICAgICAgbG9jYWxzID0gc2VsZi5jdXJmcmFtZV9sb2NhbHMKICAgICAgICAgcCA9IFBkYihzZWxmLmNvbXBsZXRla2V5LCBzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCkKICAgICAgICAgcC5wcm9tcHQgPSAiKCVzKSAiICUgc2VsZi5wcm9tcHQuc3RyaXAoKQotICAgICAgICBwcmludCgiRU5URVJJTkcgUkVDVVJTSVZFIERFQlVHR0VSIiwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgc2VsZi5tZXNzYWdlKCJFTlRFUklORyBSRUNVUlNJVkUgREVCVUdHRVIiKQogICAgICAgICBzeXMuY2FsbF90cmFjaW5nKHAucnVuLCAoYXJnLCBnbG9iYWxzLCBsb2NhbHMpKQotICAgICAgICBwcmludCgiTEVBVklORyBSRUNVUlNJVkUgREVCVUdHRVIiLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICBzZWxmLm1lc3NhZ2UoIkxFQVZJTkcgUkVDVVJTSVZFIERFQlVHR0VSIikKICAgICAgICAgc3lzLnNldHRyYWNlKHNlbGYudHJhY2VfZGlzcGF0Y2gpCiAgICAgICAgIHNlbGYubGFzdGNtZCA9IHAubGFzdGNtZAogCiAgICAgZGVmIGRvX3F1aXQoc2VsZiwgYXJnKToKLSAgICAgICAgc2VsZi5fdXNlcl9yZXF1ZXN0ZWRfcXVpdCA9IDEKKyAgICAgICAgIiIicSh1aXQpXG5leGl0CisgICAgICAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91c2VyX3JlcXVlc3RlZF9xdWl0ID0gVHJ1ZQogICAgICAgICBzZWxmLnNldF9xdWl0KCkKICAgICAgICAgcmV0dXJuIDEKIApAQCAtNzI4LDEyICsxMDE5LDE4IEBACiAgICAgZG9fZXhpdCA9IGRvX3F1aXQKIAogICAgIGRlZiBkb19FT0Yoc2VsZiwgYXJnKToKLSAgICAgICAgcHJpbnQoZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgc2VsZi5fdXNlcl9yZXF1ZXN0ZWRfcXVpdCA9IDEKKyAgICAgICAgIiIiRU9GCisgICAgICAgIEhhbmRsZXMgdGhlIHJlY2VpcHQgb2YgRU9GIGFzIGEgY29tbWFuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYubWVzc2FnZSgnJykKKyAgICAgICAgc2VsZi5fdXNlcl9yZXF1ZXN0ZWRfcXVpdCA9IFRydWUKICAgICAgICAgc2VsZi5zZXRfcXVpdCgpCiAgICAgICAgIHJldHVybiAxCiAKICAgICBkZWYgZG9fYXJncyhzZWxmLCBhcmcpOgorICAgICAgICAiIiJhKHJncykKKyAgICAgICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisgICAgICAgICIiIgogICAgICAgICBjbyA9IHNlbGYuY3VyZnJhbWUuZl9jb2RlCiAgICAgICAgIGRpY3QgPSBzZWxmLmN1cmZyYW1lX2xvY2FscwogICAgICAgICBuID0gY28uY29fYXJnY291bnQKQEAgLTc0MSw2MiArMTAzOCw5NCBAQAogICAgICAgICBpZiBjby5jb19mbGFncyAmIDg6IG4gPSBuKzEKICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgICAgICBuYW1lID0gY28uY29fdmFybmFtZXNbaV0KLSAgICAgICAgICAgIHByaW50KG5hbWUsICc9JywgZW5kPScgJywgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gZGljdDogcHJpbnQoZGljdFtuYW1lXSwgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgICAgIGVsc2U6IHByaW50KCIqKiogdW5kZWZpbmVkICoqKiIsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICBpZiBuYW1lIGluIGRpY3Q6CisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCclcyA9ICVyJyAlIChuYW1lLCBkaWN0W25hbWVdKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCclcyA9ICoqKiB1bmRlZmluZWQgKioqJyAlIChuYW1lLCkpCiAgICAgZG9fYSA9IGRvX2FyZ3MKIAogICAgIGRlZiBkb19yZXR2YWwoc2VsZiwgYXJnKToKKyAgICAgICAgIiIicmV0dmFsCisgICAgICAgIFByaW50IHRoZSByZXR1cm4gdmFsdWUgZm9yIHRoZSBsYXN0IHJldHVybiBvZiBhIGZ1bmN0aW9uLgorICAgICAgICAiIiIKICAgICAgICAgaWYgJ19fcmV0dXJuX18nIGluIHNlbGYuY3VyZnJhbWVfbG9jYWxzOgotICAgICAgICAgICAgcHJpbnQoc2VsZi5jdXJmcmFtZV9sb2NhbHNbJ19fcmV0dXJuX18nXSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZShyZXByKHNlbGYuY3VyZnJhbWVfbG9jYWxzWydfX3JldHVybl9fJ10pKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoJyoqKiBOb3QgeWV0IHJldHVybmVkIScsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLmVycm9yKCdOb3QgeWV0IHJldHVybmVkIScpCiAgICAgZG9fcnYgPSBkb19yZXR2YWwKIAogICAgIGRlZiBfZ2V0dmFsKHNlbGYsIGFyZyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiBldmFsKGFyZywgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMsIHNlbGYuY3VyZnJhbWVfbG9jYWxzKQogICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICB0LCB2ID0gc3lzLmV4Y19pbmZvKClbOjJdCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHQsIHN0cik6Ci0gICAgICAgICAgICAgICAgZXhjX3R5cGVfbmFtZSA9IHQKLSAgICAgICAgICAgIGVsc2U6IGV4Y190eXBlX25hbWUgPSB0Ll9fbmFtZV9fCi0gICAgICAgICAgICBwcmludCgnKioqJywgZXhjX3R5cGVfbmFtZSArICc6JywgcmVwcih2KSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgICAgICBzZWxmLmVycm9yKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKmV4Y19pbmZvKVstMV0uc3RyaXAoKSkKICAgICAgICAgICAgIHJhaXNlCiAKLSAgICBkZWYgZG9fcChzZWxmLCBhcmcpOgorICAgIGRlZiBfZ2V0dmFsX2V4Y2VwdChzZWxmLCBhcmcsIGZyYW1lPU5vbmUpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcmludChyZXByKHNlbGYuX2dldHZhbChhcmcpKSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIGlmIGZyYW1lIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWwoYXJnLCBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscywgc2VsZi5jdXJmcmFtZV9sb2NhbHMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGFyZywgZnJhbWUuZl9nbG9iYWxzLCBmcmFtZS5mX2xvY2FscykKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKVs6Ml0KKyAgICAgICAgICAgIGVyciA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoKmV4Y19pbmZvKVstMV0uc3RyaXAoKQorICAgICAgICAgICAgcmV0dXJuIF9yc3RyKCcqKiByYWlzZWQgJXMgKionICUgZXJyKQorCisgICAgZGVmIGRvX3Aoc2VsZiwgYXJnKToKKyAgICAgICAgIiIicChyaW50KSBleHByZXNzaW9uCisgICAgICAgIFByaW50IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZShyZXByKHNlbGYuX2dldHZhbChhcmcpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogICAgICMgbWFrZSAicHJpbnQiIGFuIGFsaWFzIG9mICJwIiBzaW5jZSBwcmludCBpc24ndCBhIFB5dGhvbiBzdGF0ZW1lbnQgYW55bW9yZQogICAgIGRvX3ByaW50ID0gZG9fcAogCiAgICAgZGVmIGRvX3BwKHNlbGYsIGFyZyk6CisgICAgICAgICIiInBwIGV4cHJlc3Npb24KKyAgICAgICAgUHJldHR5LXByaW50IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbi4KKyAgICAgICAgIiIiCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHBwcmludC5wcHJpbnQoc2VsZi5fZ2V0dmFsKGFyZyksIHNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5tZXNzYWdlKHBwcmludC5wZm9ybWF0KHNlbGYuX2dldHZhbChhcmcpKSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIGRvX2xpc3Qoc2VsZiwgYXJnKToKKyAgICAgICAgIiIibChpc3QpIFtmaXJzdCBbLGxhc3RdIHwgLl0KKworICAgICAgICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsCisgICAgICAgIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzCisgICAgICAgIGxpc3RpbmcuICBXaXRoIC4gYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50CisgICAgICAgIGxpbmUuICBXaXRoIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBzdGFydGluZyBhdCB0aGF0IGxpbmUuCisgICAgICAgIFdpdGggdHdvIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7IGlmIHRoZSBzZWNvbmQKKyAgICAgICAgYXJndW1lbnQgaXMgbGVzcyB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgYSBjb3VudC4KKworICAgICAgICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSAiLT4iLgorICAgICAgICBJZiBhbiBleGNlcHRpb24gaXMgYmVpbmcgZGVidWdnZWQsIHRoZSBsaW5lIHdoZXJlIHRoZQorICAgICAgICBleGNlcHRpb24gd2FzIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5CisgICAgICAgICI+PiIsIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAiIiIKICAgICAgICAgc2VsZi5sYXN0Y21kID0gJ2xpc3QnCiAgICAgICAgIGxhc3QgPSBOb25lCi0gICAgICAgIGlmIGFyZzoKKyAgICAgICAgaWYgYXJnIGFuZCBhcmcgIT0gJy4nOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHggPSBldmFsKGFyZywge30sIHt9KQotICAgICAgICAgICAgICAgIGlmIHR5cGUoeCkgPT0gdHlwZSgoKSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0LCBsYXN0ID0geAotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGludChmaXJzdCkKLSAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGludChsYXN0KQorICAgICAgICAgICAgICAgIGlmICcsJyBpbiBhcmc6CisgICAgICAgICAgICAgICAgICAgIGZpcnN0LCBsYXN0ID0gYXJnLnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBpbnQoZmlyc3Quc3RyaXAoKSkKKyAgICAgICAgICAgICAgICAgICAgbGFzdCA9IGludChsYXN0LnN0cmlwKCkpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxhc3QgPCBmaXJzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgQXNzdW1lIGl0J3MgYSBjb3VudAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhc3N1bWUgaXQncyBhIGNvdW50CiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gZmlyc3QgKyBsYXN0CiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBtYXgoMSwgaW50KHgpIC0gNSkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGluIGFyZ3VtZW50OicsIHJlcHIoYXJnKSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBpbnQoYXJnLnN0cmlwKCkpCisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gbWF4KDEsIGZpcnN0IC0gNSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoJ0Vycm9yIGluIGFyZ3VtZW50OiAlcicgJSBhcmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsaWYgc2VsZi5saW5lbm8gaXMgTm9uZToKKyAgICAgICAgZWxpZiBzZWxmLmxpbmVubyBpcyBOb25lIG9yIGFyZyA9PSAnLic6CiAgICAgICAgICAgICBmaXJzdCA9IG1heCgxLCBzZWxmLmN1cmZyYW1lLmZfbGluZW5vIC0gNSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZpcnN0ID0gc2VsZi5saW5lbm8gKyAxCkBAIC04MDUsNzEgKzExMzQsMTg2IEBACiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5jdXJmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUKICAgICAgICAgYnJlYWtsaXN0ID0gc2VsZi5nZXRfZmlsZV9icmVha3MoZmlsZW5hbWUpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZvciBsaW5lbm8gaW4gcmFuZ2UoZmlyc3QsIGxhc3QrMSk6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VyZnJhbWUuZl9nbG9iYWxzKQotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnW0VPRl0nLCBmaWxlPXNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHMgPSByZXByKGxpbmVubykucmp1c3QoMykKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHMpIDwgNDogcyA9IHMgKyAnICcKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vIGluIGJyZWFrbGlzdDogcyA9IHMgKyAnQicKLSAgICAgICAgICAgICAgICAgICAgZWxzZTogcyA9IHMgKyAnICcKLSAgICAgICAgICAgICAgICAgICAgaWYgbGluZW5vID09IHNlbGYuY3VyZnJhbWUuZl9saW5lbm86Ci0gICAgICAgICAgICAgICAgICAgICAgICBzID0gcyArICctPicKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQocyArICdcdCcgKyBsaW5lLCBlbmQ9JycsIGZpbGU9c2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgICAgICBsaW5lcyA9IGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlbmFtZSwgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMpCisgICAgICAgICAgICBzZWxmLl9wcmludF9saW5lcyhsaW5lc1tmaXJzdC0xOmxhc3RdLCBmaXJzdCwgYnJlYWtsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZSkKKyAgICAgICAgICAgIHNlbGYubGluZW5vID0gbWluKGxhc3QsIGxlbihsaW5lcykpCisgICAgICAgICAgICBpZiBsZW4obGluZXMpIDwgbGFzdDoKKyAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoJ1tFT0ZdJykKICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICAgICAgcGFzcwogICAgIGRvX2wgPSBkb19saXN0CiAKLSAgICBkZWYgZG9fd2hhdGlzKHNlbGYsIGFyZyk6CisgICAgZGVmIGRvX2xvbmdsaXN0KHNlbGYsIGFyZyk6CisgICAgICAgICIiImxvbmdsaXN0IHwgbGwKKyAgICAgICAgTGlzdCB0aGUgd2hvbGUgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmN1cmZyYW1lLmZfY29kZS5jb19maWxlbmFtZQorICAgICAgICBicmVha2xpc3QgPSBzZWxmLmdldF9maWxlX2JyZWFrcyhmaWxlbmFtZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBldmFsKGFyZywgc2VsZi5jdXJmcmFtZS5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJmcmFtZV9sb2NhbHMpCisgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMoc2VsZi5jdXJmcmFtZSkKKyAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubywgYnJlYWtsaXN0LCBzZWxmLmN1cmZyYW1lKQorICAgIGRvX2xsID0gZG9fbG9uZ2xpc3QKKworICAgIGRlZiBkb19zb3VyY2Uoc2VsZiwgYXJnKToKKyAgICAgICAgIiIic291cmNlIGV4cHJlc3Npb24KKyAgICAgICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9iaiA9IHNlbGYuX2dldHZhbChhcmcpCiAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHQsIHYgPSBzeXMuZXhjX2luZm8oKVs6Ml0KLSAgICAgICAgICAgIGlmIHR5cGUodCkgPT0gdHlwZSgnJyk6Ci0gICAgICAgICAgICAgICAgZXhjX3R5cGVfbmFtZSA9IHQKLSAgICAgICAgICAgIGVsc2U6IGV4Y190eXBlX25hbWUgPSB0Ll9fbmFtZV9fCi0gICAgICAgICAgICBwcmludCgnKioqJywgZXhjX3R5cGVfbmFtZSArICc6JywgcmVwcih2KSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMob2JqKQorICAgICAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubykKKworICAgIGRlZiBfcHJpbnRfbGluZXMoc2VsZiwgbGluZXMsIHN0YXJ0LCBicmVha3M9KCksIGZyYW1lPU5vbmUpOgorICAgICAgICAiIiJQcmludCBhIHJhbmdlIG9mIGxpbmVzLiIiIgorICAgICAgICBpZiBmcmFtZToKKyAgICAgICAgICAgIGN1cnJlbnRfbGluZW5vID0gZnJhbWUuZl9saW5lbm8KKyAgICAgICAgICAgIGV4Y19saW5lbm8gPSBzZWxmLnRiX2xpbmVuby5nZXQoZnJhbWUsIC0xKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3VycmVudF9saW5lbm8gPSBleGNfbGluZW5vID0gLTEKKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUobGluZXMsIHN0YXJ0KToKKyAgICAgICAgICAgIHMgPSBzdHIobGluZW5vKS5yanVzdCgzKQorICAgICAgICAgICAgaWYgbGVuKHMpIDwgNDoKKyAgICAgICAgICAgICAgICBzICs9ICcgJworICAgICAgICAgICAgaWYgbGluZW5vIGluIGJyZWFrczoKKyAgICAgICAgICAgICAgICBzICs9ICdCJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzICs9ICcgJworICAgICAgICAgICAgaWYgbGluZW5vID09IGN1cnJlbnRfbGluZW5vOgorICAgICAgICAgICAgICAgIHMgKz0gJy0+JworICAgICAgICAgICAgZWxpZiBsaW5lbm8gPT0gZXhjX2xpbmVubzoKKyAgICAgICAgICAgICAgICBzICs9ICc+PicKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZShzICsgJ1x0JyArIGxpbmUucnN0cmlwKCkpCisKKyAgICBkZWYgZG9fd2hhdGlzKHNlbGYsIGFyZyk6CisgICAgICAgICIiIndoYXRpcyBhcmcKKyAgICAgICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9nZXR2YWwoYXJnKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAjIF9nZXR2YWwoKSBhbHJlYWR5IHByaW50ZWQgdGhlIGVycm9yCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgY29kZSA9IE5vbmUKICAgICAgICAgIyBJcyBpdCBhIGZ1bmN0aW9uPwotICAgICAgICB0cnk6IGNvZGUgPSB2YWx1ZS5fX2NvZGVfXwotICAgICAgICBleGNlcHQ6IHBhc3MKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29kZSA9IHZhbHVlLl9fY29kZV9fCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGlmIGNvZGU6Ci0gICAgICAgICAgICBwcmludCgnRnVuY3Rpb24nLCBjb2RlLmNvX25hbWUsIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoJ0Z1bmN0aW9uICVzJyAlIGNvZGUuY29fbmFtZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIElzIGl0IGFuIGluc3RhbmNlIG1ldGhvZD8KLSAgICAgICAgdHJ5OiBjb2RlID0gdmFsdWUuX19mdW5jX18uX19jb2RlX18KLSAgICAgICAgZXhjZXB0OiBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvZGUgPSB2YWx1ZS5fX2Z1bmNfXy5fX2NvZGVfXworICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBjb2RlOgotICAgICAgICAgICAgcHJpbnQoJ01ldGhvZCcsIGNvZGUuY29fbmFtZSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnTWV0aG9kICVzJyAlIGNvZGUuY29fbmFtZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIElzIGl0IGEgY2xhc3M/CisgICAgICAgIGlmIHZhbHVlLl9fY2xhc3NfXyBpcyB0eXBlOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCdDbGFzcyAlcy4lcycgJSAodmFsdWUuX19tb2R1bGVfXywgdmFsdWUuX19uYW1lX18pKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICMgTm9uZSBvZiB0aGUgYWJvdmUuLi4KLSAgICAgICAgcHJpbnQodHlwZSh2YWx1ZSksIGZpbGU9c2VsZi5zdGRvdXQpCisgICAgICAgIHNlbGYubWVzc2FnZSh0eXBlKHZhbHVlKSkKKworICAgIGRlZiBkb19kaXNwbGF5KHNlbGYsIGFyZyk6CisgICAgICAgICIiImRpc3BsYXkgW2V4cHJlc3Npb25dCisKKyAgICAgICAgRGlzcGxheSB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaWYgaXQgY2hhbmdlZCwgZWFjaCB0aW1lIGV4ZWN1dGlvbgorICAgICAgICBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS4KKworICAgICAgICBXaXRob3V0IGV4cHJlc3Npb24sIGxpc3QgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50IGZyYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGFyZzoKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnQ3VycmVudGx5IGRpc3BsYXlpbmc6JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuZGlzcGxheWluZy5nZXQoc2VsZi5jdXJmcmFtZSwge30pLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCclczogJXInICUgaXRlbSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHZhbCA9IHNlbGYuX2dldHZhbF9leGNlcHQoYXJnKQorICAgICAgICAgICAgc2VsZi5kaXNwbGF5aW5nLnNldGRlZmF1bHQoc2VsZi5jdXJmcmFtZSwge30pW2FyZ10gPSB2YWwKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSgnZGlzcGxheSAlczogJXInICUgKGFyZywgdmFsKSkKKworICAgIGRlZiBkb191bmRpc3BsYXkoc2VsZiwgYXJnKToKKyAgICAgICAgIiIidW5kaXNwbGF5IFtleHByZXNzaW9uXQorCisgICAgICAgIERvIG5vdCBkaXNwbGF5IHRoZSBleHByZXNzaW9uIGFueSBtb3JlIGluIHRoZSBjdXJyZW50IGZyYW1lLgorCisgICAgICAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50IGZyYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgYXJnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBzZWxmLmRpc3BsYXlpbmcuZ2V0KHNlbGYuY3VyZnJhbWUsIHt9KVthcmddCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignbm90IGRpc3BsYXlpbmcgJXMnICUgYXJnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5kaXNwbGF5aW5nLnBvcChzZWxmLmN1cmZyYW1lLCBOb25lKQorCisgICAgZGVmIGRvX2ludGVyYWN0KHNlbGYsIGFyZyk6CisgICAgICAgICIiImludGVyYWN0CisKKyAgICAgICAgU3RhcnQgYW4gaW50ZXJhdGl2ZSBpbnRlcnByZXRlciB3aG9zZSBnbG9iYWwgbmFtZXNwYWNlCisgICAgICAgIGNvbnRhaW5zIGFsbCB0aGUgKGdsb2JhbCBhbmQgbG9jYWwpIG5hbWVzIGZvdW5kIGluIHRoZSBjdXJyZW50IHNjb3BlLgorICAgICAgICAiIiIKKyAgICAgICAgbnMgPSBzZWxmLmN1cmZyYW1lLmZfZ2xvYmFscy5jb3B5KCkKKyAgICAgICAgbnMudXBkYXRlKHNlbGYuY3VyZnJhbWVfbG9jYWxzKQorICAgICAgICBjb2RlLmludGVyYWN0KCIqaW50ZXJhY3RpdmUqIiwgbG9jYWw9bnMpCiAKICAgICBkZWYgZG9fYWxpYXMoc2VsZiwgYXJnKToKKyAgICAgICAgIiIiYWxpYXMgW25hbWUgW2NvbW1hbmQgW3BhcmFtZXRlciBwYXJhbWV0ZXIgLi4uXSBdXQorICAgICAgICBDcmVhdGUgYW4gYWxpYXMgY2FsbGVkICduYW1lJyB0aGF0IGV4ZWN1dGVzICdjb21tYW5kJy4gIFRoZQorICAgICAgICBjb21tYW5kIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUKKyAgICAgICAgcGFyYW1ldGVycyBjYW4gYmUgaW5kaWNhdGVkIGJ5ICUxLCAlMiwgYW5kIHNvIG9uLCB3aGlsZSAlKiBpcworICAgICAgICByZXBsYWNlZCBieSBhbGwgdGhlIHBhcmFtZXRlcnMuICBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUKKyAgICAgICAgY3VycmVudCBhbGlhcyBmb3IgbmFtZSBpcyBzaG93bi4gSWYgbm8gbmFtZSBpcyBnaXZlbiwgYWxsCisgICAgICAgIGFsaWFzZXMgYXJlIGxpc3RlZC4KKworICAgICAgICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlCisgICAgICAgIGxlZ2FsbHkgdHlwZWQgYXQgdGhlIHBkYiBwcm9tcHQuICBOb3RlISAgWW91ICpjYW4qIG92ZXJyaWRlCisgICAgICAgIGludGVybmFsIHBkYiBjb21tYW5kcyB3aXRoIGFsaWFzZXMhICBUaG9zZSBpbnRlcm5hbCBjb21tYW5kcworICAgICAgICBhcmUgdGhlbiBoaWRkZW4gdW50aWwgdGhlIGFsaWFzIGlzIHJlbW92ZWQuICBBbGlhc2luZyBpcworICAgICAgICByZWN1cnNpdmVseSBhcHBsaWVkIHRvIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbAorICAgICAgICBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdCBhbG9uZS4KKworICAgICAgICBBcyBhbiBleGFtcGxlLCBoZXJlIGFyZSB0d28gdXNlZnVsIGFsaWFzZXMgKGVzcGVjaWFsbHkgd2hlbgorICAgICAgICBwbGFjZWQgaW4gdGhlIC5wZGJyYyBmaWxlKToKKworICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpCisgICAgICAgIGFsaWFzIHBpIGZvciBrIGluICUxLl9fZGljdF9fLmtleXMoKTogcHJpbnQgIiUxLiIsaywiPSIsJTEuX19kaWN0X19ba10KKyAgICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZgorICAgICAgICBhbGlhcyBwcyBwaSBzZWxmCisgICAgICAgICIiIgogICAgICAgICBhcmdzID0gYXJnLnNwbGl0KCkKICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CiAgICAgICAgICAgICBrZXlzID0gc29ydGVkKHNlbGYuYWxpYXNlcy5rZXlzKCkpCiAgICAgICAgICAgICBmb3IgYWxpYXMgaW4ga2V5czoKLSAgICAgICAgICAgICAgICBwcmludCgiJXMgPSAlcyIgJSAoYWxpYXMsIHNlbGYuYWxpYXNlc1thbGlhc10pLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiJXMgPSAlcyIgJSAoYWxpYXMsIHNlbGYuYWxpYXNlc1thbGlhc10pKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIGFyZ3NbMF0gaW4gc2VsZi5hbGlhc2VzIGFuZCBsZW4oYXJncykgPT0gMToKLSAgICAgICAgICAgIHByaW50KCIlcyA9ICVzIiAlIChhcmdzWzBdLCBzZWxmLmFsaWFzZXNbYXJnc1swXV0pLCBmaWxlPXNlbGYuc3Rkb3V0KQorICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIlcyA9ICVzIiAlIChhcmdzWzBdLCBzZWxmLmFsaWFzZXNbYXJnc1swXV0pKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hbGlhc2VzW2FyZ3NbMF1dID0gJyAnLmpvaW4oYXJnc1sxOl0pCiAKICAgICBkZWYgZG9fdW5hbGlhcyhzZWxmLCBhcmcpOgorICAgICAgICAiIiJ1bmFsaWFzIG5hbWUKKyAgICAgICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuCisgICAgICAgICIiIgogICAgICAgICBhcmdzID0gYXJnLnNwbGl0KCkKICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6IHJldHVybgogICAgICAgICBpZiBhcmdzWzBdIGluIHNlbGYuYWxpYXNlczoKICAgICAgICAgICAgIGRlbCBzZWxmLmFsaWFzZXNbYXJnc1swXV0KIAotICAgICNsaXN0IG9mIGFsbCB0aGUgY29tbWFuZHMgbWFraW5nIHRoZSBwcm9ncmFtIHJlc3VtZSBleGVjdXRpb24uCisgICAgIyBMaXN0IG9mIGFsbCB0aGUgY29tbWFuZHMgbWFraW5nIHRoZSBwcm9ncmFtIHJlc3VtZSBleGVjdXRpb24uCiAgICAgY29tbWFuZHNfcmVzdW1pbmcgPSBbJ2RvX2NvbnRpbnVlJywgJ2RvX3N0ZXAnLCAnZG9fbmV4dCcsICdkb19yZXR1cm4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdkb19xdWl0JywgJ2RvX2p1bXAnXQogCkBAIC04OTEsMjkyICsxMzM1LDU3IEBACiAgICAgZGVmIHByaW50X3N0YWNrX2VudHJ5KHNlbGYsIGZyYW1lX2xpbmVubywgcHJvbXB0X3ByZWZpeD1saW5lX3ByZWZpeCk6CiAgICAgICAgIGZyYW1lLCBsaW5lbm8gPSBmcmFtZV9saW5lbm8KICAgICAgICAgaWYgZnJhbWUgaXMgc2VsZi5jdXJmcmFtZToKLSAgICAgICAgICAgIHByaW50KCc+JywgZW5kPScgJywgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHByZWZpeCA9ICc+ICcKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCcgJywgZW5kPScgJywgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgcHJpbnQoc2VsZi5mb3JtYXRfc3RhY2tfZW50cnkoZnJhbWVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9tcHRfcHJlZml4KSwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgIHByZWZpeCA9ICcgICcKKyAgICAgICAgc2VsZi5tZXNzYWdlKHByZWZpeCArCisgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdF9zdGFja19lbnRyeShmcmFtZV9saW5lbm8sIHByb21wdF9wcmVmaXgpKQogCisgICAgIyBQcm92aWRlIGhlbHAKIAotICAgICMgSGVscCBtZXRob2RzIChkZXJpdmVkIGZyb20gcGRiLmRvYykKKyAgICBkZWYgZG9faGVscChzZWxmLCBhcmcpOgorICAgICAgICAiIiJoKGVscCkKKyAgICAgICAgV2l0aG91dCBhcmd1bWVudCwgcHJpbnQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLgorICAgICAgICBXaXRoIGEgY29tbWFuZCBuYW1lIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4KKyAgICAgICAgImhlbHAgcGRiIiBzaG93cyB0aGUgZnVsbCBwZGIgZG9jdW1lbnRhdGlvbi4KKyAgICAgICAgImhlbHAgZXhlYyIgZ2l2ZXMgaGVscCBvbiB0aGUgISBjb21tYW5kLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IGFyZzoKKyAgICAgICAgICAgIHJldHVybiBjbWQuQ21kLmRvX2hlbHAoc2VsZiwgYXJnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdG9waWMgPSBnZXRhdHRyKHNlbGYsICdoZWxwXycgKyBhcmcpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvcGljKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb21tYW5kID0gZ2V0YXR0cihzZWxmLCAnZG9fJyArIGFyZykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5lcnJvcignTm8gaGVscCBmb3IgJXInICUgYXJnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcignTm8gaGVscCBmb3IgJXI7IHBsZWFzZSBkbyBub3QgcnVuIFB5dGhvbiB3aXRoIC1PTyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWYgeW91IG5lZWQgY29tbWFuZCBoZWxwJyAlIGFyZykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHNlbGYubWVzc2FnZShjb21tYW5kLl9fZG9jX18ucnN0cmlwKCkpCiAKLSAgICBkZWYgaGVscF9oZWxwKHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfaCgpCi0KLSAgICBkZWYgaGVscF9oKHNlbGYpOgotICAgICAgICBwcmludCgiIiJoKGVscCkKLVdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4KLVdpdGggYSBjb21tYW5kIG5hbWUgYXMgYXJndW1lbnQsIHByaW50IGhlbHAgYWJvdXQgdGhhdCBjb21tYW5kCi0iaGVscCBwZGIiIHBpcGVzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gZmlsZSB0byB0aGUgJFBBR0VSCi0iaGVscCBleGVjIiBnaXZlcyBoZWxwIG9uIHRoZSAhIGNvbW1hbmQiIiIsIGZpbGU9c2VsZi5zdGRvdXQpCi0KLSAgICBkZWYgaGVscF93aGVyZShzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX3coKQotCi0gICAgZGVmIGhlbHBfdyhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIidyhoZXJlKQotUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4KLUFuIGFycm93IGluZGljYXRlcyB0aGUgImN1cnJlbnQgZnJhbWUiLCB3aGljaCBkZXRlcm1pbmVzIHRoZQotY29udGV4dCBvZiBtb3N0IGNvbW1hbmRzLiAgJ2J0JyBpcyBhbiBhbGlhcyBmb3IgdGhpcyBjb21tYW5kLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGhlbHBfYnQgPSBoZWxwX3cKLQotICAgIGRlZiBoZWxwX2Rvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuaGVscF9kKCkKLQotICAgIGRlZiBoZWxwX2Qoc2VsZik6Ci0gICAgICAgIHByaW50KCIiImQob3duKQotTW92ZSB0aGUgY3VycmVudCBmcmFtZSBvbmUgbGV2ZWwgZG93biBpbiB0aGUgc3RhY2sgdHJhY2UKLSh0byBhIG5ld2VyIGZyYW1lKS4iIiIsIGZpbGU9c2VsZi5zdGRvdXQpCi0KLSAgICBkZWYgaGVscF91cChzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX3UoKQotCi0gICAgZGVmIGhlbHBfdShzZWxmKToKLSAgICAgICAgcHJpbnQoIiIidShwKQotTW92ZSB0aGUgY3VycmVudCBmcmFtZSBvbmUgbGV2ZWwgdXAgaW4gdGhlIHN0YWNrIHRyYWNlCi0odG8gYW4gb2xkZXIgZnJhbWUpLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX2JyZWFrKHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfYigpCi0KLSAgICBkZWYgaGVscF9iKHNlbGYpOgotICAgICAgICBwcmludCgiIiJiKHJlYWspIChbZmlsZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl0KLVdpdGggYSBsaW5lIG51bWJlciBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQKLWZpbGUuICBXaXRoIGEgZnVuY3Rpb24gbmFtZSwgc2V0IGEgYnJlYWsgYXQgZmlyc3QgZXhlY3V0YWJsZSBsaW5lCi1vZiB0aGF0IGZ1bmN0aW9uLiAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLiAgSWYgYSBzZWNvbmQKLWFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgYW4gZXhwcmVzc2lvbgotd2hpY2ggbXVzdCBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLgotCi1UaGUgbGluZSBudW1iZXIgbWF5IGJlIHByZWZpeGVkIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwKLXRvIHNwZWNpZnkgYSBicmVha3BvaW50IGluIGFub3RoZXIgZmlsZSAocHJvYmFibHkgb25lIHRoYXQKLWhhc24ndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXMgc2VhcmNoZWQgZm9yIG9uIHN5cy5wYXRoOwotdGhlIC5weSBzdWZmaXggbWF5IGJlIG9taXR0ZWQuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfY2xlYXIoc2VsZik6Ci0gICAgICAgIHNlbGYuaGVscF9jbCgpCi0KLSAgICBkZWYgaGVscF9jbChzZWxmKToKLSAgICAgICAgcHJpbnQoImNsKGVhcikgZmlsZW5hbWU6bGluZW5vIiwgZmlsZT1zZWxmLnN0ZG91dCkKLSAgICAgICAgcHJpbnQoIiIiY2woZWFyKSBbYnBudW1iZXIgW2JwbnVtYmVyLi4uXV0KLVdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyCi10aG9zZSBicmVha3BvaW50cy4gIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dAotZmlyc3QgYXNrIGNvbmZpcm1hdGlvbikuICBXaXRoIGEgZmlsZW5hbWU6bGluZW5vIGFyZ3VtZW50LAotY2xlYXIgYWxsIGJyZWFrcyBhdCB0aGF0IGxpbmUgaW4gdGhhdCBmaWxlLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3RicmVhayhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIidGJyZWFrICBzYW1lIGFyZ3VtZW50cyBhcyBicmVhaywgYnV0IGJyZWFrcG9pbnQgaXMKLXJlbW92ZWQgd2hlbiBmaXJzdCBoaXQuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfZW5hYmxlKHNlbGYpOgotICAgICAgICBwcmludCgiIiJlbmFibGUgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl0KLUVuYWJsZXMgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YKLWJwIG51bWJlcnMuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfZGlzYWJsZShzZWxmKToKLSAgICAgICAgcHJpbnQoIiIiZGlzYWJsZSBicG51bWJlciBbYnBudW1iZXIgLi4uXQotRGlzYWJsZXMgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YKLWJwIG51bWJlcnMuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfaWdub3JlKHNlbGYpOgotICAgICAgICBwcmludCgiIiJpZ25vcmUgYnBudW1iZXIgY291bnQKLVNldHMgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgQSBicmVha3BvaW50Ci1iZWNvbWVzIGFjdGl2ZSB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sIHRoZQotY291bnQgaXMgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQgYW5kIHRoZQotYnJlYWtwb2ludCBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBldmFsdWF0ZXMKLXRvIHRydWUuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfY29uZGl0aW9uKHNlbGYpOgotICAgICAgICBwcmludCgiIiJjb25kaXRpb24gYnBudW1iZXIgc3RyX2NvbmRpdGlvbgotc3RyX2NvbmRpdGlvbiBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIGFuIGV4cHJlc3Npb24gd2hpY2gKLW11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4KLUlmIHN0cl9jb25kaXRpb24gaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7Ci1pLmUuLCB0aGUgYnJlYWtwb2ludCBpcyBtYWRlIHVuY29uZGl0aW9uYWwuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfc3RlcChzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX3MoKQotCi0gICAgZGVmIGhlbHBfcyhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIicyh0ZXApCi1FeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uCi0oZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3IgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24pLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3VudGlsKHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfdW50KCkKLQotICAgIGRlZiBoZWxwX3VudChzZWxmKToKLSAgICAgICAgcHJpbnQoIiIidW50KGlsKQotQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50Ci1vbmUgaXMgcmVhY2hlZCBvciB1bnRpbCB0aGUgY3VycmVudCBmcmFtZSByZXR1cm5zIiIiKQotCi0gICAgZGVmIGhlbHBfbmV4dChzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX24oKQotCi0gICAgZGVmIGhlbHBfbihzZWxmKToKLSAgICAgICAgcHJpbnQoIiIibihleHQpCi1Db250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbgotaXMgcmVhY2hlZCBvciBpdCByZXR1cm5zLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3JldHVybihzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX3IoKQotCi0gICAgZGVmIGhlbHBfcihzZWxmKToKLSAgICAgICAgcHJpbnQoIiIicihldHVybikKLUNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgY3VycmVudCBmdW5jdGlvbiByZXR1cm5zLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX2NvbnRpbnVlKHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfYygpCi0KLSAgICBkZWYgaGVscF9jb250KHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfYygpCi0KLSAgICBkZWYgaGVscF9jKHNlbGYpOgotICAgICAgICBwcmludCgiIiJjKG9udChpbnVlKSkKLUNvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX2p1bXAoc2VsZik6Ci0gICAgICAgIHNlbGYuaGVscF9qKCkKLQotICAgIGRlZiBoZWxwX2ooc2VsZik6Ci0gICAgICAgIHByaW50KCIiImoodW1wKSBsaW5lbm8KLVNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4iIiIsIGZpbGU9c2VsZi5zdGRvdXQpCi0KLSAgICBkZWYgaGVscF9kZWJ1ZyhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIiZGVidWcgY29kZQotRW50ZXIgYSByZWN1cnNpdmUgZGVidWdnZXIgdGhhdCBzdGVwcyB0aHJvdWdoIHRoZSBjb2RlIGFyZ3VtZW50Ci0od2hpY2ggaXMgYW4gYXJiaXRyYXJ5IGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkCi1pbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCkuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfbGlzdChzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX2woKQotCi0gICAgZGVmIGhlbHBfbChzZWxmKToKLSAgICAgICAgcHJpbnQoIiIibChpc3QpIFtmaXJzdCBbLGxhc3RdXQotTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4KLVdpdGhvdXQgYXJndW1lbnRzLCBsaXN0IDExIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lCi1vciBjb250aW51ZSB0aGUgcHJldmlvdXMgbGlzdGluZy4KLVdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIHN0YXJ0aW5nIGF0IHRoYXQgbGluZS4KLVdpdGggdHdvIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7Ci1pZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGEgY291bnQuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfYXJncyhzZWxmKToKLSAgICAgICAgc2VsZi5oZWxwX2EoKQotCi0gICAgZGVmIGhlbHBfYShzZWxmKToKLSAgICAgICAgcHJpbnQoIiIiYShyZ3MpCi1QcmludCB0aGUgYXJndW1lbnRzIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3Aoc2VsZik6Ci0gICAgICAgIHByaW50KCIiInAocmludCkgZXhwcmVzc2lvbgotUHJpbnQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3BwKHNlbGYpOgotICAgICAgICBwcmludCgiIiJwcCBleHByZXNzaW9uCi1QcmV0dHktcHJpbnQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICBkb19oID0gZG9faGVscAogCiAgICAgZGVmIGhlbHBfZXhlYyhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIiKCEpIHN0YXRlbWVudAotRXhlY3V0ZSB0aGUgKG9uZS1saW5lKSBzdGF0ZW1lbnQgaW4gdGhlIGNvbnRleHQgb2YKLXRoZSBjdXJyZW50IHN0YWNrIGZyYW1lLgotVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3Qgd29yZAotb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLgotVG8gYXNzaWduIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIHlvdSBtdXN0IGFsd2F5cyBwcmVmaXggdGhlCi1jb21tYW5kIHdpdGggYSAnZ2xvYmFsJyBjb21tYW5kLCBlLmcuOgotKFBkYikgZ2xvYmFsIGxpc3Rfb3B0aW9uczsgbGlzdF9vcHRpb25zID0gWyctbCddCi0oUGRiKSIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX3J1bihzZWxmKToKLSAgICAgICAgcHJpbnQoIiIicnVuIFthcmdzLi4uXQotUmVzdGFydCB0aGUgZGVidWdnZWQgcHl0aG9uIHByb2dyYW0uIElmIGEgc3RyaW5nIGlzIHN1cHBsaWVkLCBpdCBpcwotc3BsaXR0ZWQgd2l0aCAic2hsZXgiIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQgYXMgdGhlIG5ldyBzeXMuYXJndi4KLUhpc3RvcnksIGJyZWFrcG9pbnRzLCBhY3Rpb25zIGFuZCBkZWJ1Z2dlciBvcHRpb25zIGFyZSBwcmVzZXJ2ZWQuCi0icmVzdGFydCIgaXMgYW4gYWxpYXMgZm9yICJydW4iLiIiIikKLQotICAgIGhlbHBfcmVzdGFydCA9IGhlbHBfcnVuCi0KLSAgICBkZWYgaGVscF9xdWl0KHNlbGYpOgotICAgICAgICBzZWxmLmhlbHBfcSgpCi0KLSAgICBkZWYgaGVscF9xKHNlbGYpOgotICAgICAgICBwcmludCgiIiJxKHVpdCkgb3IgZXhpdCAtIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuCi1UaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGhlbHBfZXhpdCA9IGhlbHBfcQotCi0gICAgZGVmIGhlbHBfd2hhdGlzKHNlbGYpOgotICAgICAgICBwcmludCgiIiJ3aGF0aXMgYXJnCi1QcmludHMgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50LiIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKLQotICAgIGRlZiBoZWxwX0VPRihzZWxmKToKLSAgICAgICAgcHJpbnQoIiIiRU9GCi1IYW5kbGVzIHRoZSByZWNlaXB0IG9mIEVPRiBhcyBhIGNvbW1hbmQuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfYWxpYXMoc2VsZik6Ci0gICAgICAgIHByaW50KCIiImFsaWFzIFtuYW1lIFtjb21tYW5kIFtwYXJhbWV0ZXIgcGFyYW1ldGVyIC4uLl0gXV0KLUNyZWF0ZXMgYW4gYWxpYXMgY2FsbGVkICduYW1lJyB0aGUgZXhlY3V0ZXMgJ2NvbW1hbmQnLiAgVGhlIGNvbW1hbmQKLW11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVycyBhcmUKLWluZGljYXRlZCBieSAlMSwgJTIsIGFuZCBzbyBvbiwgd2hpbGUgJSogaXMgcmVwbGFjZWQgYnkgYWxsIHRoZQotcGFyYW1ldGVycy4gIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGFsaWFzIGZvciBuYW1lCi1pcyBzaG93bi4gSWYgbm8gbmFtZSBpcyBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC4KLQotQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZQotbGVnYWxseSB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUhICBZb3UgKmNhbiogb3ZlcnJpZGUKLWludGVybmFsIHBkYiBjb21tYW5kcyB3aXRoIGFsaWFzZXMhICBUaG9zZSBpbnRlcm5hbCBjb21tYW5kcwotYXJlIHRoZW4gaGlkZGVuIHVudGlsIHRoZSBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkKLWFwcGxpZWQgdG8gdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzCi1pbiB0aGUgbGluZSBhcmUgbGVmdCBhbG9uZS4KLQotU29tZSB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZCBpbiB0aGUgLnBkYnJjIGZpbGUpIGFyZToKLQotI1ByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpCi1hbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50ICIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdCi0KLSNQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZgotYWxpYXMgcHMgcGkgc2VsZgotIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfdW5hbGlhcyhzZWxmKToKLSAgICAgICAgcHJpbnQoIiIidW5hbGlhcyBuYW1lCi1EZWxldGVzIHRoZSBzcGVjaWZpZWQgYWxpYXMuIiIiLCBmaWxlPXNlbGYuc3Rkb3V0KQotCi0gICAgZGVmIGhlbHBfY29tbWFuZHMoc2VsZik6Ci0gICAgICAgIHByaW50KCIiImNvbW1hbmRzIFticG51bWJlcl0KLShjb20pIC4uLgotKGNvbSkgZW5kCi0oUGRiKQotCi1TcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgYnBudW1iZXIuICBUaGUKLWNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZQotY29udGFpbmluZyBqdXN0ICdlbmQnIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuCi0KLVRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kCi1mb2xsb3cgaXQgaW1tZWRpYXRlbHkgd2l0aCAgZW5kOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLgotCi1XaXRoIG5vIGJwbnVtYmVyIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QKLWJyZWFrcG9pbnQgc2V0LgotCi1Zb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi4KLVNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlcgotY29tbWFuZCB0aGF0IHJlc3VtZXMgZXhlY3V0aW9uLgotCi1TcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLAotc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzCi10aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGVuZCkuCi1UaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24KLShldmVuIHdpdGggYSBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIKLWFub3RoZXIgYnJlYWtwb2ludC0td2hpY2ggY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0bwotYW1iaWd1aXRpZXMgYWJvdXQgd2hpY2ggbGlzdCB0byBleGVjdXRlLgotCi0gICBJZiB5b3UgdXNlIHRoZSAnc2lsZW50JyBjb21tYW5kIGluIHRoZSBjb21tYW5kIGxpc3QsIHRoZQotdXN1YWwgbWVzc2FnZSBhYm91dCBzdG9wcGluZyBhdCBhIGJyZWFrcG9pbnQgaXMgbm90IHByaW50ZWQuICBUaGlzIG1heQotYmUgZGVzaXJhYmxlIGZvciBicmVha3BvaW50cyB0aGF0IGFyZSB0byBwcmludCBhIHNwZWNpZmljIG1lc3NhZ2UgYW5kCi10aGVuIGNvbnRpbnVlLiAgSWYgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZHMgcHJpbnQgYW55dGhpbmcsIHlvdQotc2VlIG5vIHNpZ24gdGhhdCB0aGUgYnJlYWtwb2ludCB3YXMgcmVhY2hlZC4KLSIiIiwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgIiIiKCEpIHN0YXRlbWVudAorICAgICAgICBFeGVjdXRlIHRoZSAob25lLWxpbmUpIHN0YXRlbWVudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgY3VycmVudAorICAgICAgICBzdGFjayBmcmFtZS4gIFRoZSBleGNsYW1hdGlvbiBwb2ludCBjYW4gYmUgb21pdHRlZCB1bmxlc3MgdGhlCisgICAgICAgIGZpcnN0IHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8KKyAgICAgICAgYXNzaWduIHRvIGEgZ2xvYmFsIHZhcmlhYmxlIHlvdSBtdXN0IGFsd2F5cyBwcmVmaXggdGhlIGNvbW1hbmQKKyAgICAgICAgd2l0aCBhICdnbG9iYWwnIGNvbW1hbmQsIGUuZy46CisgICAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFsnLWwnXQorICAgICAgICAoUGRiKQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5tZXNzYWdlKChzZWxmLmhlbHBfZXhlYy5fX2RvY19fIG9yICcnKS5zdHJpcCgpKQogCiAgICAgZGVmIGhlbHBfcGRiKHNlbGYpOgogICAgICAgICBoZWxwKCkKIAorICAgICMgb3RoZXIgaGVscGVyIGZ1bmN0aW9ucworCiAgICAgZGVmIGxvb2t1cG1vZHVsZShzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkhlbHBlciBmdW5jdGlvbiBmb3IgYnJlYWsvY2xlYXIgcGFyc2luZyAtLSBtYXkgYmUgb3ZlcnJpZGRlbi4KIApAQCAtMTIxOSwxNCArMTQyOCwzMyBAQAogICAgICAgICAjIGV2ZW50cyBkZXBlbmRzIG9uIHB5dGhvbiB2ZXJzaW9uKS4gU28gd2UgdGFrZSBzcGVjaWFsIG1lYXN1cmVzIHRvCiAgICAgICAgICMgYXZvaWQgc3RvcHBpbmcgYmVmb3JlIHdlIHJlYWNoIHRoZSBtYWluIHNjcmlwdCAoc2VlIHVzZXJfbGluZSBhbmQKICAgICAgICAgIyB1c2VyX2NhbGwgZm9yIGRldGFpbHMpLgotICAgICAgICBzZWxmLl93YWl0X2Zvcl9tYWlucHlmaWxlID0gMQorICAgICAgICBzZWxmLl93YWl0X2Zvcl9tYWlucHlmaWxlID0gVHJ1ZQogICAgICAgICBzZWxmLm1haW5weWZpbGUgPSBzZWxmLmNhbm9uaWMoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuX3VzZXJfcmVxdWVzdGVkX3F1aXQgPSAwCisgICAgICAgIHNlbGYuX3VzZXJfcmVxdWVzdGVkX3F1aXQgPSBGYWxzZQogICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgogICAgICAgICAgICAgc3RhdGVtZW50ID0gImV4ZWMoY29tcGlsZSglciwgJXIsICdleGVjJykpIiAlIFwKICAgICAgICAgICAgICAgICAgICAgICAgIChmcC5yZWFkKCksIHNlbGYubWFpbnB5ZmlsZSkKICAgICAgICAgc2VsZi5ydW4oc3RhdGVtZW50KQogCisjIENvbGxlY3QgYWxsIGNvbW1hbmQgaGVscCBpbnRvIGRvY3N0cmluZywgaWYgbm90IHJ1biB3aXRoIC1PTworCitpZiBfX2RvY19fIGlzIG5vdCBOb25lOgorICAgICMgdW5mb3J0dW5hdGVseSB3ZSBjYW4ndCBndWVzcyB0aGlzIG9yZGVyIGZyb20gdGhlIGNsYXNzIGRlZmluaXRpb24KKyAgICBfaGVscF9vcmRlciA9IFsKKyAgICAgICAgJ2hlbHAnLCAnd2hlcmUnLCAnZG93bicsICd1cCcsICdicmVhaycsICd0YnJlYWsnLCAnY2xlYXInLCAnZGlzYWJsZScsCisgICAgICAgICdlbmFibGUnLCAnaWdub3JlJywgJ2NvbmRpdGlvbicsICdjb21tYW5kcycsICdzdGVwJywgJ25leHQnLCAndW50aWwnLAorICAgICAgICAnanVtcCcsICdyZXR1cm4nLCAncmV0dmFsJywgJ3J1bicsICdjb250aW51ZScsICdsaXN0JywgJ2xvbmdsaXN0JywKKyAgICAgICAgJ2FyZ3MnLCAncHJpbnQnLCAncHAnLCAnd2hhdGlzJywgJ3NvdXJjZScsICdkaXNwbGF5JywgJ3VuZGlzcGxheScsCisgICAgICAgICdpbnRlcmFjdCcsICdhbGlhcycsICd1bmFsaWFzJywgJ2RlYnVnJywgJ3F1aXQnLAorICAgIF0KKworICAgIGZvciBfY29tbWFuZCBpbiBfaGVscF9vcmRlcjoKKyAgICAgICAgX19kb2NfXyArPSBnZXRhdHRyKFBkYiwgJ2RvXycgKyBfY29tbWFuZCkuX19kb2NfXy5zdHJpcCgpICsgJ1xuXG4nCisgICAgX19kb2NfXyArPSBQZGIuaGVscF9leGVjLl9fZG9jX18KKworICAgIGRlbCBfaGVscF9vcmRlciwgX2NvbW1hbmQKKworCiAjIFNpbXBsaWZpZWQgaW50ZXJmYWNlCiAKIGRlZiBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKToKQEAgLTEyNTMsOSArMTQ4MSw5IEBACiAgICAgICAgICMgc3lzLmV4Y19pbmZvKCkgcmV0dXJucyAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykgaWYgYW4gZXhjZXB0aW9uIGlzCiAgICAgICAgICMgYmVpbmcgaGFuZGxlZCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgTm9uZQogICAgICAgICB0ID0gc3lzLmV4Y19pbmZvKClbMl0KLSAgICAgICAgaWYgdCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQSB2YWxpZCB0cmFjZWJhY2sgbXVzdCBiZSBwYXNzZWQgaWYgbm8gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIGlzIGJlaW5nIGhhbmRsZWQiKQorICAgIGlmIHQgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQSB2YWxpZCB0cmFjZWJhY2sgbXVzdCBiZSBwYXNzZWQgaWYgbm8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb24gaXMgYmVpbmcgaGFuZGxlZCIpCiAKICAgICBwID0gUGRiKCkKICAgICBwLnJlc2V0KCkKQEAgLTEyNzQsMjcgKzE1MDIsNDUgQEAKIAogIyBwcmludCBoZWxwCiBkZWYgaGVscCgpOgotICAgIGZvciBkaXJuYW1lIGluIHN5cy5wYXRoOgotICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCAncGRiLmRvYycpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZ1bGxuYW1lKToKLSAgICAgICAgICAgIHN0cyA9IG9zLnN5c3RlbSgnJHtQQUdFUi1tb3JlfSAnK2Z1bGxuYW1lKQotICAgICAgICAgICAgaWYgc3RzOiBwcmludCgnKioqIFBhZ2VyIGV4aXQgc3RhdHVzOicsIHN0cykKLSAgICAgICAgICAgIGJyZWFrCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1NvcnJ5LCBjYW5cJ3QgZmluZCB0aGUgaGVscCBmaWxlICJwZGIuZG9jIicsIGVuZD0nICcpCi0gICAgICAgIHByaW50KCdhbG9uZyB0aGUgUHl0aG9uIHNlYXJjaCBwYXRoJykKKyAgICBpbXBvcnQgcHlkb2MKKyAgICBweWRvYy5wYWdlcihfX2RvY19fKQorCitfdXNhZ2UgPSAiIiJcCit1c2FnZTogcGRiLnB5IFstYyBjb21tYW5kXSAuLi4gcHlmaWxlIFthcmddIC4uLgorCitEZWJ1ZyB0aGUgUHl0aG9uIHByb2dyYW0gZ2l2ZW4gYnkgcHlmaWxlLgorCitJbml0aWFsIGNvbW1hbmRzIGFyZSByZWFkIGZyb20gLnBkYnJjIGZpbGVzIGluIHlvdXIgaG9tZSBkaXJlY3RvcnkKK2FuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGlmIHRoZXkgZXhpc3QuICBDb21tYW5kcyBzdXBwbGllZCB3aXRoCistYyBhcmUgZXhlY3V0ZWQgYWZ0ZXIgY29tbWFuZHMgZnJvbSAucGRicmMgZmlsZXMuCisKK1RvIGxldCB0aGUgc2NyaXB0IHJ1biB1bnRpbCBhbiBleGNlcHRpb24gb2NjdXJzLCB1c2UgIi1jIGNvbnRpbnVlIi4KK1RvIGxldCB0aGUgc2NyaXB0IHJ1biB1cCB0byBhIGdpdmVuIGxpbmUgWCBpbiB0aGUgZGVidWdnZWQgZmlsZSwgdXNlCisiLWMgJ3VudGlsIFgnIi4iIiIKIAogZGVmIG1haW4oKToKLSAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdIG9yIHN5cy5hcmd2WzFdIGluICgiLS1oZWxwIiwgIi1oIik6Ci0gICAgICAgIHByaW50KCJ1c2FnZTogcGRiLnB5IHNjcmlwdGZpbGUgW2FyZ10gLi4uIikKKyAgICBpbXBvcnQgZ2V0b3B0CisKKyAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdoYzonLCBbJy0taGVscCcsICctLWNvbW1hbmQ9J10pCisKKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgcHJpbnQoX3VzYWdlKQogICAgICAgICBzeXMuZXhpdCgyKQogCi0gICAgbWFpbnB5ZmlsZSA9ICBzeXMuYXJndlsxXSAgICAgIyBHZXQgc2NyaXB0IGZpbGVuYW1lCisgICAgY29tbWFuZHMgPSBbXQorICAgIGZvciBvcHQsIG9wdGFyZyBpbiBvcHRzOgorICAgICAgICBpZiBvcHQgaW4gWyctaCcsICctLWhlbHAnXToKKyAgICAgICAgICAgIHByaW50KF91c2FnZSkKKyAgICAgICAgICAgIHN5cy5leGl0KCkKKyAgICAgICAgZWxpZiBvcHQgaW4gWyctYycsICctLWNvbW1hbmQnXToKKyAgICAgICAgICAgIGNvbW1hbmRzLmFwcGVuZChvcHRhcmcpCisKKyAgICBtYWlucHlmaWxlID0gYXJnc1swXSAgICAgIyBHZXQgc2NyaXB0IGZpbGVuYW1lCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG1haW5weWZpbGUpOgogICAgICAgICBwcmludCgnRXJyb3I6JywgbWFpbnB5ZmlsZSwgJ2RvZXMgbm90IGV4aXN0JykKICAgICAgICAgc3lzLmV4aXQoMSkKIAotICAgIGRlbCBzeXMuYXJndlswXSAgICAgICAgICMgSGlkZSAicGRiLnB5IiBmcm9tIGFyZ3VtZW50IGxpc3QKKyAgICBzeXMuYXJndls6XSA9IGFyZ3MgICAgICAjIEhpZGUgInBkYi5weSIgYW5kIHBkYiBvcHRpb25zIGZyb20gYXJndW1lbnQgbGlzdAogCiAgICAgIyBSZXBsYWNlIHBkYidzIGRpciB3aXRoIHNjcmlwdCdzIGRpciBpbiBmcm9udCBvZiBtb2R1bGUgc2VhcmNoIHBhdGguCiAgICAgc3lzLnBhdGhbMF0gPSBvcy5wYXRoLmRpcm5hbWUobWFpbnB5ZmlsZSkKQEAgLTEzMDQsNiArMTU1MCw3IEBACiAgICAgIyBjaGFuZ2VkIGJ5IHRoZSB1c2VyIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgaXMgYSAicmVzdGFydCIgY29tbWFuZAogICAgICMgd2hpY2ggYWxsb3dzIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KICAgICBwZGIgPSBQZGIoKQorICAgIHBkYi5yY0xpbmVzLmV4dGVuZChjb21tYW5kcykKICAgICB3aGlsZSBUcnVlOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwZGIuX3J1bnNjcmlwdChtYWlucHlmaWxlKQpAQCAtMTMxMiwxMCArMTU1OSwxMCBAQAogICAgICAgICAgICAgcHJpbnQoIlRoZSBwcm9ncmFtIGZpbmlzaGVkIGFuZCB3aWxsIGJlIHJlc3RhcnRlZCIpCiAgICAgICAgIGV4Y2VwdCBSZXN0YXJ0OgogICAgICAgICAgICAgcHJpbnQoIlJlc3RhcnRpbmciLCBtYWlucHlmaWxlLCAid2l0aCBhcmd1bWVudHM6IikKLSAgICAgICAgICAgIHByaW50KCJcdCIgKyAiICIuam9pbihzeXMuYXJndlsxOl0pKQorICAgICAgICAgICAgcHJpbnQoIlx0IiArICIgIi5qb2luKGFyZ3MpKQogICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKICAgICAgICAgICAgICMgSW4gbW9zdCBjYXNlcyBTeXN0ZW1FeGl0IGRvZXMgbm90IHdhcnJhbnQgYSBwb3N0LW1vcnRlbSBzZXNzaW9uLgotICAgICAgICAgICAgcHJpbnQoIlRoZSBwcm9ncmFtIGV4aXRlZCB2aWEgc3lzLmV4aXQoKS4gRXhpdCBzdGF0dXM6ICIsIGVuZD0nICcpCisgICAgICAgICAgICBwcmludCgiVGhlIHByb2dyYW0gZXhpdGVkIHZpYSBzeXMuZXhpdCgpLiBFeGl0IHN0YXR1czoiLCBlbmQ9JyAnKQogICAgICAgICAgICAgcHJpbnQoc3lzLmV4Y19pbmZvKClbMV0pCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQpkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZS5weSBiL0xpYi9waWNrbGUucHkKaW5kZXggNTI3NTk5MS4uYWNhOGZkMSAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZS5weQorKysgYi9MaWIvcGlja2xlLnB5CkBAIC0xMjM1LDkgKzEyMzUsNyBAQAogICAgICAgICByYWlzZSBfU3RvcCh2YWx1ZSkKICAgICBkaXNwYXRjaFtTVE9QWzBdXSA9IGxvYWRfc3RvcAogCi0jIEVuY29kZS9kZWNvZGUgbG9uZ3MgaW4gbGluZWFyIHRpbWUuCi0KLWltcG9ydCBiaW5hc2NpaSBhcyBfYmluYXNjaWkKKyMgRW5jb2RlL2RlY29kZSBsb25ncy4KIAogZGVmIGVuY29kZV9sb25nKHgpOgogICAgIHIiIiJFbmNvZGUgYSBsb25nIHRvIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCkBAIC0xMjYwLDUwICsxMjU4LDE0IEBACiAgICAgYidceDdmJwogICAgID4+PgogICAgICIiIgotCiAgICAgaWYgeCA9PSAwOgogICAgICAgICByZXR1cm4gYicnCi0gICAgaWYgeCA+IDA6Ci0gICAgICAgIGFzaGV4ID0gaGV4KHgpCi0gICAgICAgIGFzc2VydCBhc2hleC5zdGFydHN3aXRoKCIweCIpCi0gICAgICAgIG5qdW5rY2hhcnMgPSAyICsgYXNoZXguZW5kc3dpdGgoJ0wnKQotICAgICAgICBuaWJibGVzID0gbGVuKGFzaGV4KSAtIG5qdW5rY2hhcnMKLSAgICAgICAgaWYgbmliYmxlcyAmIDE6Ci0gICAgICAgICAgICAjIG5lZWQgYW4gZXZlbiAjIG9mIG5pYmJsZXMgZm9yIHVuaGV4bGlmeQotICAgICAgICAgICAgYXNoZXggPSAiMHgwIiArIGFzaGV4WzI6XQotICAgICAgICBlbGlmIGludChhc2hleFsyXSwgMTYpID49IDg6Ci0gICAgICAgICAgICAjICJsb29rcyBuZWdhdGl2ZSIsIHNvIG5lZWQgYSBieXRlIG9mIHNpZ24gYml0cwotICAgICAgICAgICAgYXNoZXggPSAiMHgwMCIgKyBhc2hleFsyOl0KLSAgICBlbHNlOgotICAgICAgICAjIEJ1aWxkIHRoZSAyNTYncy1jb21wbGVtZW50OiAgKDFMIDw8IG5ieXRlcykgKyB4LiAgVGhlIHRyaWNrIGlzCi0gICAgICAgICMgdG8gZmluZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGxpbmVhciB0aW1lIChhbHRob3VnaCB0aGF0IHNob3VsZAotICAgICAgICAjIHJlYWxseSBiZSBhIGNvbnN0YW50LXRpbWUgdGFzaykuCi0gICAgICAgIGFzaGV4ID0gaGV4KC14KQotICAgICAgICBhc3NlcnQgYXNoZXguc3RhcnRzd2l0aCgiMHgiKQotICAgICAgICBuanVua2NoYXJzID0gMiArIGFzaGV4LmVuZHN3aXRoKCdMJykKLSAgICAgICAgbmliYmxlcyA9IGxlbihhc2hleCkgLSBuanVua2NoYXJzCi0gICAgICAgIGlmIG5pYmJsZXMgJiAxOgotICAgICAgICAgICAgIyBFeHRlbmQgdG8gYSBmdWxsIGJ5dGUuCi0gICAgICAgICAgICBuaWJibGVzICs9IDEKLSAgICAgICAgbmJpdHMgPSBuaWJibGVzICogNAotICAgICAgICB4ICs9IDEgPDwgbmJpdHMKLSAgICAgICAgYXNzZXJ0IHggPiAwCi0gICAgICAgIGFzaGV4ID0gaGV4KHgpCi0gICAgICAgIG5qdW5rY2hhcnMgPSAyICsgYXNoZXguZW5kc3dpdGgoJ0wnKQotICAgICAgICBuZXduaWJibGVzID0gbGVuKGFzaGV4KSAtIG5qdW5rY2hhcnMKLSAgICAgICAgaWYgbmV3bmliYmxlcyA8IG5pYmJsZXM6Ci0gICAgICAgICAgICBhc2hleCA9ICIweCIgKyAiMCIgKiAobmliYmxlcyAtIG5ld25pYmJsZXMpICsgYXNoZXhbMjpdCi0gICAgICAgIGlmIGludChhc2hleFsyXSwgMTYpIDwgODoKLSAgICAgICAgICAgICMgImxvb2tzIHBvc2l0aXZlIiwgc28gbmVlZCBhIGJ5dGUgb2Ygc2lnbiBiaXRzCi0gICAgICAgICAgICBhc2hleCA9ICIweGZmIiArIGFzaGV4WzI6XQotCi0gICAgaWYgYXNoZXguZW5kc3dpdGgoJ0wnKToKLSAgICAgICAgYXNoZXggPSBhc2hleFsyOi0xXQotICAgIGVsc2U6Ci0gICAgICAgIGFzaGV4ID0gYXNoZXhbMjpdCi0gICAgYXNzZXJ0IGxlbihhc2hleCkgJiAxID09IDAsICh4LCBhc2hleCkKLSAgICBiaW5hcnkgPSBfYmluYXNjaWkudW5oZXhsaWZ5KGFzaGV4KQotICAgIHJldHVybiBieXRlcyhiaW5hcnlbOjotMV0pCisgICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQorICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgorICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCisgICAgcmV0dXJuIHJlc3VsdAogCiBkZWYgZGVjb2RlX2xvbmcoZGF0YSk6CiAgICAgciIiIkRlY29kZSBhIGxvbmcgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgpAQCAtMTMyMywyMSArMTI4NSw3IEBACiAgICAgPj4+IGRlY29kZV9sb25nKGIiXHg3ZiIpCiAgICAgMTI3CiAgICAgIiIiCi0KLSAgICBuYnl0ZXMgPSBsZW4oZGF0YSkKLSAgICBpZiBuYnl0ZXMgPT0gMDoKLSAgICAgICAgcmV0dXJuIDAKLSAgICBhc2hleCA9IF9iaW5hc2NpaS5oZXhsaWZ5KGRhdGFbOjotMV0pCi0gICAgbiA9IGludChhc2hleCwgMTYpICMgcXVhZHJhdGljIHRpbWUgYmVmb3JlIFB5dGhvbiAyLjM7IGxpbmVhciBub3cKLSAgICBpZiBkYXRhWy0xXSA+PSAweDgwOgotICAgICAgICBuIC09IDEgPDwgKG5ieXRlcyAqIDgpCi0gICAgcmV0dXJuIG4KLQotIyBVc2UgdGhlIGZhc3RlciBfcGlja2xlIGlmIHBvc3NpYmxlCi10cnk6Ci0gICAgZnJvbSBfcGlja2xlIGltcG9ydCAqCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgUGlja2xlciwgVW5waWNrbGVyID0gX1BpY2tsZXIsIF9VbnBpY2tsZXIKKyAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKIAogIyBTaG9ydGhhbmRzCiAKQEAgLTEzNjIsMTAgKzEzMTAsMzggQEAKICAgICByZXR1cm4gVW5waWNrbGVyKGZpbGUsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzLAogICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpLmxvYWQoKQogCisjIFVzZSB0aGUgZmFzdGVyIF9waWNrbGUgaWYgcG9zc2libGUKK3RyeToKKyAgICBmcm9tIF9waWNrbGUgaW1wb3J0ICoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBQaWNrbGVyLCBVbnBpY2tsZXIgPSBfUGlja2xlciwgX1VucGlja2xlcgorCiAjIERvY3Rlc3QKIGRlZiBfdGVzdCgpOgogICAgIGltcG9ydCBkb2N0ZXN0CiAgICAgcmV0dXJuIGRvY3Rlc3QudGVzdG1vZCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgX3Rlc3QoKQorICAgIGltcG9ydCBzeXMsIGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdkaXNwbGF5IGNvbnRlbnRzIG9mIHRoZSBwaWNrbGUgZmlsZXMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICdwaWNrbGVfZmlsZScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ2JyJyksCisgICAgICAgIG5hcmdzPScqJywgaGVscD0ndGhlIHBpY2tsZSBmaWxlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLXQnLCAnLS10ZXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0ncnVuIHNlbGYtdGVzdCBzdWl0ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy12JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0ncnVuIHZlcmJvc2VseTsgb25seSBhZmZlY3RzIHNlbGYtdGVzdCBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJncy50ZXN0OgorICAgICAgICBfdGVzdCgpCisgICAgZWxzZToKKyAgICAgICAgaWYgbm90IGFyZ3MucGlja2xlX2ZpbGU6CisgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBvcnQgcHByaW50CisgICAgICAgICAgICBmb3IgZiBpbiBhcmdzLnBpY2tsZV9maWxlOgorICAgICAgICAgICAgICAgIG9iaiA9IGxvYWQoZikKKyAgICAgICAgICAgICAgICBwcHJpbnQucHByaW50KG9iaikKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCAwYWYyZmRiLi4zMDYxNjc1IDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC0xOTA3LDcgKzE5MDcsNyBAQAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEEgc3ltYm9saWMgcGlja2xlIGRpc2Fzc2VtYmxlci4KIAotZGVmIGRpcyhwaWNrbGUsIG91dD1Ob25lLCBtZW1vPU5vbmUsIGluZGVudGxldmVsPTQpOgorZGVmIGRpcyhwaWNrbGUsIG91dD1Ob25lLCBtZW1vPU5vbmUsIGluZGVudGxldmVsPTQsIGFubm90YXRlPTApOgogICAgICIiIlByb2R1Y2UgYSBzeW1ib2xpYyBkaXNhc3NlbWJseSBvZiBhIHBpY2tsZS4KIAogICAgICdwaWNrbGUnIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgb3Igc3RyaW5nLCBjb250YWluaW5nIGEgKGF0IGxlYXN0IG9uZSkKQEAgLTE5MjMsOSArMTkyMywxNSBAQAogICAgIHRvIHByb2NlZWQgYWNyb3NzIG11bHRpcGxlIHBpY2tsZXMgdGhhdCB3ZXJlIGFsbCBjcmVhdGVkIGJ5IHRoZSBzYW1lCiAgICAgcGlja2xlciB3aXRoIHRoZSBzYW1lIG1lbW8uICBPcmRpbmFyaWx5IHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoaXMuCiAKLSAgICBPcHRpb25hbCBhcmcgaW5kZW50bGV2ZWwgaXMgdGhlIG51bWJlciBvZiBibGFua3MgYnkgd2hpY2ggdG8gaW5kZW50CisgICAgT3B0aW9uYWwgYXJnICdpbmRlbnRsZXZlbCcgaXMgdGhlIG51bWJlciBvZiBibGFua3MgYnkgd2hpY2ggdG8gaW5kZW50CiAgICAgYSBuZXcgTUFSSyBsZXZlbC4gIEl0IGRlZmF1bHRzIHRvIDQuCiAKKyAgICBPcHRpb25hbCBhcmcgJ2Fubm90YXRlJyBpZiBub256ZXJvIGluc3RydWN0cyBkaXMoKSB0byBhZGQgc2hvcnQKKyAgICBkZXNjcmlwdGlvbiBvZiB0aGUgb3Bjb2RlIG9uIGVhY2ggbGluZSBvZiBkaXNhc3NlbWJsZWQgb3V0cHV0LgorICAgIFRoZSB2YWx1ZSBnaXZlbiB0byAnYW5ub3RhdGUnIG11c3QgYmUgYW4gaW50ZWdlciBhbmQgaXMgdXNlZCBhcyBhCisgICAgaGludCBmb3IgdGhlIGNvbHVtbiB3aGVyZSBhbm5vdGF0aW9uIHNob3VsZCBzdGFydC4gIFRoZSBkZWZhdWx0CisgICAgdmFsdWUgaXMgMCwgbWVhbmluZyBubyBhbm5vdGF0aW9ucy4KKwogICAgIEluIGFkZGl0aW9uIHRvIHByaW50aW5nIHRoZSBkaXNhc3NlbWJseSwgc29tZSBzYW5pdHkgY2hlY2tzIGFyZSBtYWRlOgogCiAgICAgKyBBbGwgZW1iZWRkZWQgb3Bjb2RlIGFyZ3VtZW50cyAibWFrZSBzZW5zZSIuCkBAIC0xOTUzLDYgKzE5NTksNyBAQAogICAgIG1hcmtzdGFjayA9IFtdICAgICAgIyBieXRlY29kZSBwb3NpdGlvbnMgb2YgTUFSSyBvcGNvZGVzCiAgICAgaW5kZW50Y2h1bmsgPSAnICcgKiBpbmRlbnRsZXZlbAogICAgIGVycm9ybXNnID0gTm9uZQorICAgIGFubm9jb2wgPSBhbm5vdGF0ZSAgIyBjb2x1bW50IGhpbnQgZm9yIGFubm90YXRpb25zCiAgICAgZm9yIG9wY29kZSwgYXJnLCBwb3MgaW4gZ2Vub3BzKHBpY2tsZSk6CiAgICAgICAgIGlmIHBvcyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHByaW50KCIlNWQ6IiAlIHBvcywgZW5kPScgJywgZmlsZT1vdXQpCkBAIC0yMDIwLDYgKzIwMjcsMTMgQEAKICAgICAgICAgICAgICAgICBsaW5lICs9ICcgJyArIHJlcHIoYXJnKQogICAgICAgICAgICAgaWYgbWFya21zZzoKICAgICAgICAgICAgICAgICBsaW5lICs9ICcgJyArIG1hcmttc2cKKyAgICAgICAgaWYgYW5ub3RhdGU6CisgICAgICAgICAgICBsaW5lICs9ICcgJyAqIChhbm5vY29sIC0gbGVuKGxpbmUpKQorICAgICAgICAgICAgIyBtYWtlIGEgbWlsZCBlZmZvcnQgdG8gYWxpZ24gYW5ub3RhdGlvbnMKKyAgICAgICAgICAgIGFubm9jb2wgPSBsZW4obGluZSkKKyAgICAgICAgICAgIGlmIGFubm9jb2wgPiA1MDoKKyAgICAgICAgICAgICAgICBhbm5vY29sID0gYW5ub3RhdGUKKyAgICAgICAgICAgIGxpbmUgKz0gJyAnICsgb3Bjb2RlLmRvYy5zcGxpdCgnXG4nLCAxKVswXQogICAgICAgICBwcmludChsaW5lLCBmaWxlPW91dCkKIAogICAgICAgICBpZiBlcnJvcm1zZzoKQEAgLTIyOTMsNiArMjMwNywyMiBAQAogICAgMTI6IGggICAgQklOR0VUICAgICAxCiAgICAxNDogLiAgICBTVE9QCiBoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSAyCisKK1RyeSBwcm90b2NvbCAzIHdpdGggYW5ub3RhdGlvbnM6CisKKz4+PiBkaXMocGlja2xlLmR1bXBzKFQsIDMpLCBhbm5vdGF0ZT0xKQorICAgIDA6IFx4ODAgUFJPVE8gICAgICAzIFByb3RvY29sIHZlcnNpb24gaW5kaWNhdG9yLgorICAgIDI6IF0gICAgRU1QVFlfTElTVCAgIFB1c2ggYW4gZW1wdHkgbGlzdC4KKyAgICAzOiBxICAgIEJJTlBVVCAgICAgMCBTdG9yZSB0aGUgc3RhY2sgdG9wIGludG8gdGhlIG1lbW8uICBUaGUgc3RhY2sgaXMgbm90IHBvcHBlZC4KKyAgICA1OiBoICAgIEJJTkdFVCAgICAgMCBSZWFkIGFuIG9iamVjdCBmcm9tIHRoZSBtZW1vIGFuZCBwdXNoIGl0IG9uIHRoZSBzdGFjay4KKyAgICA3OiBceDg1IFRVUExFMSAgICAgICBCdWlsZCBhIG9uZS10dXBsZSBvdXQgb2YgdGhlIHRvcG1vc3QgaXRlbSBvbiB0aGUgc3RhY2suCisgICAgODogcSAgICBCSU5QVVQgICAgIDEgU3RvcmUgdGhlIHN0YWNrIHRvcCBpbnRvIHRoZSBtZW1vLiAgVGhlIHN0YWNrIGlzIG5vdCBwb3BwZWQuCisgICAxMDogYSAgICBBUFBFTkQgICAgICAgQXBwZW5kIGFuIG9iamVjdCB0byBhIGxpc3QuCisgICAxMTogMCAgICBQT1AgICAgICAgICAgRGlzY2FyZCB0aGUgdG9wIHN0YWNrIGl0ZW0sIHNocmlua2luZyB0aGUgc3RhY2sgYnkgb25lIGl0ZW0uCisgICAxMjogaCAgICBCSU5HRVQgICAgIDEgUmVhZCBhbiBvYmplY3QgZnJvbSB0aGUgbWVtbyBhbmQgcHVzaCBpdCBvbiB0aGUgc3RhY2suCisgICAxNDogLiAgICBTVE9QICAgICAgICAgU3RvcCB0aGUgdW5waWNrbGluZyBtYWNoaW5lLgoraGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMgorCiAiIiIKIAogX21lbW9fdGVzdCA9IHIiIiIKQEAgLTIzMzMsNCArMjM2Myw0NyBAQAogICAgIHJldHVybiBkb2N0ZXN0LnRlc3Rtb2QoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIF90ZXN0KCkKKyAgICBpbXBvcnQgc3lzLCBhcmdwYXJzZQorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICBkZXNjcmlwdGlvbj0nZGlzYXNzZW1ibGUgb25lIG9yIG1vcmUgcGlja2xlIGZpbGVzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAncGlja2xlX2ZpbGUnLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdicicpLAorICAgICAgICBuYXJncz0nKicsIGhlbHA9J3RoZSBwaWNrbGUgZmlsZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy1vJywgJy0tb3V0cHV0JywgZGVmYXVsdD1zeXMuc3Rkb3V0LCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3JyksCisgICAgICAgIGhlbHA9J3RoZSBmaWxlIHdoZXJlIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHdyaXR0ZW4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctbScsICctLW1lbW8nLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICBoZWxwPSdwcmVzZXJ2ZSBtZW1vIGJldHdlZW4gZGlzYXNzZW1ibGllcycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy1sJywgJy0taW5kZW50bGV2ZWwnLCBkZWZhdWx0PTQsIHR5cGU9aW50LAorICAgICAgICBoZWxwPSd0aGUgbnVtYmVyIG9mIGJsYW5rcyBieSB3aGljaCB0byBpbmRlbnQgYSBuZXcgTUFSSyBsZXZlbCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy1hJywgJy0tYW5ub3RhdGUnLCAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0nYW5ub3RhdGUgZWFjaCBsaW5lIHdpdGggYSBzaG9ydCBvcGNvZGUgZGVzY3JpcHRpb24nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctcCcsICctLXByZWFtYmxlJywgZGVmYXVsdD0iPT0+IHtuYW1lfSA8PT0iLAorICAgICAgICBoZWxwPSdpZiBtb3JlIHRoYW4gb25lIHBpY2tsZSBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhpcyBiZWZvcmUnCisgICAgICAgICcgZWFjaCBkaXNhc3NlbWJseScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJy10JywgJy0tdGVzdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgIGhlbHA9J3J1biBzZWxmLXRlc3Qgc3VpdGUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICctdicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgIGhlbHA9J3J1biB2ZXJib3NlbHk7IG9ubHkgYWZmZWN0cyBzZWxmLXRlc3QgcnVuJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIGFyZ3MudGVzdDoKKyAgICAgICAgX3Rlc3QoKQorICAgIGVsc2U6CisgICAgICAgIGFubm90YXRlID0gMzAgaWYgYXJncy5hbm5vdGF0ZSBlbHNlIDAKKyAgICAgICAgaWYgbm90IGFyZ3MucGlja2xlX2ZpbGU6CisgICAgICAgICAgICBwYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsaWYgbGVuKGFyZ3MucGlja2xlX2ZpbGUpID09IDE6CisgICAgICAgICAgICBkaXMoYXJncy5waWNrbGVfZmlsZVswXSwgYXJncy5vdXRwdXQsIE5vbmUsCisgICAgICAgICAgICAgICAgYXJncy5pbmRlbnRsZXZlbCwgYW5ub3RhdGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtZW1vID0ge30gaWYgYXJncy5tZW1vIGVsc2UgTm9uZQorICAgICAgICAgICAgZm9yIGYgaW4gYXJncy5waWNrbGVfZmlsZToKKyAgICAgICAgICAgICAgICBwcmVhbWJsZSA9IGFyZ3MucHJlYW1ibGUuZm9ybWF0KG5hbWU9Zi5uYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Mub3V0cHV0LndyaXRlKHByZWFtYmxlICsgJ1xuJykKKyAgICAgICAgICAgICAgICBkaXMoZiwgYXJncy5vdXRwdXQsIG1lbW8sIGFyZ3MuaW5kZW50bGV2ZWwsIGFubm90YXRlKQpkaWZmIC0tZ2l0IGEvTGliL3BrZ3V0aWwucHkgYi9MaWIvcGtndXRpbC5weQppbmRleCAwZWM2ZWM1Li5iNDg2Mjc1IDEwMDY0NAotLS0gYS9MaWIvcGtndXRpbC5weQorKysgYi9MaWIvcGtndXRpbC5weQpAQCAtMjQxLDcgKzI0MSw4IEBACiAgICAgICAgIHJldHVybiBtb2QKIAogICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRobmFtZSk6Ci0gICAgICAgIHJldHVybiBvcGVuKHBhdGhuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuKHBhdGhuYW1lLCAicmIiKSBhcyBmaWxlOgorICAgICAgICAgICAgcmV0dXJuIGZpbGUucmVhZCgpCiAKICAgICBkZWYgX3Jlb3BlbihzZWxmKToKICAgICAgICAgaWYgc2VsZi5maWxlIGFuZCBzZWxmLmZpbGUuY2xvc2VkOgpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtYXRoZW9zL0lOLnB5IGIvTGliL3BsYXQtYXRoZW9zL0lOLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTc3ZWZjLi4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LWF0aGVvcy9JTi5weQorKysgL2Rldi9udWxsCkBAIC0xLDk0NCArMCwwIEBACi0jIEdlbmVyYXRlZCBieSBoMnB5IGZyb20gL2luY2x1ZGUvbmV0aW5ldC9pbi5oCi1fTkVUSU5FVF9JTl9IID0gMQotCi0jIEluY2x1ZGVkIGZyb20gZmVhdHVyZXMuaAotX0ZFQVRVUkVTX0ggPSAxCi1fX1VTRV9BTlNJID0gMQotX19GQVZPUl9CU0QgPSAxCi1fSVNPQzlYX1NPVVJDRSA9IDEKLV9QT1NJWF9TT1VSQ0UgPSAxCi1fUE9TSVhfQ19TT1VSQ0UgPSAxOTk1MDYKLV9YT1BFTl9TT1VSQ0UgPSA1MDAKLV9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPSAxCi1fTEFSR0VGSUxFNjRfU09VUkNFID0gMQotX0JTRF9TT1VSQ0UgPSAxCi1fU1ZJRF9TT1VSQ0UgPSAxCi1fQlNEX1NPVVJDRSA9IDEKLV9TVklEX1NPVVJDRSA9IDEKLV9fVVNFX0lTT0M5WCA9IDEKLV9QT1NJWF9TT1VSQ0UgPSAxCi1fUE9TSVhfQ19TT1VSQ0UgPSAyCi1fUE9TSVhfQ19TT1VSQ0UgPSAxOTk1MDYKLV9fVVNFX1BPU0lYID0gMQotX19VU0VfUE9TSVgyID0gMQotX19VU0VfUE9TSVgxOTkzMDkgPSAxCi1fX1VTRV9QT1NJWDE5OTUwNiA9IDEKLV9fVVNFX1hPUEVOID0gMQotX19VU0VfWE9QRU5fRVhURU5ERUQgPSAxCi1fX1VTRV9VTklYOTggPSAxCi1fTEFSR0VGSUxFX1NPVVJDRSA9IDEKLV9fVVNFX1hPUEVOX0VYVEVOREVEID0gMQotX19VU0VfTEFSR0VGSUxFID0gMQotX19VU0VfTEFSR0VGSUxFNjQgPSAxCi1fX1VTRV9GSUxFX09GRlNFVDY0ID0gMQotX19VU0VfTUlTQyA9IDEKLV9fVVNFX0JTRCA9IDEKLV9fVVNFX1NWSUQgPSAxCi1fX1VTRV9HTlUgPSAxCi1fX1VTRV9SRUVOVFJBTlQgPSAxCi1fX1NURENfSUVDXzU1OV9fID0gMQotX19TVERDX0lFQ181NTlfQ09NUExFWF9fID0gMQotX19HTlVfTElCUkFSWV9fID0gNgotX19HTElCQ19fID0gMgotX19HTElCQ19NSU5PUl9fID0gMQotCi0jIEluY2x1ZGVkIGZyb20gc3lzL2NkZWZzLmgKLV9TWVNfQ0RFRlNfSCA9IDEKLWRlZiBfX1BNVChhcmdzKTogcmV0dXJuIGFyZ3MKLQotZGVmIF9fUChhcmdzKTogcmV0dXJuIGFyZ3MKLQotZGVmIF9fUE1UKGFyZ3MpOiByZXR1cm4gYXJncwotCi1kZWYgX19QKGFyZ3MpOiByZXR1cm4gKCkKLQotZGVmIF9fUE1UKGFyZ3MpOiByZXR1cm4gKCkKLQotZGVmIF9fU1RSSU5HKHgpOiByZXR1cm4gI3gKLQotZGVmIF9fU1RSSU5HKHgpOiByZXR1cm4gIngiCi0KLWRlZiBfX0FTTU5BTUUoY25hbWUpOiByZXR1cm4gX19BU01OQU1FMiAoX19VU0VSX0xBQkVMX1BSRUZJWF9fLCBjbmFtZSkKLQotZGVmIF9fYXR0cmlidXRlX18oeHl6KTogcmV0dXJuCi0KLV9fVVNFX0VYVEVSTl9JTkxJTkVTID0gMQotCi0jIEluY2x1ZGVkIGZyb20gZ251L3N0dWJzLmgKLQotIyBJbmNsdWRlZCBmcm9tIGxpbWl0cy5oCi1fTElCQ19MSU1JVFNfSF8gPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3Bvc2l4MV9saW0uaAotX0JJVFNfUE9TSVgxX0xJTV9IID0gMQotX1BPU0lYX0FJT19MSVNUSU9fTUFYID0gMgotX1BPU0lYX0FJT19NQVggPSAxCi1fUE9TSVhfQVJHX01BWCA9IDQwOTYKLV9QT1NJWF9DSElMRF9NQVggPSA2Ci1fUE9TSVhfREVMQVlUSU1FUl9NQVggPSAzMgotX1BPU0lYX0xJTktfTUFYID0gOAotX1BPU0lYX01BWF9DQU5PTiA9IDI1NQotX1BPU0lYX01BWF9JTlBVVCA9IDI1NQotX1BPU0lYX01RX09QRU5fTUFYID0gOAotX1BPU0lYX01RX1BSSU9fTUFYID0gMzIKLV9QT1NJWF9OR1JPVVBTX01BWCA9IDAKLV9QT1NJWF9PUEVOX01BWCA9IDE2Ci1fUE9TSVhfRkRfU0VUU0laRSA9IF9QT1NJWF9PUEVOX01BWAotX1BPU0lYX05BTUVfTUFYID0gMTQKLV9QT1NJWF9QQVRIX01BWCA9IDI1NQotX1BPU0lYX1BJUEVfQlVGID0gNTEyCi1fUE9TSVhfUlRTSUdfTUFYID0gOAotX1BPU0lYX1NFTV9OU0VNU19NQVggPSAyNTYKLV9QT1NJWF9TRU1fVkFMVUVfTUFYID0gMzI3NjcKLV9QT1NJWF9TSUdRVUVVRV9NQVggPSAzMgotX1BPU0lYX1NTSVpFX01BWCA9IDMyNzY3Ci1fUE9TSVhfU1RSRUFNX01BWCA9IDgKLV9QT1NJWF9UWk5BTUVfTUFYID0gMwotX1BPU0lYX1FMSU1JVCA9IDEKLV9QT1NJWF9ISVdBVCA9IF9QT1NJWF9QSVBFX0JVRgotX1BPU0lYX1VJT19NQVhJT1YgPSAxNgotX1BPU0lYX1RUWV9OQU1FX01BWCA9IDkKLV9QT1NJWF9USU1FUl9NQVggPSAzMgotX1BPU0lYX0xPR0lOX05BTUVfTUFYID0gOQotX1BPU0lYX0NMT0NLUkVTX01JTiA9IDIwMDAwMDAwCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL2xvY2FsX2xpbS5oCi0KLSMgSW5jbHVkZWQgZnJvbSBwb3NpeC9saW1pdHMuaAotQ0hBUl9CSVQgPSA4Ci1DSEFSX01BWCA9IDEyNwotQ0hBUl9NSU4gPSAoLTEyOCkKLUlOVF9NQVggPSAyMTQ3NDgzNjQ3Ci1JTlRfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCi1MT05HX01BWCA9IDIxNDc0ODM2NDcKLUxPTkdfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCi1TQ0hBUl9NQVggPSAxMjcKLVNDSEFSX01JTiA9ICgtMTI4KQotU0hSVF9NQVggPSAzMjc2NwotU0hSVF9NSU4gPSAoLTMyNzY4KQotVUNIQVJfTUFYID0gMjU1Ci1VU0hSVF9NQVggPSA2NTUzNQotX1BPU0lYX0FSR19NQVggPSAxMzEwNzIKLV9QT1NJWF9DSElMRF9NQVggPSA0MDk2Ci1fUE9TSVhfTElOS19NQVggPSAxCi1fUE9TSVhfTUFYX0NBTk9OID0gMTI2Ci1fUE9TSVhfTUFYX0lOUFVUID0gMTI2Ci1fUE9TSVhfTkFNRV9NQVggPSAyNTYKLV9QT1NJWF9OR1JPVVBTX01BWCA9IDMyCi1fUE9TSVhfT1BFTl9NQVggPSAyNTYKLV9QT1NJWF9QQVRIX01BWCA9IDI1NQotX1BPU0lYX1BJUEVfQlVGID0gNTEyCi1fUE9TSVhfU1NJWkVfTUFYID0gMjE0NzQ4MzY0NwotX1BPU0lYX1NUUkVBTV9NQVggPSAyNTYKLV9QT1NJWF9UWk5BTUVfTUFYID0gNQotTkdST1VQU19NQVggPSAzMgotQVJHX01BWCA9IDEzMTA3MgotQ0hJTERfTUFYID0gNDA5NgotT1BFTl9NQVggPSAyNTYKLUxJTktfTUFYID0gMQotTUFYX0NBTk9OID0gMTI2Ci1NQVhfSU5QVVQgPSAxMjYKLU5BTUVfTUFYID0gMjU1Ci1QQVRIX01BWCA9IDQwOTYKLVBJUEVfQlVGID0gNDA5NgotU1NJWkVfTUFYID0gMjE0NzQ4MzY0NwotTUFYU1lNTElOS1MgPSAxNgotQUlPX1BSSU9fREVMVEFfTUFYID0gMjAKLVNTSVpFX01BWCA9IElOVF9NQVgKLU5HUk9VUFNfTUFYID0gX1BPU0lYX05HUk9VUFNfTUFYCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3Bvc2l4Ml9saW0uaAotX0JJVFNfUE9TSVgyX0xJTV9IID0gMQotX1BPU0lYMl9CQ19CQVNFX01BWCA9IDk5Ci1fUE9TSVgyX0JDX0RJTV9NQVggPSAyMDQ4Ci1fUE9TSVgyX0JDX1NDQUxFX01BWCA9IDk5Ci1fUE9TSVgyX0JDX1NUUklOR19NQVggPSAxMDAwCi1fUE9TSVgyX0NPTExfV0VJR0hUU19NQVggPSAyNTUKLV9QT1NJWDJfRVFVSVZfQ0xBU1NfTUFYID0gMjU1Ci1fUE9TSVgyX0VYUFJfTkVTVF9NQVggPSAzMgotX1BPU0lYMl9MSU5FX01BWCA9IDIwNDgKLV9QT1NJWDJfUkVfRFVQX01BWCA9IDI1NQotX1BPU0lYMl9DSEFSQ0xBU1NfTkFNRV9NQVggPSAyMDQ4Ci1CQ19CQVNFX01BWCA9IF9QT1NJWDJfQkNfQkFTRV9NQVgKLUJDX0RJTV9NQVggPSBfUE9TSVgyX0JDX0RJTV9NQVgKLUJDX1NDQUxFX01BWCA9IF9QT1NJWDJfQkNfU0NBTEVfTUFYCi1CQ19TVFJJTkdfTUFYID0gX1BPU0lYMl9CQ19TVFJJTkdfTUFYCi1DT0xMX1dFSUdIVFNfTUFYID0gX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYCi1FUVVJVl9DTEFTU19NQVggPSBfUE9TSVgyX0VRVUlWX0NMQVNTX01BWAotRVhQUl9ORVNUX01BWCA9IF9QT1NJWDJfRVhQUl9ORVNUX01BWAotTElORV9NQVggPSBfUE9TSVgyX0xJTkVfTUFYCi1SRV9EVVBfTUFYID0gX1BPU0lYMl9SRV9EVVBfTUFYCi1DSEFSQ0xBU1NfTkFNRV9NQVggPSBfUE9TSVgyX0NIQVJDTEFTU19OQU1FX01BWAotCi0jIEluY2x1ZGVkIGZyb20gYml0cy94b3Blbl9saW0uaAotX1hPUEVOX0xJTV9IID0gMQotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9zdGRpb19saW0uaAotTF90bXBuYW0gPSAyMAotVE1QX01BWCA9IDIzODMyOAotRklMRU5BTUVfTUFYID0gNDA5NgotTF9jdGVybWlkID0gOQotTF9jdXNlcmlkID0gOQotRk9QRU5fTUFYID0gMjU2Ci1TVFJFQU1fTUFYID0gRk9QRU5fTUFYCi1UWk5BTUVfTUFYID0gX1BPU0lYX1RaTkFNRV9NQVgKLV9YT1BFTl9JT1ZfTUFYID0gX1BPU0lYX1VJT19NQVhJT1YKLU5MX0FSR01BWCA9IF9QT1NJWF9BUkdfTUFYCi1OTF9MQU5HTUFYID0gX1BPU0lYMl9MSU5FX01BWAotTkxfTVNHTUFYID0gSU5UX01BWAotTkxfTk1BWCA9IElOVF9NQVgKLU5MX1NFVE1BWCA9IElOVF9NQVgKLU5MX1RFWFRNQVggPSBJTlRfTUFYCi1OWkVSTyA9IDIwCi1NQl9MRU5fTUFYID0gNgotX0xJTUlUU19IID0gMQotQ0hBUl9CSVQgPSA4Ci1TQ0hBUl9NSU4gPSAoLTEyOCkKLVNDSEFSX01BWCA9IDEyNwotVUNIQVJfTUFYID0gMjU1Ci1DSEFSX01JTiA9IDAKLUNIQVJfTUFYID0gVUNIQVJfTUFYCi1DSEFSX01JTiA9IFNDSEFSX01JTgotQ0hBUl9NQVggPSBTQ0hBUl9NQVgKLVNIUlRfTUlOID0gKC0zMjc2OCkKLVNIUlRfTUFYID0gMzI3NjcKLVVTSFJUX01BWCA9IDY1NTM1Ci1JTlRfTUlOID0gKC1JTlRfTUFYIC0gMSkKLUlOVF9NQVggPSAyMTQ3NDgzNjQ3Ci1VSU5UX01BWCA9IDQyOTQ5NjcyOTUKLUxPTkdfTUFYID0gOTIyMzM3MjAzNjg1NDc3NTgwNwotTE9OR19NQVggPSAyMTQ3NDgzNjQ3Ci1MT05HX01JTiA9ICgtTE9OR19NQVggLSAxKQotVUxPTkdfTUFYID0gNDI5NDk2NzI5NQotCi0jIEluY2x1ZGVkIGZyb20gc3RkaW50LmgKLV9TVERJTlRfSCA9IDEKLQotIyBJbmNsdWRlZCBmcm9tIGJpdHMvd29yZHNpemUuaAotX19XT1JEU0laRSA9IDMyCi1kZWYgX19JTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBMCi0KLWRlZiBfX1VJTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBVTAotCi1kZWYgX19JTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBMTAotCi1kZWYgX19VSU5UNjRfQyhjKTogcmV0dXJuIGMgIyMgVUxMCi0KLUlOVDhfTUlOID0gKC0xMjgpCi1JTlQxNl9NSU4gPSAoLTMyNzY3LTEpCi1JTlQzMl9NSU4gPSAoLTIxNDc0ODM2NDctMSkKLUlOVDY0X01JTiA9ICgtX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCi1JTlQ4X01BWCA9ICgxMjcpCi1JTlQxNl9NQVggPSAoMzI3NjcpCi1JTlQzMl9NQVggPSAoMjE0NzQ4MzY0NykKLUlOVDY0X01BWCA9IChfX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykpCi1VSU5UNjRfTUFYID0gKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotSU5UX0xFQVNUOF9NSU4gPSAoLTEyOCkKLUlOVF9MRUFTVDE2X01JTiA9ICgtMzI3NjctMSkKLUlOVF9MRUFTVDMyX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQotSU5UX0xFQVNUNjRfTUlOID0gKC1fX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKLUlOVF9MRUFTVDhfTUFYID0gKDEyNykKLUlOVF9MRUFTVDE2X01BWCA9ICgzMjc2NykKLUlOVF9MRUFTVDMyX01BWCA9ICgyMTQ3NDgzNjQ3KQotSU5UX0xFQVNUNjRfTUFYID0gKF9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KSkKLVVJTlRfTEVBU1Q2NF9NQVggPSAoX19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpCi1JTlRfRkFTVDhfTUlOID0gKC0xMjgpCi1JTlRfRkFTVDE2X01JTiA9ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQotSU5UX0ZBU1QzMl9NSU4gPSAoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSkKLUlOVF9GQVNUMTZfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCi1JTlRfRkFTVDMyX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQotSU5UX0ZBU1Q2NF9NSU4gPSAoLV9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KS0xKQotSU5UX0ZBU1Q4X01BWCA9ICgxMjcpCi1JTlRfRkFTVDE2X01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQotSU5UX0ZBU1QzMl9NQVggPSAoOTIyMzM3MjAzNjg1NDc3NTgwNykKLUlOVF9GQVNUMTZfTUFYID0gKDIxNDc0ODM2NDcpCi1JTlRfRkFTVDMyX01BWCA9ICgyMTQ3NDgzNjQ3KQotSU5UX0ZBU1Q2NF9NQVggPSAoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQotVUlOVF9GQVNUNjRfTUFYID0gKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotSU5UUFRSX01JTiA9ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQotSU5UUFRSX01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQotSU5UUFRSX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQotSU5UUFRSX01BWCA9ICgyMTQ3NDgzNjQ3KQotSU5UTUFYX01JTiA9ICgtX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCi1JTlRNQVhfTUFYID0gKF9fSU5UNjRfQyg5MjIzMzcyMDM2ODU0Nzc1ODA3KSkKLVVJTlRNQVhfTUFYID0gKF9fVUlOVDY0X0MoMTg0NDY3NDQwNzM3MDk1NTE2MTUpKQotUFRSRElGRl9NSU4gPSAoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSkKLVBUUkRJRkZfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpCi1QVFJESUZGX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQotUFRSRElGRl9NQVggPSAoMjE0NzQ4MzY0NykKLVNJR19BVE9NSUNfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCi1TSUdfQVRPTUlDX01BWCA9ICgyMTQ3NDgzNjQ3KQotV0NIQVJfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCi1XQ0hBUl9NQVggPSAoMjE0NzQ4MzY0NykKLVdJTlRfTUlOID0gKDApCi1kZWYgSU5UOF9DKGMpOiByZXR1cm4gYwotCi1kZWYgSU5UMTZfQyhjKTogcmV0dXJuIGMKLQotZGVmIElOVDMyX0MoYyk6IHJldHVybiBjCi0KLWRlZiBJTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBMCi0KLWRlZiBJTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBMTAotCi1kZWYgVUlOVDhfQyhjKTogcmV0dXJuIGMgIyMgVQotCi1kZWYgVUlOVDE2X0MoYyk6IHJldHVybiBjICMjIFUKLQotZGVmIFVJTlQzMl9DKGMpOiByZXR1cm4gYyAjIyBVCi0KLWRlZiBVSU5UNjRfQyhjKTogcmV0dXJuIGMgIyMgVUwKLQotZGVmIFVJTlQ2NF9DKGMpOiByZXR1cm4gYyAjIyBVTEwKLQotZGVmIElOVE1BWF9DKGMpOiByZXR1cm4gYyAjIyBMCi0KLWRlZiBVSU5UTUFYX0MoYyk6IHJldHVybiBjICMjIFVMCi0KLWRlZiBJTlRNQVhfQyhjKTogcmV0dXJuIGMgIyMgTEwKLQotZGVmIFVJTlRNQVhfQyhjKTogcmV0dXJuIGMgIyMgVUxMCi0KLQotIyBJbmNsdWRlZCBmcm9tIHN5cy90eXBlcy5oCi1fU1lTX1RZUEVTX0ggPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3R5cGVzLmgKLV9CSVRTX1RZUEVTX0ggPSAxCi1fX0ZEX1NFVFNJWkUgPSAxMDI0Ci1kZWYgX19GREVMVChkKTogcmV0dXJuICgoZCkgLyBfX05GREJJVFMpCi0KLQotIyBJbmNsdWRlZCBmcm9tIGJpdHMvcHRocmVhZHR5cGVzLmgKLQotIyBJbmNsdWRlZCBmcm9tIHRpbWUuaAotX1RJTUVfSCA9IDEKLQotIyBJbmNsdWRlZCBmcm9tIGJpdHMvdGltZS5oCi0KLSMgSW5jbHVkZWQgZnJvbSBwb3NpeC90aW1lLmgKLQotIyBJbmNsdWRlZCBmcm9tIHBvc2l4L3R5cGVzLmgKLU1BWEhPU1ROQU1FTEVOID0gNjQKLUZEX1NFVFNJWkUgPSAxMDI0Ci1DTE9DS1NfUEVSX1NFQyA9IDEwMDAwMDAKLV9CSVRTX1RJTUVfSCA9IDEKLUNMT0NLU19QRVJfU0VDID0gMTAwMDAwMAotQ0xLX1RDSyA9IDEwMAotX1NUUlVDVF9USU1FVkFMID0gMQotQ0xLX1RDSyA9IENMT0NLU19QRVJfU0VDCi1fX2Nsb2NrX3RfZGVmaW5lZCA9IDEKLV9fdGltZV90X2RlZmluZWQgPSAxCi1fX3RpbWVzcGVjX2RlZmluZWQgPSAxCi1kZWYgX19pc2xlYXAoeWVhcik6IHJldHVybiBcCi0KLV9fQklUX1RZUEVTX0RFRklORURfXyA9IDEKLQotIyBJbmNsdWRlZCBmcm9tIGVuZGlhbi5oCi1fRU5ESUFOX0ggPSAxCi1fX0xJVFRMRV9FTkRJQU4gPSAxMjM0Ci1fX0JJR19FTkRJQU4gPSA0MzIxCi1fX1BEUF9FTkRJQU4gPSAzNDEyCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL2VuZGlhbi5oCi1fX0JZVEVfT1JERVIgPSBfX0xJVFRMRV9FTkRJQU4KLV9fRkxPQVRfV09SRF9PUkRFUiA9IF9fQllURV9PUkRFUgotTElUVExFX0VORElBTiA9IF9fTElUVExFX0VORElBTgotQklHX0VORElBTiA9IF9fQklHX0VORElBTgotUERQX0VORElBTiA9IF9fUERQX0VORElBTgotQllURV9PUkRFUiA9IF9fQllURV9PUkRFUgotCi0jIEluY2x1ZGVkIGZyb20gc3lzL3NlbGVjdC5oCi1fU1lTX1NFTEVDVF9IID0gMQotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9zZWxlY3QuaAotZGVmIF9fRkRfWkVSTyhmZHNwKTogcmV0dXJuIFwKLQotZGVmIF9fRkRfWkVSTyhzZXQpOiByZXR1cm4gXAotCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3NpZ3NldC5oCi1fU0lHU0VUX0hfdHlwZXMgPSAxCi1fU0lHU0VUX0hfZm5zID0gMQotZGVmIF9fc2lnbWFzayhzaWcpOiByZXR1cm4gXAotCi1kZWYgX19zaWdlbXB0eXNldChzZXQpOiByZXR1cm4gXAotCi1kZWYgX19zaWdmaWxsc2V0KHNldCk6IHJldHVybiBcCi0KLWRlZiBfX3NpZ2lzZW1wdHlzZXQoc2V0KTogcmV0dXJuIFwKLQotRkRfU0VUU0laRSA9IF9fRkRfU0VUU0laRQotZGVmIEZEX1pFUk8oZmRzZXRwKTogcmV0dXJuIF9fRkRfWkVSTyAoZmRzZXRwKQotCi0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvc3lzbWFjcm9zLmgKLV9TWVNfU1lTTUFDUk9TX0ggPSAxCi1kZWYgbWFqb3IoZGV2KTogcmV0dXJuICggKCggIChkZXYpID4+IDgpICYgMHhmZikpCi0KLWRlZiBtaW5vcihkZXYpOiByZXR1cm4gKCAoKGRldikgJiAweGZmKSkKLQotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9zb2NrZXQuaAotUEZfVU5TUEVDID0gMAotUEZfTE9DQUwgPSAxCi1QRl9VTklYID0gUEZfTE9DQUwKLVBGX0ZJTEUgPSBQRl9MT0NBTAotUEZfSU5FVCA9IDIKLVBGX0FYMjUgPSAzCi1QRl9JUFggPSA0Ci1QRl9BUFBMRVRBTEsgPSA1Ci1QRl9ORVRST00gPSA2Ci1QRl9CUklER0UgPSA3Ci1QRl9BVE1QVkMgPSA4Ci1QRl9YMjUgPSA5Ci1QRl9JTkVUNiA9IDEwCi1QRl9ST1NFID0gMTEKLVBGX0RFQ25ldCA9IDEyCi1QRl9ORVRCRVVJID0gMTMKLVBGX1NFQ1VSSVRZID0gMTQKLVBGX0tFWSA9IDE1Ci1QRl9ORVRMSU5LID0gMTYKLVBGX1JPVVRFID0gUEZfTkVUTElOSwotUEZfUEFDS0VUID0gMTcKLVBGX0FTSCA9IDE4Ci1QRl9FQ09ORVQgPSAxOQotUEZfQVRNU1ZDID0gMjAKLVBGX1NOQSA9IDIyCi1QRl9JUkRBID0gMjMKLVBGX01BWCA9IDMyCi1BRl9VTlNQRUMgPSBQRl9VTlNQRUMKLUFGX0xPQ0FMID0gUEZfTE9DQUwKLUFGX1VOSVggPSBQRl9VTklYCi1BRl9GSUxFID0gUEZfRklMRQotQUZfSU5FVCA9IFBGX0lORVQKLUFGX0FYMjUgPSBQRl9BWDI1Ci1BRl9JUFggPSBQRl9JUFgKLUFGX0FQUExFVEFMSyA9IFBGX0FQUExFVEFMSwotQUZfTkVUUk9NID0gUEZfTkVUUk9NCi1BRl9CUklER0UgPSBQRl9CUklER0UKLUFGX0FUTVBWQyA9IFBGX0FUTVBWQwotQUZfWDI1ID0gUEZfWDI1Ci1BRl9JTkVUNiA9IFBGX0lORVQ2Ci1BRl9ST1NFID0gUEZfUk9TRQotQUZfREVDbmV0ID0gUEZfREVDbmV0Ci1BRl9ORVRCRVVJID0gUEZfTkVUQkVVSQotQUZfU0VDVVJJVFkgPSBQRl9TRUNVUklUWQotQUZfS0VZID0gUEZfS0VZCi1BRl9ORVRMSU5LID0gUEZfTkVUTElOSwotQUZfUk9VVEUgPSBQRl9ST1VURQotQUZfUEFDS0VUID0gUEZfUEFDS0VUCi1BRl9BU0ggPSBQRl9BU0gKLUFGX0VDT05FVCA9IFBGX0VDT05FVAotQUZfQVRNU1ZDID0gUEZfQVRNU1ZDCi1BRl9TTkEgPSBQRl9TTkEKLUFGX0lSREEgPSBQRl9JUkRBCi1BRl9NQVggPSBQRl9NQVgKLVNPTF9SQVcgPSAyNTUKLVNPTF9ERUNORVQgPSAyNjEKLVNPTF9YMjUgPSAyNjIKLVNPTF9QQUNLRVQgPSAyNjMKLVNPTF9BVE0gPSAyNjQKLVNPTF9BQUwgPSAyNjUKLVNPTF9JUkRBID0gMjY2Ci1TT01BWENPTk4gPSAxMjgKLQotIyBJbmNsdWRlZCBmcm9tIGJpdHMvc29ja2FkZHIuaAotX0JJVFNfU09DS0FERFJfSCA9IDEKLWRlZiBfX1NPQ0tBRERSX0NPTU1PTihzYV9wcmVmaXgpOiByZXR1cm4gXAotCi1fU1NfU0laRSA9IDEyOAotZGVmIENNU0dfRklSU1RIRFIobWhkcik6IHJldHVybiBcCi0KLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9zb2NrZXQuaAotCi0jIEluY2x1ZGVkIGZyb20gYXRoZW9zL3R5cGVzLmgKLU9TX05BTUVfTEVOR1RIID0gNjQKLVRSVUUgPSAxCi1GQUxTRSA9IDAKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9maWxlc3lzdGVtLmgKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9hdG9taWMuaAotCi0jIEluY2x1ZGVkIGZyb20gYXRoZW9zL3R5cGVkZWZzLmgKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9mc19hdHRyaWJzLmgKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9rZXJuZWwuaAotCi0jIEluY2x1ZGVkIGZyb20gYXRoZW9zL2tkZWJ1Zy5oCi0KLSMgSW5jbHVkZWQgZnJvbSBhdGhlb3MvdGhyZWFkcy5oCi1URl9ERUFETE9DSyA9IDB4MDAwMQotREJfUEFDS0VUX1NJWkUgPSAxMjgKLURCX1BPUlRfQ09VTlQgPSAxNgotREJQX1BSSU5USyA9IDAKLURCUF9ERUJVR0dFUiA9IDIKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9zdGRsaWIuaAotCi0jIEluY2x1ZGVkIGZyb20gYXRoZW9zL3N0cmluZy5oCi1kZWYgQ09NTU9OKHgpOiByZXR1cm4gXAotCi1kZWYgQ09NTU9OKHgpOiByZXR1cm4gXAotCi0KLSMgSW5jbHVkZWQgZnJvbSBhdGhlb3Mvc2NoZWR1bGUuaAotCi0jIEluY2x1ZGVkIGZyb20gYXRoZW9zL3RpbWVyLmgKLQotIyBJbmNsdWRlZCBmcm9tIHBvc2l4L3Jlc291cmNlLmgKLVJVU0FHRV9TRUxGID0gMAotUlVTQUdFX0NISUxEUkVOID0gLTEKLVJMSU1JVF9DUFUgPSAwCi1STElNSVRfRlNJWkUgPSAxCi1STElNSVRfREFUQSA9IDIKLVJMSU1JVF9TVEFDSyA9IDMKLVJMSU1JVF9DT1JFID0gNAotUkxJTUlUX1JTUyA9IDUKLVJMSU1JVF9NRU1MT0NLID0gNgotUkxJTUlUX05QUk9DID0gNwotUkxJTUlUX05PRklMRSA9IDgKLVJMSU1JVF9BUyA9IDkKLVJMSU1fTkxJTUlUUyA9IDEwCi0KLSMgSW5jbHVkZWQgZnJvbSBhdGhlb3Mvdjg2LmgKLQotIyBJbmNsdWRlZCBmcm9tIGF0aGVvcy9hcmVhcy5oCi1NRU1GX1JFQUwgPSAweDAwMDAwMDAyCi1NRU1GX1VTRVIgPSAweDAwMDAwMDA0Ci1NRU1GX0JVRkZFUiA9IDB4MDAwMDAwMDgKLU1FTUZfS0VSTkVMID0gMHgwMDAwMDAxMAotTUVNRl9PS1RPRkFJTEhBQ0sgPSAweDAwMDAwMDIwCi1NRU1GX1BSSV9NQVNLID0gMHgwMDAwMDBmZgotTUVNRl9OT0JMT0NLID0gMHgwMDAwMDEwMAotTUVNRl9DTEVBUiA9IDB4MDAwMTAwMDAKLU1FTUZfTE9DS0VEID0gMHgxMDAwMDAwMAotUEFHRV9TSElGVCA9IDEyCi1QR0RJUl9TSElGVCA9IDIyCi1kZWYgUEFHRV9BTElHTihhZGRyKTogcmV0dXJuICgoKGFkZHIpK1BBR0VfU0laRS0xKSZQQUdFX01BU0spCi0KLUFSRUFfTk9fTE9DSyA9IDAKLUFSRUFfTEFaWV9MT0NLID0gMQotQVJFQV9GVUxMX0xPQ0sgPSAyCi1BUkVBX0NPTlRJR1VPVVMgPSAzCi1BUkVBX1JFQUQgPSAweDAwMDAwMDAxCi1BUkVBX1dSSVRFID0gMHgwMDAwMDAwMgotQVJFQV9FWEVDID0gMHgwMDAwMDAwNAotQVJFQV9GVUxMX0FDQ0VTUyA9IChBUkVBX1JFQUQgfCBBUkVBX1dSSVRFIHwgQVJFQV9FWEVDKQotQVJFQV9LRVJORUwgPSAweDAwMDAwMDA4Ci1BUkVBX1VOTUFQX1BIWVMgPSAweDAwMDAwMDEwCi1BUkVBX0FOWV9BRERSRVNTID0gMHgwMDAwMDAwMAotQVJFQV9FWEFDVF9BRERSRVNTID0gMHgwMDAwMDEwMAotQVJFQV9CQVNFX0FERFJFU1MgPSAweDAwMDAwMjAwCi1BUkVBX0NMT05FX0FERFJFU1MgPSAweDAwMDAwMzAwCi1BUkVBX0FERFJfU1BFQ19NQVNLID0gMHgwMDAwMGYwMAotQVJFQV9UT1BfRE9XTiA9IDB4MDAwMDEwMDAKLUFSRUFfUkVNQVBQRUQgPSAweDAwMjAKLUFSRUFfU0hBUkVEID0gMHgwMDQwCi1BUkVBX0dST1dTRE9XTiA9IDB4MDA4MAotQVJFQV9GSVJTVF9LRVJORUxfQUREUkVTUyA9IDB4MDAxMDAwMDAKLUFSRUFfTEFTVF9LRVJORUxfQUREUkVTUyA9IDB4N2ZmZmZmZmYKLUFSRUFfRklSU1RfVVNFUl9BRERSRVNTID0gMHg4MDAwMDAwMAotQVJFQV9MQVNUX1VTRVJfQUREUkVTUyA9IDB4ZmZmZmZmZmYKLU1BWF9DUFVfQ09VTlQgPSAxNgotZGVmIGtmcmVlKHApOiByZXR1cm4ga2Fzc2VydHcoIF9fa2ZyZWUocCkgPT0gMCApCi0KLQotIyBJbmNsdWRlZCBmcm9tIHBvc2l4L2RpcmVudC5oCi1NQVhOQU1MRU4gPSBOQU1FX01BWAotTUFYTkFNTEVOID0gMjU1Ci0KLSMgSW5jbHVkZWQgZnJvbSBkaXJlbnQuaAotX0RJUkVOVF9IID0gMQotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9kaXJlbnQuaAotZGVmIF9EX0FMTE9DX05BTUxFTihkKTogcmV0dXJuIChfRF9FWEFDVF9OQU1MRU4gKGQpICsgMSkKLQotZGVmIElGVE9EVChtb2RlKTogcmV0dXJuICgoKG1vZGUpICYgMG8xNzAwMDApID4+IDEyKQotCi1kZWYgRFRUT0lGKGRpcnR5cGUpOiByZXR1cm4gKChkaXJ0eXBlKSA8PCAxMikKLQotZGVmIGRpcmZkKGRpcnApOiByZXR1cm4gX0RJUl9kaXJmZCAoZGlycCkKLQotTUFYTkFNTEVOID0gTkFNRV9NQVgKLU1BWE5BTUxFTiA9IDI1NQotCi0jIEluY2x1ZGVkIGZyb20gcG9zaXgvc3RhdC5oCi1TX0lGTVQgPSAwbzAxNzAwMDAKLVNfSUZTT0NLID0gMG8xNDAwMDAKLVNfSUZMTksgPSAwbzEyMDAwMAotU19JRlJFRyA9IDBvMTAwMDAwCi1TX0lGQkxLID0gMG8wNjAwMDAKLVNfSUZESVIgPSAwbzA0MDAwMAotU19JRkNIUiA9IDBvMDIwMDAwCi1TX0lGSUZPID0gMG8wMTAwMDAKLVNfSVNVSUQgPSAwbzAwNDAwMAotU19JU0dJRCA9IDBvMDAyMDAwCi1TX0lTVlRYID0gMG8wMDEwMDAKLWRlZiBTX0lTTE5LKG0pOiByZXR1cm4gKCgobSkgJiBTX0lGTVQpID09IFNfSUZMTkspCi0KLWRlZiBTX0lTUkVHKG0pOiByZXR1cm4gKCgobSkgJiBTX0lGTVQpID09IFNfSUZSRUcpCi0KLWRlZiBTX0lTRElSKG0pOiByZXR1cm4gKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCi0KLWRlZiBTX0lTQ0hSKG0pOiByZXR1cm4gKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCi0KLWRlZiBTX0lTQkxLKG0pOiByZXR1cm4gKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCi0KLWRlZiBTX0lTRklGTyhtKTogcmV0dXJuICgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQotCi1kZWYgU19JU1NPQ0sobSk6IHJldHVybiAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlNPQ0spCi0KLVNfSVJXWFUgPSAwbzA3MDAKLVNfSVJVU1IgPSAwbzA0MDAKLVNfSVdVU1IgPSAwbzAyMDAKLVNfSVhVU1IgPSAwbzAxMDAKLVNfSVJXWEcgPSAwbzAwNzAKLVNfSVJHUlAgPSAwbzAwNDAKLVNfSVdHUlAgPSAwbzAwMjAKLVNfSVhHUlAgPSAwbzAwMTAKLVNfSVJXWE8gPSAwbzAwMDcKLVNfSVJPVEggPSAwbzAwMDQKLVNfSVdPVEggPSAwbzAwMDIKLVNfSVhPVEggPSAwbzAwMDEKLVNfSVJXWFVHTyA9IChTX0lSV1hVfFNfSVJXWEd8U19JUldYTykKLVNfSUFMTFVHTyA9IChTX0lTVUlEfFNfSVNHSUR8U19JU1ZUWHxTX0lSV1hVR08pCi1TX0lSVUdPID0gKFNfSVJVU1J8U19JUkdSUHxTX0lST1RIKQotU19JV1VHTyA9IChTX0lXVVNSfFNfSVdHUlB8U19JV09USCkKLVNfSVhVR08gPSAoU19JWFVTUnxTX0lYR1JQfFNfSVhPVEgpCi1fU1RBVF9WRVJfS0VSTkVMID0gMAotCi0jIEluY2x1ZGVkIGZyb20gcG9zaXgvZmNudGwuaAotT19BQ0NNT0RFID0gMG8wMDMKLU9fUldNQVNLID0gT19BQ0NNT0RFCi1PX1JET05MWSA9IDAwCi1PX1dST05MWSA9IDBvMQotT19SRFdSID0gMG8yCi1PX0NSRUFUID0gMG8xMDAKLU9fRVhDTCA9IDBvMjAwCi1PX05PQ1RUWSA9IDBvNDAwCi1PX1RSVU5DID0gMG8xMDAwCi1PX0FQUEVORCA9IDBvMjAwMAotT19OT05CTE9DSyA9IDBvNDAwMAotT19OREVMQVkgPSBPX05PTkJMT0NLCi1PX1NZTkMgPSAwbzEwMDAwCi1PX0ZTWU5DID0gT19TWU5DCi1PX0FTWU5DID0gMG8yMDAwMAotRkFTWU5DID0gT19BU1lOQwotT19ESVJFQ1RPUlkgPSAwbzQwMDAwCi1PX05PVFJBVkVSU0UgPSAwbzEwMDAwMAotT19OT0ZPTExPVyA9IE9fTk9UUkFWRVJTRQotRl9EVVBGRCA9IDAKLUZfR0VURkQgPSAxCi1GX1NFVEZEID0gMgotRl9HRVRGTCA9IDMKLUZfU0VURkwgPSA0Ci1GX0dFVExLID0gNQotRl9TRVRMSyA9IDYKLUZfU0VUTEtXID0gNwotRl9TRVRPV04gPSA4Ci1GX0dFVE9XTiA9IDkKLUZfU0VUU0lHID0gMTAKLUZfR0VUU0lHID0gMTEKLUZfQ09QWUZEID0gMTIKLUZEX0NMT0VYRUMgPSAxCi1GX1JETENLID0gMAotRl9XUkxDSyA9IDEKLUZfVU5MQ0sgPSAyCi1GX0VYTENLID0gNAotRl9TSExDSyA9IDgKLUxPQ0tfU0ggPSAxCi1MT0NLX0VYID0gMgotTE9DS19OQiA9IDQKLUxPQ0tfVU4gPSA4Ci0KLSMgSW5jbHVkZWQgZnJvbSBwb3NpeC91aW8uaAotVUlPX0ZBU1RJT1YgPSA4Ci1VSU9fTUFYSU9WID0gMTAyNAotTU5URl9SRUFET05MWSA9IDB4MDAwMQotRlNfSVNfUkVBRE9OTFkgPSAweDAwMDAwMDAxCi1GU19JU19SRU1PVkFCTEUgPSAweDAwMDAwMDAyCi1GU19JU19QRVJTSVNURU5UID0gMHgwMDAwMDAwNAotRlNfSVNfU0hBUkVEID0gMHgwMDAwMDAwOAotRlNfSVNfQkxPQ0tCQVNFRCA9IDB4MDAwMDAwMTAKLUZTX0NBTl9NT1VOVCA9IDB4MDAwMDAwMjAKLUZTX0hBU19NSU1FID0gMHgwMDAxMDAwMAotRlNfSEFTX0FUVFIgPSAweDAwMDIwMDAwCi1GU19IQVNfUVVFUlkgPSAweDAwMDQwMDAwCi1GU0lORk9fVkVSU0lPTiA9IDEKLVdTVEFUX01PREUgPSAweDAwMDEKLVdTVEFUX1VJRCA9IDB4MDAwMgotV1NUQVRfR0lEID0gMHgwMDA0Ci1XU1RBVF9TSVpFID0gMHgwMDA4Ci1XU1RBVF9BVElNRSA9IDB4MDAxMAotV1NUQVRfTVRJTUUgPSAweDAwMjAKLVdTVEFUX0NUSU1FID0gMHgwMDQwCi1XRlNTVEFUX05BTUUgPSAweDAwMDEKLUZTRFJJVkVSX0FQSV9WRVJTSU9OID0gMQotCi0jIEluY2x1ZGVkIGZyb20gbmV0L25ldHR5cGVzLmgKLUlQX0FEUl9MRU4gPSA0Ci1JTkFERFJfQU5ZID0gMHgwMDAwMDAwMAotSU5BRERSX0JST0FEQ0FTVCA9IDB4ZmZmZmZmZmYKLUlOQUREUl9MT09QQkFDSyA9IDB4N2YwMDAwMDEKLWRlZiBDTVNHX0FMSUdOKGxlbik6IHJldHVybiAoICgobGVuKStzaXplb2YoaW50KS0xKSAmIH4oc2l6ZW9mKGludCktMSkgKQotCi1QUk9UX1NPQ0sgPSAxMDI0Ci1TSFVURE9XTl9NQVNLID0gMwotUkNWX1NIVVRET1dOID0gMQotU0VORF9TSFVURE9XTiA9IDIKLVNPQ0tfU1RSRUFNID0gMQotU09DS19ER1JBTSA9IDIKLVNPQ0tfUkFXID0gMwotU09DS19SRE0gPSA0Ci1TT0NLX1NFUVBBQ0tFVCA9IDUKLVNPQ0tfUEFDS0VUID0gMTAKLVBGX1VOU1BFQyA9IDAKLVBGX0xPQ0FMID0gMQotUEZfVU5JWCA9IFBGX0xPQ0FMCi1QRl9GSUxFID0gUEZfTE9DQUwKLVBGX0lORVQgPSAyCi1QRl9BWDI1ID0gMwotUEZfSVBYID0gNAotUEZfQVBQTEVUQUxLID0gNQotUEZfTkVUUk9NID0gNgotUEZfQlJJREdFID0gNwotUEZfQVRNUFZDID0gOAotUEZfWDI1ID0gOQotUEZfSU5FVDYgPSAxMAotUEZfUk9TRSA9IDExCi1QRl9ERUNuZXQgPSAxMgotUEZfTkVUQkVVSSA9IDEzCi1QRl9TRUNVUklUWSA9IDE0Ci1QRl9LRVkgPSAxNQotUEZfTkVUTElOSyA9IDE2Ci1QRl9ST1VURSA9IFBGX05FVExJTksKLVBGX1BBQ0tFVCA9IDE3Ci1QRl9BU0ggPSAxOAotUEZfRUNPTkVUID0gMTkKLVBGX0FUTVNWQyA9IDIwCi1QRl9TTkEgPSAyMgotUEZfSVJEQSA9IDIzCi1QRl9NQVggPSAzMgotQUZfVU5TUEVDID0gUEZfVU5TUEVDCi1BRl9MT0NBTCA9IFBGX0xPQ0FMCi1BRl9VTklYID0gUEZfVU5JWAotQUZfRklMRSA9IFBGX0ZJTEUKLUFGX0lORVQgPSBQRl9JTkVUCi1BRl9BWDI1ID0gUEZfQVgyNQotQUZfSVBYID0gUEZfSVBYCi1BRl9BUFBMRVRBTEsgPSBQRl9BUFBMRVRBTEsKLUFGX05FVFJPTSA9IFBGX05FVFJPTQotQUZfQlJJREdFID0gUEZfQlJJREdFCi1BRl9BVE1QVkMgPSBQRl9BVE1QVkMKLUFGX1gyNSA9IFBGX1gyNQotQUZfSU5FVDYgPSBQRl9JTkVUNgotQUZfUk9TRSA9IFBGX1JPU0UKLUFGX0RFQ25ldCA9IFBGX0RFQ25ldAotQUZfTkVUQkVVSSA9IFBGX05FVEJFVUkKLUFGX1NFQ1VSSVRZID0gUEZfU0VDVVJJVFkKLUFGX0tFWSA9IFBGX0tFWQotQUZfTkVUTElOSyA9IFBGX05FVExJTksKLUFGX1JPVVRFID0gUEZfUk9VVEUKLUFGX1BBQ0tFVCA9IFBGX1BBQ0tFVAotQUZfQVNIID0gUEZfQVNICi1BRl9FQ09ORVQgPSBQRl9FQ09ORVQKLUFGX0FUTVNWQyA9IFBGX0FUTVNWQwotQUZfU05BID0gUEZfU05BCi1BRl9JUkRBID0gUEZfSVJEQQotQUZfTUFYID0gUEZfTUFYCi1QRl9VTklYID0gMQotQUZfVU5JWCA9IFBGX1VOSVgKLVBGX0lORVQgPSAyCi1BRl9JTkVUID0gUEZfSU5FVAotU09NQVhDT05OID0gMTI4Ci1NU0dfT09CID0gMQotTVNHX1BFRUsgPSAyCi1NU0dfRE9OVFJPVVRFID0gNAotTVNHX1BST1hZID0gMTYKLVNPTF9TT0NLRVQgPSAxCi1TT19ERUJVRyA9IDEKLVNPX1JFVVNFQUREUiA9IDIKLVNPX1RZUEUgPSAzCi1TT19FUlJPUiA9IDQKLVNPX0RPTlRST1VURSA9IDUKLVNPX0JST0FEQ0FTVCA9IDYKLVNPX1NOREJVRiA9IDcKLVNPX1JDVkJVRiA9IDgKLVNPX0tFRVBBTElWRSA9IDkKLVNPX09PQklOTElORSA9IDEwCi1TT19OT19DSEVDSyA9IDExCi1TT19QUklPUklUWSA9IDEyCi1TT19MSU5HRVIgPSAxMwotU09fQlNEQ09NUEFUID0gMTQKLVNPTF9JUCA9IDAKLVNPTF9JUFggPSAyNTYKLVNPTF9BWDI1ID0gMjU3Ci1TT0xfQVRBTEsgPSAyNTgKLVNPTF9ORVRST00gPSAyNTkKLVNPTF9UQ1AgPSA2Ci1TT0xfVURQID0gMTcKLUlQX1RPUyA9IDEKLUlQVE9TX0xPV0RFTEFZID0gMHgxMAotSVBUT1NfVEhST1VHSFBVVCA9IDB4MDgKLUlQVE9TX1JFTElBQklMSVRZID0gMHgwNAotSVBUT1NfTUlOQ09TVCA9IDB4MDIKLUlQX1RUTCA9IDIKLUlQX0hEUklOQ0wgPSAzCi1JUF9PUFRJT05TID0gNAotSVBfTVVMVElDQVNUX0lGID0gMzIKLUlQX01VTFRJQ0FTVF9UVEwgPSAzMwotSVBfTVVMVElDQVNUX0xPT1AgPSAzNAotSVBfQUREX01FTUJFUlNISVAgPSAzNQotSVBfRFJPUF9NRU1CRVJTSElQID0gMzYKLVRDUF9OT0RFTEFZID0gMHgwMQotVENQX01BWFNFRyA9IDB4MDIKLWRlZiBJTl9DTEFTU0EoYSk6IHJldHVybiAoKCggIChhKSkgJiAweDgwMDAwMDAwKSA9PSAwKQotCi1JTl9DTEFTU0FfTkVUID0gMHhmZjAwMDAwMAotSU5fQ0xBU1NBX05TSElGVCA9IDI0Ci1JTl9DTEFTU0FfSE9TVCA9ICgweGZmZmZmZmZmICYgfklOX0NMQVNTQV9ORVQpCi1JTl9DTEFTU0FfTUFYID0gMTI4Ci1kZWYgSU5fQ0xBU1NCKGEpOiByZXR1cm4gKCgoICAoYSkpICYgMHhjMDAwMDAwMCkgPT0gMHg4MDAwMDAwMCkKLQotSU5fQ0xBU1NCX05FVCA9IDB4ZmZmZjAwMDAKLUlOX0NMQVNTQl9OU0hJRlQgPSAxNgotSU5fQ0xBU1NCX0hPU1QgPSAoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0JfTkVUKQotSU5fQ0xBU1NCX01BWCA9IDY1NTM2Ci1kZWYgSU5fQ0xBU1NDKGEpOiByZXR1cm4gKCgoICAoYSkpICYgMHhlMDAwMDAwMCkgPT0gMHhjMDAwMDAwMCkKLQotSU5fQ0xBU1NDX05FVCA9IDB4ZmZmZmZmMDAKLUlOX0NMQVNTQ19OU0hJRlQgPSA4Ci1JTl9DTEFTU0NfSE9TVCA9ICgweGZmZmZmZmZmICYgfklOX0NMQVNTQ19ORVQpCi1kZWYgSU5fQ0xBU1NEKGEpOiByZXR1cm4gKCgoICAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKLQotZGVmIElOX01VTFRJQ0FTVChhKTogcmV0dXJuIElOX0NMQVNTRChhKQotCi1kZWYgSU5fRVhQRVJJTUVOVEFMKGEpOiByZXR1cm4gKCgoICAoYSkpICYgMHhlMDAwMDAwMCkgPT0gMHhlMDAwMDAwMCkKLQotZGVmIElOX0JBRENMQVNTKGEpOiByZXR1cm4gKCgoICAoYSkpICYgMHhmMDAwMDAwMCkgPT0gMHhmMDAwMDAwMCkKLQotSU5BRERSX0FOWSA9ICggIDB4MDAwMDAwMDApCi1JTkFERFJfQlJPQURDQVNUID0gKCAgMHhmZmZmZmZmZikKLUlOQUREUl9OT05FID0gKCAgMHhmZmZmZmZmZikKLUlOX0xPT1BCQUNLTkVUID0gMTI3Ci1JTkFERFJfTE9PUEJBQ0sgPSAoICAweDdmMDAwMDAxKQotSU5BRERSX1VOU1BFQ19HUk9VUCA9ICggIDB4ZTAwMDAwMDApCi1JTkFERFJfQUxMSE9TVFNfR1JPVVAgPSAoICAweGUwMDAwMDAxKQotSU5BRERSX0FMTFJUUlNfR1JPVVAgPSAoICAweGUwMDAwMDAyKQotSU5BRERSX01BWF9MT0NBTF9HUk9VUCA9ICggIDB4ZTAwMDAwZmYpCi1JTkVUX0FERFJTVFJMRU4gPSAxNgotSU5FVDZfQUREUlNUUkxFTiA9IDQ2Ci0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL2luLmgKLUlQX1RPUyA9IDEKLUlQX1RUTCA9IDIKLUlQX0hEUklOQ0wgPSAzCi1JUF9PUFRJT05TID0gNAotSVBfUk9VVEVSX0FMRVJUID0gNQotSVBfUkVDVk9QVFMgPSA2Ci1JUF9SRVRPUFRTID0gNwotSVBfUEtUSU5GTyA9IDgKLUlQX1BLVE9QVElPTlMgPSA5Ci1JUF9QTVRVRElTQyA9IDEwCi1JUF9NVFVfRElTQ09WRVIgPSAxMAotSVBfUkVDVkVSUiA9IDExCi1JUF9SRUNWVFRMID0gMTIKLUlQX1JFQ1ZUT1MgPSAxMwotSVBfTVVMVElDQVNUX0lGID0gMzIKLUlQX01VTFRJQ0FTVF9UVEwgPSAzMwotSVBfTVVMVElDQVNUX0xPT1AgPSAzNAotSVBfQUREX01FTUJFUlNISVAgPSAzNQotSVBfRFJPUF9NRU1CRVJTSElQID0gMzYKLUlQX1JFQ1ZSRVRPUFRTID0gSVBfUkVUT1BUUwotSVBfUE1UVURJU0NfRE9OVCA9IDAKLUlQX1BNVFVESVNDX1dBTlQgPSAxCi1JUF9QTVRVRElTQ19ETyA9IDIKLVNPTF9JUCA9IDAKLVNPTF9TT0NLRVQgPSAxCi1JUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgPSAxCi1JUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QID0gMQotSVBfTUFYX01FTUJFUlNISVBTID0gMjAKLUlQVjZfQUREUkZPUk0gPSAxCi1JUFY2X1BLVElORk8gPSAyCi1JUFY2X0hPUE9QVFMgPSAzCi1JUFY2X0RTVE9QVFMgPSA0Ci1JUFY2X1JYU1JDUlQgPSA1Ci1JUFY2X1BLVE9QVElPTlMgPSA2Ci1JUFY2X0NIRUNLU1VNID0gNwotSVBWNl9IT1BMSU1JVCA9IDgKLUlQVjZfTkVYVEhPUCA9IDkKLUlQVjZfQVVUSEhEUiA9IDEwCi1JUFY2X1VOSUNBU1RfSE9QUyA9IDE2Ci1JUFY2X01VTFRJQ0FTVF9JRiA9IDE3Ci1JUFY2X01VTFRJQ0FTVF9IT1BTID0gMTgKLUlQVjZfTVVMVElDQVNUX0xPT1AgPSAxOQotSVBWNl9BRERfTUVNQkVSU0hJUCA9IDIwCi1JUFY2X0RST1BfTUVNQkVSU0hJUCA9IDIxCi1JUFY2X1JPVVRFUl9BTEVSVCA9IDIyCi1TQ01fU1JDUlQgPSBJUFY2X1JYU1JDUlQKLUlQVjZfUlhIT1BPUFRTID0gSVBWNl9IT1BPUFRTCi1JUFY2X1JYRFNUT1BUUyA9IElQVjZfRFNUT1BUUwotSVBWNl9QTVRVRElTQ19ET05UID0gMAotSVBWNl9QTVRVRElTQ19XQU5UID0gMQotSVBWNl9QTVRVRElTQ19ETyA9IDIKLVNPTF9JUFY2ID0gNDEKLVNPTF9JQ01QVjYgPSA1OAotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9ieXRlc3dhcC5oCi1kZWYgX19ic3dhcF9jb25zdGFudF8xNih4KTogcmV0dXJuIFwKLQotZGVmIF9fYnN3YXBfMTYoeCk6IHJldHVybiBcCi0KLWRlZiBfX2Jzd2FwXzE2KHgpOiByZXR1cm4gX19ic3dhcF9jb25zdGFudF8xNiAoeCkKLQotZGVmIF9fYnN3YXBfY29uc3RhbnRfMzIoeCk6IHJldHVybiBcCi0KLWRlZiBfX2Jzd2FwXzMyKHgpOiByZXR1cm4gXAotCi1kZWYgX19ic3dhcF8zMih4KTogcmV0dXJuIFwKLQotZGVmIF9fYnN3YXBfMzIoeCk6IHJldHVybiBfX2Jzd2FwX2NvbnN0YW50XzMyICh4KQotCi1kZWYgX19ic3dhcF82NCh4KTogcmV0dXJuIFwKLQotZGVmIG50b2hsKHgpOiByZXR1cm4gKHgpCi0KLWRlZiBudG9ocyh4KTogcmV0dXJuICh4KQotCi1kZWYgaHRvbmwoeCk6IHJldHVybiAoeCkKLQotZGVmIGh0b25zKHgpOiByZXR1cm4gKHgpCi0KLWRlZiBudG9obCh4KTogcmV0dXJuIF9fYnN3YXBfMzIgKHgpCi0KLWRlZiBudG9ocyh4KTogcmV0dXJuIF9fYnN3YXBfMTYgKHgpCi0KLWRlZiBodG9ubCh4KTogcmV0dXJuIF9fYnN3YXBfMzIgKHgpCi0KLWRlZiBodG9ucyh4KTogcmV0dXJuIF9fYnN3YXBfMTYgKHgpCi0KLWRlZiBJTjZfSVNfQUREUl9VTlNQRUNJRklFRChhKTogcmV0dXJuIFwKLQotZGVmIElONl9JU19BRERSX0xPT1BCQUNLKGEpOiByZXR1cm4gXAotCi1kZWYgSU42X0lTX0FERFJfTElOS0xPQ0FMKGEpOiByZXR1cm4gXAotCi1kZWYgSU42X0lTX0FERFJfU0lURUxPQ0FMKGEpOiByZXR1cm4gXAotCi1kZWYgSU42X0lTX0FERFJfVjRNQVBQRUQoYSk6IHJldHVybiBcCi0KLWRlZiBJTjZfSVNfQUREUl9WNENPTVBBVChhKTogcmV0dXJuIFwKLQotZGVmIElONl9JU19BRERSX01DX05PREVMT0NBTChhKTogcmV0dXJuIFwKLQotZGVmIElONl9JU19BRERSX01DX0xJTktMT0NBTChhKTogcmV0dXJuIFwKLQotZGVmIElONl9JU19BRERSX01DX1NJVEVMT0NBTChhKTogcmV0dXJuIFwKLQotZGVmIElONl9JU19BRERSX01DX09SR0xPQ0FMKGEpOiByZXR1cm4gXAotCi1kZWYgSU42X0lTX0FERFJfTUNfR0xPQkFMKGEpOiByZXR1cm4KZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWF0aGVvcy9UWVBFUy5weSBiL0xpYi9wbGF0LWF0aGVvcy9UWVBFUy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQwYmUzNS4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1hdGhlb3MvVFlQRVMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tIC9pbmNsdWRlL3N5cy90eXBlcy5oCi1fU1lTX1RZUEVTX0ggPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBmZWF0dXJlcy5oCi1fRkVBVFVSRVNfSCA9IDEKLV9fVVNFX0FOU0kgPSAxCi1fX0ZBVk9SX0JTRCA9IDEKLV9JU09DOVhfU09VUkNFID0gMQotX1BPU0lYX1NPVVJDRSA9IDEKLV9QT1NJWF9DX1NPVVJDRSA9IDE5OTUwNgotX1hPUEVOX1NPVVJDRSA9IDUwMAotX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCA9IDEKLV9MQVJHRUZJTEU2NF9TT1VSQ0UgPSAxCi1fQlNEX1NPVVJDRSA9IDEKLV9TVklEX1NPVVJDRSA9IDEKLV9CU0RfU09VUkNFID0gMQotX1NWSURfU09VUkNFID0gMQotX19VU0VfSVNPQzlYID0gMQotX1BPU0lYX1NPVVJDRSA9IDEKLV9QT1NJWF9DX1NPVVJDRSA9IDIKLV9QT1NJWF9DX1NPVVJDRSA9IDE5OTUwNgotX19VU0VfUE9TSVggPSAxCi1fX1VTRV9QT1NJWDIgPSAxCi1fX1VTRV9QT1NJWDE5OTMwOSA9IDEKLV9fVVNFX1BPU0lYMTk5NTA2ID0gMQotX19VU0VfWE9QRU4gPSAxCi1fX1VTRV9YT1BFTl9FWFRFTkRFRCA9IDEKLV9fVVNFX1VOSVg5OCA9IDEKLV9MQVJHRUZJTEVfU09VUkNFID0gMQotX19VU0VfWE9QRU5fRVhURU5ERUQgPSAxCi1fX1VTRV9MQVJHRUZJTEUgPSAxCi1fX1VTRV9MQVJHRUZJTEU2NCA9IDEKLV9fVVNFX0ZJTEVfT0ZGU0VUNjQgPSAxCi1fX1VTRV9NSVNDID0gMQotX19VU0VfQlNEID0gMQotX19VU0VfU1ZJRCA9IDEKLV9fVVNFX0dOVSA9IDEKLV9fVVNFX1JFRU5UUkFOVCA9IDEKLV9fU1REQ19JRUNfNTU5X18gPSAxCi1fX1NURENfSUVDXzU1OV9DT01QTEVYX18gPSAxCi1fX0dOVV9MSUJSQVJZX18gPSA2Ci1fX0dMSUJDX18gPSAyCi1fX0dMSUJDX01JTk9SX18gPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBzeXMvY2RlZnMuaAotX1NZU19DREVGU19IID0gMQotZGVmIF9fUE1UKGFyZ3MpOiByZXR1cm4gYXJncwotCi1kZWYgX19QKGFyZ3MpOiByZXR1cm4gYXJncwotCi1kZWYgX19QTVQoYXJncyk6IHJldHVybiBhcmdzCi0KLWRlZiBfX1AoYXJncyk6IHJldHVybiAoKQotCi1kZWYgX19QTVQoYXJncyk6IHJldHVybiAoKQotCi1kZWYgX19TVFJJTkcoeCk6IHJldHVybiAjeAotCi1kZWYgX19TVFJJTkcoeCk6IHJldHVybiAieCIKLQotZGVmIF9fQVNNTkFNRShjbmFtZSk6IHJldHVybiBfX0FTTU5BTUUyIChfX1VTRVJfTEFCRUxfUFJFRklYX18sIGNuYW1lKQotCi1kZWYgX19hdHRyaWJ1dGVfXyh4eXopOiByZXR1cm4KLQotX19VU0VfRVhURVJOX0lOTElORVMgPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBnbnUvc3R1YnMuaAotCi0jIEluY2x1ZGVkIGZyb20gYml0cy90eXBlcy5oCi1fQklUU19UWVBFU19IID0gMQotX19GRF9TRVRTSVpFID0gMTAyNAotZGVmIF9fRkRFTFQoZCk6IHJldHVybiAoKGQpIC8gX19ORkRCSVRTKQotCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3B0aHJlYWR0eXBlcy5oCi0KLSMgSW5jbHVkZWQgZnJvbSB0aW1lLmgKLV9USU1FX0ggPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBiaXRzL3RpbWUuaAotCi0jIEluY2x1ZGVkIGZyb20gcG9zaXgvdGltZS5oCi0KLSMgSW5jbHVkZWQgZnJvbSBwb3NpeC90eXBlcy5oCi1NQVhIT1NUTkFNRUxFTiA9IDY0Ci1GRF9TRVRTSVpFID0gMTAyNAotQ0xPQ0tTX1BFUl9TRUMgPSAxMDAwMDAwCi1fQklUU19USU1FX0ggPSAxCi1DTE9DS1NfUEVSX1NFQyA9IDEwMDAwMDAKLUNMS19UQ0sgPSAxMDAKLV9TVFJVQ1RfVElNRVZBTCA9IDEKLUNMS19UQ0sgPSBDTE9DS1NfUEVSX1NFQwotX19jbG9ja190X2RlZmluZWQgPSAxCi1fX3RpbWVfdF9kZWZpbmVkID0gMQotX190aW1lc3BlY19kZWZpbmVkID0gMQotZGVmIF9faXNsZWFwKHllYXIpOiByZXR1cm4gXAotCi1fX0JJVF9UWVBFU19ERUZJTkVEX18gPSAxCi0KLSMgSW5jbHVkZWQgZnJvbSBlbmRpYW4uaAotX0VORElBTl9IID0gMQotX19MSVRUTEVfRU5ESUFOID0gMTIzNAotX19CSUdfRU5ESUFOID0gNDMyMQotX19QRFBfRU5ESUFOID0gMzQxMgotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9lbmRpYW4uaAotX19CWVRFX09SREVSID0gX19MSVRUTEVfRU5ESUFOCi1fX0ZMT0FUX1dPUkRfT1JERVIgPSBfX0JZVEVfT1JERVIKLUxJVFRMRV9FTkRJQU4gPSBfX0xJVFRMRV9FTkRJQU4KLUJJR19FTkRJQU4gPSBfX0JJR19FTkRJQU4KLVBEUF9FTkRJQU4gPSBfX1BEUF9FTkRJQU4KLUJZVEVfT1JERVIgPSBfX0JZVEVfT1JERVIKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy9zZWxlY3QuaAotX1NZU19TRUxFQ1RfSCA9IDEKLQotIyBJbmNsdWRlZCBmcm9tIGJpdHMvc2VsZWN0LmgKLWRlZiBfX0ZEX1pFUk8oZmRzcCk6IHJldHVybiBcCi0KLWRlZiBfX0ZEX1pFUk8oc2V0KTogcmV0dXJuIFwKLQotCi0jIEluY2x1ZGVkIGZyb20gYml0cy9zaWdzZXQuaAotX1NJR1NFVF9IX3R5cGVzID0gMQotX1NJR1NFVF9IX2ZucyA9IDEKLWRlZiBfX3NpZ21hc2soc2lnKTogcmV0dXJuIFwKLQotZGVmIF9fc2lnZW1wdHlzZXQoc2V0KTogcmV0dXJuIFwKLQotZGVmIF9fc2lnZmlsbHNldChzZXQpOiByZXR1cm4gXAotCi1kZWYgX19zaWdpc2VtcHR5c2V0KHNldCk6IHJldHVybiBcCi0KLUZEX1NFVFNJWkUgPSBfX0ZEX1NFVFNJWkUKLWRlZiBGRF9aRVJPKGZkc2V0cCk6IHJldHVybiBfX0ZEX1pFUk8gKGZkc2V0cCkKLQotCi0jIEluY2x1ZGVkIGZyb20gc3lzL3N5c21hY3Jvcy5oCi1fU1lTX1NZU01BQ1JPU19IID0gMQotZGVmIG1ham9yKGRldik6IHJldHVybiAoICgoICAoZGV2KSA+PiA4KSAmIDB4ZmYpKQotCi1kZWYgbWlub3IoZGV2KTogcmV0dXJuICggKChkZXYpICYgMHhmZikpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1hdGhlb3MvcmVnZW4gYi9MaWIvcGxhdC1hdGhlb3MvcmVnZW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjMDAyYzMuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtYXRoZW9zL3JlZ2VuCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jISAvYmluL3NoCi1zZXQgLXYKLXB5dGhvbiRFWEUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICdcKHVfbG9uZ1wpJyAtaSAnXCh1aW50MzJfdFwpJyAtaSAnXChpbnRcKScgLWkgJ1wodW5zaWduZWQgaW50XCknIC9pbmNsdWRlL25ldGluZXQvaW4uaCAvaW5jbHVkZS9zeXMvdHlwZXMuaApkaWZmIC0tZ2l0IGEvTGliL3BsYXQtZnJlZWJzZDQvcmVnZW4gYi9MaWIvcGxhdC1mcmVlYnNkNC9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkNS9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q1L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LWZyZWVic2Q2L3JlZ2VuIGIvTGliL3BsYXQtZnJlZWJzZDYvcmVnZW4Kb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQpkaWZmIC0tZ2l0IGEvTGliL3BsYXQtZnJlZWJzZDcvcmVnZW4gYi9MaWIvcGxhdC1mcmVlYnNkNy9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1mcmVlYnNkOC9yZWdlbiBiL0xpYi9wbGF0LWZyZWVic2Q4L3JlZ2VuCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9yZWdlbiBiL0xpYi9wbGF0LW9zMmVteC9yZWdlbgpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1zdW5vczUvSU4ucHkgYi9MaWIvcGxhdC1zdW5vczUvSU4ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3BsYXRmb3JtLnB5IGIvTGliL3BsYXRmb3JtLnB5CmluZGV4IGRkMDk0NjAuLmFiZTkxN2EgMTAwNzU1Ci0tLSBhL0xpYi9wbGF0Zm9ybS5weQorKysgYi9MaWIvcGxhdGZvcm0ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiIFRoaXMgbW9kdWxlIHRyaWVzIHRvIHJldHJpZXZlIGFzIG11Y2ggcGxhdGZvcm0taWRlbnRpZnlpbmcgZGF0YSBhcwogICAgIHBvc3NpYmxlLiBJdCBtYWtlcyB0aGlzIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB2aWEgZnVuY3Rpb24gQVBJcy4KQEAgLTMyLDYgKzMyLDcgQEAKICMKICMgICAgPHNlZSBDVlMgYW5kIFNWTiBjaGVja2luIG1lc3NhZ2VzIGZvciBoaXN0b3J5PgogIworIyAgICAxLjAuNyAtIGFkZGVkIERFVl9OVUxMCiAjICAgIDEuMC42IC0gYWRkZWQgbGludXhfZGlzdHJpYnV0aW9uKCkKICMgICAgMS4wLjUgLSBmaXhlZCBKYXZhIHN1cHBvcnQgdG8gYWxsb3cgcnVubmluZyB0aGUgbW9kdWxlIG9uIEp5dGhvbgogIyAgICAxLjAuNCAtIGFkZGVkIElyb25QeXRob24gc3VwcG9ydApAQCAtMTA4LDEwICsxMDksMjUgQEAKIAogIiIiCiAKLV9fdmVyc2lvbl9fID0gJzEuMC42JworX192ZXJzaW9uX18gPSAnMS4wLjcnCiAKIGltcG9ydCBzeXMsIG9zLCByZQogCisjIyMgR2xvYmFscyAmIENvbnN0YW50cworCisjIERldGVybWluZSB0aGUgcGxhdGZvcm0ncyAvZGV2L251bGwgZGV2aWNlCit0cnk6CisgICAgREVWX05VTEwgPSBvcy5kZXZudWxsCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgIyBvcy5kZXZudWxsIHdhcyBhZGRlZCBpbiBQeXRob24gMi40LCBzbyBlbXVsYXRlIGl0IGZvciBlYXJsaWVyCisgICAgIyBQeXRob24gdmVyc2lvbnMKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCd3aW4zMicsJ3dpbjE2Jywnb3MyJyk6CisgICAgICAgICMgVXNlIHRoZSBvbGQgQ1AvTSBOVUwgYXMgZGV2aWNlIG5hbWUKKyAgICAgICAgREVWX05VTEwgPSAnTlVMJworICAgIGVsc2U6CisgICAgICAgICMgU3RhbmRhcmQgVW5peCB1c2VzIC9kZXYvbnVsbAorICAgICAgICBERVZfTlVMTCA9ICcvZGV2L251bGwnCisKICMjIyBQbGF0Zm9ybSBzcGVjaWZpYyBBUElzCiAKIF9saWJjX3NlYXJjaCA9IHJlLmNvbXBpbGUocicoX19saWJjX2luaXQpJwpAQCAtMTg0LDkgKzIwMCw4IEBACiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5leGlzdHMoJy92YXIvYWRtL2luc3QtbG9nL2luZm8nKToKICAgICAgICAgIyBTdVNFIExpbnV4IHN0b3JlcyBkaXN0cmlidXRpb24gaW5mb3JtYXRpb24gaW4gdGhhdCBmaWxlCi0gICAgICAgIGluZm8gPSBvcGVuKCcvdmFyL2FkbS9pbnN0LWxvZy9pbmZvJykucmVhZGxpbmVzKCkKICAgICAgICAgZGlzdG5hbWUgPSAnU3VTRScKLSAgICAgICAgZm9yIGxpbmUgaW4gaW5mbzoKKyAgICAgICAgZm9yIGxpbmUgaW4gb3BlbignL3Zhci9hZG0vaW5zdC1sb2cvaW5mbycpOgogICAgICAgICAgICAgdHYgPSBsaW5lLnNwbGl0KCkKICAgICAgICAgICAgIGlmIGxlbih0dikgPT0gMjoKICAgICAgICAgICAgICAgICB0YWcsdmFsdWUgPSB0dgpAQCAtMjAxLDggKzIxNiw3IEBACiAKICAgICBpZiBvcy5wYXRoLmV4aXN0cygnL2V0Yy8uaW5zdGFsbGVkJyk6CiAgICAgICAgICMgQ2FsZGVyYSBPcGVuTGludXggaGFzIHNvbWUgaW5mb3MgaW4gdGhhdCBmaWxlICh0aGFua3MgdG8gQ29saW4gS29uZykKLSAgICAgICAgaW5mbyA9IG9wZW4oJy9ldGMvLmluc3RhbGxlZCcpLnJlYWRsaW5lcygpCi0gICAgICAgIGZvciBsaW5lIGluIGluZm86CisgICAgICAgIGZvciBsaW5lIGluIG9wZW4oJy9ldGMvLmluc3RhbGxlZCcpOgogICAgICAgICAgICAgcGtnID0gbGluZS5zcGxpdCgnLScpCiAgICAgICAgICAgICBpZiBsZW4ocGtnKSA+PSAyIGFuZCBwa2dbMF0gPT0gJ09wZW5MaW51eCc6CiAgICAgICAgICAgICAgICAgIyBYWFggZG9lcyBDYWxkZXJhIHN1cHBvcnQgbm9uIEludGVsIHBsYXRmb3JtcyA/IElmIHllcywKQEAgLTMxMSw5ICszMjUsOCBAQAogICAgICAgICByZXR1cm4gX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSx2ZXJzaW9uLGlkKQogCiAgICAgIyBSZWFkIHRoZSBmaXJzdCBsaW5lCi0gICAgZiA9IG9wZW4oJy9ldGMvJytmaWxlLCAncicpCi0gICAgZmlyc3RsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgZi5jbG9zZSgpCisgICAgd2l0aCBvcGVuKCcvZXRjLycrZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICBmaXJzdGxpbmUgPSBmLnJlYWRsaW5lKCkKICAgICBfZGlzdG5hbWUsIF92ZXJzaW9uLCBfaWQgPSBfcGFyc2VfcmVsZWFzZV9maWxlKGZpcnN0bGluZSkKIAogICAgIGlmIF9kaXN0bmFtZSBhbmQgZnVsbF9kaXN0cmlidXRpb25fbmFtZToKQEAgLTQ1MCw3ICs0NjMsMTYgQEAKIAogX3Zlcl9vdXRwdXQgPSByZS5jb21waWxlKHInKD86KFtcdyBdKykgKFtcdy5dKykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICcuKicKLSAgICAgICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbiAoW1xkLl0rKSknLCByZS5BU0NJSSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAnXFsuKiAoW1xkLl0rKVxdKScpCisKKyMgRXhhbXBsZXMgb2YgVkVSIGNvbW1hbmQgb3V0cHV0OgorIworIyAgIFdpbmRvd3MgMjAwMDogIE1pY3Jvc29mdCBXaW5kb3dzIDIwMDAgW1ZlcnNpb24gNS4wMC4yMTk1XQorIyAgIFdpbmRvd3MgWFA6ICAgIE1pY3Jvc29mdCBXaW5kb3dzIFhQIFtWZXJzaW9uIDUuMS4yNjAwXQorIyAgIFdpbmRvd3MgVmlzdGE6IE1pY3Jvc29mdCBXaW5kb3dzIFtWZXJzaW9uIDYuMC42MDAyXQorIworIyBOb3RlIHRoYXQgdGhlICJWZXJzaW9uIiBzdHJpbmcgZ2V0cyBsb2NhbGl6ZWQgb24gZGlmZmVyZW50CisjIFdpbmRvd3MgdmVyc2lvbnMuCiAKIGRlZiBfc3lzY21kX3ZlcihzeXN0ZW09JycsIHJlbGVhc2U9JycsIHZlcnNpb249JycsCiAKQEAgLTU4OSw2ICs2MTEsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIGlmIGNzZFs6MTNdID09ICdTZXJ2aWNlIFBhY2sgJzoKICAgICAgICAgICAgIGNzZCA9ICdTUCcgKyBjc2RbMTM6XQorCiAgICAgaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUzoKICAgICAgICAgcmVna2V5ID0gJ1NPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uJwogICAgICAgICAjIFRyeSB0byBndWVzcyB0aGUgcmVsZWFzZSBuYW1lCkBAIC02MDMsNiArNjI2LDcgQEAKICAgICAgICAgICAgICAgICByZWxlYXNlID0gJ3Bvc3RNZScKICAgICAgICAgZWxpZiBtYWogPT0gNToKICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwMCcKKwogICAgIGVsaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ6CiAgICAgICAgIHJlZ2tleSA9ICdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvbicKICAgICAgICAgaWYgbWFqIDw9IDQ6CkBAIC02NDYsNiArNjcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDA4U2VydmVyUjInCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAncG9zdDIwMDhTZXJ2ZXInCisKICAgICBlbHNlOgogICAgICAgICBpZiBub3QgcmVsZWFzZToKICAgICAgICAgICAgICMgRS5nLiBXaW4zLjEgd2l0aCB3aW4zMnMKQEAgLTk0Nyw3ICs5NzIsNyBAQAogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6Ci0gICAgICAgIGYgPSBvcy5wb3BlbigndW5hbWUgJXMgMj4gL2Rldi9udWxsJyAlIG9wdGlvbikKKyAgICAgICAgZiA9IG9zLnBvcGVuKCd1bmFtZSAlcyAyPiAlcycgJSAob3B0aW9uLCBERVZfTlVMTCkpCiAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvcixvcy5lcnJvcik6CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgb3V0cHV0ID0gZi5yZWFkKCkuc3RyaXAoKQpAQCAtOTYyLDE3ICs5ODcsMTYgQEAKICAgICAiIiIgSW50ZXJmYWNlIHRvIHRoZSBzeXN0ZW0ncyBmaWxlIGNvbW1hbmQuCiAKICAgICAgICAgVGhlIGZ1bmN0aW9uIHVzZXMgdGhlIC1iIG9wdGlvbiBvZiB0aGUgZmlsZSBjb21tYW5kIHRvIGhhdmUgaXQKLSAgICAgICAgb21taXQgdGhlIGZpbGVuYW1lIGluIGl0cyBvdXRwdXQgYW5kIGlmIHBvc3NpYmxlIHRoZSAtTCBvcHRpb24KLSAgICAgICAgdG8gaGF2ZSB0aGUgY29tbWFuZCBmb2xsb3cgc3ltbGlua3MuIEl0IHJldHVybnMgZGVmYXVsdCBpbgotICAgICAgICBjYXNlIHRoZSBjb21tYW5kIHNob3VsZCBmYWlsLgorICAgICAgICBvbWl0IHRoZSBmaWxlbmFtZSBpbiBpdHMgb3V0cHV0LiBGb2xsb3cgdGhlIHN5bWxpbmtzLiBJdCByZXR1cm5zCisgICAgICAgIGRlZmF1bHQgaW4gY2FzZSB0aGUgY29tbWFuZCBzaG91bGQgZmFpbC4KIAogICAgICIiIgogICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgdGFyZ2V0ID0gX2ZvbGxvd19zeW1saW5rcyh0YXJnZXQpCisgICAgdGFyZ2V0ID0gX2ZvbGxvd19zeW1saW5rcyh0YXJnZXQpLnJlcGxhY2UoJyInLCAnXFwiJykKICAgICB0cnk6Ci0gICAgICAgIGYgPSBvcy5wb3BlbignZmlsZSAiJXMiIDI+IC9kZXYvbnVsbCcgJSB0YXJnZXQpCisgICAgICAgIGYgPSBvcy5wb3BlbignZmlsZSAtYiAiJXMiIDI+ICVzJyAlICh0YXJnZXQsIERFVl9OVUxMKSkKICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBmLnJlYWQoKS5zdHJpcCgpCkBAIC05OTIsOCArMTAxNiw2IEBACiAgICAgJ2Rvcyc6ICgnJywnTVNET1MnKSwKIH0KIAotX2FyY2hpdGVjdHVyZV9zcGxpdCA9IHJlLmNvbXBpbGUocidbXHMsXScpLnNwbGl0Ci0KIGRlZiBhcmNoaXRlY3R1cmUoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSxiaXRzPScnLGxpbmthZ2U9JycpOgogCiAgICAgIiIiIFF1ZXJpZXMgdGhlIGdpdmVuIGV4ZWN1dGFibGUgKGRlZmF1bHRzIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIKQEAgLTEwMjgsMTEgKzEwNTAsMTEgQEAKIAogICAgICMgR2V0IGRhdGEgZnJvbSB0aGUgJ2ZpbGUnIHN5c3RlbSBjb21tYW5kCiAgICAgaWYgZXhlY3V0YWJsZToKLSAgICAgICAgb3V0cHV0ID0gX3N5c2NtZF9maWxlKGV4ZWN1dGFibGUsICcnKQorICAgICAgICBmaWxlb3V0ID0gX3N5c2NtZF9maWxlKGV4ZWN1dGFibGUsICcnKQogICAgIGVsc2U6Ci0gICAgICAgIG91dHB1dCA9ICcnCisgICAgICAgIGZpbGVvdXQgPSAnJwogCi0gICAgaWYgbm90IG91dHB1dCBhbmQgXAorICAgIGlmIG5vdCBmaWxlb3V0IGFuZCBcCiAgICAgICAgZXhlY3V0YWJsZSA9PSBzeXMuZXhlY3V0YWJsZToKICAgICAgICAgIyAiZmlsZSIgY29tbWFuZCBkaWQgbm90IHJldHVybiBhbnl0aGluZzsgd2UnbGwgdHJ5IHRvIHByb3ZpZGUKICAgICAgICAgIyBzb21lIHNlbnNpYmxlIGRlZmF1bHRzIHRoZW4uLi4KQEAgLTEwNDQsOSArMTA2Niw2IEBACiAgICAgICAgICAgICAgICAgbGlua2FnZSA9IGwKICAgICAgICAgcmV0dXJuIGJpdHMsbGlua2FnZQogCi0gICAgIyBTcGxpdCB0aGUgb3V0cHV0IGludG8gYSBsaXN0IG9mIHN0cmluZ3Mgb21pdHRpbmcgdGhlIGZpbGVuYW1lCi0gICAgZmlsZW91dCA9IF9hcmNoaXRlY3R1cmVfc3BsaXQob3V0cHV0KVsxOl0KLQogICAgIGlmICdleGVjdXRhYmxlJyBub3QgaW4gZmlsZW91dDoKICAgICAgICAgIyBGb3JtYXQgbm90IHN1cHBvcnRlZAogICAgICAgICByZXR1cm4gYml0cyxsaW5rYWdlCkBAIC0xMTMxLDcgKzExNTAsMTEgQEAKICAgICAgICAgICAgICMgaHR0cDovL3N1cHBvcnQubWljcm9zb2Z0LmNvbS9rYi84ODg3MzEgYW5kCiAgICAgICAgICAgICAjIGh0dHA6Ly93d3cuZ2VvY2l0aWVzLmNvbS9yaWNrX2xpdmVseS9NQU5VQUxTL0VOVi9NU1dJTi9QUk9DRVNTSS5IVE0KICAgICAgICAgICAgIGlmIG5vdCBtYWNoaW5lOgotICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBvcy5lbnZpcm9uLmdldCgnUFJPQ0VTU09SX0FSQ0hJVEVDVFVSRScsICcnKQorICAgICAgICAgICAgICAgICMgV09XNjQgcHJvY2Vzc2VzIG1hc2sgdGhlIG5hdGl2ZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICAgICBpZiAiUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiIgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCJQUk9DRVNTT1JfQVJDSElURVc2NDMyIiwgJycpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9IG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfQVJDSElURUNUVVJFJywgJycpCiAgICAgICAgICAgICBpZiBub3QgcHJvY2Vzc29yOgogICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9IG9zLmVudmlyb24uZ2V0KCdQUk9DRVNTT1JfSURFTlRJRklFUicsIG1hY2hpbmUpCiAKQEAgLTExNzEsMTAgKzExOTQsNiBAQAogICAgICAgICAgICAgaWYgbm90IHZlcnNpb246CiAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IHZlbmRvcgogCi0gICAgICAgIGVsaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgIHJlbGVhc2UsKHZlcnNpb24sc3RhZ2Usbm9ucmVsKSxtYWNoaW5lID0gbWFjX3ZlcigpCi0gICAgICAgICAgICBzeXN0ZW0gPSAnTWFjT1MnCi0KICAgICAjIFN5c3RlbSBzcGVjaWZpYyBleHRlbnNpb25zCiAgICAgaWYgc3lzdGVtID09ICdPcGVuVk1TJzoKICAgICAgICAgIyBPcGVuVk1TIHNlZW1zIHRvIGhhdmUgcmVsZWFzZSBhbmQgdmVyc2lvbiBtaXhlZCB1cApkaWZmIC0tZ2l0IGEvTGliL3BsaXN0bGliLnB5IGIvTGliL3BsaXN0bGliLnB5CmluZGV4IGZiYmE3OTEuLjgyZDQ1NmEgMTAwNjQ0Ci0tLSBhL0xpYi9wbGlzdGxpYi5weQorKysgYi9MaWIvcGxpc3RsaWIucHkKQEAgLTE4Niw3ICsxODYsNyBAQAogCiBQTElTVEhFQURFUiA9IGIiIiJcCiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KICIiIgogCiBjbGFzcyBQbGlzdFdyaXRlcihEdW1iWE1MV3JpdGVyKToKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDFhNTI5ZDAuLjg0ZWE4OGQgMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMzMxLDE2ICszMzEsMjYgQEAKICAgICAgICAgU2VlIHRoZSBtZXRob2RzIG9mIHRoZSBwYXJlbnQgY2xhc3MgUE9QMyBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgogICAgICAgICAiIiIKIAotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydD1QT1AzX1NTTF9QT1JULAotICAgICAgICBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUsCi0gICAgICAgIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VUKToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9UE9QM19TU0xfUE9SVCwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIG5vdCBOb25lIGFuZCBrZXlmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvbnRleHQgYW5kIGtleWZpbGUgYXJndW1lbnRzIGFyZSBtdXR1YWxseSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmUgYW5kIGNlcnRmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNvbnRleHQgYW5kIGNlcnRmaWxlIGFyZ3VtZW50cyBhcmUgbXV0dWFsbHkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIFBPUDMuX19pbml0X18oc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCkKIAogICAgICAgICBkZWYgX2NyZWF0ZV9zb2NrZXQoc2VsZiwgdGltZW91dCk6CiAgICAgICAgICAgICBzb2NrID0gUE9QMy5fY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KQotICAgICAgICAgICAgcmV0dXJuIHNzbC53cmFwX3NvY2tldChzb2NrLCBzZWxmLmtleWZpbGUsIHNlbGYuY2VydGZpbGUpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb2NrID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHJldHVybiBzb2NrCiAKICAgICBfX2FsbF9fLmFwcGVuZCgiUE9QM19TU0wiKQogCmRpZmYgLS1naXQgYS9MaWIvcG9zaXhwYXRoLnB5IGIvTGliL3Bvc2l4cGF0aC5weQppbmRleCA2NGZlOWRmLi5jOTgyOWUxIDEwMDY0NAotLS0gYS9MaWIvcG9zaXhwYXRoLnB5CisrKyBiL0xpYi9wb3NpeHBhdGgucHkKQEAgLTQ5LDYgKzQ5LDkgQEAKIGRlZiBub3JtY2FzZShzKToKICAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4gIEhhcyBubyBlZmZlY3QgdW5kZXIgUG9zaXgiIiIKICAgICAjIFRPRE86IG9uIE1hYyBPUyBYLCB0aGlzIHNob3VsZCByZWFsbHkgcmV0dXJuIHMubG93ZXIoKS4KKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKICAgICByZXR1cm4gcwogCiAKQEAgLTE1OCw3ICsxNjEsNyBAQAogZGVmIGxleGlzdHMocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBleGlzdHMuICBSZXR1cm5zIFRydWUgZm9yIGJyb2tlbiBzeW1ib2xpYyBsaW5rcyIiIgogICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQorICAgICAgICBvcy5sc3RhdChwYXRoKQogICAgIGV4Y2VwdCBvcy5lcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKQEAgLTI1OSw3ICsyNjIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHBhdGgKICAgICAgICAgdXNlcmhvbWUgPSBwd2VudC5wd19kaXIKICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIGJ5dGVzKToKLSAgICAgICAgdXNlcmhvbWUgPSB1c2VyaG9tZS5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKQorICAgICAgICB1c2VyaG9tZSA9IG9zLmZzZW5jb2RlKHVzZXJob21lKQogICAgICAgICByb290ID0gYicvJwogICAgIGVsc2U6CiAgICAgICAgIHJvb3QgPSAnLycKQEAgLTQyNCw3ICs0MjcsNyBAQAogICAgICAgICAgICAgcGF0aCA9IG5vcm1wYXRoKHJlc29sdmVkKQogICAgIHJldHVybiBwYXRoCiAKLXN1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gRmFsc2UKK3N1cHBvcnRzX3VuaWNvZGVfZmlsZW5hbWVzID0gKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJykKIAogZGVmIHJlbHBhdGgocGF0aCwgc3RhcnQ9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGEgcmVsYXRpdmUgdmVyc2lvbiBvZiBhIHBhdGgiIiIKZGlmZiAtLWdpdCBhL0xpYi9wcHJpbnQucHkgYi9MaWIvcHByaW50LnB5CmluZGV4IGIzYTY0NDYuLmI4NDE3ZjUgMTAwNjQ0Ci0tLSBhL0xpYi9wcHJpbnQucHkKKysrIGIvTGliL3BwcmludC5weQpAQCAtMzUsNyArMzUsNyBAQAogIiIiCiAKIGltcG9ydCBzeXMgYXMgX3N5cwotCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfT3JkZXJlZERpY3QKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPIGFzIF9TdHJpbmdJTwogCiBfX2FsbF9fID0gWyJwcHJpbnQiLCJwZm9ybWF0IiwiaXNyZWFkYWJsZSIsImlzcmVjdXJzaXZlIiwic2FmZXJlcHIiLApAQCAtMTYzLDcgKzE2Myw3IEBACiAKICAgICAgICAgaWYgc2VwTGluZXM6CiAgICAgICAgICAgICByID0gZ2V0YXR0cih0eXAsICJfX3JlcHJfXyIsIE5vbmUpCi0gICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgZGljdCkgYW5kIHIgaXMgZGljdC5fX3JlcHJfXzoKKyAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KToKICAgICAgICAgICAgICAgICB3cml0ZSgneycpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5kZW50X3Blcl9sZXZlbCA+IDE6CiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKChzZWxmLl9pbmRlbnRfcGVyX2xldmVsIC0gMSkgKiAnICcpCkBAIC0xNzEsNyArMTcxLDEwIEBACiAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoOgogICAgICAgICAgICAgICAgICAgICBjb250ZXh0W29iamlkXSA9IDEKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbAotICAgICAgICAgICAgICAgICAgICBpdGVtcyAgPSBzb3J0ZWQob2JqZWN0Lml0ZW1zKCksIGtleT1fc2FmZV90dXBsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIF9PcmRlcmVkRGljdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGxpc3Qob2JqZWN0Lml0ZW1zKCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChvYmplY3QuaXRlbXMoKSwga2V5PV9zYWZlX3R1cGxlKQogICAgICAgICAgICAgICAgICAgICBrZXksIGVudCA9IGl0ZW1zWzBdCiAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQpkaWZmIC0tZ2l0IGEvTGliL3Byb2ZpbGUucHkgYi9MaWIvcHJvZmlsZS5weQppbmRleCAzYjIzOWQxLi5kNjUxMWI3MSAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyBDbGFzcyBmb3IgcHJvZmlsaW5nIHB5dGhvbiBjb2RlLiByZXYgMS4wICA2LzIvOTQKICMKQEAgLTM5LDcgKzM5LDcgQEAKIGltcG9ydCBtYXJzaGFsCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKIAotX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJoZWxwIiwgIlByb2ZpbGUiXQorX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogIyBTYW1wbGUgdGltZXIgZm9yIHVzZSB3aXRoCiAjaV9jb3VudCA9IDAKQEAgLTkyLDE2ICs5Miw2IEBACiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKIAotIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLWRlZiBoZWxwKCk6Ci0gICAgcHJpbnQoIkRvY3VtZW50YXRpb24gZm9yIHRoZSBwcm9maWxlIG1vZHVsZSBjYW4gYmUgZm91bmQgIikKLSAgICBwcmludCgiaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSwgc2VjdGlvbiAnVGhlIFB5dGhvbiBQcm9maWxlcicuIikKLQotaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICBpbXBvcnQgTWFjT1MKLSAgICBkZWYgX2dldF90aW1lX21hYyh0aW1lcj1NYWNPUy5HZXRUaWNrcyk6Ci0gICAgICAgIHJldHVybiB0aW1lcigpIC8gNjAuMAotCiBpZiBoYXNhdHRyKG9zLCAidGltZXMiKToKICAgICBkZWYgX2dldF90aW1lX3RpbWVzKHRpbWVyPW9zLnRpbWVzKToKICAgICAgICAgdCA9IHRpbWVyKCkKQEAgLTE3OCwxMCArMTY4LDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLnRpbWVyID0gcmVzZ2V0cnVzYWdlCiAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaGVyID0gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3RpbWUgPSBfZ2V0X3RpbWVfcmVzb3VyY2UKLSAgICAgICAgICAgIGVsaWYgb3MubmFtZSA9PSAnbWFjJzoKLSAgICAgICAgICAgICAgICBzZWxmLnRpbWVyID0gTWFjT1MuR2V0VGlja3MKLSAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoZXIgPSBzZWxmLnRyYWNlX2Rpc3BhdGNoX21hYwotICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3RpbWUgPSBfZ2V0X3RpbWVfbWFjCiAgICAgICAgICAgICBlbGlmIGhhc2F0dHIodGltZSwgJ2Nsb2NrJyk6CiAgICAgICAgICAgICAgICAgc2VsZi50aW1lciA9IHNlbGYuZ2V0X3RpbWUgPSB0aW1lLmNsb2NrCiAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaGVyID0gc2VsZi50cmFjZV9kaXNwYXRjaF9pCkBAIC01ODgsOCArNTc0LDYgQEAKICAgICAgICAgcmV0dXJuIG1lYW4KIAogIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLWRlZiBTdGF0cygqYXJncyk6Ci0gICAgcHJpbnQoJ1JlcG9ydCBnZW5lcmF0aW5nIGZ1bmN0aW9ucyBhcmUgaW4gdGhlICJwc3RhdHMiIG1vZHVsZVxhJykKIAogZGVmIG1haW4oKToKICAgICB1c2FnZSA9ICJwcm9maWxlLnB5IFstbyBvdXRwdXRfZmlsZV9wYXRoXSBbLXMgc29ydF0gc2NyaXB0ZmlsZSBbYXJnXSAuLi4iCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA1NjYyNzJkLi5mNWM1OTJiIDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTM3LDYgKzM3LDcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgbWFyc2hhbAogaW1wb3J0IHJlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgY21wX3RvX2tleQogCiBfX2FsbF9fID0gWyJTdGF0cyJdCiAKQEAgLTcwLDIwICs3MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfc3RhdHMoNSkucHJpbnRfY2FsbGVycyg1KQogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICAjIEkgY2FuJ3QgZmlndXJlIG91dCBob3cgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGEgc3RyZWFtIGtleXdvcmQgYXJnCi0gICAgICAgICMgd2l0aCAqYXJnczoKLSAgICAgICAgIyAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgc3RyZWFtPXN5cy5zdGRvdXQpOiAuLi4KLSAgICAgICAgIyBzbyBJIHVzZSAqKmt3ZHMgYW5kIHNxYXV3ayBpZiBzb21ldGhpbmcgdW5leHBlY3RlZCBpcyBwYXNzZWQgaW4uCi0gICAgICAgIHNlbGYuc3RyZWFtID0gc3lzLnN0ZG91dAotICAgICAgICBpZiAic3RyZWFtIiBpbiBrd2RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBrd2RzWyJzdHJlYW0iXQotICAgICAgICAgICAgZGVsIGt3ZHNbInN0cmVhbSJdCi0gICAgICAgIGlmIGt3ZHM6Ci0gICAgICAgICAgICBrZXlzID0ga3dkcy5rZXlzKCkKLSAgICAgICAgICAgIGtleXMuc29ydCgpCi0gICAgICAgICAgICBleHRyYXMgPSAiLCAiLmpvaW4oWyIlcz0lcyIgJSAoaywga3dkc1trXSkgZm9yIGsgaW4ga2V5c10pCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlY29nbml6ZWQga2V5d29yZCBhcmdzOiAlcyIgJSBleHRyYXMpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCBzdHJlYW09Tm9uZSk6CisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtIG9yIHN5cy5zdGRvdXQKICAgICAgICAgaWYgbm90IGxlbihhcmdzKToKICAgICAgICAgICAgIGFyZyA9IE5vbmUKICAgICAgICAgZWxzZToKQEAgLTEwMCwyMiArODksMjEgQEAKICAgICAgICAgc2VsZi50b3RhbF9jYWxscyA9IDAKICAgICAgICAgc2VsZi5wcmltX2NhbGxzID0gMAogICAgICAgICBzZWxmLm1heF9uYW1lX2xlbiA9IDAKLSAgICAgICAgc2VsZi50b3BfbGV2ZWwgPSB7fQorICAgICAgICBzZWxmLnRvcF9sZXZlbCA9IHNldCgpCiAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICBzZWxmLnNvcnRfYXJnX2RpY3QgPSB7fQogICAgICAgICBzZWxmLmxvYWRfc3RhdHMoYXJnKQotICAgICAgICB0cm91YmxlID0gMQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmdldF90b3BfbGV2ZWxfc3RhdHMoKQotICAgICAgICAgICAgdHJvdWJsZSA9IDAKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIHRyb3VibGU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkludmFsaWQgdGltaW5nIGRhdGEiLCBlbmQ9JyAnLCBmaWxlPXNlbGYuc3RyZWFtKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZmlsZXM6IHByaW50KHNlbGYuZmlsZXNbLTFdLCBlbmQ9JyAnLCBmaWxlPXNlbGYuc3RyZWFtKQotICAgICAgICAgICAgICAgIHByaW50KGZpbGU9c2VsZi5zdHJlYW0pCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwcmludCgiSW52YWxpZCB0aW1pbmcgZGF0YSAlcyIgJQorICAgICAgICAgICAgICAgICAgKHNlbGYuZmlsZXNbLTFdIGlmIHNlbGYuZmlsZXMgZWxzZSAnJyksIGZpbGU9c2VsZi5zdHJlYW0pCisgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGxvYWRfc3RhdHMoc2VsZiwgYXJnKToKLSAgICAgICAgaWYgbm90IGFyZzogIHNlbGYuc3RhdHMgPSB7fQorICAgICAgICBpZiBhcmcgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6CiAgICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCiAgICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCkBAIC0xMjUsMTMgKzExMywxMyBAQAogICAgICAgICAgICAgICAgIGFyZyA9IHRpbWUuY3RpbWUoZmlsZV9zdGF0cy5zdF9tdGltZSkgKyAiICAgICIgKyBhcmcKICAgICAgICAgICAgIGV4Y2VwdDogICMgaW4gY2FzZSB0aGlzIGlzIG5vdCB1bml4CiAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgc2VsZi5maWxlcyA9IFsgYXJnIF0KKyAgICAgICAgICAgIHNlbGYuZmlsZXMgPSBbYXJnXQogICAgICAgICBlbGlmIGhhc2F0dHIoYXJnLCAnY3JlYXRlX3N0YXRzJyk6CiAgICAgICAgICAgICBhcmcuY3JlYXRlX3N0YXRzKCkKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBhcmcuc3RhdHMKICAgICAgICAgICAgIGFyZy5zdGF0cyA9IHt9CiAgICAgICAgIGlmIG5vdCBzZWxmLnN0YXRzOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY3JlYXRlIG9yIGNvbnN0cnVjdCBhICVyIG9iamVjdCBmcm9tICclcicnIgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY3JlYXRlIG9yIGNvbnN0cnVjdCBhICVyIG9iamVjdCBmcm9tICVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYuX19jbGFzc19fLCBhcmcpKQogICAgICAgICByZXR1cm4KIApAQCAtMTQxLDM0ICsxMjksMzQgQEAKICAgICAgICAgICAgIHNlbGYucHJpbV9jYWxscyAgKz0gY2MKICAgICAgICAgICAgIHNlbGYudG90YWxfdHQgICAgKz0gdHQKICAgICAgICAgICAgIGlmICgianByb2ZpbGUiLCAwLCAicHJvZmlsZXIiKSBpbiBjYWxsZXJzOgotICAgICAgICAgICAgICAgIHNlbGYudG9wX2xldmVsW2Z1bmNdID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYudG9wX2xldmVsLmFkZChmdW5jKQogICAgICAgICAgICAgaWYgbGVuKGZ1bmNfc3RkX3N0cmluZyhmdW5jKSkgPiBzZWxmLm1heF9uYW1lX2xlbjoKICAgICAgICAgICAgICAgICBzZWxmLm1heF9uYW1lX2xlbiA9IGxlbihmdW5jX3N0ZF9zdHJpbmcoZnVuYykpCiAKICAgICBkZWYgYWRkKHNlbGYsICphcmdfbGlzdCk6Ci0gICAgICAgIGlmIG5vdCBhcmdfbGlzdDogcmV0dXJuIHNlbGYKLSAgICAgICAgaWYgbGVuKGFyZ19saXN0KSA+IDE6IHNlbGYuYWRkKCphcmdfbGlzdFsxOl0pCi0gICAgICAgIG90aGVyID0gYXJnX2xpc3RbMF0KLSAgICAgICAgaWYgdHlwZShzZWxmKSAhPSB0eXBlKG90aGVyKToKLSAgICAgICAgICAgIG90aGVyID0gU3RhdHMob3RoZXIpCi0gICAgICAgIHNlbGYuZmlsZXMgKz0gb3RoZXIuZmlsZXMKLSAgICAgICAgc2VsZi50b3RhbF9jYWxscyArPSBvdGhlci50b3RhbF9jYWxscwotICAgICAgICBzZWxmLnByaW1fY2FsbHMgKz0gb3RoZXIucHJpbV9jYWxscwotICAgICAgICBzZWxmLnRvdGFsX3R0ICs9IG90aGVyLnRvdGFsX3R0Ci0gICAgICAgIGZvciBmdW5jIGluIG90aGVyLnRvcF9sZXZlbDoKLSAgICAgICAgICAgIHNlbGYudG9wX2xldmVsW2Z1bmNdID0gTm9uZQorICAgICAgICBpZiBub3QgYXJnX2xpc3Q6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBmb3IgaXRlbSBpbiByZXZlcnNlZChhcmdfbGlzdCk6CisgICAgICAgICAgICBpZiB0eXBlKHNlbGYpICE9IHR5cGUoaXRlbSk6CisgICAgICAgICAgICAgICAgaXRlbSA9IFN0YXRzKGl0ZW0pCisgICAgICAgICAgICBzZWxmLmZpbGVzICs9IGl0ZW0uZmlsZXMKKyAgICAgICAgICAgIHNlbGYudG90YWxfY2FsbHMgKz0gaXRlbS50b3RhbF9jYWxscworICAgICAgICAgICAgc2VsZi5wcmltX2NhbGxzICs9IGl0ZW0ucHJpbV9jYWxscworICAgICAgICAgICAgc2VsZi50b3RhbF90dCArPSBpdGVtLnRvdGFsX3R0CisgICAgICAgICAgICBmb3IgZnVuYyBpbiBpdGVtLnRvcF9sZXZlbDoKKyAgICAgICAgICAgICAgICBzZWxmLnRvcF9sZXZlbC5hZGQoZnVuYykKIAotICAgICAgICBpZiBzZWxmLm1heF9uYW1lX2xlbiA8IG90aGVyLm1heF9uYW1lX2xlbjoKLSAgICAgICAgICAgIHNlbGYubWF4X25hbWVfbGVuID0gb3RoZXIubWF4X25hbWVfbGVuCisgICAgICAgICAgICBpZiBzZWxmLm1heF9uYW1lX2xlbiA8IGl0ZW0ubWF4X25hbWVfbGVuOgorICAgICAgICAgICAgICAgIHNlbGYubWF4X25hbWVfbGVuID0gaXRlbS5tYXhfbmFtZV9sZW4KIAotICAgICAgICBzZWxmLmZjbl9saXN0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5mY25fbGlzdCA9IE5vbmUKIAotICAgICAgICBmb3IgZnVuYywgc3RhdCBpbiBvdGhlci5zdGF0cy5pdGVtcygpOgotICAgICAgICAgICAgaWYgZnVuYyBpbiBzZWxmLnN0YXRzOgotICAgICAgICAgICAgICAgIG9sZF9mdW5jX3N0YXQgPSBzZWxmLnN0YXRzW2Z1bmNdCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9sZF9mdW5jX3N0YXQgPSAoMCwgMCwgMCwgMCwge30sKQotICAgICAgICAgICAgc2VsZi5zdGF0c1tmdW5jXSA9IGFkZF9mdW5jX3N0YXRzKG9sZF9mdW5jX3N0YXQsIHN0YXQpCisgICAgICAgICAgICBmb3IgZnVuYywgc3RhdCBpbiBpdGVtLnN0YXRzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgZnVuYyBpbiBzZWxmLnN0YXRzOgorICAgICAgICAgICAgICAgICAgICBvbGRfZnVuY19zdGF0ID0gc2VsZi5zdGF0c1tmdW5jXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9sZF9mdW5jX3N0YXQgPSAoMCwgMCwgMCwgMCwge30sKQorICAgICAgICAgICAgICAgIHNlbGYuc3RhdHNbZnVuY10gPSBhZGRfZnVuY19zdGF0cyhvbGRfZnVuY19zdGF0LCBzdGF0KQogICAgICAgICByZXR1cm4gc2VsZgogCiAgICAgZGVmIGR1bXBfc3RhdHMoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMjM4LDcgKzIyNiw3IEBACiAgICAgICAgICAgICBzdGF0c19saXN0LmFwcGVuZCgoY2MsIG5jLCB0dCwgY3QpICsgZnVuYyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnVuY19zdGRfc3RyaW5nKGZ1bmMpLCBmdW5jKSkKIAotICAgICAgICBzdGF0c19saXN0LnNvcnQoa2V5PUNtcFRvS2V5KFR1cGxlQ29tcChzb3J0X3R1cGxlKS5jb21wYXJlKSkKKyAgICAgICAgc3RhdHNfbGlzdC5zb3J0KGtleT1jbXBfdG9fa2V5KFR1cGxlQ29tcChzb3J0X3R1cGxlKS5jb21wYXJlKSkKIAogICAgICAgICBzZWxmLmZjbl9saXN0ID0gZmNuX2xpc3QgPSBbXQogICAgICAgICBmb3IgdHVwbGUgaW4gc3RhdHNfbGlzdDoKQEAgLTI2OSw5ICsyNTcsOSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBuZXdzdGF0c1tuZXdmdW5jXSA9IChjYywgbmMsIHR0LCBjdCwgbmV3Y2FsbGVycykKICAgICAgICAgb2xkX3RvcCA9IHNlbGYudG9wX2xldmVsCi0gICAgICAgIHNlbGYudG9wX2xldmVsID0gbmV3X3RvcCA9IHt9CisgICAgICAgIHNlbGYudG9wX2xldmVsID0gbmV3X3RvcCA9IHNldCgpCiAgICAgICAgIGZvciBmdW5jIGluIG9sZF90b3A6Ci0gICAgICAgICAgICBuZXdfdG9wW2Z1bmNfc3RyaXBfcGF0aChmdW5jKV0gPSBOb25lCisgICAgICAgICAgICBuZXdfdG9wLmFkZChmdW5jX3N0cmlwX3BhdGgoZnVuYykpCiAKICAgICAgICAgc2VsZi5tYXhfbmFtZV9sZW4gPSBtYXhfbmFtZV9sZW4KIApAQCAtMjgwLDcgKzI2OCw4IEBACiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgY2FsY19jYWxsZWVzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmFsbF9jYWxsZWVzOiByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5hbGxfY2FsbGVlczoKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBzZWxmLmFsbF9jYWxsZWVzID0gYWxsX2NhbGxlZXMgPSB7fQogICAgICAgICBmb3IgZnVuYywgKGNjLCBuYywgdHQsIGN0LCBjYWxsZXJzKSBpbiBzZWxmLnN0YXRzLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBub3QgZnVuYyBpbiBhbGxfY2FsbGVlczoKQEAgLTM1MCw3ICszMzksOCBAQAogICAgIGRlZiBwcmludF9zdGF0cyhzZWxmLCAqYW1vdW50KToKICAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBwcmludChmaWxlbmFtZSwgZmlsZT1zZWxmLnN0cmVhbSkKLSAgICAgICAgaWYgc2VsZi5maWxlczogcHJpbnQoZmlsZT1zZWxmLnN0cmVhbSkKKyAgICAgICAgaWYgc2VsZi5maWxlczoKKyAgICAgICAgICAgIHByaW50KGZpbGU9c2VsZi5zdHJlYW0pCiAgICAgICAgIGluZGVudCA9ICcgJyAqIDgKICAgICAgICAgZm9yIGZ1bmMgaW4gc2VsZi50b3BfbGV2ZWw6CiAgICAgICAgICAgICBwcmludChpbmRlbnQsIGZ1bmNfZ2V0X2Z1bmN0aW9uX25hbWUoZnVuYyksIGZpbGU9c2VsZi5zdHJlYW0pCkBAIC00MzYsNyArNDI2LDcgQEAKICAgICAgICAgcHJpbnQoJyAgIG5jYWxscyAgdG90dGltZSAgcGVyY2FsbCAgY3VtdGltZSAgcGVyY2FsbCcsIGVuZD0nICcsIGZpbGU9c2VsZi5zdHJlYW0pCiAgICAgICAgIHByaW50KCdmaWxlbmFtZTpsaW5lbm8oZnVuY3Rpb24pJywgZmlsZT1zZWxmLnN0cmVhbSkKIAotICAgIGRlZiBwcmludF9saW5lKHNlbGYsIGZ1bmMpOiAgIyBoYWNrIDogc2hvdWxkIHByaW50IHBlcmNlbnRhZ2VzCisgICAgZGVmIHByaW50X2xpbmUoc2VsZiwgZnVuYyk6ICAjIGhhY2s6IHNob3VsZCBwcmludCBwZXJjZW50YWdlcwogICAgICAgICBjYywgbmMsIHR0LCBjdCwgY2FsbGVycyA9IHNlbGYuc3RhdHNbZnVuY10KICAgICAgICAgYyA9IHN0cihuYykKICAgICAgICAgaWYgbmMgIT0gY2M6CkBAIC00NzUsMTUgKzQ2NSw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpcmVjdGlvbgogICAgICAgICByZXR1cm4gMAogCi1kZWYgQ21wVG9LZXkobXljbXApOgotICAgICdDb252ZXJ0IGEgY21wPSBmdW5jdGlvbiBpbnRvIGEga2V5PSBmdW5jdGlvbicKLSAgICBjbGFzcyBLKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmopOgotICAgICAgICAgICAgc2VsZi5vYmogPSBvYmoKLSAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPT0gLTEKLSAgICByZXR1cm4gSwotCiAKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBmdW5jX25hbWUgaXMgYSB0cmlwbGUgKGZpbGU6c3RyaW5nLCBsaW5lOmludCwgbmFtZTpzdHJpbmcpCkBAIC02NzAsNyArNjUxLDcgQEAKICAgICAgICAgICAgICAgICBwcmludCgiTm8gc3RhdGlzdGljcyBvYmplY3QgaXMgbG9hZGVkLiIsIGZpbGU9c2VsZi5zdHJlYW0pCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBhYmJyZXZzID0gc2VsZi5zdGF0cy5nZXRfc29ydF9hcmdfZGVmcygpCi0gICAgICAgICAgICBpZiBsaW5lIGFuZCBub3QgZmlsdGVyKGxhbWJkYSB4LGE9YWJicmV2czogeCBub3QgaW4gYSxsaW5lLnNwbGl0KCkpOgorICAgICAgICAgICAgaWYgbGluZSBhbmQgYWxsKCh4IGluIGFiYnJldnMpIGZvciB4IGluIGxpbmUuc3BsaXQoKSk6CiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0cy5zb3J0X3N0YXRzKCpsaW5lLnNwbGl0KCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHByaW50KCJWYWxpZCBzb3J0IGtleXMgKHVuaXF1ZSBwcmVmaXhlcyBhcmUgYWNjZXB0ZWQpOiIsIGZpbGU9c2VsZi5zdHJlYW0pCmRpZmYgLS1naXQgYS9MaWIvcHlfY29tcGlsZS5weSBiL0xpYi9weV9jb21waWxlLnB5CmluZGV4IGNjZTVhYzEuLmUwZjk4Y2IgMTAwNjQ0Ci0tLSBhL0xpYi9weV9jb21waWxlLnB5CisrKyBiL0xpYi9weV9jb21waWxlLnB5CkBAIC00LDExICs0LDEyIEBACiAiIiIKIAogaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgZXJybm8KIGltcG9ydCBpbXAKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKLWltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHRva2VuaXplCiBpbXBvcnQgdHJhY2ViYWNrCiAKIE1BR0lDID0gaW1wLmdldF9tYWdpYygpCkBAIC0zNywxNiArMzgsMTggQEAKICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIGFjY2Vzc2VzIGFzIGNsYXNzIHZhcmlhYmxlICdmaWxlJwogCiAgICAgICAgIG1zZzogICAgICAgIHN0cmluZyBtZXNzYWdlIHRvIGJlIHdyaXR0ZW4gYXMgZXJyb3IgbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICBJZiBubyB2YWx1ZSBpcyBnaXZlbiwgYSBkZWZhdWx0IGV4Y2VwdGlvbiBtZXNzYWdlIHdpbGwgYmUgZ2l2ZW4sCi0gICAgICAgICAgICAgICAgICAgIGNvbnNpc3RlbnQgd2l0aCAnc3RhbmRhcmQnIHB5X2NvbXBpbGUgb3V0cHV0LgotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIChvciBkZWZhdWx0KSBjYW4gYmUgYWNjZXNzZXMgYXMgY2xhc3MgdmFyaWFibGUgJ21zZycKKyAgICAgICAgICAgICAgICAgICAgSWYgbm8gdmFsdWUgaXMgZ2l2ZW4sIGEgZGVmYXVsdCBleGNlcHRpb24gbWVzc2FnZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgIGdpdmVuLCBjb25zaXN0ZW50IHdpdGggJ3N0YW5kYXJkJyBweV9jb21waWxlIG91dHB1dC4KKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSAob3IgZGVmYXVsdCkgY2FuIGJlIGFjY2Vzc2VzIGFzIGNsYXNzIHZhcmlhYmxlCisgICAgICAgICAgICAgICAgICAgICdtc2cnCiAKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCBmaWxlLCBtc2c9JycpOgogICAgICAgICBleGNfdHlwZV9uYW1lID0gZXhjX3R5cGUuX19uYW1lX18KICAgICAgICAgaWYgZXhjX3R5cGUgaXMgU3ludGF4RXJyb3I6Ci0gICAgICAgICAgICB0YnRleHQgPSAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoZXhjX3R5cGUsIGV4Y192YWx1ZSkpCisgICAgICAgICAgICB0YnRleHQgPSAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoCisgICAgICAgICAgICAgICAgZXhjX3R5cGUsIGV4Y192YWx1ZSkpCiAgICAgICAgICAgICBlcnJtc2cgPSB0YnRleHQucmVwbGFjZSgnRmlsZSAiPHN0cmluZz4iJywgJ0ZpbGUgIiVzIicgJSBmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZXJybXNnID0gIlNvcnJ5OiAlczogJXMiICUgKGV4Y190eXBlX25hbWUsZXhjX3ZhbHVlKQpAQCAtNjIsNTQgKzY1LDMyIEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLSMgRGVmaW5lIGFuIGludGVybmFsIGhlbHBlciBhY2NvcmRpbmcgdG8gdGhlIHBsYXRmb3JtCi1pZiBvcy5uYW1lID09ICJtYWMiOgotICAgIGltcG9ydCBNYWNPUwotICAgIGRlZiBzZXRfY3JlYXRvcl90eXBlKGZpbGUpOgotICAgICAgICBNYWNPUy5TZXRDcmVhdG9yQW5kVHlwZShmaWxlLCAnUHl0aCcsICdQWUMgJykKLWVsc2U6Ci0gICAgZGVmIHNldF9jcmVhdG9yX3R5cGUoZmlsZSk6Ci0gICAgICAgIHBhc3MKLQogZGVmIHdyX2xvbmcoZiwgeCk6CiAgICAgIiIiSW50ZXJuYWw7IHdyaXRlIGEgMzItYml0IGludCB0byBhIGZpbGUgaW4gbGl0dGxlLWVuZGlhbiBvcmRlci4iIiIKLSAgICBmLndyaXRlKGJ5dGVzKFt4ICAgICAgICAmIDB4ZmYsCisgICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKICAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAogICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCiAgICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQogCi1kZWYgcmVhZF9lbmNvZGluZyhmaWxlLCBkZWZhdWx0KToKLSAgICAiIiJSZWFkIHRoZSBmaXJzdCB0d28gbGluZXMgb2YgdGhlIGZpbGUgbG9va2luZyBmb3IgY29kaW5nOiB4eXp6eS4iIiIKLSAgICBmID0gb3BlbihmaWxlLCAicmIiKQotICAgIHRyeToKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6Ci0gICAgICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgbSA9IHJlLm1hdGNoKGJyIi4qXGJjb2Rpbmc6XHMqKFxTKylcYiIsIGxpbmUpCi0gICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIHJldHVybiBtLmdyb3VwKDEpLmRlY29kZSgiYXNjaWkiKQotICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgIGZpbmFsbHk6Ci0gICAgICAgIGYuY2xvc2UoKQotCi1kZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlKToKK2RlZiBjb21waWxlKGZpbGUsIGNmaWxlPU5vbmUsIGRmaWxlPU5vbmUsIGRvcmFpc2U9RmFsc2UsIG9wdGltaXplPS0xKToKICAgICAiIiJCeXRlLWNvbXBpbGUgb25lIFB5dGhvbiBzb3VyY2UgZmlsZSB0byBQeXRob24gYnl0ZWNvZGUuCiAKLSAgICBBcmd1bWVudHM6CisgICAgOnBhcmFtIGZpbGU6IFRoZSBzb3VyY2UgZmlsZSBuYW1lLgorICAgIDpwYXJhbSBjZmlsZTogVGhlIHRhcmdldCBieXRlIGNvbXBpbGVkIGZpbGUgbmFtZS4gIFdoZW4gbm90IGdpdmVuLCB0aGlzCisgICAgICAgIGRlZmF1bHRzIHRvIHRoZSBQRVAgMzE0NyBsb2NhdGlvbi4KKyAgICA6cGFyYW0gZGZpbGU6IFB1cnBvcnRlZCBmaWxlIG5hbWUsIGkuZS4gdGhlIGZpbGUgbmFtZSB0aGF0IHNob3dzIHVwIGluCisgICAgICAgIGVycm9yIG1lc3NhZ2VzLiAgRGVmYXVsdHMgdG8gdGhlIHNvdXJjZSBmaWxlIG5hbWUuCisgICAgOnBhcmFtIGRvcmFpc2U6IEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBhbiBleGNlcHRpb24gc2hvdWxkIGJlCisgICAgICAgIHJhaXNlZCB3aGVuIGEgY29tcGlsZSBlcnJvciBpcyBmb3VuZC4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgYW5kIHRoaXMKKyAgICAgICAgZmxhZyBpcyBzZXQgdG8gRmFsc2UsIGEgc3RyaW5nIGluZGljYXRpbmcgdGhlIG5hdHVyZSBvZiB0aGUgZXhjZXB0aW9uCisgICAgICAgIHdpbGwgYmUgcHJpbnRlZCwgYW5kIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0byB0aGUgY2FsbGVyLiBJZiBhbgorICAgICAgICBleGNlcHRpb24gb2NjdXJzIGFuZCB0aGlzIGZsYWcgaXMgc2V0IHRvIFRydWUsIGEgUHlDb21waWxlRXJyb3IKKyAgICAgICAgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorICAgIDpwYXJhbSBvcHRpbWl6ZTogVGhlIG9wdGltaXphdGlvbiBsZXZlbCBmb3IgdGhlIGNvbXBpbGVyLiAgVmFsaWQgdmFsdWVzCisgICAgICAgIGFyZSAtMSwgMCwgMSBhbmQgMi4gIEEgdmFsdWUgb2YgLTEgbWVhbnMgdG8gdXNlIHRoZSBvcHRpbWl6YXRpb24KKyAgICAgICAgbGV2ZWwgb2YgdGhlIGN1cnJlbnQgaW50ZXJwcmV0ZXIsIGFzIGdpdmVuIGJ5IC1PIGNvbW1hbmQgbGluZSBvcHRpb25zLgogCi0gICAgZmlsZTogICAgc291cmNlIGZpbGVuYW1lCi0gICAgY2ZpbGU6ICAgdGFyZ2V0IGZpbGVuYW1lOyBkZWZhdWx0cyB0byBzb3VyY2Ugd2l0aCAnYycgb3IgJ28nIGFwcGVuZGVkCi0gICAgICAgICAgICAgKCdjJyBub3JtYWxseSwgJ28nIGluIG9wdGltaXppbmcgbW9kZSwgZ2l2aW5nIC5weWMgb3IgLnB5bykKLSAgICBkZmlsZTogICBwdXJwb3J0ZWQgZmlsZW5hbWU7IGRlZmF1bHRzIHRvIHNvdXJjZSAodGhpcyBpcyB0aGUgZmlsZW5hbWUKLSAgICAgICAgICAgICB0aGF0IHdpbGwgc2hvdyB1cCBpbiBlcnJvciBtZXNzYWdlcykKLSAgICBkb3JhaXNlOiBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgYW4gZXhjZXB0aW9uIHNob3VsZCBiZQotICAgICAgICAgICAgIHJhaXNlZCB3aGVuIGEgY29tcGlsZSBlcnJvciBpcyBmb3VuZC4gSWYgYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICAgb2NjdXJzIGFuZCB0aGlzIGZsYWcgaXMgc2V0IHRvIEZhbHNlLCBhIHN0cmluZwotICAgICAgICAgICAgIGluZGljYXRpbmcgdGhlIG5hdHVyZSBvZiB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJpbnRlZCwKLSAgICAgICAgICAgICBhbmQgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRvIHRoZSBjYWxsZXIuIElmIGFuCi0gICAgICAgICAgICAgZXhjZXB0aW9uIG9jY3VycyBhbmQgdGhpcyBmbGFnIGlzIHNldCB0byBUcnVlLCBhCi0gICAgICAgICAgICAgUHlDb21waWxlRXJyb3IgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLgorICAgIDpyZXR1cm46IFBhdGggdG8gdGhlIHJlc3VsdGluZyBieXRlIGNvbXBpbGVkIGZpbGUuCiAKICAgICBOb3RlIHRoYXQgaXQgaXNuJ3QgbmVjZXNzYXJ5IHRvIGJ5dGUtY29tcGlsZSBQeXRob24gbW9kdWxlcyBmb3IKICAgICBleGVjdXRpb24gZWZmaWNpZW5jeSAtLSBQeXRob24gaXRzZWxmIGJ5dGUtY29tcGlsZXMgYSBtb2R1bGUgd2hlbgpAQCAtMTI2LDIwICsxMDcsMTYgQEAKICAgICBTZWUgY29tcGlsZWFsbC5weSBmb3IgYSBzY3JpcHQvbW9kdWxlIHRoYXQgdXNlcyB0aGlzIG1vZHVsZSB0bwogICAgIGJ5dGUtY29tcGlsZSBhbGwgaW5zdGFsbGVkIGZpbGVzIChvciBhbGwgZmlsZXMgaW4gc2VsZWN0ZWQKICAgICBkaXJlY3RvcmllcykuCi0KICAgICAiIiIKLSAgICBlbmNvZGluZyA9IHJlYWRfZW5jb2RpbmcoZmlsZSwgInV0Zi04IikKLSAgICBmID0gb3BlbihmaWxlLCAnVScsIGVuY29kaW5nPWVuY29kaW5nKQorICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlKSBhcyBmOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0aW1lc3RhbXAgPSBpbnQob3MuZnN0YXQoZi5maWxlbm8oKSkuc3RfbXRpbWUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHRpbWVzdGFtcCA9IGludChvcy5zdGF0KGZpbGUpLnN0X210aW1lKQorICAgICAgICBjb2Rlc3RyaW5nID0gZi5yZWFkKCkKICAgICB0cnk6Ci0gICAgICAgIHRpbWVzdGFtcCA9IGludChvcy5mc3RhdChmLmZpbGVubygpKS5zdF9tdGltZSkKLSAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgIHRpbWVzdGFtcCA9IGludChvcy5zdGF0KGZpbGUpLnN0X210aW1lKQotICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQotICAgIGYuY2xvc2UoKQotICAgIGlmIGNvZGVzdHJpbmcgYW5kIGNvZGVzdHJpbmdbLTFdICE9ICdcbic6Ci0gICAgICAgIGNvZGVzdHJpbmcgPSBjb2Rlc3RyaW5nICsgJ1xuJwotICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwnZXhlYycpCisgICAgICAgIGNvZGVvYmplY3QgPSBidWlsdGlucy5jb21waWxlKGNvZGVzdHJpbmcsIGRmaWxlIG9yIGZpbGUsICdleGVjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9b3B0aW1pemUpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CiAgICAgICAgIHB5X2V4YyA9IFB5Q29tcGlsZUVycm9yKGVyci5fX2NsYXNzX18sIGVyciwgZGZpbGUgb3IgZmlsZSkKICAgICAgICAgaWYgZG9yYWlzZToKQEAgLTE0OCwxNiArMTI1LDIzIEBACiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHB5X2V4Yy5tc2cgKyAnXG4nKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgaWYgY2ZpbGUgaXMgTm9uZToKLSAgICAgICAgY2ZpbGUgPSBmaWxlICsgKF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJykKLSAgICBmYyA9IG9wZW4oY2ZpbGUsICd3YicpCi0gICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgd3JfbG9uZyhmYywgdGltZXN0YW1wKQotICAgIG1hcnNoYWwuZHVtcChjb2Rlb2JqZWN0LCBmYykKLSAgICBmYy5mbHVzaCgpCi0gICAgZmMuc2VlaygwLCAwKQotICAgIGZjLndyaXRlKE1BR0lDKQotICAgIGZjLmNsb3NlKCkKLSAgICBzZXRfY3JlYXRvcl90eXBlKGNmaWxlKQorICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgorICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICB0cnk6CisgICAgICAgIG9zLm1ha2VkaXJzKG9zLnBhdGguZGlybmFtZShjZmlsZSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6CisgICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHJhaXNlCisgICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKKyAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCisgICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKKyAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQorICAgICAgICBmYy5mbHVzaCgpCisgICAgICAgIGZjLnNlZWsoMCwgMCkKKyAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgcmV0dXJuIGNmaWxlCiAKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSBzZXZlcmFsIHNvdXJjZSBmaWxlcy4KQEAgLTE2NiwxOSArMTUwLDM1IEBACiAgICAgbm90IHNwZWNpZmllZCkgYXJlIGNvbXBpbGVkIGFuZCB0aGUgcmVzdWx0aW5nIGJ5dGVjb2RlIGlzIGNhY2hlZAogICAgIGluIHRoZSBub3JtYWwgbWFubmVyLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzZWFyY2ggYSBkaXJlY3RvcnkKICAgICBzdHJ1Y3R1cmUgdG8gbG9jYXRlIHNvdXJjZSBmaWxlczsgaXQgb25seSBjb21waWxlcyBmaWxlcyBuYW1lZAotICAgIGV4cGxpY2l0bHkuCisgICAgZXhwbGljaXRseS4gIElmICctJyBpcyB0aGUgb25seSBwYXJhbWV0ZXIgaW4gYXJncywgdGhlIGxpc3Qgb2YKKyAgICBmaWxlcyBpcyB0YWtlbiBmcm9tIHN0YW5kYXJkIGlucHV0LgogCiAgICAgIiIiCiAgICAgaWYgYXJncyBpcyBOb25lOgogICAgICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCiAgICAgcnYgPSAwCi0gICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGNvbXBpbGUoZmlsZW5hbWUsIGRvcmFpc2U9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICMgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGF0IGxlYXN0IG9uZSBmYWlsdXJlCi0gICAgICAgICAgICBydiA9IDEKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZXJyLm1zZykKKyAgICBpZiBhcmdzID09IFsnLSddOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNvbXBpbGUoZmlsZW5hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBQeUNvbXBpbGVFcnJvciBhcyBlcnJvcjoKKyAgICAgICAgICAgICAgICBydiA9IDEKKyAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yLm1zZykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgIHJ2ID0gMQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IpCisgICAgZWxzZToKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGFyZ3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY29tcGlsZShmaWxlbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgICAgICMgcmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGF0IGxlYXN0IG9uZSBmYWlsdXJlCisgICAgICAgICAgICAgICAgcnYgPSAxCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShlcnJvci5tc2cpCiAgICAgcmV0dXJuIHJ2CiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvcHlkb2MucHkgYi9MaWIvcHlkb2MucHkKaW5kZXggOGNjMWFiZC4uMjM5MTAxM2UgMTAwNzU1Ci0tLSBhL0xpYi9weWRvYy5weQorKysgYi9MaWIvcHlkb2MucHkKQEAgLTEsNSArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzogbGF0aW4tMSAtKi0KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIkdlbmVyYXRlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIEhUTUwgb3IgdGV4dCBmb3IgaW50ZXJhY3RpdmUgdXNlLgogCiBJbiB0aGUgUHl0aG9uIGludGVycHJldGVyLCBkbyAiZnJvbSBweWRvYyBpbXBvcnQgaGVscCIgdG8gcHJvdmlkZSBvbmxpbmUKQEAgLTE2LDExICsxNSwxNyBAQAogUnVuICJweWRvYyAtayA8a2V5d29yZD4iIHRvIHNlYXJjaCBmb3IgYSBrZXl3b3JkIGluIHRoZSBzeW5vcHNpcyBsaW5lcwogb2YgYWxsIGF2YWlsYWJsZSBtb2R1bGVzLgogCi1SdW4gInB5ZG9jIC1wIDxwb3J0PiIgdG8gc3RhcnQgYW4gSFRUUCBzZXJ2ZXIgb24gYSBnaXZlbiBwb3J0IG9uIHRoZQotbG9jYWwgbWFjaGluZSB0byBnZW5lcmF0ZSBkb2N1bWVudGF0aW9uIHdlYiBwYWdlcy4KK1J1biAicHlkb2MgLXAgPHBvcnQ+IiB0byBzdGFydCBhbiBIVFRQIHNlcnZlciBvbiB0aGUgZ2l2ZW4gcG9ydCBvbiB0aGUKK2xvY2FsIG1hY2hpbmUuICBQb3J0IG51bWJlciAwIGNhbiBiZSB1c2VkIHRvIGdldCBhbiBhcmJpdHJhcnkgdW51c2VkIHBvcnQuCisKK1J1biAicHlkb2MgLWIiIHRvIHN0YXJ0IGFuIEhUVFAgc2VydmVyIG9uIGFuIGFyYml0cmFyeSB1bnVzZWQgcG9ydCBhbmQKK29wZW4gYSBXZWIgYnJvd3NlciB0byBpbnRlcmFjdGl2ZWx5IGJyb3dzZSBkb2N1bWVudGF0aW9uLiAgVGhlIC1wIG9wdGlvbgorY2FuIGJlIHVzZWQgd2l0aCB0aGUgLWIgb3B0aW9uIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSB0aGUgc2VydmVyIHBvcnQuCiAKIEZvciBwbGF0Zm9ybXMgd2l0aG91dCBhIGNvbW1hbmQgbGluZSwgInB5ZG9jIC1nIiBzdGFydHMgdGhlIEhUVFAgc2VydmVyCi1hbmQgYWxzbyBwb3BzIHVwIGEgbGl0dGxlIHdpbmRvdyBmb3IgY29udHJvbGxpbmcgaXQuCithbmQgYWxzbyBwb3BzIHVwIGEgbGl0dGxlIHdpbmRvdyBmb3IgY29udHJvbGxpbmcgaXQuICBUaGlzIG9wdGlvbiBpcworZGVwcmVjYXRlZCwgc2luY2UgdGhlIHNlcnZlciBjYW4gbm93IGJlIGNvbnRyb2xsZWQgZGlyZWN0bHkgZnJvbSBIVFRQCitjbGllbnRzLgogCiBSdW4gInB5ZG9jIC13IDxuYW1lPiIgdG8gd3JpdGUgb3V0IHRoZSBIVE1MIGRvY3VtZW50YXRpb24gZm9yIGEgbW9kdWxlCiB0byBhIGZpbGUgbmFtZWQgIjxuYW1lPi5odG1sIi4KQEAgLTUyLDEwICs1NywyMiBAQAogIyAgICAgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGNoYW5nZWQgd2l0aCBvcy5jaGRpcigpLCBhbiBpbmNvcnJlY3QKICMgICAgIHBhdGggd2lsbCBiZSBkaXNwbGF5ZWQuCiAKLWltcG9ydCBzeXMsIGltcCwgb3MsIHJlLCBpbnNwZWN0LCBidWlsdGlucywgcGtndXRpbAotZnJvbSByZXBybGliIGltcG9ydCBSZXByCi1mcm9tIHRyYWNlYmFjayBpbXBvcnQgZXh0cmFjdF90YiBhcyBfZXh0cmFjdF90YgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBpbXAKK2ltcG9ydCBpbworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBwa2d1dGlsCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCByZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB3YXJuaW5ncwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKK2Zyb20gcmVwcmxpYiBpbXBvcnQgUmVwcgorZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGV4dHJhY3RfdGIsIGZvcm1hdF9leGNlcHRpb25fb25seQorCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbW1vbiByb3V0aW5lcwogCiBkZWYgcGF0aGRpcnMoKToKQEAgLTE0OCwxNSArMTY1LDE5IEBACiAgICAgICAgICAgICBuby5hcHBlbmQoeCkKICAgICByZXR1cm4geWVzLCBubwogCi1kZWYgdmlzaWJsZW5hbWUobmFtZSwgYWxsPU5vbmUpOgorZGVmIHZpc2libGVuYW1lKG5hbWUsIGFsbD1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgIiIiRGVjaWRlIHdoZXRoZXIgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIGEgdmFyaWFibGUuIiIiCiAgICAgIyBDZXJ0YWluIHNwZWNpYWwgbmFtZXMgYXJlIHJlZHVuZGFudC4KICAgICBfaGlkZGVuX25hbWVzID0gKCdfX2J1aWx0aW5zX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX3BhdGhfXycsCiAgICAgICAgICAgICAgICAgICAgICAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdfX3Nsb3RzX18nLCAnX19wYWNrYWdlX18nLAotICAgICAgICAgICAgICAgICAgICAgJ19fYXV0aG9yX18nLCAnX19jcmVkaXRzX18nLCAnX19kYXRlX18nLCAnX192ZXJzaW9uX18nKQorICAgICAgICAgICAgICAgICAgICAgJ19fY2FjaGVkX18nLCAnX19hdXRob3JfXycsICdfX2NyZWRpdHNfXycsICdfX2RhdGVfXycsCisgICAgICAgICAgICAgICAgICAgICAnX192ZXJzaW9uX18nKQogICAgIGlmIG5hbWUgaW4gX2hpZGRlbl9uYW1lczogcmV0dXJuIDAKICAgICAjIFByaXZhdGUgbmFtZXMgYXJlIGhpZGRlbiwgYnV0IHNwZWNpYWwgbmFtZXMgYXJlIGRpc3BsYXllZC4KICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ19fJykgYW5kIG5hbWUuZW5kc3dpdGgoJ19fJyk6IHJldHVybiAxCisgICAgIyBOYW1lZHR1cGxlcyBoYXZlIHB1YmxpYyBmaWVsZHMgYW5kIG1ldGhvZHMgd2l0aCBhIHNpbmdsZSBsZWFkaW5nIHVuZGVyc2NvcmUKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ18nKSBhbmQgaGFzYXR0cihvYmosICdfZmllbGRzJyk6CisgICAgICAgIHJldHVybiBUcnVlCiAgICAgaWYgYWxsIGlzIG5vdCBOb25lOgogICAgICAgICAjIG9ubHkgZG9jdW1lbnQgdGhhdCB3aGljaCB0aGUgcHJvZ3JhbW1lciBleHBvcnRlZCBpbiBfX2FsbF9fCiAgICAgICAgIHJldHVybiBuYW1lIGluIGFsbApAQCAtMjg1LDcgKzMwNiw3IEBACiAgICAgICAgIGVsaWYgZXhjIGlzIFN5bnRheEVycm9yOgogICAgICAgICAgICAgIyBBIFN5bnRheEVycm9yIG9jY3VycmVkIGJlZm9yZSB3ZSBjb3VsZCBleGVjdXRlIHRoZSBtb2R1bGUuCiAgICAgICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydCh2YWx1ZS5maWxlbmFtZSwgaW5mbykKLSAgICAgICAgZWxpZiBleGMgaXMgSW1wb3J0RXJyb3IgYW5kIF9leHRyYWN0X3RiKHRiKVstMV1bMl09PSdzYWZlaW1wb3J0JzoKKyAgICAgICAgZWxpZiBleGMgaXMgSW1wb3J0RXJyb3IgYW5kIGV4dHJhY3RfdGIodGIpWy0xXVsyXT09J3NhZmVpbXBvcnQnOgogICAgICAgICAgICAgIyBUaGUgaW1wb3J0IGVycm9yIG9jY3VycmVkIGRpcmVjdGx5IGluIHRoaXMgZnVuY3Rpb24sCiAgICAgICAgICAgICAjIHdoaWNoIG1lYW5zIHRoZXJlIGlzIG5vIHN1Y2ggbW9kdWxlIGluIHRoZSBwYXRoLgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTUxMyw2ICs1MzQsMTAgQEAKICAgICAgICAgICAgIHRleHQgPSBuYW1lCiAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJXMiPiVzPC9hPicgJSAodXJsLCB0ZXh0KQogCisgICAgZGVmIGZpbGVsaW5rKHNlbGYsIHVybCwgcGF0aCk6CisgICAgICAgICIiIk1ha2UgYSBsaW5rIHRvIHNvdXJjZSBmaWxlLiIiIgorICAgICAgICByZXR1cm4gJzxhIGhyZWY9ImZpbGU6JXMiPiVzPC9hPicgJSAodXJsLCBwYXRoKQorCiAgICAgZGVmIG1hcmt1cChzZWxmLCB0ZXh0LCBlc2NhcGU9Tm9uZSwgZnVuY3M9e30sIGNsYXNzZXM9e30sIG1ldGhvZHM9e30pOgogICAgICAgICAiIiJNYXJrIHVwIHNvbWUgcGxhaW4gdGV4dCwgZ2l2ZW4gYSBjb250ZXh0IG9mIHN5bWJvbHMgdG8gbG9vayBmb3IuCiAgICAgICAgIEVhY2ggY29udGV4dCBkaWN0aW9uYXJ5IG1hcHMgb2JqZWN0IG5hbWVzIHRvIGFuY2hvciBuYW1lcy4iIiIKQEAgLTU5MSw3ICs2MTYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgKICAgICAgICAgICAgICAgICB1cmwgPSBudHVybDJwYXRoLnBhdGhuYW1lMnVybChwYXRoKQotICAgICAgICAgICAgZmlsZWxpbmsgPSAnPGEgaHJlZj0iZmlsZTolcyI+JXM8L2E+JyAlICh1cmwsIHBhdGgpCisgICAgICAgICAgICBmaWxlbGluayA9IHNlbGYuZmlsZWxpbmsodXJsLCBwYXRoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgZmlsZWxpbmsgPSAnKGJ1aWx0LWluKScKICAgICAgICAgaW5mbyA9IFtdCkBAIC02MjAsNyArNjQ1LDcgQEAKICAgICAgICAgICAgICMgaWYgX19hbGxfXyBleGlzdHMsIGJlbGlldmUgaXQuICBPdGhlcndpc2UgdXNlIG9sZCBoZXVyaXN0aWMuCiAgICAgICAgICAgICBpZiAoYWxsIGlzIG5vdCBOb25lIG9yCiAgICAgICAgICAgICAgICAgKGluc3BlY3QuZ2V0bW9kdWxlKHZhbHVlKSBvciBvYmplY3QpIGlzIG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgaWYgdmlzaWJsZW5hbWUoa2V5LCBhbGwpOgorICAgICAgICAgICAgICAgIGlmIHZpc2libGVuYW1lKGtleSwgYWxsLCBvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGNkaWN0W2tleV0gPSBjZGljdFt2YWx1ZV0gPSAnIycgKyBrZXkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gY2xhc3NlczoKQEAgLTYzNiwxMyArNjYxLDEzIEBACiAgICAgICAgICAgICAjIGlmIF9fYWxsX18gZXhpc3RzLCBiZWxpZXZlIGl0LiAgT3RoZXJ3aXNlIHVzZSBvbGQgaGV1cmlzdGljLgogICAgICAgICAgICAgaWYgKGFsbCBpcyBub3QgTm9uZSBvcgogICAgICAgICAgICAgICAgIGluc3BlY3QuaXNidWlsdGluKHZhbHVlKSBvciBpbnNwZWN0LmdldG1vZHVsZSh2YWx1ZSkgaXMgb2JqZWN0KToKLSAgICAgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCk6CisgICAgICAgICAgICAgICAgaWYgdmlzaWJsZW5hbWUoa2V5LCBhbGwsIG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCiAgICAgICAgICAgICAgICAgICAgIGZkaWN0W2tleV0gPSAnIy0nICsga2V5CiAgICAgICAgICAgICAgICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbih2YWx1ZSk6IGZkaWN0W3ZhbHVlXSA9IGZkaWN0W2tleV0KICAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGluc3BlY3QuZ2V0bWVtYmVycyhvYmplY3QsIGlzZGF0YSk6Ci0gICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCk6CisgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCwgb2JqZWN0KToKICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCiAKICAgICAgICAgZG9jID0gc2VsZi5tYXJrdXAoZ2V0ZG9jKG9iamVjdCksIHNlbGYucHJlZm9ybWF0LCBmZGljdCwgY2RpY3QpCkBAIC03NjcsNyArNzkyLDcgQEAKIAogICAgICAgICBhdHRycyA9IFsobmFtZSwga2luZCwgY2xzLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGtpbmQsIGNscywgdmFsdWUgaW4gY2xhc3NpZnlfY2xhc3NfYXR0cnMob2JqZWN0KQotICAgICAgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShuYW1lKV0KKyAgICAgICAgICAgICAgICAgaWYgdmlzaWJsZW5hbWUobmFtZSwgb2JqPW9iamVjdCldCiAKICAgICAgICAgbWRpY3QgPSB7fQogICAgICAgICBmb3Iga2V5LCBraW5kLCBob21lY2xzLCB2YWx1ZSBpbiBhdHRyczoKQEAgLTk3OCw3ICsxMDAzLDcgQEAKIAogICAgIGRlZiBib2xkKHNlbGYsIHRleHQpOgogICAgICAgICAiIiJGb3JtYXQgYSBzdHJpbmcgaW4gYm9sZCBieSBvdmVyc3RyaWtpbmcuIiIiCi0gICAgICAgIHJldHVybiAnJy5qb2luKG1hcChsYW1iZGEgY2g6IGNoICsgJ1xiJyArIGNoLCB0ZXh0KSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oY2ggKyAnXGInICsgY2ggZm9yIGNoIGluIHRleHQpCiAKICAgICBkZWYgaW5kZW50KHNlbGYsIHRleHQsIHByZWZpeD0nICAgICcpOgogICAgICAgICAiIiJJbmRlbnQgdGV4dCBieSBwcmVwZW5kaW5nIGEgZ2l2ZW4gcHJlZml4IHRvIGVhY2ggbGluZS4iIiIKQEAgLTEwMDIsNyArMTAyNyw3IEBACiAgICAgICAgICAgICAgICAgYywgYmFzZXMgPSBlbnRyeQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHByZWZpeCArIGNsYXNzbmFtZShjLCBtb2RuYW1lKQogICAgICAgICAgICAgICAgIGlmIGJhc2VzIGFuZCBiYXNlcyAhPSAocGFyZW50LCk6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmVudHMgPSBtYXAobGFtYmRhIGMsIG09bW9kbmFtZTogY2xhc3NuYW1lKGMsIG0pLCBiYXNlcykKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50cyA9IChjbGFzc25hbWUoYywgbW9kbmFtZSkgZm9yIGMgaW4gYmFzZXMpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICcoJXMpJyAlICcsICcuam9pbihwYXJlbnRzKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArICdcbicKICAgICAgICAgICAgIGVsaWYgdHlwZShlbnRyeSkgaXMgdHlwZShbXSk6CkBAIC0xMDM0LDE4ICsxMDU5LDE4IEBACiAgICAgICAgICAgICAjIGlmIF9fYWxsX18gZXhpc3RzLCBiZWxpZXZlIGl0LiAgT3RoZXJ3aXNlIHVzZSBvbGQgaGV1cmlzdGljLgogICAgICAgICAgICAgaWYgKGFsbCBpcyBub3QgTm9uZQogICAgICAgICAgICAgICAgIG9yIChpbnNwZWN0LmdldG1vZHVsZSh2YWx1ZSkgb3Igb2JqZWN0KSBpcyBvYmplY3QpOgotICAgICAgICAgICAgICAgIGlmIHZpc2libGVuYW1lKGtleSwgYWxsKToKKyAgICAgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCwgb2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoKGtleSwgdmFsdWUpKQogICAgICAgICBmdW5jcyA9IFtdCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGluc3BlY3QuZ2V0bWVtYmVycyhvYmplY3QsIGluc3BlY3QuaXNyb3V0aW5lKToKICAgICAgICAgICAgICMgaWYgX19hbGxfXyBleGlzdHMsIGJlbGlldmUgaXQuICBPdGhlcndpc2UgdXNlIG9sZCBoZXVyaXN0aWMuCiAgICAgICAgICAgICBpZiAoYWxsIGlzIG5vdCBOb25lIG9yCiAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc2J1aWx0aW4odmFsdWUpIG9yIGluc3BlY3QuZ2V0bW9kdWxlKHZhbHVlKSBpcyBvYmplY3QpOgotICAgICAgICAgICAgICAgIGlmIHZpc2libGVuYW1lKGtleSwgYWxsKToKKyAgICAgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCwgb2JqZWN0KToKICAgICAgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgZGF0YSA9IFtdCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGluc3BlY3QuZ2V0bWVtYmVycyhvYmplY3QsIGlzZGF0YSk6Ci0gICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCk6CisgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShrZXksIGFsbCwgb2JqZWN0KToKICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCiAKICAgICAgICAgbW9kcGtncyA9IFtdCkBAIC0xMTg0LDcgKzEyMDksNyBAQAogCiAgICAgICAgIGF0dHJzID0gWyhuYW1lLCBraW5kLCBjbHMsIHZhbHVlKQogICAgICAgICAgICAgICAgICBmb3IgbmFtZSwga2luZCwgY2xzLCB2YWx1ZSBpbiBjbGFzc2lmeV9jbGFzc19hdHRycyhvYmplY3QpCi0gICAgICAgICAgICAgICAgIGlmIHZpc2libGVuYW1lKG5hbWUpXQorICAgICAgICAgICAgICAgICBpZiB2aXNpYmxlbmFtZShuYW1lLCBvYmo9b2JqZWN0KV0KIAogICAgICAgICB3aGlsZSBhdHRyczoKICAgICAgICAgICAgIGlmIG1ybzoKQEAgLTEzMTAsNiArMTMzNSwxMSBAQAogICAgICAgICAgICAgbGluZSArPSAnXG4nICsgc2VsZi5pbmRlbnQoc3RyKGRvYykpCiAgICAgICAgIHJldHVybiBsaW5lCiAKK2NsYXNzIF9QbGFpblRleHREb2MoVGV4dERvYyk6CisgICAgIiIiU3ViY2xhc3Mgb2YgVGV4dERvYyB3aGljaCBvdmVycmlkZXMgc3RyaW5nIHN0eWxpbmciIiIKKyAgICBkZWYgYm9sZChzZWxmLCB0ZXh0KToKKyAgICAgICAgcmV0dXJuIHRleHQKKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBpbnRlcmZhY2VzCiAKIGRlZiBwYWdlcih0ZXh0KToKQEAgLTE0NjQsNiArMTQ5NCw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnRlcmZhY2UKIAogdGV4dCA9IFRleHREb2MoKQorcGxhaW50ZXh0ID0gX1BsYWluVGV4dERvYygpCiBodG1sID0gSFRNTERvYygpCiAKIGRlZiByZXNvbHZlKHRoaW5nLCBmb3JjZWxvYWQ9MCk6CkBAIC0xNDc2LDggKzE1MDcsMTEgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gdGhpbmcsIGdldGF0dHIodGhpbmcsICdfX25hbWVfXycsIE5vbmUpCiAKLWRlZiByZW5kZXJfZG9jKHRoaW5nLCB0aXRsZT0nUHl0aG9uIExpYnJhcnkgRG9jdW1lbnRhdGlvbjogJXMnLCBmb3JjZWxvYWQ9MCk6CitkZWYgcmVuZGVyX2RvYyh0aGluZywgdGl0bGU9J1B5dGhvbiBMaWJyYXJ5IERvY3VtZW50YXRpb246ICVzJywgZm9yY2Vsb2FkPTAsCisgICAgICAgIHJlbmRlcmVyPU5vbmUpOgogICAgICIiIlJlbmRlciB0ZXh0IGRvY3VtZW50YXRpb24sIGdpdmVuIGFuIG9iamVjdCBvciBhIHBhdGggdG8gYW4gb2JqZWN0LiIiIgorICAgIGlmIHJlbmRlcmVyIGlzIE5vbmU6CisgICAgICAgIHJlbmRlcmVyID0gdGV4dAogICAgIG9iamVjdCwgbmFtZSA9IHJlc29sdmUodGhpbmcsIGZvcmNlbG9hZCkKICAgICBkZXNjID0gZGVzY3JpYmUob2JqZWN0KQogICAgIG1vZHVsZSA9IGluc3BlY3QuZ2V0bW9kdWxlKG9iamVjdCkKQEAgLTE0OTYsMTIgKzE1MzAsMTYgQEAKICAgICAgICAgIyBkb2N1bWVudCBpdHMgYXZhaWxhYmxlIG1ldGhvZHMgaW5zdGVhZCBvZiBpdHMgdmFsdWUuCiAgICAgICAgIG9iamVjdCA9IHR5cGUob2JqZWN0KQogICAgICAgICBkZXNjICs9ICcgb2JqZWN0JwotICAgIHJldHVybiB0aXRsZSAlIGRlc2MgKyAnXG5cbicgKyB0ZXh0LmRvY3VtZW50KG9iamVjdCwgbmFtZSkKKyAgICByZXR1cm4gdGl0bGUgJSBkZXNjICsgJ1xuXG4nICsgcmVuZGVyZXIuZG9jdW1lbnQob2JqZWN0LCBuYW1lKQogCi1kZWYgZG9jKHRoaW5nLCB0aXRsZT0nUHl0aG9uIExpYnJhcnkgRG9jdW1lbnRhdGlvbjogJXMnLCBmb3JjZWxvYWQ9MCk6CitkZWYgZG9jKHRoaW5nLCB0aXRsZT0nUHl0aG9uIExpYnJhcnkgRG9jdW1lbnRhdGlvbjogJXMnLCBmb3JjZWxvYWQ9MCwKKyAgICAgICAgb3V0cHV0PU5vbmUpOgogICAgICIiIkRpc3BsYXkgdGV4dCBkb2N1bWVudGF0aW9uLCBnaXZlbiBhbiBvYmplY3Qgb3IgYSBwYXRoIHRvIGFuIG9iamVjdC4iIiIKICAgICB0cnk6Ci0gICAgICAgIHBhZ2VyKHJlbmRlcl9kb2ModGhpbmcsIHRpdGxlLCBmb3JjZWxvYWQpKQorICAgICAgICBpZiBvdXRwdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHBhZ2VyKHJlbmRlcl9kb2ModGhpbmcsIHRpdGxlLCBmb3JjZWxvYWQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKHJlbmRlcl9kb2ModGhpbmcsIHRpdGxlLCBmb3JjZWxvYWQsIHBsYWludGV4dCkpCiAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRXJyb3JEdXJpbmdJbXBvcnQpIGFzIHZhbHVlOgogICAgICAgICBwcmludCh2YWx1ZSkKIApAQCAtMTc2MSw5ICsxNzk5LDkgQEAKICAgICAgICAgICAgICAgICBkb2MoZXZhbChyZXF1ZXN0KSwgJ0hlbHAgb24gJXM6JykKICAgICAgICAgICAgIGVsaWYgcmVxdWVzdCBpbiBzZWxmLmtleXdvcmRzOiBzZWxmLnNob3d0b3BpYyhyZXF1ZXN0KQogICAgICAgICAgICAgZWxpZiByZXF1ZXN0IGluIHNlbGYudG9waWNzOiBzZWxmLnNob3d0b3BpYyhyZXF1ZXN0KQotICAgICAgICAgICAgZWxpZiByZXF1ZXN0OiBkb2MocmVxdWVzdCwgJ0hlbHAgb24gJXM6JykKKyAgICAgICAgICAgIGVsaWYgcmVxdWVzdDogZG9jKHJlcXVlc3QsICdIZWxwIG9uICVzOicsIG91dHB1dD1zZWxmLl9vdXRwdXQpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShyZXF1ZXN0LCBIZWxwZXIpOiBzZWxmKCkKLSAgICAgICAgZWxzZTogZG9jKHJlcXVlc3QsICdIZWxwIG9uICVzOicpCisgICAgICAgIGVsc2U6IGRvYyhyZXF1ZXN0LCAnSGVscCBvbiAlczonLCBvdXRwdXQ9c2VsZi5fb3V0cHV0KQogICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4nKQogCiAgICAgZGVmIGludHJvKHNlbGYpOgpAQCAtMTg0NCwxMiArMTg4MiwzOSBAQAogICAgICAgICBpZiBtb3JlX3hyZWZzOgogICAgICAgICAgICAgeHJlZnMgPSAoeHJlZnMgb3IgJycpICsgJyAnICsgbW9yZV94cmVmcwogICAgICAgICBpZiB4cmVmczoKLSAgICAgICAgICAgIGltcG9ydCBpbywgZm9ybWF0dGVyCisgICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCiAgICAgICAgICAgICBidWZmZXIgPSBpby5TdHJpbmdJTygpCiAgICAgICAgICAgICBmb3JtYXR0ZXIuRHVtYldyaXRlcihidWZmZXIpLnNlbmRfZmxvd2luZ19kYXRhKAogICAgICAgICAgICAgICAgICdSZWxhdGVkIGhlbHAgdG9waWNzOiAnICsgJywgJy5qb2luKHhyZWZzLnNwbGl0KCkpICsgJ1xuJykKICAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbiVzXG4nICUgYnVmZmVyLmdldHZhbHVlKCkpCiAKKyAgICBkZWYgX2dldHRvcGljKHNlbGYsIHRvcGljLCBtb3JlX3hyZWZzPScnKToKKyAgICAgICAgIiIiUmV0dXJuIHVuYnVmZmVyZWQgdHVwbGUgb2YgKHRvcGljLCB4cmVmcykuCisKKyAgICAgICAgSWYgYW4gZXJyb3Igb2NjdXJzIGhlcmUsIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0IGFuZCBkaXNwbGF5ZWQgYnkKKyAgICAgICAgdGhlIHVybCBoYW5kbGVyLgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gZHVwbGljYXRlcyB0aGUgc2hvd3RvcGljIG1ldGhvZCBidXQgcmV0dXJucyBpdHMKKyAgICAgICAgcmVzdWx0IGRpcmVjdGx5IHNvIGl0IGNhbiBiZSBmb3JtYXR0ZWQgZm9yIGRpc3BsYXkgaW4gYW4gaHRtbCBwYWdlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHB5ZG9jX2RhdGEudG9waWNzCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybignJycKK1NvcnJ5LCB0b3BpYyBhbmQga2V5d29yZCBkb2N1bWVudGF0aW9uIGlzIG5vdCBhdmFpbGFibGUgYmVjYXVzZSB0aGUKK21vZHVsZSAicHlkb2NfZGF0YS50b3BpY3MiIGNvdWxkIG5vdCBiZSBmb3VuZC4KKycnJyAsICcnKQorICAgICAgICB0YXJnZXQgPSBzZWxmLnRvcGljcy5nZXQodG9waWMsIHNlbGYua2V5d29yZHMuZ2V0KHRvcGljKSkKKyAgICAgICAgaWYgbm90IHRhcmdldDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIHRvcGljJykKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0YXJnZXQsIHN0cik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0dG9waWModGFyZ2V0LCBtb3JlX3hyZWZzKQorICAgICAgICBsYWJlbCwgeHJlZnMgPSB0YXJnZXQKKyAgICAgICAgZG9jID0gcHlkb2NfZGF0YS50b3BpY3MudG9waWNzW2xhYmVsXQorICAgICAgICBpZiBtb3JlX3hyZWZzOgorICAgICAgICAgICAgeHJlZnMgPSAoeHJlZnMgb3IgJycpICsgJyAnICsgbW9yZV94cmVmcworICAgICAgICByZXR1cm4gZG9jLCB4cmVmcworCiAgICAgZGVmIHNob3dzeW1ib2woc2VsZiwgc3ltYm9sKToKICAgICAgICAgdGFyZ2V0ID0gc2VsZi5zeW1ib2xzW3N5bWJvbF0KICAgICAgICAgdG9waWMsIF8sIHhyZWZzID0gdGFyZ2V0LnBhcnRpdGlvbignICcpCkBAIC0xOTMxLDYgKzE5OTYsMTUgQEAKICAgICAgICAgZm9yIGltcG9ydGVyLCBtb2RuYW1lLCBpc3BrZyBpbiBwa2d1dGlsLndhbGtfcGFja2FnZXMob25lcnJvcj1vbmVycm9yKToKICAgICAgICAgICAgIGlmIHNlbGYucXVpdDoKICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAjIFhYWCBTa2lwcGluZyB0aGlzIGZpbGUgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZworICAgICAgICAgICAgIyB0aGF0IGNhdXNlcyBweXRob24gdG8gY3Jhc2ggd2l0aCBhIHNlZ2ZhdWx0LgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTMxOQorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUT0RPIFJlbW92ZSB0aGlzIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgICAgIGlmIG1vZG5hbWUgaW4geyd0ZXN0LmJhZHN5bnRheF9wZXAzMTIwJywgJ2JhZHN5bnRheF9wZXAzMTIwJ306CisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgaWYga2V5IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgY2FsbGJhY2soTm9uZSwgbW9kbmFtZSwgJycpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMTk0Niw3ICsyMDIwLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9uZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lcnJvcihtb2RuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGlvCiAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzb3VyY2Vfc3lub3BzaXMoaW8uU3RyaW5nSU8oc291cmNlKSkgb3IgJycKICAgICAgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdnZXRfZmlsZW5hbWUnKToKICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZG5hbWUpCkBAIC0xOTc2LDE2ICsyMDQ5LDE4IEBACiAgICAgICAgIHByaW50KG1vZG5hbWUsIGRlc2MgYW5kICctICcgKyBkZXNjKQogICAgIGRlZiBvbmVycm9yKG1vZG5hbWUpOgogICAgICAgICBwYXNzCi0gICAgdHJ5OiBpbXBvcnQgd2FybmluZ3MKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6IHBhc3MKLSAgICBlbHNlOiB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJykgIyBpZ25vcmUgcHJvYmxlbXMgZHVyaW5nIGltcG9ydAotICAgIE1vZHVsZVNjYW5uZXIoKS5ydW4oY2FsbGJhY2ssIGtleSwgb25lcnJvcj1vbmVycm9yKQorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScpICMgaWdub3JlIHByb2JsZW1zIGR1cmluZyBpbXBvcnQKKyAgICAgICAgTW9kdWxlU2Nhbm5lcigpLnJ1bihjYWxsYmFjaywga2V5LCBvbmVycm9yPW9uZXJyb3IpCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHdlYiBicm93c2VyIGludGVyZmFjZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2ViIGJyb3dzZXIgaW50ZXJmYWNlCiAKIGRlZiBzZXJ2ZShwb3J0LCBjYWxsYmFjaz1Ob25lLCBjb21wbGV0ZXI9Tm9uZSk6CiAgICAgaW1wb3J0IGh0dHAuc2VydmVyLCBlbWFpbC5tZXNzYWdlLCBzZWxlY3QKIAorICAgIG1zZyA9ICd0aGUgcHlkb2Muc2VydmUoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkJworICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKwogICAgIGNsYXNzIERvY0hhbmRsZXIoaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAgICAgICAgIGRlZiBzZW5kX2RvY3VtZW50KHNlbGYsIHRpdGxlLCBjb250ZW50cyk6CiAgICAgICAgICAgICB0cnk6CkBAIC0yMDMzLDggKzIxMDgsOCBAQAogCiAgICAgY2xhc3MgRG9jU2VydmVyKGh0dHAuc2VydmVyLkhUVFBTZXJ2ZXIpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY2FsbGJhY2spOgotICAgICAgICAgICAgaG9zdCA9IChzeXMucGxhdGZvcm0gPT0gJ21hYycpIGFuZCAnMTI3LjAuMC4xJyBvciAnbG9jYWxob3N0JwotICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKCcnLCBwb3J0KQorICAgICAgICAgICAgaG9zdCA9ICdsb2NhbGhvc3QnCisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoaG9zdCwgcG9ydCkKICAgICAgICAgICAgIHNlbGYudXJsID0gJ2h0dHA6Ly8lczolZC8nICUgKGhvc3QsIHBvcnQpCiAgICAgICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKICAgICAgICAgICAgIHNlbGYuYmFzZS5fX2luaXRfXyhzZWxmLCBzZWxmLmFkZHJlc3MsIHNlbGYuaGFuZGxlcikKQEAgLTIwNDUsNiArMjEyMCw3IEBACiAgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgogICAgICAgICAgICAgICAgIHJkLCB3ciwgZXggPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNvY2tldC5maWxlbm8oKV0sIFtdLCBbXSwgMSkKICAgICAgICAgICAgICAgICBpZiByZDogc2VsZi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCiAKICAgICAgICAgZGVmIHNlcnZlcl9hY3RpdmF0ZShzZWxmKToKICAgICAgICAgICAgIHNlbGYuYmFzZS5zZXJ2ZXJfYWN0aXZhdGUoc2VsZikKQEAgLTIwNjQsNyArMjE0MCwxMiBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBncmFwaGljYWwgaW50ZXJmYWNlCiAKIGRlZiBndWkoKToKLSAgICAiIiJHcmFwaGljYWwgaW50ZXJmYWNlIChzdGFydHMgd2ViIHNlcnZlciBhbmQgcG9wcyB1cCBhIGNvbnRyb2wgd2luZG93KS4iIiIKKyAgICAiIiJHcmFwaGljYWwgaW50ZXJmYWNlIChzdGFydHMgV2ViIHNlcnZlciBhbmQgcG9wcyB1cCBhIGNvbnRyb2wgd2luZG93KS4iIiIKKworICAgIG1zZyA9ICgndGhlIHB5ZG9jLmd1aSgpIGZ1bmN0aW9uIGFuZCAicHlkb2MgLWciIG9wdGlvbiBhcmUgZGVwcmVjYXRlZFxuJywKKyAgICAgICAgICAgJ3VzZSAicHlkb2MuYnJvd3NlKCkgZnVuY3Rpb24gYW5kICJweWRvYyAtYiIgb3B0aW9uIGluc3RlYWQuJykKKyAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisKICAgICBjbGFzcyBHVUk6CiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aW5kb3csIHBvcnQ9NzQ2NCk6CiAgICAgICAgICAgICBzZWxmLndpbmRvdyA9IHdpbmRvdwpAQCAtMjE0NCwxOSArMjIyNSw4IEBACiAKICAgICAgICAgZGVmIG9wZW4oc2VsZiwgZXZlbnQ9Tm9uZSwgdXJsPU5vbmUpOgogICAgICAgICAgICAgdXJsID0gdXJsIG9yIHNlbGYuc2VydmVyLnVybAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB3ZWJicm93c2VyCi0gICAgICAgICAgICAgICAgd2ViYnJvd3Nlci5vcGVuKHVybCkKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjogIyBwcmUtd2ViYnJvd3Nlci5weSBjb21wYXRpYmlsaXR5Ci0gICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgnc3RhcnQgIiVzIicgJSB1cmwpCi0gICAgICAgICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ21hYyc6Ci0gICAgICAgICAgICAgICAgICAgIHRyeTogaW1wb3J0IGljCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICBlbHNlOiBpYy5sYXVuY2h1cmwodXJsKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gb3Muc3lzdGVtKCduZXRzY2FwZSAtcmVtb3RlICJvcGVuVVJMKCVzKSIgJicgJSB1cmwpCi0gICAgICAgICAgICAgICAgICAgIGlmIHJjOiBvcy5zeXN0ZW0oJ25ldHNjYXBlICIlcyIgJicgJSB1cmwpCisgICAgICAgICAgICBpbXBvcnQgd2ViYnJvd3NlcgorICAgICAgICAgICAgd2ViYnJvd3Nlci5vcGVuKHVybCkKIAogICAgICAgICBkZWYgcXVpdChzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyOgpAQCAtMjI0OCw2ICsyMzE4LDQ0NCBAQAogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgcGFzcwogCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGVuaGFuY2VkIFdlYiBicm93c2VyIGludGVyZmFjZQorCitkZWYgX3N0YXJ0X3NlcnZlcih1cmxoYW5kbGVyLCBwb3J0KToKKyAgICAiIiJTdGFydCBhbiBIVFRQIHNlcnZlciB0aHJlYWQgb24gYSBzcGVjaWZpYyBwb3J0LgorCisgICAgU3RhcnQgYW4gSFRNTC90ZXh0IHNlcnZlciB0aHJlYWQsIHNvIEhUTUwgb3IgdGV4dCBkb2N1bWVudHMgY2FuIGJlCisgICAgYnJvd3NlZCBkeW5hbWljYWxseSBhbmQgaW50ZXJhY3RpdmVseSB3aXRoIGEgV2ViIGJyb3dzZXIuICBFeGFtcGxlIHVzZToKKworICAgICAgICA+Pj4gaW1wb3J0IHRpbWUKKyAgICAgICAgPj4+IGltcG9ydCBweWRvYworCisgICAgICAgIERlZmluZSBhIFVSTCBoYW5kbGVyLiAgVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGNsaWVudCBpcyBhc2tpbmcKKyAgICAgICAgZm9yLCBjaGVjayB0aGUgVVJMIGFuZCBjb250ZW50X3R5cGUuCisKKyAgICAgICAgVGhlbiBnZXQgb3IgZ2VuZXJhdGUgc29tZSB0ZXh0IG9yIEhUTUwgY29kZSBhbmQgcmV0dXJuIGl0LgorCisgICAgICAgID4+PiBkZWYgbXlfdXJsX2hhbmRsZXIodXJsLCBjb250ZW50X3R5cGUpOgorICAgICAgICAuLi4gICAgIHRleHQgPSAndGhlIFVSTCBzZW50IHdhczogKCVzLCAlcyknICUgKHVybCwgY29udGVudF90eXBlKQorICAgICAgICAuLi4gICAgIHJldHVybiB0ZXh0CisKKyAgICAgICAgU3RhcnQgc2VydmVyIHRocmVhZCBvbiBwb3J0IDAuCisgICAgICAgIElmIHlvdSB1c2UgcG9ydCAwLCB0aGUgc2VydmVyIHdpbGwgcGljayBhIHJhbmRvbSBwb3J0IG51bWJlci4KKyAgICAgICAgWW91IGNhbiB0aGVuIHVzZSBzZXJ2ZXJ0aHJlYWQucG9ydCB0byBnZXQgdGhlIHBvcnQgbnVtYmVyLgorCisgICAgICAgID4+PiBwb3J0ID0gMAorICAgICAgICA+Pj4gc2VydmVydGhyZWFkID0gcHlkb2MuX3N0YXJ0X3NlcnZlcihteV91cmxfaGFuZGxlciwgcG9ydCkKKworICAgICAgICBDaGVjayB0aGF0IHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IHN0YXJ0ZWQuICBJZiBpdCBpcywgb3BlbiBicm93c2VyCisgICAgICAgIGFuZCBnZXQgZmlyc3QgcGFnZS4gIFVzZSBzZXJ2ZXJ0aHJlYWQudXJsIGFzIHRoZSBzdGFydGluZyBwYWdlLgorCisgICAgICAgID4+PiBpZiBzZXJ2ZXJ0aHJlYWQuc2VydmluZzoKKyAgICAgICAgLi4uICAgIGltcG9ydCB3ZWJicm93c2VyCisKKyAgICAgICAgVGhlIG5leHQgdHdvIGxpbmVzIGFyZSBjb21tZW50ZWQgb3V0IHNvIGEgYnJvd3NlciBkb2Vzbid0IG9wZW4gaWYKKyAgICAgICAgZG9jdGVzdCBpcyBydW4gb24gdGhpcyBtb2R1bGUuCisKKyAgICAgICAgIy4uLiAgICB3ZWJicm93c2VyLm9wZW4oc2VydmVydGhyZWFkLnVybCkKKyAgICAgICAgI1RydWUKKworICAgICAgICBMZXQgdGhlIHNlcnZlciBkbyBpdHMgdGhpbmcuIFdlIGp1c3QgbmVlZCB0byBtb25pdG9yIGl0cyBzdGF0dXMuCisgICAgICAgIFVzZSB0aW1lLnNsZWVwIHNvIHRoZSBsb29wIGRvZXNuJ3QgaG9nIHRoZSBDUFUuCisKKyAgICAgICAgPj4+IHN0YXJ0dGltZSA9IHRpbWUudGltZSgpCisgICAgICAgID4+PiB0aW1lb3V0ID0gMSAgICAgICAgICAgICAgICAgICAgI3NlY29uZHMKKworICAgICAgICBUaGlzIGlzIGEgc2hvcnQgdGltZW91dCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKworICAgICAgICA+Pj4gd2hpbGUgc2VydmVydGhyZWFkLnNlcnZpbmc6CisgICAgICAgIC4uLiAgICAgdGltZS5zbGVlcCguMDEpCisgICAgICAgIC4uLiAgICAgaWYgc2VydmVydGhyZWFkLnNlcnZpbmcgYW5kIHRpbWUudGltZSgpIC0gc3RhcnR0aW1lID4gdGltZW91dDoKKyAgICAgICAgLi4uICAgICAgICAgIHNlcnZlcnRocmVhZC5zdG9wKCkKKyAgICAgICAgLi4uICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgUHJpbnQgYW55IGVycm9ycyB0aGF0IG1heSBoYXZlIG9jY3VycmVkLgorCisgICAgICAgID4+PiBwcmludChzZXJ2ZXJ0aHJlYWQuZXJyb3IpCisgICAgICAgIE5vbmUKKyAgICIiIgorICAgIGltcG9ydCBodHRwLnNlcnZlcgorICAgIGltcG9ydCBlbWFpbC5tZXNzYWdlCisgICAgaW1wb3J0IHNlbGVjdAorICAgIGltcG9ydCB0aHJlYWRpbmcKKworICAgIGNsYXNzIERvY0hhbmRsZXIoaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICAgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgICAgICIiIlByb2Nlc3MgYSByZXF1ZXN0IGZyb20gYW4gSFRNTCBicm93c2VyLgorCisgICAgICAgICAgICBUaGUgVVJMIHJlY2VpdmVkIGlzIGluIHNlbGYucGF0aC4KKyAgICAgICAgICAgIEdldCBhbiBIVE1MIHBhZ2UgZnJvbSBzZWxmLnVybGhhbmRsZXIgYW5kIHNlbmQgaXQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIHNlbGYucGF0aC5lbmRzd2l0aCgnLmNzcycpOgorICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L2NzcycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgY29udGVudF90eXBlID0gJ3RleHQvaHRtbCcKKyAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCdDb250ZW50LVR5cGUnLCAnJXM7IGNoYXJzZXQ9VVRGLTgnICUgY29udGVudF90eXBlKQorICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCisgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKHNlbGYudXJsaGFuZGxlcigKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGgsIGNvbnRlbnRfdHlwZSkuZW5jb2RlKCd1dGYtOCcpKQorCisgICAgICAgIGRlZiBsb2dfbWVzc2FnZShzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAjIERvbid0IGxvZyBtZXNzYWdlcy4KKyAgICAgICAgICAgIHBhc3MKKworICAgIGNsYXNzIERvY1NlcnZlcihodHRwLnNlcnZlci5IVFRQU2VydmVyKToKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgY2FsbGJhY2spOgorICAgICAgICAgICAgc2VsZi5ob3N0ID0gKHN5cy5wbGF0Zm9ybSA9PSAnbWFjJykgYW5kICcxMjcuMC4wLjEnIG9yICdsb2NhbGhvc3QnCisgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSAoJycsIHBvcnQpCisgICAgICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKyAgICAgICAgICAgIHNlbGYuYmFzZS5fX2luaXRfXyhzZWxmLCBzZWxmLmFkZHJlc3MsIHNlbGYuaGFuZGxlcikKKyAgICAgICAgICAgIHNlbGYucXVpdCA9IEZhbHNlCisKKyAgICAgICAgZGVmIHNlcnZlX3VudGlsX3F1aXQoc2VsZik6CisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWl0OgorICAgICAgICAgICAgICAgIHJkLCB3ciwgZXggPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNvY2tldC5maWxlbm8oKV0sIFtdLCBbXSwgMSkKKyAgICAgICAgICAgICAgICBpZiByZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVxdWVzdCgpCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9jbG9zZSgpCisKKyAgICAgICAgZGVmIHNlcnZlcl9hY3RpdmF0ZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuYmFzZS5zZXJ2ZXJfYWN0aXZhdGUoc2VsZikKKyAgICAgICAgICAgIGlmIHNlbGYuY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsYmFjayhzZWxmKQorCisgICAgY2xhc3MgU2VydmVyVGhyZWFkKHRocmVhZGluZy5UaHJlYWQpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmxoYW5kbGVyLCBwb3J0KToKKyAgICAgICAgICAgIHNlbGYudXJsaGFuZGxlciA9IHVybGhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IGludChwb3J0KQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgc2VsZi5zZXJ2aW5nID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuZXJyb3IgPSBOb25lCisKKyAgICAgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgICAgICIiIlN0YXJ0IHRoZSBzZXJ2ZXIuIiIiCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgRG9jU2VydmVyLmJhc2UgPSBodHRwLnNlcnZlci5IVFRQU2VydmVyCisgICAgICAgICAgICAgICAgRG9jU2VydmVyLmhhbmRsZXIgPSBEb2NIYW5kbGVyCisgICAgICAgICAgICAgICAgRG9jSGFuZGxlci5NZXNzYWdlQ2xhc3MgPSBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UKKyAgICAgICAgICAgICAgICBEb2NIYW5kbGVyLnVybGhhbmRsZXIgPSBzdGF0aWNtZXRob2Qoc2VsZi51cmxoYW5kbGVyKQorICAgICAgICAgICAgICAgIGRvY3N2ciA9IERvY1NlcnZlcihzZWxmLnBvcnQsIHNlbGYucmVhZHkpCisgICAgICAgICAgICAgICAgc2VsZi5kb2NzZXJ2ZXIgPSBkb2NzdnIKKyAgICAgICAgICAgICAgICBkb2NzdnIuc2VydmVfdW50aWxfcXVpdCgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvciA9IGUKKworICAgICAgICBkZWYgcmVhZHkoc2VsZiwgc2VydmVyKToKKyAgICAgICAgICAgIHNlbGYuc2VydmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuaG9zdCA9IHNlcnZlci5ob3N0CisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZXJ2ZXIuc2VydmVyX3BvcnQKKyAgICAgICAgICAgIHNlbGYudXJsID0gJ2h0dHA6Ly8lczolZC8nICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorCisgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgIiIiU3RvcCB0aGUgc2VydmVyIGFuZCB0aGlzIHRocmVhZCBuaWNlbHkiIiIKKyAgICAgICAgICAgIHNlbGYuZG9jc2VydmVyLnF1aXQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnNlcnZpbmcgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi51cmwgPSBOb25lCisKKyAgICB0aHJlYWQgPSBTZXJ2ZXJUaHJlYWQodXJsaGFuZGxlciwgcG9ydCkKKyAgICB0aHJlYWQuc3RhcnQoKQorICAgICMgV2FpdCB1bnRpbCB0aHJlYWQuc2VydmluZyBpcyBUcnVlIHRvIG1ha2Ugc3VyZSB3ZSBhcmUKKyAgICAjIHJlYWxseSB1cCBiZWZvcmUgcmV0dXJuaW5nLgorICAgIHdoaWxlIG5vdCB0aHJlYWQuZXJyb3IgYW5kIG5vdCB0aHJlYWQuc2VydmluZzoKKyAgICAgICAgdGltZS5zbGVlcCguMDEpCisgICAgcmV0dXJuIHRocmVhZAorCisKK2RlZiBfdXJsX2hhbmRsZXIodXJsLCBjb250ZW50X3R5cGU9InRleHQvaHRtbCIpOgorICAgICIiIlRoZSBweWRvYyB1cmwgaGFuZGxlciBmb3IgdXNlIHdpdGggdGhlIHB5ZG9jIHNlcnZlci4KKworICAgIElmIHRoZSBjb250ZW50X3R5cGUgaXMgJ3RleHQvY3NzJywgdGhlIF9weWRvYy5jc3Mgc3R5bGUKKyAgICBzaGVldCBpcyByZWFkIGFuZCByZXR1cm5lZCBpZiBpdCBleGl0cy4KKworICAgIElmIHRoZSBjb250ZW50X3R5cGUgaXMgJ3RleHQvaHRtbCcsIHRoZW4gdGhlIHJlc3VsdCBvZgorICAgIGdldF9odG1sX3BhZ2UodXJsKSBpcyByZXR1cm5lZC4KKyAgICAiIiIKKyAgICBjbGFzcyBfSFRNTERvYyhIVE1MRG9jKToKKworICAgICAgICBkZWYgcGFnZShzZWxmLCB0aXRsZSwgY29udGVudHMpOgorICAgICAgICAgICAgIiIiRm9ybWF0IGFuIEhUTUwgcGFnZS4iIiIKKyAgICAgICAgICAgIGNzc19wYXRoID0gInB5ZG9jX2RhdGEvX3B5ZG9jLmNzcyIKKyAgICAgICAgICAgIGNzc19saW5rID0gKAorICAgICAgICAgICAgICAgICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIlcyI+JyAlCisgICAgICAgICAgICAgICAgY3NzX3BhdGgpCisgICAgICAgICAgICByZXR1cm4gJycnXAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPjxoZWFkPjx0aXRsZT5QeWRvYzogJXM8L3RpdGxlPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorJXM8L2hlYWQ+PGJvZHkgYmdjb2xvcj0iI2YwZjBmOCI+JXM8ZGl2IHN0eWxlPSJjbGVhcjpib3RoO3BhZGRpbmctdG9wOi41ZW07Ij4lczwvZGl2PgorPC9ib2R5PjwvaHRtbD4nJycgJSAodGl0bGUsIGNzc19saW5rLCBodG1sX25hdmJhcigpLCBjb250ZW50cykKKworICAgICAgICBkZWYgZmlsZWxpbmsoc2VsZiwgdXJsLCBwYXRoKToKKyAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iZ2V0ZmlsZT9rZXk9JXMiPiVzPC9hPicgJSAodXJsLCBwYXRoKQorCisKKyAgICBodG1sID0gX0hUTUxEb2MoKQorCisgICAgZGVmIGh0bWxfbmF2YmFyKCk6CisgICAgICAgIHZlcnNpb24gPSBodG1sLmVzY2FwZSgiJXMgWyVzLCAlc10iICUgKHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLnB5dGhvbl9idWlsZCgpWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybS5weXRob25fY29tcGlsZXIoKSkpCisgICAgICAgIHJldHVybiAiIiIKKyAgICAgICAgICAgIDxkaXYgc3R5bGU9J2Zsb2F0OmxlZnQnPgorICAgICAgICAgICAgICAgIFB5dGhvbiAlczxicj4lcworICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IHN0eWxlPSdmbG9hdDpyaWdodCc+CisgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPgorICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCI+TW9kdWxlIEluZGV4PC9hPgorICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJ0b3BpY3MuaHRtbCI+VG9waWNzPC9hPgorICAgICAgICAgICAgICAgICAgOiA8YSBocmVmPSJrZXl3b3Jkcy5odG1sIj5LZXl3b3JkczwvYT4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8ZGl2PgorICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249ImdldCIgc3R5bGU9J2Rpc3BsYXk6aW5saW5lOyc+CisgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9dGV4dCBuYW1lPWtleSBzaXplPTE1PgorICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iR2V0Ij4KKyAgICAgICAgICAgICAgICAgICAgPC9mb3JtPiZuYnNwOworICAgICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249InNlYXJjaCIgc3R5bGU9J2Rpc3BsYXk6aW5saW5lOyc+CisgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9dGV4dCBuYW1lPWtleSBzaXplPTE1PgorICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0iU2VhcmNoIj4KKyAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAiIiIgJSAodmVyc2lvbiwgaHRtbC5lc2NhcGUocGxhdGZvcm0ucGxhdGZvcm0odGVyc2U9VHJ1ZSkpKQorCisgICAgZGVmIGh0bWxfaW5kZXgoKToKKyAgICAgICAgIiIiTW9kdWxlIEluZGV4IHBhZ2UuIiIiCisKKyAgICAgICAgZGVmIGJsdGlubGluayhuYW1lKToKKyAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJXMuaHRtbCI+JXM8L2E+JyAlIChuYW1lLCBuYW1lKQorCisgICAgICAgIGhlYWRpbmcgPSBodG1sLmhlYWRpbmcoCisgICAgICAgICAgICAnPGJpZz48YmlnPjxzdHJvbmc+SW5kZXggb2YgTW9kdWxlczwvc3Ryb25nPjwvYmlnPjwvYmlnPicsCisgICAgICAgICAgICAnI2ZmZmZmZicsICcjNzc5OWVlJykKKyAgICAgICAgbmFtZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgICAgICAgICAgaWYgbmFtZSAhPSAnX19tYWluX18nXQorICAgICAgICBjb250ZW50cyA9IGh0bWwubXVsdGljb2x1bW4obmFtZXMsIGJsdGlubGluaykKKyAgICAgICAgY29udGVudHMgPSBbaGVhZGluZywgJzxwPicgKyBodG1sLmJpZ3NlY3Rpb24oCisgICAgICAgICAgICAnQnVpbHQtaW4gTW9kdWxlcycsICcjZmZmZmZmJywgJyNlZTc3YWEnLCBjb250ZW50cyldCisKKyAgICAgICAgc2VlbiA9IHt9CisgICAgICAgIGZvciBkaXIgaW4gc3lzLnBhdGg6CisgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoaHRtbC5pbmRleChkaXIsIHNlZW4pKQorCisgICAgICAgIGNvbnRlbnRzLmFwcGVuZCgKKyAgICAgICAgICAgICc8cCBhbGlnbj1yaWdodD48Zm9udCBjb2xvcj0iIzkwOTA5MCIgZmFjZT0iaGVsdmV0aWNhLCcKKyAgICAgICAgICAgICdhcmlhbCI+PHN0cm9uZz5weWRvYzwvc3Ryb25nPiBieSBLYS1QaW5nIFllZScKKyAgICAgICAgICAgICcmbHQ7cGluZ0BsZncub3JnJmd0OzwvZm9udD4nKQorICAgICAgICByZXR1cm4gJ0luZGV4IG9mIE1vZHVsZXMnLCAnJy5qb2luKGNvbnRlbnRzKQorCisgICAgZGVmIGh0bWxfc2VhcmNoKGtleSk6CisgICAgICAgICIiIlNlYXJjaCByZXN1bHRzIHBhZ2UuIiIiCisgICAgICAgICMgc2NhbiBmb3IgbW9kdWxlcworICAgICAgICBzZWFyY2hfcmVzdWx0ID0gW10KKworICAgICAgICBkZWYgY2FsbGJhY2socGF0aCwgbW9kbmFtZSwgZGVzYyk6CisgICAgICAgICAgICBpZiBtb2RuYW1lWy05Ol0gPT0gJy5fX2luaXRfXyc6CisgICAgICAgICAgICAgICAgbW9kbmFtZSA9IG1vZG5hbWVbOi05XSArICcgKHBhY2thZ2UpJworICAgICAgICAgICAgc2VhcmNoX3Jlc3VsdC5hcHBlbmQoKG1vZG5hbWUsIGRlc2MgYW5kICctICcgKyBkZXNjKSkKKworICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygnaWdub3JlJykgIyBpZ25vcmUgcHJvYmxlbXMgZHVyaW5nIGltcG9ydAorICAgICAgICAgICAgTW9kdWxlU2Nhbm5lcigpLnJ1bihjYWxsYmFjaywga2V5KQorCisgICAgICAgICMgZm9ybWF0IHBhZ2UKKyAgICAgICAgZGVmIGJsdGlubGluayhuYW1lKToKKyAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0iJXMuaHRtbCI+JXM8L2E+JyAlIChuYW1lLCBuYW1lKQorCisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBoZWFkaW5nID0gaHRtbC5oZWFkaW5nKAorICAgICAgICAgICAgJzxiaWc+PGJpZz48c3Ryb25nPlNlYXJjaCBSZXN1bHRzPC9zdHJvbmc+PC9iaWc+PC9iaWc+JywKKyAgICAgICAgICAgICcjZmZmZmZmJywgJyM3Nzk5ZWUnKQorICAgICAgICBmb3IgbmFtZSwgZGVzYyBpbiBzZWFyY2hfcmVzdWx0OgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYmx0aW5saW5rKG5hbWUpICsgZGVzYykKKyAgICAgICAgY29udGVudHMgPSBoZWFkaW5nICsgaHRtbC5iaWdzZWN0aW9uKAorICAgICAgICAgICAgJ2tleSA9ICVzJyAlIGtleSwgJyNmZmZmZmYnLCAnI2VlNzdhYScsICc8YnI+Jy5qb2luKHJlc3VsdHMpKQorICAgICAgICByZXR1cm4gJ1NlYXJjaCBSZXN1bHRzJywgY29udGVudHMKKworICAgIGRlZiBodG1sX2dldGZpbGUocGF0aCk6CisgICAgICAgICIiIkdldCBhbmQgZGlzcGxheSBhIHNvdXJjZSBmaWxlIGxpc3Rpbmcgc2FmZWx5LiIiIgorICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKCclMjAnLCAnICcpCisgICAgICAgIHdpdGggb3BlbihwYXRoLCAncicpIGFzIGZwOgorICAgICAgICAgICAgbGluZXMgPSBodG1sLmVzY2FwZShmcC5yZWFkKCkpCisgICAgICAgIGJvZHkgPSAnPHByZT4lczwvcHJlPicgJSBsaW5lcworICAgICAgICBoZWFkaW5nID0gaHRtbC5oZWFkaW5nKAorICAgICAgICAgICAgJzxiaWc+PGJpZz48c3Ryb25nPkZpbGUgTGlzdGluZzwvc3Ryb25nPjwvYmlnPjwvYmlnPicsCisgICAgICAgICAgICAnI2ZmZmZmZicsICcjNzc5OWVlJykKKyAgICAgICAgY29udGVudHMgPSBoZWFkaW5nICsgaHRtbC5iaWdzZWN0aW9uKAorICAgICAgICAgICAgJ0ZpbGU6ICVzJyAlIHBhdGgsICcjZmZmZmZmJywgJyNlZTc3YWEnLCBib2R5KQorICAgICAgICByZXR1cm4gJ2dldGZpbGUgJXMnICUgcGF0aCwgY29udGVudHMKKworICAgIGRlZiBodG1sX3RvcGljcygpOgorICAgICAgICAiIiJJbmRleCBvZiB0b3BpYyB0ZXh0cyBhdmFpbGFibGUuIiIiCisKKyAgICAgICAgZGVmIGJsdGlubGluayhuYW1lKToKKyAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0idG9waWM/a2V5PSVzIj4lczwvYT4nICUgKG5hbWUsIG5hbWUpCisKKyAgICAgICAgaGVhZGluZyA9IGh0bWwuaGVhZGluZygKKyAgICAgICAgICAgICc8YmlnPjxiaWc+PHN0cm9uZz5JTkRFWDwvc3Ryb25nPjwvYmlnPjwvYmlnPicsCisgICAgICAgICAgICAnI2ZmZmZmZicsICcjNzc5OWVlJykKKyAgICAgICAgbmFtZXMgPSBzb3J0ZWQoSGVscGVyLnRvcGljcy5rZXlzKCkpCisKKyAgICAgICAgY29udGVudHMgPSBodG1sLm11bHRpY29sdW1uKG5hbWVzLCBibHRpbmxpbmspCisgICAgICAgIGNvbnRlbnRzID0gaGVhZGluZyArIGh0bWwuYmlnc2VjdGlvbigKKyAgICAgICAgICAgICdUb3BpY3MnLCAnI2ZmZmZmZicsICcjZWU3N2FhJywgY29udGVudHMpCisgICAgICAgIHJldHVybiAnVG9waWNzJywgY29udGVudHMKKworICAgIGRlZiBodG1sX2tleXdvcmRzKCk6CisgICAgICAgICIiIkluZGV4IG9mIGtleXdvcmRzLiIiIgorICAgICAgICBoZWFkaW5nID0gaHRtbC5oZWFkaW5nKAorICAgICAgICAgICAgJzxiaWc+PGJpZz48c3Ryb25nPklOREVYPC9zdHJvbmc+PC9iaWc+PC9iaWc+JywKKyAgICAgICAgICAgICcjZmZmZmZmJywgJyM3Nzk5ZWUnKQorICAgICAgICBuYW1lcyA9IHNvcnRlZChIZWxwZXIua2V5d29yZHMua2V5cygpKQorCisgICAgICAgIGRlZiBibHRpbmxpbmsobmFtZSk6CisgICAgICAgICAgICByZXR1cm4gJzxhIGhyZWY9InRvcGljP2tleT0lcyI+JXM8L2E+JyAlIChuYW1lLCBuYW1lKQorCisgICAgICAgIGNvbnRlbnRzID0gaHRtbC5tdWx0aWNvbHVtbihuYW1lcywgYmx0aW5saW5rKQorICAgICAgICBjb250ZW50cyA9IGhlYWRpbmcgKyBodG1sLmJpZ3NlY3Rpb24oCisgICAgICAgICAgICAnS2V5d29yZHMnLCAnI2ZmZmZmZicsICcjZWU3N2FhJywgY29udGVudHMpCisgICAgICAgIHJldHVybiAnS2V5d29yZHMnLCBjb250ZW50cworCisgICAgZGVmIGh0bWxfdG9waWNwYWdlKHRvcGljKToKKyAgICAgICAgIiIiVG9waWMgb3Iga2V5d29yZCBoZWxwIHBhZ2UuIiIiCisgICAgICAgIGJ1ZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgaHRtbGhlbHAgPSBIZWxwZXIoYnVmLCBidWYpCisgICAgICAgIGNvbnRlbnRzLCB4cmVmcyA9IGh0bWxoZWxwLl9nZXR0b3BpYyh0b3BpYykKKyAgICAgICAgaWYgdG9waWMgaW4gaHRtbGhlbHAua2V5d29yZHM6CisgICAgICAgICAgICB0aXRsZSA9ICdLRVlXT1JEJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGl0bGUgPSAnVE9QSUMnCisgICAgICAgIGhlYWRpbmcgPSBodG1sLmhlYWRpbmcoCisgICAgICAgICAgICAnPGJpZz48YmlnPjxzdHJvbmc+JXM8L3N0cm9uZz48L2JpZz48L2JpZz4nICUgdGl0bGUsCisgICAgICAgICAgICAnI2ZmZmZmZicsICcjNzc5OWVlJykKKyAgICAgICAgY29udGVudHMgPSAnPHByZT4lczwvcHJlPicgJSBodG1sLm1hcmt1cChjb250ZW50cykKKyAgICAgICAgY29udGVudHMgPSBodG1sLmJpZ3NlY3Rpb24odG9waWMgLCAnI2ZmZmZmZicsJyNlZTc3YWEnLCBjb250ZW50cykKKyAgICAgICAgaWYgeHJlZnM6CisgICAgICAgICAgICB4cmVmcyA9IHNvcnRlZCh4cmVmcy5zcGxpdCgpKQorCisgICAgICAgICAgICBkZWYgYmx0aW5saW5rKG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiAnPGEgaHJlZj0idG9waWM/a2V5PSVzIj4lczwvYT4nICUgKG5hbWUsIG5hbWUpCisKKyAgICAgICAgICAgIHhyZWZzID0gaHRtbC5tdWx0aWNvbHVtbih4cmVmcywgYmx0aW5saW5rKQorICAgICAgICAgICAgeHJlZnMgPSBodG1sLnNlY3Rpb24oJ1JlbGF0ZWQgaGVscCB0b3BpY3M6ICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI2ZmZmZmZicsICcjZWU3N2FhJywgeHJlZnMpCisgICAgICAgIHJldHVybiAoJyVzICVzJyAlICh0aXRsZSwgdG9waWMpLAorICAgICAgICAgICAgICAgICcnLmpvaW4oKGhlYWRpbmcsIGNvbnRlbnRzLCB4cmVmcykpKQorCisgICAgZGVmIGh0bWxfZ2V0b2JqKHVybCk6CisgICAgICAgIG9iaiA9IGxvY2F0ZSh1cmwsIGZvcmNlbG9hZD0xKQorICAgICAgICBpZiBvYmogaXMgTm9uZSBhbmQgdXJsICE9ICdOb25lJzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIG9iamVjdCcpCisgICAgICAgIHRpdGxlID0gZGVzY3JpYmUob2JqKQorICAgICAgICBjb250ZW50ID0gaHRtbC5kb2N1bWVudChvYmosIHVybCkKKyAgICAgICAgcmV0dXJuIHRpdGxlLCBjb250ZW50CisKKyAgICBkZWYgaHRtbF9lcnJvcih1cmwsIGV4Yyk6CisgICAgICAgIGhlYWRpbmcgPSBodG1sLmhlYWRpbmcoCisgICAgICAgICAgICAnPGJpZz48YmlnPjxzdHJvbmc+RXJyb3I8L3N0cm9uZz48L2JpZz48L2JpZz4nLAorICAgICAgICAgICAgJyNmZmZmZmYnLCAnIzc3OTllZScpCisgICAgICAgIGNvbnRlbnRzID0gJzxicj4nLmpvaW4oaHRtbC5lc2NhcGUobGluZSkgZm9yIGxpbmUgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZShleGMpLCBleGMpKQorICAgICAgICBjb250ZW50cyA9IGhlYWRpbmcgKyBodG1sLmJpZ3NlY3Rpb24odXJsLCAnI2ZmZmZmZicsICcjYmIwMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzKQorICAgICAgICByZXR1cm4gIkVycm9yIC0gJXMiICUgdXJsLCBjb250ZW50cworCisgICAgZGVmIGdldF9odG1sX3BhZ2UodXJsKToKKyAgICAgICAgIiIiR2VuZXJhdGUgYW4gSFRNTCBwYWdlIGZvciB1cmwuIiIiCisgICAgICAgIGNvbXBsZXRlX3VybCA9IHVybAorICAgICAgICBpZiB1cmwuZW5kc3dpdGgoJy5odG1sJyk6CisgICAgICAgICAgICB1cmwgPSB1cmxbOi01XQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1cmwgaW4gKCIiLCAiaW5kZXgiKToKKyAgICAgICAgICAgICAgICB0aXRsZSwgY29udGVudCA9IGh0bWxfaW5kZXgoKQorICAgICAgICAgICAgZWxpZiB1cmwgPT0gInRvcGljcyI6CisgICAgICAgICAgICAgICAgdGl0bGUsIGNvbnRlbnQgPSBodG1sX3RvcGljcygpCisgICAgICAgICAgICBlbGlmIHVybCA9PSAia2V5d29yZHMiOgorICAgICAgICAgICAgICAgIHRpdGxlLCBjb250ZW50ID0gaHRtbF9rZXl3b3JkcygpCisgICAgICAgICAgICBlbGlmICc9JyBpbiB1cmw6CisgICAgICAgICAgICAgICAgb3AsIF8sIHVybCA9IHVybC5wYXJ0aXRpb24oJz0nKQorICAgICAgICAgICAgICAgIGlmIG9wID09ICJzZWFyY2g/a2V5IjoKKyAgICAgICAgICAgICAgICAgICAgdGl0bGUsIGNvbnRlbnQgPSBodG1sX3NlYXJjaCh1cmwpCisgICAgICAgICAgICAgICAgZWxpZiBvcCA9PSAiZ2V0ZmlsZT9rZXkiOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSwgY29udGVudCA9IGh0bWxfZ2V0ZmlsZSh1cmwpCisgICAgICAgICAgICAgICAgZWxpZiBvcCA9PSAidG9waWM/a2V5IjoKKyAgICAgICAgICAgICAgICAgICAgIyB0cnkgdG9waWNzIGZpcnN0LCB0aGVuIG9iamVjdHMuCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBjb250ZW50ID0gaHRtbF90b3BpY3BhZ2UodXJsKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBjb250ZW50ID0gaHRtbF9nZXRvYmoodXJsKQorICAgICAgICAgICAgICAgIGVsaWYgb3AgPT0gImdldD9rZXkiOgorICAgICAgICAgICAgICAgICAgICAjIHRyeSBvYmplY3RzIGZpcnN0LCB0aGVuIHRvcGljcy4KKyAgICAgICAgICAgICAgICAgICAgaWYgdXJsIGluICgiIiwgImluZGV4Iik6CisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSwgY29udGVudCA9IGh0bWxfaW5kZXgoKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBjb250ZW50ID0gaHRtbF9nZXRvYmoodXJsKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUsIGNvbnRlbnQgPSBodG1sX3RvcGljcGFnZSh1cmwpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignYmFkIHB5ZG9jIHVybCcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRpdGxlLCBjb250ZW50ID0gaHRtbF9nZXRvYmoodXJsKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICMgQ2F0Y2ggYW55IGVycm9ycyBhbmQgZGlzcGxheSB0aGVtIGluIGFuIGVycm9yIHBhZ2UuCisgICAgICAgICAgICB0aXRsZSwgY29udGVudCA9IGh0bWxfZXJyb3IoY29tcGxldGVfdXJsLCBleGMpCisgICAgICAgIHJldHVybiBodG1sLnBhZ2UodGl0bGUsIGNvbnRlbnQpCisKKyAgICBpZiB1cmwuc3RhcnRzd2l0aCgnLycpOgorICAgICAgICB1cmwgPSB1cmxbMTpdCisgICAgaWYgY29udGVudF90eXBlID09ICd0ZXh0L2Nzcyc6CisgICAgICAgIHBhdGhfaGVyZSA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKKyAgICAgICAgY3NzX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF0aF9oZXJlLCB1cmwpCisgICAgICAgIHdpdGggb3Blbihjc3NfcGF0aCkgYXMgZnA6CisgICAgICAgICAgICByZXR1cm4gJycuam9pbihmcC5yZWFkbGluZXMoKSkKKyAgICBlbGlmIGNvbnRlbnRfdHlwZSA9PSAndGV4dC9odG1sJzoKKyAgICAgICAgcmV0dXJuIGdldF9odG1sX3BhZ2UodXJsKQorICAgICMgRXJyb3JzIG91dHNpZGUgdGhlIHVybCBoYW5kbGVyIGFyZSBjYXVnaHQgYnkgdGhlIHNlcnZlci4KKyAgICByYWlzZSBUeXBlRXJyb3IoJ3Vua25vd24gY29udGVudCB0eXBlICVyIGZvciB1cmwgJXMnICUgKGNvbnRlbnRfdHlwZSwgdXJsKSkKKworCitkZWYgYnJvd3NlKHBvcnQ9MCwgKiwgb3Blbl9icm93c2VyPVRydWUpOgorICAgICIiIlN0YXJ0IHRoZSBlbmhhbmNlZCBweWRvYyBXZWIgc2VydmVyIGFuZCBvcGVuIGEgV2ViIGJyb3dzZXIuCisKKyAgICBVc2UgcG9ydCAnMCcgdG8gc3RhcnQgdGhlIHNlcnZlciBvbiBhbiBhcmJpdHJhcnkgcG9ydC4KKyAgICBTZXQgb3Blbl9icm93c2VyIHRvIEZhbHNlIHRvIHN1cHByZXNzIG9wZW5pbmcgYSBicm93c2VyLgorICAgICIiIgorICAgIGltcG9ydCB3ZWJicm93c2VyCisgICAgc2VydmVydGhyZWFkID0gX3N0YXJ0X3NlcnZlcihfdXJsX2hhbmRsZXIsIHBvcnQpCisgICAgaWYgc2VydmVydGhyZWFkLmVycm9yOgorICAgICAgICBwcmludChzZXJ2ZXJ0aHJlYWQuZXJyb3IpCisgICAgICAgIHJldHVybgorICAgIGlmIHNlcnZlcnRocmVhZC5zZXJ2aW5nOgorICAgICAgICBzZXJ2ZXJfaGVscF9tc2cgPSAnU2VydmVyIGNvbW1hbmRzOiBbYl1yb3dzZXIsIFtxXXVpdCcKKyAgICAgICAgaWYgb3Blbl9icm93c2VyOgorICAgICAgICAgICAgd2ViYnJvd3Nlci5vcGVuKHNlcnZlcnRocmVhZC51cmwpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByaW50KCdTZXJ2ZXIgcmVhZHkgYXQnLCBzZXJ2ZXJ0aHJlYWQudXJsKQorICAgICAgICAgICAgcHJpbnQoc2VydmVyX2hlbHBfbXNnKQorICAgICAgICAgICAgd2hpbGUgc2VydmVydGhyZWFkLnNlcnZpbmc6CisgICAgICAgICAgICAgICAgY21kID0gaW5wdXQoJ3NlcnZlcj4gJykKKyAgICAgICAgICAgICAgICBjbWQgPSBjbWQubG93ZXIoKQorICAgICAgICAgICAgICAgIGlmIGNtZCA9PSAncSc6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gJ2InOgorICAgICAgICAgICAgICAgICAgICB3ZWJicm93c2VyLm9wZW4oc2VydmVydGhyZWFkLnVybCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBwcmludChzZXJ2ZXJfaGVscF9tc2cpCisgICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIEVPRkVycm9yKToKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHNlcnZlcnRocmVhZC5zZXJ2aW5nOgorICAgICAgICAgICAgICAgIHNlcnZlcnRocmVhZC5zdG9wKCkKKyAgICAgICAgICAgICAgICBwcmludCgnU2VydmVyIHN0b3BwZWQnKQorCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tbWFuZC1saW5lIGludGVyZmFjZQogCiBkZWYgaXNwYXRoKHgpOgpAQCAtMjI2NywyOSArMjc3NSwzMiBAQAogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJy4nKQogCiAgICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdnazpwOncnKQotICAgICAgICB3cml0aW5nID0gMAotCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2JnazpwOncnKQorICAgICAgICB3cml0aW5nID0gRmFsc2UKKyAgICAgICAgc3RhcnRfc2VydmVyID0gRmFsc2UKKyAgICAgICAgb3Blbl9icm93c2VyID0gRmFsc2UKKyAgICAgICAgcG9ydCA9IE5vbmUKICAgICAgICAgZm9yIG9wdCwgdmFsIGluIG9wdHM6CiAgICAgICAgICAgICBpZiBvcHQgPT0gJy1nJzoKICAgICAgICAgICAgICAgICBndWkoKQogICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgb3B0ID09ICctYic6CisgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIG9wZW5fYnJvd3NlciA9IFRydWUKICAgICAgICAgICAgIGlmIG9wdCA9PSAnLWsnOgogICAgICAgICAgICAgICAgIGFwcm9wb3ModmFsKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgaWYgb3B0ID09ICctcCc6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHZhbCkKLSAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgQmFkVXNhZ2UKLSAgICAgICAgICAgICAgICBkZWYgcmVhZHkoc2VydmVyKToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ3B5ZG9jIHNlcnZlciByZWFkeSBhdCAlcycgJSBzZXJ2ZXIudXJsKQotICAgICAgICAgICAgICAgIGRlZiBzdG9wcGVkKCk6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCdweWRvYyBzZXJ2ZXIgc3RvcHBlZCcpCi0gICAgICAgICAgICAgICAgc2VydmUocG9ydCwgcmVhZHksIHN0b3BwZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3RhcnRfc2VydmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBvcnQgPSB2YWwKICAgICAgICAgICAgIGlmIG9wdCA9PSAnLXcnOgotICAgICAgICAgICAgICAgIHdyaXRpbmcgPSAxCisgICAgICAgICAgICAgICAgd3JpdGluZyA9IFRydWUKKworICAgICAgICBpZiBzdGFydF9zZXJ2ZXIgPT0gVHJ1ZToKKyAgICAgICAgICAgIGlmIHBvcnQgPT0gTm9uZToKKyAgICAgICAgICAgICAgICBwb3J0ID0gMAorICAgICAgICAgICAgYnJvd3NlKHBvcnQsIG9wZW5fYnJvd3Nlcj1vcGVuX2Jyb3dzZXIpCisgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpZiBub3QgYXJnczogcmFpc2UgQmFkVXNhZ2UKICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgpAQCAtMjMxMCwzMCArMjgyMSwzNyBAQAogICAgICAgICAgICAgICAgIHByaW50KHZhbHVlKQogCiAgICAgZXhjZXB0IChnZXRvcHQuZXJyb3IsIEJhZFVzYWdlKToKLSAgICAgICAgY21kID0gb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkKKyAgICAgICAgY21kID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSlbMF0KICAgICAgICAgcHJpbnQoIiIicHlkb2MgLSB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gdG9vbAogCi0lcyA8bmFtZT4gLi4uCit7Y21kfSA8bmFtZT4gLi4uCiAgICAgU2hvdyB0ZXh0IGRvY3VtZW50YXRpb24gb24gc29tZXRoaW5nLiAgPG5hbWU+IG1heSBiZSB0aGUgbmFtZSBvZiBhCiAgICAgUHl0aG9uIGtleXdvcmQsIHRvcGljLCBmdW5jdGlvbiwgbW9kdWxlLCBvciBwYWNrYWdlLCBvciBhIGRvdHRlZAogICAgIHJlZmVyZW5jZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uIHdpdGhpbiBhIG1vZHVsZSBvciBtb2R1bGUgaW4gYQotICAgIHBhY2thZ2UuICBJZiA8bmFtZT4gY29udGFpbnMgYSAnJXMnLCBpdCBpcyB1c2VkIGFzIHRoZSBwYXRoIHRvIGEKKyAgICBwYWNrYWdlLiAgSWYgPG5hbWU+IGNvbnRhaW5zIGEgJ3tzZXB9JywgaXQgaXMgdXNlZCBhcyB0aGUgcGF0aCB0byBhCiAgICAgUHl0aG9uIHNvdXJjZSBmaWxlIHRvIGRvY3VtZW50LiBJZiBuYW1lIGlzICdrZXl3b3JkcycsICd0b3BpY3MnLAogICAgIG9yICdtb2R1bGVzJywgYSBsaXN0aW5nIG9mIHRoZXNlIHRoaW5ncyBpcyBkaXNwbGF5ZWQuCiAKLSVzIC1rIDxrZXl3b3JkPgore2NtZH0gLWsgPGtleXdvcmQ+CiAgICAgU2VhcmNoIGZvciBhIGtleXdvcmQgaW4gdGhlIHN5bm9wc2lzIGxpbmVzIG9mIGFsbCBhdmFpbGFibGUgbW9kdWxlcy4KIAotJXMgLXAgPHBvcnQ+Ci0gICAgU3RhcnQgYW4gSFRUUCBzZXJ2ZXIgb24gdGhlIGdpdmVuIHBvcnQgb24gdGhlIGxvY2FsIG1hY2hpbmUuCit7Y21kfSAtcCA8cG9ydD4KKyAgICBTdGFydCBhbiBIVFRQIHNlcnZlciBvbiB0aGUgZ2l2ZW4gcG9ydCBvbiB0aGUgbG9jYWwgbWFjaGluZS4gIFBvcnQKKyAgICBudW1iZXIgMCBjYW4gYmUgdXNlZCB0byBnZXQgYW4gYXJiaXRyYXJ5IHVudXNlZCBwb3J0LgogCi0lcyAtZwotICAgIFBvcCB1cCBhIGdyYXBoaWNhbCBpbnRlcmZhY2UgZm9yIGZpbmRpbmcgYW5kIHNlcnZpbmcgZG9jdW1lbnRhdGlvbi4KK3tjbWR9IC1iCisgICAgU3RhcnQgYW4gSFRUUCBzZXJ2ZXIgb24gYW4gYXJiaXRyYXJ5IHVudXNlZCBwb3J0IGFuZCBvcGVuIGEgV2ViIGJyb3dzZXIKKyAgICB0byBpbnRlcmFjdGl2ZWx5IGJyb3dzZSBkb2N1bWVudGF0aW9uLiAgVGhlIC1wIG9wdGlvbiBjYW4gYmUgdXNlZCB3aXRoCisgICAgdGhlIC1iIG9wdGlvbiB0byBleHBsaWNpdGx5IHNwZWNpZnkgdGhlIHNlcnZlciBwb3J0LgogCi0lcyAtdyA8bmFtZT4gLi4uCit7Y21kfSAtZworICAgIERlcHJlY2F0ZWQuCisKK3tjbWR9IC13IDxuYW1lPiAuLi4KICAgICBXcml0ZSBvdXQgdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBmb3IgYSBtb2R1bGUgdG8gYSBmaWxlIGluIHRoZSBjdXJyZW50Ci0gICAgZGlyZWN0b3J5LiAgSWYgPG5hbWU+IGNvbnRhaW5zIGEgJyVzJywgaXQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lOyBpZgorICAgIGRpcmVjdG9yeS4gIElmIDxuYW1lPiBjb250YWlucyBhICd7c2VwfScsIGl0IGlzIHRyZWF0ZWQgYXMgYSBmaWxlbmFtZTsgaWYKICAgICBpdCBuYW1lcyBhIGRpcmVjdG9yeSwgZG9jdW1lbnRhdGlvbiBpcyB3cml0dGVuIGZvciBhbGwgdGhlIGNvbnRlbnRzLgotIiIiICUgKGNtZCwgb3Muc2VwLCBjbWQsIGNtZCwgY21kLCBjbWQsIG9zLnNlcCkpCisiIiIuZm9ybWF0KGNtZD1jbWQsIHNlcD1vcy5zZXApKQogCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiBjbGkoKQoraWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBjbGkoKQpkaWZmIC0tZ2l0IGEvTGliL3B5ZG9jX2RhdGEvX3B5ZG9jLmNzcyBiL0xpYi9weWRvY19kYXRhL19weWRvYy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAzNmVmMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9weWRvY19kYXRhL19weWRvYy5jc3MKQEAgLTAsMCArMSw2IEBACisvKgorICAgIENTUyBmaWxlIGZvciBweWRvYy4KKworICAgIENvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuCisKKyovCmRpZmYgLS1naXQgYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkgYi9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKaW5kZXggNzhjZWE4Yy4uMjI2YWUyOCAxMDA2NDQKLS0tIGEvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CisrKyBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQXV0b2dlbmVyYXRlZCBieSBTcGhpbnggb24gVGh1IEFwciAyOCAwNzozNzoxOSAyMDExCisjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFRodSBBcHIgMjggMDc6NDc6NDcgMjAxMQogdG9waWNzID0geydhc3NlcnQnOiAnXG5UaGUgYGBhc3NlcnRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbmBgLCBpcyBlcXVpdmFsZW50IHRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uOiByYWlzZSBBc3NlcnRpb25FcnJvclxuXG5UaGUgZXh0ZW5kZWQgZm9ybSwgYGBhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yYGAsIGlzIGVxdWl2YWxlbnRcbnRvXG5cbiAgIGlmIF9fZGVidWdfXzpcbiAgICAgIGlmIG5vdCBleHByZXNzaW9uMTogcmFpc2UgQXNzZXJ0aW9uRXJyb3IoZXhwcmVzc2lvbjIpXG5cblRoZXNlIGVxdWl2YWxlbmNlcyBhc3N1bWUgdGhhdCBgYF9fZGVidWdfX2BgIGFuZCBgYEFzc2VydGlvbkVycm9yYGBcbnJlZmVyIHRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlIGBgX19kZWJ1Z19fYGAgaXMgYGBUcnVlYGAgdW5kZXJcbm5vcm1hbCBjaXJjdW1zdGFuY2VzLCBgYEZhbHNlYGAgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkXG4oY29tbWFuZCBsaW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlXG5mb3IgYW4gYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZVxudGltZS4gIE5vdGUgdGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlXG5leHByZXNzaW9uIHRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhc1xucGFydCBvZiB0aGUgc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvIGBgX19kZWJ1Z19fYGAgYXJlIGlsbGVnYWwuICBUaGUgdmFsdWUgZm9yIHRoZSBidWlsdC1pblxudmFyaWFibGUgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBpbnRlcnByZXRlciBzdGFydHMuXG4nLAogICdhc3NpZ25tZW50JzogJ1xuQXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKipcblxuQXNzaWdubWVudCBzdGF0ZW1lbnRzIGFyZSB1c2VkIHRvIChyZSliaW5kIG5hbWVzIHRvIHZhbHVlcyBhbmQgdG9cbm1vZGlmeSBhdHRyaWJ1dGVzIG9yIGl0ZW1zIG9mIG11dGFibGUgb2JqZWN0czpcblxuICAgYXNzaWdubWVudF9zdG10IDo6PSAodGFyZ2V0X2xpc3QgIj0iKSsgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICB0YXJnZXRfbGlzdCAgICAgOjo9IHRhcmdldCAoIiwiIHRhcmdldCkqIFsiLCJdXG4gICB0YXJnZXQgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgfCAiKCIgdGFyZ2V0X2xpc3QgIikiXG4gICAgICAgICAgICAgIHwgIlsiIHRhcmdldF9saXN0ICJdIlxuICAgICAgICAgICAgICB8IGF0dHJpYnV0ZXJlZlxuICAgICAgICAgICAgICB8IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICB8IHNsaWNpbmdcbiAgICAgICAgICAgICAgfCAiKiIgdGFyZ2V0XG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhc3NpZ25tZW50IHN0YXRlbWVudCBldmFsdWF0ZXMgdGhlIGV4cHJlc3Npb24gbGlzdCAocmVtZW1iZXIgdGhhdFxudGhpcyBjYW4gYmUgYSBzaW5nbGUgZXhwcmVzc2lvbiBvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCB0aGUgbGF0dGVyXG55aWVsZGluZyBhIHR1cGxlKSBhbmQgYXNzaWducyB0aGUgc2luZ2xlIHJlc3VsdGluZyBvYmplY3QgdG8gZWFjaCBvZlxudGhlIHRhcmdldCBsaXN0cywgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5Bc3NpZ25tZW50IGlzIGRlZmluZWQgcmVjdXJzaXZlbHkgZGVwZW5kaW5nIG9uIHRoZSBmb3JtIG9mIHRoZSB0YXJnZXRcbihsaXN0KS4gV2hlbiBhIHRhcmdldCBpcyBwYXJ0IG9mIGEgbXV0YWJsZSBvYmplY3QgKGFuIGF0dHJpYnV0ZVxucmVmZXJlbmNlLCBzdWJzY3JpcHRpb24gb3Igc2xpY2luZyksIHRoZSBtdXRhYmxlIG9iamVjdCBtdXN0XG51bHRpbWF0ZWx5IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQgYW5kIGRlY2lkZSBhYm91dCBpdHMgdmFsaWRpdHksIGFuZFxubWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgYXNzaWdubWVudCBpcyB1bmFjY2VwdGFibGUuICBUaGUgcnVsZXNcbm9ic2VydmVkIGJ5IHZhcmlvdXMgdHlwZXMgYW5kIHRoZSBleGNlcHRpb25zIHJhaXNlZCBhcmUgZ2l2ZW4gd2l0aCB0aGVcbmRlZmluaXRpb24gb2YgdGhlIG9iamVjdCB0eXBlcyAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlXG5oaWVyYXJjaHkqKS5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSB0YXJnZXQgbGlzdCwgb3B0aW9uYWxseSBlbmNsb3NlZCBpblxucGFyZW50aGVzZXMgb3Igc3F1YXJlIGJyYWNrZXRzLCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzIGZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgc2luZ2xlIHRhcmdldDogVGhlIG9iamVjdCBpcyBhc3NpZ25lZCB0b1xuICB0aGF0IHRhcmdldC5cblxuKiBJZiB0aGUgdGFyZ2V0IGxpc3QgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YXJnZXRzOiBUaGUgb2JqZWN0XG4gIG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMgYXMgdGhlcmUgYXJlXG4gIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZSBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvXG4gIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4gICogSWYgdGhlIHRhcmdldCBsaXN0IGNvbnRhaW5zIG9uZSB0YXJnZXQgcHJlZml4ZWQgd2l0aCBhbiBhc3RlcmlzayxcbiAgICBjYWxsZWQgYSAic3RhcnJlZCIgdGFyZ2V0OiBUaGUgb2JqZWN0IG11c3QgYmUgYSBzZXF1ZW5jZSB3aXRoIGF0XG4gICAgbGVhc3QgYXMgbWFueSBpdGVtcyBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIG1pbnVzXG4gICAgb25lLiAgVGhlIGZpcnN0IGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQsIGZyb20gbGVmdCB0b1xuICAgIHJpZ2h0LCB0byB0aGUgdGFyZ2V0cyBiZWZvcmUgdGhlIHN0YXJyZWQgdGFyZ2V0LiAgVGhlIGZpbmFsIGl0ZW1zXG4gICAgb2YgdGhlIHNlcXVlbmNlIGFyZSBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0cyBhZnRlciB0aGUgc3RhcnJlZFxuICAgIHRhcmdldC4gIEEgbGlzdCBvZiB0aGUgcmVtYWluaW5nIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBpcyB0aGVuXG4gICAgYXNzaWduZWQgdG8gdGhlIHN0YXJyZWQgdGFyZ2V0ICh0aGUgbGlzdCBjYW4gYmUgZW1wdHkpLlxuXG4gICogRWxzZTogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2Ugd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICBhcyB0aGVyZSBhcmUgdGFyZ2V0cyBpbiB0aGUgdGFyZ2V0IGxpc3QsIGFuZCB0aGUgaXRlbXMgYXJlXG4gICAgYXNzaWduZWQsIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuQXNzaWdubWVudCBvZiBhbiBvYmplY3QgdG8gYSBzaW5nbGUgdGFyZ2V0IGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgYXNcbmZvbGxvd3MuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhbiBpZGVudGlmaWVyIChuYW1lKTpcblxuICAqIElmIHRoZSBuYW1lIGRvZXMgbm90IG9jY3VyIGluIGEgYGBnbG9iYWxgYCBvciBgYG5vbmxvY2FsYGBcbiAgICBzdGF0ZW1lbnQgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlXG4gICAgb2JqZWN0IGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZVxuICAgIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSBgYG5vbmxvY2FsYGAsIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW4gc3F1YXJlXG4gIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2ZcbiAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBgYFR5cGVFcnJvcmBgIGlzXG4gIHJhaXNlZC4gIFRoYXQgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG9cbiAgdGhlIGdpdmVuIGF0dHJpYnV0ZTsgaWYgaXQgY2Fubm90IHBlcmZvcm0gdGhlIGFzc2lnbm1lbnQsIGl0IHJhaXNlc1xuICBhbiBleGNlcHRpb24gKHVzdWFsbHkgYnV0IG5vdCBuZWNlc3NhcmlseSBgYEF0dHJpYnV0ZUVycm9yYGApLlxuXG4gIE5vdGU6IElmIHRoZSBvYmplY3QgaXMgYSBjbGFzcyBpbnN0YW5jZSBhbmQgdGhlIGF0dHJpYnV0ZSByZWZlcmVuY2VcbiAgb2NjdXJzIG9uIGJvdGggc2lkZXMgb2YgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IsIHRoZSBSSFMgZXhwcmVzc2lvbixcbiAgYGBhLnhgYCBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgYGBhLnhgYCBpc1xuICBhbHdheXMgc2V0IGFzIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgY3JlYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICBUaHVzLCB0aGUgdHdvIG9jY3VycmVuY2VzIG9mIGBgYS54YGAgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZVxuICBzYW1lIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSxcbiAgdGhlIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCBgYHByb3BlcnR5KClgYC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc3Vic2NyaXB0aW9uOiBUaGUgcHJpbWFyeSBleHByZXNzaW9uIGluIHRoZVxuICByZWZlcmVuY2UgaXMgZXZhbHVhdGVkLiAgSXQgc2hvdWxkIHlpZWxkIGVpdGhlciBhIG11dGFibGUgc2VxdWVuY2VcbiAgb2JqZWN0IChzdWNoIGFzIGEgbGlzdCkgb3IgYSBtYXBwaW5nIG9iamVjdCAoc3VjaCBhcyBhIGRpY3Rpb25hcnkpLlxuICBOZXh0LCB0aGUgc3Vic2NyaXB0IGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbXV0YWJsZSBzZXF1ZW5jZSBvYmplY3QgKHN1Y2ggYXMgYSBsaXN0KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IHlpZWxkIGFuIGludGVnZXIuICBJZiBpdCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzXG4gIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlXG4gIGludGVnZXIgbGVzcyB0aGFuIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsIGFuZCB0aGUgc2VxdWVuY2UgaXMgYXNrZWRcbiAgdG8gYXNzaWduIHRoZSBhc3NpZ25lZCBvYmplY3QgdG8gaXRzIGl0ZW0gd2l0aCB0aGF0IGluZGV4LiAgSWYgdGhlXG4gIGluZGV4IGlzIG91dCBvZiByYW5nZSwgYGBJbmRleEVycm9yYGAgaXMgcmFpc2VkIChhc3NpZ25tZW50IHRvIGFcbiAgc3Vic2NyaXB0ZWQgc2VxdWVuY2UgY2Fubm90IGFkZCBuZXcgaXRlbXMgdG8gYSBsaXN0KS5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG1hcHBpbmcgb2JqZWN0IChzdWNoIGFzIGEgZGljdGlvbmFyeSksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCBoYXZlIGEgdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIG1hcHBpbmdcJ3Mga2V5IHR5cGUsXG4gIGFuZCB0aGUgbWFwcGluZyBpcyB0aGVuIGFza2VkIHRvIGNyZWF0ZSBhIGtleS9kYXR1bSBwYWlyIHdoaWNoIG1hcHNcbiAgdGhlIHN1YnNjcmlwdCB0byB0aGUgYXNzaWduZWQgb2JqZWN0LiAgVGhpcyBjYW4gZWl0aGVyIHJlcGxhY2UgYW5cbiAgZXhpc3Rpbmcga2V5L3ZhbHVlIHBhaXIgd2l0aCB0aGUgc2FtZSBrZXkgdmFsdWUsIG9yIGluc2VydCBhIG5ld1xuICBrZXkvdmFsdWUgcGFpciAoaWYgbm8ga2V5IHdpdGggdGhlIHNhbWUgdmFsdWUgZXhpc3RlZCkuXG5cbiAgRm9yIHVzZXItZGVmaW5lZCBvYmplY3RzLCB0aGUgYGBfX3NldGl0ZW1fXygpYGAgbWV0aG9kIGlzIGNhbGxlZFxuICB3aXRoIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGUgcmVmZXJlbmNlXG4gIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGFcbiAgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdCBvZiB0aGUgc2FtZVxuICB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkLFxuICBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGUgc2VxdWVuY2VcJ3NcbiAgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmIGVpdGhlciBib3VuZCBpc1xuICBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZSByZXN1bHRpbmdcbiAgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwncyBsZW5ndGgsXG4gIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZSB0aGVcbiAgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZiB0aGVcbiAgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlIGBgYSwgYiA9IGIsIGFgYCBzd2FwcyB0d28gdmFyaWFibGVzKSwgb3ZlcmxhcHMgKndpdGhpbiogdGhlXG5jb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcyBhcmUgbm90IHNhZmUhICBGb3IgaW5zdGFuY2UsIHRoZVxuZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6XG5cbiAgIHggPSBbMCwgMV1cbiAgIGkgPSAwXG4gICBpLCB4W2ldID0gMSwgMlxuICAgcHJpbnQoeClcblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMzIqKiAtIEV4dGVuZGVkIEl0ZXJhYmxlIFVucGFja2luZ1xuICAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBgYCp0YXJnZXRgYCBmZWF0dXJlLlxuXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGFcbmJpbmFyeSBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OlxuXG4gICBhdWdtZW50ZWRfYXNzaWdubWVudF9zdG10IDo6PSBhdWd0YXJnZXQgYXVnb3AgKGV4cHJlc3Npb25fbGlzdCB8IHlpZWxkX2V4cHJlc3Npb24pXG4gICBhdWd0YXJnZXQgICAgICAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyIHwgYXR0cmlidXRlcmVmIHwgc3Vic2NyaXB0aW9uIHwgc2xpY2luZ1xuICAgYXVnb3AgICAgICAgICAgICAgICAgICAgICA6Oj0gIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iXG4gICAgICAgICAgICAgfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iXG5cbihTZWUgc2VjdGlvbiAqUHJpbWFyaWVzKiBmb3IgdGhlIHN5bnRheCBkZWZpbml0aW9ucyBmb3IgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSBgYHggKz0gMWBgIGNhbiBiZSByZXdyaXR0ZW4gYXNcbmBgeCA9IHggKyAxYGAgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluXG50aGUgYXVnbWVudGVkIHZlcnNpb24sIGBgeGBgIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW5cbnBvc3NpYmxlLCB0aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0XG5yYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsXG50aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5XaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhXG5zaW5nbGUgc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50XG5zdGF0ZW1lbnRzIGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LFxud2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBwb3NzaWJsZSAqaW4tcGxhY2UqIGJlaGF2aW9yLCB0aGUgYmluYXJ5XG5vcGVyYXRpb24gcGVyZm9ybWVkIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBzYW1lIGFzIHRoZSBub3JtYWxcbmJpbmFyeSBvcGVyYXRpb25zLlxuXG5Gb3IgdGFyZ2V0cyB3aGljaCBhcmUgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHRoZSBzYW1lICpjYXZlYXQgYWJvdXRcbmNsYXNzIGFuZCBpbnN0YW5jZSBhdHRyaWJ1dGVzKiBhcHBsaWVzIGFzIGZvciByZWd1bGFyIGFzc2lnbm1lbnRzLlxuJywKICAnYXRvbS1pZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIChOYW1lcylcbioqKioqKioqKioqKioqKioqKipcblxuQW4gaWRlbnRpZmllciBvY2N1cnJpbmcgYXMgYW4gYXRvbSBpcyBhIG5hbWUuICBTZWUgc2VjdGlvblxuKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyogZm9yIGxleGljYWwgZGVmaW5pdGlvbiBhbmQgc2VjdGlvbiAqTmFtaW5nXG5hbmQgYmluZGluZyogZm9yIGRvY3VtZW50YXRpb24gb2YgbmFtaW5nIGFuZCBiaW5kaW5nLlxuXG5XaGVuIHRoZSBuYW1lIGlzIGJvdW5kIHRvIGFuIG9iamVjdCwgZXZhbHVhdGlvbiBvZiB0aGUgYXRvbSB5aWVsZHNcbnRoYXQgb2JqZWN0LiBXaGVuIGEgbmFtZSBpcyBub3QgYm91bmQsIGFuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXRcbnJhaXNlcyBhIGBgTmFtZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4qKlByaXZhdGUgbmFtZSBtYW5nbGluZzoqKiBXaGVuIGFuIGlkZW50aWZpZXIgdGhhdCB0ZXh0dWFsbHkgb2NjdXJzIGluXG5hIGNsYXNzIGRlZmluaXRpb24gYmVnaW5zIHdpdGggdHdvIG9yIG1vcmUgdW5kZXJzY29yZSBjaGFyYWN0ZXJzIGFuZFxuZG9lcyBub3QgZW5kIGluIHR3byBvciBtb3JlIHVuZGVyc2NvcmVzLCBpdCBpcyBjb25zaWRlcmVkIGEgKnByaXZhdGVcbm5hbWUqIG9mIHRoYXQgY2xhc3MuIFByaXZhdGUgbmFtZXMgYXJlIHRyYW5zZm9ybWVkIHRvIGEgbG9uZ2VyIGZvcm1cbmJlZm9yZSBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlbS4gIFRoZSB0cmFuc2Zvcm1hdGlvbiBpbnNlcnRzIHRoZVxuY2xhc3MgbmFtZSBpbiBmcm9udCBvZiB0aGUgbmFtZSwgd2l0aCBsZWFkaW5nIHVuZGVyc2NvcmVzIHJlbW92ZWQsIGFuZFxuYSBzaW5nbGUgdW5kZXJzY29yZSBpbnNlcnRlZCBpbiBmcm9udCBvZiB0aGUgY2xhc3MgbmFtZS4gIEZvciBleGFtcGxlLFxudGhlIGlkZW50aWZpZXIgYGBfX3NwYW1gYCBvY2N1cnJpbmcgaW4gYSBjbGFzcyBuYW1lZCBgYEhhbWBgIHdpbGwgYmVcbnRyYW5zZm9ybWVkIHRvIGBgX0hhbV9fc3BhbWBgLiAgVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBpbmRlcGVuZGVudCBvZlxudGhlIHN5bnRhY3RpY2FsIGNvbnRleHQgaW4gd2hpY2ggdGhlIGlkZW50aWZpZXIgaXMgdXNlZC4gIElmIHRoZVxudHJhbnNmb3JtZWQgbmFtZSBpcyBleHRyZW1lbHkgbG9uZyAobG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMpLFxuaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0cnVuY2F0aW9uIG1heSBoYXBwZW4uICBJZiB0aGUgY2xhc3MgbmFtZVxuY29uc2lzdHMgb25seSBvZiB1bmRlcnNjb3Jlcywgbm8gdHJhbnNmb3JtYXRpb24gaXMgZG9uZS5cbicsCkBAIC0xOCw2MSArMTgsNjEgQEAKICAnY2FsbHMnOiAnXG5DYWxsc1xuKioqKipcblxuQSBjYWxsIGNhbGxzIGEgY2FsbGFibGUgb2JqZWN0IChlLmcuLCBhIGZ1bmN0aW9uKSB3aXRoIGEgcG9zc2libHlcbmVtcHR5IHNlcmllcyBvZiBhcmd1bWVudHM6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQSB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZFxuYXJndW1lbnRzIGJ1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy5cblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhIGNhbGxhYmxlIG9iamVjdCAodXNlci1kZWZpbmVkXG5mdW5jdGlvbnMsIGJ1aWx0LWluIGZ1bmN0aW9ucywgbWV0aG9kcyBvZiBidWlsdC1pbiBvYmplY3RzLCBjbGFzc1xub2JqZWN0cywgbWV0aG9kcyBvZiBjbGFzcyBpbnN0YW5jZXMsIGFuZCBhbGwgb2JqZWN0cyBoYXZpbmcgYVxuYGBfX2NhbGxfXygpYGAgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdHMuXG5cbklmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG9cbnBvc2l0aW9uYWwgYXJndW1lbnRzLCBhcyBmb2xsb3dzLiAgRmlyc3QsIGEgbGlzdCBvZiB1bmZpbGxlZCBzbG90cyBpc1xuY3JlYXRlZCBmb3IgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzLiAgSWYgdGhlcmUgYXJlIE4gcG9zaXRpb25hbFxuYXJndW1lbnRzLCB0aGV5IGFyZSBwbGFjZWQgaW4gdGhlIGZpcnN0IE4gc2xvdHMuICBOZXh0LCBmb3IgZWFjaFxua2V5d29yZCBhcmd1bWVudCwgdGhlIGlkZW50aWZpZXIgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3QgKGlmIHRoZSBpZGVudGlmaWVyIGlzIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBmb3JtYWxcbnBhcmFtZXRlciBuYW1lLCB0aGUgZmlyc3Qgc2xvdCBpcyB1c2VkLCBhbmQgc28gb24pLiAgSWYgdGhlIHNsb3QgaXNcbmFscmVhZHkgZmlsbGVkLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzIGBgTm9uZWBgLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGFcbmBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIGxpc3Qgb2YgZmlsbGVkXG5zbG90cyBpcyB1c2VkIGFzIHRoZSBhcmd1bWVudCBsaXN0IGZvciB0aGUgY2FsbC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgcHJvdmlkZVxuYnVpbHQtaW4gZnVuY3Rpb25zIHdob3NlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBkbyBub3QgaGF2ZSBuYW1lcywgZXZlblxuaWYgdGhleSBhcmUgXCduYW1lZFwnIGZvciB0aGUgcHVycG9zZSBvZiBkb2N1bWVudGF0aW9uLCBhbmQgd2hpY2hcbnRoZXJlZm9yZSBjYW5ub3QgYmUgc3VwcGxpZWQgYnkga2V5d29yZC4gIEluIENQeXRob24sIHRoaXMgaXMgdGhlIGNhc2VcbmZvciBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgaW4gQyB0aGF0IHVzZSBgYFB5QXJnX1BhcnNlVHVwbGUoKWBgIHRvXG5wYXJzZSB0aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhIGBgVHlwZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCBgYCppZGVudGlmaWVyYGAgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzXG4ob3IgYW4gZW1wdHkgdHVwbGUgaWYgdGhlcmUgd2VyZSBubyBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHMpLlxuXG5JZiBhbnkga2V5d29yZCBhcmd1bWVudCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGEgZm9ybWFsIHBhcmFtZXRlclxubmFtZSwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggYGAqKmlkZW50aWZpZXJgYCBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXRcbmZvcm1hbCBwYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggYGAqZXhwcmVzc2lvbmBgIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG5gYGV4cHJlc3Npb25gYCBtdXN0IGV2YWx1YXRlIHRvIGEgc2VxdWVuY2UuICBFbGVtZW50cyBmcm9tIHRoaXNcbnNlcXVlbmNlIGFyZSB0cmVhdGVkIGFzIGlmIHRoZXkgd2VyZSBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzO1xuaWYgdGhlcmUgYXJlIHBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosLi4uLCAqeE4qLCBhbmQgYGBleHByZXNzaW9uYGBcbmV2YWx1YXRlcyB0byBhIHNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbFxud2l0aCBNK04gcG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSBgYCpleHByZXNzaW9uYGAgc3ludGF4IG1heVxuYXBwZWFyICphZnRlciogc29tZSBrZXl3b3JkIGFyZ3VtZW50cywgaXQgaXMgcHJvY2Vzc2VkICpiZWZvcmUqIHRoZVxua2V5d29yZCBhcmd1bWVudHMgKGFuZCB0aGUgYGAqKmV4cHJlc3Npb25gYCBhcmd1bWVudCwgaWYgYW55IC0tIHNlZVxuYmVsb3cpLiAgU286XG5cbiAgID4+PiBkZWYgZihhLCBiKTpcbiAgIC4uLiAgcHJpbnQoYSwgYilcbiAgIC4uLlxuICAgPj4+IGYoYj0xLCAqKDIsKSlcbiAgIDIgMVxuICAgPj4+IGYoYT0xLCAqKDIsKSlcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgVHlwZUVycm9yOiBmKCkgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudCBcJ2FcJ1xuICAgPj4+IGYoMSwgKigyLCkpXG4gICAxIDJcblxuSXQgaXMgdW51c3VhbCBmb3IgYm90aCBrZXl3b3JkIGFyZ3VtZW50cyBhbmQgdGhlIGBgKmV4cHJlc3Npb25gYFxuc3ludGF4IHRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lc1xubm90IGFyaXNlLlxuXG5JZiB0aGUgc3ludGF4IGBgKipleHByZXNzaW9uYGAgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbmBgZXhwcmVzc2lvbmBgIG11c3QgZXZhbHVhdGUgdG8gYSBtYXBwaW5nLCB0aGUgY29udGVudHMgb2Ygd2hpY2ggYXJlXG50cmVhdGVkIGFzIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMuICBJbiB0aGUgY2FzZSBvZiBhIGtleXdvcmRcbmFwcGVhcmluZyBpbiBib3RoIGBgZXhwcmVzc2lvbmBgIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LFxuYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5cbkZvcm1hbCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzeW50YXggYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGBcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSBgYE5vbmVgYCwgdW5sZXNzIGl0IHJhaXNlc1xuYW4gZXhjZXB0aW9uLiAgSG93IHRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGVcbmNhbGxhYmxlIG9iamVjdC5cblxuSWYgaXQgaXMtLS1cblxuYSB1c2VyLWRlZmluZWQgZnVuY3Rpb246XG4gICBUaGUgY29kZSBibG9jayBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCBwYXNzaW5nIGl0IHRoZVxuICAgYXJndW1lbnQgbGlzdC4gIFRoZSBmaXJzdCB0aGluZyB0aGUgY29kZSBibG9jayB3aWxsIGRvIGlzIGJpbmQgdGhlXG4gICBmb3JtYWwgcGFyYW1ldGVycyB0byB0aGUgYXJndW1lbnRzOyB0aGlzIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4gICAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqLiAgV2hlbiB0aGUgY29kZSBibG9jayBleGVjdXRlcyBhIGBgcmV0dXJuYGBcbiAgIHN0YXRlbWVudCwgdGhpcyBzcGVjaWZpZXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gY2FsbC5cblxuYSBidWlsdC1pbiBmdW5jdGlvbiBvciBtZXRob2Q6XG4gICBUaGUgcmVzdWx0IGlzIHVwIHRvIHRoZSBpbnRlcnByZXRlcjsgc2VlICpCdWlsdC1pbiBGdW5jdGlvbnMqIGZvclxuICAgdGhlIGRlc2NyaXB0aW9ucyBvZiBidWlsdC1pbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMuXG5cbmEgY2xhc3Mgb2JqZWN0OlxuICAgQSBuZXcgaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyBpcyByZXR1cm5lZC5cblxuYSBjbGFzcyBpbnN0YW5jZSBtZXRob2Q6XG4gICBUaGUgY29ycmVzcG9uZGluZyB1c2VyLWRlZmluZWQgZnVuY3Rpb24gaXMgY2FsbGVkLCB3aXRoIGFuIGFyZ3VtZW50XG4gICBsaXN0IHRoYXQgaXMgb25lIGxvbmdlciB0aGFuIHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjYWxsOiB0aGVcbiAgIGluc3RhbmNlIGJlY29tZXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuXG5hIGNsYXNzIGluc3RhbmNlOlxuICAgVGhlIGNsYXNzIG11c3QgZGVmaW5lIGEgYGBfX2NhbGxfXygpYGAgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW5cbiAgIHRoZSBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAogICdjbGFzcyc6ICdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyBgYG9iamVjdGBgOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZVxud2l0aCB0aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZVxudXNlZCBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzXG50aGVyZSBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvXG5jcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLSBDbGFzc1xuICAgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayBvbmx5IGlmIHRoZXJlXG4gICAgaXMgbm8gYGBmaW5hbGx5YGAgY2xhdXNlIHRoYXQgbmVnYXRlcyB0aGUgZXhjZXB0aW9uLlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKICAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgYGBhIDwgYiA8IGNgYCBoYXZlIHRoZVxuaW50ZXJwcmV0YXRpb24gdGhhdCBpcyBjb252ZW50aW9uYWwgaW4gbWF0aGVtYXRpY3M6XG5cbiAgIGNvbXBhcmlzb24gICAgOjo9IG9yX2V4cHIgKCBjb21wX29wZXJhdG9yIG9yX2V4cHIgKSpcbiAgIGNvbXBfb3BlcmF0b3IgOjo9ICI8IiB8ICI+IiB8ICI9PSIgfCAiPj0iIHwgIjw9IiB8ICIhPSJcbiAgICAgICAgICAgICAgICAgICAgIHwgImlzIiBbIm5vdCJdIHwgWyJub3QiXSAiaW4iXG5cbkNvbXBhcmlzb25zIHlpZWxkIGJvb2xlYW4gdmFsdWVzOiBgYFRydWVgYCBvciBgYEZhbHNlYGAuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCBgYHggPCB5IDw9IHpgYCBpc1xuZXF1aXZhbGVudCB0byBgYHggPCB5IGFuZCB5IDw9IHpgYCwgZXhjZXB0IHRoYXQgYGB5YGAgaXMgZXZhbHVhdGVkXG5vbmx5IG9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzIGBgemBgIGlzIG5vdCBldmFsdWF0ZWQgYXQgYWxsIHdoZW4gYGB4IDxcbnlgYCBpcyBmb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gYGBhIG9wMSBiIG9wMiBjIC4uLiB5XG5vcE4gemBgIGlzIGVxdWl2YWxlbnQgdG8gYGBhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4gemBgLFxuZXhjZXB0IHRoYXQgZWFjaCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBhdCBtb3N0IG9uY2UuXG5cbk5vdGUgdGhhdCBgYGEgb3AxIGIgb3AyIGNgYCBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uXG5iZXR3ZWVuICphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCBgYHggPCB5ID4gemBgIGlzIHBlcmZlY3RseSBsZWdhbFxuKHRob3VnaCBwZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzIGBgPGBgLCBgYD5gYCwgYGA9PWBgLCBgYD49YGAsIGBgPD1gYCwgYW5kIGBgIT1gYCBjb21wYXJlXG50aGUgdmFsdWVzIG9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLlxuSWYgYm90aCBhcmUgbnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsXG50aGUgYGA9PWBgIGFuZCBgYCE9YGAgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0byBiZSB1bmVxdWFsLCB3aGlsZSB0aGUgYGA8YGAsIGBgPmBgLCBgYD49YGAgYW5kIGBgPD1gYFxub3BlcmF0b3JzIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCB3aGVuIGNvbXBhcmluZyBvYmplY3RzIG9mIGRpZmZlcmVudFxudHlwZXMgdGhhdCBkbyBub3QgaW1wbGVtZW50IHRoZXNlIG9wZXJhdG9ycyBmb3IgdGhlIGdpdmVuIHBhaXIgb2ZcbnR5cGVzLiAgWW91IGNhbiBjb250cm9sIGNvbXBhcmlzb24gYmVoYXZpb3Igb2Ygb2JqZWN0cyBvZiBub24tYnVpbHQtaW5cbnR5cGVzIGJ5IGRlZmluaW5nIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGxpa2UgYGBfX2d0X18oKWBgLCBkZXNjcmliZWRcbmluIHNlY3Rpb24gKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgYGBmbG9hdChcJ05hTlwnKWBgIGFuZCBgYERlY2ltYWwoXCdOYU5cJylgYCBhcmUgc3BlY2lhbC4gVGhlXG4gIGFyZSBpZGVudGljYWwgdG8gdGhlbXNlbHZlcywgYGB4IGlzIHhgYCBidXQgYXJlIG5vdCBlcXVhbCB0b1xuICB0aGVtc2VsdmVzLCBgYHggIT0geGBgLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuIGBgRmFsc2VgYC4gIEZvciBleGFtcGxlLCBib3RoIGBgMyA8XG4gIGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgZmxvYXQoXCdOYU5cJykgPCAzYGAgd2lsbCByZXR1cm4gYGBGYWxzZWBgLlxuXG4qIEJ5dGVzIG9iamVjdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIHZhbHVlcyBvZiB0aGVpciBlbGVtZW50cy5cblxuKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpYyBlcXVpdmFsZW50c1xuICAodGhlIHJlc3VsdCBvZiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBvcmQoKWBgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLlxuICBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2ZcbiAgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgYGBbMSwyLHhdIDw9IFsxLDIseV1gYCBoYXMgdGhlXG4gIHNhbWUgdmFsdWUgYXMgYGB4IDw9IHlgYC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3RcbiAgZXhpc3QsIHRoZSBzaG9ydGVyIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCBgYFsxLDJdIDxcbiAgWzEsMiwzXWBgKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSBgYChrZXksIHZhbHVlKWBgIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyBgYChcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKWBgIHJhaXNlIGBgVHlwZUVycm9yYGAuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgYGB7MSwyfWBgIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsIGBgbWluKClgYCwgYGBtYXgoKWBgLCBhbmQgYGBzb3J0ZWQoKWBgIHByb2R1Y2VcbiAgdW5kZWZpbmVkIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXkgYXJlXG4gIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZCBzbWFsbGVyXG4gIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0IGNvbnNpc3RlbnRseVxuICB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlciwgYnV0IGNvbXBhcmlzb25zIG9mXG5gYGZsb2F0YGAgYW5kIGBgRGVjaW1hbGBgIGFyZSBub3Qgc3VwcG9ydGVkIHRvIGF2b2lkIHRoZSBpbmV2aXRhYmxlXG5jb25mdXNpb24gYXJpc2luZyBmcm9tIHJlcHJlc2VudGF0aW9uIGlzc3VlcyBzdWNoIGFzIGBgZmxvYXQoXCcxLjFcJylgYFxuYmVpbmcgaW5leGFjdGx5IHJlcHJlc2VudGVkIGFuZCB0aGVyZWZvcmUgbm90IGV4YWN0bHkgZXF1YWwgdG9cbmBgRGVjaW1hbChcJzEuMVwnKWBgIHdoaWNoIGlzLiAgV2hlbiBjcm9zcy10eXBlIGNvbXBhcmlzb24gaXMgbm90XG5zdXBwb3J0ZWQsIHRoZSBjb21wYXJpc29uIG1ldGhvZCByZXR1cm5zIGBgTm90SW1wbGVtZW50ZWRgYC4gIFRoaXMgY2FuXG5jcmVhdGUgdGhlIGlsbHVzaW9uIG9mIG5vbi10cmFuc2l0aXZpdHkgYmV0d2VlbiBzdXBwb3J0ZWQgY3Jvc3MtdHlwZVxuY29tcGFyaXNvbnMgYW5kIHVuc3VwcG9ydGVkIGNvbXBhcmlzb25zLiAgRm9yIGV4YW1wbGUsIGBgRGVjaW1hbCgyKSA9PVxuMmBgIGFuZCBgYDIgPT0gZmxvYXQoMilgYCBidXQgYGBEZWNpbWFsKDIpICE9IGZsb2F0KDIpYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpbmBgIGFuZCBgYG5vdCBpbmBgIHRlc3QgZm9yIG1lbWJlcnNoaXAuICBgYHggaW4gc2BgXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgYGB4XG5ub3QgaW4gc2BgIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mIGBgeCBpbiBzYGAuICBBbGwgYnVpbHQtaW4gc2VxdWVuY2VzXG5hbmQgc2V0IHR5cGVzIHN1cHBvcnQgdGhpcyBhcyB3ZWxsIGFzIGRpY3Rpb25hcnksIGZvciB3aGljaCBgYGluYGBcbnRlc3RzIHdoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXNcbnN1Y2ggYXMgbGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uIGBgeCBpbiB5YGAgaXMgZXF1aXZhbGVudCB0byBgYGFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KWBgLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCpcbmlzIGEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyBgYHkuZmluZCh4KSAhPSAtMWBgLlxuRW1wdHkgc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyXG5zdHJpbmcsIHNvIGBgIiIgaW4gImFiYyJgYCB3aWxsIHJldHVybiBgYFRydWVgYC5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgYGBfX2NvbnRhaW5zX18oKWBgIG1ldGhvZCxcbmBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiBgYHkuX19jb250YWluc19fKHgpYGAgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgIGJ1dCBkb1xuZGVmaW5lIGBgX19pdGVyX18oKWBgLCBgYHggaW4geWBgIGlzIHRydWUgaWYgc29tZSB2YWx1ZSBgYHpgYCB3aXRoIGBgeFxuPT0gemBgIGlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyIGBgeWBgLiAgSWYgYW4gZXhjZXB0aW9uIGlzXG5yYWlzZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuYGBfX2dldGl0ZW1fXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCBgYHggPT0geVtpXWBgLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlIGBgSW5kZXhFcnJvcmBgIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmIGBgaW5gYCByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgYGBub3QgaW5gYCBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuYGBpbmBgLlxuXG5UaGUgb3BlcmF0b3JzIGBgaXNgYCBhbmQgYGBpcyBub3RgYCB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6IGBgeCBpc1xueWBgIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gIGBgeCBpc1xubm90IHlgYCB5aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMsIHdoaWxlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYVxuYmxvY2sgb2YgY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5XG5jb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnQoKWBgIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSBgYFN0b3BJdGVyYXRpb25gYFxuZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGxcbmJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgYGBmb3JcbmkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYCByZXR1cm5zIHRoZSBsaXN0IGBgWzAsIDEsXG4yXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSBgYGFzYGAga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsXG5pZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nIGBgYXMgdGFyZ2V0YGAsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlIGBgc3lzYGAgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuYGBzeXMuZXhjX2luZm8oKWBgLiBgYHN5cy5leGNfaW5mbygpYGAgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZlxudGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0XG4oc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpblxudGhlIHByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIGBgc3lzLmV4Y19pbmZvKClgYCB2YWx1ZXNcbmFyZSByZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24sIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kXG5vZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24gb3IgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yIGBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIGxvc3QuICBUaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlXG5wcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgKip3aXRoX2l0ZW0qKilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG4zLiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuICBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiAgU2VlIHN0ZXAgNSBiZWxvdy5cblxuNC4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG41LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAgIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSpcbiAgICAgICAgICAgICAgICAgICAgICBbLCAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgcGFyYW1ldGVycyBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqIGBgPWBgXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tXG50aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uXG5pcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW5cbnRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGF0IHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgYGBOb25lYGAgYXMgdGhlXG5kZWZhdWx0LCBhbmQgZXhwbGljaXRseSB0ZXN0IGZvciBpdCBpbiB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuImBgKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmdcbmFueSBleGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmXG50aGUgZm9ybSAiYGAqKmlkZW50aWZpZXJgYCIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgImBgKmBgIiBvciAiYGAqaWRlbnRpZmllcmBgIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiYGA6IGV4cHJlc3Npb25gYCJcbmZvbGxvd2luZyB0aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb25cbmV2ZW4gdGhvc2Ugb2YgdGhlIGZvcm0gYGAqaWRlbnRpZmllcmBgIG9yIGBgKippZGVudGlmaWVyYGAuICBGdW5jdGlvbnNcbm1heSBoYXZlICJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gImBgLT4gZXhwcmVzc2lvbmBgIiBhZnRlciB0aGVcbnBhcmFtZXRlciBsaXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvblxuYW5kIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC5cbkFubm90YXRpb25zIG1heSBiZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpblxudGhlIHNvdXJjZSBjb2RlLiAgVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGVcbnNlbWFudGljcyBvZiBhIGZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXNcbnZhbHVlcyBvZiBhIGRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGVcbmBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYSBmb3JtcyxcbmRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhIGZvcm0gaXMgbWVyZWx5IGFcbnNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247IGEgZnVuY3Rpb24gZGVmaW5lZCBpblxuYSAiYGBkZWZgYCIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yIGFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZVxuanVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYSBmb3JtLiAgVGhlICJgYGRlZmBgIiBmb3JtIGlzXG5hY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0IGFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlXG5zdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiYGBkZWZgYCJcbmZvcm0gZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWwgZnVuY3Rpb25cbnRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkIGluIHRoZVxubmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyBgYG9iamVjdGBgOyBoZW5jZSxcblxuICAgY2xhc3MgRm9vOlxuICAgICAgIHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBjbGFzcyBGb28ob2JqZWN0KTpcbiAgICAgICBwYXNzXG5cblRoZSBjbGFzc1wncyBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIGluIGEgbmV3IGV4ZWN1dGlvbiBmcmFtZSAoc2VlXG4qTmFtaW5nIGFuZCBiaW5kaW5nKiksIHVzaW5nIGEgbmV3bHkgY3JlYXRlZCBsb2NhbCBuYW1lc3BhY2UgYW5kIHRoZVxub3JpZ2luYWwgZ2xvYmFsIG5hbWVzcGFjZS4gKFVzdWFsbHksIHRoZSBzdWl0ZSBjb250YWlucyBtb3N0bHlcbmZ1bmN0aW9uIGRlZmluaXRpb25zLikgIFdoZW4gdGhlIGNsYXNzXCdzIHN1aXRlIGZpbmlzaGVzIGV4ZWN1dGlvbiwgaXRzXG5leGVjdXRpb24gZnJhbWUgaXMgZGlzY2FyZGVkIGJ1dCBpdHMgbG9jYWwgbmFtZXNwYWNlIGlzIHNhdmVkLiBbNF0gQVxuY2xhc3Mgb2JqZWN0IGlzIHRoZW4gY3JlYXRlZCB1c2luZyB0aGUgaW5oZXJpdGFuY2UgbGlzdCBmb3IgdGhlIGJhc2VcbmNsYXNzZXMgYW5kIHRoZSBzYXZlZCBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeS5cblRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIHRvIHRoaXMgY2xhc3Mgb2JqZWN0IGluIHRoZSBvcmlnaW5hbCBsb2NhbFxubmFtZXNwYWNlLlxuXG5DbGFzcyBjcmVhdGlvbiBjYW4gYmUgY3VzdG9taXplZCBoZWF2aWx5IHVzaW5nICptZXRhY2xhc3NlcyouXG5cbkNsYXNzZXMgY2FuIGFsc28gYmUgZGVjb3JhdGVkOiBqdXN0IGxpa2Ugd2hlbiBkZWNvcmF0aW5nIGZ1bmN0aW9ucyxcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgY2xhc3MgRm9vOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vOiBwYXNzXG4gICBGb28gPSBmMShhcmcpKGYyKEZvbykpXG5cblRoZSBldmFsdWF0aW9uIHJ1bGVzIGZvciB0aGUgZGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSB0aGUgc2FtZSBhcyBmb3JcbmZ1bmN0aW9uIGRlY29yYXRvcnMuICBUaGUgcmVzdWx0IG11c3QgYmUgYSBjbGFzcyBvYmplY3QsIHdoaWNoIGlzIHRoZW5cbmJvdW5kIHRvIHRoZSBjbGFzcyBuYW1lLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBWYXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhcmVcbmNsYXNzIGF0dHJpYnV0ZXM7IHRoZXkgYXJlIHNoYXJlZCBieSBpbnN0YW5jZXMuICBJbnN0YW5jZSBhdHRyaWJ1dGVzXG5jYW4gYmUgc2V0IGluIGEgbWV0aG9kIHdpdGggYGBzZWxmLm5hbWUgPSB2YWx1ZWBgLiAgQm90aCBjbGFzcyBhbmRcbmluc3RhbmNlIGF0dHJpYnV0ZXMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbm90YXRpb25cbiJgYHNlbGYubmFtZWBgIiwgYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZVxud2l0aCB0aGUgc2FtZSBuYW1lIHdoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZVxudXNlZCBhcyBkZWZhdWx0cyBmb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzXG50aGVyZSBjYW4gbGVhZCB0byB1bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvXG5jcmVhdGUgaW5zdGFuY2UgdmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLSBDbGFzc1xuICAgRGVjb3JhdG9yc1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoZSBleGNlcHRpb24gaXMgcHJvcGFnYXRlZCB0byB0aGUgaW52b2NhdGlvbiBzdGFjayBvbmx5IGlmIHRoZXJlXG4gICAgaXMgbm8gYGBmaW5hbGx5YGAgY2xhdXNlIHRoYXQgbmVnYXRlcyB0aGUgZXhjZXB0aW9uLlxuXG5bMl0gQ3VycmVudGx5LCBjb250cm9sICJmbG93cyBvZmYgdGhlIGVuZCIgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGFuXG4gICAgZXhjZXB0aW9uIG9yIHRoZSBleGVjdXRpb24gb2YgYSBgYHJldHVybmBgLCBgYGNvbnRpbnVlYGAsIG9yXG4gICAgYGBicmVha2BgIHN0YXRlbWVudC5cblxuWzNdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGZ1bmN0aW9uXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBmdW5jdGlvblwncyBgYF9fZG9jX19gYCBhdHRyaWJ1dGUgYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBmdW5jdGlvblwncyAqZG9jc3RyaW5nKi5cblxuWzRdIEEgc3RyaW5nIGxpdGVyYWwgYXBwZWFyaW5nIGFzIHRoZSBmaXJzdCBzdGF0ZW1lbnQgaW4gdGhlIGNsYXNzXG4gICAgYm9keSBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBuYW1lc3BhY2VcJ3MgYGBfX2RvY19fYGAgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKKyAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgYGBpZmBgLCBgYHdoaWxlYGAgYW5kIGBgZm9yYGAgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWxcbmNvbnRyb2wgZmxvdyBjb25zdHJ1Y3RzLiAgYGB0cnlgYCBzcGVjaWZpZXMgZXhjZXB0aW9uIGhhbmRsZXJzIGFuZC9vclxuY2xlYW51cCBjb2RlIGZvciBhIGdyb3VwIG9mIHN0YXRlbWVudHMsIHdoaWxlIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIGluaXRpYWxpemF0aW9uIGFuZCBmaW5hbGl6YXRpb24gY29kZSBhcm91bmQgYVxuYmxvY2sgb2YgY29kZS4gIEZ1bmN0aW9uIGFuZCBjbGFzcyBkZWZpbml0aW9ucyBhcmUgYWxzbyBzeW50YWN0aWNhbGx5XG5jb21wb3VuZCBzdGF0ZW1lbnRzLlxuXG5Db21wb3VuZCBzdGF0ZW1lbnRzIGNvbnNpc3Qgb2Ygb25lIG9yIG1vcmUgXCdjbGF1c2VzLlwnICBBIGNsYXVzZVxuY29uc2lzdHMgb2YgYSBoZWFkZXIgYW5kIGEgXCdzdWl0ZS5cJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGFcbnBhcnRpY3VsYXIgY29tcG91bmQgc3RhdGVtZW50IGFyZSBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuXG5FYWNoIGNsYXVzZSBoZWFkZXIgYmVnaW5zIHdpdGggYSB1bmlxdWVseSBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzXG53aXRoIGEgY29sb24uICBBIHN1aXRlIGlzIGEgZ3JvdXAgb2Ygc3RhdGVtZW50cyBjb250cm9sbGVkIGJ5IGFcbmNsYXVzZS4gIEEgc3VpdGUgY2FuIGJlIG9uZSBvciBtb3JlIHNlbWljb2xvbi1zZXBhcmF0ZWQgc2ltcGxlXG5zdGF0ZW1lbnRzIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGhlYWRlciwgZm9sbG93aW5nIHRoZSBoZWFkZXJcJ3NcbmNvbG9uLCBvciBpdCBjYW4gYmUgb25lIG9yIG1vcmUgaW5kZW50ZWQgc3RhdGVtZW50cyBvbiBzdWJzZXF1ZW50XG5saW5lcy4gIE9ubHkgdGhlIGxhdHRlciBmb3JtIG9mIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoIGBgaWZgYCBjbGF1c2UgYSBmb2xsb3dpbmcgYGBlbHNlYGAgY2xhdXNlIHdvdWxkIGJlbG9uZzpcblxuICAgaWYgdGVzdDE6IGlmIHRlc3QyOiBwcmludCh4KVxuXG5BbHNvIG5vdGUgdGhhdCB0aGUgc2VtaWNvbG9uIGJpbmRzIHRpZ2h0ZXIgdGhhbiB0aGUgY29sb24gaW4gdGhpc1xuY29udGV4dCwgc28gdGhhdCBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGVpdGhlciBhbGwgb3Igbm9uZSBvZiB0aGVcbmBgcHJpbnQoKWBgIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSBgYE5FV0xJTkVgYCBwb3NzaWJseSBmb2xsb3dlZCBieVxuYSBgYERFREVOVGBgLiAgQWxzbyBub3RlIHRoYXQgb3B0aW9uYWwgY29udGludWF0aW9uIGNsYXVzZXMgYWx3YXlzXG5iZWdpbiB3aXRoIGEga2V5d29yZCB0aGF0IGNhbm5vdCBzdGFydCBhIHN0YXRlbWVudCwgdGh1cyB0aGVyZSBhcmUgbm9cbmFtYmlndWl0aWVzICh0aGUgXCdkYW5nbGluZyBgYGVsc2VgYFwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCBgYGlmYGAgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgYGBpZmBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBvciBldmFsdWF0ZWQpLlxuSWYgYWxsIGV4cHJlc3Npb25zIGFyZSBmYWxzZSwgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgd2hpbGVgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzXG5leGVjdXRlZCBhbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuZ29lcyBiYWNrIHRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGBgZm9yYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhXG5zZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbmBgZXhwcmVzc2lvbl9saXN0YGAuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIG9mIGFzY2VuZGluZyBpbmRpY2VzLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSBgYFN0b3BJdGVyYXRpb25gYFxuZXhjZXB0aW9uKSwgdGhlIHN1aXRlIGluIHRoZSBgYGVsc2VgYCBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgYGBicmVha2BgIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlIGBgZWxzZWBgIGNsYXVzZVwncyBzdWl0ZS4gIEEgYGBjb250aW51ZWBgXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmRcbmNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlIGBgZWxzZWBgIGNsYXVzZSBpZiB0aGVyZSB3YXNcbm5vIG5leHQgaXRlbS5cblxuVGhlIHN1aXRlIG1heSBhc3NpZ24gdG8gdGhlIHZhcmlhYmxlKHMpIGluIHRoZSB0YXJnZXQgbGlzdDsgdGhpcyBkb2VzXG5ub3QgYWZmZWN0IHRoZSBuZXh0IGl0ZW0gYXNzaWduZWQgdG8gaXQuXG5cbk5hbWVzIGluIHRoZSB0YXJnZXQgbGlzdCBhcmUgbm90IGRlbGV0ZWQgd2hlbiB0aGUgbG9vcCBpcyBmaW5pc2hlZCxcbmJ1dCBpZiB0aGUgc2VxdWVuY2UgaXMgZW1wdHksIGl0IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdCBhbGxcbmJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgcmFuZ2UoKWBgIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgYGBmb3JcbmkgOj0gYSB0byBiIGRvYGA7IGUuZy4sIGBgbGlzdChyYW5nZSgzKSlgYCByZXR1cm5zIHRoZSBsaXN0IGBgWzAsIDEsXG4yXWBgLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZSBsb29wXG4gICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYGB0cnlgYCBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlIGBgZXhjZXB0YGAgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuXG5ubyBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIGBgdHJ5YGAgc3VpdGUsIGEgc2VhcmNoIGZvclxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHRcbmNsYXVzZXMgaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBblxuZXhwcmVzc2lvbi1sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlc1xuYW55IGV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdFxuZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGVcbnJlc3VsdGluZyBvYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpc1xuY29tcGF0aWJsZSB3aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZVxuZXhjZXB0aW9uIG9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlXG5leGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgYGB0cnlgYCBzdGF0ZW1lbnRcbnJhaXNlZCB0aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSBgYGFzYGAga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsXG5pZiBwcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nIGBgYXMgdGFyZ2V0YGAsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlIGBgc3lzYGAgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYVxuYGBzeXMuZXhjX2luZm8oKWBgLiBgYHN5cy5leGNfaW5mbygpYGAgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZlxudGhlIGV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0XG4oc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpblxudGhlIHByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gIGBgc3lzLmV4Y19pbmZvKClgYCB2YWx1ZXNcbmFyZSByZXN0b3JlZCB0byB0aGVpciBwcmV2aW91cyB2YWx1ZXMgKGJlZm9yZSB0aGUgY2FsbCkgd2hlbiByZXR1cm5pbmdcbmZyb20gYSBmdW5jdGlvbiB0aGF0IGhhbmRsZWQgYW4gZXhjZXB0aW9uLlxuXG5UaGUgb3B0aW9uYWwgYGBlbHNlYGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSBgYHRyeWBgIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZVxuYXJlIG5vdCBoYW5kbGVkIGJ5IHRoZSBwcmVjZWRpbmcgYGBleGNlcHRgYCBjbGF1c2VzLlxuXG5JZiBgYGZpbmFsbHlgYCBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlXG5gYHRyeWBgIGNsYXVzZSBpcyBleGVjdXRlZCwgaW5jbHVkaW5nIGFueSBgYGV4Y2VwdGBgIGFuZCBgYGVsc2VgYFxuY2xhdXNlcy4gIElmIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3RcbmhhbmRsZWQsIHRoZSBleGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSBgYGZpbmFsbHlgYCBjbGF1c2UgaXNcbmV4ZWN1dGVkLiAgSWYgdGhlcmUgaXMgYSBzYXZlZCBleGNlcHRpb24sIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kXG5vZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlLiBJZiB0aGUgYGBmaW5hbGx5YGAgY2xhdXNlIHJhaXNlcyBhbm90aGVyXG5leGNlcHRpb24gb3IgZXhlY3V0ZXMgYSBgYHJldHVybmBgIG9yIGBgYnJlYWtgYCBzdGF0ZW1lbnQsIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIGxvc3QuICBUaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlXG5wcm9ncmFtIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS5cblxuV2hlbiBhIGBgcmV0dXJuYGAsIGBgYnJlYWtgYCBvciBgYGNvbnRpbnVlYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluXG50aGUgYGB0cnlgYCBzdWl0ZSBvZiBhIGBgdHJ5YGAuLi5gYGZpbmFsbHlgYCBzdGF0ZW1lbnQsIHRoZVxuYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGlzIGlsbGVnYWwgaW4gdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYVxucHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZVxubGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBgYHJhaXNlYGAgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgYGB3aXRoX2l0ZW1gYClcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG40LiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyBgYF9fZXhpdF9fKClgYCBtZXRob2QgaXMgaW52b2tlZC4gIElmIGFuXG4gICBleGNlcHRpb24gY2F1c2VkIHRoZSBzdWl0ZSB0byBiZSBleGl0ZWQsIGl0cyB0eXBlLCB2YWx1ZSwgYW5kXG4gICB0cmFjZWJhY2sgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gYGBfX2V4aXRfXygpYGAuIE90aGVyd2lzZSxcbiAgIHRocmVlIGBgTm9uZWBgIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSBgYF9fZXhpdF9fKClgYCBtZXRob2Qgd2FzIGZhbHNlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICByZXJhaXNlZC4gIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXNcbiAgIHN1cHByZXNzZWQsIGFuZCBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmdcbiAgIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGZvciBhbnkgcmVhc29uIG90aGVyIHRoYW4gYW4gZXhjZXB0aW9uLCB0aGVcbiAgIHJldHVybiB2YWx1ZSBmcm9tIGBgX19leGl0X18oKWBgIGlzIGlnbm9yZWQsIGFuZCBleGVjdXRpb24gcHJvY2VlZHNcbiAgIGF0IHRoZSBub3JtYWwgbG9jYXRpb24gZm9yIHRoZSBraW5kIG9mIGV4aXQgdGhhdCB3YXMgdGFrZW4uXG5cbldpdGggbW9yZSB0aGFuIG9uZSBpdGVtLCB0aGUgY29udGV4dCBtYW5hZ2VycyBhcmUgcHJvY2Vzc2VkIGFzIGlmXG5tdWx0aXBsZSBgYHdpdGhgYCBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbj09PT09PT09PT09PT09PT09PT09XG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFthcmd1bWVudF9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqXG4gICAgICAgICAgICAgICAgICAgICAgWywgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhhdCBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgIGFzIHRoZVxuZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGEgZm9ybXMsXG5kZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYSBmb3JtIGlzIG1lcmVseSBhXG5zaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uOyBhIGZ1bmN0aW9uIGRlZmluZWQgaW5cbmEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIG5hbWVcbmp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGEgZm9ybS4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpc1xuYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdCBhbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZVxuc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5mb3JtIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uXG50aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGVcbm5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuXG5DbGFzcyBkZWZpbml0aW9uc1xuPT09PT09PT09PT09PT09PT1cblxuQSBjbGFzcyBkZWZpbml0aW9uIGRlZmluZXMgYSBjbGFzcyBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmRcbnR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGNsYXNzZGVmICAgIDo6PSBbZGVjb3JhdG9yc10gImNsYXNzIiBjbGFzc25hbWUgW2luaGVyaXRhbmNlXSAiOiIgc3VpdGVcbiAgIGluaGVyaXRhbmNlIDo6PSAiKCIgW2FyZ3VtZW50X2xpc3QgWyIsIl0gfCBjb21wcmVoZW5zaW9uXSAiKSJcbiAgIGNsYXNzbmFtZSAgIDo6PSBpZGVudGlmaWVyXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIFRoZSBpbmhlcml0YW5jZSBsaXN0XG51c3VhbGx5IGdpdmVzIGEgbGlzdCBvZiBiYXNlIGNsYXNzZXMgKHNlZSAqQ3VzdG9taXppbmcgY2xhc3MgY3JlYXRpb24qXG5mb3IgbW9yZSBhZHZhbmNlZCB1c2VzKSwgc28gZWFjaCBpdGVtIGluIHRoZSBsaXN0IHNob3VsZCBldmFsdWF0ZSB0byBhXG5jbGFzcyBvYmplY3Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzaW5nLiAgQ2xhc3NlcyB3aXRob3V0IGFuIGluaGVyaXRhbmNlXG5saXN0IGluaGVyaXQsIGJ5IGRlZmF1bHQsIGZyb20gdGhlIGJhc2UgY2xhc3MgYGBvYmplY3RgYDsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoIGBgc2VsZi5uYW1lID0gdmFsdWVgYC4gIEJvdGggY2xhc3MgYW5kXG5pbnN0YW5jZSBhdHRyaWJ1dGVzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIG5vdGF0aW9uXG4iYGBzZWxmLm5hbWVgYCIsIGFuZCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgaGlkZXMgYSBjbGFzcyBhdHRyaWJ1dGVcbndpdGggdGhlIHNhbWUgbmFtZSB3aGVuIGFjY2Vzc2VkIGluIHRoaXMgd2F5LiAgQ2xhc3MgYXR0cmlidXRlcyBjYW4gYmVcbnVzZWQgYXMgZGVmYXVsdHMgZm9yIGluc3RhbmNlIGF0dHJpYnV0ZXMsIGJ1dCB1c2luZyBtdXRhYmxlIHZhbHVlc1xudGhlcmUgY2FuIGxlYWQgdG8gdW5leHBlY3RlZCByZXN1bHRzLiAgKkRlc2NyaXB0b3JzKiBjYW4gYmUgdXNlZCB0b1xuY3JlYXRlIGluc3RhbmNlIHZhcmlhYmxlcyB3aXRoIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMzExNSoqIC0gTWV0YWNsYXNzZXMgaW4gUHl0aG9uIDMgKipQRVAgMzEyOSoqIC0gQ2xhc3NcbiAgIERlY29yYXRvcnNcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGUgZXhjZXB0aW9uIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIGludm9jYXRpb24gc3RhY2sgb25seSBpZiB0aGVyZVxuICAgIGlzIG5vIGBgZmluYWxseWBgIGNsYXVzZSB0aGF0IG5lZ2F0ZXMgdGhlIGV4Y2VwdGlvbi5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZiBhblxuICAgIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgYGByZXR1cm5gYCwgYGBjb250aW51ZWBgLCBvclxuICAgIGBgYnJlYWtgYCBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBmdW5jdGlvblxuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgYGBfX2RvY19fYGAgYXR0cmlidXRlIGFuZFxuICAgIHRoZXJlZm9yZSB0aGUgZnVuY3Rpb25cJ3MgKmRvY3N0cmluZyouXG5cbls0XSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBjbGFzc1xuICAgIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgbmFtZXNwYWNlXCdzIGBgX19kb2NfX2BgIGl0ZW0gYW5kXG4gICAgdGhlcmVmb3JlIHRoZSBjbGFzc1wncyAqZG9jc3RyaW5nKi5cbicsCiAgJ2NvbnRleHQtbWFuYWdlcnMnOiAnXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG4nLAogICdjb250aW51ZSc6ICdcblRoZSBgYGNvbnRpbnVlYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBjb250aW51ZV9zdG10IDo6PSAiY29udGludWUiXG5cbmBgY29udGludWVgYCBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGBgZm9yYGAgb3JcbmBgd2hpbGVgYCBsb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gb3JcbmBgZmluYWxseWBgIGNsYXVzZSB3aXRoaW4gdGhhdCBsb29wLiAgSXQgY29udGludWVzIHdpdGggdGhlIG5leHQgY3ljbGVcbm9mIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsb29wLlxuXG5XaGVuIGBgY29udGludWVgYCBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIGFcbmBgZmluYWxseWBgIGNsYXVzZSwgdGhhdCBgYGZpbmFsbHlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxuc3RhcnRpbmcgdGhlIG5leHQgbG9vcCBjeWNsZS5cbicsCiAgJ2NvbnZlcnNpb25zJzogJ1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhpcyBtZWFuc1xudGhhdCB0aGUgb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZm9yIGJ1aWx0LWluIHR5cGVzIHdvcmtzIHRoYXQgd2F5OlxuXG4qIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvXG4gIGNvbXBsZXg7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIHRoZSBvdGhlclxuICBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmcgcG9pbnQ7XG5cbiogb3RoZXJ3aXNlLCBib3RoIG11c3QgYmUgaW50ZWdlcnMgYW5kIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LlxuXG5Tb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBsZWZ0XG5hcmd1bWVudCB0byB0aGUgXCclXCcgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd25cbmNvbnZlcnNpb24gYmVoYXZpb3IuXG4nLAotICdjdXN0b21pemF0aW9uJzogJ1xuQmFzaWMgY3VzdG9taXphdGlvblxuKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y19pbmZvKClbMl1gYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93XG4gICAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsXG4gICAgIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBzdHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSB0aGUgYGBwcmludCgpYGBcbiAgIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuICBUaGlzIGRpZmZlcnMgZnJvbSBgYF9fcmVwcl9fKClgYCBpbiB0aGF0IGl0IGRvZXMgbm90IGhhdmVcbiAgIHRvIGJlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGEgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2VcbiAgIHJlcHJlc2VudGF0aW9uIG1heSBiZSB1c2VkIGluc3RlYWQuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBmb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSB0aGUgVG90YWwgT3JkZXJpbmcgcmVjaXBlIGluIHRoZSBBU1BOIGNvb2tib29rLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGBgaWQoeClgYC5cblxuICAgQ2xhc3NlcyB3aGljaCBpbmhlcml0IGEgYGBfX2hhc2hfXygpYGAgbWV0aG9kIGZyb20gYSBwYXJlbnQgY2xhc3NcbiAgIGJ1dCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYGBfX2VxX18oKWBgIHN1Y2ggdGhhdCB0aGUgaGFzaCB2YWx1ZVxuICAgcmV0dXJuZWQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIChlLmcuIGJ5IHN3aXRjaGluZyB0byBhIHZhbHVlLVxuICAgYmFzZWQgY29uY2VwdCBvZiBlcXVhbGl0eSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGlkZW50aXR5IGJhc2VkXG4gICBlcXVhbGl0eSkgY2FuIGV4cGxpY2l0bHkgZmxhZyB0aGVtc2VsdmVzIGFzIGJlaW5nIHVuaGFzaGFibGUgYnlcbiAgIHNldHRpbmcgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gRG9pbmcgc28gbWVhbnNcbiAgIHRoYXQgbm90IG9ubHkgd2lsbCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHJhaXNlIGFuIGFwcHJvcHJpYXRlXG4gICBgYFR5cGVFcnJvcmBgIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsXG4gICBidXQgdGhleSB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuXG4gICBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCAodW5saWtlIGNsYXNzZXNcbiAgIHdoaWNoIGRlZmluZSB0aGVpciBvd24gYGBfX2hhc2hfXygpYGAgdG8gZXhwbGljaXRseSByYWlzZVxuICAgYGBUeXBlRXJyb3JgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLiBPdGhlcndpc2UgdGhlIGluaGVyaXRhbmNlIG9mXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGJlIGJsb2NrZWQsIGp1c3QgYXMgaWYgYGBfX2hhc2hfX2BgIGhhZCBiZWVuXG4gICBleHBsaWNpdGx5IHNldCB0byBgYE5vbmVgYC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCi0gJ2RlYnVnZ2VyJzogJ1xuYGBwZGJgYCAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgbW9kdWxlIGBgcGRiYGAgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbmBgUGRiYGAuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnlcbnJlYWRpbmcgdGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgYGBiZGJgYFxuKHVuZG9jdW1lbnRlZCkgYW5kIGBgY21kYGAuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgYGAoUGRiKWBgLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW1cbnVuZGVyIGNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuYGBwZGIucHlgYCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuXG5Gb3IgZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uIEF1dG9tYXRpYyByZXN0YXJ0aW5nIHByZXNlcnZlcyBwZGJcJ3Mgc3RhdGUgKHN1Y2hcbmFzIGJyZWFrcG9pbnRzKSBhbmQgaW4gbW9zdCBjYXNlcyBpcyBtb3JlIHVzZWZ1bCB0aGFuIHF1aXR0aW5nIHRoZVxuZGVidWdnZXIgdXBvbiBwcm9ncmFtXCdzIGV4aXQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlIGBgY2BgIGNvbW1hbmQuXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGluc3BlY3QgYSBjcmFzaGVkIHByb2dyYW0gaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gbXltb2R1bGUudGVzdCgpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgNCwgaW4gdGVzdFxuICAgICAgIHRlc3QyKClcbiAgICAgRmlsZSAiLi9teW1vZHVsZS5weSIsIGxpbmUgMywgaW4gdGVzdDJcbiAgICAgICBwcmludChzcGFtKVxuICAgTmFtZUVycm9yOiBzcGFtXG4gICA+Pj4gcGRiLnBtKClcbiAgID4gLi9teW1vZHVsZS5weSgzKXRlc3QyKClcbiAgIC0+IHByaW50KHNwYW0pXG4gICAoUGRiKVxuXG5UaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM7IGVhY2ggZW50ZXJzIHRoZSBkZWJ1Z2dlclxuaW4gYSBzbGlnaHRseSBkaWZmZXJlbnQgd2F5OlxuXG5wZGIucnVuKHN0YXRlbWVudFssIGdsb2JhbHNbLCBsb2NhbHNdXSlcblxuICAgRXhlY3V0ZSB0aGUgKnN0YXRlbWVudCogKGdpdmVuIGFzIGEgc3RyaW5nKSB1bmRlciBkZWJ1Z2dlciBjb250cm9sLlxuICAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzIGJlZm9yZSBhbnkgY29kZSBpcyBleGVjdXRlZDsgeW91IGNhblxuICAgc2V0IGJyZWFrcG9pbnRzIGFuZCB0eXBlIGBgY29udGludWVgYCwgb3IgeW91IGNhbiBzdGVwIHRocm91Z2ggdGhlXG4gICBzdGF0ZW1lbnQgdXNpbmcgYGBzdGVwYGAgb3IgYGBuZXh0YGAgKGFsbCB0aGVzZSBjb21tYW5kcyBhcmVcbiAgIGV4cGxhaW5lZCBiZWxvdykuICBUaGUgb3B0aW9uYWwgKmdsb2JhbHMqIGFuZCAqbG9jYWxzKiBhcmd1bWVudHNcbiAgIHNwZWNpZnkgdGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRoZSBjb2RlIGlzIGV4ZWN1dGVkOyBieSBkZWZhdWx0XG4gICB0aGUgZGljdGlvbmFyeSBvZiB0aGUgbW9kdWxlIGBgX19tYWluX19gYCBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiBgYGV4ZWMoKWBgIG9yIGBgZXZhbCgpYGAgZnVuY3Rpb25zLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvblssIGdsb2JhbHNbLCBsb2NhbHNdXSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcpIHVuZGVyIGRlYnVnZ2VyXG4gICBjb250cm9sLiAgV2hlbiBgYHJ1bmV2YWwoKWBgIHJldHVybnMsIGl0IHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZVxuICAgZXhwcmVzc2lvbi4gIE90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgdG8gYGBydW4oKWBgLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvblssIGFyZ3VtZW50LCAuLi5dKVxuXG4gICBDYWxsIHRoZSAqZnVuY3Rpb24qIChhIGZ1bmN0aW9uIG9yIG1ldGhvZCBvYmplY3QsIG5vdCBhIHN0cmluZylcbiAgIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gIFdoZW4gYGBydW5jYWxsKClgYCByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbShbdHJhY2ViYWNrXSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuXG5cblRoZSBgYHJ1bipgYCBmdW5jdGlvbnMgYW5kIGBgc2V0X3RyYWNlKClgYCBhcmUgYWxpYXNlcyBmb3Jcbmluc3RhbnRpYXRpbmcgdGhlIGBgUGRiYGAgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZVxubmFtZS4gIElmIHlvdSB3YW50IHRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzXG55b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lKVxuXG4gICBgYFBkYmBgIGlzIHRoZSBkZWJ1Z2dlciBjbGFzcy5cblxuICAgVGhlICpjb21wbGV0ZWtleSosICpzdGRpbiogYW5kICpzdGRvdXQqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZVxuICAgdW5kZXJseWluZyBgYGNtZC5DbWRgYCBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjpcblxuICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihza2lwPVtcJ2RqYW5nby4qXCddKS5zZXRfdHJhY2UoKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjE6IFRoZSAqc2tpcCogYXJndW1lbnQuXG5cbiAgIHJ1bihzdGF0ZW1lbnRbLCBnbG9iYWxzWywgbG9jYWxzXV0pXG4gICBydW5ldmFsKGV4cHJlc3Npb25bLCBnbG9iYWxzWywgbG9jYWxzXV0pXG4gICBydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pXG4gICBzZXRfdHJhY2UoKVxuXG4gICAgICBTZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBmdW5jdGlvbnMgZXhwbGFpbmVkIGFib3ZlLlxuXG5cbkRlYnVnZ2VyIENvbW1hbmRzXG49PT09PT09PT09PT09PT09PVxuXG5UaGUgZGVidWdnZXIgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiAgTW9zdCBjb21tYW5kcyBjYW4gYmVcbmFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVyczsgZS5nLiBgYGgoZWxwKWBgIG1lYW5zIHRoYXQgZWl0aGVyXG5gYGhgYCBvciBgYGhlbHBgYCBjYW4gYmUgdXNlZCB0byBlbnRlciB0aGUgaGVscCBjb21tYW5kIChidXQgbm90XG5gYGhlYGAgb3IgYGBoZWxgYCwgbm9yIGBgSGBgIG9yIGBgSGVscGBgIG9yIGBgSEVMUGBgKS4gIEFyZ3VtZW50cyB0b1xuY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZSAoc3BhY2VzIG9yIHRhYnMpLiAgT3B0aW9uYWxcbmFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzIChgYFtdYGApIGluIHRoZSBjb21tYW5kXG5zeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuIEFsdGVybmF0aXZlcyBpbiB0aGVcbmNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXIgKGBgfGBgKS5cblxuRW50ZXJpbmcgYSBibGFuayBsaW5lIHJlcGVhdHMgdGhlIGxhc3QgY29tbWFuZCBlbnRlcmVkLiAgRXhjZXB0aW9uOiBpZlxudGhlIGxhc3QgY29tbWFuZCB3YXMgYSBgYGxpc3RgYCBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKGBgIWBgKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnlcbmBgOztgYC4gIChBIHNpbmdsZSBgYDtgYCBpcyBub3QgdXNlZCBhcyBpdCBpcyB0aGUgc2VwYXJhdG9yIGZvclxubXVsdGlwbGUgY29tbWFuZHMgaW4gYSBsaW5lIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBQeXRob24gcGFyc2VyLikgTm9cbmludGVsbGlnZW5jZSBpcyBhcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXRcbmF0IHRoZSBmaXJzdCBgYDs7YGAgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcXVvdGVkXG5zdHJpbmcuXG5cblRoZSBkZWJ1Z2dlciBzdXBwb3J0cyBhbGlhc2VzLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5JZiBhIGZpbGUgYGAucGRicmNgYCAgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuaChlbHApIFsqY29tbWFuZCpdXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICBgYGhlbHAgcGRiYGBcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gZmlsZTsgaWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAqKlBBR0VSKiogaXMgZGVmaW5lZCwgdGhlIGZpbGUgaXMgcGlwZWQgdGhyb3VnaCB0aGF0IGNvbW1hbmRcbiAgIGluc3RlYWQuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllcixcbiAgIGBgaGVscCBleGVjYGAgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSBgYCFgYCBjb21tYW5kLlxuXG53KGhlcmUpXG4gICBQcmludCBhIHN0YWNrIHRyYWNlLCB3aXRoIHRoZSBtb3N0IHJlY2VudCBmcmFtZSBhdCB0aGUgYm90dG9tLiAgQW5cbiAgIGFycm93IGluZGljYXRlcyB0aGUgY3VycmVudCBmcmFtZSwgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBvZlxuICAgbW9zdCBjb21tYW5kcy5cblxuZChvd24pXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lIG9uZSBsZXZlbCBkb3duIGluIHRoZSBzdGFjayB0cmFjZSAodG8gYVxuICAgbmV3ZXIgZnJhbWUpLlxuXG51KHApXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lIG9uZSBsZXZlbCB1cCBpbiB0aGUgc3RhY2sgdHJhY2UgKHRvIGFuIG9sZGVyXG4gICBmcmFtZSkuXG5cbmIocmVhaykgW1sqZmlsZW5hbWUqOl0qbGluZW5vKiB8ICpmdW5jdGlvbipbLCAqY29uZGl0aW9uKl1dXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuIFRoZSBmaWxlIGlzXG4gICBzZWFyY2hlZCBvbiBgYHN5cy5wYXRoYGAuIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFtbKmZpbGVuYW1lKjpdKmxpbmVubyogfCAqZnVuY3Rpb24qWywgKmNvbmRpdGlvbipdXVxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBicmVhay5cblxuY2woZWFyKSBbKmZpbGVuYW1lOmxpbmVubyogfCAqYnBudW1iZXIqIFsqYnBudW1iZXIgLi4uKl1dXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFsqYnBudW1iZXIqIFsqYnBudW1iZXIgLi4uKl1dXG4gICBEaXNhYmxlcyB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFsqYnBudW1iZXIqIFsqYnBudW1iZXIgLi4uKl1dXG4gICBFbmFibGVzIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSAqYnBudW1iZXIqIFsqY291bnQqXVxuICAgU2V0cyB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiAqYnBudW1iZXIqIFsqY29uZGl0aW9uKl1cbiAgIENvbmRpdGlvbiBpcyBhbiBleHByZXNzaW9uIHdoaWNoIG11c3QgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlXG4gICBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiBjb25kaXRpb24gaXMgYWJzZW50LCBhbnkgZXhpc3RpbmdcbiAgIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludCBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFsqYnBudW1iZXIqXVxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0IFwnZW5kXCcgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcHJpbnQgc29tZV92YXJpYWJsZVxuICAgICAgKGNvbSkgZW5kXG4gICAgICAoUGRiKVxuXG4gICBUbyByZW1vdmUgYWxsIGNvbW1hbmRzIGZyb20gYSBicmVha3BvaW50LCB0eXBlIGNvbW1hbmRzIGFuZCBmb2xsb3dcbiAgIGl0IGltbWVkaWF0ZWx5IHdpdGggIGVuZDsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcbiAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgZmlyc3QgcG9zc2libGUgb2NjYXNpb25cbiAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZVxuICAgY3VycmVudCBmdW5jdGlvbikuXG5cbm4oZXh0KVxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBgbmV4dGBgIGFuZFxuICAgYGBzdGVwYGAgaXMgdGhhdCBgYHN0ZXBgYCBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlXG4gICBgYG5leHRgYCBleGVjdXRlcyBjYWxsZWQgZnVuY3Rpb25zIGF0IChuZWFybHkpIGZ1bGwgc3BlZWQsIG9ubHlcbiAgIHN0b3BwaW5nIGF0IHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24uKVxuXG51bnQoaWwpXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCB0aGUgbGluZSBudW1iZXIgZ3JlYXRlciB0aGFuXG4gICB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZCBvciB3aGVuIHJldHVybmluZyBmcm9tIGN1cnJlbnQgZnJhbWUuXG5cbnIoZXR1cm4pXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApICpsaW5lbm8qXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tLSBmb3IgaW5zdGFuY2VcbiAgIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdW1wIGludG8gdGhlIG1pZGRsZSBvZiBhIGBgZm9yYGAgbG9vcCBvciBvdXRcbiAgIG9mIGEgYGBmaW5hbGx5YGAgY2xhdXNlLlxuXG5sKGlzdCkgWypmaXJzdCpbLCAqbGFzdCpdXVxuICAgTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIFdpdGhvdXQgYXJndW1lbnRzLCBsaXN0IDExXG4gICBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZSBvciBjb250aW51ZSB0aGUgcHJldmlvdXMgbGlzdGluZy5cbiAgIFdpdGggb25lIGFyZ3VtZW50LCBsaXN0IDExIGxpbmVzIGFyb3VuZCBhdCB0aGF0IGxpbmUuICBXaXRoIHR3b1xuICAgYXJndW1lbnRzLCBsaXN0IHRoZSBnaXZlbiByYW5nZTsgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzXG4gICB0aGFuIHRoZSBmaXJzdCwgaXQgaXMgaW50ZXJwcmV0ZWQgYXMgYSBjb3VudC5cblxuYShyZ3MpXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucChyaW50KSAqZXhwcmVzc2lvbipcbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxucHAgKmV4cHJlc3Npb24qXG4gICBMaWtlIHRoZSBgYHBgYCBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICBwcmV0dHktcHJpbnRlZCB1c2luZyB0aGUgYGBwcHJpbnRgYCBtb2R1bGUuXG5cbmFsaWFzIFsqbmFtZSogW2NvbW1hbmRdXVxuICAgQ3JlYXRlcyBhbiBhbGlhcyBjYWxsZWQgKm5hbWUqIHRoYXQgZXhlY3V0ZXMgKmNvbW1hbmQqLiAgVGhlXG4gICBjb21tYW5kIG11c3QgKm5vdCogYmUgZW5jbG9zZWQgaW4gcXVvdGVzLiAgUmVwbGFjZWFibGUgcGFyYW1ldGVyc1xuICAgY2FuIGJlIGluZGljYXRlZCBieSBgYCUxYGAsIGBgJTJgYCwgYW5kIHNvIG9uLCB3aGlsZSBgYCUqYGAgaXNcbiAgIHJlcGxhY2VkIGJ5IGFsbCB0aGUgcGFyYW1ldGVycy4gIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZVxuICAgY3VycmVudCBhbGlhcyBmb3IgKm5hbWUqIGlzIHNob3duLiBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbGxcbiAgIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gU3VjaCBhIGNvbW1hbmQgaXMgdGhlbiBoaWRkZW4gdW50aWwgdGhlXG4gICBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkgYXBwbGllZCB0byB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzIGluIHRoZSBsaW5lIGFyZSBsZWZ0XG4gICBhbG9uZS5cblxuICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkXG4gICBpbiB0aGUgYGAucGRicmNgYCBmaWxlKTpcblxuICAgICAgI1ByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgI1ByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmXG4gICAgICBhbGlhcyBwcyBwaSBzZWxmXG5cbnVuYWxpYXMgKm5hbWUqXG4gICBEZWxldGVzIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cblshXSpzdGF0ZW1lbnQqXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiBUbyBzZXQgYSBnbG9iYWxcbiAgIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYSBgYGdsb2JhbGBgXG4gICBjb21tYW5kIG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gWyphcmdzKiAuLi5dXG4gICBSZXN0YXJ0IHRoZSBkZWJ1Z2dlZCBQeXRob24gcHJvZ3JhbS4gSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsIGl0XG4gICBpcyBzcGxpdCB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3IHN5cy5hcmd2LlxuICAgSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnMgYXJlIHByZXNlcnZlZC5cbiAgICJyZXN0YXJ0IiBpcyBhbiBhbGlhcyBmb3IgInJ1biIuXG5cbnEodWl0KVxuICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gVGhlIHByb2dyYW0gYmVpbmcgZXhlY3V0ZWQgaXMgYWJvcnRlZC5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGV0aGVyIGEgZnJhbWUgaXMgY29uc2lkZXJlZCB0byBvcmlnaW5hdGUgaW4gYSBjZXJ0YWluIG1vZHVsZSBpc1xuICAgIGRldGVybWluZWQgYnkgdGhlIGBgX19uYW1lX19gYCBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCi0gJ2RlbCc6ICdcblRoZSBgYGRlbGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGF0IHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgYGBnbG9iYWxgYFxuc3RhdGVtZW50IGluIHRoZSBzYW1lIGNvZGUgYmxvY2suICBJZiB0aGUgbmFtZSBpcyB1bmJvdW5kLCBhXG5gYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC5cblxuSXQgaXMgaWxsZWdhbCB0byBkZWxldGUgYSBuYW1lIGZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnNcbmFzIGEgZnJlZSB2YXJpYWJsZSBpbiBhIG5lc3RlZCBibG9jay5cblxuRGVsZXRpb24gb2YgYXR0cmlidXRlIHJlZmVyZW5jZXMsIHN1YnNjcmlwdGlvbnMgYW5kIHNsaWNpbmdzIGlzIHBhc3NlZFxudG8gdGhlIHByaW1hcnkgb2JqZWN0IGludm9sdmVkOyBkZWxldGlvbiBvZiBhIHNsaWNpbmcgaXMgaW4gZ2VuZXJhbFxuZXF1aXZhbGVudCB0byBhc3NpZ25tZW50IG9mIGFuIGVtcHR5IHNsaWNlIG9mIHRoZSByaWdodCB0eXBlIChidXQgZXZlblxudGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzbGljZWQgb2JqZWN0KS5cbicsCisgJ2N1c3RvbWl6YXRpb24nOiAnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3dcbiAgICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvcixcbiAgICAgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHN0cigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHRoZSBgYHByaW50KClgYFxuICAgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gIFRoaXMgZGlmZmVycyBmcm9tIGBgX19yZXByX18oKWBgIGluIHRoYXQgaXQgZG9lcyBub3QgaGF2ZVxuICAgdG8gYmUgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYSBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZVxuICAgcmVwcmVzZW50YXRpb24gbWF5IGJlIHVzZWQgaW5zdGVhZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYGZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBgYGlkKHgpYGAuXG5cbiAgIENsYXNzZXMgd2hpY2ggaW5oZXJpdCBhIGBgX19oYXNoX18oKWBgIG1ldGhvZCBmcm9tIGEgcGFyZW50IGNsYXNzXG4gICBidXQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGBgX19lcV9fKClgYCBzdWNoIHRoYXQgdGhlIGhhc2ggdmFsdWVcbiAgIHJldHVybmVkIGlzIG5vIGxvbmdlciBhcHByb3ByaWF0ZSAoZS5nLiBieSBzd2l0Y2hpbmcgdG8gYSB2YWx1ZS1cbiAgIGJhc2VkIGNvbmNlcHQgb2YgZXF1YWxpdHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBpZGVudGl0eSBiYXNlZFxuICAgZXF1YWxpdHkpIGNhbiBleHBsaWNpdGx5IGZsYWcgdGhlbXNlbHZlcyBhcyBiZWluZyB1bmhhc2hhYmxlIGJ5XG4gICBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uIERvaW5nIHNvIG1lYW5zXG4gICB0aGF0IG5vdCBvbmx5IHdpbGwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyByYWlzZSBhbiBhcHByb3ByaWF0ZVxuICAgYGBUeXBlRXJyb3JgYCB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLFxuICAgYnV0IHRoZXkgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlblxuICAgY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgKHVubGlrZSBjbGFzc2VzXG4gICB3aGljaCBkZWZpbmUgdGhlaXIgb3duIGBgX19oYXNoX18oKWBgIHRvIGV4cGxpY2l0bHkgcmFpc2VcbiAgIGBgVHlwZUVycm9yYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC4gT3RoZXJ3aXNlIHRoZSBpbmhlcml0YW5jZSBvZlxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBiZSBibG9ja2VkLCBqdXN0IGFzIGlmIGBgX19oYXNoX19gYCBoYWQgYmVlblxuICAgZXhwbGljaXRseSBzZXQgdG8gYGBOb25lYGAuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG4nLAorICdkZWJ1Z2dlcic6ICdcbmBgcGRiYGAgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG1vZHVsZSBgYHBkYmBgIGRlZmluZXMgYW4gaW50ZXJhY3RpdmUgc291cmNlIGNvZGUgZGVidWdnZXIgZm9yXG5QeXRob24gcHJvZ3JhbXMuICBJdCBzdXBwb3J0cyBzZXR0aW5nIChjb25kaXRpb25hbCkgYnJlYWtwb2ludHMgYW5kXG5zaW5nbGUgc3RlcHBpbmcgYXQgdGhlIHNvdXJjZSBsaW5lIGxldmVsLCBpbnNwZWN0aW9uIG9mIHN0YWNrIGZyYW1lcyxcbnNvdXJjZSBjb2RlIGxpc3RpbmcsIGFuZCBldmFsdWF0aW9uIG9mIGFyYml0cmFyeSBQeXRob24gY29kZSBpbiB0aGVcbmNvbnRleHQgb2YgYW55IHN0YWNrIGZyYW1lLiAgSXQgYWxzbyBzdXBwb3J0cyBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmdcbmFuZCBjYW4gYmUgY2FsbGVkIHVuZGVyIHByb2dyYW0gY29udHJvbC5cblxuVGhlIGRlYnVnZ2VyIGlzIGV4dGVuc2libGUgLS0gaXQgaXMgYWN0dWFsbHkgZGVmaW5lZCBhcyB0aGUgY2xhc3NcbmBgUGRiYGAuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnlcbnJlYWRpbmcgdGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgYGBiZGJgYFxuYW5kIGBgY21kYGAuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgYGAoUGRiKWBgLiBUeXBpY2FsIHVzYWdlIHRvIHJ1biBhIHByb2dyYW1cbnVuZGVyIGNvbnRyb2wgb2YgdGhlIGRlYnVnZ2VyIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IHBkYi5ydW4oXCdteW1vZHVsZS50ZXN0KClcJylcbiAgID4gPHN0cmluZz4oMCk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgTmFtZUVycm9yOiBcJ3NwYW1cJ1xuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYilcblxuYGBwZGIucHlgYCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuXG5Gb3IgZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiBgYHBkYi5weWBgIG5vdyBhY2NlcHRzIGEgYGAtY2BgIG9wdGlvbiB0aGF0XG5leGVjdXRlcyBjb21tYW5kcyBhcyBpZiBnaXZlbiBpbiBhIGBgLnBkYnJjYGAgZmlsZSwgc2VlICpEZWJ1Z2dlclxuQ29tbWFuZHMqLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBmcm9tIGEgcnVubmluZyBwcm9ncmFtIGlzXG50byBpbnNlcnRcblxuICAgaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpXG5cbmF0IHRoZSBsb2NhdGlvbiB5b3Ugd2FudCB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlci4gIFlvdSBjYW4gdGhlblxuc3RlcCB0aHJvdWdoIHRoZSBjb2RlIGZvbGxvd2luZyB0aGlzIHN0YXRlbWVudCwgYW5kIGNvbnRpbnVlIHJ1bm5pbmdcbndpdGhvdXQgdGhlIGRlYnVnZ2VyIHVzaW5nIHRoZSBgYGNvbnRpbnVlYGAgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgYGBjb250aW51ZWBgLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyBgYHN0ZXBgYCBvciBgYG5leHRgYCAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgYGBfX21haW5fX2BgIGlzIHVzZWQuICAoU2VlXG4gICB0aGUgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgb3IgYGBldmFsKClgYFxuICAgZnVuY3Rpb25zLilcblxucGRiLnJ1bmV2YWwoZXhwcmVzc2lvbiwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSlcblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdClcbiAgIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wuICBXaGVuIGBgcnVuZXZhbCgpYGAgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgYGBydW4oKWBgLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuIGBgcnVuY2FsbCgpYGAgcmV0dXJucywgaXQgcmV0dXJuc1xuICAgd2hhdGV2ZXIgdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJuZWQuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnNcbiAgIGFzIHNvb24gYXMgdGhlIGZ1bmN0aW9uIGlzIGVudGVyZWQuXG5cbnBkYi5zZXRfdHJhY2UoKVxuXG4gICBFbnRlciB0aGUgZGVidWdnZXIgYXQgdGhlIGNhbGxpbmcgc3RhY2sgZnJhbWUuICBUaGlzIGlzIHVzZWZ1bCB0b1xuICAgaGFyZC1jb2RlIGEgYnJlYWtwb2ludCBhdCBhIGdpdmVuIHBvaW50IGluIGEgcHJvZ3JhbSwgZXZlbiBpZiB0aGVcbiAgIGNvZGUgaXMgbm90IG90aGVyd2lzZSBiZWluZyBkZWJ1Z2dlZCAoZS5nLiB3aGVuIGFuIGFzc2VydGlvblxuICAgZmFpbHMpLlxuXG5wZGIucG9zdF9tb3J0ZW0odHJhY2ViYWNrPU5vbmUpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgZ2l2ZW4gKnRyYWNlYmFjayogb2JqZWN0LiAgSWYgbm9cbiAgICp0cmFjZWJhY2sqIGlzIGdpdmVuLCBpdCB1c2VzIHRoZSBvbmUgb2YgdGhlIGV4Y2VwdGlvbiB0aGF0IGlzXG4gICBjdXJyZW50bHkgYmVpbmcgaGFuZGxlZCAoYW4gZXhjZXB0aW9uIG11c3QgYmUgYmVpbmcgaGFuZGxlZCBpZiB0aGVcbiAgIGRlZmF1bHQgaXMgdG8gYmUgdXNlZCkuXG5cbnBkYi5wbSgpXG5cbiAgIEVudGVyIHBvc3QtbW9ydGVtIGRlYnVnZ2luZyBvZiB0aGUgdHJhY2ViYWNrIGZvdW5kIGluXG4gICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG5UaGUgYGBydW4qYGAgZnVuY3Rpb25zIGFuZCBgYHNldF90cmFjZSgpYGAgYXJlIGFsaWFzZXMgZm9yXG5pbnN0YW50aWF0aW5nIHRoZSBgYFBkYmBgIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWVcbm5hbWUuICBJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpc1xueW91cnNlbGY6XG5cbmNsYXNzIGNsYXNzIHBkYi5QZGIoY29tcGxldGVrZXk9XCd0YWJcJywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHNraXA9Tm9uZSwgbm9zaWdpbnQ9RmFsc2UpXG5cbiAgIGBgUGRiYGAgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nIGBgY21kLkNtZGBgIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICBgYGNvbnRpbnVlYGAgY29tbWFuZC4gVGhpcyBhbGxvd3MgeW91IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyXG4gICBhZ2FpbiBieSBwcmVzc2luZyBDdHJsLUMuICBJZiB5b3Ugd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlRcbiAgIGhhbmRsZXIsIHNldCAqbm9zaWdpbnQqIHRvdCB0cnVlLlxuXG4gICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6XG5cbiAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bXCdkamFuZ28uKlwnXSkuc2V0X3RyYWNlKClcblxuICAgTmV3IGluIHZlcnNpb24gMy4xOiBUaGUgKnNraXAqIGFyZ3VtZW50LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlRcbiAgIGhhbmRsZXIgd2FzIG5ldmVyIHNldCBieSBQZGIuXG5cbiAgIHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuICAgc2V0X3RyYWNlKClcblxuICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS5cblxuXG5EZWJ1Z2dlciBDb21tYW5kc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIGNvbW1hbmRzIHJlY29nbml6ZWQgYnkgdGhlIGRlYnVnZ2VyIGFyZSBsaXN0ZWQgYmVsb3cuICBNb3N0XG5jb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gb25lIG9yIHR3byBsZXR0ZXJzIGFzIGluZGljYXRlZDsgZS5nLlxuYGBoKGVscClgYCBtZWFucyB0aGF0IGVpdGhlciBgYGhgYCBvciBgYGhlbHBgYCBjYW4gYmUgdXNlZCB0byBlbnRlclxudGhlIGhlbHAgY29tbWFuZCAoYnV0IG5vdCBgYGhlYGAgb3IgYGBoZWxgYCwgbm9yIGBgSGBgIG9yIGBgSGVscGBgIG9yXG5gYEhFTFBgYCkuICBBcmd1bWVudHMgdG8gY29tbWFuZHMgbXVzdCBiZSBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZVxuKHNwYWNlcyBvciB0YWJzKS4gIE9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgZW5jbG9zZWQgaW4gc3F1YXJlIGJyYWNrZXRzXG4oYGBbXWBgKSBpbiB0aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbihgYHxgYCkuXG5cbkVudGVyaW5nIGEgYmxhbmsgbGluZSByZXBlYXRzIHRoZSBsYXN0IGNvbW1hbmQgZW50ZXJlZC4gIEV4Y2VwdGlvbjogaWZcbnRoZSBsYXN0IGNvbW1hbmQgd2FzIGEgYGBsaXN0YGAgY29tbWFuZCwgdGhlIG5leHQgMTEgbGluZXMgYXJlIGxpc3RlZC5cblxuQ29tbWFuZHMgdGhhdCB0aGUgZGVidWdnZXIgZG9lc25cJ3QgcmVjb2duaXplIGFyZSBhc3N1bWVkIHRvIGJlIFB5dGhvblxuc3RhdGVtZW50cyBhbmQgYXJlIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBwcm9ncmFtIGJlaW5nXG5kZWJ1Z2dlZC4gIFB5dGhvbiBzdGF0ZW1lbnRzIGNhbiBhbHNvIGJlIHByZWZpeGVkIHdpdGggYW4gZXhjbGFtYXRpb25cbnBvaW50IChgYCFgYCkuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5XG5gYDs7YGAuICAoQSBzaW5nbGUgYGA7YGAgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3Jcbm11bHRpcGxlIGNvbW1hbmRzIGluIGEgbGluZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pICBOb1xuaW50ZWxsaWdlbmNlIGlzIGFwcGxpZWQgdG8gc2VwYXJhdGluZyB0aGUgY29tbWFuZHM7IHRoZSBpbnB1dCBpcyBzcGxpdFxuYXQgdGhlIGZpcnN0IGBgOztgYCBwYWlyLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2YgYSBxdW90ZWRcbnN0cmluZy5cblxuSWYgYSBmaWxlIGBgLnBkYnJjYGAgZXhpc3RzIGluIHRoZSB1c2VyXCdzIGhvbWUgZGlyZWN0b3J5IG9yIGluIHRoZVxuY3VycmVudCBkaXJlY3RvcnksIGl0IGlzIHJlYWQgaW4gYW5kIGV4ZWN1dGVkIGFzIGlmIGl0IGhhZCBiZWVuIHR5cGVkXG5hdCB0aGUgZGVidWdnZXIgcHJvbXB0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBhbGlhc2VzLiAgSWZcbmJvdGggZmlsZXMgZXhpc3QsIHRoZSBvbmUgaW4gdGhlIGhvbWUgZGlyZWN0b3J5IGlzIHJlYWQgZmlyc3QgYW5kXG5hbGlhc2VzIGRlZmluZWQgdGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGxvY2FsIGZpbGUuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IGBgLnBkYnJjYGAgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyBgYGNvbnRpbnVlYGAgb3IgYGBuZXh0YGAuICBQcmV2aW91c2x5LFxudGhlc2UgY29tbWFuZHMgaGFkIG5vIGVmZmVjdC5cblxuaChlbHApIFtjb21tYW5kXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBwcmludCB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMuICBXaXRoIGFcbiAgICpjb21tYW5kKiBhcyBhcmd1bWVudCwgcHJpbnQgaGVscCBhYm91dCB0aGF0IGNvbW1hbmQuICBgYGhlbHAgcGRiYGBcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlIGBgcGRiYGBcbiAgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllcixcbiAgIGBgaGVscCBleGVjYGAgbXVzdCBiZSBlbnRlcmVkIHRvIGdldCBoZWxwIG9uIHRoZSBgYCFgYCBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uIGBgc3lzLnBhdGhgYC4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciBgYGJyZWFrYGAuXG5cbmNsKGVhcikgW2ZpbGVuYW1lOmxpbmVubyB8IGJwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBXaXRoIGEgKmZpbGVuYW1lOmxpbmVubyogYXJndW1lbnQsIGNsZWFyIGFsbCB0aGUgYnJlYWtwb2ludHMgYXRcbiAgIHRoaXMgbGluZS4gV2l0aCBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGJyZWFrcG9pbnQgbnVtYmVycywgY2xlYXJcbiAgIHRob3NlIGJyZWFrcG9pbnRzLiBXaXRob3V0IGFyZ3VtZW50LCBjbGVhciBhbGwgYnJlYWtzIChidXQgZmlyc3RcbiAgIGFzayBjb25maXJtYXRpb24pLlxuXG5kaXNhYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRGlzYWJsZSB0aGUgYnJlYWtwb2ludHMgZ2l2ZW4gYXMgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZlxuICAgYnJlYWtwb2ludCBudW1iZXJzLiAgRGlzYWJsaW5nIGEgYnJlYWtwb2ludCBtZWFucyBpdCBjYW5ub3QgY2F1c2VcbiAgIHRoZSBwcm9ncmFtIHRvIHN0b3AgZXhlY3V0aW9uLCBidXQgdW5saWtlIGNsZWFyaW5nIGEgYnJlYWtwb2ludCwgaXRcbiAgIHJlbWFpbnMgaW4gdGhlIGxpc3Qgb2YgYnJlYWtwb2ludHMgYW5kIGNhbiBiZSAocmUtKWVuYWJsZWQuXG5cbmVuYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIEVuYWJsZSB0aGUgYnJlYWtwb2ludHMgc3BlY2lmaWVkLlxuXG5pZ25vcmUgYnBudW1iZXIgW2NvdW50XVxuXG4gICBTZXQgdGhlIGlnbm9yZSBjb3VudCBmb3IgdGhlIGdpdmVuIGJyZWFrcG9pbnQgbnVtYmVyLiAgSWYgY291bnQgaXNcbiAgIG9taXR0ZWQsIHRoZSBpZ25vcmUgY291bnQgaXMgc2V0IHRvIDAuICBBIGJyZWFrcG9pbnQgYmVjb21lcyBhY3RpdmVcbiAgIHdoZW4gdGhlIGlnbm9yZSBjb3VudCBpcyB6ZXJvLiAgV2hlbiBub24temVybywgdGhlIGNvdW50IGlzXG4gICBkZWNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIGJyZWFrcG9pbnQgaXMgcmVhY2hlZCBhbmQgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG5vdCBkaXNhYmxlZCBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uIGV2YWx1YXRlcyB0byB0cnVlLlxuXG5jb25kaXRpb24gYnBudW1iZXIgW2NvbmRpdGlvbl1cblxuICAgU2V0IGEgbmV3ICpjb25kaXRpb24qIGZvciB0aGUgYnJlYWtwb2ludCwgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLiAgSWYgKmNvbmRpdGlvbipcbiAgIGlzIGFic2VudCwgYW55IGV4aXN0aW5nIGNvbmRpdGlvbiBpcyByZW1vdmVkOyBpLmUuLCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbWFkZSB1bmNvbmRpdGlvbmFsLlxuXG5jb21tYW5kcyBbYnBudW1iZXJdXG5cbiAgIFNwZWNpZnkgYSBsaXN0IG9mIGNvbW1hbmRzIGZvciBicmVha3BvaW50IG51bWJlciAqYnBudW1iZXIqLiAgVGhlXG4gICBjb21tYW5kcyB0aGVtc2VsdmVzIGFwcGVhciBvbiB0aGUgZm9sbG93aW5nIGxpbmVzLiAgVHlwZSBhIGxpbmVcbiAgIGNvbnRhaW5pbmcganVzdCBgYGVuZGBgIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGVcbiAgICAgIChjb20pIGVuZFxuICAgICAgKFBkYilcblxuICAgVG8gcmVtb3ZlIGFsbCBjb21tYW5kcyBmcm9tIGEgYnJlYWtwb2ludCwgdHlwZSBjb21tYW5kcyBhbmQgZm9sbG93XG4gICBpdCBpbW1lZGlhdGVseSB3aXRoIGBgZW5kYGA7IHRoYXQgaXMsIGdpdmUgbm8gY29tbWFuZHMuXG5cbiAgIFdpdGggbm8gKmJwbnVtYmVyKiBhcmd1bWVudCwgY29tbWFuZHMgcmVmZXJzIHRvIHRoZSBsYXN0IGJyZWFrcG9pbnRcbiAgIHNldC5cblxuICAgWW91IGNhbiB1c2UgYnJlYWtwb2ludCBjb21tYW5kcyB0byBzdGFydCB5b3VyIHByb2dyYW0gdXAgYWdhaW4uXG4gICBTaW1wbHkgdXNlIHRoZSBjb250aW51ZSBjb21tYW5kLCBvciBzdGVwLCBvciBhbnkgb3RoZXIgY29tbWFuZCB0aGF0XG4gICByZXN1bWVzIGV4ZWN1dGlvbi5cblxuICAgU3BlY2lmeWluZyBhbnkgY29tbWFuZCByZXN1bWluZyBleGVjdXRpb24gKGN1cnJlbnRseSBjb250aW51ZSxcbiAgIHN0ZXAsIG5leHQsIHJldHVybiwganVtcCwgcXVpdCBhbmQgdGhlaXIgYWJicmV2aWF0aW9ucykgdGVybWluYXRlc1xuICAgdGhlIGNvbW1hbmQgbGlzdCAoYXMgaWYgdGhhdCBjb21tYW5kIHdhcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieVxuICAgZW5kKS4gVGhpcyBpcyBiZWNhdXNlIGFueSB0aW1lIHlvdSByZXN1bWUgZXhlY3V0aW9uIChldmVuIHdpdGggYVxuICAgc2ltcGxlIG5leHQgb3Igc3RlcCksIHlvdSBtYXkgZW5jb3VudGVyIGFub3RoZXIgYnJlYWtwb2ludC0td2hpY2hcbiAgIGNvdWxkIGhhdmUgaXRzIG93biBjb21tYW5kIGxpc3QsIGxlYWRpbmcgdG8gYW1iaWd1aXRpZXMgYWJvdXQgd2hpY2hcbiAgIGxpc3QgdG8gZXhlY3V0ZS5cblxuICAgSWYgeW91IHVzZSB0aGUgXCdzaWxlbnRcJyBjb21tYW5kIGluIHRoZSBjb21tYW5kIGxpc3QsIHRoZSB1c3VhbFxuICAgbWVzc2FnZSBhYm91dCBzdG9wcGluZyBhdCBhIGJyZWFrcG9pbnQgaXMgbm90IHByaW50ZWQuICBUaGlzIG1heSBiZVxuICAgZGVzaXJhYmxlIGZvciBicmVha3BvaW50cyB0aGF0IGFyZSB0byBwcmludCBhIHNwZWNpZmljIG1lc3NhZ2UgYW5kXG4gICB0aGVuIGNvbnRpbnVlLiAgSWYgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZHMgcHJpbnQgYW55dGhpbmcsIHlvdVxuICAgc2VlIG5vIHNpZ24gdGhhdCB0aGUgYnJlYWtwb2ludCB3YXMgcmVhY2hlZC5cblxucyh0ZXApXG5cbiAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgbGluZSwgc3RvcCBhdCB0aGUgZmlyc3QgcG9zc2libGUgb2NjYXNpb25cbiAgIChlaXRoZXIgaW4gYSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvciBvbiB0aGUgbmV4dCBsaW5lIGluIHRoZVxuICAgY3VycmVudCBmdW5jdGlvbikuXG5cbm4oZXh0KVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbiBpc1xuICAgcmVhY2hlZCBvciBpdCByZXR1cm5zLiAgKFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYGBuZXh0YGAgYW5kXG4gICBgYHN0ZXBgYCBpcyB0aGF0IGBgc3RlcGBgIHN0b3BzIGluc2lkZSBhIGNhbGxlZCBmdW5jdGlvbiwgd2hpbGVcbiAgIGBgbmV4dGBgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkgZnVsbCBzcGVlZCwgb25seVxuICAgc3RvcHBpbmcgYXQgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pXG5cbnVudChpbCkgW2xpbmVub11cblxuICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZC5cblxuICAgV2l0aCBhIGxpbmUgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBpcyByZWFjaGVkLiAgSW4gYm90aCBjYXNlcywgYWxzbyBzdG9wIHdoZW5cbiAgIHRoZSBjdXJyZW50IGZyYW1lIHJldHVybnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEFsbG93IGdpdmluZyBhbiBleHBsaWNpdCBsaW5lIG51bWJlci5cblxucihldHVybilcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuXG5cbmMob250KGludWUpKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApIGxpbmVub1xuXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvciBpbnN0YW5jZVxuICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgYGBmb3JgYCBsb29wIG9yIG91dFxuICAgb2YgYSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbmwoaXN0KSBbZmlyc3RbLCBsYXN0XV1cblxuICAgTGlzdCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZmlsZS4gIFdpdGhvdXQgYXJndW1lbnRzLCBsaXN0IDExXG4gICBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZSBvciBjb250aW51ZSB0aGUgcHJldmlvdXMgbGlzdGluZy5cbiAgIFdpdGggYGAuYGAgYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuXG4gICBXaXRoIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgYXQgdGhhdCBsaW5lLiAgV2l0aCB0d29cbiAgIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7IGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbGVzc1xuICAgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY291bnQuXG5cbiAgIFRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW5kaWNhdGVkIGJ5IGBgLT5gYC4gIElmXG4gICBhbiBleGNlcHRpb24gaXMgYmVpbmcgZGVidWdnZWQsIHRoZSBsaW5lIHdoZXJlIHRoZSBleGNlcHRpb24gd2FzXG4gICBvcmlnaW5hbGx5IHJhaXNlZCBvciBwcm9wYWdhdGVkIGlzIGluZGljYXRlZCBieSBgYD4+YGAsIGlmIGl0XG4gICBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgbGluZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgYGA+PmBgIG1hcmtlci5cblxubGwgfCBsb25nbGlzdFxuXG4gICBMaXN0IGFsbCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgZnJhbWUuXG4gICBJbnRlcmVzdGluZyBsaW5lcyBhcmUgbWFya2VkIGFzIGZvciBgYGxpc3RgYC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5hKHJncylcblxuICAgUHJpbnQgdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uXG5cbnAocmludCkgZXhwcmVzc2lvblxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0c1xuICAgdmFsdWUuXG5cbnBwIGV4cHJlc3Npb25cblxuICAgTGlrZSB0aGUgYGBwcmludGBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSBgYHBwcmludGBgIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgYGBjb2RlYGAgbW9kdWxlKSB3aG9zZVxuICAgZ2xvYmFsIG5hbWVzcGFjZSBjb250YWlucyBhbGwgdGhlIChnbG9iYWwgYW5kIGxvY2FsKSBuYW1lcyBmb3VuZCBpblxuICAgdGhlIGN1cnJlbnQgc2NvcGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYWxpYXMgW25hbWUgW2NvbW1hbmRdXVxuXG4gICBDcmVhdGUgYW4gYWxpYXMgY2FsbGVkICpuYW1lKiB0aGF0IGV4ZWN1dGVzICpjb21tYW5kKi4gIFRoZSBjb21tYW5kXG4gICBtdXN0ICpub3QqIGJlIGVuY2xvc2VkIGluIHF1b3Rlcy4gIFJlcGxhY2VhYmxlIHBhcmFtZXRlcnMgY2FuIGJlXG4gICBpbmRpY2F0ZWQgYnkgYGAlMWBgLCBgYCUyYGAsIGFuZCBzbyBvbiwgd2hpbGUgYGAlKmBgIGlzIHJlcGxhY2VkIGJ5XG4gICBhbGwgdGhlIHBhcmFtZXRlcnMuIElmIG5vIGNvbW1hbmQgaXMgZ2l2ZW4sIHRoZSBjdXJyZW50IGFsaWFzIGZvclxuICAgKm5hbWUqIGlzIHNob3duLiBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCBhbGwgYWxpYXNlcyBhcmUgbGlzdGVkLlxuXG4gICBBbGlhc2VzIG1heSBiZSBuZXN0ZWQgYW5kIGNhbiBjb250YWluIGFueXRoaW5nIHRoYXQgY2FuIGJlIGxlZ2FsbHlcbiAgIHR5cGVkIGF0IHRoZSBwZGIgcHJvbXB0LiAgTm90ZSB0aGF0IGludGVybmFsIHBkYiBjb21tYW5kcyAqY2FuKiBiZVxuICAgb3ZlcnJpZGRlbiBieSBhbGlhc2VzLiAgU3VjaCBhIGNvbW1hbmQgaXMgdGhlbiBoaWRkZW4gdW50aWwgdGhlXG4gICBhbGlhcyBpcyByZW1vdmVkLiAgQWxpYXNpbmcgaXMgcmVjdXJzaXZlbHkgYXBwbGllZCB0byB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIGNvbW1hbmQgbGluZTsgYWxsIG90aGVyIHdvcmRzIGluIHRoZSBsaW5lIGFyZSBsZWZ0XG4gICBhbG9uZS5cblxuICAgQXMgYW4gZXhhbXBsZSwgaGVyZSBhcmUgdHdvIHVzZWZ1bCBhbGlhc2VzIChlc3BlY2lhbGx5IHdoZW4gcGxhY2VkXG4gICBpbiB0aGUgYGAucGRicmNgYCBmaWxlKTpcblxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgKHVzYWdlICJwaSBjbGFzc0luc3QiKVxuICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCgiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXSlcbiAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzIGluIHNlbGZcbiAgICAgIGFsaWFzIHBzIHBpIHNlbGZcblxudW5hbGlhcyBuYW1lXG5cbiAgIERlbGV0ZSB0aGUgc3BlY2lmaWVkIGFsaWFzLlxuXG4hIHN0YXRlbWVudFxuXG4gICBFeGVjdXRlIHRoZSAob25lLWxpbmUpICpzdGF0ZW1lbnQqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBjdXJyZW50XG4gICBzdGFjayBmcmFtZS4gVGhlIGV4Y2xhbWF0aW9uIHBvaW50IGNhbiBiZSBvbWl0dGVkIHVubGVzcyB0aGUgZmlyc3RcbiAgIHdvcmQgb2YgdGhlIHN0YXRlbWVudCByZXNlbWJsZXMgYSBkZWJ1Z2dlciBjb21tYW5kLiAgVG8gc2V0IGFcbiAgIGdsb2JhbCB2YXJpYWJsZSwgeW91IGNhbiBwcmVmaXggdGhlIGFzc2lnbm1lbnQgY29tbWFuZCB3aXRoIGFcbiAgIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoIGBgc2hsZXhgYCBhbmQgdGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuZXdcbiAgIGBgc3lzLmFyZ3ZgYC4gSGlzdG9yeSwgYnJlYWtwb2ludHMsIGFjdGlvbnMgYW5kIGRlYnVnZ2VyIG9wdGlvbnNcbiAgIGFyZSBwcmVzZXJ2ZWQuIGBgcmVzdGFydGBgIGlzIGFuIGFsaWFzIGZvciBgYHJ1bmBgLlxuXG5xKHVpdClcblxuICAgUXVpdCBmcm9tIHRoZSBkZWJ1Z2dlci4gIFRoZSBwcm9ncmFtIGJlaW5nIGV4ZWN1dGVkIGlzIGFib3J0ZWQuXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gV2hldGhlciBhIGZyYW1lIGlzIGNvbnNpZGVyZWQgdG8gb3JpZ2luYXRlIGluIGEgY2VydGFpbiBtb2R1bGUgaXNcbiAgICBkZXRlcm1pbmVkIGJ5IHRoZSBgYF9fbmFtZV9fYGAgaW4gdGhlIGZyYW1lIGdsb2JhbHMuXG4nLAorICdkZWwnOiAnXG5UaGUgYGBkZWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBkZWxfc3RtdCA6Oj0gImRlbCIgdGFyZ2V0X2xpc3RcblxuRGVsZXRpb24gaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHdheSBhc3NpZ25tZW50IGlzXG5kZWZpbmVkLiBSYXRoZXIgdGhhdCBzcGVsbGluZyBpdCBvdXQgaW4gZnVsbCBkZXRhaWxzLCBoZXJlIGFyZSBzb21lXG5oaW50cy5cblxuRGVsZXRpb24gb2YgYSB0YXJnZXQgbGlzdCByZWN1cnNpdmVseSBkZWxldGVzIGVhY2ggdGFyZ2V0LCBmcm9tIGxlZnRcbnRvIHJpZ2h0LlxuXG5EZWxldGlvbiBvZiBhIG5hbWUgcmVtb3ZlcyB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgZnJvbSB0aGUgbG9jYWwgb3Jcbmdsb2JhbCBuYW1lc3BhY2UsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuYW1lIG9jY3VycyBpbiBhIGBgZ2xvYmFsYGBcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuXG5cbkRlbGV0aW9uIG9mIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCBzdWJzY3JpcHRpb25zIGFuZCBzbGljaW5ncyBpcyBwYXNzZWRcbnRvIHRoZSBwcmltYXJ5IG9iamVjdCBpbnZvbHZlZDsgZGVsZXRpb24gb2YgYSBzbGljaW5nIGlzIGluIGdlbmVyYWxcbmVxdWl2YWxlbnQgdG8gYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW5cbnRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2xpY2VkIG9iamVjdCkuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjIuXG4nLAogICdkaWN0JzogJ1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRpY3QgY29tcHJlaGVuc2lvbiwgaW4gY29udHJhc3QgdG8gbGlzdCBhbmQgc2V0IGNvbXByZWhlbnNpb25zLFxubmVlZHMgdHdvIGV4cHJlc3Npb25zIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gZm9sbG93ZWQgYnkgdGhlIHVzdWFsXG4iZm9yIiBhbmQgImlmIiBjbGF1c2VzLiBXaGVuIHRoZSBjb21wcmVoZW5zaW9uIGlzIHJ1biwgdGhlIHJlc3VsdGluZ1xua2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5IGluIHRoZSBvcmRlclxudGhleSBhcmUgcHJvZHVjZWQuXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCiAgJ2R5bmFtaWMtZmVhdHVyZXMnOiAnXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSBgYFN5bnRheEVycm9yYGAuXG5cblRoZSBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlIGBgZXhlYygpYGAgYW5kIGBgZXZhbCgpYGAgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCiAgJ2Vsc2UnOiAnXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKICAnZXhjZXB0aW9ucyc6ICdcbkV4Y2VwdGlvbnNcbioqKioqKioqKipcblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgYGByYWlzZWBgIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgdHJ5YGAgLi4uIGBgZXhjZXB0YGAgc3RhdGVtZW50LiAgVGhlXG5gYGZpbmFsbHlgYCBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuYGBTeXN0ZW1FeGl0YGAuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlIGBgZXhjZXB0YGAgY2xhdXNlXG5pcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2VcbnRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuXG5iZSByZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXRcbnRoZSBleGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpciBjb250ZW50c1xuICBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXQgd2FybmluZ1xuICBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlciBtdWx0aXBsZVxuICB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGB0cnlgYCBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgYGByYWlzZWBgIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZVxuICAgIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLlxuJywKLSAnZXhlY21vZGVsJzogJ1xuRXhlY3V0aW9uIG1vZGVsXG4qKioqKioqKioqKioqKipcblxuXG5OYW1pbmcgYW5kIGJpbmRpbmdcbj09PT09PT09PT09PT09PT09PVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlIFwnKiotYyoqXCcgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzIGBgbm9ubG9jYWxgYC4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlXG5sZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGVcbmJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2tcbmJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuSWYgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBoYXMgbm90IGJlZW4gYm91bmQsIGFcbmBgVW5ib3VuZExvY2FsRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgYGBVbmJvdW5kTG9jYWxFcnJvcmBgIGlzIGFcbnN1YmNsYXNzIG9mIGBgTmFtZUVycm9yYGAuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG5gYGltcG9ydGBgIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCBgYGZvcmBgIGxvb3AgaGVhZGVyLCBvclxuYWZ0ZXIgYGBhc2BgIGluIGEgYGB3aXRoYGAgc3RhdGVtZW50IG9yIGBgZXhjZXB0YGAgY2xhdXNlLiBUaGVcbmBgaW1wb3J0YGAgc3RhdGVtZW50IG9mIHRoZSBmb3JtIGBgZnJvbSAuLi4gaW1wb3J0ICpgYCBiaW5kcyBhbGwgbmFtZXNcbmRlZmluZWQgaW4gdGhlIGltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuXG51bmRlcnNjb3JlLiAgVGhpcyBmb3JtIG1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgYGBkZWxgYCBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuICBJdFxuaXMgaWxsZWdhbCB0byB1bmJpbmQgYSBuYW1lIHRoYXQgaXMgcmVmZXJlbmNlZCBieSBhbiBlbmNsb3Npbmcgc2NvcGU7XG50aGUgY29tcGlsZXIgd2lsbCByZXBvcnQgYSBgYFN5bnRheEVycm9yYGAuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZVxubmFtZSBzcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW5cbnRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWxcbm5hbWVzcGFjZSBieSBzZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGVcbm1vZHVsZSBjb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlXG5uYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBgYGJ1aWx0aW5zYGAuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpc1xuc2VhcmNoZWQgZmlyc3QuICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGluc1xubmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlIGdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mXG50aGUgbmFtZS5cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgYGBfX2J1aWx0aW5zX19gYCBpbiBpdHNcbmdsb2JhbCBuYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlXG5sYXR0ZXIgY2FzZSB0aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZVxuYGBfX21haW5fX2BgIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlXG5gYGJ1aWx0aW5zYGA7IHdoZW4gaW4gYW55IG90aGVyIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyBhbiBhbGlhc1xuZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGl0c2VsZi5cbmBgX19idWlsdGluc19fYGAgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZCBkaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhXG53ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuYGBfX2J1aWx0aW5zX19gYDsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkIGBgaW1wb3J0YGBcbnRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuYGBfX21haW5fX2BgLlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb24gaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGFcbmZyZWUgdmFyaWFibGUgY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpc1xudHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuVGhlIGBgZXZhbCgpYGAgYW5kIGBgZXhlYygpYGAgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgYGBleGVjKClgYCBhbmQgYGBldmFsKClgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuXG5cbkV4Y2VwdGlvbnNcbj09PT09PT09PT1cblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgYGByYWlzZWBgIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgdHJ5YGAgLi4uIGBgZXhjZXB0YGAgc3RhdGVtZW50LiAgVGhlXG5gYGZpbmFsbHlgYCBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuYGBTeXN0ZW1FeGl0YGAuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlIGBgZXhjZXB0YGAgY2xhdXNlXG5pcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2VcbnRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuXG5iZSByZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXRcbnRoZSBleGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpciBjb250ZW50c1xuICBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXQgd2FybmluZ1xuICBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlciBtdWx0aXBsZVxuICB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGB0cnlgYCBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgYGByYWlzZWBgIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZVxuICAgIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLlxuJywKKyAnZXhlY21vZGVsJzogJ1xuRXhlY3V0aW9uIG1vZGVsXG4qKioqKioqKioqKioqKipcblxuXG5OYW1pbmcgYW5kIGJpbmRpbmdcbj09PT09PT09PT09PT09PT09PVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlIFwnKiotYyoqXCcgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzIGBgbm9ubG9jYWxgYC4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlXG5sZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGVcbmJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2tcbmJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbldoZW4gYSBuYW1lIGlzIG5vdCBmb3VuZCBhdCBhbGwsIGEgYGBOYW1lRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLlxuSWYgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBoYXMgbm90IGJlZW4gYm91bmQsIGFcbmBgVW5ib3VuZExvY2FsRXJyb3JgYCBleGNlcHRpb24gaXMgcmFpc2VkLiAgYGBVbmJvdW5kTG9jYWxFcnJvcmBgIGlzIGFcbnN1YmNsYXNzIG9mIGBgTmFtZUVycm9yYGAuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG5gYGltcG9ydGBgIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCBgYGZvcmBgIGxvb3AgaGVhZGVyLCBvclxuYWZ0ZXIgYGBhc2BgIGluIGEgYGB3aXRoYGAgc3RhdGVtZW50IG9yIGBgZXhjZXB0YGAgY2xhdXNlLiBUaGVcbmBgaW1wb3J0YGAgc3RhdGVtZW50IG9mIHRoZSBmb3JtIGBgZnJvbSAuLi4gaW1wb3J0ICpgYCBiaW5kcyBhbGwgbmFtZXNcbmRlZmluZWQgaW4gdGhlIGltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuXG51bmRlcnNjb3JlLiAgVGhpcyBmb3JtIG1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgYGBkZWxgYCBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbiBvY2N1cnMgYW55d2hlcmUgd2l0aGluIGEgY29kZSBibG9jaywgYWxsXG51c2VzIG9mIHRoZSBuYW1lIHdpdGhpbiB0aGUgYmxvY2sgYXJlIHRyZWF0ZWQgYXMgcmVmZXJlbmNlcyB0byB0aGVcbmN1cnJlbnQgYmxvY2suICBUaGlzIGNhbiBsZWFkIHRvIGVycm9ycyB3aGVuIGEgbmFtZSBpcyB1c2VkIHdpdGhpbiBhXG5ibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUgaXMgc3VidGxlLiAgUHl0aG9uIGxhY2tzXG5kZWNsYXJhdGlvbnMgYW5kIGFsbG93cyBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucyB0byBvY2N1ciBhbnl3aGVyZVxud2l0aGluIGEgY29kZSBibG9jay4gIFRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgYSBjb2RlIGJsb2NrIGNhbiBiZVxuZGV0ZXJtaW5lZCBieSBzY2FubmluZyB0aGUgZW50aXJlIHRleHQgb2YgdGhlIGJsb2NrIGZvciBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cbklmIHRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZVxubmFtZSBzcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW5cbnRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWxcbm5hbWVzcGFjZSBieSBzZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGVcbm1vZHVsZSBjb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlXG5uYW1lc3BhY2Ugb2YgdGhlIG1vZHVsZSBgYGJ1aWx0aW5zYGAuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpc1xuc2VhcmNoZWQgZmlyc3QuICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGluc1xubmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlIGdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mXG50aGUgbmFtZS5cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgYGBfX2J1aWx0aW5zX19gYCBpbiBpdHNcbmdsb2JhbCBuYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlXG5sYXR0ZXIgY2FzZSB0aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZVxuYGBfX21haW5fX2BgIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlXG5gYGJ1aWx0aW5zYGA7IHdoZW4gaW4gYW55IG90aGVyIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyBhbiBhbGlhc1xuZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGl0c2VsZi5cbmBgX19idWlsdGluc19fYGAgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZCBkaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhXG53ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuYGBfX2J1aWx0aW5zX19gYDsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkIGBgaW1wb3J0YGBcbnRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuYGBfX21haW5fX2BgLlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb24gaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGFcbmZyZWUgdmFyaWFibGUgY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpc1xudHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuVGhlIGBgZXZhbCgpYGAgYW5kIGBgZXhlYygpYGAgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgYGBleGVjKClgYCBhbmQgYGBldmFsKClgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuXG5cbkV4Y2VwdGlvbnNcbj09PT09PT09PT1cblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgYGByYWlzZWBgIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlIGBgdHJ5YGAgLi4uIGBgZXhjZXB0YGAgc3RhdGVtZW50LiAgVGhlXG5gYGZpbmFsbHlgYCBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuYGBTeXN0ZW1FeGl0YGAuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlIGBgZXhjZXB0YGAgY2xhdXNlXG5pcyBzZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2VcbnRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuXG5iZSByZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXRcbnRoZSBleGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpciBjb250ZW50c1xuICBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXQgd2FybmluZ1xuICBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlciBtdWx0aXBsZVxuICB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGB0cnlgYCBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgYGByYWlzZWBgIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZVxuICAgIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLlxuJywKICAnZXhwcmxpc3RzJzogJ1xuRXhwcmVzc2lvbiBsaXN0c1xuKioqKioqKioqKioqKioqKlxuXG4gICBleHByZXNzaW9uX2xpc3QgOjo9IGV4cHJlc3Npb24gKCAiLCIgZXhwcmVzc2lvbiApKiBbIiwiXVxuXG5BbiBleHByZXNzaW9uIGxpc3QgY29udGFpbmluZyBhdCBsZWFzdCBvbmUgY29tbWEgeWllbGRzIGEgdHVwbGUuICBUaGVcbmxlbmd0aCBvZiB0aGUgdHVwbGUgaXMgdGhlIG51bWJlciBvZiBleHByZXNzaW9ucyBpbiB0aGUgbGlzdC4gIFRoZVxuZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQuXG5cblRoZSB0cmFpbGluZyBjb21tYSBpcyByZXF1aXJlZCBvbmx5IHRvIGNyZWF0ZSBhIHNpbmdsZSB0dXBsZSAoYS5rLmEuIGFcbipzaW5nbGV0b24qKTsgaXQgaXMgb3B0aW9uYWwgaW4gYWxsIG90aGVyIGNhc2VzLiAgQSBzaW5nbGUgZXhwcmVzc2lvblxud2l0aG91dCBhIHRyYWlsaW5nIGNvbW1hIGRvZXNuXCd0IGNyZWF0ZSBhIHR1cGxlLCBidXQgcmF0aGVyIHlpZWxkcyB0aGVcbnZhbHVlIG9mIHRoYXQgZXhwcmVzc2lvbi4gKFRvIGNyZWF0ZSBhbiBlbXB0eSB0dXBsZSwgdXNlIGFuIGVtcHR5IHBhaXJcbm9mIHBhcmVudGhlc2VzOiBgYCgpYGAuKVxuJywKICAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCBgYDA3N2UwMTBgYCBpcyBsZWdhbCwgYW5kIGRlbm90ZXMgdGhlIHNhbWVcbm51bWJlciBhcyBgYDc3ZTEwYGAuIFRoZSBhbGxvd2VkIHJhbmdlIG9mIGZsb2F0aW5nIHBvaW50IGxpdGVyYWxzIGlzXG5pbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuIFNvbWUgZXhhbXBsZXMgb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHM6XG5cbiAgIDMuMTQgICAgMTAuICAgIC4wMDEgICAgMWUxMDAgICAgMy4xNGUtMTAgICAgMGUwXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSBgYC0xYGBcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yIGBgLWBgIGFuZCB0aGVcbmxpdGVyYWwgYGAxYGAuXG4nLAogICdmb3InOiAnXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBmb3JgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGFcbnNlcXVlbmNlIChzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuYGBleHByZXNzaW9uX2xpc3RgYC4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIGBgU3RvcEl0ZXJhdGlvbmBgXG5leGNlcHRpb24pLCB0aGUgc3VpdGUgaW4gdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSBgYGJyZWFrYGAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgYGBlbHNlYGAgY2xhdXNlXCdzIHN1aXRlLiAgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZFxuY29udGludWVzIHdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgYGBlbHNlYGAgY2xhdXNlIGlmIHRoZXJlIHdhc1xubm8gbmV4dCBpdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGByYW5nZSgpYGAgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyBgYGZvclxuaSA6PSBhIHRvIGIgZG9gYDsgZS5nLiwgYGBsaXN0KHJhbmdlKDMpKWBgIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSxcbjJdYGAuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGxvb3BcbiAgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKLSAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGBzdHIuZm9ybWF0KClgYCBtZXRob2QgYW5kIHRoZSBgYEZvcm1hdHRlcmBgIGNsYXNzIHNoYXJlIHRoZSBzYW1lXG5zeW50YXggZm9yIGZvcm1hdCBzdHJpbmdzIChhbHRob3VnaCBpbiB0aGUgY2FzZSBvZiBgYEZvcm1hdHRlcmBgLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbmBge31gYC4gQW55dGhpbmcgdGhhdCBpcyBub3QgY29udGFpbmVkIGluIGJyYWNlcyBpcyBjb25zaWRlcmVkIGxpdGVyYWxcbnRleHQsIHdoaWNoIGlzIGNvcGllZCB1bmNoYW5nZWQgdG8gdGhlIG91dHB1dC4gIElmIHlvdSBuZWVkIHRvIGluY2x1ZGVcbmEgYnJhY2UgY2hhcmFjdGVyIGluIHRoZSBsaXRlcmFsIHRleHQsIGl0IGNhbiBiZSBlc2NhcGVkIGJ5IGRvdWJsaW5nOlxuYGB7e2BgIGFuZCBgYH19YGAuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50IGBgXCchXCdgYCwgYW5kIGEgKmZvcm1hdF9zcGVjKiwgd2hpY2hcbmlzIHByZWNlZGVkIGJ5IGEgY29sb24gYGBcJzpcJ2BgLiAgVGhlc2Ugc3BlY2lmeSBhIG5vbi1kZWZhdWx0IGZvcm1hdFxuZm9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZS5cblxuU2VlIGFsc28gdGhlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBzZWN0aW9uLlxuXG5UaGUgKmZpZWxkX25hbWUqIGl0c2VsZiBiZWdpbnMgd2l0aCBhbiAqYXJnX25hbWUqIHRoYXQgaXMgZWl0aGVyXG5laXRoZXIgYSBudW1iZXIgb3IgYSBrZXl3b3JkLiAgSWYgaXRcJ3MgYSBudW1iZXIsIGl0IHJlZmVycyB0byBhXG5wb3NpdGlvbmFsIGFyZ3VtZW50LCBhbmQgaWYgaXRcJ3MgYSBrZXl3b3JkLCBpdCByZWZlcnMgdG8gYSBuYW1lZFxua2V5d29yZCBhcmd1bWVudC4gIElmIHRoZSBudW1lcmljYWwgYXJnX25hbWVzIGluIGEgZm9ybWF0IHN0cmluZyBhcmVcbjAsIDEsIDIsIC4uLiBpbiBzZXF1ZW5jZSwgdGhleSBjYW4gYWxsIGJlIG9taXR0ZWQgKG5vdCBqdXN0IHNvbWUpIGFuZFxudGhlIG51bWJlcnMgMCwgMSwgMiwgLi4uIHdpbGwgYmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBpbiB0aGF0IG9yZGVyLlxuVGhlICphcmdfbmFtZSogY2FuIGJlIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2YgaW5kZXggb3IgYXR0cmlidXRlXG5leHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYFwnLm5hbWVcJ2BgIHNlbGVjdHMgdGhlIG5hbWVkXG5hdHRyaWJ1dGUgdXNpbmcgYGBnZXRhdHRyKClgYCwgd2hpbGUgYW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybVxuYGBcJ1tpbmRleF1cJ2BgIGRvZXMgYW4gaW5kZXggbG9va3VwIHVzaW5nIGBgX19nZXRpdGVtX18oKWBgLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBUaGUgcG9zaXRpb25hbCBhcmd1bWVudCBzcGVjaWZpZXJzIGNhbiBiZVxub21pdHRlZCwgc28gYGBcJ3t9IHt9XCdgYCBpcyBlcXVpdmFsZW50IHRvIGBgXCd7MH0gezF9XCdgYC5cblxuU29tZSBzaW1wbGUgZm9ybWF0IHN0cmluZyBleGFtcGxlczpcblxuICAgIkZpcnN0LCB0aG91IHNoYWx0IGNvdW50IHRvIHswfSIgIyBSZWZlcmVuY2VzIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJCcmluZyBtZSBhIHt9IiAgICAgICAgICAgICAgICAgICMgSW1wbGljaXRseSByZWZlcmVuY2VzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiRnJvbSB7fSB0byB7fSIgICAgICAgICAgICAgICAgICAjIFNhbWUgYXMgIkZyb20gezB9IHRvIHsxfSJcbiAgICJNeSBxdWVzdCBpcyB7bmFtZX0iICAgICAgICAgICAgICMgUmVmZXJlbmNlcyBrZXl3b3JkIGFyZ3VtZW50IFwnbmFtZVwnXG4gICAiV2VpZ2h0IGluIHRvbnMgezAud2VpZ2h0fSIgICAgICAjIFwnd2VpZ2h0XCcgYXR0cmlidXRlIG9mIGZpcnN0IHBvc2l0aW9uYWwgYXJnXG4gICAiVW5pdHMgZGVzdHJveWVkOiB7cGxheWVyc1swXX0iICAjIEZpcnN0IGVsZW1lbnQgb2Yga2V5d29yZCBhcmd1bWVudCBcJ3BsYXllcnNcJy5cblxuVGhlICpjb252ZXJzaW9uKiBmaWVsZCBjYXVzZXMgYSB0eXBlIGNvZXJjaW9uIGJlZm9yZSBmb3JtYXR0aW5nLlxuTm9ybWFsbHksIHRoZSBqb2Igb2YgZm9ybWF0dGluZyBhIHZhbHVlIGlzIGRvbmUgYnkgdGhlXG5gYF9fZm9ybWF0X18oKWBgIG1ldGhvZCBvZiB0aGUgdmFsdWUgaXRzZWxmLiAgSG93ZXZlciwgaW4gc29tZSBjYXNlc1xuaXQgaXMgZGVzaXJhYmxlIHRvIGZvcmNlIGEgdHlwZSB0byBiZSBmb3JtYXR0ZWQgYXMgYSBzdHJpbmcsXG5vdmVycmlkaW5nIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBmb3JtYXR0aW5nLiAgQnkgY29udmVydGluZyB0aGUgdmFsdWVcbnRvIGEgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgX19mb3JtYXRfXygpYGAsIHRoZSBub3JtYWwgZm9ybWF0dGluZ1xubG9naWMgaXMgYnlwYXNzZWQuXG5cblRocmVlIGNvbnZlcnNpb24gZmxhZ3MgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGBgXCchc1wnYGAgd2hpY2ggY2FsbHNcbmBgc3RyKClgYCBvbiB0aGUgdmFsdWUsIGBgXCchclwnYGAgd2hpY2ggY2FsbHMgYGByZXByKClgYCBhbmQgYGBcJyFhXCdgYFxud2hpY2ggY2FsbHMgYGBhc2NpaSgpYGAuXG5cblNvbWUgZXhhbXBsZXM6XG5cbiAgICJIYXJvbGRcJ3MgYSBjbGV2ZXIgezAhc30iICAgICAgICAjIENhbGxzIHN0cigpIG9uIHRoZSBhcmd1bWVudCBmaXJzdFxuICAgIkJyaW5nIG91dCB0aGUgaG9seSB7bmFtZSFyfSIgICAgIyBDYWxscyByZXByKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiTW9yZSB7IWF9IiAgICAgICAgICAgICAgICAgICAgICAjIENhbGxzIGFzY2lpKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG5cblRoZSAqZm9ybWF0X3NwZWMqIGZpZWxkIGNvbnRhaW5zIGEgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlIHZhbHVlXG5zaG91bGQgYmUgcHJlc2VudGVkLCBpbmNsdWRpbmcgc3VjaCBkZXRhaWxzIGFzIGZpZWxkIHdpZHRoLCBhbGlnbm1lbnQsXG5wYWRkaW5nLCBkZWNpbWFsIHByZWNpc2lvbiBhbmQgc28gb24uICBFYWNoIHZhbHVlIHR5cGUgY2FuIGRlZmluZSBpdHNcbm93biAiZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlIiBvciBpbnRlcnByZXRhdGlvbiBvZiB0aGUgKmZvcm1hdF9zcGVjKi5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBzdXBwb3J0IGEgY29tbW9uIGZvcm1hdHRpbmcgbWluaS1sYW5ndWFnZSwgd2hpY2hcbmlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLlxuXG5BICpmb3JtYXRfc3BlYyogZmllbGQgY2FuIGFsc28gaW5jbHVkZSBuZXN0ZWQgcmVwbGFjZW1lbnQgZmllbGRzXG53aXRoaW4gaXQuIFRoZXNlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHMgY2FuIGNvbnRhaW4gb25seSBhIGZpZWxkXG5uYW1lOyBjb252ZXJzaW9uIGZsYWdzIGFuZCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBhbGxvd2VkLiAgVGhlXG5yZXBsYWNlbWVudCBmaWVsZHMgd2l0aGluIHRoZSBmb3JtYXRfc3BlYyBhcmUgc3Vic3RpdHV0ZWQgYmVmb3JlIHRoZVxuKmZvcm1hdF9zcGVjKiBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQuIFRoaXMgYWxsb3dzIHRoZSBmb3JtYXR0aW5nIG9mIGFcbnZhbHVlIHRvIGJlIGR5bmFtaWNhbGx5IHNwZWNpZmllZC5cblxuU2VlIHRoZSAqRm9ybWF0IGV4YW1wbGVzKiBzZWN0aW9uIGZvciBzb21lIGV4YW1wbGVzLlxuXG5cbkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2Vcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIkZvcm1hdCBzcGVjaWZpY2F0aW9ucyIgYXJlIHVzZWQgd2l0aGluIHJlcGxhY2VtZW50IGZpZWxkcyBjb250YWluZWRcbndpdGhpbiBhIGZvcm1hdCBzdHJpbmcgdG8gZGVmaW5lIGhvdyBpbmRpdmlkdWFsIHZhbHVlcyBhcmUgcHJlc2VudGVkXG4oc2VlICpGb3JtYXQgU3RyaW5nIFN5bnRheCopLiAgVGhleSBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlXG5idWlsdC1pbiBgYGZvcm1hdCgpYGAgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nIChgYCIiYGApIHByb2R1Y2VzXG50aGUgc2FtZSByZXN1bHQgYXMgaWYgeW91IGhhZCBjYWxsZWQgYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZS4gQSBub24tXG5lbXB0eSBmb3JtYXQgc3RyaW5nIHR5cGljYWxseSBtb2RpZmllcyB0aGUgcmVzdWx0LlxuXG5UaGUgZ2VuZXJhbCBmb3JtIG9mIGEgKnN0YW5kYXJkIGZvcm1hdCBzcGVjaWZpZXIqIGlzOlxuXG4gICBmb3JtYXRfc3BlYyA6Oj0gW1tmaWxsXWFsaWduXVtzaWduXVsjXVswXVt3aWR0aF1bLF1bLnByZWNpc2lvbl1bdHlwZV1cbiAgIGZpbGwgICAgICAgIDo6PSA8YSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiBcJ31cJz5cbiAgIGFsaWduICAgICAgIDo6PSAiPCIgfCAiPiIgfCAiPSIgfCAiXiJcbiAgIHNpZ24gICAgICAgIDo6PSAiKyIgfCAiLSIgfCAiICJcbiAgIHdpZHRoICAgICAgIDo6PSBpbnRlZ2VyXG4gICBwcmVjaXNpb24gICA6Oj0gaW50ZWdlclxuICAgdHlwZSAgICAgICAgOjo9ICJiIiB8ICJjIiB8ICJkIiB8ICJlIiB8ICJFIiB8ICJmIiB8ICJGIiB8ICJnIiB8ICJHIiB8ICJuIiB8ICJvIiB8ICJzIiB8ICJ4IiB8ICJYIiB8ICIlIlxuXG5UaGUgKmZpbGwqIGNoYXJhY3RlciBjYW4gYmUgYW55IGNoYXJhY3RlciBvdGhlciB0aGFuIFwne1wnIG9yIFwnfVwnLiAgVGhlXG5wcmVzZW5jZSBvZiBhIGZpbGwgY2hhcmFjdGVyIGlzIHNpZ25hbGVkIGJ5IHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5nXG5pdCwgd2hpY2ggbXVzdCBiZSBvbmUgb2YgdGhlIGFsaWdubWVudCBvcHRpb25zLiAgSWYgdGhlIHNlY29uZFxuY2hhcmFjdGVyIG9mICpmb3JtYXRfc3BlYyogaXMgbm90IGEgdmFsaWQgYWxpZ25tZW50IG9wdGlvbiwgdGhlbiBpdCBpc1xuYXNzdW1lZCB0aGF0IGJvdGggdGhlIGZpbGwgY2hhcmFjdGVyIGFuZCB0aGUgYWxpZ25tZW50IG9wdGlvbiBhcmVcbmFic2VudC5cblxuVGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYWxpZ25tZW50IG9wdGlvbnMgaXMgYXMgZm9sbG93czpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCBgYFwnPFwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgbGVmdC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbW9zdCBvYmplY3RzKS4gICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCc+XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBudW1iZXJzKS4gICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz1cJ2BgICAgfCBGb3JjZXMgdGhlIHBhZGRpbmcgdG8gYmUgcGxhY2VkIGFmdGVyIHRoZSBzaWduIChpZiBhbnkpICAgIHxcbiAgIHwgICAgICAgICAgIHwgYnV0IGJlZm9yZSB0aGUgZGlnaXRzLiAgVGhpcyBpcyB1c2VkIGZvciBwcmludGluZyBmaWVsZHMgICB8XG4gICB8ICAgICAgICAgICB8IGluIHRoZSBmb3JtIFwnKzAwMDAwMDEyMFwnLiBUaGlzIGFsaWdubWVudCBvcHRpb24gaXMgb25seSAgICB8XG4gICB8ICAgICAgICAgICB8IHZhbGlkIGZvciBudW1lcmljIHR5cGVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ15cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlIHRoYXQgdW5sZXNzIGEgbWluaW11bSBmaWVsZCB3aWR0aCBpcyBkZWZpbmVkLCB0aGUgZmllbGQgd2lkdGhcbndpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRhdGEgdG8gZmlsbCBpdCwgc28gdGhhdCB0aGVcbmFsaWdubWVudCBvcHRpb24gaGFzIG5vIG1lYW5pbmcgaW4gdGhpcyBjYXNlLlxuXG5UaGUgKnNpZ24qIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBudW1iZXIgdHlwZXMsIGFuZCBjYW4gYmUgb25lIG9mXG50aGUgZm9sbG93aW5nOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCcrXCdgYCAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIGZvciBib3RoIHBvc2l0aXZlIGFzICB8XG4gICB8ICAgICAgICAgICB8IHdlbGwgYXMgbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJy1cJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbmVnYXRpdmUgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycyAodGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvcikuICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVycywgYW5kIGEgbWludXMgc2lnbiBvbiBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5UaGUgYGBcJyNcJ2BgIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VycywgYW5kIG9ubHkgZm9yIGJpbmFyeSxcbm9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXQuICBJZiBwcmVzZW50LCBpdCBzcGVjaWZpZXMgdGhhdCB0aGVcbm91dHB1dCB3aWxsIGJlIHByZWZpeGVkIGJ5IGBgXCcwYlwnYGAsIGBgXCcwb1wnYGAsIG9yIGBgXCcweFwnYGAsXG5yZXNwZWN0aXZlbHkuXG5cblRoZSBgYFwnLFwnYGAgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kc1xuc2VwYXJhdG9yLiBGb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlIGBgXCduXCdgYCBpbnRlZ2VyXG5wcmVzZW50YXRpb24gdHlwZSBpbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgYGBcJyxcJ2BgIG9wdGlvbiAoc2VlIGFsc28gKipQRVBcbjM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cbklmIHRoZSAqd2lkdGgqIGZpZWxkIGlzIHByZWNlZGVkIGJ5IGEgemVybyAoYGBcJzBcJ2BgKSBjaGFyYWN0ZXIsIHRoaXNcbmVuYWJsZXMgemVyby1wYWRkaW5nLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGFuICphbGlnbm1lbnQqIHR5cGUgb2ZcbmBgXCc9XCdgYCBhbmQgYSAqZmlsbCogY2hhcmFjdGVyIG9mIGBgXCcwXCdgYC5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoIGBgXCdmXCdgYCBhbmQgYGBcJ0ZcJ2BgLCBvciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBkZWNpbWFsXG5wb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZSBmb3JtYXR0ZWQgd2l0aCBgYFwnZ1wnYGAgb3IgYGBcJ0dcJ2BgLlxuRm9yIG5vbi1udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW5cbm90aGVyIHdvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LlxuVGhlICpwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdzXCdgYCAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICB8ICAgICAgICAgICB8IG1heSBiZSBvbWl0dGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ3NcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBhdmFpbGFibGUgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdiXCdgYCAgIHwgQmluYXJ5IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMi4gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnY1wnYGAgICB8IENoYXJhY3Rlci4gQ29udmVydHMgdGhlIGludGVnZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgICAgICAgfFxuICAgfCAgICAgICAgICAgfCB1bmljb2RlIGNoYXJhY3RlciBiZWZvcmUgcHJpbnRpbmcuICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdkXCdgYCAgIHwgRGVjaW1hbCBJbnRlZ2VyLiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxMC4gICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnb1wnYGAgICB8IE9jdGFsIGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgOC4gICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ3hcJ2BgICAgfCBIZXggZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAxNiwgdXNpbmcgbG93ZXItICAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBsZXR0ZXJzIGZvciB0aGUgZGlnaXRzIGFib3ZlIDkuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnWFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdkXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdFxuYGBcJ25cJ2BgIGFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgYGBmbG9hdCgpYGAgaXMgdXNlZCB0byBjb252ZXJ0IHRoZVxuaW50ZWdlciB0byBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBiZWZvcmUgZm9ybWF0dGluZy5cblxuVGhlIGF2YWlsYWJsZSBwcmVzZW50YXRpb24gdHlwZXMgZm9yIGZsb2F0aW5nIHBvaW50IGFuZCBkZWNpbWFsIHZhbHVlc1xuYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCdlXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFByaW50cyB0aGUgbnVtYmVyIGluIHNjaWVudGlmaWMgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG5vdGF0aW9uIHVzaW5nIHRoZSBsZXR0ZXIgXCdlXCcgdG8gaW5kaWNhdGUgdGhlIGV4cG9uZW50LiAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRVwnYGAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBTYW1lIGFzIGBgXCdlXCdgYCBleGNlcHQgaXQgdXNlcyBhbiB1cHBlciB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgXCdFXCcgYXMgdGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnZlwnYGAgICB8IEZpeGVkIHBvaW50LiBEaXNwbGF5cyB0aGUgbnVtYmVyIGFzIGEgZml4ZWQtcG9pbnQgbnVtYmVyLiAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0ZcJ2BgICAgfCBGaXhlZCBwb2ludC4gU2FtZSBhcyBgYFwnZlwnYGAsIGJ1dCBjb252ZXJ0cyBgYG5hbmBgIHRvICAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYE5BTmBgIGFuZCBgYGluZmBgIHRvIGBgSU5GYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdnXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gYGBwID49IDFgYCwgdGhpcyAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvIGBgcGBgIHNpZ25pZmljYW50IGRpZ2l0cyBhbmQgdGhlbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSBgYFwnZVwnYGAgYW5kIHByZWNpc2lvbiAgICAgfFxuICAgfCAgICAgICAgICAgfCBgYHAtMWBgIHdvdWxkIGhhdmUgZXhwb25lbnQgYGBleHBgYC4gIFRoZW4gaWYgYGAtNCA8PSBleHAgIHxcbiAgIHwgICAgICAgICAgIHwgPCBwYGAsIHRoZSBudW1iZXIgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgXCdmXCdgYCBhbmQgcHJlY2lzaW9uIGBgcC0xLWV4cGBgLiBPdGhlcndpc2UsIHRoZSBudW1iZXIgICB8XG4gICB8ICAgICAgICAgICB8IGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAuIEluIGJvdGggY2FzZXMgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyBhcmUgICAgfFxuICAgfCAgICAgICAgICAgfCByZW1vdmVkIGZyb20gdGhlIHNpZ25pZmljYW5kLCBhbmQgdGhlIGRlY2ltYWwgcG9pbnQgaXMgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYWxzbyByZW1vdmVkIGlmIHRoZXJlIGFyZSBubyByZW1haW5pbmcgZGlnaXRzIGZvbGxvd2luZyAgICB8XG4gICB8ICAgICAgICAgICB8IGl0LiAgUG9zaXRpdmUgYW5kIG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgfFxuICAgfCAgICAgICAgICAgfCB6ZXJvLCBhbmQgbmFucywgYXJlIGZvcm1hdHRlZCBhcyBgYGluZmBgLCBgYC1pbmZgYCwgYGAwYGAsIHxcbiAgIHwgICAgICAgICAgIHwgYGAtMGBgIGFuZCBgYG5hbmBgIHJlc3BlY3RpdmVseSwgcmVnYXJkbGVzcyBvZiB0aGUgICAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2lvbi4gIEEgcHJlY2lzaW9uIG9mIGBgMGBgIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCAgfFxuICAgfCAgICAgICAgICAgfCB0byBhIHByZWNpc2lvbiBvZiBgYDFgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdHXCdgYCAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgYGBcJ2dcJ2BgIGV4Y2VwdCBzd2l0Y2hlcyB0byBgYFwnRVwnYGAgfFxuICAgfCAgICAgICAgICAgfCBpZiB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgaW5maW5pdHkgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnblwnYGAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFwnZ1wnYGAsIGV4Y2VwdCB0aGF0IGl0IHVzZXMgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXIgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCclXCdgYCAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkIChgYFwnZlwnYGApIGZvcm1hdCwgZm9sbG93ZWQgYnkgYSBwZXJjZW50IHNpZ24uICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBTaW1pbGFyIHRvIGBgXCdnXCdgYCwgZXhjZXB0IHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgZGVjaW1hbCBwb2ludCBhbmQgYSBkZWZhdWx0IHByZWNpc2lvbiBvZiAxMi4gVGhpcyBpcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW50ZW5kZWQgdG8gbWF0Y2ggYGBzdHIoKWBgLCBleGNlcHQgeW91IGNhbiBhZGQgdGhlIG90aGVyICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuXG5Gb3JtYXQgZXhhbXBsZXNcbj09PT09PT09PT09PT09PVxuXG5UaGlzIHNlY3Rpb24gY29udGFpbnMgZXhhbXBsZXMgb2YgdGhlIG5ldyBmb3JtYXQgc3ludGF4IGFuZCBjb21wYXJpc29uXG53aXRoIHRoZSBvbGQgYGAlYGAtZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGRcbmBgJWBgLWZvcm1hdHRpbmcsIHdpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSBgYHt9YGAgYW5kIHdpdGggYGA6YGAgdXNlZFxuaW5zdGVhZCBvZiBgYCVgYC4gRm9yIGV4YW1wbGUsIGBgXCclMDMuMmZcJ2BgIGNhbiBiZSB0cmFuc2xhdGVkIHRvXG5gYFwnezowMy4yZn1cJ2BgLlxuXG5UaGUgbmV3IGZvcm1hdCBzeW50YXggYWxzbyBzdXBwb3J0cyBuZXcgYW5kIGRpZmZlcmVudCBvcHRpb25zLCBzaG93blxuaW4gdGhlIGZvbGxvdyBleGFtcGxlcy5cblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBwb3NpdGlvbjpcblxuICAgPj4+IFwnezB9LCB7MX0sIHsyfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3t9LCB7fSwge31cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJykgICMgMy4xKyBvbmx5XG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoKlwnYWJjXCcpICAgICAgIyB1bnBhY2tpbmcgYXJndW1lbnQgc2VxdWVuY2VcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7MH17MX17MH1cJy5mb3JtYXQoXCdhYnJhXCcsIFwnY2FkXCcpICAgIyBhcmd1bWVudHNcJyBpbmRpY2VzIGNhbiBiZSByZXBlYXRlZFxuICAgXCdhYnJhY2FkYWJyYVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgbmFtZTpcblxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KGxhdGl0dWRlPVwnMzcuMjROXCcsIGxvbmdpdHVkZT1cJy0xMTUuODFXXCcpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcbiAgID4+PiBjb29yZCA9IHtcJ2xhdGl0dWRlXCc6IFwnMzcuMjROXCcsIFwnbG9uZ2l0dWRlXCc6IFwnLTExNS44MVdcJ31cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdCgqKmNvb3JkKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBhdHRyaWJ1dGVzOlxuXG4gICA+Pj4gYyA9IDMtNWpcbiAgID4+PiAoXCdUaGUgY29tcGxleCBudW1iZXIgezB9IGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgezAucmVhbH0gXCdcbiAgIC4uLiAgXCdhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IHswLmltYWd9LlwnKS5mb3JtYXQoYylcbiAgIFwnVGhlIGNvbXBsZXggbnVtYmVyICgzLTVqKSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IDMuMCBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IC01LjAuXCdcbiAgID4+PiBjbGFzcyBQb2ludDpcbiAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgsIHkpOlxuICAgLi4uICAgICAgICAgc2VsZi54LCBzZWxmLnkgPSB4LCB5XG4gICAuLi4gICAgIGRlZiBfX3N0cl9fKHNlbGYpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnUG9pbnQoe3NlbGYueH0sIHtzZWxmLnl9KVwnLmZvcm1hdChzZWxmPXNlbGYpXG4gICAuLi5cbiAgID4+PiBzdHIoUG9pbnQoNCwgMikpXG4gICBcJ1BvaW50KDQsIDIpXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGl0ZW1zOlxuXG4gICA+Pj4gY29vcmQgPSAoMywgNSlcbiAgID4+PiBcJ1g6IHswWzBdfTsgIFk6IHswWzFdfVwnLmZvcm1hdChjb29yZClcbiAgIFwnWDogMzsgIFk6IDVcJ1xuXG5SZXBsYWNpbmcgYGAlc2BgIGFuZCBgYCVyYGA6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgYGAlK2ZgYCwgYGAlLWZgYCwgYW5kIGBgJSBmYGAgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgYGAleGBgIGFuZCBgYCVvYGAgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudFxuYmFzZXM6XG5cbiAgID4+PiAjIGZvcm1hdCBhbHNvIHN1cHBvcnRzIGJpbmFyeSBudW1iZXJzXG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOnh9OyAgb2N0OiB7MDpvfTsgIGJpbjogezA6Yn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMmE7ICBvY3Q6IDUyOyAgYmluOiAxMDEwMTBcJ1xuICAgPj4+ICMgd2l0aCAweCwgMG8sIG9yIDBiIGFzIHByZWZpeDpcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6I3h9OyAgb2N0OiB7MDojb307ICBiaW46IHswOiNifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAweDJhOyAgb2N0OiAwbzUyOyAgYmluOiAwYjEwMTAxMFwnXG5cblVzaW5nIHRoZSBjb21tYSBhcyBhIHRob3VzYW5kcyBzZXBhcmF0b3I6XG5cbiAgID4+PiBcJ3s6LH1cJy5mb3JtYXQoMTIzNDU2Nzg5MClcbiAgIFwnMSwyMzQsNTY3LDg5MFwnXG5cbkV4cHJlc3NpbmcgYSBwZXJjZW50YWdlOlxuXG4gICA+Pj4gcG9pbnRzID0gMTlcbiAgID4+PiB0b3RhbCA9IDIyXG4gICA+Pj4gXCdDb3JyZWN0IGFuc3dlcnM6IHs6LjIlfS5cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOlxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAorICdmb3JtYXRzdHJpbmdzJzogJ1xuRm9ybWF0IFN0cmluZyBTeW50YXhcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHN0ci5mb3JtYXQoKWBgIG1ldGhvZCBhbmQgdGhlIGBgRm9ybWF0dGVyYGAgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mIGBgRm9ybWF0dGVyYGAsXG5zdWJjbGFzc2VzIGNhbiBkZWZpbmUgdGhlaXIgb3duIGZvcm1hdCBzdHJpbmcgc3ludGF4KS5cblxuRm9ybWF0IHN0cmluZ3MgY29udGFpbiAicmVwbGFjZW1lbnQgZmllbGRzIiBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlc1xuYGB7fWBgLiBBbnl0aGluZyB0aGF0IGlzIG5vdCBjb250YWluZWQgaW4gYnJhY2VzIGlzIGNvbnNpZGVyZWQgbGl0ZXJhbFxudGV4dCwgd2hpY2ggaXMgY29waWVkIHVuY2hhbmdlZCB0byB0aGUgb3V0cHV0LiAgSWYgeW91IG5lZWQgdG8gaW5jbHVkZVxuYSBicmFjZSBjaGFyYWN0ZXIgaW4gdGhlIGxpdGVyYWwgdGV4dCwgaXQgY2FuIGJlIGVzY2FwZWQgYnkgZG91Ymxpbmc6XG5gYHt7YGAgYW5kIGBgfX1gYC5cblxuVGhlIGdyYW1tYXIgZm9yIGEgcmVwbGFjZW1lbnQgZmllbGQgaXMgYXMgZm9sbG93czpcblxuICAgICAgcmVwbGFjZW1lbnRfZmllbGQgOjo9ICJ7IiBbZmllbGRfbmFtZV0gWyIhIiBjb252ZXJzaW9uXSBbIjoiIGZvcm1hdF9zcGVjXSAifSJcbiAgICAgIGZpZWxkX25hbWUgICAgICAgIDo6PSBhcmdfbmFtZSAoIi4iIGF0dHJpYnV0ZV9uYW1lIHwgIlsiIGVsZW1lbnRfaW5kZXggIl0iKSpcbiAgICAgIGFyZ19uYW1lICAgICAgICAgIDo6PSBbaWRlbnRpZmllciB8IGludGVnZXJdXG4gICAgICBhdHRyaWJ1dGVfbmFtZSAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgZWxlbWVudF9pbmRleCAgICAgOjo9IGludGVnZXIgfCBpbmRleF9zdHJpbmdcbiAgICAgIGluZGV4X3N0cmluZyAgICAgIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJdIj4gK1xuICAgICAgY29udmVyc2lvbiAgICAgICAgOjo9ICJyIiB8ICJzIiB8ICJhIlxuICAgICAgZm9ybWF0X3NwZWMgICAgICAgOjo9IDxkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbj5cblxuSW4gbGVzcyBmb3JtYWwgdGVybXMsIHRoZSByZXBsYWNlbWVudCBmaWVsZCBjYW4gc3RhcnQgd2l0aCBhXG4qZmllbGRfbmFtZSogdGhhdCBzcGVjaWZpZXMgdGhlIG9iamVjdCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBmb3JtYXR0ZWRcbmFuZCBpbnNlcnRlZCBpbnRvIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiB0aGUgcmVwbGFjZW1lbnQgZmllbGQuIFRoZVxuKmZpZWxkX25hbWUqIGlzIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSAgKmNvbnZlcnNpb24qIGZpZWxkLCB3aGljaCBpc1xucHJlY2VkZWQgYnkgYW4gZXhjbGFtYXRpb24gcG9pbnQgYGBcJyFcJ2BgLCBhbmQgYSAqZm9ybWF0X3NwZWMqLCB3aGljaFxuaXMgcHJlY2VkZWQgYnkgYSBjb2xvbiBgYFwnOlwnYGAuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0XG5mb3IgdGhlIHJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXJcbmVpdGhlciBhIG51bWJlciBvciBhIGtleXdvcmQuICBJZiBpdFwncyBhIG51bWJlciwgaXQgcmVmZXJzIHRvIGFcbnBvc2l0aW9uYWwgYXJndW1lbnQsIGFuZCBpZiBpdFwncyBhIGtleXdvcmQsIGl0IHJlZmVycyB0byBhIG5hbWVkXG5rZXl3b3JkIGFyZ3VtZW50LiAgSWYgdGhlIG51bWVyaWNhbCBhcmdfbmFtZXMgaW4gYSBmb3JtYXQgc3RyaW5nIGFyZVxuMCwgMSwgMiwgLi4uIGluIHNlcXVlbmNlLCB0aGV5IGNhbiBhbGwgYmUgb21pdHRlZCAobm90IGp1c3Qgc29tZSkgYW5kXG50aGUgbnVtYmVycyAwLCAxLCAyLCAuLi4gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGluc2VydGVkIGluIHRoYXQgb3JkZXIuXG5UaGUgKmFyZ19uYW1lKiBjYW4gYmUgZm9sbG93ZWQgYnkgYW55IG51bWJlciBvZiBpbmRleCBvciBhdHRyaWJ1dGVcbmV4cHJlc3Npb25zLiBBbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtIGBgXCcubmFtZVwnYGAgc2VsZWN0cyB0aGUgbmFtZWRcbmF0dHJpYnV0ZSB1c2luZyBgYGdldGF0dHIoKWBgLCB3aGlsZSBhbiBleHByZXNzaW9uIG9mIHRoZSBmb3JtXG5gYFwnW2luZGV4XVwnYGAgZG9lcyBhbiBpbmRleCBsb29rdXAgdXNpbmcgYGBfX2dldGl0ZW1fXygpYGAuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyBgYFwne30ge31cJ2BgIGlzIGVxdWl2YWxlbnQgdG8gYGBcJ3swfSB7MX1cJ2BgLlxuXG5Tb21lIHNpbXBsZSBmb3JtYXQgc3RyaW5nIGV4YW1wbGVzOlxuXG4gICAiRmlyc3QsIHRob3Ugc2hhbHQgY291bnQgdG8gezB9IiAjIFJlZmVyZW5jZXMgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkJyaW5nIG1lIGEge30iICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdGx5IHJlZmVyZW5jZXMgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnRcbiAgICJGcm9tIHt9IHRvIHt9IiAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyAiRnJvbSB7MH0gdG8gezF9IlxuICAgIk15IHF1ZXN0IGlzIHtuYW1lfSIgICAgICAgICAgICAgIyBSZWZlcmVuY2VzIGtleXdvcmQgYXJndW1lbnQgXCduYW1lXCdcbiAgICJXZWlnaHQgaW4gdG9ucyB7MC53ZWlnaHR9IiAgICAgICMgXCd3ZWlnaHRcJyBhdHRyaWJ1dGUgb2YgZmlyc3QgcG9zaXRpb25hbCBhcmdcbiAgICJVbml0cyBkZXN0cm95ZWQ6IHtwbGF5ZXJzWzBdfSIgICMgRmlyc3QgZWxlbWVudCBvZiBrZXl3b3JkIGFyZ3VtZW50IFwncGxheWVyc1wnLlxuXG5UaGUgKmNvbnZlcnNpb24qIGZpZWxkIGNhdXNlcyBhIHR5cGUgY29lcmNpb24gYmVmb3JlIGZvcm1hdHRpbmcuXG5Ob3JtYWxseSwgdGhlIGpvYiBvZiBmb3JtYXR0aW5nIGEgdmFsdWUgaXMgZG9uZSBieSB0aGVcbmBgX19mb3JtYXRfXygpYGAgbWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzXG5pdCBpcyBkZXNpcmFibGUgdG8gZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZyxcbm92ZXJyaWRpbmcgaXRzIG93biBkZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZVxudG8gYSBzdHJpbmcgYmVmb3JlIGNhbGxpbmcgYGBfX2Zvcm1hdF9fKClgYCwgdGhlIG5vcm1hbCBmb3JtYXR0aW5nXG5sb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogYGBcJyFzXCdgYCB3aGljaCBjYWxsc1xuYGBzdHIoKWBgIG9uIHRoZSB2YWx1ZSwgYGBcJyFyXCdgYCB3aGljaCBjYWxscyBgYHJlcHIoKWBgIGFuZCBgYFwnIWFcJ2BgXG53aGljaCBjYWxscyBgYGFzY2lpKClgYC5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluIGBgZm9ybWF0KClgYCBmdW5jdGlvbi4gIEVhY2ggZm9ybWF0dGFibGUgdHlwZSBtYXkgZGVmaW5lIGhvd1xudGhlIGZvcm1hdCBzcGVjaWZpY2F0aW9uIGlzIHRvIGJlIGludGVycHJldGVkLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIGltcGxlbWVudCB0aGUgZm9sbG93aW5nIG9wdGlvbnMgZm9yIGZvcm1hdFxuc3BlY2lmaWNhdGlvbnMsIGFsdGhvdWdoIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhcmUgb25seVxuc3VwcG9ydGVkIGJ5IHRoZSBudW1lcmljIHR5cGVzLlxuXG5BIGdlbmVyYWwgY29udmVudGlvbiBpcyB0aGF0IGFuIGVtcHR5IGZvcm1hdCBzdHJpbmcgKGBgIiJgYCkgcHJvZHVjZXNcbnRoZSBzYW1lIHJlc3VsdCBhcyBpZiB5b3UgaGFkIGNhbGxlZCBgYHN0cigpYGAgb24gdGhlIHZhbHVlLiBBIG5vbi1cbmVtcHR5IGZvcm1hdCBzdHJpbmcgdHlwaWNhbGx5IG1vZGlmaWVzIHRoZSByZXN1bHQuXG5cblRoZSBnZW5lcmFsIGZvcm0gb2YgYSAqc3RhbmRhcmQgZm9ybWF0IHNwZWNpZmllciogaXM6XG5cbiAgIGZvcm1hdF9zcGVjIDo6PSBbW2ZpbGxdYWxpZ25dW3NpZ25dWyNdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt0eXBlXVxuICAgZmlsbCAgICAgICAgOjo9IDxhIGNoYXJhY3RlciBvdGhlciB0aGFuIFwnfVwnPlxuICAgYWxpZ24gICAgICAgOjo9ICI8IiB8ICI+IiB8ICI9IiB8ICJeIlxuICAgc2lnbiAgICAgICAgOjo9ICIrIiB8ICItIiB8ICIgIlxuICAgd2lkdGggICAgICAgOjo9IGludGVnZXJcbiAgIHByZWNpc2lvbiAgIDo6PSBpbnRlZ2VyXG4gICB0eXBlICAgICAgICA6Oj0gImIiIHwgImMiIHwgImQiIHwgImUiIHwgIkUiIHwgImYiIHwgIkYiIHwgImciIHwgIkciIHwgIm4iIHwgIm8iIHwgInMiIHwgIngiIHwgIlgiIHwgIiUiXG5cblRoZSAqZmlsbCogY2hhcmFjdGVyIGNhbiBiZSBhbnkgY2hhcmFjdGVyIG90aGVyIHRoYW4gXCd7XCcgb3IgXCd9XCcuICBUaGVcbnByZXNlbmNlIG9mIGEgZmlsbCBjaGFyYWN0ZXIgaXMgc2lnbmFsZWQgYnkgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmdcbml0LCB3aGljaCBtdXN0IGJlIG9uZSBvZiB0aGUgYWxpZ25tZW50IG9wdGlvbnMuICBJZiB0aGUgc2Vjb25kXG5jaGFyYWN0ZXIgb2YgKmZvcm1hdF9zcGVjKiBpcyBub3QgYSB2YWxpZCBhbGlnbm1lbnQgb3B0aW9uLCB0aGVuIGl0IGlzXG5hc3N1bWVkIHRoYXQgYm90aCB0aGUgZmlsbCBjaGFyYWN0ZXIgYW5kIHRoZSBhbGlnbm1lbnQgb3B0aW9uIGFyZVxuYWJzZW50LlxuXG5UaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cyBhbGlnbm1lbnQgb3B0aW9ucyBpcyBhcyBmb2xsb3dzOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBPcHRpb24gICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8IGBgXCc8XCdgYCAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBsZWZ0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciBtb3N0IG9iamVjdHMpLiAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJz5cJ2BgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIHJpZ2h0LWFsaWduZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG51bWJlcnMpLiAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnPVwnYGAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgfCAgICAgICAgICAgfCBidXQgYmVmb3JlIHRoZSBkaWdpdHMuICBUaGlzIGlzIHVzZWQgZm9yIHByaW50aW5nIGZpZWxkcyAgIHxcbiAgIHwgICAgICAgICAgIHwgaW4gdGhlIGZvcm0gXCcrMDAwMDAwMTIwXCcuIFRoaXMgYWxpZ25tZW50IG9wdGlvbiBpcyBvbmx5ICAgIHxcbiAgIHwgICAgICAgICAgIHwgdmFsaWQgZm9yIG51bWVyaWMgdHlwZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnXlwnYGAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgY2VudGVyZWQgd2l0aGluIHRoZSBhdmFpbGFibGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJytcJ2BgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgIHwgICAgICAgICAgIHwgd2VsbCBhcyBuZWdhdGl2ZSBudW1iZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnLVwnYGAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBvbmx5IGZvciBuZWdhdGl2ZSAgICAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzICh0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4gICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IHNwYWNlICAgICB8IGluZGljYXRlcyB0aGF0IGEgbGVhZGluZyBzcGFjZSBzaG91bGQgYmUgdXNlZCBvbiBwb3NpdGl2ZSAgfFxuICAgfCAgICAgICAgICAgfCBudW1iZXJzLCBhbmQgYSBtaW51cyBzaWduIG9uIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSBgYFwnI1wnYGAgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgYGBcJzBiXCdgYCwgYGBcJzBvXCdgYCwgb3JcbmBgXCcweFwnYGAgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yIGBgXCdnXCdgYCBhbmQgYGBcJ0dcJ2BgXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlIGBgXCcsXCdgYCBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzXG5zZXBhcmF0b3IuIEZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgYGBcJ25cJ2BgIGludGVnZXJcbnByZXNlbnRhdGlvbiB0eXBlIGluc3RlYWQuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IEFkZGVkIHRoZSBgYFwnLFwnYGAgb3B0aW9uIChzZWUgYWxzbyAqKlBFUFxuMzc4KiopLlxuXG4qd2lkdGgqIGlzIGEgZGVjaW1hbCBpbnRlZ2VyIGRlZmluaW5nIHRoZSBtaW5pbXVtIGZpZWxkIHdpZHRoLiAgSWYgbm90XG5zcGVjaWZpZWQsIHRoZW4gdGhlIGZpZWxkIHdpZHRoIHdpbGwgYmUgZGV0ZXJtaW5lZCBieSB0aGUgY29udGVudC5cblxuSWYgdGhlICp3aWR0aCogZmllbGQgaXMgcHJlY2VkZWQgYnkgYSB6ZXJvIChgYFwnMFwnYGApIGNoYXJhY3RlciwgdGhpc1xuZW5hYmxlcyB6ZXJvLXBhZGRpbmcuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYW4gKmFsaWdubWVudCogdHlwZSBvZlxuYGBcJz1cJ2BgIGFuZCBhICpmaWxsKiBjaGFyYWN0ZXIgb2YgYGBcJzBcJ2BgLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggYGBcJ2ZcJ2BgIGFuZCBgYFwnRlwnYGAsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWxcbnBvaW50IGZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoIGBgXCdnXCdgYCBvciBgYFwnR1wnYGAuXG5Gb3Igbm9uLW51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpblxub3RoZXIgd29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuXG5UaGUgKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ3NcJ2BgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgIHwgICAgICAgICAgIHwgbWF5IGJlIG9taXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnc1wnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2JcJ2BgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdjXCdgYCAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHVuaWNvZGUgY2hhcmFjdGVyIGJlZm9yZSBwcmludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2RcJ2BgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdvXCdgYCAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwneFwnYGAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdYXCdgYCAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ25cJ2BgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgYGBcJ2RcJ2BgLCBleGNlcHQgdGhhdCBpdCB1c2VzICAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgY3VycmVudCBsb2NhbGUgc2V0dGluZyB0byBpbnNlcnQgdGhlIGFwcHJvcHJpYXRlICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIHNlcGFyYXRvciBjaGFyYWN0ZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyBgYFwnZFwnYGAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0XG5gYFwnblwnYGAgYW5kIE5vbmUpLiBXaGVuIGRvaW5nIHNvLCBgYGZsb2F0KClgYCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlXG5pbnRlZ2VyIHRvIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgYGBcJ2VcJ2BgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbm90YXRpb24gdXNpbmcgdGhlIGxldHRlciBcJ2VcJyB0byBpbmRpY2F0ZSB0aGUgZXhwb25lbnQuICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdFXCdgYCAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgYGBcJ2VcJ2BgIGV4Y2VwdCBpdCB1c2VzIGFuIHVwcGVyIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCdmXCdgYCAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBgYFwnRlwnYGAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzIGBgXCdmXCdgYCwgYnV0IGNvbnZlcnRzIGBgbmFuYGAgdG8gICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgTkFOYGAgYW5kIGBgaW5mYGAgdG8gYGBJTkZgYC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ2dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gIEZvciBhIGdpdmVuIHByZWNpc2lvbiBgYHAgPj0gMWBgLCB0aGlzICAgIHxcbiAgIHwgICAgICAgICAgIHwgcm91bmRzIHRoZSBudW1iZXIgdG8gYGBwYGAgc2lnbmlmaWNhbnQgZGlnaXRzIGFuZCB0aGVuICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHMgdGhlIHJlc3VsdCBpbiBlaXRoZXIgZml4ZWQtcG9pbnQgZm9ybWF0IG9yIGluICAgICAgfFxuICAgfCAgICAgICAgICAgfCBzY2llbnRpZmljIG5vdGF0aW9uLCBkZXBlbmRpbmcgb24gaXRzIG1hZ25pdHVkZS4gIFRoZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzZSBydWxlcyBhcmUgYXMgZm9sbG93czogc3VwcG9zZSB0aGF0IHRoZSByZXN1bHQgICAgICB8XG4gICB8ICAgICAgICAgICB8IGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlIGBgXCdlXCdgYCBhbmQgcHJlY2lzaW9uICAgICB8XG4gICB8ICAgICAgICAgICB8IGBgcC0xYGAgd291bGQgaGF2ZSBleHBvbmVudCBgYGV4cGBgLiAgVGhlbiBpZiBgYC00IDw9IGV4cCAgfFxuICAgfCAgICAgICAgICAgfCA8IHBgYCwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgYGBcJ2ZcJ2BgIGFuZCBwcmVjaXNpb24gYGBwLTEtZXhwYGAuIE90aGVyd2lzZSwgdGhlIG51bWJlciAgIHxcbiAgIHwgICAgICAgICAgIHwgaXMgZm9ybWF0dGVkIHdpdGggcHJlc2VudGF0aW9uIHR5cGUgYGBcJ2VcJ2BgIGFuZCBwcmVjaXNpb24gIHxcbiAgIHwgICAgICAgICAgIHwgYGBwLTFgYC4gSW4gYm90aCBjYXNlcyBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIGFyZSAgICB8XG4gICB8ICAgICAgICAgICB8IHJlbW92ZWQgZnJvbSB0aGUgc2lnbmlmaWNhbmQsIGFuZCB0aGUgZGVjaW1hbCBwb2ludCBpcyAgICAgfFxuICAgfCAgICAgICAgICAgfCBhbHNvIHJlbW92ZWQgaWYgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nICAgIHxcbiAgIHwgICAgICAgICAgIHwgaXQuICBQb3NpdGl2ZSBhbmQgbmVnYXRpdmUgaW5maW5pdHksIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB8XG4gICB8ICAgICAgICAgICB8IHplcm8sIGFuZCBuYW5zLCBhcmUgZm9ybWF0dGVkIGFzIGBgaW5mYGAsIGBgLWluZmBgLCBgYDBgYCwgfFxuICAgfCAgICAgICAgICAgfCBgYC0wYGAgYW5kIGBgbmFuYGAgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uLiAgQSBwcmVjaXNpb24gb2YgYGAwYGAgaXMgdHJlYXRlZCBhcyBlcXVpdmFsZW50ICB8XG4gICB8ICAgICAgICAgICB8IHRvIGEgcHJlY2lzaW9uIG9mIGBgMWBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJ0dcJ2BgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyBgYFwnZ1wnYGAgZXhjZXB0IHN3aXRjaGVzIHRvIGBgXCdFXCdgYCB8XG4gICB8ICAgICAgICAgICB8IGlmIHRoZSBudW1iZXIgZ2V0cyB0b28gbGFyZ2UuIFRoZSByZXByZXNlbnRhdGlvbnMgb2YgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBpbmZpbml0eSBhbmQgTmFOIGFyZSB1cHBlcmNhc2VkLCB0b28uICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IGBgXCduXCdgYCAgIHwgTnVtYmVyLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGBgXCdnXCdgYCwgZXhjZXB0IHRoYXQgaXQgdXNlcyAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlIGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlciBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgYGBcJyVcJ2BgICAgfCBQZXJjZW50YWdlLiBNdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMTAwIGFuZCBkaXNwbGF5cyBpbiAgIHxcbiAgIHwgICAgICAgICAgIHwgZml4ZWQgKGBgXCdmXCdgYCkgZm9ybWF0LCBmb2xsb3dlZCBieSBhIHBlcmNlbnQgc2lnbi4gICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE5vbmUgICAgICB8IFNpbWlsYXIgdG8gYGBcJ2dcJ2BgLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCAgICB8XG4gICB8ICAgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzICAgfFxuICAgfCAgICAgICAgICAgfCBpbnRlbmRlZCB0byBtYXRjaCBgYHN0cigpYGAsIGV4Y2VwdCB5b3UgY2FuIGFkZCB0aGUgb3RoZXIgIHxcbiAgIHwgICAgICAgICAgIHwgZm9ybWF0IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCBgYCVgYC1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZFxuYGAlYGAtZm9ybWF0dGluZywgd2l0aCB0aGUgYWRkaXRpb24gb2YgdGhlIGBge31gYCBhbmQgd2l0aCBgYDpgYCB1c2VkXG5pbnN0ZWFkIG9mIGBgJWBgLiBGb3IgZXhhbXBsZSwgYGBcJyUwMy4yZlwnYGAgY2FuIGJlIHRyYW5zbGF0ZWQgdG9cbmBgXCd7OjAzLjJmfVwnYGAuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+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+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9LlwnLmZvcm1hdChwb2ludHMvdG90YWwpXG4gICBcJ0NvcnJlY3QgYW5zd2VyczogODYuMzYlXCdcblxuVXNpbmcgdHlwZS1zcGVjaWZpYyBmb3JtYXR0aW5nOlxuXG4gICA+Pj4gaW1wb3J0IGRhdGV0aW1lXG4gICA+Pj4gZCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDcsIDQsIDEyLCAxNSwgNTgpXG4gICA+Pj4gXCd7OiVZLSVtLSVkICVIOiVNOiVTfVwnLmZvcm1hdChkKVxuICAgXCcyMDEwLTA3LTA0IDEyOjE1OjU4XCdcblxuTmVzdGluZyBhcmd1bWVudHMgYW5kIG1vcmUgY29tcGxleCBleGFtcGxlczpcblxuICAgPj4+IGZvciBhbGlnbiwgdGV4dCBpbiB6aXAoXCc8Xj5cJywgW1wnbGVmdFwnLCBcJ2NlbnRlclwnLCBcJ3JpZ2h0XCddKTpcbiAgIC4uLiAgICAgXCd7MDp7ZmlsbH17YWxpZ259MTZ9XCcuZm9ybWF0KHRleHQsIGZpbGw9YWxpZ24sIGFsaWduPWFsaWduKVxuICAgLi4uXG4gICBcJ2xlZnQ8PDw8PDw8PDw8PDxcJ1xuICAgXCdeXl5eXmNlbnRlcl5eXl5eXCdcbiAgIFwnPj4+Pj4+Pj4+Pj5yaWdodFwnXG4gICA+Pj5cbiAgID4+PiBvY3RldHMgPSBbMTkyLCAxNjgsIDAsIDFdXG4gICA+Pj4gXCd7OjAyWH17OjAyWH17OjAyWH17OjAyWH1cJy5mb3JtYXQoKm9jdGV0cylcbiAgIFwnQzBBODAwMDFcJ1xuICAgPj4+IGludChfLCAxNilcbiAgIDMyMzIyMzU1MjFcbiAgID4+PlxuICAgPj4+IHdpZHRoID0gNVxuICAgPj4+IGZvciBudW0gaW4gcmFuZ2UoNSwxMik6XG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCiAgJ2Z1bmN0aW9uJzogJ1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFthcmd1bWVudF9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgICggICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqXG4gICAgICAgICAgICAgICAgICAgICAgWywgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiBgYD1gYFxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICJgYCpgYCIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLVxudGhpcyBpcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhhdCBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgIGFzIHRoZVxuZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiJgYCppZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nXG5hbnkgZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZlxudGhlIGZvcm0gImBgKippZGVudGlmaWVyYGAiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICJgYCpgYCIgb3IgImBgKmlkZW50aWZpZXJgYCIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gImBgOiBleHByZXNzaW9uYGAiXG5mb2xsb3dpbmcgdGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uXG5ldmVuIHRob3NlIG9mIHRoZSBmb3JtIGBgKmlkZW50aWZpZXJgYCBvciBgYCoqaWRlbnRpZmllcmBgLiAgRnVuY3Rpb25zXG5tYXkgaGF2ZSAicmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICJgYC0+IGV4cHJlc3Npb25gYCIgYWZ0ZXIgdGhlXG5wYXJhbWV0ZXIgbGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb25cbmFuZCBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuXG5Bbm5vdGF0aW9ucyBtYXkgYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW5cbnRoZSBzb3VyY2UgY29kZS4gIFRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlXG5zZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzXG52YWx1ZXMgb2YgYSBkaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlXG5gYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGEgZm9ybXMsXG5kZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYSBmb3JtIGlzIG1lcmVseSBhXG5zaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uOyBhIGZ1bmN0aW9uIGRlZmluZWQgaW5cbmEgImBgZGVmYGAiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvciBhc3NpZ25lZCB0byBhbm90aGVyIG5hbWVcbmp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGEgZm9ybS4gIFRoZSAiYGBkZWZgYCIgZm9ybSBpc1xuYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdCBhbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZVxuc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgImBgZGVmYGAiXG5mb3JtIGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsIGZ1bmN0aW9uXG50aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZCBpbiB0aGVcbm5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cbicsCi0gJ2dsb2JhbCc6ICdcblRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGdsb2JhbF9zdG10IDo6PSAiZ2xvYmFsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSBgYGdsb2JhbGBgIHN0YXRlbWVudCBpcyBhIGRlY2xhcmF0aW9uIHdoaWNoIGhvbGRzIGZvciB0aGUgZW50aXJlXG5jdXJyZW50IGNvZGUgYmxvY2suICBJdCBtZWFucyB0aGF0IHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgYXJlIHRvIGJlXG5pbnRlcnByZXRlZCBhcyBnbG9iYWxzLiAgSXQgd291bGQgYmUgaW1wb3NzaWJsZSB0byBhc3NpZ24gdG8gYSBnbG9iYWxcbnZhcmlhYmxlIHdpdGhvdXQgYGBnbG9iYWxgYCwgYWx0aG91Z2ggZnJlZSB2YXJpYWJsZXMgbWF5IHJlZmVyIHRvXG5nbG9iYWxzIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQgZ2xvYmFsLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSBgYGdsb2JhbGBgIHN0YXRlbWVudCBtdXN0IG5vdCBiZSB1c2VkIGluIHRoZSBzYW1lXG5jb2RlIGJsb2NrIHRleHR1YWxseSBwcmVjZWRpbmcgdGhhdCBgYGdsb2JhbGBgIHN0YXRlbWVudC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgZGVmaW5lZCBhcyBmb3JtYWxcbnBhcmFtZXRlcnMgb3IgaW4gYSBgYGZvcmBgIGxvb3AgY29udHJvbCB0YXJnZXQsIGBgY2xhc3NgYCBkZWZpbml0aW9uLFxuZnVuY3Rpb24gZGVmaW5pdGlvbiwgb3IgYGBpbXBvcnRgYCBzdGF0ZW1lbnQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RcbmVuZm9yY2UgdGhlIGxhdHRlciB0d28gcmVzdHJpY3Rpb25zLCBidXQgcHJvZ3JhbXMgc2hvdWxkIG5vdCBhYnVzZVxudGhpcyBmcmVlZG9tLCBhcyBmdXR1cmUgaW1wbGVtZW50YXRpb25zIG1heSBlbmZvcmNlIHRoZW0gb3Igc2lsZW50bHlcbmNoYW5nZSB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogdGhlIGBgZ2xvYmFsYGAgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIHBhcnNlci5cbkl0IGFwcGxpZXMgb25seSB0byBjb2RlIHBhcnNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSBgYGdsb2JhbGBgXG5zdGF0ZW1lbnQuIEluIHBhcnRpY3VsYXIsIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgY29udGFpbmVkIGluIGEgc3RyaW5nXG5vciBjb2RlIG9iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHRpbiBgYGV4ZWMoKWBgIGZ1bmN0aW9uIGRvZXMgbm90XG5hZmZlY3QgdGhlIGNvZGUgYmxvY2sgKmNvbnRhaW5pbmcqIHRoZSBmdW5jdGlvbiBjYWxsLCBhbmQgY29kZVxuY29udGFpbmVkIGluIHN1Y2ggYSBzdHJpbmcgaXMgdW5hZmZlY3RlZCBieSBgYGdsb2JhbGBgIHN0YXRlbWVudHMgaW5cbnRoZSBjb2RlIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZVxuYGBldmFsKClgYCBhbmQgYGBjb21waWxlKClgYCBmdW5jdGlvbnMuXG4nLAorICdnbG9iYWwnOiAnXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBnbG9iYWxfc3RtdCA6Oj0gImdsb2JhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0IGBgZ2xvYmFsYGAsIGFsdGhvdWdoIGZyZWUgdmFyaWFibGVzIG1heSByZWZlciB0b1xuZ2xvYmFscyB3aXRob3V0IGJlaW5nIGRlY2xhcmVkIGdsb2JhbC5cblxuTmFtZXMgbGlzdGVkIGluIGEgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgYmUgdXNlZCBpbiB0aGUgc2FtZVxuY29kZSBibG9jayB0ZXh0dWFsbHkgcHJlY2VkaW5nIHRoYXQgYGBnbG9iYWxgYCBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG11c3Qgbm90IGJlIGRlZmluZWQgYXMgZm9ybWFsXG5wYXJhbWV0ZXJzIG9yIGluIGEgYGBmb3JgYCBsb29wIGNvbnRyb2wgdGFyZ2V0LCBgYGNsYXNzYGAgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yIGBgaW1wb3J0YGAgc3RhdGVtZW50LlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGRvZXMgbm90XG5lbmZvcmNlIHRoZSBsYXR0ZXIgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2VcbnRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5XG5jaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSBgYGdsb2JhbGBgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBwYXJzZXIuXG5JdCBhcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgYGBnbG9iYWxgYFxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGNvbnRhaW5lZCBpbiBhIHN0cmluZ1xub3IgY29kZSBvYmplY3Qgc3VwcGxpZWQgdG8gdGhlIGJ1aWx0LWluIGBgZXhlYygpYGAgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5IGBgZ2xvYmFsYGAgc3RhdGVtZW50cyBpblxudGhlIGNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlXG5gYGV2YWwoKWBgIGFuZCBgYGNvbXBpbGUoKWBgIGZ1bmN0aW9ucy5cbicsCiAgJ2lkLWNsYXNzZXMnOiAnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbmBgXypgYFxuICAgTm90IGltcG9ydGVkIGJ5IGBgZnJvbSBtb2R1bGUgaW1wb3J0ICpgYC4gIFRoZSBzcGVjaWFsIGlkZW50aWZpZXJcbiAgIGBgX2BgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2ZcbiAgIHRoZSBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZS4gIFdoZW5cbiAgIG5vdCBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBgYF9gYCBoYXMgbm8gc3BlY2lhbCBtZWFuaW5nIGFuZCBpcyBub3RcbiAgIGRlZmluZWQuIFNlZSBzZWN0aW9uICpUaGUgaW1wb3J0IHN0YXRlbWVudCouXG5cbiAgIE5vdGU6IFRoZSBuYW1lIGBgX2BgIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICBgYGdldHRleHRgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG5gYF9fKl9fYGBcbiAgIFN5c3RlbS1kZWZpbmVkIG5hbWVzLiBUaGVzZSBuYW1lcyBhcmUgZGVmaW5lZCBieSB0aGUgaW50ZXJwcmV0ZXJcbiAgIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgc3RhbmRhcmQgbGlicmFyeSkuICBDdXJyZW50XG4gICBzeXN0ZW0gbmFtZXMgYXJlIGRpc2N1c3NlZCBpbiB0aGUgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKiBzZWN0aW9uXG4gICBhbmQgZWxzZXdoZXJlLiAgTW9yZSB3aWxsIGxpa2VseSBiZSBkZWZpbmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZlxuICAgUHl0aG9uLiAgKkFueSogdXNlIG9mIGBgX18qX19gYCBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lc1xuICAgbm90IGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlXG4gICB3aXRob3V0IHdhcm5pbmcuXG5cbmBgX18qYGBcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAogICdpZGVudGlmaWVycyc6ICdcbklkZW50aWZpZXJzIGFuZCBrZXl3b3Jkc1xuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbklkZW50aWZpZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzICpuYW1lcyopIGFyZSBkZXNjcmliZWQgYnkgdGhlXG5mb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9ucy5cblxuVGhlIHN5bnRheCBvZiBpZGVudGlmaWVycyBpbiBQeXRob24gaXMgYmFzZWQgb24gdGhlIFVuaWNvZGUgc3RhbmRhcmRcbmFubmV4IFVBWC0zMSwgd2l0aCBlbGFib3JhdGlvbiBhbmQgY2hhbmdlcyBhcyBkZWZpbmVkIGJlbG93OyBzZWUgYWxzb1xuKipQRVAgMzEzMSoqIGZvciBmdXJ0aGVyIGRldGFpbHMuXG5cbldpdGhpbiB0aGUgQVNDSUkgcmFuZ2UgKFUrMDAwMS4uVSswMDdGKSwgdGhlIHZhbGlkIGNoYXJhY3RlcnMgZm9yXG5pZGVudGlmaWVycyBhcmUgdGhlIHNhbWUgYXMgaW4gUHl0aG9uIDIueDogdGhlIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlXG5sZXR0ZXJzIGBgQWBgIHRocm91Z2ggYGBaYGAsIHRoZSB1bmRlcnNjb3JlIGBgX2BgIGFuZCwgZXhjZXB0IGZvciB0aGVcbmZpcnN0IGNoYXJhY3RlciwgdGhlIGRpZ2l0cyBgYDBgYCB0aHJvdWdoIGBgOWBgLlxuXG5QeXRob24gMy4wIGludHJvZHVjZXMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgQVNDSUlcbnJhbmdlIChzZWUgKipQRVAgMzEzMSoqKS4gIEZvciB0aGVzZSBjaGFyYWN0ZXJzLCB0aGUgY2xhc3NpZmljYXRpb25cbnVzZXMgdGhlIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGFzIGluY2x1ZGVkIGluIHRoZVxuYGB1bmljb2RlZGF0YWBgIG1vZHVsZS5cblxuSWRlbnRpZmllcnMgYXJlIHVubGltaXRlZCBpbiBsZW5ndGguICBDYXNlIGlzIHNpZ25pZmljYW50LlxuXG4gICBpZGVudGlmaWVyICAgOjo9IHhpZF9zdGFydCB4aWRfY29udGludWUqXG4gICBpZF9zdGFydCAgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBnZW5lcmFsIGNhdGVnb3JpZXMgTHUsIExsLCBMdCwgTG0sIExvLCBObCwgdGhlIHVuZGVyc2NvcmUsIGFuZCBjaGFyYWN0ZXJzIHdpdGggdGhlIE90aGVyX0lEX1N0YXJ0IHByb3BlcnR5PlxuICAgaWRfY29udGludWUgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQsIHBsdXMgY2hhcmFjdGVycyBpbiB0aGUgY2F0ZWdvcmllcyBNbiwgTWMsIE5kLCBQYyBhbmQgb3RoZXJzIHdpdGggdGhlIE90aGVyX0lEX0NvbnRpbnVlIHByb3BlcnR5PlxuICAgeGlkX3N0YXJ0ICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfc3RhcnQgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9zdGFydCB4aWRfY29udGludWUqIj5cbiAgIHhpZF9jb250aW51ZSA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX2NvbnRpbnVlIHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfY29udGludWUqIj5cblxuVGhlIFVuaWNvZGUgY2F0ZWdvcnkgY29kZXMgbWVudGlvbmVkIGFib3ZlIHN0YW5kIGZvcjpcblxuKiAqTHUqIC0gdXBwZXJjYXNlIGxldHRlcnNcblxuKiAqTGwqIC0gbG93ZXJjYXNlIGxldHRlcnNcblxuKiAqTHQqIC0gdGl0bGVjYXNlIGxldHRlcnNcblxuKiAqTG0qIC0gbW9kaWZpZXIgbGV0dGVyc1xuXG4qICpMbyogLSBvdGhlciBsZXR0ZXJzXG5cbiogKk5sKiAtIGxldHRlciBudW1iZXJzXG5cbiogKk1uKiAtIG5vbnNwYWNpbmcgbWFya3NcblxuKiAqTWMqIC0gc3BhY2luZyBjb21iaW5pbmcgbWFya3NcblxuKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzXG5cbiogKlBjKiAtIGNvbm5lY3RvciBwdW5jdHVhdGlvbnNcblxuKiAqT3RoZXJfSURfU3RhcnQqIC0gZXhwbGljaXQgbGlzdCBvZiBjaGFyYWN0ZXJzIGluIFByb3BMaXN0LnR4dCB0b1xuICBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiogKk90aGVyX0lEX0NvbnRpbnVlKiAtIGxpa2V3aXNlXG5cbkFsbCBpZGVudGlmaWVycyBhcmUgY29udmVydGVkIGludG8gdGhlIG5vcm1hbCBmb3JtIE5GS0Mgd2hpbGUgcGFyc2luZztcbmNvbXBhcmlzb24gb2YgaWRlbnRpZmllcnMgaXMgYmFzZWQgb24gTkZLQy5cblxuQSBub24tbm9ybWF0aXZlIEhUTUwgZmlsZSBsaXN0aW5nIGFsbCB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9yXG5Vbmljb2RlIDQuMSBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy5kY2wuaHBpLnVuaS1cbnBvdHNkYW0uZGUvaG9tZS9sb2V3aXMvdGFibGUtMzEzMS5odG1sLlxuXG5cbktleXdvcmRzXG49PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIGlkZW50aWZpZXJzIGFyZSB1c2VkIGFzIHJlc2VydmVkIHdvcmRzLCBvciAqa2V5d29yZHMqIG9mXG50aGUgbGFuZ3VhZ2UsIGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBvcmRpbmFyeSBpZGVudGlmaWVycy4gIFRoZXkgbXVzdFxuYmUgc3BlbGxlZCBleGFjdGx5IGFzIHdyaXR0ZW4gaGVyZTpcblxuICAgRmFsc2UgICAgICBjbGFzcyAgICAgIGZpbmFsbHkgICAgaXMgICAgICAgICByZXR1cm5cbiAgIE5vbmUgICAgICAgY29udGludWUgICBmb3IgICAgICAgIGxhbWJkYSAgICAgdHJ5XG4gICBUcnVlICAgICAgIGRlZiAgICAgICAgZnJvbSAgICAgICBub25sb2NhbCAgIHdoaWxlXG4gICBhbmQgICAgICAgIGRlbCAgICAgICAgZ2xvYmFsICAgICBub3QgICAgICAgIHdpdGhcbiAgIGFzICAgICAgICAgZWxpZiAgICAgICBpZiAgICAgICAgIG9yICAgICAgICAgeWllbGRcbiAgIGFzc2VydCAgICAgZWxzZSAgICAgICBpbXBvcnQgICAgIHBhc3NcbiAgIGJyZWFrICAgICAgZXhjZXB0ICAgICBpbiAgICAgICAgIHJhaXNlXG5cblxuUmVzZXJ2ZWQgY2xhc3NlcyBvZiBpZGVudGlmaWVyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5DZXJ0YWluIGNsYXNzZXMgb2YgaWRlbnRpZmllcnMgKGJlc2lkZXMga2V5d29yZHMpIGhhdmUgc3BlY2lhbFxubWVhbmluZ3MuICBUaGVzZSBjbGFzc2VzIGFyZSBpZGVudGlmaWVkIGJ5IHRoZSBwYXR0ZXJucyBvZiBsZWFkaW5nIGFuZFxudHJhaWxpbmcgdW5kZXJzY29yZSBjaGFyYWN0ZXJzOlxuXG5gYF8qYGBcbiAgIE5vdCBpbXBvcnRlZCBieSBgYGZyb20gbW9kdWxlIGltcG9ydCAqYGAuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyXG4gICBgYF9gYCBpcyB1c2VkIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciB0byBzdG9yZSB0aGUgcmVzdWx0IG9mXG4gICB0aGUgbGFzdCBldmFsdWF0aW9uOyBpdCBpcyBzdG9yZWQgaW4gdGhlIGBgYnVpbHRpbnNgYCBtb2R1bGUuICBXaGVuXG4gICBub3QgaW4gaW50ZXJhY3RpdmUgbW9kZSwgYGBfYGAgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90XG4gICBkZWZpbmVkLiBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSBgYF9gYCBpcyBvZnRlbiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGhcbiAgICAgaW50ZXJuYXRpb25hbGl6YXRpb247IHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGVcbiAgICAgYGBnZXR0ZXh0YGAgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuYGBfXypfX2BgXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiBgYF9fKl9fYGAgbmFtZXMsIGluIGFueSBjb250ZXh0LCB0aGF0IGRvZXNcbiAgIG5vdCBmb2xsb3cgZXhwbGljaXRseSBkb2N1bWVudGVkIHVzZSwgaXMgc3ViamVjdCB0byBicmVha2FnZVxuICAgd2l0aG91dCB3YXJuaW5nLlxuXG5gYF9fKmBgXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKICAnaWYnOiAnXG5UaGUgYGBpZmBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgaWZgYCBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgY29uZGl0aW9uYWwgZXhlY3V0aW9uOlxuXG4gICBpZl9zdG10IDo6PSAiaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAoICJlbGlmIiBleHByZXNzaW9uICI6IiBzdWl0ZSApKlxuICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cbkl0IHNlbGVjdHMgZXhhY3RseSBvbmUgb2YgdGhlIHN1aXRlcyBieSBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9ucyBvbmVcbmJ5IG9uZSB1bnRpbCBvbmUgaXMgZm91bmQgdG8gYmUgdHJ1ZSAoc2VlIHNlY3Rpb24gKkJvb2xlYW4gb3BlcmF0aW9ucypcbmZvciB0aGUgZGVmaW5pdGlvbiBvZiB0cnVlIGFuZCBmYWxzZSk7IHRoZW4gdGhhdCBzdWl0ZSBpcyBleGVjdXRlZFxuKGFuZCBubyBvdGhlciBwYXJ0IG9mIHRoZSBgYGlmYGAgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKICAnaW1hZ2luYXJ5JzogJ1xuSW1hZ2luYXJ5IGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqKipcblxuSW1hZ2luYXJ5IGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbWFnbnVtYmVyIDo6PSAoZmxvYXRudW1iZXIgfCBpbnRwYXJ0KSAoImoiIHwgIkoiKVxuXG5BbiBpbWFnaW5hcnkgbGl0ZXJhbCB5aWVsZHMgYSBjb21wbGV4IG51bWJlciB3aXRoIGEgcmVhbCBwYXJ0IG9mIDAuMC5cbkNvbXBsZXggbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgYXMgYSBwYWlyIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnNcbmFuZCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBvbiB0aGVpciByYW5nZS4gIFRvIGNyZWF0ZSBhIGNvbXBsZXhcbm51bWJlciB3aXRoIGEgbm9uemVybyByZWFsIHBhcnQsIGFkZCBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBpdCxcbmUuZy4sIGBgKDMrNGopYGAuICBTb21lIGV4YW1wbGVzIG9mIGltYWdpbmFyeSBsaXRlcmFsczpcblxuICAgMy4xNGogICAxMC5qICAgIDEwaiAgICAgLjAwMWogICAxZTEwMGogIDMuMTRlLTEwalxuJywKLSAnaW1wb3J0JzogJ1xuVGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuSW1wb3J0IHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluIHR3byBzdGVwczogKDEpIGZpbmQgYSBtb2R1bGUsIGFuZFxuaW5pdGlhbGl6ZSBpdCBpZiBuZWNlc3Nhcnk7ICgyKSBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbFxubmFtZXNwYWNlIChvZiB0aGUgc2NvcGUgd2hlcmUgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IG9jY3VycykuIFRoZVxuc3RhdGVtZW50IGNvbWVzIGluIHR3byBmb3JtcyBkaWZmZXJpbmcgb24gd2hldGhlciBpdCB1c2VzIHRoZSBgYGZyb21gYFxua2V5d29yZC4gVGhlIGZpcnN0IGZvcm0gKHdpdGhvdXQgYGBmcm9tYGApIHJlcGVhdHMgdGhlc2Ugc3RlcHMgZm9yXG5lYWNoIGlkZW50aWZpZXIgaW4gdGhlIGxpc3QuIFRoZSBmb3JtIHdpdGggYGBmcm9tYGAgcGVyZm9ybXMgc3RlcCAoMSlcbm9uY2UsIGFuZCB0aGVuIHBlcmZvcm1zIHN0ZXAgKDIpIHJlcGVhdGVkbHkuIEZvciBhIHJlZmVyZW5jZVxuaW1wbGVtZW50YXRpb24gb2Ygc3RlcCAoMSksIHNlZSB0aGUgYGBpbXBvcnRsaWJgYCBtb2R1bGUuXG5cblRvIHVuZGVyc3RhbmQgaG93IHN0ZXAgKDEpIG9jY3Vycywgb25lIG11c3QgZmlyc3QgdW5kZXJzdGFuZCBob3dcblB5dGhvbiBoYW5kbGVzIGhpZXJhcmNoaWNhbCBuYW1pbmcgb2YgbW9kdWxlcy4gVG8gaGVscCBvcmdhbml6ZVxubW9kdWxlcyBhbmQgcHJvdmlkZSBhIGhpZXJhcmNoeSBpbiBuYW1pbmcsIFB5dGhvbiBoYXMgYSBjb25jZXB0IG9mXG5wYWNrYWdlcy4gQSBwYWNrYWdlIGNhbiBjb250YWluIG90aGVyIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHdoaWxlXG5tb2R1bGVzIGNhbm5vdCBjb250YWluIG90aGVyIG1vZHVsZXMgb3IgcGFja2FnZXMuIEZyb20gYSBmaWxlIHN5c3RlbVxucGVyc3BlY3RpdmUsIHBhY2thZ2VzIGFyZSBkaXJlY3RvcmllcyBhbmQgbW9kdWxlcyBhcmUgZmlsZXMuIFRoZVxub3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgcGFja2FnZXMgaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHJlYWQsXG5hbHRob3VnaCBtaW5vciBkZXRhaWxzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGF0XG5kb2N1bWVudC5cblxuT25jZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGlzIGtub3duICh1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlXG50ZXJtICJtb2R1bGUiIHdpbGwgcmVmZXIgdG8gYm90aCBwYWNrYWdlcyBhbmQgbW9kdWxlcyksIHNlYXJjaGluZyBmb3JcbnRoZSBtb2R1bGUgb3IgcGFja2FnZSBjYW4gYmVnaW4uIFRoZSBmaXJzdCBwbGFjZSBjaGVja2VkIGlzXG5gYHN5cy5tb2R1bGVzYGAsIHRoZSBjYWNoZSBvZiBhbGwgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZFxucHJldmlvdXNseS4gSWYgdGhlIG1vZHVsZSBpcyBmb3VuZCB0aGVyZSB0aGVuIGl0IGlzIHVzZWQgaW4gc3RlcCAoMilcbm9mIGltcG9ydC5cblxuSWYgdGhlIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gdGhlIGNhY2hlLCB0aGVuIGBgc3lzLm1ldGFfcGF0aGBgIGlzXG5zZWFyY2hlZCAodGhlIHNwZWNpZmljYXRpb24gZm9yIGBgc3lzLm1ldGFfcGF0aGBgIGNhbiBiZSBmb3VuZCBpblxuKipQRVAgMzAyKiopLiBUaGUgb2JqZWN0IGlzIGEgbGlzdCBvZiAqZmluZGVyKiBvYmplY3RzIHdoaWNoIGFyZVxucXVlcmllZCBpbiBvcmRlciBhcyB0byB3aGV0aGVyIHRoZXkga25vdyBob3cgdG8gbG9hZCB0aGUgbW9kdWxlIGJ5XG5jYWxsaW5nIHRoZWlyIGBgZmluZF9tb2R1bGUoKWBgIG1ldGhvZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIElmXG50aGUgbW9kdWxlIGhhcHBlbnMgdG8gYmUgY29udGFpbmVkIHdpdGhpbiBhIHBhY2thZ2UgKGFzIGRlbm90ZWQgYnkgdGhlXG5leGlzdGVuY2Ugb2YgYSBkb3QgaW4gdGhlIG5hbWUpLCB0aGVuIGEgc2Vjb25kIGFyZ3VtZW50IHRvXG5gYGZpbmRfbW9kdWxlKClgYCBpcyBnaXZlbiBhcyB0aGUgdmFsdWUgb2YgdGhlIGBgX19wYXRoX19gYCBhdHRyaWJ1dGVcbmZyb20gdGhlIHBhcmVudCBwYWNrYWdlIChldmVyeXRoaW5nIHVwIHRvIHRoZSBsYXN0IGRvdCBpbiB0aGUgbmFtZSBvZlxudGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCkuIElmIGEgZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgaXQgcmV0dXJuc1xuYSAqbG9hZGVyKiAoZGlzY3Vzc2VkIGxhdGVyKSBvciByZXR1cm5zIGBgTm9uZWBgLlxuXG5JZiBub25lIG9mIHRoZSBmaW5kZXJzIG9uIGBgc3lzLm1ldGFfcGF0aGBgIGFyZSBhYmxlIHRvIGZpbmQgdGhlXG5tb2R1bGUgdGhlbiBzb21lIGltcGxpY2l0bHkgZGVmaW5lZCBmaW5kZXJzIGFyZSBxdWVyaWVkLlxuSW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB2YXJ5IGluIHdoYXQgaW1wbGljaXQgbWV0YSBwYXRoIGZpbmRlcnMgYXJlXG5kZWZpbmVkLiBUaGUgb25lIHRoZXkgYWxsIGRvIGRlZmluZSwgdGhvdWdoLCBpcyBvbmUgdGhhdCBoYW5kbGVzXG5gYHN5cy5wYXRoX2hvb2tzYGAsIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCwgYW5kIGBgc3lzLnBhdGhgYC5cblxuVGhlIGltcGxpY2l0IGZpbmRlciBzZWFyY2hlcyBmb3IgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaW4gdGhlICJwYXRocyJcbnNwZWNpZmllZCBpbiBvbmUgb2YgdHdvIHBsYWNlcyAoInBhdGhzIiBkbyBub3QgaGF2ZSB0byBiZSBmaWxlIHN5c3RlbVxucGF0aHMpLiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIHN1cHBvc2VkIHRvIGJlIGNvbnRhaW5lZFxud2l0aGluIGEgcGFja2FnZSB0aGVuIHRoZSBzZWNvbmQgYXJndW1lbnQgcGFzc2VkIHRvIGBgZmluZF9tb2R1bGUoKWBgLFxuYGBfX3BhdGhfX2BgIG9uIHRoZSBwYXJlbnQgcGFja2FnZSwgaXMgdXNlZCBhcyB0aGUgc291cmNlIG9mIHBhdGhzLiBJZlxudGhlIG1vZHVsZSBpcyBub3QgY29udGFpbmVkIGluIGEgcGFja2FnZSB0aGVuIGBgc3lzLnBhdGhgYCBpcyB1c2VkIGFzXG50aGUgc291cmNlIG9mIHBhdGhzLlxuXG5PbmNlIHRoZSBzb3VyY2Ugb2YgcGF0aHMgaXMgY2hvc2VuIGl0IGlzIGl0ZXJhdGVkIG92ZXIgdG8gZmluZCBhXG5maW5kZXIgdGhhdCBjYW4gaGFuZGxlIHRoYXQgcGF0aC4gVGhlIGRpY3QgYXRcbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBjYWNoZXMgZmluZGVycyBmb3IgcGF0aHMgYW5kIGlzIGNoZWNrZWRcbmZvciBhIGZpbmRlci4gSWYgdGhlIHBhdGggZG9lcyBub3QgaGF2ZSBhIGZpbmRlciBjYWNoZWQgdGhlblxuYGBzeXMucGF0aF9ob29rc2BgIGlzIHNlYXJjaGVkIGJ5IGNhbGxpbmcgZWFjaCBvYmplY3QgaW4gdGhlIGxpc3Qgd2l0aFxuYSBzaW5nbGUgYXJndW1lbnQgb2YgdGhlIHBhdGgsIHJldHVybmluZyBhIGZpbmRlciBvciByYWlzZXNcbmBgSW1wb3J0RXJyb3JgYC4gSWYgYSBmaW5kZXIgaXMgcmV0dXJuZWQgdGhlbiBpdCBpcyBjYWNoZWQgaW5cbmBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBhbmQgdGhlbiB1c2VkIGZvciB0aGF0IHBhdGggZW50cnkuIElmIG5vXG5maW5kZXIgY2FuIGJlIGZvdW5kIGJ1dCB0aGUgcGF0aCBleGlzdHMgdGhlbiBhIHZhbHVlIG9mIGBgTm9uZWBgIGlzXG5zdG9yZWQgaW4gYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIHRvIHNpZ25pZnkgdGhhdCBhbiBpbXBsaWNpdCxcbmZpbGUtYmFzZWQgZmluZGVyIHRoYXQgaGFuZGxlcyBtb2R1bGVzIHN0b3JlZCBhcyBpbmRpdmlkdWFsIGZpbGVzXG5zaG91bGQgYmUgdXNlZCBmb3IgdGhhdCBwYXRoLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdCB0aGVuIGEgZmluZGVyXG53aGljaCBhbHdheXMgcmV0dXJucyBgYE5vbmVgYCBpcyBwbGFjZWQgaW4gdGhlIGNhY2hlIGZvciB0aGUgcGF0aC5cblxuSWYgbm8gZmluZGVyIGNhbiBmaW5kIHRoZSBtb2R1bGUgdGhlbiBgYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLlxuT3RoZXJ3aXNlIHNvbWUgZmluZGVyIHJldHVybmVkIGEgbG9hZGVyIHdob3NlIGBgbG9hZF9tb2R1bGUoKWBgIG1ldGhvZFxuaXMgY2FsbGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkIChzZWUgKipQRVAgMzAyKiogZm9yIHRoZVxub3JpZ2luYWwgZGVmaW5pdGlvbiBvZiBsb2FkZXJzKS4gQSBsb2FkZXIgaGFzIHNldmVyYWwgcmVzcG9uc2liaWxpdGllc1xudG8gcGVyZm9ybSBvbiBhIG1vZHVsZSBpdCBsb2Fkcy4gRmlyc3QsIGlmIHRoZSBtb2R1bGUgYWxyZWFkeSBleGlzdHNcbmluIGBgc3lzLm1vZHVsZXNgYCAoYSBwb3NzaWJpbGl0eSBpZiB0aGUgbG9hZGVyIGlzIGNhbGxlZCBvdXRzaWRlIG9mXG50aGUgaW1wb3J0IG1hY2hpbmVyeSkgdGhlbiBpdCBpcyB0byB1c2UgdGhhdCBtb2R1bGUgZm9yIGluaXRpYWxpemF0aW9uXG5hbmQgbm90IGEgbmV3IG1vZHVsZS4gQnV0IGlmIHRoZSBtb2R1bGUgZG9lcyBub3QgZXhpc3QgaW5cbmBgc3lzLm1vZHVsZXNgYCB0aGVuIGl0IGlzIHRvIGJlIGFkZGVkIHRvIHRoYXQgZGljdCBiZWZvcmVcbmluaXRpYWxpemF0aW9uIGJlZ2lucy4gSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBsb2FkaW5nIG9mIHRoZSBtb2R1bGVcbmFuZCBpdCB3YXMgYWRkZWQgdG8gYGBzeXMubW9kdWxlc2BgIGl0IGlzIHRvIGJlIHJlbW92ZWQgZnJvbSB0aGUgZGljdC5cbklmIGFuIGVycm9yIG9jY3VycyBidXQgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbiBgYHN5cy5tb2R1bGVzYGAgaXQgaXNcbmxlZnQgaW4gdGhlIGRpY3QuXG5cblRoZSBsb2FkZXIgbXVzdCBzZXQgc2V2ZXJhbCBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUuIGBgX19uYW1lX19gYCBpc1xudG8gYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuIGBgX19maWxlX19gYCBpcyB0byBiZSB0aGUgInBhdGgiXG50byB0aGUgZmlsZSB1bmxlc3MgdGhlIG1vZHVsZSBpcyBidWlsdC1pbiAoYW5kIHRodXMgbGlzdGVkIGluXG5gYHN5cy5idWlsdGluX21vZHVsZV9uYW1lc2BgKSBpbiB3aGljaCBjYXNlIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNldC5cbklmIHdoYXQgaXMgYmVpbmcgaW1wb3J0ZWQgaXMgYSBwYWNrYWdlIHRoZW4gYGBfX3BhdGhfX2BgIGlzIHRvIGJlIHNldFxudG8gYSBsaXN0IG9mIHBhdGhzIHRvIGJlIHNlYXJjaGVkIHdoZW4gbG9va2luZyBmb3IgbW9kdWxlcyBhbmRcbnBhY2thZ2VzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHBhY2thZ2UgYmVpbmcgaW1wb3J0ZWQuIGBgX19wYWNrYWdlX19gYFxuaXMgb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZVxubW9kdWxlIG9yIHBhY2thZ2UgKHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZCBmb3IgbW9kdWxlIG5vdCBjb250YWluZWRcbmluIGEgcGFja2FnZSkuIGBgX19sb2FkZXJfX2BgIGlzIGFsc28gb3B0aW9uYWwgYnV0IHNob3VsZCBiZSBzZXQgdG9cbnRoZSBsb2FkZXIgb2JqZWN0IHRoYXQgaXMgbG9hZGluZyB0aGUgbW9kdWxlLlxuXG5JZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGxvYWRpbmcgdGhlbiB0aGUgbG9hZGVyIHJhaXNlc1xuYGBJbXBvcnRFcnJvcmBgIGlmIHNvbWUgb3RoZXIgZXhjZXB0aW9uIGlzIG5vdCBhbHJlYWR5IGJlaW5nXG5wcm9wYWdhdGVkLiBPdGhlcndpc2UgdGhlIGxvYWRlciByZXR1cm5zIHRoZSBtb2R1bGUgdGhhdCB3YXMgbG9hZGVkXG5hbmQgaW5pdGlhbGl6ZWQuXG5cbldoZW4gc3RlcCAoMSkgZmluaXNoZXMgd2l0aG91dCByYWlzaW5nIGFuIGV4Y2VwdGlvbiwgc3RlcCAoMikgY2FuXG5iZWdpbi5cblxuVGhlIGZpcnN0IGZvcm0gb2YgYGBpbXBvcnRgYCBzdGF0ZW1lbnQgYmluZHMgdGhlIG1vZHVsZSBuYW1lIGluIHRoZVxubG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBtb2R1bGUgb2JqZWN0LCBhbmQgdGhlbiBnb2VzIG9uIHRvIGltcG9ydCB0aGVcbm5leHQgaWRlbnRpZmllciwgaWYgYW55LiAgSWYgdGhlIG1vZHVsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGBgYXNgYCxcbnRoZSBuYW1lIGZvbGxvd2luZyBgYGFzYGAgaXMgdXNlZCBhcyB0aGUgbG9jYWwgbmFtZSBmb3IgdGhlIG1vZHVsZS5cblxuVGhlIGBgZnJvbWBgIGZvcm0gZG9lcyBub3QgYmluZCB0aGUgbW9kdWxlIG5hbWU6IGl0IGdvZXMgdGhyb3VnaCB0aGVcbmxpc3Qgb2YgaWRlbnRpZmllcnMsIGxvb2tzIGVhY2ggb25lIG9mIHRoZW0gdXAgaW4gdGhlIG1vZHVsZSBmb3VuZCBpblxuc3RlcCAoMSksIGFuZCBiaW5kcyB0aGUgbmFtZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIHRvIHRoZSBvYmplY3QgdGh1c1xuZm91bmQuICBBcyB3aXRoIHRoZSBmaXJzdCBmb3JtIG9mIGBgaW1wb3J0YGAsIGFuIGFsdGVybmF0ZSBsb2NhbCBuYW1lXG5jYW4gYmUgc3VwcGxpZWQgYnkgc3BlY2lmeWluZyAiYGBhc2BgIGxvY2FsbmFtZSIuICBJZiBhIG5hbWUgaXMgbm90XG5mb3VuZCwgYGBJbXBvcnRFcnJvcmBgIGlzIHJhaXNlZC4gIElmIHRoZSBsaXN0IG9mIGlkZW50aWZpZXJzIGlzXG5yZXBsYWNlZCBieSBhIHN0YXIgKGBgXCcqXCdgYCksIGFsbCBwdWJsaWMgbmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlXG5hcmUgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBvZiB0aGUgYGBpbXBvcnRgYCBzdGF0ZW1lbnQuLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgYGBfX2FsbF9fYGA7IGlmIGRlZmluZWQsIGl0XG5tdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aGljaCBhcmUgbmFtZXMgZGVmaW5lZCBvciBpbXBvcnRlZCBieVxudGhhdCBtb2R1bGUuICBUaGUgbmFtZXMgZ2l2ZW4gaW4gYGBfX2FsbF9fYGAgYXJlIGFsbCBjb25zaWRlcmVkIHB1YmxpY1xuYW5kIGFyZSByZXF1aXJlZCB0byBleGlzdC4gIElmIGBgX19hbGxfX2BgIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mXG5wdWJsaWMgbmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoXG5kbyBub3QgYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoYGBcJ19cJ2BgKS4gYGBfX2FsbF9fYGBcbnNob3VsZCBjb250YWluIHRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWRcbmFjY2lkZW50YWxseSBleHBvcnRpbmcgaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhc1xubGlicmFyeSBtb2R1bGVzIHdoaWNoIHdlcmUgaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgYGBmcm9tYGAgZm9ybSB3aXRoIGBgKmBgIG1heSBvbmx5IG9jY3VyIGluIGEgbW9kdWxlIHNjb3BlLiAgVGhlXG53aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgb25seSBhbGxvd2VkIGF0IHRoZVxubW9kdWxlIGxldmVsLiBBdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uc1xud2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuV2hlbiBzcGVjaWZ5aW5nIHdoYXQgbW9kdWxlIHRvIGltcG9ydCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGVcbmFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSBvciBwYWNrYWdlIGlzIGNvbnRhaW5lZFxud2l0aGluIGFub3RoZXIgcGFja2FnZSBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVsYXRpdmUgaW1wb3J0IHdpdGhpblxudGhlIHNhbWUgdG9wIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gbWVudGlvbiB0aGUgcGFja2FnZSBuYW1lLiBCeVxudXNpbmcgbGVhZGluZyBkb3RzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIG9yIHBhY2thZ2UgYWZ0ZXIgYGBmcm9tYGBcbnlvdSBjYW4gc3BlY2lmeSBob3cgaGlnaCB0byB0cmF2ZXJzZSB1cCB0aGUgY3VycmVudCBwYWNrYWdlIGhpZXJhcmNoeVxud2l0aG91dCBzcGVjaWZ5aW5nIGV4YWN0IG5hbWVzLiBPbmUgbGVhZGluZyBkb3QgbWVhbnMgdGhlIGN1cnJlbnRcbnBhY2thZ2Ugd2hlcmUgdGhlIG1vZHVsZSBtYWtpbmcgdGhlIGltcG9ydCBleGlzdHMuIFR3byBkb3RzIG1lYW5zIHVwXG5vbmUgcGFja2FnZSBsZXZlbC4gVGhyZWUgZG90cyBpcyB1cCB0d28gbGV2ZWxzLCBldGMuIFNvIGlmIHlvdSBleGVjdXRlXG5gYGZyb20gLiBpbXBvcnQgbW9kYGAgZnJvbSBhIG1vZHVsZSBpbiB0aGUgYGBwa2dgYCBwYWNrYWdlIHRoZW4geW91XG53aWxsIGVuZCB1cCBpbXBvcnRpbmcgYGBwa2cubW9kYGAuIElmIHlvdSBleGVjdXRlIGBgZnJvbSAuLnN1YnBrZzJcbmltcHJ0IG1vZGBgIGZyb20gd2l0aGluIGBgcGtnLnN1YnBrZzFgYCB5b3Ugd2lsbCBpbXBvcnRcbmBgcGtnLnN1YnBrZzIubW9kYGAuIFRoZSBzcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzXG5jb250YWluZWQgd2l0aGluICoqUEVQIDMyOCoqLlxuXG5gYGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKClgYCBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0XG5kZXRlcm1pbmUgd2hpY2ggbW9kdWxlcyBuZWVkIHRvIGJlIGxvYWRlZCBkeW5hbWljYWxseS5cblxuXG5GdXR1cmUgc3RhdGVtZW50c1xuPT09PT09PT09PT09PT09PT1cblxuQSAqZnV0dXJlIHN0YXRlbWVudCogaXMgYSBkaXJlY3RpdmUgdG8gdGhlIGNvbXBpbGVyIHRoYXQgYSBwYXJ0aWN1bGFyXG5tb2R1bGUgc2hvdWxkIGJlIGNvbXBpbGVkIHVzaW5nIHN5bnRheCBvciBzZW1hbnRpY3MgdGhhdCB3aWxsIGJlXG5hdmFpbGFibGUgaW4gYSBzcGVjaWZpZWQgZnV0dXJlIHJlbGVhc2Ugb2YgUHl0aG9uLiAgVGhlIGZ1dHVyZVxuc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQeXRob25cbnRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0IGFsbG93cyB1c2Ugb2ZcbnRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGUgcmVsZWFzZSBpbiB3aGljaCB0aGVcbmZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAzLjAgYXJlIGBgYWJzb2x1dGVfaW1wb3J0YGAsXG5gYGRpdmlzaW9uYGAsIGBgZ2VuZXJhdG9yc2BgLCBgYHVuaWNvZGVfbGl0ZXJhbHNgYCxcbmBgcHJpbnRfZnVuY3Rpb25gYCwgYGBuZXN0ZWRfc2NvcGVzYGAgYW5kIGBgd2l0aF9zdGF0ZW1lbnRgYC4gIFRoZXlcbmFyZSBhbGwgcmVkdW5kYW50IGJlY2F1c2UgdGhleSBhcmUgYWx3YXlzIGVuYWJsZWQsIGFuZCBvbmx5IGtlcHQgZm9yXG5iYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSBgYF9fZnV0dXJlX19gYCwgZGVzY3JpYmVkIGxhdGVyLCBhbmQgaXRcbndpbGwgYmUgaW1wb3J0ZWQgaW4gdGhlIHVzdWFsIHdheSBhdCB0aGUgdGltZSB0aGUgZnV0dXJlIHN0YXRlbWVudCBpc1xuZXhlY3V0ZWQuXG5cblRoZSBpbnRlcmVzdGluZyBydW50aW1lIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNwZWNpZmljIGZlYXR1cmVcbmVuYWJsZWQgYnkgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuXG5cbk5vdGUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIHN0YXRlbWVudDpcblxuICAgaW1wb3J0IF9fZnV0dXJlX18gW2FzIG5hbWVdXG5cblRoYXQgaXMgbm90IGEgZnV0dXJlIHN0YXRlbWVudDsgaXRcJ3MgYW4gb3JkaW5hcnkgaW1wb3J0IHN0YXRlbWVudCB3aXRoXG5ubyBzcGVjaWFsIHNlbWFudGljcyBvciBzeW50YXggcmVzdHJpY3Rpb25zLlxuXG5Db2RlIGNvbXBpbGVkIGJ5IGNhbGxzIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBleGVjKClgYCBhbmRcbmBgY29tcGlsZSgpYGAgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZSBgYE1gYCBjb250YWluaW5nIGEgZnV0dXJlXG5zdGF0ZW1lbnQgd2lsbCwgYnkgZGVmYXVsdCwgdXNlIHRoZSBuZXcgc3ludGF4IG9yIHNlbWFudGljcyBhc3NvY2lhdGVkXG53aXRoIHRoZSBmdXR1cmUgc3RhdGVtZW50LiAgVGhpcyBjYW4gYmUgY29udHJvbGxlZCBieSBvcHRpb25hbFxuYXJndW1lbnRzIHRvIGBgY29tcGlsZSgpYGAgLS0tIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uXG5mb3IgZGV0YWlscy5cblxuQSBmdXR1cmUgc3RhdGVtZW50IHR5cGVkIGF0IGFuIGludGVyYWN0aXZlIGludGVycHJldGVyIHByb21wdCB3aWxsXG50YWtlIGVmZmVjdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGludGVycHJldGVyIHNlc3Npb24uICBJZiBhblxuaW50ZXJwcmV0ZXIgaXMgc3RhcnRlZCB3aXRoIHRoZSAqLWkqIG9wdGlvbiwgaXMgcGFzc2VkIGEgc2NyaXB0IG5hbWVcbnRvIGV4ZWN1dGUsIGFuZCB0aGUgc2NyaXB0IGluY2x1ZGVzIGEgZnV0dXJlIHN0YXRlbWVudCwgaXQgd2lsbCBiZSBpblxuZWZmZWN0IGluIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uIHN0YXJ0ZWQgYWZ0ZXIgdGhlIHNjcmlwdCBpc1xuZXhlY3V0ZWQuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAyMzYqKiAtIEJhY2sgdG8gdGhlIF9fZnV0dXJlX19cbiAgICAgIFRoZSBvcmlnaW5hbCBwcm9wb3NhbCBmb3IgdGhlIF9fZnV0dXJlX18gbWVjaGFuaXNtLlxuJywKKyAnaW1wb3J0JzogJ1xuVGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgaW1wb3J0X3N0bXQgICAgIDo6PSAiaW1wb3J0IiBtb2R1bGUgWyJhcyIgbmFtZV0gKCAiLCIgbW9kdWxlIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgcmVsYXRpdmVfbW9kdWxlICJpbXBvcnQiICIoIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKiBbIiwiXSAiKSJcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiBtb2R1bGUgImltcG9ydCIgIioiXG4gICBtb2R1bGUgICAgICAgICAgOjo9IChpZGVudGlmaWVyICIuIikqIGlkZW50aWZpZXJcbiAgIHJlbGF0aXZlX21vZHVsZSA6Oj0gIi4iKiBtb2R1bGUgfCAiLiIrXG4gICBuYW1lICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuSW1wb3J0IHN0YXRlbWVudHMgYXJlIGV4ZWN1dGVkIGluIHR3byBzdGVwczogKDEpIGZpbmQgYSBtb2R1bGUsIGFuZFxuaW5pdGlhbGl6ZSBpdCBpZiBuZWNlc3Nhcnk7ICgyKSBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbFxubmFtZXNwYWNlIChvZiB0aGUgc2NvcGUgd2hlcmUgdGhlIGBgaW1wb3J0YGAgc3RhdGVtZW50IG9jY3VycykuIFRoZVxuc3RhdGVtZW50IGNvbWVzIGluIHR3byBmb3JtcyBkaWZmZXJpbmcgb24gd2hldGhlciBpdCB1c2VzIHRoZSBgYGZyb21gYFxua2V5d29yZC4gVGhlIGZpcnN0IGZvcm0gKHdpdGhvdXQgYGBmcm9tYGApIHJlcGVhdHMgdGhlc2Ugc3RlcHMgZm9yXG5lYWNoIGlkZW50aWZpZXIgaW4gdGhlIGxpc3QuIFRoZSBmb3JtIHdpdGggYGBmcm9tYGAgcGVyZm9ybXMgc3RlcCAoMSlcbm9uY2UsIGFuZCB0aGVuIHBlcmZvcm1zIHN0ZXAgKDIpIHJlcGVhdGVkbHkuIEZvciBhIHJlZmVyZW5jZVxuaW1wbGVtZW50YXRpb24gb2Ygc3RlcCAoMSksIHNlZSB0aGUgYGBpbXBvcnRsaWJgYCBtb2R1bGUuXG5cblRvIHVuZGVyc3RhbmQgaG93IHN0ZXAgKDEpIG9jY3Vycywgb25lIG11c3QgZmlyc3QgdW5kZXJzdGFuZCBob3dcblB5dGhvbiBoYW5kbGVzIGhpZXJhcmNoaWNhbCBuYW1pbmcgb2YgbW9kdWxlcy4gVG8gaGVscCBvcmdhbml6ZVxubW9kdWxlcyBhbmQgcHJvdmlkZSBhIGhpZXJhcmNoeSBpbiBuYW1pbmcsIFB5dGhvbiBoYXMgYSBjb25jZXB0IG9mXG5wYWNrYWdlcy4gQSBwYWNrYWdlIGNhbiBjb250YWluIG90aGVyIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHdoaWxlXG5tb2R1bGVzIGNhbm5vdCBjb250YWluIG90aGVyIG1vZHVsZXMgb3IgcGFja2FnZXMuIEZyb20gYSBmaWxlIHN5c3RlbVxucGVyc3BlY3RpdmUsIHBhY2thZ2VzIGFyZSBkaXJlY3RvcmllcyBhbmQgbW9kdWxlcyBhcmUgZmlsZXMuIFRoZVxub3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgcGFja2FnZXMgaXMgc3RpbGwgYXZhaWxhYmxlIHRvIHJlYWQsXG5hbHRob3VnaCBtaW5vciBkZXRhaWxzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGF0XG5kb2N1bWVudC5cblxuT25jZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIGlzIGtub3duICh1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlXG50ZXJtICJtb2R1bGUiIHdpbGwgcmVmZXIgdG8gYm90aCBwYWNrYWdlcyBhbmQgbW9kdWxlcyksIHNlYXJjaGluZyBmb3JcbnRoZSBtb2R1bGUgb3IgcGFja2FnZSBjYW4gYmVnaW4uIFRoZSBmaXJzdCBwbGFjZSBjaGVja2VkIGlzXG5gYHN5cy5tb2R1bGVzYGAsIHRoZSBjYWNoZSBvZiBhbGwgbW9kdWxlcyB0aGF0IGhhdmUgYmVlbiBpbXBvcnRlZFxucHJldmlvdXNseS4gSWYgdGhlIG1vZHVsZSBpcyBmb3VuZCB0aGVyZSB0aGVuIGl0IGlzIHVzZWQgaW4gc3RlcCAoMilcbm9mIGltcG9ydCB1bmxlc3MgYGBOb25lYGAgaXMgZm91bmQgaW4gYGBzeXMubW9kdWxlc2BgLCBpbiB3aGljaCBjYXNlXG5gYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLlxuXG5JZiB0aGUgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiB0aGUgY2FjaGUsIHRoZW4gYGBzeXMubWV0YV9wYXRoYGAgaXNcbnNlYXJjaGVkICh0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYGBzeXMubWV0YV9wYXRoYGAgY2FuIGJlIGZvdW5kIGluXG4qKlBFUCAzMDIqKikuIFRoZSBvYmplY3QgaXMgYSBsaXN0IG9mICpmaW5kZXIqIG9iamVjdHMgd2hpY2ggYXJlXG5xdWVyaWVkIGluIG9yZGVyIGFzIHRvIHdoZXRoZXIgdGhleSBrbm93IGhvdyB0byBsb2FkIHRoZSBtb2R1bGUgYnlcbmNhbGxpbmcgdGhlaXIgYGBmaW5kX21vZHVsZSgpYGAgbWV0aG9kIHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gSWZcbnRoZSBtb2R1bGUgaGFwcGVucyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgcGFja2FnZSAoYXMgZGVub3RlZCBieSB0aGVcbmV4aXN0ZW5jZSBvZiBhIGRvdCBpbiB0aGUgbmFtZSksIHRoZW4gYSBzZWNvbmQgYXJndW1lbnQgdG9cbmBgZmluZF9tb2R1bGUoKWBgIGlzIGdpdmVuIGFzIHRoZSB2YWx1ZSBvZiB0aGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZVxuZnJvbSB0aGUgcGFyZW50IHBhY2thZ2UgKGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGxhc3QgZG90IGluIHRoZSBuYW1lIG9mXG50aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkKS4gSWYgYSBmaW5kZXIgY2FuIGZpbmQgdGhlIG1vZHVsZSBpdCByZXR1cm5zXG5hICpsb2FkZXIqIChkaXNjdXNzZWQgbGF0ZXIpIG9yIHJldHVybnMgYGBOb25lYGAuXG5cbklmIG5vbmUgb2YgdGhlIGZpbmRlcnMgb24gYGBzeXMubWV0YV9wYXRoYGAgYXJlIGFibGUgdG8gZmluZCB0aGVcbm1vZHVsZSB0aGVuIHNvbWUgaW1wbGljaXRseSBkZWZpbmVkIGZpbmRlcnMgYXJlIHF1ZXJpZWQuXG5JbXBsZW1lbnRhdGlvbnMgb2YgUHl0aG9uIHZhcnkgaW4gd2hhdCBpbXBsaWNpdCBtZXRhIHBhdGggZmluZGVycyBhcmVcbmRlZmluZWQuIFRoZSBvbmUgdGhleSBhbGwgZG8gZGVmaW5lLCB0aG91Z2gsIGlzIG9uZSB0aGF0IGhhbmRsZXNcbmBgc3lzLnBhdGhfaG9va3NgYCwgYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgLCBhbmQgYGBzeXMucGF0aGBgLlxuXG5UaGUgaW1wbGljaXQgZmluZGVyIHNlYXJjaGVzIGZvciB0aGUgcmVxdWVzdGVkIG1vZHVsZSBpbiB0aGUgInBhdGhzIlxuc3BlY2lmaWVkIGluIG9uZSBvZiB0d28gcGxhY2VzICgicGF0aHMiIGRvIG5vdCBoYXZlIHRvIGJlIGZpbGUgc3lzdGVtXG5wYXRocykuIElmIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgc3VwcG9zZWQgdG8gYmUgY29udGFpbmVkXG53aXRoaW4gYSBwYWNrYWdlIHRoZW4gdGhlIHNlY29uZCBhcmd1bWVudCBwYXNzZWQgdG8gYGBmaW5kX21vZHVsZSgpYGAsXG5gYF9fcGF0aF9fYGAgb24gdGhlIHBhcmVudCBwYWNrYWdlLCBpcyB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgcGF0aHMuIElmXG50aGUgbW9kdWxlIGlzIG5vdCBjb250YWluZWQgaW4gYSBwYWNrYWdlIHRoZW4gYGBzeXMucGF0aGBgIGlzIHVzZWQgYXNcbnRoZSBzb3VyY2Ugb2YgcGF0aHMuXG5cbk9uY2UgdGhlIHNvdXJjZSBvZiBwYXRocyBpcyBjaG9zZW4gaXQgaXMgaXRlcmF0ZWQgb3ZlciB0byBmaW5kIGFcbmZpbmRlciB0aGF0IGNhbiBoYW5kbGUgdGhhdCBwYXRoLiBUaGUgZGljdCBhdFxuYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGNhY2hlcyBmaW5kZXJzIGZvciBwYXRocyBhbmQgaXMgY2hlY2tlZFxuZm9yIGEgZmluZGVyLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBoYXZlIGEgZmluZGVyIGNhY2hlZCB0aGVuXG5gYHN5cy5wYXRoX2hvb2tzYGAgaXMgc2VhcmNoZWQgYnkgY2FsbGluZyBlYWNoIG9iamVjdCBpbiB0aGUgbGlzdCB3aXRoXG5hIHNpbmdsZSBhcmd1bWVudCBvZiB0aGUgcGF0aCwgcmV0dXJuaW5nIGEgZmluZGVyIG9yIHJhaXNlc1xuYGBJbXBvcnRFcnJvcmBgLiBJZiBhIGZpbmRlciBpcyByZXR1cm5lZCB0aGVuIGl0IGlzIGNhY2hlZCBpblxuYGBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWBgIGFuZCB0aGVuIHVzZWQgZm9yIHRoYXQgcGF0aCBlbnRyeS4gSWYgbm9cbmZpbmRlciBjYW4gYmUgZm91bmQgYnV0IHRoZSBwYXRoIGV4aXN0cyB0aGVuIGEgdmFsdWUgb2YgYGBOb25lYGAgaXNcbnN0b3JlZCBpbiBgYHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYGAgdG8gc2lnbmlmeSB0aGF0IGFuIGltcGxpY2l0LFxuZmlsZS1iYXNlZCBmaW5kZXIgdGhhdCBoYW5kbGVzIG1vZHVsZXMgc3RvcmVkIGFzIGluZGl2aWR1YWwgZmlsZXNcbnNob3VsZCBiZSB1c2VkIGZvciB0aGF0IHBhdGguIElmIHRoZSBwYXRoIGRvZXMgbm90IGV4aXN0IHRoZW4gYSBmaW5kZXJcbndoaWNoIGFsd2F5cyByZXR1cm5zIGBgTm9uZWBgIGlzIHBsYWNlZCBpbiB0aGUgY2FjaGUgZm9yIHRoZSBwYXRoLlxuXG5JZiBubyBmaW5kZXIgY2FuIGZpbmQgdGhlIG1vZHVsZSB0aGVuIGBgSW1wb3J0RXJyb3JgYCBpcyByYWlzZWQuXG5PdGhlcndpc2Ugc29tZSBmaW5kZXIgcmV0dXJuZWQgYSBsb2FkZXIgd2hvc2UgYGBsb2FkX21vZHVsZSgpYGAgbWV0aG9kXG5pcyBjYWxsZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRvIGxvYWQgKHNlZSAqKlBFUCAzMDIqKiBmb3IgdGhlXG5vcmlnaW5hbCBkZWZpbml0aW9uIG9mIGxvYWRlcnMpLiBBIGxvYWRlciBoYXMgc2V2ZXJhbCByZXNwb25zaWJpbGl0aWVzXG50byBwZXJmb3JtIG9uIGEgbW9kdWxlIGl0IGxvYWRzLiBGaXJzdCwgaWYgdGhlIG1vZHVsZSBhbHJlYWR5IGV4aXN0c1xuaW4gYGBzeXMubW9kdWxlc2BgIChhIHBvc3NpYmlsaXR5IGlmIHRoZSBsb2FkZXIgaXMgY2FsbGVkIG91dHNpZGUgb2ZcbnRoZSBpbXBvcnQgbWFjaGluZXJ5KSB0aGVuIGl0IGlzIHRvIHVzZSB0aGF0IG1vZHVsZSBmb3IgaW5pdGlhbGl6YXRpb25cbmFuZCBub3QgYSBuZXcgbW9kdWxlLiBCdXQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBleGlzdCBpblxuYGBzeXMubW9kdWxlc2BgIHRoZW4gaXQgaXMgdG8gYmUgYWRkZWQgdG8gdGhhdCBkaWN0IGJlZm9yZVxuaW5pdGlhbGl6YXRpb24gYmVnaW5zLiBJZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGxvYWRpbmcgb2YgdGhlIG1vZHVsZVxuYW5kIGl0IHdhcyBhZGRlZCB0byBgYHN5cy5tb2R1bGVzYGAgaXQgaXMgdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBkaWN0LlxuSWYgYW4gZXJyb3Igb2NjdXJzIGJ1dCB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGluIGBgc3lzLm1vZHVsZXNgYCBpdCBpc1xubGVmdCBpbiB0aGUgZGljdC5cblxuVGhlIGxvYWRlciBtdXN0IHNldCBzZXZlcmFsIGF0dHJpYnV0ZXMgb24gdGhlIG1vZHVsZS4gYGBfX25hbWVfX2BgIGlzXG50byBiZSBzZXQgdG8gdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gYGBfX2ZpbGVfX2BgIGlzIHRvIGJlIHRoZSAicGF0aCJcbnRvIHRoZSBmaWxlIHVubGVzcyB0aGUgbW9kdWxlIGlzIGJ1aWx0LWluIChhbmQgdGh1cyBsaXN0ZWQgaW5cbmBgc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzYGApIGluIHdoaWNoIGNhc2UgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc2V0LlxuSWYgd2hhdCBpcyBiZWluZyBpbXBvcnRlZCBpcyBhIHBhY2thZ2UgdGhlbiBgYF9fcGF0aF9fYGAgaXMgdG8gYmUgc2V0XG50byBhIGxpc3Qgb2YgcGF0aHMgdG8gYmUgc2VhcmNoZWQgd2hlbiBsb29raW5nIGZvciBtb2R1bGVzIGFuZFxucGFja2FnZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgcGFja2FnZSBiZWluZyBpbXBvcnRlZC4gYGBfX3BhY2thZ2VfX2BgXG5pcyBvcHRpb25hbCBidXQgc2hvdWxkIGJlIHNldCB0byB0aGUgbmFtZSBvZiBwYWNrYWdlIHRoYXQgY29udGFpbnMgdGhlXG5tb2R1bGUgb3IgcGFja2FnZSAodGhlIGVtcHR5IHN0cmluZyBpcyB1c2VkIGZvciBtb2R1bGUgbm90IGNvbnRhaW5lZFxuaW4gYSBwYWNrYWdlKS4gYGBfX2xvYWRlcl9fYGAgaXMgYWxzbyBvcHRpb25hbCBidXQgc2hvdWxkIGJlIHNldCB0b1xudGhlIGxvYWRlciBvYmplY3QgdGhhdCBpcyBsb2FkaW5nIHRoZSBtb2R1bGUuXG5cbklmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgbG9hZGluZyB0aGVuIHRoZSBsb2FkZXIgcmFpc2VzXG5gYEltcG9ydEVycm9yYGAgaWYgc29tZSBvdGhlciBleGNlcHRpb24gaXMgbm90IGFscmVhZHkgYmVpbmdcbnByb3BhZ2F0ZWQuIE90aGVyd2lzZSB0aGUgbG9hZGVyIHJldHVybnMgdGhlIG1vZHVsZSB0aGF0IHdhcyBsb2FkZWRcbmFuZCBpbml0aWFsaXplZC5cblxuV2hlbiBzdGVwICgxKSBmaW5pc2hlcyB3aXRob3V0IHJhaXNpbmcgYW4gZXhjZXB0aW9uLCBzdGVwICgyKSBjYW5cbmJlZ2luLlxuXG5UaGUgZmlyc3QgZm9ybSBvZiBgYGltcG9ydGBgIHN0YXRlbWVudCBiaW5kcyB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlXG5sb2NhbCBuYW1lc3BhY2UgdG8gdGhlIG1vZHVsZSBvYmplY3QsIGFuZCB0aGVuIGdvZXMgb24gdG8gaW1wb3J0IHRoZVxubmV4dCBpZGVudGlmaWVyLCBpZiBhbnkuICBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgYGBhc2BgLFxudGhlIG5hbWUgZm9sbG93aW5nIGBgYXNgYCBpcyB1c2VkIGFzIHRoZSBsb2NhbCBuYW1lIGZvciB0aGUgbW9kdWxlLlxuXG5UaGUgYGBmcm9tYGAgZm9ybSBkb2VzIG5vdCBiaW5kIHRoZSBtb2R1bGUgbmFtZTogaXQgZ29lcyB0aHJvdWdoIHRoZVxubGlzdCBvZiBpZGVudGlmaWVycywgbG9va3MgZWFjaCBvbmUgb2YgdGhlbSB1cCBpbiB0aGUgbW9kdWxlIGZvdW5kIGluXG5zdGVwICgxKSwgYW5kIGJpbmRzIHRoZSBuYW1lIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgdG8gdGhlIG9iamVjdCB0aHVzXG5mb3VuZC4gIEFzIHdpdGggdGhlIGZpcnN0IGZvcm0gb2YgYGBpbXBvcnRgYCwgYW4gYWx0ZXJuYXRlIGxvY2FsIG5hbWVcbmNhbiBiZSBzdXBwbGllZCBieSBzcGVjaWZ5aW5nICJgYGFzYGAgbG9jYWxuYW1lIi4gIElmIGEgbmFtZSBpcyBub3RcbmZvdW5kLCBgYEltcG9ydEVycm9yYGAgaXMgcmFpc2VkLiAgSWYgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgaXNcbnJlcGxhY2VkIGJ5IGEgc3RhciAoYGBcJypcJ2BgKSwgYWxsIHB1YmxpYyBuYW1lcyBkZWZpbmVkIGluIHRoZSBtb2R1bGVcbmFyZSBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIG9mIHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudC5cblxuVGhlICpwdWJsaWMgbmFtZXMqIGRlZmluZWQgYnkgYSBtb2R1bGUgYXJlIGRldGVybWluZWQgYnkgY2hlY2tpbmcgdGhlXG5tb2R1bGVcJ3MgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlIG5hbWVkIGBgX19hbGxfX2BgOyBpZiBkZWZpbmVkLCBpdFxubXVzdCBiZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2hpY2ggYXJlIG5hbWVzIGRlZmluZWQgb3IgaW1wb3J0ZWQgYnlcbnRoYXQgbW9kdWxlLiAgVGhlIG5hbWVzIGdpdmVuIGluIGBgX19hbGxfX2BgIGFyZSBhbGwgY29uc2lkZXJlZCBwdWJsaWNcbmFuZCBhcmUgcmVxdWlyZWQgdG8gZXhpc3QuICBJZiBgYF9fYWxsX19gYCBpcyBub3QgZGVmaW5lZCwgdGhlIHNldCBvZlxucHVibGljIG5hbWVzIGluY2x1ZGVzIGFsbCBuYW1lcyBmb3VuZCBpbiB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSB3aGljaFxuZG8gbm90IGJlZ2luIHdpdGggYW4gdW5kZXJzY29yZSBjaGFyYWN0ZXIgKGBgXCdfXCdgYCkuIGBgX19hbGxfX2BgXG5zaG91bGQgY29udGFpbiB0aGUgZW50aXJlIHB1YmxpYyBBUEkuIEl0IGlzIGludGVuZGVkIHRvIGF2b2lkXG5hY2NpZGVudGFsbHkgZXhwb3J0aW5nIGl0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXNcbmxpYnJhcnkgbW9kdWxlcyB3aGljaCB3ZXJlIGltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS5cblxuVGhlIGBgZnJvbWBgIGZvcm0gd2l0aCBgYCpgYCBtYXkgb25seSBvY2N1ciBpbiBhIG1vZHVsZSBzY29wZS4gIFRoZVxud2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIG9ubHkgYWxsb3dlZCBhdCB0aGVcbm1vZHVsZSBsZXZlbC4gQXR0ZW1wdGluZyB0byB1c2UgaXQgaW4gY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbnNcbndpbGwgcmFpc2UgYSBgYFN5bnRheEVycm9yYGAuXG5cbldoZW4gc3BlY2lmeWluZyB3aGF0IG1vZHVsZSB0byBpbXBvcnQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlXG5hYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgb3IgcGFja2FnZSBpcyBjb250YWluZWRcbndpdGhpbiBhbm90aGVyIHBhY2thZ2UgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBhIHJlbGF0aXZlIGltcG9ydCB3aXRoaW5cbnRoZSBzYW1lIHRvcCBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIG1lbnRpb24gdGhlIHBhY2thZ2UgbmFtZS4gQnlcbnVzaW5nIGxlYWRpbmcgZG90cyBpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBvciBwYWNrYWdlIGFmdGVyIGBgZnJvbWBgXG55b3UgY2FuIHNwZWNpZnkgaG93IGhpZ2ggdG8gdHJhdmVyc2UgdXAgdGhlIGN1cnJlbnQgcGFja2FnZSBoaWVyYXJjaHlcbndpdGhvdXQgc3BlY2lmeWluZyBleGFjdCBuYW1lcy4gT25lIGxlYWRpbmcgZG90IG1lYW5zIHRoZSBjdXJyZW50XG5wYWNrYWdlIHdoZXJlIHRoZSBtb2R1bGUgbWFraW5nIHRoZSBpbXBvcnQgZXhpc3RzLiBUd28gZG90cyBtZWFucyB1cFxub25lIHBhY2thZ2UgbGV2ZWwuIFRocmVlIGRvdHMgaXMgdXAgdHdvIGxldmVscywgZXRjLiBTbyBpZiB5b3UgZXhlY3V0ZVxuYGBmcm9tIC4gaW1wb3J0IG1vZGBgIGZyb20gYSBtb2R1bGUgaW4gdGhlIGBgcGtnYGAgcGFja2FnZSB0aGVuIHlvdVxud2lsbCBlbmQgdXAgaW1wb3J0aW5nIGBgcGtnLm1vZGBgLiBJZiB5b3UgZXhlY3V0ZSBgYGZyb20gLi5zdWJwa2cyXG5pbXBvcnQgbW9kYGAgZnJvbSB3aXRoaW4gYGBwa2cuc3VicGtnMWBgIHlvdSB3aWxsIGltcG9ydFxuYGBwa2cuc3VicGtnMi5tb2RgYC4gVGhlIHNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXNcbmNvbnRhaW5lZCB3aXRoaW4gKipQRVAgMzI4KiouXG5cbmBgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKWBgIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXRcbmRldGVybWluZSB3aGljaCBtb2R1bGVzIG5lZWQgdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5LlxuXG5cbkZ1dHVyZSBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PVxuXG5BICpmdXR1cmUgc3RhdGVtZW50KiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXJcbm1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmVcbmF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24uICBUaGUgZnV0dXJlXG5zdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvblxudGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZlxudGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZSByZWxlYXNlIGluIHdoaWNoIHRoZVxuZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLlxuXG4gICBmdXR1cmVfc3RhdGVtZW50IDo6PSAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgIigiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqIFsiLCJdICIpIlxuICAgZmVhdHVyZSAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgbmFtZSAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgbXVzdCBhcHBlYXIgbmVhciB0aGUgdG9wIG9mIHRoZSBtb2R1bGUuICBUaGUgb25seVxubGluZXMgdGhhdCBjYW4gYXBwZWFyIGJlZm9yZSBhIGZ1dHVyZSBzdGF0ZW1lbnQgYXJlOlxuXG4qIHRoZSBtb2R1bGUgZG9jc3RyaW5nIChpZiBhbnkpLFxuXG4qIGNvbW1lbnRzLFxuXG4qIGJsYW5rIGxpbmVzLCBhbmRcblxuKiBvdGhlciBmdXR1cmUgc3RhdGVtZW50cy5cblxuVGhlIGZlYXR1cmVzIHJlY29nbml6ZWQgYnkgUHl0aG9uIDMuMCBhcmUgYGBhYnNvbHV0ZV9pbXBvcnRgYCxcbmBgZGl2aXNpb25gYCwgYGBnZW5lcmF0b3JzYGAsIGBgdW5pY29kZV9saXRlcmFsc2BgLFxuYGBwcmludF9mdW5jdGlvbmBgLCBgYG5lc3RlZF9zY29wZXNgYCBhbmQgYGB3aXRoX3N0YXRlbWVudGBgLiAgVGhleVxuYXJlIGFsbCByZWR1bmRhbnQgYmVjYXVzZSB0aGV5IGFyZSBhbHdheXMgZW5hYmxlZCwgYW5kIG9ubHkga2VwdCBmb3JcbmJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgcmVjb2duaXplZCBhbmQgdHJlYXRlZCBzcGVjaWFsbHkgYXQgY29tcGlsZVxudGltZTogQ2hhbmdlcyB0byB0aGUgc2VtYW50aWNzIG9mIGNvcmUgY29uc3RydWN0cyBhcmUgb2Z0ZW5cbmltcGxlbWVudGVkIGJ5IGdlbmVyYXRpbmcgZGlmZmVyZW50IGNvZGUuICBJdCBtYXkgZXZlbiBiZSB0aGUgY2FzZVxudGhhdCBhIG5ldyBmZWF0dXJlIGludHJvZHVjZXMgbmV3IGluY29tcGF0aWJsZSBzeW50YXggKHN1Y2ggYXMgYSBuZXdcbnJlc2VydmVkIHdvcmQpLCBpbiB3aGljaCBjYXNlIHRoZSBjb21waWxlciBtYXkgbmVlZCB0byBwYXJzZSB0aGVcbm1vZHVsZSBkaWZmZXJlbnRseS4gIFN1Y2ggZGVjaXNpb25zIGNhbm5vdCBiZSBwdXNoZWQgb2ZmIHVudGlsXG5ydW50aW1lLlxuXG5Gb3IgYW55IGdpdmVuIHJlbGVhc2UsIHRoZSBjb21waWxlciBrbm93cyB3aGljaCBmZWF0dXJlIG5hbWVzIGhhdmVcbmJlZW4gZGVmaW5lZCwgYW5kIHJhaXNlcyBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBhIGZ1dHVyZSBzdGF0ZW1lbnRcbmNvbnRhaW5zIGEgZmVhdHVyZSBub3Qga25vd24gdG8gaXQuXG5cblRoZSBkaXJlY3QgcnVudGltZSBzZW1hbnRpY3MgYXJlIHRoZSBzYW1lIGFzIGZvciBhbnkgaW1wb3J0IHN0YXRlbWVudDpcbnRoZXJlIGlzIGEgc3RhbmRhcmQgbW9kdWxlIGBgX19mdXR1cmVfX2BgLCBkZXNjcmliZWQgbGF0ZXIsIGFuZCBpdFxud2lsbCBiZSBpbXBvcnRlZCBpbiB0aGUgdXN1YWwgd2F5IGF0IHRoZSB0aW1lIHRoZSBmdXR1cmUgc3RhdGVtZW50IGlzXG5leGVjdXRlZC5cblxuVGhlIGludGVyZXN0aW5nIHJ1bnRpbWUgc2VtYW50aWNzIGRlcGVuZCBvbiB0aGUgc3BlY2lmaWMgZmVhdHVyZVxuZW5hYmxlZCBieSB0aGUgZnV0dXJlIHN0YXRlbWVudC5cblxuTm90ZSB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgc3BlY2lhbCBhYm91dCB0aGUgc3RhdGVtZW50OlxuXG4gICBpbXBvcnQgX19mdXR1cmVfXyBbYXMgbmFtZV1cblxuVGhhdCBpcyBub3QgYSBmdXR1cmUgc3RhdGVtZW50OyBpdFwncyBhbiBvcmRpbmFyeSBpbXBvcnQgc3RhdGVtZW50IHdpdGhcbm5vIHNwZWNpYWwgc2VtYW50aWNzIG9yIHN5bnRheCByZXN0cmljdGlvbnMuXG5cbkNvZGUgY29tcGlsZWQgYnkgY2FsbHMgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGV4ZWMoKWBgIGFuZFxuYGBjb21waWxlKClgYCB0aGF0IG9jY3VyIGluIGEgbW9kdWxlIGBgTWBgIGNvbnRhaW5pbmcgYSBmdXR1cmVcbnN0YXRlbWVudCB3aWxsLCBieSBkZWZhdWx0LCB1c2UgdGhlIG5ldyBzeW50YXggb3Igc2VtYW50aWNzIGFzc29jaWF0ZWRcbndpdGggdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuICBUaGlzIGNhbiBiZSBjb250cm9sbGVkIGJ5IG9wdGlvbmFsXG5hcmd1bWVudHMgdG8gYGBjb21waWxlKClgYCAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb25cbmZvciBkZXRhaWxzLlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgdHlwZWQgYXQgYW4gaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgcHJvbXB0IHdpbGxcbnRha2UgZWZmZWN0IGZvciB0aGUgcmVzdCBvZiB0aGUgaW50ZXJwcmV0ZXIgc2Vzc2lvbi4gIElmIGFuXG5pbnRlcnByZXRlciBpcyBzdGFydGVkIHdpdGggdGhlICotaSogb3B0aW9uLCBpcyBwYXNzZWQgYSBzY3JpcHQgbmFtZVxudG8gZXhlY3V0ZSwgYW5kIHRoZSBzY3JpcHQgaW5jbHVkZXMgYSBmdXR1cmUgc3RhdGVtZW50LCBpdCB3aWxsIGJlIGluXG5lZmZlY3QgaW4gdGhlIGludGVyYWN0aXZlIHNlc3Npb24gc3RhcnRlZCBhZnRlciB0aGUgc2NyaXB0IGlzXG5leGVjdXRlZC5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDIzNioqIC0gQmFjayB0byB0aGUgX19mdXR1cmVfX1xuICAgICAgVGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciB0aGUgX19mdXR1cmVfXyBtZWNoYW5pc20uXG4nLAogICdpbic6ICdcbkNvbXBhcmlzb25zXG4qKioqKioqKioqKlxuXG5Vbmxpa2UgQywgYWxsIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBpbiBQeXRob24gaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSxcbndoaWNoIGlzIGxvd2VyIHRoYW4gdGhhdCBvZiBhbnkgYXJpdGhtZXRpYywgc2hpZnRpbmcgb3IgYml0d2lzZVxub3BlcmF0aW9uLiAgQWxzbyB1bmxpa2UgQywgZXhwcmVzc2lvbnMgbGlrZSBgYGEgPCBiIDwgY2BgIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6IGBgVHJ1ZWBgIG9yIGBgRmFsc2VgYC5cblxuQ29tcGFyaXNvbnMgY2FuIGJlIGNoYWluZWQgYXJiaXRyYXJpbHksIGUuZy4sIGBgeCA8IHkgPD0gemBgIGlzXG5lcXVpdmFsZW50IHRvIGBgeCA8IHkgYW5kIHkgPD0gemBgLCBleGNlcHQgdGhhdCBgYHlgYCBpcyBldmFsdWF0ZWRcbm9ubHkgb25jZSAoYnV0IGluIGJvdGggY2FzZXMgYGB6YGAgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiBgYHggPFxueWBgIGlzIGZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiBgYGEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6YGAgaXMgZXF1aXZhbGVudCB0byBgYGEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6YGAsXG5leGNlcHQgdGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0IGBgYSBvcDEgYiBvcDIgY2BgIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb25cbmJldHdlZW4gKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sIGBgeCA8IHkgPiB6YGAgaXMgcGVyZmVjdGx5IGxlZ2FsXG4odGhvdWdoIHBlcmhhcHMgbm90IHByZXR0eSkuXG5cblRoZSBvcGVyYXRvcnMgYGA8YGAsIGBgPmBgLCBgYD09YGAsIGBgPj1gYCwgYGA8PWBgLCBhbmQgYGAhPWBgIGNvbXBhcmVcbnRoZSB2YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuXG5JZiBib3RoIGFyZSBudW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSxcbnRoZSBgYD09YGAgYW5kIGBgIT1gYCBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnRcbnR5cGVzIHRvIGJlIHVuZXF1YWwsIHdoaWxlIHRoZSBgYDxgYCwgYGA+YGAsIGBgPj1gYCBhbmQgYGA8PWBgXG5vcGVyYXRvcnMgcmFpc2UgYSBgYFR5cGVFcnJvcmBgIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50XG50eXBlcyB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZlxudHlwZXMuICBZb3UgY2FuIGNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pblxudHlwZXMgYnkgZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSBgYF9fZ3RfXygpYGAsIGRlc2NyaWJlZFxuaW4gc2VjdGlvbiAqQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyBgYGZsb2F0KFwnTmFOXCcpYGAgYW5kIGBgRGVjaW1hbChcJ05hTlwnKWBgIGFyZSBzcGVjaWFsLiBUaGVcbiAgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCBgYHggaXMgeGBgIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsIGBgeCAhPSB4YGAuICBBZGRpdGlvbmFsbHksIGNvbXBhcmluZyBhbnkgdmFsdWUgdG8gYVxuICBub3QtYS1udW1iZXIgdmFsdWUgd2lsbCByZXR1cm4gYGBGYWxzZWBgLiAgRm9yIGV4YW1wbGUsIGJvdGggYGAzIDxcbiAgZmxvYXQoXCdOYU5cJylgYCBhbmQgYGBmbG9hdChcJ05hTlwnKSA8IDNgYCB3aWxsIHJldHVybiBgYEZhbHNlYGAuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzXG4gICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiBgYG9yZCgpYGApIG9mIHRoZWlyIGNoYXJhY3RlcnMuXG4gIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCBgYFsxLDIseF0gPD0gWzEsMix5XWBgIGhhcyB0aGVcbiAgc2FtZSB2YWx1ZSBhcyBgYHggPD0geWBgLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdFxuICBleGlzdCwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPFxuICBbMSwyLDNdYGApLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zIGBgKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpYGAgcmFpc2UgYGBUeXBlRXJyb3JgYC5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyBgYHsxLDJ9YGAgYW5kIHsyLDN9IGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZVxuICBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyKS4gIEFjY29yZGluZ2x5LCBzZXRzIGFyZSBub3RcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGZvciBmdW5jdGlvbnMgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nLlxuICBGb3IgZXhhbXBsZSwgYGBtaW4oKWBgLCBgYG1heCgpYGAsIGFuZCBgYHNvcnRlZCgpYGAgcHJvZHVjZVxuICB1bmRlZmluZWQgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMuXG5cbiogTW9zdCBvdGhlciBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzIGNvbXBhcmUgdW5lcXVhbCB1bmxlc3MgdGhleSBhcmVcbiAgdGhlIHNhbWUgb2JqZWN0OyB0aGUgY2hvaWNlIHdoZXRoZXIgb25lIG9iamVjdCBpcyBjb25zaWRlcmVkIHNtYWxsZXJcbiAgb3IgbGFyZ2VyIHRoYW4gYW5vdGhlciBvbmUgaXMgbWFkZSBhcmJpdHJhcmlseSBidXQgY29uc2lzdGVudGx5XG4gIHdpdGhpbiBvbmUgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbS5cblxuQ29tcGFyaXNvbiBvZiBvYmplY3RzIG9mIHRoZSBkaWZmZXJpbmcgdHlwZXMgZGVwZW5kcyBvbiB3aGV0aGVyIGVpdGhlclxub2YgdGhlIHR5cGVzIHByb3ZpZGUgZXhwbGljaXQgc3VwcG9ydCBmb3IgdGhlIGNvbXBhcmlzb24uICBNb3N0XG5udW1lcmljIHR5cGVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIG9uZSBhbm90aGVyLCBidXQgY29tcGFyaXNvbnMgb2ZcbmBgZmxvYXRgYCBhbmQgYGBEZWNpbWFsYGAgYXJlIG5vdCBzdXBwb3J0ZWQgdG8gYXZvaWQgdGhlIGluZXZpdGFibGVcbmNvbmZ1c2lvbiBhcmlzaW5nIGZyb20gcmVwcmVzZW50YXRpb24gaXNzdWVzIHN1Y2ggYXMgYGBmbG9hdChcJzEuMVwnKWBgXG5iZWluZyBpbmV4YWN0bHkgcmVwcmVzZW50ZWQgYW5kIHRoZXJlZm9yZSBub3QgZXhhY3RseSBlcXVhbCB0b1xuYGBEZWNpbWFsKFwnMS4xXCcpYGAgd2hpY2ggaXMuICBXaGVuIGNyb3NzLXR5cGUgY29tcGFyaXNvbiBpcyBub3RcbnN1cHBvcnRlZCwgdGhlIGNvbXBhcmlzb24gbWV0aG9kIHJldHVybnMgYGBOb3RJbXBsZW1lbnRlZGBgLiAgVGhpcyBjYW5cbmNyZWF0ZSB0aGUgaWxsdXNpb24gb2Ygbm9uLXRyYW5zaXRpdml0eSBiZXR3ZWVuIHN1cHBvcnRlZCBjcm9zcy10eXBlXG5jb21wYXJpc29ucyBhbmQgdW5zdXBwb3J0ZWQgY29tcGFyaXNvbnMuICBGb3IgZXhhbXBsZSwgYGBEZWNpbWFsKDIpID09XG4yYGAgYW5kIGBgMiA9PSBmbG9hdCgyKWBgIGJ1dCBgYERlY2ltYWwoMikgIT0gZmxvYXQoMilgYC5cblxuVGhlIG9wZXJhdG9ycyBgYGluYGAgYW5kIGBgbm90IGluYGAgdGVzdCBmb3IgbWVtYmVyc2hpcC4gIGBgeCBpbiBzYGBcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICBgYHhcbm5vdCBpbiBzYGAgcmV0dXJucyB0aGUgbmVnYXRpb24gb2YgYGB4IGluIHNgYC4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoIGBgaW5gYFxudGVzdHMgd2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlc1xuc3VjaCBhcyBsaXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gYGB4IGluIHlgYCBpcyBlcXVpdmFsZW50IHRvIGBgYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpYGAuXG5cbkZvciB0aGUgc3RyaW5nIGFuZCBieXRlcyB0eXBlcywgYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KlxuaXMgYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzIGBgeS5maW5kKHgpICE9IC0xYGAuXG5FbXB0eSBzdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXJcbnN0cmluZywgc28gYGAiIiBpbiAiYWJjImBgIHdpbGwgcmV0dXJuIGBgVHJ1ZWBgLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSBgYF9fY29udGFpbnNfXygpYGAgbWV0aG9kLFxuYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIGBgeS5fX2NvbnRhaW5zX18oeClgYCBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAgYnV0IGRvXG5kZWZpbmUgYGBfX2l0ZXJfXygpYGAsIGBgeCBpbiB5YGAgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlIGBgemBgIHdpdGggYGB4XG49PSB6YGAgaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgYGB5YGAuICBJZiBhbiBleGNlcHRpb24gaXNcbnJhaXNlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgYGBpbmBgIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG5gYF9fZ2V0aXRlbV9fKClgYCwgYGB4IGluIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0IGBgeCA9PSB5W2ldYGAsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgYGBJbmRleEVycm9yYGAgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgYGBpbmBgIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciBgYG5vdCBpbmBgIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG5gYGluYGAuXG5cblRoZSBvcGVyYXRvcnMgYGBpc2BgIGFuZCBgYGlzIG5vdGBgIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogYGB4IGlzXG55YGAgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgYGB4IGlzXG5ub3QgeWBgIHlpZWxkcyB0aGUgaW52ZXJzZSB0cnV0aCB2YWx1ZS4gWzRdXG4nLAogICdpbnRlZ2Vycyc6ICdcbkludGVnZXIgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKipcblxuSW50ZWdlciBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW50ZWdlciAgICAgICAgOjo9IGRlY2ltYWxpbnRlZ2VyIHwgb2N0aW50ZWdlciB8IGhleGludGVnZXIgfCBiaW5pbnRlZ2VyXG4gICBkZWNpbWFsaW50ZWdlciA6Oj0gbm9uemVyb2RpZ2l0IGRpZ2l0KiB8ICIwIitcbiAgIG5vbnplcm9kaWdpdCAgIDo6PSAiMSIuLi4iOSJcbiAgIGRpZ2l0ICAgICAgICAgIDo6PSAiMCIuLi4iOSJcbiAgIG9jdGludGVnZXIgICAgIDo6PSAiMCIgKCJvIiB8ICJPIikgb2N0ZGlnaXQrXG4gICBoZXhpbnRlZ2VyICAgICA6Oj0gIjAiICgieCIgfCAiWCIpIGhleGRpZ2l0K1xuICAgYmluaW50ZWdlciAgICAgOjo9ICIwIiAoImIiIHwgIkIiKSBiaW5kaWdpdCtcbiAgIG9jdGRpZ2l0ICAgICAgIDo6PSAiMCIuLi4iNyJcbiAgIGhleGRpZ2l0ICAgICAgIDo6PSBkaWdpdCB8ICJhIi4uLiJmIiB8ICJBIi4uLiJGIlxuICAgYmluZGlnaXQgICAgICAgOjo9ICIwIiB8ICIxIlxuXG5UaGVyZSBpcyBubyBsaW1pdCBmb3IgdGhlIGxlbmd0aCBvZiBpbnRlZ2VyIGxpdGVyYWxzIGFwYXJ0IGZyb20gd2hhdFxuY2FuIGJlIHN0b3JlZCBpbiBhdmFpbGFibGUgbWVtb3J5LlxuXG5Ob3RlIHRoYXQgbGVhZGluZyB6ZXJvcyBpbiBhIG5vbi16ZXJvIGRlY2ltYWwgbnVtYmVyIGFyZSBub3QgYWxsb3dlZC5cblRoaXMgaXMgZm9yIGRpc2FtYmlndWF0aW9uIHdpdGggQy1zdHlsZSBvY3RhbCBsaXRlcmFscywgd2hpY2ggUHl0aG9uXG51c2VkIGJlZm9yZSB2ZXJzaW9uIDMuMC5cblxuU29tZSBleGFtcGxlcyBvZiBpbnRlZ2VyIGxpdGVyYWxzOlxuXG4gICA3ICAgICAyMTQ3NDgzNjQ3ICAgICAgICAgICAgICAgICAgICAgICAgMG8xNzcgICAgMGIxMDAxMTAxMTFcbiAgIDMgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAwbzM3NyAgICAweDEwMDAwMDAwMFxuICAgICAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgICAgICAgICAgIDB4ZGVhZGJlZWZcbicsCiAgJ2xhbWJkYSc6ICdcbkxhbWJkYXNcbioqKioqKipcblxuICAgbGFtYmRhX2Zvcm0gICAgICAgIDo6PSAibGFtYmRhIiBbcGFyYW1ldGVyX2xpc3RdOiBleHByZXNzaW9uXG4gICBsYW1iZGFfZm9ybV9ub2NvbmQgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25fbm9jb25kXG5cbkxhbWJkYSBmb3JtcyAobGFtYmRhIGV4cHJlc3Npb25zKSBoYXZlIHRoZSBzYW1lIHN5bnRhY3RpYyBwb3NpdGlvbiBhc1xuZXhwcmVzc2lvbnMuICBUaGV5IGFyZSBhIHNob3J0aGFuZCB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9uczsgdGhlXG5leHByZXNzaW9uIGBgbGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbmBgIHlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC5cblRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvbiBvYmplY3QgZGVmaW5lZCB3aXRoXG5cbiAgIGRlZiA8bGFtYmRhPihhcmd1bWVudHMpOlxuICAgICAgIHJldHVybiBleHByZXNzaW9uXG5cblNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIHRoZSBzeW50YXggb2YgcGFyYW1ldGVyIGxpc3RzLlxuTm90ZSB0aGF0IGZ1bmN0aW9ucyBjcmVhdGVkIHdpdGggbGFtYmRhIGZvcm1zIGNhbm5vdCBjb250YWluXG5zdGF0ZW1lbnRzIG9yIGFubm90YXRpb25zLlxuJywKICAnbGlzdHMnOiAnXG5MaXN0IGRpc3BsYXlzXG4qKioqKioqKioqKioqXG5cbkEgbGlzdCBkaXNwbGF5IGlzIGEgcG9zc2libHkgZW1wdHkgc2VyaWVzIG9mIGV4cHJlc3Npb25zIGVuY2xvc2VkIGluXG5zcXVhcmUgYnJhY2tldHM6XG5cbiAgIGxpc3RfZGlzcGxheSA6Oj0gIlsiIFtleHByZXNzaW9uX2xpc3QgfCBjb21wcmVoZW5zaW9uXSAiXSJcblxuQSBsaXN0IGRpc3BsYXkgeWllbGRzIGEgbmV3IGxpc3Qgb2JqZWN0LCB0aGUgY29udGVudHMgYmVpbmcgc3BlY2lmaWVkXG5ieSBlaXRoZXIgYSBsaXN0IG9mIGV4cHJlc3Npb25zIG9yIGEgY29tcHJlaGVuc2lvbi4gIFdoZW4gYSBjb21tYS1cbnNlcGFyYXRlZCBsaXN0IG9mIGV4cHJlc3Npb25zIGlzIHN1cHBsaWVkLCBpdHMgZWxlbWVudHMgYXJlIGV2YWx1YXRlZFxuZnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCBwbGFjZWQgaW50byB0aGUgbGlzdCBvYmplY3QgaW4gdGhhdCBvcmRlci5cbldoZW4gYSBjb21wcmVoZW5zaW9uIGlzIHN1cHBsaWVkLCB0aGUgbGlzdCBpcyBjb25zdHJ1Y3RlZCBmcm9tIHRoZVxuZWxlbWVudHMgcmVzdWx0aW5nIGZyb20gdGhlIGNvbXByZWhlbnNpb24uXG4nLAotICduYW1pbmcnOiAiXG5OYW1pbmcgYW5kIGJpbmRpbmdcbioqKioqKioqKioqKioqKioqKlxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuIEVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG9cbnRoZSAqYmluZGluZyogb2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGluIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24gYmxvY2tcbmNvbnRhaW5pbmcgdGhlIHVzZS5cblxuQSAqYmxvY2sqIGlzIGEgcGllY2Ugb2YgUHl0aG9uIHByb2dyYW0gdGV4dCB0aGF0IGlzIGV4ZWN1dGVkIGFzIGFcbnVuaXQuIFRoZSBmb2xsb3dpbmcgYXJlIGJsb2NrczogYSBtb2R1bGUsIGEgZnVuY3Rpb24gYm9keSwgYW5kIGEgY2xhc3NcbmRlZmluaXRpb24uIEVhY2ggY29tbWFuZCB0eXBlZCBpbnRlcmFjdGl2ZWx5IGlzIGEgYmxvY2suICBBIHNjcmlwdFxuZmlsZSAoYSBmaWxlIGdpdmVuIGFzIHN0YW5kYXJkIGlucHV0IHRvIHRoZSBpbnRlcnByZXRlciBvciBzcGVjaWZpZWRcbm9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgdGhlIGZpcnN0IGFyZ3VtZW50KSBpcyBhIGNvZGUgYmxvY2suXG5BIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmVcbndpdGggdGhlICcqKi1jKionIG9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZyBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBldmFsKClgYCBhbmQgYGBleGVjKClgYCBpcyBhIGNvZGUgYmxvY2suXG5cbkEgY29kZSBibG9jayBpcyBleGVjdXRlZCBpbiBhbiAqZXhlY3V0aW9uIGZyYW1lKi4gIEEgZnJhbWUgY29udGFpbnNcbnNvbWUgYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24gKHVzZWQgZm9yIGRlYnVnZ2luZykgYW5kIGRldGVybWluZXNcbndoZXJlIGFuZCBob3cgZXhlY3V0aW9uIGNvbnRpbnVlcyBhZnRlciB0aGUgY29kZSBibG9jaydzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9jaydzICplbnZpcm9ubWVudCouXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgYGBub25sb2NhbGBgLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZSBtb2R1bGVcbmxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGUgY29kZVxuYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZSBibG9ja1xuYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhICpmcmVlIHZhcmlhYmxlKi5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSBgYE5hbWVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5JZiB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYVxuYGBVbmJvdW5kTG9jYWxFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBgYFVuYm91bmRMb2NhbEVycm9yYGAgaXMgYVxuc3ViY2xhc3Mgb2YgYGBOYW1lRXJyb3JgYC5cblxuVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIGJpbmQgbmFtZXM6IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucyxcbmBgaW1wb3J0YGAgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsIGBgZm9yYGAgbG9vcCBoZWFkZXIsIG9yXG5hZnRlciBgYGFzYGAgaW4gYSBgYHdpdGhgYCBzdGF0ZW1lbnQgb3IgYGBleGNlcHRgYCBjbGF1c2UuIFRoZVxuYGBpbXBvcnRgYCBzdGF0ZW1lbnQgb2YgdGhlIGZvcm0gYGBmcm9tIC4uLiBpbXBvcnQgKmBgIGJpbmRzIGFsbCBuYW1lc1xuZGVmaW5lZCBpbiB0aGUgaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW5cbnVuZGVyc2NvcmUuICBUaGlzIGZvcm0gbWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSBgYGRlbGBgIHN0YXRlbWVudCBpcyBhbHNvIGNvbnNpZGVyZWQgYm91bmQgZm9yXG50aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS4gIEl0XG5pcyBpbGxlZ2FsIHRvIHVuYmluZCBhIG5hbWUgdGhhdCBpcyByZWZlcmVuY2VkIGJ5IGFuIGVuY2xvc2luZyBzY29wZTtcbnRoZSBjb21waWxlciB3aWxsIHJlcG9ydCBhIGBgU3ludGF4RXJyb3JgYC5cblxuRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYVxuY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsXG5jb2RlIGJsb2NrKS5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlIGBgZ2xvYmFsYGAgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlXG5uYW1lIHNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpblxudGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbFxubmFtZXNwYWNlIGJ5IHNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZVxubW9kdWxlIGNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGVcbm5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGBgYnVpbHRpbnNgYC4gIFRoZSBnbG9iYWwgbmFtZXNwYWNlIGlzXG5zZWFyY2hlZCBmaXJzdC4gIElmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGJ1aWx0aW5zXG5uYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGUgZ2xvYmFsIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2ZcbnRoZSBuYW1lLlxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSBgYF9fYnVpbHRpbnNfX2BgIGluIGl0c1xuZ2xvYmFsIG5hbWVzcGFjZTsgdGhpcyBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5IG9yIGEgbW9kdWxlIChpbiB0aGVcbmxhdHRlciBjYXNlIHRoZSBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGVcbmBgX19tYWluX19gYCBtb2R1bGUsIGBgX19idWlsdGluc19fYGAgaXMgdGhlIGJ1aWx0LWluIG1vZHVsZVxuYGBidWlsdGluc2BgOyB3aGVuIGluIGFueSBvdGhlciBtb2R1bGUsIGBgX19idWlsdGluc19fYGAgaXMgYW4gYWxpYXNcbmZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGUgYGBidWlsdGluc2BgIG1vZHVsZSBpdHNlbGYuXG5gYF9fYnVpbHRpbnNfX2BgIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWQgZGljdGlvbmFyeSB0byBjcmVhdGUgYVxud2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbmBgX19idWlsdGluc19fYGA7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCBgYGltcG9ydGBgXG50aGUgYGBidWlsdGluc2BgIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbmBgX19tYWluX19gYC5cblxuVGhlIGBgZ2xvYmFsYGAgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZ1xub3BlcmF0aW9uIGluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhXG5mcmVlIHZhcmlhYmxlIGNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXNcbnRyZWF0ZWQgYXMgYSBnbG9iYWwuXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZVxubmFtZXMuIFRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi5cblRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnlcbm9mIHRoZSBjbGFzcy4gIE5hbWVzIGRlZmluZWQgYXQgdGhlIGNsYXNzIHNjb3BlIGFyZSBub3QgdmlzaWJsZSBpblxubWV0aG9kcy5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIHVzZWQgaW4gYVxuZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWVcbnZhcmlhYmxlcywgdGhlIGNvbXBpbGVyIHdpbGwgcmFpc2UgYSBgYFN5bnRheEVycm9yYGAuXG5cblRoZSBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGxcbmVudmlyb25tZW50IGZvciByZXNvbHZpbmcgbmFtZXMuICBOYW1lcyBtYXkgYmUgcmVzb2x2ZWQgaW4gdGhlIGxvY2FsXG5hbmQgZ2xvYmFsIG5hbWVzcGFjZXMgb2YgdGhlIGNhbGxlci4gIEZyZWUgdmFyaWFibGVzIGFyZSBub3QgcmVzb2x2ZWRcbmluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBuYW1lc3BhY2UsIGJ1dCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gIFsxXVxuVGhlIGBgZXhlYygpYGAgYW5kIGBgZXZhbCgpYGAgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbiIsCisgJ25hbWluZyc6ICJcbk5hbWluZyBhbmQgYmluZGluZ1xuKioqKioqKioqKioqKioqKioqXG5cbipOYW1lcyogcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy4gRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0b1xudGhlICpiaW5kaW5nKiBvZiB0aGF0IG5hbWUgZXN0YWJsaXNoZWQgaW4gdGhlIGlubmVybW9zdCBmdW5jdGlvbiBibG9ja1xuY29udGFpbmluZyB0aGUgdXNlLlxuXG5BICpibG9jayogaXMgYSBwaWVjZSBvZiBQeXRob24gcHJvZ3JhbSB0ZXh0IHRoYXQgaXMgZXhlY3V0ZWQgYXMgYVxudW5pdC4gVGhlIGZvbGxvd2luZyBhcmUgYmxvY2tzOiBhIG1vZHVsZSwgYSBmdW5jdGlvbiBib2R5LCBhbmQgYSBjbGFzc1xuZGVmaW5pdGlvbi4gRWFjaCBjb21tYW5kIHR5cGVkIGludGVyYWN0aXZlbHkgaXMgYSBibG9jay4gIEEgc2NyaXB0XG5maWxlIChhIGZpbGUgZ2l2ZW4gYXMgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZFxub24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZSB0aGUgZmlyc3QgYXJndW1lbnQpIGlzIGEgY29kZSBibG9jay5cbkEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24gdGhlIGludGVycHJldGVyIGNvbW1hbmQgbGluZVxud2l0aCB0aGUgJyoqLWMqKicgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUgc3RyaW5nIGFyZ3VtZW50IHBhc3NlZFxudG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGV2YWwoKWBgIGFuZCBgYGV4ZWMoKWBgIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrJ3MgZXhlY3V0aW9uIGhhc1xuY29tcGxldGVkLlxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS4gIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGFcbmNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlXG5jb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tIHRoaXMgaW5jbHVkZXMgY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvclxuZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgYSBmdW5jdGlvbiBzY29wZS4gIFRoaXNcbm1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyB3aWxsIGZhaWw6XG5cbiAgIGNsYXNzIEE6XG4gICAgICAgYSA9IDQyXG4gICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKVxuXG5XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3RcbmVuY2xvc2luZyBzY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrXG5pcyBjYWxsZWQgdGhlIGJsb2NrJ3MgKmVudmlyb25tZW50Ki5cblxuSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jayxcbnVubGVzcyBkZWNsYXJlZCBhcyBgYG5vbmxvY2FsYGAuICBJZiBhIG5hbWUgaXMgYm91bmQgYXQgdGhlIG1vZHVsZVxubGV2ZWwsIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKFRoZSB2YXJpYWJsZXMgb2YgdGhlIG1vZHVsZSBjb2RlXG5ibG9jayBhcmUgbG9jYWwgYW5kIGdsb2JhbC4pICBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrXG5idXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEgKmZyZWUgdmFyaWFibGUqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhIGBgTmFtZUVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbklmIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgaGFzIG5vdCBiZWVuIGJvdW5kLCBhXG5gYFVuYm91bmRMb2NhbEVycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIGBgVW5ib3VuZExvY2FsRXJyb3JgYCBpcyBhXG5zdWJjbGFzcyBvZiBgYE5hbWVFcnJvcmBgLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuYGBpbXBvcnRgYCBzdGF0ZW1lbnRzLCBjbGFzcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXNlIGJpbmQgdGhlXG5jbGFzcyBvciBmdW5jdGlvbiBuYW1lIGluIHRoZSBkZWZpbmluZyBibG9jayksIGFuZCB0YXJnZXRzIHRoYXQgYXJlXG5pZGVudGlmaWVycyBpZiBvY2N1cnJpbmcgaW4gYW4gYXNzaWdubWVudCwgYGBmb3JgYCBsb29wIGhlYWRlciwgb3JcbmFmdGVyIGBgYXNgYCBpbiBhIGBgd2l0aGBgIHN0YXRlbWVudCBvciBgYGV4Y2VwdGBgIGNsYXVzZS4gVGhlXG5gYGltcG9ydGBgIHN0YXRlbWVudCBvZiB0aGUgZm9ybSBgYGZyb20gLi4uIGltcG9ydCAqYGAgYmluZHMgYWxsIG5hbWVzXG5kZWZpbmVkIGluIHRoZSBpbXBvcnRlZCBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBiZWdpbm5pbmcgd2l0aCBhblxudW5kZXJzY29yZS4gIFRoaXMgZm9ybSBtYXkgb25seSBiZSB1c2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuXG5cbkEgdGFyZ2V0IG9jY3VycmluZyBpbiBhIGBgZGVsYGAgc3RhdGVtZW50IGlzIGFsc28gY29uc2lkZXJlZCBib3VuZCBmb3JcbnRoaXMgcHVycG9zZSAodGhvdWdoIHRoZSBhY3R1YWwgc2VtYW50aWNzIGFyZSB0byB1bmJpbmQgdGhlIG5hbWUpLlxuXG5FYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhXG5jbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWxcbmNvZGUgYmxvY2spLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrLCBhbGwgdXNlcyBvZiB0aGVcbm5hbWUgc3BlY2lmaWVkIGluIHRoZSBzdGF0ZW1lbnQgcmVmZXIgdG8gdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGluXG50aGUgdG9wLWxldmVsIG5hbWVzcGFjZS4gIE5hbWVzIGFyZSByZXNvbHZlZCBpbiB0aGUgdG9wLWxldmVsXG5uYW1lc3BhY2UgYnkgc2VhcmNoaW5nIHRoZSBnbG9iYWwgbmFtZXNwYWNlLCBpLmUuIHRoZSBuYW1lc3BhY2Ugb2YgdGhlXG5tb2R1bGUgY29udGFpbmluZyB0aGUgY29kZSBibG9jaywgYW5kIHRoZSBidWlsdGlucyBuYW1lc3BhY2UsIHRoZVxubmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgYGBidWlsdGluc2BgLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXNcbnNlYXJjaGVkIGZpcnN0LiAgSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnNcbm5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZSBnbG9iYWwgc3RhdGVtZW50IG11c3QgcHJlY2VkZSBhbGwgdXNlcyBvZlxudGhlIG5hbWUuXG5cblRoZSBidWlsdGlucyBuYW1lc3BhY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBleGVjdXRpb24gb2YgYSBjb2RlIGJsb2NrXG5pcyBhY3R1YWxseSBmb3VuZCBieSBsb29raW5nIHVwIHRoZSBuYW1lIGBgX19idWlsdGluc19fYGAgaW4gaXRzXG5nbG9iYWwgbmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZVxubGF0dGVyIGNhc2UgdGhlIG1vZHVsZSdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZVxuYGBfX21haW5fX2BgIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlXG5gYGJ1aWx0aW5zYGA7IHdoZW4gaW4gYW55IG90aGVyIG1vZHVsZSwgYGBfX2J1aWx0aW5zX19gYCBpcyBhbiBhbGlhc1xuZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGl0c2VsZi5cbmBgX19idWlsdGluc19fYGAgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZCBkaWN0aW9uYXJ5IHRvIGNyZWF0ZSBhXG53ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuYGBfX2J1aWx0aW5zX19gYDsgaXQgaXMgc3RyaWN0bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiAgVXNlcnNcbndhbnRpbmcgdG8gb3ZlcnJpZGUgdmFsdWVzIGluIHRoZSBidWlsdGlucyBuYW1lc3BhY2Ugc2hvdWxkIGBgaW1wb3J0YGBcbnRoZSBgYGJ1aWx0aW5zYGAgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuYGBfX21haW5fX2BgLlxuXG5UaGUgYGBnbG9iYWxgYCBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb24gaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGFcbmZyZWUgdmFyaWFibGUgY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpc1xudHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lXG5uYW1lcy4gVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uLlxuVGhlIG5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeVxub2YgdGhlIGNsYXNzLiAgTmFtZXMgZGVmaW5lZCBhdCB0aGUgY2xhc3Mgc2NvcGUgYXJlIG5vdCB2aXNpYmxlIGluXG5tZXRob2RzLlxuXG5cbkludGVyYWN0aW9uIHdpdGggZHluYW1pYyBmZWF0dXJlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cbklmIHRoZSB3aWxkIGNhcmQgZm9ybSBvZiBpbXBvcnQgLS0tIGBgaW1wb3J0ICpgYCAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhIGBgU3ludGF4RXJyb3JgYC5cblxuVGhlIGBgZXZhbCgpYGAgYW5kIGBgZXhlYygpYGAgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgYGBleGVjKClgYCBhbmQgYGBldmFsKClgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbm92ZXJyaWRlIHRoZSBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzcGFjZS4gIElmIG9ubHkgb25lIG5hbWVzcGFjZSBpc1xuc3BlY2lmaWVkLCBpdCBpcyB1c2VkIGZvciBib3RoLlxuIiwKICAnbm9ubG9jYWwnOiAnXG5UaGUgYGBub25sb2NhbGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgbm9ubG9jYWxfc3RtdCA6Oj0gIm5vbmxvY2FsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSBgYG5vbmxvY2FsYGAgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUuICBUaGlzIGlzXG5pbXBvcnRhbnQgYmVjYXVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYmluZGluZyBpcyB0byBzZWFyY2ggdGhlXG5sb2NhbCBuYW1lc3BhY2UgZmlyc3QuICBUaGUgc3RhdGVtZW50IGFsbG93cyBlbmNhcHN1bGF0ZWQgY29kZSB0b1xucmViaW5kIHZhcmlhYmxlcyBvdXRzaWRlIG9mIHRoZSBsb2NhbCBzY29wZSBiZXNpZGVzIHRoZSBnbG9iYWxcbihtb2R1bGUpIHNjb3BlLlxuXG5OYW1lcyBsaXN0ZWQgaW4gYSBgYG5vbmxvY2FsYGAgc3RhdGVtZW50LCB1bmxpa2UgdG8gdGhvc2UgbGlzdGVkIGluIGFcbmBgZ2xvYmFsYGAgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhblxuZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZFxuY2Fubm90IGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuXG5cbk5hbWVzIGxpc3RlZCBpbiBhIGBgbm9ubG9jYWxgYCBzdGF0ZW1lbnQgbXVzdCBub3QgY29sbGlkZSB3aXRoIHByZS1cbmV4aXN0aW5nIGJpbmRpbmdzIGluIHRoZSBsb2NhbCBzY29wZS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMDQqKiAtIEFjY2VzcyB0byBOYW1lcyBpbiBPdXRlciBTY29wZXNcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYGBub25sb2NhbGBgIHN0YXRlbWVudC5cbicsCiAgJ251bWJlcnMnOiAiXG5OdW1lcmljIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBudW1lcmljIGxpdGVyYWxzOiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnRcbm51bWJlcnMsIGFuZCBpbWFnaW5hcnkgbnVtYmVycy4gIFRoZXJlIGFyZSBubyBjb21wbGV4IGxpdGVyYWxzXG4oY29tcGxleCBudW1iZXJzIGNhbiBiZSBmb3JtZWQgYnkgYWRkaW5nIGEgcmVhbCBudW1iZXIgYW5kIGFuXG5pbWFnaW5hcnkgbnVtYmVyKS5cblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlIGBgLTFgYFxuaXMgYWN0dWFsbHkgYW4gZXhwcmVzc2lvbiBjb21wb3NlZCBvZiB0aGUgdW5hcnkgb3BlcmF0b3IgJ2BgLWBgJyBhbmRcbnRoZSBsaXRlcmFsIGBgMWBgLlxuIiwKICAnbnVtZXJpYy10eXBlcyc6ICJcbkVtdWxhdGluZyBudW1lcmljIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gZW11bGF0ZSBudW1lcmljIG9iamVjdHMuXG5NZXRob2RzIGNvcnJlc3BvbmRpbmcgdG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZVxucGFydGljdWxhciBraW5kIG9mIG51bWJlciBpbXBsZW1lbnRlZCAoZS5nLiwgYml0d2lzZSBvcGVyYXRpb25zIGZvclxubm9uLWludGVncmFsIG51bWJlcnMpIHNob3VsZCBiZSBsZWZ0IHVuZGVmaW5lZC5cblxub2JqZWN0Ll9fYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19zdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX211bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fdHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX21vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19wb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19sc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX194b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX29yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIGBgeCArIHlgYCwgd2hlcmVcbiAgICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19hZGRfXygpYGAgbWV0aG9kLFxuICAgYGB4Ll9fYWRkX18oeSlgYCBpcyBjYWxsZWQuICBUaGUgYGBfX2Rpdm1vZF9fKClgYCBtZXRob2Qgc2hvdWxkIGJlXG4gICB0aGUgZXF1aXZhbGVudCB0byB1c2luZyBgYF9fZmxvb3JkaXZfXygpYGAgYW5kIGBgX19tb2RfXygpYGA7IGl0XG4gICBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gYGBfX3RydWVkaXZfXygpYGAuICBOb3RlIHRoYXRcbiAgIGBgX19wb3dfXygpYGAgc2hvdWxkIGJlIGRlZmluZWQgdG8gYWNjZXB0IGFuIG9wdGlvbmFsIHRoaXJkXG4gICBhcmd1bWVudCBpZiB0aGUgdGVybmFyeSB2ZXJzaW9uIG9mIHRoZSBidWlsdC1pbiBgYHBvdygpYGAgZnVuY3Rpb25cbiAgIGlzIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gYGBOb3RJbXBsZW1lbnRlZGBgLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKGBgK2BgLCBgYC1gYCwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgLFxuICAgYGBkaXZtb2QoKWBgLCBgYHBvdygpYGAsIGBgKipgYCwgYGA8PGBgLCBgYD4+YGAsIGBgJmBgLCBgYF5gYCxcbiAgIGBgfGBgKSB3aXRoIHJlZmxlY3RlZCAoc3dhcHBlZCkgb3BlcmFuZHMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seVxuICAgY2FsbGVkIGlmIHRoZSBsZWZ0IG9wZXJhbmQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZ1xuICAgb3BlcmF0aW9uIGFuZCB0aGUgb3BlcmFuZHMgYXJlIG9mIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3JcbiAgIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggLSB5YGAsIHdoZXJlICp5KiBpcyBhblxuICAgaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fcnN1Yl9fKClgYCBtZXRob2QsXG4gICBgYHkuX19yc3ViX18oeClgYCBpcyBjYWxsZWQgaWYgYGB4Ll9fc3ViX18oeSlgYCByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSBgYHBvdygpYGAgd2lsbCBub3QgdHJ5IGNhbGxpbmcgYGBfX3Jwb3dfXygpYGBcbiAgICh0aGUgY29lcmNpb24gcnVsZXMgd291bGQgYmVjb21lIHRvbyBjb21wbGljYXRlZCkuXG5cbiAgIE5vdGU6IElmIHRoZSByaWdodCBvcGVyYW5kJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmQnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZCdzXG4gICAgIG5vbi1yZWZsZWN0ZWQgbWV0aG9kLiAgVGhpcyBiZWhhdmlvciBhbGxvd3Mgc3ViY2xhc3NlcyB0b1xuICAgICBvdmVycmlkZSB0aGVpciBhbmNlc3RvcnMnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzIChgYCs9YGAsIGBgLT1gYCwgYGAqPWBgLCBgYC89YGAsIGBgLy89YGAsIGBgJT1gYCxcbiAgIGBgKio9YGAsIGBgPDw9YGAsIGBgPj49YGAsIGBgJj1gYCwgYGBePWBgLCBgYHw9YGApLiAgVGhlc2UgbWV0aG9kc1xuICAgc2hvdWxkIGF0dGVtcHQgdG8gZG8gdGhlIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kXG4gICByZXR1cm4gdGhlIHJlc3VsdCAod2hpY2ggY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLFxuICAgKnNlbGYqKS4gIElmIGEgc3BlY2lmaWMgbWV0aG9kIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGZhbGxzIGJhY2sgdG8gdGhlIG5vcm1hbCBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0b1xuICAgZXhlY3V0ZSB0aGUgc3RhdGVtZW50IGBgeCArPSB5YGAsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhXG4gICBjbGFzcyB0aGF0IGhhcyBhbiBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2lhZGRfXyh5KWBgIGlzXG4gICBjYWxsZWQuICBJZiAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGRvZXMgbm90IGRlZmluZSBhXG4gICBgYF9faWFkZF9fKClgYCBtZXRob2QsIGBgeC5fX2FkZF9fKHkpYGAgYW5kIGBgeS5fX3JhZGRfXyh4KWBgIGFyZVxuICAgY29uc2lkZXJlZCwgYXMgd2l0aCB0aGUgZXZhbHVhdGlvbiBvZiBgYHggKyB5YGAuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoYGAtYGAsIGBgK2BgLFxuICAgYGBhYnMoKWBgIGFuZCBgYH5gYCkuXG5cbm9iamVjdC5fX2NvbXBsZXhfXyhzZWxmKVxub2JqZWN0Ll9faW50X18oc2VsZilcbm9iamVjdC5fX2Zsb2F0X18oc2VsZilcbm9iamVjdC5fX3JvdW5kX18oc2VsZlssIG5dKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYGBjb21wbGV4KClgYCxcbiAgIGBgaW50KClgYCwgYGBmbG9hdCgpYGAgYW5kIGBgcm91bmQoKWBgLiAgU2hvdWxkIHJldHVybiBhIHZhbHVlIG9mXG4gICB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblxub2JqZWN0Ll9faW5kZXhfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGBgb3BlcmF0b3IuaW5kZXgoKWBgLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluIGBgYmluKClgYCwgYGBoZXgoKWBgIGFuZCBgYG9jdCgpYGAgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm5cbiAgIGFuIGludGVnZXIuXG4iLAogICdvYmplY3RzJzogJ1xuT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4qT2JqZWN0cyogYXJlIFB5dGhvblwncyBhYnN0cmFjdGlvbiBmb3IgZGF0YS4gIEFsbCBkYXRhIGluIGEgUHl0aG9uXG5wcm9ncmFtIGlzIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMgb3IgYnkgcmVsYXRpb25zIGJldHdlZW4gb2JqZWN0cy4gKEluXG5hIHNlbnNlLCBhbmQgaW4gY29uZm9ybWFuY2UgdG8gVm9uIE5ldW1hbm5cJ3MgbW9kZWwgb2YgYSAic3RvcmVkXG5wcm9ncmFtIGNvbXB1dGVyLCIgY29kZSBpcyBhbHNvIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuKVxuXG5FdmVyeSBvYmplY3QgaGFzIGFuIGlkZW50aXR5LCBhIHR5cGUgYW5kIGEgdmFsdWUuICBBbiBvYmplY3RcJ3NcbippZGVudGl0eSogbmV2ZXIgY2hhbmdlcyBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQ7IHlvdSBtYXkgdGhpbmsgb2YgaXRcbmFzIHRoZSBvYmplY3RcJ3MgYWRkcmVzcyBpbiBtZW1vcnkuICBUaGUgXCdgYGlzYGBcJyBvcGVyYXRvciBjb21wYXJlcyB0aGVcbmlkZW50aXR5IG9mIHR3byBvYmplY3RzOyB0aGUgYGBpZCgpYGAgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyXG5yZXByZXNlbnRpbmcgaXRzIGlkZW50aXR5IChjdXJyZW50bHkgaW1wbGVtZW50ZWQgYXMgaXRzIGFkZHJlc3MpLiBBblxub2JqZWN0XCdzICp0eXBlKiBpcyBhbHNvIHVuY2hhbmdlYWJsZS4gWzFdIEFuIG9iamVjdFwncyB0eXBlIGRldGVybWluZXNcbnRoZSBvcGVyYXRpb25zIHRoYXQgdGhlIG9iamVjdCBzdXBwb3J0cyAoZS5nLiwgImRvZXMgaXQgaGF2ZSBhXG5sZW5ndGg/IikgYW5kIGFsc28gZGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzIGZvciBvYmplY3RzIG9mIHRoYXRcbnR5cGUuICBUaGUgYGB0eXBlKClgYCBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdFwncyB0eXBlICh3aGljaCBpcyBhblxub2JqZWN0IGl0c2VsZikuICBUaGUgKnZhbHVlKiBvZiBzb21lIG9iamVjdHMgY2FuIGNoYW5nZS4gIE9iamVjdHNcbndob3NlIHZhbHVlIGNhbiBjaGFuZ2UgYXJlIHNhaWQgdG8gYmUgKm11dGFibGUqOyBvYmplY3RzIHdob3NlIHZhbHVlXG5pcyB1bmNoYW5nZWFibGUgb25jZSB0aGV5IGFyZSBjcmVhdGVkIGFyZSBjYWxsZWQgKmltbXV0YWJsZSouIChUaGVcbnZhbHVlIG9mIGFuIGltbXV0YWJsZSBjb250YWluZXIgb2JqZWN0IHRoYXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYVxubXV0YWJsZSBvYmplY3QgY2FuIGNoYW5nZSB3aGVuIHRoZSBsYXR0ZXJcJ3MgdmFsdWUgaXMgY2hhbmdlZDsgaG93ZXZlclxudGhlIGNvbnRhaW5lciBpcyBzdGlsbCBjb25zaWRlcmVkIGltbXV0YWJsZSwgYmVjYXVzZSB0aGUgY29sbGVjdGlvbiBvZlxub2JqZWN0cyBpdCBjb250YWlucyBjYW5ub3QgYmUgY2hhbmdlZC4gIFNvLCBpbW11dGFiaWxpdHkgaXMgbm90XG5zdHJpY3RseSB0aGUgc2FtZSBhcyBoYXZpbmcgYW4gdW5jaGFuZ2VhYmxlIHZhbHVlLCBpdCBpcyBtb3JlIHN1YnRsZS4pXG5BbiBvYmplY3RcJ3MgbXV0YWJpbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGl0cyB0eXBlOyBmb3IgaW5zdGFuY2UsXG5udW1iZXJzLCBzdHJpbmdzIGFuZCB0dXBsZXMgYXJlIGltbXV0YWJsZSwgd2hpbGUgZGljdGlvbmFyaWVzIGFuZFxubGlzdHMgYXJlIG11dGFibGUuXG5cbk9iamVjdHMgYXJlIG5ldmVyIGV4cGxpY2l0bHkgZGVzdHJveWVkOyBob3dldmVyLCB3aGVuIHRoZXkgYmVjb21lXG51bnJlYWNoYWJsZSB0aGV5IG1heSBiZSBnYXJiYWdlLWNvbGxlY3RlZC4gIEFuIGltcGxlbWVudGF0aW9uIGlzXG5hbGxvd2VkIHRvIHBvc3Rwb25lIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBvbWl0IGl0IGFsdG9nZXRoZXIgLS0tIGl0IGlzXG5hIG1hdHRlciBvZiBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGhvdyBnYXJiYWdlIGNvbGxlY3Rpb24gaXNcbmltcGxlbWVudGVkLCBhcyBsb25nIGFzIG5vIG9iamVjdHMgYXJlIGNvbGxlY3RlZCB0aGF0IGFyZSBzdGlsbFxucmVhY2hhYmxlLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIENQeXRob24gY3VycmVudGx5IHVzZXMgYSByZWZlcmVuY2UtXG5jb3VudGluZyBzY2hlbWUgd2l0aCAob3B0aW9uYWwpIGRlbGF5ZWQgZGV0ZWN0aW9uIG9mIGN5Y2xpY2FsbHkgbGlua2VkXG5nYXJiYWdlLCB3aGljaCBjb2xsZWN0cyBtb3N0IG9iamVjdHMgYXMgc29vbiBhcyB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUsIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0byBjb2xsZWN0IGdhcmJhZ2UgY29udGFpbmluZ1xuY2lyY3VsYXIgcmVmZXJlbmNlcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgYGBnY2BgIG1vZHVsZSBmb3JcbmluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBjb2xsZWN0aW9uIG9mIGN5Y2xpYyBnYXJiYWdlLiBPdGhlclxuaW1wbGVtZW50YXRpb25zIGFjdCBkaWZmZXJlbnRseSBhbmQgQ1B5dGhvbiBtYXkgY2hhbmdlLiBEbyBub3QgZGVwZW5kXG5vbiBpbW1lZGlhdGUgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2hlbiB0aGV5IGJlY29tZSB1bnJlYWNoYWJsZSAoZXg6XG5hbHdheXMgY2xvc2UgZmlsZXMpLlxuXG5Ob3RlIHRoYXQgdGhlIHVzZSBvZiB0aGUgaW1wbGVtZW50YXRpb25cJ3MgdHJhY2luZyBvciBkZWJ1Z2dpbmdcbmZhY2lsaXRpZXMgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGNvbGxlY3RhYmxlLlxuQWxzbyBub3RlIHRoYXQgY2F0Y2hpbmcgYW4gZXhjZXB0aW9uIHdpdGggYSBcJ2BgdHJ5YGAuLi5gYGV4Y2VwdGBgXCdcbnN0YXRlbWVudCBtYXkga2VlcCBvYmplY3RzIGFsaXZlLlxuXG5Tb21lIG9iamVjdHMgY29udGFpbiByZWZlcmVuY2VzIHRvICJleHRlcm5hbCIgcmVzb3VyY2VzIHN1Y2ggYXMgb3BlblxuZmlsZXMgb3Igd2luZG93cy4gIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGVzZSByZXNvdXJjZXMgYXJlIGZyZWVkXG53aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZS1jb2xsZWN0ZWQsIGJ1dCBzaW5jZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXNcbm5vdCBndWFyYW50ZWVkIHRvIGhhcHBlbiwgc3VjaCBvYmplY3RzIGFsc28gcHJvdmlkZSBhbiBleHBsaWNpdCB3YXkgdG9cbnJlbGVhc2UgdGhlIGV4dGVybmFsIHJlc291cmNlLCB1c3VhbGx5IGEgYGBjbG9zZSgpYGAgbWV0aG9kLiBQcm9ncmFtc1xuYXJlIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRvIGV4cGxpY2l0bHkgY2xvc2Ugc3VjaCBvYmplY3RzLiAgVGhlXG5cJ2BgdHJ5YGAuLi5gYGZpbmFsbHlgYFwnIHN0YXRlbWVudCBhbmQgdGhlIFwnYGB3aXRoYGBcJyBzdGF0ZW1lbnQgcHJvdmlkZVxuY29udmVuaWVudCB3YXlzIHRvIGRvIHRoaXMuXG5cblNvbWUgb2JqZWN0cyBjb250YWluIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0czsgdGhlc2UgYXJlIGNhbGxlZFxuKmNvbnRhaW5lcnMqLiBFeGFtcGxlcyBvZiBjb250YWluZXJzIGFyZSB0dXBsZXMsIGxpc3RzIGFuZFxuZGljdGlvbmFyaWVzLiAgVGhlIHJlZmVyZW5jZXMgYXJlIHBhcnQgb2YgYSBjb250YWluZXJcJ3MgdmFsdWUuICBJblxubW9zdCBjYXNlcywgd2hlbiB3ZSB0YWxrIGFib3V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRhaW5lciwgd2UgaW1wbHkgdGhlXG52YWx1ZXMsIG5vdCB0aGUgaWRlbnRpdGllcyBvZiB0aGUgY29udGFpbmVkIG9iamVjdHM7IGhvd2V2ZXIsIHdoZW4gd2VcbnRhbGsgYWJvdXQgdGhlIG11dGFiaWxpdHkgb2YgYSBjb250YWluZXIsIG9ubHkgdGhlIGlkZW50aXRpZXMgb2YgdGhlXG5pbW1lZGlhdGVseSBjb250YWluZWQgb2JqZWN0cyBhcmUgaW1wbGllZC4gIFNvLCBpZiBhbiBpbW11dGFibGVcbmNvbnRhaW5lciAobGlrZSBhIHR1cGxlKSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhIG11dGFibGUgb2JqZWN0LCBpdHNcbnZhbHVlIGNoYW5nZXMgaWYgdGhhdCBtdXRhYmxlIG9iamVjdCBpcyBjaGFuZ2VkLlxuXG5UeXBlcyBhZmZlY3QgYWxtb3N0IGFsbCBhc3BlY3RzIG9mIG9iamVjdCBiZWhhdmlvci4gIEV2ZW4gdGhlXG5pbXBvcnRhbmNlIG9mIG9iamVjdCBpZGVudGl0eSBpcyBhZmZlY3RlZCBpbiBzb21lIHNlbnNlOiBmb3IgaW1tdXRhYmxlXG50eXBlcywgb3BlcmF0aW9ucyB0aGF0IGNvbXB1dGUgbmV3IHZhbHVlcyBtYXkgYWN0dWFsbHkgcmV0dXJuIGFcbnJlZmVyZW5jZSB0byBhbnkgZXhpc3Rpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdHlwZSBhbmQgdmFsdWUsIHdoaWxlXG5mb3IgbXV0YWJsZSBvYmplY3RzIHRoaXMgaXMgbm90IGFsbG93ZWQuICBFLmcuLCBhZnRlciBgYGEgPSAxOyBiID1cbjFgYCwgYGBhYGAgYW5kIGBgYmBgIG1heSBvciBtYXkgbm90IHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCB3aXRoIHRoZVxudmFsdWUgb25lLCBkZXBlbmRpbmcgb24gdGhlIGltcGxlbWVudGF0aW9uLCBidXQgYWZ0ZXIgYGBjID0gW107IGQgPVxuW11gYCwgYGBjYGAgYW5kIGBgZGBgIGFyZSBndWFyYW50ZWVkIHRvIHJlZmVyIHRvIHR3byBkaWZmZXJlbnQsXG51bmlxdWUsIG5ld2x5IGNyZWF0ZWQgZW1wdHkgbGlzdHMuIChOb3RlIHRoYXQgYGBjID0gZCA9IFtdYGAgYXNzaWduc1xudGhlIHNhbWUgb2JqZWN0IHRvIGJvdGggYGBjYGAgYW5kIGBgZGBgLilcbicsCi0gJ29wZXJhdG9yLXN1bW1hcnknOiAnXG5TdW1tYXJ5XG4qKioqKioqXG5cblRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgb3BlcmF0b3IgcHJlY2VkZW5jZXMgaW4gUHl0aG9uLFxuZnJvbSBsb3dlc3QgcHJlY2VkZW5jZSAobGVhc3QgYmluZGluZykgdG8gaGlnaGVzdCBwcmVjZWRlbmNlIChtb3N0XG5iaW5kaW5nKS4gIE9wZXJhdG9ycyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlLiAgVW5sZXNzXG50aGUgc3ludGF4IGlzIGV4cGxpY2l0bHkgZ2l2ZW4sIG9wZXJhdG9ycyBhcmUgYmluYXJ5LiAgT3BlcmF0b3JzIGluXG50aGUgc2FtZSBib3ggZ3JvdXAgbGVmdCB0byByaWdodCAoZXhjZXB0IGZvciBjb21wYXJpc29ucywgaW5jbHVkaW5nXG50ZXN0cywgd2hpY2ggYWxsIGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZSBhbmQgY2hhaW4gZnJvbSBsZWZ0IHRvIHJpZ2h0XG4tLS0gc2VlIHNlY3Rpb24gKkNvbXBhcmlzb25zKiAtLS0gYW5kIGV4cG9uZW50aWF0aW9uLCB3aGljaCBncm91cHNcbmZyb20gcmlnaHQgdG8gbGVmdCkuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBsYW1iZGFgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBMYW1iZGEgZXhwcmVzc2lvbiAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBpZmBgIC0tIGBgZWxzZWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBDb25kaXRpb25hbCBleHByZXNzaW9uICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBvcmBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBhbmRgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBub3RgYCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCb29sZWFuIE5PVCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBpbmBgLCBgYG5vdGBgIGBgaW5gYCwgYGBpc2BgLCBgYGlzIG5vdGBgLCAgICAgfCBDb21wYXJpc29ucywgaW5jbHVkaW5nIG1lbWJlcnNoaXAgICAgIHxcbnwgYGA8YGAsIGBgPD1gYCwgYGA+YGAsIGBgPj1gYCwgYGAhPWBgLCBgYD09YGAgICAgfCB0ZXN0cyBhbmQgaWRlbnRpdHkgdGVzdHMsICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGB8YGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBeYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIFhPUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGAmYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBCaXR3aXNlIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGA8PGBgLCBgYD4+YGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTaGlmdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGArYGAsIGBgLWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGAqYGAsIGBgL2BgLCBgYC8vYGAsIGBgJWBgICAgICAgICAgICAgICAgICAgICAgfCBNdWx0aXBsaWNhdGlvbiwgZGl2aXNpb24sIHJlbWFpbmRlciAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbNV0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGAreGBgLCBgYC14YGAsIGBgfnhgYCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQb3NpdGl2ZSwgbmVnYXRpdmUsIGJpdHdpc2UgTk9UICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGAqKmBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBFeHBvbmVudGlhdGlvbiBbNl0gICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGB4W2luZGV4XWBgLCBgYHhbaW5kZXg6aW5kZXhdYGAsICAgICAgICAgICAgICAgfCBTdWJzY3JpcHRpb24sIHNsaWNpbmcsIGNhbGwsICAgICAgICAgIHxcbnwgYGB4KGFyZ3VtZW50cy4uLilgYCwgYGB4LmF0dHJpYnV0ZWBgICAgICAgICAgICAgfCBhdHRyaWJ1dGUgcmVmZXJlbmNlICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGAoZXhwcmVzc2lvbnMuLi4pYGAsIGBgW2V4cHJlc3Npb25zLi4uXWBgLCAgICAgfCBCaW5kaW5nIG9yIHR1cGxlIGRpc3BsYXksIGxpc3QgICAgICAgIHxcbnwgYGB7a2V5OmRhdHVtLi4ufWBgLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaXNwbGF5LCBkaWN0aW9uYXJ5IGRpc3BsYXksICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBXaGlsZSBgYGFicyh4JXkpIDwgYWJzKHkpYGAgaXMgdHJ1ZSBtYXRoZW1hdGljYWxseSwgZm9yIGZsb2F0cyBpdFxuICAgIG1heSBub3QgYmUgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kXG4gICAgYXNzdW1pbmcgYSBwbGF0Zm9ybSBvbiB3aGljaCBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtXG4gICAgcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCBgYC0xZS0xMDAgJSAxZTEwMGBgIGhhdmUgdGhlIHNhbWVcbiAgICBzaWduIGFzIGBgMWUxMDBgYCwgdGhlIGNvbXB1dGVkIHJlc3VsdCBpcyBgYC0xZS0xMDAgKyAxZTEwMGBgLFxuICAgIHdoaWNoIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gYGAxZTEwMGBgLiAgVGhlIGZ1bmN0aW9uXG4gICAgYGBtYXRoLmZtb2QoKWBgIHJldHVybnMgYSByZXN1bHQgd2hvc2Ugc2lnbiBtYXRjaGVzIHRoZSBzaWduIG9mXG4gICAgdGhlIGZpcnN0IGFyZ3VtZW50IGluc3RlYWQsIGFuZCBzbyByZXR1cm5zIGBgLTFlLTEwMGBgIGluIHRoaXNcbiAgICBjYXNlLiBXaGljaCBhcHByb2FjaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlXG4gICAgYXBwbGljYXRpb24uXG5cblsyXSBJZiB4IGlzIHZlcnkgY2xvc2UgdG8gYW4gZXhhY3QgaW50ZWdlciBtdWx0aXBsZSBvZiB5LCBpdFwnc1xuICAgIHBvc3NpYmxlIGZvciBgYHgvL3lgYCB0byBiZSBvbmUgbGFyZ2VyIHRoYW4gYGAoeC14JXkpLy95YGAgZHVlIHRvXG4gICAgcm91bmRpbmcuICBJbiBzdWNoIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW5cbiAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGF0IGBgZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHlgYCBiZSB2ZXJ5XG4gICAgY2xvc2UgdG8gYGB4YGAuXG5cblszXSBXaGlsZSBjb21wYXJpc29ucyBiZXR3ZWVuIHN0cmluZ3MgbWFrZSBzZW5zZSBhdCB0aGUgYnl0ZSBsZXZlbCxcbiAgICB0aGV5IG1heSBiZSBjb3VudGVyLWludHVpdGl2ZSB0byB1c2Vycy4gIEZvciBleGFtcGxlLCB0aGUgc3RyaW5nc1xuICAgIGBgIlxcdTAwQzciYGAgYW5kIGBgIlxcdTAzMjdcXHUwMDQzImBgIGNvbXBhcmUgZGlmZmVyZW50bHksIGV2ZW5cbiAgICB0aG91Z2ggdGhleSBib3RoIHJlcHJlc2VudCB0aGUgc2FtZSB1bmljb2RlIGNoYXJhY3RlciAoTEFUSU5cbiAgICBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSkuICBUbyBjb21wYXJlIHN0cmluZ3MgaW4gYSBodW1hblxuICAgIHJlY29nbml6YWJsZSB3YXksIGNvbXBhcmUgdXNpbmcgYGB1bmljb2RlZGF0YS5ub3JtYWxpemUoKWBgLlxuXG5bNF0gRHVlIHRvIGF1dG9tYXRpYyBnYXJiYWdlLWNvbGxlY3Rpb24sIGZyZWUgbGlzdHMsIGFuZCB0aGUgZHluYW1pY1xuICAgIG5hdHVyZSBvZiBkZXNjcmlwdG9ycywgeW91IG1heSBub3RpY2Ugc2VlbWluZ2x5IHVudXN1YWwgYmVoYXZpb3VyXG4gICAgaW4gY2VydGFpbiB1c2VzIG9mIHRoZSBgYGlzYGAgb3BlcmF0b3IsIGxpa2UgdGhvc2UgaW52b2x2aW5nXG4gICAgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZSBtZXRob2RzLCBvciBjb25zdGFudHMuICBDaGVjayB0aGVpclxuICAgIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mby5cblxuWzVdIFRoZSBgYCVgYCBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciBgYCoqYGAgYmluZHMgbGVzcyB0aWdodGx5IHRoYW4gYW4gYXJpdGhtZXRpYyBvclxuICAgIGJpdHdpc2UgdW5hcnkgb3BlcmF0b3Igb24gaXRzIHJpZ2h0LCB0aGF0IGlzLCBgYDIqKi0xYGAgaXNcbiAgICBgYDAuNWBgLlxuJywKKyAnb3BlcmF0b3Itc3VtbWFyeSc6ICdcblN1bW1hcnlcbioqKioqKipcblxuVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlcyBpbiBQeXRob24sXG5mcm9tIGxvd2VzdCBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3RcbmJpbmRpbmcpLiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3NcbnRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwgb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW5cbnRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yIGNvbXBhcmlzb25zLCBpbmNsdWRpbmdcbnRlc3RzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBjaGFpbiBmcm9tIGxlZnQgdG8gcmlnaHRcbi0tLSBzZWUgc2VjdGlvbiAqQ29tcGFyaXNvbnMqIC0tLSBhbmQgZXhwb25lbnRpYXRpb24sIHdoaWNoIGdyb3Vwc1xuZnJvbSByaWdodCB0byBsZWZ0KS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYGxhbWJkYWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbWJkYSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGlmYGAgLS0gYGBlbHNlYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbmRpdGlvbmFsIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYG9yYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGFuZGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYG5vdGBgICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGluYGAsIGBgbm90YGAgYGBpbmBgLCBgYGlzYGAsIGBgaXMgbm90YGAsICAgICB8IENvbXBhcmlzb25zLCBpbmNsdWRpbmcgbWVtYmVyc2hpcCAgICAgfFxufCBgYDxgYCwgYGA8PWBgLCBgYD5gYCwgYGA+PWBgLCBgYCE9YGAsIGBgPT1gYCAgICB8IHRlc3RzIGFuZCBpZGVudGl0eSB0ZXN0cywgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHxgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYF5gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYCZgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYDw8YGAsIGBgPj5gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNoaWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYCtgYCwgYGAtYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFs1XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYCt4YGAsIGBgLXhgYCwgYGB+eGBgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYCoqYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4cG9uZW50aWF0aW9uIFs2XSAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHhbaW5kZXhdYGAsIGBgeFtpbmRleDppbmRleF1gYCwgICAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgY2FsbCwgICAgICAgICAgfFxufCBgYHgoYXJndW1lbnRzLi4uKWBgLCBgYHguYXR0cmlidXRlYGAgICAgICAgICAgICB8IGF0dHJpYnV0ZSByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYChleHByZXNzaW9ucy4uLilgYCwgYGBbZXhwcmVzc2lvbnMuLi5dYGAsICAgICB8IEJpbmRpbmcgb3IgdHVwbGUgZGlzcGxheSwgbGlzdCAgICAgICAgfFxufCBgYHtrZXk6ZGF0dW0uLi59YGAsIGBge2V4cHJlc3Npb25zLi4ufWBgICAgICAgICB8IGRpc3BsYXksIGRpY3Rpb25hcnkgZGlzcGxheSwgc2V0ICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoaWxlIGBgYWJzKHgleSkgPCBhYnMoeSlgYCBpcyB0cnVlIG1hdGhlbWF0aWNhbGx5LCBmb3IgZmxvYXRzIGl0XG4gICAgbWF5IG5vdCBiZSB0cnVlIG51bWVyaWNhbGx5IGR1ZSB0byByb3VuZG9mZi4gIEZvciBleGFtcGxlLCBhbmRcbiAgICBhc3N1bWluZyBhIHBsYXRmb3JtIG9uIHdoaWNoIGEgUHl0aG9uIGZsb2F0IGlzIGFuIElFRUUgNzU0IGRvdWJsZS1cbiAgICBwcmVjaXNpb24gbnVtYmVyLCBpbiBvcmRlciB0aGF0IGBgLTFlLTEwMCAlIDFlMTAwYGAgaGF2ZSB0aGUgc2FtZVxuICAgIHNpZ24gYXMgYGAxZTEwMGBgLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzIGBgLTFlLTEwMCArIDFlMTAwYGAsXG4gICAgd2hpY2ggaXMgbnVtZXJpY2FsbHkgZXhhY3RseSBlcXVhbCB0byBgYDFlMTAwYGAuICBUaGUgZnVuY3Rpb25cbiAgICBgYG1hdGguZm1vZCgpYGAgcmV0dXJucyBhIHJlc3VsdCB3aG9zZSBzaWduIG1hdGNoZXMgdGhlIHNpZ24gb2ZcbiAgICB0aGUgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgYGAtMWUtMTAwYGAgaW4gdGhpc1xuICAgIGNhc2UuIFdoaWNoIGFwcHJvYWNoIGlzIG1vcmUgYXBwcm9wcmlhdGUgZGVwZW5kcyBvbiB0aGVcbiAgICBhcHBsaWNhdGlvbi5cblxuWzJdIElmIHggaXMgdmVyeSBjbG9zZSB0byBhbiBleGFjdCBpbnRlZ2VyIG11bHRpcGxlIG9mIHksIGl0XCdzXG4gICAgcG9zc2libGUgZm9yIGBgeC8veWBgIHRvIGJlIG9uZSBsYXJnZXIgdGhhbiBgYCh4LXgleSkvL3lgYCBkdWUgdG9cbiAgICByb3VuZGluZy4gIEluIHN1Y2ggY2FzZXMsIFB5dGhvbiByZXR1cm5zIHRoZSBsYXR0ZXIgcmVzdWx0LCBpblxuICAgIG9yZGVyIHRvIHByZXNlcnZlIHRoYXQgYGBkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeWBgIGJlIHZlcnlcbiAgICBjbG9zZSB0byBgYHhgYC5cblxuWzNdIFdoaWxlIGNvbXBhcmlzb25zIGJldHdlZW4gc3RyaW5ncyBtYWtlIHNlbnNlIGF0IHRoZSBieXRlIGxldmVsLFxuICAgIHRoZXkgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIHVzZXJzLiAgRm9yIGV4YW1wbGUsIHRoZSBzdHJpbmdzXG4gICAgYGAiXFx1MDBDNyJgYCBhbmQgYGAiXFx1MDMyN1xcdTAwNDMiYGAgY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlblxuICAgIHRob3VnaCB0aGV5IGJvdGggcmVwcmVzZW50IHRoZSBzYW1lIHVuaWNvZGUgY2hhcmFjdGVyIChMQVRJTlxuICAgIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBKS4gIFRvIGNvbXBhcmUgc3RyaW5ncyBpbiBhIGh1bWFuXG4gICAgcmVjb2duaXphYmxlIHdheSwgY29tcGFyZSB1c2luZyBgYHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgpYGAuXG5cbls0XSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZSBkeW5hbWljXG4gICAgbmF0dXJlIG9mIGRlc2NyaXB0b3JzLCB5b3UgbWF5IG5vdGljZSBzZWVtaW5nbHkgdW51c3VhbCBiZWhhdmlvdXJcbiAgICBpbiBjZXJ0YWluIHVzZXMgb2YgdGhlIGBgaXNgYCBvcGVyYXRvciwgbGlrZSB0aG9zZSBpbnZvbHZpbmdcbiAgICBjb21wYXJpc29ucyBiZXR3ZWVuIGluc3RhbmNlIG1ldGhvZHMsIG9yIGNvbnN0YW50cy4gIENoZWNrIHRoZWlyXG4gICAgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlIGBgJWBgIG9wZXJhdG9yIGlzIGFsc28gdXNlZCBmb3Igc3RyaW5nIGZvcm1hdHRpbmc7IHRoZSBzYW1lXG4gICAgcHJlY2VkZW5jZSBhcHBsaWVzLlxuXG5bNl0gVGhlIHBvd2VyIG9wZXJhdG9yIGBgKipgYCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiBhbiBhcml0aG1ldGljIG9yXG4gICAgYml0d2lzZSB1bmFyeSBvcGVyYXRvciBvbiBpdHMgcmlnaHQsIHRoYXQgaXMsIGBgMioqLTFgYCBpc1xuICAgIGBgMC41YGAuXG4nLAogICdwYXNzJzogJ1xuVGhlIGBgcGFzc2BgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBwYXNzX3N0bXQgOjo9ICJwYXNzIlxuXG5gYHBhc3NgYCBpcyBhIG51bGwgb3BlcmF0aW9uIC0tLSB3aGVuIGl0IGlzIGV4ZWN1dGVkLCBub3RoaW5nIGhhcHBlbnMuXG5JdCBpcyB1c2VmdWwgYXMgYSBwbGFjZWhvbGRlciB3aGVuIGEgc3RhdGVtZW50IGlzIHJlcXVpcmVkXG5zeW50YWN0aWNhbGx5LCBidXQgbm8gY29kZSBuZWVkcyB0byBiZSBleGVjdXRlZCwgZm9yIGV4YW1wbGU6XG5cbiAgIGRlZiBmKGFyZyk6IHBhc3MgICAgIyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nICh5ZXQpXG5cbiAgIGNsYXNzIEM6IHBhc3MgICAgICAgIyBhIGNsYXNzIHdpdGggbm8gbWV0aG9kcyAoeWV0KVxuJywKICAncG93ZXInOiAnXG5UaGUgcG93ZXIgb3BlcmF0b3JcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgYmluZHMgbW9yZSB0aWdodGx5IHRoYW4gdW5hcnkgb3BlcmF0b3JzIG9uIGl0c1xubGVmdDsgaXQgYmluZHMgbGVzcyB0aWdodGx5IHRoYW4gdW5hcnkgb3BlcmF0b3JzIG9uIGl0cyByaWdodC4gIFRoZVxuc3ludGF4IGlzOlxuXG4gICBwb3dlciA6Oj0gcHJpbWFyeSBbIioqIiB1X2V4cHJdXG5cblRodXMsIGluIGFuIHVucGFyZW50aGVzaXplZCBzZXF1ZW5jZSBvZiBwb3dlciBhbmQgdW5hcnkgb3BlcmF0b3JzLCB0aGVcbm9wZXJhdG9ycyBhcmUgZXZhbHVhdGVkIGZyb20gcmlnaHQgdG8gbGVmdCAodGhpcyBkb2VzIG5vdCBjb25zdHJhaW5cbnRoZSBldmFsdWF0aW9uIG9yZGVyIGZvciB0aGUgb3BlcmFuZHMpOiBgYC0xKioyYGAgcmVzdWx0cyBpbiBgYC0xYGAuXG5cblRoZSBwb3dlciBvcGVyYXRvciBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBidWlsdC1pbiBgYHBvdygpYGBcbmZ1bmN0aW9uLCB3aGVuIGNhbGxlZCB3aXRoIHR3byBhcmd1bWVudHM6IGl0IHlpZWxkcyBpdHMgbGVmdCBhcmd1bWVudFxucmFpc2VkIHRvIHRoZSBwb3dlciBvZiBpdHMgcmlnaHQgYXJndW1lbnQuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlXG5maXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSwgYW5kIHRoZSByZXN1bHQgaXMgb2YgdGhhdCB0eXBlLlxuXG5Gb3IgaW50IG9wZXJhbmRzLCB0aGUgcmVzdWx0IGhhcyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBvcGVyYW5kcyB1bmxlc3NcbnRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbmVnYXRpdmU7IGluIHRoYXQgY2FzZSwgYWxsIGFyZ3VtZW50cyBhcmVcbmNvbnZlcnRlZCB0byBmbG9hdCBhbmQgYSBmbG9hdCByZXN1bHQgaXMgZGVsaXZlcmVkLiBGb3IgZXhhbXBsZSxcbmBgMTAqKjJgYCByZXR1cm5zIGBgMTAwYGAsIGJ1dCBgYDEwKiotMmBgIHJldHVybnMgYGAwLjAxYGAuXG5cblJhaXNpbmcgYGAwLjBgYCB0byBhIG5lZ2F0aXZlIHBvd2VyIHJlc3VsdHMgaW4gYVxuYGBaZXJvRGl2aXNpb25FcnJvcmBgLiBSYWlzaW5nIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGEgZnJhY3Rpb25hbCBwb3dlclxucmVzdWx0cyBpbiBhIGBgY29tcGxleGBgIG51bWJlci4gKEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgcmFpc2VkIGFcbmBgVmFsdWVFcnJvcmBgLilcbicsCiAgJ3JhaXNlJzogJ1xuVGhlIGBgcmFpc2VgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHJhaXNlX3N0bXQgOjo9ICJyYWlzZSIgW2V4cHJlc3Npb24gWyJmcm9tIiBleHByZXNzaW9uXV1cblxuSWYgbm8gZXhwcmVzc2lvbnMgYXJlIHByZXNlbnQsIGBgcmFpc2VgYCByZS1yYWlzZXMgdGhlIGxhc3QgZXhjZXB0aW9uXG50aGF0IHdhcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBJZiBubyBleGNlcHRpb24gaXMgYWN0aXZlIGluXG50aGUgY3VycmVudCBzY29wZSwgYSBgYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW5kaWNhdGluZyB0aGF0XG50aGlzIGlzIGFuIGVycm9yIChpZiBydW5uaW5nIHVuZGVyIElETEUsIGEgYGBxdWV1ZS5FbXB0eWBgIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGluc3RlYWQpLlxuXG5PdGhlcndpc2UsIGBgcmFpc2VgYCBldmFsdWF0ZXMgdGhlIGZpcnN0IGV4cHJlc3Npb24gYXMgdGhlIGV4Y2VwdGlvblxub2JqZWN0LiAgSXQgbXVzdCBiZSBlaXRoZXIgYSBzdWJjbGFzcyBvciBhbiBpbnN0YW5jZSBvZlxuYGBCYXNlRXhjZXB0aW9uYGAuIElmIGl0IGlzIGEgY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBiZVxub2J0YWluZWQgd2hlbiBuZWVkZWQgYnkgaW5zdGFudGlhdGluZyB0aGUgY2xhc3Mgd2l0aCBubyBhcmd1bWVudHMuXG5cblRoZSAqdHlwZSogb2YgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlXCdzIGNsYXNzLCB0aGVcbip2YWx1ZSogaXMgdGhlIGluc3RhbmNlIGl0c2VsZi5cblxuQSB0cmFjZWJhY2sgb2JqZWN0IGlzIG5vcm1hbGx5IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGFuZCBhdHRhY2hlZCB0byBpdCBhcyB0aGUgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLCB3aGljaFxuaXMgd3JpdGFibGUuIFlvdSBjYW4gY3JlYXRlIGFuIGV4Y2VwdGlvbiBhbmQgc2V0IHlvdXIgb3duIHRyYWNlYmFjayBpblxub25lIHN0ZXAgdXNpbmcgdGhlIGBgd2l0aF90cmFjZWJhY2soKWBgIGV4Y2VwdGlvbiBtZXRob2QgKHdoaWNoXG5yZXR1cm5zIHRoZSBzYW1lIGV4Y2VwdGlvbiBpbnN0YW5jZSwgd2l0aCBpdHMgdHJhY2ViYWNrIHNldCB0byBpdHNcbmFyZ3VtZW50KSwgbGlrZSBzbzpcblxuICAgcmFpc2UgRXhjZXB0aW9uKCJmb28gb2NjdXJyZWQiKS53aXRoX3RyYWNlYmFjayh0cmFjZWJhY2tvYmopXG5cblRoZSBgYGZyb21gYCBjbGF1c2UgaXMgdXNlZCBmb3IgZXhjZXB0aW9uIGNoYWluaW5nOiBpZiBnaXZlbiwgdGhlXG5zZWNvbmQgKmV4cHJlc3Npb24qIG11c3QgYmUgYW5vdGhlciBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UsIHdoaWNoXG53aWxsIHRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIHJhaXNlZCBleGNlcHRpb24gYXMgdGhlIGBgX19jYXVzZV9fYGBcbmF0dHJpYnV0ZSAod2hpY2ggaXMgd3JpdGFibGUpLiAgSWYgdGhlIHJhaXNlZCBleGNlcHRpb24gaXMgbm90XG5oYW5kbGVkLCBib3RoIGV4Y2VwdGlvbnMgd2lsbCBiZSBwcmludGVkOlxuXG4gICA+Pj4gdHJ5OlxuICAgLi4uICAgICBwcmludCgxIC8gMClcbiAgIC4uLiBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIikgZnJvbSBleGNcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOlxuXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDQsIGluIDxtb2R1bGU+XG4gICBSdW50aW1lRXJyb3I6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWRcblxuQSBzaW1pbGFyIG1lY2hhbmlzbSB3b3JrcyBpbXBsaWNpdGx5IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgaW5zaWRlXG5hbiBleGNlcHRpb24gaGFuZGxlcjogdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiBpcyB0aGVuIGF0dGFjaGVkIGFzIHRoZVxubmV3IGV4Y2VwdGlvblwncyBgYF9fY29udGV4dF9fYGAgYXR0cmlidXRlOlxuXG4gICA+Pj4gdHJ5OlxuICAgLi4uICAgICBwcmludCgxIC8gMClcbiAgIC4uLiBleGNlcHQ6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOlxuXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDQsIGluIDxtb2R1bGU+XG4gICBSdW50aW1lRXJyb3I6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWRcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBoYW5kbGluZyBleGNlcHRpb25zIGlzIGluIHNlY3Rpb25cbipUaGUgdHJ5IHN0YXRlbWVudCouXG4nLAotICdyZXR1cm4nOiAnXG5UaGUgYGByZXR1cm5gYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICByZXR1cm5fc3RtdCA6Oj0gInJldHVybiIgW2V4cHJlc3Npb25fbGlzdF1cblxuYGByZXR1cm5gYCBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhIGZ1bmN0aW9uXG5kZWZpbml0aW9uLCBub3Qgd2l0aGluIGEgbmVzdGVkIGNsYXNzIGRlZmluaXRpb24uXG5cbklmIGFuIGV4cHJlc3Npb24gbGlzdCBpcyBwcmVzZW50LCBpdCBpcyBldmFsdWF0ZWQsIGVsc2UgYGBOb25lYGAgaXNcbnN1YnN0aXR1dGVkLlxuXG5gYHJldHVybmBgIGxlYXZlcyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsIHdpdGggdGhlIGV4cHJlc3Npb24gbGlzdFxuKG9yIGBgTm9uZWBgKSBhcyByZXR1cm4gdmFsdWUuXG5cbldoZW4gYGByZXR1cm5gYCBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSBgYHRyeWBgIHN0YXRlbWVudCB3aXRoIGFcbmBgZmluYWxseWBgIGNsYXVzZSwgdGhhdCBgYGZpbmFsbHlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxubGVhdmluZyB0aGUgZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgYGByZXR1cm5gYCBzdGF0ZW1lbnQgaXMgbm90IGFsbG93ZWQgdG9cbmluY2x1ZGUgYW4gKipleHByZXNzaW9uX2xpc3QqKi4gIEluIHRoYXQgY29udGV4dCwgYSBiYXJlIGBgcmV0dXJuYGBcbmluZGljYXRlcyB0aGF0IHRoZSBnZW5lcmF0b3IgaXMgZG9uZSBhbmQgd2lsbCBjYXVzZSBgYFN0b3BJdGVyYXRpb25gYFxudG8gYmUgcmFpc2VkLlxuJywKKyAncmV0dXJuJzogJ1xuVGhlIGBgcmV0dXJuYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbmBgcmV0dXJuYGAgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSBmdW5jdGlvblxuZGVmaW5pdGlvbiwgbm90IHdpdGhpbiBhIG5lc3RlZCBjbGFzcyBkZWZpbml0aW9uLlxuXG5JZiBhbiBleHByZXNzaW9uIGxpc3QgaXMgcHJlc2VudCwgaXQgaXMgZXZhbHVhdGVkLCBlbHNlIGBgTm9uZWBgIGlzXG5zdWJzdGl0dXRlZC5cblxuYGByZXR1cm5gYCBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3RcbihvciBgYE5vbmVgYCkgYXMgcmV0dXJuIHZhbHVlLlxuXG5XaGVuIGBgcmV0dXJuYGAgcGFzc2VzIGNvbnRyb2wgb3V0IG9mIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBhXG5gYGZpbmFsbHlgYCBjbGF1c2UsIHRoYXQgYGBmaW5hbGx5YGAgY2xhdXNlIGlzIGV4ZWN1dGVkIGJlZm9yZSByZWFsbHlcbmxlYXZpbmcgdGhlIGZ1bmN0aW9uLlxuXG5JbiBhIGdlbmVyYXRvciBmdW5jdGlvbiwgdGhlIGBgcmV0dXJuYGAgc3RhdGVtZW50IGlzIG5vdCBhbGxvd2VkIHRvXG5pbmNsdWRlIGFuIGBgZXhwcmVzc2lvbl9saXN0YGAuICBJbiB0aGF0IGNvbnRleHQsIGEgYmFyZSBgYHJldHVybmBgXG5pbmRpY2F0ZXMgdGhhdCB0aGUgZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgYGBTdG9wSXRlcmF0aW9uYGBcbnRvIGJlIHJhaXNlZC5cbicsCiAgJ3NlcXVlbmNlLXR5cGVzJzogIlxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uJ3Mgc3RhbmRhcmRcbmRpY3Rpb25hcnkgb2JqZWN0cy4gIFRoZSBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlIHByb3ZpZGVzIGFcbmBgTXV0YWJsZU1hcHBpbmdgYCBhYnN0cmFjdCBiYXNlIGNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHNcbmZyb20gYSBiYXNlIHNldCBvZiBgYF9fZ2V0aXRlbV9fKClgYCwgYGBfX3NldGl0ZW1fXygpYGAsXG5gYF9fZGVsaXRlbV9fKClgYCwgYW5kIGBga2V5cygpYGAuIE11dGFibGUgc2VxdWVuY2VzIHNob3VsZCBwcm92aWRlXG5tZXRob2RzIGBgYXBwZW5kKClgYCwgYGBjb3VudCgpYGAsIGBgaW5kZXgoKWBgLCBgYGV4dGVuZCgpYGAsXG5gYGluc2VydCgpYGAsIGBgcG9wKClgYCwgYGByZW1vdmUoKWBgLCBgYHJldmVyc2UoKWBgIGFuZCBgYHNvcnQoKWBgLFxubGlrZSBQeXRob24gc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkXG5pbXBsZW1lbnQgYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyBgYF9fYWRkX18oKWBgLCBgYF9fcmFkZF9fKClgYCxcbmBgX19pYWRkX18oKWBgLCBgYF9fbXVsX18oKWBgLCBgYF9fcm11bF9fKClgYCBhbmQgYGBfX2ltdWxfXygpYGBcbmRlc2NyaWJlZCBiZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXRcbmlzIHJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19jb250YWluc19fKClgYCBtZXRob2QgdG8gYWxsb3cgZWZmaWNpZW50IHVzZSBvZiB0aGUgYGBpbmBgXG5vcGVyYXRvcjsgZm9yIG1hcHBpbmdzLCBgYGluYGAgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZydzIGtleXM7IGZvclxuc2VxdWVuY2VzLCBpdCBzaG91bGQgc2VhcmNoIHRocm91Z2ggdGhlIHZhbHVlcy4gIEl0IGlzIGZ1cnRoZXJcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbmBgX19pdGVyX18oKWBgIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlXG5jb250YWluZXI7IGZvciBtYXBwaW5ncywgYGBfX2l0ZXJfXygpYGAgc2hvdWxkIGJlIHRoZSBzYW1lIGFzXG5gYGtleXMoKWBgOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZSB0aHJvdWdoIHRoZSB2YWx1ZXMuXG5cbm9iamVjdC5fX2xlbl9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIGBgbGVuKClgYC4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciBgYD49YGAgMC4gIEFsc28sIGFuIG9iamVjdFxuICAgdGhhdCBkb2Vzbid0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvbid0IGRlZmluZSBgYF9fY29udGFpbnNfXygpYGAsIHRoZSBtZW1iZXJzaGlwXG4gICB0ZXN0IGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgYGBfX2l0ZXJfXygpYGAsIHRoZW4gdGhlIG9sZFxuICAgc2VxdWVuY2UgaXRlcmF0aW9uIHByb3RvY29sIHZpYSBgYF9fZ2V0aXRlbV9fKClgYCwgc2VlICp0aGlzXG4gICBzZWN0aW9uIGluIHRoZSBsYW5ndWFnZSByZWZlcmVuY2UqLlxuIiwKLSAnc2hpZnRpbmcnOiAnXG5TaGlmdGluZyBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSBzaGlmdGluZyBvcGVyYXRpb25zIGhhdmUgbG93ZXIgcHJpb3JpdHkgdGhhbiB0aGUgYXJpdGhtZXRpY1xub3BlcmF0aW9uczpcblxuICAgc2hpZnRfZXhwciA6Oj0gYV9leHByIHwgc2hpZnRfZXhwciAoICI8PCIgfCAiPj4iICkgYV9leHByXG5cblRoZXNlIG9wZXJhdG9ycyBhY2NlcHQgaW50ZWdlcnMgYXMgYXJndW1lbnRzLiAgVGhleSBzaGlmdCB0aGUgZmlyc3RcbmFyZ3VtZW50IHRvIHRoZSBsZWZ0IG9yIHJpZ2h0IGJ5IHRoZSBudW1iZXIgb2YgYml0cyBnaXZlbiBieSB0aGVcbnNlY29uZCBhcmd1bWVudC5cblxuQSByaWdodCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIGRpdmlzaW9uIGJ5IGBgcG93KDIsbilgYC4gIEFcbmxlZnQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBtdWx0aXBsaWNhdGlvbiB3aXRoIGBgcG93KDIsbilgYC5cbicsCisgJ3NoaWZ0aW5nJzogJ1xuU2hpZnRpbmcgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgc2hpZnRpbmcgb3BlcmF0aW9ucyBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGFyaXRobWV0aWNcbm9wZXJhdGlvbnM6XG5cbiAgIHNoaWZ0X2V4cHIgOjo9IGFfZXhwciB8IHNoaWZ0X2V4cHIgKCAiPDwiIHwgIj4+IiApIGFfZXhwclxuXG5UaGVzZSBvcGVyYXRvcnMgYWNjZXB0IGludGVnZXJzIGFzIGFyZ3VtZW50cy4gIFRoZXkgc2hpZnQgdGhlIGZpcnN0XG5hcmd1bWVudCB0byB0aGUgbGVmdCBvciByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gYnkgdGhlXG5zZWNvbmQgYXJndW1lbnQuXG5cbkEgcmlnaHQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBkaXZpc2lvbiBieSBgYHBvdygyLG4pYGAuICBBXG5sZWZ0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCBgYHBvdygyLG4pYGAuXG5cbk5vdGU6IEluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzIHJlcXVpcmVkIHRvXG4gIGJlIGF0IG1vc3QgYGBzeXMubWF4c2l6ZWBgLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpcyBsYXJnZXJcbiAgdGhhbiBgYHN5cy5tYXhzaXplYGAgYW4gYGBPdmVyZmxvd0Vycm9yYGAgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbicsCiAgJ3NsaWNpbmdzJzogJ1xuU2xpY2luZ3NcbioqKioqKioqXG5cbkEgc2xpY2luZyBzZWxlY3RzIGEgcmFuZ2Ugb2YgaXRlbXMgaW4gYSBzZXF1ZW5jZSBvYmplY3QgKGUuZy4sIGFcbnN0cmluZywgdHVwbGUgb3IgbGlzdCkuICBTbGljaW5ncyBtYXkgYmUgdXNlZCBhcyBleHByZXNzaW9ucyBvciBhc1xudGFyZ2V0cyBpbiBhc3NpZ25tZW50IG9yIGBgZGVsYGAgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGFcbnNsaWNpbmc6XG5cbiAgIHNsaWNpbmcgICAgICA6Oj0gcHJpbWFyeSAiWyIgc2xpY2VfbGlzdCAiXSJcbiAgIHNsaWNlX2xpc3QgICA6Oj0gc2xpY2VfaXRlbSAoIiwiIHNsaWNlX2l0ZW0pKiBbIiwiXVxuICAgc2xpY2VfaXRlbSAgIDo6PSBleHByZXNzaW9uIHwgcHJvcGVyX3NsaWNlXG4gICBwcm9wZXJfc2xpY2UgOjo9IFtsb3dlcl9ib3VuZF0gIjoiIFt1cHBlcl9ib3VuZF0gWyAiOiIgW3N0cmlkZV0gXVxuICAgbG93ZXJfYm91bmQgIDo6PSBleHByZXNzaW9uXG4gICB1cHBlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHN0cmlkZSAgICAgICA6Oj0gZXhwcmVzc2lvblxuXG5UaGVyZSBpcyBhbWJpZ3VpdHkgaW4gdGhlIGZvcm1hbCBzeW50YXggaGVyZTogYW55dGhpbmcgdGhhdCBsb29rcyBsaWtlXG5hbiBleHByZXNzaW9uIGxpc3QgYWxzbyBsb29rcyBsaWtlIGEgc2xpY2UgbGlzdCwgc28gYW55IHN1YnNjcmlwdGlvblxuY2FuIGJlIGludGVycHJldGVkIGFzIGEgc2xpY2luZy4gIFJhdGhlciB0aGFuIGZ1cnRoZXIgY29tcGxpY2F0aW5nIHRoZVxuc3ludGF4LCB0aGlzIGlzIGRpc2FtYmlndWF0ZWQgYnkgZGVmaW5pbmcgdGhhdCBpbiB0aGlzIGNhc2UgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHN1YnNjcmlwdGlvbiB0YWtlcyBwcmlvcml0eSBvdmVyIHRoZVxuaW50ZXJwcmV0YXRpb24gYXMgYSBzbGljaW5nICh0aGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBzbGljZSBsaXN0XG5jb250YWlucyBubyBwcm9wZXIgc2xpY2UpLlxuXG5UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlXG50byBhIG1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWVcbmBgX19nZXRpdGVtX18oKWBgIG1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXNcbmNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdFxuY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGVcbmNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lXG5zbGljZSBpdGVtIGlzIHRoZSBrZXkuICBUaGUgY29udmVyc2lvbiBvZiBhIHNsaWNlIGl0ZW0gdGhhdCBpcyBhblxuZXhwcmVzc2lvbiBpcyB0aGF0IGV4cHJlc3Npb24uICBUaGUgY29udmVyc2lvbiBvZiBhIHByb3BlciBzbGljZSBpcyBhXG5zbGljZSBvYmplY3QgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSB3aG9zZVxuYGBzdGFydGBgLCBgYHN0b3BgYCBhbmQgYGBzdGVwYGAgYXR0cmlidXRlcyBhcmUgdGhlIHZhbHVlcyBvZiB0aGVcbmV4cHJlc3Npb25zIGdpdmVuIGFzIGxvd2VyIGJvdW5kLCB1cHBlciBib3VuZCBhbmQgc3RyaWRlLFxucmVzcGVjdGl2ZWx5LCBzdWJzdGl0dXRpbmcgYGBOb25lYGAgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAogICdzcGVjaWFsYXR0cnMnOiAiXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSBgYGRpcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24uXG5cbm9iamVjdC5fX2RpY3RfX1xuXG4gICBBIGRpY3Rpb25hcnkgb3Igb3RoZXIgbWFwcGluZyBvYmplY3QgdXNlZCB0byBzdG9yZSBhbiBvYmplY3Qnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5UaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGJ5ICpuZXctc3R5bGUgY2xhc3MqZXMuXG5cbmNsYXNzLl9fbXJvX19cblxuICAgVGhpcyBhdHRyaWJ1dGUgaXMgYSB0dXBsZSBvZiBjbGFzc2VzIHRoYXQgYXJlIGNvbnNpZGVyZWQgd2hlblxuICAgbG9va2luZyBmb3IgYmFzZSBjbGFzc2VzIGR1cmluZyBtZXRob2QgcmVzb2x1dGlvbi5cblxuY2xhc3MubXJvKClcblxuICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYSBtZXRhY2xhc3MgdG8gY3VzdG9taXplIHRoZVxuICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgZm9yIGl0cyBpbnN0YW5jZXMuICBJdCBpcyBjYWxsZWQgYXQgY2xhc3NcbiAgIGluc3RhbnRpYXRpb24sIGFuZCBpdHMgcmVzdWx0IGlzIHN0b3JlZCBpbiBgYF9fbXJvX19gYC5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIG5ldy1zdHlsZSBjbGFzcyBrZWVwcyBhIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIGl0c1xuICAgaW1tZWRpYXRlIHN1YmNsYXNzZXMuICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgdGhvc2VcbiAgIHJlZmVyZW5jZXMgc3RpbGwgYWxpdmUuIEV4YW1wbGU6XG5cbiAgICAgID4+PiBpbnQuX19zdWJjbGFzc2VzX18oKVxuICAgICAgWzx0eXBlICdib29sJz5dXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGVzZSBzcGVjaWFsIG1ldGhvZHMgbWF5IGJlIGZvdW5kIGluXG4gICAgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsICgqQmFzaWMgY3VzdG9taXphdGlvbiopLlxuXG5bMl0gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIGxpc3QgYGBbMSwgMl1gYCBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgYGBbMS4wLCAyLjBdYGAsIGFuZCBzaW1pbGFybHkgZm9yIHR1cGxlcy5cblxuWzNdIFRoZXkgbXVzdCBoYXZlIHNpbmNlIHRoZSBwYXJzZXIgY2FuJ3QgdGVsbCB0aGUgdHlwZSBvZiB0aGVcbiAgICBvcGVyYW5kcy5cblxuWzRdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhIHNpbmdsZXRvblxuICAgIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuIiwKLSAnc3BlY2lhbG5hbWVzJzogJ1xuU3BlY2lhbCBtZXRob2QgbmFtZXNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgY2xhc3MgY2FuIGltcGxlbWVudCBjZXJ0YWluIG9wZXJhdGlvbnMgdGhhdCBhcmUgaW52b2tlZCBieSBzcGVjaWFsXG5zeW50YXggKHN1Y2ggYXMgYXJpdGhtZXRpYyBvcGVyYXRpb25zIG9yIHN1YnNjcmlwdGluZyBhbmQgc2xpY2luZykgYnlcbmRlZmluaW5nIG1ldGhvZHMgd2l0aCBzcGVjaWFsIG5hbWVzLiBUaGlzIGlzIFB5dGhvblwncyBhcHByb2FjaCB0b1xuKm9wZXJhdG9yIG92ZXJsb2FkaW5nKiwgYWxsb3dpbmcgY2xhc3NlcyB0byBkZWZpbmUgdGhlaXIgb3duIGJlaGF2aW9yXG53aXRoIHJlc3BlY3QgdG8gbGFuZ3VhZ2Ugb3BlcmF0b3JzLiAgRm9yIGluc3RhbmNlLCBpZiBhIGNsYXNzIGRlZmluZXNcbmEgbWV0aG9kIG5hbWVkIGBgX19nZXRpdGVtX18oKWBgLCBhbmQgYGB4YGAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpc1xuY2xhc3MsIHRoZW4gYGB4W2ldYGAgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIGBgdHlwZSh4KS5fX2dldGl0ZW1fXyh4LFxuaSlgYC4gIEV4Y2VwdCB3aGVyZSBtZW50aW9uZWQsIGF0dGVtcHRzIHRvIGV4ZWN1dGUgYW4gb3BlcmF0aW9uIHJhaXNlXG5hbiBleGNlcHRpb24gd2hlbiBubyBhcHByb3ByaWF0ZSBtZXRob2QgaXMgZGVmaW5lZCAodHlwaWNhbGx5XG5gYEF0dHJpYnV0ZUVycm9yYGAgb3IgYGBUeXBlRXJyb3JgYCkuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuYGBOb2RlTGlzdGBgIGludGVyZmFjZSBpbiB0aGUgVzNDXCdzIERvY3VtZW50IE9iamVjdCBNb2RlbC4pXG5cblxuQmFzaWMgY3VzdG9taXphdGlvblxuPT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgYGBfX25ld19fKClgYCBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiBgYF9fbmV3X18oKWBgIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseVxuICAgYW4gaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyBgYF9fbmV3X18oKWBgIG1ldGhvZCB1c2luZ1xuICAgYGBzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKWBgIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICBgYF9faW5pdF9fKHNlbGZbLCAuLi5dKWBgLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byBgYF9fbmV3X18oKWBgLlxuXG4gICBJZiBgYF9fbmV3X18oKWBgIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgYGBfX25ld19fKClgYCBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgY3JlYXRlZC4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICBgYF9faW5pdF9fKClgYCBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCxcbiAgIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZlxuICAgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgYGBCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKWBgLiAgQXMgYSBzcGVjaWFsIGNvbnN0cmFpbnRcbiAgIG9uIGNvbnN0cnVjdG9ycywgbm8gdmFsdWUgbWF5IGJlIHJldHVybmVkOyBkb2luZyBzbyB3aWxsIGNhdXNlIGFcbiAgIGBgVHlwZUVycm9yYGAgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgYGBfX2RlbF9fKClgYCBtZXRob2QsXG4gICB0aGUgZGVyaXZlZCBjbGFzc1wncyBgYF9fZGVsX18oKWBgIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHlcbiAgIGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZVxuICAgaW5zdGFuY2UuICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3JcbiAgIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICBgYF9fZGVsX18oKWBgIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogYGBkZWwgeGBgIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgYGB4Ll9fZGVsX18oKWBgIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgYGB4YGAgYnkgb25lLCBhbmQgdGhlIGxhdHRlclxuICAgICBpcyBvbmx5IGNhbGxlZCB3aGVuIGBgeGBgXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lXG4gICAgIGNvbW1vbiBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhblxuICAgICBvYmplY3QgZnJvbSBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlblxuICAgICBvYmplY3RzIChlLmcuLCBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aFxuICAgICBwYXJlbnQgYW5kIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGVcbiAgICAgc3RhY2sgZnJhbWUgb2YgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2tcbiAgICAgc3RvcmVkIGluIGBgc3lzLmV4Y19pbmZvKClbMl1gYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvclxuICAgICBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhblxuICAgICB1bmhhbmRsZWQgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluXG4gICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuIENpcmN1bGFyIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlXG4gICAgIGRldGVjdGVkIHdoZW4gdGhlIG9wdGlvbiBjeWNsZSBkZXRlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieVxuICAgICBkZWZhdWx0KSwgYnV0IGNhbiBvbmx5IGJlIGNsZWFuZWQgdXAgaWYgdGhlcmUgYXJlIG5vIFB5dGhvbi1cbiAgICAgbGV2ZWwgYGBfX2RlbF9fKClgYCBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlIGBgZ2NgYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93XG4gICAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgaGFuZGxlZCBieSB0aGUgY3ljbGUgZGV0ZWN0b3IsXG4gICAgIHBhcnRpY3VsYXJseSB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlaXIgZXhlY3V0aW9uXG4gICAgIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG8gYGBzeXMuc3RkZXJyYGAgaW5zdGVhZC5cbiAgICAgQWxzbywgd2hlbiBgYF9fZGVsX18oKWBgIGlzIGludm9rZWQgaW4gcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmdcbiAgICAgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlIHByb2dyYW0gaXMgZG9uZSksIG90aGVyXG4gICAgIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZVxuICAgICBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgdG9ybiBkb3duIChlLmcuIHRoZVxuICAgICBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXMgcmVhc29uLCBgYF9fZGVsX18oKWBgXG4gICAgIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZCB0byBtYWludGFpblxuICAgICBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSwgUHl0aG9uXG4gICAgIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgYGBfX2RlbF9fKClgYCBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHJlcHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlXG4gICAib2ZmaWNpYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsXG4gICB0aGlzIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWRcbiAgIHRvIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICBgYDwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj5gYCBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgYGBfX3JlcHJfXygpYGBcbiAgIGJ1dCBub3QgYGBfX3N0cl9fKClgYCwgdGhlbiBgYF9fcmVwcl9fKClgYCBpcyBhbHNvIHVzZWQgd2hlbiBhblxuICAgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXNcbiAgIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgYGBzdHIoKWBgIGJ1aWx0LWluIGZ1bmN0aW9uIGFuZCBieSB0aGUgYGBwcmludCgpYGBcbiAgIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuICBUaGlzIGRpZmZlcnMgZnJvbSBgYF9fcmVwcl9fKClgYCBpbiB0aGF0IGl0IGRvZXMgbm90IGhhdmVcbiAgIHRvIGJlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGEgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2VcbiAgIHJlcHJlc2VudGF0aW9uIG1heSBiZSB1c2VkIGluc3RlYWQuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhXG4gICBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYGZvcm1hdCgpYGAgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgYGBmb3JtYXQoKWBgIG1ldGhvZCBvZiBjbGFzcyBgYHN0cmBgKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSBgYGZvcm1hdF9zcGVjYGAgYXJndW1lbnQgaXNcbiAgIGEgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpcyB1cFxuICAgdG8gdGhlIHR5cGUgaW1wbGVtZW50aW5nIGBgX19mb3JtYXRfXygpYGAsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzXG4gICB3aWxsIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yXG4gICB1c2UgYSBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6IGBgeDx5YGAgY2FsbHMgYGB4Ll9fbHRfXyh5KWBgLCBgYHg8PXlgYCBjYWxsc1xuICAgYGB4Ll9fbGVfXyh5KWBgLCBgYHg9PXlgYCBjYWxscyBgYHguX19lcV9fKHkpYGAsIGBgeCE9eWBgIGNhbGxzXG4gICBgYHguX19uZV9fKHkpYGAsIGBgeD55YGAgY2FsbHMgYGB4Ll9fZ3RfXyh5KWBgLCBhbmQgYGB4Pj15YGAgY2FsbHNcbiAgIGBgeC5fX2dlX18oeSlgYC5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvblxuICAgYGBOb3RJbXBsZW1lbnRlZGBgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhXG4gICBnaXZlbiBwYWlyIG9mIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgYGBGYWxzZWBgIGFuZCBgYFRydWVgYCBhcmVcbiAgIHJldHVybmVkIGZvciBhIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW5cbiAgIHJldHVybiBhbnkgdmFsdWUsIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYVxuICAgQm9vbGVhbiBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLFxuICAgUHl0aG9uIHdpbGwgY2FsbCBgYGJvb2woKWBgIG9uIHRoZSB2YWx1ZSB0byBkZXRlcm1pbmUgaWYgdGhlIHJlc3VsdFxuICAgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgYGB4PT15YGAgZG9lcyBub3QgaW1wbHkgdGhhdCBgYHghPXlgYCBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nIGBgX19lcV9fKClgYCwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgYGBfX25lX18oKWBgIHNvIHRoYXQgdGhlIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZVxuICAgdGhlIHBhcmFncmFwaCBvbiBgYF9faGFzaF9fKClgYCBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgYGBfX2x0X18oKWBgIGFuZCBgYF9fZ3RfXygpYGAgYXJlIGVhY2hcbiAgIG90aGVyXCdzIHJlZmxlY3Rpb24sIGBgX19sZV9fKClgYCBhbmQgYGBfX2dlX18oKWBgIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCBhbmQgYGBfX2VxX18oKWBgIGFuZCBgYF9fbmVfXygpYGAgYXJlIHRoZWlyIG93blxuICAgcmVmbGVjdGlvbi5cblxuICAgQXJndW1lbnRzIHRvIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIGFyZSBuZXZlciBjb2VyY2VkLlxuXG4gICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290XG4gICBvcGVyYXRpb24sIHNlZSB0aGUgVG90YWwgT3JkZXJpbmcgcmVjaXBlIGluIHRoZSBBU1BOIGNvb2tib29rLlxuXG5vYmplY3QuX19oYXNoX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IGJ1aWx0LWluIGZ1bmN0aW9uIGBgaGFzaCgpYGAgYW5kIGZvciBvcGVyYXRpb25zIG9uXG4gICBtZW1iZXJzIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgYGBzZXRgYCwgYGBmcm96ZW5zZXRgYCwgYW5kXG4gICBgYGRpY3RgYC4gIGBgX19oYXNoX18oKWBgIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5XG4gICByZXF1aXJlZCBwcm9wZXJ0eSBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lXG4gICBoYXNoIHZhbHVlOyBpdCBpcyBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nXG4gICBleGNsdXNpdmUgb3IpIHRoZSBoYXNoIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0XG4gICBhbHNvIHBsYXkgYSBwYXJ0IGluIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSBgYF9faGFzaF9fKClgYCBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzXG4gICBgYF9fZXFfXygpYGAgYnV0IG5vdCBgYF9faGFzaF9fKClgYCwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZVxuICAgdXNhYmxlIGFzIGl0ZW1zIGluIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBtdXRhYmxlIG9iamVjdHMgYW5kIGltcGxlbWVudHMgYW4gYGBfX2VxX18oKWBgIG1ldGhvZCwgaXQgc2hvdWxkXG4gICBub3QgaW1wbGVtZW50IGBgX19oYXNoX18oKWBgLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGVcbiAgIGNvbGxlY3Rpb25zIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZVxuICAgb2JqZWN0XCdzIGhhc2ggdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlIGBgX19lcV9fKClgYCBhbmQgYGBfX2hhc2hfXygpYGAgbWV0aG9kc1xuICAgYnkgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgYGB4Ll9faGFzaF9fKClgYCByZXR1cm5zIGBgaWQoeClgYC5cblxuICAgQ2xhc3NlcyB3aGljaCBpbmhlcml0IGEgYGBfX2hhc2hfXygpYGAgbWV0aG9kIGZyb20gYSBwYXJlbnQgY2xhc3NcbiAgIGJ1dCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYGBfX2VxX18oKWBgIHN1Y2ggdGhhdCB0aGUgaGFzaCB2YWx1ZVxuICAgcmV0dXJuZWQgaXMgbm8gbG9uZ2VyIGFwcHJvcHJpYXRlIChlLmcuIGJ5IHN3aXRjaGluZyB0byBhIHZhbHVlLVxuICAgYmFzZWQgY29uY2VwdCBvZiBlcXVhbGl0eSBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGlkZW50aXR5IGJhc2VkXG4gICBlcXVhbGl0eSkgY2FuIGV4cGxpY2l0bHkgZmxhZyB0aGVtc2VsdmVzIGFzIGJlaW5nIHVuaGFzaGFibGUgYnlcbiAgIHNldHRpbmcgYGBfX2hhc2hfXyA9IE5vbmVgYCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gRG9pbmcgc28gbWVhbnNcbiAgIHRoYXQgbm90IG9ubHkgd2lsbCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIHJhaXNlIGFuIGFwcHJvcHJpYXRlXG4gICBgYFR5cGVFcnJvcmBgIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsXG4gICBidXQgdGhleSB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXMgdW5oYXNoYWJsZSB3aGVuXG4gICBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYCAodW5saWtlIGNsYXNzZXNcbiAgIHdoaWNoIGRlZmluZSB0aGVpciBvd24gYGBfX2hhc2hfXygpYGAgdG8gZXhwbGljaXRseSByYWlzZVxuICAgYGBUeXBlRXJyb3JgYCkuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgYGBfX2VxX18oKWBgIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mIGBgX19oYXNoX18oKWBgIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZVxuICAgaW50ZXJwcmV0ZXIgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nIGBgX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfX2BgLiBPdGhlcndpc2UgdGhlIGluaGVyaXRhbmNlIG9mXG4gICBgYF9faGFzaF9fKClgYCB3aWxsIGJlIGJsb2NrZWQsIGp1c3QgYXMgaWYgYGBfX2hhc2hfX2BgIGhhZCBiZWVuXG4gICBleHBsaWNpdGx5IHNldCB0byBgYE5vbmVgYC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgYGBib29sKClgYDsgc2hvdWxkIHJldHVybiBgYEZhbHNlYGAgb3IgYGBUcnVlYGAuICBXaGVuIHRoaXMgbWV0aG9kXG4gICBpcyBub3QgZGVmaW5lZCwgYGBfX2xlbl9fKClgYCBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGVcbiAgIG9iamVjdCBpcyBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzc1xuICAgZGVmaW5lcyBuZWl0aGVyIGBgX19sZW5fXygpYGAgbm9yIGBgX19ib29sX18oKWBgLCBhbGwgaXRzIGluc3RhbmNlc1xuICAgYXJlIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgYGB4Lm5hbWVgYClcbmZvciBjbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yIGBgc2VsZmBgKS4gIGBgbmFtZWBgIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlXG4gICBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgYGBfX2dldGF0dHJfXygpYGAgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiBgYF9fZ2V0YXR0cl9fKClgYCBhbmQgYGBfX3NldGF0dHJfXygpYGAuKSBUaGlzIGlzIGRvbmUgYm90aFxuICAgZm9yIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgYGBfX2dldGF0dHJfXygpYGBcbiAgIHdvdWxkIGhhdmUgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGVcbiAgIHRoYXQgYXQgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnlcbiAgIG5vdCBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lc1xuICAgYGBfX2dldGF0dHJfXygpYGAsIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzc1xuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBlaXRoZXIgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW5cbiAgIGBgQXR0cmlidXRlRXJyb3JgYC4gVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKVxuICAgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuIGBgQXR0cmlidXRlRXJyb3JgYCBleGNlcHRpb24uIEluIG9yZGVyXG4gICB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW4gdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvblxuICAgc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG9cbiAgIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpYGAuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbCBtZXRob2RzXG4gICAgIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4IG9yXG4gICAgIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmIGBgX19zZXRhdHRyX18oKWBgIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgIGBgb2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKWBgLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSBgYF9fc2V0YXR0cl9fKClgYCBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiBgYGRlbCBvYmoubmFtZWBgIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiBgYGRpcigpYGAgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuICBBIGxpc3QgbXVzdCBiZVxuICAgcmV0dXJuZWQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgYGBfX2RpY3RfX2BgLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgYGBOb25lYGAgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgLCBhbmRcbmBgX19kZWxldGVfXygpYGAuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsXG5pdCBpcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsIGBgYS54YGAgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoIGBgYS5fX2RpY3RfX1tcJ3hcJ11gYCwgdGhlblxuYGB0eXBlKGEpLl9fZGljdF9fW1wneFwnXWBgLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbmBgdHlwZShhKWBgIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgYGBhLnhgYC5cbkhvdyB0aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiBgYGFgYDpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgYGB4Ll9fZ2V0X18oYSlgYC5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsIGBgYS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6IGBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKWBgLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsIGBgQS54YGAgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgIGBgQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKWBgLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiBgYGFgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYHN1cGVyYGAsIHRoZW4gdGhlIGJpbmRpbmcgYGBzdXBlcihCLFxuICAgb2JqKS5tKClgYCBzZWFyY2hlcyBgYG9iai5fX2NsYXNzX18uX19tcm9fX2BgIGZvciB0aGUgYmFzZSBjbGFzc1xuICAgYGBBYGAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGBgQmBgIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3JcbiAgIHdpdGggdGhlIGNhbGw6IGBgQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pYGAuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mIGBgX19nZXRfXygpYGAsIGBgX19zZXRfXygpYGAgYW5kIGBgX19kZWxldGVfXygpYGAuXG5JZiBpdCBkb2VzIG5vdCBkZWZpbmUgYGBfX2dldF9fKClgYCwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsXG5yZXR1cm4gdGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGVcbm9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyBgYF9fc2V0X18oKWBgXG5hbmQvb3IgYGBfX2RlbGV0ZV9fKClgYCwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXNcbm5laXRoZXIsIGl0IGlzIGEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzXG5kZWZpbmUgYm90aCBgYF9fZ2V0X18oKWBgIGFuZCBgYF9fc2V0X18oKWBgLCB3aGlsZSBub24tZGF0YVxuZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZSBgYF9fZ2V0X18oKWBgIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aFxuYGBfX3NldF9fKClgYCBhbmQgYGBfX2dldF9fKClgYCBkZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvblxuaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluIGNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmVcbm92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nIGBgc3RhdGljbWV0aG9kKClgYCBhbmQgYGBjbGFzc21ldGhvZCgpYGApXG5hcmUgaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSBgYHByb3BlcnR5KClgYCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuLS0tLS0tLS0tXG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxufn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzIGBgQXR0cmlidXRlRXJyb3JgYC4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgYGBcJ19fZGljdF9fXCdgYCB0byB0aGUgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXypcbiAgZGVjbGFyYXRpb24uXG5cbiogV2l0aG91dCBhICpfX3dlYWtyZWZfXyogdmFyaWFibGUgZm9yIGVhY2ggaW5zdGFuY2UsIGNsYXNzZXMgZGVmaW5pbmdcbiAgKl9fc2xvdHNfXyogZG8gbm90IHN1cHBvcnQgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBpbnN0YW5jZXMuIElmIHdlYWtcbiAgcmVmZXJlbmNlIHN1cHBvcnQgaXMgbmVlZGVkLCB0aGVuIGFkZCBgYFwnX193ZWFrcmVmX19cJ2BgIHRvIHRoZVxuICBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlIGluc3RhbmNlXG4gIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGUgKGV4Y2VwdCBieVxuICByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLiBUaGlzXG4gIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgYGBpbnRgYCwgYGBzdHJgYCBhbmRcbiAgYGB0dXBsZWBgLlxuXG4qIEFueSBub24tc3RyaW5nIGl0ZXJhYmxlIG1heSBiZSBhc3NpZ25lZCB0byAqX19zbG90c19fKi4gTWFwcGluZ3MgbWF5XG4gIGFsc28gYmUgdXNlZDsgaG93ZXZlciwgaW4gdGhlIGZ1dHVyZSwgc3BlY2lhbCBtZWFuaW5nIG1heSBiZVxuICBhc3NpZ25lZCB0byB0aGUgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaCBrZXkuXG5cbiogKl9fY2xhc3NfXyogYXNzaWdubWVudCB3b3JrcyBvbmx5IGlmIGJvdGggY2xhc3NlcyBoYXZlIHRoZSBzYW1lXG4gICpfX3Nsb3RzX18qLlxuXG5cbkN1c3RvbWl6aW5nIGNsYXNzIGNyZWF0aW9uXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5CeSBkZWZhdWx0LCBjbGFzc2VzIGFyZSBjb25zdHJ1Y3RlZCB1c2luZyBgYHR5cGUoKWBgLiBBIGNsYXNzXG5kZWZpbml0aW9uIGlzIHJlYWQgaW50byBhIHNlcGFyYXRlIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIG9mIGNsYXNzXG5uYW1lIGlzIGJvdW5kIHRvIHRoZSByZXN1bHQgb2YgYGB0eXBlKG5hbWUsIGJhc2VzLCBkaWN0KWBgLlxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIHJlYWQsIGlmIGEgY2FsbGFibGUgYGBtZXRhY2xhc3NgYCBrZXl3b3JkXG5hcmd1bWVudCBpcyBwYXNzZWQgYWZ0ZXIgdGhlIGJhc2VzIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uLCB0aGVcbmNhbGxhYmxlIGdpdmVuIHdpbGwgYmUgY2FsbGVkIGluc3RlYWQgb2YgYGB0eXBlKClgYC4gIElmIG90aGVyIGtleXdvcmRcbmFyZ3VtZW50cyBhcmUgcGFzc2VkLCB0aGV5IHdpbGwgYWxzbyBiZSBwYXNzZWQgdG8gdGhlIG1ldGFjbGFzcy4gIFRoaXNcbmFsbG93cyBjbGFzc2VzIG9yIGZ1bmN0aW9ucyB0byBiZSB3cml0dGVuIHdoaWNoIG1vbml0b3Igb3IgYWx0ZXIgdGhlXG5jbGFzcyBjcmVhdGlvbiBwcm9jZXNzOlxuXG4qIE1vZGlmeWluZyB0aGUgY2xhc3MgZGljdGlvbmFyeSBwcmlvciB0byB0aGUgY2xhc3MgYmVpbmcgY3JlYXRlZC5cblxuKiBSZXR1cm5pbmcgYW4gaW5zdGFuY2Ugb2YgYW5vdGhlciBjbGFzcyAtLSBlc3NlbnRpYWxseSBwZXJmb3JtaW5nIHRoZVxuICByb2xlIG9mIGEgZmFjdG9yeSBmdW5jdGlvbi5cblxuVGhlc2Ugc3RlcHMgd2lsbCBoYXZlIHRvIGJlIHBlcmZvcm1lZCBpbiB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGBcbm1ldGhvZCAtLSBgYHR5cGUuX19uZXdfXygpYGAgY2FuIHRoZW4gYmUgY2FsbGVkIGZyb20gdGhpcyBtZXRob2QgdG9cbmNyZWF0ZSBhIGNsYXNzIHdpdGggZGlmZmVyZW50IHByb3BlcnRpZXMuICBUaGlzIGV4YW1wbGUgYWRkcyBhIG5ld1xuZWxlbWVudCB0byB0aGUgY2xhc3MgZGljdGlvbmFyeSBiZWZvcmUgY3JlYXRpbmcgdGhlIGNsYXNzOlxuXG4gICBjbGFzcyBtZXRhY2xzKHR5cGUpOlxuICAgICAgIGRlZiBfX25ld19fKG1jcywgbmFtZSwgYmFzZXMsIGRpY3QpOlxuICAgICAgICAgICBkaWN0W1wnZm9vXCddID0gXCdtZXRhY2xzIHdhcyBoZXJlXCdcbiAgICAgICAgICAgcmV0dXJuIHR5cGUuX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkaWN0KVxuXG5Zb3UgY2FuIG9mIGNvdXJzZSBhbHNvIG92ZXJyaWRlIG90aGVyIGNsYXNzIG1ldGhvZHMgKG9yIGFkZCBuZXdcbm1ldGhvZHMpOyBmb3IgZXhhbXBsZSBkZWZpbmluZyBhIGN1c3RvbSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlXG5tZXRhY2xhc3MgYWxsb3dzIGN1c3RvbSBiZWhhdmlvciB3aGVuIHRoZSBjbGFzcyBpcyBjYWxsZWQsIGUuZy4gbm90XG5hbHdheXMgY3JlYXRpbmcgYSBuZXcgaW5zdGFuY2UuXG5cbklmIHRoZSBtZXRhY2xhc3MgaGFzIGEgYGBfX3ByZXBhcmVfXygpYGAgYXR0cmlidXRlICh1c3VhbGx5XG5pbXBsZW1lbnRlZCBhcyBhIGNsYXNzIG9yIHN0YXRpYyBtZXRob2QpLCBpdCBpcyBjYWxsZWQgYmVmb3JlIHRoZVxuY2xhc3MgYm9keSBpcyBldmFsdWF0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgYW5kIGEgdHVwbGUgb2YgaXRzXG5iYXNlcyBmb3IgYXJndW1lbnRzLiAgSXQgc2hvdWxkIHJldHVybiBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyB0aGVcbm1hcHBpbmcgaW50ZXJmYWNlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIHRoZSBuYW1lc3BhY2Ugb2YgdGhlXG5jbGFzcy4gIFRoZSBkZWZhdWx0IGlzIGEgcGxhaW4gZGljdGlvbmFyeS4gIFRoaXMgY291bGQgYmUgdXNlZCwgZm9yXG5leGFtcGxlLCB0byBrZWVwIHRyYWNrIG9mIHRoZSBvcmRlciB0aGF0IGNsYXNzIGF0dHJpYnV0ZXMgYXJlIGRlY2xhcmVkXG5pbiBieSByZXR1cm5pbmcgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5LlxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGlzIGRldGVybWluZWQgYnkgdGhlIGZvbGxvd2luZyBwcmVjZWRlbmNlXG5ydWxlczpcblxuKiBJZiB0aGUgYGBtZXRhY2xhc3NgYCBrZXl3b3JkIGFyZ3VtZW50IGlzIHBhc3NlZCB3aXRoIHRoZSBiYXNlcywgaXRcbiAgaXMgdXNlZC5cblxuKiBPdGhlcndpc2UsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBiYXNlIGNsYXNzLCBpdHMgbWV0YWNsYXNzIGlzXG4gIHVzZWQuXG5cbiogT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBtZXRhY2xhc3MgKGBgdHlwZWBgKSBpcyB1c2VkLlxuXG5UaGUgcG90ZW50aWFsIHVzZXMgZm9yIG1ldGFjbGFzc2VzIGFyZSBib3VuZGxlc3MuIFNvbWUgaWRlYXMgdGhhdCBoYXZlXG5iZWVuIGV4cGxvcmVkIGluY2x1ZGluZyBsb2dnaW5nLCBpbnRlcmZhY2UgY2hlY2tpbmcsIGF1dG9tYXRpY1xuZGVsZWdhdGlvbiwgYXV0b21hdGljIHByb3BlcnR5IGNyZWF0aW9uLCBwcm94aWVzLCBmcmFtZXdvcmtzLCBhbmRcbmF1dG9tYXRpYyByZXNvdXJjZSBsb2NraW5nL3N5bmNocm9uaXphdGlvbi5cblxuSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgbWV0YWNsYXNzIHRoYXQgdXNlcyBhblxuYGBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdGBgIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgY2xhc3NkaWN0KTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QoY2xhc3NkaWN0KSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShjbGFzc2RpY3QpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX3ByZXBhcmVfXygpYGAgbWV0aG9kIHdoaWNoIHJldHVybnMgYW5cbmVtcHR5IGBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYC4gIFRoYXQgbWFwcGluZyByZWNvcmRzIHRoZSBtZXRob2RzXG5hbmQgYXR0cmlidXRlcyBvZiAqQSogYXMgdGhleSBhcmUgZGVmaW5lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGNsYXNzXG5zdGF0ZW1lbnQuIE9uY2UgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGV4ZWN1dGVkLCB0aGUgb3JkZXJlZCBkaWN0aW9uYXJ5XG5pcyBmdWxseSBwb3B1bGF0ZWQgYW5kIHRoZSBtZXRhY2xhc3NcJ3MgYGBfX25ld19fKClgYCBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAqbWVtYmVycyouXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkXG5kaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZSBwcm92aWRlcyBhXG5gYE11dGFibGVNYXBwaW5nYGAgYWJzdHJhY3QgYmFzZSBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzXG5mcm9tIGEgYmFzZSBzZXQgb2YgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLFxuYGBfX2RlbGl0ZW1fXygpYGAsIGFuZCBgYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZVxubWV0aG9kcyBgYGFwcGVuZCgpYGAsIGBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLFxuYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsIGBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCxcbmxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZFxuaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsXG5gYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCwgYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgXG5kZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0XG5pcyByZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgLiAgTm90ZSB0aGF0XG4gICBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHlcbiAgIGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLFxuICAgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGZsb2F0KClgYCBhbmQgYGByb3VuZCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gYGBiaW4oKWBgLCBgYGhleCgpYGAgYW5kIGBgb2N0KClgYCBmdW5jdGlvbnMpLiBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKLSAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5nIG9iamVjdHMgc3VwcG9ydCB0aGUgbWV0aG9kcyBsaXN0ZWQgYmVsb3cuICBOb3RlIHRoYXQgbm9uZSBvZlxudGhlc2UgbWV0aG9kcyB0YWtlIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JbiBhZGRpdGlvbiwgUHl0aG9uXCdzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTZXF1ZW5jZSBUeXBlcyAtLS0gc3RyLCBieXRlcywgYnl0ZWFycmF5LCBsaXN0LFxudHVwbGUsIHJhbmdlKiBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MsIHNlZSB0aGUgKlN0cmluZ1xuRm9ybWF0dGluZyogc2VjdGlvbi4gQWxzbywgc2VlIHRoZSBgYHJlYGAgbW9kdWxlIGZvciBzdHJpbmcgZnVuY3Rpb25zXG5iYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiAgRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmVcbiAgIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3JcbiAgICplcnJvcnMqIGlzIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgLCBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kXG4gICBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZVxuICAgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZVxuICAgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSAqZm9ybWF0X3N0cmluZypcbiAgIGFyZ3VtZW50IGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHMgZGVsaW1pdGVkXG4gICBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXIgdGhlXG4gICBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYSBrZXl3b3JkXG4gICBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mICpmb3JtYXRfc3RyaW5nKiB3aGVyZSBlYWNoIHJlcGxhY2VtZW50XG4gICBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZFxuICAgdG8gZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVRcbiAgIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTGwiLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCB1cHBlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTHUiLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICpzZXEqLCBpbmNsdWRpbmcgYGBieXRlc2BgIG9iamVjdHMuICBUaGVcbiAgIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgIGBgc3RyLnRyYW5zbGF0ZSgpYGAuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYHJmaW5kKClgYCBidXQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKlxuICAgaXMgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG5zdHIucnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAgICAgICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMpXG5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIGBgbGVuKHMpYGAuXG4nLAotICdzdHJpbmdzJzogJ1xuU3RyaW5nIGFuZCBCeXRlcyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIHN0cmluZ2xpdGVyYWwgICA6Oj0gW3N0cmluZ3ByZWZpeF0oc2hvcnRzdHJpbmcgfCBsb25nc3RyaW5nKVxuICAgc3RyaW5ncHJlZml4ICAgIDo6PSAiciIgfCAiUiJcbiAgIHNob3J0c3RyaW5nICAgICA6Oj0gIlwnIiBzaG9ydHN0cmluZ2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydHN0cmluZ2l0ZW0qIFwnIlwnXG4gICBsb25nc3RyaW5nICAgICAgOjo9ICJcJ1wnXCciIGxvbmdzdHJpbmdpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ3N0cmluZ2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0c3RyaW5naXRlbSA6Oj0gc2hvcnRzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBsb25nc3RyaW5naXRlbSAgOjo9IGxvbmdzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBzaG9ydHN0cmluZ2NoYXIgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdzdHJpbmdjaGFyICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgc3RyaW5nZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgc291cmNlIGNoYXJhY3Rlcj5cblxuICAgYnl0ZXNsaXRlcmFsICAgOjo9IGJ5dGVzcHJlZml4KHNob3J0Ynl0ZXMgfCBsb25nYnl0ZXMpXG4gICBieXRlc3ByZWZpeCAgICA6Oj0gImIiIHwgIkIiIHwgImJyIiB8ICJCciIgfCAiYlIiIHwgIkJSIlxuICAgc2hvcnRieXRlcyAgICAgOjo9ICJcJyIgc2hvcnRieXRlc2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydGJ5dGVzaXRlbSogXCciXCdcbiAgIGxvbmdieXRlcyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nYnl0ZXNpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ2J5dGVzaXRlbSogXCciIiJcJ1xuICAgc2hvcnRieXRlc2l0ZW0gOjo9IHNob3J0Ynl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIGxvbmdieXRlc2l0ZW0gIDo6PSBsb25nYnl0ZXNjaGFyIHwgYnl0ZXNlc2NhcGVzZXFcbiAgIHNob3J0Ynl0ZXNjaGFyIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdieXRlc2NoYXIgIDo6PSA8YW55IEFTQ0lJIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIGJ5dGVzZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgQVNDSUkgY2hhcmFjdGVyPlxuXG5PbmUgc3ludGFjdGljIHJlc3RyaWN0aW9uIG5vdCBpbmRpY2F0ZWQgYnkgdGhlc2UgcHJvZHVjdGlvbnMgaXMgdGhhdFxud2hpdGVzcGFjZSBpcyBub3QgYWxsb3dlZCBiZXR3ZWVuIHRoZSAqKnN0cmluZ3ByZWZpeCoqIG9yXG4qKmJ5dGVzcHJlZml4KiogYW5kIHRoZSByZXN0IG9mIHRoZSBsaXRlcmFsLiBUaGUgc291cmNlIGNoYXJhY3RlciBzZXRcbmlzIGRlZmluZWQgYnkgdGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uOyBpdCBpcyBVVEYtOCBpZiBubyBlbmNvZGluZ1xuZGVjbGFyYXRpb24gaXMgZ2l2ZW4gaW4gdGhlIHNvdXJjZSBmaWxlOyBzZWUgc2VjdGlvbiAqRW5jb2RpbmdcbmRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IEJvdGggdHlwZXMgb2YgbGl0ZXJhbHMgY2FuIGJlIGVuY2xvc2VkIGluIG1hdGNoaW5nXG5zaW5nbGUgcXVvdGVzIChgYFwnYGApIG9yIGRvdWJsZSBxdW90ZXMgKGBgImBgKS4gIFRoZXkgY2FuIGFsc28gYmVcbmVuY2xvc2VkIGluIG1hdGNoaW5nIGdyb3VwcyBvZiB0aHJlZSBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyAodGhlc2VcbmFyZSBnZW5lcmFsbHkgcmVmZXJyZWQgdG8gYXMgKnRyaXBsZS1xdW90ZWQgc3RyaW5ncyopLiAgVGhlIGJhY2tzbGFzaFxuKGBgXFxgYCkgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBvdGhlcndpc2UgaGF2ZSBhXG5zcGVjaWFsIG1lYW5pbmcsIHN1Y2ggYXMgbmV3bGluZSwgYmFja3NsYXNoIGl0c2VsZiwgb3IgdGhlIHF1b3RlXG5jaGFyYWN0ZXIuXG5cbkJ5dGVzIGxpdGVyYWxzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCBgYFwnYlwnYGAgb3IgYGBcJ0JcJ2BgOyB0aGV5XG5wcm9kdWNlIGFuIGluc3RhbmNlIG9mIHRoZSBgYGJ5dGVzYGAgdHlwZSBpbnN0ZWFkIG9mIHRoZSBgYHN0cmBgIHR5cGUuXG5UaGV5IG1heSBvbmx5IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVyczsgYnl0ZXMgd2l0aCBhIG51bWVyaWMgdmFsdWUgb2ZcbjEyOCBvciBncmVhdGVyIG11c3QgYmUgZXhwcmVzc2VkIHdpdGggZXNjYXBlcy5cblxuQm90aCBzdHJpbmcgYW5kIGJ5dGVzIGxpdGVyYWxzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIHdpdGggYVxubGV0dGVyIGBgXCdyXCdgYCBvciBgYFwnUlwnYGA7IHN1Y2ggc3RyaW5ncyBhcmUgY2FsbGVkICpyYXcgc3RyaW5ncyogYW5kXG50cmVhdCBiYWNrc2xhc2hlcyBhcyBsaXRlcmFsIGNoYXJhY3RlcnMuICBBcyBhIHJlc3VsdCwgaW4gc3RyaW5nXG5saXRlcmFscywgYGBcJ1xcVVwnYGAgYW5kIGBgXCdcXHVcJ2BgIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkXG5zcGVjaWFsbHkuXG5cbkluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWRcbihhbmQgYXJlIHJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvd1xudGVybWluYXRlIHRoZSBzdHJpbmcuICAoQSAicXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZVxuc3RyaW5nLCBpLmUuIGVpdGhlciBgYFwnYGAgb3IgYGAiYGAuKVxuXG5Vbmxlc3MgYW4gYGBcJ3JcJ2BgIG9yIGBgXCdSXCdgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpblxuc3RyaW5ncyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieVxuU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58IGBgXFxuZXdsaW5lYGAgICAgICB8IEJhY2tzbGFzaCBhbmQgbmV3bGluZSBpZ25vcmVkICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXFxgYCAgICAgICAgICAgIHwgQmFja3NsYXNoIChgYFxcYGApICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcXCdgYCAgICAgICAgICAgIHwgU2luZ2xlIHF1b3RlIChgYFwnYGApICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcImBgICAgICAgICAgICAgfCBEb3VibGUgcXVvdGUgKGBgImBgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGFgYCAgICAgICAgICAgIHwgQVNDSUkgQmVsbCAoQkVMKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxiYGAgICAgICAgICAgICB8IEFTQ0lJIEJhY2tzcGFjZSAoQlMpICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcZmBgICAgICAgICAgICAgfCBBU0NJSSBGb3JtZmVlZCAoRkYpICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXG5gYCAgICAgICAgICAgIHwgQVNDSUkgTGluZWZlZWQgKExGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxyYGAgICAgICAgICAgICB8IEFTQ0lJIENhcnJpYWdlIFJldHVybiAoQ1IpICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcdGBgICAgICAgICAgICAgfCBBU0NJSSBIb3Jpem9udGFsIFRhYiAoVEFCKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHZgYCAgICAgICAgICAgIHwgQVNDSUkgVmVydGljYWwgVGFiIChWVCkgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxvb29gYCAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIG9jdGFsIHZhbHVlICpvb28qICB8ICgxLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxceGhoYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBoZXggdmFsdWUgKmhoKiAgICAgfCAoMiwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuRXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nIGxpdGVyYWxzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcTntuYW1lfWBgICAgICAgfCBDaGFyYWN0ZXIgbmFtZWQgKm5hbWUqIGluIHRoZSAgICAgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGRhdGFiYXNlICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHV4eHh4YGAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMTYtYml0IGhleCB2YWx1ZSAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgKnh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxVeHh4eHh4eHhgYCAgICB8IENoYXJhY3RlciB3aXRoIDMyLWJpdCBoZXggdmFsdWUgICB8ICg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4eHh4eCogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gQXMgaW4gU3RhbmRhcmQgQywgdXAgdG8gdGhyZWUgb2N0YWwgZGlnaXRzIGFyZSBhY2NlcHRlZC5cblxuMi4gVW5saWtlIGluIFN0YW5kYXJkIEMsIGV4YWN0bHkgdHdvIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG4zLiBJbiBhIGJ5dGVzIGxpdGVyYWwsIGhleGFkZWNpbWFsIGFuZCBvY3RhbCBlc2NhcGVzIGRlbm90ZSB0aGUgYnl0ZVxuICAgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuIEluIGEgc3RyaW5nIGxpdGVyYWwsIHRoZXNlIGVzY2FwZXMgZGVub3RlIGFcbiAgIFVuaWNvZGUgY2hhcmFjdGVyIHdpdGggdGhlIGdpdmVuIHZhbHVlLlxuXG40LiBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGNhbiBiZVxuICAgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS4gIEV4YWN0bHkgZm91ciBoZXggZGlnaXRzIGFyZVxuICAgcmVxdWlyZWQuXG5cbjUuIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheSwgYnV0IGNoYXJhY3RlcnNcbiAgIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSB3aWxsIGJlIGVuY29kZWQgdXNpbmcgYVxuICAgc3Vycm9nYXRlIHBhaXIgaWYgUHl0aG9uIGlzIGNvbXBpbGVkIHRvIHVzZSAxNi1iaXQgY29kZSB1bml0cyAodGhlXG4gICBkZWZhdWx0KS4gIEV4YWN0bHkgZWlnaHQgaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cblVubGlrZSBTdGFuZGFyZCBDLCBhbGwgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGxlZnQgaW4gdGhlXG5zdHJpbmcgdW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSBzdHJpbmcqLiAgKFRoaXNcbmJlaGF2aW9yIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZzogaWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG1pc3R5cGVkLFxudGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgbW9yZSBlYXNpbHkgcmVjb2duaXplZCBhcyBicm9rZW4uKSAgSXQgaXMgYWxzb1xuaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nXG5saXRlcmFscyBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIHVucmVjb2duaXplZCBlc2NhcGVzIGZvciBieXRlc1xubGl0ZXJhbHMuXG5cbkV2ZW4gaW4gYSByYXcgc3RyaW5nLCBzdHJpbmcgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsXG5idXQgdGhlIGJhY2tzbGFzaCByZW1haW5zIGluIHRoZSBzdHJpbmc7IGZvciBleGFtcGxlLCBgYHIiXFwiImBgIGlzIGFcbnZhbGlkIHN0cmluZyBsaXRlcmFsIGNvbnNpc3Rpbmcgb2YgdHdvIGNoYXJhY3RlcnM6IGEgYmFja3NsYXNoIGFuZCBhXG5kb3VibGUgcXVvdGU7IGBgciJcXCJgYCBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhd1xuc3RyaW5nIGNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphXG5yYXcgc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaFxud291bGQgZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlXG5iYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzXG5hcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAorICdzcGVjaWFsbmFtZXMnOiAnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgYGBfX2dldGl0ZW1fXygpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiB0aGlzXG5jbGFzcywgdGhlbiBgYHhbaV1gYCBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYGB0eXBlKHgpLl9fZ2V0aXRlbV9fKHgsXG5pKWBgLiAgRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb24gcmFpc2VcbmFuIGV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbmBgQXR0cmlidXRlRXJyb3JgYCBvciBgYFR5cGVFcnJvcmBgKS5cblxuV2hlbiBpbXBsZW1lbnRpbmcgYSBjbGFzcyB0aGF0IGVtdWxhdGVzIGFueSBidWlsdC1pbiB0eXBlLCBpdCBpc1xuaW1wb3J0YW50IHRoYXQgdGhlIGVtdWxhdGlvbiBvbmx5IGJlIGltcGxlbWVudGVkIHRvIHRoZSBkZWdyZWUgdGhhdCBpdFxubWFrZXMgc2Vuc2UgZm9yIHRoZSBvYmplY3QgYmVpbmcgbW9kZWxsZWQuICBGb3IgZXhhbXBsZSwgc29tZVxuc2VxdWVuY2VzIG1heSB3b3JrIHdlbGwgd2l0aCByZXRyaWV2YWwgb2YgaW5kaXZpZHVhbCBlbGVtZW50cywgYnV0XG5leHRyYWN0aW5nIGEgc2xpY2UgbWF5IG5vdCBtYWtlIHNlbnNlLiAgKE9uZSBleGFtcGxlIG9mIHRoaXMgaXMgdGhlXG5gYE5vZGVMaXN0YGAgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICBgYF9fbmV3X18oKWBgIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mIGBgX19uZXdfXygpYGAgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5XG4gICBhbiBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIHVzaW5nXG4gICBgYHN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pYGAgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyBgYF9faW5pdF9fKClgYCBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgIGBgX19pbml0X18oc2VsZlssIC4uLl0pYGAsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAuXG5cbiAgIElmIGBgX19uZXdfXygpYGAgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzIGBgX19pbml0X18oKWBgIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICBgYF9fbmV3X18oKWBgIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgIGBgX19pbml0X18oKWBgIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgYGBfX2luaXRfXygpYGAgbWV0aG9kLFxuICAgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mXG4gICB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICBgYEJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pYGAuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludFxuICAgb24gY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgYGBUeXBlRXJyb3JgYCB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSBgYF9fZGVsX18oKWBgIG1ldGhvZCxcbiAgIHRoZSBkZXJpdmVkIGNsYXNzXCdzIGBgX19kZWxfXygpYGAgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseVxuICAgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlXG4gICBpbnN0YW5jZS4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvclxuICAgdGhlIGBgX19kZWxfXygpYGAgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgIGBgX19kZWxfXygpYGAgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiBgYGRlbCB4YGAgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCBgYHguX19kZWxfXygpYGAgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciBgYHhgYCBieSBvbmUsIGFuZCB0aGUgbGF0dGVyXG4gICAgIGlzIG9ubHkgY2FsbGVkIHdoZW4gYGB4YGBcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWVcbiAgICAgY29tbW9uIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuXG4gICAgIG9iamVjdCBmcm9tIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuXG4gICAgIG9iamVjdHMgKGUuZy4sIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoXG4gICAgIHBhcmVudCBhbmQgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZVxuICAgICBzdGFjayBmcmFtZSBvZiBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFja1xuICAgICBzdG9yZWQgaW4gYGBzeXMuZXhjX2luZm8oKVsyXWBgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yXG4gICAgIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuXG4gICAgIHVuaGFuZGxlZCBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYCBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW5cbiAgICAgYGBzeXMubGFzdF90cmFjZWJhY2tgYC4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCBgYF9fZGVsX18oKWBgIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgIGZvciB0aGUgYGBnY2BgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3dcbiAgICAgYGBfX2RlbF9fKClgYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvcixcbiAgICAgcGFydGljdWxhcmx5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYGBnYXJiYWdlYGAgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZyB0aGVpciBleGVjdXRpb25cbiAgICAgYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBgYHN5cy5zdGRlcnJgYCBpbnN0ZWFkLlxuICAgICBBbHNvLCB3aGVuIGBgX19kZWxfXygpYGAgaXMgaW52b2tlZCBpbiByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZ1xuICAgICBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXJcbiAgICAgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlXG4gICAgIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyB0b3JuIGRvd24gKGUuZy4gdGhlXG4gICAgIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpcyByZWFzb24sIGBgX19kZWxfXygpYGBcbiAgICAgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkIHRvIG1haW50YWluXG4gICAgIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LCBQeXRob25cbiAgICAgZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSBgYF9fZGVsX18oKWBgIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgcmVwcigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGVcbiAgICJvZmZpY2lhbCIgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSxcbiAgIHRoaXMgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZFxuICAgdG8gcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgIGBgPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPmBgIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyBgYF9fcmVwcl9fKClgYFxuICAgYnV0IG5vdCBgYF9fc3RyX18oKWBgLCB0aGVuIGBgX19yZXByX18oKWBgIGlzIGFsc28gdXNlZCB3aGVuIGFuXG4gICAiaW5mb3JtYWwiIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpc1xuICAgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSBgYHN0cigpYGAgYnVpbHQtaW4gZnVuY3Rpb24gYW5kIGJ5IHRoZSBgYHByaW50KClgYFxuICAgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gIFRoaXMgZGlmZmVycyBmcm9tIGBgX19yZXByX18oKWBgIGluIHRoYXQgaXQgZG9lcyBub3QgaGF2ZVxuICAgdG8gYmUgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYSBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZVxuICAgcmVwcmVzZW50YXRpb24gbWF5IGJlIHVzZWQgaW5zdGVhZC4gVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGFcbiAgIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlIGBgZm9ybWF0KClgYCBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICBgYGZvcm1hdCgpYGAgbWV0aG9kIG9mIGNsYXNzIGBgc3RyYGApIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlIGBgZm9ybWF0X3NwZWNgYCBhcmd1bWVudCBpc1xuICAgYSBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgYGBmb3JtYXRfc3BlY2BgIGFyZ3VtZW50IGlzIHVwXG4gICB0byB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgYGBfX2Zvcm1hdF9fKClgYCwgaG93ZXZlciBtb3N0IGNsYXNzZXNcbiAgIHdpbGwgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3JcbiAgIHVzZSBhIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbm9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19sZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZXFfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX25lX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ndF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ2VfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgYXJlIHRoZSBzby1jYWxsZWQgInJpY2ggY29tcGFyaXNvbiIgbWV0aG9kcy4gVGhlXG4gICBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIG9wZXJhdG9yIHN5bWJvbHMgYW5kIG1ldGhvZCBuYW1lcyBpcyBhc1xuICAgZm9sbG93czogYGB4PHlgYCBjYWxscyBgYHguX19sdF9fKHkpYGAsIGBgeDw9eWBgIGNhbGxzXG4gICBgYHguX19sZV9fKHkpYGAsIGBgeD09eWBgIGNhbGxzIGBgeC5fX2VxX18oeSlgYCwgYGB4IT15YGAgY2FsbHNcbiAgIGBgeC5fX25lX18oeSlgYCwgYGB4PnlgYCBjYWxscyBgYHguX19ndF9fKHkpYGAsIGFuZCBgYHg+PXlgYCBjYWxsc1xuICAgYGB4Ll9fZ2VfXyh5KWBgLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uXG4gICBgYE5vdEltcGxlbWVudGVkYGAgaWYgaXQgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIGFcbiAgIGdpdmVuIHBhaXIgb2YgYXJndW1lbnRzLiBCeSBjb252ZW50aW9uLCBgYEZhbHNlYGAgYW5kIGBgVHJ1ZWBgIGFyZVxuICAgcmV0dXJuZWQgZm9yIGEgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhblxuICAgcmV0dXJuIGFueSB2YWx1ZSwgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhXG4gICBCb29sZWFuIGNvbnRleHQgKGUuZy4sIGluIHRoZSBjb25kaXRpb24gb2YgYW4gYGBpZmBgIHN0YXRlbWVudCksXG4gICBQeXRob24gd2lsbCBjYWxsIGBgYm9vbCgpYGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0XG4gICBpcyB0cnVlIG9yIGZhbHNlLlxuXG4gICBUaGVyZSBhcmUgbm8gaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAgIFRoZSB0cnV0aCBvZiBgYHg9PXlgYCBkb2VzIG5vdCBpbXBseSB0aGF0IGBgeCE9eWBgIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgYGBfX2VxX18oKWBgLCBvbmUgc2hvdWxkIGFsc28gZGVmaW5lXG4gICBgYF9fbmVfXygpYGAgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlXG4gICB0aGUgcGFyYWdyYXBoIG9uIGBgX19oYXNoX18oKWBgIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvblxuICAgY3JlYXRpbmcgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb25cbiAgIG9wZXJhdGlvbnMgYW5kIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCBgYF9fbHRfXygpYGAgYW5kIGBgX19ndF9fKClgYCBhcmUgZWFjaFxuICAgb3RoZXJcJ3MgcmVmbGVjdGlvbiwgYGBfX2xlX18oKWBgIGFuZCBgYF9fZ2VfXygpYGAgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sIGFuZCBgYF9fZXFfXygpYGAgYW5kIGBgX19uZV9fKClgYCBhcmUgdGhlaXIgb3duXG4gICByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlIGBgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKClgYC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiBgYGhhc2goKWBgIGFuZCBmb3Igb3BlcmF0aW9ucyBvblxuICAgbWVtYmVycyBvZiBoYXNoZWQgY29sbGVjdGlvbnMgaW5jbHVkaW5nIGBgc2V0YGAsIGBgZnJvemVuc2V0YGAsIGFuZFxuICAgYGBkaWN0YGAuICBgYF9faGFzaF9fKClgYCBzaG91bGQgcmV0dXJuIGFuIGludGVnZXIuICBUaGUgb25seVxuICAgcmVxdWlyZWQgcHJvcGVydHkgaXMgdGhhdCBvYmplY3RzIHdoaWNoIGNvbXBhcmUgZXF1YWwgaGF2ZSB0aGUgc2FtZVxuICAgaGFzaCB2YWx1ZTsgaXQgaXMgYWR2aXNlZCB0byBzb21laG93IG1peCB0b2dldGhlciAoZS5nLiB1c2luZ1xuICAgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaCB2YWx1ZXMgZm9yIHRoZSBjb21wb25lbnRzIG9mIHRoZSBvYmplY3QgdGhhdFxuICAgYWxzbyBwbGF5IGEgcGFydCBpbiBjb21wYXJpc29uIG9mIG9iamVjdHMuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuIGBgX19lcV9fKClgYCBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgYGBfX2hhc2hfXygpYGAgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lc1xuICAgYGBfX2VxX18oKWBgIGJ1dCBub3QgYGBfX2hhc2hfXygpYGAsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmVcbiAgIHVzYWJsZSBhcyBpdGVtcyBpbiBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbXV0YWJsZSBvYmplY3RzIGFuZCBpbXBsZW1lbnRzIGFuIGBgX19lcV9fKClgYCBtZXRob2QsIGl0IHNob3VsZFxuICAgbm90IGltcGxlbWVudCBgYF9faGFzaF9fKClgYCwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlXG4gICBjb2xsZWN0aW9ucyByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGVcbiAgIG9iamVjdFwncyBoYXNoIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSBgYF9fZXFfXygpYGAgYW5kIGBgX19oYXNoX18oKWBgIG1ldGhvZHNcbiAgIGJ5IGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kIGBgeC5fX2hhc2hfXygpYGAgcmV0dXJucyBgYGlkKHgpYGAuXG5cbiAgIENsYXNzZXMgd2hpY2ggaW5oZXJpdCBhIGBgX19oYXNoX18oKWBgIG1ldGhvZCBmcm9tIGEgcGFyZW50IGNsYXNzXG4gICBidXQgY2hhbmdlIHRoZSBtZWFuaW5nIG9mIGBgX19lcV9fKClgYCBzdWNoIHRoYXQgdGhlIGhhc2ggdmFsdWVcbiAgIHJldHVybmVkIGlzIG5vIGxvbmdlciBhcHByb3ByaWF0ZSAoZS5nLiBieSBzd2l0Y2hpbmcgdG8gYSB2YWx1ZS1cbiAgIGJhc2VkIGNvbmNlcHQgb2YgZXF1YWxpdHkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBpZGVudGl0eSBiYXNlZFxuICAgZXF1YWxpdHkpIGNhbiBleHBsaWNpdGx5IGZsYWcgdGhlbXNlbHZlcyBhcyBiZWluZyB1bmhhc2hhYmxlIGJ5XG4gICBzZXR0aW5nIGBgX19oYXNoX18gPSBOb25lYGAgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24uIERvaW5nIHNvIG1lYW5zXG4gICB0aGF0IG5vdCBvbmx5IHdpbGwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyByYWlzZSBhbiBhcHByb3ByaWF0ZVxuICAgYGBUeXBlRXJyb3JgYCB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0byByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLFxuICAgYnV0IHRoZXkgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlblxuICAgY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpYGAgKHVubGlrZSBjbGFzc2VzXG4gICB3aGljaCBkZWZpbmUgdGhlaXIgb3duIGBgX19oYXNoX18oKWBgIHRvIGV4cGxpY2l0bHkgcmFpc2VcbiAgIGBgVHlwZUVycm9yYGApLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzIGBgX19lcV9fKClgYCBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiBgYF9faGFzaF9fKClgYCBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGVcbiAgIGludGVycHJldGVyIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyBgYF9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX19gYC4gT3RoZXJ3aXNlIHRoZSBpbmhlcml0YW5jZSBvZlxuICAgYGBfX2hhc2hfXygpYGAgd2lsbCBiZSBibG9ja2VkLCBqdXN0IGFzIGlmIGBgX19oYXNoX19gYCBoYWQgYmVlblxuICAgZXhwbGljaXRseSBzZXQgdG8gYGBOb25lYGAuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgIGBgYm9vbCgpYGA7IHNob3VsZCByZXR1cm4gYGBGYWxzZWBgIG9yIGBgVHJ1ZWBgLiAgV2hlbiB0aGlzIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIGBgX19sZW5fXygpYGAgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlXG4gICBvYmplY3QgaXMgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3NcbiAgIGRlZmluZXMgbmVpdGhlciBgYF9fbGVuX18oKWBgIG5vciBgYF9fYm9vbF9fKClgYCwgYWxsIGl0cyBpbnN0YW5jZXNcbiAgIGFyZSBjb25zaWRlcmVkIHRydWUuXG5cblxuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mIGBgeC5uYW1lYGApXG5mb3IgY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciBgYHNlbGZgYCkuICBgYG5hbWVgYCBpcyB0aGUgYXR0cmlidXRlIG5hbWUuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZVxuICAgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgIGBgX19nZXRhdHRyX18oKWBgIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gYGBfX2dldGF0dHJfXygpYGAgYW5kIGBgX19zZXRhdHRyX18oKWBgLikgVGhpcyBpcyBkb25lIGJvdGhcbiAgIGZvciBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlIGBgX19nZXRhdHRyX18oKWBgXG4gICB3b3VsZCBoYXZlIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlXG4gICB0aGF0IGF0IGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5XG4gICBub3QgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXNcbiAgIGBgX19nZXRhdHRyX18oKWBgLCB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3NcbiAgIGBgX19nZXRhdHRyaWJ1dGVfXygpYGAgZWl0aGVyIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuXG4gICBgYEF0dHJpYnV0ZUVycm9yYGAuIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZClcbiAgIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiBgYEF0dHJpYnV0ZUVycm9yYGAgZXhjZXB0aW9uLiBJbiBvcmRlclxuICAgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb25cbiAgIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvXG4gICBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvciBleGFtcGxlLFxuICAgYGBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKWBgLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kc1xuICAgICBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheCBvclxuICAgICBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiBgYF9fc2V0YXR0cl9fKClgYCB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICBgYG9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlgYC5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgYGBfX3NldGF0dHJfXygpYGAgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgYGBkZWwgb2JqLm5hbWVgYCBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gYGBkaXIoKWBgIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiAgQSBsaXN0IG11c3QgYmVcbiAgIHJldHVybmVkLlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnIGBgX19kaWN0X19gYC5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yIGBgTm9uZWBgIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgYGBBdHRyaWJ1dGVFcnJvcmBgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgYGBfX2dldF9fKClgYCwgYGBfX3NldF9fKClgYCwgYW5kXG5gYF9fZGVsZXRlX18oKWBgLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LFxuaXQgaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCBgYGEueGBgIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCBgYGEuX19kaWN0X19bXCd4XCddYGAsIHRoZW5cbmBgdHlwZShhKS5fX2RpY3RfX1tcJ3hcJ11gYCwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG5gYHR5cGUoYSlgYCBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsIGBgYS54YGAuXG5Ib3cgdGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gYGBhYGA6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgIGBgeC5fX2dldF9fKGEpYGAuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCBgYGEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiBgYHR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSlgYC5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCBgYEEueGBgIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICBgYEEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSlgYC5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgYGBhYGAgaXMgYW4gaW5zdGFuY2Ugb2YgYGBzdXBlcmBgLCB0aGVuIHRoZSBiaW5kaW5nIGBgc3VwZXIoQixcbiAgIG9iaikubSgpYGAgc2VhcmNoZXMgYGBvYmouX19jbGFzc19fLl9fbXJvX19gYCBmb3IgdGhlIGJhc2UgY2xhc3NcbiAgIGBgQWBgIGltbWVkaWF0ZWx5IHByZWNlZGluZyBgYEJgYCBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yXG4gICB3aXRoIHRoZSBjYWxsOiBgYEEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKWBgLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiBgYF9fZ2V0X18oKWBgLCBgYF9fc2V0X18oKWBgIGFuZCBgYF9fZGVsZXRlX18oKWBgLlxuSWYgaXQgZG9lcyBub3QgZGVmaW5lIGBgX19nZXRfXygpYGAsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbFxucmV0dXJuIHRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlXG5vYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgYGBfX3NldF9fKClgYFxuYW5kL29yIGBgX19kZWxldGVfXygpYGAsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzXG5uZWl0aGVyLCBpdCBpcyBhIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9yc1xuZGVmaW5lIGJvdGggYGBfX2dldF9fKClgYCBhbmQgYGBfX3NldF9fKClgYCwgd2hpbGUgbm9uLWRhdGFcbmRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGUgYGBfX2dldF9fKClgYCBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGhcbmBgX19zZXRfXygpYGAgYW5kIGBgX19nZXRfXygpYGAgZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb25cbmluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJbiBjb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlXG5vdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyBgYHN0YXRpY21ldGhvZCgpYGAgYW5kIGBgY2xhc3NtZXRob2QoKWBgKVxuYXJlIGltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgYGBwcm9wZXJ0eSgpYGAgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICBJZiBkZWZpbmVkIGluIGFcbiAgIGNsYXNzLCAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZSBmb3IgdGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBhbmRcbiAgIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKiBhbmQgKl9fd2Vha3JlZl9fKiBmb3JcbiAgIGVhY2ggaW5zdGFuY2UuXG5cblxuTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXypcbn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG5cbiogV2hlbiBpbmhlcml0aW5nIGZyb20gYSBjbGFzcyB3aXRob3V0ICpfX3Nsb3RzX18qLCB0aGUgKl9fZGljdF9fKlxuICBhdHRyaWJ1dGUgb2YgdGhhdCBjbGFzcyB3aWxsIGFsd2F5cyBiZSBhY2Nlc3NpYmxlLCBzbyBhICpfX3Nsb3RzX18qXG4gIGRlZmluaXRpb24gaW4gdGhlIHN1YmNsYXNzIGlzIG1lYW5pbmdsZXNzLlxuXG4qIFdpdGhvdXQgYSAqX19kaWN0X18qIHZhcmlhYmxlLCBpbnN0YW5jZXMgY2Fubm90IGJlIGFzc2lnbmVkIG5ld1xuICB2YXJpYWJsZXMgbm90IGxpc3RlZCBpbiB0aGUgKl9fc2xvdHNfXyogZGVmaW5pdGlvbi4gIEF0dGVtcHRzIHRvXG4gIGFzc2lnbiB0byBhbiB1bmxpc3RlZCB2YXJpYWJsZSBuYW1lIHJhaXNlcyBgYEF0dHJpYnV0ZUVycm9yYGAuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gIGBgXCdfX2RpY3RfX1wnYGAgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzIGRlZmluaW5nXG4gICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW5zdGFuY2VzLiBJZiB3ZWFrXG4gIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGQgYGBcJ19fd2Vha3JlZl9fXCdgYCB0byB0aGVcbiAgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbiB0aGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24uXG5cbiogKl9fc2xvdHNfXyogYXJlIGltcGxlbWVudGVkIGF0IHRoZSBjbGFzcyBsZXZlbCBieSBjcmVhdGluZ1xuICBkZXNjcmlwdG9ycyAoKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyopIGZvciBlYWNoIHZhcmlhYmxlIG5hbWUuICBBc1xuICBhIHJlc3VsdCwgY2xhc3MgYXR0cmlidXRlcyBjYW5ub3QgYmUgdXNlZCB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yXG4gIGluc3RhbmNlIHZhcmlhYmxlcyBkZWZpbmVkIGJ5ICpfX3Nsb3RzX18qOyBvdGhlcndpc2UsIHRoZSBjbGFzc1xuICBhdHRyaWJ1dGUgd291bGQgb3ZlcndyaXRlIHRoZSBkZXNjcmlwdG9yIGFzc2lnbm1lbnQuXG5cbiogVGhlIGFjdGlvbiBvZiBhICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIGlzIGxpbWl0ZWQgdG8gdGhlIGNsYXNzXG4gIHdoZXJlIGl0IGlzIGRlZmluZWQuICBBcyBhIHJlc3VsdCwgc3ViY2xhc3NlcyB3aWxsIGhhdmUgYSAqX19kaWN0X18qXG4gIHVubGVzcyB0aGV5IGFsc28gZGVmaW5lICpfX3Nsb3RzX18qICh3aGljaCBtdXN0IG9ubHkgY29udGFpbiBuYW1lc1xuICBvZiBhbnkgKmFkZGl0aW9uYWwqIHNsb3RzKS5cblxuKiBJZiBhIGNsYXNzIGRlZmluZXMgYSBzbG90IGFsc28gZGVmaW5lZCBpbiBhIGJhc2UgY2xhc3MsIHRoZSBpbnN0YW5jZVxuICB2YXJpYWJsZSBkZWZpbmVkIGJ5IHRoZSBiYXNlIGNsYXNzIHNsb3QgaXMgaW5hY2Nlc3NpYmxlIChleGNlcHQgYnlcbiAgcmV0cmlldmluZyBpdHMgZGVzY3JpcHRvciBkaXJlY3RseSBmcm9tIHRoZSBiYXNlIGNsYXNzKS4gVGhpc1xuICByZW5kZXJzIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtIHVuZGVmaW5lZC4gIEluIHRoZSBmdXR1cmUsIGFcbiAgY2hlY2sgbWF5IGJlIGFkZGVkIHRvIHByZXZlbnQgdGhpcy5cblxuKiBOb25lbXB0eSAqX19zbG90c19fKiBkb2VzIG5vdCB3b3JrIGZvciBjbGFzc2VzIGRlcml2ZWQgZnJvbVxuICAidmFyaWFibGUtbGVuZ3RoIiBidWlsdC1pbiB0eXBlcyBzdWNoIGFzIGBgaW50YGAsIGBgc3RyYGAgYW5kXG4gIGBgdHVwbGVgYC5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzIG1heVxuICBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgYGB0eXBlKClgYC4gQSBjbGFzc1xuZGVmaW5pdGlvbiBpcyByZWFkIGludG8gYSBzZXBhcmF0ZSBuYW1lc3BhY2UgYW5kIHRoZSB2YWx1ZSBvZiBjbGFzc1xubmFtZSBpcyBib3VuZCB0byB0aGUgcmVzdWx0IG9mIGBgdHlwZShuYW1lLCBiYXNlcywgZGljdClgYC5cblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyByZWFkLCBpZiBhIGNhbGxhYmxlIGBgbWV0YWNsYXNzYGAga2V5d29yZFxuYXJndW1lbnQgaXMgcGFzc2VkIGFmdGVyIHRoZSBiYXNlcyBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiwgdGhlXG5jYWxsYWJsZSBnaXZlbiB3aWxsIGJlIGNhbGxlZCBpbnN0ZWFkIG9mIGBgdHlwZSgpYGAuICBJZiBvdGhlciBrZXl3b3JkXG5hcmd1bWVudHMgYXJlIHBhc3NlZCwgdGhleSB3aWxsIGFsc28gYmUgcGFzc2VkIHRvIHRoZSBtZXRhY2xhc3MuICBUaGlzXG5hbGxvd3MgY2xhc3NlcyBvciBmdW5jdGlvbnMgdG8gYmUgd3JpdHRlbiB3aGljaCBtb25pdG9yIG9yIGFsdGVyIHRoZVxuY2xhc3MgY3JlYXRpb24gcHJvY2VzczpcblxuKiBNb2RpZnlpbmcgdGhlIGNsYXNzIGRpY3Rpb25hcnkgcHJpb3IgdG8gdGhlIGNsYXNzIGJlaW5nIGNyZWF0ZWQuXG5cbiogUmV0dXJuaW5nIGFuIGluc3RhbmNlIG9mIGFub3RoZXIgY2xhc3MgLS0gZXNzZW50aWFsbHkgcGVyZm9ybWluZyB0aGVcbiAgcm9sZSBvZiBhIGZhY3RvcnkgZnVuY3Rpb24uXG5cblRoZXNlIHN0ZXBzIHdpbGwgaGF2ZSB0byBiZSBwZXJmb3JtZWQgaW4gdGhlIG1ldGFjbGFzc1wncyBgYF9fbmV3X18oKWBgXG5tZXRob2QgLS0gYGB0eXBlLl9fbmV3X18oKWBgIGNhbiB0aGVuIGJlIGNhbGxlZCBmcm9tIHRoaXMgbWV0aG9kIHRvXG5jcmVhdGUgYSBjbGFzcyB3aXRoIGRpZmZlcmVudCBwcm9wZXJ0aWVzLiAgVGhpcyBleGFtcGxlIGFkZHMgYSBuZXdcbmVsZW1lbnQgdG8gdGhlIGNsYXNzIGRpY3Rpb25hcnkgYmVmb3JlIGNyZWF0aW5nIHRoZSBjbGFzczpcblxuICAgY2xhc3MgbWV0YWNscyh0eXBlKTpcbiAgICAgICBkZWYgX19uZXdfXyhtY3MsIG5hbWUsIGJhc2VzLCBkaWN0KTpcbiAgICAgICAgICAgZGljdFtcJ2Zvb1wnXSA9IFwnbWV0YWNscyB3YXMgaGVyZVwnXG4gICAgICAgICAgIHJldHVybiB0eXBlLl9fbmV3X18obWNzLCBuYW1lLCBiYXNlcywgZGljdClcblxuWW91IGNhbiBvZiBjb3Vyc2UgYWxzbyBvdmVycmlkZSBvdGhlciBjbGFzcyBtZXRob2RzIChvciBhZGQgbmV3XG5tZXRob2RzKTsgZm9yIGV4YW1wbGUgZGVmaW5pbmcgYSBjdXN0b20gYGBfX2NhbGxfXygpYGAgbWV0aG9kIGluIHRoZVxubWV0YWNsYXNzIGFsbG93cyBjdXN0b20gYmVoYXZpb3Igd2hlbiB0aGUgY2xhc3MgaXMgY2FsbGVkLCBlLmcuIG5vdFxuYWx3YXlzIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBhIGBgX19wcmVwYXJlX18oKWBgIGF0dHJpYnV0ZSAodXN1YWxseVxuaW1wbGVtZW50ZWQgYXMgYSBjbGFzcyBvciBzdGF0aWMgbWV0aG9kKSwgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGVcbmNsYXNzIGJvZHkgaXMgZXZhbHVhdGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNsYXNzIGFuZCBhIHR1cGxlIG9mIGl0c1xuYmFzZXMgZm9yIGFyZ3VtZW50cy4gIEl0IHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgdGhlXG5tYXBwaW5nIGludGVyZmFjZSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzdG9yZSB0aGUgbmFtZXNwYWNlIG9mIHRoZVxuY2xhc3MuICBUaGUgZGVmYXVsdCBpcyBhIHBsYWluIGRpY3Rpb25hcnkuICBUaGlzIGNvdWxkIGJlIHVzZWQsIGZvclxuZXhhbXBsZSwgdG8ga2VlcCB0cmFjayBvZiB0aGUgb3JkZXIgdGhhdCBjbGFzcyBhdHRyaWJ1dGVzIGFyZSBkZWNsYXJlZFxuaW4gYnkgcmV0dXJuaW5nIGFuIG9yZGVyZWQgZGljdGlvbmFyeS5cblxuVGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgcHJlY2VkZW5jZVxucnVsZXM6XG5cbiogSWYgdGhlIGBgbWV0YWNsYXNzYGAga2V5d29yZCBhcmd1bWVudCBpcyBwYXNzZWQgd2l0aCB0aGUgYmFzZXMsIGl0XG4gIGlzIHVzZWQuXG5cbiogT3RoZXJ3aXNlLCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgYmFzZSBjbGFzcywgaXRzIG1ldGFjbGFzcyBpc1xuICB1c2VkLlxuXG4qIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQgbWV0YWNsYXNzIChgYHR5cGVgYCkgaXMgdXNlZC5cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRpbmcgbG9nZ2luZywgaW50ZXJmYWNlIGNoZWNraW5nLCBhdXRvbWF0aWNcbmRlbGVnYXRpb24sIGF1dG9tYXRpYyBwcm9wZXJ0eSBjcmVhdGlvbiwgcHJveGllcywgZnJhbWV3b3JrcywgYW5kXG5hdXRvbWF0aWMgcmVzb3VyY2UgbG9ja2luZy9zeW5jaHJvbml6YXRpb24uXG5cbkhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIG1ldGFjbGFzcyB0aGF0IHVzZXMgYW5cbmBgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgYCB0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzXG53ZXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGNsYXNzZGljdCk6XG4gICAgICAgICAgIHJlc3VsdCA9IHR5cGUuX19uZXdfXyhjbHMsIG5hbWUsIGJhc2VzLCBkaWN0KGNsYXNzZGljdCkpXG4gICAgICAgICAgIHJlc3VsdC5tZW1iZXJzID0gdHVwbGUoY2xhc3NkaWN0KVxuICAgICAgICAgICByZXR1cm4gcmVzdWx0XG5cbiAgIGNsYXNzIEEobWV0YWNsYXNzPU9yZGVyZWRDbGFzcyk6XG4gICAgICAgZGVmIG9uZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0d28oc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdGhyZWUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgZm91cihzZWxmKTogcGFzc1xuXG4gICA+Pj4gQS5tZW1iZXJzXG4gICAoXCdfX21vZHVsZV9fXCcsIFwnb25lXCcsIFwndHdvXCcsIFwndGhyZWVcJywgXCdmb3VyXCcpXG5cbldoZW4gdGhlIGNsYXNzIGRlZmluaXRpb24gZm9yICpBKiBnZXRzIGV4ZWN1dGVkLCB0aGUgcHJvY2VzcyBiZWdpbnNcbndpdGggY2FsbGluZyB0aGUgbWV0YWNsYXNzXCdzIGBgX19wcmVwYXJlX18oKWBgIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSBgYGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YGAuICBUaGF0IG1hcHBpbmcgcmVjb3JkcyB0aGUgbWV0aG9kc1xuYW5kIGF0dHJpYnV0ZXMgb2YgKkEqIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjbGFzc1xuc3RhdGVtZW50LiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeVxuaXMgZnVsbHkgcG9wdWxhdGVkIGFuZCB0aGUgbWV0YWNsYXNzXCdzIGBgX19uZXdfXygpYGAgbWV0aG9kIGdldHNcbmludm9rZWQuICBUaGF0IG1ldGhvZCBidWlsZHMgdGhlIG5ldyB0eXBlIGFuZCBpdCBzYXZlcyB0aGUgb3JkZXJlZFxuZGljdGlvbmFyeSBrZXlzIGluIGFuIGF0dHJpYnV0ZSBjYWxsZWQgYGBtZW1iZXJzYGAuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG5gYGlzaW5zdGFuY2UoKWBgIGFuZCBgYGlzc3ViY2xhc3MoKWBgIGJ1aWx0LWluIGZ1bmN0aW9ucy5cblxuSW4gcGFydGljdWxhciwgdGhlIG1ldGFjbGFzcyBgYGFiYy5BQkNNZXRhYGAgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzXG5pbiBvcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICBgYGlzaW5zdGFuY2UoaW5zdGFuY2UsIGNsYXNzKWBgLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgYGBpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcylgYC5cblxuTm90ZSB0aGF0IHRoZXNlIG1ldGhvZHMgYXJlIGxvb2tlZCB1cCBvbiB0aGUgdHlwZSAobWV0YWNsYXNzKSBvZiBhXG5jbGFzcy4gIFRoZXkgY2Fubm90IGJlIGRlZmluZWQgYXMgY2xhc3MgbWV0aG9kcyBpbiB0aGUgYWN0dWFsIGNsYXNzLlxuVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGxvb2t1cCBvZiBzcGVjaWFsIG1ldGhvZHMgdGhhdCBhcmUgY2FsbGVkXG5vbiBpbnN0YW5jZXMsIG9ubHkgaW4gdGhpcyBjYXNlIHRoZSBpbnN0YW5jZSBpcyBpdHNlbGYgYSBjbGFzcy5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDMxMTkqKiAtIEludHJvZHVjaW5nIEFic3RyYWN0IEJhc2UgQ2xhc3Nlc1xuICAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nIGBgaXNpbnN0YW5jZSgpYGAgYW5kXG4gICAgICBgYGlzc3ViY2xhc3MoKWBgIGJlaGF2aW9yIHRocm91Z2ggYGBfX2luc3RhbmNlY2hlY2tfXygpYGAgYW5kXG4gICAgICBgYF9fc3ViY2xhc3NjaGVja19fKClgYCwgd2l0aCBtb3RpdmF0aW9uIGZvciB0aGlzIGZ1bmN0aW9uYWxpdHlcbiAgICAgIGluIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgYGBhYmNgYFxuICAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgYGB4KGFyZzEsIGFyZzIsIC4uLilgYCBpcyBhIHNob3J0aGFuZCBmb3JcbiAgIGBgeC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pYGAuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCBgYDAgPD0gayA8IE5gYFxud2hlcmUgKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaFxuZGVmaW5lIGEgcmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZVxudGhlIG1ldGhvZHMgYGBrZXlzKClgYCwgYGB2YWx1ZXMoKWBgLCBgYGl0ZW1zKClgYCwgYGBnZXQoKWBgLFxuYGBjbGVhcigpYGAsIGBgc2V0ZGVmYXVsdCgpYGAsIGBgcG9wKClgYCwgYGBwb3BpdGVtKClgYCwgYGBjb3B5KClgYCxcbmFuZCBgYHVwZGF0ZSgpYGAgYmVoYXZpbmcgc2ltaWxhciB0byB0aG9zZSBmb3IgUHl0aG9uXCdzIHN0YW5kYXJkXG5kaWN0aW9uYXJ5IG9iamVjdHMuICBUaGUgYGBjb2xsZWN0aW9uc2BgIG1vZHVsZSBwcm92aWRlcyBhXG5gYE11dGFibGVNYXBwaW5nYGAgYWJzdHJhY3QgYmFzZSBjbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzXG5mcm9tIGEgYmFzZSBzZXQgb2YgYGBfX2dldGl0ZW1fXygpYGAsIGBgX19zZXRpdGVtX18oKWBgLFxuYGBfX2RlbGl0ZW1fXygpYGAsIGFuZCBgYGtleXMoKWBgLiBNdXRhYmxlIHNlcXVlbmNlcyBzaG91bGQgcHJvdmlkZVxubWV0aG9kcyBgYGFwcGVuZCgpYGAsIGBgY291bnQoKWBgLCBgYGluZGV4KClgYCwgYGBleHRlbmQoKWBgLFxuYGBpbnNlcnQoKWBgLCBgYHBvcCgpYGAsIGBgcmVtb3ZlKClgYCwgYGByZXZlcnNlKClgYCBhbmQgYGBzb3J0KClgYCxcbmxpa2UgUHl0aG9uIHN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZFxuaW1wbGVtZW50IGFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgYGBfX2FkZF9fKClgYCwgYGBfX3JhZGRfXygpYGAsXG5gYF9faWFkZF9fKClgYCwgYGBfX211bF9fKClgYCwgYGBfX3JtdWxfXygpYGAgYW5kIGBgX19pbXVsX18oKWBgXG5kZXNjcmliZWQgYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0XG5pcyByZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG5gYF9fY29udGFpbnNfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlIGBgaW5gYFxub3BlcmF0b3I7IGZvciBtYXBwaW5ncywgYGBpbmBgIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yXG5zZXF1ZW5jZXMsIGl0IHNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlclxucmVjb21tZW5kZWQgdGhhdCBib3RoIG1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZVxuYGBfX2l0ZXJfXygpYGAgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGVcbmNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCBgYF9faXRlcl9fKClgYCBzaG91bGQgYmUgdGhlIHNhbWUgYXNcbmBga2V5cygpYGA7IGZvciBzZXF1ZW5jZXMsIGl0IHNob3VsZCBpdGVyYXRlIHRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyIGBgPj1gYCAwLiAgQWxzbywgYW4gb2JqZWN0XG4gICB0aGF0IGRvZXNuXCd0IGRlZmluZSBhIGBgX19ib29sX18oKWBgIG1ldGhvZCBhbmQgd2hvc2UgYGBfX2xlbl9fKClgYFxuICAgbWV0aG9kIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBXG4gIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoXG4gIGBgTm9uZWBgLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgYGBzZWxmW2tleV1gYC4gRm9yIHNlcXVlbmNlXG4gICB0eXBlcywgdGhlIGFjY2VwdGVkIGtleXMgc2hvdWxkIGJlIGludGVnZXJzIGFuZCBzbGljZSBvYmplY3RzLlxuICAgTm90ZSB0aGF0IHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZVxuICAgY2xhc3Mgd2lzaGVzIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGVcbiAgIGBgX19nZXRpdGVtX18oKWBgIG1ldGhvZC4gSWYgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLFxuICAgYGBUeXBlRXJyb3JgYCBtYXkgYmUgcmFpc2VkOyBpZiBvZiBhIHZhbHVlIG91dHNpZGUgdGhlIHNldCBvZlxuICAgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnkgc3BlY2lhbCBpbnRlcnByZXRhdGlvbiBvZlxuICAgbmVnYXRpdmUgdmFsdWVzKSwgYGBJbmRleEVycm9yYGAgc2hvdWxkIGJlIHJhaXNlZC4gRm9yIG1hcHBpbmdcbiAgIHR5cGVzLCBpZiAqa2V5KiBpcyBtaXNzaW5nIChub3QgaW4gdGhlIGNvbnRhaW5lciksIGBgS2V5RXJyb3JgYFxuICAgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogYGBmb3JgYCBsb29wcyBleHBlY3QgdGhhdCBhbiBgYEluZGV4RXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBmb3JcbiAgICAgaWxsZWdhbCBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGVcbiAgICAgc2VxdWVuY2UuXG5cbm9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbm9iamVjdC5fX2RlbGl0ZW1fXyhzZWxmLCBrZXkpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgZGVsZXRpb24gb2YgYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgIGBgX19nZXRpdGVtX18oKWBgLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlIGBgX19nZXRpdGVtX18oKWBgXG4gICBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgYGBrZXlzKClgYC5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgYGByZXZlcnNlZCgpYGAgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlIGBgX19yZXZlcnNlZF9fKClgYCBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGVcbiAgIGBgcmV2ZXJzZWQoKWBgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZVxuICAgcHJvdG9jb2wgKGBgX19sZW5fXygpYGAgYW5kIGBgX19nZXRpdGVtX18oKWBgKS4gIE9iamVjdHMgdGhhdFxuICAgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgc2hvdWxkIG9ubHkgcHJvdmlkZVxuICAgYGBfX3JldmVyc2VkX18oKWBgIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24gdGhhdCBpc1xuICAgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5IGBgcmV2ZXJzZWQoKWBgLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoYGBpbmBgIGFuZCBgYG5vdCBpbmBgKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgYGBfX2NvbnRhaW5zX18oKWBgLCB0aGUgbWVtYmVyc2hpcFxuICAgdGVzdCBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhIGBgX19pdGVyX18oKWBgLCB0aGVuIHRoZSBvbGRcbiAgIHNlcXVlbmNlIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgYGBfX2dldGl0ZW1fXygpYGAsIHNlZSAqdGhpc1xuICAgc2VjdGlvbiBpbiB0aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoYGArYGAsIGBgLWBgLCBgYCpgYCwgYGAvYGAsIGBgLy9gYCwgYGAlYGAsXG4gICBgYGRpdm1vZCgpYGAsIGBgcG93KClgYCwgYGAqKmBgLCBgYDw8YGAsIGBgPj5gYCwgYGAmYGAsIGBgXmBgLFxuICAgYGB8YGApLiAgRm9yIGluc3RhbmNlLCB0byBldmFsdWF0ZSB0aGUgZXhwcmVzc2lvbiBgYHggKyB5YGAsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiBgYF9fYWRkX18oKWBgIG1ldGhvZCxcbiAgIGBgeC5fX2FkZF9fKHkpYGAgaXMgY2FsbGVkLiAgVGhlIGBgX19kaXZtb2RfXygpYGAgbWV0aG9kIHNob3VsZCBiZVxuICAgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgYGBfX2Zsb29yZGl2X18oKWBgIGFuZCBgYF9fbW9kX18oKWBgOyBpdFxuICAgc2hvdWxkIG5vdCBiZSByZWxhdGVkIHRvIGBgX190cnVlZGl2X18oKWBgLiAgTm90ZSB0aGF0XG4gICBgYF9fcG93X18oKWBgIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gYGBwb3coKWBgIGZ1bmN0aW9uXG4gICBpcyB0byBiZSBzdXBwb3J0ZWQuXG5cbiAgIElmIG9uZSBvZiB0aG9zZSBtZXRob2RzIGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiB3aXRoIHRoZVxuICAgc3VwcGxpZWQgYXJndW1lbnRzLCBpdCBzaG91bGQgcmV0dXJuIGBgTm90SW1wbGVtZW50ZWRgYC5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zIChgYCtgYCwgYGAtYGAsIGBgKmBgLCBgYC9gYCwgYGAvL2BgLCBgYCVgYCxcbiAgIGBgZGl2bW9kKClgYCwgYGBwb3coKWBgLCBgYCoqYGAsIGBgPDxgYCwgYGA+PmBgLCBgYCZgYCwgYGBeYGAsXG4gICBgYHxgYCkgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLiBUaGVzZSBmdW5jdGlvbnMgYXJlIG9ubHlcbiAgIGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMuIFsyXSAgRm9yXG4gICBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gYGB4IC0geWBgLCB3aGVyZSAqeSogaXMgYW5cbiAgIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBoYXMgYW4gYGBfX3JzdWJfXygpYGAgbWV0aG9kLFxuICAgYGB5Ll9fcnN1Yl9fKHgpYGAgaXMgY2FsbGVkIGlmIGBgeC5fX3N1Yl9fKHkpYGAgcmV0dXJuc1xuICAgKk5vdEltcGxlbWVudGVkKi5cblxuICAgTm90ZSB0aGF0IHRlcm5hcnkgYGBwb3coKWBgIHdpbGwgbm90IHRyeSBjYWxsaW5nIGBgX19ycG93X18oKWBgXG4gICAodGhlIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kIGZvciB0aGVcbiAgICAgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnQgb3BlcmFuZFwnc1xuICAgICBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXMgdG9cbiAgICAgb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKGBgKz1gYCwgYGAtPWBgLCBgYCo9YGAsIGBgLz1gYCwgYGAvLz1gYCwgYGAlPWBgLFxuICAgYGAqKj1gYCwgYGA8PD1gYCwgYGA+Pj1gYCwgYGAmPWBgLCBgYF49YGAsIGBgfD1gYCkuICBUaGVzZSBtZXRob2RzXG4gICBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGUgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmRcbiAgIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaCBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsXG4gICAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2QgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWRcbiAgIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIHRvXG4gICBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgYGB4ICs9IHlgYCwgd2hlcmUgKngqIGlzIGFuIGluc3RhbmNlIG9mIGFcbiAgIGNsYXNzIHRoYXQgaGFzIGFuIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9faWFkZF9fKHkpYGAgaXNcbiAgIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZG9lcyBub3QgZGVmaW5lIGFcbiAgIGBgX19pYWRkX18oKWBgIG1ldGhvZCwgYGB4Ll9fYWRkX18oeSlgYCBhbmQgYGB5Ll9fcmFkZF9fKHgpYGAgYXJlXG4gICBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mIGBgeCArIHlgYC5cblxub2JqZWN0Ll9fbmVnX18oc2VsZilcbm9iamVjdC5fX3Bvc19fKHNlbGYpXG5vYmplY3QuX19hYnNfXyhzZWxmKVxub2JqZWN0Ll9faW52ZXJ0X18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgdW5hcnkgYXJpdGhtZXRpYyBvcGVyYXRpb25zIChgYC1gYCwgYGArYGAsXG4gICBgYGFicygpYGAgYW5kIGBgfmBgKS5cblxub2JqZWN0Ll9fY29tcGxleF9fKHNlbGYpXG5vYmplY3QuX19pbnRfXyhzZWxmKVxub2JqZWN0Ll9fZmxvYXRfXyhzZWxmKVxub2JqZWN0Ll9fcm91bmRfXyhzZWxmWywgbl0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNvbXBsZXgoKWBgLFxuICAgYGBpbnQoKWBgLCBgYGZsb2F0KClgYCBhbmQgYGByb3VuZCgpYGAuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2ZcbiAgIHRoZSBhcHByb3ByaWF0ZSB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYGBvcGVyYXRvci5pbmRleCgpYGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlclxuICAgUHl0aG9uIG5lZWRzIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZVxuICAgYnVpbHQtaW4gYGBiaW4oKWBgLCBgYGhleCgpYGAgYW5kIGBgb2N0KClgYCBmdW5jdGlvbnMpLiBNdXN0IHJldHVyblxuICAgYW4gaW50ZWdlci5cblxuXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhIGBgd2l0aGBgIHN0YXRlbWVudC4gVGhlIGNvbnRleHRcbm1hbmFnZXIgaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWVcbmNvbnRleHQgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZVxubm9ybWFsbHkgaW52b2tlZCB1c2luZyB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvblxuKlRoZSB3aXRoIHN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpclxubWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgYGB3aXRoYGBcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgYGBhc2BgIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlIGBgTm9uZWBgLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCBgYF9fZXhpdF9fKClgYCBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286XG5cbiAgICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG4gICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uXG4gICAgICBgYHdpdGhgYCBzdGF0ZW1lbnQuXG5cblxuU3BlY2lhbCBtZXRob2QgbG9va3VwXG49PT09PT09PT09PT09PT09PT09PT1cblxuRm9yIGN1c3RvbSBjbGFzc2VzLCBpbXBsaWNpdCBpbnZvY2F0aW9ucyBvZiBzcGVjaWFsIG1ldGhvZHMgYXJlIG9ubHlcbmd1YXJhbnRlZWQgdG8gd29yayBjb3JyZWN0bHkgaWYgZGVmaW5lZCBvbiBhbiBvYmplY3RcJ3MgdHlwZSwgbm90IGluXG50aGUgb2JqZWN0XCdzIGluc3RhbmNlIGRpY3Rpb25hcnkuICBUaGF0IGJlaGF2aW91ciBpcyB0aGUgcmVhc29uIHdoeVxudGhlIGZvbGxvd2luZyBjb2RlIHJhaXNlcyBhbiBleGNlcHRpb246XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5fX2xlbl9fID0gbGFtYmRhOiA1XG4gICA+Pj4gbGVuKGMpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IG9iamVjdCBvZiB0eXBlIFwnQ1wnIGhhcyBubyBsZW4oKVxuXG5UaGUgcmF0aW9uYWxlIGJlaGluZCB0aGlzIGJlaGF2aW91ciBsaWVzIHdpdGggYSBudW1iZXIgb2Ygc3BlY2lhbFxubWV0aG9kcyBzdWNoIGFzIGBgX19oYXNoX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCB0aGF0IGFyZSBpbXBsZW1lbnRlZFxuYnkgYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2ZcbnRoZXNlIG1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWxcbndoZW4gaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgYGBfX2dldGF0dHJpYnV0ZV9fKClgYCBtZXRob2QgZXZlbiBvZiB0aGUgb2JqZWN0XCdzIG1ldGFjbGFzczpcblxuICAgPj4+IGNsYXNzIE1ldGEodHlwZSk6XG4gICAuLi4gICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgIHByaW50KCJNZXRhY2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgIHJldHVybiB0eXBlLl9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpXG4gICAuLi5cbiAgID4+PiBjbGFzcyBDKG9iamVjdCwgbWV0YWNsYXNzPU1ldGEpOlxuICAgLi4uICAgICBkZWYgX19sZW5fXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiAxMFxuICAgLi4uICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6XG4gICAuLi4gICAgICAgICBwcmludCgiQ2xhc3MgZ2V0YXR0cmlidXRlIGludm9rZWQiKVxuICAgLi4uICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXygpICAgICAgICAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgaW5zdGFuY2VcbiAgIENsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IHR5cGUoYykuX19sZW5fXyhjKSAgICAgICAgICAjIEV4cGxpY2l0IGxvb2t1cCB2aWEgdHlwZVxuICAgTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkXG4gICAxMFxuICAgPj4+IGxlbihjKSAgICAgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0IGxvb2t1cFxuICAgMTBcblxuQnlwYXNzaW5nIHRoZSBgYF9fZ2V0YXR0cmlidXRlX18oKWBgIG1hY2hpbmVyeSBpbiB0aGlzIGZhc2hpb25cbnByb3ZpZGVzIHNpZ25pZmljYW50IHNjb3BlIGZvciBzcGVlZCBvcHRpbWlzYXRpb25zIHdpdGhpbiB0aGVcbmludGVycHJldGVyLCBhdCB0aGUgY29zdCBvZiBzb21lIGZsZXhpYmlsaXR5IGluIHRoZSBoYW5kbGluZyBvZlxuc3BlY2lhbCBtZXRob2RzICh0aGUgc3BlY2lhbCBtZXRob2QgKm11c3QqIGJlIHNldCBvbiB0aGUgY2xhc3Mgb2JqZWN0XG5pdHNlbGYgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudGx5IGludm9rZWQgYnkgdGhlIGludGVycHJldGVyKS5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBJdCAqaXMqIHBvc3NpYmxlIGluIHNvbWUgY2FzZXMgdG8gY2hhbmdlIGFuIG9iamVjdFwncyB0eXBlLCB1bmRlclxuICAgIGNlcnRhaW4gY29udHJvbGxlZCBjb25kaXRpb25zLiBJdCBnZW5lcmFsbHkgaXNuXCd0IGEgZ29vZCBpZGVhXG4gICAgdGhvdWdoLCBzaW5jZSBpdCBjYW4gbGVhZCB0byBzb21lIHZlcnkgc3RyYW5nZSBiZWhhdmlvdXIgaWYgaXQgaXNcbiAgICBoYW5kbGVkIGluY29ycmVjdGx5LlxuXG5bMl0gRm9yIG9wZXJhbmRzIG9mIHRoZSBzYW1lIHR5cGUsIGl0IGlzIGFzc3VtZWQgdGhhdCBpZiB0aGUgbm9uLVxuICAgIHJlZmxlY3RlZCBtZXRob2QgKHN1Y2ggYXMgYGBfX2FkZF9fKClgYCkgZmFpbHMgdGhlIG9wZXJhdGlvbiBpc1xuICAgIG5vdCBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5nIG9iamVjdHMgc3VwcG9ydCB0aGUgbWV0aG9kcyBsaXN0ZWQgYmVsb3cuXG5cbkluIGFkZGl0aW9uLCBQeXRob25cJ3Mgc3RyaW5ncyBzdXBwb3J0IHRoZSBzZXF1ZW5jZSB0eXBlIG1ldGhvZHNcbmRlc2NyaWJlZCBpbiB0aGUgKlNlcXVlbmNlIFR5cGVzIC0tLSBzdHIsIGJ5dGVzLCBieXRlYXJyYXksIGxpc3QsXG50dXBsZSwgcmFuZ2UqIHNlY3Rpb24uIFRvIG91dHB1dCBmb3JtYXR0ZWQgc3RyaW5ncywgc2VlIHRoZSAqU3RyaW5nXG5Gb3JtYXR0aW5nKiBzZWN0aW9uLiBBbHNvLCBzZWUgdGhlIGBgcmVgYCBtb2R1bGUgZm9yIHN0cmluZyBmdW5jdGlvbnNcbmJhc2VkIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyBgYFwndXRmLThcJ2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyBgYFwnc3RyaWN0XCdgYCxcbiAgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSBgYFVuaWNvZGVFcnJvcmBgLiBPdGhlclxuICAgcG9zc2libGUgdmFsdWVzIGFyZSBgYFwnaWdub3JlXCdgYCwgYGBcJ3JlcGxhY2VcJ2BgLFxuICAgYGBcJ3htbGNoYXJyZWZyZXBsYWNlXCdgYCwgYGBcJ2JhY2tzbGFzaHJlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZVxuICAgcmVnaXN0ZXJlZCB2aWEgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZVxuICAgQ2xhc3NlcyouIEZvciBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmRcbiAgIEVuY29kaW5ncyouXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzIGFkZGVkLlxuXG5zdHIuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuIGBgRmFsc2VgYC4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2ZcbiAgIHN1ZmZpeGVzIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdFxuICAgdGhhdCBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXRcbiAgIHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyhbdGFic2l6ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUaGUgY29sdW1uIG51bWJlciBpcyByZXNldCB0byB6ZXJvIGFmdGVyIGVhY2hcbiAgIG5ld2xpbmUgb2NjdXJyaW5nIGluIHRoZSBzdHJpbmcuIElmICp0YWJzaXplKiBpcyBub3QgZ2l2ZW4sIGEgdGFiXG4gICBzaXplIG9mIGBgOGBgIGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4gIFRoaXMgZG9lc25cJ3QgdW5kZXJzdGFuZCBvdGhlclxuICAgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgb3IgZXNjYXBlIHNlcXVlbmNlcy5cblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIGlmICpzdWIqIGlzIG5vdCBmb3VuZC5cblxuc3RyLmZvcm1hdCgqYXJncywgKiprd2FyZ3MpXG5cbiAgIFBlcmZvcm0gYSBzdHJpbmcgZm9ybWF0dGluZyBvcGVyYXRpb24uICBUaGUgc3RyaW5nIG9uIHdoaWNoIHRoaXNcbiAgIG1ldGhvZCBpcyBjYWxsZWQgY2FuIGNvbnRhaW4gbGl0ZXJhbCB0ZXh0IG9yIHJlcGxhY2VtZW50IGZpZWxkc1xuICAgZGVsaW1pdGVkIGJ5IGJyYWNlcyBgYHt9YGAuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byBgYHN0ci5mb3JtYXQoKiptYXBwaW5nKWBgLCBleGNlcHQgdGhhdCBgYG1hcHBpbmdgYCBpc1xuICAgdXNlZCBkaXJlY3RseSBhbmQgbm90IGNvcGllZCB0byBhIGBgZGljdGBgIC4gIFRoaXMgaXMgdXNlZnVsIGlmIGZvclxuICAgZXhhbXBsZSBgYG1hcHBpbmdgYCBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlIGBgZmluZCgpYGAsIGJ1dCByYWlzZSBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgbm90XG4gICBmb3VuZC5cblxuc3RyLmlzYWxudW0oKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYW51bWVyaWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBIGNoYXJhY3RlclxuICAgYGBjYGAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgYGBUcnVlYGA6XG4gICBgYGMuaXNhbHBoYSgpYGAsIGBgYy5pc2RlY2ltYWwoKWBgLCBgYGMuaXNkaWdpdCgpYGAsIG9yXG4gICBgYGMuaXNudW1lcmljKClgYC5cblxuc3RyLmlzYWxwaGEoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBhbHBoYWJldGljIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgQWxwaGFiZXRpY1xuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIkxldHRlciIsIGkuZS4sIHRob3NlIHdpdGggZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eVxuICAgYmVpbmcgb25lIG9mICJMbSIsICJMdCIsICJMdSIsICJMbCIsIG9yICJMbyIuICBOb3RlIHRoYXQgdGhpcyBpc1xuICAgZGlmZmVyZW50IGZyb20gdGhlICJBbHBoYWJldGljIiBwcm9wZXJ0eSBkZWZpbmVkIGluIHRoZSBVbmljb2RlXG4gICBTdGFuZGFyZC5cblxuc3RyLmlzZGVjaW1hbCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRlY2ltYWwgY2hhcmFjdGVyc1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gRGVjaW1hbFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2UgZnJvbSBnZW5lcmFsIGNhdGVnb3J5ICJOZCIuIFRoaXMgY2F0ZWdvcnlcbiAgIGluY2x1ZGVzIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IHRoYXQgY2FuIGJlIHVzZWRcbiAgIHRvIGZvcm0gZGVjaW1hbC1yYWRpeCBudW1iZXJzLCBlLmcuIFUrMDY2MCwgQVJBQklDLUlORElDIERJR0lUXG4gICBaRVJPLlxuXG5zdHIuaXNkaWdpdCgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGRpZ2l0cyBhbmQgdGhlcmUgaXNcbiAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIERpZ2l0cyBpbmNsdWRlIGRlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYW5kIGRpZ2l0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyB0aGVcbiAgIGNvbXBhdGliaWxpdHkgc3VwZXJzY3JpcHQgZGlnaXRzLiAgRm9ybWFsbHksIGEgZGlnaXQgaXMgYSBjaGFyYWN0ZXJcbiAgIHRoYXQgaGFzIHRoZSBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQgb3JcbiAgIE51bWVyaWNfVHlwZT1EZWNpbWFsLlxuXG5zdHIuaXNpZGVudGlmaWVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHZhbGlkIGlkZW50aWZpZXIgYWNjb3JkaW5nIHRvIHRoZVxuICAgbGFuZ3VhZ2UgZGVmaW5pdGlvbiwgc2VjdGlvbiAqSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzKi5cblxuc3RyLmlzbG93ZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBsb3dlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBDYXNlZFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5IGJlaW5nIG9uZSBvZlxuICAgIkx1IiwgIkxsIiwgb3IgIkx0IiBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbFxuICAgY2F0ZWdvcnkgcHJvcGVydHkgIkxsIi5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuIGBgcmVwcigpYGAgaXNcbiAgIGludm9rZWQgb24gYSBzdHJpbmcuICBJdCBoYXMgbm8gYmVhcmluZyBvbiB0aGUgaGFuZGxpbmcgb2Ygc3RyaW5nc1xuICAgd3JpdHRlbiB0byBgYHN5cy5zdGRvdXRgYCBvciBgYHN5cy5zdGRlcnJgYC4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgdXBwZXJjYXNlIGFuZFxuICAgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNhc2VkIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBDYXNlZFxuICAgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5IGJlaW5nIG9uZSBvZlxuICAgIkx1IiwgIkxsIiwgb3IgIkx0IiBhbmQgdXBwZXJjYXNlIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggZ2VuZXJhbFxuICAgY2F0ZWdvcnkgcHJvcGVydHkgIkx1Ii5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgYGBUeXBlRXJyb3JgYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmVcbiAgIGFueSBub24tc3RyaW5nIHZhbHVlcyBpbiAqc2VxKiwgaW5jbHVkaW5nIGBgYnl0ZXNgYCBvYmplY3RzLiAgVGhlXG4gICBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuc3RyLmxvd2VyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbnN0ci5sc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICBgYHN0ci50cmFuc2xhdGUoKWBgLlxuXG4gICBJZiB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIGRpY3Rpb25hcnkgbWFwcGluZ1xuICAgVW5pY29kZSBvcmRpbmFscyAoaW50ZWdlcnMpIG9yIGNoYXJhY3RlcnMgKHN0cmluZ3Mgb2YgbGVuZ3RoIDEpIHRvXG4gICBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIChvZiBhcmJpdHJhcnkgbGVuZ3Rocykgb3IgTm9uZS5cbiAgIENoYXJhY3RlciBrZXlzIHdpbGwgdGhlbiBiZSBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuXG5cbiAgIElmIHRoZXJlIGFyZSB0d28gYXJndW1lbnRzLCB0aGV5IG11c3QgYmUgc3RyaW5ncyBvZiBlcXVhbCBsZW5ndGgsXG4gICBhbmQgaW4gdGhlIHJlc3VsdGluZyBkaWN0aW9uYXJ5LCBlYWNoIGNoYXJhY3RlciBpbiB4IHdpbGwgYmUgbWFwcGVkXG4gICB0byB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuICBJZiB0aGVyZSBpcyBhIHRoaXJkXG4gICBhcmd1bWVudCwgaXQgbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0b1xuICAgTm9uZSBpbiB0aGUgcmVzdWx0LlxuXG5zdHIucGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGl0c2VsZiwgZm9sbG93ZWQgYnlcbiAgIHR3byBlbXB0eSBzdHJpbmdzLlxuXG5zdHIucmVwbGFjZShvbGQsIG5ld1ssIGNvdW50XSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqb2xkKlxuICAgcmVwbGFjZWQgYnkgKm5ldyouICBJZiB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmNvdW50KiBpcyBnaXZlbiwgb25seVxuICAgdGhlIGZpcnN0ICpjb3VudCogb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLlxuXG5zdHIucmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuIGBgLTFgYCBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGByZmluZCgpYGAgYnV0IHJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuIHRoZSBzdWJzdHJpbmcgKnN1YipcbiAgIGlzIG5vdCBmb3VuZC5cblxuc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouXG4gICBQYWRkaW5nIGlzIGRvbmUgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGFcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhblxuICAgYGBsZW4ocylgYC5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCogc3BsaXRzXG4gICBhcmUgZG9uZSwgdGhlICpyaWdodG1vc3QqIG9uZXMuICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yXG4gICBgYE5vbmVgYCwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvclxuICAgc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCBgYHJzcGxpdCgpYGAgYmVoYXZlcyBsaWtlIGBgc3BsaXQoKWBgXG4gICB3aGljaCBpcyBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LlxuXG5zdHIucnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICBcJyAgIHNwYWNpb3VzXCdcbiAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYFxuICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGxpbWl0XG4gICBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxLCwyXCcuc3BsaXQoXCcsXCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCdcJywgXCcyXCddYGApLiAgVGhlICpzZXAqXG4gICBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgIGBgXCcxPD4yPD4zXCcuc3BsaXQoXCc8PlwnKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCkuIFNwbGl0dGluZ1xuICAgYW4gZW1wdHkgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXCdcJ11gYC5cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgYGBOb25lYGAgc2VwYXJhdG9yIHJldHVybnNcbiAgIGBgW11gYC5cblxuICAgRm9yIGV4YW1wbGUsIGBgXCcgMSAgMiAgIDMgIFwnLnNwbGl0KClgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzJcJywgXCczXCddYGAsXG4gICBhbmQgYGBcJyAgMSAgMiAgIDMgIFwnLnNwbGl0KE5vbmUsIDEpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyICAgMyAgXCddYGAuXG5cbnN0ci5zcGxpdGxpbmVzKFtrZWVwZW5kc10pXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIHRoZSBzdHJpbmcsIGJyZWFraW5nIGF0IGxpbmVcbiAgIGJvdW5kYXJpZXMuICBMaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdFxuICAgdW5sZXNzICprZWVwZW5kcyogaXMgZ2l2ZW4gYW5kIHRydWUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2VcbiAgIHJldHVybiBgYEZhbHNlYGAuICpwcmVmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2YgcHJlZml4ZXMgdG8gbG9va1xuICAgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5zdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0aGUgbGVhZGluZyBhbmQgdHJhaWxpbmdcbiAgIGNoYXJhY3RlcnMgcmVtb3ZlZC4gVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGVcbiAgIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlbW92ZWQuIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKlxuICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0c1xuICAgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgICAgICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzKVxuXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciBgYE5vbmVgYC4gIFVubWFwcGVkXG4gICBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlXG4gICBkZWxldGVkLlxuXG4gICBZb3UgY2FuIHVzZSBgYHN0ci5tYWtldHJhbnMoKWBgIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tIGNoYXJhY3RlclxuICAgICBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSBgYGNvZGVjc2BgIG1vZHVsZSAoc2VlXG4gICAgIGBgZW5jb2RpbmdzLmNwMTI1MWBgIGZvciBhbiBleGFtcGxlKS5cblxuc3RyLnVwcGVyKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuXG5cbnN0ci56ZmlsbCh3aWR0aClcblxuICAgUmV0dXJuIHRoZSBudW1lcmljIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIHplcm9zIGluIGEgc3RyaW5nIG9mXG4gICBsZW5ndGggKndpZHRoKi4gIEEgc2lnbiBwcmVmaXggaXMgaGFuZGxlZCBjb3JyZWN0bHkuICBUaGUgb3JpZ2luYWxcbiAgIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBgYGxlbihzKWBgLlxuJywKKyAnc3RyaW5ncyc6ICdcblN0cmluZyBhbmQgQnl0ZXMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgIlIiXG4gICBzaG9ydHN0cmluZyAgICAgOjo9ICJcJyIgc2hvcnRzdHJpbmdpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRzdHJpbmdpdGVtKiBcJyJcJ1xuICAgbG9uZ3N0cmluZyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nc3RyaW5naXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIHN0cmluZ2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IHNvdXJjZSBjaGFyYWN0ZXI+XG5cbiAgIGJ5dGVzbGl0ZXJhbCAgIDo6PSBieXRlc3ByZWZpeChzaG9ydGJ5dGVzIHwgbG9uZ2J5dGVzKVxuICAgYnl0ZXNwcmVmaXggICAgOjo9ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiJcbiAgIHNob3J0Ynl0ZXMgICAgIDo6PSAiXCciIHNob3J0Ynl0ZXNpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRieXRlc2l0ZW0qIFwnIlwnXG4gICBsb25nYnl0ZXMgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ2J5dGVzaXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdieXRlc2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0Ynl0ZXNpdGVtIDo6PSBzaG9ydGJ5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBsb25nYnl0ZXNpdGVtICA6Oj0gbG9uZ2J5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBzaG9ydGJ5dGVzY2hhciA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nYnl0ZXNjaGFyICA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBieXRlc2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IEFTQ0lJIGNoYXJhY3Rlcj5cblxuT25lIHN5bnRhY3RpYyByZXN0cmljdGlvbiBub3QgaW5kaWNhdGVkIGJ5IHRoZXNlIHByb2R1Y3Rpb25zIGlzIHRoYXRcbndoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWQgYmV0d2VlbiB0aGUgYGBzdHJpbmdwcmVmaXhgYCBvclxuYGBieXRlc3ByZWZpeGBgIGFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0XG5pcyBkZWZpbmVkIGJ5IHRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmdcbmRlY2xhcmF0aW9uIGlzIGdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nXG5kZWNsYXJhdGlvbnMqLlxuXG5JbiBwbGFpbiBFbmdsaXNoOiBCb3RoIHR5cGVzIG9mIGxpdGVyYWxzIGNhbiBiZSBlbmNsb3NlZCBpbiBtYXRjaGluZ1xuc2luZ2xlIHF1b3RlcyAoYGBcJ2BgKSBvciBkb3VibGUgcXVvdGVzIChgYCJgYCkuICBUaGV5IGNhbiBhbHNvIGJlXG5lbmNsb3NlZCBpbiBtYXRjaGluZyBncm91cHMgb2YgdGhyZWUgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHRoZXNlXG5hcmUgZ2VuZXJhbGx5IHJlZmVycmVkIHRvIGFzICp0cmlwbGUtcXVvdGVkIHN0cmluZ3MqKS4gIFRoZSBiYWNrc2xhc2hcbihgYFxcYGApIGNoYXJhY3RlciBpcyB1c2VkIHRvIGVzY2FwZSBjaGFyYWN0ZXJzIHRoYXQgb3RoZXJ3aXNlIGhhdmUgYVxuc3BlY2lhbCBtZWFuaW5nLCBzdWNoIGFzIG5ld2xpbmUsIGJhY2tzbGFzaCBpdHNlbGYsIG9yIHRoZSBxdW90ZVxuY2hhcmFjdGVyLlxuXG5CeXRlcyBsaXRlcmFscyBhcmUgYWx3YXlzIHByZWZpeGVkIHdpdGggYGBcJ2JcJ2BgIG9yIGBgXCdCXCdgYDsgdGhleVxucHJvZHVjZSBhbiBpbnN0YW5jZSBvZiB0aGUgYGBieXRlc2BgIHR5cGUgaW5zdGVhZCBvZiB0aGUgYGBzdHJgYCB0eXBlLlxuVGhleSBtYXkgb25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnM7IGJ5dGVzIHdpdGggYSBudW1lcmljIHZhbHVlIG9mXG4xMjggb3IgZ3JlYXRlciBtdXN0IGJlIGV4cHJlc3NlZCB3aXRoIGVzY2FwZXMuXG5cbkJvdGggc3RyaW5nIGFuZCBieXRlcyBsaXRlcmFscyBtYXkgb3B0aW9uYWxseSBiZSBwcmVmaXhlZCB3aXRoIGFcbmxldHRlciBgYFwnclwnYGAgb3IgYGBcJ1JcJ2BgOyBzdWNoIHN0cmluZ3MgYXJlIGNhbGxlZCAqcmF3IHN0cmluZ3MqIGFuZFxudHJlYXQgYmFja3NsYXNoZXMgYXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLiAgQXMgYSByZXN1bHQsIGluIHN0cmluZ1xubGl0ZXJhbHMsIGBgXCdcXFVcJ2BgIGFuZCBgYFwnXFx1XCdgYCBlc2NhcGVzIGluIHJhdyBzdHJpbmdzIGFyZSBub3QgdHJlYXRlZFxuc3BlY2lhbGx5LlxuXG5JbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbnN0cmluZywgaS5lLiBlaXRoZXIgYGBcJ2BgIG9yIGBgImBgLilcblxuVW5sZXNzIGFuIGBgXCdyXCdgYCBvciBgYFwnUlwnYGAgcHJlZml4IGlzIHByZXNlbnQsIGVzY2FwZSBzZXF1ZW5jZXMgaW5cbnN0cmluZ3MgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBydWxlcyBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnlcblN0YW5kYXJkIEMuICBUaGUgcmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFxcbmV3bGluZWBgICAgICAgfCBCYWNrc2xhc2ggYW5kIG5ld2xpbmUgaWdub3JlZCAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFxcYGAgICAgICAgICAgICB8IEJhY2tzbGFzaCAoYGBcXGBgKSAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXFwnYGAgICAgICAgICAgICB8IFNpbmdsZSBxdW90ZSAoYGBcJ2BgKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXCJgYCAgICAgICAgICAgIHwgRG91YmxlIHF1b3RlIChgYCJgYCkgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxhYGAgICAgICAgICAgICB8IEFTQ0lJIEJlbGwgKEJFTCkgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcYmBgICAgICAgICAgICAgfCBBU0NJSSBCYWNrc3BhY2UgKEJTKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXGZgYCAgICAgICAgICAgIHwgQVNDSUkgRm9ybWZlZWQgKEZGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFxuYGAgICAgICAgICAgICB8IEFTQ0lJIExpbmVmZWVkIChMRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxccmBgICAgICAgICAgICAgfCBBU0NJSSBDYXJyaWFnZSBSZXR1cm4gKENSKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHRgYCAgICAgICAgICAgIHwgQVNDSUkgSG9yaXpvbnRhbCBUYWIgKFRBQikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx2YGAgICAgICAgICAgICB8IEFTQ0lJIFZlcnRpY2FsIFRhYiAoVlQpICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcb29vYGAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBvY3RhbCB2YWx1ZSAqb29vKiAgfCAoMSwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcXHhoaGBgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggaGV4IHZhbHVlICpoaCogICAgIHwgKDIsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbkVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZyBsaXRlcmFscyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgYGBcXE57bmFtZX1gYCAgICAgIHwgQ2hhcmFjdGVyIG5hbWVkICpuYW1lKiBpbiB0aGUgICAgIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgVW5pY29kZSBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXFx1eHh4eGBgICAgICAgICB8IENoYXJhY3RlciB3aXRoIDE2LWJpdCBoZXggdmFsdWUgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFxcVXh4eHh4eHh4YGAgICAgfCBDaGFyYWN0ZXIgd2l0aCAzMi1iaXQgaGV4IHZhbHVlICAgfCAoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eHh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIEFzIGluIFN0YW5kYXJkIEMsIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUgYWNjZXB0ZWQuXG5cbjIuIFVubGlrZSBpbiBTdGFuZGFyZCBDLCBleGFjdGx5IHR3byBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuMy4gSW4gYSBieXRlcyBsaXRlcmFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgZXNjYXBlcyBkZW5vdGUgdGhlIGJ5dGVcbiAgIHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJbiBhIHN0cmluZyBsaXRlcmFsLCB0aGVzZSBlc2NhcGVzIGRlbm90ZSBhXG4gICBVbmljb2RlIGNoYXJhY3RlciB3aXRoIHRoZSBnaXZlbiB2YWx1ZS5cblxuNC4gSW5kaXZpZHVhbCBjb2RlIHVuaXRzIHdoaWNoIGZvcm0gcGFydHMgb2YgYSBzdXJyb2dhdGUgcGFpciBjYW4gYmVcbiAgIGVuY29kZWQgdXNpbmcgdGhpcyBlc2NhcGUgc2VxdWVuY2UuICBFeGFjdGx5IGZvdXIgaGV4IGRpZ2l0cyBhcmVcbiAgIHJlcXVpcmVkLlxuXG41LiBBbnkgVW5pY29kZSBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdGhpcyB3YXksIGJ1dCBjaGFyYWN0ZXJzXG4gICBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCkgd2lsbCBiZSBlbmNvZGVkIHVzaW5nIGFcbiAgIHN1cnJvZ2F0ZSBwYWlyIGlmIFB5dGhvbiBpcyBjb21waWxlZCB0byB1c2UgMTYtYml0IGNvZGUgdW5pdHMgKHRoZVxuICAgZGVmYXVsdCkuICBFeGFjdGx5IGVpZ2h0IGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgc3RyaW5nKi4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZ1xubGl0ZXJhbHMgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXNcbmxpdGVyYWxzLlxuXG5FdmVuIGluIGEgcmF3IHN0cmluZywgc3RyaW5nIHF1b3RlcyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLFxuYnV0IHRoZSBiYWNrc2xhc2ggcmVtYWlucyBpbiB0aGUgc3RyaW5nOyBmb3IgZXhhbXBsZSwgYGByIlxcIiJgYCBpcyBhXG52YWxpZCBzdHJpbmcgbGl0ZXJhbCBjb25zaXN0aW5nIG9mIHR3byBjaGFyYWN0ZXJzOiBhIGJhY2tzbGFzaCBhbmQgYVxuZG91YmxlIHF1b3RlOyBgYHIiXFwiYGAgaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXdcbnN0cmluZyBjYW5ub3QgZW5kIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYVxucmF3IHN0cmluZyBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCogKHNpbmNlIHRoZSBiYWNrc2xhc2hcbndvdWxkIGVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28gdGhhdCBhIHNpbmdsZVxuYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28gY2hhcmFjdGVyc1xuYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKICAnc3Vic2NyaXB0aW9ucyc6ICdcblN1YnNjcmlwdGlvbnNcbioqKioqKioqKioqKipcblxuQSBzdWJzY3JpcHRpb24gc2VsZWN0cyBhbiBpdGVtIG9mIGEgc2VxdWVuY2UgKHN0cmluZywgdHVwbGUgb3IgbGlzdClcbm9yIG1hcHBpbmcgKGRpY3Rpb25hcnkpIG9iamVjdDpcblxuICAgc3Vic2NyaXB0aW9uIDo6PSBwcmltYXJ5ICJbIiBleHByZXNzaW9uX2xpc3QgIl0iXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IHRoYXQgc3VwcG9ydHMgc3Vic2NyaXB0aW9uLFxuZS5nLiBhIGxpc3Qgb3IgZGljdGlvbmFyeS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBzdXBwb3J0XG5zdWJzY3JpcHRpb24gYnkgZGVmaW5pbmcgYSBgYF9fZ2V0aXRlbV9fKClgYCBtZXRob2QuXG5cbkZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0XG5zdWJzY3JpcHRpb246XG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0b1xuYW4gaW50ZWdlciBvciBhIHNsaWNlIChhcyBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uKS5cblxuVGhlIGZvcm1hbCBzeW50YXggbWFrZXMgbm8gc3BlY2lhbCBwcm92aXNpb24gZm9yIG5lZ2F0aXZlIGluZGljZXMgaW5cbnNlcXVlbmNlczsgaG93ZXZlciwgYnVpbHQtaW4gc2VxdWVuY2VzIGFsbCBwcm92aWRlIGEgYGBfX2dldGl0ZW1fXygpYGBcbm1ldGhvZCB0aGF0IGludGVycHJldHMgbmVnYXRpdmUgaW5kaWNlcyBieSBhZGRpbmcgdGhlIGxlbmd0aCBvZiB0aGVcbnNlcXVlbmNlIHRvIHRoZSBpbmRleCAoc28gdGhhdCBgYHhbLTFdYGAgc2VsZWN0cyB0aGUgbGFzdCBpdGVtIG9mXG5gYHhgYCkuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIGxlc3MgdGhhblxudGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgc2VxdWVuY2UsIGFuZCB0aGUgc3Vic2NyaXB0aW9uIHNlbGVjdHMgdGhlXG5pdGVtIHdob3NlIGluZGV4IGlzIHRoYXQgdmFsdWUgKGNvdW50aW5nIGZyb20gemVybykuIFNpbmNlIHRoZSBzdXBwb3J0XG5mb3IgbmVnYXRpdmUgaW5kaWNlcyBhbmQgc2xpY2luZyBvY2N1cnMgaW4gdGhlIG9iamVjdFwnc1xuYGBfX2dldGl0ZW1fXygpYGAgbWV0aG9kLCBzdWJjbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgd2lsbCBuZWVkXG50byBleHBsaWNpdGx5IGFkZCB0aGF0IHN1cHBvcnQuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKICAndHJ1dGgnOiAiXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gYGBpZmBgIG9yXG5gYHdoaWxlYGAgY29uZGl0aW9uIG9yIGFzIG9wZXJhbmQgb2YgdGhlIEJvb2xlYW4gb3BlcmF0aW9ucyBiZWxvdy4gVGhlXG5mb2xsb3dpbmcgdmFsdWVzIGFyZSBjb25zaWRlcmVkIGZhbHNlOlxuXG4qIGBgTm9uZWBgXG5cbiogYGBGYWxzZWBgXG5cbiogemVybyBvZiBhbnkgbnVtZXJpYyB0eXBlLCBmb3IgZXhhbXBsZSwgYGAwYGAsIGBgMC4wYGAsIGBgMGpgYC5cblxuKiBhbnkgZW1wdHkgc2VxdWVuY2UsIGZvciBleGFtcGxlLCBgYCcnYGAsIGBgKClgYCwgYGBbXWBgLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgYGB7fWBgLlxuXG4qIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcywgaWYgdGhlIGNsYXNzIGRlZmluZXMgYVxuICBgYF9fYm9vbF9fKClgYCBvciBgYF9fbGVuX18oKWBgIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zIHRoZVxuICBpbnRlZ2VyIHplcm8gb3IgYGBib29sYGAgdmFsdWUgYGBGYWxzZWBgLiBbMV1cblxuQWxsIG90aGVyIHZhbHVlcyBhcmUgY29uc2lkZXJlZCB0cnVlIC0tLSBzbyBvYmplY3RzIG9mIG1hbnkgdHlwZXMgYXJlXG5hbHdheXMgdHJ1ZS5cblxuT3BlcmF0aW9ucyBhbmQgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgaGF2ZSBhIEJvb2xlYW4gcmVzdWx0IGFsd2F5c1xucmV0dXJuIGBgMGBgIG9yIGBgRmFsc2VgYCBmb3IgZmFsc2UgYW5kIGBgMWBgIG9yIGBgVHJ1ZWBgIGZvciB0cnVlLFxudW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zXG5gYG9yYGAgYW5kIGBgYW5kYGAgYWx3YXlzIHJldHVybiBvbmUgb2YgdGhlaXIgb3BlcmFuZHMuKVxuIiwKICAndHJ5JzogJ1xuVGhlIGBgdHJ5YGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGBgdHJ5YGAgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSBgYGV4Y2VwdGBgIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlblxubm8gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgYGB0cnlgYCBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSBgYHRyeWBgIHN1aXRlLCBhIHNlYXJjaCBmb3JcbmFuIGV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0XG5jbGF1c2VzIGluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW5cbmV4cHJlc3Npb24tbGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXNcbmFueSBleGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXRcbmV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlXG5yZXN1bHRpbmcgb2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXNcbmNvbXBhdGlibGUgd2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGVcbmV4Y2VwdGlvbiBvYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZVxuZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlIGBgdHJ5YGAgc3RhdGVtZW50XG5yYWlzZWQgdGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgYGBhc2BgIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLFxuaWYgcHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyBgYGFzIHRhcmdldGBgLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSBgYHN5c2BgIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbmBgc3lzLmV4Y19pbmZvKClgYC4gYGBzeXMuZXhjX2luZm8oKWBgIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2ZcbnRoZSBleGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdFxuKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW5cbnRoZSBwcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICBgYHN5cy5leGNfaW5mbygpYGAgdmFsdWVzXG5hcmUgcmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsIGBgZWxzZWBgIGNsYXVzZSBpcyBleGVjdXRlZCBpZiBhbmQgd2hlbiBjb250cm9sIGZsb3dzIG9mZlxudGhlIGVuZCBvZiB0aGUgYGB0cnlgYCBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSBgYGVsc2VgYCBjbGF1c2VcbmFyZSBub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nIGBgZXhjZXB0YGAgY2xhdXNlcy5cblxuSWYgYGBmaW5hbGx5YGAgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZVxuYGB0cnlgYCBjbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgYGBleGNlcHRgYCBhbmQgYGBlbHNlYGBcbmNsYXVzZXMuICBJZiBhbiBleGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90XG5oYW5kbGVkLCB0aGUgZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgYGBmaW5hbGx5YGAgY2xhdXNlIGlzXG5leGVjdXRlZC4gIElmIHRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uLCBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZFxub2YgdGhlIGBgZmluYWxseWBgIGNsYXVzZS4gSWYgdGhlIGBgZmluYWxseWBgIGNsYXVzZSByYWlzZXMgYW5vdGhlclxuZXhjZXB0aW9uIG9yIGV4ZWN1dGVzIGEgYGByZXR1cm5gYCBvciBgYGJyZWFrYGAgc3RhdGVtZW50LCB0aGUgc2F2ZWRcbmV4Y2VwdGlvbiBpcyBsb3N0LiAgVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZVxucHJvZ3JhbSBkdXJpbmcgZXhlY3V0aW9uIG9mIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuXG5cbldoZW4gYSBgYHJldHVybmBgLCBgYGJyZWFrYGAgb3IgYGBjb250aW51ZWBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpblxudGhlIGBgdHJ5YGAgc3VpdGUgb2YgYSBgYHRyeWBgLi4uYGBmaW5hbGx5YGAgc3RhdGVtZW50LCB0aGVcbmBgZmluYWxseWBgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSBgYGNvbnRpbnVlYGBcbnN0YXRlbWVudCBpcyBpbGxlZ2FsIGluIHRoZSBgYGZpbmFsbHlgYCBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGFcbnByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmVcbmxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgYGByYWlzZWBgIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG4nLAogICd0eXBlcyc6ICdcblRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeVxuKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkJlbG93IGlzIGEgbGlzdCBvZiB0aGUgdHlwZXMgdGhhdCBhcmUgYnVpbHQgaW50byBQeXRob24uICBFeHRlbnNpb25cbm1vZHVsZXMgKHdyaXR0ZW4gaW4gQywgSmF2YSwgb3Igb3RoZXIgbGFuZ3VhZ2VzLCBkZXBlbmRpbmcgb24gdGhlXG5pbXBsZW1lbnRhdGlvbikgY2FuIGRlZmluZSBhZGRpdGlvbmFsIHR5cGVzLiAgRnV0dXJlIHZlcnNpb25zIG9mXG5QeXRob24gbWF5IGFkZCB0eXBlcyB0byB0aGUgdHlwZSBoaWVyYXJjaHkgKGUuZy4sIHJhdGlvbmFsIG51bWJlcnMsXG5lZmZpY2llbnRseSBzdG9yZWQgYXJyYXlzIG9mIGludGVnZXJzLCBldGMuKSwgYWx0aG91Z2ggc3VjaCBhZGRpdGlvbnNcbndpbGwgb2Z0ZW4gYmUgcHJvdmlkZWQgdmlhIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGluc3RlYWQuXG5cblNvbWUgb2YgdGhlIHR5cGUgZGVzY3JpcHRpb25zIGJlbG93IGNvbnRhaW4gYSBwYXJhZ3JhcGggbGlzdGluZ1xuXCdzcGVjaWFsIGF0dHJpYnV0ZXMuXCcgIFRoZXNlIGFyZSBhdHRyaWJ1dGVzIHRoYXQgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlXG5pbXBsZW1lbnRhdGlvbiBhbmQgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZ2VuZXJhbCB1c2UuICBUaGVpciBkZWZpbml0aW9uXG5tYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cbk5vbmVcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYnVpbHQtaW4gbmFtZSBgYE5vbmVgYC5cbiAgIEl0IGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucyxcbiAgIGUuZy4sIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICBgYE5vdEltcGxlbWVudGVkYGAuIE51bWVyaWMgbWV0aG9kcyBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5XG4gICByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGV5IGRvIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgdGhlXG4gICBvcGVyYW5kcyBwcm92aWRlZC4gIChUaGUgaW50ZXJwcmV0ZXIgd2lsbCB0aGVuIHRyeSB0aGUgcmVmbGVjdGVkXG4gICBvcGVyYXRpb24sIG9yIHNvbWUgb3RoZXIgZmFsbGJhY2ssIGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0b3IuKSAgSXRzXG4gICB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5FbGxpcHNpc1xuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsaXRlcmFsIGBgLi4uYGAgb3IgdGhlXG4gICBidWlsdC1pbiBuYW1lIGBgRWxsaXBzaXNgYC4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG5gYG51bWJlcnMuTnVtYmVyYGBcbiAgIFRoZXNlIGFyZSBjcmVhdGVkIGJ5IG51bWVyaWMgbGl0ZXJhbHMgYW5kIHJldHVybmVkIGFzIHJlc3VsdHMgYnlcbiAgIGFyaXRobWV0aWMgb3BlcmF0b3JzIGFuZCBhcml0aG1ldGljIGJ1aWx0LWluIGZ1bmN0aW9ucy4gIE51bWVyaWNcbiAgIG9iamVjdHMgYXJlIGltbXV0YWJsZTsgb25jZSBjcmVhdGVkIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMuXG4gICBQeXRob24gbnVtYmVycyBhcmUgb2YgY291cnNlIHN0cm9uZ2x5IHJlbGF0ZWQgdG8gbWF0aGVtYXRpY2FsXG4gICBudW1iZXJzLCBidXQgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgb2YgbnVtZXJpY2FsIHJlcHJlc2VudGF0aW9uXG4gICBpbiBjb21wdXRlcnMuXG5cbiAgIFB5dGhvbiBkaXN0aW5ndWlzaGVzIGJldHdlZW4gaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIGFuZFxuICAgY29tcGxleCBudW1iZXJzOlxuXG4gICBgYG51bWJlcnMuSW50ZWdyYWxgYFxuICAgICAgVGhlc2UgcmVwcmVzZW50IGVsZW1lbnRzIGZyb20gdGhlIG1hdGhlbWF0aWNhbCBzZXQgb2YgaW50ZWdlcnNcbiAgICAgIChwb3NpdGl2ZSBhbmQgbmVnYXRpdmUpLlxuXG4gICAgICBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGludGVnZXJzOlxuXG4gICAgICBJbnRlZ2VycyAoYGBpbnRgYClcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zIChgYGJvb2xgYClcbiAgICAgICAgIFRoZXNlIHJlcHJlc2VudCB0aGUgdHJ1dGggdmFsdWVzIEZhbHNlIGFuZCBUcnVlLiAgVGhlIHR3b1xuICAgICAgICAgb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZSBhcmUgdGhlIG9ubHlcbiAgICAgICAgIEJvb2xlYW4gb2JqZWN0cy4gVGhlIEJvb2xlYW4gdHlwZSBpcyBhIHN1YnR5cGUgb2YgdGhlIGludGVnZXJcbiAgICAgICAgIHR5cGUsIGFuZCBCb29sZWFuIHZhbHVlcyBiZWhhdmUgbGlrZSB0aGUgdmFsdWVzIDAgYW5kIDEsXG4gICAgICAgICByZXNwZWN0aXZlbHksIGluIGFsbW9zdCBhbGwgY29udGV4dHMsIHRoZSBleGNlcHRpb24gYmVpbmdcbiAgICAgICAgIHRoYXQgd2hlbiBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcsIHRoZSBzdHJpbmdzIGBgIkZhbHNlImBgIG9yXG4gICAgICAgICBgYCJUcnVlImBgIGFyZSByZXR1cm5lZCwgcmVzcGVjdGl2ZWx5LlxuXG4gICAgICBUaGUgcnVsZXMgZm9yIGludGVnZXIgcmVwcmVzZW50YXRpb24gYXJlIGludGVuZGVkIHRvIGdpdmUgdGhlXG4gICAgICBtb3N0IG1lYW5pbmdmdWwgaW50ZXJwcmV0YXRpb24gb2Ygc2hpZnQgYW5kIG1hc2sgb3BlcmF0aW9uc1xuICAgICAgaW52b2x2aW5nIG5lZ2F0aXZlIGludGVnZXJzLlxuXG4gICBgYG51bWJlcnMuUmVhbGBgIChgYGZsb2F0YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgYGBudW1iZXJzLkNvbXBsZXhgYCAoYGBjb21wbGV4YGApXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciBgYHpgYCBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyBgYHoucmVhbGBgIGFuZCBgYHouaW1hZ2BgLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZlxuICAgaXRlbXMgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGVcbiAgIGluZGV4IHNldCBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2ZcbiAgIHNlcXVlbmNlICphKiBpcyBzZWxlY3RlZCBieSBgYGFbaV1gYC5cblxuICAgU2VxdWVuY2VzIGFsc28gc3VwcG9ydCBzbGljaW5nOiBgYGFbaTpqXWBgIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqIGBgPD1gYCAqayogYGA8YGAgKmoqLiAgV2hlbiB1c2VkIGFzIGFuXG4gICBleHByZXNzaW9uLCBhIHNsaWNlIGlzIGEgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZS4gIFRoaXMgaW1wbGllc1xuICAgdGhhdCB0aGUgaW5kZXggc2V0IGlzIHJlbnVtYmVyZWQgc28gdGhhdCBpdCBzdGFydHMgYXQgMC5cblxuICAgU29tZSBzZXF1ZW5jZXMgYWxzbyBzdXBwb3J0ICJleHRlbmRlZCBzbGljaW5nIiB3aXRoIGEgdGhpcmQgInN0ZXAiXG4gICBwYXJhbWV0ZXI6IGBgYVtpOmo6a11gYCBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCpcbiAgIHdoZXJlIGBgeCA9IGkgKyBuKmtgYCwgKm4qIGBgPj1gYCBgYDBgYCBhbmQgKmkqIGBgPD1gYCAqeCogYGA8YGBcbiAgICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHN0cmluZyBvYmplY3QgYXJlIFVuaWNvZGUgY29kZSB1bml0cy4gIEFcbiAgICAgICAgIFVuaWNvZGUgY29kZSB1bml0IGlzIHJlcHJlc2VudGVkIGJ5IGEgc3RyaW5nIG9iamVjdCBvZiBvbmVcbiAgICAgICAgIGl0ZW0gYW5kIGNhbiBob2xkIGVpdGhlciBhIDE2LWJpdCBvciAzMi1iaXQgdmFsdWVcbiAgICAgICAgIHJlcHJlc2VudGluZyBhIFVuaWNvZGUgb3JkaW5hbCAodGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZVxuICAgICAgICAgb3JkaW5hbCBpcyBnaXZlbiBpbiBgYHN5cy5tYXh1bmljb2RlYGAsIGFuZCBkZXBlbmRzIG9uIGhvd1xuICAgICAgICAgUHl0aG9uIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lKS4gIFN1cnJvZ2F0ZSBwYWlycyBtYXlcbiAgICAgICAgIGJlIHByZXNlbnQgaW4gdGhlIFVuaWNvZGUgb2JqZWN0LCBhbmQgd2lsbCBiZSByZXBvcnRlZCBhcyB0d29cbiAgICAgICAgIHNlcGFyYXRlIGl0ZW1zLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBgYGNocigpYGAgYW5kXG4gICAgICAgICBgYG9yZCgpYGAgY29udmVydCBiZXR3ZWVuIGNvZGUgdW5pdHMgYW5kIG5vbm5lZ2F0aXZlIGludGVnZXJzXG4gICAgICAgICByZXByZXNlbnRpbmcgdGhlIFVuaWNvZGUgb3JkaW5hbHMgYXMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgICAgICAgU3RhbmRhcmQgMy4wLiBDb252ZXJzaW9uIGZyb20gYW5kIHRvIG90aGVyIGVuY29kaW5ncyBhcmVcbiAgICAgICAgIHBvc3NpYmxlIHRocm91Z2ggdGhlIHN0cmluZyBtZXRob2QgYGBlbmNvZGUoKWBgLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSBgYGJcJ2FiY1wnYGAgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgYGBieXRlcygpYGAgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgYGBkZWNvZGUoKWBgXG4gICAgICAgICBtZXRob2QuXG5cbiAgIE11dGFibGUgc2VxdWVuY2VzXG4gICAgICBNdXRhYmxlIHNlcXVlbmNlcyBjYW4gYmUgY2hhbmdlZCBhZnRlciB0aGV5IGFyZSBjcmVhdGVkLiAgVGhlXG4gICAgICBzdWJzY3JpcHRpb24gYW5kIHNsaWNpbmcgbm90YXRpb25zIGNhbiBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgb2ZcbiAgICAgIGFzc2lnbm1lbnQgYW5kIGBgZGVsYGAgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gYGBieXRlYXJyYXkoKWBgIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgYGBhcnJheWBgIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgZXhhbXBsZSBvZlxuICAgICAgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsIGFzIGRvZXMgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gYGBsZW4oKWBgXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCBgYDFgYCBhbmRcbiAgIGBgMS4wYGApLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgYGBzZXQoKWBgIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzIGBgYWRkKClgYC5cblxuICAgRnJvemVuIHNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhbiBpbW11dGFibGUgc2V0LiAgVGhleSBhcmUgY3JlYXRlZCBieSB0aGVcbiAgICAgIGJ1aWx0LWluIGBgZnJvemVuc2V0KClgYCBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzXG4gICAgICBpbW11dGFibGUgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2ZcbiAgICAgIGFub3RoZXIgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gYGBhW2tdYGAgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5XG4gICBgYGtgYCBmcm9tIHRoZSBtYXBwaW5nIGBgYWBgOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZFxuICAgYXMgdGhlIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciBgYGRlbGBgIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pblxuICAgZnVuY3Rpb24gYGBsZW4oKWBgIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBhIG1hcHBpbmcuXG5cbiAgIFRoZXJlIGlzIGN1cnJlbnRseSBhIHNpbmdsZSBpbnRyaW5zaWMgbWFwcGluZyB0eXBlOlxuXG4gICBEaWN0aW9uYXJpZXNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgc2V0cyBvZiBvYmplY3RzIGluZGV4ZWQgYnkgbmVhcmx5XG4gICAgICBhcmJpdHJhcnkgdmFsdWVzLiAgVGhlIG9ubHkgdHlwZXMgb2YgdmFsdWVzIG5vdCBhY2NlcHRhYmxlIGFzXG4gICAgICBrZXlzIGFyZSB2YWx1ZXMgY29udGFpbmluZyBsaXN0cyBvciBkaWN0aW9uYXJpZXMgb3Igb3RoZXJcbiAgICAgIG11dGFibGUgdHlwZXMgdGhhdCBhcmUgY29tcGFyZWQgYnkgdmFsdWUgcmF0aGVyIHRoYW4gYnkgb2JqZWN0XG4gICAgICBpZGVudGl0eSwgdGhlIHJlYXNvbiBiZWluZyB0aGF0IHRoZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAgIGRpY3Rpb25hcmllcyByZXF1aXJlcyBhIGtleVwncyBoYXNoIHZhbHVlIHRvIHJlbWFpbiBjb25zdGFudC5cbiAgICAgIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5IHRoZSBub3JtYWwgcnVsZXMgZm9yIG51bWVyaWNcbiAgICAgIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWwgKGUuZy4sIGBgMWBgIGFuZFxuICAgICAgYGAxLjBgYCkgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSBgYHsuLi59YGBcbiAgICAgIG5vdGF0aW9uIChzZWUgc2VjdGlvbiAqRGljdGlvbmFyeSBkaXNwbGF5cyopLlxuXG4gICAgICBUaGUgZXh0ZW5zaW9uIG1vZHVsZXMgYGBkYm0ubmRibWBgIGFuZCBgYGRibS5nbnVgYCBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlXG4gICAgICBgYGNvbGxlY3Rpb25zYGAgbW9kdWxlLlxuXG5DYWxsYWJsZSB0eXBlc1xuICAgVGhlc2UgYXJlIHRoZSB0eXBlcyB0byB3aGljaCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRpb24gKHNlZVxuICAgc2VjdGlvbiAqQ2FsbHMqKSBjYW4gYmUgYXBwbGllZDpcblxuICAgVXNlci1kZWZpbmVkIGZ1bmN0aW9uc1xuICAgICAgQSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGlzIGNyZWF0ZWQgYnkgYSBmdW5jdGlvblxuICAgICAgZGVmaW5pdGlvbiAoc2VlIHNlY3Rpb24gKkZ1bmN0aW9uIGRlZmluaXRpb25zKikuICBJdCBzaG91bGQgYmVcbiAgICAgIGNhbGxlZCB3aXRoIGFuIGFyZ3VtZW50IGxpc3QgY29udGFpbmluZyB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXNcbiAgICAgIGFzIHRoZSBmdW5jdGlvblwncyBmb3JtYWwgcGFyYW1ldGVyIGxpc3QuXG5cbiAgICAgIFNwZWNpYWwgYXR0cmlidXRlczpcblxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgQXR0cmlidXRlICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09K1xuICAgICAgfCBgYF9fZG9jX19gYCAgICAgICAgICAgICAgIHwgVGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb24gICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcsIG9yIGBgTm9uZWBgIGlmICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdW5hdmFpbGFibGUgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19uYW1lX19gYCAgICAgICAgICAgICAgfCBUaGUgZnVuY3Rpb25cJ3MgbmFtZSAgICAgICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19tb2R1bGVfX2BgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLiAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZGVmYXVsdHNfX2BgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgdGhhdCBoYXZlIGRlZmF1bHRzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBOb25lYGAgaWYgbm8gYXJndW1lbnRzICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhhdmUgYSBkZWZhdWx0IHZhbHVlICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fY29kZV9fYGAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fZ2xvYmFsc19fYGAgICAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2xvYmFsIHZhcmlhYmxlcyAtLS0gdGhlIGdsb2JhbCB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2RpY3RfX2BgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgYGBfX2Nsb3N1cmVfX2BgICAgICAgICAgICB8IGBgTm9uZWBgIG9yIGEgdHVwbGUgb2YgY2VsbHMgICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0aGF0IGNvbnRhaW4gYmluZGluZ3MgZm9yIHRoZSAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb25cJ3MgZnJlZSB2YXJpYWJsZXMuICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCBgYF9fYW5ub3RhdGlvbnNfX2BgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgYW5ub3RhdGlvbnMgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHBhcmFtZXRlcnMuICBUaGUga2V5cyBvZiB0aGUgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaWN0IGFyZSB0aGUgcGFyYW1ldGVyIG5hbWVzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgYGBcJ3JldHVyblwnYGAgZm9yIHRoZSByZXR1cm4gIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbiwgaWYgcHJvdmlkZWQuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IGBgX19rd2RlZmF1bHRzX19gYCAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYF9fc2VsZl9fYGAgaXMgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICBvYmplY3QsIGBgX19mdW5jX19gYCBpcyB0aGUgZnVuY3Rpb24gb2JqZWN0OyBgYF9fZG9jX19gYCBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzIGBgX19mdW5jX18uX19kb2NfX2BgKTtcbiAgICAgIGBgX19uYW1lX19gYCBpcyB0aGUgbWV0aG9kIG5hbWUgKHNhbWUgYXMgYGBfX2Z1bmNfXy5fX25hbWVfX2BgKTtcbiAgICAgIGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIG1ldGhvZCB3YXMgZGVmaW5lZFxuICAgICAgaW4sIG9yIGBgTm9uZWBgIGlmIHVuYXZhaWxhYmxlLlxuXG4gICAgICBNZXRob2RzIGFsc28gc3VwcG9ydCBhY2Nlc3NpbmcgKGJ1dCBub3Qgc2V0dGluZykgdGhlIGFyYml0cmFyeVxuICAgICAgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0cyBtYXkgYmUgY3JlYXRlZCB3aGVuIGdldHRpbmcgYW5cbiAgICAgIGF0dHJpYnV0ZSBvZiBhIGNsYXNzIChwZXJoYXBzIHZpYSBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzKSwgaWZcbiAgICAgIHRoYXQgYXR0cmlidXRlIGlzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBvciBhIGNsYXNzXG4gICAgICBtZXRob2Qgb2JqZWN0LlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nIGEgdXNlci1cbiAgICAgIGRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IGZyb20gYSBjbGFzcyB2aWEgb25lIG9mIGl0cyBpbnN0YW5jZXMsXG4gICAgICBpdHMgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kXG4gICAgICBvYmplY3QgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIGlzIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBvYmplY3QuXG5cbiAgICAgIFdoZW4gYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmdcbiAgICAgIGFub3RoZXIgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIHRoZSBiZWhhdmlvdXIgaXNcbiAgICAgIHRoZSBzYW1lIGFzIGZvciBhIGZ1bmN0aW9uIG9iamVjdCwgZXhjZXB0IHRoYXQgdGhlIGBgX19mdW5jX19gYFxuICAgICAgYXR0cmlidXRlIG9mIHRoZSBuZXcgaW5zdGFuY2UgaXMgbm90IHRoZSBvcmlnaW5hbCBtZXRob2Qgb2JqZWN0XG4gICAgICBidXQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyBgYF9fc2VsZl9fYGBcbiAgICAgIGF0dHJpYnV0ZSBpcyB0aGUgY2xhc3MgaXRzZWxmLCBhbmQgaXRzIGBgX19mdW5jX19gYCBhdHRyaWJ1dGUgaXNcbiAgICAgIHRoZSBmdW5jdGlvbiBvYmplY3QgdW5kZXJseWluZyB0aGUgY2xhc3MgbWV0aG9kLlxuXG4gICAgICBXaGVuIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3QgaXMgY2FsbGVkLCB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24gKGBgX19mdW5jX19gYCkgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoYGBfX3NlbGZfX2BgKSBpbiBmcm9udCBvZiB0aGUgYXJndW1lbnQgbGlzdC4gIEZvciBpbnN0YW5jZSxcbiAgICAgIHdoZW4gYGBDYGAgaXMgYSBjbGFzcyB3aGljaCBjb250YWlucyBhIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb25cbiAgICAgIGBgZigpYGAsIGFuZCBgYHhgYCBpcyBhbiBpbnN0YW5jZSBvZiBgYENgYCwgY2FsbGluZyBgYHguZigxKWBgXG4gICAgICBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBDLmYoeCwgMSlgYC5cblxuICAgICAgV2hlbiBhbiBpbnN0YW5jZSBtZXRob2Qgb2JqZWN0IGlzIGRlcml2ZWQgZnJvbSBhIGNsYXNzIG1ldGhvZFxuICAgICAgb2JqZWN0LCB0aGUgImNsYXNzIGluc3RhbmNlIiBzdG9yZWQgaW4gYGBfX3NlbGZfX2BgIHdpbGxcbiAgICAgIGFjdHVhbGx5IGJlIHRoZSBjbGFzcyBpdHNlbGYsIHNvIHRoYXQgY2FsbGluZyBlaXRoZXIgYGB4LmYoMSlgYFxuICAgICAgb3IgYGBDLmYoMSlgYCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBmKEMsMSlgYCB3aGVyZSBgYGZgYCBpc1xuICAgICAgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCAoc2VlXG4gICAgICBzZWN0aW9uICpUaGUgeWllbGQgc3RhdGVtZW50KikgaXMgY2FsbGVkIGEgKmdlbmVyYXRvciBmdW5jdGlvbiouXG4gICAgICBTdWNoIGEgZnVuY3Rpb24sIHdoZW4gY2FsbGVkLCBhbHdheXMgcmV0dXJucyBhbiBpdGVyYXRvciBvYmplY3RcbiAgICAgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uOiAgY2FsbGluZ1xuICAgICAgdGhlIGl0ZXJhdG9yXCdzIGBgX19uZXh0X18oKWBgIG1ldGhvZCB3aWxsIGNhdXNlIHRoZSBmdW5jdGlvbiB0b1xuICAgICAgZXhlY3V0ZSB1bnRpbCBpdCBwcm92aWRlcyBhIHZhbHVlIHVzaW5nIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50LlxuICAgICAgV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMgYSBgYHJldHVybmBgIHN0YXRlbWVudCBvciBmYWxscyBvZmZcbiAgICAgIHRoZSBlbmQsIGEgYGBTdG9wSXRlcmF0aW9uYGAgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgYGBsZW4oKWBgIGFuZCBgYG1hdGguc2luKClgYFxuICAgICAgKGBgbWF0aGBgIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiBgYF9fZG9jX19gYCBpcyB0aGUgZnVuY3Rpb25cJ3MgZG9jdW1lbnRhdGlvblxuICAgICAgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZTsgYGBfX25hbWVfX2BgIGlzIHRoZVxuICAgICAgZnVuY3Rpb25cJ3MgbmFtZTsgYGBfX3NlbGZfX2BgIGlzIHNldCB0byBgYE5vbmVgYCAoYnV0IHNlZSB0aGVcbiAgICAgIG5leHQgaXRlbSk7IGBgX19tb2R1bGVfX2BgIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlXG4gICAgICBmdW5jdGlvbiB3YXMgZGVmaW5lZCBpbiBvciBgYE5vbmVgYCBpZiB1bmF2YWlsYWJsZS5cblxuICAgQnVpbHQtaW4gbWV0aG9kc1xuICAgICAgVGhpcyBpcyByZWFsbHkgYSBkaWZmZXJlbnQgZGlzZ3Vpc2Ugb2YgYSBidWlsdC1pbiBmdW5jdGlvbiwgdGhpc1xuICAgICAgdGltZSBjb250YWluaW5nIGFuIG9iamVjdCBwYXNzZWQgdG8gdGhlIEMgZnVuY3Rpb24gYXMgYW5cbiAgICAgIGltcGxpY2l0IGV4dHJhIGFyZ3VtZW50LiAgQW4gZXhhbXBsZSBvZiBhIGJ1aWx0LWluIG1ldGhvZCBpc1xuICAgICAgYGBhbGlzdC5hcHBlbmQoKWBgLCBhc3N1bWluZyAqYWxpc3QqIGlzIGEgbGlzdCBvYmplY3QuIEluIHRoaXNcbiAgICAgIGNhc2UsIHRoZSBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGUgYGBfX3NlbGZfX2BgIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlIGBgX19uZXdfXygpYGAuICBUaGUgYXJndW1lbnRzIG9mIHRoZVxuICAgICAgY2FsbCBhcmUgcGFzc2VkIHRvIGBgX19uZXdfXygpYGAgYW5kLCBpbiB0aGUgdHlwaWNhbCBjYXNlLCB0b1xuICAgICAgYGBfX2luaXRfXygpYGAgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSBgYF9fY2FsbF9fKClgYCBtZXRob2QgaW4gdGhlaXIgY2xhc3MuXG5cbk1vZHVsZXNcbiAgIE1vZHVsZXMgYXJlIGltcG9ydGVkIGJ5IHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudCAoc2VlIHNlY3Rpb24gKlRoZVxuICAgaW1wb3J0IHN0YXRlbWVudCopLiBBIG1vZHVsZSBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5XG4gICBhIGRpY3Rpb25hcnkgb2JqZWN0ICh0aGlzIGlzIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlXG4gICBfX2dsb2JhbHNfXyBhdHRyaWJ1dGUgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSkuXG4gICBBdHRyaWJ1dGUgcmVmZXJlbmNlcyBhcmUgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSxcbiAgIGUuZy4sIGBgbS54YGAgaXMgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXWBgLiBBIG1vZHVsZSBvYmplY3RcbiAgIGRvZXMgbm90IGNvbnRhaW4gdGhlIGNvZGUgb2JqZWN0IHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlXG4gICAoc2luY2UgaXQgaXNuXCd0IG5lZWRlZCBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBpcyBkb25lKS5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnQgdXBkYXRlcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZSBkaWN0aW9uYXJ5LFxuICAgZS5nLiwgYGBtLnggPSAxYGAgaXMgZXF1aXZhbGVudCB0byBgYG0uX19kaWN0X19bIngiXSA9IDFgYC5cblxuICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlOiBgYF9fZGljdF9fYGAgaXMgdGhlIG1vZHVsZVwncyBuYW1lc3BhY2VcbiAgIGFzIGEgZGljdGlvbmFyeSBvYmplY3QuXG5cbiAgICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQmVjYXVzZSBvZiB0aGUgd2F5IENQeXRob25cbiAgIGNsZWFycyBtb2R1bGUgZGljdGlvbmFyaWVzLCB0aGUgbW9kdWxlIGRpY3Rpb25hcnkgd2lsbCBiZSBjbGVhcmVkXG4gICB3aGVuIHRoZSBtb2R1bGUgZmFsbHMgb3V0IG9mIHNjb3BlIGV2ZW4gaWYgdGhlIGRpY3Rpb25hcnkgc3RpbGwgaGFzXG4gICBsaXZlIHJlZmVyZW5jZXMuICBUbyBhdm9pZCB0aGlzLCBjb3B5IHRoZSBkaWN0aW9uYXJ5IG9yIGtlZXAgdGhlXG4gICBtb2R1bGUgYXJvdW5kIHdoaWxlIHVzaW5nIGl0cyBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBQcmVkZWZpbmVkICh3cml0YWJsZSkgYXR0cmlidXRlczogYGBfX25hbWVfX2BgIGlzIHRoZSBtb2R1bGVcJ3NcbiAgIG5hbWU7IGBgX19kb2NfX2BgIGlzIHRoZSBtb2R1bGVcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIGBgTm9uZWBgXG4gICBpZiB1bmF2YWlsYWJsZTsgYGBfX2ZpbGVfX2BgIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoXG4gICB0aGUgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZVxuICAgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCBmb3IgQyBtb2R1bGVzIHRoYXQgYXJlXG4gICBzdGF0aWNhbGx5IGxpbmtlZCBpbnRvIHRoZSBpbnRlcnByZXRlcjsgZm9yIGV4dGVuc2lvbiBtb2R1bGVzXG4gICBsb2FkZWQgZHluYW1pY2FsbHkgZnJvbSBhIHNoYXJlZCBsaWJyYXJ5LCBpdCBpcyB0aGUgcGF0aG5hbWUgb2YgdGhlXG4gICBzaGFyZWQgbGlicmFyeSBmaWxlLlxuXG5DdXN0b20gY2xhc3Nlc1xuICAgQ3VzdG9tIGNsYXNzIHR5cGVzIGFyZSB0eXBpY2FsbHkgY3JlYXRlZCBieSBjbGFzcyBkZWZpbml0aW9ucyAoc2VlXG4gICBzZWN0aW9uICpDbGFzcyBkZWZpbml0aW9ucyopLiAgQSBjbGFzcyBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWRcbiAgIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QuIENsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSB0cmFuc2xhdGVkXG4gICB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgYGBDLnhgYCBpcyB0cmFuc2xhdGVkIHRvXG4gICBgYEMuX19kaWN0X19bIngiXWBgIChhbHRob3VnaCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaG9va3Mgd2hpY2hcbiAgIGFsbG93IGZvciBvdGhlciBtZWFucyBvZiBsb2NhdGluZyBhdHRyaWJ1dGVzKS4gV2hlbiB0aGUgYXR0cmlidXRlXG4gICBuYW1lIGlzIG5vdCBmb3VuZCB0aGVyZSwgdGhlIGF0dHJpYnV0ZSBzZWFyY2ggY29udGludWVzIGluIHRoZSBiYXNlXG4gICBjbGFzc2VzLiBUaGlzIHNlYXJjaCBvZiB0aGUgYmFzZSBjbGFzc2VzIHVzZXMgdGhlIEMzIG1ldGhvZFxuICAgcmVzb2x1dGlvbiBvcmRlciB3aGljaCBiZWhhdmVzIGNvcnJlY3RseSBldmVuIGluIHRoZSBwcmVzZW5jZSBvZlxuICAgXCdkaWFtb25kXCcgaW5oZXJpdGFuY2Ugc3RydWN0dXJlcyB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGVcbiAgIGluaGVyaXRhbmNlIHBhdGhzIGxlYWRpbmcgYmFjayB0byBhIGNvbW1vbiBhbmNlc3Rvci4gQWRkaXRpb25hbFxuICAgZGV0YWlscyBvbiB0aGUgQzMgTVJPIHVzZWQgYnkgUHl0aG9uIGNhbiBiZSBmb3VuZCBpbiB0aGVcbiAgIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSAyLjMgcmVsZWFzZSBhdFxuICAgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLlxuXG4gICBXaGVuIGEgY2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZSAoZm9yIGNsYXNzIGBgQ2BgLCBzYXkpIHdvdWxkIHlpZWxkXG4gICBhIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZXMgaXMgYGBDYGAuICBXaGVuIGl0IHdvdWxkIHlpZWxkXG4gICBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBvYmplY3Qgd3JhcHBlZFxuICAgYnkgdGhlIHN0YXRpYyBtZXRob2Qgb2JqZWN0LiBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKlxuICAgZm9yIGFub3RoZXIgd2F5IGluIHdoaWNoIGF0dHJpYnV0ZXMgcmV0cmlldmVkIGZyb20gYSBjbGFzcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRob3NlIGFjdHVhbGx5IGNvbnRhaW5lZCBpbiBpdHMgYGBfX2RpY3RfX2BgLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19uYW1lX19gYCBpcyB0aGUgY2xhc3MgbmFtZTsgYGBfX21vZHVsZV9fYGBcbiAgIGlzIHRoZSBtb2R1bGUgbmFtZSBpbiB3aGljaCB0aGUgY2xhc3Mgd2FzIGRlZmluZWQ7IGBgX19kaWN0X19gYCBpc1xuICAgdGhlIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyBgYF9fYmFzZXNfX2BgIGlzIGFcbiAgIHR1cGxlIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLFxuICAgaW4gdGhlIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDtcbiAgIGBgX19kb2NfX2BgIGlzIHRoZSBjbGFzc1wncyBkb2N1bWVudGF0aW9uIHN0cmluZywgb3IgTm9uZSBpZlxuICAgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgYGBfX3NlbGZfX2BgIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UuICBTdGF0aWMgbWV0aG9kIGFuZFxuICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGFsc28gdHJhbnNmb3JtZWQ7IHNlZSBhYm92ZSB1bmRlclxuICAgIkNsYXNzZXMiLiAgU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycyogZm9yIGFub3RoZXIgd2F5XG4gICBpbiB3aGljaCBhdHRyaWJ1dGVzIG9mIGEgY2xhc3MgcmV0cmlldmVkIHZpYSBpdHMgaW5zdGFuY2VzIG1heVxuICAgZGlmZmVyIGZyb20gdGhlIG9iamVjdHMgYWN0dWFsbHkgc3RvcmVkIGluIHRoZSBjbGFzc1wnc1xuICAgYGBfX2RpY3RfX2BgLiAgSWYgbm8gY2xhc3MgYXR0cmlidXRlIGlzIGZvdW5kLCBhbmQgdGhlIG9iamVjdFwnc1xuICAgY2xhc3MgaGFzIGEgYGBfX2dldGF0dHJfXygpYGAgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZVxuICAgbG9va3VwLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudHMgYW5kIGRlbGV0aW9ucyB1cGRhdGUgdGhlIGluc3RhbmNlXCdzXG4gICBkaWN0aW9uYXJ5LCBuZXZlciBhIGNsYXNzXCdzIGRpY3Rpb25hcnkuICBJZiB0aGUgY2xhc3MgaGFzIGFcbiAgIGBgX19zZXRhdHRyX18oKWBgIG9yIGBgX19kZWxhdHRyX18oKWBgIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6IGBgX19kaWN0X19gYCBpcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnk7XG4gICBgYF9fY2xhc3NfX2BgIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlIGBgb3BlbigpYGAgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyBgYG9zLnBvcGVuKClgYCwgYGBvcy5mZG9wZW4oKWBgLCBhbmQgdGhlIGBgbWFrZWZpbGUoKWBgXG4gICBtZXRob2Qgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzIGBgc3lzLnN0ZGluYGAsIGBgc3lzLnN0ZG91dGBgIGFuZCBgYHN5cy5zdGRlcnJgYCBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICBgYGlvLlRleHRJT0Jhc2VgYCBhYnN0cmFjdCBjbGFzcy5cblxuSW50ZXJuYWwgdHlwZXNcbiAgIEEgZmV3IHR5cGVzIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgaW50ZXJwcmV0ZXIgYXJlIGV4cG9zZWQgdG8gdGhlXG4gICB1c2VyLiBUaGVpciBkZWZpbml0aW9ucyBtYXkgY2hhbmdlIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIHRoZVxuICAgaW50ZXJwcmV0ZXIsIGJ1dCB0aGV5IGFyZSBtZW50aW9uZWQgaGVyZSBmb3IgY29tcGxldGVuZXNzLlxuXG4gICBDb2RlIG9iamVjdHNcbiAgICAgIENvZGUgb2JqZWN0cyByZXByZXNlbnQgKmJ5dGUtY29tcGlsZWQqIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGUsXG4gICAgICBvciAqYnl0ZWNvZGUqLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgY29kZSBvYmplY3QgYW5kIGFcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCBpcyB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYW4gZXhwbGljaXRcbiAgICAgIHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb25cJ3MgZ2xvYmFscyAodGhlIG1vZHVsZSBpbiB3aGljaCBpdCB3YXNcbiAgICAgIGRlZmluZWQpLCB3aGlsZSBhIGNvZGUgb2JqZWN0IGNvbnRhaW5zIG5vIGNvbnRleHQ7IGFsc28gdGhlXG4gICAgICBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcyBhcmUgc3RvcmVkIGluIHRoZSBmdW5jdGlvbiBvYmplY3QsIG5vdFxuICAgICAgaW4gdGhlIGNvZGUgb2JqZWN0IChiZWNhdXNlIHRoZXkgcmVwcmVzZW50IHZhbHVlcyBjYWxjdWxhdGVkIGF0XG4gICAgICBydW4tdGltZSkuICBVbmxpa2UgZnVuY3Rpb24gb2JqZWN0cywgY29kZSBvYmplY3RzIGFyZSBpbW11dGFibGVcbiAgICAgIGFuZCBjb250YWluIG5vIHJlZmVyZW5jZXMgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIHRvIG11dGFibGVcbiAgICAgIG9iamVjdHMuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgY29fbmFtZWBgIGdpdmVzIHRoZSBmdW5jdGlvblxuICAgICAgbmFtZTsgYGBjb19hcmdjb3VudGBgIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHNcbiAgICAgIChpbmNsdWRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyBgYGNvX25sb2NhbHNgYCBpcyB0aGVcbiAgICAgIG51bWJlciBvZiBsb2NhbCB2YXJpYWJsZXMgdXNlZCBieSB0aGUgZnVuY3Rpb24gKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzKTsgYGBjb192YXJuYW1lc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2ZcbiAgICAgIHRoZSBsb2NhbCB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTtcbiAgICAgIGBgY29fY2VsbHZhcnNgYCBpcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zO1xuICAgICAgYGBjb19mcmVldmFyc2BgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgZnJlZVxuICAgICAgdmFyaWFibGVzOyBgYGNvX2NvZGVgYCBpcyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mXG4gICAgICBieXRlY29kZSBpbnN0cnVjdGlvbnM7IGBgY29fY29uc3RzYGAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuICAgICAgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7IGBgY29fbmFtZXNgYCBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTsgYGBjb19maWxlbmFtZWBgIGlzXG4gICAgICB0aGUgZmlsZW5hbWUgZnJvbSB3aGljaCB0aGUgY29kZSB3YXMgY29tcGlsZWQ7XG4gICAgICBgYGNvX2ZpcnN0bGluZW5vYGAgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgIGBgY29fbG5vdGFiYGAgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7IGBgY29fc3RhY2tzaXplYGAgaXMgdGhlIHJlcXVpcmVkIHN0YWNrIHNpemVcbiAgICAgIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzKTsgYGBjb19mbGFnc2BgIGlzIGFuIGludGVnZXIgZW5jb2RpbmdcbiAgICAgIGEgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciBgYGNvX2ZsYWdzYGA6IGJpdFxuICAgICAgYGAweDA0YGAgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiB1c2VzIHRoZSBgYCphcmd1bWVudHNgYCBzeW50YXhcbiAgICAgIHRvIGFjY2VwdCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXRcbiAgICAgIGBgMHgwOGBgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgYGAqKmtleXdvcmRzYGAgc3ludGF4XG4gICAgICB0byBhY2NlcHQgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzOyBiaXQgYGAweDIwYGAgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gaXMgYSBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0XG4gICAgICBkaXZpc2lvbmBgKSBhbHNvIHVzZSBiaXRzIGluIGBgY29fZmxhZ3NgYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGFcbiAgICAgIGNvZGUgb2JqZWN0IHdhcyBjb21waWxlZCB3aXRoIGEgcGFydGljdWxhciBmZWF0dXJlIGVuYWJsZWQ6IGJpdFxuICAgICAgYGAweDIwMDBgYCBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZVxuICAgICAgZGl2aXNpb24gZW5hYmxlZDsgYml0cyBgYDB4MTBgYCBhbmQgYGAweDEwMDBgYCB3ZXJlIHVzZWQgaW5cbiAgICAgIGVhcmxpZXIgdmVyc2lvbnMgb2YgUHl0aG9uLlxuXG4gICAgICBPdGhlciBiaXRzIGluIGBgY29fZmxhZ3NgYCBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICBgYGNvX2NvbnN0c2BgIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICBgYE5vbmVgYCBpZiB1bmRlZmluZWQuXG5cbiAgIEZyYW1lIG9iamVjdHNcbiAgICAgIEZyYW1lIG9iamVjdHMgcmVwcmVzZW50IGV4ZWN1dGlvbiBmcmFtZXMuICBUaGV5IG1heSBvY2N1ciBpblxuICAgICAgdHJhY2ViYWNrIG9iamVjdHMgKHNlZSBiZWxvdykuXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6IGBgZl9iYWNrYGAgaXMgdG8gdGhlIHByZXZpb3VzXG4gICAgICBzdGFjayBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgYGBOb25lYGAgaWYgdGhpcyBpcyB0aGVcbiAgICAgIGJvdHRvbSBzdGFjayBmcmFtZTsgYGBmX2NvZGVgYCBpcyB0aGUgY29kZSBvYmplY3QgYmVpbmcgZXhlY3V0ZWRcbiAgICAgIGluIHRoaXMgZnJhbWU7IGBgZl9sb2NhbHNgYCBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXBcbiAgICAgIGxvY2FsIHZhcmlhYmxlczsgYGBmX2dsb2JhbHNgYCBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgYGBmX2J1aWx0aW5zYGAgaXMgdXNlZCBmb3IgYnVpbHQtaW4gKGludHJpbnNpYykgbmFtZXM7XG4gICAgICBgYGZfbGFzdGlgYCBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvXG4gICAgICB0aGUgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogYGBmX3RyYWNlYGAsIGlmIG5vdCBgYE5vbmVgYCwgaXMgYVxuICAgICAgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBjb2RlIGxpbmUgKHRoaXMgaXNcbiAgICAgIHVzZWQgYnkgdGhlIGRlYnVnZ2VyKTsgYGBmX2xpbmVub2BgIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyXG4gICAgICBvZiB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uXG4gICAgICBqdW1wcyB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEFcbiAgICAgIGRlYnVnZ2VyIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpXG4gICAgICBieSB3cml0aW5nIHRvIGZfbGluZW5vLlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5IGBgc3lzLmV4Y19pbmZvKClgYC4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWluc1xuICAgICAgbm8gc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseVxuICAgICAgZm9ybWF0dGVkKSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXNcbiAgICAgIGludGVyYWN0aXZlLCBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzXG4gICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiBgYHRiX25leHRgYCBpcyB0aGUgbmV4dCBsZXZlbCBpblxuICAgICAgdGhlIHN0YWNrIHRyYWNlICh0b3dhcmRzIHRoZSBmcmFtZSB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZCksIG9yIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7IGBgdGJfZnJhbWVgYFxuICAgICAgcG9pbnRzIHRvIHRoZSBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7XG4gICAgICBgYHRiX2xpbmVub2BgIGdpdmVzIHRoZSBsaW5lIG51bWJlciB3aGVyZSB0aGUgZXhjZXB0aW9uXG4gICAgICBvY2N1cnJlZDsgYGB0Yl9sYXN0aWBgIGluZGljYXRlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZVxuICAgICAgbGluZSBudW1iZXIgYW5kIGxhc3QgaW5zdHJ1Y3Rpb24gaW4gdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyXG4gICAgICBmcm9tIHRoZSBsaW5lIG51bWJlciBvZiBpdHMgZnJhbWUgb2JqZWN0IGlmIHRoZSBleGNlcHRpb25cbiAgICAgIG9jY3VycmVkIGluIGEgYGB0cnlgYCBzdGF0ZW1lbnQgd2l0aCBubyBtYXRjaGluZyBleGNlcHQgY2xhdXNlXG4gICAgICBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgYGBfX2dldGl0ZW1fXygpYGBcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluIGBgc2xpY2UoKWBgXG4gICAgICBmdW5jdGlvbi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBzdGFydGBgIGlzIHRoZSBsb3dlciBib3VuZDtcbiAgICAgIGBgc3RvcGBgIGlzIHRoZSB1cHBlciBib3VuZDsgYGBzdGVwYGAgaXMgdGhlIHN0ZXAgdmFsdWU7IGVhY2ggaXNcbiAgICAgIGBgTm9uZWBgIGlmIG9taXR0ZWQuIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICBgYHN0YXRpY21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG5cbiAgIENsYXNzIG1ldGhvZCBvYmplY3RzXG4gICAgICBBIGNsYXNzIG1ldGhvZCBvYmplY3QsIGxpa2UgYSBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXMgYSB3cmFwcGVyXG4gICAgICBhcm91bmQgYW5vdGhlciBvYmplY3QgdGhhdCBhbHRlcnMgdGhlIHdheSBpbiB3aGljaCB0aGF0IG9iamVjdFxuICAgICAgaXMgcmV0cmlldmVkIGZyb20gY2xhc3NlcyBhbmQgY2xhc3MgaW5zdGFuY2VzLiBUaGUgYmVoYXZpb3VyIG9mXG4gICAgICBjbGFzcyBtZXRob2Qgb2JqZWN0cyB1cG9uIHN1Y2ggcmV0cmlldmFsIGlzIGRlc2NyaWJlZCBhYm92ZSxcbiAgICAgIHVuZGVyICJVc2VyLWRlZmluZWQgbWV0aG9kcyIuIENsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkXG4gICAgICBieSB0aGUgYnVpbHQtaW4gYGBjbGFzc21ldGhvZCgpYGAgY29uc3RydWN0b3IuXG4nLAogICd0eXBlc2Z1bmN0aW9ucyc6ICdcbkZ1bmN0aW9uc1xuKioqKioqKioqXG5cbkZ1bmN0aW9uIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBUaGUgb25seVxub3BlcmF0aW9uIG9uIGEgZnVuY3Rpb24gb2JqZWN0IGlzIHRvIGNhbGwgaXQ6IGBgZnVuYyhhcmd1bWVudC1saXN0KWBgLlxuXG5UaGVyZSBhcmUgcmVhbGx5IHR3byBmbGF2b3JzIG9mIGZ1bmN0aW9uIG9iamVjdHM6IGJ1aWx0LWluIGZ1bmN0aW9uc1xuYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuICBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgb3BlcmF0aW9uICh0byBjYWxsXG50aGUgZnVuY3Rpb24pLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCwgaGVuY2UgdGhlXG5kaWZmZXJlbnQgb2JqZWN0IHR5cGVzLlxuXG5TZWUgKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCi0gJ3R5cGVzbWFwcGluZyc6ICdcbk1hcHBpbmcgVHlwZXMgLS0tIGBgZGljdGBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0XG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoW2FyZ10pXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgb3IgZnJvbSBhIHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy4gIElmIG5vIGFyZ3VtZW50cyBhcmVcbiAgIGdpdmVuLCByZXR1cm4gYSBuZXcgZW1wdHkgZGljdGlvbmFyeS4gIElmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAqYXJnKiBpcyBhIG1hcHBpbmcgb2JqZWN0LCByZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGhlIHNhbWVcbiAgIGtleXMgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGRvZXMgdGhlIG1hcHBpbmcgb2JqZWN0LiAgT3RoZXJ3aXNlIHRoZVxuICAgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGEgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHNcbiAgIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3Igb2JqZWN0LiAgVGhlIGVsZW1lbnRzIG9mIHRoZSBhcmd1bWVudFxuICAgbXVzdCBlYWNoIGFsc28gYmUgb2Ygb25lIG9mIHRob3NlIGtpbmRzLCBhbmQgZWFjaCBtdXN0IGluIHR1cm5cbiAgIGNvbnRhaW4gZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBpcyB1c2VkIGFzIGEga2V5IGluIHRoZSBuZXdcbiAgIGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBrZXlcJ3MgdmFsdWUuICBJZiBhIGdpdmVuIGtleSBpc1xuICAgc2VlbiBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0IGlzIHJldGFpbmVkXG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgd2l0aCB0aGVpclxuICAgYXNzb2NpYXRlZCB2YWx1ZXMgYXJlIGFkZGVkIGFzIGl0ZW1zIHRvIHRoZSBkaWN0aW9uYXJ5LiAgSWYgYSBrZXlcbiAgIGlzIHNwZWNpZmllZCBib3RoIGluIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGFuZCBhcyBhIGtleXdvcmRcbiAgIGFyZ3VtZW50LCB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXl3b3JkIGlzIHJldGFpbmVkIGluIHRoZVxuICAgZGljdGlvbmFyeS4gIEZvciBleGFtcGxlLCB0aGVzZSBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbCB0b1xuICAgYGB7Im9uZSI6IDEsICJ0d28iOiAyfWBgOlxuXG4gICAqIGBgZGljdChvbmU9MSwgdHdvPTIpYGBcblxuICAgKiBgYGRpY3Qoe1wnb25lXCc6IDEsIFwndHdvXCc6IDJ9KWBgXG5cbiAgICogYGBkaWN0KHppcCgoXCdvbmVcJywgXCd0d29cJyksICgxLCAyKSkpYGBcblxuICAgKiBgYGRpY3QoW1tcJ3R3b1wnLCAyXSwgW1wnb25lXCcsIDFdXSlgYFxuXG4gICBUaGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvciBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvblxuICAgaWRlbnRpZmllcnM7IHRoZSBvdGhlcnMgd29yayB3aXRoIGFueSB2YWxpZCBrZXlzLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgYGBfX21pc3NpbmdfXygpYGAsIGlmIHRoZVxuICAgICAga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCB0aGUgYGBkW2tleV1gYCBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSBgYGRba2V5XWBgIG9wZXJhdGlvblxuICAgICAgdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuIE5vIG90aGVyXG4gICAgICBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlIGBgX19taXNzaW5nX18oKWBgLiBJZlxuICAgICAgYGBfX21pc3NpbmdfXygpYGAgaXMgbm90IGRlZmluZWQsIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG4gICAgICBgYF9fbWlzc2luZ19fKClgYCBtdXN0IGJlIGEgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2VcbiAgICAgIHZhcmlhYmxlLiBGb3IgYW4gZXhhbXBsZSwgc2VlIGBgY29sbGVjdGlvbnMuZGVmYXVsdGRpY3RgYC5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0IGBgZFtrZXldYGAgdG8gKnZhbHVlKi5cblxuICAgZGVsIGRba2V5XVxuXG4gICAgICBSZW1vdmUgYGBkW2tleV1gYCBmcm9tICpkKi4gIFJhaXNlcyBhIGBgS2V5RXJyb3JgYCBpZiAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiBgYFRydWVgYCBpZiAqZCogaGFzIGEga2V5ICprZXkqLCBlbHNlIGBgRmFsc2VgYC5cblxuICAga2V5IG5vdCBpbiBkXG5cbiAgICAgIEVxdWl2YWxlbnQgdG8gYGBub3Qga2V5IGluIGRgYC5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yIGBgaXRlcihkLmtleXMoKSlgYC5cblxuICAgY2xlYXIoKVxuXG4gICAgICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNvcHkoKVxuXG4gICAgICBSZXR1cm4gYSBzaGFsbG93IGNvcHkgb2YgdGhlIGRpY3Rpb25hcnkuXG5cbiAgIGNsYXNzbWV0aG9kIGZyb21rZXlzKHNlcVssIHZhbHVlXSlcblxuICAgICAgQ3JlYXRlIGEgbmV3IGRpY3Rpb25hcnkgd2l0aCBrZXlzIGZyb20gKnNlcSogYW5kIHZhbHVlcyBzZXQgdG9cbiAgICAgICp2YWx1ZSouXG5cbiAgICAgIGBgZnJvbWtleXMoKWBgIGlzIGEgY2xhc3MgbWV0aG9kIHRoYXQgcmV0dXJucyBhIG5ldyBkaWN0aW9uYXJ5LlxuICAgICAgKnZhbHVlKiBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byBgYE5vbmVgYCxcbiAgICAgIHNvIHRoYXQgdGhpcyBtZXRob2QgbmV2ZXIgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBpdGVtcygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGl0ZW1zIChgYChrZXksIHZhbHVlKWBgXG4gICAgICBwYWlycykuICBTZWUgYmVsb3cgZm9yIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLlxuXG4gICBrZXlzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3Mga2V5cy4gIFNlZSBiZWxvdyBmb3JcbiAgICAgIGRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG5cbiAgIHBvcGl0ZW0oKVxuXG4gICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgYGAoa2V5LCB2YWx1ZSlgYCBwYWlyIGZyb20gdGhlXG4gICAgICBkaWN0aW9uYXJ5LlxuXG4gICAgICBgYHBvcGl0ZW0oKWBgIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nIGBgcG9waXRlbSgpYGAgcmFpc2VzIGEgYGBLZXlFcnJvcmBgLlxuXG4gICBzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmV0dXJuIGl0cyB2YWx1ZS4gIElmIG5vdCwgaW5zZXJ0XG4gICAgICAqa2V5KiB3aXRoIGEgdmFsdWUgb2YgKmRlZmF1bHQqIGFuZCByZXR1cm4gKmRlZmF1bHQqLiAgKmRlZmF1bHQqXG4gICAgICBkZWZhdWx0cyB0byBgYE5vbmVgYC5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiBgYE5vbmVgYC5cblxuICAgICAgYGB1cGRhdGUoKWBgIGFjY2VwdHMgZWl0aGVyIGFub3RoZXIgZGljdGlvbmFyeSBvYmplY3Qgb3IgYW5cbiAgICAgIGl0ZXJhYmxlIG9mIGtleS92YWx1ZSBwYWlycyAoYXMgdHVwbGVzIG9yIG90aGVyIGl0ZXJhYmxlcyBvZlxuICAgICAgbGVuZ3RoIHR3bykuICBJZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgZGljdGlvbmFyeVxuICAgICAgaXMgdGhlbiB1cGRhdGVkIHdpdGggdGhvc2Uga2V5L3ZhbHVlIHBhaXJzOiBgYGQudXBkYXRlKHJlZD0xLFxuICAgICAgYmx1ZT0yKWBgLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgYmVsb3cgZm9yXG4gICAgICBkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cy5cblxuXG5EaWN0aW9uYXJ5IHZpZXcgb2JqZWN0c1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9iamVjdHMgcmV0dXJuZWQgYnkgYGBkaWN0LmtleXMoKWBgLCBgYGRpY3QudmFsdWVzKClgYCBhbmRcbmBgZGljdC5pdGVtcygpYGAgYXJlICp2aWV3IG9iamVjdHMqLiAgVGhleSBwcm92aWRlIGEgZHluYW1pYyB2aWV3IG9uXG50aGUgZGljdGlvbmFyeVwncyBlbnRyaWVzLCB3aGljaCBtZWFucyB0aGF0IHdoZW4gdGhlIGRpY3Rpb25hcnlcbmNoYW5nZXMsIHRoZSB2aWV3IHJlZmxlY3RzIHRoZXNlIGNoYW5nZXMuXG5cbkRpY3Rpb25hcnkgdmlld3MgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgdG8geWllbGQgdGhlaXIgcmVzcGVjdGl2ZSBkYXRhLFxuYW5kIHN1cHBvcnQgbWVtYmVyc2hpcCB0ZXN0czpcblxubGVuKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5pdGVyKGRpY3R2aWV3KVxuXG4gICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cywgdmFsdWVzIG9yIGl0ZW1zIChyZXByZXNlbnRlZCBhc1xuICAgdHVwbGVzIG9mIGBgKGtleSwgdmFsdWUpYGApIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgYGAodmFsdWUsIGtleSlgYCBwYWlyc1xuICAgdXNpbmcgYGB6aXAoKWBgOiBgYHBhaXJzID0gemlwKGQudmFsdWVzKCksIGQua2V5cygpKWBgLiAgQW5vdGhlclxuICAgd2F5IHRvIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzIGBgcGFpcnMgPSBbKHYsIGspIGZvciAoaywgdikgaW5cbiAgIGQuaXRlbXMoKV1gYC5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSBgYFJ1bnRpbWVFcnJvcmBgIG9yIGZhaWwgdG8gaXRlcmF0ZSBvdmVyIGFsbCBlbnRyaWVzLlxuXG54IGluIGRpY3R2aWV3XG5cbiAgIFJldHVybiBgYFRydWVgYCBpZiAqeCogaXMgaW4gdGhlIHVuZGVybHlpbmcgZGljdGlvbmFyeVwncyBrZXlzLFxuICAgdmFsdWVzIG9yIGl0ZW1zIChpbiB0aGUgbGF0dGVyIGNhc2UsICp4KiBzaG91bGQgYmUgYSBgYChrZXksXG4gICB2YWx1ZSlgYCB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCBgYChrZXksIHZhbHVlKWBgIHBhaXJzIGFyZSB1bmlxdWVcbmFuZCBoYXNoYWJsZSwgdGhlbiB0aGUgaXRlbXMgdmlldyBpcyBhbHNvIHNldC1saWtlLiAgKFZhbHVlcyB2aWV3cyBhcmVcbm5vdCB0cmVhdGVkIGFzIHNldC1saWtlIHNpbmNlIHRoZSBlbnRyaWVzIGFyZSBnZW5lcmFsbHkgbm90IHVuaXF1ZS4pXG5Gb3Igc2V0LWxpa2Ugdmlld3MsIGFsbCBvZiB0aGUgb3BlcmF0aW9ucyBkZWZpbmVkIGZvciB0aGUgYWJzdHJhY3RcbmJhc2UgY2xhc3MgYGBjb2xsZWN0aW9ucy5TZXRgYCBhcmUgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgYGA9PWBgLFxuYGA8YGAsIG9yIGBgXmBgKS5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy5rZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmFsdWVzKClcblxuICAgPj4+ICMgaXRlcmF0aW9uXG4gICA+Pj4gbiA9IDBcbiAgID4+PiBmb3IgdmFsIGluIHZhbHVlczpcbiAgIC4uLiAgICAgbiArPSB2YWxcbiAgID4+PiBwcmludChuKVxuICAgNTA0XG5cbiAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlclxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhdXNhZ2VcJywgXCdzcGFtXCddXG4gICA+Pj4gbGlzdCh2YWx1ZXMpXG4gICBbMiwgMSwgMSwgNTAwXVxuXG4gICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ2VnZ3NcJ11cbiAgID4+PiBkZWwgZGlzaGVzW1wnc2F1c2FnZVwnXVxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ3NwYW1cJywgXCdiYWNvblwnXVxuXG4gICA+Pj4gIyBzZXQgb3BlcmF0aW9uc1xuICAgPj4+IGtleXMgJiB7XCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYWxhZFwnfVxuICAge1wnYmFjb25cJ31cbiAgID4+PiBrZXlzIF4ge1wnc2F1c2FnZVwnLCBcJ2p1aWNlXCd9XG4gICB7XCdqdWljZVwnLCBcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NwYW1cJ31cbicsCisgJ3R5cGVzbWFwcGluZyc6ICdcbk1hcHBpbmcgVHlwZXMgLS0tIGBgZGljdGBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5BICptYXBwaW5nKiBvYmplY3QgbWFwcyAqaGFzaGFibGUqIHZhbHVlcyB0byBhcmJpdHJhcnkgb2JqZWN0cy5cbk1hcHBpbmdzIGFyZSBtdXRhYmxlIG9iamVjdHMuICBUaGVyZSBpcyBjdXJyZW50bHkgb25seSBvbmUgc3RhbmRhcmRcbm1hcHBpbmcgdHlwZSwgdGhlICpkaWN0aW9uYXJ5Ki4gIChGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0XG5pbiBgYGxpc3RgYCwgYGBzZXRgYCwgYW5kIGBgdHVwbGVgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYFxubW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzIGBgMWBgIGFuZCBgYDEuMGBgKSB0aGVuIHRoZXkgY2FuIGJlIHVzZWQgaW50ZXJjaGFuZ2VhYmx5IHRvXG5pbmRleCB0aGUgc2FtZSBkaWN0aW9uYXJ5IGVudHJ5LiAgKE5vdGUgaG93ZXZlciwgdGhhdCBzaW5jZSBjb21wdXRlcnNcbnN0b3JlIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgYXBwcm94aW1hdGlvbnMgaXQgaXMgdXN1YWxseSB1bndpc2UgdG9cbnVzZSB0aGVtIGFzIGRpY3Rpb25hcnkga2V5cy4pXG5cbkRpY3Rpb25hcmllcyBjYW4gYmUgY3JlYXRlZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2ZcbmBga2V5OiB2YWx1ZWBgIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiBgYHtcJ2phY2tcJzogNDA5OCxcblwnc2pvZXJkXCc6IDQxMjd9YGAgb3IgYGB7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9YGAsIG9yIGJ5IHRoZVxuYGBkaWN0YGAgY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoW2FyZ10pXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgb3IgZnJvbSBhIHNldCBvZiBrZXl3b3JkIGFyZ3VtZW50cy4gIElmIG5vIGFyZ3VtZW50cyBhcmVcbiAgIGdpdmVuLCByZXR1cm4gYSBuZXcgZW1wdHkgZGljdGlvbmFyeS4gIElmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAqYXJnKiBpcyBhIG1hcHBpbmcgb2JqZWN0LCByZXR1cm4gYSBkaWN0aW9uYXJ5IG1hcHBpbmcgdGhlIHNhbWVcbiAgIGtleXMgdG8gdGhlIHNhbWUgdmFsdWVzIGFzIGRvZXMgdGhlIG1hcHBpbmcgb2JqZWN0LiAgT3RoZXJ3aXNlIHRoZVxuICAgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGEgc2VxdWVuY2UsIGEgY29udGFpbmVyIHRoYXQgc3VwcG9ydHNcbiAgIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3Igb2JqZWN0LiAgVGhlIGVsZW1lbnRzIG9mIHRoZSBhcmd1bWVudFxuICAgbXVzdCBlYWNoIGFsc28gYmUgb2Ygb25lIG9mIHRob3NlIGtpbmRzLCBhbmQgZWFjaCBtdXN0IGluIHR1cm5cbiAgIGNvbnRhaW4gZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBpcyB1c2VkIGFzIGEga2V5IGluIHRoZSBuZXdcbiAgIGRpY3Rpb25hcnksIGFuZCB0aGUgc2Vjb25kIGFzIHRoZSBrZXlcJ3MgdmFsdWUuICBJZiBhIGdpdmVuIGtleSBpc1xuICAgc2VlbiBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0IGlzIHJldGFpbmVkXG4gICBpbiB0aGUgbmV3IGRpY3Rpb25hcnkuXG5cbiAgIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBnaXZlbiwgdGhlIGtleXdvcmRzIHRoZW1zZWx2ZXMgd2l0aCB0aGVpclxuICAgYXNzb2NpYXRlZCB2YWx1ZXMgYXJlIGFkZGVkIGFzIGl0ZW1zIHRvIHRoZSBkaWN0aW9uYXJ5LiAgSWYgYSBrZXlcbiAgIGlzIHNwZWNpZmllZCBib3RoIGluIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGFuZCBhcyBhIGtleXdvcmRcbiAgIGFyZ3VtZW50LCB0aGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXl3b3JkIGlzIHJldGFpbmVkIGluIHRoZVxuICAgZGljdGlvbmFyeS4gIEZvciBleGFtcGxlLCB0aGVzZSBhbGwgcmV0dXJuIGEgZGljdGlvbmFyeSBlcXVhbCB0b1xuICAgYGB7Im9uZSI6IDEsICJ0d28iOiAyfWBgOlxuXG4gICAqIGBgZGljdChvbmU9MSwgdHdvPTIpYGBcblxuICAgKiBgYGRpY3Qoe1wnb25lXCc6IDEsIFwndHdvXCc6IDJ9KWBgXG5cbiAgICogYGBkaWN0KHppcCgoXCdvbmVcJywgXCd0d29cJyksICgxLCAyKSkpYGBcblxuICAgKiBgYGRpY3QoW1tcJ3R3b1wnLCAyXSwgW1wnb25lXCcsIDFdXSlgYFxuXG4gICBUaGUgZmlyc3QgZXhhbXBsZSBvbmx5IHdvcmtzIGZvciBrZXlzIHRoYXQgYXJlIHZhbGlkIFB5dGhvblxuICAgaWRlbnRpZmllcnM7IHRoZSBvdGhlcnMgd29yayB3aXRoIGFueSB2YWxpZCBrZXlzLlxuXG4gICBUaGVzZSBhcmUgdGhlIG9wZXJhdGlvbnMgdGhhdCBkaWN0aW9uYXJpZXMgc3VwcG9ydCAoYW5kIHRoZXJlZm9yZSxcbiAgIGN1c3RvbSBtYXBwaW5nIHR5cGVzIHNob3VsZCBzdXBwb3J0IHRvbyk6XG5cbiAgIGxlbihkKVxuXG4gICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgZGljdGlvbmFyeSAqZCouXG5cbiAgIGRba2V5XVxuXG4gICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgYGBLZXlFcnJvcmBgIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgYGBfX21pc3NpbmdfXygpYGAsIGlmIHRoZVxuICAgICAga2V5ICprZXkqIGlzIG5vdCBwcmVzZW50LCB0aGUgYGBkW2tleV1gYCBvcGVyYXRpb24gY2FsbHMgdGhhdFxuICAgICAgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSBgYGRba2V5XWBgIG9wZXJhdGlvblxuICAgICAgdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsIGlmIHRoZSBrZXkgaXMgbm90IHByZXNlbnQuIE5vIG90aGVyXG4gICAgICBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlIGBgX19taXNzaW5nX18oKWBgLiBJZlxuICAgICAgYGBfX21pc3NpbmdfXygpYGAgaXMgbm90IGRlZmluZWQsIGBgS2V5RXJyb3JgYCBpcyByYWlzZWQuXG4gICAgICBgYF9fbWlzc2luZ19fKClgYCBtdXN0IGJlIGEgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2VcbiAgICAgIHZhcmlhYmxlOlxuXG4gICAgICAgICA+Pj4gY2xhc3MgQ291bnRlcihkaWN0KTpcbiAgICAgICAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAgICAgICAuLi4gICAgICAgICByZXR1cm4gMFxuICAgICAgICAgPj4+IGMgPSBDb3VudGVyKClcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAwXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXSArPSAxXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMVxuXG4gICAgICBTZWUgYGBjb2xsZWN0aW9ucy5Db3VudGVyYGAgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb25cbiAgICAgIGluY2x1ZGluZyBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmdcbiAgICAgIHRhbGxpZXMuXG5cbiAgIGRba2V5XSA9IHZhbHVlXG5cbiAgICAgIFNldCBgYGRba2V5XWBgIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlIGBgZFtrZXldYGAgZnJvbSAqZCouICBSYWlzZXMgYSBgYEtleUVycm9yYGAgaWYgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgbWFwLlxuXG4gICBrZXkgaW4gZFxuXG4gICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSBgYEZhbHNlYGAuXG5cbiAgIGtleSBub3QgaW4gZFxuXG4gICAgICBFcXVpdmFsZW50IHRvIGBgbm90IGtleSBpbiBkYGAuXG5cbiAgIGl0ZXIoZClcblxuICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMgb2YgdGhlIGRpY3Rpb25hcnkuICBUaGlzIGlzIGFcbiAgICAgIHNob3J0Y3V0IGZvciBgYGl0ZXIoZC5rZXlzKCkpYGAuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjbGFzc21ldGhvZCBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICBgYGZyb21rZXlzKClgYCBpcyBhIGNsYXNzIG1ldGhvZCB0aGF0IHJldHVybnMgYSBuZXcgZGljdGlvbmFyeS5cbiAgICAgICp2YWx1ZSogZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgIGdldChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgUmV0dXJuIHRoZSB2YWx1ZSBmb3IgKmtleSogaWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIGVsc2VcbiAgICAgICpkZWZhdWx0Ki4gSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiwgaXQgZGVmYXVsdHMgdG8gYGBOb25lYGAsXG4gICAgICBzbyB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgaXRlbXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyBpdGVtcyAoYGAoa2V5LCB2YWx1ZSlgYFxuICAgICAgcGFpcnMpLiAgU2VlIGJlbG93IGZvciBkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cy5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgYmVsb3cgZm9yXG4gICAgICBkb2N1bWVudGF0aW9uIG9mIHZpZXcgb2JqZWN0cy5cblxuICAgcG9wKGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBJZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgcmVtb3ZlIGl0IGFuZCByZXR1cm4gaXRzIHZhbHVlLFxuICAgICAgZWxzZSByZXR1cm4gKmRlZmF1bHQqLiAgSWYgKmRlZmF1bHQqIGlzIG5vdCBnaXZlbiBhbmQgKmtleSogaXNcbiAgICAgIG5vdCBpbiB0aGUgZGljdGlvbmFyeSwgYSBgYEtleUVycm9yYGAgaXMgcmFpc2VkLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5IGBgKGtleSwgdmFsdWUpYGAgcGFpciBmcm9tIHRoZVxuICAgICAgZGljdGlvbmFyeS5cblxuICAgICAgYGBwb3BpdGVtKClgYCBpcyB1c2VmdWwgdG8gZGVzdHJ1Y3RpdmVseSBpdGVyYXRlIG92ZXIgYVxuICAgICAgZGljdGlvbmFyeSwgYXMgb2Z0ZW4gdXNlZCBpbiBzZXQgYWxnb3JpdGhtcy4gIElmIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyBlbXB0eSwgY2FsbGluZyBgYHBvcGl0ZW0oKWBgIHJhaXNlcyBhIGBgS2V5RXJyb3JgYC5cblxuICAgc2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSlcblxuICAgICAgSWYgKmtleSogaXMgaW4gdGhlIGRpY3Rpb25hcnksIHJldHVybiBpdHMgdmFsdWUuICBJZiBub3QsIGluc2VydFxuICAgICAgKmtleSogd2l0aCBhIHZhbHVlIG9mICpkZWZhdWx0KiBhbmQgcmV0dXJuICpkZWZhdWx0Ki4gICpkZWZhdWx0KlxuICAgICAgZGVmYXVsdHMgdG8gYGBOb25lYGAuXG5cbiAgIHVwZGF0ZShbb3RoZXJdKVxuXG4gICAgICBVcGRhdGUgdGhlIGRpY3Rpb25hcnkgd2l0aCB0aGUga2V5L3ZhbHVlIHBhaXJzIGZyb20gKm90aGVyKixcbiAgICAgIG92ZXJ3cml0aW5nIGV4aXN0aW5nIGtleXMuICBSZXR1cm4gYGBOb25lYGAuXG5cbiAgICAgIGBgdXBkYXRlKClgYCBhY2NlcHRzIGVpdGhlciBhbm90aGVyIGRpY3Rpb25hcnkgb2JqZWN0IG9yIGFuXG4gICAgICBpdGVyYWJsZSBvZiBrZXkvdmFsdWUgcGFpcnMgKGFzIHR1cGxlcyBvciBvdGhlciBpdGVyYWJsZXMgb2ZcbiAgICAgIGxlbmd0aCB0d28pLiAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHNwZWNpZmllZCwgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIHRoZW4gdXBkYXRlZCB3aXRoIHRob3NlIGtleS92YWx1ZSBwYWlyczogYGBkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MilgYC5cblxuICAgdmFsdWVzKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgdmFsdWVzLiAgU2VlIGJlbG93IGZvclxuICAgICAgZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMuXG5cblxuRGljdGlvbmFyeSB2aWV3IG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvYmplY3RzIHJldHVybmVkIGJ5IGBgZGljdC5rZXlzKClgYCwgYGBkaWN0LnZhbHVlcygpYGAgYW5kXG5gYGRpY3QuaXRlbXMoKWBgIGFyZSAqdmlldyBvYmplY3RzKi4gIFRoZXkgcHJvdmlkZSBhIGR5bmFtaWMgdmlldyBvblxudGhlIGRpY3Rpb25hcnlcJ3MgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5XG5jaGFuZ2VzLCB0aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLlxuXG5EaWN0aW9uYXJ5IHZpZXdzIGNhbiBiZSBpdGVyYXRlZCBvdmVyIHRvIHlpZWxkIHRoZWlyIHJlc3BlY3RpdmUgZGF0YSxcbmFuZCBzdXBwb3J0IG1lbWJlcnNoaXAgdGVzdHM6XG5cbmxlbihkaWN0dmlldylcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeS5cblxuaXRlcihkaWN0dmlldylcblxuICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGtleXMsIHZhbHVlcyBvciBpdGVtcyAocmVwcmVzZW50ZWQgYXNcbiAgIHR1cGxlcyBvZiBgYChrZXksIHZhbHVlKWBgKSBpbiB0aGUgZGljdGlvbmFyeS5cblxuICAgS2V5cyBhbmQgdmFsdWVzIGFyZSBpdGVyYXRlZCBvdmVyIGluIGFuIGFyYml0cmFyeSBvcmRlciB3aGljaCBpc1xuICAgbm9uLXJhbmRvbSwgdmFyaWVzIGFjcm9zcyBQeXRob24gaW1wbGVtZW50YXRpb25zLCBhbmQgZGVwZW5kcyBvblxuICAgdGhlIGRpY3Rpb25hcnlcJ3MgaGlzdG9yeSBvZiBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMuIElmIGtleXMsXG4gICB2YWx1ZXMgYW5kIGl0ZW1zIHZpZXdzIGFyZSBpdGVyYXRlZCBvdmVyIHdpdGggbm8gaW50ZXJ2ZW5pbmdcbiAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRpY3Rpb25hcnksIHRoZSBvcmRlciBvZiBpdGVtcyB3aWxsIGRpcmVjdGx5XG4gICBjb3JyZXNwb25kLiAgVGhpcyBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGBgKHZhbHVlLCBrZXkpYGAgcGFpcnNcbiAgIHVzaW5nIGBgemlwKClgYDogYGBwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSlgYC4gIEFub3RoZXJcbiAgIHdheSB0byBjcmVhdGUgdGhlIHNhbWUgbGlzdCBpcyBgYHBhaXJzID0gWyh2LCBrKSBmb3IgKGssIHYpIGluXG4gICBkLml0ZW1zKCldYGAuXG5cbiAgIEl0ZXJhdGluZyB2aWV3cyB3aGlsZSBhZGRpbmcgb3IgZGVsZXRpbmcgZW50cmllcyBpbiB0aGUgZGljdGlvbmFyeVxuICAgbWF5IHJhaXNlIGEgYGBSdW50aW1lRXJyb3JgYCBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgKngqIGlzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnlcJ3Mga2V5cyxcbiAgIHZhbHVlcyBvciBpdGVtcyAoaW4gdGhlIGxhdHRlciBjYXNlLCAqeCogc2hvdWxkIGJlIGEgYGAoa2V5LFxuICAgdmFsdWUpYGAgdHVwbGUpLlxuXG5LZXlzIHZpZXdzIGFyZSBzZXQtbGlrZSBzaW5jZSB0aGVpciBlbnRyaWVzIGFyZSB1bmlxdWUgYW5kIGhhc2hhYmxlLlxuSWYgYWxsIHZhbHVlcyBhcmUgaGFzaGFibGUsIHNvIHRoYXQgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycyBhcmUgdW5pcXVlXG5hbmQgaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlXG5ub3QgdHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKVxuRm9yIHNldC1saWtlIHZpZXdzLCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0XG5iYXNlIGNsYXNzIGBgY29sbGVjdGlvbnMuU2V0YGAgYXJlIGF2YWlsYWJsZSAoZm9yIGV4YW1wbGUsIGBgPT1gYCxcbmBgPGBgLCBvciBgYF5gYCkuXG5cbkFuIGV4YW1wbGUgb2YgZGljdGlvbmFyeSB2aWV3IHVzYWdlOlxuXG4gICA+Pj4gZGlzaGVzID0ge1wnZWdnc1wnOiAyLCBcJ3NhdXNhZ2VcJzogMSwgXCdiYWNvblwnOiAxLCBcJ3NwYW1cJzogNTAwfVxuICAgPj4+IGtleXMgPSBkaXNoZXMua2V5cygpXG4gICA+Pj4gdmFsdWVzID0gZGlzaGVzLnZhbHVlcygpXG5cbiAgID4+PiAjIGl0ZXJhdGlvblxuICAgPj4+IG4gPSAwXG4gICA+Pj4gZm9yIHZhbCBpbiB2YWx1ZXM6XG4gICAuLi4gICAgIG4gKz0gdmFsXG4gICA+Pj4gcHJpbnQobilcbiAgIDUwNFxuXG4gICA+Pj4gIyBrZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gdGhlIHNhbWUgb3JkZXJcbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYXVzYWdlXCcsIFwnc3BhbVwnXVxuICAgPj4+IGxpc3QodmFsdWVzKVxuICAgWzIsIDEsIDEsIDUwMF1cblxuICAgPj4+ICMgdmlldyBvYmplY3RzIGFyZSBkeW5hbWljIGFuZCByZWZsZWN0IGRpY3QgY2hhbmdlc1xuICAgPj4+IGRlbCBkaXNoZXNbXCdlZ2dzXCddXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ3NhdXNhZ2VcJ11cbiAgID4+PiBsaXN0KGtleXMpXG4gICBbXCdzcGFtXCcsIFwnYmFjb25cJ11cblxuICAgPj4+ICMgc2V0IG9wZXJhdGlvbnNcbiAgID4+PiBrZXlzICYge1wnZWdnc1wnLCBcJ2JhY29uXCcsIFwnc2FsYWRcJ31cbiAgIHtcJ2JhY29uXCd9XG4gICA+Pj4ga2V5cyBeIHtcJ3NhdXNhZ2VcJywgXCdqdWljZVwnfVxuICAge1wnanVpY2VcJywgXCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzcGFtXCd9XG4nLAogICd0eXBlc21ldGhvZHMnOiAiXG5NZXRob2RzXG4qKioqKioqXG5cbk1ldGhvZHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgdGhlIGF0dHJpYnV0ZSBub3RhdGlvbi5cblRoZXJlIGFyZSB0d28gZmxhdm9yczogYnVpbHQtaW4gbWV0aG9kcyAoc3VjaCBhcyBgYGFwcGVuZCgpYGAgb25cbmxpc3RzKSBhbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZFxud2l0aCB0aGUgdHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGVcbmBgc2VsZmBgIGFyZ3VtZW50IHRvIHRoZSBhcmd1bWVudCBsaXN0LiAgQm91bmQgbWV0aG9kcyBoYXZlIHR3b1xuc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogYGBtLl9fc2VsZl9fYGAgaXMgdGhlIG9iamVjdCBvbiB3aGljaFxudGhlIG1ldGhvZCBvcGVyYXRlcywgYW5kIGBgbS5fX2Z1bmNfX2BgIGlzIHRoZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmdcbnRoZSBtZXRob2QuICBDYWxsaW5nIGBgbShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pYGAgaXMgY29tcGxldGVseVxuZXF1aXZhbGVudCB0byBjYWxsaW5nIGBgbS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLixcbmFyZy1uKWBgLlxuXG5MaWtlIGZ1bmN0aW9uIG9iamVjdHMsIGJvdW5kIG1ldGhvZCBvYmplY3RzIHN1cHBvcnQgZ2V0dGluZyBhcmJpdHJhcnlcbmF0dHJpYnV0ZXMuICBIb3dldmVyLCBzaW5jZSBtZXRob2QgYXR0cmlidXRlcyBhcmUgYWN0dWFsbHkgc3RvcmVkIG9uXG50aGUgdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3QgKGBgbWV0aC5fX2Z1bmNfX2BgKSwgc2V0dGluZyBtZXRob2RcbmF0dHJpYnV0ZXMgb24gYm91bmQgbWV0aG9kcyBpcyBkaXNhbGxvd2VkLiAgQXR0ZW1wdGluZyB0byBzZXQgYSBtZXRob2RcbmF0dHJpYnV0ZSByZXN1bHRzIGluIGEgYGBUeXBlRXJyb3JgYCBiZWluZyByYWlzZWQuICBJbiBvcmRlciB0byBzZXQgYVxubWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQgb24gdGhlIHVuZGVybHlpbmdcbmZ1bmN0aW9uIG9iamVjdDpcblxuICAgY2xhc3MgQzpcbiAgICAgICBkZWYgbWV0aG9kKHNlbGYpOlxuICAgICAgICAgICBwYXNzXG5cbiAgIGMgPSBDKClcbiAgIGMubWV0aG9kLl9fZnVuY19fLndob2FtaSA9ICdteSBuYW1lIGlzIGMnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIsCiAgJ3R5cGVzbW9kdWxlcyc6ICJcbk1vZHVsZXNcbioqKioqKipcblxuVGhlIG9ubHkgc3BlY2lhbCBvcGVyYXRpb24gb24gYSBtb2R1bGUgaXMgYXR0cmlidXRlIGFjY2VzczpcbmBgbS5uYW1lYGAsIHdoZXJlICptKiBpcyBhIG1vZHVsZSBhbmQgKm5hbWUqIGFjY2Vzc2VzIGEgbmFtZSBkZWZpbmVkXG5pbiAqbSoncyBzeW1ib2wgdGFibGUuIE1vZHVsZSBhdHRyaWJ1dGVzIGNhbiBiZSBhc3NpZ25lZCB0by4gIChOb3RlXG50aGF0IHRoZSBgYGltcG9ydGBgIHN0YXRlbWVudCBpcyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBhbiBvcGVyYXRpb25cbm9uIGEgbW9kdWxlIG9iamVjdDsgYGBpbXBvcnQgZm9vYGAgZG9lcyBub3QgcmVxdWlyZSBhIG1vZHVsZSBvYmplY3Rcbm5hbWVkICpmb28qIHRvIGV4aXN0LCByYXRoZXIgaXQgcmVxdWlyZXMgYW4gKGV4dGVybmFsKSAqZGVmaW5pdGlvbipcbmZvciBhIG1vZHVsZSBuYW1lZCAqZm9vKiBzb21ld2hlcmUuKVxuXG5BIHNwZWNpYWwgbWVtYmVyIG9mIGV2ZXJ5IG1vZHVsZSBpcyBgYF9fZGljdF9fYGAuIFRoaXMgaXMgdGhlXG5kaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZS4gTW9kaWZ5aW5nIHRoaXNcbmRpY3Rpb25hcnkgd2lsbCBhY3R1YWxseSBjaGFuZ2UgdGhlIG1vZHVsZSdzIHN5bWJvbCB0YWJsZSwgYnV0IGRpcmVjdFxuYXNzaWdubWVudCB0byB0aGUgYGBfX2RpY3RfX2BgIGF0dHJpYnV0ZSBpcyBub3QgcG9zc2libGUgKHlvdSBjYW5cbndyaXRlIGBgbS5fX2RpY3RfX1snYSddID0gMWBgLCB3aGljaCBkZWZpbmVzIGBgbS5hYGAgdG8gYmUgYGAxYGAsIGJ1dFxueW91IGNhbid0IHdyaXRlIGBgbS5fX2RpY3RfXyA9IHt9YGApLiAgTW9kaWZ5aW5nIGBgX19kaWN0X19gYCBkaXJlY3RseVxuaXMgbm90IHJlY29tbWVuZGVkLlxuXG5Nb2R1bGVzIGJ1aWx0IGludG8gdGhlIGludGVycHJldGVyIGFyZSB3cml0dGVuIGxpa2UgdGhpczogYGA8bW9kdWxlXG4nc3lzJyAoYnVpbHQtaW4pPmBgLiAgSWYgbG9hZGVkIGZyb20gYSBmaWxlLCB0aGV5IGFyZSB3cml0dGVuIGFzXG5gYDxtb2R1bGUgJ29zJyBmcm9tICcvdXNyL2xvY2FsL2xpYi9weXRob25YLlkvb3MucHljJz5gYC5cbiIsCi0gJ3R5cGVzc2VxJzogJ1xuU2VxdWVuY2UgVHlwZXMgLS0tIGBgc3RyYGAsIGBgYnl0ZXNgYCwgYGBieXRlYXJyYXlgYCwgYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNpeCBzZXF1ZW5jZSB0eXBlczogc3RyaW5ncywgYnl0ZSBzZXF1ZW5jZXMgKGBgYnl0ZXNgYFxub2JqZWN0cyksIGJ5dGUgYXJyYXlzIChgYGJ5dGVhcnJheWBgIG9iamVjdHMpLCBsaXN0cywgdHVwbGVzLCBhbmRcbnJhbmdlIG9iamVjdHMuICBGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0IGluIGBgZGljdGBgIGFuZFxuYGBzZXRgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblN0cmluZ3MgY29udGFpbiBVbmljb2RlIGNoYXJhY3RlcnMuICBUaGVpciBsaXRlcmFscyBhcmUgd3JpdHRlbiBpblxuc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXM6IGBgXCd4eXp6eVwnYGAsIGBgImZyb2JvenoiYGAuICBTZWUgKlN0cmluZyBhbmRcbkJ5dGVzIGxpdGVyYWxzKiBmb3IgbW9yZSBhYm91dCBzdHJpbmcgbGl0ZXJhbHMuICBJbiBhZGRpdGlvbiB0byB0aGVcbmZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGhlcmUsIHRoZXJlIGFyZSBhbHNvIHN0cmluZy1zcGVjaWZpYyBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgTWV0aG9kcyogc2VjdGlvbi5cblxuQnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGNvbnRhaW4gc2luZ2xlIGJ5dGVzIC0tIHRoZSBmb3JtZXIgaXNcbmltbXV0YWJsZSB3aGlsZSB0aGUgbGF0dGVyIGlzIGEgbXV0YWJsZSBzZXF1ZW5jZS4gIEJ5dGVzIG9iamVjdHMgY2FuXG5iZSBjb25zdHJ1Y3RlZCB0aGUgY29uc3RydWN0b3IsIGBgYnl0ZXMoKWBgLCBhbmQgZnJvbSBsaXRlcmFsczsgdXNlIGFcbmBgYmBgIHByZWZpeCB3aXRoIG5vcm1hbCBzdHJpbmcgc3ludGF4OiBgYGJcJ3h5enp5XCdgYC4gIFRvIGNvbnN0cnVjdFxuYnl0ZSBhcnJheXMsIHVzZSB0aGUgYGBieXRlYXJyYXkoKWBgIGZ1bmN0aW9uLlxuXG5XYXJuaW5nOiBXaGlsZSBzdHJpbmcgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgKHJlcHJlc2VudGVkIGJ5XG4gIHN0cmluZ3Mgb2YgbGVuZ3RoIDEpLCBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZlxuICAqaW50ZWdlcnMqIChiZXR3ZWVuIDAgYW5kIDI1NSksIHJlcHJlc2VudGluZyB0aGUgQVNDSUkgdmFsdWUgb2ZcbiAgc2luZ2xlIGJ5dGVzLiAgVGhhdCBtZWFucyB0aGF0IGZvciBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgKmIqLFxuICBgYGJbMF1gYCB3aWxsIGJlIGFuIGludGVnZXIsIHdoaWxlIGBgYlswOjFdYGAgd2lsbCBiZSBhIGJ5dGVzIG9yXG4gIGJ5dGVhcnJheSBvYmplY3Qgb2YgbGVuZ3RoIDEuICBUaGUgcmVwcmVzZW50YXRpb24gb2YgYnl0ZXMgb2JqZWN0c1xuICB1c2VzIHRoZSBsaXRlcmFsIGZvcm1hdCAoYGBiXCcuLi5cJ2BgKSBzaW5jZSBpdCBpcyBnZW5lcmFsbHkgbW9yZVxuICB1c2VmdWwgdGhhbiBlLmcuIGBgYnl0ZXMoWzUwLCAxOSwgMTAwXSlgYC4gIFlvdSBjYW4gYWx3YXlzIGNvbnZlcnQgYVxuICBieXRlcyBvYmplY3QgaW50byBhIGxpc3Qgb2YgaW50ZWdlcnMgdXNpbmcgYGBsaXN0KGIpYGAuQWxzbywgd2hpbGVcbiAgaW4gcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zLCBieXRlIHN0cmluZ3MgYW5kIFVuaWNvZGUgc3RyaW5ncyBjb3VsZFxuICBiZSBleGNoYW5nZWQgZm9yIGVhY2ggb3RoZXIgcmF0aGVyIGZyZWVseSAoYmFycmluZyBlbmNvZGluZyBpc3N1ZXMpLFxuICBzdHJpbmdzIGFuZCBieXRlcyBhcmUgbm93IGNvbXBsZXRlbHkgc2VwYXJhdGUgY29uY2VwdHMuICBUaGVyZVwncyBub1xuICBpbXBsaWNpdCBlbi0vZGVjb2RpbmcgaWYgeW91IHBhc3MgYW4gb2JqZWN0IG9mIHRoZSB3cm9uZyB0eXBlLiAgQVxuICBzdHJpbmcgYWx3YXlzIGNvbXBhcmVzIHVuZXF1YWwgdG8gYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LlxuXG5MaXN0cyBhcmUgY29uc3RydWN0ZWQgd2l0aCBzcXVhcmUgYnJhY2tldHMsIHNlcGFyYXRpbmcgaXRlbXMgd2l0aFxuY29tbWFzOiBgYFthLCBiLCBjXWBgLiAgVHVwbGVzIGFyZSBjb25zdHJ1Y3RlZCBieSB0aGUgY29tbWEgb3BlcmF0b3Jcbihub3Qgd2l0aGluIHNxdWFyZSBicmFja2V0cyksIHdpdGggb3Igd2l0aG91dCBlbmNsb3NpbmcgcGFyZW50aGVzZXMsXG5idXQgYW4gZW1wdHkgdHVwbGUgbXVzdCBoYXZlIHRoZSBlbmNsb3NpbmcgcGFyZW50aGVzZXMsIHN1Y2ggYXMgYGBhLFxuYiwgY2BgIG9yIGBgKClgYC4gIEEgc2luZ2xlIGl0ZW0gdHVwbGUgbXVzdCBoYXZlIGEgdHJhaWxpbmcgY29tbWEsXG5zdWNoIGFzIGBgKGQsKWBgLlxuXG5PYmplY3RzIG9mIHR5cGUgcmFuZ2UgYXJlIGNyZWF0ZWQgdXNpbmcgdGhlIGBgcmFuZ2UoKWBgIGZ1bmN0aW9uLlxuVGhleSBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nLCBjb25jYXRlbmF0aW9uIG9yIHJlcGV0aXRpb24sIGFuZCB1c2luZ1xuYGBpbmBgLCBgYG5vdCBpbmBgLCBgYG1pbigpYGAgb3IgYGBtYXgoKWBgIG9uIHRoZW0gaXMgaW5lZmZpY2llbnQuXG5cbk1vc3Qgc2VxdWVuY2UgdHlwZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuICBUaGUgYGBpbmBgIGFuZFxuYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUgY29tcGFyaXNvblxub3BlcmF0aW9ucy4gIFRoZSBgYCtgYCBhbmQgYGAqYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzXG50aGUgY29ycmVzcG9uZGluZyBudW1lcmljIG9wZXJhdGlvbnMuIFszXSBBZGRpdGlvbmFsIG1ldGhvZHMgYXJlXG5wcm92aWRlZCBmb3IgKk11dGFibGUgU2VxdWVuY2UgVHlwZXMqLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZTsgKm4qLCAqaSogYW5kICpqKiBhcmVcbmludGVnZXJzOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58IGBgeCBpbiBzYGAgICAgICAgICB8IGBgVHJ1ZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYEZhbHNlYGAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgeCBub3QgaW4gc2BgICAgICB8IGBgRmFsc2VgYCBpZiBhbiBpdGVtIG9mICpzKiBpcyAgIHwgKDEpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGVxdWFsIHRvICp4KiwgZWxzZSBgYFRydWVgYCAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyArIHRgYCAgICAgICAgICB8IHRoZSBjb25jYXRlbmF0aW9uIG9mICpzKiBhbmQgKnQqIHwgKDYpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcyAqIG4sIG4gKiBzYGAgICB8ICpuKiBzaGFsbG93IGNvcGllcyBvZiAqcyogICAgICAgIHwgKDIpICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IGNvbmNhdGVuYXRlZCAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpXWBgICAgICAgICAgICB8ICppKlwndGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICAgICB8ICgzKSAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXWBgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdYGAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYGxlbihzKWBgICAgICAgICAgfCBsZW5ndGggb2YgKnMqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1pbihzKWBgICAgICAgICAgfCBzbWFsbGVzdCBpdGVtIG9mICpzKiAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYG1heChzKWBgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoaSlgYCAgICAgfCBpbmRleCBvZiB0aGUgZmlyc3Qgb2NjdXJlbmNlIG9mICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCAqaSogaW4gKnMqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoaSlgYCAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJlbmNlcyBvZiAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgfCAqaSogaW4gKnMqICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZSB0eXBlcyBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLCB0dXBsZXMgYW5kXG5saXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nIGNvcnJlc3BvbmRpbmdcbmVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5IGVsZW1lbnQgbXVzdFxuY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBoYXZlXG50aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpbiB0aGUgbGFuZ3VhZ2VcbnJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGVuICpzKiBpcyBhIHN0cmluZyBvYmplY3QsIHRoZSBgYGluYGAgYW5kIGBgbm90IGluYGAgb3BlcmF0aW9uc1xuICAgYWN0IGxpa2UgYSBzdWJzdHJpbmcgdGVzdC5cblxuMi4gVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgPj4+IGxpc3RzXG4gICBbW10sIFtdLCBbXV1cbiAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgID4+PiBsaXN0c1xuICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmdcbiAgIGFuIGVtcHR5IGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVyc1xuICAgdG8pIHRoaXMgc2luZ2xlIGVtcHR5IGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZlxuICAgYGBsaXN0c2BgIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICA+Pj4gbGlzdHNcbiAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGVcbiAgIHN0cmluZzogYGBsZW4ocykgKyBpYGAgb3IgYGBsZW4ocykgKyBqYGAgaXMgc3Vic3RpdHV0ZWQuICBCdXQgbm90ZVxuICAgdGhhdCBgYC0wYGAgaXMgc3RpbGwgYGAwYGAuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgYGBpIDw9IGsgPCBqYGAuICBJZiAqaSogb3IgKmoqIGlzXG4gICBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCwgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgb21pdHRlZCBvclxuICAgYGBOb25lYGAsIHVzZSBgYDBgYC4gIElmICpqKiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCB1c2VcbiAgIGBgbGVuKHMpYGAuICBJZiAqaSogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICpqKiwgdGhlIHNsaWNlIGlzXG4gICBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgYGB4ID0gaSArIG4qa2BgIHN1Y2ggdGhhdCBgYDAgPD0gbiA8XG4gICAoai1pKS9rYGAuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlIGBgaWBgLCBgYGkra2BgLFxuICAgYGBpKzIqa2BgLCBgYGkrMyprYGAgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXRcbiAgIG5ldmVyIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gYGBsZW4ocylgYCxcbiAgIHVzZSBgYGxlbihzKWBgLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhleSBiZWNvbWVcbiAgICJlbmQiIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKlxuICAgY2Fubm90IGJlIHplcm8uIElmICprKiBpcyBgYE5vbmVgYCwgaXQgaXMgdHJlYXRlZCBsaWtlIGBgMWBgLlxuXG42LiAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIElmICpzKiBhbmQgKnQqIGFyZSBib3RoIHN0cmluZ3MsXG4gICBzb21lIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgc3VjaCBhcyBDUHl0aG9uIGNhbiB1c3VhbGx5IHBlcmZvcm0gYW5cbiAgIGluLXBsYWNlIG9wdGltaXphdGlvbiBmb3IgYXNzaWdubWVudHMgb2YgdGhlIGZvcm0gYGBzID0gcyArIHRgYCBvclxuICAgYGBzICs9IHRgYC4gIFdoZW4gYXBwbGljYWJsZSwgdGhpcyBvcHRpbWl6YXRpb24gbWFrZXMgcXVhZHJhdGljXG4gICBydW4tdGltZSBtdWNoIGxlc3MgbGlrZWx5LiAgVGhpcyBvcHRpbWl6YXRpb24gaXMgYm90aCB2ZXJzaW9uIGFuZFxuICAgaW1wbGVtZW50YXRpb24gZGVwZW5kZW50LiAgRm9yIHBlcmZvcm1hbmNlIHNlbnNpdGl2ZSBjb2RlLCBpdCBpc1xuICAgcHJlZmVyYWJsZSB0byB1c2UgdGhlIGBgc3RyLmpvaW4oKWBgIG1ldGhvZCB3aGljaCBhc3N1cmVzXG4gICBjb25zaXN0ZW50IGxpbmVhciBjb25jYXRlbmF0aW9uIHBlcmZvcm1hbmNlIGFjcm9zcyB2ZXJzaW9ucyBhbmRcbiAgIGltcGxlbWVudGF0aW9ucy5cblxuXG5TdHJpbmcgTWV0aG9kc1xuPT09PT09PT09PT09PT1cblxuU3RyaW5nIG9iamVjdHMgc3VwcG9ydCB0aGUgbWV0aG9kcyBsaXN0ZWQgYmVsb3cuICBOb3RlIHRoYXQgbm9uZSBvZlxudGhlc2UgbWV0aG9kcyB0YWtlIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JbiBhZGRpdGlvbiwgUHl0aG9uXCdzIHN0cmluZ3Mgc3VwcG9ydCB0aGUgc2VxdWVuY2UgdHlwZSBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTZXF1ZW5jZSBUeXBlcyAtLS0gc3RyLCBieXRlcywgYnl0ZWFycmF5LCBsaXN0LFxudHVwbGUsIHJhbmdlKiBzZWN0aW9uLiBUbyBvdXRwdXQgZm9ybWF0dGVkIHN0cmluZ3MsIHNlZSB0aGUgKlN0cmluZ1xuRm9ybWF0dGluZyogc2VjdGlvbi4gQWxzbywgc2VlIHRoZSBgYHJlYGAgbW9kdWxlIGZvciBzdHJpbmcgZnVuY3Rpb25zXG5iYXNlZCBvbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuXG5zdHIuY2FwaXRhbGl6ZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGl0cyBmaXJzdCBjaGFyYWN0ZXIgY2FwaXRhbGl6ZWRcbiAgIGFuZCB0aGUgcmVzdCBsb3dlcmNhc2VkLlxuXG5zdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZVxuICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLlxuXG5zdHIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBudW1iZXIgb2Ygbm9uLW92ZXJsYXBwaW5nIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAqc3ViKlxuICAgaW4gdGhlIHJhbmdlIFsqc3RhcnQqLCAqZW5kKl0uICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmRcbiAgICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi5cblxuc3RyLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiAgRGVmYXVsdFxuICAgZW5jb2RpbmcgaXMgdGhlIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmVcbiAgIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3JcbiAgICplcnJvcnMqIGlzIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgLCBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kXG4gICBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZVxuICAgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZVxuICAgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSAqZm9ybWF0X3N0cmluZypcbiAgIGFyZ3VtZW50IGNhbiBjb250YWluIGxpdGVyYWwgdGV4dCBvciByZXBsYWNlbWVudCBmaWVsZHMgZGVsaW1pdGVkXG4gICBieSBicmFjZXMgYGB7fWBgLiAgRWFjaCByZXBsYWNlbWVudCBmaWVsZCBjb250YWlucyBlaXRoZXIgdGhlXG4gICBudW1lcmljIGluZGV4IG9mIGEgcG9zaXRpb25hbCBhcmd1bWVudCwgb3IgdGhlIG5hbWUgb2YgYSBrZXl3b3JkXG4gICBhcmd1bWVudC4gIFJldHVybnMgYSBjb3B5IG9mICpmb3JtYXRfc3RyaW5nKiB3aGVyZSBlYWNoIHJlcGxhY2VtZW50XG4gICBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmdcbiAgIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZFxuICAgdG8gZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVRcbiAgIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTGwiLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCB1cHBlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTHUiLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICpzZXEqLCBpbmNsdWRpbmcgYGBieXRlc2BgIG9iamVjdHMuICBUaGVcbiAgIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgIGBgc3RyLnRyYW5zbGF0ZSgpYGAuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYHJmaW5kKClgYCBidXQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKlxuICAgaXMgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG5zdHIucnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAgICAgICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMpXG5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIGBgbGVuKHMpYGAuXG5cblxuT2xkIFN0cmluZyBGb3JtYXR0aW5nIE9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbk5vdGU6IFRoZSBmb3JtYXR0aW5nIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIG9ic29sZXRlIGFuZCBtYXkgZ29cbiAgYXdheSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLiAgVXNlIHRoZSBuZXcgKlN0cmluZyBGb3JtYXR0aW5nKlxuICBpbiBuZXcgY29kZS5cblxuU3RyaW5nIG9iamVjdHMgaGF2ZSBvbmUgdW5pcXVlIGJ1aWx0LWluIG9wZXJhdGlvbjogdGhlIGBgJWBgIG9wZXJhdG9yXG4obW9kdWxvKS4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSBzdHJpbmcgKmZvcm1hdHRpbmcqIG9yXG4qaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuIEdpdmVuIGBgZm9ybWF0ICUgdmFsdWVzYGAgKHdoZXJlICpmb3JtYXQqIGlzXG5hIHN0cmluZyksIGBgJWBgIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbnMgaW4gKmZvcm1hdCogYXJlIHJlcGxhY2VkXG53aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZiAqdmFsdWVzKi4gVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIHRoZVxudXNpbmcgYGBzcHJpbnRmKClgYCBpbiB0aGUgQyBsYW5ndWFnZS5cblxuSWYgKmZvcm1hdCogcmVxdWlyZXMgYSBzaW5nbGUgYXJndW1lbnQsICp2YWx1ZXMqIG1heSBiZSBhIHNpbmdsZSBub24tXG50dXBsZSBvYmplY3QuIFs0XSAgT3RoZXJ3aXNlLCAqdmFsdWVzKiBtdXN0IGJlIGEgdHVwbGUgd2l0aCBleGFjdGx5XG50aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZywgb3IgYSBzaW5nbGVcbm1hcHBpbmcgb2JqZWN0IChmb3IgZXhhbXBsZSwgYSBkaWN0aW9uYXJ5KS5cblxuQSBjb252ZXJzaW9uIHNwZWNpZmllciBjb250YWlucyB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzIGFuZCBoYXMgdGhlXG5mb2xsb3dpbmcgY29tcG9uZW50cywgd2hpY2ggbXVzdCBvY2N1ciBpbiB0aGlzIG9yZGVyOlxuXG4xLiBUaGUgYGBcJyVcJ2BgIGNoYXJhY3Rlciwgd2hpY2ggbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZXIuXG5cbjIuIE1hcHBpbmcga2V5IChvcHRpb25hbCksIGNvbnNpc3Rpbmcgb2YgYSBwYXJlbnRoZXNpc2VkIHNlcXVlbmNlIG9mXG4gICBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgYGAoc29tZW5hbWUpYGApLlxuXG4zLiBDb252ZXJzaW9uIGZsYWdzIChvcHRpb25hbCksIHdoaWNoIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHNvbWVcbiAgIGNvbnZlcnNpb24gdHlwZXMuXG5cbjQuIE1pbmltdW0gZmllbGQgd2lkdGggKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBhcyBhbiBgYFwnKlwnYGBcbiAgIChhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGggaXMgcmVhZCBmcm9tIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlXG4gICB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZSBvYmplY3QgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGVcbiAgIG1pbmltdW0gZmllbGQgd2lkdGggYW5kIG9wdGlvbmFsIHByZWNpc2lvbi5cblxuNS4gUHJlY2lzaW9uIChvcHRpb25hbCksIGdpdmVuIGFzIGEgYGBcJy5cJ2BgIChkb3QpIGZvbGxvd2VkIGJ5IHRoZVxuICAgcHJlY2lzaW9uLiAgSWYgc3BlY2lmaWVkIGFzIGBgXCcqXCdgYCAoYW4gYXN0ZXJpc2spLCB0aGUgYWN0dWFsIHdpZHRoXG4gICBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgdHVwbGUgaW4gKnZhbHVlcyosIGFuZCB0aGVcbiAgIHZhbHVlIHRvIGNvbnZlcnQgY29tZXMgYWZ0ZXIgdGhlIHByZWNpc2lvbi5cblxuNi4gTGVuZ3RoIG1vZGlmaWVyIChvcHRpb25hbCkuXG5cbjcuIENvbnZlcnNpb24gdHlwZS5cblxuV2hlbiB0aGUgcmlnaHQgYXJndW1lbnQgaXMgYSBkaWN0aW9uYXJ5IChvciBvdGhlciBtYXBwaW5nIHR5cGUpLCB0aGVuXG50aGUgZm9ybWF0cyBpbiB0aGUgc3RyaW5nICptdXN0KiBpbmNsdWRlIGEgcGFyZW50aGVzaXNlZCBtYXBwaW5nIGtleVxuaW50byB0aGF0IGRpY3Rpb25hcnkgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBgXCclXCdgYCBjaGFyYWN0ZXIuXG5UaGUgbWFwcGluZyBrZXkgc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuXG5Gb3IgZXhhbXBsZTpcblxuPj4+IHByaW50KFwnJShsYW5ndWFnZSlzIGhhcyAlKG51bWJlcikwM2QgcXVvdGUgdHlwZXMuXCcgJVxuLi4uICAgICAgIHtcJ2xhbmd1YWdlXCc6ICJQeXRob24iLCAibnVtYmVyIjogMn0pXG5QeXRob24gaGFzIDAwMiBxdW90ZSB0eXBlcy5cblxuSW4gdGhpcyBjYXNlIG5vIGBgKmBgIHNwZWNpZmllcnMgbWF5IG9jY3VyIGluIGEgZm9ybWF0IChzaW5jZSB0aGV5XG5yZXF1aXJlIGEgc2VxdWVudGlhbCBwYXJhbWV0ZXIgbGlzdCkuXG5cblRoZSBjb252ZXJzaW9uIGZsYWcgY2hhcmFjdGVycyBhcmU6XG5cbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgRmxhZyAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBcJyNcJ2BgICAgfCBUaGUgdmFsdWUgY29udmVyc2lvbiB3aWxsIHVzZSB0aGUgImFsdGVybmF0ZSBmb3JtIiAod2hlcmUgZGVmaW5lZCAgICAgfFxufCAgICAgICAgICAgfCBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnMFwnYGAgICB8IFRoZSBjb252ZXJzaW9uIHdpbGwgYmUgemVybyBwYWRkZWQgZm9yIG51bWVyaWMgdmFsdWVzLiAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCctXCdgYCAgIHwgVGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBsZWZ0IGFkanVzdGVkIChvdmVycmlkZXMgdGhlIGBgXCcwXCdgYCAgICAgICAgICAgfFxufCAgICAgICAgICAgfCBjb252ZXJzaW9uIGlmIGJvdGggYXJlIGdpdmVuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnIFwnYGAgICB8IChhIHNwYWNlKSBBIGJsYW5rIHNob3VsZCBiZSBsZWZ0IGJlZm9yZSBhIHBvc2l0aXZlIG51bWJlciAob3IgZW1wdHkgICB8XG58ICAgICAgICAgICB8IHN0cmluZykgcHJvZHVjZWQgYnkgYSBzaWduZWQgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCcrXCdgYCAgIHwgQSBzaWduIGNoYXJhY3RlciAoYGBcJytcJ2BgIG9yIGBgXCctXCdgYCkgd2lsbCBwcmVjZWRlIHRoZSBjb252ZXJzaW9uICAgICB8XG58ICAgICAgICAgICB8IChvdmVycmlkZXMgYSAic3BhY2UiIGZsYWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkEgbGVuZ3RoIG1vZGlmaWVyIChgYGhgYCwgYGBsYGAsIG9yIGBgTGBgKSBtYXkgYmUgcHJlc2VudCwgYnV0IGlzXG5pZ25vcmVkIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIFB5dGhvbiAtLSBzbyBlLmcuIGBgJWxkYGAgaXNcbmlkZW50aWNhbCB0byBgYCVkYGAuXG5cblRoZSBjb252ZXJzaW9uIHR5cGVzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBDb252ZXJzaW9uICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFwnZFwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdpXCdgYCAgICAgIHwgU2lnbmVkIGludGVnZXIgZGVjaW1hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ29cJ2BgICAgICAgfCBTaWduZWQgb2N0YWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgxKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwndVwnYGAgICAgICB8IE9ic29sZXRlIHR5cGUgLS0gaXQgaXMgaWRlbnRpY2FsIHRvIGBgXCdkXCdgYC4gICAgICAgICAgfCAoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnWFwnYGAgICAgICB8IFNpZ25lZCBoZXhhZGVjaW1hbCAodXBwZXJjYXNlKS4gICAgICAgICAgICAgICAgICAgICAgIHwgKDIpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdlXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0IChsb3dlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0VcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKHVwcGVyY2FzZSkuICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdGXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgbG93ZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnR1wnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyB1cHBlcmNhc2UgZXhwb25lbnRpYWwgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICB8IGZvcm1hdCBpZiBleHBvbmVudCBpcyBsZXNzIHRoYW4gLTQgb3Igbm90IGxlc3MgdGhhbiAgIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHByZWNpc2lvbiwgZGVjaW1hbCBmb3JtYXQgb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdjXCdgYCAgICAgIHwgU2luZ2xlIGNoYXJhY3RlciAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSBjaGFyYWN0ZXIgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgc3RyaW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3JcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgcmVwcigpYGApLiB8ICg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnc1wnYGAgICAgICB8IFN0cmluZyAoY29udmVydHMgYW55IFB5dGhvbiBvYmplY3QgdXNpbmcgYGBzdHIoKWBgKS4gIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCclXCdgYCAgICAgIHwgTm8gYXJndW1lbnQgaXMgY29udmVydGVkLCByZXN1bHRzIGluIGEgYGBcJyVcJ2BgICAgICAgICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBjaGFyYWN0ZXIgaW4gdGhlIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgemVybyAoYGBcJzBcJ2BgKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4yLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIGEgbGVhZGluZyBgYFwnMHhcJ2BgIG9yIGBgXCcwWFwnYGAgKGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGUgYGBcJ3hcJ2BgIG9yIGBgXCdYXCdgYCBmb3JtYXQgd2FzIHVzZWQpIHRvIGJlIGluc2VydGVkXG4gICBiZXR3ZWVuIGxlZnQtaGFuZCBwYWRkaW5nIGFuZCB0aGUgZm9ybWF0dGluZyBvZiB0aGUgbnVtYmVyIGlmIHRoZVxuICAgbGVhZGluZyBjaGFyYWN0ZXIgb2YgdGhlIHJlc3VsdCBpcyBub3QgYWxyZWFkeSBhIHplcm8uXG5cbjMuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICAgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjQuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBhbmQgdHJhaWxpbmcgemVyb2VzIGFyZSBub3QgcmVtb3ZlZCBhcyB0aGV5IHdvdWxkIG90aGVyd2lzZVxuICAgYmUuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBiZWZvcmVcbiAgIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBhbmQgZGVmYXVsdHMgdG8gNi5cblxuNS4gVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVzZWQuXG5cbjEuIFNlZSAqKlBFUCAyMzcqKi5cblxuU2luY2UgUHl0aG9uIHN0cmluZ3MgaGF2ZSBhbiBleHBsaWNpdCBsZW5ndGgsIGBgJXNgYCBjb252ZXJzaW9ucyBkb1xubm90IGFzc3VtZSB0aGF0IGBgXCdcXDBcJ2BgIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogYGAlZmBgIGNvbnZlcnNpb25zIGZvciBudW1iZXJzIHdob3NlIGFic29sdXRlXG52YWx1ZSBpcyBvdmVyIDFlNTAgYXJlIG5vIGxvbmdlciByZXBsYWNlZCBieSBgYCVnYGAgY29udmVyc2lvbnMuXG5cbkFkZGl0aW9uYWwgc3RyaW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RhbmRhcmQgbW9kdWxlc1xuYGBzdHJpbmdgYCBhbmQgYGByZWBgLlxuXG5cblJhbmdlIFR5cGVcbj09PT09PT09PT1cblxuVGhlIGBgcmFuZ2VgYCB0eXBlIGlzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB3aGljaCBpcyBjb21tb25seSB1c2VkIGZvclxubG9vcGluZy4gIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlIGBgcmFuZ2VgYCB0eXBlIGlzIHRoYXQgYW4gYGByYW5nZWBgXG5vYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSBhbW91bnQgb2YgbWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemVcbm9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzLiAgVGhlcmUgYXJlIG5vIGNvbnNpc3RlbnQgcGVyZm9ybWFuY2VcbmFkdmFudGFnZXMuXG5cblJhbmdlIG9iamVjdHMgaGF2ZSB2ZXJ5IGxpdHRsZSBiZWhhdmlvcjogdGhleSBvbmx5IHN1cHBvcnQgaW5kZXhpbmcsXG5pdGVyYXRpb24sIGFuZCB0aGUgYGBsZW4oKWBgIGZ1bmN0aW9uLlxuXG5cbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT1cblxuTGlzdCBhbmQgYnl0ZWFycmF5IG9iamVjdHMgc3VwcG9ydCBhZGRpdGlvbmFsIG9wZXJhdGlvbnMgdGhhdCBhbGxvd1xuaW4tcGxhY2UgbW9kaWZpY2F0aW9uIG9mIHRoZSBvYmplY3QuICBPdGhlciBtdXRhYmxlIHNlcXVlbmNlIHR5cGVzXG4od2hlbiBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UpIHNob3VsZCBhbHNvIHN1cHBvcnQgdGhlc2Ugb3BlcmF0aW9ucy5cblN0cmluZ3MgYW5kIHR1cGxlcyBhcmUgaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGVzOiBzdWNoIG9iamVjdHMgY2Fubm90XG5iZSBtb2RpZmllZCBvbmNlIGNyZWF0ZWQuIFRoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBvblxubXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyAod2hlcmUgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QpLlxuXG5Ob3RlIHRoYXQgd2hpbGUgbGlzdHMgYWxsb3cgdGhlaXIgaXRlbXMgdG8gYmUgb2YgYW55IHR5cGUsIGJ5dGVhcnJheVxub2JqZWN0ICJpdGVtcyIgYXJlIGFsbCBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58IGBgc1tpXSA9IHhgYCAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdID0gdGBgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmpdYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTpqXSA9IFtdYGAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a10gPSB0YGAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiBgYHNbaTpqOmtdYGAgYXJlIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqOmtdYGAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2k6ajprXWBgIGZyb20gdGhlIGxpc3QgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5hcHBlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0gICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5leHRlbmQoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2xlbihzKTpsZW4ocyldID0geGBgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuY291bnQoeClgYCAgICAgICAgICAgICAgICAgfCByZXR1cm4gbnVtYmVyIG9mICppKlwncyBmb3Igd2hpY2ggfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaV0gPT0geGBgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluZGV4KHhbLCBpWywgal1dKWBgICAgICAgIHwgcmV0dXJuIHNtYWxsZXN0ICprKiBzdWNoIHRoYXQgICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNba10gPT0geGBgIGFuZCBgYGkgPD0gayA8IGpgYCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmluc2VydChpLCB4KWBgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbaTppXSA9IFt4XWBgICAgICAgICAgfCAoNCkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5wb3AoW2ldKWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGB4ID0gc1tpXTsgZGVsIHNbaV07ICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIHhgYCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZW1vdmUoeClgYCAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBkZWwgc1tzLmluZGV4KHgpXWBgICAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmV2ZXJzZSgpYGAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg2KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuc29ydChba2V5WywgcmV2ZXJzZV1dKWBgICAgfCBzb3J0IHRoZSBpdGVtcyBvZiAqcyogaW4gcGxhY2UgICB8ICg2KSwgKDcpLCAoOCkgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuICp4KiBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdC5cblxuMy4gUmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouIFdoZW4gYSBuZWdhdGl2ZVxuICAgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQgb3IgdGhpcmQgcGFyYW1ldGVyIHRvIHRoZSBgYGluZGV4KClgYFxuICAgbWV0aG9kLCB0aGUgc2VxdWVuY2UgbGVuZ3RoIGlzIGFkZGVkLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy4gIElmIGl0XG4gICBpcyBzdGlsbCBuZWdhdGl2ZSwgaXQgaXMgdHJ1bmNhdGVkIHRvIHplcm8sIGFzIGZvciBzbGljZSBpbmRpY2VzLlxuXG40LiBXaGVuIGEgbmVnYXRpdmUgaW5kZXggaXMgcGFzc2VkIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlXG4gICBgYGluc2VydCgpYGAgbWV0aG9kLCB0aGUgc2VxdWVuY2UgbGVuZ3RoIGlzIGFkZGVkLCBhcyBmb3Igc2xpY2VcbiAgIGluZGljZXMuICBJZiBpdCBpcyBzdGlsbCBuZWdhdGl2ZSwgaXQgaXMgdHJ1bmNhdGVkIHRvIHplcm8sIGFzIGZvclxuICAgc2xpY2UgaW5kaWNlcy5cblxuNS4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byBgYC0xYGAsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuNi4gVGhlIGBgc29ydCgpYGAgYW5kIGBgcmV2ZXJzZSgpYGAgbWV0aG9kcyBtb2RpZnkgdGhlIHNlcXVlbmNlIGluXG4gICBwbGFjZSBmb3IgZWNvbm9teSBvZiBzcGFjZSB3aGVuIHNvcnRpbmcgb3IgcmV2ZXJzaW5nIGEgbGFyZ2VcbiAgIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHlvdSB0aGF0IHRoZXkgb3BlcmF0ZSBieSBzaWRlIGVmZmVjdCwgdGhleVxuICAgZG9uXCd0IHJldHVybiB0aGUgc29ydGVkIG9yIHJldmVyc2VkIHNlcXVlbmNlLlxuXG43LiBUaGUgYGBzb3J0KClgYCBtZXRob2QgdGFrZXMgb3B0aW9uYWwgYXJndW1lbnRzIGZvciBjb250cm9sbGluZyB0aGVcbiAgIGNvbXBhcmlzb25zLiAgRWFjaCBtdXN0IGJlIHNwZWNpZmllZCBhcyBhIGtleXdvcmQgYXJndW1lbnQuXG5cbiAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG8gZXh0cmFjdFxuICAgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50OiBgYGtleT1zdHIubG93ZXJgYC4gIFRoZVxuICAgZGVmYXVsdCB2YWx1ZSBpcyBgYE5vbmVgYC5cblxuICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgVGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzIHN0YWJsZVxuICAgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0XG4gICBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW4gbXVsdGlwbGUgcGFzc2VzXG4gICAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnkgZ3JhZGUpLlxuXG4gICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbWFrZXMgdGhlIGxpc3QgYXBwZWFyXG4gICBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIGlmIGl0IGNhbiBkZXRlY3RcbiAgIHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuXG44LiBgYHNvcnQoKWBgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYGBieXRlYXJyYXlgYCBvYmplY3RzLlxuXG5cbkJ5dGVzIGFuZCBCeXRlIEFycmF5IE1ldGhvZHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzLCBiZWluZyAic3RyaW5ncyBvZiBieXRlcyIsIGhhdmUgYWxsXG5tZXRob2RzIGZvdW5kIG9uIHN0cmluZ3MsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgYGVuY29kZSgpYGAsXG5gYGZvcm1hdCgpYGAgYW5kIGBgaXNpZGVudGlmaWVyKClgYCwgd2hpY2ggZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aFxudGhlc2UgdHlwZXMuICBGb3IgY29udmVydGluZyB0aGUgb2JqZWN0cyB0byBzdHJpbmdzLCB0aGV5IGhhdmUgYVxuYGBkZWNvZGUoKWBgIG1ldGhvZC5cblxuV2hlcmV2ZXIgb25lIG9mIHRoZXNlIG1ldGhvZHMgbmVlZHMgdG8gaW50ZXJwcmV0IHRoZSBieXRlcyBhc1xuY2hhcmFjdGVycyAoZS5nLiB0aGUgYGBpcy4uLigpYGAgbWV0aG9kcyksIHRoZSBBU0NJSSBjaGFyYWN0ZXIgc2V0IGlzXG5hc3N1bWVkLlxuXG5Ob3RlOiBUaGUgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgZG9uXCd0IGFjY2VwdCBzdHJpbmdzIGFzXG4gIHRoZWlyIGFyZ3VtZW50cywganVzdCBhcyB0aGUgbWV0aG9kcyBvbiBzdHJpbmdzIGRvblwndCBhY2NlcHQgYnl0ZXNcbiAgYXMgdGhlaXIgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRvIHdyaXRlXG5cbiAgICAgYSA9ICJhYmMiXG4gICAgIGIgPSBhLnJlcGxhY2UoImEiLCAiZiIpXG5cbiAgYW5kXG5cbiAgICAgYSA9IGIiYWJjIlxuICAgICBiID0gYS5yZXBsYWNlKGIiYSIsIGIiZiIpXG5cbmJ5dGVzLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSlcbmJ5dGVhcnJheS5kZWNvZGUoW2VuY29kaW5nWywgZXJyb3JzXV0pXG5cbiAgIFJldHVybiBhIHN0cmluZyBkZWNvZGVkIGZyb20gdGhlIGdpdmVuIGJ5dGVzLiAgRGVmYXVsdCBlbmNvZGluZyBpc1xuICAgdGhlIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0XG4gICBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXNcbiAgIGBgXCdzdHJpY3RcJ2BgLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGFcbiAgIGBgVW5pY29kZUVycm9yYGAuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLFxuICAgYGBcJ3JlcGxhY2VcJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYVxuICAgYGBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKWBgLCBzZWUgc2VjdGlvbiAqQ29kZWMgQmFzZSBDbGFzc2VzKi4gRm9yXG4gICBhIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuVGhlIGJ5dGVzIGFuZCBieXRlYXJyYXkgdHlwZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGNsYXNzIG1ldGhvZDpcblxuY2xhc3NtZXRob2QgYnl0ZXMuZnJvbWhleChzdHJpbmcpXG5jbGFzc21ldGhvZCBieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpXG5cbiAgIFRoaXMgYGBieXRlc2BgIGNsYXNzIG1ldGhvZCByZXR1cm5zIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCxcbiAgIGRlY29kaW5nIHRoZSBnaXZlbiBzdHJpbmcgb2JqZWN0LiAgVGhlIHN0cmluZyBtdXN0IGNvbnRhaW4gdHdvXG4gICBoZXhhZGVjaW1hbCBkaWdpdHMgcGVyIGJ5dGUsIHNwYWNlcyBhcmUgaWdub3JlZC5cblxuICAgPj4+IGJ5dGVzLmZyb21oZXgoXCdmMCBmMWYyICBcJylcbiAgIGJcJ1xceGYwXFx4ZjFcXHhmMlwnXG5cblRoZSBtYWtldHJhbnMgYW5kIHRyYW5zbGF0ZSBtZXRob2RzIGRpZmZlciBpbiBzZW1hbnRpY3MgZnJvbSB0aGVcbnZlcnNpb25zIGF2YWlsYWJsZSBvbiBzdHJpbmdzOlxuXG5ieXRlcy50cmFuc2xhdGUodGFibGVbLCBkZWxldGVdKVxuYnl0ZWFycmF5LnRyYW5zbGF0ZSh0YWJsZVssIGRlbGV0ZV0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3Qgd2hlcmUgYWxsIGJ5dGVzXG4gICBvY2N1cnJpbmcgaW4gdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpkZWxldGUqIGFyZSByZW1vdmVkLCBhbmQgdGhlXG4gICByZW1haW5pbmcgYnl0ZXMgaGF2ZSBiZWVuIG1hcHBlZCB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvblxuICAgdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoIDI1Ni5cblxuICAgWW91IGNhbiB1c2UgdGhlIGBgYnl0ZXMubWFrZXRyYW5zKClgYCBtZXRob2QgdG8gY3JlYXRlIGFcbiAgIHRyYW5zbGF0aW9uIHRhYmxlLlxuXG4gICBTZXQgdGhlICp0YWJsZSogYXJndW1lbnQgdG8gYGBOb25lYGAgZm9yIHRyYW5zbGF0aW9ucyB0aGF0IG9ubHlcbiAgIGRlbGV0ZSBjaGFyYWN0ZXJzOlxuXG4gICAgICA+Pj4gYlwncmVhZCB0aGlzIHNob3J0IHRleHRcJy50cmFuc2xhdGUoTm9uZSwgYlwnYWVpb3VcJylcbiAgICAgIGJcJ3JkIHRocyBzaHJ0IHR4dFwnXG5cbnN0YXRpYyBieXRlcy5tYWtldHJhbnMoZnJvbSwgdG8pXG5zdGF0aWMgYnl0ZWFycmF5Lm1ha2V0cmFucyhmcm9tLCB0bylcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICBgYGJ5dGVzLnRyYW5zbGF0ZSgpYGAgdGhhdCB3aWxsIG1hcCBlYWNoIGNoYXJhY3RlciBpbiAqZnJvbSogaW50b1xuICAgdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiAqdG8qOyAqZnJvbSogYW5kICp0byogbXVzdCBiZVxuICAgYnl0ZXMgb2JqZWN0cyBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMS5cbicsCi0gJ3R5cGVzc2VxLW11dGFibGUnOiAnXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cbkxpc3QgYW5kIGJ5dGVhcnJheSBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3dcbmluLXBsYWNlIG1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiAgT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlc1xuKHdoZW4gYWRkZWQgdG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuXG5TdHJpbmdzIGFuZCB0dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdFxuYmUgbW9kaWZpZWQgb25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb25cbm11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KS5cblxuTm90ZSB0aGF0IHdoaWxlIGxpc3RzIGFsbG93IHRoZWlyIGl0ZW1zIHRvIGJlIG9mIGFueSB0eXBlLCBieXRlYXJyYXlcbm9iamVjdCAiaXRlbXMiIGFyZSBhbGwgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9IHhgYCB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIG51bWJlciBvZiAqaSpcJ3MgZm9yIHdoaWNoIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2ldID09IHhgYCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgICAgICB8IHJldHVybiBzbWFsbGVzdCAqayogc3VjaCB0aGF0ICAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2tdID09IHhgYCBhbmQgYGBpIDw9IGsgPCBqYGAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6aV0gPSBbeF1gYCAgICAgICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgeCA9IHNbaV07IGRlbCBzW2ldOyAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJldHVybiB4YGAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgZGVsIHNbcy5pbmRleCh4KV1gYCAgICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnNvcnQoW2tleVssIHJldmVyc2VdXSlgYCAgIHwgc29ydCB0aGUgaXRlbXMgb2YgKnMqIGluIHBsYWNlICAgfCAoNiksICg3KSwgKDgpICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiAqeCogY2FuIGJlIGFueSBpdGVyYWJsZSBvYmplY3QuXG5cbjMuIFJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuIGEgbmVnYXRpdmVcbiAgIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIG9yIHRoaXJkIHBhcmFtZXRlciB0byB0aGUgYGBpbmRleCgpYGBcbiAgIG1ldGhvZCwgdGhlIHNlcXVlbmNlIGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdFxuICAgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuNC4gV2hlbiBhIG5lZ2F0aXZlIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZVxuICAgYGBpbnNlcnQoKWBgIG1ldGhvZCwgdGhlIHNlcXVlbmNlIGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlXG4gICBpbmRpY2VzLiAgSWYgaXQgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3JcbiAgIHNsaWNlIGluZGljZXMuXG5cbjUuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjYuIFRoZSBgYHNvcnQoKWBgIGFuZCBgYHJldmVyc2UoKWBgIG1ldGhvZHMgbW9kaWZ5IHRoZSBzZXF1ZW5jZSBpblxuICAgcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiBzb3J0aW5nIG9yIHJldmVyc2luZyBhIGxhcmdlXG4gICBzZXF1ZW5jZS4gIFRvIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXlcbiAgIGRvblwndCByZXR1cm4gdGhlIHNvcnRlZCBvciByZXZlcnNlZCBzZXF1ZW5jZS5cblxuNy4gVGhlIGBgc29ydCgpYGAgbWV0aG9kIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29udHJvbGxpbmcgdGhlXG4gICBjb21wYXJpc29ucy4gIEVhY2ggbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBrZXl3b3JkIGFyZ3VtZW50LlxuXG4gICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3RcbiAgIGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDogYGBrZXk9c3RyLmxvd2VyYGAuICBUaGVcbiAgIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuXG5cbiAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpcyBzdGFibGVcbiAgIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdFxuICAgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3Nlc1xuICAgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZiBpdCBjYW4gZGV0ZWN0XG4gICB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuOC4gYGBzb3J0KClgYCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGBgYnl0ZWFycmF5YGAgb2JqZWN0cy5cbicsCisgJ3R5cGVzc2VxJzogJ1xuU2VxdWVuY2UgVHlwZXMgLS0tIGBgc3RyYGAsIGBgYnl0ZXNgYCwgYGBieXRlYXJyYXlgYCwgYGBsaXN0YGAsIGBgdHVwbGVgYCwgYGByYW5nZWBgXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNpeCBzZXF1ZW5jZSB0eXBlczogc3RyaW5ncywgYnl0ZSBzZXF1ZW5jZXMgKGBgYnl0ZXNgYFxub2JqZWN0cyksIGJ5dGUgYXJyYXlzIChgYGJ5dGVhcnJheWBgIG9iamVjdHMpLCBsaXN0cywgdHVwbGVzLCBhbmRcbnJhbmdlIG9iamVjdHMuICBGb3Igb3RoZXIgY29udGFpbmVycyBzZWUgdGhlIGJ1aWx0IGluIGBgZGljdGBgIGFuZFxuYGBzZXRgYCBjbGFzc2VzLCBhbmQgdGhlIGBgY29sbGVjdGlvbnNgYCBtb2R1bGUuXG5cblN0cmluZ3MgY29udGFpbiBVbmljb2RlIGNoYXJhY3RlcnMuICBUaGVpciBsaXRlcmFscyBhcmUgd3JpdHRlbiBpblxuc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXM6IGBgXCd4eXp6eVwnYGAsIGBgImZyb2JvenoiYGAuICBTZWUgKlN0cmluZyBhbmRcbkJ5dGVzIGxpdGVyYWxzKiBmb3IgbW9yZSBhYm91dCBzdHJpbmcgbGl0ZXJhbHMuICBJbiBhZGRpdGlvbiB0byB0aGVcbmZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGhlcmUsIHRoZXJlIGFyZSBhbHNvIHN0cmluZy1zcGVjaWZpYyBtZXRob2RzXG5kZXNjcmliZWQgaW4gdGhlICpTdHJpbmcgTWV0aG9kcyogc2VjdGlvbi5cblxuQnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGNvbnRhaW4gc2luZ2xlIGJ5dGVzIC0tIHRoZSBmb3JtZXIgaXNcbmltbXV0YWJsZSB3aGlsZSB0aGUgbGF0dGVyIGlzIGEgbXV0YWJsZSBzZXF1ZW5jZS4gIEJ5dGVzIG9iamVjdHMgY2FuXG5iZSBjb25zdHJ1Y3RlZCB0aGUgY29uc3RydWN0b3IsIGBgYnl0ZXMoKWBgLCBhbmQgZnJvbSBsaXRlcmFsczsgdXNlIGFcbmBgYmBgIHByZWZpeCB3aXRoIG5vcm1hbCBzdHJpbmcgc3ludGF4OiBgYGJcJ3h5enp5XCdgYC4gIFRvIGNvbnN0cnVjdFxuYnl0ZSBhcnJheXMsIHVzZSB0aGUgYGBieXRlYXJyYXkoKWBgIGZ1bmN0aW9uLlxuXG5XaGlsZSBzdHJpbmcgb2JqZWN0cyBhcmUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgKHJlcHJlc2VudGVkIGJ5XG5zdHJpbmdzIG9mIGxlbmd0aCAxKSwgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGFyZSBzZXF1ZW5jZXMgb2ZcbippbnRlZ2VycyogKGJldHdlZW4gMCBhbmQgMjU1KSwgcmVwcmVzZW50aW5nIHRoZSBBU0NJSSB2YWx1ZSBvZiBzaW5nbGVcbmJ5dGVzLiAgVGhhdCBtZWFucyB0aGF0IGZvciBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgKmIqLCBgYGJbMF1gYFxud2lsbCBiZSBhbiBpbnRlZ2VyLCB3aGlsZSBgYGJbMDoxXWBgIHdpbGwgYmUgYSBieXRlcyBvciBieXRlYXJyYXlcbm9iamVjdCBvZiBsZW5ndGggMS4gIFRoZSByZXByZXNlbnRhdGlvbiBvZiBieXRlcyBvYmplY3RzIHVzZXMgdGhlXG5saXRlcmFsIGZvcm1hdCAoYGBiXCcuLi5cJ2BgKSBzaW5jZSBpdCBpcyBnZW5lcmFsbHkgbW9yZSB1c2VmdWwgdGhhblxuZS5nLiBgYGJ5dGVzKFs1MCwgMTksIDEwMF0pYGAuICBZb3UgY2FuIGFsd2F5cyBjb252ZXJ0IGEgYnl0ZXMgb2JqZWN0XG5pbnRvIGEgbGlzdCBvZiBpbnRlZ2VycyB1c2luZyBgYGxpc3QoYilgYC5cblxuQWxzbywgd2hpbGUgaW4gcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zLCBieXRlIHN0cmluZ3MgYW5kIFVuaWNvZGVcbnN0cmluZ3MgY291bGQgYmUgZXhjaGFuZ2VkIGZvciBlYWNoIG90aGVyIHJhdGhlciBmcmVlbHkgKGJhcnJpbmdcbmVuY29kaW5nIGlzc3VlcyksIHN0cmluZ3MgYW5kIGJ5dGVzIGFyZSBub3cgY29tcGxldGVseSBzZXBhcmF0ZVxuY29uY2VwdHMuICBUaGVyZVwncyBubyBpbXBsaWNpdCBlbi0vZGVjb2RpbmcgaWYgeW91IHBhc3MgYW4gb2JqZWN0IG9mXG50aGUgd3JvbmcgdHlwZS4gIEEgc3RyaW5nIGFsd2F5cyBjb21wYXJlcyB1bmVxdWFsIHRvIGEgYnl0ZXMgb3JcbmJ5dGVhcnJheSBvYmplY3QuXG5cbkxpc3RzIGFyZSBjb25zdHJ1Y3RlZCB3aXRoIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoXG5jb21tYXM6IGBgW2EsIGIsIGNdYGAuICBUdXBsZXMgYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBjb21tYSBvcGVyYXRvclxuKG5vdCB3aXRoaW4gc3F1YXJlIGJyYWNrZXRzKSwgd2l0aCBvciB3aXRob3V0IGVuY2xvc2luZyBwYXJlbnRoZXNlcyxcbmJ1dCBhbiBlbXB0eSB0dXBsZSBtdXN0IGhhdmUgdGhlIGVuY2xvc2luZyBwYXJlbnRoZXNlcywgc3VjaCBhcyBgYGEsXG5iLCBjYGAgb3IgYGAoKWBgLiAgQSBzaW5nbGUgaXRlbSB0dXBsZSBtdXN0IGhhdmUgYSB0cmFpbGluZyBjb21tYSxcbnN1Y2ggYXMgYGAoZCwpYGAuXG5cbk9iamVjdHMgb2YgdHlwZSByYW5nZSBhcmUgY3JlYXRlZCB1c2luZyB0aGUgYGByYW5nZSgpYGAgZnVuY3Rpb24uXG5UaGV5IGRvblwndCBzdXBwb3J0IGNvbmNhdGVuYXRpb24gb3IgcmVwZXRpdGlvbiwgYW5kIHVzaW5nIGBgbWluKClgYCBvclxuYGBtYXgoKWBgIG9uIHRoZW0gaXMgaW5lZmZpY2llbnQuXG5cbk1vc3Qgc2VxdWVuY2UgdHlwZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wZXJhdGlvbnMuICBUaGUgYGBpbmBgIGFuZFxuYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUgY29tcGFyaXNvblxub3BlcmF0aW9ucy4gIFRoZSBgYCtgYCBhbmQgYGAqYGAgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5IGFzXG50aGUgY29ycmVzcG9uZGluZyBudW1lcmljIG9wZXJhdGlvbnMuIFszXSBBZGRpdGlvbmFsIG1ldGhvZHMgYXJlXG5wcm92aWRlZCBmb3IgKk11dGFibGUgU2VxdWVuY2UgVHlwZXMqLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZTsgKm4qLCAqaSosICpqKiBhbmQgKmsqIGFyZVxuaW50ZWdlcnMuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PStcbnwgYGB4IGluIHNgYCAgICAgICAgIHwgYGBUcnVlYGAgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlIGBgRmFsc2VgYCAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGB4IG5vdCBpbiBzYGAgICAgIHwgYGBGYWxzZWBgIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgZXF1YWwgdG8gKngqLCBlbHNlIGBgVHJ1ZWBgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICsgdGBgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzICogbiwgbiAqIHNgYCAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgICAgfCAoMikgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgIHwgY29uY2F0ZW5hdGVkICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgYGBzW2ldYGAgICAgICAgICAgIHwgKmkqXCd0aCBpdGVtIG9mICpzKiwgb3JpZ2luIDAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmpdYGAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDQpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgc1tpOmo6a11gYCAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogICAgIHwgKDMpKDUpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8IHdpdGggc3RlcCAqayogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbGVuKHMpYGAgICAgICAgICB8IGxlbmd0aCBvZiAqcyogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWluKHMpYGAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgbWF4KHMpYGAgICAgICAgICB8IGxhcmdlc3QgaXRlbSBvZiAqcyogICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleChpKWBgICAgICB8IGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cmVuY2Ugb2YgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8ICppKiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58IGBgcy5jb3VudChpKWBgICAgICB8IHRvdGFsIG51bWJlciBvZiBvY2N1cmVuY2VzIG9mICAgIHwgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICB8ICppKiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG5cblNlcXVlbmNlIHR5cGVzIGFsc28gc3VwcG9ydCBjb21wYXJpc29ucy4gIEluIHBhcnRpY3VsYXIsIHR1cGxlcyBhbmRcbmxpc3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSBieSBjb21wYXJpbmcgY29ycmVzcG9uZGluZ1xuZWxlbWVudHMuICBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnkgZWxlbWVudCBtdXN0XG5jb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kIGhhdmVcbnRoZSBzYW1lIGxlbmd0aC4gIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluIHRoZSBsYW5ndWFnZVxucmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoZW4gKnMqIGlzIGEgc3RyaW5nIG9iamVjdCwgdGhlIGBgaW5gYCBhbmQgYGBub3QgaW5gYCBvcGVyYXRpb25zXG4gICBhY3QgbGlrZSBhIHN1YnN0cmluZyB0ZXN0LlxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiBgYDBgYCBhcmUgdHJlYXRlZCBhcyBgYDBgYCAod2hpY2ggeWllbGRzIGFuXG4gICBlbXB0eSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlIGFzICpzKikuICBOb3RlIGFsc28gdGhhdCB0aGUgY29waWVzXG4gICBhcmUgc2hhbGxvdzsgbmVzdGVkIHN0cnVjdHVyZXMgYXJlIG5vdCBjb3BpZWQuICBUaGlzIG9mdGVuIGhhdW50c1xuICAgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsgY29uc2lkZXI6XG5cbiAgID4+PiBsaXN0cyA9IFtbXV0gKiAzXG4gICA+Pj4gbGlzdHNcbiAgIFtbXSwgW10sIFtdXVxuICAgPj4+IGxpc3RzWzBdLmFwcGVuZCgzKVxuICAgPj4+IGxpc3RzXG4gICBbWzNdLCBbM10sIFszXV1cblxuICAgV2hhdCBoYXMgaGFwcGVuZWQgaXMgdGhhdCBgYFtbXV1gYCBpcyBhIG9uZS1lbGVtZW50IGxpc3QgY29udGFpbmluZ1xuICAgYW4gZW1wdHkgbGlzdCwgc28gYWxsIHRocmVlIGVsZW1lbnRzIG9mIGBgW1tdXSAqIDNgYCBhcmUgKHBvaW50ZXJzXG4gICB0bykgdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4gWW91IGNhbiBjcmVhdGUgYSBsaXN0IG9mXG4gICBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6XG5cbiAgID4+PiBsaXN0cyA9IFtbXSBmb3IgaSBpbiByYW5nZSgzKV1cbiAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgID4+PiBsaXN0c1sxXS5hcHBlbmQoNSlcbiAgID4+PiBsaXN0c1syXS5hcHBlbmQoNylcbiAgID4+PiBsaXN0c1xuICAgW1szXSwgWzVdLCBbN11dXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZVxuICAgc3RyaW5nOiBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0IGBgLTBgYCBpcyBzdGlsbCBgYDBgYC5cblxuNC4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgZGVmaW5lZCBhcyB0aGUgc2VxdWVuY2Ugb2ZcbiAgIGl0ZW1zIHdpdGggaW5kZXggKmsqIHN1Y2ggdGhhdCBgYGkgPD0gayA8IGpgYC4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLCB1c2UgYGBsZW4ocylgYC4gIElmICppKiBpcyBvbWl0dGVkIG9yXG4gICBgYE5vbmVgYCwgdXNlIGBgMGBgLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsIHVzZVxuICAgYGBsZW4ocylgYC4gIElmICppKiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXNcbiAgIGVtcHR5LlxuXG41LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiB3aXRoIHN0ZXAgKmsqIGlzIGRlZmluZWQgYXMgdGhlXG4gICBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoIGluZGV4ICBgYHggPSBpICsgbiprYGAgc3VjaCB0aGF0IGBgMCA8PSBuIDxcbiAgIChqLWkpL2tgYC4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgYGBpYGAsIGBgaStrYGAsXG4gICBgYGkrMiprYGAsIGBgaSszKmtgYCBhbmQgc28gb24sIHN0b3BwaW5nIHdoZW4gKmoqIGlzIHJlYWNoZWQgKGJ1dFxuICAgbmV2ZXIgaW5jbHVkaW5nICpqKikuICBJZiAqaSogb3IgKmoqIGlzIGdyZWF0ZXIgdGhhbiBgYGxlbihzKWBgLFxuICAgdXNlIGBgbGVuKHMpYGAuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGV5IGJlY29tZVxuICAgImVuZCIgdmFsdWVzICh3aGljaCBlbmQgZGVwZW5kcyBvbiB0aGUgc2lnbiBvZiAqayopLiAgTm90ZSwgKmsqXG4gICBjYW5ub3QgYmUgemVyby4gSWYgKmsqIGlzIGBgTm9uZWBgLCBpdCBpcyB0cmVhdGVkIGxpa2UgYGAxYGAuXG5cbjYuICoqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSWYgKnMqIGFuZCAqdCogYXJlIGJvdGggc3RyaW5ncyxcbiAgIHNvbWUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIENQeXRob24gY2FuIHVzdWFsbHkgcGVyZm9ybSBhblxuICAgaW4tcGxhY2Ugb3B0aW1pemF0aW9uIGZvciBhc3NpZ25tZW50cyBvZiB0aGUgZm9ybSBgYHMgPSBzICsgdGBgIG9yXG4gICBgYHMgKz0gdGBgLiAgV2hlbiBhcHBsaWNhYmxlLCB0aGlzIG9wdGltaXphdGlvbiBtYWtlcyBxdWFkcmF0aWNcbiAgIHJ1bi10aW1lIG11Y2ggbGVzcyBsaWtlbHkuICBUaGlzIG9wdGltaXphdGlvbiBpcyBib3RoIHZlcnNpb24gYW5kXG4gICBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBGb3IgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlIGNvZGUsIGl0IGlzXG4gICBwcmVmZXJhYmxlIHRvIHVzZSB0aGUgYGBzdHIuam9pbigpYGAgbWV0aG9kIHdoaWNoIGFzc3VyZXNcbiAgIGNvbnNpc3RlbnQgbGluZWFyIGNvbmNhdGVuYXRpb24gcGVyZm9ybWFuY2UgYWNyb3NzIHZlcnNpb25zIGFuZFxuICAgaW1wbGVtZW50YXRpb25zLlxuXG5cblN0cmluZyBNZXRob2RzXG49PT09PT09PT09PT09PVxuXG5TdHJpbmcgb2JqZWN0cyBzdXBwb3J0IHRoZSBtZXRob2RzIGxpc3RlZCBiZWxvdy5cblxuSW4gYWRkaXRpb24sIFB5dGhvblwncyBzdHJpbmdzIHN1cHBvcnQgdGhlIHNlcXVlbmNlIHR5cGUgbWV0aG9kc1xuZGVzY3JpYmVkIGluIHRoZSAqU2VxdWVuY2UgVHlwZXMgLS0tIHN0ciwgYnl0ZXMsIGJ5dGVhcnJheSwgbGlzdCxcbnR1cGxlLCByYW5nZSogc2VjdGlvbi4gVG8gb3V0cHV0IGZvcm1hdHRlZCBzdHJpbmdzLCBzZWUgdGhlICpTdHJpbmdcbkZvcm1hdHRpbmcqIHNlY3Rpb24uIEFsc28sIHNlZSB0aGUgYGByZWBgIG1vZHVsZSBmb3Igc3RyaW5nIGZ1bmN0aW9uc1xuYmFzZWQgb24gcmVndWxhciBleHByZXNzaW9ucy5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5lbmNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgYXMgYSBieXRlcyBvYmplY3QuIERlZmF1bHRcbiAgIGVuY29kaW5nIGlzIGBgXCd1dGYtOFwnYGAuICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnRcbiAgIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzIGBgXCdzdHJpY3RcJ2BgLFxuICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhIGBgVW5pY29kZUVycm9yYGAuIE90aGVyXG4gICBwb3NzaWJsZSB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAsXG4gICBgYFwneG1sY2hhcnJlZnJlcGxhY2VcJ2BgLCBgYFwnYmFja3NsYXNocmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlciBuYW1lXG4gICByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlYyBCYXNlXG4gICBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZFxuICAgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnN1ZmZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZlxuICAgc3VmZml4ZXMgdG8gbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0XG4gICB0aGF0IHBvc2l0aW9uLiAgV2l0aCBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRoZSBjb2x1bW4gbnVtYmVyIGlzIHJlc2V0IHRvIHplcm8gYWZ0ZXIgZWFjaFxuICAgbmV3bGluZSBvY2N1cnJpbmcgaW4gdGhlIHN0cmluZy4gSWYgKnRhYnNpemUqIGlzIG5vdCBnaXZlbiwgYSB0YWJcbiAgIHNpemUgb2YgYGA4YGAgY2hhcmFjdGVycyBpcyBhc3N1bWVkLiAgVGhpcyBkb2VzblwndCB1bmRlcnN0YW5kIG90aGVyXG4gICBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBvciBlc2NhcGUgc2VxdWVuY2VzLlxuXG5zdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuXG4gICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlXG4gICBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzIGBge31gYC4gIEVhY2ggcmVwbGFjZW1lbnQgZmllbGQgY29udGFpbnMgZWl0aGVyXG4gICB0aGUgbnVtZXJpYyBpbmRleCBvZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHRoZSBuYW1lIG9mIGFcbiAgIGtleXdvcmQgYXJndW1lbnQuICBSZXR1cm5zIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGVhY2hcbiAgIHJlcGxhY2VtZW50IGZpZWxkIGlzIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGVcbiAgIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQuXG5cbiAgID4+PiAiVGhlIHN1bSBvZiAxICsgMiBpcyB7MH0iLmZvcm1hdCgxKzIpXG4gICBcJ1RoZSBzdW0gb2YgMSArIDIgaXMgM1wnXG5cbiAgIFNlZSAqRm9ybWF0IFN0cmluZyBTeW50YXgqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSB2YXJpb3VzXG4gICBmb3JtYXR0aW5nIG9wdGlvbnMgdGhhdCBjYW4gYmUgc3BlY2lmaWVkIGluIGZvcm1hdCBzdHJpbmdzLlxuXG5zdHIuZm9ybWF0X21hcChtYXBwaW5nKVxuXG4gICBTaW1pbGFyIHRvIGBgc3RyLmZvcm1hdCgqKm1hcHBpbmcpYGAsIGV4Y2VwdCB0aGF0IGBgbWFwcGluZ2BgIGlzXG4gICB1c2VkIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgYGBkaWN0YGAgLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yXG4gICBleGFtcGxlIGBgbWFwcGluZ2BgIGlzIGEgZGljdCBzdWJjbGFzczpcblxuICAgPj4+IGNsYXNzIERlZmF1bHQoZGljdCk6XG4gICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgLi4uICAgICAgICAgcmV0dXJuIGtleVxuICAgLi4uXG4gICA+Pj4gXCd7bmFtZX0gd2FzIGJvcm4gaW4ge2NvdW50cnl9XCcuZm9ybWF0X21hcChEZWZhdWx0KG5hbWU9XCdHdWlkb1wnKSlcbiAgIFwnR3VpZG8gd2FzIGJvcm4gaW4gY291bnRyeVwnXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgYGBmaW5kKClgYCwgYnV0IHJhaXNlIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyXG4gICBgYGNgYCBpcyBhbHBoYW51bWVyaWMgaWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJucyBgYFRydWVgYDpcbiAgIGBgYy5pc2FscGhhKClgYCwgYGBjLmlzZGVjaW1hbCgpYGAsIGBgYy5pc2RpZ2l0KClgYCwgb3JcbiAgIGBgYy5pc251bWVyaWMoKWBgLlxuXG5zdHIuaXNhbHBoYSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhYmV0aWMgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBBbHBoYWJldGljXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiTGV0dGVyIiwgaS5lLiwgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICBiZWluZyBvbmUgb2YgIkxtIiwgIkx0IiwgIkx1IiwgIkxsIiwgb3IgIkxvIi4gIE5vdGUgdGhhdCB0aGlzIGlzXG4gICBkaWZmZXJlbnQgZnJvbSB0aGUgIkFscGhhYmV0aWMiIHByb3BlcnR5IGRlZmluZWQgaW4gdGhlIFVuaWNvZGVcbiAgIFN0YW5kYXJkLlxuXG5zdHIuaXNkZWNpbWFsKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGVjaW1hbCBjaGFyYWN0ZXJzXG4gICBhbmQgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiBEZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBmcm9tIGdlbmVyYWwgY2F0ZWdvcnkgIk5kIi4gVGhpcyBjYXRlZ29yeVxuICAgaW5jbHVkZXMgZGlnaXQgY2hhcmFjdGVycywgYW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgdGhhdCBjYW4gYmUgdXNlZFxuICAgdG8gZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVRcbiAgIFpFUk8uXG5cbnN0ci5pc2RpZ2l0KClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgZGlnaXRzIGFuZCB0aGVyZSBpc1xuICAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciwgZmFsc2Ugb3RoZXJ3aXNlLiAgRGlnaXRzIGluY2x1ZGUgZGVjaW1hbFxuICAgY2hhcmFjdGVycyBhbmQgZGlnaXRzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIHRoZVxuICAgY29tcGF0aWJpbGl0eSBzdXBlcnNjcmlwdCBkaWdpdHMuICBGb3JtYWxseSwgYSBkaWdpdCBpcyBhIGNoYXJhY3RlclxuICAgdGhhdCBoYXMgdGhlIHByb3BlcnR5IHZhbHVlIE51bWVyaWNfVHlwZT1EaWdpdCBvclxuICAgTnVtZXJpY19UeXBlPURlY2ltYWwuXG5cbnN0ci5pc2lkZW50aWZpZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgaWRlbnRpZmllciBhY2NvcmRpbmcgdG8gdGhlXG4gICBsYW5ndWFnZSBkZWZpbml0aW9uLCBzZWN0aW9uICpJZGVudGlmaWVycyBhbmQga2V5d29yZHMqLlxuXG5zdHIuaXNsb3dlcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjYXNlZCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZSBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTGwiLlxuXG5zdHIuaXNudW1lcmljKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgbnVtZXJpYyBjaGFyYWN0ZXJzLFxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gTnVtZXJpY1xuICAgY2hhcmFjdGVycyBpbmNsdWRlIGRpZ2l0IGNoYXJhY3RlcnMsIGFuZCBhbGwgY2hhcmFjdGVycyB0aGF0IGhhdmVcbiAgIHRoZSBVbmljb2RlIG51bWVyaWMgdmFsdWUgcHJvcGVydHksIGUuZy4gVSsyMTU1LCBWVUxHQVIgRlJBQ1RJT05cbiAgIE9ORSBGSUZUSC4gIEZvcm1hbGx5LCBudW1lcmljIGNoYXJhY3RlcnMgYXJlIHRob3NlIHdpdGggdGhlXG4gICBwcm9wZXJ0eSB2YWx1ZSBOdW1lcmljX1R5cGU9RGlnaXQsIE51bWVyaWNfVHlwZT1EZWNpbWFsIG9yXG4gICBOdW1lcmljX1R5cGU9TnVtZXJpYy5cblxuc3RyLmlzcHJpbnRhYmxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgcHJpbnRhYmxlIG9yIHRoZVxuICAgc3RyaW5nIGlzIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuICBOb25wcmludGFibGUgY2hhcmFjdGVycyBhcmVcbiAgIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgZGF0YWJhc2UgYXNcbiAgICJPdGhlciIgb3IgIlNlcGFyYXRvciIsIGV4Y2VwdGluZyB0aGUgQVNDSUkgc3BhY2UgKDB4MjApIHdoaWNoIGlzXG4gICBjb25zaWRlcmVkIHByaW50YWJsZS4gIChOb3RlIHRoYXQgcHJpbnRhYmxlIGNoYXJhY3RlcnMgaW4gdGhpc1xuICAgY29udGV4dCBhcmUgdGhvc2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSBlc2NhcGVkIHdoZW4gYGByZXByKClgYCBpc1xuICAgaW52b2tlZCBvbiBhIHN0cmluZy4gIEl0IGhhcyBubyBiZWFyaW5nIG9uIHRoZSBoYW5kbGluZyBvZiBzdHJpbmdzXG4gICB3cml0dGVuIHRvIGBgc3lzLnN0ZG91dGBgIG9yIGBgc3lzLnN0ZGVycmBgLilcblxuc3RyLmlzc3BhY2UoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgb25seSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZ1xuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIFdoaXRlc3BhY2VcbiAgIGNoYXJhY3RlcnMgIGFyZSB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyXG4gICBkYXRhYmFzZSBhcyAiT3RoZXIiIG9yICJTZXBhcmF0b3IiIGFuZCB0aG9zZSB3aXRoIGJpZGlyZWN0aW9uYWxcbiAgIHByb3BlcnR5IGJlaW5nIG9uZSBvZiAiV1MiLCAiQiIsIG9yICJTIi5cblxuc3RyLmlzdGl0bGUoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiB0aGUgc3RyaW5nIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcgYW5kIHRoZXJlIGlzIGF0XG4gICBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmb3IgZXhhbXBsZSB1cHBlcmNhc2UgY2hhcmFjdGVycyBtYXkgb25seVxuICAgZm9sbG93IHVuY2FzZWQgY2hhcmFjdGVycyBhbmQgbG93ZXJjYXNlIGNoYXJhY3RlcnMgb25seSBjYXNlZCBvbmVzLlxuICAgUmV0dXJuIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzdXBwZXIoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2FzZWQgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSB1cHBlcmNhc2UgYW5kXG4gICB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2FzZWQgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIENhc2VkXG4gICBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgYmVpbmcgb25lIG9mXG4gICAiTHUiLCAiTGwiLCBvciAiTHQiIGFuZCB1cHBlcmNhc2UgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsXG4gICBjYXRlZ29yeSBwcm9wZXJ0eSAiTHUiLlxuXG5zdHIuam9pbihpdGVyYWJsZSlcblxuICAgUmV0dXJuIGEgc3RyaW5nIHdoaWNoIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZVxuICAgKml0ZXJhYmxlKiAqaXRlcmFibGUqLiAgQSBgYFR5cGVFcnJvcmBgIHdpbGwgYmUgcmFpc2VkIGlmIHRoZXJlIGFyZVxuICAgYW55IG5vbi1zdHJpbmcgdmFsdWVzIGluICpzZXEqLCBpbmNsdWRpbmcgYGBieXRlc2BgIG9iamVjdHMuICBUaGVcbiAgIHNlcGFyYXRvciBiZXR3ZWVuIGVsZW1lbnRzIGlzIHRoZSBzdHJpbmcgcHJvdmlkaW5nIHRoaXMgbWV0aG9kLlxuXG5zdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLlxuICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhXG4gICBzcGFjZSkuICBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIubG93ZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIGxvd2VyY2FzZS5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLmxzdHJpcCgpXG4gICBcJ3NwYWNpb3VzICAgXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLmxzdHJpcChcJ2Ntb3d6LlwnKVxuICAgXCdleGFtcGxlLmNvbVwnXG5cbnN0YXRpYyBzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKVxuXG4gICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3JcbiAgIGBgc3RyLnRyYW5zbGF0ZSgpYGAuXG5cbiAgIElmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nXG4gICBVbmljb2RlIG9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyAoc3RyaW5ncyBvZiBsZW5ndGggMSkgdG9cbiAgIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MgKG9mIGFyYml0cmFyeSBsZW5ndGhzKSBvciBOb25lLlxuICAgQ2hhcmFjdGVyIGtleXMgd2lsbCB0aGVuIGJlIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cblxuICAgSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCxcbiAgIGFuZCBpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWRcbiAgIHRvIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gIElmIHRoZXJlIGlzIGEgdGhpcmRcbiAgIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgc3RyaW5nLCB3aG9zZSBjaGFyYWN0ZXJzIHdpbGwgYmUgbWFwcGVkIHRvXG4gICBOb25lIGluIHRoZSByZXN1bHQuXG5cbnN0ci5wYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHRoZSBzdHJpbmcgaXRzZWxmLCBmb2xsb3dlZCBieVxuICAgdHdvIGVtcHR5IHN0cmluZ3MuXG5cbnN0ci5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpvbGQqXG4gICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5XG4gICB0aGUgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuXG5cbnN0ci5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIGhpZ2hlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIHdpdGhpbiBgYHNbc3RhcnQ6ZW5kXWBgLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gYGAtMWBgIG9uIGZhaWx1cmUuXG5cbnN0ci5yaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgTGlrZSBgYHJmaW5kKClgYCBidXQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKlxuICAgaXMgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuXG4gICBgYGxlbihzKWBgLlxuXG5zdHIucnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiAqc2VwKiwgYW5kIHJldHVybiBhXG4gICAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhcnQgYmVmb3JlIHRoZSBzZXBhcmF0b3IsIHRoZSBzZXBhcmF0b3JcbiAgIGl0c2VsZiwgYW5kIHRoZSBwYXJ0IGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdFxuICAgZm91bmQsIHJldHVybiBhIDMtdHVwbGUgY29udGFpbmluZyB0d28gZW1wdHkgc3RyaW5ncywgZm9sbG93ZWQgYnlcbiAgIHRoZSBzdHJpbmcgaXRzZWxmLlxuXG5zdHIucnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgIGBgTm9uZWBgLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yXG4gICBzcGxpdHRpbmcgZnJvbSB0aGUgcmlnaHQsIGBgcnNwbGl0KClgYCBiZWhhdmVzIGxpa2UgYGBzcGxpdCgpYGBcbiAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgd29yZHMgaW4gdGhlIHN0cmluZywgdXNpbmcgKnNlcCogYXMgdGhlXG4gICBkZWxpbWl0ZXIgc3RyaW5nLiAgSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqXG4gICBzcGxpdHMgYXJlIGRvbmUgKHRodXMsIHRoZSBsaXN0IHdpbGwgaGF2ZSBhdCBtb3N0IGBgbWF4c3BsaXQrMWBgXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gbGltaXRcbiAgIG9uIHRoZSBudW1iZXIgb2Ygc3BsaXRzIChhbGwgcG9zc2libGUgc3BsaXRzIGFyZSBtYWRlKS5cblxuICAgSWYgKnNlcCogaXMgZ2l2ZW4sIGNvbnNlY3V0aXZlIGRlbGltaXRlcnMgYXJlIG5vdCBncm91cGVkIHRvZ2V0aGVyXG4gICBhbmQgYXJlIGRlZW1lZCB0byBkZWxpbWl0IGVtcHR5IHN0cmluZ3MgKGZvciBleGFtcGxlLFxuICAgYGBcJzEsLDJcJy5zcGxpdChcJyxcJylgYCByZXR1cm5zIGBgW1wnMVwnLCBcJ1wnLCBcJzJcJ11gYCkuICBUaGUgKnNlcCpcbiAgIGFyZ3VtZW50IG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgYGBcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpYGAgcmV0dXJucyBgYFtcJzFcJywgXCcyXCcsIFwnM1wnXWBgKS4gU3BsaXR0aW5nXG4gICBhbiBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyBgYFtcJ1wnXWBgLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgTm9uZWBgLCBhIGRpZmZlcmVudCBzcGxpdHRpbmdcbiAgIGFsZ29yaXRobSBpcyBhcHBsaWVkOiBydW5zIG9mIGNvbnNlY3V0aXZlIHdoaXRlc3BhY2UgYXJlIHJlZ2FyZGVkXG4gICBhcyBhIHNpbmdsZSBzZXBhcmF0b3IsIGFuZCB0aGUgcmVzdWx0IHdpbGwgY29udGFpbiBubyBlbXB0eSBzdHJpbmdzXG4gICBhdCB0aGUgc3RhcnQgb3IgZW5kIGlmIHRoZSBzdHJpbmcgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmdcbiAgIHdoaXRlc3BhY2UuICBDb25zZXF1ZW50bHksIHNwbGl0dGluZyBhbiBlbXB0eSBzdHJpbmcgb3IgYSBzdHJpbmdcbiAgIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IgcmV0dXJuc1xuICAgYGBbXWBgLlxuXG4gICBGb3IgZXhhbXBsZSwgYGBcJyAxICAyICAgMyAgXCcuc3BsaXQoKWBgIHJldHVybnMgYGBbXCcxXCcsIFwnMlwnLCBcJzNcJ11gYCxcbiAgIGFuZCBgYFwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSlgYCByZXR1cm5zIGBgW1wnMVwnLCBcJzIgICAzICBcJ11gYC5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gIExpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0XG4gICB1bmxlc3MgKmtlZXBlbmRzKiBpcyBnaXZlbiBhbmQgdHJ1ZS5cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgKnByZWZpeCosIG90aGVyd2lzZVxuICAgcmV0dXJuIGBgRmFsc2VgYC4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rXG4gICBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3Qgc3RyaW5nIGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciBgYE5vbmVgYCwgdGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzXG4gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgIFwnc3BhY2lvdXNcJ1xuICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgVGhlIGFsZ29yaXRobSB1c2VzIGEgc2ltcGxlIGxhbmd1YWdlLWluZGVwZW5kZW50IGRlZmluaXRpb24gb2YgYVxuICAgd29yZCBhcyBncm91cHMgb2YgY29uc2VjdXRpdmUgbGV0dGVycy4gIFRoZSBkZWZpbml0aW9uIHdvcmtzIGluXG4gICBtYW55IGNvbnRleHRzIGJ1dCBpdCBtZWFucyB0aGF0IGFwb3N0cm9waGVzIGluIGNvbnRyYWN0aW9ucyBhbmRcbiAgIHBvc3Nlc3NpdmVzIGZvcm0gd29yZCBib3VuZGFyaWVzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBkZXNpcmVkXG4gICByZXN1bHQ6XG5cbiAgICAgID4+PiAidGhleVwncmUgYmlsbFwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpXG4gICAgICAiVGhleVwnUmUgQmlsbFwnUyBGcmllbmRzIEZyb20gVGhlIFVrIlxuXG4gICBBIHdvcmthcm91bmQgZm9yIGFwb3N0cm9waGVzIGNhbiBiZSBjb25zdHJ1Y3RlZCB1c2luZyByZWd1bGFyXG4gICBleHByZXNzaW9uczpcblxuICAgICAgPj4+IGltcG9ydCByZVxuICAgICAgPj4+IGRlZiB0aXRsZWNhc2Uocyk6XG4gICAgICAgICAgICAgIHJldHVybiByZS5zdWIociJbQS1aYS16XSsoXCdbQS1aYS16XSspPyIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswXS51cHBlcigpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vLmdyb3VwKDApWzE6XS5sb3dlcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMpXG5cbiAgICAgID4+PiB0aXRsZWNhc2UoInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcy4iKVxuICAgICAgIlRoZXlcJ3JlIEJpbGxcJ3MgRnJpZW5kcy4iXG5cbnN0ci50cmFuc2xhdGUobWFwKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSAqcyogd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuICAgdGhyb3VnaCB0aGUgKm1hcCogd2hpY2ggbXVzdCBiZSBhIGRpY3Rpb25hcnkgb2YgVW5pY29kZSBvcmRpbmFsc1xuICAgKGludGVnZXJzKSB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIGBgTm9uZWBgLiAgVW5tYXBwZWRcbiAgIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLiBDaGFyYWN0ZXJzIG1hcHBlZCB0byBgYE5vbmVgYCBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlIGBgc3RyLm1ha2V0cmFucygpYGAgdG8gY3JlYXRlIGEgdHJhbnNsYXRpb24gbWFwIGZyb21cbiAgIGNoYXJhY3Rlci10by1jaGFyYWN0ZXIgbWFwcGluZ3MgaW4gZGlmZmVyZW50IGZvcm1hdHMuXG5cbiAgIE5vdGU6IEFuIGV2ZW4gbW9yZSBmbGV4aWJsZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBjdXN0b20gY2hhcmFjdGVyXG4gICAgIG1hcHBpbmcgY29kZWMgdXNpbmcgdGhlIGBgY29kZWNzYGAgbW9kdWxlIChzZWVcbiAgICAgYGBlbmNvZGluZ3MuY3AxMjUxYGAgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgY29udmVydGVkIHRvIHVwcGVyY2FzZS5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIGBgbGVuKHMpYGAuXG5cblxuT2xkIFN0cmluZyBGb3JtYXR0aW5nIE9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbk5vdGU6IFRoZSBmb3JtYXR0aW5nIG9wZXJhdGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIG9ic29sZXRlIGFuZCBtYXkgZ29cbiAgYXdheSBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uLiAgVXNlIHRoZSBuZXcgKlN0cmluZyBGb3JtYXR0aW5nKlxuICBpbiBuZXcgY29kZS5cblxuU3RyaW5nIG9iamVjdHMgaGF2ZSBvbmUgdW5pcXVlIGJ1aWx0LWluIG9wZXJhdGlvbjogdGhlIGBgJWBgIG9wZXJhdG9yXG4obW9kdWxvKS4gVGhpcyBpcyBhbHNvIGtub3duIGFzIHRoZSBzdHJpbmcgKmZvcm1hdHRpbmcqIG9yXG4qaW50ZXJwb2xhdGlvbiogb3BlcmF0b3IuIEdpdmVuIGBgZm9ybWF0ICUgdmFsdWVzYGAgKHdoZXJlICpmb3JtYXQqIGlzXG5hIHN0cmluZyksIGBgJWBgIGNvbnZlcnNpb24gc3BlY2lmaWNhdGlvbnMgaW4gKmZvcm1hdCogYXJlIHJlcGxhY2VkXG53aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cyBvZiAqdmFsdWVzKi4gVGhlIGVmZmVjdCBpcyBzaW1pbGFyIHRvIHRoZVxudXNpbmcgYGBzcHJpbnRmKClgYCBpbiB0aGUgQyBsYW5ndWFnZS5cblxuSWYgKmZvcm1hdCogcmVxdWlyZXMgYSBzaW5nbGUgYXJndW1lbnQsICp2YWx1ZXMqIG1heSBiZSBhIHNpbmdsZSBub24tXG50dXBsZSBvYmplY3QuIFs0XSAgT3RoZXJ3aXNlLCAqdmFsdWVzKiBtdXN0IGJlIGEgdHVwbGUgd2l0aCBleGFjdGx5XG50aGUgbnVtYmVyIG9mIGl0ZW1zIHNwZWNpZmllZCBieSB0aGUgZm9ybWF0IHN0cmluZywgb3IgYSBzaW5nbGVcbm1hcHBpbmcgb2JqZWN0IChmb3IgZXhhbXBsZSwgYSBkaWN0aW9uYXJ5KS5cblxuQSBjb252ZXJzaW9uIHNwZWNpZmllciBjb250YWlucyB0d28gb3IgbW9yZSBjaGFyYWN0ZXJzIGFuZCBoYXMgdGhlXG5mb2xsb3dpbmcgY29tcG9uZW50cywgd2hpY2ggbXVzdCBvY2N1ciBpbiB0aGlzIG9yZGVyOlxuXG4xLiBUaGUgYGBcJyVcJ2BgIGNoYXJhY3Rlciwgd2hpY2ggbWFya3MgdGhlIHN0YXJ0IG9mIHRoZSBzcGVjaWZpZXIuXG5cbjIuIE1hcHBpbmcga2V5IChvcHRpb25hbCksIGNvbnNpc3Rpbmcgb2YgYSBwYXJlbnRoZXNpc2VkIHNlcXVlbmNlIG9mXG4gICBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSwgYGAoc29tZW5hbWUpYGApLlxuXG4zLiBDb252ZXJzaW9uIGZsYWdzIChvcHRpb25hbCksIHdoaWNoIGFmZmVjdCB0aGUgcmVzdWx0IG9mIHNvbWVcbiAgIGNvbnZlcnNpb24gdHlwZXMuXG5cbjQuIE1pbmltdW0gZmllbGQgd2lkdGggKG9wdGlvbmFsKS4gIElmIHNwZWNpZmllZCBhcyBhbiBgYFwnKlwnYGBcbiAgIChhc3RlcmlzayksIHRoZSBhY3R1YWwgd2lkdGggaXMgcmVhZCBmcm9tIHRoZSBuZXh0IGVsZW1lbnQgb2YgdGhlXG4gICB0dXBsZSBpbiAqdmFsdWVzKiwgYW5kIHRoZSBvYmplY3QgdG8gY29udmVydCBjb21lcyBhZnRlciB0aGVcbiAgIG1pbmltdW0gZmllbGQgd2lkdGggYW5kIG9wdGlvbmFsIHByZWNpc2lvbi5cblxuNS4gUHJlY2lzaW9uIChvcHRpb25hbCksIGdpdmVuIGFzIGEgYGBcJy5cJ2BgIChkb3QpIGZvbGxvd2VkIGJ5IHRoZVxuICAgcHJlY2lzaW9uLiAgSWYgc3BlY2lmaWVkIGFzIGBgXCcqXCdgYCAoYW4gYXN0ZXJpc2spLCB0aGUgYWN0dWFsIHdpZHRoXG4gICBpcyByZWFkIGZyb20gdGhlIG5leHQgZWxlbWVudCBvZiB0aGUgdHVwbGUgaW4gKnZhbHVlcyosIGFuZCB0aGVcbiAgIHZhbHVlIHRvIGNvbnZlcnQgY29tZXMgYWZ0ZXIgdGhlIHByZWNpc2lvbi5cblxuNi4gTGVuZ3RoIG1vZGlmaWVyIChvcHRpb25hbCkuXG5cbjcuIENvbnZlcnNpb24gdHlwZS5cblxuV2hlbiB0aGUgcmlnaHQgYXJndW1lbnQgaXMgYSBkaWN0aW9uYXJ5IChvciBvdGhlciBtYXBwaW5nIHR5cGUpLCB0aGVuXG50aGUgZm9ybWF0cyBpbiB0aGUgc3RyaW5nICptdXN0KiBpbmNsdWRlIGEgcGFyZW50aGVzaXNlZCBtYXBwaW5nIGtleVxuaW50byB0aGF0IGRpY3Rpb25hcnkgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGBgXCclXCdgYCBjaGFyYWN0ZXIuXG5UaGUgbWFwcGluZyBrZXkgc2VsZWN0cyB0aGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkIGZyb20gdGhlIG1hcHBpbmcuXG5Gb3IgZXhhbXBsZTpcblxuPj4+IHByaW50KFwnJShsYW5ndWFnZSlzIGhhcyAlKG51bWJlcikwM2QgcXVvdGUgdHlwZXMuXCcgJVxuLi4uICAgICAgIHtcJ2xhbmd1YWdlXCc6ICJQeXRob24iLCAibnVtYmVyIjogMn0pXG5QeXRob24gaGFzIDAwMiBxdW90ZSB0eXBlcy5cblxuSW4gdGhpcyBjYXNlIG5vIGBgKmBgIHNwZWNpZmllcnMgbWF5IG9jY3VyIGluIGEgZm9ybWF0IChzaW5jZSB0aGV5XG5yZXF1aXJlIGEgc2VxdWVudGlhbCBwYXJhbWV0ZXIgbGlzdCkuXG5cblRoZSBjb252ZXJzaW9uIGZsYWcgY2hhcmFjdGVycyBhcmU6XG5cbistLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgRmxhZyAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBcJyNcJ2BgICAgfCBUaGUgdmFsdWUgY29udmVyc2lvbiB3aWxsIHVzZSB0aGUgImFsdGVybmF0ZSBmb3JtIiAod2hlcmUgZGVmaW5lZCAgICAgfFxufCAgICAgICAgICAgfCBiZWxvdykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnMFwnYGAgICB8IFRoZSBjb252ZXJzaW9uIHdpbGwgYmUgemVybyBwYWRkZWQgZm9yIG51bWVyaWMgdmFsdWVzLiAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCctXCdgYCAgIHwgVGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBsZWZ0IGFkanVzdGVkIChvdmVycmlkZXMgdGhlIGBgXCcwXCdgYCAgICAgICAgICAgfFxufCAgICAgICAgICAgfCBjb252ZXJzaW9uIGlmIGJvdGggYXJlIGdpdmVuKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYFwnIFwnYGAgICB8IChhIHNwYWNlKSBBIGJsYW5rIHNob3VsZCBiZSBsZWZ0IGJlZm9yZSBhIHBvc2l0aXZlIG51bWJlciAob3IgZW1wdHkgICB8XG58ICAgICAgICAgICB8IHN0cmluZykgcHJvZHVjZWQgYnkgYSBzaWduZWQgY29udmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgXCcrXCdgYCAgIHwgQSBzaWduIGNoYXJhY3RlciAoYGBcJytcJ2BgIG9yIGBgXCctXCdgYCkgd2lsbCBwcmVjZWRlIHRoZSBjb252ZXJzaW9uICAgICB8XG58ICAgICAgICAgICB8IChvdmVycmlkZXMgYSAic3BhY2UiIGZsYWcpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkEgbGVuZ3RoIG1vZGlmaWVyIChgYGhgYCwgYGBsYGAsIG9yIGBgTGBgKSBtYXkgYmUgcHJlc2VudCwgYnV0IGlzXG5pZ25vcmVkIGFzIGl0IGlzIG5vdCBuZWNlc3NhcnkgZm9yIFB5dGhvbiAtLSBzbyBlLmcuIGBgJWxkYGAgaXNcbmlkZW50aWNhbCB0byBgYCVkYGAuXG5cblRoZSBjb252ZXJzaW9uIHR5cGVzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBDb252ZXJzaW9uICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCBgYFwnZFwnYGAgICAgICB8IFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdpXCdgYCAgICAgIHwgU2lnbmVkIGludGVnZXIgZGVjaW1hbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ29cJ2BgICAgICAgfCBTaWduZWQgb2N0YWwgdmFsdWUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICgxKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwndVwnYGAgICAgICB8IE9ic29sZXRlIHR5cGUgLS0gaXQgaXMgaWRlbnRpY2FsIHRvIGBgXCdkXCdgYC4gICAgICAgICAgfCAoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3hcJ2BgICAgICAgfCBTaWduZWQgaGV4YWRlY2ltYWwgKGxvd2VyY2FzZSkuICAgICAgICAgICAgICAgICAgICAgICB8ICgyKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnWFwnYGAgICAgICB8IFNpZ25lZCBoZXhhZGVjaW1hbCAodXBwZXJjYXNlKS4gICAgICAgICAgICAgICAgICAgICAgIHwgKDIpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdlXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0IChsb3dlcmNhc2UpLiAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ0VcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBleHBvbmVudGlhbCBmb3JtYXQgKHVwcGVyY2FzZSkuICAgICAgICB8ICgzKSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnZlwnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGRlY2ltYWwgZm9ybWF0LiAgICAgICAgICAgICAgICAgICAgICAgIHwgKDMpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdGXCdgYCAgICAgIHwgRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQuICAgICAgICAgICAgICAgICAgICAgICAgfCAoMykgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ2dcJ2BgICAgICAgfCBGbG9hdGluZyBwb2ludCBmb3JtYXQuIFVzZXMgbG93ZXJjYXNlIGV4cG9uZW50aWFsICAgICB8ICg0KSAgICAgfFxufCAgICAgICAgICAgICAgfCBmb3JtYXQgaWYgZXhwb25lbnQgaXMgbGVzcyB0aGFuIC00IG9yIG5vdCBsZXNzIHRoYW4gICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBwcmVjaXNpb24sIGRlY2ltYWwgZm9ybWF0IG90aGVyd2lzZS4gICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnR1wnYGAgICAgICB8IEZsb2F0aW5nIHBvaW50IGZvcm1hdC4gVXNlcyB1cHBlcmNhc2UgZXhwb25lbnRpYWwgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICB8IGZvcm1hdCBpZiBleHBvbmVudCBpcyBsZXNzIHRoYW4gLTQgb3Igbm90IGxlc3MgdGhhbiAgIHwgICAgICAgICB8XG58ICAgICAgICAgICAgICB8IHByZWNpc2lvbiwgZGVjaW1hbCBmb3JtYXQgb3RoZXJ3aXNlLiAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCdjXCdgYCAgICAgIHwgU2luZ2xlIGNoYXJhY3RlciAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSBjaGFyYWN0ZXIgfCAgICAgICAgIHxcbnwgICAgICAgICAgICAgIHwgc3RyaW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgYGBcJ3JcJ2BgICAgICAgfCBTdHJpbmcgKGNvbnZlcnRzIGFueSBQeXRob24gb2JqZWN0IHVzaW5nIGBgcmVwcigpYGApLiB8ICg1KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBgYFwnc1wnYGAgICAgICB8IFN0cmluZyAoY29udmVydHMgYW55IFB5dGhvbiBvYmplY3QgdXNpbmcgYGBzdHIoKWBgKS4gIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IGBgXCclXCdgYCAgICAgIHwgTm8gYXJndW1lbnQgaXMgY29udmVydGVkLCByZXN1bHRzIGluIGEgYGBcJyVcJ2BgICAgICAgICB8ICAgICAgICAgfFxufCAgICAgICAgICAgICAgfCBjaGFyYWN0ZXIgaW4gdGhlIHJlc3VsdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gVGhlIGFsdGVybmF0ZSBmb3JtIGNhdXNlcyBhIGxlYWRpbmcgemVybyAoYGBcJzBcJ2BgKSB0byBiZSBpbnNlcnRlZFxuICAgYmV0d2VlbiBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgdGhlIGZvcm1hdHRpbmcgb2YgdGhlIG51bWJlciBpZiB0aGVcbiAgIGxlYWRpbmcgY2hhcmFjdGVyIG9mIHRoZSByZXN1bHQgaXMgbm90IGFscmVhZHkgYSB6ZXJvLlxuXG4yLiBUaGUgYWx0ZXJuYXRlIGZvcm0gY2F1c2VzIGEgbGVhZGluZyBgYFwnMHhcJ2BgIG9yIGBgXCcwWFwnYGAgKGRlcGVuZGluZ1xuICAgb24gd2hldGhlciB0aGUgYGBcJ3hcJ2BgIG9yIGBgXCdYXCdgYCBmb3JtYXQgd2FzIHVzZWQpIHRvIGJlIGluc2VydGVkXG4gICBiZXR3ZWVuIGxlZnQtaGFuZCBwYWRkaW5nIGFuZCB0aGUgZm9ybWF0dGluZyBvZiB0aGUgbnVtYmVyIGlmIHRoZVxuICAgbGVhZGluZyBjaGFyYWN0ZXIgb2YgdGhlIHJlc3VsdCBpcyBub3QgYWxyZWFkeSBhIHplcm8uXG5cbjMuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICAgcG9pbnQgYW5kIGRlZmF1bHRzIHRvIDYuXG5cbjQuIFRoZSBhbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCB0byBhbHdheXMgY29udGFpbiBhIGRlY2ltYWxcbiAgIHBvaW50LCBhbmQgdHJhaWxpbmcgemVyb2VzIGFyZSBub3QgcmVtb3ZlZCBhcyB0aGV5IHdvdWxkIG90aGVyd2lzZVxuICAgYmUuXG5cbiAgIFRoZSBwcmVjaXNpb24gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBiZWZvcmVcbiAgIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBhbmQgZGVmYXVsdHMgdG8gNi5cblxuNS4gVGhlIHByZWNpc2lvbiBkZXRlcm1pbmVzIHRoZSBtYXhpbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHVzZWQuXG5cbjEuIFNlZSAqKlBFUCAyMzcqKi5cblxuU2luY2UgUHl0aG9uIHN0cmluZ3MgaGF2ZSBhbiBleHBsaWNpdCBsZW5ndGgsIGBgJXNgYCBjb252ZXJzaW9ucyBkb1xubm90IGFzc3VtZSB0aGF0IGBgXCdcXDBcJ2BgIGlzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogYGAlZmBgIGNvbnZlcnNpb25zIGZvciBudW1iZXJzIHdob3NlIGFic29sdXRlXG52YWx1ZSBpcyBvdmVyIDFlNTAgYXJlIG5vIGxvbmdlciByZXBsYWNlZCBieSBgYCVnYGAgY29udmVyc2lvbnMuXG5cbkFkZGl0aW9uYWwgc3RyaW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gc3RhbmRhcmQgbW9kdWxlc1xuYGBzdHJpbmdgYCBhbmQgYGByZWBgLlxuXG5cblJhbmdlIFR5cGVcbj09PT09PT09PT1cblxuVGhlIGBgcmFuZ2VgYCB0eXBlIGlzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB3aGljaCBpcyBjb21tb25seSB1c2VkIGZvclxubG9vcGluZy4gIFRoZSBhZHZhbnRhZ2Ugb2YgdGhlIGBgcmFuZ2VgYCB0eXBlIGlzIHRoYXQgYW4gYGByYW5nZWBgXG5vYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSBhbW91bnQgb2YgbWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemVcbm9mIHRoZSByYW5nZSBpdCByZXByZXNlbnRzLlxuXG5SYW5nZSBvYmplY3RzIGhhdmUgcmVsYXRpdmVseSBsaXR0bGUgYmVoYXZpb3I6IHRoZXkgc3VwcG9ydCBpbmRleGluZyxcbmNvbnRhaW5zLCBpdGVyYXRpb24sIHRoZSBgYGxlbigpYGAgZnVuY3Rpb24sIGFuZCB0aGUgZm9sbG93aW5nXG5tZXRob2RzOlxuXG5yYW5nZS5jb3VudCh4KVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiAqaSpcJ3MgZm9yIHdoaWNoIGBgc1tpXSA9PSB4YGAuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxucmFuZ2UuaW5kZXgoeClcblxuICAgUmV0dXJuIHRoZSBzbWFsbGVzdCAqaSogc3VjaCB0aGF0IGBgc1tpXSA9PSB4YGAuICBSYWlzZXNcbiAgIGBgVmFsdWVFcnJvcmBgIHdoZW4gKngqIGlzIG5vdCBpbiB0aGUgcmFuZ2UuXG5cbiAgICAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09XG5cbkxpc3QgYW5kIGJ5dGVhcnJheSBvYmplY3RzIHN1cHBvcnQgYWRkaXRpb25hbCBvcGVyYXRpb25zIHRoYXQgYWxsb3dcbmluLXBsYWNlIG1vZGlmaWNhdGlvbiBvZiB0aGUgb2JqZWN0LiAgT3RoZXIgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlc1xuKHdoZW4gYWRkZWQgdG8gdGhlIGxhbmd1YWdlKSBzaG91bGQgYWxzbyBzdXBwb3J0IHRoZXNlIG9wZXJhdGlvbnMuXG5TdHJpbmdzIGFuZCB0dXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczogc3VjaCBvYmplY3RzIGNhbm5vdFxuYmUgbW9kaWZpZWQgb25jZSBjcmVhdGVkLiBUaGUgZm9sbG93aW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb25cbm11dGFibGUgc2VxdWVuY2UgdHlwZXMgKHdoZXJlICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0KS5cblxuTm90ZSB0aGF0IHdoaWxlIGxpc3RzIGFsbG93IHRoZWlyIGl0ZW1zIHRvIGJlIG9mIGFueSB0eXBlLCBieXRlYXJyYXlcbm9iamVjdCAiaXRlbXMiIGFyZSBhbGwgaW50ZWdlcnMgaW4gdGhlIHJhbmdlIDAgPD0geCA8IDI1Ni5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCBgYHNbaV0gPSB4YGAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqXSA9IHRgYCAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgZGVsIHNbaTpqXWBgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6al0gPSBbXWBgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHNbaTpqOmtdID0gdGBgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgYGBzW2k6ajprXWBgIGFyZSB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6ajprXWBgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpOmo6a11gYCBmcm9tIHRoZSBsaXN0ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuYXBwZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XWBgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuZXh0ZW5kKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tsZW4ocyk6bGVuKHMpXSA9IHhgYCB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmNvdW50KHgpYGAgICAgICAgICAgICAgICAgIHwgcmV0dXJuIG51bWJlciBvZiAqaSpcJ3MgZm9yIHdoaWNoIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2ldID09IHhgYCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbmRleCh4WywgaVssIGpdXSlgYCAgICAgICB8IHJldHVybiBzbWFsbGVzdCAqayogc3VjaCB0aGF0ICAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBzW2tdID09IHhgYCBhbmQgYGBpIDw9IGsgPCBqYGAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgICB8IHNhbWUgYXMgYGBzW2k6aV0gPSBbeF1gYCAgICAgICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucG9wKFtpXSlgYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgeCA9IHNbaV07IGRlbCBzW2ldOyAgICB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJldHVybiB4YGAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMucmVtb3ZlKHgpYGAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgZGVsIHNbcy5pbmRleCh4KV1gYCAgICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJldmVyc2UoKWBgICAgICAgICAgICAgICAgIHwgcmV2ZXJzZXMgdGhlIGl0ZW1zIG9mICpzKiBpbiAgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnNvcnQoW2tleVssIHJldmVyc2VdXSlgYCAgIHwgc29ydCB0aGUgaXRlbXMgb2YgKnMqIGluIHBsYWNlICAgfCAoNiksICg3KSwgKDgpICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiAqeCogY2FuIGJlIGFueSBpdGVyYWJsZSBvYmplY3QuXG5cbjMuIFJhaXNlcyBgYFZhbHVlRXJyb3JgYCB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLiBXaGVuIGEgbmVnYXRpdmVcbiAgIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgc2Vjb25kIG9yIHRoaXJkIHBhcmFtZXRlciB0byB0aGUgYGBpbmRleCgpYGBcbiAgIG1ldGhvZCwgdGhlIHNlcXVlbmNlIGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlIGluZGljZXMuICBJZiBpdFxuICAgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3Igc2xpY2UgaW5kaWNlcy5cblxuNC4gV2hlbiBhIG5lZ2F0aXZlIGluZGV4IGlzIHBhc3NlZCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZVxuICAgYGBpbnNlcnQoKWBgIG1ldGhvZCwgdGhlIHNlcXVlbmNlIGxlbmd0aCBpcyBhZGRlZCwgYXMgZm9yIHNsaWNlXG4gICBpbmRpY2VzLiAgSWYgaXQgaXMgc3RpbGwgbmVnYXRpdmUsIGl0IGlzIHRydW5jYXRlZCB0byB6ZXJvLCBhcyBmb3JcbiAgIHNsaWNlIGluZGljZXMuXG5cbjUuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gYGAtMWBgLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjYuIFRoZSBgYHNvcnQoKWBgIGFuZCBgYHJldmVyc2UoKWBgIG1ldGhvZHMgbW9kaWZ5IHRoZSBzZXF1ZW5jZSBpblxuICAgcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiBzb3J0aW5nIG9yIHJldmVyc2luZyBhIGxhcmdlXG4gICBzZXF1ZW5jZS4gIFRvIHJlbWluZCB5b3UgdGhhdCB0aGV5IG9wZXJhdGUgYnkgc2lkZSBlZmZlY3QsIHRoZXlcbiAgIGRvblwndCByZXR1cm4gdGhlIHNvcnRlZCBvciByZXZlcnNlZCBzZXF1ZW5jZS5cblxuNy4gVGhlIGBgc29ydCgpYGAgbWV0aG9kIHRha2VzIG9wdGlvbmFsIGFyZ3VtZW50cyBmb3IgY29udHJvbGxpbmcgdGhlXG4gICBjb21wYXJpc29ucy4gIEVhY2ggbXVzdCBiZSBzcGVjaWZpZWQgYXMgYSBrZXl3b3JkIGFyZ3VtZW50LlxuXG4gICAqa2V5KiBzcGVjaWZpZXMgYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQgdGhhdCBpcyB1c2VkIHRvIGV4dHJhY3RcbiAgIGEgY29tcGFyaXNvbiBrZXkgZnJvbSBlYWNoIGxpc3QgZWxlbWVudDogYGBrZXk9c3RyLmxvd2VyYGAuICBUaGVcbiAgIGRlZmF1bHQgdmFsdWUgaXMgYGBOb25lYGAuIFVzZSBgYGZ1bmN0b29scy5jbXBfdG9fa2V5KClgYCB0b1xuICAgY29udmVydCBhbiBvbGQtc3R5bGUgKmNtcCogZnVuY3Rpb24gdG8gYSAqa2V5KiBmdW5jdGlvbi5cblxuICAgKnJldmVyc2UqIGlzIGEgYm9vbGVhbiB2YWx1ZS4gIElmIHNldCB0byBgYFRydWVgYCwgdGhlbiB0aGUgbGlzdFxuICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgVGhlIGBgc29ydCgpYGAgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzIHN0YWJsZVxuICAgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0XG4gICBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW4gbXVsdGlwbGUgcGFzc2VzXG4gICAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnkgZ3JhZGUpLlxuXG4gICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbWFrZXMgdGhlIGxpc3QgYXBwZWFyXG4gICBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzIGBgVmFsdWVFcnJvcmBgIGlmIGl0IGNhbiBkZXRlY3RcbiAgIHRoYXQgdGhlIGxpc3QgaGFzIGJlZW4gbXV0YXRlZCBkdXJpbmcgYSBzb3J0LlxuXG44LiBgYHNvcnQoKWBgIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYGBieXRlYXJyYXlgYCBvYmplY3RzLlxuXG5cbkJ5dGVzIGFuZCBCeXRlIEFycmF5IE1ldGhvZHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzLCBiZWluZyAic3RyaW5ncyBvZiBieXRlcyIsIGhhdmUgYWxsXG5tZXRob2RzIGZvdW5kIG9uIHN0cmluZ3MsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgYGVuY29kZSgpYGAsXG5gYGZvcm1hdCgpYGAgYW5kIGBgaXNpZGVudGlmaWVyKClgYCwgd2hpY2ggZG8gbm90IG1ha2Ugc2Vuc2Ugd2l0aFxudGhlc2UgdHlwZXMuICBGb3IgY29udmVydGluZyB0aGUgb2JqZWN0cyB0byBzdHJpbmdzLCB0aGV5IGhhdmUgYVxuYGBkZWNvZGUoKWBgIG1ldGhvZC5cblxuV2hlcmV2ZXIgb25lIG9mIHRoZXNlIG1ldGhvZHMgbmVlZHMgdG8gaW50ZXJwcmV0IHRoZSBieXRlcyBhc1xuY2hhcmFjdGVycyAoZS5nLiB0aGUgYGBpcy4uLigpYGAgbWV0aG9kcyksIHRoZSBBU0NJSSBjaGFyYWN0ZXIgc2V0IGlzXG5hc3N1bWVkLlxuXG5Ob3RlOiBUaGUgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgZG9uXCd0IGFjY2VwdCBzdHJpbmdzIGFzXG4gIHRoZWlyIGFyZ3VtZW50cywganVzdCBhcyB0aGUgbWV0aG9kcyBvbiBzdHJpbmdzIGRvblwndCBhY2NlcHQgYnl0ZXNcbiAgYXMgdGhlaXIgYXJndW1lbnRzLiAgRm9yIGV4YW1wbGUsIHlvdSBoYXZlIHRvIHdyaXRlXG5cbiAgICAgYSA9ICJhYmMiXG4gICAgIGIgPSBhLnJlcGxhY2UoImEiLCAiZiIpXG5cbiAgYW5kXG5cbiAgICAgYSA9IGIiYWJjIlxuICAgICBiID0gYS5yZXBsYWNlKGIiYSIsIGIiZiIpXG5cbmJ5dGVzLmRlY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpXG5ieXRlYXJyYXkuZGVjb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGEgc3RyaW5nIGRlY29kZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXMuICBEZWZhdWx0IGVuY29kaW5nIGlzXG4gICBgYFwndXRmLThcJ2BgLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG4gICBoYW5kbGluZyBzY2hlbWUuICBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgYGBcJ3N0cmljdFwnYGAsIG1lYW5pbmdcbiAgIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgYGBVbmljb2RlRXJyb3JgYC4gIE90aGVyIHBvc3NpYmxlXG4gICB2YWx1ZXMgYXJlIGBgXCdpZ25vcmVcJ2BgLCBgYFwncmVwbGFjZVwnYGAgYW5kIGFueSBvdGhlciBuYW1lXG4gICByZWdpc3RlcmVkIHZpYSBgYGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpYGAsIHNlZSBzZWN0aW9uICpDb2RlYyBCYXNlXG4gICBDbGFzc2VzKi4gRm9yIGEgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZFxuICAgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogQWRkZWQgc3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMuXG5cblRoZSBieXRlcyBhbmQgYnl0ZWFycmF5IHR5cGVzIGhhdmUgYW4gYWRkaXRpb25hbCBjbGFzcyBtZXRob2Q6XG5cbmNsYXNzbWV0aG9kIGJ5dGVzLmZyb21oZXgoc3RyaW5nKVxuY2xhc3NtZXRob2QgYnl0ZWFycmF5LmZyb21oZXgoc3RyaW5nKVxuXG4gICBUaGlzIGBgYnl0ZXNgYCBjbGFzcyBtZXRob2QgcmV0dXJucyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsXG4gICBkZWNvZGluZyB0aGUgZ2l2ZW4gc3RyaW5nIG9iamVjdC4gIFRoZSBzdHJpbmcgbXVzdCBjb250YWluIHR3b1xuICAgaGV4YWRlY2ltYWwgZGlnaXRzIHBlciBieXRlLCBzcGFjZXMgYXJlIGlnbm9yZWQuXG5cbiAgID4+PiBieXRlcy5mcm9taGV4KFwnZjAgZjFmMiAgXCcpXG4gICBiXCdcXHhmMFxceGYxXFx4ZjJcJ1xuXG5UaGUgbWFrZXRyYW5zIGFuZCB0cmFuc2xhdGUgbWV0aG9kcyBkaWZmZXIgaW4gc2VtYW50aWNzIGZyb20gdGhlXG52ZXJzaW9ucyBhdmFpbGFibGUgb24gc3RyaW5nczpcblxuYnl0ZXMudHJhbnNsYXRlKHRhYmxlWywgZGVsZXRlXSlcbmJ5dGVhcnJheS50cmFuc2xhdGUodGFibGVbLCBkZWxldGVdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IHdoZXJlIGFsbCBieXRlc1xuICAgb2NjdXJyaW5nIGluIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlKiBhcmUgcmVtb3ZlZCwgYW5kIHRoZVxuICAgcmVtYWluaW5nIGJ5dGVzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb25cbiAgIHRhYmxlLCB3aGljaCBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0IG9mIGxlbmd0aCAyNTYuXG5cbiAgIFlvdSBjYW4gdXNlIHRoZSBgYGJ5dGVzLm1ha2V0cmFucygpYGAgbWV0aG9kIHRvIGNyZWF0ZSBhXG4gICB0cmFuc2xhdGlvbiB0YWJsZS5cblxuICAgU2V0IHRoZSAqdGFibGUqIGFyZ3VtZW50IHRvIGBgTm9uZWBgIGZvciB0cmFuc2xhdGlvbnMgdGhhdCBvbmx5XG4gICBkZWxldGUgY2hhcmFjdGVyczpcblxuICAgICAgPj4+IGJcJ3JlYWQgdGhpcyBzaG9ydCB0ZXh0XCcudHJhbnNsYXRlKE5vbmUsIGJcJ2FlaW91XCcpXG4gICAgICBiXCdyZCB0aHMgc2hydCB0eHRcJ1xuXG5zdGF0aWMgYnl0ZXMubWFrZXRyYW5zKGZyb20sIHRvKVxuc3RhdGljIGJ5dGVhcnJheS5tYWtldHJhbnMoZnJvbSwgdG8pXG5cbiAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvclxuICAgYGBieXRlcy50cmFuc2xhdGUoKWBgIHRoYXQgd2lsbCBtYXAgZWFjaCBjaGFyYWN0ZXIgaW4gKmZyb20qIGludG9cbiAgIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gKnRvKjsgKmZyb20qIGFuZCAqdG8qIG11c3QgYmVcbiAgIGJ5dGVzIG9iamVjdHMgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjEuXG4nLAorICd0eXBlc3NlcS1tdXRhYmxlJzogJ1xuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5MaXN0IGFuZCBieXRlYXJyYXkgb2JqZWN0cyBzdXBwb3J0IGFkZGl0aW9uYWwgb3BlcmF0aW9ucyB0aGF0IGFsbG93XG5pbi1wbGFjZSBtb2RpZmljYXRpb24gb2YgdGhlIG9iamVjdC4gIE90aGVyIG11dGFibGUgc2VxdWVuY2UgdHlwZXNcbih3aGVuIGFkZGVkIHRvIHRoZSBsYW5ndWFnZSkgc2hvdWxkIGFsc28gc3VwcG9ydCB0aGVzZSBvcGVyYXRpb25zLlxuU3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2UgdHlwZXM6IHN1Y2ggb2JqZWN0cyBjYW5ub3RcbmJlIG1vZGlmaWVkIG9uY2UgY3JlYXRlZC4gVGhlIGZvbGxvd2luZyBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIG9uXG5tdXRhYmxlIHNlcXVlbmNlIHR5cGVzICh3aGVyZSAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCkuXG5cbk5vdGUgdGhhdCB3aGlsZSBsaXN0cyBhbGxvdyB0aGVpciBpdGVtcyB0byBiZSBvZiBhbnkgdHlwZSwgYnl0ZWFycmF5XG5vYmplY3QgIml0ZW1zIiBhcmUgYWxsIGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbnwgYGBzW2ldID0geGBgICAgICAgICAgICAgICAgICAgIHwgaXRlbSAqaSogb2YgKnMqIGlzIHJlcGxhY2VkIGJ5ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6al0gPSB0YGAgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aGUgY29udGVudHMgb2YgdGhlICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGl0ZXJhYmxlICp0KiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYGRlbCBzW2k6al1gYCAgICAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmpdID0gW11gYCAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzW2k6ajprXSA9IHRgYCAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mIGBgc1tpOmo6a11gYCBhcmUgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBsYWNlZCBieSB0aG9zZSBvZiAqdCogICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBkZWwgc1tpOmo6a11gYCAgICAgICAgICAgICAgIHwgcmVtb3ZlcyB0aGUgZWxlbWVudHMgb2YgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHNbaTpqOmtdYGAgZnJvbSB0aGUgbGlzdCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmFwcGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbeF1gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLmV4dGVuZCh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHNbbGVuKHMpOmxlbihzKV0gPSB4YGAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5jb3VudCh4KWBgICAgICAgICAgICAgICAgICB8IHJldHVybiBudW1iZXIgb2YgKmkqXCdzIGZvciB3aGljaCB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tpXSA9PSB4YGAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5kZXgoeFssIGlbLCBqXV0pYGAgICAgICAgfCByZXR1cm4gc21hbGxlc3QgKmsqIHN1Y2ggdGhhdCAgICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1trXSA9PSB4YGAgYW5kIGBgaSA8PSBrIDwgamBgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBgYHMuaW5zZXJ0KGksIHgpYGAgICAgICAgICAgICAgfCBzYW1lIGFzIGBgc1tpOmldID0gW3hdYGAgICAgICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnBvcChbaV0pYGAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYHggPSBzW2ldOyBkZWwgc1tpXTsgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXR1cm4geGBgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgYGBzLnJlbW92ZSh4KWBgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyBgYGRlbCBzW3MuaW5kZXgoeCldYGAgICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5yZXZlcnNlKClgYCAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDYpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IGBgcy5zb3J0KFtrZXlbLCByZXZlcnNlXV0pYGAgICB8IHNvcnQgdGhlIGl0ZW1zIG9mICpzKiBpbiBwbGFjZSAgIHwgKDYpLCAoNyksICg4KSAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gKngqIGNhbiBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LlxuXG4zLiBSYWlzZXMgYGBWYWx1ZUVycm9yYGAgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlbiBhIG5lZ2F0aXZlXG4gICBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIHNlY29uZCBvciB0aGlyZCBwYXJhbWV0ZXIgdG8gdGhlIGBgaW5kZXgoKWBgXG4gICBtZXRob2QsIHRoZSBzZXF1ZW5jZSBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZSBpbmRpY2VzLiAgSWYgaXRcbiAgIGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yIHNsaWNlIGluZGljZXMuXG5cbjQuIFdoZW4gYSBuZWdhdGl2ZSBpbmRleCBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGVcbiAgIGBgaW5zZXJ0KClgYCBtZXRob2QsIHRoZSBzZXF1ZW5jZSBsZW5ndGggaXMgYWRkZWQsIGFzIGZvciBzbGljZVxuICAgaW5kaWNlcy4gIElmIGl0IGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBpcyB0cnVuY2F0ZWQgdG8gemVybywgYXMgZm9yXG4gICBzbGljZSBpbmRpY2VzLlxuXG41LiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvIGBgLTFgYCwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG42LiBUaGUgYGBzb3J0KClgYCBhbmQgYGByZXZlcnNlKClgYCBtZXRob2RzIG1vZGlmeSB0aGUgc2VxdWVuY2UgaW5cbiAgIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlIHdoZW4gc29ydGluZyBvciByZXZlcnNpbmcgYSBsYXJnZVxuICAgc2VxdWVuY2UuICBUbyByZW1pbmQgeW91IHRoYXQgdGhleSBvcGVyYXRlIGJ5IHNpZGUgZWZmZWN0LCB0aGV5XG4gICBkb25cJ3QgcmV0dXJuIHRoZSBzb3J0ZWQgb3IgcmV2ZXJzZWQgc2VxdWVuY2UuXG5cbjcuIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCB0YWtlcyBvcHRpb25hbCBhcmd1bWVudHMgZm9yIGNvbnRyb2xsaW5nIHRoZVxuICAgY29tcGFyaXNvbnMuICBFYWNoIG11c3QgYmUgc3BlY2lmaWVkIGFzIGEga2V5d29yZCBhcmd1bWVudC5cblxuICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0byBleHRyYWN0XG4gICBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQ6IGBga2V5PXN0ci5sb3dlcmBgLiAgVGhlXG4gICBkZWZhdWx0IHZhbHVlIGlzIGBgTm9uZWBgLiBVc2UgYGBmdW5jdG9vbHMuY21wX3RvX2tleSgpYGAgdG9cbiAgIGNvbnZlcnQgYW4gb2xkLXN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gYGBUcnVlYGAsIHRoZW4gdGhlIGxpc3RcbiAgIGVsZW1lbnRzIGFyZSBzb3J0ZWQgYXMgaWYgZWFjaCBjb21wYXJpc29uIHdlcmUgcmV2ZXJzZWQuXG5cbiAgIFRoZSBgYHNvcnQoKWBgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gIEEgc29ydCBpcyBzdGFibGVcbiAgIGlmIGl0IGd1YXJhbnRlZXMgbm90IHRvIGNoYW5nZSB0aGUgcmVsYXRpdmUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdFxuICAgY29tcGFyZSBlcXVhbCAtLS0gdGhpcyBpcyBoZWxwZnVsIGZvciBzb3J0aW5nIGluIG11bHRpcGxlIHBhc3Nlc1xuICAgKGZvciBleGFtcGxlLCBzb3J0IGJ5IGRlcGFydG1lbnQsIHRoZW4gYnkgc2FsYXJ5IGdyYWRlKS5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyBgYFZhbHVlRXJyb3JgYCBpZiBpdCBjYW4gZGV0ZWN0XG4gICB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuOC4gYGBzb3J0KClgYCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGBgYnl0ZWFycmF5YGAgb2JqZWN0cy5cbicsCiAgJ3VuYXJ5JzogJ1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSBgYC1gYCAobWludXMpIG9wZXJhdG9yIHlpZWxkcyB0aGUgbmVnYXRpb24gb2YgaXRzIG51bWVyaWNcbmFyZ3VtZW50LlxuXG5UaGUgdW5hcnkgYGArYGAgKHBsdXMpIG9wZXJhdG9yIHlpZWxkcyBpdHMgbnVtZXJpYyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cblRoZSB1bmFyeSBgYH5gYCAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBgYHhgYCBpcyBkZWZpbmVkIGFzXG5gYC0oeCsxKWBgLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG5gYFR5cGVFcnJvcmBgIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAogICd3aGlsZSc6ICdcblRoZSBgYHdoaWxlYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGB3aGlsZWBgIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlIGBgZWxzZWBgIGNsYXVzZSwgaWYgcHJlc2VudCwgaXNcbmV4ZWN1dGVkIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BIGBgYnJlYWtgYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSBgYGVsc2VgYCBjbGF1c2VcJ3Mgc3VpdGUuICBBIGBgY29udGludWVgYFxuc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kXG5nb2VzIGJhY2sgdG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cbicsCi0gJ3dpdGgnOiAnXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgaXMgdXNlZCB0byB3cmFwIHRoZSBleGVjdXRpb24gb2YgYSBibG9jayB3aXRoXG5tZXRob2RzIGRlZmluZWQgYnkgYSBjb250ZXh0IG1hbmFnZXIgKHNlZSBzZWN0aW9uICpXaXRoIFN0YXRlbWVudFxuQ29udGV4dCBNYW5hZ2VycyopLiBUaGlzIGFsbG93cyBjb21tb25cbmBgdHJ5YGAuLi5gYGV4Y2VwdGBgLi4uYGBmaW5hbGx5YGAgdXNhZ2UgcGF0dGVybnMgdG8gYmUgZW5jYXBzdWxhdGVkXG5mb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgd2l0aCBvbmUgIml0ZW0iIHByb2NlZWRzIGFzXG5mb2xsb3dzOlxuXG4xLiBUaGUgY29udGV4dCBleHByZXNzaW9uICh0aGUgZXhwcmVzc2lvbiBnaXZlbiBpbiB0aGUgKip3aXRoX2l0ZW0qKilcbiAgIGlzIGV2YWx1YXRlZCB0byBvYnRhaW4gYSBjb250ZXh0IG1hbmFnZXIuXG5cbjIuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2VudGVyX18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLlxuXG4zLiBJZiBhIHRhcmdldCB3YXMgaW5jbHVkZWQgaW4gdGhlIGBgd2l0aGBgIHN0YXRlbWVudCwgdGhlIHJldHVyblxuICAgdmFsdWUgZnJvbSBgYF9fZW50ZXJfXygpYGAgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgZ3VhcmFudGVlcyB0aGF0IGlmIHRoZSBgYF9fZW50ZXJfXygpYGBcbiAgICAgbWV0aG9kIHJldHVybnMgd2l0aG91dCBhbiBlcnJvciwgdGhlbiBgYF9fZXhpdF9fKClgYCB3aWxsIGFsd2F5c1xuICAgICBiZSBjYWxsZWQuICBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiAgU2VlIHN0ZXAgNSBiZWxvdy5cblxuNC4gVGhlIHN1aXRlIGlzIGV4ZWN1dGVkLlxuXG41LiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIG1ldGhvZCBpcyBpbnZva2VkLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBjYXVzZWQgdGhlIHN1aXRlIHRvIGJlIGV4aXRlZCwgaXRzIHR5cGUsIHZhbHVlLCBhbmRcbiAgIHRyYWNlYmFjayBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byBgYF9fZXhpdF9fKClgYC4gT3RoZXJ3aXNlLFxuICAgdGhyZWUgYGBOb25lYGAgYXJndW1lbnRzIGFyZSBzdXBwbGllZC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZHVlIHRvIGFuIGV4Y2VwdGlvbiwgYW5kIHRoZSByZXR1cm4gdmFsdWVcbiAgIGZyb20gdGhlIGBgX19leGl0X18oKWBgIG1ldGhvZCB3YXMgZmFsc2UsIHRoZSBleGNlcHRpb24gaXNcbiAgIHJlcmFpc2VkLiAgSWYgdGhlIHJldHVybiB2YWx1ZSB3YXMgdHJ1ZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgc3VwcHJlc3NlZCwgYW5kIGV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aCB0aGUgc3RhdGVtZW50IGZvbGxvd2luZ1xuICAgdGhlIGBgd2l0aGBgIHN0YXRlbWVudC5cblxuICAgSWYgdGhlIHN1aXRlIHdhcyBleGl0ZWQgZm9yIGFueSByZWFzb24gb3RoZXIgdGhhbiBhbiBleGNlcHRpb24sIHRoZVxuICAgcmV0dXJuIHZhbHVlIGZyb20gYGBfX2V4aXRfXygpYGAgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlIGBgd2l0aGBgIHN0YXRlbWVudHMgd2VyZSBuZXN0ZWQ6XG5cbiAgIHdpdGggQSgpIGFzIGEsIEIoKSBhcyBiOlxuICAgICAgIHN1aXRlXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgd2l0aCBBKCkgYXMgYTpcbiAgICAgICB3aXRoIEIoKSBhcyBiOlxuICAgICAgICAgICBzdWl0ZVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBtdWx0aXBsZSBjb250ZXh0IGV4cHJlc3Npb25zLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbiAgICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob25cbiAgICAgIGBgd2l0aGBgIHN0YXRlbWVudC5cbicsCi0gJ3lpZWxkJzogJ1xuVGhlIGBgeWllbGRgYCBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHlpZWxkX3N0bXQgOjo9IHlpZWxkX2V4cHJlc3Npb25cblxuVGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgaXMgb25seSB1c2VkIHdoZW4gZGVmaW5pbmcgYSBnZW5lcmF0b3JcbmZ1bmN0aW9uLCBhbmQgaXMgb25seSB1c2VkIGluIHRoZSBib2R5IG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uXG5Vc2luZyBhIGBgeWllbGRgYCBzdGF0ZW1lbnQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIHN1ZmZpY2llbnQgdG9cbmNhdXNlIHRoYXQgZGVmaW5pdGlvbiB0byBjcmVhdGUgYSBnZW5lcmF0b3IgZnVuY3Rpb24gaW5zdGVhZCBvZiBhXG5ub3JtYWwgZnVuY3Rpb24uIFdoZW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkLCBpdCByZXR1cm5zIGFuXG5pdGVyYXRvciBrbm93biBhcyBhIGdlbmVyYXRvciBpdGVyYXRvciwgb3IgbW9yZSBjb21tb25seSwgYSBnZW5lcmF0b3IuXG5UaGUgYm9keSBvZiB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGJ5IGNhbGxpbmcgdGhlXG5gYG5leHQoKWBgIGZ1bmN0aW9uIG9uIHRoZSBnZW5lcmF0b3IgcmVwZWF0ZWRseSB1bnRpbCBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi5cblxuV2hlbiBhIGBgeWllbGRgYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQsIHRoZSBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yIGlzXG5mcm96ZW4gYW5kIHRoZSB2YWx1ZSBvZiAqKmV4cHJlc3Npb25fbGlzdCoqIGlzIHJldHVybmVkIHRvXG5gYG5leHQoKWBgXCdzIGNhbGxlci4gIEJ5ICJmcm96ZW4iIHdlIG1lYW4gdGhhdCBhbGwgbG9jYWwgc3RhdGUgaXNcbnJldGFpbmVkLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgYmluZGluZ3Mgb2YgbG9jYWwgdmFyaWFibGVzLCB0aGVcbmluc3RydWN0aW9uIHBvaW50ZXIsIGFuZCB0aGUgaW50ZXJuYWwgZXZhbHVhdGlvbiBzdGFjazogZW5vdWdoXG5pbmZvcm1hdGlvbiBpcyBzYXZlZCBzbyB0aGF0IHRoZSBuZXh0IHRpbWUgYGBuZXh0KClgYCBpcyBpbnZva2VkLCB0aGVcbmZ1bmN0aW9uIGNhbiBwcm9jZWVkIGV4YWN0bHkgYXMgaWYgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgd2VyZSBqdXN0XG5hbm90aGVyIGV4dGVybmFsIGNhbGwuXG5cblRoZSBgYHlpZWxkYGAgc3RhdGVtZW50IGlzIGFsbG93ZWQgaW4gdGhlIGBgdHJ5YGAgY2xhdXNlIG9mIGEgYGB0cnlgYFxuLi4uICBgYGZpbmFsbHlgYCBjb25zdHJ1Y3QuICBJZiB0aGUgZ2VuZXJhdG9yIGlzIG5vdCByZXN1bWVkIGJlZm9yZSBpdFxuaXMgZmluYWxpemVkIChieSByZWFjaGluZyBhIHplcm8gcmVmZXJlbmNlIGNvdW50IG9yIGJ5IGJlaW5nIGdhcmJhZ2VcbmNvbGxlY3RlZCksIHRoZSBnZW5lcmF0b3ItaXRlcmF0b3JcJ3MgYGBjbG9zZSgpYGAgbWV0aG9kIHdpbGwgYmVcbmNhbGxlZCwgYWxsb3dpbmcgYW55IHBlbmRpbmcgYGBmaW5hbGx5YGAgY2xhdXNlcyB0byBleGVjdXRlLlxuXG5TZWUgYWxzbzpcblxuICAgKipQRVAgMDI1NSoqIC0gU2ltcGxlIEdlbmVyYXRvcnNcbiAgICAgIFRoZSBwcm9wb3NhbCBmb3IgYWRkaW5nIGdlbmVyYXRvcnMgYW5kIHRoZSBgYHlpZWxkYGAgc3RhdGVtZW50XG4gICAgICB0byBQeXRob24uXG5cbiAgICoqUEVQIDAzNDIqKiAtIENvcm91dGluZXMgdmlhIEVuaGFuY2VkIEdlbmVyYXRvcnNcbiAgICAgIFRoZSBwcm9wb3NhbCB0aGF0LCBhbW9uZyBvdGhlciBnZW5lcmF0b3IgZW5oYW5jZW1lbnRzLCBwcm9wb3NlZFxuICAgICAgYWxsb3dpbmcgYGB5aWVsZGBgIHRvIGFwcGVhciBpbnNpZGUgYSBgYHRyeWBgIC4uLiBgYGZpbmFsbHlgYFxuICAgICAgYmxvY2suXG4nfQorICd3aXRoJzogJ1xuVGhlIGBgd2l0aGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYGB3aXRoYGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uXG5gYHRyeWBgLi4uYGBleGNlcHRgYC4uLmBgZmluYWxseWBgIHVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZFxuZm9yIGNvbnZlbmllbnQgcmV1c2UuXG5cbiAgIHdpdGhfc3RtdCA6Oj0gIndpdGgiIHdpdGhfaXRlbSAoIiwiIHdpdGhfaXRlbSkqICI6IiBzdWl0ZVxuICAgd2l0aF9pdGVtIDo6PSBleHByZXNzaW9uIFsiYXMiIHRhcmdldF1cblxuVGhlIGV4ZWN1dGlvbiBvZiB0aGUgYGB3aXRoYGAgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlIGBgd2l0aF9pdGVtYGApXG4gICBpcyBldmFsdWF0ZWQgdG8gb2J0YWluIGEgY29udGV4dCBtYW5hZ2VyLlxuXG4yLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19leGl0X18oKWBgIGlzIGxvYWRlZCBmb3IgbGF0ZXIgdXNlLlxuXG4zLiBUaGUgY29udGV4dCBtYW5hZ2VyXCdzIGBgX19lbnRlcl9fKClgYCBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQsIHRoZSByZXR1cm5cbiAgIHZhbHVlIGZyb20gYGBfX2VudGVyX18oKWBgIGlzIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBOb3RlOiBUaGUgYGB3aXRoYGAgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgYGBfX2VudGVyX18oKWBgXG4gICAgIG1ldGhvZCByZXR1cm5zIHdpdGhvdXQgYW4gZXJyb3IsIHRoZW4gYGBfX2V4aXRfXygpYGAgd2lsbCBhbHdheXNcbiAgICAgYmUgY2FsbGVkLiBUaHVzLCBpZiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIHRoZSBhc3NpZ25tZW50IHRvIHRoZVxuICAgICB0YXJnZXQgbGlzdCwgaXQgd2lsbCBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIGFuIGVycm9yIG9jY3VycmluZ1xuICAgICB3aXRoaW4gdGhlIHN1aXRlIHdvdWxkIGJlLiBTZWUgc3RlcCA2IGJlbG93LlxuXG41LiBUaGUgc3VpdGUgaXMgZXhlY3V0ZWQuXG5cbjYuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgYGBfX2V4aXRfXygpYGAgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIGBgX19leGl0X18oKWBgLiBPdGhlcndpc2UsXG4gICB0aHJlZSBgYE5vbmVgYCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBkdWUgdG8gYW4gZXhjZXB0aW9uLCBhbmQgdGhlIHJldHVybiB2YWx1ZVxuICAgZnJvbSB0aGUgYGBfX2V4aXRfXygpYGAgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpc1xuICAgcmVyYWlzZWQuICBJZiB0aGUgcmV0dXJuIHZhbHVlIHdhcyB0cnVlLCB0aGUgZXhjZXB0aW9uIGlzXG4gICBzdXBwcmVzc2VkLCBhbmQgZXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoIHRoZSBzdGF0ZW1lbnQgZm9sbG93aW5nXG4gICB0aGUgYGB3aXRoYGAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSBgYF9fZXhpdF9fKClgYCBpcyBpZ25vcmVkLCBhbmQgZXhlY3V0aW9uIHByb2NlZWRzXG4gICBhdCB0aGUgbm9ybWFsIGxvY2F0aW9uIGZvciB0aGUga2luZCBvZiBleGl0IHRoYXQgd2FzIHRha2VuLlxuXG5XaXRoIG1vcmUgdGhhbiBvbmUgaXRlbSwgdGhlIGNvbnRleHQgbWFuYWdlcnMgYXJlIHByb2Nlc3NlZCBhcyBpZlxubXVsdGlwbGUgYGB3aXRoYGAgc3RhdGVtZW50cyB3ZXJlIG5lc3RlZDpcblxuICAgd2l0aCBBKCkgYXMgYSwgQigpIGFzIGI6XG4gICAgICAgc3VpdGVcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICB3aXRoIEEoKSBhcyBhOlxuICAgICAgIHdpdGggQigpIGFzIGI6XG4gICAgICAgICAgIHN1aXRlXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFN1cHBvcnQgZm9yIG11bHRpcGxlIGNvbnRleHQgZXhwcmVzc2lvbnMuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuICAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvblxuICAgICAgYGB3aXRoYGAgc3RhdGVtZW50LlxuJywKKyAneWllbGQnOiAnXG5UaGUgYGB5aWVsZGBgIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgeWllbGRfc3RtdCA6Oj0geWllbGRfZXhwcmVzc2lvblxuXG5UaGUgYGB5aWVsZGBgIHN0YXRlbWVudCBpcyBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhIGdlbmVyYXRvclxuZnVuY3Rpb24sIGFuZCBpcyBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi5cblVzaW5nIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgc3VmZmljaWVudCB0b1xuY2F1c2UgdGhhdCBkZWZpbml0aW9uIHRvIGNyZWF0ZSBhIGdlbmVyYXRvciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGFcbm5vcm1hbCBmdW5jdGlvbi4gV2hlbiBhIGdlbmVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW5cbml0ZXJhdG9yIGtub3duIGFzIGEgZ2VuZXJhdG9yIGl0ZXJhdG9yLCBvciBtb3JlIGNvbW1vbmx5LCBhIGdlbmVyYXRvci5cblRoZSBib2R5IG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaXMgZXhlY3V0ZWQgYnkgY2FsbGluZyB0aGVcbmBgbmV4dCgpYGAgZnVuY3Rpb24gb24gdGhlIGdlbmVyYXRvciByZXBlYXRlZGx5IHVudGlsIGl0IHJhaXNlcyBhblxuZXhjZXB0aW9uLlxuXG5XaGVuIGEgYGB5aWVsZGBgIHN0YXRlbWVudCBpcyBleGVjdXRlZCwgdGhlIHN0YXRlIG9mIHRoZSBnZW5lcmF0b3IgaXNcbmZyb3plbiBhbmQgdGhlIHZhbHVlIG9mIGBgZXhwcmVzc2lvbl9saXN0YGAgaXMgcmV0dXJuZWQgdG9cbmBgbmV4dCgpYGBcJ3MgY2FsbGVyLiAgQnkgImZyb3plbiIgd2UgbWVhbiB0aGF0IGFsbCBsb2NhbCBzdGF0ZSBpc1xucmV0YWluZWQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBiaW5kaW5ncyBvZiBsb2NhbCB2YXJpYWJsZXMsIHRoZVxuaW5zdHJ1Y3Rpb24gcG9pbnRlciwgYW5kIHRoZSBpbnRlcm5hbCBldmFsdWF0aW9uIHN0YWNrOiBlbm91Z2hcbmluZm9ybWF0aW9uIGlzIHNhdmVkIHNvIHRoYXQgdGhlIG5leHQgdGltZSBgYG5leHQoKWBgIGlzIGludm9rZWQsIHRoZVxuZnVuY3Rpb24gY2FuIHByb2NlZWQgZXhhY3RseSBhcyBpZiB0aGUgYGB5aWVsZGBgIHN0YXRlbWVudCB3ZXJlIGp1c3RcbmFub3RoZXIgZXh0ZXJuYWwgY2FsbC5cblxuVGhlIGBgeWllbGRgYCBzdGF0ZW1lbnQgaXMgYWxsb3dlZCBpbiB0aGUgYGB0cnlgYCBjbGF1c2Ugb2YgYSBgYHRyeWBgXG4uLi4gIGBgZmluYWxseWBgIGNvbnN0cnVjdC4gIElmIHRoZSBnZW5lcmF0b3IgaXMgbm90IHJlc3VtZWQgYmVmb3JlIGl0XG5pcyBmaW5hbGl6ZWQgKGJ5IHJlYWNoaW5nIGEgemVybyByZWZlcmVuY2UgY291bnQgb3IgYnkgYmVpbmcgZ2FyYmFnZVxuY29sbGVjdGVkKSwgdGhlIGdlbmVyYXRvci1pdGVyYXRvclwncyBgYGNsb3NlKClgYCBtZXRob2Qgd2lsbCBiZVxuY2FsbGVkLCBhbGxvd2luZyBhbnkgcGVuZGluZyBgYGZpbmFsbHlgYCBjbGF1c2VzIHRvIGV4ZWN1dGUuXG5cblNlZSBhbHNvOlxuXG4gICAqKlBFUCAwMjU1KiogLSBTaW1wbGUgR2VuZXJhdG9yc1xuICAgICAgVGhlIHByb3Bvc2FsIGZvciBhZGRpbmcgZ2VuZXJhdG9ycyBhbmQgdGhlIGBgeWllbGRgYCBzdGF0ZW1lbnRcbiAgICAgIHRvIFB5dGhvbi5cblxuICAgKipQRVAgMDM0MioqIC0gQ29yb3V0aW5lcyB2aWEgRW5oYW5jZWQgR2VuZXJhdG9yc1xuICAgICAgVGhlIHByb3Bvc2FsIHRoYXQsIGFtb25nIG90aGVyIGdlbmVyYXRvciBlbmhhbmNlbWVudHMsIHByb3Bvc2VkXG4gICAgICBhbGxvd2luZyBgYHlpZWxkYGAgdG8gYXBwZWFyIGluc2lkZSBhIGBgdHJ5YGAgLi4uIGBgZmluYWxseWBgXG4gICAgICBibG9jay5cbid9CmRpZmYgLS1naXQgYS9MaWIvcXVldWUucHkgYi9MaWIvcXVldWUucHkKaW5kZXggZjA1MWYxYy4uYmVlN2VkNCAxMDA2NDQKLS0tIGEvTGliL3F1ZXVlLnB5CisrKyBiL0xpYi9xdWV1ZS5weQpAQCAtMTEwLDE0ICsxMTAsMTQgQEAKICAgICBkZWYgZnVsbChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHF1ZXVlIGlzIGZ1bGwsIEZhbHNlIG90aGVyd2lzZSAobm90IHJlbGlhYmxlISkuCiAKLSAgICAgICAgVGhpcyBtZXRob2QgaXMgbGlrZWx5IHRvIGJlIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gIFVzZSBxc2l6ZSgpID09IG4KKyAgICAgICAgVGhpcyBtZXRob2QgaXMgbGlrZWx5IHRvIGJlIHJlbW92ZWQgYXQgc29tZSBwb2ludC4gIFVzZSBxc2l6ZSgpID49IG4KICAgICAgICAgYXMgYSBkaXJlY3Qgc3Vic3RpdHV0ZSwgYnV0IGJlIGF3YXJlIHRoYXQgZWl0aGVyIGFwcHJvYWNoIHJpc2tzIGEgcmFjZQogICAgICAgICBjb25kaXRpb24gd2hlcmUgYSBxdWV1ZSBjYW4gc2hyaW5rIGJlZm9yZSB0aGUgcmVzdWx0IG9mIGZ1bGwoKSBvcgogICAgICAgICBxc2l6ZSgpIGNhbiBiZSB1c2VkLgogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLm11dGV4LmFjcXVpcmUoKQotICAgICAgICBuID0gMCA8IHNlbGYubWF4c2l6ZSA9PSBzZWxmLl9xc2l6ZSgpCisgICAgICAgIG4gPSAwIDwgc2VsZi5tYXhzaXplIDw9IHNlbGYuX3FzaXplKCkKICAgICAgICAgc2VsZi5tdXRleC5yZWxlYXNlKCkKICAgICAgICAgcmV0dXJuIG4KIApAQCAtMTM2LDE2ICsxMzYsMTYgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5tYXhzaXplID4gMDoKICAgICAgICAgICAgICAgICBpZiBub3QgYmxvY2s6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3FzaXplKCkgPT0gc2VsZi5tYXhzaXplOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9xc2l6ZSgpID49IHNlbGYubWF4c2l6ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZ1bGwKICAgICAgICAgICAgICAgICBlbGlmIHRpbWVvdXQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5fcXNpemUoKSA9PSBzZWxmLm1heHNpemU6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuX3FzaXplKCkgPj0gc2VsZi5tYXhzaXplOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ub3RfZnVsbC53YWl0KCkKICAgICAgICAgICAgICAgICBlbGlmIHRpbWVvdXQgPCAwOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIndGltZW91dCcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuX3FzaXplKCkgPT0gc2VsZi5tYXhzaXplOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLl9xc2l6ZSgpID49IHNlbGYubWF4c2l6ZToKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGVuZHRpbWUgLSBfdGltZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZW1haW5pbmcgPD0gMC4wOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEZ1bGwKZGlmZiAtLWdpdCBhL0xpYi9xdW9wcmkucHkgYi9MaWIvcXVvcHJpLnB5CmluZGV4IDZiM2QxM2UuLjNkMGYwYWMgMTAwNzU1Ci0tLSBhL0xpYi9xdW9wcmkucHkKKysrIGIvTGliL3F1b3ByaS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIkNvbnZlcnNpb25zIHRvL2Zyb20gcXVvdGVkLXByaW50YWJsZSB0cmFuc3BvcnQgZW5jb2RpbmcgYXMgcGVyIFJGQyAxNTIxLiIiIgogCkBAIC00MSw3ICs0MSw3IEBACiAKIAogCi1kZWYgZW5jb2RlKGlucHV0LCBvdXRwdXQsIHF1b3RldGFicywgaGVhZGVyID0gMCk6CitkZWYgZW5jb2RlKGlucHV0LCBvdXRwdXQsIHF1b3RldGFicywgaGVhZGVyPUZhbHNlKToKICAgICAiIiJSZWFkICdpbnB1dCcsIGFwcGx5IHF1b3RlZC1wcmludGFibGUgZW5jb2RpbmcsIGFuZCB3cml0ZSB0byAnb3V0cHV0Jy4KIAogICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBmaWxlcyB3aXRoIHJlYWRsaW5lKCkgYW5kIHdyaXRlKCkgbWV0aG9kcy4KQEAgLTU0LDcgKzU0LDcgQEAKIAogICAgIGlmIGIyYV9xcCBpcyBub3QgTm9uZToKICAgICAgICAgZGF0YSA9IGlucHV0LnJlYWQoKQotICAgICAgICBvZGF0YSA9IGIyYV9xcChkYXRhLCBxdW90ZXRhYnMgPSBxdW90ZXRhYnMsIGhlYWRlciA9IGhlYWRlcikKKyAgICAgICAgb2RhdGEgPSBiMmFfcXAoZGF0YSwgcXVvdGV0YWJzPXF1b3RldGFicywgaGVhZGVyPWhlYWRlcikKICAgICAgICAgb3V0cHV0LndyaXRlKG9kYXRhKQogICAgICAgICByZXR1cm4KIApAQCAtMTA1LDkgKzEwNSw5IEBACiAgICAgaWYgcHJldmxpbmUgaXMgbm90IE5vbmU6CiAgICAgICAgIHdyaXRlKHByZXZsaW5lLCBsaW5lRW5kPXN0cmlwcGVkKQogCi1kZWYgZW5jb2Rlc3RyaW5nKHMsIHF1b3RldGFicyA9IDAsIGhlYWRlciA9IDApOgorZGVmIGVuY29kZXN0cmluZyhzLCBxdW90ZXRhYnM9RmFsc2UsIGhlYWRlcj1GYWxzZSk6CiAgICAgaWYgYjJhX3FwIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gYjJhX3FwKHMsIHF1b3RldGFicyA9IHF1b3RldGFicywgaGVhZGVyID0gaGVhZGVyKQorICAgICAgICByZXR1cm4gYjJhX3FwKHMsIHF1b3RldGFicz1xdW90ZXRhYnMsIGhlYWRlcj1oZWFkZXIpCiAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogICAgIGluZnAgPSBCeXRlc0lPKHMpCiAgICAgb3V0ZnAgPSBCeXRlc0lPKCkKQEAgLTExNiwxNCArMTE2LDE0IEBACiAKIAogCi1kZWYgZGVjb2RlKGlucHV0LCBvdXRwdXQsIGhlYWRlciA9IDApOgorZGVmIGRlY29kZShpbnB1dCwgb3V0cHV0LCBoZWFkZXI9RmFsc2UpOgogICAgICIiIlJlYWQgJ2lucHV0JywgYXBwbHkgcXVvdGVkLXByaW50YWJsZSBkZWNvZGluZywgYW5kIHdyaXRlIHRvICdvdXRwdXQnLgogICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBmaWxlcyB3aXRoIHJlYWRsaW5lKCkgYW5kIHdyaXRlKCkgbWV0aG9kcy4KICAgICBJZiAnaGVhZGVyJyBpcyB0cnVlLCBkZWNvZGUgdW5kZXJzY29yZSBhcyBzcGFjZSAocGVyIFJGQyAxNTIyKS4iIiIKIAogICAgIGlmIGEyYl9xcCBpcyBub3QgTm9uZToKICAgICAgICAgZGF0YSA9IGlucHV0LnJlYWQoKQotICAgICAgICBvZGF0YSA9IGEyYl9xcChkYXRhLCBoZWFkZXIgPSBoZWFkZXIpCisgICAgICAgIG9kYXRhID0gYTJiX3FwKGRhdGEsIGhlYWRlcj1oZWFkZXIpCiAgICAgICAgIG91dHB1dC53cml0ZShvZGF0YSkKICAgICAgICAgcmV0dXJuCiAKQEAgLTE1OSwxMyArMTU5LDEzIEBACiAgICAgaWYgbmV3OgogICAgICAgICBvdXRwdXQud3JpdGUobmV3KQogCi1kZWYgZGVjb2Rlc3RyaW5nKHMsIGhlYWRlciA9IDApOgorZGVmIGRlY29kZXN0cmluZyhzLCBoZWFkZXI9RmFsc2UpOgogICAgIGlmIGEyYl9xcCBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIGEyYl9xcChzLCBoZWFkZXIgPSBoZWFkZXIpCisgICAgICAgIHJldHVybiBhMmJfcXAocywgaGVhZGVyPWhlYWRlcikKICAgICBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiAgICAgaW5mcCA9IEJ5dGVzSU8ocykKICAgICBvdXRmcCA9IEJ5dGVzSU8oKQotICAgIGRlY29kZShpbmZwLCBvdXRmcCwgaGVhZGVyID0gaGVhZGVyKQorICAgIGRlY29kZShpbmZwLCBvdXRmcCwgaGVhZGVyPWhlYWRlcikKICAgICByZXR1cm4gb3V0ZnAuZ2V0dmFsdWUoKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9yYW5kb20ucHkgYi9MaWIvcmFuZG9tLnB5CmluZGV4IDkwNGU3YzYuLjZiZGQ0MzkgMTAwNjQ0Ci0tLSBhL0xpYi9yYW5kb20ucHkKKysrIGIvTGliL3JhbmRvbS5weQpAQCAtNDIsOCArNDIsOCBAQAogZnJvbSBtYXRoIGltcG9ydCBsb2cgYXMgX2xvZywgZXhwIGFzIF9leHAsIHBpIGFzIF9waSwgZSBhcyBfZSwgY2VpbCBhcyBfY2VpbAogZnJvbSBtYXRoIGltcG9ydCBzcXJ0IGFzIF9zcXJ0LCBhY29zIGFzIF9hY29zLCBjb3MgYXMgX2Nvcywgc2luIGFzIF9zaW4KIGZyb20gb3MgaW1wb3J0IHVyYW5kb20gYXMgX3VyYW5kb20KLWZyb20gYmluYXNjaWkgaW1wb3J0IGhleGxpZnkgYXMgX2hleGxpZnkKIGltcG9ydCBjb2xsZWN0aW9ucyBhcyBfY29sbGVjdGlvbnMKK2Zyb20gaGFzaGxpYiBpbXBvcnQgc2hhNTEyIGFzIF9zaGE1MTIKIAogX19hbGxfXyA9IFsiUmFuZG9tIiwic2VlZCIsInJhbmRvbSIsInVuaWZvcm0iLCJyYW5kaW50IiwiY2hvaWNlIiwic2FtcGxlIiwKICAgICAgICAgICAgInJhbmRyYW5nZSIsInNodWZmbGUiLCJub3JtYWx2YXJpYXRlIiwibG9nbm9ybXZhcmlhdGUiLApAQCAtOTEsMjIgKzkxLDMzIEBACiAgICAgICAgIHNlbGYuc2VlZCh4KQogICAgICAgICBzZWxmLmdhdXNzX25leHQgPSBOb25lCiAKLSAgICBkZWYgc2VlZChzZWxmLCBhPU5vbmUpOgorICAgIGRlZiBzZWVkKHNlbGYsIGE9Tm9uZSwgdmVyc2lvbj0yKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBpbnRlcm5hbCBzdGF0ZSBmcm9tIGhhc2hhYmxlIG9iamVjdC4KIAogICAgICAgICBOb25lIG9yIG5vIGFyZ3VtZW50IHNlZWRzIGZyb20gY3VycmVudCB0aW1lIG9yIGZyb20gYW4gb3BlcmF0aW5nCiAgICAgICAgIHN5c3RlbSBzcGVjaWZpYyByYW5kb21uZXNzIHNvdXJjZSBpZiBhdmFpbGFibGUuCiAKLSAgICAgICAgSWYgYSBpcyBub3QgTm9uZSBvciBhbiBpbnQsIGhhc2goYSkgaXMgdXNlZCBpbnN0ZWFkLgorICAgICAgICBGb3IgdmVyc2lvbiAyICh0aGUgZGVmYXVsdCksIGFsbCBvZiB0aGUgYml0cyBhcmUgdXNlZCBpZiAqYSAqaXMgYSBzdHIsCisgICAgICAgIGJ5dGVzLCBvciBieXRlYXJyYXkuICBGb3IgdmVyc2lvbiAxLCB0aGUgaGFzaCgpIG9mICphKiBpcyB1c2VkIGluc3RlYWQuCisKKyAgICAgICAgSWYgKmEqIGlzIGFuIGludCwgYWxsIGJpdHMgYXJlIHVzZWQuCisKICAgICAgICAgIiIiCiAKICAgICAgICAgaWYgYSBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGEgPSBpbnQoX2hleGxpZnkoX3VyYW5kb20oMTYpKSwgMTYpCisgICAgICAgICAgICAgICAgYSA9IGludC5mcm9tX2J5dGVzKF91cmFuZG9tKDMyKSwgJ2JpZycpCiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKICAgICAgICAgICAgICAgICBpbXBvcnQgdGltZQogICAgICAgICAgICAgICAgIGEgPSBpbnQodGltZS50aW1lKCkgKiAyNTYpICMgdXNlIGZyYWN0aW9uYWwgc2Vjb25kcwogCisgICAgICAgIGlmIHZlcnNpb24gPT0gMjoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYSwgKHN0ciwgYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgYSA9IGEuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgICAgICAgICBhICs9IF9zaGE1MTIoYSkuZGlnZXN0KCkKKyAgICAgICAgICAgICAgICBhID0gaW50LmZyb21fYnl0ZXMoYSwgJ2JpZycpCisKICAgICAgICAgc3VwZXIoKS5zZWVkKGEpCiAgICAgICAgIHNlbGYuZ2F1c3NfbmV4dCA9IE5vbmUKIApAQCAtMTI3LDEwICsxMzgsMTAgQEAKICAgICAgICAgICAgICMgICByZWFsbHkgdW5zaWduZWQgMzItYml0IGludHMsIHNvIHdlIGNvbnZlcnQgbmVnYXRpdmUgaW50cyBmcm9tCiAgICAgICAgICAgICAjICAgdmVyc2lvbiAyIHRvIHBvc2l0aXZlIGxvbmdzIGZvciB2ZXJzaW9uIDMuCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW50ZXJuYWxzdGF0ZSA9IHR1cGxlKCB4ICUgKDIqKjMyKSBmb3IgeCBpbiBpbnRlcm5hbHN0YXRlICkKKyAgICAgICAgICAgICAgICBpbnRlcm5hbHN0YXRlID0gdHVwbGUoeCAlICgyKiozMikgZm9yIHggaW4gaW50ZXJuYWxzdGF0ZSkKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yIGZyb20gZQotICAgICAgICAgICAgc3VwZXIoUmFuZG9tLCBzZWxmKS5zZXRzdGF0ZShpbnRlcm5hbHN0YXRlKQorICAgICAgICAgICAgc3VwZXIoKS5zZXRzdGF0ZShpbnRlcm5hbHN0YXRlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RhdGUgd2l0aCB2ZXJzaW9uICVzIHBhc3NlZCB0byAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSYW5kb20uc2V0c3RhdGUoKSBvZiB2ZXJzaW9uICVzIiAlCkBAIC0xNTIsMTMgKzE2MywxMyBAQAogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlZ2VyIG1ldGhvZHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIGRlZiByYW5kcmFuZ2Uoc2VsZiwgc3RhcnQsIHN0b3A9Tm9uZSwgc3RlcD0xLCBpbnQ9aW50LCBkZWZhdWx0PU5vbmUsCi0gICAgICAgICAgICAgICAgICBtYXh3aWR0aD0xPDxCUEYpOgorICAgIGRlZiByYW5kcmFuZ2Uoc2VsZiwgc3RhcnQsIHN0b3A9Tm9uZSwgc3RlcD0xLCBpbnQ9aW50KToKICAgICAgICAgIiIiQ2hvb3NlIGEgcmFuZG9tIGl0ZW0gZnJvbSByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKS4KIAogICAgICAgICBUaGlzIGZpeGVzIHRoZSBwcm9ibGVtIHdpdGggcmFuZGludCgpIHdoaWNoIGluY2x1ZGVzIHRoZQogICAgICAgICBlbmRwb2ludDsgaW4gUHl0aG9uIHRoaXMgaXMgdXN1YWxseSBub3Qgd2hhdCB5b3Ugd2FudC4KLSAgICAgICAgRG8gbm90IHN1cHBseSB0aGUgJ2ludCcsICdkZWZhdWx0JywgYW5kICdtYXh3aWR0aCcgYXJndW1lbnRzLgorCisgICAgICAgIERvIG5vdCBzdXBwbHkgdGhlICdpbnQnIGFyZ3VtZW50LgogICAgICAgICAiIiIKIAogICAgICAgICAjIFRoaXMgY29kZSBpcyBhIGJpdCBtZXNzeSB0byBtYWtlIGl0IGZhc3QgZm9yIHRoZQpAQCAtMTY2LDExICsxNzcsOSBAQAogICAgICAgICBpc3RhcnQgPSBpbnQoc3RhcnQpCiAgICAgICAgIGlmIGlzdGFydCAhPSBzdGFydDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vbi1pbnRlZ2VyIGFyZyAxIGZvciByYW5kcmFuZ2UoKSIpCi0gICAgICAgIGlmIHN0b3AgaXMgZGVmYXVsdDoKKyAgICAgICAgaWYgc3RvcCBpcyBOb25lOgogICAgICAgICAgICAgaWYgaXN0YXJ0ID4gMDoKLSAgICAgICAgICAgICAgICBpZiBpc3RhcnQgPj0gbWF4d2lkdGg6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yYW5kYmVsb3coaXN0YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZi5yYW5kb20oKSAqIGlzdGFydCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmFuZGJlbG93KGlzdGFydCkKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IHJhbmdlIGZvciByYW5kcmFuZ2UoKSIpCiAKICAgICAgICAgIyBzdG9wIGFyZ3VtZW50IHN1cHBsaWVkLgpAQCAtMTc5LDIyICsxODgsNyBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm9uLWludGVnZXIgc3RvcCBmb3IgcmFuZHJhbmdlKCkiKQogICAgICAgICB3aWR0aCA9IGlzdG9wIC0gaXN0YXJ0CiAgICAgICAgIGlmIHN0ZXAgPT0gMSBhbmQgd2lkdGggPiAwOgotICAgICAgICAgICAgIyBOb3RlIHRoYXQKLSAgICAgICAgICAgICMgICAgIGludChpc3RhcnQgKyBzZWxmLnJhbmRvbSgpKndpZHRoKQotICAgICAgICAgICAgIyBpbnN0ZWFkIHdvdWxkIGJlIGluY29ycmVjdC4gIEZvciBleGFtcGxlLCBjb25zaWRlciBpc3RhcnQKLSAgICAgICAgICAgICMgPSAtMiBhbmQgaXN0b3AgPSAwLiAgVGhlbiB0aGUgZ3V0cyB3b3VsZCBiZSBpbgotICAgICAgICAgICAgIyAtMi4wIHRvIDAuMCBleGNsdXNpdmUgb24gYm90aCBlbmRzIChpZ25vcmluZyB0aGF0IHJhbmRvbSgpCi0gICAgICAgICAgICAjIG1pZ2h0IHJldHVybiAwLjApLCBhbmQgYmVjYXVzZSBpbnQoKSB0cnVuY2F0ZXMgdG93YXJkIDAsIHRoZQotICAgICAgICAgICAgIyBmaW5hbCByZXN1bHQgd291bGQgYmUgLTEgb3IgMCAoaW5zdGVhZCBvZiAtMiBvciAtMSkuCi0gICAgICAgICAgICAjICAgICBpc3RhcnQgKyBpbnQoc2VsZi5yYW5kb20oKSp3aWR0aCkKLSAgICAgICAgICAgICMgd291bGQgYWxzbyBiZSBpbmNvcnJlY3QsIGZvciBhIHN1YnRsZXIgcmVhc29uOiAgdGhlIFJIUwotICAgICAgICAgICAgIyBjYW4gcmV0dXJuIGEgbG9uZywgYW5kIHRoZW4gcmFuZHJhbmdlKCkgd291bGQgYWxzbyByZXR1cm4KLSAgICAgICAgICAgICMgYSBsb25nLCBidXQgd2UncmUgc3VwcG9zZWQgdG8gcmV0dXJuIGFuIGludCAoZm9yIGJhY2t3YXJkCi0gICAgICAgICAgICAjIGNvbXBhdGliaWxpdHkpLgotCi0gICAgICAgICAgICBpZiB3aWR0aCA+PSBtYXh3aWR0aDoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50KGlzdGFydCArIHNlbGYuX3JhbmRiZWxvdyh3aWR0aCkpCi0gICAgICAgICAgICByZXR1cm4gaW50KGlzdGFydCArIGludChzZWxmLnJhbmRvbSgpKndpZHRoKSkKKyAgICAgICAgICAgIHJldHVybiBpc3RhcnQgKyBzZWxmLl9yYW5kYmVsb3cod2lkdGgpCiAgICAgICAgIGlmIHN0ZXAgPT0gMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IHJhbmdlIGZvciByYW5kcmFuZ2UoKSAoJWQsJWQsICVkKSIgJSAoaXN0YXJ0LCBpc3RvcCwgd2lkdGgpKQogCkBAIC0yMTIsOSArMjA2LDcgQEAKICAgICAgICAgaWYgbiA8PSAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgcmFuZ2UgZm9yIHJhbmRyYW5nZSgpIikKIAotICAgICAgICBpZiBuID49IG1heHdpZHRoOgotICAgICAgICAgICAgcmV0dXJuIGlzdGFydCArIGlzdGVwKnNlbGYuX3JhbmRiZWxvdyhuKQotICAgICAgICByZXR1cm4gaXN0YXJ0ICsgaXN0ZXAqaW50KHNlbGYucmFuZG9tKCkgKiBuKQorICAgICAgICByZXR1cm4gaXN0YXJ0ICsgaXN0ZXAqc2VsZi5fcmFuZGJlbG93KG4pCiAKICAgICBkZWYgcmFuZGludChzZWxmLCBhLCBiKToKICAgICAgICAgIiIiUmV0dXJuIHJhbmRvbSBpbnRlZ2VyIGluIHJhbmdlIFthLCBiXSwgaW5jbHVkaW5nIGJvdGggZW5kIHBvaW50cy4KQEAgLTIyMiwzOCArMjE0LDQzIEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYucmFuZHJhbmdlKGEsIGIrMSkKIAotICAgIGRlZiBfcmFuZGJlbG93KHNlbGYsIG4sIF9sb2c9X2xvZywgaW50PWludCwgX21heHdpZHRoPTE8PEJQRiwKLSAgICAgICAgICAgICAgICAgICBfTWV0aG9kPV9NZXRob2RUeXBlLCBfQnVpbHRpbk1ldGhvZD1fQnVpbHRpbk1ldGhvZFR5cGUpOgotICAgICAgICAiIiJSZXR1cm4gYSByYW5kb20gaW50IGluIHRoZSByYW5nZSBbMCxuKQorICAgIGRlZiBfcmFuZGJlbG93KHNlbGYsIG4sIGludD1pbnQsIG1heHNpemU9MTw8QlBGLCB0eXBlPXR5cGUsCisgICAgICAgICAgICAgICAgICAgTWV0aG9kPV9NZXRob2RUeXBlLCBCdWlsdGluTWV0aG9kPV9CdWlsdGluTWV0aG9kVHlwZSk6CisgICAgICAgICJSZXR1cm4gYSByYW5kb20gaW50IGluIHRoZSByYW5nZSBbMCxuKS4gIFJhaXNlcyBWYWx1ZUVycm9yIGlmIG49PTAuIgogCi0gICAgICAgIEhhbmRsZXMgdGhlIGNhc2Ugd2hlcmUgbiBoYXMgbW9yZSBiaXRzIHRoYW4gcmV0dXJuZWQKLSAgICAgICAgYnkgYSBzaW5nbGUgY2FsbCB0byB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IuCi0gICAgICAgICIiIgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGdldHJhbmRiaXRzID0gc2VsZi5nZXRyYW5kYml0cwotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIE9ubHkgY2FsbCBzZWxmLmdldHJhbmRiaXRzIGlmIHRoZSBvcmlnaW5hbCByYW5kb20oKSBidWlsdGluIG1ldGhvZAotICAgICAgICAgICAgIyBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiBvciBpZiBhIG5ldyBnZXRyYW5kYml0cygpIHdhcyBzdXBwbGllZC4KLSAgICAgICAgICAgICMgVGhpcyBhc3N1cmVzIHRoYXQgdGhlIHR3byBtZXRob2RzIGNvcnJlc3BvbmQuCi0gICAgICAgICAgICBpZiB0eXBlKHNlbGYucmFuZG9tKSBpcyBfQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBfTWV0aG9kOgotICAgICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobi0xLCAyLjApKSAgICMgMioqayA+IG4tMSA+IDIqKihrLTIpCisgICAgICAgIGdldHJhbmRiaXRzID0gc2VsZi5nZXRyYW5kYml0cworICAgICAgICAjIE9ubHkgY2FsbCBzZWxmLmdldHJhbmRiaXRzIGlmIHRoZSBvcmlnaW5hbCByYW5kb20oKSBidWlsdGluIG1ldGhvZAorICAgICAgICAjIGhhcyBub3QgYmVlbiBvdmVycmlkZGVuIG9yIGlmIGEgbmV3IGdldHJhbmRiaXRzKCkgd2FzIHN1cHBsaWVkLgorICAgICAgICBpZiB0eXBlKHNlbGYucmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKKyAgICAgICAgICAgIGsgPSBuLmJpdF9sZW5ndGgoKSAgIyBkb24ndCB1c2UgKG4tMSkgaGVyZSBiZWNhdXNlIG4gY2FuIGJlIDEKKyAgICAgICAgICAgIHIgPSBnZXRyYW5kYml0cyhrKSAgICAgICAgICAjIDAgPD0gciA8IDIqKmsKKyAgICAgICAgICAgIHdoaWxlIHIgPj0gbjoKICAgICAgICAgICAgICAgICByID0gZ2V0cmFuZGJpdHMoaykKLSAgICAgICAgICAgICAgICB3aGlsZSByID49IG46Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBnZXRyYW5kYml0cyhrKQotICAgICAgICAgICAgICAgIHJldHVybiByCi0gICAgICAgIGlmIG4gPj0gX21heHdpZHRoOgorICAgICAgICAgICAgcmV0dXJuIHIKKyAgICAgICAgIyBUaGVyZSdzIGFuIG92ZXJyaWRlbiByYW5kb20oKSBtZXRob2QgYnV0IG5vIG5ldyBnZXRyYW5kYml0cygpIG1ldGhvZCwKKyAgICAgICAgIyBzbyB3ZSBjYW4gb25seSB1c2UgcmFuZG9tKCkgZnJvbSBoZXJlLgorICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQorICAgICAgICBpZiBuID49IG1heHNpemU6CiAgICAgICAgICAgICBfd2FybigiVW5kZXJseWluZyByYW5kb20oKSBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcGx5IFxuIgotICAgICAgICAgICAgICAgICJlbm91Z2ggYml0cyB0byBjaG9vc2UgZnJvbSBhIHBvcHVsYXRpb24gcmFuZ2UgdGhpcyBsYXJnZSIpCi0gICAgICAgIHJldHVybiBpbnQoc2VsZi5yYW5kb20oKSAqIG4pCisgICAgICAgICAgICAgICAgImVub3VnaCBiaXRzIHRvIGNob29zZSBmcm9tIGEgcG9wdWxhdGlvbiByYW5nZSB0aGlzIGxhcmdlLlxuIgorICAgICAgICAgICAgICAgICJUbyByZW1vdmUgdGhlIHJhbmdlIGxpbWl0YXRpb24sIGFkZCBhIGdldHJhbmRiaXRzKCkgbWV0aG9kLiIpCisgICAgICAgICAgICByZXR1cm4gaW50KHJhbmRvbSgpICogbikKKyAgICAgICAgcmVtID0gbWF4c2l6ZSAlIG4KKyAgICAgICAgbGltaXQgPSAobWF4c2l6ZSAtIHJlbSkgLyBtYXhzaXplICAgIyBpbnQobGltaXQgKiBtYXhzaXplKSAlIG4gPT0gMAorICAgICAgICByID0gcmFuZG9tKCkKKyAgICAgICAgd2hpbGUgciA+PSBsaW1pdDoKKyAgICAgICAgICAgIHIgPSByYW5kb20oKQorICAgICAgICByZXR1cm4gaW50KHIqbWF4c2l6ZSkgJSBuCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHNlcXVlbmNlIG1ldGhvZHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIGRlZiBjaG9pY2Uoc2VsZiwgc2VxKToKICAgICAgICAgIiIiQ2hvb3NlIGEgcmFuZG9tIGVsZW1lbnQgZnJvbSBhIG5vbi1lbXB0eSBzZXF1ZW5jZS4iIiIKLSAgICAgICAgcmV0dXJuIHNlcVtpbnQoc2VsZi5yYW5kb20oKSAqIGxlbihzZXEpKV0gICMgcmFpc2VzIEluZGV4RXJyb3IgaWYgc2VxIGlzIGVtcHR5CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGkgPSBzZWxmLl9yYW5kYmVsb3cobGVuKHNlcSkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcignQ2Fubm90IGNob29zZSBmcm9tIGFuIGVtcHR5IHNlcXVlbmNlJykKKyAgICAgICAgcmV0dXJuIHNlcVtpXQogCiAgICAgZGVmIHNodWZmbGUoc2VsZiwgeCwgcmFuZG9tPU5vbmUsIGludD1pbnQpOgogICAgICAgICAiIiJ4LCByYW5kb209cmFuZG9tLnJhbmRvbSAtPiBzaHVmZmxlIGxpc3QgeCBpbiBwbGFjZTsgcmV0dXJuIE5vbmUuCkBAIC0yNjIsMTEgKzI1OSwxMCBAQAogICAgICAgICBmbG9hdCBpbiBbMC4wLCAxLjApOyBieSBkZWZhdWx0LCB0aGUgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbS4KICAgICAgICAgIiIiCiAKLSAgICAgICAgaWYgcmFuZG9tIGlzIE5vbmU6Ci0gICAgICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQorICAgICAgICByYW5kYmVsb3cgPSBzZWxmLl9yYW5kYmVsb3cKICAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UoMSwgbGVuKHgpKSk6CiAgICAgICAgICAgICAjIHBpY2sgYW4gZWxlbWVudCBpbiB4WzppKzFdIHdpdGggd2hpY2ggdG8gZXhjaGFuZ2UgeFtpXQotICAgICAgICAgICAgaiA9IGludChyYW5kb20oKSAqIChpKzEpKQorICAgICAgICAgICAgaiA9IHJhbmRiZWxvdyhpKzEpIGlmIHJhbmRvbSBpcyBOb25lIGVsc2UgaW50KHJhbmRvbSgpICogKGkrMSkpCiAgICAgICAgICAgICB4W2ldLCB4W2pdID0geFtqXSwgeFtpXQogCiAgICAgZGVmIHNhbXBsZShzZWxmLCBwb3B1bGF0aW9uLCBrKToKQEAgLTMwMSwxMSArMjk3LDEwIEBACiAgICAgICAgICAgICBwb3B1bGF0aW9uID0gdHVwbGUocG9wdWxhdGlvbikKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocG9wdWxhdGlvbiwgX2NvbGxlY3Rpb25zLlNlcXVlbmNlKToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiUG9wdWxhdGlvbiBtdXN0IGJlIGEgc2VxdWVuY2Ugb3IgU2V0LiAgRm9yIGRpY3RzLCB1c2UgbGlzdChkKS4iKQotICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQorICAgICAgICByYW5kYmVsb3cgPSBzZWxmLl9yYW5kYmVsb3cKICAgICAgICAgbiA9IGxlbihwb3B1bGF0aW9uKQogICAgICAgICBpZiBub3QgMCA8PSBrIDw9IG46CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTYW1wbGUgbGFyZ2VyIHRoYW4gcG9wdWxhdGlvbiIpCi0gICAgICAgIF9pbnQgPSBpbnQKICAgICAgICAgcmVzdWx0ID0gW05vbmVdICogawogICAgICAgICBzZXRzaXplID0gMjEgICAgICAgICMgc2l6ZSBvZiBhIHNtYWxsIHNldCBtaW51cyBzaXplIG9mIGFuIGVtcHR5IGxpc3QKICAgICAgICAgaWYgayA+IDU6CkBAIC0zMTQsMTYgKzMwOSwxNiBAQAogICAgICAgICAgICAgIyBBbiBuLWxlbmd0aCBsaXN0IGlzIHNtYWxsZXIgdGhhbiBhIGstbGVuZ3RoIHNldAogICAgICAgICAgICAgcG9vbCA9IGxpc3QocG9wdWxhdGlvbikKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGspOiAgICAgICAgICMgaW52YXJpYW50OiAgbm9uLXNlbGVjdGVkIGF0IFswLG4taSkKLSAgICAgICAgICAgICAgICBqID0gX2ludChyYW5kb20oKSAqIChuLWkpKQorICAgICAgICAgICAgICAgIGogPSByYW5kYmVsb3cobi1pKQogICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IHBvb2xbal0KICAgICAgICAgICAgICAgICBwb29sW2pdID0gcG9vbFtuLWktMV0gICAjIG1vdmUgbm9uLXNlbGVjdGVkIGl0ZW0gaW50byB2YWNhbmN5CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxlY3RlZCA9IHNldCgpCiAgICAgICAgICAgICBzZWxlY3RlZF9hZGQgPSBzZWxlY3RlZC5hZGQKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGspOgotICAgICAgICAgICAgICAgIGogPSBfaW50KHJhbmRvbSgpICogbikKKyAgICAgICAgICAgICAgICBqID0gcmFuZGJlbG93KG4pCiAgICAgICAgICAgICAgICAgd2hpbGUgaiBpbiBzZWxlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgaiA9IF9pbnQocmFuZG9tKCkgKiBuKQorICAgICAgICAgICAgICAgICAgICBqID0gcmFuZGJlbG93KG4pCiAgICAgICAgICAgICAgICAgc2VsZWN0ZWRfYWRkKGopCiAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gcG9wdWxhdGlvbltqXQogICAgICAgICByZXR1cm4gcmVzdWx0CkBAIC02MTMsNyArNjA4LDcgQEAKICAgICAgICAgIyBKYWluLCBwZy4gNDk1CiAKICAgICAgICAgdSA9IDEuMCAtIHNlbGYucmFuZG9tKCkKLSAgICAgICAgcmV0dXJuIDEuMCAvIHBvdyh1LCAxLjAvYWxwaGEpCisgICAgICAgIHJldHVybiAxLjAgLyB1ICoqICgxLjAvYWxwaGEpCiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tIFdlaWJ1bGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNjI2LDcgKzYyMSw3IEBACiAgICAgICAgICMgSmFpbiwgcGcuIDQ5OTsgYnVnIGZpeCBjb3VydGVzeSBCaWxsIEFybXMKIAogICAgICAgICB1ID0gMS4wIC0gc2VsZi5yYW5kb20oKQotICAgICAgICByZXR1cm4gYWxwaGEgKiBwb3coLV9sb2codSksIDEuMC9iZXRhKQorICAgICAgICByZXR1cm4gYWxwaGEgKiAoLV9sb2codSkpICoqICgxLjAvYmV0YSkKIAogIyMgLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGluZyBTeXN0ZW0gUmFuZG9tIFNvdXJjZSAgLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTY0MCw3ICs2MzUsNyBAQAogCiAgICAgZGVmIHJhbmRvbShzZWxmKToKICAgICAgICAgIiIiR2V0IHRoZSBuZXh0IHJhbmRvbSBudW1iZXIgaW4gdGhlIHJhbmdlIFswLjAsIDEuMCkuIiIiCi0gICAgICAgIHJldHVybiAoaW50KF9oZXhsaWZ5KF91cmFuZG9tKDcpKSwgMTYpID4+IDMpICogUkVDSVBfQlBGCisgICAgICAgIHJldHVybiAoaW50LmZyb21fYnl0ZXMoX3VyYW5kb20oNyksICdiaWcnKSA+PiAzKSAqIFJFQ0lQX0JQRgogCiAgICAgZGVmIGdldHJhbmRiaXRzKHNlbGYsIGspOgogICAgICAgICAiIiJnZXRyYW5kYml0cyhrKSAtPiB4LiAgR2VuZXJhdGVzIGEgbG9uZyBpbnQgd2l0aCBrIHJhbmRvbSBiaXRzLiIiIgpAQCAtNjQ4LDkgKzY0Myw5IEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdudW1iZXIgb2YgYml0cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvJykKICAgICAgICAgaWYgayAhPSBpbnQoayk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ251bWJlciBvZiBiaXRzIHNob3VsZCBiZSBhbiBpbnRlZ2VyJykKLSAgICAgICAgYnl0ZXMgPSAoayArIDcpIC8vIDggICAgICAgICAgICAgICAgICAgICMgYml0cyAvIDggYW5kIHJvdW5kZWQgdXAKLSAgICAgICAgeCA9IGludChfaGV4bGlmeShfdXJhbmRvbShieXRlcykpLCAxNikKLSAgICAgICAgcmV0dXJuIHggPj4gKGJ5dGVzICogOCAtIGspICAgICAgICAgICAgICMgdHJpbSBleGNlc3MgYml0cworICAgICAgICBudW1ieXRlcyA9IChrICsgNykgLy8gOCAgICAgICAgICAgICAgICAgICAgICAgIyBiaXRzIC8gOCBhbmQgcm91bmRlZCB1cAorICAgICAgICB4ID0gaW50LmZyb21fYnl0ZXMoX3VyYW5kb20obnVtYnl0ZXMpLCAnYmlnJykKKyAgICAgICAgcmV0dXJuIHggPj4gKG51bWJ5dGVzICogOCAtIGspICAgICAgICAgICAgICAgICMgdHJpbSBleGNlc3MgYml0cwogCiAgICAgZGVmIHNlZWQoc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICJTdHViIG1ldGhvZC4gIE5vdCB1c2VkIGZvciBhIHN5c3RlbSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4iCmRpZmYgLS1naXQgYS9MaWIvcmUucHkgYi9MaWIvcmUucHkKaW5kZXggMzA5YWZlZi4uYWJkN2VhMiAxMDA2NDQKLS0tIGEvTGliL3JlLnB5CisrKyBiL0xpYi9yZS5weQpAQCAtMTE4LDYgKzExOCw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgc3JlX2NvbXBpbGUKIGltcG9ydCBzcmVfcGFyc2UKK2ltcG9ydCBmdW5jdG9vbHMKIAogIyBwdWJsaWMgc3ltYm9scwogX19hbGxfXyA9IFsgIm1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKQEAgLTIwNSw5ICsyMDYsOSBAQAogICAgIHJldHVybiBfY29tcGlsZShwYXR0ZXJuLCBmbGFncykKIAogZGVmIHB1cmdlKCk6Ci0gICAgIkNsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGUiCi0gICAgX2NhY2hlLmNsZWFyKCkKLSAgICBfY2FjaGVfcmVwbC5jbGVhcigpCisgICAgIkNsZWFyIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gY2FjaGVzIgorICAgIF9jb21waWxlX3R5cGVkLmNhY2hlX2NsZWFyKCkKKyAgICBfY29tcGlsZV9yZXBsLmNhY2hlX2NsZWFyKCkKIAogZGVmIHRlbXBsYXRlKHBhdHRlcm4sIGZsYWdzPTApOgogICAgICJDb21waWxlIGEgdGVtcGxhdGUgcGF0dGVybiwgcmV0dXJuaW5nIGEgcGF0dGVybiBvYmplY3QiCkBAIC0yNDgsMjAgKzI0OSwxNCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbnRlcm5hbHMKIAotX2NhY2hlID0ge30KLV9jYWNoZV9yZXBsID0ge30KLQogX3BhdHRlcm5fdHlwZSA9IHR5cGUoc3JlX2NvbXBpbGUuY29tcGlsZSgiIiwgMCkpCiAKLV9NQVhDQUNIRSA9IDEwMAorZGVmIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKToKKyAgICByZXR1cm4gX2NvbXBpbGVfdHlwZWQodHlwZShwYXR0ZXJuKSwgcGF0dGVybiwgZmxhZ3MpCiAKLWRlZiBfY29tcGlsZSgqa2V5KToKK0BmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9NTAwKQorZGVmIF9jb21waWxlX3R5cGVkKHRleHRfYnl0ZXNfdHlwZSwgcGF0dGVybiwgZmxhZ3MpOgogICAgICMgaW50ZXJuYWw6IGNvbXBpbGUgcGF0dGVybgotICAgIGNhY2hla2V5ID0gKHR5cGUoa2V5WzBdKSwpICsga2V5Ci0gICAgcCA9IF9jYWNoZS5nZXQoY2FjaGVrZXkpCi0gICAgaWYgcCBpcyBub3QgTm9uZToKLSAgICAgICAgcmV0dXJuIHAKLSAgICBwYXR0ZXJuLCBmbGFncyA9IGtleQogICAgIGlmIGlzaW5zdGFuY2UocGF0dGVybiwgX3BhdHRlcm5fdHlwZSk6CiAgICAgICAgIGlmIGZsYWdzOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKQEAgLTI2OSwyMyArMjY0LDEyIEBACiAgICAgICAgIHJldHVybiBwYXR0ZXJuCiAgICAgaWYgbm90IHNyZV9jb21waWxlLmlzc3RyaW5nKHBhdHRlcm4pOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgc3RyaW5nIG9yIGNvbXBpbGVkIHBhdHRlcm4iKQotICAgIHAgPSBzcmVfY29tcGlsZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQotICAgIGlmIGxlbihfY2FjaGUpID49IF9NQVhDQUNIRToKLSAgICAgICAgX2NhY2hlLmNsZWFyKCkKLSAgICBfY2FjaGVbY2FjaGVrZXldID0gcAotICAgIHJldHVybiBwCisgICAgcmV0dXJuIHNyZV9jb21waWxlLmNvbXBpbGUocGF0dGVybiwgZmxhZ3MpCiAKLWRlZiBfY29tcGlsZV9yZXBsKCprZXkpOgorQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT01MDApCitkZWYgX2NvbXBpbGVfcmVwbChyZXBsLCBwYXR0ZXJuKToKICAgICAjIGludGVybmFsOiBjb21waWxlIHJlcGxhY2VtZW50IHBhdHRlcm4KLSAgICBwID0gX2NhY2hlX3JlcGwuZ2V0KGtleSkKLSAgICBpZiBwIGlzIG5vdCBOb25lOgotICAgICAgICByZXR1cm4gcAotICAgIHJlcGwsIHBhdHRlcm4gPSBrZXkKLSAgICBwID0gc3JlX3BhcnNlLnBhcnNlX3RlbXBsYXRlKHJlcGwsIHBhdHRlcm4pCi0gICAgaWYgbGVuKF9jYWNoZV9yZXBsKSA+PSBfTUFYQ0FDSEU6Ci0gICAgICAgIF9jYWNoZV9yZXBsLmNsZWFyKCkKLSAgICBfY2FjaGVfcmVwbFtrZXldID0gcAotICAgIHJldHVybiBwCisgICAgcmV0dXJuIHNyZV9wYXJzZS5wYXJzZV90ZW1wbGF0ZShyZXBsLCBwYXR0ZXJuKQogCiBkZWYgX2V4cGFuZChwYXR0ZXJuLCBtYXRjaCwgdGVtcGxhdGUpOgogICAgICMgaW50ZXJuYWw6IG1hdGNoLmV4cGFuZCBpbXBsZW1lbnRhdGlvbiBob29rCmRpZmYgLS1naXQgYS9MaWIvcmVwcmxpYi5weSBiL0xpYi9yZXBybGliLnB5CmluZGV4IDk4OTNjNzEuLmY4MDMzNjAgMTAwNjQ0Ci0tLSBhL0xpYi9yZXBybGliLnB5CisrKyBiL0xpYi9yZXBybGliLnB5CkBAIC0xLDkgKzEsMzkgQEAKICIiIlJlZG8gdGhlIGJ1aWx0aW4gcmVwcigpIChyZXByZXNlbnRhdGlvbikgYnV0IHdpdGggbGltaXRzIG9uIG1vc3Qgc2l6ZXMuIiIiCiAKLV9fYWxsX18gPSBbIlJlcHIiLCJyZXByIl0KK19fYWxsX18gPSBbIlJlcHIiLCAicmVwciIsICJyZWN1cnNpdmVfcmVwciJdCiAKIGltcG9ydCBidWlsdGlucwogZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZQordHJ5OgorICAgIGZyb20gX3RocmVhZCBpbXBvcnQgZ2V0X2lkZW50CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBfZHVtbXlfdGhyZWFkIGltcG9ydCBnZXRfaWRlbnQKKworZGVmIHJlY3Vyc2l2ZV9yZXByKGZpbGx2YWx1ZT0nLi4uJyk6CisgICAgJ0RlY29yYXRvciB0byBtYWtlIGEgcmVwciBmdW5jdGlvbiByZXR1cm4gZmlsbHZhbHVlIGZvciBhIHJlY3Vyc2l2ZSBjYWxsJworCisgICAgZGVmIGRlY29yYXRpbmdfZnVuY3Rpb24odXNlcl9mdW5jdGlvbik6CisgICAgICAgIHJlcHJfcnVubmluZyA9IHNldCgpCisKKyAgICAgICAgZGVmIHdyYXBwZXIoc2VsZik6CisgICAgICAgICAgICBrZXkgPSBpZChzZWxmKSwgZ2V0X2lkZW50KCkKKyAgICAgICAgICAgIGlmIGtleSBpbiByZXByX3J1bm5pbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGx2YWx1ZQorICAgICAgICAgICAgcmVwcl9ydW5uaW5nLmFkZChrZXkpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9mdW5jdGlvbihzZWxmKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICByZXByX3J1bm5pbmcuZGlzY2FyZChrZXkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgIyBDYW4ndCB1c2UgZnVuY3Rvb2xzLndyYXBzKCkgaGVyZSBiZWNhdXNlIG9mIGJvb3RzdHJhcCBpc3N1ZXMKKyAgICAgICAgd3JhcHBlci5fX21vZHVsZV9fID0gZ2V0YXR0cih1c2VyX2Z1bmN0aW9uLCAnX19tb2R1bGVfXycpCisgICAgICAgIHdyYXBwZXIuX19kb2NfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fZG9jX18nKQorICAgICAgICB3cmFwcGVyLl9fbmFtZV9fID0gZ2V0YXR0cih1c2VyX2Z1bmN0aW9uLCAnX19uYW1lX18nKQorICAgICAgICB3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXyA9IGdldGF0dHIodXNlcl9mdW5jdGlvbiwgJ19fYW5ub3RhdGlvbnNfXycsIHt9KQorICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgcmV0dXJuIGRlY29yYXRpbmdfZnVuY3Rpb24KIAogY2xhc3MgUmVwcjoKIApkaWZmIC0tZ2l0IGEvTGliL3J1bnB5LnB5IGIvTGliL3J1bnB5LnB5CmluZGV4IGUwYWFiZWIuLjQ3MzhkZjMgMTAwNjQ0Ci0tLSBhL0xpYi9ydW5weS5weQorKysgYi9MaWIvcnVucHkucHkKQEAgLTExLDI0ICsxMSw2MyBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wCitmcm9tIHBrZ3V0aWwgaW1wb3J0IHJlYWRfY29kZQogdHJ5OgogICAgIGZyb20gaW1wIGltcG9ydCBnZXRfbG9hZGVyCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSBwa2d1dGlsIGltcG9ydCBnZXRfbG9hZGVyCiAKIF9fYWxsX18gPSBbCi0gICAgInJ1bl9tb2R1bGUiLAorICAgICJydW5fbW9kdWxlIiwgInJ1bl9wYXRoIiwKIF0KIAorY2xhc3MgX1RlbXBNb2R1bGUob2JqZWN0KToKKyAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKKyAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYuX3NhdmVkX21vZHVsZSA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBtb2RfbmFtZSA9IHNlbGYubW9kX25hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlLmFwcGVuZChzeXMubW9kdWxlc1ttb2RfbmFtZV0pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3lzLm1vZHVsZXNbbW9kX25hbWVdID0gc2VsZi5tb2R1bGUKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIGlmIHNlbGYuX3NhdmVkX21vZHVsZToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubW9kX25hbWVdID0gc2VsZi5fc2F2ZWRfbW9kdWxlWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5tb2RfbmFtZV0KKyAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KKworY2xhc3MgX01vZGlmaWVkQXJndjAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5fc2F2ZWRfdmFsdWUgPSBzZWxmLl9zZW50aW5lbCA9IG9iamVjdCgpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zYXZlZF92YWx1ZSBpcyBub3Qgc2VsZi5fc2VudGluZWw6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkFscmVhZHkgcHJlc2VydmluZyBzYXZlZCB2YWx1ZSIpCisgICAgICAgIHNlbGYuX3NhdmVkX3ZhbHVlID0gc3lzLmFyZ3ZbMF0KKyAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLnZhbHVlCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLnZhbHVlID0gc2VsZi5fc2VudGluZWwKKyAgICAgICAgc3lzLmFyZ3ZbMF0gPSBzZWxmLl9zYXZlZF92YWx1ZQogCiBkZWYgX3J1bl9jb2RlKGNvZGUsIHJ1bl9nbG9iYWxzLCBpbml0X2dsb2JhbHM9Tm9uZSwKICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX2ZuYW1lPU5vbmUsCiAgICAgICAgICAgICAgIG1vZF9sb2FkZXI9Tm9uZSwgcGtnX25hbWU9Tm9uZSk6Ci0gICAgIiIiSGVscGVyIGZvciBfcnVuX21vZHVsZV9jb2RlIiIiCisgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5vbWluYXRlZCBuYW1lc3BhY2UiIiIKICAgICBpZiBpbml0X2dsb2JhbHMgaXMgbm90IE5vbmU6CiAgICAgICAgIHJ1bl9nbG9iYWxzLnVwZGF0ZShpbml0X2dsb2JhbHMpCiAgICAgcnVuX2dsb2JhbHMudXBkYXRlKF9fbmFtZV9fID0gbW9kX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlsZV9fID0gbW9kX2ZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBfX2NhY2hlZF9fID0gTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXyA9IG1vZF9sb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcGFja2FnZV9fID0gcGtnX25hbWUpCiAgICAgZXhlYyhjb2RlLCBydW5fZ2xvYmFscykKQEAgLTM3LDI3ICs3NiwxMSBAQAogZGVmIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9mbmFtZT1Ob25lLAogICAgICAgICAgICAgICAgICAgICBtb2RfbG9hZGVyPU5vbmUsIHBrZ19uYW1lPU5vbmUpOgotICAgICIiIkhlbHBlciBmb3IgcnVuX21vZHVsZSIiIgotICAgICMgU2V0IHVwIHRoZSB0b3AgbGV2ZWwgbmFtZXNwYWNlIGRpY3Rpb25hcnkKLSAgICB0ZW1wX21vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG1vZF9uYW1lKQotICAgIG1vZF9nbG9iYWxzID0gdGVtcF9tb2R1bGUuX19kaWN0X18KLSAgICAjIE1vZGlmeSBzeXMuYXJndlswXSBhbmQgc3lzLm1vZHVsZVttb2RfbmFtZV0KLSAgICBzYXZlZF9hcmd2MCA9IHN5cy5hcmd2WzBdCi0gICAgcmVzdG9yZV9tb2R1bGUgPSBtb2RfbmFtZSBpbiBzeXMubW9kdWxlcwotICAgIGlmIHJlc3RvcmVfbW9kdWxlOgotICAgICAgICBzYXZlZF9tb2R1bGUgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KLSAgICBzeXMuYXJndlswXSA9IG1vZF9mbmFtZQotICAgIHN5cy5tb2R1bGVzW21vZF9uYW1lXSA9IHRlbXBfbW9kdWxlCi0gICAgdHJ5OgorICAgICIiIkhlbHBlciB0byBydW4gY29kZSBpbiBuZXcgbmFtZXNwYWNlIHdpdGggc3lzIG1vZGlmaWVkIiIiCisgICAgd2l0aCBfVGVtcE1vZHVsZShtb2RfbmFtZSkgYXMgdGVtcF9tb2R1bGUsIF9Nb2RpZmllZEFyZ3YwKG1vZF9mbmFtZSk6CisgICAgICAgIG1vZF9nbG9iYWxzID0gdGVtcF9tb2R1bGUubW9kdWxlLl9fZGljdF9fCiAgICAgICAgIF9ydW5fY29kZShjb2RlLCBtb2RfZ2xvYmFscywgaW5pdF9nbG9iYWxzLAotICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX2ZuYW1lLAotICAgICAgICAgICAgICAgICAgICBtb2RfbG9hZGVyLCBwa2dfbmFtZSkKLSAgICBmaW5hbGx5OgotICAgICAgICBzeXMuYXJndlswXSA9IHNhdmVkX2FyZ3YwCi0gICAgICAgIGlmIHJlc3RvcmVfbW9kdWxlOgotICAgICAgICAgICAgc3lzLm1vZHVsZXNbbW9kX25hbWVdID0gc2F2ZWRfbW9kdWxlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kX25hbWVdCisgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX2ZuYW1lLCBtb2RfbG9hZGVyLCBwa2dfbmFtZSkKICAgICAjIENvcHkgdGhlIGdsb2JhbHMgb2YgdGhlIHRlbXBvcmFyeSBtb2R1bGUsIGFzIHRoZXkKICAgICAjIG1heSBiZSBjbGVhcmVkIHdoZW4gdGhlIHRlbXBvcmFyeSBtb2R1bGUgZ29lcyBhd2F5CiAgICAgcmV0dXJuIG1vZF9nbG9iYWxzLmNvcHkoKQpAQCAtODEsNyArMTA0LDcgQEAKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIG1vZHVsZSBuYW1lZCAlcyIgJSBtb2RfbmFtZSkKICAgICBpZiBsb2FkZXIuaXNfcGFja2FnZShtb2RfbmFtZSk6CiAgICAgICAgIGlmIG1vZF9uYW1lID09ICJfX21haW5fXyIgb3IgbW9kX25hbWUuZW5kc3dpdGgoIi5fX21haW5fXyIpOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoKCJDYW5ub3QgdXNlIHBhY2thZ2UgYXMgX19tYWluX18gbW9kdWxlIikpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQ2Fubm90IHVzZSBwYWNrYWdlIGFzIF9fbWFpbl9fIG1vZHVsZSIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBrZ19tYWluX25hbWUgPSBtb2RfbmFtZSArICIuX19tYWluX18iCiAgICAgICAgICAgICByZXR1cm4gX2dldF9tb2R1bGVfZGV0YWlscyhwa2dfbWFpbl9uYW1lKQpAQCAtOTQsMzUgKzExNyw0NCBAQAogICAgIGZpbGVuYW1lID0gX2dldF9maWxlbmFtZShsb2FkZXIsIG1vZF9uYW1lKQogICAgIHJldHVybiBtb2RfbmFtZSwgbG9hZGVyLCBjb2RlLCBmaWxlbmFtZQogCi0KICMgWFhYIG5jb2dobGFuOiBTaG91bGQgdGhpcyBiZSBkb2N1bWVudGVkIGFuZCBtYWRlIHB1YmxpYz8KICMgKEN1cnJlbnQgdGhvdWdodHM6IGRvbid0IHJlcGVhdCB0aGUgbWlzdGFrZSB0aGF0IGxlYWQgdG8gaXRzCiAjIGNyZWF0aW9uIHdoZW4gcnVuX21vZHVsZSgpIG5vIGxvbmdlciBtZXQgdGhlIG5lZWRzIG9mCiAjIG1haW5tb2R1bGUuYywgYnV0IGNvdWxkbid0IGJlIGNoYW5nZWQgYmVjYXVzZSBpdCB3YXMgcHVibGljKQotZGVmIF9ydW5fbW9kdWxlX2FzX21haW4obW9kX25hbWUsIHNldF9hcmd2MD1UcnVlKToKK2RlZiBfcnVuX21vZHVsZV9hc19tYWluKG1vZF9uYW1lLCBhbHRlcl9hcmd2PVRydWUpOgogICAgICIiIlJ1bnMgdGhlIGRlc2lnbmF0ZWQgbW9kdWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKIAotICAgICAgIFRoZXNlIF9fKl9fIG1hZ2ljIHZhcmlhYmxlcyB3aWxsIGJlIG92ZXJ3cml0dGVuOgorICAgICAgIE5vdGUgdGhhdCB0aGUgZXhlY3V0ZWQgbW9kdWxlIHdpbGwgaGF2ZSBmdWxsIGFjY2VzcyB0byB0aGUKKyAgICAgICBfX21haW5fXyBuYW1lc3BhY2UuIElmIHRoaXMgaXMgbm90IGRlc2lyYWJsZSwgdGhlIHJ1bl9tb2R1bGUoKQorICAgICAgIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIHRvIHJ1biB0aGUgbW9kdWxlIGNvZGUgaW4gYSBmcmVzaCBuYW1lc3BhY2UuCisKKyAgICAgICBBdCB0aGUgdmVyeSBsZWFzdCwgdGhlc2UgdmFyaWFibGVzIGluIF9fbWFpbl9fIHdpbGwgYmUgb3ZlcndyaXR0ZW46CisgICAgICAgICAgIF9fbmFtZV9fCiAgICAgICAgICAgIF9fZmlsZV9fCisgICAgICAgICAgIF9fY2FjaGVkX18KICAgICAgICAgICAgX19sb2FkZXJfXworICAgICAgICAgICBfX3BhY2thZ2VfXwogICAgICIiIgogICAgIHRyeToKLSAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQorICAgICAgICBpZiBhbHRlcl9hcmd2IG9yIG1vZF9uYW1lICE9ICJfX21haW5fXyI6ICMgaS5lLiAtbSBzd2l0Y2gKKyAgICAgICAgICAgIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZuYW1lID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKKyAgICAgICAgZWxzZTogICAgICAgICAgIyBpLmUuIGRpcmVjdG9yeSBvciB6aXBmaWxlIGV4ZWN1dGlvbgorICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBleGM6CiAgICAgICAgICMgVHJ5IHRvIHByb3ZpZGUgYSBnb29kIGVycm9yIG1lc3NhZ2UKICAgICAgICAgIyBmb3IgZGlyZWN0b3JpZXMsIHppcCBmaWxlcyBhbmQgdGhlIC1tIHN3aXRjaAotICAgICAgICBpZiBzZXRfYXJndjA6CisgICAgICAgIGlmIGFsdGVyX2FyZ3Y6CiAgICAgICAgICAgICAjIEZvciAtbSBzd2l0Y2gsIGp1c3QgZGlzcGxheSB0aGUgZXhjZXB0aW9uCiAgICAgICAgICAgICBpbmZvID0gc3RyKGV4YykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgRm9yIGRpcmVjdG9yaWVzL3ppcGZpbGVzLCBsZXQgdGhlIHVzZXIKICAgICAgICAgICAgICMga25vdyB3aGF0IHRoZSBjb2RlIHdhcyBsb29raW5nIGZvcgotICAgICAgICAgICAgaW5mbyA9ICJjYW4ndCBmaW5kICdfX21haW5fXy5weScgaW4gJXIiICUgc3lzLmFyZ3ZbMF0KKyAgICAgICAgICAgIGluZm8gPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzeXMuYXJndlswXQogICAgICAgICBtc2cgPSAiJXM6ICVzIiAlIChzeXMuZXhlY3V0YWJsZSwgaW5mbykKICAgICAgICAgc3lzLmV4aXQobXNnKQogICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgbWFpbl9nbG9iYWxzID0gc3lzLm1vZHVsZXNbIl9fbWFpbl9fIl0uX19kaWN0X18KLSAgICBpZiBzZXRfYXJndjA6CisgICAgaWYgYWx0ZXJfYXJndjoKICAgICAgICAgc3lzLmFyZ3ZbMF0gPSBmbmFtZQogICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbWFpbl9nbG9iYWxzLCBOb25lLAogICAgICAgICAgICAgICAgICAgICAgIl9fbWFpbl9fIiwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCkBAIC0xNDUsNiArMTc3LDEwNyBAQAogICAgICAgICByZXR1cm4gX3J1bl9jb2RlKGNvZGUsIHt9LCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQogCitkZWYgX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCk6CisgICAgIyBIZWxwZXIgdGhhdCBnaXZlcyBhIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBhdHRlbXB0aW5nIHRvCisgICAgIyBleGVjdXRlIGEgemlwZmlsZSBvciBkaXJlY3RvcnkgYnkgaW52b2tpbmcgX19tYWluX18ucHkKKyAgICBtYWluX25hbWUgPSAiX19tYWluX18iCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX2dldF9tb2R1bGVfZGV0YWlscyhtYWluX25hbWUpCisgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICAgICAgaWYgbWFpbl9uYW1lIGluIHN0cihleGMpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImNhbid0IGZpbmQgJXIgbW9kdWxlIGluICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFpbl9uYW1lLCBzeXMucGF0aFswXSkpCisgICAgICAgIHJhaXNlCisKKworIyBYWFggKG5jb2dobGFuKTogUGVyaGFwcyBleHBvc2UgdGhlIEMgQVBJIGZ1bmN0aW9uCisjIGFzIGltcC5nZXRfaW1wb3J0ZXIgaW5zdGVhZCBvZiByZWltcGxlbWVudGluZyBpdCBpbiBQeXRob24/CitkZWYgX2dldF9pbXBvcnRlcihwYXRoX25hbWUpOgorICAgICIiIlB5dGhvbiB2ZXJzaW9uIG9mIFB5SW1wb3J0X0dldEltcG9ydGVyIEMgQVBJIGZ1bmN0aW9uIiIiCisgICAgY2FjaGUgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0ZXIgPSBjYWNoZVtwYXRoX25hbWVdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAjIE5vdCB5ZXQgY2FjaGVkLiBGbGFnIGFzIHVzaW5nIHRoZQorICAgICAgICAjIHN0YW5kYXJkIG1hY2hpbmVyeSB1bnRpbCB3ZSBmaW5pc2gKKyAgICAgICAgIyBjaGVja2luZyB0aGUgaG9va3MKKyAgICAgICAgY2FjaGVbcGF0aF9uYW1lXSA9IE5vbmUKKyAgICAgICAgZm9yIGhvb2sgaW4gc3lzLnBhdGhfaG9va3M6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0ZXIgPSBob29rKHBhdGhfbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyBjaGVjayBsb29rcyBhIGJpdCBvZGQuIFRoZSB0cmljayBpcyB0aGF0CisgICAgICAgICAgICAjIE51bGxJbXBvcnRlciB0aHJvd3MgSW1wb3J0RXJyb3IgaWYgdGhlIHN1cHBsaWVkIHBhdGggaXMgYQorICAgICAgICAgICAgIyAqdmFsaWQqIGRpcmVjdG9yeSBlbnRyeSAoYW5kIGhlbmNlIGFibGUgdG8gYmUgaGFuZGxlZAorICAgICAgICAgICAgIyBieSB0aGUgc3RhbmRhcmQgaW1wb3J0IG1hY2hpbmVyeSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbXBvcnRlciA9IGltcC5OdWxsSW1wb3J0ZXIocGF0aF9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGNhY2hlW3BhdGhfbmFtZV0gPSBpbXBvcnRlcgorICAgIHJldHVybiBpbXBvcnRlcgorCitkZWYgX2dldF9jb2RlX2Zyb21fZmlsZShmbmFtZSk6CisgICAgIyBDaGVjayBmb3IgYSBjb21waWxlZCBmaWxlIGZpcnN0CisgICAgd2l0aCBvcGVuKGZuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICBjb2RlID0gcmVhZF9jb2RlKGYpCisgICAgaWYgY29kZSBpcyBOb25lOgorICAgICAgICAjIFRoYXQgZGlkbid0IHdvcmssIHNvIHRyeSBpdCBhcyBub3JtYWwgc291cmNlIGNvZGUKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiclUiKSBhcyBmOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZi5yZWFkKCksIGZuYW1lLCAnZXhlYycpCisgICAgcmV0dXJuIGNvZGUKKworZGVmIHJ1bl9wYXRoKHBhdGhfbmFtZSwgaW5pdF9nbG9iYWxzPU5vbmUsIHJ1bl9uYW1lPU5vbmUpOgorICAgICIiIkV4ZWN1dGUgY29kZSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgZmlsZXN5c3RlbSBsb2NhdGlvbgorCisgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0aW5nIHRvcCBsZXZlbCBuYW1lc3BhY2UgZGljdGlvbmFyeQorCisgICAgICAgVGhlIGZpbGUgcGF0aCBtYXkgcmVmZXIgZGlyZWN0bHkgdG8gYSBQeXRob24gc2NyaXB0IChpLmUuCisgICAgICAgb25lIHRoYXQgY291bGQgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgd2l0aCBleGVjZmlsZSkgb3IgZWxzZQorICAgICAgIGl0IG1heSByZWZlciB0byBhIHppcGZpbGUgb3IgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYSB0b3AKKyAgICAgICBsZXZlbCBfX21haW5fXy5weSBzY3JpcHQuCisgICAgIiIiCisgICAgaWYgcnVuX25hbWUgaXMgTm9uZToKKyAgICAgICAgcnVuX25hbWUgPSAiPHJ1bl9wYXRoPiIKKyAgICBpbXBvcnRlciA9IF9nZXRfaW1wb3J0ZXIocGF0aF9uYW1lKQorICAgIGlmIGlzaW5zdGFuY2UoaW1wb3J0ZXIsIGltcC5OdWxsSW1wb3J0ZXIpOgorICAgICAgICAjIE5vdCBhIHZhbGlkIHN5cy5wYXRoIGVudHJ5LCBzbyBydW4gdGhlIGNvZGUgZGlyZWN0bHkKKyAgICAgICAgIyBleGVjZmlsZSgpIGRvZXNuJ3QgaGVscCBhcyB3ZSB3YW50IHRvIGFsbG93IGNvbXBpbGVkIGZpbGVzCisgICAgICAgIGNvZGUgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHBhdGhfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwgcGF0aF9uYW1lKQorICAgIGVsc2U6CisgICAgICAgICMgSW1wb3J0ZXIgaXMgZGVmaW5lZCBmb3IgcGF0aCwgc28gYWRkIGl0IHRvCisgICAgICAgICMgdGhlIHN0YXJ0IG9mIHN5cy5wYXRoCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwYXRoX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSGVyZSdzIHdoZXJlIHRoaW5ncyBhcmUgYSBsaXR0bGUgZGlmZmVyZW50IGZyb20gdGhlIHJ1bl9tb2R1bGUKKyAgICAgICAgICAgICMgY2FzZS4gVGhlcmUsIHdlIG9ubHkgaGFkIHRvIHJlcGxhY2UgdGhlIG1vZHVsZSBpbiBzeXMgd2hpbGUgdGhlCisgICAgICAgICAgICAjIGNvZGUgd2FzIHJ1bm5pbmcgYW5kIGRvaW5nIHNvIHdhcyBzb21ld2hhdCBvcHRpb25hbC4gSGVyZSwgd2UKKyAgICAgICAgICAgICMgaGF2ZSBubyBjaG9pY2UgYW5kIHdlIGhhdmUgdG8gcmVtb3ZlIGl0IGV2ZW4gd2hpbGUgd2UgcmVhZCB0aGUKKyAgICAgICAgICAgICMgY29kZS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgYSBfX2xvYWRlcl9fIGF0dHJpYnV0ZSBpbiB0aGUKKyAgICAgICAgICAgICMgZXhpc3RpbmcgX19tYWluX18gbW9kdWxlIG1heSBwcmV2ZW50IGxvY2F0aW9uIG9mIHRoZSBuZXcgbW9kdWxlLgorICAgICAgICAgICAgbWFpbl9uYW1lID0gIl9fbWFpbl9fIgorICAgICAgICAgICAgc2F2ZWRfbWFpbiA9IHN5cy5tb2R1bGVzW21haW5fbmFtZV0KKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttYWluX25hbWVdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1ttYWluX25hbWVdID0gc2F2ZWRfbWFpbgorICAgICAgICAgICAgcGtnX25hbWUgPSAiIgorICAgICAgICAgICAgd2l0aCBfVGVtcE1vZHVsZShydW5fbmFtZSkgYXMgdGVtcF9tb2R1bGUsIFwKKyAgICAgICAgICAgICAgICAgX01vZGlmaWVkQXJndjAocGF0aF9uYW1lKToKKyAgICAgICAgICAgICAgICBtb2RfZ2xvYmFscyA9IHRlbXBfbW9kdWxlLm1vZHVsZS5fX2RpY3RfXworICAgICAgICAgICAgICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbW9kX2dsb2JhbHMsIGluaXRfZ2xvYmFscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9uYW1lLCBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkuY29weSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHBhdGhfbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgICMgUnVuIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGFzIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBhcmd1bWVudApkaWZmIC0tZ2l0IGEvTGliL3NoZWx2ZS5weSBiL0xpYi9zaGVsdmUucHkKaW5kZXggNTJlNDcxYS4uY2MxODE1ZSAxMDA2NDQKLS0tIGEvTGliL3NoZWx2ZS5weQorKysgYi9MaWIvc2hlbHZlLnB5CkBAIC03Myw2ICs3Myw3IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gJzxDbG9zZWQgRGljdGlvbmFyeT4nCiAKKwogY2xhc3MgU2hlbGYoY29sbGVjdGlvbnMuTXV0YWJsZU1hcHBpbmcpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIHNoZWxmIGltcGxlbWVudGF0aW9ucy4KIApAQCAtODgsNyArODksNyBAQAogICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCiAgICAgICAgIHNlbGYud3JpdGViYWNrID0gd3JpdGViYWNrCiAgICAgICAgIHNlbGYuY2FjaGUgPSB7fQotICAgICAgICBzZWxmLmtleWVuY29kaW5nID0gInV0Zi04IgorICAgICAgICBzZWxmLmtleWVuY29kaW5nID0ga2V5ZW5jb2RpbmcKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgZm9yIGsgaW4gc2VsZi5kaWN0LmtleXMoKToKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IDQ4NjJhZTYuLmFhZmUwNGUgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMSw0ICsxLDQgQEAKLSIiIlV0aWxpdHkgZnVuY3Rpb25zIGZvciBjb3B5aW5nIGZpbGVzIGFuZCBkaXJlY3RvcnkgdHJlZXMuCisiIiJVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgY29weWluZyBhbmQgYXJjaGl2aW5nIGZpbGVzIGFuZCBkaXJlY3RvcnkgdHJlZXMuCiAKIFhYWCBUaGUgZnVuY3Rpb25zIGhlcmUgZG9uJ3QgY29weSB0aGUgcmVzb3VyY2UgZm9yayBvciBvdGhlciBtZXRhZGF0YSBvbiBNYWMuCiAKQEAgLTksMTAgKzksMzIgQEAKIGltcG9ydCBzdGF0CiBmcm9tIG9zLnBhdGggaW1wb3J0IGFic3BhdGgKIGltcG9ydCBmbm1hdGNoCitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlcnJubworaW1wb3J0IHRhcmZpbGUKIAotX19hbGxfXyA9IFsiY29weWZpbGVvYmoiLCJjb3B5ZmlsZSIsImNvcHltb2RlIiwiY29weXN0YXQiLCJjb3B5IiwiY29weTIiLAotICAgICAgICAgICAiY29weXRyZWUiLCJtb3ZlIiwicm10cmVlIiwiRXJyb3IiLCAiU3BlY2lhbEZpbGVFcnJvciJdCit0cnk6CisgICAgaW1wb3J0IGJ6MgorICAgIF9CWjJfU1VQUE9SVEVEID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9CWjJfU1VQUE9SVEVEID0gRmFsc2UKKwordHJ5OgorICAgIGZyb20gcHdkIGltcG9ydCBnZXRwd25hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldHB3bmFtID0gTm9uZQorCit0cnk6CisgICAgZnJvbSBncnAgaW1wb3J0IGdldGdybmFtCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ2V0Z3JuYW0gPSBOb25lCisKK19fYWxsX18gPSBbImNvcHlmaWxlb2JqIiwgImNvcHlmaWxlIiwgImNvcHltb2RlIiwgImNvcHlzdGF0IiwgImNvcHkiLCAiY29weTIiLAorICAgICAgICAgICAiY29weXRyZWUiLCAibW92ZSIsICJybXRyZWUiLCAiRXJyb3IiLCAiU3BlY2lhbEZpbGVFcnJvciIsCisgICAgICAgICAgICJFeGVjRXJyb3IiLCAibWFrZV9hcmNoaXZlIiwgImdldF9hcmNoaXZlX2Zvcm1hdHMiLAorICAgICAgICAgICAicmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQiLCAidW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCIsCisgICAgICAgICAgICJnZXRfdW5wYWNrX2Zvcm1hdHMiLCAicmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCIsCisgICAgICAgICAgICJ1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQiLCAidW5wYWNrX2FyY2hpdmUiXQogCiBjbGFzcyBFcnJvcihFbnZpcm9ubWVudEVycm9yKToKICAgICBwYXNzCkBAIC0yMSw2ICs0MywxNyBAQAogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKK2NsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCisKK2NsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCisKK2NsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKKyAgICAiIiJSYWlzZWQgd2hlbiBhIHJlZ2lzdGVyeSBvcGVyYXRpb24gd2l0aCB0aGUgYXJjaGl2aW5nCisgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgorCisKIHRyeToKICAgICBXaW5kb3dzRXJyb3IKIGV4Y2VwdCBOYW1lRXJyb3I6CkBAIC0zNiw3ICs2OSw3IEBACiAKIGRlZiBfc2FtZWZpbGUoc3JjLCBkc3QpOgogICAgICMgTWFjaW50b3NoLCBVbml4LgotICAgIGlmIGhhc2F0dHIob3MucGF0aCwnc2FtZWZpbGUnKToKKyAgICBpZiBoYXNhdHRyKG9zLnBhdGgsICdzYW1lZmlsZScpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zYW1lZmlsZShzcmMsIGRzdCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CkBAIC04NSw3ICsxMTgsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5jaGZsYWdzKGRzdCwgc3Quc3RfZmxhZ3MpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVycm5vLCAnRU9QTk9UU1VQUCcpIG9yIHdoeS5lcnJubyAhPSBlcnJuby5FT1BOT1RTVVBQOgorICAgICAgICAgICAgaWYgKG5vdCBoYXNhdHRyKGVycm5vLCAnRU9QTk9UU1VQUCcpIG9yCisgICAgICAgICAgICAgICAgd2h5LmVycm5vICE9IGVycm5vLkVPUE5PVFNVUFApOgogICAgICAgICAgICAgICAgIHJhaXNlCiAKIGRlZiBjb3B5KHNyYywgZHN0KToKQEAgLTEyMiw4ICsxNTYsOSBAQAogICAgICAgICByZXR1cm4gc2V0KGlnbm9yZWRfbmFtZXMpCiAgICAgcmV0dXJuIF9pZ25vcmVfcGF0dGVybnMKIAotZGVmIGNvcHl0cmVlKHNyYywgZHN0LCBzeW1saW5rcz1GYWxzZSwgaWdub3JlPU5vbmUpOgotICAgICIiIlJlY3Vyc2l2ZWx5IGNvcHkgYSBkaXJlY3RvcnkgdHJlZSB1c2luZyBjb3B5MigpLgorZGVmIGNvcHl0cmVlKHNyYywgZHN0LCBzeW1saW5rcz1GYWxzZSwgaWdub3JlPU5vbmUsIGNvcHlfZnVuY3Rpb249Y29weTIsCisgICAgICAgICAgICAgaWdub3JlX2RhbmdsaW5nX3N5bWxpbmtzPUZhbHNlKToKKyAgICAiIiJSZWN1cnNpdmVseSBjb3B5IGEgZGlyZWN0b3J5IHRyZWUuCiAKICAgICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IG11c3Qgbm90IGFscmVhZHkgZXhpc3QuCiAgICAgSWYgZXhjZXB0aW9uKHMpIG9jY3VyLCBhbiBFcnJvciBpcyByYWlzZWQgd2l0aCBhIGxpc3Qgb2YgcmVhc29ucy4KQEAgLTEzMSw3ICsxNjYsMTMgQEAKICAgICBJZiB0aGUgb3B0aW9uYWwgc3ltbGlua3MgZmxhZyBpcyB0cnVlLCBzeW1ib2xpYyBsaW5rcyBpbiB0aGUKICAgICBzb3VyY2UgdHJlZSByZXN1bHQgaW4gc3ltYm9saWMgbGlua3MgaW4gdGhlIGRlc3RpbmF0aW9uIHRyZWU7IGlmCiAgICAgaXQgaXMgZmFsc2UsIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMgcG9pbnRlZCB0byBieSBzeW1ib2xpYwotICAgIGxpbmtzIGFyZSBjb3BpZWQuCisgICAgbGlua3MgYXJlIGNvcGllZC4gSWYgdGhlIGZpbGUgcG9pbnRlZCBieSB0aGUgc3ltbGluayBkb2Vzbid0CisgICAgZXhpc3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIGFkZGVkIGluIHRoZSBsaXN0IG9mIGVycm9ycyByYWlzZWQgaW4KKyAgICBhbiBFcnJvciBleGNlcHRpb24gYXQgdGhlIGVuZCBvZiB0aGUgY29weSBwcm9jZXNzLgorCisgICAgWW91IGNhbiBzZXQgdGhlIG9wdGlvbmFsIGlnbm9yZV9kYW5nbGluZ19zeW1saW5rcyBmbGFnIHRvIHRydWUgaWYgeW91CisgICAgd2FudCB0byBzaWxlbmNlIHRoaXMgZXhjZXB0aW9uLiBOb3RpY2UgdGhhdCB0aGlzIGhhcyBubyBlZmZlY3Qgb24KKyAgICBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IG9zLnN5bWxpbmsuCiAKICAgICBUaGUgb3B0aW9uYWwgaWdub3JlIGFyZ3VtZW50IGlzIGEgY2FsbGFibGUuIElmIGdpdmVuLCBpdAogICAgIGlzIGNhbGxlZCB3aXRoIHRoZSBgc3JjYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIHRoZSBkaXJlY3RvcnkKQEAgLTE0NSw3ICsxODYsMTAgQEAKICAgICBsaXN0IG9mIG5hbWVzIHJlbGF0aXZlIHRvIHRoZSBgc3JjYCBkaXJlY3RvcnkgdGhhdCBzaG91bGQKICAgICBub3QgYmUgY29waWVkLgogCi0gICAgWFhYIENvbnNpZGVyIHRoaXMgZXhhbXBsZSBjb2RlIHJhdGhlciB0aGFuIHRoZSB1bHRpbWF0ZSB0b29sLgorICAgIFRoZSBvcHRpb25hbCBjb3B5X2Z1bmN0aW9uIGFyZ3VtZW50IGlzIGEgY2FsbGFibGUgdGhhdCB3aWxsIGJlIHVzZWQKKyAgICB0byBjb3B5IGVhY2ggZmlsZS4gSXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc291cmNlIHBhdGggYW5kIHRoZQorICAgIGRlc3RpbmF0aW9uIHBhdGggYXMgYXJndW1lbnRzLiBCeSBkZWZhdWx0LCBjb3B5MigpIGlzIHVzZWQsIGJ1dCBhbnkKKyAgICBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIHRoZSBzYW1lIHNpZ25hdHVyZSAobGlrZSBjb3B5KCkpIGNhbiBiZSB1c2VkLgogCiAgICAgIiIiCiAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNyYykKQEAgLTE2MiwxNCArMjA2LDIxIEBACiAgICAgICAgIHNyY25hbWUgPSBvcy5wYXRoLmpvaW4oc3JjLCBuYW1lKQogICAgICAgICBkc3RuYW1lID0gb3MucGF0aC5qb2luKGRzdCwgbmFtZSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc3ltbGlua3MgYW5kIG9zLnBhdGguaXNsaW5rKHNyY25hbWUpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoc3JjbmFtZSk6CiAgICAgICAgICAgICAgICAgbGlua3RvID0gb3MucmVhZGxpbmsoc3JjbmFtZSkKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKGxpbmt0bywgZHN0bmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzeW1saW5rczoKKyAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhsaW5rdG8sIGRzdG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBpZ25vcmUgZGFuZ2xpbmcgc3ltbGluayBpZiB0aGUgZmxhZyBpcyBvbgorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobGlua3RvKSBhbmQgaWdub3JlX2RhbmdsaW5nX3N5bWxpbmtzOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBvdGhlcndpc2UgbGV0IHRoZSBjb3B5IG9jY3Vycy4gY29weTIgd2lsbCByYWlzZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICBjb3B5X2Z1bmN0aW9uKHNyY25hbWUsIGRzdG5hbWUpCiAgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoc3JjbmFtZSk6Ci0gICAgICAgICAgICAgICAgY29weXRyZWUoc3JjbmFtZSwgZHN0bmFtZSwgc3ltbGlua3MsIGlnbm9yZSkKKyAgICAgICAgICAgICAgICBjb3B5dHJlZShzcmNuYW1lLCBkc3RuYW1lLCBzeW1saW5rcywgaWdub3JlLCBjb3B5X2Z1bmN0aW9uKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAjIFdpbGwgcmFpc2UgYSBTcGVjaWFsRmlsZUVycm9yIGZvciB1bnN1cHBvcnRlZCBmaWxlIHR5cGVzCi0gICAgICAgICAgICAgICAgY29weTIoc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgICAgICAgICBjb3B5X2Z1bmN0aW9uKHNyY25hbWUsIGRzdG5hbWUpCiAgICAgICAgICMgY2F0Y2ggdGhlIEVycm9yIGZyb20gdGhlIHJlY3Vyc2l2ZSBjb3B5dHJlZSBzbyB0aGF0IHdlIGNhbgogICAgICAgICAjIGNvbnRpbnVlIHdpdGggb3RoZXIgZmlsZXMKICAgICAgICAgZXhjZXB0IEVycm9yIGFzIGVycjoKQEAgLTI4MywzICszMzQsNDE3IEBACiAgICAgaWYgbm90IGRzdC5lbmRzd2l0aChvcy5wYXRoLnNlcCk6CiAgICAgICAgIGRzdCArPSBvcy5wYXRoLnNlcAogICAgIHJldHVybiBkc3Quc3RhcnRzd2l0aChzcmMpCisKK2RlZiBfZ2V0X2dpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGEgZ2lkLCBnaXZlbiBhIGdyb3VwIG5hbWUuIiIiCisgICAgaWYgZ2V0Z3JuYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRncm5hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBfZ2V0X3VpZChuYW1lKToKKyAgICAiIiJSZXR1cm5zIGFuIHVpZCwgZ2l2ZW4gYSB1c2VyIG5hbWUuIiIiCisgICAgaWYgZ2V0cHduYW0gaXMgTm9uZSBvciBuYW1lIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgdHJ5OgorICAgICAgICByZXN1bHQgPSBnZXRwd25hbShuYW1lKQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIHJlc3VsdFsyXQorICAgIHJldHVybiBOb25lCisKK2RlZiBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgICBvd25lcj1Ob25lLCBncm91cD1Ob25lLCBsb2dnZXI9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgKHBvc3NpYmx5IGNvbXByZXNzZWQpIHRhciBmaWxlIGZyb20gYWxsIHRoZSBmaWxlcyB1bmRlcgorICAgICdiYXNlX2RpcicuCisKKyAgICAnY29tcHJlc3MnIG11c3QgYmUgImd6aXAiICh0aGUgZGVmYXVsdCksICJiemlwMiIsIG9yIE5vbmUuCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCisgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAorICAgIHdpbGwgYmUgdXNlZC4KKworICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9uYW1lJyArICAiLnRhciIsIHBvc3NpYmx5IHBsdXMKKyAgICB0aGUgYXBwcm9wcmlhdGUgY29tcHJlc3Npb24gZXh0ZW5zaW9uICgiLmd6Iiwgb3IgIi5iejIiKS4KKworICAgIFJldHVybnMgdGhlIG91dHB1dCBmaWxlbmFtZS4KKyAgICAiIiIKKyAgICB0YXJfY29tcHJlc3Npb24gPSB7J2d6aXAnOiAnZ3onLCBOb25lOiAnJ30KKyAgICBjb21wcmVzc19leHQgPSB7J2d6aXAnOiAnLmd6J30KKworICAgIGlmIF9CWjJfU1VQUE9SVEVEOgorICAgICAgICB0YXJfY29tcHJlc3Npb25bJ2J6aXAyJ10gPSAnYnoyJworICAgICAgICBjb21wcmVzc19leHRbJ2J6aXAyJ10gPSAnLmJ6MicKKworICAgICMgZmxhZ3MgZm9yIGNvbXByZXNzaW9uIHByb2dyYW0sIGVhY2ggZWxlbWVudCBvZiBsaXN0IHdpbGwgYmUgYW4gYXJndW1lbnQKKyAgICBpZiBjb21wcmVzcyBpcyBub3QgTm9uZSBhbmQgY29tcHJlc3Mgbm90IGluIGNvbXByZXNzX2V4dC5rZXlzKCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJhZCB2YWx1ZSBmb3IgJ2NvbXByZXNzJywgb3IgY29tcHJlc3Npb24gZm9ybWF0IG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnRlZCA6IHswfSIuZm9ybWF0KGNvbXByZXNzKSkKKworICAgIGFyY2hpdmVfbmFtZSA9IGJhc2VfbmFtZSArICcudGFyJyArIGNvbXByZXNzX2V4dC5nZXQoY29tcHJlc3MsICcnKQorICAgIGFyY2hpdmVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGFyY2hpdmVfbmFtZSkKKworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX2Rpcik6CisgICAgICAgIGlmIGxvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJjcmVhdGluZyAlcyIgJSBhcmNoaXZlX2RpcikKKyAgICAgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgICAgICBvcy5tYWtlZGlycyhhcmNoaXZlX2RpcikKKworICAgICMgY3JlYXRpbmcgdGhlIHRhcmJhbGwKKyAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgIGxvZ2dlci5pbmZvKCdDcmVhdGluZyB0YXIgYXJjaGl2ZScpCisKKyAgICB1aWQgPSBfZ2V0X3VpZChvd25lcikKKyAgICBnaWQgPSBfZ2V0X2dpZChncm91cCkKKworICAgIGRlZiBfc2V0X3VpZF9naWQodGFyaW5mbyk6CisgICAgICAgIGlmIGdpZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8uZ2lkID0gZ2lkCisgICAgICAgICAgICB0YXJpbmZvLmduYW1lID0gZ3JvdXAKKyAgICAgICAgaWYgdWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby51aWQgPSB1aWQKKyAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSBvd25lcgorICAgICAgICByZXR1cm4gdGFyaW5mbworCisgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUsICd3fCVzJyAlIHRhcl9jb21wcmVzc2lvbltjb21wcmVzc10pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIsIGZpbHRlcj1fc2V0X3VpZF9naWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgcmV0dXJuIGFyY2hpdmVfbmFtZQorCitkZWYgX2NhbGxfZXh0ZXJuYWxfemlwKGJhc2VfZGlyLCB6aXBfZmlsZW5hbWUsIHZlcmJvc2U9RmFsc2UsIGRyeV9ydW49RmFsc2UpOgorICAgICMgWFhYIHNlZSBpZiB3ZSB3YW50IHRvIGtlZXAgYW4gZXh0ZXJuYWwgY2FsbCBoZXJlCisgICAgaWYgdmVyYm9zZToKKyAgICAgICAgemlwb3B0aW9ucyA9ICItciIKKyAgICBlbHNlOgorICAgICAgICB6aXBvcHRpb25zID0gIi1ycSIKKyAgICBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0V4ZWNFcnJvcgorICAgIGZyb20gZGlzdHV0aWxzLnNwYXduIGltcG9ydCBzcGF3bgorICAgIHRyeToKKyAgICAgICAgc3Bhd24oWyJ6aXAiLCB6aXBvcHRpb25zLCB6aXBfZmlsZW5hbWUsIGJhc2VfZGlyXSwgZHJ5X3J1bj1kcnlfcnVuKQorICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3I6CisgICAgICAgICMgWFhYIHJlYWxseSBzaG91bGQgZGlzdGluZ3Vpc2ggYmV0d2VlbiAiY291bGRuJ3QgZmluZAorICAgICAgICAjIGV4dGVybmFsICd6aXAnIGNvbW1hbmQiIGFuZCAiemlwIGZhaWxlZCIuCisgICAgICAgIHJhaXNlIEV4ZWNFcnJvcigidW5hYmxlIHRvIGNyZWF0ZSB6aXAgZmlsZSAnJXMnOiAiCisgICAgICAgICAgICAiY291bGQgbmVpdGhlciBpbXBvcnQgdGhlICd6aXBmaWxlJyBtb2R1bGUgbm9yICIKKyAgICAgICAgICAgICJmaW5kIGEgc3RhbmRhbG9uZSB6aXAgdXRpbGl0eSIpICUgemlwX2ZpbGVuYW1lCisKK2RlZiBfbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgYmFzZV9kaXIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wLCBsb2dnZXI9Tm9uZSk6CisgICAgIiIiQ3JlYXRlIGEgemlwIGZpbGUgZnJvbSBhbGwgdGhlIGZpbGVzIHVuZGVyICdiYXNlX2RpcicuCisKKyAgICBUaGUgb3V0cHV0IHppcCBmaWxlIHdpbGwgYmUgbmFtZWQgJ2Jhc2VfbmFtZScgKyAiLnppcCIuICBVc2VzIGVpdGhlciB0aGUKKyAgICAiemlwZmlsZSIgUHl0aG9uIG1vZHVsZSAoaWYgYXZhaWxhYmxlKSBvciB0aGUgSW5mb1pJUCAiemlwIiB1dGlsaXR5CisgICAgKGlmIGluc3RhbGxlZCBhbmQgZm91bmQgb24gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGgpLiAgSWYgbmVpdGhlciB0b29sIGlzCisgICAgYXZhaWxhYmxlLCByYWlzZXMgRXhlY0Vycm9yLiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IHppcAorICAgIGZpbGUuCisgICAgIiIiCisgICAgemlwX2ZpbGVuYW1lID0gYmFzZV9uYW1lICsgIi56aXAiCisgICAgYXJjaGl2ZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoYmFzZV9uYW1lKQorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfZGlyKToKKyAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oImNyZWF0aW5nICVzIiwgYXJjaGl2ZV9kaXIpCisgICAgICAgIGlmIG5vdCBkcnlfcnVuOgorICAgICAgICAgICAgb3MubWFrZWRpcnMoYXJjaGl2ZV9kaXIpCisKKyAgICAjIElmIHppcGZpbGUgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUsIHRyeSBzcGF3bmluZyBhbiBleHRlcm5hbCAnemlwJworICAgICMgY29tbWFuZC4KKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB6aXBmaWxlCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICB6aXBmaWxlID0gTm9uZQorCisgICAgaWYgemlwZmlsZSBpcyBOb25lOgorICAgICAgICBfY2FsbF9leHRlcm5hbF96aXAoYmFzZV9kaXIsIHppcF9maWxlbmFtZSwgdmVyYm9zZSwgZHJ5X3J1bikKKyAgICBlbHNlOgorICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJyVzJyBhbmQgYWRkaW5nICclcycgdG8gaXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgemlwX2ZpbGVuYW1lLCBiYXNlX2RpcikKKworICAgICAgICBpZiBub3QgZHJ5X3J1bjoKKyAgICAgICAgICAgIHppcCA9IHppcGZpbGUuWmlwRmlsZSh6aXBfZmlsZW5hbWUsICJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhiYXNlX2Rpcik6CisgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgemlwLndyaXRlKHBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oImFkZGluZyAnJXMnIiwgcGF0aCkKKyAgICAgICAgICAgIHppcC5jbG9zZSgpCisKKyAgICByZXR1cm4gemlwX2ZpbGVuYW1lCisKK19BUkNISVZFX0ZPUk1BVFMgPSB7CisgICAgJ2d6dGFyJzogKF9tYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgJ2d6aXAnKV0sICJnemlwJ2VkIHRhci1maWxlIiksCisgICAgJ2J6dGFyJzogKF9tYWtlX3RhcmJhbGwsIFsoJ2NvbXByZXNzJywgJ2J6aXAyJyldLCAiYnppcDInZWQgdGFyLWZpbGUiKSwKKyAgICAndGFyJzogICAoX21ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCBOb25lKV0sICJ1bmNvbXByZXNzZWQgdGFyIGZpbGUiKSwKKyAgICAnemlwJzogICAoX21ha2VfemlwZmlsZSwgW10sIlpJUCBmaWxlIikKKyAgICB9CisKK2lmIF9CWjJfU1VQUE9SVEVEOgorICAgIF9BUkNISVZFX0ZPUk1BVFNbJ2J6dGFyJ10gPSAoX21ha2VfdGFyYmFsbCwgWygnY29tcHJlc3MnLCAnYnppcDInKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiemlwMidlZCB0YXItZmlsZSIpCisKK2RlZiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCk6CisgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGFyY2hpdmluZyBhbmQgdW5hcmNoaXZpbmcuCisKKyAgICBFYWNoIGVsZW1lbnQgb2YgdGhlIHJldHVybmVkIHNlcXVlbmNlIGlzIGEgdHVwbGUgKG5hbWUsIGRlc2NyaXB0aW9uKQorICAgICIiIgorICAgIGZvcm1hdHMgPSBbKG5hbWUsIHJlZ2lzdHJ5WzJdKSBmb3IgbmFtZSwgcmVnaXN0cnkgaW4KKyAgICAgICAgICAgICAgIF9BUkNISVZFX0ZPUk1BVFMuaXRlbXMoKV0KKyAgICBmb3JtYXRzLnNvcnQoKQorICAgIHJldHVybiBmb3JtYXRzCisKK2RlZiByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lLCBmdW5jdGlvbiwgZXh0cmFfYXJncz1Ob25lLCBkZXNjcmlwdGlvbj0nJyk6CisgICAgIiIiUmVnaXN0ZXJzIGFuIGFyY2hpdmUgZm9ybWF0LgorCisgICAgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgZm9ybWF0LiBmdW5jdGlvbiBpcyB0aGUgY2FsbGFibGUgdGhhdCB3aWxsIGJlCisgICAgdXNlZCB0byBjcmVhdGUgYXJjaGl2ZXMuIElmIHByb3ZpZGVkLCBleHRyYV9hcmdzIGlzIGEgc2VxdWVuY2Ugb2YKKyAgICAobmFtZSwgdmFsdWUpIHR1cGxlcyB0aGF0IHdpbGwgYmUgcGFzc2VkIGFzIGFyZ3VtZW50cyB0byB0aGUgY2FsbGFibGUuCisgICAgZGVzY3JpcHRpb24gY2FuIGJlIHByb3ZpZGVkIHRvIGRlc2NyaWJlIHRoZSBmb3JtYXQsIGFuZCB3aWxsIGJlIHJldHVybmVkCisgICAgYnkgdGhlIGdldF9hcmNoaXZlX2Zvcm1hdHMoKSBmdW5jdGlvbi4KKyAgICAiIiIKKyAgICBpZiBleHRyYV9hcmdzIGlzIE5vbmU6CisgICAgICAgIGV4dHJhX2FyZ3MgPSBbXQorICAgIGlmIG5vdCBpc2luc3RhbmNlKGZ1bmN0aW9uLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignVGhlICVzIG9iamVjdCBpcyBub3QgY2FsbGFibGUnICUgZnVuY3Rpb24pCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZXh0cmFfYXJncywgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXh0cmFfYXJncyBuZWVkcyB0byBiZSBhIHNlcXVlbmNlJykKKyAgICBmb3IgZWxlbWVudCBpbiBleHRyYV9hcmdzOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtZW50LCAodHVwbGUsIGxpc3QpKSBvciBsZW4oZWxlbWVudCkgIT0yIDoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXh0cmFfYXJncyBlbGVtZW50cyBhcmUgOiAoYXJnX25hbWUsIHZhbHVlKScpCisKKyAgICBfQVJDSElWRV9GT1JNQVRTW25hbWVdID0gKGZ1bmN0aW9uLCBleHRyYV9hcmdzLCBkZXNjcmlwdGlvbikKKworZGVmIHVucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQobmFtZSk6CisgICAgZGVsIF9BUkNISVZFX0ZPUk1BVFNbbmFtZV0KKworZGVmIG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwgdmVyYm9zZT0wLAorICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUsIGxvZ2dlcj1Ob25lKToKKyAgICAiIiJDcmVhdGUgYW4gYXJjaGl2ZSBmaWxlIChlZy4gemlwIG9yIHRhcikuCisKKyAgICAnYmFzZV9uYW1lJyBpcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0byBjcmVhdGUsIG1pbnVzIGFueSBmb3JtYXQtc3BlY2lmaWMKKyAgICBleHRlbnNpb247ICdmb3JtYXQnIGlzIHRoZSBhcmNoaXZlIGZvcm1hdDogb25lIG9mICJ6aXAiLCAidGFyIiwgImJ6dGFyIgorICAgIG9yICJnenRhciIuCisKKyAgICAncm9vdF9kaXInIGlzIGEgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlCisgICAgYXJjaGl2ZTsgaWUuIHdlIHR5cGljYWxseSBjaGRpciBpbnRvICdyb290X2RpcicgYmVmb3JlIGNyZWF0aW5nIHRoZQorICAgIGFyY2hpdmUuICAnYmFzZV9kaXInIGlzIHRoZSBkaXJlY3Rvcnkgd2hlcmUgd2Ugc3RhcnQgYXJjaGl2aW5nIGZyb207CisgICAgaWUuICdiYXNlX2Rpcicgd2lsbCBiZSB0aGUgY29tbW9uIHByZWZpeCBvZiBhbGwgZmlsZXMgYW5kCisgICAgZGlyZWN0b3JpZXMgaW4gdGhlIGFyY2hpdmUuICAncm9vdF9kaXInIGFuZCAnYmFzZV9kaXInIGJvdGggZGVmYXVsdAorICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUgZmlsZS4KKworICAgICdvd25lcicgYW5kICdncm91cCcgYXJlIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBhcmNoaXZlLiBCeSBkZWZhdWx0LAorICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgorICAgICIiIgorICAgIHNhdmVfY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICBpZiByb290X2RpciBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJjaGFuZ2luZyBpbnRvICclcyciLCByb290X2RpcikKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5hYnNwYXRoKGJhc2VfbmFtZSkKKyAgICAgICAgaWYgbm90IGRyeV9ydW46CisgICAgICAgICAgICBvcy5jaGRpcihyb290X2RpcikKKworICAgIGlmIGJhc2VfZGlyIGlzIE5vbmU6CisgICAgICAgIGJhc2VfZGlyID0gb3MuY3VyZGlyCisKKyAgICBrd2FyZ3MgPSB7J2RyeV9ydW4nOiBkcnlfcnVuLCAnbG9nZ2VyJzogbG9nZ2VyfQorCisgICAgdHJ5OgorICAgICAgICBmb3JtYXRfaW5mbyA9IF9BUkNISVZFX0ZPUk1BVFNbZm9ybWF0XQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBhcmNoaXZlIGZvcm1hdCAnJXMnIiAlIGZvcm1hdCkKKworICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1swXQorICAgIGZvciBhcmcsIHZhbCBpbiBmb3JtYXRfaW5mb1sxXToKKyAgICAgICAga3dhcmdzW2FyZ10gPSB2YWwKKworICAgIGlmIGZvcm1hdCAhPSAnemlwJzoKKyAgICAgICAga3dhcmdzWydvd25lciddID0gb3duZXIKKyAgICAgICAga3dhcmdzWydncm91cCddID0gZ3JvdXAKKworICAgIHRyeToKKyAgICAgICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHJvb3RfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiY2hhbmdpbmcgYmFjayB0byAnJXMnIiwgc2F2ZV9jd2QpCisgICAgICAgICAgICBvcy5jaGRpcihzYXZlX2N3ZCkKKworICAgIHJldHVybiBmaWxlbmFtZQorCisKK2RlZiBnZXRfdW5wYWNrX2Zvcm1hdHMoKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBvZiBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgdW5wYWNraW5nLgorCisgICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlCisgICAgKG5hbWUsIGV4dGVuc2lvbnMsIGRlc2NyaXB0aW9uKQorICAgICIiIgorICAgIGZvcm1hdHMgPSBbKG5hbWUsIGluZm9bMF0sIGluZm9bM10pIGZvciBuYW1lLCBpbmZvIGluCisgICAgICAgICAgICAgICBfVU5QQUNLX0ZPUk1BVFMuaXRlbXMoKV0KKyAgICBmb3JtYXRzLnNvcnQoKQorICAgIHJldHVybiBmb3JtYXRzCisKK2RlZiBfY2hlY2tfdW5wYWNrX29wdGlvbnMoZXh0ZW5zaW9ucywgZnVuY3Rpb24sIGV4dHJhX2FyZ3MpOgorICAgICIiIkNoZWNrcyB3aGF0IGdldHMgcmVnaXN0ZXJlZCBhcyBhbiB1bnBhY2tlci4iIiIKKyAgICAjIGZpcnN0IG1ha2Ugc3VyZSBubyBvdGhlciB1bnBhY2tlciBpcyByZWdpc3RlcmVkIGZvciB0aGlzIGV4dGVuc2lvbgorICAgIGV4aXN0aW5nX2V4dGVuc2lvbnMgPSB7fQorICAgIGZvciBuYW1lLCBpbmZvIGluIF9VTlBBQ0tfRk9STUFUUy5pdGVtcygpOgorICAgICAgICBmb3IgZXh0IGluIGluZm9bMF06CisgICAgICAgICAgICBleGlzdGluZ19leHRlbnNpb25zW2V4dF0gPSBuYW1lCisKKyAgICBmb3IgZXh0ZW5zaW9uIGluIGV4dGVuc2lvbnM6CisgICAgICAgIGlmIGV4dGVuc2lvbiBpbiBleGlzdGluZ19leHRlbnNpb25zOgorICAgICAgICAgICAgbXNnID0gJyVzIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBmb3IgIiVzIicKKyAgICAgICAgICAgIHJhaXNlIFJlZ2lzdHJ5RXJyb3IobXNnICUgKGV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nX2V4dGVuc2lvbnNbZXh0ZW5zaW9uXSkpCisKKyAgICBpZiBub3QgaXNpbnN0YW5jZShmdW5jdGlvbiwgY29sbGVjdGlvbnMuQ2FsbGFibGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1RoZSByZWdpc3RlcmVkIGZ1bmN0aW9uIG11c3QgYmUgYSBjYWxsYWJsZScpCisKKworZGVmIHJlZ2lzdGVyX3VucGFja19mb3JtYXQobmFtZSwgZXh0ZW5zaW9ucywgZnVuY3Rpb24sIGV4dHJhX2FyZ3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPScnKToKKyAgICAiIiJSZWdpc3RlcnMgYW4gdW5wYWNrIGZvcm1hdC4KKworICAgIGBuYW1lYCBpcyB0aGUgbmFtZSBvZiB0aGUgZm9ybWF0LiBgZXh0ZW5zaW9uc2AgaXMgYSBsaXN0IG9mIGV4dGVuc2lvbnMKKyAgICBjb3JyZXNwb25kaW5nIHRvIHRoZSBmb3JtYXQuCisKKyAgICBgZnVuY3Rpb25gIGlzIHRoZSBjYWxsYWJsZSB0aGF0IHdpbGwgYmUKKyAgICB1c2VkIHRvIHVucGFjayBhcmNoaXZlcy4gVGhlIGNhbGxhYmxlIHdpbGwgcmVjZWl2ZSBhcmNoaXZlcyB0byB1bnBhY2suCisgICAgSWYgaXQncyB1bmFibGUgdG8gaGFuZGxlIGFuIGFyY2hpdmUsIGl0IG5lZWRzIHRvIHJhaXNlIGEgUmVhZEVycm9yCisgICAgZXhjZXB0aW9uLgorCisgICAgSWYgcHJvdmlkZWQsIGBleHRyYV9hcmdzYCBpcyBhIHNlcXVlbmNlIG9mCisgICAgKG5hbWUsIHZhbHVlKSB0dXBsZXMgdGhhdCB3aWxsIGJlIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlIGNhbGxhYmxlLgorICAgIGRlc2NyaXB0aW9uIGNhbiBiZSBwcm92aWRlZCB0byBkZXNjcmliZSB0aGUgZm9ybWF0LCBhbmQgd2lsbCBiZSByZXR1cm5lZAorICAgIGJ5IHRoZSBnZXRfdW5wYWNrX2Zvcm1hdHMoKSBmdW5jdGlvbi4KKyAgICAiIiIKKyAgICBpZiBleHRyYV9hcmdzIGlzIE5vbmU6CisgICAgICAgIGV4dHJhX2FyZ3MgPSBbXQorICAgIF9jaGVja191bnBhY2tfb3B0aW9ucyhleHRlbnNpb25zLCBmdW5jdGlvbiwgZXh0cmFfYXJncykKKyAgICBfVU5QQUNLX0ZPUk1BVFNbbmFtZV0gPSBleHRlbnNpb25zLCBmdW5jdGlvbiwgZXh0cmFfYXJncywgZGVzY3JpcHRpb24KKworZGVmIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdChuYW1lKToKKyAgICAiIiJSZW1vdmVzIHRoZSBwYWNrIGZvcm1hdCBmcm9tIHRoZSByZWdpc3RlcnkuIiIiCisgICAgZGVsIF9VTlBBQ0tfRk9STUFUU1tuYW1lXQorCitkZWYgX2Vuc3VyZV9kaXJlY3RvcnkocGF0aCk6CisgICAgIiIiRW5zdXJlIHRoYXQgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgYHBhdGhgIGV4aXN0cyIiIgorICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihkaXJuYW1lKToKKyAgICAgICAgb3MubWFrZWRpcnMoZGlybmFtZSkKKworZGVmIF91bnBhY2tfemlwZmlsZShmaWxlbmFtZSwgZXh0cmFjdF9kaXIpOgorICAgICIiIlVucGFjayB6aXAgYGZpbGVuYW1lYCB0byBgZXh0cmFjdF9kaXJgCisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgemlwZmlsZQorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcmFpc2UgUmVhZEVycm9yKCd6bGliIG5vdCBzdXBwb3J0ZWQsIGNhbm5vdCB1bnBhY2sgdGhpcyBhcmNoaXZlLicpCisKKyAgICBpZiBub3QgemlwZmlsZS5pc196aXBmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgcmFpc2UgUmVhZEVycm9yKCIlcyBpcyBub3QgYSB6aXAgZmlsZSIgJSBmaWxlbmFtZSkKKworICAgIHppcCA9IHppcGZpbGUuWmlwRmlsZShmaWxlbmFtZSkKKyAgICB0cnk6CisgICAgICAgIGZvciBpbmZvIGluIHppcC5pbmZvbGlzdCgpOgorICAgICAgICAgICAgbmFtZSA9IGluZm8uZmlsZW5hbWUKKworICAgICAgICAgICAgIyBkb24ndCBleHRyYWN0IGFic29sdXRlIHBhdGhzIG9yIG9uZXMgd2l0aCAuLiBpbiB0aGVtCisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy8nKSBvciAnLi4nIGluIG5hbWU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKGV4dHJhY3RfZGlyLCAqbmFtZS5zcGxpdCgnLycpKQorICAgICAgICAgICAgaWYgbm90IHRhcmdldDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBfZW5zdXJlX2RpcmVjdG9yeSh0YXJnZXQpCisgICAgICAgICAgICBpZiBub3QgbmFtZS5lbmRzd2l0aCgnLycpOgorICAgICAgICAgICAgICAgICMgZmlsZQorICAgICAgICAgICAgICAgIGRhdGEgPSB6aXAucmVhZChpbmZvLmZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGYgPSBvcGVuKHRhcmdldCwnd2InKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBkZWwgZGF0YQorICAgIGZpbmFsbHk6CisgICAgICAgIHppcC5jbG9zZSgpCisKK2RlZiBfdW5wYWNrX3RhcmZpbGUoZmlsZW5hbWUsIGV4dHJhY3RfZGlyKToKKyAgICAiIiJVbnBhY2sgdGFyL3Rhci5nei90YXIuYnoyIGBmaWxlbmFtZWAgdG8gYGV4dHJhY3RfZGlyYAorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgdGFyb2JqID0gdGFyZmlsZS5vcGVuKGZpbGVuYW1lKQorICAgIGV4Y2VwdCB0YXJmaWxlLlRhckVycm9yOgorICAgICAgICByYWlzZSBSZWFkRXJyb3IoCisgICAgICAgICAgICAiJXMgaXMgbm90IGEgY29tcHJlc3NlZCBvciB1bmNvbXByZXNzZWQgdGFyIGZpbGUiICUgZmlsZW5hbWUpCisgICAgdHJ5OgorICAgICAgICB0YXJvYmouZXh0cmFjdGFsbChleHRyYWN0X2RpcikKKyAgICBmaW5hbGx5OgorICAgICAgICB0YXJvYmouY2xvc2UoKQorCitfVU5QQUNLX0ZPUk1BVFMgPSB7CisgICAgJ2d6dGFyJzogKFsnLnRhci5neicsICcudGd6J10sIF91bnBhY2tfdGFyZmlsZSwgW10sICJnemlwJ2VkIHRhci1maWxlIiksCisgICAgJ3Rhcic6ICAgKFsnLnRhciddLCBfdW5wYWNrX3RhcmZpbGUsIFtdLCAidW5jb21wcmVzc2VkIHRhciBmaWxlIiksCisgICAgJ3ppcCc6ICAgKFsnLnppcCddLCBfdW5wYWNrX3ppcGZpbGUsIFtdLCAiWklQIGZpbGUiKQorICAgIH0KKworaWYgX0JaMl9TVVBQT1JURUQ6CisgICAgX1VOUEFDS19GT1JNQVRTWydienRhciddID0gKFsnLmJ6MiddLCBfdW5wYWNrX3RhcmZpbGUsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnppcDInZWQgdGFyLWZpbGUiKQorCitkZWYgX2ZpbmRfdW5wYWNrX2Zvcm1hdChmaWxlbmFtZSk6CisgICAgZm9yIG5hbWUsIGluZm8gaW4gX1VOUEFDS19GT1JNQVRTLml0ZW1zKCk6CisgICAgICAgIGZvciBleHRlbnNpb24gaW4gaW5mb1swXToKKyAgICAgICAgICAgIGlmIGZpbGVuYW1lLmVuZHN3aXRoKGV4dGVuc2lvbik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICByZXR1cm4gTm9uZQorCitkZWYgdW5wYWNrX2FyY2hpdmUoZmlsZW5hbWUsIGV4dHJhY3RfZGlyPU5vbmUsIGZvcm1hdD1Ob25lKToKKyAgICAiIiJVbnBhY2sgYW4gYXJjaGl2ZS4KKworICAgIGBmaWxlbmFtZWAgaXMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdmUuCisKKyAgICBgZXh0cmFjdF9kaXJgIGlzIHRoZSBuYW1lIG9mIHRoZSB0YXJnZXQgZGlyZWN0b3J5LCB3aGVyZSB0aGUgYXJjaGl2ZQorICAgIGlzIHVucGFja2VkLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIHVzZWQuCisKKyAgICBgZm9ybWF0YCBpcyB0aGUgYXJjaGl2ZSBmb3JtYXQ6IG9uZSBvZiAiemlwIiwgInRhciIsIG9yICJnenRhciIuIE9yIGFueQorICAgIG90aGVyIHJlZ2lzdGVyZWQgZm9ybWF0LiBJZiBub3QgcHJvdmlkZWQsIHVucGFja19hcmNoaXZlIHdpbGwgdXNlIHRoZQorICAgIGZpbGVuYW1lIGV4dGVuc2lvbiBhbmQgc2VlIGlmIGFuIHVucGFja2VyIHdhcyByZWdpc3RlcmVkIGZvciB0aGF0CisgICAgZXh0ZW5zaW9uLgorCisgICAgSW4gY2FzZSBub25lIGlzIGZvdW5kLCBhIFZhbHVlRXJyb3IgaXMgcmFpc2VkLgorICAgICIiIgorICAgIGlmIGV4dHJhY3RfZGlyIGlzIE5vbmU6CisgICAgICAgIGV4dHJhY3RfZGlyID0gb3MuZ2V0Y3dkKCkKKworICAgIGlmIGZvcm1hdCBpcyBub3QgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9ybWF0X2luZm8gPSBfVU5QQUNLX0ZPUk1BVFNbZm9ybWF0XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIHVucGFjayBmb3JtYXQgJ3swfSciLmZvcm1hdChmb3JtYXQpKQorCisgICAgICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1sxXQorICAgICAgICBmdW5jKGZpbGVuYW1lLCBleHRyYWN0X2RpciwgKipkaWN0KGZvcm1hdF9pbmZvWzJdKSkKKyAgICBlbHNlOgorICAgICAgICAjIHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVnaXN0ZXJlZCB1bnBhY2tlcnMgc3VwcG9ydGVkIGV4dGVuc2lvbnMKKyAgICAgICAgZm9ybWF0ID0gX2ZpbmRfdW5wYWNrX2Zvcm1hdChmaWxlbmFtZSkKKyAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoIlVua25vd24gYXJjaGl2ZSBmb3JtYXQgJ3swfSciLmZvcm1hdChmaWxlbmFtZSkpCisKKyAgICAgICAgZnVuYyA9IF9VTlBBQ0tfRk9STUFUU1tmb3JtYXRdWzFdCisgICAgICAgIGt3YXJncyA9IGRpY3QoX1VOUEFDS19GT1JNQVRTW2Zvcm1hdF1bMl0pCisgICAgICAgIGZ1bmMoZmlsZW5hbWUsIGV4dHJhY3RfZGlyLCAqKmt3YXJncykKZGlmZiAtLWdpdCBhL0xpYi9zaXRlLnB5IGIvTGliL3NpdGUucHkKaW5kZXggYTA0ODlmYS4uYTJjMGJlYyAxMDA2NDQKLS0tIGEvTGliL3NpdGUucHkKKysrIGIvTGliL3NpdGUucHkKQEAgLTYyLDcgKzYyLDEwIEBACiAjIEVuYWJsZSBwZXIgdXNlciBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeQogIyBzZXQgaXQgdG8gRmFsc2UgdG8gZGlzYWJsZSB0aGUgZmVhdHVyZSBvciBUcnVlIHRvIGZvcmNlIHRoZSBmZWF0dXJlCiBFTkFCTEVfVVNFUl9TSVRFID0gTm9uZQorCiAjIGZvciBkaXN0dXRpbHMuY29tbWFuZHMuaW5zdGFsbAorIyBUaGVzZSB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIGJ5IHRoZSBnZXR1c2VyYmFzZSgpIGFuZCBnZXR1c2Vyc2l0ZXBhY2thZ2VzKCkKKyMgZnVuY3Rpb25zLCB0aHJvdWdoIHRoZSBtYWluKCkgZnVuY3Rpb24gd2hlbiBQeXRob24gc3RhcnRzLgogVVNFUl9TSVRFID0gTm9uZQogVVNFUl9CQVNFID0gTm9uZQogCkBAIC03Niw4ICs3OSw4IEBACiAgICAgcmV0dXJuIGRpciwgb3MucGF0aC5ub3JtY2FzZShkaXIpCiAKIAotZGVmIGFic19fZmlsZV9fKCk6Ci0gICAgIiIiU2V0IGFsbCBtb2R1bGUnIF9fZmlsZV9fIGF0dHJpYnV0ZSB0byBhbiBhYnNvbHV0ZSBwYXRoIiIiCitkZWYgYWJzX3BhdGhzKCk6CisgICAgIiIiU2V0IGFsbCBtb2R1bGUgX19maWxlX18gYW5kIF9fY2FjaGVkX18gYXR0cmlidXRlcyB0byBhbiBhYnNvbHV0ZSBwYXRoIiIiCiAgICAgZm9yIG0gaW4gc2V0KHN5cy5tb2R1bGVzLnZhbHVlcygpKToKICAgICAgICAgaWYgaGFzYXR0cihtLCAnX19sb2FkZXJfXycpOgogICAgICAgICAgICAgY29udGludWUgICAjIGRvbid0IG1lc3Mgd2l0aCBhIFBFUCAzMDItc3VwcGxpZWQgX19maWxlX18KQEAgLTg1LDYgKzg4LDEwIEBACiAgICAgICAgICAgICBtLl9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKG0uX19maWxlX18pCiAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBtLl9fY2FjaGVkX18gPSBvcy5wYXRoLmFic3BhdGgobS5fX2NhY2hlZF9fKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKIAogCiBkZWYgcmVtb3ZlZHVwcGF0aHMoKToKQEAgLTEwNSwxOCArMTEyLDYgQEAKICAgICBzeXMucGF0aFs6XSA9IEwKICAgICByZXR1cm4ga25vd25fcGF0aHMKIAotIyBYWFggVGhpcyBzaG91bGQgbm90IGJlIHBhcnQgb2Ygc2l0ZS5weSwgc2luY2UgaXQgaXMgbmVlZGVkIGV2ZW4gd2hlbgotIyB1c2luZyB0aGUgLVMgb3B0aW9uIGZvciBQeXRob24uICBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3NmLzU4NjY4MAotZGVmIGFkZGJ1aWxkZGlyKCk6Ci0gICAgIiIiQXBwZW5kIC4vYnVpbGQvbGliLjxwbGF0Zm9ybT4gaW4gY2FzZSB3ZSdyZSBydW5uaW5nIGluIHRoZSBidWlsZCBkaXIKLSAgICAoZXNwZWNpYWxseSBmb3IgR3VpZG8gOi0pIiIiCi0gICAgZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCi0gICAgcyA9ICJidWlsZC9saWIuJXMtJS4zcyIgJSAoZ2V0X3BsYXRmb3JtKCksIHN5cy52ZXJzaW9uKQotICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpOgotICAgICAgICBzICs9ICctcHlkZWJ1ZycKLSAgICBzID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMucGF0aFstMV0pLCBzKQotICAgIHN5cy5wYXRoLmFwcGVuZChzKQotCiAKIGRlZiBfaW5pdF9wYXRoaW5mbygpOgogICAgICIiIlJldHVybiBhIHNldCBjb250YWluaW5nIGFsbCBleGlzdGluZyBkaXJlY3RvcnkgZW50cmllcyBmcm9tIHN5cy5wYXRoIiIiCkBAIC0yMTksODYgKzIxNCwxMDMgQEAKIAogICAgIHJldHVybiBUcnVlCiAKK2RlZiBnZXR1c2VyYmFzZSgpOgorICAgICIiIlJldHVybnMgdGhlIGB1c2VyIGJhc2VgIGRpcmVjdG9yeSBwYXRoLgorCisgICAgVGhlIGB1c2VyIGJhc2VgIGRpcmVjdG9yeSBjYW4gYmUgdXNlZCB0byBzdG9yZSBkYXRhLiBJZiB0aGUgZ2xvYmFsCisgICAgdmFyaWFibGUgYGBVU0VSX0JBU0VgYCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBzZXQKKyAgICBpdC4KKyAgICAiIiIKKyAgICBnbG9iYWwgVVNFUl9CQVNFCisgICAgaWYgVVNFUl9CQVNFIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gVVNFUl9CQVNFCisgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCisgICAgVVNFUl9CQVNFID0gZ2V0X2NvbmZpZ192YXIoJ3VzZXJiYXNlJykKKyAgICByZXR1cm4gVVNFUl9CQVNFCisKK2RlZiBnZXR1c2Vyc2l0ZXBhY2thZ2VzKCk6CisgICAgIiIiUmV0dXJucyB0aGUgdXNlci1zcGVjaWZpYyBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSBwYXRoLgorCisgICAgSWYgdGhlIGdsb2JhbCB2YXJpYWJsZSBgYFVTRVJfU0lURWBgIGlzIG5vdCBpbml0aWFsaXplZCB5ZXQsIHRoaXMKKyAgICBmdW5jdGlvbiB3aWxsIGFsc28gc2V0IGl0LgorICAgICIiIgorICAgIGdsb2JhbCBVU0VSX1NJVEUKKyAgICB1c2VyX2Jhc2UgPSBnZXR1c2VyYmFzZSgpICMgdGhpcyB3aWxsIGFsc28gc2V0IFVTRVJfQkFTRQorCisgICAgaWYgVVNFUl9TSVRFIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gVVNFUl9TSVRFCisKKyAgICBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X3BhdGgKKyAgICBpbXBvcnQgb3MKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCisgICAgICAgIGlmIGdldF9jb25maWdfdmFyKCdQWVRIT05GUkFNRVdPUksnKToKKyAgICAgICAgICAgIFVTRVJfU0lURSA9IGdldF9wYXRoKCdwdXJlbGliJywgJ29zeF9mcmFtZXdvcmtfdXNlcicpCisgICAgICAgICAgICByZXR1cm4gVVNFUl9TSVRFCisKKyAgICBVU0VSX1NJVEUgPSBnZXRfcGF0aCgncHVyZWxpYicsICclc191c2VyJyAlIG9zLm5hbWUpCisgICAgcmV0dXJuIFVTRVJfU0lURQogCiBkZWYgYWRkdXNlcnNpdGVwYWNrYWdlcyhrbm93bl9wYXRocyk6CiAgICAgIiIiQWRkIGEgcGVyIHVzZXIgc2l0ZS1wYWNrYWdlIHRvIHN5cy5wYXRoCiAKICAgICBFYWNoIHVzZXIgaGFzIGl0cyBvd24gcHl0aG9uIGRpcmVjdG9yeSB3aXRoIHNpdGUtcGFja2FnZXMgaW4gdGhlCiAgICAgaG9tZSBkaXJlY3RvcnkuCi0KLSAgICBVU0VSX0JBU0UgaXMgdGhlIHJvb3QgZGlyZWN0b3J5IGZvciBhbGwgUHl0aG9uIHZlcnNpb25zCi0KLSAgICBVU0VSX1NJVEUgaXMgdGhlIHVzZXIgc3BlY2lmaWMgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkKLQotICAgIFVTRVJfU0lURS8uLiBjYW4gYmUgdXNlZCBmb3IgZGF0YS4KICAgICAiIiIKLSAgICBnbG9iYWwgVVNFUl9CQVNFLCBVU0VSX1NJVEUsIEVOQUJMRV9VU0VSX1NJVEUKLSAgICBlbnZfYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05VU0VSQkFTRSIsIE5vbmUpCisgICAgIyBnZXQgdGhlIHBlciB1c2VyIHNpdGUtcGFja2FnZSBwYXRoCisgICAgIyB0aGlzIGNhbGwgd2lsbCBhbHNvIG1ha2Ugc3VyZSBVU0VSX0JBU0UgYW5kIFVTRVJfU0lURSBhcmUgc2V0CisgICAgdXNlcl9zaXRlID0gZ2V0dXNlcnNpdGVwYWNrYWdlcygpCiAKLSAgICBkZWYgam9pbnVzZXIoKmFyZ3MpOgotICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigqYXJncykpCi0KLSAgICAjaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICMgICAgIyBEb24ndCBrbm93IHdoYXQgdG8gcHV0IGhlcmUKLSAgICAjICAgIFVTRVJfQkFTRSA9ICcnCi0gICAgIyAgICBVU0VSX1NJVEUgPSAnJwotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJBUFBEQVRBIikgb3IgIn4iCi0gICAgICAgIFVTRVJfQkFTRSA9IGVudl9iYXNlIGlmIGVudl9iYXNlIGVsc2Ugam9pbnVzZXIoYmFzZSwgIlB5dGhvbiIpCi0gICAgICAgIFVTRVJfU0lURSA9IG9zLnBhdGguam9pbihVU0VSX0JBU0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIiArIHN5cy52ZXJzaW9uWzBdICsgc3lzLnZlcnNpb25bMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpCi0gICAgZWxzZToKLSAgICAgICAgVVNFUl9CQVNFID0gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcigifiIsICIubG9jYWwiKQotICAgICAgICBVU0VSX1NJVEUgPSBvcy5wYXRoLmpvaW4oVVNFUl9CQVNFLCAibGliIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpdGUtcGFja2FnZXMiKQotCi0gICAgaWYgRU5BQkxFX1VTRVJfU0lURSBhbmQgb3MucGF0aC5pc2RpcihVU0VSX1NJVEUpOgotICAgICAgICBhZGRzaXRlZGlyKFVTRVJfU0lURSwga25vd25fcGF0aHMpCisgICAgaWYgRU5BQkxFX1VTRVJfU0lURSBhbmQgb3MucGF0aC5pc2Rpcih1c2VyX3NpdGUpOgorICAgICAgICBhZGRzaXRlZGlyKHVzZXJfc2l0ZSwga25vd25fcGF0aHMpCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKK2RlZiBnZXRzaXRlcGFja2FnZXMoKToKKyAgICAiIiJSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIGFsbCBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcmllcworICAgIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pLgogCi1kZWYgYWRkc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKToKLSAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgotICAgIHNpdGVkaXJzID0gW10KLSAgICBzZWVuID0gW10KKyAgICBGb3IgZWFjaCBkaXJlY3RvcnkgcHJlc2VudCBpbiB0aGUgZ2xvYmFsIGBgUFJFRklYRVNgYCwgdGhpcyBmdW5jdGlvbgorICAgIHdpbGwgZmluZCBpdHMgYHNpdGUtcGFja2FnZXNgIHN1YmRpcmVjdG9yeSBkZXBlbmRpbmcgb24gdGhlIHN5c3RlbQorICAgIGVudmlyb25tZW50LCBhbmQgd2lsbCByZXR1cm4gYSBsaXN0IG9mIGZ1bGwgcGF0aHMuCisgICAgIiIiCisgICAgc2l0ZXBhY2thZ2VzID0gW10KKyAgICBzZWVuID0gc2V0KCkKIAogICAgIGZvciBwcmVmaXggaW4gUFJFRklYRVM6CiAgICAgICAgIGlmIG5vdCBwcmVmaXggb3IgcHJlZml4IGluIHNlZW46CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBzZWVuLmFwcGVuZChwcmVmaXgpCisgICAgICAgIHNlZW4uYWRkKHByZWZpeCkKIAogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgIkxpYiIsICJzaXRlLXBhY2thZ2VzIikpCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQogICAgICAgICBlbGlmIG9zLnNlcCA9PSAnLyc6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24iICsgc3lzLnZlcnNpb25bOjNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlLXBhY2thZ2VzIikpCi0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXB5dGhvbiIpKQorICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwgInNpdGUtcHl0aG9uIikpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQocHJlZml4KQotICAgICAgICAgICAgc2l0ZWRpcnMuYXBwZW5kKG9zLnBhdGguam9pbihwcmVmaXgsICJsaWIiLCAic2l0ZS1wYWNrYWdlcyIpKQotCisgICAgICAgICAgICBzaXRlcGFja2FnZXMuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQob3MucGF0aC5qb2luKHByZWZpeCwgImxpYiIsICJzaXRlLXBhY2thZ2VzIikpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgICMgZm9yIGZyYW1ld29yayBidWlsZHMgKm9ubHkqIHdlIGFkZCB0aGUgc3RhbmRhcmQgQXBwbGUKICAgICAgICAgICAgICMgbG9jYXRpb25zLgotICAgICAgICAgICAgaWYgJ1B5dGhvbi5mcmFtZXdvcmsnIGluIHByZWZpeDoKLSAgICAgICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbigifiIsICJMaWJyYXJ5IiwgIlB5dGhvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnZlcnNpb25bOjNdLCAic2l0ZS1wYWNrYWdlcyIpKSkKLSAgICAgICAgICAgICAgICBzaXRlZGlycy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIi9MaWJyYXJ5IiwgIlB5dGhvbiIsCisgICAgICAgICAgICBmcm9tIHN5c2NvbmZpZyBpbXBvcnQgZ2V0X2NvbmZpZ192YXIKKyAgICAgICAgICAgIGZyYW1ld29yayA9IGdldF9jb25maWdfdmFyKCJQWVRIT05GUkFNRVdPUksiKQorICAgICAgICAgICAgaWYgZnJhbWV3b3JrOgorICAgICAgICAgICAgICAgIHNpdGVwYWNrYWdlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oIi9MaWJyYXJ5IiwgZnJhbWV3b3JrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uWzozXSwgInNpdGUtcGFja2FnZXMiKSkKKyAgICByZXR1cm4gc2l0ZXBhY2thZ2VzCiAKLSAgICBmb3Igc2l0ZWRpciBpbiBzaXRlZGlyczoKK2RlZiBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpOgorICAgICIiIkFkZCBzaXRlLXBhY2thZ2VzIChhbmQgcG9zc2libHkgc2l0ZS1weXRob24pIHRvIHN5cy5wYXRoIiIiCisgICAgZm9yIHNpdGVkaXIgaW4gZ2V0c2l0ZXBhY2thZ2VzKCk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2l0ZWRpcik6CiAgICAgICAgICAgICBhZGRzaXRlZGlyKHNpdGVkaXIsIGtub3duX3BhdGhzKQogCiAgICAgcmV0dXJuIGtub3duX3BhdGhzCiAKLQogZGVmIHNldEJFR0lOTElCUEFUSCgpOgogICAgICIiIlRoZSBPUy8yIEVNWCBwb3J0IGhhcyBvcHRpb25hbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGRvIGRvdWJsZSBkdXR5CiAgICAgYXMgRExMcyAoYW5kIG11c3QgdXNlIHRoZSAuRExMIGZpbGUgZXh0ZW5zaW9uKSBmb3Igb3RoZXIgZXh0ZW5zaW9ucy4KQEAgLTMxNyw4ICszMjksMTAgQEAKIAogCiBkZWYgc2V0cXVpdCgpOgotICAgICIiIkRlZmluZSBuZXcgYnVpbHQtaW5zICdxdWl0JyBhbmQgJ2V4aXQnLgotICAgIFRoZXNlIGFyZSBzaW1wbHkgc3RyaW5ncyB0aGF0IGRpc3BsYXkgYSBoaW50IG9uIGhvdyB0byBleGl0LgorICAgICIiIkRlZmluZSBuZXcgYnVpbHRpbnMgJ3F1aXQnIGFuZCAnZXhpdCcuCisKKyAgICBUaGVzZSBhcmUgb2JqZWN0cyB3aGljaCBtYWtlIHRoZSBpbnRlcnByZXRlciBleGl0IHdoZW4gY2FsbGVkLgorICAgIFRoZSByZXByIG9mIGVhY2ggb2JqZWN0IGNvbnRhaW5zIGEgaGludCBhdCBob3cgaXQgd29ya3MuCiAKICAgICAiIiIKICAgICBpZiBvcy5zZXAgPT0gJzonOgpAQCAtNDMwLDcgKzQ0NCw3IEBACiAKIAogY2xhc3MgX0hlbHBlcihvYmplY3QpOgotICAgICIiIkRlZmluZSB0aGUgYnVpbHQtaW4gJ2hlbHAnLgorICAgICIiIkRlZmluZSB0aGUgYnVpbHRpbiAnaGVscCcuCiAgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgKHdpdGggYSB0d2lzdCkuCiAKICAgICAiIiIKQEAgLTQ2MCwyNSArNDc0LDYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuX2NhY2hlW2VuY10gPSBlbmNvZGluZ3MuX3Vua25vd24KICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzW2VuY10gPSAnbWJjcycKIAotZGVmIHNldGVuY29kaW5nKCk6Ci0gICAgIiIiU2V0IHRoZSBzdHJpbmcgZW5jb2RpbmcgdXNlZCBieSB0aGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbi4gIFRoZQotICAgIGRlZmF1bHQgaXMgJ2FzY2lpJywgYnV0IGlmIHlvdSdyZSB3aWxsaW5nIHRvIGV4cGVyaW1lbnQsIHlvdSBjYW4KLSAgICBjaGFuZ2UgdGhpcy4iIiIKLSAgICBlbmNvZGluZyA9ICJhc2NpaSIgIyBEZWZhdWx0IHZhbHVlIHNldCBieSBfUHlVbmljb2RlX0luaXQoKQotICAgIGlmIDA6Ci0gICAgICAgICMgRW5hYmxlIHRvIHN1cHBvcnQgbG9jYWxlIGF3YXJlIGRlZmF1bHQgc3RyaW5nIGVuY29kaW5ncy4KLSAgICAgICAgaW1wb3J0IGxvY2FsZQotICAgICAgICBsb2MgPSBsb2NhbGUuZ2V0ZGVmYXVsdGxvY2FsZSgpCi0gICAgICAgIGlmIGxvY1sxXToKLSAgICAgICAgICAgIGVuY29kaW5nID0gbG9jWzFdCi0gICAgaWYgMDoKLSAgICAgICAgIyBFbmFibGUgdG8gc3dpdGNoIG9mZiBzdHJpbmcgdG8gVW5pY29kZSBjb2VyY2lvbiBhbmQgaW1wbGljaXQKLSAgICAgICAgIyBVbmljb2RlIHRvIHN0cmluZyBjb252ZXJzaW9uLgotICAgICAgICBlbmNvZGluZyA9ICJ1bmRlZmluZWQiCi0gICAgaWYgZW5jb2RpbmcgIT0gImFzY2lpIjoKLSAgICAgICAgIyBPbiBOb24tVW5pY29kZSBidWlsZHMgdGhpcyB3aWxsIHJhaXNlIGFuIEF0dHJpYnV0ZUVycm9yLi4uCi0gICAgICAgIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoZW5jb2RpbmcpICMgTmVlZHMgUHl0aG9uIFVuaWNvZGUgYnVpbGQgIQotCiAKIGRlZiBleGVjc2l0ZWN1c3RvbWl6ZSgpOgogICAgICIiIlJ1biBjdXN0b20gc2l0ZSBzcGVjaWZpYyBjb2RlLCBpZiBhdmFpbGFibGUuIiIiCkBAIC01MTUsMTEgKzUxMCw4IEBACiBkZWYgbWFpbigpOgogICAgIGdsb2JhbCBFTkFCTEVfVVNFUl9TSVRFCiAKLSAgICBhYnNfX2ZpbGVfXygpCisgICAgYWJzX3BhdGhzKCkKICAgICBrbm93bl9wYXRocyA9IHJlbW92ZWR1cHBhdGhzKCkKLSAgICBpZiAob3MubmFtZSA9PSAicG9zaXgiIGFuZCBzeXMucGF0aCBhbmQKLSAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzeXMucGF0aFstMV0pID09ICJNb2R1bGVzIik6Ci0gICAgICAgIGFkZGJ1aWxkZGlyKCkKICAgICBpZiBFTkFCTEVfVVNFUl9TSVRFIGlzIE5vbmU6CiAgICAgICAgIEVOQUJMRV9VU0VSX1NJVEUgPSBjaGVja19lbmFibGV1c2Vyc2l0ZSgpCiAgICAga25vd25fcGF0aHMgPSBhZGR1c2Vyc2l0ZXBhY2thZ2VzKGtub3duX3BhdGhzKQpAQCAtNTMwLDE1ICs1MjIsOSBAQAogICAgIHNldGNvcHlyaWdodCgpCiAgICAgc2V0aGVscGVyKCkKICAgICBhbGlhc21iY3MoKQotICAgIHNldGVuY29kaW5nKCkKICAgICBleGVjc2l0ZWN1c3RvbWl6ZSgpCiAgICAgaWYgRU5BQkxFX1VTRVJfU0lURToKICAgICAgICAgZXhlY3VzZXJjdXN0b21pemUoKQotICAgICMgUmVtb3ZlIHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoKSBzbyB0aGF0IHVzZXJzIGNhbm5vdCBjaGFuZ2UgdGhlCi0gICAgIyBlbmNvZGluZyBhZnRlciBpbml0aWFsaXphdGlvbi4gIFRoZSB0ZXN0IGZvciBwcmVzZW5jZSBpcyBuZWVkZWQgd2hlbgotICAgICMgdGhpcyBtb2R1bGUgaXMgcnVuIGFzIGEgc2NyaXB0LCBiZWNhdXNlIHRoaXMgY29kZSBpcyBleGVjdXRlZCB0d2ljZS4KLSAgICBpZiBoYXNhdHRyKHN5cywgInNldGRlZmF1bHRlbmNvZGluZyIpOgotICAgICAgICBkZWwgc3lzLnNldGRlZmF1bHRlbmNvZGluZwogCiBtYWluKCkKIApkaWZmIC0tZ2l0IGEvTGliL3NtdHBkLnB5IGIvTGliL3NtdHBkLnB5CmluZGV4IGFiM2UwZTIuLjU5OWU3OWIgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwZC5weQorKysgYi9MaWIvc210cGQucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiQW4gUkZDIDI4MjEgc210cCBwcm94eS4KIAogVXNhZ2U6ICUocHJvZ3JhbSlzIFtvcHRpb25zXSBbbG9jYWxob3N0OmxvY2FscG9ydCBbcmVtb3RlaG9zdDpyZW1vdGVwb3J0XV0KQEAgLTU5LDcgKzU5LDYgQEAKICMgICBnZXRzIGZvcndhcmRlZCB0byBhIHJlYWwgYmFja2VuZCBzbXRwZCwgYXMgd2l0aCBQdXJlUHJveHkuICBBZ2FpbiwgZXJyb3JzCiAjICAgYXJlIG5vdCBoYW5kbGVkIGNvcnJlY3RseSB5ZXQuCiAjCi0jIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBzY3JpcHQgcmVxdWlyZXMgUHl0aG9uIDIuMAogIwogIyBBdXRob3I6IEJhcnJ5IFdhcnNhdyA8YmFycnlAcHl0aG9uLm9yZz4KICMKQEAgLTc4LDYgKzc3LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBhc3luY29yZQogaW1wb3J0IGFzeW5jaGF0Citmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuCiAKIF9fYWxsX18gPSBbIlNNVFBTZXJ2ZXIiLCJEZWJ1Z2dpbmdTZXJ2ZXIiLCJQdXJlUHJveHkiLCJNYWlsbWFuUHJveHkiXQogCkBAIC0xMDksMjAgKzEwOSwyNCBAQAogICAgIENPTU1BTkQgPSAwCiAgICAgREFUQSA9IDEKIAorICAgIGRhdGFfc2l6ZV9saW1pdCA9IDMzNTU0NDMyCisgICAgY29tbWFuZF9zaXplX2xpbWl0ID0gNTEyCisKICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uKQotICAgICAgICBzZWxmLl9fc2VydmVyID0gc2VydmVyCi0gICAgICAgIHNlbGYuX19jb25uID0gY29ubgotICAgICAgICBzZWxmLl9fYWRkciA9IGFkZHIKLSAgICAgICAgc2VsZi5fX2xpbmUgPSBbXQotICAgICAgICBzZWxmLl9fc3RhdGUgPSBzZWxmLkNPTU1BTkQKLSAgICAgICAgc2VsZi5fX2dyZWV0aW5nID0gMAotICAgICAgICBzZWxmLl9fbWFpbGZyb20gPSBOb25lCi0gICAgICAgIHNlbGYuX19yY3B0dG9zID0gW10KLSAgICAgICAgc2VsZi5fX2RhdGEgPSAnJwotICAgICAgICBzZWxmLl9fZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKKyAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgorICAgICAgICBzZWxmLmNvbm4gPSBjb25uCisgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKKyAgICAgICAgc2VsZi5yZWNlaXZlZF9saW5lcyA9IFtdCisgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAorICAgICAgICBzZWxmLnNlZW5fZ3JlZXRpbmcgPSAnJworICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQorICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQorICAgICAgICBzZWxmLnJlY2VpdmVkX2RhdGEgPSAnJworICAgICAgICBzZWxmLmZxZG4gPSBzb2NrZXQuZ2V0ZnFkbigpCisgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9fcGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQorICAgICAgICAgICAgc2VsZi5wZWVyID0gY29ubi5nZXRwZWVybmFtZSgpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCiAgICAgICAgICAgICAjIGJlZm9yZSB3ZSBjYW4gZ2V0IHRoZSBwZWVybmFtZQpAQCAtMTMwLDI0ICsxMzQsMTYwIEBACiAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHByaW50KCdQZWVyOicsIHJlcHIoc2VsZi5fX3BlZXIpLCBmaWxlPURFQlVHU1RSRUFNKQotICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5fX2ZxZG4sIF9fdmVyc2lvbl9fKSkKKyAgICAgICAgcHJpbnQoJ1BlZXI6JywgcmVwcihzZWxmLnBlZXIpLCBmaWxlPURFQlVHU1RSRUFNKQorICAgICAgICBzZWxmLnB1c2goJzIyMCAlcyAlcycgJSAoc2VsZi5mcWRuLCBfX3ZlcnNpb25fXykpCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKIAorICAgICMgcHJvcGVydGllcyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19zZXJ2ZXIoc2VsZik6CisgICAgICAgIHdhcm4oIkFjY2VzcyB0byBfX3NlcnZlciBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInVzZSAnc210cF9zZXJ2ZXInIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICByZXR1cm4gc2VsZi5zbXRwX3NlcnZlcgorICAgIEBfX3NlcnZlci5zZXR0ZXIKKyAgICBkZWYgX19zZXJ2ZXIoc2VsZiwgdmFsdWUpOgorICAgICAgICB3YXJuKCJTZXR0aW5nIF9fc2VydmVyIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAic2V0ICdzbXRwX3NlcnZlcicgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHNlbGYuc210cF9zZXJ2ZXIgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbGluZShzZWxmKToKKyAgICAgICAgd2FybigiQWNjZXNzIHRvIF9fbGluZSBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInVzZSAncmVjZWl2ZWRfbGluZXMnIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICByZXR1cm4gc2VsZi5yZWNlaXZlZF9saW5lcworICAgIEBfX2xpbmUuc2V0dGVyCisgICAgZGVmIF9fbGluZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdhcm4oIlNldHRpbmcgX19saW5lIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAic2V0ICdyZWNlaXZlZF9saW5lcycgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fc3RhdGUoc2VsZik6CisgICAgICAgIHdhcm4oIkFjY2VzcyB0byBfX3N0YXRlIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAidXNlICdzbXRwX3N0YXRlJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgcmV0dXJuIHNlbGYuc210cF9zdGF0ZQorICAgIEBfX3N0YXRlLnNldHRlcgorICAgIGRlZiBfX3N0YXRlKHNlbGYsIHZhbHVlKToKKyAgICAgICAgd2FybigiU2V0dGluZyBfX3N0YXRlIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAic2V0ICdzbXRwX3N0YXRlJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfX2dyZWV0aW5nKHNlbGYpOgorICAgICAgICB3YXJuKCJBY2Nlc3MgdG8gX19ncmVldGluZyBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInVzZSAnc2Vlbl9ncmVldGluZycgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHJldHVybiBzZWxmLnNlZW5fZ3JlZXRpbmcKKyAgICBAX19ncmVldGluZy5zZXR0ZXIKKyAgICBkZWYgX19ncmVldGluZyhzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdhcm4oIlNldHRpbmcgX19ncmVldGluZyBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInNldCAnc2Vlbl9ncmVldGluZycgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHNlbGYuc2Vlbl9ncmVldGluZyA9IHZhbHVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19tYWlsZnJvbShzZWxmKToKKyAgICAgICAgd2FybigiQWNjZXNzIHRvIF9fbWFpbGZyb20gYXR0cmlidXRlIG9uIFNNVFBDaGFubmVsIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICJ1c2UgJ21haWxmcm9tJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgcmV0dXJuIHNlbGYubWFpbGZyb20KKyAgICBAX19tYWlsZnJvbS5zZXR0ZXIKKyAgICBkZWYgX19tYWlsZnJvbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdhcm4oIlNldHRpbmcgX19tYWlsZnJvbSBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInNldCAnbWFpbGZyb20nIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICBzZWxmLm1haWxmcm9tID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfX3JjcHR0b3Moc2VsZik6CisgICAgICAgIHdhcm4oIkFjY2VzcyB0byBfX3JjcHR0b3MgYXR0cmlidXRlIG9uIFNNVFBDaGFubmVsIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICJ1c2UgJ3JjcHR0b3MnIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICByZXR1cm4gc2VsZi5yY3B0dG9zCisgICAgQF9fcmNwdHRvcy5zZXR0ZXIKKyAgICBkZWYgX19yY3B0dG9zKHNlbGYsIHZhbHVlKToKKyAgICAgICAgd2FybigiU2V0dGluZyBfX3JjcHR0b3MgYXR0cmlidXRlIG9uIFNNVFBDaGFubmVsIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICJzZXQgJ3JjcHR0b3MnIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICBzZWxmLnJjcHR0b3MgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fZGF0YShzZWxmKToKKyAgICAgICAgd2FybigiQWNjZXNzIHRvIF9fZGF0YSBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInVzZSAncmVjZWl2ZWRfZGF0YScgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHJldHVybiBzZWxmLnJlY2VpdmVkX2RhdGEKKyAgICBAX19kYXRhLnNldHRlcgorICAgIGRlZiBfX2RhdGEoc2VsZiwgdmFsdWUpOgorICAgICAgICB3YXJuKCJTZXR0aW5nIF9fZGF0YSBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInNldCAncmVjZWl2ZWRfZGF0YScgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9IHZhbHVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19mcWRuKHNlbGYpOgorICAgICAgICB3YXJuKCJBY2Nlc3MgdG8gX19mcWRuIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAidXNlICdmcWRuJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgcmV0dXJuIHNlbGYuZnFkbgorICAgIEBfX2ZxZG4uc2V0dGVyCisgICAgZGVmIF9fZnFkbihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdhcm4oIlNldHRpbmcgX19mcWRuIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAic2V0ICdmcWRuJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgc2VsZi5mcWRuID0gdmFsdWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfX3BlZXIoc2VsZik6CisgICAgICAgIHdhcm4oIkFjY2VzcyB0byBfX3BlZXIgYXR0cmlidXRlIG9uIFNNVFBDaGFubmVsIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICJ1c2UgJ3BlZXInIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICByZXR1cm4gc2VsZi5wZWVyCisgICAgQF9fcGVlci5zZXR0ZXIKKyAgICBkZWYgX19wZWVyKHNlbGYsIHZhbHVlKToKKyAgICAgICAgd2FybigiU2V0dGluZyBfX3BlZXIgYXR0cmlidXRlIG9uIFNNVFBDaGFubmVsIGlzIGRlcHJlY2F0ZWQsICIKKyAgICAgICAgICAgICJzZXQgJ3BlZXInIGluc3RlYWQiLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICBzZWxmLnBlZXIgPSB2YWx1ZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fY29ubihzZWxmKToKKyAgICAgICAgd2FybigiQWNjZXNzIHRvIF9fY29ubiBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInVzZSAnY29ubicgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHJldHVybiBzZWxmLmNvbm4KKyAgICBAX19jb25uLnNldHRlcgorICAgIGRlZiBfX2Nvbm4oc2VsZiwgdmFsdWUpOgorICAgICAgICB3YXJuKCJTZXR0aW5nIF9fY29ubiBhdHRyaWJ1dGUgb24gU01UUENoYW5uZWwgaXMgZGVwcmVjYXRlZCwgIgorICAgICAgICAgICAgInNldCAnY29ubicgaW5zdGVhZCIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgIHNlbGYuY29ubiA9IHZhbHVlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19hZGRyKHNlbGYpOgorICAgICAgICB3YXJuKCJBY2Nlc3MgdG8gX19hZGRyIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAidXNlICdhZGRyJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgcmV0dXJuIHNlbGYuYWRkcgorICAgIEBfX2FkZHIuc2V0dGVyCisgICAgZGVmIF9fYWRkcihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHdhcm4oIlNldHRpbmcgX19hZGRyIGF0dHJpYnV0ZSBvbiBTTVRQQ2hhbm5lbCBpcyBkZXByZWNhdGVkLCAiCisgICAgICAgICAgICAic2V0ICdhZGRyJyBpbnN0ZWFkIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgc2VsZi5hZGRyID0gdmFsdWUKKwogICAgICMgT3ZlcnJpZGVzIGJhc2UgY2xhc3MgZm9yIGNvbnZlbmllbmNlCiAgICAgZGVmIHB1c2goc2VsZiwgbXNnKToKICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5wdXNoKHNlbGYsIGJ5dGVzKG1zZyArICdcclxuJywgJ2FzY2lpJykpCiAKICAgICAjIEltcGxlbWVudGF0aW9uIG9mIGJhc2UgY2xhc3MgYWJzdHJhY3QgbWV0aG9kCiAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5fX2xpbmUuYXBwZW5kKHN0cihkYXRhLCAidXRmOCIpKQorICAgICAgICBsaW1pdCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5zbXRwX3N0YXRlID09IHNlbGYuQ09NTUFORDoKKyAgICAgICAgICAgIGxpbWl0ID0gc2VsZi5jb21tYW5kX3NpemVfbGltaXQKKyAgICAgICAgZWxpZiBzZWxmLnNtdHBfc3RhdGUgPT0gc2VsZi5EQVRBOgorICAgICAgICAgICAgbGltaXQgPSBzZWxmLmRhdGFfc2l6ZV9saW1pdAorICAgICAgICBpZiBsaW1pdCBhbmQgc2VsZi5udW1fYnl0ZXMgPiBsaW1pdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGxpbWl0OgorICAgICAgICAgICAgc2VsZi5udW1fYnl0ZXMgKz0gbGVuKGRhdGEpCisgICAgICAgIHNlbGYucmVjZWl2ZWRfbGluZXMuYXBwZW5kKHN0cihkYXRhLCAidXRmOCIpKQogCiAgICAgIyBJbXBsZW1lbnRhdGlvbiBvZiBiYXNlIGNsYXNzIGFic3RyYWN0IG1ldGhvZAogICAgIGRlZiBmb3VuZF90ZXJtaW5hdG9yKHNlbGYpOgotICAgICAgICBsaW5lID0gRU1QVFlTVFJJTkcuam9pbihzZWxmLl9fbGluZSkKKyAgICAgICAgbGluZSA9IEVNUFRZU1RSSU5HLmpvaW4oc2VsZi5yZWNlaXZlZF9saW5lcykKICAgICAgICAgcHJpbnQoJ0RhdGE6JywgcmVwcihsaW5lKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgc2VsZi5fX2xpbmUgPSBbXQotICAgICAgICBpZiBzZWxmLl9fc3RhdGUgPT0gc2VsZi5DT01NQU5EOgorICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KKyAgICAgICAgaWYgc2VsZi5zbXRwX3N0YXRlID09IHNlbGYuQ09NTUFORDoKKyAgICAgICAgICAgIGlmIHNlbGYubnVtX2J5dGVzID4gc2VsZi5jb21tYW5kX3NpemVfbGltaXQ6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDAgRXJyb3I6IGxpbmUgdG9vIGxvbmcnKQorICAgICAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5udW1fYnl0ZXMgPSAwCiAgICAgICAgICAgICBpZiBub3QgbGluZToKICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMCBFcnJvcjogYmFkIHN5bnRheCcpCiAgICAgICAgICAgICAgICAgcmV0dXJuCkBAIC0xNjYsOCArMzA2LDEzIEBACiAgICAgICAgICAgICBtZXRob2QoYXJnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLl9fc3RhdGUgIT0gc2VsZi5EQVRBOgorICAgICAgICAgICAgaWYgc2VsZi5zbXRwX3N0YXRlICE9IHNlbGYuREFUQToKICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzQ1MSBJbnRlcm5hbCBjb25mdXNpb24nKQorICAgICAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgaWYgc2VsZi5udW1fYnl0ZXMgPiBzZWxmLmRhdGFfc2l6ZV9saW1pdDoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzU1MiBFcnJvcjogVG9vIG11Y2ggbWFpbCBkYXRhJykKKyAgICAgICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgUmVtb3ZlIGV4dHJhbmVvdXMgY2FycmlhZ2UgcmV0dXJucyBhbmQgZGUtdHJhbnNwYXJlbmN5IGFjY29yZGluZwogICAgICAgICAgICAgIyB0byBSRkMgODIxLCBTZWN0aW9uIDQuNS4yLgpAQCAtMTc3LDE0ICszMjIsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQodGV4dFsxOl0pCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgZGF0YS5hcHBlbmQodGV4dCkKLSAgICAgICAgICAgIHNlbGYuX19kYXRhID0gTkVXTElORS5qb2luKGRhdGEpCi0gICAgICAgICAgICBzdGF0dXMgPSBzZWxmLl9fc2VydmVyLnByb2Nlc3NfbWVzc2FnZShzZWxmLl9fcGVlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19tYWlsZnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19yY3B0dG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2RhdGEpCi0gICAgICAgICAgICBzZWxmLl9fcmNwdHRvcyA9IFtdCi0gICAgICAgICAgICBzZWxmLl9fbWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLl9fc3RhdGUgPSBzZWxmLkNPTU1BTkQKKyAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9IE5FV0xJTkUuam9pbihkYXRhKQorICAgICAgICAgICAgc3RhdHVzID0gc2VsZi5zbXRwX3NlcnZlci5wcm9jZXNzX21lc3NhZ2Uoc2VsZi5wZWVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWlsZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmNwdHRvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSkKKyAgICAgICAgICAgIHNlbGYucmNwdHRvcyA9IFtdCisgICAgICAgICAgICBzZWxmLm1haWxmcm9tID0gTm9uZQorICAgICAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gc2VsZi5DT01NQU5ECisgICAgICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAgT2snKQpAQCAtMTk2LDExICszNDIsMTEgQEAKICAgICAgICAgaWYgbm90IGFyZzoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTAxIFN5bnRheDogSEVMTyBob3N0bmFtZScpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgc2VsZi5fX2dyZWV0aW5nOgorICAgICAgICBpZiBzZWxmLnNlZW5fZ3JlZXRpbmc6CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBEdXBsaWNhdGUgSEVMTy9FSExPJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX19ncmVldGluZyA9IGFyZwotICAgICAgICAgICAgc2VsZi5wdXNoKCcyNTAgJXMnICUgc2VsZi5fX2ZxZG4pCisgICAgICAgICAgICBzZWxmLnNlZW5fZ3JlZXRpbmcgPSBhcmcKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjUwICVzJyAlIHNlbGYuZnFkbikKIAogICAgIGRlZiBzbXRwX05PT1Aoc2VsZiwgYXJnKToKICAgICAgICAgaWYgYXJnOgpAQCAtMjMzLDI0ICszNzksMjQgQEAKICAgICAgICAgaWYgbm90IGFkZHJlc3M6CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMSBTeW50YXg6IE1BSUwgRlJPTTo8YWRkcmVzcz4nKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNlbGYuX19tYWlsZnJvbToKKyAgICAgICAgaWYgc2VsZi5tYWlsZnJvbToKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTAzIEVycm9yOiBuZXN0ZWQgTUFJTCBjb21tYW5kJykKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9fbWFpbGZyb20gPSBhZGRyZXNzCi0gICAgICAgIHByaW50KCdzZW5kZXI6Jywgc2VsZi5fX21haWxmcm9tLCBmaWxlPURFQlVHU1RSRUFNKQorICAgICAgICBzZWxmLm1haWxmcm9tID0gYWRkcmVzcworICAgICAgICBwcmludCgnc2VuZGVyOicsIHNlbGYubWFpbGZyb20sIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgIHNlbGYucHVzaCgnMjUwIE9rJykKIAogICAgIGRlZiBzbXRwX1JDUFQoc2VsZiwgYXJnKToKICAgICAgICAgcHJpbnQoJz09PT4gUkNQVCcsIGFyZywgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgaWYgbm90IHNlbGYuX19tYWlsZnJvbToKKyAgICAgICAgaWYgbm90IHNlbGYubWFpbGZyb206CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogbmVlZCBNQUlMIGNvbW1hbmQnKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGFkZHJlc3MgPSBzZWxmLl9fZ2V0YWRkcignVE86JywgYXJnKSBpZiBhcmcgZWxzZSBOb25lCiAgICAgICAgIGlmIG5vdCBhZGRyZXNzOgogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBSQ1BUIFRPOiA8YWRkcmVzcz4nKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX19yY3B0dG9zLmFwcGVuZChhZGRyZXNzKQotICAgICAgICBwcmludCgncmVjaXBzOicsIHNlbGYuX19yY3B0dG9zLCBmaWxlPURFQlVHU1RSRUFNKQorICAgICAgICBzZWxmLnJjcHR0b3MuYXBwZW5kKGFkZHJlc3MpCisgICAgICAgIHByaW50KCdyZWNpcHM6Jywgc2VsZi5yY3B0dG9zLCBmaWxlPURFQlVHU1RSRUFNKQogICAgICAgICBzZWxmLnB1c2goJzI1MCBPaycpCiAKICAgICBkZWYgc210cF9SU0VUKHNlbGYsIGFyZyk6CkBAIC0yNTgsMjYgKzQwNCwyOSBAQAogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBSU0VUJykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFJlc2V0cyB0aGUgc2VuZGVyLCByZWNpcGllbnRzLCBhbmQgZGF0YSwgYnV0IG5vdCB0aGUgZ3JlZXRpbmcKLSAgICAgICAgc2VsZi5fX21haWxmcm9tID0gTm9uZQotICAgICAgICBzZWxmLl9fcmNwdHRvcyA9IFtdCi0gICAgICAgIHNlbGYuX19kYXRhID0gJycKLSAgICAgICAgc2VsZi5fX3N0YXRlID0gc2VsZi5DT01NQU5ECisgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCisgICAgICAgIHNlbGYucmNwdHRvcyA9IFtdCisgICAgICAgIHNlbGYucmVjZWl2ZWRfZGF0YSA9ICcnCisgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAogICAgICAgICBzZWxmLnB1c2goJzI1MCBPaycpCiAKICAgICBkZWYgc210cF9EQVRBKHNlbGYsIGFyZyk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9fcmNwdHRvczoKKyAgICAgICAgaWYgbm90IHNlbGYucmNwdHRvczoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTAzIEVycm9yOiBuZWVkIFJDUFQgY29tbWFuZCcpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgaWYgYXJnOgogICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBEQVRBJykKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLl9fc3RhdGUgPSBzZWxmLkRBVEEKKyAgICAgICAgc2VsZi5zbXRwX3N0YXRlID0gc2VsZi5EQVRBCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuLlxyXG4nKQogICAgICAgICBzZWxmLnB1c2goJzM1NCBFbmQgZGF0YSB3aXRoIDxDUj48TEY+LjxDUj48TEY+JykKIAogCiAMCiBjbGFzcyBTTVRQU2VydmVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICMgU01UUENoYW5uZWwgY2xhc3MgdG8gdXNlIGZvciBtYW5hZ2luZyBjbGllbnQgY29ubmVjdGlvbnMKKyAgICBjaGFubmVsX2NsYXNzID0gU01UUENoYW5uZWwKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIpOgogICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBsb2NhbGFkZHIKICAgICAgICAgc2VsZi5fcmVtb3RlYWRkciA9IHJlbW90ZWFkZHIKQEAgLTI5NiwxMiArNDQ1LDkgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgdGltZS5jdGltZSh0aW1lLnRpbWUoKSksCiAgICAgICAgICAgICAgICAgbG9jYWxhZGRyLCByZW1vdGVhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKIAotICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgotICAgICAgICBwYWlyID0gc2VsZi5hY2NlcHQoKQotICAgICAgICBpZiBwYWlyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgY29ubiwgYWRkciA9IHBhaXIKLSAgICAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgICAgIGNoYW5uZWwgPSBTTVRQQ2hhbm5lbChzZWxmLCBjb25uLCBhZGRyKQorICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CisgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKKyAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyKQogCiAgICAgIyBBUEkgZm9yICJkb2luZyBzb21ldGhpbmcgdXNlZnVsIHdpdGggdGhlIG1lc3NhZ2UiCiAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CmRpZmYgLS1naXQgYS9MaWIvc210cGxpYi5weSBiL0xpYi9zbXRwbGliLnB5CmluZGV4IGEwMWExODQuLjE0ZTYyNTAgMTAwNzU1Ci0tLSBhL0xpYi9zbXRwbGliLnB5CisrKyBiL0xpYi9zbXRwbGliLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogJycnU01UUC9FU01UUCBjbGllbnQgY2xhc3MuCiAKQEAgLTQyLDIxICs0MiwyNSBAQAogIyBUaGlzIHdhcyBtb2RpZmllZCBmcm9tIHRoZSBQeXRob24gMS41IGxpYnJhcnkgSFRUUCBsaWIuCiAKIGltcG9ydCBzb2NrZXQKK2ltcG9ydCBpbwogaW1wb3J0IHJlCiBpbXBvcnQgZW1haWwudXRpbHMKK2ltcG9ydCBlbWFpbC5tZXNzYWdlCitpbXBvcnQgZW1haWwuZ2VuZXJhdG9yCiBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgaG1hYwogZnJvbSBlbWFpbC5iYXNlNjRtaW1lIGltcG9ydCBib2R5X2VuY29kZSBhcyBlbmNvZGVfYmFzZTY0CiBmcm9tIHN5cyBpbXBvcnQgc3RkZXJyCiAKLV9fYWxsX18gPSBbIlNNVFBFeGNlcHRpb24iLCJTTVRQU2VydmVyRGlzY29ubmVjdGVkIiwiU01UUFJlc3BvbnNlRXhjZXB0aW9uIiwKLSAgICAgICAgICAgIlNNVFBTZW5kZXJSZWZ1c2VkIiwiU01UUFJlY2lwaWVudHNSZWZ1c2VkIiwiU01UUERhdGFFcnJvciIsCi0gICAgICAgICAgICJTTVRQQ29ubmVjdEVycm9yIiwiU01UUEhlbG9FcnJvciIsIlNNVFBBdXRoZW50aWNhdGlvbkVycm9yIiwKLSAgICAgICAgICAgInF1b3RlYWRkciIsInF1b3RlZGF0YSIsIlNNVFAiXQorX19hbGxfXyA9IFsiU01UUEV4Y2VwdGlvbiIsICJTTVRQU2VydmVyRGlzY29ubmVjdGVkIiwgIlNNVFBSZXNwb25zZUV4Y2VwdGlvbiIsCisgICAgICAgICAgICJTTVRQU2VuZGVyUmVmdXNlZCIsICJTTVRQUmVjaXBpZW50c1JlZnVzZWQiLCAiU01UUERhdGFFcnJvciIsCisgICAgICAgICAgICJTTVRQQ29ubmVjdEVycm9yIiwgIlNNVFBIZWxvRXJyb3IiLCAiU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IiLAorICAgICAgICAgICAicXVvdGVhZGRyIiwgInF1b3RlZGF0YSIsICJTTVRQIl0KIAogU01UUF9QT1JUID0gMjUKIFNNVFBfU1NMX1BPUlQgPSA0NjUKLUNSTEY9IlxyXG4iCitDUkxGID0gIlxyXG4iCitiQ1JMRiA9IGIiXHJcbiIKIAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQogCkBAIC0xMDksNyArMTEzLDcgQEAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWNpcGllbnRzKToKICAgICAgICAgc2VsZi5yZWNpcGllbnRzID0gcmVjaXBpZW50cwotICAgICAgICBzZWxmLmFyZ3MgPSAoIHJlY2lwaWVudHMsKQorICAgICAgICBzZWxmLmFyZ3MgPSAocmVjaXBpZW50cywpCiAKIAogY2xhc3MgU01UUERhdGFFcnJvcihTTVRQUmVzcG9uc2VFeGNlcHRpb24pOgpAQCAtMTM4LDcgKzE0Miw3IEBACiAgICAgICAgIG0gPSBlbWFpbC51dGlscy5wYXJzZWFkZHIoYWRkcilbMV0KICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICBpZiBtID09IChOb25lLCBOb25lKTogIyBJbmRpY2F0ZXMgcGFyc2UgZmFpbHVyZSBvciBBdHRyaWJ1dGVFcnJvcgorICAgIGlmIG0gPT0gKE5vbmUsIE5vbmUpOiAgIyBJbmRpY2F0ZXMgcGFyc2UgZmFpbHVyZSBvciBBdHRyaWJ1dGVFcnJvcgogICAgICAgICAjIHNvbWV0aGluZyB3ZWlyZCBoZXJlLi4gcHVudCAtZGRtCiAgICAgICAgIHJldHVybiAiPCVzPiIgJSBhZGRyCiAgICAgZWxpZiBtIGlzIE5vbmU6CkBAIC0xNDcsNiArMTUxLDcgQEAKICAgICBlbHNlOgogICAgICAgICByZXR1cm4gIjwlcz4iICUgbQogCisjIExlZ2FjeSBtZXRob2Qga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIGRlZiBxdW90ZWRhdGEoZGF0YSk6CiAgICAgIiIiUXVvdGUgZGF0YSBmb3IgZW1haWwuCiAKQEAgLTE1Niw2ICsxNjEsMTIgQEAKICAgICByZXR1cm4gcmUuc3ViKHInKD9tKV5cLicsICcuLicsCiAgICAgICAgIHJlLnN1YihyJyg/OlxyXG58XG58XHIoPyFcbikpJywgQ1JMRiwgZGF0YSkpCiAKK2RlZiBfcXVvdGVfcGVyaW9kcyhiaW5kYXRhKToKKyAgICByZXR1cm4gcmUuc3ViKGJyJyg/bSleXC4nLCAnLi4nLCBiaW5kYXRhKQorCitkZWYgX2ZpeF9lb2xzKGRhdGEpOgorICAgIHJldHVybiAgcmUuc3ViKHInKD86XHJcbnxcbnxccig/IVxuKSknLCBDUkxGLCBkYXRhKQorCiB0cnk6CiAgICAgaW1wb3J0IHNzbAogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTc0LDcgKzE4NSw4IEBACiAgICAgICAgICAgICBjaHIgPSBOb25lCiAgICAgICAgICAgICB3aGlsZSBjaHIgIT0gYiJcbiI6CiAgICAgICAgICAgICAgICAgY2hyID0gc2VsZi5zc2xvYmoucmVhZCgxKQotICAgICAgICAgICAgICAgIGlmIG5vdCBjaHI6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGNocjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzdHIgKz0gY2hyCiAgICAgICAgICAgICByZXR1cm4gc3RyCiAKQEAgLTI2OSwxMCArMjgxLDExIEBACiAgICAgZGVmIF9nZXRfc29ja2V0KHNlbGYsIGhvc3QsIHBvcnQsIHRpbWVvdXQpOgogICAgICAgICAjIFRoaXMgbWFrZXMgaXQgc2ltcGxlciBmb3IgU01UUF9TU0wgdG8gdXNlIHRoZSBTTVRQIGNvbm5lY3QgY29kZQogICAgICAgICAjIGFuZCBqdXN0IGFsdGVyIHRoZSBzb2NrZXQgY29ubmVjdGlvbiBiaXQuCi0gICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQogICAgICAgICByZXR1cm4gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dCkKIAotICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQgPSAwKToKKyAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0PSdsb2NhbGhvc3QnLCBwb3J0PTApOgogICAgICAgICAiIiJDb25uZWN0IHRvIGEgaG9zdCBvbiBhIGdpdmVuIHBvcnQuCiAKICAgICAgICAgSWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCBhIGNvbG9uIChgOicpIGZvbGxvd2VkIGJ5IGEgbnVtYmVyLCBhbmQKQEAgLTI4NiwyMCArMjk5LDI1IEBACiAgICAgICAgIGlmIG5vdCBwb3J0IGFuZCAoaG9zdC5maW5kKCc6JykgPT0gaG9zdC5yZmluZCgnOicpKToKICAgICAgICAgICAgIGkgPSBob3N0LnJmaW5kKCc6JykKICAgICAgICAgICAgIGlmIGkgPj0gMDoKLSAgICAgICAgICAgICAgICBob3N0LCBwb3J0ID0gaG9zdFs6aV0sIGhvc3RbaSsxOl0KLSAgICAgICAgICAgICAgICB0cnk6IHBvcnQgPSBpbnQocG9ydCkKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0ID0gaG9zdFs6aV0sIGhvc3RbaSArIDE6XQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGludChwb3J0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIm5vbm51bWVyaWMgcG9ydCIpCi0gICAgICAgIGlmIG5vdCBwb3J0OiBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQoJ2Nvbm5lY3Q6JywgKGhvc3QsIHBvcnQpLCBmaWxlPXN0ZGVycikKKyAgICAgICAgaWYgbm90IHBvcnQ6CisgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgIHByaW50KCdjb25uZWN0OicsIChob3N0LCBwb3J0KSwgZmlsZT1zdGRlcnIpCiAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2dldF9zb2NrZXQoaG9zdCwgcG9ydCwgc2VsZi50aW1lb3V0KQogICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgiY29ubmVjdDoiLCBtc2csIGZpbGU9c3RkZXJyKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQoImNvbm5lY3Q6IiwgbXNnLCBmaWxlPXN0ZGVycikKICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgc2VuZChzZWxmLCBzKToKICAgICAgICAgIiIiU2VuZCBgcycgdG8gdGhlIHNlcnZlci4iIiIKLSAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDogcHJpbnQoJ3NlbmQ6JywgcmVwcihzKSwgZmlsZT1zdGRlcnIpCisgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICBwcmludCgnc2VuZDonLCByZXByKHMpLCBmaWxlPXN0ZGVycikKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnc29jaycpIGFuZCBzZWxmLnNvY2s6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHMsIHN0cik6CiAgICAgICAgICAgICAgICAgcyA9IHMuZW5jb2RlKCJhc2NpaSIpCkBAIC0zMzIsNyArMzUwLDcgQEAKIAogICAgICAgICBSYWlzZXMgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBpZiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkLgogICAgICAgICAiIiIKLSAgICAgICAgcmVzcD1bXQorICAgICAgICByZXNwID0gW10KICAgICAgICAgaWYgc2VsZi5maWxlIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgd2hpbGUgMToKQEAgLTM0Myw5ICszNjEsMTAgQEAKICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZCIpCi0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgncmVwbHk6JywgcmVwcihsaW5lKSwgZmlsZT1zdGRlcnIpCisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHByaW50KCdyZXBseTonLCByZXByKGxpbmUpLCBmaWxlPXN0ZGVycikKICAgICAgICAgICAgIHJlc3AuYXBwZW5kKGxpbmVbNDpdLnN0cmlwKGInIFx0XHJcbicpKQotICAgICAgICAgICAgY29kZT1saW5lWzozXQorICAgICAgICAgICAgY29kZSA9IGxpbmVbOjNdCiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGVycm9yIGNvZGUgaXMgc3ludGFjdGljYWxseSBjb3JyZWN0LgogICAgICAgICAgICAgIyBEb24ndCBhdHRlbXB0IHRvIHJlYWQgYSBjb250aW51YXRpb24gbGluZSBpZiBpdCBpcyBicm9rZW4uCiAgICAgICAgICAgICB0cnk6CkBAIC0zNTksMTIgKzM3OCwxMiBAQAogCiAgICAgICAgIGVycm1zZyA9IGIiXG4iLmpvaW4ocmVzcCkKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKLSAgICAgICAgICAgIHByaW50KCdyZXBseTogcmV0Y29kZSAoJXMpOyBNc2c6ICVzJyAlIChlcnJjb2RlLGVycm1zZyksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgcHJpbnQoJ3JlcGx5OiByZXRjb2RlICglcyk7IE1zZzogJXMnICUgKGVycmNvZGUsIGVycm1zZyksIGZpbGU9c3RkZXJyKQogICAgICAgICByZXR1cm4gZXJyY29kZSwgZXJybXNnCiAKICAgICBkZWYgZG9jbWQoc2VsZiwgY21kLCBhcmdzPSIiKToKICAgICAgICAgIiIiU2VuZCBhIGNvbW1hbmQsIGFuZCByZXR1cm4gaXRzIHJlc3BvbnNlIGNvZGUuIiIiCi0gICAgICAgIHNlbGYucHV0Y21kKGNtZCxhcmdzKQorICAgICAgICBzZWxmLnB1dGNtZChjbWQsIGFyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmLmdldHJlcGx5KCkKIAogICAgICMgc3RkIHNtdHAgY29tbWFuZHMKQEAgLTM3NCw5ICszOTMsOSBAQAogICAgICAgICBob3N0LgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5wdXRjbWQoImhlbG8iLCBuYW1lIG9yIHNlbGYubG9jYWxfaG9zdG5hbWUpCi0gICAgICAgIChjb2RlLG1zZyk9c2VsZi5nZXRyZXBseSgpCi0gICAgICAgIHNlbGYuaGVsb19yZXNwPW1zZwotICAgICAgICByZXR1cm4gKGNvZGUsbXNnKQorICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQorICAgICAgICBzZWxmLmhlbG9fcmVzcCA9IG1zZworICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKIAogICAgIGRlZiBlaGxvKHNlbGYsIG5hbWU9JycpOgogICAgICAgICAiIiIgU01UUCAnZWhsbycgY29tbWFuZC4KQEAgLTM4NSwyMCArNDA0LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmVzbXRwX2ZlYXR1cmVzID0ge30KICAgICAgICAgc2VsZi5wdXRjbWQoc2VsZi5laGxvX21zZywgbmFtZSBvciBzZWxmLmxvY2FsX2hvc3RuYW1lKQotICAgICAgICAoY29kZSxtc2cpPXNlbGYuZ2V0cmVwbHkoKQorICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQogICAgICAgICAjIEFjY29yZGluZyB0byBSRkMxODY5IHNvbWUgKGJhZGx5IHdyaXR0ZW4pCiAgICAgICAgICMgTVRBJ3Mgd2lsbCBkaXNjb25uZWN0IG9uIGFuIGVobG8uIFRvc3MgYW4gZXhjZXB0aW9uIGlmCiAgICAgICAgICMgdGhhdCBoYXBwZW5zIC1kZG0KICAgICAgICAgaWYgY29kZSA9PSAtMSBhbmQgbGVuKG1zZykgPT0gMDoKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgiU2VydmVyIG5vdCBjb25uZWN0ZWQiKQotICAgICAgICBzZWxmLmVobG9fcmVzcD1tc2cKKyAgICAgICAgc2VsZi5laGxvX3Jlc3AgPSBtc2cKICAgICAgICAgaWYgY29kZSAhPSAyNTA6Ci0gICAgICAgICAgICByZXR1cm4gKGNvZGUsbXNnKQotICAgICAgICBzZWxmLmRvZXNfZXNtdHA9MQorICAgICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCisgICAgICAgIHNlbGYuZG9lc19lc210cCA9IDEKICAgICAgICAgI3BhcnNlIHRoZSBlaGxvIHJlc3BvbnNlIC1kZG0KICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZi5laGxvX3Jlc3AsIGJ5dGVzKSwgcmVwcihzZWxmLmVobG9fcmVzcCkKLSAgICAgICAgcmVzcD1zZWxmLmVobG9fcmVzcC5kZWNvZGUoImxhdGluLTEiKS5zcGxpdCgnXG4nKQorICAgICAgICByZXNwID0gc2VsZi5laGxvX3Jlc3AuZGVjb2RlKCJsYXRpbi0xIikuc3BsaXQoJ1xuJykKICAgICAgICAgZGVsIHJlc3BbMF0KICAgICAgICAgZm9yIGVhY2ggaW4gcmVzcDoKICAgICAgICAgICAgICMgVG8gYmUgYWJsZSB0byBjb21tdW5pY2F0ZSB3aXRoIGFzIG1hbnkgU01UUCBzZXJ2ZXJzIGFzIHBvc3NpYmxlLApAQCAtNDE4LDE2ICs0MzcsMTYgQEAKICAgICAgICAgICAgICMgSXQncyBhY3R1YWxseSBzdHJpY3RlciwgaW4gdGhhdCBvbmx5IHNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuCiAgICAgICAgICAgICAjIHBhcmFtZXRlcnMsIGJ1dCB3ZXJlIG5vdCBnb2luZyB0byBjaGVjayBmb3IgdGhhdCBoZXJlLiAgTm90ZQogICAgICAgICAgICAgIyB0aGF0IHRoZSBzcGFjZSBpc24ndCBwcmVzZW50IGlmIHRoZXJlIGFyZSBubyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgbT1yZS5tYXRjaChyJyg/UDxmZWF0dXJlPltBLVphLXowLTldW0EtWmEtejAtOVwtXSopID8nLGVhY2gpCisgICAgICAgICAgICBtID0gcmUubWF0Y2gocicoP1A8ZmVhdHVyZT5bQS1aYS16MC05XVtBLVphLXowLTlcLV0qKSA/JywgZWFjaCkKICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgZmVhdHVyZT1tLmdyb3VwKCJmZWF0dXJlIikubG93ZXIoKQotICAgICAgICAgICAgICAgIHBhcmFtcz1tLnN0cmluZ1ttLmVuZCgiZmVhdHVyZSIpOl0uc3RyaXAoKQorICAgICAgICAgICAgICAgIGZlYXR1cmUgPSBtLmdyb3VwKCJmZWF0dXJlIikubG93ZXIoKQorICAgICAgICAgICAgICAgIHBhcmFtcyA9IG0uc3RyaW5nW20uZW5kKCJmZWF0dXJlIik6XS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYgZmVhdHVyZSA9PSAiYXV0aCI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXNbZmVhdHVyZV0gPSBzZWxmLmVzbXRwX2ZlYXR1cmVzLmdldChmZWF0dXJlLCAiIikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAiICsgcGFyYW1zCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlc1tmZWF0dXJlXT1wYXJhbXMKLSAgICAgICAgcmV0dXJuIChjb2RlLG1zZykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlc1tmZWF0dXJlXSA9IHBhcmFtcworICAgICAgICByZXR1cm4gKGNvZGUsIG1zZykKIAogICAgIGRlZiBoYXNfZXh0bihzZWxmLCBvcHQpOgogICAgICAgICAiIiJEb2VzIHRoZSBzZXJ2ZXIgc3VwcG9ydCBhIGdpdmVuIFNNVFAgc2VydmljZSBleHRlbnNpb24/IiIiCkBAIC00NDcsNTEgKzQ2Niw1NyBAQAogICAgICAgICAiIiJTTVRQICdub29wJyBjb21tYW5kIC0tIGRvZXNuJ3QgZG8gYW55dGhpbmcgOj4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuZG9jbWQoIm5vb3AiKQogCi0gICAgZGVmIG1haWwoc2VsZixzZW5kZXIsb3B0aW9ucz1bXSk6CisgICAgZGVmIG1haWwoc2VsZiwgc2VuZGVyLCBvcHRpb25zPVtdKToKICAgICAgICAgIiIiU01UUCAnbWFpbCcgY29tbWFuZCAtLSBiZWdpbnMgbWFpbCB4ZmVyIHNlc3Npb24uIiIiCiAgICAgICAgIG9wdGlvbmxpc3QgPSAnJwogICAgICAgICBpZiBvcHRpb25zIGFuZCBzZWxmLmRvZXNfZXNtdHA6CiAgICAgICAgICAgICBvcHRpb25saXN0ID0gJyAnICsgJyAnLmpvaW4ob3B0aW9ucykKLSAgICAgICAgc2VsZi5wdXRjbWQoIm1haWwiLCAiRlJPTTolcyVzIiAlIChxdW90ZWFkZHIoc2VuZGVyKSAsb3B0aW9ubGlzdCkpCisgICAgICAgIHNlbGYucHV0Y21kKCJtYWlsIiwgIkZST006JXMlcyIgJSAocXVvdGVhZGRyKHNlbmRlciksIG9wdGlvbmxpc3QpKQogICAgICAgICByZXR1cm4gc2VsZi5nZXRyZXBseSgpCiAKLSAgICBkZWYgcmNwdChzZWxmLHJlY2lwLG9wdGlvbnM9W10pOgorICAgIGRlZiByY3B0KHNlbGYsIHJlY2lwLCBvcHRpb25zPVtdKToKICAgICAgICAgIiIiU01UUCAncmNwdCcgY29tbWFuZCAtLSBpbmRpY2F0ZXMgMSByZWNpcGllbnQgZm9yIHRoaXMgbWFpbC4iIiIKICAgICAgICAgb3B0aW9ubGlzdCA9ICcnCiAgICAgICAgIGlmIG9wdGlvbnMgYW5kIHNlbGYuZG9lc19lc210cDoKICAgICAgICAgICAgIG9wdGlvbmxpc3QgPSAnICcgKyAnICcuam9pbihvcHRpb25zKQotICAgICAgICBzZWxmLnB1dGNtZCgicmNwdCIsIlRPOiVzJXMiICUgKHF1b3RlYWRkcihyZWNpcCksb3B0aW9ubGlzdCkpCisgICAgICAgIHNlbGYucHV0Y21kKCJyY3B0IiwgIlRPOiVzJXMiICUgKHF1b3RlYWRkcihyZWNpcCksIG9wdGlvbmxpc3QpKQogICAgICAgICByZXR1cm4gc2VsZi5nZXRyZXBseSgpCiAKLSAgICBkZWYgZGF0YShzZWxmLG1zZyk6CisgICAgZGVmIGRhdGEoc2VsZiwgbXNnKToKICAgICAgICAgIiIiU01UUCAnREFUQScgY29tbWFuZCAtLSBzZW5kcyBtZXNzYWdlIGRhdGEgdG8gc2VydmVyLgogCiAgICAgICAgIEF1dG9tYXRpY2FsbHkgcXVvdGVzIGxpbmVzIGJlZ2lubmluZyB3aXRoIGEgcGVyaW9kIHBlciByZmM4MjEuCiAgICAgICAgIFJhaXNlcyBTTVRQRGF0YUVycm9yIGlmIHRoZXJlIGlzIGFuIHVuZXhwZWN0ZWQgcmVwbHkgdG8gdGhlCiAgICAgICAgIERBVEEgY29tbWFuZDsgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIGlzIHRoZSBmaW5hbAotICAgICAgICByZXNwb25zZSBjb2RlIHJlY2VpdmVkIHdoZW4gdGhlIGFsbCBkYXRhIGlzIHNlbnQuCisgICAgICAgIHJlc3BvbnNlIGNvZGUgcmVjZWl2ZWQgd2hlbiB0aGUgYWxsIGRhdGEgaXMgc2VudC4gIElmIG1zZworICAgICAgICBpcyBhIHN0cmluZywgbG9uZSAnXHInIGFuZCAnXG4nIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCB0bworICAgICAgICAnXHJcbicgY2hhcmFjdGVycy4gIElmIG1zZyBpcyBieXRlcywgaXQgaXMgdHJhbnNtaXR0ZWQgYXMgaXMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLnB1dGNtZCgiZGF0YSIpCi0gICAgICAgIChjb2RlLHJlcGwpPXNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPjAgOiBwcmludCgiZGF0YToiLCAoY29kZSxyZXBsKSwgZmlsZT1zdGRlcnIpCisgICAgICAgIChjb2RlLCByZXBsKSA9IHNlbGYuZ2V0cmVwbHkoKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQoImRhdGE6IiwgKGNvZGUsIHJlcGwpLCBmaWxlPXN0ZGVycikKICAgICAgICAgaWYgY29kZSAhPSAzNTQ6Ci0gICAgICAgICAgICByYWlzZSBTTVRQRGF0YUVycm9yKGNvZGUscmVwbCkKKyAgICAgICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3IoY29kZSwgcmVwbCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHEgPSBxdW90ZWRhdGEobXNnKQotICAgICAgICAgICAgaWYgcVstMjpdICE9IENSTEY6Ci0gICAgICAgICAgICAgICAgcSA9IHEgKyBDUkxGCi0gICAgICAgICAgICBxID0gcSArICIuIiArIENSTEYKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobXNnLCBzdHIpOgorICAgICAgICAgICAgICAgIG1zZyA9IF9maXhfZW9scyhtc2cpLmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgcSA9IF9xdW90ZV9wZXJpb2RzKG1zZykKKyAgICAgICAgICAgIGlmIHFbLTI6XSAhPSBiQ1JMRjoKKyAgICAgICAgICAgICAgICBxID0gcSArIGJDUkxGCisgICAgICAgICAgICBxID0gcSArIGIiLiIgKyBiQ1JMRgogICAgICAgICAgICAgc2VsZi5zZW5kKHEpCi0gICAgICAgICAgICAoY29kZSxtc2cpPXNlbGYuZ2V0cmVwbHkoKQotICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4wIDogcHJpbnQoImRhdGE6IiwgKGNvZGUsbXNnKSwgZmlsZT1zdGRlcnIpCi0gICAgICAgICAgICByZXR1cm4gKGNvZGUsbXNnKQorICAgICAgICAgICAgKGNvZGUsIG1zZykgPSBzZWxmLmdldHJlcGx5KCkKKyAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CisgICAgICAgICAgICAgICAgcHJpbnQoImRhdGE6IiwgKGNvZGUsIG1zZyksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKICAgICBkZWYgdmVyaWZ5KHNlbGYsIGFkZHJlc3MpOgogICAgICAgICAiIiJTTVRQICd2ZXJpZnknIGNvbW1hbmQgLS0gY2hlY2tzIGZvciBhZGRyZXNzIHZhbGlkaXR5LiIiIgogICAgICAgICBzZWxmLnB1dGNtZCgidnJmeSIsIHF1b3RlYWRkcihhZGRyZXNzKSkKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0cmVwbHkoKQogICAgICMgYS5rLmEuCi0gICAgdnJmeT12ZXJpZnkKKyAgICB2cmZ5ID0gdmVyaWZ5CiAKICAgICBkZWYgZXhwbihzZWxmLCBhZGRyZXNzKToKICAgICAgICAgIiIiU01UUCAnZXhwbicgY29tbWFuZCAtLSBleHBhbmRzIGEgbWFpbGluZyBsaXN0LiIiIgpAQCAtNTQ5LDcgKzU3NCw2IEBACiAgICAgICAgICAgICBzID0gIlwwJXNcMCVzIiAlICh1c2VyLCBwYXNzd29yZCkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVfYmFzZTY0KHMuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCiAKLQogICAgICAgICBBVVRIX1BMQUlOID0gIlBMQUlOIgogICAgICAgICBBVVRIX0NSQU1fTUQ1ID0gIkNSQU0tTUQ1IgogICAgICAgICBBVVRIX0xPR0lOID0gIkxPR0lOIgpAQCAtNTU5LDQ1ICs1ODMsNDYgQEAKICAgICAgICAgaWYgbm90IHNlbGYuaGFzX2V4dG4oImF1dGgiKToKICAgICAgICAgICAgIHJhaXNlIFNNVFBFeGNlcHRpb24oIlNNVFAgQVVUSCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuIikKIAotICAgICAgICAjIEF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhlIHNlcnZlciBzdXBwb3J0czoKLSAgICAgICAgYXV0aGxpc3QgPSBzZWxmLmVzbXRwX2ZlYXR1cmVzWyJhdXRoIl0uc3BsaXQoKQorICAgICAgICAjIEF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhlIHNlcnZlciBjbGFpbXMgdG8gc3VwcG9ydAorICAgICAgICBhZHZlcnRpc2VkX2F1dGhsaXN0ID0gc2VsZi5lc210cF9mZWF0dXJlc1siYXV0aCJdLnNwbGl0KCkKIAogICAgICAgICAjIExpc3Qgb2YgYXV0aGVudGljYXRpb24gbWV0aG9kcyB3ZSBzdXBwb3J0OiBmcm9tIHByZWZlcnJlZCB0bwogICAgICAgICAjIGxlc3MgcHJlZmVycmVkIG1ldGhvZHMuIEV4Y2VwdCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGVzdGluZyB0aGUgd2Vha2VyCiAgICAgICAgICMgb25lcywgd2UgcHJlZmVyIHN0cm9uZ2VyIG1ldGhvZHMgbGlrZSBDUkFNLU1ENToKICAgICAgICAgcHJlZmVycmVkX2F1dGhzID0gW0FVVEhfQ1JBTV9NRDUsIEFVVEhfUExBSU4sIEFVVEhfTE9HSU5dCiAKLSAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB3ZSdsbCB1c2UKLSAgICAgICAgYXV0aG1ldGhvZCA9IE5vbmUKLSAgICAgICAgZm9yIG1ldGhvZCBpbiBwcmVmZXJyZWRfYXV0aHM6Ci0gICAgICAgICAgICBpZiBtZXRob2QgaW4gYXV0aGxpc3Q6Ci0gICAgICAgICAgICAgICAgYXV0aG1ldGhvZCA9IG1ldGhvZAotICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgaWYgYXV0aG1ldGhvZCA9PSBBVVRIX0NSQU1fTUQ1OgotICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kb2NtZCgiQVVUSCIsIEFVVEhfQ1JBTV9NRDUpCi0gICAgICAgICAgICBpZiBjb2RlID09IDUwMzoKLSAgICAgICAgICAgICAgICAjIDUwMyA9PSAnRXJyb3I6IGFscmVhZHkgYXV0aGVudGljYXRlZCcKLSAgICAgICAgICAgICAgICByZXR1cm4gKGNvZGUsIHJlc3ApCi0gICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKGVuY29kZV9jcmFtX21kNShyZXNwLCB1c2VyLCBwYXNzd29yZCkpCi0gICAgICAgIGVsaWYgYXV0aG1ldGhvZCA9PSBBVVRIX1BMQUlOOgotICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kb2NtZCgiQVVUSCIsCi0gICAgICAgICAgICAgICAgQVVUSF9QTEFJTiArICIgIiArIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCkpCi0gICAgICAgIGVsaWYgYXV0aG1ldGhvZCA9PSBBVVRIX0xPR0lOOgotICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kb2NtZCgiQVVUSCIsCi0gICAgICAgICAgICAgICAgIiVzICVzIiAlIChBVVRIX0xPR0lOLCBlbmNvZGVfYmFzZTY0KHVzZXIuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpKSkKLSAgICAgICAgICAgIGlmIGNvZGUgIT0gMzM0OgotICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBBdXRoZW50aWNhdGlvbkVycm9yKGNvZGUsIHJlc3ApCi0gICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKGVuY29kZV9iYXNlNjQocGFzc3dvcmQuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpKQotICAgICAgICBlbGlmIGF1dGhtZXRob2QgaXMgTm9uZToKKyAgICAgICAgIyBXZSB0cnkgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhlIHNlcnZlciBhZHZlcnRpc2VzLCBidXQgb25seSB0aGUKKyAgICAgICAgIyBvbmVzICp3ZSogc3VwcG9ydC4gQW5kIGluIG91ciBwcmVmZXJyZWQgb3JkZXIuCisgICAgICAgIGF1dGhsaXN0ID0gW2F1dGggZm9yIGF1dGggaW4gcHJlZmVycmVkX2F1dGhzIGlmIGF1dGggaW4gYWR2ZXJ0aXNlZF9hdXRobGlzdF0KKyAgICAgICAgaWYgbm90IGF1dGhsaXN0OgogICAgICAgICAgICAgcmFpc2UgU01UUEV4Y2VwdGlvbigiTm8gc3VpdGFibGUgYXV0aGVudGljYXRpb24gbWV0aG9kIGZvdW5kLiIpCi0gICAgICAgIGlmIGNvZGUgbm90IGluICgyMzUsIDUwMyk6CisKKyAgICAgICAgIyBTb21lIHNlcnZlcnMgYWR2ZXJ0aXNlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgdGhleSBkb24ndCByZWFsbHkKKyAgICAgICAgIyBzdXBwb3J0LCBzbyBpZiBhdXRoZW50aWNhdGlvbiBmYWlscywgd2UgY29udGludWUgdW50aWwgd2UndmUgdHJpZWQKKyAgICAgICAgIyBhbGwgbWV0aG9kcy4KKyAgICAgICAgZm9yIGF1dGhtZXRob2QgaW4gYXV0aGxpc3Q6CisgICAgICAgICAgICBpZiBhdXRobWV0aG9kID09IEFVVEhfQ1JBTV9NRDU6CisgICAgICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kb2NtZCgiQVVUSCIsIEFVVEhfQ1JBTV9NRDUpCisgICAgICAgICAgICAgICAgaWYgY29kZSA9PSAzMzQ6CisgICAgICAgICAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoZW5jb2RlX2NyYW1fbWQ1KHJlc3AsIHVzZXIsIHBhc3N3b3JkKSkKKyAgICAgICAgICAgIGVsaWYgYXV0aG1ldGhvZCA9PSBBVVRIX1BMQUlOOgorICAgICAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoIkFVVEgiLAorICAgICAgICAgICAgICAgICAgICBBVVRIX1BMQUlOICsgIiAiICsgZW5jb2RlX3BsYWluKHVzZXIsIHBhc3N3b3JkKSkKKyAgICAgICAgICAgIGVsaWYgYXV0aG1ldGhvZCA9PSBBVVRIX0xPR0lOOgorICAgICAgICAgICAgICAgIChjb2RlLCByZXNwKSA9IHNlbGYuZG9jbWQoIkFVVEgiLAorICAgICAgICAgICAgICAgICAgICAiJXMgJXMiICUgKEFVVEhfTE9HSU4sIGVuY29kZV9iYXNlNjQodXNlci5lbmNvZGUoJ2FzY2lpJyksIGVvbD0nJykpKQorICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gMzM0OgorICAgICAgICAgICAgICAgICAgICAoY29kZSwgcmVzcCkgPSBzZWxmLmRvY21kKGVuY29kZV9iYXNlNjQocGFzc3dvcmQuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpKQorCiAgICAgICAgICAgICAjIDIzNSA9PSAnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCcKICAgICAgICAgICAgICMgNTAzID09ICdFcnJvcjogYWxyZWFkeSBhdXRoZW50aWNhdGVkJwotICAgICAgICAgICAgcmFpc2UgU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IoY29kZSwgcmVzcCkKLSAgICAgICAgcmV0dXJuIChjb2RlLCByZXNwKQorICAgICAgICAgICAgaWYgY29kZSBpbiAoMjM1LCA1MDMpOgorICAgICAgICAgICAgICAgIHJldHVybiAoY29kZSwgcmVzcCkKIAotICAgIGRlZiBzdGFydHRscyhzZWxmLCBrZXlmaWxlID0gTm9uZSwgY2VydGZpbGUgPSBOb25lKToKKyAgICAgICAgIyBXZSBjb3VsZCBub3QgbG9naW4gc3VjZXNzZnVsbHkuIFJldHVybiByZXN1bHQgb2YgbGFzdCBhdHRlbXB0LgorICAgICAgICByYWlzZSBTTVRQQXV0aGVudGljYXRpb25FcnJvcihjb2RlLCByZXNwKQorCisgICAgZGVmIHN0YXJ0dGxzKHNlbGYsIGtleWZpbGU9Tm9uZSwgY2VydGZpbGU9Tm9uZSk6CiAgICAgICAgICIiIlB1dHMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFNNVFAgc2VydmVyIGludG8gVExTIG1vZGUuCiAKICAgICAgICAgSWYgdGhlcmUgaGFzIGJlZW4gbm8gcHJldmlvdXMgRUhMTyBvciBIRUxPIGNvbW1hbmQgdGhpcyBzZXNzaW9uLCB0aGlzCkBAIC02NDcsNiArNjcyLDEwIEBACiAgICAgICAgICAgICAtIHJjcHRfb3B0aW9ucyA6IExpc3Qgb2YgRVNNVFAgb3B0aW9ucyAoc3VjaCBhcyBEU04gY29tbWFuZHMpIGZvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgdGhlIHJjcHQgY29tbWFuZHMuCiAKKyAgICAgICAgbXNnIG1heSBiZSBhIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgaW4gdGhlIEFTQ0lJIHJhbmdlLCBvciBhIGJ5dGUKKyAgICAgICAgc3RyaW5nLiAgQSBzdHJpbmcgaXMgZW5jb2RlZCB0byBieXRlcyB1c2luZyB0aGUgYXNjaWkgY29kZWMsIGFuZCBsb25lCisgICAgICAgIFxyIGFuZCBcbiBjaGFyYWN0ZXJzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbiBjaGFyYWN0ZXJzLgorCiAgICAgICAgIElmIHRoZXJlIGhhcyBiZWVuIG5vIHByZXZpb3VzIEVITE8gb3IgSEVMTyBjb21tYW5kIHRoaXMgc2Vzc2lvbiwgdGhpcwogICAgICAgICBtZXRob2QgdHJpZXMgRVNNVFAgRUhMTyBmaXJzdC4gIElmIHRoZSBzZXJ2ZXIgZG9lcyBFU01UUCwgbWVzc2FnZSBzaXplCiAgICAgICAgIGFuZCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgb3B0aW9ucyB3aWxsIGJlIHBhc3NlZCB0byBpdC4gIElmIEVITE8KQEAgLTY5Miw2ICs3MjEsOCBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5laGxvX29yX2hlbG9faWZfbmVlZGVkKCkKICAgICAgICAgZXNtdHBfb3B0cyA9IFtdCisgICAgICAgIGlmIGlzaW5zdGFuY2UobXNnLCBzdHIpOgorICAgICAgICAgICAgbXNnID0gX2ZpeF9lb2xzKG1zZykuZW5jb2RlKCdhc2NpaScpCiAgICAgICAgIGlmIHNlbGYuZG9lc19lc210cDoKICAgICAgICAgICAgICMgSG1tbT8gd2hhdCdzIHRoaXM/IC1kZG0KICAgICAgICAgICAgICMgc2VsZi5lc210cF9mZWF0dXJlc1snN2JpdCddPSIiCkBAIC02OTksMjkgKzczMCw1NCBAQAogICAgICAgICAgICAgICAgIGVzbXRwX29wdHMuYXBwZW5kKCJzaXplPSVkIiAlIGxlbihtc2cpKQogICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBtYWlsX29wdGlvbnM6CiAgICAgICAgICAgICAgICAgZXNtdHBfb3B0cy5hcHBlbmQob3B0aW9uKQotCi0gICAgICAgIChjb2RlLHJlc3ApID0gc2VsZi5tYWlsKGZyb21fYWRkciwgZXNtdHBfb3B0cykKKyAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5tYWlsKGZyb21fYWRkciwgZXNtdHBfb3B0cykKICAgICAgICAgaWYgY29kZSAhPSAyNTA6CiAgICAgICAgICAgICBzZWxmLnJzZXQoKQogICAgICAgICAgICAgcmFpc2UgU01UUFNlbmRlclJlZnVzZWQoY29kZSwgcmVzcCwgZnJvbV9hZGRyKQotICAgICAgICBzZW5kZXJycz17fQorICAgICAgICBzZW5kZXJycyA9IHt9CiAgICAgICAgIGlmIGlzaW5zdGFuY2UodG9fYWRkcnMsIHN0cik6CiAgICAgICAgICAgICB0b19hZGRycyA9IFt0b19hZGRyc10KICAgICAgICAgZm9yIGVhY2ggaW4gdG9fYWRkcnM6Ci0gICAgICAgICAgICAoY29kZSxyZXNwKT1zZWxmLnJjcHQoZWFjaCwgcmNwdF9vcHRpb25zKQorICAgICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5yY3B0KGVhY2gsIHJjcHRfb3B0aW9ucykKICAgICAgICAgICAgIGlmIChjb2RlICE9IDI1MCkgYW5kIChjb2RlICE9IDI1MSk6Ci0gICAgICAgICAgICAgICAgc2VuZGVycnNbZWFjaF09KGNvZGUscmVzcCkKLSAgICAgICAgaWYgbGVuKHNlbmRlcnJzKT09bGVuKHRvX2FkZHJzKToKKyAgICAgICAgICAgICAgICBzZW5kZXJyc1tlYWNoXSA9IChjb2RlLCByZXNwKQorICAgICAgICBpZiBsZW4oc2VuZGVycnMpID09IGxlbih0b19hZGRycyk6CiAgICAgICAgICAgICAjIHRoZSBzZXJ2ZXIgcmVmdXNlZCBhbGwgb3VyIHJlY2lwaWVudHMKICAgICAgICAgICAgIHNlbGYucnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQUmVjaXBpZW50c1JlZnVzZWQoc2VuZGVycnMpCi0gICAgICAgIChjb2RlLHJlc3ApID0gc2VsZi5kYXRhKG1zZykKKyAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kYXRhKG1zZykKICAgICAgICAgaWYgY29kZSAhPSAyNTA6CiAgICAgICAgICAgICBzZWxmLnJzZXQoKQogICAgICAgICAgICAgcmFpc2UgU01UUERhdGFFcnJvcihjb2RlLCByZXNwKQogICAgICAgICAjaWYgd2UgZ290IGhlcmUgdGhlbiBzb21lYm9keSBnb3Qgb3VyIG1haWwKICAgICAgICAgcmV0dXJuIHNlbmRlcnJzCiAKKyAgICBkZWYgc2VuZF9tZXNzYWdlKHNlbGYsIG1zZywgZnJvbV9hZGRyPU5vbmUsIHRvX2FkZHJzPU5vbmUsCisgICAgICAgICAgICAgICAgbWFpbF9vcHRpb25zPVtdLCByY3B0X29wdGlvbnM9e30pOgorICAgICAgICAiIiJDb252ZXJ0cyBtZXNzYWdlIHRvIGEgYnl0ZXN0cmluZyBhbmQgcGFzc2VzIGl0IHRvIHNlbmRtYWlsLgorCisgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIGFzIGZvciBzZW5kbWFpbCwgZXhjZXB0IHRoYXQgbXNnIGlzIGFuCisgICAgICAgIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSBvYmplY3QuICBJZiBmcm9tX2FkZHIgaXMgTm9uZSwgdGhlIGZyb21fYWRkciBpcworICAgICAgICB0YWtlbiBmcm9tIHRoZSAnRnJvbScgaGVhZGVyIG9mIHRoZSBNZXNzYWdlLiAgSWYgdG9fYWRkcnMgaXMgTm9uZSwgaXRzCisgICAgICAgIHZhbHVlIGlzIGNvbXBvc2VkIGZyb20gdGhlIGFkZHJlc3NlcyBsaXN0ZWQgaW4gdGhlICdUbycsICdDQycsIGFuZAorICAgICAgICAnQmNjJyBmaWVsZHMuICBSZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZXMgb2YgZnJvbV9hZGRyIGFuZCB0b19hZGRyLCBhbnkKKyAgICAgICAgQmNjIGZpZWxkIGluIHRoZSBNZXNzYWdlIG9iamVjdCBpcyBkZWxldGVkLiAgVGhlIE1lc3NhZ2Ugb2JqZWN0IGlzIHRoZW4KKyAgICAgICAgc2VyaWFsaXplZCB1c2luZyBlbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3IgYW5kIHNlbmRtYWlsIGlzIGNhbGxlZAorICAgICAgICB0byB0cmFuc21pdCB0aGUgbWVzc2FnZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGZyb21fYWRkciBpcyBOb25lOgorICAgICAgICAgICAgZnJvbV9hZGRyID0gbXNnWydGcm9tJ10KKyAgICAgICAgaWYgdG9fYWRkcnMgaXMgTm9uZToKKyAgICAgICAgICAgIGFkZHJfZmllbGRzID0gW2YgZm9yIGYgaW4gKG1zZ1snVG8nXSwgbXNnWydCY2MnXSwgbXNnWydDQyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmVdCisgICAgICAgICAgICB0b19hZGRycyA9IFthWzFdIGZvciBhIGluIGVtYWlsLnV0aWxzLmdldGFkZHJlc3NlcyhhZGRyX2ZpZWxkcyldCisgICAgICAgIGRlbCBtc2dbJ0JjYyddCisgICAgICAgIHdpdGggaW8uQnl0ZXNJTygpIGFzIGJ5dGVzbXNnOgorICAgICAgICAgICAgZyA9IGVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcihieXRlc21zZykKKyAgICAgICAgICAgIGcuZmxhdHRlbihtc2csIGxpbmVzZXA9J1xyXG4nKQorICAgICAgICAgICAgZmxhdG1zZyA9IGJ5dGVzbXNnLmdldHZhbHVlKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc2VuZG1haWwoZnJvbV9hZGRyLCB0b19hZGRycywgZmxhdG1zZywgbWFpbF9vcHRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByY3B0X29wdGlvbnMpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIKQEAgLTczMiw3ICs3ODgsNiBAQAogICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQogCi0KICAgICBkZWYgcXVpdChzZWxmKToKICAgICAgICAgIiIiVGVybWluYXRlIHRoZSBTTVRQIHNlc3Npb24uIiIiCiAgICAgICAgIHJlcyA9IHNlbGYuZG9jbWQoInF1aXQiKQpAQCAtNzU4LDcgKzgxMyw4IEBACiAgICAgICAgICAgICBzZWxmLmRlZmF1bHRfcG9ydCA9IFNNVFBfU1NMX1BPUlQKIAogICAgICAgICBkZWYgX2dldF9zb2NrZXQoc2VsZiwgaG9zdCwgcG9ydCwgdGltZW91dCk6Ci0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQpCiAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KG5ld19zb2NrZXQsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IFNTTEZha2VGaWxlKG5ld19zb2NrZXQpCkBAIC03ODYsMTEgKzg0MiwxMSBAQAogCiAgICAgZWhsb19tc2cgPSAibGhsbyIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0ID0gJycsIHBvcnQgPSBMTVRQX1BPUlQsIGxvY2FsX2hvc3RuYW1lID0gTm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHBvcnQ9TE1UUF9QT1JULCBsb2NhbF9ob3N0bmFtZT1Ob25lKToKICAgICAgICAgIiIiSW5pdGlhbGl6ZSBhIG5ldyBpbnN0YW5jZS4iIiIKICAgICAgICAgU01UUC5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCBsb2NhbF9ob3N0bmFtZSkKIAotICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3QgPSAnbG9jYWxob3N0JywgcG9ydCA9IDApOgorICAgIGRlZiBjb25uZWN0KHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9MCk6CiAgICAgICAgICIiIkNvbm5lY3QgdG8gdGhlIExNVFAgZGFlbW9uLCBvbiBlaXRoZXIgYSBVbml4IG9yIGEgVENQIHNvY2tldC4iIiIKICAgICAgICAgaWYgaG9zdFswXSAhPSAnLyc6CiAgICAgICAgICAgICByZXR1cm4gU01UUC5jb25uZWN0KHNlbGYsIGhvc3QsIHBvcnQpCkBAIC04MDAsMTMgKzg1NiwxNSBAQAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoaG9zdCkKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgnY29ubmVjdCBmYWlsOicsIGhvc3QsIGZpbGU9c3RkZXJyKQorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKKyAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdCBmYWlsOicsIGhvc3QsIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IobXNnKQogICAgICAgICAoY29kZSwgbXNnKSA9IHNlbGYuZ2V0cmVwbHkoKQotICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgnY29ubmVjdDonLCBtc2csIGZpbGU9c3RkZXJyKQorICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgorICAgICAgICAgICAgcHJpbnQoJ2Nvbm5lY3Q6JywgbXNnLCBmaWxlPXN0ZGVycikKICAgICAgICAgcmV0dXJuIChjb2RlLCBtc2cpCiAKIApAQCAtODIwLDcgKzg3OCw3IEBACiAgICAgICAgIHJldHVybiBzeXMuc3RkaW4ucmVhZGxpbmUoKS5zdHJpcCgpCiAKICAgICBmcm9tYWRkciA9IHByb21wdCgiRnJvbSIpCi0gICAgdG9hZGRycyAgPSBwcm9tcHQoIlRvIikuc3BsaXQoJywnKQorICAgIHRvYWRkcnMgPSBwcm9tcHQoIlRvIikuc3BsaXQoJywnKQogICAgIHByaW50KCJFbnRlciBtZXNzYWdlLCBlbmQgd2l0aCBeRDoiKQogICAgIG1zZyA9ICcnCiAgICAgd2hpbGUgMToKZGlmZiAtLWdpdCBhL0xpYi9zb2NrZXQucHkgYi9MaWIvc29ja2V0LnB5CmluZGV4IGQwMzUwNjEuLjFlMjg1NDkgMTAwNjQ0Ci0tLSBhL0xpYi9zb2NrZXQucHkKKysrIGIvTGliL3NvY2tldC5weQpAQCAtMjMsNyArMjMsOCBAQAogaW5ldF9udG9hKCkgLS0gY29udmVydCAzMi1iaXQgcGFja2VkIGZvcm1hdCBJUCB0byBzdHJpbmcgKDEyMy40NS42Ny44OSkKIHNvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIC0tIGdldCB0aGUgZGVmYXVsdCB0aW1lb3V0IHZhbHVlCiBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoKSAtLSBzZXQgdGhlIGRlZmF1bHQgdGltZW91dCB2YWx1ZQotY3JlYXRlX2Nvbm5lY3Rpb24oKSAtLSBjb25uZWN0cyB0byBhbiBhZGRyZXNzLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQKK2NyZWF0ZV9jb25uZWN0aW9uKCkgLS0gY29ubmVjdHMgdG8gYW4gYWRkcmVzcywgd2l0aCBhbiBvcHRpb25hbCB0aW1lb3V0IGFuZAorICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCBzb3VyY2UgYWRkcmVzcy4KIAogIFsqXSBub3QgYXZhaWxhYmxlIG9uIGFsbCBwbGF0Zm9ybXMhCiAKQEAgLTQ4LDkgKzQ5LDEzIEBACiBpbXBvcnQgb3MsIHN5cywgaW8KIAogdHJ5OgotICAgIGZyb20gZXJybm8gaW1wb3J0IEVCQURGCisgICAgaW1wb3J0IGVycm5vCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgRUJBREYgPSA5CisgICAgZXJybm8gPSBOb25lCitFQkFERiA9IGdldGF0dHIoZXJybm8sICdFQkFERicsIDkpCitFSU5UUiA9IGdldGF0dHIoZXJybm8sICdFSU5UUicsIDQpCitFQUdBSU4gPSBnZXRhdHRyKGVycm5vLCAnRUFHQUlOJywgMTEpCitFV09VTERCTE9DSyA9IGdldGF0dHIoZXJybm8sICdFV09VTERCTE9DSycsIDExKQogCiBfX2FsbF9fID0gWyJnZXRmcWRuIiwgImNyZWF0ZV9jb25uZWN0aW9uIl0KIF9fYWxsX18uZXh0ZW5kKG9zLl9nZXRfZXhwb3J0c19saXN0KF9zb2NrZXQpKQpAQCAtOTAsMTMgKzk1LDIwIEBACiAgICAgICAgIHNlbGYuX2lvX3JlZnMgPSAwCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJXcmFwIF9fcmVwcl9fKCkgdG8gcmV2ZWFsIHRoZSByZWFsIGNsYXNzIG5hbWUuIiIiCiAgICAgICAgIHMgPSBfc29ja2V0LnNvY2tldC5fX3JlcHJfXyhzZWxmKQogICAgICAgICBpZiBzLnN0YXJ0c3dpdGgoIjxzb2NrZXQgb2JqZWN0Iik6CiAgICAgICAgICAgICBzID0gIjwlcy4lcyVzJXMiICUgKHNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5fY2xvc2VkIGFuZCAiIFtjbG9zZWRdICIpIG9yICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKHNlbGYsICdfY2xvc2VkJywgRmFsc2UpIGFuZCAiIFtjbG9zZWRdICIgb3IgIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbNzpdKQogICAgICAgICByZXR1cm4gcwogCkBAIC0xMTgsNyArMTMwLDEzIEBACiAgICAgICAgIEZvciBJUCBzb2NrZXRzLCB0aGUgYWRkcmVzcyBpbmZvIGlzIGEgcGFpciAoaG9zdGFkZHIsIHBvcnQpLgogICAgICAgICAiIiIKICAgICAgICAgZmQsIGFkZHIgPSBzZWxmLl9hY2NlcHQoKQotICAgICAgICByZXR1cm4gc29ja2V0KHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCksIGFkZHIKKyAgICAgICAgc29jayA9IHNvY2tldChzZWxmLmZhbWlseSwgc2VsZi50eXBlLCBzZWxmLnByb3RvLCBmaWxlbm89ZmQpCisgICAgICAgICMgSXNzdWUgIzc5OTU6IGlmIG5vIGRlZmF1bHQgdGltZW91dCBpcyBzZXQgYW5kIHRoZSBsaXN0ZW5pbmcKKyAgICAgICAgIyBzb2NrZXQgaGFkIGEgKG5vbi16ZXJvKSB0aW1lb3V0LCBmb3JjZSB0aGUgbmV3IHNvY2tldCBpbiBibG9ja2luZworICAgICAgICAjIG1vZGUgdG8gb3ZlcnJpZGUgcGxhdGZvcm0tc3BlY2lmaWMgc29ja2V0IGZsYWdzIGluaGVyaXRhbmNlLgorICAgICAgICBpZiBnZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUgYW5kIHNlbGYuZ2V0dGltZW91dCgpOgorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhUcnVlKQorICAgICAgICByZXR1cm4gc29jaywgYWRkcgogCiAgICAgZGVmIG1ha2VmaWxlKHNlbGYsIG1vZGU9InIiLCBidWZmZXJpbmc9Tm9uZSwgKiwKICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPU5vbmUsIG5ld2xpbmU9Tm9uZSk6CkBAIC0xNjksMTAgKzE4NywxMiBAQAogICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKIAotICAgIGRlZiBfcmVhbF9jbG9zZShzZWxmKToKLSAgICAgICAgX3NvY2tldC5zb2NrZXQuY2xvc2Uoc2VsZikKKyAgICBkZWYgX3JlYWxfY2xvc2Uoc2VsZiwgX3NzPV9zb2NrZXQuc29ja2V0KToKKyAgICAgICAgIyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgcmVmZXJlbmNlIGFueSBnbG9iYWxzLiBTZWUgaXNzdWUgIzgwODE2NC4KKyAgICAgICAgX3NzLmNsb3NlKHNlbGYpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICMgVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IHJlZmVyZW5jZSBhbnkgZ2xvYmFscy4gU2VlIGlzc3VlICM4MDgxNjQuCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKICAgICAgICAgaWYgc2VsZi5faW9fcmVmcyA8PSAwOgogICAgICAgICAgICAgc2VsZi5fcmVhbF9jbG9zZSgpCkBAIC0xODcsNiArMjA3LDI5IEBACiAgICAgcmV0dXJuIHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvLCBuZmQpCiAKIAoraWYgaGFzYXR0cihfc29ja2V0LCAic29ja2V0cGFpciIpOgorCisgICAgZGVmIHNvY2tldHBhaXIoZmFtaWx5PU5vbmUsIHR5cGU9U09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICAiIiJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KQorCisgICAgICAgIENyZWF0ZSBhIHBhaXIgb2Ygc29ja2V0IG9iamVjdHMgZnJvbSB0aGUgc29ja2V0cyByZXR1cm5lZCBieSB0aGUgcGxhdGZvcm0KKyAgICAgICAgc29ja2V0cGFpcigpIGZ1bmN0aW9uLgorICAgICAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3Igc29ja2V0KCkgZXhjZXB0IHRoZSBkZWZhdWx0IGZhbWlseSBpcworICAgICAgICBBRl9VTklYIGlmIGRlZmluZWQgb24gdGhlIHBsYXRmb3JtOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIEFGX0lORVQuCisgICAgICAgICIiIgorICAgICAgICBpZiBmYW1pbHkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBBRl9VTklYCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIGZhbWlseSA9IEFGX0lORVQKKyAgICAgICAgYSwgYiA9IF9zb2NrZXQuc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICBhID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sIGEuZGV0YWNoKCkpCisgICAgICAgIGIgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgYi5kZXRhY2goKSkKKyAgICAgICAgcmV0dXJuIGEsIGIKKworCitfYmxvY2tpbmdfZXJybm9zID0geyBFQUdBSU4sIEVXT1VMREJMT0NLIH0KKwogY2xhc3MgU29ja2V0SU8oaW8uUmF3SU9CYXNlKToKIAogICAgICIiIlJhdyBJL08gaW1wbGVtZW50YXRpb24gZm9yIHN0cmVhbSBzb2NrZXRzLgpAQCAtMjE0LDYgKzI1Nyw3IEBACiAgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCiAgICAgICAgIHNlbGYuX3JlYWRpbmcgPSAiciIgaW4gbW9kZQogICAgICAgICBzZWxmLl93cml0aW5nID0gInciIGluIG1vZGUKKyAgICAgICAgc2VsZi5fdGltZW91dF9vY2N1cnJlZCA9IEZhbHNlCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gbGVuKGIpIGJ5dGVzIGludG8gdGhlIHdyaXRhYmxlIGJ1ZmZlciAqYiogYW5kIHJldHVybgpAQCAtMjI1LDcgKzI2OSwyMSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuX3NvY2sucmVjdl9pbnRvKGIpCisgICAgICAgIGlmIHNlbGYuX3RpbWVvdXRfb2NjdXJyZWQ6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnJlY3ZfaW50byhiKQorICAgICAgICAgICAgZXhjZXB0IHRpbWVvdXQ6CisgICAgICAgICAgICAgICAgc2VsZi5fdGltZW91dF9vY2N1cnJlZCA9IFRydWUKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgbiA9IGUuYXJnc1swXQorICAgICAgICAgICAgICAgIGlmIG4gPT0gRUlOVFI6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbiBpbiBfYmxvY2tpbmdfZXJybm9zOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgICIiIldyaXRlIHRoZSBnaXZlbiBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0ICpiKiB0byB0aGUgc29ja2V0CkBAIC0yMzUsNyArMjkzLDEzIEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCiAgICAgICAgIHNlbGYuX2NoZWNrV3JpdGFibGUoKQotICAgICAgICByZXR1cm4gc2VsZi5fc29jay5zZW5kKGIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zb2NrLnNlbmQoYikKKyAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CisgICAgICAgICAgICAjIFhYWCB3aGF0IGFib3V0IEVJTlRSPworICAgICAgICAgICAgaWYgZS5hcmdzWzBdIGluIF9ibG9ja2luZ19lcnJub3M6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgICIiIlRydWUgaWYgdGhlIFNvY2tldElPIGlzIG9wZW4gZm9yIHJlYWRpbmcuCkBAIC0yNTUsNyArMzE5LDEwIEBACiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW5vKCkKKyAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW5vKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAtMQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIG1vZGUoc2VsZik6CkBAIC0yNzEsMTAgKzMzOCw2IEBACiAgICAgICAgIHNlbGYuX3NvY2suX2RlY3JlZl9zb2NrZXRpb3MoKQogICAgICAgICBzZWxmLl9zb2NrID0gTm9uZQogCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHNlbGYuX3NvY2suX2RlY3JlZl9zb2NrZXRpb3MoKQotCiAKIGRlZiBnZXRmcWRuKG5hbWU9JycpOgogICAgICIiIkdldCBmdWxseSBxdWFsaWZpZWQgZG9tYWluIG5hbWUgZnJvbSBuYW1lLgpAQCAtMzA0LDcgKzM2Nyw4IEBACiAKIF9HTE9CQUxfREVGQVVMVF9USU1FT1VUID0gb2JqZWN0KCkKIAotZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9X0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSk6CiAgICAgIiIiQ29ubmVjdCB0byAqYWRkcmVzcyogYW5kIHJldHVybiB0aGUgc29ja2V0IG9iamVjdC4KIAogICAgIENvbnZlbmllbmNlIGZ1bmN0aW9uLiAgQ29ubmVjdCB0byAqYWRkcmVzcyogKGEgMi10dXBsZSBgYChob3N0LApAQCAtMzEyLDcgKzM3Niw5IEBACiAgICAgKnRpbWVvdXQqIHBhcmFtZXRlciB3aWxsIHNldCB0aGUgdGltZW91dCBvbiB0aGUgc29ja2V0IGluc3RhbmNlCiAgICAgYmVmb3JlIGF0dGVtcHRpbmcgdG8gY29ubmVjdC4gIElmIG5vICp0aW1lb3V0KiBpcyBzdXBwbGllZCwgdGhlCiAgICAgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nIHJldHVybmVkIGJ5IDpmdW5jOmBnZXRkZWZhdWx0dGltZW91dGAKLSAgICBpcyB1c2VkLgorICAgIGlzIHVzZWQuICBJZiAqc291cmNlX2FkZHJlc3MqIGlzIHNldCBpdCBtdXN0IGJlIGEgdHVwbGUgb2YgKGhvc3QsIHBvcnQpCisgICAgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCBhcyBhIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBtYWtpbmcgdGhlIGNvbm5lY3Rpb24uCisgICAgQW4gaG9zdCBvZiAnJyBvciBwb3J0IDAgdGVsbHMgdGhlIE9TIHRvIHVzZSB0aGUgZGVmYXVsdC4KICAgICAiIiIKIAogICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzCkBAIC0zMjQsNiArMzkwLDggQEAKICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQoYWYsIHNvY2t0eXBlLCBwcm90bykKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IF9HTE9CQUxfREVGQVVMVF9USU1FT1VUOgogICAgICAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCh0aW1lb3V0KQorICAgICAgICAgICAgaWYgc291cmNlX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgc29jay5iaW5kKHNvdXJjZV9hZGRyZXNzKQogICAgICAgICAgICAgc29jay5jb25uZWN0KHNhKQogICAgICAgICAgICAgcmV0dXJuIHNvY2sKIApkaWZmIC0tZ2l0IGEvTGliL3NvY2tldHNlcnZlci5weSBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggM2QzMmMzZS4uMDg5YjNiYSAxMDA2NDQKLS0tIGEvTGliL3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvc29ja2V0c2VydmVyLnB5CkBAIC0xNjgsNiArMTY4LDcgQEAKICAgICAtIHZlcmlmeV9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgIC0gc2VydmVyX2Nsb3NlKCkKICAgICAtIHByb2Nlc3NfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAtIHNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAtIGNsb3NlX3JlcXVlc3QocmVxdWVzdCkKICAgICAtIGhhbmRsZV9lcnJvcigpCiAKQEAgLTI4Myw3ICsyODQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogCiAgICAgZGVmIGhhbmRsZV90aW1lb3V0KHNlbGYpOgogICAgICAgICAiIiJDYWxsZWQgaWYgbm8gbmV3IHJlcXVlc3QgYXJyaXZlcyB3aXRoaW4gc2VsZi50aW1lb3V0LgpAQCAtMzA3LDcgKzMwOCw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuZmluaXNoX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0gICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKIAogICAgIGRlZiBzZXJ2ZXJfY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbi11cCB0aGUgc2VydmVyLgpAQCAtMzIxLDYgKzMyMiwxMCBAQAogICAgICAgICAiIiJGaW5pc2ggb25lIHJlcXVlc3QgYnkgaW5zdGFudGlhdGluZyBSZXF1ZXN0SGFuZGxlckNsYXNzLiIiIgogICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3MocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MsIHNlbGYpCiAKKyAgICBkZWYgc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIiIiQ2FsbGVkIHRvIHNodXRkb3duIGFuZCBjbG9zZSBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCisgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorCiAgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbiB1cCBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCiAgICAgICAgIHBhc3MKQEAgLTM2MSw2ICszNjYsNyBAQAogICAgIC0gaGFuZGxlX3RpbWVvdXQoKQogICAgIC0gdmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCiAgICAgLSBwcm9jZXNzX3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgLSBzaHV0ZG93bl9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBjbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCiAgICAgLSBoYW5kbGVfZXJyb3IoKQogCkBAIC00NDUsNiArNDUxLDE2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5zb2NrZXQuYWNjZXB0KCkKIAorICAgIGRlZiBzaHV0ZG93bl9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgorICAgICAgICAiIiJDYWxsZWQgdG8gc2h1dGRvd24gYW5kIGNsb3NlIGFuIGluZGl2aWR1YWwgcmVxdWVzdC4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI2V4cGxpY2l0bHkgc2h1dGRvd24uICBzb2NrZXQuY2xvc2UoKSBtZXJlbHkgcmVsZWFzZXMKKyAgICAgICAgICAgICN0aGUgc29ja2V0IGFuZCB3YWl0cyBmb3IgR0MgdG8gcGVyZm9ybSB0aGUgYWN0dWFsIGNsb3NlLgorICAgICAgICAgICAgcmVxdWVzdC5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIHBhc3MgI3NvbWUgcGxhdGZvcm1zIG1heSByYWlzZSBFTk9UQ09OTiBoZXJlCisgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQorCiAgICAgZGVmIGNsb3NlX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCk6CiAgICAgICAgICIiIkNhbGxlZCB0byBjbGVhbiB1cCBhbiBpbmRpdmlkdWFsIHJlcXVlc3QuIiIiCiAgICAgICAgIHJlcXVlc3QuY2xvc2UoKQpAQCAtNDY4LDYgKzQ4NCwxMCBAQAogICAgICAgICAjIE5vIG5lZWQgdG8gY2FsbCBsaXN0ZW4oKSBmb3IgVURQLgogICAgICAgICBwYXNzCiAKKyAgICBkZWYgc2h1dGRvd25fcmVxdWVzdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgIyBObyBuZWVkIHRvIHNodXRkb3duIGFueXRoaW5nLgorICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKwogICAgIGRlZiBjbG9zZV9yZXF1ZXN0KHNlbGYsIHJlcXVlc3QpOgogICAgICAgICAjIE5vIG5lZWQgdG8gY2xvc2UgYW55dGhpbmcuCiAgICAgICAgIHBhc3MKQEAgLTUzNSwxMCArNTU1LDEyIEBACiAgICAgICAgICAgICAjIFRoaXMgbXVzdCBuZXZlciByZXR1cm4sIGhlbmNlIG9zLl9leGl0KCkhCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5maW5pc2hfcmVxdWVzdChyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcykKKyAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCiAKQEAgLTU1OCwxMCArNTgwLDEwIEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmZpbmlzaF9yZXF1ZXN0KHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzKQotICAgICAgICAgICAgc2VsZi5jbG9zZV9yZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICAgICBzZWxmLnNodXRkb3duX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgc2VsZi5oYW5kbGVfZXJyb3IocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKKyAgICAgICAgICAgIHNlbGYuc2h1dGRvd25fcmVxdWVzdChyZXF1ZXN0KQogCiAgICAgZGVmIHByb2Nlc3NfcmVxdWVzdChzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CiAgICAgICAgICIiIlN0YXJ0IGEgbmV3IHRocmVhZCB0byBwcm9jZXNzIHRoZSByZXF1ZXN0LiIiIgpAQCAtNjEzLDggKzYzNSwxMCBAQAogICAgICAgICBzZWxmLmNsaWVudF9hZGRyZXNzID0gY2xpZW50X2FkZHJlc3MKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIKICAgICAgICAgc2VsZi5zZXR1cCgpCi0gICAgICAgIHNlbGYuaGFuZGxlKCkKLSAgICAgICAgc2VsZi5maW5pc2goKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmhhbmRsZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLmZpbmlzaCgpCiAKICAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTY0OCw4ICs2NzIsMjAgQEAKICAgICByYnVmc2l6ZSA9IC0xCiAgICAgd2J1ZnNpemUgPSAwCiAKKyAgICAjIEEgdGltZW91dCB0byBhcHBseSB0byB0aGUgcmVxdWVzdCBzb2NrZXQsIGlmIG5vdCBOb25lLgorICAgIHRpbWVvdXQgPSBOb25lCisKKyAgICAjIERpc2FibGUgbmFnbGUgYWxnb3JpdGhtIGZvciB0aGlzIHNvY2tldCwgaWYgVHJ1ZS4KKyAgICAjIFVzZSBvbmx5IHdoZW4gd2J1ZnNpemUgIT0gMCwgdG8gYXZvaWQgc21hbGwgcGFja2V0cy4KKyAgICBkaXNhYmxlX25hZ2xlX2FsZ29yaXRobSA9IEZhbHNlCisKICAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgIHNlbGYuY29ubmVjdGlvbiA9IHNlbGYucmVxdWVzdAorICAgICAgICBpZiBzZWxmLnRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2V0dGltZW91dChzZWxmLnRpbWVvdXQpCisgICAgICAgIGlmIHNlbGYuZGlzYWJsZV9uYWdsZV9hbGdvcml0aG06CisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuVENQX05PREVMQVksIFRydWUpCiAgICAgICAgIHNlbGYucmZpbGUgPSBzZWxmLmNvbm5lY3Rpb24ubWFrZWZpbGUoJ3JiJywgc2VsZi5yYnVmc2l6ZSkKICAgICAgICAgc2VsZi53ZmlsZSA9IHNlbGYuY29ubmVjdGlvbi5tYWtlZmlsZSgnd2InLCBzZWxmLndidWZzaXplKQogCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy9fX2luaXRfXy5weSBiL0xpYi9zcWxpdGUzL19faW5pdF9fLnB5CmluZGV4IDRiNjQ4MzMuLjZjOTFkZjIgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL19faW5pdF9fLnB5CisrKyBiL0xpYi9zcWxpdGUzL19faW5pdF9fLnB5CkBAIC0xLDcgKzEsNiBAQAotIy0qLSBjb2Rpbmc6IElTTy04ODU5LTEgLSotCiAjIHB5c3FsaXRlMi9fX2luaXRfXy5weTogdGhlIHB5c3FsaXRlMiBwYWNrYWdlLgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDUgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIyBDb3B5cmlnaHQgKEMpIDIwMDUgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAjCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy9kYmFwaTIucHkgYi9MaWIvc3FsaXRlMy9kYmFwaTIucHkKaW5kZXggZDA1MWYwNC4uNmMxMjFhNSAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvZGJhcGkyLnB5CisrKyBiL0xpYi9zcWxpdGUzL2RiYXBpMi5weQpAQCAtMSw3ICsxLDYgQEAKLSMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQogIyBweXNxbGl0ZTIvZGJhcGkyLnB5OiB0aGUgREItQVBJIDIuMCBpbnRlcmZhY2UKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICMKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CmluZGV4IGZiZjMwNzIuLjUxOGI4YWUgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQpAQCAtMSw3ICsxLDcgQEAKICMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQogIyBweXNxbGl0ZTIvdGVzdC9kYmFwaS5weTogdGVzdHMgZm9yIERCLUFQSSBjb21wbGlhbmNlCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgogIwogIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICMKQEAgLTIyLDggKzIyLDExIEBACiAjIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogY2xhc3MgTW9kdWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBDaGVja0FQSUxldmVsKHNlbGYpOgpAQCAtODEsNiArODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIk5vdFN1cHBvcnRlZEVycm9yIGlzIG5vdCBhIHN1YmNsYXNzIG9mIERhdGFiYXNlRXJyb3IiKQogCiBjbGFzcyBDb25uZWN0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgY3UgPSBzZWxmLmN4LmN1cnNvcigpCkBAIC0xMzcsNiArMTQxLDI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jeC5Qcm9ncmFtbWluZ0Vycm9yLCBzcWxpdGUuUHJvZ3JhbW1pbmdFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmN4Lk5vdFN1cHBvcnRlZEVycm9yLCBzcWxpdGUuTm90U3VwcG9ydGVkRXJyb3IpCiAKKyAgICBkZWYgQ2hlY2tJblRyYW5zYWN0aW9uKHNlbGYpOgorICAgICAgICAjIENhbid0IHVzZSBkYiBmcm9tIHNldFVwIGJlY2F1c2Ugd2Ugd2FudCB0byB0ZXN0IGluaXRpYWwgc3RhdGUuCisgICAgICAgIGN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3UgPSBjeC5jdXJzb3IoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN4LmluX3RyYW5zYWN0aW9uLCBGYWxzZSkKKyAgICAgICAgY3UuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIHRyYW5zYWN0aW9udGVzdChpZCBpbnRlZ2VyIHByaW1hcnkga2V5LCBuYW1lIHRleHQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjeC5pbl90cmFuc2FjdGlvbiwgRmFsc2UpCisgICAgICAgIGN1LmV4ZWN1dGUoImluc2VydCBpbnRvIHRyYW5zYWN0aW9udGVzdChuYW1lKSB2YWx1ZXMgKD8pIiwgKCJmb28iLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3guaW5fdHJhbnNhY3Rpb24sIFRydWUpCisgICAgICAgIGN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdHJhbnNhY3Rpb250ZXN0IHdoZXJlIG5hbWU9PyIsIFsiZm9vIl0pCisgICAgICAgIHJvdyA9IGN1LmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjeC5pbl90cmFuc2FjdGlvbiwgVHJ1ZSkKKyAgICAgICAgY3guY29tbWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjeC5pbl90cmFuc2FjdGlvbiwgRmFsc2UpCisgICAgICAgIGN1LmV4ZWN1dGUoInNlbGVjdCBuYW1lIGZyb20gdHJhbnNhY3Rpb250ZXN0IHdoZXJlIG5hbWU9PyIsIFsiZm9vIl0pCisgICAgICAgIHJvdyA9IGN1LmZldGNob25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjeC5pbl90cmFuc2FjdGlvbiwgRmFsc2UpCisKKyAgICBkZWYgQ2hlY2tJblRyYW5zYWN0aW9uUk8oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5jeC5pbl90cmFuc2FjdGlvbiA9IFRydWUKKwogY2xhc3MgQ3Vyc29yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jeCA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCkBAIC00NjAsNiArNDg2LDcgQEAKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhpcyB0ZXN0IHJlcXVpcmVzIHRocmVhZGluZy4nKQogY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5jb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQpAQCAtNjUzLDEzICs2ODAsMTMgQEAKICAgICAgICAgcmVzID0gY3VyLmZldGNob25lKClbMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDUpCiAKLSAgICBkZWYgQ2hlY2tTY3JpcHRFcnJvckluY29tcGxldGUoc2VsZik6CisgICAgZGVmIENoZWNrU2NyaXB0U3ludGF4RXJyb3Ioc2VsZik6CiAgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCiAgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQogICAgICAgICByYWlzZWQgPSBGYWxzZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3Qoc2FkZnNhZGZkc2EiKQotICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZXNjcmlwdCgiY3JlYXRlIHRhYmxlIHRlc3QoeCk7IGFzZGY7IGNyZWF0ZSB0YWJsZSB0ZXN0Mih4KSIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcjoKICAgICAgICAgICAgIHJhaXNlZCA9IFRydWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYWlzZWQsIFRydWUsICJzaG91bGQgaGF2ZSByYWlzZWQgYW4gZXhjZXB0aW9uIikKIApAQCAtNjkyLDcgKzcxOSw3IEBACiAgICAgICAgIHJlc3VsdCA9IGNvbi5leGVjdXRlKCJzZWxlY3QgZm9vIGZyb20gdGVzdCIpLmZldGNob25lKClbMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDUsICJCYXNpYyB0ZXN0IG9mIENvbm5lY3Rpb24uZXhlY3V0ZXNjcmlwdCIpCiAKLWNsYXNzIENsb3NlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENsb3NlZENvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHBhc3MKIApAQCAtNzQ0LDcgKzc3MSw2IEBACiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIGEgUHJvZ3JhbW1pbmdFcnJvciIpCiAKLQogICAgIGRlZiBDaGVja0Nsb3NlZENyZWF0ZUZ1bmN0aW9uKHNlbGYpOgogICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQogICAgICAgICBjb24uY2xvc2UoKQpAQCAtODExLDYgKzgzNywzNiBAQAogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3IiKQogCitjbGFzcyBDbG9zZWRDdXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBDaGVja0Nsb3NlZChzZWxmKToKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5jbG9zZSgpCisKKyAgICAgICAgZm9yIG1ldGhvZF9uYW1lIGluICgiZXhlY3V0ZSIsICJleGVjdXRlbWFueSIsICJleGVjdXRlc2NyaXB0IiwgImZldGNoYWxsIiwgImZldGNobWFueSIsICJmZXRjaG9uZSIpOgorICAgICAgICAgICAgaWYgbWV0aG9kX25hbWUgaW4gKCJleGVjdXRlIiwgImV4ZWN1dGVzY3JpcHQiKToKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSAoInNlbGVjdCA0IHVuaW9uIHNlbGVjdCA1IiwpCisgICAgICAgICAgICBlbGlmIG1ldGhvZF9uYW1lID09ICJleGVjdXRlbWFueSI6CisgICAgICAgICAgICAgICAgcGFyYW1zID0gKCJpbnNlcnQgaW50byBmb28oYmFyKSB2YWx1ZXMgKD8pIiwgWygzLCksICg0LCldKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSBbXQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihjdXIsIG1ldGhvZF9uYW1lKQorCisgICAgICAgICAgICAgICAgbWV0aG9kKCpwYXJhbXMpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgYSBQcm9ncmFtbWluZ0Vycm9yOiBtZXRob2QgIiArIG1ldGhvZF9uYW1lKQorICAgICAgICAgICAgZXhjZXB0IHNxbGl0ZS5Qcm9ncmFtbWluZ0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBhIFByb2dyYW1taW5nRXJyb3I6ICIgKyBtZXRob2RfbmFtZSkKKwogZGVmIHN1aXRlKCk6CiAgICAgbW9kdWxlX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE1vZHVsZVRlc3RzLCAiQ2hlY2siKQogICAgIGNvbm5lY3Rpb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ29ubmVjdGlvblRlc3RzLCAiQ2hlY2siKQpAQCAtODE4LDggKzg3NCw5IEBACiAgICAgdGhyZWFkX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKFRocmVhZFRlc3RzLCAiQ2hlY2siKQogICAgIGNvbnN0cnVjdG9yX3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKENvbnN0cnVjdG9yVGVzdHMsICJDaGVjayIpCiAgICAgZXh0X3N1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKEV4dGVuc2lvblRlc3RzLCAiQ2hlY2siKQotICAgIGNsb3NlZF9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDbG9zZWRUZXN0cywgIkNoZWNrIikKLSAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChtb2R1bGVfc3VpdGUsIGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgdGhyZWFkX3N1aXRlLCBjb25zdHJ1Y3Rvcl9zdWl0ZSwgZXh0X3N1aXRlLCBjbG9zZWRfc3VpdGUpKQorICAgIGNsb3NlZF9jb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoQ2xvc2VkQ29uVGVzdHMsICJDaGVjayIpCisgICAgY2xvc2VkX2N1cl9zdWl0ZSA9IHVuaXR0ZXN0Lm1ha2VTdWl0ZShDbG9zZWRDdXJUZXN0cywgIkNoZWNrIikKKyAgICByZXR1cm4gdW5pdHRlc3QuVGVzdFN1aXRlKChtb2R1bGVfc3VpdGUsIGNvbm5lY3Rpb25fc3VpdGUsIGN1cnNvcl9zdWl0ZSwgdGhyZWFkX3N1aXRlLCBjb25zdHJ1Y3Rvcl9zdWl0ZSwgZXh0X3N1aXRlLCBjbG9zZWRfY29uX3N1aXRlLCBjbG9zZWRfY3VyX3N1aXRlKSkKIAogZGVmIHRlc3QoKToKICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKaW5kZXggNWUzMTVmYS4uN2QwNTUzZCAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQpAQCAtMSw3ICsxLDcgQEAKICMtKi0gY29kaW5nOiBJU08tODg1OS0xIC0qLQogIyBweXNxbGl0ZTIvdGVzdC9yZWdyZXNzaW9uLnB5OiBweXNxbGl0ZSByZWdyZXNzaW9uIHRlc3RzCiAjCi0jIENvcHlyaWdodCAoQykgMjAwNiBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisjIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KICMKICMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAjCkBAIC03MCwxNiArNzAsNiBAQAogICAgICAgICBjdXIuZXhlY3V0ZSgnc2VsZWN0IDEgYXMgImZvbyBiYXoiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIuZGVzY3JpcHRpb25bMF1bMF0sICJmb28gYmF6IikKIAotICAgIGRlZiBDaGVja1N0YXRlbWVudEF2YWlsYWJsZShzZWxmKToKLSAgICAgICAgIyBweXNxbGl0ZSB1cCB0byAyLjMuMiBjcmFzaGVkIG9uIHRoaXMsIGJlY2F1c2UgdGhlIGFjdGl2ZSBzdGF0ZW1lbnQgaGFuZGxlIHdhcyBub3QgY2hlY2tlZAotICAgICAgICAjIGJlZm9yZSB0cnlpbmcgdG8gZmV0Y2ggZGF0YSBmcm9tIGl0LiBjbG9zZSgpIGRlc3Ryb3lzIHRoZSBhY3RpdmUgc3RhdGVtZW50IC4uLgotICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBkZXRlY3RfdHlwZXM9c3FsaXRlLlBBUlNFX0RFQ0xUWVBFUykKLSAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCi0gICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgNCB1bmlvbiBzZWxlY3QgNSIpCi0gICAgICAgIGN1ci5jbG9zZSgpCi0gICAgICAgIGN1ci5mZXRjaG9uZSgpCi0gICAgICAgIGN1ci5mZXRjaG9uZSgpCi0KICAgICBkZWYgQ2hlY2tTdGF0ZW1lbnRGaW5hbGl6YXRpb25PbkNsb3NlRGIoc2VsZik6CiAgICAgICAgICMgcHlzcWxpdGUgdmVyc2lvbnMgPD0gMi4zLjMgb25seSBmaW5hbGl6ZWQgc3RhdGVtZW50cyBpbiB0aGUgc3RhdGVtZW50CiAgICAgICAgICMgY2FjaGUgd2hlbiBjbG9zaW5nIHRoZSBkYXRhYmFzZS4gc3RhdGVtZW50cyB0aGF0IHdlcmUgc3RpbGwKQEAgLTE2OSw2ICsxNTksMjUgQEAKICAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKICAgICAgICAgc2V0YXR0cihjb24sICJpc29sYXRpb25fbGV2ZWwiLCAiXHhlOSIpCiAKKyAgICBkZWYgQ2hlY2tDdXJzb3JDb25zdHJ1Y3RvckNhbGxDaGVjayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY3Vyc29yIG1ldGhvZHMgY2hlY2sgd2V0aGVyIGJhc2UgY2xhc3MgX19pbml0X18gd2FzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIEN1cnNvcihzcWxpdGUuQ3Vyc29yKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb24pOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiKQorICAgICAgICBjdXIgPSBDdXJzb3IoY29uKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDQrNSIpLmZldGNoYWxsKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorCisKICAgICBkZWYgQ2hlY2tTdHJTdWJjbGFzcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoZSBQeXRob24gMy4wIHBvcnQgb2YgdGhlIG1vZHVsZSBkaWRuJ3QgY29wZSB3aXRoIHZhbHVlcyBvZiBzdWJjbGFzc2VzIG9mIHN0ci4KQEAgLTE3Niw2ICsxODUsODggQEAKICAgICAgICAgY2xhc3MgTXlTdHIoc3RyKTogcGFzcwogICAgICAgICBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgPyIsIChNeVN0cigiYWJjIiksKSkKIAorICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25Db25zdHJ1Y3RvckNhbGxDaGVjayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFZlcmlmaWVzIHRoYXQgY29ubmVjdGlvbiBtZXRob2RzIGNoZWNrIHdldGhlciBiYXNlIGNsYXNzIF9faW5pdF9fIHdhcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBDb25uZWN0aW9uKHNxbGl0ZS5Db25uZWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY29uID0gQ29ubmVjdGlvbigiOm1lbW9yeToiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdXIgPSBjb24uY3Vyc29yKCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorICAgICAgICBleGNlcHQgc3FsaXRlLlByb2dyYW1taW5nRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIFByb2dyYW1taW5nRXJyb3IiKQorCisgICAgZGVmIENoZWNrQ3Vyc29yUmVnaXN0cmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVmVyaWZpZXMgdGhhdCBzdWJjbGFzc2VkIGN1cnNvciBjbGFzc2VzIGFyZSBjb3JyZWN0bHkgcmVnaXN0ZXJlZCB3aXRoCisgICAgICAgIHRoZSBjb25uZWN0aW9uIG9iamVjdCwgdG9vLiAgKGZldGNoLWFjcm9zcy1yb2xsYmFjayBwcm9ibGVtKQorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgQ29ubmVjdGlvbihzcWxpdGUuQ29ubmVjdGlvbik6CisgICAgICAgICAgICBkZWYgY3Vyc29yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBDdXJzb3Ioc2VsZikKKworICAgICAgICBjbGFzcyBDdXJzb3Ioc3FsaXRlLkN1cnNvcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29uKToKKyAgICAgICAgICAgICAgICBzcWxpdGUuQ3Vyc29yLl9faW5pdF9fKHNlbGYsIGNvbikKKworICAgICAgICBjb24gPSBDb25uZWN0aW9uKCI6bWVtb3J5OiIpCisgICAgICAgIGN1ciA9IGNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyh4KSIpCisgICAgICAgIGN1ci5leGVjdXRlbWFueSgiaW5zZXJ0IGludG8gZm9vKHgpIHZhbHVlcyAoPykiLCBbKDMsKSwgKDQsKSwgKDUsKV0pCisgICAgICAgIGN1ci5leGVjdXRlKCJzZWxlY3QgeCBmcm9tIGZvbyIpCisgICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBoYXZlIHJhaXNlZCBJbnRlcmZhY2VFcnJvciIpCisgICAgICAgIGV4Y2VwdCBzcWxpdGUuSW50ZXJmYWNlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkIGhhdmUgcmFpc2VkIEludGVyZmFjZUVycm9yIikKKworICAgIGRlZiBDaGVja0F1dG9Db21taXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IGNyZWF0aW5nIGEgY29ubmVjdGlvbiBpbiBhdXRvY29tbWl0IG1vZGUgd29ya3MuCisgICAgICAgIDIuNS4zIGludHJvZHVjZWQgYSByZWdyZXNzaW9uIHNvIHRoYXQgdGhlc2UgY291bGQgbm8gbG9uZ2VyCisgICAgICAgIGJlIGNyZWF0ZWQuCisgICAgICAgICIiIgorICAgICAgICBjb24gPSBzcWxpdGUuY29ubmVjdCgiOm1lbW9yeToiLCBpc29sYXRpb25fbGV2ZWw9Tm9uZSkKKworICAgIGRlZiBDaGVja1ByYWdtYUF1dG9jb21taXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBWZXJpZmllcyB0aGF0IHJ1bm5pbmcgYSBQUkFHTUEgc3RhdGVtZW50IHRoYXQgZG9lcyBhbiBhdXRvY29tbWl0IGRvZXMKKyAgICAgICAgd29yay4gVGhpcyBkaWQgbm90IHdvcmsgaW4gMi41LjMvMi41LjQuCisgICAgICAgICIiIgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoKQorICAgICAgICBjdXIuZXhlY3V0ZSgiY3JlYXRlIHRhYmxlIGZvbyhiYXIpIikKKyAgICAgICAgY3VyLmV4ZWN1dGUoImluc2VydCBpbnRvIGZvbyhiYXIpIHZhbHVlcyAoNSkiKQorCisgICAgICAgIGN1ci5leGVjdXRlKCJwcmFnbWEgcGFnZV9zaXplIikKKyAgICAgICAgcm93ID0gY3VyLmZldGNob25lKCkKKworICAgIGRlZiBDaGVja1NldERpY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc0NzgKKworICAgICAgICBJdCB3YXMgcG9zc2libGUgdG8gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyIGNhbGxiYWNrcyB0aGF0IGNvdWxkIG5vdCBiZQorICAgICAgICBoYXNoZWQuIFJldHVybiBjb2RlcyBvZiBQeURpY3RfU2V0SXRlbSB3ZXJlIG5vdCBjaGVja2VkIHByb3Blcmx5LgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTm90SGFzaGFibGU6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICB2YXIgPSBOb3RIYXNoYWJsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uY3JlYXRlX2Z1bmN0aW9uLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uY3JlYXRlX2FnZ3JlZ2F0ZSwgdmFyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuY29uLnNldF9hdXRob3JpemVyLCB2YXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5jb24uc2V0X3Byb2dyZXNzX2hhbmRsZXIsIHZhcikKKwogICAgIGRlZiBDaGVja0Nvbm5lY3Rpb25DYWxsKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgQ2FsbCBhIGNvbm5lY3Rpb24gd2l0aCBhIG5vbi1zdHJpbmcgU1FMIHJlcXVlc3Q6IGNoZWNrIGVycm9yIGhhbmRsaW5nCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3RyYW5zYWN0aW9ucy5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CmluZGV4IGM5ZjYxMjUuLjcwZTk2YTEgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdHJhbnNhY3Rpb25zLnB5CkBAIC0xNDcsNiArMTQ3LDI2IEBACiAgICAgICAgICMgTk8gc2VsZi5jb24yLnJvbGxiYWNrKCkgSEVSRSEhIQogICAgICAgICBzZWxmLmNvbjEuY29tbWl0KCkKIAorICAgIGRlZiBDaGVja1JvbGxiYWNrQ3Vyc29yQ29uc2lzdGVuY3koc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVja3MgaWYgY3Vyc29ycyBvbiB0aGUgY29ubmVjdGlvbiBhcmUgc2V0IGludG8gYSAicmVzZXQiIHN0YXRlCisgICAgICAgIHdoZW4gYSByb2xsYmFjayBpcyBkb25lIG9uIHRoZSBjb25uZWN0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgY29uID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIGN1ci5leGVjdXRlKCJjcmVhdGUgdGFibGUgdGVzdCh4KSIpCisgICAgICAgIGN1ci5leGVjdXRlKCJpbnNlcnQgaW50byB0ZXN0KHgpIHZhbHVlcyAoNSkiKQorICAgICAgICBjdXIuZXhlY3V0ZSgic2VsZWN0IDEgdW5pb24gc2VsZWN0IDIgdW5pb24gc2VsZWN0IDMiKQorCisgICAgICAgIGNvbi5yb2xsYmFjaygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1ci5mZXRjaGFsbCgpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkludGVyZmFjZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKyAgICAgICAgZXhjZXB0IHNxbGl0ZS5JbnRlcmZhY2VFcnJvciBhcyBlOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkludGVyZmFjZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkIikKKwogY2xhc3MgU3BlY2lhbENvbW1hbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCmRpZmYgLS1naXQgYS9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQppbmRleCAwOTQwZTliLi4yOTQxM2UxIDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CisrKyBiL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKQEAgLTIxLDkgKzIxLDE0IEBACiAjICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KICMgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KIAotaW1wb3J0IHpsaWIsIGRhdGV0aW1lCitpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB6bGliID0gTm9uZQorCiAKIGNsYXNzIFNxbGl0ZVR5cGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMzEyLDYgKzMxNyw3IEBACiAgICAgICAgIHZhbCA9IHNlbGYuY3VyLmZldGNob25lKClbMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbCksIGZsb2F0KQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiBjbGFzcyBCaW5hcnlDb252ZXJ0ZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGNvbnZlcnQocyk6CiAgICAgICAgIHJldHVybiB6bGliLmRlY29tcHJlc3MocykKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCA0N2UxNzAxLi5mNTJlYTAxIDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0zNDMsNyArMzQzLDcgQEAKICAgICBlbHNlOgogICAgICAgICBjb2RlID0gJ0knCiAgICAgIyBDb252ZXJ0IGJsb2NrIGluZGljZXMgdG8gYnl0ZSBhcnJheSBvZiAyNTYgYnl0ZXMKLSAgICBtYXBwaW5nID0gYXJyYXkuYXJyYXkoJ2InLCBtYXBwaW5nKS50b3N0cmluZygpCisgICAgbWFwcGluZyA9IGFycmF5LmFycmF5KCdiJywgbWFwcGluZykudG9ieXRlcygpCiAgICAgIyBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gd29yZCBhcnJheQogICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheShjb2RlLCBtYXBwaW5nKQogICAgIGFzc2VydCBtYXBwaW5nLml0ZW1zaXplID09IF9zcmUuQ09ERVNJWkUKZGlmZiAtLWdpdCBhL0xpYi9zc2wucHkgYi9MaWIvc3NsLnB5CmluZGV4IGY5OGJkNzMuLjg0YWE2ZGMgMTAwNjQ0Ci0tLSBhL0xpYi9zc2wucHkKKysrIGIvTGliL3NzbC5weQpAQCAtNTUsMTMgKzU1LDE2IEBACiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCitpbXBvcnQgcmUKIAogaW1wb3J0IF9zc2wgICAgICAgICAgICAgIyBpZiB3ZSBjYW4ndCBpbXBvcnQgaXQsIGxldCB0aGUgZXJyb3IgcHJvcGFnYXRlCiAKLWZyb20gX3NzbCBpbXBvcnQgU1NMRXJyb3IKK2Zyb20gX3NzbCBpbXBvcnQgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiwgT1BFTlNTTF9WRVJTSU9OX0lORk8sIE9QRU5TU0xfVkVSU0lPTgorZnJvbSBfc3NsIGltcG9ydCBfU1NMQ29udGV4dCwgU1NMRXJyb3IKIGZyb20gX3NzbCBpbXBvcnQgQ0VSVF9OT05FLCBDRVJUX09QVElPTkFMLCBDRVJUX1JFUVVJUkVECiBmcm9tIF9zc2wgaW1wb3J0IChQUk9UT0NPTF9TU0x2MiwgUFJPVE9DT0xfU1NMdjMsIFBST1RPQ09MX1NTTHYyMywKICAgICAgICAgICAgICAgICAgIFBST1RPQ09MX1RMU3YxKQorZnJvbSBfc3NsIGltcG9ydCBPUF9BTEwsIE9QX05PX1NTTHYyLCBPUF9OT19TU0x2MywgT1BfTk9fVExTdjEKIGZyb20gX3NzbCBpbXBvcnQgUkFORF9zdGF0dXMsIFJBTkRfZWdkLCBSQU5EX2FkZAogZnJvbSBfc3NsIGltcG9ydCAoCiAgICAgU1NMX0VSUk9SX1pFUk9fUkVUVVJOLApAQCAtNzQsMTcgKzc3LDk4IEBACiAgICAgU1NMX0VSUk9SX0VPRiwKICAgICBTU0xfRVJST1JfSU5WQUxJRF9FUlJPUl9DT0RFLAogICAgICkKK2Zyb20gX3NzbCBpbXBvcnQgSEFTX1NOSQogCiBmcm9tIHNvY2tldCBpbXBvcnQgZ2V0bmFtZWluZm8gYXMgX2dldG5hbWVpbmZvCiBmcm9tIHNvY2tldCBpbXBvcnQgZXJyb3IgYXMgc29ja2V0X2Vycm9yCi1mcm9tIHNvY2tldCBpbXBvcnQgZHVwIGFzIF9kdXAKIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNCiBpbXBvcnQgYmFzZTY0ICAgICAgICAjIGZvciBERVItdG8tUEVNIHRyYW5zbGF0aW9uCiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgZXJybm8KIAotY2xhc3MgU1NMU29ja2V0KHNvY2tldCk6CiAKK2NsYXNzIENlcnRpZmljYXRlRXJyb3IoVmFsdWVFcnJvcik6CisgICAgcGFzcworCisKK2RlZiBfZG5zbmFtZV90b19wYXQoZG4pOgorICAgIHBhdHMgPSBbXQorICAgIGZvciBmcmFnIGluIGRuLnNwbGl0KHInLicpOgorICAgICAgICBpZiBmcmFnID09ICcqJzoKKyAgICAgICAgICAgICMgV2hlbiAnKicgaXMgYSBmcmFnbWVudCBieSBpdHNlbGYsIGl0IG1hdGNoZXMgYSBub24tZW1wdHkgZG90bGVzcworICAgICAgICAgICAgIyBmcmFnbWVudC4KKyAgICAgICAgICAgIHBhdHMuYXBwZW5kKCdbXi5dKycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE90aGVyd2lzZSwgJyonIG1hdGNoZXMgYW55IGRvdGxlc3MgZnJhZ21lbnQuCisgICAgICAgICAgICBmcmFnID0gcmUuZXNjYXBlKGZyYWcpCisgICAgICAgICAgICBwYXRzLmFwcGVuZChmcmFnLnJlcGxhY2UocidcKicsICdbXi5dKicpKQorICAgIHJldHVybiByZS5jb21waWxlKHInXEEnICsgcidcLicuam9pbihwYXRzKSArIHInXFonLCByZS5JR05PUkVDQVNFKQorCisKK2RlZiBtYXRjaF9ob3N0bmFtZShjZXJ0LCBob3N0bmFtZSk6CisgICAgIiIiVmVyaWZ5IHRoYXQgKmNlcnQqIChpbiBkZWNvZGVkIGZvcm1hdCBhcyByZXR1cm5lZCBieQorICAgIFNTTFNvY2tldC5nZXRwZWVyY2VydCgpKSBtYXRjaGVzIHRoZSAqaG9zdG5hbWUqLiAgUkZDIDI4MTggcnVsZXMKKyAgICBhcmUgbW9zdGx5IGZvbGxvd2VkLCBidXQgSVAgYWRkcmVzc2VzIGFyZSBub3QgYWNjZXB0ZWQgZm9yICpob3N0bmFtZSouCisKKyAgICBDZXJ0aWZpY2F0ZUVycm9yIGlzIHJhaXNlZCBvbiBmYWlsdXJlLiBPbiBzdWNjZXNzLCB0aGUgZnVuY3Rpb24KKyAgICByZXR1cm5zIG5vdGhpbmcuCisgICAgIiIiCisgICAgaWYgbm90IGNlcnQ6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImVtcHR5IG9yIG5vIGNlcnRpZmljYXRlIikKKyAgICBkbnNuYW1lcyA9IFtdCisgICAgc2FuID0gY2VydC5nZXQoJ3N1YmplY3RBbHROYW1lJywgKCkpCisgICAgZm9yIGtleSwgdmFsdWUgaW4gc2FuOgorICAgICAgICBpZiBrZXkgPT0gJ0ROUyc6CisgICAgICAgICAgICBpZiBfZG5zbmFtZV90b19wYXQodmFsdWUpLm1hdGNoKGhvc3RuYW1lKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGRuc25hbWVzLmFwcGVuZCh2YWx1ZSkKKyAgICBpZiBub3Qgc2FuOgorICAgICAgICAjIFRoZSBzdWJqZWN0IGlzIG9ubHkgY2hlY2tlZCB3aGVuIHN1YmplY3RBbHROYW1lIGlzIGVtcHR5CisgICAgICAgIGZvciBzdWIgaW4gY2VydC5nZXQoJ3N1YmplY3QnLCAoKSk6CisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzdWI6CisgICAgICAgICAgICAgICAgIyBYWFggYWNjb3JkaW5nIHRvIFJGQyAyODE4LCB0aGUgbW9zdCBzcGVjaWZpYyBDb21tb24gTmFtZQorICAgICAgICAgICAgICAgICMgbXVzdCBiZSB1c2VkLgorICAgICAgICAgICAgICAgIGlmIGtleSA9PSAnY29tbW9uTmFtZSc6CisgICAgICAgICAgICAgICAgICAgIGlmIF9kbnNuYW1lX3RvX3BhdCh2YWx1ZSkubWF0Y2goaG9zdG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIGRuc25hbWVzLmFwcGVuZCh2YWx1ZSkKKyAgICBpZiBsZW4oZG5zbmFtZXMpID4gMToKKyAgICAgICAgcmFpc2UgQ2VydGlmaWNhdGVFcnJvcigiaG9zdG5hbWUgJXIgIgorICAgICAgICAgICAgImRvZXNuJ3QgbWF0Y2ggZWl0aGVyIG9mICVzIgorICAgICAgICAgICAgJSAoaG9zdG5hbWUsICcsICcuam9pbihtYXAocmVwciwgZG5zbmFtZXMpKSkpCisgICAgZWxpZiBsZW4oZG5zbmFtZXMpID09IDE6CisgICAgICAgIHJhaXNlIENlcnRpZmljYXRlRXJyb3IoImhvc3RuYW1lICVyICIKKyAgICAgICAgICAgICJkb2Vzbid0IG1hdGNoICVyIgorICAgICAgICAgICAgJSAoaG9zdG5hbWUsIGRuc25hbWVzWzBdKSkKKyAgICBlbHNlOgorICAgICAgICByYWlzZSBDZXJ0aWZpY2F0ZUVycm9yKCJubyBhcHByb3ByaWF0ZSBjb21tb25OYW1lIG9yICIKKyAgICAgICAgICAgICJzdWJqZWN0QWx0TmFtZSBmaWVsZHMgd2VyZSBmb3VuZCIpCisKKworY2xhc3MgU1NMQ29udGV4dChfU1NMQ29udGV4dCk6CisgICAgIiIiQW4gU1NMQ29udGV4dCBob2xkcyB2YXJpb3VzIFNTTC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQKKyAgICBkYXRhLCBzdWNoIGFzIGNlcnRpZmljYXRlcyBhbmQgcG9zc2libHkgYSBwcml2YXRlIGtleS4iIiIKKworICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCkKKworICAgIGRlZiBfX25ld19fKGNscywgcHJvdG9jb2wsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBfU1NMQ29udGV4dC5fX25ld19fKGNscywgcHJvdG9jb2wpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBzZWxmLnByb3RvY29sID0gcHJvdG9jb2wKKworICAgIGRlZiB3cmFwX3NvY2tldChzZWxmLCBzb2NrLCBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByZXR1cm4gU1NMU29ja2V0KHNvY2s9c29jaywgc2VydmVyX3NpZGU9c2VydmVyX3NpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9ZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9c3VwcHJlc3NfcmFnZ2VkX2VvZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dD1zZWxmKQorCisKK2NsYXNzIFNTTFNvY2tldChzb2NrZXQpOgogICAgICIiIlRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIHN1YnR5cGUgb2Ygc29ja2V0LnNvY2tldCB0aGF0IHdyYXBzCiAgICAgdGhlIHVuZGVybHlpbmcgT1Mgc29ja2V0IGluIGFuIFNTTCBjb250ZXh0IHdoZW4gbmVjZXNzYXJ5LCBhbmQKICAgICBwcm92aWRlcyByZWFkIGFuZCB3cml0ZSBtZXRob2RzIG92ZXIgdGhhdCBjaGFubmVsLiIiIgpAQCAtOTQsMTUgKzE3OCw0OCBAQAogICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1QUk9UT0NPTF9TU0x2MjMsIGNhX2NlcnRzPU5vbmUsCiAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PVRydWUsCiAgICAgICAgICAgICAgICAgIGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSwKLSAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSk6CisgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPVRydWUsIGNpcGhlcnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIF9jb250ZXh0PU5vbmUpOgogCisgICAgICAgIGlmIF9jb250ZXh0OgorICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX2NvbnRleHQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBub3QgY2VydGZpbGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVyYXRpb25zIikKKyAgICAgICAgICAgIGlmIGtleWZpbGUgYW5kIG5vdCBjZXJ0ZmlsZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICBpZiBjZXJ0ZmlsZSBhbmQgbm90IGtleWZpbGU6CisgICAgICAgICAgICAgICAga2V5ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQorICAgICAgICAgICAgc2VsZi5jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCisgICAgICAgICAgICBpZiBjYV9jZXJ0czoKKyAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhX2NlcnRzKQorICAgICAgICAgICAgaWYgY2VydGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgICAgIGlmIGNpcGhlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LnNldF9jaXBoZXJzKGNpcGhlcnMpCisgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCisgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzID0gY2VydF9yZXFzCisgICAgICAgICAgICBzZWxmLnNzbF92ZXJzaW9uID0gc3NsX3ZlcnNpb24KKyAgICAgICAgICAgIHNlbGYuY2FfY2VydHMgPSBjYV9jZXJ0cworICAgICAgICAgICAgc2VsZi5jaXBoZXJzID0gY2lwaGVycworICAgICAgICBpZiBzZXJ2ZXJfc2lkZSBhbmQgc2VydmVyX2hvc3RuYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2VydmVyX2hvc3RuYW1lIGNhbiBvbmx5IGJlIHNwZWNpZmllZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBjbGllbnQgbW9kZSIpCisgICAgICAgIHNlbGYuc2VydmVyX3NpZGUgPSBzZXJ2ZXJfc2lkZQorICAgICAgICBzZWxmLnNlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0ID0gZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QKKyAgICAgICAgc2VsZi5zdXBwcmVzc19yYWdnZWRfZW9mcyA9IHN1cHByZXNzX3JhZ2dlZF9lb2ZzCiAgICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCiAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29jay5mYW1pbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1zb2NrLnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89c29jay5wcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm89X2R1cChzb2NrLmZpbGVubygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm89c29jay5maWxlbm8oKSkKICAgICAgICAgICAgIHNlbGYuc2V0dGltZW91dChzb2NrLmdldHRpbWVvdXQoKSkKICAgICAgICAgICAgICMgc2VlIGlmIGl0J3MgY29ubmVjdGVkCiAgICAgICAgICAgICB0cnk6CkBAIC0xMTIsMjMgKzIyOSwyMCBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBjb25uZWN0ZWQgPSBUcnVlCi0gICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHNvY2suZGV0YWNoKCkKICAgICAgICAgZWxpZiBmaWxlbm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmlsZW5vPWZpbGVubykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQogCi0gICAgICAgIGlmIGNlcnRmaWxlIGFuZCBub3Qga2V5ZmlsZToKLSAgICAgICAgICAgIGtleWZpbGUgPSBjZXJ0ZmlsZQotCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gY29ubmVjdGVkCiAgICAgICAgIGlmIGNvbm5lY3RlZDoKICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBTU0wgb2JqZWN0CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gX3NzbC5zc2x3cmFwKHNlbGYsIHNlcnZlcl9zaWRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlLCBjZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzLCBzc2xfdmVyc2lvbiwgY2FfY2VydHMpCisgICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgICAgICBpZiBkb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPT0gMC4wOgpAQCAtMTQwLDE0ICsyNTQsNiBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIHgKIAotICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCi0gICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQotICAgICAgICBzZWxmLmNlcnRfcmVxcyA9IGNlcnRfcmVxcwotICAgICAgICBzZWxmLnNzbF92ZXJzaW9uID0gc3NsX3ZlcnNpb24KLSAgICAgICAgc2VsZi5jYV9jZXJ0cyA9IGNhX2NlcnRzCi0gICAgICAgIHNlbGYuZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QgPSBkb19oYW5kc2hha2Vfb25fY29ubmVjdAotICAgICAgICBzZWxmLnN1cHByZXNzX3JhZ2dlZF9lb2ZzID0gc3VwcHJlc3NfcmFnZ2VkX2VvZnMKLQogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCJDYW4ndCBkdXAoKSAlcyBpbnN0YW5jZXMiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCkBAIC0yMzQsNiArMzQwLDEwIEBACiAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSwgZmxhZ3M9MCk6CiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKICAgICAgICAgaWYgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgaWYgZmxhZ3MgIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gZmxhZ3Mgbm90IGFsbG93ZWQgaW4gY2FsbHMgdG8gc2VuZGFsbCgpIG9uICVzIiAlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fKQogICAgICAgICAgICAgYW1vdW50ID0gbGVuKGRhdGEpCiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIHdoaWxlIChjb3VudCA8IGFtb3VudCk6CkBAIC0zMjEsMjQgKzQzMSwzNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5zZXR0aW1lb3V0KHRpbWVvdXQpCiAKKyAgICBkZWYgX3JlYWxfY29ubmVjdChzZWxmLCBhZGRyLCByZXR1cm5fZXJybm8pOgorICAgICAgICBpZiBzZWxmLnNlcnZlcl9zaWRlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgY29ubmVjdCBpbiBzZXJ2ZXItc2lkZSBtb2RlIikKKyAgICAgICAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBzb2NrZXQgaXMgY2xpZW50LXNpZGUsIGFuZCBub3QKKyAgICAgICAgIyBjb25uZWN0ZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwuICBXZSBjb25uZWN0IGl0LCB0aGVuIHdyYXAgaXQuCisgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImF0dGVtcHQgdG8gY29ubmVjdCBhbHJlYWR5LWNvbm5lY3RlZCBTU0xTb2NrZXQhIikKKyAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBGYWxzZSwgc2VsZi5zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2tldC5jb25uZWN0KHNlbGYsIGFkZHIpCisgICAgICAgICAgICBpZiBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgorICAgICAgICAgICAgICAgIHNlbGYuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgcmV0dXJuX2Vycm5vOgorICAgICAgICAgICAgICAgIHJldHVybiBlLmVycm5vCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKKyAgICAgICAgICAgICAgICByYWlzZSBlCisgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIDAKKwogICAgIGRlZiBjb25uZWN0KHNlbGYsIGFkZHIpOgogICAgICAgICAiIiJDb25uZWN0cyB0byByZW1vdGUgQUREUiwgYW5kIHRoZW4gd3JhcHMgdGhlIGNvbm5lY3Rpb24gaW4KICAgICAgICAgYW4gU1NMIGNoYW5uZWwuIiIiCisgICAgICAgIHNlbGYuX3JlYWxfY29ubmVjdChhZGRyLCBGYWxzZSkKIAotICAgICAgICAjIEhlcmUgd2UgYXNzdW1lIHRoYXQgdGhlIHNvY2tldCBpcyBjbGllbnQtc2lkZSwgYW5kIG5vdAotICAgICAgICAjIGNvbm5lY3RlZCBhdCB0aGUgdGltZSBvZiB0aGUgY2FsbC4gIFdlIGNvbm5lY3QgaXQsIHRoZW4gd3JhcCBpdC4KLSAgICAgICAgaWYgc2VsZi5fc3Nsb2JqOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXR0ZW1wdCB0byBjb25uZWN0IGFscmVhZHktY29ubmVjdGVkIFNTTFNvY2tldCEiKQotICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQotICAgICAgICBzZWxmLl9zc2xvYmogPSBfc3NsLnNzbHdyYXAoc2VsZiwgRmFsc2UsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2VydF9yZXFzLCBzZWxmLnNzbF92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jYV9jZXJ0cykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKLSAgICAgICAgICAgIHJhaXNlCisgICAgZGVmIGNvbm5lY3RfZXgoc2VsZiwgYWRkcik6CisgICAgICAgICIiIkNvbm5lY3RzIHRvIHJlbW90ZSBBRERSLCBhbmQgdGhlbiB3cmFwcyB0aGUgY29ubmVjdGlvbiBpbgorICAgICAgICBhbiBTU0wgY2hhbm5lbC4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWxfY29ubmVjdChhZGRyLCBUcnVlKQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKICAgICAgICAgIiIiQWNjZXB0cyBhIG5ldyBjb25uZWN0aW9uIGZyb20gYSByZW1vdGUgY2xpZW50LCBhbmQgcmV0dXJucwpAQCAtMzUyLDYgKzQ3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zZWxmLmNlcnRfcmVxcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9c2VsZi5jYV9jZXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVycz1zZWxmLmNpcGhlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kb19oYW5kc2hha2Vfb25fY29ubmVjdCksCiAgICAgICAgICAgICAgICAgYWRkcikKQEAgLTM2NSwxMyArNDg4LDE0IEBACiAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIGNlcnRfcmVxcz1DRVJUX05PTkUsCiAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjIzLCBjYV9jZXJ0cz1Ob25lLAogICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PVRydWUsCi0gICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSk6CisgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9VHJ1ZSwgY2lwaGVycz1Ob25lKToKIAogICAgIHJldHVybiBTU0xTb2NrZXQoc29jaz1zb2NrLCBrZXlmaWxlPWtleWZpbGUsIGNlcnRmaWxlPWNlcnRmaWxlLAogICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9c2VydmVyX3NpZGUsIGNlcnRfcmVxcz1jZXJ0X3JlcXMsCiAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2xfdmVyc2lvbiwgY2FfY2VydHM9Y2FfY2VydHMsCiAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1kb19oYW5kc2hha2Vfb25fY29ubmVjdCwKLSAgICAgICAgICAgICAgICAgICAgIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPXN1cHByZXNzX3JhZ2dlZF9lb2ZzKQorICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9c3VwcHJlc3NfcmFnZ2VkX2VvZnMsCisgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPWNpcGhlcnMpCiAKICMgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucwogCmRpZmYgLS1naXQgYS9MaWIvc3RyaW5nLnB5IGIvTGliL3N0cmluZy5weQppbmRleCBhOTg5OGU4Li5lZjAzMzRjIDEwMDY0NAotLS0gYS9MaWIvc3RyaW5nLnB5CisrKyBiL0xpYi9zdHJpbmcucHkKQEAgLTE0LDYgKzE0LDggQEAKIAogIiIiCiAKK2ltcG9ydCBfc3RyaW5nCisKICMgU29tZSBzdHJpbmdzIGZvciBjdHlwZS1zdHlsZSBjaGFyYWN0ZXIgY2xhc3NpZmljYXRpb24KIHdoaXRlc3BhY2UgPSAnIFx0XG5cclx2XGYnCiBhc2NpaV9sb3dlcmNhc2UgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCkBAIC00MiwyOCArNDQsNiBAQAogICAgIHJldHVybiAoc2VwIG9yICcgJykuam9pbih4LmNhcGl0YWxpemUoKSBmb3IgeCBpbiBzLnNwbGl0KHNlcCkpCiAKIAotIyBDb25zdHJ1Y3QgYSB0cmFuc2xhdGlvbiBtYXAgZm9yIGJ5dGVzLnRyYW5zbGF0ZQotZGVmIG1ha2V0cmFucyhmcm06IGJ5dGVzLCB0bzogYnl0ZXMpIC0+IGJ5dGVzOgotICAgICIiIm1ha2V0cmFucyhmcm0sIHRvKSAtPiBieXRlcwotCi0gICAgUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgKGEgYnl0ZXMgb2JqZWN0IG9mIGxlbmd0aCAyNTYpCi0gICAgc3VpdGFibGUgZm9yIHVzZSBpbiBieXRlcy50cmFuc2xhdGUgd2hlcmUgZWFjaCBieXRlIGluIGZybSBpcwotICAgIG1hcHBlZCB0byB0aGUgYnl0ZSBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB0by4KLSAgICBUaGUgc3RyaW5ncyBmcm0gYW5kIHRvIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoLgotICAgICIiIgotICAgIGltcG9ydCB3YXJuaW5ncwotICAgIHdhcm5pbmdzLndhcm4oInN0cmluZy5tYWtldHJhbnMgaXMgZGVwcmVjYXRlZCwgdXNlIGJ5dGVzLm1ha2V0cmFucyBpbnN0ZWFkIiwKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBpZiBsZW4oZnJtKSAhPSBsZW4odG8pOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJtYWtldHJhbnMgYXJndW1lbnRzIG11c3QgaGF2ZSBzYW1lIGxlbmd0aCIpCi0gICAgaWYgbm90IChpc2luc3RhbmNlKGZybSwgYnl0ZXMpIGFuZCBpc2luc3RhbmNlKHRvLCBieXRlcykpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm1ha2V0cmFucyBhcmd1bWVudHMgbXVzdCBiZSBieXRlcyBvYmplY3RzIikKLSAgICBMID0gYnl0ZWFycmF5KHJhbmdlKDI1NikpCi0gICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKGZybSk6Ci0gICAgICAgIExbY10gPSB0b1tpXQotICAgIHJldHVybiBieXRlcyhMKQotCi0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBpbXBvcnQgcmUgYXMgX3JlCiAKQEAgLTEwMyw3ICs4Myw3IEBACiAgICAgICAgICAgICAgICAgJ2RlbGltJyA6IF9yZS5lc2NhcGUoY2xzLmRlbGltaXRlciksCiAgICAgICAgICAgICAgICAgJ2lkJyAgICA6IGNscy5pZHBhdHRlcm4sCiAgICAgICAgICAgICAgICAgfQotICAgICAgICBjbHMucGF0dGVybiA9IF9yZS5jb21waWxlKHBhdHRlcm4sIF9yZS5JR05PUkVDQVNFIHwgX3JlLlZFUkJPU0UpCisgICAgICAgIGNscy5wYXR0ZXJuID0gX3JlLmNvbXBpbGUocGF0dGVybiwgY2xzLmZsYWdzIHwgX3JlLlZFUkJPU0UpCiAKIAogY2xhc3MgVGVtcGxhdGUobWV0YWNsYXNzPV9UZW1wbGF0ZU1ldGFjbGFzcyk6CkBAIC0xMTEsNiArOTEsNyBAQAogCiAgICAgZGVsaW1pdGVyID0gJyQnCiAgICAgaWRwYXR0ZXJuID0gcidbX2Etel1bX2EtejAtOV0qJworICAgIGZsYWdzID0gX3JlLklHTk9SRUNBU0UKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZW1wbGF0ZSk6CiAgICAgICAgIHNlbGYudGVtcGxhdGUgPSB0ZW1wbGF0ZQpAQCAtMTY2LDI0ICsxNDcsMTggQEAKICAgICAgICAgICAgIG1hcHBpbmcgPSBhcmdzWzBdCiAgICAgICAgICMgSGVscGVyIGZ1bmN0aW9uIGZvciAuc3ViKCkKICAgICAgICAgZGVmIGNvbnZlcnQobW8pOgotICAgICAgICAgICAgbmFtZWQgPSBtby5ncm91cCgnbmFtZWQnKQorICAgICAgICAgICAgbmFtZWQgPSBtby5ncm91cCgnbmFtZWQnKSBvciBtby5ncm91cCgnYnJhY2VkJykKICAgICAgICAgICAgIGlmIG5hbWVkIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhpcyBpZGlvbSBpbnN0ZWFkIG9mIHN0cigpIGJlY2F1c2UgdGhlIGxhdHRlcgogICAgICAgICAgICAgICAgICAgICAjIHdpbGwgZmFpbCBpZiB2YWwgaXMgYSBVbmljb2RlIGNvbnRhaW5pbmcgbm9uLUFTQ0lJCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJXMnICUgKG1hcHBpbmdbbmFtZWRdLCkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRlbGltaXRlciArIG5hbWVkCi0gICAgICAgICAgICBicmFjZWQgPSBtby5ncm91cCgnYnJhY2VkJykKLSAgICAgICAgICAgIGlmIGJyYWNlZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJXMnICUgKG1hcHBpbmdbYnJhY2VkXSwpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWxpbWl0ZXIgKyAneycgKyBicmFjZWQgKyAnfScKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vLmdyb3VwKCkKICAgICAgICAgICAgIGlmIG1vLmdyb3VwKCdlc2NhcGVkJykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVsaW1pdGVyCiAgICAgICAgICAgICBpZiBtby5ncm91cCgnaW52YWxpZCcpIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRlbGltaXRlcgorICAgICAgICAgICAgICAgIHJldHVybiBtby5ncm91cCgpCiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnJlY29nbml6ZWQgbmFtZWQgZ3JvdXAgaW4gcGF0dGVybicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGF0dGVybikKICAgICAgICAgcmV0dXJuIHNlbGYucGF0dGVybi5zdWIoY29udmVydCwgc2VsZi50ZW1wbGF0ZSkKQEAgLTE5NSwxMCArMTcwLDEwIEBACiAjIHNlZSBQRVAgMzEwMSBmb3IgZGV0YWlscyBhbmQgcHVycG9zZSBvZiB0aGlzIGNsYXNzCiAKICMgVGhlIGhhcmQgcGFydHMgYXJlIHJldXNlZCBmcm9tIHRoZSBDIGltcGxlbWVudGF0aW9uLiAgVGhleSdyZSBleHBvc2VkIGFzICJfIgotIyBwcmVmaXhlZCBtZXRob2RzIG9mIHN0ciBhbmQgdW5pY29kZS4KKyMgcHJlZml4ZWQgbWV0aG9kcyBvZiBzdHIuCiAKLSMgVGhlIG92ZXJhbGwgcGFyc2VyIGlzIGltcGxlbWVudGVkIGluIHN0ci5fZm9ybWF0dGVyX3BhcnNlci4KLSMgVGhlIGZpZWxkIG5hbWUgcGFyc2VyIGlzIGltcGxlbWVudGVkIGluIHN0ci5fZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQKKyMgVGhlIG92ZXJhbGwgcGFyc2VyIGlzIGltcGxlbWVudGVkIGluIF9zdHJpbmcuZm9ybWF0dGVyX3BhcnNlci4KKyMgVGhlIGZpZWxkIG5hbWUgcGFyc2VyIGlzIGltcGxlbWVudGVkIGluIF9zdHJpbmcuZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQKIAogY2xhc3MgRm9ybWF0dGVyOgogICAgIGRlZiBmb3JtYXQoc2VsZiwgZm9ybWF0X3N0cmluZywgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTI2Nyw3ICsyNDIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHN0cih2YWx1ZSkKICAgICAgICAgZWxpZiBjb252ZXJzaW9uIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb252ZXJpb24gc3BlY2lmaWVyIHswIXN9Ii5mb3JtYXQoY29udmVyc2lvbikpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gY29udmVyc2lvbiBzcGVjaWZpZXIgezAhc30iLmZvcm1hdChjb252ZXJzaW9uKSkKIAogCiAgICAgIyByZXR1cm5zIGFuIGl0ZXJhYmxlIHRoYXQgY29udGFpbnMgdHVwbGVzIG9mIHRoZSBmb3JtOgpAQCAtMjc4LDcgKzI1Myw3IEBACiAgICAgIyBpZiBmaWVsZF9uYW1lIGlzIG5vdCBOb25lLCBpdCBpcyBsb29rZWQgdXAsIGZvcm1hdHRlZAogICAgICMgIHdpdGggZm9ybWF0X3NwZWMgYW5kIGNvbnZlcnNpb24gYW5kIHRoZW4gdXNlZAogICAgIGRlZiBwYXJzZShzZWxmLCBmb3JtYXRfc3RyaW5nKToKLSAgICAgICAgcmV0dXJuIGZvcm1hdF9zdHJpbmcuX2Zvcm1hdHRlcl9wYXJzZXIoKQorICAgICAgICByZXR1cm4gX3N0cmluZy5mb3JtYXR0ZXJfcGFyc2VyKGZvcm1hdF9zdHJpbmcpCiAKIAogICAgICMgZ2l2ZW4gYSBmaWVsZF9uYW1lLCBmaW5kIHRoZSBvYmplY3QgaXQgcmVmZXJlbmNlcy4KQEAgLTI4Nyw3ICsyNjIsNyBAQAogICAgICMgIHVzZWRfYXJnczogICAgYSBzZXQgb2Ygd2hpY2ggYXJncyBoYXZlIGJlZW4gdXNlZAogICAgICMgIGFyZ3MsIGt3YXJnczogYXMgcGFzc2VkIGluIHRvIHZmb3JtYXQKICAgICBkZWYgZ2V0X2ZpZWxkKHNlbGYsIGZpZWxkX25hbWUsIGFyZ3MsIGt3YXJncyk6Ci0gICAgICAgIGZpcnN0LCByZXN0ID0gZmllbGRfbmFtZS5fZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQoKQorICAgICAgICBmaXJzdCwgcmVzdCA9IF9zdHJpbmcuZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQoZmllbGRfbmFtZSkKIAogICAgICAgICBvYmogPSBzZWxmLmdldF92YWx1ZShmaXJzdCwgYXJncywga3dhcmdzKQogCmRpZmYgLS1naXQgYS9MaWIvc3RydWN0LnB5IGIvTGliL3N0cnVjdC5weQppbmRleCBkY2ExNWUyLi45YmZjMjNmIDEwMDY0NAotLS0gYS9MaWIvc3RydWN0LnB5CisrKyBiL0xpYi9zdHJ1Y3QucHkKQEAgLTEsNiArMSw2IEBACiBfX2FsbF9fID0gWwogICAgICMgRnVuY3Rpb25zCi0gICAgJ2NhbGNzaXplJywgJ3BhY2snLCAndW5wYWNrJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCisgICAgJ2NhbGNzaXplJywgJ3BhY2snLCAncGFja19pbnRvJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCiAKICAgICAjIENsYXNzZXMKICAgICAnU3RydWN0JywKZGlmZiAtLWdpdCBhL0xpYi9zdWJwcm9jZXNzLnB5IGIvTGliL3N1YnByb2Nlc3MucHkKaW5kZXggMjk5ZjczZS4uOTg1NmU2YSAxMDA2NDQKLS0tIGEvTGliL3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3N1YnByb2Nlc3MucHkKQEAgLTI3LDkgKzI3LDEwIEBACiAKIGNsYXNzIFBvcGVuKGFyZ3MsIGJ1ZnNpemU9MCwgZXhlY3V0YWJsZT1Ob25lLAogICAgICAgICAgICAgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAotICAgICAgICAgICAgcHJlZXhlY19mbj1Ob25lLCBjbG9zZV9mZHM9RmFsc2UsIHNoZWxsPUZhbHNlLAorICAgICAgICAgICAgcHJlZXhlY19mbj1Ob25lLCBjbG9zZV9mZHM9VHJ1ZSwgc2hlbGw9RmFsc2UsCiAgICAgICAgICAgICBjd2Q9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwKLSAgICAgICAgICAgIHN0YXJ0dXBpbmZvPU5vbmUsIGNyZWF0aW9uZmxhZ3M9MCk6CisgICAgICAgICAgICBzdGFydHVwaW5mbz1Ob25lLCBjcmVhdGlvbmZsYWdzPTAsCisgICAgICAgICAgICByZXN0b3JlX3NpZ25hbHM9VHJ1ZSwgc3RhcnRfbmV3X3Nlc3Npb249RmFsc2UsIHBhc3NfZmRzPSgpKToKIAogCiBBcmd1bWVudHMgYXJlOgpAQCAtMzgsMTIgKzM5LDEyIEBACiBwcm9ncmFtIHRvIGV4ZWN1dGUgaXMgbm9ybWFsbHkgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGFyZ3Mgc2VxdWVuY2Ugb3IKIHN0cmluZywgYnV0IGNhbiBiZSBleHBsaWNpdGx5IHNldCBieSB1c2luZyB0aGUgZXhlY3V0YWJsZSBhcmd1bWVudC4KIAotT24gVU5JWCwgd2l0aCBzaGVsbD1GYWxzZSAoZGVmYXVsdCk6IEluIHRoaXMgY2FzZSwgdGhlIFBvcGVuIGNsYXNzCitPbiBQT1NJWCwgd2l0aCBzaGVsbD1GYWxzZSAoZGVmYXVsdCk6IEluIHRoaXMgY2FzZSwgdGhlIFBvcGVuIGNsYXNzCiB1c2VzIG9zLmV4ZWN2cCgpIHRvIGV4ZWN1dGUgdGhlIGNoaWxkIHByb2dyYW0uICBhcmdzIHNob3VsZCBub3JtYWxseQogYmUgYSBzZXF1ZW5jZS4gIEEgc3RyaW5nIHdpbGwgYmUgdHJlYXRlZCBhcyBhIHNlcXVlbmNlIHdpdGggdGhlIHN0cmluZwogYXMgdGhlIG9ubHkgaXRlbSAodGhlIHByb2dyYW0gdG8gZXhlY3V0ZSkuCiAKLU9uIFVOSVgsIHdpdGggc2hlbGw9VHJ1ZTogSWYgYXJncyBpcyBhIHN0cmluZywgaXQgc3BlY2lmaWVzIHRoZQorT24gUE9TSVgsIHdpdGggc2hlbGw9VHJ1ZTogSWYgYXJncyBpcyBhIHN0cmluZywgaXQgc3BlY2lmaWVzIHRoZQogY29tbWFuZCBzdHJpbmcgdG8gZXhlY3V0ZSB0aHJvdWdoIHRoZSBzaGVsbC4gIElmIGFyZ3MgaXMgYSBzZXF1ZW5jZSwKIHRoZSBmaXJzdCBpdGVtIHNwZWNpZmllcyB0aGUgY29tbWFuZCBzdHJpbmcsIGFuZCBhbnkgYWRkaXRpb25hbCBpdGVtcwogd2lsbCBiZSB0cmVhdGVkIGFzIGFkZGl0aW9uYWwgc2hlbGwgYXJndW1lbnRzLgpAQCAtNzIsMTEgKzczLDE5IEBACiBzdGRlcnIgZGF0YSBmcm9tIHRoZSBhcHBsaWNhdGlvbnMgc2hvdWxkIGJlIGNhcHR1cmVkIGludG8gdGhlIHNhbWUKIGZpbGUgaGFuZGxlIGFzIGZvciBzdGRvdXQuCiAKLUlmIHByZWV4ZWNfZm4gaXMgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LCB0aGlzIG9iamVjdCB3aWxsIGJlIGNhbGxlZAotaW4gdGhlIGNoaWxkIHByb2Nlc3MganVzdCBiZWZvcmUgdGhlIGNoaWxkIGlzIGV4ZWN1dGVkLgorT24gUE9TSVgsIGlmIHByZWV4ZWNfZm4gaXMgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LCB0aGlzIG9iamVjdCB3aWxsIGJlCitjYWxsZWQgaW4gdGhlIGNoaWxkIHByb2Nlc3MganVzdCBiZWZvcmUgdGhlIGNoaWxkIGlzIGV4ZWN1dGVkLiAgVGhlIHVzZQorb2YgcHJlZXhlY19mbiBpcyBub3QgdGhyZWFkIHNhZmUsIHVzaW5nIGl0IGluIHRoZSBwcmVzZW5jZSBvZiB0aHJlYWRzCitjb3VsZCBsZWFkIHRvIGEgZGVhZGxvY2sgaW4gdGhlIGNoaWxkIHByb2Nlc3MgYmVmb3JlIHRoZSBuZXcgZXhlY3V0YWJsZQoraXMgZXhlY3V0ZWQuCiAKIElmIGNsb3NlX2ZkcyBpcyB0cnVlLCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgMCwgMSBhbmQgMiB3aWxsIGJlCi1jbG9zZWQgYmVmb3JlIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGV4ZWN1dGVkLgorY2xvc2VkIGJlZm9yZSB0aGUgY2hpbGQgcHJvY2VzcyBpcyBleGVjdXRlZC4gIFRoZSBkZWZhdWx0IGZvciBjbG9zZV9mZHMKK3ZhcmllcyBieSBwbGF0Zm9ybTogIEFsd2F5cyB0cnVlIG9uIFBPU0lYLiAgVHJ1ZSB3aGVuIHN0ZGluL3N0ZG91dC9zdGRlcnIKK2FyZSBOb25lIG9uIFdpbmRvd3MsIGZhbHNlIG90aGVyd2lzZS4KKworcGFzc19mZHMgaXMgYW4gb3B0aW9uYWwgc2VxdWVuY2Ugb2YgZmlsZSBkZXNjcmlwdG9ycyB0byBrZWVwIG9wZW4gYmV0d2VlbiB0aGUKK3BhcmVudCBhbmQgY2hpbGQuICBQcm92aWRpbmcgYW55IHBhc3NfZmRzIGltcGxpY2l0bHkgc2V0cyBjbG9zZV9mZHMgdG8gdHJ1ZS4KIAogaWYgc2hlbGwgaXMgdHJ1ZSwgdGhlIHNwZWNpZmllZCBjb21tYW5kIHdpbGwgYmUgZXhlY3V0ZWQgdGhyb3VnaCB0aGUKIHNoZWxsLgpAQCAtODQsMTIgKzkzLDIwIEBACiBJZiBjd2QgaXMgbm90IE5vbmUsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGNoYW5nZWQgdG8gY3dkCiBiZWZvcmUgdGhlIGNoaWxkIGlzIGV4ZWN1dGVkLgogCitPbiBQT1NJWCwgaWYgcmVzdG9yZV9zaWduYWxzIGlzIFRydWUgYWxsIHNpZ25hbHMgdGhhdCBQeXRob24gc2V0cyB0bworU0lHX0lHTiBhcmUgcmVzdG9yZWQgdG8gU0lHX0RGTCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBiZWZvcmUgdGhlIGV4ZWMuCitDdXJyZW50bHkgdGhpcyBpbmNsdWRlcyB0aGUgU0lHUElQRSwgU0lHWEZaIGFuZCBTSUdYRlNaIHNpZ25hbHMuICBUaGlzCitwYXJhbWV0ZXIgZG9lcyBub3RoaW5nIG9uIFdpbmRvd3MuCisKK09uIFBPU0lYLCBpZiBzdGFydF9uZXdfc2Vzc2lvbiBpcyBUcnVlLCB0aGUgc2V0c2lkKCkgc3lzdGVtIGNhbGwgd2lsbCBiZSBtYWRlCitpbiB0aGUgY2hpbGQgcHJvY2VzcyBwcmlvciB0byBleGVjdXRpbmcgdGhlIGNvbW1hbmQuCisKIElmIGVudiBpcyBub3QgTm9uZSwgaXQgZGVmaW5lcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbmV3CiBwcm9jZXNzLgogCiBJZiB1bml2ZXJzYWxfbmV3bGluZXMgaXMgdHJ1ZSwgdGhlIGZpbGUgb2JqZWN0cyBzdGRvdXQgYW5kIHN0ZGVyciBhcmUKIG9wZW5lZCBhcyBhIHRleHQgZmlsZXMsIGJ1dCBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBhbnkgb2YgJ1xuJywKLXRoZSBVbml4IGVuZC1vZi1saW5lIGNvbnZlbnRpb24sICdccicsIHRoZSBNYWNpbnRvc2ggY29udmVudGlvbiBvcgordGhlIFVuaXggZW5kLW9mLWxpbmUgY29udmVudGlvbiwgJ1xyJywgdGhlIG9sZCBNYWNpbnRvc2ggY29udmVudGlvbiBvcgogJ1xyXG4nLCB0aGUgV2luZG93cyBjb252ZW50aW9uLiAgQWxsIG9mIHRoZXNlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9ucwogYXJlIHNlZW4gYXMgJ1xuJyBieSB0aGUgUHl0aG9uIHByb2dyYW0uICBOb3RlOiBUaGlzIGZlYXR1cmUgaXMgb25seQogYXZhaWxhYmxlIGlmIFB5dGhvbiBpcyBidWlsdCB3aXRoIHVuaXZlcnNhbCBuZXdsaW5lIHN1cHBvcnQgKHRoZQpAQCAtMTEwLDcgKzEyNyw3IEBACiAKICAgICBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlIFBvcGVuIGNvbnN0cnVjdG9yLiAgRXhhbXBsZToKIAotICAgID4+PiByZXRjb2RlID0gY2FsbChbImxzIiwgIi1sIl0pCisgICAgPj4+IHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoWyJscyIsICItbCJdKQogCiBjaGVja19jYWxsKCpwb3BlbmFyZ3MsICoqa3dhcmdzKToKICAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cy4gIFdhaXQgZm9yIGNvbW1hbmQgdG8gY29tcGxldGUuICBJZiB0aGUKQEAgLTEyMCw3ICsxMzcsNyBAQAogCiAgICAgVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIHRoZSBQb3BlbiBjb25zdHJ1Y3Rvci4gIEV4YW1wbGU6CiAKLSAgICA+Pj4gY2hlY2tfY2FsbChbImxzIiwgIi1sIl0pCisgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbImxzIiwgIi1sIl0pCiAgICAgMAogCiBnZXRzdGF0dXNvdXRwdXQoY21kKToKQEAgLTIzMCw3ICsyNDcsNyBAQAogcmV0dXJuY29kZQogICAgIFRoZSBjaGlsZCByZXR1cm4gY29kZS4gIEEgTm9uZSB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2VzcwogICAgIGhhc24ndCB0ZXJtaW5hdGVkIHlldC4gIEEgbmVnYXRpdmUgdmFsdWUgLU4gaW5kaWNhdGVzIHRoYXQgdGhlCi0gICAgY2hpbGQgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIE4gKFVOSVggb25seSkuCisgICAgY2hpbGQgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsIE4gKFBPU0lYIG9ubHkpLgogCiAKIFJlcGxhY2luZyBvbGRlciBmdW5jdGlvbnMgd2l0aCB0aGUgc3VicHJvY2VzcyBtb2R1bGUKQEAgLTMyNiw2ICszNDMsOCBAQAogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IGdjCiBpbXBvcnQgc2lnbmFsCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGVycm5vCiAKICMgRXhjZXB0aW9uIGNsYXNzZXMgdXNlZCBieSB0aGlzIG1vZHVsZS4KQEAgLTM2MSwyMiArMzgwLDQ3IEBACiAgICAgaW1wb3J0IGZjbnRsCiAgICAgaW1wb3J0IHBpY2tsZQogCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgX3Bvc2l4c3VicHJvY2VzcyA9IE5vbmUKKyAgICAgICAgd2FybmluZ3Mud2FybigiVGhlIF9wb3NpeHN1YnByb2Nlc3MgbW9kdWxlIGlzIG5vdCBiZWluZyB1c2VkLiAiCisgICAgICAgICAgICAgICAgICAgICAgIkNoaWxkIHByb2Nlc3MgcmVsaWFiaWxpdHkgbWF5IHN1ZmZlciBpZiB5b3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAicHJvZ3JhbSB1c2VzIHRocmVhZHMuIiwgUnVudGltZVdhcm5pbmcpCisKICAgICAjIFdoZW4gc2VsZWN0IG9yIHBvbGwgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBmaWxlIGlzIHdyaXRhYmxlLAogICAgICMgd2UgY2FuIHdyaXRlIHVwIHRvIF9QSVBFX0JVRiBieXRlcyB3aXRob3V0IHJpc2sgb2YgYmxvY2tpbmcuCiAgICAgIyBQT1NJWCBkZWZpbmVzIFBJUEVfQlVGIGFzID49IDUxMi4KICAgICBfUElQRV9CVUYgPSBnZXRhdHRyKHNlbGVjdCwgJ1BJUEVfQlVGJywgNTEyKQogCisgICAgX0ZEX0NMT0VYRUMgPSBnZXRhdHRyKGZjbnRsLCAnRkRfQ0xPRVhFQycsIDEpCisKKyAgICBkZWYgX3NldF9jbG9leGVjKGZkLCBjbG9leGVjKToKKyAgICAgICAgb2xkID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpCisgICAgICAgIGlmIGNsb2V4ZWM6CisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgb2xkIHwgX0ZEX0NMT0VYRUMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgb2xkICYgfl9GRF9DTE9FWEVDKQorCisgICAgaWYgX3Bvc2l4c3VicHJvY2VzczoKKyAgICAgICAgX2NyZWF0ZV9waXBlID0gX3Bvc2l4c3VicHJvY2Vzcy5jbG9leGVjX3BpcGUKKyAgICBlbHNlOgorICAgICAgICBkZWYgX2NyZWF0ZV9waXBlKCk6CisgICAgICAgICAgICBmZHMgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIF9zZXRfY2xvZXhlYyhmZHNbMF0sIFRydWUpCisgICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmRzWzFdLCBUcnVlKQorICAgICAgICAgICAgcmV0dXJuIGZkcwogCiBfX2FsbF9fID0gWyJQb3BlbiIsICJQSVBFIiwgIlNURE9VVCIsICJjYWxsIiwgImNoZWNrX2NhbGwiLCAiZ2V0c3RhdHVzb3V0cHV0IiwKICAgICAgICAgICAgImdldG91dHB1dCIsICJjaGVja19vdXRwdXQiLCAiQ2FsbGVkUHJvY2Vzc0Vycm9yIl0KIAogaWYgbXN3aW5kb3dzOgotICAgIGZyb20gX3N1YnByb2Nlc3MgaW1wb3J0IChDUkVBVEVfTkVXX0NPTlNPTEUsCisgICAgZnJvbSBfc3VicHJvY2VzcyBpbXBvcnQgKENSRUFURV9ORVdfQ09OU09MRSwgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERfSU5QVVRfSEFORExFLCBTVERfT1VUUFVUX0hBTkRMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VSUk9SX0hBTkRMRSwgU1dfSElERSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBUlRGX1VTRVNUREhBTkRMRVMsIFNUQVJURl9VU0VTSE9XV0lORE9XKQogICAgICAgICAgICAgICAgIAotICAgIF9fYWxsX18uZXh0ZW5kKFsiQ1JFQVRFX05FV19DT05TT0xFIiwKKyAgICBfX2FsbF9fLmV4dGVuZChbIkNSRUFURV9ORVdfQ09OU09MRSIsICJDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVAiLAogICAgICAgICAgICAgICAgICAgICAiU1REX0lOUFVUX0hBTkRMRSIsICJTVERfT1VUUFVUX0hBTkRMRSIsCiAgICAgICAgICAgICAgICAgICAgICJTVERfRVJST1JfSEFORExFIiwgIlNXX0hJREUiLAogICAgICAgICAgICAgICAgICAgICAiU1RBUlRGX1VTRVNUREhBTkRMRVMiLCAiU1RBUlRGX1VTRVNIT1dXSU5ET1ciXSkKQEAgLTU0Nyw3ICs1OTEsNyBAQAogCiAjIFZhcmlvdXMgdG9vbHMgZm9yIGV4ZWN1dGluZyBjb21tYW5kcyBhbmQgbG9va2luZyBhdCB0aGVpciBvdXRwdXQgYW5kIHN0YXR1cy4KICMKLSMgTkIgVGhpcyBvbmx5IHdvcmtzIChhbmQgaXMgb25seSByZWxldmFudCkgZm9yIFVOSVguCisjIE5CIFRoaXMgb25seSB3b3JrcyAoYW5kIGlzIG9ubHkgcmVsZXZhbnQpIGZvciBQT1NJWC4KIAogZGVmIGdldHN0YXR1c291dHB1dChjbWQpOgogICAgICIiIlJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KQEAgLTU4NywxMiArNjMxLDE3IEBACiAgICAgcmV0dXJuIGdldHN0YXR1c291dHB1dChjbWQpWzFdCiAKIAorX1BMQVRGT1JNX0RFRkFVTFRfQ0xPU0VfRkRTID0gb2JqZWN0KCkKKworCiBjbGFzcyBQb3BlbihvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBidWZzaXplPTAsIGV4ZWN1dGFibGU9Tm9uZSwKICAgICAgICAgICAgICAgICAgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAotICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPU5vbmUsIGNsb3NlX2Zkcz1GYWxzZSwgc2hlbGw9RmFsc2UsCi0gICAgICAgICAgICAgICAgIGN3ZD1Ob25lLCBlbnY9Tm9uZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLAotICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz1Ob25lLCBjcmVhdGlvbmZsYWdzPTApOgorICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPU5vbmUsIGNsb3NlX2Zkcz1fUExBVEZPUk1fREVGQVVMVF9DTE9TRV9GRFMsCisgICAgICAgICAgICAgICAgIHNoZWxsPUZhbHNlLCBjd2Q9Tm9uZSwgZW52PU5vbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89Tm9uZSwgY3JlYXRpb25mbGFncz0wLAorICAgICAgICAgICAgICAgICByZXN0b3JlX3NpZ25hbHM9VHJ1ZSwgc3RhcnRfbmV3X3Nlc3Npb249RmFsc2UsCisgICAgICAgICAgICAgICAgIHBhc3NfZmRzPSgpKToKICAgICAgICAgIiIiQ3JlYXRlIG5ldyBQb3BlbiBpbnN0YW5jZS4iIiIKICAgICAgICAgX2NsZWFudXAoKQogCkBAIC02MDYsMTIgKzY1NSwyNCBAQAogICAgICAgICAgICAgaWYgcHJlZXhlY19mbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJwcmVleGVjX2ZuIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm1zIikKLSAgICAgICAgICAgIGlmIGNsb3NlX2ZkcyBhbmQgKHN0ZGluIGlzIG5vdCBOb25lIG9yIHN0ZG91dCBpcyBub3QgTm9uZSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjbG9zZV9mZHMgaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbGF0Zm9ybXMgaWYgeW91IHJlZGlyZWN0IHN0ZGluL3N0ZG91dC9zdGRlcnIiKQorICAgICAgICAgICAgYW55X3N0ZGlvX3NldCA9IChzdGRpbiBpcyBub3QgTm9uZSBvciBzdGRvdXQgaXMgbm90IE5vbmUgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgaWYgY2xvc2VfZmRzIGlzIF9QTEFURk9STV9ERUZBVUxUX0NMT1NFX0ZEUzoKKyAgICAgICAgICAgICAgICBpZiBhbnlfc3RkaW9fc2V0OgorICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHMgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlX2ZkcyA9IFRydWUKKyAgICAgICAgICAgIGVsaWYgY2xvc2VfZmRzIGFuZCBhbnlfc3RkaW9fc2V0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2VfZmRzIGlzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cyBwbGF0Zm9ybXMiCisgICAgICAgICAgICAgICAgICAgICAgICAiIGlmIHlvdSByZWRpcmVjdCBzdGRpbi9zdGRvdXQvc3RkZXJyIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgUE9TSVgKKyAgICAgICAgICAgIGlmIGNsb3NlX2ZkcyBpcyBfUExBVEZPUk1fREVGQVVMVF9DTE9TRV9GRFM6CisgICAgICAgICAgICAgICAgY2xvc2VfZmRzID0gVHJ1ZQorICAgICAgICAgICAgaWYgcGFzc19mZHMgYW5kIG5vdCBjbG9zZV9mZHM6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigicGFzc19mZHMgb3ZlcnJpZGluZyBjbG9zZV9mZHMuIiwgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgY2xvc2VfZmRzID0gVHJ1ZQogICAgICAgICAgICAgaWYgc3RhcnR1cGluZm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RhcnR1cGluZm8gaXMgb25seSBzdXBwb3J0ZWQgb24gV2luZG93cyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxhdGZvcm1zIikKQEAgLTYzOCw0NiArNjk5LDcxIEBACiAgICAgICAgICMgT24gUE9TSVgsIHRoZSBjaGlsZCBvYmplY3RzIGFyZSBmaWxlIGRlc2NyaXB0b3JzLiAgT24KICAgICAgICAgIyBXaW5kb3dzLCB0aGVzZSBhcmUgV2luZG93cyBmaWxlIGhhbmRsZXMuICBUaGUgcGFyZW50IG9iamVjdHMKICAgICAgICAgIyBhcmUgZmlsZSBkZXNjcmlwdG9ycyBvbiBib3RoIHBsYXRmb3Jtcy4gIFRoZSBwYXJlbnQgb2JqZWN0cwotICAgICAgICAjIGFyZSBOb25lIHdoZW4gbm90IHVzaW5nIFBJUEVzLiBUaGUgY2hpbGQgb2JqZWN0cyBhcmUgTm9uZQorICAgICAgICAjIGFyZSAtMSB3aGVuIG5vdCB1c2luZyBQSVBFcy4gVGhlIGNoaWxkIG9iamVjdHMgYXJlIC0xCiAgICAgICAgICMgd2hlbiBub3QgcmVkaXJlY3RpbmcuCiAKICAgICAgICAgKHAyY3JlYWQsIHAyY3dyaXRlLAogICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUsCiAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSkgPSBzZWxmLl9nZXRfaGFuZGxlcyhzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCiAKLSAgICAgICAgc2VsZi5fZXhlY3V0ZV9jaGlsZChhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUpCisgICAgICAgICMgV2Ugd3JhcCBPUyBoYW5kbGVzICpiZWZvcmUqIGxhdW5jaGluZyB0aGUgY2hpbGQsIG90aGVyd2lzZSBhCisgICAgICAgICMgcXVpY2tseSB0ZXJtaW5hdGluZyBjaGlsZCBjb3VsZCBtYWtlIG91ciBmZHMgdW53cmFwcGFibGUKKyAgICAgICAgIyAoc2VlICM4NDU4KS4KIAogICAgICAgICBpZiBtc3dpbmRvd3M6Ci0gICAgICAgICAgICBpZiBwMmN3cml0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHAyY3dyaXRlICE9IC0xOgogICAgICAgICAgICAgICAgIHAyY3dyaXRlID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHAyY3dyaXRlLkRldGFjaCgpLCAwKQotICAgICAgICAgICAgaWYgYzJwcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGMycHJlYWQgIT0gLTE6CiAgICAgICAgICAgICAgICAgYzJwcmVhZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShjMnByZWFkLkRldGFjaCgpLCAwKQotICAgICAgICAgICAgaWYgZXJycmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGVycnJlYWQgIT0gLTE6CiAgICAgICAgICAgICAgICAgZXJycmVhZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShlcnJyZWFkLkRldGFjaCgpLCAwKQogCi0gICAgICAgIGlmIHAyY3dyaXRlIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBwMmN3cml0ZSAhPSAtMToKICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBpby5vcGVuKHAyY3dyaXRlLCAnd2InLCBidWZzaXplKQogICAgICAgICAgICAgaWYgc2VsZi51bml2ZXJzYWxfbmV3bGluZXM6CiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbiA9IGlvLlRleHRJT1dyYXBwZXIoc2VsZi5zdGRpbikKLSAgICAgICAgaWYgYzJwcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgYzJwcmVhZCAhPSAtMToKICAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gaW8ub3BlbihjMnByZWFkLCAncmInLCBidWZzaXplKQogICAgICAgICAgICAgaWYgdW5pdmVyc2FsX25ld2xpbmVzOgogICAgICAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gaW8uVGV4dElPV3JhcHBlcihzZWxmLnN0ZG91dCkKLSAgICAgICAgaWYgZXJycmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZXJycmVhZCAhPSAtMToKICAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gaW8ub3BlbihlcnJyZWFkLCAncmInLCBidWZzaXplKQogICAgICAgICAgICAgaWYgdW5pdmVyc2FsX25ld2xpbmVzOgogICAgICAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gaW8uVGV4dElPV3JhcHBlcihzZWxmLnN0ZGVycikKIAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9leGVjdXRlX2NoaWxkKGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHMsIGN3ZCwgZW52LCB1bml2ZXJzYWxfbmV3bGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZV9zaWduYWxzLCBzdGFydF9uZXdfc2Vzc2lvbikKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBDbGVhbnVwIGlmIHRoZSBjaGlsZCBmYWlsZWQgc3RhcnRpbmcKKyAgICAgICAgICAgIGZvciBmIGluIGZpbHRlcihOb25lLCBbc2VsZi5zdGRpbiwgc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyXSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgRUJBREYgb3Igb3RoZXIgZXJyb3JzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJhaXNlCisKIAogICAgIGRlZiBfdHJhbnNsYXRlX25ld2xpbmVzKHNlbGYsIGRhdGEsIGVuY29kaW5nKToKICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShiIlxyXG4iLCBiIlxuIikucmVwbGFjZShiIlxyIiwgYiJcbiIpCiAgICAgICAgIHJldHVybiBkYXRhLmRlY29kZShlbmNvZGluZykKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLnN0ZGVycjoKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5zdGRpbjoKKyAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQogCiAgICAgZGVmIF9fZGVsX18oc2VsZiwgX21heHNpemU9c3lzLm1heHNpemUsIF9hY3RpdmU9X2FjdGl2ZSk6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9jaGlsZF9jcmVhdGVkOgpAQCAtNzM3LDExICs4MjMsMTEgQEAKICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLCBjMnByZWFkLCBjMnB3cml0ZSwgZXJycmVhZCwgZXJyd3JpdGUKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZSBhbmQgc3Rkb3V0IGlzIE5vbmUgYW5kIHN0ZGVyciBpcyBOb25lOgotICAgICAgICAgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEpCiAKLSAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gTm9uZSwgTm9uZQotICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBOb25lLCBOb25lCi0gICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IE5vbmUsIE5vbmUKKyAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gLTEsIC0xCisgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IC0xLCAtMQorICAgICAgICAgICAgZXJycmVhZCwgZXJyd3JpdGUgPSAtMSwgLTEKIAogICAgICAgICAgICAgaWYgc3RkaW4gaXMgTm9uZToKICAgICAgICAgICAgICAgICBwMmNyZWFkID0gX3N1YnByb2Nlc3MuR2V0U3RkSGFuZGxlKF9zdWJwcm9jZXNzLlNURF9JTlBVVF9IQU5ETEUpCkBAIC04MTQsMjAgKzkwMCwyMyBAQAogCiAKICAgICAgICAgZGVmIF9leGVjdXRlX2NoaWxkKHNlbGYsIGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwgZW52LCB1bml2ZXJzYWxfbmV3bGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVudXNlZF9yZXN0b3JlX3NpZ25hbHMsIHVudXNlZF9zdGFydF9uZXdfc2Vzc2lvbik6CiAgICAgICAgICAgICAiIiJFeGVjdXRlIHByb2dyYW0gKE1TIFdpbmRvd3MgdmVyc2lvbikiIiIKIAorICAgICAgICAgICAgYXNzZXJ0IG5vdCBwYXNzX2ZkcywgInBhc3NfZmRzIG5vdCBzdXBwb3J0ZWQgb24gV2luZG93cy4iCisKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsIHN0cik6CiAgICAgICAgICAgICAgICAgYXJncyA9IGxpc3QyY21kbGluZShhcmdzKQogCiAgICAgICAgICAgICAjIFByb2Nlc3Mgc3RhcnR1cCBkZXRhaWxzCiAgICAgICAgICAgICBpZiBzdGFydHVwaW5mbyBpcyBOb25lOgogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvID0gU1RBUlRVUElORk8oKQotICAgICAgICAgICAgaWYgTm9uZSBub3QgaW4gKHAyY3JlYWQsIGMycHdyaXRlLCBlcnJ3cml0ZSk6CisgICAgICAgICAgICBpZiAtMSBub3QgaW4gKHAyY3JlYWQsIGMycHdyaXRlLCBlcnJ3cml0ZSk6CiAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8uZHdGbGFncyB8PSBfc3VicHJvY2Vzcy5TVEFSVEZfVVNFU1RESEFORExFUwogICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLmhTdGRJbnB1dCA9IHAyY3JlYWQKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby5oU3RkT3V0cHV0ID0gYzJwd3JpdGUKQEAgLTg3NywxMSArOTY2LDExIEBACiAgICAgICAgICAgICAgICAgIyBvdXRwdXQgcGlwZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGlzIHByb2Nlc3Mgb3IgZWxzZSB0aGUKICAgICAgICAgICAgICAgICAjIHBpcGUgd2lsbCBub3QgY2xvc2Ugd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyBleGl0cyBhbmQgdGhlCiAgICAgICAgICAgICAgICAgIyBSZWFkRmlsZSB3aWxsIGhhbmcuCi0gICAgICAgICAgICAgICAgaWYgcDJjcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBwMmNyZWFkICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBwMmNyZWFkLkNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgYzJwd3JpdGUuQ2xvc2UoKQotICAgICAgICAgICAgICAgIGlmIGVycndyaXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGVycndyaXRlICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBlcnJ3cml0ZS5DbG9zZSgpCiAKICAgICAgICAgICAgICMgUmV0YWluIHRoZSBwcm9jZXNzIGhhbmRsZSwgYnV0IGNsb3NlIHRoZSB0aHJlYWQgaGFuZGxlCkBAIC05MTksNiArMTAwOCw3IEBACiAKICAgICAgICAgZGVmIF9yZWFkZXJ0aHJlYWQoc2VsZiwgZmgsIGJ1ZmZlcik6CiAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGZoLnJlYWQoKSkKKyAgICAgICAgICAgIGZoLmNsb3NlKCkKIAogCiAgICAgICAgIGRlZiBfY29tbXVuaWNhdGUoc2VsZiwgaW5wdXQpOgpAQCAtOTY2LDggKzEwNTYsMTIgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICAgICAgaWYgc2lnID09IHNpZ25hbC5TSUdURVJNOgogICAgICAgICAgICAgICAgIHNlbGYudGVybWluYXRlKCkKKyAgICAgICAgICAgIGVsaWYgc2lnID09IHNpZ25hbC5DVFJMX0NfRVZFTlQ6CisgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLkNUUkxfQ19FVkVOVCkKKyAgICAgICAgICAgIGVsaWYgc2lnID09IHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5UOgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5UKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IFNJR1RFUk0gaXMgc3VwcG9ydGVkIG9uIFdpbmRvd3MiKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIHNpZ25hbDoge30iLmZvcm1hdChzaWcpKQogCiAgICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CiAgICAgICAgICAgICAiIiJUZXJtaW5hdGVzIHRoZSBwcm9jZXNzCkBAIC05ODQsMTQgKzEwNzgsMTQgQEAKICAgICAgICAgICAgICIiIkNvbnN0cnVjdCBhbmQgcmV0dXJuIHR1cGxlIHdpdGggSU8gb2JqZWN0czoKICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLCBjMnByZWFkLCBjMnB3cml0ZSwgZXJycmVhZCwgZXJyd3JpdGUKICAgICAgICAgICAgICIiIgotICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBOb25lLCBOb25lCi0gICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IE5vbmUsIE5vbmUKLSAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gTm9uZSwgTm9uZQorICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSAtMSwgLTEKKyAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gLTEsIC0xCisgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IC0xLCAtMQogCiAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gUElQRToKLSAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IG9zLnBpcGUoKQorICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRpbiwgaW50KToKICAgICAgICAgICAgICAgICBwMmNyZWFkID0gc3RkaW4KICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDAxLDcgKzEwOTUsNyBAQAogICAgICAgICAgICAgaWYgc3Rkb3V0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRvdXQgPT0gUElQRToKLSAgICAgICAgICAgICAgICBjMnByZWFkLCBjMnB3cml0ZSA9IG9zLnBpcGUoKQorICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gX2NyZWF0ZV9waXBlKCkKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzdGRvdXQsIGludCk6CiAgICAgICAgICAgICAgICAgYzJwd3JpdGUgPSBzdGRvdXQKICAgICAgICAgICAgIGVsc2U6CkBAIC0xMDExLDcgKzExMDUsNyBAQAogICAgICAgICAgICAgaWYgc3RkZXJyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gUElQRToKLSAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IG9zLnBpcGUoKQorICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gX2NyZWF0ZV9waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IFNURE9VVDoKICAgICAgICAgICAgICAgICBlcnJ3cml0ZSA9IGMycHdyaXRlCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc3RkZXJyLCBpbnQpOgpAQCAtMTAyNSwzMCArMTExOSwyMyBAQAogICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSkKIAogCi0gICAgICAgIGRlZiBfc2V0X2Nsb2V4ZWNfZmxhZyhzZWxmLCBmZCwgY2xvZXhlYz1UcnVlKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjbG9leGVjX2ZsYWcgPSBmY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgY2xvZXhlY19mbGFnID0gMQotCi0gICAgICAgICAgICBvbGQgPSBmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkKLSAgICAgICAgICAgIGlmIGNsb2V4ZWM6Ci0gICAgICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCB8IGNsb2V4ZWNfZmxhZykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCAmIH5jbG9leGVjX2ZsYWcpCi0KLQotICAgICAgICBkZWYgX2Nsb3NlX2ZkcyhzZWxmLCBidXQpOgotICAgICAgICAgICAgb3MuY2xvc2VyYW5nZSgzLCBidXQpCi0gICAgICAgICAgICBvcy5jbG9zZXJhbmdlKGJ1dCArIDEsIE1BWEZEKQorICAgICAgICBkZWYgX2Nsb3NlX2ZkcyhzZWxmLCBmZHNfdG9fa2VlcCk6CisgICAgICAgICAgICBzdGFydF9mZCA9IDMKKyAgICAgICAgICAgIGZvciBmZCBpbiBzb3J0ZWQoZmRzX3RvX2tlZXApOgorICAgICAgICAgICAgICAgIGlmIGZkID49IHN0YXJ0X2ZkOgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKHN0YXJ0X2ZkLCBmZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfZmQgPSBmZCArIDEKKyAgICAgICAgICAgIGlmIHN0YXJ0X2ZkIDw9IE1BWEZEOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlcmFuZ2Uoc3RhcnRfZmQsIE1BWEZEKQogCiAKICAgICAgICAgZGVmIF9leGVjdXRlX2NoaWxkKHNlbGYsIGFyZ3MsIGV4ZWN1dGFibGUsIHByZWV4ZWNfZm4sIGNsb3NlX2ZkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwgZW52LCB1bml2ZXJzYWxfbmV3bGluZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsIHVuaXZlcnNhbF9uZXdsaW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvLCBjcmVhdGlvbmZsYWdzLCBzaGVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVfc2lnbmFscywgc3RhcnRfbmV3X3Nlc3Npb24pOgogICAgICAgICAgICAgIiIiRXhlY3V0ZSBwcm9ncmFtIChQT1NJWCB2ZXJzaW9uKSIiIgogCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZ3MsIHN0cik6CkBAIC0xMDY0LDEwNCArMTE1MSwxNjUgQEAKICAgICAgICAgICAgIGlmIGV4ZWN1dGFibGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICBleGVjdXRhYmxlID0gYXJnc1swXQogCi0gICAgICAgICAgICAjIEZvciB0cmFuc2ZlcnJpbmcgcG9zc2libGUgZXhlYyBmYWlsdXJlIGZyb20gY2hpbGQgdG8gcGFyZW50Ci0gICAgICAgICAgICAjIFRoZSBmaXJzdCBjaGFyIHNwZWNpZmllcyB0aGUgZXhjZXB0aW9uIHR5cGU6IDAgbWVhbnMKLSAgICAgICAgICAgICMgT1NFcnJvciwgMSBtZWFucyBzb21lIG90aGVyIGVycm9yLgotICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gb3MucGlwZSgpCisgICAgICAgICAgICAjIEZvciB0cmFuc2ZlcnJpbmcgcG9zc2libGUgZXhlYyBmYWlsdXJlIGZyb20gY2hpbGQgdG8gcGFyZW50LgorICAgICAgICAgICAgIyBEYXRhIGZvcm1hdDogImV4Y2VwdGlvbiBuYW1lOmhleCBlcnJubzpkZXNjcmlwdGlvbiIKKyAgICAgICAgICAgICMgUGlja2xlIGlzIG5vdCB1c2VkOyBpdCBpcyBjb21wbGV4IGFuZCBpbnZvbHZlcyBtZW1vcnkgYWxsb2NhdGlvbi4KKyAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IF9jcmVhdGVfcGlwZSgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXRfY2xvZXhlY19mbGFnKGVycnBpcGVfd3JpdGUpCiAKLSAgICAgICAgICAgICAgICAgICAgZ2Nfd2FzX2VuYWJsZWQgPSBnYy5pc2VuYWJsZWQoKQotICAgICAgICAgICAgICAgICAgICAjIERpc2FibGUgZ2MgdG8gYXZvaWQgYnVnIHdoZXJlIGdjIC0+IGZpbGVfZGVhbGxvYyAtPgotICAgICAgICAgICAgICAgICAgICAjIHdyaXRlIHRvIHN0ZGVyciAtPiBoYW5nLiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMzNgotICAgICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5waWQgPSBvcy5mb3JrKCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpZiBfcG9zaXhzdWJwcm9jZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBtdXN0IGF2b2lkIGNvbXBsZXggd29yayB0aGF0IGNvdWxkIGludm9sdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbWFsbG9jIG9yIGZyZWUgaW4gdGhlIGNoaWxkIHByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcG90ZW50aWFsIGRlYWRsb2NrcywgdGh1cyB3ZSBkbyBhbGwgdGhpcyBoZXJlLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBhbmQgcGFzcyBpdCB0byBmb3JrX2V4ZWMoKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52X2xpc3QgPSBbb3MuZnNlbmNvZGUoaykgKyBiJz0nICsgb3MuZnNlbmNvZGUodikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBlbnYuaXRlbXMoKV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52X2xpc3QgPSBOb25lICAjIFVzZSBleGVjdiBpbnN0ZWFkIG9mIGV4ZWN2ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBvcy5mc2VuY29kZShleGVjdXRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5kaXJuYW1lKGV4ZWN1dGFibGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGVfbGlzdCA9IChleGVjdXRhYmxlLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIG9zLl9leGVjdnBlKCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0YWJsZV9saXN0ID0gdHVwbGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5mc2VuY29kZShkaXIpLCBleGVjdXRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGlyIGluIG9zLmdldF9leGVjX3BhdGgoZW52KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZkc190b19rZWVwID0gc2V0KHBhc3NfZmRzKQorICAgICAgICAgICAgICAgICAgICAgICAgZmRzX3RvX2tlZXAuYWRkKGVycnBpcGVfd3JpdGUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBpZCA9IF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLCBleGVjdXRhYmxlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcywgc29ydGVkKGZkc190b19rZWVwKSwgY3dkLCBlbnZfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUsIGMycHJlYWQsIGMycHdyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlX3NpZ25hbHMsIHN0YXJ0X25ld19zZXNzaW9uLCBwcmVleGVjX2ZuKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBQdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbjogSXQgaXMgbm90IHRocmVhZCBzYWZlLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGltcGxlbWVudGF0aW9uIG1heSBkZWFkbG9jayBpbiB0aGUgY2hpbGQgaWYgeW91cgorICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXJlbnQgcHJvY2VzcyBoYXMgYW55IG90aGVyIHRocmVhZHMgcnVubmluZy4KKworICAgICAgICAgICAgICAgICAgICAgICAgZ2Nfd2FzX2VuYWJsZWQgPSBnYy5pc2VuYWJsZWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIGdjIHRvIGF2b2lkIGJ1ZyB3aGVyZSBnYyAtPiBmaWxlX2RlYWxsb2MgLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgd3JpdGUgdG8gc3RkZXJyIC0+IGhhbmcuICBTZWUgaXNzdWUxMzM2CisgICAgICAgICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdjX3dhc19lbmFibGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGlsZF9jcmVhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENoaWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHBhcmVudCdzIHBpcGUgZW5kcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwMmN3cml0ZSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKHAyY3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMnByZWFkICE9IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYzJwcmVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJycmVhZCAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnJlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIER1cCBmZHMgZm9yIGNoaWxkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBfZHVwMihhLCBiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZHVwMigpIHJlbW92ZXMgdGhlIENMT0VYRUMgZmxhZyBidXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgbXVzdCBkbyBpdCBvdXJzZWx2ZXMgaWYgZHVwMigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvdWxkIGJlIGEgbm8tb3AgKGlzc3VlICMxMDgwNikuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhID09IGI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NldF9jbG9leGVjKGEsIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBhICE9IC0xOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R1cDIocDJjcmVhZCwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R1cDIoYzJwd3JpdGUsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdXAyKGVycndyaXRlLCAyKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2xvc2UgcGlwZSBmZHMuICBNYWtlIHN1cmUgd2UgZG9uJ3QgY2xvc2UgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2FtZSBmZCBtb3JlIHRoYW4gb25jZSwgb3Igc3RhbmRhcmQgZmRzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWQgPSBzZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gW3AyY3JlYWQsIGMycHdyaXRlLCBlcnJ3cml0ZV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmZCA+IDIgYW5kIGZkIG5vdCBpbiBjbG9zZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkLmFkZChmZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIGFsbCBvdGhlciBmZHMsIGlmIGFza2VkIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZV9mZHM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZHNfdG9fa2VlcCA9IHNldChwYXNzX2ZkcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkc190b19rZWVwLmFkZChlcnJwaXBlX3dyaXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2VfZmRzKGZkc190b19rZWVwKQorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3dkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBhIGNvcHkgb2YgUHl0aG9uL3B5dGhvbnJ1bi5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgX1B5X1Jlc3RvcmVTaWduYWxzKCkuICBJZiB0aGF0IHdlcmUgZXhwb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFzIGEgc3lzLl9weV9yZXN0b3Jlc2lnbmFscyBmdW5jIGl0IHdvdWxkIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYmV0dGVyLi4gYnV0IHRoaXMgcHVyZSBweXRob24gaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpc24ndCBsaWtlbHkgdG8gYmUgdXNlZCBtdWNoIGFueW1vcmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3RvcmVfc2lnbmFsczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbHMgPSAoJ1NJR1BJUEUnLCAnU0lHWEZaJywgJ1NJR1hGU1onKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNpZyBpbiBzaWduYWxzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2lnbmFsLCBzaWcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKGdldGF0dHIoc2lnbmFsLCBzaWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5TSUdfREZMKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0X25ld19zZXNzaW9uIGFuZCBoYXNhdHRyKG9zLCAnc2V0c2lkJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zZXRzaWQoKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByZWV4ZWNfZm46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuKCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnYgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmV4ZWN2cChleGVjdXRhYmxlLCBhcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZXhlY3ZwZShleGVjdXRhYmxlLCBhcmdzLCBlbnYpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUgPSBzeXMuZXhjX2luZm8oKVs6Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjX3ZhbHVlLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19udW0gPSBleGNfdmFsdWUuZXJybm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm9fbnVtID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICclczoleDolcycgJSAoZXhjX3R5cGUuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJub19udW0sIGV4Y192YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmVuY29kZShlcnJvcnM9InN1cnJvZ2F0ZXBhc3MiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Mud3JpdGUoZXJycGlwZV93cml0ZSwgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2UgTVVTVCBub3QgYWxsb3cgYW55dGhpbmcgb2RkIGhhcHBlbmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhYm92ZSB0byBwcmV2ZW50IHVzIGZyb20gZXhpdGluZyBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBleGl0Y29kZSB3b24ndCBiZSByZXBvcnRlZCB0byBhcHBsaWNhdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNvIGl0IHJlYWxseSBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHJldHVybi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgyNTUpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUGFyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBnY193YXNfZW5hYmxlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfY3JlYXRlZCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5waWQgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENsb3NlIHBhcmVudCdzIHBpcGUgZW5kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHAyY3dyaXRlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShwMmN3cml0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjMnByZWFkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShjMnByZWFkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVycnJlYWQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnJlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZXJycGlwZV9yZWFkKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEdXAgZmRzIGZvciBjaGlsZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBfZHVwMihhLCBiKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBkdXAyKCkgcmVtb3ZlcyB0aGUgQ0xPRVhFQyBmbGFnIGJ1dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdlIG11c3QgZG8gaXQgb3Vyc2VsdmVzIGlmIGR1cDIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdvdWxkIGJlIGEgbm8tb3AgKGlzc3VlICMxMDgwNikuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGEgPT0gYjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NldF9jbG9leGVjX2ZsYWcoYSwgRmFsc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgYSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoYSwgYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHVwMihwMmNyZWFkLCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdXAyKGMycHdyaXRlLCAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kdXAyKGVycndyaXRlLCAyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHNhbWUgZmQgbW9yZSB0aGFuIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWQgPSB7IE5vbmUgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmZCBpbiBbcDJjcmVhZCwgYzJwd3JpdGUsIGVycndyaXRlXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZmQgbm90IGluIGNsb3NlZCBhbmQgZmQgPiAyOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWQuYWRkKGZkKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDbG9zZSBhbGwgb3RoZXIgZmRzLCBpZiBhc2tlZCBmb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZV9mZHM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZkcyhidXQ9ZXJycGlwZV93cml0ZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN3ZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJlZXhlY19mbjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbigpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnYgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZXhlY3ZwKGV4ZWN1dGFibGUsIGFyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZXhlY3ZwZShleGVjdXRhYmxlLCBhcmdzLCBlbnYpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTYXZlIHRoZSB0cmFjZWJhY2sgYW5kIGF0dGFjaCBpdCB0byB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfbGluZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGNfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlLmNoaWxkX3RyYWNlYmFjayA9ICcnLmpvaW4oZXhjX2xpbmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLndyaXRlKGVycnBpcGVfd3JpdGUsIHBpY2tsZS5kdW1wcyhleGNfdmFsdWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgZXhpdGNvZGUgd29uJ3QgYmUgcmVwb3J0ZWQgdG8gYXBwbGljYXRpb25zLCBzbwotICAgICAgICAgICAgICAgICAgICAgICAgIyBpdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIgd2hhdCB3ZSByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgyNTUpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZ2Nfd2FzX2VuYWJsZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgICMgYmUgc3VyZSB0aGUgRkQgaXMgY2xvc2VkIG5vIG1hdHRlciB3aGF0CiAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfd3JpdGUpCiAKLSAgICAgICAgICAgICAgICBpZiBwMmNyZWFkIGlzIG5vdCBOb25lIGFuZCBwMmN3cml0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBwMmNyZWFkICE9IC0xIGFuZCBwMmN3cml0ZSAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UocDJjcmVhZCkKLSAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSBpcyBub3QgTm9uZSBhbmQgYzJwcmVhZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBjMnB3cml0ZSAhPSAtMSBhbmQgYzJwcmVhZCAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoYzJwd3JpdGUpCi0gICAgICAgICAgICAgICAgaWYgZXJyd3JpdGUgaXMgbm90IE5vbmUgYW5kIGVycnJlYWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgZXJyd3JpdGUgIT0gLTEgYW5kIGVycnJlYWQgIT0gLTE6CiAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycndyaXRlKQogCiAgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBleGVjIHRvIGZhaWwgb3Igc3VjY2VlZDsgcG9zc2libHkgcmFpc2luZyBhbgotICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uIChsaW1pdGVkIHRvIDEgTUIpCi0gICAgICAgICAgICAgICAgZGF0YSA9IF9laW50cl9yZXRyeV9jYWxsKG9zLnJlYWQsIGVycnBpcGVfcmVhZCwgMTA0ODU3NikKKyAgICAgICAgICAgICAgICAjIGV4Y2VwdGlvbiAobGltaXRlZCBpbiBzaXplKQorICAgICAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoKQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBfZWludHJfcmV0cnlfY2FsbChvcy5yZWFkLCBlcnJwaXBlX3JlYWQsIDUwMDAwKQorICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcnQgb3IgbGVuKGRhdGEpID4gNTAwMDA6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAjIGJlIHN1cmUgdGhlIEZEIGlzIGNsb3NlZCBubyBtYXR0ZXIgd2hhdAogICAgICAgICAgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKQEAgLTExNzIsMTEgKzEzMjAsMjggQEAKICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDSElMRDoKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgY2hpbGRfZXhjZXB0aW9uID0gcGlja2xlLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSwgaGV4X2Vycm5vLCBlcnJfbXNnID0gZGF0YS5zcGxpdChiJzonLCAyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnQmFkIGV4Y2VwdGlvbiBkYXRhOicsIHJlcHIoZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbl9uYW1lID0gYidSdW50aW1lRXJyb3InCisgICAgICAgICAgICAgICAgICAgIGhleF9lcnJubyA9IGInMCcKKyAgICAgICAgICAgICAgICAgICAgZXJyX21zZyA9IGInVW5rbm93bicKKyAgICAgICAgICAgICAgICBjaGlsZF9leGNlcHRpb25fdHlwZSA9IGdldGF0dHIoCisgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGlucywgZXhjZXB0aW9uX25hbWUuZGVjb2RlKCdhc2NpaScpLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKQogICAgICAgICAgICAgICAgIGZvciBmZCBpbiAocDJjd3JpdGUsIGMycHJlYWQsIGVycnJlYWQpOgotICAgICAgICAgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmQgIT0gLTE6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgICAgICByYWlzZSBjaGlsZF9leGNlcHRpb24KKyAgICAgICAgICAgICAgICBlcnJfbXNnID0gZXJyX21zZy5kZWNvZGUoZXJyb3JzPSJzdXJyb2dhdGVwYXNzIikKKyAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGNoaWxkX2V4Y2VwdGlvbl90eXBlLCBPU0Vycm9yKSBhbmQgaGV4X2Vycm5vOgorICAgICAgICAgICAgICAgICAgICBlcnJub19udW0gPSBpbnQoaGV4X2Vycm5vLCAxNikKKyAgICAgICAgICAgICAgICAgICAgaWYgZXJybm9fbnVtICE9IDA6CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gb3Muc3RyZXJyb3IoZXJybm9fbnVtKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJybm9fbnVtID09IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJfbXNnICs9ICc6ICcgKyByZXByKGFyZ3NbMF0pCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGNoaWxkX2V4Y2VwdGlvbl90eXBlKGVycm5vX251bSwgZXJyX21zZykKKyAgICAgICAgICAgICAgICByYWlzZSBjaGlsZF9leGNlcHRpb25fdHlwZShlcnJfbXNnKQogCiAKICAgICAgICAgZGVmIF9oYW5kbGVfZXhpdHN0YXR1cyhzZWxmLCBzdHMsIF9XSUZTSUdOQUxFRD1vcy5XSUZTSUdOQUxFRCwKZGlmZiAtLWdpdCBhL0xpYi9zdW5hdS5weSBiL0xpYi9zdW5hdS5weQppbmRleCA1ZjUwZThmLi42Nzc1YTUzIDEwMDY0NAotLS0gYS9MaWIvc3VuYXUucHkKKysrIGIvTGliL3N1bmF1LnB5CkBAIC0xNTQsNiArMTU0LDkgQEAKICAgICAgICAgaWYgdHlwZShmKSA9PSB0eXBlKCcnKToKICAgICAgICAgICAgIGltcG9ydCBidWlsdGlucwogICAgICAgICAgICAgZiA9IGJ1aWx0aW5zLm9wZW4oZiwgJ3JiJykKKyAgICAgICAgICAgIHNlbGYuX29wZW5lZCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX29wZW5lZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuaW5pdGZwKGYpCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKQEAgLTI3NSw2ICsyNzgsOCBAQAogICAgICAgICBzZWxmLl9zb3VuZHBvcyA9IHBvcwogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9vcGVuZWQgYW5kIHNlbGYuX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAogY2xhc3MgQXVfd3JpdGU6CkBAIC0yODMsMTEgKzI4OCwxNSBAQAogICAgICAgICBpZiB0eXBlKGYpID09IHR5cGUoJycpOgogICAgICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgICAgICBmID0gYnVpbHRpbnMub3BlbihmLCAnd2InKQorICAgICAgICAgICAgc2VsZi5fb3BlbmVkID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fb3BlbmVkID0gRmFsc2UKICAgICAgICAgc2VsZi5pbml0ZnAoZikKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBpZiBzZWxmLl9maWxlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCiAKICAgICBkZWYgaW5pdGZwKHNlbGYsIGZpbGUpOgogICAgICAgICBzZWxmLl9maWxlID0gZmlsZQpAQCAtNDAxLDYgKzQxMCw4IEBACiAgICAgICAgICAgICAgICAgICBzZWxmLl9kYXRhbGVuZ3RoICE9IHNlbGYuX2RhdGF3cml0dGVuOgogICAgICAgICAgICAgc2VsZi5fcGF0Y2hoZWFkZXIoKQogICAgICAgICBzZWxmLl9maWxlLmZsdXNoKCkKKyAgICAgICAgaWYgc2VsZi5fb3BlbmVkIGFuZCBzZWxmLl9maWxlOgorICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCiAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCiAKICAgICAjCmRpZmYgLS1naXQgYS9MaWIvc3ltYm9sLnB5IGIvTGliL3N5bWJvbC5weQppbmRleCA0YjRjMjE5Li5lM2ZmZjM0IDEwMDc1NQotLS0gYS9MaWIvc3ltYm9sLnB5CisrKyBiL0xpYi9zeW1ib2wucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJOb24tdGVybWluYWwgc3ltYm9scyBvZiBQeXRob24gZ3JhbW1hciAoZnJvbSAiZ3JhbWluaXQuaCIpLiIiIgogCkBAIC0yNiw2OSArMjYsNjkgQEAKIHNpbXBsZV9zdG10ID0gMjY5CiBzbWFsbF9zdG10ID0gMjcwCiBleHByX3N0bXQgPSAyNzEKLWF1Z2Fzc2lnbiA9IDI3MgotZGVsX3N0bXQgPSAyNzMKLXBhc3Nfc3RtdCA9IDI3NAotZmxvd19zdG10ID0gMjc1Ci1icmVha19zdG10ID0gMjc2Ci1jb250aW51ZV9zdG10ID0gMjc3Ci1yZXR1cm5fc3RtdCA9IDI3OAoteWllbGRfc3RtdCA9IDI3OQotcmFpc2Vfc3RtdCA9IDI4MAotaW1wb3J0X3N0bXQgPSAyODEKLWltcG9ydF9uYW1lID0gMjgyCi1pbXBvcnRfZnJvbSA9IDI4MwotaW1wb3J0X2FzX25hbWUgPSAyODQKLWRvdHRlZF9hc19uYW1lID0gMjg1Ci1pbXBvcnRfYXNfbmFtZXMgPSAyODYKLWRvdHRlZF9hc19uYW1lcyA9IDI4NwotZG90dGVkX25hbWUgPSAyODgKLWdsb2JhbF9zdG10ID0gMjg5Ci1ub25sb2NhbF9zdG10ID0gMjkwCi1hc3NlcnRfc3RtdCA9IDI5MQotY29tcG91bmRfc3RtdCA9IDI5MgotaWZfc3RtdCA9IDI5Mwotd2hpbGVfc3RtdCA9IDI5NAotZm9yX3N0bXQgPSAyOTUKLXRyeV9zdG10ID0gMjk2Ci13aXRoX3N0bXQgPSAyOTcKLXdpdGhfaXRlbSA9IDI5OAotZXhjZXB0X2NsYXVzZSA9IDI5OQotc3VpdGUgPSAzMDAKLXRlc3QgPSAzMDEKLXRlc3Rfbm9jb25kID0gMzAyCi1sYW1iZGVmID0gMzAzCi1sYW1iZGVmX25vY29uZCA9IDMwNAotb3JfdGVzdCA9IDMwNQotYW5kX3Rlc3QgPSAzMDYKLW5vdF90ZXN0ID0gMzA3Ci1jb21wYXJpc29uID0gMzA4Ci1jb21wX29wID0gMzA5Ci1zdGFyX2V4cHIgPSAzMTAKLWV4cHIgPSAzMTEKLXhvcl9leHByID0gMzEyCi1hbmRfZXhwciA9IDMxMwotc2hpZnRfZXhwciA9IDMxNAotYXJpdGhfZXhwciA9IDMxNQotdGVybSA9IDMxNgotZmFjdG9yID0gMzE3Ci1wb3dlciA9IDMxOAotYXRvbSA9IDMxOQotdGVzdGxpc3RfY29tcCA9IDMyMAotdHJhaWxlciA9IDMyMQotc3Vic2NyaXB0bGlzdCA9IDMyMgotc3Vic2NyaXB0ID0gMzIzCi1zbGljZW9wID0gMzI0Ci1leHBybGlzdCA9IDMyNQotdGVzdGxpc3QgPSAzMjYKLWRpY3RvcnNldG1ha2VyID0gMzI3Ci1jbGFzc2RlZiA9IDMyOAotYXJnbGlzdCA9IDMyOQotYXJndW1lbnQgPSAzMzAKLWNvbXBfaXRlciA9IDMzMQotY29tcF9mb3IgPSAzMzIKLWNvbXBfaWYgPSAzMzMKLXRlc3RsaXN0MSA9IDMzNAordGVzdGxpc3Rfc3Rhcl9leHByID0gMjcyCithdWdhc3NpZ24gPSAyNzMKK2RlbF9zdG10ID0gMjc0CitwYXNzX3N0bXQgPSAyNzUKK2Zsb3dfc3RtdCA9IDI3NgorYnJlYWtfc3RtdCA9IDI3NworY29udGludWVfc3RtdCA9IDI3OAorcmV0dXJuX3N0bXQgPSAyNzkKK3lpZWxkX3N0bXQgPSAyODAKK3JhaXNlX3N0bXQgPSAyODEKK2ltcG9ydF9zdG10ID0gMjgyCitpbXBvcnRfbmFtZSA9IDI4MworaW1wb3J0X2Zyb20gPSAyODQKK2ltcG9ydF9hc19uYW1lID0gMjg1Citkb3R0ZWRfYXNfbmFtZSA9IDI4NgoraW1wb3J0X2FzX25hbWVzID0gMjg3Citkb3R0ZWRfYXNfbmFtZXMgPSAyODgKK2RvdHRlZF9uYW1lID0gMjg5CitnbG9iYWxfc3RtdCA9IDI5MAorbm9ubG9jYWxfc3RtdCA9IDI5MQorYXNzZXJ0X3N0bXQgPSAyOTIKK2NvbXBvdW5kX3N0bXQgPSAyOTMKK2lmX3N0bXQgPSAyOTQKK3doaWxlX3N0bXQgPSAyOTUKK2Zvcl9zdG10ID0gMjk2Cit0cnlfc3RtdCA9IDI5Nword2l0aF9zdG10ID0gMjk4Cit3aXRoX2l0ZW0gPSAyOTkKK2V4Y2VwdF9jbGF1c2UgPSAzMDAKK3N1aXRlID0gMzAxCit0ZXN0ID0gMzAyCit0ZXN0X25vY29uZCA9IDMwMworbGFtYmRlZiA9IDMwNAorbGFtYmRlZl9ub2NvbmQgPSAzMDUKK29yX3Rlc3QgPSAzMDYKK2FuZF90ZXN0ID0gMzA3Citub3RfdGVzdCA9IDMwOAorY29tcGFyaXNvbiA9IDMwOQorY29tcF9vcCA9IDMxMAorc3Rhcl9leHByID0gMzExCitleHByID0gMzEyCit4b3JfZXhwciA9IDMxMworYW5kX2V4cHIgPSAzMTQKK3NoaWZ0X2V4cHIgPSAzMTUKK2FyaXRoX2V4cHIgPSAzMTYKK3Rlcm0gPSAzMTcKK2ZhY3RvciA9IDMxOAorcG93ZXIgPSAzMTkKK2F0b20gPSAzMjAKK3Rlc3RsaXN0X2NvbXAgPSAzMjEKK3RyYWlsZXIgPSAzMjIKK3N1YnNjcmlwdGxpc3QgPSAzMjMKK3N1YnNjcmlwdCA9IDMyNAorc2xpY2VvcCA9IDMyNQorZXhwcmxpc3QgPSAzMjYKK3Rlc3RsaXN0ID0gMzI3CitkaWN0b3JzZXRtYWtlciA9IDMyOAorY2xhc3NkZWYgPSAzMjkKK2FyZ2xpc3QgPSAzMzAKK2FyZ3VtZW50ID0gMzMxCitjb21wX2l0ZXIgPSAzMzIKK2NvbXBfZm9yID0gMzMzCitjb21wX2lmID0gMzM0CiBlbmNvZGluZ19kZWNsID0gMzM1CiB5aWVsZF9leHByID0gMzM2CiAjLS1lbmQgY29uc3RhbnRzLS0KZGlmZiAtLWdpdCBhL0xpYi9zeW10YWJsZS5weSBiL0xpYi9zeW10YWJsZS5weQppbmRleCA3NTQ4YTdmLi4zOWMxYTgwIDEwMDY0NAotLS0gYS9MaWIvc3ltdGFibGUucHkKKysrIGIvTGliL3N5bXRhYmxlLnB5CkBAIC0yLDkgKzIsOCBAQAogCiBpbXBvcnQgX3N5bXRhYmxlCiBmcm9tIF9zeW10YWJsZSBpbXBvcnQgKFVTRSwgREVGX0dMT0JBTCwgREVGX0xPQ0FMLCBERUZfUEFSQU0sCi0gICAgIERFRl9GUkVFX0dMT0JBTCwgREVGX0ZSRUVfQ0xBU1MsIERFRl9JTVBPUlQsIERFRl9CT1VORCwKLSAgICAgT1BUX0lNUE9SVF9TVEFSLCBTQ09QRV9PRkYsIFNDT1BFX01BU0ssIEZSRUUsCi0gICAgIEdMT0JBTF9JTVBMSUNJVCwgR0xPQkFMX0VYUExJQ0lUKQorICAgICBERUZfSU1QT1JULCBERUZfQk9VTkQsIE9QVF9JTVBPUlRfU1RBUiwgU0NPUEVfT0ZGLCBTQ09QRV9NQVNLLCBGUkVFLAorICAgICBMT0NBTCwgR0xPQkFMX0lNUExJQ0lULCBHTE9CQUxfRVhQTElDSVQsIENFTEwpCiAKIGltcG9ydCB3ZWFrcmVmCiAKQEAgLTEzOCw3ICsxMzcsOSBAQAogCiAgICAgZGVmIGdldF9sb2NhbHMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX19sb2NhbHMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX19sb2NhbHMgPSBzZWxmLl9faWRlbnRzX21hdGNoaW5nKGxhbWJkYSB4OnggJiBERUZfQk9VTkQpCisgICAgICAgICAgICBsb2NzID0gKExPQ0FMLCBDRUxMKQorICAgICAgICAgICAgdGVzdCA9IGxhbWJkYSB4OiAoKHggPj4gU0NPUEVfT0ZGKSAmIFNDT1BFX01BU0spIGluIGxvY3MKKyAgICAgICAgICAgIHNlbGYuX19sb2NhbHMgPSBzZWxmLl9faWRlbnRzX21hdGNoaW5nKHRlc3QpCiAgICAgICAgIHJldHVybiBzZWxmLl9fbG9jYWxzCiAKICAgICBkZWYgZ2V0X2dsb2JhbHMoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvc3lzY29uZmlnLnB5IGIvTGliL3N5c2NvbmZpZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjBjYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3N5c2NvbmZpZy5weQpAQCAtMCwwICsxLDc3OCBAQAorIiIiUHJvdmlkZSBhY2Nlc3MgdG8gUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4KKworIiIiCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2Zyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAorCitfX2FsbF9fID0gWworICAgICdnZXRfY29uZmlnX2hfZmlsZW5hbWUnLAorICAgICdnZXRfY29uZmlnX3ZhcicsCisgICAgJ2dldF9jb25maWdfdmFycycsCisgICAgJ2dldF9tYWtlZmlsZV9maWxlbmFtZScsCisgICAgJ2dldF9wYXRoJywKKyAgICAnZ2V0X3BhdGhfbmFtZXMnLAorICAgICdnZXRfcGF0aHMnLAorICAgICdnZXRfcGxhdGZvcm0nLAorICAgICdnZXRfcHl0aG9uX3ZlcnNpb24nLAorICAgICdnZXRfc2NoZW1lX25hbWVzJywKKyAgICAncGFyc2VfY29uZmlnX2gnLAorICAgIF0KKworX0lOU1RBTExfU0NIRU1FUyA9IHsKKyAgICAncG9zaXhfcHJlZml4JzogeworICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne3BsYXRiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3twbGF0YmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOgorICAgICAgICAgICAgJ3tiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fXthYmlmbGFnc30nLAorICAgICAgICAncGxhdGluY2x1ZGUnOgorICAgICAgICAgICAgJ3twbGF0YmFzZX0vaW5jbHVkZS9weXRob257cHlfdmVyc2lvbl9zaG9ydH17YWJpZmxhZ3N9JywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCisgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ3Bvc2l4X2hvbWUnOiB7CisgICAgICAgICdzdGRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9saWIvcHl0aG9uJywKKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L2xpYi9weXRob24nLAorICAgICAgICAnaW5jbHVkZSc6ICd7YmFzZX0vaW5jbHVkZS9weXRob24nLAorICAgICAgICAncGxhdGluY2x1ZGUnOiAne2Jhc2V9L2luY2x1ZGUvcHl0aG9uJywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L2JpbicsCisgICAgICAgICdkYXRhJyAgIDogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ250JzogeworICAgICAgICAnc3RkbGliJzogJ3tiYXNlfS9MaWInLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7YmFzZX0vTGliJywKKyAgICAgICAgJ3B1cmVsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne2Jhc2V9L0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAncGxhdGluY2x1ZGUnOiAne2Jhc2V9L0luY2x1ZGUnLAorICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCisgICAgICAgICdkYXRhJyAgIDogJ3tiYXNlfScsCisgICAgICAgIH0sCisgICAgJ29zMic6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7YmFzZX0vTGliJywKKyAgICAgICAgJ3BsYXRzdGRsaWInOiAne2Jhc2V9L0xpYicsCisgICAgICAgICdwdXJlbGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3tiYXNlfS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdpbmNsdWRlJzogJ3tiYXNlfS9JbmNsdWRlJywKKyAgICAgICAgJ3BsYXRpbmNsdWRlJzogJ3tiYXNlfS9JbmNsdWRlJywKKyAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAorICAgICAgICAnZGF0YScgICA6ICd7YmFzZX0nLAorICAgICAgICB9LAorICAgICdvczJfaG9tZSc6IHsKKyAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAorICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCisgICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKKyAgICAgICAgJ2RhdGEnICAgOiAne3VzZXJiYXNlfScsCisgICAgICAgIH0sCisgICAgJ250X3VzZXInOiB7CisgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLAorICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vUHl0aG9ue3B5X3ZlcnNpb25fbm9kb3R9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAncGxhdGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0vSW5jbHVkZScsCisgICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vU2NyaXB0cycsCisgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICB9LAorICAgICdwb3NpeF91c2VyJzogeworICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9L3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUvcHl0aG9ue3B5X3ZlcnNpb25fc2hvcnR9JywKKyAgICAgICAgJ3NjcmlwdHMnOiAne3VzZXJiYXNlfS9iaW4nLAorICAgICAgICAnZGF0YScgICA6ICd7dXNlcmJhc2V9JywKKyAgICAgICAgfSwKKyAgICAnb3N4X2ZyYW1ld29ya191c2VyJzogeworICAgICAgICAnc3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwbGF0c3RkbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbicsCisgICAgICAgICdwdXJlbGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbi9zaXRlLXBhY2thZ2VzJywKKyAgICAgICAgJ3BsYXRsaWInOiAne3VzZXJiYXNlfS9saWIvcHl0aG9uL3NpdGUtcGFja2FnZXMnLAorICAgICAgICAnaW5jbHVkZSc6ICd7dXNlcmJhc2V9L2luY2x1ZGUnLAorICAgICAgICAnc2NyaXB0cyc6ICd7dXNlcmJhc2V9L2JpbicsCisgICAgICAgICdkYXRhJyAgIDogJ3t1c2VyYmFzZX0nLAorICAgICAgICB9LAorICAgIH0KKworX1NDSEVNRV9LRVlTID0gKCdzdGRsaWInLCAncGxhdHN0ZGxpYicsICdwdXJlbGliJywgJ3BsYXRsaWInLCAnaW5jbHVkZScsCisgICAgICAgICAgICAgICAgJ3NjcmlwdHMnLCAnZGF0YScpCitfUFlfVkVSU0lPTiA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0KK19QWV9WRVJTSU9OX1NIT1JUID0gc3lzLnZlcnNpb25bOjNdCitfUFlfVkVSU0lPTl9TSE9SVF9OT19ET1QgPSBfUFlfVkVSU0lPTlswXSArIF9QWV9WRVJTSU9OWzJdCitfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMucHJlZml4KQorX0VYRUNfUFJFRklYID0gb3MucGF0aC5ub3JtcGF0aChzeXMuZXhlY19wcmVmaXgpCitfQ09ORklHX1ZBUlMgPSBOb25lCitfVVNFUl9CQVNFID0gTm9uZQorCitkZWYgX3NhZmVfcmVhbHBhdGgocGF0aCk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gcmVhbHBhdGgocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIHBhdGgKKworaWYgc3lzLmV4ZWN1dGFibGU6CisgICAgX1BST0pFQ1RfQkFTRSA9IG9zLnBhdGguZGlybmFtZShfc2FmZV9yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkpCitlbHNlOgorICAgICMgc3lzLmV4ZWN1dGFibGUgY2FuIGJlIGVtcHR5IGlmIGFyZ3ZbMF0gaGFzIGJlZW4gY2hhbmdlZCBhbmQgUHl0aG9uIGlzCisgICAgIyB1bmFibGUgdG8gcmV0cmlldmUgdGhlIHJlYWwgcHJvZ3JhbSBuYW1lCisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLmdldGN3ZCgpKQorCitpZiBvcy5uYW1lID09ICJudCIgYW5kICJwY2J1aWxkIiBpbiBfUFJPSkVDVF9CQVNFWy04Ol0ubG93ZXIoKToKKyAgICBfUFJPSkVDVF9CQVNFID0gX3NhZmVfcmVhbHBhdGgob3MucGF0aC5qb2luKF9QUk9KRUNUX0JBU0UsIHBhcmRpcikpCisjIFBDL1ZTNy4xCitpZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjXFx2IiBpbiBfUFJPSkVDVF9CQVNFWy0xMDpdLmxvd2VyKCk6CisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCisjIFBDL0FNRDY0CitpZiBvcy5uYW1lID09ICJudCIgYW5kICJcXHBjYnVpbGRcXGFtZDY0IiBpbiBfUFJPSkVDVF9CQVNFWy0xNDpdLmxvd2VyKCk6CisgICAgX1BST0pFQ1RfQkFTRSA9IF9zYWZlX3JlYWxwYXRoKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCBwYXJkaXIsIHBhcmRpcikpCisKK2RlZiBpc19weXRob25fYnVpbGQoKToKKyAgICBmb3IgZm4gaW4gKCJTZXR1cC5kaXN0IiwgIlNldHVwLmxvY2FsIik6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiTW9kdWxlcyIsIGZuKSk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQorCitfUFlUSE9OX0JVSUxEID0gaXNfcHl0aG9uX2J1aWxkKCkKKworaWYgX1BZVEhPTl9CVUlMRDoKKyAgICBmb3Igc2NoZW1lIGluICgncG9zaXhfcHJlZml4JywgJ3Bvc2l4X2hvbWUnKToKKyAgICAgICAgX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdWydpbmNsdWRlJ10gPSAne3NyY2Rpcn0vSW5jbHVkZScKKyAgICAgICAgX0lOU1RBTExfU0NIRU1FU1tzY2hlbWVdWydwbGF0aW5jbHVkZSddID0gJ3twcm9qZWN0YmFzZX0vLicKKworZGVmIF9zdWJzdF92YXJzKHMsIGxvY2FsX3ZhcnMpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIHMuZm9ybWF0KCoqbG9jYWxfdmFycykKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzLmZvcm1hdCgqKm9zLmVudmlyb24pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyB2YXI6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigneyVzfScgJSB2YXIpCisKK2RlZiBfZXh0ZW5kX2RpY3QodGFyZ2V0X2RpY3QsIG90aGVyX2RpY3QpOgorICAgIHRhcmdldF9rZXlzID0gdGFyZ2V0X2RpY3Qua2V5cygpCisgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXJfZGljdC5pdGVtcygpOgorICAgICAgICBpZiBrZXkgaW4gdGFyZ2V0X2tleXM6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0YXJnZXRfZGljdFtrZXldID0gdmFsdWUKKworZGVmIF9leHBhbmRfdmFycyhzY2hlbWUsIHZhcnMpOgorICAgIHJlcyA9IHt9CisgICAgaWYgdmFycyBpcyBOb25lOgorICAgICAgICB2YXJzID0ge30KKyAgICBfZXh0ZW5kX2RpY3QodmFycywgZ2V0X2NvbmZpZ192YXJzKCkpCisKKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV0uaXRlbXMoKToKKyAgICAgICAgaWYgb3MubmFtZSBpbiAoJ3Bvc2l4JywgJ250Jyk6CisgICAgICAgICAgICB2YWx1ZSA9IG9zLnBhdGguZXhwYW5kdXNlcih2YWx1ZSkKKyAgICAgICAgcmVzW2tleV0gPSBvcy5wYXRoLm5vcm1wYXRoKF9zdWJzdF92YXJzKHZhbHVlLCB2YXJzKSkKKyAgICByZXR1cm4gcmVzCisKK2RlZiBfZ2V0X2RlZmF1bHRfc2NoZW1lKCk6CisgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAjIHRoZSBkZWZhdWx0IHNjaGVtZSBmb3IgcG9zaXggaXMgcG9zaXhfcHJlZml4CisgICAgICAgIHJldHVybiAncG9zaXhfcHJlZml4JworICAgIHJldHVybiBvcy5uYW1lCisKK2RlZiBfZ2V0dXNlcmJhc2UoKToKKyAgICBlbnZfYmFzZSA9IG9zLmVudmlyb24uZ2V0KCJQWVRIT05VU0VSQkFTRSIsIE5vbmUpCisgICAgZGVmIGpvaW51c2VyKCphcmdzKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhwYW5kdXNlcihvcy5wYXRoLmpvaW4oKmFyZ3MpKQorCisgICAgIyB3aGF0IGFib3V0ICdvczJlbXgnLCAncmlzY29zJyA/CisgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICBiYXNlID0gb3MuZW52aXJvbi5nZXQoIkFQUERBVEEiKSBvciAifiIKKyAgICAgICAgcmV0dXJuIGVudl9iYXNlIGlmIGVudl9iYXNlIGVsc2Ugam9pbnVzZXIoYmFzZSwgIlB5dGhvbiIpCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CisgICAgICAgIGZyYW1ld29yayA9IGdldF9jb25maWdfdmFyKCJQWVRIT05GUkFNRVdPUksiKQorICAgICAgICBpZiBmcmFtZXdvcms6CisgICAgICAgICAgICByZXR1cm4gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcigifiIsICJMaWJyYXJ5IiwgZnJhbWV3b3JrLCAiJWQuJWQiJSgKKyAgICAgICAgICAgICAgICBzeXMudmVyc2lvbl9pbmZvWzoyXSkpCisKKyAgICByZXR1cm4gZW52X2Jhc2UgaWYgZW52X2Jhc2UgZWxzZSBqb2ludXNlcigifiIsICIubG9jYWwiKQorCisKK2RlZiBfcGFyc2VfbWFrZWZpbGUoZmlsZW5hbWUsIHZhcnM9Tm9uZSk6CisgICAgIiIiUGFyc2UgYSBNYWtlZmlsZS1zdHlsZSBmaWxlLgorCisgICAgQSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgbmFtZS92YWx1ZSBwYWlycyBpcyByZXR1cm5lZC4gIElmIGFuCisgICAgb3B0aW9uYWwgZGljdGlvbmFyeSBpcyBwYXNzZWQgaW4gYXMgdGhlIHNlY29uZCBhcmd1bWVudCwgaXQgaXMKKyAgICB1c2VkIGluc3RlYWQgb2YgYSBuZXcgZGljdGlvbmFyeS4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICAjIFJlZ2V4ZXMgbmVlZGVkIGZvciBwYXJzaW5nIE1ha2VmaWxlIChhbmQgc2ltaWxhciBzeW50YXhlcywKKyAgICAjIGxpa2Ugb2xkLXN0eWxlIFNldHVwIGZpbGVzKS4KKyAgICBfdmFyaWFibGVfcnggPSByZS5jb21waWxlKCIoW2EtekEtWl1bYS16QS1aMC05X10rKVxzKj1ccyooLiopIikKKyAgICBfZmluZHZhcjFfcnggPSByZS5jb21waWxlKHIiXCRcKChbQS1aYS16XVtBLVphLXowLTlfXSopXCkiKQorICAgIF9maW5kdmFyMl9yeCA9IHJlLmNvbXBpbGUociJcJHsoW0EtWmEtel1bQS1aYS16MC05X10qKX0iKQorCisgICAgaWYgdmFycyBpcyBOb25lOgorICAgICAgICB2YXJzID0ge30KKyAgICBkb25lID0ge30KKyAgICBub3Rkb25lID0ge30KKworICAgIHdpdGggb3BlbihmaWxlbmFtZSwgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKSBhcyBmOgorICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKworICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyMnKSBvciBsaW5lLnN0cmlwKCkgPT0gJyc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBtID0gX3ZhcmlhYmxlX3J4Lm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICBuLCB2ID0gbS5ncm91cCgxLCAyKQorICAgICAgICAgICAgdiA9IHYuc3RyaXAoKQorICAgICAgICAgICAgIyBgJCQnIGlzIGEgbGl0ZXJhbCBgJCcgaW4gbWFrZQorICAgICAgICAgICAgdG1wdiA9IHYucmVwbGFjZSgnJCQnLCAnJykKKworICAgICAgICAgICAgaWYgIiQiIGluIHRtcHY6CisgICAgICAgICAgICAgICAgbm90ZG9uZVtuXSA9IHYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2ID0gaW50KHYpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgaW5zZXJ0IGxpdGVyYWwgYCQnCisgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSB2LnJlcGxhY2UoJyQkJywgJyQnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGRvbmVbbl0gPSB2CisKKyAgICAjIGRvIHZhcmlhYmxlIGludGVycG9sYXRpb24gaGVyZQorICAgIHZhcmlhYmxlcyA9IGxpc3Qobm90ZG9uZS5rZXlzKCkpCisKKyAgICAjIFZhcmlhYmxlcyB3aXRoIGEgJ1BZXycgcHJlZml4IGluIHRoZSBtYWtlZmlsZS4gVGhlc2UgbmVlZCB0bworICAgICMgYmUgbWFkZSBhdmFpbGFibGUgd2l0aG91dCB0aGF0IHByZWZpeCB0aHJvdWdoIHN5c2NvbmZpZy4KKyAgICAjIFNwZWNpYWwgY2FyZSBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgdmFyaWFibGUgZXhwYW5zaW9uIHdvcmtzLCBldmVuCisgICAgIyBpZiB0aGUgZXhwYW5zaW9uIHVzZXMgdGhlIG5hbWUgd2l0aG91dCBhIHByZWZpeC4KKyAgICByZW5hbWVkX3ZhcmlhYmxlcyA9ICgnQ0ZMQUdTJywgJ0xERkxBR1MnLCAnQ1BQRkxBR1MnKQorCisgICAgd2hpbGUgbGVuKHZhcmlhYmxlcykgPiAwOgorICAgICAgICBmb3IgbmFtZSBpbiB0dXBsZSh2YXJpYWJsZXMpOgorICAgICAgICAgICAgdmFsdWUgPSBub3Rkb25lW25hbWVdCisgICAgICAgICAgICBtID0gX2ZpbmR2YXIxX3J4LnNlYXJjaCh2YWx1ZSkgb3IgX2ZpbmR2YXIyX3J4LnNlYXJjaCh2YWx1ZSkKKyAgICAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbiA9IG0uZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICBmb3VuZCA9IFRydWUKKyAgICAgICAgICAgICAgICBpZiBuIGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHIoZG9uZVtuXSkKKyAgICAgICAgICAgICAgICBlbGlmIG4gaW4gbm90ZG9uZToKKyAgICAgICAgICAgICAgICAgICAgIyBnZXQgaXQgb24gYSBzdWJzZXF1ZW50IHJvdW5kCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIG4gaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgIyBkbyBpdCBsaWtlIG1ha2U6IGZhbGwgYmFjayB0byBlbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICBpdGVtID0gb3MuZW52aXJvbltuXQorCisgICAgICAgICAgICAgICAgZWxpZiBuIGluIHJlbmFtZWRfdmFyaWFibGVzOgorICAgICAgICAgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJ1BZXycpIGFuZCBuYW1lWzM6XSBpbiByZW5hbWVkX3ZhcmlhYmxlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSAiIgorCisgICAgICAgICAgICAgICAgICAgIGVsaWYgJ1BZXycgKyBuIGluIG5vdGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHIoZG9uZVsnUFlfJyArIG5dKQorCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZG9uZVtuXSA9IGl0ZW0gPSAiIgorCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIGFmdGVyID0gdmFsdWVbbS5lbmQoKTpdCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbOm0uc3RhcnQoKV0gKyBpdGVtICsgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgIiQiIGluIGFmdGVyOgorICAgICAgICAgICAgICAgICAgICAgICAgbm90ZG9uZVtuYW1lXSA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lW25hbWVdID0gdmFsdWUuc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lW25hbWVdID0gdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5yZW1vdmUobmFtZSkKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdQWV8nKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBuYW1lWzM6XSBpbiByZW5hbWVkX3ZhcmlhYmxlczoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lWzM6XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIGRvbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmVbbmFtZV0gPSB2YWx1ZQorCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBib2d1cyB2YXJpYWJsZSByZWZlcmVuY2U7IGp1c3QgZHJvcCBpdCBzaW5jZSB3ZSBjYW4ndCBkZWFsCisgICAgICAgICAgICAgICAgdmFyaWFibGVzLnJlbW92ZShuYW1lKQorCisgICAgIyBzdHJpcCBzcHVyaW91cyBzcGFjZXMKKyAgICBmb3IgaywgdiBpbiBkb25lLml0ZW1zKCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uodiwgc3RyKToKKyAgICAgICAgICAgIGRvbmVba10gPSB2LnN0cmlwKCkKKworICAgICMgc2F2ZSB0aGUgcmVzdWx0cyBpbiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkKKyAgICB2YXJzLnVwZGF0ZShkb25lKQorICAgIHJldHVybiB2YXJzCisKKworZGVmIGdldF9tYWtlZmlsZV9maWxlbmFtZSgpOgorICAgICIiIlJldHVybiB0aGUgcGF0aCBvZiB0aGUgTWFrZWZpbGUuIiIiCisgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiTWFrZWZpbGUiKQorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oZ2V0X3BhdGgoJ3N0ZGxpYicpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZy17fXt9Jy5mb3JtYXQoX1BZX1ZFUlNJT05fU0hPUlQsIHN5cy5hYmlmbGFncyksCisgICAgICAgICAgICAgICAgICAgICAgICAnTWFrZWZpbGUnKQorCisKK2RlZiBfaW5pdF9wb3NpeCh2YXJzKToKKyAgICAiIiJJbml0aWFsaXplIHRoZSBtb2R1bGUgYXMgYXBwcm9wcmlhdGUgZm9yIFBPU0lYIHN5c3RlbXMuIiIiCisgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgTWFrZWZpbGU6CisgICAgbWFrZWZpbGUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQorICAgIHRyeToKKyAgICAgICAgX3BhcnNlX21ha2VmaWxlKG1ha2VmaWxlLCB2YXJzKQorICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIG1ha2VmaWxlCisgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CisgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgorICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKyAgICAjIGxvYWQgdGhlIGluc3RhbGxlZCBweWNvbmZpZy5oOgorICAgIGNvbmZpZ19oID0gZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihjb25maWdfaCkgYXMgZjoKKyAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19oKGYsIHZhcnMpCisgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgY29uZmlnX2gKKyAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKKyAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICMgT24gTWFjT1NYIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHNldHRpbmcgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgICAgIyBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ6IGNvbmZpZ3VyZSBiYXNlcyBzb21lIGNob2ljZXMgb24gaXQgc28KKyAgICAjIGl0IG5lZWRzIHRvIGJlIGNvbXBhdGlibGUuCisgICAgIyBJZiBpdCBpc24ndCBzZXQgd2Ugc2V0IGl0IHRvIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZQorICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcgaW4gdmFyczoKKyAgICAgICAgY2ZnX3RhcmdldCA9IHZhcnNbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCisgICAgICAgIGN1cl90YXJnZXQgPSBvcy5nZXRlbnYoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcsICcnKQorICAgICAgICBpZiBjdXJfdGFyZ2V0ID09ICcnOgorICAgICAgICAgICAgY3VyX3RhcmdldCA9IGNmZ190YXJnZXQKKyAgICAgICAgICAgIG9zLnB1dGVudignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgY2ZnX3RhcmdldCkKKyAgICAgICAgZWxpZiAobGlzdChtYXAoaW50LCBjZmdfdGFyZ2V0LnNwbGl0KCcuJykpKSA+CisgICAgICAgICAgICAgIGxpc3QobWFwKGludCwgY3VyX3RhcmdldC5zcGxpdCgnLicpKSkpOgorICAgICAgICAgICAgbXNnID0gKCckTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIG1pc21hdGNoOiBub3cgIiVzIiBidXQgIiVzIiAnCisgICAgICAgICAgICAgICAgICAgJ2R1cmluZyBjb25maWd1cmUnICUgKGN1cl90YXJnZXQsIGNmZ190YXJnZXQpKQorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihtc2cpCisgICAgIyBPbiBBSVgsIHRoZXJlIGFyZSB3cm9uZyBwYXRocyB0byB0aGUgbGlua2VyIHNjcmlwdHMgaW4gdGhlIE1ha2VmaWxlCisgICAgIyAtLSB0aGVzZSBwYXRocyBhcmUgcmVsYXRpdmUgdG8gdGhlIFB5dGhvbiBzb3VyY2UsIGJ1dCB3aGVuIGluc3RhbGxlZAorICAgICMgdGhlIHNjcmlwdHMgYXJlIGluIGFub3RoZXIgZGlyZWN0b3J5LgorICAgIGlmIF9QWVRIT05fQlVJTEQ6CisgICAgICAgIHZhcnNbJ0xEU0hBUkVEJ10gPSB2YXJzWydCTERTSEFSRUQnXQorCitkZWYgX2luaXRfbm9uX3Bvc2l4KHZhcnMpOgorICAgICIiIkluaXRpYWxpemUgdGhlIG1vZHVsZSBhcyBhcHByb3ByaWF0ZSBmb3IgTlQiIiIKKyAgICAjIHNldCBiYXNpYyBpbnN0YWxsIGRpcmVjdG9yaWVzCisgICAgdmFyc1snTElCREVTVCddID0gZ2V0X3BhdGgoJ3N0ZGxpYicpCisgICAgdmFyc1snQklOTElCREVTVCddID0gZ2V0X3BhdGgoJ3BsYXRzdGRsaWInKQorICAgIHZhcnNbJ0lOQ0xVREVQWSddID0gZ2V0X3BhdGgoJ2luY2x1ZGUnKQorICAgIHZhcnNbJ1NPJ10gPSAnLnB5ZCcKKyAgICB2YXJzWydFWEUnXSA9ICcuZXhlJworICAgIHZhcnNbJ1ZFUlNJT04nXSA9IF9QWV9WRVJTSU9OX1NIT1JUX05PX0RPVAorICAgIHZhcnNbJ0JJTkRJUiddID0gb3MucGF0aC5kaXJuYW1lKF9zYWZlX3JlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKworIworIyBwdWJsaWMgQVBJcworIworCisKK2RlZiBwYXJzZV9jb25maWdfaChmcCwgdmFycz1Ob25lKToKKyAgICAiIiJQYXJzZSBhIGNvbmZpZy5oLXN0eWxlIGZpbGUuCisKKyAgICBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBuYW1lL3ZhbHVlIHBhaXJzIGlzIHJldHVybmVkLiAgSWYgYW4KKyAgICBvcHRpb25hbCBkaWN0aW9uYXJ5IGlzIHBhc3NlZCBpbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpdCBpcworICAgIHVzZWQgaW5zdGVhZCBvZiBhIG5ldyBkaWN0aW9uYXJ5LgorICAgICIiIgorICAgIGltcG9ydCByZQorICAgIGlmIHZhcnMgaXMgTm9uZToKKyAgICAgICAgdmFycyA9IHt9CisgICAgZGVmaW5lX3J4ID0gcmUuY29tcGlsZSgiI2RlZmluZSAoW0EtWl1bQS1aYS16MC05X10rKSAoLiopXG4iKQorICAgIHVuZGVmX3J4ID0gcmUuY29tcGlsZSgiL1sqXSAjdW5kZWYgKFtBLVpdW0EtWmEtejAtOV9dKykgWypdL1xuIikKKworICAgIHdoaWxlIFRydWU6CisgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbSA9IGRlZmluZV9yeC5tYXRjaChsaW5lKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgbiwgdiA9IG0uZ3JvdXAoMSwgMikKKyAgICAgICAgICAgIHRyeTogdiA9IGludCh2KQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKKyAgICAgICAgICAgIHZhcnNbbl0gPSB2CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtID0gdW5kZWZfcngubWF0Y2gobGluZSkKKyAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgdmFyc1ttLmdyb3VwKDEpXSA9IDAKKyAgICByZXR1cm4gdmFycworCitkZWYgZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCk6CisgICAgIiIiUmV0dXJuIHRoZSBwYXRoIG9mIHB5Y29uZmlnLmguIiIiCisgICAgaWYgX1BZVEhPTl9CVUlMRDoKKyAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICAgICAgaW5jX2RpciA9IG9zLnBhdGguam9pbihfUFJPSkVDVF9CQVNFLCAiUEMiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5jX2RpciA9IF9QUk9KRUNUX0JBU0UKKyAgICBlbHNlOgorICAgICAgICBpbmNfZGlyID0gZ2V0X3BhdGgoJ3BsYXRpbmNsdWRlJykKKyAgICByZXR1cm4gb3MucGF0aC5qb2luKGluY19kaXIsICdweWNvbmZpZy5oJykKKworZGVmIGdldF9zY2hlbWVfbmFtZXMoKToKKyAgICAiIiJSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSBzY2hlbWVzIG5hbWVzLiIiIgorICAgIHNjaGVtZXMgPSBsaXN0KF9JTlNUQUxMX1NDSEVNRVMua2V5cygpKQorICAgIHNjaGVtZXMuc29ydCgpCisgICAgcmV0dXJuIHR1cGxlKHNjaGVtZXMpCisKK2RlZiBnZXRfcGF0aF9uYW1lcygpOgorICAgICIiIlJldHVybiBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIHBhdGhzIG5hbWVzLiIiIgorICAgIHJldHVybiBfU0NIRU1FX0tFWVMKKworZGVmIGdldF9wYXRocyhzY2hlbWU9X2dldF9kZWZhdWx0X3NjaGVtZSgpLCB2YXJzPU5vbmUsIGV4cGFuZD1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBtYXBwaW5nIGNvbnRhaW5pbmcgYW4gaW5zdGFsbCBzY2hlbWUuCisKKyAgICBgYHNjaGVtZWBgIGlzIHRoZSBpbnN0YWxsIHNjaGVtZSBuYW1lLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwKKyAgICByZXR1cm4gdGhlIGRlZmF1bHQgc2NoZW1lIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKyAgICAiIiIKKyAgICBpZiBleHBhbmQ6CisgICAgICAgIHJldHVybiBfZXhwYW5kX3ZhcnMoc2NoZW1lLCB2YXJzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV0KKworZGVmIGdldF9wYXRoKG5hbWUsIHNjaGVtZT1fZ2V0X2RlZmF1bHRfc2NoZW1lKCksIHZhcnM9Tm9uZSwgZXhwYW5kPVRydWUpOgorICAgICIiIlJldHVybiBhIHBhdGggY29ycmVzcG9uZGluZyB0byB0aGUgc2NoZW1lLgorCisgICAgYGBzY2hlbWVgYCBpcyB0aGUgaW5zdGFsbCBzY2hlbWUgbmFtZS4KKyAgICAiIiIKKyAgICByZXR1cm4gZ2V0X3BhdGhzKHNjaGVtZSwgdmFycywgZXhwYW5kKVtuYW1lXQorCitkZWYgZ2V0X2NvbmZpZ192YXJzKCphcmdzKToKKyAgICAiIiJXaXRoIG5vIGFyZ3VtZW50cywgcmV0dXJuIGEgZGljdGlvbmFyeSBvZiBhbGwgY29uZmlndXJhdGlvbgorICAgIHZhcmlhYmxlcyByZWxldmFudCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisKKyAgICBPbiBVbml4LCB0aGlzIG1lYW5zIGV2ZXJ5IHZhcmlhYmxlIGRlZmluZWQgaW4gUHl0aG9uJ3MgaW5zdGFsbGVkIE1ha2VmaWxlOworICAgIE9uIFdpbmRvd3MgYW5kIE1hYyBPUyBpdCdzIGEgbXVjaCBzbWFsbGVyIHNldC4KKworICAgIFdpdGggYXJndW1lbnRzLCByZXR1cm4gYSBsaXN0IG9mIHZhbHVlcyB0aGF0IHJlc3VsdCBmcm9tIGxvb2tpbmcgdXAKKyAgICBlYWNoIGFyZ3VtZW50IGluIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRpY3Rpb25hcnkuCisgICAgIiIiCisgICAgaW1wb3J0IHJlCisgICAgZ2xvYmFsIF9DT05GSUdfVkFSUworICAgIGlmIF9DT05GSUdfVkFSUyBpcyBOb25lOgorICAgICAgICBfQ09ORklHX1ZBUlMgPSB7fQorICAgICAgICAjIE5vcm1hbGl6ZWQgdmVyc2lvbnMgb2YgcHJlZml4IGFuZCBleGVjX3ByZWZpeCBhcmUgaGFuZHkgdG8gaGF2ZTsKKyAgICAgICAgIyBpbiBmYWN0LCB0aGVzZSBhcmUgdGhlIHN0YW5kYXJkIHZlcnNpb25zIHVzZWQgbW9zdCBwbGFjZXMgaW4gdGhlCisgICAgICAgICMgRGlzdHV0aWxzLgorICAgICAgICBfQ09ORklHX1ZBUlNbJ3ByZWZpeCddID0gX1BSRUZJWAorICAgICAgICBfQ09ORklHX1ZBUlNbJ2V4ZWNfcHJlZml4J10gPSBfRVhFQ19QUkVGSVgKKyAgICAgICAgX0NPTkZJR19WQVJTWydweV92ZXJzaW9uJ10gPSBfUFlfVkVSU0lPTgorICAgICAgICBfQ09ORklHX1ZBUlNbJ3B5X3ZlcnNpb25fc2hvcnQnXSA9IF9QWV9WRVJTSU9OX1NIT1JUCisgICAgICAgIF9DT05GSUdfVkFSU1sncHlfdmVyc2lvbl9ub2RvdCddID0gX1BZX1ZFUlNJT05bMF0gKyBfUFlfVkVSU0lPTlsyXQorICAgICAgICBfQ09ORklHX1ZBUlNbJ2Jhc2UnXSA9IF9QUkVGSVgKKyAgICAgICAgX0NPTkZJR19WQVJTWydwbGF0YmFzZSddID0gX0VYRUNfUFJFRklYCisgICAgICAgIF9DT05GSUdfVkFSU1sncHJvamVjdGJhc2UnXSA9IF9QUk9KRUNUX0JBU0UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydhYmlmbGFncyddID0gc3lzLmFiaWZsYWdzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgc3lzLmFiaWZsYWdzIG1heSBub3QgYmUgZGVmaW5lZCBvbiBhbGwgcGxhdGZvcm1zLgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydhYmlmbGFncyddID0gJycKKworICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJyk6CisgICAgICAgICAgICBfaW5pdF9ub25fcG9zaXgoX0NPTkZJR19WQVJTKQorICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCc6CisgICAgICAgICAgICBfaW5pdF9wb3NpeChfQ09ORklHX1ZBUlMpCisgICAgICAgICMgU2V0dGluZyAndXNlcmJhc2UnIGlzIGRvbmUgYmVsb3cgdGhlIGNhbGwgdG8gdGhlCisgICAgICAgICMgaW5pdCBmdW5jdGlvbiB0byBlbmFibGUgdXNpbmcgJ2dldF9jb25maWdfdmFyJyBpbgorICAgICAgICAjIHRoZSBpbml0LWZ1bmN0aW9uLgorICAgICAgICBfQ09ORklHX1ZBUlNbJ3VzZXJiYXNlJ10gPSBfZ2V0dXNlcmJhc2UoKQorCisgICAgICAgIGlmICdzcmNkaXInIG5vdCBpbiBfQ09ORklHX1ZBUlM6CisgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ3NyY2RpciddID0gX1BST0pFQ1RfQkFTRQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX0NPTkZJR19WQVJTWydzcmNkaXInXSA9IF9zYWZlX3JlYWxwYXRoKF9DT05GSUdfVkFSU1snc3JjZGlyJ10pCisKKworICAgICAgICAjIENvbnZlcnQgc3JjZGlyIGludG8gYW4gYWJzb2x1dGUgcGF0aCBpZiBpdCBhcHBlYXJzIG5lY2Vzc2FyeS4KKyAgICAgICAgIyBOb3JtYWxseSBpdCBpcyByZWxhdGl2ZSB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiAgSG93ZXZlciwgZHVyaW5nCisgICAgICAgICMgdGVzdGluZywgZm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGJlIHJ1bm5pbmcgYSBub24taW5zdGFsbGVkIHB5dGhvbgorICAgICAgICAjIGZyb20gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LgorICAgICAgICBpZiBfUFlUSE9OX0JVSUxEIGFuZCBvcy5uYW1lID09ICJwb3NpeCI6CisgICAgICAgICAgICBiYXNlID0gX1BST0pFQ1RfQkFTRQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBjd2QgPSBOb25lCisgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguaXNhYnMoX0NPTkZJR19WQVJTWydzcmNkaXInXSkgYW5kCisgICAgICAgICAgICAgICAgYmFzZSAhPSBjd2QpOgorICAgICAgICAgICAgICAgICMgc3JjZGlyIGlzIHJlbGF0aXZlIGFuZCB3ZSBhcmUgbm90IGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgICAgICAgICAgICAgICMgYXMgdGhlIGV4ZWN1dGFibGUuIEFzc3VtZSBleGVjdXRhYmxlIGlzIGluIHRoZSBidWlsZAorICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5IGFuZCBtYWtlIHNyY2RpciBhYnNvbHV0ZS4KKyAgICAgICAgICAgICAgICBzcmNkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZSwgX0NPTkZJR19WQVJTWydzcmNkaXInXSkKKyAgICAgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ3NyY2RpciddID0gb3MucGF0aC5ub3JtcGF0aChzcmNkaXIpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAga2VybmVsX3ZlcnNpb24gPSBvcy51bmFtZSgpWzJdICMgS2VybmVsIHZlcnNpb24gKDguNC4zKQorICAgICAgICAgICAgbWFqb3JfdmVyc2lvbiA9IGludChrZXJuZWxfdmVyc2lvbi5zcGxpdCgnLicpWzBdKQorCisgICAgICAgICAgICBpZiBtYWpvcl92ZXJzaW9uIDwgODoKKyAgICAgICAgICAgICAgICAjIE9uIE1hYyBPUyBYIGJlZm9yZSAxMC40LCBjaGVjayBpZiAtYXJjaCBhbmQgLWlzeXNyb290CisgICAgICAgICAgICAgICAgIyBhcmUgaW4gQ0ZMQUdTIG9yIExERkxBR1MgYW5kIHJlbW92ZSB0aGVtIGlmIHRoZXkgYXJlLgorICAgICAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQgd2hlbiBidWlsZGluZyBleHRlbnNpb25zIG9uIGEgMTAuMyBzeXN0ZW0KKyAgICAgICAgICAgICAgICAjIHVzaW5nIGEgdW5pdmVyc2FsIGJ1aWxkIG9mIHB5dGhvbi4KKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluICgnTERGTEFHUycsICdCQVNFQ0ZMQUdTJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSBudW1iZXIgb2YgZGVyaXZlZCB2YXJpYWJsZXMuIFRoZXNlIG5lZWQgdG8gYmUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0Y2hlZCB1cCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgJ0NGTEFHUycsICdQWV9DRkxBR1MnLCAnQkxEU0hBUkVEJyk6CisgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gX0NPTkZJR19WQVJTW2tleV0KKyAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1hcmNoXHMrXHcrXHMnLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICBmbGFncyA9IHJlLnN1YignLWlzeXNyb290IFteIFx0XSonLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICBfQ09ORklHX1ZBUlNba2V5XSA9IGZsYWdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQWxsb3cgdGhlIHVzZXIgdG8gb3ZlcnJpZGUgdGhlIGFyY2hpdGVjdHVyZSBmbGFncyB1c2luZworICAgICAgICAgICAgICAgICMgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICAgICAgICAgICAgIyBOT1RFOiBUaGlzIG5hbWUgd2FzIGludHJvZHVjZWQgYnkgQXBwbGUgaW4gT1NYIDEwLjUgYW5kCisgICAgICAgICAgICAgICAgIyBpcyB1c2VkIGJ5IHNldmVyYWwgc2NyaXB0aW5nIGxhbmd1YWdlcyBkaXN0cmlidXRlZCB3aXRoCisgICAgICAgICAgICAgICAgIyB0aGF0IE9TIHJlbGVhc2UuCisgICAgICAgICAgICAgICAgaWYgJ0FSQ0hGTEFHUycgaW4gb3MuZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgYXJjaCA9IG9zLmVudmlyb25bJ0FSQ0hGTEFHUyddCisgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gKCdMREZMQUdTJywgJ0JBU0VDRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBhIG51bWJlciBvZiBkZXJpdmVkIHZhcmlhYmxlcy4gVGhlc2UgbmVlZCB0byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBwYXRjaGVkIHVwIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgICAgICAgICAnQ0ZMQUdTJywgJ1BZX0NGTEFHUycsICdCTERTSEFSRUQnKToKKworICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBfQ09ORklHX1ZBUlNba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSByZS5zdWIoJy1hcmNoXHMrXHcrXHMnLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyArICcgJyArIGFyY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1trZXldID0gZmxhZ3MKKworICAgICAgICAgICAgICAgICMgSWYgd2UncmUgb24gT1NYIDEwLjUgb3IgbGF0ZXIgYW5kIHRoZSB1c2VyIHRyaWVzIHRvCisgICAgICAgICAgICAgICAgIyBjb21waWxlcyBhbiBleHRlbnNpb24gdXNpbmcgYW4gU0RLIHRoYXQgaXMgbm90IHByZXNlbnQKKyAgICAgICAgICAgICAgICAjIG9uIHRoZSBjdXJyZW50IG1hY2hpbmUgaXQgaXMgYmV0dGVyIHRvIG5vdCB1c2UgYW4gU0RLCisgICAgICAgICAgICAgICAgIyB0aGFuIHRvIGZhaWwuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgVGhlIG1ham9yIHVzZWNhc2UgZm9yIHRoaXMgaXMgdXNlcnMgdXNpbmcgYSBQeXRob24ub3JnCisgICAgICAgICAgICAgICAgIyBiaW5hcnkgaW5zdGFsbGVyICBvbiBPU1ggMTAuNjogdGhhdCBpbnN0YWxsZXIgdXNlcworICAgICAgICAgICAgICAgICMgdGhlIDEwLjR1IFNESywgYnV0IHRoYXQgU0RLIGlzIG5vdCBpbnN0YWxsZWQgYnkgZGVmYXVsdAorICAgICAgICAgICAgICAgICMgd2hlbiB5b3UgaW5zdGFsbCBYY29kZS4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgQ0ZMQUdTID0gX0NPTkZJR19WQVJTLmdldCgnQ0ZMQUdTJywgJycpCisgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgnLWlzeXNyb290XHMrKFxTKyknLCBDRkxBR1MpCisgICAgICAgICAgICAgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgc2RrID0gbS5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2RrKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrZXkgaW4gKCdMREZMQUdTJywgJ0JBU0VDRkxBR1MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgbnVtYmVyIG9mIGRlcml2ZWQgdmFyaWFibGVzLiBUaGVzZSBuZWVkIHRvIGJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGF0Y2hlZCB1cCBhcyB3ZWxsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDRkxBR1MnLCAnUFlfQ0ZMQUdTJywgJ0JMRFNIQVJFRCcpOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBfQ09ORklHX1ZBUlNba2V5XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gcmUuc3ViKCctaXN5c3Jvb3RccytcUysoXHN8JCknLCAnICcsIGZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DT05GSUdfVkFSU1trZXldID0gZmxhZ3MKKworICAgIGlmIGFyZ3M6CisgICAgICAgIHZhbHMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBhcmdzOgorICAgICAgICAgICAgdmFscy5hcHBlbmQoX0NPTkZJR19WQVJTLmdldChuYW1lKSkKKyAgICAgICAgcmV0dXJuIHZhbHMKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gX0NPTkZJR19WQVJTCisKK2RlZiBnZXRfY29uZmlnX3ZhcihuYW1lKToKKyAgICAiIiJSZXR1cm4gdGhlIHZhbHVlIG9mIGEgc2luZ2xlIHZhcmlhYmxlIHVzaW5nIHRoZSBkaWN0aW9uYXJ5IHJldHVybmVkIGJ5CisgICAgJ2dldF9jb25maWdfdmFycygpJy4KKworICAgIEVxdWl2YWxlbnQgdG8gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCisgICAgIiIiCisgICAgcmV0dXJuIGdldF9jb25maWdfdmFycygpLmdldChuYW1lKQorCitkZWYgZ2V0X3BsYXRmb3JtKCk6CisgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgY3VycmVudCBwbGF0Zm9ybS4KKworICAgIFRoaXMgaXMgdXNlZCBtYWlubHkgdG8gZGlzdGluZ3Vpc2ggcGxhdGZvcm0tc3BlY2lmaWMgYnVpbGQgZGlyZWN0b3JpZXMgYW5kCisgICAgcGxhdGZvcm0tc3BlY2lmaWMgYnVpbHQgZGlzdHJpYnV0aW9ucy4gIFR5cGljYWxseSBpbmNsdWRlcyB0aGUgT1MgbmFtZQorICAgIGFuZCB2ZXJzaW9uIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIChhcyBzdXBwbGllZCBieSAnb3MudW5hbWUoKScpLAorICAgIGFsdGhvdWdoIHRoZSBleGFjdCBpbmZvcm1hdGlvbiBpbmNsdWRlZCBkZXBlbmRzIG9uIHRoZSBPUzsgZWcuIGZvciBJUklYCisgICAgdGhlIGFyY2hpdGVjdHVyZSBpc24ndCBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IChJUklYIG9ubHkgcnVucyBvbiBTR0kKKyAgICBoYXJkd2FyZSksIGJ1dCBmb3IgTGludXggdGhlIGtlcm5lbCB2ZXJzaW9uIGlzbid0IHBhcnRpY3VsYXJseQorICAgIGltcG9ydGFudC4KKworICAgIEV4YW1wbGVzIG9mIHJldHVybmVkIHZhbHVlczoKKyAgICAgICBsaW51eC1pNTg2CisgICAgICAgbGludXgtYWxwaGEgKD8pCisgICAgICAgc29sYXJpcy0yLjYtc3VuNHUKKyAgICAgICBpcml4LTUuMworICAgICAgIGlyaXg2NC02LjIKKworICAgIFdpbmRvd3Mgd2lsbCByZXR1cm4gb25lIG9mOgorICAgICAgIHdpbi1hbWQ2NCAoNjRiaXQgV2luZG93cyBvbiBBTUQ2NCAoYWthIHg4Nl82NCwgSW50ZWw2NCwgRU02NFQsIGV0YykKKyAgICAgICB3aW4taWE2NCAoNjRiaXQgV2luZG93cyBvbiBJdGFuaXVtKQorICAgICAgIHdpbjMyIChhbGwgb3RoZXJzIC0gc3BlY2lmaWNhbGx5LCBzeXMucGxhdGZvcm0gaXMgcmV0dXJuZWQpCisKKyAgICBGb3Igb3RoZXIgbm9uLVBPU0lYIHBsYXRmb3JtcywgY3VycmVudGx5IGp1c3QgcmV0dXJucyAnc3lzLnBsYXRmb3JtJy4KKyAgICAiIiIKKyAgICBpbXBvcnQgcmUKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICMgc25pZmYgc3lzLnZlcnNpb24gZm9yIGFyY2hpdGVjdHVyZS4KKyAgICAgICAgcHJlZml4ID0gIiBiaXQgKCIKKyAgICAgICAgaSA9IHN5cy52ZXJzaW9uLmZpbmQocHJlZml4KQorICAgICAgICBpZiBpID09IC0xOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorICAgICAgICBqID0gc3lzLnZlcnNpb24uZmluZCgiKSIsIGkpCisgICAgICAgIGxvb2sgPSBzeXMudmVyc2lvbltpK2xlbihwcmVmaXgpOmpdLmxvd2VyKCkKKyAgICAgICAgaWYgbG9vayA9PSAnYW1kNjQnOgorICAgICAgICAgICAgcmV0dXJuICd3aW4tYW1kNjQnCisgICAgICAgIGlmIGxvb2sgPT0gJ2l0YW5pdW0nOgorICAgICAgICAgICAgcmV0dXJuICd3aW4taWE2NCcKKyAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorCisgICAgaWYgb3MubmFtZSAhPSAicG9zaXgiIG9yIG5vdCBoYXNhdHRyKG9zLCAndW5hbWUnKToKKyAgICAgICAgIyBYWFggd2hhdCBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlPyBOVCBpcyBJbnRlbCBvciBBbHBoYSwKKyAgICAgICAgIyBNYWMgT1MgaXMgTTY4ayBvciBQUEMsIGV0Yy4KKyAgICAgICAgcmV0dXJuIHN5cy5wbGF0Zm9ybQorCisgICAgIyBUcnkgdG8gZGlzdGluZ3Vpc2ggdmFyaW91cyBmbGF2b3VycyBvZiBVbml4CisgICAgb3NuYW1lLCBob3N0LCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lID0gb3MudW5hbWUoKQorCisgICAgIyBDb252ZXJ0IHRoZSBPUyBuYW1lIHRvIGxvd2VyY2FzZSwgcmVtb3ZlICcvJyBjaGFyYWN0ZXJzCisgICAgIyAodG8gYWNjb21tb2RhdGUgQlNEL09TKSwgYW5kIHRyYW5zbGF0ZSBzcGFjZXMgKGZvciAiUG93ZXIgTWFjaW50b3NoIikKKyAgICBvc25hbWUgPSBvc25hbWUubG93ZXIoKS5yZXBsYWNlKCcvJywgJycpCisgICAgbWFjaGluZSA9IG1hY2hpbmUucmVwbGFjZSgnICcsICdfJykKKyAgICBtYWNoaW5lID0gbWFjaGluZS5yZXBsYWNlKCcvJywgJy0nKQorCisgICAgaWYgb3NuYW1lWzo1XSA9PSAibGludXgiOgorICAgICAgICAjIEF0IGxlYXN0IG9uIExpbnV4L0ludGVsLCAnbWFjaGluZScgaXMgdGhlIHByb2Nlc3NvciAtLQorICAgICAgICAjIGkzODYsIGV0Yy4KKyAgICAgICAgIyBYWFggd2hhdCBhYm91dCBBbHBoYSwgU1BBUkMsIGV0Yz8KKyAgICAgICAgcmV0dXJuICAiJXMtJXMiICUgKG9zbmFtZSwgbWFjaGluZSkKKyAgICBlbGlmIG9zbmFtZVs6NV0gPT0gInN1bm9zIjoKKyAgICAgICAgaWYgcmVsZWFzZVswXSA+PSAiNSI6ICAgICAgICAgICAjIFN1bk9TIDUgPT0gU29sYXJpcyAyCisgICAgICAgICAgICBvc25hbWUgPSAic29sYXJpcyIKKyAgICAgICAgICAgIHJlbGVhc2UgPSAiJWQuJXMiICUgKGludChyZWxlYXNlWzBdKSAtIDMsIHJlbGVhc2VbMjpdKQorICAgICAgICAjIGZhbGwgdGhyb3VnaCB0byBzdGFuZGFyZCBvc25hbWUtcmVsZWFzZS1tYWNoaW5lIHJlcHJlc2VudGF0aW9uCisgICAgZWxpZiBvc25hbWVbOjRdID09ICJpcml4IjogICAgICAgICAgICAgICMgY291bGQgYmUgImlyaXg2NCIhCisgICAgICAgIHJldHVybiAiJXMtJXMiICUgKG9zbmFtZSwgcmVsZWFzZSkKKyAgICBlbGlmIG9zbmFtZVs6M10gPT0gImFpeCI6CisgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKG9zbmFtZSwgdmVyc2lvbiwgcmVsZWFzZSkKKyAgICBlbGlmIG9zbmFtZVs6Nl0gPT0gImN5Z3dpbiI6CisgICAgICAgIG9zbmFtZSA9ICJjeWd3aW4iCisgICAgICAgIHJlbF9yZSA9IHJlLmNvbXBpbGUgKHInW1xkLl0rJykKKyAgICAgICAgbSA9IHJlbF9yZS5tYXRjaChyZWxlYXNlKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmVsZWFzZSA9IG0uZ3JvdXAoKQorICAgIGVsaWYgb3NuYW1lWzo2XSA9PSAiZGFyd2luIjoKKyAgICAgICAgIworICAgICAgICAjIEZvciBvdXIgcHVycG9zZXMsIHdlJ2xsIGFzc3VtZSB0aGF0IHRoZSBzeXN0ZW0gdmVyc2lvbiBmcm9tCisgICAgICAgICMgZGlzdHV0aWxzJyBwZXJzcGVjdGl2ZSBpcyB3aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQKKyAgICAgICAgIyB0by4gVGhpcyBtYWtlcyB0aGUgY29tcGF0aWJpbGl0eSBzdG9yeSBhIGJpdCBtb3JlIHNhbmUgYmVjYXVzZSB0aGUKKyAgICAgICAgIyBtYWNoaW5lIGlzIGdvaW5nIHRvIGNvbXBpbGUgYW5kIGxpbmsgYXMgaWYgaXQgd2VyZQorICAgICAgICAjIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC4KKyAgICAgICAgY2ZndmFycyA9IGdldF9jb25maWdfdmFycygpCisgICAgICAgIG1hY3ZlciA9IG9zLmVudmlyb24uZ2V0KCdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnKQorICAgICAgICBpZiBub3QgbWFjdmVyOgorICAgICAgICAgICAgbWFjdmVyID0gY2ZndmFycy5nZXQoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCisKKyAgICAgICAgaWYgMToKKyAgICAgICAgICAgICMgQWx3YXlzIGNhbGN1bGF0ZSB0aGUgcmVsZWFzZSBvZiB0aGUgcnVubmluZyBtYWNoaW5lLAorICAgICAgICAgICAgIyBuZWVkZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiBidWlsZCBmYXQgYmluYXJpZXMgb3Igbm90LgorCisgICAgICAgICAgICBtYWNyZWxlYXNlID0gbWFjdmVyCisgICAgICAgICAgICAjIEdldCB0aGUgc3lzdGVtIHZlcnNpb24uIFJlYWRpbmcgdGhpcyBwbGlzdCBpcyBhIGRvY3VtZW50ZWQKKyAgICAgICAgICAgICMgd2F5IHRvIGdldCB0aGUgc3lzdGVtIHZlcnNpb24gKHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKKyAgICAgICAgICAgICMgdGhlIEdlc3RhbHQgTWFuYWdlcikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmID0gb3BlbignL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JykKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgV2UncmUgb24gYSBwbGFpbiBkYXJ3aW4gYm94LCBmYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICAjIGJlaGF2aW91ci4KKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJzxrZXk+UHJvZHVjdFVzZXJWaXNpYmxlVmVyc2lvbjwva2V5PlxzKicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPHN0cmluZz4oLio/KTwvc3RyaW5nPicsIGYucmVhZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiBtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICcuJy5qb2luKG0uZ3JvdXAoMSkuc3BsaXQoJy4nKVs6Ml0pCisgICAgICAgICAgICAgICAgICAgICMgZWxzZTogZmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW91cgorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGlmIG5vdCBtYWN2ZXI6CisgICAgICAgICAgICBtYWN2ZXIgPSBtYWNyZWxlYXNlCisKKyAgICAgICAgaWYgbWFjdmVyOgorICAgICAgICAgICAgcmVsZWFzZSA9IG1hY3ZlcgorICAgICAgICAgICAgb3NuYW1lID0gIm1hY29zeCIKKworICAgICAgICAgICAgaWYgKG1hY3JlbGVhc2UgKyAnLicpID49ICcxMC40LicgYW5kIFwKKyAgICAgICAgICAgICAgICAgICAgJy1hcmNoJyBpbiBnZXRfY29uZmlnX3ZhcnMoKS5nZXQoJ0NGTEFHUycsICcnKS5zdHJpcCgpOgorICAgICAgICAgICAgICAgICMgVGhlIHVuaXZlcnNhbCBidWlsZCB3aWxsIGJ1aWxkIGZhdCBiaW5hcmllcywgYnV0IG5vdCBvbgorICAgICAgICAgICAgICAgICMgc3lzdGVtcyBiZWZvcmUgMTAuNAorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIFRyeSB0byBkZXRlY3QgNC13YXkgdW5pdmVyc2FsIGJ1aWxkcywgdGhvc2UgaGF2ZSBtYWNoaW5lLXR5cGUKKyAgICAgICAgICAgICAgICAjICd1bml2ZXJzYWwnIGluc3RlYWQgb2YgJ2ZhdCcuCisKKyAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdCcKKyAgICAgICAgICAgICAgICBjZmxhZ3MgPSBnZXRfY29uZmlnX3ZhcnMoKS5nZXQoJ0NGTEFHUycpCisKKyAgICAgICAgICAgICAgICBhcmNocyA9IHJlLmZpbmRhbGwoJy1hcmNoXHMrKFxTKyknLCBjZmxhZ3MpCisgICAgICAgICAgICAgICAgYXJjaHMgPSB0dXBsZShzb3J0ZWQoc2V0KGFyY2hzKSkpCisKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJjaHMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSBhcmNoc1swXQorICAgICAgICAgICAgICAgIGVsaWYgYXJjaHMgPT0gKCdpMzg2JywgJ3BwYycpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ2ZhdCcKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgnaTM4NicsICd4ODZfNjQnKToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdpbnRlbCcKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgnaTM4NicsICdwcGMnLCAneDg2XzY0Jyk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAnZmF0MycKKyAgICAgICAgICAgICAgICBlbGlmIGFyY2hzID09ICgncHBjNjQnLCAneDg2XzY0Jyk6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAnZmF0NjQnCisgICAgICAgICAgICAgICAgZWxpZiBhcmNocyA9PSAoJ2kzODYnLCAncHBjJywgJ3BwYzY0JywgJ3g4Nl82NCcpOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3VuaXZlcnNhbCcKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qga25vdyBtYWNoaW5lIHZhbHVlIGZvciBhcmNocz0lciIlKGFyY2hzLCkpCisKKyAgICAgICAgICAgIGVsaWYgbWFjaGluZSA9PSAnaTM4Nic6CisgICAgICAgICAgICAgICAgIyBPbiBPU1ggdGhlIG1hY2hpbmUgdHlwZSByZXR1cm5lZCBieSB1bmFtZSBpcyBhbHdheXMgdGhlCisgICAgICAgICAgICAgICAgIyAzMi1iaXQgdmFyaWFudCwgZXZlbiBpZiB0aGUgZXhlY3V0YWJsZSBhcmNoaXRlY3R1cmUgaXMKKyAgICAgICAgICAgICAgICAjIHRoZSA2NC1iaXQgdmFyaWFudAorICAgICAgICAgICAgICAgIGlmIHN5cy5tYXhzaXplID49IDIqKjMyOgorICAgICAgICAgICAgICAgICAgICBtYWNoaW5lID0gJ3g4Nl82NCcKKworICAgICAgICAgICAgZWxpZiBtYWNoaW5lIGluICgnUG93ZXJQQycsICdQb3dlcl9NYWNpbnRvc2gnKToKKyAgICAgICAgICAgICAgICAjIFBpY2sgYSBzYW5lIG5hbWUgZm9yIHRoZSBQUEMgYXJjaGl0ZWN0dXJlLgorICAgICAgICAgICAgICAgICMgU2VlICdpMzg2JyBjYXNlCisgICAgICAgICAgICAgICAgaWYgc3lzLm1heHNpemUgPj0gMioqMzI6CisgICAgICAgICAgICAgICAgICAgIG1hY2hpbmUgPSAncHBjNjQnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWFjaGluZSA9ICdwcGMnCisKKyAgICByZXR1cm4gIiVzLSVzLSVzIiAlIChvc25hbWUsIHJlbGVhc2UsIG1hY2hpbmUpCisKKworZGVmIGdldF9weXRob25fdmVyc2lvbigpOgorICAgIHJldHVybiBfUFlfVkVSU0lPTl9TSE9SVAorCitkZWYgX3ByaW50X2RpY3QodGl0bGUsIGRhdGEpOgorICAgIGZvciBpbmRleCwgKGtleSwgdmFsdWUpIGluIGVudW1lcmF0ZShzb3J0ZWQoZGF0YS5pdGVtcygpKSk6CisgICAgICAgIGlmIGluZGV4ID09IDA6CisgICAgICAgICAgICBwcmludCgnezB9OiAnLmZvcm1hdCh0aXRsZSkpCisgICAgICAgIHByaW50KCdcdHswfSA9ICJ7MX0iJy5mb3JtYXQoa2V5LCB2YWx1ZSkpCisKK2RlZiBfbWFpbigpOgorICAgICIiIkRpc3BsYXkgYWxsIGluZm9ybWF0aW9uIHN5c2NvbmZpZyBkZXRhaW5zLiIiIgorICAgIHByaW50KCdQbGF0Zm9ybTogInswfSInLmZvcm1hdChnZXRfcGxhdGZvcm0oKSkpCisgICAgcHJpbnQoJ1B5dGhvbiB2ZXJzaW9uOiAiezB9IicuZm9ybWF0KGdldF9weXRob25fdmVyc2lvbigpKSkKKyAgICBwcmludCgnQ3VycmVudCBpbnN0YWxsYXRpb24gc2NoZW1lOiAiezB9IicuZm9ybWF0KF9nZXRfZGVmYXVsdF9zY2hlbWUoKSkpCisgICAgcHJpbnQoJycpCisgICAgX3ByaW50X2RpY3QoJ1BhdGhzJywgZ2V0X3BhdGhzKCkpCisgICAgcHJpbnQoJycpCisgICAgX3ByaW50X2RpY3QoJ1ZhcmlhYmxlcycsIGdldF9jb25maWdfdmFycygpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90YWJuYW5ueS5weSBiL0xpYi90YWJuYW5ueS5weQppbmRleCAzYThjZDM3Li40NmY4MTYzIDEwMDc1NQotLS0gYS9MaWIvdGFibmFubnkucHkKKysrIGIvTGliL3RhYm5hbm55LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiVGhlIFRhYiBOYW5ueSBkZXNwaXNlcyBhbWJpZ3VvdXMgaW5kZW50YXRpb24uICBTaGUga25vd3Mgbm8gbWVyY3kuCiAKQEAgLTkzLDExICs5Myw4IEBACiAgICAgICAgICAgICAgICAgY2hlY2soZnVsbG5hbWUpCiAgICAgICAgIHJldHVybgogCi0gICAgd2l0aCBvcGVuKGZpbGUsICdyYicpIGFzIGY6Ci0gICAgICAgIGVuY29kaW5nLCBsaW5lcyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmLnJlYWRsaW5lKQotCiAgICAgdHJ5OgotICAgICAgICBmID0gb3BlbihmaWxlLCBlbmNvZGluZz1lbmNvZGluZykKKyAgICAgICAgZiA9IHRva2VuaXplLm9wZW4oZmlsZSkKICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgIGVycnByaW50KCIlcjogSS9PIEVycm9yOiAlcyIgJSAoZmlsZSwgbXNnKSkKICAgICAgICAgcmV0dXJuCkBAIC0yNjcsNyArMjY0LDcgQEAKICAgICAgICAgcmV0dXJuIGEKIAogZGVmIGZvcm1hdF93aXRuZXNzZXModyk6Ci0gICAgZmlyc3RzID0gbWFwKGxhbWJkYSB0dXA6IHN0cih0dXBbMF0pLCB3KQorICAgIGZpcnN0cyA9IChzdHIodHVwWzBdKSBmb3IgdHVwIGluIHcpCiAgICAgcHJlZml4ID0gImF0IHRhYiBzaXplIgogICAgIGlmIGxlbih3KSA+IDE6CiAgICAgICAgIHByZWZpeCA9IHByZWZpeCArICJzIgpkaWZmIC0tZ2l0IGEvTGliL3RhcmZpbGUucHkgYi9MaWIvdGFyZmlsZS5weQppbmRleCBiZWI0MTM1Ny4uMGY5ZDFkYSAxMDA2NDQKLS0tIGEvTGliL3RhcmZpbGUucHkKKysrIGIvTGliL3RhcmZpbGUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIHRhcmZpbGUucHkKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MCwxOCArNTAsMjAgQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcmUKIAotaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgICMgVGhpcyBtb2R1bGUgbmVlZHMgd29yayBmb3IgTWFjT1M5LCBlc3BlY2lhbGx5IGluIHRoZSBhcmVhIG9mIHBhdGhuYW1lCi0gICAgIyBoYW5kbGluZy4gSW4gbWFueSBwbGFjZXMgaXQgaXMgYXNzdW1lZCBhIHNpbXBsZSBzdWJzdGl0dXRpb24gb2YgLyBieSB0aGUKLSAgICAjIGxvY2FsIG9zLnBhdGguc2VwIGlzIGdvb2QgZW5vdWdoIHRvIGNvbnZlcnQgcGF0aG5hbWVzLCBidXQgdGhpcyBkb2VzIG5vdAotICAgICMgd29yayB3aXRoIHRoZSBtYWMgcm9vdGVkOnBhdGg6bmFtZSB2ZXJzdXMgOm5vbnJvb3RlZDpwYXRoOm5hbWUgc3ludGF4Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoInRhcmZpbGUgZG9lcyBub3Qgd29yayBmb3IgcGxhdGZvcm09PW1hYyIpCi0KIHRyeToKICAgICBpbXBvcnQgZ3JwLCBwd2QKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBncnAgPSBwd2QgPSBOb25lCiAKKyMgb3Muc3ltbGluayBvbiBXaW5kb3dzIHByaW9yIHRvIDYuMCByYWlzZXMgTm90SW1wbGVtZW50ZWRFcnJvcgorc3ltbGlua19leGNlcHRpb24gPSAoQXR0cmlidXRlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpCit0cnk6CisgICAgIyBXaW5kb3dzRXJyb3IgKDEzMTQpIHdpbGwgYmUgcmFpc2VkIGlmIHRoZSBjYWxsZXIgZG9lcyBub3QgaG9sZCB0aGUKKyAgICAjIFNlQ3JlYXRlU3ltYm9saWNMaW5rUHJpdmlsZWdlIHByaXZpbGVnZQorICAgIHN5bWxpbmtfZXhjZXB0aW9uICs9IChXaW5kb3dzRXJyb3IsKQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICBwYXNzCisKICMgZnJvbSB0YXJmaWxlIGltcG9ydCAqCiBfX2FsbF9fID0gWyJUYXJGaWxlIiwgIlRhckluZm8iLCAiaXNfdGFyZmlsZSIsICJUYXJFcnJvciJdCiAKQEAgLTEyNSw2ICsxMjcsOSBAQAogUEFYX0ZJRUxEUyA9ICgicGF0aCIsICJsaW5rcGF0aCIsICJzaXplIiwgIm10aW1lIiwKICAgICAgICAgICAgICAgInVpZCIsICJnaWQiLCAidW5hbWUiLCAiZ25hbWUiKQogCisjIEZpZWxkcyBmcm9tIGEgcGF4IGhlYWRlciB0aGF0IGFyZSBhZmZlY3RlZCBieSBoZHJjaGFyc2V0LgorUEFYX05BTUVfRklFTERTID0geyJwYXRoIiwgImxpbmtwYXRoIiwgInVuYW1lIiwgImduYW1lIn0KKwogIyBGaWVsZHMgaW4gYSBwYXggaGVhZGVyIHRoYXQgYXJlIG51bWJlcnMsIGFsbCBvdGhlciBmaWVsZHMKICMgYXJlIHRyZWF0ZWQgYXMgc3RyaW5ncy4KIFBBWF9OVU1CRVJfRklFTERTID0gewpAQCAtMTYzLDkgKzE2OCwxMCBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbml0aWFsaXphdGlvbgogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRU5DT0RJTkcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKLWlmIEVOQ09ESU5HIGlzIE5vbmU6Ci0gICAgRU5DT0RJTkcgPSAiYXNjaWkiCitpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKKyAgICBFTkNPRElORyA9ICJ1dGYtOCIKK2Vsc2U6CisgICAgRU5DT0RJTkcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBTb21lIHVzZWZ1bCBmdW5jdGlvbnMKQEAgLTE5NCw3ICsyMDAsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuID0gaW50KG50cyhzLCAiYXNjaWkiLCAic3RyaWN0Iikgb3IgIjAiLCA4KQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEhlYWRlckVycm9yKCJpbnZhbGlkIGhlYWRlciIpCisgICAgICAgICAgICByYWlzZSBJbnZhbGlkSGVhZGVyRXJyb3IoImludmFsaWQgaGVhZGVyIikKICAgICBlbHNlOgogICAgICAgICBuID0gMAogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocykgLSAxKToKQEAgLTMwOSwxMSArMzE1LDYgQEAKICAgICAgICAgICAgIHBlcm0uYXBwZW5kKCItIikKICAgICByZXR1cm4gIiIuam9pbihwZXJtKQogCi1pZiBvcy5zZXAgIT0gIi8iOgotICAgIG5vcm1wYXRoID0gbGFtYmRhIHBhdGg6IG9zLnBhdGgubm9ybXBhdGgocGF0aCkucmVwbGFjZShvcy5zZXAsICIvIikKLWVsc2U6Ci0gICAgbm9ybXBhdGggPSBvcy5wYXRoLm5vcm1wYXRoCi0KIGNsYXNzIFRhckVycm9yKEV4Y2VwdGlvbik6CiAgICAgIiIiQmFzZSBleGNlcHRpb24uIiIiCiAgICAgcGFzcwpAQCAtMzMwLDggKzMzMSwyMyBAQAogICAgICIiIkV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucyBvbiBzdHJlYW0tbGlrZSBUYXJGaWxlcy4iIiIKICAgICBwYXNzCiBjbGFzcyBIZWFkZXJFcnJvcihUYXJFcnJvcik6CisgICAgIiIiQmFzZSBleGNlcHRpb24gZm9yIGhlYWRlciBlcnJvcnMuIiIiCisgICAgcGFzcworY2xhc3MgRW1wdHlIZWFkZXJFcnJvcihIZWFkZXJFcnJvcik6CisgICAgIiIiRXhjZXB0aW9uIGZvciBlbXB0eSBoZWFkZXJzLiIiIgorICAgIHBhc3MKK2NsYXNzIFRydW5jYXRlZEhlYWRlckVycm9yKEhlYWRlckVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIHRydW5jYXRlZCBoZWFkZXJzLiIiIgorICAgIHBhc3MKK2NsYXNzIEVPRkhlYWRlckVycm9yKEhlYWRlckVycm9yKToKKyAgICAiIiJFeGNlcHRpb24gZm9yIGVuZCBvZiBmaWxlIGhlYWRlcnMuIiIiCisgICAgcGFzcworY2xhc3MgSW52YWxpZEhlYWRlckVycm9yKEhlYWRlckVycm9yKToKICAgICAiIiJFeGNlcHRpb24gZm9yIGludmFsaWQgaGVhZGVycy4iIiIKICAgICBwYXNzCitjbGFzcyBTdWJzZXF1ZW50SGVhZGVyRXJyb3IoSGVhZGVyRXJyb3IpOgorICAgICIiIkV4Y2VwdGlvbiBmb3IgbWlzc2luZyBhbmQgaW52YWxpZCBleHRlbmRlZCBoZWFkZXJzLiIiIgorICAgIHBhc3MKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBpbnRlcm5hbCBzdHJlYW0gaW50ZXJmYWNlCkBAIC0zOTQsMjggKzQxMCwzNCBAQAogICAgICAgICBzZWxmLnBvcyAgICAgID0gMAogICAgICAgICBzZWxmLmNsb3NlZCAgID0gRmFsc2UKIAotICAgICAgICBpZiBjb21wdHlwZSA9PSAiZ3oiOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB6bGliCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcHJlc3Npb25FcnJvcigiemxpYiBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSIpCi0gICAgICAgICAgICBzZWxmLnpsaWIgPSB6bGliCi0gICAgICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoYiIiKQotICAgICAgICAgICAgaWYgbW9kZSA9PSAiciI6Ci0gICAgICAgICAgICAgICAgc2VsZi5faW5pdF9yZWFkX2d6KCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5faW5pdF93cml0ZV9neigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGNvbXB0eXBlID09ICJneiI6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgemxpYgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcHJlc3Npb25FcnJvcigiemxpYiBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSIpCisgICAgICAgICAgICAgICAgc2VsZi56bGliID0gemxpYgorICAgICAgICAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpCisgICAgICAgICAgICAgICAgaWYgbW9kZSA9PSAiciI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRfcmVhZF9neigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdF93cml0ZV9neigpCiAKLSAgICAgICAgaWYgY29tcHR5cGUgPT0gImJ6MiI6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IGJ6MgotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXByZXNzaW9uRXJyb3IoImJ6MiBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSIpCi0gICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKLSAgICAgICAgICAgICAgICBzZWxmLmRidWYgPSBiIiIKLSAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJEZWNvbXByZXNzb3IoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmNtcCA9IGJ6Mi5CWjJDb21wcmVzc29yKCkKKyAgICAgICAgICAgIGlmIGNvbXB0eXBlID09ICJiejIiOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGJ6MgorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQ29tcHJlc3Npb25FcnJvcigiYnoyIG1vZHVsZSBpcyBub3QgYXZhaWxhYmxlIikKKyAgICAgICAgICAgICAgICBpZiBtb2RlID09ICJyIjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kYnVmID0gYiIiCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbXAgPSBiejIuQloyQ29tcHJlc3NvcigpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9leHRmaWxlb2JqOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAiY2xvc2VkIikgYW5kIG5vdCBzZWxmLmNsb3NlZDoKQEAgLTY3OSwxMyArNzAxLDI5IEBACiAgICAgICAgb2JqZWN0LgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVvYmosIG9mZnNldCwgc2l6ZSwgc3BhcnNlPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlb2JqLCBvZmZzZXQsIHNpemUsIGJsb2NraW5mbz1Ob25lKToKICAgICAgICAgc2VsZi5maWxlb2JqID0gZmlsZW9iagogICAgICAgICBzZWxmLm9mZnNldCA9IG9mZnNldAogICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgICAgIHNlbGYuc3BhcnNlID0gc3BhcnNlCiAgICAgICAgIHNlbGYucG9zaXRpb24gPSAwCiAKKyAgICAgICAgaWYgYmxvY2tpbmZvIGlzIE5vbmU6CisgICAgICAgICAgICBibG9ja2luZm8gPSBbKDAsIHNpemUpXQorCisgICAgICAgICMgQ29uc3RydWN0IGEgbWFwIHdpdGggZGF0YSBhbmQgemVybyBibG9ja3MuCisgICAgICAgIHNlbGYubWFwX2luZGV4ID0gMAorICAgICAgICBzZWxmLm1hcCA9IFtdCisgICAgICAgIGxhc3Rwb3MgPSAwCisgICAgICAgIHJlYWxwb3MgPSBzZWxmLm9mZnNldAorICAgICAgICBmb3Igb2Zmc2V0LCBzaXplIGluIGJsb2NraW5mbzoKKyAgICAgICAgICAgIGlmIG9mZnNldCA+IGxhc3Rwb3M6CisgICAgICAgICAgICAgICAgc2VsZi5tYXAuYXBwZW5kKChGYWxzZSwgbGFzdHBvcywgb2Zmc2V0LCBOb25lKSkKKyAgICAgICAgICAgIHNlbGYubWFwLmFwcGVuZCgoVHJ1ZSwgb2Zmc2V0LCBvZmZzZXQgKyBzaXplLCByZWFscG9zKSkKKyAgICAgICAgICAgIHJlYWxwb3MgKz0gc2l6ZQorICAgICAgICAgICAgbGFzdHBvcyA9IG9mZnNldCArIHNpemUKKyAgICAgICAgaWYgbGFzdHBvcyA8IHNlbGYuc2l6ZToKKyAgICAgICAgICAgIHNlbGYubWFwLmFwcGVuZCgoRmFsc2UsIGxhc3Rwb3MsIHNlbGYuc2l6ZSwgTm9uZSkpCisKICAgICBkZWYgc2Vla2FibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuZmlsZW9iaiwgInNlZWthYmxlIik6CiAgICAgICAgICAgICAjIFhYWCBnemlwLkd6aXBGaWxlIGFuZCBiejIuQloyRmlsZQpAQCAtNzEwLDQ4ICs3NDgsMjUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNpemUgPSBtaW4oc2l6ZSwgc2VsZi5zaXplIC0gc2VsZi5wb3NpdGlvbikKIAotICAgICAgICBpZiBzZWxmLnNwYXJzZSBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZG5vcm1hbChzaXplKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVhZHNwYXJzZShzaXplKQotCi0gICAgZGVmIHJlYWRub3JtYWwoc2VsZiwgc2l6ZSk6Ci0gICAgICAgICIiIlJlYWQgb3BlcmF0aW9uIGZvciByZWd1bGFyIGZpbGVzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQgKyBzZWxmLnBvc2l0aW9uKQotICAgICAgICBzZWxmLnBvc2l0aW9uICs9IHNpemUKLSAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW9iai5yZWFkKHNpemUpCi0KLSAgICBkZWYgcmVhZHNwYXJzZShzZWxmLCBzaXplKToKLSAgICAgICAgIiIiUmVhZCBvcGVyYXRpb24gZm9yIHNwYXJzZSBmaWxlcy4KLSAgICAgICAgIiIiCi0gICAgICAgIGRhdGEgPSBiIiIKKyAgICAgICAgYnVmID0gYiIiCiAgICAgICAgIHdoaWxlIHNpemUgPiAwOgotICAgICAgICAgICAgYnVmID0gc2VsZi5yZWFkc3BhcnNlc2VjdGlvbihzaXplKQotICAgICAgICAgICAgaWYgbm90IGJ1ZjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2l6ZSAtPSBsZW4oYnVmKQotICAgICAgICAgICAgZGF0YSArPSBidWYKLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiByZWFkc3BhcnNlc2VjdGlvbihzZWxmLCBzaXplKToKLSAgICAgICAgIiIiUmVhZCBhIHNpbmdsZSBzZWN0aW9uIG9mIGEgc3BhcnNlIGZpbGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWN0aW9uID0gc2VsZi5zcGFyc2UuZmluZChzZWxmLnBvc2l0aW9uKQotCi0gICAgICAgIGlmIHNlY3Rpb24gaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBiIiIKLQotICAgICAgICBzaXplID0gbWluKHNpemUsIHNlY3Rpb24ub2Zmc2V0ICsgc2VjdGlvbi5zaXplIC0gc2VsZi5wb3NpdGlvbikKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHNlY3Rpb24sIF9kYXRhKToKLSAgICAgICAgICAgIHJlYWxwb3MgPSBzZWN0aW9uLnJlYWxwb3MgKyBzZWxmLnBvc2l0aW9uIC0gc2VjdGlvbi5vZmZzZXQKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYub2Zmc2V0ICsgcmVhbHBvcykKLSAgICAgICAgICAgIHNlbGYucG9zaXRpb24gKz0gc2l6ZQotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZW9iai5yZWFkKHNpemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnBvc2l0aW9uICs9IHNpemUKLSAgICAgICAgICAgIHJldHVybiBOVUwgKiBzaXplCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGRhdGEsIHN0YXJ0LCBzdG9wLCBvZmZzZXQgPSBzZWxmLm1hcFtzZWxmLm1hcF9pbmRleF0KKyAgICAgICAgICAgICAgICBpZiBzdGFydCA8PSBzZWxmLnBvc2l0aW9uIDwgc3RvcDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcF9pbmRleCArPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFwX2luZGV4ID09IGxlbihzZWxmLm1hcCk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcF9pbmRleCA9IDAKKyAgICAgICAgICAgIGxlbmd0aCA9IG1pbihzaXplLCBzdG9wIC0gc2VsZi5wb3NpdGlvbikKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsob2Zmc2V0ICsgKHNlbGYucG9zaXRpb24gLSBzdGFydCkpCisgICAgICAgICAgICAgICAgYnVmICs9IHNlbGYuZmlsZW9iai5yZWFkKGxlbmd0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnVmICs9IE5VTCAqIGxlbmd0aAorICAgICAgICAgICAgc2l6ZSAtPSBsZW5ndGgKKyAgICAgICAgICAgIHNlbGYucG9zaXRpb24gKz0gbGVuZ3RoCisgICAgICAgIHJldHVybiBidWYKICNjbGFzcyBfRmlsZUluRmlsZQogCiAKQEAgLTk1NSw3ICs5NzAsNyBAQAogICAgICAgICAiIiJSZXR1cm4gdGhlIFRhckluZm8ncyBhdHRyaWJ1dGVzIGFzIGEgZGljdGlvbmFyeS4KICAgICAgICAgIiIiCiAgICAgICAgIGluZm8gPSB7Ci0gICAgICAgICAgICAibmFtZSI6ICAgICBub3JtcGF0aChzZWxmLm5hbWUpLAorICAgICAgICAgICAgIm5hbWUiOiAgICAgc2VsZi5uYW1lLAogICAgICAgICAgICAgIm1vZGUiOiAgICAgc2VsZi5tb2RlICYgMG83Nzc3LAogICAgICAgICAgICAgInVpZCI6ICAgICAgc2VsZi51aWQsCiAgICAgICAgICAgICAiZ2lkIjogICAgICBzZWxmLmdpZCwKQEAgLTk2Myw3ICs5NzgsNyBAQAogICAgICAgICAgICAgIm10aW1lIjogICAgc2VsZi5tdGltZSwKICAgICAgICAgICAgICJjaGtzdW0iOiAgIHNlbGYuY2hrc3VtLAogICAgICAgICAgICAgInR5cGUiOiAgICAgc2VsZi50eXBlLAotICAgICAgICAgICAgImxpbmtuYW1lIjogbm9ybXBhdGgoc2VsZi5saW5rbmFtZSkgaWYgc2VsZi5saW5rbmFtZSBlbHNlICIiLAorICAgICAgICAgICAgImxpbmtuYW1lIjogc2VsZi5saW5rbmFtZSwKICAgICAgICAgICAgICJ1bmFtZSI6ICAgIHNlbGYudW5hbWUsCiAgICAgICAgICAgICAiZ25hbWUiOiAgICBzZWxmLmduYW1lLAogICAgICAgICAgICAgImRldm1ham9yIjogc2VsZi5kZXZtYWpvciwKQEAgLTk3NSw3ICs5OTAsNyBAQAogCiAgICAgICAgIHJldHVybiBpbmZvCiAKLSAgICBkZWYgdG9idWYoc2VsZiwgZm9ybWF0PURFRkFVTFRfRk9STUFULCBlbmNvZGluZz1FTkNPRElORywgZXJyb3JzPSJzdHJpY3QiKToKKyAgICBkZWYgdG9idWYoc2VsZiwgZm9ybWF0PURFRkFVTFRfRk9STUFULCBlbmNvZGluZz1FTkNPRElORywgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKToKICAgICAgICAgIiIiUmV0dXJuIGEgdGFyIGhlYWRlciBhcyBhIHN0cmluZyBvZiA1MTIgYnl0ZSBibG9ja3MuCiAgICAgICAgICIiIgogICAgICAgICBpbmZvID0gc2VsZi5nZXRfaW5mbygpCkBAIC05ODUsNyArMTAwMCw3IEBACiAgICAgICAgIGVsaWYgZm9ybWF0ID09IEdOVV9GT1JNQVQ6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5jcmVhdGVfZ251X2hlYWRlcihpbmZvLCBlbmNvZGluZywgZXJyb3JzKQogICAgICAgICBlbGlmIGZvcm1hdCA9PSBQQVhfRk9STUFUOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlX3BheF9oZWFkZXIoaW5mbykKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNyZWF0ZV9wYXhfaGVhZGVyKGluZm8sIGVuY29kaW5nKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBmb3JtYXQiKQogCkBAIC0xMDE2LDcgKzEwMzEsNyBAQAogCiAgICAgICAgIHJldHVybiBidWYgKyBzZWxmLl9jcmVhdGVfaGVhZGVyKGluZm8sIEdOVV9GT1JNQVQsIGVuY29kaW5nLCBlcnJvcnMpCiAKLSAgICBkZWYgY3JlYXRlX3BheF9oZWFkZXIoc2VsZiwgaW5mbyk6CisgICAgZGVmIGNyZWF0ZV9wYXhfaGVhZGVyKHNlbGYsIGluZm8sIGVuY29kaW5nKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBvYmplY3QgYXMgYSB1c3RhciBoZWFkZXIgYmxvY2suIElmIGl0IGNhbm5vdCBiZQogICAgICAgICAgICByZXByZXNlbnRlZCB0aGlzIHdheSwgcHJlcGVuZCBhIHBheCBleHRlbmRlZCBoZWFkZXIgc2VxdWVuY2UKICAgICAgICAgICAgd2l0aCBzdXBwbGVtZW50IGluZm9ybWF0aW9uLgpAQCAtMTA1OSw3ICsxMDc0LDcgQEAKIAogICAgICAgICAjIENyZWF0ZSBhIHBheCBleHRlbmRlZCBoZWFkZXIgaWYgbmVjZXNzYXJ5LgogICAgICAgICBpZiBwYXhfaGVhZGVyczoKLSAgICAgICAgICAgIGJ1ZiA9IHNlbGYuX2NyZWF0ZV9wYXhfZ2VuZXJpY19oZWFkZXIocGF4X2hlYWRlcnMsIFhIRFRZUEUpCisgICAgICAgICAgICBidWYgPSBzZWxmLl9jcmVhdGVfcGF4X2dlbmVyaWNfaGVhZGVyKHBheF9oZWFkZXJzLCBYSERUWVBFLCBlbmNvZGluZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGJ1ZiA9IGIiIgogCkBAIC0xMDY5LDcgKzEwODQsNyBAQAogICAgIGRlZiBjcmVhdGVfcGF4X2dsb2JhbF9oZWFkZXIoY2xzLCBwYXhfaGVhZGVycyk6CiAgICAgICAgICIiIlJldHVybiB0aGUgb2JqZWN0IGFzIGEgcGF4IGdsb2JhbCBoZWFkZXIgYmxvY2sgc2VxdWVuY2UuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfcGF4X2dlbmVyaWNfaGVhZGVyKHBheF9oZWFkZXJzLCBYR0xUWVBFKQorICAgICAgICByZXR1cm4gY2xzLl9jcmVhdGVfcGF4X2dlbmVyaWNfaGVhZGVyKHBheF9oZWFkZXJzLCBYR0xUWVBFLCAidXRmOCIpCiAKICAgICBkZWYgX3Bvc2l4X3NwbGl0X25hbWUoc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIlNwbGl0IGEgbmFtZSBsb25nZXIgdGhhbiAxMDAgY2hhcnMgaW50byBhIHByZWZpeApAQCAtMTE0MiwxNSArMTE1NywzNSBAQAogICAgICAgICAgICAgICAgIGNscy5fY3JlYXRlX3BheWxvYWQobmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfY3JlYXRlX3BheF9nZW5lcmljX2hlYWRlcihjbHMsIHBheF9oZWFkZXJzLCB0eXBlKToKLSAgICAgICAgIiIiUmV0dXJuIGEgUE9TSVguMS0yMDAxIGV4dGVuZGVkIG9yIGdsb2JhbCBoZWFkZXIgc2VxdWVuY2UKKyAgICBkZWYgX2NyZWF0ZV9wYXhfZ2VuZXJpY19oZWFkZXIoY2xzLCBwYXhfaGVhZGVycywgdHlwZSwgZW5jb2RpbmcpOgorICAgICAgICAiIiJSZXR1cm4gYSBQT1NJWC4xLTIwMDggZXh0ZW5kZWQgb3IgZ2xvYmFsIGhlYWRlciBzZXF1ZW5jZQogICAgICAgICAgICB0aGF0IGNvbnRhaW5zIGEgbGlzdCBvZiBrZXl3b3JkLCB2YWx1ZSBwYWlycy4gVGhlIHZhbHVlcwogICAgICAgICAgICBtdXN0IGJlIHN0cmluZ3MuCiAgICAgICAgICIiIgorICAgICAgICAjIENoZWNrIGlmIG9uZSBvZiB0aGUgZmllbGRzIGNvbnRhaW5zIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCB0aGVyZWJ5CisgICAgICAgICMgZm9yY2VzIGhkcmNoYXJzZXQ9QklOQVJZLCBzZWUgX3Byb2NfcGF4KCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgICAgICAgIGJpbmFyeSA9IEZhbHNlCisgICAgICAgIGZvciBrZXl3b3JkLCB2YWx1ZSBpbiBwYXhfaGVhZGVycy5pdGVtcygpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlLmVuY29kZSgidXRmOCIsICJzdHJpY3QiKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICBiaW5hcnkgPSBUcnVlCisgICAgICAgICAgICAgICAgYnJlYWsKKwogICAgICAgICByZWNvcmRzID0gYiIiCisgICAgICAgIGlmIGJpbmFyeToKKyAgICAgICAgICAgICMgUHV0IHRoZSBoZHJjaGFyc2V0IGZpZWxkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGhlYWRlci4KKyAgICAgICAgICAgIHJlY29yZHMgKz0gYiIyMSBoZHJjaGFyc2V0PUJJTkFSWVxuIgorCiAgICAgICAgIGZvciBrZXl3b3JkLCB2YWx1ZSBpbiBwYXhfaGVhZGVycy5pdGVtcygpOgogICAgICAgICAgICAga2V5d29yZCA9IGtleXdvcmQuZW5jb2RlKCJ1dGY4IikKLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJ1dGY4IikKKyAgICAgICAgICAgIGlmIGJpbmFyeToKKyAgICAgICAgICAgICAgICAjIFRyeSB0byByZXN0b3JlIHRoZSBvcmlnaW5hbCBieXRlIHJlcHJlc2VudGF0aW9uIG9mIGB2YWx1ZScuCisgICAgICAgICAgICAgICAgIyBOZWVkbGVzcyB0byBzYXksIHRoYXQgdGhlIGVuY29kaW5nIG11c3QgbWF0Y2ggdGhlIHN0cmluZy4KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmVuY29kZShlbmNvZGluZywgInN1cnJvZ2F0ZWVzY2FwZSIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJ1dGY4IikKKwogICAgICAgICAgICAgbCA9IGxlbihrZXl3b3JkKSArIGxlbih2YWx1ZSkgKyAzICAgIyAnICcgKyAnPScgKyAnXG4nCiAgICAgICAgICAgICBuID0gcCA9IDAKICAgICAgICAgICAgIHdoaWxlIFRydWU6CkBAIC0xMTc2LDE0ICsxMjExLDE2IEBACiAgICAgZGVmIGZyb21idWYoY2xzLCBidWYsIGVuY29kaW5nLCBlcnJvcnMpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBUYXJJbmZvIG9iamVjdCBmcm9tIGEgNTEyIGJ5dGUgYnl0ZXMgb2JqZWN0LgogICAgICAgICAiIiIKKyAgICAgICAgaWYgbGVuKGJ1ZikgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIEVtcHR5SGVhZGVyRXJyb3IoImVtcHR5IGhlYWRlciIpCiAgICAgICAgIGlmIGxlbihidWYpICE9IEJMT0NLU0laRToKLSAgICAgICAgICAgIHJhaXNlIEhlYWRlckVycm9yKCJ0cnVuY2F0ZWQgaGVhZGVyIikKKyAgICAgICAgICAgIHJhaXNlIFRydW5jYXRlZEhlYWRlckVycm9yKCJ0cnVuY2F0ZWQgaGVhZGVyIikKICAgICAgICAgaWYgYnVmLmNvdW50KE5VTCkgPT0gQkxPQ0tTSVpFOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoImVtcHR5IGhlYWRlciIpCisgICAgICAgICAgICByYWlzZSBFT0ZIZWFkZXJFcnJvcigiZW5kIG9mIGZpbGUgaGVhZGVyIikKIAogICAgICAgICBjaGtzdW0gPSBudGkoYnVmWzE0ODoxNTZdKQogICAgICAgICBpZiBjaGtzdW0gbm90IGluIGNhbGNfY2hrc3VtcyhidWYpOgotICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoImJhZCBjaGVja3N1bSIpCisgICAgICAgICAgICByYWlzZSBJbnZhbGlkSGVhZGVyRXJyb3IoImJhZCBjaGVja3N1bSIpCiAKICAgICAgICAgb2JqID0gY2xzKCkKICAgICAgICAgb2JqLm5hbWUgPSBudHMoYnVmWzA6MTAwXSwgZW5jb2RpbmcsIGVycm9ycykKQEAgLTEyMzksOCArMTI3Niw2IEBACiAgICAgICAgICAgIHRhcmZpbGUuCiAgICAgICAgICIiIgogICAgICAgICBidWYgPSB0YXJmaWxlLmZpbGVvYmoucmVhZChCTE9DS1NJWkUpCi0gICAgICAgIGlmIG5vdCBidWY6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgb2JqID0gY2xzLmZyb21idWYoYnVmLCB0YXJmaWxlLmVuY29kaW5nLCB0YXJmaWxlLmVycm9ycykKICAgICAgICAgb2JqLm9mZnNldCA9IHRhcmZpbGUuZmlsZW9iai50ZWxsKCkgLSBCTE9DS1NJWkUKICAgICAgICAgcmV0dXJuIG9iai5fcHJvY19tZW1iZXIodGFyZmlsZSkKQEAgLTEyOTMsOSArMTMyOCwxMCBAQAogICAgICAgICBidWYgPSB0YXJmaWxlLmZpbGVvYmoucmVhZChzZWxmLl9ibG9jayhzZWxmLnNpemUpKQogCiAgICAgICAgICMgRmV0Y2ggdGhlIG5leHQgaGVhZGVyIGFuZCBwcm9jZXNzIGl0LgotICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQotICAgICAgICBpZiBuZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBIZWFkZXJFcnJvcigibWlzc2luZyBzdWJzZXF1ZW50IGhlYWRlciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5leHQgPSBzZWxmLmZyb210YXJmaWxlKHRhcmZpbGUpCisgICAgICAgIGV4Y2VwdCBIZWFkZXJFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFN1YnNlcXVlbnRIZWFkZXJFcnJvcigibWlzc2luZyBvciBiYWQgc3Vic2VxdWVudCBoZWFkZXIiKQogCiAgICAgICAgICMgUGF0Y2ggdGhlIFRhckluZm8gb2JqZWN0IGZyb20gdGhlIG5leHQgaGVhZGVyIHdpdGgKICAgICAgICAgIyB0aGUgbG9uZ25hbWUgaW5mb3JtYXRpb24uCkBAIC0xMzI0LDMzICsxMzYwLDIwIEBACiAgICAgICAgICAgICAgICAgICAgIG51bWJ5dGVzID0gbnRpKGJ1Zltwb3MgKyAxMjpwb3MgKyAyNF0pCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc3RydWN0cy5hcHBlbmQoKG9mZnNldCwgbnVtYnl0ZXMpKQorICAgICAgICAgICAgICAgIGlmIG9mZnNldCBhbmQgbnVtYnl0ZXM6CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdHMuYXBwZW5kKChvZmZzZXQsIG51bWJ5dGVzKSkKICAgICAgICAgICAgICAgICBwb3MgKz0gMjQKICAgICAgICAgICAgIGlzZXh0ZW5kZWQgPSBib29sKGJ1Zls1MDRdKQotCi0gICAgICAgICMgVHJhbnNmb3JtIHRoZSBzcGFyc2Ugc3RydWN0dXJlcyB0byBzb21ldGhpbmcgd2UgY2FuIHVzZQotICAgICAgICAjIGluIEV4RmlsZU9iamVjdC4KLSAgICAgICAgc2VsZi5zcGFyc2UgPSBfcmluZ2J1ZmZlcigpCi0gICAgICAgIGxhc3Rwb3MgPSAwCi0gICAgICAgIHJlYWxwb3MgPSAwCi0gICAgICAgIGZvciBvZmZzZXQsIG51bWJ5dGVzIGluIHN0cnVjdHM6Ci0gICAgICAgICAgICBpZiBvZmZzZXQgPiBsYXN0cG9zOgotICAgICAgICAgICAgICAgIHNlbGYuc3BhcnNlLmFwcGVuZChfaG9sZShsYXN0cG9zLCBvZmZzZXQgLSBsYXN0cG9zKSkKLSAgICAgICAgICAgIHNlbGYuc3BhcnNlLmFwcGVuZChfZGF0YShvZmZzZXQsIG51bWJ5dGVzLCByZWFscG9zKSkKLSAgICAgICAgICAgIHJlYWxwb3MgKz0gbnVtYnl0ZXMKLSAgICAgICAgICAgIGxhc3Rwb3MgPSBvZmZzZXQgKyBudW1ieXRlcwotICAgICAgICBpZiBsYXN0cG9zIDwgb3JpZ3NpemU6Ci0gICAgICAgICAgICBzZWxmLnNwYXJzZS5hcHBlbmQoX2hvbGUobGFzdHBvcywgb3JpZ3NpemUgLSBsYXN0cG9zKSkKKyAgICAgICAgc2VsZi5zcGFyc2UgPSBzdHJ1Y3RzCiAKICAgICAgICAgc2VsZi5vZmZzZXRfZGF0YSA9IHRhcmZpbGUuZmlsZW9iai50ZWxsKCkKICAgICAgICAgdGFyZmlsZS5vZmZzZXQgPSBzZWxmLm9mZnNldF9kYXRhICsgc2VsZi5fYmxvY2soc2VsZi5zaXplKQogICAgICAgICBzZWxmLnNpemUgPSBvcmlnc2l6ZQotCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX3Byb2NfcGF4KHNlbGYsIHRhcmZpbGUpOgogICAgICAgICAiIiJQcm9jZXNzIGFuIGV4dGVuZGVkIG9yIGdsb2JhbCBoZWFkZXIgYXMgZGVzY3JpYmVkIGluCi0gICAgICAgICAgIFBPU0lYLjEtMjAwMS4KKyAgICAgICAgICAgUE9TSVguMS0yMDA4LgogICAgICAgICAiIiIKICAgICAgICAgIyBSZWFkIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24uCiAgICAgICAgIGJ1ZiA9IHRhcmZpbGUuZmlsZW9iai5yZWFkKHNlbGYuX2Jsb2NrKHNlbGYuc2l6ZSkpCkBAIC0xMzYzLDYgKzEzODYsMjQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBheF9oZWFkZXJzID0gdGFyZmlsZS5wYXhfaGVhZGVycy5jb3B5KCkKIAorICAgICAgICAjIENoZWNrIGlmIHRoZSBwYXggaGVhZGVyIGNvbnRhaW5zIGEgaGRyY2hhcnNldCBmaWVsZC4gVGhpcyB0ZWxscyB1cworICAgICAgICAjIHRoZSBlbmNvZGluZyBvZiB0aGUgcGF0aCwgbGlua3BhdGgsIHVuYW1lIGFuZCBnbmFtZSBmaWVsZHMuIE5vcm1hbGx5LAorICAgICAgICAjIHRoZXNlIGZpZWxkcyBhcmUgVVRGLTggZW5jb2RlZCBidXQgc2luY2UgUE9TSVguMS0yMDA4IHRhcgorICAgICAgICAjIGltcGxlbWVudGF0aW9ucyBhcmUgYWxsb3dlZCB0byBzdG9yZSB0aGVtIGFzIHJhdyBiaW5hcnkgc3RyaW5ncyBpZgorICAgICAgICAjIHRoZSB0cmFuc2xhdGlvbiB0byBVVEYtOCBmYWlscy4KKyAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2goYnIiXGQrIGhkcmNoYXJzZXQ9KFteXG5dKylcbiIsIGJ1ZikKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwYXhfaGVhZGVyc1siaGRyY2hhcnNldCJdID0gbWF0Y2guZ3JvdXAoMSkuZGVjb2RlKCJ1dGY4IikKKworICAgICAgICAjIEZvciB0aGUgdGltZSBiZWluZywgd2UgZG9uJ3QgY2FyZSBhYm91dCBhbnl0aGluZyBvdGhlciB0aGFuICJCSU5BUlkiLgorICAgICAgICAjIFRoZSBvbmx5IG90aGVyIHZhbHVlIHRoYXQgaXMgY3VycmVudGx5IGFsbG93ZWQgYnkgdGhlIHN0YW5kYXJkIGlzCisgICAgICAgICMgIklTTy1JUiAxMDY0NiAyMDAwIFVURi04IiBpbiBvdGhlciB3b3JkcyBVVEYtOC4KKyAgICAgICAgaGRyY2hhcnNldCA9IHBheF9oZWFkZXJzLmdldCgiaGRyY2hhcnNldCIpCisgICAgICAgIGlmIGhkcmNoYXJzZXQgPT0gIkJJTkFSWSI6CisgICAgICAgICAgICBlbmNvZGluZyA9IHRhcmZpbGUuZW5jb2RpbmcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVuY29kaW5nID0gInV0ZjgiCisKICAgICAgICAgIyBQYXJzZSBwYXggaGVhZGVyIGluZm9ybWF0aW9uLiBBIHJlY29yZCBsb29rcyBsaWtlIHRoYXQ6CiAgICAgICAgICMgIiVkICVzPSVzXG4iICUgKGxlbmd0aCwga2V5d29yZCwgdmFsdWUpLiBsZW5ndGggaXMgdGhlIHNpemUKICAgICAgICAgIyBvZiB0aGUgY29tcGxldGUgcmVjb3JkIGluY2x1ZGluZyB0aGUgbGVuZ3RoIGZpZWxkIGl0c2VsZiBhbmQKQEAgLTEzNzgsMTkgKzE0MTksNDUgQEAKICAgICAgICAgICAgIGxlbmd0aCA9IGludChsZW5ndGgpCiAgICAgICAgICAgICB2YWx1ZSA9IGJ1ZlttYXRjaC5lbmQoMikgKyAxOm1hdGNoLnN0YXJ0KDEpICsgbGVuZ3RoIC0gMV0KIAotICAgICAgICAgICAga2V5d29yZCA9IGtleXdvcmQuZGVjb2RlKCJ1dGY4IikKLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZGVjb2RlKCJ1dGY4IikKKyAgICAgICAgICAgICMgTm9ybWFsbHksIHdlIGNvdWxkIGp1c3QgdXNlICJ1dGY4IiBhcyB0aGUgZW5jb2RpbmcgYW5kICJzdHJpY3QiCisgICAgICAgICAgICAjIGFzIHRoZSBlcnJvciBoYW5kbGVyLCBidXQgd2UgYmV0dGVyIG5vdCB0YWtlIHRoZSByaXNrLiBGb3IKKyAgICAgICAgICAgICMgZXhhbXBsZSwgR05VIHRhciA8PSAxLjIzIGlzIGtub3duIHRvIHN0b3JlIGZpbGVuYW1lcyBpdCBjYW5ub3QKKyAgICAgICAgICAgICMgdHJhbnNsYXRlIHRvIFVURi04IGFzIHJhdyBzdHJpbmdzICh1bmZvcnR1bmF0ZWx5IHdpdGhvdXQgYQorICAgICAgICAgICAgIyBoZHJjaGFyc2V0PUJJTkFSWSBoZWFkZXIpLgorICAgICAgICAgICAgIyBXZSBmaXJzdCB0cnkgdGhlIHN0cmljdCBzdGFuZGFyZCBlbmNvZGluZywgYW5kIGlmIHRoYXQgZmFpbHMgd2UKKyAgICAgICAgICAgICMgZmFsbCBiYWNrIG9uIHRoZSB1c2VyJ3MgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsZXIuCisgICAgICAgICAgICBrZXl3b3JkID0gc2VsZi5fZGVjb2RlX3BheF9maWVsZChrZXl3b3JkLCAidXRmOCIsICJ1dGY4IiwKKyAgICAgICAgICAgICAgICAgICAgdGFyZmlsZS5lcnJvcnMpCisgICAgICAgICAgICBpZiBrZXl3b3JkIGluIFBBWF9OQU1FX0ZJRUxEUzoKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX2RlY29kZV9wYXhfZmllbGQodmFsdWUsIGVuY29kaW5nLCB0YXJmaWxlLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZmlsZS5lcnJvcnMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fZGVjb2RlX3BheF9maWVsZCh2YWx1ZSwgInV0ZjgiLCAidXRmOCIsCisgICAgICAgICAgICAgICAgICAgICAgICB0YXJmaWxlLmVycm9ycykKIAogICAgICAgICAgICAgcGF4X2hlYWRlcnNba2V5d29yZF0gPSB2YWx1ZQogICAgICAgICAgICAgcG9zICs9IGxlbmd0aAogCiAgICAgICAgICMgRmV0Y2ggdGhlIG5leHQgaGVhZGVyLgotICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0ID0gc2VsZi5mcm9tdGFyZmlsZSh0YXJmaWxlKQorICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3I6CisgICAgICAgICAgICByYWlzZSBTdWJzZXF1ZW50SGVhZGVyRXJyb3IoIm1pc3Npbmcgb3IgYmFkIHN1YnNlcXVlbnQgaGVhZGVyIikKKworICAgICAgICAjIFByb2Nlc3MgR05VIHNwYXJzZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgaWYgIkdOVS5zcGFyc2UubWFwIiBpbiBwYXhfaGVhZGVyczoKKyAgICAgICAgICAgICMgR05VIGV4dGVuZGVkIHNwYXJzZSBmb3JtYXQgdmVyc2lvbiAwLjEuCisgICAgICAgICAgICBzZWxmLl9wcm9jX2dudXNwYXJzZV8wMShuZXh0LCBwYXhfaGVhZGVycykKKworICAgICAgICBlbGlmICJHTlUuc3BhcnNlLnNpemUiIGluIHBheF9oZWFkZXJzOgorICAgICAgICAgICAgIyBHTlUgZXh0ZW5kZWQgc3BhcnNlIGZvcm1hdCB2ZXJzaW9uIDAuMC4KKyAgICAgICAgICAgIHNlbGYuX3Byb2NfZ251c3BhcnNlXzAwKG5leHQsIHBheF9oZWFkZXJzLCBidWYpCisKKyAgICAgICAgZWxpZiBwYXhfaGVhZGVycy5nZXQoIkdOVS5zcGFyc2UubWFqb3IiKSA9PSAiMSIgYW5kIHBheF9oZWFkZXJzLmdldCgiR05VLnNwYXJzZS5taW5vciIpID09ICIwIjoKKyAgICAgICAgICAgICMgR05VIGV4dGVuZGVkIHNwYXJzZSBmb3JtYXQgdmVyc2lvbiAxLjAuCisgICAgICAgICAgICBzZWxmLl9wcm9jX2dudXNwYXJzZV8xMChuZXh0LCBwYXhfaGVhZGVycywgdGFyZmlsZSkKIAogICAgICAgICBpZiBzZWxmLnR5cGUgaW4gKFhIRFRZUEUsIFNPTEFSSVNfWEhEVFlQRSk6Ci0gICAgICAgICAgICBpZiBuZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSGVhZGVyRXJyb3IoIm1pc3Npbmcgc3Vic2VxdWVudCBoZWFkZXIiKQotCiAgICAgICAgICAgICAjIFBhdGNoIHRoZSBUYXJJbmZvIG9iamVjdCB3aXRoIHRoZSBleHRlbmRlZCBoZWFkZXIgaW5mby4KICAgICAgICAgICAgIG5leHQuX2FwcGx5X3BheF9pbmZvKHBheF9oZWFkZXJzLCB0YXJmaWxlLmVuY29kaW5nLCB0YXJmaWxlLmVycm9ycykKICAgICAgICAgICAgIG5leHQub2Zmc2V0ID0gc2VsZi5vZmZzZXQKQEAgLTE0MDYsMjcgKzE0NzMsNzAgQEAKIAogICAgICAgICByZXR1cm4gbmV4dAogCisgICAgZGVmIF9wcm9jX2dudXNwYXJzZV8wMChzZWxmLCBuZXh0LCBwYXhfaGVhZGVycywgYnVmKToKKyAgICAgICAgIiIiUHJvY2VzcyBhIEdOVSB0YXIgZXh0ZW5kZWQgc3BhcnNlIGhlYWRlciwgdmVyc2lvbiAwLjAuCisgICAgICAgICIiIgorICAgICAgICBvZmZzZXRzID0gW10KKyAgICAgICAgZm9yIG1hdGNoIGluIHJlLmZpbmRpdGVyKGJyIlxkKyBHTlUuc3BhcnNlLm9mZnNldD0oXGQrKVxuIiwgYnVmKToKKyAgICAgICAgICAgIG9mZnNldHMuYXBwZW5kKGludChtYXRjaC5ncm91cCgxKSkpCisgICAgICAgIG51bWJ5dGVzID0gW10KKyAgICAgICAgZm9yIG1hdGNoIGluIHJlLmZpbmRpdGVyKGJyIlxkKyBHTlUuc3BhcnNlLm51bWJ5dGVzPShcZCspXG4iLCBidWYpOgorICAgICAgICAgICAgbnVtYnl0ZXMuYXBwZW5kKGludChtYXRjaC5ncm91cCgxKSkpCisgICAgICAgIG5leHQuc3BhcnNlID0gbGlzdCh6aXAob2Zmc2V0cywgbnVtYnl0ZXMpKQorCisgICAgZGVmIF9wcm9jX2dudXNwYXJzZV8wMShzZWxmLCBuZXh0LCBwYXhfaGVhZGVycyk6CisgICAgICAgICIiIlByb2Nlc3MgYSBHTlUgdGFyIGV4dGVuZGVkIHNwYXJzZSBoZWFkZXIsIHZlcnNpb24gMC4xLgorICAgICAgICAiIiIKKyAgICAgICAgc3BhcnNlID0gW2ludCh4KSBmb3IgeCBpbiBwYXhfaGVhZGVyc1siR05VLnNwYXJzZS5tYXAiXS5zcGxpdCgiLCIpXQorICAgICAgICBuZXh0LnNwYXJzZSA9IGxpc3QoemlwKHNwYXJzZVs6OjJdLCBzcGFyc2VbMTo6Ml0pKQorCisgICAgZGVmIF9wcm9jX2dudXNwYXJzZV8xMChzZWxmLCBuZXh0LCBwYXhfaGVhZGVycywgdGFyZmlsZSk6CisgICAgICAgICIiIlByb2Nlc3MgYSBHTlUgdGFyIGV4dGVuZGVkIHNwYXJzZSBoZWFkZXIsIHZlcnNpb24gMS4wLgorICAgICAgICAiIiIKKyAgICAgICAgZmllbGRzID0gTm9uZQorICAgICAgICBzcGFyc2UgPSBbXQorICAgICAgICBidWYgPSB0YXJmaWxlLmZpbGVvYmoucmVhZChCTE9DS1NJWkUpCisgICAgICAgIGZpZWxkcywgYnVmID0gYnVmLnNwbGl0KGIiXG4iLCAxKQorICAgICAgICBmaWVsZHMgPSBpbnQoZmllbGRzKQorICAgICAgICB3aGlsZSBsZW4oc3BhcnNlKSA8IGZpZWxkcyAqIDI6CisgICAgICAgICAgICBpZiBiIlxuIiBub3QgaW4gYnVmOgorICAgICAgICAgICAgICAgIGJ1ZiArPSB0YXJmaWxlLmZpbGVvYmoucmVhZChCTE9DS1NJWkUpCisgICAgICAgICAgICBudW1iZXIsIGJ1ZiA9IGJ1Zi5zcGxpdChiIlxuIiwgMSkKKyAgICAgICAgICAgIHNwYXJzZS5hcHBlbmQoaW50KG51bWJlcikpCisgICAgICAgIG5leHQub2Zmc2V0X2RhdGEgPSB0YXJmaWxlLmZpbGVvYmoudGVsbCgpCisgICAgICAgIG5leHQuc3BhcnNlID0gbGlzdCh6aXAoc3BhcnNlWzo6Ml0sIHNwYXJzZVsxOjoyXSkpCisKICAgICBkZWYgX2FwcGx5X3BheF9pbmZvKHNlbGYsIHBheF9oZWFkZXJzLCBlbmNvZGluZywgZXJyb3JzKToKICAgICAgICAgIiIiUmVwbGFjZSBmaWVsZHMgd2l0aCBzdXBwbGVtZW50YWwgaW5mb3JtYXRpb24gZnJvbSBhIHByZXZpb3VzCiAgICAgICAgICAgIHBheCBleHRlbmRlZCBvciBnbG9iYWwgaGVhZGVyLgogICAgICAgICAiIiIKICAgICAgICAgZm9yIGtleXdvcmQsIHZhbHVlIGluIHBheF9oZWFkZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBrZXl3b3JkIG5vdCBpbiBQQVhfRklFTERTOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGlmIGtleXdvcmQgPT0gInBhdGgiOgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucnN0cmlwKCIvIikKLQotICAgICAgICAgICAgaWYga2V5d29yZCBpbiBQQVhfTlVNQkVSX0ZJRUxEUzoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gUEFYX05VTUJFUl9GSUVMRFNba2V5d29yZF0odmFsdWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMAotCi0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGtleXdvcmQsIHZhbHVlKQorICAgICAgICAgICAgaWYga2V5d29yZCA9PSAiR05VLnNwYXJzZS5uYW1lIjoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsICJwYXRoIiwgdmFsdWUpCisgICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gIkdOVS5zcGFyc2Uuc2l6ZSI6CisgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCAic2l6ZSIsIGludCh2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIGtleXdvcmQgPT0gIkdOVS5zcGFyc2UucmVhbHNpemUiOgorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgInNpemUiLCBpbnQodmFsdWUpKQorICAgICAgICAgICAgZWxpZiBrZXl3b3JkIGluIFBBWF9GSUVMRFM6CisgICAgICAgICAgICAgICAgaWYga2V5d29yZCBpbiBQQVhfTlVNQkVSX0ZJRUxEUzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBQQVhfTlVNQkVSX0ZJRUxEU1trZXl3b3JkXSh2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IDAKKyAgICAgICAgICAgICAgICBpZiBrZXl3b3JkID09ICJwYXRoIjoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yc3RyaXAoIi8iKQorICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5d29yZCwgdmFsdWUpCiAKICAgICAgICAgc2VsZi5wYXhfaGVhZGVycyA9IHBheF9oZWFkZXJzLmNvcHkoKQogCisgICAgZGVmIF9kZWNvZGVfcGF4X2ZpZWxkKHNlbGYsIHZhbHVlLCBlbmNvZGluZywgZmFsbGJhY2tfZW5jb2RpbmcsIGZhbGxiYWNrX2Vycm9ycyk6CisgICAgICAgICIiIkRlY29kZSBhIHNpbmdsZSBmaWVsZCBmcm9tIGEgcGF4IHJlY29yZC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS5kZWNvZGUoZW5jb2RpbmcsICJzdHJpY3QiKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZShmYWxsYmFja19lbmNvZGluZywgZmFsbGJhY2tfZXJyb3JzKQorCiAgICAgZGVmIF9ibG9jayhzZWxmLCBjb3VudCk6CiAgICAgICAgICIiIlJvdW5kIHVwIGEgYnl0ZSBjb3VudCBieSBCTE9DS1NJWkUgYW5kIHJldHVybiBpdCwKICAgICAgICAgICAgZS5nLiBfYmxvY2soODM0KSA9PiAxMDI0LgpAQCAtMTQ1Myw3ICsxNTYzLDcgQEAKICAgICBkZWYgaXNmaWZvKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi50eXBlID09IEZJRk9UWVBFCiAgICAgZGVmIGlzc3BhcnNlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlID09IEdOVVRZUEVfU1BBUlNFCisgICAgICAgIHJldHVybiBzZWxmLnNwYXJzZSBpcyBub3QgTm9uZQogICAgIGRlZiBpc2RldihzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudHlwZSBpbiAoQ0hSVFlQRSwgQkxLVFlQRSwgRklGT1RZUEUpCiAjIGNsYXNzIFRhckluZm8KQEAgLTE0NzAsNyArMTU4MCw3IEBACiAgICAgaWdub3JlX3plcm9zID0gRmFsc2UgICAgICAgICMgSWYgdHJ1ZSwgc2tpcHMgZW1wdHkgb3IgaW52YWxpZCBibG9ja3MgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY29udGludWVzIHByb2Nlc3NpbmcuCiAKLSAgICBlcnJvcmxldmVsID0gMCAgICAgICAgICAgICAgIyBJZiAwLCBmYXRhbCBlcnJvcnMgb25seSBhcHBlYXIgaW4gZGVidWcKKyAgICBlcnJvcmxldmVsID0gMSAgICAgICAgICAgICAgIyBJZiAwLCBmYXRhbCBlcnJvcnMgb25seSBhcHBlYXIgaW4gZGVidWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtZXNzYWdlcyAoaWYgZGVidWcgPj0gMCkuIElmID4gMCwgZXJyb3JzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYXJlIHBhc3NlZCB0byB0aGUgY2FsbGVyIGFzIGV4Y2VwdGlvbnMuCiAKQEAgLTE0ODYsNyArMTU5Niw3IEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZT1Ob25lLCBtb2RlPSJyIiwgZmlsZW9iaj1Ob25lLCBmb3JtYXQ9Tm9uZSwKICAgICAgICAgICAgIHRhcmluZm89Tm9uZSwgZGVyZWZlcmVuY2U9Tm9uZSwgaWdub3JlX3plcm9zPU5vbmUsIGVuY29kaW5nPU5vbmUsCi0gICAgICAgICAgICBlcnJvcnM9Tm9uZSwgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9Tm9uZSwgZXJyb3JsZXZlbD1Ob25lKToKKyAgICAgICAgICAgIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIiwgcGF4X2hlYWRlcnM9Tm9uZSwgZGVidWc9Tm9uZSwgZXJyb3JsZXZlbD1Ob25lKToKICAgICAgICAgIiIiT3BlbiBhbiAodW5jb21wcmVzc2VkKSB0YXIgYXJjaGl2ZSBgbmFtZScuIGBtb2RlJyBpcyBlaXRoZXIgJ3InIHRvCiAgICAgICAgICAgIHJlYWQgZnJvbSBhbiBleGlzdGluZyBhcmNoaXZlLCAnYScgdG8gYXBwZW5kIGRhdGEgdG8gYW4gZXhpc3RpbmcKICAgICAgICAgICAgZmlsZSBvciAndycgdG8gY3JlYXRlIGEgbmV3IGZpbGUgb3ZlcndyaXRpbmcgYW4gZXhpc3Rpbmcgb25lLiBgbW9kZScKQEAgLTE1MjcsMTMgKzE2MzcsNyBAQAogICAgICAgICAgICAgc2VsZi5pZ25vcmVfemVyb3MgPSBpZ25vcmVfemVyb3MKICAgICAgICAgaWYgZW5jb2RpbmcgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLmVuY29kaW5nID0gZW5jb2RpbmcKLQotICAgICAgICBpZiBlcnJvcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycwotICAgICAgICBlbGlmIG1vZGUgPT0gInIiOgotICAgICAgICAgICAgc2VsZi5lcnJvcnMgPSAicmVwbGFjZSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZXJyb3JzID0gInN0cmljdCIKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBlcnJvcnMKIAogICAgICAgICBpZiBwYXhfaGVhZGVycyBpcyBub3QgTm9uZSBhbmQgc2VsZi5mb3JtYXQgPT0gUEFYX0ZPUk1BVDoKICAgICAgICAgICAgIHNlbGYucGF4X2hlYWRlcnMgPSBwYXhfaGVhZGVycwpAQCAtMTU2MiwxMiArMTY2NiwxNiBAQAogICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09ICJhIjoKICAgICAgICAgICAgICAgICAjIE1vdmUgdG8gdGhlIGVuZCBvZiB0aGUgYXJjaGl2ZSwKICAgICAgICAgICAgICAgICAjIGJlZm9yZSB0aGUgZmlyc3QgZW1wdHkgYmxvY2suCi0gICAgICAgICAgICAgICAgc2VsZi5maXJzdG1lbWJlciA9IE5vbmUKICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm5leHQoKSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5vZmZzZXQgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYuZmlsZW9iai50ZWxsKCkgLSBCTE9DS1NJWkUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYub2Zmc2V0KQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJpbmZvID0gc2VsZi50YXJpbmZvLmZyb210YXJmaWxlKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lbWJlcnMuYXBwZW5kKHRhcmluZm8pCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFT0ZIZWFkZXJFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYub2Zmc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEhlYWRlckVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQogCiAgICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gImF3IjoKICAgICAgICAgICAgICAgICBzZWxmLl9sb2FkZWQgPSBUcnVlCkBAIC0xNjU1LDkgKzE3NjMsMTIgQEAKICAgICAgICAgICAgIGlmIGZpbGVtb2RlIG5vdCBpbiAicnciOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1vZGUgbXVzdCBiZSAncicgb3IgJ3cnIikKIAotICAgICAgICAgICAgdCA9IGNscyhuYW1lLCBmaWxlbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgX1N0cmVhbShuYW1lLCBmaWxlbW9kZSwgY29tcHR5cGUsIGZpbGVvYmosIGJ1ZnNpemUpLAotICAgICAgICAgICAgICAgICAgICAqKmt3YXJncykKKyAgICAgICAgICAgIHN0cmVhbSA9IF9TdHJlYW0obmFtZSwgZmlsZW1vZGUsIGNvbXB0eXBlLCBmaWxlb2JqLCBidWZzaXplKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHQgPSBjbHMobmFtZSwgZmlsZW1vZGUsIHN0cmVhbSwgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gdAogCkBAIC0xNjg4LDE2ICsxNzk5LDE5IEBACiAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHJhaXNlIENvbXByZXNzaW9uRXJyb3IoImd6aXAgbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUiKQogCi0gICAgICAgIGlmIGZpbGVvYmogaXMgTm9uZToKLSAgICAgICAgICAgIGZpbGVvYmogPSBibHRuX29wZW4obmFtZSwgbW9kZSArICJiIikKLQorICAgICAgICBleHRmaWxlb2JqID0gZmlsZW9iaiBpcyBub3QgTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0ID0gY2xzLnRhcm9wZW4obmFtZSwgbW9kZSwKLSAgICAgICAgICAgICAgICBnemlwLkd6aXBGaWxlKG5hbWUsIG1vZGUsIGNvbXByZXNzbGV2ZWwsIGZpbGVvYmopLAotICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgICAgICAgICAgZmlsZW9iaiA9IGd6aXAuR3ppcEZpbGUobmFtZSwgbW9kZSArICJiIiwgY29tcHJlc3NsZXZlbCwgZmlsZW9iaikKKyAgICAgICAgICAgIHQgPSBjbHMudGFyb3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqLCAqKmt3YXJncykKICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBpZiBub3QgZXh0ZmlsZW9iajoKKyAgICAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigibm90IGEgZ3ppcCBmaWxlIikKLSAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGlmIG5vdCBleHRmaWxlb2JqOgorICAgICAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IGV4dGZpbGVvYmoKICAgICAgICAgcmV0dXJuIHQKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMTcyMCw3ICsxODM0LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ID0gY2xzLnRhcm9wZW4obmFtZSwgbW9kZSwgZmlsZW9iaiwgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgIGZpbGVvYmouY2xvc2UoKQogICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKCJub3QgYSBiemlwMiBmaWxlIikKICAgICAgICAgdC5fZXh0ZmlsZW9iaiA9IEZhbHNlCiAgICAgICAgIHJldHVybiB0CkBAIC0xODAxLDEwICsxOTE2LDkgQEAKICAgICAgICAgIyBBYnNvbHV0ZSBwYXRocyBhcmUgdHVybmVkIHRvIHJlbGF0aXZlIHBhdGhzLgogICAgICAgICBpZiBhcmNuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICBhcmNuYW1lID0gbmFtZQotICAgICAgICBhcmNuYW1lID0gbm9ybXBhdGgoYXJjbmFtZSkKICAgICAgICAgZHJ2LCBhcmNuYW1lID0gb3MucGF0aC5zcGxpdGRyaXZlKGFyY25hbWUpCi0gICAgICAgIHdoaWxlIGFyY25hbWVbMDoxXSA9PSAiLyI6Ci0gICAgICAgICAgICBhcmNuYW1lID0gYXJjbmFtZVsxOl0KKyAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUucmVwbGFjZShvcy5zZXAsICIvIikKKyAgICAgICAgYXJjbmFtZSA9IGFyY25hbWUubHN0cmlwKCIvIikKIAogICAgICAgICAjIE5vdywgZmlsbCB0aGUgVGFySW5mbyBvYmplY3Qgd2l0aAogICAgICAgICAjIGluZm9ybWF0aW9uIHNwZWNpZmljIGZvciB0aGUgZmlsZS4KQEAgLTE5MTAsMTMgKzIwMjQsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoImxpbmsgdG8iLCB0YXJpbmZvLmxpbmtuYW1lLCBlbmQ9JyAnKQogICAgICAgICAgICAgcHJpbnQoKQogCi0gICAgZGVmIGFkZChzZWxmLCBuYW1lLCBhcmNuYW1lPU5vbmUsIHJlY3Vyc2l2ZT1UcnVlLCBleGNsdWRlPU5vbmUpOgorICAgIGRlZiBhZGQoc2VsZiwgbmFtZSwgYXJjbmFtZT1Ob25lLCByZWN1cnNpdmU9VHJ1ZSwgZXhjbHVkZT1Ob25lLCAqLCBmaWx0ZXI9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgZmlsZSBgbmFtZScgdG8gdGhlIGFyY2hpdmUuIGBuYW1lJyBtYXkgYmUgYW55IHR5cGUgb2YgZmlsZQogICAgICAgICAgICAoZGlyZWN0b3J5LCBmaWZvLCBzeW1ib2xpYyBsaW5rLCBldGMuKS4gSWYgZ2l2ZW4sIGBhcmNuYW1lJwogICAgICAgICAgICBzcGVjaWZpZXMgYW4gYWx0ZXJuYXRpdmUgbmFtZSBmb3IgdGhlIGZpbGUgaW4gdGhlIGFyY2hpdmUuCiAgICAgICAgICAgIERpcmVjdG9yaWVzIGFyZSBhZGRlZCByZWN1cnNpdmVseSBieSBkZWZhdWx0LiBUaGlzIGNhbiBiZSBhdm9pZGVkIGJ5CiAgICAgICAgICAgIHNldHRpbmcgYHJlY3Vyc2l2ZScgdG8gRmFsc2UuIGBleGNsdWRlJyBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkCi0gICAgICAgICAgIHJldHVybiBUcnVlIGZvciBlYWNoIGZpbGVuYW1lIHRvIGJlIGV4Y2x1ZGVkLgorICAgICAgICAgICByZXR1cm4gVHJ1ZSBmb3IgZWFjaCBmaWxlbmFtZSB0byBiZSBleGNsdWRlZC4gYGZpbHRlcicgaXMgYSBmdW5jdGlvbgorICAgICAgICAgICB0aGF0IGV4cGVjdHMgYSBUYXJJbmZvIG9iamVjdCBhcmd1bWVudCBhbmQgcmV0dXJucyB0aGUgY2hhbmdlZAorICAgICAgICAgICBUYXJJbmZvIG9iamVjdCwgaWYgaXQgcmV0dXJucyBOb25lIHRoZSBUYXJJbmZvIG9iamVjdCB3aWxsIGJlCisgICAgICAgICAgIGV4Y2x1ZGVkIGZyb20gdGhlIGFyY2hpdmUuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9jaGVjaygiYXciKQogCkBAIC0xOTI0LDI1ICsyMDQxLDE5IEBACiAgICAgICAgICAgICBhcmNuYW1lID0gbmFtZQogCiAgICAgICAgICMgRXhjbHVkZSBwYXRobmFtZXMuCi0gICAgICAgIGlmIGV4Y2x1ZGUgaXMgbm90IE5vbmUgYW5kIGV4Y2x1ZGUobmFtZSk6Ci0gICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IEV4Y2x1ZGVkICVyIiAlIG5hbWUpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZXhjbHVkZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICAgICAgd2FybmluZ3Mud2FybigidXNlIHRoZSBmaWx0ZXIgYXJndW1lbnQgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgICAgIGlmIGV4Y2x1ZGUobmFtZSk6CisgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDIsICJ0YXJmaWxlOiBFeGNsdWRlZCAlciIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICMgU2tpcCBpZiBzb21lYm9keSB0cmllcyB0byBhcmNoaXZlIHRoZSBhcmNoaXZlLi4uCiAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZSBhbmQgb3MucGF0aC5hYnNwYXRoKG5hbWUpID09IHNlbGYubmFtZToKICAgICAgICAgICAgIHNlbGYuX2RiZygyLCAidGFyZmlsZTogU2tpcHBlZCAlciIgJSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgIyBTcGVjaWFsIGNhc2U6IFRoZSB1c2VyIHdhbnRzIHRvIGFkZCB0aGUgY3VycmVudAotICAgICAgICAjIHdvcmtpbmcgZGlyZWN0b3J5LgotICAgICAgICBpZiBuYW1lID09ICIuIjoKLSAgICAgICAgICAgIGlmIHJlY3Vyc2l2ZToKLSAgICAgICAgICAgICAgICBpZiBhcmNuYW1lID09ICIuIjoKLSAgICAgICAgICAgICAgICAgICAgYXJjbmFtZSA9ICIiCi0gICAgICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQoZiwgb3MucGF0aC5qb2luKGFyY25hbWUsIGYpLCByZWN1cnNpdmUsIGV4Y2x1ZGUpCi0gICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBzZWxmLl9kYmcoMSwgbmFtZSkKIAogICAgICAgICAjIENyZWF0ZSBhIFRhckluZm8gb2JqZWN0IGZyb20gdGhlIGZpbGUuCkBAIC0xOTUyLDYgKzIwNjMsMTMgQEAKICAgICAgICAgICAgIHNlbGYuX2RiZygxLCAidGFyZmlsZTogVW5zdXBwb3J0ZWQgdHlwZSAlciIgJSBuYW1lKQogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgIyBDaGFuZ2Ugb3IgZXhjbHVkZSB0aGUgVGFySW5mbyBvYmplY3QuCisgICAgICAgIGlmIGZpbHRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRhcmluZm8gPSBmaWx0ZXIodGFyaW5mbykKKyAgICAgICAgICAgIGlmIHRhcmluZm8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgInRhcmZpbGU6IEV4Y2x1ZGVkICVyIiAlIG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAgIyBBcHBlbmQgdGhlIHRhciBoZWFkZXIgYW5kIGRhdGEgdG8gdGhlIGFyY2hpdmUuCiAgICAgICAgIGlmIHRhcmluZm8uaXNyZWcoKToKICAgICAgICAgICAgIGYgPSBibHRuX29wZW4obmFtZSwgInJiIikKQEAgLTE5NjIsNyArMjA4MCw4IEBACiAgICAgICAgICAgICBzZWxmLmFkZGZpbGUodGFyaW5mbykKICAgICAgICAgICAgIGlmIHJlY3Vyc2l2ZToKICAgICAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZChvcy5wYXRoLmpvaW4obmFtZSwgZiksIG9zLnBhdGguam9pbihhcmNuYW1lLCBmKSwgcmVjdXJzaXZlLCBleGNsdWRlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZChvcy5wYXRoLmpvaW4obmFtZSwgZiksIG9zLnBhdGguam9pbihhcmNuYW1lLCBmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmUsIGV4Y2x1ZGUsIGZpbHRlcj1maWx0ZXIpCiAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYWRkZmlsZSh0YXJpbmZvKQpAQCAtMjAxMSw3ICsyMTMwLDggQEAKICAgICAgICAgICAgICAgICBkaXJlY3Rvcmllcy5hcHBlbmQodGFyaW5mbykKICAgICAgICAgICAgICAgICB0YXJpbmZvID0gY29weS5jb3B5KHRhcmluZm8pCiAgICAgICAgICAgICAgICAgdGFyaW5mby5tb2RlID0gMG83MDAKLSAgICAgICAgICAgIHNlbGYuZXh0cmFjdCh0YXJpbmZvLCBwYXRoKQorICAgICAgICAgICAgIyBEbyBub3Qgc2V0X2F0dHJzIGRpcmVjdG9yaWVzLCBhcyB3ZSB3aWxsIGRvIHRoYXQgZnVydGhlciBkb3duCisgICAgICAgICAgICBzZWxmLmV4dHJhY3QodGFyaW5mbywgcGF0aCwgc2V0X2F0dHJzPW5vdCB0YXJpbmZvLmlzZGlyKCkpCiAKICAgICAgICAgIyBSZXZlcnNlIHNvcnQgZGlyZWN0b3JpZXMuCiAgICAgICAgIGRpcmVjdG9yaWVzLnNvcnQoa2V5PWxhbWJkYSBhOiBhLm5hbWUpCkBAIC0yMDMwLDExICsyMTUwLDEyIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGJnKDEsICJ0YXJmaWxlOiAlcyIgJSBlKQogCi0gICAgZGVmIGV4dHJhY3Qoc2VsZiwgbWVtYmVyLCBwYXRoPSIiKToKKyAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9IiIsIHNldF9hdHRycz1UcnVlKToKICAgICAgICAgIiIiRXh0cmFjdCBhIG1lbWJlciBmcm9tIHRoZSBhcmNoaXZlIHRvIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LAogICAgICAgICAgICB1c2luZyBpdHMgZnVsbCBuYW1lLiBJdHMgZmlsZSBpbmZvcm1hdGlvbiBpcyBleHRyYWN0ZWQgYXMgYWNjdXJhdGVseQogICAgICAgICAgICBhcyBwb3NzaWJsZS4gYG1lbWJlcicgbWF5IGJlIGEgZmlsZW5hbWUgb3IgYSBUYXJJbmZvIG9iamVjdC4gWW91IGNhbgotICAgICAgICAgICBzcGVjaWZ5IGEgZGlmZmVyZW50IGRpcmVjdG9yeSB1c2luZyBgcGF0aCcuCisgICAgICAgICAgIHNwZWNpZnkgYSBkaWZmZXJlbnQgZGlyZWN0b3J5IHVzaW5nIGBwYXRoJy4gRmlsZSBhdHRyaWJ1dGVzIChvd25lciwKKyAgICAgICAgICAgbXRpbWUsIG1vZGUpIGFyZSBzZXQgdW5sZXNzIGBzZXRfYXR0cnMnIGlzIEZhbHNlLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2soInIiKQogCkBAIC0yMDQ4LDcgKzIxNjksOCBAQAogICAgICAgICAgICAgdGFyaW5mby5fbGlua190YXJnZXQgPSBvcy5wYXRoLmpvaW4ocGF0aCwgdGFyaW5mby5saW5rbmFtZSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcih0YXJpbmZvLCBvcy5wYXRoLmpvaW4ocGF0aCwgdGFyaW5mby5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHRhcmluZm8sIG9zLnBhdGguam9pbihwYXRoLCB0YXJpbmZvLm5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2F0dHJzPXNldF9hdHRycykKICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIHNlbGYuZXJyb3JsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTIwOTUsMjMgKzIyMTcsMjEgQEAKICAgICAgICAgICAgICAgICByYWlzZSBTdHJlYW1FcnJvcigiY2Fubm90IGV4dHJhY3QgKHN5bSlsaW5rIGFzIGZpbGUgb2JqZWN0IikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBBIChzeW0pbGluaydzIGZpbGUgb2JqZWN0IGlzIGl0cyB0YXJnZXQncyBmaWxlIG9iamVjdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5leHRyYWN0ZmlsZShzZWxmLl9nZXRtZW1iZXIodGFyaW5mby5saW5rbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyaW5mbykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0cmFjdGZpbGUoc2VsZi5fZmluZF9saW5rX3RhcmdldCh0YXJpbmZvKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgSWYgdGhlcmUncyBubyBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVtYmVyIChkaXJlY3RvcnksIGNocmRldiwKICAgICAgICAgICAgICMgYmxrZGV2LCBldGMuKSwgcmV0dXJuIE5vbmUgaW5zdGVhZCBvZiBhIGZpbGUgb2JqZWN0LgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBfZXh0cmFjdF9tZW1iZXIoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CisgICAgZGVmIF9leHRyYWN0X21lbWJlcihzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoLCBzZXRfYXR0cnM9VHJ1ZSk6CiAgICAgICAgICIiIkV4dHJhY3QgdGhlIFRhckluZm8gb2JqZWN0IHRhcmluZm8gdG8gYSBwaHlzaWNhbAogICAgICAgICAgICBmaWxlIGNhbGxlZCB0YXJnZXRwYXRoLgogICAgICAgICAiIiIKICAgICAgICAgIyBGZXRjaCB0aGUgVGFySW5mbyBvYmplY3QgZm9yIHRoZSBnaXZlbiBuYW1lCiAgICAgICAgICMgYW5kIGJ1aWxkIHRoZSBkZXN0aW5hdGlvbiBwYXRobmFtZSwgcmVwbGFjaW5nCiAgICAgICAgICMgZm9yd2FyZCBzbGFzaGVzIHRvIHBsYXRmb3JtIHNwZWNpZmljIHNlcGFyYXRvcnMuCi0gICAgICAgIGlmIHRhcmdldHBhdGhbLTE6XSA9PSAiLyI6Ci0gICAgICAgICAgICB0YXJnZXRwYXRoID0gdGFyZ2V0cGF0aFs6LTFdCi0gICAgICAgIHRhcmdldHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKHRhcmdldHBhdGgpCisgICAgICAgIHRhcmdldHBhdGggPSB0YXJnZXRwYXRoLnJzdHJpcCgiLyIpCisgICAgICAgIHRhcmdldHBhdGggPSB0YXJnZXRwYXRoLnJlcGxhY2UoIi8iLCBvcy5zZXApCiAKICAgICAgICAgIyBDcmVhdGUgYWxsIHVwcGVyIGRpcmVjdG9yaWVzLgogICAgICAgICB1cHBlcmRpcnMgPSBvcy5wYXRoLmRpcm5hbWUodGFyZ2V0cGF0aCkKQEAgLTIxNDAsMTAgKzIyNjAsMTEgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubWFrZWZpbGUodGFyaW5mbywgdGFyZ2V0cGF0aCkKIAotICAgICAgICBzZWxmLmNob3duKHRhcmluZm8sIHRhcmdldHBhdGgpCi0gICAgICAgIGlmIG5vdCB0YXJpbmZvLmlzc3ltKCk6Ci0gICAgICAgICAgICBzZWxmLmNobW9kKHRhcmluZm8sIHRhcmdldHBhdGgpCi0gICAgICAgICAgICBzZWxmLnV0aW1lKHRhcmluZm8sIHRhcmdldHBhdGgpCisgICAgICAgIGlmIHNldF9hdHRyczoKKyAgICAgICAgICAgIHNlbGYuY2hvd24odGFyaW5mbywgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCB0YXJpbmZvLmlzc3ltKCk6CisgICAgICAgICAgICAgICAgc2VsZi5jaG1vZCh0YXJpbmZvLCB0YXJnZXRwYXRoKQorICAgICAgICAgICAgICAgIHNlbGYudXRpbWUodGFyaW5mbywgdGFyZ2V0cGF0aCkKIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgQmVsb3cgYXJlIHRoZSBkaWZmZXJlbnQgZmlsZSBtZXRob2RzLiBUaGV5IGFyZSBjYWxsZWQgdmlhCkBAIC0yMTY0LDEwICsyMjg1LDE3IEBACiAgICAgZGVmIG1ha2VmaWxlKHNlbGYsIHRhcmluZm8sIHRhcmdldHBhdGgpOgogICAgICAgICAiIiJNYWtlIGEgZmlsZSBjYWxsZWQgdGFyZ2V0cGF0aC4KICAgICAgICAgIiIiCi0gICAgICAgIHNvdXJjZSA9IHNlbGYuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgc291cmNlID0gc2VsZi5maWxlb2JqCisgICAgICAgIHNvdXJjZS5zZWVrKHRhcmluZm8ub2Zmc2V0X2RhdGEpCiAgICAgICAgIHRhcmdldCA9IGJsdG5fb3Blbih0YXJnZXRwYXRoLCAid2IiKQotICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCkKLSAgICAgICAgc291cmNlLmNsb3NlKCkKKyAgICAgICAgaWYgdGFyaW5mby5zcGFyc2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3Igb2Zmc2V0LCBzaXplIGluIHRhcmluZm8uc3BhcnNlOgorICAgICAgICAgICAgICAgIHRhcmdldC5zZWVrKG9mZnNldCkKKyAgICAgICAgICAgICAgICBjb3B5ZmlsZW9iaihzb3VyY2UsIHRhcmdldCwgc2l6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvcHlmaWxlb2JqKHNvdXJjZSwgdGFyZ2V0LCB0YXJpbmZvLnNpemUpCisgICAgICAgIHRhcmdldC5zZWVrKHRhcmluZm8uc2l6ZSkKKyAgICAgICAgdGFyZ2V0LnRydW5jYXRlKCkKICAgICAgICAgdGFyZ2V0LmNsb3NlKCkKIAogICAgIGRlZiBtYWtldW5rbm93bihzZWxmLCB0YXJpbmZvLCB0YXJnZXRwYXRoKToKQEAgLTIyMDYsMjcgKzIzMzQsMjkgQEAKICAgICAgICAgICAocGxhdGZvcm0gbGltaXRhdGlvbiksIHdlIHRyeSB0byBtYWtlIGEgY29weSBvZiB0aGUgcmVmZXJlbmNlZCBmaWxlCiAgICAgICAgICAgaW5zdGVhZCBvZiBhIGxpbmsuCiAgICAgICAgICIiIgotICAgICAgICBsaW5rcGF0aCA9IHRhcmluZm8ubGlua25hbWUKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBGb3Igc3lzdGVtcyB0aGF0IHN1cHBvcnQgc3ltYm9saWMgYW5kIGhhcmQgbGlua3MuCiAgICAgICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCk6Ci0gICAgICAgICAgICAgICAgb3Muc3ltbGluayhsaW5rcGF0aCwgdGFyZ2V0cGF0aCkKKyAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHRhcmluZm8ubGlua25hbWUsIHRhcmdldHBhdGgpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgU2VlIGV4dHJhY3QoKS4KLSAgICAgICAgICAgICAgICBvcy5saW5rKHRhcmluZm8uX2xpbmtfdGFyZ2V0LCB0YXJnZXRwYXRoKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyaW5mby5fbGlua190YXJnZXQpOgorICAgICAgICAgICAgICAgICAgICBvcy5saW5rKHRhcmluZm8uX2xpbmtfdGFyZ2V0LCB0YXJnZXRwYXRoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhY3RfbWVtYmVyKHNlbGYuX2ZpbmRfbGlua190YXJnZXQodGFyaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHBhdGgpCisgICAgICAgIGV4Y2VwdCBzeW1saW5rX2V4Y2VwdGlvbjoKICAgICAgICAgICAgIGlmIHRhcmluZm8uaXNzeW0oKToKICAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUodGFyaW5mby5uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rcGF0aCkKLSAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IG5vcm1wYXRoKGxpbmtwYXRoKQotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyaW5mby5saW5rbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGlua3BhdGggPSB0YXJpbmZvLmxpbmtuYW1lCisgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIoc2VsZi5nZXRtZW1iZXIobGlua3BhdGgpLCB0YXJnZXRwYXRoKQotICAgICAgICAgICAgZXhjZXB0IChFbnZpcm9ubWVudEVycm9yLCBLZXlFcnJvcikgYXMgZToKLSAgICAgICAgICAgICAgICBsaW5rcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgobGlua3BhdGgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzaHV0aWwuY29weTIobGlua3BhdGgsIHRhcmdldHBhdGgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigibGluayBjb3VsZCBub3QgYmUgY3JlYXRlZCIpCisgICAgICAgICAgICAgICAgc2VsZi5fZXh0cmFjdF9tZW1iZXIoc2VsZi5fZmluZF9saW5rX3RhcmdldCh0YXJpbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigidW5hYmxlIHRvIHJlc29sdmUgbGluayBpbnNpZGUgYXJjaGl2ZSIpCiAKICAgICBkZWYgY2hvd24oc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CiAgICAgICAgICIiIlNldCBvd25lciBvZiB0YXJnZXRwYXRoIGFjY29yZGluZyB0byB0YXJpbmZvLgpAQCAtMjI4OSw0NCArMjQxOSw2NCBAQAogCiAgICAgICAgICMgUmVhZCB0aGUgbmV4dCBibG9jay4KICAgICAgICAgc2VsZi5maWxlb2JqLnNlZWsoc2VsZi5vZmZzZXQpCisgICAgICAgIHRhcmluZm8gPSBOb25lCiAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyaW5mby5mcm9tdGFyZmlsZShzZWxmKQotICAgICAgICAgICAgICAgIGlmIHRhcmluZm8gaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgc2VsZi5tZW1iZXJzLmFwcGVuZCh0YXJpbmZvKQotCi0gICAgICAgICAgICBleGNlcHQgSGVhZGVyRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBFT0ZIZWFkZXJFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuaWdub3JlX3plcm9zOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgIjB4JVg6ICVzIiAlIChzZWxmLm9mZnNldCwgZSkpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgZXhjZXB0IEludmFsaWRIZWFkZXJFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuaWdub3JlX3plcm9zOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9kYmcoMiwgIjB4JVg6ICVzIiAlIChzZWxmLm9mZnNldCwgZSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IEJMT0NLU0laRQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5vZmZzZXQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKHN0cihlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFbXB0eUhlYWRlckVycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYub2Zmc2V0ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigiZW1wdHkgZmlsZSIpCisgICAgICAgICAgICBleGNlcHQgVHJ1bmNhdGVkSGVhZGVyRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm9mZnNldCA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3Ioc3RyKGUpKQorICAgICAgICAgICAgZXhjZXB0IFN1YnNlcXVlbnRIZWFkZXJFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcihzdHIoZSkpCiAgICAgICAgICAgICBicmVhawogCisgICAgICAgIGlmIHRhcmluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLm1lbWJlcnMuYXBwZW5kKHRhcmluZm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb2FkZWQgPSBUcnVlCisKICAgICAgICAgcmV0dXJuIHRhcmluZm8KIAogICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgTGl0dGxlIGhlbHBlciBtZXRob2RzOgogCi0gICAgZGVmIF9nZXRtZW1iZXIoc2VsZiwgbmFtZSwgdGFyaW5mbz1Ob25lKToKKyAgICBkZWYgX2dldG1lbWJlcihzZWxmLCBuYW1lLCB0YXJpbmZvPU5vbmUsIG5vcm1hbGl6ZT1GYWxzZSk6CiAgICAgICAgICIiIkZpbmQgYW4gYXJjaGl2ZSBtZW1iZXIgYnkgbmFtZSBmcm9tIGJvdHRvbSB0byB0b3AuCiAgICAgICAgICAgIElmIHRhcmluZm8gaXMgZ2l2ZW4sIGl0IGlzIHVzZWQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LgogICAgICAgICAiIiIKICAgICAgICAgIyBFbnN1cmUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIGJlZW4gbG9hZGVkLgogICAgICAgICBtZW1iZXJzID0gc2VsZi5nZXRtZW1iZXJzKCkKIAotICAgICAgICBpZiB0YXJpbmZvIGlzIE5vbmU6Ci0gICAgICAgICAgICBlbmQgPSBsZW4obWVtYmVycykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVuZCA9IG1lbWJlcnMuaW5kZXgodGFyaW5mbykKKyAgICAgICAgIyBMaW1pdCB0aGUgbWVtYmVyIHNlYXJjaCBsaXN0IHVwIHRvIHRhcmluZm8uCisgICAgICAgIGlmIHRhcmluZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBtZW1iZXJzID0gbWVtYmVyc1s6bWVtYmVycy5pbmRleCh0YXJpbmZvKV0KIAotICAgICAgICBmb3IgaSBpbiByYW5nZShlbmQgLSAxLCAtMSwgLTEpOgotICAgICAgICAgICAgaWYgbmFtZSA9PSBtZW1iZXJzW2ldLm5hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1lbWJlcnNbaV0KKyAgICAgICAgaWYgbm9ybWFsaXplOgorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGgubm9ybXBhdGgobmFtZSkKKworICAgICAgICBmb3IgbWVtYmVyIGluIHJldmVyc2VkKG1lbWJlcnMpOgorICAgICAgICAgICAgaWYgbm9ybWFsaXplOgorICAgICAgICAgICAgICAgIG1lbWJlcl9uYW1lID0gb3MucGF0aC5ub3JtcGF0aChtZW1iZXIubmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUgPSBtZW1iZXIubmFtZQorCisgICAgICAgICAgICBpZiBuYW1lID09IG1lbWJlcl9uYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBtZW1iZXIKIAogICAgIGRlZiBfbG9hZChzZWxmKToKICAgICAgICAgIiIiUmVhZCB0aHJvdWdoIHRoZSBlbnRpcmUgYXJjaGl2ZSBmaWxlIGFuZCBsb29rIGZvciByZWFkYWJsZQpAQCAtMjM0Nyw2ICsyNDk3LDI1IEBACiAgICAgICAgIGlmIG1vZGUgaXMgbm90IE5vbmUgYW5kIHNlbGYubW9kZSBub3QgaW4gbW9kZToKICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBvcGVyYXRpb24gZm9yIG1vZGUgJXIiICUgc2VsZi5tb2RlKQogCisgICAgZGVmIF9maW5kX2xpbmtfdGFyZ2V0KHNlbGYsIHRhcmluZm8pOgorICAgICAgICAiIiJGaW5kIHRoZSB0YXJnZXQgbWVtYmVyIG9mIGEgc3ltbGluayBvciBoYXJkbGluayBtZW1iZXIgaW4gdGhlCisgICAgICAgICAgIGFyY2hpdmUuCisgICAgICAgICIiIgorICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCk6CisgICAgICAgICAgICAjIEFsd2F5cyBzZWFyY2ggdGhlIGVudGlyZSBhcmNoaXZlLgorICAgICAgICAgICAgbGlua25hbWUgPSBvcy5wYXRoLmRpcm5hbWUodGFyaW5mby5uYW1lKSArICIvIiArIHRhcmluZm8ubGlua25hbWUKKyAgICAgICAgICAgIGxpbWl0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTZWFyY2ggdGhlIGFyY2hpdmUgYmVmb3JlIHRoZSBsaW5rLCBiZWNhdXNlIGEgaGFyZCBsaW5rIGlzCisgICAgICAgICAgICAjIGp1c3QgYSByZWZlcmVuY2UgdG8gYW4gYWxyZWFkeSBhcmNoaXZlZCBmaWxlLgorICAgICAgICAgICAgbGlua25hbWUgPSB0YXJpbmZvLmxpbmtuYW1lCisgICAgICAgICAgICBsaW1pdCA9IHRhcmluZm8KKworICAgICAgICBtZW1iZXIgPSBzZWxmLl9nZXRtZW1iZXIobGlua25hbWUsIHRhcmluZm89bGltaXQsIG5vcm1hbGl6ZT1UcnVlKQorICAgICAgICBpZiBtZW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJsaW5rbmFtZSAlciBub3QgZm91bmQiICUgbGlua25hbWUpCisgICAgICAgIHJldHVybiBtZW1iZXIKKwogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgIiIiUHJvdmlkZSBhbiBpdGVyYXRvciBvYmplY3QuCiAgICAgICAgICIiIgpAQCAtMjM2MCw2ICsyNTI5LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBsZXZlbCA8PSBzZWxmLmRlYnVnOgogICAgICAgICAgICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVjaygpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBbiBleGNlcHRpb24gb2NjdXJyZWQuIFdlIG11c3Qgbm90IGNhbGwgY2xvc2UoKSBiZWNhdXNlCisgICAgICAgICAgICAjIGl0IHdvdWxkIHRyeSB0byB3cml0ZSBlbmQtb2YtYXJjaGl2ZSBibG9ja3MgYW5kIHBhZGRpbmcuCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZXh0ZmlsZW9iajoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAjIGNsYXNzIFRhckZpbGUKIAogY2xhc3MgVGFySXRlcjoKQEAgLTIzOTgsNDkgKzI1ODEsNiBAQAogICAgICAgICBzZWxmLmluZGV4ICs9IDEKICAgICAgICAgcmV0dXJuIHRhcmluZm8KIAotIyBIZWxwZXIgY2xhc3NlcyBmb3Igc3BhcnNlIGZpbGUgc3VwcG9ydAotY2xhc3MgX3NlY3Rpb246Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3IgX2RhdGEgYW5kIF9ob2xlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIHNpemUpOgotICAgICAgICBzZWxmLm9mZnNldCA9IG9mZnNldAotICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBvZmZzZXQpOgotICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQgPD0gb2Zmc2V0IDwgc2VsZi5vZmZzZXQgKyBzZWxmLnNpemUKLQotY2xhc3MgX2RhdGEoX3NlY3Rpb24pOgotICAgICIiIlJlcHJlc2VudCBhIGRhdGEgc2VjdGlvbiBpbiBhIHNwYXJzZSBmaWxlLgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIHNpemUsIHJlYWxwb3MpOgotICAgICAgICBfc2VjdGlvbi5fX2luaXRfXyhzZWxmLCBvZmZzZXQsIHNpemUpCi0gICAgICAgIHNlbGYucmVhbHBvcyA9IHJlYWxwb3MKLQotY2xhc3MgX2hvbGUoX3NlY3Rpb24pOgotICAgICIiIlJlcHJlc2VudCBhIGhvbGUgc2VjdGlvbiBpbiBhIHNwYXJzZSBmaWxlLgotICAgICIiIgotICAgIHBhc3MKLQotY2xhc3MgX3JpbmdidWZmZXIobGlzdCk6Ci0gICAgIiIiUmluZ2J1ZmZlciBjbGFzcyB3aGljaCBpbmNyZWFzZXMgcGVyZm9ybWFuY2UKLSAgICAgICBvdmVyIGEgcmVndWxhciBsaXN0LgotICAgICIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5pZHggPSAwCi0gICAgZGVmIGZpbmQoc2VsZiwgb2Zmc2V0KToKLSAgICAgICAgaWR4ID0gc2VsZi5pZHgKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGl0ZW0gPSBzZWxmW2lkeF0KLSAgICAgICAgICAgIGlmIG9mZnNldCBpbiBpdGVtOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZHggKz0gMQotICAgICAgICAgICAgaWYgaWR4ID09IGxlbihzZWxmKToKLSAgICAgICAgICAgICAgICBpZHggPSAwCi0gICAgICAgICAgICBpZiBpZHggPT0gc2VsZi5pZHg6Ci0gICAgICAgICAgICAgICAgIyBFbmQgb2YgRmlsZQotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuaWR4ID0gaWR4Ci0gICAgICAgIHJldHVybiBpdGVtCi0KICMtLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBleHBvcnRlZCBmdW5jdGlvbnMKICMtLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3RlbXBmaWxlLnB5IGIvTGliL3RlbXBmaWxlLnB5CmluZGV4IDA0OWNkYWEuLmIyOGQ5MWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVtcGZpbGUucHkKQEAgLTE5LDcgKzE5LDcgQEAKIAogX19hbGxfXyA9IFsKICAgICAiTmFtZWRUZW1wb3JhcnlGaWxlIiwgIlRlbXBvcmFyeUZpbGUiLCAjIGhpZ2ggbGV2ZWwgc2FmZSBpbnRlcmZhY2VzCi0gICAgIlNwb29sZWRUZW1wb3JhcnlGaWxlIiwKKyAgICAiU3Bvb2xlZFRlbXBvcmFyeUZpbGUiLCAiVGVtcG9yYXJ5RGlyZWN0b3J5IiwKICAgICAibWtzdGVtcCIsICJta2R0ZW1wIiwgICAgICAgICAgICAgICAgICAjIGxvdyBsZXZlbCBzYWZlIGludGVyZmFjZXMKICAgICAibWt0ZW1wIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlcHJlY2F0ZWQgdW5zYWZlIGludGVyZmFjZQogICAgICJUTVBfTUFYIiwgImdldHRlbXBwcmVmaXgiLCAgICAgICAgICAgICMgY29uc3RhbnRzCkBAIC0yOSw2ICsyOSw4IEBACiAKICMgSW1wb3J0cy4KIAoraW1wb3J0IHdhcm5pbmdzIGFzIF93YXJuaW5ncworaW1wb3J0IHN5cyBhcyBfc3lzCiBpbXBvcnQgaW8gYXMgX2lvCiBpbXBvcnQgb3MgYXMgX29zCiBpbXBvcnQgZXJybm8gYXMgX2Vycm5vCkBAIC0xMDgsMzAgKzExMCwxOSBAQAogCiAgICAgX1JhbmRvbU5hbWVTZXF1ZW5jZSBpcyBhbiBpdGVyYXRvci4iIiIKIAotICAgIGNoYXJhY3RlcnMgPSAoImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiArCi0gICAgICAgICAgICAgICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiICsKLSAgICAgICAgICAgICAgICAgICIwMTIzNDU2Nzg5XyIpCisgICAgY2hhcmFjdGVycyA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlfIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLm11dGV4ID0gX2FsbG9jYXRlX2xvY2soKQogICAgICAgICBzZWxmLnJuZyA9IF9SYW5kb20oKQotICAgICAgICBzZWxmLm5vcm1jYXNlID0gX29zLnBhdGgubm9ybWNhc2UKIAogICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgbSA9IHNlbGYubXV0ZXgKICAgICAgICAgYyA9IHNlbGYuY2hhcmFjdGVycwogICAgICAgICBjaG9vc2UgPSBzZWxmLnJuZy5jaG9pY2UKLQotICAgICAgICBtLmFjcXVpcmUoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsZXR0ZXJzID0gW2Nob29zZShjKSBmb3IgZHVtbXkgaW4gIjEyMzQ1NiJdCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBtLnJlbGVhc2UoKQotCi0gICAgICAgIHJldHVybiBzZWxmLm5vcm1jYXNlKCcnLmpvaW4obGV0dGVycykpCisgICAgICAgIGxldHRlcnMgPSBbY2hvb3NlKGMpIGZvciBkdW1teSBpbiAiMTIzNDU2Il0KKyAgICAgICAgcmV0dXJuICcnLmpvaW4obGV0dGVycykKIAogZGVmIF9jYW5kaWRhdGVfdGVtcGRpcl9saXN0KCk6CiAgICAgIiIiR2VuZXJhdGUgYSBsaXN0IG9mIGNhbmRpZGF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMgd2hpY2gKQEAgLTYxMywzICs2MDQsODUgQEAKIAogICAgIGRlZiB4cmVhZGxpbmVzKHNlbGYsICphcmdzKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGUueHJlYWRsaW5lcygqYXJncykKKworCitjbGFzcyBUZW1wb3JhcnlEaXJlY3Rvcnkob2JqZWN0KToKKyAgICAiIiJDcmVhdGUgYW5kIHJldHVybiBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuICBUaGlzIGhhcyB0aGUgc2FtZQorICAgIGJlaGF2aW9yIGFzIG1rZHRlbXAgYnV0IGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLiAgRm9yCisgICAgZXhhbXBsZToKKworICAgICAgICB3aXRoIFRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgIC4uLgorCisgICAgVXBvbiBleGl0aW5nIHRoZSBjb250ZXh0LCB0aGUgZGlyZWN0b3J5IGFuZCBldmVydGhpbmcgY29udGFpbmVkCisgICAgaW4gaXQgYXJlIHJlbW92ZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lKToKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5uYW1lID0gTm9uZSAjIEhhbmRsZSBta2R0ZW1wIHRocm93aW5nIGFuIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBta2R0ZW1wKHN1ZmZpeCwgcHJlZml4LCBkaXIpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPHt9IHshcn0+Ii5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYubmFtZSkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworICAgIGRlZiBjbGVhbnVwKHNlbGYsIF93YXJuPUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5uYW1lIGFuZCBub3Qgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3JtdHJlZShzZWxmLm5hbWUpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpIGFzIGV4OgorICAgICAgICAgICAgICAgICMgSXNzdWUgIzEwMTg4OiBFbWl0IGEgd2FybmluZyBvbiBzdGRlcnIKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBkaXJlY3RvcnkgY291bGQgbm90IGJlIGNsZWFuZWQKKyAgICAgICAgICAgICAgICAjIHVwIGR1ZSB0byBtaXNzaW5nIGdsb2JhbHMKKyAgICAgICAgICAgICAgICBpZiAiTm9uZSIgbm90IGluIHN0cihleCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgcHJpbnQoIkVSUk9SOiB7IXJ9IHdoaWxlIGNsZWFuaW5nIHVwIHshcn0iLmZvcm1hdChleCwgc2VsZiwpLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU9X3N5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICBpZiBfd2FybjoKKyAgICAgICAgICAgICAgICBzZWxmLl93YXJuKCJJbXBsaWNpdGx5IGNsZWFuaW5nIHVwIHshcn0iLmZvcm1hdChzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlV2FybmluZykKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGMsIHZhbHVlLCB0Yik6CisgICAgICAgIHNlbGYuY2xlYW51cCgpCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSBhIFJlc291cmNlV2FybmluZyBpZiBpbXBsaWNpdCBjbGVhbnVwIG5lZWRlZAorICAgICAgICBzZWxmLmNsZWFudXAoX3dhcm49VHJ1ZSkKKworICAgICMgWFhYIChuY29naGxhbik6IFRoZSBmb2xsb3dpbmcgY29kZSBhdHRlbXB0cyB0byBtYWtlCisgICAgIyB0aGlzIGNsYXNzIHRvbGVyYW50IG9mIHRoZSBtb2R1bGUgbnVsbGluZyBvdXQgcHJvY2VzcworICAgICMgdGhhdCBoYXBwZW5zIGR1cmluZyBDUHl0aG9uIGludGVycHJldGVyIHNodXRkb3duCisgICAgIyBBbGFzLCBpdCBkb2Vzbid0IGFjdHVhbGx5IG1hbmFnZSBpdC4gU2VlIGlzc3VlICMxMDE4OAorICAgIF9saXN0ZGlyID0gc3RhdGljbWV0aG9kKF9vcy5saXN0ZGlyKQorICAgIF9wYXRoX2pvaW4gPSBzdGF0aWNtZXRob2QoX29zLnBhdGguam9pbikKKyAgICBfaXNkaXIgPSBzdGF0aWNtZXRob2QoX29zLnBhdGguaXNkaXIpCisgICAgX3JlbW92ZSA9IHN0YXRpY21ldGhvZChfb3MucmVtb3ZlKQorICAgIF9ybWRpciA9IHN0YXRpY21ldGhvZChfb3Mucm1kaXIpCisgICAgX29zX2Vycm9yID0gX29zLmVycm9yCisgICAgX3dhcm4gPSBfd2FybmluZ3Mud2FybgorCisgICAgZGVmIF9ybXRyZWUoc2VsZiwgcGF0aCk6CisgICAgICAgICMgRXNzZW50aWFsbHkgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2Ygc2h1dGlsLnJtdHJlZS4gIFdlIGNhbid0CisgICAgICAgICMgdXNlIGdsb2JhbHMgYmVjYXVzZSB0aGV5IG1heSBiZSBOb25lJ2VkIG91dCBhdCBzaHV0ZG93bi4KKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5fbGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGZ1bGxuYW1lID0gc2VsZi5fcGF0aF9qb2luKHBhdGgsIG5hbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNkaXIgPSBzZWxmLl9pc2RpcihmdWxsbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9vc19lcnJvcjoKKyAgICAgICAgICAgICAgICBpc2RpciA9IEZhbHNlCisgICAgICAgICAgICBpZiBpc2RpcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9ybXRyZWUoZnVsbG5hbWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlKGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxmLl9vc19lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9ybWRpcihwYXRoKQorICAgICAgICBleGNlcHQgc2VsZi5fb3NfZXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9fX21haW5fXy5weSBiL0xpYi90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTYxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9fX21haW5fXy5weQpAQCAtMCwwICsxLDEzIEBACitmcm9tIHRlc3QgaW1wb3J0IHJlZ3J0ZXN0LCBzdXBwb3J0CisKKworVEVNUERJUiwgVEVTVENXRCA9IHJlZ3J0ZXN0Ll9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChyZWdydGVzdC5URU1QRElSKQorcmVncnRlc3QuVEVNUERJUiA9IFRFTVBESVIKK3JlZ3J0ZXN0LlRFU1RDV0QgPSBURVNUQ1dECisKKyMgUnVuIHRoZSB0ZXN0cyBpbiBhIGNvbnRleHQgbWFuYWdlciB0aGF0IHRlbXBvcmFyeSBjaGFuZ2VzIHRoZSBDV0QgdG8gYQorIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisjIGNoYW5nZSB0aGUgQ1dELCB0aGUgb3JpZ2luYWwgQ1dEIHdpbGwgYmUgdXNlZC4gVGhlIG9yaWdpbmFsIENXRCBpcworIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgord2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgorICAgIHJlZ3J0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X25vY2FyZXQucHkgYi9MaWIvdGVzdC9iYWRzeW50YXhfbm9jYXJldC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlYzllYS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9iYWRzeW50YXhfbm9jYXJldC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotZGVmIGYoeCk6Ci0gICAgW3ggZm9yIHggaW4geF0gPSB4CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jYXBhdGgvNGUxMjk1YTMuMCBiL0xpYi90ZXN0L2NhcGF0aC80ZTEyOTVhMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2FjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jYXBhdGgvNGUxMjk1YTMuMApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNMRENDQWRZQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2dhQXhDekFKQmdOVkJBWVRBbEJVTVJNd0VRWUQKK1ZRUUlFd3BSZFdWbGJuTnNZVzVrTVE4d0RRWURWUVFIRXdaTWFYTmliMkV4RnpBVkJnTlZCQW9URGs1bGRYSnYKK2JtbHZMQ0JNWkdFdU1SZ3dGZ1lEVlFRTEV3OUVaWE5sYm5admJIWnBiV1Z1ZEc4eEd6QVpCZ05WQkFNVEVtSnkKK2RYUjFjeTV1WlhWeWIyNXBieTV3ZERFYk1Ca0dDU3FHU0liM0RRRUpBUllNYzJGdGNHOUFhV3RwTG1acE1CNFgKK0RUazJNRGt3TlRBek5ESTBNMW9YRFRrMk1UQXdOVEF6TkRJME0xb3dnYUF4Q3pBSkJnTlZCQVlUQWxCVU1STXcKK0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01ROHdEUVlEVlFRSEV3Wk1hWE5pYjJFeEZ6QVZCZ05WQkFvVERrNWwKK2RYSnZibWx2TENCTVpHRXVNUmd3RmdZRFZRUUxFdzlFWlhObGJuWnZiSFpwYldWdWRHOHhHekFaQmdOVkJBTVQKK0VtSnlkWFIxY3k1dVpYVnliMjVwYnk1d2RERWJNQmtHQ1NxR1NJYjNEUUVKQVJZTWMyRnRjRzlBYVd0cExtWnAKK01Gd3dEUVlKS29aSWh2Y05BUUVCQlFBRFN3QXdTQUpCQUw3K2F0eTNTMWlCQS8reXhqeHY0cTFNVVRkMWtqTncKK0w0bFlLYnB6emxtQzViZWFRWGVRMlJtR01UWFUrbUR2dXFJdGpWSE9LM0R2UEs3bFRjU0dmdFVDQXdFQUFUQU4KK0Jna3Foa2lHOXcwQkFRUUZBQU5CQUZxUEVLRmprNlQ2Q0tUSHZhUWVFQXNYMC84WUhQSHFILzlBbmhTanJ3dVgKKzlFQmMwbjZiVkdoTjdYYVhkNnNKN2R5bTlzYnNXeGIrcEpkdXJua3hqeDQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jYXBhdGgvNWVkMzZmOTkuMCBiL0xpYi90ZXN0L2NhcGF0aC81ZWQzNmY5OS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGZjODIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jYXBhdGgvNWVkMzZmOTkuMApAQCAtMCwwICsxLDQxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUhQVENDQlNXZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRUUZBREI1TVJBd0RnWURWUVFLRXdkU2IyOTAKK0lFTkJNUjR3SEFZRFZRUUxFeFZvZEhSd09pOHZkM2QzTG1OaFkyVnlkQzV2Y21jeElqQWdCZ05WQkFNVEdVTkIKK0lFTmxjblFnVTJsbmJtbHVaeUJCZFhSb2IzSnBkSGt4SVRBZkJna3Foa2lHOXcwQkNRRVdFbk4xY0hCdmNuUkEKK1kyRmpaWEowTG05eVp6QWVGdzB3TXpBek16QXhNakk1TkRsYUZ3MHpNekF6TWpreE1qSTVORGxhTUhreEVEQU8KK0JnTlZCQW9UQjFKdmIzUWdRMEV4SGpBY0JnTlZCQXNURldoMGRIQTZMeTkzZDNjdVkyRmpaWEowTG05eVp6RWkKK01DQUdBMVVFQXhNWlEwRWdRMlZ5ZENCVGFXZHVhVzVuSUVGMWRHaHZjbWwwZVRFaE1COEdDU3FHU0liM0RRRUoKK0FSWVNjM1Z3Y0c5eWRFQmpZV05sY25RdWIzSm5NSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUMKK0NnS0NBZ0VBemlMQTRrWjk3RFlvQjFDVzhxQXpRSXhMOFR0bVB6SGxhd0kyMjlaODl2R0lqMDUzTmdWQmxma0oKKzhCTFBSb1p6WUxkdWZ1akFXR1N1emJDdFJSY01ZL3BuQ3VqVzByOCs1NWpFOEV6NjRBTzdOVjFzSWQ2ZUlObTYKK3pXWXlOM0w2OXdqMXg4MVl5WTduRGw3cVB2NGNvUlFLRld5R2hGdGtaaXA2cVV0VGVmV0lvbnZ1THdwaEs0MnkKK2ZrMVdwUlBzNnRxU25xeEVRUjVZWUdVRlp2akFSTDNMbFBkQ2ZndjNaV2lZVVFYdzh3V1JCQjBiRjRMc3lGZTcKK3cydDZpUEd3Y3N3bFd5Q1I3QllDRW84eTZSY1lTTkRIQlM0Q01FSzRKWndGYXorcU9xZnJVMGozNk5LMkI1amMKK0c4WTBmMy9KSElKNkJWZ3JDRnZ6T0tLckYxMW15WmpYbmhDTG90TGRkSnIzY1F4eVlOL05iNWd6blpZMGRqNGsKK2VwS3dEcFVlYithZ1JUaEhxdGRCN1VxM0V2YlhHNE9LRHk3WUNiWloxNm9FLzlLVGZXZ3UzWXRMcTFpNkw0M3EKK2xhZWd3MVNKcGZ2YmkxRWluYkxEdmhHK0xKR0dpNVo0clNEVGlpOGFQOGJRVVdXSEliRVpBV1YvUlJ5SDlYelEKK1FVeFBLWmdoL1RNZmRRd0VVZm9aZDl2VUZCenVnY01kOVppM2FRYVJJdDBBVU15Qk1hd1NCM3M0Mm1oYjVpdlUKK2ZzbGZyZWpyY2t6ekFlVkxJTCthcGxmS2tRQUJpNkYxSVRlMVl3MW5Qa1pQY0NCbnpzWFdXZHNDNFBEU3k4MjYKK1lyZVFRZWpkSU9RcHZHUXBRc2dpM0hpYS8wUHNtQnNKVVV0YVdzSng4Y1RMYzZubG9Rc0NBd0VBQWFPQ0FjNHcKK2dnSEtNQjBHQTFVZERnUVdCQlFXdFRJYjFNZno0T2FPODczU3NEcnVzamtZMFRDQm93WURWUjBqQklHYk1JR1kKK2dCUVd0VEliMU1mejRPYU84NzNTc0RydXNqa1kwYUY5cEhzd2VURVFNQTRHQTFVRUNoTUhVbTl2ZENCRFFURWUKK01Cd0dBMVVFQ3hNVmFIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5NU0l3SUFZRFZRUURFeGxEUVNCRFpYSjAKK0lGTnBaMjVwYm1jZ1FYVjBhRzl5YVhSNU1TRXdId1lKS29aSWh2Y05BUWtCRmhKemRYQndiM0owUUdOaFkyVnkKK2RDNXZjbWVDQVFBd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBeUJnTlZIUjhFS3pBcE1DZWdKYUFqaGlGb2RIUncKK2N6b3ZMM2QzZHk1allXTmxjblF1YjNKbkwzSmxkbTlyWlM1amNtd3dNQVlKWUlaSUFZYjRRZ0VFQkNNV0lXaDAKK2RIQnpPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3ZjbVYyYjJ0bExtTnliREEwQmdsZ2hrZ0JodmhDQVFnRUp4WWwKK2FIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5MMmx1WkdWNExuQm9jRDlwWkQweE1EQldCZ2xnaGtnQmh2aEMKK0FRMEVTUlpIVkc4Z1oyVjBJSGx2ZFhJZ2IzZHVJR05sY25ScFptbGpZWFJsSUdadmNpQkdVa1ZGSUdobFlXUWcKK2IzWmxjaUIwYnlCb2RIUndPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3dEUVlKS29aSWh2Y05BUUVFQlFBRGdnSUIKK0FDakg3cHlDQXJwY2dCTEtOUW9kZ1crSmFwbk04bWdQZjZmaGpWaVZQcjN5QnNPUVdxeTFZUGFaUXdHamlIQ2MKK25XS2RwSWV2WjFnTk1EWTc1cTFJMDh0MEFvWnhQdUlyQTJqeE5HSkFSanRUNmlqMHJQdG1sVk9LVFYzOU85bGcKKzE4cDVhVHV4WlpLbXhvR0NYSnpONjAwQmlxWGZFVldxRmNvZk44Q0NtSEJoMjJwOGxxT09MbFErVHlHcGtPL2MKK2dyL2M2RVd0VFpCekNEeVVaYkFFbVhaLzRyekNhaFdxbHdRM0pOZ2VsRTV0RGxHKzFzU1B5cFp0OTBQZjZEQmwKK0p6dDd1ME5EWThSRDk3THNhTXpoR1k0aSs1amhlMW8rQVRjN2l3aXdvdk9WVGhyTG04MmFzZHV5Y1BBdFN0dlkKK3NPTnZSVWd6RXYvK1BESXFWUGZFOTRyd2lDUENSLzVrZW5IQTBSNm1ZN0FIZnFRdjB3R1AzSjhydHNZSXFRK1QKK1NDWDhFdjJmUXR6enhENzJWN0RYM1duUkJuYzBDa3ZTeXFEL0hNYU15UmEreE13eU4yaHpYd2o3VWZkSlV6WUYKK0NwVUNUUEo1R2hEMjJEcDFuUE1kOGFJTmNHZUdHN01XOVMvbHBPdDVodms5QzhKekM2V1pyRy84WjdqbEx3dW0KK0dDU05lOUZJTlNrWVFLeVRZT0dXaGxDMGVsbllqeUVMbjgrQ2tjWTd2MnZjQjVHNWwxWWpxclpzbE1aSUJqemsKK3prNnE1UFl2Q2R4VGJ5NzhkT3M2WTVuQ3BxeUp2S2V5UktBTmloRGpiUElreS9xYm4zQkhMdDRVaTlTeUlBbVcKK29tVHhKQnpjb1RXY0ZiTFV2RlV1ZlFiMW5BNVY5RnJXazlwMnJTVnpUTVZECistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jYXBhdGgvNmU4OGQ3YjguMCBiL0xpYi90ZXN0L2NhcGF0aC82ZTg4ZDdiOC4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkN2FjMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jYXBhdGgvNmU4OGQ3YjguMApAQCAtMCwwICsxLDE0IEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNMRENDQWRZQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2dhQXhDekFKQmdOVkJBWVRBbEJVTVJNd0VRWUQKK1ZRUUlFd3BSZFdWbGJuTnNZVzVrTVE4d0RRWURWUVFIRXdaTWFYTmliMkV4RnpBVkJnTlZCQW9URGs1bGRYSnYKK2JtbHZMQ0JNWkdFdU1SZ3dGZ1lEVlFRTEV3OUVaWE5sYm5admJIWnBiV1Z1ZEc4eEd6QVpCZ05WQkFNVEVtSnkKK2RYUjFjeTV1WlhWeWIyNXBieTV3ZERFYk1Ca0dDU3FHU0liM0RRRUpBUllNYzJGdGNHOUFhV3RwTG1acE1CNFgKK0RUazJNRGt3TlRBek5ESTBNMW9YRFRrMk1UQXdOVEF6TkRJME0xb3dnYUF4Q3pBSkJnTlZCQVlUQWxCVU1STXcKK0VRWURWUVFJRXdwUmRXVmxibk5zWVc1a01ROHdEUVlEVlFRSEV3Wk1hWE5pYjJFeEZ6QVZCZ05WQkFvVERrNWwKK2RYSnZibWx2TENCTVpHRXVNUmd3RmdZRFZRUUxFdzlFWlhObGJuWnZiSFpwYldWdWRHOHhHekFaQmdOVkJBTVQKK0VtSnlkWFIxY3k1dVpYVnliMjVwYnk1d2RERWJNQmtHQ1NxR1NJYjNEUUVKQVJZTWMyRnRjRzlBYVd0cExtWnAKK01Gd3dEUVlKS29aSWh2Y05BUUVCQlFBRFN3QXdTQUpCQUw3K2F0eTNTMWlCQS8reXhqeHY0cTFNVVRkMWtqTncKK0w0bFlLYnB6emxtQzViZWFRWGVRMlJtR01UWFUrbUR2dXFJdGpWSE9LM0R2UEs3bFRjU0dmdFVDQXdFQUFUQU4KK0Jna3Foa2lHOXcwQkFRUUZBQU5CQUZxUEVLRmprNlQ2Q0tUSHZhUWVFQXNYMC84WUhQSHFILzlBbmhTanJ3dVgKKzlFQmMwbjZiVkdoTjdYYVhkNnNKN2R5bTlzYnNXeGIrcEpkdXJua3hqeDQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jYXBhdGgvOTlkMGZhMDYuMCBiL0xpYi90ZXN0L2NhcGF0aC85OWQwZmEwNi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGZjODIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jYXBhdGgvOTlkMGZhMDYuMApAQCAtMCwwICsxLDQxIEBACistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUhQVENDQlNXZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRUUZBREI1TVJBd0RnWURWUVFLRXdkU2IyOTAKK0lFTkJNUjR3SEFZRFZRUUxFeFZvZEhSd09pOHZkM2QzTG1OaFkyVnlkQzV2Y21jeElqQWdCZ05WQkFNVEdVTkIKK0lFTmxjblFnVTJsbmJtbHVaeUJCZFhSb2IzSnBkSGt4SVRBZkJna3Foa2lHOXcwQkNRRVdFbk4xY0hCdmNuUkEKK1kyRmpaWEowTG05eVp6QWVGdzB3TXpBek16QXhNakk1TkRsYUZ3MHpNekF6TWpreE1qSTVORGxhTUhreEVEQU8KK0JnTlZCQW9UQjFKdmIzUWdRMEV4SGpBY0JnTlZCQXNURldoMGRIQTZMeTkzZDNjdVkyRmpaWEowTG05eVp6RWkKK01DQUdBMVVFQXhNWlEwRWdRMlZ5ZENCVGFXZHVhVzVuSUVGMWRHaHZjbWwwZVRFaE1COEdDU3FHU0liM0RRRUoKK0FSWVNjM1Z3Y0c5eWRFQmpZV05sY25RdWIzSm5NSUlDSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQWc4QU1JSUMKK0NnS0NBZ0VBemlMQTRrWjk3RFlvQjFDVzhxQXpRSXhMOFR0bVB6SGxhd0kyMjlaODl2R0lqMDUzTmdWQmxma0oKKzhCTFBSb1p6WUxkdWZ1akFXR1N1emJDdFJSY01ZL3BuQ3VqVzByOCs1NWpFOEV6NjRBTzdOVjFzSWQ2ZUlObTYKK3pXWXlOM0w2OXdqMXg4MVl5WTduRGw3cVB2NGNvUlFLRld5R2hGdGtaaXA2cVV0VGVmV0lvbnZ1THdwaEs0MnkKK2ZrMVdwUlBzNnRxU25xeEVRUjVZWUdVRlp2akFSTDNMbFBkQ2ZndjNaV2lZVVFYdzh3V1JCQjBiRjRMc3lGZTcKK3cydDZpUEd3Y3N3bFd5Q1I3QllDRW84eTZSY1lTTkRIQlM0Q01FSzRKWndGYXorcU9xZnJVMGozNk5LMkI1amMKK0c4WTBmMy9KSElKNkJWZ3JDRnZ6T0tLckYxMW15WmpYbmhDTG90TGRkSnIzY1F4eVlOL05iNWd6blpZMGRqNGsKK2VwS3dEcFVlYithZ1JUaEhxdGRCN1VxM0V2YlhHNE9LRHk3WUNiWloxNm9FLzlLVGZXZ3UzWXRMcTFpNkw0M3EKK2xhZWd3MVNKcGZ2YmkxRWluYkxEdmhHK0xKR0dpNVo0clNEVGlpOGFQOGJRVVdXSEliRVpBV1YvUlJ5SDlYelEKK1FVeFBLWmdoL1RNZmRRd0VVZm9aZDl2VUZCenVnY01kOVppM2FRYVJJdDBBVU15Qk1hd1NCM3M0Mm1oYjVpdlUKK2ZzbGZyZWpyY2t6ekFlVkxJTCthcGxmS2tRQUJpNkYxSVRlMVl3MW5Qa1pQY0NCbnpzWFdXZHNDNFBEU3k4MjYKK1lyZVFRZWpkSU9RcHZHUXBRc2dpM0hpYS8wUHNtQnNKVVV0YVdzSng4Y1RMYzZubG9Rc0NBd0VBQWFPQ0FjNHcKK2dnSEtNQjBHQTFVZERnUVdCQlFXdFRJYjFNZno0T2FPODczU3NEcnVzamtZMFRDQm93WURWUjBqQklHYk1JR1kKK2dCUVd0VEliMU1mejRPYU84NzNTc0RydXNqa1kwYUY5cEhzd2VURVFNQTRHQTFVRUNoTUhVbTl2ZENCRFFURWUKK01Cd0dBMVVFQ3hNVmFIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5NU0l3SUFZRFZRUURFeGxEUVNCRFpYSjAKK0lGTnBaMjVwYm1jZ1FYVjBhRzl5YVhSNU1TRXdId1lKS29aSWh2Y05BUWtCRmhKemRYQndiM0owUUdOaFkyVnkKK2RDNXZjbWVDQVFBd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBeUJnTlZIUjhFS3pBcE1DZWdKYUFqaGlGb2RIUncKK2N6b3ZMM2QzZHk1allXTmxjblF1YjNKbkwzSmxkbTlyWlM1amNtd3dNQVlKWUlaSUFZYjRRZ0VFQkNNV0lXaDAKK2RIQnpPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3ZjbVYyYjJ0bExtTnliREEwQmdsZ2hrZ0JodmhDQVFnRUp4WWwKK2FIUjBjRG92TDNkM2R5NWpZV05sY25RdWIzSm5MMmx1WkdWNExuQm9jRDlwWkQweE1EQldCZ2xnaGtnQmh2aEMKK0FRMEVTUlpIVkc4Z1oyVjBJSGx2ZFhJZ2IzZHVJR05sY25ScFptbGpZWFJsSUdadmNpQkdVa1ZGSUdobFlXUWcKK2IzWmxjaUIwYnlCb2RIUndPaTh2ZDNkM0xtTmhZMlZ5ZEM1dmNtY3dEUVlKS29aSWh2Y05BUUVFQlFBRGdnSUIKK0FDakg3cHlDQXJwY2dCTEtOUW9kZ1crSmFwbk04bWdQZjZmaGpWaVZQcjN5QnNPUVdxeTFZUGFaUXdHamlIQ2MKK25XS2RwSWV2WjFnTk1EWTc1cTFJMDh0MEFvWnhQdUlyQTJqeE5HSkFSanRUNmlqMHJQdG1sVk9LVFYzOU85bGcKKzE4cDVhVHV4WlpLbXhvR0NYSnpONjAwQmlxWGZFVldxRmNvZk44Q0NtSEJoMjJwOGxxT09MbFErVHlHcGtPL2MKK2dyL2M2RVd0VFpCekNEeVVaYkFFbVhaLzRyekNhaFdxbHdRM0pOZ2VsRTV0RGxHKzFzU1B5cFp0OTBQZjZEQmwKK0p6dDd1ME5EWThSRDk3THNhTXpoR1k0aSs1amhlMW8rQVRjN2l3aXdvdk9WVGhyTG04MmFzZHV5Y1BBdFN0dlkKK3NPTnZSVWd6RXYvK1BESXFWUGZFOTRyd2lDUENSLzVrZW5IQTBSNm1ZN0FIZnFRdjB3R1AzSjhydHNZSXFRK1QKK1NDWDhFdjJmUXR6enhENzJWN0RYM1duUkJuYzBDa3ZTeXFEL0hNYU15UmEreE13eU4yaHpYd2o3VWZkSlV6WUYKK0NwVUNUUEo1R2hEMjJEcDFuUE1kOGFJTmNHZUdHN01XOVMvbHBPdDVodms5QzhKekM2V1pyRy84WjdqbEx3dW0KK0dDU05lOUZJTlNrWVFLeVRZT0dXaGxDMGVsbllqeUVMbjgrQ2tjWTd2MnZjQjVHNWwxWWpxclpzbE1aSUJqemsKK3prNnE1UFl2Q2R4VGJ5NzhkT3M2WTVuQ3BxeUp2S2V5UktBTmloRGpiUElreS9xYm4zQkhMdDRVaTlTeUlBbVcKK29tVHhKQnpjb1RXY0ZiTFV2RlV1ZlFiMW5BNVY5RnJXazlwMnJTVnpUTVZECistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jZmdwYXJzZXIuMiBiL0xpYi90ZXN0L2NmZ3BhcnNlci4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5YTQyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jZmdwYXJzZXIuMgpAQCAtMCwwICsxLDUzNyBAQAorIyBUaGlzIGlzIHRoZSBtYWluIFNhbWJhIGNvbmZpZ3VyYXRpb24gZmlsZS4gWW91IHNob3VsZCByZWFkIHRoZQorIyBzbWIuY29uZig1KSBtYW51YWwgcGFnZSBpbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBvcHRpb25zIGxpc3RlZAorIyBoZXJlLiBTYW1iYSBoYXMgYSBodWdlIG51bWJlciBvZiBjb25maWd1cmFibGUgb3B0aW9ucyAocGVyaGFwcyB0b28KKyMgbWFueSEpIG1vc3Qgb2Ygd2hpY2ggYXJlIG5vdCBzaG93biBpbiB0aGlzIGV4YW1wbGUKKyMKKyMgQW55IGxpbmUgd2hpY2ggc3RhcnRzIHdpdGggYSA7IChzZW1pLWNvbG9uKSBvciBhICMgKGhhc2gpIAorIyBpcyBhIGNvbW1lbnQgYW5kIGlzIGlnbm9yZWQuIEluIHRoaXMgZXhhbXBsZSB3ZSB3aWxsIHVzZSBhICMKKyMgZm9yIGNvbW1lbnRyeSBhbmQgYSA7IGZvciBwYXJ0cyBvZiB0aGUgY29uZmlnIGZpbGUgdGhhdCB5b3UKKyMgbWF5IHdpc2ggdG8gZW5hYmxlCisjCisjIE5PVEU6IFdoZW5ldmVyIHlvdSBtb2RpZnkgdGhpcyBmaWxlIHlvdSBzaG91bGQgcnVuIHRoZSBjb21tYW5kICMidGVzdHBhcm0iICMgdG8gY2hlY2sgdGhhdCB5b3UgaGF2ZSBub3QgbWFkZSBhbnkgYmFzaWMgc3ludGFjdGljICNlcnJvcnMuIAorIworIz09PT09PT09PT09PT09PT09PT09PT09IEdsb2JhbCBTZXR0aW5ncyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitbZ2xvYmFsXQorCisjIDEuIFNlcnZlciBOYW1pbmcgT3B0aW9uczoKKyMgd29ya2dyb3VwID0gTlQtRG9tYWluLU5hbWUgb3IgV29ya2dyb3VwLU5hbWUKKyAgIAorICB3b3JrZ3JvdXAgPSBNREtHUk9VUAorCisjIG5ldGJpb3MgbmFtZSBpcyB0aGUgbmFtZSB5b3Ugd2lsbCBzZWUgaW4gIk5ldHdvcmsgTmVpZ2hib3VyaG9vZCIsCisjIGJ1dCBkZWZhdWx0cyB0byB5b3VyIGhvc3RuYW1lCisKKzsgIG5ldGJpb3MgbmFtZSA9IDxuYW1lX29mX3RoaXNfc2VydmVyPgorCisjIHNlcnZlciBzdHJpbmcgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIE5UIERlc2NyaXB0aW9uIGZpZWxkCisgICAKKyAgc2VydmVyIHN0cmluZyA9IFNhbWJhIFNlcnZlciAldgorCisjIE1lc3NhZ2UgY29tbWFuZCBpcyBydW4gYnkgc2FtYmEgd2hlbiBhICJwb3B1cCIgbWVzc2FnZSBpcyBzZW50IHRvIGl0LgorIyBUaGUgZXhhbXBsZSBiZWxvdyBpcyBmb3IgdXNlIHdpdGggTGluUG9wVXA6Cis7IG1lc3NhZ2UgY29tbWFuZCA9IC91c3IvYmluL2xpbnBvcHVwICIlZiIgIiVtIiAlczsgcm0gJXMKKworIyAyLiBQcmludGluZyBPcHRpb25zOgorIyBDSEFOR0VTIFRPIEVOQUJMRSBQUklOVElORyBPTiBBTEwgQ1VQUyBQUklOVEVSUyBJTiBUSEUgTkVUV09SSworIyAoYXMgY3VwcyBpcyBub3cgdXNlZCBpbiBsaW51eC1tYW5kcmFrZSA3LjIgYnkgZGVmYXVsdCkKKyMgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseSBsb2FkIHlvdXIgcHJpbnRlciBsaXN0IHJhdGhlcgorIyB0aGFuIHNldHRpbmcgdGhlbSB1cCBpbmRpdmlkdWFsbHkgdGhlbiB5b3UnbGwgbmVlZCB0aGlzCisgICAKKyAgIHByaW50Y2FwIG5hbWUgPSBscHN0YXQKKyAgIGxvYWQgcHJpbnRlcnMgPSB5ZXMKKworIyBJdCBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeSB0byBzcGVsbCBvdXQgdGhlIHByaW50IHN5c3RlbSB0eXBlIHVubGVzcworIyB5b3VycyBpcyBub24tc3RhbmRhcmQuIEN1cnJlbnRseSBzdXBwb3J0ZWQgcHJpbnQgc3lzdGVtcyBpbmNsdWRlOgorIyBic2QsIHN5c3YsIHBscCwgbHBybmcsIGFpeCwgaHB1eCwgcW54LCBjdXBzCisgICAKKyAgcHJpbnRpbmcgPSBjdXBzCisKKyMgU2FtYmEgMi4yIHN1cHBvcnRzIHRoZSBXaW5kb3dzIE5ULXN0eWxlIHBvaW50LWFuZC1wcmludCBmZWF0dXJlLiBUbworIyB1c2UgdGhpcywgeW91IG5lZWQgdG8gYmUgYWJsZSB0byB1cGxvYWQgcHJpbnQgZHJpdmVycyB0byB0aGUgc2FtYmEKKyMgc2VydmVyLiBUaGUgcHJpbnRlciBhZG1pbnMgKG9yIHJvb3QpIG1heSBpbnN0YWxsIGRyaXZlcnMgb250byBzYW1iYS4KKyMgTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSB1c2VzIHRoZSBwcmludCQgc2hhcmUsIHNvIHlvdSB3aWxsIG5lZWQgdG8gCisjIGVuYWJsZSBpdCBiZWxvdy4KKyMgVGhpcyBwYXJhbWV0ZXIgd29ya3MgbGlrZSBkb21haW4gYWRtaW4gZ3JvdXA6CisjIHByaW50ZXIgYWRtaW4gPSBAPGdyb3VwPiA8dXNlcj4KKzsgICBwcmludGVyIGFkbWluID0gQGFkbQorIyBUaGlzIHNob3VsZCB3b3JrIHdlbGwgZm9yIHdpbmJpbmQ6Cis7ICAgcHJpbnRlciBhZG1pbiA9IEAiRG9tYWluIEFkbWlucyIKKworIyAzLiBMb2dnaW5nIE9wdGlvbnM6CisjIHRoaXMgdGVsbHMgU2FtYmEgdG8gdXNlIGEgc2VwYXJhdGUgbG9nIGZpbGUgZm9yIGVhY2ggbWFjaGluZQorIyB0aGF0IGNvbm5lY3RzCisKKyAgIGxvZyBmaWxlID0gL3Zhci9sb2cvc2FtYmEvbG9nLiVtCisKKyMgUHV0IGEgY2FwcGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgbG9nIGZpbGVzIChpbiBLYikuCisgICBtYXggbG9nIHNpemUgPSA1MAorCisjIFNldCB0aGUgbG9nICh2ZXJib3NpdHkpIGxldmVsICgwIDw9IGxvZyBsZXZlbCA8PSAxMCkKKzsgbG9nIGxldmVsID0gMworCisjIDQuIFNlY3VyaXR5IGFuZCBEb21haW4gTWVtYmVyc2hpcCBPcHRpb25zOgorIyBUaGlzIG9wdGlvbiBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5LiBJdCBhbGxvd3MgeW91IHRvIHJlc3RyaWN0CisjIGNvbm5lY3Rpb25zIHRvIG1hY2hpbmVzIHdoaWNoIGFyZSBvbiB5b3VyIGxvY2FsIG5ldHdvcmsuIFRoZQorIyBmb2xsb3dpbmcgZXhhbXBsZSByZXN0cmljdHMgYWNjZXNzIHRvIHR3byBDIGNsYXNzIG5ldHdvcmtzIGFuZAorIyB0aGUgImxvb3BiYWNrIiBpbnRlcmZhY2UuIEZvciBtb3JlIGV4YW1wbGVzIG9mIHRoZSBzeW50YXggc2VlCisjIHRoZSBzbWIuY29uZiBtYW4gcGFnZS4gRG8gbm90IGVuYWJsZSB0aGlzIGlmICh0Y3AvaXApIG5hbWUgcmVzb2x1dGlvbiAjZG9lcworIyBub3Qgd29yayBmb3IgYWxsIHRoZSBob3N0cyBpbiB5b3VyIG5ldHdvcmsuCis7ICAgaG9zdHMgYWxsb3cgPSAxOTIuMTY4LjEuIDE5Mi4xNjguMi4gMTI3LgorCisgIGhvc3RzIGFsbG93ID0gMTI3LiAgLy9ub3RlIHRoaXMgaXMgb25seSBteSBwcml2YXRlIElQIGFkZHJlc3MKKworIyBVbmNvbW1lbnQgdGhpcyBpZiB5b3Ugd2FudCBhIGd1ZXN0IGFjY291bnQsIHlvdSBtdXN0IGFkZCB0aGlzIHRvCisjIC9ldGMvcGFzc3dkCisjIG90aGVyd2lzZSB0aGUgdXNlciAibm9ib2R5IiBpcyB1c2VkCis7ICBndWVzdCBhY2NvdW50ID0gcGNndWVzdAorCisjIFNlY3VyaXR5IG1vZGUuIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB1c2VyIGxldmVsIHNlY3VyaXR5LiBTZWUKKyMgc2VjdXJpdHlfbGV2ZWwudHh0IGZvciBkZXRhaWxzLgorCisgICBzZWN1cml0eSA9IHVzZXIKKworIyBVc2UgcGFzc3dvcmQgc2VydmVyIG9wdGlvbiBvbmx5IHdpdGggc2VjdXJpdHkgPSBzZXJ2ZXIgb3Igc2VjdXJpdHkgPSAjIGRvbWFpbgorIyBXaGVuIHVzaW5nIHNlY3VyaXR5ID0gZG9tYWluLCB5b3Ugc2hvdWxkIHVzZSBwYXNzd29yZCBzZXJ2ZXIgPSAqCis7ICAgcGFzc3dvcmQgc2VydmVyID0gCis7ICAgcGFzc3dvcmQgc2VydmVyID0gKgorCisjIFBhc3N3b3JkIExldmVsIGFsbG93cyBtYXRjaGluZyBvZiBfbl8gY2hhcmFjdGVycyBvZiB0aGUgcGFzc3dvcmQgZm9yCisjIGFsbCBjb21iaW5hdGlvbnMgb2YgdXBwZXIgYW5kIGxvd2VyIGNhc2UuCisKKyAgcGFzc3dvcmQgbGV2ZWwgPSA4CisKKzsgIHVzZXJuYW1lIGxldmVsID0gOAorCisjIFlvdSBtYXkgd2lzaCB0byB1c2UgcGFzc3dvcmQgZW5jcnlwdGlvbi4gUGxlYXNlIHJlYWQKKyMgRU5DUllQVElPTi50eHQsIFdpbjk1LnR4dCBhbmQgV2luTlQudHh0IGluIHRoZSBTYW1iYSBkb2N1bWVudGF0aW9uLgorIyBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgaGF2ZSByZWFkIHRob3NlIGRvY3VtZW50cworIyBFbmNyeXB0ZWQgcGFzc3dvcmRzIGFyZSByZXF1aXJlZCBmb3IgYW55IHVzZSBvZiBzYW1iYSBpbiBhIFdpbmRvd3MgTlQgI2RvbWFpbgorIyBUaGUgc21icGFzc3dkIGZpbGUgaXMgb25seSByZXF1aXJlZCBieSBhIHNlcnZlciBkb2luZyBhdXRoZW50aWNhdGlvbiwgI3RodXMgbWVtYmVycyBvZiBhIGRvbWFpbiBkbyBub3QgbmVlZCBvbmUuCisKKyAgZW5jcnlwdCBwYXNzd29yZHMgPSB5ZXMKKyAgc21iIHBhc3N3ZCBmaWxlID0gL2V0Yy9zYW1iYS9zbWJwYXNzd2QKKworIyBUaGUgZm9sbG93aW5nIGFyZSBuZWVkZWQgdG8gYWxsb3cgcGFzc3dvcmQgY2hhbmdpbmcgZnJvbSBXaW5kb3dzIHRvCisjIGFsc28gdXBkYXRlIHRoZSBMaW51eCBzeXN0ZW0gcGFzc3dvcmQuCisjIE5PVEU6IFVzZSB0aGVzZSB3aXRoICdlbmNyeXB0IHBhc3N3b3JkcycgYW5kICdzbWIgcGFzc3dkIGZpbGUnIGFib3ZlLgorIyBOT1RFMjogWW91IGRvIE5PVCBuZWVkIHRoZXNlIHRvIGFsbG93IHdvcmtzdGF0aW9ucyB0byBjaGFuZ2Ugb25seQorIyAgICAgICAgdGhlIGVuY3J5cHRlZCBTTUIgcGFzc3dvcmRzLiBUaGV5IGFsbG93IHRoZSBVbml4IHBhc3N3b3JkCisjICAgICAgICB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgU01CIHBhc3N3b3JkLgorOyAgdW5peCBwYXNzd29yZCBzeW5jID0gWWVzCisjIFlvdSBlaXRoZXIgbmVlZCB0byBzZXR1cCBhIHBhc3N3ZCBwcm9ncmFtIGFuZCBwYXNzd2QgY2hhdCwgb3IKKyMgZW5hYmxlIHBhbSBwYXNzd29yZCBjaGFuZ2UKKzsgIHBhbSBwYXNzd29yZCBjaGFuZ2UgPSB5ZXMKKzsgIHBhc3N3ZCBwcm9ncmFtID0gL3Vzci9iaW4vcGFzc3dkICV1Cis7ICBwYXNzd2QgY2hhdCA9ICpOZXcqVU5JWCpwYXNzd29yZCogJW5cbiAqUmVUeXBlKm5ldypVTklYKnBhc3N3b3JkKiAKKyMgJW5cbgorOypwYXNzd2Q6KmFsbCphdXRoZW50aWNhdGlvbip0b2tlbnMqdXBkYXRlZCpzdWNjZXNzZnVsbHkqCisKKyMgVW5peCB1c2VycyBjYW4gbWFwIHRvIGRpZmZlcmVudCBTTUIgVXNlciBuYW1lcworOyAgdXNlcm5hbWUgbWFwID0gL2V0Yy9zYW1iYS9zbWJ1c2VycworCisjIFVzaW5nIHRoZSBmb2xsb3dpbmcgbGluZSBlbmFibGVzIHlvdSB0byBjdXN0b21pc2UgeW91ciBjb25maWd1cmF0aW9uCisjIG9uIGEgcGVyIG1hY2hpbmUgYmFzaXMuIFRoZSAlbSBnZXRzIHJlcGxhY2VkIHdpdGggdGhlIG5ldGJpb3MgbmFtZQorIyBvZiB0aGUgbWFjaGluZSB0aGF0IGlzIGNvbm5lY3RpbmcKKzsgICBpbmNsdWRlID0gL2V0Yy9zYW1iYS9zbWIuY29uZi4lbQorCisjIE9wdGlvbnMgZm9yIHVzaW5nIHdpbmJpbmQuIFdpbmJpbmQgYWxsb3dzIHlvdSB0byBkbyBhbGwgYWNjb3VudCBhbmQKKyMgYXV0aGVudGljYXRpb24gZnJvbSBhIFdpbmRvd3Mgb3Igc2FtYmEgZG9tYWluIGNvbnRyb2xsZXIsIGNyZWF0aW5nCisjIGFjY291bnRzIG9uIHRoZSBmbHksIGFuZCBtYWludGFpbmluZyBhIG1hcHBpbmcgb2YgV2luZG93cyBSSURzIHRvCisjIHVuaXggdWlkJ3MgCisjIGFuZCBnaWQncy4gd2luYmluZCB1aWQgYW5kIHdpbmJpbmQgZ2lkIGFyZSB0aGUgb25seSByZXF1aXJlZAorIyBwYXJhbWV0ZXJzLgorIworIyB3aW5iaW5kIHVpZCBpcyB0aGUgcmFuZ2Ugb2YgdWlkJ3Mgd2luYmluZCBjYW4gdXNlIHdoZW4gbWFwcGluZyBSSURzICN0byB1aWQncworOyAgd2luYmluZCB1aWQgPSAxMDAwMC0yMDAwMAorIworIyB3aW5iaW5kIGdpZCBpcyB0aGUgcmFuZ2Ugb2YgdWlkJ3Mgd2luYmluZCBjYW4gdXNlIHdoZW4gbWFwcGluZyBSSURzCisjIHRvIGdpZCdzCis7ICB3aW5iaW5kIGdpZCA9IDEwMDAwLTIwMDAwCisjCisjIHdpbmJpbmQgc2VwYXJhdG9yIGlzIHRoZSBjaGFyYWN0ZXIgYSB1c2VyIG11c3QgdXNlIGJldHdlZW4gdGhlaXIKKyMgZG9tYWluIG5hbWUgYW5kIHVzZXJuYW1lLCBkZWZhdWx0cyB0byAiXCIKKzsgIHdpbmJpbmQgc2VwYXJhdG9yID0gKworIworIyB3aW5iaW5kIHVzZSBkZWZhdWx0IGRvbWFpbiBhbGxvd3MgeW91IHRvIGhhdmUgd2luYmluZCByZXR1cm4KKyMgdXNlcm5hbWVzIGluIHRoZSBmb3JtIHVzZXIgaW5zdGVhZCBvZiBET01BSU4rdXNlciBmb3IgdGhlIGRvbWFpbgorIyBsaXN0ZWQgaW4gdGhlIHdvcmtncm91cCBwYXJhbWV0ZXIuCis7ICB3aW5iaW5kIHVzZSBkZWZhdWx0IGRvbWFpbiA9IHllcworIworIyB0ZW1wbGF0ZSBob21lZGlyIGRldGVybWluZXMgdGhlIGhvbWUgZGlyZWN0b3J5IGZvciB3aW5iaW5kIHVzZXJzLAorIyB3aXRoICVEIGV4cGFuZGluZyB0byB0aGVpciBkb21haW4gbmFtZSBhbmQgJVUgZXhwYW5kaW5nIHRvIHRoZWlyCisjIHVzZXJuYW1lOgorOyAgdGVtcGxhdGUgaG9tZWRpciA9IC9ob21lLyVELyVVCisKKyMgV2hlbiB1c2luZyB3aW5iaW5kLCB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBzYW1iYSBjcmVhdGUgaG9tZQorIyBkaXJlY3RvcmllcyBvbiB0aGUgZmx5IGZvciBhdXRoZW50aWNhdGVkIHVzZXJzLiBFbnN1cmUgdGhhdCAKKyMgL2V0Yy9wYW0uZC9zYW1iYSBpcyB1c2luZyAnc2VydmljZT1zeXN0ZW0tYXV0aC13aW5iaW5kJyBpbiBwYW1fc3RhY2sgCisjIG1vZHVsZXMsIGFuZCB0aGVuIGVuYWJsZSBvYmVkaWVuY2Ugb2YgcGFtIHJlc3RyaWN0aW9ucyBiZWxvdzoKKzsgIG9iZXkgcGFtIHJlc3RyaWN0aW9ucyA9IHllcworCisjCisjIHRlbXBsYXRlIHNoZWxsIGRldGVybWluZXMgdGhlIHNoZWxsIHVzZXJzIGF1dGhlbnRpY2F0ZWQgYnkgd2luYmluZCAjZ2V0Cis7ICB0ZW1wbGF0ZSBzaGVsbCA9IC9iaW4vYmFzaAorCisjIDUuIEJyb3dzZXIgQ29udHJvbCBhbmQgTmV0d29ya2luZyBPcHRpb25zOgorIyBNb3N0IHBlb3BsZSB3aWxsIGZpbmQgdGhhdCB0aGlzIG9wdGlvbiBnaXZlcyBiZXR0ZXIgcGVyZm9ybWFuY2UuCisjIFNlZSBzcGVlZC50eHQgYW5kIHRoZSBtYW51YWwgcGFnZXMgZm9yIGRldGFpbHMKKworICAgc29ja2V0IG9wdGlvbnMgPSBUQ1BfTk9ERUxBWSBTT19SQ1ZCVUY9ODE5MiBTT19TTkRCVUY9ODE5MgorCisjIENvbmZpZ3VyZSBTYW1iYSB0byB1c2UgbXVsdGlwbGUgaW50ZXJmYWNlcworIyBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBuZXR3b3JrIGludGVyZmFjZXMgdGhlbiB5b3UgbXVzdCBsaXN0IHRoZW0KKyMgaGVyZS4gU2VlIHRoZSBtYW4gcGFnZSBmb3IgZGV0YWlscy4KKzsgICBpbnRlcmZhY2VzID0gMTkyLjE2OC4xMi4yLzI0IDE5Mi4xNjguMTMuMi8yNCAKKworIyBDb25maWd1cmUgcmVtb3RlIGJyb3dzZSBsaXN0IHN5bmNocm9uaXNhdGlvbiBoZXJlCisjICByZXF1ZXN0IGFubm91bmNlbWVudCB0bywgb3IgYnJvd3NlIGxpc3Qgc3luYyBmcm9tOgorIyAgICAgICBhIHNwZWNpZmljIGhvc3Qgb3IgZnJvbSAvIHRvIGEgd2hvbGUgc3VibmV0IChzZWUgYmVsb3cpCis7ICAgcmVtb3RlIGJyb3dzZSBzeW5jID0gMTkyLjE2OC4zLjI1IDE5Mi4xNjguNS4yNTUKKyMgQ2F1c2UgdGhpcyBob3N0IHRvIGFubm91bmNlIGl0c2VsZiB0byBsb2NhbCBzdWJuZXRzIGhlcmUKKzsgICByZW1vdGUgYW5ub3VuY2UgPSAxOTIuMTY4LjEuMjU1IDE5Mi4xNjguMi40NAorCisjIHNldCBsb2NhbCBtYXN0ZXIgdG8gbm8gaWYgeW91IGRvbid0IHdhbnQgU2FtYmEgdG8gYmVjb21lIGEgbWFzdGVyCisjIGJyb3dzZXIgb24geW91ciBuZXR3b3JrLiBPdGhlcndpc2UgdGhlIG5vcm1hbCBlbGVjdGlvbiBydWxlcyBhcHBseQorOyAgIGxvY2FsIG1hc3RlciA9IG5vCisKKyMgT1MgTGV2ZWwgZGV0ZXJtaW5lcyB0aGUgcHJlY2VkZW5jZSBvZiB0aGlzIHNlcnZlciBpbiBtYXN0ZXIgYnJvd3NlcgorIyBlbGVjdGlvbnMuIFRoZSBkZWZhdWx0IHZhbHVlIHNob3VsZCBiZSByZWFzb25hYmxlCis7ICAgb3MgbGV2ZWwgPSAzMworCisjIERvbWFpbiBNYXN0ZXIgc3BlY2lmaWVzIFNhbWJhIHRvIGJlIHRoZSBEb21haW4gTWFzdGVyIEJyb3dzZXIuIFRoaXMKKyMgYWxsb3dzIFNhbWJhIHRvIGNvbGxhdGUgYnJvd3NlIGxpc3RzIGJldHdlZW4gc3VibmV0cy4gRG9uJ3QgdXNlIHRoaXMKKyMgaWYgeW91IGFscmVhZHkgaGF2ZSBhIFdpbmRvd3MgTlQgZG9tYWluIGNvbnRyb2xsZXIgZG9pbmcgdGhpcyBqb2IKKzsgICBkb21haW4gbWFzdGVyID0geWVzIAorCisjIFByZWZlcnJlZCBNYXN0ZXIgY2F1c2VzIFNhbWJhIHRvIGZvcmNlIGEgbG9jYWwgYnJvd3NlciBlbGVjdGlvbiBvbgorIyBzdGFydHVwIGFuZCBnaXZlcyBpdCBhIHNsaWdodGx5IGhpZ2hlciBjaGFuY2Ugb2Ygd2lubmluZyB0aGUgZWxlY3Rpb24KKzsgICBwcmVmZXJyZWQgbWFzdGVyID0geWVzCisKKyMgNi4gRG9tYWluIENvbnRyb2wgT3B0aW9uczoKKyMgRW5hYmxlIHRoaXMgaWYgeW91IHdhbnQgU2FtYmEgdG8gYmUgYSBkb21haW4gbG9nb24gc2VydmVyIGZvciAKKyMgV2luZG93czk1IHdvcmtzdGF0aW9ucyBvciBQcmltYXJ5IERvbWFpbiBDb250cm9sbGVyIGZvciBXaW5OVCBhbmQKKyMgV2luMmsKKworOyAgZG9tYWluIGxvZ29ucyA9IHllcworCisKKyMgaWYgeW91IGVuYWJsZSBkb21haW4gbG9nb25zIHRoZW4geW91IG1heSB3YW50IGEgcGVyLW1hY2hpbmUgb3IKKyMgcGVyIHVzZXIgbG9nb24gc2NyaXB0CisjIHJ1biBhIHNwZWNpZmljIGxvZ29uIGJhdGNoIGZpbGUgcGVyIHdvcmtzdGF0aW9uIChtYWNoaW5lKQorOyAgIGxvZ29uIHNjcmlwdCA9ICVtLmJhdAorIyBydW4gYSBzcGVjaWZpYyBsb2dvbiBiYXRjaCBmaWxlIHBlciB1c2VybmFtZQorOyAgIGxvZ29uIHNjcmlwdCA9ICVVLmJhdAorCisjIFdoZXJlIHRvIHN0b3JlIHJvYW1pbmcgcHJvZmlsZXMgZm9yIFdpbk5UIGFuZCBXaW4yaworIyAgICAgICAgJUwgc3Vic3RpdHV0ZXMgZm9yIHRoaXMgc2VydmVycyBuZXRiaW9zIG5hbWUsICVVIGlzIHVzZXJuYW1lCisjICAgICAgICBZb3UgbXVzdCB1bmNvbW1lbnQgdGhlIFtQcm9maWxlc10gc2hhcmUgYmVsb3cKKzsgICBsb2dvbiBwYXRoID0gXFwlTFxQcm9maWxlc1wlVQorCisjIFdoZXJlIHRvIHN0b3JlIHJvYW1pbmcgcHJvZmlsZXMgZm9yIFdpbjl4LiBCZSBjYXJlZnVsIHdpdGggdGhpcyBhcyBpdAorIyBhbHNvIGltcGFjdHMgd2hlcmUgV2luMmsgZmluZHMgaXQncyAvSE9NRSBzaGFyZQorOyBsb2dvbiBob21lID0gXFwlTFwlVVwucHJvZmlsZQorCisjIFRoZSBhZGQgdXNlciBzY3JpcHQgaXMgdXNlZCBieSBhIGRvbWFpbiBtZW1iZXIgdG8gYWRkIGxvY2FsIHVzZXIKKyMgYWNjb3VudHMgdGhhdCBoYXZlIGJlZW4gYXV0aGVudGljYXRlZCBieSB0aGUgZG9tYWluIGNvbnRyb2xsZXIsIG9yIGJ5IAorIyB0aGUgZG9tYWluIGNvbnRyb2xsZXIgdG8gYWRkIGxvY2FsIG1hY2hpbmUgYWNjb3VudHMgd2hlbiBhZGRpbmcgCisjIG1hY2hpbmVzIHRvIHRoZSBkb21haW4uCisjIFRoZSBzY3JpcHQgbXVzdCB3b3JrIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGVuIHJlcGxhY2luZyB0aGUgbWFjcm9zLAorIyBvciB0aGUgb3BlcmF0aW9uIHdpbGwgZmFpbC4gQ2hlY2sgdGhhdCBncm91cHMgZXhpc3QgaWYgZm9yY2luZyBhIAorIyBncm91cC4KKyMgU2NyaXB0IGZvciBkb21haW4gY29udHJvbGxlciBmb3IgYWRkaW5nIG1hY2hpbmVzOgorOyBhZGQgdXNlciBzY3JpcHQgPSAvdXNyL3NiaW4vdXNlcmFkZCAtZCAvZGV2L251bGwgLWcgbWFjaGluZXMg4oCTYworIyAnTWFjaGluZSBBY2NvdW50JyAtcyAvYmluL2ZhbHNlIC1NICV1CisjIFNjcmlwdCBmb3IgZG9tYWluIGNvbnRyb2xsZXIgd2l0aCBMREFQIGJhY2tlbmQgZm9yIGFkZGluZyBtYWNoaW5lcyAKKyMocGxlYXNlCisjIGNvbmZpZ3VyZSBpbiAvZXRjL3NhbWJhL3NtYmxkYXBfY29uZi5wbSBmaXJzdCk6Cis7IGFkZCB1c2VyIHNjcmlwdCA9IC91c3Ivc2hhcmUvc2FtYmEvc2NyaXB0cy9zbWJsZGFwLXVzZXJhZGQucGwgLXcg4oCTZAorIyAvZGV2L251bGwgLWcgbWFjaGluZXMgLWMgJ01hY2hpbmUgQWNjb3VudCcgLXMgL2Jpbi9mYWxzZSAldQorIyBTY3JpcHQgZm9yIGRvbWFpbiBtZW1iZXIgZm9yIGFkZGluZyBsb2NhbCBhY2NvdW50cyBmb3IgYXV0aGVudGljYXRlZAorIyB1c2VyczoKKzsgYWRkIHVzZXIgc2NyaXB0ID0gL3Vzci9zYmluL3VzZXJhZGQgLXMgL2Jpbi9mYWxzZSAldQorCisjIERvbWFpbiBncm91cHM6CisjIGRvbWFpbiBhZG1pbiBncm91cCBpcyBhIGxpc3Qgb2YgdW5peCB1c2VycyBvciBncm91cHMgd2hvIGFyZSBtYWRlCisjIG1lbWJlcnMKKyMgb2YgdGhlIERvbWFpbiBBZG1pbiBncm91cAorOyBkb21haW4gYWRtaW4gZ3JvdXAgPSByb290IEB3aGVlbAorIworIyBkb21haW4gZ3Vlc3QgZ3JvdXBzIGlzIGEgbGlzdCBvZiB1bml4IHVzZXJzIG9yIGdyb3VwcyB3aG8gYXJlIG1hZGUKKyMgbWVtYmVycworIyBvZiB0aGUgRG9tYWluIEd1ZXN0cyBncm91cAorOyBkb21haW4gZ3Vlc3QgZ3JvdXAgPSBub2JvZHkgQGd1ZXN0CisKKyMgTERBUCBjb25maWd1cmF0aW9uIGZvciBEb21haW4gQ29udHJvbGxpbmc6CisjIFRoZSBhY2NvdW50IChkbikgdGhhdCBzYW1iYSB1c2VzIHRvIGFjY2VzcyB0aGUgTERBUCBzZXJ2ZXIKKyMgVGhpcyBhY2NvdW50IG5lZWRzIHRvIGhhdmUgd3JpdGUgYWNjZXNzIHRvIHRoZSBMREFQIHRyZWUKKyMgWW91IHdpbGwgbmVlZCB0byBnaXZlIHNhbWJhIHRoZSBwYXNzd29yZCBmb3IgdGhpcyBkbiwgYnkgCisjIHJ1bm5pbmcgJ3NtYnBhc3N3ZCAtdyBteXBhc3N3b3JkJworOyBsZGFwIGFkbWluIGRuID0gY249cm9vdCxkYz1teWRvbWFpbixkYz1jb20KKzsgbGRhcCBzc2wgPSBzdGFydF90bHMKKyMgc3RhcnRfdGxzIHNob3VsZCBydW4gb24gMzg5LCBidXQgc2FtYmEgZGVmYXVsdHMgaW5jb3JyZWN0bHkgdG8gNjM2Cis7IGxkYXAgcG9ydCA9IDM4OQorOyBsZGFwIHN1ZmZpeCA9IGRjPW15ZG9tYWluLGRjPWNvbQorOyBsZGFwIHNlcnZlciA9IGxkYXAubXlkb21haW4uY29tCisKKworIyA3LiBOYW1lIFJlc29sdXRpb24gT3B0aW9uczoKKyMgQWxsIE5ldEJJT1MgbmFtZXMgbXVzdCBiZSByZXNvbHZlZCB0byBJUCBBZGRyZXNzZXMKKyMgJ05hbWUgUmVzb2x2ZSBPcmRlcicgYWxsb3dzIHRoZSBuYW1lZCByZXNvbHV0aW9uIG1lY2hhbmlzbSB0byBiZQorIyBzcGVjaWZpZWQgdGhlIGRlZmF1bHQgb3JkZXIgaXMgImhvc3QgbG1ob3N0cyB3aW5zIGJjYXN0Ii4gImhvc3QiIAorIyBtZWFucyB1c2UgdGhlIHVuaXggc3lzdGVtIGdldGhvc3RieW5hbWUoKSBmdW5jdGlvbiBjYWxsIHRoYXQgd2lsbCB1c2UgCisjIGVpdGhlciAvZXRjL2hvc3RzIE9SIEROUyBvciBOSVMgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5ncyBvZiAKKyMgL2V0Yy9ob3N0LmNvbmZpZywgL2V0Yy9uc3N3aXRjaC5jb25mCisjIGFuZCB0aGUgL2V0Yy9yZXNvbHYuY29uZiBmaWxlLiAiaG9zdCIgdGhlcmVmb3JlIGlzIHN5c3RlbSAKKyMgY29uZmlndXJhdGlvbiBkZXBlbmRhbnQuIFRoaXMgcGFyYW1ldGVyIGlzIG1vc3Qgb2Z0ZW4gb2YgdXNlIHRvIAorIyBwcmV2ZW50IEROUyBsb29rdXBzCisjIGluIG9yZGVyIHRvIHJlc29sdmUgTmV0QklPUyBuYW1lcyB0byBJUCBBZGRyZXNzZXMuIFVzZSB3aXRoIGNhcmUhCisjIFRoZSBleGFtcGxlIGJlbG93IGV4Y2x1ZGVzIHVzZSBvZiBuYW1lIHJlc29sdXRpb24gZm9yIG1hY2hpbmVzIHRoYXQKKyMgYXJlIE5PVCBvbiB0aGUgbG9jYWwgbmV0d29yayBzZWdtZW50ICAtIE9SIC0gYXJlIG5vdCBkZWxpYmVyYXRlbHkgdG8gCisjIGJlIGtub3duIHZpYSBsbWhvc3RzIG9yIHZpYSBXSU5TLgorOyBuYW1lIHJlc29sdmUgb3JkZXIgPSB3aW5zIGxtaG9zdHMgYmNhc3QKKworIyBXaW5kb3dzIEludGVybmV0IE5hbWUgU2VydmluZyBTdXBwb3J0IFNlY3Rpb246CisjIFdJTlMgU3VwcG9ydCAtIFRlbGxzIHRoZSBOTUJEIGNvbXBvbmVudCBvZiBTYW1iYSB0byBlbmFibGUgaXQncyBXSU5TCisjIFNlcnZlcgorOyAgIHdpbnMgc3VwcG9ydCA9IHllcworCisjIFdJTlMgU2VydmVyIC0gVGVsbHMgdGhlIE5NQkQgY29tcG9uZW50cyBvZiBTYW1iYSB0byBiZSBhIFdJTlMgQ2xpZW50CisjICAgICAgIE5vdGU6IFNhbWJhIGNhbiBiZSBlaXRoZXIgYSBXSU5TIFNlcnZlciwgb3IgYSBXSU5TIENsaWVudCwgYnV0IAorIyBOT1QgYm90aAorOyAgIHdpbnMgc2VydmVyID0gdy54LnkuegorCisjIFdJTlMgUHJveHkgLSBUZWxscyBTYW1iYSB0byBhbnN3ZXIgbmFtZSByZXNvbHV0aW9uIHF1ZXJpZXMgb24KKyMgYmVoYWxmIG9mIGEgbm9uIFdJTlMgY2FwYWJsZSBjbGllbnQsIGZvciB0aGlzIHRvIHdvcmsgdGhlcmUgbXVzdCBiZQorIyBhdCBsZWFzdCBvbmUgIFdJTlMgU2VydmVyIG9uIHRoZSBuZXR3b3JrLiBUaGUgZGVmYXVsdCBpcyBOTy4KKzsgICB3aW5zIHByb3h5ID0geWVzCisKKyMgRE5TIFByb3h5IC0gdGVsbHMgU2FtYmEgd2hldGhlciBvciBub3QgdG8gdHJ5IHRvIHJlc29sdmUgTmV0QklPUyAKKyMgbmFtZXMgIHZpYSBETlMgbnNsb29rdXBzLiBUaGUgYnVpbHQtaW4gZGVmYXVsdCBmb3IgdmVyc2lvbnMgMS45LjE3IGlzIAorIyB5ZXMsIHRoaXMgaGFzIGJlZW4gY2hhbmdlZCBpbiB2ZXJzaW9uIDEuOS4xOCB0byBuby4KKworICAgZG5zIHByb3h5ID0gbm8gCisKKyMgOC4gRmlsZSBOYW1pbmcgT3B0aW9uczoKKyMgQ2FzZSBQcmVzZXJ2YXRpb24gY2FuIGJlIGhhbmR5IC0gc3lzdGVtIGRlZmF1bHQgaXMgX25vXworIyBOT1RFOiBUaGVzZSBjYW4gYmUgc2V0IG9uIGEgcGVyIHNoYXJlIGJhc2lzCis7ICBwcmVzZXJ2ZSBjYXNlID0gbm8KKzsgIHNob3J0IHByZXNlcnZlIGNhc2UgPSBubworIyBEZWZhdWx0IGNhc2UgaXMgbm9ybWFsbHkgdXBwZXIgY2FzZSBmb3IgYWxsIERPUyBmaWxlcworOyAgZGVmYXVsdCBjYXNlID0gbG93ZXIKKyMgQmUgdmVyeSBjYXJlZnVsIHdpdGggY2FzZSBzZW5zaXRpdml0eSAtIGl0IGNhbiBicmVhayB0aGluZ3MhCis7ICBjYXNlIHNlbnNpdGl2ZSA9IG5vCisKKyMgRW5hYmxpbmcgaW50ZXJuYXRpb25hbGl6YXRpb246CisjIHlvdSBjYW4gbWF0Y2ggYSBXaW5kb3dzIGNvZGUgcGFnZSB3aXRoIGEgVU5JWCBjaGFyYWN0ZXIgc2V0LgorIyBXaW5kb3dzOiA0MzcgKFVTKSwgNzM3IChHUkVFSyksIDg1MCAoTGF0aW4xIC0gV2VzdGVybiBFdXJvcGVhbiksCisjIDg1MiAoRWFzdGVybiBFdS4pLCA4NjEgKEljZWxhbmRpYyksIDkzMiAoQ3lyaWxsaWMgLSBSdXNzaWFuKSwKKyMgOTM2IChKYXBhbmVzZSAtIFNoaWZ0LUpJUyksIDkzNiAoU2ltcGwuIENoaW5lc2UpLCA5NDkgKEtvcmVhbiAKKyMgSGFuZ3VsKSwKKyMgOTUwIChUcmFkLiBDaGluLikuCisjIFVOSVg6IElTTzg4NTktMSAoV2VzdGVybiBFdXJvcGVhbiksIElTTzg4NTktMiAoRWFzdGVybiBFdS4pLAorIyBJU084ODU5LTUgKFJ1c3NpYW4gQ3lyaWxsaWMpLCBLT0k4LVIgKEFsdC1SdXNzLiBDeXJpbC4pCisjIFRoaXMgaXMgYW4gZXhhbXBsZSBmb3IgZnJlbmNoIHVzZXJzOgorOyAgIGNsaWVudCBjb2RlIHBhZ2UgPSA4NTAKKzsgICBjaGFyYWN0ZXIgc2V0ID0gSVNPODg1OS0xCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09IFNoYXJlIERlZmluaXRpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitbaG9tZXNdCisgICBjb21tZW50ID0gSG9tZSBEaXJlY3RvcmllcworICAgYnJvd3NlYWJsZSA9IG5vCisgICB3cml0YWJsZSA9IHllcworCisjIFlvdSBjYW4gZW5hYmxlIFZGUyByZWN5Y2xlIGJpbiBvbiBhIHBlciBzaGFyZSBiYXNpczoKKyMgVW5jb21tZW50IHRoZSBuZXh0IDIgbGluZXMgKG1ha2Ugc3VyZSB5b3UgY3JlYXRlIGEKKyMgLnJlY3ljbGUgZm9sZGVyIGluIHRoZSBiYXNlIG9mIHRoZSBzaGFyZSBhbmQgZW5zdXJlCisjIGFsbCB1c2VycyB3aWxsIGhhdmUgd3JpdGUgYWNjZXNzIHRvIGl0LiBTZWUKKyMgZXhhbXBsZXMvVkZTL3JlY3ljbGUvUkVBTUUgaW4gc2FtYmEtZG9jIGZvciBkZXRhaWxzCis7ICAgdmZzIG9iamVjdCA9IC91c3IvbGliL3NhbWJhL3Zmcy9yZWN5Y2xlLnNvCis7ICAgdmZzIG9wdGlvbnM9IC9ldGMvc2FtYmEvcmVjeWNsZS5jb25mCisKKyMgVW4tY29tbWVudCB0aGUgZm9sbG93aW5nIGFuZCBjcmVhdGUgdGhlIG5ldGxvZ29uIGRpcmVjdG9yeSBmb3IgRG9tYWluCisjIExvZ29ucworOyBbbmV0bG9nb25dCis7ICAgY29tbWVudCA9IE5ldHdvcmsgTG9nb24gU2VydmljZQorOyAgIHBhdGggPSAvdmFyL2xpYi9zYW1iYS9uZXRsb2dvbgorOyAgIGd1ZXN0IG9rID0geWVzCis7ICAgd3JpdGFibGUgPSBubworCisjVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgMiBsaW5lcyBpZiB5b3Ugd291bGQgbGlrZSB5b3VyIGxvZ2luIHNjcmlwdHMKKyMgdG8gYmUgY3JlYXRlZCBkeW5hbWljYWxseSBieSBudGxvZ29uIChjaGVjayB0aGF0IHlvdSBoYXZlIGl0IGluIHRoZQorIyBjb3JyZWN0IGxvY2F0aW9uICh0aGUgZGVmYXVsdCBvZiB0aGUgbnRsb2dvbiBycG0gYXZhaWxhYmxlIGluCisjIGNvbnRyaWJzKQorCis7cm9vdCBwcmVleGVjID0gL3Vzci9iaW4vbnRsb2dvbiAtdSAlVSAtZyAlRyAtbyAlYSAtZCAvdmFyL2xpYi9zYW1iYS9uZXRsb2dvbgorO3Jvb3QgcG9zdGV4ZWMgPSBybSAtZiAvdmFyL2xpYi9zYW1iYS9uZXRsb2dvbi8lVS5iYXQKKworIyBVbi1jb21tZW50IHRoZSBmb2xsb3dpbmcgdG8gcHJvdmlkZSBhIHNwZWNpZmljIHJvdmluZyBwcm9maWxlIHNoYXJlCisjIHRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5Cis7W1Byb2ZpbGVzXQorOyAgICBwYXRoID0gL3Zhci9saWIvc2FtYmEvcHJvZmlsZXMKKzsgICAgYnJvd3NlYWJsZSA9IG5vCis7ICAgIGd1ZXN0IG9rID0geWVzCisKKworIyBOT1RFOiBJZiB5b3UgaGF2ZSBhIENVUFMgcHJpbnQgc3lzdGVtIHRoZXJlIGlzIG5vIG5lZWQgdG8gCisjIHNwZWNpZmljYWxseSBkZWZpbmUgZWFjaCBpbmRpdmlkdWFsIHByaW50ZXIuCisjIFlvdSBtdXN0IGNvbmZpZ3VyZSB0aGUgc2FtYmEgcHJpbnRlcnMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgV2luZG93cworIyBkcml2ZXJzIG9uIHlvdXIgV2luZG93cyBjbGllbnRzLiBPbiB0aGUgU2FtYmEgc2VydmVyIG5vIGZpbHRlcmluZyBpcworIyBkb25lLiBJZiB5b3Ugd2lzaCB0aGF0IHRoZSBzZXJ2ZXIgcHJvdmlkZXMgdGhlIGRyaXZlciBhbmQgdGhlIGNsaWVudHMKKyMgc2VuZCBQb3N0U2NyaXB0ICgiR2VuZXJpYyBQb3N0U2NyaXB0IFByaW50ZXIiIHVuZGVyIFdpbmRvd3MpLCB5b3UKKyMgaGF2ZSB0byBzd2FwIHRoZSAncHJpbnQgY29tbWFuZCcgbGluZSBiZWxvdyB3aXRoIHRoZSBjb21tZW50ZWQgb25lLgorCitbcHJpbnRlcnNdCisgICBjb21tZW50ID0gQWxsIFByaW50ZXJzCisgICBwYXRoID0gL3Zhci9zcG9vbC9zYW1iYQorICAgYnJvd3NlYWJsZSA9IG5vCisjIHRvIGFsbG93IHVzZXIgJ2d1ZXN0IGFjY291bnQnIHRvIHByaW50LgorICAgZ3Vlc3Qgb2sgPSB5ZXMKKyAgIHdyaXRhYmxlID0gbm8KKyAgIHByaW50YWJsZSA9IHllcworICAgY3JlYXRlIG1vZGUgPSAwNzAwCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBwcmludCBjb21tYW5kOiBzZWUgYWJvdmUgZm9yIGRldGFpbHMuCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgcHJpbnQgY29tbWFuZCA9IGxwci1jdXBzIC1QICVwIC1vIHJhdyAlcyAtciAKKyMgdXNpbmcgY2xpZW50IHNpZGUgcHJpbnRlciBkcml2ZXJzLgorOyAgcHJpbnQgY29tbWFuZCA9IGxwci1jdXBzIC1QICVwICVzIAorIyB1c2luZyBjdXBzIG93biBkcml2ZXJzICh1c2UgZ2VuZXJpYyBQb3N0U2NyaXB0IG9uIGNsaWVudHMpLgorIyBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kcyBhcmUgdGhlIHNhbWJhIGRlZmF1bHRzIGZvciBwcmludGluZz1jdXBzCisjIGNoYW5nZSB0aGVtIG9ubHkgaWYgeW91IG5lZWQgZGlmZmVyZW50IG9wdGlvbnM6Cis7ICAgbHBxIGNvbW1hbmQgPSBscHEgLVAgJXAKKzsgICBscHJtIGNvbW1hbmQgPSBjYW5jZWwgJXAtJWoKKworIyBUaGlzIHNoYXJlIGlzIHVzZWQgZm9yIFdpbmRvd3MgTlQtc3R5bGUgcG9pbnQtYW5kLXByaW50IHN1cHBvcnQuCisjIFRvIGJlIGFibGUgdG8gaW5zdGFsbCBkcml2ZXJzLCB5b3UgbmVlZCB0byBiZSBlaXRoZXIgcm9vdCwgb3IgbGlzdGVkCisjIGluIHRoZSBwcmludGVyIGFkbWluIHBhcmFtZXRlciBhYm92ZS4gTm90ZSB0aGF0IHlvdSBhbHNvIG5lZWQgd3JpdGUgCisjIGFjY2VzcyB0byB0aGUgZGlyZWN0b3J5IGFuZCBzaGFyZSBkZWZpbml0aW9uIHRvIGJlIGFibGUgdG8gdXBsb2FkIHRoZSAKKyMgZHJpdmVycy4KKyMgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgcGxlYXNlIHNlZSB0aGUgUHJpbnRpbmcgU3VwcG9ydCBTZWN0aW9uCisjIG9mICAvdXNyL3NoYXJlL2RvYy9zYW1iYS0vZG9jcy9TYW1iYS1IT1dUTy1Db2xsZWN0aW9uLnBkZiAKKworW3ByaW50JF0KKyAgIHBhdGggPSAvdmFyL2xpYi9zYW1iYS9wcmludGVycworICAgYnJvd3NlYWJsZSA9IHllcworICAgcmVhZCBvbmx5ID0geWVzCisgICB3cml0ZSBsaXN0ID0gQGFkbSByb290CisKKyMgQSB1c2VmdWwgYXBwbGljYXRpb24gb2Ygc2FtYmEgaXMgdG8gbWFrZSBhIFBERi1nZW5lcmF0aW9uIHNlcnZpY2UKKyMgVG8gc3RyZWFtbGluZSB0aGlzLCBpbnN0YWxsIHdpbmRvd3MgcG9zdHNjcmlwdCBkcml2ZXJzIChwcmVmZXJhYmx5IAorIyBjb2xvdXIpb24gdGhlIHNhbWJhIHNlcnZlciwgc28gdGhhdCBjbGllbnRzIGNhbiBhdXRvbWF0aWNhbGx5IGluc3RhbGwKKyMgdGhlbS4KKworW3BkZi1nZW5lcmF0b3JdCisgICBwYXRoID0gL3Zhci90bXAKKyAgIGd1ZXN0IG9rID0gTm8KKyAgIHByaW50YWJsZSA9IFllcworICAgY29tbWVudCA9IFBERiBHZW5lcmF0b3IgKG9ubHkgdmFsaWQgdXNlcnMpCisgICAjcHJpbnQgY29tbWFuZCA9IC91c3Ivc2hhcmUvc2FtYmEvc2NyaXB0cy9wcmludC1wZGYgZmlsZSBwYXRoIHdpbl9wYXRoIHJlY2lwaWVudCBJUCAmCisgICBwcmludCBjb21tYW5kID0gL3Vzci9zaGFyZS9zYW1iYS9zY3JpcHRzL3ByaW50LXBkZiAlcyB+JXUgXFxcXFxcXFwlTFxcXFwldSAlbSAlSSAmCisKKyMgVGhpcyBvbmUgaXMgdXNlZnVsIGZvciBwZW9wbGUgdG8gc2hhcmUgZmlsZXMKK1t0bXBdCisgICBjb21tZW50ID0gVGVtcG9yYXJ5IGZpbGUgc3BhY2UKKyAgIHBhdGggPSAvdG1wCisgICByZWFkIG9ubHkgPSBubworICAgcHVibGljID0geWVzCisgICBlY2hvIGNvbW1hbmQgPSBjYXQgJXM7IHJtICVzCisKKyMgQSBwdWJsaWNseSBhY2Nlc3NpYmxlIGRpcmVjdG9yeSwgYnV0IHJlYWQgb25seSwgZXhjZXB0IGZvciBwZW9wbGUgaW4KKyMgdGhlICJzdGFmZiIgZ3JvdXAKKworCisKKworO1twdWJsaWNdCis7ICAgY29tbWVudCA9IFB1YmxpYyBTdHVmZgorOyAgIHBhdGggPSAvaG9tZS9zYW1iYS9wdWJsaWMKKzsgICBwdWJsaWMgPSB5ZXMKKzsgICB3cml0YWJsZSA9IG5vCis7ICAgd3JpdGUgbGlzdCA9IEBzdGFmZgorIyBBdWRpdGVkIGRpcmVjdG9yeSB0aHJvdWdoIGV4cGVyaW1lbnRhbCBWRlMgYXVkaXQuc28gbW9kdWxlOgorIyBVbmNvbW1lbnQgbmV4dCBsaW5lLgorOyAgIHZmcyBvYmplY3QgPSAvdXNyL2xpYi9zYW1iYS92ZnMvYXVkaXQuc28KKworIyBPdGhlciBleGFtcGxlcy4gCisjCisjIEEgcHJpdmF0ZSBwcmludGVyLCB1c2FibGUgb25seSBieSBGcmVkLiBTcG9vbCBkYXRhIHdpbGwgYmUgcGxhY2VkIGluCisjIEZyZWQncworIyBob21lIGRpcmVjdG9yeS4gTm90ZSB0aGF0IGZyZWQgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byB0aGUgc3Bvb2wgCisjIGRpcmVjdG9yeSwKKyMgd2hlcmV2ZXIgaXQgaXMuCis7W2ZyZWRzcHJuXQorOyAgIGNvbW1lbnQgPSBGcmVkJ3MgUHJpbnRlcgorOyAgIHZhbGlkIHVzZXJzID0gZnJlZAorOyAgIHBhdGggPSAvaG9tZXMvZnJlZAorOyAgIHByaW50ZXIgPSBmcmVkc19wcmludGVyCis7ICAgcHVibGljID0gbm8KKzsgICB3cml0YWJsZSA9IG5vCis7ICAgcHJpbnRhYmxlID0geWVzCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQSBwcml2YXRlIGRpcmVjdG9yeSwgdXNhYmxlIG9ubHkgYnkgRnJlZC4gTm90ZSB0aGF0IEZyZWQgcmVxdWlyZXMgCisjIHdyaXRlIGFjY2VzcyB0byB0aGUgZGlyZWN0b3J5LgorCis7W2ZyZWRzZGlyXQorCisgICAgW0FndXN0aW5dCis7ICAgY29tbWVudCA9IEZyZWQncyBTZXJ2aWNlCisgICAgY29tbWVudCA9IEFndXN0aW4gUHJpdmF0ZSBGaWxlcworOyAgIHBhdGggPSAvdXNyL3NvbWV3aGVyZS9wcml2YXRlCisgICAgcGF0aCA9IC9ob21lL2FndXN0aW4vRG9jdW1lbnRzCis7ICAgdmFsaWQgdXNlcnMgPSBmcmVkCisgICAgdmFsaWQgdXNlcnMgPSBhZ3VzdGluCis7ICAgcHVibGljID0gbm8KKzsgICB3cml0YWJsZSA9IHllcworICAgIHdyaXRhYmxlID0geWVzCis7ICAgcHJpbnRhYmxlID0gbm8KKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIGEgc2VydmljZSB3aGljaCBoYXMgYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGZvciBlYWNoIG1hY2hpbmUgdGhhdCAKKyMgY29ubmVjdHMgdGhpcyBhbGxvd3MgeW91IHRvIHRhaWxvciBjb25maWd1cmF0aW9ucyB0byBpbmNvbWluZyAKKyMgbWFjaGluZXMuIFlvdSBjb3VsZCBhbHNvIHVzZSB0aGUgJXUgb3B0aW9uIHRvIHRhaWxvciBpdCBieSB1c2VyIG5hbWUuCisjIFRoZSAlbSBnZXRzIHJlcGxhY2VkIHdpdGggdGhlIG1hY2hpbmUgbmFtZSB0aGF0IGlzIGNvbm5lY3RpbmcuCis7W3BjaG9tZV0KKzsgIGNvbW1lbnQgPSBQQyBEaXJlY3RvcmllcworOyAgcGF0aCA9IC91c3IvcGMvJW0KKzsgIHB1YmxpYyA9IG5vCis7ICB3cml0YWJsZSA9IHllcworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEEgcHVibGljbHkgYWNjZXNzaWJsZSBkaXJlY3RvcnksIHJlYWQvd3JpdGUgdG8gYWxsIHVzZXJzLiBOb3RlIHRoYXQKKyMgYWxsIGZpbGVzIGNyZWF0ZWQgaW4gdGhlIGRpcmVjdG9yeSBieSB1c2VycyB3aWxsIGJlIG93bmVkIGJ5IHRoZSAKKyMgZGVmYXVsdCB1c2VyLCBzbyBhbnkgdXNlciB3aXRoIGFjY2VzcyBjYW4gZGVsZXRlIGFueSBvdGhlciB1c2VyJ3MgCisjIGZpbGVzLiBPYnZpb3VzbHkgdGhpcyBkaXJlY3RvcnkgbXVzdCBiZSB3cml0YWJsZSBieSB0aGUgZGVmYXVsdCB1c2VyLiAKKyMgQW5vdGhlciB1c2VyIGNvdWxkIG9mIGNvdXJzZSBiZSBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgYWxsIGZpbGVzIAorIyB3b3VsZCBiZSBvd25lZCBieSB0aGF0IHVzZXIgaW5zdGVhZC4KKworO1twdWJsaWNdCis7ICAgcGF0aCA9IC91c3Ivc29tZXdoZXJlL2Vsc2UvcHVibGljCis7ICAgcHVibGljID0geWVzCis7ICAgb25seSBndWVzdCA9IHllcworOyAgIHdyaXRhYmxlID0geWVzCis7ICAgcHJpbnRhYmxlID0gbm8KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgZm9sbG93aW5nIHR3byBlbnRyaWVzIGRlbW9uc3RyYXRlIGhvdyB0byBzaGFyZSBhIGRpcmVjdG9yeSBzbyAKKyMgdGhhdCB0d28gdXNlcnMgY2FuIHBsYWNlIGZpbGVzIHRoZXJlIHRoYXQgd2lsbCBiZSBvd25lZCBieSB0aGUgCisjIHNwZWNpZmljIHVzZXJzLiBJbiB0aGlzIHNldHVwLCB0aGUgZGlyZWN0b3J5IHNob3VsZCBiZSB3cml0YWJsZSBieSAKKyMgYm90aCB1c2VycyBhbmQgc2hvdWxkIGhhdmUgdGhlIHN0aWNreSBiaXQgc2V0IG9uIGl0IHRvIHByZXZlbnQgYWJ1c2UuIAorIyBPYnZpb3VzbHkgdGhpcyBjb3VsZCBiZSBleHRlbmRlZCB0byBhcyBtYW55IHVzZXJzIGFzIHJlcXVpcmVkLgorCis7W215c2hhcmVdCis7ICAgY29tbWVudCA9IE1hcnkncyBhbmQgRnJlZCdzIHN0dWZmCis7ICAgcGF0aCA9IC91c3Ivc29tZXdoZXJlL3NoYXJlZAorOyAgIHZhbGlkIHVzZXJzID0gbWFyeSBmcmVkCis7ICAgcHVibGljID0gbm8KKzsgICB3cml0YWJsZSA9IHllcworOyAgIHByaW50YWJsZSA9IG5vCis7ICAgY3JlYXRlIG1hc2sgPSAwNzY1CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jZmdwYXJzZXIuMyBiL0xpYi90ZXN0L2NmZ3BhcnNlci4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxODJjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9jZmdwYXJzZXIuMwpAQCAtMCwwICsxLDY5IEBACisgICMgSU5JIHdpdGggYXMgbWFueSB0cmlja3kgcGFydHMgYXMgcG9zc2libGUKKyAgIyBNb3N0IG9mIHRoZW0gY291bGQgbm90IGJlIHVzZWQgYmVmb3JlIDMuMgorICAgICAKKyAgIyBUaGlzIHdpbGwgYmUgcGFyc2VkIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb25zCisgICAgIyBkZWxpbWl0ZXJzID0geyc9J30KKyAgICAjIGNvbW1lbnRfcHJlZml4ZXMgPSB7JyMnfQorICAgICMgYWxsb3dfbm9fdmFsdWUgPSBUcnVlCisKK1tERUZBVUxUXQorZ28gPSAlKGludGVycG9sYXRlKXMKKworW3N0cmFuZ2VdCisgIHZhbHVlcyA9IHRoYXQgYXJlIGluZGVudGVkICMgYW5kIGVuZCB3aXRoIGhhc2ggY29tbWVudHMKKyAgb3RoZXIgPSB0aGF0IGRvIGNvbnRpbnVlCisgICAgaW4gICAgICMgYW5kIHN0aWxsIGhhdmUKKyAgICBvdGhlciAgIyBjb21tZW50cyBtaXhlZAorICAgIGxpbmVzICAjIHdpdGggdGhlIHZhbHVlcworCisKKworCisKK1tjb3JydXB0aW9uXQorICB2YWx1ZSA9IHRoYXQgaXMgCisKKworICAgIGFjdHVhbGx5IHN0aWxsIGhlcmUKKworCisgICAgICBhbmQgaG9sZHMgYWxsIHRoZXNlIHdlaXJkIG5ld2xpbmVzCisKKworICAgICAgICAjIGJ1dCBub3QgZm9yIHRoZSBsaW5lcyB0aGF0IGFyZSBjb21tZW50cworICAgICAgICBub3IgdGhlIGluZGVudGF0aW9uCisKKyAgYW5vdGhlciB2YWx1ZSA9ICMgZW1wdHkgc3RyaW5nCisgIHlldCBhbm90aGVyICMgTm9uZSEKKworICBbeWVhaCwgc2VjdGlvbnMgY2FuIGJlIGluZGVudGVkIGFzIHdlbGxdCisgIGFuZCB0aGF0IGRvZXMgbm90IG1lYW4gPSBhbnl0aGluZworICBhcmUgdGhleSBzdWJzZWN0aW9ucyA9IEZhbHNlCisgIGlmIHlvdSB3YW50IHN1YnNlY3Rpb25zID0gdXNlIFhNTAorICBsZXRzIHVzZSBzb21lIFVuaWNvZGUgPSDniYfku67lkI0KKworICBbYW5vdGhlciBvbmUhXQorIGV2ZW4gaWYgdmFsdWVzIGFyZSBpbmRlbnRlZCBsaWtlIHRoaXMgPSBzZXJpb3VzbHkKK3llcywgdGhpcyBzdGlsbCBhcHBsaWVzIHRvID0gc2VjdGlvbiAiYW5vdGhlciBvbmUhIgordGhpcyB0b28gPSBhcmUgdGhlcmUgcGVvcGxlIHdpdGggY29uZmlndXJhdGlvbnMgYnJva2VuIGFzIHRoaXM/IAorIGJld2FyZSwgdGhpcyBpcyBnb2luZyB0byBiZSBhIGNvbnRpbnVhdGlvbgorIG9mIHRoZSB2YWx1ZSBmb3IKKyBrZXkgInRoaXMgdG9vIgorIGV2ZW4gaWYgaXQgaGFzIGEgPSBjaGFyYWN0ZXIKKyB0aGlzIGlzIHN0aWxsIHRoZSBjb250aW51YXRpb24KKyB5b3VyIGVkaXRvciBwcm9iYWJseSBoaWdobGlnaHRzIGl0IHdyb25nCisgYnV0IHRoYXQncyBsaWZlCisjIGxldCdzIHNldCB0aGlzIHZhbHVlIHNvIHRoZXJlIGlzIG5vIGVycm9yCisjIHdoZW4gZ2V0dGluZyBhbGwgaXRlbXMgZm9yIHRoaXMgc2VjdGlvbjoKK2ludGVycG9sYXRlID0gYW55dGhpbmcgd2lsbCBkbworCitbbm8gdmFsdWVzIGhlcmVdCisjIGJ1dCB0aGVyZSdzIHRoaXMgYGdvYCBpbiBERUZBVUxUCisKKyAgICBbdHJpY2t5IGludGVycG9sYXRpb25dCisgICAgICBpbnRlcnBvbGF0ZSA9IGRvIHRoaXMKKyAgICAgIGxldHMgPSAlKGdvKXMKKyAgICAgIAorICAgIFttb3JlIGludGVycG9sYXRpb25dCisgICAgICBpbnRlcnBvbGF0ZSA9IGdvIHNob3BwaW5nCisgICAgICBsZXRzID0gJShnbylzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jbWF0aF90ZXN0Y2FzZXMudHh0IGIvTGliL3Rlc3QvY21hdGhfdGVzdGNhc2VzLnR4dAppbmRleCBlMTU5MzgwLi45YjA4NjUzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9jbWF0aF90ZXN0Y2FzZXMudHh0CisrKyBiL0xpYi90ZXN0L2NtYXRoX3Rlc3RjYXNlcy50eHQKQEAgLTczMywxMCArNzMzLDExIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLS0gemVyb3MKLWF0YW4wMDAwIGF0YW4gMC4wIDAuMCAtPiAwLjAgMC4wCi1hdGFuMDAwMSBhdGFuIDAuMCAtMC4wIC0+IDAuMCAtMC4wCi1hdGFuMDAwMiBhdGFuIC0wLjAgMC4wIC0+IC0wLjAgMC4wCi1hdGFuMDAwMyBhdGFuIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKKy0tIFRoZXNlIGFyZSB0ZXN0ZWQgaW4gdGVzdEF0YW5TaWduIGluIHRlc3RfY21hdGgucHkKKy0tIGF0YW4wMDAwIGF0YW4gMC4wIDAuMCAtPiAwLjAgMC4wCistLSBhdGFuMDAwMSBhdGFuIDAuMCAtMC4wIC0+IDAuMCAtMC4wCistLSBhdGFuMDAwMiBhdGFuIC0wLjAgMC4wIC0+IC0wLjAgMC4wCistLSBhdGFuMDAwMyBhdGFuIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKIAogLS0gdmFsdWVzIGFsb25nIGJvdGggc2lkZXMgb2YgaW1hZ2luYXJ5IGF4aXMKIGF0YW4wMDEwIGF0YW4gMC4wIC05Ljg4MTMxMjkxNjgyNDkzMDllLTMyNCAtPiAwLjAgLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0CkBAIC04OTYsMTAgKzg5NywxMSBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC0tIHplcm9zCi1hdGFuaDAwMDAgYXRhbmggMC4wIDAuMCAtPiAwLjAgMC4wCi1hdGFuaDAwMDEgYXRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKLWF0YW5oMDAwMiBhdGFuaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAotYXRhbmgwMDAzIGF0YW5oIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKKy0tIFRoZXNlIGFyZSB0ZXN0ZWQgaW4gdGVzdEF0YW5oU2lnbiBpbiB0ZXN0X2NtYXRoLnB5CistLSBhdGFuaDAwMDAgYXRhbmggMC4wIDAuMCAtPiAwLjAgMC4wCistLSBhdGFuaDAwMDEgYXRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKKy0tIGF0YW5oMDAwMiBhdGFuaCAtMC4wIDAuMCAtPiAtMC4wIDAuMAorLS0gYXRhbmgwMDAzIGF0YW5oIC0wLjAgLTAuMCAtPiAtMC4wIC0wLjAKIAogLS0gdmFsdWVzIGFsb25nIGJvdGggc2lkZXMgb2YgcmVhbCBheGlzCiBhdGFuaDAwMTAgYXRhbmggLTkuODgxMzEyOTE2ODI0OTMwOWUtMzI0IDAuMCAtPiAtOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQgMC4wCkBAIC0xODU4LDExICsxODYwLDE0IEBACiAtLSB0YW5oOiBIeXBlcmJvbGljIFRhbmdlbnQgLS0KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0tLSB6ZXJvcwotdGFuaDAwMDAgdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKLXRhbmgwMDAxIHRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKLXRhbmgwMDAyIHRhbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKLXRhbmgwMDAzIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAorLS0gRGlzYWJsZWQgdGVzdDogcmVwbGFjZWQgYnkgdGVzdF9tYXRoLnRlc3RUYW5oU2lnbigpCistLSBhbmQgdGVzdF9jbWF0aC50ZXN0VGFuaFNpZ24oKQorCistLSAtLSB6ZXJvcworLS0gdGFuaDAwMDAgdGFuaCAwLjAgMC4wIC0+IDAuMCAwLjAKKy0tIHRhbmgwMDAxIHRhbmggMC4wIC0wLjAgLT4gMC4wIC0wLjAKKy0tIHRhbmgwMDAyIHRhbmggLTAuMCAwLjAgLT4gLTAuMCAwLjAKKy0tIHRhbmgwMDAzIHRhbmggLTAuMCAtMC4wIC0+IC0wLjAgLTAuMAogCiAtLSByYW5kb20gaW5wdXRzCiB0YW5oMDAwNCB0YW5oIC0yMS4yMDA1MDA0NTA2NjQ5OTMgLTEuNjk3MDcyOTQ4MDM0Mjk5NiAtPiAtMS4wIDEuOTI0MTM1MjM0NDg0OTM5OWUtMTkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2NyYXNoZXJzL3JlY3Vyc2l2ZV9jYWxsLnB5IGIvTGliL3Rlc3QvY3Jhc2hlcnMvcmVjdXJzaXZlX2NhbGwucHkKaW5kZXggMzFjODk2My4uMmQxNjBhNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvY3Jhc2hlcnMvcmVjdXJzaXZlX2NhbGwucHkKKysrIGIvTGliL3Rlc3QvY3Jhc2hlcnMvcmVjdXJzaXZlX2NhbGwucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBObyBidWcgcmVwb3J0IEFGQUlLLCBtYWlsIG9uIHB5dGhvbi1kZXYgb24gMjAwNi0wMS0xMAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9jcmFzaGVycy91bmRlcmx5aW5nX2RpY3QucHkgYi9MaWIvdGVzdC9jcmFzaGVycy91bmRlcmx5aW5nX2RpY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiNzk5MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2NyYXNoZXJzL3VuZGVybHlpbmdfZGljdC5weQpAQCAtMCwwICsxLDIwIEBACitpbXBvcnQgZ2MKKwordGhpbmd5ID0gb2JqZWN0KCkKK2NsYXNzIEEob2JqZWN0KToKKyAgICBkZWYgZihzZWxmKToKKyAgICAgICAgcmV0dXJuIDEKKyAgICB4ID0gdGhpbmd5CisKK3IgPSBnYy5nZXRfcmVmZXJyZXJzKHRoaW5neSkKK2lmICJfX21vZHVsZV9fIiBpbiByWzBdOgorICAgIGRjdCA9IHJbMF0KK2Vsc2U6CisgICAgZGN0ID0gclsxXQorCithID0gQSgpCitmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgYS5mKCkKK2RjdFsiZiJdID0gbGFtYmRhIHNlbGY6IDIKKworcHJpbnQoYS5mKCkpICMgc2hvdWxkIHByaW50IDEKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2N1cnNlc190ZXN0cy5weSBiL0xpYi90ZXN0L2N1cnNlc190ZXN0cy5weQppbmRleCA3ZGVkYmJjLi40MGU4MzJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9jdXJzZXNfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvY3Vyc2VzX3Rlc3RzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjICRJZDogbmN1cnNlcy5weSAzNjU1OSAyMDA0LTA3LTE4IDA1OjU2OjA5WiB0aW1fb25lICQKICMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RhdGEvUkVBRE1FIGIvTGliL3Rlc3QvZGF0YS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmOGM5YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2RhdGEvUkVBRE1FCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBlbXB0eSBkaXJlY3Rvcnkgc2VydmVzIGFzIGRlc3RpbmF0aW9uIGZvciB0ZW1wb3JhcnkgZmlsZXMKK2NyZWF0ZWQgYnkgc29tZSB0ZXN0cy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5IGIvTGliL3Rlc3QvZGF0ZXRpbWV0ZXN0ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmM2I4ZgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CkBAIC0wLDAgKzEsMzY4NSBAQAorIiIiVGVzdCBkYXRlL3RpbWUgdHlwZS4KKworU2VlIGh0dHA6Ly93d3cuem9wZS5vcmcvTWVtYmVycy9mZHJha2UvRGF0ZVRpbWVXaWtpL1Rlc3RDYXNlcworIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIG9wZXJhdG9yIGltcG9ydCBsdCwgbGUsIGd0LCBnZSwgZXEsIG5lLCB0cnVlZGl2LCBmbG9vcmRpdiwgbW9kCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitpbXBvcnQgZGF0ZXRpbWUgYXMgZGF0ZXRpbWVfbW9kdWxlCitmcm9tIGRhdGV0aW1lIGltcG9ydCBNSU5ZRUFSLCBNQVhZRUFSCitmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lZGVsdGEKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IHR6aW5mbworZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZQorZnJvbSBkYXRldGltZSBpbXBvcnQgdGltZXpvbmUKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUsIGRhdGV0aW1lCitpbXBvcnQgdGltZSBhcyBfdGltZQorCisjIE5lZWRlZCBieSB0ZXN0X2RhdGV0aW1lCitpbXBvcnQgX3N0cnB0aW1lCisjCisKKworcGlja2xlX2Nob2ljZXMgPSBbKHBpY2tsZSwgcGlja2xlLCBwcm90bykKKyAgICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpXQorYXNzZXJ0IGxlbihwaWNrbGVfY2hvaWNlcykgPT0gcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxCisKKyMgQW4gYXJiaXRyYXJ5IGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBvZiBub24tZGF0ZXRpbWUgdHlwZXMsIGZvciB0ZXN0aW5nCisjIG1peGVkLXR5cGUgY29tcGFyaXNvbnMuCitPVEhFUlNUVUZGID0gKDEwLCAzNC41LCAiYWJjIiwge30sIFtdLCAoKSkKKworCisjIFhYWCBDb3BpZWQgZnJvbSB0ZXN0X2Zsb2F0LgorSU5GID0gZmxvYXQoImluZiIpCitOQU4gPSBmbG9hdCgibmFuIikKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBtb2R1bGUgdGVzdHMKKworY2xhc3MgVGVzdE1vZHVsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGRhdGV0aW1lID0gZGF0ZXRpbWVfbW9kdWxlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUlOWUVBUiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZS5NQVhZRUFSLCA5OTk5KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyB0emluZm8gdGVzdHMKKworY2xhc3MgRml4ZWRPZmZzZXQodHppbmZvKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUsIGRzdG9mZnNldD00Mik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2Zmc2V0LCBpbnQpOgorICAgICAgICAgICAgb2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9b2Zmc2V0KQorICAgICAgICBpZiBpc2luc3RhbmNlKGRzdG9mZnNldCwgaW50KToKKyAgICAgICAgICAgIGRzdG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPWRzdG9mZnNldCkKKyAgICAgICAgc2VsZi5fX29mZnNldCA9IG9mZnNldAorICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fX2RzdG9mZnNldCA9IGRzdG9mZnNldAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19uYW1lLmxvd2VyKCkKKyAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19vZmZzZXQKKyAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19uYW1lCisgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgIHJldHVybiBzZWxmLl9fZHN0b2Zmc2V0CisKK2NsYXNzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KEZpeGVkT2Zmc2V0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQ9Tm9uZSwgbmFtZT1Ob25lLCBkc3RvZmZzZXQ9Tm9uZSk6CisgICAgICAgIEZpeGVkT2Zmc2V0Ll9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSwgZHN0b2Zmc2V0KQorCitjbGFzcyBUZXN0VFpJbmZvKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X25vbl9hYnN0cmFjdG5lc3Moc2VsZik6CisgICAgICAgICMgSW4gb3JkZXIgdG8gYWxsb3cgc3ViY2xhc3NlcyB0byBnZXQgcGlja2xlZCwgdGhlIEMgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyB3YXNuJ3QgYWJsZSB0byBnZXQgYXdheSB3aXRoIGhhdmluZyBfX2luaXRfXyByYWlzZQorICAgICAgICAjIE5vdEltcGxlbWVudGVkRXJyb3IuCisgICAgICAgIHVzZWxlc3MgPSB0emluZm8oKQorICAgICAgICBkdCA9IGRhdGV0aW1lLm1heAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB1c2VsZXNzLnR6bmFtZSwgZHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHVzZWxlc3MudXRjb2Zmc2V0LCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdXNlbGVzcy5kc3QsIGR0KQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfbXVzdF9vdmVycmlkZShzZWxmKToKKyAgICAgICAgY2xhc3MgTm90RW5vdWdoKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0LCBuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fb2Zmc2V0ID0gb2Zmc2V0CisgICAgICAgICAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKE5vdEVub3VnaCwgdHppbmZvKSkKKyAgICAgICAgbmUgPSBOb3RFbm91Z2goMywgIk5vdEJ5QUxvbmdTaG90IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5lLCB0emluZm8pCisKKyAgICAgICAgZHQgPSBkYXRldGltZS5ub3coKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS50em5hbWUsIGR0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS51dGNvZmZzZXQsIGR0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBuZS5kc3QsIGR0KQorCisgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgorICAgICAgICBmbyA9IEZpeGVkT2Zmc2V0KDMsICJUaHJlZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmbywgdHppbmZvKQorICAgICAgICBmb3IgZHQgaW4gZGF0ZXRpbWUubm93KCksIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnV0Y29mZnNldChkdCksIHRpbWVkZWx0YShtaW51dGVzPTMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby50em5hbWUoZHQpLCAiVGhyZWUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5kc3QoZHQpLCB0aW1lZGVsdGEobWludXRlcz00MikpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19iYXNlKHNlbGYpOgorICAgICAgICAjIFRoZXJlJ3Mgbm8gcG9pbnQgdG8gcGlja2xpbmcgdHppbmZvIG9iamVjdHMgb24gdGhlaXIgb3duICh0aGV5CisgICAgICAgICMgY2Fycnkgbm8gZGF0YSksIGJ1dCB0aGV5IG5lZWQgdG8gYmUgcGlja2xhYmxlIGFueXdheSBlbHNlCisgICAgICAgICMgY29uY3JldGUgc3ViY2xhc3NlcyBjYW4ndCBiZSBwaWNrbGVkLgorICAgICAgICBvcmlnID0gdHppbmZvLl9fbmV3X18odHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShvcmlnKSBpcyB0emluZm8pCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRlcml2ZWQpIGlzIHR6aW5mbykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBjYW4gcGlja2xlL3VucGlja2xlIGFuIGluc3RhbmNlIG9mIGEgc3ViY2xhc3MuCisgICAgICAgIG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPS0zMDApCisgICAgICAgIGZvciBvdHlwZSwgYXJncyBpbiBbCisgICAgICAgICAgICAoUGlja2xhYmxlRml4ZWRPZmZzZXQsIChvZmZzZXQsICdjb29raWUnKSksCisgICAgICAgICAgICAodGltZXpvbmUsIChvZmZzZXQsKSksCisgICAgICAgICAgICAodGltZXpvbmUsIChvZmZzZXQsICJFU1QiKSldOgorICAgICAgICAgICAgb3JpZyA9IG90eXBlKCphcmdzKQorICAgICAgICAgICAgb25hbWUgPSBvcmlnLnR6bmFtZShOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9yaWcsIHR6aW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvcmlnKSwgb3R5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcudXRjb2Zmc2V0KE5vbmUpLCBvZmZzZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcudHpuYW1lKE5vbmUpLCBvbmFtZSkKKyAgICAgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXJpdmVkLCB0emluZm8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGRlcml2ZWQpLCBvdHlwZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudXRjb2Zmc2V0KE5vbmUpLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZShOb25lKSwgb25hbWUpCisKK2NsYXNzIFRlc3RUaW1lWm9uZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuQUNEVCA9IHRpbWV6b25lKHRpbWVkZWx0YShob3Vycz05LjUpLCAnQUNEVCcpCisgICAgICAgIHNlbGYuRVNUID0gdGltZXpvbmUoLXRpbWVkZWx0YShob3Vycz01KSwgJ0VTVCcpCisgICAgICAgIHNlbGYuRFQgPSBkYXRldGltZSgyMDEwLCAxLCAxKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBmb3IgdHogaW4gW3NlbGYuQUNEVCwgc2VsZi5FU1QsIHRpbWV6b25lLnV0YywKKyAgICAgICAgICAgICAgICAgICB0aW1lem9uZS5taW4sIHRpbWV6b25lLm1heF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0eiksIHR6LnR6bmFtZShOb25lKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGRhdGV0aW1lID0gZGF0ZXRpbWVfbW9kdWxlCisgICAgICAgIGZvciB0eiBpbiBbc2VsZi5BQ0RULCBzZWxmLkVTVCwgdGltZXpvbmUudXRjLAorICAgICAgICAgICAgICAgICAgIHRpbWV6b25lLm1pbiwgdGltZXpvbmUubWF4XToKKyAgICAgICAgICAgICMgdGVzdCByb3VuZC10cmlwCisgICAgICAgICAgICB0enJlcCA9IHJlcHIodHopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6LCBldmFsKHR6cmVwKSkKKworCisgICAgZGVmIHRlc3RfY2xhc3NfbWVtYmVycyhzZWxmKToKKyAgICAgICAgbGltaXQgPSB0aW1lZGVsdGEoaG91cnM9MjMsIG1pbnV0ZXM9NTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXpvbmUudXRjLnV0Y29mZnNldChOb25lKSwgWkVSTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lem9uZS5taW4udXRjb2Zmc2V0KE5vbmUpLCAtbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXpvbmUubWF4LnV0Y29mZnNldChOb25lKSwgbGltaXQpCisKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzKHRpbWV6b25lLnV0YywgdGltZXpvbmUodGltZWRlbHRhKDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh0aW1lem9uZS51dGMsIHRpbWV6b25lKHRpbWVkZWx0YSgwKSwgJ1VUQycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWV6b25lLnV0YywgdGltZXpvbmUodGltZWRlbHRhKDApLCAnVVRDJykpCisgICAgICAgICMgaW52YWxpZCBvZmZzZXRzCisgICAgICAgIGZvciBpbnZhbGlkIGluIFt0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpLCB0aW1lZGVsdGEoMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoc2Vjb25kcz0xKSwgdGltZWRlbHRhKDEpLCAtdGltZWRlbHRhKDEpXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWV6b25lLCBpbnZhbGlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZXpvbmUsIC1pbnZhbGlkKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKTogdGltZXpvbmUoTm9uZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOiB0aW1lem9uZSg0MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOiB0aW1lem9uZShaRVJPLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6IHRpbWV6b25lKFpFUk8sIDQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6IHRpbWV6b25lKFpFUk8sICdBQkMnLCAnZXh0cmEnKQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGFuY2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lem9uZS51dGMsIHR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuRVNULCB0emluZm8pCisKKyAgICBkZWYgdGVzdF91dGNvZmZzZXQoc2VsZik6CisgICAgICAgIGR1bW15ID0gc2VsZi5EVAorICAgICAgICBmb3IgaCBpbiBbMCwgMS41LCAxMl06CisgICAgICAgICAgICBvZmZzZXQgPSBoICogSE9VUgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZmZzZXQsIHRpbWV6b25lKG9mZnNldCkudXRjb2Zmc2V0KGR1bW15KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLW9mZnNldCwgdGltZXpvbmUoLW9mZnNldCkudXRjb2Zmc2V0KGR1bW15KSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6IHNlbGYuRVNULnV0Y29mZnNldCgnJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOiBzZWxmLkVTVC51dGNvZmZzZXQoNSkKKworCisgICAgZGVmIHRlc3RfZHN0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0aW1lem9uZS51dGMuZHN0KHNlbGYuRFQpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKTogc2VsZi5FU1QuZHN0KCcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6IHNlbGYuRVNULmRzdCg1KQorCisgICAgZGVmIHRlc3RfdHpuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdVVEMrMDA6MDAnLCB0aW1lem9uZShaRVJPKS50em5hbWUoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1VUQy0wNTowMCcsIHRpbWV6b25lKC01ICogSE9VUikudHpuYW1lKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdVVEMrMDk6MzAnLCB0aW1lem9uZSg5LjUgKiBIT1VSKS50em5hbWUoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1VUQy0wMDowMScsIHRpbWV6b25lKHRpbWVkZWx0YShtaW51dGVzPS0xKSkudHpuYW1lKE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdYWVonLCB0aW1lem9uZSgtNSAqIEhPVVIsICdYWVonKS50em5hbWUoTm9uZSkpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOiBzZWxmLkVTVC50em5hbWUoJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKTogc2VsZi5FU1QudHpuYW1lKDUpCisKKyAgICBkZWYgdGVzdF9mcm9tdXRjKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgdGltZXpvbmUudXRjLmZyb211dGMoc2VsZi5EVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdGltZXpvbmUudXRjLmZyb211dGMoJ25vdCBkYXRldGltZScpCisgICAgICAgIGZvciB0eiBpbiBbc2VsZi5FU1QsIHNlbGYuQUNEVCwgRWFzdGVybl06CisgICAgICAgICAgICB1dGN0aW1lID0gc2VsZi5EVC5yZXBsYWNlKHR6aW5mbz10eikKKyAgICAgICAgICAgIGxvY2FsID0gdHouZnJvbXV0Yyh1dGN0aW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbCAtIHV0Y3RpbWUsIHR6LnV0Y29mZnNldChsb2NhbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvY2FsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkRULnJlcGxhY2UodHppbmZvPXRpbWV6b25lLnV0YykpCisKKyAgICBkZWYgdGVzdF9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRpbWV6b25lKFpFUk8pLCB0aW1lem9uZShIT1VSKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lem9uZShIT1VSKSwgdGltZXpvbmUoSE9VUikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZXpvbmUoLTUgKiBIT1VSKSwgdGltZXpvbmUoLTUgKiBIT1VSLCAnRVNUJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKTogdGltZXpvbmUoWkVSTykgPCB0aW1lem9uZShaRVJPKQorICAgICAgICBzZWxmLmFzc2VydEluKHRpbWV6b25lKFpFUk8pLCB7dGltZXpvbmUoWkVSTyl9KQorCisgICAgZGVmIHRlc3RfYXdhcmVfZGF0ZXRpbWUoc2VsZik6CisgICAgICAgICMgdGVzdCB0aGF0IHRpbWV6b25lIGluc3RhbmNlcyBjYW4gYmUgdXNlZCBieSBkYXRldGltZQorICAgICAgICB0ID0gZGF0ZXRpbWUoMSwgMSwgMSkKKyAgICAgICAgZm9yIHR6IGluIFt0aW1lem9uZS5taW4sIHRpbWV6b25lLm1heCwgdGltZXpvbmUudXRjXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHoudHpuYW1lKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlcGxhY2UodHppbmZvPXR6KS50em5hbWUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHoudXRjb2Zmc2V0KHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlcGxhY2UodHppbmZvPXR6KS51dGNvZmZzZXQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHouZHN0KHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlcGxhY2UodHppbmZvPXR6KS5kc3QoKSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQmFzZSBjbGFzZSBmb3IgdGVzdGluZyBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRpbWVkZWx0YSwgdGltZSwgZGF0ZSBhbmQKKyMgZGF0ZXRpbWUgY29tcGFyaXNvbnMuCisKK2NsYXNzIEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uOgorICAgICMgVGVzdCB0aGF0IF9fZXFfXyBhbmQgX19uZV9fIGRvbid0IGNvbXBsYWluIGZvciBtaXhlZC10eXBlIGNvbXBhcmlzb25zLgorCisgICAgIyBTdWJjbGFzc2VzIG11c3QgZGVmaW5lICd0aGVjbGFzcycsIGFuZCB0aGVjbGFzcygxLCAxLCAxKSBtdXN0IGJlIGEKKyAgICAjIGxlZ2l0IGNvbnN0cnVjdG9yLgorCisgICAgZGVmIHRlc3RfaGFybWxlc3NfbWl4ZWRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgbWUgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZSA9PSAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1lICE9ICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCgpID09IG1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKCkgIT0gbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtZSwgWzEsIDIwLCBbXSwgbWVdKQorICAgICAgICBzZWxmLmFzc2VydEluKFtdLCBbbWUsIDEsIDIwLCBbXV0pCisKKyAgICBkZWYgdGVzdF9oYXJtZnVsX21peGVkX2NvbXBhcmlzb24oc2VsZik6CisgICAgICAgIG1lID0gc2VsZi50aGVjbGFzcygxLCAxLCAxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA8ICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPD0gKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtZSA+ICgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPj0gKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpIDwgbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA8PSBtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICgpID4gbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA+PSBtZSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgdGltZWRlbHRhIHRlc3RzCisKK2NsYXNzIFRlc3RUaW1lRGVsdGEoSGFybWxlc3NNaXhlZENvbXBhcmlzb24sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHRoZWNsYXNzID0gdGltZWRlbHRhCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHRkID0gdGltZWRlbHRhCisKKyAgICAgICAgIyBDaGVjayBrZXl3b3JkIGFyZ3MgdG8gY29uc3RydWN0b3IKKyAgICAgICAgZXEodGQoKSwgdGQod2Vla3M9MCwgZGF5cz0wLCBob3Vycz0wLCBtaW51dGVzPTAsIHNlY29uZHM9MCwKKyAgICAgICAgICAgICAgICAgICAgbWlsbGlzZWNvbmRzPTAsIG1pY3Jvc2Vjb25kcz0wKSkKKyAgICAgICAgZXEodGQoMSksIHRkKGRheXM9MSkpCisgICAgICAgIGVxKHRkKDAsIDEpLCB0ZChzZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZCgwLCAwLCAxKSwgdGQobWljcm9zZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZCh3ZWVrcz0xKSwgdGQoZGF5cz03KSkKKyAgICAgICAgZXEodGQoZGF5cz0xKSwgdGQoaG91cnM9MjQpKQorICAgICAgICBlcSh0ZChob3Vycz0xKSwgdGQobWludXRlcz02MCkpCisgICAgICAgIGVxKHRkKG1pbnV0ZXM9MSksIHRkKHNlY29uZHM9NjApKQorICAgICAgICBlcSh0ZChzZWNvbmRzPTEpLCB0ZChtaWxsaXNlY29uZHM9MTAwMCkpCisgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0xKSwgdGQobWljcm9zZWNvbmRzPTEwMDApKQorCisgICAgICAgICMgQ2hlY2sgZmxvYXQgYXJncyB0byBjb25zdHJ1Y3RvcgorICAgICAgICBlcSh0ZCh3ZWVrcz0xLjAvNyksIHRkKGRheXM9MSkpCisgICAgICAgIGVxKHRkKGRheXM9MS4wLzI0KSwgdGQoaG91cnM9MSkpCisgICAgICAgIGVxKHRkKGhvdXJzPTEuMC82MCksIHRkKG1pbnV0ZXM9MSkpCisgICAgICAgIGVxKHRkKG1pbnV0ZXM9MS4wLzYwKSwgdGQoc2Vjb25kcz0xKSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0wLjAwMSksIHRkKG1pbGxpc2Vjb25kcz0xKSkKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuMDAxKSwgdGQobWljcm9zZWNvbmRzPTEpKQorCisgICAgZGVmIHRlc3RfY29tcHV0YXRpb25zKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEKKworICAgICAgICBhID0gdGQoNykgIyBPbmUgd2VlaworICAgICAgICBiID0gdGQoMCwgNjApICMgT25lIG1pbnV0ZQorICAgICAgICBjID0gdGQoMCwgMCwgMTAwMCkgIyBPbmUgbWlsbGlzZWNvbmQKKyAgICAgICAgZXEoYStiK2MsIHRkKDcsIDYwLCAxMDAwKSkKKyAgICAgICAgZXEoYS1iLCB0ZCg2LCAyNCozNjAwIC0gNjApKQorICAgICAgICBlcShiLl9fcnN1Yl9fKGEpLCB0ZCg2LCAyNCozNjAwIC0gNjApKQorICAgICAgICBlcSgtYSwgdGQoLTcpKQorICAgICAgICBlcSgrYSwgdGQoNykpCisgICAgICAgIGVxKC1iLCB0ZCgtMSwgMjQqMzYwMCAtIDYwKSkKKyAgICAgICAgZXEoLWMsIHRkKC0xLCAyNCozNjAwIC0gMSwgOTk5MDAwKSkKKyAgICAgICAgZXEoYWJzKGEpLCBhKQorICAgICAgICBlcShhYnMoLWEpLCBhKQorICAgICAgICBlcSh0ZCg2LCAyNCozNjAwKSwgYSkKKyAgICAgICAgZXEodGQoMCwgMCwgNjAqMTAwMDAwMCksIGIpCisgICAgICAgIGVxKGEqMTAsIHRkKDcwKSkKKyAgICAgICAgZXEoYSoxMCwgMTAqYSkKKyAgICAgICAgZXEoYSoxMCwgMTAqYSkKKyAgICAgICAgZXEoYioxMCwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoMTAqYiwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoYioxMCwgdGQoMCwgNjAwKSkKKyAgICAgICAgZXEoYyoxMCwgdGQoMCwgMCwgMTAwMDApKQorICAgICAgICBlcSgxMCpjLCB0ZCgwLCAwLCAxMDAwMCkpCisgICAgICAgIGVxKGMqMTAsIHRkKDAsIDAsIDEwMDAwKSkKKyAgICAgICAgZXEoYSotMSwgLWEpCisgICAgICAgIGVxKGIqLTIsIC1iLWIpCisgICAgICAgIGVxKGMqLTIsIC1jKy1jKQorICAgICAgICBlcShiKig2MCoyNCksIChiKjYwKSoyNCkKKyAgICAgICAgZXEoYiooNjAqMjQpLCAoNjAqYikqMjQpCisgICAgICAgIGVxKGMqMTAwMCwgdGQoMCwgMSkpCisgICAgICAgIGVxKDEwMDAqYywgdGQoMCwgMSkpCisgICAgICAgIGVxKGEvLzcsIHRkKDEpKQorICAgICAgICBlcShiLy8xMCwgdGQoMCwgNikpCisgICAgICAgIGVxKGMvLzEwMDAsIHRkKDAsIDAsIDEpKQorICAgICAgICBlcShhLy8xMCwgdGQoMCwgNyoyNCozNjApKQorICAgICAgICBlcShhLy8zNjAwMDAwLCB0ZCgwLCAwLCA3KjI0KjEwMDApKQorICAgICAgICBlcShhLzAuNSwgdGQoMTQpKQorICAgICAgICBlcShiLzAuNSwgdGQoMCwgMTIwKSkKKyAgICAgICAgZXEoYS83LCB0ZCgxKSkKKyAgICAgICAgZXEoYi8xMCwgdGQoMCwgNikpCisgICAgICAgIGVxKGMvMTAwMCwgdGQoMCwgMCwgMSkpCisgICAgICAgIGVxKGEvMTAsIHRkKDAsIDcqMjQqMzYwKSkKKyAgICAgICAgZXEoYS8zNjAwMDAwLCB0ZCgwLCAwLCA3KjI0KjEwMDApKQorCisgICAgICAgICMgTXVsdGlwbGljYXRpb24gYnkgZmxvYXQKKyAgICAgICAgdXMgPSB0ZChtaWNyb3NlY29uZHM9MSkKKyAgICAgICAgZXEoKDMqdXMpICogMC41LCAyKnVzKQorICAgICAgICBlcSgoNSp1cykgKiAwLjUsIDIqdXMpCisgICAgICAgIGVxKDAuNSAqICgzKnVzKSwgMip1cykKKyAgICAgICAgZXEoMC41ICogKDUqdXMpLCAyKnVzKQorICAgICAgICBlcSgoLTMqdXMpICogMC41LCAtMip1cykKKyAgICAgICAgZXEoKC01KnVzKSAqIDAuNSwgLTIqdXMpCisKKyAgICAgICAgIyBEaXZpc2lvbiBieSBpbnQgYW5kIGZsb2F0CisgICAgICAgIGVxKCgzKnVzKSAvIDIsIDIqdXMpCisgICAgICAgIGVxKCg1KnVzKSAvIDIsIDIqdXMpCisgICAgICAgIGVxKCgtMyp1cykgLyAyLjAsIC0yKnVzKQorICAgICAgICBlcSgoLTUqdXMpIC8gMi4wLCAtMip1cykKKyAgICAgICAgZXEoKDMqdXMpIC8gLTIsIC0yKnVzKQorICAgICAgICBlcSgoNSp1cykgLyAtMiwgLTIqdXMpCisgICAgICAgIGVxKCgzKnVzKSAvIC0yLjAsIC0yKnVzKQorICAgICAgICBlcSgoNSp1cykgLyAtMi4wLCAtMip1cykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICBlcSgoaSp1cy8zKS8vdXMsIHJvdW5kKGkvMykpCisgICAgICAgIGZvciBpIGluIHJhbmdlKC0xMCwgMTApOgorICAgICAgICAgICAgZXEoKGkqdXMvLTMpLy91cywgcm91bmQoaS8tMykpCisKKyAgICAgICAgIyBJc3N1ZSAjMTE1NzYKKyAgICAgICAgZXEodGQoOTk5OTk5OTk5LCA4NjM5OSwgOTk5OTk5KSAtIHRkKDk5OTk5OTk5OSwgODYzOTksIDk5OTk5OCksCisgICAgICAgICAgIHRkKDAsIDAsIDEpKQorICAgICAgICBlcSh0ZCg5OTk5OTk5OTksIDEsIDEpIC0gdGQoOTk5OTk5OTk5LCAxLCAwKSwKKyAgICAgICAgICAgdGQoMCwgMCwgMSkpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2NvbXB1dGF0aW9ucyhzZWxmKToKKyAgICAgICAgYSA9IHRpbWVkZWx0YSg0MikKKworICAgICAgICAjIEFkZC9zdWIgaW50cyBvciBmbG9hdHMgc2hvdWxkIGJlIGlsbGVnYWwKKyAgICAgICAgZm9yIGkgaW4gMSwgMS4wOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhLWkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaSthKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGktYSkKKworICAgICAgICAjIERpdmlzaW9uIG9mIGludCBieSB0aW1lZGVsdGEgZG9lc24ndCBtYWtlIHNlbnNlLgorICAgICAgICAjIERpdmlzaW9uIGJ5IHplcm8gZG9lc24ndCBtYWtlIHNlbnNlLgorICAgICAgICB6ZXJvID0gMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogemVybyAvLyBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGFtYmRhOiBhIC8vIHplcm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsYW1iZGE6IGEgLyB6ZXJvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGFtYmRhOiBhIC8gMC4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvICcnKQorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX3NwZWNpYWwoc2VsZik6CisgICAgICAgIGEgPSB0aW1lZGVsdGEoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGEuX19tdWxfXywgTkFOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhLl9fdHJ1ZWRpdl9fLCBOQU4pCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBkYXlzLCBzZWNvbmRzLCB1cyA9IDEsIDcsIDMxCisgICAgICAgIHRkID0gdGltZWRlbHRhKGRheXMsIHNlY29uZHMsIHVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRheXMsIGRheXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2Vjb25kcywgc2Vjb25kcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5taWNyb3NlY29uZHMsIHVzKQorCisgICAgZGVmIHRlc3RfdG90YWxfc2Vjb25kcyhzZWxmKToKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEoZGF5cz0zNjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLCAzMTUzNjAwMC4wKQorICAgICAgICBmb3IgdG90YWxfc2Vjb25kcyBpbiBbMTIzNDU2Ljc4OTAxMiwgLTEyMzQ1Ni43ODkwMTIsIDAuMTIzNDU2LCAwLCAxZTZdOgorICAgICAgICAgICAgdGQgPSB0aW1lZGVsdGEoc2Vjb25kcz10b3RhbF9zZWNvbmRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC50b3RhbF9zZWNvbmRzKCksIHRvdGFsX3NlY29uZHMpCisgICAgICAgICMgSXNzdWU4NjQ0OiBUZXN0IHRoYXQgdGQudG90YWxfc2Vjb25kcygpIGhhcyB0aGUgc2FtZQorICAgICAgICAjIGFjY3VyYWN5IGFzIHRkIC8gdGltZWRlbHRhKHNlY29uZHM9MSkuCisgICAgICAgIGZvciBtcyBpbiBbLTEsIC0yLCAtMTIzXToKKyAgICAgICAgICAgIHRkID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz1tcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQudG90YWxfc2Vjb25kcygpLCB0ZCAvIHRpbWVkZWx0YShzZWNvbmRzPTEpKQorCisgICAgZGVmIHRlc3RfY2FycmllcyhzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lZGVsdGEoZGF5cz0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgIHdlZWtzPS03LAorICAgICAgICAgICAgICAgICAgICAgICBob3Vycz0tMjQqKDEwMC00OSksCisgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZXM9LTMsCisgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9MTIsCisgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcz0oMyo2MCAtIDEyKSAqIDFlNiArIDEpCisgICAgICAgIHQyID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKworICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIHQxID0gdGltZWRlbHRhKGRheXM9MTAwLAorICAgICAgICAgICAgICAgICAgICAgICB3ZWVrcz0tNywKKyAgICAgICAgICAgICAgICAgICAgICAgaG91cnM9LTI0KigxMDAtNDkpLAorICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzPS0zLAorICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPTEyLAorICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9KDMqNjAgLSAxMikgKiAxMDAwMDAwKQorICAgICAgICB0MiA9IHRpbWVkZWx0YSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQorCisgICAgICAgIHQxICs9IHRpbWVkZWx0YSh3ZWVrcz03KQorICAgICAgICB0MiArPSB0aW1lZGVsdGEoZGF5cz03KjcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgICAgICBkID0ge3QxOiAxfQorICAgICAgICBkW3QyXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFt0MV0sIDIpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYXJncyA9IDEyLCAzNCwgNTYKKyAgICAgICAgb3JpZyA9IHRpbWVkZWx0YSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lZGVsdGEoMiwgMywgNCkKKyAgICAgICAgdDIgPSB0aW1lZGVsdGEoMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID49IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxICE9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKworICAgICAgICBmb3IgYXJncyBpbiAoMywgMywgMyksICgyLCA0LCA0KSwgKDIsIDMsIDUpOgorICAgICAgICAgICAgdDIgPSB0aW1lZGVsdGEoKmFyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKKworICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPD0gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICB0ZCA9IHRpbWVkZWx0YQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShzdHIodGQoMSkpLCAiMSBkYXksIDA6MDA6MDAiKQorICAgICAgICBlcShzdHIodGQoLTEpKSwgIi0xIGRheSwgMDowMDowMCIpCisgICAgICAgIGVxKHN0cih0ZCgyKSksICIyIGRheXMsIDA6MDA6MDAiKQorICAgICAgICBlcShzdHIodGQoLTIpKSwgIi0yIGRheXMsIDA6MDA6MDAiKQorCisgICAgICAgIGVxKHN0cih0ZChob3Vycz0xMiwgbWludXRlcz01OCwgc2Vjb25kcz01OSkpLCAiMTI6NTg6NTkiKQorICAgICAgICBlcShzdHIodGQoaG91cnM9MiwgbWludXRlcz0zLCBzZWNvbmRzPTQpKSwgIjI6MDM6MDQiKQorICAgICAgICBlcShzdHIodGQod2Vla3M9LTMwLCBob3Vycz0yMywgbWludXRlcz0xMiwgc2Vjb25kcz0zNCkpLAorICAgICAgICAgICAiLTIxMCBkYXlzLCAyMzoxMjozNCIpCisKKyAgICAgICAgZXEoc3RyKHRkKG1pbGxpc2Vjb25kcz0xKSksICIwOjAwOjAwLjAwMTAwMCIpCisgICAgICAgIGVxKHN0cih0ZChtaWNyb3NlY29uZHM9MykpLCAiMDowMDowMC4wMDAwMDMiKQorCisgICAgICAgIGVxKHN0cih0ZChkYXlzPTk5OTk5OTk5OSwgaG91cnM9MjMsIG1pbnV0ZXM9NTksIHNlY29uZHM9NTksCisgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPTk5OTk5OSkpLAorICAgICAgICAgICAiOTk5OTk5OTk5IGRheXMsIDIzOjU5OjU5Ljk5OTk5OSIpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBuYW1lID0gJ2RhdGV0aW1lLicgKyBzZWxmLnRoZWNsYXNzLl9fbmFtZV9fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMSkiICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMTAsIDIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMTAsIDIpIiAlIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKC0xMCwgMiwgNDAwMDAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKC0xMCwgMiwgNDAwMDAwKSIgJSBuYW1lKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgdGQgaW4gKHRpbWVkZWx0YShkYXlzPTk5OTk5OTk5OSwgaG91cnM9MjMsIG1pbnV0ZXM9NTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9NTksIG1pY3Jvc2Vjb25kcz05OTk5OTkpLAorICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShkYXlzPS05OTk5OTk5OTkpLAorICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShkYXlzPS05OTk5OTk5OTksIHNlY29uZHM9MSksCisgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKGRheXM9MSwgc2Vjb25kcz0yLCBtaWNyb3NlY29uZHM9MykpOgorCisgICAgICAgICAgICAjIFZlcmlmeSB0ZCAtPiBzdHJpbmcgLT4gdGQgaWRlbnRpdHkuCisgICAgICAgICAgICBzID0gcmVwcih0ZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgcyA9IHNbOTpdCisgICAgICAgICAgICB0ZDIgPSBldmFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLCB0ZDIpCisKKyAgICAgICAgICAgICMgVmVyaWZ5IGlkZW50aXR5IHZpYSByZWNvbnN0cnVjdGluZyBmcm9tIHBpZWNlcy4KKyAgICAgICAgICAgIHRkMiA9IHRpbWVkZWx0YSh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLCB0ZDIpCisKKyAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhLm1heCA+IHRpbWVkZWx0YS5taW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWRlbHRhLm1pbiwgdGltZWRlbHRhKC05OTk5OTk5OTkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5tYXgsIHRpbWVkZWx0YSg5OTk5OTk5OTksIDI0KjM2MDAtMSwgMWU2LTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5yZXNvbHV0aW9uLCB0aW1lZGVsdGEoMCwgMCwgMSkpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgdGlueSA9IHRpbWVkZWx0YS5yZXNvbHV0aW9uCisKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEubWluICsgdGlueQorICAgICAgICB0ZCAtPSB0aW55ICAjIG5vIHByb2JsZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19zdWJfXywgdGlueSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19hZGRfXywgLXRpbnkpCisKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEubWF4IC0gdGlueQorICAgICAgICB0ZCArPSB0aW55ICAjIG5vIHByb2JsZW0KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19hZGRfXywgdGlueSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgdGQuX19zdWJfXywgLXRpbnkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGFtYmRhOiAtdGltZWRlbHRhLm1heCkKKworICAgICAgICBkYXkgPSB0aW1lZGVsdGEoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZGF5Ll9fbXVsX18sIDEwKio5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkYXkuX19tdWxfXywgMWU5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkYXkuX190cnVlZGl2X18sIDFlLTIwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkYXkuX190cnVlZGl2X18sIDFlLTEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkYXkuX190cnVlZGl2X18sIDllLTEwKQorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgX3Rlc3Rfb3ZlcmZsb3dfc3BlY2lhbChzZWxmKToKKyAgICAgICAgZGF5ID0gdGltZWRlbHRhKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGRheS5fX211bF9fLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGRheS5fX211bF9fLCAtSU5GKQorCisgICAgZGVmIHRlc3RfbWljcm9zZWNvbmRfcm91bmRpbmcoc2VsZik6CisgICAgICAgIHRkID0gdGltZWRlbHRhCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgICMgU2luZ2xlLWZpZWxkIHJvdW5kaW5nLgorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC40LzEwMDApLCB0ZCgwKSkgICAgIyByb3VuZHMgdG8gMAorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNC8xMDAwKSwgdGQoMCkpICAgICMgcm91bmRzIHRvIDAKKyAgICAgICAgZXEodGQobWlsbGlzZWNvbmRzPTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPTEpKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9LTAuNi8xMDAwKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKKworICAgICAgICAjIFJvdW5kaW5nIGR1ZSB0byBjb250cmlidXRpb25zIGZyb20gbW9yZSB0aGFuIG9uZSBmaWVsZC4KKyAgICAgICAgdXNfcGVyX2hvdXIgPSAzNjAwZTYKKyAgICAgICAgdXNfcGVyX2RheSA9IHVzX3Blcl9ob3VyICogMjQKKyAgICAgICAgZXEodGQoZGF5cz0uNC91c19wZXJfZGF5KSwgdGQoMCkpCisgICAgICAgIGVxKHRkKGhvdXJzPS4yL3VzX3Blcl9ob3VyKSwgdGQoMCkpCisgICAgICAgIGVxKHRkKGRheXM9LjQvdXNfcGVyX2RheSwgaG91cnM9LjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9MSkpCisKKyAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSksIHRkKDApKQorICAgICAgICBlcSh0ZChob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKKyAgICAgICAgZXEodGQoZGF5cz0tLjQvdXNfcGVyX2RheSwgaG91cnM9LS4yL3VzX3Blcl9ob3VyKSwgdGQobWljcm9zZWNvbmRzPS0xKSkKKworICAgIGRlZiB0ZXN0X21hc3NpdmVfbm9ybWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgtMSwgMjQqMzYwMC0xLCA5OTk5OTkpKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YSgwLCAwLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdGltZWRlbHRhKDApKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZWRlbHRhKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFQodGltZWRlbHRhKToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmcm9tX3RkKHRkKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpCisKKyAgICAgICAgICAgIGRlZiBhc19ob3VycyhzZWxmKToKKyAgICAgICAgICAgICAgICBzdW0gPSAoc2VsZi5kYXlzICogMjQgKworICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlY29uZHMgLyAzNjAwLjAgKworICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pY3Jvc2Vjb25kcyAvIDM2MDBlNikKKyAgICAgICAgICAgICAgICByZXR1cm4gcm91bmQoc3VtKQorCisgICAgICAgIHQxID0gVChkYXlzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQxKSBpcyBUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmFzX2hvdXJzKCksIDI0KQorCisgICAgICAgIHQyID0gVChkYXlzPS0xLCBzZWNvbmRzPS0zNjAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0MikgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5hc19ob3VycygpLCAtMjUpCisKKyAgICAgICAgdDMgPSB0MSArIHQyCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQzKSBpcyB0aW1lZGVsdGEpCisgICAgICAgIHQ0ID0gVC5mcm9tX3RkKHQzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0NCkgaXMgVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5kYXlzLCB0NC5kYXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnNlY29uZHMsIHQ0LnNlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMubWljcm9zZWNvbmRzLCB0NC5taWNyb3NlY29uZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQzKSwgc3RyKHQ0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0NC5hc19ob3VycygpLCAtMSkKKworICAgIGRlZiB0ZXN0X2RpdmlzaW9uKHNlbGYpOgorICAgICAgICB0ID0gdGltZWRlbHRhKGhvdXJzPTEsIG1pbnV0ZXM9MjQsIHNlY29uZHM9MTkpCisgICAgICAgIHNlY29uZCA9IHRpbWVkZWx0YShzZWNvbmRzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCAvIHNlY29uZCwgNTA1OS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQgLy8gc2Vjb25kLCA1MDU5KQorCisgICAgICAgIHQgPSB0aW1lZGVsdGEobWludXRlcz0yLCBzZWNvbmRzPTMwKQorICAgICAgICBtaW51dGUgPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQgLyBtaW51dGUsIDIuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0IC8vIG1pbnV0ZSwgMikKKworICAgICAgICB6ZXJvdGQgPSB0aW1lZGVsdGEoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHRydWVkaXYsIHQsIHplcm90ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGZsb29yZGl2LCB0LCB6ZXJvdGQpCisKKyAgICAgICAgIyBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRydWVkaXYsIHQsIDIpCisgICAgICAgICMgbm90ZTogZmxvb3IgZGl2aXNpb24gb2YgYSB0aW1lZGVsdGEgYnkgYW4gaW50ZWdlciAqaXMqCisgICAgICAgICMgY3VycmVudGx5IHBlcm1pdHRlZC4KKworICAgIGRlZiB0ZXN0X3JlbWFpbmRlcihzZWxmKToKKyAgICAgICAgdCA9IHRpbWVkZWx0YShtaW51dGVzPTIsIHNlY29uZHM9MzApCisgICAgICAgIG1pbnV0ZSA9IHRpbWVkZWx0YShtaW51dGVzPTEpCisgICAgICAgIHIgPSB0ICUgbWludXRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgdGltZWRlbHRhKHNlY29uZHM9MzApKQorCisgICAgICAgIHQgPSB0aW1lZGVsdGEobWludXRlcz0tMiwgc2Vjb25kcz0zMCkKKyAgICAgICAgciA9IHQgJSAgbWludXRlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgdGltZWRlbHRhKHNlY29uZHM9MzApKQorCisgICAgICAgIHplcm90ZCA9IHRpbWVkZWx0YSgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbW9kLCB0LCB6ZXJvdGQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2QsIHQsIDEwKQorCisgICAgZGVmIHRlc3RfZGl2bW9kKHNlbGYpOgorICAgICAgICB0ID0gdGltZWRlbHRhKG1pbnV0ZXM9Miwgc2Vjb25kcz0zMCkKKyAgICAgICAgbWludXRlID0gdGltZWRlbHRhKG1pbnV0ZXM9MSkKKyAgICAgICAgcSwgciA9IGRpdm1vZCh0LCBtaW51dGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB0aW1lZGVsdGEoc2Vjb25kcz0zMCkpCisKKyAgICAgICAgdCA9IHRpbWVkZWx0YShtaW51dGVzPS0yLCBzZWNvbmRzPTMwKQorICAgICAgICBxLCByID0gZGl2bW9kKHQsIG1pbnV0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB0aW1lZGVsdGEoc2Vjb25kcz0zMCkpCisKKyAgICAgICAgemVyb3RkID0gdGltZWRlbHRhKDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBkaXZtb2QsIHQsIHplcm90ZCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpdm1vZCwgdCwgMTApCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGF0ZSB0ZXN0cworCitjbGFzcyBUZXN0RGF0ZU9ubHkodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdHMgaGVyZSB3b24ndCBwYXNzIGlmIGFsc28gcnVuIG9uIGRhdGV0aW1lIG9iamVjdHMsIHNvIGRvbid0CisgICAgIyBzdWJjbGFzcyB0aGlzIHRvIHRlc3QgZGF0ZXRpbWVzIHRvby4KKworICAgIGRlZiB0ZXN0X2RlbHRhX25vbl9kYXlzX2lnbm9yZWQoc2VsZik6CisgICAgICAgIGR0ID0gZGF0ZSgyMDAwLCAxLCAyKQorICAgICAgICBkZWx0YSA9IHRpbWVkZWx0YShkYXlzPTEsIGhvdXJzPTIsIG1pbnV0ZXM9Mywgc2Vjb25kcz00LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9NSkKKyAgICAgICAgZGF5cyA9IHRpbWVkZWx0YShkZWx0YS5kYXlzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRheXMsIHRpbWVkZWx0YSgxKSkKKworICAgICAgICBkdDIgPSBkdCArIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCisKKyAgICAgICAgZHQyID0gZGVsdGEgKyBkdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGR0IC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0IC0gZGF5cykKKworICAgICAgICBkZWx0YSA9IC1kZWx0YQorICAgICAgICBkYXlzID0gdGltZWRlbHRhKGRlbHRhLmRheXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF5cywgdGltZWRlbHRhKC0yKSkKKworICAgICAgICBkdDIgPSBkdCArIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCisKKyAgICAgICAgZHQyID0gZGVsdGEgKyBkdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgKyBkYXlzKQorCisgICAgICAgIGR0MiA9IGR0IC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0IC0gZGF5cykKKworY2xhc3MgU3ViY2xhc3NEYXRlKGRhdGUpOgorICAgIHN1Yl92YXIgPSAxCisKK2NsYXNzIFRlc3REYXRlKEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBoZXJlIHNob3VsZCBwYXNzIGZvciBib3RoIGRhdGVzIGFuZCBkYXRldGltZXMsIGV4Y2VwdCBmb3IgYQorICAgICMgZmV3IHRlc3RzIHRoYXQgVGVzdERhdGVUaW1lIG92ZXJyaWRlcy4KKworICAgIHRoZWNsYXNzID0gZGF0ZQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMjAwMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDEpCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciBkdCBpbiAoc2VsZi50aGVjbGFzcygxLCAyLCAzKSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLnRvZGF5KCkpOgorICAgICAgICAgICAgIyBWZXJpZnkgZHQgLT4gc3RyaW5nIC0+IGRhdGUgaWRlbnRpdHkuCisgICAgICAgICAgICBzID0gcmVwcihkdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICAgICAgcyA9IHNbOTpdCisgICAgICAgICAgICBkdDIgPSBldmFsKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCisKKyAgICAgICAgICAgICMgVmVyaWZ5IGlkZW50aXR5IHZpYSByZWNvbnN0cnVjdGluZyBmcm9tIHBpZWNlcy4KKyAgICAgICAgICAgIGR0MiA9IHNlbGYudGhlY2xhc3MoZHQueWVhciwgZHQubW9udGgsIGR0LmRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKKworICAgIGRlZiB0ZXN0X29yZGluYWxfY29udmVyc2lvbnMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgc29tZSBmaXhlZCB2YWx1ZXMuCisgICAgICAgIGZvciB5LCBtLCBkLCBuIGluIFsoMSwgMSwgMSwgMSksICAgICAgIyBjYWxlbmRhciBvcmlnaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxLCAxMiwgMzEsIDM2NSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgMSwgMzY2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmlyc3QgZXhhbXBsZSBmcm9tICJDYWxlbmRyaWNhbCBDYWxjdWxhdGlvbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTk0NSwgMTEsIDEyLCA3MTAzNDcpXToKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKHksIG0sIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIGQudG9vcmRpbmFsKCkpCisgICAgICAgICAgICBmcm9tb3JkID0gc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBmcm9tb3JkKQorICAgICAgICAgICAgaWYgaGFzYXR0cihmcm9tb3JkLCAiaG91ciIpOgorICAgICAgICAgICAgIyBpZiB3ZSdyZSBjaGVja2luZyBzb21ldGhpbmcgZmFuY2llciB0aGFuIGEgZGF0ZSwgdmVyaWZ5CisgICAgICAgICAgICAjIHRoZSBleHRyYSBmaWVsZHMgaGF2ZSBiZWVuIHplcm9lZCBvdXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQuaG91ciwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQubWludXRlLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbW9yZC5zZWNvbmQsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tb3JkLm1pY3Jvc2Vjb25kLCAwKQorCisgICAgICAgICMgQ2hlY2sgZmlyc3QgYW5kIGxhc3QgZGF5cyBvZiB5ZWFyIHNwb3R0aWx5IGFjcm9zcyB0aGUgd2hvbGUKKyAgICAgICAgIyByYW5nZSBvZiB5ZWFycyBzdXBwb3J0ZWQuCisgICAgICAgIGZvciB5ZWFyIGluIHJhbmdlKE1JTllFQVIsIE1BWFlFQVIrMSwgNyk6CisgICAgICAgICAgICAjIFZlcmlmeSAoeWVhciwgMSwgMSkgLT4gb3JkaW5hbCAtPiB5LCBtLCBkIGlzIGlkZW50aXR5LgorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoeWVhciwgMSwgMSkKKyAgICAgICAgICAgIG4gPSBkLnRvb3JkaW5hbCgpCisgICAgICAgICAgICBkMiA9IHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwobikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDIpCisgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IG1vdmluZyBiYWNrIGEgZGF5IGdldHMgdG8gdGhlIGVuZCBvZiB5ZWFyLTEuCisgICAgICAgICAgICBpZiB5ZWFyID4gMToKKyAgICAgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuLTEpCisgICAgICAgICAgICAgICAgZDIgPSBzZWxmLnRoZWNsYXNzKHllYXItMSwgMTIsIDMxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi50b29yZGluYWwoKSwgbi0xKQorCisgICAgICAgICMgVGVzdCBldmVyeSBkYXkgaW4gYSBsZWFwLXllYXIgYW5kIGEgbm9uLWxlYXAgeWVhci4KKyAgICAgICAgZGltID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdCisgICAgICAgIGZvciB5ZWFyLCBpc2xlYXAgaW4gKDIwMDAsIFRydWUpLCAoMjAwMiwgRmFsc2UpOgorICAgICAgICAgICAgbiA9IHNlbGYudGhlY2xhc3MoeWVhciwgMSwgMSkudG9vcmRpbmFsKCkKKyAgICAgICAgICAgIGZvciBtb250aCwgbWF4ZGF5IGluIHppcChyYW5nZSgxLCAxMyksIGRpbSk6CisgICAgICAgICAgICAgICAgaWYgbW9udGggPT0gMiBhbmQgaXNsZWFwOgorICAgICAgICAgICAgICAgICAgICBtYXhkYXkgKz0gMQorICAgICAgICAgICAgICAgIGZvciBkYXkgaW4gcmFuZ2UoMSwgbWF4ZGF5KzEpOgorICAgICAgICAgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcyh5ZWFyLCBtb250aCwgZGF5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudG9vcmRpbmFsKCksIG4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuKSkKKyAgICAgICAgICAgICAgICAgICAgbiArPSAxCisKKyAgICBkZWYgdGVzdF9leHRyZW1lX29yZGluYWxzKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50aGVjbGFzcy5taW4KKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoYS55ZWFyLCBhLm1vbnRoLCBhLmRheSkgICMgZ2V0IHJpZCBvZiB0aW1lIHBhcnRzCisgICAgICAgIGFvcmQgPSBhLnRvb3JkaW5hbCgpCisgICAgICAgIGIgPSBhLmZyb21vcmRpbmFsKGFvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGEuZnJvbW9yZGluYWwoYW9yZCAtIDEpKQorCisgICAgICAgIGIgPSBhICsgdGltZWRlbHRhKGRheXM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnRvb3JkaW5hbCgpLCBhb3JkICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKGFvcmQgKyAxKSkKKworICAgICAgICBhID0gc2VsZi50aGVjbGFzcy5tYXgKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoYS55ZWFyLCBhLm1vbnRoLCBhLmRheSkgICMgZ2V0IHJpZCBvZiB0aW1lIHBhcnRzCisgICAgICAgIGFvcmQgPSBhLnRvb3JkaW5hbCgpCisgICAgICAgIGIgPSBhLmZyb21vcmRpbmFsKGFvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGEuZnJvbW9yZGluYWwoYW9yZCArIDEpKQorCisgICAgICAgIGIgPSBhIC0gdGltZWRlbHRhKGRheXM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnRvb3JkaW5hbCgpLCBhb3JkIC0gMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKGFvcmQgLSAxKSkKKworICAgIGRlZiB0ZXN0X2JhZF9jb25zdHJ1Y3Rvcl9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgYmFkIHllYXJzCisgICAgICAgIHNlbGYudGhlY2xhc3MoTUlOWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIE1JTllFQVItMSwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUFYWUVBUisxLCAxLCAxKQorICAgICAgICAjIGJhZCBtb250aHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAxKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAxKSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEzLCAxKQorICAgICAgICAjIGJhZCBkYXlzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDA0LCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDI0MDAsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDIsIDMwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAxLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjEwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDE5MDAsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMikKKworICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAzMSkKKyAgICAgICAgIyBzYW1lIHRoaW5nCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAzMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDEsICAxLCAgMSkKKyAgICAgICAgIyBzYW1lIHRoaW5nCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIwMDEsICAxLCAgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgZGVmIHRlc3RfY29tcHV0YXRpb25zKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAyLCAxLCAzMSkKKyAgICAgICAgYiA9IHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMzEpCisgICAgICAgIGMgPSBzZWxmLnRoZWNsYXNzKDIwMDEsMiwxKQorCisgICAgICAgIGRpZmYgPSBhLWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLmRheXMsIDQ2KjM2NSArIGxlbihyYW5nZSgxOTU2LCAyMDAyLCA0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5zZWNvbmRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYubWljcm9zZWNvbmRzLCAwKQorCisgICAgICAgIGRheSA9IHRpbWVkZWx0YSgxKQorICAgICAgICB3ZWVrID0gdGltZWRlbHRhKDcpCisgICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGRheSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXkgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLWRheSArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMiwgMjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDMsIDMsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDEsIDMsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgd2VlaykgLSBhLCB3ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgZGF5KSAtIGEsIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIHdlZWspIC0gYSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBkYXkpIC0gYSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyB3ZWVrKSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgZGF5KSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSB3ZWVrKSwgd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBkYXkpLCBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYyAtIChjIC0gZGF5KSwgZGF5KQorCisgICAgICAgICMgQWRkL3N1YiBpbnRzIG9yIGZsb2F0cyBzaG91bGQgYmUgaWxsZWdhbAorICAgICAgICBmb3IgaSBpbiAxLCAxLjA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEtaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpK2EpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogaS1hKQorCisgICAgICAgICMgZGVsdGEgLSBkYXRlIGlzIHNlbnNlbGVzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAtIGEpCisgICAgICAgICMgbWl4aW5nIGRhdGUgYW5kIChkZWx0YSBvciBkYXRlKSB2aWEgKiBvciAvLyBpcyBzZW5zZWxlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAqIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICogZGF5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC8vIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBhKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyBhKQorICAgICAgICAjIGRhdGUgKyBkYXRlIGlzIHNlbnNlbGVzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSArIGEpCisKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgdGlueSA9IHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbgorCisgICAgICAgIGZvciBkZWx0YSBpbiBbdGlueSwgdGltZWRlbHRhKDEpLCB0aW1lZGVsdGEoMildOgorICAgICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm1pbiArIGRlbHRhCisgICAgICAgICAgICBkdCAtPSBkZWx0YSAgIyBubyBwcm9ibGVtCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkdC5fX3N1Yl9fLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fYWRkX18sIC1kZWx0YSkKKworICAgICAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm1heCAtIGRlbHRhCisgICAgICAgICAgICBkdCArPSBkZWx0YSAgIyBubyBwcm9ibGVtCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBkdC5fX2FkZF9fLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fc3ViX18sIC1kZWx0YSkKKworICAgIGRlZiB0ZXN0X2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgIyBUcnkgYW4gYXJiaXRyYXJ5IGZpeGVkIHZhbHVlLgorICAgICAgICB5ZWFyLCBtb250aCwgZGF5ID0gMTk5OSwgOSwgMTkKKyAgICAgICAgdHMgPSB0aW1lLm1rdGltZSgoeWVhciwgbW9udGgsIGRheSwgMCwgMCwgMCwgMCwgMCwgLTEpKQorICAgICAgICBkID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQueWVhciwgeWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1vbnRoLCBtb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmRheSwgZGF5KQorCisgICAgZGVmIHRlc3RfaW5zYW5lX2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLAorICAgICAgICAjIGFuZCB0aGF0IHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlcmUuICBUaGlzIHRlc3Qgc2hvdWxkCisgICAgICAgICMgZXhlbXB0IHN1Y2ggcGxhdGZvcm1zIChwcm92aWRlZCB0aGV5IHJldHVybiByZWFzb25hYmxlCisgICAgICAgICMgcmVzdWx0cyEpLgorICAgICAgICBmb3IgaW5zYW5lIGluIC0xZTIwMCwgMWUyMDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNhbmUpCisKKyAgICBkZWYgdGVzdF90b2RheShzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAjIFdlIGNsYWltIHRoYXQgdG9kYXkoKSBpcyBsaWtlIGZyb210aW1lc3RhbXAodGltZS50aW1lKCkpLCBzbworICAgICAgICAjIHByb3ZlIGl0LgorICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICB0b2RheSA9IHNlbGYudGhlY2xhc3MudG9kYXkoKQorICAgICAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgdG9kYXlhZ2FpbiA9IHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCh0cykKKyAgICAgICAgICAgIGlmIHRvZGF5ID09IHRvZGF5YWdhaW46CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICMgVGhlcmUgYXJlIHNldmVyYWwgbGVnaXQgcmVhc29ucyB0aGF0IGNvdWxkIGZhaWw6CisgICAgICAgICAgICAjIDEuIEl0IHJlY2VudGx5IGJlY2FtZSBtaWRuaWdodCwgYmV0d2VlbiB0aGUgdG9kYXkoKSBhbmQgdGhlCisgICAgICAgICAgICAjICAgIHRpbWUoKSBjYWxscy4KKyAgICAgICAgICAgICMgMi4gVGhlIHBsYXRmb3JtIHRpbWUoKSBoYXMgc3VjaCBmaW5lIHJlc29sdXRpb24gdGhhdCB3ZSdsbAorICAgICAgICAgICAgIyAgICBuZXZlciBnZXQgdGhlIHNhbWUgdmFsdWUgdHdpY2UuCisgICAgICAgICAgICAjIDMuIFRoZSBwbGF0Zm9ybSB0aW1lKCkgaGFzIHBvb3IgcmVzb2x1dGlvbiwgYW5kIHdlIGp1c3QKKyAgICAgICAgICAgICMgICAgaGFwcGVuZWQgdG8gY2FsbCB0b2RheSgpIHJpZ2h0IGJlZm9yZSBhIHJlc29sdXRpb24gcXVhbnR1bQorICAgICAgICAgICAgIyAgICBib3VuZGFyeS4KKyAgICAgICAgICAgICMgNC4gVGhlIHN5c3RlbSBjbG9jayBnb3QgZmlkZGxlZCBiZXR3ZWVuIGNhbGxzLgorICAgICAgICAgICAgIyBJbiBhbnkgY2FzZSwgd2FpdCBhIGxpdHRsZSB3aGlsZSBhbmQgdHJ5IGFnYWluLgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCisKKyAgICAgICAgIyBJdCB3b3JrZWQgb3IgaXQgZGlkbid0LiAgSWYgaXQgZGlkbid0LCBhc3N1bWUgaXQncyByZWFzb24gIzIsIGFuZAorICAgICAgICAjIGxldCB0aGUgdGVzdCBwYXNzIGlmIHRoZXkncmUgd2l0aGluIGhhbGYgYSBzZWNvbmQgb2YgZWFjaCBvdGhlci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRvZGF5ID09IHRvZGF5YWdhaW4gb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIGFicyh0b2RheWFnYWluIC0gdG9kYXkpIDwgdGltZWRlbHRhKHNlY29uZHM9MC41KSkKKworICAgIGRlZiB0ZXN0X3dlZWtkYXkoc2VsZik6CisgICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgorICAgICAgICAgICAgIyBNYXJjaCA0LCAyMDAyIGlzIGEgTW9uZGF5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCtpKS53ZWVrZGF5KCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCtpKS5pc293ZWVrZGF5KCksIGkrMSkKKyAgICAgICAgICAgICMgSmFudWFyeSAyLCAxOTU2IGlzIGEgTW9uZGF5CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMitpKS53ZWVrZGF5KCksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMitpKS5pc293ZWVrZGF5KCksIGkrMSkKKworICAgIGRlZiB0ZXN0X2lzb2NhbGVuZGFyKHNlbGYpOgorICAgICAgICAjIENoZWNrIGV4YW1wbGVzIGZyb20KKyAgICAgICAgIyBodHRwOi8vd3d3LnBoeXMudXUubmwvfnZnZW50L2NhbGVuZGFyL2lzb2NhbGVuZGFyLmh0bQorICAgICAgICBmb3IgaSBpbiByYW5nZSg3KToKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDEyLCAyMitpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDAzLCA1MiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDMsIDEyLCAyOSkgKyB0aW1lZGVsdGEoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwNCwgMSwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEsIDUraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwNCwgMiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDksIDEyLCAyMStpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA5LCA1MiwgaSsxKSkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDksIDEyLCAyOCkgKyB0aW1lZGVsdGEoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAwOSwgNTMsIGkrMSkpCisgICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDEwLCAxLCA0K2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMTAsIDEsIGkrMSkpCisKKyAgICBkZWYgdGVzdF9pc29fbG9uZ195ZWFycyhzZWxmKToKKyAgICAgICAgIyBDYWxjdWxhdGUgbG9uZyBJU08geWVhcnMgYW5kIGNvbXBhcmUgdG8gdGFibGUgZnJvbQorICAgICAgICAjIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtCisgICAgICAgIElTT19MT05HX1lFQVJTX1RBQkxFID0gIiIiCisgICAgICAgICAgICAgIDQgICAzMiAgIDYwICAgODgKKyAgICAgICAgICAgICAgOSAgIDM3ICAgNjUgICA5MworICAgICAgICAgICAgIDE1ICAgNDMgICA3MSAgIDk5CisgICAgICAgICAgICAgMjAgICA0OCAgIDc2CisgICAgICAgICAgICAgMjYgICA1NCAgIDgyCisKKyAgICAgICAgICAgIDEwNSAgMTMzICAxNjEgIDE4OQorICAgICAgICAgICAgMTExICAxMzkgIDE2NyAgMTk1CisgICAgICAgICAgICAxMTYgIDE0NCAgMTcyCisgICAgICAgICAgICAxMjIgIDE1MCAgMTc4CisgICAgICAgICAgICAxMjggIDE1NiAgMTg0CisKKyAgICAgICAgICAgIDIwMSAgMjI5ICAyNTcgIDI4NQorICAgICAgICAgICAgMjA3ICAyMzUgIDI2MyAgMjkxCisgICAgICAgICAgICAyMTIgIDI0MCAgMjY4ICAyOTYKKyAgICAgICAgICAgIDIxOCAgMjQ2ICAyNzQKKyAgICAgICAgICAgIDIyNCAgMjUyICAyODAKKworICAgICAgICAgICAgMzAzICAzMzEgIDM1OSAgMzg3CisgICAgICAgICAgICAzMDggIDMzNiAgMzY0ICAzOTIKKyAgICAgICAgICAgIDMxNCAgMzQyICAzNzAgIDM5OAorICAgICAgICAgICAgMzIwICAzNDggIDM3NgorICAgICAgICAgICAgMzI1ICAzNTMgIDM4MQorICAgICAgICAiIiIKKyAgICAgICAgaXNvX2xvbmdfeWVhcnMgPSBzb3J0ZWQobWFwKGludCwgSVNPX0xPTkdfWUVBUlNfVEFCTEUuc3BsaXQoKSkpCisgICAgICAgIEwgPSBbXQorICAgICAgICBmb3IgaSBpbiByYW5nZSg0MDApOgorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMCtpLCAxMiwgMzEpCisgICAgICAgICAgICBkMSA9IHNlbGYudGhlY2xhc3MoMTYwMCtpLCAxMiwgMzEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKVsxOl0sIGQxLmlzb2NhbGVuZGFyKClbMTpdKQorICAgICAgICAgICAgaWYgZC5pc29jYWxlbmRhcigpWzFdID09IDUzOgorICAgICAgICAgICAgICAgIEwuYXBwZW5kKGkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCwgaXNvX2xvbmdfeWVhcnMpCisKKyAgICBkZWYgdGVzdF9pc29mb3JtYXQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjAwMDItMDMtMDIiKQorCisgICAgZGVmIHRlc3RfY3RpbWUoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5jdGltZSgpLCAiU2F0IE1hciAgMiAwMDowMDowMCAyMDAyIikKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDA1LCAzLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIm06JW0gZDolZCB5OiV5IiksICJtOjAzIGQ6MDIgeTowNSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiIiksICIiKSAjIFNGIGJ1ZyAjNzYxMzM3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgneCcqMTAwMCksICd4JyoxMDAwKSAjIFNGIGJ1ZyAjMTU1Njc4NAorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSkgIyBuZWVkcyBhbiBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lLCAib25lIiwgInR3byIpICMgdG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsIDQyKSAjIGFyZyB3cm9uZyB0eXBlCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgdW5pY29kZSBpbnB1dCBpcyBhbGxvd2VkIChpc3N1ZSAyNzgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIiVtIiksICIwMyIpCisKKyAgICAgICAgIyBBIG5haXZlIG9iamVjdCByZXBsYWNlcyAleiBhbmQgJVogdy8gZW1wdHkgc3RyaW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCInJXonICclWiciKSwgIicnICcnIikKKworICAgICAgICAjbWFrZSBzdXJlIHRoYXQgaW52YWxpZCBmb3JtYXQgc3BlY2lmaWVycyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkKKyAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlZSIpCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnN0cmZ0aW1lLCAiJSIpCisgICAgICAgICNzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnN0cmZ0aW1lLCAiJSMiKQorCisgICAgICAgICNvaCB3ZWxsLCBzb21lIHN5c3RlbXMganVzdCBpZ25vcmUgdGhvc2UgaW52YWxpZCBvbmVzLgorICAgICAgICAjYXQgbGVhc3QsIGV4Y2VyY2lzZSB0aGVtIHRvIG1ha2Ugc3VyZSB0aGF0IG5vIGNyYXNoZXMKKyAgICAgICAgI2FyZSBnZW5lcmF0ZWQKKyAgICAgICAgZm9yIGYgaW4gWyIlZSIsICIlIiwgIiUjIl06CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdC5zdHJmdGltZShmKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICNjaGVjayB0aGF0IHRoaXMgc3RhbmRhcmQgZXh0ZW5zaW9uIHdvcmtzCisgICAgICAgIHQuc3RyZnRpbWUoIiVmIikKKworCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwNywgOSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuX19mb3JtYXRfXygnJyksIHN0cihkdCkpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIF9fc3RyX18oKSBnZXRzIGNhbGxlZAorICAgICAgICBjbGFzcyBBKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICdBJworICAgICAgICBhID0gQSgyMDA3LCA5LCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQicKKyAgICAgICAgYiA9IEIoMjAwNywgOSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKKworICAgICAgICBmb3IgZm10IGluIFsibTolbSBkOiVkIHk6JXkiLAorICAgICAgICAgICAgICAgICAgICAibTolbSBkOiVkIHk6JXkgSDolSCBNOiVNIFM6JVMiLAorICAgICAgICAgICAgICAgICAgICAiJXogJVoiLAorICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXyhmbXQpLCBkdC5zdHJmdGltZShmbXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oZm10KSwgJ0InKQorCisgICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgorICAgICAgICAjIFhYWDogU2hvdWxkIG1pbiBhbmQgbWF4IHJlc3BlY3Qgc3ViY2xhc3Npbmc/CisgICAgICAgIGlmIGlzc3ViY2xhc3Moc2VsZi50aGVjbGFzcywgZGF0ZXRpbWUpOgorICAgICAgICAgICAgZXhwZWN0ZWRfY2xhc3MgPSBkYXRldGltZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhwZWN0ZWRfY2xhc3MgPSBkYXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1pbiwgZXhwZWN0ZWRfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1heCwgZXhwZWN0ZWRfY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCisKKyAgICBkZWYgdGVzdF9leHRyZW1lX3RpbWVkZWx0YShzZWxmKToKKyAgICAgICAgYmlnID0gc2VsZi50aGVjbGFzcy5tYXggLSBzZWxmLnRoZWNsYXNzLm1pbgorICAgICAgICAjIDM2NTIwNTggZGF5cywgMjMgaG91cnMsIDU5IG1pbnV0ZXMsIDU5IHNlY29uZHMsIDk5OTk5OSBtaWNyb3NlY29uZHMKKyAgICAgICAgbiA9IChiaWcuZGF5cyoyNCozNjAwICsgYmlnLnNlY29uZHMpKjEwMDAwMDAgKyBiaWcubWljcm9zZWNvbmRzCisgICAgICAgICMgbiA9PSAzMTU1Mzc4OTc1OTk5OTk5OTkgfj0gMioqNTguMTMKKyAgICAgICAganVzdGFzYmlnID0gdGltZWRlbHRhKDAsIDAsIG4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmlnLCBqdXN0YXNiaWcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcy5taW4gKyBiaWcsIHNlbGYudGhlY2xhc3MubWF4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MubWF4IC0gYmlnLCBzZWxmLnRoZWNsYXNzLm1pbikKKworICAgIGRlZiB0ZXN0X3RpbWV0dXBsZShzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICAjIEphbnVhcnkgMiwgMTk1NiBpcyBhIE1vbmRheSAoMCkKKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDEsIDIraSkKKyAgICAgICAgICAgIHQgPSBkLnRpbWV0dXBsZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxOTU2LCAxLCAyK2ksIDAsIDAsIDAsIGksIDIraSwgLTEpKQorICAgICAgICAgICAgIyBGZWJydWFyeSAxLCAxOTU2IGlzIGEgV2VkbmVzZGF5ICgyKQorICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMTk1NiwgMiwgMStpKQorICAgICAgICAgICAgdCA9IGQudGltZXR1cGxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE5NTYsIDIsIDEraSwgMCwgMCwgMCwgKDIraSklNywgMzIraSwgLTEpKQorICAgICAgICAgICAgIyBNYXJjaCAxLCAxOTU2IGlzIGEgVGh1cnNkYXkgKDMpLCBhbmQgaXMgdGhlIDMxKzI5KzEgPSA2MXN0IGRheQorICAgICAgICAgICAgIyBvZiB0aGUgeWVhci4KKyAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDMsIDEraSkKKyAgICAgICAgICAgIHQgPSBkLnRpbWV0dXBsZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxOTU2LCAzLCAxK2ksIDAsIDAsIDAsICgzK2kpJTcsIDYxK2ksIC0xKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZWFyLCAxOTU2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21vbiwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9tZGF5LCAxK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faG91ciwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9taW4sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fc2VjLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3dkYXksICgzK2kpJTcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWRheSwgNjEraSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9pc2RzdCwgLTEpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYXJncyA9IDYsIDcsIDIzCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMiwgMywgNCkKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisKKyAgICAgICAgZm9yIGFyZ3MgaW4gKDMsIDMsIDMpLCAoMiwgNCwgNCksICgyLCAzLCA1KToKKyAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqYXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQorCisgICAgICAgIGZvciBiYWRhcmcgaW4gT1RIRVJTVFVGRjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgPT0gYmFkYXJnLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEgIT0gYmFkYXJnLCBUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgPT0gdDEsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWRhcmcgIT0gdDEsIFRydWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA8IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+PSBiYWRhcmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDw9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+PSB0MSkKKworICAgIGRlZiB0ZXN0X21peGVkX2NvbXBhcmUoc2VsZik6CisgICAgICAgIG91ciA9IHNlbGYudGhlY2xhc3MoMjAwMCwgNCwgNSkKKworICAgICAgICAjIE91ciBjbGFzcyBjYW4gYmUgY29tcGFyZWQgZm9yIGVxdWFsaXR5IHRvIG90aGVyIGNsYXNzZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgPT0gMSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSA9PSBvdXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91ciAhPSAxLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgIT0gb3VyLCBUcnVlKQorCisgICAgICAgICMgQnV0IHRoZSBvcmRlcmluZyBpcyB1bmRlZmluZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG91ciA8IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAxIDwgb3VyKQorCisgICAgICAgICMgUmVwZWF0IHRob3NlIHRlc3RzIHdpdGggYSBkaWZmZXJlbnQgY2xhc3MKKworICAgICAgICBjbGFzcyBTb21lQ2xhc3M6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGhlaXIgPSBTb21lQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91ciA9PSB0aGVpciwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlaXIgPT0gb3VyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgIT0gdGhlaXIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlaXIgIT0gb3VyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogb3VyIDwgdGhlaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0aGVpciA8IG91cikKKworICAgICAgICAjIEhvd2V2ZXIsIGlmIHRoZSBvdGhlciBjbGFzcyBleHBsaWNpdGx5IGRlZmluZXMgb3JkZXJpbmcKKyAgICAgICAgIyByZWxhdGl2ZSB0byBvdXIgY2xhc3MsIGl0IGlzIGFsbG93ZWQgdG8gZG8gc28KKworICAgICAgICBjbGFzcyBMYXJnZXJUaGFuQW55dGhpbmc6CisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKG90aGVyLCBMYXJnZXJUaGFuQW55dGhpbmcpCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgTGFyZ2VyVGhhbkFueXRoaW5nKQorICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKG90aGVyLCBMYXJnZXJUaGFuQW55dGhpbmcpCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2Uob3RoZXIsIExhcmdlclRoYW5Bbnl0aGluZykKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdGhlaXIgPSBMYXJnZXJUaGFuQW55dGhpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91ciA9PSB0aGVpciwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlaXIgPT0gb3VyLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgIT0gdGhlaXIsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlaXIgIT0gb3VyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91ciA8IHRoZWlyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWlyIDwgb3VyLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CisgICAgICAgICMgQWxsIGRhdGVzIGFyZSBjb25zaWRlcmVkIHRydWUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1pbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4KQorCisgICAgZGVmIHRlc3Rfc3RyZnRpbWVfb3V0X29mX3JhbmdlKHNlbGYpOgorICAgICAgICAjIEZvciBuYXN0eSB0ZWNobmljYWwgcmVhc29ucywgd2UgY2FuJ3QgaGFuZGxlIHllYXJzIGJlZm9yZSAxMDAwLgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzKDEwMDAsIDEsIDEpLnN0cmZ0aW1lKCIlWSIpLCAiMTAwMCIpCisgICAgICAgIGZvciB5IGluIDEsIDQ5LCA1MSwgOTksIDEwMCwgOTk5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKHksIDEsIDEpLnN0cmZ0aW1lLCAiJVkiKQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBhcmdzID0gWzEsIDIsIDNdCisgICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJ5ZWFyIiwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibW9udGgiLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXkiLCA0KSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgT3V0IG9mIGJvdW5kcy4KKyAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCB5ZWFyPTIwMDEpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRlKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYueWVhciArIHNlbGYubW9udGgKKworICAgICAgICBhcmdzID0gMjAwMywgNCwgMTQKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS50b29yZGluYWwoKSwgZHQyLnRvb3JkaW5hbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLnllYXIgKyBkdDEubW9udGggLSA3KQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3NfZGF0ZShzZWxmKToKKworICAgICAgICBhcmdzID0gNiwgNywgMjMKKyAgICAgICAgb3JpZyA9IFN1YmNsYXNzRGF0ZSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfYmFja2Rvb3JfcmVzaXN0YW5jZShzZWxmKToKKyAgICAgICAgIyBGb3IgZmFzdCB1bnBpY2tsaW5nLCB0aGUgY29uc3RydWN0b3IgYWNjZXB0cyBhIHBpY2tsZSBieXRlIHN0cmluZy4KKyAgICAgICAgIyBUaGlzIGlzIGEgbG93LW92ZXJoZWFkIGJhY2tkb29yLiAgQSB1c2VyIGNhbiAoYnkgaW50ZW50IG9yCisgICAgICAgICMgbWlzdGFrZSkgcGFzcyBhIHN0cmluZyBkaXJlY3RseSwgd2hpY2ggKGlmIGl0J3MgdGhlIHJpZ2h0IGxlbmd0aCkKKyAgICAgICAgIyB3aWxsIGdldCB0cmVhdGVkIGxpa2UgYSBwaWNrbGUsIGFuZCBieXBhc3MgdGhlIG5vcm1hbCBzYW5pdHkKKyAgICAgICAgIyBjaGVja3MgaW4gdGhlIGNvbnN0cnVjdG9yLiAgVGhpcyBjYW4gY3JlYXRlIGluc2FuZSBvYmplY3RzLgorICAgICAgICAjIFRoZSBjb25zdHJ1Y3RvciBkb2Vzbid0IHdhbnQgdG8gYnVybiB0aGUgdGltZSB0byB2YWxpZGF0ZSBhbGwKKyAgICAgICAgIyBmaWVsZHMsIGJ1dCBkb2VzIGNoZWNrIHRoZSBtb250aCBmaWVsZC4gIFRoaXMgc3RvcHMsIGUuZy4sCisgICAgICAgICMgZGF0ZXRpbWUuZGF0ZXRpbWUoJzE5OTUtMDMtMjUnKSBmcm9tIHlpZWxkaW5nIGFuIGluc2FuZSBvYmplY3QuCisgICAgICAgIGJhc2UgPSBiJzE5OTUtMDMtMjUnCisgICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKHNlbGYudGhlY2xhc3MsIGRhdGV0aW1lKToKKyAgICAgICAgICAgIGJhc2UgPSBiYXNlWzo0XQorICAgICAgICBmb3IgbW9udGhfYnl0ZSBpbiBiJzknLCBiJ1wwJywgYidccicsIGInXHhmZic6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudGhlY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VbOjJdICsgbW9udGhfYnl0ZSArIGJhc2VbMzpdKQorICAgICAgICAjIEdvb2QgYnl0ZXMsIGJ1dCBiYWQgdHppbmZvOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudGhlY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKFsxXSAqIGxlbihiYXNlKSksICdFU1QnKQorCisgICAgICAgIGZvciBvcmRfYnl0ZSBpbiByYW5nZSgxLCAxMyk6CisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAgYmVjYXVzZSBvZiB0aGUgbW9udGggYnl0ZSBhbG9uZS4gIElmCisgICAgICAgICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIHRvIGRvIG1vcmUtY2FyZWZ1bCBjaGVja2luZywgaXQgbWF5CisgICAgICAgICAgICAjIGJsb3cgdXAgYmVjYXVzZSBvdGhlciBmaWVsZHMgYXJlIGluc2FuZS4KKyAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoYmFzZVs6Ml0gKyBieXRlcyhbb3JkX2J5dGVdKSArIGJhc2VbMzpdKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBkYXRldGltZSB0ZXN0cworCitjbGFzcyBTdWJjbGFzc0RhdGV0aW1lKGRhdGV0aW1lKToKKyAgICBzdWJfdmFyID0gMQorCitjbGFzcyBUZXN0RGF0ZVRpbWUoVGVzdERhdGUpOgorCisgICAgdGhlY2xhc3MgPSBkYXRldGltZQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDEyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDIwMDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmhvdXIsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pbnV0ZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5zZWNvbmQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWljcm9zZWNvbmQsIDApCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzX25vbnplcm8oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCBhdHRyaWJ1dGVzIGFyZSBub24temVybyBzbyBidWdzIGluCisgICAgICAgICMgYml0LXNoaWZ0aW5nIGFjY2VzcyBzaG93IHVwLgorICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTIsIDU5LCA1OSwgODAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC55ZWFyLCAyMDAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1vbnRoLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRheSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5ob3VyLCAxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taW51dGUsIDU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnNlY29uZCwgNTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWljcm9zZWNvbmQsIDgwMDApCisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6CisgICAgICAgIGZvciBkdCBpbiAoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0LCA1LCA2LCA3KSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLm5vdygpKToKKyAgICAgICAgICAgICMgVmVyaWZ5IGR0IC0+IHN0cmluZyAtPiBkYXRldGltZSBpZGVudGl0eS4KKyAgICAgICAgICAgIHMgPSByZXByKGR0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCisgICAgICAgICAgICBzID0gc1s5Ol0KKyAgICAgICAgICAgIGR0MiA9IGV2YWwocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKKworICAgICAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgorICAgICAgICAgICAgZHQyID0gc2VsZi50aGVjbGFzcyhkdC55ZWFyLCBkdC5tb250aCwgZHQuZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdC5ob3VyLCBkdC5taW51dGUsIGR0LnNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQubWljcm9zZWNvbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCisKKyAgICBkZWYgdGVzdF9pc29mb3JtYXQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDIsIDQsIDUsIDEsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAgICAiMDAwMi0wMy0wMlQwNDowNTowMS4wMDAxMjMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCdUJyksICIwMDAyLTAzLTAyVDA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJyAnKSwgIjAwMDItMDMtMDIgMDQ6MDU6MDEuMDAwMTIzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnXHgwMCcpLCAiMDAwMi0wMy0wMlx4MDAwNDowNTowMS4wMDAxMjMiKQorICAgICAgICAjIHN0ciBpcyBJU08gZm9ybWF0IHdpdGggdGhlIHNlcGFyYXRvciBmb3JjZWQgdG8gYSBibGFuay4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICIwMDAyLTAzLTAyIDA0OjA1OjAxLjAwMDEyMyIpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMiwgMywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAgICAiMDAwMi0wMy0wMlQwMDowMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJ1QnKSwgIjAwMDItMDMtMDJUMDA6MDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCcgJyksICIwMDAyLTAzLTAyIDAwOjAwOjAwIikKKyAgICAgICAgIyBzdHIgaXMgSVNPIGZvcm1hdCB3aXRoIHRoZSBzZXBhcmF0b3IgZm9yY2VkIHRvIGEgYmxhbmsuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAiMDAwMi0wMy0wMiAwMDowMDowMCIpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDA3LCA5LCAxMCwgNCwgNSwgMSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Ll9fZm9ybWF0X18oJycpLCBzdHIoZHQpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBfX3N0cl9fKCkgZ2V0cyBjYWxsZWQKKyAgICAgICAgY2xhc3MgQShzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQScKKyAgICAgICAgYSA9IEEoMjAwNywgOSwgMTAsIDQsIDUsIDEsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQicKKyAgICAgICAgYiA9IEIoMjAwNywgOSwgMTAsIDQsIDUsIDEsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIoZHQpKQorCisgICAgICAgIGZvciBmbXQgaW4gWyJtOiVtIGQ6JWQgeToleSIsCisgICAgICAgICAgICAgICAgICAgICJtOiVtIGQ6JWQgeToleSBIOiVIIE06JU0gUzolUyIsCisgICAgICAgICAgICAgICAgICAgICIleiAlWiIsCisgICAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Ll9fZm9ybWF0X18oZm10KSwgZHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19mb3JtYXRfXyhmbXQpLCAnQicpCisKKyAgICBkZWYgdGVzdF9tb3JlX2N0aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3QgZmllbGRzIHRoYXQgVGVzdERhdGUgZG9lc24ndCB0b3VjaC4KKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxOCwgMywgNSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuY3RpbWUoKSwgIlNhdCBNYXIgIDIgMTg6MDM6MDUgMjAwMiIpCisgICAgICAgICMgT29wcyEgIFRoZSBuZXh0IGxpbmUgZmFpbHMgb24gV2luMksgdW5kZXIgTVNWQyA2LCBzbyBpdCdzIGNvbW1lbnRlZAorICAgICAgICAjIG91dC4gIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgdC5jdGltZSgpIHByb2R1Y2VzICIgMiIgZm9yIHRoZSBkYXksCisgICAgICAgICMgYnV0IHBsYXRmb3JtIGN0aW1lKCkgcHJvZHVjZXMgIjAyIiBmb3IgdGhlIGRheS4gIEFjY29yZGluZyB0bworICAgICAgICAjIEM5OSwgdC5jdGltZSgpIGlzIGNvcnJlY3QgaGVyZS4KKyAgICAgICAgIyBzZWxmLmFzc2VydEVxdWFsKHQuY3RpbWUoKSwgdGltZS5jdGltZSh0aW1lLm1rdGltZSh0LnRpbWV0dXBsZSgpKSkpCisKKyAgICAgICAgIyBTbyB0ZXN0IGEgY2FzZSB3aGVyZSB0aGF0IGRpZmZlcmVuY2UgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIyLCAxOCwgMywgNSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuY3RpbWUoKSwgdGltZS5jdGltZSh0aW1lLm1rdGltZSh0LnRpbWV0dXBsZSgpKSkpCisKKyAgICBkZWYgdGVzdF90el9pbmRlcGVuZGVudF9jb21wYXJpbmcoc2VsZik6CisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgOSwgMCwgMCkKKyAgICAgICAgZHQyID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAxMCwgMCwgMCkKKyAgICAgICAgZHQzID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCA5LCAwLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MSwgZHQzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQyID4gZHQzKQorCisgICAgICAgICMgTWFrZSBzdXJlIGNvbXBhcmlzb24gZG9lc24ndCBmb3JnZXQgbWljcm9zZWNvbmRzLCBhbmQgaXNuJ3QgZG9uZQorICAgICAgICAjIHZpYSBjb21wYXJpbmcgYSBmbG9hdCB0aW1lc3RhbXAgKGFuIElFRUUgZG91YmxlIGRvZXNuJ3QgaGF2ZSBlbm91Z2gKKyAgICAgICAgIyBwcmVjaXNpb24gdG8gc3BhbiBtaWNyb3NlY29uZCByZXNvbHV0aW9uIGFjcm9zcyB5ZWFycyAxIHRocnUgOTk5OSwKKyAgICAgICAgIyBzbyBjb21wYXJpbmcgdmlhIHRpbWVzdGFtcCBuZWNlc3NhcmlseSBjYWxscyBzb21lIGRpc3RpbmN0IHZhbHVlcworICAgICAgICAjIGVxdWFsKS4KKyAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OCkKKyAgICAgICAgdXMgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpCisgICAgICAgIGR0MiA9IGR0MSArIHVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyIC0gZHQxLCB1cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0MSA8IGR0MikKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX3dpdGhfYmFkX3R6bmFtZV9yZXBsYWNlKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBvayBpZiB0emluZm8udHpuYW1lKCkucmVwbGFjZSgpIHJldHVybnMgYSBub24tc3RyaW5nCisgICAgICAgIGNsYXNzIE15VHpJbmZvKEZpeGVkT2Zmc2V0KToKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIGNsYXNzIE15U3RyKHN0cik6CisgICAgICAgICAgICAgICAgICAgIGRlZiByZXBsYWNlKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIE15U3RyKCduYW1lJykKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwNSwgMywgMiwgMCwgMCwgMCwgMCwgTXlUekluZm8oMywgJ25hbWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lLCAnJVonKQorCisgICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBiYWQgeWVhcnMKKyAgICAgICAgc2VsZi50aGVjbGFzcyhNSU5ZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUlOWUVBUi0xLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCBNQVhZRUFSKzEsIDEsIDEpCisgICAgICAgICMgYmFkIG1vbnRocworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDEpICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDEpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMTMsIDEpCisgICAgICAgICMgYmFkIGRheXMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDQsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjQwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMiwgMzApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDEsIDIsIDI5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMTAwLCAyLCAyOSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMTkwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMyKQorICAgICAgICAjIGJhZCBob3VycworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMykgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAyNCkKKyAgICAgICAgIyBiYWQgbWludXRlcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAyMywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAyMywgNjApCisgICAgICAgICMgYmFkIHNlY29uZHMKKyAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5LCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDU5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMxLCAyMywgNTksIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIDU5LCA2MCkKKyAgICAgICAgIyBiYWQgbWljcm9zZWNvbmRzCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTksIDApICAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwKQorCisgICAgZGVmIHRlc3RfaGFzaF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxLCAyMywgMzAsIDE3KQorICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMDAwLCAxMiwgMzEsIDIzLCAzMCwgMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAxLCAgMSwgIDEsICAwLCAgNSwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIwMDEsICAxLCAgMSwgIDAsICA1LCAxNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgZGVmIHRlc3RfY29tcHV0YXRpb25zKHNlbGYpOgorICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAyLCAxLCAzMSkKKyAgICAgICAgYiA9IHNlbGYudGhlY2xhc3MoMTk1NiwgMSwgMzEpCisgICAgICAgIGRpZmYgPSBhLWIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLmRheXMsIDQ2KjM2NSArIGxlbihyYW5nZSgxOTU2LCAyMDAyLCA0KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5zZWNvbmRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYubWljcm9zZWNvbmRzLCAwKQorICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxNywgNikKKyAgICAgICAgbWlsbGlzZWMgPSB0aW1lZGVsdGEoMCwgMCwgMTAwMCkKKyAgICAgICAgaG91ciA9IHRpbWVkZWx0YSgwLCAzNjAwKQorICAgICAgICBkYXkgPSB0aW1lZGVsdGEoMSkKKyAgICAgICAgd2VlayA9IHRpbWVkZWx0YSg3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE4LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3VyICsgYSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxOCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIDEwKmhvdXIsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMywgMywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIGhvdXIsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTYsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1ob3VyICsgYSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxNiwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIGhvdXIsIGEgKyAtaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gMjAqaG91ciwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAyMSwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIGRheSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzLCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIGRheSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxLCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIHdlZWssIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgOSwgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDIsIDIzLCAxNywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSArIDUyKndlZWssIHNlbGYudGhlY2xhc3MoMjAwMywgMywgMSwgMTcsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDEsIDMsIDMsIDE3LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIHdlZWspIC0gYSwgd2VlaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIGRheSkgLSBhLCBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyBob3VyKSAtIGEsIGhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyBtaWxsaXNlYykgLSBhLCBtaWxsaXNlYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIHdlZWspIC0gYSwgLXdlZWspCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBkYXkpIC0gYSwgLWRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSAtIGhvdXIpIC0gYSwgLWhvdXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBtaWxsaXNlYykgLSBhLCAtbWlsbGlzZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgd2VlayksIC13ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIGRheSksIC1kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgaG91ciksIC1ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIG1pbGxpc2VjKSwgLW1pbGxpc2VjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSAtIHdlZWspLCB3ZWVrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSAtIGRheSksIGRheSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBob3VyKSwgaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBtaWxsaXNlYyksIG1pbGxpc2VjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAxMCwgMTgsIDYsIDAsIDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoYSArIHdlZWspICsgZGF5KSArIGhvdXIpICsgbWlsbGlzZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtICh3ZWVrICsgZGF5ICsgaG91ciArIG1pbGxpc2VjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDIsIDIsIDIyLCAxNiwgNSwgNTksIDk5OTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtICh3ZWVrICsgZGF5ICsgaG91ciArIG1pbGxpc2VjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKChhIC0gd2VlaykgLSBkYXkpIC0gaG91cikgLSBtaWxsaXNlYykKKyAgICAgICAgIyBBZGQvc3ViIGludHMgb3IgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCisgICAgICAgIGZvciBpIGluIDEsIDEuMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCisKKyAgICAgICAgIyBkZWx0YSAtIGRhdGV0aW1lIGlzIHNlbnNlbGVzcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAtIGEpCisgICAgICAgICMgbWl4aW5nIGRhdGV0aW1lIGFuZCAoZGVsdGEgb3IgZGF0ZXRpbWUpIHZpYSAqIG9yIC8vIGlzIHNlbnNlbGVzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5ICogYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBkYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgLy8gYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8gZGF5KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAqIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGEpCisgICAgICAgICMgZGF0ZXRpbWUgKyBkYXRldGltZSBpcyBzZW5zZWxlc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKyBhKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGFyZ3MgPSA2LCA3LCAyMywgMjAsIDU5LCAxLCA2NCoqMgorICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfbW9yZV9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMywgMiwgNywgMTYsIDQ4LCAzNywgNDQ0MTE2KQorICAgICAgICBzID0gcGlja2xlLmR1bXBzKGEpCisgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnllYXIsIDIwMDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5tb250aCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRheSwgNykKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzX2RhdGV0aW1lKHNlbGYpOgorICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKKyAgICAgICAgb3JpZyA9IFN1YmNsYXNzRGF0ZXRpbWUoKmFyZ3MpCisgICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgorICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQorICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKKworICAgIGRlZiB0ZXN0X21vcmVfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdF9jb21wYXJlKCkgaW5oZXJpdGVkIGZyb20gVGVzdERhdGUgY292ZXJzIHRoZSBlcnJvciBjYXNlcy4KKyAgICAgICAgIyBXZSBqdXN0IHdhbnQgdG8gdGVzdCBsZXhpY29ncmFwaGljIG9yZGVyaW5nIG9uIHRoZSBtZW1iZXJzIGRhdGV0aW1lCisgICAgICAgICMgaGFzIHRoYXQgZGF0ZSBsYWNrcy4KKyAgICAgICAgYXJncyA9IFsyMDAwLCAxMSwgMjksIDIwLCA1OCwgMTYsIDk5OTk5OF0KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKKyAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCisgICAgICAgICAgICBuZXdhcmdzW2ldID0gYXJnc1tpXSArIDEKKyAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqbmV3YXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQorCisKKyAgICAjIEEgaGVscGVyIGZvciB0aW1lc3RhbXAgY29uc3RydWN0b3IgdGVzdHMuCisgICAgZGVmIHZlcmlmeV9maWVsZF9lcXVhbGl0eShzZWxmLCBleHBlY3RlZCwgZ290KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV95ZWFyLCBnb3QueWVhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tb24sIGdvdC5tb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tZGF5LCBnb3QuZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX2hvdXIsIGdvdC5ob3VyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX21pbiwgZ290Lm1pbnV0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9zZWMsIGdvdC5zZWNvbmQpCisKKyAgICBkZWYgdGVzdF9mcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgIHRzID0gdGltZS50aW1lKCkKKyAgICAgICAgZXhwZWN0ZWQgPSB0aW1lLmxvY2FsdGltZSh0cykKKyAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQorICAgICAgICBzZWxmLnZlcmlmeV9maWVsZF9lcXVhbGl0eShleHBlY3RlZCwgZ290KQorCisgICAgZGVmIHRlc3RfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICB0cyA9IHRpbWUudGltZSgpCisgICAgICAgIGV4cGVjdGVkID0gdGltZS5nbXRpbWUodHMpCisgICAgICAgIGdvdCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCh0cykKKyAgICAgICAgc2VsZi52ZXJpZnlfZmllbGRfZXF1YWxpdHkoZXhwZWN0ZWQsIGdvdCkKKworICAgIGRlZiB0ZXN0X21pY3Jvc2Vjb25kX3JvdW5kaW5nKHNlbGYpOgorICAgICAgICAjIFRlc3Qgd2hldGhlciBmcm9tdGltZXN0YW1wICJyb3VuZHMgdXAiIGZsb2F0cyB0aGF0IGFyZSBsZXNzCisgICAgICAgICMgdGhhbiAxLzIgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGFuIGludGVnZXIuCisgICAgICAgIGZvciBmdHMgaW4gW3NlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRzKDAuOTk5OTk5OSksIGZ0cygxKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRzKDAuOTk5OTk5NDkpLm1pY3Jvc2Vjb25kLCA5OTk5OTkpCisKKyAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCisgICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKKyAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKKyAgICAgICAgIyByZXN1bHRzISkuCisgICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKKworICAgIGRlZiB0ZXN0X2luc2FuZV91dGNmcm9tdGltZXN0YW1wKHNlbGYpOgorICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIHBsYXRmb3JtIG1hcHMgdGltZV90IHRvIGRvdWJsZSwKKyAgICAgICAgIyBhbmQgdGhhdCB0aGlzIHRlc3Qgd2lsbCBmYWlsIHRoZXJlLiAgVGhpcyB0ZXN0IHNob3VsZAorICAgICAgICAjIGV4ZW1wdCBzdWNoIHBsYXRmb3JtcyAocHJvdmlkZWQgdGhleSByZXR1cm4gcmVhc29uYWJsZQorICAgICAgICAjIHJlc3VsdHMhKS4KKyAgICAgICAgZm9yIGluc2FuZSBpbiAtMWUyMDAsIDFlMjAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zYW5lKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQorICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgICMgVGhlIHJlc3VsdCBpcyB0ei1kZXBlbmRlbnQ7IGF0IGxlYXN0IHRlc3QgdGhhdCB0aGlzIGRvZXNuJ3QKKyAgICAgICAgIyBmYWlsIChsaWtlIGl0IGRpZCBiZWZvcmUgYnVnIDE2NDY3Mjggd2FzIGZpeGVkKS4KKyAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKC0xLjA1KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3MgZG9lc24ndCBhY2NlcHQgbmVnYXRpdmUgdGltZXN0YW1wcyIpCisgICAgZGVmIHRlc3RfbmVnYXRpdmVfZmxvYXRfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKKyAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCgtMS4wNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnRoZWNsYXNzKDE5NjksIDEyLCAzMSwgMjMsIDU5LCA1OCwgOTUwMDAwKSkKKworICAgIGRlZiB0ZXN0X3V0Y25vdyhzZWxmKToKKyAgICAgICAgaW1wb3J0IHRpbWUKKworICAgICAgICAjIENhbGwgaXQgYSBzdWNjZXNzIGlmIHV0Y25vdygpIGFuZCB1dGNmcm9tdGltZXN0YW1wKCkgYXJlIHdpdGhpbgorICAgICAgICAjIGEgc2Vjb25kIG9mIGVhY2ggb3RoZXIuCisgICAgICAgIHRvbGVyYW5jZSA9IHRpbWVkZWx0YShzZWNvbmRzPTEpCisgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIGZyb21fbm93ID0gc2VsZi50aGVjbGFzcy51dGNub3coKQorICAgICAgICAgICAgZnJvbV90aW1lc3RhbXAgPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAodGltZS50aW1lKCkpCisgICAgICAgICAgICBpZiBhYnMoZnJvbV90aW1lc3RhbXAgLSBmcm9tX25vdykgPD0gdG9sZXJhbmNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAjIEVsc2UgdHJ5IGFnYWluIGEgZmV3IHRpbWVzLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZSkKKworICAgIGRlZiB0ZXN0X3N0cnB0aW1lKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3N0cnB0aW1lCisKKyAgICAgICAgc3RyaW5nID0gJzIwMDQtMTItMDEgMTM6MDI6NDcuMTk3JworICAgICAgICBmb3JtYXQgPSAnJVktJW0tJWQgJUg6JU06JVMuJWYnCisgICAgICAgIGV4cGVjdGVkID0gX3N0cnB0aW1lLl9zdHJwdGltZV9kYXRldGltZShzZWxmLnRoZWNsYXNzLCBzdHJpbmcsIGZvcm1hdCkKKyAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5zdHJwdGltZShzdHJpbmcsIGZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXhwZWN0ZWQpLCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZ290KSwgc2VsZi50aGVjbGFzcykKKworICAgICAgICBzdHJwdGltZSA9IHNlbGYudGhlY2xhc3Muc3RycHRpbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwdGltZSgiKzAwMDIiLCAiJXoiKS51dGNvZmZzZXQoKSwgMiAqIE1JTlVURSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwdGltZSgiLTAwMDIiLCAiJXoiKS51dGNvZmZzZXQoKSwgLTIgKiBNSU5VVEUpCisgICAgICAgICMgT25seSBsb2NhbCB0aW1lem9uZSBhbmQgVVRDIGFyZSBzdXBwb3J0ZWQKKyAgICAgICAgZm9yIHR6c2Vjb25kcywgdHpuYW1lIGluICgoMCwgJ1VUQycpLCAoMCwgJ0dNVCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC1fdGltZS50aW1lem9uZSwgX3RpbWUudHpuYW1lWzBdKSk6CisgICAgICAgICAgICBpZiB0enNlY29uZHMgPCAwOgorICAgICAgICAgICAgICAgIHNpZ24gPSAnLScKKyAgICAgICAgICAgICAgICBzZWNvbmRzID0gLXR6c2Vjb25kcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaWduID0nKycKKyAgICAgICAgICAgICAgICBzZWNvbmRzID0gdHpzZWNvbmRzCisgICAgICAgICAgICBob3VycywgbWludXRlcyA9IGRpdm1vZChzZWNvbmRzLy82MCwgNjApCisgICAgICAgICAgICBkdHN0ciA9ICJ7fXs6MDJkfXs6MDJkfSB7fSIuZm9ybWF0KHNpZ24sIGhvdXJzLCBtaW51dGVzLCB0em5hbWUpCisgICAgICAgICAgICBkdCA9IHN0cnB0aW1lKGR0c3RyLCAiJXogJVoiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKHNlY29uZHM9dHpzZWNvbmRzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudHpuYW1lKCksIHR6bmFtZSkKKyAgICAgICAgIyBDYW4gcHJvZHVjZSBpbmNvbnNpc3RlbnQgZGF0ZXRpbWUKKyAgICAgICAgZHRzdHIsIGZtdCA9ICIrMTIzNCBVVEMiLCAiJXogJVoiCisgICAgICAgIGR0ID0gc3RycHRpbWUoZHRzdHIsIGZtdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC51dGNvZmZzZXQoKSwgMTIgKiBIT1VSICsgMzQgKiBNSU5VVEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudHpuYW1lKCksICdVVEMnKQorICAgICAgICAjIHlldCB3aWxsIHJvdW5kdHJpcAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnN0cmZ0aW1lKGZtdCksIGR0c3RyKQorCisgICAgICAgICMgUHJvZHVjZSBuYWl2ZSBkYXRldGltZSBpZiBubyAleiBpcyBwcm92aWRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cnB0aW1lKCJVVEMiLCAiJVoiKS50emluZm8sIE5vbmUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTogc3RycHRpbWUoIi0yNDAwIiwgIiV6IikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKTogc3RycHRpbWUoIi0wMDAiLCAiJXoiKQorCisgICAgZGVmIHRlc3RfbW9yZV90aW1ldHVwbGUoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyBmaWVsZHMgYmV5b25kIHRob3NlIHRlc3RlZCBieSB0aGUgVGVzdERhdGUudGVzdF90aW1ldHVwbGUuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudGltZXR1cGxlKCksICgyMDA0LCAxMiwgMzEsIDYsIDIyLCAzMywgNCwgMzY2LCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50aW1ldHVwbGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAodC55ZWFyLCB0Lm1vbnRoLCB0LmRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHQud2Vla2RheSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRvb3JkaW5hbCgpIC0gZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpKQorICAgICAgICB0dCA9IHQudGltZXR1cGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV95ZWFyLCB0LnllYXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fbW9uLCB0Lm1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX21kYXksIHQuZGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX2hvdXIsIHQuaG91cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9taW4sIHQubWludXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX3NlYywgdC5zZWNvbmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fd2RheSwgdC53ZWVrZGF5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1feWRheSwgdC50b29yZGluYWwoKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9pc2RzdCwgLTEpCisKKyAgICBkZWYgdGVzdF9tb3JlX3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdHMgZmllbGRzIGJleW9uZCB0aG9zZSB0ZXN0ZWQgYnkgdGhlIFRlc3REYXRlLnRlc3Rfc3RyZnRpbWUuCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzLCA0NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIlbSAlZCAleSAlZiAlUyAlTSAlSCAlaiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIDMxIDA0IDAwMDA0NyAzMyAyMiAwNiAzNjYiKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXRlKCksIGRhdGUoMjAwMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudGltZSgpLCB0aW1lKDE4LCA0NSwgMywgMTIzNCkpCisKKyAgICBkZWYgdGVzdF9jb21iaW5lKHNlbGYpOgorICAgICAgICBkID0gZGF0ZSgyMDAyLCAzLCA0KQorICAgICAgICB0ID0gdGltZSgxOCwgNDUsIDMsIDEyMzQpCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0LCAxOCwgNDUsIDMsIDEyMzQpCisgICAgICAgIGNvbWJpbmUgPSBzZWxmLnRoZWNsYXNzLmNvbWJpbmUKKyAgICAgICAgZHQgPSBjb21iaW5lKGQsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGV4cGVjdGVkKQorCisgICAgICAgIGR0ID0gY29tYmluZSh0aW1lPXQsIGRhdGU9ZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkdC5kYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgZHQudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBjb21iaW5lKGR0LmRhdGUoKSwgZHQudGltZSgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUpICMgbmVlZCBhbiBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkKSAjIG5lZWQgdHdvIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCB0LCBkKSAjIGFyZ3MgcmV2ZXJzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkLCB0LCAxKSAjIHRvbyBtYW55IGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCAiZGF0ZSIsICJ0aW1lIikgIyB3cm9uZyB0eXBlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUsIGQsICJ0aW1lIikgIyB3cm9uZyB0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tYmluZSwgImRhdGUiLCB0KSAjIHdyb25nIHR5cGUKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgYXJncyA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3XQorICAgICAgICBiYXNlID0gY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgieWVhciIsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1vbnRoIiwgMyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF5IiwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaG91ciIsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pbnV0ZSIsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNlY29uZCIsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pY3Jvc2Vjb25kIiwgOCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgeWVhcj0yMDAxKQorCisgICAgZGVmIHRlc3RfYXN0aW1lem9uZShzZWxmKToKKyAgICAgICAgIyBQcmV0dHkgYm9yaW5nISAgVGhlIFRaIHRlc3QgaXMgbW9yZSBpbnRlcmVzdGluZyBoZXJlLiAgYXN0aW1lem9uZSgpCisgICAgICAgICMgc2ltcGx5IGNhbid0IGJlIGFwcGxpZWQgdG8gYSBuYWl2ZSBvYmplY3QuCisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcy5ub3coKQorICAgICAgICBmID0gRml4ZWRPZmZzZXQoNDQsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGR0LmFzdGltZXpvbmUpICMgbm90IGVub3VnaCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgZiwgZikgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgZHQpICMgYXJnIHdyb25nIHR5cGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgZikgIyBuYWl2ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCB0ej1mKSAgIyBuYWl2ZQorCisgICAgICAgIGNsYXNzIEJvZ3VzKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKDApCisgICAgICAgIGJvZyA9IEJvZ3VzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgYm9nKSAgICMgbmFpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHQucmVwbGFjZSh0emluZm89Ym9nKS5hc3RpbWV6b25lLCBmKQorCisgICAgICAgIGNsYXNzIEFsc29Cb2d1cyh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEoMCkKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICBhbHNvYm9nID0gQWxzb0JvZ3VzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgYWxzb2JvZykgIyBhbHNvIG5haXZlCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRldGltZShzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLnllYXIgKyBzZWxmLm1vbnRoICsgc2VsZi5zZWNvbmQKKworICAgICAgICBhcmdzID0gMjAwMywgNCwgMTQsIDEyLCAxMywgNDEKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS50b29yZGluYWwoKSwgZHQyLnRvb3JkaW5hbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLnllYXIgKyBkdDEubW9udGggKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQxLnNlY29uZCAtIDcpCisKK2NsYXNzIFRlc3RTdWJjbGFzc0RhdGVUaW1lKFRlc3REYXRlVGltZSk6CisgICAgdGhlY2xhc3MgPSBTdWJjbGFzc0RhdGV0aW1lCisgICAgIyBPdmVycmlkZSB0ZXN0cyBub3QgZGVzaWduZWQgZm9yIHN1YmNsYXNzCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBwYXNzCisKK2NsYXNzIFN1YmNsYXNzVGltZSh0aW1lKToKKyAgICBzdWJfdmFyID0gMQorCitjbGFzcyBUZXN0VGltZShIYXJtbGVzc01peGVkQ29tcGFyaXNvbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgdGhlY2xhc3MgPSB0aW1lCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmhvdXIsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzX25vbnplcm8oc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGFsbCBhdHRyaWJ1dGVzIGFyZSBub24temVybyBzbyBidWdzIGluCisgICAgICAgICMgYml0LXNoaWZ0aW5nIGFjY2VzcyBzaG93IHVwLgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgNTksIDU5LCA4MDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaG91ciwgMTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taW51dGUsIDU5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCA1OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA4MDAwKQorCisgICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQorCisgICAgICAgICMgVmVyaWZ5IHQgLT4gc3RyaW5nIC0+IHRpbWUgaWRlbnRpdHkuCisgICAgICAgIHMgPSByZXByKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQorICAgICAgICBzID0gc1s5Ol0KKyAgICAgICAgdDIgPSBldmFsKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdDIpCisKKyAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3ModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1pY3Jvc2Vjb25kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHQyKQorCisgICAgZGVmIHRlc3RfY29tcGFyaW5nKHNlbGYpOgorICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDRdCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhcmdzKSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IGFyZ3NbaV0gKyAxCisgICAgICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKm5ld2FyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKKworICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPD0gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQorCisgICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgIyBiYWQgaG91cnMKKyAgICAgICAgc2VsZi50aGVjbGFzcygwLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIC0xLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyNCwgMCkKKyAgICAgICAgIyBiYWQgbWludXRlcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA2MCkKKyAgICAgICAgIyBiYWQgc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KKyAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDU5KSAgICMgbm8gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgNjApCisgICAgICAgICMgYmFkIG1pY3Jvc2Vjb25kcworICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDApICAgICAgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDk5OTk5OSkgICAjIG5vIGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNTksIDU5LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjMsIDU5LCA1OSwgMTAwMDAwMCkKKworICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQorCisgICAgICAgIGRpYyA9IHtkOiAxfQorICAgICAgICBkaWNbZV0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKKworICAgICAgICBkID0gc2VsZi50aGVjbGFzcygwLCAgNSwgMTcpCisgICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDAsICA1LCAxNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCisKKyAgICAgICAgZGljID0ge2Q6IDF9CisgICAgICAgIGRpY1tlXSA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQorCisgICAgZGVmIHRlc3RfaXNvZm9ybWF0KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyg0LCA1LCAxLCAxMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjA0OjA1OjAxLjAwMDEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgc3RyKHQpKQorCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwMDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDEwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAxMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDEwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDEwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCisKKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4xMDAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKKworICAgIGRlZiB0ZXN0XzE2NTM3MzYoc2VsZik6CisgICAgICAgICMgdmVyaWZ5IGl0IGRvZXNuJ3QgYWNjZXB0IGV4dHJhIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKHNlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuaXNvZm9ybWF0LCBmb289MykKKworICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoJyVIICVNICVTICVmJyksICIwMSAwMiAwMyAwMDAwMDQiKQorICAgICAgICAjIEEgbmFpdmUgb2JqZWN0IHJlcGxhY2VzICV6IGFuZCAlWiB3aXRoIGVtcHR5IHN0cmluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiJyV6JyAnJVonIiksICInJyAnJyIpCisKKyAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKCcnKSwgc3RyKHQpKQorCisgICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBfX3N0cl9fKCkgZ2V0cyBjYWxsZWQKKyAgICAgICAgY2xhc3MgQShzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQScKKyAgICAgICAgYSA9IEEoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCisgICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnQicKKyAgICAgICAgYiA9IEIoMSwgMiwgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIodCkpCisKKyAgICAgICAgZm9yIGZtdCBpbiBbJyVIICVNICVTJywKKyAgICAgICAgICAgICAgICAgICAgXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKGZtdCksICdCJykKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksICIwMTowMjowMy4wMDAwMDQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksICIxMDowMjowMy4wMDQwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDAsIDIsIDMsIDQwMDAwMCkpLCAiMDA6MDI6MDMuNDAwMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLCAiMTI6MDI6MDMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDIzLCAxNSwgMCwgMCkpLCAiMjM6MTU6MDAiKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbmFtZSA9ICdkYXRldGltZS4nICsgc2VsZi50aGVjbGFzcy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEsIDIsIDMsIDQpIiAlIG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEwLCAyLCAzLCA0MDAwKSIgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygwLCAyLCAzLCA0MDAwMDApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMCwgMiwgMywgNDAwMDAwKSIgJSBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlcygxMiwgMiwgMykiICUgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMjMsIDE1LCAwLCAwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDIzLCAxNSkiICUgbmFtZSkKKworICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCisKKyAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKKyAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzc190aW1lKHNlbGYpOgorICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKKyAgICAgICAgb3JpZyA9IFN1YmNsYXNzVGltZSgqYXJncykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorCisgICAgZGVmIHRlc3RfYm9vbChzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNscygwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbHMoKSkKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgYXJncyA9IFsxLCAyLCAzLCA0XQorICAgICAgICBiYXNlID0gY2xzKCphcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgiaG91ciIsIDUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pbnV0ZSIsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNlY29uZCIsIDcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pY3Jvc2Vjb25kIiwgOCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBob3VyPTI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pbnV0ZT0tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBzZWNvbmQ9MTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pY3Jvc2Vjb25kPTEwMDAwMDApCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc190aW1lKHNlbGYpOgorCisgICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6CisgICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgorCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6CisgICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKKyAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKKyAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYuaG91ciArIHNlbGYuc2Vjb25kCisKKyAgICAgICAgYXJncyA9IDQsIDUsIDYKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS5pc29mb3JtYXQoKSwgZHQyLmlzb2Zvcm1hdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEuc2Vjb25kIC0gNykKKworICAgIGRlZiB0ZXN0X2JhY2tkb29yX3Jlc2lzdGFuY2Uoc2VsZik6CisgICAgICAgICMgc2VlIFRlc3REYXRlLnRlc3RfYmFja2Rvb3JfcmVzaXN0YW5jZSgpLgorICAgICAgICBiYXNlID0gJzI6NTkuMCcKKyAgICAgICAgZm9yIGhvdXJfYnl0ZSBpbiAnICcsICc5JywgY2hyKDI0KSwgJ1x4ZmYnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZWNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyX2J5dGUgKyBiYXNlWzE6XSkKKworIyBBIG1peGluIGZvciBjbGFzc2VzIHdpdGggYSB0emluZm89IGFyZ3VtZW50LiAgU3ViY2xhc3NlcyBtdXN0IGRlZmluZQorIyB0aGVjbGFzcyBhcyBhIGNsYXNzIGF0cmlidXRlLCBhbmQgdGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPXdoYXRldmVyKQorIyBtdXN0IGJlIGxlZ2l0ICh3aGljaCBpcyB0cnVlIGZvciB0aW1lIGFuZCBkYXRldGltZSkuCitjbGFzcyBUWkluZm9CYXNlOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfcGFzc2luZyhzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworICAgICAgICAjIEEgZGF0ZXRpbWUgcGFzc2VzIGl0c2VsZiBvbiwgYSB0aW1lIHBhc3NlcyBOb25lLgorICAgICAgICBjbGFzcyBpbnRyb3NwZWN0aXZlKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogICAgcmV0dXJuIGR0IGFuZCAicmVhbCIgb3IgIm5vbmUiCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXMgPSBkdCBhbmQgNDIgb3IgLTQyKQorICAgICAgICAgICAgZHN0ID0gdXRjb2Zmc2V0CisKKyAgICAgICAgb2JqID0gY2xzKDEsIDIsIDMsIHR6aW5mbz1pbnRyb3NwZWN0aXZlKCkpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBjbHMgaXMgdGltZSBhbmQgIm5vbmUiIG9yICJyZWFsIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai50em5hbWUoKSwgZXhwZWN0ZWQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oY2xzIGlzIHRpbWUgYW5kIC00MiBvciA0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnV0Y29mZnNldCgpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZHN0KCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX3R6aW5mb19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCAxLCAxLCAxLCB0emluZm89MTIpCisKKyAgICAgICAgY2xhc3MgTmljZVRyeShvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgMSwgMSwgMSwgdHppbmZvPU5pY2VUcnkpCisKKyAgICAgICAgY2xhc3MgQmV0dGVyVHJ5KHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiBwYXNzCisgICAgICAgIGIgPSBCZXR0ZXJUcnkoKQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC50emluZm8gaXMgYikKKworICAgIGRlZiB0ZXN0X3V0Y19vZmZzZXRfb3V0X29mX2JvdW5kcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRWRneSh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCk6CisgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz1vZmZzZXQpCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKKworICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGZvciBvZmZzZXQsIGxlZ2l0IGluICgoLTE0NDAsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQzOSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQzOSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQ0MCwgRmFsc2UpKToKKyAgICAgICAgICAgIGlmIGNscyBpcyB0aW1lOgorICAgICAgICAgICAgICAgIHQgPSBjbHMoMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKKyAgICAgICAgICAgIGVsaWYgY2xzIGlzIGRhdGV0aW1lOgorICAgICAgICAgICAgICAgIHQgPSBjbHMoNiwgNiwgNiwgMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IDAsICJpbXBvc3NpYmxlIgorICAgICAgICAgICAgaWYgbGVnaXQ6CisgICAgICAgICAgICAgICAgYW9mcyA9IGFicyhvZmZzZXQpCisgICAgICAgICAgICAgICAgaCwgbSA9IGRpdm1vZChhb2ZzLCA2MCkKKyAgICAgICAgICAgICAgICB0YWcgPSAiJWMlMDJkOiUwMmQiICUgKG9mZnNldCA8IDAgYW5kICctJyBvciAnKycsIGgsIG0pCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCBkYXRldGltZSk6CisgICAgICAgICAgICAgICAgICAgIHQgPSB0LnRpbWV0eigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICIwMTowMjowMyIgKyB0YWcpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ciwgdCkKKworICAgIGRlZiB0ZXN0X3R6aW5mb19jbGFzc2VzKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGNsYXNzIEMxKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6IHJldHVybiBOb25lCisgICAgICAgIGZvciB0IGluIChjbHMoMSwgMSwgMSksCisgICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPU5vbmUpLAorICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1DMSgpKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC51dGNvZmZzZXQoKSBpcyBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZHN0KCkgaXMgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6bmFtZSgpIGlzIE5vbmUpCisKKyAgICAgICAgY2xhc3MgQzModHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9LTE0MzkpCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTE0MzkpCisgICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogcmV0dXJuICJhbmFtZSIKKyAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMTQzOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MTQzOSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50em5hbWUoKSwgImFuYW1lIikKKworICAgICAgICAjIFdyb25nIHR5cGVzLgorICAgICAgICBjbGFzcyBDNCh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiAiYW5hbWUiCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIDcKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gMAorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudXRjb2Zmc2V0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuZHN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudHpuYW1lKQorCisgICAgICAgICMgT2Zmc2V0IG91dCBvZiByYW5nZS4KKyAgICAgICAgY2xhc3MgQzYodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPS0yNCkKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPTI0KQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCisKKyAgICAgICAgIyBOb3QgYSB3aG9sZSBudW1iZXIgb2YgbWludXRlcy4KKyAgICAgICAgY2xhc3MgQzcodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKHNlY29uZHM9NjEpCisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9LTgxKQorICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCisKKyAgICBkZWYgdGVzdF9hd2FyZV9jb21wYXJlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB1dGNvZmZzZXQoKSBnZXRzIGlnbm9yZWQgaWYgdGhlIGNvbXBhcmFuZHMgaGF2ZQorICAgICAgICAjIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIuCisgICAgICAgIGNsYXNzIE9wZXJhbmREZXBlbmRlbnRPZmZzZXQodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgdCk6CisgICAgICAgICAgICAgICAgaWYgdC5taW51dGUgPCAxMDoKKyAgICAgICAgICAgICAgICAgICAgIyBkMCBhbmQgZDEgZXF1YWwgYWZ0ZXIgYWRqdXN0bWVudAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9dC5taW51dGUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBkMiBvZmYgaW4gdGhlIHdlZWRzCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz01OSkKKworICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKKyAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCisgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKKyAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIGx0LCBsZSwgZ3QsIGdlLCBlcSwgbmU6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gb3AoeC5taW51dGUsIHkubWludXRlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICAgICAgIyBIb3dldmVyLCBpZiB0aGV5J3JlIGRpZmZlcmVudCBtZW1iZXJzLCB1Y3RvZmZzZXQgaXMgbm90IGlnbm9yZWQuCisgICAgICAgICMgTm90ZSB0aGF0IGEgdGltZSBjYW4ndCBhY3R1YWxseSBoYXZlIGFuIG9wZXJhbmQtZGVwZWRlbnQgb2Zmc2V0LAorICAgICAgICAjIHRob3VnaCAoYW5kIHRpbWUudXRjb2Zmc2V0KCkgcGFzc2VzIE5vbmUgdG8gdHppbmZvLnV0Y29mZnNldCgpKSwKKyAgICAgICAgIyBzbyBza2lwIHRoaXMgdGVzdCBmb3IgdGltZS4KKyAgICAgICAgaWYgY2xzIGlzIG5vdCB0aW1lOgorICAgICAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgICAgICBkMSA9IGJhc2UucmVwbGFjZShtaW51dGU9OSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKKyAgICAgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZm9yIHkgaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgICAgICAgICAgZ290ID0gKHggPiB5KSAtICh4IDwgeSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCisgICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCB5IGlzIGQyCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDEKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisKKyMgVGVzdGluZyB0aW1lIG9iamVjdHMgd2l0aCBhIG5vbi1Ob25lIHR6aW5mby4KK2NsYXNzIFRlc3RUaW1lVFooVGVzdFRpbWUsIFRaSW5mb0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0aGVjbGFzcyA9IHRpbWUKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ob3VyLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6aW5mbyBpcyBOb25lKQorCisgICAgZGVmIHRlc3Rfem9uZXMoc2VsZik6CisgICAgICAgIGVzdCA9IEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQorICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAiVVRDIiwgLTIpCisgICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIiwgMykKKyAgICAgICAgdDEgPSB0aW1lKCA3LCA0NywgdHppbmZvPWVzdCkKKyAgICAgICAgdDIgPSB0aW1lKDEyLCA0NywgdHppbmZvPXV0YykKKyAgICAgICAgdDMgPSB0aW1lKDEzLCA0NywgdHppbmZvPW1ldCkKKyAgICAgICAgdDQgPSB0aW1lKG1pY3Jvc2Vjb25kPTQwKQorICAgICAgICB0NSA9IHRpbWUobWljcm9zZWNvbmQ9NDAsIHR6aW5mbz11dGMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50emluZm8sIGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50emluZm8sIHV0YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50emluZm8sIG1ldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6aW5mbyBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1LnR6aW5mbywgdXRjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS51dGNvZmZzZXQsICJubyBhcmdzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAiRVNUIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50em5hbWUoKSwgIlVUQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHpuYW1lKCksICJNRVQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudHpuYW1lKCkgaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS50em5hbWUsICJubyBhcmdzIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0zKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LmRzdCgpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEuZHN0LCAibm8gYXJncyIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDIpLCBoYXNoKHQzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPT0gdDUpICMgbWl4ZWQgdHotYXdhcmUgJiBuYWl2ZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPCB0NSkgIyBtaXhlZCB0ei1hd2FyZSAmIG5haXZlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0NSA8IHQ0KSAjIG1peGVkIHR6LWF3YXJlICYgbmFpdmUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksICIwNzo0NzowMC0wNTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgIjEyOjQ3OjAwKzAwOjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDMpLCAiMTM6NDc6MDArMDE6MDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NCksICIwMDowMDowMC4wMDAwNDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NSksICIwMDowMDowMC4wMDAwNDArMDA6MDAiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuaXNvZm9ybWF0KCksICIwNzo0NzowMC0wNTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuaXNvZm9ybWF0KCksICIxMjo0NzowMCswMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuaXNvZm9ybWF0KCksICIxMzo0NzowMCswMTowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwNDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDQwKzAwOjAwIikKKworICAgICAgICBkID0gJ2RhdGV0aW1lLnRpbWUnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MSksIGQgKyAiKDcsIDQ3LCB0emluZm89ZXN0KSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MiksIGQgKyAiKDEyLCA0NywgdHppbmZvPXV0YykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDMpLCBkICsgIigxMywgNDcsIHR6aW5mbz1tZXQpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ0KSwgZCArICIoMCwgMCwgMCwgNDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ1KSwgZCArICIoMCwgMCwgMCwgNDAsIHR6aW5mbz11dGMpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnN0cmZ0aW1lKCIlSDolTTolUyAlJVo9JVogJSV6PSV6IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA3OjQ3OjAwICVaPUVTVCAlej0tMDUwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3RyZnRpbWUoIiVIOiVNOiVTICVaICV6IiksICIxMjo0NzowMCBVVEMgKzAwMDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnN0cmZ0aW1lKCIlSDolTTolUyAlWiAleiIpLCAiMTM6NDc6MDAgTUVUICswMTAwIikKKworICAgICAgICB5dWNrID0gRml4ZWRPZmZzZXQoLTE0MzksICIleiAlWiAlJXolJVoiKQorICAgICAgICB0MSA9IHRpbWUoMjMsIDU5LCB0emluZm89eXVjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5zdHJmdGltZSgiJUg6JU0gJSVaPSclWicgJSV6PScleiciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjM6NTkgJVo9JyV6ICVaICUleiUlWicgJXo9Jy0yMzU5JyIpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IGFuIGludmFsaWQgdHpuYW1lIHJlc3VsdCByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICBjbGFzcyBCYWR0em5hbWUodHppbmZvKToKKyAgICAgICAgICAgIHR6ID0gNDIKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gc2VsZi50egorICAgICAgICB0ID0gdGltZSgyLCAzLCA0LCB0emluZm89QmFkdHpuYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiJUg6JU06JVMiKSwgIjAyOjAzOjA0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lLCAiJVoiKQorCisgICAgICAgICMgSXNzdWUgIzY2OTc6CisgICAgICAgIGlmICdfRmFzdCcgaW4gc3RyKHR5cGUoc2VsZikpOgorICAgICAgICAgICAgQmFkdHpuYW1lLnR6ID0gJ1x1ZDgwMCcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlWiIpCisKKyAgICBkZWYgdGVzdF9oYXNoX2VkZ2VfY2FzZXMoc2VsZik6CisgICAgICAgICMgT2Zmc2V0cyB0aGF0IG92ZXJmbG93IGEgYmFzaWMgdGltZS4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDAsIDEsIDIsIDMsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM5LCAiIikpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygwLCAwLCAyLCAzLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMjMsIDU4LCA2LCAxMDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTAwMCwgIiIpKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoMjMsIDQ4LCA2LCAxMDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTAxMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICAjIFRyeSBvbmUgd2l0aG91dCBhIHR6aW5mby4KKyAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICAgICAgIyBUcnkgb25lIHdpdGggYSB0emluZm8uCisgICAgICAgIHRpbmZvID0gUGlja2xhYmxlRml4ZWRPZmZzZXQoLTMwMCwgJ2Nvb2tpZScpCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKDUsIDYsIDcsIHR6aW5mbz10aW5mbykKKyAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6CisgICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCisgICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRlcml2ZWQudHppbmZvLCBQaWNrbGFibGVGaXhlZE9mZnNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQorCisgICAgZGVmIHRlc3RfbW9yZV9ib29sKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FzZXMgd2l0aCBub24tTm9uZSB0emluZm8uCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKworICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgtMzAwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQorCisgICAgICAgIHQgPSBjbHMoNSwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCisKKyAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoMzAwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdCkKKworICAgICAgICB0ID0gY2xzKDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0KQorCisgICAgICAgICMgTW9zdGx5IGVuc3VyaW5nIHRoaXMgZG9lc24ndCBvdmVyZmxvdyBpbnRlcm5hbGx5LgorICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyMyo2MCArIDU5LCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0KQorCisgICAgICAgICMgQnV0IHRoaXMgc2hvdWxkIHlpZWxkIGEgdmFsdWUgZXJyb3IgLS0gdGhlIHV0Y29mZnNldCBpcyBib2d1cy4KKyAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoMjQqNjAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBib29sKHQpKQorCisgICAgICAgICMgTGlrZXdpc2UuCisgICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0yNCo2MCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGJvb2wodCkpCisKKyAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgorICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIHoxMDAgPSBGaXhlZE9mZnNldCgxMDAsICIrMTAwIikKKyAgICAgICAgem0yMDAgPSBGaXhlZE9mZnNldCh0aW1lZGVsdGEobWludXRlcz0tMjAwKSwgIi0yMDAiKQorICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDQsIHoxMDBdCisgICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCisKKyAgICAgICAgaSA9IDAKKyAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJob3VyIiwgNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWludXRlIiwgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2Vjb25kIiwgNyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWljcm9zZWNvbmQiLCA4KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJ0emluZm8iLCB6bTIwMCkpOgorICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KKyAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKKyAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQorICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAjIEVuc3VyZSB3ZSBjYW4gZ2V0IHJpZCBvZiBhIHR6aW5mby4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnR6bmFtZSgpLCAiKzEwMCIpCisgICAgICAgIGJhc2UyID0gYmFzZS5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZTIudHppbmZvIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50em5hbWUoKSBpcyBOb25lKQorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBhZGQgb25lLgorICAgICAgICBiYXNlMyA9IGJhc2UyLnJlcGxhY2UodHppbmZvPXoxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZTMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlLnR6aW5mbyBpcyBiYXNlMy50emluZm8pCisKKyAgICAgICAgIyBPdXQgb2YgYm91bmRzLgorICAgICAgICBiYXNlID0gY2xzKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgaG91cj0yNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaW51dGU9LTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgc2Vjb25kPTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBtaWNyb3NlY29uZD0xMDAwMDAwKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSB0aW1lKDEsIDIsIDMpCisgICAgICAgIHQyID0gdGltZSgxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1GaXhlZE9mZnNldChOb25lLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQorCisgICAgICAgICMgSW4gdGltZSB3LyBpZGVudGljYWwgdHppbmZvIG9iamVjdHMsIHV0Y29mZnNldCBpcyBpZ25vcmVkLgorICAgICAgICBjbGFzcyBWYXJpZXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPTIyKQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAorCisgICAgICAgIHYgPSBWYXJpZXMoKQorICAgICAgICB0MSA9IHQyLnJlcGxhY2UodHppbmZvPXYpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3RpbWV0eihzZWxmKToKKworICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgorICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKKworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCisgICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCisgICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLmhvdXIgKyBzZWxmLnNlY29uZAorCisgICAgICAgIGFyZ3MgPSA0LCA1LCA2LCA1MDAsIEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQorCisgICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCisgICAgICAgIGR0MiA9IEMoKmFyZ3MsICoqeydleHRyYSc6IDd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLl9fY2xhc3NfXywgQykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIudGhlQW5zd2VyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuZXh0cmEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLnV0Y29mZnNldCgpLCBkdDIudXRjb2Zmc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLm5ld21ldGgoLTcpLCBkdDEuaG91ciArIGR0MS5zZWNvbmQgLSA3KQorCisKKyMgVGVzdGluZyBkYXRldGltZSBvYmplY3RzIHdpdGggYSBub24tTm9uZSB0emluZm8uCisKK2NsYXNzIFRlc3REYXRlVGltZVRaKFRlc3REYXRlVGltZSwgVFpJbmZvQmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHRoZWNsYXNzID0gZGF0ZXRpbWUKKworICAgIGRlZiB0ZXN0X3RyaXZpYWwoc2VsZik6CisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmhvdXIsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWludXRlLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnNlY29uZCwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taWNyb3NlY29uZCwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50emluZm8sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9ldmVuX21vcmVfY29tcGFyZShzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdF9jb21wYXJlKCkgYW5kIHRlc3RfbW9yZV9jb21wYXJlKCkgaW5oZXJpdGVkIGZyb20gVGVzdERhdGUKKyAgICAgICAgIyBhbmQgVGVzdERhdGVUaW1lIGNvdmVyZWQgbm9uLXR6aW5mbyBjYXNlcy4KKworICAgICAgICAjIFNtYWxsZXN0IHBvc3NpYmxlIGFmdGVyIFVUQyBhZGp1c3RtZW50LgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKKyAgICAgICAgIyBMYXJnZXN0IHBvc3NpYmxlIGFmdGVyIFVUQyBhZGp1c3RtZW50LgorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89Rml4ZWRPZmZzZXQoLTE0MzksICIiKSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aG9zZSBjb21wYXJlIGNvcnJlY3RseSwgYW5kIHcvbyBvdmVyZmxvdy4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQyKQorCisgICAgICAgICMgRXF1YWwgYWZlciBhZGp1c3RtZW50LgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIikpCisgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAxLCAxLCAzLCAxMywgdHppbmZvPUZpeGVkT2Zmc2V0KDMqNjArMTMrMiwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKworICAgICAgICAjIENoYW5nZSB0MSBub3QgdG8gc3VidHJhY3QgYSBtaW51dGUsIGFuZCB0MSBzaG91bGQgYmUgbGFyZ2VyLgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQorCisgICAgICAgICMgQ2hhbmdlIHQxIHRvIHN1YnRyYWN0IDIgbWludXRlcywgYW5kIHQxIHNob3VsZCBiZSBzbWFsbGVyLgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgyLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQorCisgICAgICAgICMgQmFjayB0byB0aGUgb3JpZ2luYWwgdDEsIGJ1dCBtYWtlIHNlY29uZHMgcmVzb2x2ZSBpdC4KKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDEsIDEyLCAzMSwgMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMSwgIiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQorCisgICAgICAgICMgTGlrZXdpc2UsIGJ1dCBtYWtlIG1pY3Jvc2Vjb25kcyByZXNvbHZlIGl0LgorICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZD0xKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPiB0MikKKworICAgICAgICAjIE1ha2UgdDIgbmFpdmUgYW5kIGl0IHNob3VsZCBmYWlsLgorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MubWluCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA9PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdDIpCisKKyAgICAgICAgIyBJdCdzIGFsc28gbmFpdmUgaWYgaXQgaGFzIHR6aW5mbyBidXQgdHppbmZvLnV0Y29mZnNldCgpIGlzIE5vbmUuCisgICAgICAgIGNsYXNzIE5haXZlKHR6aW5mbyk6CisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKKyAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDUsIDYsIDcsIHR6aW5mbz1OYWl2ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQyKQorCisgICAgICAgICMgT1RPSCwgaXQncyBPSyB0byBjb21wYXJlIHR3byBvZiB0aGVzZSBtaXhpbmcgdGhlIHR3byB3YXlzIG9mIGJlaW5nCisgICAgICAgICMgbmFpdmUuCisgICAgICAgIHQxID0gc2VsZi50aGVjbGFzcyg1LCA2LCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKworICAgICAgICAjIFRyeSBhIGJvZ3VzIHVjdG9mZnNldC4KKyAgICAgICAgY2xhc3MgQm9ndXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz0xNDQwKSAjIG91dCBvZiBib3VuZHMKKyAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDIsIDIsIDIsIHR6aW5mbz1Cb2d1cygpKQorICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoMiwgMiwgMiwgdHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiB0MSA9PSB0MikKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICAjIFRyeSBvbmUgd2l0aG91dCBhIHR6aW5mby4KKyAgICAgICAgYXJncyA9IDYsIDcsIDIzLCAyMCwgNTksIDEsIDY0KioyCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisKKyAgICAgICAgIyBUcnkgb25lIHdpdGggYSB0emluZm8uCisgICAgICAgIHRpbmZvID0gUGlja2xhYmxlRml4ZWRPZmZzZXQoLTMwMCwgJ2Nvb2tpZScpCisgICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzLCAqKnsndHppbmZvJzogdGluZm99KQorICAgICAgICBkZXJpdmVkID0gc2VsZi50aGVjbGFzcygxLCAxLCAxLCB0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIsIDApKQorICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKKyAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVyaXZlZC50emluZm8sIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoKSwgJ2Nvb2tpZScpCisKKyAgICBkZWYgdGVzdF9leHRyZW1lX2hhc2hlcyhzZWxmKToKKyAgICAgICAgIyBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gaGFzaCB0aGVzZSB2aWEgc3VidHJhY3RpbmcgdGhlIG9mZnNldAorICAgICAgICAjIHRoZW4gaGFzaGluZyBhIGRhdGV0aW1lIG9iamVjdCwgT3ZlcmZsb3dFcnJvciByZXN1bHRzLiAgVGhlCisgICAgICAgICMgUHl0aG9uIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gYmxvdyB1cCBoZXJlLgorICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAxLCAxLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOSwgIiIpKQorICAgICAgICBoYXNoKHQpCisgICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKE1BWFlFQVIsIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5OTk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89Rml4ZWRPZmZzZXQoLTE0MzksICIiKSkKKyAgICAgICAgaGFzaCh0KQorCisgICAgICAgICMgT1RPSCwgYW4gT09CIG9mZnNldCBzaG91bGQgYmxvdyB1cC4KKyAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoNSwgNSwgNSwgdHppbmZvPUZpeGVkT2Zmc2V0KC0xNDQwLCAiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGhhc2gsIHQpCisKKyAgICBkZWYgdGVzdF96b25lcyhzZWxmKToKKyAgICAgICAgZXN0ID0gRml4ZWRPZmZzZXQoLTMwMCwgIkVTVCIpCisgICAgICAgIHV0YyA9IEZpeGVkT2Zmc2V0KDAsICJVVEMiKQorICAgICAgICBtZXQgPSBGaXhlZE9mZnNldCg2MCwgIk1FVCIpCisgICAgICAgIHQxID0gZGF0ZXRpbWUoMjAwMiwgMywgMTksICA3LCA0NywgdHppbmZvPWVzdCkKKyAgICAgICAgdDIgPSBkYXRldGltZSgyMDAyLCAzLCAxOSwgMTIsIDQ3LCB0emluZm89dXRjKQorICAgICAgICB0MyA9IGRhdGV0aW1lKDIwMDIsIDMsIDE5LCAxMywgNDcsIHR6aW5mbz1tZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudHppbmZvLCBlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHppbmZvLCB1dGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHppbmZvLCBtZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAiRVNUIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50em5hbWUoKSwgIlVUQyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHpuYW1lKCksICJNRVQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MiksIGhhc2godDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksICIyMDAyLTAzLTE5IDA3OjQ3OjAwLTA1OjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDIpLCAiMjAwMi0wMy0xOSAxMjo0NzowMCswMDowMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQzKSwgIjIwMDItMDMtMTkgMTM6NDc6MDArMDE6MDAiKQorICAgICAgICBkID0gJ2RhdGV0aW1lLmRhdGV0aW1lKDIwMDIsIDMsIDE5LCAnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MSksIGQgKyAiNywgNDcsIHR6aW5mbz1lc3QpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQyKSwgZCArICIxMiwgNDcsIHR6aW5mbz11dGMpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQzKSwgZCArICIxMywgNDcsIHR6aW5mbz1tZXQpIikKKworICAgIGRlZiB0ZXN0X2NvbWJpbmUoc2VsZik6CisgICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIikKKyAgICAgICAgZCA9IGRhdGUoMjAwMiwgMywgNCkKKyAgICAgICAgdHogPSB0aW1lKDE4LCA0NSwgMywgMTIzNCwgdHppbmZvPW1ldCkKKyAgICAgICAgZHQgPSBkYXRldGltZS5jb21iaW5lKGQsIHR6KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkYXRldGltZSgyMDAyLCAzLCA0LCAxOCwgNDUsIDMsIDEyMzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPW1ldCkpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0KHNlbGYpOgorICAgICAgICBtZXQgPSBGaXhlZE9mZnNldCg2MCwgIk1FVCIpCisgICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0LCAxOCwgNDUsIDMsIDEyMzQsIHR6aW5mbz1tZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF0ZSgpLCBkYXRlKDIwMDIsIDMsIDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnRpbWUoKSwgdGltZSgxOCwgNDUsIDMsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnRpbWV0eigpLCB0aW1lKDE4LCA0NSwgMywgMTIzNCwgdHppbmZvPW1ldCkpCisKKyAgICBkZWYgdGVzdF90el9hd2FyZV9hcml0aG1ldGljKHNlbGYpOgorICAgICAgICBpbXBvcnQgcmFuZG9tCisKKyAgICAgICAgbm93ID0gc2VsZi50aGVjbGFzcy5ub3coKQorICAgICAgICB0ejU1ID0gRml4ZWRPZmZzZXQoLTMzMCwgIndlc3QgNTozMCIpCisgICAgICAgIHRpbWVhd2FyZSA9IG5vdy50aW1lKCkucmVwbGFjZSh0emluZm89dHo1NSkKKyAgICAgICAgbm93YXdhcmUgPSBzZWxmLnRoZWNsYXNzLmNvbWJpbmUobm93LmRhdGUoKSwgdGltZWF3YXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmUudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmUudGltZXR6KCksIHRpbWVhd2FyZSkKKworICAgICAgICAjIENhbid0IG1peCBhd2FyZSBhbmQgbm9uLWF3YXJlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93IC0gbm93YXdhcmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3dhd2FyZSAtIG5vdykKKworICAgICAgICAjIEFuZCBhZGRpbmcgZGF0ZXRpbWUncyBkb2Vzbid0IG1ha2Ugc2Vuc2UsIGF3YXJlIG9yIG5vdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vdyArIG5vd2F3YXJlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93YXdhcmUgKyBub3cpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3dhd2FyZSArIG5vd2F3YXJlKQorCisgICAgICAgICMgU3VidHJhY3Rpbmcgc2hvdWxkIHlpZWxkIDAuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93IC0gbm93LCB0aW1lZGVsdGEoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmUgLSBub3dhd2FyZSwgdGltZWRlbHRhKDApKQorCisgICAgICAgICMgQWRkaW5nIGEgZGVsdGEgc2hvdWxkIHByZXNlcnZlIHR6aW5mby4KKyAgICAgICAgZGVsdGEgPSB0aW1lZGVsdGEod2Vla3M9MSwgbWludXRlcz0xMiwgbWljcm9zZWNvbmRzPTU2NzgpCisgICAgICAgIG5vd2F3YXJlcGx1cyA9IG5vd2F3YXJlICsgZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlLnR6aW5mbyBpcyB0ejU1KQorICAgICAgICBub3dhd2FyZXBsdXMyID0gZGVsdGEgKyBub3dhd2FyZQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmVwbHVzMi50emluZm8gaXMgdHo1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZXBsdXMsIG5vd2F3YXJlcGx1czIpCisKKyAgICAgICAgIyB0aGF0IC0gZGVsdGEgc2hvdWxkIGJlIHdoYXQgd2Ugc3RhcnRlZCB3aXRoLCBhbmQgdGhhdCAtIHdoYXQgd2UKKyAgICAgICAgIyBzdGFydGVkIHdpdGggc2hvdWxkIGJlIGRlbHRhLgorICAgICAgICBkaWZmID0gbm93YXdhcmVwbHVzIC0gZGVsdGEKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpZmYudHppbmZvIGlzIHR6NTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmUsIGRpZmYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkZWx0YSAtIG5vd2F3YXJlcGx1cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3dhd2FyZXBsdXMgLSBub3dhd2FyZSwgZGVsdGEpCisKKyAgICAgICAgIyBNYWtlIHVwIGEgcmFuZG9tIHRpbWV6b25lLgorICAgICAgICB0enIgPSBGaXhlZE9mZnNldChyYW5kb20ucmFuZHJhbmdlKC0xNDM5LCAxNDQwKSwgInJhbmRvbXRpbWV6b25lIikKKyAgICAgICAgIyBBdHRhY2ggaXQgdG8gbm93YXdhcmVwbHVzLgorICAgICAgICBub3dhd2FyZXBsdXMgPSBub3dhd2FyZXBsdXMucmVwbGFjZSh0emluZm89dHpyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobm93YXdhcmVwbHVzLnR6aW5mbyBpcyB0enIpCisgICAgICAgICMgTWFrZSBzdXJlIHRoZSBkaWZmZXJlbmNlIHRha2VzIHRoZSB0aW1lem9uZSBhZGp1c3RtZW50cyBpbnRvIGFjY291bnQuCisgICAgICAgIGdvdCA9IG5vd2F3YXJlIC0gbm93YXdhcmVwbHVzCisgICAgICAgICMgRXhwZWN0ZWQ6ICAobm93YXdhcmUgYmFzZSAtIG5vd2F3YXJlIG9mZnNldCkgLQorICAgICAgICAjICAgICAgICAgICAgKG5vd2F3YXJlcGx1cyBiYXNlIC0gbm93YXdhcmVwbHVzIG9mZnNldCkgPQorICAgICAgICAjICAgICAgICAgICAgKG5vd2F3YXJlIGJhc2UgLSBub3dhd2FyZXBsdXMgYmFzZSkgKworICAgICAgICAjICAgICAgICAgICAgKG5vd2F3YXJlcGx1cyBvZmZzZXQgLSBub3dhd2FyZSBvZmZzZXQpID0KKyAgICAgICAgIyAgICAgICAgICAgIC1kZWx0YSArIG5vd2F3YXJlcGx1cyBvZmZzZXQgLSBub3dhd2FyZSBvZmZzZXQKKyAgICAgICAgZXhwZWN0ZWQgPSBub3dhd2FyZXBsdXMudXRjb2Zmc2V0KCkgLSBub3dhd2FyZS51dGNvZmZzZXQoKSAtIGRlbHRhCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKKworICAgICAgICAjIFRyeSBtYXggcG9zc2libGUgZGlmZmVyZW5jZS4KKyAgICAgICAgbWluID0gc2VsZi50aGVjbGFzcygxLCAxLCAxLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOSwgIm1pbiIpKQorICAgICAgICBtYXggPSBzZWxmLnRoZWNsYXNzKE1BWFlFQVIsIDEyLCAzMSwgMjMsIDU5LCA1OSwgOTk5OTk5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQzOSwgIm1heCIpKQorICAgICAgICBtYXhkaWZmID0gbWF4IC0gbWluCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4ZGlmZiwgc2VsZi50aGVjbGFzcy5tYXggLSBzZWxmLnRoZWNsYXNzLm1pbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRlbHRhKG1pbnV0ZXM9MioxNDM5KSkKKyAgICAgICAgIyBEaWZmZXJlbnQgdHppbmZvLCBidXQgdGhlIHNhbWUgb2Zmc2V0CisgICAgICAgIHR6YSA9IHRpbWV6b25lKEhPVVIsICdBJykKKyAgICAgICAgdHpiID0gdGltZXpvbmUoSE9VUiwgJ0InKQorICAgICAgICBkZWx0YSA9IG1pbi5yZXBsYWNlKHR6aW5mbz10emEpIC0gbWF4LnJlcGxhY2UodHppbmZvPXR6YikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YSwgc2VsZi50aGVjbGFzcy5taW4gLSBzZWxmLnRoZWNsYXNzLm1heCkKKworICAgIGRlZiB0ZXN0X3R6aW5mb19ub3coc2VsZik6CisgICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLm5vdworICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KKyAgICAgICAgYmFzZSA9IG1ldGgoKQorICAgICAgICAjIFRyeSB3aXRoIGFuZCB3aXRob3V0IG5hbWluZyB0aGUga2V5d29yZC4KKyAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKKyAgICAgICAgYW5vdGhlciA9IG1ldGgob2ZmNDIpCisgICAgICAgIGFnYWluID0gbWV0aCh0ej1vZmY0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFub3RoZXIudHppbmZvIGlzIGFnYWluLnR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbm90aGVyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz00MikpCisgICAgICAgICMgQmFkIGFyZ3VtZW50IHdpdGggYW5kIHcvbyBuYW1pbmcgdGhlIGtleXdvcmQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHppbmZvPTE2KQorICAgICAgICAjIEJhZCBrZXl3b3JkIG5hbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdGluZm89b2ZmNDIpCisgICAgICAgICMgVG9vIG1hbnkgYXJncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCBvZmY0Miwgb2ZmNDIpCisKKyAgICAgICAgIyBXZSBkb24ndCBrbm93IHdoaWNoIHRpbWUgem9uZSB3ZSdyZSBpbiwgYW5kIGRvbid0IGhhdmUgYSB0emluZm8KKyAgICAgICAgIyBjbGFzcyB0byByZXByZXNlbnQgaXQsIHNvIHNlZWluZyB3aGV0aGVyIGEgdHogYXJndW1lbnQgYWN0dWFsbHkKKyAgICAgICAgIyBkb2VzIGEgY29udmVyc2lvbiBpcyB0cmlja3kuCisgICAgICAgIHV0YyA9IEZpeGVkT2Zmc2V0KDAsICJ1dGMiLCAwKQorICAgICAgICBmb3Igd2VpcmR0eiBpbiBbRml4ZWRPZmZzZXQodGltZWRlbHRhKGhvdXJzPTE1LCBtaW51dGVzPTU4KSwgIndlaXJkdHoiLCAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lKHRpbWVkZWx0YShob3Vycz0xNSwgbWludXRlcz01OCksICJ3ZWlyZHR6IiksXToKKyAgICAgICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICBub3cgPSBkYXRldGltZS5ub3cod2VpcmR0eikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm93LnR6aW5mbyBpcyB3ZWlyZHR6KQorICAgICAgICAgICAgICAgIHV0Y25vdyA9IGRhdGV0aW1lLnV0Y25vdygpLnJlcGxhY2UodHppbmZvPXV0YykKKyAgICAgICAgICAgICAgICBub3cyID0gdXRjbm93LmFzdGltZXpvbmUod2VpcmR0eikKKyAgICAgICAgICAgICAgICBpZiBhYnMobm93IC0gbm93MikgPCB0aW1lZGVsdGEoc2Vjb25kcz0zMCk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBFbHNlIHRoZSBjb2RlIGlzIGJyb2tlbiwgb3IgbW9yZSB0aGFuIDMwIHNlY29uZHMgcGFzc2VkIGJldHdlZW4KKyAgICAgICAgICAgICAgICAjIGNhbGxzOyBhc3N1bWluZyB0aGUgbGF0dGVyLCBqdXN0IHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBUaHJlZSBzdHJpa2VzIGFuZCB3ZSdyZSBvdXQuCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1dGNub3coKSwgbm93KHR6KSwgb3IgYXN0aW1lem9uZSgpIG1heSBiZSBicm9rZW4iKQorCisgICAgZGVmIHRlc3RfdHppbmZvX2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAKKyAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KKyAgICAgICAgYmFzZSA9IG1ldGgodHMpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQorICAgICAgICBhbm90aGVyID0gbWV0aCh0cywgb2ZmNDIpCisgICAgICAgIGFnYWluID0gbWV0aCh0cywgdHo9b2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQorICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgdHppbmZvPTE2KQorICAgICAgICAjIEJhZCBrZXl3b3JkIG5hbWUuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHRpbmZvPW9mZjQyKQorICAgICAgICAjIFRvbyBtYW55IGFyZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIG9mZjQyLCBvZmY0MikKKyAgICAgICAgIyBUb28gZmV3IGFyZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCkKKworICAgICAgICAjIFRyeSB0byBtYWtlIHN1cmUgdHo9IGFjdHVhbGx5IGRvZXMgc29tZSBjb252ZXJzaW9uLgorICAgICAgICB0aW1lc3RhbXAgPSAxMDAwMDAwMDAwCisgICAgICAgIHV0Y2RhdGV0aW1lID0gZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXApCisgICAgICAgICMgSW4gUE9TSVggKGVwb2NoIDE5NzApLCB0aGF0J3MgMjAwMS0wOS0wOSAwMTo0Njo0MCBVVEMsIGdpdmUgb3IgdGFrZS4KKyAgICAgICAgIyBCdXQgb24gc29tZSBmbGF2b3Igb2YgTWFjLCBpdCdzIG5vd2hlcmUgbmVhciB0aGF0LiAgU28gd2UgY2FuJ3QgaGF2ZQorICAgICAgICAjIGFueSBpZGVhIGhlcmUgd2hhdCB0aW1lIHRoYXQgYWN0dWFsbHkgaXMsIHdlIGNhbiBvbmx5IHRlc3QgdGhhdAorICAgICAgICAjIHJlbGF0aXZlIGNoYW5nZXMgbWF0Y2guCisgICAgICAgIHV0Y29mZnNldCA9IHRpbWVkZWx0YShob3Vycz0tMTUsIG1pbnV0ZXM9MzkpICMgYXJiaXRyYXJ5LCBidXQgbm90IHplcm8KKyAgICAgICAgdHogPSBGaXhlZE9mZnNldCh1dGNvZmZzZXQsICJ0eiIsIDApCisgICAgICAgIGV4cGVjdGVkID0gdXRjZGF0ZXRpbWUgKyB1dGNvZmZzZXQKKyAgICAgICAgZ290ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXAsIHR6KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QucmVwbGFjZSh0emluZm89Tm9uZSkpCisKKyAgICBkZWYgdGVzdF90emluZm9fdXRjbm93KHNlbGYpOgorICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy51dGNub3cKKyAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCisgICAgICAgIGJhc2UgPSBtZXRoKCkKKyAgICAgICAgIyBUcnkgd2l0aCBhbmQgd2l0aG91dCBuYW1pbmcgdGhlIGtleXdvcmQ7IGZvciB3aGF0ZXZlciByZWFzb24sCisgICAgICAgICMgdXRjbm93KCkgZG9lc24ndCBhY2NlcHQgYSB0emluZm8gYXJndW1lbnQuCisgICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgb2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHppbmZvPW9mZjQyKQorCisgICAgZGVmIHRlc3RfdHppbmZvX3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6CisgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAKKyAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQorICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KKyAgICAgICAgYmFzZSA9IG1ldGgodHMpCisgICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkOyBmb3Igd2hhdGV2ZXIgcmVhc29uLAorICAgICAgICAjIHV0Y2Zyb210aW1lc3RhbXAoKSBkb2Vzbid0IGFjY2VwdCBhIHR6aW5mbyBhcmd1bWVudC4KKyAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgb2ZmNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHR6aW5mbz1vZmY0MikKKworICAgIGRlZiB0ZXN0X3R6aW5mb190aW1ldHVwbGUoc2VsZik6CisgICAgICAgICMgVGVzdERhdGVUaW1lIHRlc3RlZCBtb3N0IG9mIHRoaXMuICBkYXRldGltZSBhZGRzIGEgdHdpc3QgdG8gdGhlCisgICAgICAgICMgRFNUIGZsYWcuCisgICAgICAgIGNsYXNzIERTVCh0emluZm8pOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRzdHZhbHVlKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRzdHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgICAgICAgICBkc3R2YWx1ZSA9IHRpbWVkZWx0YShtaW51dGVzPWRzdHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuZHN0dmFsdWUgPSBkc3R2YWx1ZQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0dmFsdWUKKworICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgIGZvciBkc3R2YWx1ZSwgZmxhZyBpbiAoLTMzLCAxKSwgKDMzLCAxKSwgKDAsIDApLCAoTm9uZSwgLTEpOgorICAgICAgICAgICAgZCA9IGNscygxLCAxLCAxLCAxMCwgMjAsIDMwLCA0MCwgdHppbmZvPURTVChkc3R2YWx1ZSkpCisgICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX3llYXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1fbW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX21kYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCB0LnRtX2hvdXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwLCB0LnRtX21pbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzAsIHQudG1fc2VjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0LnRtX3dkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1feWRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZywgdC50bV9pc2RzdCkKKworICAgICAgICAjIGRzdCgpIHJldHVybnMgd3JvbmcgdHlwZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMoMSwgMSwgMSwgdHppbmZvPURTVCgieCIpKS50aW1ldHVwbGUpCisKKyAgICAgICAgIyBkc3QoKSBhdCB0aGUgZWRnZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscygxLDEsMSwgdHppbmZvPURTVCgtMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQorCisgICAgICAgICMgZHN0KCkgb3V0IG9mIHJhbmdlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQ0MCkpLnRpbWV0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKDEsMSwxLCB0emluZm89RFNUKC0xNDQwKSkudGltZXR1cGxlKQorCisgICAgZGVmIHRlc3RfdXRjdGltZXR1cGxlKHNlbGYpOgorICAgICAgICBjbGFzcyBEU1QodHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkc3R2YWx1ZT0wKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRzdHZhbHVlLCBpbnQpOgorICAgICAgICAgICAgICAgICAgICBkc3R2YWx1ZSA9IHRpbWVkZWx0YShtaW51dGVzPWRzdHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuZHN0dmFsdWUgPSBkc3R2YWx1ZQorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0dmFsdWUKKworICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCisgICAgICAgICMgVGhpcyBjYW4ndCB3b3JrOiAgRFNUIGRpZG4ndCBpbXBsZW1lbnQgdXRjb2Zmc2V0LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPURTVCgwKSkudXRjb2Zmc2V0KQorCisgICAgICAgIGNsYXNzIFVPRlMoRFNUKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1b2ZzLCBkb2ZzPU5vbmUpOgorICAgICAgICAgICAgICAgIERTVC5fX2luaXRfXyhzZWxmLCBkb2ZzKQorICAgICAgICAgICAgICAgIHNlbGYudW9mcyA9IHRpbWVkZWx0YShtaW51dGVzPXVvZnMpCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi51b2ZzCisKKyAgICAgICAgZm9yIGRzdHZhbHVlIGluIC0zMywgMzMsIDAsIE5vbmU6CisgICAgICAgICAgICBkID0gY2xzKDEsIDIsIDMsIDEwLCAyMCwgMzAsIDQwLCB0emluZm89VU9GUygtNTMsIGRzdHZhbHVlKSkKKyAgICAgICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQueWVhciwgdC50bV95ZWFyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1vbnRoLCB0LnRtX21vbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kYXksIHQudG1fbWRheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIHQudG1faG91cikgIyAyMG1tICsgNTNtbSA9IDFobiArIDEzbW0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTMsIHQudG1fbWluKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNlY29uZCwgdC50bV9zZWMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQud2Vla2RheSgpLCB0LnRtX3dkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudG9vcmRpbmFsKCkgLSBkYXRlKDEsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50bV95ZGF5KQorICAgICAgICAgICAgIyBFbnN1cmUgdG1faXNkc3QgaXMgMCByZWdhcmRsZXNzIG9mIHdoYXQgZHN0KCkgc2F5czogRFNUCisgICAgICAgICAgICAjIGlzIG5ldmVyIGluIGVmZmVjdCBmb3IgYSBVVEMgdGltZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKKworICAgICAgICAjIEZvciBuYWl2ZSBkYXRldGltZSwgdXRjdGltZXR1cGxlID09IHRpbWV0dXBsZSBleGNlcHQgZm9yIGlzZHN0CisgICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDApCisgICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6LTFdLCBkLnRpbWV0dXBsZSgpWzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKKyAgICAgICAgIyBTYW1lIGlmIHV0Y29mZnNldCBpcyBOb25lCisgICAgICAgIGNsYXNzIE5PRlMoRFNUKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1OT0ZTKCkpCisgICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6LTFdLCBkLnRpbWV0dXBsZSgpWzotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKKyAgICAgICAgIyBDaGVjayB0aGF0IGJhZCB0emluZm8gaXMgZGV0ZWN0ZWQKKyAgICAgICAgY2xhc3MgQk9GUyhEU1QpOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFU1QiCisgICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1CT0ZTKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC51dGN0aW1ldHVwbGUpCisKKyAgICAgICAgIyBDaGVjayB0aGF0IHV0Y3RpbWV0dXBsZSgpIGlzIHRoZSBzYW1lIGFzCisgICAgICAgICMgYXN0aW1lem9uZSh1dGMpLnRpbWV0dXBsZSgpCisgICAgICAgIGQgPSBjbHMoMjAxMCwgMTEsIDEzLCAxNCwgMTUsIDE2LCAxNzE4MTkpCisgICAgICAgIGZvciB0eiBpbiBbdGltZXpvbmUubWluLCB0aW1lem9uZS51dGMsIHRpbWV6b25lLm1heF06CisgICAgICAgICAgICBkdHogPSBkLnJlcGxhY2UodHppbmZvPXR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdHoudXRjdGltZXR1cGxlKClbOi0xXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHR6LmFzdGltZXpvbmUodGltZXpvbmUudXRjKS50aW1ldHVwbGUoKVs6LTFdKQorICAgICAgICAjIEF0IHRoZSBlZGdlcywgVVRDIGFkanVzdG1lbnQgY2FuIHByb2R1Y2UgeWVhcnMgb3V0LW9mLXJhbmdlCisgICAgICAgICMgZm9yIGEgZGF0ZXRpbWUgb2JqZWN0LiAgRW5zdXJlIHRoYXQgYW4gT3ZlcmZsb3dFcnJvciBpcworICAgICAgICAjIHJhaXNlZC4KKyAgICAgICAgdGlueSA9IGNscyhNSU5ZRUFSLCAxLCAxLCAwLCAwLCAzNywgdHppbmZvPVVPRlMoMTQzOSkpCisgICAgICAgICMgVGhhdCBnb2VzIGJhY2sgMSBtaW51dGUgbGVzcyB0aGFuIGEgZnVsbCBkYXkuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHRpbnkudXRjdGltZXR1cGxlKQorCisgICAgICAgIGh1Z2UgPSBjbHMoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDM3LCA5OTk5OTksIHR6aW5mbz1VT0ZTKC0xNDM5KSkKKyAgICAgICAgIyBUaGF0IGdvZXMgZm9yd2FyZCAxIG1pbnV0ZSBsZXNzIHRoYW4gYSBmdWxsIGRheS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgaHVnZS51dGN0aW1ldHVwbGUpCisgICAgICAgICMgTW9yZSBvdmVyZmxvdyBjYXNlcworICAgICAgICB0aW55ID0gY2xzLm1pbi5yZXBsYWNlKHR6aW5mbz10aW1lem9uZShNSU5VVEUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0aW55LnV0Y3RpbWV0dXBsZSkKKyAgICAgICAgaHVnZSA9IGNscy5tYXgucmVwbGFjZSh0emluZm89dGltZXpvbmUoLU1JTlVURSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGh1Z2UudXRjdGltZXR1cGxlKQorCisgICAgZGVmIHRlc3RfdHppbmZvX2lzb2Zvcm1hdChzZWxmKToKKyAgICAgICAgemVybyA9IEZpeGVkT2Zmc2V0KDAsICIrMDA6MDAiKQorICAgICAgICBwbHVzID0gRml4ZWRPZmZzZXQoMjIwLCAiKzAzOjQwIikKKyAgICAgICAgbWludXMgPSBGaXhlZE9mZnNldCgtMjMxLCAiLTAzOjUxIikKKyAgICAgICAgdW5rbm93biA9IEZpeGVkT2Zmc2V0KE5vbmUsICIiKQorCisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgZGF0ZXN0ciA9ICcwMDAxLTAyLTAzJworICAgICAgICBmb3Igb2ZzIGluIE5vbmUsIHplcm8sIHBsdXMsIG1pbnVzLCB1bmtub3duOgorICAgICAgICAgICAgZm9yIHVzIGluIDAsIDk4NzAwMToKKyAgICAgICAgICAgICAgICBkID0gY2xzKDEsIDIsIDMsIDQsIDUsIDU5LCB1cywgdHppbmZvPW9mcykKKyAgICAgICAgICAgICAgICB0aW1lc3RyID0gJzA0OjA1OjU5JyArICh1cyBhbmQgJy45ODcwMDEnIG9yICcnKQorICAgICAgICAgICAgICAgIG9mc3N0ciA9IG9mcyBpcyBub3QgTm9uZSBhbmQgZC50em5hbWUoKSBvciAnJworICAgICAgICAgICAgICAgIHRhaWxzdHIgPSB0aW1lc3RyICsgb2Zzc3RyCisgICAgICAgICAgICAgICAgaXNvID0gZC5pc29mb3JtYXQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNvLCBkYXRlc3RyICsgJ1QnICsgdGFpbHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbywgZC5pc29mb3JtYXQoJ1QnKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvZm9ybWF0KCdrJyksIGRhdGVzdHIgKyAnaycgKyB0YWlsc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29mb3JtYXQoJ1x1MTIzNCcpLCBkYXRlc3RyICsgJ1x1MTIzNCcgKyB0YWlsc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCBkYXRlc3RyICsgJyAnICsgdGFpbHN0cikKKworICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6CisgICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKKyAgICAgICAgejEwMCA9IEZpeGVkT2Zmc2V0KDEwMCwgIisxMDAiKQorICAgICAgICB6bTIwMCA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShtaW51dGVzPS0yMDApLCAiLTIwMCIpCisgICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgejEwMF0KKyAgICAgICAgYmFzZSA9IGNscygqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKKworICAgICAgICBpID0gMAorICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoInllYXIiLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb250aCIsIDMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRheSIsIDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhvdXIiLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInR6aW5mbyIsIHptMjAwKSk6CisgICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQorICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAorICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCisgICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKKyAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCisKKyAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCisgICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKKworICAgICAgICAjIE91dCBvZiBib3VuZHMuCisgICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgeWVhcj0yMDAxKQorCisgICAgZGVmIHRlc3RfbW9yZV9hc3RpbWV6b25lKHNlbGYpOgorICAgICAgICAjIFRoZSBpbmhlcml0ZWQgdGVzdF9hc3RpbWV6b25lIGNvdmVyZWQgc29tZSB0cml2aWFsIGFuZCBlcnJvciBjYXNlcy4KKyAgICAgICAgZm5vbmUgPSBGaXhlZE9mZnNldChOb25lLCAiTm9uZSIpCisgICAgICAgIGY0NG0gPSBGaXhlZE9mZnNldCg0NCwgIjQ0IikKKyAgICAgICAgZm01aCA9IEZpeGVkT2Zmc2V0KC10aW1lZGVsdGEoaG91cnM9NSksICJtMzAwIikKKworICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3Mubm93KHR6PWY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdC50emluZm8gaXMgZjQ0bSkKKyAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBkZWdlbmVyYXRlIHR6aW5mbyByYWlzZXMgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmbm9uZSkKKyAgICAgICAgIyBEaXR0byB3aXRoIE5vbmUgdHouCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgTm9uZSkKKyAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBzYW1lIHR6aW5mbyBtYWtlcyBubyBjaGFuZ2UuCisgICAgICAgIHggPSBkdC5hc3RpbWV6b25lKGR0LnR6aW5mbykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHgudHppbmZvIGlzIGY0NG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5kYXRlKCksIGR0LmRhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRpbWUoKSwgZHQudGltZSgpKQorCisgICAgICAgICMgUmVwbGFjaW5nIHdpdGggZGlmZmVyZW50IHR6aW5mbyBkb2VzIGFkanVzdC4KKyAgICAgICAgZ290ID0gZHQuYXN0aW1lem9uZShmbTVoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBmbTVoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKGhvdXJzPS01KSkKKyAgICAgICAgZXhwZWN0ZWQgPSBkdCAtIGR0LnV0Y29mZnNldCgpICAjIGluIGVmZmVjdCwgY29udmVydCB0byBVVEMKKyAgICAgICAgZXhwZWN0ZWQgKz0gZm01aC51dGNvZmZzZXQoZHQpICAjIGFuZCBmcm9tIHRoZXJlIHRvIGxvY2FsIHRpbWUKKyAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKHR6aW5mbz1mbTVoKSAjIGFuZCBhdHRhY2ggbmV3IHR6aW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC5kYXRlKCksIGV4cGVjdGVkLmRhdGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZSgpLCBleHBlY3RlZC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LnRpbWV0eigpLCBleHBlY3RlZC50aW1ldHooKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdvdC50emluZm8gaXMgZXhwZWN0ZWQudHppbmZvKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9hd2FyZV9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcworCisgICAgICAgICMgRW5zdXJlIHRoYXQgdXRjb2Zmc2V0KCkgaXMgaWdub3JlZCB3aGVuIHRoZSBvcGVyYW5kcyBoYXZlIHRoZQorICAgICAgICAjIHNhbWUgdHppbmZvIG1lbWJlci4KKyAgICAgICAgY2xhc3MgT3BlcmFuZERlcGVuZGVudE9mZnNldCh0emluZm8pOgorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBpZiB0Lm1pbnV0ZSA8IDEwOgorICAgICAgICAgICAgICAgICAgICAjIGQwIGFuZCBkMSBlcXVhbCBhZnRlciBhZGp1c3RtZW50CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz10Lm1pbnV0ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIGQyIG9mZiBpbiB0aGUgd2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTU5KQorCisgICAgICAgIGJhc2UgPSBjbHMoOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKKyAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCisgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKKyAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKKyAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICAgICAgZ290ID0geCAtIHkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YShtaW51dGVzPXgubWludXRlIC0geS5taW51dGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgICAgICMgT1RPSCwgaWYgdGhlIHR6aW5mbyBtZW1iZXJzIGFyZSBkaXN0aW5jdCwgdXRjb2Zmc2V0cyBhcmVuJ3QKKyAgICAgICAgIyBpZ25vcmVkLgorICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCkKKyAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGQxID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT05LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQorICAgICAgICBkMiA9IGJhc2UucmVwbGFjZShtaW51dGU9MTEsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCisgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6CisgICAgICAgICAgICBmb3IgeSBpbiBkMCwgZDEsIGQyOgorICAgICAgICAgICAgICAgIGdvdCA9IHggLSB5CisgICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQorICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQorICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oMTEtNTkpLTApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHkgaXMgZDIKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0wLSgxMS01OSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgdDEgPSBkYXRldGltZSgxLCAyLCAzLCA0LCA1LCA2LCA3KQorICAgICAgICB0MiA9IGRhdGV0aW1lKDEsIDIsIDMsIDQsIDUsIDYsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KE5vbmUsICIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCisKKyAgICAgICAgIyBJbiBkYXRldGltZSB3LyBpZGVudGljYWwgdHppbmZvIG9iamVjdHMsIHV0Y29mZnNldCBpcyBpZ25vcmVkLgorICAgICAgICBjbGFzcyBWYXJpZXModHppbmZvKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPTIyKQorICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKKyAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSB0aW1lZGVsdGEobWludXRlcz0xKQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAorCisgICAgICAgIHYgPSBWYXJpZXMoKQorICAgICAgICB0MSA9IHQyLnJlcGxhY2UodHppbmZvPXYpCisgICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89dikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQorCisgICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KKyAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGV0aW1ldHooc2VsZik6CisKKyAgICAgICAgY2xhc3MgQyhzZWxmLnRoZWNsYXNzKToKKyAgICAgICAgICAgIHRoZUFuc3dlciA9IDQyCisKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dzKToKKyAgICAgICAgICAgICAgICB0ZW1wID0ga3dzLmNvcHkoKQorICAgICAgICAgICAgICAgIGV4dHJhID0gdGVtcC5wb3AoJ2V4dHJhJykKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRoZWNsYXNzLl9fbmV3X18oY2xzLCAqYXJncywgKip0ZW1wKQorICAgICAgICAgICAgICAgIHJlc3VsdC5leHRyYSA9IGV4dHJhCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgICAgICBkZWYgbmV3bWV0aChzZWxmLCBzdGFydCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgc2VsZi5ob3VyICsgc2VsZi55ZWFyCisKKyAgICAgICAgYXJncyA9IDIwMDIsIDEyLCAzMSwgNCwgNSwgNiwgNTAwLCBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIiwgMSkKKworICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQorICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS51dGNvZmZzZXQoKSwgZHQyLnV0Y29mZnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEueWVhciAtIDcpCisKKyMgUGFpbiB0byBzZXQgdXAgRFNULWF3YXJlIHR6aW5mbyBjbGFzc2VzLgorCitkZWYgZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKGR0KToKKyAgICBkYXlzX3RvX2dvID0gNiAtIGR0LndlZWtkYXkoKQorICAgIGlmIGRheXNfdG9fZ286CisgICAgICAgIGR0ICs9IHRpbWVkZWx0YShkYXlzX3RvX2dvKQorICAgIHJldHVybiBkdAorCitaRVJPID0gdGltZWRlbHRhKDApCitNSU5VVEUgPSB0aW1lZGVsdGEobWludXRlcz0xKQorSE9VUiA9IHRpbWVkZWx0YShob3Vycz0xKQorREFZID0gdGltZWRlbHRhKGRheXM9MSkKKyMgSW4gdGhlIFVTLCBEU1Qgc3RhcnRzIGF0IDJhbSAoc3RhbmRhcmQgdGltZSkgb24gdGhlIGZpcnN0IFN1bmRheSBpbiBBcHJpbC4KK0RTVFNUQVJUID0gZGF0ZXRpbWUoMSwgNCwgMSwgMikKKyMgYW5kIGVuZHMgYXQgMmFtIChEU1QgdGltZTsgMWFtIHN0YW5kYXJkIHRpbWUpIG9uIHRoZSBsYXN0IFN1bmRheSBvZiBPY3QsCisjIHdoaWNoIGlzIHRoZSBmaXJzdCBTdW5kYXkgb24gb3IgYWZ0ZXIgT2N0IDI1LiAgQmVjYXVzZSB3ZSB2aWV3IDE6TU0gYXMKKyMgYmVpbmcgc3RhbmRhcmQgdGltZSBvbiB0aGF0IGRheSwgdGhlcmUgaXMgbm8gc3BlbGxpbmcgaW4gbG9jYWwgdGltZSBvZgorIyB0aGUgbGFzdCBob3VyIG9mIERTVCAodGhhdCdzIDE6TU0gRFNULCBidXQgMTpNTSBpcyB0YWtlbiBhcyBzdGFuZGFyZCB0aW1lKS4KK0RTVEVORCA9IGRhdGV0aW1lKDEsIDEwLCAyNSwgMSkKKworY2xhc3MgVVNUaW1lWm9uZSh0emluZm8pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvdXJzLCByZXBybmFtZSwgc3RkbmFtZSwgZHN0bmFtZSk6CisgICAgICAgIHNlbGYuc3Rkb2Zmc2V0ID0gdGltZWRlbHRhKGhvdXJzPWhvdXJzKQorICAgICAgICBzZWxmLnJlcHJuYW1lID0gcmVwcm5hbWUKKyAgICAgICAgc2VsZi5zdGRuYW1lID0gc3RkbmFtZQorICAgICAgICBzZWxmLmRzdG5hbWUgPSBkc3RuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJlcHJuYW1lCisKKyAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKKyAgICAgICAgaWYgc2VsZi5kc3QoZHQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0bmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3RkbmFtZQorCisgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6CisgICAgICAgIHJldHVybiBzZWxmLnN0ZG9mZnNldCArIHNlbGYuZHN0KGR0KQorCisgICAgZGVmIGRzdChzZWxmLCBkdCk6CisgICAgICAgIGlmIGR0IGlzIE5vbmUgb3IgZHQudHppbmZvIGlzIE5vbmU6CisgICAgICAgICAgICAjIEFuIGV4Y2VwdGlvbiBpbnN0ZWFkIG1heSBiZSBzZW5zaWJsZSBoZXJlLCBpbiBvbmUgb3IgbW9yZSBvZgorICAgICAgICAgICAgIyB0aGUgY2FzZXMuCisgICAgICAgICAgICByZXR1cm4gWkVSTworICAgICAgICBhc3NlcnQgZHQudHppbmZvIGlzIHNlbGYKKworICAgICAgICAjIEZpbmQgZmlyc3QgU3VuZGF5IGluIEFwcmlsLgorICAgICAgICBzdGFydCA9IGZpcnN0X3N1bmRheV9vbl9vcl9hZnRlcihEU1RTVEFSVC5yZXBsYWNlKHllYXI9ZHQueWVhcikpCisgICAgICAgIGFzc2VydCBzdGFydC53ZWVrZGF5KCkgPT0gNiBhbmQgc3RhcnQubW9udGggPT0gNCBhbmQgc3RhcnQuZGF5IDw9IDcKKworICAgICAgICAjIEZpbmQgbGFzdCBTdW5kYXkgaW4gT2N0b2Jlci4KKyAgICAgICAgZW5kID0gZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKERTVEVORC5yZXBsYWNlKHllYXI9ZHQueWVhcikpCisgICAgICAgIGFzc2VydCBlbmQud2Vla2RheSgpID09IDYgYW5kIGVuZC5tb250aCA9PSAxMCBhbmQgZW5kLmRheSA+PSAyNQorCisgICAgICAgICMgQ2FuJ3QgY29tcGFyZSBuYWl2ZSB0byBhd2FyZSBvYmplY3RzLCBzbyBzdHJpcCB0aGUgdGltZXpvbmUgZnJvbQorICAgICAgICAjIGR0IGZpcnN0LgorICAgICAgICBpZiBzdGFydCA8PSBkdC5yZXBsYWNlKHR6aW5mbz1Ob25lKSA8IGVuZDoKKyAgICAgICAgICAgIHJldHVybiBIT1VSCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gWkVSTworCitFYXN0ZXJuICA9IFVTVGltZVpvbmUoLTUsICJFYXN0ZXJuIiwgICJFU1QiLCAiRURUIikKK0NlbnRyYWwgID0gVVNUaW1lWm9uZSgtNiwgIkNlbnRyYWwiLCAgIkNTVCIsICJDRFQiKQorTW91bnRhaW4gPSBVU1RpbWVab25lKC03LCAiTW91bnRhaW4iLCAiTVNUIiwgIk1EVCIpCitQYWNpZmljICA9IFVTVGltZVpvbmUoLTgsICJQYWNpZmljIiwgICJQU1QiLCAiUERUIikKK3V0Y19yZWFsID0gRml4ZWRPZmZzZXQoMCwgIlVUQyIsIDApCisjIEZvciBiZXR0ZXIgdGVzdCBjb3ZlcmFnZSwgd2Ugd2FudCBhbm90aGVyIGZsYXZvciBvZiBVVEMgdGhhdCdzIHdlc3Qgb2YKKyMgdGhlIEVhc3Rlcm4gYW5kIFBhY2lmaWMgdGltZXpvbmVzLgordXRjX2Zha2UgPSBGaXhlZE9mZnNldCgtMTIqNjAsICJVVENmYWtlIiwgMCkKKworY2xhc3MgVGVzdFRpbWV6b25lQ29udmVyc2lvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIERTVCBzd2l0Y2ggdGltZXMgZm9yIDIwMDIsIGluIHN0ZCB0aW1lLgorICAgIGRzdG9uID0gZGF0ZXRpbWUoMjAwMiwgNCwgNywgMikKKyAgICBkc3RvZmYgPSBkYXRldGltZSgyMDAyLCAxMCwgMjcsIDEpCisKKyAgICB0aGVjbGFzcyA9IGRhdGV0aW1lCisKKyAgICAjIENoZWNrIGEgdGltZSB0aGF0J3MgaW5zaWRlIERTVC4KKyAgICBkZWYgY2hlY2tpbnNpZGUoc2VsZiwgZHQsIHR6LCB1dGMsIGRzdG9uLCBkc3RvZmYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRzdCgpLCBIT1VSKQorCisgICAgICAgICMgQ29udmVyc2lvbiB0byBvdXIgb3duIHRpbWV6b25lIGlzIGFsd2F5cyBhbiBpZGVudGl0eS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5hc3RpbWV6b25lKHR6KSwgZHQpCisKKyAgICAgICAgYXN1dGMgPSBkdC5hc3RpbWV6b25lKHV0YykKKyAgICAgICAgdGhlcmVfYW5kX2JhY2sgPSBhc3V0Yy5hc3RpbWV6b25lKHR6KQorCisgICAgICAgICMgQ29udmVyc2lvbiB0byBVVEMgYW5kIGJhY2sgaXNuJ3QgYWx3YXlzIGFuIGlkZW50aXR5IGhlcmUsCisgICAgICAgICMgYmVjYXVzZSB0aGVyZSBhcmUgcmVkdW5kYW50IHNwZWxsaW5ncyAoaW4gbG9jYWwgdGltZSkgb2YKKyAgICAgICAgIyBVVEMgdGltZSB3aGVuIERTVCBiZWdpbnM6ICB0aGUgY2xvY2sganVtcHMgZnJvbSAxOjU5OjU5CisgICAgICAgICMgdG8gMzowMDowMCwgYW5kIGEgbG9jYWwgdGltZSBvZiAyOk1NOlNTIGRvZXNuJ3QgcmVhbGx5CisgICAgICAgICMgbWFrZSBzZW5zZSB0aGVuLiAgVGhlIGNsYXNzZXMgYWJvdmUgdHJlYXQgMjpNTTpTUyBhcworICAgICAgICAjIGRheWxpZ2h0IHRpbWUgdGhlbiAoaXQncyAiYWZ0ZXIgMmFtIiksIHJlYWxseSBhbiBhbGlhcworICAgICAgICAjIGZvciAxOk1NOlNTIHN0YW5kYXJkIHRpbWUuICBUaGUgbGF0dGVyIGZvcm0gaXMgd2hhdAorICAgICAgICAjIGNvbnZlcnNpb24gYmFjayBmcm9tIFVUQyBwcm9kdWNlcy4KKyAgICAgICAgaWYgZHQuZGF0ZSgpID09IGRzdG9uLmRhdGUoKSBhbmQgZHQuaG91ciA9PSAyOgorICAgICAgICAgICAgIyBXZSdyZSBpbiB0aGUgcmVkdW5kYW50IGhvdXIsIGFuZCBjb21pbmcgYmFjayBmcm9tCisgICAgICAgICAgICAjIFVUQyBnaXZlcyB0aGUgMTpNTTpTUyBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVyZV9hbmRfYmFjayArIEhPVVIsIGR0KQorICAgICAgICAgICAgIyBBbHRob3VnaCBkdXJpbmcgd2FzIGNvbnNpZGVyZWQgdG8gYmUgaW4gZGF5bGlnaHQKKyAgICAgICAgICAgICMgdGltZSwgdGhlcmVfYW5kX2JhY2sgaXMgbm90LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVyZV9hbmRfYmFjay5kc3QoKSwgWkVSTykKKyAgICAgICAgICAgICMgVGhleSdyZSB0aGUgc2FtZSB0aW1lcyBpbiBVVEMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZXJlX2FuZF9iYWNrLmFzdGltZXpvbmUodXRjKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQuYXN0aW1lem9uZSh1dGMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBXZSdyZSBub3QgaW4gdGhlIHJlZHVuZGFudCBob3VyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgdGhlcmVfYW5kX2JhY2spCisKKyAgICAgICAgIyBCZWNhdXNlIHdlIGhhdmUgYSByZWR1bmRhbnQgc3BlbGxpbmcgd2hlbiBEU1QgYmVnaW5zLCB0aGVyZSBpcworICAgICAgICAjICh1bmZvcnR1bmF0ZWx5KSBhbiBob3VyIHdoZW4gRFNUIGVuZHMgdGhhdCBjYW4ndCBiZSBzcGVsbGVkIGF0IGFsbCBpbgorICAgICAgICAjIGxvY2FsIHRpbWUuICBXaGVuIERTVCBlbmRzLCB0aGUgY2xvY2sganVtcHMgZnJvbSAxOjU5IGJhY2sgdG8gMTowMAorICAgICAgICAjIGFnYWluLiAgVGhlIGhvdXIgMTpNTSBEU1QgaGFzIG5vIHNwZWxsaW5nIHRoZW46ICAxOk1NIGlzIHRha2VuIHRvIGJlCisgICAgICAgICMgc3RhbmRhcmQgdGltZS4gIDE6TU0gRFNUID09IDA6TU0gRVNULCBidXQgMDpNTSBpcyB0YWtlbiB0byBiZQorICAgICAgICAjIGRheWxpZ2h0IHRpbWUuICBUaGUgaG91ciAxOk1NIGRheWxpZ2h0ID09IDA6TU0gc3RhbmRhcmQgY2FuJ3QgYmUKKyAgICAgICAgIyBleHByZXNzZWQgaW4gbG9jYWwgdGltZS4gIE5ldmVydGhlbGVzcywgd2Ugd2FudCBjb252ZXJzaW9uIGJhY2sKKyAgICAgICAgIyBmcm9tIFVUQyB0byBtaW1pYyB0aGUgbG9jYWwgY2xvY2sncyAicmVwZWF0IGFuIGhvdXIiIGJlaGF2aW9yLgorICAgICAgICBuZXh0aG91cl91dGMgPSBhc3V0YyArIEhPVVIKKyAgICAgICAgbmV4dGhvdXJfdHogPSBuZXh0aG91cl91dGMuYXN0aW1lem9uZSh0eikKKyAgICAgICAgaWYgZHQuZGF0ZSgpID09IGRzdG9mZi5kYXRlKCkgYW5kIGR0LmhvdXIgPT0gMDoKKyAgICAgICAgICAgICMgV2UncmUgaW4gdGhlIGhvdXIgYmVmb3JlIHRoZSBsYXN0IERTVCBob3VyLiAgVGhlIGxhc3QgRFNUIGhvdXIKKyAgICAgICAgICAgICMgaXMgaW5lZmZhYmxlLiAgV2Ugd2FudCB0aGUgY29udmVyc2lvbiBiYWNrIHRvIHJlcGVhdCAxOk1NLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0aG91cl90eiwgZHQucmVwbGFjZShob3VyPTEpKQorICAgICAgICAgICAgbmV4dGhvdXJfdXRjICs9IEhPVVIKKyAgICAgICAgICAgIG5leHRob3VyX3R6ID0gbmV4dGhvdXJfdXRjLmFzdGltZXpvbmUodHopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRob3VyX3R6LCBkdC5yZXBsYWNlKGhvdXI9MSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRob3VyX3R6IC0gZHQsIEhPVVIpCisKKyAgICAjIENoZWNrIGEgdGltZSB0aGF0J3Mgb3V0c2lkZSBEU1QuCisgICAgZGVmIGNoZWNrb3V0c2lkZShzZWxmLCBkdCwgdHosIHV0Yyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZHN0KCksIFpFUk8pCisKKyAgICAgICAgIyBDb252ZXJzaW9uIHRvIG91ciBvd24gdGltZXpvbmUgaXMgYWx3YXlzIGFuIGlkZW50aXR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmFzdGltZXpvbmUodHopLCBkdCkKKworICAgICAgICAjIENvbnZlcnRpbmcgdG8gVVRDIGFuZCBiYWNrIGlzIGFuIGlkZW50aXR5IHRvby4KKyAgICAgICAgYXN1dGMgPSBkdC5hc3RpbWV6b25lKHV0YykKKyAgICAgICAgdGhlcmVfYW5kX2JhY2sgPSBhc3V0Yy5hc3RpbWV6b25lKHR6KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCB0aGVyZV9hbmRfYmFjaykKKworICAgIGRlZiBjb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhzZWxmLCB0eiwgdXRjKToKKyAgICAgICAgZHN0b24gPSBzZWxmLmRzdG9uLnJlcGxhY2UodHppbmZvPXR6KQorICAgICAgICAjIEJlY2F1c2UgMTpNTSBvbiB0aGUgZGF5IERTVCBlbmRzIGlzIHRha2VuIGFzIGJlaW5nIHN0YW5kYXJkIHRpbWUsCisgICAgICAgICMgdGhlcmUgaXMgbm8gc3BlbGxpbmcgaW4gdHogZm9yIHRoZSBsYXN0IGhvdXIgb2YgZGF5bGlnaHQgdGltZS4KKyAgICAgICAgIyBGb3IgcHVycG9zZXMgb2YgdGhlIHRlc3QsIHRoZSBsYXN0IGhvdXIgb2YgRFNUIGlzIDA6TU0sIHdoaWNoIGlzCisgICAgICAgICMgdGFrZW4gYXMgYmVpbmcgZGF5bGlnaHQgdGltZSAoYW5kIDE6TU0gaXMgdGFrZW4gYXMgYmVpbmcgc3RhbmRhcmQKKyAgICAgICAgIyB0aW1lKS4KKyAgICAgICAgZHN0b2ZmID0gc2VsZi5kc3RvZmYucmVwbGFjZSh0emluZm89dHopCisgICAgICAgIGZvciBkZWx0YSBpbiAodGltZWRlbHRhKHdlZWtzPTEzKSwKKyAgICAgICAgICAgICAgICAgICAgICBEQVksCisgICAgICAgICAgICAgICAgICAgICAgSE9VUiwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEobWludXRlcz0xKSwKKyAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEobWljcm9zZWNvbmRzPTEpKToKKworICAgICAgICAgICAgc2VsZi5jaGVja2luc2lkZShkc3RvbiwgdHosIHV0YywgZHN0b24sIGRzdG9mZikKKyAgICAgICAgICAgIGZvciBkdXJpbmcgaW4gZHN0b24gKyBkZWx0YSwgZHN0b2ZmIC0gZGVsdGE6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2luc2lkZShkdXJpbmcsIHR6LCB1dGMsIGRzdG9uLCBkc3RvZmYpCisKKyAgICAgICAgICAgIHNlbGYuY2hlY2tvdXRzaWRlKGRzdG9mZiwgdHosIHV0YykKKyAgICAgICAgICAgIGZvciBvdXRzaWRlIGluIGRzdG9uIC0gZGVsdGEsIGRzdG9mZiArIGRlbHRhOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tvdXRzaWRlKG91dHNpZGUsIHR6LCB1dGMpCisKKyAgICBkZWYgdGVzdF9lYXN5KHNlbGYpOgorICAgICAgICAjIERlc3BpdGUgdGhlIG5hbWUgb2YgdGhpcyB0ZXN0LCB0aGUgZW5kY2FzZXMgYXJlIGV4Y3J1Y2lhdGluZy4KKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhFYXN0ZXJuLCB1dGNfcmVhbCkKKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhQYWNpZmljLCB1dGNfcmVhbCkKKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhFYXN0ZXJuLCB1dGNfZmFrZSkKKyAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhQYWNpZmljLCB1dGNfZmFrZSkKKyAgICAgICAgIyBUaGUgbmV4dCBpcyByZWFsbHkgZGFuY2luZyBuZWFyIHRoZSBlZGdlLiAgSXQgd29ya3MgYmVjYXVzZQorICAgICAgICAjIFBhY2lmaWMgYW5kIEVhc3Rlcm4gYXJlIGZhciBlbm91Z2ggYXBhcnQgdGhhdCB0aGVpciAicHJvYmxlbQorICAgICAgICAjIGhvdXJzIiBkb24ndCBvdmVybGFwLgorICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIFBhY2lmaWMpCisgICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoUGFjaWZpYywgRWFzdGVybikKKyAgICAgICAgIyBPVE9ILCB0aGVzZSBmYWlsISAgRG9uJ3QgZW5hYmxlIHRoZW0uICBUaGUgZGlmZmljdWx0eSBpcyB0aGF0CisgICAgICAgICMgdGhlIGVkZ2UgY2FzZSB0ZXN0cyBhc3N1bWUgdGhhdCBldmVyeSBob3VyIGlzIHJlcHJlc2VudGFibGUgaW4KKyAgICAgICAgIyB0aGUgInV0YyIgY2xhc3MuICBUaGlzIGlzIGFsd2F5cyB0cnVlIGZvciBhIGZpeGVkLW9mZnNldCB0emluZm8KKyAgICAgICAgIyBjbGFzcyAobGtlIHV0Y19yZWFsIGFuZCB1dGNfZmFrZSksIGJ1dCBub3QgZm9yIEVhc3Rlcm4gb3IgQ2VudHJhbC4KKyAgICAgICAgIyBGb3IgdGhlc2UgYWRqYWNlbnQgRFNULWF3YXJlIHRpbWUgem9uZXMsIHRoZSByYW5nZSBvZiB0aW1lIG9mZnNldHMKKyAgICAgICAgIyB0ZXN0ZWQgZW5kcyB1cCBjcmVhdGluZyBob3VycyBpbiB0aGUgb25lIHRoYXQgYXJlbid0IHJlcHJlc2VudGFibGUKKyAgICAgICAgIyBpbiB0aGUgb3RoZXIuICBGb3IgdGhlIHNhbWUgcmVhc29uLCB3ZSB3b3VsZCBzZWUgZmFpbHVyZXMgaW4gdGhlCisgICAgICAgICMgRWFzdGVybiB2cyBQYWNpZmljIHRlc3RzIHRvbyBpZiB3ZSBhZGRlZCAzKkhPVVIgdG8gdGhlIGxpc3Qgb2YKKyAgICAgICAgIyBvZmZzZXQgZGVsdGFzIGluIGNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKCkuCisgICAgICAgICMKKyAgICAgICAgIyBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIENlbnRyYWwpICAjIGNhbid0IHdvcmsKKyAgICAgICAgIyBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKENlbnRyYWwsIEVhc3Rlcm4pICAjIGNhbid0IHdvcmsKKworICAgIGRlZiB0ZXN0X3RyaWNreShzZWxmKToKKyAgICAgICAgIyAyMjowMCBvbiBkYXkgYmVmb3JlIGRheWxpZ2h0IHN0YXJ0cy4KKyAgICAgICAgZm91cmJhY2sgPSBzZWxmLmRzdG9uIC0gdGltZWRlbHRhKGhvdXJzPTQpCisgICAgICAgIG5pbmV3ZXN0ID0gRml4ZWRPZmZzZXQoLTkqNjAsICItMDkwMCIsIDApCisgICAgICAgIGZvdXJiYWNrID0gZm91cmJhY2sucmVwbGFjZSh0emluZm89bmluZXdlc3QpCisgICAgICAgICMgMjI6MDAtMDkwMCBpcyA3OjAwIFVUQyA9PSAyOjAwIEVTVCA9PSAzOjAwIERTVC4gIFNpbmNlIGl0J3MgImFmdGVyCisgICAgICAgICMgMiIsIHdlIHNob3VsZCBnZXQgdGhlIDMgc3BlbGxpbmcuCisgICAgICAgICMgSWYgd2UgcGx1ZyAyMjowMCB0aGUgZGF5IGJlZm9yZSBpbnRvIEVhc3Rlcm4sIGl0ICJsb29rcyBsaWtlIHN0ZAorICAgICAgICAjIHRpbWUiLCBzbyBpdHMgb2Zmc2V0IGlzIHJldHVybmVkIGFzIC01LCBhbmQgLTUgLSAtOSA9IDQuICBBZGRpbmcgNAorICAgICAgICAjIHRvIDIyOjAwIGxhbmRzIG9uIDI6MDAsIHdoaWNoIG1ha2VzIG5vIHNlbnNlIGluIGxvY2FsIHRpbWUgKHRoZQorICAgICAgICAjIGxvY2FsIGNsb2NrIGp1bXBzIGZyb20gMSB0byAzKS4gIFRoZSBwb2ludCBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAjIGdldCB0aGUgMyBzcGVsbGluZy4KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmRzdG9uLnJlcGxhY2UoaG91cj0zKQorICAgICAgICBnb3QgPSBmb3VyYmFjay5hc3RpbWV6b25lKEVhc3Rlcm4pLnJlcGxhY2UodHppbmZvPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAjIFNpbWlsYXIsIGJ1dCBtYXAgdG8gNjowMCBVVEMgPT0gMTowMCBFU1QgPT0gMjowMCBEU1QuICBJbiB0aGF0CisgICAgICAgICMgY2FzZSB3ZSB3YW50IHRoZSAxOjAwIHNwZWxsaW5nLgorICAgICAgICBzaXh1dGMgPSBzZWxmLmRzdG9uLnJlcGxhY2UoaG91cj02LCB0emluZm89dXRjX3JlYWwpCisgICAgICAgICMgTm93IDY6MDAgImxvb2tzIGxpa2UgZGF5bGlnaHQiLCBzbyB0aGUgb2Zmc2V0IHdydCBFYXN0ZXJuIGlzIC00LAorICAgICAgICAjIGFuZCBhZGRpbmcgLTQtMCA9PSAtNCBnaXZlcyB0aGUgMjowMCBzcGVsbGluZy4gIFdlIHdhbnQgdGhlIDE6MDAgRVNUCisgICAgICAgICMgc3BlbGxpbmcuCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5kc3Rvbi5yZXBsYWNlKGhvdXI9MSkKKyAgICAgICAgZ290ID0gc2l4dXRjLmFzdGltZXpvbmUoRWFzdGVybikucmVwbGFjZSh0emluZm89Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICMgTm93IG9uIHRoZSBkYXkgRFNUIGVuZHMsIHdlIHdhbnQgInJlcGVhdCBhbiBob3VyIiBiZWhhdmlvci4KKyAgICAgICAgIyAgVVRDICA0Ok1NICA1Ok1NICA2Ok1NICA3Ok1NICBjaGVja2luZyB0aGVzZQorICAgICAgICAjICBFU1QgMjM6TU0gIDA6TU0gIDE6TU0gIDI6TU0KKyAgICAgICAgIyAgRURUICAwOk1NICAxOk1NICAyOk1NICAzOk1NCisgICAgICAgICMgd2FsbCAgMDpNTSAgMTpNTSAgMTpNTSAgMjpNTSAgYWdhaW5zdCB0aGVzZQorICAgICAgICBmb3IgdXRjIGluIHV0Y19yZWFsLCB1dGNfZmFrZToKKyAgICAgICAgICAgIGZvciB0eiBpbiBFYXN0ZXJuLCBQYWNpZmljOgorICAgICAgICAgICAgICAgIGZpcnN0X3N0ZF9ob3VyID0gc2VsZi5kc3RvZmYgLSB0aW1lZGVsdGEoaG91cnM9MikgIyAyMzpNTQorICAgICAgICAgICAgICAgICMgQ29udmVydCB0aGF0IHRvIFVUQy4KKyAgICAgICAgICAgICAgICBmaXJzdF9zdGRfaG91ciAtPSB0ei51dGNvZmZzZXQoTm9uZSkKKyAgICAgICAgICAgICAgICAjIEFkanVzdCBmb3IgcG9zc2libHkgZmFrZSBVVEMuCisgICAgICAgICAgICAgICAgYXN1dGMgPSBmaXJzdF9zdGRfaG91ciArIHV0Yy51dGNvZmZzZXQoTm9uZSkKKyAgICAgICAgICAgICAgICAjIEZpcnN0IFVUQyBob3VyIHRvIGNvbnZlcnQ7IHRoaXMgaXMgNDowMCB3aGVuIHV0Yz11dGNfcmVhbCAmCisgICAgICAgICAgICAgICAgIyB0ej1FYXN0ZXJuLgorICAgICAgICAgICAgICAgIGFzdXRjYmFzZSA9IGFzdXRjLnJlcGxhY2UodHppbmZvPXV0YykKKyAgICAgICAgICAgICAgICBmb3IgdHpob3VyIGluICgwLCAxLCAxLCAyKToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRiYXNlID0gc2VsZi5kc3RvZmYucmVwbGFjZShob3VyPXR6aG91cikKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1pbnV0ZSBpbiAwLCAzMCwgNTk6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkYmFzZS5yZXBsYWNlKG1pbnV0ZT1taW51dGUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3V0YyA9IGFzdXRjYmFzZS5yZXBsYWNlKG1pbnV0ZT1taW51dGUpCisgICAgICAgICAgICAgICAgICAgICAgICBhc3R6ID0gYXN1dGMuYXN0aW1lem9uZSh0eikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0ei5yZXBsYWNlKHR6aW5mbz1Ob25lKSwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIGFzdXRjYmFzZSArPSBIT1VSCisKKworICAgIGRlZiB0ZXN0X2JvZ3VzX2RzdChzZWxmKToKKyAgICAgICAgY2xhc3Mgb2sodHppbmZvKToKKyAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gSE9VUgorICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiBIT1VSCisKKyAgICAgICAgbm93ID0gc2VsZi50aGVjbGFzcy5ub3coKS5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkKKyAgICAgICAgIyBEb2Vzbid0IGJsb3cgdXAuCisgICAgICAgIG5vdy5hc3RpbWV6b25lKG9rKCkpCisKKyAgICAgICAgIyBEb2VzIGJsb3cgdXAuCisgICAgICAgIGNsYXNzIG5vdG9rKG9rKToKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBub3cuYXN0aW1lem9uZSwgbm90b2soKSkKKworICAgICAgICAjIFNvbWV0aW1lcyBibG93IHVwLiBJbiB0aGUgZm9sbG93aW5nLCB0emluZm8uZHN0KCkKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBtYXkgcmV0dXJuIE5vbmUgb3Igbm90IE5vbmUgZGVwZW5kaW5nIG9uCisgICAgICAgICMgd2hldGhlciBEU1QgaXMgYXNzdW1lZCB0byBiZSBpbiBlZmZlY3QuICBJbiB0aGlzIHNpdHVhdGlvbiwKKyAgICAgICAgIyBhIFZhbHVlRXJyb3Igc2hvdWxkIGJlIHJhaXNlZCBieSBhc3RpbWV6b25lKCkuCisgICAgICAgIGNsYXNzIHRyaWNreV9ub3Rvayhvayk6CisgICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICBpZiBkdC55ZWFyID09IDIwMDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEwKkhPVVIKKyAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDEsIDEsIDEpLnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCB0cmlja3lfbm90b2soKSkKKworICAgIGRlZiB0ZXN0X2Zyb211dGMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRWFzdGVybi5mcm9tdXRjKSAgICMgbm90IGVub3VnaCBhcmdzCisgICAgICAgIG5vdyA9IGRhdGV0aW1lLnV0Y25vdygpLnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBFYXN0ZXJuLmZyb211dGMsIG5vdykgIyB3cm9uZyB0emluZm8KKyAgICAgICAgbm93ID0gbm93LnJlcGxhY2UodHppbmZvPUVhc3Rlcm4pICAgIyBpbnNlcnQgY29ycmVjdCB0emluZm8KKyAgICAgICAgZW5vdyA9IEVhc3Rlcm4uZnJvbXV0Yyhub3cpICAgICAgICAgIyBkb2Vzbid0IGJsb3cgdXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbm93LnR6aW5mbywgRWFzdGVybikgIyBoYXMgcmlnaHQgdHppbmZvIG1lbWJlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEVhc3Rlcm4uZnJvbXV0Yywgbm93LCBub3cpICMgdG9vIG1hbnkgYXJncworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEVhc3Rlcm4uZnJvbXV0YywgZGF0ZS50b2RheSgpKSAjIHdyb25nIHR5cGUKKworICAgICAgICAjIEFsd2F5cyBjb252ZXJ0cyBVVEMgdG8gc3RhbmRhcmQgdGltZS4KKyAgICAgICAgY2xhc3MgRmF1eFVTVGltZVpvbmUoVVNUaW1lWm9uZSk6CisgICAgICAgICAgICBkZWYgZnJvbXV0YyhzZWxmLCBkdCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGR0ICsgc2VsZi5zdGRvZmZzZXQKKyAgICAgICAgRkVhc3Rlcm4gID0gRmF1eFVTVGltZVpvbmUoLTUsICJGRWFzdGVybiIsICAiRkVTVCIsICJGRURUIikKKworICAgICAgICAjICBVVEMgIDQ6TU0gIDU6TU0gIDY6TU0gIDc6TU0gIDg6TU0gIDk6TU0KKyAgICAgICAgIyAgRVNUIDIzOk1NICAwOk1NICAxOk1NICAyOk1NICAzOk1NICA0Ok1NCisgICAgICAgICMgIEVEVCAgMDpNTSAgMTpNTSAgMjpNTSAgMzpNTSAgNDpNTSAgNTpNTQorCisgICAgICAgICMgQ2hlY2sgYXJvdW5kIERTVCBzdGFydC4KKyAgICAgICAgc3RhcnQgPSBzZWxmLmRzdG9uLnJlcGxhY2UoaG91cj00LCB0emluZm89RWFzdGVybikKKyAgICAgICAgZnN0YXJ0ID0gc3RhcnQucmVwbGFjZSh0emluZm89RkVhc3Rlcm4pCisgICAgICAgIGZvciB3YWxsIGluIDIzLCAwLCAxLCAzLCA0LCA1OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdGFydC5yZXBsYWNlKGhvdXI9d2FsbCkKKyAgICAgICAgICAgIGlmIHdhbGwgPT0gMjM6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgLT0gdGltZWRlbHRhKGRheXM9MSkKKyAgICAgICAgICAgIGdvdCA9IEVhc3Rlcm4uZnJvbXV0YyhzdGFydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgZXhwZWN0ZWQgPSBmc3RhcnQgKyBGRWFzdGVybi5zdGRvZmZzZXQKKyAgICAgICAgICAgIGdvdCA9IEZFYXN0ZXJuLmZyb211dGMoZnN0YXJ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICAjIEVuc3VyZSBhc3RpbWV6b25lKCkgY2FsbHMgZnJvbXV0YygpIHRvby4KKyAgICAgICAgICAgIGdvdCA9IGZzdGFydC5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkuYXN0aW1lem9uZShGRWFzdGVybikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKKworICAgICAgICAgICAgc3RhcnQgKz0gSE9VUgorICAgICAgICAgICAgZnN0YXJ0ICs9IEhPVVIKKworICAgICAgICAjIENoZWNrIGFyb3VuZCBEU1QgZW5kLgorICAgICAgICBzdGFydCA9IHNlbGYuZHN0b2ZmLnJlcGxhY2UoaG91cj00LCB0emluZm89RWFzdGVybikKKyAgICAgICAgZnN0YXJ0ID0gc3RhcnQucmVwbGFjZSh0emluZm89RkVhc3Rlcm4pCisgICAgICAgIGZvciB3YWxsIGluIDAsIDEsIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBleHBlY3RlZCA9IHN0YXJ0LnJlcGxhY2UoaG91cj13YWxsKQorICAgICAgICAgICAgZ290ID0gRWFzdGVybi5mcm9tdXRjKHN0YXJ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICBleHBlY3RlZCA9IGZzdGFydCArIEZFYXN0ZXJuLnN0ZG9mZnNldAorICAgICAgICAgICAgZ290ID0gRkVhc3Rlcm4uZnJvbXV0Yyhmc3RhcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCisKKyAgICAgICAgICAgICMgRW5zdXJlIGFzdGltZXpvbmUoKSBjYWxscyBmcm9tdXRjKCkgdG9vLgorICAgICAgICAgICAgZ290ID0gZnN0YXJ0LnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKS5hc3RpbWV6b25lKEZFYXN0ZXJuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorCisgICAgICAgICAgICBzdGFydCArPSBIT1VSCisgICAgICAgICAgICBmc3RhcnQgKz0gSE9VUgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG9kZGJhbGxzCisKK2NsYXNzIE9kZGJhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2J1Z18xMDI4MzA2KHNlbGYpOgorICAgICAgICAjIFRyeWluZyB0byBjb21wYXJlIGEgZGF0ZSB0byBhIGRhdGV0aW1lIHNob3VsZCBhY3QgbGlrZSBhIG1peGVkLQorICAgICAgICAjIHR5cGUgY29tcGFyaXNvbiwgZGVzcGl0ZSB0aGF0IGRhdGV0aW1lIGlzIGEgc3ViY2xhc3Mgb2YgZGF0ZS4KKyAgICAgICAgYXNfZGF0ZSA9IGRhdGUudG9kYXkoKQorICAgICAgICBhc19kYXRldGltZSA9IGRhdGV0aW1lLmNvbWJpbmUoYXNfZGF0ZSwgdGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXNfZGF0ZSAhPSBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGV0aW1lICE9IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZSA9PSBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhc19kYXRldGltZSA9PSBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA8IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZXRpbWUgPCBhc19kYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA8PSBhc19kYXRldGltZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lIDw9IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlID4gYXNfZGF0ZXRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA+IGFzX2RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRlID49IGFzX2RhdGV0aW1lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZXRpbWUgPj0gYXNfZGF0ZSkKKworICAgICAgICAjIE5ldmVydGhlbHNzLCBjb21wYXJpc29uIHNob3VsZCB3b3JrIHdpdGggdGhlIGJhc2UtY2xhc3MgKGRhdGUpCisgICAgICAgICMgcHJvamVjdGlvbiBpZiB1c2Ugb2YgYSBkYXRlIG1ldGhvZCBpcyBmb3JjZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfZGF0ZS5fX2VxX18oYXNfZGF0ZXRpbWUpLCBUcnVlKQorICAgICAgICBkaWZmZXJlbnRfZGF5ID0gKGFzX2RhdGUuZGF5ICsgMSkgJSAyMCArIDEKKyAgICAgICAgYXNfZGlmZmVyZW50ID0gYXNfZGF0ZXRpbWUucmVwbGFjZShkYXk9IGRpZmZlcmVudF9kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfZGF0ZS5fX2VxX18oYXNfZGlmZmVyZW50KSwgRmFsc2UpCisKKyAgICAgICAgIyBBbmQgZGF0ZSBzaG91bGQgY29tcGFyZSB3aXRoIG90aGVyIHN1YmNsYXNzZXMgb2YgZGF0ZS4gIElmIGEKKyAgICAgICAgIyBzdWJjbGFzcyB3YW50cyB0byBzdG9wIHRoaXMsIGl0J3MgdXAgdG8gdGhlIHN1YmNsYXNzIHRvIGRvIHNvLgorICAgICAgICBkYXRlX3NjID0gU3ViY2xhc3NEYXRlKGFzX2RhdGUueWVhciwgYXNfZGF0ZS5tb250aCwgYXNfZGF0ZS5kYXkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfZGF0ZSwgZGF0ZV9zYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRlX3NjLCBhc19kYXRlKQorCisgICAgICAgICMgRGl0dG8gZm9yIGRhdGV0aW1lcy4KKyAgICAgICAgZGF0ZXRpbWVfc2MgPSBTdWJjbGFzc0RhdGV0aW1lKGFzX2RhdGV0aW1lLnllYXIsIGFzX2RhdGV0aW1lLm1vbnRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNfZGF0ZS5kYXksIDAsIDAsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNfZGF0ZXRpbWUsIGRhdGV0aW1lX3NjKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lX3NjLCBhc19kYXRldGltZSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvYW5kLmRlY1Rlc3QKaW5kZXggYTBjYzc4Ni4uZTkxMjM5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2FuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9hbmQuZGVjVGVzdApAQCAtMSwzMzggKzEsMzM4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKLWFuZHgwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCi1hbmR4MDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMAotYW5keDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDAKLWFuZHgwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCi1hbmR4MDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMAotYW5keDAwNiBhbmQgICAgICAgICAgMTExMSAgIDEwIC0+ICAgMTAKLWFuZHgwMDcgYW5kICAgICAgICAgIDExMTEgMTAxMCAtPiAxMDEwCi0KLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCi1hbmR4MDEwIGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDExIGFuZCAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDEyIGFuZCAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDEzIGFuZCAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCi1hbmR4MDE0IGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDE1IGFuZCAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDE2IGFuZCAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1hbmR4MDE3IGFuZCAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCi0KLS0tIFZhcmlvdXMgbGVuZ3RocwotLS0gICAgICAgICAgMTIzNDU2Nzg5ICAgICAxMjM0NTY3ODkgICAgICAxMjM0NTY3ODkKLWFuZHgwMjEgYW5kIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCi1hbmR4MDIyIGFuZCAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQotYW5keDAyMyBhbmQgMTExMTExMTExMTExICAgMTExMTExMTEgIC0+ICAgMTExMTExMTEKLWFuZHgwMjQgYW5kIDExMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExCi1hbmR4MDI1IGFuZCAxMTExMTExMTEgICAgICAgMTExMTExMSAgLT4gICAgMTExMTExMQotYW5keDAyNiBhbmQgMTExMTExMTExMTExICAgICAxMTExMTEgIC0+ICAgICAxMTExMTEKLWFuZHgwMjcgYW5kIDExMTExMTExMTExMSAgICAgIDExMTExICAtPiAgICAgIDExMTExCi1hbmR4MDI4IGFuZCAxMTExMTExMTExMTEgICAgICAgMTExMSAgLT4gICAgICAgMTExMQotYW5keDAyOSBhbmQgMTExMTExMTExMTExICAgICAgICAxMTEgIC0+ICAgICAgICAxMTEKLWFuZHgwMzEgYW5kIDExMTExMTExMTExMSAgICAgICAgIDExICAtPiAgICAgICAgIDExCi1hbmR4MDMyIGFuZCAxMTExMTExMTExMTEgICAgICAgICAgMSAgLT4gICAgICAgICAgMQotYW5keDAzMyBhbmQgMTExMTExMTExMTExIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLWFuZHgwMzQgYW5kIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExCi1hbmR4MDM1IGFuZCAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQotYW5keDAzNiBhbmQgMTExMTExMTExIDExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLQotYW5keDA0MCBhbmQgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLWFuZHgwNDEgYW5kICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgIDExMTExMTExCi1hbmR4MDQyIGFuZCAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gICAxMTExMTExMQotYW5keDA0MyBhbmQgICAxMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgIDExMTExMTEKLWFuZHgwNDQgYW5kICAgIDExMTExMSAgICAgMTExMTExMTExICAtPiAgICAgMTExMTExCi1hbmR4MDQ1IGFuZCAgICAgMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgICAxMTExMQotYW5keDA0NiBhbmQgICAgICAxMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgIDExMTEKLWFuZHgwNDcgYW5kICAgICAgIDExMSAgICAgMTExMTExMTExICAtPiAgICAgICAgMTExCi1hbmR4MDQ4IGFuZCAgICAgICAgMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMQotYW5keDA0OSBhbmQgICAgICAgICAxICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgIDEKLQotYW5keDA1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDEKLWFuZHgwNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxCi1hbmR4MDUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQotYW5keDA1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDEKLWFuZHgwNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxCi1hbmR4MDU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQotYW5keDA1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDEKLWFuZHgwNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxCi1hbmR4MDU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQotYW5keDA1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDEKLQotYW5keDA2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDAKLWFuZHgwNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwCi1hbmR4MDYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMAotYW5keDA2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDAKLWFuZHgwNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwCi1hbmR4MDY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMAotYW5keDA2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDAKLWFuZHgwNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwCi1hbmR4MDY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMAotYW5keDA2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDAKLQotYW5keDA3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDEKLWFuZHgwNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxCi1hbmR4MDcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQotYW5keDA3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDEKLWFuZHgwNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxCi1hbmR4MDc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQotYW5keDA3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDEKLWFuZHgwNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxCi1hbmR4MDc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQotYW5keDA3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDEKLQotYW5keDA4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDAKLWFuZHgwODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwCi1hbmR4MDgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMAotYW5keDA4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDAKLWFuZHgwODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwCi1hbmR4MDg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMAotYW5keDA4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDAKLWFuZHgwODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwCi1hbmR4MDg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMAotYW5keDA4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDAKLQotYW5keDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKLWFuZHgwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExCi1hbmR4MDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQotYW5keDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTEKLWFuZHgwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExCi1hbmR4MDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQotYW5keDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTEKLWFuZHgwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxCi1hbmR4MDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAotCi1hbmR4MTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQotYW5keDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTEKLWFuZHgxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExCi1hbmR4MTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQotYW5keDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKLWFuZHgxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExCi1hbmR4MTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQotYW5keDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDEKLWFuZHgxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotYW5keDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLWFuZHgyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWFuZHgyNTAgYW5kICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTEgYW5kICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTIgYW5kICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTMgYW5kICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTQgYW5kICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTUgYW5kICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTYgYW5kICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTcgYW5kICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTggYW5kICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNTkgYW5kICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjAgYW5kICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjEgYW5kICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjIgYW5kICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjMgYW5kICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjQgYW5kICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNjUgYW5kICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTVNELTEKLWFuZHgyNzAgYW5kICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzEgYW5kICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzIgYW5kICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzMgYW5kICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzQgYW5kICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzUgYW5kICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzYgYW5kICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyNzcgYW5kICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1hbmR4MjgwIGFuZCAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjgxIGFuZCAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjgyIGFuZCAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4MjgzIGFuZCAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4Mjg0IGFuZCAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4Mjg1IGFuZCAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4Mjg2IGFuZCAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4Mjg3IGFuZCAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1pZGRpZQotYW5keDI4OCBhbmQgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI4OSBhbmQgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5MCBhbmQgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5MSBhbmQgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5MiBhbmQgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5MyBhbmQgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5NCBhbmQgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5NSBhbmQgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc2lnbnMKLWFuZHgyOTYgYW5kIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4Mjk3IGFuZCAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDI5OCBhbmQgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgyOTkgYW5kICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMAotCi0tLSBObWF4LCBObWluLCBOdGlueQotYW5keDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzMiBhbmQgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzNCBhbmQgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzNSBhbmQgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzNyBhbmQgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0MiBhbmQgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0MyBhbmQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0NCBhbmQgIDFFLTEwMDcgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0NSBhbmQgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0NiBhbmQgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDM0OCBhbmQgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKLWFuZHgzNjEgYW5kICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNjQgYW5kICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzEgYW5kICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzQgYW5kICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHgzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgotYW5keDc4MCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4MyBhbmQgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4NiBhbmQgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc4OSBhbmQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc5MiBhbmQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotYW5keDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1hbmR4ODAwIGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODAzIGFuZCAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA2IGFuZCAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODA5IGFuZCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODEyIGFuZCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODE1IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWFuZHg4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotYW5keDg0MSBhbmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg0NCBhbmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg0NyBhbmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg1MCBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg1MyBhbmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg1NiBhbmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1hbmR4ODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotYW5keDg1OSBhbmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWFuZHg4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWFuZHg4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogOTk5DQorbWluRXhwb25lbnQ6IC05OTkNCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KK2FuZHgwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQorYW5keDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDANCithbmR4MDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMA0KK2FuZHgwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQorYW5keDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDANCithbmR4MDA2IGFuZCAgICAgICAgICAxMTExICAgMTAgLT4gICAxMA0KK2FuZHgwMDcgYW5kICAgICAgICAgIDExMTEgMTAxMCAtPiAxMDEwDQorDQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCithbmR4MDEwIGFuZCAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQorYW5keDAxMSBhbmQgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK2FuZHgwMTIgYW5kIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCithbmR4MDEzIGFuZCAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwDQorYW5keDAxNCBhbmQgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK2FuZHgwMTUgYW5kIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgICAgICAgIDANCithbmR4MDE2IGFuZCAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQorYW5keDAxNyBhbmQgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KKy0tICAgICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5DQorYW5keDAyMSBhbmQgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCithbmR4MDIyIGFuZCAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK2FuZHgwMjMgYW5kIDExMTExMTExMTExMSAgIDExMTExMTExICAtPiAgIDExMTExMTExDQorYW5keDAyNCBhbmQgMTExMTExMTExICAgICAgMTExMTExMTEgIC0+ICAgMTExMTExMTENCithbmR4MDI1IGFuZCAxMTExMTExMTEgICAgICAgMTExMTExMSAgLT4gICAgMTExMTExMQ0KK2FuZHgwMjYgYW5kIDExMTExMTExMTExMSAgICAgMTExMTExICAtPiAgICAgMTExMTExDQorYW5keDAyNyBhbmQgMTExMTExMTExMTExICAgICAgMTExMTEgIC0+ICAgICAgMTExMTENCithbmR4MDI4IGFuZCAxMTExMTExMTExMTEgICAgICAgMTExMSAgLT4gICAgICAgMTExMQ0KK2FuZHgwMjkgYW5kIDExMTExMTExMTExMSAgICAgICAgMTExICAtPiAgICAgICAgMTExDQorYW5keDAzMSBhbmQgMTExMTExMTExMTExICAgICAgICAgMTEgIC0+ICAgICAgICAgMTENCithbmR4MDMyIGFuZCAxMTExMTExMTExMTEgICAgICAgICAgMSAgLT4gICAgICAgICAgMQ0KK2FuZHgwMzMgYW5kIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMTExMTExMTExDQorYW5keDAzNCBhbmQgMTExMTExMTExMTEgMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCithbmR4MDM1IGFuZCAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK2FuZHgwMzYgYW5kIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMTExMTExMTExDQorDQorYW5keDA0MCBhbmQgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTENCithbmR4MDQxIGFuZCAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gICAxMTExMTExMQ0KK2FuZHgwNDIgYW5kICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgIDExMTExMTExDQorYW5keDA0MyBhbmQgICAxMTExMTExICAgICAxMTExMTExMTEgIC0+ICAgIDExMTExMTENCithbmR4MDQ0IGFuZCAgICAxMTExMTEgICAgIDExMTExMTExMSAgLT4gICAgIDExMTExMQ0KK2FuZHgwNDUgYW5kICAgICAxMTExMSAgICAgMTExMTExMTExICAtPiAgICAgIDExMTExDQorYW5keDA0NiBhbmQgICAgICAxMTExICAgICAxMTExMTExMTEgIC0+ICAgICAgIDExMTENCithbmR4MDQ3IGFuZCAgICAgICAxMTEgICAgIDExMTExMTExMSAgLT4gICAgICAgIDExMQ0KK2FuZHgwNDggYW5kICAgICAgICAxMSAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExDQorYW5keDA0OSBhbmQgICAgICAgICAxICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgIDENCisNCithbmR4MDUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQ0KK2FuZHgwNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxDQorYW5keDA1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDENCithbmR4MDUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQ0KK2FuZHgwNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxDQorYW5keDA1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDENCithbmR4MDU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQ0KK2FuZHgwNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxDQorYW5keDA1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDENCithbmR4MDU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQ0KKw0KK2FuZHgwNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwDQorYW5keDA2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDANCithbmR4MDYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMA0KK2FuZHgwNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwDQorYW5keDA2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDANCithbmR4MDY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMA0KK2FuZHgwNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwDQorYW5keDA2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDANCithbmR4MDY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMA0KK2FuZHgwNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwDQorDQorYW5keDA3MCBhbmQgMSAgMTExMTExMTExMSAgLT4gIDENCithbmR4MDcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQ0KK2FuZHgwNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxDQorYW5keDA3MyBhbmQgMSAgICAgMTExMTExMSAgLT4gIDENCithbmR4MDc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQ0KK2FuZHgwNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxDQorYW5keDA3NiBhbmQgMSAgICAgICAgMTExMSAgLT4gIDENCithbmR4MDc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQ0KK2FuZHgwNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxDQorYW5keDA3OSBhbmQgMSAgICAgICAgICAgMSAgLT4gIDENCisNCithbmR4MDgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMA0KK2FuZHgwODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwDQorYW5keDA4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDANCithbmR4MDgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMA0KK2FuZHgwODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwDQorYW5keDA4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDANCithbmR4MDg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMA0KK2FuZHgwODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwDQorYW5keDA4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDANCithbmR4MDg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMA0KKw0KK2FuZHgwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExDQorYW5keDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTENCithbmR4MDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQ0KK2FuZHgwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExDQorYW5keDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTENCithbmR4MDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQ0KK2FuZHgwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExDQorYW5keDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDENCithbmR4MDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMA0KKw0KK2FuZHgxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExDQorYW5keDEwMSBhbmQgMTExMTExMTExICAxMDExMTExMTEgIC0+ICAxMDExMTExMTENCithbmR4MTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQ0KK2FuZHgxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExDQorYW5keDEwNCBhbmQgMTExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTENCithbmR4MTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQ0KK2FuZHgxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExDQorYW5keDEwNyBhbmQgMTExMTExMTExICAxMTExMTExMDEgIC0+ICAxMTExMTExMDENCithbmR4MTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMA0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2FuZHgyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYSBmZXcgcmFuZG9tcw0KK2FuZHgyNDAgYW5kICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNDMgYW5kIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2FuZHgyNTAgYW5kICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjUxIGFuZCAgNzAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI1MiBhbmQgIDgwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNTMgYW5kICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjU0IGFuZCAgMjAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI1NSBhbmQgIDcwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNTYgYW5kICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjU3IGFuZCAgOTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI1OCBhbmQgIDEwMDAwMDAwMCAyMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNTkgYW5kICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjYwIGFuZCAgMTAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI2MSBhbmQgIDEwMDAwMDAwMCA5MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNjIgYW5kICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjYzIGFuZCAgMDAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI2NCBhbmQgIDAwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNjUgYW5kICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRC0xDQorYW5keDI3MCBhbmQgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNzEgYW5kICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjcyIGFuZCAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI3MyBhbmQgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNzQgYW5kICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mjc1IGFuZCAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI3NiBhbmQgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyNzcgYW5kICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2FuZHgyODAgYW5kICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjgxIGFuZCAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI4MiBhbmQgIDAwMDAwMDAwOCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyODMgYW5kICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mjg0IGFuZCAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI4NSBhbmQgIDEwMDEwMDAwMCAwMDEwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyODYgYW5kICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mjg3IGFuZCAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNaWRkaWUNCithbmR4Mjg4IGFuZCAgMDAxMDIwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI4OSBhbmQgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyOTAgYW5kICAwMDAwODAwMDAgMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MjkxIGFuZCAgMDAwMDkwMDAwIDEwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI5MiBhbmQgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyOTMgYW5kICAxMDAxMDAwMDAgMDAwMDcwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mjk0IGFuZCAgMTAwMDEwMTAwIDAwMDA4MDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI5NSBhbmQgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNpZ25zDQorYW5keDI5NiBhbmQgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mjk3IGFuZCAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgyOTggYW5kICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDI5OSBhbmQgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCithbmR4MzMxIGFuZCAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDMzMiBhbmQgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzMzMgYW5kICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzM0IGFuZCAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDMzNSBhbmQgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzMzYgYW5kICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzM3IGFuZCAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNDEgYW5kICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzQyIGFuZCAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDM0MyBhbmQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNDQgYW5kICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzQ1IGFuZCAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDM0NiBhbmQgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNDcgYW5kICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzQ4IGFuZCAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorYW5keDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4MzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHgzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Mzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2FuZHg3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4NzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Nzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4Nzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4NzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4NzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2FuZHg4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCithbmR4ODIxIGFuZCAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgyMiBhbmQgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODI0IGFuZCAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgyNSBhbmQgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODI3IGFuZCAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgyOCBhbmQgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODMwIGFuZCAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgzMSBhbmQgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODMzIGFuZCAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgzNCBhbmQgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODM2IGFuZCAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDgzNyBhbmQgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2FuZHg4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCithbmR4ODYxIGFuZCAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg2MiBhbmQgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODY0IGFuZCAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg2NSBhbmQgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODY3IGFuZCAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg2OCBhbmQgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODcxIGFuZCAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg3MiBhbmQgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODc0IGFuZCAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg3NSBhbmQgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODc3IGFuZCAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg3OCBhbmQgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODgwIGFuZCAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg4MSBhbmQgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCithbmR4ODgzIGFuZCAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorYW5keDg4NCBhbmQgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2FuZHg4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY2xhc3MuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CmluZGV4IGZhNWJjM2EuLjYyZDJmYTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jbGFzcy5kZWNUZXN0CkBAIC0xLDEzMSArMSwxMzEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gY2xhc3MuZGVjVGVzdCAtLSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBbTmV3IDIwMDYuMTEuMjddCi0KLXByZWNpc2lvbjogICA5Ci1tYXhFeHBvbmVudDogOTk5Ci1taW5FeHBvbmVudDogLTk5OQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWNsYXN4MDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWNsYXN4MDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWNsYXN4MDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWNsYXN4MDA0ICBjbGFzcyAgICAxRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAotY2xhc3gwMDUgIGNsYXNzICAwLjFFLTk5OSAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCi1jbGFzeDAwNiAgY2xhc3MgIDAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKLWNsYXN4MDA3ICBjbGFzcyAgMS4wMDAwMDAwMEUtOTk5ICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gwMDggIGNsYXNzICAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MDE3ICBjbGFzcyAgIDFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gwMTggIGNsYXNzICAgOS45OTk5OTk5OUUrOTk5ICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQotCi1jbGFzeDAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1jbGFzeDAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1jbGFzeDAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1jbGFzeDAyNCAgY2xhc3MgICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKLWNsYXN4MDI1ICBjbGFzcyAgLTAuMUUtOTk5ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAotY2xhc3gwMjYgIGNsYXNzICAtMC45OTk5OTk5OUUtOTk5ICAgICAgICAgICAtPiAtU3Vibm9ybWFsCi1jbGFzeDAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwRS05OTkgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MDI4ICBjbGFzcyAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDAzNyAgY2xhc3MgIC0xRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MDM4ICBjbGFzcyAgLTkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLQotY2xhc3gwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KLWNsYXN4MDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCi1jbGFzeDA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgotY2xhc3gwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCi1jbGFzeDA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KLWNsYXN4MDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgotCi0KLS0tIGRlY2ltYWw2NCBib3VuZHMKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotY2xhc3gyMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotY2xhc3gyMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotY2xhc3gyMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotY2xhc3gyMDQgIGNsYXNzICAgIDFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCi1jbGFzeDIwNSAgY2xhc3MgIDAuMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKLWNsYXN4MjA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbAotY2xhc3gyMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtPiArTm9ybWFsCi1jbGFzeDIwOCAgY2xhc3MgICAxRS0zODMgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MjA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gyMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDIxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MjEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gyMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDIxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWNsYXN4MjE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotY2xhc3gyMTcgIGNsYXNzICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1jbGFzeDIxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIC0+ICtOb3JtYWwKLWNsYXN4MjE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5Ci0KLWNsYXN4MjIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWNsYXN4MjIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWNsYXN4MjIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWNsYXN4MjI0ICBjbGFzcyAgIC0xRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAotY2xhc3gyMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCi1jbGFzeDIyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OUUtMzgzICAgIC0+IC1TdWJub3JtYWwKLWNsYXN4MjI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgLT4gLU5vcm1hbAotY2xhc3gyMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDIyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MjMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gyMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDIzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MjM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gyMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1jbGFzeDIzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWNsYXN4MjM3ICBjbGFzcyAgLTFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotY2xhc3gyMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsCi1jbGFzeDIzOSAgY2xhc3MgIC1JbmYgICAgICAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotCi1jbGFzeDI0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTgotY2xhc3gyNDIgIGNsYXNzICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KLWNsYXN4MjQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFOCi1jbGFzeDI0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KLWNsYXN4MjQ1ICBjbGFzcyAgLXNOYU4gICAgICAgICAgICAgICAgICAgICAgLT4gc05hTgotY2xhc3gyNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFOCi0KLQotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBjbGFzcy5kZWNUZXN0IC0tIENsYXNzIG9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gW05ldyAyMDA2LjExLjI3XQ0KKw0KK3ByZWNpc2lvbjogICA5DQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbkV4cG9uZW50OiAtOTk5DQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitjbGFzeDAwMSAgY2xhc3MgICAgMCAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQorY2xhc3gwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KK2NsYXN4MDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCitjbGFzeDAwNCAgY2xhc3MgICAgMUUtMTAwNyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCitjbGFzeDAwNSAgY2xhc3MgIDAuMUUtOTk5ICAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCitjbGFzeDAwNiAgY2xhc3MgIDAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgIC0+ICtTdWJub3JtYWwNCitjbGFzeDAwNyAgY2xhc3MgIDEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAwOCAgY2xhc3MgICAxRS05OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxMCAgY2xhc3MgICAxRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxNCAgY2xhc3MgICAyLjUwICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxNyAgY2xhc3MgICAxRSs5OTkgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5RSs5OTkgICAgICAgICAgIC0+ICtOb3JtYWwNCitjbGFzeDAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQ0KKw0KK2NsYXN4MDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCitjbGFzeDAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQorY2xhc3gwMjMgIGNsYXNzICAgLTBFKzUgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KK2NsYXN4MDI0ICBjbGFzcyAgIC0xRS0xMDA3ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KK2NsYXN4MDI1ICBjbGFzcyAgLTAuMUUtOTk5ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KK2NsYXN4MDI2ICBjbGFzcyAgLTAuOTk5OTk5OTlFLTk5OSAgICAgICAgICAgLT4gLVN1Ym5vcm1hbA0KK2NsYXN4MDI3ICBjbGFzcyAgLTEuMDAwMDAwMDBFLTk5OSAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDI4ICBjbGFzcyAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDI5ICBjbGFzcyAgLTFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDMzICBjbGFzcyAgLTEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM2ICBjbGFzcyAgLTFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM3ICBjbGFzcyAgLTFFKzk5OSAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM4ICBjbGFzcyAgLTkuOTk5OTk5OTlFKzk5OSAgICAgICAgICAgLT4gLU5vcm1hbA0KK2NsYXN4MDM5ICBjbGFzcyAgLUluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorDQorY2xhc3gwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4NCitjbGFzeDA0MiAgY2xhc3MgIC1OYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KK2NsYXN4MDQzICBjbGFzcyAgK05hTjEyMzQ1ICAgICAgICAgICAgICAgICAgLT4gTmFODQorY2xhc3gwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQorY2xhc3gwNDUgIGNsYXNzICAtc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFODQorY2xhc3gwNDYgIGNsYXNzICArc05hTjEyMzQ1ICAgICAgICAgICAgICAgICAtPiBzTmFODQorDQorDQorLS0gZGVjaW1hbDY0IGJvdW5kcw0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2NsYXN4MjAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCitjbGFzeDIwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQorY2xhc3gyMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KK2NsYXN4MjA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KK2NsYXN4MjA1ICBjbGFzcyAgMC4xRS0zODMgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KK2NsYXN4MjA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbA0KK2NsYXN4MjA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjA4ICBjbGFzcyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gK05vcm1hbA0KK2NsYXN4MjE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQorDQorY2xhc3gyMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KK2NsYXN4MjIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCitjbGFzeDIyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQorY2xhc3gyMjQgIGNsYXNzICAgLTFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQorY2xhc3gyMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQorY2xhc3gyMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsDQorY2xhc3gyMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAtPiAtTm9ybWFsDQorY2xhc3gyMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzcgIGNsYXNzICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsDQorY2xhc3gyMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCisNCitjbGFzeDI0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KK2NsYXN4MjQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQorY2xhc3gyNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCitjbGFzeDI0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitjbGFzeDI0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitjbGFzeDI0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCisNCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdGFsLmRlY1Rlc3QKaW5kZXggMjUyYzQ5Zi4uYWQ4N2I0YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90YWwuZGVjVGVzdApAQCAtMSw3OTggKzEsNzk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvbXBhcmV0b3RhbC5kZWNUZXN0IC0tIGRlY2ltYWwgY29tcGFyaXNvbiB1c2luZyB0b3RhbCBvcmRlcmluZyAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCi0tLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCi0tLSB0aGFuIGNvbXBhcmUuCi0KLWV4dGVuZGVkOiAgICAxCi1wcmVjaXNpb246ICAgMTYKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotCi0tLSBzYW5pdHkgY2hlY2tzCi1jb3R4MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwCi1jb3R4MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQotY290eDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKLWNvdHgwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xCi1jb3R4MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQotY290eDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQotY290eDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMAotY290eDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTEKLWNvdHgwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCi1jb3R4MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQotY290eDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQotY290eDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQotY290eDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMAotY290eDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTEKLWNvdHgwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCi1jb3R4MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxCi1jb3R4MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxCi1jb3R4MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCi1jb3R4MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwCi1jb3R4MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQotY290eDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQotY290eDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQotY290eDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQotY290eDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQotY290eDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMAotCi1jb3R4MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDAKLWNvdHgwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKLWNvdHgwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTEKLWNvdHgwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTEKLWNvdHgwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKLWNvdHgwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQotY290eDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwCi1jb3R4MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCi1jb3R4MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xCi1jb3R4MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xCi1jb3R4MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKLWNvdHgwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQotY290eDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwCi1jb3R4MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCi1jb3R4MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xCi1jb3R4MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDEKLWNvdHgwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQotY290eDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxCi1jb3R4MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDAKLWNvdHgwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKLWNvdHgwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQotY290eDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxCi1jb3R4MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKLWNvdHgwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQotY290eDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwCi0KLWNvdHgwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCi1jb3R4MDYyIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTEuMCAgLT4gLTEKLWNvdHgwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQotY290eDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCi1jb3R4MDY1IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDIuMCAgLT4gLTEKLWNvdHgwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxCi1jb3R4MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAotY290eDA2OCBjb21wYXJldG90YWwgIC0xLjAgICAwLjAgIC0+IC0xCi1jb3R4MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTEKLWNvdHgwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQotY290eDA3MSBjb21wYXJldG90YWwgICAwLjAgIC0yLjAgIC0+IDEKLWNvdHgwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxCi1jb3R4MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAotY290eDA3NCBjb21wYXJldG90YWwgICAwLjAgICAxLjAgIC0+IC0xCi1jb3R4MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTEKLWNvdHgwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCi1jb3R4MDc3IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTEuMCAgLT4gMQotY290eDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDEKLWNvdHgwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCi1jb3R4MDgwIGNvbXBhcmV0b3RhbCAgIDEuMCAgIDIuMCAgLT4gLTEKLWNvdHgwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxCi1jb3R4MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQotY290eDA4MyBjb21wYXJldG90YWwgICAyLjAgICAwLjAgIC0+IDEKLWNvdHgwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxCi1jb3R4MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAotCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKLW1heGV4cG9uZW50OiA5OTk5OTk5OTkKLW1pbmV4cG9uZW50OiAtOTk5OTk5OTk5Ci1jb3R4MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gMAotY290eDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IC0xCi1jb3R4MDkyIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMQotY290eDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDAKLQotLS0gRXhhbXBsZXMKLWNvdHgwOTQgY29tcGFyZXRvdGFsICAxMi43MyAgMTI3LjkgIC0+IC0xCi1jb3R4MDk1IGNvbXBhcmV0b3RhbCAgLTEyNyAgIDEyICAgICAtPiAtMQotY290eDA5NiBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zICAgLT4gLTEKLWNvdHgwOTcgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMzAgIC0+ICAwCi1jb3R4MDk4IGNvbXBhcmV0b3RhbCAgMTIuMyAgIDEyLjMwMCAtPiAgMQotY290eDA5OSBjb21wYXJldG90YWwgIDEyLjMgICBOYU4gICAgLT4gLTEKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCi1jb3R4MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMAotY290eDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xCi1jb3R4MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQotY290eDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDEKLWNvdHgxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwCi1jb3R4MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAotY290eDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xCi1jb3R4MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTEKLWNvdHgxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCi1jb3R4MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMAotY290eDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDEKLQotY290eDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKLWNvdHgxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxCi1jb3R4MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQotY290eDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKLWNvdHgxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxCi1jb3R4MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQotY290eDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKLWNvdHgxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxCi1jb3R4MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQotY290eDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCi1jb3R4MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQotCi1jb3R4MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTEKLWNvdHgxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQotY290eDE0MiBjb21wYXJldG90YWwgICA4ICAgICAgOS4wICAgIC0+IC0xCi1jb3R4MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTEKLWNvdHgxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQotY290eDE0NSBjb21wYXJldG90YWwgICAwLjhFKzEgOSAgICAgIC0+IC0xCi1jb3R4MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTEKLWNvdHgxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQotY290eDE0OCBjb21wYXJldG90YWwgICA4LjAgICAgOTBFLTEgIC0+IC0xCi1jb3R4MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTEKLWNvdHgxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCi1jb3R4MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTEKLWNvdHgyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQotY290eDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCi1jb3R4MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTEKLWNvdHgyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQotY290eDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCi1jb3R4MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTEKLWNvdHgyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQotY290eDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCi1jb3R4MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTEKLWNvdHgyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQotCi1jb3R4MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKLWNvdHgyMjEgY29tcGFyZXRvdGFsICAtOC4wICAgIDcgICAgICAtPiAtMQotY290eDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xCi1jb3R4MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKLWNvdHgyMjQgY29tcGFyZXRvdGFsICAtODBFLTEgIDcuMCAgICAtPiAtMQotY290eDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xCi1jb3R4MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKLWNvdHgyMjcgY29tcGFyZXRvdGFsICAtOC4wICAgIDdFKzAgICAtPiAtMQotY290eDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xCi1jb3R4MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKLWNvdHgyMzAgY29tcGFyZXRvdGFsICAtOCAgICAgIDcwRS0xICAtPiAtMQotCi1jb3R4MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTEKLWNvdHgyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQotY290eDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xCi1jb3R4MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTEKLWNvdHgyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQotY290eDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xCi1jb3R4MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTEKLWNvdHgyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQotY290eDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xCi1jb3R4MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTEKLWNvdHgyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCi1jb3R4MzAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNy4wICAgIC0+IDEKLWNvdHgzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQotY290eDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCi1jb3R4MzAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICAtNy4wICAgIC0+IDEKLWNvdHgzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQotY290eDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCi1jb3R4MzA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNyAgICAgIC0+IDEKLWNvdHgzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQotY290eDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCi1jb3R4MzA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAtLjdFKzEgIC0+IDEKLWNvdHgzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQotCi1jb3R4MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKLWNvdHgzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQotY290eDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxCi1jb3R4MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKLWNvdHgzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQotY290eDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxCi1jb3R4MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKLWNvdHgzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQotY290eDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxCi1jb3R4MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKLWNvdHgzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQotCi1jb3R4MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDEKLWNvdHgzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQotY290eDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxCi1jb3R4MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDEKLWNvdHgzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQotY290eDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxCi1jb3R4MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDEKLWNvdHgzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQotY290eDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxCi1jb3R4MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDEKLWNvdHgzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCi1jb3R4NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwCi1jb3R4NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxCi1jb3R4NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQotY290eDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTEKLWNvdHg0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDAKLWNvdHg0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKLWNvdHg0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDEKLWNvdHg0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDEKLWNvdHg0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKLWNvdHg0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDAKLWNvdHg0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xCi0KLWNvdHg0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCi1jb3R4NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQotY290eDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTEKLWNvdHg0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCi1jb3R4NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQotY290eDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKLWNvdHg0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCi1jb3R4NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQotY290eDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKLWNvdHg0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCi1jb3R4NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQotCi1jb3R4NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxCi1jb3R4NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCi1jb3R4NDQyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkuMCAgICAtPiAxCi1jb3R4NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxCi1jb3R4NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCi1jb3R4NDQ1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTkgICAgICAtPiAxCi1jb3R4NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxCi1jb3R4NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCi1jb3R4NDQ4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkwRS0xICAtPiAxCi1jb3R4NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxCi1jb3R4NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1wcmVjaXNpb246IDQwCi1jb3R4NDcwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKLWNvdHg0NzEgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1jb3R4NDcyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCi1jb3R4NDczIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKLWNvdHg0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCi1jb3R4NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1jb3R4NDc2IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKLWNvdHg0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1jb3R4NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCi1jb3R4NDc5IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKLWNvdHg0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xCi1jb3R4NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1jb3R4NDgyIGNvbXBhcmV0b3RhbCAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgLT4gLTEKLWNvdHg0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKLWNvdHg0ODQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAtPiAxCi1jb3R4NDg1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAtPiAxCi1jb3R4NDg2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5IC0+IDEKLWNvdHg0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAtPiAxCi1jb3R4NDg4IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAxCi1jb3R4NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5IC0+IDEKLWNvdHg0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCi1jb3R4NDkxIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAtPiAxCi1jb3R4NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDEKLWNvdHg0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAtPiAxCi1jb3R4NDk0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAxCi1jb3R4NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5IC0+IDEKLWNvdHg0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCi1jb3R4NDk3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAtPiAwCi0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKLXByZWNpc2lvbjogOQotY290eDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQotY290eDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQotY290eDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQotY290eDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQotY290eDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQotY290eDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQotY290eDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQotY290eDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQotY290eDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQotY290eDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQotY290eDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQotY290eDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQotY290eDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQotY290eDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQotY290eDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQotY290eDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMAotY290eDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWNvdHg1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCi1jb3R4NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQotY290eDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWNvdHg1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCi1jb3R4NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQotY290eDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWNvdHg1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xCi1jb3R4NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQotY290eDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWNvdHg1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xCi1jb3R4NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQotY290eDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWNvdHg1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCi1jb3R4NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQotLS0gTFIgc3dhcAotY290eDU0MCBjb21wYXJldG90YWwgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKLWNvdHg1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCi1jb3R4NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQotY290eDU0MyBjb21wYXJldG90YWwgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKLWNvdHg1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCi1jb3R4NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQotY290eDU0NiBjb21wYXJldG90YWwgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKLWNvdHg1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCi1jb3R4NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQotY290eDU0OSBjb21wYXJldG90YWwgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKLWNvdHg1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCi1jb3R4NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQotY290eDU1MiBjb21wYXJldG90YWwgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKLWNvdHg1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCi1jb3R4NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQotY290eDU1NSBjb21wYXJldG90YWwgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKLWNvdHg1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCi1jb3R4NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQotY290eDU1OCBjb21wYXJldG90YWwgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKLWNvdHg1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCi1jb3R4NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQotY290eDU2MiBjb21wYXJldG90YWwgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKLWNvdHg1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCi1jb3R4NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQotY290eDU2NSBjb21wYXJldG90YWwgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKLWNvdHg1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCi1jb3R4NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQotY290eDU2OCBjb21wYXJldG90YWwgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKLWNvdHg1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCi1jb3R4NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQotY290eDU3MSBjb21wYXJldG90YWwgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKLWNvdHg1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQotY290eDU4MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCi1jb3R4NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKLWNvdHg1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQotY290eDU4NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCi1jb3R4NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKLWNvdHg1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQotY290eDU4NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCi1jb3R4NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKLWNvdHg1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKLWNvdHg1OTAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKLWNvdHg1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKLWNvdHg1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKLWNvdHg1OTMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKLWNvdHg1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKLWNvdHg1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKLWNvdHg1OTYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKLWNvdHg1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKLWNvdHg1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKLWNvdHg1OTkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKLQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKLXByZWNpc2lvbjogMjAKLWNvdHg2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1jb3R4NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQotY290eDYwMiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWNvdHg2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCi1jb3R4NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQotY290eDYwNSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKLWNvdHg2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCi1jb3R4NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQotY290eDYwOCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKLWNvdHg2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCi1jb3R4NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQotY290eDYxMSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKLWNvdHg2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCi1jb3R4NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQotY290eDYxNCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKLWNvdHg2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCi1jb3R4NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQotY290eDYxNyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKLWNvdHg2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCi1jb3R4NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQotY290eDYyMCBjb21wYXJldG90YWwgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWNvdHg2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1jb3R4NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQotY290eDYyMyBjb21wYXJldG90YWwgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWNvdHg2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCi1jb3R4NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQotY290eDYyNiBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKLWNvdHg2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCi1jb3R4NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQotY290eDYyOSBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKLWNvdHg2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCi1jb3R4NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQotY290eDYzMiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKLWNvdHg2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCi1jb3R4NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQotY290eDYzNSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKLWNvdHg2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCi1jb3R4NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQotY290eDYzOCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKLWNvdHg2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCi1wcmVjaXNpb246IDkKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWNvdHg2NDAgY29tcGFyZXRvdGFsICAgMCAgICAgMCAgIC0+IDAKLWNvdHg2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDEKLWNvdHg2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKLWNvdHg2NDMgY29tcGFyZXRvdGFsICAgMCAgICAgMC4wIC0+IDEKLWNvdHg2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xCi1jb3R4NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCi1jb3R4NjQ2IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAuMCAtPiAtMQotY290eDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTEKLWNvdHg2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCi1jb3R4NjQ5IGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAgICAtPiAxCi1jb3R4NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxCi1jb3R4NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCi1jb3R4NjUyIGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAgICAtPiAtMQotY290eDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQotY290eDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAotY290eDY1NSBjb21wYXJldG90YWwgIC0wLjAgICAwLjAgLT4gLTEKLQotY290eDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTEKLWNvdHg2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCi1jb3R4NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxCi1jb3R4NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxCi1jb3R4NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQotY290eDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTEKLWNvdHg2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDEKLWNvdHg2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKLWNvdHg2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDAKLWNvdHg2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xCi1jb3R4NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCi1jb3R4NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxCi1jb3R4NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxCi1jb3R4NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCi1jb3R4NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxCi1jb3R4NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxCi1jb3R4NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQotY290eDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTEKLWNvdHg2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDAKLWNvdHg2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKLWNvdHg2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xCi1jb3R4Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQotY290eDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKLWNvdHg2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDAKLQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQotcHJlY2lzaW9uOiAyMAotY290eDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAotY290eDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQotY290eDY4MiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMQotY290eDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQotY290eDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQotY290eDY4NSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMQotY290eDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQotY290eDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQotY290eDY4OCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMQotY290eDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQotY290eDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAotY290eDY5MSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgICAgMTIgLT4gLTEKLWNvdHg2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xCi1jb3R4NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQotY290eDY5NCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgICAgMTIgLT4gLTEKLWNvdHg2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xCi1jb3R4Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQotY290eDY5NyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gLTEKLWNvdHg2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xCi1jb3R4Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQotCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzCi1tYXhleHBvbmVudDogOTk5Ci1taW5leHBvbmVudDogLTk5OQotcHJlY2lzaW9uOiA5Ci1jb3R4NzAxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAgMSAtPiAgMQotY290eDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKLWNvdHg3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxCi1jb3R4NzA0IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAgICAtPiAtMQotY290eDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKLWNvdHg3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xCi1jb3R4NzA3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAgMSAtPiAgMQotY290eDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKLWNvdHg3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxCi1jb3R4NzEwIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAxICAtPiAtMQotY290eDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKLWNvdHg3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xCi1jb3R4NzEzIGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MSAgMSAtPiAtMQotY290eDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKLWNvdHg3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xCi1jb3R4NzE2IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkwMSAtPiAgMQotY290eDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKLWNvdHg3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxCi0KLXByZWNpc2lvbjogMTUKLS0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uCi1jb3R4NzIxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwMCAxIC0+IDEKLWNvdHg3MjIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgLT4gLTEKLWNvdHg3MjMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgIDEgLT4gMQotY290eDcyNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAtPiAtMQotY290eDcyNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgMSAtPiAxCi1jb3R4NzI2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgIC0+IC0xCi1jb3R4NzI3IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkxICAxIC0+IDEKLWNvdHg3MjggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgLT4gLTEKLWNvdHg3MjkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxIDEgLT4gMQotY290eDczMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAtPiAtMQotY290eDczMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgMSAtPiAxCi1jb3R4NzMyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgIC0+IC0xCi0KLS0tIHJlc2lkdWUgY2FzZXMKLXByZWNpc2lvbjogNQotY290eDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQotY290eDc0MSBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5ICAgLT4gMQotY290eDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQotY290eDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQotY290eDc0NCBjb21wYXJldG90YWwgIDEgIDEuMDAwMDEgICAgLT4gLTEKLWNvdHg3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCi1jb3R4NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQotY290eDc1MCBjb21wYXJldG90YWwgIDAuOTk5OTk5OSAgMSAgLT4gLTEKLWNvdHg3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCi1jb3R4NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQotY290eDc1MyBjb21wYXJldG90YWwgIDEuMDAwMCAgICAgMSAgLT4gLTEKLWNvdHg3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKLWNvdHg3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDEKLWNvdHg3NTYgY29tcGFyZXRvdGFsICAxLjAwMDAwMDEgIDEgIC0+IDEKLQotLS0gYSBzZWxlY3Rpb24gb2YgbG9uZ2llcwotY290eDc2MCBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC01ODMwNjI5LjgzNDcwODUwMjU4MDg3NTY1NjAzNTc5NDAgLT4gLTEKLWNvdHg3NjEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDAKLWNvdHg3NjIgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IC0xCi1jb3R4NzYzIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCi0tLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdAotcHJlY2lzaW9uOiAgIDExCi1jb3R4NzY0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCi1wcmVjaXNpb246ICAgMTAKLWNvdHg3NjUgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKLXByZWNpc2lvbjogICAgOQotY290eDc2NiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQotcHJlY2lzaW9uOiAgICA4Ci1jb3R4NzY3IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCi1wcmVjaXNpb246ICAgIDcKLWNvdHg3NjggY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKLXByZWNpc2lvbjogICAgNgotY290eDc2OSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQotcHJlY2lzaW9uOiAgICA1Ci1jb3R4NzcwIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCi1wcmVjaXNpb246ICAgIDQKLWNvdHg3NzEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKLXByZWNpc2lvbjogICAgMwotY290eDc3MiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQotcHJlY2lzaW9uOiAgICAyCi1jb3R4NzczIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxCi1wcmVjaXNpb246ICAgIDEKLWNvdHg3NzQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDEKLQotLS0gU3BlY2lhbHMKLXByZWNpc2lvbjogICA5Ci1jb3R4NzgwIGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDEKLWNvdHg3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQotY290eDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxCi1jb3R4NzgzIGNvbXBhcmV0b3RhbCAgSW5mICAtMCAgICAgLT4gIDEKLWNvdHg3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQotY290eDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxCi1jb3R4Nzg2IGNvbXBhcmV0b3RhbCAgSW5mICAgMTAwMCAgLT4gIDEKLWNvdHg3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAotY290eDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xCi1jb3R4Nzg5IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKLWNvdHg3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQotY290eDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xCi1jb3R4NzkyIGNvbXBhcmV0b3RhbCAgMCAgICAgSW5mICAgLT4gLTEKLWNvdHg3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQotY290eDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xCi1jb3R4Nzk1IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDAKLQotY290eDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCi1jb3R4ODAxIGNvbXBhcmV0b3RhbCAtSW5mICAtMTAwMCAgLT4gLTEKLWNvdHg4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQotY290eDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCi1jb3R4ODA0IGNvbXBhcmV0b3RhbCAtSW5mICAgMCAgICAgLT4gLTEKLWNvdHg4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQotY290eDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCi1jb3R4ODA3IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTEKLWNvdHg4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMAotY290eDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCi1jb3R4ODEwIGNvbXBhcmV0b3RhbCAtMSAgICAtSW5mICAgLT4gIDEKLWNvdHg4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQotY290eDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCi1jb3R4ODEzIGNvbXBhcmV0b3RhbCAgMSAgICAtSW5mICAgLT4gIDEKLWNvdHg4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQotY290eDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCi0KLWNvdHg4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQotY290eDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxCi1jb3R4ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKLWNvdHg4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQotY290eDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxCi1jb3R4ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKLWNvdHg4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQotY290eDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxCi1jb3R4ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKLWNvdHg4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTEKLWNvdHg4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTEKLWNvdHg4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTEKLWNvdHg4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAotY290eDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxCi1jb3R4ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xCi0KLWNvdHg4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQotY290eDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxCi1jb3R4ODQzIGNvbXBhcmV0b3RhbCAgc05hTiAtSW5mICAgLT4gIDEKLWNvdHg4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQotY290eDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxCi1jb3R4ODQ2IGNvbXBhcmV0b3RhbCAgc05hTiAtMCAgICAgLT4gIDEKLWNvdHg4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQotY290eDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxCi1jb3R4ODQ5IGNvbXBhcmV0b3RhbCAgc05hTiAgMTAwMCAgLT4gIDEKLWNvdHg4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKLWNvdHg4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAotCi1jb3R4ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xCi1jb3R4ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCi1jb3R4ODU0IGNvbXBhcmV0b3RhbCAtSW5mICBzTmFOICAgLT4gIC0xCi1jb3R4ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xCi1jb3R4ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCi1jb3R4ODU3IGNvbXBhcmV0b3RhbCAtMCAgICBzTmFOICAgLT4gIC0xCi1jb3R4ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xCi1jb3R4ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCi1jb3R4ODYwIGNvbXBhcmV0b3RhbCAgMTAwMCBzTmFOICAgLT4gIC0xCi1jb3R4ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xCi1jb3R4ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKLWNvdHg4NjMgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMAotCi1jb3R4ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwCi1jb3R4ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCi1jb3R4ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQotY290eDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTEKLWNvdHg4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCi1jb3R4ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQotY290eDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTEKLWNvdHg4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCi1jb3R4ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQotY290eDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTEKLWNvdHg4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCi0KLWNvdHg4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDAKLWNvdHg4ODMgY29tcGFyZXRvdGFsIC1OYU4gIC1zTmFOICAgLT4gIC0xCi1jb3R4ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCi1jb3R4ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxCi1jb3R4ODg2IGNvbXBhcmV0b3RhbCAtMSAgICAtc05hTiAgIC0+ICAxCi1jb3R4ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCi1jb3R4ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxCi1jb3R4ODg5IGNvbXBhcmV0b3RhbCAgMSAgICAtc05hTiAgIC0+ICAxCi1jb3R4ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCi1jb3R4ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxCi1jb3R4ODkyIGNvbXBhcmV0b3RhbCAgTmFOICAtc05hTiAgIC0+ICAxCi1jb3R4ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCi0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkCi1jb3R4OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDEKLWNvdHg5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQotY290eDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCi1jb3R4OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xCi1jb3R4OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDEKLWNvdHg5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQotY290eDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQotCi1jb3R4OTcwIGNvbXBhcmV0b3RhbCAtTmFONDEgLU5hTjQyIC0+IDEKLWNvdHg5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQotY290eDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQotY290eDk3MyBjb21wYXJldG90YWwgK05hTjQxICtOYU40MiAtPiAtMQotY290eDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQotY290eDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQotY290eDk3NiBjb21wYXJldG90YWwgLU5hTjQyICtOYU4wMSAtPiAtMQotY290eDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQotCi1jb3R4OTgwIGNvbXBhcmV0b3RhbCAtc05hTjc3MSAtc05hTjc3MiAtPiAxCi1jb3R4OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxCi1jb3R4OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQotY290eDk4MyBjb21wYXJldG90YWwgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKLWNvdHg5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xCi1jb3R4OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQotY290eDk4NiBjb21wYXJldG90YWwgLXNOYU43NzIgK3NOYU43NzEgLT4gLTEKLWNvdHg5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxCi0KLWNvdHg5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQotY290eDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxCi1jb3R4OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTEKLWNvdHg5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQotY290eDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxCi1jb3R4OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTEKLWNvdHg5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQotY290eDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xCi1jb3R4OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDEKLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZAotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKLWNvdHgxMDgwIGNvbXBhcmV0b3RhbCArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKLWNvdHgxMDgxIGNvbXBhcmV0b3RhbCA5RSs5OTk5OTk5OTkgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKLWNvdHgxMDgyIGNvbXBhcmV0b3RhbCArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDEKLWNvdHgxMDgzIGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKLWNvdHgxMDg1IGNvbXBhcmV0b3RhbCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTEKLWNvdHgxMDg2IGNvbXBhcmV0b3RhbCA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKLWNvdHgxMDg3IGNvbXBhcmV0b3RhbCAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTEKLWNvdHgxMDg4IGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKLQotY290eDEwODkgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAtMQotY290eDEwOTAgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDAgICAtPiAtMQotY290eDEwOTEgY29tcGFyZXRvdGFsIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAtMQotY290eDEwOTIgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAtMQotY290eDEwOTMgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAtMQotY290eDEwOTQgY29tcGFyZXRvdGFsIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAtPiAgMQotY290eDEwOTUgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMQotY290eDEwOTYgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAwICAgICAtPiAgMQotY290eDEwOTcgY29tcGFyZXRvdGFsIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMQotY290eDEwOTggY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgMQotY290eDEwOTkgY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwICAgICAgICAgICAgICAtPiAgMQotY290eDExMDAgY29tcGFyZXRvdGFsIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAtMQotLS0gc2lnbnMKLWNvdHgxMTAxIGNvbXBhcmV0b3RhbCAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDEKLWNvdHgxMTAyIGNvbXBhcmV0b3RhbCAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gIDEKLWNvdHgxMTAzIGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gLTEKLWNvdHgxMTA0IGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTEKLWNvdHgxMTA1IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKLWNvdHgxMTA2IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKLWNvdHgxMTA3IGNvbXBhcmV0b3RhbCAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gLTEKLWNvdHgxMTA4IGNvbXBhcmV0b3RhbCAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDEKLQotLS0gc3ByZWFkIHplcm9zCi1jb3R4MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTEKLWNvdHgxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMCAgICAgICAtPiAgMQotY290eDExMTIgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwICAgICAgIC0+IC0xCi1jb3R4MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDEKLWNvdHgxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMEUrMzg0ICAtPiAtMQotY290eDExMTUgY29tcGFyZXRvdGFsICAgMEUtMzgzIC0wRSszODQgIC0+ICAxCi1jb3R4MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTEKLWNvdHgxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMQotY290eDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSszODQgIC0+IC0xCi1jb3R4MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDEKLWNvdHgxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrMzg0ICAtPiAtMQotY290eDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSszODQgIC0+ICAxCi0KLWNvdHgxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQotY290eDExMzEgY29tcGFyZXRvdGFsICAgMEUrMzg0IC0wICAgICAgIC0+ICAxCi1jb3R4MTEzMiBjb21wYXJldG90YWwgIC0wRSszODQgIDAgICAgICAgLT4gLTEKLWNvdHgxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQotY290eDExMzQgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwRS0zODMgIC0+ICAxCi1jb3R4MTEzNSBjb21wYXJldG90YWwgICAwRSszODQgLTBFLTM4MyAgLT4gIDEKLWNvdHgxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQotY290eDExMzcgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wRS0zODMgIC0+IC0xCi1jb3R4MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTM4MyAgLT4gIDEKLWNvdHgxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQotY290eDExNDAgY29tcGFyZXRvdGFsICAtMCAgICAgICAwRS0zODMgIC0+IC0xCi1jb3R4MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTM4MyAgLT4gLTEKLQotLS0gTnVsbCB0ZXN0cwotY290eDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotY290eDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gY29tcGFyZXRvdGFsLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uIHVzaW5nIHRvdGFsIG9yZGVyaW5nICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KKy0tIHRoYW4gY29tcGFyZS4NCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2NvdHgwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDANCitjb3R4MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQ0KK2NvdHgwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xDQorY290eDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTENCitjb3R4MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQ0KK2NvdHgwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDENCitjb3R4MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwDQorY290eDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTENCitjb3R4MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQ0KK2NvdHgwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xDQorY290eDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQ0KK2NvdHgwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDENCitjb3R4MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwDQorY290eDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTENCitjb3R4MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQ0KK2NvdHgwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDENCitjb3R4MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxDQorY290eDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQ0KK2NvdHgwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDANCitjb3R4MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQ0KK2NvdHgwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDENCitjb3R4MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxDQorY290eDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQ0KK2NvdHgwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDENCitjb3R4MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwDQorDQorY290eDAzMSBjb21wYXJldG90YWwgIC0yMCAgLTIwICAtPiAwDQorY290eDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQ0KK2NvdHgwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTENCitjb3R4MDM0IGNvbXBhcmV0b3RhbCAgLTIwICAgMTAgIC0+IC0xDQorY290eDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQ0KK2NvdHgwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQ0KK2NvdHgwMzcgY29tcGFyZXRvdGFsICAtMTAgIC0xMCAgLT4gMA0KK2NvdHgwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTENCitjb3R4MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xDQorY290eDA0MCBjb21wYXJldG90YWwgIC0xMCAgIDIwICAtPiAtMQ0KK2NvdHgwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQ0KK2NvdHgwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQ0KK2NvdHgwNDMgY29tcGFyZXRvdGFsICAgMDAgICAwMCAgLT4gMA0KK2NvdHgwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTENCitjb3R4MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xDQorY290eDA0NiBjb21wYXJldG90YWwgICAxMCAgLTIwICAtPiAxDQorY290eDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxDQorY290eDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxDQorY290eDA0OSBjb21wYXJldG90YWwgICAxMCAgIDEwICAtPiAwDQorY290eDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQ0KK2NvdHgwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQ0KK2NvdHgwNTIgY29tcGFyZXRvdGFsICAgMjAgIC0xMCAgLT4gMQ0KK2NvdHgwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQ0KK2NvdHgwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQ0KK2NvdHgwNTYgY29tcGFyZXRvdGFsICAgMjAgICAyMCAgLT4gMA0KKw0KK2NvdHgwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwDQorY290eDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xDQorY290eDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xDQorY290eDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xDQorY290eDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xDQorY290eDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDENCitjb3R4MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMA0KK2NvdHgwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQ0KK2NvdHgwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQ0KK2NvdHgwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQ0KK2NvdHgwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxDQorY290eDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDENCitjb3R4MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMA0KK2NvdHgwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQ0KK2NvdHgwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQ0KK2NvdHgwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxDQorY290eDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDENCitjb3R4MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQ0KK2NvdHgwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwDQorY290eDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xDQorY290eDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDENCitjb3R4MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQ0KK2NvdHgwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxDQorY290eDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDENCitjb3R4MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMA0KKw0KKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK2NvdHgwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAtPiAwDQorY290eDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+IC0xDQorY290eDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC0+IDENCitjb3R4MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLT4gMA0KKw0KKy0tIEV4YW1wbGVzDQorY290eDA5NCBjb21wYXJldG90YWwgIDEyLjczICAxMjcuOSAgLT4gLTENCitjb3R4MDk1IGNvbXBhcmV0b3RhbCAgLTEyNyAgIDEyICAgICAtPiAtMQ0KK2NvdHgwOTYgY29tcGFyZXRvdGFsICAxMi4zMCAgMTIuMyAgIC0+IC0xDQorY290eDA5NyBjb21wYXJldG90YWwgIDEyLjMwICAxMi4zMCAgLT4gIDANCitjb3R4MDk4IGNvbXBhcmV0b3RhbCAgMTIuMyAgIDEyLjMwMCAtPiAgMQ0KK2NvdHgwOTkgY29tcGFyZXRvdGFsICAxMi4zICAgTmFOICAgIC0+IC0xDQorDQorLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQorLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KK2NvdHgxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwDQorY290eDEwMSBjb21wYXJldG90YWwgICA3LjAgICAgNyAgICAgIC0+IC0xDQorY290eDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDENCitjb3R4MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQ0KK2NvdHgxMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcuMCAgICAtPiAwDQorY290eDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDANCitjb3R4MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTENCitjb3R4MTA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3RSswICAgLT4gLTENCitjb3R4MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMA0KK2NvdHgxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwDQorY290eDExMCBjb21wYXJldG90YWwgICA3ICAgICAgNzBFLTEgIC0+IDENCisNCitjb3R4MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQ0KK2NvdHgxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxDQorY290eDEyMiBjb21wYXJldG90YWwgICA4ICAgICAgNy4wICAgIC0+IDENCitjb3R4MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQ0KK2NvdHgxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxDQorY290eDEyNSBjb21wYXJldG90YWwgICAwLjhFKzEgNyAgICAgIC0+IDENCitjb3R4MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQ0KK2NvdHgxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxDQorY290eDEyOCBjb21wYXJldG90YWwgICA4LjAgICAgNzBFLTEgIC0+IDENCitjb3R4MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDENCitjb3R4MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQ0KKw0KK2NvdHgxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQ0KK2NvdHgxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQ0KK2NvdHgxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KK2NvdHgxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQ0KK2NvdHgxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KK2NvdHgxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQ0KK2NvdHgxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQ0KK2NvdHgxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KK2NvdHgxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KK2NvdHgxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQ0KK2NvdHgxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCitjb3R4MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTENCitjb3R4MjAxIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3ICAgICAgLT4gLTENCitjb3R4MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTENCitjb3R4MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTENCitjb3R4MjA0IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3LjAgICAgLT4gLTENCitjb3R4MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTENCitjb3R4MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTENCitjb3R4MjA3IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3RSswICAgLT4gLTENCitjb3R4MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTENCitjb3R4MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTENCitjb3R4MjEwIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3MEUtMSAgLT4gLTENCisNCitjb3R4MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTENCitjb3R4MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTENCitjb3R4MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTENCitjb3R4MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTENCitjb3R4MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTENCitjb3R4MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTENCitjb3R4MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTENCitjb3R4MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTENCitjb3R4MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTENCitjb3R4MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTENCitjb3R4MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTENCisNCitjb3R4MjQwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5LjAgICAgLT4gLTENCitjb3R4MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTENCitjb3R4MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTENCitjb3R4MjQzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA5LjAgICAgLT4gLTENCitjb3R4MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTENCitjb3R4MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTENCitjb3R4MjQ2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5ICAgICAgLT4gLTENCitjb3R4MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTENCitjb3R4MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTENCitjb3R4MjQ5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjlFKzEgLT4gLTENCitjb3R4MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQorY290eDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxDQorY290eDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxDQorY290eDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxDQorY290eDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxDQorY290eDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxDQorY290eDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxDQorY290eDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxDQorY290eDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxDQorY290eDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxDQorY290eDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxDQorY290eDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxDQorDQorY290eDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxDQorY290eDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxDQorY290eDMyMiBjb21wYXJldG90YWwgICA4ICAgICAgLTcuMCAgICAtPiAxDQorY290eDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxDQorY290eDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxDQorY290eDMyNSBjb21wYXJldG90YWwgICAuOEUrMSAgLTcgICAgICAtPiAxDQorY290eDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxDQorY290eDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxDQorY290eDMyOCBjb21wYXJldG90YWwgICA4LjAgICAgLTcwRS0xICAtPiAxDQorY290eDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxDQorY290eDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxDQorDQorY290eDM0MCBjb21wYXJldG90YWwgICA4LjAgICAgLTkuMCAgICAtPiAxDQorY290eDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxDQorY290eDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxDQorY290eDM0MyBjb21wYXJldG90YWwgICA4RSswICAgLTkuMCAgICAtPiAxDQorY290eDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxDQorY290eDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxDQorY290eDM0NiBjb21wYXJldG90YWwgICA4MEUtMSAgLTkgICAgICAtPiAxDQorY290eDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxDQorY290eDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxDQorY290eDM0OSBjb21wYXJldG90YWwgICA4ICAgICAgLS45RSsxICAtPiAxDQorY290eDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KK2NvdHg0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDANCitjb3R4NDAxIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcgICAgICAtPiAxDQorY290eDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTENCitjb3R4NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQ0KK2NvdHg0MDQgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNy4wICAgIC0+IDANCitjb3R4NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQorY290eDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQ0KK2NvdHg0MDcgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtN0UrMCAgIC0+IDENCitjb3R4NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwDQorY290eDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KK2NvdHg0MTAgY29tcGFyZXRvdGFsICAgLTcgICAgICAtNzBFLTEgIC0+IC0xDQorDQorY290eDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTENCitjb3R4NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KK2NvdHg0MjIgY29tcGFyZXRvdGFsICAgLTggICAgICAtNy4wICAgIC0+IC0xDQorY290eDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCitjb3R4NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KK2NvdHg0MjUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtNyAgICAgIC0+IC0xDQorY290eDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTENCitjb3R4NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KK2NvdHg0MjggY29tcGFyZXRvdGFsICAgLTguMCAgICAtNzBFLTEgIC0+IC0xDQorY290eDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCitjb3R4NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2NvdHg0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDENCitjb3R4NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxDQorY290eDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KK2NvdHg0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDENCitjb3R4NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQorY290eDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KK2NvdHg0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDENCitjb3R4NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxDQorY290eDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KK2NvdHg0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDENCitjb3R4NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxDQorDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorcHJlY2lzaW9uOiA0MA0KK2NvdHg0NzAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KK2NvdHg0NzEgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorY290eDQ3MiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KK2NvdHg0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2NvdHg0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQorY290eDQ3NSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2NvdHg0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KK2NvdHg0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorY290eDQ3OCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KK2NvdHg0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2NvdHg0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFNzg5IDEyMy40NTZFNzg5IC0+IC0xDQorY290eDQ4MSBjb21wYXJldG90YWwgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2NvdHg0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRTc4OSAxMjMuNDU2RTc4OSAtPiAtMQ0KK2NvdHg0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDANCitjb3R4NDg0IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDAwMEUtODkgLT4gMQ0KK2NvdHg0ODUgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5IC0+IDENCitjb3R4NDg2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwMDBFLTg5IC0+IDENCitjb3R4NDg3IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMEU3ODkgLT4gMQ0KK2NvdHg0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDENCitjb3R4NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDBFNzg5IC0+IDENCitjb3R4NDkwIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMQ0KK2NvdHg0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5IC0+IDENCitjb3R4NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDENCitjb3R4NDkzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMEU3ODkgLT4gMQ0KK2NvdHg0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDENCitjb3R4NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RTc4OSAxMjMuNDU2MDBFNzg5IC0+IDENCitjb3R4NDk2IGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMQ0KK2NvdHg0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5IC0+IDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorcHJlY2lzaW9uOiA5DQorY290eDUwMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KK2NvdHg1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCitjb3R4NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxDQorY290eDUwMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KK2NvdHg1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDENCitjb3R4NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxDQorY290eDUwNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KK2NvdHg1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDENCitjb3R4NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxDQorY290eDUwOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KK2NvdHg1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDENCitjb3R4NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxDQorY290eDUxMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KK2NvdHg1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDENCitjb3R4NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxDQorY290eDUxNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KK2NvdHg1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQorY290eDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCitjb3R4NTE4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSszICAgICAtPiAtMQ0KK2NvdHg1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQorY290eDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCitjb3R4NTIyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KK2NvdHg1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQorY290eDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCitjb3R4NTI1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KK2NvdHg1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQorY290eDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCitjb3R4NTI4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KK2NvdHg1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQorY290eDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCitjb3R4NTMxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KKy0tIExSIHN3YXANCitjb3R4NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KK2NvdHg1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQorY290eDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCitjb3R4NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KK2NvdHg1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xDQorY290eDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCitjb3R4NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KK2NvdHg1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xDQorY290eDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCitjb3R4NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KK2NvdHg1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQorY290eDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCitjb3R4NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KK2NvdHg1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQorY290eDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCitjb3R4NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KK2NvdHg1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQorY290eDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCitjb3R4NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KK2NvdHg1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQorY290eDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCitjb3R4NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KK2NvdHg1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQorY290eDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCitjb3R4NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KK2NvdHg1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQorY290eDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCitjb3R4NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KK2NvdHg1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQorY290eDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCitjb3R4NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KKy0tIHNpbWlsYXIgd2l0aCBhbiB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCitjb3R4NTgwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCitjb3R4NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCitjb3R4NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCitjb3R4NTgzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCitjb3R4NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCitjb3R4NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCitjb3R4NTg2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCitjb3R4NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCitjb3R4NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCitjb3R4NTg5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQorY290eDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KK2NvdHg1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCitjb3R4NTkyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQorY290eDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KK2NvdHg1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCitjb3R4NTk1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQorY290eDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KK2NvdHg1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCitjb3R4NTk4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQorY290eDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KKw0KKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQorcHJlY2lzaW9uOiAyMA0KK2NvdHg2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorY290eDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCitjb3R4NjAyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2NvdHg2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQorY290eDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCitjb3R4NjA1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KK2NvdHg2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQorY290eDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCitjb3R4NjA4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KK2NvdHg2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQorY290eDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCitjb3R4NjExIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KK2NvdHg2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQorY290eDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCitjb3R4NjE0IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KK2NvdHg2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQorY290eDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCitjb3R4NjE3IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KK2NvdHg2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQorY290eDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCitjb3R4NjIwIGNvbXBhcmV0b3RhbCAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2NvdHg2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorY290eDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCitjb3R4NjIzIGNvbXBhcmV0b3RhbCAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2NvdHg2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQorY290eDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCitjb3R4NjI2IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KK2NvdHg2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQorY290eDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCitjb3R4NjI5IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KK2NvdHg2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQorY290eDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCitjb3R4NjMyIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KK2NvdHg2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQorY290eDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCitjb3R4NjM1IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KK2NvdHg2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQorY290eDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCitjb3R4NjM4IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KK2NvdHg2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQorcHJlY2lzaW9uOiA5DQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitjb3R4NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwDQorY290eDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQ0KK2NvdHg2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDENCitjb3R4NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxDQorY290eDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTENCitjb3R4NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwDQorY290eDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTENCitjb3R4NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQ0KK2NvdHg2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xDQorY290eDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQ0KK2NvdHg2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDENCitjb3R4NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwDQorY290eDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTENCitjb3R4NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxDQorY290eDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMA0KK2NvdHg2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xDQorDQorY290eDY1NiBjb21wYXJldG90YWwgIC0wRTEgICAwLjAgLT4gLTENCitjb3R4NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQ0KK2NvdHg2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDENCitjb3R4NjU5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAuMCAtPiAxDQorY290eDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTENCitjb3R4NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQ0KK2NvdHg2NjIgY29tcGFyZXRvdGFsICAgMEUxICAgMCAgIC0+IDENCitjb3R4NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxDQorY290eDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMA0KK2NvdHg2NjUgY29tcGFyZXRvdGFsICAtMEUyICAtMEUxIC0+IC0xDQorY290eDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQ0KK2NvdHg2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDENCitjb3R4NjY4IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMiAtPiAxDQorY290eDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMA0KK2NvdHg2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDENCitjb3R4NjcxIGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMiAtPiAxDQorY290eDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTENCitjb3R4NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQ0KK2NvdHg2NzQgY29tcGFyZXRvdGFsICAgMEUxICAgMEUxIC0+IDANCitjb3R4Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxDQorY290eDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTENCitjb3R4Njc3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMiAtPiAtMQ0KK2NvdHg2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xDQorY290eDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMA0KKw0KKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCitwcmVjaXNpb246IDIwDQorY290eDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KK2NvdHg2ODEgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDENCitjb3R4NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxDQorY290eDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQ0KK2NvdHg2ODQgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDENCitjb3R4Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxDQorY290eDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQ0KK2NvdHg2ODcgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDENCitjb3R4Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxDQorY290eDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQ0KK2NvdHg2OTAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCitjb3R4NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQ0KK2NvdHg2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xDQorY290eDY5MyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgICAgMTIgLT4gLTENCitjb3R4Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQ0KK2NvdHg2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xDQorY290eDY5NiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gLTENCitjb3R4Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQ0KK2NvdHg2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xDQorY290eDY5OSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gLTENCisNCistLSBsb25nIG9wZXJhbmQgY2hlY2tzDQorbWF4ZXhwb25lbnQ6IDk5OQ0KK21pbmV4cG9uZW50OiAtOTk5DQorcHJlY2lzaW9uOiA5DQorY290eDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDENCitjb3R4NzAyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4MDAwICAtPiAtMQ0KK2NvdHg3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxDQorY290eDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTENCitjb3R4NzA1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAgMSAtPiAgMQ0KK2NvdHg3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xDQorY290eDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDENCitjb3R4NzA4IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTEgICAtPiAtMQ0KK2NvdHg3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxDQorY290eDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTENCitjb3R4NzExIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAgMSAtPiAgMQ0KK2NvdHg3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xDQorY290eDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTENCitjb3R4NzE0IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODkxICAtPiAgMQ0KK2NvdHg3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xDQorY290eDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDENCitjb3R4NzE3IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5NiAgMSAtPiAtMQ0KK2NvdHg3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxDQorDQorcHJlY2lzaW9uOiAxNQ0KKy0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uDQorY290eDcyMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgMSAtPiAxDQorY290eDcyMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAtPiAtMQ0KK2NvdHg3MjMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KK2NvdHg3MjQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgLT4gLTENCitjb3R4NzI1IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwICAxIC0+IDENCitjb3R4NzI2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgIC0+IC0xDQorY290eDcyNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgMSAtPiAxDQorY290eDcyOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAtPiAtMQ0KK2NvdHg3MjkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KK2NvdHg3MzAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgLT4gLTENCitjb3R4NzMxIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODk2ICAxIC0+IDENCitjb3R4NzMyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgIC0+IC0xDQorDQorLS0gcmVzaWR1ZSBjYXNlcw0KK3ByZWNpc2lvbjogNQ0KK2NvdHg3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDENCitjb3R4NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxDQorY290eDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQ0KK2NvdHg3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDENCitjb3R4NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KK2NvdHg3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xDQorY290eDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTENCitjb3R4NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQ0KK2NvdHg3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xDQorY290eDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTENCitjb3R4NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQ0KK2NvdHg3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDENCitjb3R4NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxDQorY290eDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KKw0KKy0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMNCitjb3R4NzYwIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAtPiAtMQ0KK2NvdHg3NjEgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDANCitjb3R4NzYyIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAtMQ0KK2NvdHg3NjMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCistLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdA0KK3ByZWNpc2lvbjogICAxMQ0KK2NvdHg3NjQgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCitwcmVjaXNpb246ICAgMTANCitjb3R4NzY1IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQorcHJlY2lzaW9uOiAgICA5DQorY290eDc2NiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KK3ByZWNpc2lvbjogICAgOA0KK2NvdHg3NjcgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCitwcmVjaXNpb246ICAgIDcNCitjb3R4NzY4IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQorcHJlY2lzaW9uOiAgICA2DQorY290eDc2OSBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KK3ByZWNpc2lvbjogICAgNQ0KK2NvdHg3NzAgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCitwcmVjaXNpb246ICAgIDQNCitjb3R4NzcxIGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQorcHJlY2lzaW9uOiAgICAzDQorY290eDc3MiBjb21wYXJldG90YWwgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgLT4gMQ0KK3ByZWNpc2lvbjogICAgMg0KK2NvdHg3NzMgY29tcGFyZXRvdGFsIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgIC0+IDENCitwcmVjaXNpb246ICAgIDENCitjb3R4Nzc0IGNvbXBhcmV0b3RhbCAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAtPiAxDQorDQorLS0gU3BlY2lhbHMNCitwcmVjaXNpb246ICAgOQ0KK2NvdHg3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KK2NvdHg3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQ0KK2NvdHg3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQ0KK2NvdHg3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQ0KK2NvdHg3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQ0KK2NvdHg3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQ0KK2NvdHg3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQ0KK2NvdHg3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KK2NvdHg3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQ0KK2NvdHg3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KK2NvdHg3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQ0KK2NvdHg3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQ0KK2NvdHg3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQ0KK2NvdHg3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQ0KK2NvdHg3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQ0KK2NvdHg3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2NvdHg4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KK2NvdHg4MDEgY29tcGFyZXRvdGFsIC1JbmYgIC0xMDAwICAtPiAtMQ0KK2NvdHg4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQ0KK2NvdHg4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQ0KK2NvdHg4MDQgY29tcGFyZXRvdGFsIC1JbmYgICAwICAgICAtPiAtMQ0KK2NvdHg4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQ0KK2NvdHg4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQ0KK2NvdHg4MDcgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KK2NvdHg4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KK2NvdHg4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTAgY29tcGFyZXRvdGFsIC0xICAgIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTMgY29tcGFyZXRvdGFsICAxICAgIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQ0KK2NvdHg4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KKw0KK2NvdHg4MjEgY29tcGFyZXRvdGFsICBOYU4gLUluZiAgICAtPiAgMQ0KK2NvdHg4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQ0KK2NvdHg4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQ0KK2NvdHg4MjQgY29tcGFyZXRvdGFsICBOYU4gLTAgICAgICAtPiAgMQ0KK2NvdHg4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQ0KK2NvdHg4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQ0KK2NvdHg4MjcgY29tcGFyZXRvdGFsICBOYU4gIDEwMDAgICAtPiAgMQ0KK2NvdHg4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQ0KK2NvdHg4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMA0KK2NvdHg4MzAgY29tcGFyZXRvdGFsIC1JbmYgIE5hTiAgICAtPiAgLTENCitjb3R4ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xDQorY290eDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQ0KK2NvdHg4MzMgY29tcGFyZXRvdGFsIC0wICAgIE5hTiAgICAtPiAgLTENCitjb3R4ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xDQorY290eDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQ0KK2NvdHg4MzYgY29tcGFyZXRvdGFsICAxMDAwIE5hTiAgICAtPiAgLTENCitjb3R4ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xDQorY290eDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwDQorY290eDgzOSBjb21wYXJldG90YWwgK05hTiAtTmFOICAgIC0+ICAxDQorY290eDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQ0KKw0KK2NvdHg4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQ0KK2NvdHg4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQ0KK2NvdHg4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQ0KK2NvdHg4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQ0KK2NvdHg4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQ0KK2NvdHg4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQ0KK2NvdHg4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQ0KK2NvdHg4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQ0KK2NvdHg4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQ0KK2NvdHg4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTENCitjb3R4ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCisNCitjb3R4ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xDQorY290eDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQ0KK2NvdHg4NTQgY29tcGFyZXRvdGFsIC1JbmYgIHNOYU4gICAtPiAgLTENCitjb3R4ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xDQorY290eDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQ0KK2NvdHg4NTcgY29tcGFyZXRvdGFsIC0wICAgIHNOYU4gICAtPiAgLTENCitjb3R4ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xDQorY290eDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQ0KK2NvdHg4NjAgY29tcGFyZXRvdGFsICAxMDAwIHNOYU4gICAtPiAgLTENCitjb3R4ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xDQorY290eDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxDQorY290eDg2MyBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwDQorDQorY290eDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMA0KK2NvdHg4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDENCitjb3R4ODczIGNvbXBhcmV0b3RhbCAgLXNOYU4gLUluZiAgIC0+ICAtMQ0KK2NvdHg4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xDQorY290eDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTENCitjb3R4ODc2IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTAgICAgIC0+ICAtMQ0KK2NvdHg4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xDQorY290eDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTENCitjb3R4ODc5IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDEwMDAgIC0+ICAtMQ0KK2NvdHg4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xDQorY290eDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTENCisNCitjb3R4ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwDQorY290eDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTENCitjb3R4ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxDQorY290eDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQ0KK2NvdHg4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDENCitjb3R4ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxDQorY290eDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQ0KK2NvdHg4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDENCitjb3R4ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxDQorY290eDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQ0KK2NvdHg4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDENCitjb3R4ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxDQorDQorLS0gTmFOcyB3aXRoIHBheWxvYWQNCitjb3R4OTYwIGNvbXBhcmV0b3RhbCAgTmFOOSAtSW5mICAgLT4gIDENCitjb3R4OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDENCitjb3R4OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDENCitjb3R4OTYzIGNvbXBhcmV0b3RhbCAtTmFONjcgTmFONSAgLT4gIC0xDQorY290eDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxDQorY290eDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxDQorY290eDk2NiBjb21wYXJldG90YWwgIEluZiAgIE5hTjIgIC0+ICAtMQ0KKw0KK2NvdHg5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQ0KK2NvdHg5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQ0KK2NvdHg5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTENCitjb3R4OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xDQorY290eDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQ0KK2NvdHg5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDENCitjb3R4OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xDQorY290eDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQ0KKw0KK2NvdHg5ODAgY29tcGFyZXRvdGFsIC1zTmFONzcxIC1zTmFONzcyIC0+IDENCitjb3R4OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxDQorY290eDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTENCitjb3R4OTgzIGNvbXBhcmV0b3RhbCArc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KK2NvdHg5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xDQorY290eDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDENCitjb3R4OTg2IGNvbXBhcmV0b3RhbCAtc05hTjc3MiArc05hTjc3MSAtPiAtMQ0KK2NvdHg5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQorDQorY290eDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xDQorY290eDk5MiBjb21wYXJldG90YWwgIHNOYU45OCAtMTEgICAgIC0+ICAxDQorY290eDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xDQorY290eDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xDQorY290eDk5NSBjb21wYXJldG90YWwgIE5hTjg1ICBzTmFOODMgIC0+ICAxDQorY290eDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xDQorY290eDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xDQorY290eDk5OCBjb21wYXJldG90YWwgIEluZiAgICBzTmFOOTAgIC0+IC0xDQorY290eDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZA0KK21heEV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK2NvdHgxMDgwIGNvbXBhcmV0b3RhbCArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gLTENCitjb3R4MTA4MSBjb21wYXJldG90YWwgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQorY290eDEwODIgY29tcGFyZXRvdGFsICswLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgMQ0KK2NvdHgxMDgzIGNvbXBhcmV0b3RhbCA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTENCitjb3R4MTA4NSBjb21wYXJldG90YWwgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+IC0xDQorY290eDEwODYgY29tcGFyZXRvdGFsIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KK2NvdHgxMDg3IGNvbXBhcmV0b3RhbCAtMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTENCitjb3R4MTA4OCBjb21wYXJldG90YWwgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQorDQorY290eDEwODkgY29tcGFyZXRvdGFsIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAtMQ0KK2NvdHgxMDkwIGNvbXBhcmV0b3RhbCAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgLT4gLTENCitjb3R4MTA5MSBjb21wYXJldG90YWwgMWUtNjAwMDAwMDAwIDFlLTQwMDAwMDAwMCAgIC0+IC0xDQorY290eDEwOTIgY29tcGFyZXRvdGFsIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAtMQ0KK2NvdHgxMDkzIGNvbXBhcmV0b3RhbCA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgLT4gLTENCitjb3R4MTA5NCBjb21wYXJldG90YWwgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAxDQorY290eDEwOTUgY29tcGFyZXRvdGFsIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMQ0KK2NvdHgxMDk2IGNvbXBhcmV0b3RhbCAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDENCitjb3R4MTA5NyBjb21wYXJldG90YWwgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxDQorY290eDEwOTggY29tcGFyZXRvdGFsIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgMQ0KK2NvdHgxMDk5IGNvbXBhcmV0b3RhbCA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDENCitjb3R4MTEwMCBjb21wYXJldG90YWwgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+IC0xDQorLS0gc2lnbnMNCitjb3R4MTEwMSBjb21wYXJldG90YWwgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+ICAxDQorY290eDExMDIgY29tcGFyZXRvdGFsICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMQ0KK2NvdHgxMTAzIGNvbXBhcmV0b3RhbCAtMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gLTENCitjb3R4MTEwNCBjb21wYXJldG90YWwgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xDQorY290eDExMDUgY29tcGFyZXRvdGFsICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAtMQ0KK2NvdHgxMTA2IGNvbXBhcmV0b3RhbCAgMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDENCitjb3R4MTEwNyBjb21wYXJldG90YWwgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+IC0xDQorY290eDExMDggY29tcGFyZXRvdGFsIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMQ0KKw0KKy0tIHNwcmVhZCB6ZXJvcw0KK2NvdHgxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMCAgICAgICAtPiAtMQ0KK2NvdHgxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMCAgICAgICAtPiAgMQ0KK2NvdHgxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMCAgICAgICAtPiAtMQ0KK2NvdHgxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMCAgICAgICAtPiAgMQ0KK2NvdHgxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KK2NvdHgxMTE1IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KK2NvdHgxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KK2NvdHgxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KK2NvdHgxMTE4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUrMzg0ICAtPiAtMQ0KK2NvdHgxMTE5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUrMzg0ICAtPiAgMQ0KK2NvdHgxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrMzg0ICAtPiAtMQ0KK2NvdHgxMTIxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUrMzg0ICAtPiAgMQ0KKw0KK2NvdHgxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQ0KK2NvdHgxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQ0KK2NvdHgxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQ0KK2NvdHgxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQ0KK2NvdHgxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQ0KK2NvdHgxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQ0KK2NvdHgxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQ0KK2NvdHgxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQ0KK2NvdHgxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQ0KK2NvdHgxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQ0KK2NvdHgxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQ0KK2NvdHgxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQ0KKw0KKy0tIE51bGwgdGVzdHMNCitjb3R4OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorY290eDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29tcGFyZXRvdG1hZy5kZWNUZXN0CmluZGV4IGNlZGZkZjguLmU4N2M5ZjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb21wYXJldG90bWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvbXBhcmV0b3RtYWcuZGVjVGVzdApAQCAtMSw3OTAgKzEsNzkwIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvbXBhcmV0b3RtYWcuZGVjVGVzdCAtLSBkZWNpbWFsIGNvbXBhcmlzb24sIGFicy4gdG90YWwgb3JkZXJpbmcgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IGl0IGNhbm5vdCBiZSBhc3N1bWVkIHRoYXQgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzCi0tLSBmb3IgdGhpcyBvcGVyYXRpb24gYWRlcXVhdGVseSwgaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZQotLS0gcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdCBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvCi0tLSBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4gU2ltaWxhcmx5LCBjb21wYXJldG90YWwKLS0tIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMgdGhhbiBjb21wYXJlLgotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDE2Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLQotLS0gc2FuaXR5IGNoZWNrcwotY3RteDAwMSBjb21wYXJldG90bWFnICAtMiAgLTIgICAtPiAgIDAKLWN0bXgwMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxCi1jdG14MDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQotY3RteDAwNCBjb21wYXJldG90bWFnICAtMiAgIDEgICAtPiAgIDEKLWN0bXgwMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwCi1jdG14MDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQotY3RteDAwNyBjb21wYXJldG90bWFnICAtMSAgLTEgICAtPiAgIDAKLWN0bXgwMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxCi1jdG14MDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAotY3RteDAxMCBjb21wYXJldG90bWFnICAtMSAgIDIgICAtPiAgLTEKLWN0bXgwMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xCi1jdG14MDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQotY3RteDAxMyBjb21wYXJldG90bWFnICAgMCAgIDAgICAtPiAgIDAKLWN0bXgwMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xCi1jdG14MDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQotY3RteDAxNiBjb21wYXJldG90bWFnICAgMSAgLTIgICAtPiAgLTEKLWN0bXgwMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwCi1jdG14MDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQotY3RteDAxOSBjb21wYXJldG90bWFnICAgMSAgIDEgICAtPiAgIDAKLWN0bXgwMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xCi1jdG14MDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAotY3RteDAyMiBjb21wYXJldG90bWFnICAgMiAgLTEgICAtPiAgIDEKLWN0bXgwMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxCi1jdG14MDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQotY3RteDAyNiBjb21wYXJldG90bWFnICAgMiAgIDIgICAtPiAgIDAKLQotY3RteDAzMSBjb21wYXJldG90bWFnICAtMjAgIC0yMCAgIC0+ICAgMAotY3RteDAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQotY3RteDAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQotY3RteDAzNCBjb21wYXJldG90bWFnICAtMjAgICAxMCAgIC0+ICAgMQotY3RteDAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAotY3RteDAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQotY3RteDAzNyBjb21wYXJldG90bWFnICAtMTAgIC0xMCAgIC0+ICAgMAotY3RteDAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQotY3RteDAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMAotY3RteDA0MCBjb21wYXJldG90bWFnICAtMTAgICAyMCAgIC0+ICAtMQotY3RteDA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQotY3RteDA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQotY3RteDA0MyBjb21wYXJldG90bWFnICAgMDAgICAwMCAgIC0+ICAgMAotY3RteDA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQotY3RteDA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQotY3RteDA0NiBjb21wYXJldG90bWFnICAgMTAgIC0yMCAgIC0+ICAtMQotY3RteDA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAotY3RteDA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQotY3RteDA0OSBjb21wYXJldG90bWFnICAgMTAgICAxMCAgIC0+ICAgMAotY3RteDA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQotY3RteDA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMAotY3RteDA1MiBjb21wYXJldG90bWFnICAgMjAgIC0xMCAgIC0+ICAgMQotY3RteDA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQotY3RteDA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQotY3RteDA1NiBjb21wYXJldG90bWFnICAgMjAgICAyMCAgIC0+ICAgMAotCi1jdG14MDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKLWN0bXgwNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQotY3RteDA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxCi1jdG14MDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKLWN0bXgwNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMAotY3RteDA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xCi1jdG14MDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKLWN0bXgwNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQotY3RteDA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwCi1jdG14MDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKLWN0bXgwNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQotY3RteDA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xCi1jdG14MDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKLWN0bXgwNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQotY3RteDA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xCi1jdG14MDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKLWN0bXgwNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMAotY3RteDA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxCi1jdG14MDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKLWN0bXgwODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQotY3RteDA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwCi1jdG14MDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKLWN0bXgwODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQotY3RteDA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxCi1jdG14MDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1tYXhleHBvbmVudDogOTk5OTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OTk5OQotY3RteDA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgOS45OTk5OTk5OUUrOTk5OTk5OTk5ICAgLT4gICAwCi1jdG14MDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSA5Ljk5OTk5OTk5RSs5OTk5OTk5OTkgICAtPiAgIDAKLWN0bXgwOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMAotY3RteDA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgLTkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgLT4gICAwCi0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcwotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAotY3RteDEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCi1jdG14MTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTEKLWN0bXgxMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3LjAgICAgIC0+ICAgMQotY3RteDEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCi1jdG14MTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDAKLWN0bXgxMDUgY29tcGFyZXRvdG1hZyAgIDAuN0UrMSA3ICAgICAgIC0+ICAgMAotY3RteDEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCi1jdG14MTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTEKLWN0bXgxMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3MEUtMSAgIC0+ICAgMAotY3RteDEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCi1jdG14MTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDEKLQotY3RteDEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxCi1jdG14MTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKLWN0bXgxMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQotY3RteDEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxCi1jdG14MTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKLWN0bXgxMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQotY3RteDEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxCi1jdG14MTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKLWN0bXgxMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQotY3RteDEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQotY3RteDEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCi0KLWN0bXgxNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICA5LjAgICAgIC0+ICAtMQotY3RteDE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xCi1jdG14MTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKLWN0bXgxNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICA5LjAgICAgIC0+ICAtMQotY3RteDE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xCi1jdG14MTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKLWN0bXgxNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICA5ICAgICAgIC0+ICAtMQotY3RteDE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xCi1jdG14MTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKLWN0bXgxNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAwLjlFKzEgIC0+ICAtMQotY3RteDE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KLWN0bXgyMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAotY3RteDIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xCi1jdG14MjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDEKLWN0bXgyMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQotY3RteDIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwCi1jdG14MjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDAKLWN0bXgyMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQotY3RteDIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xCi1jdG14MjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDAKLWN0bXgyMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAotY3RteDIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxCi0KLWN0bXgyMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQotY3RteDIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCi1jdG14MjIyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNy4wICAgICAtPiAgIDEKLWN0bXgyMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQotY3RteDIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCi1jdG14MjI1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgNyAgICAgICAtPiAgIDEKLWN0bXgyMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQotY3RteDIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCi1jdG14MjI4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNzBFLTEgICAtPiAgIDEKLWN0bXgyMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQotY3RteDIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCi0KLWN0bXgyNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQotY3RteDI0MSBjb21wYXJldG90bWFnICAtOC4wICAgIDkgICAgICAgLT4gIC0xCi1jdG14MjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKLWN0bXgyNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQotY3RteDI0NCBjb21wYXJldG90bWFnICAtODBFLTEgIDkuMCAgICAgLT4gIC0xCi1jdG14MjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKLWN0bXgyNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQotY3RteDI0NyBjb21wYXJldG90bWFnICAtOC4wICAgIDlFKzAgICAgLT4gIC0xCi1jdG14MjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKLWN0bXgyNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQotY3RteDI1MCBjb21wYXJldG90bWFnICAtOCAgICAgIDkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KLWN0bXgzMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKLWN0bXgzMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNyAgICAgICAtPiAgLTEKLWN0bXgzMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDEKLWN0bXgzMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKLWN0bXgzMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNy4wICAgICAtPiAgIDAKLWN0bXgzMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDAKLWN0bXgzMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKLWN0bXgzMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtN0UrMCAgICAtPiAgLTEKLWN0bXgzMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDAKLWN0bXgzMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKLWN0bXgzMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNzBFLTEgICAtPiAgIDEKLQotY3RteDMyMCBjb21wYXJldG90bWFnICAgOC4wICAgIC03LjAgICAgIC0+ICAgMQotY3RteDMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQotY3RteDMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQotY3RteDMyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIC03LjAgICAgIC0+ICAgMQotY3RteDMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQotY3RteDMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQotY3RteDMyNiBjb21wYXJldG90bWFnICAgODBFLTEgIC03ICAgICAgIC0+ICAgMQotY3RteDMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQotY3RteDMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQotY3RteDMyOSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uN0UrMSAgIC0+ICAgMQotY3RteDMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQotCi1jdG14MzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xCi1jdG14MzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xCi1jdG14MzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCi1jdG14MzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xCi1jdG14MzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xCi1jdG14MzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCi1jdG14MzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xCi1jdG14MzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xCi1jdG14MzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCi1jdG14MzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xCi1jdG14MzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KLWN0bXg0MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCi1jdG14NDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQotY3RteDQwMiBjb21wYXJldG90bWFnICAgLTcgICAgICAtNy4wICAgICAtPiAgIDEKLWN0bXg0MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCi1jdG14NDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMAotY3RteDQwNSBjb21wYXJldG90bWFnICAgLS43RSsxICAtNyAgICAgICAtPiAgIDAKLWN0bXg0MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCi1jdG14NDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQotY3RteDQwOCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNzBFLTEgICAtPiAgIDAKLWN0bXg0MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCi1jdG14NDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQotCi1jdG14NDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQotY3RteDQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKLWN0bXg0MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxCi1jdG14NDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQotY3RteDQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKLWN0bXg0MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxCi1jdG14NDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQotY3RteDQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKLWN0bXg0MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxCi1jdG14NDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQotY3RteDQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKLQotY3RteDQ0MCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOS4wICAgICAtPiAgLTEKLWN0bXg0NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xCi1jdG14NDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQotY3RteDQ0MyBjb21wYXJldG90bWFnICAgLThFKzAgICAtOS4wICAgICAtPiAgLTEKLWN0bXg0NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xCi1jdG14NDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQotY3RteDQ0NiBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOSAgICAgICAtPiAgLTEKLWN0bXg0NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xCi1jdG14NDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQotY3RteDQ0OSBjb21wYXJldG90bWFnICAgLTggICAgICAtLjlFKzEgICAtPiAgLTEKLWN0bXg0NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1wcmVjaXNpb246IDQwCi1jdG14NDcwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKLWN0bXg0NzEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1jdG14NDcyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCi1jdG14NDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWN0bXg0NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCi1jdG14NDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1jdG14NDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKLWN0bXg0NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1jdG14NDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCi1jdG14NDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWN0bXg0ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xCi1jdG14NDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1jdG14NDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFNzg5IDEyMy40NTZFNzg5ICAtPiAgLTEKLWN0bXg0ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwCi1jdG14NDg0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwMDBFLTg5ICAtPiAgIDEKLWN0bXg0ODUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwMDAwMDAwRTc4OSAgLT4gICAxCi1jdG14NDg2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAgLT4gICAxCi1jdG14NDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwMDBFNzg5ICAtPiAgIDEKLWN0bXg0ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCi1jdG14NDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAgLT4gICAxCi1jdG14NDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDEKLWN0bXg0OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2MDAwMDAwRTc4OSAgLT4gICAxCi1jdG14NDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxCi1jdG14NDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDBFNzg5ICAtPiAgIDEKLWN0bXg0OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCi1jdG14NDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAgLT4gICAxCi1jdG14NDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDEKLWN0bXg0OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RTc4OSAxMjMuNDU2RTc4OSAgLT4gICAwCi0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKLXByZWNpc2lvbjogOQotY3RteDUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKLWN0bXg1MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxCi1jdG14NTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQotY3RteDUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKLWN0bXg1MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxCi1jdG14NTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQotY3RteDUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKLWN0bXg1MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxCi1jdG14NTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQotY3RteDUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKLWN0bXg1MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxCi1jdG14NTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQotY3RteDUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKLWN0bXg1MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxCi1jdG14NTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQotY3RteDUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKLWN0bXg1MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xCi1jdG14NTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQotY3RteDUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKLWN0bXg1MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xCi1jdG14NTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQotY3RteDUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKLWN0bXg1MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xCi1jdG14NTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQotY3RteDUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKLWN0bXg1MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xCi1jdG14NTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQotY3RteDUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKLWN0bXg1MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xCi1jdG14NTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQotY3RteDUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKLS0tIExSIHN3YXAKLWN0bXg1NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCi1jdG14NTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQotY3RteDU0MiBjb21wYXJldG90bWFnICAgIDFFLTEzICAxICAgICAgICAtPiAgLTEKLWN0bXg1NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCi1jdG14NTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQotY3RteDU0NSBjb21wYXJldG90bWFnICAgIDFFLTEwICAxICAgICAgICAtPiAgLTEKLWN0bXg1NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCi1jdG14NTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQotY3RteDU0OCBjb21wYXJldG90bWFnICAgIDFFLTcgICAxICAgICAgICAtPiAgLTEKLWN0bXg1NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCi1jdG14NTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQotY3RteDU1MSBjb21wYXJldG90bWFnICAgIDFFLTQgICAxICAgICAgICAtPiAgLTEKLWN0bXg1NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCi1jdG14NTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQotY3RteDU1NCBjb21wYXJldG90bWFnICAgIDFFLTEgICAxICAgICAgICAtPiAgLTEKLWN0bXg1NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCi1jdG14NTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQotY3RteDU1NyBjb21wYXJldG90bWFnICAgIDFFKzIgICAxICAgICAgICAtPiAgIDEKLWN0bXg1NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCi1jdG14NTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQotY3RteDU2MSBjb21wYXJldG90bWFnICAgIDFFKzUgICAxICAgICAgICAtPiAgIDEKLWN0bXg1NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCi1jdG14NTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQotY3RteDU2NCBjb21wYXJldG90bWFnICAgIDFFKzggICAxICAgICAgICAtPiAgIDEKLWN0bXg1NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCi1jdG14NTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQotY3RteDU2NyBjb21wYXJldG90bWFnICAgIDFFKzExICAxICAgICAgICAtPiAgIDEKLWN0bXg1NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCi1jdG14NTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQotY3RteDU3MCBjb21wYXJldG90bWFnICAgIDFFKzE0ICAxICAgICAgICAtPiAgIDEKLWN0bXg1NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCi0tLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5Ci1jdG14NTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCi1jdG14NTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxCi1jdG14NTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxCi1jdG14NTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCi1jdG14NTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxCi1jdG14NTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxCi1jdG14NTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCi1jdG14NTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxCi1jdG14NTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxCi1jdG14NTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCi1jdG14NTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xCi1jdG14NTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xCi1jdG14NTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCi1jdG14NTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xCi1jdG14NTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xCi1jdG14NTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCi1jdG14NTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xCi1jdG14NTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xCi1jdG14NTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCi1jdG14NTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xCi0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCi1wcmVjaXNpb246IDIwCi1jdG14NjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQotY3RteDYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MDIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCi1jdG14NjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQotY3RteDYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MDUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAgLT4gIC0xCi1jdG14NjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQotY3RteDYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MDggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAgLT4gIC0xCi1jdG14NjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQotY3RteDYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKLWN0bXg2MTEgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAgLT4gICAxCi1jdG14NjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQotY3RteDYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKLWN0bXg2MTQgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAgLT4gICAxCi1jdG14NjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQotY3RteDYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKLWN0bXg2MTcgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAgLT4gICAxCi1jdG14NjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQotY3RteDYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKLWN0bXg2MjAgY29tcGFyZXRvdG1hZyAgLTEyICAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCi1jdG14NjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQotY3RteDYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MjMgY29tcGFyZXRvdG1hZyAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAgLT4gIC0xCi1jdG14NjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQotY3RteDYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MjYgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAgLT4gIC0xCi1jdG14NjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQotY3RteDYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKLWN0bXg2MjkgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAgLT4gIC0xCi1jdG14NjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQotY3RteDYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKLWN0bXg2MzIgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAgLT4gICAxCi1jdG14NjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQotY3RteDYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKLWN0bXg2MzUgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAgLT4gICAxCi1jdG14NjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQotY3RteDYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKLWN0bXg2MzggY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAgLT4gICAxCi1jdG14NjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQotcHJlY2lzaW9uOiA5Ci0KLS0tIGV4dGVuZGVkIHplcm9zCi1jdG14NjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMAotY3RteDY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDAKLWN0bXg2NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCi1jdG14NjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQotY3RteDY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDAKLWN0bXg2NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCi1jdG14NjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQotY3RteDY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDEKLWN0bXg2NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCi1jdG14NjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQotY3RteDY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDAKLWN0bXg2NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCi1jdG14NjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQotY3RteDY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTEKLWN0bXg2NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCi1jdG14NjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMAotCi1jdG14NjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQotY3RteDY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKLWN0bXg2NTggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAuMCAgLT4gICAxCi1jdG14NjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQotY3RteDY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKLWN0bXg2NjEgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAgICAgLT4gICAxCi1jdG14NjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQotY3RteDY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKLWN0bXg2NjQgY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMSAgLT4gICAwCi1jdG14NjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQotY3RteDY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKLWN0bXg2NjcgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMSAgLT4gICAxCi1jdG14NjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQotY3RteDY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKLWN0bXg2NzAgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMiAgLT4gIC0xCi1jdG14NjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMAotY3RteDY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKLWN0bXg2NzMgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMSAgLT4gICAxCi1jdG14Njc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMAotY3RteDY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKLWN0bXg2NzYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMiAgLT4gIC0xCi1jdG14Njc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMAotY3RteDY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKLWN0bXg2NzkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMiAgLT4gICAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLXByZWNpc2lvbjogMjAKLWN0bXg2ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwCi1jdG14NjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQotY3RteDY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDEKLWN0bXg2ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxCi1jdG14Njg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQotY3RteDY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDEKLWN0bXg2ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxCi1jdG14Njg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQotY3RteDY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDEKLWN0bXg2ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxCi1jdG14NjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAotY3RteDY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTEKLWN0bXg2OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xCi1jdG14NjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQotY3RteDY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTEKLWN0bXg2OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xCi1jdG14Njk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQotY3RteDY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTEKLWN0bXg2OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xCi1jdG14Njk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQotCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzCi1tYXhleHBvbmVudDogOTk5Ci1taW5leHBvbmVudDogLTk5OQotcHJlY2lzaW9uOiA5Ci1jdG14NzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQotY3RteDcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKLWN0bXg3MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxCi1jdG14NzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQotY3RteDcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKLWN0bXg3MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xCi1jdG14NzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQotY3RteDcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKLWN0bXg3MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxCi1jdG14NzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQotY3RteDcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKLWN0bXg3MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xCi1jdG14NzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQotY3RteDcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKLWN0bXg3MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxCi1jdG14NzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQotY3RteDcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKLWN0bXg3MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xCi0KLXByZWNpc2lvbjogMTUKLS0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uCi1jdG14NzIxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgMSAgLT4gICAxCi1jdG14NzIyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgLT4gIC0xCi1jdG14NzIzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgMSAgLT4gICAxCi1jdG14NzI0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgLT4gIC0xCi1jdG14NzI1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gICAxCi1jdG14NzI2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgLT4gIC0xCi1jdG14NzI3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gICAxCi1jdG14NzI4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgLT4gIC0xCi1jdG14NzI5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gICAxCi1jdG14NzMwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgLT4gIC0xCi1jdG14NzMxIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gICAxCi1jdG14NzMyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgLT4gIC0xCi0KLS0tIHJlc2lkdWUgY2FzZXMKLXByZWNpc2lvbjogNQotY3RteDc0MCBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OTkgICAtPiAgIDEKLWN0bXg3NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxCi1jdG14NzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQotY3RteDc0MyBjb21wYXJldG90bWFnICAxICAxLjAwMDAgICAgICAtPiAgIDEKLWN0bXg3NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xCi1jdG14NzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQotY3RteDc0NiBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMDEgICAtPiAgLTEKLWN0bXg3NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xCi1jdG14NzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQotY3RteDc1MiBjb21wYXJldG90bWFnICAwLjk5OTk5ICAgIDEgICAtPiAgLTEKLWN0bXg3NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xCi1jdG14NzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQotY3RteDc1NSBjb21wYXJldG90bWFnICAxLjAwMDAwMSAgIDEgICAtPiAgIDEKLWN0bXg3NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxCi0KLS0tIGEgc2VsZWN0aW9uIG9mIGxvbmdpZXMKLWN0bXg3NjAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTU4MzA2MjkuODM0NzA4NTAyNTgwODc1NjU2MDM1Nzk0MCAgLT4gICAxCi1jdG14NzYxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMAotY3RteDc2MiBjb21wYXJldG90bWFnIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgIDEKLWN0bXg3NjMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xCi0tLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdAotcHJlY2lzaW9uOiAgIDExCi1jdG14NzY0IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgIDEwCi1jdG14NzY1IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA5Ci1jdG14NzY2IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA4Ci1jdG14NzY3IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA3Ci1jdG14NzY4IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA2Ci1jdG14NzY5IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA1Ci1jdG14NzcwIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICA0Ci1jdG14NzcxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICAzCi1jdG14NzcyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICAyCi1jdG14NzczIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotcHJlY2lzaW9uOiAgICAxCi1jdG14Nzc0IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQotCi0tLSBTcGVjaWFscwotcHJlY2lzaW9uOiAgIDkKLWN0bXg3ODAgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDAKLWN0bXg3ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDEKLWN0bXg3ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKLWN0bXg3ODMgY29tcGFyZXRvdG1hZyAgSW5mICAtMCAgICAgLT4gIDEKLWN0bXg3ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDEKLWN0bXg3ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKLWN0bXg3ODYgY29tcGFyZXRvdG1hZyAgSW5mICAgMTAwMCAgLT4gIDEKLWN0bXg3ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKLWN0bXg3ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKLWN0bXg3ODkgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKLWN0bXg3OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTEKLWN0bXg3OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKLWN0bXg3OTIgY29tcGFyZXRvdG1hZyAgMCAgICAgSW5mICAgLT4gLTEKLWN0bXg3OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTEKLWN0bXg3OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKLWN0bXg3OTUgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKLQotY3RteDgwMCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAotY3RteDgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQotY3RteDgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQotY3RteDgwMyBjb21wYXJldG90bWFnIC1JbmYgIC0wICAgICAtPiAgMQotY3RteDgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQotY3RteDgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQotY3RteDgwNiBjb21wYXJldG90bWFnIC1JbmYgICAxMDAwICAtPiAgMQotY3RteDgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAotY3RteDgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAotY3RteDgwOSBjb21wYXJldG90bWFnIC0xMDAwIC1JbmYgICAtPiAtMQotY3RteDgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQotY3RteDgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQotY3RteDgxMiBjb21wYXJldG90bWFnICAwICAgIC1JbmYgICAtPiAtMQotY3RteDgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQotY3RteDgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQotY3RteDgxNSBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAotCi1jdG14ODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCi1jdG14ODIyIGNvbXBhcmV0b3RtYWcgIE5hTiAtMTAwMCAgIC0+ICAxCi1jdG14ODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxCi1jdG14ODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCi1jdG14ODI1IGNvbXBhcmV0b3RtYWcgIE5hTiAgMCAgICAgIC0+ICAxCi1jdG14ODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1jdG14ODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCi1jdG14ODI4IGNvbXBhcmV0b3RtYWcgIE5hTiAgSW5mICAgIC0+ICAxCi1jdG14ODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwCi1jdG14ODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQotY3RteDgzMSBjb21wYXJldG90bWFnIC0xMDAwIE5hTiAgICAtPiAgLTEKLWN0bXg4MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xCi1jdG14ODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQotY3RteDgzNCBjb21wYXJldG90bWFnICAwICAgIE5hTiAgICAtPiAgLTEKLWN0bXg4MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xCi1jdG14ODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQotY3RteDgzNyBjb21wYXJldG90bWFnICBJbmYgIE5hTiAgICAtPiAgLTEKLWN0bXg4MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDAKLWN0bXg4MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKLWN0bXg4NDAgY29tcGFyZXRvdG1hZyAtTmFOICtOYU4gICAgLT4gIDAKLQotY3RteDg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMAotY3RteDg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKLWN0bXg4NDMgY29tcGFyZXRvdG1hZyAgc05hTiAtSW5mICAgLT4gIDEKLWN0bXg4NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDEKLWN0bXg4NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKLWN0bXg4NDYgY29tcGFyZXRvdG1hZyAgc05hTiAtMCAgICAgLT4gIDEKLWN0bXg4NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDEKLWN0bXg4NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKLWN0bXg4NDkgY29tcGFyZXRvdG1hZyAgc05hTiAgMTAwMCAgLT4gIDEKLWN0bXg4NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xCi1jdG14ODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCi0KLWN0bXg4NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDAKLWN0bXg4NTMgY29tcGFyZXRvdG1hZyAtTmFOICBzTmFOICAgLT4gIDEKLWN0bXg4NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCi1jdG14ODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQotY3RteDg1NiBjb21wYXJldG90bWFnIC0xICAgIHNOYU4gICAtPiAgLTEKLWN0bXg4NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCi1jdG14ODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQotY3RteDg1OSBjb21wYXJldG90bWFnICAxICAgIHNOYU4gICAtPiAgLTEKLWN0bXg4NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCi1jdG14ODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQotY3RteDg2MiBjb21wYXJldG90bWFnICBOYU4gIHNOYU4gICAtPiAgMQotY3RteDg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAotCi1jdG14ODcxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1zTmFOICAtPiAgMAotY3RteDg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xCi1jdG14ODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQotY3RteDg3NCBjb21wYXJldG90bWFnICAtc05hTiAtMTAwMCAgLT4gIDEKLWN0bXg4NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxCi1jdG14ODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQotY3RteDg3NyBjb21wYXJldG90bWFnICAtc05hTiAgMCAgICAgLT4gIDEKLWN0bXg4NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxCi1jdG14ODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQotY3RteDg4MCBjb21wYXJldG90bWFnICAtc05hTiAgTmFOICAgLT4gIC0xCi1jdG14ODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMAotCi1jdG14ODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAotY3RteDg4MyBjb21wYXJldG90bWFnIC1OYU4gIC1zTmFOICAgLT4gIDEKLWN0bXg4ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQotY3RteDg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCi1jdG14ODg2IGNvbXBhcmV0b3RtYWcgLTEgICAgLXNOYU4gICAtPiAgLTEKLWN0bXg4ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQotY3RteDg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCi1jdG14ODg5IGNvbXBhcmV0b3RtYWcgIDEgICAgLXNOYU4gICAtPiAgLTEKLWN0bXg4OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQotY3RteDg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCi1jdG14ODkyIGNvbXBhcmV0b3RtYWcgIE5hTiAgLXNOYU4gICAtPiAgMQotY3RteDg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDAKLQotLS0gTmFOcyB3aXRoIHBheWxvYWQKLWN0bXg5NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKLWN0bXg5NjEgY29tcGFyZXRvdG1hZyAgTmFOOCAgOTk5ICAgLT4gIDEKLWN0bXg5NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDEKLWN0bXg5NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKLWN0bXg5NjQgY29tcGFyZXRvdG1hZyAtSW5mICAtTmFONCAgLT4gIC0xCi1jdG14OTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQotY3RteDk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKLQotY3RteDk3MCBjb21wYXJldG90bWFnIC1OYU40MSAtTmFONDIgLT4gLTEKLWN0bXg5NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xCi1jdG14OTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQotY3RteDk3MyBjb21wYXJldG90bWFnICtOYU40MSArTmFONDIgLT4gLTEKLWN0bXg5NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxCi1jdG14OTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQotY3RteDk3NiBjb21wYXJldG90bWFnIC1OYU40MiArTmFOMDEgLT4gIDEKLWN0bXg5NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxCi0KLWN0bXg5ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQotY3RteDk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xCi1jdG14OTgyIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKLWN0bXg5ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQotY3RteDk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxCi1jdG14OTg1IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKLWN0bXg5ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQotY3RteDk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxCi0KLWN0bXg5OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDEKLWN0bXg5OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKLWN0bXg5OTMgY29tcGFyZXRvdG1hZyAgc05hTjk3ICBOYU4gICAgLT4gLTEKLWN0bXg5OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTEKLWN0bXg5OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKLWN0bXg5OTYgY29tcGFyZXRvdG1hZyAtSW5mICAgIHNOYU45MiAgLT4gLTEKLWN0bXg5OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTEKLWN0bXg5OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKLWN0bXg5OTkgY29tcGFyZXRvdG1hZyAgTmFOICAgLXNOYU44OSAgLT4gIDEKLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZAotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKLWN0bXgxMDgwIGNvbXBhcmV0b3RtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTEKLWN0bXgxMDgxIGNvbXBhcmV0b3RtYWcgOUUrOTk5OTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgIDEKLWN0bXgxMDgyIGNvbXBhcmV0b3RtYWcgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDEKLWN0bXgxMDgzIGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgICAtPiAgLTEKLWN0bXgxMDg1IGNvbXBhcmV0b3RtYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTEKLWN0bXgxMDg2IGNvbXBhcmV0b3RtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgIDEKLWN0bXgxMDg3IGNvbXBhcmV0b3RtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDEKLWN0bXgxMDg4IGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgICAtPiAgLTEKLQotY3RteDEwODkgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgIC0+ICAtMQotY3RteDEwOTAgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAwICAgIC0+ICAtMQotY3RteDEwOTEgY29tcGFyZXRvdG1hZyAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgIC0+ICAtMQotY3RteDEwOTIgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgIC0+ICAtMQotY3RteDEwOTMgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4xICAgICAgICAgICAgIC0+ICAtMQotY3RteDEwOTQgY29tcGFyZXRvdG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICAgMQotY3RteDEwOTUgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgIC0+ICAgMQotY3RteDEwOTYgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgIC0+ICAgMQotY3RteDEwOTcgY29tcGFyZXRvdG1hZyAxZTYwMDAwMDAwMCAxZTQwMDAwMDAwMCAgICAgIC0+ICAgMQotY3RteDEwOTggY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgIC0+ICAgMQotY3RteDEwOTkgY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgIC0+ICAgMQotY3RteDExMDAgY29tcGFyZXRvdG1hZyAxMDAgIDllOTk5OTk5OTk4ICAgICAgICAgICAgIC0+ICAtMQotLS0gc2lnbnMKLWN0bXgxMTAxIGNvbXBhcmV0b3RtYWcgIDFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDEKLWN0bXgxMTAyIGNvbXBhcmV0b3RtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExICAtPiAgIDEKLWN0bXgxMTAzIGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDEKLWN0bXgxMTA0IGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExICAtPiAgIDEKLWN0bXgxMTA1IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExICAtPiAgLTEKLWN0bXgxMTA2IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTEKLWN0bXgxMTA3IGNvbXBhcmV0b3RtYWcgLTFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExICAtPiAgLTEKLWN0bXgxMTA4IGNvbXBhcmV0b3RtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTEKLQotLS0gc3ByZWFkIHplcm9zCi1jdG14MTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTEKLWN0bXgxMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQotY3RteDExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMCAgICAgICAgLT4gIC0xCi1jdG14MTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTEKLWN0bXgxMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQotY3RteDExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xCi1jdG14MTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTEKLWN0bXgxMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQotY3RteDExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrMzg0ICAgLT4gIC0xCi1jdG14MTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTEKLWN0bXgxMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQotY3RteDExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrMzg0ICAgLT4gIC0xCi0KLWN0bXgxMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQotY3RteDExMzEgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMCAgICAgICAgLT4gICAxCi1jdG14MTEzMiBjb21wYXJldG90bWFnICAtMEUrMzg0ICAwICAgICAgICAtPiAgIDEKLWN0bXgxMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQotY3RteDExMzQgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAgMEUtMzgzICAgLT4gICAxCi1jdG14MTEzNSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wRS0zODMgICAtPiAgIDEKLWN0bXgxMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQotY3RteDExMzcgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAtMEUtMzgzICAgLT4gICAxCi1jdG14MTEzOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRS0zODMgICAtPiAgIDEKLWN0bXgxMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQotY3RteDExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtMzgzICAgLT4gICAxCi1jdG14MTE0MSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRS0zODMgICAtPiAgIDEKLQotLS0gTnVsbCB0ZXN0cwotY3RteDk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWN0bXg5OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBjb21wYXJldG90bWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBjb21wYXJpc29uLCBhYnMuIHRvdGFsIG9yZGVyaW5nICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gTm90ZSB0aGF0IGl0IGNhbm5vdCBiZSBhc3N1bWVkIHRoYXQgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzDQorLS0gZm9yIHRoaXMgb3BlcmF0aW9uIGFkZXF1YXRlbHksIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUNCistLSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90IG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28NCistLSBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4gU2ltaWxhcmx5LCBjb21wYXJldG90YWwNCistLSB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzIHRoYW4gY29tcGFyZS4NCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2N0bXgwMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwDQorY3RteDAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDENCitjdG14MDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQ0KK2N0bXgwMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxDQorY3RteDAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDANCitjdG14MDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQ0KK2N0bXgwMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwDQorY3RteDAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDENCitjdG14MDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMA0KK2N0bXgwMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xDQorY3RteDAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTENCitjdG14MDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQ0KK2N0bXgwMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwDQorY3RteDAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTENCitjdG14MDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQ0KK2N0bXgwMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xDQorY3RteDAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDANCitjdG14MDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQ0KK2N0bXgwMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwDQorY3RteDAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTENCitjdG14MDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMA0KK2N0bXgwMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxDQorY3RteDAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDENCitjdG14MDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQ0KK2N0bXgwMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwDQorDQorY3RteDAzMSBjb21wYXJldG90bWFnICAtMjAgIC0yMCAgIC0+ICAgMA0KK2N0bXgwMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDENCitjdG14MDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxDQorY3RteDAzNCBjb21wYXJldG90bWFnICAtMjAgICAxMCAgIC0+ICAgMQ0KK2N0bXgwMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDANCitjdG14MDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xDQorY3RteDAzNyBjb21wYXJldG90bWFnICAtMTAgIC0xMCAgIC0+ICAgMA0KK2N0bXgwMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDENCitjdG14MDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwDQorY3RteDA0MCBjb21wYXJldG90bWFnICAtMTAgICAyMCAgIC0+ICAtMQ0KK2N0bXgwNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTENCitjdG14MDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xDQorY3RteDA0MyBjb21wYXJldG90bWFnICAgMDAgICAwMCAgIC0+ICAgMA0KK2N0bXgwNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTENCitjdG14MDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xDQorY3RteDA0NiBjb21wYXJldG90bWFnICAgMTAgIC0yMCAgIC0+ICAtMQ0KK2N0bXgwNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDANCitjdG14MDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxDQorY3RteDA0OSBjb21wYXJldG90bWFnICAgMTAgICAxMCAgIC0+ICAgMA0KK2N0bXgwNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTENCitjdG14MDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwDQorY3RteDA1MiBjb21wYXJldG90bWFnICAgMjAgIC0xMCAgIC0+ICAgMQ0KK2N0bXgwNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDENCitjdG14MDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxDQorY3RteDA1NiBjb21wYXJldG90bWFnICAgMjAgICAyMCAgIC0+ICAgMA0KKw0KK2N0bXgwNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMA0KK2N0bXgwNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQ0KK2N0bXgwNjMgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDAuMCAgIC0+ICAgMQ0KK2N0bXgwNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQ0KK2N0bXgwNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMA0KK2N0bXgwNjYgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTIuMCAgIC0+ICAtMQ0KK2N0bXgwNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMA0KK2N0bXgwNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQ0KK2N0bXgwNjkgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDEuMCAgIC0+ICAgMA0KK2N0bXgwNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQ0KK2N0bXgwNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQ0KK2N0bXgwNzIgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTEuMCAgIC0+ICAtMQ0KK2N0bXgwNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMA0KK2N0bXgwNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQ0KK2N0bXgwNzUgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDIuMCAgIC0+ICAtMQ0KK2N0bXgwNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQ0KK2N0bXgwNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMA0KK2N0bXgwNzggY29tcGFyZXRvdG1hZyAgIDEuMCAgIDAuMCAgIC0+ICAgMQ0KK2N0bXgwNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMA0KK2N0bXgwODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQ0KK2N0bXgwODEgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTIuMCAgIC0+ICAgMA0KK2N0bXgwODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQ0KK2N0bXgwODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQ0KK2N0bXgwODUgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDEuMCAgIC0+ICAgMQ0KK2N0bXgwODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMA0KKw0KKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK2N0bXgwOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMA0KK2N0bXgwOTEgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IDkuOTk5OTk5OTlFKzk5OTk5OTk5OSAgIC0+ICAgMA0KK2N0bXgwOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMA0KK2N0bXgwOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrOTk5OTk5OTk5IC05Ljk5OTk5OTk5RSs5OTk5OTk5OTkgIC0+ICAgMA0KKw0KKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCitjdG14MTAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNy4wICAgICAtPiAgIDANCitjdG14MTAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNyAgICAgICAtPiAgLTENCitjdG14MTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCitjdG14MTAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgNy4wICAgICAtPiAgIDENCitjdG14MTA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNy4wICAgICAtPiAgIDANCitjdG14MTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCitjdG14MTA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgNyAgICAgICAtPiAgLTENCitjdG14MTA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgN0UrMCAgICAtPiAgLTENCitjdG14MTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCitjdG14MTA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgMC43RSsxICAtPiAgIDANCitjdG14MTEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNzBFLTEgICAtPiAgIDENCisNCitjdG14MTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCitjdG14MTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDENCitjdG14MTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDENCitjdG14MTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCitjdG14MTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDENCitjdG14MTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDENCitjdG14MTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCitjdG14MTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDENCitjdG14MTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDENCitjdG14MTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQorY3RteDEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxDQorDQorY3RteDE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xDQorY3RteDE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQorY3RteDE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xDQorY3RteDE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xDQorY3RteDE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQorY3RteDE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xDQorY3RteDE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xDQorY3RteDE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQorY3RteDE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xDQorY3RteDE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xDQorY3RteDE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KK2N0bXgyMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMA0KK2N0bXgyMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQ0KK2N0bXgyMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMA0KK2N0bXgyMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KK2N0bXgyMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQ0KK2N0bXgyMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQ0KK2N0bXgyMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KK2N0bXgyMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMA0KK2N0bXgyMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2N0bXgyMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQ0KK2N0bXgyMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQ0KK2N0bXgyMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KK2N0bXgyMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KK2N0bXgyMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQ0KK2N0bXgyMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQ0KK2N0bXgyMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KK2N0bXgyMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2N0bXgyNDAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5LjAgICAgIC0+ICAtMQ0KK2N0bXgyNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KK2N0bXgyNDIgY29tcGFyZXRvdG1hZyAgLTggICAgICA5LjAgICAgIC0+ICAtMQ0KK2N0bXgyNDMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA5LjAgICAgIC0+ICAtMQ0KK2N0bXgyNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KK2N0bXgyNDUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KK2N0bXgyNDYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5ICAgICAgIC0+ICAtMQ0KK2N0bXgyNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KK2N0bXgyNDggY29tcGFyZXRvdG1hZyAgLTguMCAgICA5MEUtMSAgIC0+ICAtMQ0KK2N0bXgyNDkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjlFKzEgIC0+ICAtMQ0KK2N0bXgyNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCitjdG14MzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwDQorY3RteDMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KK2N0bXgzMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCitjdG14MzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxDQorY3RteDMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KK2N0bXgzMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCitjdG14MzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xDQorY3RteDMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQ0KK2N0bXgzMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCitjdG14MzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwDQorY3RteDMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KKw0KK2N0bXgzMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCitjdG14MzIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcgICAgICAgLT4gICAxDQorY3RteDMyMiBjb21wYXJldG90bWFnICAgOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KK2N0bXgzMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCitjdG14MzI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcuMCAgICAgLT4gICAxDQorY3RteDMyNSBjb21wYXJldG90bWFnICAgLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KK2N0bXgzMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCitjdG14MzI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTdFKzAgICAgLT4gICAxDQorY3RteDMyOCBjb21wYXJldG90bWFnICAgOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KK2N0bXgzMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCitjdG14MzMwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorY3RteDM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KK2N0bXgzNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCitjdG14MzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xDQorY3RteDM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KK2N0bXgzNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCitjdG14MzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xDQorY3RteDM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KK2N0bXgzNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCitjdG14MzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xDQorY3RteDM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KK2N0bXgzNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQorY3RteDQwMCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNy4wICAgICAtPiAgIDANCitjdG14NDAxIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03ICAgICAgIC0+ICAtMQ0KK2N0bXg0MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQorY3RteDQwMyBjb21wYXJldG90bWFnICAgLTdFKzAgICAtNy4wICAgICAtPiAgIDENCitjdG14NDA0IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03LjAgICAgIC0+ICAgMA0KK2N0bXg0MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQorY3RteDQwNiBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNyAgICAgICAtPiAgLTENCitjdG14NDA3IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03RSswICAgIC0+ICAtMQ0KK2N0bXg0MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQorY3RteDQwOSBjb21wYXJldG90bWFnICAgLTcgICAgICAtLjdFKzEgICAtPiAgIDANCitjdG14NDEwIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03MEUtMSAgIC0+ICAgMQ0KKw0KK2N0bXg0MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQorY3RteDQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDENCitjdG14NDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQ0KK2N0bXg0MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQorY3RteDQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDENCitjdG14NDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQ0KK2N0bXg0MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQorY3RteDQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDENCitjdG14NDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQ0KK2N0bXg0MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQorY3RteDQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDENCisNCitjdG14NDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQ0KK2N0bXg0NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQorY3RteDQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTENCitjdG14NDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQ0KK2N0bXg0NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQorY3RteDQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTENCitjdG14NDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQ0KK2N0bXg0NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQorY3RteDQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTENCitjdG14NDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQ0KK2N0bXg0NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQorDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorcHJlY2lzaW9uOiA0MA0KK2N0bXg0NzAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KK2N0bXg0NzEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorY3RteDQ3MiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KK2N0bXg0NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2N0bXg0NzQgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xDQorY3RteDQ3NSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2N0bXg0NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KK2N0bXg0NzcgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorY3RteDQ3OCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KK2N0bXg0NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2N0bXg0ODAgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwRTc4OSAxMjMuNDU2RTc4OSAgLT4gIC0xDQorY3RteDQ4MSBjb21wYXJldG90bWFnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2N0bXg0ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEU3ODkgMTIzLjQ1NkU3ODkgIC0+ICAtMQ0KK2N0bXg0ODMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAgLT4gICAwDQorY3RteDQ4NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDAwMDAwRS04OSAgLT4gICAxDQorY3RteDQ4NSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwMDBFNzg5ICAtPiAgIDENCitjdG14NDg2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMDAwRS04OSAgLT4gICAxDQorY3RteDQ4NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDAwMDAwRTc4OSAgLT4gICAxDQorY3RteDQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCitjdG14NDg5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwMDAwMDAwRTc4OSAgLT4gICAxDQorY3RteDQ5MCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAgLT4gICAxDQorY3RteDQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwMDBFNzg5ICAtPiAgIDENCitjdG14NDkyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAgLT4gICAxDQorY3RteDQ5MyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTYwMDAwRTc4OSAgLT4gICAxDQorY3RteDQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCitjdG14NDk1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkU3ODkgMTIzLjQ1NjAwRTc4OSAgLT4gICAxDQorY3RteDQ5NiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAgLT4gICAxDQorY3RteDQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFNzg5IDEyMy40NTZFNzg5ICAtPiAgIDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorcHJlY2lzaW9uOiA5DQorY3RteDUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDENCitjdG14NTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQ0KK2N0bXg1MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQorY3RteDUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDENCitjdG14NTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQ0KK2N0bXg1MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQorY3RteDUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDENCitjdG14NTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQ0KK2N0bXg1MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQorY3RteDUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDENCitjdG14NTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQ0KK2N0bXg1MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQorY3RteDUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDENCitjdG14NTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQ0KK2N0bXg1MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQorY3RteDUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDANCitjdG14NTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQ0KK2N0bXg1MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQorY3RteDUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTENCitjdG14NTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQ0KK2N0bXg1MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQorY3RteDUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTENCitjdG14NTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQ0KK2N0bXg1MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQorY3RteDUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTENCitjdG14NTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQ0KK2N0bXg1MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQorY3RteDUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTENCitjdG14NTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQ0KK2N0bXg1MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQorY3RteDUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTENCistLSBMUiBzd2FwDQorY3RteDU0MCBjb21wYXJldG90bWFnICAgIDFFLTE1ICAxICAgICAgICAtPiAgLTENCitjdG14NTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KK2N0bXg1NDIgY29tcGFyZXRvdG1hZyAgICAxRS0xMyAgMSAgICAgICAgLT4gIC0xDQorY3RteDU0MyBjb21wYXJldG90bWFnICAgIDFFLTEyICAxICAgICAgICAtPiAgLTENCitjdG14NTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KK2N0bXg1NDUgY29tcGFyZXRvdG1hZyAgICAxRS0xMCAgMSAgICAgICAgLT4gIC0xDQorY3RteDU0NiBjb21wYXJldG90bWFnICAgIDFFLTkgICAxICAgICAgICAtPiAgLTENCitjdG14NTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KK2N0bXg1NDggY29tcGFyZXRvdG1hZyAgICAxRS03ICAgMSAgICAgICAgLT4gIC0xDQorY3RteDU0OSBjb21wYXJldG90bWFnICAgIDFFLTYgICAxICAgICAgICAtPiAgLTENCitjdG14NTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KK2N0bXg1NTEgY29tcGFyZXRvdG1hZyAgICAxRS00ICAgMSAgICAgICAgLT4gIC0xDQorY3RteDU1MiBjb21wYXJldG90bWFnICAgIDFFLTMgICAxICAgICAgICAtPiAgLTENCitjdG14NTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KK2N0bXg1NTQgY29tcGFyZXRvdG1hZyAgICAxRS0xICAgMSAgICAgICAgLT4gIC0xDQorY3RteDU1NSBjb21wYXJldG90bWFnICAgIDFFLTAgICAxICAgICAgICAtPiAgIDANCitjdG14NTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KK2N0bXg1NTcgY29tcGFyZXRvdG1hZyAgICAxRSsyICAgMSAgICAgICAgLT4gICAxDQorY3RteDU1OCBjb21wYXJldG90bWFnICAgIDFFKzMgICAxICAgICAgICAtPiAgIDENCitjdG14NTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KK2N0bXg1NjEgY29tcGFyZXRvdG1hZyAgICAxRSs1ICAgMSAgICAgICAgLT4gICAxDQorY3RteDU2MiBjb21wYXJldG90bWFnICAgIDFFKzYgICAxICAgICAgICAtPiAgIDENCitjdG14NTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KK2N0bXg1NjQgY29tcGFyZXRvdG1hZyAgICAxRSs4ICAgMSAgICAgICAgLT4gICAxDQorY3RteDU2NSBjb21wYXJldG90bWFnICAgIDFFKzkgICAxICAgICAgICAtPiAgIDENCitjdG14NTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KK2N0bXg1NjcgY29tcGFyZXRvdG1hZyAgICAxRSsxMSAgMSAgICAgICAgLT4gICAxDQorY3RteDU2OCBjb21wYXJldG90bWFnICAgIDFFKzEyICAxICAgICAgICAtPiAgIDENCitjdG14NTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KK2N0bXg1NzAgY29tcGFyZXRvdG1hZyAgICAxRSsxNCAgMSAgICAgICAgLT4gICAxDQorY3RteDU3MSBjb21wYXJldG90bWFnICAgIDFFKzE1ICAxICAgICAgICAtPiAgIDENCistLSBzaW1pbGFyIHdpdGggYW4gdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQorY3RteDU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KK2N0bXg1ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDENCitjdG14NTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxDQorY3RteDU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KK2N0bXg1ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDENCitjdG14NTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxDQorY3RteDU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KK2N0bXg1ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDENCitjdG14NTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxDQorY3RteDU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KK2N0bXg1OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTENCitjdG14NTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xDQorY3RteDU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KK2N0bXg1OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTENCitjdG14NTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xDQorY3RteDU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KK2N0bXg1OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTENCitjdG14NTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xDQorY3RteDU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KK2N0bXg1OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTENCisNCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KK3ByZWNpc2lvbjogMjANCitjdG14NjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQorY3RteDYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitjdG14NjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xDQorY3RteDYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitjdG14NjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xDQorY3RteDYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCitjdG14NjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxDQorY3RteDYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCitjdG14NjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQ0KK2N0bXg2MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxDQorY3RteDYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCitjdG14NjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQ0KK2N0bXg2MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxDQorY3RteDYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCitjdG14NjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQ0KK2N0bXg2MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxDQorY3RteDYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitjdG14NjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xDQorY3RteDYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitjdG14NjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xDQorY3RteDYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCitjdG14NjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQ0KK2N0bXg2MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xDQorY3RteDYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCitjdG14NjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQ0KK2N0bXg2MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxDQorY3RteDYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCitjdG14NjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQ0KK2N0bXg2MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxDQorY3RteDYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCitjdG14NjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQ0KK2N0bXg2MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxDQorY3RteDYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCitjdG14NjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQ0KK3ByZWNpc2lvbjogOQ0KKw0KKy0tIGV4dGVuZGVkIHplcm9zDQorY3RteDY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDANCitjdG14NjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KK2N0bXg2NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxDQorY3RteDY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDENCitjdG14NjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KK2N0bXg2NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwDQorY3RteDY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDENCitjdG14NjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KK2N0bXg2NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xDQorY3RteDY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTENCitjdG14NjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KK2N0bXg2NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwDQorY3RteDY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTENCitjdG14NjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KK2N0bXg2NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwDQorY3RteDY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDANCisNCitjdG14NjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KK2N0bXg2NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxDQorY3RteDY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDENCitjdG14NjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KK2N0bXg2NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxDQorY3RteDY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDENCitjdG14NjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KK2N0bXg2NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxDQorY3RteDY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDANCitjdG14NjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KK2N0bXg2NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwDQorY3RteDY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDENCitjdG14NjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KK2N0bXg2NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwDQorY3RteDY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTENCitjdG14NjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KK2N0bXg2NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwDQorY3RteDY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDENCitjdG14Njc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KK2N0bXg2NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxDQorY3RteDY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTENCitjdG14Njc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KK2N0bXg2NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xDQorY3RteDY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDANCisNCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQorcHJlY2lzaW9uOiAyMA0KK2N0bXg2ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwDQorY3RteDY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCitjdG14NjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQ0KK2N0bXg2ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxDQorY3RteDY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCitjdG14Njg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQ0KK2N0bXg2ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxDQorY3RteDY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCitjdG14Njg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQ0KK2N0bXg2ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxDQorY3RteDY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCitjdG14NjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQ0KK2N0bXg2OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xDQorY3RteDY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCitjdG14Njk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQ0KK2N0bXg2OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xDQorY3RteDY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCitjdG14Njk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQ0KK2N0bXg2OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xDQorY3RteDY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCisNCistLSBsb25nIG9wZXJhbmQgY2hlY2tzDQorbWF4ZXhwb25lbnQ6IDk5OQ0KK21pbmV4cG9uZW50OiAtOTk5DQorcHJlY2lzaW9uOiA5DQorY3RteDcwMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwICAxICAtPiAgIDENCitjdG14NzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KK2N0bXg3MDMgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwICAgMSAgLT4gICAxDQorY3RteDcwNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgICAtPiAgLTENCitjdG14NzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KK2N0bXg3MDYgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAgICAgLT4gIC0xDQorY3RteDcwNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgICAxICAtPiAgIDENCitjdG14NzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KK2N0bXg3MDkgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwMSAgMSAgLT4gICAxDQorY3RteDcxMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAgLTENCitjdG14NzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KK2N0bXg3MTIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gIC0xDQorY3RteDcxMyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkxICAxICAtPiAgIDENCitjdG14NzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KK2N0bXg3MTUgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gICAxDQorY3RteDcxNiBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAgLTENCitjdG14NzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KK2N0bXg3MTggY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gIC0xDQorDQorcHJlY2lzaW9uOiAxNQ0KKy0tIHNhbWUgd2l0aCBwbGVudHkgb2YgcHJlY2lzaW9uDQorY3RteDcyMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAwIDEgIC0+ICAgMQ0KK2N0bXg3MjIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAgLTENCitjdG14NzIzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgMSAgLT4gICAxDQorY3RteDcyNCBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMCAgIC0+ICAtMQ0KK2N0bXg3MjUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAxICAtPiAgIDENCitjdG14NzI2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgLT4gIC0xDQorY3RteDcyNyBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KK2N0bXg3MjggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAgLTENCitjdG14NzI5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gICAxDQorY3RteDczMCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KK2N0bXg3MzEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAxICAtPiAgIDENCitjdG14NzMyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgLT4gIC0xDQorDQorLS0gcmVzaWR1ZSBjYXNlcw0KK3ByZWNpc2lvbjogNQ0KK2N0bXg3NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQorY3RteDc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDENCitjdG14NzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQ0KK2N0bXg3NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQorY3RteDc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTENCitjdG14NzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQ0KK2N0bXg3NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQorY3RteDc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTENCitjdG14NzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQ0KK2N0bXg3NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQorY3RteDc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTENCitjdG14NzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQ0KK2N0bXg3NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQorY3RteDc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDENCisNCistLSBhIHNlbGVjdGlvbiBvZiBsb25naWVzDQorY3RteDc2MCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtNTgzMDYyOS44MzQ3MDg1MDI1ODA4NzU2NTYwMzU3OTQwICAtPiAgIDENCitjdG14NzYxIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAgMA0KK2N0bXg3NjIgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gICAxDQorY3RteDc2MyBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCistLSBwcmVjaXNpb25zIGFib3ZlIG9yIGJlbG93IHRoZSBkaWZmZXJlbmNlIHNob3VsZCBoYXZlIG5vIGVmZmVjdA0KK3ByZWNpc2lvbjogICAxMQ0KK2N0bXg3NjQgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQorcHJlY2lzaW9uOiAgIDEwDQorY3RteDc2NSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCitwcmVjaXNpb246ICAgIDkNCitjdG14NzY2IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KK3ByZWNpc2lvbjogICAgOA0KK2N0bXg3NjcgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQorcHJlY2lzaW9uOiAgICA3DQorY3RteDc2OCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCitwcmVjaXNpb246ICAgIDYNCitjdG14NzY5IGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KK3ByZWNpc2lvbjogICAgNQ0KK2N0bXg3NzAgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQorcHJlY2lzaW9uOiAgICA0DQorY3RteDc3MSBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCitwcmVjaXNpb246ICAgIDMNCitjdG14NzcyIGNvbXBhcmV0b3RtYWcgLTM2ODUyMTM0Ljg0MTk0Mjk2MjUwODQzNTc5NDI4OTMxIC0zNjg1MjEzNC45NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAgIC0+ICAtMQ0KK3ByZWNpc2lvbjogICAgMg0KK2N0bXg3NzMgY29tcGFyZXRvdG1hZyAtMzY4NTIxMzQuODQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgLTM2ODUyMTM0Ljk0MTk0Mjk2MjUwODQzNTc5NDI4OTMxICAgLT4gIC0xDQorcHJlY2lzaW9uOiAgICAxDQorY3RteDc3NCBjb21wYXJldG90bWFnIC0zNjg1MjEzNC44NDE5NDI5NjI1MDg0MzU3OTQyODkzMSAtMzY4NTIxMzQuOTQxOTQyOTYyNTA4NDM1Nzk0Mjg5MzEgICAtPiAgLTENCisNCistLSBTcGVjaWFscw0KK3ByZWNpc2lvbjogICA5DQorY3RteDc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KK2N0bXg3ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDENCitjdG14NzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxDQorY3RteDc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KK2N0bXg3ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDENCitjdG14Nzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxDQorY3RteDc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KK2N0bXg3ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDANCitjdG14Nzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xDQorY3RteDc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KK2N0bXg3OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTENCitjdG14NzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xDQorY3RteDc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KK2N0bXg3OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTENCitjdG14Nzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xDQorY3RteDc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2N0bXg4MDAgY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDANCitjdG14ODAxIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEwMDAgIC0+ICAxDQorY3RteDgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KK2N0bXg4MDMgY29tcGFyZXRvdG1hZyAtSW5mICAtMCAgICAgLT4gIDENCitjdG14ODA0IGNvbXBhcmV0b3RtYWcgLUluZiAgIDAgICAgIC0+ICAxDQorY3RteDgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KK2N0bXg4MDYgY29tcGFyZXRvdG1hZyAtSW5mICAgMTAwMCAgLT4gIDENCitjdG14ODA3IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwDQorY3RteDgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KK2N0bXg4MDkgY29tcGFyZXRvdG1hZyAtMTAwMCAtSW5mICAgLT4gLTENCitjdG14ODEwIGNvbXBhcmV0b3RtYWcgLTEgICAgLUluZiAgIC0+IC0xDQorY3RteDgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KK2N0bXg4MTIgY29tcGFyZXRvdG1hZyAgMCAgICAtSW5mICAgLT4gLTENCitjdG14ODEzIGNvbXBhcmV0b3RtYWcgIDEgICAgLUluZiAgIC0+IC0xDQorY3RteDgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KK2N0bXg4MTUgY29tcGFyZXRvdG1hZyAgSW5mICAtSW5mICAgLT4gIDANCisNCitjdG14ODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxDQorY3RteDgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KK2N0bXg4MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDENCitjdG14ODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxDQorY3RteDgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KK2N0bXg4MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDENCitjdG14ODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxDQorY3RteDgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KK2N0bXg4MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDANCitjdG14ODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQ0KK2N0bXg4MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQorY3RteDgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTENCitjdG14ODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQ0KK2N0bXg4MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQorY3RteDgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTENCitjdG14ODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQ0KK2N0bXg4MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQorY3RteDgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMA0KK2N0bXg4MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDANCitjdG14ODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQorDQorY3RteDg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMA0KK2N0bXg4NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xDQorY3RteDg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KK2N0bXg4NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDENCitjdG14ODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxDQorY3RteDg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KK2N0bXg4NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDENCitjdG14ODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxDQorY3RteDg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KK2N0bXg4NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xDQorY3RteDg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMA0KKw0KK2N0bXg4NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCitjdG14ODUzIGNvbXBhcmV0b3RtYWcgLU5hTiAgc05hTiAgIC0+ICAxDQorY3RteDg1NCBjb21wYXJldG90bWFnIC1JbmYgIHNOYU4gICAtPiAgLTENCitjdG14ODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KK2N0bXg4NTYgY29tcGFyZXRvdG1hZyAtMSAgICBzTmFOICAgLT4gIC0xDQorY3RteDg1NyBjb21wYXJldG90bWFnIC0wICAgIHNOYU4gICAtPiAgLTENCitjdG14ODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KK2N0bXg4NTkgY29tcGFyZXRvdG1hZyAgMSAgICBzTmFOICAgLT4gIC0xDQorY3RteDg2MCBjb21wYXJldG90bWFnICAxMDAwIHNOYU4gICAtPiAgLTENCitjdG14ODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KK2N0bXg4NjIgY29tcGFyZXRvdG1hZyAgTmFOICBzTmFOICAgLT4gIDENCitjdG14ODYzIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQorDQorY3RteDg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCitjdG14ODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTENCitjdG14ODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQ0KK2N0bXg4NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQorY3RteDg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDENCitjdG14ODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQ0KK2N0bXg4NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQorY3RteDg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDENCitjdG14ODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQ0KK2N0bXg4ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KK2N0bXg4ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwDQorDQorY3RteDg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDANCitjdG14ODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KK2N0bXg4ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQ0KK2N0bXg4OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQorY3RteDg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDANCisNCistLSBOYU5zIHdpdGggcGF5bG9hZA0KK2N0bXg5NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDENCitjdG14OTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQorY3RteDk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQ0KK2N0bXg5NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDENCitjdG14OTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KK2N0bXg5NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xDQorY3RteDk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTENCisNCitjdG14OTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KK2N0bXg5NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xDQorY3RteDk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTENCitjdG14OTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KK2N0bXg5NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxDQorY3RteDk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDENCitjdG14OTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KK2N0bXg5NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxDQorDQorY3RteDk4MCBjb21wYXJldG90bWFnIC1zTmFONzcxIC1zTmFONzcyIC0+IC0xDQorY3RteDk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQorY3RteDk4MiBjb21wYXJldG90bWFnIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQorY3RteDk4MyBjb21wYXJldG90bWFnICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQorY3RteDk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQorY3RteDk4NSBjb21wYXJldG90bWFnICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQorY3RteDk4NiBjb21wYXJldG90bWFnIC1zTmFONzcyICtzTmFONzcxIC0+ICAxDQorY3RteDk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQorDQorY3RteDk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQ0KK2N0bXg5OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDENCitjdG14OTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQorY3RteDk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KK2N0bXg5OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDENCitjdG14OTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQorY3RteDk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQ0KK2N0bXg5OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTENCitjdG14OTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBzdWJub3JtYWwgcmVzdWx0cyBub3cgYWxsb3dlZA0KK21heEV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK2N0bXgxMDgwIGNvbXBhcmV0b3RtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5ICAtPiAgLTENCitjdG14MTA4MSBjb21wYXJldG90bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gICAxDQorY3RteDEwODIgY29tcGFyZXRvdG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMDgzIGNvbXBhcmV0b3RtYWcgOUUtOTk5OTk5OTk5ICswLjEwMCAgICAgICAgICAgICAgICAtPiAgLTENCitjdG14MTA4NSBjb21wYXJldG90bWFnIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OTk5OSAgLT4gIC0xDQorY3RteDEwODYgY29tcGFyZXRvdG1hZyA5RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIC0+ICAgMQ0KK2N0bXgxMDg3IGNvbXBhcmV0b3RtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgICAtPiAgIDENCitjdG14MTA4OCBjb21wYXJldG90bWFnIDlFLTk5OTk5OTk5OSAtMC4xMDAgICAgICAgICAgICAgICAgLT4gIC0xDQorDQorY3RteDEwODkgY29tcGFyZXRvdG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgIC0+ICAtMQ0KK2N0bXgxMDkwIGNvbXBhcmV0b3RtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgICAtPiAgLTENCitjdG14MTA5MSBjb21wYXJldG90bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAgLT4gIC0xDQorY3RteDEwOTIgY29tcGFyZXRvdG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgIC0+ICAtMQ0KK2N0bXgxMDkzIGNvbXBhcmV0b3RtYWcgOWUtOTk5OTk5OTk4IDAuMSAgICAgICAgICAgICAtPiAgLTENCitjdG14MTA5NCBjb21wYXJldG90bWFnIDAuMDEgOWUtOTk5OTk5OTk4ICAgICAgICAgICAgLT4gICAxDQorY3RteDEwOTUgY29tcGFyZXRvdG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMSAgICAgIC0+ICAgMQ0KK2N0bXgxMDk2IGNvbXBhcmV0b3RtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDAgICAgICAtPiAgIDENCitjdG14MTA5NyBjb21wYXJldG90bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAgLT4gICAxDQorY3RteDEwOTggY29tcGFyZXRvdG1hZyA5ZTk5OTk5OTk5OCAxMDAgICAgICAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMDk5IGNvbXBhcmV0b3RtYWcgOWU5OTk5OTk5OTggMTAgICAgICAgICAgICAgICAtPiAgIDENCitjdG14MTEwMCBjb21wYXJldG90bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAgLT4gIC0xDQorLS0gc2lnbnMNCitjdG14MTEwMSBjb21wYXJldG90bWFnICAxZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAgLT4gICAxDQorY3RteDExMDIgY29tcGFyZXRvdG1hZyAgMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgIC0+ICAgMQ0KK2N0bXgxMTAzIGNvbXBhcmV0b3RtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExICAtPiAgIDENCitjdG14MTEwNCBjb21wYXJldG90bWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAgLT4gICAxDQorY3RteDExMDUgY29tcGFyZXRvdG1hZyAgMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgIC0+ICAtMQ0KK2N0bXgxMTA2IGNvbXBhcmV0b3RtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExICAtPiAgLTENCitjdG14MTEwNyBjb21wYXJldG90bWFnIC0xZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAgLT4gIC0xDQorY3RteDExMDggY29tcGFyZXRvdG1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgIC0+ICAtMQ0KKw0KKy0tIHNwcmVhZCB6ZXJvcw0KK2N0bXgxMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KK2N0bXgxMTExIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KK2N0bXgxMTEyIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KK2N0bXgxMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KK2N0bXgxMTE0IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTE1IGNvbXBhcmV0b3RtYWcgICAwRS0zODMgLTBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTE3IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzM4NCAgIC0+ICAtMQ0KK2N0bXgxMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KKw0KK2N0bXgxMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMTMxIGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQ0KK2N0bXgxMTM0IGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTM4MyAgIC0+ICAgMQ0KK2N0bXgxMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KKw0KKy0tIE51bGwgdGVzdHMNCitjdG14OTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2N0bXg5OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5LmRlY1Rlc3QKaW5kZXggZDlmMjk5ZS4uYjQ3ZTQ5OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weS5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvcHkuZGVjVGVzdCAtLSBxdWlldCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrCi1jcHl4MDAxIGNvcHkgICAgICAgKzcuNTAgIC0+IDcuNTAKLQotLS0gSW5maW5pdGllcwotY3B5eDAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQotY3B5eDAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKLQotLS0gTmFOcywgMCBwYXlsb2FkCi1jcHl4MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTgotY3B5eDAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCi1jcHl4MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KLWNweXgwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotY3B5eDAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAotY3B5eDAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKLWNweXgwMzMgY29weSAgICAgIHNOYU4xMCAgLT4gc05hTjEwCi1jcHl4MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKLWNweXgwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONwotY3B5eDAzNiBjb3B5ICAgICAgLU5hTjcgICAtPiAtTmFONwotY3B5eDAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCi1jcHl4MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCi0KLS0tIGZpbml0ZXMKLWNweXgxMDEgY29weSAgICAgICAgICA3ICAgLT4gNwotY3B5eDEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNwotY3B5eDEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQotY3B5eDEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUKLWNweXgxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAotY3B5eDEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAotY3B5eDEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMAotY3B5eDEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKLQotLS0gemVyb3MKLWNweXgxMTEgY29weSAgICAgICAgICAwICAgLT4gMAotY3B5eDExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMAotY3B5eDExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0Ci1jcHl4MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0Ci1jcHl4MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAotY3B5eDExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCi1jcHl4MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotY3B5eDExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1jcHl4MTIxIGNvcHkgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAotY3B5eDEyMiBjb3B5ICAtMjY4MjY4MjY4ICAgICAgICAtPiAtMjY4MjY4MjY4Ci1jcHl4MTIzIGNvcHkgICAxMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAotY3B5eDEyNCBjb3B5ICAtMTM0MTM0MTM0ICAgICAgICAtPiAtMTM0MTM0MTM0Ci0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1jcHl4MTMxIGNvcHkgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQotY3B5eDEzMiBjb3B5ICAxRS05OTkgICAgICAgICAgICAtPiAxRS05OTkKLWNweXgxMzMgY29weSAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMEUtOTk5Ci1jcHl4MTM0IGNvcHkgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcKLQotY3B5eDEzNSBjb3B5ICAtMUUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNwotY3B5eDEzNiBjb3B5ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMEUtOTk5Ci1jcHl4MTM3IGNvcHkgIC0xRS05OTkgICAgICAgICAgIC0+IC0xRS05OTkKLWNweXgxMzggY29weSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gY29weS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2NweXgwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MA0KKw0KKy0tIEluZmluaXRpZXMNCitjcHl4MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorY3B5eDAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkNCisNCistLSBOYU5zLCAwIHBheWxvYWQNCitjcHl4MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTg0KK2NweXgwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTg0KK2NweXgwMjMgY29weSAgICAgICAgc05hTiAgLT4gc05hTg0KK2NweXgwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorY3B5eDAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMA0KK2NweXgwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwDQorY3B5eDAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTANCitjcHl4MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTANCitjcHl4MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcNCitjcHl4MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43DQorY3B5eDAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQorY3B5eDAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQ0KKw0KKy0tIGZpbml0ZXMNCitjcHl4MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcNCitjcHl4MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03DQorY3B5eDEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQ0KK2NweXgxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1DQorY3B5eDEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwDQorY3B5eDEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MA0KK2NweXgxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDANCitjcHl4MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMA0KKw0KKy0tIHplcm9zDQorY3B5eDExMSBjb3B5ICAgICAgICAgIDAgICAtPiAwDQorY3B5eDExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMA0KK2NweXgxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNA0KK2NweXgxMTQgY29weSAgICAgIC0wRSs0ICAgLT4gLTBFKzQNCitjcHl4MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KK2NweXgxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMA0KK2NweXgxMTcgY29weSAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQorY3B5eDExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitjcHl4MTIxIGNvcHkgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KK2NweXgxMjIgY29weSAgLTI2ODI2ODI2OCAgICAgICAgLT4gLTI2ODI2ODI2OA0KK2NweXgxMjMgY29weSAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0DQorY3B5eDEyNCBjb3B5ICAtMTM0MTM0MTM0ICAgICAgICAtPiAtMTM0MTM0MTM0DQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitjcHl4MTMxIGNvcHkgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK2NweXgxMzIgY29weSAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5DQorY3B5eDEzMyBjb3B5ICAxLjAwMDAwMDAwRS05OTkgICAtPiAxLjAwMDAwMDAwRS05OTkNCitjcHl4MTM0IGNvcHkgIDFFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCisNCitjcHl4MTM1IGNvcHkgIC0xRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3DQorY3B5eDEzNiBjb3B5ICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAtMS4wMDAwMDAwMEUtOTk5DQorY3B5eDEzNyBjb3B5ICAtMUUtOTk5ICAgICAgICAgICAtPiAtMUUtOTk5DQorY3B5eDEzOCBjb3B5ICAtOS45OTk5OTk5OUUrOTk5ICAtPiAtOS45OTk5OTk5OUUrOTk5DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5YWJzLmRlY1Rlc3QKaW5kZXggNTIwMDJkYy4uZjdkMGY4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlhYnMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weWFicy5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrCi1jcGF4MDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKLQotLS0gSW5maW5pdGllcwotY3BheDAxMSBjb3B5YWJzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQotY3BheDAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWNwYXgwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCi1jcGF4MDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTgotY3BheDAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCi1jcGF4MDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotY3BheDAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMAotY3BheDAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQotY3BheDAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKLWNwYXgwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwCi1jcGF4MDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKLWNwYXgwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONwotY3BheDAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCi1jcGF4MDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKLQotLS0gZmluaXRlcwotY3BheDEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3Ci1jcGF4MTAyIGNvcHlhYnMgICAgICAgICAtNyAgIC0+IDcKLWNwYXgxMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKLWNwYXgxMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKLWNwYXgxMDUgY29weWFicyAgICAgICA3LjEwICAgLT4gNy4xMAotY3BheDEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCi1jcGF4MTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCi1jcGF4MTA4IGNvcHlhYnMgICAgICAtNy41MDAgIC0+IDcuNTAwCi0KLS0tIHplcm9zCi1jcGF4MTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKLWNwYXgxMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAotY3BheDExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2Ci1jcGF4MTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKLWNwYXgxMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCi1jcGF4MTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotY3BheDExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKLWNwYXgxMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1jcGF4MTIxIGNvcHlhYnMgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OAotY3BheDEyMiBjb3B5YWJzICAtMjY4MjY4MjY4ICAgICAgICAtPiAyNjgyNjgyNjgKLWNwYXgxMjMgY29weWFicyAgIDEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0Ci1jcGF4MTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNAotCi0tLSBObWF4LCBObWluLCBOdGlueQotY3BheDEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkKLWNwYXgxMzIgY29weWFicyAgMUUtOTk5ICAgICAgICAgICAgLT4gMUUtOTk5Ci1jcGF4MTMzIGNvcHlhYnMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDEuMDAwMDAwMDBFLTk5OQotY3BheDEzNCBjb3B5YWJzICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3Ci0KLWNwYXgxMzUgY29weWFicyAgLTFFLTEwMDcgICAgICAgICAgLT4gMUUtMTAwNwotY3BheDEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkKLWNwYXgxMzcgY29weWFicyAgLTFFLTk5OSAgICAgICAgICAgLT4gMUUtOTk5Ci1jcGF4MTk5IGNvcHlhYnMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IDkuOTk5OTk5OTlFKzk5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gY29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgYW5kIHNldCBzaWduIHRvIHplcm8gICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2NwYXgwMDEgY29weWFicyAgICAgICArNy41MCAgLT4gNy41MA0KKw0KKy0tIEluZmluaXRpZXMNCitjcGF4MDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorY3BheDAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQ0KKw0KKy0tIE5hTnMsIDAgcGF5bG9hZA0KK2NwYXgwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFODQorY3BheDAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4NCitjcGF4MDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4NCitjcGF4MDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorY3BheDAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMA0KK2NwYXgwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUNCitjcGF4MDMzIGNvcHlhYnMgICAgICBzTmFOMTUgIC0+IHNOYU4xNQ0KK2NwYXgwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwDQorY3BheDAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43DQorY3BheDAzNiBjb3B5YWJzICAgICAgLU5hTjcgICAtPiBOYU43DQorY3BheDAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQorY3BheDAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQorDQorLS0gZmluaXRlcw0KK2NwYXgxMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNw0KK2NwYXgxMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNw0KK2NwYXgxMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUNCitjcGF4MTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1DQorY3BheDEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwDQorY3BheDEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwDQorY3BheDEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMA0KK2NwYXgxMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDANCisNCistLSB6ZXJvcw0KK2NwYXgxMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMA0KK2NwYXgxMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMA0KK2NwYXgxMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KK2NwYXgxMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KK2NwYXgxMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQorY3BheDExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitjcGF4MTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KK2NwYXgxMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitjcGF4MTIxIGNvcHlhYnMgICAyNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KK2NwYXgxMjIgY29weWFicyAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4DQorY3BheDEyMyBjb3B5YWJzICAgMTM0MTM0MTM0ICAgICAgICAtPiAxMzQxMzQxMzQNCitjcGF4MTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQgICAgICAgIC0+IDEzNDEzNDEzNA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorY3BheDEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5RSs5OTkgICAtPiA5Ljk5OTk5OTk5RSs5OTkNCitjcGF4MTMyIGNvcHlhYnMgIDFFLTk5OSAgICAgICAgICAgIC0+IDFFLTk5OQ0KK2NwYXgxMzMgY29weWFicyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMEUtOTk5DQorY3BheDEzNCBjb3B5YWJzICAxRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3DQorDQorY3BheDEzNSBjb3B5YWJzICAtMUUtMTAwNyAgICAgICAgICAtPiAxRS0xMDA3DQorY3BheDEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkNCitjcGF4MTM3IGNvcHlhYnMgIC0xRS05OTkgICAgICAgICAgIC0+IDFFLTk5OQ0KK2NwYXgxOTkgY29weWFicyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gOS45OTk5OTk5OUUrOTk5DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9jb3B5bmVnYXRlLmRlY1Rlc3QKaW5kZXggN2Y4ZGU5ZC4uMzgyMzViNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHluZWdhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weW5lZ2F0ZS5kZWNUZXN0CkBAIC0xLDg2ICsxLDg2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBjb3B5IGFuZCBuZWdhdGUgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrCi1jcG54MDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCi0KLS0tIEluZmluaXRpZXMKLWNwbngwMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5Ci1jcG54MDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotY3BueDAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCi1jcG54MDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTgotY3BueDAyMyBjb3B5bmVnYXRlICAgICAgICBzTmFOICAtPiAtc05hTgotY3BueDAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWNwbngwMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzCi1jcG54MDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzCi1jcG54MDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKLWNwbngwMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzCi1jcG54MDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MAotY3BueDAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAotY3BueDAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQotY3BueDAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxCi0KLS0tIGZpbml0ZXMKLWNwbngxMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKLWNwbngxMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNwotY3BueDEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUKLWNwbngxMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKLWNwbngxMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTAKLWNwbngxMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MAotY3BueDEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKLWNwbngxMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDAKLQotLS0gemVyb3MKLWNwbngxMTEgY29weW5lZ2F0ZSAgICAgICAgICAwICAgLT4gLTAKLWNwbngxMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAotY3BueDExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNAotY3BueDExNCBjb3B5bmVnYXRlICAgICAgLTBFKzQgICAtPiAwRSs0Ci1jcG54MTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKLWNwbngxMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwCi1jcG54MTE3IGNvcHluZWdhdGUgICAgICAwRS0xNDEgIC0+IC0wRS0xNDEKLWNwbngxMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1jcG54MTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2OCAgICAgICAgIC0+IC0yNjgyNjgyNjgKLWNwbngxMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2OCAgICAgICAgLT4gMjY4MjY4MjY4Ci1jcG54MTIzIGNvcHluZWdhdGUgIDEzNDEzNDEzNCAgICAgICAgIC0+IC0xMzQxMzQxMzQKLWNwbngxMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0Ci0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1jcG54MTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IC05Ljk5OTk5OTk5RSs5OTkKLWNwbngxMzIgY29weW5lZ2F0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTk5OQotY3BueDEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwRS05OTkgICAtPiAtMS4wMDAwMDAwMEUtOTk5Ci1jcG54MTM0IGNvcHluZWdhdGUgIDFFLTEwMDcgICAgICAgICAgICAgICAgICAgIC0+IC0xRS0xMDA3Ci0KLWNwbngxMzUgY29weW5lZ2F0ZSAgLTFFLTEwMDcgICAgICAgICAgICAgICAgICAgLT4gMUUtMTAwNwotY3BueDEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkKLWNwbngxMzcgY29weW5lZ2F0ZSAgLTFFLTk5OSAgICAgICAgICAgICAgICAgICAgLT4gMUUtOTk5Ci1jcG54MTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IDkuOTk5OTk5OTlFKzk5OQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gY29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2NwbngwMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTANCisNCistLSBJbmZpbml0aWVzDQorY3BueDAxMSBjb3B5bmVnYXRlICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkNCitjcG54MDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorY3BueDAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFODQorY3BueDAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4NCitjcG54MDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFODQorY3BueDAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFODQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2NwbngwMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzDQorY3BueDAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMw0KK2NwbngwMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMw0KK2NwbngwMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzDQorY3BueDAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzANCitjcG54MDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwDQorY3BueDAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQ0KK2NwbngwMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KKw0KKy0tIGZpbml0ZXMNCitjcG54MTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03DQorY3BueDEwMiBjb3B5bmVnYXRlICAgICAgICAgLTcgICAtPiA3DQorY3BueDEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUNCitjcG54MTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1DQorY3BueDEwNSBjb3B5bmVnYXRlICAgICAgIDcuNTAgICAtPiAtNy41MA0KK2NwbngxMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MA0KK2NwbngxMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQorY3BueDEwOCBjb3B5bmVnYXRlICAgICAgLTcuNTAwICAtPiA3LjUwMA0KKw0KKy0tIHplcm9zDQorY3BueDExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMA0KK2NwbngxMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMA0KK2NwbngxMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQNCitjcG54MTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQNCitjcG54MTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDANCitjcG54MTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KK2NwbngxMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQ0KK2NwbngxMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitjcG54MTIxIGNvcHluZWdhdGUgIDI2ODI2ODI2OCAgICAgICAgIC0+IC0yNjgyNjgyNjgNCitjcG54MTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjggICAgICAgIC0+IDI2ODI2ODI2OA0KK2NwbngxMjMgY29weW5lZ2F0ZSAgMTM0MTM0MTM0ICAgICAgICAgLT4gLTEzNDEzNDEzNA0KK2NwbngxMjQgY29weW5lZ2F0ZSAgLTEzNDEzNDEzNCAgICAgICAgLT4gMTM0MTM0MTM0DQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitjcG54MTMxIGNvcHluZWdhdGUgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCitjcG54MTMyIGNvcHluZWdhdGUgIDFFLTk5OSAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS05OTkNCitjcG54MTMzIGNvcHluZWdhdGUgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IC0xLjAwMDAwMDAwRS05OTkNCitjcG54MTM0IGNvcHluZWdhdGUgIDFFLTEwMDcgICAgICAgICAgICAgICAgICAgIC0+IC0xRS0xMDA3DQorDQorY3BueDEzNSBjb3B5bmVnYXRlICAtMUUtMTAwNyAgICAgICAgICAgICAgICAgICAtPiAxRS0xMDA3DQorY3BueDEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMEUtOTk5ICAtPiAxLjAwMDAwMDAwRS05OTkNCitjcG54MTM3IGNvcHluZWdhdGUgIC0xRS05OTkgICAgICAgICAgICAgICAgICAgIC0+IDFFLTk5OQ0KK2NwbngxMzggY29weW5lZ2F0ZSAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gOS45OTk5OTk5OUUrOTk5DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2NvcHlzaWduLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdAppbmRleCBhZmRkNjcwLi44MDYxYTQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvY29weXNpZ24uZGVjVGVzdApAQCAtMSwxNzcgKzEsMTc3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGNvcHlzaWduLmRlY1Rlc3QgLS0gcXVpZXQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrLCBhbmQgZXhhbXBsZXMgZnJvbSBkZWNBcml0aAotY3BzeDAwMSBjb3B5c2lnbiAgICs3LjUwICAgICAgIDExICAtPiA3LjUwCi1jcHN4MDAyIGNvcHlzaWduICAgJzEuNTAnICAgJzcuMzMnIC0+IDEuNTAKLWNwc3gwMDMgY29weXNpZ24gICctMS41MCcgICAnNy4zMycgLT4gMS41MAotY3BzeDAwNCBjb3B5c2lnbiAgICcxLjUwJyAgJy03LjMzJyAtPiAtMS41MAotY3BzeDAwNSBjb3B5c2lnbiAgJy0xLjUwJyAgJy03LjMzJyAtPiAtMS41MAotCi0tLSBJbmZpbml0aWVzCi1jcHN4MDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQotY3BzeDAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkKLQotLS0gTmFOcywgMCBwYXlsb2FkCi1jcHN4MDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KLWNwc3gwMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIDExIC0+IE5hTgotY3BzeDAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTgotY3BzeDAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi1jcHN4MDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMAotY3BzeDAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTAKLWNwc3gwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAotY3BzeDAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwCi1jcHN4MDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43Ci1jcHN4MDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43Ci1jcHN4MDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCi1jcHN4MDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCi0KLS0tIGZpbml0ZXMKLWNwc3gxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKLWNwc3gxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcKLWNwc3gxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1Ci1jcHN4MTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQotY3BzeDEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MAotY3BzeDEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MAotY3BzeDEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKLWNwc3gxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwCi0KLS0tIHplcm9zCi1jcHN4MTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwCi1jcHN4MTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCi1jcHN4MTEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAxMSAtPiAwRSs0Ci1jcHN4MTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0Ci1jcHN4MTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKLWNwc3gxMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIDExIC0+IDAuMDAwMAotY3BzeDExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCi1jcHN4MTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWNwc3gxMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgIDExIC0+IDI2ODI2ODI2OAotY3BzeDEyMiBjb3B5c2lnbiAgLTI2ODI2ODI2OCAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4Ci1jcHN4MTIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQKLWNwc3gxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNAotCi0tLSBObWF4LCBObWluLCBOdGlueQotY3BzeDEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OUUrOTk5ICAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5Ci1jcHN4MTMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgICAxMSAtPiAxRS05OTkKLWNwc3gxMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgIDExIC0+IDEuMDAwMDAwMDBFLTk5OQotY3BzeDEzNCBjb3B5c2lnbiAgMUUtMTAwNyAgICAgICAgICAgICAgMTEgLT4gMUUtMTAwNwotCi1jcHN4MTM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgICAxMSAtPiAxRS0xMDA3Ci1jcHN4MTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxMSAtPiAxLjAwMDAwMDAwRS05OTkKLWNwc3gxMzcgY29weXNpZ24gIC0xRS05OTkgICAgICAgICAgICAgIDExIC0+IDFFLTk5OQotY3BzeDEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5Ci0KLS0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUwotCi0tLSBJbmZpbml0aWVzCi1jcHN4MjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5Ci1jcHN4MjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotY3BzeDIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4KLWNwc3gyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFOCi1jcHN4MjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KLWNwc3gyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi1jcHN4MjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwCi1jcHN4MjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCi1jcHN4MjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAotY3BzeDIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKLWNwc3gyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONwotY3BzeDIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43Ci1jcHN4MjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDEKLWNwc3gyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQotCi0tLSBmaW5pdGVzCi1jcHN4MzAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAtMzQgLT4gLTcKLWNwc3gzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNwotY3BzeDMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQotY3BzeDMwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgLTM0IC0+IC03NQotY3BzeDMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwCi1jcHN4MzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKLWNwc3gzMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIC0zNCAtPiAtNy41MDAKLWNwc3gzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDAKLQotLS0gemVyb3MKLWNwc3gzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAotY3BzeDMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wCi1jcHN4MzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQKLWNwc3gzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAotY3BzeDMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKLWNwc3gzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCi1jcHN4MzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQotY3BzeDMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWNwc3gzMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgKLWNwc3gzMjIgY29weXNpZ24gIC0yNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgKLWNwc3gzMjMgY29weXNpZ24gICAxMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQKLWNwc3gzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWNwc3gzMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkKLWNwc3gzMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgLTE4IC0+IC0xRS05OTkKLWNwc3gzMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IC0xLjAwMDAwMDAwRS05OTkKLWNwc3gzMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3Ci0KLWNwc3gzMzUgY29weXNpZ24gIC0xRS0xMDA3ICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3Ci1jcHN4MzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5Ci1jcHN4MzM3IGNvcHlzaWduICAtMUUtOTk5ICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5Ci1jcHN4MzM4IGNvcHlzaWduICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiAtOS45OTk5OTk5OUUrOTk5Ci0KLS0tIE90aGVyIGtpbmRzIG9mIFJIUwotY3BzeDQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKLWNwc3g0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwCi1jcHN4NDAzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMCAgLT4gLTcwMQotY3BzeDQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKLWNwc3g0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxCi1jcHN4NDA2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMCAgLT4gIDcyMAotY3BzeDQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKLWNwc3g0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwCi0KLWNwc3g0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDEKLWNwc3g0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKLWNwc3g0MTUgY29weXNpZ24gICAgICAgICAgNzAxICAgICtJbmYgIC0+ICA3MDEKLWNwc3g0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjAKLQotY3BzeDQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQotY3BzeDQyMSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLU5hTiAgLT4gLTcyMAotY3BzeDQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQotY3BzeDQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAotY3BzeDQyNSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTjggLT4gIDcyMAotCi1jcHN4NDI2IGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtc05hTiAgLT4gLTcwMQotY3BzeDQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKLWNwc3g0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxCi1jcHN4NDI5IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTiAgLT4gIDcyMAotY3BzeDQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gY29weXNpZ24uZGVjVGVzdCAtLSBxdWlldCBjb3B5IHdpdGggc2lnbiBmcm9tIHJocyAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KKy0tIFNhbml0eSBjaGVjaywgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCitjcHN4MDAxIGNvcHlzaWduICAgKzcuNTAgICAgICAgMTEgIC0+IDcuNTANCitjcHN4MDAyIGNvcHlzaWduICAgJzEuNTAnICAgJzcuMzMnIC0+IDEuNTANCitjcHN4MDAzIGNvcHlzaWduICAnLTEuNTAnICAgJzcuMzMnIC0+IDEuNTANCitjcHN4MDA0IGNvcHlzaWduICAgJzEuNTAnICAnLTcuMzMnIC0+IC0xLjUwDQorY3BzeDAwNSBjb3B5c2lnbiAgJy0xLjUwJyAgJy03LjMzJyAtPiAtMS41MA0KKw0KKy0tIEluZmluaXRpZXMNCitjcHN4MDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQ0KK2Nwc3gwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorY3BzeDAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFODQorY3BzeDAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFODQorY3BzeDAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTg0KK2Nwc3gwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorY3BzeDAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTANCitjcHN4MDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMA0KK2Nwc3gwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KK2Nwc3gwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KK2Nwc3gwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcNCitjcHN4MDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43DQorY3BzeDAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KK2Nwc3gwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCisNCistLSBmaW5pdGVzDQorY3BzeDEwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgMTEgLT4gNw0KK2Nwc3gxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcNCitjcHN4MTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQ0KK2Nwc3gxMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIDExIC0+IDc1DQorY3BzeDEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MA0KK2Nwc3gxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTANCitjcHN4MTA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAxMSAtPiA3LjUwMA0KK2Nwc3gxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwDQorDQorLS0gemVyb3MNCitjcHN4MTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwDQorY3BzeDExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMA0KK2Nwc3gxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQNCitjcHN4MTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0DQorY3BzeDExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQorY3BzeDExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQorY3BzeDExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQorY3BzeDExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitjcHN4MTIxIGNvcHlzaWduICAgMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgNCitjcHN4MTIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgNCitjcHN4MTIzIGNvcHlzaWduICAgMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQNCitjcHN4MTI0IGNvcHlzaWduICAtMTM0MTM0MTM0ICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Nwc3gxMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgIDExIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK2Nwc3gxMzIgY29weXNpZ24gIDFFLTk5OSAgICAgICAgICAgICAgIDExIC0+IDFFLTk5OQ0KK2Nwc3gxMzMgY29weXNpZ24gIDEuMDAwMDAwMDBFLTk5OSAgICAgIDExIC0+IDEuMDAwMDAwMDBFLTk5OQ0KK2Nwc3gxMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgIDExIC0+IDFFLTEwMDcNCisNCitjcHN4MTM1IGNvcHlzaWduICAtMUUtMTAwNyAgICAgICAgICAgICAxMSAtPiAxRS0xMDA3DQorY3BzeDEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTEgLT4gMS4wMDAwMDAwMEUtOTk5DQorY3BzeDEzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAgMTEgLT4gMUUtOTk5DQorY3BzeDEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTlFKzk5OSAgICAgMTEgLT4gOS45OTk5OTk5OUUrOTk5DQorDQorLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTDQorDQorLS0gSW5maW5pdGllcw0KK2Nwc3gyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkNCitjcHN4MjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorY3BzeDIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4NCitjcHN4MjIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAtMzQgLT4gLU5hTg0KK2Nwc3gyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTg0KK2Nwc3gyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitjcHN4MjMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQorY3BzeDIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KK2Nwc3gyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwDQorY3BzeDIzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTANCitjcHN4MjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcNCitjcHN4MjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcNCitjcHN4MjM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCitjcHN4MjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCisNCistLSBmaW5pdGVzDQorY3BzeDMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03DQorY3BzeDMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03DQorY3BzeDMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQ0KK2Nwc3gzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUNCitjcHN4MzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTANCitjcHN4MzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTANCitjcHN4MzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQorY3BzeDMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KKw0KKy0tIHplcm9zDQorY3BzeDMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wDQorY3BzeDMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wDQorY3BzeDMxMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgLTM0IC0+IC0wRSs0DQorY3BzeDMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0DQorY3BzeDMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDANCitjcHN4MzE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAtMzQgLT4gLTAuMDAwMA0KK2Nwc3gzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQorY3BzeDMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2Nwc3gzMjEgY29weXNpZ24gICAyNjgyNjgyNjggICAgICAgICAgLTE4IC0+IC0yNjgyNjgyNjgNCitjcHN4MzIyIGNvcHlzaWduICAtMjY4MjY4MjY4ICAgICAgICAgIC0xOCAtPiAtMjY4MjY4MjY4DQorY3BzeDMyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNCAgICAgICAgICAtMTggLT4gLTEzNDEzNDEzNA0KK2Nwc3gzMjQgY29weXNpZ24gIC0xMzQxMzQxMzQgICAgICAgICAgLTE4IC0+IC0xMzQxMzQxMzQNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Nwc3gzMzEgY29weXNpZ24gIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkNCitjcHN4MzMyIGNvcHlzaWduICAxRS05OTkgICAgICAgICAgICAgIC0xOCAtPiAtMUUtOTk5DQorY3BzeDMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gLTEuMDAwMDAwMDBFLTk5OQ0KK2Nwc3gzMzQgY29weXNpZ24gIDFFLTEwMDcgICAgICAgICAgICAgLTE4IC0+IC0xRS0xMDA3DQorDQorY3BzeDMzNSBjb3B5c2lnbiAgLTFFLTEwMDcgICAgICAgICAgICAtMTggLT4gLTFFLTEwMDcNCitjcHN4MzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0xOCAtPiAtMS4wMDAwMDAwMEUtOTk5DQorY3BzeDMzNyBjb3B5c2lnbiAgLTFFLTk5OSAgICAgICAgICAgICAtMTggLT4gLTFFLTk5OQ0KK2Nwc3gzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IC05Ljk5OTk5OTk5RSs5OTkNCisNCistLSBPdGhlciBraW5kcyBvZiBSSFMNCitjcHN4NDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQ0KK2Nwc3g0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwDQorY3BzeDQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDENCitjcHN4NDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMA0KK2Nwc3g0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxDQorY3BzeDQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjANCitjcHN4NDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQ0KK2Nwc3g0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwDQorDQorY3BzeDQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQ0KK2Nwc3g0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjANCitjcHN4NDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxDQorY3BzeDQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMA0KKw0KK2Nwc3g0MjAgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1OYU4gIC0+IC03MDENCitjcHN4NDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwDQorY3BzeDQyMiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgK05hTiAgLT4gIDcwMQ0KK2Nwc3g0MjMgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU4gIC0+ICA3MjANCitjcHN4NDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwDQorDQorY3BzeDQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDENCitjcHN4NDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMA0KK2Nwc3g0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxDQorY3BzeDQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjANCitjcHN4NDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMA0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKaW5kZXggYjk4ZDY0YS4uYzZmNWE3YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWJzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZEFicy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kZGFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnCi1kZGFiczAwMiBhYnMgJy0xJyAgICAgLT4gJzEnCi1kZGFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnCi1kZGFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnCi1kZGFiczAwNSBhYnMgJzAnICAgICAgLT4gJzAnCi1kZGFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnCi1kZGFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcKLWRkYWJzMDA4IGFicyAnMDAuMDAnICAtPiAnMC4wMCcKLWRkYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcKLQotZGRhYnMwMTAgYWJzICctMicgICAgIC0+ICcyJwotZGRhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJwotZGRhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJwotZGRhYnMwMTMgYWJzICcyLjAwJyAgIC0+ICcyLjAwJwotZGRhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJwotZGRhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJwotZGRhYnMwMTYgYWJzICctMDAuMCcgIC0+ICcwLjAnCi1kZGFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnCi1kZGFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnCi0KLWRkYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJwotZGRhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnCi0KLWRkYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJwotZGRhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCi1kZGFiczAzMiBhYnMgJyswLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCi1kZGFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnCi1kZGFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJwotZGRhYnMwMzUgYWJzICctMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScKLWRkYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCi1kZGFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJwotZGRhYnMwMzggYWJzICcrMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKLWRkYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKLWRkYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnCi1kZGFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJwotZGRhYnMwNDIgYWJzICcxMDEuNScgICAtPiAgJzEwMS41JwotZGRhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41JwotCi0tLSBtb3JlIGZpeGVkLCBwb3RlbnRpYWwgTEhTIHN3YXBzL292ZXJsYXlzIGlmIGRvbmUgYnkgc3VidHJhY3QgMAotZGRhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycKLWRkYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JwotZGRhYnMwNjIgYWJzICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycKLWRkYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCi1kZGFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCi0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdwotCi0tLSBsb25nIG9wZXJhbmQgdGVzdHMKLWRkYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2Ci1kZGFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCi1kZGFiczMyMyBhYnMgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDAKLWRkYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MAotZGRhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCi1kZGFiczMyNiBhYnMgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCi1kZGFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKLQotLS0gemVyb3MKLWRkYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMAotZGRhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwCi1kZGFiczExMyBhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKLWRkYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgotZGRhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKLWRkYWJzMTE2IGFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCi1kZGFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotZGRhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRkYWJzMTIxIGFicyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKLWRkYWJzMTIyIGFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKLWRkYWJzMTIzIGFicyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKLWRkYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkYWJzMTMyIGFicyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MwotZGRhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRhYnMxMzQgYWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbAotCi1kZGFiczEzNSBhYnMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsCi1kZGFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZGFiczEzNyBhYnMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKLWRkYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLQotLS0gc3BlY2lhbHMKLWRkYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknCi1kZGFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5JwotZGRhYnM1MjIgYWJzICAgTmFOICAgIC0+ICBOYU4KLWRkYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjIKLWRkYWJzNTI1IGFicyAgc05hTjMzICAtPiAgTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KLWRkYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjIKLWRkYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTnVsbCB0ZXN0cwotZGRhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZEFicy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitkZGFiczAwMSBhYnMgJzEnICAgICAgLT4gJzEnDQorZGRhYnMwMDIgYWJzICctMScgICAgIC0+ICcxJw0KK2RkYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcNCitkZGFiczAwNCBhYnMgJy0xLjAwJyAgLT4gJzEuMDAnDQorZGRhYnMwMDUgYWJzICcwJyAgICAgIC0+ICcwJw0KK2RkYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcNCitkZGFiczAwNyBhYnMgJzAwLjAnICAgLT4gJzAuMCcNCitkZGFiczAwOCBhYnMgJzAwLjAwJyAgLT4gJzAuMDAnDQorZGRhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJw0KKw0KK2RkYWJzMDEwIGFicyAnLTInICAgICAtPiAnMicNCitkZGFiczAxMSBhYnMgJzInICAgICAgLT4gJzInDQorZGRhYnMwMTIgYWJzICctMi4wMCcgIC0+ICcyLjAwJw0KK2RkYWJzMDEzIGFicyAnMi4wMCcgICAtPiAnMi4wMCcNCitkZGFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnDQorZGRhYnMwMTUgYWJzICctMC4wMCcgIC0+ICcwLjAwJw0KK2RkYWJzMDE2IGFicyAnLTAwLjAnICAtPiAnMC4wJw0KK2RkYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcNCitkZGFiczAxOCBhYnMgJy0wMCcgICAgLT4gJzAnDQorDQorZGRhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnDQorZGRhYnMwMjEgYWJzICcyMDAwMDAwJyAgLT4gJzIwMDAwMDAnDQorDQorZGRhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQorZGRhYnMwMzEgYWJzICctMC4xJyAgICAgICAgICAgIC0+ICcwLjEnDQorZGRhYnMwMzIgYWJzICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJw0KK2RkYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCitkZGFiczAzNCBhYnMgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KK2RkYWJzMDM1IGFicyAnLTAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnDQorZGRhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCitkZGFiczAzNyBhYnMgJy0wLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJw0KK2RkYWJzMDM4IGFicyAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQorZGRhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicNCisNCistLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoDQorZGRhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScNCitkZGFiczA0MSBhYnMgJy0xMDAnICAgIC0+ICAnMTAwJw0KK2RkYWJzMDQyIGFicyAnMTAxLjUnICAgLT4gICcxMDEuNScNCitkZGFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnDQorDQorLS0gbW9yZSBmaXhlZCwgcG90ZW50aWFsIExIUyBzd2Fwcy9vdmVybGF5cyBpZiBkb25lIGJ5IHN1YnRyYWN0IDANCitkZGFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3Jw0KK2RkYWJzMDYxIGFicyAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3Jw0KK2RkYWJzMDYyIGFicyAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnDQorZGRhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCitkZGFiczA2NSBhYnMgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnDQorDQorLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQorDQorLS0gbG9uZyBvcGVyYW5kIHRlc3RzDQorZGRhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCitkZGFiczMyMiBhYnMgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwDQorZGRhYnMzMjMgYWJzIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQorZGRhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQorZGRhYnMzMjUgYWJzIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxDQorZGRhYnMzMjYgYWJzIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KK2RkYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KKw0KKy0tIHplcm9zDQorZGRhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwDQorZGRhYnMxMTIgYWJzICAgICAgICAgLTAgICAtPiAwDQorZGRhYnMxMTMgYWJzICAgICAgIDBFKzYgICAtPiAwRSs2DQorZGRhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2DQorZGRhYnMxMTUgYWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCitkZGFiczExNiBhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KK2RkYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxDQorZGRhYnMxMTggYWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RkYWJzMTIxIGFicyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCitkZGFiczEyMiBhYnMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRhYnMxMjMgYWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KK2RkYWJzMTI0IGFicyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDENCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RkYWJzMTMxIGFicyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZGFiczEzMiBhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCitkZGFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRhYnMxMzQgYWJzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KKw0KK2RkYWJzMTM1IGFicyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwNCitkZGFiczEzNiBhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRhYnMxMzcgYWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQorZGRhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKw0KKy0tIHNwZWNpYWxzDQorZGRhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScNCitkZGFiczUyMSBhYnMgJy1JbmYnICAgLT4gJ0luZmluaXR5Jw0KK2RkYWJzNTIyIGFicyAgIE5hTiAgICAtPiAgTmFODQorZGRhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWJzNTI0IGFicyAgIE5hTjIyICAtPiAgTmFOMjINCitkZGFiczUyNSBhYnMgIHNOYU4zMyAgLT4gIE5hTjMzIEludmFsaWRfb3BlcmF0aW9uDQorZGRhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMg0KK2RkYWJzNTI3IGFicyAtc05hTjMzICAtPiAtTmFOMzMgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOdWxsIHRlc3RzDQorZGRhYnM5MDAgYWJzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFkZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKaW5kZXggMGYxMmNlNC4uYzBhMjViMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQWRkLmRlY1Rlc3QKQEAgLTEsMTMyOCArMSwxMzI4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQWRkLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgYXJlIGZvciBkZWNEb3VibGVzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlCi0tLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCi1kZGFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyCi1kZGFkZDAwMiBhZGQgMiAgICAgICAzICAgICAgIC0+ICA1Ci1kZGFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1Ci1kZGFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyCi1kZGFkZDAwNSBhZGQgJy01JyAgICAnLTMnICAgIC0+ICAtOAotZGRhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQotZGRhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wCi1kZGFkZDAwOCBhZGQgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCi1kZGFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCi1kZGFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCi0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci1kZGFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDAxMiBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAotZGRhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5JwotZGRhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMDE1IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMDE4IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKLQotZGRhZGQwMjEgYWRkIDAgMSAtPiAxCi1kZGFkZDAyMiBhZGQgMSAxIC0+IDIKLWRkYWRkMDIzIGFkZCAyIDEgLT4gMwotZGRhZGQwMjQgYWRkIDMgMSAtPiA0Ci1kZGFkZDAyNSBhZGQgNCAxIC0+IDUKLWRkYWRkMDI2IGFkZCA1IDEgLT4gNgotZGRhZGQwMjcgYWRkIDYgMSAtPiA3Ci1kZGFkZDAyOCBhZGQgNyAxIC0+IDgKLWRkYWRkMDI5IGFkZCA4IDEgLT4gOQotZGRhZGQwMzAgYWRkIDkgMSAtPiAxMAotCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKLWRkYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKLWRkYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKLWRkYWRkMDMzIGFkZCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKLWRkYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKLQotZGRhZGQwMzUgYWRkICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwMzggYWRkICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCi0KLS0tIHN5bW1ldHJ5OgotZGRhZGQwNDAgYWRkICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwNDEgYWRkICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMDQyIGFkZCAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwNDQgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQwNDUgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCi0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKLWRkYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JwotZGRhZGQwNDcgYWRkICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJwotZGRhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKLWRkYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJwotZGRhZGQwNTAgYWRkICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJwotZGRhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKLWRkYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJwotCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCi1kZGFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJwotZGRhZGQwNTQgYWRkICcxLjMnICctMS4wNycgLT4gJzAuMjMnCi1kZGFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKLWRkYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKLWRkYWRkMDU3IGFkZCAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JwotCi0tLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCi1kZGFkZDA2MSBhZGQgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJwotZGRhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJwotZGRhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCi1kZGFkZDA2NCBhZGQgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJwotZGRhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJwotCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCi1kZGFkZDA3MCBhZGQgMSAgMCAgICAtPiAxCi1kZGFkZDA3MSBhZGQgMSAwLiAgICAtPiAxCi1kZGFkZDA3MiBhZGQgMSAgLjAgICAtPiAxLjAKLWRkYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMAotZGRhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMAotZGRhZGQwNzUgYWRkICAwICAxICAgLT4gMQotZGRhZGQwNzYgYWRkIDAuICAxICAgLT4gMQotZGRhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wCi1kZGFkZDA3OCBhZGQgMC4wIDEgICAtPiAxLjAKLWRkYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDAKLQotLS0gc29tZSBjYXJyaWVzCi1kZGFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQotZGRhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwCi1kZGFkZDA4MiBhZGQgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAotZGRhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAotZGRhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwCi1kZGFkZDA4NSBhZGQgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAotZGRhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMAotZGRhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwCi1kZGFkZDA4OCBhZGQgICAgICAgIDk5IDEgIC0+IDEwMAotZGRhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMAotCi0KLS0tIG1vcmUgTEhTIHN3YXBzCi1kZGFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnCi1kZGFkZDA5MSBhZGQgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKLWRkYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCi1kZGFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnCi1kZGFkZDA5NCBhZGQgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCi1kZGFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCi1kZGFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnCi1kZGFkZDA5NyBhZGQgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKLWRkYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJwotZGRhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycKLWRkYWRkMTAwIGFkZCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JwotZGRhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKLWRkYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScKLWRkYWRkMTAzIGFkZCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKLWRkYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCi1kZGFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcKLWRkYWRkMTA2IGFkZCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKLWRkYWRkMTA3IGFkZCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCi1kZGFkZDEwOCBhZGQgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkCi1kZGFkZDEwOSBhZGQgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCi1kZGFkZDExMCBhZGQgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkCi1kZGFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkCi0KLS0tIG1vcmUgUkhTIHN3YXBzCi1kZGFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKLWRkYWRkMTE0IGFkZCAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCi1kZGFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnCi1kZGFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKLWRkYWRkMTE5IGFkZCAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JwotZGRhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnCi1kZGFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKLWRkYWRkMTIyIGFkZCAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCi1kZGFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJwotZGRhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JwotZGRhZGQxMjUgYWRkIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKLWRkYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScKLWRkYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JwotZGRhZGQxMjggYWRkIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCi1kZGFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnCi1kZGFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJwotZGRhZGQxMzEgYWRkIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCi1kZGFkZDEzMiBhZGQgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnCi1kZGFkZDEzMyBhZGQgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCi1kZGFkZDEzNCBhZGQgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkCi1kZGFkZDEzNSBhZGQgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkCi1kZGFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCi0KLS0tIHJlbGF0ZWQKLWRkYWRkMTM3IGFkZCAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCi1kZGFkZDEzOCBhZGQgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAotZGRhZGQxMzkgYWRkICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKLWRkYWRkMTQwIGFkZCAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kZGFkZDE0MSBhZGQgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJwotZGRhZGQxNDIgYWRkIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKLWRkYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnCi1kZGFkZDE0NCBhZGQgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZAotCi0tLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQotZGRhZGQxNDYgYWRkICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKLWRkYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJwotZGRhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnCi1kZGFkZDE0OSBhZGQgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJwotZGRhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCi1kZGFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcKLWRkYWRkMTUyIGFkZCAnMycgICAgICcuMycgICAgLT4gICczLjMnCi1kZGFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJwotZGRhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycKLWRkYWRkMTU1IGFkZCAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJwotZGRhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnCi1kZGFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicKLWRkYWRkMTU4IGFkZCAnMycgICAgICctMycgICAgLT4gICcwJwotZGRhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKLWRkYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJwotCi0tLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLgotZGRhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JwotZGRhZGQxNjIgYWRkICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKLWRkYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnCi1kZGFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCi1kZGFkZDE2NSBhZGQgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JwotZGRhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKLWRkYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCi1kZGFkZDE2OCBhZGQgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JwotCi1yb3VuZGluZzogaGFsZl91cAotLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2Ci1kZGFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZGRhZGQxNzIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZGRhZGQxNzUgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKLWRkYWRkMTc4IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZGRhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMTgxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAotZGRhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCi0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKLXJvdW5kaW5nOiBoYWxmX3VwCi1kZGFkZDIwMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCi1kZGFkZDIwMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMDIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjAzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIwNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMDUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjA2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIwNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMDggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjA5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIxMCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjEyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIxMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjE1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIxNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCi1kZGFkZDIxNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjE5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRkYWRkMjIwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKLWRkYWRkMjIxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIyMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMjMgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjI0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIyNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMjYgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjI3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIyOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMjkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjMwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIzMSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMzIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjMzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIzNCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMzUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjM2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcKLWRkYWRkMjM3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDIzOCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyMzkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1kZGFkZDI0MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjQyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1kZGFkZDI1MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknCi1kZGFkZDI1MSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNTIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjUzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDI1NCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNTUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjU2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDI1NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjU5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDI2MCBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNjEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjYyIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDI2MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNjQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjY1IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDI2NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCi1kZGFkZDI2NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQyNjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMjY5IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cwotcm91bmRpbmc6IGhhbGZfdXAKLWRkYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwCi1kZGFkZDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQotZGRhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDIKLWRkYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzCi1kZGFkZDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQotZGRhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDAKLWRkYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxCi1kZGFkZDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMgotZGRhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTIKLWRkYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xCi1kZGFkZDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMAotZGRhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTEKLWRkYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3Ci1kZGFkZDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OAotZGRhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkKLWRkYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwCi0KLWRkYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAotZGRhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCi1kZGFkZDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKLWRkYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMwotZGRhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5Ci1kZGFkZDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKLWRkYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQotZGRhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCi1kZGFkZDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKLWRkYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQotZGRhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCi1kZGFkZDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKLWRkYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45NwotZGRhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4Ci1kZGFkZDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKLWRkYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAotCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKLWRkYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCi1kZGFkZDM0MSBhZGQgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAKLWRkYWRkMzQyIGFkZCAxRSsxNiAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKLWRkYWRkMzQzIGFkZCAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KLWRkYWRkMzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCi1kZGFkZDM0NSBhZGQgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDEKLWRkYWRkMzQ2IGFkZCAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQzNDcgYWRkIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNwotZGRhZGQzNDkgYWRkIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3Ci1kZGFkZDM1MCBhZGQgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkMzUxIGFkZCAxRSsyMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotcm91bmRpbmc6ICAgIGhhbGZfdXAKLWRkYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQotZGRhZGQzNjEgIGFkZCAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAotZGRhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZAotZGRhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAotZGRhZGQzNjQgIGFkZCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQotCi0tLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi1kZGFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAotZGRhZGQzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kZGFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNAotZGRhZGQzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRkYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0Ci1kZGFkZDM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdAotCi0tLSBvcGVyYW5kcyBmb2xkZWQKLWRkYWRkMzgwIGFkZCAgIDFFKzM4NCAgMUUrMzg0ICAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAotZGRhZGQzODEgYWRkICAgMUUrMzgwICAxRSszODAgIC0+ICAyLjAwMDAwMDAwMDAwRSszODAgICAgICBDbGFtcGVkCi1kZGFkZDM4MiBhZGQgICAxRSszNzYgIDFFKzM3NiAgLT4gIDIuMDAwMDAwMEUrMzc2ICAgICAgICAgIENsYW1wZWQKLWRkYWRkMzgzIGFkZCAgIDFFKzM3MiAgMUUrMzcyICAtPiAgMi4wMDBFKzM3MiAgICAgICAgICAgICAgQ2xhbXBlZAotZGRhZGQzODQgYWRkICAgMUUrMzcwICAxRSszNzAgIC0+ICAyLjBFKzM3MCAgICAgICAgICAgICAgICBDbGFtcGVkCi1kZGFkZDM4NSBhZGQgICAxRSszNjkgIDFFKzM2OSAgLT4gIDJFKzM2OQotZGRhZGQzODYgYWRkICAgMUUrMzY4ICAxRSszNjggIC0+ICAyRSszNjgKLQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCi1kZGFkZDQwMCBhZGQgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKLWRkYWRkNDAxIGFkZCAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKLWRkYWRkNDAyIGFkZCAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQwMyBhZGQgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MDQgYWRkICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDA1IGFkZCAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDQxMCBhZGQgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3Ci1kZGFkZDQxMSBhZGQgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MTIgYWRkICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDEzIGFkZCAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQxNCBhZGQgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MTUgYWRkICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNDIwIGFkZCAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3NwotZGRhZGQ0MjEgYWRkICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NwotZGRhZGQ0MjIgYWRkICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDIzIGFkZCAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQyNCBhZGQgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MjUgYWRkICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDI2IGFkZCAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNDMwIGFkZCAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKLWRkYWRkNDMxIGFkZCAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQzMiBhZGQgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MzMgYWRkICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNDM0IGFkZCAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDQzNSBhZGQgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gZmFzdHBhdGggYm91bmRhcnkgKG1vcmUgaW4gZHFhZGQpCi0tLSAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRkYWRkNTM5IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczMzMzMzMzMzMzMzMzMzMzJyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycKLWRkYWRkNTQwIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcKLWRkYWRkNTQxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScKLWRkYWRkNTQyIGFkZCAnMzMzMzMzMzMzMzMzMzMzMycgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnNzc3Nzc3Nzc3Nzc3Nzc3NycKLWRkYWRkNTQzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnODg4ODg4ODg4ODg4ODg4OCcKLWRkYWRkNTQ0IGFkZCAnNTU1NTU1NTU1NTU1NTU1NScgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScKLWRkYWRkNTQ1IGFkZCAnMzAwMDAwNDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDAwMDQwJyAtPiAnNjAwMDAwNDAwMDAwMDA0MCcKLWRkYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMCcKLWRkYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcKLWRkYWRkNTQ4IGFkZCAnNDAwMDAwMDAwNDAwMDAwMCcgICczMDAwMDAwMDAwMDQwMDAwJyAtPiAnNzAwMDAwMDAwNDA0MDAwMCcKLWRkYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMCcKLWRkYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMCcKLWRkYWRkNTUxIGFkZCAnNTAwMDAwMDAwMDAwNDAwMCcgICczMDAwMDAwMDQwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcKLWRkYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMCcgICc0MDAwMDAwNDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMCcKLWRkYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MCcgICc1MDAwMDA0MDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNEUrMTYgUm91bmRlZAotLS0gY2hlY2sgcHJvcGFnYXRpb24KLWRkYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiA5MDAwMDAwMDAwMDAwMDAwCi1kZGFkZDU1NSBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnODk5OTk5OTk5OTk5OTk5OScgLT4gOTAwMDAwMDAwMDAwMDAwMAotZGRhZGQ1NTYgYWRkICcwOTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDEnIC0+IDEwMDAwMDAwMDAwMDAwMDAKLWRkYWRkNTU3IGFkZCAnMDAwMDAwMDAwMDAwMDAwMScgICcwOTk5OTk5OTk5OTk5OTk5JyAtPiAxMDAwMDAwMDAwMDAwMDAwCi1kZGFkZDU1OCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NicgLT4gOTAwMDAwMDAwMDAwMDAwMAotZGRhZGQ1NTkgYWRkICc0NTU1NTU1NTU1NTU1NTU2JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+IDkwMDAwMDAwMDAwMDAwMDAKLQotLS0gbmVnYXRpdmUgdWxwcwotZGRhZGQ2NDQwIGFkZCAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMwotZGRhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMwotZGRhZGQ2NDQzIGFkZCAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NDUgYWRkICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NDYgYWRkICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMwotZGRhZGQ2NDUxIGFkZCAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMwotZGRhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NTQgYWRkICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NTUgYWRkICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNjQ2MCBhZGQgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCi1kZGFkZDY0NjEgYWRkICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ2MiBhZGQgIC03N2UtMTYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ2MyBhZGQgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NjQgYWRkICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDY1IGFkZCAgLTc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDY0NzAgYWRkICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ3MSBhZGQgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ3MiBhZGQgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0NzMgYWRkICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDc0IGFkZCAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDc1IGFkZCAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDc2IGFkZCAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBuZWdhdGl2ZSB1bHBzCi1kZGFkZDY0ODAgYWRkICAtMSAgICA3N2UtMTQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCi1kZGFkZDY0ODMgYWRkICAtMSAgICA3N2UtMTcgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ4NiBhZGQgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjQ5MSBhZGQgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCi1kZGFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NDk0IGFkZCAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDY1MDAgYWRkICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjUwMSBhZGQgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKLWRkYWRkNjUwMiBhZGQgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCi1kZGFkZDY1MDMgYWRkICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjUwNCBhZGQgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTA1IGFkZCAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNjUxMCBhZGQgICA3N2UtMTQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKLWRkYWRkNjUxMSBhZGQgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCi1kZGFkZDY1MTIgYWRkICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjUxMyBhZGQgICA3N2UtMTcgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTE0IGFkZCAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjUxNSBhZGQgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1MTYgYWRkICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncwotcm91bmRpbmc6IGhhbGZfdXAKLWRkYWRkNjU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCi1kZGFkZDY1NDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU0MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTQzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NDQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU0NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTQ2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NDcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU0OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTQ5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU1MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTUyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU1NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTU1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJwotZGRhZGQ2NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NTggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl9ldmVuCi1kZGFkZDY1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JwotZGRhZGQ2NTYxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NjIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTY0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NjUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTcwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NzEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU3MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTczIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NzQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNjU3NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTc2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKLWRkYWRkNjU3NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ2NTc4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDY1NzkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KLWRkYWRkNzU0MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTQxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGRvd24KLWRkYWRkNzU1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCi1kZGFkZDc1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU1MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU1NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NTcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NjMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NjYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJwotZGRhZGQ3NTY3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0tLSB2ZXJpZnkgYSBxdWVyeQotcm91bmRpbmc6ICAgICBkb3duCi1kZGFkZDc2NjEgYWRkIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc2NjIgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAotZGRhZGQ3NjYzIGFkZCAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NjY0IGFkZCAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKLQotLS0gbW9yZSB6ZXJvcywgZXRjLgotcm91bmRpbmc6IGhhbGZfZXZlbgotCi1kZGFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCi1kZGFkZDc3MDIgYWRkIDAwLjAwIDAuMDAwICAtPiAwLjAwMAotZGRhZGQ3NzAzIGFkZCAwMC4wMCAwRS0zICAgLT4gMC4wMDAKLWRkYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCi0KLWRkYWRkNzcxMCBhZGQgMEUrMyAgMDAuMDAgIC0+IDAuMDAKLWRkYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMAotZGRhZGQ3NzEyIGFkZCAwRSszICAwMC4gICAgLT4gMAotZGRhZGQ3NzEzIGFkZCAwRSszICAwMC5FKzEgLT4gMEUrMQotZGRhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMgotZGRhZGQ3NzE1IGFkZCAwRSszICAwMC5FKzMgLT4gMEUrMwotZGRhZGQ3NzE2IGFkZCAwRSszICAwMC5FKzQgLT4gMEUrMwotZGRhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMwotZGRhZGQ3NzE4IGFkZCAwRSszICAtMDAuMCAgIC0+IDAuMAotZGRhZGQ3NzE5IGFkZCAwRSszICAtMDAuICAgIC0+IDAKLWRkYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCi0KLWRkYWRkNzcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDAKLWRkYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMAotZGRhZGQ3NzIyIGFkZCAwMC4gICAgMEUrMyAgLT4gMAotZGRhZGQ3NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQotZGRhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMgotZGRhZGQ3NzI1IGFkZCAwMC5FKzMgMEUrMyAgLT4gMEUrMwotZGRhZGQ3NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMwotZGRhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMwotZGRhZGQ3NzI4IGFkZCAtMDAuMDAgMEUrMyAgLT4gMC4wMAotZGRhZGQ3NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wCi1kZGFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwCi0KLWRkYWRkNzczMiBhZGQgIDAgICAgIDAgICAgIC0+ICAwCi1kZGFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMAotZGRhZGQ3NzM0IGFkZCAtMCAgICAgMCAgICAgLT4gIDAKLWRkYWRkNzczNSBhZGQgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKLQotZGRhZGQ3NzM2IGFkZCAgMSAgICAtMSAgICAgLT4gIDAKLWRkYWRkNzczNyBhZGQgLTEgICAgLTEgICAgIC0+IC0yCi1kZGFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMgotZGRhZGQ3NzM5IGFkZCAtMSAgICAgMSAgICAgLT4gIDAKLQotZGRhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTEKLWRkYWRkNzc0MiBhZGQgLTAgICAgLTEgICAgIC0+IC0xCi1kZGFkZDc3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQotZGRhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDEKLWRkYWRkNzc0NSBhZGQgLTEgICAgIDAgICAgIC0+IC0xCi1kZGFkZDc3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQotZGRhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDEKLWRkYWRkNzc0OCBhZGQgIDEgICAgLTAgICAgIC0+ICAxCi0KLWRkYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjAKLWRkYWRkNzc1MiBhZGQgLTAuMCAgLTEgICAgIC0+IC0xLjAKLWRkYWRkNzc1MyBhZGQgIDAuMCAgIDEgICAgIC0+ICAxLjAKLWRkYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjAKLWRkYWRkNzc1NSBhZGQgLTEuMCAgIDAgICAgIC0+IC0xLjAKLWRkYWRkNzc1NiBhZGQgLTEuMCAgLTAgICAgIC0+IC0xLjAKLWRkYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjAKLWRkYWRkNzc1OCBhZGQgIDEuMCAgLTAgICAgIC0+ICAxLjAKLQotZGRhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMAotZGRhZGQ3NzYyIGFkZCAtMCAgICAtMS4wICAgLT4gLTEuMAotZGRhZGQ3NzYzIGFkZCAgMCAgICAgMS4wICAgLT4gIDEuMAotZGRhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMAotZGRhZGQ3NzY1IGFkZCAtMSAgICAgMC4wICAgLT4gLTEuMAotZGRhZGQ3NzY2IGFkZCAtMSAgICAtMC4wICAgLT4gLTEuMAotZGRhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMAotZGRhZGQ3NzY4IGFkZCAgMSAgICAtMC4wICAgLT4gIDEuMAotCi1kZGFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wCi1kZGFkZDc3NzIgYWRkIC0wLjAgIC0xLjAgICAtPiAtMS4wCi1kZGFkZDc3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wCi1kZGFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wCi1kZGFkZDc3NzUgYWRkIC0xLjAgICAwLjAgICAtPiAtMS4wCi1kZGFkZDc3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wCi1kZGFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wCi1kZGFkZDc3NzggYWRkICAxLjAgIC0wLjAgICAtPiAgMS4wCi0KLS0tIFNwZWNpYWxzCi1kZGFkZDc3ODAgYWRkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkYWRkNzc4MSBhZGQgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQotZGRhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZGFkZDc3ODMgYWRkIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRkYWRkNzc4NCBhZGQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZGRhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZGFkZDc3ODYgYWRkIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRkYWRkNzc4NyBhZGQgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZGFkZDc3ODkgYWRkIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkYWRkNzc5MCBhZGQgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZGFkZDc3OTIgYWRkICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkYWRkNzc5MyBhZGQgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotZGRhZGQ3ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZGRhZGQ3ODAyIGFkZCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kZGFkZDc4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKLWRkYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZGRhZGQ3ODA1IGFkZCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kZGFkZDc4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLWRkYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRhZGQ3ODA4IGFkZCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGFkZDc4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGFkZDc4MTEgYWRkIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkYWRkNzgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGFkZDc4MTQgYWRkICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRkYWRkNzgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kZGFkZDc4MjEgYWRkICBOYU4gLUluZiAgICAtPiAgTmFOCi1kZGFkZDc4MjIgYWRkICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kZGFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFOCi1kZGFkZDc4MjQgYWRkICBOYU4gLTAgICAgICAtPiAgTmFOCi1kZGFkZDc4MjUgYWRkICBOYU4gIDAgICAgICAtPiAgTmFOCi1kZGFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFOCi1kZGFkZDc4MjcgYWRkICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kZGFkZDc4MjggYWRkICBOYU4gIEluZiAgICAtPiAgTmFOCi1kZGFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzAgYWRkIC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzEgYWRkIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzMgYWRkIC0wICAgIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzQgYWRkICAwICAgIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzYgYWRkICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kZGFkZDc4MzcgYWRkICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRkYWRkNzg0MSBhZGQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NDIgYWRkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg0NCBhZGQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NDUgYWRkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg0NyBhZGQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NDggYWRkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg1MCBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NTEgYWRkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg1MyBhZGQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NTQgYWRkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg1NiBhZGQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NTcgYWRkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg1OSBhZGQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkYWRkNzg2MSBhZGQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCi1kZGFkZDc4NjIgYWRkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgotZGRhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLWRkYWRkNzg2NCBhZGQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40Ci1kZGFkZDc4NjUgYWRkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQotZGRhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLWRkYWRkNzg2NyBhZGQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44Ci1kZGFkZDc4NjggYWRkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQotZGRhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1kZGFkZDc4NzEgYWRkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzIgYWRkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzQgYWRkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzUgYWRkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzcgYWRkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzggYWRkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4ODAgYWRkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4ODEgYWRkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCi1kZGFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLWRkYWRkNzg4MyBhZGQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KLWRkYWRkNzg4NCBhZGQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAotZGRhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgotZGRhZGQ3NTc1IGFkZCAgMUUtMzgzIC0xRS0zOTggLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCi1kZGFkZDc1NzYgYWRkIC0xRS0zODMgKzFFLTM5OCAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKLQotLS0gYW5kIGFub3RoZXIgY3VyaW91cyBjYXNlCi1kZGFkZDc1NzcgYWRkIDcuMDAwMDAwMDAwMDAwRS0zODUgLTEuMDAwMDBFLTM5MSAtPiA2Ljk5OTk5OTAwMDAwMEUtMzg1IFN1Ym5vcm1hbAotCi0tLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZGRhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkYWRkNzk3MyBhZGQgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTc0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTc2IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzk3NyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTc5IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzk4MCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5ODIgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtN0UrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNEUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMUUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCi1yb3VuZGluZzogICAgIGRvd24KLWRkYWRkNzExMDAgYWRkIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMDEgYWRkIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTAzIGFkZCAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMDQgYWRkIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMDUgYWRkIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTA2IGFkZCAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMDcgYWRkIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMDggYWRkIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTA5IGFkZCAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAotCi1yb3VuZGluZzogICAgIGNlaWxpbmcKLWRkYWRkNzExMTAgYWRkIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTExIGFkZCAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMTMgYWRkICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMTQgYWRkIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTE1IGFkZCAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMTYgYWRkIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMTcgYWRkIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGFkZDcxMTE4IGFkZCAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkYWRkNzExMTkgYWRkIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAotCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KLQotZGRhZGQ3MTMwMCBhZGQgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMTAgYWRkIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzExIGFkZCAxRTE2ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMxMiBhZGQgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMTMgYWRkIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzE0IGFkZCAxRTE2ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMxNSBhZGQgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMTYgYWRkIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzE3IGFkZCAxRTE2ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMxOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMTkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzIwIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMyMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMjIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzIzIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMyNCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMjUgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzI2IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMyNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMjggYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzI5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMzMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMzEgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzMyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMzMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMzQgYWRkIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzM1IGFkZCAxRTE2ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMzNiBhZGQgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzMzcgYWRkIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzM4IGFkZCAxRTE2ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTMzOSBhZGQgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLQotZGRhZGQ3MTM0MCBhZGQgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNDEgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzUxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzU0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzU3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzYwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzYzIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzY3IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzcwIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzc2IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzc5IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzgyIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzg1IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzg4IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzkxIGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxMzk0IGFkZCA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCi1kZGFkZDcxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1Ci1kZGFkZDcxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1kZGFkZDcxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNwotZGRhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04Ci1kZGFkZDcxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKLWRkYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKLWRkYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKLWRkYWRkNzE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKLWRkYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKLWRkYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKLWRkYWRkNzE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKLWRkYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKLWRkYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKLWRkYWRkNzE0MzggYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKLWRkYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKLQotLS0gc2FtZSwgcmV2ZXJzZWQgMAotZGRhZGQ3MTQ0MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0NDEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ0MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ0MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0NDQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ0NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ0NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKLWRkYWRkNzE0NDcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03Ci1kZGFkZDcxNDQ4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAotZGRhZGQ3MTQ0OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKLWRkYWRkNzE0NTAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAotZGRhZGQ3MTQ1MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCi1kZGFkZDcxNDUyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKLWRkYWRkNzE0NTMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMwotZGRhZGQ3MTQ1NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0Ci1kZGFkZDcxNDU1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKLWRkYWRkNzE0NTYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgotZGRhZGQ3MTQ1NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3Ci1kZGFkZDcxNDU4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKLWRkYWRkNzE0NTkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQotCi0tLSBzYW1lLCBFcyBvbiB0aGUgMAotZGRhZGQ3MTQ2MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTIgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTUgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2NyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTggICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ2OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTExICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE0ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAotZGRhZGQ3MTQ3NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1kZGFkZDcxNDc3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLWRkYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotZGRhZGQ3MTQ3OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCi1yb3VuZGluZzogICAgaGFsZl91cAotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZGRhZGQ3MTUwMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE1MDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNTAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTUwMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGFkZDcxNTExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAotZGRhZGQ3MTUxMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKLQotcm91bmRpbmc6ICAgIGhhbGZfZG93bgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZGRhZGQ3MTUyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE1MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNTIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTUyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGFkZDcxNTMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAotZGRhZGQ3MTUzMiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKLQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZGRhZGQ3MTU0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE1NDEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNTQyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTU0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGFkZDcxNTUxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAotZGRhZGQ3MTU1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKLQotcm91bmRpbmc6ICAgIHVwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGFkZDcxNTYwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTU2MSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE1NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNTYzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWRkYWRkNzE1NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCi1kZGFkZDcxNTcyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAotCi1yb3VuZGluZzogICAgZG93bgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZGRhZGQ3MTU4MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE1ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNTgyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTU4MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGFkZDcxNTkxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAotZGRhZGQ3MTU5MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKLQotcm91bmRpbmc6ICAgIGNlaWxpbmcKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRkYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRkYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZGRhZGQ3MTYxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKLWRkYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCi0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgotcm91bmRpbmc6ICAgIGZsb29yCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZGRhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKLWRkYWRkNzE2MjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1kZGFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWRkYWRkNzE2MzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCi1kZGFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgotCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKLWRkYWRkNzE3MDEgYWRkIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAotZGRhZGQ3MTcwMiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCi1kZGFkZDcxNzAzIGFkZCAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzAKLWRkYWRkNzE3MDQgYWRkIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAotZGRhZGQ3MTcwNSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCi1kZGFkZDcxNzA2IGFkZCAxMzBFLTIgICAtMTJFLTEgIC0+IDAuMTAKLWRkYWRkNzE3MDcgYWRkIDEzMEUtMiAgIC0xRTAgICAgLT4gMC4zMAotZGRhZGQ3MTcwOCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCi0KLS0tIHF1ZXJ5IGZyb20gVmluY2VudCBLdWxhbmRhaXNhbXkKLXJvdW5kaW5nOiBjZWlsaW5nCi1kZGFkZDcxODAxICBhZGQgIDcuODgyMjc3MzgwNTg2MkUrMjc3ICAgIC01LjE3NTc1MDM4MjA2NjNFLTIxIC0+IDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxODAyICBhZGQgIDcuODgyMjc3MzgwNTg2MjAwRSsyNzcgIDEyLjM0MSAgICAgICAgICAgICAgIC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDcxODAzICBhZGQgIDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDcuODgyMjc3MzgwNTg2MjAyRSsyNzcgSW5leGFjdCBSb3VuZGVkCi0KLWRkYWRkNzE4MTEgIGFkZCAgICAgICAgICAgICAgICAgICAxMi4zNDEgLTUuMTc1NzUwMzgyMDY2M0UtMjEgLT4gMTIuMzQxMDAwMDAwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzE4MTIgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDAgMi43MjcwNTQ1MDQ2NjEzRS0zMSAgLT4gMTIuMzQxMDAwMDAwMDAwMDEgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzE4MTMgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDEgNy44ODIyNzczODA1ODYyRSsyNzcgLT4gNy44ODIyNzczODA1ODYyMDFFKzI3NyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcAotcm91bmRpbmc6IGhhbGZfZXZlbgotCi1kZGFkZDc1MDAxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3Ci1kZGFkZDc1MDAyIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMDMgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAwNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDA1IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMDYgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAwNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDA4IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMDkgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAxMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDExIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMTIgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAxMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDE0IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMTUgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAxNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDE3IGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMTggYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTAxOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDIwIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwMjEgYWRkIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotCi0tLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwCi1kZGFkZDc1MDMwIGFkZCAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQotZGRhZGQ3NTAzMSBhZGQgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQotZGRhZGQ3NTAzMiBhZGQgMTIzNDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIKLWRkYWRkNzUwMzMgYWRkIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMwotZGRhZGQ3NTAzNCBhZGQgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAotZGRhZGQ3NTAzNSBhZGQgMTIzNDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDUKLWRkYWRkNzUwMzYgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgotZGRhZGQ3NTAzNyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NwotZGRhZGQ3NTAzOCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzgKLWRkYWRkNzUwMzkgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA0MCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDQxIGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNDIgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA0MyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDQ0IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNDUgYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA0NiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDQ3IGFkZCAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNDggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA0OSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngotcm91bmRpbmc6IGhhbGZfZXZlbgotZGRhZGQ3NTA1MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDUxIGFkZCAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNTIgYWRkIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA1MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDU0IGFkZCAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNTUgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA1NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDU3IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNjAgYWRkIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA2MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDYyIGFkZCAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNjMgYWRkIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA2NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDY1IGFkZCAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNjYgYWRkIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA2NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi0tLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpCi1yb3VuZGluZzogdXAKLWRkYWRkNzUwNzAgYWRkIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCi1kZGFkZDc1MDcxIGFkZCAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNzIgYWRkIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA3MyBhZGQgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDc0IGFkZCAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNzUgYWRkIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA3NiBhZGQgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDc3IGFkZCAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwNzggYWRkIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA3OSBhZGQgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDgwIGFkZCAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwODEgYWRkIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA4MiBhZGQgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDgzIGFkZCAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwODQgYWRkIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA4NSBhZGQgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDg2IGFkZCAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkNzUwODcgYWRkIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRhZGQ3NTA4OCBhZGQgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDc1MDg5IGFkZCAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUHVuaXQncwotZGRhZGQ3NTEwMCBhZGQgMS4wMDAgLTIwMC4wMDAgICAgICAgICAgICAgICAgICAgLT4gLTE5OS4wMDAKLQotLS0gUm91bmRpbmcgc3dhdGhlCi1yb3VuZGluZzogaGFsZl9ldmVuCi1kZGFkZDgxMTAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkCi1kZGFkZDgxMTAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODExMDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTEwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMTA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODExMDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTEwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMTA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODExMDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTEwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMTIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfdXAKLWRkYWRkODEyMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKLWRkYWRkODEyMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTIwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEyMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTIwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEyMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTIwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEyMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTIyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2Rvd24KLWRkYWRkODEzMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKLWRkYWRkODEzMDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTMwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEzMDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTMwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEzMDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTMwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxMzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODEzMjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTMyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiB1cAotZGRhZGQ4MTQwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAotZGRhZGQ4MTQwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNDAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE0MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTQwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNDA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE0MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTQwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNDA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE0MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTQxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNDIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE0MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZGRhZGQ4MTUwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZAotZGRhZGQ4MTUwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE1MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTUwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE1MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTUwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE1MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTUxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTUyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGNlaWxpbmcKLWRkYWRkODE2MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKLWRkYWRkODE2MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTYwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNjAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE2MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTYwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNjA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE2MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTYwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNjA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE2MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTYyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNjIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZmxvb3IKLWRkYWRkODE3MDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQKLWRkYWRkODE3MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTcwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE3MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTcwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE3MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTcwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxNzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE3MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTcyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE3MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogMDV1cAotZGRhZGQ4MTgwMCBhZGQgIC4yMDAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMCAgUm91bmRlZAotZGRhZGQ4MTgwMSBhZGQgIC4yMDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxODAyIGFkZCAgLjIwMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE4MDMgYWRkICAuMjA1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTgwNCBhZGQgIC4yMDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxODA3IGFkZCAgLjIwNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE4MDggYWRkICAuMjA3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTgwOSBhZGQgIC4yMDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxODExIGFkZCAtLjIwOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE4MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxODIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDgxOTAwIGFkZCAgLjIxMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBSb3VuZGVkCi1kZGFkZDgxOTAxIGFkZCAgLjIxMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE5MDIgYWRkICAuMjExMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTkwMyBhZGQgIC4yMTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxOTA0IGFkZCAgLjIxNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE5MDcgYWRkICAuMjE2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MTkwOCBhZGQgIC4yMTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgxOTA5IGFkZCAgLjIxOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODE5MTEgYWRkIC0uMjE5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjEgIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDgyMDAwIGFkZCAgLjI0MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBSb3VuZGVkCi1kZGFkZDgyMDAxIGFkZCAgLjI0MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIwMDIgYWRkICAuMjQxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjAwMyBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMDA0IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIwMDcgYWRkICAuMjQ2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjAwOCBhZGQgIC4yNDcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMDA5IGFkZCAgLjI0OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIwMTEgYWRkIC0uMjQ5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDgyMTAwIGFkZCAgLjI1MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBSb3VuZGVkCi1kZGFkZDgyMTAxIGFkZCAgLjI1MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIxMDIgYWRkICAuMjUxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjEwMyBhZGQgIC4yNTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMTA0IGFkZCAgLjI1NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIxMDcgYWRkICAuMjU2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjEwOCBhZGQgIC4yNTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMTA5IGFkZCAgLjI1OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIxMTEgYWRkIC0uMjU5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDgyMjAwIGFkZCAgLjI2MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBSb3VuZGVkCi1kZGFkZDgyMjAxIGFkZCAgLjI2MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIyMDIgYWRkICAuMjYxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjIwMyBhZGQgIC4yNjUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMjA0IGFkZCAgLjI2NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIyMDcgYWRkICAuMjY2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjIwOCBhZGQgIC4yNjcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMjA5IGFkZCAgLjI2OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIyMTEgYWRkIC0uMjY5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZAotCi1kZGFkZDgyMzAwIGFkZCAgLjI5MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBSb3VuZGVkCi1kZGFkZDgyMzAxIGFkZCAgLjI5MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIzMDIgYWRkICAuMjkxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjMwMyBhZGQgIC4yOTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMzA0IGFkZCAgLjI5NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIzMDcgYWRkICAuMjk2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAotZGRhZGQ4MjMwOCBhZGQgIC4yOTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkCi1kZGFkZDgyMzA5IGFkZCAgLjI5OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRkYWRkODIzMTEgYWRkIC0uMjk5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjkgIEluZXhhY3QgUm91bmRlZAotCi0tLSBOdWxsIHRlc3RzCi1kZGFkZDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkQWRkLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGFkZGl0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCitkZGFkZDAwMSBhZGQgMSAgICAgICAxICAgICAgIC0+ICAyDQorZGRhZGQwMDIgYWRkIDIgICAgICAgMyAgICAgICAtPiAgNQ0KK2RkYWRkMDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCitkZGFkZDAwNCBhZGQgJzUnICAgICAnLTMnICAgIC0+ICAyDQorZGRhZGQwMDUgYWRkICctNScgICAgJy0zJyAgICAtPiAgLTgNCitkZGFkZDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQorZGRhZGQwMDcgYWRkICcwLjcnICAgJzAuMycgICAtPiAgMS4wDQorZGRhZGQwMDggYWRkICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KK2RkYWRkMDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCitkZGFkZDAxMCBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnDQorDQorLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGFkZDAxMSBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQwMTIgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitkZGFkZDAxMyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknDQorZGRhZGQwMTQgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDAxNSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5JyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMDE2IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQwMTcgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDAxOCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMDE5IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQwMjAgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDAyMSBhZGQgMCAxIC0+IDENCitkZGFkZDAyMiBhZGQgMSAxIC0+IDINCitkZGFkZDAyMyBhZGQgMiAxIC0+IDMNCitkZGFkZDAyNCBhZGQgMyAxIC0+IDQNCitkZGFkZDAyNSBhZGQgNCAxIC0+IDUNCitkZGFkZDAyNiBhZGQgNSAxIC0+IDYNCitkZGFkZDAyNyBhZGQgNiAxIC0+IDcNCitkZGFkZDAyOCBhZGQgNyAxIC0+IDgNCitkZGFkZDAyOSBhZGQgOCAxIC0+IDkNCitkZGFkZDAzMCBhZGQgOSAxIC0+IDEwDQorDQorLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQorZGRhZGQwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KK2RkYWRkMDMyIGFkZCAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCitkZGFkZDAzMyBhZGQgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQorZGRhZGQwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KKw0KK2RkYWRkMDM1IGFkZCAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMDM3IGFkZCAnNzAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMDM4IGFkZCAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQNCisNCistLSBzeW1tZXRyeToNCitkZGFkZDA0MCBhZGQgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQwNDEgYWRkICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDA0MiBhZGQgJzEwMDAwZSsxNicgICc3MDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDA0NCBhZGQgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQwNDUgYWRkICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQorDQorLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KK2RkYWRkMDQ2IGFkZCAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KK2RkYWRkMDQ3IGFkZCAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcNCitkZGFkZDA0OCBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KK2RkYWRkMDQ5IGFkZCAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KK2RkYWRkMDUwIGFkZCAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcNCitkZGFkZDA1MSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KK2RkYWRkMDUyIGFkZCAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KKw0KKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCitkZGFkZDA1MyBhZGQgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJw0KK2RkYWRkMDU0IGFkZCAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KK2RkYWRkMDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KK2RkYWRkMDU2IGFkZCAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycNCitkZGFkZDA1NyBhZGQgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCisNCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQorZGRhZGQwNjEgYWRkIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCitkZGFkZDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnDQorZGRhZGQwNjMgYWRkIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQorZGRhZGQwNjQgYWRkIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCitkZGFkZDA2NSBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnDQorDQorLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KK2RkYWRkMDcwIGFkZCAxICAwICAgIC0+IDENCitkZGFkZDA3MSBhZGQgMSAwLiAgICAtPiAxDQorZGRhZGQwNzIgYWRkIDEgIC4wICAgLT4gMS4wDQorZGRhZGQwNzMgYWRkIDEgMC4wICAgLT4gMS4wDQorZGRhZGQwNzQgYWRkIDEgMC4wMCAgLT4gMS4wMA0KK2RkYWRkMDc1IGFkZCAgMCAgMSAgIC0+IDENCitkZGFkZDA3NiBhZGQgMC4gIDEgICAtPiAxDQorZGRhZGQwNzcgYWRkICAuMCAxICAgLT4gMS4wDQorZGRhZGQwNzggYWRkIDAuMCAxICAgLT4gMS4wDQorZGRhZGQwNzkgYWRkIDAuMDAgMSAgLT4gMS4wMA0KKw0KKy0tIHNvbWUgY2Fycmllcw0KK2RkYWRkMDgwIGFkZCA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5DQorZGRhZGQwODEgYWRkIDk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwDQorZGRhZGQwODIgYWRkICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCitkZGFkZDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwDQorZGRhZGQwODQgYWRkICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwDQorZGRhZGQwODUgYWRkICAgICA5OTk5OSAxICAtPiAxMDAwMDANCitkZGFkZDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwDQorZGRhZGQwODcgYWRkICAgICAgIDk5OSAxICAtPiAxMDAwDQorZGRhZGQwODggYWRkICAgICAgICA5OSAxICAtPiAxMDANCitkZGFkZDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwDQorDQorDQorLS0gbW9yZSBMSFMgc3dhcHMNCitkZGFkZDA5MCBhZGQgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQorZGRhZGQwOTEgYWRkICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQorZGRhZGQwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycNCitkZGFkZDA5MyBhZGQgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQorZGRhZGQwOTQgYWRkICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KK2RkYWRkMDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycNCitkZGFkZDA5NiBhZGQgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQorZGRhZGQwOTcgYWRkICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQorZGRhZGQwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnDQorZGRhZGQwOTkgYWRkICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCitkZGFkZDEwMCBhZGQgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCitkZGFkZDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1Jw0KK2RkYWRkMTAyIGFkZCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCitkZGFkZDEwMyBhZGQgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQorZGRhZGQxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScNCitkZGFkZDEwNSBhZGQgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCitkZGFkZDEwNiBhZGQgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQorZGRhZGQxMDcgYWRkICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcNCitkZGFkZDEwOCBhZGQgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkDQorZGRhZGQxMDkgYWRkICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZA0KK2RkYWRkMTEwIGFkZCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQNCitkZGFkZDExMSBhZGQgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQorDQorLS0gbW9yZSBSSFMgc3dhcHMNCitkZGFkZDExMyBhZGQgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCitkZGFkZDExNCBhZGQgMCAgJy01NjI2N0UtNicgIC0+ICAnLTAuMDU2MjY3Jw0KK2RkYWRkMTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycNCitkZGFkZDExNyBhZGQgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCitkZGFkZDExOSBhZGQgMCAgJy01NjI2N0UtMycgIC0+ICAnLTU2LjI2NycNCitkZGFkZDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycNCitkZGFkZDEyMSBhZGQgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCitkZGFkZDEyMiBhZGQgMCAgJy01NjI2N0UtMCcgIC0+ICAnLTU2MjY3Jw0KK2RkYWRkMTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnDQorZGRhZGQxMjQgYWRkIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KK2RkYWRkMTI1IGFkZCAwICAnLTVFLTYnICAgICAgLT4gICctMC4wMDAwMDUnDQorZGRhZGQxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1Jw0KK2RkYWRkMTI3IGFkZCAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KK2RkYWRkMTI4IGFkZCAwICAnLTVFLTEnICAgICAgLT4gICctMC41Jw0KK2RkYWRkMTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScNCitkZGFkZDEzMCBhZGQgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KK2RkYWRkMTMxIGFkZCAwICAnLTVFNScgICAgICAgLT4gICctNTAwMDAwJw0KK2RkYWRkMTMyIGFkZCAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcNCitkZGFkZDEzMyBhZGQgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkDQorZGRhZGQxMzQgYWRkIDAgICctNUUxNycgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZA0KK2RkYWRkMTM1IGFkZCAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQNCitkZGFkZDEzNiBhZGQgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQorDQorLS0gcmVsYXRlZA0KK2RkYWRkMTM3IGFkZCAgMSAgJzBFLTE5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQorZGRhZGQxMzggYWRkIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitkZGFkZDEzOSBhZGQgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KK2RkYWRkMTQwIGFkZCAnMEUtMTknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZGRhZGQxNDEgYWRkIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcNCitkZGFkZDE0MiBhZGQgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KK2RkYWRkMTQzIGFkZCAwLjAwMCAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnDQorZGRhZGQxNDQgYWRkIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQNCisNCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQ0KK2RkYWRkMTQ2IGFkZCAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQorZGRhZGQxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnDQorZGRhZGQxNDggYWRkICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnDQorZGRhZGQxNDkgYWRkICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCitkZGFkZDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcNCitkZGFkZDE1MSBhZGQgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcNCitkZGFkZDE1MiBhZGQgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KK2RkYWRkMTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnDQorZGRhZGQxNTQgYWRkICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycNCitkZGFkZDE1NSBhZGQgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCitkZGFkZDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicNCitkZGFkZDE1NyBhZGQgJzMnICAgICAnKzMnICAgIC0+ICAnNicNCitkZGFkZDE1OCBhZGQgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCitkZGFkZDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJw0KK2RkYWRkMTYwIGFkZCAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJw0KKw0KKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuDQorZGRhZGQxNjEgYWRkICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KK2RkYWRkMTYyIGFkZCAnMUUrMTInICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQorZGRhZGQxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCitkZGFkZDE2NCBhZGQgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQorZGRhZGQxNjUgYWRkICc3RSsxMicgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OScNCitkZGFkZDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KK2RkYWRkMTY3IGFkZCAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQorZGRhZGQxNjggYWRkICctMScgICAgJzdFKzEyJyAtPiAnNjk5OTk5OTk5OTk5OScNCisNCityb3VuZGluZzogaGFsZl91cA0KKy0tICAgICAgICAgICAxLjIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYWRkMTcwIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY3JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTcyIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTczIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY0JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTc1IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTc2IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCitkZGFkZDE3OCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDE3OSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0NCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDE4MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDE4MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQorDQorLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZGRhZGQyMDAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KK2RkYWRkMjAxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMDIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIwMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjA0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMDUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIwNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjA3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMDggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIwOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjEwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMTEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIxMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjEzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMTQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIxNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjE2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCitkZGFkZDIxNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjE4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMTkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZGRhZGQyMjAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KK2RkYWRkMjIxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMjIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIyMyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjI0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMjUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIyNiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjI3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMjggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIyOSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjMwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMzEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIzMiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjMzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMzQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDIzNSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjM2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCitkZGFkZDIzNyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjM4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyMzkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KK2RkYWRkMjQwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNDEgYWRkICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI0MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBkb3duDQorZGRhZGQyNTAgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KK2RkYWRkMjUxIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNTIgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI1MyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjU0IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNTUgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI1NiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjU3IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNTggYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI1OSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjYwIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNjEgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI2MiBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjYzIGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNjQgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDI2NSBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjY2IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCitkZGFkZDI2NyBhZGQgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMjY4IGFkZCAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQyNjkgYWRkICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCityb3VuZGluZzogaGFsZl91cA0KK2RkYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwDQorZGRhZGQzMDIgYWRkICAgMCAgIDEgICAgICAtPiAgIDENCitkZGFkZDMwMyBhZGQgICAxICAgMSAgICAgIC0+ICAgMg0KK2RkYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzDQorZGRhZGQzMDUgYWRkICA5OCAgIDEgICAgICAtPiAgOTkNCitkZGFkZDMwNiBhZGQgIDk5ICAgMSAgICAgIC0+IDEwMA0KK2RkYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxDQorZGRhZGQzMDggYWRkIDEwMSAgIDEgICAgICAtPiAxMDINCitkZGFkZDMwOSBhZGQgIC0xICAtMSAgICAgIC0+ICAtMg0KK2RkYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xDQorZGRhZGQzMTEgYWRkICAgMSAgLTEgICAgICAtPiAgIDANCitkZGFkZDMxMiBhZGQgIDEyICAtMSAgICAgIC0+ICAxMQ0KK2RkYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3DQorZGRhZGQzMTQgYWRkICA5OSAgLTEgICAgICAtPiAgOTgNCitkZGFkZDMxNSBhZGQgMTAwICAtMSAgICAgIC0+ICA5OQ0KK2RkYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwDQorDQorZGRhZGQzMjEgYWRkIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwDQorZGRhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQorZGRhZGQzMjMgYWRkICAwLjAxICAwLjAxICAgIC0+ICAwLjAyDQorZGRhZGQzMjQgYWRkICAwLjEyICAwLjAxICAgIC0+ICAwLjEzDQorZGRhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQorZGRhZGQzMjYgYWRkICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwDQorZGRhZGQzMjcgYWRkICAxLjAwICAwLjAxICAgIC0+ICAxLjAxDQorZGRhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQorZGRhZGQzMjkgYWRkIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyDQorZGRhZGQzMzAgYWRkICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxDQorZGRhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQorZGRhZGQzMzIgYWRkICAwLjEyIC0wLjAxICAgIC0+ICAwLjExDQorZGRhZGQzMzMgYWRkICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3DQorZGRhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQorZGRhZGQzMzUgYWRkICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5DQorZGRhZGQzMzYgYWRkICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwDQorDQorLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQorZGRhZGQzNDAgYWRkIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCitkZGFkZDM0MSBhZGQgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDANCitkZGFkZDM0MiBhZGQgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQorZGRhZGQzNDMgYWRkIDFFKzIwICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCitkZGFkZDM0NCBhZGQgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KK2RkYWRkMzQ1IGFkZCAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQ0KK2RkYWRkMzQ2IGFkZCAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMzQ3IGFkZCAxRSsyMCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkMzQ4IGFkZCAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQorZGRhZGQzNDkgYWRkIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3DQorZGRhZGQzNTAgYWRkIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQzNTEgYWRkIDFFKzIwICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCityb3VuZGluZzogICAgaGFsZl91cA0KK2RkYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KK2RkYWRkMzYxICBhZGQgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQNCitkZGFkZDM2MiAgYWRkIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkDQorZGRhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkMzY0ICBhZGQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwRSszNjkNCisNCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KK2RkYWRkMzcwIGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0DQorZGRhZGQzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogICAgaGFsZl91cA0KK2RkYWRkMzcyIGFkZCAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0DQorZGRhZGQzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorZGRhZGQzNzQgYWRkICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCitkZGFkZDM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwODFFKzE2IFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIG9wZXJhbmRzIGZvbGRlZA0KK2RkYWRkMzgwIGFkZCAgIDFFKzM4NCAgMUUrMzg0ICAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KK2RkYWRkMzgxIGFkZCAgIDFFKzM4MCAgMUUrMzgwICAtPiAgMi4wMDAwMDAwMDAwMEUrMzgwICAgICAgQ2xhbXBlZA0KK2RkYWRkMzgyIGFkZCAgIDFFKzM3NiAgMUUrMzc2ICAtPiAgMi4wMDAwMDAwRSszNzYgICAgICAgICAgQ2xhbXBlZA0KK2RkYWRkMzgzIGFkZCAgIDFFKzM3MiAgMUUrMzcyICAtPiAgMi4wMDBFKzM3MiAgICAgICAgICAgICAgQ2xhbXBlZA0KK2RkYWRkMzg0IGFkZCAgIDFFKzM3MCAgMUUrMzcwICAtPiAgMi4wRSszNzAgICAgICAgICAgICAgICAgQ2xhbXBlZA0KK2RkYWRkMzg1IGFkZCAgIDFFKzM2OSAgMUUrMzY5ICAtPiAgMkUrMzY5DQorZGRhZGQzODYgYWRkICAgMUUrMzY4ICAxRSszNjggIC0+ICAyRSszNjgNCisNCistLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMNCitkZGFkZDQwMCBhZGQgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCitkZGFkZDQwMSBhZGQgICAxICAgNzdlLTE1ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQorZGRhZGQ0MDIgYWRkICAgMSAgIDc3ZS0xNiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQwMyBhZGQgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDA0IGFkZCAgIDEgICA3N2UtMTggICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MDUgYWRkICAgMSAgIDc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQwNiBhZGQgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkNDEwIGFkZCAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCitkZGFkZDQxMSBhZGQgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDEyIGFkZCAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MTMgYWRkICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQxNCBhZGQgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDE1IGFkZCAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MTYgYWRkICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDQyMCBhZGQgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCitkZGFkZDQyMSBhZGQgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQorZGRhZGQ0MjIgYWRkICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQyMyBhZGQgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDI0IGFkZCAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MjUgYWRkICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQyNiBhZGQgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkNDMwIGFkZCAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCitkZGFkZDQzMSBhZGQgIDc3ZS0xNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDMyIGFkZCAgNzdlLTE2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MzMgYWRkICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDQzNCBhZGQgIDc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNDM1IGFkZCAgNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ0MzYgYWRkICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBmYXN0cGF0aCBib3VuZGFyeSAobW9yZSBpbiBkcWFkZCkNCistLSAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGFkZDUzOSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnDQorZGRhZGQ1NDAgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc4ODg4ODg4ODg4ODg4ODg4Jw0KK2RkYWRkNTQxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCitkZGFkZDU0MiBhZGQgJzMzMzMzMzMzMzMzMzMzMzMnICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgLT4gJzc3Nzc3Nzc3Nzc3Nzc3NzcnDQorZGRhZGQ1NDMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIC0+ICc4ODg4ODg4ODg4ODg4ODg4Jw0KK2RkYWRkNTQ0IGFkZCAnNTU1NTU1NTU1NTU1NTU1NScgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCitkZGFkZDU0NSBhZGQgJzMwMDAwMDQwMDAwMDAwMDAnICAnMzAwMDAwMDAwMDAwMDA0MCcgLT4gJzYwMDAwMDQwMDAwMDAwNDAnDQorZGRhZGQ1NDYgYWRkICczMDAwMDAwNDAwMDAwMDAwJyAgJzQwMDAwMDAwMDAwMDA0MDAnIC0+ICc3MDAwMDAwNDAwMDAwNDAwJw0KK2RkYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMCcNCitkZGFkZDU0OCBhZGQgJzQwMDAwMDAwMDQwMDAwMDAnICAnMzAwMDAwMDAwMDA0MDAwMCcgLT4gJzcwMDAwMDAwMDQwNDAwMDAnDQorZGRhZGQ1NDkgYWRkICc0MDAwMDAwMDAwNDAwMDAwJyAgJzQwMDAwMDAwMDA0MDAwMDAnIC0+ICc4MDAwMDAwMDAwODAwMDAwJw0KK2RkYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMCcNCitkZGFkZDU1MSBhZGQgJzUwMDAwMDAwMDAwMDQwMDAnICAnMzAwMDAwMDA0MDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAnDQorZGRhZGQ1NTIgYWRkICc1MDAwMDAwMDAwMDAwNDAwJyAgJzQwMDAwMDA0MDAwMDAwMDAnIC0+ICc5MDAwMDAwNDAwMDAwNDAwJw0KK2RkYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MCcgICc1MDAwMDA0MDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNEUrMTYgUm91bmRlZA0KKy0tIGNoZWNrIHByb3BhZ2F0aW9uDQorZGRhZGQ1NTQgYWRkICc4OTk5OTk5OTk5OTk5OTk5JyAgJzAwMDAwMDAwMDAwMDAwMDEnIC0+IDkwMDAwMDAwMDAwMDAwMDANCitkZGFkZDU1NSBhZGQgJzAwMDAwMDAwMDAwMDAwMDEnICAnODk5OTk5OTk5OTk5OTk5OScgLT4gOTAwMDAwMDAwMDAwMDAwMA0KK2RkYWRkNTU2IGFkZCAnMDk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAxJyAtPiAxMDAwMDAwMDAwMDAwMDAwDQorZGRhZGQ1NTcgYWRkICcwMDAwMDAwMDAwMDAwMDAxJyAgJzA5OTk5OTk5OTk5OTk5OTknIC0+IDEwMDAwMDAwMDAwMDAwMDANCitkZGFkZDU1OCBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NicgLT4gOTAwMDAwMDAwMDAwMDAwMA0KK2RkYWRkNTU5IGFkZCAnNDU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiA5MDAwMDAwMDAwMDAwMDAwDQorDQorLS0gbmVnYXRpdmUgdWxwcw0KK2RkYWRkNjQ0MCBhZGQgICAxICAgLTc3ZS0xNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDQxIGFkZCAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDQyIGFkZCAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjQ0MyBhZGQgICAxICAgLTc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDQ0IGFkZCAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0NDUgYWRkICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDQ2IGFkZCAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkNjQ1MCBhZGQgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjQ1MSBhZGQgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCitkZGFkZDY0NTIgYWRkICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ1MyBhZGQgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDU0IGFkZCAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ1NSBhZGQgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0NTYgYWRkICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ2NDYwIGFkZCAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCitkZGFkZDY0NjEgYWRkICAtNzdlLTE1ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMNCitkZGFkZDY0NjIgYWRkICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDYzIGFkZCAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0NjQgYWRkICAtNzdlLTE4ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ2NSBhZGQgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0NjYgYWRkICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ2NDcwIGFkZCAgLTc3ZS0xNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDcxIGFkZCAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjQ3MiBhZGQgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDczIGFkZCAgLTc3ZS0xNyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0NzQgYWRkICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDc1IGFkZCAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ3NiBhZGQgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBuZWdhdGl2ZSB1bHBzDQorZGRhZGQ2NDgwIGFkZCAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDgxIGFkZCAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjQ4MiBhZGQgIC0xICAgIDc3ZS0xNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NDgzIGFkZCAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDg0IGFkZCAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDg1IGFkZCAgLTEgICAgNzdlLTE5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0ODYgYWRkICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkNjQ5MCBhZGQgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMNCitkZGFkZDY0OTEgYWRkIC0xMCAgICA3N2UtMTUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjQ5MiBhZGQgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ5MyBhZGQgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjQ5NCBhZGQgLTEwICAgIDc3ZS0xOCAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NDk1IGFkZCAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY0OTYgYWRkIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkNjUwMCBhZGQgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjUwMSBhZGQgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMNCitkZGFkZDY1MDIgYWRkICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KK2RkYWRkNjUwMyBhZGQgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjUwNCBhZGQgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjUwNSBhZGQgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDY1MTAgYWRkICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzDQorZGRhZGQ2NTExIGFkZCAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCitkZGFkZDY1MTIgYWRkICAgNzdlLTE2ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1MTMgYWRkICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1MTQgYWRkICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjUxNSBhZGQgICA3N2UtMTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NTE2IGFkZCAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZGRhZGQ2NTQwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScNCitkZGFkZDY1NDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NDkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTEgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTIgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTMgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTQgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTUgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDY1NTYgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KK2RkYWRkNjU1NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU1OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU1OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkZGFkZDY1NjAgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KK2RkYWRkNjU2MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2NyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2OCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU2OSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3MSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3MiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3MyBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3NCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3NSBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNjU3NiBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnDQorZGRhZGQ2NTc3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NTc4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ2NTc5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCitkZGFkZDc1NDAgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc1NDEgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc1NDIgYWRkICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2RkYWRkNzU1MCBhZGQgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQorZGRhZGQ3NTUxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTUyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTUzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU3IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU4IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTU5IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTYwIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTYxIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTYyIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTYzIGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTY0IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTY1IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTY2IGFkZCAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCitkZGFkZDc1NjcgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc1NjggYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc1NjkgYWRkICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB2ZXJpZnkgYSBxdWVyeQ0KK3JvdW5kaW5nOiAgICAgZG93bg0KK2RkYWRkNzY2MSBhZGQgMWUtMzk4IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc2NjIgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZA0KK2RkYWRkNzY2MyBhZGQgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc2NjQgYWRkICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KKw0KKy0tIG1vcmUgemVyb3MsIGV0Yy4NCityb3VuZGluZzogaGFsZl9ldmVuDQorDQorZGRhZGQ3NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMA0KK2RkYWRkNzcwMiBhZGQgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQorZGRhZGQ3NzAzIGFkZCAwMC4wMCAwRS0zICAgLT4gMC4wMDANCitkZGFkZDc3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMA0KKw0KK2RkYWRkNzcxMCBhZGQgMEUrMyAgMDAuMDAgIC0+IDAuMDANCitkZGFkZDc3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjANCitkZGFkZDc3MTIgYWRkIDBFKzMgIDAwLiAgICAtPiAwDQorZGRhZGQ3NzEzIGFkZCAwRSszICAwMC5FKzEgLT4gMEUrMQ0KK2RkYWRkNzcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzINCitkZGFkZDc3MTUgYWRkIDBFKzMgIDAwLkUrMyAtPiAwRSszDQorZGRhZGQ3NzE2IGFkZCAwRSszICAwMC5FKzQgLT4gMEUrMw0KK2RkYWRkNzcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCitkZGFkZDc3MTggYWRkIDBFKzMgIC0wMC4wICAgLT4gMC4wDQorZGRhZGQ3NzE5IGFkZCAwRSszICAtMDAuICAgIC0+IDANCitkZGFkZDc3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KKw0KK2RkYWRkNzcyMCBhZGQgMDAuMDAgIDBFKzMgIC0+IDAuMDANCitkZGFkZDc3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjANCitkZGFkZDc3MjIgYWRkIDAwLiAgICAwRSszICAtPiAwDQorZGRhZGQ3NzIzIGFkZCAwMC5FKzEgMEUrMyAgLT4gMEUrMQ0KK2RkYWRkNzcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzINCitkZGFkZDc3MjUgYWRkIDAwLkUrMyAwRSszICAtPiAwRSszDQorZGRhZGQ3NzI2IGFkZCAwMC5FKzQgMEUrMyAgLT4gMEUrMw0KK2RkYWRkNzcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCitkZGFkZDc3MjggYWRkIC0wMC4wMCAwRSszICAtPiAwLjAwDQorZGRhZGQ3NzI5IGFkZCAtMDAuMCAgMEUrMyAgLT4gMC4wDQorZGRhZGQ3NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMA0KKw0KK2RkYWRkNzczMiBhZGQgIDAgICAgIDAgICAgIC0+ICAwDQorZGRhZGQ3NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDANCitkZGFkZDc3MzQgYWRkIC0wICAgICAwICAgICAtPiAgMA0KK2RkYWRkNzczNSBhZGQgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCisNCitkZGFkZDc3MzYgYWRkICAxICAgIC0xICAgICAtPiAgMA0KK2RkYWRkNzczNyBhZGQgLTEgICAgLTEgICAgIC0+IC0yDQorZGRhZGQ3NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDINCitkZGFkZDc3MzkgYWRkIC0xICAgICAxICAgICAtPiAgMA0KKw0KK2RkYWRkNzc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xDQorZGRhZGQ3NzQyIGFkZCAtMCAgICAtMSAgICAgLT4gLTENCitkZGFkZDc3NDMgYWRkICAwICAgICAxICAgICAtPiAgMQ0KK2RkYWRkNzc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxDQorZGRhZGQ3NzQ1IGFkZCAtMSAgICAgMCAgICAgLT4gLTENCitkZGFkZDc3NDYgYWRkIC0xICAgIC0wICAgICAtPiAtMQ0KK2RkYWRkNzc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxDQorZGRhZGQ3NzQ4IGFkZCAgMSAgICAtMCAgICAgLT4gIDENCisNCitkZGFkZDc3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wDQorZGRhZGQ3NzUyIGFkZCAtMC4wICAtMSAgICAgLT4gLTEuMA0KK2RkYWRkNzc1MyBhZGQgIDAuMCAgIDEgICAgIC0+ICAxLjANCitkZGFkZDc3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wDQorZGRhZGQ3NzU1IGFkZCAtMS4wICAgMCAgICAgLT4gLTEuMA0KK2RkYWRkNzc1NiBhZGQgLTEuMCAgLTAgICAgIC0+IC0xLjANCitkZGFkZDc3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wDQorZGRhZGQ3NzU4IGFkZCAgMS4wICAtMCAgICAgLT4gIDEuMA0KKw0KK2RkYWRkNzc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjANCitkZGFkZDc3NjIgYWRkIC0wICAgIC0xLjAgICAtPiAtMS4wDQorZGRhZGQ3NzYzIGFkZCAgMCAgICAgMS4wICAgLT4gIDEuMA0KK2RkYWRkNzc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjANCitkZGFkZDc3NjUgYWRkIC0xICAgICAwLjAgICAtPiAtMS4wDQorZGRhZGQ3NzY2IGFkZCAtMSAgICAtMC4wICAgLT4gLTEuMA0KK2RkYWRkNzc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjANCitkZGFkZDc3NjggYWRkICAxICAgIC0wLjAgICAtPiAgMS4wDQorDQorZGRhZGQ3NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMA0KK2RkYWRkNzc3MiBhZGQgLTAuMCAgLTEuMCAgIC0+IC0xLjANCitkZGFkZDc3NzMgYWRkICAwLjAgICAxLjAgICAtPiAgMS4wDQorZGRhZGQ3Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMA0KK2RkYWRkNzc3NSBhZGQgLTEuMCAgIDAuMCAgIC0+IC0xLjANCitkZGFkZDc3NzYgYWRkIC0xLjAgIC0wLjAgICAtPiAtMS4wDQorZGRhZGQ3Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMA0KK2RkYWRkNzc3OCBhZGQgIDEuMCAgLTAuMCAgIC0+ICAxLjANCisNCistLSBTcGVjaWFscw0KK2RkYWRkNzc4MCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4MSBhZGQgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4MyBhZGQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4NCBhZGQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4NiBhZGQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4NyBhZGQgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc4OSBhZGQgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc5MCBhZGQgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc5MiBhZGQgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc5MyBhZGQgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkYWRkNzc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRhZGQ3ODAwIGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDIgYWRkICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDMgYWRkICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDUgYWRkICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDYgYWRkICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDggYWRkIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkZGFkZDc4MDkgYWRkIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkYWRkNzgxMSBhZGQgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkYWRkNzgxMiBhZGQgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkYWRkNzgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkYWRkNzgxNCBhZGQgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkYWRkNzgxNSBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RkYWRkNzgyMSBhZGQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZGFkZDc4MjIgYWRkICBOYU4gLTEwMDAgICAtPiAgTmFODQorZGRhZGQ3ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2RkYWRkNzgyNCBhZGQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZGFkZDc4MjUgYWRkICBOYU4gIDAgICAgICAtPiAgTmFODQorZGRhZGQ3ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTg0KK2RkYWRkNzgyNyBhZGQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZGFkZDc4MjggYWRkICBOYU4gIEluZiAgICAtPiAgTmFODQorZGRhZGQ3ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RkYWRkNzgzMCBhZGQgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZGFkZDc4MzEgYWRkIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZGRhZGQ3ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkYWRkNzgzMyBhZGQgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZGFkZDc4MzQgYWRkICAwICAgIE5hTiAgICAtPiAgTmFODQorZGRhZGQ3ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkYWRkNzgzNiBhZGQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGFkZDc4MzcgYWRkICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorZGRhZGQ3ODQxIGFkZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NDIgYWRkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODQ0IGFkZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NDUgYWRkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODQ3IGFkZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NDggYWRkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODUwIGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NTEgYWRkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODUzIGFkZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NTQgYWRkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODU2IGFkZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NTcgYWRkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODU5IGFkZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRhZGQ3ODYxIGFkZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCitkZGFkZDc4NjIgYWRkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KK2RkYWRkNzg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorZGRhZGQ3ODY0IGFkZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCitkZGFkZDc4NjUgYWRkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KK2RkYWRkNzg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorZGRhZGQ3ODY3IGFkZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCitkZGFkZDc4NjggYWRkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KK2RkYWRkNzg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK2RkYWRkNzg3MSBhZGQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NzIgYWRkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg3NCBhZGQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NzUgYWRkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg3NyBhZGQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4NzggYWRkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg4MCBhZGQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFkZDc4ODEgYWRkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ3ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorZGRhZGQ3ODgzIGFkZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYWRkNzg4NCBhZGQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KK2RkYWRkNzg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbg0KK2RkYWRkNzU3NSBhZGQgIDFFLTM4MyAtMUUtMzk4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KK2RkYWRkNzU3NiBhZGQgLTFFLTM4MyArMUUtMzk4IC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KKw0KKy0tIGFuZCBhbm90aGVyIGN1cmlvdXMgY2FzZQ0KK2RkYWRkNzU3NyBhZGQgNy4wMDAwMDAwMDAwMDBFLTM4NSAtMS4wMDAwMEUtMzkxIC0+IDYuOTk5OTk5MDAwMDAwRS0zODUgU3Vibm9ybWFsDQorDQorLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlDQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZGRhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZGFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5NzQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3OTc3IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOEUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3OTgwIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3OTgyIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzk4MyBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDJFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ3OTg1IGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzk4NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5ODggYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTAgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTEgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTMgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTQgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3OTk2IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDc5OTcgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cw0KK3JvdW5kaW5nOiAgICAgZG93bg0KK2RkYWRkNzExMDAgYWRkIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTAxIGFkZCAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkNzExMDMgYWRkICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkNzExMDQgYWRkIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTA1IGFkZCAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkNzExMDYgYWRkIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkNzExMDcgYWRkIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTA4IGFkZCAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkYWRkNzExMDkgYWRkIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQorDQorcm91bmRpbmc6ICAgICBjZWlsaW5nDQorZGRhZGQ3MTExMCBhZGQgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTExIGFkZCAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTEzIGFkZCAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRhZGQ3MTExNCBhZGQgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTE1IGFkZCAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTE2IGFkZCAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRhZGQ3MTExNyBhZGQgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTE4IGFkZCAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGFkZDcxMTE5IGFkZCAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCisNCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KK3JvdW5kaW5nOiAgICAgaGFsZl9ldmVuDQorDQorZGRhZGQ3MTMwMCBhZGQgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzEwIGFkZCAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMTEgYWRkIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMxMiBhZGQgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzEzIGFkZCAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMTQgYWRkIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMxNSBhZGQgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzE2IGFkZCAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMTcgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMxOCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzE5IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMjAgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMyMSBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzIyIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMjMgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMyNCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzI1IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMjYgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMyNyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzI4IGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMjkgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMzMCBhZGQgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzMxIGFkZCAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMzIgYWRkIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMzMyBhZGQgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzM0IGFkZCAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMzUgYWRkIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMzNiBhZGQgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxMzM3IGFkZCAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzMzggYWRkIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTMzOSBhZGQgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDcxMzQwIGFkZCAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzEzNDEgYWRkIDFFMTYgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ3MTM0OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM3OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4OCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM4OSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5MSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5MiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5NCBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5NSBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQorZGRhZGQ3MTQyMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQyMSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQyMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQyNCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQyNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQyNyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQorZGRhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQorZGRhZGQ3MTQyOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05DQorZGRhZGQ3MTQzMCBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KK2RkYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCitkZGFkZDcxNDMyIGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyDQorZGRhZGQ3MTQzMyBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KK2RkYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCitkZGFkZDcxNDM1IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1DQorZGRhZGQ3MTQzNiBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KK2RkYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCitkZGFkZDcxNDM4IGFkZCAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4DQorZGRhZGQ3MTQzOSBhZGQgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KKw0KKy0tIHNhbWUsIHJldmVyc2VkIDANCitkZGFkZDcxNDQwIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NDEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NDIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDQzIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NDQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NDUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDQ2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NDcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQorZGRhZGQ3MTQ0OCBhZGQgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCitkZGFkZDcxNDQ5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2RkYWRkNzE0NTAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KK2RkYWRkNzE0NTEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KK2RkYWRkNzE0NTIgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2RkYWRkNzE0NTMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KK2RkYWRkNzE0NTQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KK2RkYWRkNzE0NTUgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2RkYWRkNzE0NTYgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KK2RkYWRkNzE0NTcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KK2RkYWRkNzE0NTggYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2RkYWRkNzE0NTkgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KKw0KKy0tIHNhbWUsIEVzIG9uIHRoZSAwDQorZGRhZGQ3MTQ2MCBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDYyIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQ2MyBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDY1IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQ2NiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDY4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQ2OSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDcxIGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQ3MiBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGFkZDcxNDc0IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZGRhZGQ3MTQ3NSBhZGQgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCitkZGFkZDcxNDc2IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkZGFkZDcxNDc3IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkZGFkZDcxNDc4IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkZGFkZDcxNDc5IGFkZCAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCisNCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkYWRkNzE1MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTUwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNTAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE1MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkZGFkZDcxNTExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RkYWRkNzE1MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkZGFkZDcxNTIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE1MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTUyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNTIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZGRhZGQ3MTUzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCitkZGFkZDcxNTMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZGRhZGQ3MTU0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNTQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE1NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTU0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RkYWRkNzE1NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQorZGRhZGQ3MTU1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgdXANCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZGRhZGQ3MTU2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNTYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE1NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTU2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RkYWRkNzE1NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQorZGRhZGQ3MTU3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkZGFkZDcxNTgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE1ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTU4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNTgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZGRhZGQ3MTU5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCitkZGFkZDcxNTkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBjZWlsaW5nDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGFkZDcxNjAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RkYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkZGFkZDcxNjExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RkYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQorcm91bmRpbmc6ICAgIGZsb29yDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkYWRkNzE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRhZGQ3MTYyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCitkZGFkZDcxNjIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KK2RkYWRkNzE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkZGFkZDcxNjMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KK2RkYWRkNzE2MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQorDQorLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQorZGRhZGQ3MTcwMSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQorZGRhZGQ3MTcwMiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQorZGRhZGQ3MTcwMyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQorZGRhZGQ3MTcwNCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQorZGRhZGQ3MTcwNSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwDQorZGRhZGQ3MTcwNiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwDQorZGRhZGQ3MTcwNyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQorZGRhZGQ3MTcwOCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszDQorDQorLS0gcXVlcnkgZnJvbSBWaW5jZW50IEt1bGFuZGFpc2FteQ0KK3JvdW5kaW5nOiBjZWlsaW5nDQorZGRhZGQ3MTgwMSAgYWRkICA3Ljg4MjI3NzM4MDU4NjJFKzI3NyAgICAtNS4xNzU3NTAzODIwNjYzRS0yMSAtPiA3Ljg4MjI3NzM4MDU4NjIwMEUrMjc3IEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzE4MDIgIGFkZCAgNy44ODIyNzczODA1ODYyMDBFKzI3NyAgMTIuMzQxICAgICAgICAgICAgICAgLT4gNy44ODIyNzczODA1ODYyMDFFKzI3NyBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxODAzICBhZGQgIDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgIDIuNzI3MDU0NTA0NjYxM0UtMzEgIC0+IDcuODgyMjc3MzgwNTg2MjAyRSsyNzcgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ3MTgxMSAgYWRkICAgICAgICAgICAgICAgICAgIDEyLjM0MSAtNS4xNzU3NTAzODIwNjYzRS0yMSAtPiAxMi4zNDEwMDAwMDAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkNzE4MTIgIGFkZCAgICAgICAgMTIuMzQxMDAwMDAwMDAwMDAgMi43MjcwNTQ1MDQ2NjEzRS0zMSAgLT4gMTIuMzQxMDAwMDAwMDAwMDEgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDcxODEzICBhZGQgICAgICAgIDEyLjM0MTAwMDAwMDAwMDAxIDcuODgyMjc3MzgwNTg2MkUrMjc3IC0+IDcuODgyMjc3MzgwNTg2MjAxRSsyNzcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitkZGFkZDc1MDAxIGFkZCAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3DQorZGRhZGQ3NTAwMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAwOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxMiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxMyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxNCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxNSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxNiBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxNyBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxOCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAxOSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAyMCBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTAyMSBhZGQgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KK2RkYWRkNzUwMzAgYWRkIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5DQorZGRhZGQ3NTAzMSBhZGQgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQ0KK2RkYWRkNzUwMzIgYWRkIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyDQorZGRhZGQ3NTAzMyBhZGQgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzDQorZGRhZGQ3NTAzNCBhZGQgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNA0KK2RkYWRkNzUwMzUgYWRkIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1DQorZGRhZGQ3NTAzNiBhZGQgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2DQorZGRhZGQ3NTAzNyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2Nw0KK2RkYWRkNzUwMzggYWRkIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4DQorZGRhZGQ3NTAzOSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0MCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0MSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0MiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0MyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0NCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0NSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0NiBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0NyBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0OCBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA0OSBhZGQgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCityb3VuZGluZzogaGFsZl9ldmVuDQorZGRhZGQ3NTA1MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA1NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2MCBhZGQgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2MSBhZGQgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2MiBhZGQgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2MyBhZGQgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2NCBhZGQgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2NSBhZGQgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2NiBhZGQgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA2NyBhZGQgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KK3JvdW5kaW5nOiB1cA0KK2RkYWRkNzUwNzAgYWRkIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxDQorZGRhZGQ3NTA3MSBhZGQgMTIzNDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3MiBhZGQgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3MyBhZGQgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3NCBhZGQgMTIzNDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3NSBhZGQgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3NiBhZGQgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3NyBhZGQgMTIzNDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3OCBhZGQgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA3OSBhZGQgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4MCBhZGQgMTIzNDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4MSBhZGQgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4MiBhZGQgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4MyBhZGQgMTIzNDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4NCBhZGQgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4NSBhZGQgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4NiBhZGQgMTIzNDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4NyBhZGQgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4OCBhZGQgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ3NTA4OSBhZGQgMTIzNDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gUHVuaXQncw0KK2RkYWRkNzUxMDAgYWRkIDEuMDAwIC0yMDAuMDAwICAgICAgICAgICAgICAgICAgIC0+IC0xOTkuMDAwDQorDQorLS0gUm91bmRpbmcgc3dhdGhlDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RkYWRkODExMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCitkZGFkZDgxMTAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMTIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTEyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfdXANCitkZGFkZDgxMjAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQorZGRhZGQ4MTIwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTIyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZG93bg0KK2RkYWRkODEzMDAgYWRkICAuMjMwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIFJvdW5kZWQNCitkZGFkZDgxMzAxIGFkZCAgLjIzMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzAyIGFkZCAgLjIzMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzAzIGFkZCAgLjIzNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA0IGFkZCAgLjIzNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA1IGFkZCAgLjI0NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA2IGFkZCAgLjI0NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA3IGFkZCAgLjIzNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA4IGFkZCAgLjIzNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzA5IGFkZCAgLjIzOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzIwIGFkZCAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjkgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxMzIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogdXANCitkZGFkZDgxNDAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQorZGRhZGQ4MTQwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTQyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkZGFkZDgxNTAwIGFkZCAgLjIzMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIzICBSb3VuZGVkDQorZGRhZGQ4MTUwMSBhZGQgIC4yMzAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwMiBhZGQgIC4yMzEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwMyBhZGQgIC4yMzUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwNCBhZGQgIC4yMzUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwNSBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwNiBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwNyBhZGQgIC4yMzYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwOCBhZGQgIC4yMzcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUwOSBhZGQgIC4yMzk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUxMSBhZGQgLS4yMzk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTUyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxNTIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBjZWlsaW5nDQorZGRhZGQ4MTYwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KK2RkYWRkODE2MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjUgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE2MjEgYWRkIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTlFKzM2OSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGZsb29yDQorZGRhZGQ4MTcwMCBhZGQgIC4yMzAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMyAgUm91bmRlZA0KK2RkYWRkODE3MDEgYWRkICAuMjMwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDIgYWRkICAuMjMxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDMgYWRkICAuMjM1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDQgYWRkICAuMjM1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDUgYWRkICAuMjQ1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDYgYWRkICAuMjQ1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDcgYWRkICAuMjM2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDggYWRkICAuMjM3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MDkgYWRkICAuMjM5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MTEgYWRkIC0uMjM5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODE3MjAgYWRkICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTcyMSBhZGQgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IDA1dXANCitkZGFkZDgxODAwIGFkZCAgLjIwMDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIwICBSb3VuZGVkDQorZGRhZGQ4MTgwMSBhZGQgIC4yMDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwMiBhZGQgIC4yMDEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwMyBhZGQgIC4yMDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwNCBhZGQgIC4yMDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwNyBhZGQgIC4yMDYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwOCBhZGQgIC4yMDcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgwOSBhZGQgIC4yMDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgxMSBhZGQgLS4yMDk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yMSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MTgyMCBhZGQgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY5IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxODIxIGFkZCAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkODE5MDAgYWRkICAuMjEwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjEgIFJvdW5kZWQNCitkZGFkZDgxOTAxIGFkZCAgLjIxMDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTAyIGFkZCAgLjIxMTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTAzIGFkZCAgLjIxNTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTA0IGFkZCAgLjIxNTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTA3IGFkZCAgLjIxNjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTA4IGFkZCAgLjIxNzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTA5IGFkZCAgLjIxOTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgxOTExIGFkZCAtLjIxOTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjIxICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDgyMDAwIGFkZCAgLjI0MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI0ICBSb3VuZGVkDQorZGRhZGQ4MjAwMSBhZGQgIC4yNDAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwMiBhZGQgIC4yNDEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwMyBhZGQgIC4yNDUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwNCBhZGQgIC4yNDUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwNyBhZGQgIC4yNDYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwOCBhZGQgIC4yNDcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAwOSBhZGQgIC4yNDk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjAxMSBhZGQgLS4yNDk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRhZGQ4MjEwMCBhZGQgIC4yNTAwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yNSAgUm91bmRlZA0KK2RkYWRkODIxMDEgYWRkICAuMjUwMSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDIgYWRkICAuMjUxMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDMgYWRkICAuMjU1MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDQgYWRkICAuMjU1MSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDcgYWRkICAuMjU2MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDggYWRkICAuMjU3MCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMDkgYWRkICAuMjU5OSAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkYWRkODIxMTEgYWRkIC0uMjU5OSAgIC0xMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAtMTIzNDU2Nzg5MDEyMzQuMjYgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkYWRkODIyMDAgYWRkICAuMjYwMCAgICAxMjM0NTY3ODkwMTIzNC4wMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQuMjYgIFJvdW5kZWQNCitkZGFkZDgyMjAxIGFkZCAgLjI2MDEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjAyIGFkZCAgLjI2MTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjAzIGFkZCAgLjI2NTAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjA0IGFkZCAgLjI2NTEgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjA3IGFkZCAgLjI2NjAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjA4IGFkZCAgLjI2NzAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjA5IGFkZCAgLjI2OTkgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGFkZDgyMjExIGFkZCAtLjI2OTkgICAtMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gLTEyMzQ1Njc4OTAxMjM0LjI2ICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGFkZDgyMzAwIGFkZCAgLjI5MDAgICAgMTIzNDU2Nzg5MDEyMzQuMDAgICAgLT4gIDEyMzQ1Njc4OTAxMjM0LjI5ICBSb3VuZGVkDQorZGRhZGQ4MjMwMSBhZGQgIC4yOTAxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwMiBhZGQgIC4yOTEwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwMyBhZGQgIC4yOTUwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwNCBhZGQgIC4yOTUxICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwNyBhZGQgIC4yOTYwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwOCBhZGQgIC4yOTcwICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMwOSBhZGQgIC4yOTk5ICAgIDEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+ICAxMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRhZGQ4MjMxMSBhZGQgLS4yOTk5ICAgLTEyMzQ1Njc4OTAxMjM0LjAwICAgIC0+IC0xMjM0NTY3ODkwMTIzNC4yOSAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkYWRkOTk5MCBhZGQgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRBbmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CmluZGV4IDY0YTlmOTIuLjY3NjUxNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEFuZC5kZWNUZXN0CkBAIC0xLDM0NyArMSwzNDcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRBbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKLWRkYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAotZGRhbmQwMDIgYW5kICAgICAgICAgICAgIDAgICAgMSAtPiAgICAwCi1kZGFuZDAwMyBhbmQgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDAKLWRkYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQotZGRhbmQwMDUgYW5kICAgICAgICAgIDExMDAgMTAxMCAtPiAxMDAwCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQotLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRkYW5kMDA2IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCi1kZGFuZDAwNyBhbmQgMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAotZGRhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKLWRkYW5kMDA5IGFuZCAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCi1kZGFuZDAxMCBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAotZGRhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKLWRkYW5kMDEyIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCi1kZGFuZDAxMyBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLS0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci1kZGFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQotZGRhbmQwMjQgYW5kIDExMTExMTExMTExMTExMTEgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTEKLWRkYW5kMDI1IGFuZCAxMTExMTExMTExMTExMTExICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCi1kZGFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQotZGRhbmQwMjcgYW5kIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTEKLWRkYW5kMDI4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCi1kZGFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQotZGRhbmQwMzAgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTEKLWRkYW5kMDMxIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCi1kZGFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQotZGRhbmQwMzMgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTEKLWRkYW5kMDM0IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCi1kZGFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQotZGRhbmQwMzYgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTEKLWRkYW5kMDM3IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCi1kZGFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQotZGRhbmQwMzkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDAKLQotZGRhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQotZGRhbmQwNDEgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQotZGRhbmQwNDIgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQotZGRhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQotZGRhbmQwNDQgYW5kICAgIDExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgMTExMTExMTExMTExMQotZGRhbmQwNDUgYW5kICAgICAxMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgIDExMTExMTExMTExMQotZGRhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQotZGRhbmQwNDcgYW5kICAgICAgIDExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgMTExMTExMTExMQotZGRhbmQwNDggYW5kICAgICAgICAxMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgIDExMTExMTExMQotZGRhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQotZGRhbmQwNTAgYW5kICAgICAgICAgIDExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgMTExMTExMQotZGRhbmQwNTEgYW5kICAgICAgICAgICAxMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgIDExMTExMQotZGRhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQotZGRhbmQwNTMgYW5kICAgICAgICAgICAgIDExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgMTExMQotZGRhbmQwNTQgYW5kICAgICAgICAgICAgICAxMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgIDExMQotZGRhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQotZGRhbmQwNTYgYW5kICAgICAgICAgICAgICAgIDEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMQotZGRhbmQwNTcgYW5kICAgICAgICAgICAgICAgIDAgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMAotCi1kZGFuZDE1MCBhbmQgMTExMTExMTExMSAgMSAgLT4gIDEKLWRkYW5kMTUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQotZGRhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxCi1kZGFuZDE1MyBhbmQgICAgMTExMTExMSAgMSAgLT4gIDEKLWRkYW5kMTU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQotZGRhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxCi1kZGFuZDE1NiBhbmQgICAgICAgMTExMSAgMSAgLT4gIDEKLWRkYW5kMTU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQotZGRhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxCi1kZGFuZDE1OSBhbmQgICAgICAgICAgMSAgMSAgLT4gIDEKLQotZGRhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwCi1kZGFuZDE2MSBhbmQgIDExMTExMTExMSAgMCAgLT4gIDAKLWRkYW5kMTYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMAotZGRhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwCi1kZGFuZDE2NCBhbmQgICAgIDExMTExMSAgMCAgLT4gIDAKLWRkYW5kMTY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMAotZGRhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwCi1kZGFuZDE2NyBhbmQgICAgICAgIDExMSAgMCAgLT4gIDAKLWRkYW5kMTY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMAotZGRhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwCi0KLWRkYW5kMTcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQotZGRhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxCi1kZGFuZDE3MiBhbmQgMSAgICAxMTExMTExMSAgLT4gIDEKLWRkYW5kMTczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQotZGRhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxCi1kZGFuZDE3NSBhbmQgMSAgICAgICAxMTExMSAgLT4gIDEKLWRkYW5kMTc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQotZGRhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxCi1kZGFuZDE3OCBhbmQgMSAgICAgICAgICAxMSAgLT4gIDEKLWRkYW5kMTc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQotCi1kZGFuZDE4MCBhbmQgMCAgMTExMTExMTExMSAgLT4gIDAKLWRkYW5kMTgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMAotZGRhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwCi1kZGFuZDE4MyBhbmQgMCAgICAgMTExMTExMSAgLT4gIDAKLWRkYW5kMTg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMAotZGRhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwCi1kZGFuZDE4NiBhbmQgMCAgICAgICAgMTExMSAgLT4gIDAKLWRkYW5kMTg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMAotZGRhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwCi1kZGFuZDE4OSBhbmQgMCAgICAgICAgICAgMSAgLT4gIDAKLQotZGRhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExCi1kZGFuZDA5MSBhbmQgMTAxMTExMTExICAxMTExMTExMTEgIC0+ICAxMDExMTExMTEKLWRkYW5kMDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQotZGRhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExCi1kZGFuZDA5NCBhbmQgMTExMTAxMTExICAxMTExMTExMTEgIC0+ICAxMTExMDExMTEKLWRkYW5kMDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQotZGRhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExCi1kZGFuZDA5NyBhbmQgMTExMTExMTAxICAxMTExMTExMTEgIC0+ICAxMTExMTExMDEKLWRkYW5kMDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAotCi1kZGFuZDEwMCBhbmQgMTExMTExMTExICAwMTExMTExMTEgIC0+ICAgMTExMTExMTEKLWRkYW5kMTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQotZGRhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExCi1kZGFuZDEwMyBhbmQgMTExMTExMTExICAxMTEwMTExMTEgIC0+ICAxMTEwMTExMTEKLWRkYW5kMTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQotZGRhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExCi1kZGFuZDEwNiBhbmQgMTExMTExMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTEwMTEKLWRkYW5kMTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQotZGRhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotZGRhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDIyMSBhbmQgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDIyNCBhbmQgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDIyNyBhbmQgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDIzMCBhbmQgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhIGZldyByYW5kb21zCi1kZGFuZDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyNDIgYW5kIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWRkYW5kMjUwIGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjUxIGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjUyIGFuZCAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjUzIGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU0IGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU1IGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU2IGFuZCAgODAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU3IGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU4IGFuZCAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjU5IGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjYwIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjYxIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjYyIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjYzIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjY0IGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjY1IGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTVNELTEKLWRkYW5kMjcwIGFuZCAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjcxIGFuZCAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjcyIGFuZCAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjczIGFuZCAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjc0IGFuZCAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjc1IGFuZCAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjc2IGFuZCAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjc3IGFuZCAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1kZGFuZDI4MCBhbmQgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4MSBhbmQgIDAwMDEwMDAwMDAwMDAwMDcgMTAwMDAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4MiBhbmQgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4MyBhbmQgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4NCBhbmQgIDEwMDAwMDEwMDAwMDAwMDAgMDAwMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4NSBhbmQgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4NiBhbmQgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI4NyBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgMTAwMDAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1pZGRpZQotZGRhbmQyODggYW5kICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyODkgYW5kICAwMDAxMDAwMDcwMDAwMDAxIDEwMDAwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTAgYW5kICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTEgYW5kICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTIgYW5kICAxMDAwMDAxMDAwMDAxMDAwIDAwMDAwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTMgYW5kICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTQgYW5kICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTUgYW5kICAxMDAwMDAwMDAxMDAwMDAwIDAwMDAwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc2lnbnMKLWRkYW5kMjk2IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDI5NyBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQyOTggYW5kICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMjk5IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMAotCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlCi1kZGFuZDMzMSBhbmQgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzMzIgYW5kICAzICAgMUUtMTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDMzNCBhbmQgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzMzUgYW5kICA2ICAgLTFFLTEwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDMzNyBhbmQgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzMzggYW5kICA5ICAgLTkuOTk5OTk5OTlFKzE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM0MiBhbmQgIDFFLTE5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNDMgYW5kICAxLjAwMDAwMDAwRS0xOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzQ0IGFuZCAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM0NSBhbmQgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNDYgYW5kICAtMS4wMDAwMDAwMEUtMTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzQ3IGFuZCAgLTFFLTE5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM0OCBhbmQgIC05Ljk5OTk5OTk5RSsxOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKLWRkYW5kMzYxIGFuZCAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM2MiBhbmQgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzY0IGFuZCAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM2NSBhbmQgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzcxIGFuZCAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM3MiBhbmQgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kMzc0IGFuZCAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDM3NSBhbmQgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgotZGRhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kNzgxIGFuZCAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDc4MiBhbmQgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kNzg0IGFuZCAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDc4NSBhbmQgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kNzg3IGFuZCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDc4OCBhbmQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kNzkwIGFuZCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDc5MSBhbmQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kNzkzIGFuZCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDc5NCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZGFuZDgwMCBhbmQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MDEgYW5kICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgwMyBhbmQgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MDQgYW5kICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgwNiBhbmQgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MDcgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgwOSBhbmQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MTAgYW5kIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgxMiBhbmQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MTMgYW5kICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgxNSBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZGFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MjIgYW5kICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODIzIGFuZCAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MjUgYW5kICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODI2IGFuZCAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MjggYW5kICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODI5IGFuZCAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MzEgYW5kIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODMyIGFuZCAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MzQgYW5kICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODM1IGFuZCAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4MzcgYW5kICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDIgYW5kICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDMgYW5kICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDUgYW5kICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDYgYW5kICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDggYW5kICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NDkgYW5kICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTEgYW5kIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTIgYW5kIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTQgYW5kIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTUgYW5kICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTcgYW5kICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTggYW5kICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kZGFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NjIgYW5kICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODYzIGFuZCAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NjUgYW5kICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODY2IGFuZCAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NjggYW5kICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODY5IGFuZCAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NzIgYW5kICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODczIGFuZCAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NzUgYW5kICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODc2IGFuZCAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4NzggYW5kIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODc5IGFuZCAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4ODEgYW5kICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODgyIGFuZCAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRhbmQ4ODQgYW5kICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkYW5kODg1IGFuZCAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZEFuZC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIEFORCBmb3IgZGVjRG91YmxlcyAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KK2RkYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KK2RkYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMA0KK2RkYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMA0KK2RkYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KK2RkYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMA0KKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KK2RkYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQorZGRhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCitkZGFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KK2RkYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQorZGRhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCitkZGFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KK2RkYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwDQorDQorLS0gVmFyaW91cyBsZW5ndGhzDQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGFuZDAyMSBhbmQgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KK2RkYW5kMDI0IGFuZCAxMTExMTExMTExMTExMTExICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExDQorZGRhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTENCitkZGFuZDAyNiBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KK2RkYW5kMDI3IGFuZCAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExDQorZGRhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTENCitkZGFuZDAyOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KK2RkYW5kMDMwIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExDQorZGRhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTENCitkZGFuZDAzMiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KK2RkYW5kMDMzIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExDQorZGRhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTENCitkZGFuZDAzNSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KK2RkYW5kMDM2IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExDQorZGRhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTENCitkZGFuZDAzOCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KK2RkYW5kMDM5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwDQorDQorZGRhbmQwNDAgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgMTExMTExMTExMTExMTExMQ0KK2RkYW5kMDQxIGFuZCAgMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAxMTExMTExMTExMTExMTENCitkZGFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExDQorZGRhbmQwNDMgYW5kICAgMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAxMTExMTExMTExMTExMQ0KK2RkYW5kMDQ0IGFuZCAgICAxMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgIDExMTExMTExMTExMTENCitkZGFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExDQorZGRhbmQwNDYgYW5kICAgICAgMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAxMTExMTExMTExMQ0KK2RkYW5kMDQ3IGFuZCAgICAgICAxMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgIDExMTExMTExMTENCitkZGFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExDQorZGRhbmQwNDkgYW5kICAgICAgICAgMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAxMTExMTExMQ0KK2RkYW5kMDUwIGFuZCAgICAgICAgICAxMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgIDExMTExMTENCitkZGFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExDQorZGRhbmQwNTIgYW5kICAgICAgICAgICAgMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAxMTExMQ0KK2RkYW5kMDUzIGFuZCAgICAgICAgICAgICAxMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgIDExMTENCitkZGFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExDQorZGRhbmQwNTUgYW5kICAgICAgICAgICAgICAgMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAxMQ0KK2RkYW5kMDU2IGFuZCAgICAgICAgICAgICAgICAxICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgIDENCitkZGFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwDQorDQorZGRhbmQxNTAgYW5kIDExMTExMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTIgYW5kICAgMTExMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTMgYW5kICAgIDExMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTUgYW5kICAgICAgMTExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTYgYW5kICAgICAgIDExMTEgIDEgIC0+ICAxDQorZGRhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxDQorZGRhbmQxNTggYW5kICAgICAgICAgMTEgIDEgIC0+ICAxDQorZGRhbmQxNTkgYW5kICAgICAgICAgIDEgIDEgIC0+ICAxDQorDQorZGRhbmQxNjAgYW5kIDExMTExMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjEgYW5kICAxMTExMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjMgYW5kICAgIDExMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjQgYW5kICAgICAxMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjYgYW5kICAgICAgIDExMTEgIDAgIC0+ICAwDQorZGRhbmQxNjcgYW5kICAgICAgICAxMTEgIDAgIC0+ICAwDQorZGRhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwDQorZGRhbmQxNjkgYW5kICAgICAgICAgIDEgIDAgIC0+ICAwDQorDQorZGRhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxDQorZGRhbmQxNzEgYW5kIDEgICAxMTExMTExMTEgIC0+ICAxDQorZGRhbmQxNzIgYW5kIDEgICAgMTExMTExMTEgIC0+ICAxDQorZGRhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxDQorZGRhbmQxNzQgYW5kIDEgICAgICAxMTExMTEgIC0+ICAxDQorZGRhbmQxNzUgYW5kIDEgICAgICAgMTExMTEgIC0+ICAxDQorZGRhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxDQorZGRhbmQxNzcgYW5kIDEgICAgICAgICAxMTEgIC0+ICAxDQorZGRhbmQxNzggYW5kIDEgICAgICAgICAgMTEgIC0+ICAxDQorZGRhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxDQorDQorZGRhbmQxODAgYW5kIDAgIDExMTExMTExMTEgIC0+ICAwDQorZGRhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwDQorZGRhbmQxODIgYW5kIDAgICAgMTExMTExMTEgIC0+ICAwDQorZGRhbmQxODMgYW5kIDAgICAgIDExMTExMTEgIC0+ICAwDQorZGRhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwDQorZGRhbmQxODUgYW5kIDAgICAgICAgMTExMTEgIC0+ICAwDQorZGRhbmQxODYgYW5kIDAgICAgICAgIDExMTEgIC0+ICAwDQorZGRhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwDQorZGRhbmQxODggYW5kIDAgICAgICAgICAgMTEgIC0+ICAwDQorZGRhbmQxODkgYW5kIDAgICAgICAgICAgIDEgIC0+ICAwDQorDQorZGRhbmQwOTAgYW5kIDAxMTExMTExMSAgMTExMTExMTExICAtPiAgIDExMTExMTExDQorZGRhbmQwOTEgYW5kIDEwMTExMTExMSAgMTExMTExMTExICAtPiAgMTAxMTExMTExDQorZGRhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExDQorZGRhbmQwOTMgYW5kIDExMTAxMTExMSAgMTExMTExMTExICAtPiAgMTExMDExMTExDQorZGRhbmQwOTQgYW5kIDExMTEwMTExMSAgMTExMTExMTExICAtPiAgMTExMTAxMTExDQorZGRhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExDQorZGRhbmQwOTYgYW5kIDExMTExMTAxMSAgMTExMTExMTExICAtPiAgMTExMTExMDExDQorZGRhbmQwOTcgYW5kIDExMTExMTEwMSAgMTExMTExMTExICAtPiAgMTExMTExMTAxDQorZGRhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQorDQorZGRhbmQxMDAgYW5kIDExMTExMTExMSAgMDExMTExMTExICAtPiAgIDExMTExMTExDQorZGRhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExDQorZGRhbmQxMDIgYW5kIDExMTExMTExMSAgMTEwMTExMTExICAtPiAgMTEwMTExMTExDQorZGRhbmQxMDMgYW5kIDExMTExMTExMSAgMTExMDExMTExICAtPiAgMTExMDExMTExDQorZGRhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorZGRhbmQxMDUgYW5kIDExMTExMTExMSAgMTExMTEwMTExICAtPiAgMTExMTEwMTExDQorZGRhbmQxMDYgYW5kIDExMTExMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMDExDQorZGRhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxDQorZGRhbmQxMDggYW5kIDExMTExMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTEwDQorDQorLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQorZGRhbmQyMjAgYW5kIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjEgYW5kIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjMgYW5kIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjQgYW5kIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjYgYW5kIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjcgYW5kIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMjkgYW5kIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMzAgYW5kIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyMzIgYW5kIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYSBmZXcgcmFuZG9tcw0KK2RkYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjQxIGFuZCAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjQyIGFuZCAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjQ0IGFuZCAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTVNEDQorZGRhbmQyNTAgYW5kICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjUxIGFuZCAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI1MiBhbmQgIDgwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNTMgYW5kICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjU0IGFuZCAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI1NSBhbmQgIDcwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNTYgYW5kICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjU3IGFuZCAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI1OCBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNTkgYW5kICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjYwIGFuZCAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI2MSBhbmQgIDEwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNjIgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjYzIGFuZCAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI2NCBhbmQgIDAwMDAwMDAwMDAwMDAwMDAgODAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNjUgYW5kICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTVNELTENCitkZGFuZDI3MCBhbmQgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNzEgYW5kICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjcyIGFuZCAgMDgwMDAwMDAxMDAwMDAwMCAxMDAwMDAxMDAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI3MyBhbmQgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNzQgYW5kICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjc1IGFuZCAgMTAwMDAwMDAwMDAxMDAwMCAwNzAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI3NiBhbmQgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyNzcgYW5kICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTFNEDQorZGRhbmQyODAgYW5kICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjgxIGFuZCAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI4MiBhbmQgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyODMgYW5kICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjg0IGFuZCAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI4NSBhbmQgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyODYgYW5kICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjg3IGFuZCAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1pZGRpZQ0KK2RkYW5kMjg4IGFuZCAgMDAxMDAwMDAyMDAwMDAwMCAxMDAwMDAxMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI4OSBhbmQgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyOTAgYW5kICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjkxIGFuZCAgMDAwMDAxMDA5MDAwMDEwMCAxMDAwMDAwMDAxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI5MiBhbmQgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyOTMgYW5kICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjk0IGFuZCAgMTAwMDAwMDAxMDEwMDAwMCAwMDAwMDAwMDgwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI5NSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gc2lnbnMNCitkZGFuZDI5NiBhbmQgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMjk3IGFuZCAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQyOTggYW5kICAxMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDAxMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDI5OSBhbmQgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDANCisNCistLSBObWF4LCBObWluLCBOdGlueS1saWtlDQorZGRhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDMzMiBhbmQgIDMgICAxRS0xOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzMzQgYW5kICA1ICAgMUUtMTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDMzNSBhbmQgIDYgICAtMUUtMTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzMzcgYW5kICA4ICAgLTFFLTE5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrMTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrMTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNDIgYW5kICAxRS0xOTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDM0MyBhbmQgIDEuMDAwMDAwMDBFLTE5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzQ0IGFuZCAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNDUgYW5kICAtMUUtMTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDM0NiBhbmQgIC0xLjAwMDAwMDAwRS0xOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzQ3IGFuZCAgLTFFLTE5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrMTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCitkZGFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kMzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQorZGRhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kNzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kNzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kNzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kNzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kNzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZGFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZGFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRhbmQ4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRCYXNlLmRlY1Rlc3QKaW5kZXggNDBmZWJmOC4uZmJkNmNjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQmFzZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEJhc2UuZGVjVGVzdApAQCAtMSwxMTA0ICsxLDExMDQgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNEb3VibGUgPC0tPiBzdHJpbmcgY29udmVyc2lvbnMgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyCi0tLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQotCi0tLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZwotLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbAotLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlCi0tLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUKLS0tIHJlcHJlc2VudGVkIGluIGEgZGVjRG91YmxlLiAgU29tZSB0ZXN0Y2FzZXMgZ28gdG8gdGhlIGxpbWl0IG9mIHRoZQotLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bwotLS0gdGVzdCBuYXJyb3dpbmcgYW5kIHdpZGVuaW5nIG9wZXJhdGlvbnMuCi0KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kZGJhczAwMSB0b1NjaSAgICAgICAwIC0+IDAKLWRkYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQotZGRiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjAKLWRkYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMAotZGRiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMAotZGRiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwCi1kZGJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjAKLWRkYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQotZGRiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40Ci1kZGJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUKLWRkYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNgotZGRiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45Ci1kZGJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjAKLWRkYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNAotZGRiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzCi1kZGJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTIKLWRkYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMAotZGRiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjAKLWRkYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMAotCi1kZGJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTEKLWRkYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wCi1kZGJhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQotZGRiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjEKLWRkYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTEKLWRkYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQotZGRiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5Ci0KLWRkYmFzMDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicKLWRkYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcKLWRkYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2JwotZGRiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknCi1kZGJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknCi1kZGJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnCi1kZGJhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnCi0KLWRkYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnCi1kZGJhczAzOCB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDUnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ1JwotCi0tLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQotZGRic24wMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkYnNuMDAyIHRvU2NpIC0xRS0zODMgLT4gLTFFLTM4MwotZGRic24wMDMgdG9TY2kgLTFFLTM5OCAtPiAtMUUtMzk4IFN1Ym5vcm1hbAotZGRic24wMDQgdG9TY2kgLTAgLT4gLTAKLWRkYnNuMDA1IHRvU2NpICswIC0+ICAwCi1kZGJzbjAwNiB0b1NjaSArMUUtMzk4IC0+ICAxRS0zOTggU3Vibm9ybWFsCi1kZGJzbjAwNyB0b1NjaSArMUUtMzgzIC0+ICAxRS0zODMKLWRkYnNuMDA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci0KLS0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCi0tLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKLWRkYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKLWRkYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCi1kZGJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCi1kZGJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCi1kZGJhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCi1kZGJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCi1kZGJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCi1kZGJhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JwotZGRiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JwotZGRiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JwotZGRiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JwotZGRiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKLWRkYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JwotZGRiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJwotZGRiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKLWRkYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCi1kZGJhczA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJwotZGRiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnCi1kZGJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnCi1kZGJhczA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScKLWRkYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZGRiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZGRiYXMwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKLWRkYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZGRiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCi1kZGJhczA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCi1kZGJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJwotLS0gZXhhbXBsZXMKLWRkYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JwotZGRiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJwotZGRiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKLQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KLQotLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCi1kZGJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEyLjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZGRiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2MTIzICAtPiAxMjMuNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNC41Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTAxMjM0NTYxMjMgIC0+IDEyMzQ1LjY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZGRiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2MTIzICAtPiAxMjM0NTYuNzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NjEyMyAgLT4gMTIzNDU2Ny44OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA3OSB0b1NjaSAgMTIzNDU2NzguOTAxMjM0NTYxMjMgIC0+IDEyMzQ1Njc4LjkwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZGRiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2MTIzICAtPiAxMjM0NTY3ODkuMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MC4xMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MDEuMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAxLjIzNDU2IEluZXhhY3QgUm91bmRlZAotZGRiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTAxMi4zNDU2MTIzICAtPiAxMjM0NTY3ODkwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkwMTIzLjQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMy40NTYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQuNTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjM0LjU2IEluZXhhY3QgUm91bmRlZAotZGRiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NS42MTIzICAtPiAxMjM0NTY3ODkwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2LjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGJhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NjEuMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMDg5IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIuMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE3IEluZXhhY3QgUm91bmRlZAotZGRiYXMwOTAgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYxMjMuICAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUrMTggSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gTnVtYmVycyB3aXRoIEUKLWRkYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCi1kZGJhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKLWRkYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcKLWRkYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JwotZGRiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKLWRkYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJwotZGRiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJwotZGRiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCi1kZGJhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScKLWRkYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKLWRkYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JwotZGRiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknCi1kZGJhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCi1kZGJhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKLWRkYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5JwotZGRiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCi1kZGJhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKLWRkYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcKLWRkYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JwotZGRiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCi1kZGJhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScKLWRkYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JwotZGRiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJwotZGRiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknCi1kZGJhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKLWRkYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKLWRkYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCi1kZGJhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKLWRkYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJwotZGRiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcKLWRkYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JwotZGRiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCi1kZGJhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcKLWRkYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJwotZGRiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCi1kZGJhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcKLWRkYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKLWRkYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKLWRkYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicKLWRkYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKLQotZGRiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JwotZGRiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcKLWRkYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKLWRkYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCi1kZGJhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnCi1kZGJhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKLWRkYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCi1kZGJhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnCi1kZGJhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCi1kZGJhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCi1kZGJhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScKLWRkYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKLWRkYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKLWRkYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnCi0KLWRkYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKLWRkYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCi1kZGJhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnCi1kZGJhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCi1kZGJhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKLWRkYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnCi1kZGJhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCi1kZGJhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCi1kZGJhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnCi1kZGJhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKLWRkYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKLWRkYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScKLWRkYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKLWRkYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCi0KLWRkYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScKLWRkYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCi1kZGJhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCi1kZGJhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScKLWRkYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCi1kZGJhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCi1kZGJhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnCi1kZGJhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCi1kZGJhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKLWRkYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcKLWRkYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKLWRkYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKLWRkYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnCi1kZGJhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJwotCi1kZGJhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JwotZGRiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3JwotZGRiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKLWRkYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKLWRkYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1JwotZGRiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCi1kZGJhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKLWRkYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnCi1kZGJhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKLWRkYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JwotZGRiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnCi1kZGJhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKLWRkYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKLWRkYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycKLWRkYmFzMjQ0IHRvU2NpICIxMjY1RS05IiAgLT4gJzAuMDAwMDAxMjY1JwotZGRiYXMyNDUgdG9TY2kgIjEyNjVFLTEwIiAtPiAnMS4yNjVFLTcnCi1kZGJhczI0NiB0b1NjaSAiMTI2NUUtMTEiIC0+ICcxLjI2NUUtOCcKLWRkYmFzMjQ3IHRvU2NpICIxMjY1RS0xMiIgLT4gJzEuMjY1RS05JwotCi1kZGJhczI1MCB0b1NjaSAiMC4xMjY1IiAgICAgLT4gJzAuMTI2NScKLWRkYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJwotZGRiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScKLWRkYmFzMjUzIHRvU2NpICIwLjEyNjVFLTQiICAtPiAnMC4wMDAwMTI2NScKLWRkYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1JwotZGRiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScKLWRkYmFzMjU2IHRvU2NpICIwLjEyNjVFLTEiICAtPiAnMC4wMTI2NScKLWRkYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1JwotZGRiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScKLWRkYmFzMjU5IHRvU2NpICIwLjEyNjVFKzIiICAtPiAnMTIuNjUnCi1kZGJhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41JwotZGRiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1JwotZGRiYXMyNjIgdG9TY2kgIjAuMTI2NUUrOCIgIC0+ICcxLjI2NUUrNycKLWRkYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5JwotCi0tLSBzb21lIG1vcmUgbmVnYXRpdmUgemVyb3MgW3N5c3RlbWF0aWMgdGVzdHMgYmVsb3ddCi1kZGJhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnCi1kZGJhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJwotZGRiYXMyOTIgdG9TY2kgIi0wLjAwMEUtMyIgIC0+ICctMC4wMDAwMDAnCi1kZGJhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03JwotZGRiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJwotZGRiYXMyOTUgdG9TY2kgIi0wLjAwRS0zIiAgIC0+ICctMC4wMDAwMCcKLWRkYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJwotZGRiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJwotZGRiYXMyOTggdG9TY2kgIi0wRS0yIiAgICAgIC0+ICctMC4wMCcKLWRkYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJwotCi0tLSBFbmdpbmVlcmluZyBub3RhdGlvbiB0ZXN0cwotZGRiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzCi1kZGJhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMgotZGRiYXMzMDMgIHRvU2NpIDEwZTExICAtPiAxLjBFKzEyCi1kZGJhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTIKLWRkYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQotZGRiYXMzMDYgIHRvRW5nIDEwZTEwICAtPiAxMDBFKzkKLWRkYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMAotZGRiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQotZGRiYXMzMDkgIHRvU2NpIDEwZTggICAtPiAxLjBFKzkKLWRkYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5Ci1kZGJhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOAotZGRiYXMzMTIgIHRvRW5nIDEwZTcgICAtPiAxMDBFKzYKLWRkYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3Ci1kZGJhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2Ci1kZGJhczMxNSAgdG9TY2kgMTBlNSAgIC0+IDEuMEUrNgotZGRiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYKLWRkYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1Ci1kZGJhczMxOCAgdG9FbmcgMTBlNCAgIC0+IDEwMEUrMwotZGRiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQKLWRkYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMKLWRkYmFzMzIxICB0b1NjaSAxMGUyICAgLT4gMS4wRSszCi1kZGJhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMwotZGRiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzIKLWRkYmFzMzI0ICB0b0VuZyAxMGUxICAgLT4gMTAwCi1kZGJhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwCi1kZGJhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwCi1kZGJhczMyNyAgdG9TY2kgMTBlLTEgIC0+IDEuMAotZGRiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjAKLWRkYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMAotZGRiYXMzMzAgIHRvRW5nIDEwZS0yICAtPiAwLjEwCi1kZGJhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwCi1kZGJhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwCi1kZGJhczMzMyAgdG9TY2kgMTBlLTQgIC0+IDAuMDAxMAotZGRiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTAKLWRkYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMAotZGRiYXMzMzYgIHRvRW5nIDEwZS01ICAtPiAwLjAwMDEwCi1kZGJhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwCi1kZGJhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwCi1kZGJhczMzOSAgdG9TY2kgMTBlLTcgIC0+IDAuMDAwMDAxMAotZGRiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTAKLWRkYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03Ci1kZGJhczM0MiAgdG9FbmcgMTBlLTggIC0+IDEwMEUtOQotZGRiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgKLWRkYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkKLWRkYmFzMzQ1ICB0b1NjaSAxMGUtMTAgLT4gMS4wRS05Ci1kZGJhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQotZGRiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwCi1kZGJhczM0OCAgdG9FbmcgMTBlLTExIC0+IDEwMEUtMTIKLWRkYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQotZGRiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTIKLWRkYmFzMzUxICB0b1NjaSAxMGUtMTMgLT4gMS4wRS0xMgotZGRiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyCi0KLWRkYmFzMzYxICB0b1NjaSA3RTEyICAtPiA3RSsxMgotZGRiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyCi1kZGJhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTEKLWRkYmFzMzY0ICB0b0VuZyA3RTExICAtPiA3MDBFKzkKLWRkYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMAotZGRiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5Ci1kZGJhczM2NyAgdG9TY2kgN0U5ICAgLT4gN0UrOQotZGRiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkKLWRkYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4Ci1kZGJhczM3MCAgdG9FbmcgN0U4ICAgLT4gNzAwRSs2Ci1kZGJhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNwotZGRiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2Ci1kZGJhczM3MyAgdG9TY2kgN0U2ICAgLT4gN0UrNgotZGRiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYKLWRkYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1Ci1kZGJhczM3NiAgdG9FbmcgN0U1ICAgLT4gNzAwRSszCi1kZGJhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNAotZGRiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszCi1kZGJhczM3OSAgdG9TY2kgN0UzICAgLT4gN0UrMwotZGRiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMKLWRkYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyCi1kZGJhczM4MiAgdG9FbmcgN0UyICAgLT4gNzAwCi1kZGJhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQotZGRiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwCi1kZGJhczM4NSAgdG9TY2kgN0UwICAgLT4gNwotZGRiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcKLWRkYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcKLWRkYmFzMzg4ICB0b0VuZyA3RS0xICAtPiAwLjcKLWRkYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3Ci1kZGJhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNwotZGRiYXMzOTEgIHRvU2NpIDdFLTMgIC0+IDAuMDA3Ci1kZGJhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcKLWRkYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcKLWRkYmFzMzk0ICB0b0VuZyA3RS00ICAtPiAwLjAwMDcKLWRkYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3Ci1kZGJhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNwotZGRiYXMzOTcgIHRvU2NpIDdFLTYgIC0+IDAuMDAwMDA3Ci1kZGJhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcKLWRkYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03Ci1kZGJhczQwMCAgdG9FbmcgN0UtNyAgLT4gNzAwRS05Ci1kZGJhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOAotZGRiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05Ci1kZGJhczQwMyAgdG9TY2kgN0UtOSAgLT4gN0UtOQotZGRiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkKLWRkYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMAotZGRiYXM0MDYgIHRvRW5nIDdFLTEwIC0+IDcwMEUtMTIKLWRkYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQotZGRiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMgotZGRiYXM0MDkgIHRvU2NpIDdFLTEyIC0+IDdFLTEyCi1kZGJhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTIKLWRkYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMwotZGRiYXM0MTIgIHRvRW5nIDdFLTEzIC0+IDcwMEUtMTUKLQotLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4KLXJvdW5kaW5nOiAgaGFsZl91cAotZGRiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKLWRkYmFzNDIxICB0b0VuZyAgICAxMDAgLT4gMTAwCi1kZGJhczQyMiAgdG9TY2kgICAxMDAwIC0+IDEwMDAKLWRkYmFzNDIzICB0b0VuZyAgIDEwMDAgLT4gMTAwMAotZGRiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKLWRkYmFzNDI1ICB0b0VuZyAgOTk5LjkgLT4gIDk5OS45Ci1kZGJhczQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMAotZGRiYXM0MjcgIHRvRW5nIDEwMDAuMCAtPiAxMDAwLjAKLWRkYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCi1kZGJhczQyOSAgdG9FbmcgMTAwMC4xIC0+IDEwMDAuMQotZGRiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCi1kZGJhczQzMSAgdG9FbmcgMTAwMDAgLT4gMTAwMDAKLWRkYmFzNDMyICB0b1NjaSAxMDAwMDAgLT4gMTAwMDAwCi1kZGJhczQzMyAgdG9FbmcgMTAwMDAwIC0+IDEwMDAwMAotZGRiYXM0MzQgIHRvU2NpIDEwMDAwMDAgLT4gMTAwMDAwMAotZGRiYXM0MzUgIHRvRW5nIDEwMDAwMDAgLT4gMTAwMDAwMAotZGRiYXM0MzYgIHRvU2NpIDEwMDAwMDAwIC0+IDEwMDAwMDAwCi1kZGJhczQzNyAgdG9FbmcgMTAwMDAwMDAgLT4gMTAwMDAwMDAKLWRkYmFzNDM4ICB0b1NjaSAxMDAwMDAwMDAgLT4gMTAwMDAwMDAwCi1kZGJhczQzOSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwCi1kZGJhczQ0MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZAotZGRiYXM0NDEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQKLWRkYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQzICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTcgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDQ5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNTAgICAtPiAxMDAuMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDUwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDUxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkCi1kZGJhczQ1MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZAotZGRiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NTUgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NTcgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NTggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NTkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdAotZGRiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQKLWRkYmFzNDYxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkCi1kZGJhczQ2MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2NyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0Ci1kZGJhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZAotZGRiYXM0NjkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQKLWRkYmFzNDcwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTkgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDcxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDcyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTkgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDczICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNTAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDc0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTkgICBSb3VuZGVkIEluZXhhY3QKLWRkYmFzNDc1ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QKLQotLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCi1yb3VuZGluZzogIGNlaWxpbmcKLWRkYnNyNDAxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZAotZGRic3I0MDIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNDAzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQwNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICB1cAotZGRic3I0MDUgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjQwNiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MDcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNDA4ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGZsb29yCi1kZGJzcjQxMCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNDExICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQxMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MTMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl9kb3duCi1kZGJzcjQxNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNDE2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQxNyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MTggIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNDE5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZXZlbgotZGRic3I0MjEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjQyMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MjMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNDI0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQyNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBkb3duCi1kZGJzcjQyNiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNDI3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQyOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MjkgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl91cAotZGRic3I0MzEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjQzMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I0MzMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNDM0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjQzNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotLS0gbmVnYXRpdmVzCi1yb3VuZGluZzogIGNlaWxpbmcKLWRkYnNyNTAxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZAotZGRic3I1MDIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNTAzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUwNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICB1cAotZGRic3I1MDUgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjUwNiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MDcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNTA4ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGZsb29yCi1kZGJzcjUxMCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNTExICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUxMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MTMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl9kb3duCi1kZGJzcjUxNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNTE2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUxNyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MTggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNTE5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZXZlbgotZGRic3I1MjEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjUyMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MjMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNTI0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUyNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBkb3duCi1kZGJzcjUyNiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRkYnNyNTI3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUyOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MjkgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl91cAotZGRic3I1MzEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kZGJzcjUzMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZGRic3I1MzMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRkYnNyNTM0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0Ci1kZGJzcjUzNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzCi1kZGJhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLS0tIE5lYXItc3BlY2lhbHMKLWRkYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCi1kZGJhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci0KLWRkYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotLS0gWmVyb3MKLWRkYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKLWRkYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgKLWRkYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKLWRkYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCi1kZGJhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCi1kZGJhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKLWRkYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCi1kZGJhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCi1kZGJhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRkYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAotZGRiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMAotZGRiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAotZGRiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKLWRkYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKLWRkYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCi1kZGJhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKLWRkYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKLWRkYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCi1kZGJhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKLWRkYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03Ci1kZGJhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAotZGRiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKLQotZGRiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAotZGRiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCi1kZGJhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCi1kZGJhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxCi1kZGJhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCi1kZGJhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCi1kZGJhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0Ci1kZGJhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1Ci1kZGJhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2Ci1kZGJhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3Ci0KLWRkYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAotZGRiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAotZGRiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQotZGRiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgotZGRiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMwotZGRiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNAotZGRiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQotZGRiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgotZGRiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNwotZGRiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAotCi1kZGJhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCi1kZGJhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxCi1kZGJhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCi1kZGJhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCi1kZGJhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0Ci1kZGJhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1Ci1kZGJhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Ci1kZGJhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3Ci1kZGJhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4Ci1kZGJhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5Ci0KLWRkYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAotZGRiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAotZGRiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKLWRkYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAotZGRiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAotZGRiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKLWRkYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcKLWRkYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKLWRkYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKLWRkYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwCi0KLWRkYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKLWRkYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCi1kZGJhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKLWRkYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKLWRkYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCi1kZGJhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03Ci1kZGJhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04Ci1kZGJhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Ci1kZGJhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMAotZGRiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKLQotZGRiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKLWRkYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwCi1kZGJhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAotZGRiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKLWRkYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwCi1kZGJhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAotZGRiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKLWRkYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wCi1kZGJhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAotZGRiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKLQotLS0gU3BlY2lhbHMKLWRkYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgotZGRiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCi1kZGJhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgotZGRiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCi1kZGJhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4KLWRkYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgotZGRiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCi1kZGJhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFOCi1kZGJhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCi1kZGJhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCi1kZGJhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFOCi1kZGJhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KLWRkYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKLWRkYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyCi1kZGJhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKLWRkYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKLWRkYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjEKLWRkYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCi1kZGJhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKLWRkYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQKLWRkYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKLWRkYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCi1kZGJhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMKLWRkYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKLWRkYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRkYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotCi1kZGJhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFOCi1kZGJhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgotZGRiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KLWRkYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFOCi1kZGJhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgotZGRiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgotZGRiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcKLWRkYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0Ci1kZGJhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZGRiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kZGJhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotZGRiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQotZGRiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQotZGRiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWRkYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQotZGRiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1kZGJhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKLQotZGRiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQotZGRiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQotZGRiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5Ci1kZGJhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKLWRkYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQotZGRiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5Ci1kZGJhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkKLQotLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZwotZGRiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5Ci1kZGJhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFOCi1kZGJhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KLWRkYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTgotZGRiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTgotZGRiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTgotZGRiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTgotZGRiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTgotZGRiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KLWRkYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRkYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTgotCi0tLSBaZXJvIHRvRW5nLCBldGMuCi1kZGJhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQotCi1kZGJhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQotZGRiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYKLWRkYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKLWRkYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAotZGRiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKLWRkYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKLWRkYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAotZGRiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKLWRkYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRkYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRkYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwCi1kZGJhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAotZGRiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCi1kZGJhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAotZGRiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCi1kZGJhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCi1kZGJhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAotZGRiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCi1kZGJhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCi1kZGJhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNgotZGRiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02Ci1kZGJhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKLQotZGRiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKLWRkYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKLWRkYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCi1kZGJhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMwotZGRiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMwotZGRiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKLWRkYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2Ci1kZGJhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2Ci1kZGJhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgotZGRiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkKLQotZGRiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAotZGRiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKLWRkYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszCi1kZGJhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCi1kZGJhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMwotZGRiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYKLWRkYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKLWRkYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2Ci1kZGJhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQotZGRiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQotCi1kZGJhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAotZGRiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMKLWRkYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKLWRkYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCi1kZGJhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNgotZGRiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgotZGRiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKLWRkYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5Ci1kZGJhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5Ci1kZGJhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQotCi1kZGJhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCi1kZGJhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAotZGRiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCi1kZGJhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCi1kZGJhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAotZGRiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCi1kZGJhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02Ci1kZGJhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgotZGRiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKLWRkYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkKLQotZGRiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKLWRkYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAotZGRiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAotZGRiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKLWRkYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAotZGRiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNgotZGRiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKLWRkYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Ci1kZGJhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05Ci1kZGJhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQotCi0tLSBsb25nIGlucHV0IHN0cmluZ3MKLWRkYmFzODAxIHRvc2NpICcwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDIgdG9zY2kgJzAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDMgdG9zY2kgJzAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRkYmFzODA0IHRvc2NpICcwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDUgdG9zY2kgJzAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDYgdG9zY2kgJzAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRkYmFzODA3IHRvc2NpICcwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDggdG9zY2kgJzAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRiYXM4MDkgdG9zY2kgJzAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRkYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotCi1kZGJhczgxMSB0b3NjaSAnMC4xMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjEyMzQ1Njc4OTAxMjM0NTYKLWRkYmFzODEyIHRvc2NpICcwLjAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAxMjM0NTY3ODkwMTIzNDU2Ci1kZGJhczgxMyB0b3NjaSAnMC4wMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDU2Ci1kZGJhczgxNCB0b3NjaSAnMC4wMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NTYKLWRkYmFzODE1IHRvc2NpICcwLjAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDU2Ci1kZGJhczgxNiB0b3NjaSAnMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2Ci1kZGJhczgxNyB0b3NjaSAnMC4wMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtNwotZGRiYXM4MTggdG9zY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS04Ci1kZGJhczgxOSB0b3NjaSAnMC4wMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS05Ci1kZGJhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtMTAKLQotZGRiYXM4MjEgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMTkgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyMiB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjAgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyMyB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIxIEluZXhhY3QgUm91bmRlZAotZGRiYXM4MjQgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzJyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjIgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyNSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjMgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyNiB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI0IEluZXhhY3QgUm91bmRlZAotZGRiYXM4MjcgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjUgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyOCB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1N0UrMjYgSW5leGFjdCBSb3VuZGVkCi1kZGJhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI3IEluZXhhY3QgUm91bmRlZAotCi0tLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MKLWRkYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZGRiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kZGJhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLS0tIG5lZ2F0aXZlcyB0aGUgc2FtZQotZGRiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kZGJhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmFzOTIxIHRvU2NpICctMC4wOWUtOTk5OTk5OTk5JyAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTI3IHRvU2NpICctMTExMWUtOTk5OTk5OTk5OScgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi0tLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcwotcm91bmRpbmc6ICBjZWlsaW5nCi1kZGJhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZGRiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICB1cAotZGRiYXM5MzIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTMzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogIGRvd24KLWRkYmFzOTM0IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiAgZmxvb3IKLWRkYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTM3IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgaGFsZl91cAotZGRiYXM5MzggdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogIGhhbGZfZXZlbgotZGRiYXM5NDAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogIGhhbGZfZG93bgotZGRiYXM5NDIgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuCi0KLS0tIE5vdyBjaGVjayA4NTQvNzU0ciBzb21lIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdyB0byAwCi1kZGJlbTQwMCB0b1NjaSAgMS4wMDAwRS0zODMgICAgIC0+IDEuMDAwMEUtMzgzCi1kZGJlbTQwMSB0b1NjaSAgMC4xRS0zOTQgICAgICAgIC0+IDFFLTM5NSAgICAgICBTdWJub3JtYWwKLWRkYmVtNDAyIHRvU2NpICAwLjEwMDBFLTM5NCAgICAgLT4gMS4wMDBFLTM5NSAgIFN1Ym5vcm1hbAotZGRiZW00MDMgdG9TY2kgIDAuMDEwMEUtMzk0ICAgICAtPiAxLjAwRS0zOTYgICAgU3Vibm9ybWFsCi1kZGJlbTQwNCB0b1NjaSAgMC4wMDEwRS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgICBTdWJub3JtYWwKLWRkYmVtNDA1IHRvU2NpICAwLjAwMDFFLTM5NCAgICAgLT4gMUUtMzk4ICAgICAgIFN1Ym5vcm1hbAotZGRiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTM5NCAgICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kZGJlbTQwNyB0b1NjaSAgMC4wMDAxM0UtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDA4IHRvU2NpICAwLjAwMDE1RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTM5NCAgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQxMCB0b1NjaSAgMC4wMDAyM0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDExIHRvU2NpICAwLjAwMDI1RS0zOTQgICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTM5NCAgICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTM5NCAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDE0IHRvU2NpICAwLjAwMDE1MEUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS0zOTQgICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDE3IHRvU2NpICAwLjAwMDI1MEUtMzk0ICAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MTggdG9TY2kgIDAuMDAwMjUxRS0zOTQgICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQxOSB0b1NjaSAgMC4wMDAwOUUtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDIwIHRvU2NpICAwLjAwMDA1RS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJlbTQyMSB0b1NjaSAgMC4wMDAwM0UtMzk0ICAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmVtNDIzIHRvU2NpICAwLjAwMDAwNUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi1kZGJlbTQyNSB0b1NjaSAgMC4wMDEwNDlFLTM5NCAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDI2IHRvU2NpICAwLjAwMTA1MEUtMzk0ICAgLT4gMS4wRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQyOCB0b1NjaSAgMC4wMDExNDlFLTM5NCAgIC0+IDEuMUUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDI5IHRvU2NpICAwLjAwMTE1MEUtMzk0ICAgLT4gMS4yRS0zOTcgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRkYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtMzk0ICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTM5NCAgIC0+IDEuMDFFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtMzk0ICAgLT4gMS4wMUUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTM5NCAgIC0+IDEuMDJFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZGRiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtMzk0ICAgIC0+IDEuMDEwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDQyIHRvU2NpICAwLjEwMTA3RS0zOTQgICAgLT4gMS4wMTFFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ0NCB0b1NjaSAgMC4xMDExNUUtMzk0ICAgIC0+IDEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS0zOTQgICAgLT4gMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kZGJlbTQ1MCB0b1NjaSAgMS4xMDczMEUtMzk1ICAgLT4gMS4xMDdFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00NTEgdG9TY2kgIDEuMTA3NTBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDUyIHRvU2NpICAxLjEwNzcwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ1MyB0b1NjaSAgMS4xMDgzMEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRiZW00NTQgdG9TY2kgIDEuMTA4NTBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDU1IHRvU2NpICAxLjEwODcwRS0zOTUgICAtPiAxLjEwOUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG1ha2Ugc3VyZSBzaWduIE9LCi1kZGJlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTM5NCAgIC0+IC0xLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTM5NCAgIC0+IC0xLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTM5NCAgIC0+IC0xLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTM5NCAgIC0+IC0xLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTM5NCAgIC0+IC0xLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGJlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTM5NCAgIC0+IC0xLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tICc5OTlzJyBjYXNlcwotZGRiZW00NjQgdG9TY2kgIDk5OTk5OUUtMzk1ICAgICAgICAgLT4gOS45OTk5OUUtMzkwIFN1Ym5vcm1hbAotZGRiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTM5NCAgICAgICAgLT4gOS45OTk5MEUtMzkwIFN1Ym5vcm1hbAotZGRiZW00NjYgdG9TY2kgIDk5OTk5LkUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTAgIFN1Ym5vcm1hbAotZGRiZW00NjcgdG9TY2kgIDk5OTkuOUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTEgIFN1Ym5vcm1hbAotZGRiZW00NjggdG9TY2kgIDk5OS45OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTIgIFN1Ym5vcm1hbAotZGRiZW00NjkgdG9TY2kgIDk5Ljk5OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTMgIFN1Ym5vcm1hbAotZGRiZW00NzAgdG9TY2kgIDkuOTk5OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTQgIFN1Ym5vcm1hbAotZGRiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTM5NCAgICAgICAgLT4gMS4wMDAwRS0zOTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtMzk0ICAgICAgIC0+IDEuMDAwRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTM5NCAgICAgIC0+IDEuMDBFLTM5NiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTM5NCAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTM5NCAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zCi1kZGJhczEwMDEgdG9TY2kgIDFlOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGJhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGJhczEwMDQgdG9TY2kgIDFlMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGJhczEwMDcgdG9TY2kgIDFlLTk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTM5OCAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGJhczEwMTAgdG9TY2kgIDFlLTAwMDk5OTk5OTk5OSAtPiAwRS0zOTggICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCi1kZGJhczEwNDEgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NEUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRkYmFzMTA0MiB0b1NjaSAgICAgMS4xMTExMTExMTExMTUyNDQ1RS0zODQgLT4gIDEuMTExMTExMTExMTE1MjRFLTM4NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRiYXMxMDQzIHRvU2NpICAgICAxLjExMTExMTExMTExNTI0NDZFLTM4NCAtPiAgMS4xMTExMTExMTExMTUyNEUtMzg0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci0KLS0tIGNsYW1wZWQgbGFyZ2Ugbm9ybWFscwotZGRiYXMxMDcwIHRvU2NpICAgMUUrMzY5ICAtPiAgMUUrMzY5Ci1kZGJhczEwNzEgdG9TY2kgICAxRSszNzAgIC0+ICAxLjBFKzM3MCAgQ2xhbXBlZAotZGRiYXMxMDcyIHRvU2NpICAgMUUrMzc4ICAtPiAgMS4wMDAwMDAwMDBFKzM3OCAgQ2xhbXBlZAotZGRiYXMxMDczIHRvU2NpICAgMUUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAotZGRiYXMxMDc0IHRvU2NpICAgMUUrMzg1ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KLWRkYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrMzY5ICBDbGFtcGVkCi1kZGJhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTM5OCAgQ2xhbXBlZAotZGRiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSszNjkgIENsYW1wZWQKLWRkYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtMzk4ICBDbGFtcGVkCi0KLS0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcgotZGRiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkYmFzMTEwMiB0b1NjaSAtMUUtNjE0MyAtPiAtMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLWRkYmFzMTEwMyB0b1NjaSAtMUUtNjE3NiAtPiAtMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLWRkYmFzMTEwNCB0b1NjaSAtMCAtPiAtMAotZGRiYXMxMTA1IHRvU2NpICswIC0+ICAwCi1kZGJhczExMDYgdG9TY2kgKzFFLTYxNzYgLT4gIDBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1kZGJhczExMDcgdG9TY2kgKzFFLTYxNzMgLT4gIDBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1kZGJhczExMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZEJhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY0RvdWJsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcg0KKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pDQorDQorLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcNCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsDQorLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlDQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlDQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNEb3VibGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlDQorLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bw0KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLg0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZGRiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwDQorZGRiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxDQorZGRiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjANCitkZGJhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDANCitkZGJhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwDQorZGRiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwDQorZGRiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wDQorZGRiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xDQorZGRiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40DQorZGRiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41DQorZGRiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42DQorZGRiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45DQorZGRiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wDQorZGRiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0DQorZGRiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzDQorZGRiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyDQorZGRiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wDQorZGRiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjANCitkZGJhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDANCisNCitkZGJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTENCitkZGJhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMA0KK2RkYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xDQorZGRiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjENCitkZGJhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExDQorZGRiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5DQorZGRiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5DQorDQorZGRiYXMwMzAgdG9TY2kgICcxMjM0NTY3ODkuMTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkuMTIzNDU2Jw0KK2RkYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcNCitkZGJhczAzMiB0b1NjaSAgICcxMjM0NTY3ODkxMjM0NTYnICAgLT4gJzEyMzQ1Njc4OTEyMzQ1NicNCitkZGJhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDEyMzQ1Njc4OScNCitkZGJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknDQorZGRiYXMwMzUgdG9TY2kgJzAuMDAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcxLjIzNDU2Nzg5RS03Jw0KK2RkYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3ODknICAtPiAnMS4yMzQ1Njc4OUUtOCcNCisNCitkZGJhczAzNyB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDQnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ0Jw0KK2RkYmFzMDM4IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NScgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDUnDQorDQorLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkNCitkZGJzbjAwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkYnNuMDAyIHRvU2NpIC0xRS0zODMgLT4gLTFFLTM4Mw0KK2RkYnNuMDAzIHRvU2NpIC0xRS0zOTggLT4gLTFFLTM5OCBTdWJub3JtYWwNCitkZGJzbjAwNCB0b1NjaSAtMCAtPiAtMA0KK2RkYnNuMDA1IHRvU2NpICswIC0+ICAwDQorZGRic24wMDYgdG9TY2kgKzFFLTM5OCAtPiAgMUUtMzk4IFN1Ym5vcm1hbA0KK2RkYnNuMDA3IHRvU2NpICsxRS0zODMgLT4gIDFFLTM4Mw0KK2RkYnNuMDA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorDQorLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0NCistLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQNCitkZGJhczA0MCB0b1NjaSAiMTIiICAgICAgICAtPiAnMTInDQorZGRiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicNCitkZGJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnDQorZGRiYXMwNDMgdG9TY2kgIisxMi43NiIgICAgLT4gJzEyLjc2Jw0KK2RkYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicNCitkZGJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnDQorZGRiYXMwNDYgdG9TY2kgIjE3LiIgICAgICAgLT4gJzE3Jw0KK2RkYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnDQorZGRiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0Jw0KK2RkYmFzMDQ5IHRvU2NpICIwMDQ0IiAgICAgIC0+ICc0NCcNCitkZGJhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnDQorZGRiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScNCitkZGJhczA1MiB0b1NjaSAiMC4wMDAwMDUiICAgIC0+ICcwLjAwMDAwNScNCitkZGJhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnDQorZGRiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycNCitkZGJhczA1NSB0b1NjaSAiMC4wMDAwMDAwNSIgIC0+ICc1RS04Jw0KK2RkYmFzMDU2IHRvU2NpICIxMjM0NTY3OC41NDMyMTAiIC0+ICcxMjM0NTY3OC41NDMyMTAnDQorZGRiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnDQorZGRiYXMwNTggdG9TY2kgIjM0NTY3OC41NDMyMTAiIC0+ICczNDU2NzguNTQzMjEwJw0KK2RkYmFzMDU5IHRvU2NpICIwMzQ1Njc4LjU0MzIxIiAtPiAnMzQ1Njc4LjU0MzIxJw0KK2RkYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KK2RkYmFzMDYxIHRvU2NpICIrMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCitkZGJhczA2MiB0b1NjaSAiKzAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KK2RkYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJw0KK2RkYmFzMDY0IHRvU2NpICItMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KK2RkYmFzMDY1IHRvU2NpICItMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicNCitkZGJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJw0KKy0tIGV4YW1wbGVzDQorZGRiYXMwNjcgdG9TY2kgIjVFLTYiICAgICAgICAtPiAnMC4wMDAwMDUnDQorZGRiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJw0KK2RkYmFzMDY5IHRvU2NpICI1RS03IiAgICAgICAgLT4gJzVFLTcnDQorDQorLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0NCisNCistLSByb3VuZGVkIHdpdGggZG90cyBpbiBhbGwgKGluY2x1ZGluZyBlZGdlKSBwbGFjZXMNCitkZGJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA3MiB0b1NjaSAgMS4yMzQ1Njc4OTAxMjM0NTYxMjMgIC0+IDEuMjM0NTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDczIHRvU2NpICAxMi4zNDU2Nzg5MDEyMzQ1NjEyMyAgLT4gMTIuMzQ1Njc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2MTIzICAtPiAxMjMuNDU2Nzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA3NSB0b1NjaSAgMTIzNC41Njc4OTAxMjM0NTYxMjMgIC0+IDEyMzQuNTY3ODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDc2IHRvU2NpICAxMjM0NS42Nzg5MDEyMzQ1NjEyMyAgLT4gMTIzNDUuNjc4OTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2MTIzICAtPiAxMjM0NTYuNzg5MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA3OCB0b1NjaSAgMTIzNDU2Ny44OTAxMjM0NTYxMjMgIC0+IDEyMzQ1NjcuODkwMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDc5IHRvU2NpICAxMjM0NTY3OC45MDEyMzQ1NjEyMyAgLT4gMTIzNDU2NzguOTAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2MTIzICAtPiAxMjM0NTY3ODkuMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA4MSB0b1NjaSAgMTIzNDU2Nzg5MC4xMjM0NTYxMjMgIC0+IDEyMzQ1Njc4OTAuMTIzNDU2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDgyIHRvU2NpICAxMjM0NTY3ODkwMS4yMzQ1NjEyMyAgLT4gMTIzNDU2Nzg5MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTAxMi4zNDU2MTIzICAtPiAxMjM0NTY3ODkwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA4NCB0b1NjaSAgMTIzNDU2Nzg5MDEyMy40NTYxMjMgIC0+IDEyMzQ1Njc4OTAxMjMuNDU2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDg1IHRvU2NpICAxMjM0NTY3ODkwMTIzNC41NjEyMyAgLT4gMTIzNDU2Nzg5MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NS42MTIzICAtPiAxMjM0NTY3ODkwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczA4NyB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1Ni4xMjMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDg4IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MS4yMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDg5IHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIuMyAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE3IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkwMTIzNDU2MTIzLiAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzE4IEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKy0tIE51bWJlcnMgd2l0aCBFDQorZGRiYXMxMzAgdG9TY2kgIjAuMDAwRS0xIiAgLT4gJzAuMDAwMCcNCitkZGJhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcNCitkZGJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnDQorZGRiYXMxMzMgdG9TY2kgIjAuMDAwRS00IiAgLT4gJzBFLTcnDQorZGRiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcNCitkZGJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcNCitkZGJhczEzNiB0b1NjaSAiMC4wMEUtNCIgICAtPiAnMC4wMDAwMDAnDQorZGRiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnDQorZGRiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknDQorZGRiYXMxMzkgdG9TY2kgIi0wRSs5IiAgICAgLT4gJy0wRSs5Jw0KK2RkYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KK2RkYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5Jw0KK2RkYmFzMTQyIHRvU2NpICIxRSs5MCIgICAgIC0+ICcxRSs5MCcNCitkZGJhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScNCitkZGJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScNCitkZGJhczE0NSB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScNCitkZGJhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScNCitkZGJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnDQorZGRiYXMxNDggdG9TY2kgIjFFKzAwOSIgICAgLT4gJzFFKzknDQorZGRiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknDQorZGRiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknDQorZGRiYXMxNTEgdG9TY2kgIjFlMDkiICAgICAgLT4gJzFFKzknDQorZGRiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJw0KK2RkYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5Jw0KK2RkYmFzMTU0IHRvU2NpICIwRTkiICAgICAgIC0+ICcwRSs5Jw0KK2RkYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcNCitkZGJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KK2RkYmFzMTU3IHRvU2NpICI0RSs5IiAgICAgIC0+ICc0RSs5Jw0KK2RkYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJw0KK2RkYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnDQorZGRiYXMxNjAgdG9TY2kgIjAwRSs5IiAgICAgLT4gJzBFKzknDQorZGRiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknDQorZGRiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnDQorZGRiYXMxNjMgdG9TY2kgIjEwRSswOSIgICAgLT4gJzEuMEUrMTAnDQorZGRiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnDQorZGRiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnDQorZGRiYXMxNjYgdG9TY2kgIjEwMGUrOSIgICAgLT4gJzEuMDBFKzExJw0KK2RkYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScNCitkZGJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInDQorZGRiYXMxNjkgdG9TY2kgIjEwMGUrMDA5IiAgLT4gJzEuMDBFKzExJw0KKw0KK2RkYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScNCitkZGJhczE3MSB0b1NjaSAiMS4yNjVFLTIwIiAtPiAnMS4yNjVFLTIwJw0KK2RkYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcNCitkZGJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1Jw0KK2RkYmFzMTc0IHRvU2NpICIxLjI2NUUtMyIgIC0+ICcwLjAwMTI2NScNCitkZGJhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScNCitkZGJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1Jw0KK2RkYmFzMTc3IHRvU2NpICIxLjI2NUUtMCIgIC0+ICcxLjI2NScNCitkZGJhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnDQorZGRiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41Jw0KK2RkYmFzMTgwIHRvU2NpICIxLjI2NUUrMyIgIC0+ICcxMjY1Jw0KK2RkYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcNCitkZGJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnDQorZGRiYXMxODMgdG9TY2kgIjEuMjY1RSsyMCIgLT4gJzEuMjY1RSsyMCcNCisNCitkZGJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnDQorZGRiYXMxOTEgdG9TY2kgIjEyLjY1RS0yMCIgLT4gJzEuMjY1RS0xOScNCitkZGJhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnDQorZGRiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1Jw0KK2RkYmFzMTk0IHRvU2NpICIxMi42NUUtMyIgIC0+ICcwLjAxMjY1Jw0KK2RkYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnDQorZGRiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1Jw0KK2RkYmFzMTk3IHRvU2NpICIxMi42NUUtMCIgIC0+ICcxMi42NScNCitkZGJhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnDQorZGRiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnDQorZGRiYXMyMDAgdG9TY2kgIjEyLjY1RSszIiAgLT4gJzEuMjY1RSs0Jw0KK2RkYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScNCitkZGJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknDQorZGRiYXMyMDMgdG9TY2kgIjEyLjY1RSsyMCIgLT4gJzEuMjY1RSsyMScNCisNCitkZGJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnDQorZGRiYXMyMTEgdG9TY2kgIjEyNi41RS0yMCIgLT4gJzEuMjY1RS0xOCcNCitkZGJhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnDQorZGRiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnDQorZGRiYXMyMTQgdG9TY2kgIjEyNi41RS0zIiAgLT4gJzAuMTI2NScNCitkZGJhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnDQorZGRiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1Jw0KK2RkYmFzMjE3IHRvU2NpICIxMjYuNUUtMCIgIC0+ICcxMjYuNScNCitkZGJhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScNCitkZGJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnDQorZGRiYXMyMjAgdG9TY2kgIjEyNi41RSszIiAgLT4gJzEuMjY1RSs1Jw0KK2RkYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicNCitkZGJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJw0KK2RkYmFzMjIzIHRvU2NpICIxMjYuNUUrMjAiIC0+ICcxLjI2NUUrMjInDQorDQorZGRiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScNCitkZGJhczIzMSB0b1NjaSAiMTI2NUUtMjAiIC0+ICcxLjI2NUUtMTcnDQorZGRiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScNCitkZGJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnDQorZGRiYXMyMzQgdG9TY2kgIjEyNjVFLTMiICAtPiAnMS4yNjUnDQorZGRiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnDQorZGRiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnDQorZGRiYXMyMzcgdG9TY2kgIjEyNjVFLTAiICAtPiAnMTI2NScNCitkZGJhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcNCitkZGJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScNCitkZGJhczI0MCB0b1NjaSAiMTI2NUUrMyIgIC0+ICcxLjI2NUUrNicNCitkZGJhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycNCitkZGJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnDQorZGRiYXMyNDMgdG9TY2kgIjEyNjVFKzIwIiAtPiAnMS4yNjVFKzIzJw0KK2RkYmFzMjQ0IHRvU2NpICIxMjY1RS05IiAgLT4gJzAuMDAwMDAxMjY1Jw0KK2RkYmFzMjQ1IHRvU2NpICIxMjY1RS0xMCIgLT4gJzEuMjY1RS03Jw0KK2RkYmFzMjQ2IHRvU2NpICIxMjY1RS0xMSIgLT4gJzEuMjY1RS04Jw0KK2RkYmFzMjQ3IHRvU2NpICIxMjY1RS0xMiIgLT4gJzEuMjY1RS05Jw0KKw0KK2RkYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1Jw0KK2RkYmFzMjUxIHRvU2NpICIwLjEyNjVFLTIwIiAtPiAnMS4yNjVFLTIxJw0KK2RkYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknDQorZGRiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1Jw0KK2RkYmFzMjU0IHRvU2NpICIwLjEyNjVFLTMiICAtPiAnMC4wMDAxMjY1Jw0KK2RkYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnDQorZGRiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1Jw0KK2RkYmFzMjU3IHRvU2NpICIwLjEyNjVFLTAiICAtPiAnMC4xMjY1Jw0KK2RkYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnDQorZGRiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScNCitkZGJhczI2MCB0b1NjaSAiMC4xMjY1RSszIiAgLT4gJzEyNi41Jw0KK2RkYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScNCitkZGJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3Jw0KK2RkYmFzMjYzIHRvU2NpICIwLjEyNjVFKzIwIiAtPiAnMS4yNjVFKzE5Jw0KKw0KKy0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10NCitkZGJhczI5MCB0b1NjaSAiLTAuMDAwRS0xIiAgLT4gJy0wLjAwMDAnDQorZGRiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcNCitkZGJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcNCitkZGJhczI5MyB0b1NjaSAiLTAuMDAwRS00IiAgLT4gJy0wRS03Jw0KK2RkYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcNCitkZGJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJw0KK2RkYmFzMjk2IHRvU2NpICItMC4wRS0yIiAgICAtPiAnLTAuMDAwJw0KK2RkYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcNCitkZGJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJw0KK2RkYmFzMjk5IHRvU2NpICItMEUtMyIgICAgICAtPiAnLTAuMDAwJw0KKw0KKy0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzDQorZGRiYXMzMDEgIHRvU2NpIDEwZTEyICAtPiAxLjBFKzEzDQorZGRiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTINCitkZGJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTINCitkZGJhczMwNCAgdG9FbmcgMTBlMTEgIC0+IDEuMEUrMTINCitkZGJhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTENCitkZGJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQ0KK2RkYmFzMzA3ICB0b1NjaSAxMGU5ICAgLT4gMS4wRSsxMA0KK2RkYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkNCitkZGJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQ0KK2RkYmFzMzEwICB0b0VuZyAxMGU4ICAgLT4gMS4wRSs5DQorZGRiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgNCitkZGJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNg0KK2RkYmFzMzEzICB0b1NjaSAxMGU2ICAgLT4gMS4wRSs3DQorZGRiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNg0KK2RkYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2DQorZGRiYXMzMTYgIHRvRW5nIDEwZTUgICAtPiAxLjBFKzYNCitkZGJhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQ0KK2RkYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszDQorZGRiYXMzMTkgIHRvU2NpIDEwZTMgICAtPiAxLjBFKzQNCitkZGJhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszDQorZGRiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMNCitkZGJhczMyMiAgdG9FbmcgMTBlMiAgIC0+IDEuMEUrMw0KK2RkYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyDQorZGRiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDANCitkZGJhczMyNSAgdG9TY2kgMTBlMCAgIC0+IDEwDQorZGRiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMA0KK2RkYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wDQorZGRiYXMzMjggIHRvRW5nIDEwZS0xICAtPiAxLjANCitkZGJhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTANCitkZGJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTANCitkZGJhczMzMSAgdG9TY2kgMTBlLTMgIC0+IDAuMDEwDQorZGRiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMA0KK2RkYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwDQorZGRiYXMzMzQgIHRvRW5nIDEwZS00ICAtPiAwLjAwMTANCitkZGJhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTANCitkZGJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTANCitkZGJhczMzNyAgdG9TY2kgMTBlLTYgIC0+IDAuMDAwMDEwDQorZGRiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMA0KK2RkYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwDQorZGRiYXMzNDAgIHRvRW5nIDEwZS03ICAtPiAwLjAwMDAwMTANCitkZGJhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNw0KK2RkYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05DQorZGRiYXMzNDMgIHRvU2NpIDEwZS05ICAtPiAxLjBFLTgNCitkZGJhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05DQorZGRiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkNCitkZGJhczM0NiAgdG9FbmcgMTBlLTEwIC0+IDEuMEUtOQ0KK2RkYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMA0KK2RkYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMg0KK2RkYmFzMzQ5ICB0b1NjaSAxMGUtMTIgLT4gMS4wRS0xMQ0KK2RkYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyDQorZGRiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyDQorZGRiYXMzNTIgIHRvRW5nIDEwZS0xMyAtPiAxLjBFLTEyDQorDQorZGRiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyDQorZGRiYXMzNjIgIHRvRW5nIDdFMTIgIC0+IDdFKzEyDQorZGRiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExDQorZGRiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQ0KK2RkYmFzMzY1ICB0b1NjaSA3RTEwICAtPiA3RSsxMA0KK2RkYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQ0KK2RkYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5DQorZGRiYXMzNjggIHRvRW5nIDdFOSAgIC0+IDdFKzkNCitkZGJhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOA0KK2RkYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYNCitkZGJhczM3MSAgdG9TY2kgN0U3ICAgLT4gN0UrNw0KK2RkYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNg0KK2RkYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2DQorZGRiYXMzNzQgIHRvRW5nIDdFNiAgIC0+IDdFKzYNCitkZGJhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQ0KK2RkYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMNCitkZGJhczM3NyAgdG9TY2kgN0U0ICAgLT4gN0UrNA0KK2RkYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMw0KK2RkYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszDQorZGRiYXMzODAgIHRvRW5nIDdFMyAgIC0+IDdFKzMNCitkZGJhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMg0KK2RkYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDANCitkZGJhczM4MyAgdG9TY2kgN0UxICAgLT4gN0UrMQ0KK2RkYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MA0KK2RkYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3DQorZGRiYXMzODYgIHRvRW5nIDdFMCAgIC0+IDcNCitkZGJhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43DQorZGRiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNw0KK2RkYmFzMzg5ICB0b1NjaSA3RS0yICAtPiAwLjA3DQorZGRiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcNCitkZGJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcNCitkZGJhczM5MiAgdG9FbmcgN0UtMyAgLT4gMC4wMDcNCitkZGJhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3DQorZGRiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNw0KK2RkYmFzMzk1ICB0b1NjaSA3RS01ICAtPiAwLjAwMDA3DQorZGRiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcNCitkZGJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcNCitkZGJhczM5OCAgdG9FbmcgN0UtNiAgLT4gMC4wMDAwMDcNCitkZGJhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNw0KK2RkYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkNCitkZGJhczQwMSAgdG9TY2kgN0UtOCAgLT4gN0UtOA0KK2RkYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQ0KK2RkYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05DQorZGRiYXM0MDQgIHRvRW5nIDdFLTkgIC0+IDdFLTkNCitkZGJhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTANCitkZGJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMg0KK2RkYmFzNDA3ICB0b1NjaSA3RS0xMSAtPiA3RS0xMQ0KK2RkYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTINCitkZGJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTINCitkZGJhczQxMCAgdG9FbmcgN0UtMTIgLT4gN0UtMTINCitkZGJhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMNCitkZGJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQ0KKw0KKy0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uDQorcm91bmRpbmc6ICBoYWxmX3VwDQorZGRiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDANCitkZGJhczQyMSAgdG9FbmcgICAgMTAwIC0+IDEwMA0KK2RkYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMA0KK2RkYmFzNDIzICB0b0VuZyAgIDEwMDAgLT4gMTAwMA0KK2RkYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45DQorZGRiYXM0MjUgIHRvRW5nICA5OTkuOSAtPiAgOTk5LjkNCitkZGJhczQyNiAgdG9TY2kgMTAwMC4wIC0+IDEwMDAuMA0KK2RkYmFzNDI3ICB0b0VuZyAxMDAwLjAgLT4gMTAwMC4wDQorZGRiYXM0MjggIHRvU2NpIDEwMDAuMSAtPiAxMDAwLjENCitkZGJhczQyOSAgdG9FbmcgMTAwMC4xIC0+IDEwMDAuMQ0KK2RkYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMA0KK2RkYmFzNDMxICB0b0VuZyAxMDAwMCAtPiAxMDAwMA0KK2RkYmFzNDMyICB0b1NjaSAxMDAwMDAgLT4gMTAwMDAwDQorZGRiYXM0MzMgIHRvRW5nIDEwMDAwMCAtPiAxMDAwMDANCitkZGJhczQzNCAgdG9TY2kgMTAwMDAwMCAtPiAxMDAwMDAwDQorZGRiYXM0MzUgIHRvRW5nIDEwMDAwMDAgLT4gMTAwMDAwMA0KK2RkYmFzNDM2ICB0b1NjaSAxMDAwMDAwMCAtPiAxMDAwMDAwMA0KK2RkYmFzNDM3ICB0b0VuZyAxMDAwMDAwMCAtPiAxMDAwMDAwMA0KK2RkYmFzNDM4ICB0b1NjaSAxMDAwMDAwMDAgLT4gMTAwMDAwMDAwDQorZGRiYXM0MzkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KK2RkYmFzNDQwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkDQorZGRiYXM0NDEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQNCitkZGJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDEgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NDMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAxICAgIC0+IDEwLjAwMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDQ0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ0NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NDYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA1ICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDQ3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwNSAgICAtPiAxMC4wMDAwMDAwMDAwMDAwMUUrMTUgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE3ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NDkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEwMC4wMDAwMDAwMDAwMDAxRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDUwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ1MSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NTIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQNCitkZGJhczQ1MyAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZA0KK2RkYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ1NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDAzICAgLT4gMTAwLjAwMDAwMDAwMDAwMDBFKzE1ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDU3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDUgICAtPiAxMDAuMDAwMDAwMDAwMDAwMEUrMTUgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ1OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDA5ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NTkgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEwMC4wMDAwMDAwMDAwMDAwRSsxNSAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkDQorZGRiYXM0NjEgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQNCitkZGJhczQ2MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDMwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NjMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ2NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDUwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NjYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDA5MDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDY3ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTggICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ2OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzE5ICAgUm91bmRlZA0KK2RkYmFzNDY5ICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkDQorZGRiYXM0NzAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAzMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSsxOSAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDcxICB0b0VuZyAxMDAwMDAwMDAwMDAwMDAwMzAwMCAtPiAxMC4wMDAwMDAwMDAwMDAwMEUrMTggICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFKzE5ICAgUm91bmRlZCBJbmV4YWN0DQorZGRiYXM0NzMgIHRvRW5nIDEwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEwLjAwMDAwMDAwMDAwMDAxRSsxOCAgIFJvdW5kZWQgSW5leGFjdA0KK2RkYmFzNDc0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMUUrMTkgICBSb3VuZGVkIEluZXhhY3QNCitkZGJhczQ3NSAgdG9FbmcgMTAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMTAuMDAwMDAwMDAwMDAwMDFFKzE4ICAgUm91bmRlZCBJbmV4YWN0DQorDQorLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkDQorcm91bmRpbmc6ICBjZWlsaW5nDQorZGRic3I0MDEgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZGRic3I0MDIgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNDA0ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICB1cA0KK2RkYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNDA2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MDcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgZmxvb3INCitkZGJzcjQxMCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkZGJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNDEyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MTMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZG93bg0KK2RkYnNyNDE1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNDE2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQxOCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNDE5ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitkZGJzcjQyMSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkZGJzcjQyMiAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MjQgIHRvU2NpICAxLjExMTExMTExMTExMjM0NjUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQyNSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgZG93bg0KK2RkYnNyNDI2ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNDI3ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQyOSAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl91cA0KK2RkYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNDMyICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I0MzMgIHRvU2NpICAxLjExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNDM1ICB0b1NjaSAgMS4xMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorLS0gbmVnYXRpdmVzDQorcm91bmRpbmc6ICBjZWlsaW5nDQorZGRic3I1MDEgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZGRic3I1MDIgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNTA0ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICB1cA0KK2RkYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNTA2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MDcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgZmxvb3INCitkZGJzcjUxMCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkZGJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNTEyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MTMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZG93bg0KK2RkYnNyNTE1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNTE2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUxOCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNTE5ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitkZGJzcjUyMSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkZGJzcjUyMiAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MjQgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NjUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUyNSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgZG93bg0KK2RkYnNyNTI2ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNTI3ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUyOSAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl91cA0KK2RkYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RkYnNyNTMyICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZGRic3I1MzMgIHRvU2NpIC0xLjExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkZGJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdA0KK2RkYnNyNTM1ICB0b1NjaSAtMS4xMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzDQorZGRiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDEgdG9TY2kgJy4nICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDQgdG9TY2kgJy0tMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDcgdG9TY2kgJzEyZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTAgdG9TY2kgJyArMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTMgdG9TY2kgJyArIDEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTYgdG9TY2kgJy0xLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MTkgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjIgdG9TY2kgJzdlMTIzNTY3ODkweCcgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjUgdG9TY2kgJ2UxMDAnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjggdG9TY2kgJzEyMyw2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzEgdG9TY2kgJzAxLjM1LicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzQgdG9TY2kgJy4wMDAwLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzcgdG9TY2kgJzExMWUxMjMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDAgdG9TY2kgJzExMWUxKjIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDMgdG9TY2kgJzFlMTIzZScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDYgdG9TY2kgJzFlLjEnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NDkgdG9TY2kgJ2UrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTIgdG9TY2kgJzFFKzEuMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTUgdG9TY2kgJzFFLS0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTggdG9TY2kgJzFFJycxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorLS0gTmVhci1zcGVjaWFscw0KK2RkYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTYzIHRvU2NpICJOYU5zIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY2IHRvU2NpICJJbmZpbmkiICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTY5IHRvU2NpICIwSW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTcyIHRvU2NpICItOUluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTc1IHRvU2NpICIwc05hTiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KKy0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscw0KK2RkYmFzNTc2IHRvU2NpICAnZSsxJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTc5IHRvU2NpICAnLS5lKycgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTgyIHRvU2NpICAnLkUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTg1IHRvU2NpICAnLS5FJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCisNCitkZGJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1ODcgdG9TY2kgICctLk5hTicgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZGRiYXM1OTAgdG9TY2kgICcuSW5maW5pdHknICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KKy0tIFplcm9zDQorZGRiYXM2MDEgdG9TY2kgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQ0KK2RkYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgNCitkZGJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03DQorZGRiYXM2MDQgdG9TY2kgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCitkZGJhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwDQorZGRiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQorZGRiYXM2MDcgdG9TY2kgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCitkZGJhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwDQorZGRiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQorZGRiYXM2MTAgdG9TY2kgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQorZGRiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMA0KK2RkYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCitkZGJhczYxMyB0b1NjaSAtMC4gICAgICAgICAgICAgICAtPiAtMA0KK2RkYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjANCitkZGJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KK2RkYmFzNjE2IHRvU2NpIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KK2RkYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDANCitkZGJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KK2RkYmFzNjE5IHRvU2NpIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KK2RkYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03DQorZGRiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgNCitkZGJhczYyMiB0b1NjaSAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KKw0KK2RkYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCitkZGJhczYzMSB0b1NjaSAgMC4wMEUrMSAgICAgICAgICAtPiAwLjANCitkZGJhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwDQorZGRiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQ0KK2RkYmFzNjM0IHRvU2NpICAwLjAwRSs0ICAgICAgICAgIC0+IDBFKzINCitkZGJhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszDQorZGRiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNA0KK2RkYmFzNjM3IHRvU2NpICAwLjAwRSs3ICAgICAgICAgIC0+IDBFKzUNCitkZGJhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQorZGRiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNw0KKw0KK2RkYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KK2RkYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDANCitkZGJhczY0MiB0b1NjaSAgMC4wRSsyICAgICAgICAgICAtPiAwRSsxDQorZGRiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMg0KK2RkYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCitkZGJhczY0NSB0b1NjaSAgMC4wRSs1ICAgICAgICAgICAtPiAwRSs0DQorZGRiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQ0KK2RkYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYNCitkZGJhczY0OCB0b1NjaSAgMC4wRSs4ICAgICAgICAgICAtPiAwRSs3DQorZGRiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOA0KKw0KK2RkYmFzNjUwIHRvU2NpICAwRSswICAgICAgICAgICAgIC0+IDANCitkZGJhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxDQorZGRiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMg0KK2RkYmFzNjUzIHRvU2NpICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCitkZGJhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0DQorZGRiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQ0KK2RkYmFzNjU2IHRvU2NpICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYNCitkZGJhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3DQorZGRiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOA0KK2RkYmFzNjU5IHRvU2NpICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCisNCitkZGJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjANCitkZGJhczY2MSB0b1NjaSAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQorZGRiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCitkZGJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDANCitkZGJhczY2NCB0b1NjaSAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQorZGRiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCitkZGJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03DQorZGRiYXM2NjcgdG9TY2kgIDAuMEUtNyAgICAgICAgICAgLT4gMEUtOA0KK2RkYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCitkZGJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMA0KKw0KK2RkYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCitkZGJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KK2RkYmFzNjcyIHRvU2NpICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMA0KK2RkYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCitkZGJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RkYmFzNjc1IHRvU2NpICAwLjAwRS01ICAgICAgICAgIC0+IDBFLTcNCitkZGJhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04DQorZGRiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KK2RkYmFzNjc4IHRvU2NpICAwLjAwRS04ICAgICAgICAgIC0+IDBFLTEwDQorZGRiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTENCisNCitkZGJhczY4MCB0b1NjaSAgMDAwMDAwLiAgICAgICAgICAtPiAgMA0KK2RkYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwDQorZGRiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDANCitkZGJhczY4MyB0b1NjaSAgICAgMDAwLiAgICAgICAgICAtPiAgMA0KK2RkYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwDQorZGRiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDANCitkZGJhczY4NiB0b1NjaSAgKzAwMDAwLiAgICAgICAgICAtPiAgMA0KK2RkYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wDQorZGRiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDANCitkZGJhczY4OSB0b1NjaSAgLTAuICAgICAgICAgICAgICAtPiAtMA0KKw0KKy0tIFNwZWNpYWxzDQorZGRiYXM3MDAgdG9TY2kgIk5hTiIgICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDMgdG9TY2kgIk5BTiIgICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDYgdG9TY2kgIituQW4iICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFODQorZGRiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTg0KK2RkYmFzNzA5IHRvU2NpICItbmFuIiAgICAgICAgICAgIC0+IC1OYU4NCitkZGJhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFODQorZGRiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTg0KK2RkYmFzNzEyIHRvU2NpICdOYU4wJyAgICAgICAgICAgIC0+IE5hTg0KK2RkYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjENCitkZGJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMg0KK2RkYmFzNzE1IHRvU2NpICdOYU4xMjMnICAgICAgICAgIC0+IE5hTjEyMw0KK2RkYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQNCitkZGJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xDQorZGRiYXM3MTggdG9TY2kgJ05hTjAxMicgICAgICAgICAgLT4gTmFOMTINCitkZGJhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMNCitkZGJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0DQorZGRiYXM3MjEgdG9TY2kgJ05hTjAwMScgICAgICAgICAgLT4gTmFOMQ0KK2RkYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyDQorZGRiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzDQorZGRiYXM3MjQgdG9TY2kgJ05hTjAwMTIzNCcgICAgICAgLT4gTmFOMTIzNA0KK2RkYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczcyNyB0b1NjaSAnTmFOMTIuNDUnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkZGJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCisNCitkZGJhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFODQorZGRiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzNzMyIHRvU2NpICJTbkFuIiAgICAgICAgICAgIC0+IHNOYU4NCitkZGJhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFODQorZGRiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzNzM1IHRvU2NpICIrc25hbiIgICAgICAgICAgIC0+IHNOYU4NCitkZGJhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFODQorZGRiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzNzM4IHRvU2NpICItc05hTiIgICAgICAgICAgIC0+IC1zTmFODQorZGRiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4NCitkZGJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTg0KK2RkYmFzNzQxIHRvU2NpICItU05BTiIgICAgICAgICAgIC0+IC1zTmFODQorZGRiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTg0KK2RkYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43DQorZGRiYXM3NDQgdG9TY2kgJ3NOYU4wMDcyMzQnICAgICAgLT4gc05hTjcyMzQNCitkZGJhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RkYmFzNzQ3IHRvU2NpICdzTmFOLTcyJyAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KK2RkYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NDkgdG9TY2kgImluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkZGJhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NTIgdG9TY2kgIitJbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkZGJhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NTUgdG9TY2kgIitJTkYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkZGJhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitkZGJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitkZGJhczc1OCB0b1NjaSAiLWlOZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitkZGJhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkNCisNCitkZGJhczc2MCB0b1NjaSAiSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkNCitkZGJhczc2MyB0b1NjaSAiSU5GSU5JVFkiICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCitkZGJhczc2NiB0b1NjaSAiK2lOZkluSXRZIiAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5DQorZGRiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQorZGRiYXM3NjkgdG9TY2kgIi1pbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5DQorZGRiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5DQorZGRiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5DQorDQorLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZw0KK2RkYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0NzczIHRvRW5nICItSW5maW5pdHkiICAgICAgICAtPiAtSW5maW5pdHkNCitkZGJhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFODQorZGRiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFODQorZGRiYXN0Nzc2IHRvRW5nICIrSW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0NzgwIHRvRW5nICJJTkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0NzgzIHRvRW5nICJpbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0Nzg2IHRvRW5nICJJbkZJTklUWSIgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0Nzg5IHRvRW5nICJpTmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTg0KK2RkYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFODQorZGRiYXN0NzkyIHRvRW5nICJJbmZpbml0eSIgICAgICAgICAtPiBJbmZpbml0eQ0KK2RkYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTg0KKw0KKy0tIFplcm8gdG9FbmcsIGV0Yy4NCitkZGJhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQ0KKw0KK2RkYmFzdDgwMSB0b0VuZyAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQorZGRiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYNCitkZGJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02DQorZGRiYXN0ODA0IHRvRW5nIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwDQorZGRiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCitkZGJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwDQorZGRiYXN0ODA3IHRvRW5nIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwDQorZGRiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCitkZGJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wDQorZGRiYXN0ODEwIHRvRW5nICAuMCAgICAgICAgICAgICAgIC0+IDAuMA0KK2RkYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwDQorZGRiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjANCitkZGJhc3Q4MTMgdG9FbmcgLTAuICAgICAgICAgICAgICAgLT4gLTANCitkZGJhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KK2RkYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMA0KK2RkYmFzdDgxNiB0b0VuZyAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDANCitkZGJhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KK2RkYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMA0KK2RkYmFzdDgxOSB0b0VuZyAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDANCitkZGJhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNg0KK2RkYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNg0KK2RkYmFzdDgyMiB0b0VuZyAtMC4wMDAwMDAwMDAgICAgICAtPiAtMEUtOQ0KKw0KK2RkYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwDQorZGRiYXN0ODMxIHRvRW5nICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KK2RkYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwDQorZGRiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMNCitkZGJhc3Q4MzQgdG9FbmcgIDAuMDBFKzQgICAgICAgICAgLT4gMC4wRSszDQorZGRiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCitkZGJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNg0KK2RkYmFzdDgzNyB0b0VuZyAgMC4wMEUrNyAgICAgICAgICAtPiAwLjBFKzYNCitkZGJhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNg0KK2RkYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5DQorDQorZGRiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMA0KK2RkYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwDQorZGRiYXN0ODQyIHRvRW5nICAwLjBFKzIgICAgICAgICAgIC0+IDAuMDBFKzMNCitkZGJhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszDQorZGRiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMNCitkZGJhc3Q4NDUgdG9FbmcgIDAuMEUrNSAgICAgICAgICAgLT4gMC4wMEUrNg0KK2RkYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYNCitkZGJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KK2RkYmFzdDg0OCB0b0VuZyAgMC4wRSs4ICAgICAgICAgICAtPiAwLjAwRSs5DQorZGRiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQ0KKw0KK2RkYmFzdDg1MCB0b0VuZyAgMEUrMCAgICAgICAgICAgICAtPiAwDQorZGRiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMNCitkZGJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszDQorZGRiYXN0ODUzIHRvRW5nICAwRSszICAgICAgICAgICAgIC0+IDBFKzMNCitkZGJhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNg0KK2RkYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYNCitkZGJhc3Q4NTYgdG9FbmcgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KK2RkYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5DQorZGRiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQ0KK2RkYmFzdDg1OSB0b0VuZyAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5DQorDQorZGRiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KK2RkYmFzdDg2MSB0b0VuZyAgMC4wRS0xICAgICAgICAgICAtPiAwLjAwDQorZGRiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwDQorZGRiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KK2RkYmFzdDg2NCB0b0VuZyAgMC4wRS00ICAgICAgICAgICAtPiAwLjAwMDAwDQorZGRiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwDQorZGRiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNg0KK2RkYmFzdDg2NyB0b0VuZyAgMC4wRS03ICAgICAgICAgICAtPiAwLjAwRS02DQorZGRiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkNCitkZGJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05DQorDQorZGRiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDANCitkZGJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDANCitkZGJhc3Q4NzIgdG9FbmcgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQorZGRiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDANCitkZGJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDANCitkZGJhc3Q4NzUgdG9FbmcgIDAuMDBFLTUgICAgICAgICAgLT4gMC4wRS02DQorZGRiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYNCitkZGJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQ0KK2RkYmFzdDg3OCB0b0VuZyAgMC4wMEUtOCAgICAgICAgICAtPiAwLjBFLTkNCitkZGJhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQ0KKw0KKy0tIGxvbmcgaW5wdXQgc3RyaW5ncw0KK2RkYmFzODAxIHRvc2NpICcwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCitkZGJhczgwMyB0b3NjaSAnMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODA0IHRvc2NpICcwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCitkZGJhczgwNiB0b3NjaSAnMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODA3IHRvc2NpICcwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCitkZGJhczgwOSB0b3NjaSAnMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KKw0KK2RkYmFzODExIHRvc2NpICcwLjEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODEyIHRvc2NpICcwLjAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAxMjM0NTY3ODkwMTIzNDU2DQorZGRiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODE0IHRvc2NpICcwLjAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODE1IHRvc2NpICcwLjAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAxMjM0NTY3ODkwMTIzNDU2DQorZGRiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkYmFzODE3IHRvc2NpICcwLjAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS03DQorZGRiYXM4MTggdG9zY2kgJzAuMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS04DQorZGRiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQ0KK2RkYmFzODIwIHRvc2NpICcwLjAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS0xMA0KKw0KK2RkYmFzODIxIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzE5IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzODIyIHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMCBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczgyMyB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIxIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzODI0IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzIyIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzODI1IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyMyBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczgyNiB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NScgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI0IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzODI3IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI1IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzODI4IHRvc2NpICcxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjcnIC0+IDEuMjM0NTY3ODkwMTIzNDU3RSsyNiBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OCcgLT4gMS4yMzQ1Njc4OTAxMjM0NTdFKzI3IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cw0KK2RkYmFzOTA2IHRvU2NpICc5OWU5OTk5OTk5OTknICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzOTEwIHRvU2NpICcwLjFlMTAwMDAwMDAwMCcgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzOTEyIHRvU2NpICcwLjllOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzOTE2IHRvU2NpICcxMTExZS05OTk5OTk5OTk5OScgIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KKy0tIG5lZ2F0aXZlcyB0aGUgc2FtZQ0KK2RkYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkyMCB0b1NjaSAnLTAuOWUtOTk5OTk5OTk5JyAgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczkyOSB0b1NjaSAnLTdlMTAwMDAwMDAwMCcgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzDQorcm91bmRpbmc6ICBjZWlsaW5nDQorZGRiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICB1cA0KK2RkYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogIGRvd24NCitkZGJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MzUgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiAgZmxvb3INCitkZGJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZGRiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogIGhhbGZfdXANCitkZGJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitkZGJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2Rvd24NCitkZGJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RkYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCisNCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMA0KK2RkYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMNCitkZGJlbTQwMSB0b1NjaSAgMC4xRS0zOTQgICAgICAgIC0+IDFFLTM5NSAgICAgICBTdWJub3JtYWwNCitkZGJlbTQwMiB0b1NjaSAgMC4xMDAwRS0zOTQgICAgIC0+IDEuMDAwRS0zOTUgICBTdWJub3JtYWwNCitkZGJlbTQwMyB0b1NjaSAgMC4wMTAwRS0zOTQgICAgIC0+IDEuMDBFLTM5NiAgICBTdWJub3JtYWwNCitkZGJlbTQwNCB0b1NjaSAgMC4wMDEwRS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgICBTdWJub3JtYWwNCitkZGJlbTQwNSB0b1NjaSAgMC4wMDAxRS0zOTQgICAgIC0+IDFFLTM5OCAgICAgICBTdWJub3JtYWwNCitkZGJlbTQwNiB0b1NjaSAgMC4wMDAxMEUtMzk0ICAgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkZGJlbTQwNyB0b1NjaSAgMC4wMDAxM0UtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQwOSB0b1NjaSAgMC4wMDAxN0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxMCB0b1NjaSAgMC4wMDAyM0UtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtMzk0ICAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxMiB0b1NjaSAgMC4wMDAyN0UtMzk0ICAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTM5NCAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxNSB0b1NjaSAgMC4wMDAxNTFFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTM5NCAgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxOCB0b1NjaSAgMC4wMDAyNTFFLTM5NCAgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQxOSB0b1NjaSAgMC4wMDAwOUUtMzk0ICAgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtMzk0ICAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmVtNDIxIHRvU2NpICAwLjAwMDAzRS0zOTQgICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS0zOTQgICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTM5NCAgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmVtNDI0IHRvU2NpICAwLjAwMDAwM0UtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZGRiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS0zOTQgICAtPiAxLjBFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS0zOTQgICAtPiAxLjFFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS0zOTQgICAtPiAxLjJFLTM5NyAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS0zOTQgICAtPiAxLjAwRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS0zOTQgICAtPiAxLjAxRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS0zOTQgICAtPiAxLjAyRS0zOTYgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTM5NCAgICAtPiAxLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTM5NCAgICAtPiAxLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTM5NCAgICAtPiAxLjAxMkUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTM5NSAgIC0+IDEuMTA3RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkYmVtNDUyIHRvU2NpICAxLjEwNzcwRS0zOTUgICAtPiAxLjEwOEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTM5NSAgIC0+IDEuMTA4RS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtMzk1ICAgLT4gMS4xMDhFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkYmVtNDU1IHRvU2NpICAxLjEwODcwRS0zOTUgICAtPiAxLjEwOUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbWFrZSBzdXJlIHNpZ24gT0sNCitkZGJlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTM5NCAgIC0+IC0xLjAxMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS0zOTQgICAtPiAtMS4wMTBFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtMzk0ICAgLT4gLTEuMDExRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTM5NCAgIC0+IC0xLjAxMUUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS0zOTQgICAtPiAtMS4wMTJFLTM5NSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtMzk0ICAgLT4gLTEuMDEyRS0zOTUgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAnOTk5cycgY2FzZXMNCitkZGJlbTQ2NCB0b1NjaSAgOTk5OTk5RS0zOTUgICAgICAgICAtPiA5Ljk5OTk5RS0zOTAgU3Vibm9ybWFsDQorZGRiZW00NjUgdG9TY2kgIDk5OTk5LjBFLTM5NCAgICAgICAgLT4gOS45OTk5MEUtMzkwIFN1Ym5vcm1hbA0KK2RkYmVtNDY2IHRvU2NpICA5OTk5OS5FLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkwICBTdWJub3JtYWwNCitkZGJlbTQ2NyB0b1NjaSAgOTk5OS45RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5MSAgU3Vibm9ybWFsDQorZGRiZW00NjggdG9TY2kgIDk5OS45OUUtMzk0ICAgICAgICAgLT4gOS45OTk5RS0zOTIgIFN1Ym5vcm1hbA0KK2RkYmVtNDY5IHRvU2NpICA5OS45OTlFLTM5NCAgICAgICAgIC0+IDkuOTk5OUUtMzkzICBTdWJub3JtYWwNCitkZGJlbTQ3MCB0b1NjaSAgOS45OTk5RS0zOTQgICAgICAgICAtPiA5Ljk5OTlFLTM5NCAgU3Vibm9ybWFsDQorZGRiZW00NzEgdG9TY2kgIDAuOTk5OTlFLTM5NCAgICAgICAgLT4gMS4wMDAwRS0zOTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQ3MiB0b1NjaSAgMC4wOTk5OTlFLTM5NCAgICAgICAtPiAxLjAwMEUtMzk1IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtMzk0ICAgICAgLT4gMS4wMEUtMzk2ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS0zOTQgICAgIC0+IDEuMEUtMzk3ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGJlbTQ3NSB0b1NjaSAgMC4wMDAwOTk5OTlFLTM5NCAgICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtMzk0ICAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTM5NCAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiZW00NzggdG9TY2kgIDAuMDAwMDAwMDk5OTk5RS0zOTQgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zDQorZGRiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzMTAwOSB0b1NjaSAgMWUtMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtMzk4ICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGJhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkYmFzMTAxMiB0b1NjaSAgMWUtMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCitkZGJhczEwNDEgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NEUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkZGJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NUUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkZGJhczEwNDMgdG9TY2kgICAgIDEuMTExMTExMTExMTE1MjQ0NkUtMzg0IC0+ICAxLjExMTExMTExMTExNTI0RS0zODQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBjbGFtcGVkIGxhcmdlIG5vcm1hbHMNCitkZGJhczEwNzAgdG9TY2kgICAxRSszNjkgIC0+ICAxRSszNjkNCitkZGJhczEwNzEgdG9TY2kgICAxRSszNzAgIC0+ICAxLjBFKzM3MCAgQ2xhbXBlZA0KK2RkYmFzMTA3MiB0b1NjaSAgIDFFKzM3OCAgLT4gIDEuMDAwMDAwMDAwRSszNzggIENsYW1wZWQNCitkZGJhczEwNzMgdG9TY2kgICAxRSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQorZGRiYXMxMDc0IHRvU2NpICAgMUUrMzg1ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0NCitkZGJhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzM2OSAgQ2xhbXBlZA0KK2RkYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMzk4ICBDbGFtcGVkDQorZGRiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSszNjkgIENsYW1wZWQNCitkZGJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTM5OCAgQ2xhbXBlZA0KKw0KKy0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcg0KK2RkYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRiYXMxMTAyIHRvU2NpIC0xRS02MTQzIC0+IC0wRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2RkYmFzMTEwMyB0b1NjaSAtMUUtNjE3NiAtPiAtMEUtMzk4IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitkZGJhczExMDQgdG9TY2kgLTAgLT4gLTANCitkZGJhczExMDUgdG9TY2kgKzAgLT4gIDANCitkZGJhczExMDYgdG9TY2kgKzFFLTYxNzYgLT4gIDBFLTM5OCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZGRiYXMxMTA3IHRvU2NpICsxRS02MTczIC0+ICAwRS0zOTggSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2RkYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2Fub25pY2FsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdAppbmRleCBiNGY5ZTMyLi44MjRkZTgzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDYW5vbmljYWwuZGVjVGVzdApAQCAtMSwzNTcgKzEsMzU3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ2Fub25pY2FsLmRlY1Rlc3QgLS0gdGVzdCBkZWNEb3VibGUgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzCi0tLSB1bmNoYW5nZWQsIGFuZCB2aWNlIHZlcnNhCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6Ci0tLSAgIGE9MSwyLDMKLS0tICAgYj02LDcsZSxmCi0tLSAgIGM9ZSxmCi0KLS0tIGFzc2VydCBzb21lIHN0YW5kYXJkIChjYW5vbmljYWwpIHZhbHVlczsgdGhpcyB0ZXN0cyB0aGF0IEZyb21TdHJpbmcKLS0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQotZGRjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGRjYW4wMDIgYXBwbHkgMCAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMAotZGRjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMQotZGRjYW4wMDQgYXBwbHkgLTEgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQotZGRjYW4wMDUgYXBwbHkgSW5maW5pdHkgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAotZGRjYW4wMDcgYXBwbHkgLU5hTiAgICAgICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMAotZGRjYW4wMDggYXBwbHkgLXNOYU4gICAgICAgICAgICAgICAgICAtPiAjZmUwMDAwMDAwMDAwMDAwMAotZGRjYW4wMDkgYXBwbHkgTmFOOTk5OTk5OTk5OTk5OTk5ICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OSAgICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZgotZGRjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDNkMAotZGRjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDBmZgotCi0tLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yCi0tLSBwcm9wYWdhdGlvbiBpcyB0ZXN0ZWQgbGF0ZXIpCi0KLS0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQKLWRkY2FuMDIxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjAyMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGRjYW4wMjMgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMDI0IGNhbm9uaWNhbCAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjAyNSBjYW5vbmljYWwgICM3N2ZjZmZmZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGRjYW4wMjYgY2Fub25pY2FsICAjNzdmY2ZmZmZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMDI3IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjAyOCBjYW5vbmljYWwgICM3N2ZjZmYzZmZmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGRjYW4wMzAgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMDMxIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmZmZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjAzMiBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmZmZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGRjYW4wMzMgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmZmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMDM1IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjAzNiBjYW5vbmljYWwgICM3N2ZjZmYzZmVmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAotZGRjYW4xMDAgY2Fub25pY2FsICBOYU45OTk5OTk5OTk5OTk5OTkgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTAxIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEwMiBjYW5vbmljYWwgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMDMgY2Fub25pY2FsICAjN2MwMGZmZmZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTA0IGNhbm9uaWNhbCAgIzdjMDBmZjNmZmZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEwNSBjYW5vbmljYWwgICM3YzAwZmYzZmNmZmZmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMDYgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTA3IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KLWRkY2FuMTEwIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjExMiBjYW5vbmljYWwgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMTMgY2Fub25pY2FsICAjN2M4MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTE0IGNhbm9uaWNhbCAgIzdjNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjExNSBjYW5vbmljYWwgICM3YzIwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMTYgY2Fub25pY2FsICAjN2MxMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTE3IGNhbm9uaWNhbCAgIzdjMDhmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjExOCBjYW5vbmljYWwgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKLWRkY2FuMTIwIGNhbm9uaWNhbCBzTmFOOTk5OTk5OTk5OTk5OTk5IC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEyMSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMjIgY2Fub25pY2FsICAjN2UwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTIzIGNhbm9uaWNhbCAgIzdlMDBmZmZmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEyNCBjYW5vbmljYWwgICM3ZTAwZmYzZmZmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMjUgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEyNyBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZjNmZmZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZGRjYW4xMzAgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTMyIGNhbm9uaWNhbCAgIzdmMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEzMyBjYW5vbmljYWwgICM3ZTgwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMzQgY2Fub25pY2FsICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTM1IGNhbm9uaWNhbCAgIzdlMjBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi1kZGNhbjEzNiBjYW5vbmljYWwgICM3ZTEwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZgotZGRjYW4xMzcgY2Fub25pY2FsICAjN2UwOGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMTM4IGNhbm9uaWNhbCAgIzdlMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmCi0KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKLWRkY2FuMTQwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE0MSBjYW5vbmljYWwgICM3OTAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNDIgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTQzIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE0NCBjYW5vbmljYWwgICM3ODQwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNDUgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE0NyBjYW5vbmljYWwgICM3ODA4MDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNDggY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpCi1kZGNhbjE1MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNTEgY2Fub25pY2FsICAjNzgwMjAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE1MyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNTQgY2Fub25pY2FsICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE1NiBjYW5vbmljYWwgICM3ODAwMDAyMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNTcgY2Fub25pY2FsICAjNzgwMDAwMDQwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE1OSBjYW5vbmljYWwgICM3ODAwMDAwMDA4MDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNjAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDQwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE2MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDA4MDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4xNjMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDIwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjE2NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDA4ICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotCi0KLS0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8KLS0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzCi0KLS0tLS0tIEFkZDoKLS0tIEZpbml0ZXM6IG5ldXRyYWwgMAotZGRjYW4yMDIgYWRkICAwRSszODQgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZGNhbjIwMyBhZGQgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLS0tIHRpbnkgemVybwotZGRjYW4yMDQgYWRkICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKLWRkY2FuMjA1IGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCi0tLSB0aW55IG5vbiB6ZXJvCi1kZGNhbjIwNiBhZGQgLTFFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAotZGRjYW4yMDcgYWRkICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kZGNhbjIxMSBhZGQgIDAgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMjEyIGFkZCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kZGNhbjIxMyBhZGQgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMjE0IGFkZCAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kZGNhbjIxNSBhZGQgIDAgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLWRkY2FuMjE2IGFkZCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZGRjYW4yMTcgYWRkICAwICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kZGNhbjIxOCBhZGQgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKLWRkY2FuMjIwIGFkZCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4yMjEgYWRkICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kZGNhbjIyMiBhZGQgIDAgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4yMjMgYWRkICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjIyNSBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAxICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW4yMjYgYWRkICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMjI3IGFkZCAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi0KLS0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdCi0KLS0tLS0tIENvbXBhcmU6Ci1kZGNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDEKLWRkY2FuMjMyIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMAotZGRjYW4yMzMgY29tcGFyZSAgMSAgICAtSW5mICAgLT4gICMyMjM4MDAwMDAwMDAwMDAxCi1kZGNhbjIzNCBjb21wYXJlICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjIzNSBjb21wYXJlICAjN2UwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLS0tLSBDb21wYXJlU2lnOgotZGRjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjM4MDAwMDAwMDAwMDAxCi1kZGNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDAKLWRkY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMQotZGRjYW4yNDQgY29tcGFyZXNpZyAgIzdjMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KLS0tIGZpbml0ZXMKLWRkY2FuMjUwIGNvcHkgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgotZGRjYW4yNTEgY29weSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCi0tLSBOYU5zCi1kZGNhbjI1MiBjb3B5ICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKLWRkY2FuMjUzIGNvcHkgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgotZGRjYW4yNTQgY29weSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCi1kZGNhbjI1NSBjb3B5ICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKLS0tIHNOYU4KLWRkY2FuMjU2IGNvcHkgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgotZGRjYW4yNTcgY29weSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCi0tLSBJbmYKLWRkY2FuMjU4IGNvcHkgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAotZGRjYW4yNTkgY29weSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCi0KLS0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KLS0tIGZpbml0ZXMKLWRkY2FuMjYwIGNvcHlhYnMgICNmN2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZgotZGRjYW4yNjEgY29weWFicyAgI2Y3ZmNmZjNmZGZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmRmZjNmY2ZmCi0tLSBOYU5zCi1kZGNhbjI2MiBjb3B5YWJzICAjZmMwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYKLWRkY2FuMjYzIGNvcHlhYnMgICNmYzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmZmZgotZGRjYW4yNjQgY29weWFicyAgI2ZkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmCi1kZGNhbjI2NSBjb3B5YWJzICAjZmMwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYKLS0tIHNOYU4KLWRkY2FuMjY2IGNvcHlhYnMgICNmZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZgotZGRjYW4yNjcgY29weWFicyAgI2ZlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmCi0tLSBJbmYKLWRkY2FuMjY4IGNvcHlhYnMgICNmYTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMAotZGRjYW4yNjkgY29weWFicyAgI2Y4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwCi0KLS0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KLS0tIGZpbml0ZXMKLWRkY2FuMjcwIGNvcHluZWdhdGUgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjZjdmZmZmM2ZjZmYzZmNmZgotZGRjYW4yNzEgY29weW5lZ2F0ZSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICNmN2ZjZmYzZmRmZjNmY2ZmCi0tLSBOYU5zCi1kZGNhbjI3MiBjb3B5bmVnYXRlICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDNmZjNmY2ZmM2ZjZmYKLWRkY2FuMjczIGNvcHluZWdhdGUgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjZmMwMGZmM2ZjZmYzZmZmZgotZGRjYW4yNzQgY29weW5lZ2F0ZSAgIzdkMDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZDAwZmYzZmNmZjNmY2ZmCi1kZGNhbjI3NSBjb3B5bmVnYXRlICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gI2ZjMDRmZjNmY2ZmM2ZjZmYKLS0tIHNOYU4KLWRkY2FuMjc2IGNvcHluZWdhdGUgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjZmUwMGZmM2ZjZmZmZmNmZgotZGRjYW4yNzcgY29weW5lZ2F0ZSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICNmZTQwZmYzZmNmZjNmY2ZmCi0tLSBJbmYKLWRkY2FuMjc4IGNvcHluZWdhdGUgICM3YTAwMDAwMDAwMDAwMDAwICAtPiAjZmEwMDAwMDAwMDAwMDAwMAotZGRjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICNmODAwMjAwMDAwMDAwMDAwCi0KLS0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCi0tLSBmaW5pdGVzCi1kZGNhbjI4MCBjb3B5c2lnbiAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTEgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYKLWRkY2FuMjgxIGNvcHlzaWduICAjNzdmY2ZmM2ZkZmYzZmNmZiAgMSAtPiAjNzdmY2ZmM2ZkZmYzZmNmZgotLS0gTmFOcwotZGRjYW4yODIgY29weXNpZ24gICM3YzAzZmYzZmNmZjNmY2ZmIC0xIC0+ICNmYzAzZmYzZmNmZjNmY2ZmCi1kZGNhbjI4MyBjb3B5c2lnbiAgIzdjMDBmZjNmY2ZmM2ZmZmYgIDEgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYKLWRkY2FuMjg0IGNvcHlzaWduICAjN2QwMGZmM2ZjZmYzZmNmZiAtMSAtPiAjZmQwMGZmM2ZjZmYzZmNmZgotZGRjYW4yODUgY29weXNpZ24gICM3YzA0ZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmCi0tLSBzTmFOCi1kZGNhbjI4NiBjb3B5c2lnbiAgIzdlMDBmZjNmY2ZmZmZjZmYgLTEgLT4gI2ZlMDBmZjNmY2ZmZmZjZmYKLWRkY2FuMjg3IGNvcHlzaWduICAjN2U0MGZmM2ZjZmYzZmNmZiAgMSAtPiAjN2U0MGZmM2ZjZmYzZmNmZgotLS0gSW5mCi1kZGNhbjI4OCBjb3B5c2lnbiAgIzdhMDAwMDAwMDAwMDAwMDAgLTEgLT4gI2ZhMDAwMDAwMDAwMDAwMDAKLWRkY2FuMjg5IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMCAgMSAtPiAjNzgwMDIwMDAwMDAwMDAwMAotCi0tLS0tLSBNdWx0aXBseToKLS0tIEZpbml0ZXM6IG5ldXRyYWwgMAotZGRjYW4zMDIgbXVsdGlwbHkgIDEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMzAzIG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIDEgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi0tLSBuZWdhdGl2ZQotZGRjYW4zMDYgbXVsdGlwbHkgLTEgICAgICAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuMzA3IG11bHRpcGx5ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgLTEgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmCi0tLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZAotZGRjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KLWRkY2FuMzEzIG11bHRpcGx5ICAxICAjN2M0MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjMxNCBtdWx0aXBseSAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kZGNhbjMxNSBtdWx0aXBseSAgMSAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotZGRjYW4zMTYgbXVsdGlwbHkgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLS0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KLWRkY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kZGNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cwotZGRjYW4zMjAgbXVsdGlwbHkgIDEgICM3ODgwMDAwMDAwMDAwMDAwICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuMzIxIG11bHRpcGx5ICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMSAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kZGNhbjMyMiBtdWx0aXBseSAgMSAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjMyNSBtdWx0aXBseSAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZGNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi0KLS0tLS0tIFF1YW50aXplOgotZGRjYW40MDEgcXVhbnRpemUgICM2ZTM4ZmYzZmZmZjNmY2ZmIDEgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYKLWRkY2FuNDAyIHF1YW50aXplICAjNmUzOGZmM2ZjZmYzZmRmZiAwICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCi1kZGNhbjQwMyBxdWFudGl6ZSAgIzc4ODAwMDAwMDAwMDAwMDAgSW5mICAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNDEwIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjQxMSBxdWFudGl6ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW40MTIgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuNDEzIHF1YW50aXplICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjQxNCBxdWFudGl6ZSAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotZGRjYW40MTUgcXVhbnRpemUgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLWRkY2FuNDE2IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kZGNhbjQxNyBxdWFudGl6ZSAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLS0tLSBTdWJ0cmFjdDoKLS0tIEZpbml0ZXM6IG5ldXRyYWwgMAotZGRjYW41MDIgc3VidHJhY3QgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYKLWRkY2FuNTAzIHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUrMzg0IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi0tLSB0aW55IHplcm8KLWRkY2FuNTA0IHN1YnRyYWN0ICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKLWRkY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYgMEUtMzk4IC0+ICM3N2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKLS0tIHRpbnkgbm9uIHplcm8KLWRkY2FuNTA2IHN1YnRyYWN0IC0xRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKLWRkY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kZGNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW41MTIgc3VidHJhY3QgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZGRjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuNTE0IHN1YnRyYWN0ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKLWRkY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kZGNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZGRjYW41MTcgc3VidHJhY3QgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLWRkY2FuNTE4IHN1YnRyYWN0ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kZGNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMAotZGRjYW41MjEgc3VidHJhY3QgICAgICM3ODgwMDAwMDAwMDAwMDAwICAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKLWRkY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNTI0IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMSAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNTI3IHN1YnRyYWN0ICAgICAjNzgwMDAwMjAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLQotLS0tLS0gVG9JbnRlZ3JhbDoKLWRkY2FuNjAxIHRvaW50ZWdyYWx4ICAjNmUzOGZmM2ZmZmYzZmNmZiAtPiAjNmUzOGZmM2ZjZmYzZmNmZgotZGRjYW42MDIgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmNmZjNmZGZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCi1kZGNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRkY2FuNjA0IHRvaW50ZWdyYWx4ICAjNzgwMjAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGRjYW42MTAgdG9pbnRlZ3JhbHggICM3YzAzZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjYxMSB0b2ludGVncmFseCAgIzdjMDNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLWRkY2FuNjEyIHRvaW50ZWdyYWx4ICAjN2M0MGZmM2ZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZgotZGRjYW42MTMgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmCi1kZGNhbjYxNCB0b2ludGVncmFseCAgIzdlMDBmZmZmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLWRkY2FuNjE1IHRvaW50ZWdyYWx4ICAjN2UwMGZmZmZjZmYzZmNmZiAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotZGRjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTgwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kZGNhbjYxNyB0b2ludGVncmFseCAgIzdlODBmZjNmY2ZmM2ZjZmYgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLS0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgYW5kIG5lZ2F0aXZlcwotZGRjYW42MTggdG9pbnRlZ3JhbHggICMyMjM4MDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwY2ZmCi1kZGNhbjYxOSB0b2ludGVncmFseCAgIzIyMzAwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwNDAgSW5leGFjdCBSb3VuZGVkCi1kZGNhbjYyMCB0b2ludGVncmFseCAgIzIyMmMwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDQgSW5leGFjdCBSb3VuZGVkCi1kZGNhbjYyMSB0b2ludGVncmFseCAgIzIyMjgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGNhbjYyMiB0b2ludGVncmFseCAgI2EyMzgwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDBjZmYKLWRkY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIzMDAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDA0MCBJbmV4YWN0IFJvdW5kZWQKLWRkY2FuNjI0IHRvaW50ZWdyYWx4ICAjYTIyYzAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQKLWRkY2FuNjI1IHRvaW50ZWdyYWx4ICAjYTIyODAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkQ2Fub25pY2FsLmRlY1Rlc3QgLS0gdGVzdCBkZWNEb3VibGUgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIGZpbGUgdGVzdHMgdGhhdCBjb3B5IG9wZXJhdGlvbnMgbGVhdmUgdW5jYW5vbmljYWwgb3BlcmFuZHMNCistLSB1bmNoYW5nZWQsIGFuZCB2aWNlIHZlcnNhDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gVW5jYW5vbmljYWwgZGVjbGV0cyBhcmU6IGFiYywgd2hlcmU6DQorLS0gICBhPTEsMiwzDQorLS0gICBiPTYsNyxlLGYNCistLSAgIGM9ZSxmDQorDQorLS0gYXNzZXJ0IHNvbWUgc3RhbmRhcmQgKGNhbm9uaWNhbCkgdmFsdWVzOyB0aGlzIHRlc3RzIHRoYXQgRnJvbVN0cmluZw0KKy0tIHByb2R1Y2VzIGNhbm9uaWNhbCByZXN1bHRzIChtYW55IG1vcmUgaW4gZGVjaW1hbE5OKQ0KK2RkY2FuMDAxIGFwcGx5IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjAwMiBhcHBseSAwICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwDQorZGRjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMQ0KK2RkY2FuMDA0IGFwcGx5IC0xICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMzgwMDAwMDAwMDAwMDENCitkZGNhbjAwNSBhcHBseSBJbmZpbml0eSAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMDA3IGFwcGx5IC1OYU4gICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDANCitkZGNhbjAwOCBhcHBseSAtc05hTiAgICAgICAgICAgICAgICAgIC0+ICNmZTAwMDAwMDAwMDAwMDAwDQorZGRjYW4wMDkgYXBwbHkgTmFOOTk5OTk5OTk5OTk5OTk5ICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMDEwIGFwcGx5IHNOYU45OTk5OTk5OTk5OTk5OTkgICAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZWNhbjAxMSBhcHBseSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQorZGRjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDNkMA0KK2RkY2FuMDEzIGFwcGx5IDkuOTkgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwZmYNCisNCistLSBCYXNlIHRlc3RzIGZvciBjYW5vbmljYWwgZW5jb2RpbmdzIChpbmRpdmlkdWFsIG9wZXJhdG9yDQorLS0gcHJvcGFnYXRpb24gaXMgdGVzdGVkIGxhdGVyKQ0KKw0KKy0tIEZpbml0ZXM6IGRlY2xldHMgaW4gY29lZmZpY2llbnQNCitkZGNhbjAyMSBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMDIyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4wMjMgY2Fub25pY2FsICAjNzdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjAyNCBjYW5vbmljYWwgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMDI1IGNhbm9uaWNhbCAgIzc3ZmNmZmZmY2ZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4wMjYgY2Fub25pY2FsICAjNzdmY2ZmZmZjZmYzZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjAyNyBjYW5vbmljYWwgICM3N2ZjZmYzZmZmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMDI4IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZmZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4wMzAgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmZmZmNmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjAzMSBjYW5vbmljYWwgICM3N2ZjZmYzZmNmZmZmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMDMyIGNhbm9uaWNhbCAgIzc3ZmNmZjNmY2ZmM2ZmZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4wMzMgY2Fub25pY2FsICAjNzdmY2ZmM2ZjZmYzZmZmZiAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjAzNSBjYW5vbmljYWwgICM3N2ZjZmYzZmRmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMDM2IGNhbm9uaWNhbCAgIzc3ZmNmZjNmZWZmM2ZjZmYgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorDQorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCitkZGNhbjEwMCBjYW5vbmljYWwgIE5hTjk5OTk5OTk5OTk5OTk5OSAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTAxIGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMDIgY2Fub25pY2FsICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEwMyBjYW5vbmljYWwgICM3YzAwZmZmZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTA0IGNhbm9uaWNhbCAgIzdjMDBmZjNmZmZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMDUgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmZmZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEwNiBjYW5vbmljYWwgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTA3IGNhbm9uaWNhbCAgIzdjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQorZGRjYW4xMTAgY2Fub25pY2FsICAjN2MwMGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjExMiBjYW5vbmljYWwgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTEzIGNhbm9uaWNhbCAgIzdjODBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMTQgY2Fub25pY2FsICAjN2M0MGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjExNSBjYW5vbmljYWwgICM3YzIwZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTE2IGNhbm9uaWNhbCAgIzdjMTBmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMTcgY2Fub25pY2FsICAjN2MwOGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjExOCBjYW5vbmljYWwgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KKw0KKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RkY2FuMTIwIGNhbm9uaWNhbCBzTmFOOTk5OTk5OTk5OTk5OTk5IC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMjEgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEyMiBjYW5vbmljYWwgICM3ZTAzZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTIzIGNhbm9uaWNhbCAgIzdlMDBmZmZmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMjQgY2Fub25pY2FsICAjN2UwMGZmM2ZmZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEyNSBjYW5vbmljYWwgICM3ZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTI2IGNhbm9uaWNhbCAgIzdlMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMjcgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmZmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQorZGRjYW4xMzAgY2Fub25pY2FsICAjN2UwMGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEzMiBjYW5vbmljYWwgICM3ZjAwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTMzIGNhbm9uaWNhbCAgIzdlODBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMzQgY2Fub25pY2FsICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEzNSBjYW5vbmljYWwgICM3ZTIwZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMTM2IGNhbm9uaWNhbCAgIzdlMTBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorZGRjYW4xMzcgY2Fub25pY2FsICAjN2UwOGZmM2ZjZmYzZmNmZiAgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjEzOCBjYW5vbmljYWwgICM3ZTA0ZmYzZmNmZjNmY2ZmICAtPiAjN2UwMGZmM2ZjZmYzZmNmZg0KKw0KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCitkZGNhbjE0MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTQxIGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNDIgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE0MyBjYW5vbmljYWwgICM3ODgwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTQ0IGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNDUgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE0NiBjYW5vbmljYWwgICM3ODEwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNDggY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCisNCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzIChmaXJzdCwgbGFzdCwgYW5kIGEgZmV3IG90aGVycykNCitkZGNhbjE1MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTUxIGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNTIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE1MyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTU0IGNhbm9uaWNhbCAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNTUgY2Fub25pY2FsICAjNzgwMDA4MDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE1NiBjYW5vbmljYWwgICM3ODAwMDAyMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTU3IGNhbm9uaWNhbCAgIzc4MDAwMDA0MDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNTggY2Fub25pY2FsICAjNzgwMDAwMDA0MDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE1OSBjYW5vbmljYWwgICM3ODAwMDAwMDA4MDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTYwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDA0MDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNjEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAyMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE2MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDA4MDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMTYzIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAyMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4xNjQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDA0MCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjE2NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDA4ICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KKw0KKw0KKy0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8NCistLSBjYW5vbmljYWxpemUgcHJvcGFnYXRlZCBvcGVyYW5kcw0KKw0KKy0tLS0tIEFkZDoNCistLSBGaW5pdGVzOiBuZXV0cmFsIDANCitkZGNhbjIwMiBhZGQgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjIwMyBhZGQgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAwRSszODQgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCistLSB0aW55IHplcm8NCitkZGNhbjIwNCBhZGQgIDBFLTM5OCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KK2RkY2FuMjA1IGFkZCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQorLS0gdGlueSBub24gemVybw0KK2RkY2FuMjA2IGFkZCAtMUUtMzk4ICM3N2ZmZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQorZGRjYW4yMDcgYWRkICAgICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTFFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RkY2FuMjExIGFkZCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMjEyIGFkZCAgICAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KK2RkY2FuMjEzIGFkZCAgMCAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMjE0IGFkZCAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RkY2FuMjE1IGFkZCAgMCAgIzdlMDBmZmZmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY2FuMjE2IGFkZCAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkZGNhbjIxNyBhZGQgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCitkZGNhbjIxOCBhZGQgICAgICM3ZTgwZmYzZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCistLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzDQorZGRjYW4yMjAgYWRkICAwICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4yMjEgYWRkICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KK2RkY2FuMjIyIGFkZCAgMCAgIzc4MDIwMDAwMDAwMDAwMDAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4yMjMgYWRkICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjIyNCBhZGQgIDAgICM3ODAwMDAwMDAwMDAwMDAxICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDEgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4yMjYgYWRkICAwICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjIyNyBhZGQgICAgICM3ODAwMDAyMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdDQorDQorLS0tLS0gQ29tcGFyZToNCitkZGNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMzgwMDAwMDAwMDAwMDENCitkZGNhbjIzMiBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDANCitkZGNhbjIzMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgIzIyMzgwMDAwMDAwMDAwMDENCitkZGNhbjIzNCBjb21wYXJlICAjN2MwMGZmM2ZmZmYzZmNmZiAtMTAwMCAgLT4gICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4yMzUgY29tcGFyZSAgIzdlMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLS0tLSBDb21wYXJlU2lnOg0KK2RkY2FuMjQxIGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+ICAjYTIzODAwMDAwMDAwMDAwMQ0KK2RkY2FuMjQyIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMA0KK2RkY2FuMjQzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAjMjIzODAwMDAwMDAwMDAwMQ0KK2RkY2FuMjQ0IGNvbXBhcmVzaWcgICM3YzAwZmYzZmZmZjNmY2ZmIC0xMDAwICAtPiAgIzdjMDBmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW4yNDUgY29tcGFyZXNpZyAgIzdlMDBmZjNmZmZmM2ZjZmYgLTEwMDAgIC0+ICAjN2MwMGZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLS0tLSBDb3B5OiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQorLS0gZmluaXRlcw0KK2RkY2FuMjUwIGNvcHkgICM3N2ZmZmYzZmNmZjNmY2ZmICAtPiAjNzdmZmZmM2ZjZmYzZmNmZg0KK2RkY2FuMjUxIGNvcHkgICM3N2ZjZmYzZmRmZjNmY2ZmICAtPiAjNzdmY2ZmM2ZkZmYzZmNmZg0KKy0tIE5hTnMNCitkZGNhbjI1MiBjb3B5ICAjN2MwM2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDNmZjNmY2ZmM2ZjZmYNCitkZGNhbjI1MyBjb3B5ICAjN2MwMGZmM2ZjZmYzZmZmZiAgLT4gIzdjMDBmZjNmY2ZmM2ZmZmYNCitkZGNhbjI1NCBjb3B5ICAjN2QwMGZmM2ZjZmYzZmNmZiAgLT4gIzdkMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjI1NSBjb3B5ICAjN2MwNGZmM2ZjZmYzZmNmZiAgLT4gIzdjMDRmZjNmY2ZmM2ZjZmYNCistLSBzTmFODQorZGRjYW4yNTYgY29weSAgIzdlMDBmZjNmY2ZmZmZjZmYgIC0+ICM3ZTAwZmYzZmNmZmZmY2ZmDQorZGRjYW4yNTcgY29weSAgIzdlNDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZTQwZmYzZmNmZjNmY2ZmDQorLS0gSW5mDQorZGRjYW4yNTggY29weSAgIzdhMDAwMDAwMDAwMDAwMDAgIC0+ICM3YTAwMDAwMDAwMDAwMDAwDQorZGRjYW4yNTkgY29weSAgIzc4MDAyMDAwMDAwMDAwMDAgIC0+ICM3ODAwMjAwMDAwMDAwMDAwDQorDQorLS0tLS0gQ29weUFiczogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KKy0tIGZpbml0ZXMNCitkZGNhbjI2MCBjb3B5YWJzICAjZjdmZmZmM2ZjZmYzZmNmZiAgLT4gIzc3ZmZmZjNmY2ZmM2ZjZmYNCitkZGNhbjI2MSBjb3B5YWJzICAjZjdmY2ZmM2ZkZmYzZmNmZiAgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYNCistLSBOYU5zDQorZGRjYW4yNjIgY29weWFicyAgI2ZjMDNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAzZmYzZmNmZjNmY2ZmDQorZGRjYW4yNjMgY29weWFicyAgI2ZjMDBmZjNmY2ZmM2ZmZmYgIC0+ICM3YzAwZmYzZmNmZjNmZmZmDQorZGRjYW4yNjQgY29weWFicyAgI2ZkMDBmZjNmY2ZmM2ZjZmYgIC0+ICM3ZDAwZmYzZmNmZjNmY2ZmDQorZGRjYW4yNjUgY29weWFicyAgI2ZjMDRmZjNmY2ZmM2ZjZmYgIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmDQorLS0gc05hTg0KK2RkY2FuMjY2IGNvcHlhYnMgICNmZTAwZmYzZmNmZmZmY2ZmICAtPiAjN2UwMGZmM2ZjZmZmZmNmZg0KK2RkY2FuMjY3IGNvcHlhYnMgICNmZTQwZmYzZmNmZjNmY2ZmICAtPiAjN2U0MGZmM2ZjZmYzZmNmZg0KKy0tIEluZg0KK2RkY2FuMjY4IGNvcHlhYnMgICNmYTAwMDAwMDAwMDAwMDAwICAtPiAjN2EwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMjY5IGNvcHlhYnMgICNmODAwMjAwMDAwMDAwMDAwICAtPiAjNzgwMDIwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCistLSBmaW5pdGVzDQorZGRjYW4yNzAgY29weW5lZ2F0ZSAgIzc3ZmZmZjNmY2ZmM2ZjZmYgIC0+ICNmN2ZmZmYzZmNmZjNmY2ZmDQorZGRjYW4yNzEgY29weW5lZ2F0ZSAgIzc3ZmNmZjNmZGZmM2ZjZmYgIC0+ICNmN2ZjZmYzZmRmZjNmY2ZmDQorLS0gTmFOcw0KK2RkY2FuMjcyIGNvcHluZWdhdGUgICM3YzAzZmYzZmNmZjNmY2ZmICAtPiAjZmMwM2ZmM2ZjZmYzZmNmZg0KK2RkY2FuMjczIGNvcHluZWdhdGUgICM3YzAwZmYzZmNmZjNmZmZmICAtPiAjZmMwMGZmM2ZjZmYzZmZmZg0KK2RkY2FuMjc0IGNvcHluZWdhdGUgICM3ZDAwZmYzZmNmZjNmY2ZmICAtPiAjZmQwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMjc1IGNvcHluZWdhdGUgICM3YzA0ZmYzZmNmZjNmY2ZmICAtPiAjZmMwNGZmM2ZjZmYzZmNmZg0KKy0tIHNOYU4NCitkZGNhbjI3NiBjb3B5bmVnYXRlICAjN2UwMGZmM2ZjZmZmZmNmZiAgLT4gI2ZlMDBmZjNmY2ZmZmZjZmYNCitkZGNhbjI3NyBjb3B5bmVnYXRlICAjN2U0MGZmM2ZjZmYzZmNmZiAgLT4gI2ZlNDBmZjNmY2ZmM2ZjZmYNCistLSBJbmYNCitkZGNhbjI3OCBjb3B5bmVnYXRlICAjN2EwMDAwMDAwMDAwMDAwMCAgLT4gI2ZhMDAwMDAwMDAwMDAwMDANCitkZGNhbjI3OSBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMCAgLT4gI2Y4MDAyMDAwMDAwMDAwMDANCisNCistLS0tLSBDb3B5U2lnbjogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQ0KKy0tIGZpbml0ZXMNCitkZGNhbjI4MCBjb3B5c2lnbiAgIzc3ZmZmZjNmY2ZmM2ZjZmYgLTEgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYNCitkZGNhbjI4MSBjb3B5c2lnbiAgIzc3ZmNmZjNmZGZmM2ZjZmYgIDEgLT4gIzc3ZmNmZjNmZGZmM2ZjZmYNCistLSBOYU5zDQorZGRjYW4yODIgY29weXNpZ24gICM3YzAzZmYzZmNmZjNmY2ZmIC0xIC0+ICNmYzAzZmYzZmNmZjNmY2ZmDQorZGRjYW4yODMgY29weXNpZ24gICM3YzAwZmYzZmNmZjNmZmZmICAxIC0+ICM3YzAwZmYzZmNmZjNmZmZmDQorZGRjYW4yODQgY29weXNpZ24gICM3ZDAwZmYzZmNmZjNmY2ZmIC0xIC0+ICNmZDAwZmYzZmNmZjNmY2ZmDQorZGRjYW4yODUgY29weXNpZ24gICM3YzA0ZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA0ZmYzZmNmZjNmY2ZmDQorLS0gc05hTg0KK2RkY2FuMjg2IGNvcHlzaWduICAjN2UwMGZmM2ZjZmZmZmNmZiAtMSAtPiAjZmUwMGZmM2ZjZmZmZmNmZg0KK2RkY2FuMjg3IGNvcHlzaWduICAjN2U0MGZmM2ZjZmYzZmNmZiAgMSAtPiAjN2U0MGZmM2ZjZmYzZmNmZg0KKy0tIEluZg0KK2RkY2FuMjg4IGNvcHlzaWduICAjN2EwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZmEwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMjg5IGNvcHlzaWduICAjNzgwMDIwMDAwMDAwMDAwMCAgMSAtPiAjNzgwMDIwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIE11bHRpcGx5Og0KKy0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KK2RkY2FuMzAyIG11bHRpcGx5ICAxICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4zMDMgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAgMSAgICAgLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYNCistLSBuZWdhdGl2ZQ0KK2RkY2FuMzA2IG11bHRpcGx5IC0xICAgICAgIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmDQorZGRjYW4zMDcgbXVsdGlwbHkgICAgICAgICAjNzdmY2ZmZmZjZmYzZmNmZiAtMSAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYNCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RkY2FuMzExIG11bHRpcGx5ICAxICAjN2MwM2ZmM2ZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW4zMTIgbXVsdGlwbHkgICAgICM3YzAzZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkZGNhbjMxMyBtdWx0aXBseSAgMSAgIzdjNDBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuMzE0IG11bHRpcGx5ICAgICAjN2M0MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQorZGRjYW4zMTUgbXVsdGlwbHkgIDEgICM3ZTAwZmZmZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCitkZGNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkZGNhbjMxNyBtdWx0aXBseSAgMSAgIzdlODBmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY2FuMzE4IG11bHRpcGx5ICAgICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KK2RkY2FuMzIwIG11bHRpcGx5ICAxICAjNzg4MDAwMDAwMDAwMDAwMCAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4zMjEgbXVsdGlwbHkgICAgICM3ODgwMDAwMDAwMDAwMDAwICAxICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCistLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzDQorZGRjYW4zMjIgbXVsdGlwbHkgIDEgICM3ODAyMDAwMDAwMDAwMDAwICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMzIzIG11bHRpcGx5ICAgICAjNzgwMjAwMDAwMDAwMDAwMCAgMSAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW4zMjUgbXVsdGlwbHkgICAgICM3ODAwMDAwMDAwMDAwMDAxICAxICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuMzI2IG11bHRpcGx5ICAxICAjNzgwMDAwMjAwMDAwMDAwMCAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAgIDEgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorDQorLS0tLS0gUXVhbnRpemU6DQorZGRjYW40MDEgcXVhbnRpemUgICM2ZTM4ZmYzZmZmZjNmY2ZmIDEgICAgLT4gIzZlMzhmZjNmY2ZmM2ZjZmYNCitkZGNhbjQwMiBxdWFudGl6ZSAgIzZlMzhmZjNmY2ZmM2ZkZmYgMCAgICAtPiAjNmUzOGZmM2ZjZmYzZmNmZg0KK2RkY2FuNDAzIHF1YW50aXplICAjNzg4MDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwIC1JbmYgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjQxMCBxdWFudGl6ZSAgIzdjMDNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuNDExIHF1YW50aXplICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW40MTIgcXVhbnRpemUgICM3YzQwZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjQxMyBxdWFudGl6ZSAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuNDE0IHF1YW50aXplICAjN2UwMGZmZmZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW40MTUgcXVhbnRpemUgICM3ZTAwZmZmZmNmZjNmY2ZmICAxICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCitkZGNhbjQxNiBxdWFudGl6ZSAgIzdlODBmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY2FuNDE3IHF1YW50aXplICAjN2U4MGZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0tLS0gU3VidHJhY3Q6DQorLS0gRmluaXRlczogbmV1dHJhbCAwDQorZGRjYW41MDIgc3VidHJhY3QgIDBFKzM4NCAjNzdmZmZmM2ZjZmYzZmNmZiAgICAgICAgLT4gI2Y3ZmNmZjNmY2ZmM2ZjZmYNCitkZGNhbjUwMyBzdWJ0cmFjdCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFKzM4NCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KKy0tIHRpbnkgemVybw0KK2RkY2FuNTA0IHN1YnRyYWN0ICAwRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCitkZGNhbjUwNSBzdWJ0cmFjdCAgICAgICAgICM3N2ZjZmZmZmNmZjNmY2ZmIDBFLTM5OCAtPiAjNzdmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkDQorLS0gdGlueSBub24gemVybw0KK2RkY2FuNTA2IHN1YnRyYWN0IC0xRS0zOTggIzc3ZmZmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjZjdmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCitkZGNhbjUwNyBzdWJ0cmFjdCAgICAgICAgICM3N2ZmZmYzZmNmZjNmY2ZmIC0xRS0zOTggLT4gIzc3ZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCitkZGNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDNmZjNmY2ZmM2ZjZmYgICAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KK2RkY2FuNTEyIHN1YnRyYWN0ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZiAgMCAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQorZGRjYW41MTMgc3VidHJhY3QgIDAgICM3YzQwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYNCitkZGNhbjUxNCBzdWJ0cmFjdCAgICAgIzdjNDBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RkY2FuNTE1IHN1YnRyYWN0ICAwICAjN2UwMGZmZmZjZmYzZmNmZiAgICAgIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW41MTYgc3VidHJhY3QgICAgICM3ZTAwZmZmZmNmZjNmY2ZmICAwICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQorZGRjYW41MTcgc3VidHJhY3QgIDAgICM3ZTgwZmYzZmNmZjNmY2ZmICAgICAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCitkZGNhbjUxOCBzdWJ0cmFjdCAgICAgIzdlODBmZjNmY2ZmM2ZjZmYgIDAgICAtPiAjN2MwMGZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCitkZGNhbjUyMCBzdWJ0cmFjdCAgMCAgIzc4ODAwMDAwMDAwMDAwMDAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuNTIxIHN1YnRyYWN0ICAgICAjNzg4MDAwMDAwMDAwMDAwMCAgMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KK2RkY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMjAwMDAwMDAwMDAwMCAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCitkZGNhbjUyMyBzdWJ0cmFjdCAgICAgIzc4MDIwMDAwMDAwMDAwMDAgIDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMDAwMDAwMDAxICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KK2RkY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMSAgMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDANCitkZGNhbjUyNiBzdWJ0cmFjdCAgMCAgIzc4MDAwMDIwMDAwMDAwMDAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQorZGRjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAyMDAwMDAwMDAwICAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIFRvSW50ZWdyYWw6DQorZGRjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmZmZjNmY2ZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQorZGRjYW42MDIgdG9pbnRlZ3JhbHggICM2ZTM4ZmYzZmNmZjNmZGZmIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQorZGRjYW42MDMgdG9pbnRlZ3JhbHggICM3ODgwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwDQorZGRjYW42MTAgdG9pbnRlZ3JhbHggICM3YzAzZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW42MTEgdG9pbnRlZ3JhbHggICM3YzAzZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW42MTIgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW42MTMgdG9pbnRlZ3JhbHggICM3YzQwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmDQorZGRjYW42MTQgdG9pbnRlZ3JhbHggICM3ZTAwZmZmZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW42MTUgdG9pbnRlZ3JhbHggICM3ZTAwZmZmZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTgwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorZGRjYW42MTcgdG9pbnRlZ3JhbHggICM3ZTgwZmYzZmNmZjNmY2ZmIC0+ICM3YzAwZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdW5jYW5vbmljYWwgMzk5OSwgMzkuOTksIDMuOTksIDAuMzk5LCBhbmQgbmVnYXRpdmVzDQorZGRjYW42MTggdG9pbnRlZ3JhbHggICMyMjM4MDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwY2ZmDQorZGRjYW42MTkgdG9pbnRlZ3JhbHggICMyMjMwMDAwMDAwMDAwZmZmIC0+ICMyMjM4MDAwMDAwMDAwMDQwIEluZXhhY3QgUm91bmRlZA0KK2RkY2FuNjIwIHRvaW50ZWdyYWx4ICAjMjIyYzAwMDAwMDAwMGZmZiAtPiAjMjIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQNCitkZGNhbjYyMSB0b2ludGVncmFseCAgIzIyMjgwMDAwMDAwMDBmZmYgLT4gIzIyMzgwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRjYW42MjIgdG9pbnRlZ3JhbHggICNhMjM4MDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwY2ZmDQorZGRjYW42MjMgdG9pbnRlZ3JhbHggICNhMjMwMDAwMDAwMDAwZmZmIC0+ICNhMjM4MDAwMDAwMDAwMDQwIEluZXhhY3QgUm91bmRlZA0KK2RkY2FuNjI0IHRvaW50ZWdyYWx4ICAjYTIyYzAwMDAwMDAwMGZmZiAtPiAjYTIzODAwMDAwMDAwMDAwNCBJbmV4YWN0IFJvdW5kZWQNCitkZGNhbjYyNSB0b2ludGVncmFseCAgI2EyMjgwMDAwMDAwMDBmZmYgLT4gI2EyMzgwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENsYXNzLmRlY1Rlc3QKaW5kZXggYmIzNGM0Mi4uYTFkMjMzYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ2xhc3MuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDbGFzcy5kZWNUZXN0CkBAIC0xLDc2ICsxLDc2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ2xhc3MuZGVjVGVzdCAtLSBkZWNEb3VibGUgQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gW05ldyAyMDA2LjExLjI3XQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWRkY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWRkY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWRkY2xhMDAzICBjbGFzcyAgICAwRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8KLWRkY2xhMDA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbAotZGRjbGEwMDUgIGNsYXNzICAwLjFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCi1kZGNsYTAwNiAgY2xhc3MgIDAuOTk5OTk5OTk5OTk5OTk5RS0zODMgICAgIC0+ICtTdWJub3JtYWwKLWRkY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbAotZGRjbGEwMDggIGNsYXNzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kZGNsYTAwOSAgY2xhc3MgICAxRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRkY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZGRjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kZGNsYTAxMyAgY2xhc3MgICAxICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRkY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZGRjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kZGNsYTAxNiAgY2xhc3MgICAxRSszMCAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRkY2xhMDE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZGRjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiArTm9ybWFsCi1kZGNsYTAxOSAgY2xhc3MgICBJbmYgICAgICAgICAgICAgICAgICAgICAgIC0+ICtJbmZpbml0eQotCi1kZGNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1kZGNsYTAyMiAgY2xhc3MgICAtMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1kZGNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvCi1kZGNsYTAyNCAgY2xhc3MgICAtMUUtMzk2ICAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwKLWRkY2xhMDI1ICBjbGFzcyAgLTAuMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAotZGRjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsCi1kZGNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgIC0+IC1Ob3JtYWwKLWRkY2xhMDI4ICBjbGFzcyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZGRjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kZGNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRkY2xhMDMyICBjbGFzcyAgLTFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZGRjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kZGNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRkY2xhMDM1ICBjbGFzcyAgLTEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZGRjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kZGNsYTAzNyAgY2xhc3MgIC0xRSszODQgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRkY2xhMDM4ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gLU5vcm1hbAotZGRjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLQotZGRjbGEwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KLWRkY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCi1kZGNsYTA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgotZGRjbGEwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCi1kZGNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KLWRkY2xhMDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgotCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRDbGFzcy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFtOZXcgMjAwNi4xMS4yN10NCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RkY2xhMDAxICBjbGFzcyAgICAwICAgICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCitkZGNsYTAwMiAgY2xhc3MgICAgMC4wMCAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQorZGRjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KK2RkY2xhMDA0ICBjbGFzcyAgICAxRS0zOTYgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KK2RkY2xhMDA1ICBjbGFzcyAgMC4xRS0zODMgICAgICAgICAgICAgICAgICAgLT4gK1N1Ym5vcm1hbA0KK2RkY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAgLT4gK1N1Ym5vcm1hbA0KK2RkY2xhMDA3ICBjbGFzcyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDA4ICBjbGFzcyAgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDEwICBjbGFzcyAgIDFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDEyICBjbGFzcyAgIDFFLTEgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE0ICBjbGFzcyAgIDIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE1ICBjbGFzcyAgIDEwMC4xMDAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE3ICBjbGFzcyAgIDFFKzM4NCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE4ICBjbGFzcyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgLT4gK05vcm1hbA0KK2RkY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5DQorDQorZGRjbGEwMjEgIGNsYXNzICAgLTAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KK2RkY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCitkZGNsYTAyMyAgY2xhc3MgICAtMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQorZGRjbGEwMjQgIGNsYXNzICAgLTFFLTM5NiAgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQorZGRjbGEwMjUgIGNsYXNzICAtMC4xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsDQorZGRjbGEwMjYgIGNsYXNzICAtMC45OTk5OTk5OTk5OTk5OTlFLTM4MyAgICAtPiAtU3Vibm9ybWFsDQorZGRjbGEwMjcgIGNsYXNzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAtPiAtTm9ybWFsDQorZGRjbGEwMjggIGNsYXNzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMjkgIGNsYXNzICAtMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzAgIGNsYXNzICAtMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzMgIGNsYXNzICAtMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzQgIGNsYXNzICAtMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzYgIGNsYXNzICAtMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzcgIGNsYXNzICAtMUUrMzg0ICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzggIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAtPiAtTm9ybWFsDQorZGRjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCisNCitkZGNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KK2RkY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQorZGRjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCitkZGNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitkZGNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitkZGNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCisNCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlLmRlY1Rlc3QKaW5kZXggNmRlYmZjNy4uYTIwYWUyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmUuZGVjVGVzdApAQCAtMSw3NDQgKzEsNzQ0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ29tcGFyZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uIHRoYXQgYWxsb3dzIHF1aWV0IE5hTnMgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCi0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZGNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKLWRkY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKLWRkY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKLWRkY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKLWRkY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKLWRkY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQotZGRjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCi1kZGNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCi1kZGNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCi1kZGNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCi1kZGNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKLWRkY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQotZGRjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCi1kZGNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCi1kZGNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCi1kZGNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKLWRkY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQotZGRjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCi1kZGNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKLWRkY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKLWRkY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQotZGRjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCi1kZGNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKLWRkY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQotZGRjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCi0KLWRkY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCi1kZGNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKLWRkY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQotZGRjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCi1kZGNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKLWRkY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCi1kZGNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAotZGRjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCi1kZGNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKLWRkY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQotZGRjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKLWRkY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCi1kZGNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAotZGRjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCi1kZGNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKLWRkY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCi1kZGNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQotZGRjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKLWRkY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCi1kZGNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKLWRkY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCi1kZGNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQotZGRjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKLWRkY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCi1kZGNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAotCi1kZGNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCi1kZGNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQotZGRjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKLWRkY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCi1kZGNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQotZGRjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQotZGRjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAotZGRjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKLWRkY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCi1kZGNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQotZGRjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQotZGRjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQotZGRjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAotZGRjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKLWRkY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCi1kZGNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCi1kZGNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCi1kZGNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCi1kZGNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCi1kZGNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQotZGRjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQotZGRjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQotZGRjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQotZGRjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQotZGRjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAotZGRjb20wODcgY29tcGFyZSAgIDEuMCAgIDAuMSAgLT4gMQotZGRjb20wODggY29tcGFyZSAgIDAuMSAgIDEuMCAgLT4gLTEKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1kZGNvbTA5NSBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDAKLWRkY29tMDk2IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTEKLWRkY29tMDk3IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQotZGRjb20wOTggY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAwCi0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcwotZGRjb20xMDAgY29tcGFyZSAgIDcuMCAgICA3LjAgICAgLT4gMAotZGRjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMAotZGRjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMAotZGRjb20xMDMgY29tcGFyZSAgIDdFKzAgICA3LjAgICAgLT4gMAotZGRjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMAotZGRjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMAotZGRjb20xMDYgY29tcGFyZSAgIDcwRS0xICA3ICAgICAgLT4gMAotZGRjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMAotZGRjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMAotZGRjb20xMDkgY29tcGFyZSAgIDcgICAgICAwLjdFKzEgLT4gMAotZGRjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMAotCi1kZGNvbTEyMCBjb21wYXJlICAgOC4wICAgIDcuMCAgICAtPiAxCi1kZGNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxCi1kZGNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxCi1kZGNvbTEyMyBjb21wYXJlICAgOEUrMCAgIDcuMCAgICAtPiAxCi1kZGNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxCi1kZGNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxCi1kZGNvbTEyNiBjb21wYXJlICAgODBFLTEgIDcgICAgICAtPiAxCi1kZGNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxCi1kZGNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxCi1kZGNvbTEyOSBjb21wYXJlICAgOCAgICAgIDAuN0UrMSAgLT4gMQotZGRjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQotCi1kZGNvbTE0MCBjb21wYXJlICAgOC4wICAgIDkuMCAgICAtPiAtMQotZGRjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTEKLWRkY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xCi1kZGNvbTE0MyBjb21wYXJlICAgOEUrMCAgIDkuMCAgICAtPiAtMQotZGRjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTEKLWRkY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xCi1kZGNvbTE0NiBjb21wYXJlICAgODBFLTEgIDkgICAgICAtPiAtMQotZGRjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTEKLWRkY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xCi1kZGNvbTE0OSBjb21wYXJlICAgOCAgICAgIDAuOUUrMSAtPiAtMQotZGRjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgotZGRjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTEKLWRkY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xCi1kZGNvbTIwMiBjb21wYXJlICAtNyAgICAgIDcuMCAgICAtPiAtMQotZGRjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTEKLWRkY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xCi1kZGNvbTIwNSBjb21wYXJlICAtMC43RSsxIDcgICAgICAtPiAtMQotZGRjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTEKLWRkY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xCi1kZGNvbTIwOCBjb21wYXJlICAtNy4wICAgIDcwRS0xICAtPiAtMQotZGRjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTEKLWRkY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xCi0KLWRkY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xCi1kZGNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQotZGRjb20yMjIgY29tcGFyZSAgLTggICAgICA3LjAgICAgLT4gLTEKLWRkY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xCi1kZGNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQotZGRjb20yMjUgY29tcGFyZSAgLTAuOEUrMSA3ICAgICAgLT4gLTEKLWRkY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xCi1kZGNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQotZGRjb20yMjggY29tcGFyZSAgLTguMCAgICA3MEUtMSAgLT4gLTEKLWRkY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xCi1kZGNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQotCi1kZGNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQotZGRjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTEKLWRkY29tMjQyIGNvbXBhcmUgIC04ICAgICAgOS4wICAgIC0+IC0xCi1kZGNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQotZGRjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTEKLWRkY29tMjQ1IGNvbXBhcmUgIC0wLjhFKzEgOSAgICAgIC0+IC0xCi1kZGNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQotZGRjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTEKLWRkY29tMjQ4IGNvbXBhcmUgIC04LjAgICAgOTBFLTEgIC0+IC0xCi1kZGNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQotZGRjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgotZGRjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDEKLWRkY29tMzAxIGNvbXBhcmUgICA3LjAgICAgLTcgICAgICAtPiAxCi1kZGNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQotZGRjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDEKLWRkY29tMzA0IGNvbXBhcmUgICA3MEUtMSAgLTcuMCAgICAtPiAxCi1kZGNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQotZGRjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDEKLWRkY29tMzA3IGNvbXBhcmUgICA3LjAgICAgLTdFKzAgICAtPiAxCi1kZGNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQotZGRjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDEKLWRkY29tMzEwIGNvbXBhcmUgICA3ICAgICAgLTcwRS0xICAtPiAxCi0KLWRkY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxCi1kZGNvbTMyMSBjb21wYXJlICAgOC4wICAgIC03ICAgICAgLT4gMQotZGRjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDEKLWRkY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxCi1kZGNvbTMyNCBjb21wYXJlICAgODBFLTEgIC03LjAgICAgLT4gMQotZGRjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDEKLWRkY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxCi1kZGNvbTMyNyBjb21wYXJlICAgOC4wICAgIC03RSswICAgLT4gMQotZGRjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDEKLWRkY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxCi1kZGNvbTMzMCBjb21wYXJlICAgOCAgICAgIC03MEUtMSAgLT4gMQotCi1kZGNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQotZGRjb20zNDEgY29tcGFyZSAgIDguMCAgICAtOSAgICAgIC0+IDEKLWRkY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxCi1kZGNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQotZGRjb20zNDQgY29tcGFyZSAgIDgwRS0xICAtOS4wICAgIC0+IDEKLWRkY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxCi1kZGNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQotZGRjb20zNDcgY29tcGFyZSAgIDguMCAgICAtOUUrMCAgIC0+IDEKLWRkY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxCi1kZGNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQotZGRjb20zNTAgY29tcGFyZSAgIDggICAgICAtOTBFLTEgIC0+IDEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgotZGRjb200MDAgY29tcGFyZSAgIC03LjAgICAgLTcuMCAgICAtPiAwCi1kZGNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDAKLWRkY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMAotZGRjb200MDMgY29tcGFyZSAgIC03RSswICAgLTcuMCAgICAtPiAwCi1kZGNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDAKLWRkY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMAotZGRjb200MDYgY29tcGFyZSAgIC03MEUtMSAgLTcgICAgICAtPiAwCi1kZGNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDAKLWRkY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMAotZGRjb200MDkgY29tcGFyZSAgIC03ICAgICAgLS43RSsxICAtPiAwCi1kZGNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDAKLQotZGRjb200MjAgY29tcGFyZSAgIC04LjAgICAgLTcuMCAgICAtPiAtMQotZGRjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQotZGRjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQotZGRjb200MjMgY29tcGFyZSAgIC04RSswICAgLTcuMCAgICAtPiAtMQotZGRjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQotZGRjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQotZGRjb200MjYgY29tcGFyZSAgIC04MEUtMSAgLTcgICAgICAtPiAtMQotZGRjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQotZGRjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQotZGRjb200MjkgY29tcGFyZSAgIC04ICAgICAgLS43RSsxICAtPiAtMQotZGRjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQotCi1kZGNvbTQ0MCBjb21wYXJlICAgLTguMCAgICAtOS4wICAgIC0+IDEKLWRkY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQotZGRjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxCi1kZGNvbTQ0MyBjb21wYXJlICAgLThFKzAgICAtOS4wICAgIC0+IDEKLWRkY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQotZGRjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxCi1kZGNvbTQ0NiBjb21wYXJlICAgLTgwRS0xICAtOSAgICAgIC0+IDEKLWRkY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQotZGRjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxCi1kZGNvbTQ0OSBjb21wYXJlICAgLTggICAgICAtLjlFKzEgIC0+IDEKLWRkY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KLWRkY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxCi1kZGNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTEKLWRkY29tNDUzIGNvbXBhcmUgICAgIDEwLjAgICAgICAgMC4xICAtPiAxCi1kZGNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTEKLWRkY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxCi1kZGNvbTQ1NiBjb21wYXJlICAgICAgMS4wICAgICAgIDEwMCAgLT4gLTEKLWRkY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxCi1kZGNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTEKLWRkY29tNDU5IGNvbXBhcmUgICAgMTAwMDAgICAgIDEwMC4wICAtPiAxCi1kZGNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTEKLWRkY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxCi1kZGNvbTQ2MiBjb21wYXJlICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gLTEKLWRkY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxCi1kZGNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTEKLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kZGNvbTQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNvbTQ3NCBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKLWRkY29tNDc1IGNvbXBhcmUgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNvbTQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNvbTQ3NyBjb21wYXJlIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKLWRkY29tNDc4IGNvbXBhcmUgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNvbTQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNvbTQ4MCBjb21wYXJlIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKLWRkY29tNDgxIGNvbXBhcmUgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNvbTQ4MiBjb21wYXJlIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNvbTQ4MyBjb21wYXJlIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKLWRkY29tNDg3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKLWRkY29tNDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAotZGRjb200ODkgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDAKLWRkY29tNDkwIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKLWRkY29tNDkxIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMAotZGRjb200OTIgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDAKLWRkY29tNDkzIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDAKLWRkY29tNDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAotZGRjb200OTUgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDAKLWRkY29tNDk2IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKLWRkY29tNDk3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kZGNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKLWRkY29tNTAxIGNvbXBhcmUgICAgMSAgICAgMUUtMTQgICAgLT4gMQotZGRjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxCi1kZGNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDEKLWRkY29tNTA0IGNvbXBhcmUgICAgMSAgICAgMUUtMTEgICAgLT4gMQotZGRjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxCi1kZGNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDEKLWRkY29tNTA3IGNvbXBhcmUgICAgMSAgICAgMUUtOCAgICAgLT4gMQotZGRjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxCi1kZGNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDEKLWRkY29tNTEwIGNvbXBhcmUgICAgMSAgICAgMUUtNSAgICAgLT4gMQotZGRjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxCi1kZGNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDEKLWRkY29tNTEzIGNvbXBhcmUgICAgMSAgICAgMUUtMiAgICAgLT4gMQotZGRjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxCi1kZGNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDAKLWRkY29tNTE2IGNvbXBhcmUgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWRkY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKLWRkY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKLWRkY29tNTE5IGNvbXBhcmUgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWRkY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKLWRkY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKLWRkY29tNTIzIGNvbXBhcmUgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWRkY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKLWRkY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKLWRkY29tNTI2IGNvbXBhcmUgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWRkY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKLWRkY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKLWRkY29tNTI5IGNvbXBhcmUgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWRkY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKLWRkY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKLS0tIExSIHN3YXAKLWRkY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKLWRkY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKLWRkY29tNTQyIGNvbXBhcmUgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKLWRkY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ1IGNvbXBhcmUgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ4IGNvbXBhcmUgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKLWRkY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKLWRkY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKLWRkY29tNTUxIGNvbXBhcmUgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKLWRkY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKLWRkY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKLWRkY29tNTU0IGNvbXBhcmUgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKLWRkY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKLWRkY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKLWRkY29tNTU3IGNvbXBhcmUgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKLWRkY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKLWRkY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKLWRkY29tNTYxIGNvbXBhcmUgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKLWRkY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKLWRkY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKLWRkY29tNTY0IGNvbXBhcmUgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKLWRkY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKLWRkY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKLWRkY29tNTY3IGNvbXBhcmUgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKLWRkY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKLWRkY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKLWRkY29tNTcwIGNvbXBhcmUgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKLWRkY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZGRjb201ODAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKLWRkY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCi1kZGNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQotZGRjb201ODMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKLWRkY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCi1kZGNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQotZGRjb201ODYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKLWRkY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCi1kZGNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQotZGRjb201ODkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCi1kZGNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKLWRkY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQotZGRjb201OTIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCi1kZGNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKLWRkY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQotZGRjb201OTUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCi1kZGNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKLWRkY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQotZGRjb201OTggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCi1kZGNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKLQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKLWRkY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjAyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKLWRkY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKLWRkY29tNjExIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKLWRkY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKLWRkY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKLWRkY29tNjE0IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKLWRkY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKLWRkY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKLWRkY29tNjE3IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKLWRkY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKLWRkY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKLWRkY29tNjIwIGNvbXBhcmUgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjIzIGNvbXBhcmUgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI2IGNvbXBhcmUgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjI5IGNvbXBhcmUgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKLWRkY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKLWRkY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKLWRkY29tNjMyIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKLWRkY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKLWRkY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKLWRkY29tNjM1IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKLWRkY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKLWRkY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKLWRkY29tNjM4IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKLWRkY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRkY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMAotZGRjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwCi1kZGNvbTY0MiBjb21wYXJlICAgMCAgICAtMC4wIC0+IDAKLWRkY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMAotZGRjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwCi1kZGNvbTY0NSBjb21wYXJlICAtMCAgICAtMCAgIC0+IDAKLWRkY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMAotZGRjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwCi1kZGNvbTY0OCBjb21wYXJlICAgMC4wICAgMCAgIC0+IDAKLWRkY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMAotZGRjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwCi1kZGNvbTY1MSBjb21wYXJlICAgMC4wICAgMC4wIC0+IDAKLWRkY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMAotZGRjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwCi1kZGNvbTY1NCBjb21wYXJlICAtMC4wICAtMC4wIC0+IDAKLWRkY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMAotCi1kZGNvbTY1NiBjb21wYXJlICAtMEUxICAgMC4wIC0+IDAKLWRkY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMAotZGRjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwCi1kZGNvbTY1OSBjb21wYXJlICAgMEUyICAgMC4wIC0+IDAKLWRkY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMAotZGRjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwCi1kZGNvbTY2MiBjb21wYXJlICAgMEUxICAgMCAgIC0+IDAKLWRkY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMAotZGRjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwCi1kZGNvbTY2NSBjb21wYXJlICAtMEUyICAtMEUxIC0+IDAKLWRkY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMAotZGRjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwCi1kZGNvbTY2OCBjb21wYXJlICAtMEUxICAtMEUyIC0+IDAKLWRkY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMAotZGRjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwCi1kZGNvbTY3MSBjb21wYXJlICAgMEUyICAtMEUyIC0+IDAKLWRkY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMAotZGRjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwCi1kZGNvbTY3NCBjb21wYXJlICAgMEUxICAgMEUxIC0+IDAKLWRkY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMAotZGRjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwCi1kZGNvbTY3NyBjb21wYXJlICAtMEUyICAgMEUyIC0+IDAKLWRkY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMAotZGRjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLWRkY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAotZGRjb202ODEgY29tcGFyZSAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCi1kZGNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKLWRkY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAotZGRjb202ODQgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCi1kZGNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKLWRkY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAotZGRjb202ODcgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCi1kZGNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKLWRkY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAotZGRjb202OTAgY29tcGFyZSAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCi1kZGNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKLWRkY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAotZGRjb202OTMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCi1kZGNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKLWRkY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAotZGRjb202OTYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCi1kZGNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKLWRkY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAotZGRjb202OTkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCi0KLS0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAotZGRjb203MDAgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxCi1kZGNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKLWRkY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTEKLWRkY29tNzAzIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQotZGRjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCi1kZGNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xCi1kZGNvbTcwNiBjb21wYXJlICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDEKLWRkY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMAotZGRjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQotCi0tLSBtaXNjZWxsYW5lb3VzCi1kZGNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQotZGRjb203MjIgY29tcGFyZSAxIDEyMzQ1Njc4MDAwIC0+IC0xCi1kZGNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQotZGRjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xCi1kZGNvbTcyNSBjb21wYXJlIDEyMzQ1Njc4OTAgIDEgLT4gMQotZGRjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xCi1kZGNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQotZGRjb203MjggY29tcGFyZSAxIDEyMzQ1Njc4OTEgIC0+IC0xCi1kZGNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQotZGRjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xCi1kZGNvbTczMSBjb21wYXJlIDEyMzQ1Njc4OTYgIDEgLT4gMQotZGRjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xCi0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCi1kZGNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDEKLWRkY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQotZGRjb203NDIgY29tcGFyZSAgMSAgMC45OTk5OSAgICAtPiAxCi1kZGNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDAKLWRkY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTEKLWRkY29tNzQ1IGNvbXBhcmUgIDEgIDEuMDAwMDAxICAgLT4gLTEKLWRkY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTEKLWRkY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTEKLWRkY29tNzUxIGNvbXBhcmUgIDAuOTk5OTk5ICAgMSAgLT4gLTEKLWRkY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTEKLWRkY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMAotZGRjb203NTQgY29tcGFyZSAgMS4wMDAwMSAgICAxICAtPiAxCi1kZGNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDEKLWRkY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQotCi0tLSBTcGVjaWFscwotZGRjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKLWRkY29tNzgxIGNvbXBhcmUgIEluZiAgLTEwMDAgIC0+ICAxCi1kZGNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQotZGRjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDEKLWRkY29tNzg0IGNvbXBhcmUgIEluZiAgIDAgICAgIC0+ICAxCi1kZGNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQotZGRjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDEKLWRkY29tNzg3IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCi1kZGNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQotZGRjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTEKLWRkY29tNzkwIGNvbXBhcmUgLTEgICAgIEluZiAgIC0+IC0xCi1kZGNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQotZGRjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTEKLWRkY29tNzkzIGNvbXBhcmUgIDEgICAgIEluZiAgIC0+IC0xCi1kZGNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQotZGRjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDAKLQotZGRjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKLWRkY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xCi1kZGNvbTgwMiBjb21wYXJlIC1JbmYgIC0xICAgICAtPiAtMQotZGRjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTEKLWRkY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xCi1kZGNvbTgwNSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAtMQotZGRjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTEKLWRkY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCi1kZGNvbTgwOCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMAotZGRjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDEKLWRkY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxCi1kZGNvbTgxMSBjb21wYXJlIC0wICAgIC1JbmYgICAtPiAgMQotZGRjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDEKLWRkY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxCi1kZGNvbTgxNCBjb21wYXJlICAxMDAwIC1JbmYgICAtPiAgMQotZGRjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDEKLQotZGRjb204MjEgY29tcGFyZSAgTmFOIC1JbmYgICAgLT4gIE5hTgotZGRjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTgotZGRjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTgotZGRjb204MjQgY29tcGFyZSAgTmFOIC0wICAgICAgLT4gIE5hTgotZGRjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTgotZGRjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTgotZGRjb204MjcgY29tcGFyZSAgTmFOICAxMDAwICAgLT4gIE5hTgotZGRjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTgotZGRjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTgotZGRjb204MzAgY29tcGFyZSAtSW5mICBOYU4gICAgLT4gIE5hTgotZGRjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTgotZGRjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTgotZGRjb204MzMgY29tcGFyZSAtMCAgICBOYU4gICAgLT4gIE5hTgotZGRjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTgotZGRjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTgotZGRjb204MzYgY29tcGFyZSAgMTAwMCBOYU4gICAgLT4gIE5hTgotZGRjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTgotZGRjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTgotZGRjb204MzkgY29tcGFyZSArTmFOIC1OYU4gICAgLT4gIE5hTgotZGRjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTgotCi1kZGNvbTg0MSBjb21wYXJlICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg0NCBjb21wYXJlICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg0NyBjb21wYXJlICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg1MCBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg1MyBjb21wYXJlIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg1NiBjb21wYXJlICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg1OSBjb21wYXJlICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kZGNvbTg2MCBjb21wYXJlICBOYU45IC1JbmYgICAtPiAgTmFOOQotZGRjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKLWRkY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43NwotZGRjb204NjMgY29tcGFyZSAtTmFONjcgTmFONSAgLT4gLU5hTjY3Ci1kZGNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONAotZGRjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzCi1kZGNvbTg2NiBjb21wYXJlICBJbmYgICBOYU4yICAtPiAgTmFOMgotZGRjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQotZGRjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQotZGRjb204NjkgY29tcGFyZSAtTmFONDEgK05hTjQyIC0+IC1OYU40MQotZGRjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQotCi1kZGNvbTg3MSBjb21wYXJlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg3NCBjb21wYXJlICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZGNvbTg3NyBjb21wYXJlICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KLWRkY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZGRjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHdpZGUgcmFuZ2UKLWRkY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xCi1kZGNvbTg4MSBjb21wYXJlIDlFKzM4NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQotZGRjb204ODIgY29tcGFyZSArMC4xMDAgOUUtMzgzICAgICAgICAgICAgICAgLT4gIDEKLWRkY29tODgzIGNvbXBhcmUgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xCi1kZGNvbTg4NSBjb21wYXJlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQotZGRjb204ODYgY29tcGFyZSA5RSszODQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKLWRkY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xCi1kZGNvbTg4OCBjb21wYXJlIDlFLTM4MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQotCi0tLSBzcHJlYWQgemVyb3MKLWRkY29tOTAwIGNvbXBhcmUgICAwRS0zODMgIDAgICAgICAgLT4gIDAKLWRkY29tOTAxIGNvbXBhcmUgICAwRS0zODMgLTAgICAgICAgLT4gIDAKLWRkY29tOTAyIGNvbXBhcmUgIC0wRS0zODMgIDAgICAgICAgLT4gIDAKLWRkY29tOTAzIGNvbXBhcmUgIC0wRS0zODMgLTAgICAgICAgLT4gIDAKLWRkY29tOTA0IGNvbXBhcmUgICAwRS0zODMgIDBFKzM4NCAgLT4gIDAKLWRkY29tOTA1IGNvbXBhcmUgICAwRS0zODMgLTBFKzM4NCAgLT4gIDAKLWRkY29tOTA2IGNvbXBhcmUgIC0wRS0zODMgIDBFKzM4NCAgLT4gIDAKLWRkY29tOTA3IGNvbXBhcmUgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDAKLWRkY29tOTA4IGNvbXBhcmUgICAwICAgICAgIDBFKzM4NCAgLT4gIDAKLWRkY29tOTA5IGNvbXBhcmUgICAwICAgICAgLTBFKzM4NCAgLT4gIDAKLWRkY29tOTEwIGNvbXBhcmUgIC0wICAgICAgIDBFKzM4NCAgLT4gIDAKLWRkY29tOTExIGNvbXBhcmUgIC0wICAgICAgLTBFKzM4NCAgLT4gIDAKLWRkY29tOTMwIGNvbXBhcmUgICAwRSszODQgIDAgICAgICAgLT4gIDAKLWRkY29tOTMxIGNvbXBhcmUgICAwRSszODQgLTAgICAgICAgLT4gIDAKLWRkY29tOTMyIGNvbXBhcmUgIC0wRSszODQgIDAgICAgICAgLT4gIDAKLWRkY29tOTMzIGNvbXBhcmUgIC0wRSszODQgLTAgICAgICAgLT4gIDAKLWRkY29tOTM0IGNvbXBhcmUgICAwRSszODQgIDBFLTM4MyAgLT4gIDAKLWRkY29tOTM1IGNvbXBhcmUgICAwRSszODQgLTBFLTM4MyAgLT4gIDAKLWRkY29tOTM2IGNvbXBhcmUgIC0wRSszODQgIDBFLTM4MyAgLT4gIDAKLWRkY29tOTM3IGNvbXBhcmUgIC0wRSszODQgLTBFLTM4MyAgLT4gIDAKLWRkY29tOTM4IGNvbXBhcmUgICAwICAgICAgIDBFLTM4MyAgLT4gIDAKLWRkY29tOTM5IGNvbXBhcmUgICAwICAgICAgLTBFLTM4MyAgLT4gIDAKLWRkY29tOTQwIGNvbXBhcmUgIC0wICAgICAgIDBFLTM4MyAgLT4gIDAKLWRkY29tOTQxIGNvbXBhcmUgIC0wICAgICAgLTBFLTM4MyAgLT4gIDAKLQotLS0gc2lnbnMKLWRkY29tOTYxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQotZGRjb205NjIgY29tcGFyZSAgMWUrNzcgLTFlKzExIC0+ICAxCi1kZGNvbTk2MyBjb21wYXJlIC0xZSs3NyAgMWUrMTEgLT4gLTEKLWRkY29tOTY0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQotZGRjb205NjUgY29tcGFyZSAgMWUtNzcgIDFlLTExIC0+IC0xCi1kZGNvbTk2NiBjb21wYXJlICAxZS03NyAtMWUtMTEgLT4gIDEKLWRkY29tOTY3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQotZGRjb205NjggY29tcGFyZSAtMWUtNzcgLTFlLTExIC0+ICAxCi0KLS0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMKLWRkY29tcDEwMDEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAwCi1kZGNvbXAxMDAyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwICAgLT4gMAotZGRjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDAKLWRkY29tcDEwMDQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwICAgICAtPiAwCi1kZGNvbXAxMDA1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwICAgICAgLT4gMAotZGRjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDAKLWRkY29tcDEwMDcgY29tcGFyZSAxIDEuMDAwMDAwMDAwICAgICAgICAtPiAwCi1kZGNvbXAxMDA4IGNvbXBhcmUgMSAxLjAwMDAwMDAwICAgICAgICAgLT4gMAotZGRjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDAKLWRkY29tcDEwMTAgY29tcGFyZSAxIDEuMDAwMDAwICAgICAgICAgICAtPiAwCi1kZGNvbXAxMDExIGNvbXBhcmUgMSAxLjAwMDAwICAgICAgICAgICAgLT4gMAotZGRjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDAKLWRkY29tcDEwMTMgY29tcGFyZSAxIDEuMDAwICAgICAgICAgICAgICAtPiAwCi1kZGNvbXAxMDE0IGNvbXBhcmUgMSAxLjAwICAgICAgICAgICAgICAgLT4gMAotZGRjb21wMTAxNSBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDAKLWRkY29tcDEwMjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMSAtPiAwCi1kZGNvbXAxMDIyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMCAgIDEgLT4gMAotZGRjb21wMTAyMyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDAKLWRkY29tcDEwMjQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMCAgICAgMSAtPiAwCi1kZGNvbXAxMDI1IGNvbXBhcmUgMS4wMDAwMDAwMDAwMCAgICAgIDEgLT4gMAotZGRjb21wMTAyNiBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDAKLWRkY29tcDEwMjcgY29tcGFyZSAxLjAwMDAwMDAwMCAgICAgICAgMSAtPiAwCi1kZGNvbXAxMDI4IGNvbXBhcmUgMS4wMDAwMDAwMCAgICAgICAgIDEgLT4gMAotZGRjb21wMTAyOSBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDAKLWRkY29tcDEwMzAgY29tcGFyZSAxLjAwMDAwMCAgICAgICAgICAgMSAtPiAwCi1kZGNvbXAxMDMxIGNvbXBhcmUgMS4wMDAwMCAgICAgICAgICAgIDEgLT4gMAotZGRjb21wMTAzMiBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDAKLWRkY29tcDEwMzMgY29tcGFyZSAxLjAwMCAgICAgICAgICAgICAgMSAtPiAwCi1kZGNvbXAxMDM0IGNvbXBhcmUgMS4wMCAgICAgICAgICAgICAgIDEgLT4gMAotZGRjb21wMTAzNSBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDAKLQotLS0gY2hlY2sgTVNEIGFsd2F5cyBkZXRlY3RlZCBub24temVybwotZGRjb21wMTA0MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKLWRkY29tcDEwNDEgY29tcGFyZSAwIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZGRjb21wMTA0MiBjb21wYXJlIDAgMi4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kZGNvbXAxMDQzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRkY29tcDEwNDQgY29tcGFyZSAwIDQuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZGRjb21wMTA0NSBjb21wYXJlIDAgNS4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kZGNvbXAxMDQ2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRkY29tcDEwNDcgY29tcGFyZSAwIDcuMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZGRjb21wMTA0OCBjb21wYXJlIDAgOC4wMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kZGNvbXAxMDQ5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRkY29tcDEwNTAgY29tcGFyZSAwLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAwCi1kZGNvbXAxMDUxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotZGRjb21wMTA1MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRkY29tcDEwNTMgY29tcGFyZSAzLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi1kZGNvbXAxMDU0IGNvbXBhcmUgNC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotZGRjb21wMTA1NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRkY29tcDEwNTYgY29tcGFyZSA2LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi1kZGNvbXAxMDU3IGNvbXBhcmUgNy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotZGRjb21wMTA1OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRkY29tcDEwNTkgY29tcGFyZSA5LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi0KLS0tIE51bGwgdGVzdHMKLWRkY29tOTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRjb205OTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZENvbXBhcmUuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksDQorLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90DQorLS0gb3ZlcmZsb3cgb3IgdW5kZXJmbG93LCBzbyBhY3R1YWwgc3VidHJhY3Rpb25zIGFyZSBub3QgbmVjZXNzYXJ5KS4NCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZGRjb20wMDEgY29tcGFyZSAgLTIgIC0yICAtPiAwDQorZGRjb20wMDIgY29tcGFyZSAgLTIgIC0xICAtPiAtMQ0KK2RkY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTENCitkZGNvbTAwNCBjb21wYXJlICAtMiAgIDEgIC0+IC0xDQorZGRjb20wMDUgY29tcGFyZSAgLTIgICAyICAtPiAtMQ0KK2RkY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQ0KK2RkY29tMDA3IGNvbXBhcmUgIC0xICAtMSAgLT4gMA0KK2RkY29tMDA4IGNvbXBhcmUgIC0xICAgMCAgLT4gLTENCitkZGNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xDQorZGRjb20wMTAgY29tcGFyZSAgLTEgICAyICAtPiAtMQ0KK2RkY29tMDExIGNvbXBhcmUgICAwICAtMiAgLT4gMQ0KK2RkY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQ0KK2RkY29tMDEzIGNvbXBhcmUgICAwICAgMCAgLT4gMA0KK2RkY29tMDE0IGNvbXBhcmUgICAwICAgMSAgLT4gLTENCitkZGNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xDQorZGRjb20wMTYgY29tcGFyZSAgIDEgIC0yICAtPiAxDQorZGRjb20wMTcgY29tcGFyZSAgIDEgIC0xICAtPiAxDQorZGRjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxDQorZGRjb20wMTkgY29tcGFyZSAgIDEgICAxICAtPiAwDQorZGRjb20wMjAgY29tcGFyZSAgIDEgICAyICAtPiAtMQ0KK2RkY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQ0KK2RkY29tMDIyIGNvbXBhcmUgICAyICAtMSAgLT4gMQ0KK2RkY29tMDIzIGNvbXBhcmUgICAyICAgMCAgLT4gMQ0KK2RkY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQ0KK2RkY29tMDI2IGNvbXBhcmUgICAyICAgMiAgLT4gMA0KKw0KK2RkY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwDQorZGRjb20wMzIgY29tcGFyZSAgLTIwICAtMTAgIC0+IC0xDQorZGRjb20wMzMgY29tcGFyZSAgLTIwICAgMDAgIC0+IC0xDQorZGRjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xDQorZGRjb20wMzUgY29tcGFyZSAgLTIwICAgMjAgIC0+IC0xDQorZGRjb20wMzYgY29tcGFyZSAgLTEwICAtMjAgIC0+IDENCitkZGNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMA0KK2RkY29tMDM4IGNvbXBhcmUgIC0xMCAgIDAwICAtPiAtMQ0KK2RkY29tMDM5IGNvbXBhcmUgIC0xMCAgIDEwICAtPiAtMQ0KK2RkY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQ0KK2RkY29tMDQxIGNvbXBhcmUgICAwMCAgLTIwICAtPiAxDQorZGRjb20wNDIgY29tcGFyZSAgIDAwICAtMTAgIC0+IDENCitkZGNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMA0KK2RkY29tMDQ0IGNvbXBhcmUgICAwMCAgIDEwICAtPiAtMQ0KK2RkY29tMDQ1IGNvbXBhcmUgICAwMCAgIDIwICAtPiAtMQ0KK2RkY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxDQorZGRjb20wNDcgY29tcGFyZSAgIDEwICAtMTAgIC0+IDENCitkZGNvbTA0OCBjb21wYXJlICAgMTAgICAwMCAgLT4gMQ0KK2RkY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwDQorZGRjb20wNTAgY29tcGFyZSAgIDEwICAgMjAgIC0+IC0xDQorZGRjb20wNTEgY29tcGFyZSAgIDIwICAtMjAgIC0+IDENCitkZGNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQ0KK2RkY29tMDUzIGNvbXBhcmUgICAyMCAgIDAwICAtPiAxDQorZGRjb20wNTUgY29tcGFyZSAgIDIwICAgMTAgIC0+IDENCitkZGNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMA0KKw0KK2RkY29tMDYxIGNvbXBhcmUgIC0yLjAgIC0yLjAgIC0+IDANCitkZGNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQ0KK2RkY29tMDYzIGNvbXBhcmUgIC0yLjAgICAwLjAgIC0+IC0xDQorZGRjb20wNjQgY29tcGFyZSAgLTIuMCAgIDEuMCAgLT4gLTENCitkZGNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQ0KK2RkY29tMDY2IGNvbXBhcmUgIC0xLjAgIC0yLjAgIC0+IDENCitkZGNvbTA2NyBjb21wYXJlICAtMS4wICAtMS4wICAtPiAwDQorZGRjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTENCitkZGNvbTA2OSBjb21wYXJlICAtMS4wICAgMS4wICAtPiAtMQ0KK2RkY29tMDcwIGNvbXBhcmUgIC0xLjAgICAyLjAgIC0+IC0xDQorZGRjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQ0KK2RkY29tMDcyIGNvbXBhcmUgICAwLjAgIC0xLjAgIC0+IDENCitkZGNvbTA3MyBjb21wYXJlICAgMC4wICAgMC4wICAtPiAwDQorZGRjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTENCitkZGNvbTA3NSBjb21wYXJlICAgMC4wICAgMi4wICAtPiAtMQ0KK2RkY29tMDc2IGNvbXBhcmUgICAxLjAgIC0yLjAgIC0+IDENCitkZGNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxDQorZGRjb20wNzggY29tcGFyZSAgIDEuMCAgIDAuMCAgLT4gMQ0KK2RkY29tMDc5IGNvbXBhcmUgICAxLjAgICAxLjAgIC0+IDANCitkZGNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQ0KK2RkY29tMDgxIGNvbXBhcmUgICAyLjAgIC0yLjAgIC0+IDENCitkZGNvbTA4MiBjb21wYXJlICAgMi4wICAtMS4wICAtPiAxDQorZGRjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQ0KK2RkY29tMDg1IGNvbXBhcmUgICAyLjAgICAxLjAgIC0+IDENCitkZGNvbTA4NiBjb21wYXJlICAgMi4wICAgMi4wICAtPiAwDQorZGRjb20wODcgY29tcGFyZSAgIDEuMCAgIDAuMSAgLT4gMQ0KK2RkY29tMDg4IGNvbXBhcmUgICAwLjEgICAxLjAgIC0+IC0xDQorDQorLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQorZGRjb20wOTUgY29tcGFyZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAwDQorZGRjb20wOTYgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtMQ0KK2RkY29tMDk3IGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMQ0KK2RkY29tMDk4IGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMA0KKw0KKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KK2RkY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDANCitkZGNvbTEwMSBjb21wYXJlICAgNy4wICAgIDcgICAgICAtPiAwDQorZGRjb20xMDIgY29tcGFyZSAgIDcgICAgICA3LjAgICAgLT4gMA0KK2RkY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDANCitkZGNvbTEwNCBjb21wYXJlICAgNzBFLTEgIDcuMCAgICAtPiAwDQorZGRjb20xMDUgY29tcGFyZSAgIDAuN0UrMSA3ICAgICAgLT4gMA0KK2RkY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDANCitkZGNvbTEwNyBjb21wYXJlICAgNy4wICAgIDdFKzAgICAtPiAwDQorZGRjb20xMDggY29tcGFyZSAgIDcuMCAgICA3MEUtMSAgLT4gMA0KK2RkY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDANCitkZGNvbTExMCBjb21wYXJlICAgNyAgICAgIDcwRS0xICAtPiAwDQorDQorZGRjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQ0KK2RkY29tMTIxIGNvbXBhcmUgICA4LjAgICAgNyAgICAgIC0+IDENCitkZGNvbTEyMiBjb21wYXJlICAgOCAgICAgIDcuMCAgICAtPiAxDQorZGRjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQ0KK2RkY29tMTI0IGNvbXBhcmUgICA4MEUtMSAgNy4wICAgIC0+IDENCitkZGNvbTEyNSBjb21wYXJlICAgMC44RSsxIDcgICAgICAtPiAxDQorZGRjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQ0KK2RkY29tMTI3IGNvbXBhcmUgICA4LjAgICAgN0UrMCAgIC0+IDENCitkZGNvbTEyOCBjb21wYXJlICAgOC4wICAgIDcwRS0xICAtPiAxDQorZGRjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDENCitkZGNvbTEzMCBjb21wYXJlICAgOCAgICAgIDcwRS0xICAtPiAxDQorDQorZGRjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTENCitkZGNvbTE0MSBjb21wYXJlICAgOC4wICAgIDkgICAgICAtPiAtMQ0KK2RkY29tMTQyIGNvbXBhcmUgICA4ICAgICAgOS4wICAgIC0+IC0xDQorZGRjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTENCitkZGNvbTE0NCBjb21wYXJlICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KK2RkY29tMTQ1IGNvbXBhcmUgICAwLjhFKzEgOSAgICAgIC0+IC0xDQorZGRjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTENCitkZGNvbTE0NyBjb21wYXJlICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KK2RkY29tMTQ4IGNvbXBhcmUgICA4LjAgICAgOTBFLTEgIC0+IC0xDQorZGRjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTENCitkZGNvbTE1MCBjb21wYXJlICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCitkZGNvbTIwMCBjb21wYXJlICAtNy4wICAgIDcuMCAgICAtPiAtMQ0KK2RkY29tMjAxIGNvbXBhcmUgIC03LjAgICAgNyAgICAgIC0+IC0xDQorZGRjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTENCitkZGNvbTIwMyBjb21wYXJlICAtN0UrMCAgIDcuMCAgICAtPiAtMQ0KK2RkY29tMjA0IGNvbXBhcmUgIC03MEUtMSAgNy4wICAgIC0+IC0xDQorZGRjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTENCitkZGNvbTIwNiBjb21wYXJlICAtNzBFLTEgIDcgICAgICAtPiAtMQ0KK2RkY29tMjA3IGNvbXBhcmUgIC03LjAgICAgN0UrMCAgIC0+IC0xDQorZGRjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTENCitkZGNvbTIwOSBjb21wYXJlICAtNyAgICAgIDAuN0UrMSAtPiAtMQ0KK2RkY29tMjEwIGNvbXBhcmUgIC03ICAgICAgNzBFLTEgIC0+IC0xDQorDQorZGRjb20yMjAgY29tcGFyZSAgLTguMCAgICA3LjAgICAgLT4gLTENCitkZGNvbTIyMSBjb21wYXJlICAtOC4wICAgIDcgICAgICAtPiAtMQ0KK2RkY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xDQorZGRjb20yMjMgY29tcGFyZSAgLThFKzAgICA3LjAgICAgLT4gLTENCitkZGNvbTIyNCBjb21wYXJlICAtODBFLTEgIDcuMCAgICAtPiAtMQ0KK2RkY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQorZGRjb20yMjYgY29tcGFyZSAgLTgwRS0xICA3ICAgICAgLT4gLTENCitkZGNvbTIyNyBjb21wYXJlICAtOC4wICAgIDdFKzAgICAtPiAtMQ0KK2RkY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xDQorZGRjb20yMjkgY29tcGFyZSAgLTggICAgICAwLjdFKzEgLT4gLTENCitkZGNvbTIzMCBjb21wYXJlICAtOCAgICAgIDcwRS0xICAtPiAtMQ0KKw0KK2RkY29tMjQwIGNvbXBhcmUgIC04LjAgICAgOS4wICAgIC0+IC0xDQorZGRjb20yNDEgY29tcGFyZSAgLTguMCAgICA5ICAgICAgLT4gLTENCitkZGNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQ0KK2RkY29tMjQzIGNvbXBhcmUgIC04RSswICAgOS4wICAgIC0+IC0xDQorZGRjb20yNDQgY29tcGFyZSAgLTgwRS0xICA5LjAgICAgLT4gLTENCitkZGNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQ0KK2RkY29tMjQ2IGNvbXBhcmUgIC04MEUtMSAgOSAgICAgIC0+IC0xDQorZGRjb20yNDcgY29tcGFyZSAgLTguMCAgICA5RSswICAgLT4gLTENCitkZGNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQ0KK2RkY29tMjQ5IGNvbXBhcmUgIC04ICAgICAgMC45RSsxIC0+IC0xDQorZGRjb20yNTAgY29tcGFyZSAgLTggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQorZGRjb20zMDAgY29tcGFyZSAgIDcuMCAgICAtNy4wICAgIC0+IDENCitkZGNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQ0KK2RkY29tMzAyIGNvbXBhcmUgICA3ICAgICAgLTcuMCAgICAtPiAxDQorZGRjb20zMDMgY29tcGFyZSAgIDdFKzAgICAtNy4wICAgIC0+IDENCitkZGNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KK2RkY29tMzA1IGNvbXBhcmUgICAuN0UrMSAgLTcgICAgICAtPiAxDQorZGRjb20zMDYgY29tcGFyZSAgIDcwRS0xICAtNyAgICAgIC0+IDENCitkZGNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQ0KK2RkY29tMzA4IGNvbXBhcmUgICA3LjAgICAgLTcwRS0xICAtPiAxDQorZGRjb20zMDkgY29tcGFyZSAgIDcgICAgICAtLjdFKzEgIC0+IDENCitkZGNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KKw0KK2RkY29tMzIwIGNvbXBhcmUgICA4LjAgICAgLTcuMCAgICAtPiAxDQorZGRjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDENCitkZGNvbTMyMiBjb21wYXJlICAgOCAgICAgIC03LjAgICAgLT4gMQ0KK2RkY29tMzIzIGNvbXBhcmUgICA4RSswICAgLTcuMCAgICAtPiAxDQorZGRjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDENCitkZGNvbTMyNSBjb21wYXJlICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KK2RkY29tMzI2IGNvbXBhcmUgICA4MEUtMSAgLTcgICAgICAtPiAxDQorZGRjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDENCitkZGNvbTMyOCBjb21wYXJlICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KK2RkY29tMzI5IGNvbXBhcmUgICA4ICAgICAgLS43RSsxICAtPiAxDQorZGRjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDENCisNCitkZGNvbTM0MCBjb21wYXJlICAgOC4wICAgIC05LjAgICAgLT4gMQ0KK2RkY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxDQorZGRjb20zNDIgY29tcGFyZSAgIDggICAgICAtOS4wICAgIC0+IDENCitkZGNvbTM0MyBjb21wYXJlICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RkY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxDQorZGRjb20zNDUgY29tcGFyZSAgIC44RSsxICAtOSAgICAgIC0+IDENCitkZGNvbTM0NiBjb21wYXJlICAgODBFLTEgIC05ICAgICAgLT4gMQ0KK2RkY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxDQorZGRjb20zNDggY29tcGFyZSAgIDguMCAgICAtOTBFLTEgIC0+IDENCitkZGNvbTM0OSBjb21wYXJlICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RkY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KK2RkY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMA0KK2RkY29tNDAxIGNvbXBhcmUgICAtNy4wICAgIC03ICAgICAgLT4gMA0KK2RkY29tNDAyIGNvbXBhcmUgICAtNyAgICAgIC03LjAgICAgLT4gMA0KK2RkY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMA0KK2RkY29tNDA0IGNvbXBhcmUgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KK2RkY29tNDA1IGNvbXBhcmUgICAtLjdFKzEgIC03ICAgICAgLT4gMA0KK2RkY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMA0KK2RkY29tNDA3IGNvbXBhcmUgICAtNy4wICAgIC03RSswICAgLT4gMA0KK2RkY29tNDA4IGNvbXBhcmUgICAtNy4wICAgIC03MEUtMSAgLT4gMA0KK2RkY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KK2RkY29tNDEwIGNvbXBhcmUgICAtNyAgICAgIC03MEUtMSAgLT4gMA0KKw0KK2RkY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTENCitkZGNvbTQyMSBjb21wYXJlICAgLTguMCAgICAtNyAgICAgIC0+IC0xDQorZGRjb200MjIgY29tcGFyZSAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KK2RkY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCitkZGNvbTQyNCBjb21wYXJlICAgLTgwRS0xICAtNy4wICAgIC0+IC0xDQorZGRjb200MjUgY29tcGFyZSAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KK2RkY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTENCitkZGNvbTQyNyBjb21wYXJlICAgLTguMCAgICAtN0UrMCAgIC0+IC0xDQorZGRjb200MjggY29tcGFyZSAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KK2RkY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCitkZGNvbTQzMCBjb21wYXJlICAgLTggICAgICAtNzBFLTEgIC0+IC0xDQorDQorZGRjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxDQorZGRjb200NDEgY29tcGFyZSAgIC04LjAgICAgLTkgICAgICAtPiAxDQorZGRjb200NDIgY29tcGFyZSAgIC04ICAgICAgLTkuMCAgICAtPiAxDQorZGRjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxDQorZGRjb200NDQgY29tcGFyZSAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQorZGRjb200NDUgY29tcGFyZSAgIC0uOEUrMSAgLTkgICAgICAtPiAxDQorZGRjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxDQorZGRjb200NDcgY29tcGFyZSAgIC04LjAgICAgLTlFKzAgICAtPiAxDQorZGRjb200NDggY29tcGFyZSAgIC04LjAgICAgLTkwRS0xICAtPiAxDQorZGRjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxDQorZGRjb200NTAgY29tcGFyZSAgIC04ICAgICAgLTkwRS0xICAtPiAxDQorDQorLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQorZGRjb200NTEgY29tcGFyZSAgICAgIDEuMCAgICAgICAwLjEgIC0+IDENCitkZGNvbTQ1MiBjb21wYXJlICAgICAgMC4xICAgICAgIDEuMCAgLT4gLTENCitkZGNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQ0KK2RkY29tNDU0IGNvbXBhcmUgICAgICAwLjEgICAgICAxMC4wICAtPiAtMQ0KK2RkY29tNDU1IGNvbXBhcmUgICAgICAxMDAgICAgICAgMS4wICAtPiAxDQorZGRjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xDQorZGRjb200NTcgY29tcGFyZSAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDENCitkZGNvbTQ1OCBjb21wYXJlICAgICAxMC4wICAgICAgMTAwMCAgLT4gLTENCitkZGNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQ0KK2RkY29tNDYwIGNvbXBhcmUgICAgMTAwLjAgICAgIDEwMDAwICAtPiAtMQ0KK2RkY29tNDYxIGNvbXBhcmUgICAxMDAwMDAgICAgMTAwMC4wICAtPiAxDQorZGRjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xDQorZGRjb200NjMgY29tcGFyZSAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDENCitkZGNvbTQ2NCBjb21wYXJlICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gLTENCisNCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCitkZGNvbTQ3MyBjb21wYXJlIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQorZGRjb200NzQgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQorZGRjb200NzUgY29tcGFyZSAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNvbTQ3NiBjb21wYXJlIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQorZGRjb200NzcgY29tcGFyZSAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQorZGRjb200NzggY29tcGFyZSAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCitkZGNvbTQ3OSBjb21wYXJlIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwDQorZGRjb200ODAgY29tcGFyZSAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQorZGRjb200ODEgY29tcGFyZSAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNvbTQ4MiBjb21wYXJlIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwDQorZGRjb200ODMgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwDQorZGRjb200ODcgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgLT4gMA0KK2RkY29tNDg4IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMA0KK2RkY29tNDg5IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAwDQorZGRjb200OTAgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgLT4gMA0KK2RkY29tNDkxIGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMA0KK2RkY29tNDkyIGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAwDQorZGRjb200OTMgY29tcGFyZSAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgLT4gMA0KK2RkY29tNDk0IGNvbXBhcmUgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMA0KK2RkY29tNDk1IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAwDQorZGRjb200OTYgY29tcGFyZSAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgLT4gMA0KK2RkY29tNDk3IGNvbXBhcmUgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMA0KKw0KKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCitkZGNvbTUwMCBjb21wYXJlICAgIDEgICAgIDFFLTE1ICAgIC0+IDENCitkZGNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCitkZGNvbTUwMiBjb21wYXJlICAgIDEgICAgIDFFLTEzICAgIC0+IDENCitkZGNvbTUwMyBjb21wYXJlICAgIDEgICAgIDFFLTEyICAgIC0+IDENCitkZGNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDENCitkZGNvbTUwNSBjb21wYXJlICAgIDEgICAgIDFFLTEwICAgIC0+IDENCitkZGNvbTUwNiBjb21wYXJlICAgIDEgICAgIDFFLTkgICAgIC0+IDENCitkZGNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDENCitkZGNvbTUwOCBjb21wYXJlICAgIDEgICAgIDFFLTcgICAgIC0+IDENCitkZGNvbTUwOSBjb21wYXJlICAgIDEgICAgIDFFLTYgICAgIC0+IDENCitkZGNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDENCitkZGNvbTUxMSBjb21wYXJlICAgIDEgICAgIDFFLTQgICAgIC0+IDENCitkZGNvbTUxMiBjb21wYXJlICAgIDEgICAgIDFFLTMgICAgIC0+IDENCitkZGNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDENCitkZGNvbTUxNCBjb21wYXJlICAgIDEgICAgIDFFLTEgICAgIC0+IDENCitkZGNvbTUxNSBjb21wYXJlICAgIDEgICAgIDFFLTAgICAgIC0+IDANCitkZGNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQorZGRjb201MTcgY29tcGFyZSAgICAxICAgICAxRSsyICAgICAtPiAtMQ0KK2RkY29tNTE4IGNvbXBhcmUgICAgMSAgICAgMUUrMyAgICAgLT4gLTENCitkZGNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQorZGRjb201MjEgY29tcGFyZSAgICAxICAgICAxRSs1ICAgICAtPiAtMQ0KK2RkY29tNTIyIGNvbXBhcmUgICAgMSAgICAgMUUrNiAgICAgLT4gLTENCitkZGNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQorZGRjb201MjQgY29tcGFyZSAgICAxICAgICAxRSs4ICAgICAtPiAtMQ0KK2RkY29tNTI1IGNvbXBhcmUgICAgMSAgICAgMUUrOSAgICAgLT4gLTENCitkZGNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQorZGRjb201MjcgY29tcGFyZSAgICAxICAgICAxRSsxMSAgICAtPiAtMQ0KK2RkY29tNTI4IGNvbXBhcmUgICAgMSAgICAgMUUrMTIgICAgLT4gLTENCitkZGNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQorZGRjb201MzAgY29tcGFyZSAgICAxICAgICAxRSsxNCAgICAtPiAtMQ0KK2RkY29tNTMxIGNvbXBhcmUgICAgMSAgICAgMUUrMTUgICAgLT4gLTENCistLSBMUiBzd2FwDQorZGRjb201NDAgY29tcGFyZSAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KK2RkY29tNTQxIGNvbXBhcmUgICAgMUUtMTQgIDEgICAgICAgLT4gLTENCitkZGNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xDQorZGRjb201NDMgY29tcGFyZSAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KK2RkY29tNTQ0IGNvbXBhcmUgICAgMUUtMTEgIDEgICAgICAgLT4gLTENCitkZGNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xDQorZGRjb201NDYgY29tcGFyZSAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KK2RkY29tNTQ3IGNvbXBhcmUgICAgMUUtOCAgIDEgICAgICAgLT4gLTENCitkZGNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xDQorZGRjb201NDkgY29tcGFyZSAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KK2RkY29tNTUwIGNvbXBhcmUgICAgMUUtNSAgIDEgICAgICAgLT4gLTENCitkZGNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xDQorZGRjb201NTIgY29tcGFyZSAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KK2RkY29tNTUzIGNvbXBhcmUgICAgMUUtMiAgIDEgICAgICAgLT4gLTENCitkZGNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xDQorZGRjb201NTUgY29tcGFyZSAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KK2RkY29tNTU2IGNvbXBhcmUgICAgMUUrMSAgIDEgICAgICAgLT4gIDENCitkZGNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxDQorZGRjb201NTggY29tcGFyZSAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KK2RkY29tNTU5IGNvbXBhcmUgICAgMUUrNCAgIDEgICAgICAgLT4gIDENCitkZGNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxDQorZGRjb201NjIgY29tcGFyZSAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KK2RkY29tNTYzIGNvbXBhcmUgICAgMUUrNyAgIDEgICAgICAgLT4gIDENCitkZGNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxDQorZGRjb201NjUgY29tcGFyZSAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KK2RkY29tNTY2IGNvbXBhcmUgICAgMUUrMTAgIDEgICAgICAgLT4gIDENCitkZGNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxDQorZGRjb201NjggY29tcGFyZSAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KK2RkY29tNTY5IGNvbXBhcmUgICAgMUUrMTMgIDEgICAgICAgLT4gIDENCitkZGNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxDQorZGRjb201NzEgY29tcGFyZSAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KK2RkY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxDQorZGRjb201ODEgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCitkZGNvbTU4MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQ0KK2RkY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxDQorZGRjb201ODQgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCitkZGNvbTU4NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQ0KK2RkY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxDQorZGRjb201ODcgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCitkZGNvbTU4OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQ0KK2RkY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQ0KK2RkY29tNTkwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KK2RkY29tNTkxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQ0KK2RkY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQ0KK2RkY29tNTkzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KK2RkY29tNTk0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQ0KK2RkY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQ0KK2RkY29tNTk2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KK2RkY29tNTk3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQ0KK2RkY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQ0KK2RkY29tNTk5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KKw0KKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQorZGRjb202MDAgY29tcGFyZSAgIDEyICAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY29tNjAxIGNvbXBhcmUgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZGRjb202MDMgY29tcGFyZSAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY29tNjA0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQorZGRjb202MDYgY29tcGFyZSAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY29tNjA3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCitkZGNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQorZGRjb202MDkgY29tcGFyZSAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAtPiAtMQ0KK2RkY29tNjEwIGNvbXBhcmUgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCitkZGNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQorZGRjb202MTIgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAtPiAgMQ0KK2RkY29tNjEzIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCitkZGNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQorZGRjb202MTUgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAtPiAgMQ0KK2RkY29tNjE2IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCitkZGNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQorZGRjb202MTggY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAtPiAgMQ0KK2RkY29tNjE5IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCitkZGNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjb202MjEgY29tcGFyZSAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RkY29tNjIyIGNvbXBhcmUgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjb202MjQgY29tcGFyZSAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RkY29tNjI1IGNvbXBhcmUgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjb202MjcgY29tcGFyZSAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAtPiAgMQ0KK2RkY29tNjI4IGNvbXBhcmUgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCitkZGNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQorZGRjb202MzAgY29tcGFyZSAgLTEyLjEyMzQgLTEyICAgICAgICAgICAtPiAtMQ0KK2RkY29tNjMxIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCitkZGNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQorZGRjb202MzMgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAtPiAtMQ0KK2RkY29tNjM0IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCitkZGNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQorZGRjb202MzYgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAtPiAtMQ0KK2RkY29tNjM3IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCitkZGNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQorZGRjb202MzkgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAtPiAtMQ0KKw0KKy0tIGV4dGVuZGVkIHplcm9zDQorZGRjb202NDAgY29tcGFyZSAgIDAgICAgIDAgICAtPiAwDQorZGRjb202NDEgY29tcGFyZSAgIDAgICAgLTAgICAtPiAwDQorZGRjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwDQorZGRjb202NDMgY29tcGFyZSAgIDAgICAgIDAuMCAtPiAwDQorZGRjb202NDQgY29tcGFyZSAgLTAgICAgIDAgICAtPiAwDQorZGRjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwDQorZGRjb202NDYgY29tcGFyZSAgLTAgICAgLTAuMCAtPiAwDQorZGRjb202NDcgY29tcGFyZSAgLTAgICAgIDAuMCAtPiAwDQorZGRjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwDQorZGRjb202NDkgY29tcGFyZSAgIDAuMCAgLTAgICAtPiAwDQorZGRjb202NTAgY29tcGFyZSAgIDAuMCAgLTAuMCAtPiAwDQorZGRjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwDQorZGRjb202NTIgY29tcGFyZSAgLTAuMCAgIDAgICAtPiAwDQorZGRjb202NTMgY29tcGFyZSAgLTAuMCAgLTAgICAtPiAwDQorZGRjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwDQorZGRjb202NTUgY29tcGFyZSAgLTAuMCAgIDAuMCAtPiAwDQorDQorZGRjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwDQorZGRjb202NTcgY29tcGFyZSAgLTBFMiAgIDAuMCAtPiAwDQorZGRjb202NTggY29tcGFyZSAgIDBFMSAgIDAuMCAtPiAwDQorZGRjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwDQorZGRjb202NjAgY29tcGFyZSAgLTBFMSAgIDAgICAtPiAwDQorZGRjb202NjEgY29tcGFyZSAgLTBFMiAgIDAgICAtPiAwDQorZGRjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwDQorZGRjb202NjMgY29tcGFyZSAgIDBFMiAgIDAgICAtPiAwDQorZGRjb202NjQgY29tcGFyZSAgLTBFMSAgLTBFMSAtPiAwDQorZGRjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwDQorZGRjb202NjYgY29tcGFyZSAgIDBFMSAgLTBFMSAtPiAwDQorZGRjb202NjcgY29tcGFyZSAgIDBFMiAgLTBFMSAtPiAwDQorZGRjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwDQorZGRjb202NjkgY29tcGFyZSAgLTBFMiAgLTBFMiAtPiAwDQorZGRjb202NzAgY29tcGFyZSAgIDBFMSAgLTBFMiAtPiAwDQorZGRjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwDQorZGRjb202NzIgY29tcGFyZSAgLTBFMSAgIDBFMSAtPiAwDQorZGRjb202NzMgY29tcGFyZSAgLTBFMiAgIDBFMSAtPiAwDQorZGRjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwDQorZGRjb202NzUgY29tcGFyZSAgIDBFMiAgIDBFMSAtPiAwDQorZGRjb202NzYgY29tcGFyZSAgLTBFMSAgIDBFMiAtPiAwDQorZGRjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwDQorZGRjb202NzggY29tcGFyZSAgIDBFMSAgIDBFMiAtPiAwDQorZGRjb202NzkgY29tcGFyZSAgIDBFMiAgIDBFMiAtPiAwDQorDQorLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQ0KK2RkY29tNjgwIGNvbXBhcmUgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KK2RkY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMA0KK2RkY29tNjgyIGNvbXBhcmUgICAxMiAgICAxMi4wMCAgICAgICAgLT4gMA0KK2RkY29tNjgzIGNvbXBhcmUgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMA0KK2RkY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMA0KK2RkY29tNjg1IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMCAgICAgLT4gMA0KK2RkY29tNjg2IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMA0KK2RkY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMA0KK2RkY29tNjg4IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMCAgLT4gMA0KK2RkY29tNjg5IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMA0KK2RkY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KK2RkY29tNjkxIGNvbXBhcmUgICAxMi4wICAgICAgICAgICAgMTIgLT4gMA0KK2RkY29tNjkyIGNvbXBhcmUgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMA0KK2RkY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMA0KK2RkY29tNjk0IGNvbXBhcmUgICAxMi4wMDAwICAgICAgICAgMTIgLT4gMA0KK2RkY29tNjk1IGNvbXBhcmUgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMA0KK2RkY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMA0KK2RkY29tNjk3IGNvbXBhcmUgICAxMi4wMDAwMDAwICAgICAgMTIgLT4gMA0KK2RkY29tNjk4IGNvbXBhcmUgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMA0KK2RkY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMA0KKw0KKy0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdA0KK2RkY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTUgLT4gMQ0KK2RkY29tNzAxIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMA0KK2RkY29tNzAyIGNvbXBhcmUgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTENCitkZGNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAwMjM0NTY3ODkwMTIzNDU2IC0+IDENCitkZGNvbTcwNCBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDANCitkZGNvbTcwNSBjb21wYXJlICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xDQorZGRjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTAzNDU2Nzg5MDEyMzQ1NiAtPiAxDQorZGRjb203MDcgY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTEzNDU2Nzg5MDEyMzQ1NiAtPiAwDQorZGRjb203MDggY29tcGFyZSAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQ0KKw0KKy0tIG1pc2NlbGxhbmVvdXMNCitkZGNvbTcyMSBjb21wYXJlIDEyMzQ1Njc4MDAwIDEgLT4gMQ0KK2RkY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQ0KK2RkY29tNzIzIGNvbXBhcmUgMTIzNDU2NzgwMCAgMSAtPiAxDQorZGRjb203MjQgY29tcGFyZSAxIDEyMzQ1Njc4MDAgIC0+IC0xDQorZGRjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDENCitkZGNvbTcyNiBjb21wYXJlIDEgMTIzNDU2Nzg5MCAgLT4gLTENCitkZGNvbTcyNyBjb21wYXJlIDEyMzQ1Njc4OTEgIDEgLT4gMQ0KK2RkY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQ0KK2RkY29tNzI5IGNvbXBhcmUgMTIzNDU2Nzg5MDEgMSAtPiAxDQorZGRjb203MzAgY29tcGFyZSAxIDEyMzQ1Njc4OTAxIC0+IC0xDQorZGRjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDENCitkZGNvbTczMiBjb21wYXJlIDEgMTIzNDU2Nzg5NiAgLT4gLTENCisNCistLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbg0KK2RkY29tNzQwIGNvbXBhcmUgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KK2RkY29tNzQxIGNvbXBhcmUgIDEgIDAuOTk5OTk5ICAgLT4gMQ0KK2RkY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQ0KK2RkY29tNzQzIGNvbXBhcmUgIDEgIDEuMDAwMCAgICAgLT4gMA0KK2RkY29tNzQ0IGNvbXBhcmUgIDEgIDEuMDAwMDEgICAgLT4gLTENCitkZGNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xDQorZGRjb203NDYgY29tcGFyZSAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KK2RkY29tNzUwIGNvbXBhcmUgIDAuOTk5OTk5OSAgMSAgLT4gLTENCitkZGNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xDQorZGRjb203NTIgY29tcGFyZSAgMC45OTk5OSAgICAxICAtPiAtMQ0KK2RkY29tNzUzIGNvbXBhcmUgIDEuMDAwMCAgICAgMSAgLT4gMA0KK2RkY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQ0KK2RkY29tNzU1IGNvbXBhcmUgIDEuMDAwMDAxICAgMSAgLT4gMQ0KK2RkY29tNzU2IGNvbXBhcmUgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KKw0KKy0tIFNwZWNpYWxzDQorZGRjb203ODAgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDENCitkZGNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQ0KK2RkY29tNzgyIGNvbXBhcmUgIEluZiAgLTEgICAgIC0+ICAxDQorZGRjb203ODMgY29tcGFyZSAgSW5mICAtMCAgICAgLT4gIDENCitkZGNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQ0KK2RkY29tNzg1IGNvbXBhcmUgIEluZiAgIDEgICAgIC0+ICAxDQorZGRjb203ODYgY29tcGFyZSAgSW5mICAgMTAwMCAgLT4gIDENCitkZGNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMA0KK2RkY29tNzg4IGNvbXBhcmUgLTEwMDAgIEluZiAgIC0+IC0xDQorZGRjb203ODkgY29tcGFyZSAtSW5mICAgSW5mICAgLT4gLTENCitkZGNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQ0KK2RkY29tNzkxIGNvbXBhcmUgLTAgICAgIEluZiAgIC0+IC0xDQorZGRjb203OTIgY29tcGFyZSAgMCAgICAgSW5mICAgLT4gLTENCitkZGNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQ0KK2RkY29tNzk0IGNvbXBhcmUgIDEwMDAgIEluZiAgIC0+IC0xDQorZGRjb203OTUgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDANCisNCitkZGNvbTgwMCBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RkY29tODAxIGNvbXBhcmUgLUluZiAgLTEwMDAgIC0+IC0xDQorZGRjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTENCitkZGNvbTgwMyBjb21wYXJlIC1JbmYgIC0wICAgICAtPiAtMQ0KK2RkY29tODA0IGNvbXBhcmUgLUluZiAgIDAgICAgIC0+IC0xDQorZGRjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTENCitkZGNvbTgwNiBjb21wYXJlIC1JbmYgICAxMDAwICAtPiAtMQ0KK2RkY29tODA3IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xDQorZGRjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDANCitkZGNvbTgwOSBjb21wYXJlIC0xMDAwIC1JbmYgICAtPiAgMQ0KK2RkY29tODEwIGNvbXBhcmUgLTEgICAgLUluZiAgIC0+ICAxDQorZGRjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDENCitkZGNvbTgxMiBjb21wYXJlICAwICAgIC1JbmYgICAtPiAgMQ0KK2RkY29tODEzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAxDQorZGRjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDENCitkZGNvbTgxNSBjb21wYXJlICBJbmYgIC1JbmYgICAtPiAgMQ0KKw0KK2RkY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZGNvbTgyMiBjb21wYXJlICBOYU4gLTEwMDAgICAtPiAgTmFODQorZGRjb204MjMgY29tcGFyZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2RkY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZGNvbTgyNSBjb21wYXJlICBOYU4gIDAgICAgICAtPiAgTmFODQorZGRjb204MjYgY29tcGFyZSAgTmFOICAxICAgICAgLT4gIE5hTg0KK2RkY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZGNvbTgyOCBjb21wYXJlICBOYU4gIEluZiAgICAtPiAgTmFODQorZGRjb204MjkgY29tcGFyZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RkY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZGNvbTgzMSBjb21wYXJlIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZGRjb204MzIgY29tcGFyZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZGNvbTgzNCBjb21wYXJlICAwICAgIE5hTiAgICAtPiAgTmFODQorZGRjb204MzUgY29tcGFyZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGNvbTgzNyBjb21wYXJlICBJbmYgIE5hTiAgICAtPiAgTmFODQorZGRjb204MzggY29tcGFyZSAtTmFOIC1OYU4gICAgLT4gLU5hTg0KK2RkY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4NCitkZGNvbTg0MCBjb21wYXJlIC1OYU4gK05hTiAgICAtPiAtTmFODQorDQorZGRjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg0MiBjb21wYXJlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODQzIGNvbXBhcmUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg0NSBjb21wYXJlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODQ2IGNvbXBhcmUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg0OCBjb21wYXJlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODQ5IGNvbXBhcmUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg1MSBjb21wYXJlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODUyIGNvbXBhcmUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg1NCBjb21wYXJlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODU1IGNvbXBhcmUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTg1NyBjb21wYXJlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY29tODU4IGNvbXBhcmUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkZGNvbTg2MSBjb21wYXJlICBOYU44ICA5OTkgICAtPiAgTmFOOA0KK2RkY29tODYyIGNvbXBhcmUgIE5hTjc3IEluZiAgIC0+ICBOYU43Nw0KK2RkY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42Nw0KK2RkY29tODY0IGNvbXBhcmUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQorZGRjb204NjUgY29tcGFyZSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzDQorZGRjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCitkZGNvbTg2NyBjb21wYXJlIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxDQorZGRjb204NjggY29tcGFyZSArTmFONDEgLU5hTjQyIC0+ICBOYU40MQ0KK2RkY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDENCitkZGNvbTg3MCBjb21wYXJlICtOYU40MSArTmFONDIgLT4gIE5hTjQxDQorDQorZGRjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzIgY29tcGFyZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzMgY29tcGFyZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzUgY29tcGFyZSAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzYgY29tcGFyZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzggY29tcGFyZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRjb204NzkgY29tcGFyZSAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gd2lkZSByYW5nZQ0KK2RkY29tODgwIGNvbXBhcmUgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xDQorZGRjb204ODEgY29tcGFyZSA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCitkZGNvbTg4MiBjb21wYXJlICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQ0KK2RkY29tODgzIGNvbXBhcmUgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQorZGRjb204ODUgY29tcGFyZSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTENCitkZGNvbTg4NiBjb21wYXJlIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KK2RkY29tODg3IGNvbXBhcmUgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xDQorZGRjb204ODggY29tcGFyZSA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCisNCistLSBzcHJlYWQgemVyb3MNCitkZGNvbTkwMCBjb21wYXJlICAgMEUtMzgzICAwICAgICAgIC0+ICAwDQorZGRjb205MDEgY29tcGFyZSAgIDBFLTM4MyAtMCAgICAgICAtPiAgMA0KK2RkY29tOTAyIGNvbXBhcmUgIC0wRS0zODMgIDAgICAgICAgLT4gIDANCitkZGNvbTkwMyBjb21wYXJlICAtMEUtMzgzIC0wICAgICAgIC0+ICAwDQorZGRjb205MDQgY29tcGFyZSAgIDBFLTM4MyAgMEUrMzg0ICAtPiAgMA0KK2RkY29tOTA1IGNvbXBhcmUgICAwRS0zODMgLTBFKzM4NCAgLT4gIDANCitkZGNvbTkwNiBjb21wYXJlICAtMEUtMzgzICAwRSszODQgIC0+ICAwDQorZGRjb205MDcgY29tcGFyZSAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMA0KK2RkY29tOTA4IGNvbXBhcmUgICAwICAgICAgIDBFKzM4NCAgLT4gIDANCitkZGNvbTkwOSBjb21wYXJlICAgMCAgICAgIC0wRSszODQgIC0+ICAwDQorZGRjb205MTAgY29tcGFyZSAgLTAgICAgICAgMEUrMzg0ICAtPiAgMA0KK2RkY29tOTExIGNvbXBhcmUgIC0wICAgICAgLTBFKzM4NCAgLT4gIDANCitkZGNvbTkzMCBjb21wYXJlICAgMEUrMzg0ICAwICAgICAgIC0+ICAwDQorZGRjb205MzEgY29tcGFyZSAgIDBFKzM4NCAtMCAgICAgICAtPiAgMA0KK2RkY29tOTMyIGNvbXBhcmUgIC0wRSszODQgIDAgICAgICAgLT4gIDANCitkZGNvbTkzMyBjb21wYXJlICAtMEUrMzg0IC0wICAgICAgIC0+ICAwDQorZGRjb205MzQgY29tcGFyZSAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMA0KK2RkY29tOTM1IGNvbXBhcmUgICAwRSszODQgLTBFLTM4MyAgLT4gIDANCitkZGNvbTkzNiBjb21wYXJlICAtMEUrMzg0ICAwRS0zODMgIC0+ICAwDQorZGRjb205MzcgY29tcGFyZSAgLTBFKzM4NCAtMEUtMzgzICAtPiAgMA0KK2RkY29tOTM4IGNvbXBhcmUgICAwICAgICAgIDBFLTM4MyAgLT4gIDANCitkZGNvbTkzOSBjb21wYXJlICAgMCAgICAgIC0wRS0zODMgIC0+ICAwDQorZGRjb205NDAgY29tcGFyZSAgLTAgICAgICAgMEUtMzgzICAtPiAgMA0KK2RkY29tOTQxIGNvbXBhcmUgIC0wICAgICAgLTBFLTM4MyAgLT4gIDANCisNCistLSBzaWducw0KK2RkY29tOTYxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KK2RkY29tOTYyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KK2RkY29tOTYzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KK2RkY29tOTY0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KK2RkY29tOTY1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RkY29tOTY2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KK2RkY29tOTY3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RkY29tOTY4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KKw0KKy0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMNCitkZGNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KK2RkY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwDQorZGRjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDANCitkZGNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMA0KK2RkY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwDQorZGRjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDANCitkZGNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMA0KK2RkY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwDQorZGRjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDANCitkZGNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMA0KK2RkY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwDQorZGRjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDANCitkZGNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMA0KK2RkY29tcDEwMTQgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwDQorZGRjb21wMTAxNSBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDANCitkZGNvbXAxMDIxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMA0KK2RkY29tcDEwMjIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwICAgMSAtPiAwDQorZGRjb21wMTAyMyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDANCitkZGNvbXAxMDI0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMA0KK2RkY29tcDEwMjUgY29tcGFyZSAxLjAwMDAwMDAwMDAwICAgICAgMSAtPiAwDQorZGRjb21wMTAyNiBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDANCitkZGNvbXAxMDI3IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMA0KK2RkY29tcDEwMjggY29tcGFyZSAxLjAwMDAwMDAwICAgICAgICAgMSAtPiAwDQorZGRjb21wMTAyOSBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDANCitkZGNvbXAxMDMwIGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMA0KK2RkY29tcDEwMzEgY29tcGFyZSAxLjAwMDAwICAgICAgICAgICAgMSAtPiAwDQorZGRjb21wMTAzMiBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDANCitkZGNvbXAxMDMzIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMA0KK2RkY29tcDEwMzQgY29tcGFyZSAxLjAwICAgICAgICAgICAgICAgMSAtPiAwDQorZGRjb21wMTAzNSBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDANCisNCistLSBjaGVjayBNU0QgYWx3YXlzIGRldGVjdGVkIG5vbi16ZXJvDQorZGRjb21wMTA0MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAgIC0+IDANCitkZGNvbXAxMDQxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQyIGNvbXBhcmUgMCAyLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ1IGNvbXBhcmUgMCA1LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ4IGNvbXBhcmUgMCA4LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDQ5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkZGNvbXAxMDUwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMA0KK2RkY29tcDEwNTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZGRjb21wMTA1MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkZGNvbXAxMDUzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KK2RkY29tcDEwNTQgY29tcGFyZSA0LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZGRjb21wMTA1NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkZGNvbXAxMDU2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KK2RkY29tcDEwNTcgY29tcGFyZSA3LjAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZGRjb21wMTA1OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkZGNvbXAxMDU5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KKw0KKy0tIE51bGwgdGVzdHMNCitkZGNvbTk5OTAgY29tcGFyZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGNvbTk5OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlU2lnLmRlY1Rlc3QKaW5kZXggYzgyZWM0NS4uOGQzZmNlMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVNpZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVTaWcuZGVjVGVzdApAQCAtMSw2NDcgKzEsNjQ3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ29tcGFyZVNpZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uOyBhbGwgTmFOcyBzaWduYWwgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCi0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZGNtczAwMSBjb21wYXJlc2lnICAtMiAgLTIgIC0+IDAKLWRkY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTEKLWRkY21zMDAzIGNvbXBhcmVzaWcgIC0yICAgMCAgLT4gLTEKLWRkY21zMDA0IGNvbXBhcmVzaWcgIC0yICAgMSAgLT4gLTEKLWRkY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTEKLWRkY21zMDA2IGNvbXBhcmVzaWcgIC0xICAtMiAgLT4gMQotZGRjbXMwMDcgY29tcGFyZXNpZyAgLTEgIC0xICAtPiAwCi1kZGNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xCi1kZGNtczAwOSBjb21wYXJlc2lnICAtMSAgIDEgIC0+IC0xCi1kZGNtczAxMCBjb21wYXJlc2lnICAtMSAgIDIgIC0+IC0xCi1kZGNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDEKLWRkY21zMDEyIGNvbXBhcmVzaWcgICAwICAtMSAgLT4gMQotZGRjbXMwMTMgY29tcGFyZXNpZyAgIDAgICAwICAtPiAwCi1kZGNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xCi1kZGNtczAxNSBjb21wYXJlc2lnICAgMCAgIDIgIC0+IC0xCi1kZGNtczAxNiBjb21wYXJlc2lnICAgMSAgLTIgIC0+IDEKLWRkY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQotZGRjbXMwMTggY29tcGFyZXNpZyAgIDEgICAwICAtPiAxCi1kZGNtczAxOSBjb21wYXJlc2lnICAgMSAgIDEgIC0+IDAKLWRkY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTEKLWRkY21zMDIxIGNvbXBhcmVzaWcgICAyICAtMiAgLT4gMQotZGRjbXMwMjIgY29tcGFyZXNpZyAgIDIgIC0xICAtPiAxCi1kZGNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDEKLWRkY21zMDI1IGNvbXBhcmVzaWcgICAyICAgMSAgLT4gMQotZGRjbXMwMjYgY29tcGFyZXNpZyAgIDIgICAyICAtPiAwCi0KLWRkY21zMDMxIGNvbXBhcmVzaWcgIC0yMCAgLTIwICAtPiAwCi1kZGNtczAzMiBjb21wYXJlc2lnICAtMjAgIC0xMCAgLT4gLTEKLWRkY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQotZGRjbXMwMzQgY29tcGFyZXNpZyAgLTIwICAgMTAgIC0+IC0xCi1kZGNtczAzNSBjb21wYXJlc2lnICAtMjAgICAyMCAgLT4gLTEKLWRkY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxCi1kZGNtczAzNyBjb21wYXJlc2lnICAtMTAgIC0xMCAgLT4gMAotZGRjbXMwMzggY29tcGFyZXNpZyAgLTEwICAgMDAgIC0+IC0xCi1kZGNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTEKLWRkY21zMDQwIGNvbXBhcmVzaWcgIC0xMCAgIDIwICAtPiAtMQotZGRjbXMwNDEgY29tcGFyZXNpZyAgIDAwICAtMjAgIC0+IDEKLWRkY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxCi1kZGNtczA0MyBjb21wYXJlc2lnICAgMDAgICAwMCAgLT4gMAotZGRjbXMwNDQgY29tcGFyZXNpZyAgIDAwICAgMTAgIC0+IC0xCi1kZGNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTEKLWRkY21zMDQ2IGNvbXBhcmVzaWcgICAxMCAgLTIwICAtPiAxCi1kZGNtczA0NyBjb21wYXJlc2lnICAgMTAgIC0xMCAgLT4gMQotZGRjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDEKLWRkY21zMDQ5IGNvbXBhcmVzaWcgICAxMCAgIDEwICAtPiAwCi1kZGNtczA1MCBjb21wYXJlc2lnICAgMTAgICAyMCAgLT4gLTEKLWRkY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxCi1kZGNtczA1MiBjb21wYXJlc2lnICAgMjAgIC0xMCAgLT4gMQotZGRjbXMwNTMgY29tcGFyZXNpZyAgIDIwICAgMDAgIC0+IDEKLWRkY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxCi1kZGNtczA1NiBjb21wYXJlc2lnICAgMjAgICAyMCAgLT4gMAotCi1kZGNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwCi1kZGNtczA2MiBjb21wYXJlc2lnICAtMi4wICAtMS4wICAtPiAtMQotZGRjbXMwNjMgY29tcGFyZXNpZyAgLTIuMCAgIDAuMCAgLT4gLTEKLWRkY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xCi1kZGNtczA2NSBjb21wYXJlc2lnICAtMi4wICAgMi4wICAtPiAtMQotZGRjbXMwNjYgY29tcGFyZXNpZyAgLTEuMCAgLTIuMCAgLT4gMQotZGRjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMAotZGRjbXMwNjggY29tcGFyZXNpZyAgLTEuMCAgIDAuMCAgLT4gLTEKLWRkY21zMDY5IGNvbXBhcmVzaWcgIC0xLjAgICAxLjAgIC0+IC0xCi1kZGNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQotZGRjbXMwNzEgY29tcGFyZXNpZyAgIDAuMCAgLTIuMCAgLT4gMQotZGRjbXMwNzIgY29tcGFyZXNpZyAgIDAuMCAgLTEuMCAgLT4gMQotZGRjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMAotZGRjbXMwNzQgY29tcGFyZXNpZyAgIDAuMCAgIDEuMCAgLT4gLTEKLWRkY21zMDc1IGNvbXBhcmVzaWcgICAwLjAgICAyLjAgIC0+IC0xCi1kZGNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxCi1kZGNtczA3NyBjb21wYXJlc2lnICAgMS4wICAtMS4wICAtPiAxCi1kZGNtczA3OCBjb21wYXJlc2lnICAgMS4wICAgMC4wICAtPiAxCi1kZGNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwCi1kZGNtczA4MCBjb21wYXJlc2lnICAgMS4wICAgMi4wICAtPiAtMQotZGRjbXMwODEgY29tcGFyZXNpZyAgIDIuMCAgLTIuMCAgLT4gMQotZGRjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQotZGRjbXMwODMgY29tcGFyZXNpZyAgIDIuMCAgIDAuMCAgLT4gMQotZGRjbXMwODUgY29tcGFyZXNpZyAgIDIuMCAgIDEuMCAgLT4gMQotZGRjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMAotCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKLWRkY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMAotZGRjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtMQotZGRjbXMwOTIgY29tcGFyZXNpZyAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxCi1kZGNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDAKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi1kZGNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwCi1kZGNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwCi1kZGNtczEwMiBjb21wYXJlc2lnICAgNyAgICAgIDcuMCAgICAtPiAwCi1kZGNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwCi1kZGNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwCi1kZGNtczEwNSBjb21wYXJlc2lnICAgMC43RSsxIDcgICAgICAtPiAwCi1kZGNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwCi1kZGNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwCi1kZGNtczEwOCBjb21wYXJlc2lnICAgNy4wICAgIDcwRS0xICAtPiAwCi1kZGNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwCi1kZGNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwCi0KLWRkY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDEKLWRkY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDEKLWRkY21zMTIyIGNvbXBhcmVzaWcgICA4ICAgICAgNy4wICAgIC0+IDEKLWRkY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDEKLWRkY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDEKLWRkY21zMTI1IGNvbXBhcmVzaWcgICAwLjhFKzEgNyAgICAgIC0+IDEKLWRkY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDEKLWRkY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDEKLWRkY21zMTI4IGNvbXBhcmVzaWcgICA4LjAgICAgNzBFLTEgIC0+IDEKLWRkY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxCi1kZGNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxCi0KLWRkY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xCi1kZGNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQotZGRjbXMxNDIgY29tcGFyZXNpZyAgIDggICAgICA5LjAgICAgLT4gLTEKLWRkY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xCi1kZGNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQotZGRjbXMxNDUgY29tcGFyZXNpZyAgIDAuOEUrMSA5ICAgICAgLT4gLTEKLWRkY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xCi1kZGNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQotZGRjbXMxNDggY29tcGFyZXNpZyAgIDguMCAgICA5MEUtMSAgLT4gLTEKLWRkY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xCi1kZGNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCi1kZGNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQotZGRjbXMyMDEgY29tcGFyZXNpZyAgLTcuMCAgICA3ICAgICAgLT4gLTEKLWRkY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xCi1kZGNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQotZGRjbXMyMDQgY29tcGFyZXNpZyAgLTcwRS0xICA3LjAgICAgLT4gLTEKLWRkY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xCi1kZGNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQotZGRjbXMyMDcgY29tcGFyZXNpZyAgLTcuMCAgICA3RSswICAgLT4gLTEKLWRkY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xCi1kZGNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQotZGRjbXMyMTAgY29tcGFyZXNpZyAgLTcgICAgICA3MEUtMSAgLT4gLTEKLQotZGRjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTEKLWRkY21zMjIxIGNvbXBhcmVzaWcgIC04LjAgICAgNyAgICAgIC0+IC0xCi1kZGNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQotZGRjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTEKLWRkY21zMjI0IGNvbXBhcmVzaWcgIC04MEUtMSAgNy4wICAgIC0+IC0xCi1kZGNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQotZGRjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTEKLWRkY21zMjI3IGNvbXBhcmVzaWcgIC04LjAgICAgN0UrMCAgIC0+IC0xCi1kZGNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQotZGRjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTEKLWRkY21zMjMwIGNvbXBhcmVzaWcgIC04ICAgICAgNzBFLTEgIC0+IC0xCi0KLWRkY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xCi1kZGNtczI0MSBjb21wYXJlc2lnICAtOC4wICAgIDkgICAgICAtPiAtMQotZGRjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTEKLWRkY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xCi1kZGNtczI0NCBjb21wYXJlc2lnICAtODBFLTEgIDkuMCAgICAtPiAtMQotZGRjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTEKLWRkY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xCi1kZGNtczI0NyBjb21wYXJlc2lnICAtOC4wICAgIDlFKzAgICAtPiAtMQotZGRjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTEKLWRkY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xCi1kZGNtczI1MCBjb21wYXJlc2lnICAtOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCi1kZGNtczMwMCBjb21wYXJlc2lnICAgNy4wICAgIC03LjAgICAgLT4gMQotZGRjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDEKLWRkY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxCi1kZGNtczMwMyBjb21wYXJlc2lnICAgN0UrMCAgIC03LjAgICAgLT4gMQotZGRjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDEKLWRkY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxCi1kZGNtczMwNiBjb21wYXJlc2lnICAgNzBFLTEgIC03ICAgICAgLT4gMQotZGRjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDEKLWRkY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxCi1kZGNtczMwOSBjb21wYXJlc2lnICAgNyAgICAgIC0uN0UrMSAgLT4gMQotZGRjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDEKLQotZGRjbXMzMjAgY29tcGFyZXNpZyAgIDguMCAgICAtNy4wICAgIC0+IDEKLWRkY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxCi1kZGNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQotZGRjbXMzMjMgY29tcGFyZXNpZyAgIDhFKzAgICAtNy4wICAgIC0+IDEKLWRkY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxCi1kZGNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQotZGRjbXMzMjYgY29tcGFyZXNpZyAgIDgwRS0xICAtNyAgICAgIC0+IDEKLWRkY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxCi1kZGNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQotZGRjbXMzMjkgY29tcGFyZXNpZyAgIDggICAgICAtLjdFKzEgIC0+IDEKLWRkY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxCi0KLWRkY21zMzQwIGNvbXBhcmVzaWcgICA4LjAgICAgLTkuMCAgICAtPiAxCi1kZGNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQotZGRjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDEKLWRkY21zMzQzIGNvbXBhcmVzaWcgICA4RSswICAgLTkuMCAgICAtPiAxCi1kZGNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQotZGRjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDEKLWRkY21zMzQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkgICAgICAtPiAxCi1kZGNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQotZGRjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDEKLWRkY21zMzQ5IGNvbXBhcmVzaWcgICA4ICAgICAgLS45RSsxICAtPiAxCi1kZGNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCi1kZGNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDAKLWRkY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMAotZGRjbXM0MDIgY29tcGFyZXNpZyAgIC03ICAgICAgLTcuMCAgICAtPiAwCi1kZGNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDAKLWRkY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMAotZGRjbXM0MDUgY29tcGFyZXNpZyAgIC0uN0UrMSAgLTcgICAgICAtPiAwCi1kZGNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDAKLWRkY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMAotZGRjbXM0MDggY29tcGFyZXNpZyAgIC03LjAgICAgLTcwRS0xICAtPiAwCi1kZGNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDAKLWRkY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMAotCi1kZGNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xCi1kZGNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xCi1kZGNtczQyMiBjb21wYXJlc2lnICAgLTggICAgICAtNy4wICAgIC0+IC0xCi1kZGNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xCi1kZGNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCi1kZGNtczQyNSBjb21wYXJlc2lnICAgLS44RSsxICAtNyAgICAgIC0+IC0xCi1kZGNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCi1kZGNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCi1kZGNtczQyOCBjb21wYXJlc2lnICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCi1kZGNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xCi1kZGNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xCi0KLWRkY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQotZGRjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxCi1kZGNtczQ0MiBjb21wYXJlc2lnICAgLTggICAgICAtOS4wICAgIC0+IDEKLWRkY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQotZGRjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxCi1kZGNtczQ0NSBjb21wYXJlc2lnICAgLS44RSsxICAtOSAgICAgIC0+IDEKLWRkY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQotZGRjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxCi1kZGNtczQ0OCBjb21wYXJlc2lnICAgLTguMCAgICAtOTBFLTEgIC0+IDEKLWRkY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQotZGRjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kZGNtczQ3MyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNtczQ3NCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKLWRkY21zNDc1IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNtczQ3NiBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNtczQ3NyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDAKLWRkY21zNDc4IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNtczQ3OSBjb21wYXJlc2lnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNtczQ4MCBjb21wYXJlc2lnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDAKLWRkY21zNDgxIGNvbXBhcmVzaWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAtPiAwCi1kZGNtczQ4MiBjb21wYXJlc2lnIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAwCi1kZGNtczQ4MyBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDAKLWRkY21zNDg3IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKLWRkY21zNDg4IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMAotZGRjbXM0ODkgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDAKLWRkY21zNDkwIGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDAKLWRkY21zNDkxIGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMAotZGRjbXM0OTIgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDAKLWRkY21zNDkzIGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDAKLWRkY21zNDk0IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMAotZGRjbXM0OTUgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDAKLWRkY21zNDk2IGNvbXBhcmVzaWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDAKLWRkY21zNDk3IGNvbXBhcmVzaWcgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kZGNtczUwMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKLWRkY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQotZGRjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxCi1kZGNtczUwMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEyICAgIC0+IDEKLWRkY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQotZGRjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxCi1kZGNtczUwNiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTkgICAgIC0+IDEKLWRkY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQotZGRjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxCi1kZGNtczUwOSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTYgICAgIC0+IDEKLWRkY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQotZGRjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxCi1kZGNtczUxMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTMgICAgIC0+IDEKLWRkY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQotZGRjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxCi1kZGNtczUxNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTAgICAgIC0+IDAKLWRkY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWRkY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKLWRkY21zNTE4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKLWRkY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWRkY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKLWRkY21zNTIyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKLWRkY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWRkY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKLWRkY21zNTI1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKLWRkY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWRkY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKLWRkY21zNTI4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKLWRkY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWRkY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKLWRkY21zNTMxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKLS0tIExSIHN3YXAKLWRkY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKLWRkY21zNTQxIGNvbXBhcmVzaWcgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKLWRkY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKLWRkY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ0IGNvbXBhcmVzaWcgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ3IGNvbXBhcmVzaWcgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKLWRkY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKLWRkY21zNTUwIGNvbXBhcmVzaWcgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKLWRkY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKLWRkY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKLWRkY21zNTUzIGNvbXBhcmVzaWcgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKLWRkY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKLWRkY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKLWRkY21zNTU2IGNvbXBhcmVzaWcgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKLWRkY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKLWRkY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKLWRkY21zNTU5IGNvbXBhcmVzaWcgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKLWRkY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKLWRkY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKLWRkY21zNTYzIGNvbXBhcmVzaWcgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKLWRkY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKLWRkY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKLWRkY21zNTY2IGNvbXBhcmVzaWcgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKLWRkY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKLWRkY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKLWRkY21zNTY5IGNvbXBhcmVzaWcgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKLWRkY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKLWRkY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZGRjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKLWRkY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCi1kZGNtczU4MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQotZGRjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKLWRkY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCi1kZGNtczU4NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQotZGRjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKLWRkY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCi1kZGNtczU4OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQotZGRjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCi1kZGNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKLWRkY21zNTkxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQotZGRjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCi1kZGNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKLWRkY21zNTk0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQotZGRjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCi1kZGNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKLWRkY21zNTk3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQotZGRjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCi1kZGNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKLQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKLWRkY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjAxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKLWRkY21zNjEwIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKLWRkY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKLWRkY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKLWRkY21zNjEzIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKLWRkY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKLWRkY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKLWRkY21zNjE2IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKLWRkY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKLWRkY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKLWRkY21zNjE5IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKLWRkY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjIyIGNvbXBhcmVzaWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI1IGNvbXBhcmVzaWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI4IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKLWRkY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKLWRkY21zNjMxIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKLWRkY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKLWRkY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKLWRkY21zNjM0IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKLWRkY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKLWRkY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKLWRkY21zNjM3IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKLWRkY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKLWRkY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRkY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMAotZGRjbXM2NDEgY29tcGFyZXNpZyAgIDAgICAgLTAgICAtPiAwCi1kZGNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDAKLWRkY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMAotZGRjbXM2NDQgY29tcGFyZXNpZyAgLTAgICAgIDAgICAtPiAwCi1kZGNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDAKLWRkY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMAotZGRjbXM2NDcgY29tcGFyZXNpZyAgLTAgICAgIDAuMCAtPiAwCi1kZGNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDAKLWRkY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMAotZGRjbXM2NTAgY29tcGFyZXNpZyAgIDAuMCAgLTAuMCAtPiAwCi1kZGNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDAKLWRkY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMAotZGRjbXM2NTMgY29tcGFyZXNpZyAgLTAuMCAgLTAgICAtPiAwCi1kZGNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDAKLWRkY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMAotCi1kZGNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDAKLWRkY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMAotZGRjbXM2NTggY29tcGFyZXNpZyAgIDBFMSAgIDAuMCAtPiAwCi1kZGNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDAKLWRkY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMAotZGRjbXM2NjEgY29tcGFyZXNpZyAgLTBFMiAgIDAgICAtPiAwCi1kZGNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDAKLWRkY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMAotZGRjbXM2NjQgY29tcGFyZXNpZyAgLTBFMSAgLTBFMSAtPiAwCi1kZGNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDAKLWRkY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMAotZGRjbXM2NjcgY29tcGFyZXNpZyAgIDBFMiAgLTBFMSAtPiAwCi1kZGNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDAKLWRkY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMAotZGRjbXM2NzAgY29tcGFyZXNpZyAgIDBFMSAgLTBFMiAtPiAwCi1kZGNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDAKLWRkY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMAotZGRjbXM2NzMgY29tcGFyZXNpZyAgLTBFMiAgIDBFMSAtPiAwCi1kZGNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDAKLWRkY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMAotZGRjbXM2NzYgY29tcGFyZXNpZyAgLTBFMSAgIDBFMiAtPiAwCi1kZGNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDAKLWRkY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMAotZGRjbXM2NzkgY29tcGFyZXNpZyAgIDBFMiAgIDBFMiAtPiAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLWRkY21zNjgwIGNvbXBhcmVzaWcgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAotZGRjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCi1kZGNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKLWRkY21zNjgzIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAotZGRjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCi1kZGNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKLWRkY21zNjg2IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAotZGRjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCi1kZGNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKLWRkY21zNjg5IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAotZGRjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCi1kZGNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKLWRkY21zNjkyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAotZGRjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCi1kZGNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKLWRkY21zNjk1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAotZGRjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCi1kZGNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKLWRkY21zNjk4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAotZGRjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCi0KLS0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAotZGRjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxCi1kZGNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IDAKLWRkY21zNzAyIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTcgLT4gLTEKLWRkY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQotZGRjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwCi1kZGNtczcwNSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5MDEyMzQ1NiAyMjM0NTY3ODkwMTIzNDU2IC0+IC0xCi1kZGNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDEKLWRkY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODkwMTIzNDU2IDExMzQ1Njc4OTAxMjM0NTYgLT4gMAotZGRjbXM3MDggY29tcGFyZXNpZyAgIDExMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAtMQotCi0tLSBtaXNjZWxsYW5lb3VzCi1kZGNtczcyMSBjb21wYXJlc2lnIDEyMzQ1Njc4MDAwIDEgLT4gMQotZGRjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xCi1kZGNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQotZGRjbXM3MjQgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAgIC0+IC0xCi1kZGNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQotZGRjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xCi1kZGNtczcyNyBjb21wYXJlc2lnIDEyMzQ1Njc4OTEgIDEgLT4gMQotZGRjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xCi1kZGNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQotZGRjbXM3MzAgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAxIC0+IC0xCi1kZGNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQotZGRjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xCi0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCi1kZGNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDEKLWRkY21zNzQxIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5ICAgLT4gMQotZGRjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxCi1kZGNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDAKLWRkY21zNzQ0IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDEgICAgLT4gLTEKLWRkY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTEKLWRkY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTEKLWRkY21zNzUwIGNvbXBhcmVzaWcgIDAuOTk5OTk5OSAgMSAgLT4gLTEKLWRkY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTEKLWRkY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTEKLWRkY21zNzUzIGNvbXBhcmVzaWcgIDEuMDAwMCAgICAgMSAgLT4gMAotZGRjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxCi1kZGNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDEKLWRkY21zNzU2IGNvbXBhcmVzaWcgIDEuMDAwMDAwMSAgMSAgLT4gMQotCi0tLSBTcGVjaWFscwotZGRjbXM3ODAgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKLWRkY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxCi1kZGNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQotZGRjbXM3ODMgY29tcGFyZXNpZyAgSW5mICAtMCAgICAgLT4gIDEKLWRkY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxCi1kZGNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQotZGRjbXM3ODYgY29tcGFyZXNpZyAgSW5mICAgMTAwMCAgLT4gIDEKLWRkY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCi1kZGNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQotZGRjbXM3ODkgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKLWRkY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xCi1kZGNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQotZGRjbXM3OTIgY29tcGFyZXNpZyAgMCAgICAgSW5mICAgLT4gLTEKLWRkY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xCi1kZGNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQotZGRjbXM3OTUgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKLQotZGRjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKLWRkY21zODAxIGNvbXBhcmVzaWcgLUluZiAgLTEwMDAgIC0+IC0xCi1kZGNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQotZGRjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTEKLWRkY21zODA0IGNvbXBhcmVzaWcgLUluZiAgIDAgICAgIC0+IC0xCi1kZGNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQotZGRjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTEKLWRkY21zODA3IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCi1kZGNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAotZGRjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDEKLWRkY21zODEwIGNvbXBhcmVzaWcgLTEgICAgLUluZiAgIC0+ICAxCi1kZGNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQotZGRjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDEKLWRkY21zODEzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAxCi1kZGNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQotZGRjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKLQotZGRjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgyMyBjb21wYXJlc2lnICBOYU4gLTEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgyNiBjb21wYXJlc2lnICBOYU4gIDEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgyOSBjb21wYXJlc2lnICBOYU4gIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgzMiBjb21wYXJlc2lnIC0xICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgzNSBjb21wYXJlc2lnICAxICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczgzOCBjb21wYXJlc2lnIC1OYU4gLU5hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NDMgY29tcGFyZXNpZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NDYgY29tcGFyZXNpZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NDkgY29tcGFyZXNpZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NTIgY29tcGFyZXNpZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NTUgY29tcGFyZXNpZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NTggY29tcGFyZXNpZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODYxIGNvbXBhcmVzaWcgIE5hTjggIDk5OSAgIC0+ICBOYU44ICAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODYyIGNvbXBhcmVzaWcgIE5hTjc3IEluZiAgIC0+ICBOYU43NyAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY0IGNvbXBhcmVzaWcgLUluZiAgLU5hTjQgIC0+IC1OYU40ICAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY1IGNvbXBhcmVzaWcgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY3IGNvbXBhcmVzaWcgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY4IGNvbXBhcmVzaWcgK05hTjQxIC1OYU40MiAtPiAgTmFONDEgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODcwIGNvbXBhcmVzaWcgK05hTjQxICtOYU40MiAtPiAgTmFONDEgSW52YWxpZF9vcGVyYXRpb24KLQotZGRjbXM4NzEgY29tcGFyZXNpZyAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODczIGNvbXBhcmVzaWcgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NzQgY29tcGFyZXNpZyAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODc2IGNvbXBhcmVzaWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRjbXM4NzcgY29tcGFyZXNpZyAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkY21zODc5IGNvbXBhcmVzaWcgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSB3aWRlIHJhbmdlCi1kZGNtczg4MCBjb21wYXJlc2lnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzM4NCAtPiAtMQotZGRjbXM4ODEgY29tcGFyZXNpZyA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKLWRkY21zODgyIGNvbXBhcmVzaWcgKzAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+ICAxCi1kZGNtczg4MyBjb21wYXJlc2lnIDlFLTM4MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQotZGRjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTEKLWRkY21zODg2IGNvbXBhcmVzaWcgOUUrMzg0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCi1kZGNtczg4NyBjb21wYXJlc2lnIC0wLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAtMQotZGRjbXM4ODggY29tcGFyZXNpZyA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDEKLQotLS0gc2lnbnMKLWRkY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQotZGRjbXM5MDIgY29tcGFyZXNpZyAgMWUrNzcgLTFlKzExIC0+ICAxCi1kZGNtczkwMyBjb21wYXJlc2lnIC0xZSs3NyAgMWUrMTEgLT4gLTEKLWRkY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQotZGRjbXM5MDUgY29tcGFyZXNpZyAgMWUtNzcgIDFlLTExIC0+IC0xCi1kZGNtczkwNiBjb21wYXJlc2lnICAxZS03NyAtMWUtMTEgLT4gIDEKLWRkY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQotZGRjbXM5MDggY29tcGFyZXNpZyAtMWUtNzcgLTFlLTExIC0+ICAxCi0KLS0tIE51bGwgdGVzdHMKLWRkY21zOTkwIGNvbXBhcmVzaWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGNtczk5MSBjb21wYXJlc2lnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRDb21wYXJlU2lnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RkY21zMDAxIGNvbXBhcmVzaWcgIC0yICAtMiAgLT4gMA0KK2RkY21zMDAyIGNvbXBhcmVzaWcgIC0yICAtMSAgLT4gLTENCitkZGNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xDQorZGRjbXMwMDQgY29tcGFyZXNpZyAgLTIgICAxICAtPiAtMQ0KK2RkY21zMDA1IGNvbXBhcmVzaWcgIC0yICAgMiAgLT4gLTENCitkZGNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDENCitkZGNtczAwNyBjb21wYXJlc2lnICAtMSAgLTEgIC0+IDANCitkZGNtczAwOCBjb21wYXJlc2lnICAtMSAgIDAgIC0+IC0xDQorZGRjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQ0KK2RkY21zMDEwIGNvbXBhcmVzaWcgIC0xICAgMiAgLT4gLTENCitkZGNtczAxMSBjb21wYXJlc2lnICAgMCAgLTIgIC0+IDENCitkZGNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDENCitkZGNtczAxMyBjb21wYXJlc2lnICAgMCAgIDAgIC0+IDANCitkZGNtczAxNCBjb21wYXJlc2lnICAgMCAgIDEgIC0+IC0xDQorZGRjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQ0KK2RkY21zMDE2IGNvbXBhcmVzaWcgICAxICAtMiAgLT4gMQ0KK2RkY21zMDE3IGNvbXBhcmVzaWcgICAxICAtMSAgLT4gMQ0KK2RkY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQ0KK2RkY21zMDE5IGNvbXBhcmVzaWcgICAxICAgMSAgLT4gMA0KK2RkY21zMDIwIGNvbXBhcmVzaWcgICAxICAgMiAgLT4gLTENCitkZGNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDENCitkZGNtczAyMiBjb21wYXJlc2lnICAgMiAgLTEgIC0+IDENCitkZGNtczAyMyBjb21wYXJlc2lnICAgMiAgIDAgIC0+IDENCitkZGNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDENCitkZGNtczAyNiBjb21wYXJlc2lnICAgMiAgIDIgIC0+IDANCisNCitkZGNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMA0KK2RkY21zMDMyIGNvbXBhcmVzaWcgIC0yMCAgLTEwICAtPiAtMQ0KK2RkY21zMDMzIGNvbXBhcmVzaWcgIC0yMCAgIDAwICAtPiAtMQ0KK2RkY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQ0KK2RkY21zMDM1IGNvbXBhcmVzaWcgIC0yMCAgIDIwICAtPiAtMQ0KK2RkY21zMDM2IGNvbXBhcmVzaWcgIC0xMCAgLTIwICAtPiAxDQorZGRjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDANCitkZGNtczAzOCBjb21wYXJlc2lnICAtMTAgICAwMCAgLT4gLTENCitkZGNtczAzOSBjb21wYXJlc2lnICAtMTAgICAxMCAgLT4gLTENCitkZGNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTENCitkZGNtczA0MSBjb21wYXJlc2lnICAgMDAgIC0yMCAgLT4gMQ0KK2RkY21zMDQyIGNvbXBhcmVzaWcgICAwMCAgLTEwICAtPiAxDQorZGRjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDANCitkZGNtczA0NCBjb21wYXJlc2lnICAgMDAgICAxMCAgLT4gLTENCitkZGNtczA0NSBjb21wYXJlc2lnICAgMDAgICAyMCAgLT4gLTENCitkZGNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQ0KK2RkY21zMDQ3IGNvbXBhcmVzaWcgICAxMCAgLTEwICAtPiAxDQorZGRjbXMwNDggY29tcGFyZXNpZyAgIDEwICAgMDAgIC0+IDENCitkZGNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMA0KK2RkY21zMDUwIGNvbXBhcmVzaWcgICAxMCAgIDIwICAtPiAtMQ0KK2RkY21zMDUxIGNvbXBhcmVzaWcgICAyMCAgLTIwICAtPiAxDQorZGRjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDENCitkZGNtczA1MyBjb21wYXJlc2lnICAgMjAgICAwMCAgLT4gMQ0KK2RkY21zMDU1IGNvbXBhcmVzaWcgICAyMCAgIDEwICAtPiAxDQorZGRjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDANCisNCitkZGNtczA2MSBjb21wYXJlc2lnICAtMi4wICAtMi4wICAtPiAwDQorZGRjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTENCitkZGNtczA2MyBjb21wYXJlc2lnICAtMi4wICAgMC4wICAtPiAtMQ0KK2RkY21zMDY0IGNvbXBhcmVzaWcgIC0yLjAgICAxLjAgIC0+IC0xDQorZGRjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTENCitkZGNtczA2NiBjb21wYXJlc2lnICAtMS4wICAtMi4wICAtPiAxDQorZGRjbXMwNjcgY29tcGFyZXNpZyAgLTEuMCAgLTEuMCAgLT4gMA0KK2RkY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xDQorZGRjbXMwNjkgY29tcGFyZXNpZyAgLTEuMCAgIDEuMCAgLT4gLTENCitkZGNtczA3MCBjb21wYXJlc2lnICAtMS4wICAgMi4wICAtPiAtMQ0KK2RkY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDENCitkZGNtczA3MiBjb21wYXJlc2lnICAgMC4wICAtMS4wICAtPiAxDQorZGRjbXMwNzMgY29tcGFyZXNpZyAgIDAuMCAgIDAuMCAgLT4gMA0KK2RkY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xDQorZGRjbXMwNzUgY29tcGFyZXNpZyAgIDAuMCAgIDIuMCAgLT4gLTENCitkZGNtczA3NiBjb21wYXJlc2lnICAgMS4wICAtMi4wICAtPiAxDQorZGRjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQ0KK2RkY21zMDc4IGNvbXBhcmVzaWcgICAxLjAgICAwLjAgIC0+IDENCitkZGNtczA3OSBjb21wYXJlc2lnICAgMS4wICAgMS4wICAtPiAwDQorZGRjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTENCitkZGNtczA4MSBjb21wYXJlc2lnICAgMi4wICAtMi4wICAtPiAxDQorZGRjbXMwODIgY29tcGFyZXNpZyAgIDIuMCAgLTEuMCAgLT4gMQ0KK2RkY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDENCitkZGNtczA4NSBjb21wYXJlc2lnICAgMi4wICAgMS4wICAtPiAxDQorZGRjbXMwODYgY29tcGFyZXNpZyAgIDIuMCAgIDIuMCAgLT4gMA0KKw0KKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KK2RkY21zMDkwIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMA0KK2RkY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTENCitkZGNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCitkZGNtczA5MyBjb21wYXJlc2lnIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDANCisNCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCitkZGNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwDQorZGRjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMA0KK2RkY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDANCitkZGNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwDQorZGRjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMA0KK2RkY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDANCitkZGNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwDQorZGRjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMA0KK2RkY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDANCitkZGNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwDQorZGRjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMA0KKw0KK2RkY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDENCitkZGNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxDQorZGRjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQ0KK2RkY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDENCitkZGNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxDQorZGRjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KK2RkY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDENCitkZGNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxDQorZGRjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQ0KK2RkY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxDQorZGRjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQ0KKw0KK2RkY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xDQorZGRjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTENCitkZGNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KK2RkY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xDQorZGRjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTENCitkZGNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQ0KK2RkY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xDQorZGRjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTENCitkZGNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KK2RkY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xDQorZGRjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQorZGRjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTENCitkZGNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQ0KK2RkY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xDQorZGRjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTENCitkZGNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KK2RkY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQorZGRjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTENCitkZGNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KK2RkY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xDQorZGRjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTENCitkZGNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KKw0KK2RkY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xDQorZGRjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTENCitkZGNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KK2RkY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xDQorZGRjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTENCitkZGNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQ0KK2RkY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xDQorZGRjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTENCitkZGNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KK2RkY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xDQorZGRjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTENCisNCitkZGNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KK2RkY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xDQorZGRjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTENCitkZGNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KK2RkY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xDQorZGRjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTENCitkZGNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQ0KK2RkY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xDQorZGRjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTENCitkZGNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KK2RkY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KK2RkY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxDQorZGRjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDENCitkZGNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQ0KK2RkY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxDQorZGRjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDENCitkZGNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KK2RkY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxDQorZGRjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDENCitkZGNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KK2RkY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxDQorZGRjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDENCisNCitkZGNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQ0KK2RkY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxDQorZGRjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDENCitkZGNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KK2RkY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxDQorZGRjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDENCitkZGNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQ0KK2RkY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxDQorZGRjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDENCitkZGNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KK2RkY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxDQorDQorZGRjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDENCitkZGNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQ0KK2RkY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxDQorZGRjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDENCitkZGNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQ0KK2RkY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxDQorZGRjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDENCitkZGNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQ0KK2RkY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxDQorZGRjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDENCitkZGNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCitkZGNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDANCitkZGNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDANCitkZGNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDANCitkZGNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDANCitkZGNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDANCitkZGNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDANCitkZGNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDANCitkZGNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCitkZGNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCitkZGNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDANCitkZGNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDANCisNCitkZGNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQorZGRjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KK2RkY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTENCitkZGNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQorZGRjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KK2RkY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCitkZGNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQorZGRjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KK2RkY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCitkZGNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQorZGRjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2RkY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KK2RkY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KK2RkY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KK2RkY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RkY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KK2RkY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KK2RkY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KK2RkY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQ0KK2RkY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KK2RkY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RkY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKw0KKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KK2RkY21zNDczIGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNtczQ3NCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCitkZGNtczQ3NSBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KK2RkY21zNDc2IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCitkZGNtczQ3NyBjb21wYXJlc2lnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNtczQ3OCBjb21wYXJlc2lnIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gMA0KK2RkY21zNDc5IGNvbXBhcmVzaWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNtczQ4MCBjb21wYXJlc2lnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IDANCitkZGNtczQ4MSBjb21wYXJlc2lnIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gMA0KK2RkY21zNDgyIGNvbXBhcmVzaWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IDANCitkZGNtczQ4MyBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNtczQ4NyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAwDQorZGRjbXM0ODggY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAtPiAwDQorZGRjbXM0ODkgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDANCitkZGNtczQ5MCBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAwDQorZGRjbXM0OTEgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAtPiAwDQorZGRjbXM0OTIgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDANCitkZGNtczQ5MyBjb21wYXJlc2lnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAwDQorZGRjbXM0OTQgY29tcGFyZXNpZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAtPiAwDQorZGRjbXM0OTUgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDANCitkZGNtczQ5NiBjb21wYXJlc2lnIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAwDQorZGRjbXM0OTcgY29tcGFyZXNpZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAtPiAwDQorDQorLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KK2RkY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KK2RkY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RkY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KK2RkY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KK2RkY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RkY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KK2RkY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KK2RkY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RkY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KK2RkY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KK2RkY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KK2RkY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KK2RkY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KK2RkY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KK2RkY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KK2RkY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KK2RkY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCitkZGNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQorZGRjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQ0KK2RkY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCitkZGNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQorZGRjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KK2RkY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCitkZGNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQorZGRjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KK2RkY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCitkZGNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQorZGRjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KK2RkY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCitkZGNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQorZGRjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KKy0tIExSIHN3YXANCitkZGNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQorZGRjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KK2RkY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCitkZGNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQorZGRjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KK2RkY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCitkZGNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQorZGRjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KK2RkY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCitkZGNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQorZGRjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KK2RkY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCitkZGNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQorZGRjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KK2RkY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCitkZGNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQorZGRjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KK2RkY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCitkZGNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQorZGRjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KK2RkY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCitkZGNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQorZGRjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KK2RkY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCitkZGNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQorZGRjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KK2RkY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCitkZGNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQorZGRjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KK2RkY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCitkZGNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQorZGRjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCitkZGNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RkY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQorZGRjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCitkZGNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RkY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQorZGRjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCitkZGNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RkY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQorZGRjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQorZGRjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQorZGRjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQorZGRjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQorZGRjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQorZGRjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQorZGRjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQorZGRjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQorZGRjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQorZGRjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQorZGRjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQorDQorLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCitkZGNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZGRjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZGRjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQorZGRjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KK2RkY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCitkZGNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQorZGRjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KK2RkY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCitkZGNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQorZGRjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KK2RkY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCitkZGNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQorZGRjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KK2RkY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCitkZGNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQorZGRjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KK2RkY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RkY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RkY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQorZGRjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KK2RkY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCitkZGNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQorZGRjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KK2RkY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCitkZGNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQorZGRjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KK2RkY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCitkZGNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQorZGRjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KK2RkY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCitkZGNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitkZGNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDANCitkZGNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDANCitkZGNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDANCitkZGNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDANCitkZGNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDANCitkZGNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDANCitkZGNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDANCitkZGNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDANCitkZGNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDANCitkZGNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDANCitkZGNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDANCitkZGNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDANCitkZGNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDANCitkZGNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDANCitkZGNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDANCitkZGNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDANCisNCitkZGNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDANCitkZGNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDANCitkZGNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDANCitkZGNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDANCitkZGNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDANCitkZGNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDANCitkZGNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDANCitkZGNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDANCitkZGNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDANCitkZGNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDANCitkZGNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDANCitkZGNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDANCitkZGNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDANCitkZGNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDANCitkZGNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDANCitkZGNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDANCitkZGNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDANCitkZGNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDANCitkZGNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDANCitkZGNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDANCitkZGNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDANCitkZGNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDANCitkZGNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDANCitkZGNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDANCisNCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQorZGRjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQorZGRjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwDQorZGRjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwDQorZGRjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwDQorZGRjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwDQorZGRjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwDQorZGRjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwDQorZGRjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwDQorZGRjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwDQorZGRjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwDQorZGRjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwDQorZGRjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwDQorZGRjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwDQorZGRjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwDQorZGRjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwDQorDQorLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0DQorZGRjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NSAtPiAxDQorZGRjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NiAtPiAwDQorZGRjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTAxMjM0NTYgMTIzNDU2Nzg5MDEyMzQ1NyAtPiAtMQ0KK2RkY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDAyMzQ1Njc4OTAxMjM0NTYgLT4gMQ0KK2RkY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYgLT4gMA0KK2RkY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODkwMTIzNDU2IDIyMzQ1Njc4OTAxMjM0NTYgLT4gLTENCitkZGNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMDM0NTY3ODkwMTIzNDU2IC0+IDENCitkZGNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMTM0NTY3ODkwMTIzNDU2IC0+IDANCitkZGNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2IC0+IC0xDQorDQorLS0gbWlzY2VsbGFuZW91cw0KK2RkY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxDQorZGRjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xDQorZGRjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDENCitkZGNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTENCitkZGNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KK2RkY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQ0KK2RkY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxDQorZGRjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xDQorZGRjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDENCitkZGNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTENCitkZGNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KK2RkY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQ0KKw0KKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uDQorZGRjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxDQorZGRjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxDQorZGRjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxDQorZGRjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwDQorZGRjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KK2RkY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTENCitkZGNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xDQorZGRjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQ0KK2RkY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTENCitkZGNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xDQorZGRjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwDQorZGRjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxDQorZGRjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxDQorZGRjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxDQorDQorLS0gU3BlY2lhbHMNCitkZGNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQ0KK2RkY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxDQorZGRjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDENCitkZGNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQ0KK2RkY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxDQorZGRjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDENCitkZGNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQ0KK2RkY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQorZGRjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTENCitkZGNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KK2RkY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xDQorZGRjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTENCitkZGNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQ0KK2RkY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xDQorZGRjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTENCitkZGNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2RkY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQorZGRjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTENCitkZGNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQ0KK2RkY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xDQorZGRjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTENCitkZGNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQ0KK2RkY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xDQorZGRjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTENCitkZGNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RkY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxDQorZGRjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDENCitkZGNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQ0KK2RkY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxDQorZGRjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDENCitkZGNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQ0KK2RkY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQorDQorZGRjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgSW52YWxpZF9vcGVyYXRpb24NCitkZGNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRjbXM4NzEgY29tcGFyZXNpZyAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzIgY29tcGFyZXNpZyAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzQgY29tcGFyZXNpZyAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzUgY29tcGFyZXNpZyAgTmFOODUgIHNOYU44MyAgLT4gIE5hTjgzIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzcgY29tcGFyZXNpZyAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzggY29tcGFyZXNpZyAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gd2lkZSByYW5nZQ0KK2RkY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrMzg0IC0+IC0xDQorZGRjbXM4ODEgY29tcGFyZXNpZyA5RSszODQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCitkZGNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS0zODMgICAgICAgICAgICAgICAtPiAgMQ0KK2RkY21zODgzIGNvbXBhcmVzaWcgOUUtMzgzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQorZGRjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSszODQgLT4gLTENCitkZGNtczg4NiBjb21wYXJlc2lnIDlFKzM4NCAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQ0KK2RkY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTM4MyAgICAgICAgICAgICAgIC0+IC0xDQorZGRjbXM4ODggY29tcGFyZXNpZyA5RS0zODMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCisNCistLSBzaWducw0KK2RkY21zOTAxIGNvbXBhcmVzaWcgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KK2RkY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KK2RkY21zOTAzIGNvbXBhcmVzaWcgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KK2RkY21zOTA0IGNvbXBhcmVzaWcgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KK2RkY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RkY21zOTA2IGNvbXBhcmVzaWcgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KK2RkY21zOTA3IGNvbXBhcmVzaWcgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RkY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KKw0KKy0tIE51bGwgdGVzdHMNCitkZGNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY21zOTkxIGNvbXBhcmVzaWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdAppbmRleCAxMGM5ODRjLi43NmJlZWQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb21wYXJlVG90YWwuZGVjVGVzdApAQCAtMSw3MDYgKzEsNzA2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmctLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCi0tLSBTaW1pbGFybHksIGNvbXBhcmV0b3RhbCB3aWxsIGhhdmUgc29tZSByYWRpY2FsbHkgZGlmZmVyZW50IHBhdGhzCi0tLSB0aGFuIGNvbXBhcmUuCi0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZGNvdDAwMSBjb21wYXJldG90YWwgIC0yICAtMiAgLT4gMAotZGRjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xCi1kZGNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTEKLWRkY290MDA0IGNvbXBhcmV0b3RhbCAgLTIgICAxICAtPiAtMQotZGRjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xCi1kZGNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQotZGRjb3QwMDcgY29tcGFyZXRvdGFsICAtMSAgLTEgIC0+IDAKLWRkY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQotZGRjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xCi1kZGNvdDAxMCBjb21wYXJldG90YWwgIC0xICAgMiAgLT4gLTEKLWRkY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxCi1kZGNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQotZGRjb3QwMTMgY29tcGFyZXRvdGFsICAgMCAgIDAgIC0+IDAKLWRkY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQotZGRjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xCi1kZGNvdDAxNiBjb21wYXJldG90YWwgICAxICAtMiAgLT4gMQotZGRjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDEKLWRkY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxCi1kZGNvdDAxOSBjb21wYXJldG90YWwgICAxICAgMSAgLT4gMAotZGRjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xCi1kZGNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQotZGRjb3QwMjIgY29tcGFyZXRvdGFsICAgMiAgLTEgIC0+IDEKLWRkY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxCi1kZGNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQotZGRjb3QwMjYgY29tcGFyZXRvdGFsICAgMiAgIDIgIC0+IDAKLQotZGRjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMAotZGRjb3QwMzIgY29tcGFyZXRvdGFsICAtMjAgIC0xMCAgLT4gLTEKLWRkY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xCi1kZGNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQotZGRjb3QwMzUgY29tcGFyZXRvdGFsICAtMjAgICAyMCAgLT4gLTEKLWRkY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDEKLWRkY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDAKLWRkY290MDM4IGNvbXBhcmV0b3RhbCAgLTEwICAgMDAgIC0+IC0xCi1kZGNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQotZGRjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTEKLWRkY290MDQxIGNvbXBhcmV0b3RhbCAgIDAwICAtMjAgIC0+IDEKLWRkY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDEKLWRkY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDAKLWRkY290MDQ0IGNvbXBhcmV0b3RhbCAgIDAwICAgMTAgIC0+IC0xCi1kZGNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQotZGRjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQotZGRjb3QwNDcgY29tcGFyZXRvdGFsICAgMTAgIC0xMCAgLT4gMQotZGRjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQotZGRjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMAotZGRjb3QwNTAgY29tcGFyZXRvdGFsICAgMTAgICAyMCAgLT4gLTEKLWRkY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDEKLWRkY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDEKLWRkY290MDUzIGNvbXBhcmV0b3RhbCAgIDIwICAgMDAgIC0+IDEKLWRkY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDEKLWRkY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDAKLQotZGRjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwCi1kZGNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xCi1kZGNvdDA2MyBjb21wYXJldG90YWwgIC0yLjAgICAwLjAgIC0+IC0xCi1kZGNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xCi1kZGNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xCi1kZGNvdDA2NiBjb21wYXJldG90YWwgIC0xLjAgIC0yLjAgIC0+IDEKLWRkY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMAotZGRjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQotZGRjb3QwNjkgY29tcGFyZXRvdGFsICAtMS4wICAgMS4wICAtPiAtMQotZGRjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQotZGRjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxCi1kZGNvdDA3MiBjb21wYXJldG90YWwgICAwLjAgIC0xLjAgIC0+IDEKLWRkY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMAotZGRjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQotZGRjb3QwNzUgY29tcGFyZXRvdGFsICAgMC4wICAgMi4wICAtPiAtMQotZGRjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxCi1kZGNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDEKLWRkY290MDc4IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDAuMCAgLT4gMQotZGRjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwCi1kZGNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xCi1kZGNvdDA4MSBjb21wYXJldG90YWwgICAyLjAgIC0yLjAgIC0+IDEKLWRkY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQotZGRjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxCi1kZGNvdDA4NSBjb21wYXJldG90YWwgICAyLjAgICAxLjAgIC0+IDEKLWRkY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMAotCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKLWRkY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gMAotZGRjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAtPiAtMQotZGRjb3QwOTIgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAtPiAxCi1kZGNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0IC0+IDAKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCi1kZGNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKLWRkY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTEKLWRkY290MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQotZGRjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCi1kZGNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDAKLWRkY290MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAotZGRjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQotZGRjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQotZGRjb3QxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCi1kZGNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKLWRkY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQotCi1kZGNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKLWRkY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQotZGRjb3QxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxCi1kZGNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKLWRkY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQotZGRjb3QxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxCi1kZGNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKLWRkY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQotZGRjb3QxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxCi1kZGNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCi1kZGNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKLQotZGRjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQotZGRjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQotZGRjb3QxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQotZGRjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQotZGRjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQotZGRjb3QxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQotZGRjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQotZGRjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQotZGRjb3QxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQotZGRjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQotZGRjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCi1kZGNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCi1kZGNvdDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xCi1kZGNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCi1kZGNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCi1kZGNvdDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xCi1kZGNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCi1kZGNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCi1kZGNvdDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xCi1kZGNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCi1kZGNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCi1kZGNvdDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xCi0KLWRkY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKLWRkY290MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKLWRkY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTEKLWRkY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKLWRkY290MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKLWRkY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTEKLWRkY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKLWRkY290MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKLWRkY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTEKLWRkY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKLWRkY290MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKLQotZGRjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQotZGRjb3QyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQotZGRjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQotZGRjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQotZGRjb3QyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQotZGRjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQotZGRjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQotZGRjb3QyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQotZGRjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQotZGRjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQotZGRjb3QyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCi1kZGNvdDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCi1kZGNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxCi1kZGNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCi1kZGNvdDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCi1kZGNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxCi1kZGNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCi1kZGNvdDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCi1kZGNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxCi1kZGNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCi1kZGNvdDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCi1kZGNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxCi0KLWRkY290MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKLWRkY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKLWRkY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDEKLWRkY290MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKLWRkY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKLWRkY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDEKLWRkY290MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKLWRkY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKLWRkY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDEKLWRkY290MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKLWRkY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKLQotZGRjb3QzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQotZGRjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQotZGRjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQotZGRjb3QzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQotZGRjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQotZGRjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQotZGRjb3QzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQotZGRjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQotZGRjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQotZGRjb3QzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQotZGRjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCi1kZGNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAotZGRjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDEKLWRkY290NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQotZGRjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCi1kZGNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMAotZGRjb3Q0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKLWRkY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCi1kZGNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQotZGRjb3Q0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKLWRkY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCi1kZGNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTEKLQotZGRjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCi1kZGNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKLWRkY290NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQotZGRjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCi1kZGNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKLWRkY290NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQotZGRjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCi1kZGNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKLWRkY290NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQotZGRjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCi1kZGNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKLQotZGRjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDEKLWRkY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCi1kZGNvdDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQotZGRjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDEKLWRkY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCi1kZGNvdDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQotZGRjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDEKLWRkY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCi1kZGNvdDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQotZGRjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDEKLWRkY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kZGNvdDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kZGNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKLWRkY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kZGNvdDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kZGNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKLWRkY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kZGNvdDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kZGNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKLWRkY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kZGNvdDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kZGNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAotZGRjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxCi1kZGNvdDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQotZGRjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQotZGRjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCi1kZGNvdDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMQotZGRjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQotZGRjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxCi1kZGNvdDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQotZGRjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQotZGRjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCi1kZGNvdDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kZGNvdDQ5OCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTcgICAgLT4gMQotZGRjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDEKLWRkY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxCi1kZGNvdDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQotZGRjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKLWRkY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxCi1kZGNvdDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQotZGRjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKLWRkY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxCi1kZGNvdDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQotZGRjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKLWRkY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxCi1kZGNvdDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQotZGRjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKLWRkY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxCi1kZGNvdDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQotZGRjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKLWRkY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwCi1kZGNvdDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWRkY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQotZGRjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCi1kZGNvdDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWRkY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQotZGRjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCi1kZGNvdDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWRkY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQotZGRjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCi1kZGNvdDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWRkY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQotZGRjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCi1kZGNvdDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWRkY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQotZGRjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCi1kZGNvdDUzMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTYgICAgLT4gLTEKLWRkY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQotLS0gTFIgc3dhcAotZGRjb3Q1MzggY29tcGFyZXRvdGFsICAgIDFFLTE3ICAxICAgICAgIC0+IC0xCi1kZGNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTEKLWRkY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQotZGRjb3Q1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCi1kZGNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKLWRkY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQotZGRjb3Q1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCi1kZGNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKLWRkY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQotZGRjb3Q1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCi1kZGNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKLWRkY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQotZGRjb3Q1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCi1kZGNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKLWRkY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQotZGRjb3Q1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCi1kZGNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKLWRkY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMAotZGRjb3Q1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCi1kZGNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKLWRkY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQotZGRjb3Q1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCi1kZGNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKLWRkY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQotZGRjb3Q1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCi1kZGNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKLWRkY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQotZGRjb3Q1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCi1kZGNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKLWRkY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQotZGRjb3Q1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCi1kZGNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKLWRkY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQotZGRjb3Q1NzIgY29tcGFyZXRvdGFsICAgIDFFKzE2ICAxICAgICAgIC0+ICAxCi1kZGNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZGRjb3Q1NzggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgLT4gMQotZGRjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQotZGRjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQotZGRjb3Q1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQotZGRjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQotZGRjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQotZGRjb3Q1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQotZGRjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQotZGRjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQotZGRjb3Q1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQotZGRjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQotZGRjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKLWRkY290NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCi1kZGNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQotZGRjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKLWRkY290NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCi1kZGNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQotZGRjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKLWRkY290NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCi1kZGNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQotZGRjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKLWRkY290NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCi0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCi1kZGNvdDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQotZGRjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kZGNvdDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQotZGRjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCi1kZGNvdDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKLWRkY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQotZGRjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCi1kZGNvdDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKLWRkY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQotZGRjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCi1kZGNvdDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKLWRkY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQotZGRjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCi1kZGNvdDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKLWRkY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQotZGRjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCi1kZGNvdDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKLWRkY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQotZGRjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kZGNvdDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQotZGRjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kZGNvdDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKLWRkY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQotZGRjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCi1kZGNvdDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKLWRkY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQotZGRjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCi1kZGNvdDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKLWRkY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQotZGRjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCi1kZGNvdDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKLWRkY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQotZGRjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCi1kZGNvdDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKLWRkY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQotZGRjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCi1kZGNvdDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRkY290NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCi1kZGNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQotZGRjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKLWRkY290NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCi1kZGNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTEKLWRkY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCi1kZGNvdDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKLWRkY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQotZGRjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCi1kZGNvdDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQotZGRjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDEKLWRkY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCi1kZGNvdDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKLWRkY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxCi1kZGNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAotZGRjb3Q2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCi0KLWRkY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQotZGRjb3Q2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCi1kZGNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQotZGRjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDEKLWRkY290NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQotZGRjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCi1kZGNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQotZGRjb3Q2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKLWRkY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCi1kZGNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTEKLWRkY290NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCi1kZGNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQotZGRjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDEKLWRkY290NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCi1kZGNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQotZGRjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDEKLWRkY290NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQotZGRjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCi1kZGNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMAotZGRjb3Q2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKLWRkY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQotZGRjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xCi1kZGNvdDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKLWRkY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLWRkY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCi1kZGNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQotZGRjb3Q2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKLWRkY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxCi1kZGNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQotZGRjb3Q2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKLWRkY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxCi1kZGNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQotZGRjb3Q2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKLWRkY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxCi1kZGNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAotZGRjb3Q2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCi1kZGNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTEKLWRkY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQotZGRjb3Q2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCi1kZGNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTEKLWRkY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQotZGRjb3Q2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCi1kZGNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTEKLWRkY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQotCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcwotZGRjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxCi1kZGNvdDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKLWRkY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQotZGRjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xCi1kZGNvdDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKLWRkY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQotZGRjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxCi1kZGNvdDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKLWRkY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQotZGRjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCi1kZGNvdDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKLWRkY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQotZGRjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xCi1kZGNvdDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKLWRkY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQotZGRjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCi1kZGNvdDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKLWRkY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQotCi0tLSBvbGQgcmVzaWR1ZSBjYXNlcwotZGRjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKLWRkY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxCi1kZGNvdDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQotZGRjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKLWRkY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQotZGRjb3Q3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCi1kZGNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKLWRkY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQotZGRjb3Q3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCi1kZGNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKLWRkY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQotZGRjb3Q3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKLWRkY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCi1kZGNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQotCi0tLSBTcGVjaWFscwotZGRjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQotZGRjb3Q3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQotZGRjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQotZGRjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQotZGRjb3Q3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQotZGRjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQotZGRjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQotZGRjb3Q3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAotZGRjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQotZGRjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQotZGRjb3Q3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQotZGRjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQotZGRjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQotZGRjb3Q3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQotZGRjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQotZGRjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAotCi1kZGNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCi1kZGNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCi1kZGNvdDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xCi1kZGNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCi1kZGNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCi1kZGNvdDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xCi1kZGNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCi1kZGNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCi1kZGNvdDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCi1kZGNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCi1kZGNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCi1kZGNvdDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxCi1kZGNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCi1kZGNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCi1kZGNvdDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxCi1kZGNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCi0KLWRkY290ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKLWRkY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDEKLWRkY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKLWRkY290ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKLWRkY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDEKLWRkY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKLWRkY290ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKLWRkY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDEKLWRkY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKLWRkY290ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCi1kZGNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQotZGRjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKLWRkY290ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCi1kZGNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQotZGRjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKLWRkY290ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCi1kZGNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQotZGRjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAotZGRjb3Q4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQotZGRjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTEKLQotZGRjb3Q4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQotZGRjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQotZGRjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQotZGRjb3Q4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQotZGRjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQotZGRjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQotZGRjb3Q4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQotZGRjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQotZGRjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQotZGRjb3Q4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKLWRkY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKLQotZGRjb3Q4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTEKLWRkY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCi1kZGNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQotZGRjb3Q4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTEKLWRkY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCi1kZGNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQotZGRjb3Q4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTEKLWRkY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCi1kZGNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQotZGRjb3Q4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTEKLWRkY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKLWRkY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKLQotZGRjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDAKLWRkY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCi1kZGNvdDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKLWRkY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQotZGRjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCi1kZGNvdDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKLWRkY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQotZGRjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCi1kZGNvdDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKLWRkY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQotZGRjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCi0KLWRkY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCi1kZGNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTEKLWRkY290ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCi1kZGNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQotZGRjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDEKLWRkY290ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCi1kZGNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQotZGRjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDEKLWRkY290ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCi1kZGNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQotZGRjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDEKLWRkY290ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCi0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkCi1kZGNvdDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCi1kZGNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxCi1kZGNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCi1kZGNvdDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQotZGRjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQotZGRjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQotZGRjb3Q5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKLQotZGRjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQotZGRjb3Q5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQotZGRjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKLWRkY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xCi1kZGNvdDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQotZGRjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKLWRkY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xCi1kZGNvdDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQotCi1kZGNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQotZGRjb3Q5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDEKLWRkY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQotZGRjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCi1kZGNvdDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTEKLWRkY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQotZGRjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCi1kZGNvdDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKLQotZGRjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQotZGRjb3Q5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQotZGRjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQotZGRjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQotZGRjb3Q5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQotZGRjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQotZGRjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQotZGRjb3Q5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQotZGRjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQotCi0tLSBzcHJlYWQgemVyb3MKLWRkY290MTExMCBjb21wYXJldG90YWwgICAwRS0zODMgIDAgICAgICAgLT4gLTEKLWRkY290MTExMSBjb21wYXJldG90YWwgICAwRS0zODMgLTAgICAgICAgLT4gIDEKLWRkY290MTExMiBjb21wYXJldG90YWwgIC0wRS0zODMgIDAgICAgICAgLT4gLTEKLWRkY290MTExMyBjb21wYXJldG90YWwgIC0wRS0zODMgLTAgICAgICAgLT4gIDEKLWRkY290MTExNCBjb21wYXJldG90YWwgICAwRS0zODMgIDBFKzM4NCAgLT4gLTEKLWRkY290MTExNSBjb21wYXJldG90YWwgICAwRS0zODMgLTBFKzM4NCAgLT4gIDEKLWRkY290MTExNiBjb21wYXJldG90YWwgIC0wRS0zODMgIDBFKzM4NCAgLT4gLTEKLWRkY290MTExNyBjb21wYXJldG90YWwgIC0wRS0zODMgLTBFKzM4NCAgLT4gIDEKLWRkY290MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzM4NCAgLT4gLTEKLWRkY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzM4NCAgLT4gIDEKLWRkY290MTEyMCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFKzM4NCAgLT4gLTEKLWRkY290MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzM4NCAgLT4gIDEKLQotZGRjb3QxMTMwIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMCAgICAgICAtPiAgMQotZGRjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQotZGRjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMCAgICAgICAtPiAtMQotZGRjb3QxMTMzIGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMCAgICAgICAtPiAtMQotZGRjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQotZGRjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMEUtMzgzICAtPiAgMQotZGRjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAgMEUtMzgzICAtPiAtMQotZGRjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQotZGRjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtMzgzICAtPiAgMQotZGRjb3QxMTM5IGNvbXBhcmV0b3RhbCAgIDAgICAgICAtMEUtMzgzICAtPiAgMQotZGRjb3QxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQotZGRjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtMzgzICAtPiAtMQotCi0tLSBOdWxsIHRlc3RzCi1kZGNvdDk5OTAgY29tcGFyZXRvdGFsIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRjb3Q5OTkxIGNvbXBhcmV0b3RhbCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkQ29tcGFyZVRvdGFsLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmctLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMNCistLSB0aGFuIGNvbXBhcmUuDQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RkY290MDAxIGNvbXBhcmV0b3RhbCAgLTIgIC0yICAtPiAwDQorZGRjb3QwMDIgY29tcGFyZXRvdGFsICAtMiAgLTEgIC0+IC0xDQorZGRjb3QwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xDQorZGRjb3QwMDQgY29tcGFyZXRvdGFsICAtMiAgIDEgIC0+IC0xDQorZGRjb3QwMDUgY29tcGFyZXRvdGFsICAtMiAgIDIgIC0+IC0xDQorZGRjb3QwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDENCitkZGNvdDAwNyBjb21wYXJldG90YWwgIC0xICAtMSAgLT4gMA0KK2RkY290MDA4IGNvbXBhcmV0b3RhbCAgLTEgICAwICAtPiAtMQ0KK2RkY290MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQ0KK2RkY290MDEwIGNvbXBhcmV0b3RhbCAgLTEgICAyICAtPiAtMQ0KK2RkY290MDExIGNvbXBhcmV0b3RhbCAgIDAgIC0yICAtPiAxDQorZGRjb3QwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDENCitkZGNvdDAxMyBjb21wYXJldG90YWwgICAwICAgMCAgLT4gMA0KK2RkY290MDE0IGNvbXBhcmV0b3RhbCAgIDAgICAxICAtPiAtMQ0KK2RkY290MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQ0KK2RkY290MDE2IGNvbXBhcmV0b3RhbCAgIDEgIC0yICAtPiAxDQorZGRjb3QwMTcgY29tcGFyZXRvdGFsICAgMSAgLTEgIC0+IDENCitkZGNvdDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQ0KK2RkY290MDE5IGNvbXBhcmV0b3RhbCAgIDEgICAxICAtPiAwDQorZGRjb3QwMjAgY29tcGFyZXRvdGFsICAgMSAgIDIgIC0+IC0xDQorZGRjb3QwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDENCitkZGNvdDAyMiBjb21wYXJldG90YWwgICAyICAtMSAgLT4gMQ0KK2RkY290MDIzIGNvbXBhcmV0b3RhbCAgIDIgICAwICAtPiAxDQorZGRjb3QwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDENCitkZGNvdDAyNiBjb21wYXJldG90YWwgICAyICAgMiAgLT4gMA0KKw0KK2RkY290MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDANCitkZGNvdDAzMiBjb21wYXJldG90YWwgIC0yMCAgLTEwICAtPiAtMQ0KK2RkY290MDMzIGNvbXBhcmV0b3RhbCAgLTIwICAgMDAgIC0+IC0xDQorZGRjb3QwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTENCitkZGNvdDAzNSBjb21wYXJldG90YWwgIC0yMCAgIDIwICAtPiAtMQ0KK2RkY290MDM2IGNvbXBhcmV0b3RhbCAgLTEwICAtMjAgIC0+IDENCitkZGNvdDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwDQorZGRjb3QwMzggY29tcGFyZXRvdGFsICAtMTAgICAwMCAgLT4gLTENCitkZGNvdDAzOSBjb21wYXJldG90YWwgIC0xMCAgIDEwICAtPiAtMQ0KK2RkY290MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xDQorZGRjb3QwNDEgY29tcGFyZXRvdGFsICAgMDAgIC0yMCAgLT4gMQ0KK2RkY290MDQyIGNvbXBhcmV0b3RhbCAgIDAwICAtMTAgIC0+IDENCitkZGNvdDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwDQorZGRjb3QwNDQgY29tcGFyZXRvdGFsICAgMDAgICAxMCAgLT4gLTENCitkZGNvdDA0NSBjb21wYXJldG90YWwgICAwMCAgIDIwICAtPiAtMQ0KK2RkY290MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDENCitkZGNvdDA0NyBjb21wYXJldG90YWwgICAxMCAgLTEwICAtPiAxDQorZGRjb3QwNDggY29tcGFyZXRvdGFsICAgMTAgICAwMCAgLT4gMQ0KK2RkY290MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDANCitkZGNvdDA1MCBjb21wYXJldG90YWwgICAxMCAgIDIwICAtPiAtMQ0KK2RkY290MDUxIGNvbXBhcmV0b3RhbCAgIDIwICAtMjAgIC0+IDENCitkZGNvdDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxDQorZGRjb3QwNTMgY29tcGFyZXRvdGFsICAgMjAgICAwMCAgLT4gMQ0KK2RkY290MDU1IGNvbXBhcmV0b3RhbCAgIDIwICAgMTAgIC0+IDENCitkZGNvdDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwDQorDQorZGRjb3QwNjEgY29tcGFyZXRvdGFsICAtMi4wICAtMi4wICAtPiAwDQorZGRjb3QwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQ0KK2RkY290MDYzIGNvbXBhcmV0b3RhbCAgLTIuMCAgIDAuMCAgLT4gLTENCitkZGNvdDA2NCBjb21wYXJldG90YWwgIC0yLjAgICAxLjAgIC0+IC0xDQorZGRjb3QwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQ0KK2RkY290MDY2IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTIuMCAgLT4gMQ0KK2RkY290MDY3IGNvbXBhcmV0b3RhbCAgLTEuMCAgLTEuMCAgLT4gMA0KK2RkY290MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTENCitkZGNvdDA2OSBjb21wYXJldG90YWwgIC0xLjAgICAxLjAgIC0+IC0xDQorZGRjb3QwNzAgY29tcGFyZXRvdGFsICAtMS4wICAgMi4wICAtPiAtMQ0KK2RkY290MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQ0KK2RkY290MDcyIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTEuMCAgLT4gMQ0KK2RkY290MDczIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAgLT4gMA0KK2RkY290MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTENCitkZGNvdDA3NSBjb21wYXJldG90YWwgICAwLjAgICAyLjAgIC0+IC0xDQorZGRjb3QwNzYgY29tcGFyZXRvdGFsICAgMS4wICAtMi4wICAtPiAxDQorZGRjb3QwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxDQorZGRjb3QwNzggY29tcGFyZXRvdGFsICAgMS4wICAgMC4wICAtPiAxDQorZGRjb3QwNzkgY29tcGFyZXRvdGFsICAgMS4wICAgMS4wICAtPiAwDQorZGRjb3QwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQ0KK2RkY290MDgxIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTIuMCAgLT4gMQ0KK2RkY290MDgyIGNvbXBhcmV0b3RhbCAgIDIuMCAgLTEuMCAgLT4gMQ0KK2RkY290MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQ0KK2RkY290MDg1IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDEuMCAgLT4gMQ0KK2RkY290MDg2IGNvbXBhcmV0b3RhbCAgIDIuMCAgIDIuMCAgLT4gMA0KKw0KKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KK2RkY290MDkwIGNvbXBhcmV0b3RhbCAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gMA0KK2RkY290MDkxIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgLT4gLTENCitkZGNvdDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0IC0+IDENCitkZGNvdDA5MyBjb21wYXJldG90YWwgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0IC0+IDANCisNCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCistLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsDQorZGRjb3QxMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIDcuMCAgICAtPiAwDQorZGRjb3QxMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIDcgICAgICAtPiAtMQ0KK2RkY290MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQ0KK2RkY290MTAzIGNvbXBhcmV0b3RhbCAgIDdFKzAgICA3LjAgICAgLT4gMQ0KK2RkY290MTA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3LjAgICAgLT4gMA0KK2RkY290MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMA0KK2RkY290MTA2IGNvbXBhcmV0b3RhbCAgIDcwRS0xICA3ICAgICAgLT4gLTENCitkZGNvdDEwNyBjb21wYXJldG90YWwgICA3LjAgICAgN0UrMCAgIC0+IC0xDQorZGRjb3QxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwDQorZGRjb3QxMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIDAuN0UrMSAtPiAwDQorZGRjb3QxMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIDcwRS0xICAtPiAxDQorDQorZGRjb3QxMjAgY29tcGFyZXRvdGFsICAgOC4wICAgIDcuMCAgICAtPiAxDQorZGRjb3QxMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIDcgICAgICAtPiAxDQorZGRjb3QxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxDQorZGRjb3QxMjMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDcuMCAgICAtPiAxDQorZGRjb3QxMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIDcuMCAgICAtPiAxDQorZGRjb3QxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxDQorZGRjb3QxMjYgY29tcGFyZXRvdGFsICAgODBFLTEgIDcgICAgICAtPiAxDQorZGRjb3QxMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIDdFKzAgICAtPiAxDQorZGRjb3QxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxDQorZGRjb3QxMjkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuN0UrMSAgLT4gMQ0KK2RkY290MTMwIGNvbXBhcmV0b3RhbCAgIDggICAgICA3MEUtMSAgLT4gMQ0KKw0KK2RkY290MTQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA5LjAgICAgLT4gLTENCitkZGNvdDE0MSBjb21wYXJldG90YWwgICA4LjAgICAgOSAgICAgIC0+IC0xDQorZGRjb3QxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KK2RkY290MTQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA5LjAgICAgLT4gLTENCitkZGNvdDE0NCBjb21wYXJldG90YWwgICA4MEUtMSAgOS4wICAgIC0+IC0xDQorZGRjb3QxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQ0KK2RkY290MTQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA5ICAgICAgLT4gLTENCitkZGNvdDE0NyBjb21wYXJldG90YWwgICA4LjAgICAgOUUrMCAgIC0+IC0xDQorZGRjb3QxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KK2RkY290MTQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjlFKzEgLT4gLTENCitkZGNvdDE1MCBjb21wYXJldG90YWwgICA4ICAgICAgOTBFLTEgIC0+IC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KK2RkY290MjAwIGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3LjAgICAgLT4gLTENCitkZGNvdDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xDQorZGRjb3QyMDIgY29tcGFyZXRvdGFsICAtNyAgICAgIDcuMCAgICAtPiAtMQ0KK2RkY290MjAzIGNvbXBhcmV0b3RhbCAgLTdFKzAgICA3LjAgICAgLT4gLTENCitkZGNvdDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xDQorZGRjb3QyMDUgY29tcGFyZXRvdGFsICAtMC43RSsxIDcgICAgICAtPiAtMQ0KK2RkY290MjA2IGNvbXBhcmV0b3RhbCAgLTcwRS0xICA3ICAgICAgLT4gLTENCitkZGNvdDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xDQorZGRjb3QyMDggY29tcGFyZXRvdGFsICAtNy4wICAgIDcwRS0xICAtPiAtMQ0KK2RkY290MjA5IGNvbXBhcmV0b3RhbCAgLTcgICAgICAwLjdFKzEgLT4gLTENCitkZGNvdDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xDQorDQorZGRjb3QyMjAgY29tcGFyZXRvdGFsICAtOC4wICAgIDcuMCAgICAtPiAtMQ0KK2RkY290MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTENCitkZGNvdDIyMiBjb21wYXJldG90YWwgIC04ICAgICAgNy4wICAgIC0+IC0xDQorZGRjb3QyMjMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDcuMCAgICAtPiAtMQ0KK2RkY290MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTENCitkZGNvdDIyNSBjb21wYXJldG90YWwgIC0wLjhFKzEgNyAgICAgIC0+IC0xDQorZGRjb3QyMjYgY29tcGFyZXRvdGFsICAtODBFLTEgIDcgICAgICAtPiAtMQ0KK2RkY290MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTENCitkZGNvdDIyOCBjb21wYXJldG90YWwgIC04LjAgICAgNzBFLTEgIC0+IC0xDQorZGRjb3QyMjkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuN0UrMSAtPiAtMQ0KK2RkY290MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTENCisNCitkZGNvdDI0MCBjb21wYXJldG90YWwgIC04LjAgICAgOS4wICAgIC0+IC0xDQorZGRjb3QyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQ0KK2RkY290MjQyIGNvbXBhcmV0b3RhbCAgLTggICAgICA5LjAgICAgLT4gLTENCitkZGNvdDI0MyBjb21wYXJldG90YWwgIC04RSswICAgOS4wICAgIC0+IC0xDQorZGRjb3QyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQ0KK2RkY290MjQ1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA5ICAgICAgLT4gLTENCitkZGNvdDI0NiBjb21wYXJldG90YWwgIC04MEUtMSAgOSAgICAgIC0+IC0xDQorZGRjb3QyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQ0KK2RkY290MjQ4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5MEUtMSAgLT4gLTENCitkZGNvdDI0OSBjb21wYXJldG90YWwgIC04ICAgICAgMC45RSsxIC0+IC0xDQorZGRjb3QyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCitkZGNvdDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxDQorZGRjb3QzMDEgY29tcGFyZXRvdGFsICAgNy4wICAgIC03ICAgICAgLT4gMQ0KK2RkY290MzAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNy4wICAgIC0+IDENCitkZGNvdDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxDQorZGRjb3QzMDQgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03LjAgICAgLT4gMQ0KK2RkY290MzA1IGNvbXBhcmV0b3RhbCAgIC43RSsxICAtNyAgICAgIC0+IDENCitkZGNvdDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxDQorZGRjb3QzMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIC03RSswICAgLT4gMQ0KK2RkY290MzA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNzBFLTEgIC0+IDENCitkZGNvdDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxDQorZGRjb3QzMTAgY29tcGFyZXRvdGFsICAgNyAgICAgIC03MEUtMSAgLT4gMQ0KKw0KK2RkY290MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDENCitkZGNvdDMyMSBjb21wYXJldG90YWwgICA4LjAgICAgLTcgICAgICAtPiAxDQorZGRjb3QzMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIC03LjAgICAgLT4gMQ0KK2RkY290MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDENCitkZGNvdDMyNCBjb21wYXJldG90YWwgICA4MEUtMSAgLTcuMCAgICAtPiAxDQorZGRjb3QzMjUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC03ICAgICAgLT4gMQ0KK2RkY290MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDENCitkZGNvdDMyNyBjb21wYXJldG90YWwgICA4LjAgICAgLTdFKzAgICAtPiAxDQorZGRjb3QzMjggY29tcGFyZXRvdGFsICAgOC4wICAgIC03MEUtMSAgLT4gMQ0KK2RkY290MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDENCitkZGNvdDMzMCBjb21wYXJldG90YWwgICA4ICAgICAgLTcwRS0xICAtPiAxDQorDQorZGRjb3QzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQ0KK2RkY290MzQxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOSAgICAgIC0+IDENCitkZGNvdDM0MiBjb21wYXJldG90YWwgICA4ICAgICAgLTkuMCAgICAtPiAxDQorZGRjb3QzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RkY290MzQ0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOS4wICAgIC0+IDENCitkZGNvdDM0NSBjb21wYXJldG90YWwgICAuOEUrMSAgLTkgICAgICAtPiAxDQorZGRjb3QzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQ0KK2RkY290MzQ3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOUUrMCAgIC0+IDENCitkZGNvdDM0OCBjb21wYXJldG90YWwgICA4LjAgICAgLTkwRS0xICAtPiAxDQorZGRjb3QzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RkY290MzUwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtOTBFLTEgIC0+IDENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQorZGRjb3Q0MDAgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNy4wICAgIC0+IDANCitkZGNvdDQwMSBjb21wYXJldG90YWwgICAtNy4wICAgIC03ICAgICAgLT4gMQ0KK2RkY290NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDAzIGNvbXBhcmV0b3RhbCAgIC03RSswICAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDA0IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcuMCAgICAtPiAwDQorZGRjb3Q0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDANCitkZGNvdDQwNiBjb21wYXJldG90YWwgICAtNzBFLTEgIC03ICAgICAgLT4gMQ0KK2RkY290NDA3IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTdFKzAgICAtPiAxDQorZGRjb3Q0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCitkZGNvdDQwOSBjb21wYXJldG90YWwgICAtNyAgICAgIC0uN0UrMSAgLT4gMA0KK2RkY290NDEwIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2RkY290NDIwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDIxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KK2RkY290NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDIzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDI0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KK2RkY290NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQ0KK2RkY290NDI2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTcgICAgICAtPiAtMQ0KK2RkY290NDI3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KK2RkY290NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQ0KK2RkY290NDI5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS43RSsxICAtPiAtMQ0KK2RkY290NDMwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2RkY290NDQwIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkuMCAgICAtPiAxDQorZGRjb3Q0NDEgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOSAgICAgIC0+IDENCitkZGNvdDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KK2RkY290NDQzIGNvbXBhcmV0b3RhbCAgIC04RSswICAgLTkuMCAgICAtPiAxDQorZGRjb3Q0NDQgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOS4wICAgIC0+IDENCitkZGNvdDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KK2RkY290NDQ2IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkgICAgICAtPiAxDQorZGRjb3Q0NDcgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOUUrMCAgIC0+IDENCitkZGNvdDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KK2RkY290NDQ5IGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLS45RSsxICAtPiAxDQorZGRjb3Q0NTAgY29tcGFyZXRvdGFsICAgLTggICAgICAtOTBFLTEgIC0+IDENCisNCisNCistLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0NCitkZGNvdDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorZGRjb3Q0NzQgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQorZGRjb3Q0NzUgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCitkZGNvdDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQorZGRjb3Q0NzcgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorZGRjb3Q0NzggY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTENCitkZGNvdDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorZGRjb3Q0ODAgY29tcGFyZXRvdGFsIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQorZGRjb3Q0ODEgY29tcGFyZXRvdGFsIDEyMy40NTYwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTENCitkZGNvdDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQorZGRjb3Q0ODMgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5IC0+IDANCitkZGNvdDQ4NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5IC0+IDENCitkZGNvdDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQ0KK2RkY290NDg5IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5IC0+IDENCitkZGNvdDQ5MCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5IC0+IDENCitkZGNvdDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMQ0KK2RkY290NDkyIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5IC0+IDENCitkZGNvdDQ5MyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5IC0+IDENCitkZGNvdDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQ0KK2RkY290NDk1IGNvbXBhcmV0b3RhbCAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5IC0+IDENCitkZGNvdDQ5NiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5IC0+IDENCitkZGNvdDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMA0KKw0KKy0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwNCitkZGNvdDQ5OCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTcgICAgLT4gMQ0KK2RkY290NDk5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNiAgICAtPiAxDQorZGRjb3Q1MDAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE1ICAgIC0+IDENCitkZGNvdDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RkY290NTAyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMyAgICAtPiAxDQorZGRjb3Q1MDMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEyICAgIC0+IDENCitkZGNvdDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RkY290NTA1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMCAgICAtPiAxDQorZGRjb3Q1MDYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTkgICAgIC0+IDENCitkZGNvdDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RkY290NTA4IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS03ICAgICAtPiAxDQorZGRjb3Q1MDkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTYgICAgIC0+IDENCitkZGNvdDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KK2RkY290NTExIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS00ICAgICAtPiAxDQorZGRjb3Q1MTIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTMgICAgIC0+IDENCitkZGNvdDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KK2RkY290NTE0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xICAgICAtPiAxDQorZGRjb3Q1MTUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTAgICAgIC0+IDANCitkZGNvdDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCitkZGNvdDUxNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCitkZGNvdDUxOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMyAgICAgLT4gLTENCitkZGNvdDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCitkZGNvdDUyMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCitkZGNvdDUyMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNiAgICAgLT4gLTENCitkZGNvdDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCitkZGNvdDUyNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCitkZGNvdDUyNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrOSAgICAgLT4gLTENCitkZGNvdDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCitkZGNvdDUyNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCitkZGNvdDUyOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTIgICAgLT4gLTENCitkZGNvdDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCitkZGNvdDUzMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCitkZGNvdDUzMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTUgICAgLT4gLTENCitkZGNvdDUzMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTYgICAgLT4gLTENCitkZGNvdDUzMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTcgICAgLT4gLTENCistLSBMUiBzd2FwDQorZGRjb3Q1MzggY29tcGFyZXRvdGFsICAgIDFFLTE3ICAxICAgICAgIC0+IC0xDQorZGRjb3Q1MzkgY29tcGFyZXRvdGFsICAgIDFFLTE2ICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDAgY29tcGFyZXRvdGFsICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDIgY29tcGFyZXRvdGFsICAgIDFFLTEzICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDMgY29tcGFyZXRvdGFsICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDUgY29tcGFyZXRvdGFsICAgIDFFLTEwICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDYgY29tcGFyZXRvdGFsICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDggY29tcGFyZXRvdGFsICAgIDFFLTcgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NDkgY29tcGFyZXRvdGFsICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTEgY29tcGFyZXRvdGFsICAgIDFFLTQgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTIgY29tcGFyZXRvdGFsICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTQgY29tcGFyZXRvdGFsICAgIDFFLTEgICAxICAgICAgIC0+IC0xDQorZGRjb3Q1NTUgY29tcGFyZXRvdGFsICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQorZGRjb3Q1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NTcgY29tcGFyZXRvdGFsICAgIDFFKzIgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NTggY29tcGFyZXRvdGFsICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjEgY29tcGFyZXRvdGFsICAgIDFFKzUgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjIgY29tcGFyZXRvdGFsICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjQgY29tcGFyZXRvdGFsICAgIDFFKzggICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjUgY29tcGFyZXRvdGFsICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjcgY29tcGFyZXRvdGFsICAgIDFFKzExICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjggY29tcGFyZXRvdGFsICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NzAgY29tcGFyZXRvdGFsICAgIDFFKzE0ICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NzEgY29tcGFyZXRvdGFsICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NzIgY29tcGFyZXRvdGFsICAgIDFFKzE2ICAxICAgICAgIC0+ICAxDQorZGRjb3Q1NzMgY29tcGFyZXRvdGFsICAgIDFFKzE3ICAxICAgICAgIC0+ICAxDQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQorZGRjb3Q1NzggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgLT4gMQ0KK2RkY290NTc5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgIC0+IDENCitkZGNvdDU4MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxDQorZGRjb3Q1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RkY290NTgyIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCitkZGNvdDU4MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxDQorZGRjb3Q1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RkY290NTg1IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCitkZGNvdDU4NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxDQorZGRjb3Q1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RkY290NTg4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCitkZGNvdDU4OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQ0KK2RkY290NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQorZGRjb3Q1OTEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCitkZGNvdDU5MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQ0KK2RkY290NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQorZGRjb3Q1OTQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCitkZGNvdDU5NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQ0KK2RkY290NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQorZGRjb3Q1OTcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCitkZGNvdDU5OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQ0KK2RkY290NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQorDQorLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCitkZGNvdDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwMSBjb21wYXJldG90YWwgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwMiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwNCBjb21wYXJldG90YWwgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwNSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwNyBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwOCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCitkZGNvdDYxMCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDENCitkZGNvdDYxMSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCitkZGNvdDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCitkZGNvdDYxMyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDENCitkZGNvdDYxNCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCitkZGNvdDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCitkZGNvdDYxNiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDENCitkZGNvdDYxNyBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCitkZGNvdDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCitkZGNvdDYxOSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDENCitkZGNvdDYyMCBjb21wYXJldG90YWwgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyMiBjb21wYXJldG90YWwgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyMyBjb21wYXJldG90YWwgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyNSBjb21wYXJldG90YWwgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyNiBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyOCBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYyOSBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCitkZGNvdDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCitkZGNvdDYzMSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTENCitkZGNvdDYzMiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCitkZGNvdDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCitkZGNvdDYzNCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTENCitkZGNvdDYzNSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCitkZGNvdDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCitkZGNvdDYzNyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTENCitkZGNvdDYzOCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCitkZGNvdDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RkY290NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwDQorZGRjb3Q2NDEgY29tcGFyZXRvdGFsICAgMCAgICAtMCAgIC0+IDENCitkZGNvdDY0MiBjb21wYXJldG90YWwgICAwICAgIC0wLjAgLT4gMQ0KK2RkY290NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxDQorZGRjb3Q2NDQgY29tcGFyZXRvdGFsICAtMCAgICAgMCAgIC0+IC0xDQorZGRjb3Q2NDUgY29tcGFyZXRvdGFsICAtMCAgICAtMCAgIC0+IDANCitkZGNvdDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTENCitkZGNvdDY0NyBjb21wYXJldG90YWwgIC0wICAgICAwLjAgLT4gLTENCitkZGNvdDY0OCBjb21wYXJldG90YWwgICAwLjAgICAwICAgLT4gLTENCitkZGNvdDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQ0KK2RkY290NjUwIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTAuMCAtPiAxDQorZGRjb3Q2NTEgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wIC0+IDANCitkZGNvdDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTENCitkZGNvdDY1MyBjb21wYXJldG90YWwgIC0wLjAgIC0wICAgLT4gMQ0KK2RkY290NjU0IGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAuMCAtPiAwDQorZGRjb3Q2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xDQorDQorZGRjb3Q2NTYgY29tcGFyZXRvdGFsICAtMEUxICAgMC4wIC0+IC0xDQorZGRjb3Q2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xDQorZGRjb3Q2NTggY29tcGFyZXRvdGFsICAgMEUxICAgMC4wIC0+IDENCitkZGNvdDY1OSBjb21wYXJldG90YWwgICAwRTIgICAwLjAgLT4gMQ0KK2RkY290NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQ0KK2RkY290NjYxIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAgICAtPiAtMQ0KK2RkY290NjYyIGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAgICAtPiAxDQorZGRjb3Q2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDENCitkZGNvdDY2NCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTEgLT4gMA0KK2RkY290NjY1IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMSAtPiAtMQ0KK2RkY290NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxDQorZGRjb3Q2NjcgY29tcGFyZXRvdGFsICAgMEUyICAtMEUxIC0+IDENCitkZGNvdDY2OCBjb21wYXJldG90YWwgIC0wRTEgIC0wRTIgLT4gMQ0KK2RkY290NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwDQorZGRjb3Q2NzAgY29tcGFyZXRvdGFsICAgMEUxICAtMEUyIC0+IDENCitkZGNvdDY3MSBjb21wYXJldG90YWwgICAwRTIgIC0wRTIgLT4gMQ0KK2RkY290NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQ0KK2RkY290NjczIGNvbXBhcmV0b3RhbCAgLTBFMiAgIDBFMSAtPiAtMQ0KK2RkY290Njc0IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDBFMSAtPiAwDQorZGRjb3Q2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDENCitkZGNvdDY3NiBjb21wYXJldG90YWwgIC0wRTEgICAwRTIgLT4gLTENCitkZGNvdDY3NyBjb21wYXJldG90YWwgIC0wRTIgICAwRTIgLT4gLTENCitkZGNvdDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTENCitkZGNvdDY3OSBjb21wYXJldG90YWwgICAwRTIgICAwRTIgLT4gMA0KKw0KKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCitkZGNvdDY4MCBjb21wYXJldG90YWwgICAxMiAgICAxMiAgICAgICAgICAgLT4gMA0KK2RkY290NjgxIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAgICAgICAgICAtPiAxDQorZGRjb3Q2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDENCitkZGNvdDY4MyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMQ0KK2RkY290Njg0IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAxDQorZGRjb3Q2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDENCitkZGNvdDY4NiBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMQ0KK2RkY290Njg3IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAxDQorZGRjb3Q2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDENCitkZGNvdDY4OSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMQ0KK2RkY290NjkwIGNvbXBhcmV0b3RhbCAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQorZGRjb3Q2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IC0xDQorZGRjb3Q2OTkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IC0xDQorDQorLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MNCitkZGNvdDcwMSBjb21wYXJldG90YWwgMTIzNDU2NzgwMDAgIDEgLT4gIDENCitkZGNvdDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTENCitkZGNvdDcwMyBjb21wYXJldG90YWwgMTIzNDU2NzgwMCAgIDEgLT4gIDENCitkZGNvdDcwNCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwICAgLT4gLTENCitkZGNvdDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDENCitkZGNvdDcwNiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwICAgLT4gLTENCitkZGNvdDcwNyBjb21wYXJldG90YWwgMTIzNDU2Nzg5MSAgIDEgLT4gIDENCitkZGNvdDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTENCitkZGNvdDcwOSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MDEgIDEgLT4gIDENCitkZGNvdDcxMCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkwMSAgLT4gLTENCitkZGNvdDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDENCitkZGNvdDcxMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODk2ICAgLT4gLTENCitkZGNvdDcxMyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTEgIDEgLT4gLTENCitkZGNvdDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDENCitkZGNvdDcxNSBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTAxIDEgLT4gLTENCitkZGNvdDcxNiBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MDEgLT4gIDENCitkZGNvdDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTENCitkZGNvdDcxOCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5NiAgLT4gIDENCisNCistLSBvbGQgcmVzaWR1ZSBjYXNlcw0KK2RkY290NzQwIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTk5ICAtPiAxDQorZGRjb3Q3NDEgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OSAgIC0+IDENCitkZGNvdDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQ0KK2RkY290NzQzIGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwICAgICAtPiAxDQorZGRjb3Q3NDQgY29tcGFyZXRvdGFsICAxICAxLjAwMDAxICAgIC0+IC0xDQorZGRjb3Q3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xDQorZGRjb3Q3NDYgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMDEgIC0+IC0xDQorZGRjb3Q3NTAgY29tcGFyZXRvdGFsICAwLjk5OTk5OTkgIDEgIC0+IC0xDQorZGRjb3Q3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xDQorZGRjb3Q3NTIgY29tcGFyZXRvdGFsICAwLjk5OTk5ICAgIDEgIC0+IC0xDQorZGRjb3Q3NTMgY29tcGFyZXRvdGFsICAxLjAwMDAgICAgIDEgIC0+IC0xDQorZGRjb3Q3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDENCitkZGNvdDc1NSBjb21wYXJldG90YWwgIDEuMDAwMDAxICAgMSAgLT4gMQ0KK2RkY290NzU2IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDAxICAxICAtPiAxDQorDQorLS0gU3BlY2lhbHMNCitkZGNvdDc4MCBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxDQorZGRjb3Q3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQ0KK2RkY290NzgyIGNvbXBhcmV0b3RhbCAgSW5mICAtMSAgICAgLT4gIDENCitkZGNvdDc4MyBjb21wYXJldG90YWwgIEluZiAgLTAgICAgIC0+ICAxDQorZGRjb3Q3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQ0KK2RkY290Nzg1IGNvbXBhcmV0b3RhbCAgSW5mICAgMSAgICAgLT4gIDENCitkZGNvdDc4NiBjb21wYXJldG90YWwgIEluZiAgIDEwMDAgIC0+ICAxDQorZGRjb3Q3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KK2RkY290Nzg4IGNvbXBhcmV0b3RhbCAtMTAwMCAgSW5mICAgLT4gLTENCitkZGNvdDc4OSBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQorZGRjb3Q3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQ0KK2RkY290NzkxIGNvbXBhcmV0b3RhbCAtMCAgICAgSW5mICAgLT4gLTENCitkZGNvdDc5MiBjb21wYXJldG90YWwgIDAgICAgIEluZiAgIC0+IC0xDQorZGRjb3Q3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQ0KK2RkY290Nzk0IGNvbXBhcmV0b3RhbCAgMTAwMCAgSW5mICAgLT4gLTENCitkZGNvdDc5NSBjb21wYXJldG90YWwgIEluZiAgIEluZiAgIC0+ICAwDQorDQorZGRjb3Q4MDAgY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RkY290ODAxIGNvbXBhcmV0b3RhbCAtSW5mICAtMTAwMCAgLT4gLTENCitkZGNvdDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xDQorZGRjb3Q4MDMgY29tcGFyZXRvdGFsIC1JbmYgIC0wICAgICAtPiAtMQ0KK2RkY290ODA0IGNvbXBhcmV0b3RhbCAtSW5mICAgMCAgICAgLT4gLTENCitkZGNvdDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xDQorZGRjb3Q4MDYgY29tcGFyZXRvdGFsIC1JbmYgICAxMDAwICAtPiAtMQ0KK2RkY290ODA3IGNvbXBhcmV0b3RhbCAtSW5mICAgSW5mICAgLT4gLTENCitkZGNvdDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwDQorZGRjb3Q4MDkgY29tcGFyZXRvdGFsIC0xMDAwIC1JbmYgICAtPiAgMQ0KK2RkY290ODEwIGNvbXBhcmV0b3RhbCAtMSAgICAtSW5mICAgLT4gIDENCitkZGNvdDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxDQorZGRjb3Q4MTIgY29tcGFyZXRvdGFsICAwICAgIC1JbmYgICAtPiAgMQ0KK2RkY290ODEzIGNvbXBhcmV0b3RhbCAgMSAgICAtSW5mICAgLT4gIDENCitkZGNvdDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxDQorZGRjb3Q4MTUgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KKw0KK2RkY290ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDENCitkZGNvdDgyMiBjb21wYXJldG90YWwgIE5hTiAtMTAwMCAgIC0+ICAxDQorZGRjb3Q4MjMgY29tcGFyZXRvdGFsICBOYU4gLTEgICAgICAtPiAgMQ0KK2RkY290ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDENCitkZGNvdDgyNSBjb21wYXJldG90YWwgIE5hTiAgMCAgICAgIC0+ICAxDQorZGRjb3Q4MjYgY29tcGFyZXRvdGFsICBOYU4gIDEgICAgICAtPiAgMQ0KK2RkY290ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDENCitkZGNvdDgyOCBjb21wYXJldG90YWwgIE5hTiAgSW5mICAgIC0+ICAxDQorZGRjb3Q4MjkgY29tcGFyZXRvdGFsICBOYU4gIE5hTiAgICAtPiAgMA0KK2RkY290ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xDQorZGRjb3Q4MzEgY29tcGFyZXRvdGFsIC0xMDAwIE5hTiAgICAtPiAgLTENCitkZGNvdDgzMiBjb21wYXJldG90YWwgLTEgICAgTmFOICAgIC0+ICAtMQ0KK2RkY290ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xDQorZGRjb3Q4MzQgY29tcGFyZXRvdGFsICAwICAgIE5hTiAgICAtPiAgLTENCitkZGNvdDgzNSBjb21wYXJldG90YWwgIDEgICAgTmFOICAgIC0+ICAtMQ0KK2RkY290ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xDQorZGRjb3Q4MzcgY29tcGFyZXRvdGFsICBJbmYgIE5hTiAgICAtPiAgLTENCitkZGNvdDgzOCBjb21wYXJldG90YWwgLU5hTiAtTmFOICAgIC0+ICAwDQorZGRjb3Q4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQ0KK2RkY290ODQwIGNvbXBhcmV0b3RhbCAtTmFOICtOYU4gICAgLT4gIC0xDQorDQorZGRjb3Q4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQ0KK2RkY290ODQyIGNvbXBhcmV0b3RhbCAgc05hTiAtTmFOICAgLT4gIDENCitkZGNvdDg0MyBjb21wYXJldG90YWwgIHNOYU4gLUluZiAgIC0+ICAxDQorZGRjb3Q4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQ0KK2RkY290ODQ1IGNvbXBhcmV0b3RhbCAgc05hTiAtMSAgICAgLT4gIDENCitkZGNvdDg0NiBjb21wYXJldG90YWwgIHNOYU4gLTAgICAgIC0+ICAxDQorZGRjb3Q4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQ0KK2RkY290ODQ4IGNvbXBhcmV0b3RhbCAgc05hTiAgMSAgICAgLT4gIDENCitkZGNvdDg0OSBjb21wYXJldG90YWwgIHNOYU4gIDEwMDAgIC0+ICAxDQorZGRjb3Q4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTENCitkZGNvdDg1MSBjb21wYXJldG90YWwgIHNOYU4gc05hTiAgIC0+ICAwDQorDQorZGRjb3Q4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTENCitkZGNvdDg1MyBjb21wYXJldG90YWwgLU5hTiAgc05hTiAgIC0+ICAtMQ0KK2RkY290ODU0IGNvbXBhcmV0b3RhbCAtSW5mICBzTmFOICAgLT4gIC0xDQorZGRjb3Q4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTENCitkZGNvdDg1NiBjb21wYXJldG90YWwgLTEgICAgc05hTiAgIC0+ICAtMQ0KK2RkY290ODU3IGNvbXBhcmV0b3RhbCAtMCAgICBzTmFOICAgLT4gIC0xDQorZGRjb3Q4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTENCitkZGNvdDg1OSBjb21wYXJldG90YWwgIDEgICAgc05hTiAgIC0+ICAtMQ0KK2RkY290ODYwIGNvbXBhcmV0b3RhbCAgMTAwMCBzTmFOICAgLT4gIC0xDQorZGRjb3Q4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTENCitkZGNvdDg2MiBjb21wYXJldG90YWwgIE5hTiAgc05hTiAgIC0+ICAxDQorZGRjb3Q4NjMgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMA0KKw0KK2RkY290ODcxIGNvbXBhcmV0b3RhbCAgLXNOYU4gLXNOYU4gIC0+ICAwDQorZGRjb3Q4NzIgY29tcGFyZXRvdGFsICAtc05hTiAtTmFOICAgLT4gIDENCitkZGNvdDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTENCitkZGNvdDg3NCBjb21wYXJldG90YWwgIC1zTmFOIC0xMDAwICAtPiAgLTENCitkZGNvdDg3NSBjb21wYXJldG90YWwgIC1zTmFOIC0xICAgICAtPiAgLTENCitkZGNvdDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTENCitkZGNvdDg3NyBjb21wYXJldG90YWwgIC1zTmFOICAwICAgICAtPiAgLTENCitkZGNvdDg3OCBjb21wYXJldG90YWwgIC1zTmFOICAxICAgICAtPiAgLTENCitkZGNvdDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTENCitkZGNvdDg4MCBjb21wYXJldG90YWwgIC1zTmFOICBOYU4gICAtPiAgLTENCitkZGNvdDg4MSBjb21wYXJldG90YWwgIC1zTmFOIHNOYU4gICAtPiAgLTENCisNCitkZGNvdDg4MiBjb21wYXJldG90YWwgLXNOYU4gLXNOYU4gICAtPiAgMA0KK2RkY290ODgzIGNvbXBhcmV0b3RhbCAtTmFOICAtc05hTiAgIC0+ICAtMQ0KK2RkY290ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxDQorZGRjb3Q4ODUgY29tcGFyZXRvdGFsIC0xMDAwIC1zTmFOICAgLT4gIDENCitkZGNvdDg4NiBjb21wYXJldG90YWwgLTEgICAgLXNOYU4gICAtPiAgMQ0KK2RkY290ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxDQorZGRjb3Q4ODggY29tcGFyZXRvdGFsICAwICAgIC1zTmFOICAgLT4gIDENCitkZGNvdDg4OSBjb21wYXJldG90YWwgIDEgICAgLXNOYU4gICAtPiAgMQ0KK2RkY290ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxDQorZGRjb3Q4OTEgY29tcGFyZXRvdGFsICBJbmYgIC1zTmFOICAgLT4gIDENCitkZGNvdDg5MiBjb21wYXJldG90YWwgIE5hTiAgLXNOYU4gICAtPiAgMQ0KK2RkY290ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxDQorDQorLS0gTmFOcyB3aXRoIHBheWxvYWQNCitkZGNvdDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxDQorZGRjb3Q5NjEgY29tcGFyZXRvdGFsICBOYU44ICA5OTkgICAtPiAgMQ0KK2RkY290OTYyIGNvbXBhcmV0b3RhbCAgTmFONzcgSW5mICAgLT4gIDENCitkZGNvdDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQ0KK2RkY290OTY0IGNvbXBhcmV0b3RhbCAtSW5mICAtTmFONCAgLT4gIDENCitkZGNvdDk2NSBjb21wYXJldG90YWwgLTk5OSAgLU5hTjMzIC0+ICAxDQorZGRjb3Q5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTENCisNCitkZGNvdDk3MCBjb21wYXJldG90YWwgLU5hTjQxIC1OYU40MiAtPiAxDQorZGRjb3Q5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQ0KK2RkY290OTcyIGNvbXBhcmV0b3RhbCAtTmFONDEgK05hTjQyIC0+IC0xDQorZGRjb3Q5NzMgY29tcGFyZXRvdGFsICtOYU40MSArTmFONDIgLT4gLTENCitkZGNvdDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQ0KK2RkY290OTc1IGNvbXBhcmV0b3RhbCArTmFONDIgLU5hTjAxIC0+ICAxDQorZGRjb3Q5NzYgY29tcGFyZXRvdGFsIC1OYU40MiArTmFOMDEgLT4gLTENCitkZGNvdDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQ0KKw0KK2RkY290OTgwIGNvbXBhcmV0b3RhbCAtc05hTjc3MSAtc05hTjc3MiAtPiAxDQorZGRjb3Q5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDENCitkZGNvdDk4MiBjb21wYXJldG90YWwgLXNOYU43NzEgK3NOYU43NzIgLT4gLTENCitkZGNvdDk4MyBjb21wYXJldG90YWwgK3NOYU43NzEgK3NOYU43NzIgLT4gLTENCitkZGNvdDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTENCitkZGNvdDk4NSBjb21wYXJldG90YWwgK3NOYU43NzIgLXNOYU43NzEgLT4gIDENCitkZGNvdDk4NiBjb21wYXJldG90YWwgLXNOYU43NzIgK3NOYU43NzEgLT4gLTENCitkZGNvdDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDENCisNCitkZGNvdDk5MSBjb21wYXJldG90YWwgLXNOYU45OSAtSW5mICAgIC0+IC0xDQorZGRjb3Q5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQ0KK2RkY290OTkzIGNvbXBhcmV0b3RhbCAgc05hTjk3ICBOYU4gICAgLT4gLTENCitkZGNvdDk5NCBjb21wYXJldG90YWwgIHNOYU4xNiBzTmFOOTQgIC0+IC0xDQorZGRjb3Q5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQ0KK2RkY290OTk2IGNvbXBhcmV0b3RhbCAtSW5mICAgIHNOYU45MiAgLT4gLTENCitkZGNvdDk5NyBjb21wYXJldG90YWwgIDA4OCAgICBzTmFOODEgIC0+IC0xDQorZGRjb3Q5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQ0KK2RkY290OTk5IGNvbXBhcmV0b3RhbCAgTmFOICAgLXNOYU44OSAgLT4gIDENCisNCistLSBzcHJlYWQgemVyb3MNCitkZGNvdDExMTAgY29tcGFyZXRvdGFsICAgMEUtMzgzICAwICAgICAgIC0+IC0xDQorZGRjb3QxMTExIGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAtMCAgICAgICAtPiAgMQ0KK2RkY290MTExMiBjb21wYXJldG90YWwgIC0wRS0zODMgIDAgICAgICAgLT4gLTENCitkZGNvdDExMTMgY29tcGFyZXRvdGFsICAtMEUtMzgzIC0wICAgICAgIC0+ICAxDQorZGRjb3QxMTE0IGNvbXBhcmV0b3RhbCAgIDBFLTM4MyAgMEUrMzg0ICAtPiAtMQ0KK2RkY290MTExNSBjb21wYXJldG90YWwgICAwRS0zODMgLTBFKzM4NCAgLT4gIDENCitkZGNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtMzgzICAwRSszODQgIC0+IC0xDQorZGRjb3QxMTE3IGNvbXBhcmV0b3RhbCAgLTBFLTM4MyAtMEUrMzg0ICAtPiAgMQ0KK2RkY290MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzM4NCAgLT4gLTENCitkZGNvdDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSszODQgIC0+ICAxDQorZGRjb3QxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrMzg0ICAtPiAtMQ0KK2RkY290MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzM4NCAgLT4gIDENCisNCitkZGNvdDExMzAgY29tcGFyZXRvdGFsICAgMEUrMzg0ICAwICAgICAgIC0+ICAxDQorZGRjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAtMCAgICAgICAtPiAgMQ0KK2RkY290MTEzMiBjb21wYXJldG90YWwgIC0wRSszODQgIDAgICAgICAgLT4gLTENCitkZGNvdDExMzMgY29tcGFyZXRvdGFsICAtMEUrMzg0IC0wICAgICAgIC0+IC0xDQorZGRjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzM4NCAgMEUtMzgzICAtPiAgMQ0KK2RkY290MTEzNSBjb21wYXJldG90YWwgICAwRSszODQgLTBFLTM4MyAgLT4gIDENCitkZGNvdDExMzYgY29tcGFyZXRvdGFsICAtMEUrMzg0ICAwRS0zODMgIC0+IC0xDQorZGRjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzM4NCAtMEUtMzgzICAtPiAtMQ0KK2RkY290MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTM4MyAgLT4gIDENCitkZGNvdDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS0zODMgIC0+ICAxDQorZGRjb3QxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtMzgzICAtPiAtMQ0KK2RkY290MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTM4MyAgLT4gLTENCisNCistLSBOdWxsIHRlc3RzDQorZGRjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGNvdDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKaW5kZXggMDg3YTA5Mi4uZjE2NTM3YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZENvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90Ci0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocwotLS0gdGhhbiBjb21wYXJlLgotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZGRjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCi1kZGN0bTAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKLWRkY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQotZGRjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCi1kZGN0bTAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKLWRkY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQotZGRjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCi1kZGN0bTAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKLWRkY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAotZGRjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCi1kZGN0bTAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKLWRkY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQotZGRjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCi1kZGN0bTAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKLWRkY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQotZGRjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCi1kZGN0bTAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKLWRkY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQotZGRjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCi1kZGN0bTAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKLWRkY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAotZGRjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCi1kZGN0bTAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKLWRkY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQotZGRjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCi0KLWRkY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCi1kZGN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQotZGRjdG0wMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKLWRkY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCi1kZGN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAotZGRjdG0wMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKLWRkY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCi1kZGN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQotZGRjdG0wMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKLWRkY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCi1kZGN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQotZGRjdG0wNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKLWRkY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCi1kZGN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQotZGRjdG0wNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKLWRkY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCi1kZGN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAotZGRjdG0wNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKLWRkY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCi1kZGN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQotZGRjdG0wNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKLWRkY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCi1kZGN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQotZGRjdG0wNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKLWRkY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCi0KLWRkY3RtMDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKLWRkY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKLWRkY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKLWRkY3RtMDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKLWRkY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKLWRkY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKLWRkY3RtMDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKLWRkY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKLWRkY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKLWRkY3RtMDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKLWRkY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKLWRkY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKLWRkY3RtMDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKLWRkY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKLWRkY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKLWRkY3RtMDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKLWRkY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKLWRkY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKLWRkY3RtMDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKLWRkY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKLWRkY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKLWRkY3RtMDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKLWRkY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKLWRkY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKLWRkY3RtMDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1kZGN0bTA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAgLT4gICAwCi1kZGN0bTA5MSBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSszODQgOS45OTk5OTk5OUUrMzg0ICAgLT4gICAwCi1kZGN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwCi1kZGN0bTA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwCi0KLS0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcwotLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbAotZGRjdG0xMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3LjAgICAgIC0+ICAgMAotZGRjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQotZGRjdG0xMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3LjAgICAgIC0+ICAgMQotZGRjdG0xMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICA3LjAgICAgIC0+ICAgMQotZGRjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMAotZGRjdG0xMDUgY29tcGFyZXRvdG1hZyAgIDAuN0UrMSA3ICAgICAgIC0+ICAgMAotZGRjdG0xMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3ICAgICAgIC0+ICAtMQotZGRjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQotZGRjdG0xMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3MEUtMSAgIC0+ICAgMAotZGRjdG0xMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAwLjdFKzEgIC0+ICAgMAotZGRjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQotCi1kZGN0bTEyMCBjb21wYXJldG90bWFnICAgOC4wICAgIDcuMCAgICAgLT4gICAxCi1kZGN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxCi1kZGN0bTEyMiBjb21wYXJldG90bWFnICAgOCAgICAgIDcuMCAgICAgLT4gICAxCi1kZGN0bTEyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIDcuMCAgICAgLT4gICAxCi1kZGN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxCi1kZGN0bTEyNSBjb21wYXJldG90bWFnICAgMC44RSsxIDcgICAgICAgLT4gICAxCi1kZGN0bTEyNiBjb21wYXJldG90bWFnICAgODBFLTEgIDcgICAgICAgLT4gICAxCi1kZGN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxCi1kZGN0bTEyOCBjb21wYXJldG90bWFnICAgOC4wICAgIDcwRS0xICAgLT4gICAxCi1kZGN0bTEyOSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuN0UrMSAgIC0+ICAgMQotZGRjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQotCi1kZGN0bTE0MCBjb21wYXJldG90bWFnICAgOC4wICAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xCi1kZGN0bTE0MiBjb21wYXJldG90bWFnICAgOCAgICAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTE0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTE0NSBjb21wYXJldG90bWFnICAgMC44RSsxIDkgICAgICAgLT4gIC0xCi1kZGN0bTE0NiBjb21wYXJldG90bWFnICAgODBFLTEgIDkgICAgICAgLT4gIC0xCi1kZGN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xCi1kZGN0bTE0OCBjb21wYXJldG90bWFnICAgOC4wICAgIDkwRS0xICAgLT4gIC0xCi1kZGN0bTE0OSBjb21wYXJldG90bWFnICAgOCAgICAgIDAuOUUrMSAgLT4gIC0xCi1kZGN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KLWRkY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDAKLWRkY3RtMjAxIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNyAgICAgICAtPiAgLTEKLWRkY3RtMjAyIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNy4wICAgICAtPiAgIDEKLWRkY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDEKLWRkY3RtMjA0IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNy4wICAgICAtPiAgIDAKLWRkY3RtMjA1IGNvbXBhcmV0b3RtYWcgIC0wLjdFKzEgNyAgICAgICAtPiAgIDAKLWRkY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTEKLWRkY3RtMjA3IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgN0UrMCAgICAtPiAgLTEKLWRkY3RtMjA4IGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNzBFLTEgICAtPiAgIDAKLWRkY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDAKLWRkY3RtMjEwIGNvbXBhcmV0b3RtYWcgIC03ICAgICAgNzBFLTEgICAtPiAgIDEKLQotZGRjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQotZGRjdG0yMjEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3ICAgICAgIC0+ICAgMQotZGRjdG0yMjIgY29tcGFyZXRvdG1hZyAgLTggICAgICA3LjAgICAgIC0+ICAgMQotZGRjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQotZGRjdG0yMjQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3LjAgICAgIC0+ICAgMQotZGRjdG0yMjUgY29tcGFyZXRvdG1hZyAgLTAuOEUrMSA3ICAgICAgIC0+ICAgMQotZGRjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQotZGRjdG0yMjcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3RSswICAgIC0+ICAgMQotZGRjdG0yMjggY29tcGFyZXRvdG1hZyAgLTguMCAgICA3MEUtMSAgIC0+ICAgMQotZGRjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQotZGRjdG0yMzAgY29tcGFyZXRvdG1hZyAgLTggICAgICA3MEUtMSAgIC0+ICAgMQotCi1kZGN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTI0MSBjb21wYXJldG90bWFnICAtOC4wICAgIDkgICAgICAgLT4gIC0xCi1kZGN0bTI0MiBjb21wYXJldG90bWFnICAtOCAgICAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTI0NCBjb21wYXJldG90bWFnICAtODBFLTEgIDkuMCAgICAgLT4gIC0xCi1kZGN0bTI0NSBjb21wYXJldG90bWFnICAtMC44RSsxIDkgICAgICAgLT4gIC0xCi1kZGN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xCi1kZGN0bTI0NyBjb21wYXJldG90bWFnICAtOC4wICAgIDlFKzAgICAgLT4gIC0xCi1kZGN0bTI0OCBjb21wYXJldG90bWFnICAtOC4wICAgIDkwRS0xICAgLT4gIC0xCi1kZGN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xCi1kZGN0bTI1MCBjb21wYXJldG90bWFnICAtOCAgICAgIDkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KLWRkY3RtMzAwIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcuMCAgICAgLT4gICAwCi1kZGN0bTMwMSBjb21wYXJldG90bWFnICAgNy4wICAgIC03ICAgICAgIC0+ICAtMQotZGRjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDEKLWRkY3RtMzAzIGNvbXBhcmV0b3RtYWcgICA3RSswICAgLTcuMCAgICAgLT4gICAxCi1kZGN0bTMwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIC03LjAgICAgIC0+ICAgMAotZGRjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDAKLWRkY3RtMzA2IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcgICAgICAgLT4gIC0xCi1kZGN0bTMwNyBjb21wYXJldG90bWFnICAgNy4wICAgIC03RSswICAgIC0+ICAtMQotZGRjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDAKLWRkY3RtMzA5IGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLS43RSsxICAgLT4gICAwCi1kZGN0bTMxMCBjb21wYXJldG90bWFnICAgNyAgICAgIC03MEUtMSAgIC0+ICAgMQotCi1kZGN0bTMyMCBjb21wYXJldG90bWFnICAgOC4wICAgIC03LjAgICAgIC0+ICAgMQotZGRjdG0zMjEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNyAgICAgICAtPiAgIDEKLWRkY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxCi1kZGN0bTMyMyBjb21wYXJldG90bWFnICAgOEUrMCAgIC03LjAgICAgIC0+ICAgMQotZGRjdG0zMjQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNy4wICAgICAtPiAgIDEKLWRkY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxCi1kZGN0bTMyNiBjb21wYXJldG90bWFnICAgODBFLTEgIC03ICAgICAgIC0+ICAgMQotZGRjdG0zMjcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtN0UrMCAgICAtPiAgIDEKLWRkY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxCi1kZGN0bTMyOSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uN0UrMSAgIC0+ICAgMQotZGRjdG0zMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNzBFLTEgICAtPiAgIDEKLQotZGRjdG0zNDAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOS4wICAgICAtPiAgLTEKLWRkY3RtMzQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkgICAgICAgLT4gIC0xCi1kZGN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQotZGRjdG0zNDMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtOS4wICAgICAtPiAgLTEKLWRkY3RtMzQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkuMCAgICAgLT4gIC0xCi1kZGN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQotZGRjdG0zNDYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOSAgICAgICAtPiAgLTEKLWRkY3RtMzQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTlFKzAgICAgLT4gIC0xCi1kZGN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQotZGRjdG0zNDkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjlFKzEgICAtPiAgLTEKLWRkY3RtMzUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkwRS0xICAgLT4gIC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KLWRkY3RtNDAwIGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03LjAgICAgIC0+ICAgMAotZGRjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xCi1kZGN0bTQwMiBjb21wYXJldG90bWFnICAgLTcgICAgICAtNy4wICAgICAtPiAgIDEKLWRkY3RtNDAzIGNvbXBhcmV0b3RtYWcgICAtN0UrMCAgIC03LjAgICAgIC0+ICAgMQotZGRjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwCi1kZGN0bTQwNSBjb21wYXJldG90bWFnICAgLS43RSsxICAtNyAgICAgICAtPiAgIDAKLWRkY3RtNDA2IGNvbXBhcmV0b3RtYWcgICAtNzBFLTEgIC03ICAgICAgIC0+ICAtMQotZGRjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xCi1kZGN0bTQwOCBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNzBFLTEgICAtPiAgIDAKLWRkY3RtNDA5IGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC0uN0UrMSAgIC0+ICAgMAotZGRjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxCi0KLWRkY3RtNDIwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03LjAgICAgIC0+ICAgMQotZGRjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxCi1kZGN0bTQyMiBjb21wYXJldG90bWFnICAgLTggICAgICAtNy4wICAgICAtPiAgIDEKLWRkY3RtNDIzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC03LjAgICAgIC0+ICAgMQotZGRjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxCi1kZGN0bTQyNSBjb21wYXJldG90bWFnICAgLS44RSsxICAtNyAgICAgICAtPiAgIDEKLWRkY3RtNDI2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC03ICAgICAgIC0+ICAgMQotZGRjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxCi1kZGN0bTQyOCBjb21wYXJldG90bWFnICAgLTguMCAgICAtNzBFLTEgICAtPiAgIDEKLWRkY3RtNDI5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uN0UrMSAgIC0+ICAgMQotZGRjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxCi0KLWRkY3RtNDQwIGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05LjAgICAgIC0+ICAtMQotZGRjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xCi1kZGN0bTQ0MiBjb21wYXJldG90bWFnICAgLTggICAgICAtOS4wICAgICAtPiAgLTEKLWRkY3RtNDQzIGNvbXBhcmV0b3RtYWcgICAtOEUrMCAgIC05LjAgICAgIC0+ICAtMQotZGRjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xCi1kZGN0bTQ0NSBjb21wYXJldG90bWFnICAgLS44RSsxICAtOSAgICAgICAtPiAgLTEKLWRkY3RtNDQ2IGNvbXBhcmV0b3RtYWcgICAtODBFLTEgIC05ICAgICAgIC0+ICAtMQotZGRjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xCi1kZGN0bTQ0OCBjb21wYXJldG90bWFnICAgLTguMCAgICAtOTBFLTEgICAtPiAgLTEKLWRkY3RtNDQ5IGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC0uOUUrMSAgIC0+ICAtMQotZGRjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kZGN0bTQ3MyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1kZGN0bTQ3NCBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKLWRkY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1kZGN0bTQ3NiBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCi1kZGN0bTQ3NyBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWRkY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCi1kZGN0bTQ3OSBjb21wYXJldG90bWFnIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1kZGN0bTQ4MCBjb21wYXJldG90bWFnIDEyMy40NTYwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKLWRkY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xCi1kZGN0bTQ4MiBjb21wYXJldG90bWFnIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xCi1kZGN0bTQ4MyBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTZFLTg5ICAtPiAgIDAKLWRkY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDEKLWRkY3RtNDg4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgIC0+ICAgMQotZGRjdG00ODkgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDBFKzg5ICAtPiAgIDEKLWRkY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDEKLWRkY3RtNDkxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgIC0+ICAgMQotZGRjdG00OTIgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDBFLTg5ICAtPiAgIDEKLWRkY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDEKLWRkY3RtNDk0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgIC0+ICAgMQotZGRjdG00OTUgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDBFKzg5ICAtPiAgIDEKLWRkY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDEKLWRkY3RtNDk3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgIC0+ICAgMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kZGN0bTQ5OCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE3ICAgICAtPiAgIDEKLWRkY3RtNDk5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTYgICAgIC0+ICAgMQotZGRjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxCi1kZGN0bTUwMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE0ICAgICAtPiAgIDEKLWRkY3RtNTAyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTMgICAgIC0+ICAgMQotZGRjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxCi1kZGN0bTUwNCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTExICAgICAtPiAgIDEKLWRkY3RtNTA1IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTAgICAgIC0+ICAgMQotZGRjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxCi1kZGN0bTUwNyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTggICAgICAtPiAgIDEKLWRkY3RtNTA4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNyAgICAgIC0+ICAgMQotZGRjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxCi1kZGN0bTUxMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTUgICAgICAtPiAgIDEKLWRkY3RtNTExIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNCAgICAgIC0+ICAgMQotZGRjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxCi1kZGN0bTUxMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTIgICAgICAtPiAgIDEKLWRkY3RtNTE0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMSAgICAgIC0+ICAgMQotZGRjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwCi1kZGN0bTUxNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEgICAgICAtPiAgLTEKLWRkY3RtNTE3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMiAgICAgIC0+ICAtMQotZGRjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xCi1kZGN0bTUxOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzQgICAgICAtPiAgLTEKLWRkY3RtNTIxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNSAgICAgIC0+ICAtMQotZGRjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xCi1kZGN0bTUyMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzcgICAgICAtPiAgLTEKLWRkY3RtNTI0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrOCAgICAgIC0+ICAtMQotZGRjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xCi1kZGN0bTUyNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEwICAgICAtPiAgLTEKLWRkY3RtNTI3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTEgICAgIC0+ICAtMQotZGRjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xCi1kZGN0bTUyOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEzICAgICAtPiAgLTEKLWRkY3RtNTMwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTQgICAgIC0+ICAtMQotZGRjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xCi1kZGN0bTUzMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE2ICAgICAtPiAgLTEKLWRkY3RtNTMzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTcgICAgIC0+ICAtMQotLS0gTFIgc3dhcAotZGRjdG01MzggY29tcGFyZXRvdG1hZyAgICAxRS0xNyAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTUzOSBjb21wYXJldG90bWFnICAgIDFFLTE2ICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQotZGRjdG01NDEgY29tcGFyZXRvdG1hZyAgICAxRS0xNCAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTU0MiBjb21wYXJldG90bWFnICAgIDFFLTEzICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQotZGRjdG01NDQgY29tcGFyZXRvdG1hZyAgICAxRS0xMSAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTU0NSBjb21wYXJldG90bWFnICAgIDFFLTEwICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQotZGRjdG01NDcgY29tcGFyZXRvdG1hZyAgICAxRS04ICAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTU0OCBjb21wYXJldG90bWFnICAgIDFFLTcgICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQotZGRjdG01NTAgY29tcGFyZXRvdG1hZyAgICAxRS01ICAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTU1MSBjb21wYXJldG90bWFnICAgIDFFLTQgICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQotZGRjdG01NTMgY29tcGFyZXRvdG1hZyAgICAxRS0yICAgMSAgICAgICAgLT4gIC0xCi1kZGN0bTU1NCBjb21wYXJldG90bWFnICAgIDFFLTEgICAxICAgICAgICAtPiAgLTEKLWRkY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMAotZGRjdG01NTYgY29tcGFyZXRvdG1hZyAgICAxRSsxICAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU1NyBjb21wYXJldG90bWFnICAgIDFFKzIgICAxICAgICAgICAtPiAgIDEKLWRkY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQotZGRjdG01NTkgY29tcGFyZXRvdG1hZyAgICAxRSs0ICAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU2MSBjb21wYXJldG90bWFnICAgIDFFKzUgICAxICAgICAgICAtPiAgIDEKLWRkY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQotZGRjdG01NjMgY29tcGFyZXRvdG1hZyAgICAxRSs3ICAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU2NCBjb21wYXJldG90bWFnICAgIDFFKzggICAxICAgICAgICAtPiAgIDEKLWRkY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQotZGRjdG01NjYgY29tcGFyZXRvdG1hZyAgICAxRSsxMCAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU2NyBjb21wYXJldG90bWFnICAgIDFFKzExICAxICAgICAgICAtPiAgIDEKLWRkY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQotZGRjdG01NjkgY29tcGFyZXRvdG1hZyAgICAxRSsxMyAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU3MCBjb21wYXJldG90bWFnICAgIDFFKzE0ICAxICAgICAgICAtPiAgIDEKLWRkY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQotZGRjdG01NzIgY29tcGFyZXRvdG1hZyAgICAxRSsxNiAgMSAgICAgICAgLT4gICAxCi1kZGN0bTU3MyBjb21wYXJldG90bWFnICAgIDFFKzE3ICAxICAgICAgICAtPiAgIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZGRjdG01NzggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgICAtPiAgIDEKLWRkY3RtNTc5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAgLT4gICAxCi1kZGN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQotZGRjdG01ODEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgICAtPiAgIDEKLWRkY3RtNTgyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAgLT4gICAxCi1kZGN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQotZGRjdG01ODQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgICAtPiAgIDEKLWRkY3RtNTg1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAgLT4gICAxCi1kZGN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQotZGRjdG01ODcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgICAtPiAgIDEKLWRkY3RtNTg4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAgLT4gICAxCi1kZGN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQotZGRjdG01OTAgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgICAtPiAgLTEKLWRkY3RtNTkxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAgLT4gIC0xCi1kZGN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQotZGRjdG01OTMgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgICAtPiAgLTEKLWRkY3RtNTk0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAgLT4gIC0xCi1kZGN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQotZGRjdG01OTYgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgICAtPiAgLTEKLWRkY3RtNTk3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAgLT4gIC0xCi1kZGN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQotZGRjdG01OTkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgICAtPiAgLTEKLQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKLWRkY3RtNjAwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQotZGRjdG02MDEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjAzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQotZGRjdG02MDQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjA2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgIC0+ICAtMQotZGRjdG02MDcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjA5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgIC0+ICAtMQotZGRjdG02MTAgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAgLT4gICAxCi1kZGN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDEKLWRkY3RtNjEyIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgIC0+ICAgMQotZGRjdG02MTMgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAgLT4gICAxCi1kZGN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDEKLWRkY3RtNjE1IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgIC0+ICAgMQotZGRjdG02MTYgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAgLT4gICAxCi1kZGN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDEKLWRkY3RtNjE4IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgIC0+ICAgMQotZGRjdG02MTkgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAgLT4gICAxCi1kZGN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjIxIGNvbXBhcmV0b3RtYWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQotZGRjdG02MjIgY29tcGFyZXRvdG1hZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjI0IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgIC0+ICAtMQotZGRjdG02MjUgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjI3IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgIC0+ICAtMQotZGRjdG02MjggY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAgLT4gIC0xCi1kZGN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTEKLWRkY3RtNjMwIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgIC0+ICAgMQotZGRjdG02MzEgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAgLT4gICAxCi1kZGN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDEKLWRkY3RtNjMzIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgIC0+ICAgMQotZGRjdG02MzQgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAgLT4gICAxCi1kZGN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDEKLWRkY3RtNjM2IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgIC0+ICAgMQotZGRjdG02MzcgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAgLT4gICAxCi1kZGN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDEKLWRkY3RtNjM5IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgIC0+ICAgMQotCi0tLSBleHRlbmRlZCB6ZXJvcwotZGRjdG02NDAgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAgICAgLT4gICAwCi1kZGN0bTY0MSBjb21wYXJldG90bWFnICAgMCAgICAtMCAgICAtPiAgIDAKLWRkY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQotZGRjdG02NDMgY29tcGFyZXRvdG1hZyAgIDAgICAgIDAuMCAgLT4gICAxCi1kZGN0bTY0NCBjb21wYXJldG90bWFnICAtMCAgICAgMCAgICAtPiAgIDAKLWRkY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMAotZGRjdG02NDYgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAuMCAgLT4gICAxCi1kZGN0bTY0NyBjb21wYXJldG90bWFnICAtMCAgICAgMC4wICAtPiAgIDEKLWRkY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQotZGRjdG02NDkgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTAgICAgLT4gIC0xCi1kZGN0bTY1MCBjb21wYXJldG90bWFnICAgMC4wICAtMC4wICAtPiAgIDAKLWRkY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMAotZGRjdG02NTIgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAgICAgLT4gIC0xCi1kZGN0bTY1MyBjb21wYXJldG90bWFnICAtMC4wICAtMCAgICAtPiAgLTEKLWRkY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMAotZGRjdG02NTUgY29tcGFyZXRvdG1hZyAgLTAuMCAgIDAuMCAgLT4gICAwCi0KLWRkY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQotZGRjdG02NTcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDAuMCAgLT4gICAxCi1kZGN0bTY1OCBjb21wYXJldG90bWFnICAgMEUxICAgMC4wICAtPiAgIDEKLWRkY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQotZGRjdG02NjAgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAgICAgLT4gICAxCi1kZGN0bTY2MSBjb21wYXJldG90bWFnICAtMEUyICAgMCAgICAtPiAgIDEKLWRkY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQotZGRjdG02NjMgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAgICAgLT4gICAxCi1kZGN0bTY2NCBjb21wYXJldG90bWFnICAtMEUxICAtMEUxICAtPiAgIDAKLWRkY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQotZGRjdG02NjYgY29tcGFyZXRvdG1hZyAgIDBFMSAgLTBFMSAgLT4gICAwCi1kZGN0bTY2NyBjb21wYXJldG90bWFnICAgMEUyICAtMEUxICAtPiAgIDEKLWRkY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQotZGRjdG02NjkgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMiAgLT4gICAwCi1kZGN0bTY3MCBjb21wYXJldG90bWFnICAgMEUxICAtMEUyICAtPiAgLTEKLWRkY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMAotZGRjdG02NzIgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDBFMSAgLT4gICAwCi1kZGN0bTY3MyBjb21wYXJldG90bWFnICAtMEUyICAgMEUxICAtPiAgIDEKLWRkY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMAotZGRjdG02NzUgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDBFMSAgLT4gICAxCi1kZGN0bTY3NiBjb21wYXJldG90bWFnICAtMEUxICAgMEUyICAtPiAgLTEKLWRkY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMAotZGRjdG02NzggY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMiAgLT4gIC0xCi1kZGN0bTY3OSBjb21wYXJldG90bWFnICAgMEUyICAgMEUyICAtPiAgIDAKLQotLS0gdHJhaWxpbmcgemVyb3M7IHVuaXQteQotZGRjdG02ODAgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyICAgICAgICAgICAgLT4gICAwCi1kZGN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDEKLWRkY3RtNjgyIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMCAgICAgICAgIC0+ICAgMQotZGRjdG02ODMgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMCAgICAgICAgLT4gICAxCi1kZGN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDEKLWRkY3RtNjg1IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMCAgICAgIC0+ICAgMQotZGRjdG02ODYgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMCAgICAgLT4gICAxCi1kZGN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDEKLWRkY3RtNjg4IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwMCAgIC0+ICAgMQotZGRjdG02ODkgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAgLT4gICAxCi1kZGN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDAKLWRkY3RtNjkxIGNvbXBhcmV0b3RtYWcgICAxMi4wICAgICAgICAgICAgMTIgIC0+ICAtMQotZGRjdG02OTIgY29tcGFyZXRvdG1hZyAgIDEyLjAwICAgICAgICAgICAxMiAgLT4gIC0xCi1kZGN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTEKLWRkY3RtNjk0IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwICAgICAgICAgMTIgIC0+ICAtMQotZGRjdG02OTUgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwICAgICAgICAxMiAgLT4gIC0xCi1kZGN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTEKLWRkY3RtNjk3IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwICAgICAgMTIgIC0+ICAtMQotZGRjdG02OTggY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwICAgICAxMiAgLT4gIC0xCi1kZGN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTEKLQotLS0gb2xkIGxvbmcgb3BlcmFuZCBjaGVja3MKLWRkY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQotZGRjdG03MDIgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAwICAgLT4gIC0xCi1kZGN0bTcwMyBjb21wYXJldG90bWFnIDEyMzQ1Njc4MDAgICAxICAtPiAgIDEKLWRkY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQotZGRjdG03MDUgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkwICAgMSAgLT4gICAxCi1kZGN0bTcwNiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MCAgICAtPiAgLTEKLWRkY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQotZGRjdG03MDggY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gIC0xCi1kZGN0bTcwOSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAxICAxICAtPiAgIDEKLWRkY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQotZGRjdG03MTEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODk2ICAgMSAgLT4gICAxCi1kZGN0bTcxMiBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAgLTEKLWRkY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQotZGRjdG03MTQgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkxICAgLT4gIC0xCi1kZGN0bTcxNSBjb21wYXJldG90bWFnIC0xMjM0NTY3ODkwMSAxICAtPiAgIDEKLWRkY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQotZGRjdG03MTcgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gICAxCi1kZGN0bTcxOCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAgLTEKLQotLS0gb2xkIHJlc2lkdWUgY2FzZXMKLWRkY3RtNzQwIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTk5OSAgIC0+ICAgMQotZGRjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxCi1kZGN0bTc0MiBjb21wYXJldG90bWFnICAxICAwLjk5OTk5ICAgICAtPiAgIDEKLWRkY3RtNzQzIGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMCAgICAgIC0+ICAgMQotZGRjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xCi1kZGN0bTc0NSBjb21wYXJldG90bWFnICAxICAxLjAwMDAwMSAgICAtPiAgLTEKLWRkY3RtNzQ2IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAwMSAgIC0+ICAtMQotZGRjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xCi1kZGN0bTc1MSBjb21wYXJldG90bWFnICAwLjk5OTk5OSAgIDEgICAtPiAgLTEKLWRkY3RtNzUyIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTkgICAgMSAgIC0+ICAtMQotZGRjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xCi1kZGN0bTc1NCBjb21wYXJldG90bWFnICAxLjAwMDAxICAgIDEgICAtPiAgIDEKLWRkY3RtNzU1IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDAxICAgMSAgIC0+ICAgMQotZGRjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxCi0KLS0tIFNwZWNpYWxzCi1kZGN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAotZGRjdG03ODEgY29tcGFyZXRvdG1hZyAgSW5mICAtMTAwMCAgLT4gIDEKLWRkY3RtNzgyIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEgICAgIC0+ICAxCi1kZGN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQotZGRjdG03ODQgY29tcGFyZXRvdG1hZyAgSW5mICAgMCAgICAgLT4gIDEKLWRkY3RtNzg1IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEgICAgIC0+ICAxCi1kZGN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQotZGRjdG03ODcgY29tcGFyZXRvdG1hZyAgSW5mICAgSW5mICAgLT4gIDAKLWRkY3RtNzg4IGNvbXBhcmV0b3RtYWcgLTEwMDAgIEluZiAgIC0+IC0xCi1kZGN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAotZGRjdG03OTAgY29tcGFyZXRvdG1hZyAtMSAgICAgSW5mICAgLT4gLTEKLWRkY3RtNzkxIGNvbXBhcmV0b3RtYWcgLTAgICAgIEluZiAgIC0+IC0xCi1kZGN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQotZGRjdG03OTMgY29tcGFyZXRvdG1hZyAgMSAgICAgSW5mICAgLT4gLTEKLWRkY3RtNzk0IGNvbXBhcmV0b3RtYWcgIDEwMDAgIEluZiAgIC0+IC0xCi1kZGN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAotCi1kZGN0bTgwMCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMAotZGRjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDEKLWRkY3RtODAyIGNvbXBhcmV0b3RtYWcgLUluZiAgLTEgICAgIC0+ICAxCi1kZGN0bTgwMyBjb21wYXJldG90bWFnIC1JbmYgIC0wICAgICAtPiAgMQotZGRjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDEKLWRkY3RtODA1IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEgICAgIC0+ICAxCi1kZGN0bTgwNiBjb21wYXJldG90bWFnIC1JbmYgICAxMDAwICAtPiAgMQotZGRjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDAKLWRkY3RtODA4IGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCi1kZGN0bTgwOSBjb21wYXJldG90bWFnIC0xMDAwIC1JbmYgICAtPiAtMQotZGRjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTEKLWRkY3RtODExIGNvbXBhcmV0b3RtYWcgLTAgICAgLUluZiAgIC0+IC0xCi1kZGN0bTgxMiBjb21wYXJldG90bWFnICAwICAgIC1JbmYgICAtPiAtMQotZGRjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTEKLWRkY3RtODE0IGNvbXBhcmV0b3RtYWcgIDEwMDAgLUluZiAgIC0+IC0xCi1kZGN0bTgxNSBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMAotCi1kZGN0bTgyMSBjb21wYXJldG90bWFnICBOYU4gLUluZiAgICAtPiAgMQotZGRjdG04MjIgY29tcGFyZXRvdG1hZyAgTmFOIC0xMDAwICAgLT4gIDEKLWRkY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxCi1kZGN0bTgyNCBjb21wYXJldG90bWFnICBOYU4gLTAgICAgICAtPiAgMQotZGRjdG04MjUgY29tcGFyZXRvdG1hZyAgTmFOICAwICAgICAgLT4gIDEKLWRkY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1kZGN0bTgyNyBjb21wYXJldG90bWFnICBOYU4gIDEwMDAgICAtPiAgMQotZGRjdG04MjggY29tcGFyZXRvdG1hZyAgTmFOICBJbmYgICAgLT4gIDEKLWRkY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwCi1kZGN0bTgzMCBjb21wYXJldG90bWFnIC1JbmYgIE5hTiAgICAtPiAgLTEKLWRkY3RtODMxIGNvbXBhcmV0b3RtYWcgLTEwMDAgTmFOICAgIC0+ICAtMQotZGRjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xCi1kZGN0bTgzMyBjb21wYXJldG90bWFnIC0wICAgIE5hTiAgICAtPiAgLTEKLWRkY3RtODM0IGNvbXBhcmV0b3RtYWcgIDAgICAgTmFOICAgIC0+ICAtMQotZGRjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xCi1kZGN0bTgzNiBjb21wYXJldG90bWFnICAxMDAwIE5hTiAgICAtPiAgLTEKLWRkY3RtODM3IGNvbXBhcmV0b3RtYWcgIEluZiAgTmFOICAgIC0+ICAtMQotZGRjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDAKLWRkY3RtODM5IGNvbXBhcmV0b3RtYWcgK05hTiAtTmFOICAgIC0+ICAwCi1kZGN0bTg0MCBjb21wYXJldG90bWFnIC1OYU4gK05hTiAgICAtPiAgMAotCi1kZGN0bTg0MSBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAtPiAgMAotZGRjdG04NDIgY29tcGFyZXRvdG1hZyAgc05hTiAtTmFOICAgLT4gIC0xCi1kZGN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQotZGRjdG04NDQgY29tcGFyZXRvdG1hZyAgc05hTiAtMTAwMCAgLT4gIDEKLWRkY3RtODQ1IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEgICAgIC0+ICAxCi1kZGN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQotZGRjdG04NDcgY29tcGFyZXRvdG1hZyAgc05hTiAgMCAgICAgLT4gIDEKLWRkY3RtODQ4IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEgICAgIC0+ICAxCi1kZGN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQotZGRjdG04NTAgY29tcGFyZXRvdG1hZyAgc05hTiAgTmFOICAgLT4gIC0xCi1kZGN0bTg1MSBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAotCi1kZGN0bTg1MiBjb21wYXJldG90bWFnIC1zTmFOIHNOYU4gICAtPiAgMAotZGRjdG04NTMgY29tcGFyZXRvdG1hZyAtTmFOICBzTmFOICAgLT4gIDEKLWRkY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQotZGRjdG04NTUgY29tcGFyZXRvdG1hZyAtMTAwMCBzTmFOICAgLT4gIC0xCi1kZGN0bTg1NiBjb21wYXJldG90bWFnIC0xICAgIHNOYU4gICAtPiAgLTEKLWRkY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQotZGRjdG04NTggY29tcGFyZXRvdG1hZyAgMCAgICBzTmFOICAgLT4gIC0xCi1kZGN0bTg1OSBjb21wYXJldG90bWFnICAxICAgIHNOYU4gICAtPiAgLTEKLWRkY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQotZGRjdG04NjEgY29tcGFyZXRvdG1hZyAgSW5mICBzTmFOICAgLT4gIC0xCi1kZGN0bTg2MiBjb21wYXJldG90bWFnICBOYU4gIHNOYU4gICAtPiAgMQotZGRjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDAKLQotZGRjdG04NzEgY29tcGFyZXRvdG1hZyAgLXNOYU4gLXNOYU4gIC0+ICAwCi1kZGN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xCi1kZGN0bTg3MyBjb21wYXJldG90bWFnICAtc05hTiAtSW5mICAgLT4gIDEKLWRkY3RtODc0IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0xMDAwICAtPiAgMQotZGRjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxCi1kZGN0bTg3NiBjb21wYXJldG90bWFnICAtc05hTiAtMCAgICAgLT4gIDEKLWRkY3RtODc3IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAwICAgICAtPiAgMQotZGRjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxCi1kZGN0bTg3OSBjb21wYXJldG90bWFnICAtc05hTiAgMTAwMCAgLT4gIDEKLWRkY3RtODgwIGNvbXBhcmV0b3RtYWcgIC1zTmFOICBOYU4gICAtPiAgLTEKLWRkY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMAotCi1kZGN0bTg4MiBjb21wYXJldG90bWFnIC1zTmFOIC1zTmFOICAgLT4gIDAKLWRkY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQotZGRjdG04ODQgY29tcGFyZXRvdG1hZyAtSW5mICAtc05hTiAgIC0+ICAtMQotZGRjdG04ODUgY29tcGFyZXRvdG1hZyAtMTAwMCAtc05hTiAgIC0+ICAtMQotZGRjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQotZGRjdG04ODcgY29tcGFyZXRvdG1hZyAtMCAgICAtc05hTiAgIC0+ICAtMQotZGRjdG04ODggY29tcGFyZXRvdG1hZyAgMCAgICAtc05hTiAgIC0+ICAtMQotZGRjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQotZGRjdG04OTAgY29tcGFyZXRvdG1hZyAgMTAwMCAtc05hTiAgIC0+ICAtMQotZGRjdG04OTEgY29tcGFyZXRvdG1hZyAgSW5mICAtc05hTiAgIC0+ICAtMQotZGRjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxCi1kZGN0bTg5MyBjb21wYXJldG90bWFnICBzTmFOIC1zTmFOICAgLT4gIDAKLQotLS0gTmFOcyB3aXRoIHBheWxvYWQKLWRkY3RtOTYwIGNvbXBhcmV0b3RtYWcgIE5hTjkgLUluZiAgIC0+ICAxCi1kZGN0bTk2MSBjb21wYXJldG90bWFnICBOYU44ICA5OTkgICAtPiAgMQotZGRjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDEKLWRkY3RtOTYzIGNvbXBhcmV0b3RtYWcgLU5hTjY3IE5hTjUgIC0+ICAxCi1kZGN0bTk2NCBjb21wYXJldG90bWFnIC1JbmYgIC1OYU40ICAtPiAgLTEKLWRkY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQotZGRjdG05NjYgY29tcGFyZXRvdG1hZyAgSW5mICAgTmFOMiAgLT4gIC0xCi0KLWRkY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQotZGRjdG05NzEgY29tcGFyZXRvdG1hZyArTmFONDEgLU5hTjQyIC0+IC0xCi1kZGN0bTk3MiBjb21wYXJldG90bWFnIC1OYU40MSArTmFONDIgLT4gLTEKLWRkY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQotZGRjdG05NzQgY29tcGFyZXRvdG1hZyAtTmFONDIgLU5hTjAxIC0+ICAxCi1kZGN0bTk3NSBjb21wYXJldG90bWFnICtOYU40MiAtTmFOMDEgLT4gIDEKLWRkY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQotZGRjdG05NzcgY29tcGFyZXRvdG1hZyArTmFONDIgK05hTjAxIC0+ICAxCi0KLWRkY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTEKLWRkY3RtOTgxIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgLXNOYU43NzIgLT4gLTEKLWRkY3RtOTgyIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgK3NOYU43NzIgLT4gLTEKLWRkY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTEKLWRkY3RtOTg0IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgLXNOYU43NzEgLT4gIDEKLWRkY3RtOTg1IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgLXNOYU43NzEgLT4gIDEKLWRkY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDEKLWRkY3RtOTg3IGNvbXBhcmV0b3RtYWcgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKLQotZGRjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDEKLWRkY3RtOTkyIGNvbXBhcmV0b3RtYWcgIHNOYU45OCAtMTEgICAgIC0+ICAxCi1kZGN0bTk5MyBjb21wYXJldG90bWFnICBzTmFOOTcgIE5hTiAgICAtPiAtMQotZGRjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTEKLWRkY3RtOTk1IGNvbXBhcmV0b3RtYWcgIE5hTjg1ICBzTmFOODMgIC0+ICAxCi1kZGN0bTk5NiBjb21wYXJldG90bWFnIC1JbmYgICAgc05hTjkyICAtPiAtMQotZGRjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTEKLWRkY3RtOTk4IGNvbXBhcmV0b3RtYWcgIEluZiAgICBzTmFOOTAgIC0+IC0xCi1kZGN0bTk5OSBjb21wYXJldG90bWFnICBOYU4gICAtc05hTjg5ICAtPiAgMQotCi0tLSBzcHJlYWQgemVyb3MKLWRkY3RtMTExMCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwICAgICAgICAtPiAgLTEKLWRkY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTEKLWRkY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwICAgICAgICAtPiAgLTEKLWRkY3RtMTExMyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wICAgICAgICAtPiAgLTEKLWRkY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTEKLWRkY3RtMTExNSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wRSszODQgICAtPiAgLTEKLWRkY3RtMTExNiBjb21wYXJldG90bWFnICAtMEUtMzgzICAwRSszODQgICAtPiAgLTEKLWRkY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTEKLWRkY3RtMTExOCBjb21wYXJldG90bWFnICAgMCAgICAgICAwRSszODQgICAtPiAgLTEKLWRkY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSszODQgICAtPiAgLTEKLWRkY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTEKLWRkY3RtMTEyMSBjb21wYXJldG90bWFnICAtMCAgICAgIC0wRSszODQgICAtPiAgLTEKLQotZGRjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQotZGRjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTAgICAgICAgIC0+ICAgMQotZGRjdG0xMTMyIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDAgICAgICAgIC0+ICAgMQotZGRjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQotZGRjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSszODQgLTBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTQwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFLTM4MyAgIC0+ICAgMQotZGRjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTM4MyAgIC0+ICAgMQotCi0tLSBOdWxsIHRlc3RzCi1kZGN0bTk5OTAgY29tcGFyZXRvdG1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRDb21wYXJlVG90YWxNYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlci0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KKy0tIHRoYW4gY29tcGFyZS4NCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZGRjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwDQorZGRjdG0wMDIgY29tcGFyZXRvdG1hZyAgLTIgIC0xICAgLT4gICAxDQorZGRjdG0wMDMgY29tcGFyZXRvdG1hZyAgLTIgICAwICAgLT4gICAxDQorZGRjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxDQorZGRjdG0wMDUgY29tcGFyZXRvdG1hZyAgLTIgICAyICAgLT4gICAwDQorZGRjdG0wMDYgY29tcGFyZXRvdG1hZyAgLTEgIC0yICAgLT4gIC0xDQorZGRjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwDQorZGRjdG0wMDggY29tcGFyZXRvdG1hZyAgLTEgICAwICAgLT4gICAxDQorZGRjdG0wMDkgY29tcGFyZXRvdG1hZyAgLTEgICAxICAgLT4gICAwDQorZGRjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xDQorZGRjdG0wMTEgY29tcGFyZXRvdG1hZyAgIDAgIC0yICAgLT4gIC0xDQorZGRjdG0wMTIgY29tcGFyZXRvdG1hZyAgIDAgIC0xICAgLT4gIC0xDQorZGRjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwDQorZGRjdG0wMTQgY29tcGFyZXRvdG1hZyAgIDAgICAxICAgLT4gIC0xDQorZGRjdG0wMTUgY29tcGFyZXRvdG1hZyAgIDAgICAyICAgLT4gIC0xDQorZGRjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xDQorZGRjdG0wMTcgY29tcGFyZXRvdG1hZyAgIDEgIC0xICAgLT4gICAwDQorZGRjdG0wMTggY29tcGFyZXRvdG1hZyAgIDEgICAwICAgLT4gICAxDQorZGRjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwDQorZGRjdG0wMjAgY29tcGFyZXRvdG1hZyAgIDEgICAyICAgLT4gIC0xDQorZGRjdG0wMjEgY29tcGFyZXRvdG1hZyAgIDIgIC0yICAgLT4gICAwDQorZGRjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxDQorZGRjdG0wMjMgY29tcGFyZXRvdG1hZyAgIDIgICAwICAgLT4gICAxDQorZGRjdG0wMjUgY29tcGFyZXRvdG1hZyAgIDIgICAxICAgLT4gICAxDQorZGRjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwDQorDQorZGRjdG0wMzEgY29tcGFyZXRvdG1hZyAgLTIwICAtMjAgICAtPiAgIDANCitkZGN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQ0KK2RkY3RtMDMzIGNvbXBhcmV0b3RtYWcgIC0yMCAgIDAwICAgLT4gICAxDQorZGRjdG0wMzQgY29tcGFyZXRvdG1hZyAgLTIwICAgMTAgICAtPiAgIDENCitkZGN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMA0KK2RkY3RtMDM2IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTIwICAgLT4gIC0xDQorZGRjdG0wMzcgY29tcGFyZXRvdG1hZyAgLTEwICAtMTAgICAtPiAgIDANCitkZGN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQ0KK2RkY3RtMDM5IGNvbXBhcmV0b3RtYWcgIC0xMCAgIDEwICAgLT4gICAwDQorZGRjdG0wNDAgY29tcGFyZXRvdG1hZyAgLTEwICAgMjAgICAtPiAgLTENCitkZGN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQ0KK2RkY3RtMDQyIGNvbXBhcmV0b3RtYWcgICAwMCAgLTEwICAgLT4gIC0xDQorZGRjdG0wNDMgY29tcGFyZXRvdG1hZyAgIDAwICAgMDAgICAtPiAgIDANCitkZGN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQ0KK2RkY3RtMDQ1IGNvbXBhcmV0b3RtYWcgICAwMCAgIDIwICAgLT4gIC0xDQorZGRjdG0wNDYgY29tcGFyZXRvdG1hZyAgIDEwICAtMjAgICAtPiAgLTENCitkZGN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMA0KK2RkY3RtMDQ4IGNvbXBhcmV0b3RtYWcgICAxMCAgIDAwICAgLT4gICAxDQorZGRjdG0wNDkgY29tcGFyZXRvdG1hZyAgIDEwICAgMTAgICAtPiAgIDANCitkZGN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQ0KK2RkY3RtMDUxIGNvbXBhcmV0b3RtYWcgICAyMCAgLTIwICAgLT4gICAwDQorZGRjdG0wNTIgY29tcGFyZXRvdG1hZyAgIDIwICAtMTAgICAtPiAgIDENCitkZGN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQ0KK2RkY3RtMDU1IGNvbXBhcmV0b3RtYWcgICAyMCAgIDEwICAgLT4gICAxDQorZGRjdG0wNTYgY29tcGFyZXRvdG1hZyAgIDIwICAgMjAgICAtPiAgIDANCisNCitkZGN0bTA2MSBjb21wYXJldG90bWFnICAtMi4wICAtMi4wICAgLT4gICAwDQorZGRjdG0wNjIgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTEuMCAgIC0+ICAgMQ0KK2RkY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDENCitkZGN0bTA2NCBjb21wYXJldG90bWFnICAtMi4wICAgMS4wICAgLT4gICAxDQorZGRjdG0wNjUgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDIuMCAgIC0+ICAgMA0KK2RkY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTENCitkZGN0bTA2NyBjb21wYXJldG90bWFnICAtMS4wICAtMS4wICAgLT4gICAwDQorZGRjdG0wNjggY29tcGFyZXRvdG1hZyAgLTEuMCAgIDAuMCAgIC0+ICAgMQ0KK2RkY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDANCitkZGN0bTA3MCBjb21wYXJldG90bWFnICAtMS4wICAgMi4wICAgLT4gIC0xDQorZGRjdG0wNzEgY29tcGFyZXRvdG1hZyAgIDAuMCAgLTIuMCAgIC0+ICAtMQ0KK2RkY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTENCitkZGN0bTA3MyBjb21wYXJldG90bWFnICAgMC4wICAgMC4wICAgLT4gICAwDQorZGRjdG0wNzQgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDEuMCAgIC0+ICAtMQ0KK2RkY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTENCitkZGN0bTA3NiBjb21wYXJldG90bWFnICAgMS4wICAtMi4wICAgLT4gIC0xDQorZGRjdG0wNzcgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTEuMCAgIC0+ICAgMA0KK2RkY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDENCitkZGN0bTA3OSBjb21wYXJldG90bWFnICAgMS4wICAgMS4wICAgLT4gICAwDQorZGRjdG0wODAgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDIuMCAgIC0+ICAtMQ0KK2RkY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDANCitkZGN0bTA4MiBjb21wYXJldG90bWFnICAgMi4wICAtMS4wICAgLT4gICAxDQorZGRjdG0wODMgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDAuMCAgIC0+ICAgMQ0KK2RkY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDENCitkZGN0bTA4NiBjb21wYXJldG90bWFnICAgMi4wICAgMi4wICAgLT4gICAwDQorDQorLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQorZGRjdG0wOTAgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OUUrMzg0IDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgMA0KK2RkY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTlFKzM4NCA5Ljk5OTk5OTk5RSszODQgICAtPiAgIDANCitkZGN0bTA5MiBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTlFKzM4NCAgLT4gICAwDQorZGRjdG0wOTMgY29tcGFyZXRvdG1hZyAtOS45OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5RSszODQgIC0+ICAgMA0KKw0KKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCitkZGN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwDQorZGRjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQ0KK2RkY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCitkZGN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxDQorZGRjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMA0KK2RkY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCitkZGN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xDQorZGRjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQ0KK2RkY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCitkZGN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwDQorZGRjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2RkY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCitkZGN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxDQorZGRjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQ0KK2RkY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCitkZGN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxDQorZGRjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KK2RkY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCitkZGN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxDQorZGRjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQ0KK2RkY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQorZGRjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2RkY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTENCitkZGN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQorZGRjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQ0KK2RkY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTENCitkZGN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQorZGRjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KK2RkY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTENCitkZGN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQorZGRjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQ0KK2RkY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTENCitkZGN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KK2RkY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDANCitkZGN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xDQorZGRjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KK2RkY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDENCitkZGN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwDQorZGRjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KK2RkY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTENCitkZGN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xDQorZGRjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KK2RkY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDANCitkZGN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxDQorDQorZGRjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KK2RkY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDENCitkZGN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxDQorZGRjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KK2RkY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDENCitkZGN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxDQorZGRjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KK2RkY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDENCitkZGN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxDQorZGRjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KK2RkY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDENCisNCitkZGN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xDQorZGRjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KK2RkY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTENCitkZGN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xDQorZGRjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KK2RkY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTENCitkZGN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xDQorZGRjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KK2RkY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTENCitkZGN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xDQorZGRjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCitkZGN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMA0KK2RkY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xDQorZGRjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCitkZGN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KK2RkY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwDQorZGRjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCitkZGN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KK2RkY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xDQorZGRjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCitkZGN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KK2RkY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZGRjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCitkZGN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KK2RkY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCitkZGN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KK2RkY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxDQorZGRjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCitkZGN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQ0KK2RkY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxDQorZGRjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCitkZGN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KKw0KK2RkY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCitkZGN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KK2RkY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCitkZGN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KK2RkY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xDQorZGRjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCitkZGN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KK2RkY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xDQorZGRjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQorZGRjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwDQorZGRjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xDQorZGRjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwDQorZGRjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQorZGRjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xDQorZGRjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xDQorZGRjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQorZGRjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwDQorZGRjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZGRjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxDQorZGRjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxDQorZGRjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxDQorZGRjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQorZGRjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxDQorZGRjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxDQorZGRjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQorZGRjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZGRjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQorZGRjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQorZGRjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xDQorZGRjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xDQorZGRjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQorZGRjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xDQorZGRjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xDQorZGRjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQorDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorZGRjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RkY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RkY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorZGRjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RkY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RkY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQorZGRjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RkY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RkY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorZGRjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RkY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMA0KK2RkY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDENCitkZGN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCitkZGN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQ0KK2RkY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDENCitkZGN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDENCitkZGN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQ0KK2RkY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDENCitkZGN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCitkZGN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQ0KK2RkY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDENCitkZGN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorZGRjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxDQorZGRjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxDQorZGRjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxDQorZGRjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxDQorZGRjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQorZGRjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxDQorZGRjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxDQorZGRjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQorZGRjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxDQorZGRjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxDQorZGRjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQorZGRjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxDQorZGRjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxDQorZGRjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQorZGRjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxDQorZGRjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxDQorZGRjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQorZGRjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwDQorZGRjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xDQorZGRjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQorZGRjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xDQorZGRjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xDQorZGRjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQorZGRjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xDQorZGRjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xDQorZGRjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQorZGRjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xDQorZGRjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xDQorZGRjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQorZGRjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xDQorZGRjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xDQorZGRjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQorZGRjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xDQorZGRjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xDQorZGRjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xDQorLS0gTFIgc3dhcA0KK2RkY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQ0KK2RkY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMA0KK2RkY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQ0KK2RkY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQ0KKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KK2RkY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxDQorZGRjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDENCitkZGN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KK2RkY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxDQorZGRjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDENCitkZGN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KK2RkY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxDQorZGRjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDENCitkZGN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KK2RkY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxDQorZGRjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDENCitkZGN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KK2RkY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xDQorZGRjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTENCitkZGN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KK2RkY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xDQorZGRjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTENCitkZGN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KK2RkY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xDQorZGRjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTENCitkZGN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KK2RkY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xDQorDQorLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCitkZGN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDENCitkZGN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCitkZGN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDENCitkZGN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDENCitkZGN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCitkZGN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDENCitkZGN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDENCitkZGN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCitkZGN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDENCitkZGN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDENCitkZGN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCitkZGN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDENCitkZGN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDENCitkZGN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCitkZGN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDENCitkZGN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDENCitkZGN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCitkZGN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDENCitkZGN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDENCitkZGN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCitkZGN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDENCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RkY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMA0KK2RkY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KK2RkY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQ0KK2RkY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KK2RkY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMA0KK2RkY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQ0KK2RkY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQ0KK2RkY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQ0KK2RkY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KK2RkY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMA0KK2RkY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQ0KK2RkY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KK2RkY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMA0KK2RkY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMA0KKw0KK2RkY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KK2RkY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQ0KK2RkY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQ0KK2RkY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KK2RkY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQ0KK2RkY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMA0KK2RkY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KK2RkY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMA0KK2RkY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQ0KK2RkY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KK2RkY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMA0KK2RkY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQ0KK2RkY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KK2RkY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMA0KK2RkY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQ0KK2RkY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KK2RkY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQ0KK2RkY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQ0KK2RkY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KK2RkY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQ0KK2RkY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMA0KKw0KKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCitkZGN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDANCitkZGN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCitkZGN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDENCitkZGN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDENCitkZGN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCitkZGN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDENCitkZGN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDENCitkZGN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCitkZGN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDENCitkZGN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDENCitkZGN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCitkZGN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTENCitkZGN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCisNCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KK2RkY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQ0KK2RkY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KK2RkY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQ0KK2RkY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQ0KK2RkY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KK2RkY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQ0KK2RkY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQ0KK2RkY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KK2RkY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQ0KK2RkY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQ0KK2RkY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KK2RkY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQ0KK2RkY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KK2RkY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KK2RkY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KK2RkY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KK2RkY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KK2RkY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KKw0KKy0tIG9sZCByZXNpZHVlIGNhc2VzDQorZGRjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQorZGRjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxDQorZGRjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxDQorZGRjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQorZGRjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xDQorZGRjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xDQorZGRjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQorZGRjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xDQorZGRjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xDQorZGRjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQorZGRjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xDQorZGRjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxDQorZGRjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQorZGRjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxDQorDQorLS0gU3BlY2lhbHMNCitkZGN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KK2RkY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxDQorZGRjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDENCitkZGN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KK2RkY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxDQorZGRjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDENCitkZGN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KK2RkY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQorZGRjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTENCitkZGN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KK2RkY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xDQorZGRjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTENCitkZGN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KK2RkY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xDQorZGRjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTENCitkZGN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2RkY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQorZGRjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDENCitkZGN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KK2RkY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxDQorZGRjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDENCitkZGN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KK2RkY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxDQorZGRjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCitkZGN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RkY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xDQorZGRjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTENCitkZGN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KK2RkY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xDQorZGRjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTENCitkZGN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KK2RkY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQorDQorZGRjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDENCitkZGN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KK2RkY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxDQorZGRjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDENCitkZGN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KK2RkY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQorZGRjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDENCitkZGN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KK2RkY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwDQorZGRjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQorZGRjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xDQorZGRjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQorZGRjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDANCitkZGN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMA0KK2RkY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQorDQorZGRjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDANCitkZGN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTENCitkZGN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KK2RkY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxDQorZGRjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDENCitkZGN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KK2RkY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxDQorZGRjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDENCitkZGN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KK2RkY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KK2RkY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQorDQorZGRjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCitkZGN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQ0KK2RkY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KK2RkY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxDQorZGRjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCisNCitkZGN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCitkZGN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xDQorZGRjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxDQorZGRjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQorZGRjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxDQorZGRjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxDQorZGRjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQorZGRjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxDQorZGRjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxDQorZGRjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KK2RkY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMA0KKw0KK2RkY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMA0KK2RkY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KK2RkY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTENCitkZGN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xDQorZGRjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KK2RkY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTENCitkZGN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xDQorZGRjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KK2RkY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTENCitkZGN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xDQorZGRjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQorZGRjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwDQorDQorLS0gTmFOcyB3aXRoIHBheWxvYWQNCitkZGN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQ0KK2RkY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQorZGRjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDENCitkZGN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQ0KK2RkY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KK2RkY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQ0KK2RkY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQ0KKw0KK2RkY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KK2RkY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQ0KK2RkY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQ0KK2RkY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KK2RkY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQ0KK2RkY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQ0KK2RkY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KK2RkY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQ0KKw0KK2RkY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTENCitkZGN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQorZGRjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KK2RkY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTENCitkZGN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQorZGRjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KK2RkY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDENCitkZGN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQorDQorZGRjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDENCitkZGN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQ0KK2RkY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQorZGRjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTENCitkZGN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQ0KK2RkY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQorZGRjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTENCitkZGN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQ0KK2RkY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQorDQorLS0gc3ByZWFkIHplcm9zDQorZGRjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS0zODMgIDAgICAgICAgIC0+ICAtMQ0KK2RkY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtMzgzIC0wICAgICAgICAtPiAgLTENCitkZGN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTM4MyAgMCAgICAgICAgLT4gIC0xDQorZGRjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgLTAgICAgICAgIC0+ICAtMQ0KK2RkY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtMzgzICAwRSszODQgICAtPiAgLTENCitkZGN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTM4MyAtMEUrMzg0ICAgLT4gIC0xDQorZGRjdG0xMTE2IGNvbXBhcmV0b3RtYWcgIC0wRS0zODMgIDBFKzM4NCAgIC0+ICAtMQ0KK2RkY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtMzgzIC0wRSszODQgICAtPiAgLTENCitkZGN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrMzg0ICAgLT4gIC0xDQorZGRjdG0xMTE5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFKzM4NCAgIC0+ICAtMQ0KK2RkY3RtMTEyMCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRSszODQgICAtPiAgLTENCitkZGN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrMzg0ICAgLT4gIC0xDQorDQorZGRjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSszODQgIDAgICAgICAgIC0+ICAgMQ0KK2RkY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrMzg0IC0wICAgICAgICAtPiAgIDENCitkZGN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzM4NCAgMCAgICAgICAgLT4gICAxDQorZGRjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSszODQgLTAgICAgICAgIC0+ICAgMQ0KK2RkY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrMzg0ICAwRS0zODMgICAtPiAgIDENCitkZGN0bTExMzUgY29tcGFyZXRvdG1hZyAgIDBFKzM4NCAtMEUtMzgzICAgLT4gICAxDQorZGRjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSszODQgIDBFLTM4MyAgIC0+ICAgMQ0KK2RkY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrMzg0IC0wRS0zODMgICAtPiAgIDENCitkZGN0bTExMzggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUtMzgzICAgLT4gICAxDQorZGRjdG0xMTM5IGNvbXBhcmV0b3RtYWcgICAwICAgICAgLTBFLTM4MyAgIC0+ICAgMQ0KK2RkY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS0zODMgICAtPiAgIDENCitkZGN0bTExNDEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUtMzgzICAgLT4gICAxDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkY3RtOTk5MCBjb21wYXJldG90bWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkY3RtOTk5MSBjb21wYXJldG90bWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHkuZGVjVGVzdAppbmRleCA5YTE3NWM1Li5mOTlkODZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weS5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ29weS5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MAotCi0tLSBJbmZpbml0aWVzCi1kZGNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQotZGRjcHkwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZGRjcHkwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFOCi1kZGNweTAyMiBjb3B5ICAgICAgICAtTmFOICAtPiAtTmFOCi1kZGNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFOCi1kZGNweTAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi1kZGNweTAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMAotZGRjcHkwMzIgY29weSAgICAgIC1OYU4xMCAgLT4gLU5hTjEwCi1kZGNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTAKLWRkY3B5MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTAKLWRkY3B5MDM1IGNvcHkgICAgICAgTmFONyAgIC0+IE5hTjcKLWRkY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43Ci1kZGNweTAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxCi1kZGNweTAzOCBjb3B5ICAgICAtc05hTjEwMSAtPiAtc05hTjEwMQotCi0tLSBmaW5pdGVzCi1kZGNweTEwMSBjb3B5ICAgICAgICAgIDcgICAtPiA3Ci1kZGNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNwotZGRjcHkxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUKLWRkY3B5MTA0IGNvcHkgICAgICAgIC03NSAgIC0+IC03NQotZGRjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MAotZGRjcHkxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTAKLWRkY3B5MTA3IGNvcHkgICAgICAgNy41MDAgIC0+IDcuNTAwCi1kZGNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDAKLQotLS0gemVyb3MKLWRkY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDAKLWRkY3B5MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wCi1kZGNweTExMyBjb3B5ICAgICAgIDBFKzQgICAtPiAwRSs0Ci1kZGNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNAotZGRjcHkxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwCi1kZGNweTExNiBjb3B5ICAgIC0wLjAwMDAgICAtPiAtMC4wMDAwCi1kZGNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDEKLWRkY3B5MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRkY3B5MTIxIGNvcHkgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCi1kZGNweTEyMiBjb3B5ICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKLWRkY3B5MTIzIGNvcHkgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCi1kZGNweTEyNCBjb3B5ICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkY3B5MTMxIGNvcHkgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZGNweTEzMiBjb3B5ICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCi1kZGNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRjcHkxMzQgY29weSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAotCi1kZGNweTEzNSBjb3B5ICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAotZGRjcHkxMzYgY29weSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZGNweTEzNyBjb3B5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MwotZGRjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZENvcHkuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrDQorZGRjcHkwMDEgY29weSAgICAgICArNy41MCAgLT4gNy41MA0KKw0KKy0tIEluZmluaXRpZXMNCitkZGNweTAxMSBjb3B5ICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQ0KK2RkY3B5MDEyIGNvcHkgIC1JbmZpbml0eSAgIC0+IC1JbmZpbml0eQ0KKw0KKy0tIE5hTnMsIDAgcGF5bG9hZA0KK2RkY3B5MDIxIGNvcHkgICAgICAgICBOYU4gIC0+IE5hTg0KK2RkY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4NCitkZGNweTAyMyBjb3B5ICAgICAgICBzTmFOICAtPiBzTmFODQorZGRjcHkwMjQgY29weSAgICAgICAtc05hTiAgLT4gLXNOYU4NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorZGRjcHkwMzEgY29weSAgICAgICBOYU4xMCAgLT4gTmFOMTANCitkZGNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTANCitkZGNweTAzMyBjb3B5ICAgICAgc05hTjEwICAtPiBzTmFOMTANCitkZGNweTAzNCBjb3B5ICAgICAtc05hTjEwICAtPiAtc05hTjEwDQorZGRjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONw0KK2RkY3B5MDM2IGNvcHkgICAgICAtTmFONyAgIC0+IC1OYU43DQorZGRjcHkwMzcgY29weSAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQ0KK2RkY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxDQorDQorLS0gZmluaXRlcw0KK2RkY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcNCitkZGNweTEwMiBjb3B5ICAgICAgICAgLTcgICAtPiAtNw0KK2RkY3B5MTAzIGNvcHkgICAgICAgICA3NSAgIC0+IDc1DQorZGRjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1DQorZGRjcHkxMDUgY29weSAgICAgICA3LjUwICAgLT4gNy41MA0KK2RkY3B5MTA2IGNvcHkgICAgICAtNy41MCAgIC0+IC03LjUwDQorZGRjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDANCitkZGNweTEwOCBjb3B5ICAgICAgLTcuNTAwICAtPiAtNy41MDANCisNCistLSB6ZXJvcw0KK2RkY3B5MTExIGNvcHkgICAgICAgICAgMCAgIC0+IDANCitkZGNweTExMiBjb3B5ICAgICAgICAgLTAgICAtPiAtMA0KK2RkY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQNCitkZGNweTExNCBjb3B5ICAgICAgLTBFKzQgICAtPiAtMEUrNA0KK2RkY3B5MTE1IGNvcHkgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KK2RkY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDANCitkZGNweTExNyBjb3B5ICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkZGNweTExOCBjb3B5ICAgICAtMEUtMTQxICAtPiAtMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkZGNweTEyMSBjb3B5ICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gMjY4MjY4MjY4MjY4MjY4Mg0KK2RkY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KK2RkY3B5MTIzIGNvcHkgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQorZGRjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkZGNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkY3B5MTMyIGNvcHkgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCitkZGNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RkY3B5MTM0IGNvcHkgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCisNCitkZGNweTEzNSBjb3B5ICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KK2RkY3B5MTM2IGNvcHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RkY3B5MTM3IGNvcHkgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzDQorZGRjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weUFicy5kZWNUZXN0CmluZGV4IDQ4MjNjZjIuLmQ0MzZhMTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlBYnMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5QWJzLmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRDb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgYW5kIHNldCBzaWduIHRvIHplcm8gICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrCi1kZGNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwCi0KLS0tIEluZmluaXRpZXMKLWRkY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5Ci1kZGNwYTAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWRkY3BhMDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTgotZGRjcGEwMjIgY29weWFicyAgICAgICAgLU5hTiAgLT4gTmFOCi1kZGNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFOCi1kZGNwYTAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFOCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWRkY3BhMDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwCi1kZGNwYTAzMiBjb3B5YWJzICAgICAgLU5hTjE1ICAtPiBOYU4xNQotZGRjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1Ci1kZGNwYTAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTAKLWRkY3BhMDM1IGNvcHlhYnMgICAgICAgTmFONyAgIC0+IE5hTjcKLWRkY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcKLWRkY3BhMDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKLWRkY3BhMDM4IGNvcHlhYnMgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKLQotLS0gZmluaXRlcwotZGRjcGExMDEgY29weWFicyAgICAgICAgICA3ICAgLT4gNwotZGRjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNwotZGRjcGExMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUKLWRkY3BhMTA0IGNvcHlhYnMgICAgICAgIC03NSAgIC0+IDc1Ci1kZGNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwCi1kZGNwYTEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwCi1kZGNwYTEwNyBjb3B5YWJzICAgICAgIDcuNTAwICAtPiA3LjUwMAotZGRjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDAKLQotLS0gemVyb3MKLWRkY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDAKLWRkY3BhMTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDAKLWRkY3BhMTEzIGNvcHlhYnMgICAgICAgMEUrNiAgIC0+IDBFKzYKLWRkY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYKLWRkY3BhMTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAotZGRjcGExMTYgY29weWFicyAgICAtMC4wMDAwICAgLT4gMC4wMDAwCi1kZGNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDEKLWRkY3BhMTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZGRjcGExMjEgY29weWFicyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODIKLWRkY3BhMTIyIGNvcHlhYnMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCi1kZGNwYTEyMyBjb3B5YWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQotZGRjcGExMjQgY29weWFicyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkY3BhMTMxIGNvcHlhYnMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZGNwYTEzMiBjb3B5YWJzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCi1kZGNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRjcGExMzQgY29weWFicyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAotCi1kZGNwYTEzNSBjb3B5YWJzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4Ci1kZGNwYTEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRjcGExMzcgY29weWFicyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IDFFLTM4MwotZGRjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkQ29weUFicy5kZWNUZXN0IC0tIHF1aWV0IGRlY0RvdWJsZSBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkZGNwYTAwMSBjb3B5YWJzICAgICAgICs3LjUwICAtPiA3LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RkY3BhMDExIGNvcHlhYnMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorZGRjcGEwMTIgY29weWFicyAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCisNCistLSBOYU5zLCAwIHBheWxvYWQNCitkZGNwYTAyMSBjb3B5YWJzICAgICAgICAgTmFOICAtPiBOYU4NCitkZGNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4NCitkZGNwYTAyMyBjb3B5YWJzICAgICAgICBzTmFOICAtPiBzTmFODQorZGRjcGEwMjQgY29weWFicyAgICAgICAtc05hTiAgLT4gc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkZGNwYTAzMSBjb3B5YWJzICAgICAgIE5hTjEwICAtPiBOYU4xMA0KK2RkY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1DQorZGRjcGEwMzMgY29weWFicyAgICAgIHNOYU4xNSAgLT4gc05hTjE1DQorZGRjcGEwMzQgY29weWFicyAgICAgLXNOYU4xMCAgLT4gc05hTjEwDQorZGRjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONw0KK2RkY3BhMDM2IGNvcHlhYnMgICAgICAtTmFONyAgIC0+IE5hTjcNCitkZGNwYTAzNyBjb3B5YWJzICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQorZGRjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KKw0KKy0tIGZpbml0ZXMNCitkZGNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3DQorZGRjcGExMDIgY29weWFicyAgICAgICAgIC03ICAgLT4gNw0KK2RkY3BhMTAzIGNvcHlhYnMgICAgICAgICA3NSAgIC0+IDc1DQorZGRjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUNCitkZGNwYTEwNSBjb3B5YWJzICAgICAgIDcuMTAgICAtPiA3LjEwDQorZGRjcGExMDYgY29weWFicyAgICAgIC03LjEwICAgLT4gNy4xMA0KK2RkY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwDQorZGRjcGExMDggY29weWFicyAgICAgIC03LjUwMCAgLT4gNy41MDANCisNCistLSB6ZXJvcw0KK2RkY3BhMTExIGNvcHlhYnMgICAgICAgICAgMCAgIC0+IDANCitkZGNwYTExMiBjb3B5YWJzICAgICAgICAgLTAgICAtPiAwDQorZGRjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KK2RkY3BhMTE0IGNvcHlhYnMgICAgICAtMEUrNiAgIC0+IDBFKzYNCitkZGNwYTExNSBjb3B5YWJzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCitkZGNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitkZGNwYTExNyBjb3B5YWJzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkZGNwYTExOCBjb3B5YWJzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RkY3BhMTIxIGNvcHlhYnMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCitkZGNwYTEyMyBjb3B5YWJzICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KK2RkY3BhMTI0IGNvcHlhYnMgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkZGNwYTEzMSBjb3B5YWJzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkY3BhMTMyIGNvcHlhYnMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCitkZGNwYTEzMyBjb3B5YWJzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RkY3BhMTM0IGNvcHlhYnMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCisNCitkZGNwYTEzNSBjb3B5YWJzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4DQorZGRjcGExMzYgY29weWFicyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZGNwYTEzNyBjb3B5YWJzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQorZGRjcGExMzggY29weWFicyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5TmVnYXRlLmRlY1Rlc3QKaW5kZXggMTIxOTQ1Yy4uYTRjNDI3NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weU5lZ2F0ZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlOZWdhdGUuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZENvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sKLWRkY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwCi0KLS0tIEluZmluaXRpZXMKLWRkY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQotZGRjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkKLQotLS0gTmFOcywgMCBwYXlsb2FkCi1kZGNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFOCi1kZGNwbjAyMiBjb3B5bmVnYXRlICAgICAgICAtTmFOICAtPiBOYU4KLWRkY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFOCi1kZGNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFOCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWRkY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMwotZGRjcG4wMzIgY29weW5lZ2F0ZSAgICAgIC1OYU4xMyAgLT4gTmFOMTMKLWRkY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMKLWRkY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMwotZGRjcG4wMzUgY29weW5lZ2F0ZSAgICAgICBOYU43MCAgLT4gLU5hTjcwCi1kZGNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MAotZGRjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDEKLWRkY3BuMDM4IGNvcHluZWdhdGUgICAgIC1zTmFOMTAxIC0+IHNOYU4xMDEKLQotLS0gZmluaXRlcwotZGRjcG4xMDEgY29weW5lZ2F0ZSAgICAgICAgICA3ICAgLT4gLTcKLWRkY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcKLWRkY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQotZGRjcG4xMDQgY29weW5lZ2F0ZSAgICAgICAgLTc1ICAgLT4gNzUKLWRkY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwCi1kZGNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwCi1kZGNwbjEwNyBjb3B5bmVnYXRlICAgICAgIDcuNTAwICAtPiAtNy41MDAKLWRkY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwCi0KLS0tIHplcm9zCi1kZGNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMAotZGRjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMAotZGRjcG4xMTMgY29weW5lZ2F0ZSAgICAgICAwRSs0ICAgLT4gLTBFKzQKLWRkY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQKLWRkY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDAKLWRkY3BuMTE2IGNvcHluZWdhdGUgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotZGRjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQotZGRjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kZGNwbjEyMSBjb3B5bmVnYXRlICAyNjgyNjgyNjgyNjgyNjgyICAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKLWRkY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCi1kZGNwbjEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKLWRkY3BuMTI0IGNvcHluZWdhdGUgIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kZGNwbjEzMSBjb3B5bmVnYXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkY3BuMTMyIGNvcHluZWdhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCi1kZGNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKLWRkY3BuMTM0IGNvcHluZWdhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4Ci0KLWRkY3BuMTM1IGNvcHluZWdhdGUgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgKLWRkY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZGNwbjEzNyBjb3B5bmVnYXRlICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCi1kZGNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRDb3B5TmVnYXRlLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2RkY3BuMDAxIGNvcHluZWdhdGUgICAgICAgKzcuNTAgIC0+IC03LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RkY3BuMDExIGNvcHluZWdhdGUgIEluZmluaXR5ICAgIC0+IC1JbmZpbml0eQ0KK2RkY3BuMDEyIGNvcHluZWdhdGUgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRjcG4wMjEgY29weW5lZ2F0ZSAgICAgICAgIE5hTiAgLT4gLU5hTg0KK2RkY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTg0KK2RkY3BuMDIzIGNvcHluZWdhdGUgICAgICAgIHNOYU4gIC0+IC1zTmFODQorZGRjcG4wMjQgY29weW5lZ2F0ZSAgICAgICAtc05hTiAgLT4gc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkZGNwbjAzMSBjb3B5bmVnYXRlICAgICAgIE5hTjEzICAtPiAtTmFOMTMNCitkZGNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMw0KK2RkY3BuMDMzIGNvcHluZWdhdGUgICAgICBzTmFOMTMgIC0+IC1zTmFOMTMNCitkZGNwbjAzNCBjb3B5bmVnYXRlICAgICAtc05hTjEzICAtPiBzTmFOMTMNCitkZGNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzANCitkZGNwbjAzNiBjb3B5bmVnYXRlICAgICAgLU5hTjcwICAtPiBOYU43MA0KK2RkY3BuMDM3IGNvcHluZWdhdGUgICAgICBzTmFOMTAxIC0+IC1zTmFOMTAxDQorZGRjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQ0KKw0KKy0tIGZpbml0ZXMNCitkZGNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNw0KK2RkY3BuMTAyIGNvcHluZWdhdGUgICAgICAgICAtNyAgIC0+IDcNCitkZGNwbjEwMyBjb3B5bmVnYXRlICAgICAgICAgNzUgICAtPiAtNzUNCitkZGNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQ0KK2RkY3BuMTA1IGNvcHluZWdhdGUgICAgICAgNy41MCAgIC0+IC03LjUwDQorZGRjcG4xMDYgY29weW5lZ2F0ZSAgICAgIC03LjUwICAgLT4gNy41MA0KK2RkY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMA0KK2RkY3BuMTA4IGNvcHluZWdhdGUgICAgICAtNy41MDAgIC0+IDcuNTAwDQorDQorLS0gemVyb3MNCitkZGNwbjExMSBjb3B5bmVnYXRlICAgICAgICAgIDAgICAtPiAtMA0KK2RkY3BuMTEyIGNvcHluZWdhdGUgICAgICAgICAtMCAgIC0+IDANCitkZGNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNA0KK2RkY3BuMTE0IGNvcHluZWdhdGUgICAgICAtMEUrNCAgIC0+IDBFKzQNCitkZGNwbjExNSBjb3B5bmVnYXRlICAgICAwLjAwMDAgICAtPiAtMC4wMDAwDQorZGRjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwDQorZGRjcG4xMTcgY29weW5lZ2F0ZSAgICAgIDBFLTE0MSAgLT4gLTBFLTE0MQ0KK2RkY3BuMTE4IGNvcHluZWdhdGUgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KKw0KKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQorZGRjcG4xMjEgY29weW5lZ2F0ZSAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyDQorZGRjcG4xMjIgY29weW5lZ2F0ZSAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IDI2ODI2ODI2ODI2ODI2ODINCitkZGNwbjEyMyBjb3B5bmVnYXRlICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDENCitkZGNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZGRjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRjcG4xMzIgY29weW5lZ2F0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMNCitkZGNwbjEzMyBjb3B5bmVnYXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZGNwbjEzNCBjb3B5bmVnYXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KKw0KK2RkY3BuMTM1IGNvcHluZWdhdGUgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTgNCitkZGNwbjEzNiBjb3B5bmVnYXRlICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RkY3BuMTM3IGNvcHluZWdhdGUgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCitkZGNwbjEzOCBjb3B5bmVnYXRlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRDb3B5U2lnbi5kZWNUZXN0CmluZGV4IGM5OTU0NGQuLjZhNzgwODMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZENvcHlTaWduLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkQ29weVNpZ24uZGVjVGVzdApAQCAtMSwxNzUgKzEsMTc1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkQ29weVNpZ24uZGVjVGVzdCAtLSBxdWlldCBkZWNEb3VibGUgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTAKLQotLS0gSW5maW5pdGllcwotZGRjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5Ci1kZGNwczAxMiBjb3B5c2lnbiAgLUluZmluaXR5ICAgICAgMTEgLT4gSW5maW5pdHkKLQotLS0gTmFOcywgMCBwYXlsb2FkCi1kZGNwczAyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgMTEgLT4gTmFOCi1kZGNwczAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFOCi1kZGNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTgotZGRjcHMwMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIDExIC0+IHNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZGRjcHMwMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIDExIC0+IE5hTjEwCi1kZGNwczAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTAKLWRkY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTAKLWRkY3BzMDM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAxMSAtPiBzTmFOMTAKLWRkY3BzMDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43Ci1kZGNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONwotZGRjcHMwMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKLWRkY3BzMDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxCi0KLS0tIGZpbml0ZXMKLWRkY3BzMTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3Ci1kZGNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNwotZGRjcHMxMDMgY29weXNpZ24gICAgICAgICA3NSAgICAgIDExIC0+IDc1Ci1kZGNwczEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUKLWRkY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwCi1kZGNwczEwNiBjb3B5c2lnbiAgICAgIC03LjUwICAgICAgMTEgLT4gNy41MAotZGRjcHMxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwCi1kZGNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDAKLQotLS0gemVyb3MKLWRkY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwCi1kZGNwczExMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgMTEgLT4gMAotZGRjcHMxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQKLWRkY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0Ci1kZGNwczExNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCi1kZGNwczExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwCi1kZGNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCi1kZGNwczExOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgMTEgLT4gMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kZGNwczEyMSBjb3B5c2lnbiAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgIDExIC0+IDI2ODI2ODI2ODI2ODI2ODIKLWRkY3BzMTIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgMTEgLT4gMjY4MjY4MjY4MjY4MjY4MgotZGRjcHMxMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxCi1kZGNwczEyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgIDExIC0+IDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkY3BzMTMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTEgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRjcHMxMzIgY29weXNpZ24gIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zODMKLWRkY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRjcHMxMzQgY29weXNpZ24gIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zOTgKLQotZGRjcHMxMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zOTgKLWRkY3BzMTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRjcHMxMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zODMKLWRkY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgMTEgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotCi0tLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKLQotLS0gSW5maW5pdGllcwotZGRjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkKLWRkY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZGRjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCi1kZGNwczIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4KLWRkY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KLWRkY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZGRjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKLWRkY3BzMjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCi1kZGNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKLWRkY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAotZGRjcHMyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONwotZGRjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONwotZGRjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQotZGRjcHMyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQotCi0tLSBmaW5pdGVzCi1kZGNwczMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03Ci1kZGNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03Ci1kZGNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQotZGRjcHMzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKLWRkY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTAKLWRkY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKLWRkY3BzMzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCi1kZGNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMAotCi0tLSB6ZXJvcwotZGRjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAotZGRjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAotZGRjcHMzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNAotZGRjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAotZGRjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCi1kZGNwczMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKLWRkY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQotZGRjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kZGNwczMyMSBjb3B5c2lnbiAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4MgotZGRjcHMzMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAtMzQgLT4gLTI2ODI2ODI2ODI2ODI2ODIKLWRkY3BzMzIzIGNvcHlzaWduICAxMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAgLTM0IC0+IC0xMzQxMzQxMzQxMzQxMzQxCi1kZGNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgIC0zNCAtPiAtMTM0MTM0MTM0MTM0MTM0MQotCi0tLSBObWF4LCBObWluLCBOdGlueQotZGRjcHMzMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAtMzQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkY3BzMzMyIGNvcHlzaWduICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zODMKLWRkY3BzMzMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgLTM0IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZGNwczMzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzk4Ci0KLWRkY3BzMzM1IGNvcHlzaWduICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTM0IC0+IC0xRS0zOTgKLWRkY3BzMzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTM0IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZGNwczMzNyBjb3B5c2lnbiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzgzCi1kZGNwczMzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0zNCAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotCi0tLSBPdGhlciBraW5kcyBvZiBSSFMKLWRkY3BzNDAxIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtMzQgLT4gLTcwMQotZGRjcHM0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwCi1kZGNwczQwMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTAgIC0+IC03MDEKLWRkY3BzNDA0IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMCAgLT4gLTcyMAotZGRjcHM0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxCi1kZGNwczQwNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgKzAgIC0+ICA3MjAKLWRkY3BzNDA3IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMzQgLT4gIDcwMQotZGRjcHM0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwCi0KLWRkY3BzNDEzIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtSW5mICAtPiAtNzAxCi1kZGNwczQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMAotZGRjcHM0MTUgY29weXNpZ24gICAgICAgICAgNzAxICAgICtJbmYgIC0+ICA3MDEKLWRkY3BzNDE2IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArSW5mICAtPiAgNzIwCi0KLWRkY3BzNDIwIGNvcHlzaWduICAgICAgICAgIDcwMSAgICAtTmFOICAtPiAtNzAxCi1kZGNwczQyMSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLU5hTiAgLT4gLTcyMAotZGRjcHM0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDEKLWRkY3BzNDIzIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOICAtPiAgNzIwCi1kZGNwczQyNSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTjggLT4gIDcyMAotCi1kZGNwczQyNiBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLXNOYU4gIC0+IC03MDEKLWRkY3BzNDI3IGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtc05hTiAgLT4gLTcyMAotZGRjcHM0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxCi1kZGNwczQyOSBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4gIC0+ICA3MjAKLWRkY3BzNDMwIGNvcHlzaWduICAgICAgICAgLTcyMCAgICArc05hTjMgLT4gIDcyMAotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZENvcHlTaWduLmRlY1Rlc3QgLS0gcXVpZXQgZGVjRG91YmxlIGNvcHkgd2l0aCBzaWduIGZyb20gcmhzICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrDQorZGRjcHMwMDEgY29weXNpZ24gICAgICAgKzcuNTAgICAgIDExIC0+IDcuNTANCisNCistLSBJbmZpbml0aWVzDQorZGRjcHMwMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIDExIC0+IEluZmluaXR5DQorZGRjcHMwMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIDExIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRjcHMwMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIDExIC0+IE5hTg0KK2RkY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4NCitkZGNwczAyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgMTEgLT4gc05hTg0KK2RkY3BzMDI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAxMSAtPiBzTmFODQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2RkY3BzMDMxIGNvcHlzaWduICAgICAgIE5hTjEwICAgICAxMSAtPiBOYU4xMA0KK2RkY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMA0KK2RkY3BzMDMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAxMSAtPiBzTmFOMTANCitkZGNwczAzNCBjb3B5c2lnbiAgICAgLXNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQorZGRjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcNCitkZGNwczAzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgMTEgLT4gTmFONw0KK2RkY3BzMDM3IGNvcHlzaWduICAgICAgc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQorZGRjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDENCisNCistLSBmaW5pdGVzDQorZGRjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcNCitkZGNwczEwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgMTEgLT4gNw0KK2RkY3BzMTAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAxMSAtPiA3NQ0KK2RkY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQ0KK2RkY3BzMTA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAxMSAtPiA3LjUwDQorZGRjcHMxMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIDExIC0+IDcuNTANCitkZGNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDANCitkZGNwczEwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgMTEgLT4gNy41MDANCisNCistLSB6ZXJvcw0KK2RkY3BzMTExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAxMSAtPiAwDQorZGRjcHMxMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIDExIC0+IDANCitkZGNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNA0KK2RkY3BzMTE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAxMSAtPiAwRSs0DQorZGRjcHMxMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIDExIC0+IDAuMDAwMA0KK2RkY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCitkZGNwczExNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgMTEgLT4gMEUtMTQxDQorZGRjcHMxMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIDExIC0+IDBFLTE0MQ0KKw0KKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQorZGRjcHMxMjEgY29weXNpZ24gIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAgICAxMSAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRjcHMxMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxDQorZGRjcHMxMjQgY29weXNpZ24gIC0xMzQxMzQxMzQxMzQxMzQxICAgICAgICAgICAxMSAtPiAxMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkZGNwczEzMSBjb3B5c2lnbiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDExIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZGNwczEzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4Mw0KK2RkY3BzMTMzIGNvcHlzaWduICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RkY3BzMTM0IGNvcHlzaWduICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAgMTEgLT4gMUUtMzk4DQorDQorZGRjcHMxMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAxMSAtPiAxRS0zOTgNCitkZGNwczEzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIDExIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZGNwczEzNyBjb3B5c2lnbiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIDExIC0+IDFFLTM4Mw0KK2RkY3BzMTM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgMTEgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKw0KKy0tIHJlcGVhdCB3aXRoIG5lZ2F0aXZlIFJIUw0KKw0KKy0tIEluZmluaXRpZXMNCitkZGNwczIxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgLTM0IC0+IC1JbmZpbml0eQ0KK2RkY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFODQorZGRjcHMyMjIgY29weXNpZ24gICAgICAgIC1OYU4gICAgIC0zNCAtPiAtTmFODQorZGRjcHMyMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIC0zNCAtPiAtc05hTg0KK2RkY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorZGRjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTANCitkZGNwczIzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KK2RkY3BzMjMzIGNvcHlzaWduICAgICAgc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KK2RkY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMA0KK2RkY3BzMjM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAtMzQgLT4gLU5hTjcNCitkZGNwczIzNiBjb3B5c2lnbiAgICAgIC1OYU43ICAgICAgLTM0IC0+IC1OYU43DQorZGRjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KK2RkY3BzMjM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAtMzQgLT4gLXNOYU4xMDENCisNCistLSBmaW5pdGVzDQorZGRjcHMzMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIC0zNCAtPiAtNw0KK2RkY3BzMzAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAtMzQgLT4gLTcNCitkZGNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQ0KK2RkY3BzMzA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAtMzQgLT4gLTc1DQorZGRjcHMzMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIC0zNCAtPiAtNy41MA0KK2RkY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTANCitkZGNwczMwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgLTM0IC0+IC03LjUwMA0KK2RkY3BzMzA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQorDQorLS0gemVyb3MNCitkZGNwczMxMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgLTM0IC0+IC0wDQorZGRjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMA0KK2RkY3BzMzEzIGNvcHlzaWduICAgICAgIDBFKzQgICAgICAtMzQgLT4gLTBFKzQNCitkZGNwczMxNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgLTM0IC0+IC0wRSs0DQorZGRjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQorZGRjcHMzMTYgY29weXNpZ24gICAgLTAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwDQorZGRjcHMzMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQorZGRjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkZGNwczMyMSBjb3B5c2lnbiAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgIC0zNCAtPiAtMjY4MjY4MjY4MjY4MjY4Mg0KK2RkY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgICAgLTM0IC0+IC0yNjgyNjgyNjgyNjgyNjgyDQorZGRjcHMzMjMgY29weXNpZ24gIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgICAtMzQgLT4gLTEzNDEzNDEzNDEzNDEzNDENCitkZGNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAgIC0zNCAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZGRjcHMzMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAtMzQgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZGNwczMzMiBjb3B5c2lnbiAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzgzDQorZGRjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAtMzQgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZGNwczMzNCBjb3B5c2lnbiAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIC0zNCAtPiAtMUUtMzk4DQorDQorZGRjcHMzMzUgY29weXNpZ24gIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM5OA0KK2RkY3BzMzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTM0IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRjcHMzMzcgY29weXNpZ24gIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMzQgLT4gLTFFLTM4Mw0KK2RkY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTM0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorDQorLS0gT3RoZXIga2luZHMgb2YgUkhTDQorZGRjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxDQorZGRjcHM0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwDQorZGRjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxDQorZGRjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwDQorZGRjcHM0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxDQorZGRjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwDQorZGRjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxDQorZGRjcHM0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwDQorDQorZGRjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDENCitkZGNwczQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMA0KK2RkY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxDQorZGRjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjANCisNCitkZGNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQ0KK2RkY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwDQorZGRjcHM0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDENCitkZGNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMA0KK2RkY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwDQorDQorZGRjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxDQorZGRjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwDQorZGRjcHM0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxDQorZGRjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwDQorZGRjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRGl2aWRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdAppbmRleCAwMTlkYjIyLi41NTMxZDBlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGUuZGVjVGVzdApAQCAtMSw4NjMgKzEsODYzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkRGl2aWRlLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MKLWRkZGl2MDAxIGRpdmlkZSAgMSAgICAgMSAgICAtPiAgMQotZGRkaXYwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyCi1kZGRpdjAwMyBkaXZpZGUgIDEgICAgIDIgICAgLT4gIDAuNQotZGRkaXYwMDQgZGl2aWRlICAyICAgICAyICAgIC0+ICAxCi1kZGRpdjAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDAKLWRkZGl2MDA2IGRpdmlkZSAgMCAgICAgMiAgICAtPiAgMAotZGRkaXYwMDcgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjAwOCBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MDA5IGRpdmlkZSAgMyAgICAgMyAgICAtPiAgMQotCi1kZGRpdjAxMCBkaXZpZGUgIDIuNCAgIDEgICAgLT4gIDIuNAotZGRkaXYwMTEgZGl2aWRlICAyLjQgICAtMSAgIC0+ICAtMi40Ci1kZGRpdjAxMiBkaXZpZGUgIC0yLjQgIDEgICAgLT4gIC0yLjQKLWRkZGl2MDEzIGRpdmlkZSAgLTIuNCAgLTEgICAtPiAgMi40Ci1kZGRpdjAxNCBkaXZpZGUgIDIuNDAgIDEgICAgLT4gIDIuNDAKLWRkZGl2MDE1IGRpdmlkZSAgMi40MDAgMSAgICAtPiAgMi40MDAKLWRkZGl2MDE2IGRpdmlkZSAgMi40ICAgMiAgICAtPiAgMS4yCi1kZGRpdjAxNyBkaXZpZGUgIDIuNDAwIDIgICAgLT4gIDEuMjAwCi1kZGRpdjAxOCBkaXZpZGUgIDIuICAgIDIgICAgLT4gIDEKLWRkZGl2MDE5IGRpdmlkZSAgMjAgICAgMjAgICAtPiAgMQotCi1kZGRpdjAyMCBkaXZpZGUgIDE4NyAgIDE4NyAgICAtPiAgMQotZGRkaXYwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQotZGRkaXYwMjIgZGl2aWRlICA1MCAgICAyMCAgICAgLT4gIDIuNQotZGRkaXYwMjMgZGl2aWRlICA1MDAgICAyMDAgICAgLT4gIDIuNQotZGRkaXYwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQotZGRkaXYwMjUgZGl2aWRlICA1LjAwICAyLjAwICAgLT4gIDIuNQotZGRkaXYwMjYgZGl2aWRlICA1ICAgICAyLjAgICAgLT4gIDIuNQotZGRkaXYwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQotZGRkaXYwMjggZGl2aWRlICA1ICAgICAwLjIwICAgLT4gIDI1Ci1kZGRpdjAyOSBkaXZpZGUgIDUgICAgIDAuMjAwICAtPiAgMjUKLWRkZGl2MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMAotZGRkaXYwMzEgZGl2aWRlICAxMDAgICAxICAgICAgLT4gIDEwMAotZGRkaXYwMzIgZGl2aWRlICAxMDAwICAxICAgICAgLT4gIDEwMDAKLWRkZGl2MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMAotCi1kZGRpdjAzNSBkaXZpZGUgIDEgICAgIDIgICAgICAtPiAgMC41Ci1kZGRpdjAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQotZGRkaXYwMzcgZGl2aWRlICAxICAgICA4ICAgICAgLT4gIDAuMTI1Ci1kZGRpdjAzOCBkaXZpZGUgIDEgICAgIDE2ICAgICAtPiAgMC4wNjI1Ci1kZGRpdjAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQotZGRkaXYwNDAgZGl2aWRlICAxICAgICA2NCAgICAgLT4gIDAuMDE1NjI1Ci1kZGRpdjA0MSBkaXZpZGUgIDEgICAgLTIgICAgICAtPiAgLTAuNQotZGRkaXYwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1Ci1kZGRpdjA0MyBkaXZpZGUgIDEgICAgLTggICAgICAtPiAgLTAuMTI1Ci1kZGRpdjA0NCBkaXZpZGUgIDEgICAgLTE2ICAgICAtPiAgLTAuMDYyNQotZGRkaXYwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1Ci1kZGRpdjA0NiBkaXZpZGUgIDEgICAgLTY0ICAgICAtPiAgLTAuMDE1NjI1Ci1kZGRpdjA0NyBkaXZpZGUgLTEgICAgIDIgICAgICAtPiAgLTAuNQotZGRkaXYwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1Ci1kZGRpdjA0OSBkaXZpZGUgLTEgICAgIDggICAgICAtPiAgLTAuMTI1Ci1kZGRpdjA1MCBkaXZpZGUgLTEgICAgIDE2ICAgICAtPiAgLTAuMDYyNQotZGRkaXYwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1Ci1kZGRpdjA1MiBkaXZpZGUgLTEgICAgIDY0ICAgICAtPiAgLTAuMDE1NjI1Ci1kZGRpdjA1MyBkaXZpZGUgLTEgICAgLTIgICAgICAtPiAgMC41Ci1kZGRpdjA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQotZGRkaXYwNTUgZGl2aWRlIC0xICAgIC04ICAgICAgLT4gIDAuMTI1Ci1kZGRpdjA1NiBkaXZpZGUgLTEgICAgLTE2ICAgICAtPiAgMC4wNjI1Ci1kZGRpdjA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQotZGRkaXYwNTggZGl2aWRlIC0xICAgIC02NCAgICAgLT4gIDAuMDE1NjI1Ci0KLS0tIGJjZFRpbWUKLWRkZGl2MDYwIGRpdmlkZSAgMSA3ICAgICAgICAgICAgICAgICAgIC0+IDAuMTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MDYxIGRpdmlkZSAxLjIzNDU2NzggIDEuOTg3NjU0MyAgIC0+IDAuNjIxMTE3OTY4MDQ5MDcxNyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci1kZGRpdjA3MSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkKLWRkZGl2MDcyIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5ICAxICAtPiAgOTk5OTk5OTk5OTk5OTk5Ci1kZGRpdjA3MyBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5ICAgMSAgLT4gIDk5OTk5OTk5OTk5OTk5Ci1kZGRpdjA3NCBkaXZpZGUgIDk5OTk5OTk5OTk5OTkgICAgMSAgLT4gIDk5OTk5OTk5OTk5OTkKLWRkZGl2MDc1IGRpdmlkZSAgOTk5OTk5OTk5OTk5ICAgICAxICAtPiAgOTk5OTk5OTk5OTk5Ci1kZGRpdjA3NiBkaXZpZGUgIDk5OTk5OTk5OTk5ICAgICAgMSAgLT4gIDk5OTk5OTk5OTk5Ci1kZGRpdjA3NyBkaXZpZGUgIDk5OTk5OTk5OTkgICAgICAgMSAgLT4gIDk5OTk5OTk5OTkKLWRkZGl2MDc4IGRpdmlkZSAgOTk5OTk5OTk5ICAgICAgICAxICAtPiAgOTk5OTk5OTk5Ci1kZGRpdjA3OSBkaXZpZGUgIDk5OTk5OTk5ICAgICAgICAgMSAgLT4gIDk5OTk5OTk5Ci1kZGRpdjA4MCBkaXZpZGUgIDk5OTk5OTkgICAgICAgICAgMSAgLT4gIDk5OTk5OTkKLWRkZGl2MDgxIGRpdmlkZSAgOTk5OTk5ICAgICAgICAgICAxICAtPiAgOTk5OTk5Ci1kZGRpdjA4MiBkaXZpZGUgIDk5OTk5ICAgICAgICAgICAgMSAgLT4gIDk5OTk5Ci1kZGRpdjA4MyBkaXZpZGUgIDk5OTkgICAgICAgICAgICAgMSAgLT4gIDk5OTkKLWRkZGl2MDg0IGRpdmlkZSAgOTk5ICAgICAgICAgICAgICAxICAtPiAgOTk5Ci1kZGRpdjA4NSBkaXZpZGUgIDk5ICAgICAgICAgICAgICAgMSAgLT4gIDk5Ci1kZGRpdjA4NiBkaXZpZGUgIDkgICAgICAgICAgICAgICAgMSAgLT4gIDkKLQotZGRkaXYwOTAgZGl2aWRlICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKLWRkZGl2MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjAKLWRkZGl2MDkyIGRpdmlkZSAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwLjAwCi1kZGRpdjA5MyBkaXZpZGUgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMEUrNwotZGRkaXYwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0Ci0KLWRkZGl2MDk1IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTggIC0+ICAxRSs4Ci1kZGRpdjA5NiBkaXZpZGUgIDEgICAgICAgICAgICAxRS05ICAtPiAgMUUrOQotZGRkaXYwOTcgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTAgLT4gIDFFKzEwCi1kZGRpdjA5OCBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMSAtPiAgMUUrMTEKLWRkZGl2MDk5IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEyIC0+ICAxRSsxMgotCi1kZGRpdjEwMCBkaXZpZGUgIDEgIDEgICAtPiAxCi1kZGRpdjEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUKLWRkZGl2MTAyIGRpdmlkZSAgMSAgMyAgIC0+IDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTAzIGRpdmlkZSAgMSAgNCAgIC0+IDAuMjUKLWRkZGl2MTA0IGRpdmlkZSAgMSAgNSAgIC0+IDAuMgotZGRkaXYxMDUgZGl2aWRlICAxICA2ICAgLT4gMC4xNjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAotZGRkaXYxMDYgZGl2aWRlICAxICA3ICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAotZGRkaXYxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUKLWRkZGl2MTA4IGRpdmlkZSAgMSAgOSAgIC0+IDAuMTExMTExMTExMTExMTExMSBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA5IGRpdmlkZSAgMSAgMTAgIC0+IDAuMQotZGRkaXYxMTAgZGl2aWRlICAxICAxICAgLT4gMQotZGRkaXYxMTEgZGl2aWRlICAyICAxICAgLT4gMgotZGRkaXYxMTIgZGl2aWRlICAzICAxICAgLT4gMwotZGRkaXYxMTMgZGl2aWRlICA0ICAxICAgLT4gNAotZGRkaXYxMTQgZGl2aWRlICA1ICAxICAgLT4gNQotZGRkaXYxMTUgZGl2aWRlICA2ICAxICAgLT4gNgotZGRkaXYxMTYgZGl2aWRlICA3ICAxICAgLT4gNwotZGRkaXYxMTcgZGl2aWRlICA4ICAxICAgLT4gOAotZGRkaXYxMTggZGl2aWRlICA5ICAxICAgLT4gOQotZGRkaXYxMTkgZGl2aWRlICAxMCAxICAgLT4gMTAKLQotZGRkaXYxMjAgZGl2aWRlICAzRSsxIDAuMDAxICAtPiAzRSs0Ci1kZGRpdjEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwCi0KLWRkZGl2MTMwIGRpdmlkZSAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OS40OTM4OTg3Nzk3NTYgICAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMuOTQ3ODk1NzkxNTgzICAgIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMzIgZGl2aWRlICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5LjM4Nzc1NTEwMjA0MSAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTMzIGRpdmlkZSAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQotZGRkaXYxMzQgZGl2aWRlICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwLjU4ODIzNTI5NDExOCAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NC4wNzE4NTYyODc0MjUgICAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjguNTA2Mjk4NzQwMjUyICAgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzCi1kZGRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMjEgZGl2aWRlIDM5MSAgLTU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3csIHNvbWUgd2l0aCBjb2VmZmljaWVudCBwYWRkaW5nCi1kZGRpdjI3MCBkaXZpZGUgMSAxZTM4NCAgICAgICAgICAgICAgICAgIC0+IDFFLTM4NCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCi1kZGRpdjI3MSBkaXZpZGUgMSAwLjllMzg0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTFFLTM4NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRkZGl2MjcyIGRpdmlkZSAxIDAuOTllMzg0ICAgICAgICAgICAgICAgLT4gMS4wMTAxMDEwMTAxMDEwMUUtMzg0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZGRpdjI3NCBkaXZpZGUgOWUzODQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZAotZGRkaXYyNzUgZGl2aWRlIDkuOWUzODQgIDEgICAgICAgICAgICAgICAtPiA5LjkwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKLWRkZGl2Mjc2IGRpdmlkZSA5Ljk5ZTM4NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkCi1kZGRpdjI3NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxICAgIC0+IDkuOTk5OTk5OTk5OTk5OTAwRSszODQgQ2xhbXBlZAotZGRkaXYyNzggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEgICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0IENsYW1wZWQKLWRkZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotCi1kZGRpdjI4NSBkaXZpZGUgOS45ZTM4NCAgMS4xICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQKLWRkZGl2Mjg2IGRpdmlkZSA5Ljk5ZTM4NCAxLjEgICAgICAgICAgICAgIC0+IDkuMDgxODE4MTgxODE4MTgyRSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjI4NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5ZTM4NCAxLjEgICAtPiA5LjA5MDkwOTA5MDkwOTAwMEUrMzg0IENsYW1wZWQKLWRkZGl2Mjg4IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5ZTM4NCAxLjEgIC0+IDkuMDkwOTA5MDkwOTA5MDgyRSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjI4OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEuMSAtPiA5LjA5MDkwOTA5MDkwOTA5MEUrMzg0IENsYW1wZWQKLQotCi0tLSBEaXZpZGUgaW50byAwIHRlc3RzCi1kZGRpdjMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwCi1kZGRpdjMwMiBkaXZpZGUgICAgMCAgICA3RS01ICAtPiAwRSs1Ci1kZGRpdjMwMyBkaXZpZGUgICAgMCAgICA3RS0xICAtPiAwRSsxCi1kZGRpdjMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjAKLWRkZGl2MzA1IGRpdmlkZSAgICAwICAgIDdFKzUgIC0+IDAuMDAwMDAKLWRkZGl2MzA2IGRpdmlkZSAgICAwICAgIDdFKzYgIC0+IDAuMDAwMDAwCi1kZGRpdjMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03Ci1kZGRpdjMwOCBkaXZpZGUgICAgMCAgIDcwRS01ICAtPiAwRSs1Ci1kZGRpdjMwOSBkaXZpZGUgICAgMCAgIDcwRS0xICAtPiAwRSsxCi1kZGRpdjMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwCi1kZGRpdjMxMSBkaXZpZGUgICAgMCAgIDcwRSsxICAtPiAwLjAKLWRkZGl2MzEyIGRpdmlkZSAgICAwICAgNzBFKzUgIC0+IDAuMDAwMDAKLWRkZGl2MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwCi1kZGRpdjMxNCBkaXZpZGUgICAgMCAgIDcwRSs3ICAtPiAwRS03Ci1kZGRpdjMxNSBkaXZpZGUgICAgMCAgNzAwRS01ICAtPiAwRSs1Ci1kZGRpdjMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxCi1kZGRpdjMxNyBkaXZpZGUgICAgMCAgNzAwRSswICAtPiAwCi1kZGRpdjMxOCBkaXZpZGUgICAgMCAgNzAwRSsxICAtPiAwLjAKLWRkZGl2MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDAKLWRkZGl2MzIwIGRpdmlkZSAgICAwICA3MDBFKzYgIC0+IDAuMDAwMDAwCi1kZGRpdjMyMSBkaXZpZGUgICAgMCAgNzAwRSs3ICAtPiAwRS03Ci1kZGRpdjMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03NwotCi1kZGRpdjMzMSBkaXZpZGUgMEUtMyAgICA3RS01ICAtPiAwRSsyCi1kZGRpdjMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwCi1kZGRpdjMzMyBkaXZpZGUgMEUtMyAgICA3RSsxICAtPiAwLjAwMDAKLWRkZGl2MzM0IGRpdmlkZSAwRS0zICAgIDdFKzUgIC0+IDBFLTgKLWRkZGl2MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQKLWRkZGl2MzM2IGRpdmlkZSAwRS0xICAgIDdFLTEgIC0+IDAKLWRkZGl2MzM3IGRpdmlkZSAwRS0xICAgIDdFKzEgIC0+IDAuMDAKLWRkZGl2MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwCi1kZGRpdjMzOSBkaXZpZGUgMEUrMSAgICA3RS01ICAtPiAwRSs2Ci1kZGRpdjM0MCBkaXZpZGUgMEUrMSAgICA3RS0xICAtPiAwRSsyCi1kZGRpdjM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwCi1kZGRpdjM0MiBkaXZpZGUgMEUrMSAgICA3RSs1ICAtPiAwLjAwMDAKLWRkZGl2MzQzIGRpdmlkZSAwRSszICAgIDdFLTUgIC0+IDBFKzgKLWRkZGl2MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQKLWRkZGl2MzQ1IGRpdmlkZSAwRSszICAgIDdFKzEgIC0+IDBFKzIKLWRkZGl2MzQ2IGRpdmlkZSAwRSszICAgIDdFKzUgIC0+IDAuMDAKLQotLS0gVGhlc2Ugd2VyZSAnaW5wdXQgcm91bmRpbmcnCi1kZGRpdjQ0MSBkaXZpZGUgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMAotZGRkaXY0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTExIEluZXhhY3QgUm91bmRlZAotZGRkaXY0NDMgZGl2aWRlIDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMAotZGRkaXY0NDQgZGl2aWRlIDEgMTIzNDU2NzgwMCAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTEwIEluZXhhY3QgUm91bmRlZAotZGRkaXY0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MAotZGRkaXY0NDYgZGl2aWRlIDEgMTIzNDU2Nzg5MCAgLT4gOC4xMDAwMDAwNzM3MTAwMDFFLTEwIEluZXhhY3QgUm91bmRlZAotZGRkaXY0NDcgZGl2aWRlIDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQotZGRkaXY0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMDFFLTEwIEluZXhhY3QgUm91bmRlZAotZGRkaXY0NDkgZGl2aWRlIDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDEKLWRkZGl2NDUwIGRpdmlkZSAxIDEyMzQ1Njc4OTAxIC0+IDguMTAwMDAwMDczMDUzOTAxRS0xMSBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYKLWRkZGl2NDUyIGRpdmlkZSAxIDEyMzQ1Njc4OTYgIC0+IDguMTAwMDAwMDM0MzQ0MDAwRS0xMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gaGlnaC1sb3dzCi1kZGRpdjQ1MyBkaXZpZGUgMWUrMSAgIDEgICAgLT4gICAxRSsxCi1kZGRpdjQ1NCBkaXZpZGUgMWUrMSAgIDEuMCAgLT4gICAxRSsxCi1kZGRpdjQ1NSBkaXZpZGUgMWUrMSAgIDEuMDAgLT4gICAxRSsxCi1kZGRpdjQ1NiBkaXZpZGUgMWUrMiAgIDIgICAgLT4gICA1RSsxCi1kZGRpdjQ1NyBkaXZpZGUgMWUrMiAgIDIuMCAgLT4gICA1RSsxCi1kZGRpdjQ1OCBkaXZpZGUgMWUrMiAgIDIuMDAgLT4gICA1RSsxCi0KLS0tIHNvbWUgZnJvbSBJRUVFIGRpc2N1c3Npb25zCi1kZGRpdjQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUKLWRkZGl2NDYxIGRpdmlkZSAzMGUtMSAgICAyZTAgICAgIC0+IDEuNQotZGRkaXY0NjIgZGl2aWRlIDMwMGUtMiAgIDJlMCAgICAgLT4gMS41MAotZGRkaXY0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDAKLWRkZGl2NDY1IGRpdmlkZSAzZTAgICAgICAyMGUtMSAgIC0+IDEuNQotZGRkaXY0NjYgZGl2aWRlIDMwZS0xICAgIDIwZS0xICAgLT4gMS41Ci1kZGRpdjQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUKLWRkZGl2NDY4IGRpdmlkZSAzMDAwZS0zICAyMGUtMSAgIC0+IDEuNTAKLWRkZGl2NDY5IGRpdmlkZSAzZTAgICAgICAyMDBlLTIgIC0+IDEuNQotZGRkaXY0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41Ci1kZGRpdjQ3MSBkaXZpZGUgMzAwZS0yICAgMjAwZS0yICAtPiAxLjUKLWRkZGl2NDcyIGRpdmlkZSAzMDAwZS0zICAyMDBlLTIgIC0+IDEuNQotZGRkaXY0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41Ci1kZGRpdjQ3NCBkaXZpZGUgMzBlLTEgICAgMjAwMGUtMyAtPiAxLjUKLWRkZGl2NDc1IGRpdmlkZSAzMDBlLTIgICAyMDAwZS0zIC0+IDEuNQotZGRkaXY0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41Ci0KLS0tIHNvbWUgcmVjaXByb2NhbHMKLWRkZGl2NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzCi1kZGRpdjQ4MSBkaXZpZGUgMSAgICAgICAgMTBFKzMzICAtPiAxRS0zNAotZGRkaXY0ODIgZGl2aWRlIDEgICAgICAgIDEuMEUtMzMgLT4gMUUrMzMKLWRkZGl2NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyCi0KLS0tIFJNUyBkaXNjdXNzaW9uIHRhYmxlCi1kZGRpdjQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyCi1kZGRpdjQ4NSBkaXZpZGUgMGU1ICAgICAyZTMgLT4gICAwRSsyCi1kZGRpdjQ4NiBkaXZpZGUgMGU1ICAgIDEwZTIgLT4gICAwRSszCi1kZGRpdjQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszCi1kZGRpdjQ4OCBkaXZpZGUgMGU1ICAgMTAwZTEgLT4gICAwRSs0Ci1kZGRpdjQ4OSBkaXZpZGUgMGU1ICAgMjAwZTEgLT4gICAwRSs0Ci0KLWRkZGl2NDkxIGRpdmlkZSAxZTUgICAgIDFlMyAtPiAgIDFFKzIKLWRkZGl2NDkyIGRpdmlkZSAxZTUgICAgIDJlMyAtPiAgIDVFKzEKLWRkZGl2NDkzIGRpdmlkZSAxZTUgICAgMTBlMiAtPiAgIDFFKzIKLWRkZGl2NDk0IGRpdmlkZSAxZTUgICAgMjBlMiAtPiAgIDVFKzEKLWRkZGl2NDk1IGRpdmlkZSAxZTUgICAxMDBlMSAtPiAgIDFFKzIKLWRkZGl2NDk2IGRpdmlkZSAxZTUgICAyMDBlMSAtPiAgIDVFKzEKLQotLS0gdHJ5emVyb3MgY2FzZXMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kZGRpdjQ5NyAgZGl2aWRlICAwRSszODAgMTAwMEUtMTMgIC0+IDBFKzM2OSBDbGFtcGVkCi1kZGRpdjQ5OCAgZGl2aWRlICAwRS0zOTAgMTAwMEUrMTMgIC0+IDBFLTM5OCBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBoYWxmX3VwCi0KLS0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcwotZGRkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZAotCi1kZGRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41Ci1kZGRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41Ci1kZGRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAotZGRkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCi1kZGRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwCi1kZGRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAotZGRkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCi1kZGRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwCi1kZGRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41Ci0KLWRkZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCi1kZGRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMgotZGRkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKLWRkZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCi1kZGRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMgotZGRkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKLWRkZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCi1kZGRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMgotZGRkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKLQotZGRkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCi1kZGRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjAKLWRkZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAotZGRkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKLWRkZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42Ci1kZGRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKLWRkZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCi1kZGRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNgotZGRkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0Ci1kZGRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKLWRkZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQotZGRkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCi1kZGRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQotZGRkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUKLWRkZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41Ci1kZGRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKLWRkZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQotZGRkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAotZGRkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCi1kZGRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDEKLQotZGRkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKLWRkZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKLWRkZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40Ci1kZGRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKLWRkZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAotZGRkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDAKLWRkZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKLWRkZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40Ci0KLS0tICt2ZSBleHBvbmVudAotZGRkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKLWRkZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQotZGRkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQotZGRkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKLWRkZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5Ci1kZGRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKLWRkZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKLWRkZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5Ci0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLWRkZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMwotZGRkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLQotZGRkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMAotZGRkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAotZGRkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAotZGRkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMAotZGRkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKLWRkZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMAotZGRkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCi1kZGRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKLWRkZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLQotZGRkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQotZGRkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQotZGRkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQotZGRkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQotZGRkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wCi1kZGRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCi1kZGRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCi1kZGRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wCi1kZGRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi0KLS0tIFNwZWNpYWxzCi1kZGRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kZGRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZGRkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRkZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1kZGRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZGRkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLWRkZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKLWRkZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY3OTAgZGl2aWRlIC0xICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKLWRkZGl2NzkxIGRpdmlkZSAtMCAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCi1kZGRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAotZGRkaXY3OTMgZGl2aWRlICAxICAgICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQKLWRkZGl2Nzk0IGRpdmlkZSAgMTAwMCAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCi1kZGRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZGRkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLWRkZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kZGRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZGRkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRkZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kZGRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCi1kZGRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkCi1kZGRpdjgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZAotZGRkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQKLWRkZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkCi1kZGRpdjgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZAotZGRkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgotZGRkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kZGRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRkZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgotZGRkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCi1kZGRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRkZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgotZGRkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCi1kZGRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRkZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgotZGRkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kZGRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRkZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgotZGRkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCi1kZGRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRkZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgotZGRkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRkZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQotZGRkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAotZGRkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONwotZGRkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgotZGRkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAotZGRkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMwotZGRkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgotCi1kZGRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRkZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKLWRkZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgKLWRkZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKLWRkZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKLWRkZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQKLWRkZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKLWRkZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKLQotZGRkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kZGRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCi1kZGRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKLWRkZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQotZGRkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUKLWRkZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCi1kZGRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMgotZGRkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAotZGRkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKLWRkZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41Ci1kZGRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQotZGRkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQotZGRkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQotZGRkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCi1kZGRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKLQotLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24KLWRkZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotZGRkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cwotLS0gc2lnbnMKLWRkZGl2MTA1MSBkaXZpZGUgIDFlKzI3NyAgMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA1MiBkaXZpZGUgIDFlKzI3NyAtMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA1MyBkaXZpZGUgLTFlKzI3NyAgMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA1NCBkaXZpZGUgLTFlKzI3NyAtMWUtMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA1NSBkaXZpZGUgIDFlLTI3NyAgMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRkaXYxMDU2IGRpdmlkZSAgMWUtMjc3IC0xZSszMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGRpdjEwNTcgZGl2aWRlIC0xZS0yNzcgIDFlKzMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkZGl2MTA1OCBkaXZpZGUgLTFlLTI3NyAtMWUrMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKLWRkZGl2MTA2MCBkaXZpZGUgMWUtMjkxIDFlKzEwMSAtPiAxRS0zOTIgU3Vibm9ybWFsCi1kZGRpdjEwNjEgZGl2aWRlIDFlLTI5MSAxZSsxMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbAotZGRkaXYxMDYyIGRpdmlkZSAxZS0yOTEgMWUrMTAzIC0+IDFFLTM5NCBTdWJub3JtYWwKLWRkZGl2MTA2MyBkaXZpZGUgMWUtMjkxIDFlKzEwNCAtPiAxRS0zOTUgU3Vibm9ybWFsCi1kZGRpdjEwNjQgZGl2aWRlIDFlLTI5MSAxZSsxMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbAotZGRkaXYxMDY1IGRpdmlkZSAxZS0yOTEgMWUrMTA2IC0+IDFFLTM5NyBTdWJub3JtYWwKLWRkZGl2MTA2NiBkaXZpZGUgMWUtMjkxIDFlKzEwNyAtPiAxRS0zOTggU3Vibm9ybWFsCi1kZGRpdjEwNjcgZGl2aWRlIDFlLTI5MSAxZSsxMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkZGl2MTA2OCBkaXZpZGUgMWUtMjkxIDFlKzEwOSAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRkaXYxMDY5IGRpdmlkZSAxZS0yOTEgMWUrMTEwIC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0tLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddCi1kZGRpdjEwNzAgZGl2aWRlIDFlKzYwIDFlLTMyMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCi1kZGRpdjEwNzEgZGl2aWRlIDFlKzYwIDFlLTMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZAotZGRkaXYxMDcyIGRpdmlkZSAxZSs2MCAxZS0zMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkCi1kZGRpdjEwNzMgZGl2aWRlIDFlKzYwIDFlLTMyNCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCi1kZGRpdjEwNzQgZGl2aWRlIDFlKzYwIDFlLTMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA3NSBkaXZpZGUgMWUrNjAgMWUtMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRkaXYxMDc2IGRpdmlkZSAxZSs2MCAxZS0zMjcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjEwNzcgZGl2aWRlIDFlKzYwIDFlLTMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTA3OCBkaXZpZGUgMWUrNjAgMWUtMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRkaXYxMDc5IGRpdmlkZSAxZSs2MCAxZS0zMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLWRkZGl2MTEwMSBkaXZpZGUgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAxLjAwMDBFLTM5NCBTdWJub3JtYWwKLWRkZGl2MTEwMiBkaXZpZGUgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwKLWRkZGl2MTEwMyBkaXZpZGUgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwKLWRkZGl2MTEwNCBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSszICAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwKLWRkZGl2MTEwNSBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kZGRpdjExMDYgZGl2aWRlICAxLjNFLTM5NCAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMTA3IGRpdmlkZSAgMS41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTEwOCBkaXZpZGUgIDEuN0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjExMDkgZGl2aWRlICAyLjNFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMTEwIGRpdmlkZSAgMi41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTExMSBkaXZpZGUgIDIuN0UtMzk0ICAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjExMTIgZGl2aWRlICAxLjQ5RS0zOTQgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMTEzIGRpdmlkZSAgMS41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTExNCBkaXZpZGUgIDEuNTFFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjExMTUgZGl2aWRlICAyLjQ5RS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMTE2IGRpdmlkZSAgMi41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTExNyBkaXZpZGUgIDIuNTFFLTM5NCAgICAxZSs0ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRkZGl2MTExOCBkaXZpZGUgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbAotZGRkaXYxMTE5IGRpdmlkZSAgM0UtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRkaXYxMTIwIGRpdmlkZSAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRkaXYxMTIxIGRpdmlkZSAgN0UtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTEyMiBkaXZpZGUgIDlFLTM5NCAgICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjExMjMgZGl2aWRlICA5LjlFLTM5NCAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kZGRpdjExMjQgZGl2aWRlICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTFFLTM5OCAgICBTdWJub3JtYWwKLWRkZGl2MTEyNSBkaXZpZGUgIDNFLTM5NCAgICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkZGl2MTEyNiBkaXZpZGUgLTVFLTM5NCAgICAgICAxZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkZGl2MTEyNyBkaXZpZGUgIDdFLTM5NCAgICAgIC0xZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjExMjggZGl2aWRlIC05RS0zOTQgICAgICAgMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRkaXYxMTI5IGRpdmlkZSAgOS45RS0zOTQgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MTEzMCBkaXZpZGUgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotZGRkaXYxMTMxIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzIwMCAtPiAwRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRkaXYxMTMyIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRkZGl2MTEzMyBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAotZGRkaXYxMTM0IGRpdmlkZSAgMi4wRS0xOTkgICAgIDJlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCi1kZGRpdjExMzUgZGl2aWRlICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDEuMEUtMzk3ICBTdWJub3JtYWwKLWRkZGl2MTEzNiBkaXZpZGUgMTAuMEUtMTk5ICAgIDEwZSsxOTggLT4gMS4wRS0zOTcgIFN1Ym5vcm1hbAotZGRkaXYxMTM3IGRpdmlkZSAzMC4wRS0xOTkgICAgMzBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsCi0KLS0tIHJhbmRvbXMKLWRkZGl2MjAxMCAgZGl2aWRlICAtMy4zMDMyMjY3MTQ5MDA3MTFFLTM1ICAgOC43OTY1Nzg4NDI3MTMxODNFKzczICAgLT4gIC0zLjc1NTEyNjU5NDA1ODc4M0UtMTA5IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDExICBkaXZpZGUgICA5MzMxNTMzMjc4MjEwNzMuNiAgICAgICA2ODc4MjE4MTA5MDI0Ni4yNSAgICAgICAtPiAgIDEzLjU2Njc4ODg1NDc1NzYzIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDEyICBkaXZpZGUgICA1LjA0NzUyNDM2MDU3OTA2RS03MiAgIC04LjE3OTQ4MTc3MTIzODY0MkUrNjQgICAtPiAgLTYuMTcwOTU4NjI3NjMyODM1RS0xMzcgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTMgIGRpdmlkZSAgLTM3MDc2MTMzMDk1ODIzMTggICAgICAgIDMzOTQ5MTExOTY1MDMuMDQ4ICAgICAgIC0+ICAtMTA5Mi4xMDkwNzAwMTA4MzYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTQgIGRpdmlkZSAgIDk5Njg5LjA1NTUxOTA0NjEgICAgICAgLTQuNzM1MjA4NTUzODkxNDY0ICAgICAgIC0+ICAtMjEwNTIuNzI3NTM3NjU0MTEgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTUgIGRpdmlkZSAgLTE0NDc5MTU3NzU2MTMzMjkgICAgICAgIDI2OTc1MDc5Ny44MTg0ODc1ICAgICAgIC0+ICAtNTM2NzYwNS4xNjQ5MjU2NTMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTYgIGRpdmlkZSAgLTkuMzk0ODgxMzA0MjI1MjU4RS0xOSAgLTgzMDU4NS4wMjUyNjcxNjM2ICAgICAgIC0+ICAgMS4xMzExMTYxNDMyNTEzNThFLTI0IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDE3ICBkaXZpZGUgIC0xLjA1NjI4MzQzMjczODkzNCAgICAgICA4OC41ODc1NDU1NTEyNDAxMyAgICAgICAtPiAgLTAuMDExOTIzNjExMDAxNTkzNTIgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTggIGRpdmlkZSAgIDU3NjMyMjA5MzMzNDMuMDgxICAgICAgIDY4OTA4OTU2NzAyNTA1Mi4xICAgICAgIC0+ICAgMC4wMDgzNjM1Mjk1MTY1MjQ0NTYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMTkgIGRpdmlkZSAgIDg3MzgxOS4xMjIxMDMyMTYgICAgICAgIDkuNzQwNjEyNDk0NTIzMzAwRS00OSAgIC0+ICAgOC45NzA4ODQ3NjMwOTM5NDhFKzUzIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDIwICBkaXZpZGUgICA4MDIyOTE0LjgzODUzMzU3NiAgICAgICA2MTc4LjU2NjgwMTc0MjcxMyAgICAgICAtPiAgIDEyOTguNTA3NDIwMjQzNTgzIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDIxICBkaXZpZGUgICAyMDM5ODIuNzYwNTY1MDM2MyAgICAgIC0yMTU4LjI4MzYzOTA1MzQzNSAgICAgICAtPiAgLTk0LjUxMTU2MzIwNDIyMTY4IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDIyICBkaXZpZGUgICA4MDMuNjMxMDU0NzAxMzAzMCAgICAgICA3MTAxMTQzNzk1Mzk5LjIzOCAgICAgICAtPiAgIDEuMTMxNjkyNDExNjExMTY2RS0xMCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjAyMyAgZGl2aWRlICAgOS4yNTE2OTc4NDIxMjMzOTlFLTgyICAtMS4zNDIzNTAyMjA2MDYxMTlFLTcgICAgLT4gIC02Ljg5MjE2Mzk4MjMyMTkzNkUtNzUgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMjQgIGRpdmlkZSAgLTEuOTgwNjAwNjQ1NjM3OTkyRS01MyAgLTUuNDc0MjYyNzUzMjE0NDU3RSs3NyAgIC0+ICAgMy42MTgwMjI2MTc3MDMxNjhFLTEzMSBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjAyNSAgZGl2aWRlICAtMjEwLjAzMjI5OTYzNTE2OTAgICAgICAtOC41ODA5NTE4MzU4NzI4NDNFKzgwICAgLT4gICAyLjQ0NzY1NzM2NTQzNDk3MUUtNzkgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMjYgIGRpdmlkZSAgLTEuODIxOTgwMzE0MDIwMzcwRSs4NSAgLTMuMDE4OTE1MjY3MTM4MTY1ICAgICAgIC0+ICAgNi4wMzUyMTUxNDQ1MDMwNDJFKzg0IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDI3ICBkaXZpZGUgIC03NzIyNjQ1MDM2MDEuMTA0NyAgICAgICA1LjE1ODI1ODI3MTQwODk4OEUtODYgICAtPiAgLTEuNDk3MTQxOTg2NjMwNjE0RSs5NyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjAyOCAgZGl2aWRlICAtNzY3LjA1MzI0MTU4NDcxMDYgICAgICAgMi43MDAwMjcyMjgwMjg5MzlFLTU5ICAgLT4gIC0yLjg0MDkwOTI4Mjc3Mjk0MUUrNjEgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMjkgIGRpdmlkZSAgIDQ5NjcyNC44NTQ4MjUwMDkzICAgICAgIDcuMzI3MDA1ODgxNjMxMDBFKzY2ICAgIC0+ICAgNi43NzkzNzAyMjA5MjkwMTNFLTYyIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDMwICBkaXZpZGUgIC0zMDQyMzI2NTE0NDc3MDMuOSAgICAgIC0xMDguOTczMDgwODY1NzQ0MCAgICAgICAtPiAgIDI3OTE4MTQ3MjE4NjIuNTY1IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDMxICBkaXZpZGUgIC03LjIzMzgxNzE5MjY5OTQwNUUrNDIgIC01NzExMzAyMDA0LjE0OTQxMSAgICAgICAtPiAgIDEuMjY2NTc5MzUyMjExNDMwRSszMyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjAzMiAgZGl2aWRlICAtOS45OTkyMjE0NDQ5MTI3NDVFKzk2ICAgNDAxMDU2OTQwNjQ0NjE5NyAgICAgICAgLT4gIC0yLjQ5MzIxNzQwNDIwMjI1MEUrODEgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMzMgIGRpdmlkZSAgLTE4MzcyNzIuMDYxOTM3NjIyICAgICAgIDguMzU2MzIyODM4MDY2NzYyICAgICAgIC0+ICAtMjE5ODY2LjA5MzkxOTY4ODIgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMzQgIGRpdmlkZSAgIDIxNjguNTE3NTU1NjA2NTI5ICAgICAgIDIwOS4xOTEwMjU4NjE1MDYxICAgICAgIC0+ICAgMTAuMzY2MjA3Mzc3NTY3ODQgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMzUgIGRpdmlkZSAgLTEuODg0Mzg5NzkwNTc2MzcxRSs4OCAgIDIuOTUxODE5NTM4NzA1ODNFKzIwICAgIC0+ICAtNi4zODM4MjQ1MDUwNzk4MjhFKzY3IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDM2ICBkaXZpZGUgICA3MzIyNjMuNjAzNzQzODE5NiAgICAgICA5NjEyMjIuMzYzNDQ0Njg4OSAgICAgICAtPiAgIDAuNzYxODA0NTg1MDY5ODI2OSBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjAzNyAgZGl2aWRlICAtODEzNDYxNDE5LjAzNDgzMzYgICAgICAgNS4zNzYyOTM3NTM4MDkxNDNFKzg0ICAgLT4gIC0xLjUxMzA1MjQwNDI4NTkyN0UtNzYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwMzggIGRpdmlkZSAgLTQ1NTYyMTMzNTA4MTA4LjUwICAgICAgLTkuNzc2ODQzNDk0NjkwMTA3RSs1MSAgIC0+ICAgNC42NjAyMDg5NDUwMjk1MTlFLTM5IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDM5ICBkaXZpZGUgIC02LjQ4OTM5MzE3MjQ0MTAxNkUrODAgIC05MTAxOTY1LjA5Nzg1MjExMyAgICAgICAtPiAgIDcuMTI5NjYxNjc0ODk3NDIxRSs3MyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjA0MCAgZGl2aWRlICAgMy42OTQ1NzYyMzcxMTczNDlFKzkzICAgNjY4MzUxMi4wMTI2MjIwMDMgICAgICAgLT4gICA1LjUyNzg5NjQ1NjQ0MzkxMkUrODYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNDEgIGRpdmlkZSAgLTIuMjUyODc3NzI2NDAzMjcyRSsxOSAgLTc0NTE5MTMyNTYuMTgxMzY3ICAgICAgIC0+ICAgMzAyMzIyMDU0Ni4xMjU1MzEgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNDIgIGRpdmlkZSAgIDUxODMwMy4xOTg5MTExODQyICAgICAgIDUwLjAxNTg3MDIwNDc0MTMzICAgICAgIC0+ICAgMTAzNjIuNzc0NzkxMDcxMjMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNDMgIGRpdmlkZSAgIDIuOTAyMDg3ODgxODgwMTAzRSsyNCAgIDMzLjMyNDAwOTkyMzA1NzAyICAgICAgIC0+ICAgOC43MDg2OTk0ODg5ODk1NzhFKzIyIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDQ0ICBkaXZpZGUgICA1NDk2MTkuNDU1OTUxMDU1NyAgICAgICAxNjYwODI0ODQ1MTk2MzM4ICAgICAgICAtPiAgIDMuMzA5MzE2MTk2MzUxMTA0RS0xMCBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjA0NSAgZGl2aWRlICAtNjc3NTY3MDc3NDY4NDA0MyAgICAgICAgODI5MjE1MjAyMy4wNzcyNjIgICAgICAgLT4gIC04MTcxMTguNDk0MTg5MTA2MiBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjA0NiAgZGl2aWRlICAtNzcuNTA5MjM5MjE1MjQwNzkgICAgICAtNS42MzY4ODI2NTU0MjU4MTVFKzc0ICAgLT4gICAxLjM3NTAzNzMwMjU4ODQwNUUtNzMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNDcgIGRpdmlkZSAgLTIuOTg0ODg5NDU5NjA1MTQ5RS0xMCAgLTg4MTA2MTU2Nzg0MTIyLjk5ICAgICAgIC0+ICAgMy4zODc4MzMwMDU3MjEzODRFLTI0IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDQ4ICBkaXZpZGUgICAwLjk0OTUxNzI5Mzk5NzA4NSAgICAgICA0NDc2NzExNS45NjQ1MDk5OCAgICAgICAtPiAgIDIuMTIxMDE1MTEwMTc1NTg5RS04IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDQ5ICBkaXZpZGUgIC0yNzYwOTM3MjExLjA4NDUyMSAgICAgIC0xMDg3MDE1ODc2OTc1NDA4ICAgICAgICAtPiAgIDAuMDAwMDAyNTM5OTIzNTM3MDU3MDI0IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDUwICBkaXZpZGUgICAyODQzODM1MS44NTAzMDUzNiAgICAgIC00LjIwOTM5NzkwNDA4ODYyNEUtNDcgICAtPiAgLTYuNzU1OTE5MTM1NzcwNjg4RSs1MyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MjA1MSAgZGl2aWRlICAtODU1NjI3MzEuNjgyMDk1NiAgICAgICAtNy4xNjYwNDU0NDI1MzAxODVFKzQ1ICAgLT4gICAxLjE5NDAwMjA4MDYyMTU0MkUtMzggSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNTIgIGRpdmlkZSAgIDI1MzM4MDI4NTIxNjUuMjUgICAgICAgIDcxNTQuMTE5NjA2MjM1OTU1ICAgICAgIC0+ICAgMzU0MTczOTU3LjMzMTc1MDEgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNTMgIGRpdmlkZSAgLTg4NTg4MzEzNDY4NTEuNDc0ICAgICAgIDk3LjU5NzM0MjA4ODAxNzE2ICAgICAgIC0+ICAtOTA3NjkxODY1MDkuODM1NzcgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNTQgIGRpdmlkZSAgIDE3Njc4MzYyOTgwMTM4Ny41ICAgICAgIDg0MDA3MzI2My4zMTA5ODE3ICAgICAgIC0+ICAgMjEwNDM4LjM0ODA4NDgyMDYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNTUgIGRpdmlkZSAgLTQ5MzUwNjQ3MTc5NjE3NS42ICAgICAgIDc5NzMzODk0NzkwODIyLjAzICAgICAgIC0+ICAtNi4xODk0MTg4NTQ5NDA3NDYgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNTYgIGRpdmlkZSAgIDc5MC4xNjgyNTQyMTAzNDQ1ICAgICAgIDgyOS45NDQ5MzcwMzY3NDM1ICAgICAgIC0+ICAgMC45NTIwNzMxMDYyMzcxMjE0IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDU3ICBkaXZpZGUgIC04OTIwNDU5ODM4LjU4MzE2NCAgICAgIC00NzY3Ljg4OTE4Nzg5OTIxNCAgICAgICAtPiAgIDE4NzA5NDUuMjk0MDM1NTgxIEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDU4ICBkaXZpZGUgICA1MzUzNjY4NzE2NDQyMi4xICAgICAgICA1MzEzNy41MDA3MDMyNjg5ICAgICAgICAtPiAgIDEwMDc1MTIzMzAuMzg1Njk4IEluZXhhY3QgUm91bmRlZAotZGRkaXYyMDU5ICBkaXZpZGUgICA0LjA1MTUzMjMxMTE0NjU2MUUtNzQgIC0yLjM0MzA4OTc2ODk3MjI2MUUrOTQgICAtPiAgLTEuNzI5MTQwODgyNjA2MzMyRS0xNjggSW5leGFjdCBSb3VuZGVkCi1kZGRpdjIwNjAgIGRpdmlkZSAgLTE0ODQ3NzU4Nzc4NjM2Ljg4ICAgICAgIDMuMDYyNTQzNTE2MzgzODA3RS00MyAgIC0+ICAtNC44NDgxNzg4NzQ1ODc0OTdFKzU1IEluZXhhY3QgUm91bmRlZAotCi0tLSBEaXZpc2lvbiBwcm9iYWJseSBoYXMgcHJlLXJvdW5kaW5nLCBzbyBuZWVkIHRvIHRlc3Qgcm91bmRpbmcKLS0tIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gYXNzdW1lIGluY2x1ZGVkIHRocm91Z2ggb3RoZXIgdGVzdHM7Ci0tLSB0ZXN0cyBpbmNsdWRlIHNpbXBsZSByb3VuZGluZyBhbmQgYWxzbyB0aGUgdHJpY2t5IGNhc2VzIG9mIHN0aWNreQotLS0gYml0cyBmb2xsb3dpbmcgdHdvIHplcm9zCi0tLQotLS0gICAxLzk5OTk5IGdpdmVzIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMQotLS0gICAgICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLS0tCi0tLSAgIDEvOTk5OTk5IGdpdmVzIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci0KLXJvdW5kaW5nOiBjZWlsaW5nCi1kZGRpdjMwMDEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDAyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAwMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAwNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGZsb29yCi1kZGRpdjMwMTEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDEyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NiBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAxMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAxNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IHVwCi1kZGRpdjMwMjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzM0IEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDIyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAyMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzAyNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGRvd24KLWRkZGl2MzAzMSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjMwMzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDMzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDM0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl91cAotZGRkaXYzMDQxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzA0MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjMwNDMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjMwNDQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2Rvd24KLWRkZGl2MzA1MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjMwNTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDUzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDU0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl9ldmVuCi1kZGRpdjMwNjEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDYyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzA2MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2MzA2NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IDA1dXAKLWRkZGl2MzA3MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjMwNzIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDczICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZAotZGRkaXYzMDc0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAxIEluZXhhY3QgUm91bmRlZAotCi0tLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQotcm91bmRpbmc6IGhhbGZfZXZlbgotZGRkaXY0MDAxIGRpdmlkZSAgMzE5NTM4NTE5MjkxNjkxNyAgIDMxOTUzODUxOTI5NDY2OTUgIC0+ICAwLjk5OTk5OTk5OTk5MDY4MDkgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDAyIGRpdmlkZSAgMTM5MzcyMzA2NzUyNjk5MyAgIDEzOTM3MjMwNjc1MTk0NzUgIC0+ICAxLjAwMDAwMDAwMDAwNTM5NCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMDMgZGl2aWRlICAgNzU5OTg1NTQzNzAyMzAyICAgIDc1OTk4NTU0MzY3NDAxNSAgLT4gIDEuMDAwMDAwMDAwMDM3MjIwICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAwNCBkaXZpZGUgIDk1NzkxNTg0NTYwMjczMDIgICA5NTc5MTU4NDU2MDM2ODY0ICAtPiAgMC45OTk5OTk5OTk5OTkwMDE4ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAwNSBkaXZpZGUgIDcwNzkzOTgyOTkxNDM1NjkgICA3MDc5Mzk4Mjk5MTU2OTA0ICAtPiAgMC45OTk5OTk5OTk5OTgxMTY0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAwNiBkaXZpZGUgIDY2MzYxNjkyNTUzNjY1OTggICA2NjM2MTY5MjU1MzM2Mzg2ICAtPiAgMS4wMDAwMDAwMDAwMDQ1NTMgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDA3IGRpdmlkZSAgNjk2NDgxMzk3MTM0MDA5MCAgIDY5NjQ4MTM5NzEzMjE1NTQgIC0+ICAxLjAwMDAwMDAwMDAwMjY2MSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMDggZGl2aWRlICA0MTgyMjc1MjI1NDgwNzg0ICAgNDE4MjI3NTIyNTQ1NDAwOSAgLT4gIDEuMDAwMDAwMDAwMDA2NDAyICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAwOSBkaXZpZGUgIDkyMjgzMjUxMjQ5MzgwMjkgICA5MjI4MzI1MTI0OTE4NzMwICAtPiAgMS4wMDAwMDAwMDAwMDIwOTEgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDEwIGRpdmlkZSAgMzQyODM0NjMzODYzMDE5MiAgIDM0MjgzNDYzMzg2MDk4NDMgIC0+ICAxLjAwMDAwMDAwMDAwNTkzNiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMTEgZGl2aWRlICAyMTQzNTExNTUwNzIyODkzICAgMjE0MzUxMTU1MDc1MTc1NCAgLT4gIDAuOTk5OTk5OTk5OTg2NTM1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMTIgZGl2aWRlICAxNjcyNzMyOTI0Mzk2Nzg1ICAgMTY3MjczMjkyNDQwMTgxMSAgLT4gIDAuOTk5OTk5OTk5OTk2OTk1MyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMTMgZGl2aWRlICA0MTkwNzE0NjExOTQ4MjE2ICAgNDE5MDcxNDYxMTk0ODY2NCAgLT4gIDAuOTk5OTk5OTk5OTk5ODkzMSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMTQgZGl2aWRlICAzOTQyMjU0ODAwODQ4ODc3ICAgMzk0MjI1NDgwMDgxNDU1NiAgLT4gIDEuMDAwMDAwMDAwMDA4NzA2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAxNSBkaXZpZGUgIDI4NTQ0NTk4MjY5NTIzMzQgICAyODU0NDU5ODI2OTYwNzYyICAtPiAgMC45OTk5OTk5OTk5OTcwNDc0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAxNiBkaXZpZGUgIDI4NTMyNTg5NTM2NjQ3MzEgICAyODUzMjU4OTUzNjg0NDcxICAtPiAgMC45OTk5OTk5OTk5OTMwODE2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAxNyBkaXZpZGUgIDk0NTM1MTI2MzgxMjU5NzggICA5NDUzNTEyNjM4MTQ2NDI1ICAtPiAgMC45OTk5OTk5OTk5OTc4MzcxICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAxOCBkaXZpZGUgICAzMzk0NzY2MzM5NDAzNjkgICAgMzM5NDc2NjMzOTEyODg3ICAtPiAgMS4wMDAwMDAwMDAwODA5NTQgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDE5IGRpdmlkZSAgNDU0MjE4MTQ5MjY4ODQ2NyAgIDQ1NDIxODE0OTI2OTc3MzUgIC0+ICAwLjk5OTk5OTk5OTk5Nzk1OTYgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDIwIGRpdmlkZSAgNzMxMjYwMDE5MjM5OTE5NyAgIDczMTI2MDAxOTIzOTU0MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDUxNiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjEgZGl2aWRlICAxODExNjc0OTg1NTcwMTExICAgMTgxMTY3NDk4NTYwMzkzNSAgLT4gIDAuOTk5OTk5OTk5OTgxMzMwMCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjIgZGl2aWRlICAxNzA2NDYyNjM5MDAzNDgxICAgMTcwNjQ2MjYzOTAxNzc0MCAgLT4gIDAuOTk5OTk5OTk5OTkxNjQ0MSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjMgZGl2aWRlICA2Njk3MDUyNjU0OTQwMzY4ICAgNjY5NzA1MjY1NDkzNDExMCAgLT4gIDEuMDAwMDAwMDAwMDAwOTM0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAyNCBkaXZpZGUgIDUwMTUyODM2NjQyNzc1MzkgICA1MDE1MjgzNjY0MzEwNzE5ICAtPiAgMC45OTk5OTk5OTk5OTMzODQyICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAyNSBkaXZpZGUgIDIzNTk1MDE1NjE1Mzc0NjQgICAyMzU5NTAxNTYxNTAyNDY0ICAtPiAgMS4wMDAwMDAwMDAwMTQ4MzQgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDI2IGRpdmlkZSAgMjY2OTg1MDIyNzkwOTE1NyAgIDI2Njk4NTAyMjc5MDE1NDggIC0+ICAxLjAwMDAwMDAwMDAwMjg1MCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjcgZGl2aWRlICA5MzI5NzI1NTQ2OTc0NjQ4ICAgOTMyOTcyNTU0NzAwMjQ0NSAgLT4gIDAuOTk5OTk5OTk5OTk3MDIwNiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjggZGl2aWRlICAzMjI4NTYyODY3MDcxMjQ4ICAgMzIyODU2Mjg2NzEwNjIwNiAgLT4gIDAuOTk5OTk5OTk5OTg5MTcyMyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMjkgZGl2aWRlICA0ODYyMjI2NjQ0OTIxMTc1ICAgNDg2MjIyNjY0NDkwOTM4MCAgLT4gIDEuMDAwMDAwMDAwMDAyNDI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAzMCBkaXZpZGUgIDEwMjIyNjc5OTcwNTQ1MjkgICAxMDIyMjY3OTk3MDcxMzI5ICAtPiAgMC45OTk5OTk5OTk5ODM1NjYwICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAzMSBkaXZpZGUgIDEwNDg3Nzc0ODIwMjM3MTkgICAxMDQ4Nzc3NDgyMDAwOTQ4ICAtPiAgMS4wMDAwMDAwMDAwMjE3MTIgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDMyIGRpdmlkZSAgOTk4MDExMzc3NzMzNzA5OCAgIDk5ODAxMTM3NzczMzA1MzkgIC0+ICAxLjAwMDAwMDAwMDAwMDY1NyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMzMgZGl2aWRlICA3NTA2ODM5MTY3OTYzOTA4ICAgNzUwNjgzOTE2Nzk0MjkwMSAgLT4gIDEuMDAwMDAwMDAwMDAyNzk4ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDAzNCBkaXZpZGUgICAyMzExMTk3NTE5Nzc4NjAgICAgMjMxMTE5NzUxOTYyNDUzICAtPiAgMS4wMDAwMDAwMDAwNjY2NjIgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDM1IGRpdmlkZSAgNDAzNDkwMzY2NDc2Mjk2MiAgIDQwMzQ5MDM2NjQ3OTU1MjYgIC0+ICAwLjk5OTk5OTk5OTk5MTkyOTQgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDM2IGRpdmlkZSAgNTcwMDEyMjE1MjI3NDY5NiAgIDU3MDAxMjIxNTIyNTEzODYgIC0+ICAxLjAwMDAwMDAwMDAwNDA4OSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMzcgZGl2aWRlICA2ODY5NTk5NTkwMjkzMTEwICAgNjg2OTU5OTU5MDI5MzQ5NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTQ0MCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMzggZGl2aWRlICA1NTc2MjgxOTYwMDkyNzk3ICAgNTU3NjI4MTk2MDEwNTU3OSAgLT4gIDAuOTk5OTk5OTk5OTk3NzA3OCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwMzkgZGl2aWRlICAyMzA0ODQ0ODg4MzgxMzE4ICAgMjMwNDg0NDg4ODM1MzA3MyAgLT4gIDEuMDAwMDAwMDAwMDEyMjU1ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA0MCBkaXZpZGUgIDMyNjU5MzM2NTE2NTY0NTIgICAzMjY1OTMzNjUxNjgyNzc5ICAtPiAgMC45OTk5OTk5OTk5OTE5Mzg5ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA0MSBkaXZpZGUgIDUyMzU3MTQ5ODUwNzk5MTQgICA1MjM1NzE0OTg1MDY2MTMxICAtPiAgMS4wMDAwMDAwMDAwMDI2MzIgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDQyIGRpdmlkZSAgNTU3ODQ4MTU3MjgyNzU1MSAgIDU1Nzg0ODE1NzI4MjI5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDgyNiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNDMgZGl2aWRlICA0OTA5NjE2MDgxMzk2MTM0ICAgNDkwOTYxNjA4MTM3MzA3NiAgLT4gIDEuMDAwMDAwMDAwMDA0Njk2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA0NCBkaXZpZGUgICA2MzY0NDcyMjQzNDk1MzcgICAgNjM2NDQ3MjI0MzM4NzU3ICAtPiAgMS4wMDAwMDAwMDAwMTY5MzggIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDQ1IGRpdmlkZSAgMTUzOTM3MzQyODM5NjY0MCAgIDE1MzkzNzM0MjgzNjQ3MjcgIC0+ICAxLjAwMDAwMDAwMDAyMDczMSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNDYgZGl2aWRlICAyMDI4Nzg2NzA3Mzc3ODkzICAgMjAyODc4NjcwNzM3ODg2NiAgLT4gIDAuOTk5OTk5OTk5OTk5NTIwNCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNDcgZGl2aWRlICAgMTM3NjQzMjYwNDg2MjIyICAgIDEzNzY0MzI2MDQ4NzQxOSAgLT4gIDAuOTk5OTk5OTk5OTkxMzAzNiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNDggZGl2aWRlICAgMjQ3NDUxNTE5NzQ2NzY1ICAgIDI0NzQ1MTUxOTc1MjI2NyAgLT4gIDAuOTk5OTk5OTk5OTc3NzY1MyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNDkgZGl2aWRlICA3ODc3ODU4NDc1MDIyMDU0ICAgNzg3Nzg1ODQ3NDk5OTc5NCAgLT4gIDEuMDAwMDAwMDAwMDAyODI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA1MCBkaXZpZGUgIDczMzMyNDI2OTQ3NjYyNTggICA3MzMzMjQyNjk0NzQ0NjI4ICAtPiAgMS4wMDAwMDAwMDAwMDI5NTAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDUxIGRpdmlkZSAgIDEyNDA1MTUwMzY5ODU5MiAgICAxMjQwNTE1MDM2OTkzOTcgIC0+ICAwLjk5OTk5OTk5OTk5MzUxMDggIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDUyIGRpdmlkZSAgODk0NDczNzQzMjM4NTE4OCAgIDg5NDQ3Mzc0MzI0MDY4NjAgIC0+ICAwLjk5OTk5OTk5OTk5NzU3NzEgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDUzIGRpdmlkZSAgOTg4Mzk0ODkyMzQwNjg3NCAgIDk4ODM5NDg5MjM0MjQ4NDMgIC0+ICAwLjk5OTk5OTk5OTk5ODE4MjAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDU0IGRpdmlkZSAgNjgyOTE3ODc0MTY1NDI4NCAgIDY4MjkxNzg3NDE2NzE5NzMgIC0+ICAwLjk5OTk5OTk5OTk5NzQwOTggIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDU1IGRpdmlkZSAgNzM0Mjc1MjQ3OTc2ODEyMiAgIDczNDI3NTI0Nzk3OTMzODUgIC0+ICAwLjk5OTk5OTk5OTk5NjU1OTUgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDU2IGRpdmlkZSAgODA2NjQyNjU3OTAwODc4MyAgIDgwNjY0MjY1Nzg5Nzc1NjMgIC0+ICAxLjAwMDAwMDAwMDAwMzg3MCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNTcgZGl2aWRlICA4OTkyNzc1MDcxMzgzMjk1ICAgODk5Mjc3NTA3MTM1MjcxMiAgLT4gIDEuMDAwMDAwMDAwMDAzNDAxICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA1OCBkaXZpZGUgIDU0ODUwMTE3NTU1NDU2NDEgICA1NDg1MDExNzU1NTQzNjExICAtPiAgMS4wMDAwMDAwMDAwMDAzNzAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDU5IGRpdmlkZSAgNTc3OTk4MzA1NDM1MzkxOCAgIDU3Nzk5ODMwNTQzNjUzMDAgIC0+ICAwLjk5OTk5OTk5OTk5ODAzMDggIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDYwIGRpdmlkZSAgOTUwMjI2NTEwMjcxMzc3NCAgIDk1MDIyNjUxMDI3MzUyMDggIC0+ICAwLjk5OTk5OTk5OTk5Nzc0NDMgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDYxIGRpdmlkZSAgMjEwOTU1ODM5OTEzMDk4MSAgIDIxMDk1NTgzOTkxMTYyODEgIC0+ICAxLjAwMDAwMDAwMDAwNjk2OCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNjIgZGl2aWRlICA1Mjk2MTgyNjM2MzUwNDcxICAgNTI5NjE4MjYzNjM1MTUyMSAgLT4gIDAuOTk5OTk5OTk5OTk5ODAxNyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNjMgZGl2aWRlICAxNDQwMDE5MjI1NTkxODgzICAgMTQ0MDAxOTIyNTYwMTg0NCAgLT4gIDAuOTk5OTk5OTk5OTkzMDgyNyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNjQgZGl2aWRlICA4MTgyMTEwNzkxODgxMzQxICAgODE4MjExMDc5MTg0NzE3NCAgLT4gIDEuMDAwMDAwMDAwMDA0MTc2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA2NSBkaXZpZGUgICA0ODkwOTgyMzU1MTIwNjAgICAgNDg5MDk4MjM1NTM0NTE2ICAtPiAgMC45OTk5OTk5OTk5NTQwODY5ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA2NiBkaXZpZGUgIDY0NzU2ODcwODQ3ODIwMzggICA2NDc1Njg3MDg0NzU2MDg5ICAtPiAgMS4wMDAwMDAwMDAwMDQwMDcgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDY3IGRpdmlkZSAgODA5NDM0ODU1NTczNjk0OCAgIDgwOTQzNDg1NTU3NTkyMzYgIC0+ICAwLjk5OTk5OTk5OTk5NzI0NjUgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDY4IGRpdmlkZSAgMTk4Mjc2NjgxNjI5MTU0MyAgIDE5ODI3NjY4MTYzMDk0NjMgIC0+ICAwLjk5OTk5OTk5OTk5MDk2MjEgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDY5IGRpdmlkZSAgOTI3NzMxNDMwMDExMzI1MSAgIDkyNzczMTQzMDAwODQ0NjcgIC0+ICAxLjAwMDAwMDAwMDAwMzEwMyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNzAgZGl2aWRlICA0MzM1NTMyOTU5MzE4OTM0ICAgNDMzNTUzMjk1OTI5MzE2NyAgLT4gIDEuMDAwMDAwMDAwMDA1OTQzICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA3MSBkaXZpZGUgIDc3NjcxMTMwMzI5ODEzNDggICA3NzY3MTEzMDMyOTY4MTMyICAtPiAgMS4wMDAwMDAwMDAwMDE3MDIgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDcyIGRpdmlkZSAgMTU3ODU0ODA1MzM0Mjg2OCAgIDE1Nzg1NDgwNTMzNzA0NDggIC0+ICAwLjk5OTk5OTk5OTk4MjUyODIgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDczIGRpdmlkZSAgMzc5MDQyMDY4NjY2Njg5OCAgIDM3OTA0MjA2ODY2MzYzMTUgIC0+ICAxLjAwMDAwMDAwMDAwODA2OCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNzQgZGl2aWRlICAgODcxNjgyNDIxOTU1MTQ3ICAgIDg3MTY4MjQyMTk3NjQ0MSAgLT4gIDAuOTk5OTk5OTk5OTc1NTcxNCAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNzUgZGl2aWRlICAgNzQ0MTQxMDU0NDc5OTQwICAgIDc0NDE0MTA1NDUxMjMyOSAgLT4gIDAuOTk5OTk5OTk5OTU2NDc0NiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNzYgZGl2aWRlICA4OTU2ODI0MTgzNjcwNzM1ICAgODk1NjgyNDE4MzY0MTc0MSAgLT4gIDEuMDAwMDAwMDAwMDAzMjM3ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA3NyBkaXZpZGUgIDgzMzcyOTE2OTQ0ODU2ODIgICA4MzM3MjkxNjk0NDUxMTkzICAtPiAgMS4wMDAwMDAwMDAwMDQxMzcgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDc4IGRpdmlkZSAgNDEwNzc3NTk0NDY4MzY2OSAgIDQxMDc3NzU5NDQ2NTcwOTcgIC0+ICAxLjAwMDAwMDAwMDAwNjQ2OSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwNzkgZGl2aWRlICA4NjkxOTAwMDU3OTY0NjQ4ICAgODY5MTkwMDA1Nzk5NzU1NSAgLT4gIDAuOTk5OTk5OTk5OTk2MjE0MSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwODAgZGl2aWRlICAyMjI5NTI4NTIwNTM2NDYyICAgMjIyOTUyODUyMDUwMjMzNyAgLT4gIDEuMDAwMDAwMDAwMDE1MzA2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA4MSBkaXZpZGUgICAzOTg0NDIwODM3NzQzMjIgICAgMzk4NDQyMDgzNzQ2MjczICAtPiAgMS4wMDAwMDAwMDAwNzAzOTcgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDgyIGRpdmlkZSAgNTMxOTgxOTc3NjgwODc1OSAgIDUzMTk4MTk3NzY4MzgzMTMgIC0+ICAwLjk5OTk5OTk5OTk5NDQ0NDUgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDgzIGRpdmlkZSAgNzcxMDQ5MTI5OTA2Njg1NSAgIDc3MTA0OTEyOTkwNDE4NTggIC0+ICAxLjAwMDAwMDAwMDAwMzI0MiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwODQgZGl2aWRlICA5MDgzMjMxMjk2MDg3MjY2ICAgOTA4MzIzMTI5NjA1ODE2MCAgLT4gIDEuMDAwMDAwMDAwMDAzMjA0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA4NSBkaXZpZGUgIDM1NjY4NzM1NzQ5MDQ1NTkgICAzNTY2ODczNTc0ODkwMzI4ICAtPiAgMS4wMDAwMDAwMDAwMDM5OTAgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDg2IGRpdmlkZSAgIDU5NjM0MzI5MDU1MDUyNSAgICA1OTYzNDMyOTA1NTU2MTQgIC0+ICAwLjk5OTk5OTk5OTk5MTQ2NjMgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDg3IGRpdmlkZSAgIDI3ODIyNzkyNTA5MzE5MiAgICAyNzgyMjc5MjUwNjgxMDQgIC0+ICAxLjAwMDAwMDAwMDA5MDE3MSAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwODggZGl2aWRlICAzMjkyOTAyOTU4NDkwNjQ5ICAgMzI5MjkwMjk1ODUxOTg4MSAgLT4gIDAuOTk5OTk5OTk5OTkxMTIyNyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwODkgZGl2aWRlICA1NTIxODcxMzY0MjQ1ODgxICAgNTUyMTg3MTM2NDIyOTUzNiAgLT4gIDEuMDAwMDAwMDAwMDAyOTYwICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5MCBkaXZpZGUgIDI0MDY1MDU2MDI4ODM2MTcgICAyNDA2NTA1NjAyODU3OTk3ICAtPiAgMS4wMDAwMDAwMDAwMTA2NDYgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDkxIGRpdmlkZSAgNzc0MTE0Njk4NDg2OTIwOCAgIDc3NDExNDY5ODQ4NjcyNTUgIC0+ICAxLjAwMDAwMDAwMDAwMDI1MiAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwOTIgZGl2aWRlICA0NTc2MDQxODMyNDE0OTA5ICAgNDU3NjA0MTgzMjQwNTEwMiAgLT4gIDEuMDAwMDAwMDAwMDAyMTQzICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5MyBkaXZpZGUgIDkxODM3NTY5ODI4NzgwNTcgICA5MTgzNzU2OTgyOTAxOTM0ICAtPiAgMC45OTk5OTk5OTk5OTc0MDAxICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5NCBkaXZpZGUgIDYyMTU3MzY1MTM4NTUxNTkgICA2MjE1NzM2NTEzODcwMzQyICAtPiAgMC45OTk5OTk5OTk5OTc1NTczICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5NSBkaXZpZGUgICAyNDg1NTQ5Njg1MzQ1MzMgICAgMjQ4NTU0OTY4NTUxNDE3ICAtPiAgMC45OTk5OTk5OTk5MzIwNzE0ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5NiBkaXZpZGUgICAzNzYzMTQxNjU2Njg2NDUgICAgMzc2MzE0MTY1NjU5NzU1ICAtPiAgMS4wMDAwMDAwMDAwMjM2MjQgIEluZXhhY3QgUm91bmRlZAotZGRkaXY0MDk3IGRpdmlkZSAgNTUxMzU2OTI0OTgwOTcxOCAgIDU1MTM1NjkyNDk4MDg5MDYgIC0+ICAxLjAwMDAwMDAwMDAwMDE0NyAgSW5leGFjdCBSb3VuZGVkCi1kZGRpdjQwOTggZGl2aWRlICAzMzY3OTkyMjQyMTY3OTA0ICAgMzM2Nzk5MjI0MjE1NjIyOCAgLT4gIDEuMDAwMDAwMDAwMDAzNDY3ICBJbmV4YWN0IFJvdW5kZWQKLWRkZGl2NDA5OSBkaXZpZGUgIDYxMzQ4Njk1Mzg5NjY5NjcgICA2MTM0ODY5NTM4OTg1OTg2ICAtPiAgMC45OTk5OTk5OTk5OTY4OTk5ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gTnVsbCB0ZXN0cwotZGRkaXY5OTk4IGRpdmlkZSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZGl2OTk5OSBkaXZpZGUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkRGl2aWRlLmRlY1Rlc3QgLS0gZGVjRG91YmxlIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkZGRpdjAwMSBkaXZpZGUgIDEgICAgIDEgICAgLT4gIDENCitkZGRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDINCitkZGRpdjAwMyBkaXZpZGUgIDEgICAgIDIgICAgLT4gIDAuNQ0KK2RkZGl2MDA0IGRpdmlkZSAgMiAgICAgMiAgICAtPiAgMQ0KK2RkZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMA0KK2RkZGl2MDA2IGRpdmlkZSAgMCAgICAgMiAgICAtPiAgMA0KK2RkZGl2MDA3IGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MDA5IGRpdmlkZSAgMyAgICAgMyAgICAtPiAgMQ0KKw0KK2RkZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40DQorZGRkaXYwMTEgZGl2aWRlICAyLjQgICAtMSAgIC0+ICAtMi40DQorZGRkaXYwMTIgZGl2aWRlICAtMi40ICAxICAgIC0+ICAtMi40DQorZGRkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQNCitkZGRpdjAxNCBkaXZpZGUgIDIuNDAgIDEgICAgLT4gIDIuNDANCitkZGRpdjAxNSBkaXZpZGUgIDIuNDAwIDEgICAgLT4gIDIuNDAwDQorZGRkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjINCitkZGRpdjAxNyBkaXZpZGUgIDIuNDAwIDIgICAgLT4gIDEuMjAwDQorZGRkaXYwMTggZGl2aWRlICAyLiAgICAyICAgIC0+ICAxDQorZGRkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxDQorDQorZGRkaXYwMjAgZGl2aWRlICAxODcgICAxODcgICAgLT4gIDENCitkZGRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41DQorZGRkaXYwMjIgZGl2aWRlICA1MCAgICAyMCAgICAgLT4gIDIuNQ0KK2RkZGl2MDIzIGRpdmlkZSAgNTAwICAgMjAwICAgIC0+ICAyLjUNCitkZGRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41DQorZGRkaXYwMjUgZGl2aWRlICA1LjAwICAyLjAwICAgLT4gIDIuNQ0KK2RkZGl2MDI2IGRpdmlkZSAgNSAgICAgMi4wICAgIC0+ICAyLjUNCitkZGRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41DQorZGRkaXYwMjggZGl2aWRlICA1ICAgICAwLjIwICAgLT4gIDI1DQorZGRkaXYwMjkgZGl2aWRlICA1ICAgICAwLjIwMCAgLT4gIDI1DQorZGRkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwDQorZGRkaXYwMzEgZGl2aWRlICAxMDAgICAxICAgICAgLT4gIDEwMA0KK2RkZGl2MDMyIGRpdmlkZSAgMTAwMCAgMSAgICAgIC0+ICAxMDAwDQorZGRkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwDQorDQorZGRkaXYwMzUgZGl2aWRlICAxICAgICAyICAgICAgLT4gIDAuNQ0KK2RkZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1DQorZGRkaXYwMzcgZGl2aWRlICAxICAgICA4ICAgICAgLT4gIDAuMTI1DQorZGRkaXYwMzggZGl2aWRlICAxICAgICAxNiAgICAgLT4gIDAuMDYyNQ0KK2RkZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1DQorZGRkaXYwNDAgZGl2aWRlICAxICAgICA2NCAgICAgLT4gIDAuMDE1NjI1DQorZGRkaXYwNDEgZGl2aWRlICAxICAgIC0yICAgICAgLT4gIC0wLjUNCitkZGRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUNCitkZGRpdjA0MyBkaXZpZGUgIDEgICAgLTggICAgICAtPiAgLTAuMTI1DQorZGRkaXYwNDQgZGl2aWRlICAxICAgIC0xNiAgICAgLT4gIC0wLjA2MjUNCitkZGRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUNCitkZGRpdjA0NiBkaXZpZGUgIDEgICAgLTY0ICAgICAtPiAgLTAuMDE1NjI1DQorZGRkaXYwNDcgZGl2aWRlIC0xICAgICAyICAgICAgLT4gIC0wLjUNCitkZGRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUNCitkZGRpdjA0OSBkaXZpZGUgLTEgICAgIDggICAgICAtPiAgLTAuMTI1DQorZGRkaXYwNTAgZGl2aWRlIC0xICAgICAxNiAgICAgLT4gIC0wLjA2MjUNCitkZGRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUNCitkZGRpdjA1MiBkaXZpZGUgLTEgICAgIDY0ICAgICAtPiAgLTAuMDE1NjI1DQorZGRkaXYwNTMgZGl2aWRlIC0xICAgIC0yICAgICAgLT4gIDAuNQ0KK2RkZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1DQorZGRkaXYwNTUgZGl2aWRlIC0xICAgIC04ICAgICAgLT4gIDAuMTI1DQorZGRkaXYwNTYgZGl2aWRlIC0xICAgIC0xNiAgICAgLT4gIDAuMDYyNQ0KK2RkZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1DQorZGRkaXYwNTggZGl2aWRlIC0xICAgIC02NCAgICAgLT4gIDAuMDE1NjI1DQorDQorLS0gYmNkVGltZQ0KK2RkZGl2MDYwIGRpdmlkZSAgMSA3ICAgICAgICAgICAgICAgICAgIC0+IDAuMTQyODU3MTQyODU3MTQyOSBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjA2MSBkaXZpZGUgMS4yMzQ1Njc4ICAxLjk4NzY1NDMgICAtPiAwLjYyMTExNzk2ODA0OTA3MTcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZGRkaXYwNzEgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5DQorZGRkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgIDEgIC0+ICA5OTk5OTk5OTk5OTk5OTkNCitkZGRpdjA3MyBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5ICAgMSAgLT4gIDk5OTk5OTk5OTk5OTk5DQorZGRkaXYwNzQgZGl2aWRlICA5OTk5OTk5OTk5OTk5ICAgIDEgIC0+ICA5OTk5OTk5OTk5OTk5DQorZGRkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTk5OTkNCitkZGRpdjA3NiBkaXZpZGUgIDk5OTk5OTk5OTk5ICAgICAgMSAgLT4gIDk5OTk5OTk5OTk5DQorZGRkaXYwNzcgZGl2aWRlICA5OTk5OTk5OTk5ICAgICAgIDEgIC0+ICA5OTk5OTk5OTk5DQorZGRkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgIDEgIC0+ICA5OTk5OTk5OTkNCitkZGRpdjA3OSBkaXZpZGUgIDk5OTk5OTk5ICAgICAgICAgMSAgLT4gIDk5OTk5OTk5DQorZGRkaXYwODAgZGl2aWRlICA5OTk5OTk5ICAgICAgICAgIDEgIC0+ICA5OTk5OTk5DQorZGRkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgIDEgIC0+ICA5OTk5OTkNCitkZGRpdjA4MiBkaXZpZGUgIDk5OTk5ICAgICAgICAgICAgMSAgLT4gIDk5OTk5DQorZGRkaXYwODMgZGl2aWRlICA5OTk5ICAgICAgICAgICAgIDEgIC0+ICA5OTk5DQorZGRkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgIDEgIC0+ICA5OTkNCitkZGRpdjA4NSBkaXZpZGUgIDk5ICAgICAgICAgICAgICAgMSAgLT4gIDk5DQorZGRkaXYwODYgZGl2aWRlICA5ICAgICAgICAgICAgICAgIDEgIC0+ICA5DQorDQorZGRkaXYwOTAgZGl2aWRlICAwLiAgICAgICAgICAgIDEgICAgLT4gIDANCitkZGRpdjA5MSBkaXZpZGUgIC4wICAgICAgICAgICAgMSAgICAtPiAgMC4wDQorZGRkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDANCitkZGRpdjA5MyBkaXZpZGUgIDAuMDBFKzkgICAgICAgMSAgICAtPiAgMEUrNw0KK2RkZGl2MDk0IGRpdmlkZSAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwRS01NA0KKw0KK2RkZGl2MDk1IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTggIC0+ICAxRSs4DQorZGRkaXYwOTYgZGl2aWRlICAxICAgICAgICAgICAgMUUtOSAgLT4gIDFFKzkNCitkZGRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTANCitkZGRpdjA5OCBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMSAtPiAgMUUrMTENCitkZGRpdjA5OSBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMiAtPiAgMUUrMTINCisNCitkZGRpdjEwMCBkaXZpZGUgIDEgIDEgICAtPiAxDQorZGRkaXYxMDEgZGl2aWRlICAxICAyICAgLT4gMC41DQorZGRkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTAzIGRpdmlkZSAgMSAgNCAgIC0+IDAuMjUNCitkZGRpdjEwNCBkaXZpZGUgIDEgIDUgICAtPiAwLjINCitkZGRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMDYgZGl2aWRlICAxICA3ICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3IGRpdmlkZSAgMSAgOCAgIC0+IDAuMTI1DQorZGRkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA5IGRpdmlkZSAgMSAgMTAgIC0+IDAuMQ0KK2RkZGl2MTEwIGRpdmlkZSAgMSAgMSAgIC0+IDENCitkZGRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyDQorZGRkaXYxMTIgZGl2aWRlICAzICAxICAgLT4gMw0KK2RkZGl2MTEzIGRpdmlkZSAgNCAgMSAgIC0+IDQNCitkZGRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1DQorZGRkaXYxMTUgZGl2aWRlICA2ICAxICAgLT4gNg0KK2RkZGl2MTE2IGRpdmlkZSAgNyAgMSAgIC0+IDcNCitkZGRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4DQorZGRkaXYxMTggZGl2aWRlICA5ICAxICAgLT4gOQ0KK2RkZGl2MTE5IGRpdmlkZSAgMTAgMSAgIC0+IDEwDQorDQorZGRkaXYxMjAgZGl2aWRlICAzRSsxIDAuMDAxICAtPiAzRSs0DQorZGRkaXYxMjEgZGl2aWRlICAyLjIwMCAyICAgICAtPiAxLjEwMA0KKw0KK2RkZGl2MTMwIGRpdmlkZSAgMTIzNDUgIDQuOTk5ICAtPiAgMjQ2OS40OTM4OTg3Nzk3NTYgICAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMzEgZGl2aWRlICAxMjM0NSAgNC45OSAgIC0+ICAyNDczLjk0Nzg5NTc5MTU4MyAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkuMzg3NzU1MTAyMDQxICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTMzIGRpdmlkZSAgMTIzNDUgIDUgICAgICAtPiAgMjQ2OQ0KK2RkZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMC41ODgyMzUyOTQxMTggICAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMzUgZGl2aWRlICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0LjA3MTg1NjI4NzQyNSAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjEzNiBkaXZpZGUgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjguNTA2Mjk4NzQwMjUyICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRlc3QgcG9zc2libHkgaW1wcmVjaXNlIHJlc3VsdHMNCitkZGRpdjIyMCBkaXZpZGUgMzkxICAgNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4NCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMjIgZGl2aWRlIC0zOTEgIDU5NyAtPiAtMC42NTQ5NDEzNzM1MzQzMzg0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIyMyBkaXZpZGUgLTM5MSAtNTk3IC0+ICAwLjY1NDk0MTM3MzUzNDMzODQgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdywgc29tZSB3aXRoIGNvZWZmaWNpZW50IHBhZGRpbmcNCitkZGRpdjI3MCBkaXZpZGUgMSAxZTM4NCAgICAgICAgICAgICAgICAgIC0+IDFFLTM4NCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQorZGRkaXYyNzEgZGl2aWRlIDEgMC45ZTM4NCAgICAgICAgICAgICAgICAtPiAxLjExMTExMTExMTExMTExRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRkaXYyNzIgZGl2aWRlIDEgMC45OWUzODQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRkaXYyNzQgZGl2aWRlIDllMzg0ICAgIDEgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IENsYW1wZWQNCitkZGRpdjI3NSBkaXZpZGUgOS45ZTM4NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZA0KK2RkZGl2Mjc2IGRpdmlkZSA5Ljk5ZTM4NCAxICAgICAgICAgICAgICAgLT4gOS45OTAwMDAwMDAwMDAwMDBFKzM4NCBDbGFtcGVkDQorZGRkaXYyNzcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OWUzODQgMSAgICAtPiA5Ljk5OTk5OTk5OTk5OTkwMEUrMzg0IENsYW1wZWQNCitkZGRpdjI3OCBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OWUzODQgMSAgIC0+IDkuOTk5OTk5OTk5OTk5OTkwRSszODQgQ2xhbXBlZA0KK2RkZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKw0KK2RkZGl2Mjg1IGRpdmlkZSA5LjllMzg0ICAxLjEgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgQ2xhbXBlZA0KK2RkZGl2Mjg2IGRpdmlkZSA5Ljk5ZTM4NCAxLjEgICAgICAgICAgICAgIC0+IDkuMDgxODE4MTgxODE4MTgyRSszODQgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyODcgZGl2aWRlIDkuOTk5OTk5OTk5OTk5OWUzODQgMS4xICAgLT4gOS4wOTA5MDkwOTA5MDkwMDBFKzM4NCBDbGFtcGVkDQorZGRkaXYyODggZGl2aWRlIDkuOTk5OTk5OTk5OTk5OTllMzg0IDEuMSAgLT4gOS4wOTA5MDkwOTA5MDkwODJFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjI4OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEuMSAtPiA5LjA5MDkwOTA5MDkwOTA5MEUrMzg0IENsYW1wZWQNCisNCisNCistLSBEaXZpZGUgaW50byAwIHRlc3RzDQorZGRkaXYzMDEgZGl2aWRlICAgIDAgICAgNyAgICAgLT4gMA0KK2RkZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUNCitkZGRpdjMwMyBkaXZpZGUgICAgMCAgICA3RS0xICAtPiAwRSsxDQorZGRkaXYzMDQgZGl2aWRlICAgIDAgICAgN0UrMSAgLT4gMC4wDQorZGRkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMA0KK2RkZGl2MzA2IGRpdmlkZSAgICAwICAgIDdFKzYgIC0+IDAuMDAwMDAwDQorZGRkaXYzMDcgZGl2aWRlICAgIDAgICAgN0UrNyAgLT4gMEUtNw0KK2RkZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUNCitkZGRpdjMwOSBkaXZpZGUgICAgMCAgIDcwRS0xICAtPiAwRSsxDQorZGRkaXYzMTAgZGl2aWRlICAgIDAgICA3MEUrMCAgLT4gMA0KK2RkZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMA0KK2RkZGl2MzEyIGRpdmlkZSAgICAwICAgNzBFKzUgIC0+IDAuMDAwMDANCitkZGRpdjMxMyBkaXZpZGUgICAgMCAgIDcwRSs2ICAtPiAwLjAwMDAwMA0KK2RkZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcNCitkZGRpdjMxNSBkaXZpZGUgICAgMCAgNzAwRS01ICAtPiAwRSs1DQorZGRkaXYzMTYgZGl2aWRlICAgIDAgIDcwMEUtMSAgLT4gMEUrMQ0KK2RkZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDANCitkZGRpdjMxOCBkaXZpZGUgICAgMCAgNzAwRSsxICAtPiAwLjANCitkZGRpdjMxOSBkaXZpZGUgICAgMCAgNzAwRSs1ICAtPiAwLjAwMDAwDQorZGRkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDANCitkZGRpdjMyMSBkaXZpZGUgICAgMCAgNzAwRSs3ICAtPiAwRS03DQorZGRkaXYzMjIgZGl2aWRlICAgIDAgIDcwMEUrNzcgLT4gMEUtNzcNCisNCitkZGRpdjMzMSBkaXZpZGUgMEUtMyAgICA3RS01ICAtPiAwRSsyDQorZGRkaXYzMzIgZGl2aWRlIDBFLTMgICAgN0UtMSAgLT4gMC4wMA0KK2RkZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMA0KK2RkZGl2MzM0IGRpdmlkZSAwRS0zICAgIDdFKzUgIC0+IDBFLTgNCitkZGRpdjMzNSBkaXZpZGUgMEUtMSAgICA3RS01ICAtPiAwRSs0DQorZGRkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMA0KK2RkZGl2MzM3IGRpdmlkZSAwRS0xICAgIDdFKzEgIC0+IDAuMDANCitkZGRpdjMzOCBkaXZpZGUgMEUtMSAgICA3RSs1ICAtPiAwLjAwMDAwMA0KK2RkZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYNCitkZGRpdjM0MCBkaXZpZGUgMEUrMSAgICA3RS0xICAtPiAwRSsyDQorZGRkaXYzNDEgZGl2aWRlIDBFKzEgICAgN0UrMSAgLT4gMA0KK2RkZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMA0KK2RkZGl2MzQzIGRpdmlkZSAwRSszICAgIDdFLTUgIC0+IDBFKzgNCitkZGRpdjM0NCBkaXZpZGUgMEUrMyAgICA3RS0xICAtPiAwRSs0DQorZGRkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMg0KK2RkZGl2MzQ2IGRpdmlkZSAwRSszICAgIDdFKzUgIC0+IDAuMDANCisNCistLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycNCitkZGRpdjQ0MSBkaXZpZGUgMTIzNDU2NzgwMDAgMSAtPiAxMjM0NTY3ODAwMA0KK2RkZGl2NDQyIGRpdmlkZSAxIDEyMzQ1Njc4MDAwIC0+IDguMTAwMDAwNjY0MjAwMDU0RS0xMSBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwDQorZGRkaXY0NDQgZGl2aWRlIDEgMTIzNDU2NzgwMCAgLT4gOC4xMDAwMDA2NjQyMDAwNTRFLTEwIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDQ1IGRpdmlkZSAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTANCitkZGRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMUUtMTAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0NDcgZGl2aWRlIDEyMzQ1Njc4OTEgIDEgLT4gMTIzNDU2Nzg5MQ0KK2RkZGl2NDQ4IGRpdmlkZSAxIDEyMzQ1Njc4OTEgIC0+IDguMTAwMDAwMDY3MTQ5MDAxRS0xMCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQ0KK2RkZGl2NDUwIGRpdmlkZSAxIDEyMzQ1Njc4OTAxIC0+IDguMTAwMDAwMDczMDUzOTAxRS0xMSBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQ1MSBkaXZpZGUgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2DQorZGRkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDBFLTEwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGhpZ2gtbG93cw0KK2RkZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzENCitkZGRpdjQ1NCBkaXZpZGUgMWUrMSAgIDEuMCAgLT4gICAxRSsxDQorZGRkaXY0NTUgZGl2aWRlIDFlKzEgICAxLjAwIC0+ICAgMUUrMQ0KK2RkZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzENCitkZGRpdjQ1NyBkaXZpZGUgMWUrMiAgIDIuMCAgLT4gICA1RSsxDQorZGRkaXY0NTggZGl2aWRlIDFlKzIgICAyLjAwIC0+ICAgNUUrMQ0KKw0KKy0tIHNvbWUgZnJvbSBJRUVFIGRpc2N1c3Npb25zDQorZGRkaXY0NjAgZGl2aWRlIDNlMCAgICAgIDJlMCAgICAgLT4gMS41DQorZGRkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41DQorZGRkaXY0NjIgZGl2aWRlIDMwMGUtMiAgIDJlMCAgICAgLT4gMS41MA0KK2RkZGl2NDY0IGRpdmlkZSAzMDAwZS0zICAyZTAgICAgIC0+IDEuNTAwDQorZGRkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41DQorZGRkaXY0NjYgZGl2aWRlIDMwZS0xICAgIDIwZS0xICAgLT4gMS41DQorZGRkaXY0NjcgZGl2aWRlIDMwMGUtMiAgIDIwZS0xICAgLT4gMS41DQorZGRkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MA0KK2RkZGl2NDY5IGRpdmlkZSAzZTAgICAgICAyMDBlLTIgIC0+IDEuNQ0KK2RkZGl2NDcwIGRpdmlkZSAzMGUtMSAgICAyMDBlLTIgIC0+IDEuNQ0KK2RkZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQ0KK2RkZGl2NDcyIGRpdmlkZSAzMDAwZS0zICAyMDBlLTIgIC0+IDEuNQ0KK2RkZGl2NDczIGRpdmlkZSAzZTAgICAgICAyMDAwZS0zIC0+IDEuNQ0KK2RkZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQ0KK2RkZGl2NDc1IGRpdmlkZSAzMDBlLTIgICAyMDAwZS0zIC0+IDEuNQ0KK2RkZGl2NDc2IGRpdmlkZSAzMDAwZS0zICAyMDAwZS0zIC0+IDEuNQ0KKw0KKy0tIHNvbWUgcmVjaXByb2NhbHMNCitkZGRpdjQ4MCBkaXZpZGUgMSAgICAgICAgMS4wRSszMyAtPiAxRS0zMw0KK2RkZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0DQorZGRkaXY0ODIgZGl2aWRlIDEgICAgICAgIDEuMEUtMzMgLT4gMUUrMzMNCitkZGRpdjQ4MyBkaXZpZGUgMSAgICAgICAgMTBFLTMzICAtPiAxRSszMg0KKw0KKy0tIFJNUyBkaXNjdXNzaW9uIHRhYmxlDQorZGRkaXY0ODQgZGl2aWRlIDBlNSAgICAgMWUzIC0+ICAgMEUrMg0KK2RkZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzINCitkZGRpdjQ4NiBkaXZpZGUgMGU1ICAgIDEwZTIgLT4gICAwRSszDQorZGRkaXY0ODcgZGl2aWRlIDBlNSAgICAyMGUyIC0+ICAgMEUrMw0KK2RkZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQNCitkZGRpdjQ4OSBkaXZpZGUgMGU1ICAgMjAwZTEgLT4gICAwRSs0DQorDQorZGRkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMg0KK2RkZGl2NDkyIGRpdmlkZSAxZTUgICAgIDJlMyAtPiAgIDVFKzENCitkZGRpdjQ5MyBkaXZpZGUgMWU1ICAgIDEwZTIgLT4gICAxRSsyDQorZGRkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQ0KK2RkZGl2NDk1IGRpdmlkZSAxZTUgICAxMDBlMSAtPiAgIDFFKzINCitkZGRpdjQ5NiBkaXZpZGUgMWU1ICAgMjAwZTEgLT4gICA1RSsxDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCityb3VuZGluZzogICAgaGFsZl91cA0KK2RkZGl2NDk3ICBkaXZpZGUgIDBFKzM4MCAxMDAwRS0xMyAgLT4gMEUrMzY5IENsYW1wZWQNCitkZGRpdjQ5OCAgZGl2aWRlICAwRS0zOTAgMTAwMEUrMTMgIC0+IDBFLTM5OCBDbGFtcGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCisNCistLSBmb2N1cyBvbiB0cmFpbGluZyB6ZXJvcyBpc3N1ZXMNCitkZGRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NTAyIGRpdmlkZSAgMSAgICAgIDkuMDA5ICAtPiAgMC4xMTEwMDAxMTEwMDAxMTEwICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41DQorZGRkaXY1MTIgZGl2aWRlIDEuMCAgICAgICAyICAgIC0+IDAuNQ0KK2RkZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwDQorZGRkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwDQorZGRkaXY1MTUgZGl2aWRlIDEuMDAwMCAgICAyICAgIC0+IDAuNTAwMA0KK2RkZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwDQorZGRkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwDQorZGRkaXY1MTggZGl2aWRlIDEuMDAwMDAwMCAyICAgIC0+IDAuNTAwMDAwMA0KK2RkZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUNCisNCitkZGRpdjUyMSBkaXZpZGUgMiAgICAxICAgICAgICAgLT4gMg0KK2RkZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyDQorZGRkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDINCitkZGRpdjUyNCBkaXZpZGUgMiAgICAxLjAwMCAgICAgLT4gMg0KK2RkZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyDQorZGRkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDINCitkZGRpdjUyNyBkaXZpZGUgMiAgICAxLjAwMDAwMCAgLT4gMg0KK2RkZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyDQorZGRkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDINCisNCitkZGRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjANCitkZGRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjANCitkZGRpdjUzMiBkaXZpZGUgIDIuNDAgIDEwICAgICAgLT4gIDAuMjQNCitkZGRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMg0KK2RkZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42DQorZGRkaXY1MzUgZGl2aWRlICAyLjQwICAxMC4wICAgIC0+ICAwLjI0DQorZGRkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjINCitkZGRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNg0KK2RkZGl2NTM4IGRpdmlkZSAgMi40MCAgMTAuMDAgICAtPiAgMC4yNA0KK2RkZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQ0KK2RkZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQ0KK2RkZGl2NTQxIGRpdmlkZSAgMC45ICAgIDAuMDAxICAtPiAgOUUrMg0KK2RkZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41DQorZGRkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUNCitkZGRpdjU0NCBkaXZpZGUgIDUgICAgICAyLjAwICAgLT4gIDIuNQ0KK2RkZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQ0KK2RkZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQ0KK2RkZGl2NTQ3IGRpdmlkZSAgMi40MDAgIDIgICAgICAtPiAgMS4yMDANCitkZGRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjANCitkZGRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDENCisNCitkZGRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MA0KK2RkZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQNCitkZGRpdjU1MiBkaXZpZGUgIDI0MCAgICAxMDAgICAgLT4gIDIuNA0KK2RkZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNA0KK2RkZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMA0KK2RkZGl2NTU1IGRpdmlkZSAgMjQwMCAgIDEwICAgICAtPiAgMjQwDQorZGRkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNA0KK2RkZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40DQorDQorLS0gK3ZlIGV4cG9uZW50DQorZGRkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkNCitkZGRpdjYwMSBkaXZpZGUgIDIuNDBFKzkgICAgMiAgLT4gIDEuMjBFKzkNCitkZGRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5DQorZGRkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkNCitkZGRpdjYwNCBkaXZpZGUgIDI0RSs4ICAgICAgMiAgLT4gIDEuMkUrOQ0KK2RkZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQ0KK2RkZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkNCitkZGRpdjYwNyBkaXZpZGUgIDI0MDAwRSs1ICAgMiAgLT4gIDEuMjAwMEUrOQ0KKw0KKy0tIG1vcmUgemVyb3MsIGV0Yy4NCitkZGRpdjczMSBkaXZpZGUgNS4wMCAxRS0zICAgIC0+IDUuMDBFKzMNCitkZGRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZGRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZGRpdjczNCBkaXZpZGUgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZGRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZGRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCisNCitkZGRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wDQorZGRkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMA0KK2RkZGl2NzQzIGRpdmlkZSAgMCAgICAgMSAgICAgLT4gIDANCitkZGRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wDQorZGRkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2NzQ2IGRpdmlkZSAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMA0KK2RkZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMA0KK2RkZGl2NzUzIGRpdmlkZSAgMC4wICAgMSAgICAgLT4gIDAuMA0KK2RkZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMA0KK2RkZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGRpdjc1NiBkaXZpZGUgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCitkZGRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxDQorZGRkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQ0KK2RkZGl2NzYzIGRpdmlkZSAgMCAgICAgMS4wICAgLT4gIDBFKzENCitkZGRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxDQorZGRkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2NzY2IGRpdmlkZSAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTANCitkZGRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwDQorZGRkaXY3NzMgZGl2aWRlICAwLjAgICAxLjAgICAtPiAgMA0KK2RkZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTANCitkZGRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkaXY3NzYgZGl2aWRlIC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorDQorLS0gU3BlY2lhbHMNCitkZGRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjc4MSBkaXZpZGUgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZGRkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkZGRpdjc4NCBkaXZpZGUgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KK2RkZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQorZGRkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCitkZGRpdjc4NyBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KK2RkZGl2Nzg5IGRpdmlkZSAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQorZGRkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCitkZGRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2RkZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZGRkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtMzk4IENsYW1wZWQNCitkZGRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZGRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KK2RkZGl2ODAyIGRpdmlkZSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQorZGRkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCitkZGRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RkZGl2ODA1IGRpdmlkZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZGRkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkZGRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjgwOCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KK2RkZGl2ODA5IGRpdmlkZSAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODEwIGRpdmlkZSAtMSAgICAtSW5mICAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZGRkaXY4MTEgZGl2aWRlIC0wICAgIC1JbmYgICAtPiAgMEUtMzk4IENsYW1wZWQNCitkZGRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS0zOTggQ2xhbXBlZA0KK2RkZGl2ODEzIGRpdmlkZSAgMSAgICAtSW5mICAgLT4gLTBFLTM5OCBDbGFtcGVkDQorZGRkaXY4MTQgZGl2aWRlICAxMDAwIC1JbmYgICAtPiAtMEUtMzk4IENsYW1wZWQNCitkZGRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZGRpdjgyMSBkaXZpZGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZGRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkZGRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkZGRpdjgyNCBkaXZpZGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZGRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkZGRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkZGRpdjgyNyBkaXZpZGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZGRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkZGRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzMCBkaXZpZGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzMyBkaXZpZGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzNiBkaXZpZGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkZGRpdjg0MSBkaXZpZGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg0NCBkaXZpZGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg0NyBkaXZpZGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg1MCBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg1MyBkaXZpZGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg1NiBkaXZpZGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg1OSBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkZGl2ODYxIGRpdmlkZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkZGRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44DQorZGRkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONw0KK2RkZGl2ODY0IGRpdmlkZSAgTmFONiAgTmFONSAgLT4gIE5hTjYNCitkZGRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQorZGRkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMw0KK2RkZGl2ODY3IGRpdmlkZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCisNCitkZGRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODcyIGRpdmlkZSAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODc1IGRpdmlkZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODc4IGRpdmlkZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCitkZGRpdjg4MSBkaXZpZGUgIC1OYU45ICAtSW5mICAgLT4gIC1OYU45DQorZGRkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOA0KK2RkZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcNCitkZGRpdjg4NCBkaXZpZGUgIC1OYU42ICAtTmFONSAgLT4gIC1OYU42DQorZGRkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONA0KK2RkZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMNCitkZGRpdjg4NyBkaXZpZGUgICBJbmYgICAtTmFOMiAgLT4gIC1OYU4yDQorDQorZGRkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg5MiBkaXZpZGUgLXNOYU45OCAtMSAgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg5NSBkaXZpZGUgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZGRpdjg5OCBkaXZpZGUgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGUgYnkgMA0KK2RkZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkZGl2OTAzIGRpdmlkZSAgICAwLjAwMCAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTA2IGRpdmlkZSAgICAwLjEgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTA5IGRpdmlkZSAgIDEwICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTIzIGRpdmlkZSAgIC0wLjEgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTI2IGRpdmlkZSAgLTEwICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTMzIGRpdmlkZSAgICAwLjEgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTM2IGRpdmlkZSAgIDEwICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQzIGRpdmlkZSAgIC0wLjEgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQ2IGRpdmlkZSAgLTEwICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KK2RkZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQ0KK2RkZGl2MTAyMiAgZGl2aWRlIDFFMCAgICAgICAgICAyRTAgLT4gMC41DQorZGRkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxDQorZGRkaXYxMDI1ICBkaXZpZGUgMjRFLTEgICAgICAgIDJFMCAtPiAxLjINCitkZGRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwDQorZGRkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUNCitkZGRpdjEwMjggIGRpdmlkZSA1RTAgICAgICAgIDIwRS0xIC0+IDIuNQ0KK2RkZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41DQorZGRkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQ0KK2RkZGl2MTAzMSAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTIgLT4gMjUNCitkZGRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjANCitkZGRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUNCisNCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCitkZGRpdjEwNDAgIGRpdmlkZSA1IDkgIC0+IDAuNTU1NTU1NTU1NTU1NTU1NiBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorZGRkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQorLS0gc2lnbnMNCitkZGRpdjEwNTEgZGl2aWRlICAxZSsyNzcgIDFlLTMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMDUyIGRpdmlkZSAgMWUrMjc3IC0xZS0zMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA1MyBkaXZpZGUgLTFlKzI3NyAgMWUtMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjEwNTQgZGl2aWRlIC0xZSsyNzcgLTFlLTMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMDU1IGRpdmlkZSAgMWUtMjc3ICAxZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRkaXYxMDU2IGRpdmlkZSAgMWUtMjc3IC0xZSszMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRkaXYxMDU3IGRpdmlkZSAtMWUtMjc3ICAxZSszMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRkaXYxMDU4IGRpdmlkZSAtMWUtMjc3IC0xZSszMTEgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpDQorZGRkaXYxMDYwIGRpdmlkZSAxZS0yOTEgMWUrMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwNCitkZGRpdjEwNjEgZGl2aWRlIDFlLTI5MSAxZSsxMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbA0KK2RkZGl2MTA2MiBkaXZpZGUgMWUtMjkxIDFlKzEwMyAtPiAxRS0zOTQgU3Vibm9ybWFsDQorZGRkaXYxMDYzIGRpdmlkZSAxZS0yOTEgMWUrMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwNCitkZGRpdjEwNjQgZGl2aWRlIDFlLTI5MSAxZSsxMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbA0KK2RkZGl2MTA2NSBkaXZpZGUgMWUtMjkxIDFlKzEwNiAtPiAxRS0zOTcgU3Vibm9ybWFsDQorZGRkaXYxMDY2IGRpdmlkZSAxZS0yOTEgMWUrMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwNCitkZGRpdjEwNjcgZGl2aWRlIDFlLTI5MSAxZSsxMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGRpdjEwNjggZGl2aWRlIDFlLTI5MSAxZSsxMDkgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGRpdjEwNjkgZGl2aWRlIDFlLTI5MSAxZSsxMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCistLSBbbm8gZXF1aXZhbGVudCBvZiAnc3Vibm9ybWFsJyBmb3Igb3ZlcmZsb3ddDQorZGRkaXYxMDcwIGRpdmlkZSAxZSs2MCAxZS0zMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZA0KK2RkZGl2MTA3MSBkaXZpZGUgMWUrNjAgMWUtMzIyIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkDQorZGRkaXYxMDcyIGRpdmlkZSAxZSs2MCAxZS0zMjMgLT4gMS4wMDAwMDAwMDAwMDAwMEUrMzgzICBDbGFtcGVkDQorZGRkaXYxMDczIGRpdmlkZSAxZSs2MCAxZS0zMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KK2RkZGl2MTA3NCBkaXZpZGUgMWUrNjAgMWUtMzI1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3NSBkaXZpZGUgMWUrNjAgMWUtMzI2IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3NiBkaXZpZGUgMWUrNjAgMWUtMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3NyBkaXZpZGUgMWUrNjAgMWUtMzI4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3OCBkaXZpZGUgMWUrNjAgMWUtMzI5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTA3OSBkaXZpZGUgMWUrNjAgMWUtMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZGl2MTEwMSBkaXZpZGUgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAxLjAwMDBFLTM5NCBTdWJub3JtYWwNCitkZGRpdjExMDIgZGl2aWRlICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsDQorZGRkaXYxMTAzIGRpdmlkZSAgMS4wMEUtMzk0ICAgIDFlKzIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbA0KK2RkZGl2MTEwNCBkaXZpZGUgIDEuMEUtMzk0ICAgICAxZSszICAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwNCitkZGRpdjExMDUgZGl2aWRlICAxLjBFLTM5NCAgICAgMWUrNCAgLT4gMUUtMzk4ICAgICBTdWJub3JtYWwgUm91bmRlZA0KK2RkZGl2MTEwNiBkaXZpZGUgIDEuM0UtMzk0ICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMTA3IGRpdmlkZSAgMS41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMDggZGl2aWRlICAxLjdFLTM5NCAgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTEwOSBkaXZpZGUgIDIuM0UtMzk0ICAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMTEwIGRpdmlkZSAgMi41RS0zOTQgICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMTEgZGl2aWRlICAyLjdFLTM5NCAgICAgMWUrNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTExMiBkaXZpZGUgIDEuNDlFLTM5NCAgICAxZSs0ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMTEzIGRpdmlkZSAgMS41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMTQgZGl2aWRlICAxLjUxRS0zOTQgICAgMWUrNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTExNSBkaXZpZGUgIDIuNDlFLTM5NCAgICAxZSs0ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMTE2IGRpdmlkZSAgMi41MEUtMzk0ICAgIDFlKzQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMTcgZGl2aWRlICAyLjUxRS0zOTQgICAgMWUrNCAgLT4gM0UtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZGl2MTExOCBkaXZpZGUgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbA0KK2RkZGl2MTExOSBkaXZpZGUgIDNFLTM5NCAgICAgICAxZSs1ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGRpdjExMjAgZGl2aWRlICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRkaXYxMTIxIGRpdmlkZSAgN0UtMzk0ICAgICAgIDFlKzUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMjIgZGl2aWRlICA5RS0zOTQgICAgICAgMWUrNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTEyMyBkaXZpZGUgIDkuOUUtMzk0ICAgICAxZSs1ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRkaXYxMTI0IGRpdmlkZSAgMUUtMzk0ICAgICAgLTFlKzQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsDQorZGRkaXYxMTI1IGRpdmlkZSAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZGl2MTEyNiBkaXZpZGUgLTVFLTM5NCAgICAgICAxZSs1ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGRpdjExMjcgZGl2aWRlICA3RS0zOTQgICAgICAtMWUrNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MTEyOCBkaXZpZGUgLTlFLTM5NCAgICAgICAxZSs1ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYxMTI5IGRpdmlkZSAgOS45RS0zOTQgICAgLTFlKzUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjExMzAgZGl2aWRlICAzLjBFLTM5NCAgICAtMWUrNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZGRkaXYxMTMxIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzIwMCAtPiAwRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZGl2MTEzMiBkaXZpZGUgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMUUtMzk4ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRkaXYxMTMzIGRpdmlkZSAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsDQorZGRkaXYxMTM0IGRpdmlkZSAgMi4wRS0xOTkgICAgIDJlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsDQorZGRkaXYxMTM1IGRpdmlkZSAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsDQorZGRkaXYxMTM2IGRpdmlkZSAxMC4wRS0xOTkgICAgMTBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsDQorZGRkaXYxMTM3IGRpdmlkZSAzMC4wRS0xOTkgICAgMzBlKzE5OCAtPiAxLjBFLTM5NyAgU3Vibm9ybWFsDQorDQorLS0gcmFuZG9tcw0KK2RkZGl2MjAxMCAgZGl2aWRlICAtMy4zMDMyMjY3MTQ5MDA3MTFFLTM1ICAgOC43OTY1Nzg4NDI3MTMxODNFKzczICAgLT4gIC0zLjc1NTEyNjU5NDA1ODc4M0UtMTA5IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAxMSAgZGl2aWRlICAgOTMzMTUzMzI3ODIxMDczLjYgICAgICAgNjg3ODIxODEwOTAyNDYuMjUgICAgICAgLT4gICAxMy41NjY3ODg4NTQ3NTc2MyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMTIgIGRpdmlkZSAgIDUuMDQ3NTI0MzYwNTc5MDZFLTcyICAgLTguMTc5NDgxNzcxMjM4NjQyRSs2NCAgIC0+ICAtNi4xNzA5NTg2Mjc2MzI4MzVFLTEzNyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMTMgIGRpdmlkZSAgLTM3MDc2MTMzMDk1ODIzMTggICAgICAgIDMzOTQ5MTExOTY1MDMuMDQ4ICAgICAgIC0+ICAtMTA5Mi4xMDkwNzAwMTA4MzYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDE0ICBkaXZpZGUgICA5OTY4OS4wNTU1MTkwNDYxICAgICAgIC00LjczNTIwODU1Mzg5MTQ2NCAgICAgICAtPiAgLTIxMDUyLjcyNzUzNzY1NDExIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAxNSAgZGl2aWRlICAtMTQ0NzkxNTc3NTYxMzMyOSAgICAgICAgMjY5NzUwNzk3LjgxODQ4NzUgICAgICAgLT4gIC01MzY3NjA1LjE2NDkyNTY1MyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMTYgIGRpdmlkZSAgLTkuMzk0ODgxMzA0MjI1MjU4RS0xOSAgLTgzMDU4NS4wMjUyNjcxNjM2ICAgICAgIC0+ICAgMS4xMzExMTYxNDMyNTEzNThFLTI0IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAxNyAgZGl2aWRlICAtMS4wNTYyODM0MzI3Mzg5MzQgICAgICAgODguNTg3NTQ1NTUxMjQwMTMgICAgICAgLT4gIC0wLjAxMTkyMzYxMTAwMTU5MzUyIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAxOCAgZGl2aWRlICAgNTc2MzIyMDkzMzM0My4wODEgICAgICAgNjg5MDg5NTY3MDI1MDUyLjEgICAgICAgLT4gICAwLjAwODM2MzUyOTUxNjUyNDQ1NiBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMTkgIGRpdmlkZSAgIDg3MzgxOS4xMjIxMDMyMTYgICAgICAgIDkuNzQwNjEyNDk0NTIzMzAwRS00OSAgIC0+ICAgOC45NzA4ODQ3NjMwOTM5NDhFKzUzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAyMCAgZGl2aWRlICAgODAyMjkxNC44Mzg1MzM1NzYgICAgICAgNjE3OC41NjY4MDE3NDI3MTMgICAgICAgLT4gICAxMjk4LjUwNzQyMDI0MzU4MyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMjEgIGRpdmlkZSAgIDIwMzk4Mi43NjA1NjUwMzYzICAgICAgLTIxNTguMjgzNjM5MDUzNDM1ICAgICAgIC0+ICAtOTQuNTExNTYzMjA0MjIxNjggSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDIyICBkaXZpZGUgICA4MDMuNjMxMDU0NzAxMzAzMCAgICAgICA3MTAxMTQzNzk1Mzk5LjIzOCAgICAgICAtPiAgIDEuMTMxNjkyNDExNjExMTY2RS0xMCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMjMgIGRpdmlkZSAgIDkuMjUxNjk3ODQyMTIzMzk5RS04MiAgLTEuMzQyMzUwMjIwNjA2MTE5RS03ICAgIC0+ICAtNi44OTIxNjM5ODIzMjE5MzZFLTc1IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAyNCAgZGl2aWRlICAtMS45ODA2MDA2NDU2Mzc5OTJFLTUzICAtNS40NzQyNjI3NTMyMTQ0NTdFKzc3ICAgLT4gICAzLjYxODAyMjYxNzcwMzE2OEUtMTMxIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAyNSAgZGl2aWRlICAtMjEwLjAzMjI5OTYzNTE2OTAgICAgICAtOC41ODA5NTE4MzU4NzI4NDNFKzgwICAgLT4gICAyLjQ0NzY1NzM2NTQzNDk3MUUtNzkgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDI2ICBkaXZpZGUgIC0xLjgyMTk4MDMxNDAyMDM3MEUrODUgIC0zLjAxODkxNTI2NzEzODE2NSAgICAgICAtPiAgIDYuMDM1MjE1MTQ0NTAzMDQyRSs4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMjcgIGRpdmlkZSAgLTc3MjI2NDUwMzYwMS4xMDQ3ICAgICAgIDUuMTU4MjU4MjcxNDA4OTg4RS04NiAgIC0+ICAtMS40OTcxNDE5ODY2MzA2MTRFKzk3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAyOCAgZGl2aWRlICAtNzY3LjA1MzI0MTU4NDcxMDYgICAgICAgMi43MDAwMjcyMjgwMjg5MzlFLTU5ICAgLT4gIC0yLjg0MDkwOTI4Mjc3Mjk0MUUrNjEgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDI5ICBkaXZpZGUgICA0OTY3MjQuODU0ODI1MDA5MyAgICAgICA3LjMyNzAwNTg4MTYzMTAwRSs2NiAgICAtPiAgIDYuNzc5MzcwMjIwOTI5MDEzRS02MiBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMzAgIGRpdmlkZSAgLTMwNDIzMjY1MTQ0NzcwMy45ICAgICAgLTEwOC45NzMwODA4NjU3NDQwICAgICAgIC0+ICAgMjc5MTgxNDcyMTg2Mi41NjUgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDMxICBkaXZpZGUgIC03LjIzMzgxNzE5MjY5OTQwNUUrNDIgIC01NzExMzAyMDA0LjE0OTQxMSAgICAgICAtPiAgIDEuMjY2NTc5MzUyMjExNDMwRSszMyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMzIgIGRpdmlkZSAgLTkuOTk5MjIxNDQ0OTEyNzQ1RSs5NiAgIDQwMTA1Njk0MDY0NDYxOTcgICAgICAgIC0+ICAtMi40OTMyMTc0MDQyMDIyNTBFKzgxIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAzMyAgZGl2aWRlICAtMTgzNzI3Mi4wNjE5Mzc2MjIgICAgICAgOC4zNTYzMjI4MzgwNjY3NjIgICAgICAgLT4gIC0yMTk4NjYuMDkzOTE5Njg4MiBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMzQgIGRpdmlkZSAgIDIxNjguNTE3NTU1NjA2NTI5ICAgICAgIDIwOS4xOTEwMjU4NjE1MDYxICAgICAgIC0+ICAgMTAuMzY2MjA3Mzc3NTY3ODQgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDM1ICBkaXZpZGUgIC0xLjg4NDM4OTc5MDU3NjM3MUUrODggICAyLjk1MTgxOTUzODcwNTgzRSsyMCAgICAtPiAgLTYuMzgzODI0NTA1MDc5ODI4RSs2NyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMzYgIGRpdmlkZSAgIDczMjI2My42MDM3NDM4MTk2ICAgICAgIDk2MTIyMi4zNjM0NDQ2ODg5ICAgICAgIC0+ICAgMC43NjE4MDQ1ODUwNjk4MjY5IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjAzNyAgZGl2aWRlICAtODEzNDYxNDE5LjAzNDgzMzYgICAgICAgNS4zNzYyOTM3NTM4MDkxNDNFKzg0ICAgLT4gIC0xLjUxMzA1MjQwNDI4NTkyN0UtNzYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDM4ICBkaXZpZGUgIC00NTU2MjEzMzUwODEwOC41MCAgICAgIC05Ljc3Njg0MzQ5NDY5MDEwN0UrNTEgICAtPiAgIDQuNjYwMjA4OTQ1MDI5NTE5RS0zOSBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwMzkgIGRpdmlkZSAgLTYuNDg5MzkzMTcyNDQxMDE2RSs4MCAgLTkxMDE5NjUuMDk3ODUyMTEzICAgICAgIC0+ICAgNy4xMjk2NjE2NzQ4OTc0MjFFKzczIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA0MCAgZGl2aWRlICAgMy42OTQ1NzYyMzcxMTczNDlFKzkzICAgNjY4MzUxMi4wMTI2MjIwMDMgICAgICAgLT4gICA1LjUyNzg5NjQ1NjQ0MzkxMkUrODYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDQxICBkaXZpZGUgIC0yLjI1Mjg3NzcyNjQwMzI3MkUrMTkgIC03NDUxOTEzMjU2LjE4MTM2NyAgICAgICAtPiAgIDMwMjMyMjA1NDYuMTI1NTMxIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA0MiAgZGl2aWRlICAgNTE4MzAzLjE5ODkxMTE4NDIgICAgICAgNTAuMDE1ODcwMjA0NzQxMzMgICAgICAgLT4gICAxMDM2Mi43NzQ3OTEwNzEyMyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwNDMgIGRpdmlkZSAgIDIuOTAyMDg3ODgxODgwMTAzRSsyNCAgIDMzLjMyNDAwOTkyMzA1NzAyICAgICAgIC0+ICAgOC43MDg2OTk0ODg5ODk1NzhFKzIyIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA0NCAgZGl2aWRlICAgNTQ5NjE5LjQ1NTk1MTA1NTcgICAgICAgMTY2MDgyNDg0NTE5NjMzOCAgICAgICAgLT4gICAzLjMwOTMxNjE5NjM1MTEwNEUtMTAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDQ1ICBkaXZpZGUgIC02Nzc1NjcwNzc0Njg0MDQzICAgICAgICA4MjkyMTUyMDIzLjA3NzI2MiAgICAgICAtPiAgLTgxNzExOC40OTQxODkxMDYyIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA0NiAgZGl2aWRlICAtNzcuNTA5MjM5MjE1MjQwNzkgICAgICAtNS42MzY4ODI2NTU0MjU4MTVFKzc0ICAgLT4gICAxLjM3NTAzNzMwMjU4ODQwNUUtNzMgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDQ3ICBkaXZpZGUgIC0yLjk4NDg4OTQ1OTYwNTE0OUUtMTAgIC04ODEwNjE1Njc4NDEyMi45OSAgICAgICAtPiAgIDMuMzg3ODMzMDA1NzIxMzg0RS0yNCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwNDggIGRpdmlkZSAgIDAuOTQ5NTE3MjkzOTk3MDg1ICAgICAgIDQ0NzY3MTE1Ljk2NDUwOTk4ICAgICAgIC0+ICAgMi4xMjEwMTUxMTAxNzU1ODlFLTggSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDQ5ICBkaXZpZGUgIC0yNzYwOTM3MjExLjA4NDUyMSAgICAgIC0xMDg3MDE1ODc2OTc1NDA4ICAgICAgICAtPiAgIDAuMDAwMDAyNTM5OTIzNTM3MDU3MDI0IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA1MCAgZGl2aWRlICAgMjg0MzgzNTEuODUwMzA1MzYgICAgICAtNC4yMDkzOTc5MDQwODg2MjRFLTQ3ICAgLT4gIC02Ljc1NTkxOTEzNTc3MDY4OEUrNTMgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDUxICBkaXZpZGUgIC04NTU2MjczMS42ODIwOTU2ICAgICAgIC03LjE2NjA0NTQ0MjUzMDE4NUUrNDUgICAtPiAgIDEuMTk0MDAyMDgwNjIxNTQyRS0zOCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwNTIgIGRpdmlkZSAgIDI1MzM4MDI4NTIxNjUuMjUgICAgICAgIDcxNTQuMTE5NjA2MjM1OTU1ICAgICAgIC0+ICAgMzU0MTczOTU3LjMzMTc1MDEgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDUzICBkaXZpZGUgIC04ODU4ODMxMzQ2ODUxLjQ3NCAgICAgICA5Ny41OTczNDIwODgwMTcxNiAgICAgICAtPiAgLTkwNzY5MTg2NTA5LjgzNTc3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA1NCAgZGl2aWRlICAgMTc2NzgzNjI5ODAxMzg3LjUgICAgICAgODQwMDczMjYzLjMxMDk4MTcgICAgICAgLT4gICAyMTA0MzguMzQ4MDg0ODIwNiBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwNTUgIGRpdmlkZSAgLTQ5MzUwNjQ3MTc5NjE3NS42ICAgICAgIDc5NzMzODk0NzkwODIyLjAzICAgICAgIC0+ICAtNi4xODk0MTg4NTQ5NDA3NDYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDU2ICBkaXZpZGUgICA3OTAuMTY4MjU0MjEwMzQ0NSAgICAgICA4MjkuOTQ0OTM3MDM2NzQzNSAgICAgICAtPiAgIDAuOTUyMDczMTA2MjM3MTIxNCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjIwNTcgIGRpdmlkZSAgLTg5MjA0NTk4MzguNTgzMTY0ICAgICAgLTQ3NjcuODg5MTg3ODk5MjE0ICAgICAgIC0+ICAgMTg3MDk0NS4yOTQwMzU1ODEgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYyMDU4ICBkaXZpZGUgICA1MzUzNjY4NzE2NDQyMi4xICAgICAgICA1MzEzNy41MDA3MDMyNjg5ICAgICAgICAtPiAgIDEwMDc1MTIzMzAuMzg1Njk4IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA1OSAgZGl2aWRlICAgNC4wNTE1MzIzMTExNDY1NjFFLTc0ICAtMi4zNDMwODk3Njg5NzIyNjFFKzk0ICAgLT4gIC0xLjcyOTE0MDg4MjYwNjMzMkUtMTY4IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MjA2MCAgZGl2aWRlICAtMTQ4NDc3NTg3Nzg2MzYuODggICAgICAgMy4wNjI1NDM1MTYzODM4MDdFLTQzICAgLT4gIC00Ljg0ODE3ODg3NDU4NzQ5N0UrNTUgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gRGl2aXNpb24gcHJvYmFibHkgaGFzIHByZS1yb3VuZGluZywgc28gbmVlZCB0byB0ZXN0IHJvdW5kaW5nDQorLS0gZXhwbGljaXRseSByYXRoZXIgdGhhbiBhc3N1bWUgaW5jbHVkZWQgdGhyb3VnaCBvdGhlciB0ZXN0czsNCistLSB0ZXN0cyBpbmNsdWRlIHNpbXBsZSByb3VuZGluZyBhbmQgYWxzbyB0aGUgdHJpY2t5IGNhc2VzIG9mIHN0aWNreQ0KKy0tIGJpdHMgZm9sbG93aW5nIHR3byB6ZXJvcw0KKy0tDQorLS0gICAxLzk5OTk5IGdpdmVzIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMTAwMDAxMDAwMDEwMDAwMQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorLS0NCistLSAgIDEvOTk5OTk5IGdpdmVzIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxMDAwMDAxDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KKw0KK3JvdW5kaW5nOiBjZWlsaW5nDQorZGRkaXYzMDAxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzNCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMDIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzAwMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMDQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGZsb29yDQorZGRkaXYzMDExICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMTIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzAxMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMTQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IHVwDQorZGRkaXYzMDIxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzNCBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzAyMyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAyICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwMjQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDEgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkZGRpdjMwMzEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzAzMiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYzMDMzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzAzNCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl91cA0KK2RkZGl2MzA0MSAgZGl2aWRlICAxICAgICAzICAgIC0+ICAwLjMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYzMDQyICBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwNDMgIGRpdmlkZSAgMSA5OTk5OSAgICAtPiAgMC4wMDAwMTAwMDAxMDAwMDEwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYzMDQ0ICBkaXZpZGUgIDEgOTk5OTk5ICAgLT4gIDAuMDAwMDAxMDAwMDAxMDAwMDAxMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX2Rvd24NCitkZGRpdjMwNTEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzA1MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYzMDUzICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzA1NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZGRkaXYzMDYxICBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwNjIgIGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzA2MyAgZGl2aWRlICAxIDk5OTk5ICAgIC0+ICAwLjAwMDAxMDAwMDEwMDAwMTAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjMwNjQgIGRpdmlkZSAgMSA5OTk5OTkgICAtPiAgMC4wMDAwMDEwMDAwMDEwMDAwMDEwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IDA1dXANCitkZGRpdjMwNzEgIGRpdmlkZSAgMSAgICAgMyAgICAtPiAgMC4zMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzA3MiAgZGl2aWRlICAyICAgICAzICAgIC0+ICAwLjY2NjY2NjY2NjY2NjY2NjYgSW5leGFjdCBSb3VuZGVkDQorZGRkaXYzMDczICBkaXZpZGUgIDEgOTk5OTkgICAgLT4gIDAuMDAwMDEwMDAwMTAwMDAxMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2MzA3NCAgZGl2aWRlICAxIDk5OTk5OSAgIC0+ICAwLjAwMDAwMTAwMDAwMTAwMDAwMTAwMSBJbmV4YWN0IFJvdW5kZWQNCisNCistLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQ0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkZGRpdjQwMDEgZGl2aWRlICAzMTk1Mzg1MTkyOTE2OTE3ICAgMzE5NTM4NTE5Mjk0NjY5NSAgLT4gIDAuOTk5OTk5OTk5OTkwNjgwOSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDAyIGRpdmlkZSAgMTM5MzcyMzA2NzUyNjk5MyAgIDEzOTM3MjMwNjc1MTk0NzUgIC0+ICAxLjAwMDAwMDAwMDAwNTM5NCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDAzIGRpdmlkZSAgIDc1OTk4NTU0MzcwMjMwMiAgICA3NTk5ODU1NDM2NzQwMTUgIC0+ICAxLjAwMDAwMDAwMDAzNzIyMCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDA0IGRpdmlkZSAgOTU3OTE1ODQ1NjAyNzMwMiAgIDk1NzkxNTg0NTYwMzY4NjQgIC0+ICAwLjk5OTk5OTk5OTk5OTAwMTggIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAwNSBkaXZpZGUgIDcwNzkzOTgyOTkxNDM1NjkgICA3MDc5Mzk4Mjk5MTU2OTA0ICAtPiAgMC45OTk5OTk5OTk5OTgxMTY0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMDYgZGl2aWRlICA2NjM2MTY5MjU1MzY2NTk4ICAgNjYzNjE2OTI1NTMzNjM4NiAgLT4gIDEuMDAwMDAwMDAwMDA0NTUzICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMDcgZGl2aWRlICA2OTY0ODEzOTcxMzQwMDkwICAgNjk2NDgxMzk3MTMyMTU1NCAgLT4gIDEuMDAwMDAwMDAwMDAyNjYxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMDggZGl2aWRlICA0MTgyMjc1MjI1NDgwNzg0ICAgNDE4MjI3NTIyNTQ1NDAwOSAgLT4gIDEuMDAwMDAwMDAwMDA2NDAyICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMDkgZGl2aWRlICA5MjI4MzI1MTI0OTM4MDI5ICAgOTIyODMyNTEyNDkxODczMCAgLT4gIDEuMDAwMDAwMDAwMDAyMDkxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTAgZGl2aWRlICAzNDI4MzQ2MzM4NjMwMTkyICAgMzQyODM0NjMzODYwOTg0MyAgLT4gIDEuMDAwMDAwMDAwMDA1OTM2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTEgZGl2aWRlICAyMTQzNTExNTUwNzIyODkzICAgMjE0MzUxMTU1MDc1MTc1NCAgLT4gIDAuOTk5OTk5OTk5OTg2NTM1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDEyIGRpdmlkZSAgMTY3MjczMjkyNDM5Njc4NSAgIDE2NzI3MzI5MjQ0MDE4MTEgIC0+ICAwLjk5OTk5OTk5OTk5Njk5NTMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAxMyBkaXZpZGUgIDQxOTA3MTQ2MTE5NDgyMTYgICA0MTkwNzE0NjExOTQ4NjY0ICAtPiAgMC45OTk5OTk5OTk5OTk4OTMxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTQgZGl2aWRlICAzOTQyMjU0ODAwODQ4ODc3ICAgMzk0MjI1NDgwMDgxNDU1NiAgLT4gIDEuMDAwMDAwMDAwMDA4NzA2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTUgZGl2aWRlICAyODU0NDU5ODI2OTUyMzM0ICAgMjg1NDQ1OTgyNjk2MDc2MiAgLT4gIDAuOTk5OTk5OTk5OTk3MDQ3NCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDE2IGRpdmlkZSAgMjg1MzI1ODk1MzY2NDczMSAgIDI4NTMyNTg5NTM2ODQ0NzEgIC0+ICAwLjk5OTk5OTk5OTk5MzA4MTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAxNyBkaXZpZGUgIDk0NTM1MTI2MzgxMjU5NzggICA5NDUzNTEyNjM4MTQ2NDI1ICAtPiAgMC45OTk5OTk5OTk5OTc4MzcxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTggZGl2aWRlICAgMzM5NDc2NjMzOTQwMzY5ICAgIDMzOTQ3NjYzMzkxMjg4NyAgLT4gIDEuMDAwMDAwMDAwMDgwOTU0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMTkgZGl2aWRlICA0NTQyMTgxNDkyNjg4NDY3ICAgNDU0MjE4MTQ5MjY5NzczNSAgLT4gIDAuOTk5OTk5OTk5OTk3OTU5NiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDIwIGRpdmlkZSAgNzMxMjYwMDE5MjM5OTE5NyAgIDczMTI2MDAxOTIzOTU0MjQgIC0+ICAxLjAwMDAwMDAwMDAwMDUxNiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDIxIGRpdmlkZSAgMTgxMTY3NDk4NTU3MDExMSAgIDE4MTE2NzQ5ODU2MDM5MzUgIC0+ICAwLjk5OTk5OTk5OTk4MTMzMDAgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAyMiBkaXZpZGUgIDE3MDY0NjI2MzkwMDM0ODEgICAxNzA2NDYyNjM5MDE3NzQwICAtPiAgMC45OTk5OTk5OTk5OTE2NDQxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMjMgZGl2aWRlICA2Njk3MDUyNjU0OTQwMzY4ICAgNjY5NzA1MjY1NDkzNDExMCAgLT4gIDEuMDAwMDAwMDAwMDAwOTM0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMjQgZGl2aWRlICA1MDE1MjgzNjY0Mjc3NTM5ICAgNTAxNTI4MzY2NDMxMDcxOSAgLT4gIDAuOTk5OTk5OTk5OTkzMzg0MiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDI1IGRpdmlkZSAgMjM1OTUwMTU2MTUzNzQ2NCAgIDIzNTk1MDE1NjE1MDI0NjQgIC0+ICAxLjAwMDAwMDAwMDAxNDgzNCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDI2IGRpdmlkZSAgMjY2OTg1MDIyNzkwOTE1NyAgIDI2Njk4NTAyMjc5MDE1NDggIC0+ICAxLjAwMDAwMDAwMDAwMjg1MCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDI3IGRpdmlkZSAgOTMyOTcyNTU0Njk3NDY0OCAgIDkzMjk3MjU1NDcwMDI0NDUgIC0+ICAwLjk5OTk5OTk5OTk5NzAyMDYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAyOCBkaXZpZGUgIDMyMjg1NjI4NjcwNzEyNDggICAzMjI4NTYyODY3MTA2MjA2ICAtPiAgMC45OTk5OTk5OTk5ODkxNzIzICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMjkgZGl2aWRlICA0ODYyMjI2NjQ0OTIxMTc1ICAgNDg2MjIyNjY0NDkwOTM4MCAgLT4gIDEuMDAwMDAwMDAwMDAyNDI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMzAgZGl2aWRlICAxMDIyMjY3OTk3MDU0NTI5ICAgMTAyMjI2Nzk5NzA3MTMyOSAgLT4gIDAuOTk5OTk5OTk5OTgzNTY2MCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDMxIGRpdmlkZSAgMTA0ODc3NzQ4MjAyMzcxOSAgIDEwNDg3Nzc0ODIwMDA5NDggIC0+ICAxLjAwMDAwMDAwMDAyMTcxMiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDMyIGRpdmlkZSAgOTk4MDExMzc3NzMzNzA5OCAgIDk5ODAxMTM3NzczMzA1MzkgIC0+ICAxLjAwMDAwMDAwMDAwMDY1NyAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDMzIGRpdmlkZSAgNzUwNjgzOTE2Nzk2MzkwOCAgIDc1MDY4MzkxNjc5NDI5MDEgIC0+ICAxLjAwMDAwMDAwMDAwMjc5OCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDM0IGRpdmlkZSAgIDIzMTExOTc1MTk3Nzg2MCAgICAyMzExMTk3NTE5NjI0NTMgIC0+ICAxLjAwMDAwMDAwMDA2NjY2MiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDM1IGRpdmlkZSAgNDAzNDkwMzY2NDc2Mjk2MiAgIDQwMzQ5MDM2NjQ3OTU1MjYgIC0+ICAwLjk5OTk5OTk5OTk5MTkyOTQgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAzNiBkaXZpZGUgIDU3MDAxMjIxNTIyNzQ2OTYgICA1NzAwMTIyMTUyMjUxMzg2ICAtPiAgMS4wMDAwMDAwMDAwMDQwODkgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDAzNyBkaXZpZGUgIDY4Njk1OTk1OTAyOTMxMTAgICA2ODY5NTk5NTkwMjkzNDk1ICAtPiAgMC45OTk5OTk5OTk5OTk5NDQwICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwMzggZGl2aWRlICA1NTc2MjgxOTYwMDkyNzk3ICAgNTU3NjI4MTk2MDEwNTU3OSAgLT4gIDAuOTk5OTk5OTk5OTk3NzA3OCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDM5IGRpdmlkZSAgMjMwNDg0NDg4ODM4MTMxOCAgIDIzMDQ4NDQ4ODgzNTMwNzMgIC0+ICAxLjAwMDAwMDAwMDAxMjI1NSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDQwIGRpdmlkZSAgMzI2NTkzMzY1MTY1NjQ1MiAgIDMyNjU5MzM2NTE2ODI3NzkgIC0+ICAwLjk5OTk5OTk5OTk5MTkzODkgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0MSBkaXZpZGUgIDUyMzU3MTQ5ODUwNzk5MTQgICA1MjM1NzE0OTg1MDY2MTMxICAtPiAgMS4wMDAwMDAwMDAwMDI2MzIgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0MiBkaXZpZGUgIDU1Nzg0ODE1NzI4Mjc1NTEgICA1NTc4NDgxNTcyODIyOTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDA4MjYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0MyBkaXZpZGUgIDQ5MDk2MTYwODEzOTYxMzQgICA0OTA5NjE2MDgxMzczMDc2ICAtPiAgMS4wMDAwMDAwMDAwMDQ2OTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0NCBkaXZpZGUgICA2MzY0NDcyMjQzNDk1MzcgICAgNjM2NDQ3MjI0MzM4NzU3ICAtPiAgMS4wMDAwMDAwMDAwMTY5MzggIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0NSBkaXZpZGUgIDE1MzkzNzM0MjgzOTY2NDAgICAxNTM5MzczNDI4MzY0NzI3ICAtPiAgMS4wMDAwMDAwMDAwMjA3MzEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0NiBkaXZpZGUgIDIwMjg3ODY3MDczNzc4OTMgICAyMDI4Nzg2NzA3Mzc4ODY2ICAtPiAgMC45OTk5OTk5OTk5OTk1MjA0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNDcgZGl2aWRlICAgMTM3NjQzMjYwNDg2MjIyICAgIDEzNzY0MzI2MDQ4NzQxOSAgLT4gIDAuOTk5OTk5OTk5OTkxMzAzNiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDQ4IGRpdmlkZSAgIDI0NzQ1MTUxOTc0Njc2NSAgICAyNDc0NTE1MTk3NTIyNjcgIC0+ICAwLjk5OTk5OTk5OTk3Nzc2NTMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA0OSBkaXZpZGUgIDc4Nzc4NTg0NzUwMjIwNTQgICA3ODc3ODU4NDc0OTk5Nzk0ICAtPiAgMS4wMDAwMDAwMDAwMDI4MjYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA1MCBkaXZpZGUgIDczMzMyNDI2OTQ3NjYyNTggICA3MzMzMjQyNjk0NzQ0NjI4ICAtPiAgMS4wMDAwMDAwMDAwMDI5NTAgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA1MSBkaXZpZGUgICAxMjQwNTE1MDM2OTg1OTIgICAgMTI0MDUxNTAzNjk5Mzk3ICAtPiAgMC45OTk5OTk5OTk5OTM1MTA4ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNTIgZGl2aWRlICA4OTQ0NzM3NDMyMzg1MTg4ICAgODk0NDczNzQzMjQwNjg2MCAgLT4gIDAuOTk5OTk5OTk5OTk3NTc3MSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDUzIGRpdmlkZSAgOTg4Mzk0ODkyMzQwNjg3NCAgIDk4ODM5NDg5MjM0MjQ4NDMgIC0+ICAwLjk5OTk5OTk5OTk5ODE4MjAgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA1NCBkaXZpZGUgIDY4MjkxNzg3NDE2NTQyODQgICA2ODI5MTc4NzQxNjcxOTczICAtPiAgMC45OTk5OTk5OTk5OTc0MDk4ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNTUgZGl2aWRlICA3MzQyNzUyNDc5NzY4MTIyICAgNzM0Mjc1MjQ3OTc5MzM4NSAgLT4gIDAuOTk5OTk5OTk5OTk2NTU5NSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDU2IGRpdmlkZSAgODA2NjQyNjU3OTAwODc4MyAgIDgwNjY0MjY1Nzg5Nzc1NjMgIC0+ICAxLjAwMDAwMDAwMDAwMzg3MCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDU3IGRpdmlkZSAgODk5Mjc3NTA3MTM4MzI5NSAgIDg5OTI3NzUwNzEzNTI3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMzQwMSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDU4IGRpdmlkZSAgNTQ4NTAxMTc1NTU0NTY0MSAgIDU0ODUwMTE3NTU1NDM2MTEgIC0+ICAxLjAwMDAwMDAwMDAwMDM3MCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDU5IGRpdmlkZSAgNTc3OTk4MzA1NDM1MzkxOCAgIDU3Nzk5ODMwNTQzNjUzMDAgIC0+ICAwLjk5OTk5OTk5OTk5ODAzMDggIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA2MCBkaXZpZGUgIDk1MDIyNjUxMDI3MTM3NzQgICA5NTAyMjY1MTAyNzM1MjA4ICAtPiAgMC45OTk5OTk5OTk5OTc3NDQzICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNjEgZGl2aWRlICAyMTA5NTU4Mzk5MTMwOTgxICAgMjEwOTU1ODM5OTExNjI4MSAgLT4gIDEuMDAwMDAwMDAwMDA2OTY4ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNjIgZGl2aWRlICA1Mjk2MTgyNjM2MzUwNDcxICAgNTI5NjE4MjYzNjM1MTUyMSAgLT4gIDAuOTk5OTk5OTk5OTk5ODAxNyAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDYzIGRpdmlkZSAgMTQ0MDAxOTIyNTU5MTg4MyAgIDE0NDAwMTkyMjU2MDE4NDQgIC0+ICAwLjk5OTk5OTk5OTk5MzA4MjcgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA2NCBkaXZpZGUgIDgxODIxMTA3OTE4ODEzNDEgICA4MTgyMTEwNzkxODQ3MTc0ICAtPiAgMS4wMDAwMDAwMDAwMDQxNzYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA2NSBkaXZpZGUgICA0ODkwOTgyMzU1MTIwNjAgICAgNDg5MDk4MjM1NTM0NTE2ICAtPiAgMC45OTk5OTk5OTk5NTQwODY5ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNjYgZGl2aWRlICA2NDc1Njg3MDg0NzgyMDM4ICAgNjQ3NTY4NzA4NDc1NjA4OSAgLT4gIDEuMDAwMDAwMDAwMDA0MDA3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNjcgZGl2aWRlICA4MDk0MzQ4NTU1NzM2OTQ4ICAgODA5NDM0ODU1NTc1OTIzNiAgLT4gIDAuOTk5OTk5OTk5OTk3MjQ2NSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDY4IGRpdmlkZSAgMTk4Mjc2NjgxNjI5MTU0MyAgIDE5ODI3NjY4MTYzMDk0NjMgIC0+ICAwLjk5OTk5OTk5OTk5MDk2MjEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA2OSBkaXZpZGUgIDkyNzczMTQzMDAxMTMyNTEgICA5Mjc3MzE0MzAwMDg0NDY3ICAtPiAgMS4wMDAwMDAwMDAwMDMxMDMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3MCBkaXZpZGUgIDQzMzU1MzI5NTkzMTg5MzQgICA0MzM1NTMyOTU5MjkzMTY3ICAtPiAgMS4wMDAwMDAwMDAwMDU5NDMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3MSBkaXZpZGUgIDc3NjcxMTMwMzI5ODEzNDggICA3NzY3MTEzMDMyOTY4MTMyICAtPiAgMS4wMDAwMDAwMDAwMDE3MDIgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3MiBkaXZpZGUgIDE1Nzg1NDgwNTMzNDI4NjggICAxNTc4NTQ4MDUzMzcwNDQ4ICAtPiAgMC45OTk5OTk5OTk5ODI1MjgyICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNzMgZGl2aWRlICAzNzkwNDIwNjg2NjY2ODk4ICAgMzc5MDQyMDY4NjYzNjMxNSAgLT4gIDEuMDAwMDAwMDAwMDA4MDY4ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwNzQgZGl2aWRlICAgODcxNjgyNDIxOTU1MTQ3ICAgIDg3MTY4MjQyMTk3NjQ0MSAgLT4gIDAuOTk5OTk5OTk5OTc1NTcxNCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDc1IGRpdmlkZSAgIDc0NDE0MTA1NDQ3OTk0MCAgICA3NDQxNDEwNTQ1MTIzMjkgIC0+ICAwLjk5OTk5OTk5OTk1NjQ3NDYgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3NiBkaXZpZGUgIDg5NTY4MjQxODM2NzA3MzUgICA4OTU2ODI0MTgzNjQxNzQxICAtPiAgMS4wMDAwMDAwMDAwMDMyMzcgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3NyBkaXZpZGUgIDgzMzcyOTE2OTQ0ODU2ODIgICA4MzM3MjkxNjk0NDUxMTkzICAtPiAgMS4wMDAwMDAwMDAwMDQxMzcgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3OCBkaXZpZGUgIDQxMDc3NzU5NDQ2ODM2NjkgICA0MTA3Nzc1OTQ0NjU3MDk3ICAtPiAgMS4wMDAwMDAwMDAwMDY0NjkgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA3OSBkaXZpZGUgIDg2OTE5MDAwNTc5NjQ2NDggICA4NjkxOTAwMDU3OTk3NTU1ICAtPiAgMC45OTk5OTk5OTk5OTYyMTQxICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwODAgZGl2aWRlICAyMjI5NTI4NTIwNTM2NDYyICAgMjIyOTUyODUyMDUwMjMzNyAgLT4gIDEuMDAwMDAwMDAwMDE1MzA2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwODEgZGl2aWRlICAgMzk4NDQyMDgzNzc0MzIyICAgIDM5ODQ0MjA4Mzc0NjI3MyAgLT4gIDEuMDAwMDAwMDAwMDcwMzk3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwODIgZGl2aWRlICA1MzE5ODE5Nzc2ODA4NzU5ICAgNTMxOTgxOTc3NjgzODMxMyAgLT4gIDAuOTk5OTk5OTk5OTk0NDQ0NSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDgzIGRpdmlkZSAgNzcxMDQ5MTI5OTA2Njg1NSAgIDc3MTA0OTEyOTkwNDE4NTggIC0+ICAxLjAwMDAwMDAwMDAwMzI0MiAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDg0IGRpdmlkZSAgOTA4MzIzMTI5NjA4NzI2NiAgIDkwODMyMzEyOTYwNTgxNjAgIC0+ICAxLjAwMDAwMDAwMDAwMzIwNCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDg1IGRpdmlkZSAgMzU2Njg3MzU3NDkwNDU1OSAgIDM1NjY4NzM1NzQ4OTAzMjggIC0+ICAxLjAwMDAwMDAwMDAwMzk5MCAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDg2IGRpdmlkZSAgIDU5NjM0MzI5MDU1MDUyNSAgICA1OTYzNDMyOTA1NTU2MTQgIC0+ICAwLjk5OTk5OTk5OTk5MTQ2NjMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA4NyBkaXZpZGUgICAyNzgyMjc5MjUwOTMxOTIgICAgMjc4MjI3OTI1MDY4MTA0ICAtPiAgMS4wMDAwMDAwMDAwOTAxNzEgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA4OCBkaXZpZGUgIDMyOTI5MDI5NTg0OTA2NDkgICAzMjkyOTAyOTU4NTE5ODgxICAtPiAgMC45OTk5OTk5OTk5OTExMjI3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwODkgZGl2aWRlICA1NTIxODcxMzY0MjQ1ODgxICAgNTUyMTg3MTM2NDIyOTUzNiAgLT4gIDEuMDAwMDAwMDAwMDAyOTYwICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTAgZGl2aWRlICAyNDA2NTA1NjAyODgzNjE3ICAgMjQwNjUwNTYwMjg1Nzk5NyAgLT4gIDEuMDAwMDAwMDAwMDEwNjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTEgZGl2aWRlICA3NzQxMTQ2OTg0ODY5MjA4ICAgNzc0MTE0Njk4NDg2NzI1NSAgLT4gIDEuMDAwMDAwMDAwMDAwMjUyICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTIgZGl2aWRlICA0NTc2MDQxODMyNDE0OTA5ICAgNDU3NjA0MTgzMjQwNTEwMiAgLT4gIDEuMDAwMDAwMDAwMDAyMTQzICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTMgZGl2aWRlICA5MTgzNzU2OTgyODc4MDU3ICAgOTE4Mzc1Njk4MjkwMTkzNCAgLT4gIDAuOTk5OTk5OTk5OTk3NDAwMSAgSW5leGFjdCBSb3VuZGVkDQorZGRkaXY0MDk0IGRpdmlkZSAgNjIxNTczNjUxMzg1NTE1OSAgIDYyMTU3MzY1MTM4NzAzNDIgIC0+ICAwLjk5OTk5OTk5OTk5NzU1NzMgIEluZXhhY3QgUm91bmRlZA0KK2RkZGl2NDA5NSBkaXZpZGUgICAyNDg1NTQ5Njg1MzQ1MzMgICAgMjQ4NTU0OTY4NTUxNDE3ICAtPiAgMC45OTk5OTk5OTk5MzIwNzE0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTYgZGl2aWRlICAgMzc2MzE0MTY1NjY4NjQ1ICAgIDM3NjMxNDE2NTY1OTc1NSAgLT4gIDEuMDAwMDAwMDAwMDIzNjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTcgZGl2aWRlICA1NTEzNTY5MjQ5ODA5NzE4ICAgNTUxMzU2OTI0OTgwODkwNiAgLT4gIDEuMDAwMDAwMDAwMDAwMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTggZGl2aWRlICAzMzY3OTkyMjQyMTY3OTA0ICAgMzM2Nzk5MjI0MjE1NjIyOCAgLT4gIDEuMDAwMDAwMDAwMDAzNDY3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGRpdjQwOTkgZGl2aWRlICA2MTM0ODY5NTM4OTY2OTY3ICAgNjEzNDg2OTUzODk4NTk4NiAgLT4gIDAuOTk5OTk5OTk5OTk2ODk5OSAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGREaXZpZGVJbnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CmluZGV4IGJlYzU2NzkuLjE1NTViNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZERpdmlkZUludC5kZWNUZXN0CkBAIC0xLDQ0OSArMSw0NDkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGREaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNEb3VibGUgaW50ZWdlciBkaXZpc2lvbiAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZGRkdmkwMDEgZGl2aWRlaW50ICAxICAgICAxICAgIC0+ICAxCi1kZGR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDIKLWRkZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMAotZGRkdmkwMDQgZGl2aWRlaW50ICAyICAgICAyICAgIC0+ICAxCi1kZGR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDAKLWRkZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMAotZGRkdmkwMDcgZGl2aWRlaW50ICAxICAgICAzICAgIC0+ICAwCi1kZGR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDAKLWRkZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQotCi1kZGR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDIKLWRkZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTIKLWRkZHZpMDEyIGRpdmlkZWludCAgLTIuNCAgMSAgICAtPiAgLTIKLWRkZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMgotZGRkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyCi1kZGR2aTAxNSBkaXZpZGVpbnQgIDIuNDAwIDEgICAgLT4gIDIKLWRkZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQotZGRkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxCi1kZGR2aTAxOCBkaXZpZGVpbnQgIDIuICAgIDIgICAgLT4gIDEKLWRkZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQotCi1kZGR2aTAyMCBkaXZpZGVpbnQgIDE4NyAgIDE4NyAgLT4gIDEKLWRkZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMgotZGRkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDIKLWRkZHZpMDIzIGRpdmlkZWludCAgNSAgICAgMi4wMDAgIC0+ICAyCi1kZGR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKLWRkZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQotCi1kZGR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMAotZGRkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDAKLWRkZHZpMDMyIGRpdmlkZWludCAgMSAgICAgOCAgICAgIC0+ICAwCi1kZGR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMAotZGRkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDAKLWRkZHZpMDM1IGRpdmlkZWludCAgMSAgICAgNjQgICAgIC0+ICAwCi1kZGR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMAotZGRkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTAKLWRkZHZpMDQyIGRpdmlkZWludCAgMSAgICAtOCAgICAgIC0+IC0wCi1kZGR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMAotZGRkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTAKLWRkZHZpMDQ1IGRpdmlkZWludCAgMSAgICAtNjQgICAgIC0+IC0wCi1kZGR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMAotZGRkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTAKLWRkZHZpMDUyIGRpdmlkZWludCAtMSAgICAgOCAgICAgIC0+IC0wCi1kZGR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMAotZGRkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTAKLWRkZHZpMDU1IGRpdmlkZWludCAtMSAgICAgNjQgICAgIC0+IC0wCi1kZGR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMAotZGRkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDAKLWRkZHZpMDYyIGRpdmlkZWludCAtMSAgICAtOCAgICAgIC0+ICAwCi1kZGR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMAotZGRkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDAKLWRkZHZpMDY1IGRpdmlkZWludCAtMSAgICAtNjQgICAgIC0+ICAwCi0KLS0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuCi1kZGR2aTE2MCBkaXZpZGVpbnQgIDEgICAgIDEgICAgICAgICAtPiAgMQotZGRkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDAKLWRkZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwCi1kZGR2aTE2MyBkaXZpZGVpbnQgIDEgICAgIDEwMDAgICAgICAtPiAgMAotZGRkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDAKLWRkZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwCi1kZGR2aTE2NiBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAgICAtPiAgMAotZGRkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDAKLWRkZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwCi1kZGR2aTE3MCBkaXZpZGVpbnQgIDEgICAgLTEgICAgICAgICAtPiAtMQotZGRkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTAKLWRkZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wCi1kZGR2aTE3MyBkaXZpZGVpbnQgIDEgICAgLTEwMDAgICAgICAtPiAtMAotZGRkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTAKLWRkZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wCi1kZGR2aTE3NiBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAgICAtPiAtMAotZGRkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTAKLWRkZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wCi1kZGR2aTE4MCBkaXZpZGVpbnQgLTEgICAgIDEgICAgICAgICAtPiAtMQotZGRkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTAKLWRkZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wCi1kZGR2aTE4MyBkaXZpZGVpbnQgLTEgICAgIDEwMDAgICAgICAtPiAtMAotZGRkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTAKLWRkZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wCi1kZGR2aTE4NiBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAgICAtPiAtMAotZGRkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTAKLWRkZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wCi1kZGR2aTE5MCBkaXZpZGVpbnQgLTEgICAgLTEgICAgICAgICAtPiAgMQotZGRkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDAKLWRkZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwCi1kZGR2aTE5MyBkaXZpZGVpbnQgLTEgICAgLTEwMDAgICAgICAtPiAgMAotZGRkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDAKLWRkZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwCi1kZGR2aTE5NiBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAgICAtPiAgMAotZGRkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDAKLWRkZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwCi0KLS0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzCi1kZGR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQotZGRkdmkwNzEgZGl2aWRlaW50ICA5OTk5OTk5OTkuNCAgIDEgIC0+ICA5OTk5OTk5OTkKLWRkZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5Ci1kZGR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQotZGRkdmkwNzQgZGl2aWRlaW50ICA5OTk5OTk5OTkuOTk5IDEgIC0+ICA5OTk5OTk5OTkKLQotZGRkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDAKLWRkZHZpMDkxIGRpdmlkZWludCAgLjAgICAgICAgICAgICAxICAgIC0+ICAwCi1kZGR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMAotZGRkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDAKLWRkZHZpMDk0IGRpdmlkZWludCAgMC4wMDAwRS01MCAgICAxICAgIC0+ICAwCi0KLWRkZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKLWRkZHZpMTAxIGRpdmlkZWludCAgMSAgMiAgIC0+IDAKLWRkZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDAKLWRkZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDAKLWRkZHZpMTA0IGRpdmlkZWludCAgMSAgNSAgIC0+IDAKLWRkZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDAKLWRkZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDAKLWRkZHZpMTA3IGRpdmlkZWludCAgMSAgOCAgIC0+IDAKLWRkZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDAKLWRkZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDAKLWRkZHZpMTEwIGRpdmlkZWludCAgMSAgMSAgIC0+IDEKLWRkZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDIKLWRkZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMKLWRkZHZpMTEzIGRpdmlkZWludCAgNCAgMSAgIC0+IDQKLWRkZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUKLWRkZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYKLWRkZHZpMTE2IGRpdmlkZWludCAgNyAgMSAgIC0+IDcKLWRkZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgKLWRkZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkKLWRkZHZpMTE5IGRpdmlkZWludCAgMTAgMSAgIC0+IDEwCi0KLS0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwKLWRkZHZpMTMxIGRpdmlkZWludCAgMTAxLjMgICAxICAgICAtPiAgMTAxCi1kZGR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQotZGRkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMwotZGRkdmkxMzQgZGl2aWRlaW50ICAxMDEuMCAgIDMgICAgIC0+ICAzMwotZGRkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyCi1kZGR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDIKLWRkZHZpMTM3IGRpdmlkZWludCAgMTggICAgICAxOCAgICAtPiAgMQotZGRkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxCi1kZGR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDEKLWRkZHZpMTQwIGRpdmlkZWludCAgMi40MDAgICAyICAgICAtPiAgMQotZGRkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwCi1kZGR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDEKLWRkZHZpMTQzIGRpdmlkZWludCAgNSAgICAgICAyICAgICAtPiAgMgotZGRkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwCi1kZGR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDAKLQotLS0gT3RoZXJzCi1kZGR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkKLWRkZHZpMTUxIGRpdmlkZWludCAgMTIzNDUgIDQuOTkgICAtPiAgMjQ3MwotZGRkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5Ci1kZGR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkKLWRkZHZpMTU0IGRpdmlkZWludCAgMTIzNDUgIDUuMSAgICAtPiAgMjQyMAotZGRkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0Ci1kZGR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgKLWRkZHZpMTU3IGRpdmlkZWludCAgICAxMDEgIDcuNiAgICAtPiAgMTMKLQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMAotZGRkdmkyMDEgZGl2aWRlaW50ICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRkdmkyMDQgZGl2aWRlaW50ICAwLjAwMDEgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmkyMDcgZGl2aWRlaW50ICAxICAgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmkyMTAgZGl2aWRlaW50IDFFKzEwMCAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxNSBkaXZpZGVpbnQgIC0wLjAxICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxOCBkaXZpZGVpbnQgIC0xICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTIyMSBkaXZpZGVpbnQgLTFFKzM4MCAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi0KLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdwotZGRkdmkyNzAgZGl2aWRlaW50IDEgMWUzODQgICAgICAgICAgLT4gMAotZGRkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMAotZGRkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMAotZGRkdmkyNzMgZGl2aWRlaW50IDEgMC45OTk5OTk5OTk5OTk5OTk5ZTM4NCAgICAgICAtPiAwCi1kZGR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkZHZpMjc2IGRpdmlkZWludCA5Ljk5ZTM4NCAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZGR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLQotZGRkdmkyODAgZGl2aWRlaW50IDAuMSA5ZS0zODMgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZGR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRkdmkyODMgZGl2aWRlaW50IDAuMSA5ZS0zODIgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi0KLS0tIEdEIGVkZ2UgY2FzZXM6IGxocyBzbWFsbGVyIHRoYW4gcmhzIGJ1dCBtb3JlIGRpZ2l0cwotZGRkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwCi1kZGR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDAKLWRkZHZpMzAzICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMSAgICAtPiAgMAotZGRkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwCi1kZGR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDAKLWRkZHZpMzA2ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEgICAgICAtPiAgMAotZGRkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwCi1kZGR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDAKLWRkZHZpMzA5ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAotZGRkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCi1kZGR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDAKLWRkZHZpMzEyICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMCAgICAtPiAgMAotZGRkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwCi1kZGR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDAKLWRkZHZpMzE1ICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMDEgICAtPiAgMAotCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKLWRkZHZpMzMwICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+ICAxMjM0NTY3ODkwMTIzNDUKLWRkZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3ODkwMTIzNDU2Ci1kZGR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkZHZpMzMzICBkaXZpZGVpbnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KLWRkZHZpMTA1MSBkaXZpZGVpbnQgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZGR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkZHZpMTA1NCBkaXZpZGVpbnQgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDAKLWRkZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wCi1kZGR2aTEwNTcgZGl2aWRlaW50IC0xZS0yNzcgIDFlKzMxMSAtPiAtMAotZGRkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDAKLQotLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCi1kZGR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMAotZGRkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDAKLWRkZHZpMTA2MiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMyAtPiAwCi1kZGR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMAotZGRkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDAKLWRkZHZpMTA2NSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNiAtPiAwCi1kZGR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMAotZGRkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDAKLWRkZHZpMTA2OCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOSAtPiAwCi1kZGR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMAotCi1kZGR2aTExMDEgZGl2aWRlaW50ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMAotZGRkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDAKLWRkZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwCi0KLWRkZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwCi1kZGR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTAKLWRkZHZpMTEyMCBkaXZpZGVpbnQgIDVFLTM5NCAgICAgICAxZSs1ICAtPiAwCi0KLWRkZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMAotZGRkdmkxMTMwIGRpdmlkZWludCAgMy4wRS0zOTQgICAgLTFlKzUgIC0+IC0wCi0KLWRkZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMAotZGRkdmkxMTMyIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OSAtPiAwCi1kZGR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDAKLWRkZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMAotZGRkdmkxMTM1IGRpdmlkZWludCAgNC4wRS0xOTkgICAgIDRlKzE5OCAtPiAwCi0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MKLWRkZHZpNDAxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxMDAgLT4gMTIzNDU2NzgwCi1kZGR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDAKLWRkZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwCi1kZGR2aTQwNCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAgIC0+IDAKLWRkZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDAKLWRkZHZpNDA3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxMCAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDAKLWRkZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQxMCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAgIC0+IDAKLWRkZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDAKLWRkZHZpNDEzIGRpdmlkZWludCAxMjM0NTY3ODk0OCAxMDAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQotZGRkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkKLWRkZHZpNDE2IGRpdmlkZWludCAxMjM0NTY3ODk1MSAxMDAgLT4gMTIzNDU2Nzg5Ci1kZGR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQotZGRkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDAKLWRkZHZpNDQyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwIC0+IDAKLWRkZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDAKLWRkZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDAKLWRkZHZpNDQ1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxIC0+IDEyMzQ1Njc4OTAKLWRkZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDAKLWRkZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTEKLWRkZHZpNDQ4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgIC0+IDAKLWRkZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxCi1kZGR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwCi1kZGR2aTQ1MSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMSAtPiAxMjM0NTY3ODk2Ci1kZGR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwCi0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLWRkZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMAotZGRkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGR2aTUzMyBkaXZpZGVpbnQgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZGR2aTUzNiBkaXZpZGVpbnQgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLQotZGRkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMAotZGRkdmk1NDIgZGl2aWRlaW50IC0wICAgIC0xICAgICAtPiAgMAotZGRkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMAotZGRkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMAotZGRkdmk1NDUgZGl2aWRlaW50IC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NDggZGl2aWRlaW50ICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kZGR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wCi1kZGR2aTU1MiBkaXZpZGVpbnQgLTAuMCAgLTEgICAgIC0+ICAwCi1kZGR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwCi1kZGR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wCi1kZGR2aTU1NSBkaXZpZGVpbnQgLTEuMCAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kZGR2aTU1OCBkaXZpZGVpbnQgIDEuMCAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi0KLWRkZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTAKLWRkZHZpNTYyIGRpdmlkZWludCAtMCAgICAtMS4wICAgLT4gIDAKLWRkZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDAKLWRkZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTAKLWRkZHZpNTY1IGRpdmlkZWludCAtMSAgICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkZHZpNTY4IGRpdmlkZWludCAgMSAgICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLQotZGRkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMAotZGRkdmk1NzIgZGl2aWRlaW50IC0wLjAgIC0xLjAgICAtPiAgMAotZGRkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMAotZGRkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMAotZGRkdmk1NzUgZGl2aWRlaW50IC0xLjAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZGRkdmk1NzggZGl2aWRlaW50ICAxLjAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi0tLSBTcGVjaWFscwotZGRkdmk1ODAgZGl2aWRlaW50ICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQotZGRkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRkZHZpNTgzIGRpdmlkZWludCAgSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1kZGR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZGRkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKLWRkZHZpNTg2IGRpdmlkZWludCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kZGR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTAKLWRkZHZpNTg5IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMAotZGRkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMAotZGRkdmk1OTIgZGl2aWRlaW50ICAwICAgICBJbmYgICAtPiAgMAotZGRkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMAotZGRkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMAotZGRkdmk1OTUgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRkdmk2MDEgZGl2aWRlaW50IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKLWRkZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kZGR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQotZGRkdmk2MDQgZGl2aWRlaW50IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRkZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZGR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQotZGRkdmk2MDcgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCi1kZGR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZHZpNjEwIGRpdmlkZWludCAtMSAgICAtSW5mICAgLT4gIDAKLWRkZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDAKLWRkZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTAKLWRkZHZpNjEzIGRpdmlkZWludCAgMSAgICAtSW5mICAgLT4gLTAKLWRkZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTAKLWRkZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZGR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRkZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTgotZGRkdmk2MjMgZGl2aWRlaW50ICBOYU4gLTEgICAgICAtPiAgTmFOCi1kZGR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRkZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTgotZGRkdmk2MjYgZGl2aWRlaW50ICBOYU4gIDEgICAgICAtPiAgTmFOCi1kZGR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRkZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTgotZGRkdmk2MjkgZGl2aWRlaW50ICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kZGR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRkZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTgotZGRkdmk2MzIgZGl2aWRlaW50IC0xICAgIE5hTiAgICAtPiAgTmFOCi1kZGR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4KLWRkZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTgotZGRkdmk2MzUgZGl2aWRlaW50ICAxICAgIE5hTiAgICAtPiAgTmFOCi1kZGR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRkZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kZGR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0MyBkaXZpZGVpbnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0NiBkaXZpZGVpbnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY0OSBkaXZpZGVpbnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1MiBkaXZpZGVpbnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1NSBkaXZpZGVpbnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1OCBkaXZpZGVpbnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkKLWRkZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgKLWRkZHZpNjYzIGRpdmlkZWludCAgTmFONyAgSW5mICAgLT4gIE5hTjcKLWRkZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYKLWRkZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQKLWRkZHZpNjY2IGRpdmlkZWludCAtMTAwMCAgTmFOMyAgLT4gIE5hTjMKLWRkZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjIKLQotZGRkdmk2NzEgZGl2aWRlaW50IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRkdmk2NzQgZGl2aWRlaW50ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KLWRkZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRkdmk2NzcgZGl2aWRlaW50ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kZGR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOdWxsIHRlc3RzCi1kZGR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRkdmk5MDEgZGl2aWRlaW50ICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkRGl2aWRlSW50LmRlY1Rlc3QgLS0gZGVjRG91YmxlIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RkZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQ0KK2RkZHZpMDAyIGRpdmlkZWludCAgMiAgICAgMSAgICAtPiAgMg0KK2RkZHZpMDAzIGRpdmlkZWludCAgMSAgICAgMiAgICAtPiAgMA0KK2RkZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQ0KK2RkZHZpMDA1IGRpdmlkZWludCAgMCAgICAgMSAgICAtPiAgMA0KK2RkZHZpMDA2IGRpdmlkZWludCAgMCAgICAgMiAgICAtPiAgMA0KK2RkZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMA0KK2RkZHZpMDA4IGRpdmlkZWludCAgMiAgICAgMyAgICAtPiAgMA0KK2RkZHZpMDA5IGRpdmlkZWludCAgMyAgICAgMyAgICAtPiAgMQ0KKw0KK2RkZHZpMDEwIGRpdmlkZWludCAgMi40ICAgMSAgICAtPiAgMg0KK2RkZHZpMDExIGRpdmlkZWludCAgMi40ICAgLTEgICAtPiAgLTINCitkZGR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yDQorZGRkdmkwMTMgZGl2aWRlaW50ICAtMi40ICAtMSAgIC0+ICAyDQorZGRkdmkwMTQgZGl2aWRlaW50ICAyLjQwICAxICAgIC0+ICAyDQorZGRkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyDQorZGRkdmkwMTYgZGl2aWRlaW50ICAyLjQgICAyICAgIC0+ICAxDQorZGRkdmkwMTcgZGl2aWRlaW50ICAyLjQwMCAyICAgIC0+ICAxDQorZGRkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxDQorZGRkdmkwMTkgZGl2aWRlaW50ICAyMCAgICAyMCAgIC0+ICAxDQorDQorZGRkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxDQorZGRkdmkwMjEgZGl2aWRlaW50ICA1ICAgICAyICAgIC0+ICAyDQorZGRkdmkwMjIgZGl2aWRlaW50ICA1ICAgICAyLjAgICAgLT4gIDINCitkZGR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMg0KK2RkZHZpMDI0IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KK2RkZHZpMDI1IGRpdmlkZWludCAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KKw0KK2RkZHZpMDMwIGRpdmlkZWludCAgMSAgICAgMiAgICAgIC0+ICAwDQorZGRkdmkwMzEgZGl2aWRlaW50ICAxICAgICA0ICAgICAgLT4gIDANCitkZGR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMA0KK2RkZHZpMDMzIGRpdmlkZWludCAgMSAgICAgMTYgICAgIC0+ICAwDQorZGRkdmkwMzQgZGl2aWRlaW50ICAxICAgICAzMiAgICAgLT4gIDANCitkZGR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMA0KK2RkZHZpMDQwIGRpdmlkZWludCAgMSAgICAtMiAgICAgIC0+IC0wDQorZGRkdmkwNDEgZGl2aWRlaW50ICAxICAgIC00ICAgICAgLT4gLTANCitkZGR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMA0KK2RkZHZpMDQzIGRpdmlkZWludCAgMSAgICAtMTYgICAgIC0+IC0wDQorZGRkdmkwNDQgZGl2aWRlaW50ICAxICAgIC0zMiAgICAgLT4gLTANCitkZGR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMA0KK2RkZHZpMDUwIGRpdmlkZWludCAtMSAgICAgMiAgICAgIC0+IC0wDQorZGRkdmkwNTEgZGl2aWRlaW50IC0xICAgICA0ICAgICAgLT4gLTANCitkZGR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMA0KK2RkZHZpMDUzIGRpdmlkZWludCAtMSAgICAgMTYgICAgIC0+IC0wDQorZGRkdmkwNTQgZGl2aWRlaW50IC0xICAgICAzMiAgICAgLT4gLTANCitkZGR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMA0KK2RkZHZpMDYwIGRpdmlkZWludCAtMSAgICAtMiAgICAgIC0+ICAwDQorZGRkdmkwNjEgZGl2aWRlaW50IC0xICAgIC00ICAgICAgLT4gIDANCitkZGR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMA0KK2RkZHZpMDYzIGRpdmlkZWludCAtMSAgICAtMTYgICAgIC0+ICAwDQorZGRkdmkwNjQgZGl2aWRlaW50IC0xICAgIC0zMiAgICAgLT4gIDANCitkZGR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMA0KKw0KKy0tIHNpbWlsYXIgd2l0aCBwb3dlcnMgb2YgdGVuDQorZGRkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDENCitkZGR2aTE2MSBkaXZpZGVpbnQgIDEgICAgIDEwICAgICAgICAtPiAgMA0KK2RkZHZpMTYyIGRpdmlkZWludCAgMSAgICAgMTAwICAgICAgIC0+ICAwDQorZGRkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDANCitkZGR2aTE2NCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwICAgICAtPiAgMA0KK2RkZHZpMTY1IGRpdmlkZWludCAgMSAgICAgMTAwMDAwICAgIC0+ICAwDQorZGRkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDANCitkZGR2aTE2NyBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwICAtPiAgMA0KK2RkZHZpMTY4IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAwIC0+ICAwDQorZGRkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTENCitkZGR2aTE3MSBkaXZpZGVpbnQgIDEgICAgLTEwICAgICAgICAtPiAtMA0KK2RkZHZpMTcyIGRpdmlkZWludCAgMSAgICAtMTAwICAgICAgIC0+IC0wDQorZGRkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTANCitkZGR2aTE3NCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwICAgICAtPiAtMA0KK2RkZHZpMTc1IGRpdmlkZWludCAgMSAgICAtMTAwMDAwICAgIC0+IC0wDQorZGRkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTANCitkZGR2aTE3NyBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwICAtPiAtMA0KK2RkZHZpMTc4IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAwIC0+IC0wDQorZGRkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTENCitkZGR2aTE4MSBkaXZpZGVpbnQgLTEgICAgIDEwICAgICAgICAtPiAtMA0KK2RkZHZpMTgyIGRpdmlkZWludCAtMSAgICAgMTAwICAgICAgIC0+IC0wDQorZGRkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTANCitkZGR2aTE4NCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwICAgICAtPiAtMA0KK2RkZHZpMTg1IGRpdmlkZWludCAtMSAgICAgMTAwMDAwICAgIC0+IC0wDQorZGRkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTANCitkZGR2aTE4NyBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwICAtPiAtMA0KK2RkZHZpMTg4IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAwIC0+IC0wDQorZGRkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDENCitkZGR2aTE5MSBkaXZpZGVpbnQgLTEgICAgLTEwICAgICAgICAtPiAgMA0KK2RkZHZpMTkyIGRpdmlkZWludCAtMSAgICAtMTAwICAgICAgIC0+ICAwDQorZGRkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDANCitkZGR2aTE5NCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwICAgICAtPiAgMA0KK2RkZHZpMTk1IGRpdmlkZWludCAtMSAgICAtMTAwMDAwICAgIC0+ICAwDQorZGRkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDANCitkZGR2aTE5NyBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwICAtPiAgMA0KK2RkZHZpMTk4IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAwIC0+ICAwDQorDQorLS0gc29tZSBsb25nIG9wZXJhbmQgKGF0IHA9OSkgY2FzZXMNCitkZGR2aTA3MCBkaXZpZGVpbnQgIDk5OTk5OTk5OSAgICAgMSAgLT4gIDk5OTk5OTk5OQ0KK2RkZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5DQorZGRkdmkwNzIgZGl2aWRlaW50ICA5OTk5OTk5OTkuNSAgIDEgIC0+ICA5OTk5OTk5OTkNCitkZGR2aTA3MyBkaXZpZGVpbnQgIDk5OTk5OTk5OS45ICAgMSAgLT4gIDk5OTk5OTk5OQ0KK2RkZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5DQorDQorZGRkdmkwOTAgZGl2aWRlaW50ICAwLiAgICAgICAgICAgIDEgICAgLT4gIDANCitkZGR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMA0KK2RkZHZpMDkyIGRpdmlkZWludCAgMC4wMCAgICAgICAgICAxICAgIC0+ICAwDQorZGRkdmkwOTMgZGl2aWRlaW50ICAwLjAwRSs5ICAgICAgIDEgICAgLT4gIDANCitkZGR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMA0KKw0KK2RkZHZpMTAwIGRpdmlkZWludCAgMSAgMSAgIC0+IDENCitkZGR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwDQorZGRkdmkxMDIgZGl2aWRlaW50ICAxICAzICAgLT4gMA0KK2RkZHZpMTAzIGRpdmlkZWludCAgMSAgNCAgIC0+IDANCitkZGR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwDQorZGRkdmkxMDUgZGl2aWRlaW50ICAxICA2ICAgLT4gMA0KK2RkZHZpMTA2IGRpdmlkZWludCAgMSAgNyAgIC0+IDANCitkZGR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwDQorZGRkdmkxMDggZGl2aWRlaW50ICAxICA5ICAgLT4gMA0KK2RkZHZpMTA5IGRpdmlkZWludCAgMSAgMTAgIC0+IDANCitkZGR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxDQorZGRkdmkxMTEgZGl2aWRlaW50ICAyICAxICAgLT4gMg0KK2RkZHZpMTEyIGRpdmlkZWludCAgMyAgMSAgIC0+IDMNCitkZGR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0DQorZGRkdmkxMTQgZGl2aWRlaW50ICA1ICAxICAgLT4gNQ0KK2RkZHZpMTE1IGRpdmlkZWludCAgNiAgMSAgIC0+IDYNCitkZGR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3DQorZGRkdmkxMTcgZGl2aWRlaW50ICA4ICAxICAgLT4gOA0KK2RkZHZpMTE4IGRpdmlkZWludCAgOSAgMSAgIC0+IDkNCitkZGR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMA0KKw0KKy0tIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCitkZGR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQ0KK2RkZHZpMTMyIGRpdmlkZWludCAgMTAxLjAgICAxICAgICAtPiAgMTAxDQorZGRkdmkxMzMgZGl2aWRlaW50ICAxMDEuMyAgIDMgICAgIC0+ICAzMw0KK2RkZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMNCitkZGR2aTEzNSBkaXZpZGVpbnQgIDIuNCAgICAgMSAgICAgLT4gIDINCitkZGR2aTEzNiBkaXZpZGVpbnQgIDIuNDAwICAgMSAgICAgLT4gIDINCitkZGR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDENCitkZGR2aTEzOCBkaXZpZGVpbnQgIDExMjAgICAgMTAwMCAgLT4gIDENCitkZGR2aTEzOSBkaXZpZGVpbnQgIDIuNCAgICAgMiAgICAgLT4gIDENCitkZGR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDENCitkZGR2aTE0MSBkaXZpZGVpbnQgIDAuNSAgICAgMi4wMDAgLT4gIDANCitkZGR2aTE0MiBkaXZpZGVpbnQgIDguMDA1ICAgNyAgICAgLT4gIDENCitkZGR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDINCitkZGR2aTE0NCBkaXZpZGVpbnQgIDAgICAgICAgMiAgICAgLT4gIDANCitkZGR2aTE0NSBkaXZpZGVpbnQgIDAuMDAgICAgMiAgICAgLT4gIDANCisNCistLSBPdGhlcnMNCitkZGR2aTE1MCBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5OSAgLT4gIDI0NjkNCitkZGR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMNCitkZGR2aTE1MiBkaXZpZGVpbnQgIDEyMzQ1ICA0LjkgICAgLT4gIDI1MTkNCitkZGR2aTE1MyBkaXZpZGVpbnQgIDEyMzQ1ICA1ICAgICAgLT4gIDI0NjkNCitkZGR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjANCitkZGR2aTE1NSBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAxICAgLT4gIDI0NjQNCitkZGR2aTE1NiBkaXZpZGVpbnQgIDEyMzQ1ICA1LjAwMSAgLT4gIDI0NjgNCitkZGR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzDQorDQorLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGVpbnQgYnkgMA0KK2RkZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRkdmkyMDIgZGl2aWRlaW50ICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZGR2aTIwMyBkaXZpZGVpbnQgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMDUgZGl2aWRlaW50ICAwLjAxICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTIwNiBkaXZpZGVpbnQgIDAuMSAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMDggZGl2aWRlaW50ICAxICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTIwOSBkaXZpZGVpbnQgMTAgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMTEgZGl2aWRlaW50IDFFKzM4MCAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTIxNCBkaXZpZGVpbnQgIC0wLjAwMDEgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpMjE2IGRpdmlkZWludCAgLTAuMSAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTIxNyBkaXZpZGVpbnQgIC0xICAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpMjE5IGRpdmlkZWludCAtMTAgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTIyMCBkaXZpZGVpbnQgLTFFKzEwMCAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KKy0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdw0KK2RkZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDANCitkZGR2aTI3MSBkaXZpZGVpbnQgMSAwLjllMzg0ICAgICAgICAtPiAwDQorZGRkdmkyNzIgZGl2aWRlaW50IDEgMC45OWUzODQgICAgICAgLT4gMA0KK2RkZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMA0KK2RkZHZpMjc0IGRpdmlkZWludCA5ZTM4NCAgICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZGRkdmkyNzUgZGl2aWRlaW50IDkuOWUzODQgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkZHZpMjc3IGRpdmlkZWludCA5Ljk5OTk5OTk5OTk5OTk5OWUzODQgMSAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KKw0KK2RkZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZGRkdmkyODEgZGl2aWRlaW50IDAuMSA5OWUtMzgzICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTI4MiBkaXZpZGVpbnQgMC4xIDk5OWUtMzgzICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZGRkdmkyODQgZGl2aWRlaW50IDAuMSA5OWUtMzgyICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCisNCistLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMNCitkZGR2aTMwMSAgZGl2aWRlaW50ICAwLjkgICAgICAyICAgICAgLT4gIDANCitkZGR2aTMwMiAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAgICAgLT4gIDANCitkZGR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDANCitkZGR2aTMwNCAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAwICAgLT4gIDANCitkZGR2aTMwNSAgZGl2aWRlaW50ICAwLjkgICAgICAyLjAxICAgLT4gIDANCitkZGR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDANCitkZGR2aTMwNyAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCitkZGR2aTMwOCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCitkZGR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDANCitkZGR2aTMxMCAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAwICAgLT4gIDANCitkZGR2aTMxMSAgZGl2aWRlaW50ICAwLjEyICAgICAyICAgICAgLT4gIDANCitkZGR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDANCitkZGR2aTMxMyAgZGl2aWRlaW50ICAwLjEyICAgICAyLjEgICAgLT4gIDANCitkZGR2aTMxNCAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAwICAgLT4gIDANCitkZGR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDANCisNCistLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUNCitkZGR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1DQorZGRkdmkzMzEgIGRpdmlkZWludCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGR2aTMzMiAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCisNCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCitkZGR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTEwNTIgZGl2aWRlaW50ICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTEwNTMgZGl2aWRlaW50IC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZGR2aTEwNTUgZGl2aWRlaW50ICAxZS0yNzcgIDFlKzMxMSAtPiAgMA0KK2RkZHZpMTA1NiBkaXZpZGVpbnQgIDFlLTI3NyAtMWUrMzExIC0+IC0wDQorZGRkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTANCitkZGR2aTEwNTggZGl2aWRlaW50IC0xZS0yNzcgLTFlKzMxMSAtPiAgMA0KKw0KKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KK2RkZHZpMTA2MCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMSAtPiAwDQorZGRkdmkxMDYxIGRpdmlkZWludCAxZS0yOTEgMWUrMTAyIC0+IDANCitkZGR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMA0KK2RkZHZpMTA2MyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNCAtPiAwDQorZGRkdmkxMDY0IGRpdmlkZWludCAxZS0yOTEgMWUrMTA1IC0+IDANCitkZGR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMA0KK2RkZHZpMTA2NiBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNyAtPiAwDQorZGRkdmkxMDY3IGRpdmlkZWludCAxZS0yOTEgMWUrMTA4IC0+IDANCitkZGR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMA0KK2RkZHZpMTA2OSBkaXZpZGVpbnQgMWUtMjkxIDFlKzExMCAtPiAwDQorDQorZGRkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDANCitkZGR2aTExMDIgZGl2aWRlaW50ICAxLjAwMEUtMzk0ICAgMWUrMSAgLT4gMA0KK2RkZHZpMTEwMyBkaXZpZGVpbnQgIDEuMDBFLTM5NCAgICAxZSsyICAtPiAwDQorDQorZGRkdmkxMTE4IGRpdmlkZWludCAgMUUtMzk0ICAgICAgIDFlKzQgIC0+IDANCitkZGR2aTExMTkgZGl2aWRlaW50ICAzRS0zOTQgICAgICAtMWUrNSAgLT4gLTANCitkZGR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMA0KKw0KK2RkZHZpMTEyNCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgIC0xZSs0ICAtPiAtMA0KK2RkZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMA0KKw0KK2RkZHZpMTEzMSBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsyMDAgLT4gMA0KK2RkZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMA0KK2RkZHZpMTEzMyBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTggLT4gMA0KK2RkZHZpMTEzNCBkaXZpZGVpbnQgIDIuMEUtMTk5ICAgICAyZSsxOTggLT4gMA0KK2RkZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMA0KKw0KKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCitkZGR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MA0KK2RkZHZpNDAyIGRpdmlkZWludCAxIDEyMzQ1Njc4MDAwICAgLT4gMA0KK2RkZHZpNDAzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxMCAgLT4gMTIzNDU2NzgwDQorZGRkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwDQorZGRkdmk0MDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEwICAtPiAxMjM0NTY3ODkNCitkZGR2aTQwNiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAgIC0+IDANCitkZGR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQ0KK2RkZHZpNDA4IGRpdmlkZWludCAxIDEyMzQ1Njc4OTEgICAgLT4gMA0KK2RkZHZpNDA5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxMDAgLT4gMTIzNDU2Nzg5DQorZGRkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwDQorZGRkdmk0MTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEwICAtPiAxMjM0NTY3ODkNCitkZGR2aTQxMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAgIC0+IDANCitkZGR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQ0KK2RkZHZpNDE0IGRpdmlkZWludCAxMjM0NTY3ODk0OSAxMDAgLT4gMTIzNDU2Nzg5DQorZGRkdmk0MTUgZGl2aWRlaW50IDEyMzQ1Njc4OTUwIDEwMCAtPiAxMjM0NTY3ODkNCitkZGR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQ0KK2RkZHZpNDE3IGRpdmlkZWludCAxMjM0NTY3ODk5OSAxMDAgLT4gMTIzNDU2Nzg5DQorZGRkdmk0NDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEgLT4gMTIzNDU2NzgwMDANCitkZGR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwDQorZGRkdmk0NDMgZGl2aWRlaW50IDEyMzQ1Njc4MDAgIDEgLT4gMTIzNDU2NzgwMA0KK2RkZHZpNDQ0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgIC0+IDANCitkZGR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwDQorZGRkdmk0NDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgLT4gMA0KK2RkZHZpNDQ3IGRpdmlkZWludCAxMjM0NTY3ODkxICAxIC0+IDEyMzQ1Njc4OTENCitkZGR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwDQorZGRkdmk0NDkgZGl2aWRlaW50IDEyMzQ1Njc4OTAxIDEgLT4gMTIzNDU2Nzg5MDENCitkZGR2aTQ1MCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwMSAtPiAwDQorZGRkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5Ng0KK2RkZHZpNDUyIGRpdmlkZWludCAxIDEyMzQ1Njc4OTYgIC0+IDANCisNCistLSBtb3JlIHplcm9zLCBldGMuDQorZGRkdmk1MzEgZGl2aWRlaW50IDUuMDAgMUUtMyAgICAtPiA1MDAwDQorZGRkdmk1MzIgZGl2aWRlaW50IDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRkdmk1MzQgZGl2aWRlaW50ICAwICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRkdmk1MzUgZGl2aWRlaW50IC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorDQorZGRkdmk1NDEgZGl2aWRlaW50ICAwICAgIC0xICAgICAtPiAtMA0KK2RkZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDANCitkZGR2aTU0MyBkaXZpZGVpbnQgIDAgICAgIDEgICAgIC0+ICAwDQorZGRkdmk1NDQgZGl2aWRlaW50IC0wICAgICAxICAgICAtPiAtMA0KK2RkZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTU0NiBkaXZpZGVpbnQgLTEgICAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmk1NDcgZGl2aWRlaW50ICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCitkZGR2aTU1MSBkaXZpZGVpbnQgIDAuMCAgLTEgICAgIC0+IC0wDQorZGRkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMA0KK2RkZHZpNTUzIGRpdmlkZWludCAgMC4wICAgMSAgICAgLT4gIDANCitkZGR2aTU1NCBkaXZpZGVpbnQgLTAuMCAgIDEgICAgIC0+IC0wDQorZGRkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpNTU2IGRpdmlkZWludCAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTU1NyBkaXZpZGVpbnQgIDEuMCAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RkZHZpNTYxIGRpdmlkZWludCAgMCAgICAtMS4wICAgLT4gLTANCitkZGR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwDQorZGRkdmk1NjMgZGl2aWRlaW50ICAwICAgICAxLjAgICAtPiAgMA0KK2RkZHZpNTY0IGRpdmlkZWludCAtMCAgICAgMS4wICAgLT4gLTANCitkZGR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmk1NjYgZGl2aWRlaW50IC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpNTY3IGRpdmlkZWludCAgMSAgICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorDQorZGRkdmk1NzEgZGl2aWRlaW50ICAwLjAgIC0xLjAgICAtPiAtMA0KK2RkZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDANCitkZGR2aTU3MyBkaXZpZGVpbnQgIDAuMCAgIDEuMCAgIC0+ICAwDQorZGRkdmk1NzQgZGl2aWRlaW50IC0wLjAgICAxLjAgICAtPiAtMA0KK2RkZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkZGR2aTU3NiBkaXZpZGVpbnQgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRkdmk1NzcgZGl2aWRlaW50ICAxLjAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RkZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCistLSBTcGVjaWFscw0KK2RkZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNTgxIGRpdmlkZWludCAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZGRkdmk1ODIgZGl2aWRlaW50ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCitkZGR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2RkZHZpNTg0IGRpdmlkZWludCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQorZGRkdmk1ODUgZGl2aWRlaW50ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkZGR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2RkZHZpNTg3IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNTg4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCitkZGR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTU5MCBkaXZpZGVpbnQgLTEgICAgIEluZiAgIC0+IC0wDQorZGRkdmk1OTEgZGl2aWRlaW50IC0wICAgICBJbmYgICAtPiAtMA0KK2RkZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDANCitkZGR2aTU5MyBkaXZpZGVpbnQgIDEgICAgIEluZiAgIC0+ICAwDQorZGRkdmk1OTQgZGl2aWRlaW50ICAxMDAwICBJbmYgICAtPiAgMA0KK2RkZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkZHZpNjAwIGRpdmlkZWludCAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZGRkdmk2MDIgZGl2aWRlaW50IC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitkZGR2aTYwMyBkaXZpZGVpbnQgLUluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2RkZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZGRkdmk2MDUgZGl2aWRlaW50IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkZGR2aTYwNiBkaXZpZGVpbnQgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjA4IGRpdmlkZWludCAtMTAwMCAgSW5mICAgLT4gLTANCitkZGR2aTYwOSBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwDQorZGRkdmk2MTEgZGl2aWRlaW50IC0wICAgIC1JbmYgICAtPiAgMA0KK2RkZHZpNjEyIGRpdmlkZWludCAgMCAgICAtSW5mICAgLT4gLTANCitkZGR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wDQorZGRkdmk2MTQgZGl2aWRlaW50ICAxMDAwIC1JbmYgICAtPiAtMA0KK2RkZHZpNjE1IGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkZHZpNjIxIGRpdmlkZWludCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2RkZHZpNjIyIGRpdmlkZWludCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2RkZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2RkZHZpNjI0IGRpdmlkZWludCAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2RkZHZpNjI1IGRpdmlkZWludCAgTmFOICAwICAgICAgLT4gIE5hTg0KK2RkZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTg0KK2RkZHZpNjI3IGRpdmlkZWludCAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2RkZHZpNjI4IGRpdmlkZWludCAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2RkZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjMwIGRpdmlkZWludCAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjMxIGRpdmlkZWludCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjMzIGRpdmlkZWludCAtMCAgICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjM0IGRpdmlkZWludCAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjM2IGRpdmlkZWludCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RkZHZpNjM3IGRpdmlkZWludCAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK2RkZHZpNjQxIGRpdmlkZWludCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY0MiBkaXZpZGVpbnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjQ0IGRpdmlkZWludCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY0NSBkaXZpZGVpbnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjQ3IGRpdmlkZWludCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY0OCBkaXZpZGVpbnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjUwIGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY1MSBkaXZpZGVpbnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjUzIGRpdmlkZWludCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY1NCBkaXZpZGVpbnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjU2IGRpdmlkZWludCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY1NyBkaXZpZGVpbnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjU5IGRpdmlkZWludCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRkdmk2NjEgZGl2aWRlaW50ICBOYU45IC1JbmYgICAtPiAgTmFOOQ0KK2RkZHZpNjYyIGRpdmlkZWludCAgTmFOOCAgMTAwMCAgLT4gIE5hTjgNCitkZGR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43DQorZGRkdmk2NjQgZGl2aWRlaW50IC1OYU42ICBOYU41ICAtPiAtTmFONg0KK2RkZHZpNjY1IGRpdmlkZWludCAtSW5mICAgTmFONCAgLT4gIE5hTjQNCitkZGR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zDQorZGRkdmk2NjcgZGl2aWRlaW50ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KKw0KK2RkZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NzIgZGl2aWRlaW50ICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY3MyBkaXZpZGVpbnQgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NzUgZGl2aWRlaW50ICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY3NiBkaXZpZGVpbnQgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZGRkdmk2NzggZGl2aWRlaW50ICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkZGR2aTY3OSBkaXZpZGVpbnQgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE51bGwgdGVzdHMNCitkZGR2aTkwMCBkaXZpZGVpbnQgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZHZpOTAxIGRpdmlkZWludCAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRW5jb2RlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdAppbmRleCBkZTlkMzFjLi5lOTFlYzYxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRFbmNvZGUuZGVjVGVzdApAQCAtMSw0OTUgKzEsNDk1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkRW5jb2RlLmRlY1Rlc3QgLS0gZGVjaW1hbCBlaWdodC1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFtQcmV2aW91c2x5IGNhbGxlZCBkZWNpbWFsNjQuZGVjVGVzdF0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBlaWdodC1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLgotLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6Ci0tLQotLS0gIDEgYml0ICBzaWduCi0tLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkCi0tLSAgOCBiaXRzIGV4cG9uZW50IGNvbnRpbnVhdGlvbgotLS0gNTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KLS0tCi0tLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTAgYml0cwotLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDU0IGJpdHMgKDE2IGRpZ2l0cykKLS0tCi0tLSBFbGltaXQgPSAgNzY3IChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpCi0tLSBFbWF4ICAgPSAgMzg0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQotLS0gRW1pbiAgID0gLTM4MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpCi0tLSBiaWFzICAgPSAgMzk4IChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkKLQotLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUKLS0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnCi0tLSB0ZXN0Y2FzZSBncm91cHMuCi0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDE2Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLQotLS0gR2VuZXJhbCB0ZXN0Y2FzZXMKLS0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykKLWRlY2UwMDEgYXBwbHkgICAjQTIzMDAwMDAwMDAwMDNEMCAtPiAtNy41MAotZGVjZTAwMiBhcHBseSAgIC03LjUwICAgICAgICAgICAgIC0+ICNBMjMwMDAwMDAwMDAwM0QwCi0tLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCi1kZWNlMDAzIGFwcGx5ICAgI0EyM2MwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMKLWRlY2UwMDQgYXBwbHkgICAtNy41MEUrMyAgICAgICAgICAtPiAjQTIzYzAwMDAwMDAwMDNEMAotZGVjZTAwNSBhcHBseSAgICNBMjM4MDAwMDAwMDAwM0QwIC0+IC03NTAKLWRlY2UwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIzODAwMDAwMDAwMDNEMAotZGVjZTAwNyBhcHBseSAgICNBMjM0MDAwMDAwMDAwM0QwIC0+IC03NS4wCi1kZWNlMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyMzQwMDAwMDAwMDAzRDAKLWRlY2UwMDkgYXBwbHkgICAjQTIyYzAwMDAwMDAwMDNEMCAtPiAtMC43NTAKLWRlY2UwMTAgYXBwbHkgICAtMC43NTAgICAgICAgICAgICAtPiAjQTIyYzAwMDAwMDAwMDNEMAotZGVjZTAxMSBhcHBseSAgICNBMjI4MDAwMDAwMDAwM0QwIC0+IC0wLjA3NTAKLWRlY2UwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIyODAwMDAwMDAwMDNEMAotZGVjZTAxMyBhcHBseSAgICNBMjIwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDc1MAotZGVjZTAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMjIwMDAwMDAwMDAwM0QwCi1kZWNlMDE1IGFwcGx5ICAgI0EyMTgwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTAKLWRlY2UwMTYgYXBwbHkgICAtMC4wMDAwMDc1MCAgICAgICAtPiAjQTIxODAwMDAwMDAwMDNEMAotZGVjZTAxNyBhcHBseSAgICNBMjE0MDAwMDAwMDAwM0QwIC0+IC03LjUwRS03Ci1kZWNlMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMTQwMDAwMDAwMDAzRDAKLQotLS0gTm9ybWFsaXR5Ci1kZWNlMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICMyNjM5MzRiOWMxZTI4ZTU2Ci1kZWNlMDIxIGFwcGx5ICAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+ICNhNjM5MzRiOWMxZTI4ZTU2Ci1kZWNlMDIyIGFwcGx5ICAgMTIzNC41Njc4OTAxMjM0NTYgIC0+ICMyNjA5MzRiOWMxZTI4ZTU2Ci1kZWNlMDIzIGFwcGx5ICAjMjYwOTM0YjljMWUyOGU1NiAgIC0+IDEyMzQuNTY3ODkwMTIzNDU2Ci1kZWNlMDI0IGFwcGx5ICAgMTExMTExMTExMTExMTExMSAgIC0+ICMyNjM4OTEyNDQ5MTI0NDkxCi1kZWNlMDI1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OSAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmCi0KLS0tIE5tYXggYW5kIHNpbWlsYXIKLWRlY2UwMzEgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZgotZGVjZTAzMiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICM3N2ZjZmYzZmNmZjNmY2ZmCi1kZWNlMDMzIGFwcGx5ICAgIzc3ZmNmZjNmY2ZmM2ZjZmYgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGVjZTAzNCBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICM0N2ZkMzRiOWMxZTI4ZTU2Ci1kZWNlMDM1IGFwcGx5ICAgIzQ3ZmQzNGI5YzFlMjhlNTYgICAgICAgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFKzM4NAotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKLWRlY2UwMzYgYXBwbHkgICAxLjIzRSszODQgICAgICAgICAgICAgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNlMDM3IGFwcGx5ICAgIzQ3ZmQzMDAwMDAwMDAwMDAgICAgICAgLT4gMS4yMzAwMDAwMDAwMDAwMDBFKzM4NAotZGVjZDAzOCBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2QwMzkgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0Ci0KLWRlY2QwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwNDljNQotZGVjZDA1MiBhcHBseSAgICMyMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1Ci1kZWNkMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDA1MzQKLWRlY2QwNTQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDUzNCAgICAgICAtPiAxMjM0Ci1kZWNkMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwYTMKLWRlY2QwNTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAxMjMKLWRlY2QwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAxMgotZGVjZDA1OCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IDEyCi1kZWNkMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwMDEKLWRlY2QwNjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMSAgICAgICAtPiAxCi1kZWNkMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwYTMKLWRlY2QwNjIgYXBwbHkgICAjMjIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAxLjIzCi1kZWNkMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDQ5YzUKLWRlY2QwNjQgYXBwbHkgICAjMjIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUKLQotLS0gTm1pbiBhbmQgYmVsb3cKLWRlY2QwNzEgYXBwbHkgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAjMDAzYzAwMDAwMDAwMDAwMQotZGVjZDA3MiBhcHBseSAgICMwMDNjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM4MwotZGVjZDA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwCi1kZWNkMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGVjZDA3NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwNDAwMDAwMDAwMDAwMDAxCi1kZWNkMDc2IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotCi1kZWNkMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDA4MDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwKLWRlY2QwNzggYXBwbHkgICAjMDAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAotZGVjZDA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsCi1kZWNkMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwKLWRlY2QwODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAxRS0zODMgICAtPiAjMDAwNDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAotZGVjZDA4MiBhcHBseSAgICMwMDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCi1kZWNkMDgzIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDFFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKLWRlY2QwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAotLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMKLWRlY2QwODUgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RS0zOTggICAtPiAjNjQwMGZmM2ZjZmYzZmNmZgotZGVjZDA4NiBhcHBseSAgICM2NDAwZmYzZmNmZjNmY2ZmICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKLS0tIGFuZCBhIHByb2JsZW1hdGljIGRpdmlkZSByZXN1bHQKLWRlY2QwODggYXBwbHkgICAxLjExMTExMTExMTExMTExMUUtMzgzICAtPiAjMDQwMDkxMjQ0OTEyNDQ5MQotZGVjZDA4OSBhcHBseSAgICMwNDAwOTEyNDQ5MTI0NDkxICAgICAgIC0+IDEuMTExMTExMTExMTExMTExRS0zODMKLQotLS0gZm9ydGllcwotZGVjZDA5MCBhcHBseSAgICAgICAgNDAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwNDAKLWRlY2QwOTEgYXBwbHkgICAgICAgIDM5Ljk5ICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwY2ZmCi0KLS0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBhcyBhbGwgTEhTIGV4YWN0Ci0KLS0tIFNhbWUgYWdhaW4sIG5lZ2F0aXZlcwotLS0gTm1heCBhbmQgc2ltaWxhcgotZGVjZDEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmCi1kZWNkMTIzIGFwcGx5ICAgI2Y3ZmNmZjNmY2ZmM2ZjZmYgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRlY2QxMjQgYXBwbHkgIC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0ICAtPiAjYzdmZDM0YjljMWUyOGU1NgotZGVjZDEyNSBhcHBseSAgICNjN2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0Ci0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQotZGVjZDEzMCBhcHBseSAgLTEuMjNFKzM4NCAgICAgICAgICAgICAgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2QxMzEgYXBwbHkgICAjYzdmZDMwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDBFKzM4NAotZGVjZDEzMiBhcHBseSAgLTFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICNjN2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2QxMzMgYXBwbHkgICAjYzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFKzM4NAotCi0tLSBvdmVyZmxvd3MKLWRlY2QxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwNDljNQotZGVjZDE1MiBhcHBseSAgICNhMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQotZGVjZDE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwNTM0Ci1kZWNkMTU0IGFwcGx5ICAgI2EyMzgwMDAwMDAwMDA1MzQgICAgICAgLT4gLTEyMzQKLWRlY2QxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDBhMwotZGVjZDE1NiBhcHBseSAgICNhMjM4MDAwMDAwMDAwMGEzICAgICAgIC0+IC0xMjMKLWRlY2QxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAxMgotZGVjZDE1OCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMgotZGVjZDE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDAxCi1kZWNkMTYwIGFwcGx5ICAgI2EyMzgwMDAwMDAwMDAwMDEgICAgICAgLT4gLTEKLWRlY2QxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDBhMwotZGVjZDE2MiBhcHBseSAgICNhMjMwMDAwMDAwMDAwMGEzICAgICAgIC0+IC0xLjIzCi1kZWNkMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzAwMDAwMDAwMDQ5YzUKLWRlY2QxNjQgYXBwbHkgICAjYTIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1Ci0KLS0tIE5taW4gYW5kIGJlbG93Ci1kZWNkMTcxIGFwcGx5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzgwM2MwMDAwMDAwMDAwMDEKLWRlY2QxNzIgYXBwbHkgICAjODAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAtMUUtMzgzCi1kZWNkMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzg0MDAwMDAwMDAwMDAwMDAKLWRlY2QxNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGVjZDE3NSBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4NDAwMDAwMDAwMDAwMDAxCi1kZWNkMTc2IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLQotZGVjZDE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICM4MDAwODAwMDAwMDAwMDAwICAgICAgIFN1Ym5vcm1hbAotZGVjZDE3OCBhcHBseSAgICM4MDAwODAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQgIFN1Ym5vcm1hbAotZGVjZDE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIFN1Ym5vcm1hbAotZGVjZDE4MCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IC0xLjBFLTM5NyAgICAgICAgICAgICAgIFN1Ym5vcm1hbAotZGVjZDE4MSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+ICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIFN1Ym5vcm1hbAotZGVjZDE4MiBhcHBseSAgICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAotZGVjZDE4MyBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICAgICAgIFN1Ym5vcm1hbAotZGVjZDE4NCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAotLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMKLWRlY2QxODUgYXBwbHkgICAtOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gI2U0MDBmZjNmY2ZmM2ZjZmYKLWRlY2QxODYgYXBwbHkgICAjZTQwMGZmM2ZjZmYzZmNmZiAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTM4MwotLS0gYW5kIGEgdHJpY2t5IHN1Ym5vcm1hbAotZGVjZDE4NyBhcHBseSAgIDEuMTExMTExMTExMTE1MjRFLTM4NCAgICAtPiAjMDAwMDkxMjQ0OTEyNDZhNCAgICAgIFN1Ym5vcm1hbAotZGVjZDE4OCBhcHBseSAgICMwMDAwOTEyNDQ5MTI0NmE0ICAgICAgICAtPiAxLjExMTExMTExMTExNTI0RS0zODQgIFN1Ym5vcm1hbAotCi0tLSBuZWFyLXVuZGVyZmxvd3MKLWRlY2QxODkgYXBwbHkgICAtMWUtMzk4ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCi1kZWNkMTkwIGFwcGx5ICAgLTEuMGUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBSb3VuZGVkCi0KLS0tIHplcm9zCi1kZWNkNDAxIGFwcGx5ICAgMEUtNTAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY2Q0MDIgYXBwbHkgICAwRS00MDAgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjZDQwMyBhcHBseSAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwCi1kZWNkNDA0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4Ci1kZWNkNDA1IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAKLWRlY2Q0MDYgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS0zOTgKLWRlY2Q0MDcgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDAwMAotZGVjZDQwOCBhcHBseSAgICMyMjMwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDAKLWRlY2Q0MDkgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDAwMAotZGVjZDQxMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDAKLWRlY2Q0MTEgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjI0NDAwMDAwMDAwMDAwMAotZGVjZDQxMiBhcHBseSAgICMyMjQ0MDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzMKLWRlY2Q0MTMgYXBwbHkgICAwRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMAotZGVjZDQxNCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQotLS0gY2xhbXBlZCB6ZXJvcy4uLgotZGVjZDQxNSBhcHBseSAgIDBFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDE2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5Ci1kZWNkNDE3IGFwcGx5ICAgMEUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY2Q0MTggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkKLWRlY2Q0MTkgYXBwbHkgICAwRSs0MDAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjZDQyMCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQotZGVjZDQyMSBhcHBseSAgIDBFKzUwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDIyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5Ci0KLS0tIG5lZ2F0aXZlIHplcm9zCi1kZWNkNDMxIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY2Q0MzIgYXBwbHkgICAtMEUtNDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjZDQzMyBhcHBseSAgIC0wRS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwCi1kZWNkNDM0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OAotZGVjZDQzNSBhcHBseSAgIC0wLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+ICM4MDAwMDAwMDAwMDAwMDAwCi1kZWNkNDM2IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OAotZGVjZDQzNyBhcHBseSAgIC0wRS0yICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDAwMDAwMDAwMDAwCi1kZWNkNDM4IGFwcGx5ICAgI2EyMzAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTAuMDAKLWRlY2Q0MzkgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMAotZGVjZDQ0MCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IC0wCi1kZWNkNDQxIGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gI2EyNDQwMDAwMDAwMDAwMDAKLWRlY2Q0NDIgYXBwbHkgICAjYTI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMwotZGVjZDQ0MyBhcHBseSAgIC0wRSszNjkgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwCi1kZWNkNDQ0IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQotLS0gY2xhbXBlZCB6ZXJvcy4uLgotZGVjZDQ0NSBhcHBseSAgIC0wRSszNzAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDQ2IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQotZGVjZDQ0NyBhcHBseSAgIC0wRSszODQgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDQ4IGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQotZGVjZDQ0OSBhcHBseSAgIC0wRSs0MDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDUwIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQotZGVjZDQ1MSBhcHBseSAgIC0wRSs1MDAgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNkNDUyIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQotCi0tLSBleHBvbmVudHMKLWRlY2Q0NjAgYXBwbHkgICAjMjI1YzAwMDAwMDAwMDAwNyAtPiA3RSs5Ci1kZWNkNDYxIGFwcGx5ICAgN0UrOSAgLT4gIzIyNWMwMDAwMDAwMDAwMDcKLWRlY2Q0NjIgYXBwbHkgICAjMjNjNDAwMDAwMDAwMDAwNyAtPiA3RSs5OQotZGVjZDQ2MyBhcHBseSAgIDdFKzk5IC0+ICMyM2M0MDAwMDAwMDAwMDA3Ci0KLS0tIFNwZWNpYWxzCi1kZWNkNTAwIGFwcGx5ICAgSW5maW5pdHkgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRlY2Q1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGVjZDUwMiBhcHBseSAgICM3ODAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5Ci1kZWNkNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5NzkgLT4gIzc4MDAwMDAwMDAwMDAwMDAKLWRlY2Q1MDQgYXBwbHkgICAjNzkwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQotZGVjZDUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhIC0+ICM3ODAwMDAwMDAwMDAwMDAwCi1kZWNkNTA2IGFwcGx5ICAgIzdhMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKLWRlY2Q1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMAotZGVjZDUwOCBhcHBseSAgICM3YjAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5Ci0KLWRlY2Q1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMAotZGVjZDUxMCBhcHBseSAgICM3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwN2M3YzdjN2M3YzdjCi1kZWNkNTExIGFwcGx5ICAgIzdjMDAwMDAwMDAwMDAwMDAgLT4gTmFOCi1kZWNkNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDE3ZDdkN2Q3ZDdkN2QKLWRlY2Q1MTMgYXBwbHkgICAjN2QwMDAwMDAwMDAwMDAwMCAtPiBOYU4KLWRlY2Q1MTQgYXBwbHkgICAjN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDdlN2U3ZTdlN2M3ZQotZGVjZDUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwIC0+IHNOYU4KLWRlY2Q1MTYgYXBwbHkgICAjN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDdmN2Y3ZjdmN2M3ZgotZGVjZDUxNyBhcHBseSAgICM3ZjAwMDAwMDAwMDAwMDAwIC0+IHNOYU4KLWRlY2Q1MTggYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5Ci1kZWNkNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmYgLT4gIzdlMDBmZjNmY2ZmM2ZjZmYKLQotZGVjZDUyMCBhcHBseSAgIC1JbmZpbml0eSAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwCi1kZWNkNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4Nzg3ODc4NzggLT4gI2Y4MDAwMDAwMDAwMDAwMDAKLWRlY2Q1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKLWRlY2Q1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OSAtPiAjZjgwMDAwMDAwMDAwMDAwMAotZGVjZDUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQotZGVjZDUyNSBhcHBseSAgICNmYTdhN2E3YTdhN2E3YTdhIC0+ICNmODAwMDAwMDAwMDAwMDAwCi1kZWNkNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5Ci1kZWNkNTI3IGFwcGx5ICAgI2ZiN2I3YjdiN2I3YjdiN2IgLT4gI2Y4MDAwMDAwMDAwMDAwMDAKLWRlY2Q1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKLQotZGVjZDUyOSBhcHBseSAgIC1OYU4gICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwCi1kZWNkNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2MgLT4gI2ZjMDA3YzdjN2M3YzdjN2MKLWRlY2Q1MzEgYXBwbHkgICAjZmMwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCi1kZWNkNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2QgLT4gI2ZjMDE3ZDdkN2Q3ZDdkN2QKLWRlY2Q1MzMgYXBwbHkgICAjZmQwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCi1kZWNkNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDA3ZTdlN2U3ZTdjN2UKLWRlY2Q1MzUgYXBwbHkgICAjZmUwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgotZGVjZDUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmIC0+ICNmZTAwN2Y3ZjdmN2Y3YzdmCi1kZWNkNTM3IGFwcGx5ICAgI2ZmMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KLWRlY2Q1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZiAtPiAtc05hTjk5OTk5OTk5OTk5OTk5OQotZGVjZDUzOSBhcHBseSAgICNmZmZmZmZmZmZmZmZmZmZmIC0+ICNmZTAwZmYzZmNmZjNmY2ZmCi0KLS0tIGRpYWdub3N0aWMgTmFOcwotZGVjZDU0MCBhcHBseSAgIE5hTiAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAKLWRlY2Q1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwCi1kZWNkNTQyIGFwcGx5ICAgTmFOMSAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMQotZGVjZDU0MyBhcHBseSAgIE5hTjEyICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMTIKLWRlY2Q1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDc5Ci1kZWNkNTQ1IGFwcGx5ICAgTmFOMTIzNDUgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwNDljNQotZGVjZDU0NiBhcHBseSAgIE5hTjEyMzQ1NiAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMjhlNTYKLWRlY2Q1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMGY3ZmRmCi1kZWNkNTQ4IGFwcGx5ICAgTmFONzk5Nzk5Nzk5Nzk5Nzk5ICAtPiAjN2MwM2RmZjdmZGZmN2ZkZgotZGVjZDU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDBmZjNmY2ZmM2ZjZmYKLS0tIHRvbyBtYW55IGRpZ2l0cwotCi0tLSBmb2xkLWRvd24gZnVsbCBzZXF1ZW5jZQotZGVjZDYwMSBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2MDIgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0Ci1kZWNkNjAzIGFwcGx5ICAgMUUrMzgzICAgICAgICAgICAgICAgICAgLT4gIzQzZmM4MDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjZDYwNCBhcHBseSAgICM0M2ZjODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MwotZGVjZDYwNSBhcHBseSAgIDFFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMTAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2MDYgYXBwbHkgICAjNDNmYzEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MgotZGVjZDYwNyBhcHBseSAgIDFFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDEwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2MDggYXBwbHkgICAjNDNmYzAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxCi1kZWNkNjA5IGFwcGx5ICAgMUUrMzgwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDIwMDAwMDAwMDAgQ2xhbXBlZAotZGVjZDYxMCBhcHBseSAgICM0M2ZjMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzM4MAotZGVjZDYxMSBhcHBseSAgIDFFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2MTIgYXBwbHkgICAjNDNmYzAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzM3OQotZGVjZDYxMyBhcHBseSAgIDFFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDQwMDAwMDAwIENsYW1wZWQKLWRlY2Q2MTQgYXBwbHkgICAjNDNmYzAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrMzc4Ci1kZWNkNjE1IGFwcGx5ICAgMUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDgwMDAwMDAgQ2xhbXBlZAotZGVjZDYxNiBhcHBseSAgICM0M2ZjMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzM3NwotZGVjZDYxNyBhcHBseSAgIDFFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxMDAwMDAwIENsYW1wZWQKLWRlY2Q2MTggYXBwbHkgICAjNDNmYzAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzM3NgotZGVjZDYxOSBhcHBseSAgIDFFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMTAwMDAwIENsYW1wZWQKLWRlY2Q2MjAgYXBwbHkgICAjNDNmYzAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrMzc1Ci1kZWNkNjIxIGFwcGx5ICAgMUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMjAwMDAgQ2xhbXBlZAotZGVjZDYyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzM3NAotZGVjZDYyMyBhcHBseSAgIDFFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA0MDAwIENsYW1wZWQKLWRlY2Q2MjQgYXBwbHkgICAjNDNmYzAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzM3MwotZGVjZDYyNSBhcHBseSAgIDFFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwNDAwIENsYW1wZWQKLWRlY2Q2MjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrMzcyCi1kZWNkNjI3IGFwcGx5ICAgMUUrMzcxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwODAgQ2xhbXBlZAotZGVjZDYyOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzM3MQotZGVjZDYyOSBhcHBseSAgIDFFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDEwIENsYW1wZWQKLWRlY2Q2MzAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzM3MAotZGVjZDYzMSBhcHBseSAgIDFFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAxCi1kZWNkNjMyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrMzY5Ci1kZWNkNjMzIGFwcGx5ICAgMUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gIzQzZjgwMDAwMDAwMDAwMDEKLWRlY2Q2MzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSszNjgKLS0tIHNhbWUgd2l0aCA5cwotZGVjZDY0MSBhcHBseSAgIDlFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM3N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2NDIgYXBwbHkgICAjNzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0Ci1kZWNkNjQzIGFwcGx5ICAgOUUrMzgzICAgICAgICAgICAgICAgICAgLT4gIzQzZmM4YzAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjZDY0NCBhcHBseSAgICM0M2ZjOGMwMDAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDBFKzM4MwotZGVjZDY0NSBhcHBseSAgIDlFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMWEwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2NDYgYXBwbHkgICAjNDNmYzFhMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDBFKzM4MgotZGVjZDY0NyBhcHBseSAgIDlFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDkwMDAwMDAwMDAwIENsYW1wZWQKLWRlY2Q2NDggYXBwbHkgICAjNDNmYzA5MDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMEUrMzgxCi1kZWNkNjQ5IGFwcGx5ICAgOUUrMzgwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDIzMDAwMDAwMDAgQ2xhbXBlZAotZGVjZDY1MCBhcHBseSAgICM0M2ZjMDAyMzAwMDAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDAwMDBFKzM4MAotZGVjZDY1MSBhcHBseSAgIDlFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNjgwMDAwMDAwIENsYW1wZWQKLWRlY2Q2NTIgYXBwbHkgICAjNDNmYzAwMDY4MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDBFKzM3OQotZGVjZDY1MyBhcHBseSAgIDlFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMjQwMDAwMDAwIENsYW1wZWQKLWRlY2Q2NTQgYXBwbHkgICAjNDNmYzAwMDI0MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMEUrMzc4Ci1kZWNkNjU1IGFwcGx5ICAgOUUrMzc3ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDhjMDAwMDAgQ2xhbXBlZAotZGVjZDY1NiBhcHBseSAgICM0M2ZjMDAwMDA4YzAwMDAwICAgICAgIC0+IDkuMDAwMDAwMDBFKzM3NwotZGVjZDY1NyBhcHBseSAgIDlFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxYTAwMDAwIENsYW1wZWQKLWRlY2Q2NTggYXBwbHkgICAjNDNmYzAwMDAwMWEwMDAwMCAgICAgICAtPiA5LjAwMDAwMDBFKzM3NgotZGVjZDY1OSBhcHBseSAgIDlFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwOTAwMDAwIENsYW1wZWQKLWRlY2Q2NjAgYXBwbHkgICAjNDNmYzAwMDAwMDkwMDAwMCAgICAgICAtPiA5LjAwMDAwMEUrMzc1Ci1kZWNkNjYxIGFwcGx5ICAgOUUrMzc0ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMjMwMDAgQ2xhbXBlZAotZGVjZDY2MiBhcHBseSAgICM0M2ZjMDAwMDAwMDIzMDAwICAgICAgIC0+IDkuMDAwMDBFKzM3NAotZGVjZDY2MyBhcHBseSAgIDlFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA2ODAwIENsYW1wZWQKLWRlY2Q2NjQgYXBwbHkgICAjNDNmYzAwMDAwMDAwNjgwMCAgICAgICAtPiA5LjAwMDBFKzM3MwotZGVjZDY2NSBhcHBseSAgIDlFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAyNDAwIENsYW1wZWQKLWRlY2Q2NjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMjQwMCAgICAgICAtPiA5LjAwMEUrMzcyCi1kZWNkNjY3IGFwcGx5ICAgOUUrMzcxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwOGMgQ2xhbXBlZAotZGVjZDY2OCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDhjICAgICAgIC0+IDkuMDBFKzM3MQotZGVjZDY2OSBhcHBseSAgIDlFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDFhIENsYW1wZWQKLWRlY2Q2NzAgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAxYSAgICAgICAtPiA5LjBFKzM3MAotZGVjZDY3MSBhcHBseSAgIDlFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDA5Ci1kZWNkNjcyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY5Ci1kZWNkNjczIGFwcGx5ICAgOUUrMzY4ICAgICAgICAgICAgICAgICAgLT4gIzQzZjgwMDAwMDAwMDAwMDkKLWRlY2Q2NzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwOSAgICAgICAtPiA5RSszNjgKLQotCi0tLSBTZWxlY3RlZCBEUEQgY29kZXMKLWRlY2Q3MDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwCi1kZWNkNzAxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMDkgICAgICAgLT4gOQotZGVjZDcwMiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEwICAgICAgIC0+IDEwCi1kZWNkNzAzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkKLWRlY2Q3MDQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyMCAgICAgICAtPiAyMAotZGVjZDcwNSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDI5ICAgICAgIC0+IDI5Ci1kZWNkNzA2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzAgICAgICAgLT4gMzAKLWRlY2Q3MDcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQotZGVjZDcwOCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDQwICAgICAgIC0+IDQwCi1kZWNkNzA5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkKLWRlY2Q3MTAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA1MCAgICAgICAtPiA1MAotZGVjZDcxMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDU5ICAgICAgIC0+IDU5Ci1kZWNkNzEyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjAgICAgICAgLT4gNjAKLWRlY2Q3MTMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQotZGVjZDcxNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDcwICAgICAgIC0+IDcwCi1kZWNkNzE1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzEgICAgICAgLT4gNzEKLWRlY2Q3MTYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3MiAgICAgICAtPiA3MgotZGVjZDcxNyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDczICAgICAgIC0+IDczCi1kZWNkNzE4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQKLWRlY2Q3MTkgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQotZGVjZDcyMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc2ICAgICAgIC0+IDc2Ci1kZWNkNzIxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcKLWRlY2Q3MjIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3OCAgICAgICAtPiA3OAotZGVjZDcyMyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDc5ICAgICAgIC0+IDc5Ci0KLWRlY2Q3MjUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQKLWRlY2Q3MjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI5ZiAgICAgICAtPiA5OTUKLWRlY2Q3MjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMCAgICAgICAtPiA1MjAKLWRlY2Q3MjggYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjEKLS0tIGZyb20gdGVsY28gdGVzdCBkYXRhCi1kZWNkNzMwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxODggICAgICAgLT4gMzA4Ci1kZWNkNzMxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTMgICAgICAgLT4gMzIzCi1kZWNkNzMyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMmEgICAgICAgLT4gIDgyCi1kZWNkNzMzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTkgICAgICAgLT4gMzI5Ci1kZWNkNzM0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwODEgICAgICAgLT4gMTAxCi1kZWNkNzM1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTIgICAgICAgLT4gNTIyCi0KLS0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzCi1kZWNkNzQwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3Ci1kZWNkNzQxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4Ci1kZWNkNzQyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZWIgICAgICAgLT4gNzg3Ci1kZWNkNzQzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3Ci1kZWNkNzQ0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3Ci1kZWNkNzQ1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzYmYgICAgICAgLT4gOTc5Ci1kZWNkNzQ2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5Ci1kZWNkNzQ3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4Ci0KLS0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCi1kZWNkNzUwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4Ci1kZWNkNzUxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxNmUgICAgICAgLT4gODg4Ci1kZWNkNzUyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4Ci1kZWNkNzUzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4Ci1kZWNkNzU0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmYgICAgICAgLT4gODg5Ci1kZWNkNzU1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5Ci1kZWNkNzU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5Ci1kZWNkNzU3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmYgICAgICAgLT4gODg5Ci0KLWRlY2Q3NjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgKLWRlY2Q3NjEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgKLWRlY2Q3NjIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZSAgICAgICAtPiA4OTgKLWRlY2Q3NjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgKLWRlY2Q3NjQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkKLWRlY2Q3NjUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE3ZiAgICAgICAtPiA4OTkKLWRlY2Q3NjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkKLWRlY2Q3NjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkKLQotZGVjZDc3MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVlICAgICAgIC0+IDk4OAotZGVjZDc3MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OAotZGVjZDc3MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVlICAgICAgIC0+IDk4OAotZGVjZDc3MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VlICAgICAgIC0+IDk4OAotZGVjZDc3NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQotZGVjZDc3NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWVmICAgICAgIC0+IDk4OQotZGVjZDc3NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVmICAgICAgIC0+IDk4OQotZGVjZDc3NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQotCi1kZWNkNzgwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4Ci1kZWNkNzgxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZmUgICAgICAgLT4gOTk4Ci1kZWNkNzgyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4Ci1kZWNkNzgzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4Ci1kZWNkNzg0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmYgICAgICAgLT4gOTk5Ci1kZWNkNzg1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5Ci1kZWNkNzg2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5Ci1kZWNkNzg3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmYgICAgICAgLT4gOTk5Ci0KLS0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikKLWRlY2Q4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjM4MDAwMDhjNzhhZjQ2Ci1kZWNkODAxIGFwcGx5IC0yMTQ3NDgzNjQ3ICAtPiAjYTIzODAwMDA4Yzc4YWY0NwotZGVjZDgwMiBhcHBseSAtMjE0NzQ4MzY0OCAgLT4gI2EyMzgwMDAwOGM3OGFmNDgKLWRlY2Q4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjM4MDAwMDhjNzhhZjQ5Ci1kZWNkODA0IGFwcGx5ICAyMTQ3NDgzNjQ2ICAtPiAjMjIzODAwMDA4Yzc4YWY0NgotZGVjZDgwNSBhcHBseSAgMjE0NzQ4MzY0NyAgLT4gIzIyMzgwMDAwOGM3OGFmNDcKLWRlY2Q4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjM4MDAwMDhjNzhhZjQ4Ci1kZWNkODA3IGFwcGx5ICAyMTQ3NDgzNjQ5ICAtPiAjMjIzODAwMDA4Yzc4YWY0OQotZGVjZDgwOCBhcHBseSAgNDI5NDk2NzI5NCAgLT4gIzIyMzgwMDAxMTVhZmI1NWEKLWRlY2Q4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjM4MDAwMTE1YWZiNTViCi1kZWNkODEwIGFwcGx5ICA0Mjk0OTY3Mjk2ICAtPiAjMjIzODAwMDExNWFmYjU3YQotZGVjZDgxMSBhcHBseSAgNDI5NDk2NzI5NyAgLT4gIzIyMzgwMDAxMTVhZmI1N2IKLQotZGVjZDgyMCBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDYgLT4gLTIxNDc0ODM2NDYKLWRlY2Q4MjEgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ3IC0+IC0yMTQ3NDgzNjQ3Ci1kZWNkODIyIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OAotZGVjZDgyMyBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDkgLT4gLTIxNDc0ODM2NDkKLWRlY2Q4MjQgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ2IC0+ICAyMTQ3NDgzNjQ2Ci1kZWNkODI1IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0NwotZGVjZDgyNiBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDggLT4gIDIxNDc0ODM2NDgKLWRlY2Q4MjcgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ5IC0+ICAyMTQ3NDgzNjQ5Ci1kZWNkODI4IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NAotZGVjZDgyOSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWIgLT4gIDQyOTQ5NjcyOTUKLWRlY2Q4MzAgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTdhIC0+ICA0Mjk0OTY3Mjk2Ci1kZWNkODMxIGFwcGx5ICAjMjIzODAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5NwotCi0tLSBmb3IgbmFycm93aW5nCi1kZWNkODQwIGFwcGx5ICAjMjg3MDAwMDAwMDAwMDAwMCAtPiAgMi4wMDAwMDAwMDAwMDAwMDBFLTk5Ci0KLS0tIHNvbWUgbWlzY2VsbGFuZW91cwotZGVjZDg1MCBhcHBseSAgIzAwMDQwNzAwMDAwMDAwMDAgLT4gNy4wMDAwMDAwMDAwMDBFLTM4NSAgU3Vibm9ybWFsCi1kZWNkODUxIGFwcGx5ICAjMDAwODAwMDAwMDAyMDAwMCAtPiAxLjAwMDAwRS0zOTEgICAgICAgICBTdWJub3JtYWwKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIGVpZ2h0LWJ5dGUgZm9ybWF0IHRlc3RjYXNlcyAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWw2NC5kZWNUZXN0XQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIGVpZ2h0LWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uDQorLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6DQorLS0NCistLSAgMSBiaXQgIHNpZ24NCistLSAgNSBiaXRzIGNvbWJpbmF0aW9uIGZpZWxkDQorLS0gIDggYml0cyBleHBvbmVudCBjb250aW51YXRpb24NCistLSA1MCBiaXRzIGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbg0KKy0tDQorLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDEwIGJpdHMNCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggNTQgYml0cyAoMTYgZGlnaXRzKQ0KKy0tDQorLS0gRWxpbWl0ID0gIDc2NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQ0KKy0tIEVtYXggICA9ICAzODQgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpDQorLS0gRW1pbiAgID0gLTM4MyAoc21hbGxlc3QgZXhwb25lbnQgdmFsdWUpDQorLS0gYmlhcyAgID0gIDM5OCAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55DQorDQorLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUNCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJw0KKy0tIHRlc3RjYXNlIGdyb3Vwcy4NCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDE2DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCisNCistLSBHZW5lcmFsIHRlc3RjYXNlcw0KKy0tIChtb3N0bHkgZGVyaXZlZCBmcm9tIHRoZSBTdHJhd21hbiA0IGRvY3VtZW50IGFuZCBleGFtcGxlcykNCitkZWNlMDAxIGFwcGx5ICAgI0EyMzAwMDAwMDAwMDAzRDAgLT4gLTcuNTANCitkZWNlMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMzAwMDAwMDAwMDAzRDANCistLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzDQorZGVjZTAwMyBhcHBseSAgICNBMjNjMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszDQorZGVjZTAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjNjMDAwMDAwMDAwM0QwDQorZGVjZTAwNSBhcHBseSAgICNBMjM4MDAwMDAwMDAwM0QwIC0+IC03NTANCitkZWNlMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyMzgwMDAwMDAwMDAzRDANCitkZWNlMDA3IGFwcGx5ICAgI0EyMzQwMDAwMDAwMDAzRDAgLT4gLTc1LjANCitkZWNlMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyMzQwMDAwMDAwMDAzRDANCitkZWNlMDA5IGFwcGx5ICAgI0EyMmMwMDAwMDAwMDAzRDAgLT4gLTAuNzUwDQorZGVjZTAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjJjMDAwMDAwMDAwM0QwDQorZGVjZTAxMSBhcHBseSAgICNBMjI4MDAwMDAwMDAwM0QwIC0+IC0wLjA3NTANCitkZWNlMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMjgwMDAwMDAwMDAzRDANCitkZWNlMDEzIGFwcGx5ICAgI0EyMjAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwDQorZGVjZTAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMjIwMDAwMDAwMDAwM0QwDQorZGVjZTAxNSBhcHBseSAgICNBMjE4MDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwDQorZGVjZTAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMjE4MDAwMDAwMDAwM0QwDQorZGVjZTAxNyBhcHBseSAgICNBMjE0MDAwMDAwMDAwM0QwIC0+IC03LjUwRS03DQorZGVjZTAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMjE0MDAwMDAwMDAwM0QwDQorDQorLS0gTm9ybWFsaXR5DQorZGVjZTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAjMjYzOTM0YjljMWUyOGU1Ng0KK2RlY2UwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2ICAgLT4gI2E2MzkzNGI5YzFlMjhlNTYNCitkZWNlMDIyIGFwcGx5ICAgMTIzNC41Njc4OTAxMjM0NTYgIC0+ICMyNjA5MzRiOWMxZTI4ZTU2DQorZGVjZTAyMyBhcHBseSAgIzI2MDkzNGI5YzFlMjhlNTYgICAtPiAxMjM0LjU2Nzg5MDEyMzQ1Ng0KK2RlY2UwMjQgYXBwbHkgICAxMTExMTExMTExMTExMTExICAgLT4gIzI2Mzg5MTI0NDkxMjQ0OTENCitkZWNlMDI1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OSAgIC0+ICM2ZTM4ZmYzZmNmZjNmY2ZmDQorDQorLS0gTm1heCBhbmQgc2ltaWxhcg0KK2RlY2UwMzEgYXBwbHkgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RlY2UwMzIgYXBwbHkgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAjNzdmY2ZmM2ZjZmYzZmNmZg0KK2RlY2UwMzMgYXBwbHkgICAjNzdmY2ZmM2ZjZmYzZmNmZiAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGVjZTAzNCBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICM0N2ZkMzRiOWMxZTI4ZTU2DQorZGVjZTAzNSBhcHBseSAgICM0N2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDU2RSszODQNCistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KK2RlY2UwMzYgYXBwbHkgICAxLjIzRSszODQgICAgICAgICAgICAgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjZTAzNyBhcHBseSAgICM0N2ZkMzAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwRSszODQNCitkZWNkMDM4IGFwcGx5ICAgMUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzQ3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KK2RlY2QwMzkgYXBwbHkgICAjNDdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0DQorDQorZGVjZDA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDA0OWM1DQorZGVjZDA1MiBhcHBseSAgICMyMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1DQorZGVjZDA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwNTM0DQorZGVjZDA1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQNCitkZWNkMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzgwMDAwMDAwMDAwYTMNCitkZWNkMDU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzDQorZGVjZDA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDEyDQorZGVjZDA1OCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IDEyDQorZGVjZDA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAxDQorZGVjZDA2MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAxICAgICAgIC0+IDENCitkZWNkMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwMDAwMDAwYTMNCitkZWNkMDYyIGFwcGx5ICAgIzIyMzAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMw0KK2RlY2QwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwNDljNQ0KK2RlY2QwNjQgYXBwbHkgICAjMjIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUNCisNCistLSBObWluIGFuZCBiZWxvdw0KK2RlY2QwNzEgYXBwbHkgICAxRS0zODMgICAgICAgICAgICAgICAgICAtPiAjMDAzYzAwMDAwMDAwMDAwMQ0KK2RlY2QwNzIgYXBwbHkgICAjMDAzYzAwMDAwMDAwMDAwMSAgICAgICAtPiAxRS0zODMNCitkZWNkMDczIGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDANCitkZWNkMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RlY2QwNzUgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjMDQwMDAwMDAwMDAwMDAwMQ0KK2RlY2QwNzYgYXBwbHkgICAjMDQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQorDQorZGVjZDA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwODAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsDQorZGVjZDA3OCBhcHBseSAgICMwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsDQorZGVjZDA3OSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsDQorZGVjZDA4MCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUtMzk3ICAgICAgICAgICAgICAgU3Vibm9ybWFsDQorZGVjZDA4MSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDFFLTM4MyAgIC0+ICMwMDA0MDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQorZGVjZDA4MiBhcHBseSAgICMwMDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5NyAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQorZGVjZDA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAxRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQorZGVjZDA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMNCitkZWNkMDg1IGFwcGx5ICAgOTk5OTk5OTk5OTk5OTk5OUUtMzk4ICAgLT4gIzY0MDBmZjNmY2ZmM2ZjZmYNCitkZWNkMDg2IGFwcGx5ICAgIzY0MDBmZjNmY2ZmM2ZjZmYgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KKy0tIGFuZCBhIHByb2JsZW1hdGljIGRpdmlkZSByZXN1bHQNCitkZWNkMDg4IGFwcGx5ICAgMS4xMTExMTExMTExMTExMTFFLTM4MyAgLT4gIzA0MDA5MTI0NDkxMjQ0OTENCitkZWNkMDg5IGFwcGx5ICAgIzA0MDA5MTI0NDkxMjQ0OTEgICAgICAgLT4gMS4xMTExMTExMTExMTExMTFFLTM4Mw0KKw0KKy0tIGZvcnRpZXMNCitkZWNkMDkwIGFwcGx5ICAgICAgICA0MCAgICAgICAgICAgICAgICAtPiAjMjIzODAwMDAwMDAwMDA0MA0KK2RlY2QwOTEgYXBwbHkgICAgICAgIDM5Ljk5ICAgICAgICAgICAgIC0+ICMyMjMwMDAwMDAwMDAwY2ZmDQorDQorLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkIGFzIGFsbCBMSFMgZXhhY3QNCisNCistLSBTYW1lIGFnYWluLCBuZWdhdGl2ZXMNCistLSBObWF4IGFuZCBzaW1pbGFyDQorZGVjZDEyMiBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICNmN2ZjZmYzZmNmZjNmY2ZmDQorZGVjZDEyMyBhcHBseSAgICNmN2ZjZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGVjZDEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2RSszODQgIC0+ICNjN2ZkMzRiOWMxZTI4ZTU2DQorZGVjZDEyNSBhcHBseSAgICNjN2ZkMzRiOWMxZTI4ZTU2ICAgICAgIC0+IC0xLjIzNDU2Nzg5MDEyMzQ1NkUrMzg0DQorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCitkZWNkMTMwIGFwcGx5ICAtMS4yM0UrMzg0ICAgICAgICAgICAgICAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgQ2xhbXBlZA0KK2RlY2QxMzEgYXBwbHkgICAjYzdmZDMwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDBFKzM4NA0KK2RlY2QxMzIgYXBwbHkgIC0xRSszODQgICAgICAgICAgICAgICAgICAtPiAjYzdmYzAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjZDEzMyBhcHBseSAgICNjN2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUrMzg0DQorDQorLS0gb3ZlcmZsb3dzDQorZGVjZDE1MSBhcHBseSAgLTEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDA0OWM1DQorZGVjZDE1MiBhcHBseSAgICNhMjM4MDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQ0KK2RlY2QxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDUzNA0KK2RlY2QxNTQgYXBwbHkgICAjYTIzODAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNA0KK2RlY2QxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDBhMw0KK2RlY2QxNTYgYXBwbHkgICAjYTIzODAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzDQorZGVjZDE1NyBhcHBseSAgLTEyICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjM4MDAwMDAwMDAwMDEyDQorZGVjZDE1OCBhcHBseSAgICNhMjM4MDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMg0KK2RlY2QxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMQ0KK2RlY2QxNjAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQ0KK2RlY2QxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDBhMw0KK2RlY2QxNjIgYXBwbHkgICAjYTIzMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMw0KK2RlY2QxNjMgYXBwbHkgIC0xMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwNDljNQ0KK2RlY2QxNjQgYXBwbHkgICAjYTIzMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1DQorDQorLS0gTm1pbiBhbmQgYmVsb3cNCitkZWNkMTcxIGFwcGx5ICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIzgwM2MwMDAwMDAwMDAwMDENCitkZWNkMTcyIGFwcGx5ICAgIzgwM2MwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM4Mw0KK2RlY2QxNzMgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMA0KK2RlY2QxNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2RlY2QxNzUgYXBwbHkgIC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODQwMDAwMDAwMDAwMDAwMQ0KK2RlY2QxNzYgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KKw0KK2RlY2QxNzcgYXBwbHkgIC0wLjEwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAjODAwMDgwMDAwMDAwMDAwMCAgICAgICBTdWJub3JtYWwNCitkZWNkMTc4IGFwcGx5ICAgIzgwMDA4MDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NCAgU3Vibm9ybWFsDQorZGVjZDE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDEwRS0zODMgIC0+ICM4MDAwMDAwMDAwMDAwMDEwICAgICAgIFN1Ym5vcm1hbA0KK2RlY2QxODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAtMS4wRS0zOTcgICAgICAgICAgICAgICBTdWJub3JtYWwNCitkZWNkMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMUUtMzgzICAgLT4gIzgwMDQwMDAwMDAwMDAwMDEgICAgICAgU3Vibm9ybWFsDQorZGVjZDE4MiBhcHBseSAgICM4MDA0MDAwMDAwMDAwMDAxICAgICAgIC0+IC0xRS0zOTcgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KK2RlY2QxODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMUUtMzgzICAtPiAjODAwMDAwMDAwMDAwMDAwMSAgICAgICBTdWJub3JtYWwNCitkZWNkMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyBzbWFsbGVzdCBhbGwtbmluZXMNCitkZWNkMTg1IGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTlFLTM5OCAgIC0+ICNlNDAwZmYzZmNmZjNmY2ZmDQorZGVjZDE4NiBhcHBseSAgICNlNDAwZmYzZmNmZjNmY2ZmICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtMzgzDQorLS0gYW5kIGEgdHJpY2t5IHN1Ym5vcm1hbA0KK2RlY2QxODcgYXBwbHkgICAxLjExMTExMTExMTExNTI0RS0zODQgICAgLT4gIzAwMDA5MTI0NDkxMjQ2YTQgICAgICBTdWJub3JtYWwNCitkZWNkMTg4IGFwcGx5ICAgIzAwMDA5MTI0NDkxMjQ2YTQgICAgICAgIC0+IDEuMTExMTExMTExMTE1MjRFLTM4NCAgU3Vibm9ybWFsDQorDQorLS0gbmVhci11bmRlcmZsb3dzDQorZGVjZDE4OSBhcHBseSAgIC0xZS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwNCitkZWNkMTkwIGFwcGx5ICAgLTEuMGUtMzk4ICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gemVyb3MNCitkZWNkNDAxIGFwcGx5ICAgMEUtNTAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNkNDAyIGFwcGx5ICAgMEUtNDAwICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNkNDAzIGFwcGx5ICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDANCitkZWNkNDA0IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUtMzk4DQorZGVjZDQwNSBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwDQorZGVjZDQwNiBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTM5OA0KK2RlY2Q0MDcgYXBwbHkgICAwRS0yICAgICAgICAgICAgICAgICAgICAtPiAjMjIzMDAwMDAwMDAwMDAwMA0KK2RlY2Q0MDggYXBwbHkgICAjMjIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwLjAwDQorZGVjZDQwOSBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjM4MDAwMDAwMDAwMDAwDQorZGVjZDQxMCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDAwICAgICAgIC0+IDANCitkZWNkNDExIGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyNDQwMDAwMDAwMDAwMDANCitkZWNkNDEyIGFwcGx5ICAgIzIyNDQwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMw0KK2RlY2Q0MTMgYXBwbHkgICAwRSszNjkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMA0KK2RlY2Q0MTQgYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkNCistLSBjbGFtcGVkIHplcm9zLi4uDQorZGVjZDQxNSBhcHBseSAgIDBFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjZDQxNiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KK2RlY2Q0MTcgYXBwbHkgICAwRSszODQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY2Q0MTggYXBwbHkgICAjNDNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszNjkNCitkZWNkNDE5IGFwcGx5ICAgMEUrNDAwICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNkNDIwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrMzY5DQorZGVjZDQyMSBhcHBseSAgIDBFKzUwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjZDQyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzM2OQ0KKw0KKy0tIG5lZ2F0aXZlIHplcm9zDQorZGVjZDQzMSBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjZDQzMiBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjZDQzMyBhcHBseSAgIC0wRS0zOTggICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwDQorZGVjZDQzNCBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS0zOTgNCitkZWNkNDM1IGFwcGx5ICAgLTAuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gIzgwMDAwMDAwMDAwMDAwMDANCitkZWNkNDM2IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTM5OA0KK2RlY2Q0MzcgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAwMDAwMDAwMA0KK2RlY2Q0MzggYXBwbHkgICAjYTIzMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMC4wMA0KK2RlY2Q0MzkgYXBwbHkgICAtMCAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIzODAwMDAwMDAwMDAwMA0KK2RlY2Q0NDAgYXBwbHkgICAjYTIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAtMA0KK2RlY2Q0NDEgYXBwbHkgICAtMEUrMyAgICAgICAgICAgICAgICAgICAtPiAjYTI0NDAwMDAwMDAwMDAwMA0KK2RlY2Q0NDIgYXBwbHkgICAjYTI0NDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMw0KK2RlY2Q0NDMgYXBwbHkgICAtMEUrMzY5ICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMA0KK2RlY2Q0NDQgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQorLS0gY2xhbXBlZCB6ZXJvcy4uLg0KK2RlY2Q0NDUgYXBwbHkgICAtMEUrMzcwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY2Q0NDYgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQorZGVjZDQ0NyBhcHBseSAgIC0wRSszODQgICAgICAgICAgICAgICAgIC0+ICNjM2ZjMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjZDQ0OCBhcHBseSAgICNjM2ZjMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszNjkNCitkZWNkNDQ5IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmMwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNkNDUwIGFwcGx5ICAgI2MzZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzM2OQ0KK2RlY2Q0NTEgYXBwbHkgICAtMEUrNTAwICAgICAgICAgICAgICAgICAtPiAjYzNmYzAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY2Q0NTIgYXBwbHkgICAjYzNmYzAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMzY5DQorDQorLS0gZXhwb25lbnRzDQorZGVjZDQ2MCBhcHBseSAgICMyMjVjMDAwMDAwMDAwMDA3IC0+IDdFKzkNCitkZWNkNDYxIGFwcGx5ICAgN0UrOSAgLT4gIzIyNWMwMDAwMDAwMDAwMDcNCitkZWNkNDYyIGFwcGx5ICAgIzIzYzQwMDAwMDAwMDAwMDcgLT4gN0UrOTkNCitkZWNkNDYzIGFwcGx5ICAgN0UrOTkgLT4gIzIzYzQwMDAwMDAwMDAwMDcNCisNCistLSBTcGVjaWFscw0KK2RlY2Q1MDAgYXBwbHkgICBJbmZpbml0eSAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MDIgYXBwbHkgICAjNzgwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KK2RlY2Q1MDMgYXBwbHkgICAjNzk3OTc5Nzk3OTc5Nzk3OSAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MDQgYXBwbHkgICAjNzkwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KK2RlY2Q1MDUgYXBwbHkgICAjN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KK2RlY2Q1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MDggYXBwbHkgICAjN2IwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQ0KKw0KK2RlY2Q1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MTAgYXBwbHkgICAjN2M3YzdjN2M3YzdjN2M3YyAtPiAjN2MwMDdjN2M3YzdjN2M3Yw0KK2RlY2Q1MTEgYXBwbHkgICAjN2MwMDAwMDAwMDAwMDAwMCAtPiBOYU4NCitkZWNkNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDE3ZDdkN2Q3ZDdkN2QNCitkZWNkNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAgLT4gTmFODQorZGVjZDUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICM3ZTAwN2U3ZTdlN2U3YzdlDQorZGVjZDUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwIC0+IHNOYU4NCitkZWNkNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gIzdlMDA3ZjdmN2Y3ZjdjN2YNCitkZWNkNTE3IGFwcGx5ICAgIzdmMDAwMDAwMDAwMDAwMDAgLT4gc05hTg0KK2RlY2Q1MTggYXBwbHkgICAjN2ZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5DQorZGVjZDUxOSBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwZmYzZmNmZjNmY2ZmDQorDQorZGVjZDUyMCBhcHBseSAgIC1JbmZpbml0eSAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwDQorZGVjZDUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4IC0+ICNmODAwMDAwMDAwMDAwMDAwDQorZGVjZDUyMiBhcHBseSAgICNmODAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KK2RlY2Q1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OSAtPiAjZjgwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MjQgYXBwbHkgICAjZjkwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCitkZWNkNTI1IGFwcGx5ICAgI2ZhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDANCitkZWNkNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQorZGVjZDUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiIC0+ICNmODAwMDAwMDAwMDAwMDAwDQorZGVjZDUyOCBhcHBseSAgICNmYjAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KKw0KK2RlY2Q1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAtPiAjZmMwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1MzAgYXBwbHkgICAjZmM3YzdjN2M3YzdjN2M3YyAtPiAjZmMwMDdjN2M3YzdjN2M3Yw0KK2RlY2Q1MzEgYXBwbHkgICAjZmMwMDAwMDAwMDAwMDAwMCAtPiAtTmFODQorZGVjZDUzMiBhcHBseSAgICNmZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAxN2Q3ZDdkN2Q3ZDdkDQorZGVjZDUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4NCitkZWNkNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDA3ZTdlN2U3ZTdjN2UNCitkZWNkNTM1IGFwcGx5ICAgI2ZlMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCitkZWNkNTM2IGFwcGx5ICAgI2ZmN2Y3ZjdmN2Y3ZjdmN2YgLT4gI2ZlMDA3ZjdmN2Y3ZjdjN2YNCitkZWNkNTM3IGFwcGx5ICAgI2ZmMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4NCitkZWNkNTM4IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTkNCitkZWNkNTM5IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDBmZjNmY2ZmM2ZjZmYNCisNCistLSBkaWFnbm9zdGljIE5hTnMNCitkZWNkNTQwIGFwcGx5ICAgTmFOICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMA0KK2RlY2Q1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwDQorZGVjZDU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDENCitkZWNkNTQzIGFwcGx5ICAgTmFOMTIgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAxMg0KK2RlY2Q1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDc5DQorZGVjZDU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDQ5YzUNCitkZWNkNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAyOGU1Ng0KK2RlY2Q1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMGY3ZmRmDQorZGVjZDU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDNkZmY3ZmRmZjdmZGYNCitkZWNkNTQ5IGFwcGx5ICAgTmFOOTk5OTk5OTk5OTk5OTk5ICAtPiAjN2MwMGZmM2ZjZmYzZmNmZg0KKy0tIHRvbyBtYW55IGRpZ2l0cw0KKw0KKy0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlDQorZGVjZDYwMSBhcHBseSAgIDFFKzM4NCAgICAgICAgICAgICAgICAgIC0+ICM0N2ZjMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNkNjAyIGFwcGx5ICAgIzQ3ZmMwMDAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NA0KK2RlY2Q2MDMgYXBwbHkgICAxRSszODMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzgwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjZDYwNCBhcHBseSAgICM0M2ZjODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4Mw0KK2RlY2Q2MDUgYXBwbHkgICAxRSszODIgICAgICAgICAgICAgICAgICAtPiAjNDNmYzEwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjZDYwNiBhcHBseSAgICM0M2ZjMTAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMEUrMzgyDQorZGVjZDYwNyBhcHBseSAgIDFFKzM4MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDEwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNkNjA4IGFwcGx5ICAgIzQzZmMwMTAwMDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MQ0KK2RlY2Q2MDkgYXBwbHkgICAxRSszODAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMjAwMDAwMDAwMCBDbGFtcGVkDQorZGVjZDYxMCBhcHBseSAgICM0M2ZjMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzM4MA0KK2RlY2Q2MTEgYXBwbHkgICAxRSszNzkgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDQwMDAwMDAwMCBDbGFtcGVkDQorZGVjZDYxMiBhcHBseSAgICM0M2ZjMDAwNDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMEUrMzc5DQorZGVjZDYxMyBhcHBseSAgIDFFKzM3OCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDQwMDAwMDAwIENsYW1wZWQNCitkZWNkNjE0IGFwcGx5ICAgIzQzZmMwMDAwNDAwMDAwMDAgICAgICAgLT4gMS4wMDAwMDAwMDBFKzM3OA0KK2RlY2Q2MTUgYXBwbHkgICAxRSszNzcgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwODAwMDAwMCBDbGFtcGVkDQorZGVjZDYxNiBhcHBseSAgICM0M2ZjMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzM3Nw0KK2RlY2Q2MTcgYXBwbHkgICAxRSszNzYgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMTAwMDAwMCBDbGFtcGVkDQorZGVjZDYxOCBhcHBseSAgICM0M2ZjMDAwMDAxMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMEUrMzc2DQorZGVjZDYxOSBhcHBseSAgIDFFKzM3NSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMTAwMDAwIENsYW1wZWQNCitkZWNkNjIwIGFwcGx5ICAgIzQzZmMwMDAwMDAxMDAwMDAgICAgICAgLT4gMS4wMDAwMDBFKzM3NQ0KK2RlY2Q2MjEgYXBwbHkgICAxRSszNzQgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAyMDAwMCBDbGFtcGVkDQorZGVjZDYyMiBhcHBseSAgICM0M2ZjMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzM3NA0KK2RlY2Q2MjMgYXBwbHkgICAxRSszNzMgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwNDAwMCBDbGFtcGVkDQorZGVjZDYyNCBhcHBseSAgICM0M2ZjMDAwMDAwMDA0MDAwICAgICAgIC0+IDEuMDAwMEUrMzczDQorZGVjZDYyNSBhcHBseSAgIDFFKzM3MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwNDAwIENsYW1wZWQNCitkZWNkNjI2IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDA0MDAgICAgICAgLT4gMS4wMDBFKzM3Mg0KK2RlY2Q2MjcgYXBwbHkgICAxRSszNzEgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDA4MCBDbGFtcGVkDQorZGVjZDYyOCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzM3MQ0KK2RlY2Q2MjkgYXBwbHkgICAxRSszNzAgICAgICAgICAgICAgICAgICAtPiAjNDNmYzAwMDAwMDAwMDAxMCBDbGFtcGVkDQorZGVjZDYzMCBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDEwICAgICAgIC0+IDEuMEUrMzcwDQorZGVjZDYzMSBhcHBseSAgIDFFKzM2OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDAxDQorZGVjZDYzMiBhcHBseSAgICM0M2ZjMDAwMDAwMDAwMDAxICAgICAgIC0+IDFFKzM2OQ0KK2RlY2Q2MzMgYXBwbHkgICAxRSszNjggICAgICAgICAgICAgICAgICAtPiAjNDNmODAwMDAwMDAwMDAwMQ0KK2RlY2Q2MzQgYXBwbHkgICAjNDNmODAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSszNjgNCistLSBzYW1lIHdpdGggOXMNCitkZWNkNjQxIGFwcGx5ICAgOUUrMzg0ICAgICAgICAgICAgICAgICAgLT4gIzc3ZmMwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KK2RlY2Q2NDIgYXBwbHkgICAjNzdmYzAwMDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0DQorZGVjZDY0MyBhcHBseSAgIDlFKzM4MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjOGMwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNkNjQ0IGFwcGx5ICAgIzQzZmM4YzAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwMEUrMzgzDQorZGVjZDY0NSBhcHBseSAgIDlFKzM4MiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMWEwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNkNjQ2IGFwcGx5ICAgIzQzZmMxYTAwMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMDAwRSszODINCitkZWNkNjQ3IGFwcGx5ICAgOUUrMzgxICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwOTAwMDAwMDAwMDAgQ2xhbXBlZA0KK2RlY2Q2NDggYXBwbHkgICAjNDNmYzA5MDAwMDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMDAwMEUrMzgxDQorZGVjZDY0OSBhcHBseSAgIDlFKzM4MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAyMzAwMDAwMDAwIENsYW1wZWQNCitkZWNkNjUwIGFwcGx5ICAgIzQzZmMwMDIzMDAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwMEUrMzgwDQorZGVjZDY1MSBhcHBseSAgIDlFKzM3OSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwNjgwMDAwMDAwIENsYW1wZWQNCitkZWNkNjUyIGFwcGx5ICAgIzQzZmMwMDA2ODAwMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMDAwRSszNzkNCitkZWNkNjUzIGFwcGx5ICAgOUUrMzc4ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAyNDAwMDAwMDAgQ2xhbXBlZA0KK2RlY2Q2NTQgYXBwbHkgICAjNDNmYzAwMDI0MDAwMDAwMCAgICAgICAtPiA5LjAwMDAwMDAwMEUrMzc4DQorZGVjZDY1NSBhcHBseSAgIDlFKzM3NyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDA4YzAwMDAwIENsYW1wZWQNCitkZWNkNjU2IGFwcGx5ICAgIzQzZmMwMDAwMDhjMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwMEUrMzc3DQorZGVjZDY1NyBhcHBseSAgIDlFKzM3NiAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAxYTAwMDAwIENsYW1wZWQNCitkZWNkNjU4IGFwcGx5ICAgIzQzZmMwMDAwMDFhMDAwMDAgICAgICAgLT4gOS4wMDAwMDAwRSszNzYNCitkZWNkNjU5IGFwcGx5ICAgOUUrMzc1ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDA5MDAwMDAgQ2xhbXBlZA0KK2RlY2Q2NjAgYXBwbHkgICAjNDNmYzAwMDAwMDkwMDAwMCAgICAgICAtPiA5LjAwMDAwMEUrMzc1DQorZGVjZDY2MSBhcHBseSAgIDlFKzM3NCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDIzMDAwIENsYW1wZWQNCitkZWNkNjYyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMjMwMDAgICAgICAgLT4gOS4wMDAwMEUrMzc0DQorZGVjZDY2MyBhcHBseSAgIDlFKzM3MyAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDA2ODAwIENsYW1wZWQNCitkZWNkNjY0IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDY4MDAgICAgICAgLT4gOS4wMDAwRSszNzMNCitkZWNkNjY1IGFwcGx5ICAgOUUrMzcyICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDI0MDAgQ2xhbXBlZA0KK2RlY2Q2NjYgYXBwbHkgICAjNDNmYzAwMDAwMDAwMjQwMCAgICAgICAtPiA5LjAwMEUrMzcyDQorZGVjZDY2NyBhcHBseSAgIDlFKzM3MSAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDhjIENsYW1wZWQNCitkZWNkNjY4IGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwOGMgICAgICAgLT4gOS4wMEUrMzcxDQorZGVjZDY2OSBhcHBseSAgIDlFKzM3MCAgICAgICAgICAgICAgICAgIC0+ICM0M2ZjMDAwMDAwMDAwMDFhIENsYW1wZWQNCitkZWNkNjcwIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMWEgICAgICAgLT4gOS4wRSszNzANCitkZWNkNjcxIGFwcGx5ICAgOUUrMzY5ICAgICAgICAgICAgICAgICAgLT4gIzQzZmMwMDAwMDAwMDAwMDkNCitkZWNkNjcyIGFwcGx5ICAgIzQzZmMwMDAwMDAwMDAwMDkgICAgICAgLT4gOUUrMzY5DQorZGVjZDY3MyBhcHBseSAgIDlFKzM2OCAgICAgICAgICAgICAgICAgIC0+ICM0M2Y4MDAwMDAwMDAwMDA5DQorZGVjZDY3NCBhcHBseSAgICM0M2Y4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDlFKzM2OA0KKw0KKw0KKy0tIFNlbGVjdGVkIERQRCBjb2Rlcw0KK2RlY2Q3MDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAwMCAgICAgICAtPiAwDQorZGVjZDcwMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDA5ICAgICAgIC0+IDkNCitkZWNkNzAyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTAgICAgICAgLT4gMTANCitkZWNkNzAzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkNCitkZWNkNzA0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjAgICAgICAgLT4gMjANCitkZWNkNzA1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkNCitkZWNkNzA2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzAgICAgICAgLT4gMzANCitkZWNkNzA3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkNCitkZWNkNzA4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDAgICAgICAgLT4gNDANCitkZWNkNzA5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkNCitkZWNkNzEwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTAgICAgICAgLT4gNTANCitkZWNkNzExIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkNCitkZWNkNzEyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjAgICAgICAgLT4gNjANCitkZWNkNzEzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkNCitkZWNkNzE0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzAgICAgICAgLT4gNzANCitkZWNkNzE1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzEgICAgICAgLT4gNzENCitkZWNkNzE2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzIgICAgICAgLT4gNzINCitkZWNkNzE3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMNCitkZWNkNzE4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQNCitkZWNkNzE5IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUNCitkZWNkNzIwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYNCitkZWNkNzIxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcNCitkZWNkNzIyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzggICAgICAgLT4gNzgNCitkZWNkNzIzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkNCisNCitkZWNkNzI1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyOWUgICAgICAgLT4gOTk0DQorZGVjZDcyNiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjlmICAgICAgIC0+IDk5NQ0KK2RlY2Q3MjcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMCAgICAgICAtPiA1MjANCitkZWNkNzI4IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyYTEgICAgICAgLT4gNTIxDQorLS0gZnJvbSB0ZWxjbyB0ZXN0IGRhdGENCitkZWNkNzMwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxODggICAgICAgLT4gMzA4DQorZGVjZDczMSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWEzICAgICAgIC0+IDMyMw0KK2RlY2Q3MzIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDAyYSAgICAgICAtPiAgODINCitkZWNkNzMzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxYTkgICAgICAgLT4gMzI5DQorZGVjZDczNCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDgxICAgICAgIC0+IDEwMQ0KK2RlY2Q3MzUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJhMiAgICAgICAtPiA1MjINCisNCistLSBEUEQ6IG9uZSBvZiBlYWNoIG9mIHRoZSBodWZmbWFuIGdyb3Vwcw0KK2RlY2Q3NDAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcNCitkZWNkNzQxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZjggICAgICAgLT4gNzc4DQorZGVjZDc0MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ViICAgICAgIC0+IDc4Nw0KK2RlY2Q3NDMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcNCitkZWNkNzQ0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzOWYgICAgICAgLT4gOTk3DQorZGVjZDc0NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2JmICAgICAgIC0+IDk3OQ0KK2RlY2Q3NDYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkNCitkZWNkNzQ3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQorDQorLS0gRFBEIGFsbC1oaWdocyBjYXNlcyAoaW5jbHVkZXMgdGhlIDI0IHJlZHVuZGFudCBjb2RlcykNCitkZWNkNzUwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwNmUgICAgICAgLT4gODg4DQorZGVjZDc1MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OA0KK2RlY2Q3NTIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI2ZSAgICAgICAtPiA4ODgNCitkZWNkNzUzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzNmUgICAgICAgLT4gODg4DQorZGVjZDc1NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQ0KK2RlY2Q3NTUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDE2ZiAgICAgICAtPiA4ODkNCitkZWNkNzU2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyNmYgICAgICAgLT4gODg5DQorZGVjZDc1NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQ0KKw0KK2RlY2Q3NjAgYXBwbHkgICAjMjIzODAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgNCitkZWNkNzYxIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4DQorZGVjZDc2MiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OA0KK2RlY2Q3NjMgYXBwbHkgICAjMjIzODAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgNCitkZWNkNzY0IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5DQorZGVjZDc2NSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQ0KK2RlY2Q3NjYgYXBwbHkgICAjMjIzODAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkNCitkZWNkNzY3IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5DQorDQorZGVjZDc3MCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGVlICAgICAgIC0+IDk4OA0KK2RlY2Q3NzEgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFlZSAgICAgICAtPiA5ODgNCitkZWNkNzcyIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZWUgICAgICAgLT4gOTg4DQorZGVjZDc3MyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2VlICAgICAgIC0+IDk4OA0KK2RlY2Q3NzQgYXBwbHkgICAjMjIzODAwMDAwMDAwMDBlZiAgICAgICAtPiA5ODkNCitkZWNkNzc1IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAxZWYgICAgICAgLT4gOTg5DQorZGVjZDc3NiBhcHBseSAgICMyMjM4MDAwMDAwMDAwMmVmICAgICAgIC0+IDk4OQ0KK2RlY2Q3NzcgYXBwbHkgICAjMjIzODAwMDAwMDAwMDNlZiAgICAgICAtPiA5ODkNCisNCitkZWNkNzgwIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAwZmUgICAgICAgLT4gOTk4DQorZGVjZDc4MSBhcHBseSAgICMyMjM4MDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OA0KK2RlY2Q3ODIgYXBwbHkgICAjMjIzODAwMDAwMDAwMDJmZSAgICAgICAtPiA5OTgNCitkZWNkNzgzIGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAzZmUgICAgICAgLT4gOTk4DQorZGVjZDc4NCBhcHBseSAgICMyMjM4MDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQ0KK2RlY2Q3ODUgYXBwbHkgICAjMjIzODAwMDAwMDAwMDFmZiAgICAgICAtPiA5OTkNCitkZWNkNzg2IGFwcGx5ICAgIzIyMzgwMDAwMDAwMDAyZmYgICAgICAgLT4gOTk5DQorZGVjZDc4NyBhcHBseSAgICMyMjM4MDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQ0KKw0KKy0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikNCitkZWNkODAwIGFwcGx5IC0yMTQ3NDgzNjQ2ICAtPiAjYTIzODAwMDA4Yzc4YWY0Ng0KK2RlY2Q4MDEgYXBwbHkgLTIxNDc0ODM2NDcgIC0+ICNhMjM4MDAwMDhjNzhhZjQ3DQorZGVjZDgwMiBhcHBseSAtMjE0NzQ4MzY0OCAgLT4gI2EyMzgwMDAwOGM3OGFmNDgNCitkZWNkODAzIGFwcGx5IC0yMTQ3NDgzNjQ5ICAtPiAjYTIzODAwMDA4Yzc4YWY0OQ0KK2RlY2Q4MDQgYXBwbHkgIDIxNDc0ODM2NDYgIC0+ICMyMjM4MDAwMDhjNzhhZjQ2DQorZGVjZDgwNSBhcHBseSAgMjE0NzQ4MzY0NyAgLT4gIzIyMzgwMDAwOGM3OGFmNDcNCitkZWNkODA2IGFwcGx5ICAyMTQ3NDgzNjQ4ICAtPiAjMjIzODAwMDA4Yzc4YWY0OA0KK2RlY2Q4MDcgYXBwbHkgIDIxNDc0ODM2NDkgIC0+ICMyMjM4MDAwMDhjNzhhZjQ5DQorZGVjZDgwOCBhcHBseSAgNDI5NDk2NzI5NCAgLT4gIzIyMzgwMDAxMTVhZmI1NWENCitkZWNkODA5IGFwcGx5ICA0Mjk0OTY3Mjk1ICAtPiAjMjIzODAwMDExNWFmYjU1Yg0KK2RlY2Q4MTAgYXBwbHkgIDQyOTQ5NjcyOTYgIC0+ICMyMjM4MDAwMTE1YWZiNTdhDQorZGVjZDgxMSBhcHBseSAgNDI5NDk2NzI5NyAgLT4gIzIyMzgwMDAxMTVhZmI1N2INCisNCitkZWNkODIwIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0NiAtPiAtMjE0NzQ4MzY0Ng0KK2RlY2Q4MjEgYXBwbHkgICNhMjM4MDAwMDhjNzhhZjQ3IC0+IC0yMTQ3NDgzNjQ3DQorZGVjZDgyMiBhcHBseSAgI2EyMzgwMDAwOGM3OGFmNDggLT4gLTIxNDc0ODM2NDgNCitkZWNkODIzIGFwcGx5ICAjYTIzODAwMDA4Yzc4YWY0OSAtPiAtMjE0NzQ4MzY0OQ0KK2RlY2Q4MjQgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ2IC0+ICAyMTQ3NDgzNjQ2DQorZGVjZDgyNSBhcHBseSAgIzIyMzgwMDAwOGM3OGFmNDcgLT4gIDIxNDc0ODM2NDcNCitkZWNkODI2IGFwcGx5ICAjMjIzODAwMDA4Yzc4YWY0OCAtPiAgMjE0NzQ4MzY0OA0KK2RlY2Q4MjcgYXBwbHkgICMyMjM4MDAwMDhjNzhhZjQ5IC0+ICAyMTQ3NDgzNjQ5DQorZGVjZDgyOCBhcHBseSAgIzIyMzgwMDAxMTVhZmI1NWEgLT4gIDQyOTQ5NjcyOTQNCitkZWNkODI5IGFwcGx5ICAjMjIzODAwMDExNWFmYjU1YiAtPiAgNDI5NDk2NzI5NQ0KK2RlY2Q4MzAgYXBwbHkgICMyMjM4MDAwMTE1YWZiNTdhIC0+ICA0Mjk0OTY3Mjk2DQorZGVjZDgzMSBhcHBseSAgIzIyMzgwMDAxMTVhZmI1N2IgLT4gIDQyOTQ5NjcyOTcNCisNCistLSBmb3IgbmFycm93aW5nDQorZGVjZDg0MCBhcHBseSAgIzI4NzAwMDAwMDAwMDAwMDAgLT4gIDIuMDAwMDAwMDAwMDAwMDAwRS05OQ0KKw0KKy0tIHNvbWUgbWlzY2VsbGFuZW91cw0KK2RlY2Q4NTAgYXBwbHkgICMwMDA0MDcwMDAwMDAwMDAwIC0+IDcuMDAwMDAwMDAwMDAwRS0zODUgIFN1Ym5vcm1hbA0KK2RlY2Q4NTEgYXBwbHkgICMwMDA4MDAwMDAwMDIwMDAwIC0+IDEuMDAwMDBFLTM5MSAgICAgICAgIFN1Ym5vcm1hbA0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEZNQS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKaW5kZXggOGFlOTJhNy4uZjBhY2ZjNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkRk1BLmRlY1Rlc3QKQEAgLTEsMTY5OCArMSwxNjk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkRk1BLmRlY1Rlc3QgLS0gZGVjRG91YmxlIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOgotLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlCi0tLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQotLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQotLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQotLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlCi0tLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQotLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuCi0KLS0tIFNhbml0eSBjaGVja3MKLWRkZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKLWRkZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKLWRkZm1hMDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcKLWRkZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKLWRkZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKLWRkZm1hMDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDEKLWRkZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKLWRkZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKLWRkZm1hMDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDAKLWRkZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKLWRkZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKLWRkZm1hMDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzIKLWRkZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKLWRkZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKLWRkZm1hMDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDEKLWRkZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKLQotLS0gbm9uLWludGVnZXIgZXhhY3RzCi1kZGZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCi1kZGZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCi1kZGZtYTAxMDIgIGZtYSAgICA0OS4yICAgLTQuOCAgIDIzLjMgIC0+ICAtMjEyLjg2Ci1kZGZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKLWRkZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKLWRkZm1hMDEwNSAgZm1hICAgIDYuMTMgICAtMTYxICAgNjUuOSAgLT4gIC05MjEuMDMKLWRkZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1Ci1kZGZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4Ci1kZGZtYTAxMDggIGZtYSAgICA5My4zICAgMC4xOSAgMC4yMjYgIC0+ICAxNy45NTMKLWRkZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKLWRkZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKLWRkZm1hMDExMSAgZm1hICAtMC40MDkgICAgIDEzICAgMjAuNCAgLT4gIDE1LjA4MwotZGRmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAotZGRmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4Ci1kZGZtYTAxMTQgIGZtYSAgICAxLjM2ICAwLjk4NCAgMC40OTMgIC0+ICAxLjgzMTI0Ci1kZGZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgotZGRmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4Ci1kZGZtYTAxMTcgIGZtYSAgICAgNjY2ICAwLjI0NyAgIDI1LjQgIC0+ICAxODkuOTAyCi1kZGZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4Ci1kZGZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0Ci1kZGZtYTAxMjAgIGZtYSAgIC05MS42ICAgNS4yOSAgMC4xNTMgIC0+ICAtNDg0LjQxMQotCi0tLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gKLS0tIGlzIHByZWNlZGVkIGJ5IHRoZSByZXN1bHQgb2YgdW5mdXNlZCBtdWx0aXBseSBhbmQgYWRkCi0tLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4xMjMzNTY0MjkyNTc5NjlFKzE2Ci1kZGZtYTAyMDEgIGZtYSAgICAgICAyNzU4MzQ4OS42NjQ1ICAgICAgMjU4MjQ3MTA3OC4wNCAgICAgIDI1OTMxODMuNDIzNzEgIC0+ICA3LjEyMzM1NjQyOTI1Nzk3MEUrMTYgIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIyODEzMjc1MzI4LjgwNTA2Ci1kZGZtYTAyMDggIGZtYSAgICAgICAgMjQyODAuMzU1NTY2ICAgICAgOTM5NTc3LjM5NzY1MyAgICAgICAgMjAzMi4wMTMyNTIgIC0+ICAyMjgxMzI3NTMyOC44MDUwNyAgICAgIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MkUrMTYKLWRkZm1hMDIwOSAgZm1hICAgICAgICAgIDc4NDg5NzY0MzIgICAgICAtMjU4NjgzMS4yMjgxICAgICAgMTM3OTAzLjUxNzkwOSAgLT4gIC0yLjAzMDM5NzczNDI3ODA2MUUrMTYgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjA0MDc3NDA5NDgxNC4wNzcKLWRkZm1hMDIxNyAgZm1hICAgICAgICA1Njg5MC4zODg3MzEgICAgICAzNTg3MjAzMC40MjU1ICAgICAgMzM5MzM3LjEyMzQxMCAgLT4gIDIwNDA3NzQwOTQ4MTQuMDc4ICAgICAgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi43MTQ0Njk1NzUyMDUwNDlFKzE4Ci1kZGZtYTAyMjAgIGZtYSAgICAgICA3NTMzNTQzLjU3NDQ1ICAgICAgIDM2MDMxNzc2MzkyOCAgICAgIDUwNzMzOTIuMzE2MzggIC0+ICAyLjcxNDQ2OTU3NTIwNTA1MEUrMTggIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMDExNjc2Mjk3NzE2NzE2RSsxOQotZGRmbWEwMjIzICBmbWEgICAgICAgNzM5OTQ1MjU1LjU2MyAgICAgIDEzNjcyMzEyNzg0LjEgICAgICAtOTk0MzgxLjUzNTcyICAtPiAgMS4wMTE2NzYyOTc3MTY3MTVFKzE5ICBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTVFKzIzCi1kZGZtYTAyMjQgIGZtYSAgICAgICAtNDEzNTEwOTU3MjE4ICAgICAgIDcwNDcyOTk4ODU1MCAgICAgICA5MjM0MTYyNjE0LjAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTRFKzIzIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuNjIwMTE5ODYzMzY1Nzg2RSsxNwotZGRmbWEwMjI2ICBmbWEgICAgICAgIDQzNzQ4NC4wMDYwMSAgICAgICA1OTg5MDY0MzI3OTAgICAgICA4OTQ0NTA2MzguNDQyICAtPiAgMi42MjAxMTk4NjMzNjU3ODdFKzE3ICBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjI3MjY0Nzk5NTgwODE3OEUrMTkKLWRkZm1hMDI1MyAgZm1hICAgICAgICAgNzMyODc1NTY5MjkgICAgICAxNzM2NTEzMDUuNzg0ICAgICAtMzU4MzEyNTY4LjM4OSAgLT4gIDEuMjcyNjQ3OTk1ODA4MTc3RSsxOSAgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNzUzNzY5MzIwODYxODUxRSsxOAotZGRmbWEwMjU3ICBmbWEgICAgICAgIDIwMzI1ODMwNDQ4NiAgICAgIC04NjI4Mjc4LjgwNjYgICAgICAxNTMxMjcuNDQ2NzI3ICAtPiAgLTEuNzUzNzY5MzIwODYxODUwRSsxOCBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDZFKzE3Ci1kZGZtYTAyNjAgIGZtYSAgICAgICA0MjU2MDUzMy4xNzc0ICAgICAtMzY0MzYwNTI4Mi44NiAgICAgICAxNzgyNzcuOTYzNzcgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDdFKzE3IEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDIuODk3NjI0NjIwNTc2MDA1RSsyMgotZGRmbWEwMjY5ICBmbWEgICAgICAgIDE0MjY1NjU4NzM3NSAgICAgICAyMDMxMTg4Nzk2NzAgICAgICAgNjA0NTc2MTAzOTkxICAtPiAgMi44OTc2MjQ2MjA1NzYwMDRFKzIyICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gQ2FzZXMgd2hlcmUgbXVsdGlwbHkgd291bGQgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IGlmIHNlcGFyYXRlCi1mbWEwMzAwICBmbWEgICA5ZSszODQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1hMDMwMSAgZm1hICAgMWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYTAzMDIgIGZtYSAgIDFlKzM4NCAgICAxMCAgIC0xZSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCi1mbWEwMzAzICBmbWEgICAxZSszODQgICAgMTAgICAtOWUrMzg0ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZAotLS0gc3Vibm9ybWFsIGV0Yy4KLWZtYTAzMDUgIGZtYSAgIDFlLTM5OCAgICAwLjEgIDAgICAgICAgICAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZm1hMDMwNiAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMSAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1hMDMwNyAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMWUtMzk4ICAgIC0+IDFFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi0tLSBJbmZpbml0ZSBjb21iaW5hdGlvbnMKLWRkZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKLWRkZm1hMDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTA4MDIgZm1hICBJbmYgIC1JbmYgICBJbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQotZGRmbWEwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMDgwNSBmbWEgLUluZiAgIEluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKLWRkZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkKLWRkZm1hMDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KLWRkZm1hMDkwMCBmbWEgIE5hTjIgIE5hTjMgIE5hTjUgICAtPiAgTmFOMgotZGRmbWEwOTAxIGZtYSAgMCAgICAgTmFOMyAgTmFONSAgIC0+ICBOYU4zCi1kZGZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKLS0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZwotLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCi1kZGZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMDkwNCBmbWEgIDAgICAgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMDkwNyBmbWEgIE5hTjcgIHNOYU4yIHNOYU4zICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZGZtYTIwMDAgZm1hICAyICAgICAgMiAgIDBlKzM4NCAgLT4gIDQKLWRkZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrMzg0ICAtPiAgNgotZGRmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSszODQgIC0+ICA1Ci1kZGZtYTIwMDMgZm1hICA1ICAgICAgMiAgIDBlKzM4NCAgLT4gIDEwCi1kZGZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzM4NCAgLT4gIDIuNDAKLWRkZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrMzg0ICAtPiAgMC4wMAotZGRmbWEyMDA2IGZtYSAgMS4yMCAgLTIgICAwZSszODQgIC0+ICAtMi40MAotZGRmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSszODQgIC0+ICAtMi40MAotZGRmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSszODQgIC0+ICAwLjAwCi1kZGZtYTIwMDkgZm1hICAtMS4yMCAtMiAgIDBlKzM4NCAgLT4gIDIuNDAKLWRkZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrMzg0ICAtPiAgMzYuMTM5Ci1kZGZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAKLWRkZm1hMjAxMiBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKLWRkZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgIDBlKzM4NCAgLT4gIDEuMjM0NTY3ODkwMDAwMDAwIFJvdW5kZWQKLWRkZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDAKLWRkZm1hMjAxNiBmbWEgICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgLTk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjAxOSBmbWEgIC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAgOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHplcm9zLCBldGMuCi1kZGZtYTIwMjEgZm1hICAgMCAgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKLWRkZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAotZGRmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCi1kZGZtYTIwMjQgZm1hICAtMCAgICAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAKLWRkZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAotZGRmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCi1kZGZtYTIwMjcgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKLWRkZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAotZGRmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCi1kZGZtYTIwMzEgZm1hICAgMDAuMDAgIDAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKLWRkZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRkZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKLWRkZm1hMjAzNCBmbWEgIC01LjAwICAgMUUtMyAgICAwZSszODQgIC0+ICAtMC4wMDUwMAotZGRmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwCi1kZGZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kZGZtYTIwMzcgZm1hICAtMEUtMyAgIDAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi1kZGZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDAKLWRkZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMAotZGRmbWEyMDQwIGZtYSAgIDAwLjAwIC0wRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAotZGRmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZGRmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwCi1kZGZtYTIwNDMgZm1hICAtMDAuMDAgLTAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAKLWRkZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRkZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKLWRkZm1hMjA0NiBmbWEgIC0wRS0zICAgMDAuMDAgIC0wZSszODQgIC0+ICAtMC4wMDAwMAotZGRmbWEyMDQ3IGZtYSAgIDBFLTMgIC0wMC4wMCAgLTBlKzM4NCAgLT4gIC0wLjAwMDAwCi1kZGZtYTIwNDggZm1hICAgMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDAKLQotLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aAotZGRmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzM4NCAgLT4gIDMuNjAKLWRkZm1hMjA1MSBmbWEgIDcgICAgMyAgICAgICAgICAwZSszODQgIC0+ICAyMQotZGRmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzM4NCAgLT4gIDAuNzIKLWRkZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSszODQgIC0+ICAwLjAKLWRkZm1hMjA1NCBmbWEgIDY1NDMyMSA2NTQzMjEgICAwZSszODQgIC0+ICA0MjgxMzU5NzEwNDEKLQotZGRmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSs5Ci1kZGZtYTIwNjEgZm1hICAxMjMuNDUgMWU4ICAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEwCi1kZGZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzExCi1kZGZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEyCi1kZGZtYTIwNjQgZm1hICAxMjMuNDUgMWUxMSAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEzCi1kZGZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE0Ci1kZGZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE1Ci0KLQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCi0tLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZGRmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKLWRkZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45Ci1kZGZtYTIwOTAgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQotZGRmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkKLQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcwotZGRmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQotZGRmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCi1kZGZtYTIxMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAotZGRmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAotZGRmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCi1kZGZtYTIxMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAotZGRmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAotZGRmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCi1kZGZtYTIxMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAotZGRmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAotZGRmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCi1kZGZtYTIxMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAotZGRmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAotZGRmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCi1kZGZtYTIxMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAotLS1kZGZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwCi0tLWRkZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMAotLS1kZGZtYTIxMTggZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMAotLS1kZGZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwCi0tLWRkZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kZGZtYTIxMjEgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kZGZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLWRkZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKLWRkZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrMzg0ICAtPiAgOQotZGRmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrMzg0ICAtPiAgOTAKLWRkZm1hMjEzMyBmbWEgIDMgMzAwICAgICAwZSszODQgIC0+ICA5MDAKLWRkZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMAotZGRmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAKLWRkZm1hMjEzNiBmbWEgIDMgMzAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAKLWRkZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMAotZGRmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAKLWRkZm1hMjEzOSBmbWEgIDMgMzAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAKLWRkZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMAotZGRmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAKLWRkZm1hMjE0MiBmbWEgIDMgMzAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAKLWRkZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMAotZGRmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAKLWRkZm1hMjE0NSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAwMDAKLQotLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZwotZGRmbWEyMzAxIGZtYSAgOSA5ICAgICAwZSszODQgIC0+ICA4MQotZGRmbWEyMzAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwCi1kZGZtYTIzMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMAotZGRmbWEyMzA0IGZtYSAgOSA5MDAwICAgICAwZSszODQgIC0+ICA4MTAwMAotZGRmbWEyMzA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwCi1kZGZtYTIzMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMAotZGRmbWEyMzA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMAotZGRmbWEyMzA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwCi1kZGZtYTIzMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMAotZGRmbWEyMzEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMAotZGRmbWEyMzExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwCi1kZGZtYTIzMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMAotZGRmbWEyMzEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMAotZGRmbWEyMzE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwCi1kZGZtYTIzMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMAotZGRmbWEyMzE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKLWRkZm1hMjMxNyBmbWEgIDkwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZAotZGRmbWEyMzE4IGZtYSAgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZAotZGRmbWEyMzE5IGZtYSAgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMTkgIFJvdW5kZWQKLWRkZm1hMjMyMCBmbWEgIDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZAotZGRmbWEyMzIxIGZtYSAgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZAotZGRmbWEyMzIyIGZtYSAgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4LjEwMDAwMDAwMDAwMDAwMEUrMjIgIFJvdW5kZWQKLWRkZm1hMjMyMyBmbWEgIDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotZGRmbWEyNTA0ICBmbWEgICAwRS0yNjAgMTAwMEUtMjYwICAgIDBlKzM4NCAgLT4gIDBFLTM5OCBDbGFtcGVkCi1kZGZtYTI1MDUgIGZtYSAgIDEwMEUrMjYwIDBFKzI2MCAgICAgMGUrMzg0ICAtPiAgMEUrMzY5IENsYW1wZWQKLQotLS0gbWl4ZWQgd2l0aCB6ZXJvcwotZGRmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDAKLWRkZm1hMjU0MiBmbWEgIC0wICAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwCi1kZGZtYTI1NDMgZm1hICAgMCAgICAgMSAgICAgICAwZSszODQgIC0+ICAgMAotZGRmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAKLWRkZm1hMjU0NSBmbWEgIC0xICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwCi1kZGZtYTI1NDYgZm1hICAtMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMAotZGRmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDAKLWRkZm1hMjU0OCBmbWEgICAxICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwCi0KLWRkZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1MiBmbWEgIC0wLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1MyBmbWEgICAwLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1NSBmbWEgIC0xLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1NiBmbWEgIC0xLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLWRkZm1hMjU1OCBmbWEgICAxLjAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwLjAKLQotZGRmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTYyIGZtYSAgLTAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTYzIGZtYSAgIDAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTY1IGZtYSAgLTEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTY2IGZtYSAgLTEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotZGRmbWEyNTY4IGZtYSAgIDEgICAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMAotCi1kZGZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAotZGRmbWEyNTcyIGZtYSAgLTAuMCAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKLWRkZm1hMjU3MyBmbWEgICAwLjAgICAxLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCi1kZGZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMAotZGRmbWEyNTc1IGZtYSAgLTEuMCAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKLWRkZm1hMjU3NiBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwCi1kZGZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMAotZGRmbWEyNTc4IGZtYSAgIDEuMCAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDAKLQotLS0gU3BlY2lhbHMKLWRkZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQotZGRmbWEyNTgxIGZtYSAgIEluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5Ci1kZGZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKLWRkZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI1ODQgZm1hICAgSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5Ci1kZGZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKLWRkZm1hMjU4NyBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQotZGRmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5Ci1kZGZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKLWRkZm1hMjU5MCBmbWEgIC0xICAgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQotZGRmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI1OTMgZm1hICAgMSAgICAgSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKLWRkZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQotZGRmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5Ci0KLWRkZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQotZGRmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5Ci1kZGZtYTI2MDIgZm1hICAtSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKLWRkZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjA1IGZtYSAgLUluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5Ci1kZGZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKLWRkZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQotZGRmbWEyNjA4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5Ci1kZGZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkKLWRkZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQotZGRmbWEyNjExIGZtYSAgLTAgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkKLWRkZm1hMjYxNCBmbWEgICAxMDAwIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eQotZGRmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5Ci0KLWRkZm1hMjYyMSBmbWEgICBOYU4gLUluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyNCBmbWEgICBOYU4gLTAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyNyBmbWEgICBOYU4gIDEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzMCBmbWEgIC1JbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzMyBmbWEgIC0wICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzNiBmbWEgICAxMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLWRkZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4KLQotZGRmbWEyNjQxIGZtYSAgIHNOYU4gLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjQ0IGZtYSAgIHNOYU4gLTAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjQ3IGZtYSAgIHNOYU4gIDEwMDAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjUwIGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjUzIGZtYSAgLTEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjU2IGZtYSAgIDEgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjU5IGZtYSAgIE5hTiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRmbWEyNjYxIGZtYSAgIE5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjkKLWRkZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzM4NCAgLT4gICBOYU44Ci1kZGZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSszODQgIC0+ICAgTmFONzEKLWRkZm1hMjY2NCBmbWEgICBOYU42ICBOYU41ICAgIDBlKzM4NCAgLT4gICBOYU42Ci1kZGZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSszODQgIC0+ICAgTmFONAotZGRmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrMzg0ICAtPiAgIE5hTjMzCi1kZGZtYTI2NjcgZm1hICAgSW5mICAgTmFOMiAgICAwZSszODQgIC0+ICAgTmFOMgotCi1kZGZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSszODQgIC0+ICAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY3MiBmbWEgICBzTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSszODQgIC0+ICAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY3NSBmbWEgICBOYU45NSAgc05hTjkzICAgIDBlKzM4NCAgLT4gICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrMzg0ICAtPiAgIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSszODQgIC0+ICAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY3OCBmbWEgICBJbmYgICAgc05hTjkwICAgIDBlKzM4NCAgLT4gICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrMzg0ICAtPiAgIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRkZm1hMjY4MSBmbWEgIC1OYU45IC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU45Ci1kZGZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOOAotZGRmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTjcxCi1kZGZtYTI2ODQgZm1hICAtTmFONiAtTmFONSAgICAwZSszODQgIC0+ICAtTmFONgotZGRmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrMzg0ICAtPiAgLU5hTjQKLWRkZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzM4NCAgLT4gIC1OYU4zMwotZGRmbWEyNjg3IGZtYSAgIEluZiAgLU5hTjIgICAgMGUrMzg0ICAtPiAgLU5hTjIKLQotZGRmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2OTIgZm1hICAtc05hTjk4IC0xMSAgICAgICAwZSszODQgIC0+ICAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrMzg0ICAtPiAgLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2OTUgZm1hICAtTmFOOTUgIC1zTmFOOTMgICAwZSszODQgIC0+ICAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzM4NCAgLT4gIC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrMzg0ICAtPiAgLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI2OTggZm1hICAgSW5mICAgIC1zTmFOOTAgICAwZSszODQgIC0+ICAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzM4NCAgLT4gIC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi1kZGZtYTI3MDEgZm1hICAtTmFOICAtSW5mICAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDQgZm1hICAtTmFOICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCi1kZGZtYTI3MDcgZm1hICAgSW5mICAtTmFOICAgICAwZSszODQgIC0+ICAtTmFOCi0KLWRkZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxMiBmbWEgIC1zTmFOICAgLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxNSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxOCBmbWEgICBJbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCi0tLSBzaWducwotZGRmbWEyNzUxIGZtYSAgIDFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzUyIGZtYSAgIDFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzUzIGZtYSAgLTFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzU0IGZtYSAgLTFlKzI3NyAtMWUrMzExICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzU1IGZtYSAgIDFlLTI3NyAgMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGZtYTI3NTYgZm1hICAgMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkZm1hMjc1NyBmbWEgIC0xZS0yNzcgIDFlLTMxMSAgIDBlKzM4NCAgLT4gIC0wRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRmbWEyNzU4IGZtYSAgLTFlLTI3NyAtMWUtMzExICAgMGUrMzg0ICAtPiAgIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQotZGRmbWEyNzYwIGZtYSAgMWUtMjkxIDFlLTEwMSAgIDBlKzM4NCAgLT4gIDFFLTM5MiBTdWJub3JtYWwKLWRkZm1hMjc2MSBmbWEgIDFlLTI5MSAxZS0xMDIgICAwZSszODQgIC0+ICAxRS0zOTMgU3Vibm9ybWFsCi1kZGZtYTI3NjIgZm1hICAxZS0yOTEgMWUtMTAzICAgMGUrMzg0ICAtPiAgMUUtMzk0IFN1Ym5vcm1hbAotZGRmbWEyNzYzIGZtYSAgMWUtMjkxIDFlLTEwNCAgIDBlKzM4NCAgLT4gIDFFLTM5NSBTdWJub3JtYWwKLWRkZm1hMjc2NCBmbWEgIDFlLTI5MSAxZS0xMDUgICAwZSszODQgIC0+ICAxRS0zOTYgU3Vibm9ybWFsCi1kZGZtYTI3NjUgZm1hICAxZS0yOTEgMWUtMTA2ICAgMGUrMzg0ICAtPiAgMUUtMzk3IFN1Ym5vcm1hbAotZGRmbWEyNzY2IGZtYSAgMWUtMjkxIDFlLTEwNyAgIDBlKzM4NCAgLT4gIDFFLTM5OCBTdWJub3JtYWwKLWRkZm1hMjc2NyBmbWEgIDFlLTI5MSAxZS0xMDggICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRmbWEyNzY4IGZtYSAgMWUtMjkxIDFlLTEwOSAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGZtYTI3NjkgZm1hICAxZS0yOTEgMWUtMTEwICAgMGUrMzg0ICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KLWRkZm1hMjc3MCBmbWEgIDFlKzYwIDFlKzMyMSAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwRSszODEgIENsYW1wZWQKLWRkZm1hMjc3MSBmbWEgIDFlKzYwIDFlKzMyMiAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMEUrMzgyICBDbGFtcGVkCi1kZGZtYTI3NzIgZm1hICAxZSs2MCAxZSszMjMgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKLWRkZm1hMjc3MyBmbWEgIDFlKzYwIDFlKzMyNCAgIDBlKzM4NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgIENsYW1wZWQKLWRkZm1hMjc3NCBmbWEgIDFlKzYwIDFlKzMyNSAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzc1IGZtYSAgMWUrNjAgMWUrMzI2ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI3NzYgZm1hICAxZSs2MCAxZSszMjcgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjc3NyBmbWEgIDFlKzYwIDFlKzMyOCAgIDBlKzM4NCAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEyNzc4IGZtYSAgMWUrNjAgMWUrMzI5ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI3NzkgZm1hICAxZSs2MCAxZSszMzAgICAwZSszODQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEyODAxIGZtYSAgIDEuMDAwMEUtMzk0ICAxICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMEUtMzk0IFN1Ym5vcm1hbAotZGRmbWEyODAyIGZtYSAgIDEuMDAwRS0zOTQgICAxZS0xICAgIDBlKzM4NCAgLT4gIDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAotZGRmbWEyODAzIGZtYSAgIDEuMDBFLTM5NCAgICAxZS0yICAgIDBlKzM4NCAgLT4gIDEuMDBFLTM5NiAgIFN1Ym5vcm1hbAotZGRmbWEyODA0IGZtYSAgIDEuMEUtMzk0ICAgICAxZS0zICAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbAotZGRmbWEyODA1IGZtYSAgIDEuMEUtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRkZm1hMjgwNiBmbWEgICAxLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI4MDcgZm1hICAgMS41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODA4IGZtYSAgIDEuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjgwOSBmbWEgICAyLjNFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI4MTAgZm1hICAgMi41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODExIGZtYSAgIDIuN0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjgxMiBmbWEgICAxLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI4MTMgZm1hICAgMS41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODE0IGZtYSAgIDEuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjgxNSBmbWEgICAyLjQ5RS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI4MTYgZm1hICAgMi41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODE3IGZtYSAgIDIuNTFFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEyODE4IGZtYSAgIDFFLTM5NCAgICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsCi1kZGZtYTI4MTkgZm1hICAgM0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGZtYTI4MjAgZm1hICAgNUUtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGZtYTI4MjEgZm1hICAgN0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODIyIGZtYSAgIDlFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjgyMyBmbWEgICA5LjlFLTM5NCAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRkZm1hMjgyNCBmbWEgICAxRS0zOTQgICAgICAtMWUtNCAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFN1Ym5vcm1hbAotZGRmbWEyODI1IGZtYSAgIDNFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRmbWEyODI2IGZtYSAgLTVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRmbWEyODI3IGZtYSAgIDdFLTM5NCAgICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMjgyOCBmbWEgIC05RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTI4MjkgZm1hICAgOS45RS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRmbWEyODMwIGZtYSAgIDMuMEUtMzk0ICAgIC0xZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi1kZGZtYTI4MzEgZm1hICAgMS4wRS0xOTkgICAgIDFlLTIwMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZGZtYTI4MzIgZm1hICAgMS4wRS0xOTkgICAgIDFlLTE5OSAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAotZGRmbWEyODMzIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTggICAwZSszODQgIC0+ICAxLjBFLTM5NyAgICBTdWJub3JtYWwKLWRkZm1hMjgzNCBmbWEgICAyLjBFLTE5OSAgICAgMmUtMTk4ICAgMGUrMzg0ICAtPiAgNC4wRS0zOTcgICAgU3Vibm9ybWFsCi1kZGZtYTI4MzUgZm1hICAgNC4wRS0xOTkgICAgIDRlLTE5OCAgIDBlKzM4NCAgLT4gIDEuNjBFLTM5NiAgIFN1Ym5vcm1hbAotZGRmbWEyODM2IGZtYSAgMTAuMEUtMTk5ICAgIDEwZS0xOTggICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwKLWRkZm1hMjgzNyBmbWEgIDMwLjBFLTE5OSAgICAzMGUtMTk4ICAgMGUrMzg0ICAtPiAgOS4wMDBFLTM5NSAgU3Vibm9ybWFsCi1kZGZtYTI4MzggZm1hICA0MC4wRS0xOTkgICAgNDBlLTE4OCAgIDBlKzM4NCAgLT4gIDEuNjAwMEUtMzg0IFN1Ym5vcm1hbAotZGRmbWEyODM5IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODcgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MwotZGRmbWEyODQwIGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODYgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4MgotCi0tLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKLWRkZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzM4MyAgICAgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZGRmbWEyODcxIGZtYSAgMTAwIC05Ljk5OUUrMzgzICAgICAgIDBlKzM4NCAgLT4gIC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRkZm1hMjg3MiBmbWEgICAgICAgOS45OTlFKzM4MyAxMDAgICAwZSszODQgIC0+ICAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCi1kZGZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscwotZGRmbWEyODgxIGZtYSAgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgICAgMGUrMzg0ICAtPiAgIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRkZm1hMjg4MiBmbWEgICAxLjIzNEUtMzU1IDEuMjM0RS00MCAgICAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZGZtYTI4ODMgZm1hICAgMS4yM0UtMzU1ICAxLjIzRS00MCAgICAgICAwZSszODQgIC0+ICAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRmbWEyODg0IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NSAgU3Vibm9ybWFsCi1kZGZtYTI4ODUgZm1hICAgMS4yRS0zNTUgICAxLjJFLTQxICAgICAgICAwZSszODQgIC0+ICAgMS40NEUtMzk2ICBTdWJub3JtYWwKLWRkZm1hMjg4NiBmbWEgICAxLjJFLTM1NSAgIDEuMkUtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kZGZtYTI4ODcgZm1hICAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZGRmbWEyODg4IGZtYSAgIDEuM0UtMzU1ICAgMS4zRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWRkZm1hMjg4OSBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDMgICAgICAgIDBlKzM4NCAgLT4gICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kZGZtYTI4OTAgZm1hICAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0KLWRkZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyMzRFLTM5NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZGZtYTI4OTMgZm1hICAgMS4yMzQ1RS00MCAgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRkZm1hMjg5NCBmbWEgICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAgIDBlKzM4NCAgLT4gICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZGZtYTI4OTYgZm1hICAgMS4yMzQ1NkUtNDEgIDEuMjM0RS0zNTUgICAwZSszODQgIC0+ICAgMS41MkUtMzk2ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdwotZGRmbWEyOTAwIGZtYSAgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxICAgMGUrMzg0ICAtPiAgOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZGZtYTI5MDEgZm1hICAgMC4zMDAwMDAwMDAxRS0xOTEgMC4zMDAwMDAwMDAxRS0xOTEgICAwZSszODQgIC0+ICA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWRkZm1hMjkwMiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZGRmbWEyOTAzIGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAgICAgICAgMGUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZGZtYTI5MDQgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWRkZm1hMjkwNSBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0Ci1kZGZtYTI5MDYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzCi1kZGZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAwLjA5OTk5OTk5OTk5OTk5OTk5Ci0tLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgotZGRmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotCi0tLSBodWdlc3QKLWRkZm1hMjkwOSBmbWEgICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgICAwZSszODQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE51bGwgdGVzdHMKLWRkZm1hMjk5MCBmbWEgIDEwICAjICAgMGUrMzg0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0KLS0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KLWRkZm1hMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMgotZGRmbWEzMDAyIGZtYSAgMSAgMiAgICAgICAzICAgICAgIC0+ICA1Ci1kZGZtYTMwMDMgZm1hICAxICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKLWRkZm1hMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMgotZGRmbWEzMDA1IGZtYSAgMSAgJy01JyAgICAnLTMnICAgIC0+ICAtOAotZGRmbWEzMDA2IGZtYSAgMSAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41Ci1kZGZtYTMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAotZGRmbWEzMDA4IGZtYSAgMSAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCi1kZGZtYTMwMDkgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKLWRkZm1hMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJwotCi0tLSAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZGRmbWEzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMwMTIgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kZGZtYTMwMTMgZm1hICAxICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKLWRkZm1hMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAxNSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAxNiBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OTknIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAxOCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAxOSBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEzMDIxIGZtYSAgMSAgMCAxIC0+IDEKLWRkZm1hMzAyMiBmbWEgIDEgIDEgMSAtPiAyCi1kZGZtYTMwMjMgZm1hICAxICAyIDEgLT4gMwotZGRmbWEzMDI0IGZtYSAgMSAgMyAxIC0+IDQKLWRkZm1hMzAyNSBmbWEgIDEgIDQgMSAtPiA1Ci1kZGZtYTMwMjYgZm1hICAxICA1IDEgLT4gNgotZGRmbWEzMDI3IGZtYSAgMSAgNiAxIC0+IDcKLWRkZm1hMzAyOCBmbWEgIDEgIDcgMSAtPiA4Ci1kZGZtYTMwMjkgZm1hICAxICA4IDEgLT4gOQotZGRmbWEzMDMwIGZtYSAgMSAgOSAxIC0+IDEwCi0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cwotZGRmbWEzMDMxIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCi1kZGZtYTMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScKLWRkZm1hMzAzMyBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJwotZGRmbWEzMDM0IGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCi0KLWRkZm1hMzAzNSBmbWEgIDEgICc3MCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMDM2IGZtYSAgMSAgJzcwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzAzOCBmbWEgIDEgICc3MDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMDM5IGZtYSAgMSAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKLQotLS0gc3ltbWV0cnk6Ci1kZGZtYTMwNDAgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzA0MSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzA0MiBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMwNDQgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzA0NSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkCi0KLS0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcKLWRkZm1hMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCi1kZGZtYTMwNDcgZm1hICAxICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKLWRkZm1hMzA0OCBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKLWRkZm1hMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCi1kZGZtYTMwNTAgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKLWRkZm1hMzA1MSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKLWRkZm1hMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKLWRkZm1hMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKLWRkZm1hMzA1NCBmbWEgIDEgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCi1kZGZtYTMwNTUgZm1hICAxICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJwotZGRmbWEzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCi1kZGZtYTMwNTcgZm1hICAxICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JwotCi0tLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uCi1kZGZtYTMwNjEgZm1hICAxICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCi1kZGZtYTMwNjIgZm1hICAxICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKLWRkZm1hMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCi1kZGZtYTMwNjQgZm1hICAxICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCi1kZGZtYTMwNjUgZm1hICAxICAxICcwLjAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMScKLQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQotZGRmbWEzMDcwIGZtYSAgMSAgMSAgMCAgICAtPiAxCi1kZGZtYTMwNzEgZm1hICAxICAxIDAuICAgIC0+IDEKLWRkZm1hMzA3MiBmbWEgIDEgIDEgIC4wICAgLT4gMS4wCi1kZGZtYTMwNzMgZm1hICAxICAxIDAuMCAgIC0+IDEuMAotZGRmbWEzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwCi1kZGZtYTMwNzUgZm1hICAxICAgMCAgMSAgIC0+IDEKLWRkZm1hMzA3NiBmbWEgIDEgIDAuICAxICAgLT4gMQotZGRmbWEzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjAKLWRkZm1hMzA3OCBmbWEgIDEgIDAuMCAxICAgLT4gMS4wCi1kZGZtYTMwNzkgZm1hICAxICAwLjAwIDEgIC0+IDEuMDAKLQotLS0gc29tZSBjYXJyaWVzCi1kZGZtYTMwODAgZm1hICAxICA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5Ci1kZGZtYTMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAotZGRmbWEzMDgyIGZtYSAgMSAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAotZGRmbWEzMDgzIGZtYSAgMSAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCi1kZGZtYTMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAotZGRmbWEzMDg1IGZtYSAgMSAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAotZGRmbWEzMDg2IGZtYSAgMSAgICAgICA5OTk5IDEgIC0+IDEwMDAwCi1kZGZtYTMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMAotZGRmbWEzMDg4IGZtYSAgMSAgICAgICAgIDk5IDEgIC0+IDEwMAotZGRmbWEzMDg5IGZtYSAgMSAgICAgICAgICA5IDEgIC0+IDEwCi0KLQotLS0gbW9yZSBMSFMgc3dhcHMKLWRkZm1hMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JwotZGRmbWEzMDkxIGZtYSAgMSAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKLWRkZm1hMzA5MiBmbWEgIDEgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKLWRkZm1hMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JwotZGRmbWEzMDk0IGZtYSAgMSAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCi1kZGZtYTMwOTUgZm1hICAxICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKLWRkZm1hMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JwotZGRmbWEzMDk3IGZtYSAgMSAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKLWRkZm1hMzA5OCBmbWEgIDEgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCi1kZGZtYTMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCi1kZGZtYTMxMDAgZm1hICAxICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JwotZGRmbWEzMTAxIGZtYSAgMSAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JwotZGRmbWEzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCi1kZGZtYTMxMDMgZm1hICAxICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKLWRkZm1hMzEwNCBmbWEgIDEgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKLWRkZm1hMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCi1kZGZtYTMxMDYgZm1hICAxICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKLWRkZm1hMzEwNyBmbWEgIDEgICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKLWRkZm1hMzEwOCBmbWEgIDEgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAotZGRmbWEzMTA5IGZtYSAgMSAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCi1kZGZtYTMxMTAgZm1hICAxICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKLWRkZm1hMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAotCi0tLSBtb3JlIFJIUyBzd2FwcwotZGRmbWEzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycKLWRkZm1hMzExNCBmbWEgIDEgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKLWRkZm1hMzExNiBmbWEgIDEgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3JwotZGRmbWEzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycKLWRkZm1hMzExOSBmbWEgIDEgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCi1kZGZtYTMxMjAgZm1hICAxICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3JwotZGRmbWEzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycKLWRkZm1hMzEyMiBmbWEgIDEgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKLWRkZm1hMzEyMyBmbWEgIDEgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcKLWRkZm1hMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03JwotZGRmbWEzMTI1IGZtYSAgMSAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JwotZGRmbWEzMTI2IGZtYSAgMSAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnCi1kZGZtYTMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1JwotZGRmbWEzMTI4IGZtYSAgMSAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKLWRkZm1hMzEyOSBmbWEgIDEgIDAgICctNUUwJyAgICAgICAtPiAgJy01JwotZGRmbWEzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJwotZGRmbWEzMTMxIGZtYSAgMSAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKLWRkZm1hMzEzMiBmbWEgIDEgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJwotZGRmbWEzMTMzIGZtYSAgMSAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCi1kZGZtYTMxMzQgZm1hICAxICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKLWRkZm1hMzEzNSBmbWEgIDEgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZAotZGRmbWEzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCi0KLS0tIHJlbGF0ZWQKLWRkZm1hMzEzNyBmbWEgIDEgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKLWRkZm1hMzEzOCBmbWEgIDEgIC0xICAnMEUtMTknICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKLWRkZm1hMzEzOSBmbWEgIDEgICcwRS0xOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKLWRkZm1hMzE0MCBmbWEgIDEgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKLWRkZm1hMzE0MSBmbWEgIDEgIDFFKzExICAgMC4wMDAwICAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcKLWRkZm1hMzE0MiBmbWEgIDEgIDFFKzExICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQKLWRkZm1hMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKLWRkZm1hMzE0NCBmbWEgIDEgIDAuMDAwMCAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcgIFJvdW5kZWQKLQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KLWRkZm1hMzE0NiBmbWEgIDEgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKLWRkZm1hMzE0NyBmbWEgIDEgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCi1kZGZtYTMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJwotZGRmbWEzMTQ5IGZtYSAgMSAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJwotZGRmbWEzMTUwIGZtYSAgMSAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKLWRkZm1hMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCi1kZGZtYTMxNTIgZm1hICAxICAnMycgICAgICcuMycgICAgLT4gICczLjMnCi1kZGZtYTMxNTMgZm1hICAxICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCi1kZGZtYTMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCi1kZGZtYTMxNTUgZm1hICAxICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJwotZGRmbWEzMTU2IGZtYSAgMSAgJzMnICAgICAnMycgICAgIC0+ICAnNicKLWRkZm1hMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnCi1kZGZtYTMxNTggZm1hICAxICAnMycgICAgICctMycgICAgLT4gICcwJwotZGRmbWEzMTU5IGZtYSAgMSAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJwotZGRmbWEzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKLQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KLWRkZm1hMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JwotZGRmbWEzMTYyIGZtYSAgMSAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJwotZGRmbWEzMTYzIGZtYSAgMSAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJwotZGRmbWEzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCi1kZGZtYTMxNjUgZm1hICAxICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCi1kZGZtYTMxNjYgZm1hICAxICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCi1kZGZtYTMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCi1kZGZtYTMxNjggZm1hICAxICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCi0KLXJvdW5kaW5nOiBoYWxmX3VwCi0tLSAgICAgICAgICAgMS4yMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKLWRkZm1hMzE3MCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjcnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMTcyIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzE3MyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjQnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMTc1IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzE3NiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKLWRkZm1hMzE3OCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMxNzkgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ0JyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzE4MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMxODIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQxJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCi0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKLXJvdW5kaW5nOiBoYWxmX3VwCi1kZGZtYTMyMDAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKLWRkZm1hMzIwMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIwOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIxNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJwotZGRmbWEzMjE3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjE4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjE5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl9ldmVuCi1kZGZtYTMyMjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScKLWRkZm1hMzIyMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIyOSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzIzNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJwotZGRmbWEzMjM3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjM4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjM5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KLWRkZm1hMzI0MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzI0MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzI0MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGRvd24KLWRkZm1hMzI1MCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JwotZGRmbWEzMjUxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjUyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjUzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjU5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjYwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjYxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjYyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjYzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjY0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjY1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMjY2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnCi1kZGZtYTMyNjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMyNjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTMyNjkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cwotcm91bmRpbmc6IGhhbGZfdXAKLWRkZm1hMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDAKLWRkZm1hMzMwMiBmbWEgIDEgICAgMCAgIDEgICAgICAtPiAgIDEKLWRkZm1hMzMwMyBmbWEgIDEgICAgMSAgIDEgICAgICAtPiAgIDIKLWRkZm1hMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMKLWRkZm1hMzMwNSBmbWEgIDEgICA5OCAgIDEgICAgICAtPiAgOTkKLWRkZm1hMzMwNiBmbWEgIDEgICA5OSAgIDEgICAgICAtPiAxMDAKLWRkZm1hMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDEKLWRkZm1hMzMwOCBmbWEgIDEgIDEwMSAgIDEgICAgICAtPiAxMDIKLWRkZm1hMzMwOSBmbWEgIDEgICAtMSAgLTEgICAgICAtPiAgLTIKLWRkZm1hMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTEKLWRkZm1hMzMxMSBmbWEgIDEgICAgMSAgLTEgICAgICAtPiAgIDAKLWRkZm1hMzMxMiBmbWEgIDEgICAxMiAgLTEgICAgICAtPiAgMTEKLWRkZm1hMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcKLWRkZm1hMzMxNCBmbWEgIDEgICA5OSAgLTEgICAgICAtPiAgOTgKLWRkZm1hMzMxNSBmbWEgIDEgIDEwMCAgLTEgICAgICAtPiAgOTkKLWRkZm1hMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDAKLQotZGRmbWEzMzIxIGZtYSAgMSAgLTAuMDEgIDAuMDEgICAgLT4gIDAuMDAKLWRkZm1hMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCi1kZGZtYTMzMjMgZm1hICAxICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgotZGRmbWEzMzI0IGZtYSAgMSAgIDAuMTIgIDAuMDEgICAgLT4gIDAuMTMKLWRkZm1hMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5Ci1kZGZtYTMzMjYgZm1hICAxICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAotZGRmbWEzMzI3IGZtYSAgMSAgIDEuMDAgIDAuMDEgICAgLT4gIDEuMDEKLWRkZm1hMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCi1kZGZtYTMzMjkgZm1hICAxICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgotZGRmbWEzMzMwIGZtYSAgMSAgIDAuMDAgLTAuMDEgICAgLT4gLTAuMDEKLWRkZm1hMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCi1kZGZtYTMzMzIgZm1hICAxICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQotZGRmbWEzMzMzIGZtYSAgMSAgIDAuOTggLTAuMDEgICAgLT4gIDAuOTcKLWRkZm1hMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4Ci1kZGZtYTMzMzUgZm1hICAxICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQotZGRmbWEzMzM2IGZtYSAgMSAgIDEuMDEgLTAuMDEgICAgLT4gIDEuMDAKLQotLS0gc29tZSBtb3JlIGNhc2VzIHdoZXJlIGFkZGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50Ci1kZGZtYTMzNDAgZm1hICAxICAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCi1kZGZtYTMzNDEgZm1hICAxICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMAotZGRmbWEzMzQyIGZtYSAgMSAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCi1kZGZtYTMzNDMgZm1hICAxICAxRSsyMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KLWRkZm1hMzM0NCBmbWEgIDEgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDEKLWRkZm1hMzM0NSBmbWEgIDEgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCi1kZGZtYTMzNDYgZm1hICAxICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMzQ3IGZtYSAgMSAgMUUrMjAgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzM0OCBmbWEgIDEgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKLWRkZm1hMzM0OSBmbWEgIDEgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3Ci1kZGZtYTMzNTAgZm1hICAxICAxRSsxNiAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMUUrMTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzMzUxIGZtYSAgMSAgMUUrMjAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzIwICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdHJ5emVyb3MgY2FzZXMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kZGZtYTMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQotZGRmbWEzMzYxICBmbWEgIDEgIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMCBSb3VuZGVkCi1kZGZtYTMzNjIgIGZtYSAgMSAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQKLWRkZm1hMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAotZGRmbWEzMzY0ICBmbWEgIDEgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gMEUrMzY5Ci0KLS0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcKLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24KLWRkZm1hMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQKLWRkZm1hMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kZGZtYTMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0Ci1kZGZtYTMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogICAgaGFsZl9ldmVuCi1kZGZtYTMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwODE0Ci1kZGZtYTMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0Ci0KLS0tIHVscCByZXBsYWNlbWVudCB0ZXN0cwotZGRmbWEzNDAwIGZtYSAgMSAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKLWRkZm1hMzQwMSBmbWEgIDEgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NwotZGRmbWEzNDAyIGZtYSAgMSAgICAxICAgNzdlLTE2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDAzIGZtYSAgMSAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDA0IGZtYSAgMSAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDA1IGZtYSAgMSAgICAxICAgNzdlLTE5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM0MTAgZm1hICAxICAgMTAgICA3N2UtMTQgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKLWRkZm1hMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQxMiBmbWEgIDEgICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0xNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQxNSBmbWEgIDEgICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEzNDIwIGZtYSAgMSAgIDc3ZS0xNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKLWRkZm1hMzQyMSBmbWEgIDEgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NwotZGRmbWEzNDIyIGZtYSAgMSAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDIzIGZtYSAgMSAgIDc3ZS0xNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDI0IGZtYSAgMSAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDI1IGZtYSAgMSAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNDI2IGZtYSAgMSAgIDc3ZS0yOTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM0MzAgZm1hICAxICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKLWRkZm1hMzQzMSBmbWEgIDEgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQzMiBmbWEgIDEgICA3N2UtMTYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQzMyBmbWEgIDEgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQzNCBmbWEgIDEgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQzNSBmbWEgIDEgICA3N2UtMTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbmVnYXRpdmUgdWxwcwotZGRmbWEzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMwotZGRmbWEzNjQ0MSBmbWEgIDEgICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMwotZGRmbWEzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ0NCBmbWEgIDEgICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMwotZGRmbWEzNjQ1MiBmbWEgIDEgICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDU1IGZtYSAgMSAgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM2NDYwIGZtYSAgMSAgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NDYxIGZtYSAgMSAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMwotZGRmbWEzNjQ2MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NDYzIGZtYSAgMSAgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDY0IGZtYSAgMSAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDY1IGZtYSAgMSAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY0NjYgZm1hICAxICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM2NDcwIGZtYSAgMSAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMwotZGRmbWEzNjQ3MSBmbWEgIDEgICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NDcyIGZtYSAgMSAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDczIGZtYSAgMSAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDc0IGZtYSAgMSAgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY0NzUgZm1hICAxICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG5lZ2F0aXZlIHVscHMKLWRkZm1hMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NDgxIGZtYSAgMSAgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDg0IGZtYSAgMSAgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKLWRkZm1hMzY0OTIgZm1hICAxICAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ5NSBmbWEgIDEgIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM2NTAwIGZtYSAgMSAgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMwotZGRmbWEzNjUwMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NTAyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NTAzIGZtYSAgMSAgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjUwNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MDUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MDYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEzNjUxMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NTExIGZtYSAgMSAgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCi1kZGZtYTM2NTEyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjUxMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MTQgZm1hICAxICAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MTUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gYW5kIGEgY291cGxlIG1vcmUgd2l0aCBsb25nZXIgUkhTCi1kZGZtYTM2NTIwIGZtYSAgMSAgICAxICAgLTc3NzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjIyMwotZGRmbWEzNjUyMSBmbWEgIDEgICAgMSAgIC03Nzc3ZS0xNyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMjIgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTIyIGZtYSAgMSAgICAxICAgLTc3NzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1MjMgZm1hICAxICAgIDEgICAtNzc3N2UtMTkgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjUyNCBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTI1IGZtYSAgMSAgICAxICAgLTc3NzdlLTIxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjUyNiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotCi0tLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncwotcm91bmRpbmc6IGhhbGZfdXAKLWRkZm1hMzY1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKLWRkZm1hMzY1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU0MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NDQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTQ1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU0NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NDcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTQ4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU0OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTUxIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NTMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTU0IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NTYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKLWRkZm1hMzY1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTU4IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfZXZlbgotZGRmbWEzNjU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JwotZGRmbWEzNjU2MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NjIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU2NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NjUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU3MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NzEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTcyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU3MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NzQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTc1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNjU3NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJwotZGRmbWEzNjU3NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzY1NzggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM2NTc5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgotZGRmbWEzNzU0MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZGRmbWEzNzU1MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JwotZGRmbWEzNzU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NTIgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NTUgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzU1NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTU5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzU2MyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzU2NiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJwotZGRmbWEzNzU2NyBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0KLS0tIHZlcmlmeSBhIHF1ZXJ5Ci1yb3VuZGluZzogICAgIGRvd24KLWRkZm1hMzc2NjEgZm1hICAxICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzY2MiBmbWEgIDEgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAotZGRmbWEzNzY2MyBmbWEgIDEgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NjY0IGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCi0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLQotZGRmbWEzNzcwMSBmbWEgIDEgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCi1kZGZtYTM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCi1kZGZtYTM3NzAzIGZtYSAgMSAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCi1kZGZtYTM3NzA0IGZtYSAgMSAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCi0KLWRkZm1hMzc3MTAgZm1hICAxICAwRSszICAwMC4wMCAgLT4gMC4wMAotZGRmbWEzNzcxMSBmbWEgIDEgIDBFKzMgIDAwLjAgICAtPiAwLjAKLWRkZm1hMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMAotZGRmbWEzNzcxMyBmbWEgIDEgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCi1kZGZtYTM3NzE0IGZtYSAgMSAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKLWRkZm1hMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMwotZGRmbWEzNzcxNiBmbWEgIDEgIDBFKzMgIDAwLkUrNCAtPiAwRSszCi1kZGZtYTM3NzE3IGZtYSAgMSAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKLWRkZm1hMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMAotZGRmbWEzNzcxOSBmbWEgIDEgIDBFKzMgIC0wMC4gICAgLT4gMAotZGRmbWEzNzczMSBmbWEgIDEgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQotCi1kZGZtYTM3NzIwIGZtYSAgMSAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKLWRkZm1hMzc3MjEgZm1hICAxICAwMC4wICAgMEUrMyAgLT4gMC4wCi1kZGZtYTM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDAKLWRkZm1hMzc3MjMgZm1hICAxICAwMC5FKzEgMEUrMyAgLT4gMEUrMQotZGRmbWEzNzcyNCBmbWEgIDEgIDAwLkUrMiAwRSszICAtPiAwRSsyCi1kZGZtYTM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMKLWRkZm1hMzc3MjYgZm1hICAxICAwMC5FKzQgMEUrMyAgLT4gMEUrMwotZGRmbWEzNzcyNyBmbWEgIDEgIDAwLkUrNSAwRSszICAtPiAwRSszCi1kZGZtYTM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKLWRkZm1hMzc3MjkgZm1hICAxICAtMDAuMCAgMEUrMyAgLT4gMC4wCi1kZGZtYTM3NzMwIGZtYSAgMSAgLTAwLiAgIDBFKzMgIC0+IDAKLQotZGRmbWEzNzczMiBmbWEgIDEgICAwICAgICAwICAgICAtPiAgMAotZGRmbWEzNzczMyBmbWEgIDEgICAwICAgIC0wICAgICAtPiAgMAotZGRmbWEzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMAotZGRmbWEzNzczNSBmbWEgIDEgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCi0KLWRkZm1hMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDAKLWRkZm1hMzc3MzcgZm1hICAxICAtMSAgICAtMSAgICAgLT4gLTIKLWRkZm1hMzc3MzggZm1hICAxICAgMSAgICAgMSAgICAgLT4gIDIKLWRkZm1hMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDAKLQotZGRmbWEzNzc0MSBmbWEgIDEgICAwICAgIC0xICAgICAtPiAtMQotZGRmbWEzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQotZGRmbWEzNzc0MyBmbWEgIDEgICAwICAgICAxICAgICAtPiAgMQotZGRmbWEzNzc0NCBmbWEgIDEgIC0wICAgICAxICAgICAtPiAgMQotZGRmbWEzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQotZGRmbWEzNzc0NiBmbWEgIDEgIC0xICAgIC0wICAgICAtPiAtMQotZGRmbWEzNzc0NyBmbWEgIDEgICAxICAgICAwICAgICAtPiAgMQotZGRmbWEzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQotCi1kZGZtYTM3NzUxIGZtYSAgMSAgIDAuMCAgLTEgICAgIC0+IC0xLjAKLWRkZm1hMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMAotZGRmbWEzNzc1MyBmbWEgIDEgICAwLjAgICAxICAgICAtPiAgMS4wCi1kZGZtYTM3NzU0IGZtYSAgMSAgLTAuMCAgIDEgICAgIC0+ICAxLjAKLWRkZm1hMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMAotZGRmbWEzNzc1NiBmbWEgIDEgIC0xLjAgIC0wICAgICAtPiAtMS4wCi1kZGZtYTM3NzU3IGZtYSAgMSAgIDEuMCAgIDAgICAgIC0+ICAxLjAKLWRkZm1hMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMAotCi1kZGZtYTM3NzYxIGZtYSAgMSAgIDAgICAgLTEuMCAgIC0+IC0xLjAKLWRkZm1hMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMAotZGRmbWEzNzc2MyBmbWEgIDEgICAwICAgICAxLjAgICAtPiAgMS4wCi1kZGZtYTM3NzY0IGZtYSAgMSAgLTAgICAgIDEuMCAgIC0+ICAxLjAKLWRkZm1hMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMAotZGRmbWEzNzc2NiBmbWEgIDEgIC0xICAgIC0wLjAgICAtPiAtMS4wCi1kZGZtYTM3NzY3IGZtYSAgMSAgIDEgICAgIDAuMCAgIC0+ICAxLjAKLWRkZm1hMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMAotCi1kZGZtYTM3NzcxIGZtYSAgMSAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKLWRkZm1hMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMAotZGRmbWEzNzc3MyBmbWEgIDEgICAwLjAgICAxLjAgICAtPiAgMS4wCi1kZGZtYTM3Nzc0IGZtYSAgMSAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKLWRkZm1hMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMAotZGRmbWEzNzc3NiBmbWEgIDEgIC0xLjAgIC0wLjAgICAtPiAtMS4wCi1kZGZtYTM3Nzc3IGZtYSAgMSAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKLWRkZm1hMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMAotCi0tLSBTcGVjaWFscwotZGRmbWEzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkZm1hMzc3ODEgZm1hICAxICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kZGZtYTM3NzgyIGZtYSAgMSAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZGRmbWEzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRkZm1hMzc3ODQgZm1hICAxICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1kZGZtYTM3Nzg1IGZtYSAgMSAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZGRmbWEzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRkZm1hMzc3ODcgZm1hICAxICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1kZGZtYTM3Nzg4IGZtYSAgMSAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRmbWEzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkZm1hMzc3OTAgZm1hICAxICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZGZtYTM3NzkxIGZtYSAgMSAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRmbWEzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkZm1hMzc3OTMgZm1hICAxICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1kZGZtYTM3Nzk0IGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkZm1hMzc4MDAgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzc4MDEgZm1hICAxICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1kZGZtYTM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZGRmbWEzNzgwMyBmbWEgIDEgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKLWRkZm1hMzc4MDQgZm1hICAxICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1kZGZtYTM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZGRmbWEzNzgwNiBmbWEgIDEgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLWRkZm1hMzc4MDcgZm1hICAxICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGZtYTM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRmbWEzNzgwOSBmbWEgIDEgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzgxMCBmbWEgIDEgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkZm1hMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGZtYTM3ODEyIGZtYSAgMSAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRmbWEzNzgxMyBmbWEgIDEgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkZm1hMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kZGZtYTM3ODE1IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kZGZtYTM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRkZm1hMzc4MjIgZm1hICAxICAgTmFOIC0xMDAwICAgLT4gIE5hTgotZGRmbWEzNzgyMyBmbWEgIDEgICBOYU4gLTEgICAgICAtPiAgTmFOCi1kZGZtYTM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRkZm1hMzc4MjUgZm1hICAxICAgTmFOICAwICAgICAgLT4gIE5hTgotZGRmbWEzNzgyNiBmbWEgIDEgICBOYU4gIDEgICAgICAtPiAgTmFOCi1kZGZtYTM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRkZm1hMzc4MjggZm1hICAxICAgTmFOICBJbmYgICAgLT4gIE5hTgotZGRmbWEzNzgyOSBmbWEgIDEgICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kZGZtYTM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRkZm1hMzc4MzEgZm1hICAxICAtMTAwMCBOYU4gICAgLT4gIE5hTgotZGRmbWEzNzgzMiBmbWEgIDEgIC0xICAgIE5hTiAgICAtPiAgTmFOCi1kZGZtYTM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4KLWRkZm1hMzc4MzQgZm1hICAxICAgMCAgICBOYU4gICAgLT4gIE5hTgotZGRmbWEzNzgzNSBmbWEgIDEgICAxICAgIE5hTiAgICAtPiAgTmFOCi1kZGZtYTM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRkZm1hMzc4MzcgZm1hICAxICAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kZGZtYTM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQyIGZtYSAgMSAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQzIGZtYSAgMSAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ1IGZtYSAgMSAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ2IGZtYSAgMSAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ4IGZtYSAgMSAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODQ5IGZtYSAgMSAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODUxIGZtYSAgMSAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODUyIGZtYSAgMSAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU0IGZtYSAgMSAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU1IGZtYSAgMSAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU3IGZtYSAgMSAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU4IGZtYSAgMSAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkZm1hMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLWRkZm1hMzc4NjIgZm1hICAxICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKLWRkZm1hMzc4NjMgZm1hICAxICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLWRkZm1hMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLWRkZm1hMzc4NjUgZm1hICAxICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKLWRkZm1hMzc4NjYgZm1hICAxICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLWRkZm1hMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLWRkZm1hMzc4NjggZm1hICAxICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKLWRkZm1hMzc4NjkgZm1hICAxICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1kZGZtYTM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzc4NzIgZm1hICAxICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzg3MyBmbWEgIDEgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzc4NzUgZm1hICAxICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzg3NiBmbWEgIDEgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzc4NzggZm1hICAxICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzg3OSBmbWEgIDEgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1kZGZtYTM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzc4ODEgZm1hICAxICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzg4MiBmbWEgIDEgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLWRkZm1hMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotZGRmbWEzNzg4NCBmbWEgIDEgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKLWRkZm1hMzc4ODUgZm1hICAxICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBIZXJlIHdlIGV4cGxvcmUgbmVhciB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgotZGRmbWEzNzU3NSBmbWEgIDEgICAxRS0zODMgLTFFLTM5OCAtPiAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKLWRkZm1hMzc1NzYgZm1hICAxICAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCi0KLS0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQotLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci1kZGZtYTM3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkZm1hMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTgyIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi0KLWRkZm1hMzc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkZm1hMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC05RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOEUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC02RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTk1IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTNFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTk2IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTJFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEFuZCBmb3Igcm91bmQgZG93biBmdWxsIGFuZCBzdWJub3JtYWwgcmVzdWx0cwotcm91bmRpbmc6ICAgICBkb3duCi1kZGZtYTM3MTEwMCBmbWEgIDEgIDFlKzIgLTFlLTM4MyAgICAtPiA5OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTEwNCBmbWEgIDEgIDFlLTEgLTFlLTM4MyAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtMzgzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTEwNyBmbWEgIDEgIDFlLTQgLTFlLTM4MyAgICAtPiAwLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtMzgzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRkZm1hMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKLQotcm91bmRpbmc6ICAgICBjZWlsaW5nCi1kZGZtYTM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTExMSBmbWEgIDEgIC0xZSsxICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZGRmbWEzNzExMTMgZm1hICAxICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTExNSBmbWEgIDEgIC0xZS0yICsxZS0zODMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZGRmbWEzNzExMTYgZm1hICAxICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kZGZtYTM3MTExOCBmbWEgIDEgIC0xZS01ICsxZS0zODMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZGRmbWEzNzExMTkgZm1hICAxICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKLQotLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKLXJvdW5kaW5nOiAgICAgaGFsZl9ldmVuCi0KLWRkZm1hMzcxMzAwIGZtYSAgMSAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzEwIGZtYSAgMSAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzExIGZtYSAgMSAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzEyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzEzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzE5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzIwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzIxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzIyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzIzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI4IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzI5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzMwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzMxIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzMyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzMzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM4IGZtYSAgMSAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzM5IGZtYSAgMSAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLQotZGRmbWEzNzEzNDAgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNDEgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZAotCi1kZGZtYTM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDkgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzUxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTkgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzU0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTkgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzU3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNTkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTkgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzYwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNjIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTkgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzYzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNjUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzY3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNjkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzcwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNzIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzc2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzNzggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzc5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzODEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzgyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzODQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzg1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDEgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzODcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzg4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDEgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzOTAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDEgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzkxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDEgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzOTMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDEgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzcxMzk0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDEgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzEzOTYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTEgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLQotLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQKLS0tIGV4cG9uZW50cyBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBwcmVjaXNpb24gYW5kIG9uZSBzaWRlIGlzIDAKLWRkZm1hMzcxNDIwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDIyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDIzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDI1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDI2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNwotZGRmbWEzNzE0MjggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKLWRkZm1hMzcxNDI5IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05Ci1kZGZtYTM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKLWRkZm1hMzcxNDMxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQotZGRmbWEzNzE0MzIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCi1kZGZtYTM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKLWRkZm1hMzcxNDM0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAotZGRmbWEzNzE0MzUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1Ci1kZGZtYTM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKLWRkZm1hMzcxNDM3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNwotZGRmbWEzNzE0MzggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4Ci1kZGZtYTM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKLQotLS0gc2FtZSwgcmV2ZXJzZWQgMAotZGRmbWEzNzE0NDAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NDEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDQyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NDMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NDQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDQ1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NDYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NDcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNwotZGRmbWEzNzE0NDggZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOAotZGRmbWEzNzE0NDkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQotZGRmbWEzNzE0NTAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKLWRkZm1hMzcxNDUxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExCi1kZGZtYTM3MTQ1MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgotZGRmbWEzNzE0NTMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKLWRkZm1hMzcxNDU0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0Ci1kZGZtYTM3MTQ1NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQotZGRmbWEzNzE0NTYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKLWRkZm1hMzcxNDU3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3Ci1kZGZtYTM3MTQ1OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAotZGRmbWEzNzE0NTkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKLQotLS0gc2FtZSwgRXMgb24gdGhlIDAKLWRkZm1hMzcxNDYwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NjEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDYzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NjQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDY2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NjcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDY5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NzAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDcyIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZGRmbWEzNzE0NzMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1kZGZtYTM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWRkZm1hMzcxNDc1IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdAotZGRmbWEzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLWRkZm1hMzcxNDc3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1kZGZtYTM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotZGRmbWEzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLQotLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTAKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGZtYTM3MTUwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZGRmbWEzNzE1MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZGRmbWEzNzE1MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGZtYTM3MTUyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTUyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZGRmbWEzNzE1MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZGRmbWEzNzE1MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGZtYTM3MTU0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZGRmbWEzNzE1NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZGRmbWEzNzE1NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotCi1yb3VuZGluZzogICAgdXAKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRkZm1hMzcxNTYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkZm1hMzcxNTYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkZm1hMzcxNTYyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRkZm1hMzcxNTYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGZtYTM3MTU3MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCi1kZGZtYTM3MTU3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCi0KLXJvdW5kaW5nOiAgICBkb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kZGZtYTM3MTU4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU4MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kZGZtYTM3MTU4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZGRmbWEzNzE1OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZGRmbWEzNzE1OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotCi1yb3VuZGluZzogICAgY2VpbGluZwotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZGRmbWEzNzE2MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZGRmbWEzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZGRmbWEzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZGRmbWEzNzE2MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWRkZm1hMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKLWRkZm1hMzcxNjEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKLQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCi1yb3VuZGluZzogICAgZmxvb3IKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRkZm1hMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRkZm1hMzcxNjIxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKLWRkZm1hMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKLWRkZm1hMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kZGZtYTM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCi1kZGZtYTM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqCi0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQotZGRmbWEzNzE3MDEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKLWRkZm1hMzcxNzAyIGZtYSAgMSAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCi1kZGZtYTM3MTcwMyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAotZGRmbWEzNzE3MDQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKLWRkZm1hMzcxNzA1IGZtYSAgMSAgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCi1kZGZtYTM3MTcwNiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAotZGRmbWEzNzE3MDcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKLWRkZm1hMzcxNzA4IGZtYSAgMSAgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCi0KLS0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLQotZGRmbWEzNzUwMDEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3Ci1kZGZtYTM3NTAwMiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMDMgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDA0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAwNSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMDYgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDA3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAwOCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMDkgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDEwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAxMSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMTIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDEzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAxNCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMTUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDE2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAxNyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMTggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDE5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTAyMCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwMjEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAotZGRmbWEzNzUwMzAgZm1hICAxICAxMjM0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OQotZGRmbWEzNzUwMzEgZm1hICAxICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xCi1kZGZtYTM3NTAzMiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyCi1kZGZtYTM3NTAzMyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMwotZGRmbWEzNzUwMzQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0Ci1kZGZtYTM3NTAzNSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Ci1kZGZtYTM3NTAzNiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NgotZGRmbWEzNzUwMzcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3Ci1kZGZtYTM3NTAzOCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4Ci1kZGZtYTM3NTAzOSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNDAgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDQxIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA0MiBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNDMgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDQ0IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA0NSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNDYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDQ3IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA0OCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNDkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Ci1yb3VuZGluZzogaGFsZl9ldmVuCi1kZGZtYTM3NTA1MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNTEgZm1hICAxICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDUyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA1MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNTQgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDU1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA1NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNTcgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDYwIGZtYSAgMSAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA2MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNjIgZm1hICAxICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDYzIGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA2NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNjUgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDY2IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA2NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQotcm91bmRpbmc6IHVwCi1kZGZtYTM3NTA3MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxCi1kZGZtYTM3NTA3MSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNzIgZm1hICAxICAxMjM0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDczIGZtYSAgMSAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA3NCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNzUgZm1hICAxICAxMjM0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDc2IGZtYSAgMSAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA3NyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwNzggZm1hICAxICAxMjM0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDc5IGZtYSAgMSAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA4MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwODEgZm1hICAxICAxMjM0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDgyIGZtYSAgMSAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA4MyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwODQgZm1hICAxICAxMjM0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDg1IGZtYSAgMSAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA4NiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZGRmbWEzNzUwODcgZm1hICAxICAxMjM0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRkZm1hMzc1MDg4IGZtYSAgMSAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kZGZtYTM3NTA4OSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotCi0tLSBkZXNjdHJ1Y3RpdmUgc3VidHJhY3Rpb24gKGZyb20gcmVtYWluZGVyIHRlc3RzKQotCi0tLSArKysgc29tZSBvZiB0aGVzZSB3aWxsIGJlIG9mZi1ieS1vbmUgcmVtYWluZGVyIHZzIHJlbWFpbmRlck5lYXIKLQotZGRmbWE0MDAwICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU0ICAgMS4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNzY1NDMyMTA5ODc2NTQ2Ci1kZGZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDMgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC42NTQzMjEwOTg3NjU1NwotZGRmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMyICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNTQzMjEwOTg3NjY2OAotZGRmbWE0MDAzICBmbWEgICAtMzA4NjQxOTcyNTMwODYzICAgNC4wMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM3Ci1kZGZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjMgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy42OTEzNTgwMjc0NjkxMzcKLWRkZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKLWRkZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjQ2OTEzNTc4MDI0NjkxCi1kZGZtYTQwMDcgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA0Ljk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMS4yNDY5MTM1NzgwMjQ2OTEKLWRkZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQotZGRmbWE0MDA5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkwICAgIDUuMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDMuNTMwODY0MjE5NzUzMTAKLWRkZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQKLWRkZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NSAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUKLWRkZm1hNDAxMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ0NCAgICAxLjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zNDU2Nzg5MDEyMzQ0NAotZGRmbWE0MDEzICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMzICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIC0wLjQ1Njc4OTAxMjMzMzMKLWRkZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQKLWRkZm1hNDAxNSAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKLWRkZm1hNDAxNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYKLWRkZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MiAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS41MzA4NjQyMTk3NTMwOAotZGRmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxICAgNC45OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxCi1kZGZtYTQwMTkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICA1LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMC43NTMwODY0MjE5NzUzMDkKLWRkZm1hNDAyMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS40NjkxMzU3ODAyNDY5MQotZGRmbWE0MDIxICBmbWEgICAtMjQ2OTEzNTc4MDI0Njg2ICAgICA1LjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMzA4NjQyMTk3NTMxNAotCi0KLS0tIE51bGwgdGVzdHMKLWRkZm1hMzk5OTAgZm1hICAxICAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkZm1hMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZEZNQS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBGdXNlZCBNdWx0aXBseSBBZGQgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoNCistLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UNCistLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQ0KKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkNCistLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpDQorLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlDQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkNCistLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4NCisNCistLSBTYW5pdHkgY2hlY2tzDQorZGRmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMg0KK2RkZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCitkZGZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3DQorZGRmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MA0KK2RkZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCitkZGZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxDQorZGRmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQ0KK2RkZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCitkZGZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwDQorZGRmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQ0KK2RkZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCitkZGZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyDQorZGRmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMA0KK2RkZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCitkZGZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxDQorZGRmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3Mg0KKw0KKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cw0KK2RkZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzINCitkZGZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQorZGRmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44Ng0KK2RkZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2Mg0KK2RkZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCitkZGZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzDQorZGRmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUNCitkZGZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQorZGRmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzDQorZGRmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQ0KK2RkZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCitkZGZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMNCitkZGZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wDQorZGRmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQorZGRmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNA0KK2RkZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2DQorZGRmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQorZGRmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMg0KK2RkZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgNCitkZGZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQorZGRmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTENCisNCistLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gNCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZA0KKy0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNy4xMjMzNTY0MjkyNTc5NjlFKzE2DQorZGRmbWEwMjAxICBmbWEgICAgICAgMjc1ODM0ODkuNjY0NSAgICAgIDI1ODI0NzEwNzguMDQgICAgICAyNTkzMTgzLjQyMzcxICAtPiAgNy4xMjMzNTY0MjkyNTc5NzBFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjI4MTMyNzUzMjguODA1MDYNCitkZGZtYTAyMDggIGZtYSAgICAgICAgMjQyODAuMzU1NTY2ICAgICAgOTM5NTc3LjM5NzY1MyAgICAgICAgMjAzMi4wMTMyNTIgIC0+ICAyMjgxMzI3NTMyOC44MDUwNyAgICAgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi4wMzAzOTc3MzQyNzgwNjJFKzE2DQorZGRmbWEwMjA5ICBmbWEgICAgICAgICAgNzg0ODk3NjQzMiAgICAgIC0yNTg2ODMxLjIyODEgICAgICAxMzc5MDMuNTE3OTA5ICAtPiAgLTIuMDMwMzk3NzM0Mjc4MDYxRSsxNiBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMjA0MDc3NDA5NDgxNC4wNzcNCitkZGZtYTAyMTcgIGZtYSAgICAgICAgNTY4OTAuMzg4NzMxICAgICAgMzU4NzIwMzAuNDI1NSAgICAgIDMzOTMzNy4xMjM0MTAgIC0+ICAyMDQwNzc0MDk0ODE0LjA3OCAgICAgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjcxNDQ2OTU3NTIwNTA0OUUrMTgNCitkZGZtYTAyMjAgIGZtYSAgICAgICA3NTMzNTQzLjU3NDQ1ICAgICAgIDM2MDMxNzc2MzkyOCAgICAgIDUwNzMzOTIuMzE2MzggIC0+ICAyLjcxNDQ2OTU3NTIwNTA1MEUrMTggIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNkUrMTkNCitkZGZtYTAyMjMgIGZtYSAgICAgICA3Mzk5NDUyNTUuNTYzICAgICAgMTM2NzIzMTI3ODQuMSAgICAgIC05OTQzODEuNTM1NzIgIC0+ICAxLjAxMTY3NjI5NzcxNjcxNUUrMTkgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtMi45MTQxMzU3MjE0NTUzMTVFKzIzDQorZGRmbWEwMjI0ICBmbWEgICAgICAgLTQxMzUxMDk1NzIxOCAgICAgICA3MDQ3Mjk5ODg1NTAgICAgICAgOTIzNDE2MjYxNC4wICAtPiAgLTIuOTE0MTM1NzIxNDU1MzE0RSsyMyBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMi42MjAxMTk4NjMzNjU3ODZFKzE3DQorZGRmbWEwMjI2ICBmbWEgICAgICAgIDQzNzQ4NC4wMDYwMSAgICAgICA1OTg5MDY0MzI3OTAgICAgICA4OTQ0NTA2MzguNDQyICAtPiAgMi42MjAxMTk4NjMzNjU3ODdFKzE3ICBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yNzI2NDc5OTU4MDgxNzhFKzE5DQorZGRmbWEwMjUzICBmbWEgICAgICAgICA3MzI4NzU1NjkyOSAgICAgIDE3MzY1MTMwNS43ODQgICAgIC0zNTgzMTI1NjguMzg5ICAtPiAgMS4yNzI2NDc5OTU4MDgxNzdFKzE5ICBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTEuNzUzNzY5MzIwODYxODUxRSsxOA0KK2RkZm1hMDI1NyAgZm1hICAgICAgICAyMDMyNTgzMDQ0ODYgICAgICAtODYyODI3OC44MDY2ICAgICAgMTUzMTI3LjQ0NjcyNyAgLT4gIC0xLjc1Mzc2OTMyMDg2MTg1MEUrMTggSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0xLjU1MDczNzgzNTI2MzM0NkUrMTcNCitkZGZtYTAyNjAgIGZtYSAgICAgICA0MjU2MDUzMy4xNzc0ICAgICAtMzY0MzYwNTI4Mi44NiAgICAgICAxNzgyNzcuOTYzNzcgIC0+ICAtMS41NTA3Mzc4MzUyNjMzNDdFKzE3IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNUUrMjINCitkZGZtYTAyNjkgIGZtYSAgICAgICAgMTQyNjU2NTg3Mzc1ICAgICAgIDIwMzExODg3OTY3MCAgICAgICA2MDQ1NzYxMDM5OTEgIC0+ICAyLjg5NzYyNDYyMDU3NjAwNEUrMjIgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIENhc2VzIHdoZXJlIG11bHRpcGx5IHdvdWxkIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBpZiBzZXBhcmF0ZQ0KK2ZtYTAzMDAgIGZtYSAgIDllKzM4NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1hMDMwMSAgZm1hICAgMWUrMzg0ICAgIDEwICAgMCAgICAgICAgIC0+IEluZmluaXR5ICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWEwMzAyICBmbWEgICAxZSszODQgICAgMTAgICAtMWUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KK2ZtYTAzMDMgIGZtYSAgIDFlKzM4NCAgICAxMCAgIC05ZSszODQgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQorLS0gc3Vibm9ybWFsIGV0Yy4NCitmbWEwMzA1ICBmbWEgICAxZS0zOTggICAgMC4xICAwICAgICAgICAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitmbWEwMzA2ICBmbWEgICAxZS0zOTggICAgMC4xICAxICAgICAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1hMDMwNyAgZm1hICAgMWUtMzk4ICAgIDAuMSAgMWUtMzk4ICAgIC0+IDFFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEluZmluaXRlIGNvbWJpbmF0aW9ucw0KK2RkZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCitkZGZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCitkZGZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24NCitkZGZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjINCitkZGZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCitkZGZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUNCistLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcNCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkNCitkZGZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZGRmbWEyMDAwIGZtYSAgMiAgICAgIDIgICAwZSszODQgIC0+ICA0DQorZGRmbWEyMDAxIGZtYSAgMiAgICAgIDMgICAwZSszODQgIC0+ICA2DQorZGRmbWEyMDAyIGZtYSAgNSAgICAgIDEgICAwZSszODQgIC0+ICA1DQorZGRmbWEyMDAzIGZtYSAgNSAgICAgIDIgICAwZSszODQgIC0+ICAxMA0KK2RkZm1hMjAwNCBmbWEgIDEuMjAgICAyICAgMGUrMzg0ICAtPiAgMi40MA0KK2RkZm1hMjAwNSBmbWEgIDEuMjAgICAwICAgMGUrMzg0ICAtPiAgMC4wMA0KK2RkZm1hMjAwNiBmbWEgIDEuMjAgIC0yICAgMGUrMzg0ICAtPiAgLTIuNDANCitkZGZtYTIwMDcgZm1hICAtMS4yMCAgMiAgIDBlKzM4NCAgLT4gIC0yLjQwDQorZGRmbWEyMDA4IGZtYSAgLTEuMjAgIDAgICAwZSszODQgIC0+ICAwLjAwDQorZGRmbWEyMDA5IGZtYSAgLTEuMjAgLTIgICAwZSszODQgIC0+ICAyLjQwDQorZGRmbWEyMDEwIGZtYSAgNS4wOSA3LjEgICAwZSszODQgIC0+ICAzNi4xMzkNCitkZGZtYTIwMTEgZm1hICAyLjUgICAgNCAgIDBlKzM4NCAgLT4gIDEwLjANCitkZGZtYTIwMTIgZm1hICAyLjUwICAgNCAgIDBlKzM4NCAgLT4gIDEwLjAwDQorZGRmbWEyMDEzIGZtYSAgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwICAgMGUrMzg0ICAtPiAgMS4yMzQ1Njc4OTAwMDAwMDAgUm91bmRlZA0KK2RkZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrMzg0ICAtPiAgMTAuMDANCitkZGZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjAxNyBmbWEgICA5Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgICAwZSszODQgIC0+ICAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyMDE4IGZtYSAgLTkuOTk5OTk5OTk5ICA5Ljk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5ICAgMGUrMzg0ICAtPiAgIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHplcm9zLCBldGMuDQorZGRmbWEyMDIxIGZtYSAgIDAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyMDIyIGZtYSAgIDAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyMDIzIGZtYSAgLTAgICAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyMDI0IGZtYSAgLTAgICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyMDI1IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyMDI2IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyMDI3IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyMDI4IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyMDMwIGZtYSAgIDUuMDAgICAxRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwDQorZGRmbWEyMDMxIGZtYSAgIDAwLjAwICAwLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwDQorZGRmbWEyMDMyIGZtYSAgIDAwLjAwICAwRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkZm1hMjAzMyBmbWEgICAwRS0zICAgMDAuMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCitkZGZtYTIwMzQgZm1hICAtNS4wMCAgIDFFLTMgICAgMGUrMzg0ICAtPiAgLTAuMDA1MDANCitkZGZtYTIwMzUgZm1hICAtMDAuMDAgIDAuMDAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDANCitkZGZtYTIwMzYgZm1hICAtMDAuMDAgIDBFLTMgICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQorZGRmbWEyMDM3IGZtYSAgLTBFLTMgICAwMC4wMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2RkZm1hMjAzOCBmbWEgICA1LjAwICAtMUUtMyAgICAwZSszODQgIC0+ICAtMC4wMDUwMA0KK2RkZm1hMjAzOSBmbWEgICAwMC4wMCAtMC4wMDAgICAwZSszODQgIC0+ICAgMC4wMDAwMA0KK2RkZm1hMjA0MCBmbWEgICAwMC4wMCAtMEUtMyAgICAwZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkZGZtYTIwNDEgZm1hICAgMEUtMyAgLTAwLjAwICAgMGUrMzg0ICAtPiAgIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZGRmbWEyMDQyIGZtYSAgLTUuMDAgIC0xRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwNTAwDQorZGRmbWEyMDQzIGZtYSAgLTAwLjAwIC0wLjAwMCAgIDBlKzM4NCAgLT4gICAwLjAwMDAwDQorZGRmbWEyMDQ0IGZtYSAgLTAwLjAwIC0wRS0zICAgIDBlKzM4NCAgLT4gICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkZm1hMjA0NSBmbWEgIC0wRS0zICAtMDAuMDAgIC0wZSszODQgIC0+ICAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCitkZGZtYTIwNDYgZm1hICAtMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDANCitkZGZtYTIwNDcgZm1hICAgMEUtMyAgLTAwLjAwICAtMGUrMzg0ICAtPiAgLTAuMDAwMDANCitkZGZtYTIwNDggZm1hICAgMEUtMyAgIDAwLjAwICAtMGUrMzg0ICAtPiAgIDAuMDAwMDANCisNCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQorZGRmbWEyMDUwIGZtYSAgMS4yMCAzICAgICAgICAgIDBlKzM4NCAgLT4gIDMuNjANCitkZGZtYTIwNTEgZm1hICA3ICAgIDMgICAgICAgICAgMGUrMzg0ICAtPiAgMjENCitkZGZtYTIwNTIgZm1hICAwLjkgIDAuOCAgICAgICAgMGUrMzg0ICAtPiAgMC43Mg0KK2RkZm1hMjA1MyBmbWEgIDAuOSAgLTAgICAgICAgICAwZSszODQgIC0+ICAwLjANCitkZGZtYTIwNTQgZm1hICA2NTQzMjEgNjU0MzIxICAgMGUrMzg0ICAtPiAgNDI4MTM1OTcxMDQxDQorDQorZGRmbWEyMDYwIGZtYSAgMTIzLjQ1IDFlNyAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSs5DQorZGRmbWEyMDYxIGZtYSAgMTIzLjQ1IDFlOCAgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMA0KK2RkZm1hMjA2MiBmbWEgIDEyMy40NSAxZSs5ICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTENCitkZGZtYTIwNjMgZm1hICAxMjMuNDUgMWUxMCAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzEyDQorZGRmbWEyMDY0IGZtYSAgMTIzLjQ1IDFlMTEgICAwZSszODQgIC0+ICAgMS4yMzQ1RSsxMw0KK2RkZm1hMjA2NSBmbWEgIDEyMy40NSAxZTEyICAgMGUrMzg0ICAtPiAgIDEuMjM0NUUrMTQNCitkZGZtYTIwNjYgZm1hICAxMjMuNDUgMWUxMyAgIDBlKzM4NCAgLT4gICAxLjIzNDVFKzE1DQorDQorDQorLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQorLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZGZtYTIwODAgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQ0KK2RkZm1hMjA4NCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzM4NCAgLT4gIDEyMzAxMjM0NTY0NTY3OC45DQorZGRmbWEyMDkwIGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrMzg0ICAtPiAgMTIzMDEyMzQ1NjQ1Njc4LjkNCitkZGZtYTIwOTQgZm1hICAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgICAwZSszODQgIC0+ICAxMjMwMTIzNDU2NDU2NzguOQ0KKw0KKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMNCitkZGZtYTIxMDEgZm1hICA5IDkgICAgIDBlKzM4NCAgLT4gIDgxDQorZGRmbWEyMTAyIGZtYSAgOSA5MCAgICAgMGUrMzg0ICAtPiAgODEwDQorZGRmbWEyMTAzIGZtYSAgOSA5MDAgICAgIDBlKzM4NCAgLT4gIDgxMDANCitkZGZtYTIxMDQgZm1hICA5IDkwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwDQorZGRmbWEyMTA1IGZtYSAgOSA5MDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwDQorZGRmbWEyMTA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDANCitkZGZtYTIxMDcgZm1hICA5IDkwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwDQorZGRmbWEyMTA4IGZtYSAgOSA5MDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwDQorZGRmbWEyMTA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDANCitkZGZtYTIxMTAgZm1hICA5IDkwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwDQorZGRmbWEyMTExIGZtYSAgOSA5MDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwDQorZGRmbWEyMTEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDANCitkZGZtYTIxMTMgZm1hICA5IDkwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwDQorZGRmbWEyMTE0IGZtYSAgOSA5MDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwDQorZGRmbWEyMTE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjExNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjExNyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMA0KKy0tZGRmbWEyMTE4IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjExOSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjEyMCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tZGRmbWEyMTIxIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjEyMiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCistLWRkZm1hMjEyMyBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzDQorZGRmbWEyMTMxIGZtYSAgMyAzICAgICAwZSszODQgIC0+ICA5DQorZGRmbWEyMTMyIGZtYSAgMyAzMCAgICAgMGUrMzg0ICAtPiAgOTANCitkZGZtYTIxMzMgZm1hICAzIDMwMCAgICAgMGUrMzg0ICAtPiAgOTAwDQorZGRmbWEyMTM0IGZtYSAgMyAzMDAwICAgICAwZSszODQgIC0+ICA5MDAwDQorZGRmbWEyMTM1IGZtYSAgMyAzMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDANCitkZGZtYTIxMzYgZm1hICAzIDMwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwDQorZGRmbWEyMTM3IGZtYSAgMyAzMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwDQorZGRmbWEyMTM4IGZtYSAgMyAzMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDANCitkZGZtYTIxMzkgZm1hICAzIDMwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwDQorZGRmbWEyMTQwIGZtYSAgMyAzMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwDQorZGRmbWEyMTQxIGZtYSAgMyAzMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDANCitkZGZtYTIxNDIgZm1hICAzIDMwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwDQorZGRmbWEyMTQzIGZtYSAgMyAzMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA5MDAwMDAwMDAwMDAwDQorZGRmbWEyMTQ0IGZtYSAgMyAzMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDANCitkZGZtYTIxNDUgZm1hICAzIDMwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOTAwMDAwMDAwMDAwMDAwDQorDQorLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZw0KK2RkZm1hMjMwMSBmbWEgIDkgOSAgICAgMGUrMzg0ICAtPiAgODENCitkZGZtYTIzMDIgZm1hICA5IDkwICAgICAwZSszODQgIC0+ICA4MTANCitkZGZtYTIzMDMgZm1hICA5IDkwMCAgICAgMGUrMzg0ICAtPiAgODEwMA0KK2RkZm1hMjMwNCBmbWEgIDkgOTAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDANCitkZGZtYTIzMDUgZm1hICA5IDkwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDANCitkZGZtYTIzMDYgZm1hICA5IDkwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMA0KK2RkZm1hMjMwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDANCitkZGZtYTIzMDggZm1hICA5IDkwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDANCitkZGZtYTIzMDkgZm1hICA5IDkwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMA0KK2RkZm1hMjMxMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDANCitkZGZtYTIzMTEgZm1hICA5IDkwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDANCitkZGZtYTIzMTIgZm1hICA5IDkwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMA0KK2RkZm1hMjMxMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDANCitkZGZtYTIzMTQgZm1hICA5IDkwMDAwMDAwMDAwMDAwICAgICAwZSszODQgIC0+ICA4MTAwMDAwMDAwMDAwMDANCitkZGZtYTIzMTUgZm1hICA5IDkwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgODEwMDAwMDAwMDAwMDAwMA0KK2RkZm1hMjMxNiBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQorZGRmbWEyMzE3IGZtYSAgOTAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkDQorZGRmbWEyMzE4IGZtYSAgOTAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsxOCAgUm91bmRlZA0KK2RkZm1hMjMxOSBmbWEgIDkwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkDQorZGRmbWEyMzIwIGZtYSAgOTAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIwICBSb3VuZGVkDQorZGRmbWEyMzIxIGZtYSAgOTAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzM4NCAgLT4gIDguMTAwMDAwMDAwMDAwMDAwRSsyMSAgUm91bmRlZA0KK2RkZm1hMjMyMiBmbWEgIDkwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkDQorZGRmbWEyMzIzIGZtYSAgOTAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrMzg0ICAtPiAgOC4xMDAwMDAwMDAwMDAwMDBFKzIzICBSb3VuZGVkDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCitkZGZtYTI1MDQgIGZtYSAgIDBFLTI2MCAxMDAwRS0yNjAgICAgMGUrMzg0ICAtPiAgMEUtMzk4IENsYW1wZWQNCitkZGZtYTI1MDUgIGZtYSAgIDEwMEUrMjYwIDBFKzI2MCAgICAgMGUrMzg0ICAtPiAgMEUrMzY5IENsYW1wZWQNCisNCistLSBtaXhlZCB3aXRoIHplcm9zDQorZGRmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrMzg0ICAtPiAgIDANCitkZGZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSszODQgIC0+ICAgMA0KK2RkZm1hMjU0MyBmbWEgICAwICAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDANCitkZGZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSszODQgIC0+ICAgMA0KK2RkZm1hMjU0NiBmbWEgIC0xICAgIC0wICAgICAgIDBlKzM4NCAgLT4gICAwDQorZGRmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrMzg0ICAtPiAgIDANCitkZGZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSszODQgIC0+ICAgMA0KKw0KK2RkZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzM4NCAgLT4gICAwLjANCitkZGZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSszODQgIC0+ICAgMC4wDQorZGRmbWEyNTUzIGZtYSAgIDAuMCAgIDEgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KK2RkZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzM4NCAgLT4gICAwLjANCitkZGZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSszODQgIC0+ICAgMC4wDQorZGRmbWEyNTU2IGZtYSAgLTEuMCAgLTAgICAgICAgMGUrMzg0ICAtPiAgIDAuMA0KK2RkZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzM4NCAgLT4gICAwLjANCitkZGZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSszODQgIC0+ICAgMC4wDQorDQorZGRmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KK2RkZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCitkZGZtYTI1NjMgZm1hICAgMCAgICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wDQorZGRmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KK2RkZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCitkZGZtYTI1NjYgZm1hICAtMSAgICAtMC4wICAgICAwZSszODQgIC0+ICAgMC4wDQorZGRmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMA0KK2RkZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjANCisNCitkZGZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KK2RkZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyNTczIGZtYSAgIDAuMCAgIDEuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCitkZGZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KK2RkZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorZGRmbWEyNTc2IGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrMzg0ICAtPiAgIDAuMDANCitkZGZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSszODQgIC0+ICAgMC4wMA0KK2RkZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzM4NCAgLT4gICAwLjAwDQorDQorLS0gU3BlY2lhbHMNCitkZGZtYTI1ODAgZm1hICAgSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI1ODEgZm1hICAgSW5mICAtMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI1ODIgZm1hICAgSW5mICAtMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI1ODMgZm1hICAgSW5mICAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjU4NCBmbWEgICBJbmYgICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNTg1IGZtYSAgIEluZiAgIDEgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQorZGRmbWEyNTg2IGZtYSAgIEluZiAgIDEwMDAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQorZGRmbWEyNTg3IGZtYSAgIEluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5DQorZGRmbWEyNTg4IGZtYSAgLTEwMDAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorZGRmbWEyNTg5IGZtYSAgLUluZiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorZGRmbWEyNTkwIGZtYSAgLTEgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorZGRmbWEyNTkxIGZtYSAgLTAgICAgIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI1OTIgZm1hICAgMCAgICAgSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjU5MyBmbWEgICAxICAgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KK2RkZm1hMjU5NCBmbWEgICAxMDAwICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KK2RkZm1hMjU5NSBmbWEgICBJbmYgICBJbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KKw0KK2RkZm1hMjYwMCBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KK2RkZm1hMjYwMSBmbWEgIC1JbmYgIC0xMDAwICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KK2RkZm1hMjYwMiBmbWEgIC1JbmYgIC0xICAgICAgIDBlKzM4NCAgLT4gICBJbmZpbml0eQ0KK2RkZm1hMjYwMyBmbWEgIC1JbmYgIC0wICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjA0IGZtYSAgLUluZiAgIDAgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2MDUgZm1hICAtSW5mICAgMSAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI2MDYgZm1hICAtSW5mICAgMTAwMCAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI2MDcgZm1hICAtSW5mICAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI2MDggZm1hICAtMTAwMCAgSW5mICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkNCitkZGZtYTI2MDkgZm1hICAtSW5mICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCitkZGZtYTI2MTAgZm1hICAtMSAgICAtSW5mICAgICAwZSszODQgIC0+ICAgSW5maW5pdHkNCitkZGZtYTI2MTEgZm1hICAtMCAgICAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjYxMiBmbWEgICAwICAgIC1JbmYgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjEzIGZtYSAgIDEgICAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorZGRmbWEyNjE0IGZtYSAgIDEwMDAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorZGRmbWEyNjE1IGZtYSAgIEluZiAgLUluZiAgICAgMGUrMzg0ICAtPiAgLUluZmluaXR5DQorDQorZGRmbWEyNjIxIGZtYSAgIE5hTiAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYyMiBmbWEgICBOYU4gLTEwMDAgICAgIDBlKzM4NCAgLT4gICBOYU4NCitkZGZtYTI2MjMgZm1hICAgTmFOIC0xICAgICAgICAwZSszODQgIC0+ICAgTmFODQorZGRmbWEyNjI0IGZtYSAgIE5hTiAtMCAgICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYyNSBmbWEgICBOYU4gIDAgICAgICAgIDBlKzM4NCAgLT4gICBOYU4NCitkZGZtYTI2MjYgZm1hICAgTmFOICAxICAgICAgICAwZSszODQgIC0+ICAgTmFODQorZGRmbWEyNjI3IGZtYSAgIE5hTiAgMTAwMCAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYyOCBmbWEgICBOYU4gIEluZiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCitkZGZtYTI2MjkgZm1hICAgTmFOICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQorZGRmbWEyNjMwIGZtYSAgLUluZiAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYzMSBmbWEgIC0xMDAwIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCitkZGZtYTI2MzIgZm1hICAtMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQorZGRmbWEyNjMzIGZtYSAgLTAgICAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYzNCBmbWEgICAwICAgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCitkZGZtYTI2MzUgZm1hICAgMSAgICBOYU4gICAgICAwZSszODQgIC0+ICAgTmFODQorZGRmbWEyNjM2IGZtYSAgIDEwMDAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTg0KK2RkZm1hMjYzNyBmbWEgICBJbmYgIE5hTiAgICAgIDBlKzM4NCAgLT4gICBOYU4NCisNCitkZGZtYTI2NDEgZm1hICAgc05hTiAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY0MiBmbWEgICBzTmFOIC0xMDAwICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjQzIGZtYSAgIHNOYU4gLTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NDQgZm1hICAgc05hTiAtMCAgICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY0NSBmbWEgICBzTmFOICAwICAgICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjQ2IGZtYSAgIHNOYU4gIDEgICAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NDcgZm1hICAgc05hTiAgMTAwMCAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY0OCBmbWEgICBzTmFOICBOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjQ5IGZtYSAgIHNOYU4gc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NTAgZm1hICAgTmFOICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY1MSBmbWEgIC1JbmYgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjUyIGZtYSAgLTEwMDAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NTMgZm1hICAtMSAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY1NCBmbWEgIC0wICAgIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjU1IGZtYSAgIDAgICAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NTYgZm1hICAgMSAgICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY1NyBmbWEgICAxMDAwIHNOYU4gICAgIDBlKzM4NCAgLT4gICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjU4IGZtYSAgIEluZiAgc05hTiAgICAgMGUrMzg0ICAtPiAgIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI2NTkgZm1hICAgTmFOICBzTmFOICAgICAwZSszODQgIC0+ICAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZGZtYTI2NjEgZm1hICAgTmFOOSAtSW5mICAgICAwZSszODQgIC0+ICAgTmFOOQ0KK2RkZm1hMjY2MiBmbWEgICBOYU44ICA5OTkgICAgIDBlKzM4NCAgLT4gICBOYU44DQorZGRmbWEyNjYzIGZtYSAgIE5hTjcxIEluZiAgICAgMGUrMzg0ICAtPiAgIE5hTjcxDQorZGRmbWEyNjY0IGZtYSAgIE5hTjYgIE5hTjUgICAgMGUrMzg0ICAtPiAgIE5hTjYNCitkZGZtYTI2NjUgZm1hICAtSW5mICAgTmFONCAgICAwZSszODQgIC0+ICAgTmFONA0KK2RkZm1hMjY2NiBmbWEgIC05OTkgICBOYU4zMyAgIDBlKzM4NCAgLT4gICBOYU4zMw0KK2RkZm1hMjY2NyBmbWEgICBJbmYgICBOYU4yICAgIDBlKzM4NCAgLT4gICBOYU4yDQorDQorZGRmbWEyNjcxIGZtYSAgIHNOYU45OSAtSW5mICAgICAgMGUrMzg0ICAtPiAgIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjcyIGZtYSAgIHNOYU45OCAtMTEgICAgICAgMGUrMzg0ICAtPiAgIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjczIGZtYSAgIHNOYU45NyAgTmFOICAgICAgMGUrMzg0ICAtPiAgIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc0IGZtYSAgIHNOYU4xNiBzTmFOOTQgICAgMGUrMzg0ICAtPiAgIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc1IGZtYSAgIE5hTjk1ICBzTmFOOTMgICAgMGUrMzg0ICAtPiAgIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc2IGZtYSAgLUluZiAgICBzTmFOOTIgICAgMGUrMzg0ICAtPiAgIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc3IGZtYSAgIDA4OCAgICBzTmFOOTEgICAgMGUrMzg0ICAtPiAgIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc4IGZtYSAgIEluZiAgICBzTmFOOTAgICAgMGUrMzg0ICAtPiAgIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNjc5IGZtYSAgIE5hTiAgICBzTmFOODkgICAgMGUrMzg0ICAtPiAgIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRmbWEyNjgxIGZtYSAgLU5hTjkgLUluZiAgICAgMGUrMzg0ICAtPiAgLU5hTjkNCitkZGZtYTI2ODIgZm1hICAtTmFOOCAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFOOA0KK2RkZm1hMjY4MyBmbWEgIC1OYU43MSBJbmYgICAgIDBlKzM4NCAgLT4gIC1OYU43MQ0KK2RkZm1hMjY4NCBmbWEgIC1OYU42IC1OYU41ICAgIDBlKzM4NCAgLT4gIC1OYU42DQorZGRmbWEyNjg1IGZtYSAgLUluZiAgLU5hTjQgICAgMGUrMzg0ICAtPiAgLU5hTjQNCitkZGZtYTI2ODYgZm1hICAtOTk5ICAtTmFOMzMgICAwZSszODQgIC0+ICAtTmFOMzMNCitkZGZtYTI2ODcgZm1hICAgSW5mICAtTmFOMiAgICAwZSszODQgIC0+ICAtTmFOMg0KKw0KK2RkZm1hMjY5MSBmbWEgIC1zTmFOOTkgLUluZiAgICAgIDBlKzM4NCAgLT4gIC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5MiBmbWEgIC1zTmFOOTggLTExICAgICAgIDBlKzM4NCAgLT4gIC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5MyBmbWEgIC1zTmFOOTcgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5NCBmbWEgIC1zTmFOMTYgLXNOYU45NCAgIDBlKzM4NCAgLT4gIC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5NSBmbWEgIC1OYU45NSAgLXNOYU45MyAgIDBlKzM4NCAgLT4gIC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5NiBmbWEgIC1JbmYgICAgLXNOYU45MiAgIDBlKzM4NCAgLT4gIC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5NyBmbWEgICAwODggICAgLXNOYU45MSAgIDBlKzM4NCAgLT4gIC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5OCBmbWEgICBJbmYgICAgLXNOYU45MCAgIDBlKzM4NCAgLT4gIC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjY5OSBmbWEgIC1OYU4gICAgLXNOYU44OSAgIDBlKzM4NCAgLT4gIC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkZm1hMjcwMSBmbWEgIC1OYU4gIC1JbmYgICAgIDBlKzM4NCAgLT4gIC1OYU4NCitkZGZtYTI3MDIgZm1hICAtTmFOICAgOTk5ICAgICAwZSszODQgIC0+ICAtTmFODQorZGRmbWEyNzAzIGZtYSAgLU5hTiAgIEluZiAgICAgMGUrMzg0ICAtPiAgLU5hTg0KK2RkZm1hMjcwNCBmbWEgIC1OYU4gIC1OYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4NCitkZGZtYTI3MDUgZm1hICAtSW5mICAtTmFOMCAgICAwZSszODQgIC0+ICAtTmFODQorZGRmbWEyNzA2IGZtYSAgLTk5OSAgLU5hTiAgICAgMGUrMzg0ICAtPiAgLU5hTg0KK2RkZm1hMjcwNyBmbWEgICBJbmYgIC1OYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4NCisNCitkZGZtYTI3MTEgZm1hICAtc05hTiAgIC1JbmYgICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNzEyIGZtYSAgLXNOYU4gICAtMTEgICAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjcxMyBmbWEgIC1zTmFOMDAgIE5hTiAgICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI3MTQgZm1hICAtc05hTiAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNzE1IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjcxNiBmbWEgIC1JbmYgICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI3MTcgZm1hICAgMDg4ICAgIC1zTmFOICAgICAwZSszODQgIC0+ICAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEyNzE4IGZtYSAgIEluZiAgICAtc05hTiAgICAgMGUrMzg0ICAtPiAgLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMjcxOSBmbWEgIC1OYU4gICAgLXNOYU4gICAgIDBlKzM4NCAgLT4gIC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCistLSBzaWducw0KK2RkZm1hMjc1MSBmbWEgICAxZSsyNzcgIDFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI3NTIgZm1hICAgMWUrMjc3IC0xZSszMTEgICAwZSszODQgIC0+ICAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzUzIGZtYSAgLTFlKzI3NyAgMWUrMzExICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjc1NCBmbWEgIC0xZSsyNzcgLTFlKzMxMSAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI3NTUgZm1hICAgMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGZtYTI3NTYgZm1hICAgMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGZtYTI3NTcgZm1hICAtMWUtMjc3ICAxZS0zMTEgICAwZSszODQgIC0+ICAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGZtYTI3NTggZm1hICAtMWUtMjc3IC0xZS0zMTEgICAwZSszODQgIC0+ICAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCitkZGZtYTI3NjAgZm1hICAxZS0yOTEgMWUtMTAxICAgMGUrMzg0ICAtPiAgMUUtMzkyIFN1Ym5vcm1hbA0KK2RkZm1hMjc2MSBmbWEgIDFlLTI5MSAxZS0xMDIgICAwZSszODQgIC0+ICAxRS0zOTMgU3Vibm9ybWFsDQorZGRmbWEyNzYyIGZtYSAgMWUtMjkxIDFlLTEwMyAgIDBlKzM4NCAgLT4gIDFFLTM5NCBTdWJub3JtYWwNCitkZGZtYTI3NjMgZm1hICAxZS0yOTEgMWUtMTA0ICAgMGUrMzg0ICAtPiAgMUUtMzk1IFN1Ym5vcm1hbA0KK2RkZm1hMjc2NCBmbWEgIDFlLTI5MSAxZS0xMDUgICAwZSszODQgIC0+ICAxRS0zOTYgU3Vibm9ybWFsDQorZGRmbWEyNzY1IGZtYSAgMWUtMjkxIDFlLTEwNiAgIDBlKzM4NCAgLT4gIDFFLTM5NyBTdWJub3JtYWwNCitkZGZtYTI3NjYgZm1hICAxZS0yOTEgMWUtMTA3ICAgMGUrMzg0ICAtPiAgMUUtMzk4IFN1Ym5vcm1hbA0KK2RkZm1hMjc2NyBmbWEgIDFlLTI5MSAxZS0xMDggICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZm1hMjc2OCBmbWEgIDFlLTI5MSAxZS0xMDkgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZm1hMjc2OSBmbWEgIDFlLTI5MSAxZS0xMTAgICAwZSszODQgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCitkZGZtYTI3NzAgZm1hICAxZSs2MCAxZSszMjEgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkDQorZGRmbWEyNzcxIGZtYSAgMWUrNjAgMWUrMzIyICAgMGUrMzg0ICAtPiAgMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQNCitkZGZtYTI3NzIgZm1hICAxZSs2MCAxZSszMjMgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQNCitkZGZtYTI3NzMgZm1hICAxZSs2MCAxZSszMjQgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkDQorZGRmbWEyNzc0IGZtYSAgMWUrNjAgMWUrMzI1ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzc1IGZtYSAgMWUrNjAgMWUrMzI2ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzc2IGZtYSAgMWUrNjAgMWUrMzI3ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzc3IGZtYSAgMWUrNjAgMWUrMzI4ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzc4IGZtYSAgMWUrNjAgMWUrMzI5ICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyNzc5IGZtYSAgMWUrNjAgMWUrMzMwICAgMGUrMzg0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEyODAxIGZtYSAgIDEuMDAwMEUtMzk0ICAxICAgICAgIDBlKzM4NCAgLT4gIDEuMDAwMEUtMzk0IFN1Ym5vcm1hbA0KK2RkZm1hMjgwMiBmbWEgICAxLjAwMEUtMzk0ICAgMWUtMSAgICAwZSszODQgIC0+ICAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCitkZGZtYTI4MDMgZm1hICAgMS4wMEUtMzk0ICAgIDFlLTIgICAgMGUrMzg0ICAtPiAgMS4wMEUtMzk2ICAgU3Vibm9ybWFsDQorZGRmbWEyODA0IGZtYSAgIDEuMEUtMzk0ICAgICAxZS0zICAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KK2RkZm1hMjgwNSBmbWEgICAxLjBFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRmbWEyODA2IGZtYSAgIDEuM0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI4MDcgZm1hICAgMS41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgwOCBmbWEgICAxLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyODA5IGZtYSAgIDIuM0UtMzk0ICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI4MTAgZm1hICAgMi41RS0zOTQgICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgxMSBmbWEgICAyLjdFLTM5NCAgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyODEyIGZtYSAgIDEuNDlFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI4MTMgZm1hICAgMS41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgxNCBmbWEgICAxLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyODE1IGZtYSAgIDIuNDlFLTM5NCAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI4MTYgZm1hICAgMi41MEUtMzk0ICAgIDFlLTQgICAgMGUrMzg0ICAtPiAgMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgxNyBmbWEgICAyLjUxRS0zOTQgICAgMWUtNCAgICAwZSszODQgIC0+ICAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEyODE4IGZtYSAgIDFFLTM5NCAgICAgICAxZS00ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgU3Vibm9ybWFsDQorZGRmbWEyODE5IGZtYSAgIDNFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDBFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZm1hMjgyMCBmbWEgICA1RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZGZtYTI4MjEgZm1hICAgN0UtMzk0ICAgICAgIDFlLTUgICAgMGUrMzg0ICAtPiAgMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgyMiBmbWEgICA5RS0zOTQgICAgICAgMWUtNSAgICAwZSszODQgIC0+ICAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyODIzIGZtYSAgIDkuOUUtMzk0ICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTI4MjQgZm1hICAgMUUtMzk0ICAgICAgLTFlLTQgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBTdWJub3JtYWwNCitkZGZtYTI4MjUgZm1hICAgM0UtMzk0ICAgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRmbWEyODI2IGZtYSAgLTVFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkZm1hMjgyNyBmbWEgICA3RS0zOTQgICAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEyODI4IGZtYSAgLTlFLTM5NCAgICAgICAxZS01ICAgIDBlKzM4NCAgLT4gIC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTI4MjkgZm1hICAgOS45RS0zOTQgICAgLTFlLTUgICAgMGUrMzg0ICAtPiAgLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMjgzMCBmbWEgICAzLjBFLTM5NCAgICAtMWUtNSAgICAwZSszODQgIC0+ICAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCitkZGZtYTI4MzEgZm1hICAgMS4wRS0xOTkgICAgIDFlLTIwMCAgIDBlKzM4NCAgLT4gIDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRmbWEyODMyIGZtYSAgIDEuMEUtMTk5ICAgICAxZS0xOTkgICAwZSszODQgIC0+ICAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkZGZtYTI4MzMgZm1hICAgMS4wRS0xOTkgICAgIDFlLTE5OCAgIDBlKzM4NCAgLT4gIDEuMEUtMzk3ICAgIFN1Ym5vcm1hbA0KK2RkZm1hMjgzNCBmbWEgICAyLjBFLTE5OSAgICAgMmUtMTk4ICAgMGUrMzg0ICAtPiAgNC4wRS0zOTcgICAgU3Vibm9ybWFsDQorZGRmbWEyODM1IGZtYSAgIDQuMEUtMTk5ICAgICA0ZS0xOTggICAwZSszODQgIC0+ICAxLjYwRS0zOTYgICBTdWJub3JtYWwNCitkZGZtYTI4MzYgZm1hICAxMC4wRS0xOTkgICAgMTBlLTE5OCAgIDBlKzM4NCAgLT4gIDEuMDAwRS0zOTUgIFN1Ym5vcm1hbA0KK2RkZm1hMjgzNyBmbWEgIDMwLjBFLTE5OSAgICAzMGUtMTk4ICAgMGUrMzg0ICAtPiAgOS4wMDBFLTM5NSAgU3Vibm9ybWFsDQorZGRmbWEyODM4IGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODggICAwZSszODQgIC0+ICAxLjYwMDBFLTM4NCBTdWJub3JtYWwNCitkZGZtYTI4MzkgZm1hICA0MC4wRS0xOTkgICAgNDBlLTE4NyAgIDBlKzM4NCAgLT4gIDEuNjAwMEUtMzgzDQorZGRmbWEyODQwIGZtYSAgNDAuMEUtMTk5ICAgIDQwZS0xODYgICAwZSszODQgIC0+ICAxLjYwMDBFLTM4Mg0KKw0KKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KK2RkZm1hMjg3MCBmbWEgIDEwMCAgOS45OTlFKzM4MyAgICAgICAgICAgMGUrMzg0ICAtPiAgIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2RkZm1hMjg3MSBmbWEgIDEwMCAtOS45OTlFKzM4MyAgICAgICAwZSszODQgIC0+ICAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZGRmbWEyODcyIGZtYSAgICAgICA5Ljk5OUUrMzgzIDEwMCAgIDBlKzM4NCAgLT4gICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitkZGZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSszODMgMTAwICAgMGUrMzg0ICAtPiAgLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQorZGRmbWEyODgxIGZtYSAgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgICAgMGUrMzg0ICAtPiAgIDEuNTI0RS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkZGZtYTI4ODIgZm1hICAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgICAwZSszODQgIC0+ICAgMS41MjNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RkZm1hMjg4MyBmbWEgICAxLjIzRS0zNTUgIDEuMjNFLTQwICAgICAgIDBlKzM4NCAgLT4gICAxLjUxM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODg0IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NSAgU3Vibm9ybWFsDQorZGRmbWEyODg1IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgICAgMGUrMzg0ICAtPiAgIDEuNDRFLTM5NiAgU3Vibm9ybWFsDQorZGRmbWEyODg2IGZtYSAgIDEuMkUtMzU1ICAgMS4yRS00MiAgICAgICAgMGUrMzg0ICAtPiAgIDEuNEUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZGZtYTI4ODcgZm1hICAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgICAwZSszODQgIC0+ICAgMS42RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2RkZm1hMjg4OCBmbWEgICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAgIDBlKzM4NCAgLT4gICAxLjdFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZGRmbWEyODg5IGZtYSAgIDEuM0UtMzU1ICAgMS4zRS00MyAgICAgICAgMGUrMzg0ICAtPiAgICAgMkUtMzk4ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZGZtYTI4OTAgZm1hICAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgICAwZSszODQgIC0+ICAgICAwRS0zOTggICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorDQorZGRmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODk0IGZtYSAgIDEuMjM0NTZFLTQwICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODk1IGZtYSAgIDEuMjM0NUUtNDEgICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1ICAgMGUrMzg0ICAtPiAgIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorDQorLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdw0KK2RkZm1hMjkwMCBmbWEgICAwLjMwMDAwMDAwMDBFLTE5MSAwLjMwMDAwMDAwMDBFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZA0KK2RkZm1hMjkwMSBmbWEgICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgIDBlKzM4NCAgLT4gIDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkZm1hMjkwMiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkZm1hMjkwMyBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkZm1hMjkwNCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkZm1hMjkwNSBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KK2RkZm1hMjkwNiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMNCitkZGZtYTI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAwLjA5OTk5OTk5OTk5OTk5OTk5DQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4NCitkZGZtYTI5MDggZm1hICAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSszODQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gaHVnZXN0DQorZGRmbWEyOTA5IGZtYSAgIDk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OSAgIDBlKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszMSBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBOdWxsIHRlc3RzDQorZGRmbWEyOTkwIGZtYSAgMTAgICMgICAwZSszODQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTI5OTEgZm1hICAgIyAxMCAgIDBlKzM4NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KK2RkZm1hMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMg0KK2RkZm1hMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KK2RkZm1hMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KK2RkZm1hMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMg0KK2RkZm1hMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgNCitkZGZtYTMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCitkZGZtYTMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KK2RkZm1hMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KK2RkZm1hMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KK2RkZm1hMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KKw0KKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZGRmbWEzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KK2RkZm1hMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5Jw0KK2RkZm1hMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTMwMjEgZm1hICAxICAwIDEgLT4gMQ0KK2RkZm1hMzAyMiBmbWEgIDEgIDEgMSAtPiAyDQorZGRmbWEzMDIzIGZtYSAgMSAgMiAxIC0+IDMNCitkZGZtYTMwMjQgZm1hICAxICAzIDEgLT4gNA0KK2RkZm1hMzAyNSBmbWEgIDEgIDQgMSAtPiA1DQorZGRmbWEzMDI2IGZtYSAgMSAgNSAxIC0+IDYNCitkZGZtYTMwMjcgZm1hICAxICA2IDEgLT4gNw0KK2RkZm1hMzAyOCBmbWEgIDEgIDcgMSAtPiA4DQorZGRmbWEzMDI5IGZtYSAgMSAgOCAxIC0+IDkNCitkZGZtYTMwMzAgZm1hICAxICA5IDEgLT4gMTANCisNCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCitkZGZtYTMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCitkZGZtYTMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCitkZGZtYTMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCitkZGZtYTMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCisNCitkZGZtYTMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDFFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KKw0KKy0tIHN5bW1ldHJ5Og0KK2RkZm1hMzA0MCBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzA0MSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMwNDIgZm1hICAxICAnMTAwMDBlKzE2JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzA0NCBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzA0NSBmbWEgIDEgICcxMDAwMGUrMTYnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQorDQorLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KK2RkZm1hMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQorZGRmbWEzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQorZGRmbWEzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KK2RkZm1hMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQorZGRmbWEzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQorZGRmbWEzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KK2RkZm1hMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KK2RkZm1hMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCitkZGZtYTMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KK2RkZm1hMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQorZGRmbWEzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQorZGRmbWEzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCisNCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQorZGRmbWEzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KK2RkZm1hMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KK2RkZm1hMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQorZGRmbWEzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KK2RkZm1hMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitkZGZtYTMwNzAgZm1hICAxICAxICAwICAgIC0+IDENCitkZGZtYTMwNzEgZm1hICAxICAxIDAuICAgIC0+IDENCitkZGZtYTMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMA0KK2RkZm1hMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wDQorZGRmbWEzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwDQorZGRmbWEzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxDQorZGRmbWEzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxDQorZGRmbWEzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjANCitkZGZtYTMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMA0KK2RkZm1hMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMA0KKw0KKy0tIHNvbWUgY2Fycmllcw0KK2RkZm1hMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCitkZGZtYTMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KK2RkZm1hMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCitkZGZtYTMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDANCitkZGZtYTMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KK2RkZm1hMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDANCitkZGZtYTMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDANCitkZGZtYTMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMA0KK2RkZm1hMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDANCitkZGZtYTMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTANCisNCisNCistLSBtb3JlIExIUyBzd2Fwcw0KK2RkZm1hMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KK2RkZm1hMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQorZGRmbWEzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KK2RkZm1hMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KK2RkZm1hMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KK2RkZm1hMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KK2RkZm1hMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KK2RkZm1hMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQorZGRmbWEzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCitkZGZtYTMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQorZGRmbWEzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCitkZGZtYTMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQorZGRmbWEzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQorZGRmbWEzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQorZGRmbWEzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KK2RkZm1hMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQorZGRmbWEzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQorZGRmbWEzMTA3IGZtYSAgMSAgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KK2RkZm1hMzEwOCBmbWEgIDEgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZA0KK2RkZm1hMzEwOSBmbWEgIDEgICctNUUxNycgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgUm91bmRlZA0KK2RkZm1hMzExMCBmbWEgIDEgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZA0KK2RkZm1hMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KKw0KKy0tIG1vcmUgUkhTIHN3YXBzDQorZGRmbWEzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCitkZGZtYTMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQorZGRmbWEzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQorZGRmbWEzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCitkZGZtYTMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KK2RkZm1hMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQorZGRmbWEzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCitkZGZtYTMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQorZGRmbWEzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KK2RkZm1hMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KK2RkZm1hMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCitkZGZtYTMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCitkZGZtYTMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KK2RkZm1hMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQorZGRmbWEzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQorZGRmbWEzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KK2RkZm1hMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQorZGRmbWEzMTMyIGZtYSAgMSAgMCAgJy01RTE1JyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQorZGRmbWEzMTMzIGZtYSAgMSAgMCAgJy01RTE2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkDQorZGRmbWEzMTM0IGZtYSAgMSAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQorZGRmbWEzMTM1IGZtYSAgMSAgMCAgJy01RTE4JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQorZGRmbWEzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQorDQorLS0gcmVsYXRlZA0KK2RkZm1hMzEzNyBmbWEgIDEgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCitkZGZtYTMxMzggZm1hICAxICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZGRmbWEzMTM5IGZtYSAgMSAgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KK2RkZm1hMzE0MCBmbWEgIDEgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitkZGZtYTMxNDEgZm1hICAxICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnDQorZGRmbWEzMTQyIGZtYSAgMSAgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KK2RkZm1hMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcNCitkZGZtYTMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQorDQorLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCitkZGZtYTMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQorZGRmbWEzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCitkZGZtYTMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KK2RkZm1hMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCitkZGZtYTMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KK2RkZm1hMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQorZGRmbWEzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KK2RkZm1hMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCitkZGZtYTMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQorZGRmbWEzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCitkZGZtYTMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KK2RkZm1hMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnDQorZGRmbWEzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCitkZGZtYTMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQorZGRmbWEzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCisNCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KK2RkZm1hMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KK2RkZm1hMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCitkZGZtYTMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQorZGRmbWEzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQorZGRmbWEzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KK2RkZm1hMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCitkZGZtYTMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQorZGRmbWEzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KKw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorLS0gICAgICAgICAgIDEuMjM0NTY3ODkwMTIzNDU2ICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDU2DQorZGRmbWEzMTcwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMTczIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMTc2IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCitkZGZtYTMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzE3OSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzE4MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQorDQorLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZGRmbWEzMjAwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknDQorZGRmbWEzMjAxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIwMiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMDMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjA0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIwNSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMDYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjA3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIwOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMDkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjEwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIxMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMTIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjEzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIxNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMTUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjE2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnDQorZGRmbWEzMjE3IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIxOCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMTkgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RkZm1hMzIyMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5Jw0KK2RkZm1hMzIyMSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMjIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjIzIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIyNCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMjUgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjI2IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIyNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMjggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjI5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIzMCBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMzEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjMyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIzMyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMzQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjM1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzIzNiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJw0KK2RkZm1hMzIzNyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyMzggZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjM5IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQorZGRmbWEzMjQwIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI0MSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNDIgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkZGZtYTMyNTAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScNCitkZGZtYTMyNTEgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjUyIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI1MyBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNTQgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjU1IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI1NiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNTcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjU4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI1OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNjAgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjYxIGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI2MiBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNjMgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjY0IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI2NSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMyNjYgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcNCitkZGZtYTMyNjcgZm1hICAxICAnMTIzNDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzNDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMjY4IGZtYSAgMSAgJzEyMzQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzI2OSBmbWEgIDEgICcxMjM0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjM0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCityb3VuZGluZzogaGFsZl91cA0KK2RkZm1hMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDANCitkZGZtYTMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxDQorZGRmbWEzMzAzIGZtYSAgMSAgICAxICAgMSAgICAgIC0+ICAgMg0KK2RkZm1hMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMNCitkZGZtYTMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5DQorZGRmbWEzMzA2IGZtYSAgMSAgIDk5ICAgMSAgICAgIC0+IDEwMA0KK2RkZm1hMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDENCitkZGZtYTMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyDQorZGRmbWEzMzA5IGZtYSAgMSAgIC0xICAtMSAgICAgIC0+ICAtMg0KK2RkZm1hMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTENCitkZGZtYTMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwDQorZGRmbWEzMzEyIGZtYSAgMSAgIDEyICAtMSAgICAgIC0+ICAxMQ0KK2RkZm1hMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcNCitkZGZtYTMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4DQorZGRmbWEzMzE1IGZtYSAgMSAgMTAwICAtMSAgICAgIC0+ICA5OQ0KK2RkZm1hMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDANCisNCitkZGZtYTMzMjEgZm1hICAxICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KK2RkZm1hMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQorZGRmbWEzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCitkZGZtYTMzMjQgZm1hICAxICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KK2RkZm1hMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQorZGRmbWEzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCitkZGZtYTMzMjcgZm1hICAxICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KK2RkZm1hMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQorZGRmbWEzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCitkZGZtYTMzMzAgZm1hICAxICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KK2RkZm1hMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQorZGRmbWEzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCitkZGZtYTMzMzMgZm1hICAxICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KK2RkZm1hMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQorZGRmbWEzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCitkZGZtYTMzMzYgZm1hICAxICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KKw0KKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KK2RkZm1hMzM0MCBmbWEgIDEgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCitkZGZtYTMzNDEgZm1hICAxICAxRSsxNSAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMA0KK2RkZm1hMzM0MiBmbWEgIDEgIDFFKzE2ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiAgUm91bmRlZA0KK2RkZm1hMzM0MyBmbWEgIDEgIDFFKzIwICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCitkZGZtYTMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQorZGRmbWEzMzQ1IGZtYSAgMSAgMUUrMTUgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDENCitkZGZtYTMzNDYgZm1hICAxICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzM0NyBmbWEgIDEgIDFFKzIwICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsyMCAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzMzQ4IGZtYSAgMSAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KK2RkZm1hMzM0OSBmbWEgIDEgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3DQorZGRmbWEzMzUwIGZtYSAgMSAgMUUrMTYgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDFFKzE2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTMzNTEgZm1hICAxICAxRSsyMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMjAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRyeXplcm9zIGNhc2VzDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkZGZtYTMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KK2RkZm1hMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KK2RkZm1hMzM2MiAgZm1hICAxICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgUm91bmRlZA0KK2RkZm1hMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KK2RkZm1hMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDBFKzM2OQ0KKw0KKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCityb3VuZGluZzogICAgaGFsZl9kb3duDQorZGRmbWEzMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDgxNA0KK2RkZm1hMzM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDgxRSsxNiBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogICAgaGFsZl91cA0KK2RkZm1hMzM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCitkZGZtYTMzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KK2RkZm1hMzM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDA4MTQNCitkZGZtYTMzNzUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDA4MUUrMTYgUm91bmRlZCBJbmV4YWN0DQorDQorLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQorZGRmbWEzNDAwIGZtYSAgMSAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcNCitkZGZtYTM0MDEgZm1hICAxICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcNCitkZGZtYTM0MDIgZm1hICAxICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDAzIGZtYSAgMSAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQwNCBmbWEgIDEgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM0MDUgZm1hICAxICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDA2IGZtYSAgMSAgICAxICAgNzdlLTI5OSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZm1hMzQxMCBmbWEgIDEgICAxMCAgIDc3ZS0xNCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDA3Nw0KK2RkZm1hMzQxMSBmbWEgIDEgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM0MTIgZm1hICAxICAgMTAgICA3N2UtMTYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDEzIGZtYSAgMSAgIDEwICAgNzdlLTE3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQxNCBmbWEgIDEgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM0MTUgZm1hICAxICAgMTAgICA3N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDE2IGZtYSAgMSAgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZm1hMzQyMCBmbWEgIDEgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQorZGRmbWEzNDIxIGZtYSAgMSAgIDc3ZS0xNSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDc3DQorZGRmbWEzNDIyIGZtYSAgMSAgIDc3ZS0xNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQyMyBmbWEgIDEgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM0MjQgZm1hICAxICAgNzdlLTE4ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDI1IGZtYSAgMSAgIDc3ZS0xOSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQyNiBmbWEgIDEgICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTM0MzAgZm1hICAxICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcNCitkZGZtYTM0MzEgZm1hICAxICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDMyIGZtYSAgMSAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQzMyBmbWEgIDEgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM0MzQgZm1hICAxICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNDM1IGZtYSAgMSAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzQzNiBmbWEgIDEgICA3N2UtMjk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBuZWdhdGl2ZSB1bHBzDQorZGRmbWEzNjQ0MCBmbWEgIDEgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NDEgZm1hICAxICAgIDEgICAtNzdlLTE1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ0MiBmbWEgIDEgICAgMSAgIC03N2UtMTYgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ0MyBmbWEgIDEgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY0NDQgZm1hICAxICAgIDEgICAtNzdlLTE4ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDQ1IGZtYSAgMSAgICAxICAgLTc3ZS0xOSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDQ2IGZtYSAgMSAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTM2NDUwIGZtYSAgMSAgIDEwICAgLTc3ZS0xNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NTEgZm1hICAxICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NTIgZm1hICAxICAgMTAgICAtNzdlLTE2ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDUzIGZtYSAgMSAgIDEwICAgLTc3ZS0xNyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ1NCBmbWEgIDEgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ1NSBmbWEgIDEgICAxMCAgIC03N2UtMTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ1NiBmbWEgIDEgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEzNjQ2MCBmbWEgIDEgICAtNzdlLTE0ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NjEgZm1hICAxICAgLTc3ZS0xNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ2MiBmbWEgIDEgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ2MyBmbWEgIDEgICAtNzdlLTE3ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY0NjQgZm1hICAxICAgLTc3ZS0xOCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDY1IGZtYSAgMSAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDY2IGZtYSAgMSAgIC03N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTM2NDcwIGZtYSAgMSAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NzEgZm1hICAxICAgLTc3ZS0xNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0NzIgZm1hICAxICAgLTc3ZS0xNiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDczIGZtYSAgMSAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ3NCBmbWEgIDEgICAtNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ3NSBmbWEgIDEgICAtNzdlLTE5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ3NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbmVnYXRpdmUgdWxwcw0KK2RkZm1hMzY0ODAgZm1hICAxICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ4MSBmbWEgIDEgICAtMSAgICA3N2UtMTUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjQ4MiBmbWEgIDEgICAtMSAgICA3N2UtMTYgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0ODMgZm1hICAxICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ4NCBmbWEgIDEgICAtMSAgICA3N2UtMTggICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDg1IGZtYSAgMSAgIC0xICAgIDc3ZS0xOSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ4NiBmbWEgIDEgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZm1hMzY0OTAgZm1hICAxICAtMTAgICAgNzdlLTE0ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY0OTEgZm1hICAxICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCitkZGZtYTM2NDkyIGZtYSAgMSAgLTEwICAgIDc3ZS0xNiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY0OTMgZm1hICAxICAtMTAgICAgNzdlLTE3ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjQ5NCBmbWEgIDEgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY0OTUgZm1hICAxICAtMTAgICAgNzdlLTE5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NDk2IGZtYSAgMSAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEzNjUwMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5MjMNCitkZGZtYTM2NTAxIGZtYSAgMSAgICA3N2UtMTUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMNCitkZGZtYTM2NTAyIGZtYSAgMSAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjUwMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTA0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MDUgZm1hICAxICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTA2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEzNjUxMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzDQorZGRmbWEzNjUxMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTkyMw0KK2RkZm1hMzY1MTIgZm1hICAxICAgIDc3ZS0xNiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjUxMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTE0IGZtYSAgMSAgICA3N2UtMTggICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjUxNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MTYgZm1hICAxICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBhbmQgYSBjb3VwbGUgbW9yZSB3aXRoIGxvbmdlciBSSFMNCitkZGZtYTM2NTIwIGZtYSAgMSAgICAxICAgLTc3NzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjIyMw0KK2RkZm1hMzY1MjEgZm1hICAxICAgIDEgICAtNzc3N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjIyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MjIgZm1hICAxICAgIDEgICAtNzc3N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MjMgZm1hICAxICAgIDEgICAtNzc3N2UtMTkgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MjQgZm1hICAxICAgIDEgICAtNzc3N2UtMjAgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1MjUgZm1hICAxICAgIDEgICAtNzc3N2UtMjEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjUyNiBmbWEgIDEgICAgMSAgIC03Nzc3ZS0yMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCisNCistLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZGRmbWEzNjU0MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KK2RkZm1hMzY1NDEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU0MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTQzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NDQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU0NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTQ2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NDcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU0OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTQ5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NTAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU1MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTUyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NTMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU1NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTU1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NTYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCitkZGZtYTM2NTU3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NTggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU1OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZGRmbWEzNjU2MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KK2RkZm1hMzY1NjEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU2MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTYzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NjQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU2NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTY2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NjcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU2OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTY5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NzAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU3MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTcyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NzMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU3NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM2NTc1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NzYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCitkZGZtYTM2NTc3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzY1NzggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNjU3OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KK2RkZm1hMzc1NDAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU0MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTQyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBkb3duDQorZGRmbWEzNzU1MCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5Jw0KK2RkZm1hMzc1NTEgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU1MiBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTUzIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NTQgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU1NSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTU2IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NTcgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU1OCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTU5IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NjAgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU2MSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTYyIGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NjMgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU2NCBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTY1IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NjYgZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcNCitkZGZtYTM3NTY3IGZtYSAgMSAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1NjggZm1hICAxICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzU2OSBmbWEgIDEgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCisNCistLSB2ZXJpZnkgYSBxdWVyeQ0KK3JvdW5kaW5nOiAgICAgZG93bg0KK2RkZm1hMzc2NjEgZm1hICAxICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc2NjIgZm1hICAxICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQNCitkZGZtYTM3NjYzIGZtYSAgMSAgMWUtMzg4IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NjY0IGZtYSAgMSAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkDQorDQorLS0gbW9yZSB6ZXJvcywgZXRjLg0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitkZGZtYTM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCitkZGZtYTM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQorZGRmbWEzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KK2RkZm1hMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCisNCitkZGZtYTM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDANCitkZGZtYTM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KK2RkZm1hMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMA0KK2RkZm1hMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQ0KK2RkZm1hMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMg0KK2RkZm1hMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMw0KK2RkZm1hMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMw0KK2RkZm1hMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMw0KK2RkZm1hMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMA0KK2RkZm1hMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDANCitkZGZtYTM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQorDQorZGRmbWEzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwDQorZGRmbWEzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjANCitkZGZtYTM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDANCitkZGZtYTM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCitkZGZtYTM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzINCitkZGZtYTM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCitkZGZtYTM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCitkZGZtYTM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCitkZGZtYTM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCitkZGZtYTM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KK2RkZm1hMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMA0KKw0KK2RkZm1hMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDANCitkZGZtYTM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwDQorZGRmbWEzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMA0KK2RkZm1hMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KKw0KK2RkZm1hMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDANCitkZGZtYTM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yDQorZGRmbWEzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMg0KK2RkZm1hMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDANCisNCitkZGZtYTM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xDQorZGRmbWEzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQ0KK2RkZm1hMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDENCitkZGZtYTM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxDQorZGRmbWEzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQ0KK2RkZm1hMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTENCitkZGZtYTM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxDQorZGRmbWEzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQ0KKw0KK2RkZm1hMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMA0KK2RkZm1hMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMA0KK2RkZm1hMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMA0KK2RkZm1hMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMA0KK2RkZm1hMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMA0KK2RkZm1hMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMA0KK2RkZm1hMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMA0KK2RkZm1hMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMA0KKw0KK2RkZm1hMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMA0KKw0KK2RkZm1hMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMA0KK2RkZm1hMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMA0KK2RkZm1hMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMA0KKw0KKy0tIFNwZWNpYWxzDQorZGRmbWEzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZGZtYTM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZGRmbWEzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkZGZtYTM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZGRmbWEzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkZGZtYTM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRmbWEzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZGZtYTM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRmbWEzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZGZtYTM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkZm1hMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCitkZGZtYTM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkZGZtYTM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RkZm1hMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZGRmbWEzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkZGZtYTM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RkZm1hMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZGRmbWEzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZGZtYTM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkZm1hMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkZm1hMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRmbWEzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZGZtYTM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkZm1hMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorZGRmbWEzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkZGZtYTM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZGZtYTM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkZGZtYTM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkZGZtYTM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZGZtYTM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkZGZtYTM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkZGZtYTM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZGZtYTM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkZGZtYTM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZGZtYTM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkZGZtYTM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRmbWEzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkZm1hMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCitkZGZtYTM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZGRmbWEzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KK2RkZm1hMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCitkZGZtYTM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZGRmbWEzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KK2RkZm1hMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCitkZGZtYTM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZGRmbWEzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCitkZGZtYTM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGZtYTM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KK2RkZm1hMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZGRmbWEzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCitkZGZtYTM3NTc1IGZtYSAgMSAgIDFFLTM4MyAtMUUtMzk4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KK2RkZm1hMzc1NzYgZm1hICAxICAtMUUtMzgzICsxRS0zOTggLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQorDQorLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlDQorLS0gICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZGRmbWEzNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRmbWEzNzk3MyBmbWEgIDEgICAgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5NzUgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTc2IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDlFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5NzggZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgN0UrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTc5IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDZFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5ODEgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNEUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5ODIgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgM0UrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5ODQgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMUUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KKw0KK2RkZm1hMzc5ODUgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZGZtYTM3OTg2IGZtYSAgMSAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTg3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5ODkgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzk5MCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5OTIgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzk5MyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQorcm91bmRpbmc6ICAgICBkb3duDQorZGRmbWEzNzExMDAgZm1hICAxICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMDEgZm1hICAxICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkZm1hMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMDQgZm1hICAxICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMDUgZm1hICAxICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkZm1hMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMDcgZm1hICAxICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMDggZm1hICAxICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RkZm1hMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCisNCityb3VuZGluZzogICAgIGNlaWxpbmcNCitkZGZtYTM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMTEgZm1hICAxICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGZtYTM3MTExMyBmbWEgIDEgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGZtYTM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMTUgZm1hICAxICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGZtYTM3MTExNiBmbWEgIDEgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGZtYTM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZGRmbWEzNzExMTggZm1hICAxICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkZGZtYTM3MTExOSBmbWEgIDEgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCisNCitkZGZtYTM3MTMwMCBmbWEgIDEgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMTAgZm1hICAxICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzExIGZtYSAgMSAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMxMiBmbWEgIDEgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMTMgZm1hICAxICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzE0IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMxNSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMTYgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzE3IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMxOCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMTkgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzIwIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMyMSBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMjIgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzIzIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMyNCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMjUgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzI2IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMyNyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMjggZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzI5IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMzMCBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMzEgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzMyIGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMzMyBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMzQgZm1hICAxICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzM1IGZtYSAgMSAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMzNiBmbWEgIDEgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzMzcgZm1hICAxICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzM4IGZtYSAgMSAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTMzOSBmbWEgIDEgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorDQorZGRmbWEzNzEzNDAgZm1hICAxICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzQxIGZtYSAgMSAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZGZtYTM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQorZGRmbWEzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KK2RkZm1hMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQorZGRmbWEzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCitkZGZtYTM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCitkZGZtYTM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCitkZGZtYTM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCitkZGZtYTM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCitkZGZtYTM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCitkZGZtYTM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCitkZGZtYTM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCitkZGZtYTM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCitkZGZtYTM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCitkZGZtYTM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCisNCistLSBzYW1lLCByZXZlcnNlZCAwDQorZGRmbWEzNzE0NDAgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2RkZm1hMzcxNDQxIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0NDIgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0NDMgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkZm1hMzcxNDQ0IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0NDUgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZGRmbWEzNzE0NDYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2RkZm1hMzcxNDQ3IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCitkZGZtYTM3MTQ0OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQorZGRmbWEzNzE0NDkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2RkZm1hMzcxNDUwIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQorZGRmbWEzNzE0NTEgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCitkZGZtYTM3MTQ1MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2RkZm1hMzcxNDUzIGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQorZGRmbWEzNzE0NTQgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCitkZGZtYTM3MTQ1NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2RkZm1hMzcxNDU2IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQorZGRmbWEzNzE0NTcgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCitkZGZtYTM3MTQ1OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2RkZm1hMzcxNDU5IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQorDQorLS0gc2FtZSwgRXMgb24gdGhlIDANCitkZGZtYTM3MTQ2MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2NiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ2OSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3MCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3MSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3MyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3NCBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitkZGZtYTM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0DQorZGRmbWEzNzE0NzYgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkZGZtYTM3MTQ3NyBmbWEgIDEgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KK2RkZm1hMzcxNDc4IGZtYSAgMSAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorZGRmbWEzNzE0NzkgZm1hICAxICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCisNCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkZm1hMzcxNTAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTUwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE1MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNTAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RkZm1hMzcxNTExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCitkZGZtYTM3MTUxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkZGZtYTM3MTUyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE1MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNTIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTUyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkZGZtYTM3MTUzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZGRmbWEzNzE1MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZGRmbWEzNzE1NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNTQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTU0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE1NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZGRmbWEzNzE1NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RkZm1hMzcxNTUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgdXANCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZGRmbWEzNzE1NjAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNTYxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTU2MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE1NjMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZGRmbWEzNzE1NzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RkZm1hMzcxNTcyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkZGZtYTM3MTU4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE1ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNTgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTU4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkZGZtYTM3MTU5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZGRmbWEzNzE1OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBjZWlsaW5nDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkZm1hMzcxNjAwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTYwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZGRmbWEzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RkZm1hMzcxNjAzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RkZm1hMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCitkZGZtYTM3MTYxMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQorcm91bmRpbmc6ICAgIGZsb29yDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RkZm1hMzcxNjIwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkZGZtYTM3MTYyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQorZGRmbWEzNzE2MjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KK2RkZm1hMzcxNjIzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RkZm1hMzcxNjMxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoNCitkZGZtYTM3MTYzMiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQorDQorLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQorZGRmbWEzNzE3MDEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTANCitkZGZtYTM3MTcwMiBmbWEgIDEgIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MA0KK2RkZm1hMzcxNzAzIGZtYSAgMSAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQorZGRmbWEzNzE3MDQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQNCitkZGZtYTM3MTcwNSBmbWEgIDEgIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMA0KK2RkZm1hMzcxNzA2IGZtYSAgMSAgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwDQorZGRmbWEzNzE3MDcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzANCitkZGZtYTM3MTcwOCBmbWEgIDEgIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMw0KKw0KKy0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXANCityb3VuZGluZzogaGFsZl9ldmVuDQorDQorZGRmbWEzNzUwMDEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM0NTY3ODkwMTIzNDU3DQorZGRmbWEzNzUwMDIgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAwMyBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgMC4wNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDA0IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMDUgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAwNiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDA3IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMDggZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAwOSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDEwIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMTEgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAxMiBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDEzIGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMTQgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAxNSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDE2IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMTcgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAxOCBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDE5IGZtYSAgMSAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwMjAgZm1hICAxICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTAyMSBmbWEgIDEgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXANCitkZGZtYTM3NTAzMCBmbWEgIDEgIDEyMzQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc5DQorZGRmbWEzNzUwMzEgZm1hICAxICAxMjM0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xDQorZGRmbWEzNzUwMzIgZm1hICAxICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMg0KK2RkZm1hMzc1MDMzIGZtYSAgMSAgMTIzNDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzDQorZGRmbWEzNzUwMzQgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0DQorZGRmbWEzNzUwMzUgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQ0KK2RkZm1hMzc1MDM2IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2DQorZGRmbWEzNzUwMzcgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3DQorZGRmbWEzNzUwMzggZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OA0KK2RkZm1hMzc1MDM5IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNDAgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA0MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDQyIGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNDMgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA0NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDQ1IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNDYgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA0NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDQ4IGZtYSAgMSAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNDkgZm1hICAxICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ng0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkZGZtYTM3NTA1MCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDUxIGZtYSAgMSAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNTIgZm1hICAxICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA1MyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDU0IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNTUgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA1NiBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDU3IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNjAgZm1hICAxICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA2MSBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDYyIGZtYSAgMSAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNjMgZm1hICAxICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA2NCBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDY1IGZtYSAgMSAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNjYgZm1hICAxICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA2NyBmbWEgIDEgIDEyMzQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KKy0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykNCityb3VuZGluZzogdXANCitkZGZtYTM3NTA3MCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxDQorZGRmbWEzNzUwNzEgZm1hICAxICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA3MiBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDczIGZtYSAgMSAgMTIzNDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNzQgZm1hICAxICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA3NSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTEzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDc2IGZtYSAgMSAgMTIzNDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwNzcgZm1hICAxICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA3OCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE2ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDc5IGZtYSAgMSAgMTIzNDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwODAgZm1hICAxICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA4MSBmbWEgIDEgIDEyMzQ1Njc4IDFFLTE5ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDgyIGZtYSAgMSAgMTIzNDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwODMgZm1hICAxICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA4NCBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDg1IGZtYSAgMSAgMTIzNDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwODYgZm1hICAxICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkZGZtYTM3NTA4NyBmbWEgIDEgIDEyMzQ1Njc4IDFFLTMzICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RkZm1hMzc1MDg4IGZtYSAgMSAgMTIzNDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZGRmbWEzNzUwODkgZm1hICAxICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBkZXNjdHJ1Y3RpdmUgc3VidHJhY3Rpb24gKGZyb20gcmVtYWluZGVyIHRlc3RzKQ0KKw0KKy0tICsrKyBzb21lIG9mIHRoZXNlIHdpbGwgYmUgb2ZmLWJ5LW9uZSByZW1haW5kZXIgdnMgcmVtYWluZGVyTmVhcg0KKw0KK2RkZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NCAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc2NTQzMjEwOTg3NjU0Ng0KK2RkZm1hNDAwMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ0MyAgICAxLjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY1NDMyMTA5ODc2NTU3DQorZGRmbWE0MDAyICBmbWEgIC0xMjM0NTY3ODkwMTIzMzMyICAgICAxLjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNTQzMjEwOTg3NjY2OA0KK2RkZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNw0KK2RkZm1hNDAwNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2MyAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjY5MTM1ODAyNzQ2OTEzNw0KK2RkZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5NiAgICAgNC45OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjY5MTM1NzgwMjQ2OTYNCitkZGZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEgICAgNC45OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgMy40NjkxMzU3ODAyNDY5MQ0KK2RkZm1hNDAwNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQ0KK2RkZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQ0KK2RkZm1hNDAwOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MCAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAzLjUzMDg2NDIxOTc1MzEwDQorZGRmbWE0MDEwICBmbWEgICAtMjQ2OTEzNTc4MDI0Njg2ICAgICA1LjAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDEuMzA4NjQyMTk3NTMxNA0KK2RkZm1hNDAxMSAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1NSAgIDEuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUNCitkZGZtYTQwMTIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NDQgICAgMS4wMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NDQNCitkZGZtYTQwMTMgIGZtYSAgLTEyMzQ1Njc4OTAxMjMzMzMgICAgIDEuMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuNDU2Nzg5MDEyMzMzMw0KK2RkZm1hNDAxNCAgZm1hICAgLTMwODY0MTk3MjUzMDg2NCAgIDQuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQNCitkZGZtYTQwMTUgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQgICA0LjAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2ICAtPiAgLTAuMzA4NjQxOTcyNTMwODY0DQorZGRmbWE0MDE2ICBmbWEgICAtMjQ2OTEzNTc4MDI0Njk2ICAgICA0Ljk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gIDAuNjkxMzU3ODAyNDY5Ng0KK2RkZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MiAgICA0Ljk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS41MzA4NjQyMTk3NTMwOA0KK2RkZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDQuOTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQ0KK2RkZm1hNDAxOSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgIDUuMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQ0KK2RkZm1hNDAyMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MSAgICA1LjAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAtMS40NjkxMzU3ODAyNDY5MQ0KK2RkZm1hNDAyMSAgZm1hICAgLTI0NjkxMzU3ODAyNDY4NiAgICAgNS4wMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTYgIC0+ICAxLjMwODY0MjE5NzUzMTQNCisNCisNCistLSBOdWxsIHRlc3RzDQorZGRmbWEzOTk5MCBmbWEgIDEgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkZm1hMzk5OTEgZm1hICAxICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRJbnZlcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CmluZGV4IDVkMTlmYmEuLjMyMWU0ZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZEludmVydC5kZWNUZXN0CkBAIC0xLDIwMiArMSwyMDIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY0RvdWJsZXMgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKLWRkaW52MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMTExMTExMTEKLWRkaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTAKLWRkaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMDEKLWRkaW52MDA0IGludmVydCAgICAgMTExMTExMTExIC0+IDExMTExMTEwMDAwMDAwMDAKLWRkaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTEKLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCi1kZGludjAwNyBpbnZlcnQgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDExMTExMTExMTExMTExMTEKLWRkaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMQotZGRpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExCi1kZGludjAxMCBpbnZlcnQgMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMTExMTExMTExMTExMTEKLWRkaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAotZGRpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwCi1kZGludjAxMyBpbnZlcnQgMDAxMTExMTExMTExMTExMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAKLWRkaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OSAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRkaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwCi1kZGludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAotZGRpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDExMTExMTExMDAwMDAwMDAKLWRkaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTExMTExMTEwMDAwMDAwCi1kZGludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMTExMTExMTAwMDAwMAotZGRpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTExMTExMTExMDAwMDAKLWRkaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTExMTExMTEwMDAwCi1kZGludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMTExMTExMTAwMAotZGRpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTExMTExMTExMDAKLWRkaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTExMTExMTEwCi1kZGludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMTExMTAwMDAwMDAwMDAwMAotZGRpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gIDExMTExMDAwMDAwMDAwMDAKLWRkaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+ICAxMTExMTEwMDAwMDAwMDAwCi1kZGludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMTExMTExMTAwMDAwMDAwMAotCi1kZGludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDExMTExMTExMDAwMDAwMDAKLWRkaW52MDQxIGludmVydCAxMDExMTExMTEgICAtPiAgMTExMTExMTAxMDAwMDAwMAotZGRpbnYwNDIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAxMTExMTExMDAxMDAwMDAwCi1kZGludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gIDExMTExMTEwMDAxMDAwMDAKLWRkaW52MDQ0IGludmVydCAxMTExMDExMTEgICAtPiAgMTExMTExMTAwMDAxMDAwMAotZGRpbnYwNDUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCi1kZGludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gIDExMTExMTEwMDAwMDAxMDAKLWRkaW52MDQ3IGludmVydCAxMTExMTExMDEgICAtPiAgMTExMTExMTAwMDAwMDAxMAotZGRpbnYwNDggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAxMTExMTExMDAwMDAwMDAxCi1kZGludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDAKLWRkaW52MDUwIGludmVydCAxMDExMTExMDEgICAtPiAgMTExMTExMTAxMDAwMDAxMAotZGRpbnYwNTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCi1kZGludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTAKLWRkaW52MDUzIGludmVydCAxMTExMDEwMTEgICAtPiAgMTExMTExMTAwMDAxMDEwMAotZGRpbnYwNTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAxMTExMTExMDAwMDAxMDAwCi1kZGludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDAKLWRkaW52MDU2IGludmVydCAxMTEwMTExMDEgICAtPiAgMTExMTExMTAwMDEwMDAxMAotZGRpbnYwNTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAxMTExMTExMDAxMDAwMDAxCi1kZGludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTAKLWRkaW52MDU5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTExMTExMTEwMDAwMDEwMAotCi1kZGludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+ICAgMTExMTExMTAwMDAwMDAwCi1kZGludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+ICAxMDExMTExMDEwMDAwMDAwCi1kZGludjA4MiBpbnZlcnQgMDAxMDAwMDExMDExMTExMSAgIC0+ICAxMTAxMTExMDAxMDAwMDAwCi1kZGludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+ICAxMTEwMTExMDAwMTAwMDAwCi1kZGludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+ICAxMTExMDExMDAwMDEwMDAwCi1kZGludjA4NSBpbnZlcnQgMDAwMDAxMDExMTExMDExMSAgIC0+ICAxMTExMTAxMDAwMDAxMDAwCi1kZGludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+ICAxMTExMTEwMDAwMDAwMTAwCi1kZGludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+ICAxMTExMTAxMDAwMDAwMDEwCi1kZGludjA4OCBpbnZlcnQgMDAwMDEwMDExMTExMTExMCAgIC0+ICAxMTExMDExMDAwMDAwMDAxCi1kZGludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+ICAxMTEwMTExMTAwMDAwMTAwCi1kZGludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+ICAxMTAxMTExMDEwMDAwMDEwCi1kZGludjA5MSBpbnZlcnQgMDEwMDAwMDExMDExMTExMCAgIC0+ICAxMDExMTExMDAxMDAwMDAxCi1kZGludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+ICAgMTExMTExMDAwMTAwMDEwCi1kZGludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+ICAxMDExMTExMDAwMDEwMTAwCi1kZGludjA5NCBpbnZlcnQgMDAxMDAwMDExMTExMDExMSAgIC0+ICAxMTAxMTExMDAwMDAxMDAwCi1kZGludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+ICAxMTEwMTExMDAwMDEwMTAwCi1kZGludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+ICAxMTExMDExMDAwMTAwMDEwCi1kZGludjA5NyBpbnZlcnQgMDAwMDAxMDExMDExMTExMCAgIC0+ICAxMTExMTAxMDAxMDAwMDAxCi1kZGludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+ICAxMTExMTEwMDEwMDAwMDEwCi1kZGludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+ICAxMTExMTAxMTAwMDAwMTAwCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotZGRpbnYyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLWRkaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWRkaW52MjUwIGludmVydCAgMjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNTEgaW52ZXJ0ICAzMDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI1MiBpbnZlcnQgIDQwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjUzIGludmVydCAgNTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNTQgaW52ZXJ0ICA2MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI1NSBpbnZlcnQgIDcwMDAwMDAwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjU2IGludmVydCAgODAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNTcgaW52ZXJ0ICA5MDAwMDAwMDAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRC0xCi1kZGludjI3MCBpbnZlcnQgIDAyMDAwMDEwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjcxIGludmVydCAgMDMwMDAwMDEwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNzIgaW52ZXJ0ICAwNDAwMDAwMDEwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI3MyBpbnZlcnQgIDA1MDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52Mjc0IGludmVydCAgMTYwMDAwMDAwMDEwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyNzUgaW52ZXJ0ICAxNzAwMDAwMDAwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI3NiBpbnZlcnQgIDE4MDAwMDAwMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52Mjc3IGludmVydCAgMTkwMDAwMDAwMDAwMDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBMU0QKLWRkaW52MjgwIGludmVydCAgMDAxMDAwMDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI4MiBpbnZlcnQgIDAwMDAxMDAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjgzIGludmVydCAgMDAwMDAxMDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyODQgaW52ZXJ0ICAxMDAwMDAxMDAwMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI4NSBpbnZlcnQgIDEwMDAwMDAxMDAwMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52Mjg2IGludmVydCAgMTAwMDAwMDAxMDAwMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1pZGRpZQotZGRpbnYyODggaW52ZXJ0ICAwMDEwMDAwMDIwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI4OSBpbnZlcnQgIDAwMDEwMDAwMzAwMDAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjkwIGludmVydCAgMDAwMDEwMDA0MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyOTEgaW52ZXJ0ICAwMDAwMDEwMDUwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI5MiBpbnZlcnQgIDEwMDAwMDEwNjAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MjkzIGludmVydCAgMTAwMDAwMDE3MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMDgwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjI5NSBpbnZlcnQgIDEwMDAwMDAwOTEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHNpZ24KLWRkaW52Mjk2IGludmVydCAtMTAwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYyOTkgaW52ZXJ0ICAxMDAwMDAwMDAxMDAwMDAwICAtPiAgMTExMTExMTEwMTExMTExCi0KLQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQotZGRpbnYzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSsyOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MzQyIGludmVydCAgMUUtMjk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYzNDQgaW52ZXJ0ICAxRS0yMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MzQ1IGludmVydCAgLTFFLTIwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS0yOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYzNDcgaW52ZXJ0ICAtMUUtMjk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycwotZGRpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MzYyIGludmVydCAgMUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjM2MyBpbnZlcnQgIDAuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkaW52MzY1IGludmVydCAgOS45ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjM2NiBpbnZlcnQgIDlFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCi1kZGludjc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkaW52ODIxIGludmVydCAgTmFOICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGludjg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRpbnY4NjEgaW52ZXJ0ICBOYU4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NjIgaW52ZXJ0ICtOYU4yICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NjQgaW52ZXJ0ICBOYU40ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NjUgaW52ZXJ0ICBOYU41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzIgaW52ZXJ0ICBzTmFOMTIgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzMgaW52ZXJ0ICBzTmFOMTMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzUgaW52ZXJ0ICBzTmFOMTUgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4NzYgaW52ZXJ0ICBOYU4xNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4ODIgaW52ZXJ0IC1OYU4yNiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnY4ODMgaW52ZXJ0IC1zTmFOMjcgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRJbnZlcnQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBJTlZFUlQgZm9yIGRlY0RvdWJsZXMgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCitkZGludjAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTExMTExMTExDQorZGRpbnYwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTExMTExMTExMA0KK2RkaW52MDAzIGludmVydCAgICAgICAgICAgIDEwIC0+IDExMTExMTExMTExMTExMDENCitkZGludjAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAxMTExMTExMDAwMDAwMDAwDQorZGRpbnYwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExMTExMTExMQ0KKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQorZGRpbnYwMDcgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExDQorZGRpbnYwMDggaW52ZXJ0IDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTExMTExMTExMTExMTExDQorZGRpbnYwMDkgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExDQorZGRpbnYwMTAgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAgLT4gICAxMDExMTExMTExMTExMTExDQorZGRpbnYwMTEgaW52ZXJ0IDAxMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQorZGRpbnYwMTIgaW52ZXJ0IDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgICAwDQorZGRpbnYwMTMgaW52ZXJ0IDAwMTExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwDQorZGRpbnYwMTQgaW52ZXJ0IDAxMTExMTExMTExMTExMTEgLT4gICAxMDAwMDAwMDAwMDAwMDAwDQorDQorLS0gVmFyaW91cyBsZW5ndGhzDQorLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAxMTExMTExMDAwMDAwMDAwDQorZGRpbnYwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMDAwMDANCitkZGludjAyMyBpbnZlcnQgIDExMTExMTExICAgICAtPiAgMTExMTExMTEwMDAwMDAwMA0KK2RkaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+ICAxMTExMTExMTEwMDAwMDAwDQorZGRpbnYwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gIDExMTExMTExMTEwMDAwMDANCitkZGludjAyNyBpbnZlcnQgICAgIDExMTExICAgICAtPiAgMTExMTExMTExMTEwMDAwMA0KK2RkaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+ICAxMTExMTExMTExMTEwMDAwDQorZGRpbnYwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gIDExMTExMTExMTExMTEwMDANCitkZGludjAzMSBpbnZlcnQgICAgICAgIDExICAgICAtPiAgMTExMTExMTExMTExMTEwMA0KK2RkaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+ICAxMTExMTExMTExMTExMTEwDQorZGRpbnYwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMDAwMDANCitkZGludjAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMTExMTEwMDAwMDAwMDAwMA0KK2RkaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+ICAxMTExMTEwMDAwMDAwMDAwDQorZGRpbnYwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDExMTExMTEwMDAwMDAwMDANCisNCitkZGludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gIDExMTExMTExMDAwMDAwMDANCitkZGludjA0MSBpbnZlcnQgMTAxMTExMTExICAgLT4gIDExMTExMTEwMTAwMDAwMDANCitkZGludjA0MiBpbnZlcnQgMTEwMTExMTExICAgLT4gIDExMTExMTEwMDEwMDAwMDANCitkZGludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gIDExMTExMTEwMDAxMDAwMDANCitkZGludjA0NCBpbnZlcnQgMTExMTAxMTExICAgLT4gIDExMTExMTEwMDAwMTAwMDANCitkZGludjA0NSBpbnZlcnQgMTExMTEwMTExICAgLT4gIDExMTExMTEwMDAwMDEwMDANCitkZGludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gIDExMTExMTEwMDAwMDAxMDANCitkZGludjA0NyBpbnZlcnQgMTExMTExMTAxICAgLT4gIDExMTExMTEwMDAwMDAwMTANCitkZGludjA0OCBpbnZlcnQgMTExMTExMTEwICAgLT4gIDExMTExMTEwMDAwMDAwMDENCitkZGludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDANCitkZGludjA1MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTANCitkZGludjA1MSBpbnZlcnQgMTEwMTExMTEwICAgLT4gIDExMTExMTEwMDEwMDAwMDENCitkZGludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTANCitkZGludjA1MyBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDANCitkZGludjA1NCBpbnZlcnQgMTExMTEwMTExICAgLT4gIDExMTExMTEwMDAwMDEwMDANCitkZGludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gIDExMTExMTEwMDAwMTAxMDANCitkZGludjA1NiBpbnZlcnQgMTExMDExMTAxICAgLT4gIDExMTExMTEwMDAxMDAwMTANCitkZGludjA1NyBpbnZlcnQgMTEwMTExMTEwICAgLT4gIDExMTExMTEwMDEwMDAwMDENCitkZGludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gIDExMTExMTEwMTAwMDAwMTANCitkZGludjA1OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDExMTExMTExMDAwMDAxMDANCisNCitkZGludjA4MCBpbnZlcnQgMTAwMDAwMDAxMTExMTExMSAgIC0+ICAgMTExMTExMTAwMDAwMDAwDQorZGRpbnYwODEgaW52ZXJ0IDAxMDAwMDAxMDExMTExMTEgICAtPiAgMTAxMTExMTAxMDAwMDAwMA0KK2RkaW52MDgyIGludmVydCAwMDEwMDAwMTEwMTExMTExICAgLT4gIDExMDExMTEwMDEwMDAwMDANCitkZGludjA4MyBpbnZlcnQgMDAwMTAwMDExMTAxMTExMSAgIC0+ICAxMTEwMTExMDAwMTAwMDAwDQorZGRpbnYwODQgaW52ZXJ0IDAwMDAxMDAxMTExMDExMTEgICAtPiAgMTExMTAxMTAwMDAxMDAwMA0KK2RkaW52MDg1IGludmVydCAwMDAwMDEwMTExMTEwMTExICAgLT4gIDExMTExMDEwMDAwMDEwMDANCitkZGludjA4NiBpbnZlcnQgMDAwMDAwMTExMTExMTAxMSAgIC0+ICAxMTExMTEwMDAwMDAwMTAwDQorZGRpbnYwODcgaW52ZXJ0IDAwMDAwMTAxMTExMTExMDEgICAtPiAgMTExMTEwMTAwMDAwMDAxMA0KK2RkaW52MDg4IGludmVydCAwMDAwMTAwMTExMTExMTEwICAgLT4gIDExMTEwMTEwMDAwMDAwMDENCitkZGludjA4OSBpbnZlcnQgMDAwMTAwMDAxMTExMTAxMSAgIC0+ICAxMTEwMTExMTAwMDAwMTAwDQorZGRpbnYwOTAgaW52ZXJ0IDAwMTAwMDAxMDExMTExMDEgICAtPiAgMTEwMTExMTAxMDAwMDAxMA0KK2RkaW52MDkxIGludmVydCAwMTAwMDAwMTEwMTExMTEwICAgLT4gIDEwMTExMTEwMDEwMDAwMDENCitkZGludjA5MiBpbnZlcnQgMTAwMDAwMDExMTAxMTEwMSAgIC0+ICAgMTExMTExMDAwMTAwMDEwDQorZGRpbnYwOTMgaW52ZXJ0IDAxMDAwMDAxMTExMDEwMTEgICAtPiAgMTAxMTExMTAwMDAxMDEwMA0KK2RkaW52MDk0IGludmVydCAwMDEwMDAwMTExMTEwMTExICAgLT4gIDExMDExMTEwMDAwMDEwMDANCitkZGludjA5NSBpbnZlcnQgMDAwMTAwMDExMTEwMTAxMSAgIC0+ICAxMTEwMTExMDAwMDEwMTAwDQorZGRpbnYwOTYgaW52ZXJ0IDAwMDAxMDAxMTEwMTExMDEgICAtPiAgMTExMTAxMTAwMDEwMDAxMA0KK2RkaW52MDk3IGludmVydCAwMDAwMDEwMTEwMTExMTEwICAgLT4gIDExMTExMDEwMDEwMDAwMDENCitkZGludjA5OCBpbnZlcnQgMDAwMDAwMTEwMTExMTEwMSAgIC0+ICAxMTExMTEwMDEwMDAwMDEwDQorZGRpbnYwOTkgaW52ZXJ0IDAwMDAwMTAwMTExMTEwMTEgICAtPiAgMTExMTEwMTEwMDAwMDEwMA0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2RkaW52MjIwIGludmVydCAxMTExMTExMTIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjIzIGludmVydCA3Nzc3Nzc3NzcgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjI2IGludmVydCA0NDQ0NDQ0NDQgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjI5IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjMyIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYSBmZXcgcmFuZG9tcw0KK2RkaW52MjQwIGludmVydCAgNTY3NDY4Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjQzIGludmVydCAtNzU2MjUzMjU3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2RkaW52MjUwIGludmVydCAgMjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjUxIGludmVydCAgMzAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjUyIGludmVydCAgNDAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjUzIGludmVydCAgNTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjU0IGludmVydCAgNjAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjU1IGludmVydCAgNzAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjU2IGludmVydCAgODAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjU3IGludmVydCAgOTAwMDAwMDAwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTVNELTENCitkZGludjI3MCBpbnZlcnQgIDAyMDAwMDEwMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3MSBpbnZlcnQgIDAzMDAwMDAxMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3MiBpbnZlcnQgIDA0MDAwMDAwMTAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3MyBpbnZlcnQgIDA1MDAwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3NCBpbnZlcnQgIDE2MDAwMDAwMDAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3NSBpbnZlcnQgIDE3MDAwMDAwMDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3NiBpbnZlcnQgIDE4MDAwMDAwMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjI3NyBpbnZlcnQgIDE5MDAwMDAwMDAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2RkaW52MjgwIGludmVydCAgMDAxMDAwMDAwMDAwMDAwMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjgxIGludmVydCAgMDAwMTAwMDAwMDAwMDAwMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjgyIGludmVydCAgMDAwMDEwMDAwMDAwMDAwNCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MjgzIGludmVydCAgMDAwMDAxMDAwMDAwMDAwNSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52Mjg0IGludmVydCAgMTAwMDAwMTAwMDAwMDAwNiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52Mjg1IGludmVydCAgMTAwMDAwMDEwMDAwMDAwNyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52Mjg2IGludmVydCAgMTAwMDAwMDAxMDAwMDAwOCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52Mjg3IGludmVydCAgMTAwMDAwMDAwMTAwMDAwOSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTWlkZGllDQorZGRpbnYyODggaW52ZXJ0ICAwMDEwMDAwMDIwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyODkgaW52ZXJ0ICAwMDAxMDAwMDMwMDAwMDAxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTAgaW52ZXJ0ICAwMDAwMTAwMDQwMDAwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTEgaW52ZXJ0ICAwMDAwMDEwMDUwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTIgaW52ZXJ0ICAxMDAwMDAxMDYwMDAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTMgaW52ZXJ0ICAxMDAwMDAwMTcwMDEwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTQgaW52ZXJ0ICAxMDAwMDAwMDgwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYyOTUgaW52ZXJ0ICAxMDAwMDAwMDkxMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gc2lnbg0KK2RkaW52Mjk2IGludmVydCAtMTAwMDAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52Mjk5IGludmVydCAgMTAwMDAwMDAwMTAwMDAwMCAgLT4gIDExMTExMTExMDExMTExMQ0KKw0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCitkZGludjM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzI5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MzQyIGludmVydCAgMUUtMjk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS0yOTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjM0NCBpbnZlcnQgIDFFLTIwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MzQ1IGludmVydCAgLTFFLTIwNyAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtMjk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjM0NyBpbnZlcnQgIC0xRS0yOTkgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorZGRpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2RkaW52Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGludjgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkaW52ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW52ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZGludjg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTG9nQi5kZWNUZXN0CmluZGV4IGRlNzI4ZTUuLjAwNTg5YjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZExvZ0IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRMb2dCLmRlY1Rlc3QKQEAgLTEsMTU5ICsxLDE1OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZExvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjRG91YmxlcyAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBiYXNpY3MKLWRkbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KLWRkbG9nYjAwMSBsb2diICAxRS0zOTggICAgICAgICAgICAtPiAtMzk4Ci1kZGxvZ2IwMDIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgLT4gLTM4MwotZGRsb2diMDAzIGxvZ2IgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCi1kZGxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKLWRkbG9nYjAwNSBsb2diICAxICAgICAgICAgICAgICAgICAtPiAgMAotZGRsb2diMDA2IGxvZ2IgIDIgICAgICAgICAgICAgICAgIC0+ICAwCi1kZGxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKLWRkbG9nYjAwOCBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAotZGRsb2diMDA5IGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCi1kZGxvZ2IwMTAgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKLWRkbG9nYjAxMSBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgotZGRsb2diMDEyIGxvZ2IgIDMzMyAgICAgICAgICAgICAgIC0+ICAyCi1kZGxvZ2IwMTMgbG9nYiAgOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NAotZGRsb2diMDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0tLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzCi1kZGxvZ2IwMjEgbG9nYiAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IwMjIgbG9nYiAtMUUtMzk4ICAgICAgICAgICAgLT4gLTM5OAotZGRsb2diMDIzIGxvZ2IgLTlFLTM4MyAgICAgICAgICAgIC0+IC0zODMKLWRkbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMwotZGRsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCi1kZGxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKLWRkbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQotZGRsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCi1kZGxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKLWRkbG9nYjAzMCBsb2diIC05RSszODQgICAgICAgICAgICAtPiAgMzg0Ci1kZGxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5Ci0KLS0tIHplcm9zCi1kZGxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTMgbG9nYiAgICAgICAwRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTYgbG9nYiAgICAtMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1kZGxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kZGxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOAotZGRsb2diMTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKLWRkbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4Ci1kZGxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOAotCi0tLSBObWF4LCBObWluLCBOdGlueQotZGRsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgMzg0Ci1kZGxvZ2IxMzIgbG9nYiAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IC0zODMKLWRkbG9nYjEzMyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTM4MwotZGRsb2diMTM0IGxvZ2IgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMzk4Ci0KLWRkbG9nYjEzNSBsb2diICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTM5OAotZGRsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMzgzCi1kZGxvZ2IxMzcgbG9nYiAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0zODMKLWRkbG9nYjEzOCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIDM4NAotCi0tLSBvbmVzCi1kZGxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAotZGRsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKLWRkbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCi0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCi1kZGxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCi1kZGxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCi1kZGxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCi1kZGxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCi1kZGxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0Ci1kZGxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1Ci1kZGxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2Ci1kZGxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3Ci1kZGxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4Ci1kZGxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5Ci1kZGxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAotZGRsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKLWRkbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCi1kZGxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKLWRkbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCi1kZGxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKLWRkbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04Ci1kZGxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03Ci1kZGxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKLWRkbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01Ci1kZGxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00Ci1kZGxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKLWRkbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCi1kZGxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCi1kZGxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQotZGRsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCi1kZGxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKLWRkbG9nYjExMjYgbG9nYiAxRS0zODMgLT4gLTM4MwotCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCi1kZGxvZ2IxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTIKLWRkbG9nYjE0MDEgbG9nYiAxMEUtMiAgICAtPiAtMQotZGRsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCi1kZGxvZ2IxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDEKLWRkbG9nYjE0MDQgbG9nYiAxMDAwMEUtMiAtPiAgMgotZGRsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCi1kZGxvZ2IxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDEKLWRkbG9nYjE0MDcgbG9nYiAxMDAwRS0xICAtPiAgMgotZGRsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCi1kZGxvZ2IxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDEKLWRkbG9nYjE0MTAgbG9nYiAxMDBFMCAgICAtPiAgMgotZGRsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCi1kZGxvZ2IxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQKLWRkbG9nYjE0MTMgbG9nYiAxMEUxICAgICAtPiAgMgotZGRsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCi1kZGxvZ2IxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQKLWRkbG9nYjE0MTYgbG9nYiAxMDAwMEUxICAtPiAgNQotZGRsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCi1kZGxvZ2IxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQKLWRkbG9nYjE0MTkgbG9nYiAxMDAwRTIgICAtPiAgNQotZGRsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2Ci0KLS0tIHNwZWNpYWwgdmFsdWVzCi1kZGxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5Ci1kZGxvZ2I4MjEgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRkbG9nYjgyMiAgbG9nYiAgIE5hTiAgICAgIC0+ICAgTmFOCi1kZGxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkbG9nYjgyNCAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgotZGRsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCi1kZGxvZ2I4MjYgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1NgotZGRsb2diODI3ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKLWRkbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQotCi0tLSBOdWxsIHRlc3QKLWRkbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRMb2dCLmRlY1Rlc3QgLS0gaW50ZWdyYWwgNzU0ciBhZGp1c3RlZCBleHBvbmVudCwgZm9yIGRlY0RvdWJsZXMgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gYmFzaWNzDQorZGRsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RkbG9nYjAwMSBsb2diICAxRS0zOTggICAgICAgICAgICAtPiAtMzk4DQorZGRsb2diMDAyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgIC0+IC0zODMNCitkZGxvZ2IwMDMgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMNCitkZGxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTINCitkZGxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMDYgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMDggbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMDkgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDENCitkZGxvZ2IwMTAgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDENCitkZGxvZ2IwMTEgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDINCitkZGxvZ2IwMTIgbG9nYiAgMzMzICAgICAgICAgICAgICAgLT4gIDINCitkZGxvZ2IwMTMgbG9nYiAgOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NA0KK2RkbG9nYjAxNCBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCisNCistLSBuZWdhdGl2ZXMgYXBwZWFyIHRvIGJlIHRyZWF0ZWQgYXMgcG9zaXRpdmVzDQorZGRsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RkbG9nYjAyMiBsb2diIC0xRS0zOTggICAgICAgICAgICAtPiAtMzk4DQorZGRsb2diMDIzIGxvZ2IgLTlFLTM4MyAgICAgICAgICAgIC0+IC0zODMNCitkZGxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMNCitkZGxvZ2IwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDANCitkZGxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDENCitkZGxvZ2IwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDENCitkZGxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDINCitkZGxvZ2IwMzAgbG9nYiAtOUUrMzg0ICAgICAgICAgICAgLT4gIDM4NA0KK2RkbG9nYjAzMSBsb2diIC1JbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCisNCistLSB6ZXJvcw0KK2RkbG9nYjExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkZGxvZ2IxMTIgbG9nYiAgICAgICAgIC0wICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorZGRsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RkbG9nYjExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkZGxvZ2IxMTUgbG9nYiAgICAgMC4wMDAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorZGRsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RkbG9nYjExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkZGxvZ2IxMTggbG9nYiAgICAgLTBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkZGxvZ2IxMjEgbG9nYiAgIDI2ODI2ODI2OCAgICAgICAgLT4gOA0KK2RkbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4DQorZGRsb2diMTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgNCitkZGxvZ2IxMjQgbG9nYiAgLTEzNDEzNDEzNCAgICAgICAgLT4gOA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZGRsb2diMTMxIGxvZ2IgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgMzg0DQorZGRsb2diMTMyIGxvZ2IgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAtMzgzDQorZGRsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMzgzDQorZGRsb2diMTM0IGxvZ2IgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMzk4DQorDQorZGRsb2diMTM1IGxvZ2IgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMzk4DQorZGRsb2diMTM2IGxvZ2IgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAtMzgzDQorZGRsb2diMTM3IGxvZ2IgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMzgzDQorZGRsb2diMTM4IGxvZ2IgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAgMzg0DQorDQorLS0gb25lcw0KK2RkbG9nYjAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQorZGRsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCitkZGxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KKw0KKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwDQorZGRsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMA0KK2RkbG9nYjExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDENCitkZGxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyDQorZGRsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMw0KK2RkbG9nYjExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQNCitkZGxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1DQorZGRsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNg0KK2RkbG9nYjExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcNCitkZGxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4DQorZGRsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQ0KK2RkbG9nYjExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwDQorZGRsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTENCitkZGxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMg0KK2RkbG9nYjExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQ0KK2RkbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwDQorZGRsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05DQorZGRsb2diMTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgNCitkZGxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03DQorZGRsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02DQorZGRsb2diMTExOSBsb2diIDAuMDAwMDEgLT4gLTUNCitkZGxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00DQorZGRsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zDQorZGRsb2diMTEyMiBsb2diIDAuMDEgLT4gLTINCitkZGxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xDQorZGRsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkNCitkZGxvZ2IxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDANCitkZGxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkNCitkZGxvZ2IxMTI2IGxvZ2IgMUUtMzgzIC0+IC0zODMNCisNCistLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hDQorZGRsb2diMTQwMCBsb2diIDEwRS0zICAgIC0+IC0yDQorZGRsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xDQorZGRsb2diMTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwDQorZGRsb2diMTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxDQorZGRsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyDQorZGRsb2diMTQwNSBsb2diIDEwRS0xICAgIC0+ICAwDQorZGRsb2diMTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxDQorZGRsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyDQorZGRsb2diMTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzDQorZGRsb2diMTQwOSBsb2diIDEwRTAgICAgIC0+ICAxDQorZGRsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyDQorZGRsb2diMTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzDQorZGRsb2diMTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0DQorZGRsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyDQorZGRsb2diMTQxNCBsb2diIDEwMEUxICAgIC0+ICAzDQorZGRsb2diMTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0DQorZGRsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1DQorZGRsb2diMTQxNyBsb2diIDEwRTIgICAgIC0+ICAzDQorZGRsb2diMTQxOCBsb2diIDEwMEUyICAgIC0+ICA0DQorZGRsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1DQorZGRsb2diMTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2DQorDQorLS0gc3BlY2lhbCB2YWx1ZXMNCitkZGxvZ2I4MjAgIGxvZ2IgICBJbmZpbml0eSAtPiAgIEluZmluaXR5DQorZGRsb2diODIxICBsb2diICAgMCAgICAgICAgLT4gIC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZGRsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4NCitkZGxvZ2I4MjMgIGxvZ2IgICBzTmFOICAgICAtPiAgIE5hTiAgICAgSW52YWxpZF9vcGVyYXRpb24NCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQorZGRsb2diODI1ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRsb2diODI2ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYNCitkZGxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NA0KK2RkbG9nYjgyOCAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQ0KKw0KKy0tIE51bGwgdGVzdA0KK2RkbG9nYjkwMCAgbG9nYiAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdAppbmRleCAxYWM2Mzk1Li40NWVhOWI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNYXguZGVjVGVzdApAQCAtMSwzMjIgKzEsMzIyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkTWF4LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZG1heDAwMSBtYXggIC0yICAtMiAgLT4gLTIKLWRkbWF4MDAyIG1heCAgLTIgIC0xICAtPiAtMQotZGRtYXgwMDMgbWF4ICAtMiAgIDAgIC0+ICAwCi1kZG1heDAwNCBtYXggIC0yICAgMSAgLT4gIDEKLWRkbWF4MDA1IG1heCAgLTIgICAyICAtPiAgMgotZGRtYXgwMDYgbWF4ICAtMSAgLTIgIC0+IC0xCi1kZG1heDAwNyBtYXggIC0xICAtMSAgLT4gLTEKLWRkbWF4MDA4IG1heCAgLTEgICAwICAtPiAgMAotZGRtYXgwMDkgbWF4ICAtMSAgIDEgIC0+ICAxCi1kZG1heDAxMCBtYXggIC0xICAgMiAgLT4gIDIKLWRkbWF4MDExIG1heCAgIDAgIC0yICAtPiAgMAotZGRtYXgwMTIgbWF4ICAgMCAgLTEgIC0+ICAwCi1kZG1heDAxMyBtYXggICAwICAgMCAgLT4gIDAKLWRkbWF4MDE0IG1heCAgIDAgICAxICAtPiAgMQotZGRtYXgwMTUgbWF4ICAgMCAgIDIgIC0+ICAyCi1kZG1heDAxNiBtYXggICAxICAtMiAgLT4gIDEKLWRkbWF4MDE3IG1heCAgIDEgIC0xICAtPiAgMQotZGRtYXgwMTggbWF4ICAgMSAgIDAgIC0+ICAxCi1kZG1heDAxOSBtYXggICAxICAgMSAgLT4gIDEKLWRkbWF4MDIwIG1heCAgIDEgICAyICAtPiAgMgotZGRtYXgwMjEgbWF4ICAgMiAgLTIgIC0+ICAyCi1kZG1heDAyMiBtYXggICAyICAtMSAgLT4gIDIKLWRkbWF4MDIzIG1heCAgIDIgICAwICAtPiAgMgotZGRtYXgwMjUgbWF4ICAgMiAgIDEgIC0+ICAyCi1kZG1heDAyNiBtYXggICAyICAgMiAgLT4gIDIKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRkbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMAotZGRtYXgwMzEgbWF4ICAgMCAgICAtMCAgIC0+ICAwCi1kZG1heDAzMiBtYXggICAwICAgIC0wLjAgLT4gIDAKLWRkbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMAotZGRtYXgwMzQgbWF4ICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCi1kZG1heDAzNSBtYXggIC0wICAgIC0wICAgLT4gLTAKLWRkbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wCi1kZG1heDAzNyBtYXggIC0wICAgICAwLjAgLT4gIDAuMAotZGRtYXgwMzggbWF4ICAgMC4wICAgMCAgIC0+ICAwCi1kZG1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMAotZGRtYXgwNDAgbWF4ICAgMC4wICAtMC4wIC0+ICAwLjAKLWRkbWF4MDQxIG1heCAgIDAuMCAgIDAuMCAtPiAgMC4wCi1kZG1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDAKLWRkbWF4MDQzIG1heCAgLTAuMCAgLTAgICAtPiAtMC4wCi1kZG1heDA0NCBtYXggIC0wLjAgIC0wLjAgLT4gLTAuMAotZGRtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjAKLQotZGRtYXgwNTAgbWF4ICAtMEUxICAgMEUxIC0+ICAwRSsxCi1kZG1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzIKLWRkbWF4MDUyIG1heCAgLTBFMiAgIDBFMSAtPiAgMEUrMQotZGRtYXgwNTMgbWF4ICAtMEUxICAgMEUyIC0+ICAwRSsyCi1kZG1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzEKLWRkbWF4MDU1IG1heCAgIDBFMiAgLTBFMiAtPiAgMEUrMgotZGRtYXgwNTYgbWF4ICAgMEUyICAtMEUxIC0+ICAwRSsyCi1kZG1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzEKLQotZGRtYXgwNTggbWF4ICAgMEUxICAgMEUxIC0+ICAwRSsxCi1kZG1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzIKLWRkbWF4MDYwIG1heCAgIDBFMiAgIDBFMSAtPiAgMEUrMgotZGRtYXgwNjEgbWF4ICAgMEUxICAgMEUyIC0+ICAwRSsyCi1kZG1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzEKLWRkbWF4MDYzIG1heCAgLTBFMiAgLTBFMiAtPiAtMEUrMgotZGRtYXgwNjQgbWF4ICAtMEUyICAtMEUxIC0+IC0wRSsxCi1kZG1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzEKLQotLS0gU3BlY2lhbHMKLWRkbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5Ci1kZG1heDA5MSBtYXggIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZGRtYXgwOTIgbWF4ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLWRkbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kZG1heDA5NCBtYXggIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZGRtYXgwOTUgbWF4ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKLWRkbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kZG1heDA5NyBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRtYXgwOTggbWF4IC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZG1heDEwMCBtYXggLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRtYXgxMDEgbWF4IC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZG1heDEwMyBtYXggIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRtYXgxMDQgbWF4ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRkbWF4MTIwIG1heCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwCi1kZG1heDEyMiBtYXggLUluZiAgLTEgICAgIC0+IC0xCi1kZG1heDEyMyBtYXggLUluZiAgLTAgICAgIC0+IC0wCi1kZG1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwCi1kZG1heDEyNSBtYXggLUluZiAgIDEgICAgIC0+ICAxCi1kZG1heDEyNiBtYXggLUluZiAgIDEwMDAgIC0+ICAxMDAwCi1kZG1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRtYXgxMjggbWF4IC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5Ci1kZG1heDEyOSBtYXggLTEwMDAgLUluZiAgIC0+ICAtMTAwMAotZGRtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTEKLWRkbWF4MTMxIG1heCAtMCAgICAtSW5mICAgLT4gIC0wCi1kZG1heDEzMiBtYXggIDAgICAgLUluZiAgIC0+ICAwCi1kZG1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxCi1kZG1heDEzNCBtYXggIDEwMDAgLUluZiAgIC0+ICAxMDAwCi1kZG1heDEzNSBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKLWRkbWF4MTQxIG1heCAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5Ci1kZG1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwCi1kZG1heDE0MyBtYXggIE5hTiAtMSAgICAgIC0+IC0xCi1kZG1heDE0NCBtYXggIE5hTiAtMCAgICAgIC0+IC0wCi1kZG1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwCi1kZG1heDE0NiBtYXggIE5hTiAgMSAgICAgIC0+ICAxCi1kZG1heDE0NyBtYXggIE5hTiAgMTAwMCAgIC0+ICAxMDAwCi1kZG1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQotZGRtYXgxNDkgbWF4ICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kZG1heDE1MCBtYXggLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQotZGRtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMAotZGRtYXgxNTIgbWF4IC0xICAgIE5hTiAgICAtPiAtMQotZGRtYXgxNTMgbWF4IC0wICAgIE5hTiAgICAtPiAtMAotZGRtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMAotZGRtYXgxNTUgbWF4ICAxICAgIE5hTiAgICAtPiAgMQotZGRtYXgxNTYgbWF4ICAxMDAwIE5hTiAgICAtPiAgMTAwMAotZGRtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKLQotZGRtYXgxNjEgbWF4ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjMgbWF4ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjQgbWF4ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjYgbWF4ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjcgbWF4ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNjkgbWF4ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzAgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzIgbWF4IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzMgbWF4IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzUgbWF4ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzYgbWF4ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzggbWF4ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxNzkgbWF4ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kZG1heDE4MSBtYXggIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5Ci1kZG1heDE4MyBtYXggLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZGRtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKLWRkbWF4MTg1IG1heCAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCi1kZG1heDE4NiBtYXggLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKLWRkbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAotCi1kZG1heDE4OCBtYXggLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKLWRkbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05Ci1kZG1heDE5MCBtYXggIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKLQotZGRtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkbWF4MTkyIG1heCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kZG1heDE5MyBtYXggLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KLWRkbWF4MTk1IG1heCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kZG1heDE5NiBtYXggLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkbWF4MTk4IG1heCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kZG1heDE5OSBtYXggIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzCi1kZG1heDIyMSBtYXggMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKLWRkbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAotZGRtYXgyMjMgbWF4IDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKLWRkbWF4MjI0IG1heCAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCi1kZG1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAotZGRtYXgyMjYgbWF4IDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKLWRkbWF4MjI3IG1heCAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCi1kZG1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQotZGRtYXgyMjkgbWF4IDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCi1kZG1heDIzMCBtYXggMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKLWRkbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2Ci1kZG1heDIzMiBtYXggMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgotZGRtYXgyMzMgbWF4IC0xMjM0NTY3ODkxICAxIC0+IDEKLWRkbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxCi1kZG1heDIzNSBtYXggLTEyMzQ1Njc4OTAxIDEgLT4gMQotZGRtYXgyMzYgbWF4IDEgLTEyMzQ1Njc4OTAxIC0+IDEKLWRkbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxCi1kZG1heDIzOCBtYXggMSAtMTIzNDU2Nzg5NiAgLT4gMQotCi0tLSBmcm9tIGV4YW1wbGVzCi1kZG1heDI4MCBtYXggJzMnICAgJzInICAtPiAgJzMnCi1kZG1heDI4MSBtYXggJy0xMCcgJzMnICAtPiAgJzMnCi1kZG1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnCi1kZG1heDI4MyBtYXggJzEnICcxLjAnICAtPiAgJzEnCi1kZG1heDI4NCBtYXggJzcnICdOYU4nICAtPiAgJzcnCi0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQotZGRtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkKLWRkbWF4NDAyIG1heCAgMS4xICAgIDEgICAgICAgLT4gIDEuMQotZGRtYXg0MDMgbWF4ICAxICAgICAgMS4wICAgICAtPiAgMQotZGRtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wCi1kZG1heDQwNSBtYXggIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKLWRkbWF4NDA2IG1heCAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAKLWRkbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTAKLWRkbWF4NDA4IG1heCAgMCAgICAgIDAuMCAgICAgLT4gIDAKLWRkbWF4NDA5IG1heCAgMC4wICAgLTAgICAgICAgLT4gIDAuMAotZGRtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wCi1kZG1heDQxMSBtYXggIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCi1kZG1heDQxMiBtYXggIDAuMCAgIC0wLjAwICAgIC0+ICAwLjAKLWRkbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDAKLWRkbWF4NDE0IG1heCAgMCAgICAgLTAgICAgICAgLT4gIDAKLWRkbWF4NDE1IG1heCAtMC4wICAgLTAgICAgICAgLT4gLTAuMAotZGRtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMAotZGRtYXg0MTcgbWF4IC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKLWRkbWF4NDE4IG1heCAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKLWRkbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQotZGRtYXg0MjAgbWF4IC0xLjAgICAtMSAgICAgICAtPiAtMS4wCi1kZG1heDQyMSBtYXggLTEgICAgIC0xLjEgICAgIC0+IC0xCi1kZG1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAotZGRtYXg0MzEgbWF4ICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKLWRkbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQotZGRtYXg0MzMgbWF4ICAxLjAgICAgMSAgICAgICAtPiAgMQotZGRtYXg0MzQgbWF4ICAwLjEgICAgMS4wICAgICAtPiAgMS4wCi1kZG1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKLWRkbWF4NDM2IG1heCAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKLWRkbWF4NDM3IG1heCAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKLWRkbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDAKLWRkbWF4NDM5IG1heCAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAotZGRtYXg0NDAgbWF4IC0wLjAgICAgMC4wICAgICAtPiAgMC4wCi1kZG1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCi1kZG1heDQ0MiBtYXggLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKLWRkbWF4NDQzIG1heCAtMC4wICAgIDAgICAgICAgLT4gIDAKLWRkbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDAKLWRkbWF4NDQ1IG1heCAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAotZGRtYXg0NDYgbWF4IC0wLjEwMCAtMCAgICAgICAtPiAtMAotZGRtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDAKLWRkbWF4NDQ4IG1heCAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTAKLWRkbWF4NDQ5IG1heCAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQotZGRtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wCi1kZG1heDQ1MSBtYXggLTEuMSAgIC0xICAgICAgIC0+IC0xCi1kZG1heDQ1MyBtYXggLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKLS0tIGxhcmdpZXMKLWRkbWF4NDYwIG1heCAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKLWRkbWF4NDYxIG1heCAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKLWRkbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKLWRkbWF4NDYzIG1heCAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKLWRkbWF4NDY0IG1heCAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKLWRkbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKLWRkbWF4NDY2IG1heCAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKLWRkbWF4NDY3IG1heCAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKLQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCi1kZG1heDQ3MSBtYXggICAgICAxLjAgICAgICAgMC4xICAtPiAxLjAKLWRkbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMAotZGRtYXg0NzMgbWF4ICAgICAxMC4wICAgICAgIDAuMSAgLT4gMTAuMAotZGRtYXg0NzQgbWF4ICAgICAgMC4xICAgICAgMTAuMCAgLT4gMTAuMAotZGRtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwCi1kZG1heDQ3NiBtYXggICAgICAxLjAgICAgICAgMTAwICAtPiAxMDAKLWRkbWF4NDc3IG1heCAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwMDAKLWRkbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDAKLWRkbWF4NDc5IG1heCAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMDAwCi1kZG1heDQ4MCBtYXggICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAwMAotZGRtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwCi1kZG1heDQ4MiBtYXggICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwMDAKLWRkbWF4NDgzIG1heCAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwMDAKLWRkbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDAKLQotLS0gc3Vibm9ybWFscwotZGRtYXg1MTAgbWF4ICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMKLWRkbWF4NTExIG1heCAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbAotZGRtYXg1MTIgbWF4ICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsCi1kZG1heDUxMyBtYXggIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwKLWRkbWF4NTE0IG1heCAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbAotZGRtYXg1MTUgbWF4ICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsCi1kZG1heDUxNiBtYXggIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwKLWRkbWF4NTE3IG1heCAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbAotZGRtYXg1MTggbWF4ICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsCi1kZG1heDUxOSBtYXggIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwKLWRkbWF4NTIwIG1heCAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbAotCi1kZG1heDUzMCBtYXggLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKLWRkbWF4NTMxIG1heCAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAotZGRtYXg1MzIgbWF4IC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCi1kZG1heDUzMyBtYXggLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKLWRkbWF4NTM0IG1heCAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAotZGRtYXg1MzUgbWF4IC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1heDUzNiBtYXggLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKLWRkbWF4NTM3IG1heCAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAotZGRtYXg1MzggbWF4IC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1heDUzOSBtYXggLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKLWRkbWF4NTQwIG1heCAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAotCi0tLSBOdWxsIHRlc3RzCi1kZG1heDkwMCBtYXggMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRtYXg5MDEgbWF4ICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkTWF4LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkZG1heDAwMSBtYXggIC0yICAtMiAgLT4gLTINCitkZG1heDAwMiBtYXggIC0yICAtMSAgLT4gLTENCitkZG1heDAwMyBtYXggIC0yICAgMCAgLT4gIDANCitkZG1heDAwNCBtYXggIC0yICAgMSAgLT4gIDENCitkZG1heDAwNSBtYXggIC0yICAgMiAgLT4gIDINCitkZG1heDAwNiBtYXggIC0xICAtMiAgLT4gLTENCitkZG1heDAwNyBtYXggIC0xICAtMSAgLT4gLTENCitkZG1heDAwOCBtYXggIC0xICAgMCAgLT4gIDANCitkZG1heDAwOSBtYXggIC0xICAgMSAgLT4gIDENCitkZG1heDAxMCBtYXggIC0xICAgMiAgLT4gIDINCitkZG1heDAxMSBtYXggICAwICAtMiAgLT4gIDANCitkZG1heDAxMiBtYXggICAwICAtMSAgLT4gIDANCitkZG1heDAxMyBtYXggICAwICAgMCAgLT4gIDANCitkZG1heDAxNCBtYXggICAwICAgMSAgLT4gIDENCitkZG1heDAxNSBtYXggICAwICAgMiAgLT4gIDINCitkZG1heDAxNiBtYXggICAxICAtMiAgLT4gIDENCitkZG1heDAxNyBtYXggICAxICAtMSAgLT4gIDENCitkZG1heDAxOCBtYXggICAxICAgMCAgLT4gIDENCitkZG1heDAxOSBtYXggICAxICAgMSAgLT4gIDENCitkZG1heDAyMCBtYXggICAxICAgMiAgLT4gIDINCitkZG1heDAyMSBtYXggICAyICAtMiAgLT4gIDINCitkZG1heDAyMiBtYXggICAyICAtMSAgLT4gIDINCitkZG1heDAyMyBtYXggICAyICAgMCAgLT4gIDINCitkZG1heDAyNSBtYXggICAyICAgMSAgLT4gIDINCitkZG1heDAyNiBtYXggICAyICAgMiAgLT4gIDINCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RkbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMA0KK2RkbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMA0KK2RkbWF4MDMyIG1heCAgIDAgICAgLTAuMCAtPiAgMA0KK2RkbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMA0KK2RkbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3Nlbg0KK2RkbWF4MDM1IG1heCAgLTAgICAgLTAgICAtPiAtMA0KK2RkbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wDQorZGRtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjANCitkZG1heDAzOCBtYXggICAwLjAgICAwICAgLT4gIDANCitkZG1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMA0KK2RkbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wDQorZGRtYXgwNDEgbWF4ICAgMC4wICAgMC4wIC0+ICAwLjANCitkZG1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDANCitkZG1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMA0KK2RkbWF4MDQ0IG1heCAgLTAuMCAgLTAuMCAtPiAtMC4wDQorZGRtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjANCisNCitkZG1heDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzENCitkZG1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzINCitkZG1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzENCitkZG1heDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzINCitkZG1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzENCitkZG1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzINCitkZG1heDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzINCitkZG1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzENCisNCitkZG1heDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzENCitkZG1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzINCitkZG1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzINCitkZG1heDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzINCitkZG1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzENCitkZG1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzINCitkZG1heDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzENCitkZG1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzENCisNCistLSBTcGVjaWFscw0KK2RkbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkZG1heDA5MiBtYXggIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZGRtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkZG1heDA5NSBtYXggIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZGRtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG1heDA5OCBtYXggLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG1heDEwMSBtYXggLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG1heDEwNCBtYXggIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRtYXgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwDQorZGRtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQ0KK2RkbWF4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTANCitkZG1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwDQorZGRtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQ0KK2RkbWF4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDANCitkZG1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RkbWF4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwDQorZGRtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTENCitkZG1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMA0KK2RkbWF4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDANCitkZG1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxDQorZGRtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KK2RkbWF4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorDQorLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQorZGRtYXgxNDEgbWF4ICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkNCitkZG1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQorZGRtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQ0KK2RkbWF4MTQ0IG1heCAgTmFOIC0wICAgICAgLT4gLTANCitkZG1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwDQorZGRtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQ0KK2RkbWF4MTQ3IG1heCAgTmFOICAxMDAwICAgLT4gIDEwMDANCitkZG1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RkbWF4MTUwIG1heCAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQorZGRtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KK2RkbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTENCitkZG1heDE1MyBtYXggLTAgICAgTmFOICAgIC0+IC0wDQorZGRtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMA0KK2RkbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDENCitkZG1heDE1NiBtYXggIDEwMDAgTmFOICAgIC0+ICAxMDAwDQorZGRtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCisNCitkZG1heDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkbWF4MTgxIG1heCAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5DQorZGRtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjENCitkZG1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KK2RkbWF4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMw0KK2RkbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNA0KKw0KK2RkbWF4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KK2RkbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05DQorZGRtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorZGRtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTkzIG1heCAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTk2IG1heCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWF4MTk5IG1heCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KK2RkbWF4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMA0KK2RkbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KK2RkbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwDQorZGRtYXgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDANCitkZG1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KK2RkbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQorZGRtYXgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTENCitkZG1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KK2RkbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQ0KK2RkbWF4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KK2RkbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQorZGRtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCitkZG1heDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQ0KK2RkbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxDQorZGRtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDENCitkZG1heDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQ0KK2RkbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxDQorZGRtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDENCisNCistLSBmcm9tIGV4YW1wbGVzDQorZGRtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJw0KK2RkbWF4MjgxIG1heCAnLTEwJyAnMycgIC0+ICAnMycNCitkZG1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnDQorZGRtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJw0KK2RkbWF4Mjg0IG1heCAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQorZGRtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCitkZG1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjENCitkZG1heDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxDQorZGRtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQorZGRtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQorZGRtYXg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMA0KK2RkbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCitkZG1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwDQorZGRtYXg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wDQorZGRtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQorZGRtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KK2RkbWF4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMA0KK2RkbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDANCitkZG1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwDQorZGRtYXg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wDQorZGRtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMA0KK2RkbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQorZGRtYXg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KK2RkbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQ0KK2RkbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KK2RkbWF4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTENCitkZG1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCitkZG1heDQzMSBtYXggIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQ0KK2RkbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KK2RkbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDENCitkZG1heDQzNCBtYXggIDAuMSAgICAxLjAgICAgIC0+ICAxLjANCitkZG1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCitkZG1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwDQorZGRtYXg0MzcgbWF4ICAwICAgICAgMC4xMCAgICAtPiAgMC4xMA0KK2RkbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDANCitkZG1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjANCitkZG1heDQ0MCBtYXggLTAuMCAgICAwLjAgICAgIC0+ICAwLjANCitkZG1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQorZGRtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wDQorZGRtYXg0NDMgbWF4IC0wLjAgICAgMCAgICAgICAtPiAgMA0KK2RkbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDANCitkZG1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjANCitkZG1heDQ0NiBtYXggLTAuMTAwIC0wICAgICAgIC0+IC0wDQorZGRtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDANCitkZG1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQorZGRtYXg0NDkgbWF4IC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQorZGRtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wDQorZGRtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQ0KK2RkbWF4NDUzIG1heCAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KKy0tIGxhcmdpZXMNCitkZG1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQorZGRtYXg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KK2RkbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCitkZG1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQorZGRtYXg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KK2RkbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitkZG1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQorZGRtYXg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KKw0KKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KK2RkbWF4NDcxIG1heCAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEuMA0KK2RkbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMA0KK2RkbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjANCitkZG1heDQ3NCBtYXggICAgICAwLjEgICAgICAxMC4wICAtPiAxMC4wDQorZGRtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwDQorZGRtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwDQorZGRtYXg0NzcgbWF4ICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAwMA0KK2RkbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDANCitkZG1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMA0KK2RkbWF4NDgwIG1heCAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMDAwDQorZGRtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwDQorZGRtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwDQorZGRtYXg0ODMgbWF4ICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAwMA0KK2RkbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDANCisNCistLSBzdWJub3JtYWxzDQorZGRtYXg1MTAgbWF4ICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMNCitkZG1heDUxMSBtYXggIDAuMUUtMzgzICAgICAgICAwICAtPiAgIDFFLTM4NCAgICBTdWJub3JtYWwNCitkZG1heDUxMiBtYXggIDAuMTBFLTM4MyAgICAgICAwICAtPiAgIDEuMEUtMzg0ICBTdWJub3JtYWwNCitkZG1heDUxMyBtYXggIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwNCitkZG1heDUxNCBtYXggIDAuMDFFLTM4MyAgICAgICAwICAtPiAgIDFFLTM4NSAgICBTdWJub3JtYWwNCitkZG1heDUxNSBtYXggIDAuOTk5RS0zODMgICAgICAwICAtPiAgIDkuOTlFLTM4NCBTdWJub3JtYWwNCitkZG1heDUxNiBtYXggIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwNCitkZG1heDUxNyBtYXggIDAuMDA5RS0zODMgICAgICAwICAtPiAgIDlFLTM4NiAgICBTdWJub3JtYWwNCitkZG1heDUxOCBtYXggIDAuMDAxRS0zODMgICAgICAwICAtPiAgIDFFLTM4NiAgICBTdWJub3JtYWwNCitkZG1heDUxOSBtYXggIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwNCitkZG1heDUyMCBtYXggIDAuMDAwMUUtMzgzICAgICAwICAtPiAgIDFFLTM4NyAgICBTdWJub3JtYWwNCisNCitkZG1heDUzMCBtYXggLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDANCitkZG1heDUzMSBtYXggLTAuMUUtMzgzICAgICAgICAwICAtPiAgIDANCitkZG1heDUzMiBtYXggLTAuMTBFLTM4MyAgICAgICAwICAtPiAgIDANCitkZG1heDUzMyBtYXggLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDANCitkZG1heDUzNCBtYXggLTAuMDFFLTM4MyAgICAgICAwICAtPiAgIDANCitkZG1heDUzNSBtYXggLTAuOTk5RS0zODMgICAgICAwICAtPiAgIDANCitkZG1heDUzNiBtYXggLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDANCitkZG1heDUzNyBtYXggLTAuMDA5RS0zODMgICAgICAwICAtPiAgIDANCitkZG1heDUzOCBtYXggLTAuMDAxRS0zODMgICAgICAwICAtPiAgIDANCitkZG1heDUzOSBtYXggLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDANCitkZG1heDU0MCBtYXggLTAuMDAwMUUtMzgzICAgICAwICAtPiAgIDANCisNCistLSBOdWxsIHRlc3RzDQorZGRtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG1heDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1heE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKaW5kZXggMTljM2U5MC4uZWMyYjgzMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWF4TWFnLmRlY1Rlc3QKQEAgLTEsMzA0ICsxLDMwNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZE1heE1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbwotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZGRteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yCi1kZG14ZzAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTIKLWRkbXhnMDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgotZGRteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yCi1kZG14ZzAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDIKLWRkbXhnMDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgotZGRteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xCi1kZG14ZzAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTEKLWRkbXhnMDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQotZGRteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyCi1kZG14ZzAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTIKLWRkbXhnMDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQotZGRteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwCi1kZG14ZzAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDEKLWRkbXhnMDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgotZGRteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yCi1kZG14ZzAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDEKLWRkbXhnMDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQotZGRteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxCi1kZG14ZzAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDIKLWRkbXhnMDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgotZGRteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyCi1kZG14ZzAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDIKLWRkbXhnMDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgotZGRteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyCi0KLS0tIGV4dGVuZGVkIHplcm9zCi1kZG14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDAKLWRkbXhnMDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAotZGRteGcwMzIgbWF4bWFnICAgMCAgICAtMC4wIC0+ICAwCi1kZG14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDAKLWRkbXhnMDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgotZGRteGcwMzUgbWF4bWFnICAtMCAgICAtMCAgIC0+IC0wCi1kZG14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMAotZGRteGcwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKLWRkbXhnMDM4IG1heG1hZyAgIDAuMCAgIDAgICAtPiAgMAotZGRteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjAKLWRkbXhnMDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCi1kZG14ZzA0MSBtYXhtYWcgICAwLjAgICAwLjAgLT4gIDAuMAotZGRteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwCi1kZG14ZzA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAotZGRteGcwNDQgbWF4bWFnICAtMC4wICAtMC4wIC0+IC0wLjAKLWRkbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wCi0KLWRkbXhnMDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQotZGRteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyCi1kZG14ZzA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzEKLWRkbXhnMDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgotZGRteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxCi1kZG14ZzA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzIKLWRkbXhnMDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgotZGRteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxCi0KLWRkbXhnMDU4IG1heG1hZyAgIDBFMSAgIDBFMSAtPiAgMEUrMQotZGRteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCi1kZG14ZzA2MCBtYXhtYWcgICAwRTIgICAwRTEgLT4gIDBFKzIKLWRkbXhnMDYxIG1heG1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMgotZGRteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCi1kZG14ZzA2MyBtYXhtYWcgIC0wRTIgIC0wRTIgLT4gLTBFKzIKLWRkbXhnMDY0IG1heG1hZyAgLTBFMiAgLTBFMSAtPiAtMEUrMQotZGRteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCi0KLS0tIFNwZWNpYWxzCi1kZG14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotZGRteGcwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKLWRkbXhnMDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kZG14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQotZGRteGcwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKLWRkbXhnMDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kZG14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQotZGRteGcwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXhnMDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kZG14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRteGcxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXhnMTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZG14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRteGcxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXhnMTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kZG14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kZG14ZzEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRkbXhnMTIyIG1heG1hZyAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZG14ZzEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotZGRteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRkbXhnMTI1IG1heG1hZyAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZG14ZzEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQotZGRteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXhnMTI4IG1heG1hZyAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQotZGRteGcxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG14ZzEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRteGcxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG14ZzEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRteGcxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKLQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCi1kZG14ZzE0MSBtYXhtYWcgIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQotZGRteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAotZGRteGcxNDMgbWF4bWFnICBOYU4gLTEgICAgICAtPiAtMQotZGRteGcxNDQgbWF4bWFnICBOYU4gLTAgICAgICAtPiAtMAotZGRteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAotZGRteGcxNDYgbWF4bWFnICBOYU4gIDEgICAgICAtPiAgMQotZGRteGcxNDcgbWF4bWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAotZGRteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLWRkbXhnMTQ5IG1heG1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgotZGRteGcxNTAgbWF4bWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKLWRkbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLWRkbXhnMTUyIG1heG1hZyAtMSAgICBOYU4gICAgLT4gLTEKLWRkbXhnMTUzIG1heG1hZyAtMCAgICBOYU4gICAgLT4gLTAKLWRkbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKLWRkbXhnMTU1IG1heG1hZyAgMSAgICBOYU4gICAgLT4gIDEKLWRkbXhnMTU2IG1heG1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKLWRkbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLWRkbXhnMTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRteGcxODEgbWF4bWFnICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQotZGRteGcxODMgbWF4bWFnIC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRkbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCi1kZG14ZzE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgotZGRteGcxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCi1kZG14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKLQotZGRteGcxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5Ci1kZG14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQotZGRteGcxOTAgbWF4bWFnICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5Ci0KLWRkbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kZG14ZzE5MiBtYXhtYWcgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZGRteGcxOTMgbWF4bWFnIC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCi1kZG14ZzE5NSBtYXhtYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZGRteGcxOTYgbWF4bWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRkbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kZG14ZzE5OCBtYXhtYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZGRteGcxOTkgbWF4bWFnICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcwotZGRteGcyMjEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCi1kZG14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKLWRkbXhnMjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCi1kZG14ZzIyNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAotZGRteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKLWRkbXhnMjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCi1kZG14ZzIyNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQotZGRteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKLWRkbXhnMjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQotZGRteGcyMzAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCi1kZG14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgotZGRteGcyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKLWRkbXhnMjMzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMTIzNDU2Nzg5MQotZGRteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxCi1kZG14ZzIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCi1kZG14ZzIzNiBtYXhtYWcgMSAtMTIzNDU2Nzg5MDEgLT4gLTEyMzQ1Njc4OTAxCi1kZG14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYKLWRkbXhnMjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgotCi0tLSBmcm9tIGV4YW1wbGVzCi1kZG14ZzI4MCBtYXhtYWcgJzMnICAgJzInICAtPiAgJzMnCi1kZG14ZzI4MSBtYXhtYWcgJy0xMCcgJzMnICAtPiAgJy0xMCcKLWRkbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKLWRkbXhnMjgzIG1heG1hZyAnMScgJzEuMCcgIC0+ICAnMScKLWRkbXhnMjg0IG1heG1hZyAnNycgJ05hTicgIC0+ICAnNycKLQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCi1kZG14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQotZGRteGc0MDIgbWF4bWFnICAxLjEgICAgMSAgICAgICAtPiAgMS4xCi1kZG14ZzQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCi1kZG14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjAKLWRkbXhnNDA1IG1heG1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMQotZGRteGc0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAotZGRteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMAotZGRteGc0MDggbWF4bWFnICAwICAgICAgMC4wICAgICAtPiAgMAotZGRteGc0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCi1kZG14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjAKLWRkbXhnNDExIG1heG1hZyAgMC4wMCAgLTAuMCAgICAgLT4gIDAuMDAKLWRkbXhnNDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAotZGRteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMAotZGRteGc0MTQgbWF4bWFnICAwICAgICAtMCAgICAgICAtPiAgMAotZGRteGc0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCi1kZG14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAotZGRteGc0MTcgbWF4bWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMDAKLWRkbXhnNDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKLWRkbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMAotZGRteGc0MjAgbWF4bWFnIC0xLjAgICAtMSAgICAgICAtPiAtMS4wCi1kZG14ZzQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKLWRkbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5Ci0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKLWRkbXhnNDMxIG1heG1hZyAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5Ci1kZG14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKLWRkbXhnNDMzIG1heG1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEKLWRkbXhnNDM0IG1heG1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAotZGRteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCi1kZG14ZzQzNiBtYXhtYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCi1kZG14ZzQzNyBtYXhtYWcgIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCi1kZG14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCi1kZG14ZzQzOSBtYXhtYWcgLTAgICAgICAwLjAgICAgIC0+ICAwLjAKLWRkbXhnNDQwIG1heG1hZyAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAotZGRteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAotZGRteGc0NDIgbWF4bWFnIC0wLjAwICAgMC4wICAgICAtPiAgMC4wCi1kZG14ZzQ0MyBtYXhtYWcgLTAuMCAgICAwICAgICAgIC0+ICAwCi1kZG14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCi1kZG14ZzQ0NSBtYXhtYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKLWRkbXhnNDQ2IG1heG1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCi1kZG14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAotZGRteGc0NDggbWF4bWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xMAotZGRteGc0NDkgbWF4bWFnIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCi1kZG14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKLWRkbXhnNDUxIG1heG1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEuMQotZGRteGc0NTMgbWF4bWFnIC1JbmYgICAtMS4xICAgICAtPiAtSW5maW5pdHkKLS0tIGxhcmdpZXMKLWRkbXhnNDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKLWRkbXhnNDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMKLWRkbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDAKLWRkbXhnNDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKLWRkbXhnNDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKLWRkbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKLWRkbXhnNDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKLWRkbXhnNDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDAKLQotLS0gc3Vibm9ybWFscwotZGRteGc1MTAgbWF4bWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAxLjAwRS0zODMKLWRkbXhnNTExIG1heG1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbAotZGRteGc1MTIgbWF4bWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAxLjBFLTM4NCAgU3Vibm9ybWFsCi1kZG14ZzUxMyBtYXhtYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDEuMDBFLTM4NCBTdWJub3JtYWwKLWRkbXhnNTE0IG1heG1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbAotZGRteGc1MTUgbWF4bWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICA5Ljk5RS0zODQgU3Vibm9ybWFsCi1kZG14ZzUxNiBtYXhtYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDkuOUUtMzg1ICBTdWJub3JtYWwKLWRkbXhnNTE3IG1heG1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbAotZGRteGc1MTggbWF4bWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAxRS0zODYgICAgU3Vibm9ybWFsCi1kZG14ZzUxOSBtYXhtYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDlFLTM4NyAgICBTdWJub3JtYWwKLWRkbXhnNTIwIG1heG1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbAotCi1kZG14ZzUzMCBtYXhtYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4MwotZGRteGc1MzEgbWF4bWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCi1kZG14ZzUzMiBtYXhtYWcgLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKLWRkbXhnNTMzIG1heG1hZyAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbAotZGRteGc1MzQgbWF4bWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCi1kZG14ZzUzNSBtYXhtYWcgLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwKLWRkbXhnNTM2IG1heG1hZyAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbAotZGRteGc1MzcgbWF4bWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsCi1kZG14ZzUzOCBtYXhtYWcgLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwKLWRkbXhnNTM5IG1heG1hZyAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbAotZGRteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsCi0KLS0tIE51bGwgdGVzdHMKLWRkbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZE1heE1hZy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtYXhudW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQorLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZGRteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yDQorZGRteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yDQorZGRteGcwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yDQorZGRteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yDQorZGRteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyDQorZGRteGcwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yDQorZGRteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xDQorZGRteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xDQorZGRteGcwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxDQorZGRteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyDQorZGRteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yDQorZGRteGcwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xDQorZGRteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwDQorZGRteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxDQorZGRteGcwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyDQorZGRteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yDQorZGRteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxDQorZGRteGcwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxDQorZGRteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxDQorZGRteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyDQorZGRteGcwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyDQorZGRteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyDQorZGRteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyDQorZGRteGcwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyDQorZGRteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitkZG14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDANCitkZG14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDANCitkZG14ZzAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDANCitkZG14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDANCitkZG14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4NCitkZG14ZzAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTANCitkZG14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMA0KK2RkbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wDQorZGRteGcwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwDQorZGRteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjANCitkZG14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMA0KK2RkbXhnMDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQorZGRteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwDQorZGRteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjANCitkZG14ZzA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KK2RkbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wDQorDQorZGRteGcwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxDQorZGRteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyDQorZGRteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxDQorZGRteGcwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyDQorZGRteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxDQorZGRteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyDQorZGRteGcwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyDQorZGRteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxDQorDQorZGRteGcwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxDQorZGRteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyDQorZGRteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyDQorZGRteGcwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyDQorZGRteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxDQorZGRteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyDQorZGRteGcwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxDQorZGRteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxDQorDQorLS0gU3BlY2lhbHMNCitkZG14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZGRteGcwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitkZG14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQorZGRteGcwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkZG14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRteGcwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRteGcxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRteGcxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RkbXhnMTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCitkZG14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2RkbXhnMTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQorZGRteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCitkZG14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2RkbXhnMTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQorZGRteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkNCitkZG14ZzEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG14ZzEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG14ZzEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KKw0KKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KK2RkbXhnMTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQorZGRteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMA0KK2RkbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTENCitkZG14ZzE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wDQorZGRteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMA0KK2RkbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDENCitkZG14ZzE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQorZGRteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCitkZG14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkZG14ZzE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KK2RkbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCitkZG14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xDQorZGRteGcxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMA0KK2RkbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDANCitkZG14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxDQorZGRteGcxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KK2RkbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQorDQorZGRteGcxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZG14ZzE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQ0KK2RkbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RkbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQorZGRteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjINCitkZG14ZzE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMNCitkZG14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCisNCitkZG14ZzE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkNCitkZG14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQ0KK2RkbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KKw0KK2RkbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkZG14ZzE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG9sZCByb3VuZGluZyBjaGVja3MNCitkZG14ZzIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCitkZG14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCitkZG14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMA0KK2RkbXhnMjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQorZGRteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTANCitkZG14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KK2RkbXhnMjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQorZGRteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCitkZG14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDENCitkZG14ZzIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCitkZG14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5Ng0KK2RkbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2DQorZGRteGcyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxDQorZGRteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxDQorZGRteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQ0KK2RkbXhnMjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDENCitkZG14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYNCitkZG14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYNCisNCistLSBmcm9tIGV4YW1wbGVzDQorZGRteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJw0KK2RkbXhnMjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJw0KK2RkbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScNCitkZG14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnDQorZGRteGcyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3Jw0KKw0KKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCitkZG14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQ0KK2RkbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KK2RkbXhnNDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDENCitkZG14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjANCitkZG14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCitkZG14ZzQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQorZGRteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMA0KK2RkbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDANCitkZG14ZzQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCitkZG14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjANCitkZG14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQorZGRteGc0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQorZGRteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMA0KK2RkbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDANCitkZG14ZzQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCitkZG14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KK2RkbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQorZGRteGc0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KK2RkbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMA0KK2RkbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KK2RkbXhnNDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KK2RkbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQorZGRteGc0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCitkZG14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjENCitkZG14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxDQorZGRteGc0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQorZGRteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xDQorZGRteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMA0KK2RkbXhnNDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCitkZG14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwDQorZGRteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wDQorZGRteGc0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQorZGRteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMA0KK2RkbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMA0KK2RkbXhnNDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDANCitkZG14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwDQorZGRteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wDQorZGRteGc0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCitkZG14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KK2RkbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTANCitkZG14ZzQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCitkZG14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCitkZG14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjENCitkZG14ZzQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KKy0tIGxhcmdpZXMNCitkZG14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQorZGRteGc0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KK2RkbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCitkZG14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQorZGRteGc0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KK2RkbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitkZG14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQorZGRteGc0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KKw0KKy0tIHN1Ym5vcm1hbHMNCitkZG14ZzUxMCBtYXhtYWcgIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDEuMDBFLTM4Mw0KK2RkbXhnNTExIG1heG1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMUUtMzg0ICAgIFN1Ym5vcm1hbA0KK2RkbXhnNTEyIG1heG1hZyAgMC4xMEUtMzgzICAgICAgIDAgIC0+ICAgMS4wRS0zODQgIFN1Ym5vcm1hbA0KK2RkbXhnNTEzIG1heG1hZyAgMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAgMS4wMEUtMzg0IFN1Ym5vcm1hbA0KK2RkbXhnNTE0IG1heG1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMUUtMzg1ICAgIFN1Ym5vcm1hbA0KK2RkbXhnNTE1IG1heG1hZyAgMC45OTlFLTM4MyAgICAgIDAgIC0+ICAgOS45OUUtMzg0IFN1Ym5vcm1hbA0KK2RkbXhnNTE2IG1heG1hZyAgMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAgOS45RS0zODUgIFN1Ym5vcm1hbA0KK2RkbXhnNTE3IG1heG1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgOUUtMzg2ICAgIFN1Ym5vcm1hbA0KK2RkbXhnNTE4IG1heG1hZyAgMC4wMDFFLTM4MyAgICAgIDAgIC0+ICAgMUUtMzg2ICAgIFN1Ym5vcm1hbA0KK2RkbXhnNTE5IG1heG1hZyAgMC4wMDA5RS0zODMgICAgIDAgIC0+ICAgOUUtMzg3ICAgIFN1Ym5vcm1hbA0KK2RkbXhnNTIwIG1heG1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMUUtMzg3ICAgIFN1Ym5vcm1hbA0KKw0KK2RkbXhnNTMwIG1heG1hZyAtMS4wMEUtMzgzICAgICAgIDAgIC0+ICAtMS4wMEUtMzgzDQorZGRteGc1MzEgbWF4bWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsDQorZGRteGc1MzIgbWF4bWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsDQorZGRteGc1MzMgbWF4bWFnIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gIC0xLjAwRS0zODQgU3Vibm9ybWFsDQorZGRteGc1MzQgbWF4bWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsDQorZGRteGc1MzUgbWF4bWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gIC05Ljk5RS0zODQgU3Vibm9ybWFsDQorZGRteGc1MzYgbWF4bWFnIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gIC05LjlFLTM4NSAgU3Vibm9ybWFsDQorZGRteGc1MzcgbWF4bWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsDQorZGRteGc1MzggbWF4bWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gIC0xRS0zODYgICAgU3Vibm9ybWFsDQorZGRteGc1MzkgbWF4bWFnIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gIC05RS0zODcgICAgU3Vibm9ybWFsDQorZGRteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkbXhnOTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRteGc5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW4uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CmluZGV4IGViOTQyZmYuLjljZTQyODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbi5kZWNUZXN0CkBAIC0xLDMwOSArMSwzMDkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRNaW4uZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZwotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MKLWRkbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMgotZGRtaW4wMDIgbWluICAtMiAgLTEgIC0+IC0yCi1kZG1pbjAwMyBtaW4gIC0yICAgMCAgLT4gLTIKLWRkbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMgotZGRtaW4wMDUgbWluICAtMiAgIDIgIC0+IC0yCi1kZG1pbjAwNiBtaW4gIC0xICAtMiAgLT4gLTIKLWRkbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQotZGRtaW4wMDggbWluICAtMSAgIDAgIC0+IC0xCi1kZG1pbjAwOSBtaW4gIC0xICAgMSAgLT4gLTEKLWRkbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQotZGRtaW4wMTEgbWluICAgMCAgLTIgIC0+IC0yCi1kZG1pbjAxMiBtaW4gICAwICAtMSAgLT4gLTEKLWRkbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMAotZGRtaW4wMTQgbWluICAgMCAgIDEgIC0+ICAwCi1kZG1pbjAxNSBtaW4gICAwICAgMiAgLT4gIDAKLWRkbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMgotZGRtaW4wMTcgbWluICAgMSAgLTEgIC0+IC0xCi1kZG1pbjAxOCBtaW4gICAxICAgMCAgLT4gIDAKLWRkbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQotZGRtaW4wMjAgbWluICAgMSAgIDIgIC0+ICAxCi1kZG1pbjAyMSBtaW4gICAyICAtMiAgLT4gLTIKLWRkbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQotZGRtaW4wMjMgbWluICAgMiAgIDAgIC0+ICAwCi1kZG1pbjAyNSBtaW4gICAyICAgMSAgLT4gIDEKLWRkbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMgotCi0tLSBleHRlbmRlZCB6ZXJvcwotZGRtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwCi1kZG1pbjAzMSBtaW4gICAwICAgIC0wICAgLT4gLTAKLWRkbWluMDMyIG1pbiAgIDAgICAgLTAuMCAtPiAtMC4wCi1kZG1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMAotZGRtaW4wMzQgbWluICAtMCAgICAgMCAgIC0+IC0wCi1kZG1pbjAzNSBtaW4gIC0wICAgIC0wICAgLT4gLTAKLWRkbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMAotZGRtaW4wMzcgbWluICAtMCAgICAgMC4wIC0+IC0wCi1kZG1pbjAzOCBtaW4gICAwLjAgICAwICAgLT4gIDAuMAotZGRtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wCi1kZG1pbjA0MCBtaW4gICAwLjAgIC0wLjAgLT4gLTAuMAotZGRtaW4wNDEgbWluICAgMC4wICAgMC4wIC0+ICAwLjAKLWRkbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wCi1kZG1pbjA0MyBtaW4gIC0wLjAgIC0wICAgLT4gLTAKLWRkbWluMDQ0IG1pbiAgLTAuMCAgLTAuMCAtPiAtMC4wCi1kZG1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMAotCi1kZG1pbjA0NiBtaW4gICAwRTEgIC0wRTEgLT4gLTBFKzEKLWRkbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQotZGRtaW4wNDggbWluICAgMEUyICAgMEUxIC0+ICAwRSsxCi1kZG1pbjA0OSBtaW4gICAwRTEgICAwRTIgLT4gIDBFKzEKLWRkbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMwotZGRtaW4wNTEgbWluICAtMEUyICAtMEUzIC0+IC0wRSszCi0KLS0tIFNwZWNpYWxzCi1kZG1pbjA5MCBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtaW4wOTEgbWluICBJbmYgIC0xMDAwICAtPiAtMTAwMAotZGRtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQotZGRtaW4wOTMgbWluICBJbmYgIC0wICAgICAtPiAtMAotZGRtaW4wOTQgbWluICBJbmYgICAwICAgICAtPiAgMAotZGRtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQotZGRtaW4wOTYgbWluICBJbmYgICAxMDAwICAtPiAgMTAwMAotZGRtaW4wOTcgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDAKLWRkbWluMDk5IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZG1pbjEwMCBtaW4gLTEgICAgIEluZiAgIC0+IC0xCi1kZG1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wCi1kZG1pbjEwMiBtaW4gIDAgICAgIEluZiAgIC0+ICAwCi1kZG1pbjEwMyBtaW4gIDEgICAgIEluZiAgIC0+ICAxCi1kZG1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwCi1kZG1pbjEwNSBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kZG1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtaW4xMjEgbWluIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRkbWluMTIyIG1pbiAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZG1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotZGRtaW4xMjQgbWluIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRkbWluMTI1IG1pbiAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZG1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQotZGRtaW4xMjcgbWluIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRkbWluMTI4IG1pbiAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtaW4xMzAgbWluIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbWluMTMxIG1pbiAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtaW4xMzMgbWluICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbWluMTM0IG1pbiAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKLWRkbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQotZGRtaW4xNDIgbWluICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKLWRkbWluMTQzIG1pbiAgTmFOIC0xICAgICAgLT4gIC0xCi1kZG1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMAotZGRtaW4xNDUgbWluICBOYU4gIDAgICAgICAtPiAgMAotZGRtaW4xNDYgbWluICBOYU4gIDEgICAgICAtPiAgMQotZGRtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMAotZGRtaW4xNDggbWluICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLWRkbWluMTQ5IG1pbiAgTmFOICBOYU4gICAgLT4gIE5hTgotZGRtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKLWRkbWluMTUxIG1pbiAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLWRkbWluMTUyIG1pbiAtMSAgIC1OYU4gICAgLT4gLTEKLWRkbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTAKLWRkbWluMTU0IG1pbiAgMCAgIC1OYU4gICAgLT4gIDAKLWRkbWluMTU1IG1pbiAgMSAgICBOYU4gICAgLT4gIDEKLWRkbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDAKLWRkbWluMTU3IG1pbiAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLWRkbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTYyIG1pbiAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTYzIG1pbiAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY1IG1pbiAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY2IG1pbiAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY4IG1pbiAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTY5IG1pbiAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTcxIG1pbiAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTcyIG1pbiAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc0IG1pbiAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc1IG1pbiAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc3IG1pbiAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc4IG1pbiAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtaW4xODIgbWluIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCi1kZG1pbjE4MyBtaW4gIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRkbWluMTg0IG1pbiAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQotZGRtaW4xODUgbWluICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgotZGRtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCi1kZG1pbjE4NyBtaW4gLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0Ci0KLWRkbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKLWRkbWluMTg5IG1pbiAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQotZGRtaW4xOTAgbWluICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQotCi1kZG1pbjE5MSBtaW4gIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZGRtaW4xOTIgbWluICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZG1pbjE5NCBtaW4gIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgotZGRtaW4xOTUgbWluICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZG1pbjE5NyBtaW4gIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZGRtaW4xOTggbWluICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MKLWRkbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwCi1kZG1pbjIyMiBtaW4gMSAtMTIzNDU2NzgwMDAgIC0+IC0xMjM0NTY3ODAwMAotZGRtaW4yMjMgbWluIC0xMjM0NTY3ODAwICAxICAtPiAtMTIzNDU2NzgwMAotZGRtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMAotZGRtaW4yMjUgbWluIC0xMjM0NTY3ODkwICAxICAtPiAtMTIzNDU2Nzg5MAotZGRtaW4yMjYgbWluIDEgLTEyMzQ1Njc4OTAgICAtPiAtMTIzNDU2Nzg5MAotZGRtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQotZGRtaW4yMjggbWluIDEgLTEyMzQ1Njc4OTEgICAtPiAtMTIzNDU2Nzg5MQotZGRtaW4yMjkgbWluIC0xMjM0NTY3ODkwMSAxICAtPiAtMTIzNDU2Nzg5MDEKLWRkbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxCi1kZG1pbjIzMSBtaW4gLTEyMzQ1Njc4OTYgIDEgIC0+IC0xMjM0NTY3ODk2Ci1kZG1pbjIzMiBtaW4gMSAtMTIzNDU2Nzg5NiAgIC0+IC0xMjM0NTY3ODk2Ci1kZG1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDEKLWRkbWluMjM0IG1pbiAxIDEyMzQ1Njc4OTEgICAgLT4gMQotZGRtaW4yMzUgbWluIDEyMzQ1Njc4OTAxIDEgICAtPiAxCi1kZG1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDEKLWRkbWluMjM3IG1pbiAxMjM0NTY3ODk2ICAxICAgLT4gMQotZGRtaW4yMzggbWluIDEgMTIzNDU2Nzg5NiAgICAtPiAxCi0KLS0tIGZyb20gZXhhbXBsZXMKLWRkbWluMjgwIG1pbiAnMycgICAnMicgIC0+ICAnMicKLWRkbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJwotZGRtaW4yODIgbWluICcxLjAnICcxJyAgLT4gICcxLjAnCi1kZG1pbjI4MyBtaW4gJzEnICcxLjAnICAtPiAgJzEuMCcKLWRkbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycKLQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCi1kZG1pbjQwMSBtaW4gIEluZiAgICAxLjEgICAgIC0+ICAxLjEKLWRkbWluNDAyIG1pbiAgMS4xICAgIDEgICAgICAgLT4gIDEKLWRkbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAotZGRtaW40MDQgbWluICAxLjAgICAgMC4xICAgICAtPiAgMC4xCi1kZG1pbjQwNSBtaW4gIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCi1kZG1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAotZGRtaW40MDcgbWluICAwLjEwICAgMCAgICAgICAtPiAgMAotZGRtaW40MDggbWluICAwICAgICAgMC4wICAgICAtPiAgMC4wCi1kZG1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wCi1kZG1pbjQxMCBtaW4gIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKLWRkbWluNDExIG1pbiAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAotZGRtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAotZGRtaW40MTMgbWluICAwICAgICAtMC4wICAgICAtPiAtMC4wCi1kZG1pbjQxNCBtaW4gIDAgICAgIC0wICAgICAgIC0+IC0wCi1kZG1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wCi1kZG1pbjQxNiBtaW4gLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMAotZGRtaW40MTcgbWluIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMAotZGRtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xCi1kZG1pbjQxOSBtaW4gLTAuMSAgIC0xLjAgICAgIC0+IC0xLjAKLWRkbWluNDIwIG1pbiAtMS4wICAgLTEgICAgICAgLT4gLTEKLWRkbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQotZGRtaW40MjMgbWluIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAotZGRtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xCi1kZG1pbjQzMiBtaW4gIDEgICAgICAxLjEgICAgIC0+ICAxCi1kZG1pbjQzMyBtaW4gIDEuMCAgICAxICAgICAgIC0+ICAxLjAKLWRkbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQotZGRtaW40MzUgbWluICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAotZGRtaW40MzYgbWluICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKLWRkbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDAKLWRkbWluNDM4IG1pbiAgMC4wICAgIDAgICAgICAgLT4gIDAuMAotZGRtaW40MzkgbWluIC0wICAgICAgMC4wICAgICAtPiAtMAotZGRtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCi1kZG1pbjQ0MSBtaW4gLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKLWRkbWluNDQyIG1pbiAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKLWRkbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMAotZGRtaW40NDQgbWluIC0wICAgICAgMCAgICAgICAtPiAtMAotZGRtaW40NDUgbWluIC0wICAgICAtMC4wICAgICAtPiAtMAotZGRtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKLWRkbWluNDQ3IG1pbiAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKLWRkbWluNDQ4IG1pbiAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQotZGRtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wCi1kZG1pbjQ1MCBtaW4gLTEgICAgIC0xLjAgICAgIC0+IC0xCi1kZG1pbjQ1MSBtaW4gLTEuMSAgIC0xICAgICAgIC0+IC0xLjEKLWRkbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5Ci0tLSBsYXJnaWVzCi1kZG1pbjQ2MCBtaW4gIDEwMDAgICAxRSszICAgIC0+ICAxMDAwCi1kZG1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCi1kZG1pbjQ2MiBtaW4gIDEwMDAgIC0xRSszICAgIC0+IC0xRSszCi1kZG1pbjQ2MyBtaW4gIDFFKzMgIC0zODQgICAgLT4gLTM4NAotZGRtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQKLWRkbWluNDY1IG1pbiAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKLWRkbWluNDY2IG1pbiAtMzg0ICAtMUUrMyAgICAtPiAtMUUrMwotZGRtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszCi0KLS0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgotZGRtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xCi1kZG1pbjQ3MiBtaW4gICAgICAwLjEgICAgICAgMS4wICAtPiAwLjEKLWRkbWluNDczIG1pbiAgICAgMTAuMCAgICAgICAwLjEgIC0+IDAuMQotZGRtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xCi1kZG1pbjQ3NSBtaW4gICAgICAxMDAgICAgICAgMS4wICAtPiAxLjAKLWRkbWluNDc2IG1pbiAgICAgIDEuMCAgICAgICAxMDAgIC0+IDEuMAotZGRtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMAotZGRtaW40NzggbWluICAgICAxMC4wICAgICAgMTAwMCAgLT4gMTAuMAotZGRtaW40NzkgbWluICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMTAwLjAKLWRkbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wCi1kZG1pbjQ4MSBtaW4gICAxMDAwMDAgICAgMTAwMC4wICAtPiAxMDAwLjAKLWRkbWluNDgyIG1pbiAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IDEwMDAuMAotZGRtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMAotZGRtaW40ODQgbWluICAxMDAwMC4wICAgMTAwMDAwMCAgLT4gMTAwMDAuMAotCi0tLSBzdWJub3JtYWxzCi1kZG1pbjUxMCBtaW4gIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKLWRkbWluNTExIG1pbiAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAotZGRtaW41MTIgbWluICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCi1kZG1pbjUxMyBtaW4gIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKLWRkbWluNTE0IG1pbiAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAotZGRtaW41MTUgbWluICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1pbjUxNiBtaW4gIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKLWRkbWluNTE3IG1pbiAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAotZGRtaW41MTggbWluICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1pbjUxOSBtaW4gIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKLWRkbWluNTIwIG1pbiAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAotCi1kZG1pbjUzMCBtaW4gLTEuMDBFLTM4MyAgICAgICAwICAtPiAgLTEuMDBFLTM4MwotZGRtaW41MzEgbWluIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsCi1kZG1pbjUzMiBtaW4gLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKLWRkbWluNTMzIG1pbiAtMC4xMDBFLTM4MyAgICAgIDAgIC0+ICAtMS4wMEUtMzg0IFN1Ym5vcm1hbAotZGRtaW41MzQgbWluIC0wLjAxRS0zODMgICAgICAgMCAgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCi1kZG1pbjUzNSBtaW4gLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwKLWRkbWluNTM2IG1pbiAtMC4wOTlFLTM4MyAgICAgIDAgIC0+ICAtOS45RS0zODUgIFN1Ym5vcm1hbAotZGRtaW41MzcgbWluIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gIC05RS0zODYgICAgU3Vibm9ybWFsCi1kZG1pbjUzOCBtaW4gLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwKLWRkbWluNTM5IG1pbiAtMC4wMDA5RS0zODMgICAgIDAgIC0+ICAtOUUtMzg3ICAgIFN1Ym5vcm1hbAotZGRtaW41NDAgbWluIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gIC0xRS0zODcgICAgU3Vibm9ybWFsCi0KLQotLS0gTnVsbCB0ZXN0cwotZGRtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRtaW45MDEgbWluICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRNaW4uZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RkbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMg0KK2RkbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMg0KK2RkbWluMDAzIG1pbiAgLTIgICAwICAtPiAtMg0KK2RkbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMg0KK2RkbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMg0KK2RkbWluMDA2IG1pbiAgLTEgIC0yICAtPiAtMg0KK2RkbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQ0KK2RkbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQ0KK2RkbWluMDA5IG1pbiAgLTEgICAxICAtPiAtMQ0KK2RkbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQ0KK2RkbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMg0KK2RkbWluMDEyIG1pbiAgIDAgIC0xICAtPiAtMQ0KK2RkbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMA0KK2RkbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMA0KK2RkbWluMDE1IG1pbiAgIDAgICAyICAtPiAgMA0KK2RkbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMg0KK2RkbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQ0KK2RkbWluMDE4IG1pbiAgIDEgICAwICAtPiAgMA0KK2RkbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQ0KK2RkbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQ0KK2RkbWluMDIxIG1pbiAgIDIgIC0yICAtPiAtMg0KK2RkbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQ0KK2RkbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMA0KK2RkbWluMDI1IG1pbiAgIDIgICAxICAtPiAgMQ0KK2RkbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMg0KKw0KKy0tIGV4dGVuZGVkIHplcm9zDQorZGRtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwDQorZGRtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wDQorZGRtaW4wMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjANCitkZG1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMA0KK2RkbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMA0KK2RkbWluMDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMA0KK2RkbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMA0KK2RkbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMA0KK2RkbWluMDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wDQorZGRtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wDQorZGRtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjANCitkZG1pbjA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMA0KK2RkbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wDQorZGRtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wDQorZGRtaW4wNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjANCitkZG1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMA0KKw0KK2RkbWluMDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KK2RkbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQ0KK2RkbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KK2RkbWluMDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KK2RkbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMw0KK2RkbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KKw0KKy0tIFNwZWNpYWxzDQorZGRtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1pbjA5MSBtaW4gIEluZiAgLTEwMDAgIC0+IC0xMDAwDQorZGRtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQ0KK2RkbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTANCitkZG1pbjA5NCBtaW4gIEluZiAgIDAgICAgIC0+ICAwDQorZGRtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQ0KK2RkbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDANCitkZG1pbjA5NyBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDANCitkZG1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTAwIG1pbiAtMSAgICAgSW5mICAgLT4gLTENCitkZG1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wDQorZGRtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMA0KK2RkbWluMTAzIG1pbiAgMSAgICAgSW5mICAgLT4gIDENCitkZG1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorZGRtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkZG1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZGRtaW4xMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCitkZG1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZGRtaW4xMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkZG1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZGRtaW4xMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRtaW4xMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRtaW4xMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KKw0KKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KK2RkbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KK2RkbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQorZGRtaW4xNDMgbWluICBOYU4gLTEgICAgICAtPiAgLTENCitkZG1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMA0KK2RkbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDANCitkZG1pbjE0NiBtaW4gIE5hTiAgMSAgICAgIC0+ICAxDQorZGRtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KK2RkbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQorZGRtaW4xNDkgbWluICBOYU4gIE5hTiAgICAtPiAgTmFODQorZGRtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCitkZG1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwDQorZGRtaW4xNTIgbWluIC0xICAgLU5hTiAgICAtPiAtMQ0KK2RkbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTANCitkZG1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwDQorZGRtaW4xNTUgbWluICAxICAgIE5hTiAgICAtPiAgMQ0KK2RkbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDANCitkZG1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KKw0KK2RkbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KK2RkbWluMTgzIG1pbiAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkZG1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCitkZG1pbjE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQorZGRtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zDQorZGRtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KKw0KK2RkbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCitkZG1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkNCitkZG1pbjE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorZGRtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE5MiBtaW4gIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE5NSBtaW4gIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZG1pbjE5OCBtaW4gIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KK2RkbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwDQorZGRtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDANCitkZG1pbjIyMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xMjM0NTY3ODAwDQorZGRtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMA0KK2RkbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTANCitkZG1pbjIyNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwDQorZGRtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQ0KK2RkbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTENCitkZG1pbjIyOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xMjM0NTY3ODkwMQ0KK2RkbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxDQorZGRtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5Ng0KK2RkbWluMjMyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYNCitkZG1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDENCitkZG1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDENCitkZG1pbjIzNSBtaW4gMTIzNDU2Nzg5MDEgMSAgIC0+IDENCitkZG1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkZG1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDENCitkZG1pbjIzOCBtaW4gMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCistLSBmcm9tIGV4YW1wbGVzDQorZGRtaW4yODAgbWluICczJyAgICcyJyAgLT4gICcyJw0KK2RkbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJw0KK2RkbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJw0KK2RkbWluMjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJw0KK2RkbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQorZGRtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQorZGRtaW40MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQ0KK2RkbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMA0KK2RkbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KK2RkbWluNDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCitkZG1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMA0KK2RkbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDANCitkZG1pbjQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjANCitkZG1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wDQorZGRtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQorZGRtaW40MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQorZGRtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMA0KK2RkbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KK2RkbWluNDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTANCitkZG1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wDQorZGRtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCitkZG1pbjQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQorZGRtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQorZGRtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wDQorZGRtaW40MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KK2RkbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KK2RkbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQorZGRtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQorZGRtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQ0KK2RkbWluNDMzIG1pbiAgMS4wICAgIDEgICAgICAgLT4gIDEuMA0KK2RkbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KK2RkbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTANCitkZG1pbjQzNiBtaW4gIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMA0KK2RkbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDANCitkZG1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjANCitkZG1pbjQzOSBtaW4gLTAgICAgICAwLjAgICAgIC0+IC0wDQorZGRtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQorZGRtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wDQorZGRtaW40NDIgbWluIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMA0KK2RkbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KK2RkbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTANCitkZG1pbjQ0NSBtaW4gLTAgICAgIC0wLjAgICAgIC0+IC0wDQorZGRtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCitkZG1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwDQorZGRtaW40NDggbWluIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQorZGRtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQorZGRtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQ0KK2RkbWluNDUxIG1pbiAtMS4xICAgLTEgICAgICAgLT4gLTEuMQ0KK2RkbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5DQorLS0gbGFyZ2llcw0KK2RkbWluNDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCitkZG1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQorZGRtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KK2RkbWluNDYzIG1pbiAgMUUrMyAgLTM4NCAgICAtPiAtMzg0DQorZGRtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQNCitkZG1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszDQorZGRtaW40NjYgbWluIC0zODQgIC0xRSszICAgIC0+IC0xRSszDQorZGRtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszDQorDQorLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQorZGRtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xDQorZGRtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xDQorZGRtaW40NzMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xDQorZGRtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xDQorZGRtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wDQorZGRtaW40NzYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wDQorZGRtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMA0KK2RkbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjANCitkZG1pbjQ3OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMA0KK2RkbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wDQorZGRtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wDQorZGRtaW40ODIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wDQorZGRtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMA0KK2RkbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjANCisNCistLSBzdWJub3JtYWxzDQorZGRtaW41MTAgbWluICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtaW41MTEgbWluICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQorZGRtaW41MTIgbWluICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtaW41MTMgbWluICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtaW41MTQgbWluICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtaW41MTUgbWluICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtaW41MTYgbWluICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtaW41MTcgbWluICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtaW41MTggbWluICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtaW41MTkgbWluICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQorZGRtaW41MjAgbWluICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQorDQorZGRtaW41MzAgbWluIC0xLjAwRS0zODMgICAgICAgMCAgLT4gIC0xLjAwRS0zODMNCitkZG1pbjUzMSBtaW4gLTAuMUUtMzgzICAgICAgICAwICAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwNCitkZG1pbjUzMiBtaW4gLTAuMTBFLTM4MyAgICAgICAwICAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwNCitkZG1pbjUzMyBtaW4gLTAuMTAwRS0zODMgICAgICAwICAtPiAgLTEuMDBFLTM4NCBTdWJub3JtYWwNCitkZG1pbjUzNCBtaW4gLTAuMDFFLTM4MyAgICAgICAwICAtPiAgLTFFLTM4NSAgICBTdWJub3JtYWwNCitkZG1pbjUzNSBtaW4gLTAuOTk5RS0zODMgICAgICAwICAtPiAgLTkuOTlFLTM4NCBTdWJub3JtYWwNCitkZG1pbjUzNiBtaW4gLTAuMDk5RS0zODMgICAgICAwICAtPiAgLTkuOUUtMzg1ICBTdWJub3JtYWwNCitkZG1pbjUzNyBtaW4gLTAuMDA5RS0zODMgICAgICAwICAtPiAgLTlFLTM4NiAgICBTdWJub3JtYWwNCitkZG1pbjUzOCBtaW4gLTAuMDAxRS0zODMgICAgICAwICAtPiAgLTFFLTM4NiAgICBTdWJub3JtYWwNCitkZG1pbjUzOSBtaW4gLTAuMDAwOUUtMzgzICAgICAwICAtPiAgLTlFLTM4NyAgICBTdWJub3JtYWwNCitkZG1pbjU0MCBtaW4gLTAuMDAwMUUtMzgzICAgICAwICAtPiAgLTFFLTM4NyAgICBTdWJub3JtYWwNCisNCisNCistLSBOdWxsIHRlc3RzDQorZGRtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW5NYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CmluZGV4IDEwMTJmMWUuLjU1MzdjYzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbk1hZy5kZWNUZXN0CkBAIC0xLDI5MyArMSwyOTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRNaW5NYWcuZGVjVGVzdCAtLSBkZWNEb3VibGUgbWlubnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZwotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MKLWRkbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgotZGRtbmcwMDIgbWlubWFnICAtMiAgLTEgIC0+IC0xCi1kZG1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDAKLWRkbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQotZGRtbmcwMDUgbWlubWFnICAtMiAgIDIgIC0+IC0yCi1kZG1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTEKLWRkbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQotZGRtbmcwMDggbWlubWFnICAtMSAgIDAgIC0+ICAwCi1kZG1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTEKLWRkbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQotZGRtbmcwMTEgbWlubWFnICAgMCAgLTIgIC0+ICAwCi1kZG1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDAKLWRkbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAotZGRtbmcwMTQgbWlubWFnICAgMCAgIDEgIC0+ICAwCi1kZG1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDAKLWRkbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQotZGRtbmcwMTcgbWlubWFnICAgMSAgLTEgIC0+IC0xCi1kZG1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDAKLWRkbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQotZGRtbmcwMjAgbWlubWFnICAgMSAgIDIgIC0+ICAxCi1kZG1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTIKLWRkbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQotZGRtbmcwMjMgbWlubWFnICAgMiAgIDAgIC0+ICAwCi1kZG1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDEKLWRkbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgotCi0tLSBleHRlbmRlZCB6ZXJvcwotZGRtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwCi1kZG1uZzAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTAKLWRkbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCi1kZG1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMAotZGRtbmcwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wCi1kZG1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKLWRkbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMAotZGRtbmcwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wCi1kZG1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAotZGRtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wCi1kZG1uZzA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMAotZGRtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKLWRkbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wCi1kZG1uZzA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTAKLWRkbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCi1kZG1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMAotCi1kZG1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzEKLWRkbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQotZGRtbmcwNDggbWlubWFnICAgMEUyICAgMEUxIC0+ICAwRSsxCi1kZG1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzEKLWRkbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMwotZGRtbmcwNTEgbWlubWFnICAtMEUyICAtMEUzIC0+IC0wRSszCi0KLS0tIFNwZWNpYWxzCi1kZG1uZzA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMAotZGRtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQotZGRtbmcwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAotZGRtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMAotZGRtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQotZGRtbmcwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAotZGRtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDAKLWRkbW5nMDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZG1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xCi1kZG1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wCi1kZG1uZzEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCi1kZG1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxCi1kZG1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwCi1kZG1uZzEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kZG1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtbmcxMjEgbWlubWFnIC1JbmYgIC0xMDAwICAtPiAtMTAwMAotZGRtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQotZGRtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMAotZGRtbmcxMjQgbWlubWFnIC1JbmYgICAwICAgICAtPiAgMAotZGRtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQotZGRtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMAotZGRtbmcxMjcgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRkbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwCi1kZG1uZzEzMCBtaW5tYWcgLTEgICAgLUluZiAgIC0+IC0xCi1kZG1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCi1kZG1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwCi1kZG1uZzEzMyBtaW5tYWcgIDEgICAgLUluZiAgIC0+ICAxCi1kZG1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCi1kZG1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKLWRkbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQotZGRtbmcxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKLWRkbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xCi1kZG1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMAotZGRtbmcxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAotZGRtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQotZGRtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMAotZGRtbmcxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLWRkbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTgotZGRtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKLWRkbW5nMTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLWRkbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTEKLWRkbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTAKLWRkbW5nMTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKLWRkbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDEKLWRkbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDAKLWRkbW5nMTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLWRkbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTYyIG1pbm1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY1IG1pbm1hZyAtc05hTiAgMCAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY4IG1pbm1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTcxIG1pbm1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc0IG1pbm1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc3IG1pbm1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRtbmcxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCi1kZG1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRkbW5nMTg0IG1pbm1hZyAgTmFOMSAgICBOYU41NCAtPiAgTmFOMQotZGRtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgotZGRtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zCi1kZG1uZzE4NyBtaW5tYWcgLU5hTjQ0ICAgTmFONyAgLT4gLU5hTjQ0Ci0KLWRkbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKLWRkbW5nMTg5IG1pbm1hZyAtOTk5OSAgIC1OYU4zMyAtPiAtOTk5OQotZGRtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQotCi1kZG1uZzE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZGRtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZG1uZzE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgotZGRtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZG1uZzE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZGRtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIG9sZCByb3VuZGluZyBjaGVja3MKLWRkbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQotZGRtbmcyMjIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCi1kZG1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDEKLWRkbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQotZGRtbmcyMjUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCi1kZG1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDEKLWRkbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQotZGRtbmcyMjggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCi1kZG1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDEKLWRkbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQotZGRtbmcyMzEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCi1kZG1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDEKLWRkbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQotZGRtbmcyMzQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kZG1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDEKLWRkbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQotZGRtbmcyMzcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCi1kZG1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDEKLQotLS0gZnJvbSBleGFtcGxlcwotZGRtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJwotZGRtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJwotZGRtbmcyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnCi1kZG1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKLWRkbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycKLQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCi1kZG1uZzQwMSBtaW5tYWcgIEluZiAgICAxLjEgICAgIC0+ICAxLjEKLWRkbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKLWRkbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMAotZGRtbmc0MDQgbWlubWFnICAxLjAgICAgMC4xICAgICAtPiAgMC4xCi1kZG1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCi1kZG1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMAotZGRtbmc0MDcgbWlubWFnICAwLjEwICAgMCAgICAgICAtPiAgMAotZGRtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCi1kZG1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wCi1kZG1uZzQxMCBtaW5tYWcgIDAuMCAgIC0wLjAgICAgIC0+IC0wLjAKLWRkbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAotZGRtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMAotZGRtbmc0MTMgbWlubWFnICAwICAgICAtMC4wICAgICAtPiAtMC4wCi1kZG1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCi1kZG1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wCi1kZG1uZzQxNiBtaW5tYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wCi1kZG1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCi1kZG1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEKLWRkbW5nNDE5IG1pbm1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQotZGRtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQotZGRtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQotZGRtbmc0MjMgbWlubWFnIC0xLjEgICAtSW5mICAgICAtPiAtMS4xCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKLWRkbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQotZGRtbmc0MzIgbWlubWFnICAxICAgICAgMS4xICAgICAtPiAgMQotZGRtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wCi1kZG1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKLWRkbW5nNDM1IG1pbm1hZyAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKLWRkbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCi1kZG1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCi1kZG1uZzQzOCBtaW5tYWcgIDAuMCAgICAwICAgICAgIC0+ICAwLjAKLWRkbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTAKLWRkbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAotZGRtbmc0NDEgbWlubWFnIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCi1kZG1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCi1kZG1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKLWRkbW5nNDQ0IG1pbm1hZyAtMCAgICAgIDAgICAgICAgLT4gLTAKLWRkbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAKLWRkbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKLWRkbW5nNDQ3IG1pbm1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAKLWRkbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQotZGRtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCi1kZG1uZzQ1MCBtaW5tYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xCi1kZG1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xCi1kZG1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKLS0tIGxhcmdpZXMKLWRkbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDAKLWRkbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDAKLWRkbW5nNDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKLWRkbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NAotZGRtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0Ci1kZG1uZzQ2NSBtaW5tYWcgLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCi1kZG1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQKLWRkbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NAotCi0tLSBzdWJub3JtYWxzCi1kZG1uZzUxMCBtaW5tYWcgIDEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKLWRkbW5nNTExIG1pbm1hZyAgMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAotZGRtbmc1MTIgbWlubWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwCi1kZG1uZzUxMyBtaW5tYWcgIDAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKLWRkbW5nNTE0IG1pbm1hZyAgMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAotZGRtbmc1MTUgbWlubWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1uZzUxNiBtaW5tYWcgIDAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKLWRkbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAotZGRtbmc1MTggbWlubWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKLWRkbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAotCi1kZG1uZzUzMCBtaW5tYWcgLTEuMDBFLTM4MyAgICAgICAwICAtPiAgIDAKLWRkbW5nNTMxIG1pbm1hZyAtMC4xRS0zODMgICAgICAgIDAgIC0+ICAgMAotZGRtbmc1MzIgbWlubWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwCi1kZG1uZzUzMyBtaW5tYWcgLTAuMTAwRS0zODMgICAgICAwICAtPiAgIDAKLWRkbW5nNTM0IG1pbm1hZyAtMC4wMUUtMzgzICAgICAgIDAgIC0+ICAgMAotZGRtbmc1MzUgbWlubWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1uZzUzNiBtaW5tYWcgLTAuMDk5RS0zODMgICAgICAwICAtPiAgIDAKLWRkbW5nNTM3IG1pbm1hZyAtMC4wMDlFLTM4MyAgICAgIDAgIC0+ICAgMAotZGRtbmc1MzggbWlubWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwCi1kZG1uZzUzOSBtaW5tYWcgLTAuMDAwOUUtMzgzICAgICAwICAtPiAgIDAKLWRkbW5nNTQwIG1pbm1hZyAtMC4wMDAxRS0zODMgICAgIDAgIC0+ICAgMAotCi0KLS0tIE51bGwgdGVzdHMKLWRkbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkTWluTWFnLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkZG1uZzAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTINCitkZG1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTENCitkZG1uZzAwMyBtaW5tYWcgIC0yICAgMCAgLT4gIDANCitkZG1uZzAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDENCitkZG1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTINCitkZG1uZzAwNiBtaW5tYWcgIC0xICAtMiAgLT4gLTENCitkZG1uZzAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTENCitkZG1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDANCitkZG1uZzAwOSBtaW5tYWcgIC0xICAgMSAgLT4gLTENCitkZG1uZzAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTENCitkZG1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDANCitkZG1uZzAxMiBtaW5tYWcgICAwICAtMSAgLT4gIDANCitkZG1uZzAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDANCitkZG1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDANCitkZG1uZzAxNSBtaW5tYWcgICAwICAgMiAgLT4gIDANCitkZG1uZzAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDENCitkZG1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTENCitkZG1uZzAxOCBtaW5tYWcgICAxICAgMCAgLT4gIDANCitkZG1uZzAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDENCitkZG1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDENCitkZG1uZzAyMSBtaW5tYWcgICAyICAtMiAgLT4gLTINCitkZG1uZzAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTENCitkZG1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDANCitkZG1uZzAyNSBtaW5tYWcgICAyICAgMSAgLT4gIDENCitkZG1uZzAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDINCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RkbW5nMDMwIG1pbm1hZyAgIDAgICAgIDAgICAtPiAgMA0KK2RkbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMA0KK2RkbW5nMDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wDQorZGRtbmcwMzMgbWlubWFnICAgMCAgICAgMC4wIC0+ICAwLjANCitkZG1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTANCitkZG1uZzAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTANCitkZG1uZzAzNiBtaW5tYWcgIC0wICAgIC0wLjAgLT4gLTANCitkZG1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTANCitkZG1uZzAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMA0KK2RkbW5nMDM5IG1pbm1hZyAgIDAuMCAgLTAgICAtPiAtMA0KK2RkbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wDQorZGRtbmcwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjANCitkZG1uZzA0MiBtaW5tYWcgIC0wLjAgICAwICAgLT4gLTAuMA0KK2RkbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMA0KK2RkbW5nMDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQorZGRtbmcwNDUgbWlubWFnICAtMC4wICAgMC4wIC0+IC0wLjANCisNCitkZG1uZzA0NiBtaW5tYWcgICAwRTEgIC0wRTEgLT4gLTBFKzENCitkZG1uZzA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzENCitkZG1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzENCitkZG1uZzA0OSBtaW5tYWcgICAwRTEgICAwRTIgLT4gIDBFKzENCitkZG1uZzA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMNCitkZG1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMNCisNCistLSBTcGVjaWFscw0KK2RkbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRtbmcwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KK2RkbW5nMDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTENCitkZG1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wDQorZGRtbmcwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMA0KK2RkbW5nMDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDENCitkZG1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwDQorZGRtbmcwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG1uZzA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQorZGRtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCitkZG1uZzEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xDQorZGRtbmcxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMA0KK2RkbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDANCitkZG1uZzEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxDQorZGRtbmcxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMA0KK2RkbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRtbmcxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwDQorZGRtbmcxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQ0KK2RkbW5nMTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTANCitkZG1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwDQorZGRtbmcxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQ0KK2RkbW5nMTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDANCitkZG1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbW5nMTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRtbmcxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMA0KK2RkbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTENCitkZG1uZzEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wDQorZGRtbmcxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMA0KK2RkbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDENCitkZG1uZzEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQorZGRtbmcxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCisNCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCitkZG1uZzE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkNCitkZG1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMA0KK2RkbW5nMTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xDQorZGRtbmcxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTANCitkZG1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwDQorZGRtbmcxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQ0KK2RkbW5nMTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDANCitkZG1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KK2RkbW5nMTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RkbW5nMTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQorZGRtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KK2RkbW5nMTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTENCitkZG1uZzE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wDQorZGRtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMA0KK2RkbW5nMTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDENCitkZG1uZzE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwDQorZGRtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCisNCitkZG1uZzE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkbW5nMTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTANCitkZG1uZzE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xDQorZGRtbmcxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMg0KK2RkbW5nMTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KK2RkbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQNCisNCitkZG1uZzE4OCBtaW5tYWcgLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5DQorZGRtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQorZGRtbmcxOTAgbWlubWFnICBJbmYgICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KKw0KK2RkbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZGRtbmcxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG9sZCByb3VuZGluZyBjaGVja3MNCitkZG1uZzIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCitkZG1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDENCitkZG1uZzIyMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDENCitkZG1uZzIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCitkZG1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDENCitkZG1uZzIyNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDENCitkZG1uZzIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCitkZG1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDENCitkZG1uZzIyOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDENCitkZG1uZzIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCitkZG1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDENCitkZG1uZzIzMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDENCitkZG1uZzIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCitkZG1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDENCitkZG1uZzIzNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDENCitkZG1uZzIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkZG1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDENCitkZG1uZzIzOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCistLSBmcm9tIGV4YW1wbGVzDQorZGRtbmcyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJw0KK2RkbW5nMjgxIG1pbm1hZyAnLTEwJyAnMycgIC0+ICAnMycNCitkZG1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcNCitkZG1uZzI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcNCitkZG1uZzI4NCBtaW5tYWcgJzcnICdOYU4nICAtPiAgJzcnDQorDQorLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KK2RkbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQ0KK2RkbW5nNDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDENCitkZG1uZzQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjANCitkZG1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjENCitkZG1uZzQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwDQorZGRtbmc0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCitkZG1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwDQorZGRtbmc0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wDQorZGRtbmc0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMA0KK2RkbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMA0KK2RkbW5nNDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMA0KK2RkbW5nNDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCitkZG1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjANCitkZG1uZzQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wDQorZGRtbmc0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMA0KK2RkbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTANCitkZG1uZzQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQorZGRtbmc0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQorZGRtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xDQorZGRtbmc0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KK2RkbW5nNDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTENCitkZG1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCitkZG1uZzQzMSBtaW5tYWcgIDEuMSAgICBJbmYgICAgIC0+ICAxLjENCitkZG1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxDQorZGRtbmc0MzMgbWlubWFnICAxLjAgICAgMSAgICAgICAtPiAgMS4wDQorZGRtbmc0MzQgbWlubWFnICAwLjEgICAgMS4wICAgICAtPiAgMC4xDQorZGRtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KK2RkbW5nNDM2IG1pbm1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwDQorZGRtbmc0MzcgbWlubWFnICAwICAgICAgMC4xMCAgICAtPiAgMA0KK2RkbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KK2RkbW5nNDM5IG1pbm1hZyAtMCAgICAgIDAuMCAgICAgLT4gLTANCitkZG1uZzQ0MCBtaW5tYWcgLTAuMCAgICAwLjAgICAgIC0+IC0wLjANCitkZG1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCitkZG1uZzQ0MiBtaW5tYWcgLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwDQorZGRtbmc0NDMgbWlubWFnIC0wLjAgICAgMCAgICAgICAtPiAtMC4wDQorZGRtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMA0KK2RkbW5nNDQ1IG1pbm1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTANCitkZG1uZzQ0NiBtaW5tYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wDQorZGRtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KK2RkbW5nNDQ4IG1pbm1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMQ0KK2RkbW5nNDQ5IG1pbm1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTAuMQ0KK2RkbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTENCitkZG1uZzQ1MSBtaW5tYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xDQorZGRtbmc0NTMgbWlubWFnIC1JbmYgICAtMS4xICAgICAtPiAtMS4xDQorLS0gbGFyZ2llcw0KK2RkbW5nNDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCitkZG1uZzQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQorZGRtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KK2RkbW5nNDYzIG1pbm1hZyAgMUUrMyAgIC0zODQgICAgLT4gLTM4NA0KK2RkbW5nNDY0IG1pbm1hZyAtMzg0ICAgIDFFKzMgICAgLT4gLTM4NA0KK2RkbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCitkZG1uZzQ2NiBtaW5tYWcgLTM4NCAgIC0xRSszICAgIC0+IC0zODQNCitkZG1uZzQ2NyBtaW5tYWcgLTFFKzMgICAtMzg0ICAgIC0+IC0zODQNCisNCistLSBzdWJub3JtYWxzDQorZGRtbmc1MTAgbWlubWFnICAxLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTEgbWlubWFnICAwLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTIgbWlubWFnICAwLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTMgbWlubWFnICAwLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTQgbWlubWFnICAwLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTUgbWlubWFnICAwLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTYgbWlubWFnICAwLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTcgbWlubWFnICAwLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTggbWlubWFnICAwLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MTkgbWlubWFnICAwLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQorZGRtbmc1MjAgbWlubWFnICAwLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQorDQorZGRtbmc1MzAgbWlubWFnIC0xLjAwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzEgbWlubWFnIC0wLjFFLTM4MyAgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzIgbWlubWFnIC0wLjEwRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzMgbWlubWFnIC0wLjEwMEUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzQgbWlubWFnIC0wLjAxRS0zODMgICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzUgbWlubWFnIC0wLjk5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzYgbWlubWFnIC0wLjA5OUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzcgbWlubWFnIC0wLjAwOUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzggbWlubWFnIC0wLjAwMUUtMzgzICAgICAgMCAgLT4gICAwDQorZGRtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTM4MyAgICAgMCAgLT4gICAwDQorZGRtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTM4MyAgICAgMCAgLT4gICAwDQorDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE1pbnVzLmRlY1Rlc3QKaW5kZXggYjdmZmZmNy4uMjcwNWU3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTWludXMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNaW51cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkTWludXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCi0KLS0tIEluZmluaXRpZXMKLWRkbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKLWRkbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWRkbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KLWRkbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCi1kZG1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZGRtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCi1kZG1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCi1kZG1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgotZGRtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAotZGRtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAotZGRtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGZpbml0ZXMKLWRkbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNwotZGRtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKLWRkbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKLWRkbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQotZGRtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCi1kZG1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAotZGRtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAotZGRtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCi0KLS0tIHplcm9zCi1kZG1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAotZGRtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKLWRkbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0Ci1kZG1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAotZGRtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAotZGRtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotZGRtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotZGRtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZGRtbnMxMjEgbWludXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MgotZGRtbnMxMjIgbWludXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCi1kZG1uczEyMyBtaW51cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxCi1kZG1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbW5zMTMyIG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4MwotZGRtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRtbnMxMzQgbWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4IFN1Ym5vcm1hbAotCi1kZG1uczEzNSBtaW51cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKLWRkbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRtbnMxMzcgbWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKLWRkbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwLXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2RkbW5zMDAxIG1pbnVzICAgICAgICs3LjUwICAtPiAtNy41MA0KKw0KKy0tIEluZmluaXRpZXMNCitkZG1uczAxMSBtaW51cyAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQorZGRtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTg0KK2RkbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFODQorZGRtbnMwMjMgbWludXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkZG1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCitkZG1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQorZGRtbnMwMzMgbWludXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCitkZG1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KK2RkbW5zMDM2IG1pbnVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCitkZG1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZmluaXRlcw0KK2RkbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNw0KK2RkbW5zMTAyIG1pbnVzICAgICAgICAgLTcgICAtPiA3DQorZGRtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQ0KK2RkbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQ0KK2RkbW5zMTA1IG1pbnVzICAgICAgIDcuNTAgICAtPiAtNy41MA0KK2RkbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwDQorZGRtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMA0KK2RkbW5zMTA4IG1pbnVzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KKw0KKy0tIHplcm9zDQorZGRtbnMxMTEgbWludXMgICAgICAgICAgMCAgIC0+IDANCitkZG1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMA0KK2RkbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0DQorZGRtbnMxMTQgbWludXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCitkZG1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQorZGRtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KK2RkbW5zMTE3IG1pbnVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkZG1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkZG1uczEyMSBtaW51cyAgMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyDQorZGRtbnMxMjIgbWludXMgIC0yNjgyNjgyNjgyNjgyNjgyICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRtbnMxMjMgbWludXMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MQ0KK2RkbW5zMTI0IG1pbnVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gMTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZGRtbnMxMzEgbWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbW5zMTMyIG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4Mw0KK2RkbW5zMTMzIG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZG1uczEzNCBtaW51cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsDQorDQorZGRtbnMxMzUgbWludXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAxRS0zOTggU3Vibm9ybWFsDQorZGRtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRtbnMxMzcgbWludXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAxRS0zODMNCitkZG1uczEzOCBtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTXVsdGlwbHkuZGVjVGVzdAppbmRleCA1ODczZjgwLi40NWEzODFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRNdWx0aXBseS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE11bHRpcGx5LmRlY1Rlc3QKQEAgLTEsNTUzICsxLDU1MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZE11bHRpcGx5LmRlY1Rlc3QgLS0gZGVjRG91YmxlIG11bHRpcGxpY2F0aW9uICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MKLWRkbXVsMDAwIG11bHRpcGx5IDIgICAgICAyIC0+IDQKLWRkbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYKLWRkbXVsMDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUKLWRkbXVsMDAzIG11bHRpcGx5IDUgICAgICAyIC0+IDEwCi1kZG11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwCi1kZG11bDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwCi1kZG11bDAwNiBtdWx0aXBseSAxLjIwICAtMiAtPiAtMi40MAotZGRtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDAKLWRkbXVsMDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwCi1kZG11bDAwOSBtdWx0aXBseSAtMS4yMCAtMiAtPiAyLjQwCi1kZG11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkKLWRkbXVsMDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjAKLWRkbXVsMDEyIG11bHRpcGx5IDIuNTAgICA0IC0+IDEwLjAwCi1kZG11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAgUm91bmRlZAotZGRtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKLWRkbXVsMDE2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAotZGRtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5IC05Ljk5OTk5OTk5OSAtPiAtOTkuOTk5OTk5OTgwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kZG11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsMDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gIDk5Ljk5OTk5OTk4MDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSB6ZXJvcywgZXRjLgotZGRtdWwwMjEgbXVsdGlwbHkgIDAgICAgICAwICAgICAtPiAgMAotZGRtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMAotZGRtdWwwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMAotZGRtdWwwMjQgbXVsdGlwbHkgLTAgICAgIC0wICAgICAtPiAgMAotZGRtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAotZGRtdWwwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAotZGRtdWwwMjcgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAotZGRtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMAotZGRtdWwwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMAotZGRtdWwwMzEgbXVsdGlwbHkgIDAwLjAwICAwLjAwMCAtPiAgMC4wMDAwMAotZGRtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRkbXVsMDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi1kZG11bDAzNCBtdWx0aXBseSAtNS4wMCAgIDFFLTMgIC0+IC0wLjAwNTAwCi1kZG11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwCi1kZG11bDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAotZGRtdWwwMzcgbXVsdGlwbHkgLTBFLTMgICAwMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKLWRkbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDAKLWRkbXVsMDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDAKLWRkbXVsMDQwIG11bHRpcGx5ICAwMC4wMCAtMEUtMyAgLT4gLTAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kZG11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZGRtdWwwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMAotZGRtdWwwNDMgbXVsdGlwbHkgLTAwLjAwIC0wLjAwMCAtPiAgMC4wMDAwMAotZGRtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRkbXVsMDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKLWRkbXVsMDUwIG11bHRpcGx5IDEuMjAgMyAgICAgICAgLT4gMy42MAotZGRtdWwwNTEgbXVsdGlwbHkgNyAgICAzICAgICAgICAtPiAyMQotZGRtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyCi1kZG11bDA1MyBtdWx0aXBseSAwLjkgIC0wICAgICAgIC0+IC0wLjAKLWRkbXVsMDU0IG11bHRpcGx5IDY1NDMyMSA2NTQzMjEgLT4gNDI4MTM1OTcxMDQxCi0KLWRkbXVsMDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkKLWRkbXVsMDYxIG11bHRpcGx5IDEyMy40NSAxZTggIC0+ICAxLjIzNDVFKzEwCi1kZG11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQotZGRtdWwwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTIKLWRkbXVsMDY0IG11bHRpcGx5IDEyMy40NSAxZTExIC0+ICAxLjIzNDVFKzEzCi1kZG11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNAotZGRtdWwwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUKLQotCi0tLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMKLS0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Ci1kZG11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKLWRkbXVsMDg0IG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQotZGRtdWwwOTAgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45Ci1kZG11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKLQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcwotZGRtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODEKLWRkbXVsMTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTAKLWRkbXVsMTAzIG11bHRpcGx5IDkgOTAwICAgLT4gODEwMAotZGRtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDAKLWRkbXVsMTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDAKLWRkbXVsMTA2IG11bHRpcGx5IDkgOTAwMDAwICAgLT4gODEwMDAwMAotZGRtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDAKLWRkbXVsMTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDAKLWRkbXVsMTA5IG11bHRpcGx5IDkgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMAotZGRtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAKLWRkbXVsMTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAKLWRkbXVsMTEyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMAotZGRtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAKLWRkbXVsMTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAKLWRkbXVsMTE1IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMAotLS1kZG11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMAotLS1kZG11bDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwCi0tLWRkbXVsMTE4IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAotLS1kZG11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAotLS1kZG11bDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLWRkbXVsMTIxIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kZG11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kZG11bDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2FycmllcwotZGRtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQotZGRtdWwxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwCi1kZG11bDEzMyBtdWx0aXBseSAzIDMwMCAgIC0+IDkwMAotZGRtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMAotZGRtdWwxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwCi1kZG11bDEzNiBtdWx0aXBseSAzIDMwMDAwMCAgIC0+IDkwMDAwMAotZGRtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMAotZGRtdWwxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwCi1kZG11bDEzOSBtdWx0aXBseSAzIDMwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMAotZGRtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMAotZGRtdWwxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwCi1kZG11bDE0MiBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMAotZGRtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMAotZGRtdWwxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwCi1kZG11bDE0NSBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMAotCi0tLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCi1kZG11bDMwMSBtdWx0aXBseSA5IDkgICAtPiA4MQotZGRtdWwzMDIgbXVsdGlwbHkgOSA5MCAgIC0+IDgxMAotZGRtdWwzMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwCi1kZG11bDMwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMAotZGRtdWwzMDUgbXVsdGlwbHkgOSA5MDAwMCAgIC0+IDgxMDAwMAotZGRtdWwzMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwCi1kZG11bDMwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMAotZGRtdWwzMDggbXVsdGlwbHkgOSA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMAotZGRtdWwzMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwCi1kZG11bDMxMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMAotZGRtdWwzMTEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMAotZGRtdWwzMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwCi1kZG11bDMxMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMAotZGRtdWwzMTQgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMAotZGRtdWwzMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwCi1kZG11bDMxNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTYgIFJvdW5kZWQKLWRkbXVsMzE3IG11bHRpcGx5IDkwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTcgIFJvdW5kZWQKLWRkbXVsMzE4IG11bHRpcGx5IDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE4ICBSb3VuZGVkCi1kZG11bDMxOSBtdWx0aXBseSA5MDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMTkgIFJvdW5kZWQKLWRkbXVsMzIwIG11bHRpcGx5IDkwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjAgIFJvdW5kZWQKLWRkbXVsMzIxIG11bHRpcGx5IDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIxICBSb3VuZGVkCi1kZG11bDMyMiBtdWx0aXBseSA5MDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjIgIFJvdW5kZWQKLWRkbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMEUrMjMgIFJvdW5kZWQKLQotLS0gdHJ5emVyb3MgY2FzZXMKLWRkbXVsNTA0ICBtdWx0aXBseSAgMEUtMjYwIDEwMDBFLTI2MCAgLT4gMEUtMzk4IENsYW1wZWQKLWRkbXVsNTA1ICBtdWx0aXBseSAgMTAwRSsyNjAgMEUrMjYwICAgLT4gMEUrMzY5IENsYW1wZWQKLS0tIDY1Sy0xIGNhc2UKLWRkbXVsNTA2IG11bHRpcGx5IDc3LjEgODUwIC0+IDY1NTM1LjAKLQotLS0gbWl4ZWQgd2l0aCB6ZXJvcwotZGRtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wCi1kZG11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDAKLWRkbXVsNTQzIG11bHRpcGx5ICAwICAgICAxICAgICAtPiAgMAotZGRtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wCi1kZG11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTAKLWRkbXVsNTQ2IG11bHRpcGx5IC0xICAgIC0wICAgICAtPiAgMAotZGRtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwCi1kZG11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTAKLQotZGRtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjAKLWRkbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wCi1kZG11bDU1MyBtdWx0aXBseSAgMC4wICAgMSAgICAgLT4gIDAuMAotZGRtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjAKLWRkbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wCi1kZG11bDU1NiBtdWx0aXBseSAtMS4wICAtMCAgICAgLT4gIDAuMAotZGRtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjAKLWRkbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wCi0KLWRkbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wCi1kZG11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMAotZGRtdWw1NjMgbXVsdGlwbHkgIDAgICAgIDEuMCAgIC0+ICAwLjAKLWRkbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wCi1kZG11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMAotZGRtdWw1NjYgbXVsdGlwbHkgLTEgICAgLTAuMCAgIC0+ICAwLjAKLWRkbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wCi1kZG11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMAotCi1kZG11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDAKLWRkbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMAotZGRtdWw1NzMgbXVsdGlwbHkgIDAuMCAgIDEuMCAgIC0+ICAwLjAwCi1kZG11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDAKLWRkbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMAotZGRtdWw1NzYgbXVsdGlwbHkgLTEuMCAgLTAuMCAgIC0+ICAwLjAwCi1kZG11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDAKLWRkbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMAotCi0KLS0tIFNwZWNpYWxzCi1kZG11bDU4MCBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kZG11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZG11bDU4MyBtdWx0aXBseSAgSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZGRtdWw1ODYgbXVsdGlwbHkgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQotZGRtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQotZGRtdWw1ODkgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQotZGRtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQotZGRtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDU5MiBtdWx0aXBseSAgMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbXVsNTk1IG11bHRpcGx5ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZGRtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotZGRtdWw2MDEgbXVsdGlwbHkgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZGRtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZGRtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDYwNCBtdWx0aXBseSAtSW5mICAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRkbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRkbXVsNjA3IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRkbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKLWRkbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRkbXVsNjEwIG11bHRpcGx5IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRkbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDYxMyBtdWx0aXBseSAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1kZG11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci0KLWRkbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFOCi1kZG11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTgotZGRtdWw2MjMgbXVsdGlwbHkgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRkbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFOCi1kZG11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTgotZGRtdWw2MjYgbXVsdGlwbHkgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRkbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kZG11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTgotZGRtdWw2MjkgbXVsdGlwbHkgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRkbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kZG11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTgotZGRtdWw2MzIgbXVsdGlwbHkgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRkbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFOCi1kZG11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTgotZGRtdWw2MzUgbXVsdGlwbHkgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRkbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kZG11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kZG11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NDMgbXVsdGlwbHkgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NDYgbXVsdGlwbHkgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NDkgbXVsdGlwbHkgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NTIgbXVsdGlwbHkgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NTUgbXVsdGlwbHkgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NTggbXVsdGlwbHkgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45Ci1kZG11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgKLWRkbXVsNjYzIG11bHRpcGx5ICBOYU43MSBJbmYgICAtPiAgTmFONzEKLWRkbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONgotZGRtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40Ci1kZG11bDY2NiBtdWx0aXBseSAtOTk5ICAgTmFOMzMgLT4gIE5hTjMzCi1kZG11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKLQotZGRtdWw2NzEgbXVsdGlwbHkgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzQgbXVsdGlwbHkgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzcgbXVsdGlwbHkgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi1kZG11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKLWRkbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOAotZGRtdWw2ODMgbXVsdGlwbHkgLU5hTjcxIEluZiAgIC0+IC1OYU43MQotZGRtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42Ci1kZG11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQKLWRkbXVsNjg2IG11bHRpcGx5IC05OTkgIC1OYU4zMyAtPiAtTmFOMzMKLWRkbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMgotCi1kZG11bDY5MSBtdWx0aXBseSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5NCBtdWx0aXBseSAtc05hTjE2IC1zTmFOOTQgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5NyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOOTEgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRkbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFOCi1kZG11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTgotZGRtdWw3MDMgbXVsdGlwbHkgLU5hTiAgIEluZiAgIC0+IC1OYU4KLWRkbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFOCi1kZG11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTgotZGRtdWw3MDYgbXVsdGlwbHkgLTk5OSAgLU5hTiAgIC0+IC1OYU4KLWRkbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFOCi0KLWRkbXVsNzExIG11bHRpcGx5IC1zTmFOICAgLUluZiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNzE0IG11bHRpcGx5IC1zTmFOICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsNzE3IG11bHRpcGx5ICAwODggICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzCi0tLSBzaWducwotZGRtdWw3NTEgbXVsdGlwbHkgIDFlKzI3NyAgMWUrMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsNzUyIG11bHRpcGx5ICAxZSsyNzcgLTFlKzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc1MyBtdWx0aXBseSAtMWUrMjc3ICAxZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRtdWw3NTQgbXVsdGlwbHkgLTFlKzI3NyAtMWUrMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsNzU1IG11bHRpcGx5ICAxZS0yNzcgIDFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsNzU2IG11bHRpcGx5ICAxZS0yNzcgLTFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsNzU3IG11bHRpcGx5IC0xZS0yNzcgIDFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsNzU4IG11bHRpcGx5IC0xZS0yNzcgLTFlLTMxMSAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpCi1kZG11bDc2MCBtdWx0aXBseSAxZS0yOTEgMWUtMTAxIC0+IDFFLTM5MiBTdWJub3JtYWwKLWRkbXVsNzYxIG11bHRpcGx5IDFlLTI5MSAxZS0xMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbAotZGRtdWw3NjIgbXVsdGlwbHkgMWUtMjkxIDFlLTEwMyAtPiAxRS0zOTQgU3Vibm9ybWFsCi1kZG11bDc2MyBtdWx0aXBseSAxZS0yOTEgMWUtMTA0IC0+IDFFLTM5NSBTdWJub3JtYWwKLWRkbXVsNzY0IG11bHRpcGx5IDFlLTI5MSAxZS0xMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbAotZGRtdWw3NjUgbXVsdGlwbHkgMWUtMjkxIDFlLTEwNiAtPiAxRS0zOTcgU3Vibm9ybWFsCi1kZG11bDc2NiBtdWx0aXBseSAxZS0yOTEgMWUtMTA3IC0+IDFFLTM5OCBTdWJub3JtYWwKLWRkbXVsNzY3IG11bHRpcGx5IDFlLTI5MSAxZS0xMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsNzY4IG11bHRpcGx5IDFlLTI5MSAxZS0xMDkgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsNzY5IG11bHRpcGx5IDFlLTI5MSAxZS0xMTAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KLWRkbXVsNzcwIG11bHRpcGx5IDFlKzYwIDFlKzMyMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICBDbGFtcGVkCi1kZG11bDc3MSBtdWx0aXBseSAxZSs2MCAxZSszMjIgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgIENsYW1wZWQKLWRkbXVsNzcyIG11bHRpcGx5IDFlKzYwIDFlKzMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQKLWRkbXVsNzczIG11bHRpcGx5IDFlKzYwIDFlKzMyNCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICBDbGFtcGVkCi1kZG11bDc3NCBtdWx0aXBseSAxZSs2MCAxZSszMjUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc3NSBtdWx0aXBseSAxZSs2MCAxZSszMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc3NiBtdWx0aXBseSAxZSs2MCAxZSszMjcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc3NyBtdWx0aXBseSAxZSs2MCAxZSszMjggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc3OCBtdWx0aXBseSAxZSs2MCAxZSszMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZG11bDc3OSBtdWx0aXBseSAxZSs2MCAxZSszMzAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLWRkbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsCi1kZG11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTM5NCAgIDFlLTEgIC0+IDEuMDAwRS0zOTUgIFN1Ym5vcm1hbAotZGRtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTM5NCAgICAxZS0yICAtPiAxLjAwRS0zOTYgICBTdWJub3JtYWwKLWRkbXVsODA0IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsCi1kZG11bDgwNSBtdWx0aXBseSAgMS4wRS0zOTQgICAgIDFlLTQgIC0+IDFFLTM5OCAgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRkbXVsODA2IG11bHRpcGx5ICAxLjNFLTM5NCAgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MDcgbXVsdGlwbHkgIDEuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG11bDgwOCBtdWx0aXBseSAgMS43RS0zOTQgICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsODA5IG11bHRpcGx5ICAyLjNFLTM5NCAgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MTAgbXVsdGlwbHkgIDIuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG11bDgxMSBtdWx0aXBseSAgMi43RS0zOTQgICAgIDFlLTQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsODEyIG11bHRpcGx5ICAxLjQ5RS0zOTQgICAgMWUtNCAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG11bDgxNCBtdWx0aXBseSAgMS41MUUtMzk0ICAgIDFlLTQgIC0+IDJFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsODE1IG11bHRpcGx5ICAyLjQ5RS0zOTQgICAgMWUtNCAgLT4gMkUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG11bDgxNyBtdWx0aXBseSAgMi41MUUtMzk0ICAgIDFlLTQgIC0+IDNFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZGRtdWw4MTggbXVsdGlwbHkgIDFFLTM5NCAgICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbAotZGRtdWw4MTkgbXVsdGlwbHkgIDNFLTM5NCAgICAgICAxZS01ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsODIwIG11bHRpcGx5ICA1RS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZG11bDgyMSBtdWx0aXBseSAgN0UtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsODIyIG11bHRpcGx5ICA5RS0zOTQgICAgICAgMWUtNSAgLT4gMUUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MjMgbXVsdGlwbHkgIDkuOUUtMzk0ICAgICAxZS01ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRkbXVsODI0IG11bHRpcGx5ICAxRS0zOTQgICAgICAtMWUtNCAgLT4gLTFFLTM5OCAgICBTdWJub3JtYWwKLWRkbXVsODI1IG11bHRpcGx5ICAzRS0zOTQgICAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZG11bDgyNiBtdWx0aXBseSAtNUUtMzk0ICAgICAgIDFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRtdWw4MjcgbXVsdGlwbHkgIDdFLTM5NCAgICAgIC0xZS01ICAtPiAtMUUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG11bDgyOCBtdWx0aXBseSAtOUUtMzk0ICAgICAgIDFlLTUgIC0+IC0xRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbXVsODI5IG11bHRpcGx5ICA5LjlFLTM5NCAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRtdWw4MzAgbXVsdGlwbHkgIDMuMEUtMzk0ICAgIC0xZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotZGRtdWw4MzEgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0yMDAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbXVsODMyIG11bHRpcGx5ICAxLjBFLTE5OSAgICAgMWUtMTk5IC0+IDFFLTM5OCAgICBTdWJub3JtYWwgUm91bmRlZAotZGRtdWw4MzMgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0xOTggLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsCi1kZG11bDgzNCBtdWx0aXBseSAgMi4wRS0xOTkgICAgIDJlLTE5OCAtPiA0LjBFLTM5NyAgICBTdWJub3JtYWwKLWRkbXVsODM1IG11bHRpcGx5ICA0LjBFLTE5OSAgICAgNGUtMTk4IC0+IDEuNjBFLTM5NiAgIFN1Ym5vcm1hbAotZGRtdWw4MzYgbXVsdGlwbHkgMTAuMEUtMTk5ICAgIDEwZS0xOTggLT4gMS4wMDBFLTM5NSAgU3Vibm9ybWFsCi1kZG11bDgzNyBtdWx0aXBseSAzMC4wRS0xOTkgICAgMzBlLTE5OCAtPiA5LjAwMEUtMzk1ICBTdWJub3JtYWwKLWRkbXVsODM4IG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg4IC0+IDEuNjAwMEUtMzg0IFN1Ym5vcm1hbAotZGRtdWw4MzkgbXVsdGlwbHkgNDAuMEUtMTk5ICAgIDQwZS0xODcgLT4gMS42MDAwRS0zODMKLWRkbXVsODQwIG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg2IC0+IDEuNjAwMEUtMzgyCi0KLS0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aAotZGRtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrMzgzICAgICAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZGRtdWw4NzEgbXVsdGlwbHkgMTAwIC05Ljk5OUUrMzgzICAgICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCi1kZG11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSszODMgMTAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRkbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzM4MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotCi0tLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscwotZGRtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTM1NSAxLjIzNEUtNDAgICAgLT4gIDEuNTIzRS0zOTUgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRkbXVsODgzIG11bHRpcGx5ICAxLjIzRS0zNTUgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTM5NSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZGRtdWw4ODQgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbAotZGRtdWw4ODUgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MSAgICAgIC0+ICAxLjQ0RS0zOTYgIFN1Ym5vcm1hbAotZGRtdWw4ODYgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTM5NyAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kZG11bDg4NyBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWRkbXVsODg4IG11bHRpcGx5ICAxLjNFLTM1NSAgIDEuM0UtNDIgICAgICAtPiAgMS43RS0zOTcgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZGRtdWw4ODkgbXVsdGlwbHkgIDEuM0UtMzU1ICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTM5OCAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kZG11bDg5MCBtdWx0aXBseSAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgLT4gICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotCi1kZG11bDg5MSBtdWx0aXBseSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS0zNTUgLT4gIDEuNTIzRS0zOTUgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kZG11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci0KLS0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1NgotZGRtdWw5MDAgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAotZGRtdWw5MDEgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZGRtdWw5MDIgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAtPiA5Ljk5OTk5OTk5OTk5MDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWRkbXVsOTAzIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5ICAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZG11bDkwNCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZGRtdWw5MDUgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLS0tIFRoZSBuZXh0IHJvdW5kcyB0byBObWluIChiKiplbWluKTsgdGhpcyBpcyB0aGUgZGlzdGluZ3Vpc2hpbmcgY2FzZQotLS0gZm9yIGRldGVjdGluZyB0aW5pbmVzcyAoYmVmb3JlIG9yIGFmdGVyIHJvdW5kaW5nKSAtLSBpZiBhZnRlcgotLS0gcm91bmRpbmcgdGhlbiB0aGUgcmVzdWx0IHdvdWxkIGJlIHRoZSBzYW1lLCBidXQgdGhlIFVuZGVyZmxvdyBmbGFnCi0tLSB3b3VsZCBub3QgYmUgc2V0Ci1kZG11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotLS0gcHJvdmUgdGhvc2Ugb3BlcmFuZHMgd2VyZSBleGFjdAotZGRtdWw5MDcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS0zODMKLWRkbXVsOTA4IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5Ci0KLS0tIHJlZHVjaW5nIHRpbmllc3QKLWRkbXVsOTEwIG11bHRpcGx5IDFlLTM5OCAwLjk5IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZGRtdWw5MTEgbXVsdGlwbHkgMWUtMzk4IDAuNzUgLT4gMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kZG11bDkxMiBtdWx0aXBseSAxZS0zOTggMC41ICAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZGRtdWw5MTMgbXVsdGlwbHkgMWUtMzk4IDAuMjUgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWRkbXVsOTE0IG11bHRpcGx5IDFlLTM5OCAwLjAxIC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLS0tIGh1Z2VzdAotZGRtdWw5MjAgbXVsdGlwbHkgIDk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OSAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzEgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzCi1kZG11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwCi1kZG11bDEwMDIgbXVsdGlwbHkgIDEgICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMAotZGRtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwCi1kZG11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwCi1kZG11bDEwMDUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMAotZGRtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwCi1kZG11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwCi1kZG11bDEwMDggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMAotZGRtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwCi1kZG11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwCi1kZG11bDEwMTEgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMAotZGRtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwCi1kZG11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwCi1kZG11bDEwMTQgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMAotZGRtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwCi1kZG11bDEwMjEgbXVsdGlwbHkgIDEwICAgICAxICAgICAgICAgICAgICAgIC0+IDEwCi1kZG11bDEwMjIgbXVsdGlwbHkgIDEwICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMAotZGRtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwCi1kZG11bDEwMjQgbXVsdGlwbHkgIDEwICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwCi1kZG11bDEwMjUgbXVsdGlwbHkgIDEwICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMAotZGRtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwCi1kZG11bDEwMjcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwCi1kZG11bDEwMjggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMAotZGRtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwCi1kZG11bDEwMzAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwCi1kZG11bDEwMzEgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMAotZGRtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwCi1kZG11bDEwMzMgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwCi1kZG11bDEwMzQgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMAotZGRtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwCi1kZG11bDEwNDEgbXVsdGlwbHkgIDEwMCAgICAwLjEgICAgICAgICAgICAgIC0+IDEwLjAKLWRkbXVsMTA0MiBtdWx0aXBseSAgMTAwICAgIDEgICAgICAgICAgICAgICAgLT4gMTAwCi1kZG11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAKLWRkbXVsMTA0NCBtdWx0aXBseSAgMTAwICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAKLWRkbXVsMTA0NSBtdWx0aXBseSAgMTAwICAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwCi1kZG11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAKLWRkbXVsMTA0NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAKLWRkbXVsMTA0OCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwCi1kZG11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAKLWRkbXVsMTA1MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAKLWRkbXVsMTA1MSBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwCi1kZG11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAKLWRkbXVsMTA1MyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAKLWRkbXVsMTA1NCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCi1kZG11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKLWRkbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDAKLWRkbXVsMTA2MiBtdWx0aXBseSAgMTAwMCAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwLjAKLWRkbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMAotZGRtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMAotZGRtdWwxMDY1IG11bHRpcGx5ICAxMDAwICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAKLWRkbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMAotZGRtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMAotZGRtdWwxMDY4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAKLWRkbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMAotZGRtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMAotZGRtdWwxMDcxIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAKLWRkbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAotZGRtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAotZGRtdWwxMDc0IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKLWRkbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAotZGRtdWwxMDgxIG11bHRpcGx5ICAxMDAwMCAgMC4wMDEgICAgICAgICAgICAtPiAxMC4wMDAKLWRkbXVsMTA4MiBtdWx0aXBseSAgMTAwMDAgIDAuMDEgICAgICAgICAgICAgLT4gMTAwLjAwCi1kZG11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMAotZGRtdWwxMDg0IG11bHRpcGx5ICAxMDAwMCAgMSAgICAgICAgICAgICAgICAtPiAxMDAwMAotZGRtdWwxMDg1IG11bHRpcGx5ICAxMDAwMCAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMDAKLWRkbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMAotZGRtdWwxMDg3IG11bHRpcGx5ICAxMDAwMCAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwMAotZGRtdWwxMDg4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMDAKLWRkbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMAotZGRtdWwxMDkwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwMAotZGRtdWwxMDkxIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMDAKLWRkbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMAotZGRtdWwxMDkzIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMAotZGRtdWwxMDk0IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAKLWRkbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMAotCi1kZG11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAgOTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTAwMDAKLWRkbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAotCi0KLS0tIE51bGwgdGVzdHMKLWRkbXVsOTk5MCBtdWx0aXBseSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRNdWx0aXBseS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQ0KKy0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNEb3VibGUNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkZG11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0DQorZGRtdWwwMDEgbXVsdGlwbHkgMiAgICAgIDMgLT4gNg0KK2RkbXVsMDAyIG11bHRpcGx5IDUgICAgICAxIC0+IDUNCitkZG11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMA0KK2RkbXVsMDA0IG11bHRpcGx5IDEuMjAgICAyIC0+IDIuNDANCitkZG11bDAwNSBtdWx0aXBseSAxLjIwICAgMCAtPiAwLjAwDQorZGRtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDANCitkZG11bDAwNyBtdWx0aXBseSAtMS4yMCAgMiAtPiAtMi40MA0KK2RkbXVsMDA4IG11bHRpcGx5IC0xLjIwICAwIC0+IC0wLjAwDQorZGRtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MA0KK2RkbXVsMDEwIG11bHRpcGx5IDUuMDkgNy4xIC0+IDM2LjEzOQ0KK2RkbXVsMDExIG11bHRpcGx5IDIuNSAgICA0IC0+IDEwLjANCitkZG11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMA0KK2RkbXVsMDEzIG11bHRpcGx5IDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMCBSb3VuZGVkDQorZGRtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCitkZG11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDAxNyBtdWx0aXBseSAgOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDAxOCBtdWx0aXBseSAtOS45OTk5OTk5OTkgIDkuOTk5OTk5OTk5IC0+IC05OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTkgLTkuOTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5ODAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB6ZXJvcywgZXRjLg0KK2RkbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDANCitkZG11bDAyMiBtdWx0aXBseSAgMCAgICAgLTAgICAgIC0+IC0wDQorZGRtdWwwMjMgbXVsdGlwbHkgLTAgICAgICAwICAgICAtPiAtMA0KK2RkbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDANCitkZG11bDAyNSBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQorZGRtdWwwMjYgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KK2RkbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCitkZG11bDAyOCBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQorZGRtdWwwMzAgbXVsdGlwbHkgIDUuMDAgICAxRS0zICAtPiAgMC4wMDUwMA0KK2RkbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDANCitkZG11bDAzMiBtdWx0aXBseSAgMDAuMDAgIDBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkbXVsMDMzIG11bHRpcGx5ICAwRS0zICAgMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZGRtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMA0KK2RkbXVsMDM1IG11bHRpcGx5IC0wMC4wMCAgMC4wMDAgLT4gLTAuMDAwMDANCitkZG11bDAzNiBtdWx0aXBseSAtMDAuMDAgIDBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZGRtdWwwMzggbXVsdGlwbHkgIDUuMDAgIC0xRS0zICAtPiAtMC4wMDUwMA0KK2RkbXVsMDM5IG11bHRpcGx5ICAwMC4wMCAtMC4wMDAgLT4gLTAuMDAwMDANCitkZG11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkbXVsMDQxIG11bHRpcGx5ICAwRS0zICAtMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZGRtdWwwNDIgbXVsdGlwbHkgLTUuMDAgIC0xRS0zICAtPiAgMC4wMDUwMA0KK2RkbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDANCitkZG11bDA0NCBtdWx0aXBseSAtMDAuMDAgLTBFLTMgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RkbXVsMDQ1IG11bHRpcGx5IC0wRS0zICAtMDAuMDAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KK2RkbXVsMDUwIG11bHRpcGx5IDEuMjAgMyAgICAgICAgLT4gMy42MA0KK2RkbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjENCitkZG11bDA1MiBtdWx0aXBseSAwLjkgIDAuOCAgICAgIC0+IDAuNzINCitkZG11bDA1MyBtdWx0aXBseSAwLjkgIC0wICAgICAgIC0+IC0wLjANCitkZG11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQ0KKw0KK2RkbXVsMDYwIG11bHRpcGx5IDEyMy40NSAxZTcgIC0+ICAxLjIzNDVFKzkNCitkZG11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMA0KK2RkbXVsMDYyIG11bHRpcGx5IDEyMy40NSAxZSs5IC0+ICAxLjIzNDVFKzExDQorZGRtdWwwNjMgbXVsdGlwbHkgMTIzLjQ1IDFlMTAgLT4gIDEuMjM0NUUrMTINCitkZG11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMw0KK2RkbXVsMDY1IG11bHRpcGx5IDEyMy40NSAxZTEyIC0+ICAxLjIzNDVFKzE0DQorZGRtdWwwNjYgbXVsdGlwbHkgMTIzLjQ1IDFlMTMgLT4gIDEuMjM0NUUrMTUNCisNCisNCistLSB0ZXN0IHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aHMNCistLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RkbXVsMDgwIG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KK2RkbXVsMDg0IG11bHRpcGx5IDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KK2RkbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KK2RkbXVsMDk0IG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KKw0KKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMNCitkZG11bDEwMSBtdWx0aXBseSA5IDkgICAtPiA4MQ0KK2RkbXVsMTAyIG11bHRpcGx5IDkgOTAgICAtPiA4MTANCitkZG11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDANCitkZG11bDEwNCBtdWx0aXBseSA5IDkwMDAgICAtPiA4MTAwMA0KK2RkbXVsMTA1IG11bHRpcGx5IDkgOTAwMDAgICAtPiA4MTAwMDANCitkZG11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDANCitkZG11bDEwNyBtdWx0aXBseSA5IDkwMDAwMDAgICAtPiA4MTAwMDAwMA0KK2RkbXVsMTA4IG11bHRpcGx5IDkgOTAwMDAwMDAgICAtPiA4MTAwMDAwMDANCitkZG11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDANCitkZG11bDExMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMA0KK2RkbXVsMTExIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDANCitkZG11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDANCitkZG11bDExMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMA0KK2RkbXVsMTE0IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDANCitkZG11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDANCistLWRkbXVsMTE2IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwDQorLS1kZG11bDExNyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwDQorLS1kZG11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDANCistLWRkbXVsMTE5IG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kZG11bDEyMCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kZG11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDANCistLWRkbXVsMTIyIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kZG11bDEyMyBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMNCitkZG11bDEzMSBtdWx0aXBseSAzIDMgICAtPiA5DQorZGRtdWwxMzIgbXVsdGlwbHkgMyAzMCAgIC0+IDkwDQorZGRtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDANCitkZG11bDEzNCBtdWx0aXBseSAzIDMwMDAgICAtPiA5MDAwDQorZGRtdWwxMzUgbXVsdGlwbHkgMyAzMDAwMCAgIC0+IDkwMDAwDQorZGRtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDANCitkZG11bDEzNyBtdWx0aXBseSAzIDMwMDAwMDAgICAtPiA5MDAwMDAwDQorZGRtdWwxMzggbXVsdGlwbHkgMyAzMDAwMDAwMCAgIC0+IDkwMDAwMDAwDQorZGRtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDANCitkZG11bDE0MCBtdWx0aXBseSAzIDMwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwDQorZGRtdWwxNDEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwDQorZGRtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDANCitkZG11bDE0MyBtdWx0aXBseSAzIDMwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwDQorZGRtdWwxNDQgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwDQorZGRtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDANCisNCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nDQorZGRtdWwzMDEgbXVsdGlwbHkgOSA5ICAgLT4gODENCitkZG11bDMwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwDQorZGRtdWwzMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwDQorZGRtdWwzMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDANCitkZG11bDMwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwDQorZGRtdWwzMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwDQorZGRtdWwzMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDANCitkZG11bDMwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwDQorZGRtdWwzMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwDQorZGRtdWwzMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDANCitkZG11bDMxMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwDQorZGRtdWwzMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwDQorZGRtdWwzMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDANCitkZG11bDMxNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwDQorZGRtdWwzMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwDQorZGRtdWwzMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQorZGRtdWwzMTcgbXVsdGlwbHkgOTAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZA0KK2RkbXVsMzE4IG11bHRpcGx5IDkwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE4ICBSb3VuZGVkDQorZGRtdWwzMTkgbXVsdGlwbHkgOTAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzE5ICBSb3VuZGVkDQorZGRtdWwzMjAgbXVsdGlwbHkgOTAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMCAgUm91bmRlZA0KK2RkbXVsMzIxIG11bHRpcGx5IDkwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIxICBSb3VuZGVkDQorZGRtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gOC4xMDAwMDAwMDAwMDAwMDBFKzIyICBSb3VuZGVkDQorZGRtdWwzMjMgbXVsdGlwbHkgOTAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwRSsyMyAgUm91bmRlZA0KKw0KKy0tIHRyeXplcm9zIGNhc2VzDQorZGRtdWw1MDQgIG11bHRpcGx5ICAwRS0yNjAgMTAwMEUtMjYwICAtPiAwRS0zOTggQ2xhbXBlZA0KK2RkbXVsNTA1ICBtdWx0aXBseSAgMTAwRSsyNjAgMEUrMjYwICAgLT4gMEUrMzY5IENsYW1wZWQNCistLSA2NUstMSBjYXNlDQorZGRtdWw1MDYgbXVsdGlwbHkgNzcuMSA4NTAgLT4gNjU1MzUuMA0KKw0KKy0tIG1peGVkIHdpdGggemVyb3MNCitkZG11bDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTANCitkZG11bDU0MiBtdWx0aXBseSAtMCAgICAtMSAgICAgLT4gIDANCitkZG11bDU0MyBtdWx0aXBseSAgMCAgICAgMSAgICAgLT4gIDANCitkZG11bDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTANCitkZG11bDU0NSBtdWx0aXBseSAtMSAgICAgMCAgICAgLT4gLTANCitkZG11bDU0NiBtdWx0aXBseSAtMSAgICAtMCAgICAgLT4gIDANCitkZG11bDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDANCitkZG11bDU0OCBtdWx0aXBseSAgMSAgICAtMCAgICAgLT4gLTANCisNCitkZG11bDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMA0KK2RkbXVsNTUyIG11bHRpcGx5IC0wLjAgIC0xICAgICAtPiAgMC4wDQorZGRtdWw1NTMgbXVsdGlwbHkgIDAuMCAgIDEgICAgIC0+ICAwLjANCitkZG11bDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMA0KK2RkbXVsNTU1IG11bHRpcGx5IC0xLjAgICAwICAgICAtPiAtMC4wDQorZGRtdWw1NTYgbXVsdGlwbHkgLTEuMCAgLTAgICAgIC0+ICAwLjANCitkZG11bDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMA0KK2RkbXVsNTU4IG11bHRpcGx5ICAxLjAgIC0wICAgICAtPiAtMC4wDQorDQorZGRtdWw1NjEgbXVsdGlwbHkgIDAgICAgLTEuMCAgIC0+IC0wLjANCitkZG11bDU2MiBtdWx0aXBseSAtMCAgICAtMS4wICAgLT4gIDAuMA0KK2RkbXVsNTYzIG11bHRpcGx5ICAwICAgICAxLjAgICAtPiAgMC4wDQorZGRtdWw1NjQgbXVsdGlwbHkgLTAgICAgIDEuMCAgIC0+IC0wLjANCitkZG11bDU2NSBtdWx0aXBseSAtMSAgICAgMC4wICAgLT4gLTAuMA0KK2RkbXVsNTY2IG11bHRpcGx5IC0xICAgIC0wLjAgICAtPiAgMC4wDQorZGRtdWw1NjcgbXVsdGlwbHkgIDEgICAgIDAuMCAgIC0+ICAwLjANCitkZG11bDU2OCBtdWx0aXBseSAgMSAgICAtMC4wICAgLT4gLTAuMA0KKw0KK2RkbXVsNTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMA0KK2RkbXVsNTcyIG11bHRpcGx5IC0wLjAgIC0xLjAgICAtPiAgMC4wMA0KK2RkbXVsNTczIG11bHRpcGx5ICAwLjAgICAxLjAgICAtPiAgMC4wMA0KK2RkbXVsNTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMA0KK2RkbXVsNTc1IG11bHRpcGx5IC0xLjAgICAwLjAgICAtPiAtMC4wMA0KK2RkbXVsNTc2IG11bHRpcGx5IC0xLjAgIC0wLjAgICAtPiAgMC4wMA0KK2RkbXVsNTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMA0KK2RkbXVsNTc4IG11bHRpcGx5ICAxLjAgIC0wLjAgICAtPiAtMC4wMA0KKw0KKw0KKy0tIFNwZWNpYWxzDQorZGRtdWw1ODAgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXVsNTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCitkZG11bDU4MiBtdWx0aXBseSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZGRtdWw1ODMgbXVsdGlwbHkgIEluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw1ODUgbXVsdGlwbHkgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RkbXVsNTg2IG11bHRpcGx5ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCitkZG11bDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRtdWw1ODggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXVsNTg5IG11bHRpcGx5IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCitkZG11bDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQorZGRtdWw1OTEgbXVsdGlwbHkgLTAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw1OTIgbXVsdGlwbHkgIDAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbXVsNTk0IG11bHRpcGx5ICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkZG11bDU5NSBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRtdWw2MDAgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbXVsNjAxIG11bHRpcGx5IC1JbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkZG11bDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQorZGRtdWw2MDMgbXVsdGlwbHkgLUluZiAgLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2MDQgbXVsdGlwbHkgLUluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2RkbXVsNjA2IG11bHRpcGx5IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkZG11bDYwNyBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZGRtdWw2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXVsNjA5IG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkZG11bDYxMCBtdWx0aXBseSAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRtdWw2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2MTIgbXVsdGlwbHkgIDAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2MTMgbXVsdGlwbHkgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RkbXVsNjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG11bDYxNSBtdWx0aXBseSAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorDQorZGRtdWw2MjEgbXVsdGlwbHkgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZG11bDYyMiBtdWx0aXBseSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2RkbXVsNjIzIG11bHRpcGx5ICBOYU4gLTEgICAgICAtPiAgTmFODQorZGRtdWw2MjQgbXVsdGlwbHkgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZG11bDYyNSBtdWx0aXBseSAgTmFOICAwICAgICAgLT4gIE5hTg0KK2RkbXVsNjI2IG11bHRpcGx5ICBOYU4gIDEgICAgICAtPiAgTmFODQorZGRtdWw2MjcgbXVsdGlwbHkgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZG11bDYyOCBtdWx0aXBseSAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2RkbXVsNjI5IG11bHRpcGx5ICBOYU4gIE5hTiAgICAtPiAgTmFODQorZGRtdWw2MzAgbXVsdGlwbHkgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZG11bDYzMSBtdWx0aXBseSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RkbXVsNjMyIG11bHRpcGx5IC0xICAgIE5hTiAgICAtPiAgTmFODQorZGRtdWw2MzMgbXVsdGlwbHkgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZG11bDYzNCBtdWx0aXBseSAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2RkbXVsNjM1IG11bHRpcGx5ICAxICAgIE5hTiAgICAtPiAgTmFODQorZGRtdWw2MzYgbXVsdGlwbHkgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZG11bDYzNyBtdWx0aXBseSAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK2RkbXVsNjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQyIG11bHRpcGx5ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQzIG11bHRpcGx5ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ1IG11bHRpcGx5ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ2IG11bHRpcGx5ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ4IG11bHRpcGx5ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjQ5IG11bHRpcGx5ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjUxIG11bHRpcGx5IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjUyIG11bHRpcGx5IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU0IG11bHRpcGx5IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU1IG11bHRpcGx5ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU3IG11bHRpcGx5ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU4IG11bHRpcGx5ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZG11bDY2MSBtdWx0aXBseSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkZG11bDY2MiBtdWx0aXBseSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgNCitkZG11bDY2MyBtdWx0aXBseSAgTmFONzEgSW5mICAgLT4gIE5hTjcxDQorZGRtdWw2NjQgbXVsdGlwbHkgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQorZGRtdWw2NjUgbXVsdGlwbHkgLUluZiAgIE5hTjQgIC0+ICBOYU40DQorZGRtdWw2NjYgbXVsdGlwbHkgLTk5OSAgIE5hTjMzIC0+ICBOYU4zMw0KK2RkbXVsNjY3IG11bHRpcGx5ICBJbmYgICBOYU4yICAtPiAgTmFOMg0KKw0KK2RkbXVsNjcxIG11bHRpcGx5ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2NzMgbXVsdGlwbHkgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjc0IG11bHRpcGx5ICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2NzYgbXVsdGlwbHkgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjc3IG11bHRpcGx5ICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2NzkgbXVsdGlwbHkgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkbXVsNjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQ0KK2RkbXVsNjgyIG11bHRpcGx5IC1OYU44ICA5OTkgICAtPiAtTmFOOA0KK2RkbXVsNjgzIG11bHRpcGx5IC1OYU43MSBJbmYgICAtPiAtTmFONzENCitkZG11bDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYNCitkZG11bDY4NSBtdWx0aXBseSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCitkZG11bDY4NiBtdWx0aXBseSAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzDQorZGRtdWw2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQorDQorZGRtdWw2OTEgbXVsdGlwbHkgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjkyIG11bHRpcGx5IC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY5MyBtdWx0aXBseSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2OTQgbXVsdGlwbHkgLXNOYU4xNiAtc05hTjk0IC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjk1IG11bHRpcGx5IC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY5NiBtdWx0aXBseSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw2OTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTjkxIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNjk4IG11bHRpcGx5ICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDY5OSBtdWx0aXBseSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRtdWw3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4NCitkZG11bDcwMiBtdWx0aXBseSAtTmFOICAgOTk5ICAgLT4gLU5hTg0KK2RkbXVsNzAzIG11bHRpcGx5IC1OYU4gICBJbmYgICAtPiAtTmFODQorZGRtdWw3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4NCitkZG11bDcwNSBtdWx0aXBseSAtSW5mICAtTmFOMCAgLT4gLU5hTg0KK2RkbXVsNzA2IG11bHRpcGx5IC05OTkgIC1OYU4gICAtPiAtTmFODQorZGRtdWw3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4NCisNCitkZG11bDcxMSBtdWx0aXBseSAtc05hTiAgIC1JbmYgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw3MTMgbXVsdGlwbHkgLXNOYU4wMCAgTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDcxNCBtdWx0aXBseSAtc05hTiAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw3MTYgbXVsdGlwbHkgLUluZiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG11bDcxNyBtdWx0aXBseSAgMDg4ICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbXVsNzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw3MTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMNCistLSBzaWducw0KK2RkbXVsNzUxIG11bHRpcGx5ICAxZSsyNzcgIDFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw3NTIgbXVsdGlwbHkgIDFlKzI3NyAtMWUrMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDc1MyBtdWx0aXBseSAtMWUrMjc3ICAxZSszMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkbXVsNzU0IG11bHRpcGx5IC0xZSsyNzcgLTFlKzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw3NTUgbXVsdGlwbHkgIDFlLTI3NyAgMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkbXVsNzU2IG11bHRpcGx5ICAxZS0yNzcgLTFlLTMxMSAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG11bDc1NyBtdWx0aXBseSAtMWUtMjc3ICAxZS0zMTEgLT4gLTBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRtdWw3NTggbXVsdGlwbHkgLTFlLTI3NyAtMWUtMzExIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KK2RkbXVsNzYwIG11bHRpcGx5IDFlLTI5MSAxZS0xMDEgLT4gMUUtMzkyIFN1Ym5vcm1hbA0KK2RkbXVsNzYxIG11bHRpcGx5IDFlLTI5MSAxZS0xMDIgLT4gMUUtMzkzIFN1Ym5vcm1hbA0KK2RkbXVsNzYyIG11bHRpcGx5IDFlLTI5MSAxZS0xMDMgLT4gMUUtMzk0IFN1Ym5vcm1hbA0KK2RkbXVsNzYzIG11bHRpcGx5IDFlLTI5MSAxZS0xMDQgLT4gMUUtMzk1IFN1Ym5vcm1hbA0KK2RkbXVsNzY0IG11bHRpcGx5IDFlLTI5MSAxZS0xMDUgLT4gMUUtMzk2IFN1Ym5vcm1hbA0KK2RkbXVsNzY1IG11bHRpcGx5IDFlLTI5MSAxZS0xMDYgLT4gMUUtMzk3IFN1Ym5vcm1hbA0KK2RkbXVsNzY2IG11bHRpcGx5IDFlLTI5MSAxZS0xMDcgLT4gMUUtMzk4IFN1Ym5vcm1hbA0KK2RkbXVsNzY3IG11bHRpcGx5IDFlLTI5MSAxZS0xMDggLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG11bDc2OCBtdWx0aXBseSAxZS0yOTEgMWUtMTA5IC0+IDBFLTM5OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRtdWw3NjkgbXVsdGlwbHkgMWUtMjkxIDFlLTExMCAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCitkZG11bDc3MCBtdWx0aXBseSAxZSs2MCAxZSszMjEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgQ2xhbXBlZA0KK2RkbXVsNzcxIG11bHRpcGx5IDFlKzYwIDFlKzMyMiAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgQ2xhbXBlZA0KK2RkbXVsNzcyIG11bHRpcGx5IDFlKzYwIDFlKzMyMyAtPiAxLjAwMDAwMDAwMDAwMDAwRSszODMgIENsYW1wZWQNCitkZG11bDc3MyBtdWx0aXBseSAxZSs2MCAxZSszMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgQ2xhbXBlZA0KK2RkbXVsNzc0IG11bHRpcGx5IDFlKzYwIDFlKzMyNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDc3NSBtdWx0aXBseSAxZSs2MCAxZSszMjYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw3NzYgbXVsdGlwbHkgMWUrNjAgMWUrMzI3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkbXVsNzc3IG11bHRpcGx5IDFlKzYwIDFlKzMyOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDc3OCBtdWx0aXBseSAxZSs2MCAxZSszMjkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw3NzkgbXVsdGlwbHkgMWUrNjAgMWUrMzMwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KK2RkbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTM5NCAgMSAgICAgLT4gMS4wMDAwRS0zOTQgU3Vibm9ybWFsDQorZGRtdWw4MDIgbXVsdGlwbHkgIDEuMDAwRS0zOTQgICAxZS0xICAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCitkZG11bDgwMyBtdWx0aXBseSAgMS4wMEUtMzk0ICAgIDFlLTIgIC0+IDEuMDBFLTM5NiAgIFN1Ym5vcm1hbA0KK2RkbXVsODA0IG11bHRpcGx5ICAxLjBFLTM5NCAgICAgMWUtMyAgLT4gMS4wRS0zOTcgICAgU3Vibm9ybWFsDQorZGRtdWw4MDUgbXVsdGlwbHkgIDEuMEUtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRtdWw4MDYgbXVsdGlwbHkgIDEuM0UtMzk0ICAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MDcgbXVsdGlwbHkgIDEuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MDggbXVsdGlwbHkgIDEuN0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MDkgbXVsdGlwbHkgIDIuM0UtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTAgbXVsdGlwbHkgIDIuNUUtMzk0ICAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTEgbXVsdGlwbHkgIDIuN0UtMzk0ICAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTIgbXVsdGlwbHkgIDEuNDlFLTM5NCAgICAxZS00ICAtPiAxRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTQgbXVsdGlwbHkgIDEuNTFFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTUgbXVsdGlwbHkgIDIuNDlFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTM5NCAgICAxZS00ICAtPiAyRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRtdWw4MTcgbXVsdGlwbHkgIDIuNTFFLTM5NCAgICAxZS00ICAtPiAzRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZGRtdWw4MTggbXVsdGlwbHkgIDFFLTM5NCAgICAgICAxZS00ICAtPiAxRS0zOTggICAgIFN1Ym5vcm1hbA0KK2RkbXVsODE5IG11bHRpcGx5ICAzRS0zOTQgICAgICAgMWUtNSAgLT4gMEUtMzk4ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRtdWw4MjAgbXVsdGlwbHkgIDVFLTM5NCAgICAgICAxZS01ICAtPiAwRS0zOTggICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG11bDgyMSBtdWx0aXBseSAgN0UtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDgyMiBtdWx0aXBseSAgOUUtMzk0ICAgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG11bDgyMyBtdWx0aXBseSAgOS45RS0zOTQgICAgIDFlLTUgIC0+IDFFLTM5OCAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZG11bDgyNCBtdWx0aXBseSAgMUUtMzk0ICAgICAgLTFlLTQgIC0+IC0xRS0zOTggICAgU3Vibm9ybWFsDQorZGRtdWw4MjUgbXVsdGlwbHkgIDNFLTM5NCAgICAgIC0xZS01ICAtPiAtMEUtMzk4ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG11bDgyNiBtdWx0aXBseSAtNUUtMzk0ICAgICAgIDFlLTUgIC0+IC0wRS0zOTggICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RkbXVsODI3IG11bHRpcGx5ICA3RS0zOTQgICAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbXVsODI4IG11bHRpcGx5IC05RS0zOTQgICAgICAgMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbXVsODI5IG11bHRpcGx5ICA5LjlFLTM5NCAgICAtMWUtNSAgLT4gLTFFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbXVsODMwIG11bHRpcGx5ICAzLjBFLTM5NCAgICAtMWUtNSAgLT4gLTBFLTM5OCAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZGRtdWw4MzEgbXVsdGlwbHkgIDEuMEUtMTk5ICAgICAxZS0yMDAgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG11bDgzMiBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OSAtPiAxRS0zOTggICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkZG11bDgzMyBtdWx0aXBseSAgMS4wRS0xOTkgICAgIDFlLTE5OCAtPiAxLjBFLTM5NyAgICBTdWJub3JtYWwNCitkZG11bDgzNCBtdWx0aXBseSAgMi4wRS0xOTkgICAgIDJlLTE5OCAtPiA0LjBFLTM5NyAgICBTdWJub3JtYWwNCitkZG11bDgzNSBtdWx0aXBseSAgNC4wRS0xOTkgICAgIDRlLTE5OCAtPiAxLjYwRS0zOTYgICBTdWJub3JtYWwNCitkZG11bDgzNiBtdWx0aXBseSAxMC4wRS0xOTkgICAgMTBlLTE5OCAtPiAxLjAwMEUtMzk1ICBTdWJub3JtYWwNCitkZG11bDgzNyBtdWx0aXBseSAzMC4wRS0xOTkgICAgMzBlLTE5OCAtPiA5LjAwMEUtMzk1ICBTdWJub3JtYWwNCitkZG11bDgzOCBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4OCAtPiAxLjYwMDBFLTM4NCBTdWJub3JtYWwNCitkZG11bDgzOSBtdWx0aXBseSA0MC4wRS0xOTkgICAgNDBlLTE4NyAtPiAxLjYwMDBFLTM4Mw0KK2RkbXVsODQwIG11bHRpcGx5IDQwLjBFLTE5OSAgICA0MGUtMTg2IC0+IDEuNjAwMEUtMzgyDQorDQorLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQorZGRtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrMzgzICAgICAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2RkbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzM4MyAgICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2RkbXVsODcyIG11bHRpcGx5ICAgICAgOS45OTlFKzM4MyAxMDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2RkbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzM4MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQorZGRtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtMzU1IDEuMjM0N0UtNDAgIC0+ICAxLjUyNEUtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRtdWw4ODIgbXVsdGlwbHkgIDEuMjM0RS0zNTUgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRtdWw4ODMgbXVsdGlwbHkgIDEuMjNFLTM1NSAgMS4yM0UtNDAgICAgIC0+ICAxLjUxM0UtMzk1IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRtdWw4ODQgbXVsdGlwbHkgIDEuMkUtMzU1ICAgMS4yRS00MCAgICAgIC0+ICAxLjQ0RS0zOTUgIFN1Ym5vcm1hbA0KK2RkbXVsODg1IG11bHRpcGx5ICAxLjJFLTM1NSAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtMzk2ICBTdWJub3JtYWwNCitkZG11bDg4NiBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjJFLTQyICAgICAgLT4gIDEuNEUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZG11bDg4NyBtdWx0aXBseSAgMS4yRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuNkUtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZG11bDg4OCBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtMzk3ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZG11bDg4OSBtdWx0aXBseSAgMS4zRS0zNTUgICAxLjNFLTQzICAgICAgLT4gICAgMkUtMzk4ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkZG11bDg5MCBtdWx0aXBseSAgMS4zRS0zNTYgICAxLjNFLTQzICAgICAgLT4gICAgMEUtMzk4ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KKw0KK2RkbXVsODkxIG11bHRpcGx5ICAxLjIzNDVFLTM5ICAgMS4yMzRFLTM1NSAtPiAgMS41MjM0RS0zOTQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkZG11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS0zNTUgLT4gIDEuNTIzNEUtMzk0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRtdWw4OTMgbXVsdGlwbHkgIDEuMjM0NUUtNDAgICAxLjIzNEUtMzU1IC0+ICAxLjUyM0UtMzk1ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RkbXVsODk0IG11bHRpcGx5ICAxLjIzNDU2RS00MCAgMS4yMzRFLTM1NSAtPiAgMS41MjNFLTM5NSAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkZG11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS0zNTUgLT4gIDEuNTJFLTM5NiAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZGRtdWw4OTYgbXVsdGlwbHkgIDEuMjM0NTZFLTQxICAxLjIzNEUtMzU1IC0+ICAxLjUyRS0zOTYgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KKw0KKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYNCitkZG11bDkwMCBtdWx0aXBseSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRtdWw5MDEgbXVsdGlwbHkgIDAuMzAwMDAwMDAwMUUtMTkxIDAuMzAwMDAwMDAwMUUtMTkxIC0+IDkuMDAwMDAwMDA2MDAwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkbXVsOTAyIG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTkgICAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRtdWw5MDMgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAtPiA5Ljk5OTk5OTk5OTk5OTAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCitkZG11bDkwNCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2RkbXVsOTA1IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorLS0gVGhlIG5leHQgcm91bmRzIHRvIE5taW4gKGIqKmVtaW4pOyB0aGlzIGlzIHRoZSBkaXN0aW5ndWlzaGluZyBjYXNlDQorLS0gZm9yIGRldGVjdGluZyB0aW5pbmVzcyAoYmVmb3JlIG9yIGFmdGVyIHJvdW5kaW5nKSAtLSBpZiBhZnRlcg0KKy0tIHJvdW5kaW5nIHRoZW4gdGhlIHJlc3VsdCB3b3VsZCBiZSB0aGUgc2FtZSwgYnV0IHRoZSBVbmRlcmZsb3cgZmxhZw0KKy0tIHdvdWxkIG5vdCBiZSBzZXQNCitkZG11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KKy0tIHByb3ZlIHRob3NlIG9wZXJhbmRzIHdlcmUgZXhhY3QNCitkZG11bDkwNyBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KK2RkbXVsOTA4IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5DQorDQorLS0gcmVkdWNpbmcgdGluaWVzdA0KK2RkbXVsOTEwIG11bHRpcGx5IDFlLTM5OCAwLjk5IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2RkbXVsOTExIG11bHRpcGx5IDFlLTM5OCAwLjc1IC0+IDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2RkbXVsOTEyIG11bHRpcGx5IDFlLTM5OCAwLjUgIC0+IDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZGRtdWw5MTMgbXVsdGlwbHkgMWUtMzk4IDAuMjUgLT4gMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitkZG11bDkxNCBtdWx0aXBseSAxZS0zOTggMC4wMSAtPiAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KKy0tIGh1Z2VzdA0KK2RkbXVsOTIwIG11bHRpcGx5ICA5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OThFKzMxIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHBvd2VyLW9mLXRlbiBlZGdlIGNhc2VzDQorZGRtdWwxMDAxIG11bHRpcGx5ICAxICAgICAgMTAgICAgICAgICAgICAgICAtPiAxMA0KK2RkbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwDQorZGRtdWwxMDAzIG11bHRpcGx5ICAxICAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwDQorZGRtdWwxMDA0IG11bHRpcGx5ICAxICAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMA0KK2RkbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwDQorZGRtdWwxMDA2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwDQorZGRtdWwxMDA3IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMA0KK2RkbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwDQorZGRtdWwxMDA5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwDQorZGRtdWwxMDEwIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMA0KK2RkbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwDQorZGRtdWwxMDEyIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwDQorZGRtdWwxMDEzIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMA0KK2RkbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwDQorZGRtdWwxMDE1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwDQorZGRtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMA0KK2RkbXVsMTAyMiBtdWx0aXBseSAgMTAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAwDQorZGRtdWwxMDIzIG11bHRpcGx5ICAxMCAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDAwDQorZGRtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMA0KK2RkbXVsMTAyNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwDQorZGRtdWwxMDI2IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwDQorZGRtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMA0KK2RkbXVsMTAyOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwDQorZGRtdWwxMDI5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwDQorZGRtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMA0KK2RkbXVsMTAzMSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwDQorZGRtdWwxMDMyIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwDQorZGRtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMA0KK2RkbXVsMTAzNCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAwDQorZGRtdWwxMDM1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDAwDQorZGRtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wDQorZGRtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDANCitkZG11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDANCitkZG11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwDQorZGRtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDANCitkZG11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDANCitkZG11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwDQorZGRtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDANCitkZG11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDANCitkZG11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQorZGRtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDANCitkZG11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDANCitkZG11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQorZGRtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDANCitkZG11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCitkZG11bDEwNjEgbXVsdGlwbHkgIDEwMDAgICAwLjAxICAgICAgICAgICAgIC0+IDEwLjAwDQorZGRtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMA0KK2RkbXVsMTA2MyBtdWx0aXBseSAgMTAwMCAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMA0KK2RkbXVsMTA2NCBtdWx0aXBseSAgMTAwMCAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDANCitkZG11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KK2RkbXVsMTA2NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KK2RkbXVsMTA2NyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDANCitkZG11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KK2RkbXVsMTA2OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KK2RkbXVsMTA3MCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDANCitkZG11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KK2RkbXVsMTA3MiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KK2RkbXVsMTA3MyBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCitkZG11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KK2RkbXVsMTA3NSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KK2RkbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwDQorZGRtdWwxMDgyIG11bHRpcGx5ICAxMDAwMCAgMC4wMSAgICAgICAgICAgICAtPiAxMDAuMDANCitkZG11bDEwODMgbXVsdGlwbHkgIDEwMDAwICAwLjEgICAgICAgICAgICAgIC0+IDEwMDAuMA0KK2RkbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDANCitkZG11bDEwODUgbXVsdGlwbHkgIDEwMDAwICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwMA0KK2RkbXVsMTA4NiBtdWx0aXBseSAgMTAwMDAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwMA0KK2RkbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDANCitkZG11bDEwODggbXVsdGlwbHkgIDEwMDAwICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwMA0KK2RkbXVsMTA4OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwMA0KK2RkbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDANCitkZG11bDEwOTEgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwMA0KK2RkbXVsMTA5MiBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMA0KK2RkbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDANCitkZG11bDEwOTQgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMA0KK2RkbXVsMTA5NSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMA0KKw0KK2RkbXVsMTA5NyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KK2RkbXVsMTA5OCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KKw0KKw0KKy0tIE51bGwgdGVzdHMNCitkZG11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRNaW51cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKaW5kZXggMzlmNThjMS4uZjhhM2MwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZE5leHRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kZG5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk0Ci1kZG5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk1Ci1kZG5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2Ci1kZG5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3Ci1kZG5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4Ci1kZG5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKLWRkbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCi1kZG5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgotZGRuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzCi1kZG5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDQKLWRkbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQotZGRuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2Ci1kZG5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDcKLWRkbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAotZGRuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5Ci1kZG5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTAKLWRkbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQotCi1kZG5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2Ci1kZG5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3Ci1kZG5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4Ci1kZG5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAKLWRkbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQotZGRuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDIKLWRkbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMwotZGRuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0Ci1kZG5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUKLWRkbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNgotZGRuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3Ci1kZG5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgKLWRkbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQotZGRuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCi1kZG5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTEKLWRkbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMgotCi0tLSB1bHRyYS10aW55IGlucHV0cwotZGRuZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgIC0+ICAgMEUtMzk4Ci1kZG5leHRtMDY1IG5leHRtaW51cyAtMUUtMzk4ICAgICAgICAgLT4gIC0yRS0zOTgKLQotLS0gWmVyb3MKLWRkbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtMzk4Ci1kZG5leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTM5OAotZGRuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTgKLWRkbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtMzk4Ci1kZG5leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTM5OAotZGRuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTgKLWRkbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtMzk4Ci1kZG5leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTM5OAotCi0tLSBzcGVjaWFscwotZGRuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQotZGRuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTgotZGRuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKLWRkbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTgotZGRuZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcKLWRkbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotZGRuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0Ci1kZG5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk3RSszODQKLWRkbmV4dG0xNzIgbmV4dG1pbnVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0Ci1kZG5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NAotZGRuZXh0bTE3NCBuZXh0bWludXMgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtPiA4RS0zOTgKLWRkbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLT4gOS44RS0zOTcKLWRkbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5RS0zODcgICAgICAgLT4gOS45OTk5OTk5OTk5OEUtMzg3Ci1kZG5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NAotZGRuZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQKLWRkbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0Ci1kZG5leHRtMTgwIG5leHRtaW51cyAgMEUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKLWRkbmV4dG0xODEgbmV4dG1pbnVzICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMEUtMzk4Ci1kZG5leHRtMTgyIG5leHRtaW51cyAgMkUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OAotCi1kZG5leHRtMTgzIG5leHRtaW51cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTgKLWRkbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTJFLTM5OAotZGRuZXh0bTE4NSBuZXh0bWludXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtM0UtMzk4Ci1kZG5leHRtMTg2IG5leHRtaW51cyAgLTEwRS0zOTggICAgICAgICAgICAgICAgIC0+IC0xLjFFLTM5NwotZGRuZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAtMS4wMUUtMzk2Ci1kZG5leHRtMTg4IG5leHRtaW51cyAgLTEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+IC0xLjAwMDAxRS0zOTMKLWRkbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLWRkbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLWRkbmV4dG0xOTEgbmV4dG1pbnVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLWRkbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLUluZmluaXR5Ci0KLS0tIE51bGwgdGVzdHMKLWRkbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZE5leHRNaW51cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZGRuZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NA0KK2RkbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUNCitkZG5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2DQorZGRuZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Nw0KK2RkbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgNCitkZG5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwDQorZGRuZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyDQorZGRuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzDQorZGRuZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1DQorZGRuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2DQorZGRuZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4DQorZGRuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5DQorZGRuZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDExICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDExDQorDQorZGRuZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Ng0KK2RkbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcNCitkZG5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4DQorZGRuZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMA0KK2RkbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KK2RkbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCitkZG5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCitkZG5leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCitkZG5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQNCitkZG5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCitkZG5leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCitkZG5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcNCitkZG5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCitkZG5leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCitkZG5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTANCitkZG5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCitkZG5leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTINCisNCistLSB1bHRyYS10aW55IGlucHV0cw0KK2RkbmV4dG0wNjIgbmV4dG1pbnVzICAxRS0zOTggICAgICAgICAtPiAgIDBFLTM5OA0KK2RkbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS0zOTggICAgICAgICAtPiAgLTJFLTM5OA0KKw0KKy0tIFplcm9zDQorZGRuZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTgNCitkZG5leHRtMTAxIG5leHRtaW51cyAgMCAgICAgICAgICAgLT4gLTFFLTM5OA0KK2RkbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtMzk4DQorZGRuZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTgNCitkZG5leHRtMTA0IG5leHRtaW51cyAgMEUtMzAwICAgICAgLT4gLTFFLTM5OA0KK2RkbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtMzk4DQorZGRuZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTgNCitkZG5leHRtMTA3IG5leHRtaW51cyAtMEUrMzAwMDAgICAgLT4gLTFFLTM5OA0KKw0KKy0tIHNwZWNpYWxzDQorZGRuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkNCitkZG5leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0bTE1MyBuZXh0bWludXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3DQorZGRuZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0bTE1NiBuZXh0bWludXMgIC1OYU4gICAgLT4gLU5hTg0KK2RkbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43Nw0KK2RkbmV4dG0xNTkgbmV4dG1pbnVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQorZGRuZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0DQorZGRuZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0DQorZGRuZXh0bTE3MiBuZXh0bWludXMgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQNCitkZG5leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NA0KK2RkbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0zOTggICAgICAgICAgICAgICAgICAgLT4gOEUtMzk4DQorZGRuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtPiA5LjhFLTM5Nw0KK2RkbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5RS0zODcgICAgICAgLT4gOS45OTk5OTk5OTk5OEUtMzg3DQorZGRuZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk4RS0zODQNCitkZG5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NA0KK2RkbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0DQorZGRuZXh0bTE4MCBuZXh0bWludXMgIDBFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4DQorZGRuZXh0bTE4MSBuZXh0bWludXMgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAwRS0zOTgNCitkZG5leHRtMTgyIG5leHRtaW51cyAgMkUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OA0KKw0KK2RkbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OA0KK2RkbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTJFLTM5OA0KK2RkbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTNFLTM5OA0KK2RkbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gLTEuMUUtMzk3DQorZGRuZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAtMS4wMUUtMzk2DQorZGRuZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTM5OCAgICAgICAgICAgICAtPiAtMS4wMDAwMUUtMzkzDQorZGRuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KK2RkbmV4dG0xOTAgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHRtMTkxIG5leHRtaW51cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQorZGRuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dG0xOTMgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLUluZmluaXR5DQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0UGx1cy5kZWNUZXN0CmluZGV4IGQ0MWRmYmEuLjRhNzQ5YTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFBsdXMuZGVjVGVzdApAQCAtMSwxMjQgKzEsMTI0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkTmV4dFBsdXMuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWRkbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NgotZGRuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3Ci1kZG5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKLWRkbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgotZGRuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKLWRkbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0Ci1kZG5leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQotZGRuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKLWRkbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3Ci1kZG5leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAotZGRuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKLWRkbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwCi1kZG5leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQotZGRuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTIKLQotZGRuZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk0Ci1kZG5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUKLWRkbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NgotZGRuZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk3Ci1kZG5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKLWRkbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAotZGRuZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCi1kZG5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMwotZGRuZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKLWRkbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1Ci1kZG5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNgotZGRuZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKLWRkbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4Ci1kZG5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQotZGRuZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKLWRkbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCi0KLS0tIFplcm9zCi1kZG5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTAyIG5leHRwbHVzICAwRS0zMDAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA1IG5leHRwbHVzIC0wICAgICAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA4IG5leHRwbHVzIC0wRSszMDAgICAgICAtPiAgMUUtMzk4Ci1kZG5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtMzk4Ci0KLS0tIHNwZWNpYWxzCi1kZG5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQotZGRuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0cDE1MiBuZXh0cGx1cyAgIE5hTiAgICAtPiAgTmFOCi1kZG5leHRwMTUzIG5leHRwbHVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcKLWRkbmV4dHAxNTUgbmV4dHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHRwMTU2IG5leHRwbHVzICAtTmFOICAgIC0+IC1OYU4KLWRkbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHRwMTU4IG5leHRwbHVzICAtTmFONzcgIC0+IC1OYU43NwotZGRuZXh0cDE1OSBuZXh0cGx1cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKLWRkbmV4dHAxNzAgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OThFKzM4NAotZGRuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5N0UrMzg0Ci1kZG5leHRwMTcyIG5leHRwbHVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NAotZGRuZXh0cDE3MyBuZXh0cGx1cyAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQKLWRkbmV4dHAxNzQgbmV4dHBsdXMgIC05RS0zOTggICAgICAgICAgICAgICAgICAtPiAtOEUtMzk4Ci1kZG5leHRwMTc1IG5leHRwbHVzICAtOS45RS0zOTcgICAgICAgICAgICAgICAgLT4gLTkuOEUtMzk3Ci1kZG5leHRwMTc2IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgLT4gLTkuOTk5OTk5OTk5OThFLTM4NwotZGRuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk4RS0zODQKLWRkbmV4dHAxNzggbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0Ci1kZG5leHRwMTc5IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTZFLTM4NAotZGRuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgKLWRkbmV4dHAxODEgbmV4dHBsdXMgIC0xRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMEUtMzk4Ci1kZG5leHRwMTgyIG5leHRwbHVzICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OAotCi1kZG5leHRwMTgzIG5leHRwbHVzICAgMEUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDFFLTM5OAotZGRuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAyRS0zOTgKLWRkbmV4dHAxODUgbmV4dHBsdXMgICAyRS0zOTggICAgICAgICAgICAgICAgICAtPiAgM0UtMzk4Ci1kZG5leHRwMTg2IG5leHRwbHVzICAgMTBFLTM5OCAgICAgICAgICAgICAgICAgLT4gIDEuMUUtMzk3Ci1kZG5leHRwMTg3IG5leHRwbHVzICAgMTAwRS0zOTggICAgICAgICAgICAgICAgLT4gIDEuMDFFLTM5NgotZGRuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS0zOTMKLWRkbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotZGRuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCi1kZG5leHRwMTkxIG5leHRwbHVzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLWRkbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICBJbmZpbml0eQotCi0tLSBOdWxsIHRlc3RzCi1kZG5leHRwOTAwIG5leHRwbHVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZE5leHRQbHVzLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLg0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZGRuZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2DQorZGRuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3DQorZGRuZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk4DQorZGRuZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDANCitkZG5leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQ0KK2RkbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDENCitkZG5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0cDAwOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDINCitkZG5leHRwMDEwIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMw0KK2RkbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0cDAxMiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDUNCitkZG5leHRwMDEzIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwNSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwNg0KK2RkbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0cDAxNSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDgNCitkZG5leHRwMDE2IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwOCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQ0KK2RkbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0cDAxOCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMTENCitkZG5leHRwMDE5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAxMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAxMg0KKw0KK2RkbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NA0KK2RkbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NiAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NQ0KK2RkbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Ng0KK2RkbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Nw0KK2RkbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OA0KK2RkbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCitkZG5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMA0KK2RkbmV4dHAwMzAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0cDAzMSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCitkZG5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMw0KK2RkbmV4dHAwMzMgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0cDAzNCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCitkZG5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNg0KK2RkbmV4dHAwMzYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0cDAzNyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCitkZG5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOQ0KK2RkbmV4dHAwMzkgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDExICAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0cDA0MCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCisNCistLSBaZXJvcw0KK2RkbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTgNCitkZG5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzk4DQorZGRuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5OA0KK2RkbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTgNCitkZG5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzk4DQorZGRuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5OA0KK2RkbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTgNCitkZG5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzk4DQorZGRuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5OA0KK2RkbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTgNCisNCistLSBzcGVjaWFscw0KK2RkbmV4dHAxNTAgbmV4dHBsdXMgICBJbmYgICAgLT4gIEluZmluaXR5DQorZGRuZXh0cDE1MSBuZXh0cGx1cyAgLUluZiAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTg0KK2RkbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcNCitkZG5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTg0KK2RkbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcNCitkZG5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQorZGRuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0DQorZGRuZXh0cDE3MSBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5N0UrMzg0DQorZGRuZXh0cDE3MiBuZXh0cGx1cyAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQNCitkZG5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFLTM4NA0KK2RkbmV4dHAxNzQgbmV4dHBsdXMgIC05RS0zOTggICAgICAgICAgICAgICAgICAtPiAtOEUtMzk4DQorZGRuZXh0cDE3NSBuZXh0cGx1cyAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIC0+IC05LjhFLTM5Nw0KK2RkbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5RS0zODcgICAgICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3DQorZGRuZXh0cDE3NyBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk4RS0zODQNCitkZG5leHRwMTc4IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTdFLTM4NA0KK2RkbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk3RS0zODQgICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0DQorZGRuZXh0cDE4MCBuZXh0cGx1cyAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgNCitkZG5leHRwMTgxIG5leHRwbHVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTBFLTM5OA0KK2RkbmV4dHAxODIgbmV4dHBsdXMgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtPiAtMUUtMzk4DQorDQorZGRuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTM5OCAgICAgICAgICAgICAgICAgIC0+ICAxRS0zOTgNCitkZG5leHRwMTg0IG5leHRwbHVzICAgMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gIDJFLTM5OA0KK2RkbmV4dHAxODUgbmV4dHBsdXMgICAyRS0zOTggICAgICAgICAgICAgICAgICAtPiAgM0UtMzk4DQorZGRuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS0zOTggICAgICAgICAgICAgICAgIC0+ICAxLjFFLTM5Nw0KK2RkbmV4dHAxODcgbmV4dHBsdXMgICAxMDBFLTM5OCAgICAgICAgICAgICAgICAtPiAgMS4wMUUtMzk2DQorZGRuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtMzk4ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS0zOTMNCitkZG5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHRwMTkwIG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHRwMTkxIG5leHRwbHVzICAgMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHRwMTkzIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gIEluZmluaXR5DQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkbmV4dHA5MDAgbmV4dHBsdXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkTmV4dFRvd2FyZC5kZWNUZXN0CmluZGV4IGY5ZTQ3NGQuLjc1Mzg2YWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE5leHRUb3dhcmQuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGROZXh0VG93YXJkLmRlY1Rlc3QKQEAgLTEsMzc0ICsxLDM3NCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZE5leHRUb3dhcmQuZGVjVGVzdCAtLSBkZWNEb3VibGUgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MKLWRkbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCi1kZG5leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMAotZGRuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0dDAwNSBuZXh0dG93YXJkICAtMSAgICAgMTAgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMQotZGRuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTggICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQwMTEgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OSAgMTAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMAotZGRuZXh0dDAxMiBuZXh0dG93YXJkICAgMTAgIDkuOTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDAKLWRkbmV4dHQwMTQgbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQotZGRuZXh0dDAxNSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk4ICAxMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkKLWRkbmV4dHQwMTcgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OCAtMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OQotZGRuZXh0dDAxOCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk4ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5Ci0KLS0tLS0tLS0gbGhzPXJocwotLS0gZmluaXRlcwotZGRuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNwotZGRuZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNwotZGRuZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUKLWRkbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1Ci1kZG5leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwCi1kZG5leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwCi1kZG5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAotZGRuZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDAKLQotLS0gemVyb3MKLWRkbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDAKLWRkbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKLWRkbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQKLWRkbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQKLWRkbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwMDAwMDAwMCAgIDAuMDAwMDAwMDAwMDAwIC0+ICAwRS0xMQotZGRuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExCi1kZG5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDEKLWRkbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZGRuZXh0dDEyMSBuZXh0dG93YXJkICAgMjY4MjY4MjY4ICAgIDI2ODI2ODI2OCAtPiAgIDI2ODI2ODI2OAotZGRuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OAotZGRuZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAotZGRuZXh0dDEyNCBuZXh0dG93YXJkICAtMTM0MTM0MTM0ICAgLTEzNDEzNDEzNCAtPiAgLTEzNDEzNDEzNAotCi0tLSBObWF4LCBObWluLCBOdGlueQotZGRuZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZG5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMKLWRkbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRuZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgIC0+ICAgMUUtMzk4Ci0KLWRkbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAtMUUtMzk4ICAgICAgICAgICAtPiAgLTFFLTM5OAotZGRuZXh0dDEzNiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi1kZG5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMKLWRkbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+ICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotCi0tLS0tLS0tIGxoczxyaHMKLWRkbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2Ci1kZG5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NwotZGRuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwCi1kZG5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dHQyMDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQotZGRuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMgotZGRuZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMwotZGRuZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAotZGRuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQotZGRuZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNgotZGRuZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNwotZGRuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOAotZGRuZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOQotZGRuZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAotZGRuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQotZGRuZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMgotCi1kZG5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NAotZGRuZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTUKLWRkbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk2Ci1kZG5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NwotZGRuZXh0dDIyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MjI4IG5leHR0b3dhcmQgLTEgICAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwCi1kZG5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAyCi1kZG5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCi1kZG5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0Ci1kZG5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA1Ci1kZG5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2Ci1kZG5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3Ci1kZG5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA4Ci1kZG5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5Ci1kZG5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwCi1kZG5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDExCi0KLS0tIFplcm9zCi1kZG5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNwZWNpYWxzCi1kZG5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5Ci1kZG5leHR0MzUxIG5leHR0b3dhcmQgIC1JbmYgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCi1kZG5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3Ci1kZG5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgotZGRuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NwotZGRuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotZGRuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0Ci1kZG5leHR0MzcxIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk3RSszODQKLWRkbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Mzc0IG5leHR0b3dhcmQgIC05RS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk4RS0zODcgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Mzc3IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk2RS0zODQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0MzgwIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kZG5leHR0MzgzIG5leHR0b3dhcmQgICAwRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQzODQgbmV4dHRvd2FyZCAgIDFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMkUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtMzk4ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtMzk4ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQzODcgbmV4dHRvd2FyZCAgIDEwMEUtMzk4ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMUUtMzk2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS0zOTggICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMKLWRkbmV4dHQzOTAgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotZGRuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtMzgzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMUUtMzgzCi1kZG5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszODQKLWRkbmV4dHQzOTMgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotCi0tLS0tLS0tIGxocz5yaHMKLWRkbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTQKLWRkbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUKLWRkbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTYKLWRkbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTcKLWRkbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkKLWRkbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5Ci1kZG5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAKLWRkbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMQotZGRuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyCi1kZG5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMKLWRkbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNAotZGRuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1Ci1kZG5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYKLWRkbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNwotZGRuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4Ci1kZG5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkKLWRkbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMAotZGRuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExCi0KLWRkbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYKLWRkbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcKLWRkbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTgKLWRkbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkKLWRkbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMAotZGRuZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQotZGRuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMgotZGRuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAzCi1kZG5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQKLWRkbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQotZGRuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA2Ci1kZG5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcKLWRkbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOAotZGRuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA5Ci1kZG5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTAKLWRkbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQotZGRuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEyCi0KLS0tIFplcm9zCi1kZG5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNwZWNpYWxzCi1kZG5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5Ci1kZG5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOCi1kZG5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NwotZGRuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOCi1kZG5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43NwotZGRuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCi1kZG5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQKLWRkbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTdFKzM4NAotZGRuZXh0dDY3MiBuZXh0dG93YXJkICAxRS0zODMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDhFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDY3NSBuZXh0dG93YXJkICA5LjlFLTM5NyAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTM5NyAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OEUtMzg3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDY3OCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk3RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDY4MSBuZXh0dG93YXJkICAxRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRuZXh0dDY4MiBuZXh0dG93YXJkICAyRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLQotZGRuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Njg1IG5leHR0b3dhcmQgIC0yRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0zRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTM5OCAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kZG5leHR0Njg4IG5leHR0b3dhcmQgIC0xMDAwMDBFLTM5OCAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAxRS0zOTMgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZGRuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMEUtMzgzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotZGRuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotZGRuZXh0dDY5MSBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4MwotZGRuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OThFKzM4NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0tLS0tLSBTcGVjaWFscwotZGRuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRkbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAxCi1kZG5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZGRuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDEKLWRkbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQotZGRuZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OTk5OTk5OTkKLWRkbmV4dHQ3OTQgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLQotZGRuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRkbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5Ci1kZG5leHR0ODA5IG5leHR0b3dhcmQgLUluZiAgIEluZiAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZG5leHR0ODEwIG5leHR0b3dhcmQgLTEgICAgIEluZiAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkKLWRkbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRkbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxCi1kZG5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMQotZGRuZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZGRuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFOCi1kZG5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRkbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTgotZGRuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFOCi1kZG5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KLWRkbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTgotZGRuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kZG5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRkbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTgotZGRuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kZG5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRkbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTgotZGRuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFOCi1kZG5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRkbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTgotZGRuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kZG5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotZGRuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0MiBuZXh0dG93YXJkICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0NSBuZXh0dG93YXJkICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0OCBuZXh0dG93YXJkICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1MSBuZXh0dG93YXJkIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1NCBuZXh0dG93YXJkIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1NyBuZXh0dG93YXJkICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kZG5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCi1kZG5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1kZG5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCi1kZG5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40Ci1kZG5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1kZG5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Ci1kZG5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44Ci1kZG5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1kZG5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAotZGRuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgotZGRuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Ci1kZG5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KLWRkbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1kZG5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTnVsbCB0ZXN0cwotZGRuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGROZXh0VG93YXJkLmRlY1Rlc3QgLS0gZGVjRG91YmxlIG5leHQgdG93YXJkIHJocyBbNzU0ciBuZXh0YWZ0ZXJdIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjRG91Ymxlcy4NCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcw0KK2RkbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwDQorZGRuZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTANCitkZG5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMQ0KK2RkbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDAwOCBuZXh0dG93YXJkICAgMCAgICAtMTAgICAtPiAtMUUtMzk4ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArSW5maW5pdHkgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQwMTAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0MDExIG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTkgIDEwICAtPiAgMTAuMDAwMDAwMDAwMDAwMDANCitkZG5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MDEzIG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTkgLTEwICAtPiAtMTAuMDAwMDAwMDAwMDAwMDANCitkZG5leHR0MDE0IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTkgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MDE2IG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MDE3IG5leHR0b3dhcmQgICAgICAtOS45OTk5OTk5OTk5OTk5OTggLTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTkNCisNCistLS0tLS0tIGxocz1yaHMNCistLSBmaW5pdGVzDQorZGRuZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNw0KK2RkbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcNCitkZG5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQ0KK2RkbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1DQorZGRuZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MA0KK2RkbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTANCitkZG5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMA0KK2RkbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwDQorDQorLS0gemVyb3MNCitkZG5leHR0MTExIG5leHR0b3dhcmQgICAgICAgICAgMCAgICAgICAwIC0+ICAwDQorZGRuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMA0KK2RkbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQNCitkZG5leHR0MTE0IG5leHR0b3dhcmQgICAgICAtMEUrNCAgICAgIC0wIC0+IC0wRSs0DQorZGRuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExDQorZGRuZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAwMDAwMDAwICAtMC4wMCAgICAgICAgICAgLT4gLTBFLTExDQorZGRuZXh0dDExNyBuZXh0dG93YXJkICAgICAgMEUtMTQxICAgICAgMCAtPiAgMEUtMTQxDQorZGRuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkZG5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4DQorZGRuZXh0dDEyMiBuZXh0dG93YXJkICAtMjY4MjY4MjY4ICAgLTI2ODI2ODI2OCAtPiAgLTI2ODI2ODI2OA0KK2RkbmV4dHQxMjMgbmV4dHRvd2FyZCAgIDEzNDEzNDEzNCAgICAxMzQxMzQxMzQgLT4gICAxMzQxMzQxMzQNCitkZG5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0DQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkZG5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMNCitkZG5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZG5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAgLT4gICAxRS0zOTgNCisNCitkZG5leHR0MTM1IG5leHR0b3dhcmQgIC0xRS0zOTggICAgICAgICAgLTFFLTM5OCAgICAgICAgICAgLT4gIC0xRS0zOTgNCitkZG5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZG5leHR0MTM3IG5leHR0b3dhcmQgIC0xRS0zODMgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAgLT4gIC0xRS0zODMNCitkZG5leHR0MTM4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCisNCistLS0tLS0tIGxoczxyaHMNCitkZG5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Ng0KK2RkbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk3DQorZGRuZXh0dDIwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgNCitkZG5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDANCitkZG5leHR0MjA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMg0KK2RkbmV4dHQyMTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDMNCitkZG5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwNQ0KK2RkbmV4dHQyMTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDUgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDYNCitkZG5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwOA0KK2RkbmV4dHQyMTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDkNCitkZG5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAxMQ0KK2RkbmV4dHQyMTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMTEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMTINCisNCitkZG5leHR0MjIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5NA0KK2RkbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk1DQorZGRuZXh0dDIyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTYNCitkZG5leHR0MjI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Nw0KK2RkbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4DQorZGRuZXh0dDIyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkNCitkZG5leHR0MjI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDANCitkZG5leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMg0KK2RkbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCitkZG5leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwNQ0KK2RkbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCitkZG5leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwOA0KK2RkbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCitkZG5leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAxMQ0KKw0KKy0tIFplcm9zDQorZGRuZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5OCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTggICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzk4ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNwZWNpYWxzDQorZGRuZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQ0KK2RkbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFODQorZGRuZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcNCitkZG5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4NCitkZG5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43Nw0KK2RkbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK2RkbmV4dHQzNzAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OThFKzM4NA0KK2RkbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk4RSszODQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTdFKzM4NA0KK2RkbmV4dHQzNzIgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzMgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzUgbmV4dHRvd2FyZCAgLTkuOUUtMzk3ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOS44RS0zOTcgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzYgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTlFLTM4NyAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OEUtMzg3ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OEUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OThFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5N0UtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzNzkgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5NkUtMzg0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQzODEgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZG5leHR0MzgyIG5leHR0b3dhcmQgIC0yRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitkZG5leHR0MzgzIG5leHR0b3dhcmQgICAwRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg0IG5leHR0b3dhcmQgICAxRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS0zOTggICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDNFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg2IG5leHR0b3dhcmQgICAxMEUtMzk4ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtMzk3ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg3IG5leHR0b3dhcmQgICAxMDBFLTM5OCAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTM5OCAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDFFLTM5MyAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Mzg5IG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwRS0zODMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHR0MzkwIG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHR0MzkxIG5leHR0b3dhcmQgICAxRS0zODMgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHR0MzkyIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5N0UrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk4RSszODQNCitkZG5leHR0MzkzIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICBJbmZpbml0eSAgLT4gIEluZmluaXR5ICAgICAgICAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorLS0tLS0tLSBsaHM+cmhzDQorZGRuZXh0dDQwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5NA0KK2RkbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTUNCitkZG5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk2DQorZGRuZXh0dDQwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5Nw0KK2RkbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTgNCitkZG5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0dDQwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5DQorZGRuZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwDQorZGRuZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDQxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAyDQorZGRuZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAzDQorZGRuZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA0DQorZGRuZXh0dDQxNCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA1DQorZGRuZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA2DQorZGRuZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA3DQorZGRuZXh0dDQxNyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA4DQorZGRuZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDA5DQorZGRuZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDEwDQorZGRuZXh0dDQyMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDExDQorDQorZGRuZXh0dDQyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5Ng0KK2RkbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk2ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTcNCitkZG5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk4DQorZGRuZXh0dDQyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5ICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMA0KK2RkbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMQ0KK2RkbmV4dHQ0MjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAxDQorZGRuZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDENCitkZG5leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDINCitkZG5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDMNCitkZG5leHR0NDMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDQNCitkZG5leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDUNCitkZG5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDYNCitkZG5leHR0NDM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDcNCitkZG5leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDgNCitkZG5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDkNCitkZG5leHR0NDM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTANCitkZG5leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTENCitkZG5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMTINCisNCistLSBaZXJvcw0KK2RkbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0NTAxIG5leHR0b3dhcmQgIDAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0NTA0IG5leHR0b3dhcmQgIDBFLTMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTggICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzk4ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0NTA3IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3BlY2lhbHMNCitkZG5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQ0KK2RkbmV4dHQ1NTIgbmV4dHRvd2FyZCAgIE5hTiAgICAgLUluZmluaXR5IC0+ICBOYU4NCitkZG5leHR0NTUzIG5leHR0b3dhcmQgIHNOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcNCitkZG5leHR0NTU1IG5leHR0b3dhcmQgIHNOYU44OCAgIC1JbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0NTU2IG5leHR0b3dhcmQgIC1OYU4gICAgIC1JbmZpbml0eSAtPiAtTmFODQorZGRuZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDU1OCBuZXh0dG93YXJkICAtTmFONzcgICAtSW5maW5pdHkgLT4gLU5hTjc3DQorZGRuZXh0dDU1OSBuZXh0dG93YXJkIC1zTmFOODggICAtSW5maW5pdHkgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMNCitkZG5leHR0NjcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk4RSszODQNCitkZG5leHR0NjcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk4RSszODQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk3RSszODQNCitkZG5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ2NzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDY3NCBuZXh0dG93YXJkICA5RS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA4RS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtMzk3ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtMzk3ICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ2NzYgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OUUtMzg3ICAgICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OEUtMzg3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDY3NyBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk4RS0zODQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OThFLTM4NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTdFLTM4NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ2NzkgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5N0UtMzg0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5NkUtMzg0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDY4MCBuZXh0dG93YXJkICAwRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTM5OCAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZGRuZXh0dDY4MiBuZXh0dG93YXJkICAyRS0zOTggICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAxRS0zOTggICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZG5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS0zOTggICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xRS0zOTggICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ2ODQgbmV4dHRvd2FyZCAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTM5OCAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDY4NSBuZXh0dG93YXJkICAtMkUtMzk4ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtM0UtMzk4ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtMzk4ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjFFLTM5NyAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ2ODcgbmV4dHRvd2FyZCAgLTEwMEUtMzk4ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTM5NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDY4OCBuZXh0dG93YXJkICAtMTAwMDAwRS0zOTggICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMUUtMzkzICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwRS0zODMgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQorZGRuZXh0dDY5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDFFLTM4Mw0KK2RkbmV4dHQ2OTEgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAxRS0zODMNCitkZG5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OEUrMzg0ICAtSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRuZXh0dDY5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCistLS0tLS0tIFNwZWNpYWxzDQorZGRuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkZG5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRuZXh0dDc4MiBuZXh0dG93YXJkIC1JbmYgIC0xICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ3ODMgbmV4dHRvd2FyZCAtSW5mICAtMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRuZXh0dDc4NSBuZXh0dG93YXJkIC1JbmYgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ3ODYgbmV4dHRvd2FyZCAtSW5mICAgMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAwMDAwMDAwMQ0KK2RkbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZGRuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDENCitkZG5leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDc5MSBuZXh0dG93YXJkICAwICAgIC1JbmYgICAtPiAtMUUtMzk4ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RkbmV4dHQ3OTIgbmV4dHRvd2FyZCAgMSAgICAtSW5mICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTk5OTk5OTk5DQorZGRuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KKw0KK2RkbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0ODAxIG5leHR0b3dhcmQgIEluZiAgLTEwMDAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRuZXh0dDgwMiBuZXh0dG93YXJkICBJbmYgIC0xICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0ODA0IG5leHR0b3dhcmQgIEluZiAgIDAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRuZXh0dDgwNSBuZXh0dG93YXJkICBJbmYgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZG5leHR0ODA3IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTk5OTk5OTk5DQorZGRuZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2RkbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OQ0KK2RkbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5OCAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkZG5leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS0zOTggICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZGRuZXh0dDgxMyBuZXh0dG93YXJkICAxICAgICBJbmYgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDENCitkZG5leHR0ODE0IG5leHR0b3dhcmQgIDEwMDAgIEluZiAgIC0+ICAxMDAwLjAwMDAwMDAwMDAwMQ0KK2RkbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZGRuZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFODQorZGRuZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFODQorZGRuZXh0dDgyMyBuZXh0dG93YXJkICBOYU4gLTEgICAgICAtPiAgTmFODQorZGRuZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFODQorZGRuZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFODQorZGRuZXh0dDgyNiBuZXh0dG93YXJkICBOYU4gIDEgICAgICAtPiAgTmFODQorZGRuZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFODQorZGRuZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFODQorZGRuZXh0dDgyOSBuZXh0dG93YXJkICBOYU4gIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzMiBuZXh0dG93YXJkIC0xICAgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzNSBuZXh0dG93YXJkICAxICAgIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFODQorZGRuZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorZGRuZXh0dDg0MSBuZXh0dG93YXJkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODQzIG5leHR0b3dhcmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg0NCBuZXh0dG93YXJkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODQ2IG5leHR0b3dhcmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg0NyBuZXh0dG93YXJkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODQ5IG5leHR0b3dhcmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg1MCBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODUyIG5leHR0b3dhcmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg1MyBuZXh0dG93YXJkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODU1IG5leHR0b3dhcmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg1NiBuZXh0dG93YXJkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODU4IG5leHR0b3dhcmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg1OSBuZXh0dG93YXJkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZG5leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorZGRuZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KK2RkbmV4dHQ4NjMgbmV4dHRvd2FyZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCitkZG5leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorZGRuZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KK2RkbmV4dHQ4NjYgbmV4dHRvd2FyZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCitkZG5leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorZGRuZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KK2RkbmV4dHQ4NjkgbmV4dHRvd2FyZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQorZGRuZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3MyBuZXh0dG93YXJkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3NiBuZXh0dG93YXJkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg3OSBuZXh0dG93YXJkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRuZXh0dDg4MiBuZXh0dG93YXJkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCitkZG5leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KK2RkbmV4dHQ4ODUgbmV4dHRvd2FyZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE51bGwgdGVzdHMNCitkZG5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkT3IuZGVjVGVzdAppbmRleCBmM2E3MDJiLi5kMzY1ODBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRPci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZE9yLmRlY1Rlc3QKQEAgLTEsMjkyICsxLDI5MiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZE9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgZm9yIGRlY0RvdWJsZXMgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQotZGRvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAotZGRvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQotZGRvcjAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQotZGRvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQotZGRvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKLWRkb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1kZG9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAKLWRkb3IwMDggb3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAotZGRvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCi1kZG9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAotZGRvcjAxMSBvciAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCi1kZG9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKLWRkb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLS0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2Ci1kZG9yMDIwIG9yIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCi1kZG9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCi1kZG9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCi1kZG9yMDIzIG9yICAgIDExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCi1kZG9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCi1kZG9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCi1kZG9yMDI2IG9yICAgICAgIDExMTExMTExMTEgICAgICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCi1kZG9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCi1kZG9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCi1kZG9yMDI5IG9yICAgICAgICAgIDExMTExMTEgICAgICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCi1kZG9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCi1kZG9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCi1kZG9yMDMyIG9yICAgICAgICAgICAgIDExMTEgICAgICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCi1kZG9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCi1kZG9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCi1kZG9yMDM1IG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCi1kZG9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCi0KLWRkb3IwNDIgb3IgIDExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDExMTExMTExMTAwMDAwMDAKLWRkb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDAKLWRkb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDAKLWRkb3IwNDUgb3IgICAgIDExMTExMDAwMDAwMCAgICAgMTAwMDAxMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKLWRkb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKLWRkb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDAKLWRkb3IwNDggb3IgICAgICAgIDExMDAwMDAwMCAgICAgMTAxMDAwMDAwMDAwMDAwMCAgLT4gIDEwMTAwMDAxMTAwMDAwMDAKLWRkb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDAKLQotZGRvcjA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQotZGRvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZGRvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotCi1kZG9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCi1kZG9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExCi1kZG9yMTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCi1kZG9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCi1kZG9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCi1kZG9yMTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCi1kZG9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCi1kZG9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExCi1kZG9yMTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotZGRvcjIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYSBmZXcgcmFuZG9tcwotZGRvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWRkb3IyNTAgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjUxIG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI1MiBvciAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNTMgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjU0IG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI1NSBvciAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNTYgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjU3IG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI1OCBvciAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNTkgb3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjYwIG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI2MSBvciAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNjIgb3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjYzIG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI2NCBvciAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNjUgb3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRC0xCi1kZG9yMjcwIG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI3MSBvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNzIgb3IgIDA4MDAwMDAwMTAwMDAwMDAgMTAwMDAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjczIG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI3NCBvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyNzUgb3IgIDEwMDAwMDAwMDAwMTAwMDAgMDcwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjc2IG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI3NyBvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1kZG9yMjgwIG9yICAwMDEwMDAwMDAwMDAwMDAyIDEwMDAwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI4MSBvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyODIgb3IgIDAwMDAxMDAwMDAwMDAwMDggMTAwMDAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjgzIG9yICAwMDAwMDEwMDAwMDAwMDA5IDEwMDAxMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI4NCBvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyODUgb3IgIDEwMDAwMDAxMDAwMDAwMDAgMDAxMDAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjg2IG9yICAxMDAwMDAwMDEwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI4NyBvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kZG9yMjg4IG9yICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI4OSBvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyOTAgb3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjkxIG9yICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI5MiBvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyOTMgb3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjk0IG9yICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI5NSBvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHNpZ25zCi1kZG9yMjk2IG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IyOTcgb3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjI5OCBvciAgMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMjk5IG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDExMDAwMTAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKLWRkb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjMzMiBvciAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtMTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzMzQgb3IgIDUgICAxRS0xMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjMzNSBvciAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTE5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzMzcgb3IgIDggICAtMUUtMTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzQxIG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNDIgb3IgIDFFLTI5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzQ0IG9yICAxRS0xMDAgICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNDUgb3IgIC0xRS0xMDAgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzQ3IG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKLWRkb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yMzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgotZGRvcjc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZG9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRvcjgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRvcjg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRvcjg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRvcjg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZG9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCitkZG9yMDAxIG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQorZGRvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KK2Rkb3IwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCitkZG9yMDA0IG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxDQorZGRvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMA0KKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQorZGRvcjAwNiBvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCitkZG9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCitkZG9yMDA4IG9yIDEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCitkZG9yMDA5IG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCitkZG9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK2Rkb3IwMTEgb3IgMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KK2Rkb3IwMTIgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KK2Rkb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KKy0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2DQorZGRvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KK2Rkb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTENCitkZG9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExDQorZGRvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KK2Rkb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTENCitkZG9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExDQorZGRvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KK2Rkb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTENCitkZG9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExDQorZGRvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KK2Rkb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTENCitkZG9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExDQorZGRvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KK2Rkb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTENCitkZG9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExDQorZGRvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KK2Rkb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDANCisNCitkZG9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwDQorZGRvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMA0KK2Rkb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDANCitkZG9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwDQorZGRvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMA0KK2Rkb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDANCitkZG9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwDQorZGRvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMA0KKw0KK2Rkb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkZG9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorZGRvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KK2Rkb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkZG9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorZGRvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KK2Rkb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkZG9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorZGRvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KKw0KK2Rkb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTENCitkZG9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExDQorZGRvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQ0KK2Rkb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTENCitkZG9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorZGRvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQ0KK2Rkb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTENCitkZG9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExDQorZGRvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQ0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2Rkb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBhIGZldyByYW5kb21zDQorZGRvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2Rkb3IyNTAgb3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI1MSBvciAgNzAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjUyIG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNTMgb3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI1NCBvciAgMjAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjU1IG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNTYgb3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI1NyBvciAgOTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjU4IG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNTkgb3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI2MCBvciAgMTAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjYxIG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNjIgb3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI2MyBvciAgMDAwMDAwMDAwMDAwMDAwMCA3MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjY0IG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNjUgb3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK2Rkb3IyNzAgb3IgIDAyMDAwMDEwMDAwMDAwMDAgMTAwMDEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI3MSBvciAgMDcwMDAwMDEwMDAwMDAwMCAxMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjcyIG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNzMgb3IgIDA5MDAwMDAwMDEwMDAwMDAgMTAwMDAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI3NCBvciAgMTAwMDAwMDAwMDEwMDAwMCAwMjAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjc1IG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyNzYgb3IgIDEwMDAwMDAwMDAwMDEwMDAgMDgwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI3NyBvciAgMTAwMDAwMDAwMDAwMDEwMCAwOTAwMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2Rkb3IyODAgb3IgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI4MSBvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjgyIG9yICAwMDAwMTAwMDAwMDAwMDA4IDEwMDAwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyODMgb3IgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI4NCBvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjg1IG9yICAxMDAwMDAwMTAwMDAwMDAwIDAwMTAwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyODYgb3IgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI4NyBvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1pZGRpZQ0KK2Rkb3IyODggb3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI4OSBvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjkwIG9yICAwMDAwMTAwMDgwMDAwMDEwIDEwMDAwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyOTEgb3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI5MiBvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZG9yMjkzIG9yICAxMDAwMDAwMTAwMDEwMDAwIDAwMDAwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyOTQgb3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjI5NSBvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK2Rkb3IyOTYgb3IgLTEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyOTcgb3IgLTEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyOTggb3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3IyOTkgb3IgIDEwMDAwMDAwMDEwMDAwMDAgIDAwMDAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDAwMTEwMDAxMDANCisNCistLSBObWF4LCBObWluLCBOdGlueS1saWtlDQorZGRvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzMiBvciAgMyAgIDFFLTE5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzNCBvciAgNSAgIDFFLTEwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzNSBvciAgNiAgIC0xRS0xMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzNyBvciAgOCAgIC0xRS0xOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0MiBvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0NCBvciAgMUUtMTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0NSBvciAgLTFFLTEwMCAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0NyBvciAgLTFFLTI5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorZGRvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2Rkb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rkb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rkb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rkb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZG9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2Rkb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFBsdXMuZGVjVGVzdAppbmRleCAxN2FhMDhhLi41MTkxMjM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUGx1cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkUGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwK3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNEb3VibGVzLgotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MAotCi0tLSBJbmZpbml0aWVzCi1kZHBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQotZGRwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZGRwbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFOCi1kZHBsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFOCi1kZHBsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHBsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWRkcGxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCi1kZHBsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKLWRkcGxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24KLWRkcGxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkcGxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwCi1kZHBsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzAKLWRkcGxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkcGxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZmluaXRlcwotZGRwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNwotZGRwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcKLWRkcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1Ci1kZHBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUKLWRkcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTAKLWRkcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwCi1kZHBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMAotZGRwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwCi0KLS0tIHplcm9zCi1kZHBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwCi1kZHBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwCi1kZHBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0Ci1kZHBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0Ci1kZHBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKLWRkcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotZGRwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCi1kZHBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRkcGxzMTIxIHBsdXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyCi1kZHBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MiAgICAgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODIKLWRkcGxzMTIzIHBsdXMgIDEzNDEzNDEzNDEzNDEzNDEgICAgICAgICAtPiAxMzQxMzQxMzQxMzQxMzQxCi1kZHBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkcGxzMTMxIHBsdXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZHBsczEzMiBwbHVzICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzCi1kZHBsczEzMyBwbHVzICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRwbHMxMzQgcGx1cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwKLQotZGRwbHMxMzUgcGx1cyAgLTFFLTM5OCAgICAgICAgICAgICAgICAgIC0+IC0xRS0zOTggU3Vibm9ybWFsCi1kZHBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKLWRkcGxzMTM3IHBsdXMgIC0xRS0zODMgICAgICAgICAgICAgICAgICAtPiAtMUUtMzgzCi1kZHBsczEzOCBwbHVzICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkUGx1cy5kZWNUZXN0IC0tIGRlY0RvdWJsZSAwK3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkZHBsczAwMSBwbHVzICAgICAgICs3LjUwICAtPiA3LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RkcGxzMDExIHBsdXMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorZGRwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRwbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFODQorZGRwbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTg0KK2RkcGxzMDIzIHBsdXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHBsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2RkcGxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzDQorZGRwbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQorZGRwbHMwMzMgcGx1cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcGxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHBsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KK2RkcGxzMDM2IHBsdXMgICAgICAtTmFONzAgIC0+IC1OYU43MA0KK2RkcGxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHBsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZmluaXRlcw0KK2RkcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcNCitkZHBsczEwMiBwbHVzICAgICAgICAgLTcgICAtPiAtNw0KK2RkcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1DQorZGRwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1DQorZGRwbHMxMDUgcGx1cyAgICAgICA3LjUwICAgLT4gNy41MA0KK2RkcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwDQorZGRwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDANCitkZHBsczEwOCBwbHVzICAgICAgLTcuNTAwICAtPiAtNy41MDANCisNCistLSB6ZXJvcw0KK2RkcGxzMTExIHBsdXMgICAgICAgICAgMCAgIC0+IDANCitkZHBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwDQorZGRwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNA0KK2RkcGxzMTE0IHBsdXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCitkZHBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCitkZHBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitkZHBsczExNyBwbHVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkZHBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RkcGxzMTIxIHBsdXMgIDI2ODI2ODI2ODI2ODI2ODIgICAgICAgICAtPiAyNjgyNjgyNjgyNjgyNjgyDQorZGRwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODIgICAgICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyDQorZGRwbHMxMjMgcGx1cyAgMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgIC0+IDEzNDEzNDEzNDEzNDEzNDENCitkZHBsczEyNCBwbHVzICAtMTM0MTM0MTM0MTM0MTM0MSAgICAgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDENCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RkcGxzMTMxIHBsdXMgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRwbHMxMzIgcGx1cyAgMUUtMzgzICAgICAgICAgICAgICAgICAgIC0+IDFFLTM4Mw0KK2RkcGxzMTMzIHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRwbHMxMzQgcGx1cyAgMUUtMzk4ICAgICAgICAgICAgICAgICAgIC0+IDFFLTM5OCBTdWJub3JtYWwNCisNCitkZHBsczEzNSBwbHVzICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCBTdWJub3JtYWwNCitkZHBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZHBsczEzNyBwbHVzICAtMUUtMzgzICAgICAgICAgICAgICAgICAgLT4gLTFFLTM4Mw0KK2RkcGxzMTM4IHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRRdWFudGl6ZS5kZWNUZXN0CmluZGV4IDBkMTljOWQuLjkxNzc2MjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFF1YW50aXplLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUXVhbnRpemUuZGVjVGVzdApAQCAtMSw4MzMgKzEsODMzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkUXVhbnRpemUuZGVjVGVzdCAtLSBkZWNEb3VibGUgcXVhbnRpemUgb3BlcmF0aW9uICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCi0tLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCi0tLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAotLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kZHF1YTAwMSBxdWFudGl6ZSAwICAgICAgIDFlMCAgIC0+IDAKLWRkcXVhMDAyIHF1YW50aXplIDEgICAgICAgMWUwICAgLT4gMQotZGRxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMDUgcXVhbnRpemUgMC4xICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMDYgcXVhbnRpemUgMC4xICAgICAxZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjEKLWRkcXVhMDA4IHF1YW50aXplIDAuMSAgICAxZS0yICAgLT4gMC4xMAotZGRxdWEwMDkgcXVhbnRpemUgMC4xICAgIDFlLTMgICAtPiAwLjEwMAotZGRxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMTEgcXVhbnRpemUgMC45ICAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMTIgcXVhbnRpemUgMC45ICAgIDFlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkKLWRkcXVhMDE0IHF1YW50aXplIDAuOSAgICAxZS0yICAgLT4gMC45MAotZGRxdWEwMTUgcXVhbnRpemUgMC45ICAgIDFlLTMgICAtPiAwLjkwMAotLS0gbmVnYXRpdmVzCi1kZHF1YTAyMSBxdWFudGl6ZSAtMCAgICAgIDFlMCAgIC0+IC0wCi1kZHF1YTAyMiBxdWFudGl6ZSAtMSAgICAgIDFlMCAgIC0+IC0xCi1kZHF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMjUgcXVhbnRpemUgLTAuMSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDI2IHF1YW50aXplIC0wLjEgICAgMWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjEKLWRkcXVhMDI4IHF1YW50aXplIC0wLjEgICAxZS0yICAgLT4gLTAuMTAKLWRkcXVhMDI5IHF1YW50aXplIC0wLjEgICAxZS0zICAgLT4gLTAuMTAwCi1kZHF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMzEgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDMyIHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKLWRkcXVhMDM0IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKLWRkcXVhMDM1IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCi1kZHF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwMzcgcXVhbnRpemUgLTAuNSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDM4IHF1YW50aXplIC0wLjUgICAxZSswICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUKLWRkcXVhMDQwIHF1YW50aXplIC0wLjUgICAxZS0yICAgLT4gLTAuNTAKLWRkcXVhMDQxIHF1YW50aXplIC0wLjUgICAxZS0zICAgLT4gLTAuNTAwCi1kZHF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEwNDMgcXVhbnRpemUgLTAuOSAgIDFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDQ0IHF1YW50aXplIC0wLjkgICAxZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkKLWRkcXVhMDQ2IHF1YW50aXplIC0wLjkgICAxZS0yICAgLT4gLTAuOTAKLWRkcXVhMDQ3IHF1YW50aXplIC0wLjkgICAxZS0zICAgLT4gLTAuOTAwCi0KLS0tIGV4YW1wbGVzIGZyb20gU3BlY2lmaWNhdGlvbgotZGRxdWEwNjAgcXVhbnRpemUgMi4xNyAgIDAuMDAxICAtPiAyLjE3MAotZGRxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3Ci1kZHF1YTA2MiBxdWFudGl6ZSAyLjE3ICAgMC4xICAgIC0+IDIuMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDYzIHF1YW50aXplIDIuMTcgICAxZSswICAgLT4gMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDY1IHF1YW50aXplIC1JbmYgICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHF1YTA2NiBxdWFudGl6ZSAyICAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDY4IHF1YW50aXplIC0wICAgICAgMWUrNSAgICAgLT4gLTBFKzUKLWRkcXVhMDY5IHF1YW50aXplICsxMjM0NTY3ODkwMTIzNDUuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWEwNzAgcXVhbnRpemUgLTk4NzY1NDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTA3MSBxdWFudGl6ZSAyMTcgICAgMWUtMSAgIC0+IDIxNy4wCi1kZHF1YTA3MiBxdWFudGl6ZSAyMTcgICAgMWUrMCAgIC0+IDIxNwotZGRxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTA3NCBxdWFudGl6ZSAyMTcgICAgMWUrMiAgIC0+IDJFKzIgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGdlbmVyYWwgdGVzdHMgLi4KLWRkcXVhMDg5IHF1YW50aXplIDEyICAgICAxZSs0ICAgLT4gMEUrNCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDkwIHF1YW50aXplIDEyICAgICAxZSszICAgLT4gMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDkyIHF1YW50aXplIDEyICAgICAxZSsxICAgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDkzIHF1YW50aXplIDEuMjM0NSAxZS0yICAgLT4gMS4yMyBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMDk1IHF1YW50aXplIDEuMjM0NSAxZS02ICAgLT4gMS4yMzQ1MDAKLWRkcXVhMDk2IHF1YW50aXplIDkuOTk5OSAxZS0yICAgLT4gMTAuMDAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTA5OCBxdWFudGl6ZSAwLjAwMSAgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTA5OSBxdWFudGl6ZSAwLjAwOSAgMWUtMiAgIC0+IDAuMDEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMTAxIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gIC0xCi1kZHF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wCi1kZHF1YTEwMyBxdWFudGl6ZSAtMSAgICAgMWUtMiAgIC0+ICAtMS4wMAotZGRxdWExMDQgcXVhbnRpemUgIDAgICAgICAxZTAgICAtPiAgMAotZGRxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wCi1kZHF1YTEwNiBxdWFudGl6ZSAgMCAgICAgMWUtMiAgIC0+ICAwLjAwCi1kZHF1YTEwNyBxdWFudGl6ZSAgMC4wMCAgIDFlMCAgIC0+ICAwCi1kZHF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxCi1kZHF1YTEwOSBxdWFudGl6ZSAgMCAgICAgMWUrMiAgIC0+ICAwRSsyCi1kZHF1YTExMCBxdWFudGl6ZSArMSAgICAgIDFlMCAgIC0+ICAxCi1kZHF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjAKLWRkcXVhMTEyIHF1YW50aXplICsxICAgICAxZS0yICAgLT4gIDEuMDAKLQotZGRxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MAotZGRxdWExMjEgcXVhbnRpemUgICAxLjA0ICAxZS0yIC0+ICAxLjA0Ci1kZHF1YTEyMiBxdWFudGl6ZSAgIDEuMDQgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTI0IHF1YW50aXplICAgMS4wNSAgMWUtMyAtPiAgMS4wNTAKLWRkcXVhMTI1IHF1YW50aXplICAgMS4wNSAgMWUtMiAtPiAgMS4wNQotZGRxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEzMSBxdWFudGl6ZSAgIDEuMDUgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEzMiBxdWFudGl6ZSAgIDEuMDYgIDFlLTMgLT4gIDEuMDYwCi1kZHF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYKLWRkcXVhMTM0IHF1YW50aXplICAgMS4wNiAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAotZGRxdWExMzUgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTE0MCBxdWFudGl6ZSAgIC0xMCAgICAxZS0yICAtPiAgLTEwLjAwCi1kZHF1YTE0MSBxdWFudGl6ZSAgICsxICAgICAxZS0yICAtPiAgMS4wMAotZGRxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwCi1kZHF1YTE0MyBxdWFudGl6ZSAgIDFFKzE3ICAxZS0yICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTE0NCBxdWFudGl6ZSAgIDFFLTE3ICAxZS0yICAtPiAgMC4wMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAotZGRxdWExNDYgcXVhbnRpemUgICAxRS0yICAgMWUtMiAgLT4gIDAuMDEKLWRkcXVhMTQ3IHF1YW50aXplICAgMUUtMSAgIDFlLTIgIC0+ICAwLjEwCi1kZHF1YTE0OCBxdWFudGl6ZSAgIDBFLTE3ICAxZS0yICAtPiAgMC4wMAotCi1kZHF1YTE1MCBxdWFudGl6ZSAgIDEuMDYwMCAxZS01IC0+ICAxLjA2MDAwCi1kZHF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDAKLWRkcXVhMTUyIHF1YW50aXplICAgMS4wNjAwIDFlLTMgLT4gIDEuMDYwIFJvdW5kZWQKLWRkcXVhMTUzIHF1YW50aXplICAgMS4wNjAwIDFlLTIgLT4gIDEuMDYgUm91bmRlZAotZGRxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAotZGRxdWExNTUgcXVhbnRpemUgICAxLjA2MDAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzCi1yb3VuZGluZzogICAgaGFsZl91cAotZGRxdWExNTcgcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZAotZGRxdWExNTkgcXVhbnRpemUgICAxLjA2ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBiYXNlIHRlc3RzIHdpdGggbm9uLTEgY29lZmZpY2llbnRzCi1kZHF1YTE2MSBxdWFudGl6ZSAwICAgICAgLTllMCAgIC0+IDAKLWRkcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQotZGRxdWExNjMgcXVhbnRpemUgMC4xICAgLTFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjUgcXVhbnRpemUgMC4xICAgIDBlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjcgcXVhbnRpemUgMC4xICAgIDNlLTEgICAtPiAwLjEKLWRkcXVhMTY4IHF1YW50aXplIDAuMSAgIDQ0ZS0yICAgLT4gMC4xMAotZGRxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMAotZGRxdWExNzAgcXVhbnRpemUgMC45IDY2NjZlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzEgcXVhbnRpemUgMC45IC03NzdlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzMgcXVhbnRpemUgMC45ICAgLTllLTEgICAtPiAwLjkKLWRkcXVhMTc0IHF1YW50aXplIDAuOSAgICAwZS0yICAgLT4gMC45MAotZGRxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDAKLS0tIG5lZ2F0aXZlcwotZGRxdWExODEgcXVhbnRpemUgLTAgICAgMS4xZTAgICAtPiAtMC4wCi1kZHF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xCi1kZHF1YTE4MyBxdWFudGl6ZSAtMC4xICAxMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWExODUgcXVhbnRpemUgLTAuMSAxMTFlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE4NyBxdWFudGl6ZSAtMC4xIC05MWUtMSAgIC0+IC0wLjEKLWRkcXVhMTg4IHF1YW50aXplIC0wLjEgLS4xZS0yICAgLT4gLTAuMTAwCi1kZHF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMAotZGRxdWExOTAgcXVhbnRpemUgLTAuOSAgIDBlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTkxIHF1YW50aXplIC0wLjkgIC0wZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotZGRxdWExOTMgcXVhbnRpemUgLTAuOSAxMDBlLTEgICAtPiAtMC45Ci1kZHF1YTE5NCBxdWFudGl6ZSAtMC45IDk5OWUtMiAgIC0+IC0wLjkwCi0KLS0tICt2ZSBleHBvbmVudHMgLi4KLWRkcXVhMjAxIHF1YW50aXplICAgLTEgICAxZSswIC0+ICAtMQotZGRxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDMgcXVhbnRpemUgICAtMSAgIDFlKzIgLT4gIC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDQgcXVhbnRpemUgICAgMCAgIDFlKzAgLT4gIDAKLWRkcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxCi1kZHF1YTIwNiBxdWFudGl6ZSAgICAwICAgMWUrMiAtPiAgMEUrMgotZGRxdWEyMDcgcXVhbnRpemUgICArMSAgIDFlKzAgLT4gIDEKLWRkcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDkgcXVhbnRpemUgICArMSAgIDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjEgcXVhbnRpemUgICAxLjA0IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIyMiBxdWFudGl6ZSAgIDEuMDQgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjQgcXVhbnRpemUgICAxLjA1IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIyNSBxdWFudGl6ZSAgIDEuMDUgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjcgcXVhbnRpemUgICAxLjA1IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIyOCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMzAgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIzMSBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMzMgcXVhbnRpemUgICAxLjA2IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIzNCBxdWFudGl6ZSAgIDEuMDYgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTI0MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzEgIC0+ICAtMUUrMSBSb3VuZGVkCi1kZHF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyNDIgcXVhbnRpemUgICArMTAgICAxZSsxICAtPiAgMUUrMSBSb3VuZGVkCi1kZHF1YTI0MyBxdWFudGl6ZSAgIDFFKzEgIDFlKzEgIC0+ICAxRSsxICAgICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLWRkcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZGRxdWEyNDUgcXVhbnRpemUgICAxRSszICAxZSsxICAtPiAgMS4wMEUrMyAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi1kZHF1YTI0NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzEgIC0+ICAxLjAwMEUrNCAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLWRkcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZGRxdWEyNDggcXVhbnRpemUgICAxRSs2ICAxZSsxICAtPiAgMS4wMDAwMEUrNiAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi1kZHF1YTI0OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzEgIC0+ICAxLjAwMDAwMEUrNyAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLWRkcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZGRxdWEyNTEgcXVhbnRpemUgICAxRSs5ICAxZSsxICAtPiAgMS4wMDAwMDAwMEUrOSAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi0tLSBuZXh0IG9uZSB0cmllcyB0byBhZGQgOSB6ZXJvcwotZGRxdWEyNTIgcXVhbnRpemUgICAxRSsxNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTI1MyBxdWFudGl6ZSAgIDFFLTE3IDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEyNTQgcXVhbnRpemUgICAxRS0yICAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjU1IHF1YW50aXplICAgMEUtMTcgMWUrMSAgLT4gIDBFKzEKLWRkcXVhMjU2IHF1YW50aXplICAtMEUtMTcgMWUrMSAgLT4gLTBFKzEKLWRkcXVhMjU3IHF1YW50aXplICAtMEUtMSAgMWUrMSAgLT4gLTBFKzEKLWRkcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzEKLWRkcXVhMjU5IHF1YW50aXplICAtMEUrMSAgMWUrMSAgLT4gLTBFKzEKLQotZGRxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTI2MSBxdWFudGl6ZSAgICsxICAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEyNjIgcXVhbnRpemUgICArMTAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTI2NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzIgIC0+ICAxRSsyCi1kZHF1YTI2NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzIgIC0+ICAxLjBFKzMKLWRkcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQKLWRkcXVhMjY3IHF1YW50aXplICAgMUUrNSAgMWUrMiAgLT4gIDEuMDAwRSs1Ci1kZHF1YTI2OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzIgIC0+ICAxLjAwMDBFKzYKLWRkcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcKLWRkcXVhMjcwIHF1YW50aXplICAgMUUrOCAgMWUrMiAgLT4gIDEuMDAwMDAwRSs4Ci1kZHF1YTI3MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzIgIC0+ICAxLjAwMDAwMDBFKzkKLWRkcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwCi1kZHF1YTI3MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEyNzQgcXVhbnRpemUgICAxRS0yICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzIKLQotZGRxdWEyODAgcXVhbnRpemUgICAtMTAgICAxZSszICAtPiAgLTBFKzMgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZGRxdWEyODIgcXVhbnRpemUgICArMTAgICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjgzIHF1YW50aXplICAgMUUrMSAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZGRxdWEyODUgcXVhbnRpemUgICAxRSszICAxZSszICAtPiAgMUUrMwotZGRxdWEyODYgcXVhbnRpemUgICAxRSs0ICAxZSszICAtPiAgMS4wRSs0Ci1kZHF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1Ci1kZHF1YTI4OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzMgIC0+ICAxLjAwMEUrNgotZGRxdWEyODkgcXVhbnRpemUgICAxRSs3ICAxZSszICAtPiAgMS4wMDAwRSs3Ci1kZHF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4Ci1kZHF1YTI5MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzMgIC0+ICAxLjAwMDAwMEUrOQotZGRxdWEyOTIgcXVhbnRpemUgICAxRSsxMCAxZSszICAtPiAgMS4wMDAwMDAwRSsxMAotZGRxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjk0IHF1YW50aXplICAgMUUtMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTI5NSBxdWFudGl6ZSAgIDBFLTEwIDFlKzMgIC0+ICAwRSszCi0KLS0tIHJvdW5kIHVwIGZyb20gYmVsb3cgW3NpZ24gd3JvbmcgaW4gSklUIGNvbXBpbGVyIG9uY2VdCi1kZHF1YTMwMCBxdWFudGl6ZSAgIDAuMDA3OCAxZS01IC0+ICAwLjAwNzgwCi1kZHF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgKLWRkcXVhMzAyIHF1YW50aXplICAgMC4wMDc4IDFlLTMgLT4gIDAuMDA4IEluZXhhY3QgUm91bmRlZAotZGRxdWEzMDMgcXVhbnRpemUgICAwLjAwNzggMWUtMiAtPiAgMC4wMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzA1IHF1YW50aXplICAgMC4wMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTMwNiBxdWFudGl6ZSAgIDAuMDA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZGRxdWEzMTAgcXVhbnRpemUgIC0wLjAwNzggMWUtNSAtPiAtMC4wMDc4MAotZGRxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4Ci1kZHF1YTMxMiBxdWFudGl6ZSAgLTAuMDA3OCAxZS0zIC0+IC0wLjAwOCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzEzIHF1YW50aXplICAtMC4wMDc4IDFlLTIgLT4gLTAuMDEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTMxNSBxdWFudGl6ZSAgLTAuMDA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAotZGRxdWEzMTYgcXVhbnRpemUgIC0wLjAwNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMzIwIHF1YW50aXplICAgMC4wNzggMWUtNSAtPiAgMC4wNzgwMAotZGRxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODAKLWRkcXVhMzIyIHF1YW50aXplICAgMC4wNzggMWUtMyAtPiAgMC4wNzgKLWRkcXVhMzIzIHF1YW50aXplICAgMC4wNzggMWUtMiAtPiAgMC4wOCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZAotZGRxdWEzMjUgcXVhbnRpemUgICAwLjA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZAotZGRxdWEzMjYgcXVhbnRpemUgICAwLjA3OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTMzMCBxdWFudGl6ZSAgLTAuMDc4IDFlLTUgLT4gLTAuMDc4MDAKLWRkcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwCi1kZHF1YTMzMiBxdWFudGl6ZSAgLTAuMDc4IDFlLTMgLT4gLTAuMDc4Ci1kZHF1YTMzMyBxdWFudGl6ZSAgLTAuMDc4IDFlLTIgLT4gLTAuMDggSW5leGFjdCBSb3VuZGVkCi1kZHF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzM1IHF1YW50aXplICAtMC4wNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzM2IHF1YW50aXplICAtMC4wNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZGRxdWEzNDAgcXVhbnRpemUgICAwLjc4IDFlLTUgLT4gIDAuNzgwMDAKLWRkcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDAKLWRkcXVhMzQyIHF1YW50aXplICAgMC43OCAxZS0zIC0+ICAwLjc4MAotZGRxdWEzNDMgcXVhbnRpemUgICAwLjc4IDFlLTIgLT4gIDAuNzgKLWRkcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkCi1kZHF1YTM0NSBxdWFudGl6ZSAgIDAuNzggIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzQ2IHF1YW50aXplICAgMC43OCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMzUwIHF1YW50aXplICAtMC43OCAxZS01IC0+IC0wLjc4MDAwCi1kZHF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwCi1kZHF1YTM1MiBxdWFudGl6ZSAgLTAuNzggMWUtMyAtPiAtMC43ODAKLWRkcXVhMzUzIHF1YW50aXplICAtMC43OCAxZS0yIC0+IC0wLjc4Ci1kZHF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZAotZGRxdWEzNTUgcXVhbnRpemUgIC0wLjc4ICAxZTAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTM1NiBxdWFudGl6ZSAgLTAuNzggMWUrMSAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTM2MCBxdWFudGl6ZSAgIDcuOCAxZS01IC0+ICA3LjgwMDAwCi1kZHF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDAKLWRkcXVhMzYyIHF1YW50aXplICAgNy44IDFlLTMgLT4gIDcuODAwCi1kZHF1YTM2MyBxdWFudGl6ZSAgIDcuOCAxZS0yIC0+ICA3LjgwCi1kZHF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgKLWRkcXVhMzY1IHF1YW50aXplICAgNy44ICAxZTAgLT4gIDggSW5leGFjdCBSb3VuZGVkCi1kZHF1YTM2NiBxdWFudGl6ZSAgIDcuOCAxZSsxIC0+ICAxRSsxIEluZXhhY3QgUm91bmRlZAotZGRxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzY4IHF1YW50aXplICAgNy44IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDAKLWRkcXVhMzcxIHF1YW50aXplICAtNy44IDFlLTQgLT4gLTcuODAwMAotZGRxdWEzNzIgcXVhbnRpemUgIC03LjggMWUtMyAtPiAtNy44MDAKLWRkcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODAKLWRkcXVhMzc0IHF1YW50aXplICAtNy44IDFlLTEgLT4gLTcuOAotZGRxdWEzNzUgcXVhbnRpemUgIC03LjggIDFlMCAtPiAtOCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTM3NyBxdWFudGl6ZSAgLTcuOCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZGRxdWEzNzggcXVhbnRpemUgIC03LjggMWUrMyAtPiAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc29tZSBpbmRpdmlkdWFscwotZGRxdWEzODAgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IDEyMzQ1NjczNTIzNjQuNTEgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTM4MSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NDUuMDYKLWRkcXVhMzgyIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhMzgzIHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhMzg0IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzg1IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NDUuMDYKLWRkcXVhMzg2IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhMzg3IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotcm91bmRpbmc6IGRvd24KLWRkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tID8gc2hvdWxkIHRoYXQgb25lIGluc3RlYWQgaGF2ZSBiZWVuOgotLS0gZGRxdWEzODkgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm91bmRpbmc6IGhhbGZfdXAKLQotLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKLWRkcXVhMzkxIHF1YW50aXplICAxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzkyIHF1YW50aXplICAxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMzkzIHF1YW50aXplICAxMjM0NTY3ODkxMjM0LjU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMjM0LjU2NwotZGRxdWEzOTQgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1LjY3ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWEzOTUgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1Ni43ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWEzOTYgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1NjcuICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBzb21lIDk5OTkgcm91bmQtdXAgY2FzZXMKLWRkcXVhNDAwIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTUgIC0+ICA5Ljk5OTAwCi1kZHF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwCi1kZHF1YTQwMiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0zICAtPiAgOS45OTkKLWRkcXVhNDAzIHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTIgIC0+IDEwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDA1IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTAgIC0+IDEwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDA2IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTEgIC0+IDFFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZGRxdWE0MTAgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtNSAgLT4gIDAuOTk5MDAKLWRkcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTAKLWRkcXVhNDEyIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTMgIC0+ICAwLjk5OQotZGRxdWE0MTMgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMiAgLT4gIDEuMDAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MTUgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMCAgLT4gIDEgICAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MTYgcXVhbnRpemUgICAwLjk5OSAgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTQyMCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS01ICAtPiAgMC4wOTk5MAotZGRxdWE0MjEgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNCAgLT4gIDAuMDk5OQotZGRxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MjMgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMiAgLT4gIDAuMTAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MjQgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMSAgLT4gIDAuMSAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MjYgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQotZGRxdWE0MzEgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNCAgLT4gIDAuMDEwMCAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MzIgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMyAgLT4gIDAuMDEwICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MzQgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MzUgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTQ0MCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS01ICAtPiAgMC4wMDEwMCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0MiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0zICAtPiAgMC4wMDEgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0MyBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0yICAtPiAgMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0NSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ0NiBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMTAwMSBxdWFudGl6ZSAgMC4wMDAgICAgICAgIDAuMDAxIC0+ICAwLjAwMAotZGRxdWExMDAyIHF1YW50aXplICAwLjAwMSAgICAgICAgMC4wMDEgLT4gIDAuMDAxCi1kZHF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMDA0IHF1YW50aXplICAwLjAwMTggICAgICAgMC4wMDEgLT4gIDAuMDAyICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTAwNSBxdWFudGl6ZSAgMC41MDEgICAgICAgIDAuMDAxIC0+ICAwLjUwMQotZGRxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTAwNyBxdWFudGl6ZSAgMC41MDE4ICAgICAgIDAuMDAxIC0+ICAwLjUwMiAgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEwMDggcXVhbnRpemUgIDAuOTk5ICAgICAgICAwLjAwMSAtPiAgMC45OTkKLQotZGRxdWE0ODEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKLWRkcXVhNDgyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCi1kZHF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAotZGRxdWE0ODQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAotZGRxdWE0ODUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKLS0tIGEgcG90ZW50aWFsIGRvdWJsZS1yb3VuZAotZGRxdWE0ODcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKLQotZGRxdWE0OTEgcXVhbnRpemUgMTIzNDU2NzgwMDAgMWUrMyAtPiAxLjIzNDU2NzhFKzEwIFJvdW5kZWQKLWRkcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCi1kZHF1YTQ5MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAotZGRxdWE0OTQgcXVhbnRpemUgMTIzNDU2Nzg5MSAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAotZGRxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDk2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNDk3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAotZGRxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFplcm9zCi1kZHF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQotZGRxdWE1MDEgcXVhbnRpemUgICAwICAgICAxZTAgLT4gIDAKLWRkcXVhNTAyIHF1YW50aXplICAgMCAgICAxZS0xIC0+ICAwLjAKLWRkcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjAKLWRkcXVhNTA0IHF1YW50aXplICAgMC4wICAgMWUwIC0+ICAwCi1kZHF1YTUwNSBxdWFudGl6ZSAgIDAuMCAgMWUrMSAtPiAgMEUrMQotZGRxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMAotZGRxdWE1MDcgcXVhbnRpemUgICAwRSsxICAxZTAgLT4gIDAKLWRkcXVhNTA4IHF1YW50aXplICAgMEUrMSAxZSsxIC0+ICAwRSsxCi1kZHF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQotZGRxdWE1MTAgcXVhbnRpemUgIC0wICAgICAxZTAgLT4gLTAKLWRkcXVhNTExIHF1YW50aXplICAtMCAgICAxZS0xIC0+IC0wLjAKLWRkcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjAKLWRkcXVhNTEzIHF1YW50aXplICAtMC4wICAgMWUwIC0+IC0wCi1kZHF1YTUxNCBxdWFudGl6ZSAgLTAuMCAgMWUrMSAtPiAtMEUrMQotZGRxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMAotZGRxdWE1MTYgcXVhbnRpemUgIC0wRSsxICAxZTAgLT4gLTAKLWRkcXVhNTE3IHF1YW50aXplICAtMEUrMSAxZSsxIC0+IC0wRSsxCi0KLS0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcwotZGRxdWE1MjAgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTUyMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNTIyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAotZGRxdWE1MjMgcXVhbnRpemUgMTIzLjQ1NiAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCi0tLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbAotZGRxdWE1MjYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNTI3IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTUyOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1MjkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRxdWE1MzIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNTMzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTUzNCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE1MzcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQotLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cwotZGRxdWE1MzggcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1MzkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gW21vcmUgYmVsb3ddCi0KLS0tIFNwZWNpYWxzCi1kZHF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRkcXVhNTgxIHF1YW50aXplICBJbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNTg0IHF1YW50aXplICBJbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kZHF1YTU4NyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQotZGRxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNTkwIHF1YW50aXplICAwICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNTkzIHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZGRxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKLWRkcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTYwMiBxdWFudGl6ZSAtSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTYwNSBxdWFudGl6ZSAtSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQotZGRxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjA4IHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkKLWRkcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2MTEgcXVhbnRpemUgIDEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRkcXVhNjE0IHF1YW50aXplIC1JbmYgIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi1kZHF1YTYyMSBxdWFudGl6ZSAgTmFOICAgLUluZiAgICAtPiAgTmFOCi1kZHF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFOCi1kZHF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFOCi1kZHF1YTYyNCBxdWFudGl6ZSAgTmFOICAxZTAgICAgICAtPiAgTmFOCi1kZHF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFOCi1kZHF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFOCi1kZHF1YTYyNyBxdWFudGl6ZSAgTmFOICAgIEluZiAgICAtPiAgTmFOCi1kZHF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzMCBxdWFudGl6ZSAtMTAwMCAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzMyBxdWFudGl6ZSAgMSAgICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFOCi1kZHF1YTYzNiBxdWFudGl6ZSAgTmFOIDFlLTAgICAgICAtPiAgTmFOCi1kZHF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFOCi0KLWRkcXVhNjQxIHF1YW50aXplICBzTmFOICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjQ0IHF1YW50aXplICBzTmFOICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjQ3IHF1YW50aXplICBzTmFOICAgIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjUwIHF1YW50aXplIC1JbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjUzIHF1YW50aXplICAwICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjU2IHF1YW50aXplICBJbmYgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjU5IHF1YW50aXplIC0wICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkcXVhNjYxIHF1YW50aXplICBOYU45IC1JbmYgICAtPiAgTmFOOQotZGRxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44Ci1kZHF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxCi1kZHF1YTY2NCBxdWFudGl6ZSAgTmFONiAgTmFONSAgLT4gIE5hTjYKLWRkcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONAotZGRxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQotZGRxdWE2NjcgcXVhbnRpemUgIEluZiAgIE5hTjIgIC0+ICBOYU4yCi0KLWRkcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjcyIHF1YW50aXplICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc1IHF1YW50aXplICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc4IHF1YW50aXplICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KLQotZGRxdWE2ODEgcXVhbnRpemUgLU5hTjkgLUluZiAgIC0+IC1OYU45Ci1kZHF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgKLWRkcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzEKLWRkcXVhNjg0IHF1YW50aXplIC1OYU42IC1OYU41ICAtPiAtTmFONgotZGRxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40Ci1kZHF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxCi1kZHF1YTY4NyBxdWFudGl6ZSAgSW5mICAtTmFOMiAgLT4gLU5hTjIKLQotZGRxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTIgcXVhbnRpemUgLXNOYU45OCAtMTEgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTUgcXVhbnRpemUgLU5hTjk1IC1zTmFOOTMgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTggcXVhbnRpemUgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZGRxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKLWRkcXVhNzEwIHF1YW50aXplICAxLjAwRS0zODMgICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBSb3VuZGVkCi1kZHF1YTcxMSBxdWFudGl6ZSAgMC4xRS0zODMgICAgMmUtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbAotZGRxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTM4MyAgIDNlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZAotZGRxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS0zODMgIDRlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZAotZGRxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTM4MyAgIDVlLTM4NSAgLT4gICAxRS0zODUgICBTdWJub3JtYWwKLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCi1kZHF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTM4MyAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTcxNiBxdWFudGl6ZSAgMC4wOTlFLTM4MyAxMGUtMzg0ICAtPiAgIDFFLTM4NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKLQotZGRxdWE3MTcgcXVhbnRpemUgIDAuMDA5RS0zODMgIDFlLTM4NSAgLT4gICAxRS0zODUgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCi1kZHF1YTcxOCBxdWFudGl6ZSAgMC4wMDFFLTM4MyAgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE3MTkgcXVhbnRpemUgIDAuMDAwOUUtMzgzIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNzIwIHF1YW50aXplICAwLjAwMDFFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhNzMwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODMgIC0+ICAtMUUtMzgzICAgICBSb3VuZGVkCi1kZHF1YTczMSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0Ci1kZHF1YTczMiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0Ci1kZHF1YTczMyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0Ci1kZHF1YTczNCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgotZGRxdWE3MzUgcXVhbnRpemUgLTAuOTk5RS0zODMgOTBlLTM4MyAgLT4gIC0xRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE3MzYgcXVhbnRpemUgLTAuMDk5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE3MzcgcXVhbnRpemUgLTAuMDA5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE3MzggcXVhbnRpemUgLTAuMDAxRS0zODMgLTBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAotZGRxdWE3MzkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTc0MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg0IC0+ICAtMS4wRS0zODMgICBSb3VuZGVkCi1kZHF1YTc0MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbAotZGRxdWE3NDIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwgUm91bmRlZAotZGRxdWE3NDMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NCAtPiAgLTFFLTM4NCAgICBTdWJub3JtYWwgUm91bmRlZAotZGRxdWE3NDQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCi1kZHF1YTc0NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg0IC0+ICAtMS4wRS0zODMgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNzQ2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAotZGRxdWE3NDcgcXVhbnRpemUgLTAuMDA5RS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNzQ4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTc0OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZAotCi1kZHF1YTc1MCBxdWFudGl6ZSAtMS4wMEUtMzgzICAgMWUtMzg1IC0+ICAtMS4wMEUtMzgzCi1kZHF1YTc1MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbAotZGRxdWE3NTIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwKLWRkcXVhNzUzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsIFJvdW5kZWQKLWRkcXVhNzU0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODUgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgotZGRxdWE3NTUgcXVhbnRpemUgLTAuOTk5RS0zODMgIDFlLTM4NSAtPiAgLTEuMDBFLTM4MyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTc1NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKLWRkcXVhNzU3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODUgLT4gIC0xRS0zODUgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAotZGRxdWE3NTggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NSAtPiAgLTBFLTM4NSAgICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhNzU5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhNzYwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODYgLT4gIC0xLjAwMEUtMzgzCi1kZHF1YTc2MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwKLWRkcXVhNzYyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODYgLT4gIC0xLjAwRS0zODQgIFN1Ym5vcm1hbAotZGRxdWE3NjMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NiAtPiAgLTEuMDBFLTM4NCAgU3Vibm9ybWFsCi1kZHF1YTc2NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg2IC0+ICAtMS4wRS0zODUgICBTdWJub3JtYWwKLWRkcXVhNzY1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODYgLT4gIC05Ljk5RS0zODQgIFN1Ym5vcm1hbAotZGRxdWE3NjYgcXVhbnRpemUgLTAuMDk5RS0zODMgIDFlLTM4NiAtPiAgLTkuOUUtMzg1ICAgU3Vibm9ybWFsCi1kZHF1YTc2NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg2IC0+ICAtOUUtMzg2ICAgICBTdWJub3JtYWwKLWRkcXVhNzY4IHF1YW50aXplIC0wLjAwMUUtMzgzICAxZS0zODYgLT4gIC0xRS0zODYgICAgIFN1Ym5vcm1hbAotZGRxdWE3NjkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDFlLTM4NiAtPiAgLTBFLTM4NiAgICAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE1vcmUgZnJvbSBGdW5nIExlZQotZGRxdWExMDIxIHF1YW50aXplICA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0ICAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+ICA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0Ci1kZHF1YTEwMjIgcXVhbnRpemUgLTguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gLTguNjY2NjY2NjY2NjY2MDAwRSszODQKLWRkcXVhMTAyNyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzIzICAxRSszMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcXVhMTAyOSBxdWFudGl6ZSA4LjY2NjY2NjY2RSszICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZAotCi0KLS0tZGRxdWExMDMwIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkIEluZXhhY3QKLS0tZGRxdWExMDMxIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCi0tLWRkcXVhMTAzMiBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MyAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAotLS1kZHF1YTEwMzMgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODIgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQKLS0tZGRxdWExMDM0IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgxICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkCi0tLWRkcXVhMTAzNSBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MCAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZAotCi0tLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucwotZGRxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2Ci1kZHF1YTEwNDEgcXVhbnRpemUgLTIxNDc0ODM2NDcgICAgIDAgLT4gLTIxNDc0ODM2NDcKLWRkcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OAotZGRxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5Ci1kZHF1YTEwNDQgcXVhbnRpemUgIDIxNDc0ODM2NDYgICAgIDAgLT4gIDIxNDc0ODM2NDYKLWRkcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0NwotZGRxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4Ci1kZHF1YTEwNDcgcXVhbnRpemUgIDIxNDc0ODM2NDkgICAgIDAgLT4gIDIxNDc0ODM2NDkKLWRkcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NAotZGRxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1Ci1kZHF1YTEwNTAgcXVhbnRpemUgIDQyOTQ5NjcyOTYgICAgIDAgLT4gIDQyOTQ5NjcyOTYKLWRkcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5NwotCi0tLSBSb3VuZGluZyBzd2F0aGUKLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRkcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKLWRkcXVhMTEwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTEwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTEwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfdXAKLWRkcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKLWRkcXVhMTIwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTIwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTIwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfZG93bgotZGRxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAotZGRxdWExMzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAotZGRxdWExMzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogdXAKLWRkcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKLWRkcXVhMTQwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTQwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTQwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTQxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZGRxdWExNTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAotZGRxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTUwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTUwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTUwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBjZWlsaW5nCi1kZHF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCi1kZHF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTYwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTYwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTYwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGZsb29yCi1kZHF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCi1kZHF1YTE3MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE3MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE3MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZGRxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE3MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IDA1dXAKLWRkcXVhMTgwMCBxdWFudGl6ZSAgMS4yMDAwICAgIDEuMDAgICAgLT4gIDEuMjAgIFJvdW5kZWQKLWRkcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE4MDMgcXVhbnRpemUgIDEuMjA1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE4MDggcXVhbnRpemUgIDEuMjA3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQKLWRkcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExOTAyIHF1YW50aXplICAxLjIxMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExOTA3IHF1YW50aXplICAxLjIxNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZGRxdWExOTExIHF1YW50aXplIC0xLjIxOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQKLWRkcXVhMjAwMSBxdWFudGl6ZSAgMS4yNDAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjAwNCBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjAwOSBxdWFudGl6ZSAgMS4yNDk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMjEwMCBxdWFudGl6ZSAgMS4yNTAwICAgIDEuMDAgICAgLT4gIDEuMjUgIFJvdW5kZWQKLWRkcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIxMDMgcXVhbnRpemUgIDEuMjU1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIxMDggcXVhbnRpemUgIDEuMjU3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQKLWRkcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjAyIHF1YW50aXplICAxLjI2MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjA3IHF1YW50aXplICAxLjI2NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMjExIHF1YW50aXplIC0xLjI2OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkCi0KLWRkcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQKLWRkcXVhMjMwMSBxdWFudGl6ZSAgMS4yOTAxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjMwNCBxdWFudGl6ZSAgMS4yOTUxICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCi1kZHF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRkcXVhMjMwOSBxdWFudGl6ZSAgMS4yOTk5ICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAotZGRxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE51bGwgdGVzdHMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRkcXVhOTk4IHF1YW50aXplIDEwICAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHF1YTk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRRdWFudGl6ZS5kZWNUZXN0IC0tIGRlY0RvdWJsZSBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIE1vc3Qgb2YgdGhlIHRlc3RzIGhlcmUgYXNzdW1lIGEgInJlZ3VsYXIgcGF0dGVybiIsIHdoZXJlIHRoZQ0KKy0tIHNpZ24gYW5kIGNvZWZmaWNpZW50IGFyZSArMS4NCistLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZA0KKy0tIDIwMDUuMDYuMDggTW9yZSBleHRlbnNpdmUgdGVzdHMgZm9yICdkb2VzIG5vdCBmaXQnDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZGRxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwDQorZGRxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxDQorZGRxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjENCitkZHF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTANCitkZHF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwDQorZGRxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkNCitkZHF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTANCitkZHF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwDQorLS0gbmVnYXRpdmVzDQorZGRxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMA0KK2RkcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTENCitkZHF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjENCitkZHF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwDQorZGRxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDANCitkZHF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCitkZHF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQorZGRxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCitkZHF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUNCitkZHF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwDQorZGRxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDANCitkZHF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCitkZHF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQorZGRxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCisNCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24NCitkZHF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwDQorZGRxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3DQorZGRxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RkcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1DQorZGRxdWEwNjkgcXVhbnRpemUgKzEyMzQ1Njc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWEwNzAgcXVhbnRpemUgLTk4NzY1NDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMA0KK2RkcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3DQorZGRxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGdlbmVyYWwgdGVzdHMgLi4NCitkZHF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwDQorZGRxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTENCitkZHF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wDQorZGRxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDANCitkZHF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwDQorZGRxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wDQorZGRxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMA0KK2RkcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDANCitkZHF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxDQorZGRxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMg0KK2RkcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDENCitkZHF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjANCitkZHF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwDQorDQorZGRxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MA0KK2RkcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNA0KK2RkcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwDQorZGRxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1DQorZGRxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjANCitkZHF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYNCitkZHF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMA0KK2RkcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwDQorZGRxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwDQorZGRxdWExNDMgcXVhbnRpemUgICAxRSsxNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhMTQ0IHF1YW50aXplICAgMUUtMTcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxDQorZGRxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTANCitkZHF1YTE0OCBxdWFudGl6ZSAgIDBFLTE3ICAxZS0yICAtPiAgMC4wMA0KKw0KK2RkcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDANCitkZHF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDANCitkZHF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkDQorZGRxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkDQorZGRxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkZHF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cw0KK2RkcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMA0KK2RkcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQ0KK2RkcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xDQorZGRxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwDQorZGRxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMA0KK2RkcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45DQorZGRxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwDQorZGRxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDANCistLSBuZWdhdGl2ZXMNCitkZHF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjANCitkZHF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xDQorZGRxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xDQorZGRxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDANCitkZHF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMA0KK2RkcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQ0KK2RkcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTANCisNCistLSArdmUgZXhwb25lbnRzIC4uDQorZGRxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xDQorZGRxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMA0KK2RkcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxDQorZGRxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzINCitkZHF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQ0KK2RkcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQNCitkZHF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZA0KK2RkcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RkcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zDQorZGRxdWEyNTIgcXVhbnRpemUgICAxRSsxNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWEyNTMgcXVhbnRpemUgICAxRS0xNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjU1IHF1YW50aXplICAgMEUtMTcgMWUrMSAgLT4gIDBFKzENCitkZHF1YTI1NiBxdWFudGl6ZSAgLTBFLTE3IDFlKzEgIC0+IC0wRSsxDQorZGRxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQ0KK2RkcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzENCitkZHF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxDQorDQorZGRxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMg0KK2RkcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMw0KK2RkcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQNCitkZHF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQ0KK2RkcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNg0KK2RkcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcNCitkZHF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOA0KK2RkcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQ0KK2RkcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwDQorZGRxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzINCisNCitkZHF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMNCitkZHF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQNCitkZHF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1DQorZGRxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYNCitkZHF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcNCitkZHF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4DQorZGRxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkNCitkZHF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwDQorZGRxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMNCisNCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQ0KK2RkcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODANCitkZHF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgNCitkZHF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwDQorZGRxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4DQorZGRxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwDQorZGRxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODANCitkZHF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4DQorZGRxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMA0KK2RkcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwDQorZGRxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OA0KK2RkcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMA0KK2RkcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDANCitkZHF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODANCitkZHF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OA0KK2RkcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDANCitkZHF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwDQorZGRxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwDQorZGRxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgNCitkZHF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDANCitkZHF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDANCitkZHF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMA0KK2RkcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODANCitkZHF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgNCitkZHF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDANCitkZHF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDANCitkZHF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMA0KK2RkcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODANCitkZHF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgNCitkZHF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgaW5kaXZpZHVhbHMNCitkZHF1YTM4MCBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTM4MSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTIzNDU2NzM1MjM2NDUuMDYNCitkZHF1YTM4MiBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWEzODMgcXVhbnRpemUgICAxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhMzg0IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTM4NSBxdWFudGl6ZSAgLTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTEyMzQ1NjczNTIzNjQ1LjA2DQorZGRxdWEzODYgcXVhbnRpemUgIC0xMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhMzg3IHF1YW50aXplICAtMTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCityb3VuZGluZzogZG93bg0KK2RkcXVhMzg5IHF1YW50aXplICAgMTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSA/IHNob3VsZCB0aGF0IG9uZSBpbnN0ZWFkIGhhdmUgYmVlbjoNCistLSBkZHF1YTM4OSBxdWFudGl6ZSAgIDEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm91bmRpbmc6IGhhbGZfdXANCisNCistLSBhbmQgYSBmZXcgbW9yZSBmcm9tIGUtbWFpbCBkaXNjdXNzaW9ucw0KK2RkcXVhMzkxIHF1YW50aXplICAxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTM5MiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzLjQ1NjcgIDFlLTMgLT4gMTIzNDU2Nzg5MTIzLjQ1NyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEzOTMgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQuNTY3ICAxZS0zIC0+IDEyMzQ1Njc4OTEyMzQuNTY3DQorZGRxdWEzOTQgcXVhbnRpemUgIDEyMzQ1Njc4OTEyMzQ1LjY3ICAxZS0zIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhMzk1IHF1YW50aXplICAxMjM0NTY3ODkxMjM0NTYuNyAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTM5NiBxdWFudGl6ZSAgMTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzDQorZGRxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDANCitkZHF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwDQorZGRxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5DQorZGRxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMA0KK2RkcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTANCitkZHF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkNCitkZHF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTANCitkZHF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5DQorZGRxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQ0KK2RkcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDANCitkZHF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDENCitkZHF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxDQorZGRxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQ0KKw0KK2RkcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkDQorZGRxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCitkZHF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KK2RkcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQNCitkZHF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZA0KK2RkcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQorZGRxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCitkZHF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gWmVyb3MNCitkZHF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQ0KK2RkcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwDQorZGRxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMA0KK2RkcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjANCitkZHF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMA0KK2RkcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxDQorZGRxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMA0KK2RkcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwDQorZGRxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzENCitkZHF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQ0KK2RkcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wDQorZGRxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMA0KK2RkcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjANCitkZHF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMA0KK2RkcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxDQorZGRxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMA0KK2RkcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wDQorZGRxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzENCisNCistLSBTdXNwaWNpb3VzIFJIUyB2YWx1ZXMNCitkZHF1YTUyMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTUyMSBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTUyMiBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTUyMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQNCistLSBuZXh0IGZvdXIgYXJlICJ3b24ndCBmaXQiIG92ZXJmbA0KK2RkcXVhNTI2IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1MjcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTUyOCBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNTI5IHF1YW50aXplIDEyMy40NTYgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRxdWE1MzIgcXVhbnRpemUgICAxLjIzNEUrMjk5ICAgIDFlMjk5IC0+IDFFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTUzMyBxdWFudGl6ZSAgIDEuMjM0RSsyOTggICAgMWUyOTkgLT4gMEUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNTM0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE1MzcgcXVhbnRpemUgICAwICAgICAgICAgICAgMWUtMjk5IC0+IDBFLTI5OQ0KKy0tIG5leHQgdHdvIGFyZSAid29uJ3QgZml0IiBvdmVyZmxvd3MNCitkZHF1YTUzOCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1MzkgcXVhbnRpemUgICAxLjIzNCAgICAgICAgMWUtMzAwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIFttb3JlIGJlbG93XQ0KKw0KKy0tIFNwZWNpYWxzDQorZGRxdWE1ODAgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTU4MiBxdWFudGl6ZSAgSW5mICAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNTgzIHF1YW50aXplICBJbmYgICAxZTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTU4NSBxdWFudGl6ZSAgSW5mICAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNTg2IHF1YW50aXplICBJbmYgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RkcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1ODggcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RkcXVhNTg5IHF1YW50aXplIC0xICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTU5MSBxdWFudGl6ZSAgMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNTkyIHF1YW50aXplICAxMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZGRxdWE1OTQgcXVhbnRpemUgIEluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTU5NSBxdWFudGl6ZSAtMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkcXVhNjAwIHF1YW50aXplIC1JbmYgICAgLUluZiAgIC0+ICAtSW5maW5pdHkNCitkZHF1YTYwMSBxdWFudGl6ZSAtSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2MDMgcXVhbnRpemUgLUluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTYwNCBxdWFudGl6ZSAtSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2MDYgcXVhbnRpemUgLUluZiAgICAgSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RkcXVhNjA3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RkcXVhNjA5IHF1YW50aXplIC0xICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2MTAgcXVhbnRpemUgIDAgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjEyIHF1YW50aXplICAxMDAwICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2MTMgcXVhbnRpemUgIEluZiAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTYxNSBxdWFudGl6ZSAtMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4NCitkZHF1YTYyMiBxdWFudGl6ZSAgTmFOIDFlLTI5OSAgICAtPiAgTmFODQorZGRxdWE2MjMgcXVhbnRpemUgIE5hTiAxZS0xICAgICAgLT4gIE5hTg0KK2RkcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4NCitkZHF1YTYyNSBxdWFudGl6ZSAgTmFOICAxZTEgICAgICAtPiAgTmFODQorZGRxdWE2MjYgcXVhbnRpemUgIE5hTiAgMWUyOTkgICAgLT4gIE5hTg0KK2RkcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4NCitkZHF1YTYyOCBxdWFudGl6ZSAgTmFOICAgIE5hTiAgICAtPiAgTmFODQorZGRxdWE2MjkgcXVhbnRpemUgLUluZiAgICBOYU4gICAgLT4gIE5hTg0KK2RkcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4NCitkZHF1YTYzMSBxdWFudGl6ZSAtMSAgICAgIE5hTiAgICAtPiAgTmFODQorZGRxdWE2MzIgcXVhbnRpemUgIDAgICAgICBOYU4gICAgLT4gIE5hTg0KK2RkcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4NCitkZHF1YTYzNCBxdWFudGl6ZSAgMTAwMCAgIE5hTiAgICAtPiAgTmFODQorZGRxdWE2MzUgcXVhbnRpemUgIEluZiAgICBOYU4gICAgLT4gIE5hTg0KK2RkcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4NCitkZHF1YTYzNyBxdWFudGl6ZSAtMCAgICAgIE5hTiAgICAtPiAgTmFODQorDQorZGRxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY0MiBxdWFudGl6ZSAgc05hTiAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjQzIHF1YW50aXplICBzTmFOIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY0NSBxdWFudGl6ZSAgc05hTiAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjQ2IHF1YW50aXplICBzTmFOICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY0OCBxdWFudGl6ZSAgc05hTiAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjQ5IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY1MSBxdWFudGl6ZSAtMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjUyIHF1YW50aXplIC0xICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY1NCBxdWFudGl6ZSAgMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjU1IHF1YW50aXplICAxMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY1NyBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjU4IHF1YW50aXplICBzTmFOIDFlLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQorZGRxdWE2NjIgcXVhbnRpemUgIE5hTjggIDkxOSAgIC0+ICBOYU44DQorZGRxdWE2NjMgcXVhbnRpemUgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KK2RkcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONg0KK2RkcXVhNjY1IHF1YW50aXplIC1JbmYgICBOYU40ICAtPiAgTmFONA0KK2RkcXVhNjY2IHF1YW50aXplIC05MTkgICBOYU4zMSAtPiAgTmFOMzENCitkZHF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCisNCitkZHF1YTY3MSBxdWFudGl6ZSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjczIHF1YW50aXplICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY3NCBxdWFudGl6ZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjc2IHF1YW50aXplIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY3NyBxdWFudGl6ZSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjc5IHF1YW50aXplICBOYU4gICAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCitkZHF1YTY4MiBxdWFudGl6ZSAtTmFOOCAgOTE5ICAgLT4gLU5hTjgNCitkZHF1YTY4MyBxdWFudGl6ZSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQorZGRxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQorZGRxdWE2ODUgcXVhbnRpemUgLUluZiAgLU5hTjQgIC0+IC1OYU40DQorZGRxdWE2ODYgcXVhbnRpemUgLTkxOSAgLU5hTjMxIC0+IC1OYU4zMQ0KK2RkcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KKw0KK2RkcXVhNjkxIHF1YW50aXplIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2OTMgcXVhbnRpemUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjk0IHF1YW50aXplIC1zTmFOMTYgc05hTjk0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2OTYgcXVhbnRpemUgLUluZiAgIC1zTmFOOTIgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhNjk3IHF1YW50aXplICAwODggICAtc05hTjkxICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZHF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWE2OTkgcXVhbnRpemUgIE5hTiAgIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KK2RkcXVhNzEwIHF1YW50aXplICAxLjAwRS0zODMgICAgMWUtMzgzICAtPiAgIDFFLTM4MyAgICBSb3VuZGVkDQorZGRxdWE3MTEgcXVhbnRpemUgIDAuMUUtMzgzICAgIDJlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwNCitkZHF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtMzgzICAgM2UtMzg0ICAtPiAgIDFFLTM4NCAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS0zODMgIDRlLTM4NCAgLT4gICAxRS0zODQgICBTdWJub3JtYWwgUm91bmRlZA0KK2RkcXVhNzE0IHF1YW50aXplICAwLjAxRS0zODMgICA1ZS0zODUgIC0+ICAgMUUtMzg1ICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCitkZHF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTM4MyAgIDFlLTM4MyAgLT4gICAxRS0zODMgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS0zODMgMTBlLTM4NCAgLT4gICAxRS0zODQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQorDQorZGRxdWE3MTcgcXVhbnRpemUgIDAuMDA5RS0zODMgIDFlLTM4NSAgLT4gICAxRS0zODUgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQorZGRxdWE3MTggcXVhbnRpemUgIDAuMDAxRS0zODMgIDFlLTM4NSAgLT4gICAwRS0zODUgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTcxOSBxdWFudGl6ZSAgMC4wMDA5RS0zODMgMWUtMzg1ICAtPiAgIDBFLTM4NSAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNzIwIHF1YW50aXplICAwLjAwMDFFLTM4MyAxZS0zODUgIC0+ICAgMEUtMzg1ICAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWE3MzAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4MyAgLT4gIC0xRS0zODMgICAgIFJvdW5kZWQNCitkZHF1YTczMSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgUm91bmRlZCBJbmV4YWN0DQorZGRxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTM4MyAgIDFlLTM4MyAgLT4gIC0wRS0zODMgICAgIFJvdW5kZWQgSW5leGFjdA0KK2RkcXVhNzMzIHF1YW50aXplIC0wLjEwMEUtMzgzICAxZS0zODMgIC0+ICAtMEUtMzgzICAgICBSb3VuZGVkIEluZXhhY3QNCitkZHF1YTczNCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCitkZHF1YTczNSBxdWFudGl6ZSAtMC45OTlFLTM4MyA5MGUtMzgzICAtPiAgLTFFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE3MzYgcXVhbnRpemUgLTAuMDk5RS0zODMgLTFlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtMzgzIC0xZS0zODMgIC0+ICAtMEUtMzgzICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTczOCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAtMGUtMzgzICAtPiAgLTBFLTM4MyAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE3MzkgcXVhbnRpemUgLTAuMDAwMUUtMzgzIDBlLTM4MyAgLT4gIC0wRS0zODMgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhNzQwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIFJvdW5kZWQNCitkZHF1YTc0MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbA0KK2RkcXVhNzQyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODQgLT4gIC0xRS0zODQgICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkZHF1YTc0MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg0IC0+ICAtMUUtMzg0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRxdWE3NDQgcXVhbnRpemUgLTAuMDFFLTM4MyAgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQNCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbg0KK2RkcXVhNzQ1IHF1YW50aXplIC0wLjk5OUUtMzgzICAxZS0zODQgLT4gIC0xLjBFLTM4MyAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNzQ2IHF1YW50aXplIC0wLjA5OUUtMzgzICAxZS0zODQgLT4gIC0xRS0zODQgICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KK2RkcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtMzgzICAxZS0zODQgLT4gIC0wRS0zODQgICAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWE3NDggcXVhbnRpemUgLTAuMDAxRS0zODMgIDFlLTM4NCAtPiAgLTBFLTM4NCAgICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTc0OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg0IC0+ICAtMEUtMzg0ICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhNzUwIHF1YW50aXplIC0xLjAwRS0zODMgICAxZS0zODUgLT4gIC0xLjAwRS0zODMNCitkZHF1YTc1MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIFN1Ym5vcm1hbA0KK2RkcXVhNzUyIHF1YW50aXplIC0wLjEwRS0zODMgICAxZS0zODUgLT4gIC0xLjBFLTM4NCAgU3Vibm9ybWFsDQorZGRxdWE3NTMgcXVhbnRpemUgLTAuMTAwRS0zODMgIDFlLTM4NSAtPiAgLTEuMEUtMzg0ICBTdWJub3JtYWwgUm91bmRlZA0KK2RkcXVhNzU0IHF1YW50aXplIC0wLjAxRS0zODMgICAxZS0zODUgLT4gIC0xRS0zODUgICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCitkZHF1YTc1NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wMEUtMzgzICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTc1NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg1IC0+ICAtMS4wRS0zODQgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCitkZHF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg1IC0+ICAtMUUtMzg1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCitkZHF1YTc1OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg1IC0+ICAtMEUtMzg1ICAgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhNzU5IHF1YW50aXplIC0wLjAwMDFFLTM4MyAxZS0zODUgLT4gIC0wRS0zODUgICAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWE3NjAgcXVhbnRpemUgLTEuMDBFLTM4MyAgIDFlLTM4NiAtPiAgLTEuMDAwRS0zODMNCitkZHF1YTc2MSBxdWFudGl6ZSAtMC4xRS0zODMgICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCitkZHF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtMzgzICAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCitkZHF1YTc2MyBxdWFudGl6ZSAtMC4xMDBFLTM4MyAgMWUtMzg2IC0+ICAtMS4wMEUtMzg0ICBTdWJub3JtYWwNCitkZHF1YTc2NCBxdWFudGl6ZSAtMC4wMUUtMzgzICAgMWUtMzg2IC0+ICAtMS4wRS0zODUgICBTdWJub3JtYWwNCitkZHF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45OUUtMzg0ICBTdWJub3JtYWwNCitkZHF1YTc2NiBxdWFudGl6ZSAtMC4wOTlFLTM4MyAgMWUtMzg2IC0+ICAtOS45RS0zODUgICBTdWJub3JtYWwNCitkZHF1YTc2NyBxdWFudGl6ZSAtMC4wMDlFLTM4MyAgMWUtMzg2IC0+ICAtOUUtMzg2ICAgICBTdWJub3JtYWwNCitkZHF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTM4MyAgMWUtMzg2IC0+ICAtMUUtMzg2ICAgICBTdWJub3JtYWwNCitkZHF1YTc2OSBxdWFudGl6ZSAtMC4wMDAxRS0zODMgMWUtMzg2IC0+ICAtMEUtMzg2ICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBNb3JlIGZyb20gRnVuZyBMZWUNCitkZHF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gIDguNjY2NjY2NjY2NjY2MDAwRSszODQNCitkZHF1YTEwMjIgcXVhbnRpemUgLTguNjY2NjY2NjY2NjY2MDAwRSszODQgIDEuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gLTguNjY2NjY2NjY2NjY2MDAwRSszODQNCitkZHF1YTEwMjcgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzMyMyAgMUUrMzEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRxdWExMDI5IHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS1kZHF1YTEwMzAgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODQgICAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IFJvdW5kZWQgSW5leGFjdA0KKy0tZGRxdWExMDMxIHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzg0ICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkDQorLS1kZHF1YTEwMzIgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODMgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCistLWRkcXVhMTAzMyBxdWFudGl6ZSA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IDFFKzM4MiAgIC0+IDguNjY2NjY2NjY2NjY2MDAwRSszODQgUm91bmRlZA0KKy0tZGRxdWExMDM0IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszODQgMUUrMzgxICAgLT4gOC42NjY2NjY2NjY2NjYwMDBFKzM4NCBSb3VuZGVkDQorLS1kZHF1YTEwMzUgcXVhbnRpemUgOC42NjY2NjY2NjY2NjYwMDBFKzM4NCAxRSszODAgICAtPiA4LjY2NjY2NjY2NjY2NjAwMEUrMzg0IFJvdW5kZWQNCisNCistLSBJbnQgYW5kIHVJbnQzMiBlZGdlIHZhbHVlcyBmb3IgdGVzdGluZyBjb252ZXJzaW9ucw0KK2RkcXVhMTA0MCBxdWFudGl6ZSAtMjE0NzQ4MzY0NiAgICAgMCAtPiAtMjE0NzQ4MzY0Ng0KK2RkcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0Nw0KK2RkcXVhMTA0MiBxdWFudGl6ZSAtMjE0NzQ4MzY0OCAgICAgMCAtPiAtMjE0NzQ4MzY0OA0KK2RkcXVhMTA0MyBxdWFudGl6ZSAtMjE0NzQ4MzY0OSAgICAgMCAtPiAtMjE0NzQ4MzY0OQ0KK2RkcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0Ng0KK2RkcXVhMTA0NSBxdWFudGl6ZSAgMjE0NzQ4MzY0NyAgICAgMCAtPiAgMjE0NzQ4MzY0Nw0KK2RkcXVhMTA0NiBxdWFudGl6ZSAgMjE0NzQ4MzY0OCAgICAgMCAtPiAgMjE0NzQ4MzY0OA0KK2RkcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQ0KK2RkcXVhMTA0OCBxdWFudGl6ZSAgNDI5NDk2NzI5NCAgICAgMCAtPiAgNDI5NDk2NzI5NA0KK2RkcXVhMTA0OSBxdWFudGl6ZSAgNDI5NDk2NzI5NSAgICAgMCAtPiAgNDI5NDk2NzI5NQ0KK2RkcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5Ng0KK2RkcXVhMTA1MSBxdWFudGl6ZSAgNDI5NDk2NzI5NyAgICAgMCAtPiAgNDI5NDk2NzI5Nw0KKw0KKy0tIFJvdW5kaW5nIHN3YXRoZQ0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkZHF1YTExMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZGRxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfdXANCitkZHF1YTEyMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZGRxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExMjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZG93bg0KK2RkcXVhMTMwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkZHF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTEzMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogdXANCitkZHF1YTE0MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZGRxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkZHF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZGRxdWExNTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNTExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGNlaWxpbmcNCitkZHF1YTE2MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZGRxdWExNjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWExNjExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGZsb29yDQorZGRxdWExNzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KK2RkcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAwNXVwDQorZGRxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZA0KK2RkcXVhMTgwMSBxdWFudGl6ZSAgMS4yMDAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwMiBxdWFudGl6ZSAgMS4yMDEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwNCBxdWFudGl6ZSAgMS4yMDUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwNyBxdWFudGl6ZSAgMS4yMDYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgwOSBxdWFudGl6ZSAgMS4yMDk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMTgxMSBxdWFudGl6ZSAtMS4yMDk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMTkwMCBxdWFudGl6ZSAgMS4yMTAwICAgIDEuMDAgICAgLT4gIDEuMjEgIFJvdW5kZWQNCitkZHF1YTE5MDEgcXVhbnRpemUgIDEuMjEwMSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDMgcXVhbnRpemUgIDEuMjE1MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDQgcXVhbnRpemUgIDEuMjE1MSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDggcXVhbnRpemUgIDEuMjE3MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MDkgcXVhbnRpemUgIDEuMjE5OSAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTIwMDAgcXVhbnRpemUgIDEuMjQwMCAgICAxLjAwICAgIC0+ICAxLjI0ICBSb3VuZGVkDQorZGRxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDAyIHF1YW50aXplICAxLjI0MTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDAzIHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDA3IHF1YW50aXplICAxLjI0NjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDA4IHF1YW50aXplICAxLjI0NzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMDExIHF1YW50aXplIC0xLjI0OTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorZGRxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZA0KK2RkcXVhMjEwMSBxdWFudGl6ZSAgMS4yNTAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwMiBxdWFudGl6ZSAgMS4yNTEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwNCBxdWFudGl6ZSAgMS4yNTUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwNyBxdWFudGl6ZSAgMS4yNTYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjEwOSBxdWFudGl6ZSAgMS4yNTk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RkcXVhMjExMSBxdWFudGl6ZSAtMS4yNTk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RkcXVhMjIwMCBxdWFudGl6ZSAgMS4yNjAwICAgIDEuMDAgICAgLT4gIDEuMjYgIFJvdW5kZWQNCitkZHF1YTIyMDEgcXVhbnRpemUgIDEuMjYwMSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDMgcXVhbnRpemUgIDEuMjY1MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDQgcXVhbnRpemUgIDEuMjY1MSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDggcXVhbnRpemUgIDEuMjY3MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMDkgcXVhbnRpemUgIDEuMjY5OSAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitkZHF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQNCisNCitkZHF1YTIzMDAgcXVhbnRpemUgIDEuMjkwMCAgICAxLjAwICAgIC0+ICAxLjI5ICBSb3VuZGVkDQorZGRxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzAyIHF1YW50aXplICAxLjI5MTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzAzIHF1YW50aXplICAxLjI5NTAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzA3IHF1YW50aXplICAxLjI5NjAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzA4IHF1YW50aXplICAxLjI5NzAgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorZGRxdWEyMzExIHF1YW50aXplIC0xLjI5OTkgICAgMS4wMCAgICAtPiAtMS4yOSAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVsbCB0ZXN0cw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCitkZHF1YTk5OCBxdWFudGl6ZSAxMCAgICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVkdWNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdAppbmRleCA5NTI5ZTUwLi5iZGZkMDYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZWR1Y2UuZGVjVGVzdApAQCAtMSwxODIgKzEsMTgyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkUmVkdWNlLmRlY1Rlc3QgLS0gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gYSBkZWNEb3VibGUgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDMsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWRkcmVkMDAxIHJlZHVjZSAnMScgICAgICAtPiAnMScKLWRkcmVkMDAyIHJlZHVjZSAnLTEnICAgICAtPiAnLTEnCi1kZHJlZDAwMyByZWR1Y2UgJzEuMDAnICAgLT4gJzEnCi1kZHJlZDAwNCByZWR1Y2UgJy0xLjAwJyAgLT4gJy0xJwotZGRyZWQwMDUgcmVkdWNlICcwJyAgICAgIC0+ICcwJwotZGRyZWQwMDYgcmVkdWNlICcwLjAwJyAgIC0+ICcwJwotZGRyZWQwMDcgcmVkdWNlICcwMC4wJyAgIC0+ICcwJwotZGRyZWQwMDggcmVkdWNlICcwMC4wMCcgIC0+ICcwJwotZGRyZWQwMDkgcmVkdWNlICcwMCcgICAgIC0+ICcwJwotZGRyZWQwMTAgcmVkdWNlICcwRSsxJyAgIC0+ICcwJwotZGRyZWQwMTEgcmVkdWNlICcwRSs1JyAgIC0+ICcwJwotCi1kZHJlZDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJwotZGRyZWQwMTMgcmVkdWNlICcyJyAgICAgIC0+ICcyJwotZGRyZWQwMTQgcmVkdWNlICctMi4wMCcgIC0+ICctMicKLWRkcmVkMDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicKLWRkcmVkMDE2IHJlZHVjZSAnLTAnICAgICAtPiAnLTAnCi1kZHJlZDAxNyByZWR1Y2UgJy0wLjAwJyAgLT4gJy0wJwotZGRyZWQwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcKLWRkcmVkMDE5IHJlZHVjZSAnLTAwLjAwJyAtPiAnLTAnCi1kZHJlZDAyMCByZWR1Y2UgJy0wMCcgICAgLT4gJy0wJwotZGRyZWQwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnCi1kZHJlZDAyMiByZWR1Y2UgJy0wRSsxJyAgLT4gJy0wJwotCi1kZHJlZDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScKLWRkcmVkMDMxIHJlZHVjZSAnLTAuMScgICAgICAgICAgICAtPiAnLTAuMScKLWRkcmVkMDMyIHJlZHVjZSAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKLWRkcmVkMDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnCi1kZHJlZDAzNCByZWR1Y2UgJyswLjAwMScgICAgICAgICAgLT4gJzAuMDAxJwotZGRyZWQwMzUgcmVkdWNlICctMC4wMDEnICAgICAgICAgIC0+ICctMC4wMDEnCi1kZHJlZDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJwotZGRyZWQwMzcgcmVkdWNlICctMC4wMDAwMDEnICAgICAgIC0+ICctMC4wMDAwMDEnCi1kZHJlZDAzOCByZWR1Y2UgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJwotZGRyZWQwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInCi0KLWRkcmVkMDQxIHJlZHVjZSAxLjEgICAgICAgIC0+IDEuMQotZGRyZWQwNDIgcmVkdWNlIDEuMTAgICAgICAgLT4gMS4xCi1kZHJlZDA0MyByZWR1Y2UgMS4xMDAgICAgICAtPiAxLjEKLWRkcmVkMDQ0IHJlZHVjZSAxLjExMCAgICAgIC0+IDEuMTEKLWRkcmVkMDQ1IHJlZHVjZSAtMS4xICAgICAgIC0+IC0xLjEKLWRkcmVkMDQ2IHJlZHVjZSAtMS4xMCAgICAgIC0+IC0xLjEKLWRkcmVkMDQ3IHJlZHVjZSAtMS4xMDAgICAgIC0+IC0xLjEKLWRkcmVkMDQ4IHJlZHVjZSAtMS4xMTAgICAgIC0+IC0xLjExCi1kZHJlZDA0OSByZWR1Y2UgOS45ICAgICAgICAtPiA5LjkKLWRkcmVkMDUwIHJlZHVjZSA5LjkwICAgICAgIC0+IDkuOQotZGRyZWQwNTEgcmVkdWNlIDkuOTAwICAgICAgLT4gOS45Ci1kZHJlZDA1MiByZWR1Y2UgOS45OTAgICAgICAtPiA5Ljk5Ci1kZHJlZDA1MyByZWR1Y2UgLTkuOSAgICAgICAtPiAtOS45Ci1kZHJlZDA1NCByZWR1Y2UgLTkuOTAgICAgICAtPiAtOS45Ci1kZHJlZDA1NSByZWR1Y2UgLTkuOTAwICAgICAtPiAtOS45Ci1kZHJlZDA1NiByZWR1Y2UgLTkuOTkwICAgICAtPiAtOS45OQotCi0tLSBzb21lIHRyYWlsaW5nIGZyYWN0aW9uYWwgemVyb3Mgd2l0aCB6ZXJvcyBpbiB1bml0cwotZGRyZWQwNjAgcmVkdWNlICAxMC4wICAgICAgICAtPiAxRSsxCi1kZHJlZDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzEKLWRkcmVkMDYyIHJlZHVjZSAgMTAwLjAgICAgICAgLT4gMUUrMgotZGRyZWQwNjMgcmVkdWNlICAxMDAuMDAgICAgICAtPiAxRSsyCi1kZHJlZDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMwotZGRyZWQwNjUgcmVkdWNlICAxLjEwMDAwRSszICAtPiAxLjFFKzMKLWRkcmVkMDY2IHJlZHVjZSAtMTAuMCAgICAgICAgLT4gLTFFKzEKLWRkcmVkMDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzEKLWRkcmVkMDY4IHJlZHVjZSAtMTAwLjAgICAgICAgLT4gLTFFKzIKLWRkcmVkMDY5IHJlZHVjZSAtMTAwLjAwICAgICAgLT4gLTFFKzIKLWRkcmVkMDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMwotZGRyZWQwNzEgcmVkdWNlIC0xLjEwMDAwRSszICAtPiAtMS4xRSszCi0KLS0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50Ci1kZHJlZDA4MCByZWR1Y2UgIDEwRSsxICAgICAgIC0+IDFFKzIKLWRkcmVkMDgxIHJlZHVjZSAgMTAwRSsxICAgICAgLT4gMUUrMwotZGRyZWQwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyCi1kZHJlZDA4MyByZWR1Y2UgIDEuMEUrMyAgICAgIC0+IDFFKzMKLWRkcmVkMDg0IHJlZHVjZSAgMS4xRSszICAgICAgLT4gMS4xRSszCi1kZHJlZDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMKLWRkcmVkMDg2IHJlZHVjZSAgMS4xMEUrMyAgICAgLT4gMS4xRSszCi1kZHJlZDA4NyByZWR1Y2UgLTEwRSsxICAgICAgIC0+IC0xRSsyCi1kZHJlZDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszCi1kZHJlZDA4OSByZWR1Y2UgLTEuMEUrMiAgICAgIC0+IC0xRSsyCi1kZHJlZDA5MCByZWR1Y2UgLTEuMEUrMyAgICAgIC0+IC0xRSszCi1kZHJlZDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMKLWRkcmVkMDkyIHJlZHVjZSAtMS4wMEUrMyAgICAgLT4gLTFFKzMKLWRkcmVkMDkzIHJlZHVjZSAtMS4xMEUrMyAgICAgLT4gLTEuMUUrMwotCi0tLSBzb21lIHNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zLCB3ZXJlIHdlIHRvIGJlIHRyaW1taW5nCi1kZHJlZDEwMCByZWR1Y2UgIDExICAgICAgICAgIC0+IDExCi1kZHJlZDEwMSByZWR1Y2UgIDEwICAgICAgICAgIC0+IDFFKzEKLWRkcmVkMTAyIHJlZHVjZSAgMTAuICAgICAgICAgLT4gMUUrMQotZGRyZWQxMDMgcmVkdWNlICAxLjFFKzEgICAgICAtPiAxMQotZGRyZWQxMDQgcmVkdWNlICAxLjBFKzEgICAgICAtPiAxRSsxCi1kZHJlZDEwNSByZWR1Y2UgIDEuMTBFKzIgICAgIC0+IDEuMUUrMgotZGRyZWQxMDYgcmVkdWNlICAxLjAwRSsyICAgICAtPiAxRSsyCi1kZHJlZDEwNyByZWR1Y2UgIDEuMTAwRSszICAgIC0+IDEuMUUrMwotZGRyZWQxMDggcmVkdWNlICAxLjAwMEUrMyAgICAtPiAxRSszCi1kZHJlZDEwOSByZWR1Y2UgIDEuMDAwMDAwRSs2IC0+IDFFKzYKLWRkcmVkMTEwIHJlZHVjZSAtMTEgICAgICAgICAgLT4gLTExCi1kZHJlZDExMSByZWR1Y2UgLTEwICAgICAgICAgIC0+IC0xRSsxCi1kZHJlZDExMiByZWR1Y2UgLTEwLiAgICAgICAgIC0+IC0xRSsxCi1kZHJlZDExMyByZWR1Y2UgLTEuMUUrMSAgICAgIC0+IC0xMQotZGRyZWQxMTQgcmVkdWNlIC0xLjBFKzEgICAgICAtPiAtMUUrMQotZGRyZWQxMTUgcmVkdWNlIC0xLjEwRSsyICAgICAtPiAtMS4xRSsyCi1kZHJlZDExNiByZWR1Y2UgLTEuMDBFKzIgICAgIC0+IC0xRSsyCi1kZHJlZDExNyByZWR1Y2UgLTEuMTAwRSszICAgIC0+IC0xLjFFKzMKLWRkcmVkMTE4IHJlZHVjZSAtMS4wMDBFKzMgICAgLT4gLTFFKzMKLWRkcmVkMTE5IHJlZHVjZSAtMS4wMDAwMEUrNSAgLT4gLTFFKzUKLWRkcmVkMTIwIHJlZHVjZSAtMS4wMDAwMDBFKzYgLT4gLTFFKzYKLWRkcmVkMTIxIHJlZHVjZSAtMTAuMDAwMDBFKzYgLT4gLTFFKzcKLWRkcmVkMTIyIHJlZHVjZSAtMTAwLjAwMDBFKzYgLT4gLTFFKzgKLWRkcmVkMTIzIHJlZHVjZSAtMTAwMC4wMDBFKzYgLT4gLTFFKzkKLWRkcmVkMTI0IHJlZHVjZSAtMTAwMDAuMDBFKzYgLT4gLTFFKzEwCi1kZHJlZDEyNSByZWR1Y2UgLTEwMDAwMC4wRSs2IC0+IC0xRSsxMQotZGRyZWQxMjYgcmVkdWNlIC0xMDAwMDAwLkUrNiAtPiAtMUUrMTIKLQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAotZGRyZWQxNDAgcmVkdWNlICcyLjEnICAgICAtPiAgJzIuMScKLWRkcmVkMTQxIHJlZHVjZSAnLTIuMCcgICAgLT4gICctMicKLWRkcmVkMTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInCi1kZHJlZDE0MyByZWR1Y2UgJy0xMjAnICAgIC0+ICAnLTEuMkUrMicKLWRkcmVkMTQ0IHJlZHVjZSAnMTIwLjAwJyAgLT4gICcxLjJFKzInCi1kZHJlZDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLS0tIG5vdGUgb3JpZ2FtaSBlZmZlY3Qgb24gc29tZSBvZiB0aGVzZQotZGRyZWQxNTEgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyZWQxNTIgcmVkdWNlICA5Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAgLT4gOS45OTk5OTkwMDAwMEUrMzgwCi1kZHJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTkwMDAwRSszODQgICAtPiA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0Ci1kZHJlZDE1NCByZWR1Y2UgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAtPiAxRS0zODMKLWRkcmVkMTU1IHJlZHVjZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0+IDFFLTM4MwotZGRyZWQxNTYgcmVkdWNlICAyLjAwMEUtMzk1ICAgICAgICAgICAgICAgLT4gMkUtMzk1ICAgU3Vibm9ybWFsCi1kZHJlZDE1NyByZWR1Y2UgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAtPiAxRS0zOTggICBTdWJub3JtYWwKLQotZGRyZWQxNjEgcmVkdWNlICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCAgU3Vibm9ybWFsCi1kZHJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtMzk1ICAgICAgICAgICAgICAtPiAtMkUtMzk1ICBTdWJub3JtYWwKLWRkcmVkMTYzIHJlZHVjZSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0+IC0xRS0zODMKLWRkcmVkMTY0IHJlZHVjZSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMKLWRkcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5MDAwMDAwMDAwRSszODAgIC0+IC05Ljk5OTk5OTAwMDAwRSszODAKLWRkcmVkMTY2IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTkwMDAwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5MDAwMEUrMzg0Ci1kZHJlZDE2NyByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAotZGRyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkcmVkMTY5IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTkwRSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0Ci0KLQotLS0gc3BlY2lhbHMgKHJlZHVjZSBkb2VzIG5vdCBhZmZlY3QgcGF5bG9hZCkKLWRkcmVkODIwIHJlZHVjZSAnSW5mJyAgICAtPiAnSW5maW5pdHknCi1kZHJlZDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScKLWRkcmVkODIyIHJlZHVjZSAgIE5hTiAgICAtPiAgTmFOCi1kZHJlZDgyMyByZWR1Y2UgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZWQ4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDEKLWRkcmVkODI1IHJlZHVjZSAgc05hTjAxMCAtPiAgTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlZDgyNyByZWR1Y2UgIC1OYU4gICAgLT4gLU5hTgotZGRyZWQ4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KLWRkcmVkODI5IHJlZHVjZSAgLU5hTjEwMSAtPiAtTmFOMTAxCi1kZHJlZDgzMCByZWR1Y2UgLXNOYU4wMTAgLT4gLU5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOdWxsIHRlc3QKLWRkcmVkOTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkUmVkdWNlLmRlY1Rlc3QgLS0gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGZyb20gYSBkZWNEb3VibGUgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RkcmVkMDAxIHJlZHVjZSAnMScgICAgICAtPiAnMScNCitkZHJlZDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJw0KK2RkcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScNCitkZHJlZDAwNCByZWR1Y2UgJy0xLjAwJyAgLT4gJy0xJw0KK2RkcmVkMDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcNCitkZHJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnDQorZGRyZWQwMDcgcmVkdWNlICcwMC4wJyAgIC0+ICcwJw0KK2RkcmVkMDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcNCitkZHJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnDQorZGRyZWQwMTAgcmVkdWNlICcwRSsxJyAgIC0+ICcwJw0KK2RkcmVkMDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcNCisNCitkZHJlZDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJw0KK2RkcmVkMDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicNCitkZHJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJw0KK2RkcmVkMDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicNCitkZHJlZDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJw0KK2RkcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnDQorZGRyZWQwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcNCitkZHJlZDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJw0KK2RkcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnDQorZGRyZWQwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnDQorZGRyZWQwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcNCisNCitkZHJlZDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScNCitkZHJlZDAzMSByZWR1Y2UgJy0wLjEnICAgICAgICAgICAgLT4gJy0wLjEnDQorZGRyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJw0KK2RkcmVkMDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnDQorZGRyZWQwMzQgcmVkdWNlICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCitkZHJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScNCitkZHJlZDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJw0KK2RkcmVkMDM3IHJlZHVjZSAnLTAuMDAwMDAxJyAgICAgICAtPiAnLTAuMDAwMDAxJw0KK2RkcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQorZGRyZWQwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInDQorDQorZGRyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xDQorZGRyZWQwNDIgcmVkdWNlIDEuMTAgICAgICAgLT4gMS4xDQorZGRyZWQwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xDQorZGRyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQ0KK2RkcmVkMDQ1IHJlZHVjZSAtMS4xICAgICAgIC0+IC0xLjENCitkZHJlZDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xDQorZGRyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQ0KK2RkcmVkMDQ4IHJlZHVjZSAtMS4xMTAgICAgIC0+IC0xLjExDQorZGRyZWQwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45DQorZGRyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45DQorZGRyZWQwNTEgcmVkdWNlIDkuOTAwICAgICAgLT4gOS45DQorZGRyZWQwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQ0KK2RkcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkNCitkZHJlZDA1NCByZWR1Y2UgLTkuOTAgICAgICAtPiAtOS45DQorZGRyZWQwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQ0KK2RkcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5DQorDQorLS0gc29tZSB0cmFpbGluZyBmcmFjdGlvbmFsIHplcm9zIHdpdGggemVyb3MgaW4gdW5pdHMNCitkZHJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzENCitkZHJlZDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzENCitkZHJlZDA2MiByZWR1Y2UgIDEwMC4wICAgICAgIC0+IDFFKzINCitkZHJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzINCitkZHJlZDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMw0KK2RkcmVkMDY1IHJlZHVjZSAgMS4xMDAwMEUrMyAgLT4gMS4xRSszDQorZGRyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQ0KK2RkcmVkMDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzENCitkZHJlZDA2OCByZWR1Y2UgLTEwMC4wICAgICAgIC0+IC0xRSsyDQorZGRyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMg0KK2RkcmVkMDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMw0KK2RkcmVkMDcxIHJlZHVjZSAtMS4xMDAwMEUrMyAgLT4gLTEuMUUrMw0KKw0KKy0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50DQorZGRyZWQwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyDQorZGRyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszDQorZGRyZWQwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyDQorZGRyZWQwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszDQorZGRyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMNCitkZHJlZDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMNCitkZHJlZDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMw0KK2RkcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzINCitkZHJlZDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszDQorZGRyZWQwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMg0KK2RkcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMNCitkZHJlZDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMNCitkZHJlZDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszDQorZGRyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszDQorDQorLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZw0KK2RkcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTENCitkZHJlZDEwMSByZWR1Y2UgIDEwICAgICAgICAgIC0+IDFFKzENCitkZHJlZDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzENCitkZHJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExDQorZGRyZWQxMDQgcmVkdWNlICAxLjBFKzEgICAgICAtPiAxRSsxDQorZGRyZWQxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzINCitkZHJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzINCitkZHJlZDEwNyByZWR1Y2UgIDEuMTAwRSszICAgIC0+IDEuMUUrMw0KK2RkcmVkMTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMw0KK2RkcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNg0KK2RkcmVkMTEwIHJlZHVjZSAtMTEgICAgICAgICAgLT4gLTExDQorZGRyZWQxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQ0KK2RkcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzENCitkZHJlZDExMyByZWR1Y2UgLTEuMUUrMSAgICAgIC0+IC0xMQ0KK2RkcmVkMTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzENCitkZHJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzINCitkZHJlZDExNiByZWR1Y2UgLTEuMDBFKzIgICAgIC0+IC0xRSsyDQorZGRyZWQxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszDQorZGRyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMw0KK2RkcmVkMTE5IHJlZHVjZSAtMS4wMDAwMEUrNSAgLT4gLTFFKzUNCitkZHJlZDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2DQorZGRyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNw0KK2RkcmVkMTIyIHJlZHVjZSAtMTAwLjAwMDBFKzYgLT4gLTFFKzgNCitkZHJlZDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5DQorZGRyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTANCitkZHJlZDEyNSByZWR1Y2UgLTEwMDAwMC4wRSs2IC0+IC0xRSsxMQ0KK2RkcmVkMTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KK2RkcmVkMTQwIHJlZHVjZSAnMi4xJyAgICAgLT4gICcyLjEnDQorZGRyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJw0KK2RkcmVkMTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInDQorZGRyZWQxNDMgcmVkdWNlICctMTIwJyAgICAtPiAgJy0xLjJFKzInDQorZGRyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicNCitkZHJlZDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KKy0tIG5vdGUgb3JpZ2FtaSBlZmZlY3Qgb24gc29tZSBvZiB0aGVzZQ0KK2RkcmVkMTUxIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHJlZDE1MiByZWR1Y2UgIDkuOTk5OTk5MDAwMDAwMDAwRSszODAgICAtPiA5Ljk5OTk5OTAwMDAwRSszODANCitkZHJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTkwMDAwRSszODQgICAtPiA5Ljk5OTk5OTk5OTk5MDAwMEUrMzg0DQorZGRyZWQxNTQgcmVkdWNlICAxRS0zODMgICAgICAgICAgICAgICAgICAgLT4gMUUtMzgzDQorZGRyZWQxNTUgcmVkdWNlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLT4gMUUtMzgzDQorZGRyZWQxNTYgcmVkdWNlICAyLjAwMEUtMzk1ICAgICAgICAgICAgICAgLT4gMkUtMzk1ICAgU3Vibm9ybWFsDQorZGRyZWQxNTcgcmVkdWNlICAxRS0zOTggICAgICAgICAgICAgICAgICAgLT4gMUUtMzk4ICAgU3Vibm9ybWFsDQorDQorZGRyZWQxNjEgcmVkdWNlICAtMUUtMzk4ICAgICAgICAgICAgICAgICAgLT4gLTFFLTM5OCAgU3Vibm9ybWFsDQorZGRyZWQxNjIgcmVkdWNlICAtMi4wMDBFLTM5NSAgICAgICAgICAgICAgLT4gLTJFLTM5NSAgU3Vibm9ybWFsDQorZGRyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gLTFFLTM4Mw0KK2RkcmVkMTY0IHJlZHVjZSAgLTFFLTM4MyAgICAgICAgICAgICAgICAgIC0+IC0xRS0zODMNCitkZHJlZDE2NSByZWR1Y2UgIC05Ljk5OTk5OTAwMDAwMDAwMEUrMzgwICAtPiAtOS45OTk5OTkwMDAwMEUrMzgwDQorZGRyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTAwMDBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTkwMDAwRSszODQNCitkZHJlZDE2NyByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5MEUrMzg0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NA0KK2RkcmVkMTY4IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQNCisNCisNCistLSBzcGVjaWFscyAocmVkdWNlIGRvZXMgbm90IGFmZmVjdCBwYXlsb2FkKQ0KK2RkcmVkODIwIHJlZHVjZSAnSW5mJyAgICAtPiAnSW5maW5pdHknDQorZGRyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknDQorZGRyZWQ4MjIgcmVkdWNlICAgTmFOICAgIC0+ICBOYU4NCitkZHJlZDgyMyByZWR1Y2UgIHNOYU4gICAgLT4gIE5hTiAgICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxDQorZGRyZWQ4MjUgcmVkdWNlICBzTmFOMDEwIC0+ICBOYU4xMCAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlZDgyNyByZWR1Y2UgIC1OYU4gICAgLT4gLU5hTg0KK2RkcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZWQ4MjkgcmVkdWNlICAtTmFOMTAxIC0+IC1OYU4xMDENCitkZHJlZDgzMCByZWR1Y2UgLXNOYU4wMTAgLT4gLU5hTjEwICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE51bGwgdGVzdA0KK2RkcmVkOTAwIHJlZHVjZSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CmluZGV4IDg1ZDg2ZjkuLjViZDFlMzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlci5kZWNUZXN0CkBAIC0xLDYwMCArMSw2MDAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRSZW1haW5kZXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCi1kZHJlbTAwMSByZW1haW5kZXIgIDEgICAgIDEgICAgLT4gIDAKLWRkcmVtMDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMAotZGRyZW0wMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxCi1kZHJlbTAwNCByZW1haW5kZXIgIDIgICAgIDIgICAgLT4gIDAKLWRkcmVtMDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMAotZGRyZW0wMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwCi1kZHJlbTAwNyByZW1haW5kZXIgIDEgICAgIDMgICAgLT4gIDEKLWRkcmVtMDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMgotZGRyZW0wMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwCi0KLWRkcmVtMDEwIHJlbWFpbmRlciAgMi40ICAgMSAgICAtPiAgMC40Ci1kZHJlbTAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNAotZGRyZW0wMTIgcmVtYWluZGVyICAtMi40ICAxICAgIC0+ICAtMC40Ci1kZHJlbTAxMyByZW1haW5kZXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKLWRkcmVtMDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MAotZGRyZW0wMTUgcmVtYWluZGVyICAyLjQwMCAxICAgIC0+ICAwLjQwMAotZGRyZW0wMTYgcmVtYWluZGVyICAyLjQgICAyICAgIC0+ICAwLjQKLWRkcmVtMDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDAKLWRkcmVtMDE4IHJlbWFpbmRlciAgMi4gICAgMiAgICAtPiAgMAotZGRyZW0wMTkgcmVtYWluZGVyICAyMCAgICAyMCAgIC0+ICAwCi0KLWRkcmVtMDIwIHJlbWFpbmRlciAgMTg3ICAgMTg3ICAgIC0+ICAwCi1kZHJlbTAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQotZGRyZW0wMjIgcmVtYWluZGVyICA1ICAgICAyLjAgICAgLT4gIDEuMAotZGRyZW0wMjMgcmVtYWluZGVyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCi1kZHJlbTAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKLWRkcmVtMDI1IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAotCi1kZHJlbTAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQotZGRyZW0wMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDEKLWRkcmVtMDMyIHJlbWFpbmRlciAgMSAgICAgOCAgICAgIC0+ICAxCi0KLWRkcmVtMDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxCi1kZHJlbTAzNCByZW1haW5kZXIgIDEgICAgIDMyICAgICAtPiAgMQotZGRyZW0wMzUgcmVtYWluZGVyICAxICAgICA2NCAgICAgLT4gIDEKLWRkcmVtMDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxCi1kZHJlbTA0MSByZW1haW5kZXIgIDEgICAgLTQgICAgICAtPiAgMQotZGRyZW0wNDIgcmVtYWluZGVyICAxICAgIC04ICAgICAgLT4gIDEKLWRkcmVtMDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxCi1kZHJlbTA0NCByZW1haW5kZXIgIDEgICAgLTMyICAgICAtPiAgMQotZGRyZW0wNDUgcmVtYWluZGVyICAxICAgIC02NCAgICAgLT4gIDEKLWRkcmVtMDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQotZGRyZW0wNTEgcmVtYWluZGVyIC0xICAgICA0ICAgICAgLT4gIC0xCi1kZHJlbTA1MiByZW1haW5kZXIgLTEgICAgIDggICAgICAtPiAgLTEKLWRkcmVtMDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQotZGRyZW0wNTQgcmVtYWluZGVyIC0xICAgICAzMiAgICAgLT4gIC0xCi1kZHJlbTA1NSByZW1haW5kZXIgLTEgICAgIDY0ICAgICAtPiAgLTEKLWRkcmVtMDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQotZGRyZW0wNjEgcmVtYWluZGVyIC0xICAgIC00ICAgICAgLT4gIC0xCi1kZHJlbTA2MiByZW1haW5kZXIgLTEgICAgLTggICAgICAtPiAgLTEKLWRkcmVtMDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQotZGRyZW0wNjQgcmVtYWluZGVyIC0xICAgIC0zMiAgICAgLT4gIC0xCi1kZHJlbTA2NSByZW1haW5kZXIgLTEgICAgLTY0ICAgICAtPiAgLTEKLQotZGRyZW0wNjYgcmVtYWluZGVyICA5OTk5OTk5OTkgICAgIDEgIC0+IDAKLWRkcmVtMDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKLWRkcmVtMDY4IHJlbWFpbmRlciAgOTk5OTk5OTk5LjUgICAxICAtPiAwLjUKLWRkcmVtMDY5IHJlbWFpbmRlciAgOTk5OTk5OTk5LjkgICAxICAtPiAwLjkKLWRkcmVtMDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQotZGRyZW0wNzEgcmVtYWluZGVyICA5OTk5OTkuOTk5OTk5IDEgIC0+IDAuOTk5OTk5Ci1kZHJlbTA3MiByZW1haW5kZXIgIDkgICAgICAgICAgICAgMSAgLT4gMAotZGRyZW0wNzMgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKLWRkcmVtMDc0IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAyICAtPiAxCi1kZHJlbTA3NSByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAotZGRyZW0wNzYgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IDMKLQotZGRyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDAKLWRkcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKLWRkcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCi1kZHJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAotZGRyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKLWRkcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCi1kZHJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCi1kZHJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAotZGRyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKLWRkcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAotZGRyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAotZGRyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKLWRkcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAotZGRyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKLWRkcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04Ci1kZHJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKLQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAotZGRyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZHJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZHJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0Ci0tLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgotLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KLWRkcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhbmQgemVyb3Mgb24gbGVmdAotZGRyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCi1kZHJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDAKLWRkcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCi1kZHJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAotZGRyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wCi1kZHJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKLWRkcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCi1kZHJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMAotCi0tLSAwLjVlcnMKLWRkcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQotZGRyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41Ci1kZHJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCi1kZHJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAotZGRyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAotZGRyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAotZGRyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKLQotLS0gc3RlYWRpZXMKLWRkcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKLWRkcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDEKLWRkcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKLWRkcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKLWRkcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDEKLWRkcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKLWRkcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKLWRkcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDEKLWRkcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKLWRkcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKLWRkcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKLWRkcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKLWRkcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKLWRkcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDAKLWRkcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKLWRkcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKLWRkcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDAKLWRkcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKLWRkcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKLWRkcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDAKLQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKLWRkcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCi1kZHJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAotZGRyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKLWRkcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCi1kZHJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAotCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCi1kZHJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZHJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCi1kZHJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAotZGRyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKLWRkcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCi1kZHJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAotZGRyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDAKLQotLS0gaGlnaCBYcwotZGRyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAotCi0tLSBkZHJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAotZGRyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQotZGRyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAotZGRyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMwotZGRyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKLWRkcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCi1kZHJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMwotZGRyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMwotZGRyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKLWRkcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMwotZGRyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKLWRkcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKLWRkcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKLWRkcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMwotZGRyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMwotZGRyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMwotZGRyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKLWRkcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAotZGRyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wCi1kZHJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKLWRkcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKLWRkcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCi1kZHJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKLWRkcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAotZGRyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDAKLWRkcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQotZGRyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAotZGRyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKLWRkcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAotZGRyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCi1kZHJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCi1kZHJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAotZGRyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCi1kZHJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKLWRkcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQotZGRyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAotZGRyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKLWRkcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKLWRkcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKLWRkcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCi0KLWRkcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCi1kZHJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCi1kZHJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAKLWRkcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwCi1kZHJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwCi1kZHJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKLWRkcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKLWRkcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05Ci1kZHJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCi1kZHJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQotZGRyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCi0KLWRkcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzCi1kZHJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQotZGRyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCi1kZHJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQotZGRyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQotZGRyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCi1kZHJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQotZGRyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQotZGRyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNwotCi1kZHJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQotZGRyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKLWRkcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCi1kZHJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMgotZGRyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAotZGRyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAotZGRyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAotCi1kZHJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCi0KLWRkcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCi1kZHJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3Ci1kZHJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgKLWRkcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4Ci1kZHJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44Ci1kZHJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMwotZGRyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKLWRkcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKLWRkcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKLWRkcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKLWRkcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCi1kZHJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKLWRkcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKLWRkcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCi1kZHJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyCi1kZHJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKLWRkcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2Ci1kZHJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wCi0KLS0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCi1kZHJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQotZGRyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1Ci1kZHJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1Ci1kZHJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQotZGRyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1Ci1kZHJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1Ci1kZHJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQotZGRyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1Ci1kZHJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1Ci0KLS0tIGZvbGRkb3ducwotZGRyZW00MjEgcmVtYWluZGVyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkcmVtNDIyIHJlbWFpbmRlciAgIDFFKzM4NCAgMUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCi1kZHJlbTQyMyByZW1haW5kZXIgICAxRSszODQgIDJFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAotZGRyZW00MjQgcmVtYWluZGVyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLWRkcmVtNDI1IHJlbWFpbmRlciAgIDFFKzM4NCAgNEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCi1kZHJlbTQyNiByZW1haW5kZXIgICAxRSszODQgIDVFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAotZGRyZW00MjcgcmVtYWluZGVyICAgMUUrMzg0ICA2RSszODMgIC0+ICAgNC4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLWRkcmVtNDI4IHJlbWFpbmRlciAgIDFFKzM4NCAgN0UrMzgzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCi1kZHJlbTQyOSByZW1haW5kZXIgICAxRSszODQgIDhFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAotZGRyZW00MzAgcmVtYWluZGVyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLS0tIHRpbmllcwotZGRyZW00MzEgcmVtYWluZGVyICAgMUUtMzk3ICAxRS0zOTggIC0+ICAgMEUtMzk4Ci1kZHJlbTQzMiByZW1haW5kZXIgICAxRS0zOTcgIDJFLTM5OCAgLT4gICAwRS0zOTgKLWRkcmVtNDMzIHJlbWFpbmRlciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKLWRkcmVtNDM0IHJlbWFpbmRlciAgIDFFLTM5NyAgNEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwKLWRkcmVtNDM1IHJlbWFpbmRlciAgIDFFLTM5NyAgNUUtMzk4ICAtPiAgIDBFLTM5OAotZGRyZW00MzYgcmVtYWluZGVyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAgNEUtMzk4IFN1Ym5vcm1hbAotZGRyZW00MzcgcmVtYWluZGVyICAgMUUtMzk3ICA3RS0zOTggIC0+ICAgM0UtMzk4IFN1Ym5vcm1hbAotZGRyZW00MzggcmVtYWluZGVyICAgMUUtMzk3ICA4RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbAotZGRyZW00MzkgcmVtYWluZGVyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAotZGRyZW00NDAgcmVtYWluZGVyICAgMUUtMzk3IDEwRS0zOTggIC0+ICAgMEUtMzk4Ci1kZHJlbTQ0MSByZW1haW5kZXIgICAxRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCi1kZHJlbTQ0MiByZW1haW5kZXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsCi1kZHJlbTQ0MyByZW1haW5kZXIgMTAwRS0zOTcgMjBFLTM5OCAgLT4gICAwRS0zOTgKLWRkcmVtNDQ0IHJlbWFpbmRlciAxMDBFLTM5NyAyMUUtMzk4ICAtPiAxLjNFLTM5NyBTdWJub3JtYWwKLWRkcmVtNDQ1IHJlbWFpbmRlciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKLQotLS0gemVybyBzaWducwotZGRyZW02NTAgcmVtYWluZGVyICAxICAxIC0+ICAwCi1kZHJlbTY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTAKLWRkcmVtNjUyIHJlbWFpbmRlciAgMSAtMSAtPiAgMAotZGRyZW02NTMgcmVtYWluZGVyIC0xIC0xIC0+IC0wCi1kZHJlbTY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDAKLWRkcmVtNjU1IHJlbWFpbmRlciAtMCAgMSAtPiAtMAotZGRyZW02NTYgcmVtYWluZGVyICAwIC0xIC0+ICAwCi1kZHJlbTY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTAKLWRkcmVtNjU4IHJlbWFpbmRlciAgMC4wMCAgMSAgLT4gIDAuMDAKLWRkcmVtNjU5IHJlbWFpbmRlciAtMC4wMCAgMSAgLT4gLTAuMDAKLQotLS0gU3BlY2lhbHMKLWRkcmVtNjgwIHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW02ODEgcmVtYWluZGVyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNjgzIHJlbWFpbmRlciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW02ODQgcmVtYWluZGVyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNjg2IHJlbWFpbmRlciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW02ODcgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1kZHJlbTY4OSByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNjkxIHJlbWFpbmRlciAtMSAgICAgSW5mICAgLT4gLTEKLWRkcmVtNjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDAKLWRkcmVtNjkzIHJlbWFpbmRlciAtMCAgICAgSW5mICAgLT4gLTAKLWRkcmVtNjk0IHJlbWFpbmRlciAgMSAgICAgSW5mICAgLT4gIDEKLWRkcmVtNjk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDAKLWRkcmVtNjk2IHJlbWFpbmRlciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZHJlbTcwMCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNzAxIHJlbWFpbmRlciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTcwMyByZW1haW5kZXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNzA0IHJlbWFpbmRlciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTcwNiByZW1haW5kZXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNzA3IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTcwOSByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1kZHJlbTcxMCByZW1haW5kZXIgLTEgICAgLUluZiAgIC0+IC0xCi1kZHJlbTcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wCi1kZHJlbTcxMiByZW1haW5kZXIgIDAgICAgLUluZiAgIC0+ICAwCi1kZHJlbTcxMyByZW1haW5kZXIgIDEgICAgLUluZiAgIC0+ICAxCi1kZHJlbTcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwCi1kZHJlbTcxNSByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRyZW03MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFOCi1kZHJlbTcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRkcmVtNzIzIHJlbWFpbmRlciAgTmFOIC0xICAgICAgLT4gIE5hTgotZGRyZW03MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFOCi1kZHJlbTcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4KLWRkcmVtNzI2IHJlbWFpbmRlciAgTmFOICAxICAgICAgLT4gIE5hTgotZGRyZW03MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kZHJlbTcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRkcmVtNzI5IHJlbWFpbmRlciAgTmFOIC1OYU4gICAgLT4gIE5hTgotZGRyZW03MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kZHJlbTczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRkcmVtNzMyIHJlbWFpbmRlciAtMSAgICBOYU4gICAgLT4gIE5hTgotZGRyZW03MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFOCi1kZHJlbTczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRkcmVtNzM1IHJlbWFpbmRlciAgMSAgIC1OYU4gICAgLT4gLU5hTgotZGRyZW03MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kZHJlbTczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotZGRyZW03NDEgcmVtYWluZGVyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDMgcmVtYWluZGVyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDQgcmVtYWluZGVyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDYgcmVtYWluZGVyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDcgcmVtYWluZGVyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTAgcmVtYWluZGVyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTEgcmVtYWluZGVyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTMgcmVtYWluZGVyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTQgcmVtYWluZGVyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTYgcmVtYWluZGVyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTcgcmVtYWluZGVyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NTkgcmVtYWluZGVyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdpbmcgTmFOcwotZGRyZW03NjAgcmVtYWluZGVyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCi1kZHJlbTc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KLWRkcmVtNzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW03NjMgcmVtYWluZGVyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCi1kZHJlbTc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExCi1kZHJlbTc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYKLWRkcmVtNzY2IHJlbWFpbmRlciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKLWRkcmVtNzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQKLWRkcmVtNzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUKLWRkcmVtNzY5IHJlbWFpbmRlciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKLQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCi1kZHJlbTc3MCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAxMCAgICAtPiAgNgotZGRyZW03NzEgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDAKLWRkcmVtNzcyICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRyZW03NzMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi0KLS0tIGxvbmcgb3BlcmFuZCBjaGVja3MKLWRkcmVtODAxIHJlbWFpbmRlciAxMjM0NTY3ODAwMCAxMDAgLT4gMAotZGRyZW04MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxCi1kZHJlbTgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDAKLWRkcmVtODA0IHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAgICAgLT4gMQotZGRyZW04MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCi1kZHJlbTgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDEKLWRkcmVtODA3IHJlbWFpbmRlciAxMjM0NTY3ODkxICAxMCAgLT4gMQotZGRyZW04MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kZHJlbTgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDEKLWRkcmVtODEwIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAxICAgLT4gMQotZGRyZW04MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2Ci1kZHJlbTgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDEKLQotZGRyZW04MjEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kZHJlbTgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKLWRkcmVtODIzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAotZGRyZW04MjQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kZHJlbTgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKLWRkcmVtODI2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQotZGRyZW04MjcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kZHJlbTgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKLWRkcmVtODI5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQotZGRyZW04MzAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kZHJlbTgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKLWRkcmVtODMyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi0tLSBmcm9tIGRpdmlkZWludAotZGRyZW04NDAgcmVtYWluZGVyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjAKLWRkcmVtODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40Ci1kZHJlbTg0MiByZW1haW5kZXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQotZGRyZW04NDMgcmVtYWluZGVyICAxMDAwMDAwMDAuOSAgIDEgIC0+ICAwLjkKLWRkcmVtODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgMC45OTkKLWRkcmVtODUwIHJlbWFpbmRlciAgMTAwMDAwMDAzICAgICA1ICAtPiAgMwotZGRyZW04NTEgcmVtYWluZGVyICAxMDAwMDAwMyAgICAgIDUgIC0+ICAzCi1kZHJlbTg1MiByZW1haW5kZXIgIDEwMDAwMDMgICAgICAgNSAgLT4gIDMKLWRkcmVtODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMwotZGRyZW04NTQgcmVtYWluZGVyICAxMDAwMyAgICAgICAgIDUgIC0+ICAzCi1kZHJlbTg1NSByZW1haW5kZXIgIDEwMDMgICAgICAgICAgNSAgLT4gIDMKLWRkcmVtODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMwotZGRyZW04NTcgcmVtYWluZGVyICAxMyAgICAgICAgICAgIDUgIC0+ICAzCi1kZHJlbTg1OCByZW1haW5kZXIgIDEgICAgICAgICAgICAgNSAgLT4gIDEKLQotLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRkcmVtODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcmVtODYxIHJlbWFpbmRlciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcmVtODYyIHJlbWFpbmRlciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcmVtODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcmVtODY0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcmVtODcwIHJlbWFpbmRlciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODcyIHJlbWFpbmRlciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODczIHJlbWFpbmRlciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc4IHJlbWFpbmRlciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODc5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzAKLWRkcmVtODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKLWRkcmVtODgxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzAKLWRkcmVtODgyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzAKLWRkcmVtODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKLWRkcmVtODg0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzAKLWRkcmVtODg1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDAKLWRkcmVtODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKLQotZGRyZW04OTAgcmVtYWluZGVyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTIgcmVtYWluZGVyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMAotZGRyZW04OTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAotZGRyZW05MDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMAotZGRyZW05MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMAotZGRyZW05MDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAotZGRyZW05MDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gMTIzMAotZGRyZW05MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMAotZGRyZW05MDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gICAxMAotZGRyZW05MDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMAotCi1kZHJlbTkxMCByZW1haW5kZXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxMSByZW1haW5kZXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxMyByZW1haW5kZXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwCi1kZHJlbTkyMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwCi1kZHJlbTkyMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCi1kZHJlbTkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwCi1kZHJlbTkyMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwCi1kZHJlbTkyNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCi1kZHJlbTkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwCi1kZHJlbTkyNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwCi0KLWRkcmVtOTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTMxIHJlbWFpbmRlciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTMyIHJlbWFpbmRlciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTM0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTM1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTM3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTM5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzAKLWRkcmVtOTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKLWRkcmVtOTQxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzAKLWRkcmVtOTQyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzAKLWRkcmVtOTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKLWRkcmVtOTQ0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzAKLWRkcmVtOTQ1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAgNjAKLWRkcmVtOTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYKLQotZGRyZW05NTAgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJlbTk2MSByZW1haW5kZXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKLWRkcmVtOTYyIHJlbWFpbmRlciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRyZW05NjMgcmVtYWluZGVyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCi1kZHJlbTk2NCByZW1haW5kZXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKLWRkcmVtOTY1IHJlbWFpbmRlciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRyZW05NjYgcmVtYWluZGVyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCi1kZHJlbTk2NyByZW1haW5kZXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKLWRkcmVtOTY4IHJlbWFpbmRlciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRyZW05NjkgcmVtYWluZGVyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwCi0KLWRkcmVtOTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQotCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0KLWRkcmVtMTA1MSByZW1haW5kZXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRyZW0xMDUyIHJlbWFpbmRlciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZHJlbTEwNTMgcmVtYWluZGVyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkcmVtMTA1NCByZW1haW5kZXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRyZW0xMDU1IHJlbWFpbmRlciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NwotZGRyZW0xMDU2IHJlbWFpbmRlciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3NwotZGRyZW0xMDU3IHJlbWFpbmRlciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NwotZGRyZW0xMDU4IHJlbWFpbmRlciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NwotCi0tLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAotZGRyZW0xMTAxIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0NgotZGRyZW0xMTAyIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC42NTQzMjEwOTg3NjU1NwotZGRyZW0xMTAzIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIDAuNTQzMjEwOTg3NjY2OAotZGRyZW0xMTA0IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NSAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNwotZGRyZW0xMTA1IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAzLjY5MTM1ODAyNzQ2OTEzNwotZGRyZW0xMTA2IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgIDAuNjkxMzU3ODAyNDY5NgotZGRyZW0xMTA3IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDQuOTk5OTk5OTk5OTk5OTkgIC0+ICAgMy40NjkxMzU3ODAyNDY5MQotZGRyZW0xMTA4IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAxLjI0NjkxMzU3ODAyNDY5MQotZGRyZW0xMTA5IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQotZGRyZW0xMTEwIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDUuMDAwMDAwMDAwMDAwMDEgIC0+ICAgMy41MzA4NjQyMTk3NTMxMAotZGRyZW0xMTExIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuMzA4NjQyMTk3NTMxNAotCi0tLSBOdWxsIHRlc3RzCi1kZHJlbTEwMDAgcmVtYWluZGVyIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyZW0xMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRSZW1haW5kZXIuZGVjVGVzdCAtLSBkZWNEb3VibGUgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQorZGRyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwDQorZGRyZW0wMDIgcmVtYWluZGVyICAyICAgICAxICAgIC0+ICAwDQorZGRyZW0wMDMgcmVtYWluZGVyICAxICAgICAyICAgIC0+ICAxDQorZGRyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwDQorZGRyZW0wMDUgcmVtYWluZGVyICAwICAgICAxICAgIC0+ICAwDQorZGRyZW0wMDYgcmVtYWluZGVyICAwICAgICAyICAgIC0+ICAwDQorZGRyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxDQorZGRyZW0wMDggcmVtYWluZGVyICAyICAgICAzICAgIC0+ICAyDQorZGRyZW0wMDkgcmVtYWluZGVyICAzICAgICAzICAgIC0+ICAwDQorDQorZGRyZW0wMTAgcmVtYWluZGVyICAyLjQgICAxICAgIC0+ICAwLjQNCitkZHJlbTAxMSByZW1haW5kZXIgIDIuNCAgIC0xICAgLT4gIDAuNA0KK2RkcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNA0KK2RkcmVtMDEzIHJlbWFpbmRlciAgLTIuNCAgLTEgICAtPiAgLTAuNA0KK2RkcmVtMDE0IHJlbWFpbmRlciAgMi40MCAgMSAgICAtPiAgMC40MA0KK2RkcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDANCitkZHJlbTAxNiByZW1haW5kZXIgIDIuNCAgIDIgICAgLT4gIDAuNA0KK2RkcmVtMDE3IHJlbWFpbmRlciAgMi40MDAgMiAgICAtPiAgMC40MDANCitkZHJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDANCitkZHJlbTAxOSByZW1haW5kZXIgIDIwICAgIDIwICAgLT4gIDANCisNCitkZHJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMA0KK2RkcmVtMDIxIHJlbWFpbmRlciAgNSAgICAgMiAgICAgIC0+ICAxDQorZGRyZW0wMjIgcmVtYWluZGVyICA1ICAgICAyLjAgICAgLT4gIDEuMA0KK2RkcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMA0KK2RkcmVtMDI0IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KK2RkcmVtMDI1IHJlbWFpbmRlciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KKw0KK2RkcmVtMDMwIHJlbWFpbmRlciAgMSAgICAgMiAgICAgIC0+ICAxDQorZGRyZW0wMzEgcmVtYWluZGVyICAxICAgICA0ICAgICAgLT4gIDENCitkZHJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQ0KKw0KK2RkcmVtMDMzIHJlbWFpbmRlciAgMSAgICAgMTYgICAgIC0+ICAxDQorZGRyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDENCitkZHJlbTAzNSByZW1haW5kZXIgIDEgICAgIDY0ICAgICAtPiAgMQ0KK2RkcmVtMDQwIHJlbWFpbmRlciAgMSAgICAtMiAgICAgIC0+ICAxDQorZGRyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDENCitkZHJlbTA0MiByZW1haW5kZXIgIDEgICAgLTggICAgICAtPiAgMQ0KK2RkcmVtMDQzIHJlbWFpbmRlciAgMSAgICAtMTYgICAgIC0+ICAxDQorZGRyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDENCitkZHJlbTA0NSByZW1haW5kZXIgIDEgICAgLTY0ICAgICAtPiAgMQ0KK2RkcmVtMDUwIHJlbWFpbmRlciAtMSAgICAgMiAgICAgIC0+ICAtMQ0KK2RkcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQ0KK2RkcmVtMDUyIHJlbWFpbmRlciAtMSAgICAgOCAgICAgIC0+ICAtMQ0KK2RkcmVtMDUzIHJlbWFpbmRlciAtMSAgICAgMTYgICAgIC0+ICAtMQ0KK2RkcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQ0KK2RkcmVtMDU1IHJlbWFpbmRlciAtMSAgICAgNjQgICAgIC0+ICAtMQ0KK2RkcmVtMDYwIHJlbWFpbmRlciAtMSAgICAtMiAgICAgIC0+ICAtMQ0KK2RkcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQ0KK2RkcmVtMDYyIHJlbWFpbmRlciAtMSAgICAtOCAgICAgIC0+ICAtMQ0KK2RkcmVtMDYzIHJlbWFpbmRlciAtMSAgICAtMTYgICAgIC0+ICAtMQ0KK2RkcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQ0KK2RkcmVtMDY1IHJlbWFpbmRlciAtMSAgICAtNjQgICAgIC0+ICAtMQ0KKw0KK2RkcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwDQorZGRyZW0wNjcgcmVtYWluZGVyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNA0KK2RkcmVtMDY4IHJlbWFpbmRlciAgOTk5OTk5OTk5LjUgICAxICAtPiAwLjUNCitkZHJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45DQorZGRyZW0wNzAgcmVtYWluZGVyICA5OTk5OTk5OTkuOTk5IDEgIC0+IDAuOTk5DQorZGRyZW0wNzEgcmVtYWluZGVyICA5OTk5OTkuOTk5OTk5IDEgIC0+IDAuOTk5OTk5DQorZGRyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDANCitkZHJlbTA3MyByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMA0KK2RkcmVtMDc0IHJlbWFpbmRlciAgOTk5OTk5OTk5OTk5OTk5OSAyICAtPiAxDQorZGRyZW0wNzUgcmVtYWluZGVyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDANCitkZHJlbTA3NiByZW1haW5kZXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gMw0KKw0KK2RkcmVtMDgwIHJlbWFpbmRlciAgMC4gICAgICAgICAgICAxICAtPiAwDQorZGRyZW0wODEgcmVtYWluZGVyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMA0KK2RkcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwDQorZGRyZW0wODMgcmVtYWluZGVyICAwLjAwRSs5ICAgICAgIDEgIC0+IDANCitkZHJlbTA4NCByZW1haW5kZXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMA0KK2RkcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwDQorZGRyZW0wODYgcmVtYWluZGVyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMA0KK2RkcmVtMDg3IHJlbWFpbmRlciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwDQorZGRyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDANCitkZHJlbTA4OSByZW1haW5kZXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDANCitkZHJlbTA5MCByZW1haW5kZXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwDQorZGRyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDANCitkZHJlbTA5MiByZW1haW5kZXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDANCitkZHJlbTA5MyByZW1haW5kZXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNw0KK2RkcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04DQorZGRyZW0wOTUgcmVtYWluZGVyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0DQorDQorLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMA0KK2RkcmVtMTAxIHJlbWFpbmRlciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMTAyIHJlbWFpbmRlciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMTA0IHJlbWFpbmRlciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMTA1IHJlbWFpbmRlciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KKy0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dA0KKy0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yDQorLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0NCitkZHJlbTEwNyByZW1haW5kZXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMTA4IHJlbWFpbmRlciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTExMCByZW1haW5kZXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMTExIHJlbWFpbmRlciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTExMyByZW1haW5kZXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMTE0IHJlbWFpbmRlciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTExNiByZW1haW5kZXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMTE5IHJlbWFpbmRlciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTEyMSByZW1haW5kZXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMTIyIHJlbWFpbmRlciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTEyNCByZW1haW5kZXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0DQorZGRyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwDQorZGRyZW0xMzEgcmVtYWluZGVyICAwICAgICAtMSAgIC0+ICAwDQorZGRyZW0xMzIgcmVtYWluZGVyICAwLjAgICAgMSAgIC0+ICAwLjANCitkZHJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMA0KK2RkcmVtMTM0IHJlbWFpbmRlciAtMCAgICAgIDEgICAtPiAtMA0KK2RkcmVtMTM1IHJlbWFpbmRlciAtMCAgICAgLTEgICAtPiAtMA0KK2RkcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wDQorZGRyZW0xMzcgcmVtYWluZGVyIC0wLjAgICAtMSAgIC0+IC0wLjANCisNCistLSAwLjVlcnMNCitkZHJlbTE0MyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCitkZHJlbTE0NCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCitkZHJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQorZGRyZW0xNDYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCitkZHJlbTE0NyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQorZGRyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MA0KK2RkcmVtMTQ5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQorDQorLS0gc3RlYWRpZXMNCitkZHJlbTE1MCByZW1haW5kZXIgIDEgIDEgICAtPiAwDQorZGRyZW0xNTEgcmVtYWluZGVyICAxICAyICAgLT4gMQ0KK2RkcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDENCitkZHJlbTE1MyByZW1haW5kZXIgIDEgIDQgICAtPiAxDQorZGRyZW0xNTQgcmVtYWluZGVyICAxICA1ICAgLT4gMQ0KK2RkcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDENCitkZHJlbTE1NiByZW1haW5kZXIgIDEgIDcgICAtPiAxDQorZGRyZW0xNTcgcmVtYWluZGVyICAxICA4ICAgLT4gMQ0KK2RkcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDENCitkZHJlbTE1OSByZW1haW5kZXIgIDEgIDEwICAtPiAxDQorZGRyZW0xNjAgcmVtYWluZGVyICAxICAxICAgLT4gMA0KK2RkcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDANCitkZHJlbTE2MiByZW1haW5kZXIgIDMgIDEgICAtPiAwDQorZGRyZW0xNjMgcmVtYWluZGVyICA0ICAxICAgLT4gMA0KK2RkcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDANCitkZHJlbTE2NSByZW1haW5kZXIgIDYgIDEgICAtPiAwDQorZGRyZW0xNjYgcmVtYWluZGVyICA3ICAxICAgLT4gMA0KK2RkcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDANCitkZHJlbTE2OCByZW1haW5kZXIgIDkgIDEgICAtPiAwDQorZGRyZW0xNjkgcmVtYWluZGVyICAxMCAxICAgLT4gMA0KKw0KKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyDQorZGRyZW0xNzEgcmVtYWluZGVyICAgMC40ICAxLjAyMCAtPiAgMC40MDANCitkZHJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMA0KK2RkcmVtMTczIHJlbWFpbmRlciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwDQorZGRyZW0xNzQgcmVtYWluZGVyICAgMC41MiAxLjAyMCAtPiAgMC41MjANCitkZHJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMA0KKw0KKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVyIGJ5IDANCitkZHJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RkcmVtMjAyIHJlbWFpbmRlciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRyZW0yMDMgcmVtYWluZGVyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZHJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0yMDUgcmVtYWluZGVyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMjA2IHJlbWFpbmRlciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0yMDggcmVtYWluZGVyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtMjA5IHJlbWFpbmRlciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0yMTEgcmVtYWluZGVyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyDQorZGRyZW0yMzEgcmVtYWluZGVyICAtMC40ICAxLjAyMCAtPiAtMC40MDANCitkZHJlbTIzMiByZW1haW5kZXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMA0KK2RkcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwDQorZGRyZW0yMzQgcmVtYWluZGVyICAtMC41MiAxLjAyMCAtPiAtMC41MjANCitkZHJlbTIzNSByZW1haW5kZXIgIC0wLjYgIDEuMDIwIC0+IC0wLjYwMA0KKw0KKy0tIGhpZ2ggWHMNCitkZHJlbTI0MCByZW1haW5kZXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwDQorDQorLS0gZGRyZW0zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCitkZHJlbTMwMSByZW1haW5kZXIgICAxICAgIDMgICAgIC0+ICAxDQorZGRyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMA0KK2RkcmVtMzAzIHJlbWFpbmRlciAgIDEzICAgMTAgICAgLT4gIDMNCitkZHJlbTMwNCByZW1haW5kZXIgICAxMyAgIDUwICAgIC0+ICAxMw0KK2RkcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzDQorZGRyZW0zMDYgcmVtYWluZGVyICAgMTMgICAxMDAwICAtPiAgMTMNCitkZHJlbTMwNyByZW1haW5kZXIgICAuMTMgICAgMSAgIC0+ICAwLjEzDQorZGRyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMNCitkZHJlbTMwOSByZW1haW5kZXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMNCitkZHJlbTMxMCByZW1haW5kZXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMw0KK2RkcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMNCitkZHJlbTMxMiByZW1haW5kZXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzDQorZGRyZW0zMTMgcmVtYWluZGVyICAgMTAzLjMgIDEgICAtPiAgMC4zDQorZGRyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMw0KK2RkcmVtMzE1IHJlbWFpbmRlciAgIDEwMzMgIDEwICAgLT4gIDMNCitkZHJlbTMxNiByZW1haW5kZXIgICAxMDMzICA1MCAgIC0+ICAzMw0KK2RkcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMA0KK2RkcmVtMzE4IHJlbWFpbmRlciAgIDEwMi4wICAzICAgLT4gIDAuMA0KK2RkcmVtMzE5IHJlbWFpbmRlciAgIDEwMy4wICAzICAgLT4gIDEuMA0KK2RkcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDANCitkZHJlbTMyMSByZW1haW5kZXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMA0KK2RkcmVtMzIyIHJlbWFpbmRlciAgIDIuNCAgICAxICAgLT4gIDAuNA0KK2RkcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNA0KK2RkcmVtMzI0IHJlbWFpbmRlciAgIDIuNDAwICAyICAgLT4gIDAuNDAwDQorZGRyZW0zMjUgcmVtYWluZGVyICAgMSAgIDAuMyAgICAtPiAgMC4xDQorZGRyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMA0KK2RkcmVtMzI3IHJlbWFpbmRlciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwDQorZGRyZW0zMjggcmVtYWluZGVyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwDQorZGRyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xDQorZGRyZW0zMzAgcmVtYWluZGVyICAgMS4wMCAgIDAuMyAtPiAgMC4xMA0KK2RkcmVtMzMxIHJlbWFpbmRlciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwDQorZGRyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwDQorZGRyZW0zMzMgcmVtYWluZGVyICAgMC41ICAyICAgICAtPiAgMC41DQorZGRyZW0zMzQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41DQorZGRyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MA0KK2RkcmVtMzM2IHJlbWFpbmRlciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQorZGRyZW0zMzcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MA0KK2RkcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCitkZHJlbTMzOSByZW1haW5kZXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KKw0KK2RkcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwDQorZGRyZW0zNDEgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMA0KK2RkcmVtMzQyIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMA0KK2RkcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwDQorZGRyZW0zNDQgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwMA0KK2RkcmVtMzQ1IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNw0KK2RkcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgNCitkZHJlbTM0NyByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQ0KK2RkcmVtMzQ4IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTANCitkZHJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQ0KK2RkcmVtMzUwIHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMg0KKw0KK2RkcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzDQorZGRyZW0zNTIgcmVtYWluZGVyICAgNSAgIDIgICAgLT4gIDENCitkZHJlbTM1MyByZW1haW5kZXIgICA0LjEgICAyICAgIC0+ICAwLjENCitkZHJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQ0KK2RkcmVtMzU1IHJlbWFpbmRlciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDENCitkZHJlbTM1NiByZW1haW5kZXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDENCitkZHJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQ0KK2RkcmVtMzU4IHJlbWFpbmRlciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDENCitkZHJlbTM1OSByZW1haW5kZXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03DQorDQorZGRyZW0zNjAgcmVtYWluZGVyICAgMS4yICAgMC43MzQ1IC0+ICAwLjQ2NTUNCitkZHJlbTM2MSByZW1haW5kZXIgICAwLjggICAxMiAgICAgLT4gIDAuOA0KK2RkcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wDQorZGRyZW0zNjMgcmVtYWluZGVyICAgMC44ICAgMC4zICAgIC0+ICAwLjINCitkZHJlbTM2NCByZW1haW5kZXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwDQorZGRyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMA0KK2RkcmVtMzY2IHJlbWFpbmRlciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDANCisNCitkZHJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwDQorDQorZGRyZW0zODEgcmVtYWluZGVyIDEyMzQ1ICAxICAgICAgICAgLT4gIDANCitkZHJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3DQorZGRyZW0zODMgcmVtYWluZGVyIDEyMzQ1ICAxLjAwMSAgICAgLT4gIDAuNjY4DQorZGRyZW0zODQgcmVtYWluZGVyIDEyMzQ1ICAxLjAxICAgICAgLT4gIDAuNzgNCitkZHJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44DQorZGRyZW0zODYgcmVtYWluZGVyIDEyMzU1ICA0ICAgICAgICAgLT4gIDMNCitkZHJlbTM4NyByZW1haW5kZXIgMTIzNDUgIDQgICAgICAgICAtPiAgMQ0KK2RkcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTINCitkZHJlbTM4OSByZW1haW5kZXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0DQorZGRyZW0zOTAgcmVtYWluZGVyIDEyMzQ1ICA0LjkgICAgICAgLT4gIDEuOQ0KK2RkcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczDQorZGRyZW0zOTIgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5DQorZGRyZW0zOTMgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5OTkgICAgLT4gIDAuMjQ2OQ0KK2RkcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwDQorZGRyZW0zOTUgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMDEgICAgLT4gIDQuNzUzMg0KK2RkcmVtMzk2IHJlbWFpbmRlciAxMjM0NSAgNS4wMDEgICAgIC0+ICAyLjUzMg0KK2RkcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2DQorZGRyZW0zOTggcmVtYWluZGVyIDEyMzQ1ICA1LjEgICAgICAgLT4gIDMuMA0KKw0KKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzDQorZGRyZW00MDEgcmVtYWluZGVyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUNCitkZHJlbTQwMiByZW1haW5kZXIgICAwLjU1ICAgICAgICAxICAgLT4gIDAuNTUNCitkZHJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1DQorZGRyZW00MDQgcmVtYWluZGVyICAgMC41NTU1ICAgICAgMSAgIC0+ICAwLjU1NTUNCitkZHJlbTQwNSByZW1haW5kZXIgICAwLjU1NTU1ICAgICAxICAgLT4gIDAuNTU1NTUNCitkZHJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1DQorZGRyZW00MDcgcmVtYWluZGVyICAgMC41NTU1NTU1ICAgMSAgIC0+ICAwLjU1NTU1NTUNCitkZHJlbTQwOCByZW1haW5kZXIgICAwLjU1NTU1NTU1ICAxICAgLT4gIDAuNTU1NTU1NTUNCitkZHJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1DQorDQorLS0gZm9sZGRvd25zDQorZGRyZW00MjEgcmVtYWluZGVyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZHJlbTQyMiByZW1haW5kZXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZA0KK2RkcmVtNDIzIHJlbWFpbmRlciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkDQorZGRyZW00MjQgcmVtYWluZGVyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJlbTQyNSByZW1haW5kZXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KK2RkcmVtNDI2IHJlbWFpbmRlciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkDQorZGRyZW00MjcgcmVtYWluZGVyICAgMUUrMzg0ICA2RSszODMgIC0+ICAgNC4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJlbTQyOCByZW1haW5kZXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZA0KK2RkcmVtNDI5IHJlbWFpbmRlciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkDQorZGRyZW00MzAgcmVtYWluZGVyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCistLSB0aW5pZXMNCitkZHJlbTQzMSByZW1haW5kZXIgICAxRS0zOTcgIDFFLTM5OCAgLT4gICAwRS0zOTgNCitkZHJlbTQzMiByZW1haW5kZXIgICAxRS0zOTcgIDJFLTM5OCAgLT4gICAwRS0zOTgNCitkZHJlbTQzMyByZW1haW5kZXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsDQorZGRyZW00MzQgcmVtYWluZGVyICAgMUUtMzk3ICA0RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbA0KK2RkcmVtNDM1IHJlbWFpbmRlciAgIDFFLTM5NyAgNUUtMzk4ICAtPiAgIDBFLTM5OA0KK2RkcmVtNDM2IHJlbWFpbmRlciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgIDRFLTM5OCBTdWJub3JtYWwNCitkZHJlbTQzNyByZW1haW5kZXIgICAxRS0zOTcgIDdFLTM5OCAgLT4gICAzRS0zOTggU3Vibm9ybWFsDQorZGRyZW00MzggcmVtYWluZGVyICAgMUUtMzk3ICA4RS0zOTggIC0+ICAgMkUtMzk4IFN1Ym5vcm1hbA0KK2RkcmVtNDM5IHJlbWFpbmRlciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwNCitkZHJlbTQ0MCByZW1haW5kZXIgICAxRS0zOTcgMTBFLTM5OCAgLT4gICAwRS0zOTgNCitkZHJlbTQ0MSByZW1haW5kZXIgICAxRS0zOTcgMTFFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsDQorZGRyZW00NDIgcmVtYWluZGVyIDEwMEUtMzk3IDExRS0zOTggIC0+IDEuMEUtMzk3IFN1Ym5vcm1hbA0KK2RkcmVtNDQzIHJlbWFpbmRlciAxMDBFLTM5NyAyMEUtMzk4ICAtPiAgIDBFLTM5OA0KK2RkcmVtNDQ0IHJlbWFpbmRlciAxMDBFLTM5NyAyMUUtMzk4ICAtPiAxLjNFLTM5NyBTdWJub3JtYWwNCitkZHJlbTQ0NSByZW1haW5kZXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsDQorDQorLS0gemVybyBzaWducw0KK2RkcmVtNjUwIHJlbWFpbmRlciAgMSAgMSAtPiAgMA0KK2RkcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMA0KK2RkcmVtNjUyIHJlbWFpbmRlciAgMSAtMSAtPiAgMA0KK2RkcmVtNjUzIHJlbWFpbmRlciAtMSAtMSAtPiAtMA0KK2RkcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMA0KK2RkcmVtNjU1IHJlbWFpbmRlciAtMCAgMSAtPiAtMA0KK2RkcmVtNjU2IHJlbWFpbmRlciAgMCAtMSAtPiAgMA0KK2RkcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMA0KK2RkcmVtNjU4IHJlbWFpbmRlciAgMC4wMCAgMSAgLT4gIDAuMDANCitkZHJlbTY1OSByZW1haW5kZXIgLTAuMDAgIDEgIC0+IC0wLjAwDQorDQorLS0gU3BlY2lhbHMNCitkZHJlbTY4MCByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4MiByZW1haW5kZXIgIEluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4MyByZW1haW5kZXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4NSByZW1haW5kZXIgIEluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4NiByZW1haW5kZXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTY4OCByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQorZGRyZW02ODkgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQ0KK2RkcmVtNjkyIHJlbWFpbmRlciAgMCAgICAgSW5mICAgLT4gIDANCitkZHJlbTY5MyByZW1haW5kZXIgLTAgICAgIEluZiAgIC0+IC0wDQorZGRyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQ0KK2RkcmVtNjk1IHJlbWFpbmRlciAgMTAwMCAgSW5mICAgLT4gIDEwMDANCitkZHJlbTY5NiByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHJlbTcwMCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwMSByZW1haW5kZXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwMyByZW1haW5kZXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwNCByZW1haW5kZXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwNiByZW1haW5kZXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwNyByZW1haW5kZXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTcwOSByZW1haW5kZXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQorZGRyZW03MTAgcmVtYWluZGVyIC0xICAgIC1JbmYgICAtPiAtMQ0KK2RkcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTANCitkZHJlbTcxMiByZW1haW5kZXIgIDAgICAgLUluZiAgIC0+ICAwDQorZGRyZW03MTMgcmVtYWluZGVyICAxICAgIC1JbmYgICAtPiAgMQ0KK2RkcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDANCitkZHJlbTcxNSByZW1haW5kZXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZHJlbTcyMiByZW1haW5kZXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkZHJlbTcyMyByZW1haW5kZXIgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkZHJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZHJlbTcyNSByZW1haW5kZXIgLU5hTiAgMCAgICAgIC0+IC1OYU4NCitkZHJlbTcyNiByZW1haW5kZXIgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkZHJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZHJlbTcyOCByZW1haW5kZXIgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkZHJlbTcyOSByZW1haW5kZXIgIE5hTiAtTmFOICAgIC0+ICBOYU4NCitkZHJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZHJlbTczMSByZW1haW5kZXIgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkZHJlbTczMiByZW1haW5kZXIgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkZHJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4NCitkZHJlbTczNCByZW1haW5kZXIgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkZHJlbTczNSByZW1haW5kZXIgIDEgICAtTmFOICAgIC0+IC1OYU4NCitkZHJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZHJlbTczNyByZW1haW5kZXIgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkZHJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NDIgcmVtYWluZGVyICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzQzIHJlbWFpbmRlciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NDUgcmVtYWluZGVyICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzQ2IHJlbWFpbmRlciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NDkgcmVtYWluZGVyICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzUwIHJlbWFpbmRlciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NTIgcmVtYWluZGVyIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzUzIHJlbWFpbmRlciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NTUgcmVtYWluZGVyIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzU2IHJlbWFpbmRlciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW03NTggcmVtYWluZGVyICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzU5IHJlbWFpbmRlciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdpbmcgTmFOcw0KK2RkcmVtNzYwIHJlbWFpbmRlciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQ0KK2RkcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzYyIHJlbWFpbmRlciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzYzIHJlbWFpbmRlciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTENCitkZHJlbTc2NSByZW1haW5kZXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYNCitkZHJlbTc2NiByZW1haW5kZXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzDQorZGRyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNA0KK2RkcmVtNzY4IHJlbWFpbmRlciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUNCitkZHJlbTc2OSByZW1haW5kZXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2DQorDQorLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQorZGRyZW03NzAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gIDYNCitkZHJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMA0KK2RkcmVtNzcyICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkcmVtNzczICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KKw0KKy0tIGxvbmcgb3BlcmFuZCBjaGVja3MNCitkZHJlbTgwMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCitkZHJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCitkZHJlbTgwMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCitkZHJlbTgwNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCitkZHJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCitkZHJlbTgwNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCitkZHJlbTgwNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCitkZHJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCitkZHJlbTgwOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCitkZHJlbTgxMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkZHJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYNCitkZHJlbTgxMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCitkZHJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCitkZHJlbTgyMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCitkZHJlbTgyMyByZW1haW5kZXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCitkZHJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCitkZHJlbTgyNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCitkZHJlbTgyNiByZW1haW5kZXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCitkZHJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCitkZHJlbTgyOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCitkZHJlbTgyOSByZW1haW5kZXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCitkZHJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkZHJlbTgzMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYNCitkZHJlbTgzMiByZW1haW5kZXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCistLSBmcm9tIGRpdmlkZWludA0KK2RkcmVtODQwIHJlbWFpbmRlciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wDQorZGRyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQNCitkZHJlbTg0MiByZW1haW5kZXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQ0KK2RkcmVtODQzIHJlbWFpbmRlciAgMTAwMDAwMDAwLjkgICAxICAtPiAgMC45DQorZGRyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQ0KK2RkcmVtODUwIHJlbWFpbmRlciAgMTAwMDAwMDAzICAgICA1ICAtPiAgMw0KK2RkcmVtODUxIHJlbWFpbmRlciAgMTAwMDAwMDMgICAgICA1ICAtPiAgMw0KK2RkcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMw0KK2RkcmVtODUzIHJlbWFpbmRlciAgMTAwMDAzICAgICAgICA1ICAtPiAgMw0KK2RkcmVtODU0IHJlbWFpbmRlciAgMTAwMDMgICAgICAgICA1ICAtPiAgMw0KK2RkcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMw0KK2RkcmVtODU2IHJlbWFpbmRlciAgMTAzICAgICAgICAgICA1ICAtPiAgMw0KK2RkcmVtODU3IHJlbWFpbmRlciAgMTMgICAgICAgICAgICA1ICAtPiAgMw0KK2RkcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQ0KKw0KKy0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZGRyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2RkcmVtODYxIHJlbWFpbmRlciAxMjMwICAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkZHJlbTg2MiByZW1haW5kZXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZGRyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2RkcmVtODY0IHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkZHJlbTg3MCByZW1haW5kZXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODcyIHJlbWFpbmRlciAxMjNlMSAgICAgIDEwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg3MyByZW1haW5kZXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODc1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDEwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg3NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODc4IHJlbWFpbmRlciAxMjMwICAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg3OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODgxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgMTAwMDAwIC0+IDEyMzANCitkZHJlbTg4MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwDQorZGRyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMA0KK2RkcmVtODg0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgMTAwIC0+ICAgMzANCitkZHJlbTg4NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwDQorZGRyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMA0KKw0KK2RkcmVtODkwIHJlbWFpbmRlciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04OTIgcmVtYWluZGVyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODkzIHJlbWFpbmRlciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04OTUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtODk2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW04OTkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTAwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzANCitkZHJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwDQorZGRyZW05MDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMA0KK2RkcmVtOTAzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IDEyMzANCitkZHJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwDQorZGRyZW05MDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gICAxMA0KK2RkcmVtOTA2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDANCisNCitkZHJlbTkxMCByZW1haW5kZXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW05MTEgcmVtYWluZGVyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkxMyByZW1haW5kZXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW05MTQgcmVtYWluZGVyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkxNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW05MTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkyMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwDQorZGRyZW05MjEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMA0KK2RkcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzANCitkZHJlbTkyMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwDQorZGRyZW05MjQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMA0KK2RkcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzANCitkZHJlbTkyNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwDQorDQorZGRyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTMxIHJlbWFpbmRlciAxMjNlMSAgICAgOTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkzMiByZW1haW5kZXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTM0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgOTAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkzNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwDQorZGRyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTM3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgOTAwMDAwMDAwIC0+IDEyMzANCitkZHJlbTkzOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwDQorZGRyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTQxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgOTAwMDAwIC0+IDEyMzANCitkZHJlbTk0MiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwDQorZGRyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMA0KK2RkcmVtOTQ0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgOTAwIC0+ICAzMzANCitkZHJlbTk0NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgIDYwDQorZGRyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNg0KKw0KK2RkcmVtOTUwIHJlbWFpbmRlciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RkcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTYyIHJlbWFpbmRlciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTYzIHJlbWFpbmRlciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY1IHJlbWFpbmRlciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY2IHJlbWFpbmRlciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY4IHJlbWFpbmRlciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2RkcmVtOTY5IHJlbWFpbmRlciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMA0KKw0KK2RkcmVtOTgwIHJlbWFpbmRlciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQ0KKw0KKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQ0KK2RkcmVtMTA1MSByZW1haW5kZXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkcmVtMTA1MiByZW1haW5kZXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkcmVtMTA1NCByZW1haW5kZXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RkcmVtMTA1NSByZW1haW5kZXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcNCitkZHJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3DQorZGRyZW0xMDU3IHJlbWFpbmRlciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3Nw0KK2RkcmVtMTA1OCByZW1haW5kZXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcNCisNCistLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdA0KK2RkcmVtMTEwMSByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgMC43NjU0MzIxMDk4NzY1NDYNCitkZHJlbTExMDIgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgMS4wMDAwMDAwMDAwMDAwMSAgLT4gICAwLjY1NDMyMTA5ODc2NTU3DQorZGRyZW0xMTAzIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIDAuNTQzMjEwOTg3NjY2OA0KK2RkcmVtMTEwNCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTUgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgMi42OTEzNTgwMjc0NjkxMzcNCitkZHJlbTExMDUgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0LjAwMDAwMDAwMDAwMDAwMSAgLT4gIDMuNjkxMzU4MDI3NDY5MTM3DQorZGRyZW0xMTA2IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgIDAuNjkxMzU3ODAyNDY5Ng0KK2RkcmVtMTEwNyByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA0Ljk5OTk5OTk5OTk5OTk5ICAtPiAgIDMuNDY5MTM1NzgwMjQ2OTENCitkZHJlbTExMDggcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICA0Ljk5OTk5OTk5OTk5OTk5OSAgLT4gIDEuMjQ2OTEzNTc4MDI0NjkxDQorZGRyZW0xMTA5IHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc1MzA4NjQyMTk3NTMwOQ0KK2RkcmVtMTExMCByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA1LjAwMDAwMDAwMDAwMDAxICAtPiAgIDMuNTMwODY0MjE5NzUzMTANCitkZHJlbTExMTEgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDUuMDAwMDAwMDAwMDAwMSAgLT4gICAgMS4zMDg2NDIxOTc1MzE0DQorDQorLS0gTnVsbCB0ZXN0cw0KK2RkcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyZW0xMDAxIHJlbWFpbmRlciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QKaW5kZXggOGRhOWFmYy4uNmJhNjRlYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUmVtYWluZGVyTmVhci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFJlbWFpbmRlck5lYXIuZGVjVGVzdApAQCAtMSw2MjkgKzEsNjI5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkUmVtYWluZGVyTmVhci5kZWNUZXN0IC0tIGRlY0RvdWJsZSByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQotZGRybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMAotZGRybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMAotZGRybW4wMDMgcmVtYWluZGVybmVhciAgMSAgICAgMiAgICAtPiAgMQotZGRybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMAotZGRybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMAotZGRybW4wMDYgcmVtYWluZGVybmVhciAgMCAgICAgMiAgICAtPiAgMAotZGRybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQotZGRybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQotZGRybW4wMDkgcmVtYWluZGVybmVhciAgMyAgICAgMyAgICAtPiAgMAotCi1kZHJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQKLWRkcm1uMDExIHJlbWFpbmRlcm5lYXIgIDIuNCAgIC0xICAgLT4gIDAuNAotZGRybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNAotZGRybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNAotZGRybW4wMTQgcmVtYWluZGVybmVhciAgMi40MCAgMSAgICAtPiAgMC40MAotZGRybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDAKLWRkcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNAotZGRybW4wMTcgcmVtYWluZGVybmVhciAgMi40MDAgMiAgICAtPiAgMC40MDAKLWRkcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDAKLWRkcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDAKLQotZGRybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwCi1kZHJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDEKLWRkcm1uMDIyIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMCAgICAtPiAgMS4wCi1kZHJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwCi1kZHJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCi1kZHJtbjAyNSByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCi0KLWRkcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQotZGRybW4wMzEgcmVtYWluZGVybmVhciAgMSAgICAgNCAgICAgIC0+ICAxCi1kZHJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDEKLQotZGRybW4wMzMgcmVtYWluZGVybmVhciAgMSAgICAgMTYgICAgIC0+ICAxCi1kZHJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDEKLWRkcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQotZGRybW4wNDAgcmVtYWluZGVybmVhciAgMSAgICAtMiAgICAgIC0+ICAxCi1kZHJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDEKLWRkcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQotZGRybW4wNDMgcmVtYWluZGVybmVhciAgMSAgICAtMTYgICAgIC0+ICAxCi1kZHJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDEKLWRkcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQotZGRybW4wNTAgcmVtYWluZGVybmVhciAtMSAgICAgMiAgICAgIC0+ICAtMQotZGRybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQotZGRybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQotZGRybW4wNTMgcmVtYWluZGVybmVhciAtMSAgICAgMTYgICAgIC0+ICAtMQotZGRybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQotZGRybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQotZGRybW4wNjAgcmVtYWluZGVybmVhciAtMSAgICAtMiAgICAgIC0+ICAtMQotZGRybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQotZGRybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQotZGRybW4wNjMgcmVtYWluZGVybmVhciAtMSAgICAtMTYgICAgIC0+ICAtMQotZGRybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQotZGRybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQotCi1kZHJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjEKLWRkcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMwotZGRybW4wNjggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCi1kZHJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNAotZGRybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41Ci1kZHJtbjA3MSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOSAgIDEgIC0+IC0wLjEKLWRkcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxCi1kZHJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQotZGRybW4wNzQgcmVtYWluZGVybmVhciAgOSAgICAgICAgICAgICAxICAtPiAwCi1kZHJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDAKLWRkcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTEKLWRkcm1uMDc3IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMyAgLT4gMAotZGRybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQotCi1kZHJtbjA4MCByZW1haW5kZXJuZWFyICAwLiAgICAgICAgICAgIDEgIC0+IDAKLWRkcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wCi1kZHJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDAKLWRkcm1uMDgzIHJlbWFpbmRlcm5lYXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAotZGRybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwCi1kZHJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDAKLWRkcm1uMDg2IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCi1kZHJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDAKLWRkcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMAotZGRybW4wODkgcmVtYWluZGVybmVhciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAotZGRybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDAKLWRkcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMAotZGRybW4wOTIgcmVtYWluZGVybmVhciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAotZGRybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03Ci1kZHJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgKLWRkcm1uMDk1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKLQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDAKLWRkcm1uMTAxIHJlbWFpbmRlcm5lYXIgIDAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMTA0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLS0tIFtTb21lIHRoaW5rIHRoaXMgbmV4dCBncm91cCBzaG91bGQgYmUgRGl2aXNpb25fYnlfemVybyBleGNlcHRpb24sIGJ1dAotLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3IKLS0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldCi1kZHJtbjEwNyByZW1haW5kZXJuZWFyICAwLjAwMDEgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjExMCByZW1haW5kZXJuZWFyICAxICAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjExMyByZW1haW5kZXJuZWFyIDFFKzEwMCAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjExNiByZW1haW5kZXJuZWFyICAwLjAxICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjEyMSByZW1haW5kZXJuZWFyICAxICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjEyNCByZW1haW5kZXJuZWFyIDFFKzM4NCAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGFuZCB6ZXJvcyBvbiBsZWZ0Ci1kZHJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwCi1kZHJtbjEzMSByZW1haW5kZXJuZWFyICAwICAgICAtMSAgIC0+ICAwCi1kZHJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjAKLWRkcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMAotZGRybW4xMzQgcmVtYWluZGVybmVhciAtMCAgICAgIDEgICAtPiAtMAotZGRybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMAotZGRybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wCi1kZHJtbjEzNyByZW1haW5kZXJuZWFyIC0wLjAgICAtMSAgIC0+IC0wLjAKLQotLS0gMC41ZXJzCi1kZHJtbjE0MyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41Ci1kZHJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41Ci1kZHJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAotZGRybW4xNDYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCi1kZHJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAotZGRybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKLWRkcm1uMTQ5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAotCi0tLSBzdGVhZGllcwotZGRybW4xNTAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDAKLWRkcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxCi1kZHJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQotZGRybW4xNTMgcmVtYWluZGVybmVhciAgMSAgNCAgIC0+IDEKLWRkcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxCi1kZHJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQotZGRybW4xNTYgcmVtYWluZGVybmVhciAgMSAgNyAgIC0+IDEKLWRkcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxCi1kZHJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQotZGRybW4xNTkgcmVtYWluZGVybmVhciAgMSAgMTAgIC0+IDEKLWRkcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCi1kZHJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMAotZGRybW4xNjIgcmVtYWluZGVybmVhciAgMyAgMSAgIC0+IDAKLWRkcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwCi1kZHJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMAotZGRybW4xNjUgcmVtYWluZGVybmVhciAgNiAgMSAgIC0+IDAKLWRkcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwCi1kZHJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMAotZGRybW4xNjggcmVtYWluZGVybmVhciAgOSAgMSAgIC0+IDAKLWRkcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwCi0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXIKLWRkcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMAotZGRybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwCi1kZHJtbjE3MyByZW1haW5kZXJuZWFyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKLWRkcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMAotZGRybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwCi0KLS0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCi1kZHJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRkcm1uMjAyIHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZGRybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kZHJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4yMDUgcmVtYWluZGVybmVhciAgMC4wMSAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4yMDggcmVtYWluZGVybmVhciAgMSAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW4yMTEgcmVtYWluZGVybmVhciAxRSszODAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbgotZGRybW4yMjEgcmVtYWluZGVybmVhciAyLjEgICAgIDMgICAtPiAtMC45Ci1kZHJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yCi1kZHJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxCi1kZHJtbjIyNCByZW1haW5kZXJuZWFyIC0xMCAgICAgMyAgIC0+IC0xCi1kZHJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMgotZGRybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjEKLWRkcm1uMjI3IHJlbWFpbmRlcm5lYXIgICAzLjYgICAxLjMgLT4gLTAuMwotCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCi1kZHJtbjIzMSByZW1haW5kZXJuZWFyICAtMC40ICAxLjAyMCAtPiAtMC40MDAKLWRkcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMAotZGRybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCi1kZHJtbjIzNCByZW1haW5kZXJuZWFyICAtMC41MiAxLjAyMCAtPiAgMC41MDAKLWRkcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMAotCi0tLSBoaWdoIFhzCi1kZHJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMAotCi0tLSBkZHJtbjN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAotZGRybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDEKLWRkcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwCi1kZHJtbjMwMyByZW1haW5kZXJuZWFyICAgMTMgICAxMCAgICAtPiAgMwotZGRybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzCi1kZHJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMKLWRkcm1uMzA2IHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwMDAgIC0+ICAxMwotZGRybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMKLWRkcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMwotZGRybW4zMDkgcmVtYWluZGVybmVhciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMwotZGRybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzCi1kZHJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMwotZGRybW4zMTIgcmVtYWluZGVybmVhciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKLWRkcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMKLWRkcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzCi1kZHJtbjMxNSByZW1haW5kZXJuZWFyICAgMTAzMyAgMTAgICAtPiAgMwotZGRybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3Ci1kZHJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wCi1kZHJtbjMxOCByZW1haW5kZXJuZWFyICAgMTAyLjAgIDMgICAtPiAgMC4wCi1kZHJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wCi1kZHJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MAotZGRybW4zMjEgcmVtYWluZGVybmVhciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCi1kZHJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40Ci1kZHJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40Ci1kZHJtbjMyNCByZW1haW5kZXJuZWFyICAgMi40MDAgIDIgICAtPiAgMC40MDAKLWRkcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjEKLWRkcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwCi1kZHJtbjMyNyByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKLWRkcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDAKLWRkcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjEKLWRkcm1uMzMwIHJlbWFpbmRlcm5lYXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCi1kZHJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDAKLWRkcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDAKLWRkcm1uMzMzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUKLWRkcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUKLWRkcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCi1kZHJtbjMzNiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKLWRkcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwCi1kZHJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MAotZGRybW4zMzkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCi0KLWRkcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03Ci1kZHJtbjM0MSByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMSAgICAtPiAgLTFFLTgKLWRkcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkKLWRkcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMAotZGRybW4zNDQgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAwMDEgICAgLT4gIC0xRS0xMQotZGRybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNwotZGRybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKLWRkcm1uMzQ3IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OSAgICAtPiAgMUUtOQotZGRybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTAKLWRkcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQotZGRybW4zNTAgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMgotCi1kZHJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMKLWRkcm1uMzUyIHJlbWFpbmRlcm5lYXIgICA1ICAgMiAgICAtPiAgMQotZGRybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQotZGRybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxCi1kZHJtbjM1NSByZW1haW5kZXJuZWFyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQotZGRybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQotZGRybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxCi1kZHJtbjM1OCByZW1haW5kZXJuZWFyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQotZGRybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcKLQotZGRybW4zNjAgcmVtYWluZGVybmVhciAgIDEuMiAgIDAuNzM0NSAtPiAtMC4yNjkwCi1kZHJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKLWRkcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMAotZGRybW4zNjMgcmVtYWluZGVybmVhciAgIDAuOCAgIDAuMyAgICAtPiAtMC4xCi1kZHJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAotZGRybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDAKLWRkcm1uMzY2IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgIDIgICAgLT4gIDAuNDAwCi0KLS0tIHJvdW5kIHRvIGV2ZW4KLWRkcm1uMzcxIHJlbWFpbmRlcm5lYXIgICAxMjEgICAgIDIgICAgLT4gIDEKLWRkcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDAKLWRkcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTEKLWRkcm1uMzc0IHJlbWFpbmRlcm5lYXIgICAxMjQgICAgIDIgICAgLT4gIDAKLWRkcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDEKLWRkcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDAKLWRkcm1uMzc3IHJlbWFpbmRlcm5lYXIgICAxMjcgICAgIDIgICAgLT4gLTEKLQotZGRybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCi1kZHJtbjM4MiByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMDEgICAgLT4gLTAuMjM0NAotZGRybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMwotZGRybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzCi1kZHJtbjM4NSByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjEgICAgICAgLT4gLTAuMwotZGRybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xCi1kZHJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKLWRkcm1uMzg4IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQuMDAwMSAgICAtPiAtMS4zMDg5Ci1kZHJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNAotZGRybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKLWRkcm1uMzkxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTkgICAgICAtPiAtMC4yNgotZGRybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQotZGRybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKLWRkcm1uMzk0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUgICAgICAgICAtPiAgMAotZGRybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkKLWRkcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkKLWRkcm1uMzk3IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDEgICAgICAtPiAgMC4zNgotZGRybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjEKLQotLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMKLWRkcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNAotZGRybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQotZGRybW40MDMgcmVtYWluZGVybmVhciAgIDAuNDU1ICAgICAgIDEgICAtPiAgMC40NTUKLWRkcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQotZGRybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQotZGRybW40MDYgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1ICAgIDEgICAtPiAgMC40NTU1NTUKLWRkcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQotZGRybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQotZGRybW40MDkgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTU1IDEgICAtPiAgMC40NTU1NTU1NTUKLS0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0KLWRkcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQotZGRybW40MTIgcmVtYWluZGVybmVhciAgIDAuNTUgICAgICAgIDEgICAtPiAtMC40NQotZGRybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUKLWRkcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQotZGRybW40MTUgcmVtYWluZGVybmVhciAgIDAuNTU1NTUgICAgIDEgICAtPiAtMC40NDQ0NQotZGRybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUKLWRkcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQotZGRybW40MTggcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTUgIDEgICAtPiAtMC40NDQ0NDQ0NQotZGRybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUKLQotLS0gZm9sZGRvd25zCi1kZHJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRkcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDFFKzM4MyAgLT4gICAwRSszNjkgQ2xhbXBlZAotZGRybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgMkUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCi1kZHJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLWRkcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDRFKzM4MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAotZGRybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgNUUrMzgzICAtPiAgIDBFKzM2OSBDbGFtcGVkCi1kZHJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA2RSszODMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLWRkcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSszODQgIDdFKzM4MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwRSszODMgQ2xhbXBlZAotZGRybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzM4NCAgOEUrMzgzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDBFKzM4MyBDbGFtcGVkCi1kZHJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQKLS0tIHRpbmllcwotZGRybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMUUtMzk4ICAtPiAgIDBFLTM5OAotZGRybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OAotZGRybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgM0UtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwKLWRkcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDRFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCi1kZHJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4Ci1kZHJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA2RS0zOTggIC0+ICAtMkUtMzk4IFN1Ym5vcm1hbAotZGRybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgN0UtMzk4ICAtPiAgIDNFLTM5OCBTdWJub3JtYWwKLWRkcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsCi1kZHJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA5RS0zOTggIC0+ICAgMUUtMzk4IFN1Ym5vcm1hbAotZGRybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMEUtMzk4ICAtPiAgIDBFLTM5OAotZGRybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAgLTFFLTM5OCBTdWJub3JtYWwKLWRkcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMTFFLTM5OCAgLT4gIC0xRS0zOTggU3Vibm9ybWFsCi1kZHJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIwRS0zOTggIC0+ICAgMEUtMzk4Ci1kZHJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIxRS0zOTggIC0+ICAtOEUtMzk4IFN1Ym5vcm1hbAotZGRybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTM5NyAzMEUtMzk4ICAtPiAxLjBFLTM5NyBTdWJub3JtYWwKLQotLS0gemVybyBzaWducwotZGRybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAotZGRybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAotZGRybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAotZGRybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAotZGRybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAotZGRybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAotZGRybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAotZGRybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAotZGRybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKLWRkcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCi0KLS0tIFNwZWNpYWxzCi1kZHJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAotZGRybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKLWRkcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCi1kZHJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAotZGRybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKLWRkcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCi1kZHJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1kZHJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQotZGRybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKLWRkcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCi1kZHJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQotZGRybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKLWRkcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgotZGRybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgotZGRybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgotZGRybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgotZGRybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgotZGRybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgotZGRybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgotZGRybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgotZGRybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgotZGRybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgotZGRybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgotZGRybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgotZGRybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgotZGRybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgotZGRybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgotZGRybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgotZGRybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kZHJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2luZyBOYU5zCi1kZHJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCi1kZHJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQotZGRybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgotZGRybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKLWRkcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0Ci1kZHJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQotZGRybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKLQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCi1kZHJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKLWRkcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAotZGRybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZGRybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzCi1kZHJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kZHJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCi1kZHJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCi1kZHJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kZHJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCi1kZHJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCi1kZHJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kZHJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kZHJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCi1kZHJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kZHJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAotZGRybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi1kZHJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kZHJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCi1kZHJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCi1kZHJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kZHJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCi1kZHJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCi1kZHJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kZHJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kZHJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCi1kZHJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kZHJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAotZGRybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi0tLSBmcm9tIGRpdmlkZWludAotZGRybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCi1kZHJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKLWRkcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQotZGRybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCi1kZHJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQotZGRybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgotZGRybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgotZGRybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgotZGRybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgotZGRybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgotZGRybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgotZGRybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgotZGRybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgotZGRybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQotCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZGRybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCi1kZHJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZGRybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRkcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCi1kZHJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAotZGRybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAotZGRybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKLWRkcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCi1kZHJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAotZGRybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKLWRkcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCi1kZHJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAotZGRybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKLQotZGRybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAotZGRybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCi1kZHJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAotZGRybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKLWRkcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCi1kZHJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAotZGRybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKLQotZGRybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAotZGRybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKLWRkcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCi1kZHJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAotZGRybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKLWRkcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCi1kZHJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAotZGRybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKLQotZGRybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKLWRkcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCi1kZHJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAotZGRybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKLWRkcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCi1kZHJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAotZGRybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKLWRkcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCi1kZHJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAotZGRybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKLQotZGRybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZGRybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZGRybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAotCi1kZHJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5Ci0KLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCi1kZHJtbjEwNTEgcmVtYWluZGVybmVhciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZHJtbjEwNTIgcmVtYWluZGVybmVhciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZHJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZHJtbjEwNTQgcmVtYWluZGVybmVhciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kZHJtbjEwNTUgcmVtYWluZGVybmVhciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3NwotZGRybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcKLWRkcm1uMTA1NyByZW1haW5kZXJuZWFyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3Ci1kZHJtbjEwNTggcmVtYWluZGVybmVhciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3NwotCi0tLSBkZXN0cnVjdGl2ZSBzdWJ0cmFjdAotZGRybW4xMTAwIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU1Ci1kZHJtbjExMDEgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NDQKLWRkcm1uMTEwMiByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDEuMDAwMDAwMDAwMDAwMSAgLT4gICAgLTAuNDU2Nzg5MDEyMzMzMwotZGRybW4xMTAzIHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTUgIDQuMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0Ci1kZHJtbjExMDQgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQKLWRkcm1uMTExNSByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgIDQuOTk5OTk5OTk5OTk5OSAgLT4gICAgIDAuNjkxMzU3ODAyNDY5NgotZGRybW4xMTE2IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA0Ljk5OTk5OTk5OTk5OTk5ICAtPiAgIC0xLjUzMDg2NDIxOTc1MzA4Ci1kZHJtbjExMTcgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS4yNDY5MTM1NzgwMjQ2OTEKLWRkcm1uMTExOCByZW1haW5kZXJOZWFyICAxMjM0NTY3ODkwMTIzNDU2ICA1LjAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjc1MzA4NjQyMTk3NTMwOQotZGRybW4xMTE5IHJlbWFpbmRlck5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICA1LjAwMDAwMDAwMDAwMDAxICAtPiAgIC0xLjQ2OTEzNTc4MDI0NjkxCi1kZHJtbjExMTAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgICAxLjMwODY0MjE5NzUzMTQKLQotLS0gTnVsbCB0ZXN0cwotZGRybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjRG91YmxlIHJlbWFpbmRlci1uZWFyICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpDQorZGRybW4wMDEgcmVtYWluZGVybmVhciAgMSAgICAgMSAgICAtPiAgMA0KK2Rkcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDANCitkZHJtbjAwMyByZW1haW5kZXJuZWFyICAxICAgICAyICAgIC0+ICAxDQorZGRybW4wMDQgcmVtYWluZGVybmVhciAgMiAgICAgMiAgICAtPiAgMA0KK2Rkcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDANCitkZHJtbjAwNiByZW1haW5kZXJuZWFyICAwICAgICAyICAgIC0+ICAwDQorZGRybW4wMDcgcmVtYWluZGVybmVhciAgMSAgICAgMyAgICAtPiAgMQ0KK2Rkcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTENCitkZHJtbjAwOSByZW1haW5kZXJuZWFyICAzICAgICAzICAgIC0+ICAwDQorDQorZGRybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40DQorZGRybW4wMTEgcmVtYWluZGVybmVhciAgMi40ICAgLTEgICAtPiAgMC40DQorZGRybW4wMTIgcmVtYWluZGVybmVhciAgLTIuNCAgMSAgICAtPiAgLTAuNA0KK2Rkcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQNCitkZHJtbjAxNCByZW1haW5kZXJuZWFyICAyLjQwICAxICAgIC0+ICAwLjQwDQorZGRybW4wMTUgcmVtYWluZGVybmVhciAgMi40MDAgMSAgICAtPiAgMC40MDANCitkZHJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQNCitkZHJtbjAxNyByZW1haW5kZXJuZWFyICAyLjQwMCAyICAgIC0+ICAwLjQwMA0KK2Rkcm1uMDE4IHJlbWFpbmRlcm5lYXIgIDIuICAgIDIgICAgLT4gIDANCitkZHJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwDQorDQorZGRybW4wMjAgcmVtYWluZGVybmVhciAgMTg3ICAgMTg3ICAgIC0+ICAwDQorZGRybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxDQorZGRybW4wMjIgcmVtYWluZGVybmVhciAgNSAgICAgMi4wICAgIC0+ICAxLjANCitkZHJtbjAyMyByZW1haW5kZXJuZWFyICA1ICAgICAyLjAwMCAgLT4gIDEuMDAwDQorZGRybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KK2Rkcm1uMDI1IHJlbWFpbmRlcm5lYXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCisNCitkZHJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDENCitkZHJtbjAzMSByZW1haW5kZXJuZWFyICAxICAgICA0ICAgICAgLT4gIDENCitkZHJtbjAzMiByZW1haW5kZXJuZWFyICAxICAgICA4ICAgICAgLT4gIDENCisNCitkZHJtbjAzMyByZW1haW5kZXJuZWFyICAxICAgICAxNiAgICAgLT4gIDENCitkZHJtbjAzNCByZW1haW5kZXJuZWFyICAxICAgICAzMiAgICAgLT4gIDENCitkZHJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDENCitkZHJtbjA0MCByZW1haW5kZXJuZWFyICAxICAgIC0yICAgICAgLT4gIDENCitkZHJtbjA0MSByZW1haW5kZXJuZWFyICAxICAgIC00ICAgICAgLT4gIDENCitkZHJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDENCitkZHJtbjA0MyByZW1haW5kZXJuZWFyICAxICAgIC0xNiAgICAgLT4gIDENCitkZHJtbjA0NCByZW1haW5kZXJuZWFyICAxICAgIC0zMiAgICAgLT4gIDENCitkZHJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDENCitkZHJtbjA1MCByZW1haW5kZXJuZWFyIC0xICAgICAyICAgICAgLT4gIC0xDQorZGRybW4wNTEgcmVtYWluZGVybmVhciAtMSAgICAgNCAgICAgIC0+ICAtMQ0KK2Rkcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTENCitkZHJtbjA1MyByZW1haW5kZXJuZWFyIC0xICAgICAxNiAgICAgLT4gIC0xDQorZGRybW4wNTQgcmVtYWluZGVybmVhciAtMSAgICAgMzIgICAgIC0+ICAtMQ0KK2Rkcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTENCitkZHJtbjA2MCByZW1haW5kZXJuZWFyIC0xICAgIC0yICAgICAgLT4gIC0xDQorZGRybW4wNjEgcmVtYWluZGVybmVhciAtMSAgICAtNCAgICAgIC0+ICAtMQ0KK2Rkcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTENCitkZHJtbjA2MyByZW1haW5kZXJuZWFyIC0xICAgIC0xNiAgICAgLT4gIC0xDQorZGRybW4wNjQgcmVtYWluZGVybmVhciAtMSAgICAtMzIgICAgIC0+ICAtMQ0KK2Rkcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTENCisNCitkZHJtbjA2NiByZW1haW5kZXJuZWFyICAgICAgICAgIDkuOSAgIDEgIC0+IC0wLjENCitkZHJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMNCitkZHJtbjA2OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkgICAgIDEgIC0+IDANCitkZHJtbjA2OSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuNCAgIDEgIC0+IDAuNA0KK2Rkcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQ0KK2Rkcm1uMDcxIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gLTAuMQ0KK2Rkcm1uMDcyIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gLTAuMDAxDQorZGRybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDENCitkZHJtbjA3NCByZW1haW5kZXJuZWFyICA5ICAgICAgICAgICAgIDEgIC0+IDANCitkZHJtbjA3NSByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDEgIC0+IDANCitkZHJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xDQorZGRybW4wNzcgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAzICAtPiAwDQorZGRybW4wNzggcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSA0ICAtPiAtMQ0KKw0KK2Rkcm1uMDgwIHJlbWFpbmRlcm5lYXIgIDAuICAgICAgICAgICAgMSAgLT4gMA0KK2Rkcm1uMDgxIHJlbWFpbmRlcm5lYXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wDQorZGRybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwDQorZGRybW4wODMgcmVtYWluZGVybmVhciAgMC4wMEUrOSAgICAgICAxICAtPiAwDQorZGRybW4wODQgcmVtYWluZGVybmVhciAgMC4wMEUrMyAgICAgICAxICAtPiAwDQorZGRybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwDQorZGRybW4wODYgcmVtYWluZGVybmVhciAgMC4wMEUrMSAgICAgICAxICAtPiAwLjANCitkZHJtbjA4NyByZW1haW5kZXJuZWFyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDANCitkZHJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDANCitkZHJtbjA4OSByZW1haW5kZXJuZWFyICAwLjAwRS0xICAgICAgIDEgIC0+IDAuMDAwDQorZGRybW4wOTAgcmVtYWluZGVybmVhciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDANCitkZHJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDANCitkZHJtbjA5MiByZW1haW5kZXJuZWFyICAwLjAwRS00ICAgICAgIDEgIC0+IDAuMDAwMDAwDQorZGRybW4wOTMgcmVtYWluZGVybmVhciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03DQorZGRybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04DQorZGRybW4wOTUgcmVtYWluZGVybmVhciAgMC4wMDAwRS01MCAgICAxICAtPiAwRS01NA0KKw0KKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQorZGRybW4xMDEgcmVtYWluZGVybmVhciAgMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2Rkcm1uMTAyIHJlbWFpbmRlcm5lYXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZHJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRybW4xMDQgcmVtYWluZGVybmVhciAtMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2Rkcm1uMTA1IHJlbWFpbmRlcm5lYXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkZHJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0DQorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3INCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQ0KK2Rkcm1uMTA3IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTA4IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTEwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTExIHJlbWFpbmRlcm5lYXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTEzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTE0IHJlbWFpbmRlcm5lYXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTE2IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTE5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTIxIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTIyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMTI0IHJlbWFpbmRlcm5lYXIgMUUrMzg0ICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGFuZCB6ZXJvcyBvbiBsZWZ0DQorZGRybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMA0KK2Rkcm1uMTMxIHJlbWFpbmRlcm5lYXIgIDAgICAgIC0xICAgLT4gIDANCitkZHJtbjEzMiByZW1haW5kZXJuZWFyICAwLjAgICAgMSAgIC0+ICAwLjANCitkZHJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjANCitkZHJtbjEzNCByZW1haW5kZXJuZWFyIC0wICAgICAgMSAgIC0+IC0wDQorZGRybW4xMzUgcmVtYWluZGVybmVhciAtMCAgICAgLTEgICAtPiAtMA0KK2Rkcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMA0KK2Rkcm1uMTM3IHJlbWFpbmRlcm5lYXIgLTAuMCAgIC0xICAgLT4gLTAuMA0KKw0KKy0tIDAuNWVycw0KK2Rkcm1uMTQzIHJlbWFpbmRlcm5lYXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCitkZHJtbjE0NCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41DQorZGRybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCitkZHJtbjE0NiByZW1haW5kZXJuZWFyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCitkZHJtbjE0NyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MA0KK2Rkcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQorZGRybW4xNDkgcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQorDQorLS0gc3RlYWRpZXMNCitkZHJtbjE1MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMA0KK2Rkcm1uMTUxIHJlbWFpbmRlcm5lYXIgIDEgIDIgICAtPiAxDQorZGRybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDENCitkZHJtbjE1MyByZW1haW5kZXJuZWFyICAxICA0ICAgLT4gMQ0KK2Rkcm1uMTU0IHJlbWFpbmRlcm5lYXIgIDEgIDUgICAtPiAxDQorZGRybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDENCitkZHJtbjE1NiByZW1haW5kZXJuZWFyICAxICA3ICAgLT4gMQ0KK2Rkcm1uMTU3IHJlbWFpbmRlcm5lYXIgIDEgIDggICAtPiAxDQorZGRybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDENCitkZHJtbjE1OSByZW1haW5kZXJuZWFyICAxICAxMCAgLT4gMQ0KK2Rkcm1uMTYwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwDQorZGRybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDANCitkZHJtbjE2MiByZW1haW5kZXJuZWFyICAzICAxICAgLT4gMA0KK2Rkcm1uMTYzIHJlbWFpbmRlcm5lYXIgIDQgIDEgICAtPiAwDQorZGRybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDANCitkZHJtbjE2NSByZW1haW5kZXJuZWFyICA2ICAxICAgLT4gMA0KK2Rkcm1uMTY2IHJlbWFpbmRlcm5lYXIgIDcgIDEgICAtPiAwDQorZGRybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDANCitkZHJtbjE2OCByZW1haW5kZXJuZWFyICA5ICAxICAgLT4gMA0KK2Rkcm1uMTY5IHJlbWFpbmRlcm5lYXIgIDEwIDEgICAtPiAwDQorDQorLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KK2Rkcm1uMTcxIHJlbWFpbmRlcm5lYXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMA0KK2Rkcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMA0KK2Rkcm1uMTczIHJlbWFpbmRlcm5lYXIgICAwLjUxIDEuMDIwIC0+ICAwLjUxMA0KK2Rkcm1uMTc0IHJlbWFpbmRlcm5lYXIgICAwLjUyIDEuMDIwIC0+IC0wLjUwMA0KK2Rkcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMA0KKw0KKy0tIE1vcmUgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwDQorZGRybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRybW4yMDIgcmVtYWluZGVybmVhciAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRybW4yMDMgcmVtYWluZGVybmVhciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZGRybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjIwNSByZW1haW5kZXJuZWFyICAwLjAxICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMjA2IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjIwOCByZW1haW5kZXJuZWFyICAxICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uMjA5IHJlbWFpbmRlcm5lYXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjIxMSByZW1haW5kZXJuZWFyIDFFKzM4MCAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24NCitkZHJtbjIyMSByZW1haW5kZXJuZWFyIDIuMSAgICAgMyAgIC0+IC0wLjkNCitkZHJtbjIyMiByZW1haW5kZXJuZWFyICAxMCAgICAgNiAgIC0+IC0yDQorZGRybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQ0KK2Rkcm1uMjI0IHJlbWFpbmRlcm5lYXIgLTEwICAgICAzICAgLT4gLTENCitkZHJtbjIyNSByZW1haW5kZXJuZWFyICAxMC4yICAgMSAgIC0+IDAuMg0KK2Rkcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xDQorZGRybW4yMjcgcmVtYWluZGVybmVhciAgIDMuNiAgIDEuMyAtPiAtMC4zDQorDQorLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcg0KK2Rkcm1uMjMxIHJlbWFpbmRlcm5lYXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMA0KK2Rkcm1uMjMyIHJlbWFpbmRlcm5lYXIgIC0wLjUwIDEuMDIwIC0+IC0wLjUwMA0KK2Rkcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMA0KK2Rkcm1uMjM0IHJlbWFpbmRlcm5lYXIgIC0wLjUyIDEuMDIwIC0+ICAwLjUwMA0KK2Rkcm1uMjM1IHJlbWFpbmRlcm5lYXIgIC0wLjYgIDEuMDIwIC0+ICAwLjQyMA0KKw0KKy0tIGhpZ2ggWHMNCitkZHJtbjI0MCByZW1haW5kZXJuZWFyICAxRSsyICAxLjAwICAtPiAgMC4wMA0KKw0KKy0tIGRkcm1uM3h4IGFyZSBmcm9tIERpYWdCaWdEZWNpbWFsDQorZGRybW4zMDEgcmVtYWluZGVybmVhciAgIDEgICAgMyAgICAgLT4gIDENCitkZHJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMA0KK2Rkcm1uMzAzIHJlbWFpbmRlcm5lYXIgICAxMyAgIDEwICAgIC0+ICAzDQorZGRybW4zMDQgcmVtYWluZGVybmVhciAgIDEzICAgNTAgICAgLT4gIDEzDQorZGRybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzDQorZGRybW4zMDYgcmVtYWluZGVybmVhciAgIDEzICAgMTAwMCAgLT4gIDEzDQorZGRybW4zMDcgcmVtYWluZGVybmVhciAgIC4xMyAgICAxICAgLT4gIDAuMTMNCitkZHJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMNCitkZHJtbjMwOSByZW1haW5kZXJuZWFyICAgMC4xMDMzIDEgICAtPiAgMC4xMDMzDQorZGRybW4zMTAgcmVtYWluZGVybmVhciAgIDEuMDMzICAxICAgLT4gIDAuMDMzDQorZGRybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMNCitkZHJtbjMxMiByZW1haW5kZXJuZWFyICAgMTAuMzMgMTAgICAtPiAgMC4zMw0KK2Rkcm1uMzEzIHJlbWFpbmRlcm5lYXIgICAxMDMuMyAgMSAgIC0+ICAwLjMNCitkZHJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMw0KK2Rkcm1uMzE1IHJlbWFpbmRlcm5lYXIgICAxMDMzICAxMCAgIC0+ICAzDQorZGRybW4zMTYgcmVtYWluZGVybmVhciAgIDEwMzMgIDUwICAgLT4gLTE3DQorZGRybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMA0KK2Rkcm1uMzE4IHJlbWFpbmRlcm5lYXIgICAxMDIuMCAgMyAgIC0+ICAwLjANCitkZHJtbjMxOSByZW1haW5kZXJuZWFyICAgMTAzLjAgIDMgICAtPiAgMS4wDQorZGRybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDANCitkZHJtbjMyMSByZW1haW5kZXJuZWFyICAgMi40MDAgIDEgICAtPiAgMC40MDANCitkZHJtbjMyMiByZW1haW5kZXJuZWFyICAgMi40ICAgIDEgICAtPiAgMC40DQorZGRybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNA0KK2Rkcm1uMzI0IHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMiAgIC0+ICAwLjQwMA0KK2Rkcm1uMzI1IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zICAgIC0+ICAwLjENCitkZHJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMA0KK2Rkcm1uMzI3IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAgIC0+ICAwLjEwMA0KK2Rkcm1uMzI4IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDANCitkZHJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xDQorZGRybW4zMzAgcmVtYWluZGVybmVhciAgIDEuMDAgICAwLjMgLT4gIDAuMTANCitkZHJtbjMzMSByZW1haW5kZXJuZWFyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDANCitkZHJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwDQorZGRybW4zMzMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KK2Rkcm1uMzM0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCitkZHJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MA0KK2Rkcm1uMzM2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KK2Rkcm1uMzM3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQorZGRybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCitkZHJtbjMzOSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCisNCitkZHJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNw0KK2Rkcm1uMzQxIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAtMUUtOA0KK2Rkcm1uMzQyIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgLTFFLTkNCitkZHJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTANCitkZHJtbjM0NCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAwMSAgICAtPiAgLTFFLTExDQorZGRybW4zNDUgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OSAgICAtPiAgMUUtNw0KK2Rkcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04DQorZGRybW4zNDcgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05DQorZGRybW4zNDggcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTk5OSAgICAtPiAgMUUtMTANCitkZHJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTENCitkZHJtbjM1MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyDQorDQorZGRybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzDQorZGRybW4zNTIgcmVtYWluZGVybmVhciAgIDUgICAyICAgIC0+ICAxDQorZGRybW4zNTMgcmVtYWluZGVybmVhciAgIDQuMSAgIDIgICAgLT4gIDAuMQ0KK2Rkcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQ0KK2Rkcm1uMzU1IHJlbWFpbmRlcm5lYXIgICA0LjAwMSAgIDIgICAgLT4gIDAuMDAxDQorZGRybW4zNTYgcmVtYWluZGVybmVhciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQ0KK2Rkcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQ0KK2Rkcm1uMzU4IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMSAgIDIgICAgLT4gIDAuMDAwMDAxDQorZGRybW4zNTkgcmVtYWluZGVybmVhciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcNCisNCitkZHJtbjM2MCByZW1haW5kZXJuZWFyICAgMS4yICAgMC43MzQ1IC0+IC0wLjI2OTANCitkZHJtbjM2MSByZW1haW5kZXJuZWFyICAgMC44ICAgMTIgICAgIC0+ICAwLjgNCitkZHJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjANCitkZHJtbjM2MyByZW1haW5kZXJuZWFyICAgMC44ICAgMC4zICAgIC0+IC0wLjENCitkZHJtbjM2NCByZW1haW5kZXJuZWFyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMA0KK2Rkcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwDQorZGRybW4zNjYgcmVtYWluZGVybmVhciAgIDIuNDAwICAgMiAgICAtPiAgMC40MDANCisNCistLSByb3VuZCB0byBldmVuDQorZGRybW4zNzEgcmVtYWluZGVybmVhciAgIDEyMSAgICAgMiAgICAtPiAgMQ0KK2Rkcm1uMzcyIHJlbWFpbmRlcm5lYXIgICAxMjIgICAgIDIgICAgLT4gIDANCitkZHJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xDQorZGRybW4zNzQgcmVtYWluZGVybmVhciAgIDEyNCAgICAgMiAgICAtPiAgMA0KK2Rkcm1uMzc1IHJlbWFpbmRlcm5lYXIgICAxMjUgICAgIDIgICAgLT4gIDENCitkZHJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwDQorZGRybW4zNzcgcmVtYWluZGVybmVhciAgIDEyNyAgICAgMiAgICAtPiAtMQ0KKw0KK2Rkcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMA0KK2Rkcm1uMzgyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAwMSAgICAtPiAtMC4yMzQ0DQorZGRybW4zODMgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDEgICAgIC0+IC0wLjMzMw0KK2Rkcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMw0KK2Rkcm1uMzg1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMSAgICAgICAtPiAtMC4zDQorZGRybW4zODYgcmVtYWluZGVybmVhciAxMjM1NSAgNCAgICAgICAgIC0+IC0xDQorZGRybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxDQorZGRybW4zODggcmVtYWluZGVybmVhciAxMjM1NSAgNC4wMDAxICAgIC0+IC0xLjMwODkNCitkZHJtbjM4OSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0LjAwMDEgICAgLT4gIDAuNjkxNA0KK2Rkcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45DQorZGRybW4zOTEgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OSAgICAgIC0+IC0wLjI2DQorZGRybW4zOTIgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTkgICAgIC0+ICAyLjQ2OQ0KK2Rkcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5DQorZGRybW4zOTQgcmVtYWluZGVybmVhciAxMjM0NSAgNSAgICAgICAgIC0+ICAwDQorZGRybW4zOTUgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMDAxICAgIC0+IC0wLjI0NjkNCitkZHJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5DQorZGRybW4zOTcgcmVtYWluZGVybmVhciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2DQorZGRybW4zOTggcmVtYWluZGVybmVhciAxMjM0NSAgNS4xICAgICAgIC0+IC0yLjENCisNCistLSB0aGUgbmFzdHkgZGl2aXNpb24tYnktMSBjYXNlcw0KK2Rkcm1uNDAxIHJlbWFpbmRlcm5lYXIgICAwLjQgICAgICAgICAxICAgLT4gIDAuNA0KK2Rkcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUNCitkZHJtbjQwMyByZW1haW5kZXJuZWFyICAgMC40NTUgICAgICAgMSAgIC0+ICAwLjQ1NQ0KK2Rkcm1uNDA0IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTUgICAgICAxICAgLT4gIDAuNDU1NQ0KK2Rkcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUNCitkZHJtbjQwNiByZW1haW5kZXJuZWFyICAgMC40NTU1NTUgICAgMSAgIC0+ICAwLjQ1NTU1NQ0KK2Rkcm1uNDA3IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTUgICAxICAgLT4gIDAuNDU1NTU1NQ0KK2Rkcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUNCitkZHJtbjQwOSByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1NTUgMSAgIC0+ICAwLjQ1NTU1NTU1NQ0KKy0tIHdpdGggc3BpbGwuLi4gWzQxMiBleGVyY2lzZXMgc3RpY2t0YWIgbG9vcF0NCitkZHJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUNCitkZHJtbjQxMiByZW1haW5kZXJuZWFyICAgMC41NSAgICAgICAgMSAgIC0+IC0wLjQ1DQorZGRybW40MTMgcmVtYWluZGVybmVhciAgIDAuNTU1ICAgICAgIDEgICAtPiAtMC40NDUNCitkZHJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUNCitkZHJtbjQxNSByZW1haW5kZXJuZWFyICAgMC41NTU1NSAgICAgMSAgIC0+IC0wLjQ0NDQ1DQorZGRybW40MTYgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1ICAgIDEgICAtPiAtMC40NDQ0NDUNCitkZHJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUNCitkZHJtbjQxOCByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NSAgMSAgIC0+IC0wLjQ0NDQ0NDQ1DQorZGRybW40MTkgcmVtYWluZGVybmVhciAgIDAuNTU1NTU1NTU1IDEgICAtPiAtMC40NDQ0NDQ0NDUNCisNCistLSBmb2xkZG93bnMNCitkZHJtbjQyMSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZHJtbjQyMiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAxRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCitkZHJtbjQyMyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAyRSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCitkZHJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICAzRSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJtbjQyNSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA0RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJtbjQyNiByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA1RSszODMgIC0+ICAgMEUrMzY5IENsYW1wZWQNCitkZHJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA2RSszODMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJtbjQyOCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA3RSszODMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJtbjQyOSByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA4RSszODMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCitkZHJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrMzg0ICA5RSszODMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMEUrMzgzIENsYW1wZWQNCistLSB0aW5pZXMNCitkZHJtbjQzMSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICAxRS0zOTggIC0+ICAgMEUtMzk4DQorZGRybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgMkUtMzk4ICAtPiAgIDBFLTM5OA0KK2Rkcm1uNDMzIHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDNFLTM5OCAgLT4gICAxRS0zOTggU3Vibm9ybWFsDQorZGRybW40MzQgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNEUtMzk4ICAtPiAgIDJFLTM5OCBTdWJub3JtYWwNCitkZHJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA1RS0zOTggIC0+ICAgMEUtMzk4DQorZGRybW40MzYgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgNkUtMzk4ICAtPiAgLTJFLTM5OCBTdWJub3JtYWwNCitkZHJtbjQzNyByZW1haW5kZXJuZWFyICAgMUUtMzk3ICA3RS0zOTggIC0+ICAgM0UtMzk4IFN1Ym5vcm1hbA0KK2Rkcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS0zOTcgIDhFLTM5OCAgLT4gICAyRS0zOTggU3Vibm9ybWFsDQorZGRybW40MzkgcmVtYWluZGVybmVhciAgIDFFLTM5NyAgOUUtMzk4ICAtPiAgIDFFLTM5OCBTdWJub3JtYWwNCitkZHJtbjQ0MCByZW1haW5kZXJuZWFyICAgMUUtMzk3IDEwRS0zOTggIC0+ICAgMEUtMzk4DQorZGRybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTM5NyAxMUUtMzk4ICAtPiAgLTFFLTM5OCBTdWJub3JtYWwNCitkZHJtbjQ0MiByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDExRS0zOTggIC0+ICAtMUUtMzk4IFN1Ym5vcm1hbA0KK2Rkcm1uNDQzIHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMjBFLTM5OCAgLT4gICAwRS0zOTgNCitkZHJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtMzk3IDIxRS0zOTggIC0+ICAtOEUtMzk4IFN1Ym5vcm1hbA0KK2Rkcm1uNDQ1IHJlbWFpbmRlcm5lYXIgMTAwRS0zOTcgMzBFLTM5OCAgLT4gMS4wRS0zOTcgU3Vibm9ybWFsDQorDQorLS0gemVybyBzaWducw0KK2Rkcm1uNjUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgLT4gIDANCitkZHJtbjY1MSByZW1haW5kZXJuZWFyIC0xICAxIC0+IC0wDQorZGRybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMA0KK2Rkcm1uNjUzIHJlbWFpbmRlcm5lYXIgLTEgLTEgLT4gLTANCitkZHJtbjY1NCByZW1haW5kZXJuZWFyICAwICAxIC0+ICAwDQorZGRybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMA0KK2Rkcm1uNjU2IHJlbWFpbmRlcm5lYXIgIDAgLTEgLT4gIDANCitkZHJtbjY1NyByZW1haW5kZXJuZWFyIC0wIC0xIC0+IC0wDQorZGRybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDANCitkZHJtbjY1OSByZW1haW5kZXJuZWFyIC0wLjAwICAxICAtPiAtMC4wMA0KKw0KKy0tIFNwZWNpYWxzDQorZGRybW42ODAgcmVtYWluZGVybmVhciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNjgxIHJlbWFpbmRlcm5lYXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW42ODMgcmVtYWluZGVybmVhciAgSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNjg0IHJlbWFpbmRlcm5lYXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW42ODYgcmVtYWluZGVybmVhciAgSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNjg3IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KK2Rkcm1uNjg5IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjY5MSByZW1haW5kZXJuZWFyIC0xICAgICBJbmYgICAtPiAtMQ0KK2Rkcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwDQorZGRybW42OTMgcmVtYWluZGVybmVhciAtMCAgICAgSW5mICAgLT4gLTANCitkZHJtbjY5NCByZW1haW5kZXJuZWFyICAxICAgICBJbmYgICAtPiAgMQ0KK2Rkcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorZGRybW42OTYgcmVtYWluZGVybmVhciAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rkcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjcwMSByZW1haW5kZXJuZWFyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43MDIgcmVtYWluZGVybmVhciAtSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjcwNCByZW1haW5kZXJuZWFyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43MDUgcmVtYWluZGVybmVhciAtSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjcwNyByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43MDggcmVtYWluZGVybmVhciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwDQorZGRybW43MTAgcmVtYWluZGVybmVhciAtMSAgICAtSW5mICAgLT4gLTENCitkZHJtbjcxMSByZW1haW5kZXJuZWFyIC0wICAgIC1JbmYgICAtPiAtMA0KK2Rkcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwDQorZGRybW43MTMgcmVtYWluZGVybmVhciAgMSAgICAtSW5mICAgLT4gIDENCitkZHJtbjcxNCByZW1haW5kZXJuZWFyICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KK2Rkcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHJtbjcyMSByZW1haW5kZXJuZWFyICBOYU4gLUluZiAgICAtPiAgTmFODQorZGRybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2Rkcm1uNzIzIHJlbWFpbmRlcm5lYXIgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkZHJtbjcyNCByZW1haW5kZXJuZWFyICBOYU4gLTAgICAgICAtPiAgTmFODQorZGRybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTg0KK2Rkcm1uNzI2IHJlbWFpbmRlcm5lYXIgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkZHJtbjcyNyByZW1haW5kZXJuZWFyICBOYU4gIDEwMDAgICAtPiAgTmFODQorZGRybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2Rkcm1uNzI5IHJlbWFpbmRlcm5lYXIgIE5hTiAtTmFOICAgIC0+ICBOYU4NCitkZHJtbjczMCByZW1haW5kZXJuZWFyIC1JbmYgIE5hTiAgICAtPiAgTmFODQorZGRybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2Rkcm1uNzMyIHJlbWFpbmRlcm5lYXIgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkZHJtbjczMyByZW1haW5kZXJuZWFyIC0wICAgLU5hTiAgICAtPiAtTmFODQorZGRybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2Rkcm1uNzM1IHJlbWFpbmRlcm5lYXIgIDEgICAtTmFOICAgIC0+IC1OYU4NCitkZHJtbjczNiByZW1haW5kZXJuZWFyICAxMDAwIE5hTiAgICAtPiAgTmFODQorZGRybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK2Rkcm1uNzQxIHJlbWFpbmRlcm5lYXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc0MyByZW1haW5kZXJuZWFyIC1zTmFOIC0xICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzQ0IHJlbWFpbmRlcm5lYXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc0NiByZW1haW5kZXJuZWFyICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzQ3IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc1MCByZW1haW5kZXJuZWFyICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzUxIHJlbWFpbmRlcm5lYXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc1MyByZW1haW5kZXJuZWFyIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzU0IHJlbWFpbmRlcm5lYXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc1NiByZW1haW5kZXJuZWFyICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzU3IHJlbWFpbmRlcm5lYXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc1OSByZW1haW5kZXJuZWFyICBJbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2luZyBOYU5zDQorZGRybW43NjAgcmVtYWluZGVybmVhciAgTmFOMSAgIE5hTjcgICAtPiAgTmFOMQ0KK2Rkcm1uNzYxIHJlbWFpbmRlcm5lYXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkZHJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uDQorZGRybW43NjMgcmVtYWluZGVybmVhciBzTmFONCAgc05hTjEwICAtPiAgTmFONCBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm1uNzY0IHJlbWFpbmRlcm5lYXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExDQorZGRybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONg0KK2Rkcm1uNzY2IHJlbWFpbmRlcm5lYXIgIEluZiAgICBOYU4xMyAgLT4gIE5hTjEzDQorZGRybW43NjcgcmVtYWluZGVybmVhciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQNCitkZHJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQ0KK2Rkcm1uNzY5IHJlbWFpbmRlcm5lYXIgIE5hTjE2ICAgLTAgICAgLT4gIE5hTjE2DQorDQorLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQorZGRybW43NzAgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgIDEwICAgIC0+IC00DQorZGRybW43NzEgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAxICAgIC0+ICAwDQorZGRybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2Rkcm1uNzczICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCisNCistLSBsb25nIG9wZXJhbmQgY2hlY2tzDQorZGRybW44MDEgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwMCAxMDAgLT4gMA0KK2Rkcm1uODAyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwMCAgIC0+IDENCitkZHJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQorZGRybW44MDQgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAgICAgLT4gMQ0KK2Rkcm1uODA1IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDANCitkZHJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQorZGRybW44MDcgcmVtYWluZGVybmVhciAxMjM0NTY3ODkxICAxMCAgLT4gMQ0KK2Rkcm1uODA4IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkxICAgIC0+IDENCitkZHJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQorZGRybW44MTAgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KK2Rkcm1uODExIHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5NiAgMTAgIC0+IC00DQorZGRybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KKw0KK2Rkcm1uODIxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCitkZHJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQorZGRybW44MjMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KK2Rkcm1uODI0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCitkZHJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQorZGRybW44MjYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KK2Rkcm1uODI3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCitkZHJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQorZGRybW44MjkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KK2Rkcm1uODMwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkZHJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNA0KK2Rkcm1uODMyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCistLSBmcm9tIGRpdmlkZWludA0KK2Rkcm1uODQwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMA0KK2Rkcm1uODQxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC40ICAgMSAgLT4gIDAuNA0KK2Rkcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQ0KK2Rkcm1uODQzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gLTAuMQ0KK2Rkcm1uODQ0IHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC45OTkgMSAgLT4gLTAuMDAxDQorZGRybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMg0KK2Rkcm1uODUxIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAzICAgICAgNSAgLT4gLTINCitkZHJtbjg1MiByZW1haW5kZXJuZWFyICAxMDAwMDAzICAgICAgIDUgIC0+IC0yDQorZGRybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMg0KK2Rkcm1uODU0IHJlbWFpbmRlcm5lYXIgIDEwMDAzICAgICAgICAgNSAgLT4gLTINCitkZHJtbjg1NSByZW1haW5kZXJuZWFyICAxMDAzICAgICAgICAgIDUgIC0+IC0yDQorZGRybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMg0KK2Rkcm1uODU3IHJlbWFpbmRlcm5lYXIgIDEzICAgICAgICAgICAgNSAgLT4gLTINCitkZHJtbjg1OCByZW1haW5kZXJuZWFyICAxICAgICAgICAgICAgIDUgIC0+ICAxDQorDQorLS0gVmxhZGltaXIncyBjYXNlcyAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkZHJtbjg2MCByZW1haW5kZXJuZWFyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2Rkcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZGRybW44NjIgcmVtYWluZGVybmVhciAxMi4zZTIgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkZHJtbjg2MyByZW1haW5kZXJuZWFyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2Rkcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZGRybW44NzAgcmVtYWluZGVybmVhciAxMjNlMSAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg3MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44NzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAxMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg3NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44NzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAxMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg3NyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44NzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDEwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg4MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwDQorZGRybW44ODIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDEwMDAwIC0+IDEyMzANCitkZHJtbjg4MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMA0KK2Rkcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwDQorZGRybW44ODUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDEwIC0+ICAgIDANCitkZHJtbjg4NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMA0KKw0KK2Rkcm1uODkwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44OTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMjAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODkzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44OTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMjAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uODk2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW44OTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMjAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTAwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwDQorZGRybW45MDEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgMjAwMDAwIC0+IDEyMzANCitkZHJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMA0KK2Rkcm1uOTAzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAtNzcwDQorZGRybW45MDQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgMjAwIC0+ICAgMzANCitkZHJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMA0KK2Rkcm1uOTA2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwDQorDQorZGRybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjkxMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA1MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTEyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjkxNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA1MDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTE1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjkxNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA1MDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTE5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwDQorZGRybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzANCitkZHJtbjkyMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA1MDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTIyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwDQorZGRybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzANCitkZHJtbjkyNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA1MDAgLT4gIDIzMA0KK2Rkcm1uOTI1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgLTIwDQorZGRybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDANCisNCitkZHJtbjkzMCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW45MzIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDkwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjkzMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwDQorZGRybW45MzUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDkwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjkzNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwDQorZGRybW45MzkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDkwMDAwMDAwIC0+IDEyMzANCitkZHJtbjk0MCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMA0KK2Rkcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwDQorZGRybW45NDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDkwMDAwIC0+IDEyMzANCitkZHJtbjk0MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMA0KK2Rkcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwDQorZGRybW45NDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDkwIC0+ICAtMzANCitkZHJtbjk0NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAtMw0KKw0KK2Rkcm1uOTUwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkZHJtbjk2MSByZW1haW5kZXJuZWFyIDEyM2UxICAgMjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQorZGRybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rkcm1uOTYzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkZHJtbjk2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgNTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQorZGRybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rkcm1uOTY2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkZHJtbjk2NyByZW1haW5kZXJuZWFyIDEyM2UxICAgODk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQorZGRybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rkcm1uOTY5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzANCisNCitkZHJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5DQorDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQorZGRybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2Rkcm1uMTA1MiByZW1haW5kZXJuZWFyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkZHJtbjEwNTMgcmVtYWluZGVybmVhciAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZGRybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2Rkcm1uMTA1NSByZW1haW5kZXJuZWFyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3DQorZGRybW4xMDU2IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAtMWUrMzExIC0+ICAxRS0yNzcNCitkZHJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3Nw0KK2Rkcm1uMTA1OCByZW1haW5kZXJuZWFyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3DQorDQorLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QNCitkZHJtbjExMDAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgMS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTUNCitkZHJtbjExMDEgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDEuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NDQNCitkZHJtbjExMDIgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAxLjAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjMzMzMNCitkZHJtbjExMDMgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NSAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQNCitkZHJtbjExMDQgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC4wMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4zMDg2NDE5NzI1MzA4NjQNCitkZHJtbjExMTUgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA0Ljk5OTk5OTk5OTk5OTkgIC0+ICAgICAwLjY5MTM1NzgwMjQ2OTYNCitkZHJtbjExMTYgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDQuOTk5OTk5OTk5OTk5OTkgIC0+ICAgLTEuNTMwODY0MjE5NzUzMDgNCitkZHJtbjExMTcgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNC45OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS4yNDY5MTM1NzgwMjQ2OTENCitkZHJtbjExMTggcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgNS4wMDAwMDAwMDAwMDAwMDEgIC0+ICAgMC43NTMwODY0MjE5NzUzMDkNCitkZHJtbjExMTkgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgIDUuMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTEuNDY5MTM1NzgwMjQ2OTENCitkZHJtbjExMTAgcmVtYWluZGVyTmVhciAgMTIzNDU2Nzg5MDEyMzQ1NiAgICA1LjAwMDAwMDAwMDAwMDEgIC0+ICAgICAxLjMwODY0MjE5NzUzMTQNCisNCistLSBOdWxsIHRlc3RzDQorZGRybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkUm90YXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdAppbmRleCA4YjBmZTI2Li44N2VlYjFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRSb3RhdGUuZGVjVGVzdApAQCAtMSwyNjIgKzEsMjYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkUm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGEgZGVjRG91YmxlIGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRyb3QwMDEgcm90YXRlICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwCi1kZHJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDAKLWRkcm90MDAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCi1kZHJvdDAwNCByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAxNSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAKLWRkcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE2ICAtPiAgMQotZGRyb3QwMDYgcm90YXRlICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwCi1kZHJvdDAwNyByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDAKLWRkcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAgNjEyMzQ1Njc4OTAxMjM0NQotZGRyb3QwMDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+ICAyMzQ1Njc4OTAxMjM0NTYxCi1kZHJvdDAxMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDEyMzQ1Njc4OTAxMjM0NTYKLWRkcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOTM0NTY3ODkwMTIzNDU2OQotZGRyb3QwMTIgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICA5OTM0NTY3ODkwMTIzNDU2Ci0KLS0tIHJocyBtdXN0IGJlIGFuIGludGVnZXIKLWRkcm90MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDAxNiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90MDE4IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDAxOSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90MDIxIHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDAyMiByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgotZGRyb3QwMjUgcm90YXRlICAgICAgICAxICAgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90MDI2IHJvdGF0ZSAgICAgICAgMSAgICAtMTcgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3QwMjggcm90YXRlICAgICAgICAxICAgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZnVsbCBwYXR0ZXJuCi1kZHJvdDAzMCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRkcm90MDMxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMjM0NTY3ODkwMTIzNDU2MQotZGRyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAzNDU2Nzg5MDEyMzQ1NjEyCi1kZHJvdDAzMyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTMgIC0+IDQ1Njc4OTAxMjM0NTYxMjMKLWRkcm90MDM0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gNTY3ODkwMTIzNDU2MTIzNAotZGRyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1Ci1kZHJvdDAzNiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTAgIC0+IDc4OTAxMjM0NTYxMjM0NTYKLWRkcm90MDM3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gODkwMTIzNDU2MTIzNDU2NwotZGRyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4Ci1kZHJvdDAzOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNyAgIC0+ICAxMjM0NTYxMjM0NTY3ODkKLWRkcm90MDQwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2MTIzNDU2Nzg5MAotZGRyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAyMzQ1NjEyMzQ1Njc4OTAxCi1kZHJvdDA0MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNCAgIC0+IDM0NTYxMjM0NTY3ODkwMTIKLWRkcm90MDQzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gNDU2MTIzNDU2Nzg5MDEyMwotZGRyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiA1NjEyMzQ1Njc4OTAxMjM0Ci1kZHJvdDA0NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMSAgIC0+IDYxMjM0NTY3ODkwMTIzNDUKLWRkcm90MDQ2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotCi1kZHJvdDA0NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRkcm90MDQ4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwMTIzNDU2MQotZGRyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjEyCi1kZHJvdDA1MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMyAgIC0+IDQ1Njc4OTAxMjM0NTYxMjMKLWRkcm90MDUxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs0ICAgLT4gNTY3ODkwMTIzNDU2MTIzNAotZGRyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1Ci1kZHJvdDA1MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNiAgIC0+IDc4OTAxMjM0NTYxMjM0NTYKLWRkcm90MDU0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs3ICAgLT4gODkwMTIzNDU2MTIzNDU2NwotZGRyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4Ci1kZHJvdDA1NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArOSAgIC0+ICAxMjM0NTYxMjM0NTY3ODkKLWRkcm90MDU3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMCAgLT4gMTIzNDU2MTIzNDU2Nzg5MAotZGRyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjEyMzQ1Njc4OTAxCi1kZHJvdDA1OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTIgIC0+IDM0NTYxMjM0NTY3ODkwMTIKLWRkcm90MDYwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMyAgLT4gNDU2MTIzNDU2Nzg5MDEyMwotZGRyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjEyMzQ1Njc4OTAxMjM0Ci1kZHJvdDA2MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTUgIC0+IDYxMjM0NTY3ODkwMTIzNDUKLWRkcm90MDYzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotCi0tLSB6ZXJvcwotZGRyb3QwNzAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCi1kZHJvdDA3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTAKLWRkcm90MDcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAotZGRyb3QwNzMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCi1kZHJvdDA3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTAKLWRkcm90MDc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAotZGRyb3QwNzYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCi1kZHJvdDA3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTAKLWRkcm90MDc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAotZGRyb3QwNzkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCi1kZHJvdDA4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTAKLWRkcm90MDgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAotCi0tLSBObWF4LCBObWluLCBOdGlueQotZGRyb3QxNDEgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNDIgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNDQgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNDUgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAotZGRyb3QxNDYgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zODIKLWRkcm90MTQ3IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzgyCi1kZHJvdDE0OCByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4Ci1kZHJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQKLWRkcm90MTUyIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDFFLTM5OAotZGRyb3QxNTMgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMUUtMzk4Ci1kZHJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQKLWRkcm90MTU1IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxNTYgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4Ci1kZHJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiA5RS0zOTgKLWRkcm90MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxNjAgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRyb3QxNjEgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zOTcKLWRkcm90MTYyIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzk3Ci1kZHJvdDE2MyByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi0tLSAgbmVnYXRpdmVzCi1kZHJvdDE3MSByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNzIgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZHJvdDE3NCByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NAotZGRyb3QxNzUgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zNjgKLWRkcm90MTc2IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM4MgotZGRyb3QxNzcgcm90YXRlIC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzgyCi1kZHJvdDE3OCByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OAotZGRyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxODIgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTFFLTM5OAotZGRyb3QxODMgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTFFLTM5OAotZGRyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxODUgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxODYgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTlFLTM5OAotZGRyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTlFLTM5OAotZGRyb3QxODggcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRyb3QxOTAgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKLWRkcm90MTkxIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM5NwotZGRyb3QxOTIgcm90YXRlIC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzk3Ci1kZHJvdDE5MyByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCi1kZHJvdDIwMSByb3RhdGUgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKLWRkcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAotZGRyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDAKLWRkcm90MjA0IHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgIDE1ICAtPiAtMTAwMDAwMDAwMDAwMDAwMAotZGRyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0xCi1kZHJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKLWRkcm90MjA3IHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAotZGRyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC02MTIzNDU2Nzg5MDEyMzQ1Ci1kZHJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTIzNDU2Nzg5MDEyMzQ1NjEKLWRkcm90MjEwIHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMTIzNDU2Nzg5MDEyMzQ1NgotZGRyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05MzQ1Njc4OTAxMjM0NTY5Ci1kZHJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTk5MzQ1Njc4OTAxMjM0NTYKLQotCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAotZGRyb3Q3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKLWRkcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZHJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotZGRyb3Q3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRkcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZHJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQotZGRyb3Q3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkcm90ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5Ci1kZHJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTgotZGRyb3Q4MjIgcm90YXRlICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kZHJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRkcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTgotZGRyb3Q4MjUgcm90YXRlICBOYU4gIDAgICAgICAtPiAgTmFOCi1kZHJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRkcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTgotZGRyb3Q4Mjggcm90YXRlICBOYU4gIEluZiAgICAtPiAgTmFOCi1kZHJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRkcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTgotZGRyb3Q4MzEgcm90YXRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kZHJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRkcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTgotZGRyb3Q4MzQgcm90YXRlICAwICAgIE5hTiAgICAtPiAgTmFOCi1kZHJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRkcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTgotZGRyb3Q4Mzcgcm90YXRlICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRkcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQotZGRyb3Q4NjIgcm90YXRlICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgotZGRyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMwotZGRyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAotZGRyb3Q4NjUgcm90YXRlICBOYU41ICAgK05hTjYgICAtPiAgTmFONQotZGRyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONwotZGRyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAotZGRyb3Q4Njggcm90YXRlICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQotZGRyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKLWRkcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4NzIgcm90YXRlICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4NzUgcm90YXRlICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4Nzggcm90YXRlIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KLWRkcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgotZGRyb3Q4ODEgcm90YXRlICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgotZGRyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCi1kZHJvdDg4NCByb3RhdGUgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAotZGRyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkZFJvdGF0ZS5kZWNUZXN0IC0tIHJvdGF0ZSBhIGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkZHJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCitkZHJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDANCitkZHJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KK2Rkcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KK2Rkcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIDE2ICAtPiAgMQ0KK2Rkcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KK2Rkcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KK2Rkcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAgNjEyMzQ1Njc4OTAxMjM0NQ0KK2Rkcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMjM0NTY3ODkwMTIzNDU2MQ0KK2Rkcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2Rkcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOTM0NTY3ODkwMTIzNDU2OQ0KK2Rkcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgOTkzNDU2Nzg5MDEyMzQ1Ng0KKw0KKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCitkZHJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KK2Rkcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0xNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZnVsbCBwYXR0ZXJuDQorZGRyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZGRyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE1ICAtPiAyMzQ1Njc4OTAxMjM0NTYxDQorZGRyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAzNDU2Nzg5MDEyMzQ1NjEyDQorZGRyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiA0NTY3ODkwMTIzNDU2MTIzDQorZGRyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEyICAtPiA1Njc4OTAxMjM0NTYxMjM0DQorZGRyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1DQorZGRyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiA3ODkwMTIzNDU2MTIzNDU2DQorZGRyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTkgICAtPiA4OTAxMjM0NTYxMjM0NTY3DQorZGRyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4DQorZGRyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAgMTIzNDU2MTIzNDU2Nzg5DQorZGRyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTYgICAtPiAxMjM0NTYxMjM0NTY3ODkwDQorZGRyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAyMzQ1NjEyMzQ1Njc4OTAxDQorZGRyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAzNDU2MTIzNDU2Nzg5MDEyDQorZGRyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTMgICAtPiA0NTYxMjM0NTY3ODkwMTIzDQorZGRyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiA1NjEyMzQ1Njc4OTAxMjM0DQorZGRyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiA2MTIzNDU2Nzg5MDEyMzQ1DQorZGRyb3QwNDYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorDQorZGRyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZGRyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTYxDQorZGRyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjEyDQorZGRyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MTIzDQorZGRyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTYxMjM0DQorZGRyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjEyMzQ1DQorZGRyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MTIzNDU2DQorZGRyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTYxMjM0NTY3DQorZGRyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjEyMzQ1Njc4DQorZGRyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MTIzNDU2Nzg5DQorZGRyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEwICAtPiAxMjM0NTYxMjM0NTY3ODkwDQorZGRyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjEyMzQ1Njc4OTAxDQorZGRyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MTIzNDU2Nzg5MDEyDQorZGRyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEzICAtPiA0NTYxMjM0NTY3ODkwMTIzDQorZGRyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjEyMzQ1Njc4OTAxMjM0DQorZGRyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MTIzNDU2Nzg5MDEyMzQ1DQorZGRyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorDQorLS0gemVyb3MNCitkZHJvdDA3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTANCitkZHJvdDA3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCitkZHJvdDA3MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDANCitkZHJvdDA3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDANCitkZHJvdDA3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCitkZHJvdDA3NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTANCitkZHJvdDA3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTANCitkZHJvdDA3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCitkZHJvdDA3OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDANCitkZHJvdDA3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDANCitkZHJvdDA4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCitkZHJvdDA4MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTANCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Rkcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHJvdDE0MiByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2Rkcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHJvdDE0NSByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQorZGRyb3QxNDYgcm90YXRlICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zODINCitkZHJvdDE0NyByb3RhdGUgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4Mg0KK2Rkcm90MTQ4IHJvdGF0ZSAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zNjgNCitkZHJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgNCitkZHJvdDE1MyByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAxRS0zOTgNCitkZHJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE1NiByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiA5RS0zOTgNCitkZHJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiA5RS0zOTgNCitkZHJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE2MCByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRyb3QxNjEgcm90YXRlICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMTUgLT4gMS4wRS0zOTcNCitkZHJvdDE2MiByb3RhdGUgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5Nw0KK2Rkcm90MTYzIHJvdGF0ZSAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCistLSAgbmVnYXRpdmVzDQorZGRyb3QxNzEgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xNSAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NA0KK2Rkcm90MTczIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0DQorZGRyb3QxNzQgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHJvdDE3NSByb3RhdGUgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM2OA0KK2Rkcm90MTc2IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM4Mg0KK2Rkcm90MTc3IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM4Mg0KK2Rkcm90MTc4IHJvdGF0ZSAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQorZGRyb3QxODEgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NA0KK2Rkcm90MTgyIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IC0xRS0zOTgNCitkZHJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMUUtMzk4DQorZGRyb3QxODQgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTEuMDAwMDAwMDAwMDAwMDBFLTM4NA0KK2Rkcm90MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4DQorZGRyb3QxODcgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gLTlFLTM5OA0KK2Rkcm90MTg4IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHJvdDE5MCByb3RhdGUgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2Rkcm90MTkxIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0xLjBFLTM5Nw0KK2Rkcm90MTkyIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTM5Nw0KK2Rkcm90MTkzIHJvdGF0ZSAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorDQorLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KK2Rkcm90MjAxIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAwICAtPiAtMA0KK2Rkcm90MjAyIHJvdGF0ZSAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMA0KK2Rkcm90MjAzIHJvdGF0ZSAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwDQorZGRyb3QyMDQgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTUgIC0+IC0xMDAwMDAwMDAwMDAwMDAwDQorZGRyb3QyMDUgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0xDQorZGRyb3QyMDYgcm90YXRlICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0xMDAwMDAwMDAwMDAwMDAwDQorZGRyb3QyMDcgcm90YXRlICAgICAgICAgICAgICAgIC0wICAgLTIgIC0+IC0wDQorZGRyb3QyMDggcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC02MTIzNDU2Nzg5MDEyMzQ1DQorZGRyb3QyMDkgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0yMzQ1Njc4OTAxMjM0NTYxDQorZGRyb3QyMTAgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0xMjM0NTY3ODkwMTIzNDU2DQorZGRyb3QyMTEgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05MzQ1Njc4OTAxMjM0NTY5DQorZGRyb3QyMTIgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC05OTM0NTY3ODkwMTIzNDU2DQorDQorDQorLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwNCitkZHJvdDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KK2Rkcm90NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZGRyb3Q3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkZHJvdDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2Rkcm90Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZGRyb3Q3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkNCitkZHJvdDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRyb3Q4MDAgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDgwMSByb3RhdGUgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQorZGRyb3Q4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KK2Rkcm90ODAzIHJvdGF0ZSAgSW5mICAtMCAgICAgLT4gSW5maW5pdHkNCitkZHJvdDgwNCByb3RhdGUgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQorZGRyb3Q4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KK2Rkcm90ODA2IHJvdGF0ZSAgSW5mICAgOCAgICAgLT4gSW5maW5pdHkNCitkZHJvdDgwNyByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4MDkgcm90YXRlIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDgxMCByb3RhdGUgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4MTIgcm90YXRlICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDgxMyByb3RhdGUgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4MTUgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHJvdDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkZHJvdDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkZHJvdDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkZHJvdDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkZHJvdDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkZHJvdDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkZHJvdDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkZHJvdDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkZHJvdDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkZHJvdDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkZHJvdDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NDIgcm90YXRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NDUgcm90YXRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NDggcm90YXRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NTEgcm90YXRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NTQgcm90YXRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGRyb3Q4NTcgcm90YXRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2Rkcm90ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCitkZHJvdDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZGRyb3Q4NjMgcm90YXRlICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KK2Rkcm90ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCitkZHJvdDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZGRyb3Q4NjYgcm90YXRlIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KK2Rkcm90ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCitkZHJvdDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZGRyb3Q4Njkgcm90YXRlICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCitkZHJvdDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3MyByb3RhdGUgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3NiByb3RhdGUgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg3OSByb3RhdGUgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZHJvdDg4MiByb3RhdGUgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KK2Rkcm90ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkcm90ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZGRyb3Q4ODUgcm90YXRlICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNhbWVRdWFudHVtLmRlY1Rlc3QKaW5kZXggNDY1YjM2YS4uNTRhNzYzYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2FtZVF1YW50dW0uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTYW1lUXVhbnR1bS5kZWNUZXN0CkBAIC0xLDM4OSArMSwzODkgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRTYW1lUXVhbnR1bS5kZWNUZXN0IC0tIGNoZWNrIGRlY0RvdWJsZSBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZGRzYW1xMDAxIHNhbWVxdWFudHVtICAwICAgICAgMCAgICAgIC0+ICAxCi1kZHNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDEKLWRkc2FtcTAwMyBzYW1lcXVhbnR1bSAgMSAgICAgIDAgICAgICAtPiAgMQotZGRzYW1xMDA0IHNhbWVxdWFudHVtICAxICAgICAgMSAgICAgIC0+ICAxCi0KLWRkc2FtcTAxMSBzYW1lcXVhbnR1bSAgMTAgICAgIDFFKzEgICAtPiAwCi1kZHNhbXEwMTIgc2FtZXF1YW50dW0gIDEwRSsxICAxMEUrMSAgLT4gMQotZGRzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDAKLWRkc2FtcTAxNCBzYW1lcXVhbnR1bSAgMTAwICAgIDFFKzIgICAtPiAwCi1kZHNhbXEwMTUgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0yICAgLT4gMAotZGRzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDEKLWRkc2FtcTAxNyBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTAgICAtPiAwCi1kZHNhbXEwMTggc2FtZXF1YW50dW0gIDk5OSAgICA5OTkgICAgLT4gMQotZGRzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDEKLWRkc2FtcTAyMCBzYW1lcXVhbnR1bSAgMTExRS0xIDIyLjIgICAtPiAxCi1kZHNhbXEwMjEgc2FtZXF1YW50dW0gIDExMUUtMSAxMjM0LjIgLT4gMQotCi0tLSB6ZXJvcwotZGRzYW1xMDMwIHNhbWVxdWFudHVtICAwLjAgICAgMS4xICAgIC0+IDEKLWRkc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwCi1kZHNhbXEwMzIgc2FtZXF1YW50dW0gIDAuMCAgICAwICAgICAgLT4gMAotZGRzYW1xMDMzIHNhbWVxdWFudHVtICAwLjAgICAgMC4wICAgIC0+IDEKLWRkc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwCi1kZHNhbXEwMzUgc2FtZXF1YW50dW0gIDBFKzEgICAwRSswICAgLT4gMAotZGRzYW1xMDM2IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMSAgIC0+IDEKLWRkc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwCi1kZHNhbXEwMzggc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNiAgLT4gMAotZGRzYW1xMDM5IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTcgIC0+IDEKLWRkc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwCi1kZHNhbXEwNDEgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE1IC0+IDAKLWRkc2FtcTA0MiBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTYgLT4gMQotZGRzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwCi1kZHNhbXEwNDQgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE2IC0+IDEKLWRkc2FtcTA0NSBzYW1lcXVhbnR1bSAgMEUtMTcgLTAuMEUtMTcgLT4gMAotZGRzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxCi1kZHNhbXEwNDcgc2FtZXF1YW50dW0gLTBFLTE3ICAwLjBFLTE3IC0+IDAKLWRkc2FtcTA0OCBzYW1lcXVhbnR1bSAtMEUtMTcgLTAuMEUtMTYgLT4gMQotZGRzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kZHNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQotZGRzYW1xMDUyIHNhbWVxdWFudHVtICAxRS0zODMgICAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAtPiAxCi1kZHNhbXEwNTMgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQotZGRzYW1xMDU0IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxCi1kZHNhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQotZGRzYW1xMDU2IHNhbWVxdWFudHVtICAxRS0zODMgICAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAtPiAxCi1kZHNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQotZGRzYW1xMDU4IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxCi0KLWRkc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQotZGRzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IDEKLWRkc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQotZGRzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKLWRkc2FtcTA2NSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQotZGRzYW1xMDY2IHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0+IDEKLWRkc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQotZGRzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDEKLQotZGRzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCi1kZHNhbXEwNzIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDQwMDAwMDAwMDAwRS0zODMgLT4gMQotZGRzYW1xMDczIHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCi1kZHNhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTQ5OTk5RSszODQgLT4gMQotZGRzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxCi1kZHNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDA0MDAwMDAwMDAwMDAwRS0zODMgLT4gMQotZGRzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxCi1kZHNhbXEwNzggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5RSszODQgLT4gMQotCi1kZHNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDAKLWRkc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwNDAwMDAwMDAwMDBFLTMzNiAtPiAwCi1kZHNhbXEwODMgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDAKLWRkc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk0OTk5OTk5OTk5OTlFKzMzNiAtPiAwCi1kZHNhbXEwODUgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDAKLWRkc2FtcTA4NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTMzNiAtPiAwCi1kZHNhbXEwODcgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDAKLWRkc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45NDk5OTk5OTk5OTk5OTlFKzMzNiAtPiAwCi0KLS0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zCi1kZHNhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCi1kZHNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCi1kZHNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwCi1kZHNhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCi1kZHNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCi1kZHNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwCi1kZHNhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCi1kZHNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCi1kZHNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwCi1kZHNhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCi1kZHNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCi1kZHNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwCi1kZHNhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCi1kZHNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCi1kZHNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwCi1kZHNhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCi0KLWRkc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKLWRkc2FtcTAyMTEgc2FtZXF1YW50dW0gICBJbmYgICAgIEluZiAgIC0+IDEKLWRkc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKLWRkc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKLWRkc2FtcTAyMTQgc2FtZXF1YW50dW0gICBJbmYgICAgLTcgICAgIC0+IDAKLWRkc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKLWRkc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKLWRkc2FtcTAyMTcgc2FtZXF1YW50dW0gICBJbmYgICAgLTAgICAgIC0+IDAKLWRkc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKLWRkc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKLWRkc2FtcTAyMjAgc2FtZXF1YW50dW0gICBJbmYgICAgIDAgICAgIC0+IDAKLWRkc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKLWRkc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKLWRkc2FtcTAyMjMgc2FtZXF1YW50dW0gICBJbmYgICAgIDcgICAgIC0+IDAKLWRkc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKLWRkc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKLQotZGRzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMAotZGRzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAotZGRzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQotZGRzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMAotZGRzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAotZGRzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAotZGRzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMAotZGRzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAotZGRzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAotZGRzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMAotZGRzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAotZGRzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAotZGRzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMAotZGRzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAotZGRzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAotZGRzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQotCi1kZHNhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAotZGRzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKLWRkc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwCi1kZHNhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQotZGRzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKLWRkc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwCi1kZHNhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAotZGRzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKLWRkc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxCi1kZHNhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAotZGRzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKLWRkc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxCi1kZHNhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAotZGRzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKLWRkc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxCi1kZHNhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAotCi1kZHNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCi1kZHNhbXEwNTExIHNhbWVxdWFudHVtICAtNyAgICAgICBJbmYgICAtPiAwCi1kZHNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCi1kZHNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCi1kZHNhbXEwNTE0IHNhbWVxdWFudHVtICAtNyAgICAgIC03ICAgICAtPiAxCi1kZHNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCi1kZHNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCi1kZHNhbXEwNTE3IHNhbWVxdWFudHVtICAtNyAgICAgIC0wICAgICAtPiAxCi1kZHNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCi1kZHNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCi1kZHNhbXEwNTIwIHNhbWVxdWFudHVtICAtNyAgICAgICAwICAgICAtPiAxCi1kZHNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCi1kZHNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCi1kZHNhbXEwNTIzIHNhbWVxdWFudHVtICAtNyAgICAgICA3ICAgICAtPiAxCi1kZHNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCi1kZHNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCi0KLWRkc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwCi1kZHNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAotZGRzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKLWRkc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwCi1kZHNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAotZGRzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKLWRkc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxCi1kZHNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAotZGRzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKLWRkc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxCi1kZHNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAotZGRzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKLWRkc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxCi1kZHNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAotZGRzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKLWRkc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwCi0KLWRkc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCi1kZHNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAotZGRzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDAKLWRkc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCi1kZHNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAotZGRzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDEKLWRkc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCi1kZHNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAotZGRzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDAKLWRkc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCi1kZHNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAotZGRzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDAKLWRkc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCi1kZHNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAotZGRzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDAKLWRkc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCi0KLWRkc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKLWRkc2FtcTA4MTEgc2FtZXF1YW50dW0gIC0wICAgICAgIEluZiAgIC0+IDAKLWRkc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKLWRkc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKLWRkc2FtcTA4MTQgc2FtZXF1YW50dW0gIC0wICAgICAgLTcgICAgIC0+IDEKLWRkc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKLWRkc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKLWRkc2FtcTA4MTcgc2FtZXF1YW50dW0gIC0wICAgICAgLTAgICAgIC0+IDEKLWRkc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKLWRkc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKLWRkc2FtcTA4MjAgc2FtZXF1YW50dW0gIC0wICAgICAgIDAgICAgIC0+IDEKLWRkc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKLWRkc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKLWRkc2FtcTA4MjMgc2FtZXF1YW50dW0gIC0wICAgICAgIDcgICAgIC0+IDEKLWRkc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKLWRkc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKLQotZGRzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDAKLWRkc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCi1kZHNhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAotZGRzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDEKLWRkc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCi1kZHNhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAotZGRzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDAKLWRkc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCi1kZHNhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQotZGRzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDAKLWRkc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCi1kZHNhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQotZGRzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDAKLWRkc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCi1kZHNhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQotZGRzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDAKLQotZGRzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAotZGRzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAotZGRzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMAotZGRzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAotZGRzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAotZGRzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQotZGRzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQotZGRzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAotZGRzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMAotZGRzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQotZGRzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAotZGRzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMAotZGRzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQotZGRzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAotZGRzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMAotZGRzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAotCi1kZHNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCi1kZHNhbXExMjExIHNhbWVxdWFudHVtICAwICAgICAgICBJbmYgICAtPiAwCi1kZHNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCi1kZHNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCi1kZHNhbXExMjE0IHNhbWVxdWFudHVtICAwICAgICAgIC03ICAgICAtPiAxCi1kZHNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCi1kZHNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCi1kZHNhbXExMjE3IHNhbWVxdWFudHVtICAwICAgICAgIC0wICAgICAtPiAxCi1kZHNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCi1kZHNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCi1kZHNhbXExMjIwIHNhbWVxdWFudHVtICAwICAgICAgICAwICAgICAtPiAxCi1kZHNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCi1kZHNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCi1kZHNhbXExMjIzIHNhbWVxdWFudHVtICAwICAgICAgICA3ICAgICAtPiAxCi1kZHNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCi1kZHNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCi0KLWRkc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDAKLWRkc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKLWRkc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKLWRkc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDEKLWRkc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKLWRkc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKLWRkc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDAKLWRkc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKLWRkc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKLWRkc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDAKLWRkc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKLWRkc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKLWRkc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDAKLWRkc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKLWRkc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKLWRkc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDAKLQotZGRzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAotZGRzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAotZGRzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMAotZGRzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAotZGRzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAotZGRzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQotZGRzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQotZGRzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAotZGRzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMAotZGRzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQotZGRzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAotZGRzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMAotZGRzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQotZGRzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAotZGRzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMAotZGRzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAotCi1kZHNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKLWRkc2FtcTE1MTEgc2FtZXF1YW50dW0gIDcgICAgICAgSW5mICAgLT4gMAotZGRzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCi1kZHNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKLWRkc2FtcTE1MTQgc2FtZXF1YW50dW0gIDcgICAgICAtNyAgICAgLT4gMQotZGRzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCi1kZHNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKLWRkc2FtcTE1MTcgc2FtZXF1YW50dW0gIDcgICAgICAtMCAgICAgLT4gMQotZGRzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCi1kZHNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKLWRkc2FtcTE1MjAgc2FtZXF1YW50dW0gIDcgICAgICAgMCAgICAgLT4gMQotZGRzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCi1kZHNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKLWRkc2FtcTE1MjMgc2FtZXF1YW50dW0gIDcgICAgICAgNyAgICAgLT4gMQotZGRzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCi1kZHNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKLQotZGRzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMAotZGRzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAotZGRzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAotZGRzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQotZGRzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAotZGRzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAotZGRzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMAotZGRzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAotZGRzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQotZGRzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMAotZGRzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAotZGRzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQotZGRzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMAotZGRzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAotZGRzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQotZGRzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMAotCi1kZHNhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCi1kZHNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCi1kZHNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxCi1kZHNhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCi1kZHNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCi1kZHNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwCi1kZHNhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCi1kZHNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCi1kZHNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwCi1kZHNhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCi1kZHNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCi1kZHNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwCi1kZHNhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCi1kZHNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCi1kZHNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwCi1kZHNhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCi0tLSBub2lzeSBOYU5zCi1kZHNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCi1kZHNhbXExNzMxIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFONCAtPiAxCi1kZHNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCi1kZHNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCi1kZHNhbXExNzM0IHNhbWVxdWFudHVtICBzTmFOMyAgICAgMyAgICAtPiAwCi1kZHNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCi1kZHNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCi1kZHNhbXExNzM3IHNhbWVxdWFudHVtICAgICAgMyAgICAgTmFOMyAtPiAwCi1kZHNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCi1kZHNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNEb3VibGUgcXVhbnR1bXMgbWF0Y2ggICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY0RvdWJsZXMuDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitkZHNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDENCitkZHNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDENCitkZHNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDENCitkZHNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDENCisNCitkZHNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMA0KK2Rkc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxDQorZGRzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDANCitkZHNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMA0KK2Rkc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwDQorZGRzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDENCitkZHNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMA0KK2Rkc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxDQorZGRzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDENCitkZHNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQ0KK2Rkc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxDQorDQorLS0gemVyb3MNCitkZHNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQ0KK2Rkc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwDQorZGRzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDANCitkZHNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQ0KK2Rkc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwDQorZGRzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDANCitkZHNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQ0KK2Rkc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwDQorZGRzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDANCitkZHNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQ0KK2Rkc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwDQorZGRzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwDQorZGRzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxDQorZGRzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwDQorZGRzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxDQorZGRzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwDQorZGRzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxDQorZGRzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwDQorZGRzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxDQorZGRzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkZHNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgLT4gMQ0KK2Rkc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtMzgzICAgICAgICAgICAgIDFFLTM4MyAgICAgICAgICAgLT4gMQ0KK2Rkc2FtcTA1MyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtPiAxDQorZGRzYW1xMDU0IHNhbWVxdWFudHVtICAxRS0zOTggICAgICAgICAgICAgMUUtMzk4ICAgICAgICAgICAtPiAxDQorZGRzYW1xMDU1IHNhbWVxdWFudHVtICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0+IDENCitkZHNhbXEwNTYgc2FtZXF1YW50dW0gIDFFLTM4MyAgICAgICAgICAgICAxRS0zODMgICAgICAgICAgIC0+IDENCitkZHNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLT4gMQ0KK2Rkc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtMzk4ICAgICAgICAgICAgIDFFLTM5OCAgICAgICAgICAgLT4gMQ0KKw0KK2Rkc2FtcTA2MSBzYW1lcXVhbnR1bSAgLTFFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQ0KK2Rkc2FtcTA2MiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAtPiAxDQorZGRzYW1xMDYzIHNhbWVxdWFudHVtICAtMUUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxDQorZGRzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCitkZHNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS0zOTggICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDENCitkZHNhbXEwNjYgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLT4gMQ0KK2Rkc2FtcTA2NyBzYW1lcXVhbnR1bSAgLTFFLTM4MyAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMQ0KK2Rkc2FtcTA2OCBzYW1lcXVhbnR1bSAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAxDQorDQorZGRzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtMzk4ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAxDQorZGRzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwMDA0MDAwMDAwMDAwMEUtMzgzIC0+IDENCitkZHNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS0zODMgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDENCitkZHNhbXEwNzQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTk5OTk5OTk5OTQ5OTk5RSszODQgLT4gMQ0KK2Rkc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTM5OCAgICAgICAgICAgIC0xRS0zOTggICAgICAgICAgLT4gMQ0KK2Rkc2FtcTA3NiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAtMS4wMDQwMDAwMDAwMDAwMDBFLTM4MyAtPiAxDQorZGRzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtMzgzICAgICAgICAgICAgLTFFLTM4MyAgICAgICAgICAtPiAxDQorZGRzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIC05Ljk0OTk5OTk5OTk5OTk5OUUrMzg0IC0+IDENCisNCitkZHNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0zOTcgICAgICAgICAgICAtMUUtMzk4ICAgICAgICAgIC0+IDANCitkZHNhbXEwODIgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgLTEuMDAwMDQwMDAwMDAwMDAwRS0zMzYgLT4gMA0KK2Rkc2FtcTA4MyBzYW1lcXVhbnR1bSAgLTRFLTM0NiAgICAgICAgICAgIC0xRS0zODMgICAgICAgICAgLT4gMA0KK2Rkc2FtcTA4NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5RSszODQgICAtOS45OTk0OTk5OTk5OTk5OTlFKzMzNiAtPiAwDQorZGRzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMzk3ICAgICAgICAgICAgLTFFLTM5OCAgICAgICAgICAtPiAwDQorZGRzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgIC0xLjAwNDAwMDAwMDAwMDAwMEUtMzM2IC0+IDANCitkZHNhbXEwODcgc2FtZXF1YW50dW0gIC00RS0zNDYgICAgICAgICAgICAtMUUtMzgzICAgICAgICAgIC0+IDANCitkZHNhbXEwODggc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgLTkuOTQ5OTk5OTk5OTk5OTk5RSszMzYgLT4gMA0KKw0KKy0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zDQorZGRzYW1xMDExMCBzYW1lcXVhbnR1bSAgLUluZiAgICAtSW5mICAgLT4gMQ0KK2Rkc2FtcTAxMTEgc2FtZXF1YW50dW0gIC1JbmYgICAgIEluZiAgIC0+IDENCitkZHNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwDQorZGRzYW1xMDExMyBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UrMyAgLT4gMA0KK2Rkc2FtcTAxMTQgc2FtZXF1YW50dW0gIC1JbmYgICAgLTcgICAgIC0+IDANCitkZHNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwDQorZGRzYW1xMDExNiBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUtMyAgLT4gMA0KK2Rkc2FtcTAxMTcgc2FtZXF1YW50dW0gIC1JbmYgICAgLTAgICAgIC0+IDANCitkZHNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwDQorZGRzYW1xMDExOSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUtMyAgLT4gMA0KK2Rkc2FtcTAxMjAgc2FtZXF1YW50dW0gIC1JbmYgICAgIDAgICAgIC0+IDANCitkZHNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwDQorZGRzYW1xMDEyMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UtMyAgLT4gMA0KK2Rkc2FtcTAxMjMgc2FtZXF1YW50dW0gIC1JbmYgICAgIDcgICAgIC0+IDANCitkZHNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwDQorZGRzYW1xMDEyNSBzYW1lcXVhbnR1bSAgLUluZiAgICAgc05hTiAgLT4gMA0KKw0KK2Rkc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDENCitkZHNhbXEwMjExIHNhbWVxdWFudHVtICAgSW5mICAgICBJbmYgICAtPiAxDQorZGRzYW1xMDIxMiBzYW1lcXVhbnR1bSAgIEluZiAgICAgTmFOICAgLT4gMA0KK2Rkc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDANCitkZHNhbXEwMjE0IHNhbWVxdWFudHVtICAgSW5mICAgIC03ICAgICAtPiAwDQorZGRzYW1xMDIxNSBzYW1lcXVhbnR1bSAgIEluZiAgICAtN0UtMyAgLT4gMA0KK2Rkc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDANCitkZHNhbXEwMjE3IHNhbWVxdWFudHVtICAgSW5mICAgIC0wICAgICAtPiAwDQorZGRzYW1xMDIxOCBzYW1lcXVhbnR1bSAgIEluZiAgICAtMEUrMyAgLT4gMA0KK2Rkc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDANCitkZHNhbXEwMjIwIHNhbWVxdWFudHVtICAgSW5mICAgICAwICAgICAtPiAwDQorZGRzYW1xMDIyMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgMEUrMyAgLT4gMA0KK2Rkc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDANCitkZHNhbXEwMjIzIHNhbWVxdWFudHVtICAgSW5mICAgICA3ICAgICAtPiAwDQorZGRzYW1xMDIyNCBzYW1lcXVhbnR1bSAgIEluZiAgICAgN0UrMyAgLT4gMA0KK2Rkc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXEwMzEwIHNhbWVxdWFudHVtICAgTmFOICAgIC1JbmYgICAtPiAwDQorZGRzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTAzMTIgc2FtZXF1YW50dW0gICBOYU4gICAgIE5hTiAgIC0+IDENCitkZHNhbXEwMzEzIHNhbWVxdWFudHVtICAgTmFOICAgIC03RSszICAtPiAwDQorZGRzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMA0KK2Rkc2FtcTAzMTUgc2FtZXF1YW50dW0gICBOYU4gICAgLTdFLTMgIC0+IDANCitkZHNhbXEwMzE2IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRS0zICAtPiAwDQorZGRzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMA0KK2Rkc2FtcTAzMTggc2FtZXF1YW50dW0gICBOYU4gICAgLTBFKzMgIC0+IDANCitkZHNhbXEwMzE5IHNhbWVxdWFudHVtICAgTmFOICAgICAwRS0zICAtPiAwDQorZGRzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMA0KK2Rkc2FtcTAzMjEgc2FtZXF1YW50dW0gICBOYU4gICAgIDBFKzMgIC0+IDANCitkZHNhbXEwMzIyIHNhbWVxdWFudHVtICAgTmFOICAgICA3RS0zICAtPiAwDQorZGRzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMA0KK2Rkc2FtcTAzMjQgc2FtZXF1YW50dW0gICBOYU4gICAgIDdFKzMgIC0+IDANCitkZHNhbXEwMzI1IHNhbWVxdWFudHVtICAgTmFOICAgICBzTmFOICAtPiAxDQorDQorZGRzYW1xMDQxMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLUluZiAgIC0+IDANCitkZHNhbXEwNDExIHNhbWVxdWFudHVtICAtN0UrMyAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwDQorZGRzYW1xMDQxMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTdFKzMgIC0+IDENCitkZHNhbXEwNDE0IHNhbWVxdWFudHVtICAtN0UrMyAgICAtNyAgICAgLT4gMA0KK2Rkc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwDQorZGRzYW1xMDQxNiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTBFLTMgIC0+IDANCitkZHNhbXEwNDE3IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMCAgICAgLT4gMA0KK2Rkc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxDQorZGRzYW1xMDQxOSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDBFLTMgIC0+IDANCitkZHNhbXEwNDIwIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMCAgICAgLT4gMA0KK2Rkc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxDQorZGRzYW1xMDQyMiBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDdFLTMgIC0+IDANCitkZHNhbXEwNDIzIHNhbWVxdWFudHVtICAtN0UrMyAgICAgNyAgICAgLT4gMA0KK2Rkc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxDQorZGRzYW1xMDQyNSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwDQorZGRzYW1xMDUxMSBzYW1lcXVhbnR1bSAgLTcgICAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTA1MTIgc2FtZXF1YW50dW0gIC03ICAgICAgIE5hTiAgIC0+IDANCitkZHNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwDQorZGRzYW1xMDUxNCBzYW1lcXVhbnR1bSAgLTcgICAgICAtNyAgICAgLT4gMQ0KK2Rkc2FtcTA1MTUgc2FtZXF1YW50dW0gIC03ICAgICAgLTdFLTMgIC0+IDANCitkZHNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwDQorZGRzYW1xMDUxNyBzYW1lcXVhbnR1bSAgLTcgICAgICAtMCAgICAgLT4gMQ0KK2Rkc2FtcTA1MTggc2FtZXF1YW50dW0gIC03ICAgICAgLTBFKzMgIC0+IDANCitkZHNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwDQorZGRzYW1xMDUyMCBzYW1lcXVhbnR1bSAgLTcgICAgICAgMCAgICAgLT4gMQ0KK2Rkc2FtcTA1MjEgc2FtZXF1YW50dW0gIC03ICAgICAgIDBFKzMgIC0+IDANCitkZHNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwDQorZGRzYW1xMDUyMyBzYW1lcXVhbnR1bSAgLTcgICAgICAgNyAgICAgLT4gMQ0KK2Rkc2FtcTA1MjQgc2FtZXF1YW50dW0gIC03ICAgICAgIDdFKzMgIC0+IDANCitkZHNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwDQorDQorZGRzYW1xMDYxMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLUluZiAgIC0+IDANCitkZHNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTA2MTIgc2FtZXF1YW50dW0gIC03RS0zICAgICBOYU4gICAtPiAwDQorZGRzYW1xMDYxMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFKzMgIC0+IDANCitkZHNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMA0KK2Rkc2FtcTA2MTUgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RS0zICAtPiAxDQorZGRzYW1xMDYxNiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFLTMgIC0+IDENCitkZHNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMA0KK2Rkc2FtcTA2MTggc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRSszICAtPiAwDQorZGRzYW1xMDYxOSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFLTMgIC0+IDENCitkZHNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMA0KK2Rkc2FtcTA2MjEgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRSszICAtPiAwDQorZGRzYW1xMDYyMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFLTMgIC0+IDENCitkZHNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMA0KK2Rkc2FtcTA2MjQgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RSszICAtPiAwDQorZGRzYW1xMDYyNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXEwNzEwIHNhbWVxdWFudHVtICAtMEUtMyAgICAtSW5mICAgLT4gMA0KK2Rkc2FtcTA3MTEgc2FtZXF1YW50dW0gIC0wRS0zICAgICBJbmYgICAtPiAwDQorZGRzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDANCitkZHNhbXEwNzEzIHNhbWVxdWFudHVtICAtMEUtMyAgICAtN0UrMyAgLT4gMA0KK2Rkc2FtcTA3MTQgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03ICAgICAtPiAwDQorZGRzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDENCitkZHNhbXEwNzE2IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMEUtMyAgLT4gMQ0KK2Rkc2FtcTA3MTcgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wICAgICAtPiAwDQorZGRzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDANCitkZHNhbXEwNzE5IHNhbWVxdWFudHVtICAtMEUtMyAgICAgMEUtMyAgLT4gMQ0KK2Rkc2FtcTA3MjAgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwICAgICAtPiAwDQorZGRzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDANCitkZHNhbXEwNzIyIHNhbWVxdWFudHVtICAtMEUtMyAgICAgN0UtMyAgLT4gMQ0KK2Rkc2FtcTA3MjMgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3ICAgICAtPiAwDQorZGRzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDANCitkZHNhbXEwNzI1IHNhbWVxdWFudHVtICAtMEUtMyAgICAgc05hTiAgLT4gMA0KKw0KK2Rkc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDANCitkZHNhbXEwODExIHNhbWVxdWFudHVtICAtMCAgICAgICBJbmYgICAtPiAwDQorZGRzYW1xMDgxMiBzYW1lcXVhbnR1bSAgLTAgICAgICAgTmFOICAgLT4gMA0KK2Rkc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDANCitkZHNhbXEwODE0IHNhbWVxdWFudHVtICAtMCAgICAgIC03ICAgICAtPiAxDQorZGRzYW1xMDgxNSBzYW1lcXVhbnR1bSAgLTAgICAgICAtN0UtMyAgLT4gMA0KK2Rkc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDANCitkZHNhbXEwODE3IHNhbWVxdWFudHVtICAtMCAgICAgIC0wICAgICAtPiAxDQorZGRzYW1xMDgxOCBzYW1lcXVhbnR1bSAgLTAgICAgICAtMEUrMyAgLT4gMA0KK2Rkc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDANCitkZHNhbXEwODIwIHNhbWVxdWFudHVtICAtMCAgICAgICAwICAgICAtPiAxDQorZGRzYW1xMDgyMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgMEUrMyAgLT4gMA0KK2Rkc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDANCitkZHNhbXEwODIzIHNhbWVxdWFudHVtICAtMCAgICAgICA3ICAgICAtPiAxDQorZGRzYW1xMDgyNCBzYW1lcXVhbnR1bSAgLTAgICAgICAgN0UrMyAgLT4gMA0KK2Rkc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXEwOTEwIHNhbWVxdWFudHVtICAtMEUrMyAgICAtSW5mICAgLT4gMA0KK2Rkc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwDQorZGRzYW1xMDkxMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIE5hTiAgIC0+IDANCitkZHNhbXEwOTEzIHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UrMyAgLT4gMQ0KK2Rkc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwDQorZGRzYW1xMDkxNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFLTMgIC0+IDANCitkZHNhbXEwOTE2IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUtMyAgLT4gMA0KK2Rkc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwDQorZGRzYW1xMDkxOCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFKzMgIC0+IDENCitkZHNhbXEwOTE5IHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUtMyAgLT4gMA0KK2Rkc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwDQorZGRzYW1xMDkyMSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFKzMgIC0+IDENCitkZHNhbXEwOTIyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UtMyAgLT4gMA0KK2Rkc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwDQorZGRzYW1xMDkyNCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFKzMgIC0+IDENCitkZHNhbXEwOTI1IHNhbWVxdWFudHVtICAtMEUrMyAgICAgc05hTiAgLT4gMA0KKw0KK2Rkc2FtcTExMTAgc2FtZXF1YW50dW0gIDBFLTMgICAgLUluZiAgIC0+IDANCitkZHNhbXExMTExIHNhbWVxdWFudHVtICAwRS0zICAgICBJbmYgICAtPiAwDQorZGRzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMA0KK2Rkc2FtcTExMTMgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFKzMgIC0+IDANCitkZHNhbXExMTE0IHNhbWVxdWFudHVtICAwRS0zICAgIC03ICAgICAtPiAwDQorZGRzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQ0KK2Rkc2FtcTExMTYgc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFLTMgIC0+IDENCitkZHNhbXExMTE3IHNhbWVxdWFudHVtICAwRS0zICAgIC0wICAgICAtPiAwDQorZGRzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMA0KK2Rkc2FtcTExMTkgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFLTMgIC0+IDENCitkZHNhbXExMTIwIHNhbWVxdWFudHVtICAwRS0zICAgICAwICAgICAtPiAwDQorZGRzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMA0KK2Rkc2FtcTExMjIgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFLTMgIC0+IDENCitkZHNhbXExMTIzIHNhbWVxdWFudHVtICAwRS0zICAgICA3ICAgICAtPiAwDQorZGRzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMA0KK2Rkc2FtcTExMjUgc2FtZXF1YW50dW0gIDBFLTMgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwDQorZGRzYW1xMTIxMSBzYW1lcXVhbnR1bSAgMCAgICAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTEyMTIgc2FtZXF1YW50dW0gIDAgICAgICAgIE5hTiAgIC0+IDANCitkZHNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwDQorZGRzYW1xMTIxNCBzYW1lcXVhbnR1bSAgMCAgICAgICAtNyAgICAgLT4gMQ0KK2Rkc2FtcTEyMTUgc2FtZXF1YW50dW0gIDAgICAgICAgLTdFLTMgIC0+IDANCitkZHNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwDQorZGRzYW1xMTIxNyBzYW1lcXVhbnR1bSAgMCAgICAgICAtMCAgICAgLT4gMQ0KK2Rkc2FtcTEyMTggc2FtZXF1YW50dW0gIDAgICAgICAgLTBFKzMgIC0+IDANCitkZHNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwDQorZGRzYW1xMTIyMCBzYW1lcXVhbnR1bSAgMCAgICAgICAgMCAgICAgLT4gMQ0KK2Rkc2FtcTEyMjEgc2FtZXF1YW50dW0gIDAgICAgICAgIDBFKzMgIC0+IDANCitkZHNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwDQorZGRzYW1xMTIyMyBzYW1lcXVhbnR1bSAgMCAgICAgICAgNyAgICAgLT4gMQ0KK2Rkc2FtcTEyMjQgc2FtZXF1YW50dW0gIDAgICAgICAgIDdFKzMgIC0+IDANCitkZHNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwDQorDQorZGRzYW1xMTMxMCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtSW5mICAgLT4gMA0KK2Rkc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDANCitkZHNhbXExMzEyIHNhbWVxdWFudHVtICAwRSszICAgICBOYU4gICAtPiAwDQorZGRzYW1xMTMxMyBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UrMyAgLT4gMQ0KK2Rkc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDANCitkZHNhbXExMzE1IHNhbWVxdWFudHVtICAwRSszICAgIC03RS0zICAtPiAwDQorZGRzYW1xMTMxNiBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUtMyAgLT4gMA0KK2Rkc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDANCitkZHNhbXExMzE4IHNhbWVxdWFudHVtICAwRSszICAgIC0wRSszICAtPiAxDQorZGRzYW1xMTMxOSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUtMyAgLT4gMA0KK2Rkc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDANCitkZHNhbXExMzIxIHNhbWVxdWFudHVtICAwRSszICAgICAwRSszICAtPiAxDQorZGRzYW1xMTMyMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UtMyAgLT4gMA0KK2Rkc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDANCitkZHNhbXExMzI0IHNhbWVxdWFudHVtICAwRSszICAgICA3RSszICAtPiAxDQorZGRzYW1xMTMyNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgc05hTiAgLT4gMA0KKw0KK2Rkc2FtcTE0MTAgc2FtZXF1YW50dW0gIDdFLTMgICAgLUluZiAgIC0+IDANCitkZHNhbXExNDExIHNhbWVxdWFudHVtICA3RS0zICAgICBJbmYgICAtPiAwDQorZGRzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMA0KK2Rkc2FtcTE0MTMgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFKzMgIC0+IDANCitkZHNhbXExNDE0IHNhbWVxdWFudHVtICA3RS0zICAgIC03ICAgICAtPiAwDQorZGRzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQ0KK2Rkc2FtcTE0MTYgc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFLTMgIC0+IDENCitkZHNhbXExNDE3IHNhbWVxdWFudHVtICA3RS0zICAgIC0wICAgICAtPiAwDQorZGRzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMA0KK2Rkc2FtcTE0MTkgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFLTMgIC0+IDENCitkZHNhbXExNDIwIHNhbWVxdWFudHVtICA3RS0zICAgICAwICAgICAtPiAwDQorZGRzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMA0KK2Rkc2FtcTE0MjIgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFLTMgIC0+IDENCitkZHNhbXExNDIzIHNhbWVxdWFudHVtICA3RS0zICAgICA3ICAgICAtPiAwDQorZGRzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMA0KK2Rkc2FtcTE0MjUgc2FtZXF1YW50dW0gIDdFLTMgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDANCitkZHNhbXExNTExIHNhbWVxdWFudHVtICA3ICAgICAgIEluZiAgIC0+IDANCitkZHNhbXExNTEyIHNhbWVxdWFudHVtICA3ICAgICAgIE5hTiAgIC0+IDANCitkZHNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDANCitkZHNhbXExNTE0IHNhbWVxdWFudHVtICA3ICAgICAgLTcgICAgIC0+IDENCitkZHNhbXExNTE1IHNhbWVxdWFudHVtICA3ICAgICAgLTdFLTMgIC0+IDANCitkZHNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDANCitkZHNhbXExNTE3IHNhbWVxdWFudHVtICA3ICAgICAgLTAgICAgIC0+IDENCitkZHNhbXExNTE4IHNhbWVxdWFudHVtICA3ICAgICAgLTBFKzMgIC0+IDANCitkZHNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDANCitkZHNhbXExNTIwIHNhbWVxdWFudHVtICA3ICAgICAgIDAgICAgIC0+IDENCitkZHNhbXExNTIxIHNhbWVxdWFudHVtICA3ICAgICAgIDBFKzMgIC0+IDANCitkZHNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDANCitkZHNhbXExNTIzIHNhbWVxdWFudHVtICA3ICAgICAgIDcgICAgIC0+IDENCitkZHNhbXExNTI0IHNhbWVxdWFudHVtICA3ICAgICAgIDdFKzMgIC0+IDANCitkZHNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDANCisNCitkZHNhbXExNjEwIHNhbWVxdWFudHVtICA3RSszICAgIC1JbmYgICAtPiAwDQorZGRzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMA0KK2Rkc2FtcTE2MTIgc2FtZXF1YW50dW0gIDdFKzMgICAgIE5hTiAgIC0+IDANCitkZHNhbXExNjEzIHNhbWVxdWFudHVtICA3RSszICAgIC03RSszICAtPiAxDQorZGRzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMA0KK2Rkc2FtcTE2MTUgc2FtZXF1YW50dW0gIDdFKzMgICAgLTdFLTMgIC0+IDANCitkZHNhbXExNjE2IHNhbWVxdWFudHVtICA3RSszICAgIC0wRS0zICAtPiAwDQorZGRzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMA0KK2Rkc2FtcTE2MTggc2FtZXF1YW50dW0gIDdFKzMgICAgLTBFKzMgIC0+IDENCitkZHNhbXExNjE5IHNhbWVxdWFudHVtICA3RSszICAgICAwRS0zICAtPiAwDQorZGRzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMA0KK2Rkc2FtcTE2MjEgc2FtZXF1YW50dW0gIDdFKzMgICAgIDBFKzMgIC0+IDENCitkZHNhbXExNjIyIHNhbWVxdWFudHVtICA3RSszICAgICA3RS0zICAtPiAwDQorZGRzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMA0KK2Rkc2FtcTE2MjQgc2FtZXF1YW50dW0gIDdFKzMgICAgIDdFKzMgIC0+IDENCitkZHNhbXExNjI1IHNhbWVxdWFudHVtICA3RSszICAgICBzTmFOICAtPiAwDQorDQorZGRzYW1xMTcxMCBzYW1lcXVhbnR1bSAgc05hTiAgICAtSW5mICAgLT4gMA0KK2Rkc2FtcTE3MTEgc2FtZXF1YW50dW0gIHNOYU4gICAgIEluZiAgIC0+IDANCitkZHNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxDQorZGRzYW1xMTcxMyBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UrMyAgLT4gMA0KK2Rkc2FtcTE3MTQgc2FtZXF1YW50dW0gIHNOYU4gICAgLTcgICAgIC0+IDANCitkZHNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwDQorZGRzYW1xMTcxNiBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUtMyAgLT4gMA0KK2Rkc2FtcTE3MTcgc2FtZXF1YW50dW0gIHNOYU4gICAgLTAgICAgIC0+IDANCitkZHNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwDQorZGRzYW1xMTcxOSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUtMyAgLT4gMA0KK2Rkc2FtcTE3MjAgc2FtZXF1YW50dW0gIHNOYU4gICAgIDAgICAgIC0+IDANCitkZHNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwDQorZGRzYW1xMTcyMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UtMyAgLT4gMA0KK2Rkc2FtcTE3MjMgc2FtZXF1YW50dW0gIHNOYU4gICAgIDcgICAgIC0+IDANCitkZHNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwDQorZGRzYW1xMTcyNSBzYW1lcXVhbnR1bSAgc05hTiAgICAgc05hTiAgLT4gMQ0KKy0tIG5vaXN5IE5hTnMNCitkZHNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxDQorZGRzYW1xMTczMSBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjQgLT4gMQ0KK2Rkc2FtcTE3MzIgc2FtZXF1YW50dW0gICBOYU4zICAgICBOYU4zIC0+IDENCitkZHNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxDQorZGRzYW1xMTczNCBzYW1lcXVhbnR1bSAgc05hTjMgICAgIDMgICAgLT4gMA0KK2Rkc2FtcTE3MzUgc2FtZXF1YW50dW0gICBOYU4zICAgICAzICAgIC0+IDANCitkZHNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwDQorZGRzYW1xMTczNyBzYW1lcXVhbnR1bSAgICAgIDMgICAgIE5hTjMgLT4gMA0KK2Rkc2FtcTE3Mzggc2FtZXF1YW50dW0gICAgSW5mICAgIHNOYU40IC0+IDANCitkZHNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2NhbGVCLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdAppbmRleCBlZGVlMTFiLi42YmEzZTM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTY2FsZUIuZGVjVGVzdApAQCAtMSwyNDMgKzEsMjQzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkU2NhbGViQi5kZWNUZXN0IC0tIHNjYWxlIGEgZGVjRG91YmxlIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIE1heCB8cmhzfCBpcyAyKigzODQrMTYpID0gODAwCi0KLS0tIFNhbml0eSBjaGVja3MKLWRkc2NiMDAxIHNjYWxlYiAgICAgICA3LjUwICAgMTAgLT4gNy41MEUrMTAKLWRkc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMwotZGRzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTAKLWRkc2NiMDA0IHNjYWxlYiAgICAgICA3LjUwICAgIDEgLT4gNzUuMAotZGRzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwCi1kZHNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwCi1kZHNjYjAwNyBzY2FsZWIgICAgICAgNy41MCAgIC0yIC0+IDAuMDc1MAotZGRzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMAotZGRzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMwotZGRzY2IwMTAgc2NhbGViICAgICAgLTcuNTAgICAgMiAtPiAtNzUwCi1kZHNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wCi1kZHNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwCi1kZHNjYjAxMyBzY2FsZWIgICAgICAtNy41MCAgIC0xIC0+IC0wLjc1MAotCi0tLSBJbmZpbml0aWVzCi1kZHNjYjAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQotZGRzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5Ci1kZHNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQotZGRzY2IwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5Ci0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXIKLWRkc2NiMDE4IHNjYWxlYiAgMTAgIEluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5hTnMgYXJlIHVuZGVmaW5lZCBpbiA3NTRyOyBhc3N1bWUgdXN1YWwgcHJvY2Vzc2luZwotLS0gTmFOcywgMCBwYXlsb2FkCi1kZHNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFOCi1kZHNjYjAyMiBzY2FsZWIgICAgICAgIC1OYU4gLTEgLT4gLU5hTgotZGRzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiMDI1IHNjYWxlYiAgICA0ICAgIE5hTiAgICAtPiBOYU4KLWRkc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFOCi1kZHNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAyOCBzY2FsZWIgIEluZiAgLXNOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBub24taW50ZWdlciBSSFMKLWRkc2NiMDMwIHNjYWxlYiAgMS4yMyAgICAxICAgIC0+ICAxMi4zCi1kZHNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzMyBzY2FsZWIgIDEuMjMgICAgMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzNiBzY2FsZWIgIDEuMjMgICAgMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzCi1kZHNjYjAzOCBzY2FsZWIgIDEuMjMgICAtMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjAzOSBzY2FsZWIgIDEuMjMgICAtMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjA0MSBzY2FsZWIgIDEuMjMgICAtMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjA0MiBzY2FsZWIgIDEuMjMgICAtMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IwNDQgc2NhbGViICAxLjIzICAgIDAuMSAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiMDQ1IHNjYWxlYiAgMS4yMyAgICAxRSsxICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IwNDcgc2NhbGViICAxLjIzICAgIDEuMTIzRSs0ICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb3V0LW9mIHJhbmdlIFJIUwotZGRzY2IxMjAgc2NhbGViICAxLjIzICAgIDc5OSAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRkc2NiMTIxIHNjYWxlYiAgMS4yMyAgICA4MDAgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZHNjYjEyMiBzY2FsZWIgIDEuMjMgICAgODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2IxMjMgc2NhbGViICAxLjIzICAgIDgwMiAgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiMTI0IHNjYWxlYiAgMS4yMyAgIC03OTkgICAgICAgICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkc2NiMTI1IHNjYWxlYiAgMS4yMyAgIC04MDAgICAgICAgICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRkc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC04MDEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjEyNyBzY2FsZWIgIDEuMjMgICAtODAyICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kZHNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKLWRkc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgotZGRzY2I4NjMgc2NhbGViICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCi1kZHNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKLWRkc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQotZGRzY2I4NjYgc2NhbGViIC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQotZGRzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQotZGRzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQotZGRzY2I4Njkgc2NhbGViICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKLWRkc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2I4NzMgc2NhbGViIC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2I4NzYgc2NhbGViICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgotZGRzY2I4Nzkgc2NhbGViICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KLWRkc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCi1kZHNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmaW5pdGVzCi1kZHNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3Ci1kZHNjYjA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNwotZGRzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQotZGRzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUKLWRkc2NiMDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MAotZGRzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MAotZGRzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMAotZGRzY2IwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDAKLWRkc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNwotZGRzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNwotZGRzY2IwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41Ci1kZHNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41Ci1kZHNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MAotZGRzY2IwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwCi1kZHNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDAKLWRkc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDAKLWRkc2NiMDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcKLWRkc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03Ci1kZHNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQotZGRzY2IwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1Ci1kZHNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwCi1kZHNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MAotZGRzY2IwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDAKLWRkc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMAotZGRzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQotZGRzY2IwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzEKLWRkc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMgotZGRzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMgotZGRzY2IwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMAotZGRzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjAKLWRkc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwCi1kZHNjYjA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDAKLWRkc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzIKLWRkc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyCi1kZHNjYjA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMKLWRkc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMKLWRkc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MAotZGRzY2IwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MAotZGRzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjAKLWRkc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMAotCi0tLSB6ZXJvcwotZGRzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQotZGRzY2IxMTIgc2NhbGViICAgICAgICAgLTAgIDIgLT4gLTBFKzIKLWRkc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcKLWRkc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4Ci1kZHNjYjExNSBzY2FsZWIgICAgIDAuMDAwMCAgNSAtPiAwRSsxCi1kZHNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMgotZGRzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0Ci1kZHNjYjExOCBzY2FsZWIgICAgIC0wRS0xNDEgOCAtPiAtMEUtMTMzCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kZHNjYjEzMiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICszODQgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZHNjYjEzMyBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZHNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZHNjYjEzNSBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1kZHNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzgzCi1kZHNjYjEzNyBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgKzEgIC0+IDFFLTM4MgotZGRzY2IxMzggc2NhbGViICAxRS0zODMgICAgICAgICAgIC0wICAtPiAxRS0zODMKLWRkc2NiMTM5IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMSAgLT4gMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbAotZGRzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICArMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MgotZGRzY2IxNDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjE0MyBzY2FsZWIgIDFFLTM5OCAgICAgICAgICArMSAgLT4gMUUtMzk3ICAgICAgICAgIFN1Ym5vcm1hbAotZGRzY2IxNDQgc2NhbGViICAxRS0zOTggICAgICAgICAgLTAgIC0+IDFFLTM5OCAgICAgICAgIFN1Ym5vcm1hbAotZGRzY2IxNDUgc2NhbGViICAxRS0zOTggICAgICAgICAgLTEgIC0+IDBFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotZGRzY2IxNTAgc2NhbGViICAtMUUtMzk4ICAgICAgICAgKzEgIC0+IC0xRS0zOTcgICAgICAgICBTdWJub3JtYWwKLWRkc2NiMTUxIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgIC0wICAtPiAtMUUtMzk4ICAgICAgICBTdWJub3JtYWwKLWRkc2NiMTUyIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgIC0xICAtPiAtMEUtMzk4ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kZHNjYjE1MyBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICsxICAtPiAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MgotZGRzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMKLWRkc2NiMTU1IHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQgU3Vibm9ybWFsIFJvdW5kZWQKLWRkc2NiMTU2IHNjYWxlYiAgLTFFLTM4MyAgICAgICAgICArMSAgLT4gLTFFLTM4MgotZGRzY2IxNTcgc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0wICAtPiAtMUUtMzgzCi1kZHNjYjE1OCBzY2FsZWIgIC0xRS0zODMgICAgICAgICAgLTEgIC0+IC0xRS0zODQgICAgICAgICAgU3Vibm9ybWFsCi1kZHNjYjE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZGRzY2IxNjAgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWRkc2NiMTYxIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzgzCi1kZHNjYjE2MiBzY2FsZWIgIC05RSszODQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kZHNjYjE2MyBzY2FsZWIgIC0xRSszODQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNvbWUgT3JpZ2FtaQotLS0gKHRoZXNlIGNoZWNrIHRoYXQgb3ZlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCi1kZHNjYjE3MSBzY2FsZWIgICAxMDAwRSszNjUgICsxIC0+IDEuMDAwRSszNjkKLWRkc2NiMTcyIHNjYWxlYiAgIDEwMDBFKzM2NiAgKzEgLT4gMS4wMDBFKzM3MAotZGRzY2IxNzMgc2NhbGViICAgMTAwMEUrMzY3ICArMSAtPiAxLjAwMEUrMzcxCi1kZHNjYjE3NCBzY2FsZWIgICAxMDAwRSszNjggICsxIC0+IDEuMDAwRSszNzIKLWRkc2NiMTc1IHNjYWxlYiAgIDEwMDBFKzM2OSAgKzEgLT4gMS4wMDAwRSszNzMgICAgICAgICAgICAgICAgICBDbGFtcGVkCi1kZHNjYjE3NiBzY2FsZWIgICAxMDAwRSszNzAgICsxIC0+IDEuMDAwMDBFKzM3NCAgICAgICAgICAgICAgICAgQ2xhbXBlZAotZGRzY2IxNzcgc2NhbGViICAgMTAwMEUrMzcxICArMSAtPiAxLjAwMDAwMEUrMzc1ICAgICAgICAgICAgICAgIENsYW1wZWQKLWRkc2NiMTc4IHNjYWxlYiAgIDEwMDBFKzM3MiAgKzEgLT4gMS4wMDAwMDAwRSszNzYgICAgICAgICAgICAgICBDbGFtcGVkCi1kZHNjYjE3OSBzY2FsZWIgICAxMDAwRSszNzMgICsxIC0+IDEuMDAwMDAwMDBFKzM3NyAgICAgICAgICAgICAgQ2xhbXBlZAotZGRzY2IxODAgc2NhbGViICAgMTAwMEUrMzc0ICArMSAtPiAxLjAwMDAwMDAwMEUrMzc4ICAgICAgICAgICAgIENsYW1wZWQKLWRkc2NiMTgxIHNjYWxlYiAgIDEwMDBFKzM3NSAgKzEgLT4gMS4wMDAwMDAwMDAwRSszNzkgICAgICAgICAgICBDbGFtcGVkCi1kZHNjYjE4MiBzY2FsZWIgICAxMDAwRSszNzYgICsxIC0+IDEuMDAwMDAwMDAwMDBFKzM4MCAgICAgICAgICAgQ2xhbXBlZAotZGRzY2IxODMgc2NhbGViICAgMTAwMEUrMzc3ICArMSAtPiAxLjAwMDAwMDAwMDAwMEUrMzgxICAgICAgICAgIENsYW1wZWQKLWRkc2NiMTg0IHNjYWxlYiAgIDEwMDBFKzM3OCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwRSszODIgICAgICAgICBDbGFtcGVkCi1kZHNjYjE4NSBzY2FsZWIgICAxMDAwRSszNzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgICAgICAgQ2xhbXBlZAotZGRzY2IxODYgc2NhbGViICAgMTAwMEUrMzgwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMzg0ICAgICAgIENsYW1wZWQKLWRkc2NiMTg3IHNjYWxlYiAgIDEwMDBFKzM4MSAgKzEgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGFuZCBhIGZldyBtb3JlIHN1Ym5vcm1hbCB0cnVuY2F0aW9ucwotLS0gKHRoZXNlIGNoZWNrIHRoYXQgdW5kZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQotZGRzY2IyMDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MwotZGRzY2IyMDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIwMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0yICAtPiAxLjAwMDAwMDAwMDAwMDBFLTM4NSBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMDQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDBFLTM4NiBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMDUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNCAgLT4gMS4wMDAwMDAwMDAwMEUtMzg3IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIwNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC01ICAtPiAxLjAwMDAwMDAwMDBFLTM4OCBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMDcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNiAgLT4gMS4wMDAwMDAwMDBFLTM4OSBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMDggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNyAgLT4gMS4wMDAwMDAwMEUtMzkwIFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIwOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC04ICAtPiAxLjAwMDAwMDBFLTM5MSBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMTAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOSAgLT4gMS4wMDAwMDBFLTM5MiBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMTEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTAgLT4gMS4wMDAwMEUtMzkzIFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIxMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xMSAtPiAxLjAwMDBFLTM5NCBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMTMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTIgLT4gMS4wMDBFLTM5NSBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMTQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTMgLT4gMS4wMEUtMzk2IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIxNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNCAtPiAxLjBFLTM5NyBTdWJub3JtYWwgUm91bmRlZAotZGRzY2IyMTYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTUgLT4gMUUtMzk4IFN1Ym5vcm1hbCBSb3VuZGVkCi1kZHNjYjIxNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNiAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZGRzY2IyMTggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTcgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNEb3VibGUgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gTWF4IHxyaHN8IGlzIDIqKDM4NCsxNikgPSA4MDANCisNCistLSBTYW5pdHkgY2hlY2tzDQorZGRzY2IwMDEgc2NhbGViICAgICAgIDcuNTAgICAxMCAtPiA3LjUwRSsxMA0KK2Rkc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMw0KK2Rkc2NiMDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwDQorZGRzY2IwMDQgc2NhbGViICAgICAgIDcuNTAgICAgMSAtPiA3NS4wDQorZGRzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwDQorZGRzY2IwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MA0KK2Rkc2NiMDA3IHNjYWxlYiAgICAgICA3LjUwICAgLTIgLT4gMC4wNzUwDQorZGRzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMA0KK2Rkc2NiMDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMNCitkZHNjYjAxMCBzY2FsZWIgICAgICAtNy41MCAgICAyIC0+IC03NTANCitkZHNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wDQorZGRzY2IwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MA0KK2Rkc2NiMDEzIHNjYWxlYiAgICAgIC03LjUwICAgLTEgLT4gLTAuNzUwDQorDQorLS0gSW5maW5pdGllcw0KK2Rkc2NiMDE0IHNjYWxlYiAgSW5maW5pdHkgICAxIC0+IEluZmluaXR5DQorZGRzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5DQorZGRzY2IwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkNCitkZHNjYjAxNyBzY2FsZWIgIC1JbmZpbml0eSAtMiAtPiAtSW5maW5pdHkNCisNCistLSBOZXh0IHR3byBhcmUgc29tZXdoYXQgdW5kZWZpbmVkIGluIDc1NHI7IHRyZWF0IGFzIG5vbi1pbnRlZ2VyDQorZGRzY2IwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTmFOcyBhcmUgdW5kZWZpbmVkIGluIDc1NHI7IGFzc3VtZSB1c3VhbCBwcm9jZXNzaW5nDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRzY2IwMjEgc2NhbGViICAgICAgICAgTmFOICAxIC0+IE5hTg0KK2Rkc2NiMDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFODQorZGRzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDI0IHNjYWxlYiAgICAgICAtc05hTiAgMSAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTg0KK2Rkc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFODQorZGRzY2IwMjcgc2NhbGViICAgIDQgICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gbm9uLWludGVnZXIgUkhTDQorZGRzY2IwMzAgc2NhbGViICAxLjIzICAgIDEgICAgLT4gIDEyLjMNCitkZHNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDMzIHNjYWxlYiAgMS4yMyAgICAxLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDM2IHNjYWxlYiAgMS4yMyAgICAwLjk5OTk5OTk5OSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzDQorZGRzY2IwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb3V0LW9mIHJhbmdlIFJIUw0KK2Rkc2NiMTIwIHNjYWxlYiAgMS4yMyAgICA3OTkgICAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRzY2IxMjEgc2NhbGViICAxLjIzICAgIDgwMCAgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZHNjYjEyMiBzY2FsZWIgIDEuMjMgICAgODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMTIzIHNjYWxlYiAgMS4yMyAgICA4MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2IxMjQgc2NhbGViICAxLjIzICAgLTc5OSAgICAgICAgIC0+ICAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2Rkc2NiMTI1IHNjYWxlYiAgMS4yMyAgIC04MDAgICAgICAgICAtPiAgMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZHNjYjEyNiBzY2FsZWIgIDEuMjMgICAtODAxICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiMTI3IHNjYWxlYiAgMS4yMyAgIC04MDIgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkZHNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjENCitkZHNjYjg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCitkZHNjYjg2MyBzY2FsZWIgIE5hTjAzICAgIDEwMDAgICAgLT4gIE5hTjMNCitkZHNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQNCitkZHNjYjg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCitkZHNjYjg2NiBzY2FsZWIgLUluZiAgICAgLU5hTjcxICAgLT4gLU5hTjcxDQorZGRzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQ0KK2Rkc2NiODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCitkZHNjYjg2OSBzY2FsZWIgIEluZiAgICAgIE5hTjEwMSAgLT4gIE5hTjEwMQ0KK2Rkc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2I4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjg3MyBzY2FsZWIgLXNOYU4wMTMgICAxMDAwICAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2I4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjg3NiBzY2FsZWIgIE5hTjAxNiAgIHNOYU4xOTEgLT4gIE5hTjE5MSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2I4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCitkZHNjYjg3OSBzY2FsZWIgIDEwMDAgICAgLXNOYU4yMjEgLT4gLU5hTjIyMSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uDQorZGRzY2I4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBmaW5pdGVzDQorZGRzY2IwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNw0KK2Rkc2NiMDUyIHNjYWxlYiAgICAgICAgIC03ICAgLTIgIC0+IC0wLjA3DQorZGRzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQ0KK2Rkc2NiMDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1DQorZGRzY2IwNTUgc2NhbGViICAgICAgIDcuNTAgICAtMiAgLT4gMC4wNzUwDQorZGRzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MA0KK2Rkc2NiMDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDANCitkZHNjYjA1OCBzY2FsZWIgICAgICAtNy41MDAgIC0yICAtPiAtMC4wNzUwMA0KK2Rkc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNw0KK2Rkc2NiMDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcNCitkZHNjYjA2MyBzY2FsZWIgICAgICAgICA3NSAgIC0xICAtPiA3LjUNCitkZHNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41DQorZGRzY2IwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTANCitkZHNjYjA2NiBzY2FsZWIgICAgICAtNy41MCAgIC0xICAtPiAtMC43NTANCitkZHNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDANCitkZHNjYjA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwDQorZGRzY2IwNzEgc2NhbGViICAgICAgICAgIDcgICAgMCAgLT4gNw0KK2Rkc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03DQorZGRzY2IwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUNCitkZHNjYjA3NCBzY2FsZWIgICAgICAgIC03NSAgICAwICAtPiAtNzUNCitkZHNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwDQorZGRzY2IwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTANCitkZHNjYjA3NyBzY2FsZWIgICAgICAgNy41MDAgICAwICAtPiA3LjUwMA0KK2Rkc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMA0KK2Rkc2NiMDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzENCitkZHNjYjA4MiBzY2FsZWIgICAgICAgICAtNyAgICAxICAtPiAtN0UrMQ0KK2Rkc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMg0KK2Rkc2NiMDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzINCitkZHNjYjA4NSBzY2FsZWIgICAgICAgNy41MCAgICAxICAtPiA3NS4wDQorZGRzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjANCitkZHNjYjA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMA0KK2Rkc2NiMDg4IHNjYWxlYiAgICAgIC03LjUwMCAgIDEgIC0+IC03NS4wMA0KK2Rkc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzINCitkZHNjYjA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMg0KK2Rkc2NiMDkzIHNjYWxlYiAgICAgICAgIDc1ICAgIDIgIC0+IDcuNUUrMw0KK2Rkc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMNCitkZHNjYjA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTANCitkZHNjYjA5NiBzY2FsZWIgICAgICAtNy41MCAgICAyICAtPiAtNzUwDQorZGRzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjANCitkZHNjYjA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjANCisNCistLSB6ZXJvcw0KK2Rkc2NiMTExIHNjYWxlYiAgICAgICAgICAwICAxIC0+IDBFKzENCitkZHNjYjExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMg0KK2Rkc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcNCitkZHNjYjExNCBzY2FsZWIgICAgICAtMEUrNCAgNCAtPiAtMEUrOA0KK2Rkc2NiMTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzENCitkZHNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMg0KK2Rkc2NiMTE3IHNjYWxlYiAgICAgIDBFLTE0MSA3IC0+IDBFLTEzNA0KK2Rkc2NiMTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Rkc2NiMTMyIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgKzM4NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZHNjYjEzMyBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRzY2IxMzQgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2Rkc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzgzDQorZGRzY2IxMzcgc2NhbGViICAxRS0zODMgICAgICAgICAgICsxICAtPiAxRS0zODINCitkZHNjYjEzOCBzY2FsZWIgIDFFLTM4MyAgICAgICAgICAgLTAgIC0+IDFFLTM4Mw0KK2Rkc2NiMTM5IHNjYWxlYiAgMUUtMzgzICAgICAgICAgICAtMSAgLT4gMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbA0KK2Rkc2NiMTQwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODINCitkZHNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorZGRzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IxNDMgc2NhbGViICAxRS0zOTggICAgICAgICAgKzEgIC0+IDFFLTM5NyAgICAgICAgICBTdWJub3JtYWwNCitkZHNjYjE0NCBzY2FsZWIgIDFFLTM5OCAgICAgICAgICAtMCAgLT4gMUUtMzk4ICAgICAgICAgU3Vibm9ybWFsDQorZGRzY2IxNDUgc2NhbGViICAxRS0zOTggICAgICAgICAgLTEgIC0+IDBFLTM5OCAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCitkZHNjYjE1MCBzY2FsZWIgIC0xRS0zOTggICAgICAgICArMSAgLT4gLTFFLTM5NyAgICAgICAgIFN1Ym5vcm1hbA0KK2Rkc2NiMTUxIHNjYWxlYiAgLTFFLTM5OCAgICAgICAgIC0wICAtPiAtMUUtMzk4ICAgICAgICBTdWJub3JtYWwNCitkZHNjYjE1MiBzY2FsZWIgIC0xRS0zOTggICAgICAgICAtMSAgLT4gLTBFLTM5OCAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2Rkc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgyDQorZGRzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMNCitkZHNjYjE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IxNTYgc2NhbGViICAtMUUtMzgzICAgICAgICAgICsxICAtPiAtMUUtMzgyDQorZGRzY2IxNTcgc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0wICAtPiAtMUUtMzgzDQorZGRzY2IxNTggc2NhbGViICAtMUUtMzgzICAgICAgICAgIC0xICAtPiAtMUUtMzg0ICAgICAgICAgIFN1Ym5vcm1hbA0KK2Rkc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZGRzY2IxNjAgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitkZHNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4Mw0KK2Rkc2NiMTYyIHNjYWxlYiAgLTlFKzM4NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkZHNjYjE2MyBzY2FsZWIgIC0xRSszODQgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc29tZSBPcmlnYW1pDQorLS0gKHRoZXNlIGNoZWNrIHRoYXQgb3ZlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpDQorZGRzY2IxNzEgc2NhbGViICAgMTAwMEUrMzY1ICArMSAtPiAxLjAwMEUrMzY5DQorZGRzY2IxNzIgc2NhbGViICAgMTAwMEUrMzY2ICArMSAtPiAxLjAwMEUrMzcwDQorZGRzY2IxNzMgc2NhbGViICAgMTAwMEUrMzY3ICArMSAtPiAxLjAwMEUrMzcxDQorZGRzY2IxNzQgc2NhbGViICAgMTAwMEUrMzY4ICArMSAtPiAxLjAwMEUrMzcyDQorZGRzY2IxNzUgc2NhbGViICAgMTAwMEUrMzY5ICArMSAtPiAxLjAwMDBFKzM3MyAgICAgICAgICAgICAgICAgIENsYW1wZWQNCitkZHNjYjE3NiBzY2FsZWIgICAxMDAwRSszNzAgICsxIC0+IDEuMDAwMDBFKzM3NCAgICAgICAgICAgICAgICAgQ2xhbXBlZA0KK2Rkc2NiMTc3IHNjYWxlYiAgIDEwMDBFKzM3MSAgKzEgLT4gMS4wMDAwMDBFKzM3NSAgICAgICAgICAgICAgICBDbGFtcGVkDQorZGRzY2IxNzggc2NhbGViICAgMTAwMEUrMzcyICArMSAtPiAxLjAwMDAwMDBFKzM3NiAgICAgICAgICAgICAgIENsYW1wZWQNCitkZHNjYjE3OSBzY2FsZWIgICAxMDAwRSszNzMgICsxIC0+IDEuMDAwMDAwMDBFKzM3NyAgICAgICAgICAgICAgQ2xhbXBlZA0KK2Rkc2NiMTgwIHNjYWxlYiAgIDEwMDBFKzM3NCAgKzEgLT4gMS4wMDAwMDAwMDBFKzM3OCAgICAgICAgICAgICBDbGFtcGVkDQorZGRzY2IxODEgc2NhbGViICAgMTAwMEUrMzc1ICArMSAtPiAxLjAwMDAwMDAwMDBFKzM3OSAgICAgICAgICAgIENsYW1wZWQNCitkZHNjYjE4MiBzY2FsZWIgICAxMDAwRSszNzYgICsxIC0+IDEuMDAwMDAwMDAwMDBFKzM4MCAgICAgICAgICAgQ2xhbXBlZA0KK2Rkc2NiMTgzIHNjYWxlYiAgIDEwMDBFKzM3NyAgKzEgLT4gMS4wMDAwMDAwMDAwMDBFKzM4MSAgICAgICAgICBDbGFtcGVkDQorZGRzY2IxODQgc2NhbGViICAgMTAwMEUrMzc4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDBFKzM4MiAgICAgICAgIENsYW1wZWQNCitkZHNjYjE4NSBzY2FsZWIgICAxMDAwRSszNzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzM4MyAgICAgICAgQ2xhbXBlZA0KK2Rkc2NiMTg2IHNjYWxlYiAgIDEwMDBFKzM4MCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAgICAgICBDbGFtcGVkDQorZGRzY2IxODcgc2NhbGViICAgMTAwMEUrMzgxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBhbmQgYSBmZXcgbW9yZSBzdWJub3JtYWwgdHJ1bmNhdGlvbnMNCistLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpDQorZGRzY2IyMDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4Mw0KK2Rkc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjAzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMEUtMzg1IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMDQgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDBFLTM4NiBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTQgIC0+IDEuMDAwMDAwMDAwMDBFLTM4NyBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjA2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTUgIC0+IDEuMDAwMDAwMDAwMEUtMzg4IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMDcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtNiAgLT4gMS4wMDAwMDAwMDBFLTM4OSBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTcgIC0+IDEuMDAwMDAwMDBFLTM5MCBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjA5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTggIC0+IDEuMDAwMDAwMEUtMzkxIFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMTAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtOSAgLT4gMS4wMDAwMDBFLTM5MiBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEwIC0+IDEuMDAwMDBFLTM5MyBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjEyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTExIC0+IDEuMDAwMEUtMzk0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMTMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTIgLT4gMS4wMDBFLTM5NSBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTEzIC0+IDEuMDBFLTM5NiBTdWJub3JtYWwgUm91bmRlZA0KK2Rkc2NiMjE1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgLTE0IC0+IDEuMEUtMzk3IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMTYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTUgLT4gMUUtMzk4IFN1Ym5vcm1hbCBSb3VuZGVkDQorZGRzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAtMTYgLT4gMEUtMzk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkZHNjYjIxOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgIC0xNyAtPiAwRS0zOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTaGlmdC5kZWNUZXN0CmluZGV4IGY2MmEyMzYuLmVjNDcyNDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFNoaWZ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU2hpZnQuZGVjVGVzdApAQCAtMSwyNjIgKzEsMjYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkU2hpZnQuZGVjVGVzdCAtLSBzaGlmdCBkZWNEb3VibGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZGRzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKLWRkc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCi1kZHNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCi1kZHNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMAotZGRzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAxNiAgLT4gIDAKLWRkc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCi1kZHNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAotZGRzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NQotZGRzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDEKLWRkc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwCi1kZHNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgOQotZGRzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gIDAKLQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgotZGRzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgotZGRzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KLWRkc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE2ICAtPiAwCi1kZHNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMQotZGRzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTQgIC0+IDEyCi1kZHNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMyAgLT4gMTIzCi1kZHNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gMTIzNAotZGRzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTEgIC0+IDEyMzQ1Ci1kZHNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMCAgLT4gMTIzNDU2Ci1kZHNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gMTIzNDU2NwotZGRzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4Ci1kZHNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5Ci1kZHNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MAotZGRzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxCi1kZHNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyCi1kZHNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMwotZGRzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0Ci1kZHNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ci1kZHNoaTA0NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotCi1kZHNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZGRzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjAKLWRkc2hpMDQ5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1NjAwCi1kZHNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1NjAwMAotZGRzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjAwMDAKLWRkc2hpMDUyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1NjAwMDAwCi1kZHNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1NjAwMDAwMAotZGRzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjAwMDAwMDAKLWRkc2hpMDU1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzggICAtPiA5MDEyMzQ1NjAwMDAwMDAwCi1kZHNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs5ICAgLT4gIDEyMzQ1NjAwMDAwMDAwMAotZGRzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjAwMDAwMDAwMDAKLWRkc2hpMDU4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzExICAtPiAyMzQ1NjAwMDAwMDAwMDAwCi1kZHNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMiAgLT4gMzQ1NjAwMDAwMDAwMDAwMAotZGRzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjAwMDAwMDAwMDAwMDAKLWRkc2hpMDYxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE0ICAtPiA1NjAwMDAwMDAwMDAwMDAwCi1kZHNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNSAgLT4gNjAwMDAwMDAwMDAwMDAwMAotZGRzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDAKLQotLS0gemVyb3MKLWRkc2hpMDcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCi1kZHNoaTA3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRS0xMAotZGRzaGkwNzIgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAgMC4wMDAKLWRkc2hpMDczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCi1kZHNoaTA3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gICAwRSsxMAotZGRzaGkwNzUgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUrMTAKLWRkc2hpMDc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCi1kZHNoaTA3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRS0xMAotZGRzaGkwNzggc2hpZnQgLTAuMDAwICAgICAgICAgICAgICArOSAgIC0+ICAtMC4wMDAKLWRkc2hpMDc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCi1kZHNoaTA4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICs5ICAgLT4gIC0wRSsxMAotZGRzaGkwODEgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUrMTAKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRkc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OUUrMzgzCi1kZHNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDlFKzM2OQotZGRzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5MEUrMzg0Ci1kZHNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQKLWRkc2hpMTQ1IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzgzCi1kZHNoaTE0NiBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM4MwotZGRzaGkxNDcgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM4MgotZGRzaGkxNDggc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4Ci1kZHNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAxRS0zOTgKLWRkc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4Ci1kZHNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OAotZGRzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiA5LjAwMDAwMDAwMDAwMDAwRS0zODQKLWRkc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4Ci1kZHNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IDBFLTM5OAotZGRzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgKLWRkc2hpMTYwIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzk4Ci1kZHNoaTE2MSBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IDBFLTM5OAotZGRzaGkxNjIgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAxLjBFLTM5NwotZGRzaGkxNjMgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi0tLSAgbmVnYXRpdmVzCi1kZHNoaTE3MSBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5RSszODMKLWRkc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTlFKzM2OQotZGRzaGkxNzMgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTBFKzM4NAotZGRzaGkxNzQgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgICAxNSAtPiAtOS4wMDAwMDAwMDAwMDAwMDBFKzM4NAotZGRzaGkxNzUgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzgzCi1kZHNoaTE3NiBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zODMKLWRkc2hpMTc3IHNoaWZ0IC0xRS0zODMgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzgyCi1kZHNoaTE3OCBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4Ci1kZHNoaTE4MSBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwRS0zODQKLWRkc2hpMTgyIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gLTFFLTM5OAotZGRzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4Ci1kZHNoaTE4NCBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IC0wRS0zOTgKLWRkc2hpMTg1IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDBFLTM4NAotZGRzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4Ci1kZHNoaTE4NyBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDEgIC0+IC0wRS0zOTgKLWRkc2hpMTg4IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMTUgLT4gLTBFLTM5OAotZGRzaGkxOTAgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzk4Ci1kZHNoaTE5MSBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgLTE1IC0+IC0wRS0zOTgKLWRkc2hpMTkyIHNoaWZ0IC0xRS0zOTggICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMzk3Ci1kZHNoaTE5MyBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzCi0KLS0tIG1vcmUgbmVnYXRpdmVzIChvZiBzYW5pdGllcykKLWRkc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCi1kZHNoaTIwMiBzaGlmdCAgICAgICAgICAgICAgICAtMCAgICAyICAtPiAtMAotZGRzaGkyMDMgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAgMiAgLT4gLTEwMAotZGRzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAKLWRkc2hpMjA1IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgMTYgIC0+IC0wCi1kZHNoaTIwNiBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIC0xICAtPiAtMAotZGRzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKLWRkc2hpMjA4IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+IC0xMjM0NTY3ODkwMTIzNDUKLWRkc2hpMjA5IHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC0xCi1kZHNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMAotZGRzaGkyMTEgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTkKLWRkc2hpMjEyIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+IC0wCi0KLQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKLWRkc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzgzIHNoaWZ0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzg2IHNoaWZ0IC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKLWRkc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzg5IHNoaWZ0IC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzkyIHNoaWZ0ICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpNzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZGRzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5Ci1kZHNoaTgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKLWRkc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQotZGRzaGk4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5Ci1kZHNoaTgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKLWRkc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQotZGRzaGk4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZHNoaTgyMSBzaGlmdCAgTmFOIC1JbmYgICAgLT4gIE5hTgotZGRzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRkc2hpODIzIHNoaWZ0ICBOYU4gLTEgICAgICAtPiAgTmFOCi1kZHNoaTgyNCBzaGlmdCAgTmFOIC0wICAgICAgLT4gIE5hTgotZGRzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KLWRkc2hpODI2IHNoaWZ0ICBOYU4gIDEgICAgICAtPiAgTmFOCi1kZHNoaTgyNyBzaGlmdCAgTmFOICAxMDAwICAgLT4gIE5hTgotZGRzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRkc2hpODI5IHNoaWZ0ICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kZHNoaTgzMCBzaGlmdCAtSW5mICBOYU4gICAgLT4gIE5hTgotZGRzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRkc2hpODMyIHNoaWZ0IC0xICAgIE5hTiAgICAtPiAgTmFOCi1kZHNoaTgzMyBzaGlmdCAtMCAgICBOYU4gICAgLT4gIE5hTgotZGRzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRkc2hpODM1IHNoaWZ0ICAxICAgIE5hTiAgICAtPiAgTmFOCi1kZHNoaTgzNiBzaGlmdCAgMTAwMCBOYU4gICAgLT4gIE5hTgotZGRzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotZGRzaGk4NDEgc2hpZnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NDQgc2hpZnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NDcgc2hpZnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NTAgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NTMgc2hpZnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NTYgc2hpZnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NTkgc2hpZnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkc2hpODYxIHNoaWZ0ICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQotZGRzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1kZHNoaTg2MyBzaGlmdCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLWRkc2hpODY0IHNoaWZ0ICBOYU40ICAgIEluZiAgICAtPiAgTmFONAotZGRzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1kZHNoaTg2NiBzaGlmdCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLWRkc2hpODY3IHNoaWZ0IC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAotZGRzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1kZHNoaTg2OSBzaGlmdCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1kZHNoaTg3MSBzaGlmdCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODczIHNoaWZ0ICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg3NCBzaGlmdCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODc2IHNoaWZ0ICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg3NyBzaGlmdCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODc5IHNoaWZ0ICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg4MCBzaGlmdCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgotZGRzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLWRkc2hpODgyIHNoaWZ0IC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLWRkc2hpODgzIHNoaWZ0IC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCi1kZHNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1kZHNoaTg4NSBzaGlmdCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZGRTaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGRlY0RvdWJsZSBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrDQorZGRzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCitkZHNoaTAwMiBzaGlmdCAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMA0KK2Rkc2hpMDAzIHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCitkZHNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgMSAgIDE1ICAtPiAgMTAwMDAwMDAwMDAwMDAwMA0KK2Rkc2hpMDA1IHNoaWZ0ICAgICAgICAgICAgICAgICAxICAgMTYgIC0+ICAwDQorZGRzaGkwMDYgc2hpZnQgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDANCitkZHNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KK2Rkc2hpMDA4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTEgIC0+ICAxMjM0NTY3ODkwMTIzNDUNCitkZHNoaTAwOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNSAtPiAgMQ0KK2Rkc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgLTE2IC0+ICAwDQorZGRzaGkwMTEgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gIDkNCitkZHNoaTAxMiBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAgMA0KKw0KKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCitkZHNoaTAxNSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpMDE3IHNoaWZ0ICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTAxOCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpMDIwIHNoaWZ0ICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTAyMSBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCitkZHNoaTAyNSBzaGlmdCAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTE3ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpMDI3IHNoaWZ0ICAgICAgICAxICAgICAxNyAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTAyOCBzaGlmdCAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZnVsbCBzaGlmdGluZyBwYXR0ZXJuDQorZGRzaGkwMzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICAtMTYgIC0+IDANCitkZHNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xNSAgLT4gMQ0KK2Rkc2hpMDMyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTE0ICAtPiAxMg0KK2Rkc2hpMDMzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEzICAtPiAxMjMNCitkZHNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0xMiAgLT4gMTIzNA0KK2Rkc2hpMDM1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTExICAtPiAxMjM0NQ0KK2Rkc2hpMDM2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEwICAtPiAxMjM0NTYNCitkZHNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC05ICAgLT4gMTIzNDU2Nw0KK2Rkc2hpMDM4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTggICAtPiAxMjM0NTY3OA0KK2Rkc2hpMDM5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTcgICAtPiAxMjM0NTY3ODkNCitkZHNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MA0KK2Rkc2hpMDQxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTUgICAtPiAxMjM0NTY3ODkwMQ0KK2Rkc2hpMDQyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTQgICAtPiAxMjM0NTY3ODkwMTINCitkZHNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMw0KK2Rkc2hpMDQ0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTIgICAtPiAxMjM0NTY3ODkwMTIzNA0KK2Rkc2hpMDQ1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgLTEgICAtPiAxMjM0NTY3ODkwMTIzNDUNCitkZHNoaTA0NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KKw0KK2Rkc2hpMDQ3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZGRzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1NjANCitkZHNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsyICAgLT4gMzQ1Njc4OTAxMjM0NTYwMA0KK2Rkc2hpMDUwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2MDAwDQorZGRzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1NjAwMDANCitkZHNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs1ICAgLT4gNjc4OTAxMjM0NTYwMDAwMA0KK2Rkc2hpMDUzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2MDAwMDAwDQorZGRzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1NjAwMDAwMDANCitkZHNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICs4ICAgLT4gOTAxMjM0NTYwMDAwMDAwMA0KK2Rkc2hpMDU2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzkgICAtPiAgMTIzNDU2MDAwMDAwMDAwDQorZGRzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTAgIC0+IDEyMzQ1NjAwMDAwMDAwMDANCitkZHNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxMSAgLT4gMjM0NTYwMDAwMDAwMDAwMA0KK2Rkc2hpMDU5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzEyICAtPiAzNDU2MDAwMDAwMDAwMDAwDQorZGRzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTMgIC0+IDQ1NjAwMDAwMDAwMDAwMDANCitkZHNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAgICsxNCAgLT4gNTYwMDAwMDAwMDAwMDAwMA0KK2Rkc2hpMDYyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgICAgKzE1ICAtPiA2MDAwMDAwMDAwMDAwMDAwDQorZGRzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgICArMTYgIC0+IDANCisNCistLSB6ZXJvcw0KK2Rkc2hpMDcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwDQorZGRzaGkwNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCitkZHNoaTA3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMA0KK2Rkc2hpMDczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwDQorZGRzaGkwNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCitkZHNoaTA3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMA0KK2Rkc2hpMDc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwDQorZGRzaGkwNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCitkZHNoaTA3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMA0KK2Rkc2hpMDc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwDQorZGRzaGkwODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCitkZHNoaTA4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZGRzaGkxNDEgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5RSszODMNCitkZHNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgLTE1IC0+IDlFKzM2OQ0KK2Rkc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTBFKzM4NA0KK2Rkc2hpMTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMTUgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NA0KK2Rkc2hpMTQ1IHNoaWZ0ICAxRS0zODMgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzgzDQorZGRzaGkxNDYgc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zODMNCitkZHNoaTE0NyBzaGlmdCAgMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzgyDQorZGRzaGkxNDggc2hpZnQgIDFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQorZGRzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwRS0zODQNCitkZHNoaTE1MiBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTE1IC0+IDFFLTM5OA0KK2Rkc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAgMSAgLT4gMEUtMzk4DQorZGRzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAwRS0zOTgNCitkZHNoaTE1NSBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NA0KK2Rkc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMEUtMzgzICAgICAtMTUgLT4gOUUtMzk4DQorZGRzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAwRS0zOTgNCitkZHNoaTE1OCBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDBFLTM4MyAgICAgIDE1IC0+IDBFLTM5OA0KK2Rkc2hpMTYwIHNoaWZ0ICAxRS0zOTggICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtMzk4DQorZGRzaGkxNjEgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAwRS0zOTgNCitkZHNoaTE2MiBzaGlmdCAgMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtMzk3DQorZGRzaGkxNjMgc2hpZnQgIDFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorLS0gIG5lZ2F0aXZlcw0KK2Rkc2hpMTcxIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTlFKzM4Mw0KK2Rkc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAtMTUgLT4gLTlFKzM2OQ0KK2Rkc2hpMTczIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTkwRSszODQNCitkZHNoaTE3NCBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgIDE1IC0+IC05LjAwMDAwMDAwMDAwMDAwMEUrMzg0DQorZGRzaGkxNzUgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzgzDQorZGRzaGkxNzYgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzgzDQorZGRzaGkxNzcgc2hpZnQgLTFFLTM4MyAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zODINCitkZHNoaTE3OCBzaGlmdCAtMUUtMzgzICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzY4DQorZGRzaGkxODEgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMEUtMzg0DQorZGRzaGkxODIgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtMUUtMzk4DQorZGRzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4DQorZGRzaGkxODQgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4DQorZGRzaGkxODUgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMEUtMzg0DQorZGRzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgIC0xNSAtPiAtOUUtMzk4DQorZGRzaGkxODcgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxICAtPiAtMEUtMzk4DQorZGRzaGkxODggc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwRS0zODMgICAgICAxNSAtPiAtMEUtMzk4DQorZGRzaGkxOTAgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMEUtMzk4DQorZGRzaGkxOTEgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgIC0xNSAtPiAtMEUtMzk4DQorZGRzaGkxOTIgc2hpZnQgLTFFLTM5OCAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS0zOTcNCitkZHNoaTE5MyBzaGlmdCAtMUUtMzk4ICAgICAgICAgICAgICAgICAgICAgIDE1IC0+IC0xLjAwMDAwMDAwMDAwMDAwMEUtMzgzDQorDQorLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KK2Rkc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wDQorZGRzaGkyMDIgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTANCitkZHNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwDQorZGRzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgLTEgICAxNSAgLT4gLTEwMDAwMDAwMDAwMDAwMDANCitkZHNoaTIwNSBzaGlmdCAgICAgICAgICAgICAgICAtMSAgIDE2ICAtPiAtMA0KK2Rkc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wDQorZGRzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTANCitkZHNoaTIwOCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xICAtPiAtMTIzNDU2Nzg5MDEyMzQ1DQorZGRzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTYgICAtMTUgLT4gLTENCitkZHNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1NiAgIC0xNiAtPiAtMA0KK2Rkc2hpMjExIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2ICAgLTE1IC0+IC05DQorZGRzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTYgICAtMTYgLT4gLTANCisNCisNCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KK2Rkc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCitkZHNoaTc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZGRzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2Rkc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCitkZHNoaTc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZGRzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KK2Rkc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZGRzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KK2Rkc2hpODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rkc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFODQorZGRzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkZHNoaTgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2Rkc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFODQorZGRzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkZHNoaTgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTg0KK2Rkc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFODQorZGRzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkZHNoaTgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2Rkc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFODQorZGRzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkZHNoaTgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rkc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFODQorZGRzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkZHNoaTgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rkc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFODQorZGRzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkZHNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorZGRzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZGRzaGk4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorZGRzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorZGRzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZGRzaGk4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorZGRzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorZGRzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZGRzaGk4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK2Rkc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorZGRzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZGRzaGk4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkU3VidHJhY3QuZGVjVGVzdAppbmRleCA1ZWJjNDg3Li4xNWQ0Nzc3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRTdWJ0cmFjdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFN1YnRyYWN0LmRlY1Rlc3QKQEAgLTEsNjI5ICsxLDYyOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkZFN1YnRyYWN0LmRlY1Rlc3QgLS0gZGVjRG91YmxlIHN1YnRyYWN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjRG91YmxlcyBvbmx5OyBhbGwgYXJndW1lbnRzIGFyZQotLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY0RvdWJsZQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQotZGRzdWIwMDEgc3VidHJhY3QgIDAgICAwICAtPiAnMCcKLWRkc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnCi1kZHN1YjAwMyBzdWJ0cmFjdCAgMSAgIDIgIC0+ICctMScKLWRkc3ViMDA0IHN1YnRyYWN0ICAyICAgMSAgLT4gJzEnCi1kZHN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJwotZGRzdWIwMDYgc3VidHJhY3QgIDMgICAyICAtPiAnMScKLWRkc3ViMDA3IHN1YnRyYWN0ICAyICAgMyAgLT4gJy0xJwotCi1kZHN1YjAxMSBzdWJ0cmFjdCAtMCAgIDAgIC0+ICctMCcKLWRkc3ViMDEyIHN1YnRyYWN0IC0xICAgMSAgLT4gJy0yJwotZGRzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnCi1kZHN1YjAxNCBzdWJ0cmFjdCAtMiAgIDEgIC0+ICctMycKLWRkc3ViMDE1IHN1YnRyYWN0IC0yICAgMiAgLT4gJy00JwotZGRzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnCi1kZHN1YjAxNyBzdWJ0cmFjdCAtMiAgIDMgIC0+ICctNScKLQotZGRzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcKLWRkc3ViMDIyIHN1YnRyYWN0ICAxICAtMSAgLT4gJzInCi1kZHN1YjAyMyBzdWJ0cmFjdCAgMSAgLTIgIC0+ICczJwotZGRzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycKLWRkc3ViMDI1IHN1YnRyYWN0ICAyICAtMiAgLT4gJzQnCi1kZHN1YjAyNiBzdWJ0cmFjdCAgMyAgLTIgIC0+ICc1JwotZGRzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScKLQotZGRzdWIwMzAgc3VidHJhY3QgIDExICAxICAtPiAxMAotZGRzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQotZGRzdWIwMzIgc3VidHJhY3QgIDkgICAxICAtPiAgOAotZGRzdWIwMzMgc3VidHJhY3QgIDEgICAxICAtPiAgMAotZGRzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQotZGRzdWIwMzUgc3VidHJhY3QgLTEgICAxICAtPiAtMgotZGRzdWIwMzYgc3VidHJhY3QgLTkgICAxICAtPiAtMTAKLWRkc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExCi1kZHN1YjAzOCBzdWJ0cmFjdCAtMTEgIDEgIC0+IC0xMgotCi1kZHN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1JwotZGRzdWIwNDEgc3VidHJhY3QgJzUnICAgICctMycgICAtPiAnOCcKLWRkc3ViMDQyIHN1YnRyYWN0ICctNScgICAnLTMnICAgLT4gJy0yJwotZGRzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScKLWRkc3ViMDQ0IHN1YnRyYWN0ICcwLjcnICAnMC4zJyAgLT4gJzAuNCcKLWRkc3ViMDQ1IHN1YnRyYWN0ICcxLjMnICAnMC4zJyAgLT4gJzEuMCcKLWRkc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnCi0KLWRkc3ViMDUwIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCi1kZHN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJwotCi1kZHN1YjA2MCBzdWJ0cmFjdCAnNzAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViMDYyIHN1YnRyYWN0ICc3MDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjA2MyBzdWJ0cmFjdCAnNzAwMDAnICAgICcxMDAwMGUrMTYnIC0+ICctOS45OTk5OTk5OTk5OTk5OTNFKzE5JyBSb3VuZGVkCi1kZHN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZAotICAtLSBzeW1tZXRyeToKLWRkc3ViMDY1IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViMDY3IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTlFKzE5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViMDY4IHN1YnRyYWN0ICcxMDAwMGUrMTYnICAgICc3MDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTkzRSsxOScgUm91bmRlZAotZGRzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZAotCi0gIC0tIHNvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0cwotZGRzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJwotZGRzdWIwOTEgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKLWRkc3ViMDkyIHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCi1kZHN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJwotZGRzdWIwOTQgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcKLWRkc3ViMDk1IHN1YnRyYWN0ICczJyAgICAnLjMnICAgLT4gJzIuNycKLWRkc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycKLWRkc3ViMDk3IHN1YnRyYWN0ICczLjAnICAnLjMnICAgLT4gJzIuNycKLWRkc3ViMDk4IHN1YnRyYWN0ICczLjAwJyAnLjMnICAgLT4gJzIuNzAnCi1kZHN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJwotZGRzdWIxMDAgc3VidHJhY3QgJzMnICAgICcrMycgICAtPiAnMCcKLWRkc3ViMTAxIHN1YnRyYWN0ICczJyAgICAnLTMnICAgLT4gJzYnCi1kZHN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnCi1kZHN1YjEwMyBzdWJ0cmFjdCAnMy4nICAgJzAuMycgIC0+ICcyLjcnCi1kZHN1YjEwNCBzdWJ0cmFjdCAnMy4wJyAgJzAuMycgIC0+ICcyLjcnCi1kZHN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJwotZGRzdWIxMDYgc3VidHJhY3QgJzMnICAgICczLjAnICAtPiAnMC4wJwotZGRzdWIxMDcgc3VidHJhY3QgJzMnICAgICcrMy4wJyAtPiAnMC4wJwotZGRzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJwotCi0tLSB0aGUgYWJvdmUgYWxsIGZyb20gYWRkOyBtYXNzYWdlZCBhbmQgZXh0ZW5kZWQuICBOb3cgc29tZSBuZXcgb25lcy4uLgotLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQotLS0gTkI6IC14RS04IGJlbG93IHdlcmUgbm9uLWV4cG9uZW50cyBwcmUtQU5TSSBYMy0yNzQsIGFuZCAtMUUtNyBvciAwRS03Ci0tLSB3aXRoIGlucHV0IHJvdW5kaW5nLgotZGRzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04JwotZGRzdWIxMjEgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy00RS04JwotZGRzdWIxMjIgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0zRS04JwotZGRzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04JwotZGRzdWIxMjQgc3VidHJhY3QgICcxMC4yMzQ1Njc4OCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0xRS04JwotZGRzdWIxMjUgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzBFLTgnCi1kZHN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcKLWRkc3ViMTI3IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4OScgIC0+ICcyRS04JwotZGRzdWIxMjggc3VidHJhY3QgICcxMC4yMzQ1Njc5MicgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzNFLTgnCi1kZHN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcKLWRkc3ViMTMwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICc1RS04JwotZGRzdWIxMzEgc3VidHJhY3QgICcxMC4yMzQ1Njc4MScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy01RS04JwotZGRzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04JwotZGRzdWIxMzMgc3VidHJhY3QgICcxMC4yMzQ1Njc4MycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0zRS04JwotZGRzdWIxMzQgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0yRS04JwotZGRzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04JwotZGRzdWIxMzYgc3VidHJhY3QgICcxMC4yMzQ1Njc4NicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzBFLTgnCi1kZHN1YjEzNyBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg3JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMUUtOCcKLWRkc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04JwotZGRzdWIxMzkgc3VidHJhY3QgICcxMC4yMzQ1Njc4OScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzNFLTgnCi1kZHN1YjE0MCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNEUtOCcKLWRkc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04JwotZGRzdWIxNDIgc3VidHJhY3QgICcxJyAgICAgICAgICAgICAgJzAuOTk5OTk5OTk5JyAgLT4gJzFFLTknCi1kZHN1YjE0MyBzdWJ0cmFjdCAgJzAuOTk5OTk5OTk5JyAgICAnMScgICAgICAgICAgICAtPiAnLTFFLTknCi1kZHN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcKLWRkc3ViMTQ1IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkwJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNEUtOCcKLWRkc3ViMTQ2IHN1YnRyYWN0ICAnLTEwLjIzNDU2NzkxJyAgICctMTAuMjM0NTY3ODYnIC0+ICctNUUtOCcKLQotLS0gYWRkaXRpb25hbCBzY2FsZWQgYXJpdGhtZXRpYyB0ZXN0cyBbMC45NyBwcm9ibGVtXQotZGRzdWIxNjAgc3VidHJhY3QgJzAnICAgICAnLjEnICAgICAgLT4gJy0wLjEnCi1kZHN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnCi1kZHN1YjE2MiBzdWJ0cmFjdCAnMCcgICAgICcuOScgICAgICAtPiAnLTAuOScKLWRkc3ViMTYzIHN1YnRyYWN0ICcwJyAgICAgJzAuMTAyJyAgIC0+ICctMC4xMDInCi1kZHN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcKLWRkc3ViMTY1IHN1YnRyYWN0ICcwJyAgICAgJy4zMDcnICAgIC0+ICctMC4zMDcnCi1kZHN1YjE2NiBzdWJ0cmFjdCAnMCcgICAgICcuNDM4MjInICAtPiAnLTAuNDM4MjInCi1kZHN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJwotZGRzdWIxNjggc3VidHJhY3QgJy4wJyAgICAnLjAyJyAgICAgLT4gJy0wLjAyJwotZGRzdWIxNjkgc3VidHJhY3QgJzAwJyAgICAnLjM5MicgICAgLT4gJy0wLjM5MicKLWRkc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicKLWRkc3ViMTcxIHN1YnRyYWN0ICcwJyAgICAgJzAuNTEnICAgIC0+ICctMC41MScKLWRkc3ViMTcyIHN1YnRyYWN0ICcwJyAgICAgJy4yMjM0JyAgIC0+ICctMC4yMjM0JwotZGRzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInCi1kZHN1YjE3NCBzdWJ0cmFjdCAnLjAnICAgICcuMDAwOCcgICAtPiAnLTAuMDAwOCcKLS0tIDAuIG9uIGxlZnQKLWRkc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCi1kZHN1YjE4MSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycKLWRkc3ViMTgyIHN1YnRyYWN0ICcwLjAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCi1kZHN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCi1kZHN1YjE4NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uNCcgICAgICAtPiAnMC40JwotZGRzdWIxODUgc3VidHJhY3QgJzAuMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JwotZGRzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCi1kZHN1YjE4NyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnCi1kZHN1YjE4OCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDInICAgICAtPiAnMC4wMicKLWRkc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKLWRkc3ViMTkwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2JwotZGRzdWIxOTEgc3VidHJhY3QgJzAuMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCi1kZHN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JwotZGRzdWIxOTMgc3VidHJhY3QgJzAuMCcgICAgICctLjInICAgICAgLT4gJzAuMicKLWRkc3ViMTk0IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCi0tLSBuZWdhdGl2ZXMgb2Ygc2FtZQotZGRzdWIyMDAgc3VidHJhY3QgJzAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnCi1kZHN1YjIwMSBzdWJ0cmFjdCAnMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCi1kZHN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScKLWRkc3ViMjAzIHN1YnRyYWN0ICcwJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInCi1kZHN1YjIwNCBzdWJ0cmFjdCAnMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKLWRkc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnCi1kZHN1YjIwNiBzdWJ0cmFjdCAnMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInCi1kZHN1YjIwNyBzdWJ0cmFjdCAnMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJwotZGRzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJwotZGRzdWIyMDkgc3VidHJhY3QgJzAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicKLWRkc3ViMjEwIHN1YnRyYWN0ICcwJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKLWRkc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScKLWRkc3ViMjEyIHN1YnRyYWN0ICcwJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0JwotZGRzdWIyMTMgc3VidHJhY3QgJzAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCi1kZHN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcKLQotLS0gbW9yZSBmaXhlZCwgTEhTIHN3YXBzIFtyZWFsbHkgdGhlIHNhbWUgYXMgdGVzdGNhc2VzIHVuZGVyIGFkZF0KLWRkc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcKLWRkc3ViMjIxIHN1YnRyYWN0ICctNTYyNjdFLTExJyAwICAtPiAnLTUuNjI2N0UtNycKLWRkc3ViMjIyIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAwICAtPiAnLTAuMDAwMDA1NjI2NycKLWRkc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3JwotZGRzdWIyMjQgc3VidHJhY3QgJy01NjI2N0UtOCcgIDAgIC0+ICctMC4wMDA1NjI2NycKLWRkc3ViMjI1IHN1YnRyYWN0ICctNTYyNjdFLTcnICAwICAtPiAnLTAuMDA1NjI2NycKLWRkc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3JwotZGRzdWIyMjcgc3VidHJhY3QgJy01NjI2N0UtNScgIDAgIC0+ICctMC41NjI2NycKLWRkc3ViMjI4IHN1YnRyYWN0ICctNTYyNjdFLTInICAwICAtPiAnLTU2Mi42NycKLWRkc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycKLWRkc3ViMjMwIHN1YnRyYWN0ICctNTYyNjdFLTAnICAwICAtPiAnLTU2MjY3JwotLS0gc3ltbWV0cnkgLi4uCi1kZHN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcKLWRkc3ViMjQxIHN1YnRyYWN0IDAgJy01NjI2N0UtMTEnICAtPiAnNS42MjY3RS03JwotZGRzdWIyNDIgc3VidHJhY3QgMCAnLTU2MjY3RS0xMCcgIC0+ICcwLjAwMDAwNTYyNjcnCi1kZHN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3JwotZGRzdWIyNDQgc3VidHJhY3QgMCAnLTU2MjY3RS04JyAgIC0+ICcwLjAwMDU2MjY3JwotZGRzdWIyNDUgc3VidHJhY3QgMCAnLTU2MjY3RS03JyAgIC0+ICcwLjAwNTYyNjcnCi1kZHN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3JwotZGRzdWIyNDcgc3VidHJhY3QgMCAnLTU2MjY3RS01JyAgIC0+ICcwLjU2MjY3JwotZGRzdWIyNDggc3VidHJhY3QgMCAnLTU2MjY3RS0yJyAgIC0+ICc1NjIuNjcnCi1kZHN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKLWRkc3ViMjUwIHN1YnRyYWN0IDAgJy01NjI2N0UtMCcgICAtPiAnNTYyNjcnCi0KLS0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkCi1kZHN1YjMwMSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScKLWRkc3ViMzAyIHN1YnRyYWN0ICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcwLjIzNDU2Nzc4JwotCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKLWRkc3ViMzIxIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JwotZGRzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnCi1kZHN1YjMyMyBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzAuOTk5NicKLWRkc3ViMzI0IHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMC45OTk1JwotZGRzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4JwotZGRzdWIzMjYgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAxJyAtPiAnMC45OTk5JwotZGRzdWIzMjcgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAyJyAtPiAnMS4wMDAwJwotZGRzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJwotCi0tLSBpbnRlcm5hbCBib3VuZGFyaWVzCi1kZHN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycKLWRkc3ViMzQ3IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MCcgICAtPiAnOTk5OTk5OTk5OTkzMCcKLWRkc3ViMzQ4IHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAnICAgLT4gJzk5OTk5OTk5OTkzMDAnCi1kZHN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcKLWRkc3ViMzUwIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMCcgICAtPiAnOTk5OTk5OTkzMDAwMCcKLWRkc3ViMzUxIHN1YnRyYWN0ICcxMDAwMGUrOScgICc3MDAwMDAnICAgLT4gJzk5OTk5OTkzMDAwMDAnCi1kZHN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycKLWRkc3ViMzUzIHN1YnRyYWN0ICc3MCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTkzMCcKLWRkc3ViMzU0IHN1YnRyYWN0ICc3MDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTkzMDAnCi1kZHN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcKLWRkc3ViMzU2IHN1YnRyYWN0ICc3MDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTkzMDAwMCcKLWRkc3ViMzU3IHN1YnRyYWN0ICc3MDAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTkzMDAwMDAnCi0KLS0tIHplcm8gcHJlc2VydmF0aW9uCi1kZHN1YjM2MSBzdWJ0cmFjdCAxICcwLjAwMDEnIC0+ICcwLjk5OTknCi1kZHN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScKLWRkc3ViMzYzIHN1YnRyYWN0IDEgJzAuMDAwMDAxJyAtPiAnMC45OTk5OTknCi1kZHN1YjM2NCBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCi1kZHN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWIzNjYgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KLWRkc3ViMzcwIHN1YnRyYWN0IDEgIDAgIC0+IDEKLWRkc3ViMzcxIHN1YnRyYWN0IDEgMC4gIC0+IDEKLWRkc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMAotZGRzdWIzNzMgc3VidHJhY3QgMSAwLjAgLT4gMS4wCi1kZHN1YjM3NCBzdWJ0cmFjdCAgMCAgMSAtPiAtMQotZGRzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTEKLWRkc3ViMzc2IHN1YnRyYWN0ICAuMCAxIC0+IC0xLjAKLWRkc3ViMzc3IHN1YnRyYWN0IDAuMCAxIC0+IC0xLjAKLQotLS0gbGVhZGluZyAwIGRpZ2l0IGJlZm9yZSByb3VuZAotZGRzdWI5MTAgc3VidHJhY3QgLTEwMzUxOTM2MiAtNTE4OTc5NTUuMyAtPiAtNTE2MjE0MDYuNwotZGRzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTEKLQotZGRzdWI5MjAgc3VidHJhY3QgMzMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjYgLT4gMjk5Ljk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViOTIyIHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAxMjM0NTY1IC0+ICA5OS45OTk5OTk5OTk5OTk5NQotZGRzdWI5MjMgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDEyMzQ1NjQgLT4gIDk5Ljk5OTk5OTk5OTk5OTk2Ci1kZHN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMiBSb3VuZGVkCi1kZHN1YjkyNSBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMTIzNDU2MCAtPiAgOTAuMDAwMDAwMDAwMDAwMDAKLWRkc3ViOTI2IHN1YnRyYWN0IDEzMy4wMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAxMjM0NTYxIC0+ICA4OS45OTk5OTk5OTk5OTk5OQotZGRzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk0Ci1kZHN1YjkyOCBzdWJ0cmFjdCAxMDEuMDAwMDAwMDEyMzQ1NiA5MS4wMDAwMDAwMTIzNDU2NiAtPiAgIDkuOTk5OTk5OTk5OTk5OTQKLWRkc3ViOTI5IHN1YnRyYWN0IDEwMS4wMDAwMDAwMTIzNDU2IDk5LjAwMDAwMDAxMjM0NTY2IC0+ICAgMS45OTk5OTk5OTk5OTk5NAotCi0tLSBtb3JlIExIUyBzd2FwcyBbd2VyZSBmaXhlZF0KLWRkc3ViMzkwIHN1YnRyYWN0ICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JwotZGRzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKLWRkc3ViMzkyIHN1YnRyYWN0ICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKLWRkc3ViMzkzIHN1YnRyYWN0ICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JwotZGRzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCi1kZHN1YjM5NSBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKLWRkc3ViMzk2IHN1YnRyYWN0ICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JwotZGRzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKLWRkc3ViMzk4IHN1YnRyYWN0ICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCi1kZHN1YjM5OSBzdWJ0cmFjdCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCi1kZHN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JwotZGRzdWI0MDEgc3VidHJhY3QgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JwotZGRzdWI0MDIgc3VidHJhY3QgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCi1kZHN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKLWRkc3ViNDA0IHN1YnRyYWN0ICctNUUwJyAgICAgICAgIDAgLT4gICctNScKLWRkc3ViNDA1IHN1YnRyYWN0ICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCi1kZHN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKLWRkc3ViNDA3IHN1YnRyYWN0ICctNUUxNScgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKLWRkc3ViNDA4IHN1YnRyYWN0ICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgUm91bmRlZAotZGRzdWI0MDkgc3VidHJhY3QgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkCi1kZHN1YjQxMCBzdWJ0cmFjdCAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKLWRkc3ViNDExIHN1YnRyYWN0ICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZAotCi0tLSBtb3JlIFJIUyBzd2FwcyBbd2VyZSBmaXhlZF0KLWRkc3ViNDIwIHN1YnRyYWN0IDAgICctNTYyNjdFLTEwJyAtPiAgJzAuMDAwMDA1NjI2NycKLWRkc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3JwotZGRzdWI0MjIgc3VidHJhY3QgMCAgJy01NjI2N0UtNScgIC0+ICAnMC41NjI2NycKLWRkc3ViNDIzIHN1YnRyYWN0IDAgICctNTYyNjdFLTQnICAtPiAgJzUuNjI2NycKLWRkc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycKLWRkc3ViNDI1IHN1YnRyYWN0IDAgICctNTYyNjdFLTInICAtPiAgJzU2Mi42NycKLWRkc3ViNDI2IHN1YnRyYWN0IDAgICctNTYyNjdFLTEnICAtPiAgJzU2MjYuNycKLWRkc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3JwotZGRzdWI0Mjggc3VidHJhY3QgMCAgJy01RS0xMCcgICAgIC0+ICAnNUUtMTAnCi1kZHN1YjQyOSBzdWJ0cmFjdCAwICAnLTVFLTcnICAgICAgLT4gICc1RS03JwotZGRzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnCi1kZHN1YjQzMSBzdWJ0cmFjdCAwICAnLTVFLTUnICAgICAgLT4gICcwLjAwMDA1JwotZGRzdWI0MzIgc3VidHJhY3QgMCAgJy01RS00JyAgICAgIC0+ICAnMC4wMDA1JwotZGRzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41JwotZGRzdWI0MzQgc3VidHJhY3QgMCAgJy01RTAnICAgICAgIC0+ICAnNScKLWRkc3ViNDM1IHN1YnRyYWN0IDAgICctNUUxJyAgICAgICAtPiAgJzUwJwotZGRzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJwotZGRzdWI0Mzcgc3VidHJhY3QgMCAgJy01RTE1JyAgICAgIC0+ICAnNTAwMDAwMDAwMDAwMDAwMCcKLWRkc3ViNDM4IHN1YnRyYWN0IDAgICctNUUxNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxNicgICBSb3VuZGVkCi1kZHN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMTcnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZAotZGRzdWI0NDAgc3VidHJhY3QgMCAgJy01RTE4JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKLWRkc3ViNDQxIHN1YnRyYWN0IDAgICctNUUxMDAnICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkCi0KLQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KLWRkc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKLWRkc3ViNDYyIHN1YnRyYWN0ICcxRSsxMicgJy0xLjExMScgICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnCi1kZHN1YjQ2MyBzdWJ0cmFjdCAnMS4xMTEnICAnLTFFKzEyJyAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJwotZGRzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5JwotZGRzdWI0NjUgc3VidHJhY3QgJzdFKzE1JyAnMScgICAgICAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JwotZGRzdWI0NjYgc3VidHJhY3QgJzdFKzEyJyAnLTEuMTExJyAgIC0+ICc3MDAwMDAwMDAwMDAxLjExMScKLWRkc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCi1kZHN1YjQ2OCBzdWJ0cmFjdCAnLTEnICAgICctN0UrMTUnICAgLT4gJzY5OTk5OTk5OTk5OTk5OTknCi0KLS0tICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQotZGRzdWI0NzAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYzJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzUgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0NzYgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU3JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZGRzdWI0Nzcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKLWRkc3ViNDc4IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScKLWRkc3ViNDc5IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OCcKLWRkc3ViNDgwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycKLWRkc3ViNDgxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicKLWRkc3ViNDgyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NScKLWRkc3ViNDgzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcKLQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncwotcm91bmRpbmc6IGhhbGZfdXAKLWRkc3ViNTAwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JwotZGRzdWI1MDEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MDkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MTYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCi1kZHN1YjUxNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjUxOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjUxOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRkc3ViNTIwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JwotZGRzdWI1MjEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MjQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1Mjcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI1Mjggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1Mjkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1MzYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnCi1kZHN1YjUzNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjUzOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjUzOSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgotZGRzdWI1NDAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1NDEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI1NDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZGRzdWI1NTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknCi1kZHN1YjU1MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1NCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1NyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1OCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU1OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2MCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2NCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjU2NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcKLWRkc3ViNTY3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNTY4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNTY5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc3ltbWV0cnkuLi4KLXJvdW5kaW5nOiBoYWxmX3VwCi1kZHN1YjYwMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCi1kZHN1YjYwMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MDIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjAzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYwNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MDUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjA2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYwNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MDggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjA5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYxMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MTEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjEyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYxMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MTQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjE1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYxNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCi1kZHN1YjYxNyBzdWJ0cmFjdCAxLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MTggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjE5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRkc3ViNjIwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScKLWRkc3ViNjIxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYyMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MjMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjI0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYyNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MjYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjI3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYyOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2Mjkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjMwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYzMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MzIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjMzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYzNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2MzUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjM2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcKLWRkc3ViNjM3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjYzOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2Mzkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1kZHN1YjY0MCBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NDEgc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjQyIHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1kZHN1YjY1MCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknCi1kZHN1YjY1MSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NTIgc3VidHJhY3QgMC4wMDAwMDEgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjUzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjY1NCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NTUgc3VidHJhY3QgMC40OSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjU2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjY1NyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NTggc3VidHJhY3QgMC41ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjU5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjY2MCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NjEgc3VidHJhY3QgMC41MSAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjYyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjY2MyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2NjQgc3VidHJhY3QgMC45OTk5OSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjY1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kZHN1YjY2NiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnCi1kZHN1YjY2NyBzdWJ0cmFjdCAxLjAwMDAwMDAxICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotZGRzdWI2Njggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLWRkc3ViNjY5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gbG90cyBvZiBsZWFkaW5nIHplcm9zIGluIGludGVybWVkaWF0ZSByZXN1bHQsIGFuZCBzaG93aW5nIGVmZmVjdHMgb2YKLS0tIGlucHV0IHJvdW5kaW5nIHdvdWxkIGhhdmUgYWZmZWN0ZWQgdGhlIGZvbGxvd2luZwotcm91bmRpbmc6IGhhbGZfdXAKLWRkc3ViNjcwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKLWRkc3ViNjcxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKLWRkc3ViNjcyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCi1kZHN1YjY3MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQotZGRzdWI2NzQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKLQotcm91bmRpbmc6IGhhbGZfZXZlbgotZGRzdWI2ODAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQotZGRzdWI2ODEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQotZGRzdWI2ODIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKLWRkc3ViNjgzIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41Ci1kZHN1YjY4NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQotCi1kZHN1YjY4NSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuMScgLT4gMC45Ci1kZHN1YjY4NiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuOScgLT4gMC4xCi1kZHN1YjY4NyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguMScgLT4gLTAuMQotZGRzdWI2ODggc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjUnIC0+IC0wLjUKLWRkc3ViNjg5IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAtMC45Ci0KLXJvdW5kaW5nOiBkb3duCi1kZHN1YjY5MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45Ci1kZHN1YjY5MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCi1kZHN1YjY5MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQotZGRzdWI2OTMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKLWRkc3ViNjk0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45Ci0KLS0tIFNwZWNpYWxzCi1kZHN1Yjc4MCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4MSBzdWJ0cmFjdCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4MiBzdWJ0cmFjdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4MyBzdWJ0cmFjdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4NCBzdWJ0cmFjdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4NSBzdWJ0cmFjdCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4NyBzdWJ0cmFjdCAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4OCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc4OSBzdWJ0cmFjdCAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc5MCBzdWJ0cmFjdCAgMCAgICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc5MSBzdWJ0cmFjdCAgMSAgICAgSW5mICAgLT4gLUluZmluaXR5Ci1kZHN1Yjc5MiBzdWJ0cmFjdCAgMTAwMCAgSW5mICAgLT4gLUluZmluaXR5Ci0KLWRkc3ViODAwIHN1YnRyYWN0ICBJbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4MDEgc3VidHJhY3QgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDIgc3VidHJhY3QgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDMgc3VidHJhY3QgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDQgc3VidHJhY3QgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDUgc3VidHJhY3QgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDYgc3VidHJhY3QgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDcgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDggc3VidHJhY3QgLTEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQotZGRzdWI4MDkgc3VidHJhY3QgLUluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1YjgxMCBzdWJ0cmFjdCAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5Ci1kZHN1YjgxMSBzdWJ0cmFjdCAtMCAgICAtSW5mICAgLT4gIEluZmluaXR5Ci1kZHN1YjgxMiBzdWJ0cmFjdCAgMCAgICAtSW5mICAgLT4gIEluZmluaXR5Ci1kZHN1YjgxMyBzdWJ0cmFjdCAgMSAgICAtSW5mICAgLT4gIEluZmluaXR5Ci1kZHN1YjgxNCBzdWJ0cmFjdCAgMTAwMCAtSW5mICAgLT4gIEluZmluaXR5Ci1kZHN1YjgxNSBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5Ci0KLWRkc3ViODIxIHN1YnRyYWN0ICBOYU4gICBJbmYgICAtPiAgTmFOCi1kZHN1YjgyMiBzdWJ0cmFjdCAtTmFOICAgMTAwMCAgLT4gLU5hTgotZGRzdWI4MjMgc3VidHJhY3QgIE5hTiAgIDEgICAgIC0+ICBOYU4KLWRkc3ViODI0IHN1YnRyYWN0ICBOYU4gICAwICAgICAtPiAgTmFOCi1kZHN1YjgyNSBzdWJ0cmFjdCAgTmFOICAtMCAgICAgLT4gIE5hTgotZGRzdWI4MjYgc3VidHJhY3QgIE5hTiAgLTEgICAgIC0+ICBOYU4KLWRkc3ViODI3IHN1YnRyYWN0ICBOYU4gIC0xMDAwICAtPiAgTmFOCi1kZHN1YjgyOCBzdWJ0cmFjdCAgTmFOICAtSW5mICAgLT4gIE5hTgotZGRzdWI4Mjkgc3VidHJhY3QgLU5hTiAgIE5hTiAgIC0+IC1OYU4KLWRkc3ViODMwIHN1YnRyYWN0IC1JbmYgICBOYU4gICAtPiAgTmFOCi1kZHN1YjgzMSBzdWJ0cmFjdCAtMTAwMCAgTmFOICAgLT4gIE5hTgotZGRzdWI4MzIgc3VidHJhY3QgLTEgICAgIE5hTiAgIC0+ICBOYU4KLWRkc3ViODMzIHN1YnRyYWN0IC0wICAgICBOYU4gICAtPiAgTmFOCi1kZHN1YjgzNCBzdWJ0cmFjdCAgMCAgICAgTmFOICAgLT4gIE5hTgotZGRzdWI4MzUgc3VidHJhY3QgIDEgICAgIE5hTiAgIC0+ICBOYU4KLWRkc3ViODM2IHN1YnRyYWN0ICAxMDAwIC1OYU4gICAtPiAtTmFOCi1kZHN1YjgzNyBzdWJ0cmFjdCAgSW5mICAgTmFOICAgLT4gIE5hTgotCi1kZHN1Yjg0MSBzdWJ0cmFjdCAgc05hTiAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODQyIHN1YnRyYWN0IC1zTmFOICAxMDAwICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NDMgc3VidHJhY3QgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg0NCBzdWJ0cmFjdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODQ1IHN1YnRyYWN0ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NDYgc3VidHJhY3QgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg0NyBzdWJ0cmFjdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODQ4IHN1YnRyYWN0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NDkgc3VidHJhY3QgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg1MCBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODUxIHN1YnRyYWN0IC1JbmYgLXNOYU4gICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NTIgc3VidHJhY3QgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg1MyBzdWJ0cmFjdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODU0IHN1YnRyYWN0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NTUgc3VidHJhY3QgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg1NiBzdWJ0cmFjdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViODU3IHN1YnRyYWN0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZGRzdWI4NTggc3VidHJhY3QgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg1OSBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZGRzdWI4NjEgc3VidHJhY3QgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKLWRkc3ViODYyIHN1YnRyYWN0IC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCi1kZHN1Yjg2MyBzdWJ0cmFjdCAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMwotZGRzdWI4NjQgc3VidHJhY3QgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKLWRkc3ViODY1IHN1YnRyYWN0ICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41Ci1kZHN1Yjg2NiBzdWJ0cmFjdCAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKLWRkc3ViODY3IHN1YnRyYWN0IC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQotZGRzdWI4Njggc3VidHJhY3QgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCi1kZHN1Yjg2OSBzdWJ0cmFjdCAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCi1kZHN1Yjg3MSBzdWJ0cmFjdCAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3MiBzdWJ0cmFjdCAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3MyBzdWJ0cmFjdCAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3NCBzdWJ0cmFjdCAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3NSBzdWJ0cmFjdCAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3NiBzdWJ0cmFjdCAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3NyBzdWJ0cmFjdCAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3OCBzdWJ0cmFjdCAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg3OSBzdWJ0cmFjdCAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg4MCBzdWJ0cmFjdCAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCi1kZHN1Yjg4MSBzdWJ0cmFjdCAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGVkZ2UgY2FzZSBzcGlsbHMKLWRkc3ViOTAxIHN1YnRyYWN0ICAyLkUtMyAgMS4wMDIgIC0+IC0xLjAwMAotZGRzdWI5MDIgc3VidHJhY3QgIDIuMEUtMyAgMS4wMDIgIC0+IC0xLjAwMDAKLWRkc3ViOTAzIHN1YnRyYWN0ICAyLjAwRS0zICAxLjAwMjAgIC0+IC0xLjAwMDAwCi1kZHN1YjkwNCBzdWJ0cmFjdCAgMi4wMDBFLTMgIDEuMDAyMDAgIC0+IC0xLjAwMDAwMAotZGRzdWI5MDUgc3VidHJhY3QgIDIuMDAwMEUtMyAgMS4wMDIwMDAgIC0+IC0xLjAwMDAwMDAKLWRkc3ViOTA2IHN1YnRyYWN0ICAyLjAwMDAwRS0zICAxLjAwMjAwMDAgIC0+IC0xLjAwMDAwMDAwCi1kZHN1YjkwNyBzdWJ0cmFjdCAgMi4wMDAwMDBFLTMgIDEuMDAyMDAwMDAgIC0+IC0xLjAwMDAwMDAwMAotZGRzdWI5MDggc3VidHJhY3QgIDIuMDAwMDAwMEUtMyAgMS4wMDIwMDAwMDAgIC0+IC0xLjAwMDAwMDAwMDAKLQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzIGNvdmVyZWQgdW5kZXIgQWRkCi0KLS0tIE51bGwgdGVzdHMKLWRkc3ViOTk5MCBzdWJ0cmFjdCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkc3ViOTk5MSBzdWJ0cmFjdCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkU3VidHJhY3QuZGVjVGVzdCAtLSBkZWNEb3VibGUgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY0RvdWJsZXMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjRG91YmxlDQorcHJlY2lzaW9uOiAgIDE2DQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCitkZHN1YjAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJw0KK2Rkc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnDQorZGRzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnDQorZGRzdWIwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScNCitkZHN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJw0KK2Rkc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnDQorZGRzdWIwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnDQorDQorZGRzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnDQorZGRzdWIwMTIgc3VidHJhY3QgLTEgICAxICAtPiAnLTInDQorZGRzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnDQorZGRzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnDQorZGRzdWIwMTUgc3VidHJhY3QgLTIgICAyICAtPiAnLTQnDQorZGRzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnDQorZGRzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnDQorDQorZGRzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcNCitkZHN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJw0KK2Rkc3ViMDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnDQorZGRzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycNCitkZHN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0Jw0KK2Rkc3ViMDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnDQorZGRzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScNCisNCitkZHN1YjAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwDQorZGRzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQ0KK2Rkc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgNCitkZHN1YjAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwDQorZGRzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQ0KK2Rkc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTINCitkZHN1YjAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMA0KK2Rkc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExDQorZGRzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTINCisNCitkZHN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1Jw0KK2Rkc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnDQorZGRzdWIwNDIgc3VidHJhY3QgJy01JyAgICctMycgICAtPiAnLTInDQorZGRzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScNCitkZHN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnDQorZGRzdWIwNDUgc3VidHJhY3QgJzEuMycgICcwLjMnICAtPiAnMS4wJw0KK2Rkc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnDQorDQorZGRzdWIwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScNCitkZHN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJw0KKw0KK2Rkc3ViMDYwIHN1YnRyYWN0ICc3MCcgICAgJzEwMDAwZSsxNicgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMTYnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OUUrMTknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViMDYzIHN1YnRyYWN0ICc3MDAwMCcgICAgJzEwMDAwZSsxNicgLT4gJy05Ljk5OTk5OTk5OTk5OTk5M0UrMTknIFJvdW5kZWQNCitkZHN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZA0KKyAgLS0gc3ltbWV0cnk6DQorZGRzdWIwNjUgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzE2JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5RSsxOScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWIwNjggc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTNFKzE5JyBSb3VuZGVkDQorZGRzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSsxNicgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTMwRSsxOScgUm91bmRlZA0KKw0KKyAgLS0gc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzDQorZGRzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJw0KK2Rkc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnDQorZGRzdWIwOTIgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcNCitkZHN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJw0KK2Rkc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnDQorZGRzdWIwOTUgc3VidHJhY3QgJzMnICAgICcuMycgICAtPiAnMi43Jw0KK2Rkc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycNCitkZHN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnDQorZGRzdWIwOTggc3VidHJhY3QgJzMuMDAnICcuMycgICAtPiAnMi43MCcNCitkZHN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJw0KK2Rkc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnDQorZGRzdWIxMDEgc3VidHJhY3QgJzMnICAgICctMycgICAtPiAnNicNCitkZHN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnDQorZGRzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43Jw0KK2Rkc3ViMTA0IHN1YnRyYWN0ICczLjAnICAnMC4zJyAgLT4gJzIuNycNCitkZHN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJw0KK2Rkc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcNCitkZHN1YjEwNyBzdWJ0cmFjdCAnMycgICAgJyszLjAnIC0+ICcwLjAnDQorZGRzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJw0KKw0KKy0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uDQorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQ0KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNw0KKy0tIHdpdGggaW5wdXQgcm91bmRpbmcuDQorZGRzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04Jw0KK2Rkc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcNCitkZHN1YjEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnDQorZGRzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04Jw0KK2Rkc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcNCitkZHN1YjEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcNCitkZHN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcNCitkZHN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcNCitkZHN1YjEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcNCitkZHN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcNCitkZHN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcNCitkZHN1YjEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnDQorZGRzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04Jw0KK2Rkc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcNCitkZHN1YjEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnDQorZGRzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04Jw0KK2Rkc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04Jw0KK2Rkc3ViMTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04Jw0KK2Rkc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04Jw0KK2Rkc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04Jw0KK2Rkc3ViMTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04Jw0KK2Rkc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04Jw0KK2Rkc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05Jw0KK2Rkc3ViMTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScNCitkZHN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcNCitkZHN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnDQorZGRzdWIxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04Jw0KKw0KKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0NCitkZHN1YjE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScNCitkZHN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnDQorZGRzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknDQorZGRzdWIxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicNCitkZHN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcNCitkZHN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3Jw0KK2Rkc3ViMTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicNCitkZHN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJw0KK2Rkc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicNCitkZHN1YjE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJw0KK2Rkc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicNCitkZHN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnDQorZGRzdWIxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnDQorZGRzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInDQorZGRzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnDQorLS0gMC4gb24gbGVmdA0KK2Rkc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnDQorZGRzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnDQorZGRzdWIxODIgc3VidHJhY3QgJzAuMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCitkZHN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInDQorZGRzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcNCitkZHN1YjE4NSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQorZGRzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInDQorZGRzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJw0KK2Rkc3ViMTg4IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KK2Rkc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicNCitkZHN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicNCitkZHN1YjE5MSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCitkZHN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jw0KK2Rkc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInDQorZGRzdWIxOTQgc3VidHJhY3QgJzAuMCcgICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQ0KK2Rkc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJw0KK2Rkc3ViMjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycNCitkZHN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCitkZHN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJw0KK2Rkc3ViMjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jw0KK2Rkc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQorZGRzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJw0KK2Rkc3ViMjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnDQorZGRzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KK2Rkc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInDQorZGRzdWIyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jw0KK2Rkc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCitkZHN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcNCitkZHN1YjIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicNCitkZHN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCisNCistLSBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSB0aGUgc2FtZSBhcyB0ZXN0Y2FzZXMgdW5kZXIgYWRkXQ0KK2Rkc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcNCitkZHN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnDQorZGRzdWIyMjIgc3VidHJhY3QgJy01NjI2N0UtMTAnIDAgIC0+ICctMC4wMDAwMDU2MjY3Jw0KK2Rkc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3Jw0KK2Rkc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnDQorZGRzdWIyMjUgc3VidHJhY3QgJy01NjI2N0UtNycgIDAgIC0+ICctMC4wMDU2MjY3Jw0KK2Rkc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3Jw0KK2Rkc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnDQorZGRzdWIyMjggc3VidHJhY3QgJy01NjI2N0UtMicgIDAgIC0+ICctNTYyLjY3Jw0KK2Rkc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycNCitkZHN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycNCistLSBzeW1tZXRyeSAuLi4NCitkZHN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcNCitkZHN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycNCitkZHN1YjI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCitkZHN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3Jw0KK2Rkc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycNCitkZHN1YjI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycNCitkZHN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3Jw0KK2Rkc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCitkZHN1YjI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycNCitkZHN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCitkZHN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KKw0KKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkDQorZGRzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknDQorZGRzdWIzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnDQorDQorLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQorZGRzdWIzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQorZGRzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnDQorZGRzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnDQorZGRzdWIzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnDQorZGRzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4Jw0KK2Rkc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScNCitkZHN1YjMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnDQorZGRzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJw0KKw0KKy0tIGludGVybmFsIGJvdW5kYXJpZXMNCitkZHN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycNCitkZHN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnDQorZGRzdWIzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcNCitkZHN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcNCitkZHN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnDQorZGRzdWIzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcNCitkZHN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycNCitkZHN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnDQorZGRzdWIzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcNCitkZHN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcNCitkZHN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnDQorZGRzdWIzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcNCisNCistLSB6ZXJvIHByZXNlcnZhdGlvbg0KK2Rkc3ViMzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScNCitkZHN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScNCitkZHN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5Jw0KK2Rkc3ViMzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCitkZHN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitkZHN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxDQorZGRzdWIzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQ0KK2Rkc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMA0KK2Rkc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMA0KK2Rkc3ViMzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xDQorZGRzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTENCitkZHN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wDQorZGRzdWIzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMA0KKw0KKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQNCitkZHN1YjkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43DQorZGRzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTENCisNCitkZHN1YjkyMCBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NiAtPiAyOTkuOTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTUNCitkZHN1YjkyMyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU2NCAtPiAgOTkuOTk5OTk5OTk5OTk5OTYNCitkZHN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMiBSb3VuZGVkDQorZGRzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwDQorZGRzdWI5MjYgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjEgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5DQorZGRzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk0DQorZGRzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk0DQorZGRzdWI5Mjkgc3VidHJhY3QgMTAxLjAwMDAwMDAxMjM0NTYgOTkuMDAwMDAwMDEyMzQ1NjYgLT4gICAxLjk5OTk5OTk5OTk5OTk0DQorDQorLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQorZGRzdWIzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQorZGRzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCitkZHN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQorZGRzdWIzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQorZGRzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQorZGRzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQorZGRzdWIzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQorZGRzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCitkZHN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KK2Rkc3ViMzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCitkZHN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KK2Rkc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCitkZHN1YjQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCitkZHN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCitkZHN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQorZGRzdWI0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCitkZHN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCitkZHN1YjQwNyBzdWJ0cmFjdCAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQorZGRzdWI0MDggc3VidHJhY3QgJy01RTE2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTYnICBSb3VuZGVkDQorZGRzdWI0MDkgc3VidHJhY3QgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkDQorZGRzdWI0MTAgc3VidHJhY3QgJy01RTE4JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICBSb3VuZGVkDQorZGRzdWI0MTEgc3VidHJhY3QgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQorDQorLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQorZGRzdWI0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3Jw0KK2Rkc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3Jw0KK2Rkc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnDQorZGRzdWI0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3Jw0KK2Rkc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycNCitkZHN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnDQorZGRzdWI0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43Jw0KK2Rkc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3Jw0KK2Rkc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJw0KK2Rkc3ViNDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnDQorZGRzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnDQorZGRzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScNCitkZHN1YjQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnDQorZGRzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41Jw0KK2Rkc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnDQorZGRzdWI0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnDQorZGRzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJw0KK2Rkc3ViNDM3IHN1YnRyYWN0IDAgICctNUUxNScgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAnDQorZGRzdWI0Mzggc3VidHJhY3QgMCAgJy01RTE2JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCitkZHN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMTcnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMEUrMTcnICAgUm91bmRlZA0KK2Rkc3ViNDQwIHN1YnRyYWN0IDAgICctNUUxOCcgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgICBSb3VuZGVkDQorZGRzdWI0NDEgc3VidHJhY3QgMCAgJy01RTEwMCcgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCisNCisNCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KK2Rkc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCitkZHN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJw0KK2Rkc3ViNDYzIHN1YnRyYWN0ICcxLjExMScgICctMUUrMTInICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnDQorZGRzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KK2Rkc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScNCitkZHN1YjQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJw0KK2Rkc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnDQorZGRzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5Jw0KKw0KKy0tICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NQ0KK2Rkc3ViNDcwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI0NzIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTYxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNDczIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI0NzUgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU4JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNDc2IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KK2Rkc3ViNDc4IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScNCitkZHN1YjQ3OSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnDQorZGRzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk3Jw0KK2Rkc3ViNDgxIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1MicgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NicNCitkZHN1YjQ4MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnDQorZGRzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk0Jw0KKw0KKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCityb3VuZGluZzogaGFsZl91cA0KK2Rkc3ViNTAwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5Jw0KK2Rkc3ViNTAxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MDMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTA0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MDYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTA3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MDkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTEwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MTIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTEzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MTUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTE2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4Jw0KK2Rkc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUxOCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MTkgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkZHN1YjUyMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScNCitkZHN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MjIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTIzIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MjUgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTI2IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1Mjggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTI5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MzEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTMyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1MzQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTM1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcNCitkZHN1YjUzNyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1Mzggc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KK2Rkc3ViNTQwIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NDIgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBkb3duDQorZGRzdWI1NTAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODknDQorZGRzdWI1NTEgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU1MyBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NTQgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU1NiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NTcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU1OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NjAgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU2MiBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NjMgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU2NSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI1NjYgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODgnDQorZGRzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNTY4IHN1YnRyYWN0ICcxMjMxMjM0NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjU2OSBzdWJ0cmFjdCAnMTIzMTIzNDU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3ltbWV0cnkuLi4NCityb3VuZGluZzogaGFsZl91cA0KK2Rkc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCitkZHN1YjYwMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjAyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYwNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjA1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYwNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjA4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYxMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjExIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYxMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjE0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYxNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQorZGRzdWI2MTcgc3VidHJhY3QgMS4wMDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjE5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2Rkc3ViNjIwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCitkZHN1YjYyMSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MjMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYyNCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MjYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYyNyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2Mjkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYzMCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MzIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYzMyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2MzUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYzNiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQorZGRzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjYzOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjM5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCitkZHN1YjY0MCBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjQxIHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2Rkc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OScNCitkZHN1YjY1MSBzdWJ0cmFjdCAwLjAwMDAwMDAwMSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjUyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY1NCBzdWJ0cmFjdCAwLjQgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjU1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY1NyBzdWJ0cmFjdCAwLjQ5OTk5OTk5OSAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjU4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY2MCBzdWJ0cmFjdCAwLjUwMDAwMSAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjYxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY2MyBzdWJ0cmFjdCAwLjkgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjY0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZGRzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY2NiBzdWJ0cmFjdCAxICAgICAgICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODgnDQorZGRzdWI2Njcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCitkZHN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KK2Rkc3ViNjY5IHN1YnRyYWN0IDEuMSAgICAgICAgICAgJzEyMzEyMzQ1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS0gbG90cyBvZiBsZWFkaW5nIHplcm9zIGluIGludGVybWVkaWF0ZSByZXN1bHQsIGFuZCBzaG93aW5nIGVmZmVjdHMgb2YNCistLSBpbnB1dCByb3VuZGluZyB3b3VsZCBoYXZlIGFmZmVjdGVkIHRoZSBmb2xsb3dpbmcNCityb3VuZGluZzogaGFsZl91cA0KK2Rkc3ViNjcwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCitkZHN1YjY3MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQorZGRzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCitkZHN1YjY3MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KK2Rkc3ViNjc0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2Rkc3ViNjgwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCitkZHN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQorZGRzdWI2ODIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCitkZHN1YjY4MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KK2Rkc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQorDQorZGRzdWI2ODUgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg3LjEnIC0+IDAuOQ0KK2Rkc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjENCitkZHN1YjY4NyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguMScgLT4gLTAuMQ0KK2Rkc3ViNjg4IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC41JyAtPiAtMC41DQorZGRzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkNCisNCityb3VuZGluZzogZG93bg0KK2Rkc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkNCitkZHN1YjY5MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xDQorZGRzdWI2OTIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjENCitkZHN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQ0KK2Rkc3ViNjk0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45DQorDQorLS0gU3BlY2lhbHMNCitkZHN1Yjc4MCBzdWJ0cmFjdCAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZGRzdWI3ODEgc3VidHJhY3QgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KK2Rkc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkZHN1Yjc4MyBzdWJ0cmFjdCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQorZGRzdWI3ODQgc3VidHJhY3QgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2Rkc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCitkZHN1Yjc4NyBzdWJ0cmFjdCAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQorZGRzdWI3ODggc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2Rkc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkNCitkZHN1Yjc5MCBzdWJ0cmFjdCAgMCAgICAgSW5mICAgLT4gLUluZmluaXR5DQorZGRzdWI3OTEgc3VidHJhY3QgIDEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2Rkc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCisNCitkZHN1YjgwMCBzdWJ0cmFjdCAgSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZGRzdWI4MDIgc3VidHJhY3QgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2Rkc3ViODAzIHN1YnRyYWN0ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkZHN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZGRzdWI4MDUgc3VidHJhY3QgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2Rkc3ViODA2IHN1YnRyYWN0ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkZHN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRzdWI4MDggc3VidHJhY3QgLTEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2Rkc3ViODA5IHN1YnRyYWN0IC1JbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkZHN1YjgxMSBzdWJ0cmFjdCAtMCAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZGRzdWI4MTIgc3VidHJhY3QgIDAgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2Rkc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkZHN1YjgxNCBzdWJ0cmFjdCAgMTAwMCAtSW5mICAgLT4gIEluZmluaXR5DQorZGRzdWI4MTUgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2Rkc3ViODIxIHN1YnRyYWN0ICBOYU4gICBJbmYgICAtPiAgTmFODQorZGRzdWI4MjIgc3VidHJhY3QgLU5hTiAgIDEwMDAgIC0+IC1OYU4NCitkZHN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTg0KK2Rkc3ViODI0IHN1YnRyYWN0ICBOYU4gICAwICAgICAtPiAgTmFODQorZGRzdWI4MjUgc3VidHJhY3QgIE5hTiAgLTAgICAgIC0+ICBOYU4NCitkZHN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTg0KK2Rkc3ViODI3IHN1YnRyYWN0ICBOYU4gIC0xMDAwICAtPiAgTmFODQorZGRzdWI4Mjggc3VidHJhY3QgIE5hTiAgLUluZiAgIC0+ICBOYU4NCitkZHN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTg0KK2Rkc3ViODMwIHN1YnRyYWN0IC1JbmYgICBOYU4gICAtPiAgTmFODQorZGRzdWI4MzEgc3VidHJhY3QgLTEwMDAgIE5hTiAgIC0+ICBOYU4NCitkZHN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTg0KK2Rkc3ViODMzIHN1YnRyYWN0IC0wICAgICBOYU4gICAtPiAgTmFODQorZGRzdWI4MzQgc3VidHJhY3QgIDAgICAgIE5hTiAgIC0+ICBOYU4NCitkZHN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTg0KK2Rkc3ViODM2IHN1YnRyYWN0ICAxMDAwIC1OYU4gICAtPiAtTmFODQorZGRzdWI4Mzcgc3VidHJhY3QgIEluZiAgIE5hTiAgIC0+ICBOYU4NCisNCitkZHN1Yjg0MSBzdWJ0cmFjdCAgc05hTiAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0MiBzdWJ0cmFjdCAtc05hTiAgMTAwMCAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0NCBzdWJ0cmFjdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0NSBzdWJ0cmFjdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0NyBzdWJ0cmFjdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0OCBzdWJ0cmFjdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1MCBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1MSBzdWJ0cmFjdCAtSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1MyBzdWJ0cmFjdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1NCBzdWJ0cmFjdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1NiBzdWJ0cmFjdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1NyBzdWJ0cmFjdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg1OSBzdWJ0cmFjdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRzdWI4NjEgc3VidHJhY3QgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjENCitkZHN1Yjg2MiBzdWJ0cmFjdCAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMg0KK2Rkc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zDQorZGRzdWI4NjQgc3VidHJhY3QgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQNCitkZHN1Yjg2NSBzdWJ0cmFjdCAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQ0KK2Rkc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQ0KK2Rkc3ViODY3IHN1YnRyYWN0IC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQ0KK2Rkc3ViODY4IHN1YnRyYWN0ICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQ0KK2Rkc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDENCitkZHN1Yjg3MSBzdWJ0cmFjdCAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzdWI4NzIgc3VidHJhY3QgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg3NCBzdWJ0cmFjdCAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZGRzdWI4NzUgc3VidHJhY3QgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg3NyBzdWJ0cmFjdCAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uDQorZGRzdWI4Nzggc3VidHJhY3QgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rkc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24NCitkZHN1Yjg4MCBzdWJ0cmFjdCAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uDQorZGRzdWI4ODEgc3VidHJhY3QgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIGVkZ2UgY2FzZSBzcGlsbHMNCitkZHN1YjkwMSBzdWJ0cmFjdCAgMi5FLTMgIDEuMDAyICAtPiAtMS4wMDANCitkZHN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMA0KK2Rkc3ViOTAzIHN1YnRyYWN0ICAyLjAwRS0zICAxLjAwMjAgIC0+IC0xLjAwMDAwDQorZGRzdWI5MDQgc3VidHJhY3QgIDIuMDAwRS0zICAxLjAwMjAwICAtPiAtMS4wMDAwMDANCitkZHN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMA0KK2Rkc3ViOTA2IHN1YnRyYWN0ICAyLjAwMDAwRS0zICAxLjAwMjAwMDAgIC0+IC0xLjAwMDAwMDAwDQorZGRzdWI5MDcgc3VidHJhY3QgIDIuMDAwMDAwRS0zICAxLjAwMjAwMDAwICAtPiAtMS4wMDAwMDAwMDANCitkZHN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cyBjb3ZlcmVkIHVuZGVyIEFkZA0KKw0KKy0tIE51bGwgdGVzdHMNCitkZHN1Yjk5OTAgc3VidHJhY3QgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGRzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kZFRvSW50ZWdyYWwuZGVjVGVzdAppbmRleCBiZjZkNjFmLi45MDBiZDRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRUb0ludGVncmFsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkVG9JbnRlZ3JhbC5kZWNUZXN0CkBAIC0xLDI1NyArMSwyNTcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZGRUb0ludGVncmFsLmRlY1Rlc3QgLS0gcm91bmQgRG91YmxlIHRvIGludGVncmFsIHZhbHVlICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKLS0tIHZhbHVlLWV4YWN0JyBvcGVyYXRpb25zIChmcm9tIElFRUUgODU0LCBsYXRlciBtb2RpZmllZCBpbiA3NTRyKS4KLS0tIEFsbCBub24temVybyByZXN1bHRzIGFyZSBkZWZpbmVkIGFzIGJlaW5nIHRob3NlIGZyb20gZWl0aGVyIGNvcHkgb3IKLS0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5Ci0tLSBlbHNld2hlcmU7IHRoZSB0ZXN0cyBoZXJlIGFyZSBmb3IgaW50ZWdyaXR5LCByb3VuZGluZyBtb2RlLCBldGMuCi0tLSBBbHNvLCBpdCBpcyBhc3N1bWVkIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCB1c2UgdGhlc2UgdGVzdHMgZm9yIGJvdGgKLS0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lCi0tLSBmdW5jdGlvbnMgKHdoaWNoIGRvIG5vdCBzZXQgSW5leGFjdCkuCi0KLS0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbAotLS0gd2hpY2ggbmV2ZXIgc2V0cyBJbmV4YWN0OyB0aGUgZGVjVGVzdCBvcGVyYXRvciBmb3IgdGhhdCBpcyBjYWxsZWQKLS0tICd0b2ludGVncmFsJyBpbnN0ZWFkIG9mICd0b2ludGVncmFseCcuCi0KLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kZGludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAotZGRpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDAKLWRkaW50eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCi1kZGludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZAotZGRpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotLS0gbmVnYXRpdmVzCi1kZGludHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAotZGRpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKLWRkaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xCi1kZGludHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSAgUm91bmRlZAotZGRpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCi1kZGludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxCi1kZGludHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzYwICAtPiAtMS4wRSs2MQotCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KLWRkaW50eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTE3JyAgIC0+ICcwJyAgICAgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JwotZGRpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JwotZGRpbnR4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKLWRkaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJwotZGRpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnCi1kZGludHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMScgICAtPiAnNS42MjY3RSsxNScKLWRkaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2JwotZGRpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnCi1kZGludHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCi1kZGludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzM4NCcgICAtPiAjNDdmZDMwMDAwMDAwMDAwMCAgQ2xhbXBlZAotCi1kZGludHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JwotZGRpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKLWRkaW50eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JwotZGRpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJwotZGRpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0JwotZGRpbnR4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzExJyAgLT4gJy01LjYyNjdFKzE1JwotZGRpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2JwotZGRpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3JwotZGRpbnR4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKLWRkaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzM4NCcgIC0+ICNjN2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkCi0KLS0tIHN1Ym5vcm1hbCBpbnB1dHMKLWRkaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDAKLQotLS0gc3BlY2lhbHMgYW5kIHplcm9zCi1kZGludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5Ci1kZGludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5Ci1kZGludHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgotZGRpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZGludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKLWRkaW50eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAotZGRpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwCi1kZGludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKLWRkaW50eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAotZGRpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCi1kZGludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKLWRkaW50eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAotZGRpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwCi1kZGludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKLWRkaW50eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQotZGRpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyCi1kZGludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKLWRkaW50eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAotZGRpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1Ci1kZGludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKLWRkaW50eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAotZGRpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wCi1kZGludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKLWRkaW50eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAotZGRpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wCi1kZGludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKLWRkaW50eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAotZGRpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxCi1kZGludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKLWRkaW50eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMwotZGRpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0Ci1kZGludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4Ci1kZGludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgotZGRpbnR4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKLWRkaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCi1kZGludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTgotZGRpbnR4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZXhhbXBsZXMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kZGludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDAKLWRkaW50eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICBSb3VuZGVkCi1kZGludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKLWRkaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3Ci1kZGludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkKLQotCi0tLSBhbGwgcm91bmRpbmcgbW9kZXMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRkaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLQotZGRpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0KLWRkaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIHVwCi0KLWRkaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGRvd24KLQotZGRpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgY2VpbGluZwotCi1kZGludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBmbG9vcgotCi1kZGludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCi1kZGludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZGRpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKLWRkaW50eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCi1kZGludHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2Ci1kZGludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3Ci1kZGludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4Ci1kZGludHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5Ci1kZGludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2Ci1kZGludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3Ci1kZGludHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4Ci1kZGludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5Ci1kZGludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0Ci1kZGludHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1Ci1kZGludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2Ci1kZGludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3Ci0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkVG9JbnRlZ3JhbC5kZWNUZXN0IC0tIHJvdW5kIERvdWJsZSB0byBpbnRlZ3JhbCB2YWx1ZSAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwNCistLSB2YWx1ZS1leGFjdCcgb3BlcmF0aW9ucyAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuDQorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcg0KKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5DQorLS0gZWxzZXdoZXJlOyB0aGUgdGVzdHMgaGVyZSBhcmUgZm9yIGludGVncml0eSwgcm91bmRpbmcgbW9kZSwgZXRjLg0KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aA0KKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lDQorLS0gZnVuY3Rpb25zICh3aGljaCBkbyBub3Qgc2V0IEluZXhhY3QpLg0KKw0KKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbA0KKy0tIHdoaWNoIG5ldmVyIHNldHMgSW5leGFjdDsgdGhlIGRlY1Rlc3Qgb3BlcmF0b3IgZm9yIHRoYXQgaXMgY2FsbGVkDQorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4NCisNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RkaW50eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwDQorZGRpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDANCitkZGludHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDA0IHRvaW50ZWdyYWx4ICAgICAgMC4yICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDA3IHRvaW50ZWdyYWx4ICAgICAgMC41ICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDEwIHRvaW50ZWdyYWx4ICAgICAgMC44ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQ0KK2RkaW50eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxICBSb3VuZGVkDQorZGRpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmVnYXRpdmVzDQorZGRpbnR4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTANCitkZGludHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMA0KK2RkaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMzQgdG9pbnRlZ3JhbHggICAgIC0wLjIgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwMzcgdG9pbnRlZ3JhbHggICAgIC0wLjUgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNDAgdG9pbnRlZ3JhbHggICAgIC0wLjggICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xDQorZGRpbnR4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgIFJvdW5kZWQNCitkZGludHgwNDQgdG9pbnRlZ3JhbHggICAgIC0xLjEgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNDcgdG9pbnRlZ3JhbHggICAgIC0xLjQgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNTAgdG9pbnRlZ3JhbHggICAgIC0xLjcgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCistLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkNCitkZGludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxDQorZGRpbnR4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSs2MCAgLT4gLTEuMEUrNjENCisNCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24NCitkZGludHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xNycgICAtPiAnMCcgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNjEgdG9pbnRlZ3JhbHggJzU2MjY3RS01JyAgICAtPiAnMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwNjUgdG9pbnRlZ3JhbHggJzU2MjY3RS0wJyAgICAtPiAnNTYyNjcnDQorZGRpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3Jw0KK2RkaW50eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnDQorZGRpbnR4MDY4IHRvaW50ZWdyYWx4ICc1NjI2N0UrOScgICAgLT4gJzUuNjI2N0UrMTMnDQorZGRpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnDQorZGRpbnR4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTEnICAgLT4gJzUuNjI2N0UrMTUnDQorZGRpbnR4MDcxIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTInICAgLT4gJzUuNjI2N0UrMTYnDQorZGRpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnDQorZGRpbnR4MDczIHRvaW50ZWdyYWx4ICcxLjIzRSs5NicgICAgLT4gJzEuMjNFKzk2Jw0KK2RkaW50eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICM0N2ZkMzAwMDAwMDAwMDAwICBDbGFtcGVkDQorDQorZGRpbnR4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnDQorZGRpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycNCitkZGludHgwODcgdG9pbnRlZ3JhbHggJy01NjI2N0UrMScgICAtPiAnLTUuNjI2N0UrNScNCitkZGludHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrOScgICAtPiAnLTUuNjI2N0UrMTMnDQorZGRpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0Jw0KK2RkaW50eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSsxMScgIC0+ICctNS42MjY3RSsxNScNCitkZGludHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTInICAtPiAnLTUuNjI2N0UrMTYnDQorZGRpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3Jw0KK2RkaW50eDA5MyB0b2ludGVncmFseCAnLTEuMjNFKzk2JyAgIC0+ICctMS4yM0UrOTYnDQorZGRpbnR4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gI2M3ZmQzMDAwMDAwMDAwMDAgIENsYW1wZWQNCisNCistLSBzdWJub3JtYWwgaW5wdXRzDQorZGRpbnR4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS0yOTkgLT4gMA0KKw0KKy0tIHNwZWNpYWxzIGFuZCB6ZXJvcw0KK2RkaW50eDEyMCB0b2ludGVncmFseCAnSW5mJyAgICAgICAtPiAgSW5maW5pdHkNCitkZGludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5DQorZGRpbnR4MTIyIHRvaW50ZWdyYWx4ICAgTmFOICAgICAgIC0+ICBOYU4NCitkZGludHgxMjMgdG9pbnRlZ3JhbHggIHNOYU4gICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZGludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCitkZGludHgxMjUgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCitkZGludHgxMjYgdG9pbnRlZ3JhbHggICAgIDAuMDAwICAgLT4gIDANCitkZGludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDANCitkZGludHgxMjggdG9pbnRlZ3JhbHggICAgIDAuMCAgICAgLT4gIDANCitkZGludHgxMjkgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCitkZGludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDANCitkZGludHgxMzEgdG9pbnRlZ3JhbHggICAgIDBFLTIgICAgLT4gIDANCitkZGludHgxMzIgdG9pbnRlZ3JhbHggICAgIDBFLTEgICAgLT4gIDANCitkZGludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDANCitkZGludHgxMzQgdG9pbnRlZ3JhbHggICAgIDBFKzEgICAgLT4gIDBFKzENCitkZGludHgxMzUgdG9pbnRlZ3JhbHggICAgIDBFKzIgICAgLT4gIDBFKzINCitkZGludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMNCitkZGludHgxMzcgdG9pbnRlZ3JhbHggICAgIDBFKzQgICAgLT4gIDBFKzQNCitkZGludHgxMzggdG9pbnRlZ3JhbHggICAgIDBFKzUgICAgLT4gIDBFKzUNCitkZGludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTANCitkZGludHgxNDAgdG9pbnRlZ3JhbHggICAgLTAuMDAgICAgLT4gLTANCitkZGludHgxNDEgdG9pbnRlZ3JhbHggICAgLTAuMCAgICAgLT4gLTANCitkZGludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCitkZGludHgxNDMgdG9pbnRlZ3JhbHggICAgLTBFLTMgICAgLT4gLTANCitkZGludHgxNDQgdG9pbnRlZ3JhbHggICAgLTBFLTIgICAgLT4gLTANCitkZGludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTANCitkZGludHgxNDYgdG9pbnRlZ3JhbHggICAgLTBFLTAgICAgLT4gLTANCitkZGludHgxNDcgdG9pbnRlZ3JhbHggICAgLTBFKzEgICAgLT4gLTBFKzENCitkZGludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzINCitkZGludHgxNDkgdG9pbnRlZ3JhbHggICAgLTBFKzMgICAgLT4gLTBFKzMNCitkZGludHgxNTAgdG9pbnRlZ3JhbHggICAgLTBFKzQgICAgLT4gLTBFKzQNCitkZGludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZGRpbnR4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgNCitkZGludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkaW50eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4DQorZGRpbnR4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCitkZGludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTg0KK2RkaW50eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZXhhbXBsZXMNCityb3VuZGluZzogICAgaGFsZl91cA0KK2RkaW50eDIwMCB0b2ludGVncmFseCAgICAgMi4xICAgIC0+IDIgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDANCitkZGludHgyMDIgdG9pbnRlZ3JhbHggICAxMDAuMCAgICAtPiAxMDAgICAgICAgICAgUm91bmRlZA0KK2RkaW50eDIwMyB0b2ludGVncmFseCAgIDEwMS41ICAgIC0+IDEwMiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjA1IHRvaW50ZWdyYWx4ICAgMTBFKzUgICAgLT4gMS4wRSs2DQorZGRpbnR4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcNCitkZGludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkNCisNCisNCistLSBhbGwgcm91bmRpbmcgbW9kZXMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorZGRpbnR4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIxMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIxNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCisNCitkZGludHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjIyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjI1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgaGFsZl9kb3duDQorDQorZGRpbnR4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIzMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDIzNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIHVwDQorDQorZGRpbnR4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI0MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI0NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGRvd24NCisNCitkZGludHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjUyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjU1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgY2VpbGluZw0KKw0KK2RkaW50eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNjIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNjUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgICBmbG9vcg0KKw0KK2RkaW50eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNzIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KK2RkaW50eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQorZGRpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCitkZGludHgyNzUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQorZGRpbnR4MzAwIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ2ICAtPiAtMjE0NzQ4MzY0Ng0KK2RkaW50eDMwMSB0b2ludGVncmFseCAtMjE0NzQ4MzY0NyAgLT4gLTIxNDc0ODM2NDcNCitkZGludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4DQorZGRpbnR4MzAzIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ5ICAtPiAtMjE0NzQ4MzY0OQ0KK2RkaW50eDMwNCB0b2ludGVncmFseCAgMjE0NzQ4MzY0NiAgLT4gIDIxNDc0ODM2NDYNCitkZGludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3DQorZGRpbnR4MzA2IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ4ICAtPiAgMjE0NzQ4MzY0OA0KK2RkaW50eDMwNyB0b2ludGVncmFseCAgMjE0NzQ4MzY0OSAgLT4gIDIxNDc0ODM2NDkNCitkZGludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0DQorZGRpbnR4MzA5IHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk1ICAtPiAgNDI5NDk2NzI5NQ0KK2RkaW50eDMxMCB0b2ludGVncmFseCAgNDI5NDk2NzI5NiAgLT4gIDQyOTQ5NjcyOTYNCitkZGludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3DQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RkWG9yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdAppbmRleCAxMzFjN2ViLi4zYzU1NTQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZGRYb3IuZGVjVGVzdApAQCAtMSwzMzcgKzEsMzM3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRkWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotcHJlY2lzaW9uOiAgIDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCi1kZHhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDAKLWRkeG9yMDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQotZGR4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCi1kZHhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDAKLWRkeG9yMDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMAotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKLWRkeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKLWRkeG9yMDA3IHhvciAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwCi1kZHhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMAotZGR4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAotZGR4b3IwMTAgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAotZGR4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAKLWRkeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwCi1kZHhvcjAxMyB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi0KLS0tIFZhcmlvdXMgbGVuZ3RocwotLS0gICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2Ci1kZHhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKLWRkeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAotZGR4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCi1kZHhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKLWRkeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAotZGR4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCi1kZHhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKLWRkeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAotZGR4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCi1kZHhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKLWRkeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAotZGR4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCi1kZHhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKLWRkeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAotZGR4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCi1kZHhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKLQotZGR4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCi1kZHhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKLWRkeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAotZGR4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCi1kZHhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKLWRkeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQotZGR4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCi1kZHhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKLWRkeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQotZGR4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCi0KLWRkeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAotZGR4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKLWRkeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKLWRkeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAotZGR4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKLWRkeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKLWRkeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAotZGR4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKLWRkeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKLWRkeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAotCi1kZHhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKLWRkeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCi1kZHhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCi1kZHhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKLWRkeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCi1kZHhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCi1kZHhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKLWRkeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCi1kZHhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCi1kZHhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKLQotZGR4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCi1kZHhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAotZGR4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAotZGR4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCi1kZHhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAotZGR4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAotZGR4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCi1kZHhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAotZGR4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAotZGR4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCi0KLWRkeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQotZGR4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKLWRkeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKLWRkeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQotZGR4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKLWRkeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKLWRkeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQotZGR4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKLWRkeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKLWRkeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQotCi1kZHhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKLWRkeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAotZGR4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCi1kZHhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKLWRkeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAotZGR4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCi1kZHhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKLWRkeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAotZGR4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCi0KLWRkeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAotZGR4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCi1kZHhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKLWRkeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAotZGR4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCi1kZHhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKLWRkeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAotZGR4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCi1kZHhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKLQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCi1kZHhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLWRkeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRAotZGR4b3IyNTAgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTEgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTIgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTMgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTQgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTUgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTYgeG9yICA4MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTcgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTggeG9yICAxMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNTkgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjAgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjEgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjIgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDIwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjMgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjQgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNjUgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QtMQotZGR4b3IyNzAgeG9yICAwMjAwMDAxMDAwMDAwMDAwIDEwMDAxMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzEgeG9yICAwNzAwMDAwMTAwMDAwMDAwIDEwMDAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzIgeG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzMgeG9yICAwOTAwMDAwMDAxMDAwMDAwIDEwMDAwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzQgeG9yICAxMDAwMDAwMDAwMTAwMDAwIDAyMDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzUgeG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzYgeG9yICAxMDAwMDAwMDAwMDAxMDAwIDA4MDAwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyNzcgeG9yICAxMDAwMDAwMDAwMDAwMTAwIDA5MDAwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBMU0QKLWRkeG9yMjgwIHhvciAgMDAxMDAwMDAwMDAwMDAwMiAxMDAwMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjgxIHhvciAgMDAwMTAwMDAwMDAwMDAwNyAxMDAwMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjgyIHhvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjgzIHhvciAgMDAwMDAxMDAwMDAwMDAwOSAxMDAwMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjg0IHhvciAgMTAwMDAwMTAwMDAwMDAwMCAwMDAxMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjg1IHhvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjg2IHhvciAgMTAwMDAwMDAxMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjg3IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kZHhvcjI4OCB4b3IgIDAwMTAwMDAwMjAwMDAwMDAgMTAwMDAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI4OSB4b3IgIDAwMDEwMDAwNzAwMDAwMDEgMTAwMDAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5MCB4b3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5MSB4b3IgIDAwMDAwMTAwOTAwMDAxMDAgMTAwMDAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5MiB4b3IgIDEwMDAwMDEwMDAwMDEwMDAgMDAwMDAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5MyB4b3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5NCB4b3IgIDEwMDAwMDAwMTAxMDAwMDAgMDAwMDAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5NSB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgMDAwMDAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzaWducwotZGR4b3IyOTYgeG9yIC0xMDAwMDAwMDAxMDAwMDAwIC0wMDAwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMjk3IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjI5OCB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IyOTkgeG9yICAxMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAwMDEwMDAwMTAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKLWRkeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzI5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjMzMiB4b3IgIDMgICAxRS0yOTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzM0IHhvciAgNSAgIDFFLTIwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjMzNSB4b3IgIDYgICAtMUUtMjAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzM3IHhvciAgOCAgIC0xRS0yOTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrMjk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzQyIHhvciAgMUUtMjk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTI5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNDQgeG9yICAxRS0yMDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzQ1IHhvciAgLTFFLTIwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS0yOTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNDcgeG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycwotZGR4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCi1kZHhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRkeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kZHhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRkeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRkeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kZHhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZGR4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRkWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNEb3VibGVzICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQorZGR4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwDQorZGR4b3IwMDIgeG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxDQorZGR4b3IwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQorZGR4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwDQorZGR4b3IwMDUgeG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAgMTEwDQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCitkZHhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQorZGR4b3IwMDcgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDANCitkZHhvcjAwOCB4b3IgMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMA0KK2RkeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCitkZHhvcjAxMCB4b3IgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQorZGR4b3IwMTEgeG9yIDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDANCitkZHhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMA0KK2RkeG9yMDEzIHhvciAwMTAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCisNCistLSBWYXJpb3VzIGxlbmd0aHMNCistLSAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAxMjM0NTY3ODkwMTIzNDU2IDEyMzQ1Njc4OTAxMjM0NTYNCitkZHhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyMiB4b3IgIDExMTExMTExMDAwMDAwMCAgICAgIDExMTExMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyMyB4b3IgICAxMTExMTExMDAwMDAwMCAgICAgICAxMTExMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyNSB4b3IgICAgIDExMTExMDAwMDAwMCAgICAgICAgIDExMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyNiB4b3IgICAgICAxMTExMDAwMDAwMCAgICAgICAgICAxMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyOCB4b3IgICAgICAgIDExMDAwMDAwMCAgICAgICAgICAgIDExMDAwMDAwMCAgLT4gIDANCitkZHhvcjAyOSB4b3IgICAgICAgICAxMDAwMDAwMCAgICAgICAgICAgICAxMDAwMDAwMCAgLT4gIDANCitkZHhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDANCitkZHhvcjAzMSB4b3IgICAgICAgICAgIDEwMDAwMCAgICAgICAgICAgICAgIDEwMDAwMCAgLT4gIDANCitkZHhvcjAzMiB4b3IgICAgICAgICAgICAxMDAwMCAgICAgICAgICAgICAgICAxMDAwMCAgLT4gIDANCitkZHhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDANCitkZHhvcjAzNCB4b3IgICAgICAgICAgICAgIDEwMCAgICAgICAgICAgICAgICAgIDEwMCAgLT4gIDANCitkZHhvcjAzNSB4b3IgICAgICAgICAgICAgICAxMCAgICAgICAgICAgICAgICAgICAxMCAgLT4gIDANCitkZHhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDANCisNCitkZHhvcjA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTEwMDAwMDAwMDANCitkZHhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDANCitkZHhvcjA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDANCitkZHhvcjA0MyB4b3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMDENCitkZHhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTENCitkZHhvcjA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTENCitkZHhvcjA0NiB4b3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTENCitkZHhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTENCitkZHhvcjA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTENCitkZHhvcjA0OSB4b3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDENCisNCitkZHhvcjA1MCB4b3IgMTExMTExMTExMSAgMSAgLT4gIDExMTExMTExMTANCitkZHhvcjA1MSB4b3IgIDExMTExMTExMSAgMSAgLT4gIDExMTExMTExMA0KK2RkeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTANCitkZHhvcjA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTANCitkZHhvcjA1NCB4b3IgICAgIDExMTExMSAgMSAgLT4gIDExMTExMA0KK2RkeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTANCitkZHhvcjA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTANCitkZHhvcjA1NyB4b3IgICAgICAgIDExMSAgMSAgLT4gIDExMA0KK2RkeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTANCitkZHhvcjA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDANCisNCitkZHhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTENCitkZHhvcjA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KK2RkeG9yMDYyIHhvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTENCitkZHhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTENCitkZHhvcjA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQ0KK2RkeG9yMDY1IHhvciAgICAgIDExMTExICAwICAtPiAgMTExMTENCitkZHhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTENCitkZHhvcjA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQ0KK2RkeG9yMDY4IHhvciAgICAgICAgIDExICAwICAtPiAgMTENCitkZHhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDENCisNCitkZHhvcjA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTANCitkZHhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMA0KK2RkeG9yMDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTANCitkZHhvcjA3MyB4b3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTANCitkZHhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMA0KK2RkeG9yMDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTANCitkZHhvcjA3NiB4b3IgMSAgICAgICAgMTExMSAgLT4gIDExMTANCitkZHhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMA0KK2RkeG9yMDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTANCitkZHhvcjA3OSB4b3IgMSAgICAgICAgICAgMSAgLT4gIDANCisNCitkZHhvcjA4MCB4b3IgMCAgMTExMTExMTExMSAgLT4gIDExMTExMTExMTENCitkZHhvcjA4MSB4b3IgMCAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK2RkeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTENCitkZHhvcjA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTENCitkZHhvcjA4NCB4b3IgMCAgICAgIDExMTExMSAgLT4gIDExMTExMQ0KK2RkeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTENCitkZHhvcjA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTENCitkZHhvcjA4NyB4b3IgMCAgICAgICAgIDExMSAgLT4gIDExMQ0KK2RkeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTENCitkZHhvcjA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDENCisNCitkZHhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDANCitkZHhvcjA5MSB4b3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAgMTAwMTAwMDANCitkZHhvcjA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDANCitkZHhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDANCitkZHhvcjA5NCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDANCitkZHhvcjA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDANCitkZHhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDANCitkZHhvcjA5NyB4b3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAgICAgMTAwMTANCitkZHhvcjA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDENCisNCitkZHhvcjEwMCB4b3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMDAwMTAwMDANCitkZHhvcjEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDANCitkZHhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDANCitkZHhvcjEwMyB4b3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAgICAxMTAwMDANCitkZHhvcjEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDANCitkZHhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDANCitkZHhvcjEwNiB4b3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAgICAgMTAxMDANCitkZHhvcjEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTANCitkZHhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDENCisNCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCitkZHhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyMSB4b3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyNCB4b3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyNyB4b3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIzMCB4b3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBhIGZldyByYW5kb21zDQorZGR4b3IyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNDIgeG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QNCitkZHhvcjI1MCB4b3IgIDIwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNTEgeG9yICA3MDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjUyIHhvciAgODAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI1MyB4b3IgIDkwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNTQgeG9yICAyMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjU1IHhvciAgNzAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI1NiB4b3IgIDgwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNTcgeG9yICA5MDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjU4IHhvciAgMTAwMDAwMDAwMDAwMDAwMCAyMDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI1OSB4b3IgIDEwMDAwMDAwMDAwMDAwMDAgNzAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNjAgeG9yICAxMDAwMDAwMDAwMDAwMDAwIDgwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjYxIHhvciAgMTAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI2MiB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgMjAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNjMgeG9yICAwMDAwMDAwMDAwMDAwMDAwIDcwMDAwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjY0IHhvciAgMDAwMDAwMDAwMDAwMDAwMCA4MDAwMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI2NSB4b3IgIDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK2RkeG9yMjcwIHhvciAgMDIwMDAwMTAwMDAwMDAwMCAxMDAwMTAwMDAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI3MSB4b3IgIDA3MDAwMDAxMDAwMDAwMDAgMTAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNzIgeG9yICAwODAwMDAwMDEwMDAwMDAwIDEwMDAwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjczIHhvciAgMDkwMDAwMDAwMTAwMDAwMCAxMDAwMDAwMTAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI3NCB4b3IgIDEwMDAwMDAwMDAxMDAwMDAgMDIwMDAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyNzUgeG9yICAxMDAwMDAwMDAwMDEwMDAwIDA3MDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjc2IHhvciAgMTAwMDAwMDAwMDAwMTAwMCAwODAwMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI3NyB4b3IgIDEwMDAwMDAwMDAwMDAxMDAgMDkwMDAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBMU0QNCitkZHhvcjI4MCB4b3IgIDAwMTAwMDAwMDAwMDAwMDIgMTAwMDAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyODEgeG9yICAwMDAxMDAwMDAwMDAwMDA3IDEwMDAwMDEwMDAwMDAwMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjgyIHhvciAgMDAwMDEwMDAwMDAwMDAwOCAxMDAwMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI4MyB4b3IgIDAwMDAwMTAwMDAwMDAwMDkgMTAwMDEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyODQgeG9yICAxMDAwMDAxMDAwMDAwMDAwIDAwMDEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjg1IHhvciAgMTAwMDAwMDEwMDAwMDAwMCAwMDEwMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI4NiB4b3IgIDEwMDAwMDAwMTAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyODcgeG9yICAxMDAwMDAwMDAxMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTWlkZGllDQorZGR4b3IyODggeG9yICAwMDEwMDAwMDIwMDAwMDAwIDEwMDAwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjg5IHhvciAgMDAwMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI5MCB4b3IgIDAwMDAxMDAwODAwMDAwMTAgMTAwMDAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyOTEgeG9yICAwMDAwMDEwMDkwMDAwMTAwIDEwMDAwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjkyIHhvciAgMTAwMDAwMTAwMDAwMTAwMCAwMDAwMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI5MyB4b3IgIDEwMDAwMDAxMDAwMTAwMDAgMDAwMDAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyOTQgeG9yICAxMDAwMDAwMDEwMTAwMDAwIDAwMDAwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjk1IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAwMDAwMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK2RkeG9yMjk2IHhvciAtMTAwMDAwMDAwMTAwMDAwMCAtMDAwMDAxMDAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IyOTcgeG9yIC0xMDAwMDAwMDAxMDAwMDAwICAwMDAwMDAwMDEwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjI5OCB4b3IgIDEwMDAwMDAwMDEwMDAwMDAgLTAwMDAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMjk5IHhvciAgMTAwMDAwMDAwMTAwMDAwMCAgMDAwMDAwMDAxMTAwMDEwMCAtPiAgMTAwMDAwMDAxMDAwMDEwMA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCitkZHhvcjMzMSB4b3IgIDIgICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzMyIHhvciAgMyAgIDFFLTI5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjMzNCB4b3IgIDUgICAxRS0yMDAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzM1IHhvciAgNiAgIC0xRS0yMDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTI5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjMzNyB4b3IgIDggICAtMUUtMjk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSsyOTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSsyOTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM0MiB4b3IgIDFFLTI5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzQzIHhvciAgMS4wMDAwMDAwMEUtMjk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNDQgeG9yICAxRS0yMDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM0NSB4b3IgIC0xRS0yMDcgICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzQ2IHhvciAgLTEuMDAwMDAwMDBFLTI5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNDcgeG9yICAtMUUtMjk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM0OCB4b3IgIC05Ljk5OTk5OTk5RSsyOTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KK2RkeG9yMzYxIHhvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzY0IHhvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzcxIHhvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yMzc0IHhvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3IzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCitkZHhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yNzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I3ODIgeG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yNzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I3ODUgeG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yNzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I3ODggeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yNzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I3OTEgeG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yNzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I3OTQgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHhvcjgwMCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgwMyB4b3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgwNiB4b3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgwOSB4b3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgxMiB4b3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgxNSB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RkeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MjIgeG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MjUgeG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MjggeG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MzEgeG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MzQgeG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4MzcgeG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkZHhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODQzIHhvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODQ2IHhvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODQ5IHhvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODUyIHhvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODU1IHhvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODU4IHhvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RkeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NjIgeG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NjUgeG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NjggeG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NzIgeG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NzUgeG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4NzggeG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4ODEgeG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RkeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZGR4b3I4ODQgeG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkZHhvcjg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFicy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKaW5kZXggYmFhYTA2My4uZjkxMTlhOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQWJzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUFicy5kZWNUZXN0IC0tIGRlY1F1YWQgYWJzb2x1dGUgdmFsdWUsIGhlZWRpbmcgc05hTiAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWRxYWJzMDAxIGFicyAnMScgICAgICAtPiAnMScKLWRxYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScKLWRxYWJzMDAzIGFicyAnMS4wMCcgICAtPiAnMS4wMCcKLWRxYWJzMDA0IGFicyAnLTEuMDAnICAtPiAnMS4wMCcKLWRxYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcKLWRxYWJzMDA2IGFicyAnMC4wMCcgICAtPiAnMC4wMCcKLWRxYWJzMDA3IGFicyAnMDAuMCcgICAtPiAnMC4wJwotZHFhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJwotZHFhYnMwMDkgYWJzICcwMCcgICAgIC0+ICcwJwotCi1kcWFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInCi1kcWFiczAxMSBhYnMgJzInICAgICAgLT4gJzInCi1kcWFiczAxMiBhYnMgJy0yLjAwJyAgLT4gJzIuMDAnCi1kcWFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnCi1kcWFiczAxNCBhYnMgJy0wJyAgICAgLT4gJzAnCi1kcWFiczAxNSBhYnMgJy0wLjAwJyAgLT4gJzAuMDAnCi1kcWFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcKLWRxYWJzMDE3IGFicyAnLTAwLjAwJyAtPiAnMC4wMCcKLWRxYWJzMDE4IGFicyAnLTAwJyAgICAtPiAnMCcKLQotZHFhYnMwMjAgYWJzICctMjAwMDAwMCcgLT4gJzIwMDAwMDAnCi1kcWFiczAyMSBhYnMgJzIwMDAwMDAnICAtPiAnMjAwMDAwMCcKLQotZHFhYnMwMzAgYWJzICcrMC4xJyAgICAgICAgICAgIC0+ICcwLjEnCi1kcWFiczAzMSBhYnMgJy0wLjEnICAgICAgICAgICAgLT4gJzAuMScKLWRxYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScKLWRxYWJzMDMzIGFicyAnLTAuMDEnICAgICAgICAgICAtPiAnMC4wMScKLWRxYWJzMDM0IGFicyAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCi1kcWFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJwotZHFhYnMwMzYgYWJzICcrMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScKLWRxYWJzMDM3IGFicyAnLTAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCi1kcWFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJwotZHFhYnMwMzkgYWJzICctMC4wMDAwMDAwMDAwMDEnIC0+ICcxRS0xMicKLQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAotZHFhYnMwNDAgYWJzICcyLjEnICAgICAtPiAgJzIuMScKLWRxYWJzMDQxIGFicyAnLTEwMCcgICAgLT4gICcxMDAnCi1kcWFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnCi1kcWFiczA0MyBhYnMgJy0xMDEuNScgIC0+ICAnMTAxLjUnCi0KLS0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwCi1kcWFiczA2MCBhYnMgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JwotZHFhYnMwNjEgYWJzICctNTYyNjdFLTUnICAgLT4gJzAuNTYyNjcnCi1kcWFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JwotZHFhYnMwNjMgYWJzICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycKLWRxYWJzMDY1IGFicyAnLTU2MjY3RS0wJyAgIC0+ICc1NjI2NycKLQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93Ci0KLS0tIGxvbmcgb3BlcmFuZCB0ZXN0cwotZHFhYnMzMjEgYWJzIDEyMzQ1Njc4OTAxMjM0NTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYWJzMzIyIGFicyAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKLWRxYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAotZHFhYnMzMjQgYWJzIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCi1kcWFiczMyNSBhYnMgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKLWRxYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKLWRxYWJzMzI3IGFicyAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgotCi0tLSB6ZXJvcwotZHFhYnMxMTEgYWJzICAgICAgICAgIDAgICAtPiAwCi1kcWFiczExMiBhYnMgICAgICAgICAtMCAgIC0+IDAKLWRxYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNgotZHFhYnMxMTQgYWJzICAgICAgLTBFKzYgICAtPiAwRSs2Ci1kcWFiczExNSBhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAotZHFhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKLWRxYWJzMTE3IGFicyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCi1kcWFiczExOCBhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZHFhYnMxMjEgYWJzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFhYnMxMjMgYWJzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotZHFhYnMxMjQgYWJzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotCi0tLSBObWF4LCBObWluLCBOdGlueQotZHFhYnMxMzEgYWJzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFhYnMxMzIgYWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCi1kcWFiczEzMyBhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcWFiczEzNCBhYnMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCi0KLWRxYWJzMTM1IGFicyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKLWRxYWJzMTM2IGFicyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxYWJzMTM3IGFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MwotZHFhYnMxMzggYWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotCi0tLSBzcGVjaWFscwotZHFhYnM1MjAgYWJzICdJbmYnICAgIC0+ICdJbmZpbml0eScKLWRxYWJzNTIxIGFicyAnLUluZicgICAtPiAnSW5maW5pdHknCi1kcWFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTgotZHFhYnM1MjMgYWJzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZHFhYnM1MjQgYWJzICAgTmFOMjIgIC0+ICBOYU4yMgotZHFhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbgotZHFhYnM1MjYgYWJzICAtTmFOMjIgIC0+IC1OYU4yMgotZHFhYnM1MjcgYWJzIC1zTmFOMzMgIC0+IC1OYU4zMyBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOdWxsIHRlc3RzCi1kcWFiczkwMCBhYnMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQWJzLmRlY1Rlc3QgLS0gZGVjUXVhZCBhYnNvbHV0ZSB2YWx1ZSwgaGVlZGluZyBzTmFOICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZHFhYnMwMDEgYWJzICcxJyAgICAgIC0+ICcxJw0KK2RxYWJzMDAyIGFicyAnLTEnICAgICAtPiAnMScNCitkcWFiczAwMyBhYnMgJzEuMDAnICAgLT4gJzEuMDAnDQorZHFhYnMwMDQgYWJzICctMS4wMCcgIC0+ICcxLjAwJw0KK2RxYWJzMDA1IGFicyAnMCcgICAgICAtPiAnMCcNCitkcWFiczAwNiBhYnMgJzAuMDAnICAgLT4gJzAuMDAnDQorZHFhYnMwMDcgYWJzICcwMC4wJyAgIC0+ICcwLjAnDQorZHFhYnMwMDggYWJzICcwMC4wMCcgIC0+ICcwLjAwJw0KK2RxYWJzMDA5IGFicyAnMDAnICAgICAtPiAnMCcNCisNCitkcWFiczAxMCBhYnMgJy0yJyAgICAgLT4gJzInDQorZHFhYnMwMTEgYWJzICcyJyAgICAgIC0+ICcyJw0KK2RxYWJzMDEyIGFicyAnLTIuMDAnICAtPiAnMi4wMCcNCitkcWFiczAxMyBhYnMgJzIuMDAnICAgLT4gJzIuMDAnDQorZHFhYnMwMTQgYWJzICctMCcgICAgIC0+ICcwJw0KK2RxYWJzMDE1IGFicyAnLTAuMDAnICAtPiAnMC4wMCcNCitkcWFiczAxNiBhYnMgJy0wMC4wJyAgLT4gJzAuMCcNCitkcWFiczAxNyBhYnMgJy0wMC4wMCcgLT4gJzAuMDAnDQorZHFhYnMwMTggYWJzICctMDAnICAgIC0+ICcwJw0KKw0KK2RxYWJzMDIwIGFicyAnLTIwMDAwMDAnIC0+ICcyMDAwMDAwJw0KK2RxYWJzMDIxIGFicyAnMjAwMDAwMCcgIC0+ICcyMDAwMDAwJw0KKw0KK2RxYWJzMDMwIGFicyAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJw0KK2RxYWJzMDMxIGFicyAnLTAuMScgICAgICAgICAgICAtPiAnMC4xJw0KK2RxYWJzMDMyIGFicyAnKzAuMDEnICAgICAgICAgICAtPiAnMC4wMScNCitkcWFiczAzMyBhYnMgJy0wLjAxJyAgICAgICAgICAgLT4gJzAuMDEnDQorZHFhYnMwMzQgYWJzICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCitkcWFiczAzNSBhYnMgJy0wLjAwMScgICAgICAgICAgLT4gJzAuMDAxJw0KK2RxYWJzMDM2IGFicyAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnDQorZHFhYnMwMzcgYWJzICctMC4wMDAwMDEnICAgICAgIC0+ICcwLjAwMDAwMScNCitkcWFiczAzOCBhYnMgJyswLjAwMDAwMDAwMDAwMScgLT4gJzFFLTEyJw0KK2RxYWJzMDM5IGFicyAnLTAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KK2RxYWJzMDQwIGFicyAnMi4xJyAgICAgLT4gICcyLjEnDQorZHFhYnMwNDEgYWJzICctMTAwJyAgICAtPiAgJzEwMCcNCitkcWFiczA0MiBhYnMgJzEwMS41JyAgIC0+ICAnMTAxLjUnDQorZHFhYnMwNDMgYWJzICctMTAxLjUnICAtPiAgJzEwMS41Jw0KKw0KKy0tIG1vcmUgZml4ZWQsIHBvdGVudGlhbCBMSFMgc3dhcHMvb3ZlcmxheXMgaWYgZG9uZSBieSBzdWJ0cmFjdCAwDQorZHFhYnMwNjAgYWJzICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCitkcWFiczA2MSBhYnMgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCitkcWFiczA2MiBhYnMgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3Jw0KK2RxYWJzMDYzIGFicyAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnDQorZHFhYnMwNjUgYWJzICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KKw0KKy0tIGxvbmcgb3BlcmFuZCB0ZXN0cw0KK2RxYWJzMzIxIGFicyAxMjM0NTY3ODkwMTIzNDU2ICAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFhYnMzMjIgYWJzIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KK2RxYWJzMzIzIGFicyAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMA0KK2RxYWJzMzI0IGFicyAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KK2RxYWJzMzI1IGFicyAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KK2RxYWJzMzI2IGFicyAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCitkcWFiczMyNyBhYnMgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCisNCistLSB6ZXJvcw0KK2RxYWJzMTExIGFicyAgICAgICAgICAwICAgLT4gMA0KK2RxYWJzMTEyIGFicyAgICAgICAgIC0wICAgLT4gMA0KK2RxYWJzMTEzIGFicyAgICAgICAwRSs2ICAgLT4gMEUrNg0KK2RxYWJzMTE0IGFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KK2RxYWJzMTE1IGFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQorZHFhYnMxMTYgYWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitkcWFiczExNyBhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KK2RxYWJzMTE4IGFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkcWFiczEyMSBhYnMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQorZHFhYnMxMjIgYWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxYWJzMTIzIGFicyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCitkcWFiczEyNCBhYnMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkcWFiczEzMSBhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFhYnMxMzIgYWJzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzDQorZHFhYnMxMzMgYWJzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxYWJzMTM0IGFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwNCisNCitkcWFiczEzNSBhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQorZHFhYnMxMzYgYWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxYWJzMTM3IGFicyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KK2RxYWJzMTM4IGFicyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCisNCistLSBzcGVjaWFscw0KK2RxYWJzNTIwIGFicyAnSW5mJyAgICAtPiAnSW5maW5pdHknDQorZHFhYnM1MjEgYWJzICctSW5mJyAgIC0+ICdJbmZpbml0eScNCitkcWFiczUyMiBhYnMgICBOYU4gICAgLT4gIE5hTg0KK2RxYWJzNTIzIGFicyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFiczUyNCBhYnMgICBOYU4yMiAgLT4gIE5hTjIyDQorZHFhYnM1MjUgYWJzICBzTmFOMzMgIC0+ICBOYU4zMyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWJzNTI2IGFicyAgLU5hTjIyICAtPiAtTmFOMjINCitkcWFiczUyNyBhYnMgLXNOYU4zMyAgLT4gLU5hTjMzIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxYWJzOTAwIGFicyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBZGQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CmluZGV4IGIxZGY3N2EuLmIzYWQ4OTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFkZC5kZWNUZXN0CkBAIC0xLDEyMTUgKzEsMTIxNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUFkZC5kZWNUZXN0IC0tIGRlY1F1YWQgYWRkaXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KLWRxYWRkMDAxIGFkZCAxICAgICAgIDEgICAgICAgLT4gIDIKLWRxYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUKLWRxYWRkMDAzIGFkZCAnNS43NScgICczLjMnICAgLT4gIDkuMDUKLWRxYWRkMDA0IGFkZCAnNScgICAgICctMycgICAgLT4gIDIKLWRxYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04Ci1kcWFkZDAwNiBhZGQgJy03JyAgICAnMi41JyAgIC0+ICAtNC41Ci1kcWFkZDAwNyBhZGQgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKLWRxYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTAKLWRxYWRkMDA5IGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKLWRxYWRkMDEwIGFkZCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKLQotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRxYWRkMDExIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ2JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kcWFkZDAxMyBhZGQgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDAxNCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDknICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZHFhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMDE2IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDAxNyBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAwMCcgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZHFhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMDE5IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDAyMCBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTEnICAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotCi1kcWFkZDAyMSBhZGQgMCAxIC0+IDEKLWRxYWRkMDIyIGFkZCAxIDEgLT4gMgotZHFhZGQwMjMgYWRkIDIgMSAtPiAzCi1kcWFkZDAyNCBhZGQgMyAxIC0+IDQKLWRxYWRkMDI1IGFkZCA0IDEgLT4gNQotZHFhZGQwMjYgYWRkIDUgMSAtPiA2Ci1kcWFkZDAyNyBhZGQgNiAxIC0+IDcKLWRxYWRkMDI4IGFkZCA3IDEgLT4gOAotZHFhZGQwMjkgYWRkIDggMSAtPiA5Ci1kcWFkZDAzMCBhZGQgOSAxIC0+IDEwCi0KLS0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cwotZHFhZGQwMzEgYWRkICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JwotZHFhZGQwMzIgYWRkICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JwotZHFhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJwotZHFhZGQwMzQgYWRkICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJwotCi1kcWFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDAzNiBhZGQgJzcwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQwMzcgYWRkICc3MDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDAzOSBhZGQgJzcwMDAwMCcgICcxMDAwMGUrMzQnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKLQotLS0gc3ltbWV0cnk6Ci1kcWFkZDA0MCBhZGQgJzEwMDAwZSszNCcgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDA0MSBhZGQgJzEwMDAwZSszNCcgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQwNDIgYWRkICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDA0NCBhZGQgJzEwMDAwZSszNCcgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDA0NSBhZGQgJzEwMDAwZSszNCcgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UrMzgnIFJvdW5kZWQKLQotLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZwotZHFhZGQwNDYgYWRkICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCi1kcWFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCi1kcWFkZDA0OCBhZGQgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJwotZHFhZGQwNDkgYWRkICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCi1kcWFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCi1kcWFkZDA1MSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJwotZHFhZGQwNTIgYWRkICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKLWRxYWRkMDUzIGFkZCAnMTInICc3LjAwJyAtPiAnMTkuMDAnCi1kcWFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycKLWRxYWRkMDU1IGFkZCAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJwotZHFhZGQwNTYgYWRkICcxLjMnICctMi4wNycgLT4gJy0wLjc3JwotZHFhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnCi0KLS0tIGxlYWRpbmcgemVybyBwcmVzZXJ2YXRpb24KLWRxYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCi1kcWFkZDA2MiBhZGQgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCi1kcWFkZDA2MyBhZGQgMSAnMC4wMDAwMDEnIC0+ICcxLjAwMDAwMScKLWRxYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnCi1kcWFkZDA2NSBhZGQgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCi0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KLWRxYWRkMDcwIGFkZCAxICAwICAgIC0+IDEKLWRxYWRkMDcxIGFkZCAxIDAuICAgIC0+IDEKLWRxYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMAotZHFhZGQwNzMgYWRkIDEgMC4wICAgLT4gMS4wCi1kcWFkZDA3NCBhZGQgMSAwLjAwICAtPiAxLjAwCi1kcWFkZDA3NSBhZGQgIDAgIDEgICAtPiAxCi1kcWFkZDA3NiBhZGQgMC4gIDEgICAtPiAxCi1kcWFkZDA3NyBhZGQgIC4wIDEgICAtPiAxLjAKLWRxYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMAotZHFhZGQwNzkgYWRkIDAuMDAgMSAgLT4gMS4wMAotCi0tLSBzb21lIGNhcnJpZXMKLWRxYWRkMDgwIGFkZCA5OTk5OTk5OTggMSAgLT4gOTk5OTk5OTk5Ci1kcWFkZDA4MSBhZGQgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKLWRxYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwCi1kcWFkZDA4MyBhZGQgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCi1kcWFkZDA4NCBhZGQgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKLWRxYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwCi1kcWFkZDA4NiBhZGQgICAgICA5OTk5IDEgIC0+IDEwMDAwCi1kcWFkZDA4NyBhZGQgICAgICAgOTk5IDEgIC0+IDEwMDAKLWRxYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwCi1kcWFkZDA4OSBhZGQgICAgICAgICA5IDEgIC0+IDEwCi0KLQotLS0gbW9yZSBMSFMgc3dhcHMKLWRxYWRkMDkwIGFkZCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKLWRxYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3JwotZHFhZGQwOTIgYWRkICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKLWRxYWRkMDkzIGFkZCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKLWRxYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycKLWRxYWRkMDk1IGFkZCAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKLWRxYWRkMDk2IGFkZCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKLWRxYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3JwotZHFhZGQwOTggYWRkICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCi1kcWFkZDA5OSBhZGQgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JwotZHFhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnCi1kcWFkZDEwMSBhZGQgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JwotZHFhZGQxMDIgYWRkICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JwotZHFhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41JwotZHFhZGQxMDQgYWRkICctNUUwJyAgICAgICAgIDAgLT4gICctNScKLWRxYWRkMTA1IGFkZCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJwotZHFhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJwotZHFhZGQxMDcgYWRkICctNUUzMycgICAgICAgIDAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkMTA4IGFkZCAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKLWRxYWRkMTA5IGFkZCAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQKLWRxYWRkMTEwIGFkZCAnLTVFMzYnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgIFJvdW5kZWQKLWRxYWRkMTExIGFkZCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKLQotLS0gbW9yZSBSSFMgc3dhcHMKLWRxYWRkMTEzIGFkZCAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JwotZHFhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKLWRxYWRkMTE2IGFkZCAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKLWRxYWRkMTE3IGFkZCAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JwotZHFhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCi1kcWFkZDEyMCBhZGQgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKLWRxYWRkMTIxIGFkZCAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JwotZHFhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKLWRxYWRkMTIzIGFkZCAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCi1kcWFkZDEyNCBhZGQgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCi1kcWFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JwotZHFhZGQxMjYgYWRkIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JwotZHFhZGQxMjcgYWRkIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCi1kcWFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKLWRxYWRkMTI5IGFkZCAwICAnLTVFMCcgICAgICAgLT4gICctNScKLWRxYWRkMTMwIGFkZCAwICAnLTVFMScgICAgICAgLT4gICctNTAnCi1kcWFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKLWRxYWRkMTMyIGFkZCAwICAnLTVFMzMnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkMTMzIGFkZCAwICAnLTVFMzQnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQKLWRxYWRkMTM0IGFkZCAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKLWRxYWRkMTM1IGFkZCAwICAnLTVFMzYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQKLWRxYWRkMTM2IGFkZCAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKLQotLS0gcmVsYXRlZAotZHFhZGQxMzcgYWRkICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKLWRxYWRkMTM4IGFkZCAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kcWFkZDEzOSBhZGQgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAotZHFhZGQxNDAgYWRkICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKLWRxYWRkMTQxIGFkZCAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnCi1kcWFkZDE0MiBhZGQgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAotZHFhZGQxNDMgYWRkIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcKLWRxYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCi0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCi1kcWFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJwotZHFhZGQxNDcgYWRkICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCi1kcWFkZDE0OCBhZGQgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKLWRxYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCi1kcWFkZDE1MCBhZGQgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKLWRxYWRkMTUxIGFkZCAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJwotZHFhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKLWRxYWRkMTUzIGFkZCAnMy4nICAgICcuMycgICAgLT4gICczLjMnCi1kcWFkZDE1NCBhZGQgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJwotZHFhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCi1kcWFkZDE1NiBhZGQgJzMnICAgICAnMycgICAgIC0+ICAnNicKLWRxYWRkMTU3IGFkZCAnMycgICAgICcrMycgICAgLT4gICc2JwotZHFhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnCi1kcWFkZDE1OSBhZGQgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJwotZHFhZGQxNjAgYWRkICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCi0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCi1kcWFkZDE2MSBhZGQgJzFFKzEyJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTknCi1kcWFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJwotZHFhZGQxNjMgYWRkICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKLWRxYWRkMTY0IGFkZCAnLTEnICAgICcxRSsxMicgLT4gJzk5OTk5OTk5OTk5OScKLWRxYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCi1kcWFkZDE2NiBhZGQgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJwotZHFhZGQxNjcgYWRkICcxLjExJyAgJzdFKzEyJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScKLWRxYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCi0KLXJvdW5kaW5nOiBoYWxmX3VwCi1kcWFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMTcxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZHFhZGQxNzIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMTc0IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZHFhZGQxNzUgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMTc3IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQKLWRxYWRkMTc4IGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZHFhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDE4MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMTgxIGFkZCAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDE4MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkCi0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKLXJvdW5kaW5nOiBoYWxmX3VwCi1kcWFkZDIwMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCi1kcWFkZDIwMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjAzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIwNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMDUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjA2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIwNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMDggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjA5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIxMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMTEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjEyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIxMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMTQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjE1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIxNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCi1kcWFkZDIxNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMTggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjE5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRxYWRkMjIwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScKLWRxYWRkMjIxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIyMiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjI0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIyNSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjI3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIyOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjMwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIzMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMzIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjMzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIzNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMzUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjM2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKLWRxYWRkMjM3IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDIzOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyMzkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1kcWFkZDI0MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNDEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjQyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1kcWFkZDI1MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCi1kcWFkZDI1MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjUzIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDI1NCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjU2IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDI1NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNTggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjU5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDI2MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNjEgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjYyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDI2MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNjQgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjY1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDI2NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCi1kcWFkZDI2NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQyNjggYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMjY5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cwotcm91bmRpbmc6IGhhbGZfdXAKLWRxYWRkMzAxIGFkZCAgLTEgICAxICAgICAgLT4gICAwCi1kcWFkZDMwMiBhZGQgICAwICAgMSAgICAgIC0+ICAgMQotZHFhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDIKLWRxYWRkMzA0IGFkZCAgMTIgICAxICAgICAgLT4gIDEzCi1kcWFkZDMwNSBhZGQgIDk4ICAgMSAgICAgIC0+ICA5OQotZHFhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDAKLWRxYWRkMzA3IGFkZCAxMDAgICAxICAgICAgLT4gMTAxCi1kcWFkZDMwOCBhZGQgMTAxICAgMSAgICAgIC0+IDEwMgotZHFhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTIKLWRxYWRkMzEwIGFkZCAgIDAgIC0xICAgICAgLT4gIC0xCi1kcWFkZDMxMSBhZGQgICAxICAtMSAgICAgIC0+ICAgMAotZHFhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTEKLWRxYWRkMzEzIGFkZCAgOTggIC0xICAgICAgLT4gIDk3Ci1kcWFkZDMxNCBhZGQgIDk5ICAtMSAgICAgIC0+ICA5OAotZHFhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkKLWRxYWRkMzE2IGFkZCAxMDEgIC0xICAgICAgLT4gMTAwCi0KLWRxYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAotZHFhZGQzMjIgYWRkICAwLjAwICAwLjAxICAgIC0+ICAwLjAxCi1kcWFkZDMyMyBhZGQgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKLWRxYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMwotZHFhZGQzMjUgYWRkICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5Ci1kcWFkZDMyNiBhZGQgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKLWRxYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQotZHFhZGQzMjggYWRkICAxLjAxICAwLjAxICAgIC0+ICAxLjAyCi1kcWFkZDMyOSBhZGQgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKLWRxYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQotZHFhZGQzMzEgYWRkICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwCi1kcWFkZDMzMiBhZGQgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKLWRxYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45NwotZHFhZGQzMzQgYWRkICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4Ci1kcWFkZDMzNSBhZGQgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKLWRxYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAotCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKLWRxYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwCi1kcWFkZDM0MSBhZGQgMUUrMzMgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxYWRkMzQyIGFkZCAxRSszNCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKLWRxYWRkMzQzIGFkZCAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKLS0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4KLWRxYWRkMzQ0IGFkZCAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxCi1kcWFkZDM0NSBhZGQgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxYWRkMzQ2IGFkZCAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDcgYWRkIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNwotZHFhZGQzNDkgYWRkIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kcWFkZDM1MCBhZGQgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzUxIGFkZCAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotcm91bmRpbmc6ICAgIGhhbGZfdXAKLWRxYWRkMzYwICBhZGQgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQotZHFhZGQzNjEgIGFkZCAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAotZHFhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAotZHFhZGQzNjMgIGFkZCAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNjQgIGFkZCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQotLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotCi0tLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi1kcWFkZDM3MCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAotZHFhZGQzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kcWFkZDM3MiBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAotZHFhZGQzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRxYWRkMzc0IGFkZCAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0Ci1kcWFkZDM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAotCi0tLSB1bHAgcmVwbGFjZW1lbnQgdGVzdHMKLWRxYWRkNDAwIGFkZCAgIDEgICA3N2UtMzIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQ0MDEgYWRkICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQ0MDIgYWRkICAgMSAgIDc3ZS0zNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDAzIGFkZCAgIDEgICA3N2UtMzUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQwNCBhZGQgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MDUgYWRkICAgMSAgIDc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDA2IGFkZCAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkNDEwIGFkZCAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLWRxYWRkNDExIGFkZCAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQxMiBhZGQgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MTMgYWRkICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDE0IGFkZCAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQxNSBhZGQgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MTYgYWRkICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ0MjAgYWRkICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci1kcWFkZDQyMSBhZGQgIDc3ZS0zMyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci1kcWFkZDQyMiBhZGQgIDc3ZS0zNCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MjMgYWRkICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDI0IGFkZCAgNzdlLTM2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQyNSBhZGQgIDc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ0MzAgYWRkICA3N2UtMzIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQ0MzEgYWRkICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDMyIGFkZCAgNzdlLTM0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQzMyBhZGQgIDc3ZS0zNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ0MzQgYWRkICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNDM1IGFkZCAgNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDQzNiBhZGQgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBmYXN0cGF0aCBib3VuZGFyaWVzCi0tLSAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKLWRxYWRkNTAxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKLWRxYWRkNTAyIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKLWRxYWRkNTAzIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczNTU1NTU1NTU1NTU1NTU1NTU1MDU1NTU1NTU1NTU1NTU1JyAtPiAnNzk5OTk5OTk5OTk5OTk5OTk5OTQ5OTk5OTk5OTk5OTk5OScKLWRxYWRkNTA0IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczOTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKLWRxYWRkNTA1IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScKLWRxYWRkNTA2IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAxLjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDUxMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxMyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxNSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxOCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUxOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnCi1kcWFkZDUyNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyNSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyOCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUyOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUzMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTknCi1kcWFkZDUzMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTknCi1kcWFkZDUzMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTknCi1kcWFkZDUzMyBhZGQgJzM0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTknCi1kcWFkZDUzNCBhZGQgJzM0NDQ0NDQ0NDQ0JyAgJzU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTknCi1kcWFkZDUzNSBhZGQgJzM0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTknCi1kcWFkZDUzNiBhZGQgJzM0NDQ0NDQ0NCcgICc1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTknCi1kcWFkZDUzNyBhZGQgJzM0NDQ0NDQ0JyAgJzU1NTU1NTU1JyAtPiAnODk5OTk5OTknCi1kcWFkZDUzOCBhZGQgJzM0NDQ0NDQnICAnNTU1NTU1NScgLT4gJzg5OTk5OTknCi1kcWFkZDUzOSBhZGQgJzM0NDQ0NCcgICc1NTU1NTUnIC0+ICc4OTk5OTknCi1kcWFkZDU0MCBhZGQgJzM0NDQ0JyAgJzU1NTU1JyAtPiAnODk5OTknCi1kcWFkZDU0MSBhZGQgJzM0NDQnICAnNTU1NScgLT4gJzg5OTknCi1kcWFkZDU0MiBhZGQgJzM0NCcgICc1NTUnIC0+ICc4OTknCi1kcWFkZDU0MyBhZGQgJzM0JyAgJzU1JyAtPiAnODknCi1kcWFkZDU0NCBhZGQgJzMnICAnNScgLT4gJzgnCi0KLWRxYWRkNTQ1IGFkZCAnMzAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNjAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTQ3IGFkZCAnMzAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTQ4IGFkZCAnNDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTUwIGFkZCAnNDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDAwNDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTUxIGFkZCAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICczMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDA0MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkNTUzIGFkZCAnNTAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMCcgICc1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAxLjAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgUm91bmRlZAotLS0gY2hlY2sgcHJvcGFnYXRpb24KLWRxYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFhZGQ1NTUgYWRkICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAgJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIC0+ICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWFkZDU1NiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgLT4gIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxYWRkNTU3IGFkZCAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotCi0tLSBuZWdhdGl2ZSB1bHBzCi1kcWFkZDY0NDAgYWRkICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDQxIGFkZCAgIDEgICAtNzdlLTMzICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDY0NDIgYWRkICAgMSAgIC03N2UtMzQgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDY0NDMgYWRkICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDQ0IGFkZCAgIDEgICAtNzdlLTM2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ0NSBhZGQgICAxICAgLTc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ2NDUwIGFkZCAgMTAgICAtNzdlLTMyICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDY0NTEgYWRkICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDY0NTIgYWRkICAxMCAgIC03N2UtMzQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDUzIGFkZCAgMTAgICAtNzdlLTM1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ1NSBhZGQgIDEwICAgLTc3ZS0zNyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ1NiBhZGQgIDEwICAgLTc3ZS05OSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ2NDYwIGFkZCAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkNjQ2MSBhZGQgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDYyIGFkZCAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDYzIGFkZCAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ2NCBhZGQgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0NjUgYWRkICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0NjYgYWRkICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkNjQ3MCBhZGQgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDcxIGFkZCAgLTc3ZS0zMyAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDcyIGFkZCAgLTc3ZS0zNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ3MyBhZGQgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0NzQgYWRkICAtNzdlLTM2ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0NzUgYWRkICAtNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG5lZ2F0aXZlIHVscHMKLWRxYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDgxIGFkZCAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDgyIGFkZCAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDg0IGFkZCAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0ODUgYWRkICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ2NDkwIGFkZCAtMTAgICAgNzdlLTMyICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkNjQ5MiBhZGQgLTEwICAgIDc3ZS0zNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDkzIGFkZCAtMTAgICAgNzdlLTM1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NDk1IGFkZCAtMTAgICAgNzdlLTM3ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjQ5NiBhZGQgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkNjUwMCBhZGQgICA3N2UtMzIgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NTAxIGFkZCAgIDc3ZS0zMyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NTAyIGFkZCAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkNjUwMyBhZGQgICA3N2UtMzUgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTA0IGFkZCAgIDc3ZS0zNiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1MDUgYWRkICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTA2IGFkZCAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ2NTEwIGFkZCAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQ2NTExIGFkZCAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkNjUxMiBhZGQgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTEzIGFkZCAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1MTQgYWRkICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTE1IGFkZCAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGFuZCBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCi1yb3VuZGluZzogaGFsZl91cAotZHFhZGQ2NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKLWRxYWRkNjU0MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NDMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU0NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTQ1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NDYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU0NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTQ4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NDkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU1MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NTIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU1MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NTUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU1NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCi1kcWFkZDY1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTU5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRxYWRkNjU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknCi1kcWFkZDY1NjEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTYzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NjQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTY2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU2OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NzAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU3MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTcyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NzMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU3NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ2NTc1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NzYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJwotZHFhZGQ2NTc3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDY1NzggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNjU3OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgotZHFhZGQ3NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NDEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU0MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZHFhZGQ3NTUwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKLWRxYWRkNzU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NTMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NTYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTU4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NTkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTYxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTY0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnCi1kcWFkZDc1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzU2OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLQotZHFhZGQ3NzAxIGFkZCA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAotZHFhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDAKLWRxYWRkNzcwMyBhZGQgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCi1kcWFkZDc3MDQgYWRkIDBFLTMgIDAwLjAwICAtPiAwLjAwMAotCi1kcWFkZDc3MTAgYWRkIDBFKzMgIDAwLjAwICAtPiAwLjAwCi1kcWFkZDc3MTEgYWRkIDBFKzMgIDAwLjAgICAtPiAwLjAKLWRxYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDAKLWRxYWRkNzcxMyBhZGQgMEUrMyAgMDAuRSsxIC0+IDBFKzEKLWRxYWRkNzcxNCBhZGQgMEUrMyAgMDAuRSsyIC0+IDBFKzIKLWRxYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMKLWRxYWRkNzcxNiBhZGQgMEUrMyAgMDAuRSs0IC0+IDBFKzMKLWRxYWRkNzcxNyBhZGQgMEUrMyAgMDAuRSs1IC0+IDBFKzMKLWRxYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjAKLWRxYWRkNzcxOSBhZGQgMEUrMyAgLTAwLiAgICAtPiAwCi1kcWFkZDc3MzEgYWRkIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQotCi1kcWFkZDc3MjAgYWRkIDAwLjAwICAwRSszICAtPiAwLjAwCi1kcWFkZDc3MjEgYWRkIDAwLjAgICAwRSszICAtPiAwLjAKLWRxYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDAKLWRxYWRkNzcyMyBhZGQgMDAuRSsxIDBFKzMgIC0+IDBFKzEKLWRxYWRkNzcyNCBhZGQgMDAuRSsyIDBFKzMgIC0+IDBFKzIKLWRxYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMKLWRxYWRkNzcyNiBhZGQgMDAuRSs0IDBFKzMgIC0+IDBFKzMKLWRxYWRkNzcyNyBhZGQgMDAuRSs1IDBFKzMgIC0+IDBFKzMKLWRxYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDAKLWRxYWRkNzcyOSBhZGQgLTAwLjAgIDBFKzMgIC0+IDAuMAotZHFhZGQ3NzMwIGFkZCAtMDAuICAgMEUrMyAgLT4gMAotCi1kcWFkZDc3MzIgYWRkICAwICAgICAwICAgICAtPiAgMAotZHFhZGQ3NzMzIGFkZCAgMCAgICAtMCAgICAgLT4gIDAKLWRxYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwCi1kcWFkZDc3MzUgYWRkIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA3NTQgc3BlY2lhbCBjYXNlCi0KLWRxYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwCi1kcWFkZDc3MzcgYWRkIC0xICAgIC0xICAgICAtPiAtMgotZHFhZGQ3NzM4IGFkZCAgMSAgICAgMSAgICAgLT4gIDIKLWRxYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwCi0KLWRxYWRkNzc0MSBhZGQgIDAgICAgLTEgICAgIC0+IC0xCi1kcWFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQotZHFhZGQ3NzQzIGFkZCAgMCAgICAgMSAgICAgLT4gIDEKLWRxYWRkNzc0NCBhZGQgLTAgICAgIDEgICAgIC0+ICAxCi1kcWFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQotZHFhZGQ3NzQ2IGFkZCAtMSAgICAtMCAgICAgLT4gLTEKLWRxYWRkNzc0NyBhZGQgIDEgICAgIDAgICAgIC0+ICAxCi1kcWFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQotCi1kcWFkZDc3NTEgYWRkICAwLjAgIC0xICAgICAtPiAtMS4wCi1kcWFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wCi1kcWFkZDc3NTMgYWRkICAwLjAgICAxICAgICAtPiAgMS4wCi1kcWFkZDc3NTQgYWRkIC0wLjAgICAxICAgICAtPiAgMS4wCi1kcWFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wCi1kcWFkZDc3NTYgYWRkIC0xLjAgIC0wICAgICAtPiAtMS4wCi1kcWFkZDc3NTcgYWRkICAxLjAgICAwICAgICAtPiAgMS4wCi1kcWFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wCi0KLWRxYWRkNzc2MSBhZGQgIDAgICAgLTEuMCAgIC0+IC0xLjAKLWRxYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjAKLWRxYWRkNzc2MyBhZGQgIDAgICAgIDEuMCAgIC0+ICAxLjAKLWRxYWRkNzc2NCBhZGQgLTAgICAgIDEuMCAgIC0+ICAxLjAKLWRxYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjAKLWRxYWRkNzc2NiBhZGQgLTEgICAgLTAuMCAgIC0+IC0xLjAKLWRxYWRkNzc2NyBhZGQgIDEgICAgIDAuMCAgIC0+ICAxLjAKLWRxYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjAKLQotZHFhZGQ3NzcxIGFkZCAgMC4wICAtMS4wICAgLT4gLTEuMAotZHFhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMAotZHFhZGQ3NzczIGFkZCAgMC4wICAgMS4wICAgLT4gIDEuMAotZHFhZGQ3Nzc0IGFkZCAtMC4wICAgMS4wICAgLT4gIDEuMAotZHFhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMAotZHFhZGQ3Nzc2IGFkZCAtMS4wICAtMC4wICAgLT4gLTEuMAotZHFhZGQ3Nzc3IGFkZCAgMS4wICAgMC4wICAgLT4gIDEuMAotZHFhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMAotCi0tLSBTcGVjaWFscwotZHFhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDc3ODEgYWRkIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRxYWRkNzc4MiBhZGQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZHFhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1kcWFkZDc3ODQgYWRkIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkKLWRxYWRkNzc4NSBhZGQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kcWFkZDc3ODcgYWRkIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxYWRkNzc4OCBhZGQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDc3OTAgYWRkIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxYWRkNzc5MSBhZGQgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDc3OTMgYWRkICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxYWRkNzc5NCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxYWRkNzgwMCBhZGQgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4MDEgYWRkICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKLWRxYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZHFhZGQ3ODAzIGFkZCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kcWFkZDc4MDQgYWRkICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKLWRxYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZHFhZGQ3ODA2IGFkZCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kcWFkZDc4MDcgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQ3ODA5IGFkZCAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzgxMCBhZGQgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcWFkZDc4MTIgYWRkICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxYWRkNzgxMyBhZGQgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kcWFkZDc4MTUgYWRkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZHFhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTgotZHFhZGQ3ODIyIGFkZCAgTmFOIC0xMDAwICAgLT4gIE5hTgotZHFhZGQ3ODIzIGFkZCAgTmFOIC0xICAgICAgLT4gIE5hTgotZHFhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTgotZHFhZGQ3ODI1IGFkZCAgTmFOICAwICAgICAgLT4gIE5hTgotZHFhZGQ3ODI2IGFkZCAgTmFOICAxICAgICAgLT4gIE5hTgotZHFhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTgotZHFhZGQ3ODI4IGFkZCAgTmFOICBJbmYgICAgLT4gIE5hTgotZHFhZGQ3ODI5IGFkZCAgTmFOICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODMxIGFkZCAtMTAwMCBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODMyIGFkZCAtMSAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODM0IGFkZCAgMCAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODM1IGFkZCAgMSAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTgotZHFhZGQ3ODM3IGFkZCAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kcWFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODQyIGFkZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg0MyBhZGQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODQ1IGFkZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg0NiBhZGQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODQ4IGFkZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg0OSBhZGQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODUxIGFkZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg1MiBhZGQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODU0IGFkZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg1NSBhZGQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODU3IGFkZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkNzg1OCBhZGQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcWFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQotZHFhZGQ3ODYyIGFkZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKLWRxYWRkNzg2MyBhZGQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCi1kcWFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAotZHFhZGQ3ODY1IGFkZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKLWRxYWRkNzg2NiBhZGQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Ci1kcWFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAotZHFhZGQ3ODY4IGFkZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKLWRxYWRkNzg2OSBhZGQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAotZHFhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODcyIGFkZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODczIGFkZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc1IGFkZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc2IGFkZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc4IGFkZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODc5IGFkZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODgxIGFkZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ3ODgyIGFkZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Ci1kcWFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDc4ODQgYWRkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKLWRxYWRkNzg4NSBhZGQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KLWRxYWRkNzU3NSBhZGQgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsCi1kcWFkZDc1NzYgYWRkIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbAotCi0tLSBjaGVjayBvdmVyZmxvdyBlZGdlIGNhc2UKLS0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZHFhZGQ3OTcyIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFhZGQ3OTczIGFkZCAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5NzUgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5NzYgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5NzggYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5NzkgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5ODEgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5ODIgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5ODQgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcWFkZDc5ODYgYWRkICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzk4NyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzk4OSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC05RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5OTAgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOEUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzk5MiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC02RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5OTMgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzk5NSBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0zRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc5OTYgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMkUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCi1yb3VuZGluZzogICAgIGRvd24KLWRxYWRkNzExMDAgYWRkIDFlKzIgLTFlLTYxNDMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0Ci1kcWFkZDcxMTAxIGFkZCAxZSsxIC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMDMgYWRkICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMDQgYWRkIDFlLTEgLTFlLTYxNDMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kcWFkZDcxMTA1IGFkZCAxZS0yIC0xZS02MTQzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMDYgYWRkIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMDcgYWRkIDFlLTQgLTFlLTYxNDMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1kcWFkZDcxMTA4IGFkZCAxZS01IC0xZS02MTQzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMDkgYWRkIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAotCi1yb3VuZGluZzogICAgIGNlaWxpbmcKLWRxYWRkNzExMTAgYWRkIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExMSBhZGQgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExMyBhZGQgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMTQgYWRkIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExNSBhZGQgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExNiBhZGQgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkNzExMTcgYWRkIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExOCBhZGQgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQ3MTExOSBhZGQgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdAotCi0tLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQotcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4KLQotZHFhZGQ3MTMwMCBhZGQgMUUzNCAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMTAgYWRkIDFFMzQgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzExIGFkZCAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMxMiBhZGQgMUUzNCAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMTMgYWRkIDFFMzQgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzE0IGFkZCAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMxNSBhZGQgMUUzNCAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMTYgYWRkIDFFMzQgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzE3IGFkZCAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMxOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMTkgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzIwIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMyMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMjIgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzIzIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMyNCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMjUgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzI2IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMyNyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMjggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzI5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMzMCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMzEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzMyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMzMyBhZGQgMUUzNCAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMzQgYWRkIDFFMzQgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzM1IGFkZCAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMzNiBhZGQgMUUzNCAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzMzcgYWRkIDFFMzQgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzM4IGFkZCAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTMzOSBhZGQgMUUzNCAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQ3MTM0MCBhZGQgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNDEgYWRkIDFFMzQgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM1MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzUxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM1MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzU0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM1NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzU3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM1OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzYwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM2MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzYzIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM2NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzY3IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM2OSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzcwIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM3MiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzczIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM3NSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzc2IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM3OCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzc5IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM4MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzgyIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM4NCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzg1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM4NyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzg4IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM5MCBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzkxIGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM5MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDcxMzk0IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3MTM5NiBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCi1kcWFkZDcxNDIwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0MjIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDcxNDIzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0MjUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDcxNDI2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNwotZHFhZGQ3MTQyOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04Ci1kcWFkZDcxNDI5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKLWRxYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAKLWRxYWRkNzE0MzEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEKLWRxYWRkNzE0MzIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKLWRxYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMKLWRxYWRkNzE0MzQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQKLWRxYWRkNzE0MzUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKLWRxYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYKLWRxYWRkNzE0MzcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcKLWRxYWRkNzE0MzggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKLWRxYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkKLWRxYWRkNzE0NDAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAKLWRxYWRkNzE0NDEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKLWRxYWRkNzE0NDIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIKLWRxYWRkNzE0NDMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMKLWRxYWRkNzE0NDQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKLWRxYWRkNzE0NDUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUKLWRxYWRkNzE0NDYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYKLWRxYWRkNzE0NDcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKLWRxYWRkNzE0NDggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgKLWRxYWRkNzE0NDkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkKLWRxYWRkNzE0NTAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKLWRxYWRkNzE0NTEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEKLWRxYWRkNzE0NTIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIKLWRxYWRkNzE0NTMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKLWRxYWRkNzE0NTQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQKLWRxYWRkNzE0NTUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUKLWRxYWRkNzE0NTYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKLQotLS0gc2FtZSwgcmV2ZXJzZWQgMAotZHFhZGQ3MTQ2MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQ3MTQ2MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIgIDAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQ3MTQ2MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQ3MTQ2NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTUgIDAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQ3MTQ2NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03Ci1kcWFkZDcxNDY4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOCAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOAotZHFhZGQ3MTQ2OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkKLWRxYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAotZHFhZGQ3MTQ3MSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExCi1kcWFkZDcxNDcyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTIKLWRxYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMwotZHFhZGQ3MTQ3NCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0Ci1kcWFkZDcxNDc1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUKLWRxYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgotZHFhZGQ3MTQ3NyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3Ci1kcWFkZDcxNDc4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgKLWRxYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQotZHFhZGQ3MTQ4MCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwCi1kcWFkZDcxNDgxIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjEKLWRxYWRkNzE0ODIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgotZHFhZGQ3MTQ4MyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzCi1kcWFkZDcxNDg0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQKLWRxYWRkNzE0ODUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQotZHFhZGQ3MTQ4NiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2Ci1kcWFkZDcxNDg3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcKLWRxYWRkNzE0ODggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAotZHFhZGQ3MTQ4OSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5Ci1kcWFkZDcxNDkwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzAKLWRxYWRkNzE0OTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQotZHFhZGQ3MTQ5MiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyCi1kcWFkZDcxNDkzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMKLWRxYWRkNzE0OTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAotZHFhZGQ3MTQ5NSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1Ci1kcWFkZDcxNDk2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYKLQotLS0gc2FtZSwgRXMgb24gdGhlIDAKLWRxYWRkNzE1MDAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MDkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MTkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MjkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkNzE1MzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKLWRxYWRkNzE1MzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotZHFhZGQ3MTUzNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1kcWFkZDcxNTM2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLWRxYWRkNzE1MzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotCi0tLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMAotcm91bmRpbmc6ICAgIGhhbGZfdXAKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRxYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNjAxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTYwMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQ3MTYxMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKLWRxYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCi0KLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRxYWRkNzE2MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNjIxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE2MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKLWRxYWRkNzE2MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCi0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRxYWRkNzE2NDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNjQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTY0MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE2NDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQ3MTY1MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKLWRxYWRkNzE2NTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCi0KLXJvdW5kaW5nOiAgICB1cAotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZHFhZGQ3MTY2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE2NjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNjYyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTY2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kcWFkZDcxNjcxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQ3MTY3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDAKLQotcm91bmRpbmc6ICAgIGRvd24KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRxYWRkNzE2ODAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNjgxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTY4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE2ODMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQ3MTY5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDAKLWRxYWRkNzE2OTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwCi0KLXJvdW5kaW5nOiAgICBjZWlsaW5nCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDcxNzAwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQ3MTcwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE3MDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDcxNzAzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWRxYWRkNzE3MTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwCi1kcWFkZDcxNzEyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMAotCi0tLSBhbmQgdGhlIGV4dHJhLXNwZWNpYWwgdWdseSBjYXNlOyB1bnVzdWFsIG1pbnVzZXMgbWFya2VkIGJ5IC0tICoKLXJvdW5kaW5nOiAgICBmbG9vcgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZHFhZGQ3MTcyMCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkNzE3MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1kcWFkZDcxNzIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKgotZHFhZGQ3MTcyMyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kcWFkZDcxNzMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgotZHFhZGQ3MTczMiBhZGQgIDExICAgICAtMTEgICAgLT4gIC0wICAgICAgICAgICAgICAgIC0tICoKLQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCi1kcWFkZDcxNzQxIGFkZCAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKLWRxYWRkNzE3NDIgYWRkIDEzMEUtMiAgICAxMkUtMSAgICAgLT4gMi41MAotZHFhZGQ3MTc0MyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCi1kcWFkZDcxNzQ0IGFkZCAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKLWRxYWRkNzE3NDUgYWRkIDEzMEUtMiAgIC0xMjBFLTIgLT4gMC4xMAotZHFhZGQ3MTc0NiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwCi1kcWFkZDcxNzQ3IGFkZCAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKLWRxYWRkNzE3NDggYWRkIDFFMiAgICAgIC0xRTQgICAgLT4gLTkuOUUrMwotCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCi1yb3VuZGluZzogaGFsZl9ldmVuCi0KLWRxYWRkNzUwMDEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcKLWRxYWRkNzUwMDIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAwMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDA0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMDUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAwNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDA3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMDggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAwOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDEwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMTEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAxMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDEzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMTQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAxNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDE2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMTcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAxOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDE5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwMjAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTAyMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKLWRxYWRkNzUwMzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5Ci1kcWFkZDc1MDMxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xCi1kcWFkZDc1MDMyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMgotZHFhZGQ3NTAzMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzCi1kcWFkZDc1MDM0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0Ci1kcWFkZDc1MDM1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NQotZHFhZGQ3NTAzNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2Ci1kcWFkZDc1MDM3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3Ci1kcWFkZDc1MDM4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OAotZHFhZGQ3NTAzOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDQwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNDEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA0MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDQzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNDQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA0NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDQ2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNDcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA0OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDQ5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Ci1yb3VuZGluZzogaGFsZl9ldmVuCi1kcWFkZDc1MDUwIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNTEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA1MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDUzIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNTQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA1NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDU2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNTcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA2MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDYxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNjIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA2MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDY0IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNjUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA2NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDY3IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLS0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKLXJvdW5kaW5nOiB1cAotZHFhZGQ3NTA3MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEKLWRxYWRkNzUwNzEgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA3MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDczIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNzQgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA3NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDc2IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwNzcgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA3OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDc5IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwODAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA4MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDgyIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwODMgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA4NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDg1IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwODYgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQ3NTA4NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDc1MDg4IGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkNzUwODkgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotCi0tLSBOdWxsIHRlc3RzCi1kcWFkZDk5OTAgYWRkIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQWRkLmRlY1Rlc3QgLS0gZGVjUXVhZCBhZGRpdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyBhcmUgZm9yIGRlY1F1YWRzIG9ubHk7IGFsbCBhcmd1bWVudHMgYXJlDQorLS0gcmVwcmVzZW50YWJsZSBpbiBhIGRlY1F1YWQNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddDQorZHFhZGQwMDEgYWRkIDEgICAgICAgMSAgICAgICAtPiAgMg0KK2RxYWRkMDAyIGFkZCAyICAgICAgIDMgICAgICAgLT4gIDUNCitkcWFkZDAwMyBhZGQgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1DQorZHFhZGQwMDQgYWRkICc1JyAgICAgJy0zJyAgICAtPiAgMg0KK2RxYWRkMDA1IGFkZCAnLTUnICAgICctMycgICAgLT4gIC04DQorZHFhZGQwMDYgYWRkICctNycgICAgJzIuNScgICAtPiAgLTQuNQ0KK2RxYWRkMDA3IGFkZCAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KK2RxYWRkMDA4IGFkZCAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCitkcWFkZDAwOSBhZGQgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknDQorZHFhZGQwMTAgYWRkICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KKw0KKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZHFhZGQwMTEgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMDEyIGFkZCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZHFhZGQwMTMgYWRkICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkMDE0IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwMTUgYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5OScgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDAxNiBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMDE3IGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwMTggYWRkICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDEnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDAxOSBhZGQgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMDIwIGFkZCAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQwMjEgYWRkIDAgMSAtPiAxDQorZHFhZGQwMjIgYWRkIDEgMSAtPiAyDQorZHFhZGQwMjMgYWRkIDIgMSAtPiAzDQorZHFhZGQwMjQgYWRkIDMgMSAtPiA0DQorZHFhZGQwMjUgYWRkIDQgMSAtPiA1DQorZHFhZGQwMjYgYWRkIDUgMSAtPiA2DQorZHFhZGQwMjcgYWRkIDYgMSAtPiA3DQorZHFhZGQwMjggYWRkIDcgMSAtPiA4DQorZHFhZGQwMjkgYWRkIDggMSAtPiA5DQorZHFhZGQwMzAgYWRkIDkgMSAtPiAxMA0KKw0KKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KK2RxYWRkMDMxIGFkZCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCitkcWFkZDAzMiBhZGQgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknDQorZHFhZGQwMzMgYWRkICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJw0KK2RxYWRkMDM0IGFkZCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCisNCitkcWFkZDAzNSBhZGQgJzcwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwMzYgYWRkICc3MDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDAzNyBhZGQgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDAzOCBhZGQgJzcwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwMzkgYWRkICc3MDAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkDQorDQorLS0gc3ltbWV0cnk6DQorZHFhZGQwNDAgYWRkICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMDQxIGFkZCAnMTAwMDBlKzM0JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwNDIgYWRkICcxMDAwMGUrMzQnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQwNDQgYWRkICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMDQ1IGFkZCAnMTAwMDBlKzM0JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZA0KKw0KKy0tIHNhbWUsIHdpdGhvdXQgcm91bmRpbmcNCitkcWFkZDA0NiBhZGQgJzEwMDAwZSs5JyAgJzcnIC0+ICcxMDAwMDAwMDAwMDAwNycNCitkcWFkZDA0NyBhZGQgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQorZHFhZGQwNDggYWRkICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCitkcWFkZDA0OSBhZGQgJzEwMDAwZSs5JyAgJzcwMDAnIC0+ICcxMDAwMDAwMDAwNzAwMCcNCitkcWFkZDA1MCBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQorZHFhZGQwNTEgYWRkICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCitkcWFkZDA1MiBhZGQgJzEwMDAwZSs5JyAgJzcwMDAwMDAnIC0+ICcxMDAwMDAwNzAwMDAwMCcNCisNCistLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoDQorZHFhZGQwNTMgYWRkICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCitkcWFkZDA1NCBhZGQgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCitkcWFkZDA1NSBhZGQgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcNCitkcWFkZDA1NiBhZGQgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQorZHFhZGQwNTcgYWRkICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQorDQorLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbg0KK2RxYWRkMDYxIGFkZCAxICcwLjAwMDEnIC0+ICcxLjAwMDEnDQorZHFhZGQwNjIgYWRkIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KK2RxYWRkMDYzIGFkZCAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJw0KK2RxYWRkMDY0IGFkZCAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwMDEnDQorZHFhZGQwNjUgYWRkIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitkcWFkZDA3MCBhZGQgMSAgMCAgICAtPiAxDQorZHFhZGQwNzEgYWRkIDEgMC4gICAgLT4gMQ0KK2RxYWRkMDcyIGFkZCAxICAuMCAgIC0+IDEuMA0KK2RxYWRkMDczIGFkZCAxIDAuMCAgIC0+IDEuMA0KK2RxYWRkMDc0IGFkZCAxIDAuMDAgIC0+IDEuMDANCitkcWFkZDA3NSBhZGQgIDAgIDEgICAtPiAxDQorZHFhZGQwNzYgYWRkIDAuICAxICAgLT4gMQ0KK2RxYWRkMDc3IGFkZCAgLjAgMSAgIC0+IDEuMA0KK2RxYWRkMDc4IGFkZCAwLjAgMSAgIC0+IDEuMA0KK2RxYWRkMDc5IGFkZCAwLjAwIDEgIC0+IDEuMDANCisNCistLSBzb21lIGNhcnJpZXMNCitkcWFkZDA4MCBhZGQgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQ0KK2RxYWRkMDgxIGFkZCA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KK2RxYWRkMDgyIGFkZCAgOTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwDQorZHFhZGQwODMgYWRkICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KK2RxYWRkMDg0IGFkZCAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KK2RxYWRkMDg1IGFkZCAgICAgOTk5OTkgMSAgLT4gMTAwMDAwDQorZHFhZGQwODYgYWRkICAgICAgOTk5OSAxICAtPiAxMDAwMA0KK2RxYWRkMDg3IGFkZCAgICAgICA5OTkgMSAgLT4gMTAwMA0KK2RxYWRkMDg4IGFkZCAgICAgICAgOTkgMSAgLT4gMTAwDQorZHFhZGQwODkgYWRkICAgICAgICAgOSAxICAtPiAxMA0KKw0KKw0KKy0tIG1vcmUgTEhTIHN3YXBzDQorZHFhZGQwOTAgYWRkICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KK2RxYWRkMDkxIGFkZCAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KK2RxYWRkMDkyIGFkZCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQorZHFhZGQwOTMgYWRkICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KK2RxYWRkMDk0IGFkZCAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCitkcWFkZDA5NSBhZGQgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQorZHFhZGQwOTYgYWRkICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KK2RxYWRkMDk3IGFkZCAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KK2RxYWRkMDk4IGFkZCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KK2RxYWRkMDk5IGFkZCAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQorZHFhZGQxMDAgYWRkICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQorZHFhZGQxMDEgYWRkICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCitkcWFkZDEwMiBhZGQgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQorZHFhZGQxMDMgYWRkICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KK2RxYWRkMTA0IGFkZCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQorZHFhZGQxMDUgYWRkICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQorZHFhZGQxMDYgYWRkICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KK2RxYWRkMTA3IGFkZCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFhZGQxMDggYWRkICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZA0KK2RxYWRkMTA5IGFkZCAnLTVFMzUnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgIFJvdW5kZWQNCitkcWFkZDExMCBhZGQgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkDQorZHFhZGQxMTEgYWRkICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KKw0KKy0tIG1vcmUgUkhTIHN3YXBzDQorZHFhZGQxMTMgYWRkIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnDQorZHFhZGQxMTQgYWRkIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycNCitkcWFkZDExNiBhZGQgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQorZHFhZGQxMTcgYWRkIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnDQorZHFhZGQxMTkgYWRkIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnDQorZHFhZGQxMjAgYWRkIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQorZHFhZGQxMjEgYWRkIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnDQorZHFhZGQxMjIgYWRkIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycNCitkcWFkZDEyMyBhZGQgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KK2RxYWRkMTI0IGFkZCAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycNCitkcWFkZDEyNSBhZGQgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1Jw0KK2RxYWRkMTI2IGFkZCAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCitkcWFkZDEyNyBhZGQgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScNCitkcWFkZDEyOCBhZGQgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScNCitkcWFkZDEyOSBhZGQgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQorZHFhZGQxMzAgYWRkIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcNCitkcWFkZDEzMSBhZGQgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcNCitkcWFkZDEzMiBhZGQgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFhZGQxMzMgYWRkIDAgICctNUUzNCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZA0KK2RxYWRkMTM0IGFkZCAwICAnLTVFMzUnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQNCitkcWFkZDEzNSBhZGQgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQorZHFhZGQxMzYgYWRkIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KKw0KKy0tIHJlbGF0ZWQNCitkcWFkZDEzNyBhZGQgIDEgICcwRS0zOScgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KK2RxYWRkMTM4IGFkZCAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZHFhZGQxMzkgYWRkICcwRS0zOScgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCitkcWFkZDE0MCBhZGQgJzBFLTM5JyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KK2RxYWRkMTQxIGFkZCAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnDQorZHFhZGQxNDIgYWRkIDFFKzI5ICAgMC4wMDAwMCAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwMCcgIFJvdW5kZWQNCitkcWFkZDE0MyBhZGQgMC4wMDAgICAxRSszMCAgICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDAwJw0KK2RxYWRkMTQ0IGFkZCAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQorDQorLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCitkcWFkZDE0NiBhZGQgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJw0KK2RxYWRkMTQ3IGFkZCAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KK2RxYWRkMTQ4IGFkZCAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KK2RxYWRkMTQ5IGFkZCAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnDQorZHFhZGQxNTAgYWRkICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQorZHFhZGQxNTEgYWRkICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQorZHFhZGQxNTIgYWRkICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycNCitkcWFkZDE1MyBhZGQgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KK2RxYWRkMTU0IGFkZCAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQorZHFhZGQxNTUgYWRkICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnDQorZHFhZGQxNTYgYWRkICczJyAgICAgJzMnICAgICAtPiAgJzYnDQorZHFhZGQxNTcgYWRkICczJyAgICAgJyszJyAgICAtPiAgJzYnDQorZHFhZGQxNTggYWRkICczJyAgICAgJy0zJyAgICAtPiAgJzAnDQorZHFhZGQxNTkgYWRkICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCitkcWFkZDE2MCBhZGQgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCisNCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KK2RxYWRkMTYxIGFkZCAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScNCitkcWFkZDE2MiBhZGQgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJw0KK2RxYWRkMTYzIGFkZCAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQorZHFhZGQxNjQgYWRkICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5Jw0KK2RxYWRkMTY1IGFkZCAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknDQorZHFhZGQxNjYgYWRkICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCitkcWFkZDE2NyBhZGQgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJw0KK2RxYWRkMTY4IGFkZCAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknDQorDQorcm91bmRpbmc6IGhhbGZfdXANCitkcWFkZDE3MCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3MSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NicgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3MiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NScgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3MyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3NCBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3NSBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3NiBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDE3NyBhZGQgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBSb3VuZGVkDQorZHFhZGQxNzggYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDUnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQxNzkgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQxODAgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQxODEgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQxODIgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQxODMgYWRkICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgUm91bmRlZA0KKw0KKy0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCityb3VuZGluZzogaGFsZl91cA0KK2RxYWRkMjAwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCitkcWFkZDIwMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjAyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMDMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIwNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjA1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMDYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIwNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjA4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMDkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIxMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjExIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMTIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIxMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjE0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMTUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIxNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQorZHFhZGQyMTcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIxOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjE5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RxYWRkMjIwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCitkcWFkZDIyMSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjIyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMjMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIyNCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjI1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMjYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIyNyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjI4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMjkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIzMCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjMxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMzIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIzMyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjM0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyMzUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIzNiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQorZHFhZGQyMzcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDIzOCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjM5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCitkcWFkZDI0MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjQxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNDIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2RxYWRkMjUwIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCitkcWFkZDI1MSBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjUyIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNTMgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI1NCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjU1IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNTYgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI1NyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjU4IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNTkgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI2MCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjYxIGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNjIgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI2MyBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjY0IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQyNjUgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI2NiBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQorZHFhZGQyNjcgYWRkICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDI2OCBhZGQgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMjY5IGFkZCAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzDQorcm91bmRpbmc6IGhhbGZfdXANCitkcWFkZDMwMSBhZGQgIC0xICAgMSAgICAgIC0+ICAgMA0KK2RxYWRkMzAyIGFkZCAgIDAgICAxICAgICAgLT4gICAxDQorZHFhZGQzMDMgYWRkICAgMSAgIDEgICAgICAtPiAgIDINCitkcWFkZDMwNCBhZGQgIDEyICAgMSAgICAgIC0+ICAxMw0KK2RxYWRkMzA1IGFkZCAgOTggICAxICAgICAgLT4gIDk5DQorZHFhZGQzMDYgYWRkICA5OSAgIDEgICAgICAtPiAxMDANCitkcWFkZDMwNyBhZGQgMTAwICAgMSAgICAgIC0+IDEwMQ0KK2RxYWRkMzA4IGFkZCAxMDEgICAxICAgICAgLT4gMTAyDQorZHFhZGQzMDkgYWRkICAtMSAgLTEgICAgICAtPiAgLTINCitkcWFkZDMxMCBhZGQgICAwICAtMSAgICAgIC0+ICAtMQ0KK2RxYWRkMzExIGFkZCAgIDEgIC0xICAgICAgLT4gICAwDQorZHFhZGQzMTIgYWRkICAxMiAgLTEgICAgICAtPiAgMTENCitkcWFkZDMxMyBhZGQgIDk4ICAtMSAgICAgIC0+ICA5Nw0KK2RxYWRkMzE0IGFkZCAgOTkgIC0xICAgICAgLT4gIDk4DQorZHFhZGQzMTUgYWRkIDEwMCAgLTEgICAgICAtPiAgOTkNCitkcWFkZDMxNiBhZGQgMTAxICAtMSAgICAgIC0+IDEwMA0KKw0KK2RxYWRkMzIxIGFkZCAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KK2RxYWRkMzIyIGFkZCAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KK2RxYWRkMzIzIGFkZCAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KK2RxYWRkMzI0IGFkZCAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KK2RxYWRkMzI1IGFkZCAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KK2RxYWRkMzI2IGFkZCAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KK2RxYWRkMzI3IGFkZCAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KK2RxYWRkMzI4IGFkZCAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KK2RxYWRkMzI5IGFkZCAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KK2RxYWRkMzMwIGFkZCAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KK2RxYWRkMzMxIGFkZCAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KK2RxYWRkMzMyIGFkZCAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KK2RxYWRkMzMzIGFkZCAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KK2RxYWRkMzM0IGFkZCAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KK2RxYWRkMzM1IGFkZCAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KK2RxYWRkMzM2IGFkZCAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KKw0KKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KK2RxYWRkMzQwIGFkZCAxRSszICAgIDAgICAgLT4gICAgICAgICAxMDAwDQorZHFhZGQzNDEgYWRkIDFFKzMzICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFhZGQzNDIgYWRkIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KK2RxYWRkMzQzIGFkZCAxRSszNSAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQNCistLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uDQorZHFhZGQzNDQgYWRkIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDENCitkcWFkZDM0NSBhZGQgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcWFkZDM0NiBhZGQgMUUrMzQgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0NyBhZGQgMUUrMzUgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0OCBhZGQgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KK2RxYWRkMzQ5IGFkZCAxRSszMyAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RxYWRkMzUwIGFkZCAxRSszNCAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzUxIGFkZCAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRyeXplcm9zIGNhc2VzDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkcWFkZDM2MCAgYWRkIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCitkcWFkZDM2MSAgYWRkIDBFLTUwIDEwMDAwRSsxICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkDQorZHFhZGQzNjIgIGFkZCAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KK2RxYWRkMzYzICBhZGQgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDM2NCAgYWRkIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwRSs2MTExDQorLS0gICAgICAgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KKw0KKy0tIGEgY3VyaW9zaXR5IGZyb20gSlNSIDEzIHRlc3RpbmcNCityb3VuZGluZzogICAgaGFsZl9kb3duDQorZHFhZGQzNzAgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCitkcWFkZDM3MSBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorZHFhZGQzNzIgYWRkICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCitkcWFkZDM3MyBhZGQgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCitkcWFkZDM3NCBhZGQgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNA0KK2RxYWRkMzc1IGFkZCA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQorDQorLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQorZHFhZGQ0MDAgYWRkICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQ0MDEgYWRkICAgMSAgIDc3ZS0zMyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KK2RxYWRkNDAyIGFkZCAgIDEgICA3N2UtMzQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MDMgYWRkICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQwNCBhZGQgICAxICAgNzdlLTM2ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDA1IGFkZCAgIDEgICA3N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MDYgYWRkICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDQxMCBhZGQgIDEwICAgNzdlLTMyICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQ0MTEgYWRkICAxMCAgIDc3ZS0zMyAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQxMiBhZGQgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDEzIGFkZCAgMTAgICA3N2UtMzUgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MTQgYWRkICAxMCAgIDc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQxNSBhZGQgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDE2IGFkZCAgMTAgICA3N2UtMjk5ICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQ0MjAgYWRkICA3N2UtMzIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQ0MjEgYWRkICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KK2RxYWRkNDIyIGFkZCAgNzdlLTM0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MjMgYWRkICA3N2UtMzUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQyNCBhZGQgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDI1IGFkZCAgNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MjYgYWRkICA3N2UtMjk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDQzMCBhZGQgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQ0MzEgYWRkICA3N2UtMzMgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQzMiBhZGQgIDc3ZS0zNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDMzIGFkZCAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ0MzQgYWRkICA3N2UtMzYgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDQzNSBhZGQgIDc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNDM2IGFkZCAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gZmFzdHBhdGggYm91bmRhcmllcw0KKy0tICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KK2RxYWRkNTAxIGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUwMiBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MDMgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzM1NTU1NTU1NTU1NTU1NTU1NTUwNTU1NTU1NTU1NTU1NTUnIC0+ICc3OTk5OTk5OTk5OTk5OTk5OTk5NDk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTA0IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICczOTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODM5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUwNSBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNDk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzkzOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MDYgYWRkICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzU5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+IDEuMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDUxMSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MTIgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTEzIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUxNCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MTUgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTE2IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUxNyBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MTggYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTE5IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUyMCBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MjEgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTIyIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUyMyBhZGQgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMzMzMzMzMzMzMzMzMzMzMzMzMzMzMycgLT4gJzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcnDQorZHFhZGQ1MjQgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTI1IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUyNiBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MjcgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTI4IGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OTk5OScNCitkcWFkZDUyOSBhZGQgJzM0NDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTk5OTknDQorZHFhZGQ1MzAgYWRkICczNDQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkNTMxIGFkZCAnMzQ0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OTk5OScNCitkcWFkZDUzMiBhZGQgJzM0NDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTk5OTknDQorZHFhZGQ1MzMgYWRkICczNDQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5OTk5Jw0KK2RxYWRkNTM0IGFkZCAnMzQ0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NTUnIC0+ICc4OTk5OTk5OTk5OScNCitkcWFkZDUzNSBhZGQgJzM0NDQ0NDQ0NDQnICAnNTU1NTU1NTU1NScgLT4gJzg5OTk5OTk5OTknDQorZHFhZGQ1MzYgYWRkICczNDQ0NDQ0NDQnICAnNTU1NTU1NTU1JyAtPiAnODk5OTk5OTk5Jw0KK2RxYWRkNTM3IGFkZCAnMzQ0NDQ0NDQnICAnNTU1NTU1NTUnIC0+ICc4OTk5OTk5OScNCitkcWFkZDUzOCBhZGQgJzM0NDQ0NDQnICAnNTU1NTU1NScgLT4gJzg5OTk5OTknDQorZHFhZGQ1MzkgYWRkICczNDQ0NDQnICAnNTU1NTU1JyAtPiAnODk5OTk5Jw0KK2RxYWRkNTQwIGFkZCAnMzQ0NDQnICAnNTU1NTUnIC0+ICc4OTk5OScNCitkcWFkZDU0MSBhZGQgJzM0NDQnICAnNTU1NScgLT4gJzg5OTknDQorZHFhZGQ1NDIgYWRkICczNDQnICAnNTU1JyAtPiAnODk5Jw0KK2RxYWRkNTQzIGFkZCAnMzQnICAnNTUnIC0+ICc4OScNCitkcWFkZDU0NCBhZGQgJzMnICAnNScgLT4gJzgnDQorDQorZHFhZGQ1NDUgYWRkICczMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc2MDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwJw0KK2RxYWRkNTQ2IGFkZCAnMzAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnNzAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCitkcWFkZDU0NyBhZGQgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzgwMDAwMDAwNDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFhZGQ1NDggYWRkICc0MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc3MDAwMDAwMDA0MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KK2RxYWRkNTQ5IGFkZCAnNDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnODAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCitkcWFkZDU1MCBhZGQgJzQwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gJzkwMDAwMDAwMDQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFhZGQ1NTEgYWRkICc1MDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgJzMwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIC0+ICc4MDAwMDAwMDQwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KK2RxYWRkNTUyIGFkZCAnNTAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcgICc0MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAtPiAnOTAwMDAwMDQwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMCcNCitkcWFkZDU1MyBhZGQgJzUwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAnICAnNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgLT4gMS4wMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IFJvdW5kZWQNCistLSBjaGVjayBwcm9wYWdhdGlvbg0KK2RxYWRkNTU0IGFkZCAnODk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYWRkNTU1IGFkZCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgICc4OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYWRkNTU2IGFkZCAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICc0NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYWRkNTU3IGFkZCAnNDU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NicgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAtPiAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tIG5lZ2F0aXZlIHVscHMNCitkcWFkZDY0NDAgYWRkICAgMSAgIC03N2UtMzIgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ0MSBhZGQgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ0MiBhZGQgICAxICAgLTc3ZS0zNCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY0NDMgYWRkICAgMSAgIC03N2UtMzUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ0NCBhZGQgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDQ1IGFkZCAgIDEgICAtNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ0NiBhZGQgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDY0NTAgYWRkICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY0NTEgYWRkICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NDUyIGFkZCAgMTAgICAtNzdlLTM0ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0NTMgYWRkICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ1NCBhZGQgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0NTUgYWRkICAxMCAgIC03N2UtMzcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDU2IGFkZCAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkNjQ2MCBhZGQgIC03N2UtMzIgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NDYxIGFkZCAgLTc3ZS0zMyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NDYyIGFkZCAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ2MyBhZGQgIC03N2UtMzUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDY0IGFkZCAgLTc3ZS0zNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0NjUgYWRkICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDY2IGFkZCAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkNjQ3MCBhZGQgIC03N2UtMzIgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ3MSBhZGQgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY0NzIgYWRkICAtNzdlLTM0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ3MyBhZGQgIC03N2UtMzUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDc0IGFkZCAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ3NSBhZGQgIC03N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0NzYgYWRkICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbmVnYXRpdmUgdWxwcw0KK2RxYWRkNjQ4MCBhZGQgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ4MSBhZGQgIC0xICAgIDc3ZS0zMyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY0ODIgYWRkICAtMSAgICA3N2UtMzQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjQ4MyBhZGQgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ4NCBhZGQgIC0xICAgIDc3ZS0zNiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ4NSBhZGQgIC0xICAgIDc3ZS0zNyAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDg2IGFkZCAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDY0OTAgYWRkIC0xMCAgICA3N2UtMzIgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NDkxIGFkZCAtMTAgICAgNzdlLTMzICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY0OTIgYWRkIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0OTMgYWRkIC0xMCAgICA3N2UtMzUgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY0OTQgYWRkIC0xMCAgICA3N2UtMzYgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjQ5NSBhZGQgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NDk2IGFkZCAtMTAgICAgNzdlLTk5ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDY1MDAgYWRkICAgNzdlLTMyICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY1MDEgYWRkICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NTAyIGFkZCAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDY1MDMgYWRkICAgNzdlLTM1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1MDQgYWRkICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1MDUgYWRkICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjUwNiBhZGQgICA3N2UtOTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQ2NTEwIGFkZCAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkNjUxMSBhZGQgICA3N2UtMzMgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQ2NTEyIGFkZCAgIDc3ZS0zNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTEzIGFkZCAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTE0IGFkZCAgIDc3ZS0zNiAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1MTUgYWRkICAgNzdlLTM3ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjUxNiBhZGQgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCityb3VuZGluZzogaGFsZl91cA0KK2RxYWRkNjU0MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknDQorZHFhZGQ2NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTQ5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTUwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTUxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTUyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTUzIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTU0IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTU1IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ2NTU2IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcNCitkcWFkZDY1NTcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NTggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NTkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZHFhZGQ2NTYwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCitkcWFkZDY1NjEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjcgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjggYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NjkgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzEgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzIgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzMgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzQgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzUgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDY1NzYgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJw0KK2RxYWRkNjU3NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjU3OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNjU3OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQorZHFhZGQ3NTQwIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTQxIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTQyIGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkcWFkZDc1NTAgYWRkICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5Jw0KK2RxYWRkNzU1MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1NyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1OCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU1OSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2MCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2MSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2MiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2MyBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2NCBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2NSBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzU2NiBhZGQgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQorZHFhZGQ3NTY3IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTY4IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTY5IGFkZCAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbW9yZSB6ZXJvcywgZXRjLg0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitkcWFkZDc3MDEgYWRkIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQorZHFhZGQ3NzAyIGFkZCAwMC4wMCAwLjAwMCAgLT4gMC4wMDANCitkcWFkZDc3MDMgYWRkIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KK2RxYWRkNzcwNCBhZGQgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQorDQorZHFhZGQ3NzEwIGFkZCAwRSszICAwMC4wMCAgLT4gMC4wMA0KK2RxYWRkNzcxMSBhZGQgMEUrMyAgMDAuMCAgIC0+IDAuMA0KK2RxYWRkNzcxMiBhZGQgMEUrMyAgMDAuICAgIC0+IDANCitkcWFkZDc3MTMgYWRkIDBFKzMgIDAwLkUrMSAtPiAwRSsxDQorZHFhZGQ3NzE0IGFkZCAwRSszICAwMC5FKzIgLT4gMEUrMg0KK2RxYWRkNzcxNSBhZGQgMEUrMyAgMDAuRSszIC0+IDBFKzMNCitkcWFkZDc3MTYgYWRkIDBFKzMgIDAwLkUrNCAtPiAwRSszDQorZHFhZGQ3NzE3IGFkZCAwRSszICAwMC5FKzUgLT4gMEUrMw0KK2RxYWRkNzcxOCBhZGQgMEUrMyAgLTAwLjAgICAtPiAwLjANCitkcWFkZDc3MTkgYWRkIDBFKzMgIC0wMC4gICAgLT4gMA0KK2RxYWRkNzczMSBhZGQgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQorDQorZHFhZGQ3NzIwIGFkZCAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KK2RxYWRkNzcyMSBhZGQgMDAuMCAgIDBFKzMgIC0+IDAuMA0KK2RxYWRkNzcyMiBhZGQgMDAuICAgIDBFKzMgIC0+IDANCitkcWFkZDc3MjMgYWRkIDAwLkUrMSAwRSszICAtPiAwRSsxDQorZHFhZGQ3NzI0IGFkZCAwMC5FKzIgMEUrMyAgLT4gMEUrMg0KK2RxYWRkNzcyNSBhZGQgMDAuRSszIDBFKzMgIC0+IDBFKzMNCitkcWFkZDc3MjYgYWRkIDAwLkUrNCAwRSszICAtPiAwRSszDQorZHFhZGQ3NzI3IGFkZCAwMC5FKzUgMEUrMyAgLT4gMEUrMw0KK2RxYWRkNzcyOCBhZGQgLTAwLjAwIDBFKzMgIC0+IDAuMDANCitkcWFkZDc3MjkgYWRkIC0wMC4wICAwRSszICAtPiAwLjANCitkcWFkZDc3MzAgYWRkIC0wMC4gICAwRSszICAtPiAwDQorDQorZHFhZGQ3NzMyIGFkZCAgMCAgICAgMCAgICAgLT4gIDANCitkcWFkZDc3MzMgYWRkICAwICAgIC0wICAgICAtPiAgMA0KK2RxYWRkNzczNCBhZGQgLTAgICAgIDAgICAgIC0+ICAwDQorZHFhZGQ3NzM1IGFkZCAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgNzU0IHNwZWNpYWwgY2FzZQ0KKw0KK2RxYWRkNzczNiBhZGQgIDEgICAgLTEgICAgIC0+ICAwDQorZHFhZGQ3NzM3IGFkZCAtMSAgICAtMSAgICAgLT4gLTINCitkcWFkZDc3MzggYWRkICAxICAgICAxICAgICAtPiAgMg0KK2RxYWRkNzczOSBhZGQgLTEgICAgIDEgICAgIC0+ICAwDQorDQorZHFhZGQ3NzQxIGFkZCAgMCAgICAtMSAgICAgLT4gLTENCitkcWFkZDc3NDIgYWRkIC0wICAgIC0xICAgICAtPiAtMQ0KK2RxYWRkNzc0MyBhZGQgIDAgICAgIDEgICAgIC0+ICAxDQorZHFhZGQ3NzQ0IGFkZCAtMCAgICAgMSAgICAgLT4gIDENCitkcWFkZDc3NDUgYWRkIC0xICAgICAwICAgICAtPiAtMQ0KK2RxYWRkNzc0NiBhZGQgLTEgICAgLTAgICAgIC0+IC0xDQorZHFhZGQ3NzQ3IGFkZCAgMSAgICAgMCAgICAgLT4gIDENCitkcWFkZDc3NDggYWRkICAxICAgIC0wICAgICAtPiAgMQ0KKw0KK2RxYWRkNzc1MSBhZGQgIDAuMCAgLTEgICAgIC0+IC0xLjANCitkcWFkZDc3NTIgYWRkIC0wLjAgIC0xICAgICAtPiAtMS4wDQorZHFhZGQ3NzUzIGFkZCAgMC4wICAgMSAgICAgLT4gIDEuMA0KK2RxYWRkNzc1NCBhZGQgLTAuMCAgIDEgICAgIC0+ICAxLjANCitkcWFkZDc3NTUgYWRkIC0xLjAgICAwICAgICAtPiAtMS4wDQorZHFhZGQ3NzU2IGFkZCAtMS4wICAtMCAgICAgLT4gLTEuMA0KK2RxYWRkNzc1NyBhZGQgIDEuMCAgIDAgICAgIC0+ICAxLjANCitkcWFkZDc3NTggYWRkICAxLjAgIC0wICAgICAtPiAgMS4wDQorDQorZHFhZGQ3NzYxIGFkZCAgMCAgICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkNzc2MiBhZGQgLTAgICAgLTEuMCAgIC0+IC0xLjANCitkcWFkZDc3NjMgYWRkICAwICAgICAxLjAgICAtPiAgMS4wDQorZHFhZGQ3NzY0IGFkZCAtMCAgICAgMS4wICAgLT4gIDEuMA0KK2RxYWRkNzc2NSBhZGQgLTEgICAgIDAuMCAgIC0+IC0xLjANCitkcWFkZDc3NjYgYWRkIC0xICAgIC0wLjAgICAtPiAtMS4wDQorZHFhZGQ3NzY3IGFkZCAgMSAgICAgMC4wICAgLT4gIDEuMA0KK2RxYWRkNzc2OCBhZGQgIDEgICAgLTAuMCAgIC0+ICAxLjANCisNCitkcWFkZDc3NzEgYWRkICAwLjAgIC0xLjAgICAtPiAtMS4wDQorZHFhZGQ3NzcyIGFkZCAtMC4wICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkNzc3MyBhZGQgIDAuMCAgIDEuMCAgIC0+ICAxLjANCitkcWFkZDc3NzQgYWRkIC0wLjAgICAxLjAgICAtPiAgMS4wDQorZHFhZGQ3Nzc1IGFkZCAtMS4wICAgMC4wICAgLT4gLTEuMA0KK2RxYWRkNzc3NiBhZGQgLTEuMCAgLTAuMCAgIC0+IC0xLjANCitkcWFkZDc3NzcgYWRkICAxLjAgICAwLjAgICAtPiAgMS4wDQorZHFhZGQ3Nzc4IGFkZCAgMS4wICAtMC4wICAgLT4gIDEuMA0KKw0KKy0tIFNwZWNpYWxzDQorZHFhZGQ3NzgwIGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzgxIGFkZCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzgyIGFkZCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzgzIGFkZCAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg0IGFkZCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg1IGFkZCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg2IGFkZCAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg3IGFkZCAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg4IGFkZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzg5IGFkZCAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzkwIGFkZCAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzkxIGFkZCAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzkyIGFkZCAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3NzkzIGFkZCAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQ3Nzk0IGFkZCAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWFkZDc4MDAgYWRkICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzgwMSBhZGQgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwMiBhZGQgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwMyBhZGQgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwNCBhZGQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwNSBhZGQgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwNiBhZGQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwNyBhZGQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwOCBhZGQgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkNzgwOSBhZGQgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODEwIGFkZCAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQ3ODExIGFkZCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQ3ODEyIGFkZCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQ3ODEzIGFkZCAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQ3ODE0IGFkZCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQ3ODE1IGFkZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZHFhZGQ3ODIxIGFkZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2RxYWRkNzgyMiBhZGQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcWFkZDc4MjMgYWRkICBOYU4gLTEgICAgICAtPiAgTmFODQorZHFhZGQ3ODI0IGFkZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2RxYWRkNzgyNSBhZGQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcWFkZDc4MjYgYWRkICBOYU4gIDEgICAgICAtPiAgTmFODQorZHFhZGQ3ODI3IGFkZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2RxYWRkNzgyOCBhZGQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcWFkZDc4MjkgYWRkICBOYU4gIE5hTiAgICAtPiAgTmFODQorZHFhZGQ3ODMwIGFkZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2RxYWRkNzgzMSBhZGQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDc4MzIgYWRkIC0xICAgIE5hTiAgICAtPiAgTmFODQorZHFhZGQ3ODMzIGFkZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KK2RxYWRkNzgzNCBhZGQgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDc4MzUgYWRkICAxICAgIE5hTiAgICAtPiAgTmFODQorZHFhZGQ3ODM2IGFkZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RxYWRkNzgzNyBhZGQgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcWFkZDc4NDEgYWRkICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg0MiBhZGQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODQzIGFkZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NDQgYWRkICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg0NSBhZGQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODQ2IGFkZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NDcgYWRkICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg0OCBhZGQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODQ5IGFkZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NTAgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg1MSBhZGQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODUyIGFkZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NTMgYWRkIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg1NCBhZGQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODU1IGFkZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NTYgYWRkICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg1NyBhZGQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODU4IGFkZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NTkgYWRkICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcWFkZDc4NjEgYWRkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KK2RxYWRkNzg2MiBhZGQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZHFhZGQ3ODYzIGFkZCAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCitkcWFkZDc4NjQgYWRkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KK2RxYWRkNzg2NSBhZGQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZHFhZGQ3ODY2IGFkZCAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCitkcWFkZDc4NjcgYWRkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KK2RxYWRkNzg2OCBhZGQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZHFhZGQ3ODY5IGFkZCAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQorZHFhZGQ3ODcxIGFkZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg3MiBhZGQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NzMgYWRkICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODc0IGFkZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg3NSBhZGQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NzYgYWRkICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODc3IGFkZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg3OCBhZGQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4NzkgYWRkICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODgwIGFkZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkNzg4MSBhZGQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDc4ODIgYWRkIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCitkcWFkZDc4ODMgYWRkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ3ODg0IGFkZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZHFhZGQ3ODg1IGFkZCAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEhlcmUgd2UgZXhwbG9yZSBuZWFyIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluDQorZHFhZGQ3NTc1IGFkZCAgMUUtNjE0MyAtMUUtNjE3NiAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwNCitkcWFkZDc1NzYgYWRkIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KKw0KKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxYWRkNzk3MiBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcWFkZDc5NzMgYWRkICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk3NCBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTc1IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTEgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk3NiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA5RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5NzcgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTc4IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDdFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk3OSBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA2RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5ODAgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTgxIGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDRFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk4MiBhZGQgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAzRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5ODMgYWRkICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTg0IGFkZCAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDFFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkNzk4NSBhcHBseSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFhZGQ3OTg2IGFkZCAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTg3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTg4IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTEgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5ODkgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk5MCBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC04RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTkxIGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTdFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5OTIgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk5MyBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC01RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTk0IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTRFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDc5OTUgYWRkICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzk5NiBhZGQgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0yRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3OTk3IGFkZCAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTFFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMNCityb3VuZGluZzogICAgIGRvd24NCitkcWFkZDcxMTAwIGFkZCAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDEgYWRkIDFlKzEgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDMgYWRkICAgKzEgLTFlLTYxNDMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDcxMTA0IGFkZCAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDUgYWRkIDFlLTIgLTFlLTYxNDMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDYgYWRkIDFlLTMgLTFlLTYxNDMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDcxMTA3IGFkZCAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDggYWRkIDFlLTUgLTFlLTYxNDMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMDkgYWRkIDFlLTYgLTFlLTYxNDMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KKw0KK3JvdW5kaW5nOiAgICAgY2VpbGluZw0KK2RxYWRkNzExMTAgYWRkIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMTEgYWRkIC0xZSsxICsxZS02MTQzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDcxMTEzIGFkZCAgICAtMSArMWUtNjE0MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMTQgYWRkIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMTUgYWRkIC0xZS0yICsxZS02MTQzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDcxMTE2IGFkZCAtMWUtMyArMWUtNjE0MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMTcgYWRkIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkNzExMTggYWRkIC0xZS01ICsxZS02MTQzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDcxMTE5IGFkZCAtMWUtNiArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQorDQorLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UNCityb3VuZGluZzogICAgIGhhbGZfZXZlbg0KKw0KK2RxYWRkNzEzMDAgYWRkIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMxMCBhZGQgMUUzNCAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzExIGFkZCAxRTM0ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMTIgYWRkIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMxMyBhZGQgMUUzNCAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzE0IGFkZCAxRTM0ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMTUgYWRkIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMxNiBhZGQgMUUzNCAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzE3IGFkZCAxRTM0ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMTggYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMxOSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzIwIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMjEgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMyMiBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzIzIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMjQgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMyNSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzI2IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMjcgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMyOCBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzI5IGFkZCAxRTM0ICAtMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMzAgYWRkIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMzMSBhZGQgMUUzNCAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzMyIGFkZCAxRTM0ICAtMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMzMgYWRkIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMzNCBhZGQgMUUzNCAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzM1IGFkZCAxRTM0ICAtMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMzYgYWRkIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3MTMzNyBhZGQgMUUzNCAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzM4IGFkZCAxRTM0ICAtMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzMzkgYWRkIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQ3MTM0MCBhZGQgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDcxMzQxIGFkZCAxRTM0ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkNzEzNDkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNTkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNjkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzNzkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODcgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODggYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzODkgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTAgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTEgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTIgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTMgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTQgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTUgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkNzEzOTYgYWRkIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KK2RxYWRkNzE0MjAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0MjEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNDIyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0MjMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0MjQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNDI1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0MjYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0MjcgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNw0KK2RxYWRkNzE0MjggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOA0KK2RxYWRkNzE0MjkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2RxYWRkNzE0MzAgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTANCitkcWFkZDcxNDMxIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTExDQorZHFhZGQ3MTQzMiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2RxYWRkNzE0MzMgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMNCitkcWFkZDcxNDM0IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE0DQorZHFhZGQ3MTQzNSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2RxYWRkNzE0MzYgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYNCitkcWFkZDcxNDM3IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE3DQorZHFhZGQ3MTQzOCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2RxYWRkNzE0MzkgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkNCitkcWFkZDcxNDQwIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIwDQorZHFhZGQ3MTQ0MSBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KK2RxYWRkNzE0NDIgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjINCitkcWFkZDcxNDQzIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIzDQorZHFhZGQ3MTQ0NCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KK2RxYWRkNzE0NDUgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUNCitkcWFkZDcxNDQ2IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI2DQorZHFhZGQ3MTQ0NyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KK2RxYWRkNzE0NDggYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgNCitkcWFkZDcxNDQ5IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI5DQorZHFhZGQ3MTQ1MCBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KK2RxYWRkNzE0NTEgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzENCitkcWFkZDcxNDUyIGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMyDQorZHFhZGQ3MTQ1MyBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KK2RxYWRkNzE0NTQgYWRkICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQNCitkcWFkZDcxNDU1IGFkZCAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM1DQorZHFhZGQ3MTQ1NiBhZGQgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KKw0KKy0tIHNhbWUsIHJldmVyc2VkIDANCitkcWFkZDcxNDYwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0NjEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0NjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNDYzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0NjQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0NjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNDY2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE0NjcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03DQorZHFhZGQ3MTQ2OCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTgNCitkcWFkZDcxNDY5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2RxYWRkNzE0NzAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KK2RxYWRkNzE0NzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KK2RxYWRkNzE0NzIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2RxYWRkNzE0NzMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KK2RxYWRkNzE0NzQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KK2RxYWRkNzE0NzUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2RxYWRkNzE0NzYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KK2RxYWRkNzE0NzcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KK2RxYWRkNzE0NzggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2RxYWRkNzE0NzkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KK2RxYWRkNzE0ODAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMA0KK2RxYWRkNzE0ODEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KK2RxYWRkNzE0ODIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMg0KK2RxYWRkNzE0ODMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMw0KK2RxYWRkNzE0ODQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KK2RxYWRkNzE0ODUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQ0KK2RxYWRkNzE0ODYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNg0KK2RxYWRkNzE0ODcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KK2RxYWRkNzE0ODggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOA0KK2RxYWRkNzE0ODkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOQ0KK2RxYWRkNzE0OTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KK2RxYWRkNzE0OTEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQ0KK2RxYWRkNzE0OTIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMg0KK2RxYWRkNzE0OTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KK2RxYWRkNzE0OTQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNA0KK2RxYWRkNzE0OTUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNQ0KK2RxYWRkNzE0OTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KKw0KKy0tIHNhbWUsIEVzIG9uIHRoZSAwDQorZHFhZGQ3MTUwMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MDEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTAyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUwMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MDQgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTA1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUwNiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MDcgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTA4IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUwOSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MTAgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTExIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUxMiBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MTMgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTE0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUxNSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MTYgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTE3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUxOCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MTkgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTIwIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUyMSBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MjIgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTIzIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUyNCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MjUgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTI2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUyNyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MjggYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTI5IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUzMCBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkNzE1MzEgYWRkIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDcxNTMyIGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQ3MTUzMyBhZGQgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCitkcWFkZDcxNTM0IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkcWFkZDcxNTM1IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkcWFkZDcxNTM2IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkcWFkZDcxNTM3IGFkZCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCisNCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RxYWRkNzE2MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTYwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNjAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE2MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDcxNjExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RxYWRkNzE2MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDcxNjIwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE2MjEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTYyMiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNjIzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZHFhZGQ3MTYzMSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCitkcWFkZDcxNjMyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZHFhZGQ3MTY0MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNjQxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE2NDIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTY0MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RxYWRkNzE2NTEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQ3MTY1MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgdXANCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZHFhZGQ3MTY2MCBhZGQgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNjYxIGFkZCAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE2NjIgYWRkICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTY2MyBhZGQgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RxYWRkNzE2NzEgYWRkIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQ3MTY3MiBhZGQgIDExICAgICAtMTEgICAgLT4gIDANCisNCityb3VuZGluZzogICAgZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDcxNjgwIGFkZCAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE2ODEgYWRkIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTY4MiBhZGQgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNjgzIGFkZCAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZHFhZGQ3MTY5MSBhZGQgLTExICAgICAgMTEgICAgLT4gIDANCitkcWFkZDcxNjkyIGFkZCAgMTEgICAgIC0xMSAgICAtPiAgMA0KKw0KK3JvdW5kaW5nOiAgICBjZWlsaW5nDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RxYWRkNzE3MDAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTcwMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDcxNzAyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkNzE3MDMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDcxNzExIGFkZCAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RxYWRkNzE3MTIgYWRkICAxMSAgICAgLTExICAgIC0+ICAwDQorDQorLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQorcm91bmRpbmc6ICAgIGZsb29yDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RxYWRkNzE3MjAgYWRkICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQ3MTcyMSBhZGQgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCitkcWFkZDcxNzIyIGFkZCAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KK2RxYWRkNzE3MjMgYWRkIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDcxNzMxIGFkZCAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KK2RxYWRkNzE3MzIgYWRkICAxMSAgICAgLTExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQorDQorLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQorZHFhZGQ3MTc0MSBhZGQgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQorZHFhZGQ3MTc0MiBhZGQgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQorZHFhZGQ3MTc0MyBhZGQgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwDQorZHFhZGQ3MTc0NCBhZGQgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQorZHFhZGQ3MTc0NSBhZGQgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwDQorZHFhZGQ3MTc0NiBhZGQgMTMwRS0yICAgLTEyRS0xICAtPiAwLjEwDQorZHFhZGQ3MTc0NyBhZGQgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQorZHFhZGQ3MTc0OCBhZGQgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszDQorDQorLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitkcWFkZDc1MDAxIGFkZCAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3DQorZHFhZGQ3NTAwMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAwOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxMiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxNSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxOCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAxOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAyMCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTAyMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KK2RxYWRkNzUwMzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc5DQorZHFhZGQ3NTAzMSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQ0KK2RxYWRkNzUwMzIgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyDQorZHFhZGQ3NTAzMyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzDQorZHFhZGQ3NTAzNCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNA0KK2RxYWRkNzUwMzUgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1DQorZHFhZGQ3NTAzNiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTYgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2DQorZHFhZGQ3NTAzNyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2Nw0KK2RxYWRkNzUwMzggYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4DQorZHFhZGQ3NTAzOSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODkgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUxICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAxICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA0OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCityb3VuZGluZzogaGFsZl9ldmVuDQorZHFhZGQ3NTA1MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA1NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA2NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KK3JvdW5kaW5nOiB1cA0KK2RxYWRkNzUwNzAgYWRkIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxDQorZHFhZGQ3NTA3MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA3OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4MCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4MSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4MiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4MyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4NCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4NSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4NiBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4NyBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4OCBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQ3NTA4OSBhZGQgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxYWRkOTk5MCBhZGQgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQ5OTkxIGFkZCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFBbmQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CmluZGV4IGQ2MDliYzEuLjU3YzQxNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUFuZC5kZWNUZXN0CkBAIC0xLDQyMCArMSw0MjAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFBbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQotZHFhbmQwMDEgYW5kICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCi1kcWFuZDAwMiBhbmQgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDAKLWRxYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMAotZHFhbmQwMDQgYW5kICAgICAgICAgICAgIDEgICAgMSAtPiAgICAxCi1kcWFuZDAwNSBhbmQgICAgICAgICAgMTEwMCAxMDEwIC0+IDEwMDAKLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCi0tLSAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFhbmQwMDYgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKLWRxYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCi1kcWFuZDAwOCBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAotZHFhbmQwMDkgYW5kIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwCi1kcWFuZDAxMSBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMAotZHFhbmQwMTIgYW5kIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDAKLWRxYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLS0tIFZhcmlvdXMgbGVuZ3RocwotLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKLQotZHFhbmQ2MDEgYW5kIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDIgYW5kIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDMgYW5kIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDQgYW5kIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDUgYW5kIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDYgYW5kIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDcgYW5kIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDggYW5kIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MDkgYW5kIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTAgYW5kIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTEgYW5kIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTIgYW5kIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTMgYW5kIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTQgYW5kIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTUgYW5kIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTYgYW5kIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQotZHFhbmQ2MTcgYW5kIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQotZHFhbmQ2MTggYW5kIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQotZHFhbmQ2MTkgYW5kIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQotZHFhbmQ2MjAgYW5kIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQotZHFhbmQ2MjEgYW5kIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQotZHFhbmQ2MjIgYW5kIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQotZHFhbmQ2MjMgYW5kIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQotZHFhbmQ2MjQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQotZHFhbmQ2MjUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQotZHFhbmQ2MjYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQotZHFhbmQ2MjcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQotZHFhbmQ2MjggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQotZHFhbmQ2MjkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQotZHFhbmQ2MzAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQotZHFhbmQ2MzEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQotZHFhbmQ2MzIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQotZHFhbmQ2MzMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQotZHFhbmQ2MzQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAotCi1kcWFuZDY0MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY0OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExCi1kcWFuZDY1NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCi1kcWFuZDY1OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExCi1kcWFuZDY1OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExCi1kcWFuZDY2MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCi1kcWFuZDY2MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExCi1kcWFuZDY2MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExCi1kcWFuZDY2MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCi1kcWFuZDY2NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExCi1kcWFuZDY2NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExCi1kcWFuZDY2NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCi1kcWFuZDY2NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExCi1kcWFuZDY2OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExCi1kcWFuZDY2OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCi1kcWFuZDY3MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExCi1kcWFuZDY3MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExCi1kcWFuZDY3MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCi1kcWFuZDY3MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCi1kcWFuZDY3NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCi1kcWFuZDY3NSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCi1kcWFuZDY3NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCi0KLWRxYW5kMDIxIGFuZCAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCi1kcWFuZDAyNCBhbmQgMTExMTExMTExMTExMTExMSAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQotZHFhbmQwMjUgYW5kIDExMTExMTExMTExMTExMTEgICAxMTExMTExMTExMTExMSAgLT4gICAgMTExMTExMTExMTExMTEKLWRxYW5kMDI2IGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCi1kcWFuZDAyNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQotZHFhbmQwMjggYW5kIDExMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMSAgLT4gICAgICAgMTExMTExMTExMTEKLWRxYW5kMDI5IGFuZCAxMTExMTExMTExMTExMTExICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCi1kcWFuZDAzMCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQotZHFhbmQwMzEgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAxMTExMTExMSAgLT4gICAgICAgICAgMTExMTExMTEKLWRxYW5kMDMyIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCi1kcWFuZDAzMyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQotZHFhbmQwMzQgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAxMTExMSAgLT4gICAgICAgICAgICAgMTExMTEKLWRxYW5kMDM1IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCi1kcWFuZDAzNiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQotZHFhbmQwMzcgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAxMSAgLT4gICAgICAgICAgICAgICAgMTEKLWRxYW5kMDM4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCi1kcWFuZDAzOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMAotCi1kcWFuZDA0MCBhbmQgMTExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAxMTExMTExMTExMTExMTExCi1kcWFuZDA0MSBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCi1kcWFuZDA0MiBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExCi1kcWFuZDA0MyBhbmQgICAxMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgIDExMTExMTExMTExMTExCi1kcWFuZDA0NCBhbmQgICAgMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAxMTExMTExMTExMTExCi1kcWFuZDA0NSBhbmQgICAgIDExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgMTExMTExMTExMTExCi1kcWFuZDA0NiBhbmQgICAgICAxMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgIDExMTExMTExMTExCi1kcWFuZDA0NyBhbmQgICAgICAgMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAxMTExMTExMTExCi1kcWFuZDA0OCBhbmQgICAgICAgIDExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgMTExMTExMTExCi1kcWFuZDA0OSBhbmQgICAgICAgICAxMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgIDExMTExMTExCi1kcWFuZDA1MCBhbmQgICAgICAgICAgMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAxMTExMTExCi1kcWFuZDA1MSBhbmQgICAgICAgICAgIDExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgMTExMTExCi1kcWFuZDA1MiBhbmQgICAgICAgICAgICAxMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgIDExMTExCi1kcWFuZDA1MyBhbmQgICAgICAgICAgICAgMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAxMTExCi1kcWFuZDA1NCBhbmQgICAgICAgICAgICAgIDExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgMTExCi1kcWFuZDA1NSBhbmQgICAgICAgICAgICAgICAxMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgIDExCi1kcWFuZDA1NiBhbmQgICAgICAgICAgICAgICAgMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAxCi1kcWFuZDA1NyBhbmQgICAgICAgICAgICAgICAgMCAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAwCi0KLWRxYW5kMTUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQotZHFhbmQxNTEgYW5kICAxMTExMTExMTEgIDEgIC0+ICAxCi1kcWFuZDE1MiBhbmQgICAxMTExMTExMSAgMSAgLT4gIDEKLWRxYW5kMTUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQotZHFhbmQxNTQgYW5kICAgICAxMTExMTEgIDEgIC0+ICAxCi1kcWFuZDE1NSBhbmQgICAgICAxMTExMSAgMSAgLT4gIDEKLWRxYW5kMTU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQotZHFhbmQxNTcgYW5kICAgICAgICAxMTEgIDEgIC0+ICAxCi1kcWFuZDE1OCBhbmQgICAgICAgICAxMSAgMSAgLT4gIDEKLWRxYW5kMTU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQotCi1kcWFuZDE2MCBhbmQgMTExMTExMTExMSAgMCAgLT4gIDAKLWRxYW5kMTYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMAotZHFhbmQxNjIgYW5kICAgMTExMTExMTEgIDAgIC0+ICAwCi1kcWFuZDE2MyBhbmQgICAgMTExMTExMSAgMCAgLT4gIDAKLWRxYW5kMTY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMAotZHFhbmQxNjUgYW5kICAgICAgMTExMTEgIDAgIC0+ICAwCi1kcWFuZDE2NiBhbmQgICAgICAgMTExMSAgMCAgLT4gIDAKLWRxYW5kMTY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMAotZHFhbmQxNjggYW5kICAgICAgICAgMTEgIDAgIC0+ICAwCi1kcWFuZDE2OSBhbmQgICAgICAgICAgMSAgMCAgLT4gIDAKLQotZHFhbmQxNzAgYW5kIDEgIDExMTExMTExMTEgIC0+ICAxCi1kcWFuZDE3MSBhbmQgMSAgIDExMTExMTExMSAgLT4gIDEKLWRxYW5kMTcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQotZHFhbmQxNzMgYW5kIDEgICAgIDExMTExMTEgIC0+ICAxCi1kcWFuZDE3NCBhbmQgMSAgICAgIDExMTExMSAgLT4gIDEKLWRxYW5kMTc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQotZHFhbmQxNzYgYW5kIDEgICAgICAgIDExMTEgIC0+ICAxCi1kcWFuZDE3NyBhbmQgMSAgICAgICAgIDExMSAgLT4gIDEKLWRxYW5kMTc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQotZHFhbmQxNzkgYW5kIDEgICAgICAgICAgIDEgIC0+ICAxCi0KLWRxYW5kMTgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMAotZHFhbmQxODEgYW5kIDAgICAxMTExMTExMTEgIC0+ICAwCi1kcWFuZDE4MiBhbmQgMCAgICAxMTExMTExMSAgLT4gIDAKLWRxYW5kMTgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMAotZHFhbmQxODQgYW5kIDAgICAgICAxMTExMTEgIC0+ICAwCi1kcWFuZDE4NSBhbmQgMCAgICAgICAxMTExMSAgLT4gIDAKLWRxYW5kMTg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMAotZHFhbmQxODcgYW5kIDAgICAgICAgICAxMTEgIC0+ICAwCi1kcWFuZDE4OCBhbmQgMCAgICAgICAgICAxMSAgLT4gIDAKLWRxYW5kMTg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMAotCi1kcWFuZDA5MCBhbmQgMDExMTExMTExICAxMTExMTExMTEgIC0+ICAgMTExMTExMTEKLWRxYW5kMDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQotZHFhbmQwOTIgYW5kIDExMDExMTExMSAgMTExMTExMTExICAtPiAgMTEwMTExMTExCi1kcWFuZDA5MyBhbmQgMTExMDExMTExICAxMTExMTExMTEgIC0+ICAxMTEwMTExMTEKLWRxYW5kMDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQotZHFhbmQwOTUgYW5kIDExMTExMDExMSAgMTExMTExMTExICAtPiAgMTExMTEwMTExCi1kcWFuZDA5NiBhbmQgMTExMTExMDExICAxMTExMTExMTEgIC0+ICAxMTExMTEwMTEKLWRxYW5kMDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQotZHFhbmQwOTggYW5kIDExMTExMTExMCAgMTExMTExMTExICAtPiAgMTExMTExMTEwCi0KLWRxYW5kMTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQotZHFhbmQxMDEgYW5kIDExMTExMTExMSAgMTAxMTExMTExICAtPiAgMTAxMTExMTExCi1kcWFuZDEwMiBhbmQgMTExMTExMTExICAxMTAxMTExMTEgIC0+ICAxMTAxMTExMTEKLWRxYW5kMTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQotZHFhbmQxMDQgYW5kIDExMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCi1kcWFuZDEwNSBhbmQgMTExMTExMTExICAxMTExMTAxMTEgIC0+ICAxMTExMTAxMTEKLWRxYW5kMTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQotZHFhbmQxMDcgYW5kIDExMTExMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTAxCi1kcWFuZDEwOCBhbmQgMTExMTExMTExICAxMTExMTExMTAgIC0+ICAxMTExMTExMTAKLQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCi1kcWFuZDIyMCBhbmQgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyMjIgYW5kIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDIyMyBhbmQgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyMjUgYW5kIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDIyNiBhbmQgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyMjggYW5kIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDIyOSBhbmQgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyMzEgYW5kIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDIzMiBhbmQgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLWRxYW5kMjQwIGFuZCAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNDEgYW5kICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjQzIGFuZCAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNDQgYW5kICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRAotZHFhbmQyNTAgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTEgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTIgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTMgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTQgYW5kICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTUgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTYgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTcgYW5kICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTggYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjAgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjEgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjMgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjQgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNjUgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QtMQotZHFhbmQyNzAgYW5kICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzEgYW5kICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzIgYW5kICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzMgYW5kICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzQgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyNzcgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBMU0QKLWRxYW5kMjgwIGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjgxIGFuZCAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjgyIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjgzIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjg0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjg1IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjg2IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjg3IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kcWFuZDI4OCBhbmQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI4OSBhbmQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5MCBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5MSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5MiBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5MyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzaWducwotZHFhbmQyOTYgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMjk3IGFuZCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDI5OCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQyOTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMTAwMDAxMTAwMDAxMTAwMDAwMDEwMDAwMDAKLQotLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQotZHFhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzMyIGFuZCAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDMzMyBhbmQgIDQgICAxLjAwMDAwMDAwRS05OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzMzQgYW5kICA1ICAgMUUtOTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzM1IGFuZCAgNiAgIC0xRS05MDAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDMzNiBhbmQgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzMzcgYW5kICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzM4IGFuZCAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM0MSBhbmQgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNDIgYW5kICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzQzIGFuZCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM0NCBhbmQgIDFFLTkwMCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNDUgYW5kICAtMUUtOTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzQ2IGFuZCAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM0NyBhbmQgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCi1kcWFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNjIgYW5kICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzYzIGFuZCAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNjUgYW5kICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzY2IGFuZCAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNzIgYW5kICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzczIGFuZCAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQzNzUgYW5kICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kMzc2IGFuZCAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKLWRxYW5kNzgwIGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ3ODIgYW5kIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kNzgzIGFuZCAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ3ODUgYW5kIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kNzg2IGFuZCAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ3ODggYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kNzg5IGFuZCAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ3OTEgYW5kICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kNzkyIGFuZCAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ3OTQgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODAxIGFuZCAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgwMiBhbmQgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODA0IGFuZCAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgwNSBhbmQgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODA3IGFuZCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgwOCBhbmQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODEwIGFuZCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgxMSBhbmQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODEzIGFuZCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgxNCBhbmQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFhbmQ4MjEgYW5kICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgyMyBhbmQgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MjQgYW5kICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgyNiBhbmQgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MjcgYW5kICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgyOSBhbmQgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MzAgYW5kIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgzMiBhbmQgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MzMgYW5kIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDgzNSBhbmQgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4MzYgYW5kICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxYW5kODQxIGFuZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQzIGFuZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ0IGFuZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ2IGFuZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ3IGFuZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODQ5IGFuZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODUwIGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODUyIGFuZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODUzIGFuZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU1IGFuZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU2IGFuZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU4IGFuZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODU5IGFuZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFhbmQ4NjEgYW5kICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg2MyBhbmQgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4NjQgYW5kICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg2NiBhbmQgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4NjcgYW5kIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg2OSBhbmQgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4NzEgYW5kICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg3MyBhbmQgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4NzQgYW5kICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg3NiBhbmQgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4NzcgYW5kIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg3OSBhbmQgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4ODAgYW5kICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg4MiBhbmQgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFhbmQ4ODMgYW5kIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFuZDg4NSBhbmQgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFBbmQuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBBTkQgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KK2RxYW5kMDAxIGFuZCAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KK2RxYW5kMDAyIGFuZCAgICAgICAgICAgICAwICAgIDEgLT4gICAgMA0KK2RxYW5kMDAzIGFuZCAgICAgICAgICAgICAxICAgIDAgLT4gICAgMA0KK2RxYW5kMDA0IGFuZCAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KK2RxYW5kMDA1IGFuZCAgICAgICAgICAxMTAwIDEwMTAgLT4gMTAwMA0KKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCitkcWFuZDAwNiBhbmQgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KK2RxYW5kMDA3IGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQorZHFhbmQwMDggYW5kIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCitkcWFuZDAwOSBhbmQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYW5kMDEwIGFuZCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAwDQorZHFhbmQwMTEgYW5kIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgIDANCitkcWFuZDAxMiBhbmQgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgMA0KK2RxYW5kMDEzIGFuZCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorDQorLS0gVmFyaW91cyBsZW5ndGhzDQorLS0gICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCisNCitkcWFuZDYwMSBhbmQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MDIgYW5kIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjAzIGFuZCAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDYwNCBhbmQgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MDUgYW5kIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjA2IGFuZCAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDYwNyBhbmQgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MDggYW5kIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjA5IGFuZCAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDYxMCBhbmQgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MTEgYW5kIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjEyIGFuZCAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDYxMyBhbmQgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MTQgYW5kIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjE1IGFuZCAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTENCitkcWFuZDYxNiBhbmQgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2MTcgYW5kIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjE4IGFuZCAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTENCitkcWFuZDYxOSBhbmQgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExDQorZHFhbmQ2MjAgYW5kIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMQ0KK2RxYW5kNjIxIGFuZCAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTENCitkcWFuZDYyMiBhbmQgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExDQorZHFhbmQ2MjMgYW5kIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMQ0KK2RxYW5kNjI0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTENCitkcWFuZDYyNSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExDQorZHFhbmQ2MjYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMQ0KK2RxYW5kNjI3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTENCitkcWFuZDYyOCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExDQorZHFhbmQ2MjkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMQ0KK2RxYW5kNjMwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTENCitkcWFuZDYzMSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExDQorZHFhbmQ2MzIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMQ0KK2RxYW5kNjMzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDENCitkcWFuZDYzNCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQorDQorZHFhbmQ2NDEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjQyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDY0MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2NDQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjQ1IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDY0NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2NDcgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjQ4IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDY0OSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2NTAgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjUxIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDY1MiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2NTMgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjU0IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTENCitkcWFuZDY1NSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExDQorZHFhbmQ2NTYgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQ0KK2RxYW5kNjU3IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTENCitkcWFuZDY1OCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExDQorZHFhbmQ2NTkgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQ0KK2RxYW5kNjYwIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTENCitkcWFuZDY2MSBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExDQorZHFhbmQ2NjIgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQ0KK2RxYW5kNjYzIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTENCitkcWFuZDY2NCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExDQorZHFhbmQ2NjUgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQ0KK2RxYW5kNjY2IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTENCitkcWFuZDY2NyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExDQorZHFhbmQ2NjggYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQ0KK2RxYW5kNjY5IGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTENCitkcWFuZDY3MCBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExDQorZHFhbmQ2NzEgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQ0KK2RxYW5kNjcyIGFuZCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTENCitkcWFuZDY3MyBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxDQorZHFhbmQ2NzQgYW5kIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KK2RxYW5kNjc1IGFuZCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCitkcWFuZDY3NiBhbmQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQorDQorZHFhbmQwMjEgYW5kIDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMTExMTExMTENCitkcWFuZDAyNCBhbmQgMTExMTExMTExMTExMTExMSAgMTExMTExMTExMTExMTExICAtPiAgIDExMTExMTExMTExMTExMQ0KK2RxYW5kMDI1IGFuZCAxMTExMTExMTExMTExMTExICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExDQorZHFhbmQwMjYgYW5kIDExMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMSAgLT4gICAgIDExMTExMTExMTExMTENCitkcWFuZDAyNyBhbmQgMTExMTExMTExMTExMTExMSAgICAgMTExMTExMTExMTExICAtPiAgICAgIDExMTExMTExMTExMQ0KK2RxYW5kMDI4IGFuZCAxMTExMTExMTExMTExMTExICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExDQorZHFhbmQwMjkgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMSAgLT4gICAgICAgIDExMTExMTExMTENCitkcWFuZDAzMCBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgMTExMTExMTExICAtPiAgICAgICAgIDExMTExMTExMQ0KK2RxYW5kMDMxIGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExDQorZHFhbmQwMzIgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgMTExMTExMSAgLT4gICAgICAgICAgIDExMTExMTENCitkcWFuZDAzMyBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgMTExMTExICAtPiAgICAgICAgICAgIDExMTExMQ0KK2RxYW5kMDM0IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExDQorZHFhbmQwMzUgYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgMTExMSAgLT4gICAgICAgICAgICAgIDExMTENCitkcWFuZDAzNiBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgMTExICAtPiAgICAgICAgICAgICAgIDExMQ0KK2RxYW5kMDM3IGFuZCAxMTExMTExMTExMTExMTExICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExDQorZHFhbmQwMzggYW5kIDExMTExMTExMTExMTExMTEgICAgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgICAgICAgIDENCitkcWFuZDAzOSBhbmQgMTExMTExMTExMTExMTExMSAgICAgICAgICAgICAgICAwICAtPiAgICAgICAgICAgICAgICAgMA0KKw0KK2RxYW5kMDQwIGFuZCAxMTExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gIDExMTExMTExMTExMTExMTENCitkcWFuZDA0MSBhbmQgIDExMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExDQorZHFhbmQwNDIgYW5kICAxMTExMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMQ0KK2RxYW5kMDQzIGFuZCAgIDExMTExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgMTExMTExMTExMTExMTENCitkcWFuZDA0NCBhbmQgICAgMTExMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAxMTExMTExMTExMTExDQorZHFhbmQwNDUgYW5kICAgICAxMTExMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgIDExMTExMTExMTExMQ0KK2RxYW5kMDQ2IGFuZCAgICAgIDExMTExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgMTExMTExMTExMTENCitkcWFuZDA0NyBhbmQgICAgICAgMTExMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAxMTExMTExMTExDQorZHFhbmQwNDggYW5kICAgICAgICAxMTExMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgIDExMTExMTExMQ0KK2RxYW5kMDQ5IGFuZCAgICAgICAgIDExMTExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgMTExMTExMTENCitkcWFuZDA1MCBhbmQgICAgICAgICAgMTExMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAxMTExMTExDQorZHFhbmQwNTEgYW5kICAgICAgICAgICAxMTExMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgIDExMTExMQ0KK2RxYW5kMDUyIGFuZCAgICAgICAgICAgIDExMTExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgMTExMTENCitkcWFuZDA1MyBhbmQgICAgICAgICAgICAgMTExMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAxMTExDQorZHFhbmQwNTQgYW5kICAgICAgICAgICAgICAxMTEgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgIDExMQ0KK2RxYW5kMDU1IGFuZCAgICAgICAgICAgICAgIDExICAgIDExMTExMTExMTExMTExMTEgLT4gICAgICAgICAgICAgICAgMTENCitkcWFuZDA1NiBhbmQgICAgICAgICAgICAgICAgMSAgICAxMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAxDQorZHFhbmQwNTcgYW5kICAgICAgICAgICAgICAgIDAgICAgMTExMTExMTExMTExMTExMSAtPiAgICAgICAgICAgICAgICAgMA0KKw0KK2RxYW5kMTUwIGFuZCAxMTExMTExMTExICAxICAtPiAgMQ0KK2RxYW5kMTUxIGFuZCAgMTExMTExMTExICAxICAtPiAgMQ0KK2RxYW5kMTUyIGFuZCAgIDExMTExMTExICAxICAtPiAgMQ0KK2RxYW5kMTUzIGFuZCAgICAxMTExMTExICAxICAtPiAgMQ0KK2RxYW5kMTU0IGFuZCAgICAgMTExMTExICAxICAtPiAgMQ0KK2RxYW5kMTU1IGFuZCAgICAgIDExMTExICAxICAtPiAgMQ0KK2RxYW5kMTU2IGFuZCAgICAgICAxMTExICAxICAtPiAgMQ0KK2RxYW5kMTU3IGFuZCAgICAgICAgMTExICAxICAtPiAgMQ0KK2RxYW5kMTU4IGFuZCAgICAgICAgIDExICAxICAtPiAgMQ0KK2RxYW5kMTU5IGFuZCAgICAgICAgICAxICAxICAtPiAgMQ0KKw0KK2RxYW5kMTYwIGFuZCAxMTExMTExMTExICAwICAtPiAgMA0KK2RxYW5kMTYxIGFuZCAgMTExMTExMTExICAwICAtPiAgMA0KK2RxYW5kMTYyIGFuZCAgIDExMTExMTExICAwICAtPiAgMA0KK2RxYW5kMTYzIGFuZCAgICAxMTExMTExICAwICAtPiAgMA0KK2RxYW5kMTY0IGFuZCAgICAgMTExMTExICAwICAtPiAgMA0KK2RxYW5kMTY1IGFuZCAgICAgIDExMTExICAwICAtPiAgMA0KK2RxYW5kMTY2IGFuZCAgICAgICAxMTExICAwICAtPiAgMA0KK2RxYW5kMTY3IGFuZCAgICAgICAgMTExICAwICAtPiAgMA0KK2RxYW5kMTY4IGFuZCAgICAgICAgIDExICAwICAtPiAgMA0KK2RxYW5kMTY5IGFuZCAgICAgICAgICAxICAwICAtPiAgMA0KKw0KK2RxYW5kMTcwIGFuZCAxICAxMTExMTExMTExICAtPiAgMQ0KK2RxYW5kMTcxIGFuZCAxICAgMTExMTExMTExICAtPiAgMQ0KK2RxYW5kMTcyIGFuZCAxICAgIDExMTExMTExICAtPiAgMQ0KK2RxYW5kMTczIGFuZCAxICAgICAxMTExMTExICAtPiAgMQ0KK2RxYW5kMTc0IGFuZCAxICAgICAgMTExMTExICAtPiAgMQ0KK2RxYW5kMTc1IGFuZCAxICAgICAgIDExMTExICAtPiAgMQ0KK2RxYW5kMTc2IGFuZCAxICAgICAgICAxMTExICAtPiAgMQ0KK2RxYW5kMTc3IGFuZCAxICAgICAgICAgMTExICAtPiAgMQ0KK2RxYW5kMTc4IGFuZCAxICAgICAgICAgIDExICAtPiAgMQ0KK2RxYW5kMTc5IGFuZCAxICAgICAgICAgICAxICAtPiAgMQ0KKw0KK2RxYW5kMTgwIGFuZCAwICAxMTExMTExMTExICAtPiAgMA0KK2RxYW5kMTgxIGFuZCAwICAgMTExMTExMTExICAtPiAgMA0KK2RxYW5kMTgyIGFuZCAwICAgIDExMTExMTExICAtPiAgMA0KK2RxYW5kMTgzIGFuZCAwICAgICAxMTExMTExICAtPiAgMA0KK2RxYW5kMTg0IGFuZCAwICAgICAgMTExMTExICAtPiAgMA0KK2RxYW5kMTg1IGFuZCAwICAgICAgIDExMTExICAtPiAgMA0KK2RxYW5kMTg2IGFuZCAwICAgICAgICAxMTExICAtPiAgMA0KK2RxYW5kMTg3IGFuZCAwICAgICAgICAgMTExICAtPiAgMA0KK2RxYW5kMTg4IGFuZCAwICAgICAgICAgIDExICAtPiAgMA0KK2RxYW5kMTg5IGFuZCAwICAgICAgICAgICAxICAtPiAgMA0KKw0KK2RxYW5kMDkwIGFuZCAwMTExMTExMTEgIDExMTExMTExMSAgLT4gICAxMTExMTExMQ0KK2RxYW5kMDkxIGFuZCAxMDExMTExMTEgIDExMTExMTExMSAgLT4gIDEwMTExMTExMQ0KK2RxYW5kMDkyIGFuZCAxMTAxMTExMTEgIDExMTExMTExMSAgLT4gIDExMDExMTExMQ0KK2RxYW5kMDkzIGFuZCAxMTEwMTExMTEgIDExMTExMTExMSAgLT4gIDExMTAxMTExMQ0KK2RxYW5kMDk0IGFuZCAxMTExMDExMTEgIDExMTExMTExMSAgLT4gIDExMTEwMTExMQ0KK2RxYW5kMDk1IGFuZCAxMTExMTAxMTEgIDExMTExMTExMSAgLT4gIDExMTExMDExMQ0KK2RxYW5kMDk2IGFuZCAxMTExMTEwMTEgIDExMTExMTExMSAgLT4gIDExMTExMTAxMQ0KK2RxYW5kMDk3IGFuZCAxMTExMTExMDEgIDExMTExMTExMSAgLT4gIDExMTExMTEwMQ0KK2RxYW5kMDk4IGFuZCAxMTExMTExMTAgIDExMTExMTExMSAgLT4gIDExMTExMTExMA0KKw0KK2RxYW5kMTAwIGFuZCAxMTExMTExMTEgIDAxMTExMTExMSAgLT4gICAxMTExMTExMQ0KK2RxYW5kMTAxIGFuZCAxMTExMTExMTEgIDEwMTExMTExMSAgLT4gIDEwMTExMTExMQ0KK2RxYW5kMTAyIGFuZCAxMTExMTExMTEgIDExMDExMTExMSAgLT4gIDExMDExMTExMQ0KK2RxYW5kMTAzIGFuZCAxMTExMTExMTEgIDExMTAxMTExMSAgLT4gIDExMTAxMTExMQ0KK2RxYW5kMTA0IGFuZCAxMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQ0KK2RxYW5kMTA1IGFuZCAxMTExMTExMTEgIDExMTExMDExMSAgLT4gIDExMTExMDExMQ0KK2RxYW5kMTA2IGFuZCAxMTExMTExMTEgIDExMTExMTAxMSAgLT4gIDExMTExMTAxMQ0KK2RxYW5kMTA3IGFuZCAxMTExMTExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTEwMQ0KK2RxYW5kMTA4IGFuZCAxMTExMTExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMA0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2RxYW5kMjIwIGFuZCAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjIxIGFuZCAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjIyIGFuZCA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjIzIGFuZCA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI0IGFuZCA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI1IGFuZCAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI2IGFuZCA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI3IGFuZCA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI4IGFuZCA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjI5IGFuZCA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjMwIGFuZCA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjMxIGFuZCA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjMyIGFuZCA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGEgZmV3IHJhbmRvbXMNCitkcWFuZDI0MCBhbmQgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI0MSBhbmQgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI0MiBhbmQgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI0MyBhbmQgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI0NCBhbmQgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2RxYW5kMjUwIGFuZCAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI1MSBhbmQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNTIgYW5kICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjUzIGFuZCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI1NCBhbmQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNTUgYW5kICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjU2IGFuZCAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI1NyBhbmQgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNTggYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjU5IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI2MCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNjEgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjYyIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI2MyBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNjQgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjY1IGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRC0xDQorZHFhbmQyNzAgYW5kICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjcxIGFuZCAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI3MiBhbmQgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNzMgYW5kICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjc0IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI3NSBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyNzYgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjc3IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2RxYW5kMjgwIGFuZCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI4MSBhbmQgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyODIgYW5kICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjgzIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI4NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyODUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjg2IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI4NyBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNaWRkaWUNCitkcWFuZDI4OCBhbmQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyODkgYW5kICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjkwIGFuZCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI5MSBhbmQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyOTIgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjkzIGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI5NCBhbmQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyOTUgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNpZ25zDQorZHFhbmQyOTYgYW5kIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDI5NyBhbmQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMjk4IGFuZCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQyOTkgYW5kICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMTAwMDAxMTAwMDAxMTAwMDAwMDEwMDAwMDANCisNCistLSBObWF4LCBObWluLCBOdGlueS1saWtlDQorZHFhbmQzMzEgYW5kICAyICAgOS45OTk5OTk5OUUrOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDMzMiBhbmQgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzMzIGFuZCAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzMzQgYW5kICA1ICAgMUUtOTAwICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDMzNSBhbmQgIDYgICAtMUUtOTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzM2IGFuZCAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzMzcgYW5kICA4ICAgLTFFLTk5OSAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDMzOCBhbmQgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzQxIGFuZCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNDIgYW5kICAxRS05OTkgICAgICAgICAgICAgICAwMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDM0MyBhbmQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzQ0IGFuZCAgMUUtOTAwICAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNDUgYW5kICAtMUUtOTAwICAgICAgICAgICAgIC0xMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDM0NiBhbmQgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzQ3IGFuZCAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNDggYW5kICAtOS45OTk5OTk5OUUrOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMNCitkcWFuZDM2MSBhbmQgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzYyIGFuZCAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNjMgYW5kICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDM2NCBhbmQgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzY1IGFuZCAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNjYgYW5kICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDM3MSBhbmQgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzcyIGFuZCAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNzMgYW5kICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDM3NCBhbmQgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kMzc1IGFuZCAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQzNzYgYW5kICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yDQorZHFhbmQ3ODAgYW5kIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDc4MSBhbmQgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kNzgyIGFuZCAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ3ODMgYW5kIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDc4NCBhbmQgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kNzg1IGFuZCAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ3ODYgYW5kIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDc4NyBhbmQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kNzg4IGFuZCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ3ODkgYW5kIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDc5MCBhbmQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kNzkxIGFuZCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ3OTIgYW5kICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDc5MyBhbmQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kNzk0IGFuZCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFhbmQ4MDAgYW5kICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgwMSBhbmQgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODAyIGFuZCAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MDMgYW5kICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgwNCBhbmQgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODA1IGFuZCAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MDYgYW5kICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgwNyBhbmQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODA4IGFuZCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MDkgYW5kIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgxMCBhbmQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODExIGFuZCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MTIgYW5kICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgxMyBhbmQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODE0IGFuZCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MTUgYW5kICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWFuZDgyMSBhbmQgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODIyIGFuZCAgTmFOIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MjMgYW5kICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgyNCBhbmQgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODI1IGFuZCAgTmFOICAwICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MjYgYW5kICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgyNyBhbmQgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODI4IGFuZCAgTmFOICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MjkgYW5kICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgzMCBhbmQgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODMxIGFuZCAtMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MzIgYW5kIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgzMyBhbmQgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODM0IGFuZCAgMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4MzUgYW5kICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDgzNiBhbmQgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODM3IGFuZCAgSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFhbmQ4NDEgYW5kICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODQyIGFuZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg0MyBhbmQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NDQgYW5kICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODQ1IGFuZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg0NiBhbmQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NDcgYW5kICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODQ4IGFuZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg0OSBhbmQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NTAgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODUxIGFuZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg1MiBhbmQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NTMgYW5kIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODU0IGFuZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg1NSBhbmQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NTYgYW5kICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODU3IGFuZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg1OCBhbmQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NTkgYW5kICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcWFuZDg2MSBhbmQgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODYyIGFuZCArTmFOMiAgIC0xMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NjMgYW5kICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg2NCBhbmQgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODY1IGFuZCAgTmFONSAgICtOYU42ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NjYgYW5kIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg2NyBhbmQgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODY4IGFuZCAgMTAwMCAgICBOYU45ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NjkgYW5kICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg3MSBhbmQgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODcyIGFuZCAgc05hTjEyICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NzMgYW5kICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg3NCBhbmQgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODc1IGFuZCAgc05hTjE1ICBzTmFOMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NzYgYW5kICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg3NyBhbmQgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODc4IGFuZCAtMTAwMCAgICBzTmFOMjEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4NzkgYW5kICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg4MCBhbmQgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODgxIGFuZCArTmFOMjUgICtzTmFOMjQgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4ODIgYW5kIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWFuZDg4MyBhbmQgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYW5kODg0IGFuZCAgMTAwMCAgICAtTmFOMzAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhbmQ4ODUgYW5kICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFCYXNlLmRlY1Rlc3QKaW5kZXggZDA5YzZiZi4uNmJiNDYzMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQmFzZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUJhc2UuZGVjVGVzdApAQCAtMSwxMDgxICsxLDEwODEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNRdWFkIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIGZpbGUgdGVzdHMgYmFzZSBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyB0byBhIGRlY2ltYWwgbnVtYmVyCi0tLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQotCi0tLSBOb3RlIHRoYXQgdW5saWtlIG90aGVyIG9wZXJhdGlvbnMgdGhlIG9wZXJhbmQgaXMgc3ViamVjdCB0byByb3VuZGluZwotLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbAotLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlCi0tLSAnbGVmdCBoYW5kIHNpZGUnLCB0aGVyZWZvcmUsIG1heSBoYXZlIG51bWJlcnMgdGhhdCBjYW5ub3QgYmUKLS0tIHJlcHJlc2VudGVkIGluIGEgZGVjUXVhZC4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKLS0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KLS0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kcWJhczAwMSB0b1NjaSAgICAgICAwIC0+IDAKLWRxYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQotZHFiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjAKLWRxYmFzMDA0IHRvU2NpICAgIDEuMDAgLT4gMS4wMAotZHFiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMAotZHFiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwCi1kcWJhczAwNyB0b1NjaSAgICAxMC4wIC0+IDEwLjAKLWRxYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQotZHFiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40Ci1kcWJhczAxMCB0b1NjaSAgICAxMC41IC0+IDEwLjUKLWRxYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNgotZHFiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45Ci1kcWJhczAxMyB0b1NjaSAgICAxMS4wIC0+IDExLjAKLWRxYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNAotZHFiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzCi1kcWJhczAxNiB0b1NjaSAgMC4wMTIgLT4gMC4wMTIKLWRxYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMAotZHFiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjAKLWRxYmFzMDE5IHRvU2NpIC0wMC4wMCAtPiAtMC4wMAotCi1kcWJhczAyMSB0b1NjaSAgICAgLTEgLT4gLTEKLWRxYmFzMDIyIHRvU2NpICAgLTEuMCAtPiAtMS4wCi1kcWJhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQotZHFiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjEKLWRxYmFzMDI1IHRvU2NpICAgLTkuMTEgLT4gLTkuMTEKLWRxYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQotZHFiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5Ci0KLWRxYmFzMDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicKLWRxYmFzMDMxIHRvU2NpICAnMTIzNDU2Nzg5LjAwMDAwMCcgICAtPiAnMTIzNDU2Nzg5LjAwMDAwMCcKLWRxYmFzMDMyIHRvU2NpICAgJzEyMzQ1Njc4OTEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5MTIzNDU2JwotZHFiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknCi1kcWJhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3ODknICAgLT4gJzAuMDAwMDAxMjM0NTY3ODknCi1kcWJhczAzNSB0b1NjaSAnMC4wMDAwMDAxMjM0NTY3ODknICAgLT4gJzEuMjM0NTY3ODlFLTcnCi1kcWJhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnCi0KLWRxYmFzMDM3IHRvU2NpICcwLjEyMzQ1Njc4OTAxMjM0NCcgICAtPiAnMC4xMjM0NTY3ODkwMTIzNDQnCi1kcWJhczAzOCB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDUnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ1JwotCi0tLSB0ZXN0IGZpbml0ZSBib3VuZHMgKE5lZ3Mgb2YsIHRoZW4gMCwgTnRpbnksIE5taW4sIG90aGVyLCBObWF4KQotZHFic24wMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFic24wMDIgdG9TY2kgLTFFLTYxNDMgLT4gLTFFLTYxNDMKLWRxYnNuMDAzIHRvU2NpIC0xRS02MTc2IC0+IC0xRS02MTc2IFN1Ym5vcm1hbAotZHFic24wMDQgdG9TY2kgLTAgLT4gLTAKLWRxYnNuMDA1IHRvU2NpICswIC0+ICAwCi1kcWJzbjAwNiB0b1NjaSArMUUtNjE3NiAtPiAgMUUtNjE3NiBTdWJub3JtYWwKLWRxYnNuMDA3IHRvU2NpICsxRS02MTQzIC0+ICAxRS02MTQzCi1kcWJzbjAwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci0KLS0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdCi0tLSBzdHJpbmdzIHdpdGhvdXQgRSBjYW5ub3QgZ2VuZXJhdGUgRSBpbiByZXN1bHQKLWRxYmFzMDQwIHRvU2NpICIxMiIgICAgICAgIC0+ICcxMicKLWRxYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnCi1kcWJhczA0MiB0b1NjaSAiMTIuNzYiICAgICAtPiAnMTIuNzYnCi1kcWJhczA0MyB0b1NjaSAiKzEyLjc2IiAgICAtPiAnMTIuNzYnCi1kcWJhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnCi1kcWJhczA0NSB0b1NjaSAiKzAuMDAzIiAgICAtPiAnMC4wMDMnCi1kcWJhczA0NiB0b1NjaSAiMTcuIiAgICAgICAtPiAnMTcnCi1kcWJhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41JwotZHFiYXMwNDggdG9TY2kgIjA0NCIgICAgICAgLT4gJzQ0JwotZHFiYXMwNDkgdG9TY2kgIjAwNDQiICAgICAgLT4gJzQ0JwotZHFiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1JwotZHFiYXMwNTEgdG9TY2kgIjAwLjAwMDA1IiAgICAtPiAnMC4wMDAwNScKLWRxYmFzMDUyIHRvU2NpICIwLjAwMDAwNSIgICAgLT4gJzAuMDAwMDA1JwotZHFiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJwotZHFiYXMwNTQgdG9TY2kgIjAuMDAwMDAwNSIgICAtPiAnNUUtNycKLWRxYmFzMDU1IHRvU2NpICIwLjAwMDAwMDA1IiAgLT4gJzVFLTgnCi1kcWJhczA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJwotZHFiYXMwNTcgdG9TY2kgIjIzNDU2NzguNTQzMjEwIiAtPiAnMjM0NTY3OC41NDMyMTAnCi1kcWJhczA1OCB0b1NjaSAiMzQ1Njc4LjU0MzIxMCIgLT4gJzM0NTY3OC41NDMyMTAnCi1kcWJhczA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScKLWRxYmFzMDYwIHRvU2NpICIzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZHFiYXMwNjEgdG9TY2kgIiszNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZHFiYXMwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicKLWRxYmFzMDYzIHRvU2NpICIrMDAzNDU2NzguNTQzMiIgLT4gJzM0NTY3OC41NDMyJwotZHFiYXMwNjQgdG9TY2kgIi0zNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCi1kcWJhczA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInCi1kcWJhczA2NiB0b1NjaSAiLTAwMzQ1Njc4LjU0MzIiICAtPiAnLTM0NTY3OC41NDMyJwotLS0gZXhhbXBsZXMKLWRxYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JwotZHFiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJwotZHFiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKLQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KLQotLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCi1kcWJhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+IDAuMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjMuNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTYuNzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkuMTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkxLjIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA4MyB0b1NjaSAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjMuNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDg0IHRvU2NpICAxMjM0NTY3ODkxMjM0LjU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA4NiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTYuNzg5MDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDg3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3Ljg5MDEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA4OSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkuMDEyMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDkwIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwLjEyMzQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwOTEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA5MiB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIuMzQ1Njc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDkzIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzLjQ1Njc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwOTQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA5NSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDUuNjc4MDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDk2IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2Ljc4MDEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMwOTcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczA5OCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzguMDEyMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMDk5IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwLjEyMzQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczEwMSB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIuMzQ1NiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMTAyIHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzLjQ1NjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2IEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkCi1kcWJhczEwNCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYxMjMgIC0+ICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDUuNiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMTA1IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2LjEyMyAgLT4gIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxLjIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM0IEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMi4zICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM1IEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxMjMuICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM2IEluZXhhY3QgUm91bmRlZAotLS0gMTIzNDU2Nzg5MDEyMzQ1Njc4Ci0KLS0tIE51bWJlcnMgd2l0aCBFCi1kcWJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJwotZHFiYXMxMzEgdG9TY2kgIjAuMDAwRS0yIiAgLT4gJzAuMDAwMDAnCi1kcWJhczEzMiB0b1NjaSAiMC4wMDBFLTMiICAtPiAnMC4wMDAwMDAnCi1kcWJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycKLWRxYmFzMTM0IHRvU2NpICIwLjAwRS0yIiAgIC0+ICcwLjAwMDAnCi1kcWJhczEzNSB0b1NjaSAiMC4wMEUtMyIgICAtPiAnMC4wMDAwMCcKLWRxYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcKLWRxYmFzMTM3IHRvU2NpICIwLjAwRS01IiAgIC0+ICcwRS03JwotZHFiYXMxMzggdG9TY2kgIiswRSs5IiAgICAgLT4gJzBFKzknCi1kcWJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknCi1kcWJhczE0MCB0b1NjaSAiMUUrOSIgICAgICAtPiAnMUUrOScKLWRxYmFzMTQxIHRvU2NpICIxZSswOSIgICAgIC0+ICcxRSs5JwotZHFiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJwotZHFiYXMxNDMgdG9TY2kgIisxRSswMDkiICAgLT4gJzFFKzknCi1kcWJhczE0NCB0b1NjaSAiMEUrOSIgICAgICAtPiAnMEUrOScKLWRxYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JwotZHFiYXMxNDYgdG9TY2kgIjFFKzA5IiAgICAgLT4gJzFFKzknCi1kcWJhczE0NyB0b1NjaSAiMWUrOTAiICAgICAtPiAnMUUrOTAnCi1kcWJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScKLWRxYmFzMTQ5IHRvU2NpICIwMDBFKzkiICAgIC0+ICcwRSs5JwotZHFiYXMxNTAgdG9TY2kgIjFFOSIgICAgICAgLT4gJzFFKzknCi1kcWJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScKLWRxYmFzMTUyIHRvU2NpICIxRTkwIiAgICAgIC0+ICcxRSs5MCcKLWRxYmFzMTUzIHRvU2NpICIxRTAwOSIgICAgIC0+ICcxRSs5JwotZHFiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknCi1kcWJhczE1NSB0b1NjaSAiMC4wMDBlKzAiICAtPiAnMC4wMDAnCi1kcWJhczE1NiB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJwotZHFiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknCi1kcWJhczE1OCB0b1NjaSAiNDRFKzkiICAgICAtPiAnNC40RSsxMCcKLWRxYmFzMTU5IHRvU2NpICIwLjczZS03IiAgIC0+ICc3LjNFLTgnCi1kcWJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScKLWRxYmFzMTYxIHRvU2NpICIwMEUtOSIgICAgIC0+ICcwRS05JwotZHFiYXMxNjIgdG9TY2kgIjEwRSs5IiAgICAgLT4gJzEuMEUrMTAnCi1kcWJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcKLWRxYmFzMTY0IHRvU2NpICIxMGUrOTAiICAgIC0+ICcxLjBFKzkxJwotZHFiYXMxNjUgdG9TY2kgIjEwRSswMDkiICAgLT4gJzEuMEUrMTAnCi1kcWJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnCi1kcWJhczE2NyB0b1NjaSAiMTAwZSswOSIgICAtPiAnMS4wMEUrMTEnCi1kcWJhczE2OCB0b1NjaSAiMTAwRSs5MCIgICAtPiAnMS4wMEUrOTInCi1kcWJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnCi0KLWRxYmFzMTcwIHRvU2NpICIxLjI2NSIgICAgIC0+ICcxLjI2NScKLWRxYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnCi1kcWJhczE3MiB0b1NjaSAiMS4yNjVFLTgiICAtPiAnMS4yNjVFLTgnCi1kcWJhczE3MyB0b1NjaSAiMS4yNjVFLTQiICAtPiAnMC4wMDAxMjY1JwotZHFiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1JwotZHFiYXMxNzUgdG9TY2kgIjEuMjY1RS0yIiAgLT4gJzAuMDEyNjUnCi1kcWJhczE3NiB0b1NjaSAiMS4yNjVFLTEiICAtPiAnMC4xMjY1JwotZHFiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1JwotZHFiYXMxNzggdG9TY2kgIjEuMjY1RSsxIiAgLT4gJzEyLjY1JwotZHFiYXMxNzkgdG9TY2kgIjEuMjY1RSsyIiAgLT4gJzEyNi41JwotZHFiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnCi1kcWJhczE4MSB0b1NjaSAiMS4yNjVFKzQiICAtPiAnMS4yNjVFKzQnCi1kcWJhczE4MiB0b1NjaSAiMS4yNjVFKzgiICAtPiAnMS4yNjVFKzgnCi1kcWJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJwotCi1kcWJhczE5MCB0b1NjaSAiMTIuNjUiICAgICAtPiAnMTIuNjUnCi1kcWJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5JwotZHFiYXMxOTIgdG9TY2kgIjEyLjY1RS04IiAgLT4gJzEuMjY1RS03JwotZHFiYXMxOTMgdG9TY2kgIjEyLjY1RS00IiAgLT4gJzAuMDAxMjY1JwotZHFiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnCi1kcWJhczE5NSB0b1NjaSAiMTIuNjVFLTIiICAtPiAnMC4xMjY1JwotZHFiYXMxOTYgdG9TY2kgIjEyLjY1RS0xIiAgLT4gJzEuMjY1JwotZHFiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1JwotZHFiYXMxOTggdG9TY2kgIjEyLjY1RSsxIiAgLT4gJzEyNi41JwotZHFiYXMxOTkgdG9TY2kgIjEyLjY1RSsyIiAgLT4gJzEyNjUnCi1kcWJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnCi1kcWJhczIwMSB0b1NjaSAiMTIuNjVFKzQiICAtPiAnMS4yNjVFKzUnCi1kcWJhczIwMiB0b1NjaSAiMTIuNjVFKzgiICAtPiAnMS4yNjVFKzknCi1kcWJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJwotCi1kcWJhczIxMCB0b1NjaSAiMTI2LjUiICAgICAtPiAnMTI2LjUnCi1kcWJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4JwotZHFiYXMyMTIgdG9TY2kgIjEyNi41RS04IiAgLT4gJzAuMDAwMDAxMjY1JwotZHFiYXMyMTMgdG9TY2kgIjEyNi41RS00IiAgLT4gJzAuMDEyNjUnCi1kcWJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1JwotZHFiYXMyMTUgdG9TY2kgIjEyNi41RS0yIiAgLT4gJzEuMjY1JwotZHFiYXMyMTYgdG9TY2kgIjEyNi41RS0xIiAgLT4gJzEyLjY1JwotZHFiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41JwotZHFiYXMyMTggdG9TY2kgIjEyNi41RSsxIiAgLT4gJzEyNjUnCi1kcWJhczIxOSB0b1NjaSAiMTI2LjVFKzIiICAtPiAnMS4yNjVFKzQnCi1kcWJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnCi1kcWJhczIyMSB0b1NjaSAiMTI2LjVFKzQiICAtPiAnMS4yNjVFKzYnCi1kcWJhczIyMiB0b1NjaSAiMTI2LjVFKzgiICAtPiAnMS4yNjVFKzEwJwotZHFiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicKLQotZHFiYXMyMzAgdG9TY2kgIjEyNjUiICAgICAtPiAnMTI2NScKLWRxYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycKLWRxYmFzMjMyIHRvU2NpICIxMjY1RS04IiAgLT4gJzAuMDAwMDEyNjUnCi1kcWJhczIzMyB0b1NjaSAiMTI2NUUtNCIgIC0+ICcwLjEyNjUnCi1kcWJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScKLWRxYmFzMjM1IHRvU2NpICIxMjY1RS0yIiAgLT4gJzEyLjY1JwotZHFiYXMyMzYgdG9TY2kgIjEyNjVFLTEiICAtPiAnMTI2LjUnCi1kcWJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1JwotZHFiYXMyMzggdG9TY2kgIjEyNjVFKzEiICAtPiAnMS4yNjVFKzQnCi1kcWJhczIzOSB0b1NjaSAiMTI2NUUrMiIgIC0+ICcxLjI2NUUrNScKLWRxYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2JwotZHFiYXMyNDEgdG9TY2kgIjEyNjVFKzQiICAtPiAnMS4yNjVFKzcnCi1kcWJhczI0MiB0b1NjaSAiMTI2NUUrOCIgIC0+ICcxLjI2NUUrMTEnCi1kcWJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnCi0KLWRxYmFzMjUwIHRvU2NpICIwLjEyNjUiICAgICAtPiAnMC4xMjY1JwotZHFiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnCi1kcWJhczI1MiB0b1NjaSAiMC4xMjY1RS04IiAgLT4gJzEuMjY1RS05JwotZHFiYXMyNTMgdG9TY2kgIjAuMTI2NUUtNCIgIC0+ICcwLjAwMDAxMjY1JwotZHFiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnCi1kcWJhczI1NSB0b1NjaSAiMC4xMjY1RS0yIiAgLT4gJzAuMDAxMjY1JwotZHFiYXMyNTYgdG9TY2kgIjAuMTI2NUUtMSIgIC0+ICcwLjAxMjY1JwotZHFiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnCi1kcWJhczI1OCB0b1NjaSAiMC4xMjY1RSsxIiAgLT4gJzEuMjY1JwotZHFiYXMyNTkgdG9TY2kgIjAuMTI2NUUrMiIgIC0+ICcxMi42NScKLWRxYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnCi1kcWJhczI2MSB0b1NjaSAiMC4xMjY1RSs0IiAgLT4gJzEyNjUnCi1kcWJhczI2MiB0b1NjaSAiMC4xMjY1RSs4IiAgLT4gJzEuMjY1RSs3JwotZHFiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknCi0KLS0tIHNvbWUgbW9yZSBuZWdhdGl2ZSB6ZXJvcyBbc3lzdGVtYXRpYyB0ZXN0cyBiZWxvd10KLWRxYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcKLWRxYmFzMjkxIHRvU2NpICItMC4wMDBFLTIiICAtPiAnLTAuMDAwMDAnCi1kcWJhczI5MiB0b1NjaSAiLTAuMDAwRS0zIiAgLT4gJy0wLjAwMDAwMCcKLWRxYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnCi1kcWJhczI5NCB0b1NjaSAiLTAuMDBFLTIiICAgLT4gJy0wLjAwMDAnCi1kcWJhczI5NSB0b1NjaSAiLTAuMDBFLTMiICAgLT4gJy0wLjAwMDAwJwotZHFiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnCi1kcWJhczI5NyB0b1NjaSAiLTAuMEUtMyIgICAgLT4gJy0wLjAwMDAnCi1kcWJhczI5OCB0b1NjaSAiLTBFLTIiICAgICAgLT4gJy0wLjAwJwotZHFiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnCi0KLS0tIEVuZ2luZWVyaW5nIG5vdGF0aW9uIHRlc3RzCi1kcWJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMKLWRxYmFzMzAyICB0b0VuZyAxMGUxMiAgLT4gMTBFKzEyCi1kcWJhczMwMyAgdG9TY2kgMTBlMTEgIC0+IDEuMEUrMTIKLWRxYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMgotZHFiYXMzMDUgIHRvU2NpIDEwZTEwICAtPiAxLjBFKzExCi1kcWJhczMwNiAgdG9FbmcgMTBlMTAgIC0+IDEwMEUrOQotZHFiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwCi1kcWJhczMwOCAgdG9FbmcgMTBlOSAgIC0+IDEwRSs5Ci1kcWJhczMwOSAgdG9TY2kgMTBlOCAgIC0+IDEuMEUrOQotZHFiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkKLWRxYmFzMzExICB0b1NjaSAxMGU3ICAgLT4gMS4wRSs4Ci1kcWJhczMxMiAgdG9FbmcgMTBlNyAgIC0+IDEwMEUrNgotZHFiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcKLWRxYmFzMzE0ICB0b0VuZyAxMGU2ICAgLT4gMTBFKzYKLWRxYmFzMzE1ICB0b1NjaSAxMGU1ICAgLT4gMS4wRSs2Ci1kcWJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNgotZHFiYXMzMTcgIHRvU2NpIDEwZTQgICAtPiAxLjBFKzUKLWRxYmFzMzE4ICB0b0VuZyAxMGU0ICAgLT4gMTAwRSszCi1kcWJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNAotZHFiYXMzMjAgIHRvRW5nIDEwZTMgICAtPiAxMEUrMwotZHFiYXMzMjEgIHRvU2NpIDEwZTIgICAtPiAxLjBFKzMKLWRxYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszCi1kcWJhczMyMyAgdG9TY2kgMTBlMSAgIC0+IDEuMEUrMgotZHFiYXMzMjQgIHRvRW5nIDEwZTEgICAtPiAxMDAKLWRxYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTAKLWRxYmFzMzI2ICB0b0VuZyAxMGUwICAgLT4gMTAKLWRxYmFzMzI3ICB0b1NjaSAxMGUtMSAgLT4gMS4wCi1kcWJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMAotZHFiYXMzMjkgIHRvU2NpIDEwZS0yICAtPiAwLjEwCi1kcWJhczMzMCAgdG9FbmcgMTBlLTIgIC0+IDAuMTAKLWRxYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTAKLWRxYmFzMzMyICB0b0VuZyAxMGUtMyAgLT4gMC4wMTAKLWRxYmFzMzMzICB0b1NjaSAxMGUtNCAgLT4gMC4wMDEwCi1kcWJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMAotZHFiYXMzMzUgIHRvU2NpIDEwZS01ICAtPiAwLjAwMDEwCi1kcWJhczMzNiAgdG9FbmcgMTBlLTUgIC0+IDAuMDAwMTAKLWRxYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTAKLWRxYmFzMzM4ICB0b0VuZyAxMGUtNiAgLT4gMC4wMDAwMTAKLWRxYmFzMzM5ICB0b1NjaSAxMGUtNyAgLT4gMC4wMDAwMDEwCi1kcWJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMAotZHFiYXMzNDEgIHRvU2NpIDEwZS04ICAtPiAxLjBFLTcKLWRxYmFzMzQyICB0b0VuZyAxMGUtOCAgLT4gMTAwRS05Ci1kcWJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOAotZHFiYXMzNDQgIHRvRW5nIDEwZS05ICAtPiAxMEUtOQotZHFiYXMzNDUgIHRvU2NpIDEwZS0xMCAtPiAxLjBFLTkKLWRxYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05Ci1kcWJhczM0NyAgdG9TY2kgMTBlLTExIC0+IDEuMEUtMTAKLWRxYmFzMzQ4ICB0b0VuZyAxMGUtMTEgLT4gMTAwRS0xMgotZHFiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExCi1kcWJhczM1MCAgdG9FbmcgMTBlLTEyIC0+IDEwRS0xMgotZHFiYXMzNTEgIHRvU2NpIDEwZS0xMyAtPiAxLjBFLTEyCi1kcWJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTIKLQotZHFiYXMzNjEgIHRvU2NpIDdFMTIgIC0+IDdFKzEyCi1kcWJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTIKLWRxYmFzMzYzICB0b1NjaSA3RTExICAtPiA3RSsxMQotZHFiYXMzNjQgIHRvRW5nIDdFMTEgIC0+IDcwMEUrOQotZHFiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwCi1kcWJhczM2NiAgdG9FbmcgN0UxMCAgLT4gNzBFKzkKLWRxYmFzMzY3ICB0b1NjaSA3RTkgICAtPiA3RSs5Ci1kcWJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQotZHFiYXMzNjkgIHRvU2NpIDdFOCAgIC0+IDdFKzgKLWRxYmFzMzcwICB0b0VuZyA3RTggICAtPiA3MDBFKzYKLWRxYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3Ci1kcWJhczM3MiAgdG9FbmcgN0U3ICAgLT4gNzBFKzYKLWRxYmFzMzczICB0b1NjaSA3RTYgICAtPiA3RSs2Ci1kcWJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNgotZHFiYXMzNzUgIHRvU2NpIDdFNSAgIC0+IDdFKzUKLWRxYmFzMzc2ICB0b0VuZyA3RTUgICAtPiA3MDBFKzMKLWRxYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0Ci1kcWJhczM3OCAgdG9FbmcgN0U0ICAgLT4gNzBFKzMKLWRxYmFzMzc5ICB0b1NjaSA3RTMgICAtPiA3RSszCi1kcWJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMwotZHFiYXMzODEgIHRvU2NpIDdFMiAgIC0+IDdFKzIKLWRxYmFzMzgyICB0b0VuZyA3RTIgICAtPiA3MDAKLWRxYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxCi1kcWJhczM4NCAgdG9FbmcgN0UxICAgLT4gNzAKLWRxYmFzMzg1ICB0b1NjaSA3RTAgICAtPiA3Ci1kcWJhczM4NiAgdG9FbmcgN0UwICAgLT4gNwotZHFiYXMzODcgIHRvU2NpIDdFLTEgIC0+IDAuNwotZHFiYXMzODggIHRvRW5nIDdFLTEgIC0+IDAuNwotZHFiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcKLWRxYmFzMzkwICB0b0VuZyA3RS0yICAtPiAwLjA3Ci1kcWJhczM5MSAgdG9TY2kgN0UtMyAgLT4gMC4wMDcKLWRxYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNwotZHFiYXMzOTMgIHRvU2NpIDdFLTQgIC0+IDAuMDAwNwotZHFiYXMzOTQgIHRvRW5nIDdFLTQgIC0+IDAuMDAwNwotZHFiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcKLWRxYmFzMzk2ICB0b0VuZyA3RS01ICAtPiAwLjAwMDA3Ci1kcWJhczM5NyAgdG9TY2kgN0UtNiAgLT4gMC4wMDAwMDcKLWRxYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNwotZHFiYXMzOTkgIHRvU2NpIDdFLTcgIC0+IDdFLTcKLWRxYmFzNDAwICB0b0VuZyA3RS03ICAtPiA3MDBFLTkKLWRxYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04Ci1kcWJhczQwMiAgdG9FbmcgN0UtOCAgLT4gNzBFLTkKLWRxYmFzNDAzICB0b1NjaSA3RS05ICAtPiA3RS05Ci1kcWJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQotZHFiYXM0MDUgIHRvU2NpIDdFLTEwIC0+IDdFLTEwCi1kcWJhczQwNiAgdG9FbmcgN0UtMTAgLT4gNzAwRS0xMgotZHFiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExCi1kcWJhczQwOCAgdG9FbmcgN0UtMTEgLT4gNzBFLTEyCi1kcWJhczQwOSAgdG9TY2kgN0UtMTIgLT4gN0UtMTIKLWRxYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMgotZHFiYXM0MTEgIHRvU2NpIDdFLTEzIC0+IDdFLTEzCi1kcWJhczQxMiAgdG9FbmcgN0UtMTMgLT4gNzAwRS0xNQotCi0tLSBFeGFjdHMgcmVtYWluIGV4YWN0IHVwIHRvIHByZWNpc2lvbiAuLgotZHFiYXM0MjAgIHRvU2NpICAgIDEwMCAtPiAxMDAKLWRxYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMAotZHFiYXM0MjQgIHRvU2NpICA5OTkuOSAtPiAgOTk5LjkKLWRxYmFzNDI2ICB0b1NjaSAxMDAwLjAgLT4gMTAwMC4wCi1kcWJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQotZHFiYXM0MzAgIHRvU2NpIDEwMDAwIC0+IDEwMDAwCi1kcWJhczQzMiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFiYXM0MzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWJhczQzNiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWJhczQzOCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQKLWRxYmFzNDQyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkCi1kcWJhczQ0NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ0OCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ1MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZAotZHFiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAotZHFiYXM0NTYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAotZHFiYXM0NTggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdAotZHFiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQKLWRxYmFzNDYyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKLWRxYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QKLWRxYmFzNDY2ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzYgICBSb3VuZGVkIEluZXhhY3QKLWRxYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzcgICBSb3VuZGVkCi1kcWJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ3MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0Ci1kcWJhczQ3NCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM3ICAgUm91bmRlZCBJbmV4YWN0Ci0KLS0tIGNoZWNrIHJvdW5kaW5nIG1vZGVzIGhlZWRlZAotcm91bmRpbmc6ICBjZWlsaW5nCi1kcWJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRxYnNyNDAyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjQwMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgdXAKLWRxYnNyNDA1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDA3ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjQwOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBmbG9vcgotZHFic3I0MTAgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjQxMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDEzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZG93bgotZHFic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjQxNiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MTcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjQxOSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBoYWxmX2V2ZW4KLWRxYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I0MjIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDIzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MjUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgZG93bgotZHFic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjQyNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MjggIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfdXAKLWRxYnNyNDMxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNDMzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjQzNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAotZHFic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLS0tIG5lZ2F0aXZlcwotcm91bmRpbmc6ICBjZWlsaW5nCi1kcWJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQKLWRxYnNyNTAyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjUwMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgdXAKLWRxYnNyNTA1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTA3ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjUwOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBmbG9vcgotZHFic3I1MTAgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjUxMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTEzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZG93bgotZHFic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjUxNiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MTcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjUxOSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBoYWxmX2V2ZW4KLWRxYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I1MjIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTIzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MjUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgZG93bgotZHFic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkCi1kcWJzcjUyNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MjggIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfdXAKLWRxYnNyNTMxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZAotZHFic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRxYnNyNTMzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kcWJzcjUzNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDcgIFJvdW5kZWQgSW5leGFjdAotZHFic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBUaGUgJ2JhZGRpZXMnIHRlc3RzIGZyb20gRGlhZ0JpZ0RlY2ltYWwsIHBsdXMgc29tZSBuZXcgb25lcwotZHFiYXM1MDAgdG9TY2kgJzEuLjInICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTAyIHRvU2NpICcuLicgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MDMgdG9TY2kgJysrMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTA1IHRvU2NpICctKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MDYgdG9TY2kgJystMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTA4IHRvU2NpICcxMmUrKycgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MDkgdG9TY2kgJzEyZjQnICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTExIHRvU2NpICcrIDEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MTIgdG9TY2kgJzEyICcgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTE0IHRvU2NpICcgLSAxICcgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MTUgdG9TY2kgJ3gnICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTE3IHRvU2NpICcxMi0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MTggdG9TY2kgJzMrJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTIwIHRvU2NpICcxZS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MjEgdG9TY2kgJzdlOTk5OTlhJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTIzIHRvU2NpICc3ZTEyMzU2Nzg5MDEyeCcgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MjQgdG9TY2kgJycgICAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTI2IHRvU2NpICdcdTBlNWEnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MjcgdG9TY2kgJ1x1MGI2NScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTI5IHRvU2NpICcxLjM0LjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MzAgdG9TY2kgJy4xMjMuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTMyIHRvU2NpICcwMS4zNS0nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MzMgdG9TY2kgJzAwMDAuLicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTM1IHRvU2NpICcwMC4uMDAnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MzYgdG9TY2kgJzExMWUqMTIzJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTM4IHRvU2NpICcxMTFlKzEyKycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1MzkgdG9TY2kgJzExMWUxLTMtJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTQxIHRvU2NpICcxMTFlMWUrMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NDIgdG9TY2kgJzFlMS4wJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTQ0IHRvU2NpICd0ZW4nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NDUgdG9TY2kgJ09ORScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTQ3IHRvU2NpICcxZTEuJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NDggdG9TY2kgJzFlZScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTUwIHRvU2NpICcxLjIzLjQnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NTEgdG9TY2kgJzEuMi4xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTUzIHRvU2NpICcxRSsxLjIuMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NTQgdG9TY2kgJzFFKysxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTU2IHRvU2NpICcxRSstMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NTcgdG9TY2kgJzFFLSsxJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTU5IHRvU2NpICIxRSIiMSIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NjAgdG9TY2kgIjFFIiIiIiIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci0tLSBOZWFyLXNwZWNpYWxzCi1kcWJhczU2MSB0b1NjaSAicU5hTiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTYyIHRvU2NpICJOYU5xIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU2NCB0b1NjaSAiSW5maSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTY1IHRvU2NpICJJbmZpbiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU2NyB0b1NjaSAiSW5maW5pdCIgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTY4IHRvU2NpICItSW5maW5pdCIgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU3MCB0b1NjaSAiOUluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTcxIHRvU2NpICItMEluZiIgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU3MyB0b1NjaSAiLXNOYSIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNTc0IHRvU2NpICJ4TmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci0KLS0tIHNvbWUgYmFkZGllcyB3aXRoIGRvdHMgYW5kIEVzIGFuZCBkb3RzIGFuZCBzcGVjaWFscwotZHFiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NzcgdG9TY2kgICcuZSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NzggdG9TY2kgICcrLmUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODAgdG9TY2kgICctLmUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODEgdG9TY2kgICdFKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODMgdG9TY2kgICcrLkUrMScgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODQgdG9TY2kgICctLkUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheAotCi1kcWJhczU4NiB0b1NjaSAgJy5OYU4nICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU4OCB0b1NjaSAgJysuc05hTicgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU4OSB0b1NjaSAgJysuSW5mJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci0KLS0tIFplcm9zCi1kcWJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05Ci1kcWJhczYwMiB0b1NjaSAwLjAwMDAwMDAwICAgICAgICAtPiAwRS04Ci1kcWJhczYwMyB0b1NjaSAwLjAwMDAwMDAgICAgICAgICAtPiAwRS03Ci1kcWJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAotZHFiYXM2MDUgdG9TY2kgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMAotZHFiYXM2MDYgdG9TY2kgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCi1kcWJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAotZHFiYXM2MDggdG9TY2kgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMAotZHFiYXM2MDkgdG9TY2kgMC4wICAgICAgICAgICAgICAgLT4gMC4wCi1kcWJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRxYmFzNjExIHRvU2NpIDAuICAgICAgICAgICAgICAgIC0+IDAKLWRxYmFzNjEyIHRvU2NpIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKLWRxYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wCi1kcWJhczYxNCB0b1NjaSAtMC4wICAgICAgICAgICAgICAtPiAtMC4wCi1kcWJhczYxNSB0b1NjaSAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAotZHFiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCi1kcWJhczYxNyB0b1NjaSAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwCi1kcWJhczYxOCB0b1NjaSAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAotZHFiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCi1kcWJhczYyMCB0b1NjaSAtMC4wMDAwMDAwICAgICAgICAtPiAtMEUtNwotZHFiYXM2MjEgdG9TY2kgLTAuMDAwMDAwMDAgICAgICAgLT4gLTBFLTgKLWRxYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05Ci0KLWRxYmFzNjMwIHRvU2NpICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKLWRxYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMAotZHFiYXM2MzIgdG9TY2kgIDAuMDBFKzIgICAgICAgICAgLT4gMAotZHFiYXM2MzMgdG9TY2kgIDAuMDBFKzMgICAgICAgICAgLT4gMEUrMQotZHFiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMgotZHFiYXM2MzUgdG9TY2kgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMwotZHFiYXM2MzYgdG9TY2kgIDAuMDBFKzYgICAgICAgICAgLT4gMEUrNAotZHFiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQotZHFiYXM2MzggdG9TY2kgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgotZHFiYXM2MzkgdG9TY2kgIDAuMDBFKzkgICAgICAgICAgLT4gMEUrNwotCi1kcWJhczY0MCB0b1NjaSAgMC4wRSswICAgICAgICAgICAtPiAwLjAKLWRxYmFzNjQxIHRvU2NpICAwLjBFKzEgICAgICAgICAgIC0+IDAKLWRxYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzEKLWRxYmFzNjQzIHRvU2NpICAwLjBFKzMgICAgICAgICAgIC0+IDBFKzIKLWRxYmFzNjQ0IHRvU2NpICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKLWRxYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQKLWRxYmFzNjQ2IHRvU2NpICAwLjBFKzYgICAgICAgICAgIC0+IDBFKzUKLWRxYmFzNjQ3IHRvU2NpICAwLjBFKzcgICAgICAgICAgIC0+IDBFKzYKLWRxYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcKLWRxYmFzNjQ5IHRvU2NpICAwLjBFKzkgICAgICAgICAgIC0+IDBFKzgKLQotZHFiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMAotZHFiYXM2NTEgdG9TY2kgIDBFKzEgICAgICAgICAgICAgLT4gMEUrMQotZHFiYXM2NTIgdG9TY2kgIDBFKzIgICAgICAgICAgICAgLT4gMEUrMgotZHFiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMwotZHFiYXM2NTQgdG9TY2kgIDBFKzQgICAgICAgICAgICAgLT4gMEUrNAotZHFiYXM2NTUgdG9TY2kgIDBFKzUgICAgICAgICAgICAgLT4gMEUrNQotZHFiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNgotZHFiYXM2NTcgdG9TY2kgIDBFKzcgICAgICAgICAgICAgLT4gMEUrNwotZHFiYXM2NTggdG9TY2kgIDBFKzggICAgICAgICAgICAgLT4gMEUrOAotZHFiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQotCi1kcWJhczY2MCB0b1NjaSAgMC4wRS0wICAgICAgICAgICAtPiAwLjAKLWRxYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKLWRxYmFzNjYyIHRvU2NpICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCi1kcWJhczY2MyB0b1NjaSAgMC4wRS0zICAgICAgICAgICAtPiAwLjAwMDAKLWRxYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKLWRxYmFzNjY1IHRvU2NpICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCi1kcWJhczY2NiB0b1NjaSAgMC4wRS02ICAgICAgICAgICAtPiAwRS03Ci1kcWJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04Ci1kcWJhczY2OCB0b1NjaSAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Ci1kcWJhczY2OSB0b1NjaSAgMC4wRS05ICAgICAgICAgICAtPiAwRS0xMAotCi1kcWJhczY3MCB0b1NjaSAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCi1kcWJhczY3MSB0b1NjaSAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAotZHFiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwCi1kcWJhczY3MyB0b1NjaSAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCi1kcWJhczY3NCB0b1NjaSAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAotZHFiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNwotZHFiYXM2NzYgdG9TY2kgIDAuMDBFLTYgICAgICAgICAgLT4gMEUtOAotZHFiYXM2NzcgdG9TY2kgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQotZHFiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTAKLWRxYmFzNjc5IHRvU2NpICAwLjAwRS05ICAgICAgICAgIC0+IDBFLTExCi0KLWRxYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwCi1kcWJhczY4MSB0b1NjaSAgIDAwMDAwLiAgICAgICAgICAtPiAgMAotZHFiYXM2ODIgdG9TY2kgICAgMDAwMC4gICAgICAgICAgLT4gIDAKLWRxYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwCi1kcWJhczY4NCB0b1NjaSAgICAgIDAwLiAgICAgICAgICAtPiAgMAotZHFiYXM2ODUgdG9TY2kgICAgICAgMC4gICAgICAgICAgLT4gIDAKLWRxYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwCi1kcWJhczY4NyB0b1NjaSAgLTAwMDAwLiAgICAgICAgICAtPiAtMAotZHFiYXM2ODggdG9TY2kgICswLiAgICAgICAgICAgICAgLT4gIDAKLWRxYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wCi0KLS0tIFNwZWNpYWxzCi1kcWJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4KLWRxYmFzNzAxIHRvU2NpICJuYW4iICAgICAgICAgICAgIC0+IE5hTgotZHFiYXM3MDIgdG9TY2kgIm5BbiIgICAgICAgICAgICAgLT4gTmFOCi1kcWJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4KLWRxYmFzNzA0IHRvU2NpICIrTmFOIiAgICAgICAgICAgIC0+IE5hTgotZHFiYXM3MDUgdG9TY2kgIituYW4iICAgICAgICAgICAgLT4gTmFOCi1kcWJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4KLWRxYmFzNzA3IHRvU2NpICIrTkFOIiAgICAgICAgICAgIC0+IE5hTgotZHFiYXM3MDggdG9TY2kgIi1OYU4iICAgICAgICAgICAgLT4gLU5hTgotZHFiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTgotZHFiYXM3MTAgdG9TY2kgIi1uQW4iICAgICAgICAgICAgLT4gLU5hTgotZHFiYXM3MTEgdG9TY2kgIi1OQU4iICAgICAgICAgICAgLT4gLU5hTgotZHFiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFOCi1kcWJhczcxMyB0b1NjaSAnTmFOMScgICAgICAgICAgICAtPiBOYU4xCi1kcWJhczcxNCB0b1NjaSAnTmFOMTInICAgICAgICAgICAtPiBOYU4xMgotZHFiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzCi1kcWJhczcxNiB0b1NjaSAnTmFOMTIzNCcgICAgICAgICAtPiBOYU4xMjM0Ci1kcWJhczcxNyB0b1NjaSAnTmFOMDEnICAgICAgICAgICAtPiBOYU4xCi1kcWJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMgotZHFiYXM3MTkgdG9TY2kgJ05hTjAxMjMnICAgICAgICAgLT4gTmFOMTIzCi1kcWJhczcyMCB0b1NjaSAnTmFOMDEyMzQnICAgICAgICAtPiBOYU4xMjM0Ci1kcWJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xCi1kcWJhczcyMiB0b1NjaSAnTmFOMDAxMicgICAgICAgICAtPiBOYU4xMgotZHFiYXM3MjMgdG9TY2kgJ05hTjAwMTIzJyAgICAgICAgLT4gTmFOMTIzCi1kcWJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0Ci1kcWJhczcyNSB0b1NjaSAnTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4MTIzNDU2Nzg5MDEyMzQ1NicgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczcyNiB0b1NjaSAnTmFOMTIzZSsxJyAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM3MjggdG9TY2kgJ05hTi0xMicgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kcWJhczcyOSB0b1NjaSAnTmFOKzEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotZHFiYXM3MzAgdG9TY2kgInNOYU4iICAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzEgdG9TY2kgInNuYW4iICAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzMgdG9TY2kgIlNOQU4iICAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzQgdG9TY2kgIitzTmFOIiAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzYgdG9TY2kgIitTbkFuIiAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzcgdG9TY2kgIitTTkFOIiAgICAgICAgICAgLT4gc05hTgotZHFiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4KLWRxYmFzNzM5IHRvU2NpICItc25hbiIgICAgICAgICAgIC0+IC1zTmFOCi1kcWJhczc0MCB0b1NjaSAiLVNuQW4iICAgICAgICAgICAtPiAtc05hTgotZHFiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4KLWRxYmFzNzQyIHRvU2NpICdzTmFOMDAwMCcgICAgICAgIC0+IHNOYU4KLWRxYmFzNzQzIHRvU2NpICdzTmFONycgICAgICAgICAgIC0+IHNOYU43Ci1kcWJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNAotZHFiYXM3NDUgdG9TY2kgJ3NOYU4xMjM0NTY3ODkwMTIzNDU2Nzg3MjM0NTYxMjM0NTY3ODkwJyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRxYmFzNzQ2IHRvU2NpICdzTmFONzIuNDUnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHFiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci0KLWRxYmFzNzQ4IHRvU2NpICJJbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NTAgdG9TY2kgImlOZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRxYmFzNzUxIHRvU2NpICJJTkYiICAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NTMgdG9TY2kgIitpbmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRxYmFzNzU0IHRvU2NpICIraU5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NTYgdG9TY2kgIi1JbmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1kcWJhczc1NyB0b1NjaSAiLWluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWRxYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQotZHFiYXM3NTkgdG9TY2kgIi1JTkYiICAgICAgICAgICAgLT4gLUluZmluaXR5Ci0KLWRxYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc2MSB0b1NjaSAiaW5maW5pdHkiICAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NjIgdG9TY2kgImlOZkluSXRZIiAgICAgICAgLT4gSW5maW5pdHkKLWRxYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc2NCB0b1NjaSAiK0luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NjUgdG9TY2kgIitpbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkKLWRxYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5Ci1kcWJhczc2NyB0b1NjaSAiK0lORklOSVRZIiAgICAgICAtPiBJbmZpbml0eQotZHFiYXM3NjggdG9TY2kgIi1JbmZpbml0eSIgICAgICAgLT4gLUluZmluaXR5Ci1kcWJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKLWRxYmFzNzcwIHRvU2NpICItaU5mSW5JdFkiICAgICAgIC0+IC1JbmZpbml0eQotZHFiYXM3NzEgdG9TY2kgIi1JTkZJTklUWSIgICAgICAgLT4gLUluZmluaXR5Ci0KLS0tIFNwZWNpYWxzIGFuZCB6ZXJvcyBmb3IgdG9FbmcKLWRxYmFzdDc3MiB0b0VuZyAiTmFOIiAgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQotZHFiYXN0Nzc0IHRvRW5nICItc05hTiIgICAgICAgICAgICAtPiAtc05hTgotZHFiYXN0Nzc1IHRvRW5nICItTmFOIiAgICAgICAgICAgICAtPiAtTmFOCi1kcWJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3NzggdG9FbmcgIitzTmFOIiAgICAgICAgICAgIC0+IHNOYU4KLWRxYmFzdDc3OSB0b0VuZyAiK05hTiIgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3ODEgdG9FbmcgIlNOQU4iICAgICAgICAgICAgIC0+IHNOYU4KLWRxYmFzdDc4MiB0b0VuZyAiTkFOIiAgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3ODQgdG9FbmcgInNuYW4iICAgICAgICAgICAgIC0+IHNOYU4KLWRxYmFzdDc4NSB0b0VuZyAibmFuIiAgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3ODcgdG9FbmcgIlNuQU4iICAgICAgICAgICAgIC0+IHNOYU4KLWRxYmFzdDc4OCB0b0VuZyAibkFOIiAgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3OTAgdG9FbmcgInNOYW4iICAgICAgICAgICAgIC0+IHNOYU4KLWRxYmFzdDc5MSB0b0VuZyAiTmFuIiAgICAgICAgICAgICAgLT4gTmFOCi1kcWJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5Ci1kcWJhc3Q3OTMgdG9FbmcgInNOYU4iICAgICAgICAgICAgIC0+IHNOYU4KLQotLS0gWmVybyB0b0VuZywgZXRjLgotZHFiYXN0ODAwIHRvRW5nIDBlKzEgICAgICAgICAgICAgIC0+ICIwLjAwRSszIiAgLS0gZG9jIGV4YW1wbGUKLQotZHFiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKLWRxYmFzdDgwMiB0b0VuZyAwLjAwMDAwMDAwICAgICAgICAtPiAwLjAwRS02Ci1kcWJhc3Q4MDMgdG9FbmcgMC4wMDAwMDAwICAgICAgICAgLT4gMC4wRS02Ci1kcWJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDAKLWRxYmFzdDgwNSB0b0VuZyAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCi1kcWJhc3Q4MDYgdG9FbmcgMC4wMDAwICAgICAgICAgICAgLT4gMC4wMDAwCi1kcWJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDAKLWRxYmFzdDgwOCB0b0VuZyAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCi1kcWJhc3Q4MDkgdG9FbmcgMC4wICAgICAgICAgICAgICAgLT4gMC4wCi1kcWJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wCi1kcWJhc3Q4MTEgdG9FbmcgMC4gICAgICAgICAgICAgICAgLT4gMAotZHFiYXN0ODEyIHRvRW5nIC0uMCAgICAgICAgICAgICAgIC0+IC0wLjAKLWRxYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMAotZHFiYXN0ODE0IHRvRW5nIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKLWRxYmFzdDgxNSB0b0VuZyAtMC4wMCAgICAgICAgICAgICAtPiAtMC4wMAotZHFiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMAotZHFiYXN0ODE3IHRvRW5nIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKLWRxYmFzdDgxOCB0b0VuZyAtMC4wMDAwMCAgICAgICAgICAtPiAtMC4wMDAwMAotZHFiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMAotZHFiYXN0ODIwIHRvRW5nIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wLjBFLTYKLWRxYmFzdDgyMSB0b0VuZyAtMC4wMDAwMDAwMCAgICAgICAtPiAtMC4wMEUtNgotZHFiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05Ci0KLWRxYmFzdDgzMCB0b0VuZyAgMC4wMEUrMCAgICAgICAgICAtPiAwLjAwCi1kcWJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCi1kcWJhc3Q4MzIgdG9FbmcgIDAuMDBFKzIgICAgICAgICAgLT4gMAotZHFiYXN0ODMzIHRvRW5nICAwLjAwRSszICAgICAgICAgIC0+IDAuMDBFKzMKLWRxYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMKLWRxYmFzdDgzNSB0b0VuZyAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCi1kcWJhc3Q4MzYgdG9FbmcgIDAuMDBFKzYgICAgICAgICAgLT4gMC4wMEUrNgotZHFiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNgotZHFiYXN0ODM4IHRvRW5nICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYKLWRxYmFzdDgzOSB0b0VuZyAgMC4wMEUrOSAgICAgICAgICAtPiAwLjAwRSs5Ci0KLWRxYmFzdDg0MCB0b0VuZyAgMC4wRSswICAgICAgICAgICAtPiAwLjAKLWRxYmFzdDg0MSB0b0VuZyAgMC4wRSsxICAgICAgICAgICAtPiAwCi1kcWJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMwotZHFiYXN0ODQzIHRvRW5nICAwLjBFKzMgICAgICAgICAgIC0+IDAuMEUrMwotZHFiYXN0ODQ0IHRvRW5nICAwLjBFKzQgICAgICAgICAgIC0+IDBFKzMKLWRxYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2Ci1kcWJhc3Q4NDYgdG9FbmcgIDAuMEUrNiAgICAgICAgICAgLT4gMC4wRSs2Ci1kcWJhc3Q4NDcgdG9FbmcgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgotZHFiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkKLWRxYmFzdDg0OSB0b0VuZyAgMC4wRSs5ICAgICAgICAgICAtPiAwLjBFKzkKLQotZHFiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDAKLWRxYmFzdDg1MSB0b0VuZyAgMEUrMSAgICAgICAgICAgICAtPiAwLjAwRSszCi1kcWJhc3Q4NTIgdG9FbmcgIDBFKzIgICAgICAgICAgICAgLT4gMC4wRSszCi1kcWJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMwotZHFiYXN0ODU0IHRvRW5nICAwRSs0ICAgICAgICAgICAgIC0+IDAuMDBFKzYKLWRxYmFzdDg1NSB0b0VuZyAgMEUrNSAgICAgICAgICAgICAtPiAwLjBFKzYKLWRxYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Ci1kcWJhc3Q4NTcgdG9FbmcgIDBFKzcgICAgICAgICAgICAgLT4gMC4wMEUrOQotZHFiYXN0ODU4IHRvRW5nICAwRSs4ICAgICAgICAgICAgIC0+IDAuMEUrOQotZHFiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkKLQotZHFiYXN0ODYwIHRvRW5nICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAotZHFiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDAKLWRxYmFzdDg2MiB0b0VuZyAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMAotZHFiYXN0ODYzIHRvRW5nICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAotZHFiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDAKLWRxYmFzdDg2NSB0b0VuZyAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMAotZHFiYXN0ODY2IHRvRW5nICAwLjBFLTYgICAgICAgICAgIC0+IDAuMEUtNgotZHFiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYKLWRxYmFzdDg2OCB0b0VuZyAgMC4wRS04ICAgICAgICAgICAtPiAwRS05Ci1kcWJhc3Q4NjkgdG9FbmcgIDAuMEUtOSAgICAgICAgICAgLT4gMC4wRS05Ci0KLWRxYmFzdDg3MCB0b0VuZyAgMC4wMEUtMCAgICAgICAgICAtPiAwLjAwCi1kcWJhc3Q4NzEgdG9FbmcgIDAuMDBFLTEgICAgICAgICAgLT4gMC4wMDAKLWRxYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKLWRxYmFzdDg3MyB0b0VuZyAgMC4wMEUtMyAgICAgICAgICAtPiAwLjAwMDAwCi1kcWJhc3Q4NzQgdG9FbmcgIDAuMDBFLTQgICAgICAgICAgLT4gMC4wMDAwMDAKLWRxYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYKLWRxYmFzdDg3NiB0b0VuZyAgMC4wMEUtNiAgICAgICAgICAtPiAwLjAwRS02Ci1kcWJhc3Q4NzcgdG9FbmcgIDAuMDBFLTcgICAgICAgICAgLT4gMEUtOQotZHFiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQotZHFiYXN0ODc5IHRvRW5nICAwLjAwRS05ICAgICAgICAgIC0+IDAuMDBFLTkKLQotLS0gbG9uZyBpbnB1dCBzdHJpbmdzCi1kcWJhczgwMSB0b3NjaSAnMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODAyIHRvc2NpICcwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2Ci1kcWJhczgwNCB0b3NjaSAnMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODA1IHRvc2NpICcwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2Ci1kcWJhczgwNyB0b3NjaSAnMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODA4IHRvc2NpICcwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLWRxYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2Ci1kcWJhczgxMCB0b3NjaSAnMDAwMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEyMzQ1Njc4OTAxMjM0NTYKLQotZHFiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2Ci1kcWJhczgxMiB0b3NjaSAnMC4wMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1NgotZHFiYXM4MTMgdG9zY2kgJzAuMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMTIzNDU2Nzg5MDEyMzQ1NgotZHFiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2Ci1kcWJhczgxNSB0b3NjaSAnMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1NgotZHFiYXM4MTYgdG9zY2kgJzAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAwLjAwMDAwMTIzNDU2Nzg5MDEyMzQ1NgotZHFiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcKLWRxYmFzODE4IHRvc2NpICcwLjAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOAotZHFiYXM4MTkgdG9zY2kgJzAuMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MDEyMzQ1NkUtOQotZHFiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwCi0KLWRxYmFzODIxIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM3IEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM4IEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjMgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTInIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSszOSBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzODI0IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQwIEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQxIEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjYgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDUnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0MiBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzODI3IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQzIEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ0IEluZXhhY3QgUm91bmRlZAotZHFiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NzgnIC0+IDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU3RSs0NSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzCi1kcWJhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kcWJhczkwNyB0b1NjaSAnOTk5ZTk5OTk5OTk5OScgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kcWJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MTAgdG9TY2kgJzAuMWUxMDAwMDAwMDAwJyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kcWJhczkxMyB0b1NjaSAnOTllLTk5OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MTYgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTk5JyAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0tLSBuZWdhdGl2ZXMgdGhlIHNhbWUKLWRxYmFzOTE4IHRvU2NpICctOTllOTk5OTk5OTk5JyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kcWJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzOTIzIHRvU2NpICctMTBlLTEwMDAwMDAwMDAnICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxYmFzOTI0IHRvU2NpICctMC45ZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kcWJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMKLXJvdW5kaW5nOiAgY2VpbGluZwotZHFiYXM5MzAgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogIHVwCi1kcWJhczkzMiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiAgZG93bgotZHFiYXM5MzQgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogIGZsb29yCi1kcWJhczkzNiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICBoYWxmX3VwCi1kcWJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5MzkgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiAgaGFsZl9ldmVuCi1kcWJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5NDEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiAgaGFsZl9kb3duCi1kcWJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHFiYXM5NDMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICBoYWxmX2V2ZW4KLQotLS0gTm93IGNoZWNrIDg1NC83NTRyIHNvbWUgc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93IHRvIDAKLWRxYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMKLWRxYmVtNDAxIHRvU2NpICAwLjFFLTYxNzIgICAgICAgIC0+IDFFLTYxNzMgICAgICAgU3Vibm9ybWFsCi1kcWJlbTQwMiB0b1NjaSAgMC4xMDAwRS02MTcyICAgICAtPiAxLjAwMEUtNjE3MyAgIFN1Ym5vcm1hbAotZHFiZW00MDMgdG9TY2kgIDAuMDEwMEUtNjE3MiAgICAgLT4gMS4wMEUtNjE3NCAgICBTdWJub3JtYWwKLWRxYmVtNDA0IHRvU2NpICAwLjAwMTBFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgICAgU3Vibm9ybWFsCi1kcWJlbTQwNSB0b1NjaSAgMC4wMDAxRS02MTcyICAgICAtPiAxRS02MTc2ICAgICAgIFN1Ym5vcm1hbAotZHFiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRxYmVtNDA3IHRvU2NpICAwLjAwMDEzRS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQwOCB0b1NjaSAgMC4wMDAxNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDEwIHRvU2NpICAwLjAwMDIzRS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQxMSB0b1NjaSAgMC4wMDAyNUUtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTYxNzIgICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtNjE3MiAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MTggdG9TY2kgIDAuMDAwMjUxRS02MTcyICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDE5IHRvU2NpICAwLjAwMDA5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQyMCB0b1NjaSAgMC4wMDAwNUUtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJlbTQyMSB0b1NjaSAgMC4wMDAwM0UtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLWRxYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtNjE3MiAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS02MTcyICAgLT4gMS4yRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZHFiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDMzIHRvU2NpICAwLjAxMDA1MEUtNjE3MiAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQzNCB0b1NjaSAgMC4wMTAwNTFFLTYxNzIgICAtPiAxLjAxRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDM2IHRvU2NpICAwLjAxMDE1MEUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQzNyB0b1NjaSAgMC4wMTAxNTFFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kcWJlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NDEgdG9TY2kgIDAuMTAxMDVFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDQyIHRvU2NpICAwLjEwMTA3RS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQ0MyB0b1NjaSAgMC4xMDExM0UtNjE3MiAgICAtPiAxLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NDQgdG9TY2kgIDAuMTAxMTVFLTYxNzIgICAgLT4gMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRxYmVtNDUwIHRvU2NpICAxLjEwNzMwRS02MTczICAgLT4gMS4xMDdFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDUxIHRvU2NpICAxLjEwNzUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDUyIHRvU2NpICAxLjEwNzcwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDUzIHRvU2NpICAxLjEwODMwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDU0IHRvU2NpICAxLjEwODUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDU1IHRvU2NpICAxLjEwODcwRS02MTczICAgLT4gMS4xMDlFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbWFrZSBzdXJlIHNpZ24gT0sKLWRxYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtNjE3MiAgIC0+IC0xLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NTcgdG9TY2kgIC0wLjEwMTA1RS02MTcyICAgLT4gLTEuMDEwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtNjE3MiAgIC0+IC0xLjAxMUUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NjAgdG9TY2kgIC0wLjEwMTE1RS02MTcyICAgLT4gLTEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gJzk5OXMnIGNhc2VzCi1kcWJlbTQ2NCB0b1NjaSAgOTk5OTk5RS02MTczICAgICAgICAgLT4gOS45OTk5OUUtNjE2OCBTdWJub3JtYWwKLWRxYmVtNDY1IHRvU2NpICA5OTk5OS4wRS02MTcyICAgICAgICAtPiA5Ljk5OTkwRS02MTY4IFN1Ym5vcm1hbAotZHFiZW00NjYgdG9TY2kgIDk5OTk5LkUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE2OCAgU3Vibm9ybWFsCi1kcWJlbTQ2NyB0b1NjaSAgOTk5OS45RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY5ICBTdWJub3JtYWwKLWRxYmVtNDY4IHRvU2NpICA5OTkuOTlFLTYxNzIgICAgICAgICAtPiA5Ljk5OTlFLTYxNzAgIFN1Ym5vcm1hbAotZHFiZW00NjkgdG9TY2kgIDk5Ljk5OUUtNjE3MiAgICAgICAgIC0+IDkuOTk5OUUtNjE3MSAgU3Vibm9ybWFsCi1kcWJlbTQ3MCB0b1NjaSAgOS45OTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcyICBTdWJub3JtYWwKLWRxYmVtNDcxIHRvU2NpICAwLjk5OTk5RS02MTcyICAgICAgICAtPiAxLjAwMDBFLTYxNzIgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtNjE3MiAgICAgICAtPiAxLjAwMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtNjE3MiAgICAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWJlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtNjE3MiAgICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS02MTcyICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTYxNzIgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi0tLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKLWRxYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWJhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKLWRxYmFzMTA0MSB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ0RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcWJhczEwNDIgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NUUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFiYXMxMDQzIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDZFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KLWRxYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrNjExMSBDbGFtcGVkCi1kcWJhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTYxNzYgIENsYW1wZWQKLWRxYmFzMTA3NyB0b1NjaSAgLTBlKzEwMDAwICAtPiAtMEUrNjExMSBDbGFtcGVkCi1kcWJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTYxNzYgIENsYW1wZWQKLQotLS0gZXh0cmVtZSB2YWx1ZXMgZnJvbSBuZXh0LXdpZGVyCi1kcWJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWJhczExMDIgdG9TY2kgLTFFLTE1NzI4NjMgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotZHFiYXMxMTAzIHRvU2NpIC0xRS0xNTcyOTMyIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLWRxYmFzMTEwNCB0b1NjaSAtMCAtPiAtMAotZHFiYXMxMTA1IHRvU2NpICswIC0+ICAwCi1kcWJhczExMDYgdG9TY2kgKzFFLTE1NzI5MzIgLT4gIDBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotZHFiYXMxMTA3IHRvU2NpICsxRS0xNTcyODYzIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLWRxYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSsxNTcyODY0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFCYXNlLmRlY1Rlc3QgLS0gYmFzZSBkZWNRdWFkIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgZmlsZSB0ZXN0cyBiYXNlIGNvbnZlcnNpb25zIGZyb20gc3RyaW5nIHRvIGEgZGVjaW1hbCBudW1iZXINCistLSBhbmQgYmFjayB0byBhIHN0cmluZyAoaW4gU2NpZW50aWZpYyBmb3JtKQ0KKw0KKy0tIE5vdGUgdGhhdCB1bmxpa2Ugb3RoZXIgb3BlcmF0aW9ucyB0aGUgb3BlcmFuZCBpcyBzdWJqZWN0IHRvIHJvdW5kaW5nDQorLS0gdG8gY29uZm9ybSB0byBlbWF4IGFuZCBwcmVjaXNpb24gc2V0dGluZ3MgKHRoYXQgaXMsIG51bWJlcnMgd2lsbA0KKy0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQ0KKy0tICdsZWZ0IGhhbmQgc2lkZScsIHRoZXJlZm9yZSwgbWF5IGhhdmUgbnVtYmVycyB0aGF0IGNhbm5vdCBiZQ0KKy0tIHJlcHJlc2VudGVkIGluIGEgZGVjUXVhZC4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUNCistLSBuZXh0LXdpZGVyIGZvcm1hdCwgYW5kIGhlbmNlIHRoZXNlIHRlc3RjYXNlcyBtYXkgYWxzbyBiZSB1c2VkIHRvDQorLS0gdGVzdCBuYXJyb3dpbmcgYW5kIHdpZGVuaW5nIG9wZXJhdGlvbnMuDQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RxYmFzMDAxIHRvU2NpICAgICAgIDAgLT4gMA0KK2RxYmFzMDAyIHRvU2NpICAgICAgIDEgLT4gMQ0KK2RxYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wDQorZHFiYXMwMDQgdG9TY2kgICAgMS4wMCAtPiAxLjAwDQorZHFiYXMwMDUgdG9TY2kgICAgICAxMCAtPiAxMA0KK2RxYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMA0KK2RxYmFzMDA3IHRvU2NpICAgIDEwLjAgLT4gMTAuMA0KK2RxYmFzMDA4IHRvU2NpICAgIDEwLjEgLT4gMTAuMQ0KK2RxYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNA0KK2RxYmFzMDEwIHRvU2NpICAgIDEwLjUgLT4gMTAuNQ0KK2RxYmFzMDExIHRvU2NpICAgIDEwLjYgLT4gMTAuNg0KK2RxYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQ0KK2RxYmFzMDEzIHRvU2NpICAgIDExLjAgLT4gMTEuMA0KK2RxYmFzMDE0IHRvU2NpICAxLjIzNCAtPiAxLjIzNA0KK2RxYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMw0KK2RxYmFzMDE2IHRvU2NpICAwLjAxMiAtPiAwLjAxMg0KK2RxYmFzMDE3IHRvU2NpICAtMCAgICAtPiAtMA0KK2RxYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wDQorZHFiYXMwMTkgdG9TY2kgLTAwLjAwIC0+IC0wLjAwDQorDQorZHFiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xDQorZHFiYXMwMjIgdG9TY2kgICAtMS4wIC0+IC0xLjANCitkcWJhczAyMyB0b1NjaSAgIC0wLjEgLT4gLTAuMQ0KK2RxYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xDQorZHFiYXMwMjUgdG9TY2kgICAtOS4xMSAtPiAtOS4xMQ0KK2RxYmFzMDI2IHRvU2NpICAgLTkuMTE5IC0+IC05LjExOQ0KK2RxYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQ0KKw0KK2RxYmFzMDMwIHRvU2NpICAnMTIzNDU2Nzg5LjEyMzQ1NicgICAtPiAnMTIzNDU2Nzg5LjEyMzQ1NicNCitkcWJhczAzMSB0b1NjaSAgJzEyMzQ1Njc4OS4wMDAwMDAnICAgLT4gJzEyMzQ1Njc4OS4wMDAwMDAnDQorZHFiYXMwMzIgdG9TY2kgICAnMTIzNDU2Nzg5MTIzNDU2JyAgIC0+ICcxMjM0NTY3ODkxMjM0NTYnDQorZHFiYXMwMzMgdG9TY2kgICAnMC4wMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAxMjM0NTY3ODknDQorZHFiYXMwMzQgdG9TY2kgICcwLjAwMDAwMTIzNDU2Nzg5JyAgIC0+ICcwLjAwMDAwMTIzNDU2Nzg5Jw0KK2RxYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1Njc4OScgICAtPiAnMS4yMzQ1Njc4OUUtNycNCitkcWJhczAzNiB0b1NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5JyAgLT4gJzEuMjM0NTY3ODlFLTgnDQorDQorZHFiYXMwMzcgdG9TY2kgJzAuMTIzNDU2Nzg5MDEyMzQ0JyAgIC0+ICcwLjEyMzQ1Njc4OTAxMjM0NCcNCitkcWJhczAzOCB0b1NjaSAnMC4xMjM0NTY3ODkwMTIzNDUnICAgLT4gJzAuMTIzNDU2Nzg5MDEyMzQ1Jw0KKw0KKy0tIHRlc3QgZmluaXRlIGJvdW5kcyAoTmVncyBvZiwgdGhlbiAwLCBOdGlueSwgTm1pbiwgb3RoZXIsIE5tYXgpDQorZHFic24wMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxYnNuMDAyIHRvU2NpIC0xRS02MTQzIC0+IC0xRS02MTQzDQorZHFic24wMDMgdG9TY2kgLTFFLTYxNzYgLT4gLTFFLTYxNzYgU3Vibm9ybWFsDQorZHFic24wMDQgdG9TY2kgLTAgLT4gLTANCitkcWJzbjAwNSB0b1NjaSArMCAtPiAgMA0KK2RxYnNuMDA2IHRvU2NpICsxRS02MTc2IC0+ICAxRS02MTc2IFN1Ym5vcm1hbA0KK2RxYnNuMDA3IHRvU2NpICsxRS02MTQzIC0+ICAxRS02MTQzDQorZHFic24wMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKw0KKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdDQorLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0DQorZHFiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJw0KK2RxYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnDQorZHFiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2Jw0KK2RxYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicNCitkcWJhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnDQorZHFiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJw0KK2RxYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycNCitkcWJhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41Jw0KK2RxYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcNCitkcWJhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnDQorZHFiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1Jw0KK2RxYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnDQorZHFiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnDQorZHFiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJw0KK2RxYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnDQorZHFiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcNCitkcWJhczA1NiB0b1NjaSAiMTIzNDU2NzguNTQzMjEwIiAtPiAnMTIzNDU2NzguNTQzMjEwJw0KK2RxYmFzMDU3IHRvU2NpICIyMzQ1Njc4LjU0MzIxMCIgLT4gJzIzNDU2NzguNTQzMjEwJw0KK2RxYmFzMDU4IHRvU2NpICIzNDU2NzguNTQzMjEwIiAtPiAnMzQ1Njc4LjU0MzIxMCcNCitkcWJhczA1OSB0b1NjaSAiMDM0NTY3OC41NDMyMSIgLT4gJzM0NTY3OC41NDMyMScNCitkcWJhczA2MCB0b1NjaSAiMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCitkcWJhczA2MSB0b1NjaSAiKzM0NTY3OC41NDMyIiAtPiAnMzQ1Njc4LjU0MzInDQorZHFiYXMwNjIgdG9TY2kgIiswMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCitkcWJhczA2MyB0b1NjaSAiKzAwMzQ1Njc4LjU0MzIiIC0+ICczNDU2NzguNTQzMicNCitkcWJhczA2NCB0b1NjaSAiLTM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicNCitkcWJhczA2NSB0b1NjaSAiLTAzNDU2NzguNTQzMiIgIC0+ICctMzQ1Njc4LjU0MzInDQorZHFiYXMwNjYgdG9TY2kgIi0wMDM0NTY3OC41NDMyIiAgLT4gJy0zNDU2NzguNTQzMicNCistLSBleGFtcGxlcw0KK2RxYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1Jw0KK2RxYmFzMDY4IHRvU2NpICI1MEUtNyIgICAgICAgLT4gJzAuMDAwMDA1MCcNCitkcWJhczA2OSB0b1NjaSAiNUUtNyIgICAgICAgIC0+ICc1RS03Jw0KKw0KKy0tIFtObyBleG90aWNzIGFzIG5vIFVuaWNvZGVdDQorDQorLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzDQorZHFiYXMwNzEgdG9TY2kgIC4xMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAwLjEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzIgdG9TY2kgIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIuMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzLjQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzUgdG9TY2kgIDEyMzQuNTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNC41Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDUuNjc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Ljc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzggdG9TY2kgIDEyMzQ1NjcuODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Ny44OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2NzguOTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4xMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5LjEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODEgdG9TY2kgIDEyMzQ1Njc4OTEuMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MS4yMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTEyLjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIuMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTEyMy40NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzLjQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQuNTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNC41Njc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1LjY3ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDUuNjc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Ni43ODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Ljc4OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1NjcuODkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Ny44OTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4LjkwMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2NzguOTAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwODkgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OS4wMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5LjAxMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAuMTIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MC4xMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxLjIzNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEuMjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTIgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMi4zNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyLjM0NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjMuNDU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMy40NTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0LjU2NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQuNTY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NS42NzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1LjY3ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTYuNzgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Ni43ODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTcgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3LjgwMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1NjcuODAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTggdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3OC4wMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4LjAxMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMwOTkgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAuMTIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MC4xMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDAgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxLjIzNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEuMjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDEgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMi4zNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyLjM0NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDIgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjMuNDU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMy40NTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDMgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0LjU2MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQuNTYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDQgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NS42MTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1LjYgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDUgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYuMTIzICAtPiAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDYgdG9TY2kgIDEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTYxLjIzICAtPiAgMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTZFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYmFzMTA3IHRvU2NpICAxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2MTIuMyAgLT4gIDEuMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2RSszNSBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczEwOCB0b1NjaSAgMTIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NjEyMy4gIC0+ICAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1NkUrMzYgSW5leGFjdCBSb3VuZGVkDQorLS0gMTIzNDU2Nzg5MDEyMzQ1Njc4DQorDQorLS0gTnVtYmVycyB3aXRoIEUNCitkcWJhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KK2RxYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJw0KK2RxYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcNCitkcWJhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycNCitkcWJhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJw0KK2RxYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJw0KK2RxYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcNCitkcWJhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycNCitkcWJhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScNCitkcWJhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknDQorZHFiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknDQorZHFiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknDQorZHFiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJw0KK2RxYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5Jw0KK2RxYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5Jw0KK2RxYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KK2RxYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5Jw0KK2RxYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcNCitkcWJhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScNCitkcWJhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScNCitkcWJhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScNCitkcWJhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScNCitkcWJhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnDQorZHFiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknDQorZHFiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknDQorZHFiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJw0KK2RxYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnDQorZHFiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknDQorZHFiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnDQorZHFiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcNCitkcWJhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScNCitkcWJhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScNCitkcWJhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcNCitkcWJhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcNCitkcWJhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScNCitkcWJhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcNCitkcWJhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnDQorZHFiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJw0KK2RxYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicNCitkcWJhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnDQorDQorZHFiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1Jw0KK2RxYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnDQorZHFiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04Jw0KK2RxYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnDQorZHFiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1Jw0KK2RxYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1Jw0KK2RxYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnDQorZHFiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1Jw0KK2RxYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScNCitkcWJhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnDQorZHFiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnDQorZHFiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0Jw0KK2RxYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcNCitkcWJhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJw0KKw0KK2RxYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScNCitkcWJhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5Jw0KK2RxYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycNCitkcWJhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnDQorZHFiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnDQorZHFiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScNCitkcWJhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnDQorZHFiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1Jw0KK2RxYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScNCitkcWJhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScNCitkcWJhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnDQorZHFiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1Jw0KK2RxYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScNCitkcWJhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJw0KKw0KK2RxYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScNCitkcWJhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4Jw0KK2RxYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScNCitkcWJhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScNCitkcWJhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1Jw0KK2RxYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScNCitkcWJhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnDQorZHFiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41Jw0KK2RxYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1Jw0KK2RxYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcNCitkcWJhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnDQorZHFiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2Jw0KK2RxYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnDQorZHFiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicNCisNCitkcWJhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1Jw0KK2RxYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycNCitkcWJhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1Jw0KK2RxYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScNCitkcWJhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScNCitkcWJhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScNCitkcWJhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScNCitkcWJhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1Jw0KK2RxYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0Jw0KK2RxYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1Jw0KK2RxYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2Jw0KK2RxYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3Jw0KK2RxYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScNCitkcWJhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnDQorDQorZHFiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnDQorZHFiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnDQorZHFiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScNCitkcWJhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnDQorZHFiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnDQorZHFiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScNCitkcWJhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnDQorZHFiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnDQorZHFiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScNCitkcWJhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1Jw0KK2RxYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnDQorZHFiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1Jw0KK2RxYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnDQorZHFiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknDQorDQorLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQ0KK2RxYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcNCitkcWJhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJw0KK2RxYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJw0KK2RxYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnDQorZHFiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJw0KK2RxYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnDQorZHFiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnDQorZHFiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJw0KK2RxYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnDQorZHFiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnDQorDQorLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMNCitkcWJhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMNCitkcWJhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMg0KK2RxYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMg0KK2RxYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMg0KK2RxYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQ0KK2RxYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5DQorZHFiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwDQorZHFiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQ0KK2RxYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5DQorZHFiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkNCitkcWJhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOA0KK2RxYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2DQorZHFiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcNCitkcWJhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2DQorZHFiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYNCitkcWJhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNg0KK2RxYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1DQorZHFiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMNCitkcWJhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNA0KK2RxYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMNCitkcWJhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMw0KK2RxYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszDQorZHFiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzINCitkcWJhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMA0KK2RxYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTANCitkcWJhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwDQorZHFiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjANCitkcWJhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMA0KK2RxYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMA0KK2RxYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMA0KK2RxYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTANCitkcWJhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwDQorZHFiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTANCitkcWJhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMA0KK2RxYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMA0KK2RxYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMA0KK2RxYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTANCitkcWJhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwDQorZHFiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTANCitkcWJhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMA0KK2RxYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03DQorZHFiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkNCitkcWJhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOA0KK2RxYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkNCitkcWJhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQ0KK2RxYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05DQorZHFiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwDQorZHFiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyDQorZHFiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExDQorZHFiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTINCitkcWJhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTINCitkcWJhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTINCisNCitkcWJhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTINCitkcWJhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTINCitkcWJhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTENCitkcWJhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5DQorZHFiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwDQorZHFiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5DQorZHFiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkNCitkcWJhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQ0KK2RxYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4DQorZHFiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNg0KK2RxYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3DQorZHFiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2DQorZHFiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYNCitkcWJhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNg0KK2RxYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1DQorZHFiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMw0KK2RxYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0DQorZHFiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszDQorZHFiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMNCitkcWJhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMw0KK2RxYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyDQorZHFiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMA0KK2RxYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxDQorZHFiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwDQorZHFiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcNCitkcWJhczM4NiAgdG9FbmcgN0UwICAgLT4gNw0KK2RxYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcNCitkcWJhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43DQorZHFiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcNCitkcWJhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNw0KK2RxYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNw0KK2RxYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNw0KK2RxYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcNCitkcWJhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3DQorZHFiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcNCitkcWJhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNw0KK2RxYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNw0KK2RxYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNw0KK2RxYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03DQorZHFiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQ0KK2RxYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04DQorZHFiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05DQorZHFiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkNCitkcWJhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQ0KK2RxYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMA0KK2RxYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyDQorZHFiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExDQorZHFiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMg0KK2RxYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMg0KK2RxYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMg0KK2RxYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMw0KK2RxYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1DQorDQorLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4NCitkcWJhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMA0KK2RxYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMA0KK2RxYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45DQorZHFiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjANCitkcWJhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQ0KK2RxYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMA0KK2RxYmFzNDMyICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFiYXM0MzQgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFiYXM0MzYgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYmFzNDM4ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFiYXM0NDAgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgIFJvdW5kZWQNCitkcWJhczQ0MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZA0KK2RxYmFzNDQ0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgICBSb3VuZGVkIEluZXhhY3QNCitkcWJhczQ0NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICAgUm91bmRlZCBJbmV4YWN0DQorZHFiYXM0NDggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MCAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdA0KK2RxYmFzNDUwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzQgICBSb3VuZGVkIEluZXhhY3QNCitkcWJhczQ1MiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZA0KK2RxYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgICBSb3VuZGVkIEluZXhhY3QNCitkcWJhczQ1NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICAgUm91bmRlZCBJbmV4YWN0DQorZHFiYXM0NTggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgIFJvdW5kZWQgSW5leGFjdA0KK2RxYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkDQorZHFiYXM0NjIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgIFJvdW5kZWQgSW5leGFjdA0KK2RxYmFzNDY0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgICBSb3VuZGVkIEluZXhhY3QNCitkcWJhczQ2NiAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM2ICAgUm91bmRlZCBJbmV4YWN0DQorZHFiYXM0NjggIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQNCitkcWJhczQ3MCAgdG9TY2kgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwMDAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICAgUm91bmRlZCBJbmV4YWN0DQorZHFiYXM0NzIgIHRvU2NpIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgIFJvdW5kZWQgSW5leGFjdA0KK2RxYmFzNDc0ICB0b1NjaSAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAwMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzcgICBSb3VuZGVkIEluZXhhY3QNCisNCistLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQNCityb3VuZGluZzogIGNlaWxpbmcNCitkcWJzcjQwMSAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkcWJzcjQwMiAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDAzICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I0MDQgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIHVwDQorZHFic3I0MDUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I0MDYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQwNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDA4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBmbG9vcg0KK2RxYnNyNDEwICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RxYnNyNDExICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I0MTIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQxMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl9kb3duDQorZHFic3I0MTUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I0MTYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQxNyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDE4ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I0MTkgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZXZlbg0KK2RxYnNyNDIxICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RxYnNyNDIyICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I0MjMgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQyNCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDI1ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBkb3duDQorZHFic3I0MjYgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I0MjcgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQyOCAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDI5ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX3VwDQorZHFic3I0MzEgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I0MzIgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjQzMyAgdG9TY2kgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNDM0ICB0b1NjaSAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I0MzUgIHRvU2NpICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCistLSBuZWdhdGl2ZXMNCityb3VuZGluZzogIGNlaWxpbmcNCitkcWJzcjUwMSAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1MCAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQNCitkcWJzcjUwMiAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NDkgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTAzICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I1MDQgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIHVwDQorZHFic3I1MDUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I1MDYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUwNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTA4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBmbG9vcg0KK2RxYnNyNTEwICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RxYnNyNTExICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I1MTIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUxMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTEgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl9kb3duDQorZHFic3I1MTUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I1MTYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUxNyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTE4ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I1MTkgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZXZlbg0KK2RxYnNyNTIxICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUwICAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZA0KK2RxYnNyNTIyICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU0OSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I1MjMgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUwICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUyNCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTI1ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBkb3duDQorZHFic3I1MjYgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I1MjcgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUyOCAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTI5ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDU1MSAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX3VwDQorZHFic3I1MzEgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTAgICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkDQorZHFic3I1MzIgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTQ5ICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkcWJzcjUzMyAgdG9TY2kgLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ1NTAgICAtPiAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RxYnNyNTM0ICB0b1NjaSAtMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTIzNDY1MCAgIC0+IC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQorZHFic3I1MzUgIHRvU2NpIC0xLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMjM0NTUxICAgLT4gLTEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCisNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMNCitkcWJhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCistLSBOZWFyLXNwZWNpYWxzDQorZHFiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzDQorZHFiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KK2RxYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkcWJhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorLS0gWmVyb3MNCitkcWJhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQorZHFiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOA0KK2RxYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcNCitkcWJhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RxYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCitkcWJhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCitkcWJhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMA0KK2RxYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCitkcWJhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjANCitkcWJhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjANCitkcWJhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwDQorZHFiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KK2RxYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wDQorZHFiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KK2RxYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQorZHFiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwDQorZHFiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KK2RxYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQorZHFiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwDQorZHFiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcNCitkcWJhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOA0KK2RxYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQorDQorZHFiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMA0KK2RxYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KK2RxYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDANCitkcWJhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxDQorZHFiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMg0KK2RxYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCitkcWJhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0DQorZHFiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQ0KK2RxYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYNCitkcWJhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3DQorDQorZHFiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQorZHFiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMA0KK2RxYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzENCitkcWJhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyDQorZHFiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KK2RxYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQNCitkcWJhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1DQorZHFiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KK2RxYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcNCitkcWJhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4DQorDQorZHFiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMA0KK2RxYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzENCitkcWJhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyDQorZHFiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KK2RxYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQNCitkcWJhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1DQorZHFiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KK2RxYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcNCitkcWJhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4DQorZHFiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQ0KKw0KK2RxYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KK2RxYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCitkcWJhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMA0KK2RxYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KK2RxYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCitkcWJhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RxYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcNCitkcWJhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04DQorZHFiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KK2RxYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwDQorDQorZHFiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KK2RxYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwDQorZHFiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQorZHFiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KK2RxYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwDQorZHFiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNw0KK2RxYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgNCitkcWJhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQorZHFiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTANCitkcWJhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQ0KKw0KK2RxYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwDQorZHFiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDANCitkcWJhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMA0KK2RxYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwDQorZHFiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDANCitkcWJhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMA0KK2RxYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwDQorZHFiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTANCitkcWJhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMA0KK2RxYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wDQorDQorLS0gU3BlY2lhbHMNCitkcWJhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4NCitkcWJhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFODQorZHFiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTg0KK2RxYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4NCitkcWJhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFODQorZHFiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFODQorZHFiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQ0KK2RxYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyDQorZHFiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzDQorZHFiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNA0KK2RxYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjENCitkcWJhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMg0KK2RxYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMw0KK2RxYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQNCitkcWJhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xDQorZHFiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTINCitkcWJhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMNCitkcWJhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0DQorZHFiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTY3ODEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RxYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KK2RxYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4NCitkcWJhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFODQorZHFiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTg0KK2RxYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4NCitkcWJhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFODQorZHFiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTg0KK2RxYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4NCitkcWJhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFODQorZHFiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4NCitkcWJhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTg0KK2RxYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFODQorZHFiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4NCitkcWJhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFODQorZHFiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcNCitkcWJhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNA0KK2RxYmFzNzQ1IHRvU2NpICdzTmFOMTIzNDU2Nzg5MDEyMzQ1Njc4NzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHFiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorZHFiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RxYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RxYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RxYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RxYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RxYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RxYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KKw0KK2RxYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQ0KK2RxYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQ0KK2RxYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5DQorZHFiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkNCitkcWJhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCitkcWJhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCitkcWJhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkNCitkcWJhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkNCisNCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nDQorZHFiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RxYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4NCitkcWJhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4NCitkcWJhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFODQorZHFiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFODQorZHFiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFODQorZHFiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFODQorZHFiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFODQorZHFiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4NCitkcWJhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHFiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFODQorDQorLS0gWmVybyB0b0VuZywgZXRjLg0KK2RxYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlDQorDQorZHFiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkNCitkcWJhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNg0KK2RxYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYNCitkcWJhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCitkcWJhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMA0KK2RxYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCitkcWJhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCitkcWJhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMA0KK2RxYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjANCitkcWJhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQorZHFiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDANCitkcWJhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KK2RxYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMA0KK2RxYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wDQorZHFiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQorZHFiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KK2RxYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwDQorZHFiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQorZHFiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KK2RxYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02DQorZHFiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02DQorZHFiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQorDQorZHFiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCitkcWJhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wDQorZHFiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDANCitkcWJhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMw0KK2RxYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMNCitkcWJhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMw0KK2RxYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2DQorZHFiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNg0KK2RxYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQorZHFiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkNCisNCitkcWJhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQorZHFiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDANCitkcWJhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMw0KK2RxYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMNCitkcWJhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KK2RxYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2DQorZHFiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNg0KK2RxYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2DQorZHFiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkNCitkcWJhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5DQorDQorZHFiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDANCitkcWJhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMw0KK2RxYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMNCitkcWJhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KK2RxYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2DQorZHFiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNg0KK2RxYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2DQorZHFiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkNCitkcWJhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5DQorZHFiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCisNCitkcWJhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wDQorZHFiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCitkcWJhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCitkcWJhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwDQorZHFiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCitkcWJhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCitkcWJhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02DQorZHFiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYNCitkcWJhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KK2RxYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkNCisNCitkcWJhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KK2RxYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KK2RxYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDANCitkcWJhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KK2RxYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RxYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYNCitkcWJhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNg0KK2RxYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQorZHFiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQ0KK2RxYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05DQorDQorLS0gbG9uZyBpbnB1dCBzdHJpbmdzDQorZHFiYXM4MDEgdG9zY2kgJzAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MDIgdG9zY2kgJzAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxYmFzODAzIHRvc2NpICcwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MDQgdG9zY2kgJzAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MDUgdG9zY2kgJzAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxYmFzODA2IHRvc2NpICcwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MDcgdG9zY2kgJzAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MDggdG9zY2kgJzAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxYmFzODA5IHRvc2NpICcwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxMjM0NTY3ODkwMTIzNDU2DQorDQorZHFiYXM4MTEgdG9zY2kgJzAuMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4xMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MTIgdG9zY2kgJzAuMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NTYNCitkcWJhczgxMyB0b3NjaSAnMC4wMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MTQgdG9zY2kgJzAuMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MTUgdG9zY2kgJzAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NTYNCitkcWJhczgxNiB0b3NjaSAnMC4wMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDU2DQorZHFiYXM4MTcgdG9zY2kgJzAuMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTcNCitkcWJhczgxOCB0b3NjaSAnMC4wMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTgNCitkcWJhczgxOSB0b3NjaSAnMC4wMDAwMDAwMDEyMzQ1Njc4OTAxMjM0NTYnIC0+IDEuMjM0NTY3ODkwMTIzNDU2RS05DQorZHFiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2Nzg5MDEyMzQ1NicgLT4gMS4yMzQ1Njc4OTAxMjM0NTZFLTEwDQorDQorZHFiYXM4MjEgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzcgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM4MjIgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMScgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzM4IEluZXhhY3QgUm91bmRlZA0KK2RxYmFzODIzIHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrMzkgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM4MjQgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzJyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDAgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM4MjUgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNCcgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQxIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzODI2IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDIgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM4MjcgdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDMgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM4MjggdG9zY2kgJzEyMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTY3ODkwMTIzNDU2NycgLT4gMS4yMzQ1Njc4OTEyMzQ1Njc4OTAxMjM0NTY3ODAxMjM0NTdFKzQ0IEluZXhhY3QgUm91bmRlZA0KK2RxYmFzODI5IHRvc2NpICcxMjM0NTY3ODkxMjM0NTY3ODkwMTIzNDU2NzgwMTIzNDU2Nzg5MDEyMzQ1Njc4JyAtPiAxLjIzNDU2Nzg5MTIzNDU2Nzg5MDEyMzQ1Njc4MDEyMzQ1N0UrNDUgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3Vibm9ybWFscyBhbmQgb3ZlcmZsb3dzDQorZHFiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTA3IHRvU2NpICc5OTllOTk5OTk5OTk5JyAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkwOCB0b1NjaSAnMC45ZS05OTk5OTk5OTknICAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJhczkwOSB0b1NjaSAnMC4wOWUtOTk5OTk5OTk5JyAgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTEzIHRvU2NpICc5OWUtOTk5OTk5OTk5OScgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkxNSB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OScgICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJhczkxNyB0b1NjaSAnN2UxMDAwMDAwMDAwJyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmVnYXRpdmVzIHRoZSBzYW1lDQorZHFiYXM5MTggdG9TY2kgJy05OWU5OTk5OTk5OTknICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkxOSB0b1NjaSAnLTk5OWU5OTk5OTk5OTknICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJhczkyMSB0b1NjaSAnLTAuMDllLTk5OTk5OTk5OScgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXM5MjQgdG9TY2kgJy0wLjllOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkyNSB0b1NjaSAnLTk5ZS05OTk5OTk5OTk5JyAgICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXM5MjYgdG9TY2kgJy0xMTFlOTk5OTk5OTk5OScgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczkyNyB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTknICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gb3ZlcmZsb3cgcmVzdWx0cyBhdCBkaWZmZXJlbnQgcm91bmRpbmcgbW9kZXMNCityb3VuZGluZzogIGNlaWxpbmcNCitkcWJhczkzMCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTMxIHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICB1cA0KK2RxYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogIGRvd24NCitkcWJhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBmbG9vcg0KK2RxYmFzOTM2IHRvU2NpICAnN2UxMDAwMCcgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHFiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogIGhhbGZfdXANCitkcWJhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitkcWJhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2Rvd24NCitkcWJhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RxYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCisNCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMA0KK2RxYmVtNDAwIHRvU2NpICAxLjAwMDBFLTM4MyAgICAgLT4gMS4wMDAwRS0zODMNCitkcWJlbTQwMSB0b1NjaSAgMC4xRS02MTcyICAgICAgICAtPiAxRS02MTczICAgICAgIFN1Ym5vcm1hbA0KK2RxYmVtNDAyIHRvU2NpICAwLjEwMDBFLTYxNzIgICAgIC0+IDEuMDAwRS02MTczICAgU3Vibm9ybWFsDQorZHFiZW00MDMgdG9TY2kgIDAuMDEwMEUtNjE3MiAgICAgLT4gMS4wMEUtNjE3NCAgICBTdWJub3JtYWwNCitkcWJlbTQwNCB0b1NjaSAgMC4wMDEwRS02MTcyICAgICAtPiAxLjBFLTYxNzUgICAgIFN1Ym5vcm1hbA0KK2RxYmVtNDA1IHRvU2NpICAwLjAwMDFFLTYxNzIgICAgIC0+IDFFLTYxNzYgICAgICAgU3Vibm9ybWFsDQorZHFiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTYxNzIgICAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkcWJlbTQwNyB0b1NjaSAgMC4wMDAxM0UtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDA4IHRvU2NpICAwLjAwMDE1RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTYxNzIgICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQxMCB0b1NjaSAgMC4wMDAyM0UtNjE3MiAgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDExIHRvU2NpICAwLjAwMDI1RS02MTcyICAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTYxNzIgICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQxMyB0b1NjaSAgMC4wMDAxNDlFLTYxNzIgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDE0IHRvU2NpICAwLjAwMDE1MEUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS02MTcyICAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQxNiB0b1NjaSAgMC4wMDAyNDlFLTYxNzIgICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDE3IHRvU2NpICAwLjAwMDI1MEUtNjE3MiAgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MTggdG9TY2kgIDAuMDAwMjUxRS02MTcyICAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQxOSB0b1NjaSAgMC4wMDAwOUUtNjE3MiAgICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDIwIHRvU2NpICAwLjAwMDA1RS02MTcyICAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJlbTQyMSB0b1NjaSAgMC4wMDAwM0UtNjE3MiAgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiZW00MjIgdG9TY2kgIDAuMDAwMDA5RS02MTcyICAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxYmVtNDIzIHRvU2NpICAwLjAwMDAwNUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTYxNzIgICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZHFiZW00MjUgdG9TY2kgIDAuMDAxMDQ5RS02MTcyICAgLT4gMS4wRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTYxNzIgICAtPiAxLjBFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDI3IHRvU2NpICAwLjAwMTA1MUUtNjE3MiAgIC0+IDEuMUUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MjggdG9TY2kgIDAuMDAxMTQ5RS02MTcyICAgLT4gMS4xRS02MTc1ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTYxNzIgICAtPiAxLjJFLTYxNzUgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDMwIHRvU2NpICAwLjAwMTE1MUUtNjE3MiAgIC0+IDEuMkUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZHFiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS02MTcyICAgLT4gMS4wMEUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTYxNzIgICAtPiAxLjAwRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDM0IHRvU2NpICAwLjAxMDA1MUUtNjE3MiAgIC0+IDEuMDFFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS02MTcyICAgLT4gMS4wMUUtNjE3NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTYxNzIgICAtPiAxLjAyRS02MTc0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDM3IHRvU2NpICAwLjAxMDE1MUUtNjE3MiAgIC0+IDEuMDJFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZHFiZW00NDAgdG9TY2kgIDAuMTAxMDNFLTYxNzIgICAgLT4gMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtNjE3MiAgICAtPiAxLjAxMEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDQyIHRvU2NpICAwLjEwMTA3RS02MTcyICAgIC0+IDEuMDExRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NDMgdG9TY2kgIDAuMTAxMTNFLTYxNzIgICAgLT4gMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ0NCB0b1NjaSAgMC4xMDExNUUtNjE3MiAgICAtPiAxLjAxMkUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDQ1IHRvU2NpICAwLjEwMTE3RS02MTcyICAgIC0+IDEuMDEyRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZHFiZW00NTAgdG9TY2kgIDEuMTA3MzBFLTYxNzMgICAtPiAxLjEwN0UtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDUxIHRvU2NpICAxLjEwNzUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ1MiB0b1NjaSAgMS4xMDc3MEUtNjE3MyAgIC0+IDEuMTA4RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NTMgdG9TY2kgIDEuMTA4MzBFLTYxNzMgICAtPiAxLjEwOEUtNjE3MyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxYmVtNDU0IHRvU2NpICAxLjEwODUwRS02MTczICAgLT4gMS4xMDhFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ1NSB0b1NjaSAgMS4xMDg3MEUtNjE3MyAgIC0+IDEuMTA5RS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbWFrZSBzdXJlIHNpZ24gT0sNCitkcWJlbTQ1NiB0b1NjaSAgLTAuMTAxMDNFLTYxNzIgICAtPiAtMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTYxNzIgICAtPiAtMS4wMTBFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ1OCB0b1NjaSAgLTAuMTAxMDdFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ1OSB0b1NjaSAgLTAuMTAxMTNFLTYxNzIgICAtPiAtMS4wMTFFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWJlbTQ2MSB0b1NjaSAgLTAuMTAxMTdFLTYxNzIgICAtPiAtMS4wMTJFLTYxNzMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAnOTk5cycgY2FzZXMNCitkcWJlbTQ2NCB0b1NjaSAgOTk5OTk5RS02MTczICAgICAgICAgLT4gOS45OTk5OUUtNjE2OCBTdWJub3JtYWwNCitkcWJlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtNjE3MiAgICAgICAgLT4gOS45OTk5MEUtNjE2OCBTdWJub3JtYWwNCitkcWJlbTQ2NiB0b1NjaSAgOTk5OTkuRS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY4ICBTdWJub3JtYWwNCitkcWJlbTQ2NyB0b1NjaSAgOTk5OS45RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTY5ICBTdWJub3JtYWwNCitkcWJlbTQ2OCB0b1NjaSAgOTk5Ljk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcwICBTdWJub3JtYWwNCitkcWJlbTQ2OSB0b1NjaSAgOTkuOTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcxICBTdWJub3JtYWwNCitkcWJlbTQ3MCB0b1NjaSAgOS45OTk5RS02MTcyICAgICAgICAgLT4gOS45OTk5RS02MTcyICBTdWJub3JtYWwNCitkcWJlbTQ3MSB0b1NjaSAgMC45OTk5OUUtNjE3MiAgICAgICAgLT4gMS4wMDAwRS02MTcyIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NzIgdG9TY2kgIDAuMDk5OTk5RS02MTcyICAgICAgIC0+IDEuMDAwRS02MTczIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtNjE3MiAgICAgIC0+IDEuMDBFLTYxNzQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NzQgdG9TY2kgIDAuMDAwOTk5OTlFLTYxNzIgICAgIC0+IDEuMEUtNjE3NSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NzUgdG9TY2kgIDAuMDAwMDk5OTk5RS02MTcyICAgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtNjE3MiAgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWJlbTQ3NyB0b1NjaSAgMC4wMDAwMDA5OTk5OUUtNjE3MiAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxYmVtNDc4IHRvU2NpICAwLjAwMDAwMDA5OTk5OUUtNjE3MiAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gRXhwb25lbnRzIHdpdGggaW5zaWduaWZpY2FudCBsZWFkaW5nIHplcm9zDQorZHFiYXMxMDAxIHRvU2NpICAxZTk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczEwMDMgdG9TY2kgIDFlMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDA0IHRvU2NpICAxZTAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWJhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYmFzMTAwNiB0b1NjaSAgMWUwMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMDA3IHRvU2NpICAxZS05OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTYxNzYgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXMxMDEwIHRvU2NpICAxZS0wMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCitkcWJhczEwNDEgdG9TY2kgICAgIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjQ0NEUtNjE0NCAtPiAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNEUtNjE0NCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxYmFzMTA0MiB0b1NjaSAgICAgMS4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTUyNDQ1RS02MTQ0IC0+ICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0RS02MTQ0IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFiYXMxMDQzIHRvU2NpICAgICAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExNTI0NDZFLTYxNDQgLT4gIDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTE1MjRFLTYxNDQgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBjbGFtcGVkIHplcm9zIFtzZWUgYWxzbyBjbGFtcC5kZWNUZXN0XQ0KK2RxYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrNjExMSBDbGFtcGVkDQorZHFiYXMxMDc2IHRvU2NpICAgMGUtMTAwMDAgIC0+ICAwRS02MTc2ICBDbGFtcGVkDQorZHFiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs2MTExIENsYW1wZWQNCitkcWJhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTYxNzYgIENsYW1wZWQNCisNCistLSBleHRyZW1lIHZhbHVlcyBmcm9tIG5leHQtd2lkZXINCitkcWJhczExMDEgdG9TY2kgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFiYXMxMTAyIHRvU2NpIC0xRS0xNTcyODYzIC0+IC0wRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitkcWJhczExMDMgdG9TY2kgLTFFLTE1NzI5MzIgLT4gLTBFLTYxNzYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2RxYmFzMTEwNCB0b1NjaSAtMCAtPiAtMA0KK2RxYmFzMTEwNSB0b1NjaSArMCAtPiAgMA0KK2RxYmFzMTEwNiB0b1NjaSArMUUtMTU3MjkzMiAtPiAgMEUtNjE3NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZHFiYXMxMTA3IHRvU2NpICsxRS0xNTcyODYzIC0+ICAwRS02MTc2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitkcWJhczExMDggdG9TY2kgKzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMTU3Mjg2NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2Fub25pY2FsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdAppbmRleCAwMDZkYjg1Li4zZGRmNmVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDYW5vbmljYWwuZGVjVGVzdApAQCAtMSwzNzIgKzEsMzcyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxQ2Fub25pY2FsLmRlY1Rlc3QgLS0gdGVzdCBkZWNRdWFkIGNhbm9uaWNhbCByZXN1bHRzICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBmaWxlIHRlc3RzIHRoYXQgY29weSBvcGVyYXRpb25zIGxlYXZlIHVuY2Fub25pY2FsIG9wZXJhbmRzCi0tLSB1bmNoYW5nZWQsIGFuZCB2aWNlIHZlcnNhCi0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToKLS0tICAgYT0xLDIsMwotLS0gICBiPTYsNyxlLGYKLS0tICAgYz1lLGYKLQotLS0gYXNzZXJ0IHNvbWUgc3RhbmRhcmQgKGNhbm9uaWNhbCkgdmFsdWVzOyB0aGlzIHRlc3RzIHRoYXQgRnJvbVN0cmluZwotLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pCi1kcWNhbjAwMSBhcHBseSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjAwMiBhcHBseSAwICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxY2FuMDA0IGFwcGx5IC0xICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcWNhbjAwNSBhcHBseSBJbmZpbml0eSAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMDA3IGFwcGx5IC1OYU4gICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjAwOCBhcHBseSAtc05hTiAgICAgICAgICAgICAgICAgIC0+ICNmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4wMDkgYXBwbHkgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjAxMCBhcHBseSBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRlY2FuMDExIGFwcGx5ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2QwCi1kcWNhbjAxMyBhcHBseSA5Ljk5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmYKLQotLS0gQmFzZSB0ZXN0cyBmb3IgY2Fub25pY2FsIGVuY29kaW5ncyAoaW5kaXZpZHVhbCBvcGVyYXRvcgotLS0gcHJvcGFnYXRpb24gaXMgdGVzdGVkIGxhdGVyKQotCi0tLSBGaW5pdGVzOiBkZWNsZXRzIGluIGNvZWZmaWNpZW50Ci1kcWNhbjAyMSBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDIyIGNhbm9uaWNhbCAgIzc3ZmZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wMjMgY2Fub25pY2FsICAjNzdmZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjAyNCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDI1IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wMjYgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjAyNyBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDI4IGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wMjkgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjAzMCBjYW5vbmljYWwgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDMxIGNhbm9uaWNhbCAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wMzIgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0KLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kcWNhbjA2MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDYyIGNhbm9uaWNhbCAgIzdjMDAwZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wNjMgY2Fub25pY2FsICAjN2MwMDBmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA2NCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDY1IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wNjYgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA2NyBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDY4IGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wNjkgY2Fub25pY2FsICAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA3MCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDcxIGNhbm9uaWNhbCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotLS0gTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kcWNhbjA4MSBjYW5vbmljYWwgICM3ZDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDgyIGNhbm9uaWNhbCAgIzdjODAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wODMgY2Fub25pY2FsICAjN2M0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA4NCBjYW5vbmljYWwgICM3YzIwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDg1IGNhbm9uaWNhbCAgIzdjMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wODYgY2Fub25pY2FsICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA4NyBjYW5vbmljYWwgICM3YzA0MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDg4IGNhbm9uaWNhbCAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4wODkgY2Fub25pY2FsICAjN2MwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjA5MCBjYW5vbmljYWwgICM3YzAwOGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMDkxIGNhbm9uaWNhbCAgIzdjMDA0ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKLWRxY2FuMTAxIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMDIgY2Fub25pY2FsICAjN2UwMDBmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEwMyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTA0IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMDUgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEwNiBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTA3IGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMDggY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEwOSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTAwIGNhbm9uaWNhbCAgIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMTEgY2Fub25pY2FsICAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kcWNhbjEyMSBjYW5vbmljYWwgICM3ZjAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTIyIGNhbm9uaWNhbCAgIzdlODAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMjMgY2Fub25pY2FsICAjN2U0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEyNCBjYW5vbmljYWwgICM3ZTIwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTI1IGNhbm9uaWNhbCAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMjYgY2Fub25pY2FsICAjN2UwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEyNyBjYW5vbmljYWwgICM3ZTA0MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTI4IGNhbm9uaWNhbCAgIzdlMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4xMjkgY2Fub25pY2FsICAjN2UwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjEzMCBjYW5vbmljYWwgICM3ZTAwOGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMTMxIGNhbm9uaWNhbCAgIzdlMDA0ZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kcWNhbjEzNyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTM4IGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xMzkgY2Fub25pY2FsICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE0MCBjYW5vbmljYWwgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTQxIGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNDIgY2Fub25pY2FsICAjNzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE0MyBjYW5vbmljYWwgICM3ODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTQ0IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNDUgY2Fub25pY2FsICAjNzgwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE0NiBjYW5vbmljYWwgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNDggY2Fub25pY2FsICAjNzgwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE0OSBjYW5vbmljYWwgICM3ODAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cyAoZmlyc3QsIGxhc3QsIGFuZCBhIGZldyBvdGhlcnMpCi1kcWNhbjE1MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTUxIGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNTIgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE1MyBjYW5vbmljYWwgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTU0IGNhbm9uaWNhbCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNTUgY2Fub25pY2FsICAjNzgwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE1NiBjYW5vbmljYWwgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTU3IGNhbm9uaWNhbCAgIzc4MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNTggY2Fub25pY2FsICAjNzgwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE1OSBjYW5vbmljYWwgICM3ODAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTYwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNjEgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE2MiBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTYzIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNjQgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE2NSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTY2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNjcgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE2OCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTY5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNzAgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE3MSBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTcyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNzMgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE3NCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTc1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNzYgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE3NyBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTc4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4xNzkgY2Fub25pY2FsICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjE4MCBjYW5vbmljYWwgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMTgxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotCi0KLS0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8KLS0tIGNhbm9uaWNhbGl6ZSBwcm9wYWdhdGVkIG9wZXJhbmRzCi0KLS0tLS0tIEFkZDoKLS0tIEZpbml0ZXM6IG5ldXRyYWwgMAotZHFjYW4yMDIgYWRkICAwRSs2MTQ0ICM3N2ZmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4yMDMgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAwRSs2MTQ0IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotLS0gdGlueSB6ZXJvCi1kcWNhbjIwNCBhZGQgIDBFLTYxNzYgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKLWRxY2FuMjA1IGFkZCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZAotLS0gdGlueSBub24gemVybwotZHFjYW4yMDYgYWRkIC0xRS02MTc2ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZiAgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkCi1kcWNhbjIwNyBhZGQgICAgICAgICAgIzc3ZmZjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNmY2ZmIC0xRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kcWNhbjIxMSBhZGQgIDAgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW4yMTIgYWRkICAgICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZHFjYW4yMTMgYWRkICAwICAjN2M0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMjE0IGFkZCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKLWRxY2FuMjE1IGFkZCAgMCAgIzdlMDAwZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgotZHFjYW4yMTYgYWRkICAgICAjN2UwMDNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kcWNhbjIxNyBhZGQgIDAgICM3ZTUwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY2FuMjE4IGFkZCAgICAgIzdlMGUwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgotLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cwotZHFjYW4yMjAgYWRkICAwICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMjIxIGFkZCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kcWNhbjIyMiBhZGQgIDAgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4yMjMgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMjI0IGFkZCAgMCAgIzc4MDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjIyNSBhZGQgICAgICM3ODAwMDAwMDAwMDBmMDAwMDAwMDAwMDAwMDAwMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4yMjYgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMjI3IGFkZCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLS0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdCi0KLS0tLS0tIENvbXBhcmU6Ci1kcWNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcWNhbjIzMiBjb21wYXJlIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjIzMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcWNhbjIzNCBjb21wYXJlICAjN2MwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuMjM1IGNvbXBhcmUgICM3ZTAwNGZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYzZmNmZiAgICAgLTEwMDAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLS0tLSBDb21wYXJlU2lnOgotZHFjYW4yNDEgY29tcGFyZXNpZyAtSW5mICAgMSAgICAgLT4gICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFjYW4yNDIgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFjYW4yNDQgY29tcGFyZXNpZyAgIzdjNDAwZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLTEwMDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uCi1kcWNhbjI0NSBjb21wYXJlc2lnICAjN2UwNTBmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmM2ZjZmYgICAtMTAwMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24KLQotLS0tLS0gQ29weTogW2RvZXMgbm90IHVzdWFsbHkgY2Fub25pY2FsaXplXQotLS0gZmluaXRlcwotZHFjYW4yNTAgY29weSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZgotZHFjYW4yNTEgY29weSAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmIC0+ICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgotLS0gTmFOcwotZHFjYW4yNTIgY29weSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgotZHFjYW4yNTMgY29weSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotLS0gc05hTgotZHFjYW4yNTQgY29weSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgotZHFjYW4yNTUgY29weSAgIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+ICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotLS0gSW5mCi1kcWNhbjI1OCBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjI1OSBjb3B5ICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgLT4gIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwCi0KLS0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KLS0tIGZpbml0ZXMKLWRxY2FuMjYwIGNvcHlhYnMgICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZiAtPiAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYKLWRxY2FuMjYxIGNvcHlhYnMgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYKLS0tIE5hTnMKLWRxY2FuMjYyIGNvcHlhYnMgICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKLWRxY2FuMjYzIGNvcHlhYnMgICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIHNOYU4KLWRxY2FuMjY0IGNvcHlhYnMgICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtPiAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKLWRxY2FuMjY1IGNvcHlhYnMgICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIEluZgotZHFjYW4yNjggY29weWFicyAgI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4yNjkgY29weWFicyAgI2Y4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDcwMDcwMDcwMDAwMDAwMDAwMAotCi0tLS0tLSBDb3B5TmVnYXRlOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdCi0tLSBmaW5pdGVzCi1kcWNhbjI3MCBjb3B5bmVnYXRlICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCi1kcWNhbjI3MSBjb3B5bmVnYXRlICAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzZlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmCi0tLSBOYU5zCi1kcWNhbjI3MiBjb3B5bmVnYXRlICAjN2MwMDBmZjNmY2ZmZmZmZmZmZmZmZjNmY2ZmM2ZjZmYgLT4gI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmCi1kcWNhbjI3MyBjb3B5bmVnYXRlICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gI2ZjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBzTmFOCi1kcWNhbjI3NCBjb3B5bmVnYXRlICAjN2UwMDNmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYgLT4gI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmCi1kcWNhbjI3NSBjb3B5bmVnYXRlICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gI2ZlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBJbmYKLWRxY2FuMjc4IGNvcHluZWdhdGUgICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMjc5IGNvcHluZWdhdGUgICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMCAtPiAjZjgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAKLQotLS0tLS0gQ29weVNpZ246IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0KLS0tIGZpbml0ZXMKLWRxY2FuMjgwIGNvcHlzaWduICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLTEgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmCi1kcWNhbjI4MSBjb3B5c2lnbiAgI2VlMDgwZmYzZmNmZjNmZmZmM2ZjZmYzZmZmZjNmY2ZmICAxIC0+ICM2ZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZgotLS0gTmFOcwotZHFjYW4yODIgY29weXNpZ24gICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtMSAtPiAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYKLWRxY2FuMjgzIGNvcHlzaWduICAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBzTmFOCi1kcWNhbjI4NCBjb3B5c2lnbiAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZgotZHFjYW4yODUgY29weXNpZ24gICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIEluZgotZHFjYW4yODggY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMjg5IGNvcHlzaWduICAjNzgwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAgIDEgLT4gIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwCi0KLS0tLS0tIE11bHRpcGx5OgotLS0gRmluaXRlczogbmV1dHJhbCAwCi1kcWNhbjMwMiBtdWx0aXBseSAgMSAgIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMwMyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwCi0tLSBuZWdhdGl2ZQotZHFjYW4zMDYgbXVsdGlwbHkgLTEgICM3N2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICNmN2ZmZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4zMDcgbXVsdGlwbHkgICAgICM3N2ZjZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAtMSAgICAgICAgICAgIC0+ICNmN2ZjY2ZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAotLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQKLWRxY2FuMzExIG11bHRpcGx5ICAxICAjN2MwM2ZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAKLS0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQotZHFjYW4zMTMgbXVsdGlwbHkgIDEgICM3YzQwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAotZHFjYW4zMTQgbXVsdGlwbHkgICAgICM3YzQwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMAotLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kcWNhbjMxNSBtdWx0aXBseSAgMSAgIzdlMDBmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAwZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uCi1kcWNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAwZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kcWNhbjMxNyBtdWx0aXBseSAgMSAgIzdlODBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uCi1kcWNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uCi0tLSBJbmY6IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kcWNhbjMyMCBtdWx0aXBseSAgMSAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyMSBtdWx0aXBseSAgICAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBJbmY6IGNvZWZmaWNpZW50IGNvbnRpbnVhdGlvbiBiaXRzCi1kcWNhbjMyMiBtdWx0aXBseSAgMSAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyNCBtdWx0aXBseSAgMSAgIzc4MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyNSBtdWx0aXBseSAgICAgIzc4MDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWNhbjMyNyBtdWx0aXBseSAgICAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLS0tLS0tIFF1YW50aXplOgotZHFjYW40MDEgcXVhbnRpemUgICNlZTA4MGZmM2ZjZmYzZmNmZjNmZmZmZmZmZmYzZmNmZiAwICAgIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW40MDIgcXVhbnRpemUgICNlZTA4MGZmM2ZmZmZmZmZmZmZmY2ZmM2ZjZmYzZmNmZiAwICAgIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW40MDMgcXVhbnRpemUgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW40MDQgcXVhbnRpemUgICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtSW5mIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW40MTAgcXVhbnRpemUgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW40MTEgcXVhbnRpemUgICNmYzAwMGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW40MTIgcXVhbnRpemUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotZHFjYW40MTMgcXVhbnRpemUgICNmZTAwMGZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYzZmNmZiAgMSAgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLS0tLSBTdWJ0cmFjdDoKLS0tIEZpbml0ZXM6IG5ldXRyYWwgMAotZHFjYW41MDIgc3VidHJhY3QgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjUwMyBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgMEUrNjE0NCAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIHRpbnkgemVybwotZHFjYW41MDQgc3VidHJhY3QgIDBFLTYxNzYgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQKLWRxY2FuNTA1IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAwRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBSb3VuZGVkCi0tLSB0aW55IG5vbiB6ZXJvCi1kcWNhbjUwNiBzdWJ0cmFjdCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZAotZHFjYW41MDcgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNmY2ZmIC0xRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQKLS0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkCi1kcWNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjUxMiBzdWJ0cmFjdCAgICAgIzdjMDAwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0tLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0KLWRxY2FuNTEzIHN1YnRyYWN0ICAwICAjN2M0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuNTE0IHN1YnRyYWN0ICAgICAjN2MwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLS0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZAotZHFjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY2FuNTE2IHN1YnRyYWN0ICAgICAjN2UwMDNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdCi1kcWNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbgotZHFjYW41MTggc3VidHJhY3QgICAgICM3ZTBlMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLS0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMKLWRxY2FuNTIwIHN1YnRyYWN0ICAwICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTIxIHN1YnRyYWN0ICAgICAjNzg2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMKLWRxY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTIzIHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTI0IHN1YnRyYWN0ICAwICAjNzgwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTI2IHN1YnRyYWN0ICAwICAjNzgwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNTI3IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotLS0tLS0gVG9JbnRlZ3JhbDoKLWRxY2FuNjAxIHRvaW50ZWdyYWx4ICAjNmUwODBmZjNmZGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZHFjYW42MDIgdG9pbnRlZ3JhbHggICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjYwMyB0b2ludGVncmFseCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxY2FuNjA0IHRvaW50ZWdyYWx4ICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFjYW42MTQgdG9pbnRlZ3JhbHggICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kcWNhbjYxNSB0b2ludGVncmFseCAgI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmICAtPiAjZmMwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLWRxY2FuNjE2IHRvaW50ZWdyYWx4ICAjN2UwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY2FuNjE3IHRvaW50ZWdyYWx4ICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmRmZjNmY2ZmM2ZjZmYgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24KLS0tIHVuY2Fub25pY2FsIDM5OTksIDM5Ljk5LCAzLjk5LCAwLjM5OSwgICAgICAgICAgICAgICAgICBhbmQgbmVnYXRpdmVzCi1kcWNhbjYxOCB0b2ludGVncmFseCAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBjZmYKLWRxY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkCi1kcWNhbjYyMCB0b2ludGVncmFseCAgIzIyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIEluZXhhY3QgUm91bmRlZAotZHFjYW42MjEgdG9pbnRlZ3JhbHggICMyMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWRxY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZgotZHFjYW42MjMgdG9pbnRlZ3JhbHggICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwICBJbmV4YWN0IFJvdW5kZWQKLWRxY2FuNjI0IHRvaW50ZWdyYWx4ICAjYTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5leGFjdCBSb3VuZGVkCi1kcWNhbjYyNSB0b2ludGVncmFseCAgI2EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAotCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFDYW5vbmljYWwuZGVjVGVzdCAtLSB0ZXN0IGRlY1F1YWQgY2Fub25pY2FsIHJlc3VsdHMgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgZmlsZSB0ZXN0cyB0aGF0IGNvcHkgb3BlcmF0aW9ucyBsZWF2ZSB1bmNhbm9uaWNhbCBvcGVyYW5kcw0KKy0tIHVuY2hhbmdlZCwgYW5kIHZpY2UgdmVyc2ENCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBVbmNhbm9uaWNhbCBkZWNsZXRzIGFyZTogYWJjLCB3aGVyZToNCistLSAgIGE9MSwyLDMNCistLSAgIGI9Niw3LGUsZg0KKy0tICAgYz1lLGYNCisNCistLSBhc3NlcnQgc29tZSBzdGFuZGFyZCAoY2Fub25pY2FsKSB2YWx1ZXM7IHRoaXMgdGVzdHMgdGhhdCBGcm9tU3RyaW5nDQorLS0gcHJvZHVjZXMgY2Fub25pY2FsIHJlc3VsdHMgKG1hbnkgbW9yZSBpbiBkZWNpbWFsTk4pDQorZHFjYW4wMDEgYXBwbHkgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KK2RxY2FuMDAyIGFwcGx5IDAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4wMDMgYXBwbHkgMSAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcWNhbjAwNCBhcHBseSAtMSAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxY2FuMDA1IGFwcGx5IEluZmluaXR5ICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4wMDYgYXBwbHkgLUluZmluaXR5ICAgICAgICAgICAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjAwNyBhcHBseSAtTmFOICAgICAgICAgICAgICAgICAgIC0+ICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMDA4IGFwcGx5IC1zTmFOICAgICAgICAgICAgICAgICAgLT4gI2ZlMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4wMDkgYXBwbHkgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMTAgYXBwbHkgc05hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZGVjYW4wMTEgYXBwbHkgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMTIgYXBwbHkgNy41MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2QwDQorZHFjYW4wMTMgYXBwbHkgOS45OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmDQorDQorLS0gQmFzZSB0ZXN0cyBmb3IgY2Fub25pY2FsIGVuY29kaW5ncyAoaW5kaXZpZHVhbCBvcGVyYXRvcg0KKy0tIHByb3BhZ2F0aW9uIGlzIHRlc3RlZCBsYXRlcikNCisNCistLSBGaW5pdGVzOiBkZWNsZXRzIGluIGNvZWZmaWNpZW50DQorZHFjYW4wMjEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjIgY2Fub25pY2FsICAjNzdmZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjMgY2Fub25pY2FsICAjNzdmZmNmZmZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjQgY2Fub25pY2FsICAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjUgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjYgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjcgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjggY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMjkgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMzAgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMzEgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4wMzIgY2Fub25pY2FsICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorDQorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCitkcWNhbjA2MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2MiBjYW5vbmljYWwgICM3YzAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2MyBjYW5vbmljYWwgICM3YzAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2NCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2NSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2NiBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2NyBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2OCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA2OSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA3MCBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA3MSBjYW5vbmljYWwgICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkcWNhbjA4MSBjYW5vbmljYWwgICM3ZDAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4MiBjYW5vbmljYWwgICM3YzgwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4MyBjYW5vbmljYWwgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4NCBjYW5vbmljYWwgICM3YzIwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4NSBjYW5vbmljYWwgICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4NiBjYW5vbmljYWwgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4NyBjYW5vbmljYWwgICM3YzA0MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4OCBjYW5vbmljYWwgICM3YzAyMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA4OSBjYW5vbmljYWwgICM3YzAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA5MCBjYW5vbmljYWwgICM3YzAwOGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjA5MSBjYW5vbmljYWwgICM3YzAwNGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCisNCistLSBzTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCitkcWNhbjEwMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwMiBjYW5vbmljYWwgICM3ZTAwMGZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwMyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwNCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwNSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwNiBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZmZmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwNyBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmZmZmM2ZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwOCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwOSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjEwMCBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmZmZmNmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjExMSBjYW5vbmljYWwgICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZiAtPiAjN2UwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBzTmFOOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cyBbZXhjbHVkaW5nIHNOYU4gc2VsZWN0b3JdDQorZHFjYW4xMjEgY2Fub25pY2FsICAjN2YwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjIgY2Fub25pY2FsICAjN2U4MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjMgY2Fub25pY2FsICAjN2U0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjQgY2Fub25pY2FsICAjN2UyMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjUgY2Fub25pY2FsICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjYgY2Fub25pY2FsICAjN2UwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjcgY2Fub25pY2FsICAjN2UwNDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjggY2Fub25pY2FsICAjN2UwMjBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMjkgY2Fub25pY2FsICAjN2UwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMzAgY2Fub25pY2FsICAjN2UwMDhmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4xMzEgY2Fub25pY2FsICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gIzdlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorDQorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuMTM3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTM4IGNhbm9uaWNhbCAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTM5IGNhbm9uaWNhbCAgIzdhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQwIGNhbm9uaWNhbCAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQxIGNhbm9uaWNhbCAgIzc4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQyIGNhbm9uaWNhbCAgIzc4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQzIGNhbm9uaWNhbCAgIzc4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ0IGNhbm9uaWNhbCAgIzc4MDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ1IGNhbm9uaWNhbCAgIzc4MDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ2IGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ3IGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ4IGNhbm9uaWNhbCAgIzc4MDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTQ5IGNhbm9uaWNhbCAgIzc4MDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tIEluZjogY29lZmZpY2llbnQgY29udGludWF0aW9uIGJpdHMgKGZpcnN0LCBsYXN0LCBhbmQgYSBmZXcgb3RoZXJzKQ0KK2RxY2FuMTUwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTUxIGNhbm9uaWNhbCAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTUyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTUzIGNhbm9uaWNhbCAgIzc4MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU0IGNhbm9uaWNhbCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU1IGNhbm9uaWNhbCAgIzc4MDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU2IGNhbm9uaWNhbCAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU3IGNhbm9uaWNhbCAgIzc4MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU4IGNhbm9uaWNhbCAgIzc4MDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTU5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTYwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTYxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTYyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTYzIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTY5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTcwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTcxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTcyIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTczIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc0IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc1IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc2IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc3IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc4IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTc5IGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTgwIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMTgxIGNhbm9uaWNhbCAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKw0KKy0tIE5vdyB0aGUgb3BlcmF0b3JzIC0tIHRyeWluZyB0byBjaGVjayBwYXRocyB0aGF0IG1pZ2h0IGZhaWwgdG8NCistLSBjYW5vbmljYWxpemUgcHJvcGFnYXRlZCBvcGVyYW5kcw0KKw0KKy0tLS0tIEFkZDoNCistLSBGaW5pdGVzOiBuZXV0cmFsIDANCitkcWNhbjIwMiBhZGQgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4yMDMgYWRkICAgICAgICAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYzZmNmZiAwRSs2MTQ0IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KKy0tIHRpbnkgemVybw0KK2RxY2FuMjA0IGFkZCAgMEUtNjE3NiAjNzdmZmNmZjNmZmZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAgICAgICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KK2RxY2FuMjA1IGFkZCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KKy0tIHRpbnkgbm9uIHplcm8NCitkcWNhbjIwNiBhZGQgLTFFLTYxNzYgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZmZmZmZmICAgICAgICAgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCitkcWNhbjIwNyBhZGQgICAgICAgICAgIzc3ZmZjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZjNmY2ZmIC0xRS02MTc2IC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbmV4YWN0IFJvdW5kZWQNCistLSBOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RxY2FuMjExIGFkZCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW4yMTIgYWRkICAgICAjN2MwMDBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkcWNhbjIxMyBhZGQgIDAgICM3YzQwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KK2RxY2FuMjE0IGFkZCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQorZHFjYW4yMTUgYWRkICAwICAjN2UwMDBmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQorZHFjYW4yMTYgYWRkICAgICAjN2UwMDNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KK2RxY2FuMjE3IGFkZCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY2FuMjE4IGFkZCAgICAgIzdlMGUwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIEluZjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMNCitkcWNhbjIyMCBhZGQgIDAgICM3ODAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMjIxIGFkZCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuMjIyIGFkZCAgMCAgIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yMjMgYWRkICAgICAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjIyNCBhZGQgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMjI1IGFkZCAgICAgIzc4MDAwMDAwMDAwMGYwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yMjYgYWRkICAwICAjNzgwMDAwMDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjIyNyBhZGQgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIENsYXNzOiBbZG9lcyBub3QgcmV0dXJuIGVuY29kZWRdDQorDQorLS0tLS0gQ29tcGFyZToNCitkcWNhbjIzMSBjb21wYXJlIC1JbmYgICAxICAgICAtPiAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFjYW4yMzIgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMjMzIGNvbXBhcmUgIDEgICAgLUluZiAgIC0+ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcWNhbjIzNCBjb21wYXJlICAjN2MwMTBmZjNmY2ZmM2ZjZmYzZmNmZjNmZmZmZmZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjIzNSBjb21wYXJlICAjN2UwMDRmZjNmY2ZmM2ZjZmYzZmZmZmZmY2ZmM2ZjZmYgICAgIC0xMDAwICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCisNCistLS0tLSBDb21wYXJlU2lnOg0KK2RxY2FuMjQxIGNvbXBhcmVzaWcgLUluZiAgIDEgICAgIC0+ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcWNhbjI0MiBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yNDMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxY2FuMjQ0IGNvbXBhcmVzaWcgICM3YzQwMGZmM2ZmZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY2FuMjQ1IGNvbXBhcmVzaWcgICM3ZTA1MGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0xMDAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tLS0tIENvcHk6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCistLSBmaW5pdGVzDQorZHFjYW4yNTAgY29weSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KK2RxY2FuMjUxIGNvcHkgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjZWUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCistLSBOYU5zDQorZHFjYW4yNTIgY29weSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjUzIGNvcHkgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBzTmFODQorZHFjYW4yNTQgY29weSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjU1IGNvcHkgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBJbmYNCitkcWNhbjI1OCBjb3B5ICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yNTkgY29weSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KKw0KKy0tLS0tIENvcHlBYnM6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCistLSBmaW5pdGVzDQorZHFjYW4yNjAgY29weWFicyAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICM2ZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KK2RxY2FuMjYxIGNvcHlhYnMgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCistLSBOYU5zDQorZHFjYW4yNjIgY29weWFicyAgI2ZjMDAwZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjYzIGNvcHlhYnMgICNmYzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2MwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBzTmFODQorZHFjYW4yNjQgY29weWFicyAgI2ZlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICM3ZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjY1IGNvcHlhYnMgICNmZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBJbmYNCitkcWNhbjI2OCBjb3B5YWJzICAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gIzc4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yNjkgY29weWFicyAgI2Y4MDAwMDAwMDAwMDAwNzAwNzAwNzAwMDAwMDAwMDAwIC0+ICM3ODAwMDAwMDAwMDAwMDcwMDcwMDcwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIENvcHlOZWdhdGU6IFtkb2VzIG5vdCB1c3VhbGx5IGNhbm9uaWNhbGl6ZV0NCistLSBmaW5pdGVzDQorZHFjYW4yNzAgY29weW5lZ2F0ZSAgIzZlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmIC0+ICNlZTA4MGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmZmZmZmZg0KK2RxY2FuMjcxIGNvcHluZWdhdGUgICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCistLSBOYU5zDQorZHFjYW4yNzIgY29weW5lZ2F0ZSAgIzdjMDAwZmYzZmNmZmZmZmZmZmZmZmYzZmNmZjNmY2ZmIC0+ICNmYzAwMGZmM2ZjZmZmZmZmZmZmZmZmM2ZjZmYzZmNmZg0KK2RxY2FuMjczIGNvcHluZWdhdGUgICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmMwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBzTmFODQorZHFjYW4yNzQgY29weW5lZ2F0ZSAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjc1IGNvcHluZWdhdGUgICM3ZTEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiAjZmUxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCistLSBJbmYNCitkcWNhbjI3OCBjb3B5bmVnYXRlICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gI2Y4MDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4yNzkgY29weW5lZ2F0ZSAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwIC0+ICNmODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KKw0KKy0tLS0tIENvcHlTaWduOiBbZG9lcyBub3QgdXN1YWxseSBjYW5vbmljYWxpemVdDQorLS0gZmluaXRlcw0KK2RxY2FuMjgwIGNvcHlzaWduICAjNmUwODBmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmZmZmZmYgLTEgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmZmZmZmYzZmNmZmZmZmZmDQorZHFjYW4yODEgY29weXNpZ24gICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZmZmYzZmNmZiAgMSAtPiAjNmUwODBmZjNmY2ZmM2ZmZmYzZmNmZjNmZmZmM2ZjZmYNCistLSBOYU5zDQorZHFjYW4yODIgY29weXNpZ24gICM3YzAwMGZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZiAtMSAtPiAjZmMwMDBmZjNmY2ZmZmZmZmZmZmZmZmZmY2ZmM2ZjZmYNCitkcWNhbjI4MyBjb3B5c2lnbiAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxIC0+ICM3YzA4MGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KKy0tIHNOYU4NCitkcWNhbjI4NCBjb3B5c2lnbiAgIzdlMDAzZmYzZmNmZmZmZmZmZmZmZmZmZmNmZjNmY2ZmIC0xIC0+ICNmZTAwM2ZmM2ZjZmZmZmZmZmZmZmZmZmZjZmYzZmNmZg0KK2RxY2FuMjg1IGNvcHlzaWduICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgLT4gIzdlMTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorLS0gSW5mDQorZHFjYW4yODggY29weXNpZ24gICM3ODAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtMSAtPiAjZjgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjI4OSBjb3B5c2lnbiAgIzc4MDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMTAwMDAwICAxIC0+ICM3ODAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDAwMA0KKw0KKy0tLS0tIE11bHRpcGx5Og0KKy0tIEZpbml0ZXM6IG5ldXRyYWwgMA0KK2RxY2FuMzAyIG11bHRpcGx5ICAxICAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzdmZmZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjMwMyBtdWx0aXBseSAgICAgIzc3ZmNmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc3ZmNjZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQorLS0gbmVnYXRpdmUNCitkcWNhbjMwNiBtdWx0aXBseSAtMSAgIzc3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gI2Y3ZmZmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4zMDcgbXVsdGlwbHkgICAgICM3N2ZjZmZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAtMSAgICAgICAgICAgIC0+ICNmN2ZjY2ZmZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KKy0tIE5hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQorZHFjYW4zMTEgbXVsdGlwbHkgIDEgICM3YzAzZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMzEyIG11bHRpcGx5ICAgICAjN2MwM2ZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDANCistLSBOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkcWNhbjMxMyBtdWx0aXBseSAgMSAgIzdjNDBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4zMTQgbXVsdGlwbHkgICAgICM3YzQwZmYzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3YzAwM2YzZmNmZjNmY2ZmMDAwMDAwMDAwMDAwMDAwMA0KKy0tIHNOYU46IGRlY2xldHMgaW4gcGF5bG9hZA0KK2RxY2FuMzE1IG11bHRpcGx5ICAxICAjN2UwMGZmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDBmZmZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNhbjMxNiBtdWx0aXBseSAgICAgIzdlMDBmZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAwZmZmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uDQorLS0gc05hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KK2RxY2FuMzE3IG11bHRpcGx5ICAxICAjN2U4MGZmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjN2MwMDNmM2ZjZmYzZmNmZjAwMDAwMDAwMDAwMDAwMDAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNhbjMxOCBtdWx0aXBseSAgICAgIzdlODBmZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzdjMDAzZjNmY2ZmM2ZjZmYwMDAwMDAwMDAwMDAwMDAwIEludmFsaWRfb3BlcmF0aW9uDQorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuMzIwIG11bHRpcGx5ICAxICAjNzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjMyMSBtdWx0aXBseSAgICAgIzc4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuMzIyIG11bHRpcGx5ICAxICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjMyMyBtdWx0aXBseSAgICAgIzc4MDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4zMjQgbXVsdGlwbHkgIDEgICM3ODAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuMzI1IG11bHRpcGx5ICAgICAjNzgwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgMSAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjMyNiBtdWx0aXBseSAgMSAgIzc4MDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW4zMjcgbXVsdGlwbHkgICAgICM3ODAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxICAgICAgICAgICAgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIFF1YW50aXplOg0KK2RxY2FuNDAxIHF1YW50aXplICAjZWUwODBmZjNmY2ZmM2ZjZmYzZmZmZmZmZmZmM2ZjZmYgMCAgICAtPiAjZWUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjQwMiBxdWFudGl6ZSAgI2VlMDgwZmYzZmZmZmZmZmZmZmZjZmYzZmNmZjNmY2ZmIDAgICAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW40MDMgcXVhbnRpemUgICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmYgIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuNDA0IHF1YW50aXplICAjNzgwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLUluZiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjQxMCBxdWFudGl6ZSAgIzdjMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAxICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW40MTEgcXVhbnRpemUgICNmYzAwMGZmM2ZjZmZmZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgMSAgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KK2RxY2FuNDEyIHF1YW50aXplICAjN2UxMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIDEgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW52YWxpZF9vcGVyYXRpb24NCitkcWNhbjQxMyBxdWFudGl6ZSAgI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZmZmZmZmNmZjNmY2ZmICAxICAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0tLS0gU3VidHJhY3Q6DQorLS0gRmluaXRlczogbmV1dHJhbCAwDQorZHFjYW41MDIgc3VidHJhY3QgIDBFKzYxNDQgIzc3ZmZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW41MDMgc3VidHJhY3QgICAgICAgICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmZmZjNmY2ZmIDBFKzYxNDQgLT4gIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorLS0gdGlueSB6ZXJvDQorZHFjYW41MDQgc3VidHJhY3QgIDBFLTYxNzYgIzc3ZmZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIFJvdW5kZWQNCitkcWNhbjUwNSBzdWJ0cmFjdCAgICAgICAgICAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZmZmYgMEUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgUm91bmRlZA0KKy0tIHRpbnkgbm9uIHplcm8NCitkcWNhbjUwNiBzdWJ0cmFjdCAtMUUtNjE3NiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmZmZmZmYgICAgICAgICAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIEluZXhhY3QgUm91bmRlZA0KK2RxY2FuNTA3IHN1YnRyYWN0ICAgICAgICAgICM3N2ZmY2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmYzZmNmZiAtMUUtNjE3NiAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgSW5leGFjdCBSb3VuZGVkDQorLS0gTmFOOiBkZWNsZXRzIGluIHBheWxvYWQNCitkcWNhbjUxMSBzdWJ0cmFjdCAgMCAgIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmZmZmZmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW41MTIgc3VidHJhY3QgICAgICM3YzAwMGZmM2ZjZmYzZmNmZmZmZmZmM2ZjZmYzZmNmZiAwIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KKy0tIE5hTjogZXhwb25lbnQgY29udGludWF0aW9uIGJpdHMgW2V4Y2x1ZGluZyBzTmFOIHNlbGVjdG9yXQ0KK2RxY2FuNTEzIHN1YnRyYWN0ICAwICAjN2M0MDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgICAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkcWNhbjUxNCBzdWJ0cmFjdCAgICAgIzdjMDIwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorLS0gc05hTjogZGVjbGV0cyBpbiBwYXlsb2FkDQorZHFjYW41MTUgc3VidHJhY3QgIDAgICM3ZTAwMGZmM2ZjZmZmZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgIC0+ICM3YzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNhbjUxNiBzdWJ0cmFjdCAgICAgIzdlMDAzZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIDAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNOYU46IGV4cG9uZW50IGNvbnRpbnVhdGlvbiBiaXRzIFtleGNsdWRpbmcgc05hTiBzZWxlY3Rvcl0NCitkcWNhbjUxNyBzdWJ0cmFjdCAgMCAgIzdlNTAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY2FuNTE4IHN1YnRyYWN0ICAgICAjN2UwZTBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgMCAtPiAjN2MwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIEludmFsaWRfb3BlcmF0aW9uDQorLS0gSW5mOiBleHBvbmVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuNTIwIHN1YnRyYWN0ICAwICAjNzgwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjUyMSBzdWJ0cmFjdCAgICAgIzc4NjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS0gSW5mOiBjb2VmZmljaWVudCBjb250aW51YXRpb24gYml0cw0KK2RxY2FuNTIyIHN1YnRyYWN0ICAwICAjNzgwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjUyMyBzdWJ0cmFjdCAgICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIDAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW41MjQgc3VidHJhY3QgIDAgICM3ODAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxY2FuNTI1IHN1YnRyYWN0ICAgICAjNzgwMDAwMDAwMDAwZjAwMDAwMDAwMDAwMDAwMDAwMDAgMCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWNhbjUyNiBzdWJ0cmFjdCAgMCAgIzc4MDAwMDAwMDAwMDAwMDAwMDA1MDAwMDAwMDAwMDAwICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW41Mjcgc3VidHJhY3QgICAgICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMDAwMCAwIC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tLS0tIFRvSW50ZWdyYWw6DQorZHFjYW42MDEgdG9pbnRlZ3JhbHggICM2ZTA4MGZmM2ZkZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW42MDIgdG9pbnRlZ3JhbHggICNlZTA4MGZmM2ZjZmYzZmZmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gI2VlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW42MDMgdG9pbnRlZ3JhbHggICM3ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW42MDQgdG9pbnRlZ3JhbHggICM3ODAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFjYW42MTQgdG9pbnRlZ3JhbHggICM3YzEwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW42MTUgdG9pbnRlZ3JhbHggICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmZmZjZmYzZmNmZiAgLT4gI2ZjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZHFjYW42MTYgdG9pbnRlZ3JhbHggICM3ZTAxMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY2FuNjE3IHRvaW50ZWdyYWx4ICAjZmUwMDBmZjNmY2ZmM2ZjZmYzZmRmZjNmY2ZmM2ZjZmYgIC0+ICNmYzAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAgSW52YWxpZF9vcGVyYXRpb24NCistLSB1bmNhbm9uaWNhbCAzOTk5LCAzOS45OSwgMy45OSwgMC4zOTksICAgICAgICAgICAgICAgICAgYW5kIG5lZ2F0aXZlcw0KK2RxY2FuNjE4IHRvaW50ZWdyYWx4ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZg0KK2RxY2FuNjE5IHRvaW50ZWdyYWx4ICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkDQorZHFjYW42MjAgdG9pbnRlZ3JhbHggICMyMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQNCitkcWNhbjYyMSB0b2ludGVncmFseCAgIzIyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK2RxY2FuNjIyIHRvaW50ZWdyYWx4ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGNmZg0KK2RxY2FuNjIzIHRvaW50ZWdyYWx4ICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZmYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MCAgSW5leGFjdCBSb3VuZGVkDQorZHFjYW42MjQgdG9pbnRlZ3JhbHggICNhMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmZiAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmV4YWN0IFJvdW5kZWQNCitkcWNhbjYyNSB0b2ludGVncmFseCAgI2EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZmZmICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDbGFzcy5kZWNUZXN0CmluZGV4IGQ3ZTE5YjMuLmYzNDE5MzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNsYXNzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ2xhc3MuZGVjVGVzdApAQCAtMSw3NyArMSw3NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUNsYXNzLmRlY1Rlc3QgLS0gZGVjUXVhZCBDbGFzcyBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFtOZXcgMjAwNi4xMS4yN10KLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZHFjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotZHFjbGEwMDIgIGNsYXNzICAgIDAuMDAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotZHFjbGEwMDMgIGNsYXNzICAgIDBFKzUgICAgICAgICAgICAgICAgICAgICAtPiArWmVybwotZHFjbGEwMDQgIGNsYXNzICAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsCi1kcWNsYTAwNSAgY2xhc3MgIDAuMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+ICtTdWJub3JtYWwKLWRxY2xhMDA2ICBjbGFzcyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgICAgLT4gK1N1Ym5vcm1hbAotZHFjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtPiArTm9ybWFsCi1kcWNsYTAwOCAgY2xhc3MgICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRxY2xhMDA5ICBjbGFzcyAgIDFFLTEwMCAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZHFjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kcWNsYTAxMiAgY2xhc3MgICAxRS0xICAgICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRxY2xhMDEzICBjbGFzcyAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZHFjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kcWNsYTAxNSAgY2xhc3MgICAxMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+ICtOb3JtYWwKLWRxY2xhMDE2ICBjbGFzcyAgIDFFKzMwICAgICAgICAgICAgICAgICAgICAgLT4gK05vcm1hbAotZHFjbGEwMTcgIGNsYXNzICAgMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsCi1kcWNsYTAxOCAgY2xhc3MgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgIC0+ICtOb3JtYWwKLWRxY2xhMDE5ICBjbGFzcyAgIEluZiAgICAgICAgICAgICAgICAgICAgICAgLT4gK0luZmluaXR5Ci0KLWRxY2xhMDIxICBjbGFzcyAgIC0wICAgICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWRxY2xhMDIyICBjbGFzcyAgIC0wLjAwICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWRxY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8KLWRxY2xhMDI0ICBjbGFzcyAgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLVN1Ym5vcm1hbAotZHFjbGEwMjUgIGNsYXNzICAtMC4xRS02MTQzICAgICAgICAgICAgICAgICAtPiAtU3Vibm9ybWFsCi1kcWNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgIC0+IC1TdWJub3JtYWwKLWRxY2xhMDI3ICBjbGFzcyAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgLT4gLU5vcm1hbAotZHFjbGEwMjggIGNsYXNzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kcWNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRxY2xhMDMwICBjbGFzcyAgLTFFLTEwICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZHFjbGEwMzIgIGNsYXNzICAtMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kcWNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRxY2xhMDM0ICBjbGFzcyAgLTIuNTAgICAgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZHFjbGEwMzUgIGNsYXNzICAtMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiAtTm9ybWFsCi1kcWNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwKLWRxY2xhMDM3ICBjbGFzcyAgLTFFKzYxNDQgICAgICAgICAgICAgICAgICAgLT4gLU5vcm1hbAotZHFjbGEwNjE0ICBjbGFzcyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgLT4gLU5vcm1hbAotZHFjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLQotZHFjbGEwNDEgIGNsYXNzICAgTmFOICAgICAgICAgICAgICAgICAgICAgICAtPiBOYU4KLWRxY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFOCi1kcWNsYTA0MyAgY2xhc3MgICtOYU4xMjM0NSAgICAgICAgICAgICAgICAgIC0+IE5hTgotZHFjbGEwNDQgIGNsYXNzICAgc05hTiAgICAgICAgICAgICAgICAgICAgICAtPiBzTmFOCi1kcWNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4KLWRxY2xhMDQ2ICBjbGFzcyAgK3NOYU4xMjM0NSAgICAgICAgICAgICAgICAgLT4gc05hTgotCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFDbGFzcy5kZWNUZXN0IC0tIGRlY1F1YWQgQ2xhc3Mgb3BlcmF0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFtOZXcgMjAwNi4xMS4yN10NCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZHFjbGEwMDEgIGNsYXNzICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAtPiArWmVybw0KK2RxY2xhMDAyICBjbGFzcyAgICAwLjAwICAgICAgICAgICAgICAgICAgICAgLT4gK1plcm8NCitkcWNsYTAwMyAgY2xhc3MgICAgMEUrNSAgICAgICAgICAgICAgICAgICAgIC0+ICtaZXJvDQorZHFjbGEwMDQgIGNsYXNzICAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQorZHFjbGEwMDUgIGNsYXNzICAwLjFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiArU3Vibm9ybWFsDQorZHFjbGEwMDYgIGNsYXNzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgICAtPiArU3Vibm9ybWFsDQorZHFjbGEwMDcgIGNsYXNzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtPiArTm9ybWFsDQorZHFjbGEwMDggIGNsYXNzICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMDkgIGNsYXNzICAgMUUtMTAwICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTAgIGNsYXNzICAgMUUtMTAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTIgIGNsYXNzICAgMUUtMSAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTMgIGNsYXNzICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTQgIGNsYXNzICAgMi41MCAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTUgIGNsYXNzICAgMTAwLjEwMCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTYgIGNsYXNzICAgMUUrMzAgICAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTcgIGNsYXNzICAgMUUrNjE0NCAgICAgICAgICAgICAgICAgICAtPiArTm9ybWFsDQorZHFjbGEwMTggIGNsYXNzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiArTm9ybWFsDQorZHFjbGEwMTkgIGNsYXNzICAgSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiArSW5maW5pdHkNCisNCitkcWNsYTAyMSAgY2xhc3MgICAtMCAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1aZXJvDQorZHFjbGEwMjIgIGNsYXNzICAgLTAuMDAgICAgICAgICAgICAgICAgICAgICAtPiAtWmVybw0KK2RxY2xhMDIzICBjbGFzcyAgIC0wRSs1ICAgICAgICAgICAgICAgICAgICAgLT4gLVplcm8NCitkcWNsYTAyNCAgY2xhc3MgICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCitkcWNsYTAyNSAgY2xhc3MgIC0wLjFFLTYxNDMgICAgICAgICAgICAgICAgIC0+IC1TdWJub3JtYWwNCitkcWNsYTAyNiAgY2xhc3MgIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAgIC0+IC1TdWJub3JtYWwNCitkcWNsYTAyNyAgY2xhc3MgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAyOCAgY2xhc3MgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAyOSAgY2xhc3MgIC0xRS0xMDAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzMCAgY2xhc3MgIC0xRS0xMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzMiAgY2xhc3MgIC0xRS0xICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzMyAgY2xhc3MgIC0xICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzNCAgY2xhc3MgIC0yLjUwICAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzNSAgY2xhc3MgIC0xMDAuMTAwICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzNiAgY2xhc3MgIC0xRSszMCAgICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTAzNyAgY2xhc3MgIC0xRSs2MTQ0ICAgICAgICAgICAgICAgICAgIC0+IC1Ob3JtYWwNCitkcWNsYTA2MTQgIGNsYXNzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAtPiAtTm9ybWFsDQorZHFjbGEwMzkgIGNsYXNzICAtSW5mICAgICAgICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCisNCitkcWNsYTA0MSAgY2xhc3MgICBOYU4gICAgICAgICAgICAgICAgICAgICAgIC0+IE5hTg0KK2RxY2xhMDQyICBjbGFzcyAgLU5hTiAgICAgICAgICAgICAgICAgICAgICAgLT4gTmFODQorZHFjbGEwNDMgIGNsYXNzICArTmFOMTIzNDUgICAgICAgICAgICAgICAgICAtPiBOYU4NCitkcWNsYTA0NCAgY2xhc3MgICBzTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitkcWNsYTA0NSAgY2xhc3MgIC1zTmFOICAgICAgICAgICAgICAgICAgICAgIC0+IHNOYU4NCitkcWNsYTA0NiAgY2xhc3MgICtzTmFOMTIzNDUgICAgICAgICAgICAgICAgIC0+IHNOYU4NCisNCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlLmRlY1Rlc3QKaW5kZXggYjdiNWVlNi4uYTYxN2FkMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmUuZGVjVGVzdApAQCAtMSw3NTMgKzEsNzUzIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxQ29tcGFyZS5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTm90ZSB0aGF0IHdlIGNhbm5vdCBhc3N1bWUgYWRkL3N1YnRyYWN0IHRlc3RzIGNvdmVyIHBhdGhzIGFkZXF1YXRlbHksCi0tLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QKLS0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuCi0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kcWNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDAKLWRxY29tMDAyIGNvbXBhcmUgIC0yICAtMSAgLT4gLTEKLWRxY29tMDAzIGNvbXBhcmUgIC0yICAgMCAgLT4gLTEKLWRxY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTEKLWRxY29tMDA1IGNvbXBhcmUgIC0yICAgMiAgLT4gLTEKLWRxY29tMDA2IGNvbXBhcmUgIC0xICAtMiAgLT4gMQotZHFjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwCi1kcWNvbTAwOCBjb21wYXJlICAtMSAgIDAgIC0+IC0xCi1kcWNvbTAwOSBjb21wYXJlICAtMSAgIDEgIC0+IC0xCi1kcWNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xCi1kcWNvbTAxMSBjb21wYXJlICAgMCAgLTIgIC0+IDEKLWRxY29tMDEyIGNvbXBhcmUgICAwICAtMSAgLT4gMQotZHFjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwCi1kcWNvbTAxNCBjb21wYXJlICAgMCAgIDEgIC0+IC0xCi1kcWNvbTAxNSBjb21wYXJlICAgMCAgIDIgIC0+IC0xCi1kcWNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDEKLWRxY29tMDE3IGNvbXBhcmUgICAxICAtMSAgLT4gMQotZHFjb20wMTggY29tcGFyZSAgIDEgICAwICAtPiAxCi1kcWNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDAKLWRxY29tMDIwIGNvbXBhcmUgICAxICAgMiAgLT4gLTEKLWRxY29tMDIxIGNvbXBhcmUgICAyICAtMiAgLT4gMQotZHFjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxCi1kcWNvbTAyMyBjb21wYXJlICAgMiAgIDAgIC0+IDEKLWRxY29tMDI1IGNvbXBhcmUgICAyICAgMSAgLT4gMQotZHFjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwCi0KLWRxY29tMDMxIGNvbXBhcmUgIC0yMCAgLTIwICAtPiAwCi1kcWNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTEKLWRxY29tMDMzIGNvbXBhcmUgIC0yMCAgIDAwICAtPiAtMQotZHFjb20wMzQgY29tcGFyZSAgLTIwICAgMTAgIC0+IC0xCi1kcWNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTEKLWRxY29tMDM2IGNvbXBhcmUgIC0xMCAgLTIwICAtPiAxCi1kcWNvbTAzNyBjb21wYXJlICAtMTAgIC0xMCAgLT4gMAotZHFjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xCi1kcWNvbTAzOSBjb21wYXJlICAtMTAgICAxMCAgLT4gLTEKLWRxY29tMDQwIGNvbXBhcmUgIC0xMCAgIDIwICAtPiAtMQotZHFjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDEKLWRxY29tMDQyIGNvbXBhcmUgICAwMCAgLTEwICAtPiAxCi1kcWNvbTA0MyBjb21wYXJlICAgMDAgICAwMCAgLT4gMAotZHFjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xCi1kcWNvbTA0NSBjb21wYXJlICAgMDAgICAyMCAgLT4gLTEKLWRxY29tMDQ2IGNvbXBhcmUgICAxMCAgLTIwICAtPiAxCi1kcWNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQotZHFjb20wNDggY29tcGFyZSAgIDEwICAgMDAgIC0+IDEKLWRxY29tMDQ5IGNvbXBhcmUgICAxMCAgIDEwICAtPiAwCi1kcWNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTEKLWRxY29tMDUxIGNvbXBhcmUgICAyMCAgLTIwICAtPiAxCi1kcWNvbTA1MiBjb21wYXJlICAgMjAgIC0xMCAgLT4gMQotZHFjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDEKLWRxY29tMDU1IGNvbXBhcmUgICAyMCAgIDEwICAtPiAxCi1kcWNvbTA1NiBjb21wYXJlICAgMjAgICAyMCAgLT4gMAotCi1kcWNvbTA2MSBjb21wYXJlICAtMi4wICAtMi4wICAtPiAwCi1kcWNvbTA2MiBjb21wYXJlICAtMi4wICAtMS4wICAtPiAtMQotZHFjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTEKLWRxY29tMDY0IGNvbXBhcmUgIC0yLjAgICAxLjAgIC0+IC0xCi1kcWNvbTA2NSBjb21wYXJlICAtMi4wICAgMi4wICAtPiAtMQotZHFjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQotZHFjb20wNjcgY29tcGFyZSAgLTEuMCAgLTEuMCAgLT4gMAotZHFjb20wNjggY29tcGFyZSAgLTEuMCAgIDAuMCAgLT4gLTEKLWRxY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xCi1kcWNvbTA3MCBjb21wYXJlICAtMS4wICAgMi4wICAtPiAtMQotZHFjb20wNzEgY29tcGFyZSAgIDAuMCAgLTIuMCAgLT4gMQotZHFjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQotZHFjb20wNzMgY29tcGFyZSAgIDAuMCAgIDAuMCAgLT4gMAotZHFjb20wNzQgY29tcGFyZSAgIDAuMCAgIDEuMCAgLT4gLTEKLWRxY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xCi1kcWNvbTA3NiBjb21wYXJlICAgMS4wICAtMi4wICAtPiAxCi1kcWNvbTA3NyBjb21wYXJlICAgMS4wICAtMS4wICAtPiAxCi1kcWNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxCi1kcWNvbTA3OSBjb21wYXJlICAgMS4wICAgMS4wICAtPiAwCi1kcWNvbTA4MCBjb21wYXJlICAgMS4wICAgMi4wICAtPiAtMQotZHFjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQotZHFjb20wODIgY29tcGFyZSAgIDIuMCAgLTEuMCAgLT4gMQotZHFjb20wODMgY29tcGFyZSAgIDIuMCAgIDAuMCAgLT4gMQotZHFjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQotZHFjb20wODYgY29tcGFyZSAgIDIuMCAgIDIuMCAgLT4gMAotCi0tLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQKLWRxY29tMDkwIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAwCi1kcWNvbTA5MSBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTEKLWRxY29tMDkyIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCi1kcWNvbTA5MyBjb21wYXJlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMAotCi0tLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMKLWRxY29tMTAwIGNvbXBhcmUgICA3LjAgICAgNy4wICAgIC0+IDAKLWRxY29tMTAxIGNvbXBhcmUgICA3LjAgICAgNyAgICAgIC0+IDAKLWRxY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDAKLWRxY29tMTAzIGNvbXBhcmUgICA3RSswICAgNy4wICAgIC0+IDAKLWRxY29tMTA0IGNvbXBhcmUgICA3MEUtMSAgNy4wICAgIC0+IDAKLWRxY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDAKLWRxY29tMTA2IGNvbXBhcmUgICA3MEUtMSAgNyAgICAgIC0+IDAKLWRxY29tMTA3IGNvbXBhcmUgICA3LjAgICAgN0UrMCAgIC0+IDAKLWRxY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDAKLWRxY29tMTA5IGNvbXBhcmUgICA3ICAgICAgMC43RSsxIC0+IDAKLWRxY29tMTEwIGNvbXBhcmUgICA3ICAgICAgNzBFLTEgIC0+IDAKLQotZHFjb20xMjAgY29tcGFyZSAgIDguMCAgICA3LjAgICAgLT4gMQotZHFjb20xMjEgY29tcGFyZSAgIDguMCAgICA3ICAgICAgLT4gMQotZHFjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQotZHFjb20xMjMgY29tcGFyZSAgIDhFKzAgICA3LjAgICAgLT4gMQotZHFjb20xMjQgY29tcGFyZSAgIDgwRS0xICA3LjAgICAgLT4gMQotZHFjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQotZHFjb20xMjYgY29tcGFyZSAgIDgwRS0xICA3ICAgICAgLT4gMQotZHFjb20xMjcgY29tcGFyZSAgIDguMCAgICA3RSswICAgLT4gMQotZHFjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQotZHFjb20xMjkgY29tcGFyZSAgIDggICAgICAwLjdFKzEgIC0+IDEKLWRxY29tMTMwIGNvbXBhcmUgICA4ICAgICAgNzBFLTEgIC0+IDEKLQotZHFjb20xNDAgY29tcGFyZSAgIDguMCAgICA5LjAgICAgLT4gLTEKLWRxY29tMTQxIGNvbXBhcmUgICA4LjAgICAgOSAgICAgIC0+IC0xCi1kcWNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQotZHFjb20xNDMgY29tcGFyZSAgIDhFKzAgICA5LjAgICAgLT4gLTEKLWRxY29tMTQ0IGNvbXBhcmUgICA4MEUtMSAgOS4wICAgIC0+IC0xCi1kcWNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQotZHFjb20xNDYgY29tcGFyZSAgIDgwRS0xICA5ICAgICAgLT4gLTEKLWRxY29tMTQ3IGNvbXBhcmUgICA4LjAgICAgOUUrMCAgIC0+IC0xCi1kcWNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQotZHFjb20xNDkgY29tcGFyZSAgIDggICAgICAwLjlFKzEgLT4gLTEKLWRxY29tMTUwIGNvbXBhcmUgICA4ICAgICAgOTBFLTEgIC0+IC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4KLWRxY29tMjAwIGNvbXBhcmUgIC03LjAgICAgNy4wICAgIC0+IC0xCi1kcWNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQotZHFjb20yMDIgY29tcGFyZSAgLTcgICAgICA3LjAgICAgLT4gLTEKLWRxY29tMjAzIGNvbXBhcmUgIC03RSswICAgNy4wICAgIC0+IC0xCi1kcWNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQotZHFjb20yMDUgY29tcGFyZSAgLTAuN0UrMSA3ICAgICAgLT4gLTEKLWRxY29tMjA2IGNvbXBhcmUgIC03MEUtMSAgNyAgICAgIC0+IC0xCi1kcWNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQotZHFjb20yMDggY29tcGFyZSAgLTcuMCAgICA3MEUtMSAgLT4gLTEKLWRxY29tMjA5IGNvbXBhcmUgIC03ICAgICAgMC43RSsxIC0+IC0xCi1kcWNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQotCi1kcWNvbTIyMCBjb21wYXJlICAtOC4wICAgIDcuMCAgICAtPiAtMQotZHFjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTEKLWRxY29tMjIyIGNvbXBhcmUgIC04ICAgICAgNy4wICAgIC0+IC0xCi1kcWNvbTIyMyBjb21wYXJlICAtOEUrMCAgIDcuMCAgICAtPiAtMQotZHFjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTEKLWRxY29tMjI1IGNvbXBhcmUgIC0wLjhFKzEgNyAgICAgIC0+IC0xCi1kcWNvbTIyNiBjb21wYXJlICAtODBFLTEgIDcgICAgICAtPiAtMQotZHFjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTEKLWRxY29tMjI4IGNvbXBhcmUgIC04LjAgICAgNzBFLTEgIC0+IC0xCi1kcWNvbTIyOSBjb21wYXJlICAtOCAgICAgIDAuN0UrMSAtPiAtMQotZHFjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTEKLQotZHFjb20yNDAgY29tcGFyZSAgLTguMCAgICA5LjAgICAgLT4gLTEKLWRxY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xCi1kcWNvbTI0MiBjb21wYXJlICAtOCAgICAgIDkuMCAgICAtPiAtMQotZHFjb20yNDMgY29tcGFyZSAgLThFKzAgICA5LjAgICAgLT4gLTEKLWRxY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xCi1kcWNvbTI0NSBjb21wYXJlICAtMC44RSsxIDkgICAgICAtPiAtMQotZHFjb20yNDYgY29tcGFyZSAgLTgwRS0xICA5ICAgICAgLT4gLTEKLWRxY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xCi1kcWNvbTI0OCBjb21wYXJlICAtOC4wICAgIDkwRS0xICAtPiAtMQotZHFjb20yNDkgY29tcGFyZSAgLTggICAgICAwLjlFKzEgLT4gLTEKLWRxY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4KLWRxY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxCi1kcWNvbTMwMSBjb21wYXJlICAgNy4wICAgIC03ICAgICAgLT4gMQotZHFjb20zMDIgY29tcGFyZSAgIDcgICAgICAtNy4wICAgIC0+IDEKLWRxY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxCi1kcWNvbTMwNCBjb21wYXJlICAgNzBFLTEgIC03LjAgICAgLT4gMQotZHFjb20zMDUgY29tcGFyZSAgIC43RSsxICAtNyAgICAgIC0+IDEKLWRxY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxCi1kcWNvbTMwNyBjb21wYXJlICAgNy4wICAgIC03RSswICAgLT4gMQotZHFjb20zMDggY29tcGFyZSAgIDcuMCAgICAtNzBFLTEgIC0+IDEKLWRxY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxCi1kcWNvbTMxMCBjb21wYXJlICAgNyAgICAgIC03MEUtMSAgLT4gMQotCi1kcWNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQotZHFjb20zMjEgY29tcGFyZSAgIDguMCAgICAtNyAgICAgIC0+IDEKLWRxY29tMzIyIGNvbXBhcmUgICA4ICAgICAgLTcuMCAgICAtPiAxCi1kcWNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQotZHFjb20zMjQgY29tcGFyZSAgIDgwRS0xICAtNy4wICAgIC0+IDEKLWRxY29tMzI1IGNvbXBhcmUgICAuOEUrMSAgLTcgICAgICAtPiAxCi1kcWNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQotZHFjb20zMjcgY29tcGFyZSAgIDguMCAgICAtN0UrMCAgIC0+IDEKLWRxY29tMzI4IGNvbXBhcmUgICA4LjAgICAgLTcwRS0xICAtPiAxCi1kcWNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQotZHFjb20zMzAgY29tcGFyZSAgIDggICAgICAtNzBFLTEgIC0+IDEKLQotZHFjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDEKLWRxY29tMzQxIGNvbXBhcmUgICA4LjAgICAgLTkgICAgICAtPiAxCi1kcWNvbTM0MiBjb21wYXJlICAgOCAgICAgIC05LjAgICAgLT4gMQotZHFjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDEKLWRxY29tMzQ0IGNvbXBhcmUgICA4MEUtMSAgLTkuMCAgICAtPiAxCi1kcWNvbTM0NSBjb21wYXJlICAgLjhFKzEgIC05ICAgICAgLT4gMQotZHFjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDEKLWRxY29tMzQ3IGNvbXBhcmUgICA4LjAgICAgLTlFKzAgICAtPiAxCi1kcWNvbTM0OCBjb21wYXJlICAgOC4wICAgIC05MEUtMSAgLT4gMQotZHFjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDEKLWRxY29tMzUwIGNvbXBhcmUgICA4ICAgICAgLTkwRS0xICAtPiAxCi0KLS0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4KLWRxY29tNDAwIGNvbXBhcmUgICAtNy4wICAgIC03LjAgICAgLT4gMAotZHFjb200MDEgY29tcGFyZSAgIC03LjAgICAgLTcgICAgICAtPiAwCi1kcWNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDAKLWRxY29tNDAzIGNvbXBhcmUgICAtN0UrMCAgIC03LjAgICAgLT4gMAotZHFjb200MDQgY29tcGFyZSAgIC03MEUtMSAgLTcuMCAgICAtPiAwCi1kcWNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDAKLWRxY29tNDA2IGNvbXBhcmUgICAtNzBFLTEgIC03ICAgICAgLT4gMAotZHFjb200MDcgY29tcGFyZSAgIC03LjAgICAgLTdFKzAgICAtPiAwCi1kcWNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKLWRxY29tNDA5IGNvbXBhcmUgICAtNyAgICAgIC0uN0UrMSAgLT4gMAotZHFjb200MTAgY29tcGFyZSAgIC03ICAgICAgLTcwRS0xICAtPiAwCi0KLWRxY29tNDIwIGNvbXBhcmUgICAtOC4wICAgIC03LjAgICAgLT4gLTEKLWRxY29tNDIxIGNvbXBhcmUgICAtOC4wICAgIC03ICAgICAgLT4gLTEKLWRxY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTEKLWRxY29tNDIzIGNvbXBhcmUgICAtOEUrMCAgIC03LjAgICAgLT4gLTEKLWRxY29tNDI0IGNvbXBhcmUgICAtODBFLTEgIC03LjAgICAgLT4gLTEKLWRxY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTEKLWRxY29tNDI2IGNvbXBhcmUgICAtODBFLTEgIC03ICAgICAgLT4gLTEKLWRxY29tNDI3IGNvbXBhcmUgICAtOC4wICAgIC03RSswICAgLT4gLTEKLWRxY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTEKLWRxY29tNDI5IGNvbXBhcmUgICAtOCAgICAgIC0uN0UrMSAgLT4gLTEKLWRxY29tNDMwIGNvbXBhcmUgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKLQotZHFjb200NDAgY29tcGFyZSAgIC04LjAgICAgLTkuMCAgICAtPiAxCi1kcWNvbTQ0MSBjb21wYXJlICAgLTguMCAgICAtOSAgICAgIC0+IDEKLWRxY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQotZHFjb200NDMgY29tcGFyZSAgIC04RSswICAgLTkuMCAgICAtPiAxCi1kcWNvbTQ0NCBjb21wYXJlICAgLTgwRS0xICAtOS4wICAgIC0+IDEKLWRxY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQotZHFjb200NDYgY29tcGFyZSAgIC04MEUtMSAgLTkgICAgICAtPiAxCi1kcWNvbTQ0NyBjb21wYXJlICAgLTguMCAgICAtOUUrMCAgIC0+IDEKLWRxY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQotZHFjb200NDkgY29tcGFyZSAgIC04ICAgICAgLS45RSsxICAtPiAxCi1kcWNvbTQ1MCBjb21wYXJlICAgLTggICAgICAtOTBFLTEgIC0+IDEKLQotLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuCi1kcWNvbTQ1MSBjb21wYXJlICAgICAgMS4wICAgICAgIDAuMSAgLT4gMQotZHFjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xCi1kcWNvbTQ1MyBjb21wYXJlICAgICAxMC4wICAgICAgIDAuMSAgLT4gMQotZHFjb200NTQgY29tcGFyZSAgICAgIDAuMSAgICAgIDEwLjAgIC0+IC0xCi1kcWNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQotZHFjb200NTYgY29tcGFyZSAgICAgIDEuMCAgICAgICAxMDAgIC0+IC0xCi1kcWNvbTQ1NyBjb21wYXJlICAgICAxMDAwICAgICAgMTAuMCAgLT4gMQotZHFjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xCi1kcWNvbTQ1OSBjb21wYXJlICAgIDEwMDAwICAgICAxMDAuMCAgLT4gMQotZHFjb200NjAgY29tcGFyZSAgICAxMDAuMCAgICAgMTAwMDAgIC0+IC0xCi1kcWNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQotZHFjb200NjIgY29tcGFyZSAgIDEwMDAuMCAgICAxMDAwMDAgIC0+IC0xCi1kcWNvbTQ2MyBjb21wYXJlICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMQotZHFjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xCi0KLS0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQotZHFjb200NzMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAotZHFjb200NzQgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCi1kcWNvbTQ3NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAotZHFjb200NzYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAotZHFjb200NzcgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNvbTQ3OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAotZHFjb200NzkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAotZHFjb200ODAgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCi1kcWNvbTQ4MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMAotZHFjb200ODIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAotZHFjb200ODMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNvbTQ4NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwCi1kcWNvbTQ4OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDAKLWRxY29tNDg5IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRSs4OSAtPiAwCi1kcWNvbTQ5MCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwCi1kcWNvbTQ5MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDAKLWRxY29tNDkyIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRS04OSAtPiAwCi1kcWNvbTQ5MyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwCi1kcWNvbTQ5NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDAKLWRxY29tNDk1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRSs4OSAtPiAwCi1kcWNvbTQ5NiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwCi1kcWNvbTQ5NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKLQotLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbAotZHFjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxCi1kcWNvbTUwMSBjb21wYXJlICAgIDEgICAgIDFFLTE0ICAgIC0+IDEKLWRxY29tNTAyIGNvbXBhcmUgICAgMSAgICAgMUUtMTMgICAgLT4gMQotZHFjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxCi1kcWNvbTUwNCBjb21wYXJlICAgIDEgICAgIDFFLTExICAgIC0+IDEKLWRxY29tNTA1IGNvbXBhcmUgICAgMSAgICAgMUUtMTAgICAgLT4gMQotZHFjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxCi1kcWNvbTUwNyBjb21wYXJlICAgIDEgICAgIDFFLTggICAgIC0+IDEKLWRxY29tNTA4IGNvbXBhcmUgICAgMSAgICAgMUUtNyAgICAgLT4gMQotZHFjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxCi1kcWNvbTUxMCBjb21wYXJlICAgIDEgICAgIDFFLTUgICAgIC0+IDEKLWRxY29tNTExIGNvbXBhcmUgICAgMSAgICAgMUUtNCAgICAgLT4gMQotZHFjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxCi1kcWNvbTUxMyBjb21wYXJlICAgIDEgICAgIDFFLTIgICAgIC0+IDEKLWRxY29tNTE0IGNvbXBhcmUgICAgMSAgICAgMUUtMSAgICAgLT4gMQotZHFjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwCi1kcWNvbTUxNiBjb21wYXJlICAgIDEgICAgIDFFKzEgICAgIC0+IC0xCi1kcWNvbTUxNyBjb21wYXJlICAgIDEgICAgIDFFKzIgICAgIC0+IC0xCi1kcWNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCi1kcWNvbTUxOSBjb21wYXJlICAgIDEgICAgIDFFKzQgICAgIC0+IC0xCi1kcWNvbTUyMSBjb21wYXJlICAgIDEgICAgIDFFKzUgICAgIC0+IC0xCi1kcWNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCi1kcWNvbTUyMyBjb21wYXJlICAgIDEgICAgIDFFKzcgICAgIC0+IC0xCi1kcWNvbTUyNCBjb21wYXJlICAgIDEgICAgIDFFKzggICAgIC0+IC0xCi1kcWNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCi1kcWNvbTUyNiBjb21wYXJlICAgIDEgICAgIDFFKzEwICAgIC0+IC0xCi1kcWNvbTUyNyBjb21wYXJlICAgIDEgICAgIDFFKzExICAgIC0+IC0xCi1kcWNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCi1kcWNvbTUyOSBjb21wYXJlICAgIDEgICAgIDFFKzEzICAgIC0+IC0xCi1kcWNvbTUzMCBjb21wYXJlICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xCi1kcWNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCi0tLSBMUiBzd2FwCi1kcWNvbTU0MCBjb21wYXJlICAgIDFFLTE1ICAxICAgICAgIC0+IC0xCi1kcWNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCi1kcWNvbTU0MiBjb21wYXJlICAgIDFFLTEzICAxICAgICAgIC0+IC0xCi1kcWNvbTU0MyBjb21wYXJlICAgIDFFLTEyICAxICAgICAgIC0+IC0xCi1kcWNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xCi1kcWNvbTU0NSBjb21wYXJlICAgIDFFLTEwICAxICAgICAgIC0+IC0xCi1kcWNvbTU0NiBjb21wYXJlICAgIDFFLTkgICAxICAgICAgIC0+IC0xCi1kcWNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xCi1kcWNvbTU0OCBjb21wYXJlICAgIDFFLTcgICAxICAgICAgIC0+IC0xCi1kcWNvbTU0OSBjb21wYXJlICAgIDFFLTYgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1MSBjb21wYXJlICAgIDFFLTQgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1MiBjb21wYXJlICAgIDFFLTMgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1NCBjb21wYXJlICAgIDFFLTEgICAxICAgICAgIC0+IC0xCi1kcWNvbTU1NSBjb21wYXJlICAgIDFFLTAgICAxICAgICAgIC0+ICAwCi1kcWNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxCi1kcWNvbTU1NyBjb21wYXJlICAgIDFFKzIgICAxICAgICAgIC0+ICAxCi1kcWNvbTU1OCBjb21wYXJlICAgIDFFKzMgICAxICAgICAgIC0+ICAxCi1kcWNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxCi1kcWNvbTU2MSBjb21wYXJlICAgIDFFKzUgICAxICAgICAgIC0+ICAxCi1kcWNvbTU2MiBjb21wYXJlICAgIDFFKzYgICAxICAgICAgIC0+ICAxCi1kcWNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxCi1kcWNvbTU2NCBjb21wYXJlICAgIDFFKzggICAxICAgICAgIC0+ICAxCi1kcWNvbTU2NSBjb21wYXJlICAgIDFFKzkgICAxICAgICAgIC0+ICAxCi1kcWNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxCi1kcWNvbTU2NyBjb21wYXJlICAgIDFFKzExICAxICAgICAgIC0+ICAxCi1kcWNvbTU2OCBjb21wYXJlICAgIDFFKzEyICAxICAgICAgIC0+ICAxCi1kcWNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxCi1kcWNvbTU3MCBjb21wYXJlICAgIDFFKzE0ICAxICAgICAgIC0+ICAxCi1kcWNvbTU3MSBjb21wYXJlICAgIDFFKzE1ICAxICAgICAgIC0+ICAxCi0tLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkKLWRxY29tNTgwIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAtPiAxCi1kcWNvbTU4MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQotZHFjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDEKLWRxY29tNTgzIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAtPiAxCi1kcWNvbTU4NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQotZHFjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDEKLWRxY29tNTg2IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAtPiAxCi1kcWNvbTU4NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQotZHFjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDEKLWRxY29tNTg5IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAtPiAtMQotZHFjb201OTAgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCi1kcWNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTEKLWRxY29tNTkyIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAtPiAtMQotZHFjb201OTMgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCi1kcWNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTEKLWRxY29tNTk1IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAtPiAtMQotZHFjb201OTYgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCi1kcWNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTEKLWRxY29tNTk4IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAtPiAtMQotZHFjb201OTkgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCi0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCi1kcWNvbTYwMCBjb21wYXJlICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwMiBjb21wYXJlICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwMyBjb21wYXJlICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwNSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwNiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwOCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYwOSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xCi1kcWNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxCi1kcWNvbTYxMSBjb21wYXJlICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCi1kcWNvbTYxMiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxCi1kcWNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxCi1kcWNvbTYxNCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCi1kcWNvbTYxNSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxCi1kcWNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxCi1kcWNvbTYxNyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCi1kcWNvbTYxOCBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxCi1kcWNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxCi1kcWNvbTYyMCBjb21wYXJlICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyMSBjb21wYXJlICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyMyBjb21wYXJlICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyNCBjb21wYXJlICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyNiBjb21wYXJlICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyNyBjb21wYXJlICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYyOSBjb21wYXJlICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCi1kcWNvbTYzMCBjb21wYXJlICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xCi1kcWNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xCi1kcWNvbTYzMiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCi1kcWNvbTYzMyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xCi1kcWNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xCi1kcWNvbTYzNSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCi1kcWNvbTYzNiBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xCi1kcWNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xCi1kcWNvbTYzOCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCi1kcWNvbTYzOSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xCi0KLS0tIGV4dGVuZGVkIHplcm9zCi1kcWNvbTY0MCBjb21wYXJlICAgMCAgICAgMCAgIC0+IDAKLWRxY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMAotZHFjb202NDIgY29tcGFyZSAgIDAgICAgLTAuMCAtPiAwCi1kcWNvbTY0MyBjb21wYXJlICAgMCAgICAgMC4wIC0+IDAKLWRxY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMAotZHFjb202NDUgY29tcGFyZSAgLTAgICAgLTAgICAtPiAwCi1kcWNvbTY0NiBjb21wYXJlICAtMCAgICAtMC4wIC0+IDAKLWRxY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMAotZHFjb202NDggY29tcGFyZSAgIDAuMCAgIDAgICAtPiAwCi1kcWNvbTY0OSBjb21wYXJlICAgMC4wICAtMCAgIC0+IDAKLWRxY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMAotZHFjb202NTEgY29tcGFyZSAgIDAuMCAgIDAuMCAtPiAwCi1kcWNvbTY1MiBjb21wYXJlICAtMC4wICAgMCAgIC0+IDAKLWRxY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMAotZHFjb202NTQgY29tcGFyZSAgLTAuMCAgLTAuMCAtPiAwCi1kcWNvbTY1NSBjb21wYXJlICAtMC4wICAgMC4wIC0+IDAKLQotZHFjb202NTYgY29tcGFyZSAgLTBFMSAgIDAuMCAtPiAwCi1kcWNvbTY1NyBjb21wYXJlICAtMEUyICAgMC4wIC0+IDAKLWRxY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMAotZHFjb202NTkgY29tcGFyZSAgIDBFMiAgIDAuMCAtPiAwCi1kcWNvbTY2MCBjb21wYXJlICAtMEUxICAgMCAgIC0+IDAKLWRxY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMAotZHFjb202NjIgY29tcGFyZSAgIDBFMSAgIDAgICAtPiAwCi1kcWNvbTY2MyBjb21wYXJlICAgMEUyICAgMCAgIC0+IDAKLWRxY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMAotZHFjb202NjUgY29tcGFyZSAgLTBFMiAgLTBFMSAtPiAwCi1kcWNvbTY2NiBjb21wYXJlICAgMEUxICAtMEUxIC0+IDAKLWRxY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMAotZHFjb202NjggY29tcGFyZSAgLTBFMSAgLTBFMiAtPiAwCi1kcWNvbTY2OSBjb21wYXJlICAtMEUyICAtMEUyIC0+IDAKLWRxY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMAotZHFjb202NzEgY29tcGFyZSAgIDBFMiAgLTBFMiAtPiAwCi1kcWNvbTY3MiBjb21wYXJlICAtMEUxICAgMEUxIC0+IDAKLWRxY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMAotZHFjb202NzQgY29tcGFyZSAgIDBFMSAgIDBFMSAtPiAwCi1kcWNvbTY3NSBjb21wYXJlICAgMEUyICAgMEUxIC0+IDAKLWRxY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMAotZHFjb202NzcgY29tcGFyZSAgLTBFMiAgIDBFMiAtPiAwCi1kcWNvbTY3OCBjb21wYXJlICAgMEUxICAgMEUyIC0+IDAKLWRxY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMAotCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15Ci1kcWNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDAKLWRxY29tNjgxIGNvbXBhcmUgICAxMiAgICAxMi4wICAgICAgICAgLT4gMAotZHFjb202ODIgY29tcGFyZSAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwCi1kcWNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDAKLWRxY29tNjg0IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMAotZHFjb202ODUgY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwCi1kcWNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDAKLWRxY29tNjg3IGNvbXBhcmUgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMAotZHFjb202ODggY29tcGFyZSAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwCi1kcWNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDAKLWRxY29tNjkwIGNvbXBhcmUgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAotZHFjb202OTEgY29tcGFyZSAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwCi1kcWNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDAKLWRxY29tNjkzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgICAgMTIgLT4gMAotZHFjb202OTQgY29tcGFyZSAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwCi1kcWNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDAKLWRxY29tNjk2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgICAgMTIgLT4gMAotZHFjb202OTcgY29tcGFyZSAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwCi1kcWNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDAKLWRxY29tNjk5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgICAgMTIgLT4gMAotCi0tLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQKLWRxY29tNzAwIGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTUgLT4gMQotZHFjb203MDEgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCi1kcWNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xCi1kcWNvbTcwMyBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAwMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKLWRxY29tNzA0IGNvbXBhcmUgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAotZHFjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQotZHFjb203MDYgY29tcGFyZSAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTAzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxCi1kcWNvbTcwNyBjb21wYXJlICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKLWRxY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTEKLQotLS0gbWlzY2VsbGFuZW91cwotZHFjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDEKLWRxY29tNzIyIGNvbXBhcmUgMSAxMjM0NTY3ODAwMCAtPiAtMQotZHFjb203MjMgY29tcGFyZSAxMjM0NTY3ODAwICAxIC0+IDEKLWRxY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQotZHFjb203MjUgY29tcGFyZSAxMjM0NTY3ODkwICAxIC0+IDEKLWRxY29tNzI2IGNvbXBhcmUgMSAxMjM0NTY3ODkwICAtPiAtMQotZHFjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDEKLWRxY29tNzI4IGNvbXBhcmUgMSAxMjM0NTY3ODkxICAtPiAtMQotZHFjb203MjkgY29tcGFyZSAxMjM0NTY3ODkwMSAxIC0+IDEKLWRxY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQotZHFjb203MzEgY29tcGFyZSAxMjM0NTY3ODk2ICAxIC0+IDEKLWRxY29tNzMyIGNvbXBhcmUgMSAxMjM0NTY3ODk2ICAtPiAtMQotCi0tLSByZXNpZHVlIGNhc2VzIGF0IGxvd2VyIHByZWNpc2lvbgotZHFjb203NDAgY29tcGFyZSAgMSAgMC45OTk5OTk5ICAtPiAxCi1kcWNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDEKLWRxY29tNzQyIGNvbXBhcmUgIDEgIDAuOTk5OTkgICAgLT4gMQotZHFjb203NDMgY29tcGFyZSAgMSAgMS4wMDAwICAgICAtPiAwCi1kcWNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xCi1kcWNvbTc0NSBjb21wYXJlICAxICAxLjAwMDAwMSAgIC0+IC0xCi1kcWNvbTc0NiBjb21wYXJlICAxICAxLjAwMDAwMDEgIC0+IC0xCi1kcWNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xCi1kcWNvbTc1MSBjb21wYXJlICAwLjk5OTk5OSAgIDEgIC0+IC0xCi1kcWNvbTc1MiBjb21wYXJlICAwLjk5OTk5ICAgIDEgIC0+IC0xCi1kcWNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDAKLWRxY29tNzU0IGNvbXBhcmUgIDEuMDAwMDEgICAgMSAgLT4gMQotZHFjb203NTUgY29tcGFyZSAgMS4wMDAwMDEgICAxICAtPiAxCi1kcWNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDEKLQotLS0gU3BlY2lhbHMKLWRxY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCi1kcWNvbTc4MSBjb21wYXJlICBJbmYgIC0xMDAwICAtPiAgMQotZHFjb203ODIgY29tcGFyZSAgSW5mICAtMSAgICAgLT4gIDEKLWRxY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxCi1kcWNvbTc4NCBjb21wYXJlICBJbmYgICAwICAgICAtPiAgMQotZHFjb203ODUgY29tcGFyZSAgSW5mICAgMSAgICAgLT4gIDEKLWRxY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxCi1kcWNvbTc4NyBjb21wYXJlICBJbmYgICBJbmYgICAtPiAgMAotZHFjb203ODggY29tcGFyZSAtMTAwMCAgSW5mICAgLT4gLTEKLWRxY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xCi1kcWNvbTc5MCBjb21wYXJlIC0xICAgICBJbmYgICAtPiAtMQotZHFjb203OTEgY29tcGFyZSAtMCAgICAgSW5mICAgLT4gLTEKLWRxY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xCi1kcWNvbTc5MyBjb21wYXJlICAxICAgICBJbmYgICAtPiAtMQotZHFjb203OTQgY29tcGFyZSAgMTAwMCAgSW5mICAgLT4gLTEKLWRxY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwCi0KLWRxY29tODAwIGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwCi1kcWNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQotZHFjb204MDIgY29tcGFyZSAtSW5mICAtMSAgICAgLT4gLTEKLWRxY29tODAzIGNvbXBhcmUgLUluZiAgLTAgICAgIC0+IC0xCi1kcWNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQotZHFjb204MDUgY29tcGFyZSAtSW5mICAgMSAgICAgLT4gLTEKLWRxY29tODA2IGNvbXBhcmUgLUluZiAgIDEwMDAgIC0+IC0xCi1kcWNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQotZHFjb204MDggY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDAKLWRxY29tODA5IGNvbXBhcmUgLTEwMDAgLUluZiAgIC0+ICAxCi1kcWNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQotZHFjb204MTEgY29tcGFyZSAtMCAgICAtSW5mICAgLT4gIDEKLWRxY29tODEyIGNvbXBhcmUgIDAgICAgLUluZiAgIC0+ICAxCi1kcWNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQotZHFjb204MTQgY29tcGFyZSAgMTAwMCAtSW5mICAgLT4gIDEKLWRxY29tODE1IGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxCi0KLWRxY29tODIxIGNvbXBhcmUgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRxY29tODIyIGNvbXBhcmUgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRxY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRxY29tODI0IGNvbXBhcmUgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRxY29tODI1IGNvbXBhcmUgIE5hTiAgMCAgICAgIC0+ICBOYU4KLWRxY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRxY29tODI3IGNvbXBhcmUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRxY29tODI4IGNvbXBhcmUgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRxY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRxY29tODMwIGNvbXBhcmUgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRxY29tODMxIGNvbXBhcmUgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRxY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRxY29tODMzIGNvbXBhcmUgLTAgICAgTmFOICAgIC0+ICBOYU4KLWRxY29tODM0IGNvbXBhcmUgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRxY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRxY29tODM2IGNvbXBhcmUgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRxY29tODM3IGNvbXBhcmUgIEluZiAgTmFOICAgIC0+ICBOYU4KLWRxY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4KLWRxY29tODM5IGNvbXBhcmUgK05hTiAtTmFOICAgIC0+ICBOYU4KLWRxY29tODQwIGNvbXBhcmUgLU5hTiArTmFOICAgIC0+IC1OYU4KLQotZHFjb204NDEgY29tcGFyZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODQyIGNvbXBhcmUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NDQgY29tcGFyZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODQ1IGNvbXBhcmUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NDcgY29tcGFyZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODQ4IGNvbXBhcmUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NTAgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODUxIGNvbXBhcmUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NTMgY29tcGFyZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODU0IGNvbXBhcmUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NTYgY29tcGFyZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODU3IGNvbXBhcmUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NTkgY29tcGFyZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFjb204NjAgY29tcGFyZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKLWRxY29tODYxIGNvbXBhcmUgIE5hTjggIDk5OSAgIC0+ICBOYU44Ci1kcWNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcKLWRxY29tODYzIGNvbXBhcmUgLU5hTjY3IE5hTjUgIC0+IC1OYU42NwotZHFjb204NjQgY29tcGFyZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKLWRxY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMwotZHFjb204NjYgY29tcGFyZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKLWRxY29tODY3IGNvbXBhcmUgLU5hTjQxIC1OYU40MiAtPiAtTmFONDEKLWRxY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDEKLWRxY29tODY5IGNvbXBhcmUgLU5hTjQxICtOYU40MiAtPiAtTmFONDEKLWRxY29tODcwIGNvbXBhcmUgK05hTjQxICtOYU40MiAtPiAgTmFONDEKLQotZHFjb204NzEgY29tcGFyZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg3MiBjb21wYXJlICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NzQgY29tcGFyZSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg3NSBjb21wYXJlICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZHFjb204NzcgY29tcGFyZSAgMDg4ICAgIHNOYU44MSAgLT4gIE5hTjgxIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvbTg3OCBjb21wYXJlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRxY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSB3aWRlIHJhbmdlCi1kcWNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTEKLWRxY29tODgxIGNvbXBhcmUgOUUrNjE0NCArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgMQotZHFjb204ODIgY29tcGFyZSArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxCi1kcWNvbTg4MyBjb21wYXJlIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTEKLWRxY29tODg1IGNvbXBhcmUgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQotZHFjb204ODYgY29tcGFyZSA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCi1kcWNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTEKLWRxY29tODg4IGNvbXBhcmUgOUUtNjE0MyAtMC4xMDAgICAgICAgICAgICAgICAtPiAgMQotCi0tLSBzaWducwotZHFjb205MDEgY29tcGFyZSAgMWUrNzcgIDFlKzExIC0+ICAxCi1kcWNvbTkwMiBjb21wYXJlICAxZSs3NyAtMWUrMTEgLT4gIDEKLWRxY29tOTAzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQotZHFjb205MDQgY29tcGFyZSAtMWUrNzcgLTFlKzExIC0+IC0xCi1kcWNvbTkwNSBjb21wYXJlICAxZS03NyAgMWUtMTEgLT4gLTEKLWRxY29tOTA2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQotZHFjb205MDcgY29tcGFyZSAtMWUtNzcgIDFlLTExIC0+IC0xCi1kcWNvbTkwOCBjb21wYXJlIC0xZS03NyAtMWUtMTEgLT4gIDEKLQotLS0gZnVsbCBhbGlnbm1lbnQgcmFuZ2UsIGJvdGggd2F5cwotZHFjb21wMTAwMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDAKLWRxY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAwCi1kcWNvbXAxMDAzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgLT4gMAotZHFjb21wMTAwNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIC0+IDAKLWRxY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAwCi1kcWNvbXAxMDA2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAotZHFjb21wMTAwNyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIC0+IDAKLWRxY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAtPiAwCi1kcWNvbXAxMDA5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gMAotZHFjb21wMTAxMCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIC0+IDAKLWRxY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAtPiAwCi1kcWNvbXAxMDEyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgLT4gMAotZHFjb21wMTAxMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIC0+IDAKLWRxY29tcDEwMTQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwCi1kcWNvbXAxMDE1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgLT4gMAotZHFjb21wMTAxNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIC0+IDAKLWRxY29tcDEwMTcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAtPiAwCi1kcWNvbXAxMDE4IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgLT4gMAotZHFjb21wMTAxOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAgIC0+IDAKLWRxY29tcDEwMjAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwCi1kcWNvbXAxMDIxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAgICAgLT4gMAotZHFjb21wMTAyMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAgICAgIC0+IDAKLWRxY29tcDEwMjMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwCi1kcWNvbXAxMDI0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAgICAgICAgLT4gMAotZHFjb21wMTAyNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAgICAgICAgIC0+IDAKLWRxY29tcDEwMjYgY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwCi1kcWNvbXAxMDI3IGNvbXBhcmUgMSAxLjAwMDAwMDAgICAgICAgICAgLT4gMAotZHFjb21wMTAyOCBjb21wYXJlIDEgMS4wMDAwMDAgICAgICAgICAgIC0+IDAKLWRxY29tcDEwMjkgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwCi1kcWNvbXAxMDMwIGNvbXBhcmUgMSAxLjAwMDAgICAgICAgICAgICAgLT4gMAotZHFjb21wMTAzMSBjb21wYXJlIDEgMS4wMDAgICAgICAgICAgICAgIC0+IDAKLWRxY29tcDEwMzIgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwCi1kcWNvbXAxMDMzIGNvbXBhcmUgMSAxLjAgICAgICAgICAgICAgICAgLT4gMAotCi1kcWNvbXAxMDQxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAotZHFjb21wMTA0MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKLWRxY29tcDEwNDMgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCi1kcWNvbXAxMDQ0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDEgLT4gMAotZHFjb21wMTA0NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKLWRxY29tcDEwNDYgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDQ3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIDEgLT4gMAotZHFjb21wMTA0OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNDkgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDUwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIDEgLT4gMAotZHFjb21wMTA1MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNTIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDUzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIDEgLT4gMAotZHFjb21wMTA1NCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNTUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDU2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIDEgLT4gMAotZHFjb21wMTA1NyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNTggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDU5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMAotZHFjb21wMTA2MCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAgICAxIC0+IDAKLWRxY29tcDEwNjEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAgICAgMSAtPiAwCi1kcWNvbXAxMDYyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMAotZHFjb21wMTA2MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAgICAgICAxIC0+IDAKLWRxY29tcDEwNjQgY29tcGFyZSAxLjAwMDAwMDAwMDAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDY1IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMAotZHFjb21wMTA2NiBjb21wYXJlIDEuMDAwMDAwMDAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNjcgY29tcGFyZSAxLjAwMDAwMDAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDY4IGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMAotZHFjb21wMTA2OSBjb21wYXJlIDEuMDAwMDAgICAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNzAgY29tcGFyZSAxLjAwMDAgICAgICAgICAgICAgMSAtPiAwCi1kcWNvbXAxMDcxIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMAotZHFjb21wMTA3MiBjb21wYXJlIDEuMDAgICAgICAgICAgICAgICAxIC0+IDAKLWRxY29tcDEwNzMgY29tcGFyZSAxLjAgICAgICAgICAgICAgICAgMSAtPiAwCi0KLS0tIGNoZWNrIE1TRCBhbHdheXMgZGV0ZWN0ZWQgbm9uLXplcm8KLWRxY29tcDEwODAgY29tcGFyZSAwIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAwCi1kcWNvbXAxMDgxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRxY29tcDEwODIgY29tcGFyZSAwIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZHFjb21wMTA4MyBjb21wYXJlIDAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kcWNvbXAxMDg0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRxY29tcDEwODUgY29tcGFyZSAwIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZHFjb21wMTA4NiBjb21wYXJlIDAgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kcWNvbXAxMDg3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTEKLWRxY29tcDEwODggY29tcGFyZSAwIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAtMQotZHFjb21wMTA4OSBjb21wYXJlIDAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IC0xCi1kcWNvbXAxMDkwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMAotZHFjb21wMTA5MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRxY29tcDEwOTIgY29tcGFyZSAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi1kcWNvbXAxMDkzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotZHFjb21wMTA5NCBjb21wYXJlIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRxY29tcDEwOTUgY29tcGFyZSA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi1kcWNvbXAxMDk2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotZHFjb21wMTA5NyBjb21wYXJlIDcuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDEKLWRxY29tcDEwOTggY29tcGFyZSA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxCi1kcWNvbXAxMDk5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQotCi0tLSBOdWxsIHRlc3RzCi1kcWNvbTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFjb205OTEgY29tcGFyZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQ29tcGFyZS5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbiB0aGF0IGFsbG93cyBxdWlldCBOYU5zICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkcWNvbTAwMSBjb21wYXJlICAtMiAgLTIgIC0+IDANCitkcWNvbTAwMiBjb21wYXJlICAtMiAgLTEgIC0+IC0xDQorZHFjb20wMDMgY29tcGFyZSAgLTIgICAwICAtPiAtMQ0KK2RxY29tMDA0IGNvbXBhcmUgIC0yICAgMSAgLT4gLTENCitkcWNvbTAwNSBjb21wYXJlICAtMiAgIDIgIC0+IC0xDQorZHFjb20wMDYgY29tcGFyZSAgLTEgIC0yICAtPiAxDQorZHFjb20wMDcgY29tcGFyZSAgLTEgIC0xICAtPiAwDQorZHFjb20wMDggY29tcGFyZSAgLTEgICAwICAtPiAtMQ0KK2RxY29tMDA5IGNvbXBhcmUgIC0xICAgMSAgLT4gLTENCitkcWNvbTAxMCBjb21wYXJlICAtMSAgIDIgIC0+IC0xDQorZHFjb20wMTEgY29tcGFyZSAgIDAgIC0yICAtPiAxDQorZHFjb20wMTIgY29tcGFyZSAgIDAgIC0xICAtPiAxDQorZHFjb20wMTMgY29tcGFyZSAgIDAgICAwICAtPiAwDQorZHFjb20wMTQgY29tcGFyZSAgIDAgICAxICAtPiAtMQ0KK2RxY29tMDE1IGNvbXBhcmUgICAwICAgMiAgLT4gLTENCitkcWNvbTAxNiBjb21wYXJlICAgMSAgLTIgIC0+IDENCitkcWNvbTAxNyBjb21wYXJlICAgMSAgLTEgIC0+IDENCitkcWNvbTAxOCBjb21wYXJlICAgMSAgIDAgIC0+IDENCitkcWNvbTAxOSBjb21wYXJlICAgMSAgIDEgIC0+IDANCitkcWNvbTAyMCBjb21wYXJlICAgMSAgIDIgIC0+IC0xDQorZHFjb20wMjEgY29tcGFyZSAgIDIgIC0yICAtPiAxDQorZHFjb20wMjIgY29tcGFyZSAgIDIgIC0xICAtPiAxDQorZHFjb20wMjMgY29tcGFyZSAgIDIgICAwICAtPiAxDQorZHFjb20wMjUgY29tcGFyZSAgIDIgICAxICAtPiAxDQorZHFjb20wMjYgY29tcGFyZSAgIDIgICAyICAtPiAwDQorDQorZHFjb20wMzEgY29tcGFyZSAgLTIwICAtMjAgIC0+IDANCitkcWNvbTAzMiBjb21wYXJlICAtMjAgIC0xMCAgLT4gLTENCitkcWNvbTAzMyBjb21wYXJlICAtMjAgICAwMCAgLT4gLTENCitkcWNvbTAzNCBjb21wYXJlICAtMjAgICAxMCAgLT4gLTENCitkcWNvbTAzNSBjb21wYXJlICAtMjAgICAyMCAgLT4gLTENCitkcWNvbTAzNiBjb21wYXJlICAtMTAgIC0yMCAgLT4gMQ0KK2RxY29tMDM3IGNvbXBhcmUgIC0xMCAgLTEwICAtPiAwDQorZHFjb20wMzggY29tcGFyZSAgLTEwICAgMDAgIC0+IC0xDQorZHFjb20wMzkgY29tcGFyZSAgLTEwICAgMTAgIC0+IC0xDQorZHFjb20wNDAgY29tcGFyZSAgLTEwICAgMjAgIC0+IC0xDQorZHFjb20wNDEgY29tcGFyZSAgIDAwICAtMjAgIC0+IDENCitkcWNvbTA0MiBjb21wYXJlICAgMDAgIC0xMCAgLT4gMQ0KK2RxY29tMDQzIGNvbXBhcmUgICAwMCAgIDAwICAtPiAwDQorZHFjb20wNDQgY29tcGFyZSAgIDAwICAgMTAgIC0+IC0xDQorZHFjb20wNDUgY29tcGFyZSAgIDAwICAgMjAgIC0+IC0xDQorZHFjb20wNDYgY29tcGFyZSAgIDEwICAtMjAgIC0+IDENCitkcWNvbTA0NyBjb21wYXJlICAgMTAgIC0xMCAgLT4gMQ0KK2RxY29tMDQ4IGNvbXBhcmUgICAxMCAgIDAwICAtPiAxDQorZHFjb20wNDkgY29tcGFyZSAgIDEwICAgMTAgIC0+IDANCitkcWNvbTA1MCBjb21wYXJlICAgMTAgICAyMCAgLT4gLTENCitkcWNvbTA1MSBjb21wYXJlICAgMjAgIC0yMCAgLT4gMQ0KK2RxY29tMDUyIGNvbXBhcmUgICAyMCAgLTEwICAtPiAxDQorZHFjb20wNTMgY29tcGFyZSAgIDIwICAgMDAgIC0+IDENCitkcWNvbTA1NSBjb21wYXJlICAgMjAgICAxMCAgLT4gMQ0KK2RxY29tMDU2IGNvbXBhcmUgICAyMCAgIDIwICAtPiAwDQorDQorZHFjb20wNjEgY29tcGFyZSAgLTIuMCAgLTIuMCAgLT4gMA0KK2RxY29tMDYyIGNvbXBhcmUgIC0yLjAgIC0xLjAgIC0+IC0xDQorZHFjb20wNjMgY29tcGFyZSAgLTIuMCAgIDAuMCAgLT4gLTENCitkcWNvbTA2NCBjb21wYXJlICAtMi4wICAgMS4wICAtPiAtMQ0KK2RxY29tMDY1IGNvbXBhcmUgIC0yLjAgICAyLjAgIC0+IC0xDQorZHFjb20wNjYgY29tcGFyZSAgLTEuMCAgLTIuMCAgLT4gMQ0KK2RxY29tMDY3IGNvbXBhcmUgIC0xLjAgIC0xLjAgIC0+IDANCitkcWNvbTA2OCBjb21wYXJlICAtMS4wICAgMC4wICAtPiAtMQ0KK2RxY29tMDY5IGNvbXBhcmUgIC0xLjAgICAxLjAgIC0+IC0xDQorZHFjb20wNzAgY29tcGFyZSAgLTEuMCAgIDIuMCAgLT4gLTENCitkcWNvbTA3MSBjb21wYXJlICAgMC4wICAtMi4wICAtPiAxDQorZHFjb20wNzIgY29tcGFyZSAgIDAuMCAgLTEuMCAgLT4gMQ0KK2RxY29tMDczIGNvbXBhcmUgICAwLjAgICAwLjAgIC0+IDANCitkcWNvbTA3NCBjb21wYXJlICAgMC4wICAgMS4wICAtPiAtMQ0KK2RxY29tMDc1IGNvbXBhcmUgICAwLjAgICAyLjAgIC0+IC0xDQorZHFjb20wNzYgY29tcGFyZSAgIDEuMCAgLTIuMCAgLT4gMQ0KK2RxY29tMDc3IGNvbXBhcmUgICAxLjAgIC0xLjAgIC0+IDENCitkcWNvbTA3OCBjb21wYXJlICAgMS4wICAgMC4wICAtPiAxDQorZHFjb20wNzkgY29tcGFyZSAgIDEuMCAgIDEuMCAgLT4gMA0KK2RxY29tMDgwIGNvbXBhcmUgICAxLjAgICAyLjAgIC0+IC0xDQorZHFjb20wODEgY29tcGFyZSAgIDIuMCAgLTIuMCAgLT4gMQ0KK2RxY29tMDgyIGNvbXBhcmUgICAyLjAgIC0xLjAgIC0+IDENCitkcWNvbTA4MyBjb21wYXJlICAgMi4wICAgMC4wICAtPiAxDQorZHFjb20wODUgY29tcGFyZSAgIDIuMCAgIDEuMCAgLT4gMQ0KK2RxY29tMDg2IGNvbXBhcmUgICAyLjAgICAyLjAgIC0+IDANCisNCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQNCitkcWNvbTA5MCBjb21wYXJlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMA0KK2RxY29tMDkxIGNvbXBhcmUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQ0KK2RxY29tMDkyIGNvbXBhcmUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQorZHFjb20wOTMgY29tcGFyZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDANCisNCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCitkcWNvbTEwMCBjb21wYXJlICAgNy4wICAgIDcuMCAgICAtPiAwDQorZHFjb20xMDEgY29tcGFyZSAgIDcuMCAgICA3ICAgICAgLT4gMA0KK2RxY29tMTAyIGNvbXBhcmUgICA3ICAgICAgNy4wICAgIC0+IDANCitkcWNvbTEwMyBjb21wYXJlICAgN0UrMCAgIDcuMCAgICAtPiAwDQorZHFjb20xMDQgY29tcGFyZSAgIDcwRS0xICA3LjAgICAgLT4gMA0KK2RxY29tMTA1IGNvbXBhcmUgICAwLjdFKzEgNyAgICAgIC0+IDANCitkcWNvbTEwNiBjb21wYXJlICAgNzBFLTEgIDcgICAgICAtPiAwDQorZHFjb20xMDcgY29tcGFyZSAgIDcuMCAgICA3RSswICAgLT4gMA0KK2RxY29tMTA4IGNvbXBhcmUgICA3LjAgICAgNzBFLTEgIC0+IDANCitkcWNvbTEwOSBjb21wYXJlICAgNyAgICAgIDAuN0UrMSAtPiAwDQorZHFjb20xMTAgY29tcGFyZSAgIDcgICAgICA3MEUtMSAgLT4gMA0KKw0KK2RxY29tMTIwIGNvbXBhcmUgICA4LjAgICAgNy4wICAgIC0+IDENCitkcWNvbTEyMSBjb21wYXJlICAgOC4wICAgIDcgICAgICAtPiAxDQorZHFjb20xMjIgY29tcGFyZSAgIDggICAgICA3LjAgICAgLT4gMQ0KK2RxY29tMTIzIGNvbXBhcmUgICA4RSswICAgNy4wICAgIC0+IDENCitkcWNvbTEyNCBjb21wYXJlICAgODBFLTEgIDcuMCAgICAtPiAxDQorZHFjb20xMjUgY29tcGFyZSAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KK2RxY29tMTI2IGNvbXBhcmUgICA4MEUtMSAgNyAgICAgIC0+IDENCitkcWNvbTEyNyBjb21wYXJlICAgOC4wICAgIDdFKzAgICAtPiAxDQorZHFjb20xMjggY29tcGFyZSAgIDguMCAgICA3MEUtMSAgLT4gMQ0KK2RxY29tMTI5IGNvbXBhcmUgICA4ICAgICAgMC43RSsxICAtPiAxDQorZHFjb20xMzAgY29tcGFyZSAgIDggICAgICA3MEUtMSAgLT4gMQ0KKw0KK2RxY29tMTQwIGNvbXBhcmUgICA4LjAgICAgOS4wICAgIC0+IC0xDQorZHFjb20xNDEgY29tcGFyZSAgIDguMCAgICA5ICAgICAgLT4gLTENCitkcWNvbTE0MiBjb21wYXJlICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KK2RxY29tMTQzIGNvbXBhcmUgICA4RSswICAgOS4wICAgIC0+IC0xDQorZHFjb20xNDQgY29tcGFyZSAgIDgwRS0xICA5LjAgICAgLT4gLTENCitkcWNvbTE0NSBjb21wYXJlICAgMC44RSsxIDkgICAgICAtPiAtMQ0KK2RxY29tMTQ2IGNvbXBhcmUgICA4MEUtMSAgOSAgICAgIC0+IC0xDQorZHFjb20xNDcgY29tcGFyZSAgIDguMCAgICA5RSswICAgLT4gLTENCitkcWNvbTE0OCBjb21wYXJlICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KK2RxY29tMTQ5IGNvbXBhcmUgICA4ICAgICAgMC45RSsxIC0+IC0xDQorZHFjb20xNTAgY29tcGFyZSAgIDggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQorZHFjb20yMDAgY29tcGFyZSAgLTcuMCAgICA3LjAgICAgLT4gLTENCitkcWNvbTIwMSBjb21wYXJlICAtNy4wICAgIDcgICAgICAtPiAtMQ0KK2RxY29tMjAyIGNvbXBhcmUgIC03ICAgICAgNy4wICAgIC0+IC0xDQorZHFjb20yMDMgY29tcGFyZSAgLTdFKzAgICA3LjAgICAgLT4gLTENCitkcWNvbTIwNCBjb21wYXJlICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KK2RxY29tMjA1IGNvbXBhcmUgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQorZHFjb20yMDYgY29tcGFyZSAgLTcwRS0xICA3ICAgICAgLT4gLTENCitkcWNvbTIwNyBjb21wYXJlICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KK2RxY29tMjA4IGNvbXBhcmUgIC03LjAgICAgNzBFLTEgIC0+IC0xDQorZHFjb20yMDkgY29tcGFyZSAgLTcgICAgICAwLjdFKzEgLT4gLTENCitkcWNvbTIxMCBjb21wYXJlICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KKw0KK2RxY29tMjIwIGNvbXBhcmUgIC04LjAgICAgNy4wICAgIC0+IC0xDQorZHFjb20yMjEgY29tcGFyZSAgLTguMCAgICA3ICAgICAgLT4gLTENCitkcWNvbTIyMiBjb21wYXJlICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KK2RxY29tMjIzIGNvbXBhcmUgIC04RSswICAgNy4wICAgIC0+IC0xDQorZHFjb20yMjQgY29tcGFyZSAgLTgwRS0xICA3LjAgICAgLT4gLTENCitkcWNvbTIyNSBjb21wYXJlICAtMC44RSsxIDcgICAgICAtPiAtMQ0KK2RxY29tMjI2IGNvbXBhcmUgIC04MEUtMSAgNyAgICAgIC0+IC0xDQorZHFjb20yMjcgY29tcGFyZSAgLTguMCAgICA3RSswICAgLT4gLTENCitkcWNvbTIyOCBjb21wYXJlICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KK2RxY29tMjI5IGNvbXBhcmUgIC04ICAgICAgMC43RSsxIC0+IC0xDQorZHFjb20yMzAgY29tcGFyZSAgLTggICAgICA3MEUtMSAgLT4gLTENCisNCitkcWNvbTI0MCBjb21wYXJlICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KK2RxY29tMjQxIGNvbXBhcmUgIC04LjAgICAgOSAgICAgIC0+IC0xDQorZHFjb20yNDIgY29tcGFyZSAgLTggICAgICA5LjAgICAgLT4gLTENCitkcWNvbTI0MyBjb21wYXJlICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KK2RxY29tMjQ0IGNvbXBhcmUgIC04MEUtMSAgOS4wICAgIC0+IC0xDQorZHFjb20yNDUgY29tcGFyZSAgLTAuOEUrMSA5ICAgICAgLT4gLTENCitkcWNvbTI0NiBjb21wYXJlICAtODBFLTEgIDkgICAgICAtPiAtMQ0KK2RxY29tMjQ3IGNvbXBhcmUgIC04LjAgICAgOUUrMCAgIC0+IC0xDQorZHFjb20yNDggY29tcGFyZSAgLTguMCAgICA5MEUtMSAgLT4gLTENCitkcWNvbTI0OSBjb21wYXJlICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KK2RxY29tMjUwIGNvbXBhcmUgIC04ICAgICAgOTBFLTEgIC0+IC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KK2RxY29tMzAwIGNvbXBhcmUgICA3LjAgICAgLTcuMCAgICAtPiAxDQorZHFjb20zMDEgY29tcGFyZSAgIDcuMCAgICAtNyAgICAgIC0+IDENCitkcWNvbTMwMiBjb21wYXJlICAgNyAgICAgIC03LjAgICAgLT4gMQ0KK2RxY29tMzAzIGNvbXBhcmUgICA3RSswICAgLTcuMCAgICAtPiAxDQorZHFjb20zMDQgY29tcGFyZSAgIDcwRS0xICAtNy4wICAgIC0+IDENCitkcWNvbTMwNSBjb21wYXJlICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KK2RxY29tMzA2IGNvbXBhcmUgICA3MEUtMSAgLTcgICAgICAtPiAxDQorZHFjb20zMDcgY29tcGFyZSAgIDcuMCAgICAtN0UrMCAgIC0+IDENCitkcWNvbTMwOCBjb21wYXJlICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KK2RxY29tMzA5IGNvbXBhcmUgICA3ICAgICAgLS43RSsxICAtPiAxDQorZHFjb20zMTAgY29tcGFyZSAgIDcgICAgICAtNzBFLTEgIC0+IDENCisNCitkcWNvbTMyMCBjb21wYXJlICAgOC4wICAgIC03LjAgICAgLT4gMQ0KK2RxY29tMzIxIGNvbXBhcmUgICA4LjAgICAgLTcgICAgICAtPiAxDQorZHFjb20zMjIgY29tcGFyZSAgIDggICAgICAtNy4wICAgIC0+IDENCitkcWNvbTMyMyBjb21wYXJlICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KK2RxY29tMzI0IGNvbXBhcmUgICA4MEUtMSAgLTcuMCAgICAtPiAxDQorZHFjb20zMjUgY29tcGFyZSAgIC44RSsxICAtNyAgICAgIC0+IDENCitkcWNvbTMyNiBjb21wYXJlICAgODBFLTEgIC03ICAgICAgLT4gMQ0KK2RxY29tMzI3IGNvbXBhcmUgICA4LjAgICAgLTdFKzAgICAtPiAxDQorZHFjb20zMjggY29tcGFyZSAgIDguMCAgICAtNzBFLTEgIC0+IDENCitkcWNvbTMyOSBjb21wYXJlICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KK2RxY29tMzMwIGNvbXBhcmUgICA4ICAgICAgLTcwRS0xICAtPiAxDQorDQorZHFjb20zNDAgY29tcGFyZSAgIDguMCAgICAtOS4wICAgIC0+IDENCitkcWNvbTM0MSBjb21wYXJlICAgOC4wICAgIC05ICAgICAgLT4gMQ0KK2RxY29tMzQyIGNvbXBhcmUgICA4ICAgICAgLTkuMCAgICAtPiAxDQorZHFjb20zNDMgY29tcGFyZSAgIDhFKzAgICAtOS4wICAgIC0+IDENCitkcWNvbTM0NCBjb21wYXJlICAgODBFLTEgIC05LjAgICAgLT4gMQ0KK2RxY29tMzQ1IGNvbXBhcmUgICAuOEUrMSAgLTkgICAgICAtPiAxDQorZHFjb20zNDYgY29tcGFyZSAgIDgwRS0xICAtOSAgICAgIC0+IDENCitkcWNvbTM0NyBjb21wYXJlICAgOC4wICAgIC05RSswICAgLT4gMQ0KK2RxY29tMzQ4IGNvbXBhcmUgICA4LjAgICAgLTkwRS0xICAtPiAxDQorZHFjb20zNDkgY29tcGFyZSAgIDggICAgICAtLjlFKzEgIC0+IDENCitkcWNvbTM1MCBjb21wYXJlICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCitkcWNvbTQwMCBjb21wYXJlICAgLTcuMCAgICAtNy4wICAgIC0+IDANCitkcWNvbTQwMSBjb21wYXJlICAgLTcuMCAgICAtNyAgICAgIC0+IDANCitkcWNvbTQwMiBjb21wYXJlICAgLTcgICAgICAtNy4wICAgIC0+IDANCitkcWNvbTQwMyBjb21wYXJlICAgLTdFKzAgICAtNy4wICAgIC0+IDANCitkcWNvbTQwNCBjb21wYXJlICAgLTcwRS0xICAtNy4wICAgIC0+IDANCitkcWNvbTQwNSBjb21wYXJlICAgLS43RSsxICAtNyAgICAgIC0+IDANCitkcWNvbTQwNiBjb21wYXJlICAgLTcwRS0xICAtNyAgICAgIC0+IDANCitkcWNvbTQwNyBjb21wYXJlICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCitkcWNvbTQwOCBjb21wYXJlICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCitkcWNvbTQwOSBjb21wYXJlICAgLTcgICAgICAtLjdFKzEgIC0+IDANCitkcWNvbTQxMCBjb21wYXJlICAgLTcgICAgICAtNzBFLTEgIC0+IDANCisNCitkcWNvbTQyMCBjb21wYXJlICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQorZHFjb200MjEgY29tcGFyZSAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KK2RxY29tNDIyIGNvbXBhcmUgICAtOCAgICAgIC03LjAgICAgLT4gLTENCitkcWNvbTQyMyBjb21wYXJlICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQorZHFjb200MjQgY29tcGFyZSAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KK2RxY29tNDI1IGNvbXBhcmUgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCitkcWNvbTQyNiBjb21wYXJlICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQorZHFjb200MjcgY29tcGFyZSAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KK2RxY29tNDI4IGNvbXBhcmUgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCitkcWNvbTQyOSBjb21wYXJlICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQorZHFjb200MzAgY29tcGFyZSAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2RxY29tNDQwIGNvbXBhcmUgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KK2RxY29tNDQxIGNvbXBhcmUgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KK2RxY29tNDQyIGNvbXBhcmUgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KK2RxY29tNDQzIGNvbXBhcmUgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RxY29tNDQ0IGNvbXBhcmUgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KK2RxY29tNDQ1IGNvbXBhcmUgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KK2RxY29tNDQ2IGNvbXBhcmUgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KK2RxY29tNDQ3IGNvbXBhcmUgICAtOC4wICAgIC05RSswICAgLT4gMQ0KK2RxY29tNDQ4IGNvbXBhcmUgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KK2RxY29tNDQ5IGNvbXBhcmUgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RxY29tNDUwIGNvbXBhcmUgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KK2RxY29tNDUxIGNvbXBhcmUgICAgICAxLjAgICAgICAgMC4xICAtPiAxDQorZHFjb200NTIgY29tcGFyZSAgICAgIDAuMSAgICAgICAxLjAgIC0+IC0xDQorZHFjb200NTMgY29tcGFyZSAgICAgMTAuMCAgICAgICAwLjEgIC0+IDENCitkcWNvbTQ1NCBjb21wYXJlICAgICAgMC4xICAgICAgMTAuMCAgLT4gLTENCitkcWNvbTQ1NSBjb21wYXJlICAgICAgMTAwICAgICAgIDEuMCAgLT4gMQ0KK2RxY29tNDU2IGNvbXBhcmUgICAgICAxLjAgICAgICAgMTAwICAtPiAtMQ0KK2RxY29tNDU3IGNvbXBhcmUgICAgIDEwMDAgICAgICAxMC4wICAtPiAxDQorZHFjb200NTggY29tcGFyZSAgICAgMTAuMCAgICAgIDEwMDAgIC0+IC0xDQorZHFjb200NTkgY29tcGFyZSAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDENCitkcWNvbTQ2MCBjb21wYXJlICAgIDEwMC4wICAgICAxMDAwMCAgLT4gLTENCitkcWNvbTQ2MSBjb21wYXJlICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMQ0KK2RxY29tNDYyIGNvbXBhcmUgICAxMDAwLjAgICAgMTAwMDAwICAtPiAtMQ0KK2RxY29tNDYzIGNvbXBhcmUgIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxDQorZHFjb200NjQgY29tcGFyZSAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IC0xDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorZHFjb200NzMgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY29tNDc0IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KK2RxY29tNDc1IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQorZHFjb200NzYgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KK2RxY29tNDc3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY29tNDc4IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQorZHFjb200NzkgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY29tNDgwIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KK2RxY29tNDgxIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwDQorZHFjb200ODIgY29tcGFyZSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KK2RxY29tNDgzIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY29tNDg3IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDANCitkcWNvbTQ4OCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFLTg5IC0+IDANCitkcWNvbTQ4OSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUrODkgLT4gMA0KK2RxY29tNDkwIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDANCitkcWNvbTQ5MSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFKzg5IC0+IDANCitkcWNvbTQ5MiBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUtODkgLT4gMA0KK2RxY29tNDkzIGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDANCitkcWNvbTQ5NCBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFLTg5IC0+IDANCitkcWNvbTQ5NSBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUrODkgLT4gMA0KK2RxY29tNDk2IGNvbXBhcmUgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDANCitkcWNvbTQ5NyBjb21wYXJlIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorZHFjb201MDAgY29tcGFyZSAgICAxICAgICAxRS0xNSAgICAtPiAxDQorZHFjb201MDEgY29tcGFyZSAgICAxICAgICAxRS0xNCAgICAtPiAxDQorZHFjb201MDIgY29tcGFyZSAgICAxICAgICAxRS0xMyAgICAtPiAxDQorZHFjb201MDMgY29tcGFyZSAgICAxICAgICAxRS0xMiAgICAtPiAxDQorZHFjb201MDQgY29tcGFyZSAgICAxICAgICAxRS0xMSAgICAtPiAxDQorZHFjb201MDUgY29tcGFyZSAgICAxICAgICAxRS0xMCAgICAtPiAxDQorZHFjb201MDYgY29tcGFyZSAgICAxICAgICAxRS05ICAgICAtPiAxDQorZHFjb201MDcgY29tcGFyZSAgICAxICAgICAxRS04ICAgICAtPiAxDQorZHFjb201MDggY29tcGFyZSAgICAxICAgICAxRS03ICAgICAtPiAxDQorZHFjb201MDkgY29tcGFyZSAgICAxICAgICAxRS02ICAgICAtPiAxDQorZHFjb201MTAgY29tcGFyZSAgICAxICAgICAxRS01ICAgICAtPiAxDQorZHFjb201MTEgY29tcGFyZSAgICAxICAgICAxRS00ICAgICAtPiAxDQorZHFjb201MTIgY29tcGFyZSAgICAxICAgICAxRS0zICAgICAtPiAxDQorZHFjb201MTMgY29tcGFyZSAgICAxICAgICAxRS0yICAgICAtPiAxDQorZHFjb201MTQgY29tcGFyZSAgICAxICAgICAxRS0xICAgICAtPiAxDQorZHFjb201MTUgY29tcGFyZSAgICAxICAgICAxRS0wICAgICAtPiAwDQorZHFjb201MTYgY29tcGFyZSAgICAxICAgICAxRSsxICAgICAtPiAtMQ0KK2RxY29tNTE3IGNvbXBhcmUgICAgMSAgICAgMUUrMiAgICAgLT4gLTENCitkcWNvbTUxOCBjb21wYXJlICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQorZHFjb201MTkgY29tcGFyZSAgICAxICAgICAxRSs0ICAgICAtPiAtMQ0KK2RxY29tNTIxIGNvbXBhcmUgICAgMSAgICAgMUUrNSAgICAgLT4gLTENCitkcWNvbTUyMiBjb21wYXJlICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQorZHFjb201MjMgY29tcGFyZSAgICAxICAgICAxRSs3ICAgICAtPiAtMQ0KK2RxY29tNTI0IGNvbXBhcmUgICAgMSAgICAgMUUrOCAgICAgLT4gLTENCitkcWNvbTUyNSBjb21wYXJlICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQorZHFjb201MjYgY29tcGFyZSAgICAxICAgICAxRSsxMCAgICAtPiAtMQ0KK2RxY29tNTI3IGNvbXBhcmUgICAgMSAgICAgMUUrMTEgICAgLT4gLTENCitkcWNvbTUyOCBjb21wYXJlICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQorZHFjb201MjkgY29tcGFyZSAgICAxICAgICAxRSsxMyAgICAtPiAtMQ0KK2RxY29tNTMwIGNvbXBhcmUgICAgMSAgICAgMUUrMTQgICAgLT4gLTENCitkcWNvbTUzMSBjb21wYXJlICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQorLS0gTFIgc3dhcA0KK2RxY29tNTQwIGNvbXBhcmUgICAgMUUtMTUgIDEgICAgICAgLT4gLTENCitkcWNvbTU0MSBjb21wYXJlICAgIDFFLTE0ICAxICAgICAgIC0+IC0xDQorZHFjb201NDIgY29tcGFyZSAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KK2RxY29tNTQzIGNvbXBhcmUgICAgMUUtMTIgIDEgICAgICAgLT4gLTENCitkcWNvbTU0NCBjb21wYXJlICAgIDFFLTExICAxICAgICAgIC0+IC0xDQorZHFjb201NDUgY29tcGFyZSAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KK2RxY29tNTQ2IGNvbXBhcmUgICAgMUUtOSAgIDEgICAgICAgLT4gLTENCitkcWNvbTU0NyBjb21wYXJlICAgIDFFLTggICAxICAgICAgIC0+IC0xDQorZHFjb201NDggY29tcGFyZSAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KK2RxY29tNTQ5IGNvbXBhcmUgICAgMUUtNiAgIDEgICAgICAgLT4gLTENCitkcWNvbTU1MCBjb21wYXJlICAgIDFFLTUgICAxICAgICAgIC0+IC0xDQorZHFjb201NTEgY29tcGFyZSAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KK2RxY29tNTUyIGNvbXBhcmUgICAgMUUtMyAgIDEgICAgICAgLT4gLTENCitkcWNvbTU1MyBjb21wYXJlICAgIDFFLTIgICAxICAgICAgIC0+IC0xDQorZHFjb201NTQgY29tcGFyZSAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KK2RxY29tNTU1IGNvbXBhcmUgICAgMUUtMCAgIDEgICAgICAgLT4gIDANCitkcWNvbTU1NiBjb21wYXJlICAgIDFFKzEgICAxICAgICAgIC0+ICAxDQorZHFjb201NTcgY29tcGFyZSAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KK2RxY29tNTU4IGNvbXBhcmUgICAgMUUrMyAgIDEgICAgICAgLT4gIDENCitkcWNvbTU1OSBjb21wYXJlICAgIDFFKzQgICAxICAgICAgIC0+ICAxDQorZHFjb201NjEgY29tcGFyZSAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KK2RxY29tNTYyIGNvbXBhcmUgICAgMUUrNiAgIDEgICAgICAgLT4gIDENCitkcWNvbTU2MyBjb21wYXJlICAgIDFFKzcgICAxICAgICAgIC0+ICAxDQorZHFjb201NjQgY29tcGFyZSAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KK2RxY29tNTY1IGNvbXBhcmUgICAgMUUrOSAgIDEgICAgICAgLT4gIDENCitkcWNvbTU2NiBjb21wYXJlICAgIDFFKzEwICAxICAgICAgIC0+ICAxDQorZHFjb201NjcgY29tcGFyZSAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KK2RxY29tNTY4IGNvbXBhcmUgICAgMUUrMTIgIDEgICAgICAgLT4gIDENCitkcWNvbTU2OSBjb21wYXJlICAgIDFFKzEzICAxICAgICAgIC0+ICAxDQorZHFjb201NzAgY29tcGFyZSAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KK2RxY29tNTcxIGNvbXBhcmUgICAgMUUrMTUgIDEgICAgICAgLT4gIDENCistLSBzaW1pbGFyIHdpdGggYSB1c2VmdWwgY29lZmZpY2llbnQsIG9uZSBzaWRlIG9ubHkNCitkcWNvbTU4MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KK2RxY29tNTgxIGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxDQorZHFjb201ODIgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgIC0+IDENCitkcWNvbTU4MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KK2RxY29tNTg0IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxDQorZHFjb201ODUgY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgIC0+IDENCitkcWNvbTU4NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KK2RxY29tNTg3IGNvbXBhcmUgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxDQorZHFjb201ODggY29tcGFyZSAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgIC0+IDENCitkcWNvbTU4OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCitkcWNvbTU5MCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTENCitkcWNvbTU5MSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNCAgICAgLT4gLTENCitkcWNvbTU5MiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCitkcWNvbTU5MyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTENCitkcWNvbTU5NCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMSAgICAgLT4gLTENCitkcWNvbTU5NSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCitkcWNvbTU5NiBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTENCitkcWNvbTU5NyBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMiAgICAgLT4gLTENCitkcWNvbTU5OCBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCitkcWNvbTU5OSBjb21wYXJlICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTENCisNCistLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcw0KK2RxY29tNjAwIGNvbXBhcmUgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkcWNvbTYwMSBjb21wYXJlICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb202MDIgY29tcGFyZSAgIDEyLjAwICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RxY29tNjAzIGNvbXBhcmUgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkcWNvbTYwNCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb202MDUgY29tcGFyZSAgIDEyLjAwMDAwICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RxY29tNjA2IGNvbXBhcmUgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTENCitkcWNvbTYwNyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb202MDggY29tcGFyZSAgIDEyLjAwMDAwMDAwICAgMTIuMjM0NSAtPiAtMQ0KK2RxY29tNjA5IGNvbXBhcmUgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTENCitkcWNvbTYxMCBjb21wYXJlICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQorZHFjb202MTEgY29tcGFyZSAgIDEyLjEyMzQgMTIuMCAgICAgICAgICAtPiAgMQ0KK2RxY29tNjEyIGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDENCitkcWNvbTYxMyBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQorZHFjb202MTQgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMCAgICAgICAtPiAgMQ0KK2RxY29tNjE1IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDENCitkcWNvbTYxNiBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQorZHFjb202MTcgY29tcGFyZSAgIDEyLjEyMzQgMTIuMDAwMDAwMCAgICAtPiAgMQ0KK2RxY29tNjE4IGNvbXBhcmUgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDENCitkcWNvbTYxOSBjb21wYXJlICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQorZHFjb202MjAgY29tcGFyZSAgLTEyICAgICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RxY29tNjIxIGNvbXBhcmUgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkcWNvbTYyMiBjb21wYXJlICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb202MjMgY29tcGFyZSAgLTEyLjAwMCAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RxY29tNjI0IGNvbXBhcmUgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDENCitkcWNvbTYyNSBjb21wYXJlICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb202MjYgY29tcGFyZSAgLTEyLjAwMDAwMCAgICAtMTIuMjM0NSAtPiAgMQ0KK2RxY29tNjI3IGNvbXBhcmUgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDENCitkcWNvbTYyOCBjb21wYXJlICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb202MjkgY29tcGFyZSAgLTEyLjAwMDAwMDAwMCAtMTIuMjM0NSAtPiAgMQ0KK2RxY29tNjMwIGNvbXBhcmUgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTENCitkcWNvbTYzMSBjb21wYXJlICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQorZHFjb202MzIgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwICAgICAgICAtPiAtMQ0KK2RxY29tNjMzIGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTENCitkcWNvbTYzNCBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQorZHFjb202MzUgY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwICAgICAtPiAtMQ0KK2RxY29tNjM2IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTENCitkcWNvbTYzNyBjb21wYXJlICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQorZHFjb202MzggY29tcGFyZSAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwICAtPiAtMQ0KK2RxY29tNjM5IGNvbXBhcmUgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTENCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RxY29tNjQwIGNvbXBhcmUgICAwICAgICAwICAgLT4gMA0KK2RxY29tNjQxIGNvbXBhcmUgICAwICAgIC0wICAgLT4gMA0KK2RxY29tNjQyIGNvbXBhcmUgICAwICAgIC0wLjAgLT4gMA0KK2RxY29tNjQzIGNvbXBhcmUgICAwICAgICAwLjAgLT4gMA0KK2RxY29tNjQ0IGNvbXBhcmUgIC0wICAgICAwICAgLT4gMA0KK2RxY29tNjQ1IGNvbXBhcmUgIC0wICAgIC0wICAgLT4gMA0KK2RxY29tNjQ2IGNvbXBhcmUgIC0wICAgIC0wLjAgLT4gMA0KK2RxY29tNjQ3IGNvbXBhcmUgIC0wICAgICAwLjAgLT4gMA0KK2RxY29tNjQ4IGNvbXBhcmUgICAwLjAgICAwICAgLT4gMA0KK2RxY29tNjQ5IGNvbXBhcmUgICAwLjAgIC0wICAgLT4gMA0KK2RxY29tNjUwIGNvbXBhcmUgICAwLjAgIC0wLjAgLT4gMA0KK2RxY29tNjUxIGNvbXBhcmUgICAwLjAgICAwLjAgLT4gMA0KK2RxY29tNjUyIGNvbXBhcmUgIC0wLjAgICAwICAgLT4gMA0KK2RxY29tNjUzIGNvbXBhcmUgIC0wLjAgIC0wICAgLT4gMA0KK2RxY29tNjU0IGNvbXBhcmUgIC0wLjAgIC0wLjAgLT4gMA0KK2RxY29tNjU1IGNvbXBhcmUgIC0wLjAgICAwLjAgLT4gMA0KKw0KK2RxY29tNjU2IGNvbXBhcmUgIC0wRTEgICAwLjAgLT4gMA0KK2RxY29tNjU3IGNvbXBhcmUgIC0wRTIgICAwLjAgLT4gMA0KK2RxY29tNjU4IGNvbXBhcmUgICAwRTEgICAwLjAgLT4gMA0KK2RxY29tNjU5IGNvbXBhcmUgICAwRTIgICAwLjAgLT4gMA0KK2RxY29tNjYwIGNvbXBhcmUgIC0wRTEgICAwICAgLT4gMA0KK2RxY29tNjYxIGNvbXBhcmUgIC0wRTIgICAwICAgLT4gMA0KK2RxY29tNjYyIGNvbXBhcmUgICAwRTEgICAwICAgLT4gMA0KK2RxY29tNjYzIGNvbXBhcmUgICAwRTIgICAwICAgLT4gMA0KK2RxY29tNjY0IGNvbXBhcmUgIC0wRTEgIC0wRTEgLT4gMA0KK2RxY29tNjY1IGNvbXBhcmUgIC0wRTIgIC0wRTEgLT4gMA0KK2RxY29tNjY2IGNvbXBhcmUgICAwRTEgIC0wRTEgLT4gMA0KK2RxY29tNjY3IGNvbXBhcmUgICAwRTIgIC0wRTEgLT4gMA0KK2RxY29tNjY4IGNvbXBhcmUgIC0wRTEgIC0wRTIgLT4gMA0KK2RxY29tNjY5IGNvbXBhcmUgIC0wRTIgIC0wRTIgLT4gMA0KK2RxY29tNjcwIGNvbXBhcmUgICAwRTEgIC0wRTIgLT4gMA0KK2RxY29tNjcxIGNvbXBhcmUgICAwRTIgIC0wRTIgLT4gMA0KK2RxY29tNjcyIGNvbXBhcmUgIC0wRTEgICAwRTEgLT4gMA0KK2RxY29tNjczIGNvbXBhcmUgIC0wRTIgICAwRTEgLT4gMA0KK2RxY29tNjc0IGNvbXBhcmUgICAwRTEgICAwRTEgLT4gMA0KK2RxY29tNjc1IGNvbXBhcmUgICAwRTIgICAwRTEgLT4gMA0KK2RxY29tNjc2IGNvbXBhcmUgIC0wRTEgICAwRTIgLT4gMA0KK2RxY29tNjc3IGNvbXBhcmUgIC0wRTIgICAwRTIgLT4gMA0KK2RxY29tNjc4IGNvbXBhcmUgICAwRTEgICAwRTIgLT4gMA0KK2RxY29tNjc5IGNvbXBhcmUgICAwRTIgICAwRTIgLT4gMA0KKw0KKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCitkcWNvbTY4MCBjb21wYXJlICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCitkcWNvbTY4MSBjb21wYXJlICAgMTIgICAgMTIuMCAgICAgICAgIC0+IDANCitkcWNvbTY4MiBjb21wYXJlICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDANCitkcWNvbTY4MyBjb21wYXJlICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDANCitkcWNvbTY4NCBjb21wYXJlICAgMTIgICAgMTIuMDAwMCAgICAgIC0+IDANCitkcWNvbTY4NSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDANCitkcWNvbTY4NiBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDANCitkcWNvbTY4NyBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMCAgIC0+IDANCitkcWNvbTY4OCBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDANCitkcWNvbTY4OSBjb21wYXJlICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDANCitkcWNvbTY5MCBjb21wYXJlICAgMTIgICAgICAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5MSBjb21wYXJlICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5MiBjb21wYXJlICAgMTIuMDAgICAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5MyBjb21wYXJlICAgMTIuMDAwICAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5NCBjb21wYXJlICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5NSBjb21wYXJlICAgMTIuMDAwMDAgICAgICAgIDEyIC0+IDANCitkcWNvbTY5NiBjb21wYXJlICAgMTIuMDAwMDAwICAgICAgIDEyIC0+IDANCitkcWNvbTY5NyBjb21wYXJlICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDANCitkcWNvbTY5OCBjb21wYXJlICAgMTIuMDAwMDAwMDAgICAgIDEyIC0+IDANCitkcWNvbTY5OSBjb21wYXJlICAgMTIuMDAwMDAwMDAwICAgIDEyIC0+IDANCisNCistLSBmaXJzdCwgc2Vjb25kLCAmIGxhc3QgZGlnaXQNCitkcWNvbTcwMCBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU1IC0+IDENCitkcWNvbTcwMSBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCitkcWNvbTcwMiBjb21wYXJlICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU3IC0+IC0xDQorZHFjb203MDMgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMDIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAxDQorZHFjb203MDQgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQorZHFjb203MDUgY29tcGFyZSAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMjIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQ0KK2RxY29tNzA2IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEwMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQ0KK2RxY29tNzA3IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KK2RxY29tNzA4IGNvbXBhcmUgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTENCisNCistLSBtaXNjZWxsYW5lb3VzDQorZHFjb203MjEgY29tcGFyZSAxMjM0NTY3ODAwMCAxIC0+IDENCitkcWNvbTcyMiBjb21wYXJlIDEgMTIzNDU2NzgwMDAgLT4gLTENCitkcWNvbTcyMyBjb21wYXJlIDEyMzQ1Njc4MDAgIDEgLT4gMQ0KK2RxY29tNzI0IGNvbXBhcmUgMSAxMjM0NTY3ODAwICAtPiAtMQ0KK2RxY29tNzI1IGNvbXBhcmUgMTIzNDU2Nzg5MCAgMSAtPiAxDQorZHFjb203MjYgY29tcGFyZSAxIDEyMzQ1Njc4OTAgIC0+IC0xDQorZHFjb203MjcgY29tcGFyZSAxMjM0NTY3ODkxICAxIC0+IDENCitkcWNvbTcyOCBjb21wYXJlIDEgMTIzNDU2Nzg5MSAgLT4gLTENCitkcWNvbTcyOSBjb21wYXJlIDEyMzQ1Njc4OTAxIDEgLT4gMQ0KK2RxY29tNzMwIGNvbXBhcmUgMSAxMjM0NTY3ODkwMSAtPiAtMQ0KK2RxY29tNzMxIGNvbXBhcmUgMTIzNDU2Nzg5NiAgMSAtPiAxDQorZHFjb203MzIgY29tcGFyZSAxIDEyMzQ1Njc4OTYgIC0+IC0xDQorDQorLS0gcmVzaWR1ZSBjYXNlcyBhdCBsb3dlciBwcmVjaXNpb24NCitkcWNvbTc0MCBjb21wYXJlICAxICAwLjk5OTk5OTkgIC0+IDENCitkcWNvbTc0MSBjb21wYXJlICAxICAwLjk5OTk5OSAgIC0+IDENCitkcWNvbTc0MiBjb21wYXJlICAxICAwLjk5OTk5ICAgIC0+IDENCitkcWNvbTc0MyBjb21wYXJlICAxICAxLjAwMDAgICAgIC0+IDANCitkcWNvbTc0NCBjb21wYXJlICAxICAxLjAwMDAxICAgIC0+IC0xDQorZHFjb203NDUgY29tcGFyZSAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KK2RxY29tNzQ2IGNvbXBhcmUgIDEgIDEuMDAwMDAwMSAgLT4gLTENCitkcWNvbTc1MCBjb21wYXJlICAwLjk5OTk5OTkgIDEgIC0+IC0xDQorZHFjb203NTEgY29tcGFyZSAgMC45OTk5OTkgICAxICAtPiAtMQ0KK2RxY29tNzUyIGNvbXBhcmUgIDAuOTk5OTkgICAgMSAgLT4gLTENCitkcWNvbTc1MyBjb21wYXJlICAxLjAwMDAgICAgIDEgIC0+IDANCitkcWNvbTc1NCBjb21wYXJlICAxLjAwMDAxICAgIDEgIC0+IDENCitkcWNvbTc1NSBjb21wYXJlICAxLjAwMDAwMSAgIDEgIC0+IDENCitkcWNvbTc1NiBjb21wYXJlICAxLjAwMDAwMDEgIDEgIC0+IDENCisNCistLSBTcGVjaWFscw0KK2RxY29tNzgwIGNvbXBhcmUgIEluZiAgLUluZiAgIC0+ICAxDQorZHFjb203ODEgY29tcGFyZSAgSW5mICAtMTAwMCAgLT4gIDENCitkcWNvbTc4MiBjb21wYXJlICBJbmYgIC0xICAgICAtPiAgMQ0KK2RxY29tNzgzIGNvbXBhcmUgIEluZiAgLTAgICAgIC0+ICAxDQorZHFjb203ODQgY29tcGFyZSAgSW5mICAgMCAgICAgLT4gIDENCitkcWNvbTc4NSBjb21wYXJlICBJbmYgICAxICAgICAtPiAgMQ0KK2RxY29tNzg2IGNvbXBhcmUgIEluZiAgIDEwMDAgIC0+ICAxDQorZHFjb203ODcgY29tcGFyZSAgSW5mICAgSW5mICAgLT4gIDANCitkcWNvbTc4OCBjb21wYXJlIC0xMDAwICBJbmYgICAtPiAtMQ0KK2RxY29tNzg5IGNvbXBhcmUgLUluZiAgIEluZiAgIC0+IC0xDQorZHFjb203OTAgY29tcGFyZSAtMSAgICAgSW5mICAgLT4gLTENCitkcWNvbTc5MSBjb21wYXJlIC0wICAgICBJbmYgICAtPiAtMQ0KK2RxY29tNzkyIGNvbXBhcmUgIDAgICAgIEluZiAgIC0+IC0xDQorZHFjb203OTMgY29tcGFyZSAgMSAgICAgSW5mICAgLT4gLTENCitkcWNvbTc5NCBjb21wYXJlICAxMDAwICBJbmYgICAtPiAtMQ0KK2RxY29tNzk1IGNvbXBhcmUgIEluZiAgIEluZiAgIC0+ICAwDQorDQorZHFjb204MDAgY29tcGFyZSAtSW5mICAtSW5mICAgLT4gIDANCitkcWNvbTgwMSBjb21wYXJlIC1JbmYgIC0xMDAwICAtPiAtMQ0KK2RxY29tODAyIGNvbXBhcmUgLUluZiAgLTEgICAgIC0+IC0xDQorZHFjb204MDMgY29tcGFyZSAtSW5mICAtMCAgICAgLT4gLTENCitkcWNvbTgwNCBjb21wYXJlIC1JbmYgICAwICAgICAtPiAtMQ0KK2RxY29tODA1IGNvbXBhcmUgLUluZiAgIDEgICAgIC0+IC0xDQorZHFjb204MDYgY29tcGFyZSAtSW5mICAgMTAwMCAgLT4gLTENCitkcWNvbTgwNyBjb21wYXJlIC1JbmYgICBJbmYgICAtPiAtMQ0KK2RxY29tODA4IGNvbXBhcmUgLUluZiAgLUluZiAgIC0+ICAwDQorZHFjb204MDkgY29tcGFyZSAtMTAwMCAtSW5mICAgLT4gIDENCitkcWNvbTgxMCBjb21wYXJlIC0xICAgIC1JbmYgICAtPiAgMQ0KK2RxY29tODExIGNvbXBhcmUgLTAgICAgLUluZiAgIC0+ICAxDQorZHFjb204MTIgY29tcGFyZSAgMCAgICAtSW5mICAgLT4gIDENCitkcWNvbTgxMyBjb21wYXJlICAxICAgIC1JbmYgICAtPiAgMQ0KK2RxY29tODE0IGNvbXBhcmUgIDEwMDAgLUluZiAgIC0+ICAxDQorZHFjb204MTUgY29tcGFyZSAgSW5mICAtSW5mICAgLT4gIDENCisNCitkcWNvbTgyMSBjb21wYXJlICBOYU4gLUluZiAgICAtPiAgTmFODQorZHFjb204MjIgY29tcGFyZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2RxY29tODIzIGNvbXBhcmUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkcWNvbTgyNCBjb21wYXJlICBOYU4gLTAgICAgICAtPiAgTmFODQorZHFjb204MjUgY29tcGFyZSAgTmFOICAwICAgICAgLT4gIE5hTg0KK2RxY29tODI2IGNvbXBhcmUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkcWNvbTgyNyBjb21wYXJlICBOYU4gIDEwMDAgICAtPiAgTmFODQorZHFjb204MjggY29tcGFyZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2RxY29tODI5IGNvbXBhcmUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkcWNvbTgzMCBjb21wYXJlIC1JbmYgIE5hTiAgICAtPiAgTmFODQorZHFjb204MzEgY29tcGFyZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RxY29tODMyIGNvbXBhcmUgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkcWNvbTgzMyBjb21wYXJlIC0wICAgIE5hTiAgICAtPiAgTmFODQorZHFjb204MzQgY29tcGFyZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2RxY29tODM1IGNvbXBhcmUgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkcWNvbTgzNiBjb21wYXJlICAxMDAwIE5hTiAgICAtPiAgTmFODQorZHFjb204MzcgY29tcGFyZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KK2RxY29tODM4IGNvbXBhcmUgLU5hTiAtTmFOICAgIC0+IC1OYU4NCitkcWNvbTgzOSBjb21wYXJlICtOYU4gLU5hTiAgICAtPiAgTmFODQorZHFjb204NDAgY29tcGFyZSAtTmFOICtOYU4gICAgLT4gLU5hTg0KKw0KK2RxY29tODQxIGNvbXBhcmUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NDIgY29tcGFyZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg0MyBjb21wYXJlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODQ0IGNvbXBhcmUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NDUgY29tcGFyZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg0NiBjb21wYXJlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODQ3IGNvbXBhcmUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NDggY29tcGFyZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg0OSBjb21wYXJlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODUwIGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NTEgY29tcGFyZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg1MiBjb21wYXJlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODUzIGNvbXBhcmUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NTQgY29tcGFyZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg1NSBjb21wYXJlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODU2IGNvbXBhcmUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjb204NTcgY29tcGFyZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNvbTg1OCBjb21wYXJlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODU5IGNvbXBhcmUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxY29tODYwIGNvbXBhcmUgIE5hTjkgLUluZiAgIC0+ICBOYU45DQorZHFjb204NjEgY29tcGFyZSAgTmFOOCAgOTk5ICAgLT4gIE5hTjgNCitkcWNvbTg2MiBjb21wYXJlICBOYU43NyBJbmYgICAtPiAgTmFONzcNCitkcWNvbTg2MyBjb21wYXJlIC1OYU42NyBOYU41ICAtPiAtTmFONjcNCitkcWNvbTg2NCBjb21wYXJlIC1JbmYgIC1OYU40ICAtPiAtTmFONA0KK2RxY29tODY1IGNvbXBhcmUgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMw0KK2RxY29tODY2IGNvbXBhcmUgIEluZiAgIE5hTjIgIC0+ICBOYU4yDQorZHFjb204NjcgY29tcGFyZSAtTmFONDEgLU5hTjQyIC0+IC1OYU40MQ0KK2RxY29tODY4IGNvbXBhcmUgK05hTjQxIC1OYU40MiAtPiAgTmFONDENCitkcWNvbTg2OSBjb21wYXJlIC1OYU40MSArTmFONDIgLT4gLU5hTjQxDQorZHFjb204NzAgY29tcGFyZSArTmFONDEgK05hTjQyIC0+ICBOYU40MQ0KKw0KK2RxY29tODcxIGNvbXBhcmUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODcyIGNvbXBhcmUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODczIGNvbXBhcmUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc0IGNvbXBhcmUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc1IGNvbXBhcmUgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc2IGNvbXBhcmUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc3IGNvbXBhcmUgIDA4OCAgICBzTmFOODEgIC0+ICBOYU44MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc4IGNvbXBhcmUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tODc5IGNvbXBhcmUgIE5hTiAgIC1zTmFOODkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHdpZGUgcmFuZ2UNCitkcWNvbTg4MCBjb21wYXJlICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTENCitkcWNvbTg4MSBjb21wYXJlIDlFKzYxNDQgKzEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCitkcWNvbTg4MiBjb21wYXJlICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDENCitkcWNvbTg4MyBjb21wYXJlIDlFLTYxNDMgKzAuMTAwICAgICAgICAgICAgICAgLT4gLTENCitkcWNvbTg4NSBjb21wYXJlIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzYxNDQgLT4gLTENCitkcWNvbTg4NiBjb21wYXJlIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDENCitkcWNvbTg4NyBjb21wYXJlIC0wLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gLTENCitkcWNvbTg4OCBjb21wYXJlIDlFLTYxNDMgLTAuMTAwICAgICAgICAgICAgICAgLT4gIDENCisNCistLSBzaWducw0KK2RxY29tOTAxIGNvbXBhcmUgIDFlKzc3ICAxZSsxMSAtPiAgMQ0KK2RxY29tOTAyIGNvbXBhcmUgIDFlKzc3IC0xZSsxMSAtPiAgMQ0KK2RxY29tOTAzIGNvbXBhcmUgLTFlKzc3ICAxZSsxMSAtPiAtMQ0KK2RxY29tOTA0IGNvbXBhcmUgLTFlKzc3IC0xZSsxMSAtPiAtMQ0KK2RxY29tOTA1IGNvbXBhcmUgIDFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RxY29tOTA2IGNvbXBhcmUgIDFlLTc3IC0xZS0xMSAtPiAgMQ0KK2RxY29tOTA3IGNvbXBhcmUgLTFlLTc3ICAxZS0xMSAtPiAtMQ0KK2RxY29tOTA4IGNvbXBhcmUgLTFlLTc3IC0xZS0xMSAtPiAgMQ0KKw0KKy0tIGZ1bGwgYWxpZ25tZW50IHJhbmdlLCBib3RoIHdheXMNCitkcWNvbXAxMDAxIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KK2RxY29tcDEwMDIgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiAwDQorZHFjb21wMTAwMyBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIC0+IDANCitkcWNvbXAxMDA0IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgLT4gMA0KK2RxY29tcDEwMDUgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAtPiAwDQorZHFjb21wMTAwNiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDANCitkcWNvbXAxMDA3IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgLT4gMA0KK2RxY29tcDEwMDggY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAtPiAwDQorZHFjb21wMTAwOSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDANCitkcWNvbXAxMDEwIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgLT4gMA0KK2RxY29tcDEwMTEgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAtPiAwDQorZHFjb21wMTAxMiBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgIC0+IDANCitkcWNvbXAxMDEzIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgLT4gMA0KK2RxY29tcDEwMTQgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwDQorZHFjb21wMTAxNSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgIC0+IDANCitkcWNvbXAxMDE2IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgLT4gMA0KK2RxY29tcDEwMTcgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgICAtPiAwDQorZHFjb21wMTAxOCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgIC0+IDANCitkcWNvbXAxMDE5IGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KK2RxY29tcDEwMjAgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAwMDAgICAtPiAwDQorZHFjb21wMTAyMSBjb21wYXJlIDEgMS4wMDAwMDAwMDAwMDAwICAgIC0+IDANCitkcWNvbXAxMDIyIGNvbXBhcmUgMSAxLjAwMDAwMDAwMDAwMCAgICAgLT4gMA0KK2RxY29tcDEwMjMgY29tcGFyZSAxIDEuMDAwMDAwMDAwMDAgICAgICAtPiAwDQorZHFjb21wMTAyNCBjb21wYXJlIDEgMS4wMDAwMDAwMDAwICAgICAgIC0+IDANCitkcWNvbXAxMDI1IGNvbXBhcmUgMSAxLjAwMDAwMDAwMCAgICAgICAgLT4gMA0KK2RxY29tcDEwMjYgY29tcGFyZSAxIDEuMDAwMDAwMDAgICAgICAgICAtPiAwDQorZHFjb21wMTAyNyBjb21wYXJlIDEgMS4wMDAwMDAwICAgICAgICAgIC0+IDANCitkcWNvbXAxMDI4IGNvbXBhcmUgMSAxLjAwMDAwMCAgICAgICAgICAgLT4gMA0KK2RxY29tcDEwMjkgY29tcGFyZSAxIDEuMDAwMDAgICAgICAgICAgICAtPiAwDQorZHFjb21wMTAzMCBjb21wYXJlIDEgMS4wMDAwICAgICAgICAgICAgIC0+IDANCitkcWNvbXAxMDMxIGNvbXBhcmUgMSAxLjAwMCAgICAgICAgICAgICAgLT4gMA0KK2RxY29tcDEwMzIgY29tcGFyZSAxIDEuMDAgICAgICAgICAgICAgICAtPiAwDQorZHFjb21wMTAzMyBjb21wYXJlIDEgMS4wICAgICAgICAgICAgICAgIC0+IDANCisNCitkcWNvbXAxMDQxIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDEgLT4gMA0KK2RxY29tcDEwNDIgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMSAtPiAwDQorZHFjb21wMTA0MyBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAxIC0+IDANCitkcWNvbXAxMDQ0IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDEgLT4gMA0KK2RxY29tcDEwNDUgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgMSAtPiAwDQorZHFjb21wMTA0NiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAxIC0+IDANCitkcWNvbXAxMDQ3IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNDggY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA0OSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDUwIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA1MiBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDUzIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNTQgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA1NSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDU2IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNTcgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA1OCBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDU5IGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAwMDAgIDEgLT4gMA0KK2RxY29tcDEwNjAgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwICAgMSAtPiAwDQorZHFjb21wMTA2MSBjb21wYXJlIDEuMDAwMDAwMDAwMDAwMCAgICAxIC0+IDANCitkcWNvbXAxMDYyIGNvbXBhcmUgMS4wMDAwMDAwMDAwMDAgICAgIDEgLT4gMA0KK2RxY29tcDEwNjMgY29tcGFyZSAxLjAwMDAwMDAwMDAwICAgICAgMSAtPiAwDQorZHFjb21wMTA2NCBjb21wYXJlIDEuMDAwMDAwMDAwMCAgICAgICAxIC0+IDANCitkcWNvbXAxMDY1IGNvbXBhcmUgMS4wMDAwMDAwMDAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNjYgY29tcGFyZSAxLjAwMDAwMDAwICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA2NyBjb21wYXJlIDEuMDAwMDAwMCAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDY4IGNvbXBhcmUgMS4wMDAwMDAgICAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNjkgY29tcGFyZSAxLjAwMDAwICAgICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA3MCBjb21wYXJlIDEuMDAwMCAgICAgICAgICAgICAxIC0+IDANCitkcWNvbXAxMDcxIGNvbXBhcmUgMS4wMDAgICAgICAgICAgICAgIDEgLT4gMA0KK2RxY29tcDEwNzIgY29tcGFyZSAxLjAwICAgICAgICAgICAgICAgMSAtPiAwDQorZHFjb21wMTA3MyBjb21wYXJlIDEuMCAgICAgICAgICAgICAgICAxIC0+IDANCisNCistLSBjaGVjayBNU0QgYWx3YXlzIGRldGVjdGVkIG5vbi16ZXJvDQorZHFjb21wMTA4MCBjb21wYXJlIDAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDANCitkcWNvbXAxMDgxIGNvbXBhcmUgMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDgyIGNvbXBhcmUgMCAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDgzIGNvbXBhcmUgMCAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg0IGNvbXBhcmUgMCA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg1IGNvbXBhcmUgMCA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg2IGNvbXBhcmUgMCA2LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg3IGNvbXBhcmUgMCA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg4IGNvbXBhcmUgMCA4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDg5IGNvbXBhcmUgMCA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gLTENCitkcWNvbXAxMDkwIGNvbXBhcmUgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMA0KK2RxY29tcDEwOTEgY29tcGFyZSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZHFjb21wMTA5MiBjb21wYXJlIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkcWNvbXAxMDkzIGNvbXBhcmUgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KK2RxY29tcDEwOTQgY29tcGFyZSA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZHFjb21wMTA5NSBjb21wYXJlIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkcWNvbXAxMDk2IGNvbXBhcmUgNi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KK2RxY29tcDEwOTcgY29tcGFyZSA3LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMCAtPiAxDQorZHFjb21wMTA5OCBjb21wYXJlIDguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAwIC0+IDENCitkcWNvbXAxMDk5IGNvbXBhcmUgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIDAgLT4gMQ0KKw0KKy0tIE51bGwgdGVzdHMNCitkcWNvbTk5MCBjb21wYXJlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY29tOTkxIGNvbXBhcmUgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVNpZy5kZWNUZXN0CmluZGV4IDc5NWYwOTEuLmMwNjhkNDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVTaWcuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb21wYXJlU2lnLmRlY1Rlc3QKQEAgLTEsNjQ3ICsxLDY0NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUNvbXBhcmVTaWcuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb247IGFsbCBOYU5zIHNpZ25hbCAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90Ci0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFjbXMwMDEgY29tcGFyZXNpZyAgLTIgIC0yICAtPiAwCi1kcWNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xCi1kcWNtczAwMyBjb21wYXJlc2lnICAtMiAgIDAgIC0+IC0xCi1kcWNtczAwNCBjb21wYXJlc2lnICAtMiAgIDEgIC0+IC0xCi1kcWNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xCi1kcWNtczAwNiBjb21wYXJlc2lnICAtMSAgLTIgIC0+IDEKLWRxY21zMDA3IGNvbXBhcmVzaWcgIC0xICAtMSAgLT4gMAotZHFjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQotZHFjbXMwMDkgY29tcGFyZXNpZyAgLTEgICAxICAtPiAtMQotZHFjbXMwMTAgY29tcGFyZXNpZyAgLTEgICAyICAtPiAtMQotZHFjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxCi1kcWNtczAxMiBjb21wYXJlc2lnICAgMCAgLTEgIC0+IDEKLWRxY21zMDEzIGNvbXBhcmVzaWcgICAwICAgMCAgLT4gMAotZHFjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQotZHFjbXMwMTUgY29tcGFyZXNpZyAgIDAgICAyICAtPiAtMQotZHFjbXMwMTYgY29tcGFyZXNpZyAgIDEgIC0yICAtPiAxCi1kcWNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDEKLWRxY21zMDE4IGNvbXBhcmVzaWcgICAxICAgMCAgLT4gMQotZHFjbXMwMTkgY29tcGFyZXNpZyAgIDEgICAxICAtPiAwCi1kcWNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xCi1kcWNtczAyMSBjb21wYXJlc2lnICAgMiAgLTIgIC0+IDEKLWRxY21zMDIyIGNvbXBhcmVzaWcgICAyICAtMSAgLT4gMQotZHFjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxCi1kcWNtczAyNSBjb21wYXJlc2lnICAgMiAgIDEgIC0+IDEKLWRxY21zMDI2IGNvbXBhcmVzaWcgICAyICAgMiAgLT4gMAotCi1kcWNtczAzMSBjb21wYXJlc2lnICAtMjAgIC0yMCAgLT4gMAotZHFjbXMwMzIgY29tcGFyZXNpZyAgLTIwICAtMTAgIC0+IC0xCi1kcWNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTEKLWRxY21zMDM0IGNvbXBhcmVzaWcgIC0yMCAgIDEwICAtPiAtMQotZHFjbXMwMzUgY29tcGFyZXNpZyAgLTIwICAgMjAgIC0+IC0xCi1kcWNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQotZHFjbXMwMzcgY29tcGFyZXNpZyAgLTEwICAtMTAgIC0+IDAKLWRxY21zMDM4IGNvbXBhcmVzaWcgIC0xMCAgIDAwICAtPiAtMQotZHFjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xCi1kcWNtczA0MCBjb21wYXJlc2lnICAtMTAgICAyMCAgLT4gLTEKLWRxY21zMDQxIGNvbXBhcmVzaWcgICAwMCAgLTIwICAtPiAxCi1kcWNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQotZHFjbXMwNDMgY29tcGFyZXNpZyAgIDAwICAgMDAgIC0+IDAKLWRxY21zMDQ0IGNvbXBhcmVzaWcgICAwMCAgIDEwICAtPiAtMQotZHFjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xCi1kcWNtczA0NiBjb21wYXJlc2lnICAgMTAgIC0yMCAgLT4gMQotZHFjbXMwNDcgY29tcGFyZXNpZyAgIDEwICAtMTAgIC0+IDEKLWRxY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxCi1kcWNtczA0OSBjb21wYXJlc2lnICAgMTAgICAxMCAgLT4gMAotZHFjbXMwNTAgY29tcGFyZXNpZyAgIDEwICAgMjAgIC0+IC0xCi1kcWNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQotZHFjbXMwNTIgY29tcGFyZXNpZyAgIDIwICAtMTAgIC0+IDEKLWRxY21zMDUzIGNvbXBhcmVzaWcgICAyMCAgIDAwICAtPiAxCi1kcWNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQotZHFjbXMwNTYgY29tcGFyZXNpZyAgIDIwICAgMjAgIC0+IDAKLQotZHFjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMAotZHFjbXMwNjIgY29tcGFyZXNpZyAgLTIuMCAgLTEuMCAgLT4gLTEKLWRxY21zMDYzIGNvbXBhcmVzaWcgIC0yLjAgICAwLjAgIC0+IC0xCi1kcWNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQotZHFjbXMwNjUgY29tcGFyZXNpZyAgLTIuMCAgIDIuMCAgLT4gLTEKLWRxY21zMDY2IGNvbXBhcmVzaWcgIC0xLjAgIC0yLjAgIC0+IDEKLWRxY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDAKLWRxY21zMDY4IGNvbXBhcmVzaWcgIC0xLjAgICAwLjAgIC0+IC0xCi1kcWNtczA2OSBjb21wYXJlc2lnICAtMS4wICAgMS4wICAtPiAtMQotZHFjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTEKLWRxY21zMDcxIGNvbXBhcmVzaWcgICAwLjAgIC0yLjAgIC0+IDEKLWRxY21zMDcyIGNvbXBhcmVzaWcgICAwLjAgIC0xLjAgIC0+IDEKLWRxY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDAKLWRxY21zMDc0IGNvbXBhcmVzaWcgICAwLjAgICAxLjAgIC0+IC0xCi1kcWNtczA3NSBjb21wYXJlc2lnICAgMC4wICAgMi4wICAtPiAtMQotZHFjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQotZHFjbXMwNzcgY29tcGFyZXNpZyAgIDEuMCAgLTEuMCAgLT4gMQotZHFjbXMwNzggY29tcGFyZXNpZyAgIDEuMCAgIDAuMCAgLT4gMQotZHFjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMAotZHFjbXMwODAgY29tcGFyZXNpZyAgIDEuMCAgIDIuMCAgLT4gLTEKLWRxY21zMDgxIGNvbXBhcmVzaWcgICAyLjAgIC0yLjAgIC0+IDEKLWRxY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDEKLWRxY21zMDgzIGNvbXBhcmVzaWcgICAyLjAgICAwLjAgIC0+IDEKLWRxY21zMDg1IGNvbXBhcmVzaWcgICAyLjAgICAxLjAgIC0+IDEKLWRxY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDAKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1kcWNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMAotZHFjbXMwOTEgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xCi1kcWNtczA5MiBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQotZHFjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDAKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi1kcWNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwCi1kcWNtczEwMSBjb21wYXJlc2lnICAgNy4wICAgIDcgICAgICAtPiAwCi1kcWNtczEwMiBjb21wYXJlc2lnICAgNyAgICAgIDcuMCAgICAtPiAwCi1kcWNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwCi1kcWNtczEwNCBjb21wYXJlc2lnICAgNzBFLTEgIDcuMCAgICAtPiAwCi1kcWNtczEwNSBjb21wYXJlc2lnICAgMC43RSsxIDcgICAgICAtPiAwCi1kcWNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwCi1kcWNtczEwNyBjb21wYXJlc2lnICAgNy4wICAgIDdFKzAgICAtPiAwCi1kcWNtczEwOCBjb21wYXJlc2lnICAgNy4wICAgIDcwRS0xICAtPiAwCi1kcWNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwCi1kcWNtczExMCBjb21wYXJlc2lnICAgNyAgICAgIDcwRS0xICAtPiAwCi0KLWRxY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDEKLWRxY21zMTIxIGNvbXBhcmVzaWcgICA4LjAgICAgNyAgICAgIC0+IDEKLWRxY21zMTIyIGNvbXBhcmVzaWcgICA4ICAgICAgNy4wICAgIC0+IDEKLWRxY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDEKLWRxY21zMTI0IGNvbXBhcmVzaWcgICA4MEUtMSAgNy4wICAgIC0+IDEKLWRxY21zMTI1IGNvbXBhcmVzaWcgICAwLjhFKzEgNyAgICAgIC0+IDEKLWRxY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDEKLWRxY21zMTI3IGNvbXBhcmVzaWcgICA4LjAgICAgN0UrMCAgIC0+IDEKLWRxY21zMTI4IGNvbXBhcmVzaWcgICA4LjAgICAgNzBFLTEgIC0+IDEKLWRxY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxCi1kcWNtczEzMCBjb21wYXJlc2lnICAgOCAgICAgIDcwRS0xICAtPiAxCi0KLWRxY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xCi1kcWNtczE0MSBjb21wYXJlc2lnICAgOC4wICAgIDkgICAgICAtPiAtMQotZHFjbXMxNDIgY29tcGFyZXNpZyAgIDggICAgICA5LjAgICAgLT4gLTEKLWRxY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xCi1kcWNtczE0NCBjb21wYXJlc2lnICAgODBFLTEgIDkuMCAgICAtPiAtMQotZHFjbXMxNDUgY29tcGFyZXNpZyAgIDAuOEUrMSA5ICAgICAgLT4gLTEKLWRxY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xCi1kcWNtczE0NyBjb21wYXJlc2lnICAgOC4wICAgIDlFKzAgICAtPiAtMQotZHFjbXMxNDggY29tcGFyZXNpZyAgIDguMCAgICA5MEUtMSAgLT4gLTEKLWRxY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xCi1kcWNtczE1MCBjb21wYXJlc2lnICAgOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCi1kcWNtczIwMCBjb21wYXJlc2lnICAtNy4wICAgIDcuMCAgICAtPiAtMQotZHFjbXMyMDEgY29tcGFyZXNpZyAgLTcuMCAgICA3ICAgICAgLT4gLTEKLWRxY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xCi1kcWNtczIwMyBjb21wYXJlc2lnICAtN0UrMCAgIDcuMCAgICAtPiAtMQotZHFjbXMyMDQgY29tcGFyZXNpZyAgLTcwRS0xICA3LjAgICAgLT4gLTEKLWRxY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xCi1kcWNtczIwNiBjb21wYXJlc2lnICAtNzBFLTEgIDcgICAgICAtPiAtMQotZHFjbXMyMDcgY29tcGFyZXNpZyAgLTcuMCAgICA3RSswICAgLT4gLTEKLWRxY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xCi1kcWNtczIwOSBjb21wYXJlc2lnICAtNyAgICAgIDAuN0UrMSAtPiAtMQotZHFjbXMyMTAgY29tcGFyZXNpZyAgLTcgICAgICA3MEUtMSAgLT4gLTEKLQotZHFjbXMyMjAgY29tcGFyZXNpZyAgLTguMCAgICA3LjAgICAgLT4gLTEKLWRxY21zMjIxIGNvbXBhcmVzaWcgIC04LjAgICAgNyAgICAgIC0+IC0xCi1kcWNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQotZHFjbXMyMjMgY29tcGFyZXNpZyAgLThFKzAgICA3LjAgICAgLT4gLTEKLWRxY21zMjI0IGNvbXBhcmVzaWcgIC04MEUtMSAgNy4wICAgIC0+IC0xCi1kcWNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQotZHFjbXMyMjYgY29tcGFyZXNpZyAgLTgwRS0xICA3ICAgICAgLT4gLTEKLWRxY21zMjI3IGNvbXBhcmVzaWcgIC04LjAgICAgN0UrMCAgIC0+IC0xCi1kcWNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQotZHFjbXMyMjkgY29tcGFyZXNpZyAgLTggICAgICAwLjdFKzEgLT4gLTEKLWRxY21zMjMwIGNvbXBhcmVzaWcgIC04ICAgICAgNzBFLTEgIC0+IC0xCi0KLWRxY21zMjQwIGNvbXBhcmVzaWcgIC04LjAgICAgOS4wICAgIC0+IC0xCi1kcWNtczI0MSBjb21wYXJlc2lnICAtOC4wICAgIDkgICAgICAtPiAtMQotZHFjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTEKLWRxY21zMjQzIGNvbXBhcmVzaWcgIC04RSswICAgOS4wICAgIC0+IC0xCi1kcWNtczI0NCBjb21wYXJlc2lnICAtODBFLTEgIDkuMCAgICAtPiAtMQotZHFjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTEKLWRxY21zMjQ2IGNvbXBhcmVzaWcgIC04MEUtMSAgOSAgICAgIC0+IC0xCi1kcWNtczI0NyBjb21wYXJlc2lnICAtOC4wICAgIDlFKzAgICAtPiAtMQotZHFjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTEKLWRxY21zMjQ5IGNvbXBhcmVzaWcgIC04ICAgICAgMC45RSsxIC0+IC0xCi1kcWNtczI1MCBjb21wYXJlc2lnICAtOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCi1kcWNtczMwMCBjb21wYXJlc2lnICAgNy4wICAgIC03LjAgICAgLT4gMQotZHFjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDEKLWRxY21zMzAyIGNvbXBhcmVzaWcgICA3ICAgICAgLTcuMCAgICAtPiAxCi1kcWNtczMwMyBjb21wYXJlc2lnICAgN0UrMCAgIC03LjAgICAgLT4gMQotZHFjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDEKLWRxY21zMzA1IGNvbXBhcmVzaWcgICAuN0UrMSAgLTcgICAgICAtPiAxCi1kcWNtczMwNiBjb21wYXJlc2lnICAgNzBFLTEgIC03ICAgICAgLT4gMQotZHFjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDEKLWRxY21zMzA4IGNvbXBhcmVzaWcgICA3LjAgICAgLTcwRS0xICAtPiAxCi1kcWNtczMwOSBjb21wYXJlc2lnICAgNyAgICAgIC0uN0UrMSAgLT4gMQotZHFjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDEKLQotZHFjbXMzMjAgY29tcGFyZXNpZyAgIDguMCAgICAtNy4wICAgIC0+IDEKLWRxY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxCi1kcWNtczMyMiBjb21wYXJlc2lnICAgOCAgICAgIC03LjAgICAgLT4gMQotZHFjbXMzMjMgY29tcGFyZXNpZyAgIDhFKzAgICAtNy4wICAgIC0+IDEKLWRxY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxCi1kcWNtczMyNSBjb21wYXJlc2lnICAgLjhFKzEgIC03ICAgICAgLT4gMQotZHFjbXMzMjYgY29tcGFyZXNpZyAgIDgwRS0xICAtNyAgICAgIC0+IDEKLWRxY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxCi1kcWNtczMyOCBjb21wYXJlc2lnICAgOC4wICAgIC03MEUtMSAgLT4gMQotZHFjbXMzMjkgY29tcGFyZXNpZyAgIDggICAgICAtLjdFKzEgIC0+IDEKLWRxY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxCi0KLWRxY21zMzQwIGNvbXBhcmVzaWcgICA4LjAgICAgLTkuMCAgICAtPiAxCi1kcWNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQotZHFjbXMzNDIgY29tcGFyZXNpZyAgIDggICAgICAtOS4wICAgIC0+IDEKLWRxY21zMzQzIGNvbXBhcmVzaWcgICA4RSswICAgLTkuMCAgICAtPiAxCi1kcWNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQotZHFjbXMzNDUgY29tcGFyZXNpZyAgIC44RSsxICAtOSAgICAgIC0+IDEKLWRxY21zMzQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgLTkgICAgICAtPiAxCi1kcWNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQotZHFjbXMzNDggY29tcGFyZXNpZyAgIDguMCAgICAtOTBFLTEgIC0+IDEKLWRxY21zMzQ5IGNvbXBhcmVzaWcgICA4ICAgICAgLS45RSsxICAtPiAxCi1kcWNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCi1kcWNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDAKLWRxY21zNDAxIGNvbXBhcmVzaWcgICAtNy4wICAgIC03ICAgICAgLT4gMAotZHFjbXM0MDIgY29tcGFyZXNpZyAgIC03ICAgICAgLTcuMCAgICAtPiAwCi1kcWNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDAKLWRxY21zNDA0IGNvbXBhcmVzaWcgICAtNzBFLTEgIC03LjAgICAgLT4gMAotZHFjbXM0MDUgY29tcGFyZXNpZyAgIC0uN0UrMSAgLTcgICAgICAtPiAwCi1kcWNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDAKLWRxY21zNDA3IGNvbXBhcmVzaWcgICAtNy4wICAgIC03RSswICAgLT4gMAotZHFjbXM0MDggY29tcGFyZXNpZyAgIC03LjAgICAgLTcwRS0xICAtPiAwCi1kcWNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDAKLWRxY21zNDEwIGNvbXBhcmVzaWcgICAtNyAgICAgIC03MEUtMSAgLT4gMAotCi1kcWNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xCi1kcWNtczQyMSBjb21wYXJlc2lnICAgLTguMCAgICAtNyAgICAgIC0+IC0xCi1kcWNtczQyMiBjb21wYXJlc2lnICAgLTggICAgICAtNy4wICAgIC0+IC0xCi1kcWNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xCi1kcWNtczQyNCBjb21wYXJlc2lnICAgLTgwRS0xICAtNy4wICAgIC0+IC0xCi1kcWNtczQyNSBjb21wYXJlc2lnICAgLS44RSsxICAtNyAgICAgIC0+IC0xCi1kcWNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCi1kcWNtczQyNyBjb21wYXJlc2lnICAgLTguMCAgICAtN0UrMCAgIC0+IC0xCi1kcWNtczQyOCBjb21wYXJlc2lnICAgLTguMCAgICAtNzBFLTEgIC0+IC0xCi1kcWNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xCi1kcWNtczQzMCBjb21wYXJlc2lnICAgLTggICAgICAtNzBFLTEgIC0+IC0xCi0KLWRxY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQotZHFjbXM0NDEgY29tcGFyZXNpZyAgIC04LjAgICAgLTkgICAgICAtPiAxCi1kcWNtczQ0MiBjb21wYXJlc2lnICAgLTggICAgICAtOS4wICAgIC0+IDEKLWRxY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQotZHFjbXM0NDQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTkuMCAgICAtPiAxCi1kcWNtczQ0NSBjb21wYXJlc2lnICAgLS44RSsxICAtOSAgICAgIC0+IDEKLWRxY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQotZHFjbXM0NDcgY29tcGFyZXNpZyAgIC04LjAgICAgLTlFKzAgICAtPiAxCi1kcWNtczQ0OCBjb21wYXJlc2lnICAgLTguMCAgICAtOTBFLTEgIC0+IDEKLWRxY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQotZHFjbXM0NTAgY29tcGFyZXNpZyAgIC04ICAgICAgLTkwRS0xICAtPiAxCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kcWNtczQ3MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNtczQ3NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKLWRxY21zNDc1IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNtczQ3NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCi1kcWNtczQ3NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKLWRxY21zNDc4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCi1kcWNtczQ3OSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNtczQ4MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDAKLWRxY21zNDgxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwRS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAtPiAwCi1kcWNtczQ4MiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwCi1kcWNtczQ4MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDAKLWRxY21zNDg3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFKzg5IC0+IDAKLWRxY21zNDg4IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMEUtODkgLT4gMAotZHFjbXM0ODkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDAKLWRxY21zNDkwIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFLTg5IC0+IDAKLWRxY21zNDkxIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMEUrODkgLT4gMAotZHFjbXM0OTIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDAKLWRxY21zNDkzIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFKzg5IC0+IDAKLWRxY21zNDk0IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMEUtODkgLT4gMAotZHFjbXM0OTUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDAKLWRxY21zNDk2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFLTg5IC0+IDAKLWRxY21zNDk3IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kcWNtczUwMCBjb21wYXJlc2lnICAgIDEgICAgIDFFLTE1ICAgIC0+IDEKLWRxY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQotZHFjbXM1MDIgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMyAgICAtPiAxCi1kcWNtczUwMyBjb21wYXJlc2lnICAgIDEgICAgIDFFLTEyICAgIC0+IDEKLWRxY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQotZHFjbXM1MDUgY29tcGFyZXNpZyAgICAxICAgICAxRS0xMCAgICAtPiAxCi1kcWNtczUwNiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTkgICAgIC0+IDEKLWRxY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQotZHFjbXM1MDggY29tcGFyZXNpZyAgICAxICAgICAxRS03ICAgICAtPiAxCi1kcWNtczUwOSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTYgICAgIC0+IDEKLWRxY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQotZHFjbXM1MTEgY29tcGFyZXNpZyAgICAxICAgICAxRS00ICAgICAtPiAxCi1kcWNtczUxMiBjb21wYXJlc2lnICAgIDEgICAgIDFFLTMgICAgIC0+IDEKLWRxY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQotZHFjbXM1MTQgY29tcGFyZXNpZyAgICAxICAgICAxRS0xICAgICAtPiAxCi1kcWNtczUxNSBjb21wYXJlc2lnICAgIDEgICAgIDFFLTAgICAgIC0+IDAKLWRxY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWRxY21zNTE3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMiAgICAgLT4gLTEKLWRxY21zNTE4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMyAgICAgLT4gLTEKLWRxY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWRxY21zNTIxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNSAgICAgLT4gLTEKLWRxY21zNTIyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNiAgICAgLT4gLTEKLWRxY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWRxY21zNTI0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOCAgICAgLT4gLTEKLWRxY21zNTI1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrOSAgICAgLT4gLTEKLWRxY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWRxY21zNTI3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTEgICAgLT4gLTEKLWRxY21zNTI4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTIgICAgLT4gLTEKLWRxY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWRxY21zNTMwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTQgICAgLT4gLTEKLWRxY21zNTMxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTUgICAgLT4gLTEKLS0tIExSIHN3YXAKLWRxY21zNTQwIGNvbXBhcmVzaWcgICAgMUUtMTUgIDEgICAgICAgLT4gLTEKLWRxY21zNTQxIGNvbXBhcmVzaWcgICAgMUUtMTQgIDEgICAgICAgLT4gLTEKLWRxY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKLWRxY21zNTQzIGNvbXBhcmVzaWcgICAgMUUtMTIgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ0IGNvbXBhcmVzaWcgICAgMUUtMTEgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ2IGNvbXBhcmVzaWcgICAgMUUtOSAgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ3IGNvbXBhcmVzaWcgICAgMUUtOCAgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKLWRxY21zNTQ5IGNvbXBhcmVzaWcgICAgMUUtNiAgIDEgICAgICAgLT4gLTEKLWRxY21zNTUwIGNvbXBhcmVzaWcgICAgMUUtNSAgIDEgICAgICAgLT4gLTEKLWRxY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKLWRxY21zNTUyIGNvbXBhcmVzaWcgICAgMUUtMyAgIDEgICAgICAgLT4gLTEKLWRxY21zNTUzIGNvbXBhcmVzaWcgICAgMUUtMiAgIDEgICAgICAgLT4gLTEKLWRxY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKLWRxY21zNTU1IGNvbXBhcmVzaWcgICAgMUUtMCAgIDEgICAgICAgLT4gIDAKLWRxY21zNTU2IGNvbXBhcmVzaWcgICAgMUUrMSAgIDEgICAgICAgLT4gIDEKLWRxY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKLWRxY21zNTU4IGNvbXBhcmVzaWcgICAgMUUrMyAgIDEgICAgICAgLT4gIDEKLWRxY21zNTU5IGNvbXBhcmVzaWcgICAgMUUrNCAgIDEgICAgICAgLT4gIDEKLWRxY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKLWRxY21zNTYyIGNvbXBhcmVzaWcgICAgMUUrNiAgIDEgICAgICAgLT4gIDEKLWRxY21zNTYzIGNvbXBhcmVzaWcgICAgMUUrNyAgIDEgICAgICAgLT4gIDEKLWRxY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKLWRxY21zNTY1IGNvbXBhcmVzaWcgICAgMUUrOSAgIDEgICAgICAgLT4gIDEKLWRxY21zNTY2IGNvbXBhcmVzaWcgICAgMUUrMTAgIDEgICAgICAgLT4gIDEKLWRxY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKLWRxY21zNTY4IGNvbXBhcmVzaWcgICAgMUUrMTIgIDEgICAgICAgLT4gIDEKLWRxY21zNTY5IGNvbXBhcmVzaWcgICAgMUUrMTMgIDEgICAgICAgLT4gIDEKLWRxY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKLWRxY21zNTcxIGNvbXBhcmVzaWcgICAgMUUrMTUgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZHFjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDEKLWRxY21zNTgxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAtPiAxCi1kcWNtczU4MiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQotZHFjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDEKLWRxY21zNTg0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAtPiAxCi1kcWNtczU4NSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQotZHFjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDEKLWRxY21zNTg3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAtPiAxCi1kcWNtczU4OCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQotZHFjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xCi1kcWNtczU5MCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgLT4gLTEKLWRxY21zNTkxIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQotZHFjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xCi1kcWNtczU5MyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgLT4gLTEKLWRxY21zNTk0IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQotZHFjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xCi1kcWNtczU5NiBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgLT4gLTEKLWRxY21zNTk3IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQotZHFjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xCi1kcWNtczU5OSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgLT4gLTEKLQotLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMKLWRxY21zNjAwIGNvbXBhcmVzaWcgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjAxIGNvbXBhcmVzaWcgICAxMi4wICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjAzIGNvbXBhcmVzaWcgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA0IGNvbXBhcmVzaWcgICAxMi4wMDAwICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA2IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA3IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwICAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjA5IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKLWRxY21zNjEwIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyICAgICAgICAgICAgLT4gIDEKLWRxY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDEKLWRxY21zNjEyIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKLWRxY21zNjEzIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMCAgICAgICAgLT4gIDEKLWRxY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDEKLWRxY21zNjE1IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKLWRxY21zNjE2IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMCAgICAgLT4gIDEKLWRxY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDEKLWRxY21zNjE4IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKLWRxY21zNjE5IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAwMCAgLT4gIDEKLWRxY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjIxIGNvbXBhcmVzaWcgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjIyIGNvbXBhcmVzaWcgIC0xMi4wMCAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI0IGNvbXBhcmVzaWcgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI1IGNvbXBhcmVzaWcgIC0xMi4wMDAwMCAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI3IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI4IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMCAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDEKLWRxY21zNjMwIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKLWRxY21zNjMxIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wICAgICAgICAgLT4gLTEKLWRxY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTEKLWRxY21zNjMzIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKLWRxY21zNjM0IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwICAgICAgLT4gLTEKLWRxY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTEKLWRxY21zNjM2IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKLWRxY21zNjM3IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwICAgLT4gLTEKLWRxY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTEKLWRxY21zNjM5IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRxY21zNjQwIGNvbXBhcmVzaWcgICAwICAgICAwICAgLT4gMAotZHFjbXM2NDEgY29tcGFyZXNpZyAgIDAgICAgLTAgICAtPiAwCi1kcWNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDAKLWRxY21zNjQzIGNvbXBhcmVzaWcgICAwICAgICAwLjAgLT4gMAotZHFjbXM2NDQgY29tcGFyZXNpZyAgLTAgICAgIDAgICAtPiAwCi1kcWNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDAKLWRxY21zNjQ2IGNvbXBhcmVzaWcgIC0wICAgIC0wLjAgLT4gMAotZHFjbXM2NDcgY29tcGFyZXNpZyAgLTAgICAgIDAuMCAtPiAwCi1kcWNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDAKLWRxY21zNjQ5IGNvbXBhcmVzaWcgICAwLjAgIC0wICAgLT4gMAotZHFjbXM2NTAgY29tcGFyZXNpZyAgIDAuMCAgLTAuMCAtPiAwCi1kcWNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDAKLWRxY21zNjUyIGNvbXBhcmVzaWcgIC0wLjAgICAwICAgLT4gMAotZHFjbXM2NTMgY29tcGFyZXNpZyAgLTAuMCAgLTAgICAtPiAwCi1kcWNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDAKLWRxY21zNjU1IGNvbXBhcmVzaWcgIC0wLjAgICAwLjAgLT4gMAotCi1kcWNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDAKLWRxY21zNjU3IGNvbXBhcmVzaWcgIC0wRTIgICAwLjAgLT4gMAotZHFjbXM2NTggY29tcGFyZXNpZyAgIDBFMSAgIDAuMCAtPiAwCi1kcWNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDAKLWRxY21zNjYwIGNvbXBhcmVzaWcgIC0wRTEgICAwICAgLT4gMAotZHFjbXM2NjEgY29tcGFyZXNpZyAgLTBFMiAgIDAgICAtPiAwCi1kcWNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDAKLWRxY21zNjYzIGNvbXBhcmVzaWcgICAwRTIgICAwICAgLT4gMAotZHFjbXM2NjQgY29tcGFyZXNpZyAgLTBFMSAgLTBFMSAtPiAwCi1kcWNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDAKLWRxY21zNjY2IGNvbXBhcmVzaWcgICAwRTEgIC0wRTEgLT4gMAotZHFjbXM2NjcgY29tcGFyZXNpZyAgIDBFMiAgLTBFMSAtPiAwCi1kcWNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDAKLWRxY21zNjY5IGNvbXBhcmVzaWcgIC0wRTIgIC0wRTIgLT4gMAotZHFjbXM2NzAgY29tcGFyZXNpZyAgIDBFMSAgLTBFMiAtPiAwCi1kcWNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDAKLWRxY21zNjcyIGNvbXBhcmVzaWcgIC0wRTEgICAwRTEgLT4gMAotZHFjbXM2NzMgY29tcGFyZXNpZyAgLTBFMiAgIDBFMSAtPiAwCi1kcWNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDAKLWRxY21zNjc1IGNvbXBhcmVzaWcgICAwRTIgICAwRTEgLT4gMAotZHFjbXM2NzYgY29tcGFyZXNpZyAgLTBFMSAgIDBFMiAtPiAwCi1kcWNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDAKLWRxY21zNjc4IGNvbXBhcmVzaWcgICAwRTEgICAwRTIgLT4gMAotZHFjbXM2NzkgY29tcGFyZXNpZyAgIDBFMiAgIDBFMiAtPiAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLWRxY21zNjgwIGNvbXBhcmVzaWcgICAxMiAgICAxMiAgICAgICAgICAgLT4gMAotZHFjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwCi1kcWNtczY4MiBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDAKLWRxY21zNjgzIGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAgICAgICAgLT4gMAotZHFjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwCi1kcWNtczY4NSBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDAKLWRxY21zNjg2IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAgICAgLT4gMAotZHFjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwCi1kcWNtczY4OCBjb21wYXJlc2lnICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDAKLWRxY21zNjg5IGNvbXBhcmVzaWcgICAxMiAgICAxMi4wMDAwMDAwMDAgLT4gMAotZHFjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwCi1kcWNtczY5MSBjb21wYXJlc2lnICAgMTIuMCAgICAgICAgICAgIDEyIC0+IDAKLWRxY21zNjkyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgICAgMTIgLT4gMAotZHFjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwCi1kcWNtczY5NCBjb21wYXJlc2lnICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IDAKLWRxY21zNjk1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gMAotZHFjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwCi1kcWNtczY5NyBjb21wYXJlc2lnICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IDAKLWRxY21zNjk4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gMAotZHFjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwCi0KLS0tIGZpcnN0LCBzZWNvbmQsICYgbGFzdCBkaWdpdAotZHFjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxCi1kcWNtczcwMSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDAKLWRxY21zNzAyIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTcgLT4gLTEKLWRxY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQotZHFjbXM3MDQgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwCi1kcWNtczcwNSBjb21wYXJlc2lnICAgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAyMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xCi1kcWNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDEKLWRxY21zNzA3IGNvbXBhcmVzaWcgICAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMAotZHFjbXM3MDggY29tcGFyZXNpZyAgIDExMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAtMQotCi0tLSBtaXNjZWxsYW5lb3VzCi1kcWNtczcyMSBjb21wYXJlc2lnIDEyMzQ1Njc4MDAwIDEgLT4gMQotZHFjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xCi1kcWNtczcyMyBjb21wYXJlc2lnIDEyMzQ1Njc4MDAgIDEgLT4gMQotZHFjbXM3MjQgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAgIC0+IC0xCi1kcWNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQotZHFjbXM3MjYgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAgIC0+IC0xCi1kcWNtczcyNyBjb21wYXJlc2lnIDEyMzQ1Njc4OTEgIDEgLT4gMQotZHFjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xCi1kcWNtczcyOSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAxIDEgLT4gMQotZHFjbXM3MzAgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTAxIC0+IC0xCi1kcWNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQotZHFjbXM3MzIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTYgIC0+IC0xCi0KLS0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uCi1kcWNtczc0MCBjb21wYXJlc2lnICAxICAwLjk5OTk5OTkgIC0+IDEKLWRxY21zNzQxIGNvbXBhcmVzaWcgIDEgIDAuOTk5OTk5ICAgLT4gMQotZHFjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxCi1kcWNtczc0MyBjb21wYXJlc2lnICAxICAxLjAwMDAgICAgIC0+IDAKLWRxY21zNzQ0IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDEgICAgLT4gLTEKLWRxY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTEKLWRxY21zNzQ2IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAwMSAgLT4gLTEKLWRxY21zNzUwIGNvbXBhcmVzaWcgIDAuOTk5OTk5OSAgMSAgLT4gLTEKLWRxY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTEKLWRxY21zNzUyIGNvbXBhcmVzaWcgIDAuOTk5OTkgICAgMSAgLT4gLTEKLWRxY21zNzUzIGNvbXBhcmVzaWcgIDEuMDAwMCAgICAgMSAgLT4gMAotZHFjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxCi1kcWNtczc1NSBjb21wYXJlc2lnICAxLjAwMDAwMSAgIDEgIC0+IDEKLWRxY21zNzU2IGNvbXBhcmVzaWcgIDEuMDAwMDAwMSAgMSAgLT4gMQotCi0tLSBTcGVjaWFscwotZHFjbXM3ODAgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKLWRxY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxCi1kcWNtczc4MiBjb21wYXJlc2lnICBJbmYgIC0xICAgICAtPiAgMQotZHFjbXM3ODMgY29tcGFyZXNpZyAgSW5mICAtMCAgICAgLT4gIDEKLWRxY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxCi1kcWNtczc4NSBjb21wYXJlc2lnICBJbmYgICAxICAgICAtPiAgMQotZHFjbXM3ODYgY29tcGFyZXNpZyAgSW5mICAgMTAwMCAgLT4gIDEKLWRxY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwCi1kcWNtczc4OCBjb21wYXJlc2lnIC0xMDAwICBJbmYgICAtPiAtMQotZHFjbXM3ODkgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTEKLWRxY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xCi1kcWNtczc5MSBjb21wYXJlc2lnIC0wICAgICBJbmYgICAtPiAtMQotZHFjbXM3OTIgY29tcGFyZXNpZyAgMCAgICAgSW5mICAgLT4gLTEKLWRxY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xCi1kcWNtczc5NCBjb21wYXJlc2lnICAxMDAwICBJbmYgICAtPiAtMQotZHFjbXM3OTUgY29tcGFyZXNpZyAgSW5mICAgSW5mICAgLT4gIDAKLQotZHFjbXM4MDAgY29tcGFyZXNpZyAtSW5mICAtSW5mICAgLT4gIDAKLWRxY21zODAxIGNvbXBhcmVzaWcgLUluZiAgLTEwMDAgIC0+IC0xCi1kcWNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQotZHFjbXM4MDMgY29tcGFyZXNpZyAtSW5mICAtMCAgICAgLT4gLTEKLWRxY21zODA0IGNvbXBhcmVzaWcgLUluZiAgIDAgICAgIC0+IC0xCi1kcWNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQotZHFjbXM4MDYgY29tcGFyZXNpZyAtSW5mICAgMTAwMCAgLT4gLTEKLWRxY21zODA3IGNvbXBhcmVzaWcgLUluZiAgIEluZiAgIC0+IC0xCi1kcWNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMAotZHFjbXM4MDkgY29tcGFyZXNpZyAtMTAwMCAtSW5mICAgLT4gIDEKLWRxY21zODEwIGNvbXBhcmVzaWcgLTEgICAgLUluZiAgIC0+ICAxCi1kcWNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQotZHFjbXM4MTIgY29tcGFyZXNpZyAgMCAgICAtSW5mICAgLT4gIDEKLWRxY21zODEzIGNvbXBhcmVzaWcgIDEgICAgLUluZiAgIC0+ICAxCi1kcWNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQotZHFjbXM4MTUgY29tcGFyZXNpZyAgSW5mICAtSW5mICAgLT4gIDEKLQotZHFjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODIyIGNvbXBhcmVzaWcgIE5hTiAtMTAwMCAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgyMyBjb21wYXJlc2lnICBOYU4gLTEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODI1IGNvbXBhcmVzaWcgIE5hTiAgMCAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgyNiBjb21wYXJlc2lnICBOYU4gIDEgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODI4IGNvbXBhcmVzaWcgIE5hTiAgSW5mICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgyOSBjb21wYXJlc2lnICBOYU4gIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODMxIGNvbXBhcmVzaWcgLTEwMDAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgzMiBjb21wYXJlc2lnIC0xICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODM0IGNvbXBhcmVzaWcgIDAgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgzNSBjb21wYXJlc2lnICAxICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODM3IGNvbXBhcmVzaWcgIEluZiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczgzOCBjb21wYXJlc2lnIC1OYU4gLU5hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODQwIGNvbXBhcmVzaWcgLU5hTiArTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg0MiBjb21wYXJlc2lnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NDMgY29tcGFyZXNpZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg0NSBjb21wYXJlc2lnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NDYgY29tcGFyZXNpZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg0OCBjb21wYXJlc2lnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NDkgY29tcGFyZXNpZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg1MSBjb21wYXJlc2lnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NTIgY29tcGFyZXNpZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg1NCBjb21wYXJlc2lnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NTUgY29tcGFyZXNpZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg1NyBjb21wYXJlc2lnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NTggY29tcGFyZXNpZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRxY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg2MSBjb21wYXJlc2lnICBOYU44ICA5OTkgICAtPiAgTmFOOCAgICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NjIgY29tcGFyZXNpZyAgTmFONzcgSW5mICAgLT4gIE5hTjc3ICAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg2NCBjb21wYXJlc2lnIC1JbmYgIC1OYU40ICAtPiAtTmFONCAgICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NjUgY29tcGFyZXNpZyAtOTk5ICAtTmFOMzMgLT4gLU5hTjMzICAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg2NyBjb21wYXJlc2lnIC1OYU40MSAtTmFONDIgLT4gLU5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NjggY29tcGFyZXNpZyArTmFONDEgLU5hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg3MCBjb21wYXJlc2lnICtOYU40MSArTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbgotCi1kcWNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODcyIGNvbXBhcmVzaWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NzMgY29tcGFyZXNpZyAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODc1IGNvbXBhcmVzaWcgIE5hTjg1ICBzTmFOODMgIC0+ICBOYU44MyBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NzYgY29tcGFyZXNpZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kcWNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24KLWRxY21zODc4IGNvbXBhcmVzaWcgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM4NzkgY29tcGFyZXNpZyAgTmFOICAgLXNOYU44OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHdpZGUgcmFuZ2UKLWRxY21zODgwIGNvbXBhcmVzaWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrNjE0NCAtPiAtMQotZHFjbXM4ODEgY29tcGFyZXNpZyA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxCi1kcWNtczg4MiBjb21wYXJlc2lnICswLjEwMCA5RS02MTQzICAgICAgICAgICAgICAgLT4gIDEKLWRxY21zODgzIGNvbXBhcmVzaWcgOUUtNjE0MyArMC4xMDAgICAgICAgICAgICAgICAtPiAtMQotZHFjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xCi1kcWNtczg4NiBjb21wYXJlc2lnIDlFKzYxNDQgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gIDEKLWRxY21zODg3IGNvbXBhcmVzaWcgLTAuMTAwIDlFLTYxNDMgICAgICAgICAgICAgICAtPiAtMQotZHFjbXM4ODggY29tcGFyZXNpZyA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxCi0KLS0tIHNpZ25zCi1kcWNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDEKLWRxY21zOTAyIGNvbXBhcmVzaWcgIDFlKzc3IC0xZSsxMSAtPiAgMQotZHFjbXM5MDMgY29tcGFyZXNpZyAtMWUrNzcgIDFlKzExIC0+IC0xCi1kcWNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTEKLWRxY21zOTA1IGNvbXBhcmVzaWcgIDFlLTc3ICAxZS0xMSAtPiAtMQotZHFjbXM5MDYgY29tcGFyZXNpZyAgMWUtNzcgLTFlLTExIC0+ICAxCi1kcWNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTEKLWRxY21zOTA4IGNvbXBhcmVzaWcgLTFlLTc3IC0xZS0xMSAtPiAgMQotCi0tLSBOdWxsIHRlc3RzCi1kcWNtczk5MCBjb21wYXJlc2lnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFjbXM5OTEgY29tcGFyZXNpZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQ29tcGFyZVNpZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWxsIE5hTnMgc2lnbmFsICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkcWNtczAwMSBjb21wYXJlc2lnICAtMiAgLTIgIC0+IDANCitkcWNtczAwMiBjb21wYXJlc2lnICAtMiAgLTEgIC0+IC0xDQorZHFjbXMwMDMgY29tcGFyZXNpZyAgLTIgICAwICAtPiAtMQ0KK2RxY21zMDA0IGNvbXBhcmVzaWcgIC0yICAgMSAgLT4gLTENCitkcWNtczAwNSBjb21wYXJlc2lnICAtMiAgIDIgIC0+IC0xDQorZHFjbXMwMDYgY29tcGFyZXNpZyAgLTEgIC0yICAtPiAxDQorZHFjbXMwMDcgY29tcGFyZXNpZyAgLTEgIC0xICAtPiAwDQorZHFjbXMwMDggY29tcGFyZXNpZyAgLTEgICAwICAtPiAtMQ0KK2RxY21zMDA5IGNvbXBhcmVzaWcgIC0xICAgMSAgLT4gLTENCitkcWNtczAxMCBjb21wYXJlc2lnICAtMSAgIDIgIC0+IC0xDQorZHFjbXMwMTEgY29tcGFyZXNpZyAgIDAgIC0yICAtPiAxDQorZHFjbXMwMTIgY29tcGFyZXNpZyAgIDAgIC0xICAtPiAxDQorZHFjbXMwMTMgY29tcGFyZXNpZyAgIDAgICAwICAtPiAwDQorZHFjbXMwMTQgY29tcGFyZXNpZyAgIDAgICAxICAtPiAtMQ0KK2RxY21zMDE1IGNvbXBhcmVzaWcgICAwICAgMiAgLT4gLTENCitkcWNtczAxNiBjb21wYXJlc2lnICAgMSAgLTIgIC0+IDENCitkcWNtczAxNyBjb21wYXJlc2lnICAgMSAgLTEgIC0+IDENCitkcWNtczAxOCBjb21wYXJlc2lnICAgMSAgIDAgIC0+IDENCitkcWNtczAxOSBjb21wYXJlc2lnICAgMSAgIDEgIC0+IDANCitkcWNtczAyMCBjb21wYXJlc2lnICAgMSAgIDIgIC0+IC0xDQorZHFjbXMwMjEgY29tcGFyZXNpZyAgIDIgIC0yICAtPiAxDQorZHFjbXMwMjIgY29tcGFyZXNpZyAgIDIgIC0xICAtPiAxDQorZHFjbXMwMjMgY29tcGFyZXNpZyAgIDIgICAwICAtPiAxDQorZHFjbXMwMjUgY29tcGFyZXNpZyAgIDIgICAxICAtPiAxDQorZHFjbXMwMjYgY29tcGFyZXNpZyAgIDIgICAyICAtPiAwDQorDQorZHFjbXMwMzEgY29tcGFyZXNpZyAgLTIwICAtMjAgIC0+IDANCitkcWNtczAzMiBjb21wYXJlc2lnICAtMjAgIC0xMCAgLT4gLTENCitkcWNtczAzMyBjb21wYXJlc2lnICAtMjAgICAwMCAgLT4gLTENCitkcWNtczAzNCBjb21wYXJlc2lnICAtMjAgICAxMCAgLT4gLTENCitkcWNtczAzNSBjb21wYXJlc2lnICAtMjAgICAyMCAgLT4gLTENCitkcWNtczAzNiBjb21wYXJlc2lnICAtMTAgIC0yMCAgLT4gMQ0KK2RxY21zMDM3IGNvbXBhcmVzaWcgIC0xMCAgLTEwICAtPiAwDQorZHFjbXMwMzggY29tcGFyZXNpZyAgLTEwICAgMDAgIC0+IC0xDQorZHFjbXMwMzkgY29tcGFyZXNpZyAgLTEwICAgMTAgIC0+IC0xDQorZHFjbXMwNDAgY29tcGFyZXNpZyAgLTEwICAgMjAgIC0+IC0xDQorZHFjbXMwNDEgY29tcGFyZXNpZyAgIDAwICAtMjAgIC0+IDENCitkcWNtczA0MiBjb21wYXJlc2lnICAgMDAgIC0xMCAgLT4gMQ0KK2RxY21zMDQzIGNvbXBhcmVzaWcgICAwMCAgIDAwICAtPiAwDQorZHFjbXMwNDQgY29tcGFyZXNpZyAgIDAwICAgMTAgIC0+IC0xDQorZHFjbXMwNDUgY29tcGFyZXNpZyAgIDAwICAgMjAgIC0+IC0xDQorZHFjbXMwNDYgY29tcGFyZXNpZyAgIDEwICAtMjAgIC0+IDENCitkcWNtczA0NyBjb21wYXJlc2lnICAgMTAgIC0xMCAgLT4gMQ0KK2RxY21zMDQ4IGNvbXBhcmVzaWcgICAxMCAgIDAwICAtPiAxDQorZHFjbXMwNDkgY29tcGFyZXNpZyAgIDEwICAgMTAgIC0+IDANCitkcWNtczA1MCBjb21wYXJlc2lnICAgMTAgICAyMCAgLT4gLTENCitkcWNtczA1MSBjb21wYXJlc2lnICAgMjAgIC0yMCAgLT4gMQ0KK2RxY21zMDUyIGNvbXBhcmVzaWcgICAyMCAgLTEwICAtPiAxDQorZHFjbXMwNTMgY29tcGFyZXNpZyAgIDIwICAgMDAgIC0+IDENCitkcWNtczA1NSBjb21wYXJlc2lnICAgMjAgICAxMCAgLT4gMQ0KK2RxY21zMDU2IGNvbXBhcmVzaWcgICAyMCAgIDIwICAtPiAwDQorDQorZHFjbXMwNjEgY29tcGFyZXNpZyAgLTIuMCAgLTIuMCAgLT4gMA0KK2RxY21zMDYyIGNvbXBhcmVzaWcgIC0yLjAgIC0xLjAgIC0+IC0xDQorZHFjbXMwNjMgY29tcGFyZXNpZyAgLTIuMCAgIDAuMCAgLT4gLTENCitkcWNtczA2NCBjb21wYXJlc2lnICAtMi4wICAgMS4wICAtPiAtMQ0KK2RxY21zMDY1IGNvbXBhcmVzaWcgIC0yLjAgICAyLjAgIC0+IC0xDQorZHFjbXMwNjYgY29tcGFyZXNpZyAgLTEuMCAgLTIuMCAgLT4gMQ0KK2RxY21zMDY3IGNvbXBhcmVzaWcgIC0xLjAgIC0xLjAgIC0+IDANCitkcWNtczA2OCBjb21wYXJlc2lnICAtMS4wICAgMC4wICAtPiAtMQ0KK2RxY21zMDY5IGNvbXBhcmVzaWcgIC0xLjAgICAxLjAgIC0+IC0xDQorZHFjbXMwNzAgY29tcGFyZXNpZyAgLTEuMCAgIDIuMCAgLT4gLTENCitkcWNtczA3MSBjb21wYXJlc2lnICAgMC4wICAtMi4wICAtPiAxDQorZHFjbXMwNzIgY29tcGFyZXNpZyAgIDAuMCAgLTEuMCAgLT4gMQ0KK2RxY21zMDczIGNvbXBhcmVzaWcgICAwLjAgICAwLjAgIC0+IDANCitkcWNtczA3NCBjb21wYXJlc2lnICAgMC4wICAgMS4wICAtPiAtMQ0KK2RxY21zMDc1IGNvbXBhcmVzaWcgICAwLjAgICAyLjAgIC0+IC0xDQorZHFjbXMwNzYgY29tcGFyZXNpZyAgIDEuMCAgLTIuMCAgLT4gMQ0KK2RxY21zMDc3IGNvbXBhcmVzaWcgICAxLjAgIC0xLjAgIC0+IDENCitkcWNtczA3OCBjb21wYXJlc2lnICAgMS4wICAgMC4wICAtPiAxDQorZHFjbXMwNzkgY29tcGFyZXNpZyAgIDEuMCAgIDEuMCAgLT4gMA0KK2RxY21zMDgwIGNvbXBhcmVzaWcgICAxLjAgICAyLjAgIC0+IC0xDQorZHFjbXMwODEgY29tcGFyZXNpZyAgIDIuMCAgLTIuMCAgLT4gMQ0KK2RxY21zMDgyIGNvbXBhcmVzaWcgICAyLjAgIC0xLjAgIC0+IDENCitkcWNtczA4MyBjb21wYXJlc2lnICAgMi4wICAgMC4wICAtPiAxDQorZHFjbXMwODUgY29tcGFyZXNpZyAgIDIuMCAgIDEuMCAgLT4gMQ0KK2RxY21zMDg2IGNvbXBhcmVzaWcgICAyLjAgICAyLjAgIC0+IDANCisNCistLSBub3cgc29tZSBjYXNlcyB3aGljaCBtaWdodCBvdmVyZmxvdyBpZiBzdWJ0cmFjdCB3ZXJlIHVzZWQNCitkcWNtczA5MCBjb21wYXJlc2lnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMA0KK2RxY21zMDkxIGNvbXBhcmVzaWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtMQ0KK2RxY21zMDkyIGNvbXBhcmVzaWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQorZHFjbXMwOTMgY29tcGFyZXNpZyAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDANCisNCistLSBzb21lIGRpZmZlcmluZyBsZW5ndGgvZXhwb25lbnQgY2FzZXMNCitkcWNtczEwMCBjb21wYXJlc2lnICAgNy4wICAgIDcuMCAgICAtPiAwDQorZHFjbXMxMDEgY29tcGFyZXNpZyAgIDcuMCAgICA3ICAgICAgLT4gMA0KK2RxY21zMTAyIGNvbXBhcmVzaWcgICA3ICAgICAgNy4wICAgIC0+IDANCitkcWNtczEwMyBjb21wYXJlc2lnICAgN0UrMCAgIDcuMCAgICAtPiAwDQorZHFjbXMxMDQgY29tcGFyZXNpZyAgIDcwRS0xICA3LjAgICAgLT4gMA0KK2RxY21zMTA1IGNvbXBhcmVzaWcgICAwLjdFKzEgNyAgICAgIC0+IDANCitkcWNtczEwNiBjb21wYXJlc2lnICAgNzBFLTEgIDcgICAgICAtPiAwDQorZHFjbXMxMDcgY29tcGFyZXNpZyAgIDcuMCAgICA3RSswICAgLT4gMA0KK2RxY21zMTA4IGNvbXBhcmVzaWcgICA3LjAgICAgNzBFLTEgIC0+IDANCitkcWNtczEwOSBjb21wYXJlc2lnICAgNyAgICAgIDAuN0UrMSAtPiAwDQorZHFjbXMxMTAgY29tcGFyZXNpZyAgIDcgICAgICA3MEUtMSAgLT4gMA0KKw0KK2RxY21zMTIwIGNvbXBhcmVzaWcgICA4LjAgICAgNy4wICAgIC0+IDENCitkcWNtczEyMSBjb21wYXJlc2lnICAgOC4wICAgIDcgICAgICAtPiAxDQorZHFjbXMxMjIgY29tcGFyZXNpZyAgIDggICAgICA3LjAgICAgLT4gMQ0KK2RxY21zMTIzIGNvbXBhcmVzaWcgICA4RSswICAgNy4wICAgIC0+IDENCitkcWNtczEyNCBjb21wYXJlc2lnICAgODBFLTEgIDcuMCAgICAtPiAxDQorZHFjbXMxMjUgY29tcGFyZXNpZyAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KK2RxY21zMTI2IGNvbXBhcmVzaWcgICA4MEUtMSAgNyAgICAgIC0+IDENCitkcWNtczEyNyBjb21wYXJlc2lnICAgOC4wICAgIDdFKzAgICAtPiAxDQorZHFjbXMxMjggY29tcGFyZXNpZyAgIDguMCAgICA3MEUtMSAgLT4gMQ0KK2RxY21zMTI5IGNvbXBhcmVzaWcgICA4ICAgICAgMC43RSsxICAtPiAxDQorZHFjbXMxMzAgY29tcGFyZXNpZyAgIDggICAgICA3MEUtMSAgLT4gMQ0KKw0KK2RxY21zMTQwIGNvbXBhcmVzaWcgICA4LjAgICAgOS4wICAgIC0+IC0xDQorZHFjbXMxNDEgY29tcGFyZXNpZyAgIDguMCAgICA5ICAgICAgLT4gLTENCitkcWNtczE0MiBjb21wYXJlc2lnICAgOCAgICAgIDkuMCAgICAtPiAtMQ0KK2RxY21zMTQzIGNvbXBhcmVzaWcgICA4RSswICAgOS4wICAgIC0+IC0xDQorZHFjbXMxNDQgY29tcGFyZXNpZyAgIDgwRS0xICA5LjAgICAgLT4gLTENCitkcWNtczE0NSBjb21wYXJlc2lnICAgMC44RSsxIDkgICAgICAtPiAtMQ0KK2RxY21zMTQ2IGNvbXBhcmVzaWcgICA4MEUtMSAgOSAgICAgIC0+IC0xDQorZHFjbXMxNDcgY29tcGFyZXNpZyAgIDguMCAgICA5RSswICAgLT4gLTENCitkcWNtczE0OCBjb21wYXJlc2lnICAgOC4wICAgIDkwRS0xICAtPiAtMQ0KK2RxY21zMTQ5IGNvbXBhcmVzaWcgICA4ICAgICAgMC45RSsxIC0+IC0xDQorZHFjbXMxNTAgY29tcGFyZXNpZyAgIDggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uDQorZHFjbXMyMDAgY29tcGFyZXNpZyAgLTcuMCAgICA3LjAgICAgLT4gLTENCitkcWNtczIwMSBjb21wYXJlc2lnICAtNy4wICAgIDcgICAgICAtPiAtMQ0KK2RxY21zMjAyIGNvbXBhcmVzaWcgIC03ICAgICAgNy4wICAgIC0+IC0xDQorZHFjbXMyMDMgY29tcGFyZXNpZyAgLTdFKzAgICA3LjAgICAgLT4gLTENCitkcWNtczIwNCBjb21wYXJlc2lnICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KK2RxY21zMjA1IGNvbXBhcmVzaWcgIC0wLjdFKzEgNyAgICAgIC0+IC0xDQorZHFjbXMyMDYgY29tcGFyZXNpZyAgLTcwRS0xICA3ICAgICAgLT4gLTENCitkcWNtczIwNyBjb21wYXJlc2lnICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KK2RxY21zMjA4IGNvbXBhcmVzaWcgIC03LjAgICAgNzBFLTEgIC0+IC0xDQorZHFjbXMyMDkgY29tcGFyZXNpZyAgLTcgICAgICAwLjdFKzEgLT4gLTENCitkcWNtczIxMCBjb21wYXJlc2lnICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KKw0KK2RxY21zMjIwIGNvbXBhcmVzaWcgIC04LjAgICAgNy4wICAgIC0+IC0xDQorZHFjbXMyMjEgY29tcGFyZXNpZyAgLTguMCAgICA3ICAgICAgLT4gLTENCitkcWNtczIyMiBjb21wYXJlc2lnICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KK2RxY21zMjIzIGNvbXBhcmVzaWcgIC04RSswICAgNy4wICAgIC0+IC0xDQorZHFjbXMyMjQgY29tcGFyZXNpZyAgLTgwRS0xICA3LjAgICAgLT4gLTENCitkcWNtczIyNSBjb21wYXJlc2lnICAtMC44RSsxIDcgICAgICAtPiAtMQ0KK2RxY21zMjI2IGNvbXBhcmVzaWcgIC04MEUtMSAgNyAgICAgIC0+IC0xDQorZHFjbXMyMjcgY29tcGFyZXNpZyAgLTguMCAgICA3RSswICAgLT4gLTENCitkcWNtczIyOCBjb21wYXJlc2lnICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KK2RxY21zMjI5IGNvbXBhcmVzaWcgIC04ICAgICAgMC43RSsxIC0+IC0xDQorZHFjbXMyMzAgY29tcGFyZXNpZyAgLTggICAgICA3MEUtMSAgLT4gLTENCisNCitkcWNtczI0MCBjb21wYXJlc2lnICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KK2RxY21zMjQxIGNvbXBhcmVzaWcgIC04LjAgICAgOSAgICAgIC0+IC0xDQorZHFjbXMyNDIgY29tcGFyZXNpZyAgLTggICAgICA5LjAgICAgLT4gLTENCitkcWNtczI0MyBjb21wYXJlc2lnICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KK2RxY21zMjQ0IGNvbXBhcmVzaWcgIC04MEUtMSAgOS4wICAgIC0+IC0xDQorZHFjbXMyNDUgY29tcGFyZXNpZyAgLTAuOEUrMSA5ICAgICAgLT4gLTENCitkcWNtczI0NiBjb21wYXJlc2lnICAtODBFLTEgIDkgICAgICAtPiAtMQ0KK2RxY21zMjQ3IGNvbXBhcmVzaWcgIC04LjAgICAgOUUrMCAgIC0+IC0xDQorZHFjbXMyNDggY29tcGFyZXNpZyAgLTguMCAgICA5MEUtMSAgLT4gLTENCitkcWNtczI0OSBjb21wYXJlc2lnICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KK2RxY21zMjUwIGNvbXBhcmVzaWcgIC04ICAgICAgOTBFLTEgIC0+IC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLg0KK2RxY21zMzAwIGNvbXBhcmVzaWcgICA3LjAgICAgLTcuMCAgICAtPiAxDQorZHFjbXMzMDEgY29tcGFyZXNpZyAgIDcuMCAgICAtNyAgICAgIC0+IDENCitkcWNtczMwMiBjb21wYXJlc2lnICAgNyAgICAgIC03LjAgICAgLT4gMQ0KK2RxY21zMzAzIGNvbXBhcmVzaWcgICA3RSswICAgLTcuMCAgICAtPiAxDQorZHFjbXMzMDQgY29tcGFyZXNpZyAgIDcwRS0xICAtNy4wICAgIC0+IDENCitkcWNtczMwNSBjb21wYXJlc2lnICAgLjdFKzEgIC03ICAgICAgLT4gMQ0KK2RxY21zMzA2IGNvbXBhcmVzaWcgICA3MEUtMSAgLTcgICAgICAtPiAxDQorZHFjbXMzMDcgY29tcGFyZXNpZyAgIDcuMCAgICAtN0UrMCAgIC0+IDENCitkcWNtczMwOCBjb21wYXJlc2lnICAgNy4wICAgIC03MEUtMSAgLT4gMQ0KK2RxY21zMzA5IGNvbXBhcmVzaWcgICA3ICAgICAgLS43RSsxICAtPiAxDQorZHFjbXMzMTAgY29tcGFyZXNpZyAgIDcgICAgICAtNzBFLTEgIC0+IDENCisNCitkcWNtczMyMCBjb21wYXJlc2lnICAgOC4wICAgIC03LjAgICAgLT4gMQ0KK2RxY21zMzIxIGNvbXBhcmVzaWcgICA4LjAgICAgLTcgICAgICAtPiAxDQorZHFjbXMzMjIgY29tcGFyZXNpZyAgIDggICAgICAtNy4wICAgIC0+IDENCitkcWNtczMyMyBjb21wYXJlc2lnICAgOEUrMCAgIC03LjAgICAgLT4gMQ0KK2RxY21zMzI0IGNvbXBhcmVzaWcgICA4MEUtMSAgLTcuMCAgICAtPiAxDQorZHFjbXMzMjUgY29tcGFyZXNpZyAgIC44RSsxICAtNyAgICAgIC0+IDENCitkcWNtczMyNiBjb21wYXJlc2lnICAgODBFLTEgIC03ICAgICAgLT4gMQ0KK2RxY21zMzI3IGNvbXBhcmVzaWcgICA4LjAgICAgLTdFKzAgICAtPiAxDQorZHFjbXMzMjggY29tcGFyZXNpZyAgIDguMCAgICAtNzBFLTEgIC0+IDENCitkcWNtczMyOSBjb21wYXJlc2lnICAgOCAgICAgIC0uN0UrMSAgLT4gMQ0KK2RxY21zMzMwIGNvbXBhcmVzaWcgICA4ICAgICAgLTcwRS0xICAtPiAxDQorDQorZHFjbXMzNDAgY29tcGFyZXNpZyAgIDguMCAgICAtOS4wICAgIC0+IDENCitkcWNtczM0MSBjb21wYXJlc2lnICAgOC4wICAgIC05ICAgICAgLT4gMQ0KK2RxY21zMzQyIGNvbXBhcmVzaWcgICA4ICAgICAgLTkuMCAgICAtPiAxDQorZHFjbXMzNDMgY29tcGFyZXNpZyAgIDhFKzAgICAtOS4wICAgIC0+IDENCitkcWNtczM0NCBjb21wYXJlc2lnICAgODBFLTEgIC05LjAgICAgLT4gMQ0KK2RxY21zMzQ1IGNvbXBhcmVzaWcgICAuOEUrMSAgLTkgICAgICAtPiAxDQorZHFjbXMzNDYgY29tcGFyZXNpZyAgIDgwRS0xICAtOSAgICAgIC0+IDENCitkcWNtczM0NyBjb21wYXJlc2lnICAgOC4wICAgIC05RSswICAgLT4gMQ0KK2RxY21zMzQ4IGNvbXBhcmVzaWcgICA4LjAgICAgLTkwRS0xICAtPiAxDQorZHFjbXMzNDkgY29tcGFyZXNpZyAgIDggICAgICAtLjlFKzEgIC0+IDENCitkcWNtczM1MCBjb21wYXJlc2lnICAgOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLS0gLi4NCitkcWNtczQwMCBjb21wYXJlc2lnICAgLTcuMCAgICAtNy4wICAgIC0+IDANCitkcWNtczQwMSBjb21wYXJlc2lnICAgLTcuMCAgICAtNyAgICAgIC0+IDANCitkcWNtczQwMiBjb21wYXJlc2lnICAgLTcgICAgICAtNy4wICAgIC0+IDANCitkcWNtczQwMyBjb21wYXJlc2lnICAgLTdFKzAgICAtNy4wICAgIC0+IDANCitkcWNtczQwNCBjb21wYXJlc2lnICAgLTcwRS0xICAtNy4wICAgIC0+IDANCitkcWNtczQwNSBjb21wYXJlc2lnICAgLS43RSsxICAtNyAgICAgIC0+IDANCitkcWNtczQwNiBjb21wYXJlc2lnICAgLTcwRS0xICAtNyAgICAgIC0+IDANCitkcWNtczQwNyBjb21wYXJlc2lnICAgLTcuMCAgICAtN0UrMCAgIC0+IDANCitkcWNtczQwOCBjb21wYXJlc2lnICAgLTcuMCAgICAtNzBFLTEgIC0+IDANCitkcWNtczQwOSBjb21wYXJlc2lnICAgLTcgICAgICAtLjdFKzEgIC0+IDANCitkcWNtczQxMCBjb21wYXJlc2lnICAgLTcgICAgICAtNzBFLTEgIC0+IDANCisNCitkcWNtczQyMCBjb21wYXJlc2lnICAgLTguMCAgICAtNy4wICAgIC0+IC0xDQorZHFjbXM0MjEgY29tcGFyZXNpZyAgIC04LjAgICAgLTcgICAgICAtPiAtMQ0KK2RxY21zNDIyIGNvbXBhcmVzaWcgICAtOCAgICAgIC03LjAgICAgLT4gLTENCitkcWNtczQyMyBjb21wYXJlc2lnICAgLThFKzAgICAtNy4wICAgIC0+IC0xDQorZHFjbXM0MjQgY29tcGFyZXNpZyAgIC04MEUtMSAgLTcuMCAgICAtPiAtMQ0KK2RxY21zNDI1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCitkcWNtczQyNiBjb21wYXJlc2lnICAgLTgwRS0xICAtNyAgICAgIC0+IC0xDQorZHFjbXM0MjcgY29tcGFyZXNpZyAgIC04LjAgICAgLTdFKzAgICAtPiAtMQ0KK2RxY21zNDI4IGNvbXBhcmVzaWcgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCitkcWNtczQyOSBjb21wYXJlc2lnICAgLTggICAgICAtLjdFKzEgIC0+IC0xDQorZHFjbXM0MzAgY29tcGFyZXNpZyAgIC04ICAgICAgLTcwRS0xICAtPiAtMQ0KKw0KK2RxY21zNDQwIGNvbXBhcmVzaWcgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KK2RxY21zNDQxIGNvbXBhcmVzaWcgICAtOC4wICAgIC05ICAgICAgLT4gMQ0KK2RxY21zNDQyIGNvbXBhcmVzaWcgICAtOCAgICAgIC05LjAgICAgLT4gMQ0KK2RxY21zNDQzIGNvbXBhcmVzaWcgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RxY21zNDQ0IGNvbXBhcmVzaWcgICAtODBFLTEgIC05LjAgICAgLT4gMQ0KK2RxY21zNDQ1IGNvbXBhcmVzaWcgICAtLjhFKzEgIC05ICAgICAgLT4gMQ0KK2RxY21zNDQ2IGNvbXBhcmVzaWcgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KK2RxY21zNDQ3IGNvbXBhcmVzaWcgICAtOC4wICAgIC05RSswICAgLT4gMQ0KK2RxY21zNDQ4IGNvbXBhcmVzaWcgICAtOC4wICAgIC05MEUtMSAgLT4gMQ0KK2RxY21zNDQ5IGNvbXBhcmVzaWcgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RxY21zNDUwIGNvbXBhcmVzaWcgICAtOCAgICAgIC05MEUtMSAgLT4gMQ0KKw0KKw0KKy0tIHRlc3RjYXNlcyB0aGF0IHN1YnRyYWN0IHRvIGxvdHMgb2YgemVyb3MgYXQgYm91bmRhcmllcyBbcGdyXQ0KK2RxY21zNDczIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCitkcWNtczQ3NCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCitkcWNtczQ3NSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY21zNDc2IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDAwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCitkcWNtczQ3NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCitkcWNtczQ3OCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMEUrODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUrODkgLT4gMA0KK2RxY21zNDc5IGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjAwMDBFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCitkcWNtczQ4MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCitkcWNtczQ4MSBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMEUtODkgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NkUtODkgLT4gMA0KK2RxY21zNDgyIGNvbXBhcmVzaWcgMTIzLjk5OTk5OTk5OTk5OTk5OTk5OTQ1NjBFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IC0+IDANCitkcWNtczQ4MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IC0+IDANCitkcWNtczQ4NyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwMDAwRSs4OSAtPiAwDQorZHFjbXM0ODggY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDAwRS04OSAtPiAwDQorZHFjbXM0ODkgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwMDBFKzg5IC0+IDANCitkcWNtczQ5MCBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwMDAwRS04OSAtPiAwDQorZHFjbXM0OTEgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDAwRSs4OSAtPiAwDQorZHFjbXM0OTIgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwMDBFLTg5IC0+IDANCitkcWNtczQ5MyBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFKzg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwMDAwRSs4OSAtPiAwDQorZHFjbXM0OTQgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RS04OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDAwRS04OSAtPiAwDQorZHFjbXM0OTUgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2MDBFKzg5IC0+IDANCitkcWNtczQ5NiBjb21wYXJlc2lnIDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTZFLTg5IDEyMy45OTk5OTk5OTk5OTk5OTk5OTk0NTYwRS04OSAtPiAwDQorZHFjbXM0OTcgY29tcGFyZXNpZyAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAxMjMuOTk5OTk5OTk5OTk5OTk5OTk5NDU2RSs4OSAtPiAwDQorDQorLS0gd2lkZS1yYW5naW5nLCBhcm91bmQgcHJlY2lzaW9uOyBzaWducyBlcXVhbA0KK2RxY21zNTAwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTUgICAgLT4gMQ0KK2RxY21zNTAxIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RxY21zNTAyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KK2RxY21zNTAzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTIgICAgLT4gMQ0KK2RxY21zNTA0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RxY21zNTA1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KK2RxY21zNTA2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOSAgICAgLT4gMQ0KK2RxY21zNTA3IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RxY21zNTA4IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KK2RxY21zNTA5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNiAgICAgLT4gMQ0KK2RxY21zNTEwIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNSAgICAgLT4gMQ0KK2RxY21zNTExIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KK2RxY21zNTEyIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMyAgICAgLT4gMQ0KK2RxY21zNTEzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMiAgICAgLT4gMQ0KK2RxY21zNTE0IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KK2RxY21zNTE1IGNvbXBhcmVzaWcgICAgMSAgICAgMUUtMCAgICAgLT4gMA0KK2RxY21zNTE2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMSAgICAgLT4gLTENCitkcWNtczUxNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQorZHFjbXM1MTggY29tcGFyZXNpZyAgICAxICAgICAxRSszICAgICAtPiAtMQ0KK2RxY21zNTE5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNCAgICAgLT4gLTENCitkcWNtczUyMSBjb21wYXJlc2lnICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQorZHFjbXM1MjIgY29tcGFyZXNpZyAgICAxICAgICAxRSs2ICAgICAtPiAtMQ0KK2RxY21zNTIzIGNvbXBhcmVzaWcgICAgMSAgICAgMUUrNyAgICAgLT4gLTENCitkcWNtczUyNCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQorZHFjbXM1MjUgY29tcGFyZXNpZyAgICAxICAgICAxRSs5ICAgICAtPiAtMQ0KK2RxY21zNTI2IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTAgICAgLT4gLTENCitkcWNtczUyNyBjb21wYXJlc2lnICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQorZHFjbXM1MjggY29tcGFyZXNpZyAgICAxICAgICAxRSsxMiAgICAtPiAtMQ0KK2RxY21zNTI5IGNvbXBhcmVzaWcgICAgMSAgICAgMUUrMTMgICAgLT4gLTENCitkcWNtczUzMCBjb21wYXJlc2lnICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQorZHFjbXM1MzEgY29tcGFyZXNpZyAgICAxICAgICAxRSsxNSAgICAtPiAtMQ0KKy0tIExSIHN3YXANCitkcWNtczU0MCBjb21wYXJlc2lnICAgIDFFLTE1ICAxICAgICAgIC0+IC0xDQorZHFjbXM1NDEgY29tcGFyZXNpZyAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KK2RxY21zNTQyIGNvbXBhcmVzaWcgICAgMUUtMTMgIDEgICAgICAgLT4gLTENCitkcWNtczU0MyBjb21wYXJlc2lnICAgIDFFLTEyICAxICAgICAgIC0+IC0xDQorZHFjbXM1NDQgY29tcGFyZXNpZyAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KK2RxY21zNTQ1IGNvbXBhcmVzaWcgICAgMUUtMTAgIDEgICAgICAgLT4gLTENCitkcWNtczU0NiBjb21wYXJlc2lnICAgIDFFLTkgICAxICAgICAgIC0+IC0xDQorZHFjbXM1NDcgY29tcGFyZXNpZyAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KK2RxY21zNTQ4IGNvbXBhcmVzaWcgICAgMUUtNyAgIDEgICAgICAgLT4gLTENCitkcWNtczU0OSBjb21wYXJlc2lnICAgIDFFLTYgICAxICAgICAgIC0+IC0xDQorZHFjbXM1NTAgY29tcGFyZXNpZyAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KK2RxY21zNTUxIGNvbXBhcmVzaWcgICAgMUUtNCAgIDEgICAgICAgLT4gLTENCitkcWNtczU1MiBjb21wYXJlc2lnICAgIDFFLTMgICAxICAgICAgIC0+IC0xDQorZHFjbXM1NTMgY29tcGFyZXNpZyAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KK2RxY21zNTU0IGNvbXBhcmVzaWcgICAgMUUtMSAgIDEgICAgICAgLT4gLTENCitkcWNtczU1NSBjb21wYXJlc2lnICAgIDFFLTAgICAxICAgICAgIC0+ICAwDQorZHFjbXM1NTYgY29tcGFyZXNpZyAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KK2RxY21zNTU3IGNvbXBhcmVzaWcgICAgMUUrMiAgIDEgICAgICAgLT4gIDENCitkcWNtczU1OCBjb21wYXJlc2lnICAgIDFFKzMgICAxICAgICAgIC0+ICAxDQorZHFjbXM1NTkgY29tcGFyZXNpZyAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KK2RxY21zNTYxIGNvbXBhcmVzaWcgICAgMUUrNSAgIDEgICAgICAgLT4gIDENCitkcWNtczU2MiBjb21wYXJlc2lnICAgIDFFKzYgICAxICAgICAgIC0+ICAxDQorZHFjbXM1NjMgY29tcGFyZXNpZyAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KK2RxY21zNTY0IGNvbXBhcmVzaWcgICAgMUUrOCAgIDEgICAgICAgLT4gIDENCitkcWNtczU2NSBjb21wYXJlc2lnICAgIDFFKzkgICAxICAgICAgIC0+ICAxDQorZHFjbXM1NjYgY29tcGFyZXNpZyAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KK2RxY21zNTY3IGNvbXBhcmVzaWcgICAgMUUrMTEgIDEgICAgICAgLT4gIDENCitkcWNtczU2OCBjb21wYXJlc2lnICAgIDFFKzEyICAxICAgICAgIC0+ICAxDQorZHFjbXM1NjkgY29tcGFyZXNpZyAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KK2RxY21zNTcwIGNvbXBhcmVzaWcgICAgMUUrMTQgIDEgICAgICAgLT4gIDENCitkcWNtczU3MSBjb21wYXJlc2lnICAgIDFFKzE1ICAxICAgICAgIC0+ICAxDQorLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5DQorZHFjbXM1ODAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE1ICAgIC0+IDENCitkcWNtczU4MSBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQ0KK2RxY21zNTgyIGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQorZHFjbXM1ODMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEyICAgIC0+IDENCitkcWNtczU4NCBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQ0KK2RxY21zNTg1IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQorZHFjbXM1ODYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTkgICAgIC0+IDENCitkcWNtczU4NyBjb21wYXJlc2lnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQ0KK2RxY21zNTg4IGNvbXBhcmVzaWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQorZHFjbXM1ODkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTYgICAgIC0+IC0xDQorZHFjbXM1OTAgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xDQorZHFjbXM1OTEgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQorZHFjbXM1OTIgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTMgICAgIC0+IC0xDQorZHFjbXM1OTMgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xDQorZHFjbXM1OTQgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQorZHFjbXM1OTUgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTAgICAgIC0+IC0xDQorZHFjbXM1OTYgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xDQorZHFjbXM1OTcgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQorZHFjbXM1OTggY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzMgICAgIC0+IC0xDQorZHFjbXM1OTkgY29tcGFyZXNpZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xDQorDQorLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCitkcWNtczYwMCBjb21wYXJlc2lnICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjbXM2MDEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RxY21zNjAyIGNvbXBhcmVzaWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgLT4gLTENCitkcWNtczYwMyBjb21wYXJlc2lnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjbXM2MDQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQ0KK2RxY21zNjA1IGNvbXBhcmVzaWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgLT4gLTENCitkcWNtczYwNiBjb21wYXJlc2lnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjbXM2MDcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQ0KK2RxY21zNjA4IGNvbXBhcmVzaWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgLT4gLTENCitkcWNtczYwOSBjb21wYXJlc2lnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQorZHFjbXM2MTAgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQ0KK2RxY21zNjExIGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgLT4gIDENCitkcWNtczYxMiBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQorZHFjbXM2MTMgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQ0KK2RxY21zNjE0IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgLT4gIDENCitkcWNtczYxNSBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQorZHFjbXM2MTYgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQ0KK2RxY21zNjE3IGNvbXBhcmVzaWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgLT4gIDENCitkcWNtczYxOCBjb21wYXJlc2lnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQorZHFjbXM2MTkgY29tcGFyZXNpZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQ0KK2RxY21zNjIwIGNvbXBhcmVzaWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkcWNtczYyMSBjb21wYXJlc2lnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjbXM2MjIgY29tcGFyZXNpZyAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RxY21zNjIzIGNvbXBhcmVzaWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgLT4gIDENCitkcWNtczYyNCBjb21wYXJlc2lnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjbXM2MjUgY29tcGFyZXNpZyAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQ0KK2RxY21zNjI2IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgLT4gIDENCitkcWNtczYyNyBjb21wYXJlc2lnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjbXM2MjggY29tcGFyZXNpZyAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQ0KK2RxY21zNjI5IGNvbXBhcmVzaWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgLT4gIDENCitkcWNtczYzMCBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQorZHFjbXM2MzEgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQ0KK2RxY21zNjMyIGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgLT4gLTENCitkcWNtczYzMyBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQorZHFjbXM2MzQgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQ0KK2RxY21zNjM1IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgLT4gLTENCitkcWNtczYzNiBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQorZHFjbXM2MzcgY29tcGFyZXNpZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQ0KK2RxY21zNjM4IGNvbXBhcmVzaWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgLT4gLTENCitkcWNtczYzOSBjb21wYXJlc2lnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitkcWNtczY0MCBjb21wYXJlc2lnICAgMCAgICAgMCAgIC0+IDANCitkcWNtczY0MSBjb21wYXJlc2lnICAgMCAgICAtMCAgIC0+IDANCitkcWNtczY0MiBjb21wYXJlc2lnICAgMCAgICAtMC4wIC0+IDANCitkcWNtczY0MyBjb21wYXJlc2lnICAgMCAgICAgMC4wIC0+IDANCitkcWNtczY0NCBjb21wYXJlc2lnICAtMCAgICAgMCAgIC0+IDANCitkcWNtczY0NSBjb21wYXJlc2lnICAtMCAgICAtMCAgIC0+IDANCitkcWNtczY0NiBjb21wYXJlc2lnICAtMCAgICAtMC4wIC0+IDANCitkcWNtczY0NyBjb21wYXJlc2lnICAtMCAgICAgMC4wIC0+IDANCitkcWNtczY0OCBjb21wYXJlc2lnICAgMC4wICAgMCAgIC0+IDANCitkcWNtczY0OSBjb21wYXJlc2lnICAgMC4wICAtMCAgIC0+IDANCitkcWNtczY1MCBjb21wYXJlc2lnICAgMC4wICAtMC4wIC0+IDANCitkcWNtczY1MSBjb21wYXJlc2lnICAgMC4wICAgMC4wIC0+IDANCitkcWNtczY1MiBjb21wYXJlc2lnICAtMC4wICAgMCAgIC0+IDANCitkcWNtczY1MyBjb21wYXJlc2lnICAtMC4wICAtMCAgIC0+IDANCitkcWNtczY1NCBjb21wYXJlc2lnICAtMC4wICAtMC4wIC0+IDANCitkcWNtczY1NSBjb21wYXJlc2lnICAtMC4wICAgMC4wIC0+IDANCisNCitkcWNtczY1NiBjb21wYXJlc2lnICAtMEUxICAgMC4wIC0+IDANCitkcWNtczY1NyBjb21wYXJlc2lnICAtMEUyICAgMC4wIC0+IDANCitkcWNtczY1OCBjb21wYXJlc2lnICAgMEUxICAgMC4wIC0+IDANCitkcWNtczY1OSBjb21wYXJlc2lnICAgMEUyICAgMC4wIC0+IDANCitkcWNtczY2MCBjb21wYXJlc2lnICAtMEUxICAgMCAgIC0+IDANCitkcWNtczY2MSBjb21wYXJlc2lnICAtMEUyICAgMCAgIC0+IDANCitkcWNtczY2MiBjb21wYXJlc2lnICAgMEUxICAgMCAgIC0+IDANCitkcWNtczY2MyBjb21wYXJlc2lnICAgMEUyICAgMCAgIC0+IDANCitkcWNtczY2NCBjb21wYXJlc2lnICAtMEUxICAtMEUxIC0+IDANCitkcWNtczY2NSBjb21wYXJlc2lnICAtMEUyICAtMEUxIC0+IDANCitkcWNtczY2NiBjb21wYXJlc2lnICAgMEUxICAtMEUxIC0+IDANCitkcWNtczY2NyBjb21wYXJlc2lnICAgMEUyICAtMEUxIC0+IDANCitkcWNtczY2OCBjb21wYXJlc2lnICAtMEUxICAtMEUyIC0+IDANCitkcWNtczY2OSBjb21wYXJlc2lnICAtMEUyICAtMEUyIC0+IDANCitkcWNtczY3MCBjb21wYXJlc2lnICAgMEUxICAtMEUyIC0+IDANCitkcWNtczY3MSBjb21wYXJlc2lnICAgMEUyICAtMEUyIC0+IDANCitkcWNtczY3MiBjb21wYXJlc2lnICAtMEUxICAgMEUxIC0+IDANCitkcWNtczY3MyBjb21wYXJlc2lnICAtMEUyICAgMEUxIC0+IDANCitkcWNtczY3NCBjb21wYXJlc2lnICAgMEUxICAgMEUxIC0+IDANCitkcWNtczY3NSBjb21wYXJlc2lnICAgMEUyICAgMEUxIC0+IDANCitkcWNtczY3NiBjb21wYXJlc2lnICAtMEUxICAgMEUyIC0+IDANCitkcWNtczY3NyBjb21wYXJlc2lnICAtMEUyICAgMEUyIC0+IDANCitkcWNtczY3OCBjb21wYXJlc2lnICAgMEUxICAgMEUyIC0+IDANCitkcWNtczY3OSBjb21wYXJlc2lnICAgMEUyICAgMEUyIC0+IDANCisNCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQorZHFjbXM2ODAgY29tcGFyZXNpZyAgIDEyICAgIDEyICAgICAgICAgICAtPiAwDQorZHFjbXM2ODEgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAgICAgICAgICAtPiAwDQorZHFjbXM2ODIgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwICAgICAgICAtPiAwDQorZHFjbXM2ODMgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAwDQorZHFjbXM2ODQgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAgICAgICAtPiAwDQorZHFjbXM2ODUgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAwDQorZHFjbXM2ODYgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAwDQorZHFjbXM2ODcgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAgICAtPiAwDQorZHFjbXM2ODggY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAwDQorZHFjbXM2ODkgY29tcGFyZXNpZyAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAwDQorZHFjbXM2OTAgY29tcGFyZXNpZyAgIDEyICAgICAgICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTEgY29tcGFyZXNpZyAgIDEyLjAgICAgICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTIgY29tcGFyZXNpZyAgIDEyLjAwICAgICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTMgY29tcGFyZXNpZyAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTQgY29tcGFyZXNpZyAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTUgY29tcGFyZXNpZyAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAwDQorZHFjbXM2OTYgY29tcGFyZXNpZyAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAwDQorZHFjbXM2OTcgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAwDQorZHFjbXM2OTggY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAwDQorZHFjbXM2OTkgY29tcGFyZXNpZyAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAwDQorDQorLS0gZmlyc3QsIHNlY29uZCwgJiBsYXN0IGRpZ2l0DQorZHFjbXM3MDAgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NSAtPiAxDQorZHFjbXM3MDEgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAtPiAwDQorZHFjbXM3MDIgY29tcGFyZXNpZyAgIDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgMTIzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NyAtPiAtMQ0KK2RxY21zNzAzIGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDAyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMQ0KK2RxY21zNzA0IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDEyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gMA0KK2RxY21zNzA1IGNvbXBhcmVzaWcgICAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IDIyMzQ1Njc4OTk5OTk5OTk5OTk5OTk5OTk5OTAxMjM0NTYgLT4gLTENCitkcWNtczcwNiBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMDM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDENCitkcWNtczcwNyBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMTM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IDANCitkcWNtczcwOCBjb21wYXJlc2lnICAgMTEzNDU2Nzg5OTk5OTk5OTk5OTk5OTk5OTk5MDEyMzQ1NiAxMjM0NTY3ODk5OTk5OTk5OTk5OTk5OTk5OTkwMTIzNDU2IC0+IC0xDQorDQorLS0gbWlzY2VsbGFuZW91cw0KK2RxY21zNzIxIGNvbXBhcmVzaWcgMTIzNDU2NzgwMDAgMSAtPiAxDQorZHFjbXM3MjIgY29tcGFyZXNpZyAxIDEyMzQ1Njc4MDAwIC0+IC0xDQorZHFjbXM3MjMgY29tcGFyZXNpZyAxMjM0NTY3ODAwICAxIC0+IDENCitkcWNtczcyNCBjb21wYXJlc2lnIDEgMTIzNDU2NzgwMCAgLT4gLTENCitkcWNtczcyNSBjb21wYXJlc2lnIDEyMzQ1Njc4OTAgIDEgLT4gMQ0KK2RxY21zNzI2IGNvbXBhcmVzaWcgMSAxMjM0NTY3ODkwICAtPiAtMQ0KK2RxY21zNzI3IGNvbXBhcmVzaWcgMTIzNDU2Nzg5MSAgMSAtPiAxDQorZHFjbXM3MjggY29tcGFyZXNpZyAxIDEyMzQ1Njc4OTEgIC0+IC0xDQorZHFjbXM3MjkgY29tcGFyZXNpZyAxMjM0NTY3ODkwMSAxIC0+IDENCitkcWNtczczMCBjb21wYXJlc2lnIDEgMTIzNDU2Nzg5MDEgLT4gLTENCitkcWNtczczMSBjb21wYXJlc2lnIDEyMzQ1Njc4OTYgIDEgLT4gMQ0KK2RxY21zNzMyIGNvbXBhcmVzaWcgMSAxMjM0NTY3ODk2ICAtPiAtMQ0KKw0KKy0tIHJlc2lkdWUgY2FzZXMgYXQgbG93ZXIgcHJlY2lzaW9uDQorZHFjbXM3NDAgY29tcGFyZXNpZyAgMSAgMC45OTk5OTk5ICAtPiAxDQorZHFjbXM3NDEgY29tcGFyZXNpZyAgMSAgMC45OTk5OTkgICAtPiAxDQorZHFjbXM3NDIgY29tcGFyZXNpZyAgMSAgMC45OTk5OSAgICAtPiAxDQorZHFjbXM3NDMgY29tcGFyZXNpZyAgMSAgMS4wMDAwICAgICAtPiAwDQorZHFjbXM3NDQgY29tcGFyZXNpZyAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KK2RxY21zNzQ1IGNvbXBhcmVzaWcgIDEgIDEuMDAwMDAxICAgLT4gLTENCitkcWNtczc0NiBjb21wYXJlc2lnICAxICAxLjAwMDAwMDEgIC0+IC0xDQorZHFjbXM3NTAgY29tcGFyZXNpZyAgMC45OTk5OTk5ICAxICAtPiAtMQ0KK2RxY21zNzUxIGNvbXBhcmVzaWcgIDAuOTk5OTk5ICAgMSAgLT4gLTENCitkcWNtczc1MiBjb21wYXJlc2lnICAwLjk5OTk5ICAgIDEgIC0+IC0xDQorZHFjbXM3NTMgY29tcGFyZXNpZyAgMS4wMDAwICAgICAxICAtPiAwDQorZHFjbXM3NTQgY29tcGFyZXNpZyAgMS4wMDAwMSAgICAxICAtPiAxDQorZHFjbXM3NTUgY29tcGFyZXNpZyAgMS4wMDAwMDEgICAxICAtPiAxDQorZHFjbXM3NTYgY29tcGFyZXNpZyAgMS4wMDAwMDAxICAxICAtPiAxDQorDQorLS0gU3BlY2lhbHMNCitkcWNtczc4MCBjb21wYXJlc2lnICBJbmYgIC1JbmYgICAtPiAgMQ0KK2RxY21zNzgxIGNvbXBhcmVzaWcgIEluZiAgLTEwMDAgIC0+ICAxDQorZHFjbXM3ODIgY29tcGFyZXNpZyAgSW5mICAtMSAgICAgLT4gIDENCitkcWNtczc4MyBjb21wYXJlc2lnICBJbmYgIC0wICAgICAtPiAgMQ0KK2RxY21zNzg0IGNvbXBhcmVzaWcgIEluZiAgIDAgICAgIC0+ICAxDQorZHFjbXM3ODUgY29tcGFyZXNpZyAgSW5mICAgMSAgICAgLT4gIDENCitkcWNtczc4NiBjb21wYXJlc2lnICBJbmYgICAxMDAwICAtPiAgMQ0KK2RxY21zNzg3IGNvbXBhcmVzaWcgIEluZiAgIEluZiAgIC0+ICAwDQorZHFjbXM3ODggY29tcGFyZXNpZyAtMTAwMCAgSW5mICAgLT4gLTENCitkcWNtczc4OSBjb21wYXJlc2lnIC1JbmYgICBJbmYgICAtPiAtMQ0KK2RxY21zNzkwIGNvbXBhcmVzaWcgLTEgICAgIEluZiAgIC0+IC0xDQorZHFjbXM3OTEgY29tcGFyZXNpZyAtMCAgICAgSW5mICAgLT4gLTENCitkcWNtczc5MiBjb21wYXJlc2lnICAwICAgICBJbmYgICAtPiAtMQ0KK2RxY21zNzkzIGNvbXBhcmVzaWcgIDEgICAgIEluZiAgIC0+IC0xDQorZHFjbXM3OTQgY29tcGFyZXNpZyAgMTAwMCAgSW5mICAgLT4gLTENCitkcWNtczc5NSBjb21wYXJlc2lnICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2RxY21zODAwIGNvbXBhcmVzaWcgLUluZiAgLUluZiAgIC0+ICAwDQorZHFjbXM4MDEgY29tcGFyZXNpZyAtSW5mICAtMTAwMCAgLT4gLTENCitkcWNtczgwMiBjb21wYXJlc2lnIC1JbmYgIC0xICAgICAtPiAtMQ0KK2RxY21zODAzIGNvbXBhcmVzaWcgLUluZiAgLTAgICAgIC0+IC0xDQorZHFjbXM4MDQgY29tcGFyZXNpZyAtSW5mICAgMCAgICAgLT4gLTENCitkcWNtczgwNSBjb21wYXJlc2lnIC1JbmYgICAxICAgICAtPiAtMQ0KK2RxY21zODA2IGNvbXBhcmVzaWcgLUluZiAgIDEwMDAgIC0+IC0xDQorZHFjbXM4MDcgY29tcGFyZXNpZyAtSW5mICAgSW5mICAgLT4gLTENCitkcWNtczgwOCBjb21wYXJlc2lnIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RxY21zODA5IGNvbXBhcmVzaWcgLTEwMDAgLUluZiAgIC0+ICAxDQorZHFjbXM4MTAgY29tcGFyZXNpZyAtMSAgICAtSW5mICAgLT4gIDENCitkcWNtczgxMSBjb21wYXJlc2lnIC0wICAgIC1JbmYgICAtPiAgMQ0KK2RxY21zODEyIGNvbXBhcmVzaWcgIDAgICAgLUluZiAgIC0+ICAxDQorZHFjbXM4MTMgY29tcGFyZXNpZyAgMSAgICAtSW5mICAgLT4gIDENCitkcWNtczgxNCBjb21wYXJlc2lnICAxMDAwIC1JbmYgICAtPiAgMQ0KK2RxY21zODE1IGNvbXBhcmVzaWcgIEluZiAgLUluZiAgIC0+ICAxDQorDQorZHFjbXM4MjEgY29tcGFyZXNpZyAgTmFOIC1JbmYgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgyMiBjb21wYXJlc2lnICBOYU4gLTEwMDAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODIzIGNvbXBhcmVzaWcgIE5hTiAtMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MjQgY29tcGFyZXNpZyAgTmFOIC0wICAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgyNSBjb21wYXJlc2lnICBOYU4gIDAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODI2IGNvbXBhcmVzaWcgIE5hTiAgMSAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MjcgY29tcGFyZXNpZyAgTmFOICAxMDAwICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgyOCBjb21wYXJlc2lnICBOYU4gIEluZiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODI5IGNvbXBhcmVzaWcgIE5hTiAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MzAgY29tcGFyZXNpZyAtSW5mICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgzMSBjb21wYXJlc2lnIC0xMDAwIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODMyIGNvbXBhcmVzaWcgLTEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MzMgY29tcGFyZXNpZyAtMCAgICBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgzNCBjb21wYXJlc2lnICAwICAgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODM1IGNvbXBhcmVzaWcgIDEgICAgTmFOICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MzYgY29tcGFyZXNpZyAgMTAwMCBOYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczgzNyBjb21wYXJlc2lnICBJbmYgIE5hTiAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODM4IGNvbXBhcmVzaWcgLU5hTiAtTmFOICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4MzkgY29tcGFyZXNpZyArTmFOIC1OYU4gICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg0MCBjb21wYXJlc2lnIC1OYU4gK05hTiAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RxY21zODQxIGNvbXBhcmVzaWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NDIgY29tcGFyZXNpZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg0MyBjb21wYXJlc2lnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODQ0IGNvbXBhcmVzaWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NDUgY29tcGFyZXNpZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg0NiBjb21wYXJlc2lnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODQ3IGNvbXBhcmVzaWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NDggY29tcGFyZXNpZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg0OSBjb21wYXJlc2lnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODUwIGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NTEgY29tcGFyZXNpZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg1MiBjb21wYXJlc2lnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODUzIGNvbXBhcmVzaWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NTQgY29tcGFyZXNpZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg1NSBjb21wYXJlc2lnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODU2IGNvbXBhcmVzaWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NTcgY29tcGFyZXNpZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg1OCBjb21wYXJlc2lnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODU5IGNvbXBhcmVzaWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxY21zODYwIGNvbXBhcmVzaWcgIE5hTjkgLUluZiAgIC0+ICBOYU45ICAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NjEgY29tcGFyZXNpZyAgTmFOOCAgOTk5ICAgLT4gIE5hTjggICAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg2MiBjb21wYXJlc2lnICBOYU43NyBJbmYgICAtPiAgTmFONzcgICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODYzIGNvbXBhcmVzaWcgLU5hTjY3IE5hTjUgIC0+IC1OYU42NyAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NjQgY29tcGFyZXNpZyAtSW5mICAtTmFONCAgLT4gLU5hTjQgICAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg2NSBjb21wYXJlc2lnIC05OTkgIC1OYU4zMyAtPiAtTmFOMzMgICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODY2IGNvbXBhcmVzaWcgIEluZiAgIE5hTjIgIC0+ICBOYU4yICAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NjcgY29tcGFyZXNpZyAtTmFONDEgLU5hTjQyIC0+IC1OYU40MSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg2OCBjb21wYXJlc2lnICtOYU40MSAtTmFONDIgLT4gIE5hTjQxICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxY21zODY5IGNvbXBhcmVzaWcgLU5hTjQxICtOYU40MiAtPiAtTmFONDEgIEludmFsaWRfb3BlcmF0aW9uDQorZHFjbXM4NzAgY29tcGFyZXNpZyArTmFONDEgK05hTjQyIC0+ICBOYU40MSAgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWNtczg3MSBjb21wYXJlc2lnIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3MiBjb21wYXJlc2lnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3MyBjb21wYXJlc2lnICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3NCBjb21wYXJlc2lnICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3NSBjb21wYXJlc2lnICBOYU44NSAgc05hTjgzICAtPiAgTmFOODMgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3NiBjb21wYXJlc2lnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3NyBjb21wYXJlc2lnICAwODggICAgc05hTjgxICAtPiAgTmFOODEgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3OCBjb21wYXJlc2lnICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczg3OSBjb21wYXJlc2lnICBOYU4gICAtc05hTjg5ICAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSB3aWRlIHJhbmdlDQorZHFjbXM4ODAgY29tcGFyZXNpZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQorZHFjbXM4ODEgY29tcGFyZXNpZyA5RSs2MTQ0ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQorZHFjbXM4ODIgY29tcGFyZXNpZyArMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+ICAxDQorZHFjbXM4ODMgY29tcGFyZXNpZyA5RS02MTQzICswLjEwMCAgICAgICAgICAgICAgIC0+IC0xDQorZHFjbXM4ODUgY29tcGFyZXNpZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs2MTQ0IC0+IC0xDQorZHFjbXM4ODYgY29tcGFyZXNpZyA5RSs2MTQ0IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICAxDQorZHFjbXM4ODcgY29tcGFyZXNpZyAtMC4xMDAgOUUtNjE0MyAgICAgICAgICAgICAgIC0+IC0xDQorZHFjbXM4ODggY29tcGFyZXNpZyA5RS02MTQzIC0wLjEwMCAgICAgICAgICAgICAgIC0+ICAxDQorDQorLS0gc2lnbnMNCitkcWNtczkwMSBjb21wYXJlc2lnICAxZSs3NyAgMWUrMTEgLT4gIDENCitkcWNtczkwMiBjb21wYXJlc2lnICAxZSs3NyAtMWUrMTEgLT4gIDENCitkcWNtczkwMyBjb21wYXJlc2lnIC0xZSs3NyAgMWUrMTEgLT4gLTENCitkcWNtczkwNCBjb21wYXJlc2lnIC0xZSs3NyAtMWUrMTEgLT4gLTENCitkcWNtczkwNSBjb21wYXJlc2lnICAxZS03NyAgMWUtMTEgLT4gLTENCitkcWNtczkwNiBjb21wYXJlc2lnICAxZS03NyAtMWUtMTEgLT4gIDENCitkcWNtczkwNyBjb21wYXJlc2lnIC0xZS03NyAgMWUtMTEgLT4gLTENCitkcWNtczkwOCBjb21wYXJlc2lnIC0xZS03NyAtMWUtMTEgLT4gIDENCisNCistLSBOdWxsIHRlc3RzDQorZHFjbXM5OTAgY29tcGFyZXNpZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWNtczk5MSBjb21wYXJlc2lnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKaW5kZXggMTM3MDFjYy4uYmFlMzc2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUNvbXBhcmVUb3RhbC5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbiB1c2luZyB0b3RhbCBvcmRlcmluZyAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90Ci0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocwotLS0gdGhhbiBjb21wYXJlLgotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDAKLWRxY290MDAyIGNvbXBhcmV0b3RhbCAgLTIgIC0xICAtPiAtMQotZHFjb3QwMDMgY29tcGFyZXRvdGFsICAtMiAgIDAgIC0+IC0xCi1kcWNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTEKLWRxY290MDA1IGNvbXBhcmV0b3RhbCAgLTIgICAyICAtPiAtMQotZHFjb3QwMDYgY29tcGFyZXRvdGFsICAtMSAgLTIgIC0+IDEKLWRxY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwCi1kcWNvdDAwOCBjb21wYXJldG90YWwgIC0xICAgMCAgLT4gLTEKLWRxY290MDA5IGNvbXBhcmV0b3RhbCAgLTEgICAxICAtPiAtMQotZHFjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xCi1kcWNvdDAxMSBjb21wYXJldG90YWwgICAwICAtMiAgLT4gMQotZHFjb3QwMTIgY29tcGFyZXRvdGFsICAgMCAgLTEgIC0+IDEKLWRxY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwCi1kcWNvdDAxNCBjb21wYXJldG90YWwgICAwICAgMSAgLT4gLTEKLWRxY290MDE1IGNvbXBhcmV0b3RhbCAgIDAgICAyICAtPiAtMQotZHFjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDEKLWRxY290MDE3IGNvbXBhcmV0b3RhbCAgIDEgIC0xICAtPiAxCi1kcWNvdDAxOCBjb21wYXJldG90YWwgICAxICAgMCAgLT4gMQotZHFjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDAKLWRxY290MDIwIGNvbXBhcmV0b3RhbCAgIDEgICAyICAtPiAtMQotZHFjb3QwMjEgY29tcGFyZXRvdGFsICAgMiAgLTIgIC0+IDEKLWRxY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxCi1kcWNvdDAyMyBjb21wYXJldG90YWwgICAyICAgMCAgLT4gMQotZHFjb3QwMjUgY29tcGFyZXRvdGFsICAgMiAgIDEgIC0+IDEKLWRxY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwCi0KLWRxY290MDMxIGNvbXBhcmV0b3RhbCAgLTIwICAtMjAgIC0+IDAKLWRxY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xCi1kcWNvdDAzMyBjb21wYXJldG90YWwgIC0yMCAgIDAwICAtPiAtMQotZHFjb3QwMzQgY29tcGFyZXRvdGFsICAtMjAgICAxMCAgLT4gLTEKLWRxY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xCi1kcWNvdDAzNiBjb21wYXJldG90YWwgIC0xMCAgLTIwICAtPiAxCi1kcWNvdDAzNyBjb21wYXJldG90YWwgIC0xMCAgLTEwICAtPiAwCi1kcWNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQotZHFjb3QwMzkgY29tcGFyZXRvdGFsICAtMTAgICAxMCAgLT4gLTEKLWRxY290MDQwIGNvbXBhcmV0b3RhbCAgLTEwICAgMjAgIC0+IC0xCi1kcWNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxCi1kcWNvdDA0MiBjb21wYXJldG90YWwgICAwMCAgLTEwICAtPiAxCi1kcWNvdDA0MyBjb21wYXJldG90YWwgICAwMCAgIDAwICAtPiAwCi1kcWNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQotZHFjb3QwNDUgY29tcGFyZXRvdGFsICAgMDAgICAyMCAgLT4gLTEKLWRxY290MDQ2IGNvbXBhcmV0b3RhbCAgIDEwICAtMjAgIC0+IDEKLWRxY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDEKLWRxY290MDQ4IGNvbXBhcmV0b3RhbCAgIDEwICAgMDAgIC0+IDEKLWRxY290MDQ5IGNvbXBhcmV0b3RhbCAgIDEwICAgMTAgIC0+IDAKLWRxY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xCi1kcWNvdDA1MSBjb21wYXJldG90YWwgICAyMCAgLTIwICAtPiAxCi1kcWNvdDA1MiBjb21wYXJldG90YWwgICAyMCAgLTEwICAtPiAxCi1kcWNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxCi1kcWNvdDA1NSBjb21wYXJldG90YWwgICAyMCAgIDEwICAtPiAxCi1kcWNvdDA1NiBjb21wYXJldG90YWwgICAyMCAgIDIwICAtPiAwCi0KLWRxY290MDYxIGNvbXBhcmV0b3RhbCAgLTIuMCAgLTIuMCAgLT4gMAotZHFjb3QwNjIgY29tcGFyZXRvdGFsICAtMi4wICAtMS4wICAtPiAtMQotZHFjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQotZHFjb3QwNjQgY29tcGFyZXRvdGFsICAtMi4wICAgMS4wICAtPiAtMQotZHFjb3QwNjUgY29tcGFyZXRvdGFsICAtMi4wICAgMi4wICAtPiAtMQotZHFjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxCi1kcWNvdDA2NyBjb21wYXJldG90YWwgIC0xLjAgIC0xLjAgIC0+IDAKLWRxY290MDY4IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDAuMCAgLT4gLTEKLWRxY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTEKLWRxY290MDcwIGNvbXBhcmV0b3RhbCAgLTEuMCAgIDIuMCAgLT4gLTEKLWRxY290MDcxIGNvbXBhcmV0b3RhbCAgIDAuMCAgLTIuMCAgLT4gMQotZHFjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxCi1kcWNvdDA3MyBjb21wYXJldG90YWwgICAwLjAgICAwLjAgIC0+IDAKLWRxY290MDc0IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDEuMCAgLT4gLTEKLWRxY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTEKLWRxY290MDc2IGNvbXBhcmV0b3RhbCAgIDEuMCAgLTIuMCAgLT4gMQotZHFjb3QwNzcgY29tcGFyZXRvdGFsICAgMS4wICAtMS4wICAtPiAxCi1kcWNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDEKLWRxY290MDc5IGNvbXBhcmV0b3RhbCAgIDEuMCAgIDEuMCAgLT4gMAotZHFjb3QwODAgY29tcGFyZXRvdGFsICAgMS4wICAgMi4wICAtPiAtMQotZHFjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxCi1kcWNvdDA4MiBjb21wYXJldG90YWwgICAyLjAgIC0xLjAgIC0+IDEKLWRxY290MDgzIGNvbXBhcmV0b3RhbCAgIDIuMCAgIDAuMCAgLT4gMQotZHFjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxCi1kcWNvdDA4NiBjb21wYXJldG90YWwgICAyLjAgICAyLjAgIC0+IDAKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1kcWNvdDA5MCBjb21wYXJldG90YWwgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMAotZHFjb3QwOTEgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC0xCi1kcWNvdDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQotZHFjb3QwOTMgY29tcGFyZXRvdGFsIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDAKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCi1kcWNvdDEwMCBjb21wYXJldG90YWwgICA3LjAgICAgNy4wICAgIC0+IDAKLWRxY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTEKLWRxY290MTAyIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3LjAgICAgLT4gMQotZHFjb3QxMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIDcuMCAgICAtPiAxCi1kcWNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDAKLWRxY290MTA1IGNvbXBhcmV0b3RhbCAgIDAuN0UrMSA3ICAgICAgLT4gMAotZHFjb3QxMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIDcgICAgICAtPiAtMQotZHFjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQotZHFjb3QxMDggY29tcGFyZXRvdGFsICAgNy4wICAgIDcwRS0xICAtPiAwCi1kcWNvdDEwOSBjb21wYXJldG90YWwgICA3ICAgICAgMC43RSsxIC0+IDAKLWRxY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQotCi1kcWNvdDEyMCBjb21wYXJldG90YWwgICA4LjAgICAgNy4wICAgIC0+IDEKLWRxY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQotZHFjb3QxMjIgY29tcGFyZXRvdGFsICAgOCAgICAgIDcuMCAgICAtPiAxCi1kcWNvdDEyMyBjb21wYXJldG90YWwgICA4RSswICAgNy4wICAgIC0+IDEKLWRxY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQotZHFjb3QxMjUgY29tcGFyZXRvdGFsICAgMC44RSsxIDcgICAgICAtPiAxCi1kcWNvdDEyNiBjb21wYXJldG90YWwgICA4MEUtMSAgNyAgICAgIC0+IDEKLWRxY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQotZHFjb3QxMjggY29tcGFyZXRvdGFsICAgOC4wICAgIDcwRS0xICAtPiAxCi1kcWNvdDEyOSBjb21wYXJldG90YWwgICA4ICAgICAgMC43RSsxICAtPiAxCi1kcWNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDEKLQotZHFjb3QxNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIDkuMCAgICAtPiAtMQotZHFjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQotZHFjb3QxNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIDkuMCAgICAtPiAtMQotZHFjb3QxNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIDkuMCAgICAtPiAtMQotZHFjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQotZHFjb3QxNDUgY29tcGFyZXRvdGFsICAgMC44RSsxIDkgICAgICAtPiAtMQotZHFjb3QxNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIDkgICAgICAtPiAtMQotZHFjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQotZHFjb3QxNDggY29tcGFyZXRvdGFsICAgOC4wICAgIDkwRS0xICAtPiAtMQotZHFjb3QxNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIDAuOUUrMSAtPiAtMQotZHFjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0rIC4uCi1kcWNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xCi1kcWNvdDIwMSBjb21wYXJldG90YWwgIC03LjAgICAgNyAgICAgIC0+IC0xCi1kcWNvdDIwMiBjb21wYXJldG90YWwgIC03ICAgICAgNy4wICAgIC0+IC0xCi1kcWNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xCi1kcWNvdDIwNCBjb21wYXJldG90YWwgIC03MEUtMSAgNy4wICAgIC0+IC0xCi1kcWNvdDIwNSBjb21wYXJldG90YWwgIC0wLjdFKzEgNyAgICAgIC0+IC0xCi1kcWNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xCi1kcWNvdDIwNyBjb21wYXJldG90YWwgIC03LjAgICAgN0UrMCAgIC0+IC0xCi1kcWNvdDIwOCBjb21wYXJldG90YWwgIC03LjAgICAgNzBFLTEgIC0+IC0xCi1kcWNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xCi1kcWNvdDIxMCBjb21wYXJldG90YWwgIC03ICAgICAgNzBFLTEgIC0+IC0xCi0KLWRxY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTEKLWRxY290MjIxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3ICAgICAgLT4gLTEKLWRxY290MjIyIGNvbXBhcmV0b3RhbCAgLTggICAgICA3LjAgICAgLT4gLTEKLWRxY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTEKLWRxY290MjI0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3LjAgICAgLT4gLTEKLWRxY290MjI1IGNvbXBhcmV0b3RhbCAgLTAuOEUrMSA3ICAgICAgLT4gLTEKLWRxY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTEKLWRxY290MjI3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3RSswICAgLT4gLTEKLWRxY290MjI4IGNvbXBhcmV0b3RhbCAgLTguMCAgICA3MEUtMSAgLT4gLTEKLWRxY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTEKLWRxY290MjMwIGNvbXBhcmV0b3RhbCAgLTggICAgICA3MEUtMSAgLT4gLTEKLQotZHFjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQotZHFjb3QyNDEgY29tcGFyZXRvdGFsICAtOC4wICAgIDkgICAgICAtPiAtMQotZHFjb3QyNDIgY29tcGFyZXRvdGFsICAtOCAgICAgIDkuMCAgICAtPiAtMQotZHFjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQotZHFjb3QyNDQgY29tcGFyZXRvdGFsICAtODBFLTEgIDkuMCAgICAtPiAtMQotZHFjb3QyNDUgY29tcGFyZXRvdGFsICAtMC44RSsxIDkgICAgICAtPiAtMQotZHFjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQotZHFjb3QyNDcgY29tcGFyZXRvdGFsICAtOC4wICAgIDlFKzAgICAtPiAtMQotZHFjb3QyNDggY29tcGFyZXRvdGFsICAtOC4wICAgIDkwRS0xICAtPiAtMQotZHFjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQotZHFjb3QyNTAgY29tcGFyZXRvdGFsICAtOCAgICAgIDkwRS0xICAtPiAtMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uCi1kcWNvdDMwMCBjb21wYXJldG90YWwgICA3LjAgICAgLTcuMCAgICAtPiAxCi1kcWNvdDMwMSBjb21wYXJldG90YWwgICA3LjAgICAgLTcgICAgICAtPiAxCi1kcWNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxCi1kcWNvdDMwMyBjb21wYXJldG90YWwgICA3RSswICAgLTcuMCAgICAtPiAxCi1kcWNvdDMwNCBjb21wYXJldG90YWwgICA3MEUtMSAgLTcuMCAgICAtPiAxCi1kcWNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxCi1kcWNvdDMwNiBjb21wYXJldG90YWwgICA3MEUtMSAgLTcgICAgICAtPiAxCi1kcWNvdDMwNyBjb21wYXJldG90YWwgICA3LjAgICAgLTdFKzAgICAtPiAxCi1kcWNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxCi1kcWNvdDMwOSBjb21wYXJldG90YWwgICA3ICAgICAgLS43RSsxICAtPiAxCi1kcWNvdDMxMCBjb21wYXJldG90YWwgICA3ICAgICAgLTcwRS0xICAtPiAxCi0KLWRxY290MzIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNy4wICAgIC0+IDEKLWRxY290MzIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNyAgICAgIC0+IDEKLWRxY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDEKLWRxY290MzIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtNy4wICAgIC0+IDEKLWRxY290MzI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNy4wICAgIC0+IDEKLWRxY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDEKLWRxY290MzI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtNyAgICAgIC0+IDEKLWRxY290MzI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtN0UrMCAgIC0+IDEKLWRxY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDEKLWRxY290MzI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjdFKzEgIC0+IDEKLWRxY290MzMwIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNzBFLTEgIC0+IDEKLQotZHFjb3QzNDAgY29tcGFyZXRvdGFsICAgOC4wICAgIC05LjAgICAgLT4gMQotZHFjb3QzNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIC05ICAgICAgLT4gMQotZHFjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQotZHFjb3QzNDMgY29tcGFyZXRvdGFsICAgOEUrMCAgIC05LjAgICAgLT4gMQotZHFjb3QzNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIC05LjAgICAgLT4gMQotZHFjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQotZHFjb3QzNDYgY29tcGFyZXRvdGFsICAgODBFLTEgIC05ICAgICAgLT4gMQotZHFjb3QzNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIC05RSswICAgLT4gMQotZHFjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQotZHFjb3QzNDkgY29tcGFyZXRvdGFsICAgOCAgICAgIC0uOUUrMSAgLT4gMQotZHFjb3QzNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIC05MEUtMSAgLT4gMQotCi0tLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uCi1kcWNvdDQwMCBjb21wYXJldG90YWwgICAtNy4wICAgIC03LjAgICAgLT4gMAotZHFjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDEKLWRxY290NDAyIGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLTcuMCAgICAtPiAtMQotZHFjb3Q0MDMgY29tcGFyZXRvdGFsICAgLTdFKzAgICAtNy4wICAgIC0+IC0xCi1kcWNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMAotZHFjb3Q0MDUgY29tcGFyZXRvdGFsICAgLS43RSsxICAtNyAgICAgIC0+IDAKLWRxY290NDA2IGNvbXBhcmV0b3RhbCAgIC03MEUtMSAgLTcgICAgICAtPiAxCi1kcWNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQotZHFjb3Q0MDggY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNzBFLTEgIC0+IDAKLWRxY290NDA5IGNvbXBhcmV0b3RhbCAgIC03ICAgICAgLS43RSsxICAtPiAwCi1kcWNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTEKLQotZHFjb3Q0MjAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtNy4wICAgIC0+IC0xCi1kcWNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTEKLWRxY290NDIyIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTcuMCAgICAtPiAtMQotZHFjb3Q0MjMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtNy4wICAgIC0+IC0xCi1kcWNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTEKLWRxY290NDI1IGNvbXBhcmV0b3RhbCAgIC0uOEUrMSAgLTcgICAgICAtPiAtMQotZHFjb3Q0MjYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtNyAgICAgIC0+IC0xCi1kcWNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTEKLWRxY290NDI4IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTcwRS0xICAtPiAtMQotZHFjb3Q0MjkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjdFKzEgIC0+IC0xCi1kcWNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTEKLQotZHFjb3Q0NDAgY29tcGFyZXRvdGFsICAgLTguMCAgICAtOS4wICAgIC0+IDEKLWRxY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxCi1kcWNvdDQ0MiBjb21wYXJldG90YWwgICAtOCAgICAgIC05LjAgICAgLT4gMQotZHFjb3Q0NDMgY29tcGFyZXRvdGFsICAgLThFKzAgICAtOS4wICAgIC0+IDEKLWRxY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxCi1kcWNvdDQ0NSBjb21wYXJldG90YWwgICAtLjhFKzEgIC05ICAgICAgLT4gMQotZHFjb3Q0NDYgY29tcGFyZXRvdGFsICAgLTgwRS0xICAtOSAgICAgIC0+IDEKLWRxY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxCi1kcWNvdDQ0OCBjb21wYXJldG90YWwgICAtOC4wICAgIC05MEUtMSAgLT4gMQotZHFjb3Q0NDkgY29tcGFyZXRvdGFsICAgLTggICAgICAtLjlFKzEgIC0+IDEKLWRxY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxCi0KLQotLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdCi1kcWNvdDQ3MyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kcWNvdDQ3NCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKLWRxY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kcWNvdDQ3NiBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kcWNvdDQ3NyBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgLT4gLTEKLWRxY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kcWNvdDQ3OSBjb21wYXJldG90YWwgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kcWNvdDQ4MCBjb21wYXJldG90YWwgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgLT4gLTEKLWRxY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xCi1kcWNvdDQ4MiBjb21wYXJldG90YWwgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5IC0+IC0xCi1kcWNvdDQ4MyBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgLT4gMAotZHFjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxCi1kcWNvdDQ4OCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDAwMEUtODkgLT4gMQotZHFjb3Q0ODkgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgLT4gMQotZHFjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxCi1kcWNvdDQ5MSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMEUrODkgLT4gMQotZHFjb3Q0OTIgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgLT4gMQotZHFjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxCi1kcWNvdDQ5NCBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMEUtODkgLT4gMQotZHFjb3Q0OTUgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgLT4gMQotZHFjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxCi1kcWNvdDQ5NyBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NkUrODkgLT4gMAotCi0tLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsCi1kcWNvdDQ5OCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTcgICAgLT4gMQotZHFjb3Q0OTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE2ICAgIC0+IDEKLWRxY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxCi1kcWNvdDUwMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTQgICAgLT4gMQotZHFjb3Q1MDIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEzICAgIC0+IDEKLWRxY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxCi1kcWNvdDUwNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTEgICAgLT4gMQotZHFjb3Q1MDUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEwICAgIC0+IDEKLWRxY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxCi1kcWNvdDUwNyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtOCAgICAgLT4gMQotZHFjb3Q1MDggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTcgICAgIC0+IDEKLWRxY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxCi1kcWNvdDUxMCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNSAgICAgLT4gMQotZHFjb3Q1MTEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTQgICAgIC0+IDEKLWRxY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxCi1kcWNvdDUxMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMiAgICAgLT4gMQotZHFjb3Q1MTQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTEgICAgIC0+IDEKLWRxY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwCi1kcWNvdDUxNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMSAgICAgLT4gLTEKLWRxY290NTE3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsyICAgICAtPiAtMQotZHFjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xCi1kcWNvdDUxOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNCAgICAgLT4gLTEKLWRxY290NTIxIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs1ICAgICAtPiAtMQotZHFjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xCi1kcWNvdDUyMyBjb21wYXJldG90YWwgICAgMSAgICAgMUUrNyAgICAgLT4gLTEKLWRxY290NTI0IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSs4ICAgICAtPiAtMQotZHFjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xCi1kcWNvdDUyNiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTAgICAgLT4gLTEKLWRxY290NTI3IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxMSAgICAtPiAtMQotZHFjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xCi1kcWNvdDUyOSBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTMgICAgLT4gLTEKLWRxY290NTMwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNCAgICAtPiAtMQotZHFjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xCi1kcWNvdDUzMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUrMTYgICAgLT4gLTEKLWRxY290NTMzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRSsxNyAgICAtPiAtMQotLS0gTFIgc3dhcAotZHFjb3Q1MzggY29tcGFyZXRvdGFsICAgIDFFLTE3ICAxICAgICAgIC0+IC0xCi1kcWNvdDUzOSBjb21wYXJldG90YWwgICAgMUUtMTYgIDEgICAgICAgLT4gLTEKLWRxY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQotZHFjb3Q1NDEgY29tcGFyZXRvdGFsICAgIDFFLTE0ICAxICAgICAgIC0+IC0xCi1kcWNvdDU0MiBjb21wYXJldG90YWwgICAgMUUtMTMgIDEgICAgICAgLT4gLTEKLWRxY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQotZHFjb3Q1NDQgY29tcGFyZXRvdGFsICAgIDFFLTExICAxICAgICAgIC0+IC0xCi1kcWNvdDU0NSBjb21wYXJldG90YWwgICAgMUUtMTAgIDEgICAgICAgLT4gLTEKLWRxY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQotZHFjb3Q1NDcgY29tcGFyZXRvdGFsICAgIDFFLTggICAxICAgICAgIC0+IC0xCi1kcWNvdDU0OCBjb21wYXJldG90YWwgICAgMUUtNyAgIDEgICAgICAgLT4gLTEKLWRxY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQotZHFjb3Q1NTAgY29tcGFyZXRvdGFsICAgIDFFLTUgICAxICAgICAgIC0+IC0xCi1kcWNvdDU1MSBjb21wYXJldG90YWwgICAgMUUtNCAgIDEgICAgICAgLT4gLTEKLWRxY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQotZHFjb3Q1NTMgY29tcGFyZXRvdGFsICAgIDFFLTIgICAxICAgICAgIC0+IC0xCi1kcWNvdDU1NCBjb21wYXJldG90YWwgICAgMUUtMSAgIDEgICAgICAgLT4gLTEKLWRxY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMAotZHFjb3Q1NTYgY29tcGFyZXRvdGFsICAgIDFFKzEgICAxICAgICAgIC0+ICAxCi1kcWNvdDU1NyBjb21wYXJldG90YWwgICAgMUUrMiAgIDEgICAgICAgLT4gIDEKLWRxY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQotZHFjb3Q1NTkgY29tcGFyZXRvdGFsICAgIDFFKzQgICAxICAgICAgIC0+ICAxCi1kcWNvdDU2MSBjb21wYXJldG90YWwgICAgMUUrNSAgIDEgICAgICAgLT4gIDEKLWRxY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQotZHFjb3Q1NjMgY29tcGFyZXRvdGFsICAgIDFFKzcgICAxICAgICAgIC0+ICAxCi1kcWNvdDU2NCBjb21wYXJldG90YWwgICAgMUUrOCAgIDEgICAgICAgLT4gIDEKLWRxY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQotZHFjb3Q1NjYgY29tcGFyZXRvdGFsICAgIDFFKzEwICAxICAgICAgIC0+ICAxCi1kcWNvdDU2NyBjb21wYXJldG90YWwgICAgMUUrMTEgIDEgICAgICAgLT4gIDEKLWRxY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQotZHFjb3Q1NjkgY29tcGFyZXRvdGFsICAgIDFFKzEzICAxICAgICAgIC0+ICAxCi1kcWNvdDU3MCBjb21wYXJldG90YWwgICAgMUUrMTQgIDEgICAgICAgLT4gIDEKLWRxY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQotZHFjb3Q1NzIgY29tcGFyZXRvdGFsICAgIDFFKzE2ICAxICAgICAgIC0+ICAxCi1kcWNvdDU3MyBjb21wYXJldG90YWwgICAgMUUrMTcgIDEgICAgICAgLT4gIDEKLS0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQotZHFjb3Q1NzggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgLT4gMQotZHFjb3Q1NzkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTYgICAgLT4gMQotZHFjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQotZHFjb3Q1ODEgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgLT4gMQotZHFjb3Q1ODIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTMgICAgLT4gMQotZHFjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQotZHFjb3Q1ODQgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgLT4gMQotZHFjb3Q1ODUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTAgICAgLT4gMQotZHFjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQotZHFjb3Q1ODcgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgLT4gMQotZHFjb3Q1ODggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNyAgICAgLT4gMQotZHFjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTEKLWRxY290NTkwIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTUgICAgIC0+IC0xCi1kcWNvdDU5MSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS00ICAgICAtPiAtMQotZHFjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTEKLWRxY290NTkzIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTIgICAgIC0+IC0xCi1kcWNvdDU5NCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xICAgICAtPiAtMQotZHFjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTEKLWRxY290NTk2IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzEgICAgIC0+IC0xCi1kcWNvdDU5NyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsyICAgICAtPiAtMQotZHFjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTEKLWRxY290NTk5IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzQgICAgIC0+IC0xCi0KLS0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzCi1kcWNvdDYwMCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY290NjAxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgMTIuMjM0NSAtPiAtMQotZHFjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvdDYwMyBjb21wYXJldG90YWwgICAxMi4wMDAgICAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY290NjA0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgMTIuMjM0NSAtPiAtMQotZHFjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvdDYwNiBjb21wYXJldG90YWwgICAxMi4wMDAwMDAgICAgIDEyLjIzNDUgLT4gLTEKLWRxY290NjA3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgMTIuMjM0NSAtPiAtMQotZHFjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xCi1kcWNvdDYwOSBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMDAgIDEyLjIzNDUgLT4gLTEKLWRxY290NjEwIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIgICAgICAgICAgICAtPiAgMQotZHFjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxCi1kcWNvdDYxMiBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwICAgICAgICAgLT4gIDEKLWRxY290NjEzIGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwICAgICAgICAtPiAgMQotZHFjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxCi1kcWNvdDYxNSBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwICAgICAgLT4gIDEKLWRxY290NjE2IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwICAgICAtPiAgMQotZHFjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxCi1kcWNvdDYxOCBjb21wYXJldG90YWwgICAxMi4xMjM0IDEyLjAwMDAwMDAwICAgLT4gIDEKLWRxY290NjE5IGNvbXBhcmV0b3RhbCAgIDEyLjEyMzQgMTIuMDAwMDAwMDAwICAtPiAgMQotZHFjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvdDYyMSBjb21wYXJldG90YWwgIC0xMi4wICAgICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY290NjIyIGNvbXBhcmV0b3RhbCAgLTEyLjAwICAgICAgICAtMTIuMjM0NSAtPiAgMQotZHFjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvdDYyNCBjb21wYXJldG90YWwgIC0xMi4wMDAwICAgICAgLTEyLjIzNDUgLT4gIDEKLWRxY290NjI1IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwICAgICAtMTIuMjM0NSAtPiAgMQotZHFjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxCi1kcWNvdDYyNyBjb21wYXJldG90YWwgIC0xMi4wMDAwMDAwICAgLTEyLjIzNDUgLT4gIDEKLWRxY290NjI4IGNvbXBhcmV0b3RhbCAgLTEyLjAwMDAwMDAwICAtMTIuMjM0NSAtPiAgMQotZHFjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxCi1kcWNvdDYzMCBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMiAgICAgICAgICAgLT4gLTEKLWRxY290NjMxIGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAgICAgICAgICAtPiAtMQotZHFjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xCi1kcWNvdDYzMyBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAgICAgICAgLT4gLTEKLWRxY290NjM0IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAgICAgICAtPiAtMQotZHFjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xCi1kcWNvdDYzNiBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAgICAgLT4gLTEKLWRxY290NjM3IGNvbXBhcmV0b3RhbCAgLTEyLjEyMzQgLTEyLjAwMDAwMDAgICAtPiAtMQotZHFjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xCi1kcWNvdDYzOSBjb21wYXJldG90YWwgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMDAgLT4gLTEKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRxY290NjQwIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAgICAtPiAwCi1kcWNvdDY0MSBjb21wYXJldG90YWwgICAwICAgIC0wICAgLT4gMQotZHFjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDEKLWRxY290NjQzIGNvbXBhcmV0b3RhbCAgIDAgICAgIDAuMCAtPiAxCi1kcWNvdDY0NCBjb21wYXJldG90YWwgIC0wICAgICAwICAgLT4gLTEKLWRxY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwCi1kcWNvdDY0NiBjb21wYXJldG90YWwgIC0wICAgIC0wLjAgLT4gLTEKLWRxY290NjQ3IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAuMCAtPiAtMQotZHFjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xCi1kcWNvdDY0OSBjb21wYXJldG90YWwgICAwLjAgIC0wICAgLT4gMQotZHFjb3Q2NTAgY29tcGFyZXRvdGFsICAgMC4wICAtMC4wIC0+IDEKLWRxY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwCi1kcWNvdDY1MiBjb21wYXJldG90YWwgIC0wLjAgICAwICAgLT4gLTEKLWRxY290NjUzIGNvbXBhcmV0b3RhbCAgLTAuMCAgLTAgICAtPiAxCi1kcWNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMAotZHFjb3Q2NTUgY29tcGFyZXRvdGFsICAtMC4wICAgMC4wIC0+IC0xCi0KLWRxY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQotZHFjb3Q2NTcgY29tcGFyZXRvdGFsICAtMEUyICAgMC4wIC0+IC0xCi1kcWNvdDY1OCBjb21wYXJldG90YWwgICAwRTEgICAwLjAgLT4gMQotZHFjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDEKLWRxY290NjYwIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAgICAtPiAtMQotZHFjb3Q2NjEgY29tcGFyZXRvdGFsICAtMEUyICAgMCAgIC0+IC0xCi1kcWNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQotZHFjb3Q2NjMgY29tcGFyZXRvdGFsICAgMEUyICAgMCAgIC0+IDEKLWRxY290NjY0IGNvbXBhcmV0b3RhbCAgLTBFMSAgLTBFMSAtPiAwCi1kcWNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTEKLWRxY290NjY2IGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMSAtPiAxCi1kcWNvdDY2NyBjb21wYXJldG90YWwgICAwRTIgIC0wRTEgLT4gMQotZHFjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDEKLWRxY290NjY5IGNvbXBhcmV0b3RhbCAgLTBFMiAgLTBFMiAtPiAwCi1kcWNvdDY3MCBjb21wYXJldG90YWwgICAwRTEgIC0wRTIgLT4gMQotZHFjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDEKLWRxY290NjcyIGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMSAtPiAtMQotZHFjb3Q2NzMgY29tcGFyZXRvdGFsICAtMEUyICAgMEUxIC0+IC0xCi1kcWNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMAotZHFjb3Q2NzUgY29tcGFyZXRvdGFsICAgMEUyICAgMEUxIC0+IDEKLWRxY290Njc2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDBFMiAtPiAtMQotZHFjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xCi1kcWNvdDY3OCBjb21wYXJldG90YWwgICAwRTEgICAwRTIgLT4gLTEKLWRxY290Njc5IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMiAtPiAwCi0KLS0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkKLWRxY290NjgwIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyICAgICAgICAgICAtPiAwCi1kcWNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQotZHFjb3Q2ODIgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAgICAgICAgIC0+IDEKLWRxY290NjgzIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMCAgICAgICAtPiAxCi1kcWNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQotZHFjb3Q2ODUgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAgICAgIC0+IDEKLWRxY290Njg2IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMCAgICAtPiAxCi1kcWNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQotZHFjb3Q2ODggY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAgIC0+IDEKLWRxY290Njg5IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwMCAtPiAxCi1kcWNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMAotZHFjb3Q2OTEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAgIDEyIC0+IC0xCi1kcWNvdDY5MiBjb21wYXJldG90YWwgICAxMi4wMCAgICAgICAgICAgMTIgLT4gLTEKLWRxY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQotZHFjb3Q2OTQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAgIDEyIC0+IC0xCi1kcWNvdDY5NSBjb21wYXJldG90YWwgICAxMi4wMDAwMCAgICAgICAgMTIgLT4gLTEKLWRxY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQotZHFjb3Q2OTcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAgIDEyIC0+IC0xCi1kcWNvdDY5OCBjb21wYXJldG90YWwgICAxMi4wMDAwMDAwMCAgICAgMTIgLT4gLTEKLWRxY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQotCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcwotZHFjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxCi1kcWNvdDcwMiBjb21wYXJldG90YWwgMSAxMjM0NTY3ODAwMCAgLT4gLTEKLWRxY290NzAzIGNvbXBhcmV0b3RhbCAxMjM0NTY3ODAwICAgMSAtPiAgMQotZHFjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xCi1kcWNvdDcwNSBjb21wYXJldG90YWwgMTIzNDU2Nzg5MCAgIDEgLT4gIDEKLWRxY290NzA2IGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTAgICAtPiAtMQotZHFjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxCi1kcWNvdDcwOCBjb21wYXJldG90YWwgMSAxMjM0NTY3ODkxICAgLT4gLTEKLWRxY290NzA5IGNvbXBhcmV0b3RhbCAxMjM0NTY3ODkwMSAgMSAtPiAgMQotZHFjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xCi1kcWNvdDcxMSBjb21wYXJldG90YWwgMTIzNDU2Nzg5NiAgIDEgLT4gIDEKLWRxY290NzEyIGNvbXBhcmV0b3RhbCAxIDEyMzQ1Njc4OTYgICAtPiAtMQotZHFjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xCi1kcWNvdDcxNCBjb21wYXJldG90YWwgMSAtMTIzNDU2Nzg5MSAgLT4gIDEKLWRxY290NzE1IGNvbXBhcmV0b3RhbCAtMTIzNDU2Nzg5MDEgMSAtPiAtMQotZHFjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxCi1kcWNvdDcxNyBjb21wYXJldG90YWwgLTEyMzQ1Njc4OTYgIDEgLT4gLTEKLWRxY290NzE4IGNvbXBhcmV0b3RhbCAxIC0xMjM0NTY3ODk2ICAtPiAgMQotCi0tLSBvbGQgcmVzaWR1ZSBjYXNlcwotZHFjb3Q3NDAgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5OTkgIC0+IDEKLWRxY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxCi1kcWNvdDc0MiBjb21wYXJldG90YWwgIDEgIDAuOTk5OTkgICAgLT4gMQotZHFjb3Q3NDMgY29tcGFyZXRvdGFsICAxICAxLjAwMDAgICAgIC0+IDEKLWRxY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQotZHFjb3Q3NDUgY29tcGFyZXRvdGFsICAxICAxLjAwMDAwMSAgIC0+IC0xCi1kcWNvdDc0NiBjb21wYXJldG90YWwgIDEgIDEuMDAwMDAwMSAgLT4gLTEKLWRxY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQotZHFjb3Q3NTEgY29tcGFyZXRvdGFsICAwLjk5OTk5OSAgIDEgIC0+IC0xCi1kcWNvdDc1MiBjb21wYXJldG90YWwgIDAuOTk5OTkgICAgMSAgLT4gLTEKLWRxY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQotZHFjb3Q3NTQgY29tcGFyZXRvdGFsICAxLjAwMDAxICAgIDEgIC0+IDEKLWRxY290NzU1IGNvbXBhcmV0b3RhbCAgMS4wMDAwMDEgICAxICAtPiAxCi1kcWNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQotCi0tLSBTcGVjaWFscwotZHFjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQotZHFjb3Q3ODEgY29tcGFyZXRvdGFsICBJbmYgIC0xMDAwICAtPiAgMQotZHFjb3Q3ODIgY29tcGFyZXRvdGFsICBJbmYgIC0xICAgICAtPiAgMQotZHFjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQotZHFjb3Q3ODQgY29tcGFyZXRvdGFsICBJbmYgICAwICAgICAtPiAgMQotZHFjb3Q3ODUgY29tcGFyZXRvdGFsICBJbmYgICAxICAgICAtPiAgMQotZHFjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQotZHFjb3Q3ODcgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAotZHFjb3Q3ODggY29tcGFyZXRvdGFsIC0xMDAwICBJbmYgICAtPiAtMQotZHFjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQotZHFjb3Q3OTAgY29tcGFyZXRvdGFsIC0xICAgICBJbmYgICAtPiAtMQotZHFjb3Q3OTEgY29tcGFyZXRvdGFsIC0wICAgICBJbmYgICAtPiAtMQotZHFjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQotZHFjb3Q3OTMgY29tcGFyZXRvdGFsICAxICAgICBJbmYgICAtPiAtMQotZHFjb3Q3OTQgY29tcGFyZXRvdGFsICAxMDAwICBJbmYgICAtPiAtMQotZHFjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMAotCi1kcWNvdDgwMCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCi1kcWNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xCi1kcWNvdDgwMiBjb21wYXJldG90YWwgLUluZiAgLTEgICAgIC0+IC0xCi1kcWNvdDgwMyBjb21wYXJldG90YWwgLUluZiAgLTAgICAgIC0+IC0xCi1kcWNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xCi1kcWNvdDgwNSBjb21wYXJldG90YWwgLUluZiAgIDEgICAgIC0+IC0xCi1kcWNvdDgwNiBjb21wYXJldG90YWwgLUluZiAgIDEwMDAgIC0+IC0xCi1kcWNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xCi1kcWNvdDgwOCBjb21wYXJldG90YWwgLUluZiAgLUluZiAgIC0+ICAwCi1kcWNvdDgwOSBjb21wYXJldG90YWwgLTEwMDAgLUluZiAgIC0+ICAxCi1kcWNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxCi1kcWNvdDgxMSBjb21wYXJldG90YWwgLTAgICAgLUluZiAgIC0+ICAxCi1kcWNvdDgxMiBjb21wYXJldG90YWwgIDAgICAgLUluZiAgIC0+ICAxCi1kcWNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxCi1kcWNvdDgxNCBjb21wYXJldG90YWwgIDEwMDAgLUluZiAgIC0+ICAxCi1kcWNvdDgxNSBjb21wYXJldG90YWwgIEluZiAgLUluZiAgIC0+ICAxCi0KLWRxY290ODIxIGNvbXBhcmV0b3RhbCAgTmFOIC1JbmYgICAgLT4gIDEKLWRxY290ODIyIGNvbXBhcmV0b3RhbCAgTmFOIC0xMDAwICAgLT4gIDEKLWRxY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDEKLWRxY290ODI0IGNvbXBhcmV0b3RhbCAgTmFOIC0wICAgICAgLT4gIDEKLWRxY290ODI1IGNvbXBhcmV0b3RhbCAgTmFOICAwICAgICAgLT4gIDEKLWRxY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDEKLWRxY290ODI3IGNvbXBhcmV0b3RhbCAgTmFOICAxMDAwICAgLT4gIDEKLWRxY290ODI4IGNvbXBhcmV0b3RhbCAgTmFOICBJbmYgICAgLT4gIDEKLWRxY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDAKLWRxY290ODMwIGNvbXBhcmV0b3RhbCAtSW5mICBOYU4gICAgLT4gIC0xCi1kcWNvdDgzMSBjb21wYXJldG90YWwgLTEwMDAgTmFOICAgIC0+ICAtMQotZHFjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTEKLWRxY290ODMzIGNvbXBhcmV0b3RhbCAtMCAgICBOYU4gICAgLT4gIC0xCi1kcWNvdDgzNCBjb21wYXJldG90YWwgIDAgICAgTmFOICAgIC0+ICAtMQotZHFjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTEKLWRxY290ODM2IGNvbXBhcmV0b3RhbCAgMTAwMCBOYU4gICAgLT4gIC0xCi1kcWNvdDgzNyBjb21wYXJldG90YWwgIEluZiAgTmFOICAgIC0+ICAtMQotZHFjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMAotZHFjb3Q4MzkgY29tcGFyZXRvdGFsICtOYU4gLU5hTiAgICAtPiAgMQotZHFjb3Q4NDAgY29tcGFyZXRvdGFsIC1OYU4gK05hTiAgICAtPiAgLTEKLQotZHFjb3Q4NDEgY29tcGFyZXRvdGFsICBzTmFOIC1zTmFOICAtPiAgMQotZHFjb3Q4NDIgY29tcGFyZXRvdGFsICBzTmFOIC1OYU4gICAtPiAgMQotZHFjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQotZHFjb3Q4NDQgY29tcGFyZXRvdGFsICBzTmFOIC0xMDAwICAtPiAgMQotZHFjb3Q4NDUgY29tcGFyZXRvdGFsICBzTmFOIC0xICAgICAtPiAgMQotZHFjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQotZHFjb3Q4NDcgY29tcGFyZXRvdGFsICBzTmFOICAwICAgICAtPiAgMQotZHFjb3Q4NDggY29tcGFyZXRvdGFsICBzTmFOICAxICAgICAtPiAgMQotZHFjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQotZHFjb3Q4NTAgY29tcGFyZXRvdGFsICBzTmFOICBOYU4gICAtPiAgLTEKLWRxY290ODUxIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKLQotZHFjb3Q4NTIgY29tcGFyZXRvdGFsIC1zTmFOIHNOYU4gICAtPiAgLTEKLWRxY290ODUzIGNvbXBhcmV0b3RhbCAtTmFOICBzTmFOICAgLT4gIC0xCi1kcWNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQotZHFjb3Q4NTUgY29tcGFyZXRvdGFsIC0xMDAwIHNOYU4gICAtPiAgLTEKLWRxY290ODU2IGNvbXBhcmV0b3RhbCAtMSAgICBzTmFOICAgLT4gIC0xCi1kcWNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQotZHFjb3Q4NTggY29tcGFyZXRvdGFsICAwICAgIHNOYU4gICAtPiAgLTEKLWRxY290ODU5IGNvbXBhcmV0b3RhbCAgMSAgICBzTmFOICAgLT4gIC0xCi1kcWNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQotZHFjb3Q4NjEgY29tcGFyZXRvdGFsICBJbmYgIHNOYU4gICAtPiAgLTEKLWRxY290ODYyIGNvbXBhcmV0b3RhbCAgTmFOICBzTmFOICAgLT4gIDEKLWRxY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDAKLQotZHFjb3Q4NzEgY29tcGFyZXRvdGFsICAtc05hTiAtc05hTiAgLT4gIDAKLWRxY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxCi1kcWNvdDg3MyBjb21wYXJldG90YWwgIC1zTmFOIC1JbmYgICAtPiAgLTEKLWRxY290ODc0IGNvbXBhcmV0b3RhbCAgLXNOYU4gLTEwMDAgIC0+ICAtMQotZHFjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xCi1kcWNvdDg3NiBjb21wYXJldG90YWwgIC1zTmFOIC0wICAgICAtPiAgLTEKLWRxY290ODc3IGNvbXBhcmV0b3RhbCAgLXNOYU4gIDAgICAgIC0+ICAtMQotZHFjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xCi1kcWNvdDg3OSBjb21wYXJldG90YWwgIC1zTmFOICAxMDAwICAtPiAgLTEKLWRxY290ODgwIGNvbXBhcmV0b3RhbCAgLXNOYU4gIE5hTiAgIC0+ICAtMQotZHFjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xCi0KLWRxY290ODgyIGNvbXBhcmV0b3RhbCAtc05hTiAtc05hTiAgIC0+ICAwCi1kcWNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTEKLWRxY290ODg0IGNvbXBhcmV0b3RhbCAtSW5mICAtc05hTiAgIC0+ICAxCi1kcWNvdDg4NSBjb21wYXJldG90YWwgLTEwMDAgLXNOYU4gICAtPiAgMQotZHFjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDEKLWRxY290ODg3IGNvbXBhcmV0b3RhbCAtMCAgICAtc05hTiAgIC0+ICAxCi1kcWNvdDg4OCBjb21wYXJldG90YWwgIDAgICAgLXNOYU4gICAtPiAgMQotZHFjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDEKLWRxY290ODkwIGNvbXBhcmV0b3RhbCAgMTAwMCAtc05hTiAgIC0+ICAxCi1kcWNvdDg5MSBjb21wYXJldG90YWwgIEluZiAgLXNOYU4gICAtPiAgMQotZHFjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDEKLWRxY290ODkzIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgIC0+ICAxCi0KLS0tIE5hTnMgd2l0aCBwYXlsb2FkCi1kcWNvdDk2MCBjb21wYXJldG90YWwgIE5hTjkgLUluZiAgIC0+ICAxCi1kcWNvdDk2MSBjb21wYXJldG90YWwgIE5hTjggIDk5OSAgIC0+ICAxCi1kcWNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxCi1kcWNvdDk2MyBjb21wYXJldG90YWwgLU5hTjY3IE5hTjUgIC0+ICAtMQotZHFjb3Q5NjQgY29tcGFyZXRvdGFsIC1JbmYgIC1OYU40ICAtPiAgMQotZHFjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQotZHFjb3Q5NjYgY29tcGFyZXRvdGFsICBJbmYgICBOYU4yICAtPiAgLTEKLQotZHFjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQotZHFjb3Q5NzEgY29tcGFyZXRvdGFsICtOYU40MSAtTmFONDIgLT4gMQotZHFjb3Q5NzIgY29tcGFyZXRvdGFsIC1OYU40MSArTmFONDIgLT4gLTEKLWRxY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xCi1kcWNvdDk3NCBjb21wYXJldG90YWwgLU5hTjQyIC1OYU4wMSAtPiAtMQotZHFjb3Q5NzUgY29tcGFyZXRvdGFsICtOYU40MiAtTmFOMDEgLT4gIDEKLWRxY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xCi1kcWNvdDk3NyBjb21wYXJldG90YWwgK05hTjQyICtOYU4wMSAtPiAgMQotCi1kcWNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQotZHFjb3Q5ODEgY29tcGFyZXRvdGFsICtzTmFONzcxIC1zTmFONzcyIC0+IDEKLWRxY290OTgyIGNvbXBhcmV0b3RhbCAtc05hTjc3MSArc05hTjc3MiAtPiAtMQotZHFjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xCi1kcWNvdDk4NCBjb21wYXJldG90YWwgLXNOYU43NzIgLXNOYU43NzEgLT4gLTEKLWRxY290OTg1IGNvbXBhcmV0b3RhbCArc05hTjc3MiAtc05hTjc3MSAtPiAgMQotZHFjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xCi1kcWNvdDk4NyBjb21wYXJldG90YWwgK3NOYU43NzIgK3NOYU43NzEgLT4gIDEKLQotZHFjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQotZHFjb3Q5OTIgY29tcGFyZXRvdGFsICBzTmFOOTggLTExICAgICAtPiAgMQotZHFjb3Q5OTMgY29tcGFyZXRvdGFsICBzTmFOOTcgIE5hTiAgICAtPiAtMQotZHFjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQotZHFjb3Q5OTUgY29tcGFyZXRvdGFsICBOYU44NSAgc05hTjgzICAtPiAgMQotZHFjb3Q5OTYgY29tcGFyZXRvdGFsIC1JbmYgICAgc05hTjkyICAtPiAtMQotZHFjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQotZHFjb3Q5OTggY29tcGFyZXRvdGFsICBJbmYgICAgc05hTjkwICAtPiAtMQotZHFjb3Q5OTkgY29tcGFyZXRvdGFsICBOYU4gICAtc05hTjg5ICAtPiAgMQotCi0tLSBzcHJlYWQgemVyb3MKLWRxY290MTExMCBjb21wYXJldG90YWwgICAwRS02MTQzICAwICAgICAgIC0+IC0xCi1kcWNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMCAgICAgICAtPiAgMQotZHFjb3QxMTEyIGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgIDAgICAgICAgLT4gLTEKLWRxY290MTExMyBjb21wYXJldG90YWwgIC0wRS02MTQzIC0wICAgICAgIC0+ICAxCi1kcWNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTEKLWRxY290MTExNSBjb21wYXJldG90YWwgICAwRS02MTQzIC0wRSs2MTQ0ICAtPiAgMQotZHFjb3QxMTE2IGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgIDBFKzYxNDQgIC0+IC0xCi1kcWNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDEKLWRxY290MTExOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFKzYxNDQgIC0+IC0xCi1kcWNvdDExMTkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQotZHFjb3QxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrNjE0NCAgLT4gLTEKLWRxY290MTEyMSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFKzYxNDQgIC0+ICAxCi0KLWRxY290MTEzMCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwICAgICAgIC0+ICAxCi1kcWNvdDExMzEgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAtMCAgICAgICAtPiAgMQotZHFjb3QxMTMyIGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgIDAgICAgICAgLT4gLTEKLWRxY290MTEzMyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wICAgICAgIC0+IC0xCi1kcWNvdDExMzQgY29tcGFyZXRvdGFsICAgMEUrNjE0NCAgMEUtNjE0MyAgLT4gIDEKLWRxY290MTEzNSBjb21wYXJldG90YWwgICAwRSs2MTQ0IC0wRS02MTQzICAtPiAgMQotZHFjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgIDBFLTYxNDMgIC0+IC0xCi1kcWNvdDExMzcgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAtMEUtNjE0MyAgLT4gLTEKLWRxY290MTEzOCBjb21wYXJldG90YWwgICAwICAgICAgIDBFLTYxNDMgIC0+ICAxCi1kcWNvdDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS02MTQzICAtPiAgMQotZHFjb3QxMTQwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUtNjE0MyAgLT4gLTEKLWRxY290MTE0MSBjb21wYXJldG90YWwgIC0wICAgICAgLTBFLTYxNDMgIC0+IC0xCi0KLS0tIE51bGwgdGVzdHMKLWRxY290OTk5MCBjb21wYXJldG90YWwgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWNvdDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFDb21wYXJlVG90YWwuZGVjVGVzdCAtLSBkZWNRdWFkIGNvbXBhcmlzb24gdXNpbmcgdG90YWwgb3JkZXJpbmcgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LA0KKy0tIGhlcmUsIGJlY2F1c2UgdGhlIGNvZGUgbWlnaHQgYmUgcXVpdGUgZGlmZmVyZW50IChjb21wYXJpc29uIGNhbm5vdA0KKy0tIG92ZXJmbG93IG9yIHVuZGVyZmxvdywgc28gYWN0dWFsIHN1YnRyYWN0aW9ucyBhcmUgbm90IG5lY2Vzc2FyeSkuDQorLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocw0KKy0tIHRoYW4gY29tcGFyZS4NCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZHFjb3QwMDEgY29tcGFyZXRvdGFsICAtMiAgLTIgIC0+IDANCitkcWNvdDAwMiBjb21wYXJldG90YWwgIC0yICAtMSAgLT4gLTENCitkcWNvdDAwMyBjb21wYXJldG90YWwgIC0yICAgMCAgLT4gLTENCitkcWNvdDAwNCBjb21wYXJldG90YWwgIC0yICAgMSAgLT4gLTENCitkcWNvdDAwNSBjb21wYXJldG90YWwgIC0yICAgMiAgLT4gLTENCitkcWNvdDAwNiBjb21wYXJldG90YWwgIC0xICAtMiAgLT4gMQ0KK2RxY290MDA3IGNvbXBhcmV0b3RhbCAgLTEgIC0xICAtPiAwDQorZHFjb3QwMDggY29tcGFyZXRvdGFsICAtMSAgIDAgIC0+IC0xDQorZHFjb3QwMDkgY29tcGFyZXRvdGFsICAtMSAgIDEgIC0+IC0xDQorZHFjb3QwMTAgY29tcGFyZXRvdGFsICAtMSAgIDIgIC0+IC0xDQorZHFjb3QwMTEgY29tcGFyZXRvdGFsICAgMCAgLTIgIC0+IDENCitkcWNvdDAxMiBjb21wYXJldG90YWwgICAwICAtMSAgLT4gMQ0KK2RxY290MDEzIGNvbXBhcmV0b3RhbCAgIDAgICAwICAtPiAwDQorZHFjb3QwMTQgY29tcGFyZXRvdGFsICAgMCAgIDEgIC0+IC0xDQorZHFjb3QwMTUgY29tcGFyZXRvdGFsICAgMCAgIDIgIC0+IC0xDQorZHFjb3QwMTYgY29tcGFyZXRvdGFsICAgMSAgLTIgIC0+IDENCitkcWNvdDAxNyBjb21wYXJldG90YWwgICAxICAtMSAgLT4gMQ0KK2RxY290MDE4IGNvbXBhcmV0b3RhbCAgIDEgICAwICAtPiAxDQorZHFjb3QwMTkgY29tcGFyZXRvdGFsICAgMSAgIDEgIC0+IDANCitkcWNvdDAyMCBjb21wYXJldG90YWwgICAxICAgMiAgLT4gLTENCitkcWNvdDAyMSBjb21wYXJldG90YWwgICAyICAtMiAgLT4gMQ0KK2RxY290MDIyIGNvbXBhcmV0b3RhbCAgIDIgIC0xICAtPiAxDQorZHFjb3QwMjMgY29tcGFyZXRvdGFsICAgMiAgIDAgIC0+IDENCitkcWNvdDAyNSBjb21wYXJldG90YWwgICAyICAgMSAgLT4gMQ0KK2RxY290MDI2IGNvbXBhcmV0b3RhbCAgIDIgICAyICAtPiAwDQorDQorZHFjb3QwMzEgY29tcGFyZXRvdGFsICAtMjAgIC0yMCAgLT4gMA0KK2RxY290MDMyIGNvbXBhcmV0b3RhbCAgLTIwICAtMTAgIC0+IC0xDQorZHFjb3QwMzMgY29tcGFyZXRvdGFsICAtMjAgICAwMCAgLT4gLTENCitkcWNvdDAzNCBjb21wYXJldG90YWwgIC0yMCAgIDEwICAtPiAtMQ0KK2RxY290MDM1IGNvbXBhcmV0b3RhbCAgLTIwICAgMjAgIC0+IC0xDQorZHFjb3QwMzYgY29tcGFyZXRvdGFsICAtMTAgIC0yMCAgLT4gMQ0KK2RxY290MDM3IGNvbXBhcmV0b3RhbCAgLTEwICAtMTAgIC0+IDANCitkcWNvdDAzOCBjb21wYXJldG90YWwgIC0xMCAgIDAwICAtPiAtMQ0KK2RxY290MDM5IGNvbXBhcmV0b3RhbCAgLTEwICAgMTAgIC0+IC0xDQorZHFjb3QwNDAgY29tcGFyZXRvdGFsICAtMTAgICAyMCAgLT4gLTENCitkcWNvdDA0MSBjb21wYXJldG90YWwgICAwMCAgLTIwICAtPiAxDQorZHFjb3QwNDIgY29tcGFyZXRvdGFsICAgMDAgIC0xMCAgLT4gMQ0KK2RxY290MDQzIGNvbXBhcmV0b3RhbCAgIDAwICAgMDAgIC0+IDANCitkcWNvdDA0NCBjb21wYXJldG90YWwgICAwMCAgIDEwICAtPiAtMQ0KK2RxY290MDQ1IGNvbXBhcmV0b3RhbCAgIDAwICAgMjAgIC0+IC0xDQorZHFjb3QwNDYgY29tcGFyZXRvdGFsICAgMTAgIC0yMCAgLT4gMQ0KK2RxY290MDQ3IGNvbXBhcmV0b3RhbCAgIDEwICAtMTAgIC0+IDENCitkcWNvdDA0OCBjb21wYXJldG90YWwgICAxMCAgIDAwICAtPiAxDQorZHFjb3QwNDkgY29tcGFyZXRvdGFsICAgMTAgICAxMCAgLT4gMA0KK2RxY290MDUwIGNvbXBhcmV0b3RhbCAgIDEwICAgMjAgIC0+IC0xDQorZHFjb3QwNTEgY29tcGFyZXRvdGFsICAgMjAgIC0yMCAgLT4gMQ0KK2RxY290MDUyIGNvbXBhcmV0b3RhbCAgIDIwICAtMTAgIC0+IDENCitkcWNvdDA1MyBjb21wYXJldG90YWwgICAyMCAgIDAwICAtPiAxDQorZHFjb3QwNTUgY29tcGFyZXRvdGFsICAgMjAgICAxMCAgLT4gMQ0KK2RxY290MDU2IGNvbXBhcmV0b3RhbCAgIDIwICAgMjAgIC0+IDANCisNCitkcWNvdDA2MSBjb21wYXJldG90YWwgIC0yLjAgIC0yLjAgIC0+IDANCitkcWNvdDA2MiBjb21wYXJldG90YWwgIC0yLjAgIC0xLjAgIC0+IC0xDQorZHFjb3QwNjMgY29tcGFyZXRvdGFsICAtMi4wICAgMC4wICAtPiAtMQ0KK2RxY290MDY0IGNvbXBhcmV0b3RhbCAgLTIuMCAgIDEuMCAgLT4gLTENCitkcWNvdDA2NSBjb21wYXJldG90YWwgIC0yLjAgICAyLjAgIC0+IC0xDQorZHFjb3QwNjYgY29tcGFyZXRvdGFsICAtMS4wICAtMi4wICAtPiAxDQorZHFjb3QwNjcgY29tcGFyZXRvdGFsICAtMS4wICAtMS4wICAtPiAwDQorZHFjb3QwNjggY29tcGFyZXRvdGFsICAtMS4wICAgMC4wICAtPiAtMQ0KK2RxY290MDY5IGNvbXBhcmV0b3RhbCAgLTEuMCAgIDEuMCAgLT4gLTENCitkcWNvdDA3MCBjb21wYXJldG90YWwgIC0xLjAgICAyLjAgIC0+IC0xDQorZHFjb3QwNzEgY29tcGFyZXRvdGFsICAgMC4wICAtMi4wICAtPiAxDQorZHFjb3QwNzIgY29tcGFyZXRvdGFsICAgMC4wICAtMS4wICAtPiAxDQorZHFjb3QwNzMgY29tcGFyZXRvdGFsICAgMC4wICAgMC4wICAtPiAwDQorZHFjb3QwNzQgY29tcGFyZXRvdGFsICAgMC4wICAgMS4wICAtPiAtMQ0KK2RxY290MDc1IGNvbXBhcmV0b3RhbCAgIDAuMCAgIDIuMCAgLT4gLTENCitkcWNvdDA3NiBjb21wYXJldG90YWwgICAxLjAgIC0yLjAgIC0+IDENCitkcWNvdDA3NyBjb21wYXJldG90YWwgICAxLjAgIC0xLjAgIC0+IDENCitkcWNvdDA3OCBjb21wYXJldG90YWwgICAxLjAgICAwLjAgIC0+IDENCitkcWNvdDA3OSBjb21wYXJldG90YWwgICAxLjAgICAxLjAgIC0+IDANCitkcWNvdDA4MCBjb21wYXJldG90YWwgICAxLjAgICAyLjAgIC0+IC0xDQorZHFjb3QwODEgY29tcGFyZXRvdGFsICAgMi4wICAtMi4wICAtPiAxDQorZHFjb3QwODIgY29tcGFyZXRvdGFsICAgMi4wICAtMS4wICAtPiAxDQorZHFjb3QwODMgY29tcGFyZXRvdGFsICAgMi4wICAgMC4wICAtPiAxDQorZHFjb3QwODUgY29tcGFyZXRvdGFsICAgMi4wICAgMS4wICAtPiAxDQorZHFjb3QwODYgY29tcGFyZXRvdGFsICAgMi4wICAgMi4wICAtPiAwDQorDQorLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkDQorZHFjb3QwOTAgY29tcGFyZXRvdGFsICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IDANCitkcWNvdDA5MSBjb21wYXJldG90YWwgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTENCitkcWNvdDA5MiBjb21wYXJldG90YWwgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KK2RxY290MDkzIGNvbXBhcmV0b3RhbCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAwDQorDQorLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzDQorLS0gaW4gdGhpcyBmaXJzdCBncm91cCwgY29tcGFyZSB3b3VsZCBjb21wYXJlIGFsbCBlcXVhbA0KK2RxY290MTAwIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3LjAgICAgLT4gMA0KK2RxY290MTAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3ICAgICAgLT4gLTENCitkcWNvdDEwMiBjb21wYXJldG90YWwgICA3ICAgICAgNy4wICAgIC0+IDENCitkcWNvdDEwMyBjb21wYXJldG90YWwgICA3RSswICAgNy4wICAgIC0+IDENCitkcWNvdDEwNCBjb21wYXJldG90YWwgICA3MEUtMSAgNy4wICAgIC0+IDANCitkcWNvdDEwNSBjb21wYXJldG90YWwgICAwLjdFKzEgNyAgICAgIC0+IDANCitkcWNvdDEwNiBjb21wYXJldG90YWwgICA3MEUtMSAgNyAgICAgIC0+IC0xDQorZHFjb3QxMDcgY29tcGFyZXRvdGFsICAgNy4wICAgIDdFKzAgICAtPiAtMQ0KK2RxY290MTA4IGNvbXBhcmV0b3RhbCAgIDcuMCAgICA3MEUtMSAgLT4gMA0KK2RxY290MTA5IGNvbXBhcmV0b3RhbCAgIDcgICAgICAwLjdFKzEgLT4gMA0KK2RxY290MTEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICA3MEUtMSAgLT4gMQ0KKw0KK2RxY290MTIwIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3LjAgICAgLT4gMQ0KK2RxY290MTIxIGNvbXBhcmV0b3RhbCAgIDguMCAgICA3ICAgICAgLT4gMQ0KK2RxY290MTIyIGNvbXBhcmV0b3RhbCAgIDggICAgICA3LjAgICAgLT4gMQ0KK2RxY290MTIzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICA3LjAgICAgLT4gMQ0KK2RxY290MTI0IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3LjAgICAgLT4gMQ0KK2RxY290MTI1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA3ICAgICAgLT4gMQ0KK2RxY290MTI2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICA3ICAgICAgLT4gMQ0KK2RxY290MTI3IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3RSswICAgLT4gMQ0KK2RxY290MTI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA3MEUtMSAgLT4gMQ0KK2RxY290MTI5IGNvbXBhcmV0b3RhbCAgIDggICAgICAwLjdFKzEgIC0+IDENCitkcWNvdDEzMCBjb21wYXJldG90YWwgICA4ICAgICAgNzBFLTEgIC0+IDENCisNCitkcWNvdDE0MCBjb21wYXJldG90YWwgICA4LjAgICAgOS4wICAgIC0+IC0xDQorZHFjb3QxNDEgY29tcGFyZXRvdGFsICAgOC4wICAgIDkgICAgICAtPiAtMQ0KK2RxY290MTQyIGNvbXBhcmV0b3RhbCAgIDggICAgICA5LjAgICAgLT4gLTENCitkcWNvdDE0MyBjb21wYXJldG90YWwgICA4RSswICAgOS4wICAgIC0+IC0xDQorZHFjb3QxNDQgY29tcGFyZXRvdGFsICAgODBFLTEgIDkuMCAgICAtPiAtMQ0KK2RxY290MTQ1IGNvbXBhcmV0b3RhbCAgIDAuOEUrMSA5ICAgICAgLT4gLTENCitkcWNvdDE0NiBjb21wYXJldG90YWwgICA4MEUtMSAgOSAgICAgIC0+IC0xDQorZHFjb3QxNDcgY29tcGFyZXRvdGFsICAgOC4wICAgIDlFKzAgICAtPiAtMQ0KK2RxY290MTQ4IGNvbXBhcmV0b3RhbCAgIDguMCAgICA5MEUtMSAgLT4gLTENCitkcWNvdDE0OSBjb21wYXJldG90YWwgICA4ICAgICAgMC45RSsxIC0+IC0xDQorZHFjb3QxNTAgY29tcGFyZXRvdGFsICAgOCAgICAgIDkwRS0xICAtPiAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgLSsgLi4NCitkcWNvdDIwMCBjb21wYXJldG90YWwgIC03LjAgICAgNy4wICAgIC0+IC0xDQorZHFjb3QyMDEgY29tcGFyZXRvdGFsICAtNy4wICAgIDcgICAgICAtPiAtMQ0KK2RxY290MjAyIGNvbXBhcmV0b3RhbCAgLTcgICAgICA3LjAgICAgLT4gLTENCitkcWNvdDIwMyBjb21wYXJldG90YWwgIC03RSswICAgNy4wICAgIC0+IC0xDQorZHFjb3QyMDQgY29tcGFyZXRvdGFsICAtNzBFLTEgIDcuMCAgICAtPiAtMQ0KK2RxY290MjA1IGNvbXBhcmV0b3RhbCAgLTAuN0UrMSA3ICAgICAgLT4gLTENCitkcWNvdDIwNiBjb21wYXJldG90YWwgIC03MEUtMSAgNyAgICAgIC0+IC0xDQorZHFjb3QyMDcgY29tcGFyZXRvdGFsICAtNy4wICAgIDdFKzAgICAtPiAtMQ0KK2RxY290MjA4IGNvbXBhcmV0b3RhbCAgLTcuMCAgICA3MEUtMSAgLT4gLTENCitkcWNvdDIwOSBjb21wYXJldG90YWwgIC03ICAgICAgMC43RSsxIC0+IC0xDQorZHFjb3QyMTAgY29tcGFyZXRvdGFsICAtNyAgICAgIDcwRS0xICAtPiAtMQ0KKw0KK2RxY290MjIwIGNvbXBhcmV0b3RhbCAgLTguMCAgICA3LjAgICAgLT4gLTENCitkcWNvdDIyMSBjb21wYXJldG90YWwgIC04LjAgICAgNyAgICAgIC0+IC0xDQorZHFjb3QyMjIgY29tcGFyZXRvdGFsICAtOCAgICAgIDcuMCAgICAtPiAtMQ0KK2RxY290MjIzIGNvbXBhcmV0b3RhbCAgLThFKzAgICA3LjAgICAgLT4gLTENCitkcWNvdDIyNCBjb21wYXJldG90YWwgIC04MEUtMSAgNy4wICAgIC0+IC0xDQorZHFjb3QyMjUgY29tcGFyZXRvdGFsICAtMC44RSsxIDcgICAgICAtPiAtMQ0KK2RxY290MjI2IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA3ICAgICAgLT4gLTENCitkcWNvdDIyNyBjb21wYXJldG90YWwgIC04LjAgICAgN0UrMCAgIC0+IC0xDQorZHFjb3QyMjggY29tcGFyZXRvdGFsICAtOC4wICAgIDcwRS0xICAtPiAtMQ0KK2RxY290MjI5IGNvbXBhcmV0b3RhbCAgLTggICAgICAwLjdFKzEgLT4gLTENCitkcWNvdDIzMCBjb21wYXJldG90YWwgIC04ICAgICAgNzBFLTEgIC0+IC0xDQorDQorZHFjb3QyNDAgY29tcGFyZXRvdGFsICAtOC4wICAgIDkuMCAgICAtPiAtMQ0KK2RxY290MjQxIGNvbXBhcmV0b3RhbCAgLTguMCAgICA5ICAgICAgLT4gLTENCitkcWNvdDI0MiBjb21wYXJldG90YWwgIC04ICAgICAgOS4wICAgIC0+IC0xDQorZHFjb3QyNDMgY29tcGFyZXRvdGFsICAtOEUrMCAgIDkuMCAgICAtPiAtMQ0KK2RxY290MjQ0IGNvbXBhcmV0b3RhbCAgLTgwRS0xICA5LjAgICAgLT4gLTENCitkcWNvdDI0NSBjb21wYXJldG90YWwgIC0wLjhFKzEgOSAgICAgIC0+IC0xDQorZHFjb3QyNDYgY29tcGFyZXRvdGFsICAtODBFLTEgIDkgICAgICAtPiAtMQ0KK2RxY290MjQ3IGNvbXBhcmV0b3RhbCAgLTguMCAgICA5RSswICAgLT4gLTENCitkcWNvdDI0OCBjb21wYXJldG90YWwgIC04LjAgICAgOTBFLTEgIC0+IC0xDQorZHFjb3QyNDkgY29tcGFyZXRvdGFsICAtOCAgICAgIDAuOUUrMSAtPiAtMQ0KK2RxY290MjUwIGNvbXBhcmV0b3RhbCAgLTggICAgICA5MEUtMSAgLT4gLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzICstIC4uDQorZHFjb3QzMDAgY29tcGFyZXRvdGFsICAgNy4wICAgIC03LjAgICAgLT4gMQ0KK2RxY290MzAxIGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtNyAgICAgIC0+IDENCitkcWNvdDMwMiBjb21wYXJldG90YWwgICA3ICAgICAgLTcuMCAgICAtPiAxDQorZHFjb3QzMDMgY29tcGFyZXRvdGFsICAgN0UrMCAgIC03LjAgICAgLT4gMQ0KK2RxY290MzA0IGNvbXBhcmV0b3RhbCAgIDcwRS0xICAtNy4wICAgIC0+IDENCitkcWNvdDMwNSBjb21wYXJldG90YWwgICAuN0UrMSAgLTcgICAgICAtPiAxDQorZHFjb3QzMDYgY29tcGFyZXRvdGFsICAgNzBFLTEgIC03ICAgICAgLT4gMQ0KK2RxY290MzA3IGNvbXBhcmV0b3RhbCAgIDcuMCAgICAtN0UrMCAgIC0+IDENCitkcWNvdDMwOCBjb21wYXJldG90YWwgICA3LjAgICAgLTcwRS0xICAtPiAxDQorZHFjb3QzMDkgY29tcGFyZXRvdGFsICAgNyAgICAgIC0uN0UrMSAgLT4gMQ0KK2RxY290MzEwIGNvbXBhcmV0b3RhbCAgIDcgICAgICAtNzBFLTEgIC0+IDENCisNCitkcWNvdDMyMCBjb21wYXJldG90YWwgICA4LjAgICAgLTcuMCAgICAtPiAxDQorZHFjb3QzMjEgY29tcGFyZXRvdGFsICAgOC4wICAgIC03ICAgICAgLT4gMQ0KK2RxY290MzIyIGNvbXBhcmV0b3RhbCAgIDggICAgICAtNy4wICAgIC0+IDENCitkcWNvdDMyMyBjb21wYXJldG90YWwgICA4RSswICAgLTcuMCAgICAtPiAxDQorZHFjb3QzMjQgY29tcGFyZXRvdGFsICAgODBFLTEgIC03LjAgICAgLT4gMQ0KK2RxY290MzI1IGNvbXBhcmV0b3RhbCAgIC44RSsxICAtNyAgICAgIC0+IDENCitkcWNvdDMyNiBjb21wYXJldG90YWwgICA4MEUtMSAgLTcgICAgICAtPiAxDQorZHFjb3QzMjcgY29tcGFyZXRvdGFsICAgOC4wICAgIC03RSswICAgLT4gMQ0KK2RxY290MzI4IGNvbXBhcmV0b3RhbCAgIDguMCAgICAtNzBFLTEgIC0+IDENCitkcWNvdDMyOSBjb21wYXJldG90YWwgICA4ICAgICAgLS43RSsxICAtPiAxDQorZHFjb3QzMzAgY29tcGFyZXRvdGFsICAgOCAgICAgIC03MEUtMSAgLT4gMQ0KKw0KK2RxY290MzQwIGNvbXBhcmV0b3RhbCAgIDguMCAgICAtOS4wICAgIC0+IDENCitkcWNvdDM0MSBjb21wYXJldG90YWwgICA4LjAgICAgLTkgICAgICAtPiAxDQorZHFjb3QzNDIgY29tcGFyZXRvdGFsICAgOCAgICAgIC05LjAgICAgLT4gMQ0KK2RxY290MzQzIGNvbXBhcmV0b3RhbCAgIDhFKzAgICAtOS4wICAgIC0+IDENCitkcWNvdDM0NCBjb21wYXJldG90YWwgICA4MEUtMSAgLTkuMCAgICAtPiAxDQorZHFjb3QzNDUgY29tcGFyZXRvdGFsICAgLjhFKzEgIC05ICAgICAgLT4gMQ0KK2RxY290MzQ2IGNvbXBhcmV0b3RhbCAgIDgwRS0xICAtOSAgICAgIC0+IDENCitkcWNvdDM0NyBjb21wYXJldG90YWwgICA4LjAgICAgLTlFKzAgICAtPiAxDQorZHFjb3QzNDggY29tcGFyZXRvdGFsICAgOC4wICAgIC05MEUtMSAgLT4gMQ0KK2RxY290MzQ5IGNvbXBhcmV0b3RhbCAgIDggICAgICAtLjlFKzEgIC0+IDENCitkcWNvdDM1MCBjb21wYXJldG90YWwgICA4ICAgICAgLTkwRS0xICAtPiAxDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLg0KK2RxY290NDAwIGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcuMCAgICAtPiAwDQorZHFjb3Q0MDEgY29tcGFyZXRvdGFsICAgLTcuMCAgICAtNyAgICAgIC0+IDENCitkcWNvdDQwMiBjb21wYXJldG90YWwgICAtNyAgICAgIC03LjAgICAgLT4gLTENCitkcWNvdDQwMyBjb21wYXJldG90YWwgICAtN0UrMCAgIC03LjAgICAgLT4gLTENCitkcWNvdDQwNCBjb21wYXJldG90YWwgICAtNzBFLTEgIC03LjAgICAgLT4gMA0KK2RxY290NDA1IGNvbXBhcmV0b3RhbCAgIC0uN0UrMSAgLTcgICAgICAtPiAwDQorZHFjb3Q0MDYgY29tcGFyZXRvdGFsICAgLTcwRS0xICAtNyAgICAgIC0+IDENCitkcWNvdDQwNyBjb21wYXJldG90YWwgICAtNy4wICAgIC03RSswICAgLT4gMQ0KK2RxY290NDA4IGNvbXBhcmV0b3RhbCAgIC03LjAgICAgLTcwRS0xICAtPiAwDQorZHFjb3Q0MDkgY29tcGFyZXRvdGFsICAgLTcgICAgICAtLjdFKzEgIC0+IDANCitkcWNvdDQxMCBjb21wYXJldG90YWwgICAtNyAgICAgIC03MEUtMSAgLT4gLTENCisNCitkcWNvdDQyMCBjb21wYXJldG90YWwgICAtOC4wICAgIC03LjAgICAgLT4gLTENCitkcWNvdDQyMSBjb21wYXJldG90YWwgICAtOC4wICAgIC03ICAgICAgLT4gLTENCitkcWNvdDQyMiBjb21wYXJldG90YWwgICAtOCAgICAgIC03LjAgICAgLT4gLTENCitkcWNvdDQyMyBjb21wYXJldG90YWwgICAtOEUrMCAgIC03LjAgICAgLT4gLTENCitkcWNvdDQyNCBjb21wYXJldG90YWwgICAtODBFLTEgIC03LjAgICAgLT4gLTENCitkcWNvdDQyNSBjb21wYXJldG90YWwgICAtLjhFKzEgIC03ICAgICAgLT4gLTENCitkcWNvdDQyNiBjb21wYXJldG90YWwgICAtODBFLTEgIC03ICAgICAgLT4gLTENCitkcWNvdDQyNyBjb21wYXJldG90YWwgICAtOC4wICAgIC03RSswICAgLT4gLTENCitkcWNvdDQyOCBjb21wYXJldG90YWwgICAtOC4wICAgIC03MEUtMSAgLT4gLTENCitkcWNvdDQyOSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uN0UrMSAgLT4gLTENCitkcWNvdDQzMCBjb21wYXJldG90YWwgICAtOCAgICAgIC03MEUtMSAgLT4gLTENCisNCitkcWNvdDQ0MCBjb21wYXJldG90YWwgICAtOC4wICAgIC05LjAgICAgLT4gMQ0KK2RxY290NDQxIGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTkgICAgICAtPiAxDQorZHFjb3Q0NDIgY29tcGFyZXRvdGFsICAgLTggICAgICAtOS4wICAgIC0+IDENCitkcWNvdDQ0MyBjb21wYXJldG90YWwgICAtOEUrMCAgIC05LjAgICAgLT4gMQ0KK2RxY290NDQ0IGNvbXBhcmV0b3RhbCAgIC04MEUtMSAgLTkuMCAgICAtPiAxDQorZHFjb3Q0NDUgY29tcGFyZXRvdGFsICAgLS44RSsxICAtOSAgICAgIC0+IDENCitkcWNvdDQ0NiBjb21wYXJldG90YWwgICAtODBFLTEgIC05ICAgICAgLT4gMQ0KK2RxY290NDQ3IGNvbXBhcmV0b3RhbCAgIC04LjAgICAgLTlFKzAgICAtPiAxDQorZHFjb3Q0NDggY29tcGFyZXRvdGFsICAgLTguMCAgICAtOTBFLTEgIC0+IDENCitkcWNvdDQ0OSBjb21wYXJldG90YWwgICAtOCAgICAgIC0uOUUrMSAgLT4gMQ0KK2RxY290NDUwIGNvbXBhcmV0b3RhbCAgIC04ICAgICAgLTkwRS0xICAtPiAxDQorDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorZHFjb3Q0NzMgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2RxY290NDc0IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KK2RxY290NDc1IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorZHFjb3Q0NzYgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwMDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KK2RxY290NDc3IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2RxY290NDc4IGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5IC0+IC0xDQorZHFjb3Q0NzkgY29tcGFyZXRvdGFsIDEyMy40NTYwMDAwRS04OSAxMjMuNDU2RS04OSAtPiAtMQ0KK2RxY290NDgwIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDAwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KK2RxY290NDgxIGNvbXBhcmV0b3RhbCAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5IC0+IC0xDQorZHFjb3Q0ODIgY29tcGFyZXRvdGFsIDEyMy40NTYwRSs4OSAxMjMuNDU2RSs4OSAtPiAtMQ0KK2RxY290NDgzIGNvbXBhcmV0b3RhbCAxMjMuNDU2RS04OSAxMjMuNDU2RS04OSAtPiAwDQorZHFjb3Q0ODcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMDAwRSs4OSAtPiAxDQorZHFjb3Q0ODggY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5IC0+IDENCitkcWNvdDQ4OSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwRSs4OSAtPiAxDQorZHFjb3Q0OTAgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwRS04OSAtPiAxDQorZHFjb3Q0OTEgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5IC0+IDENCitkcWNvdDQ5MiBjb21wYXJldG90YWwgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwRS04OSAtPiAxDQorZHFjb3Q0OTMgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwRSs4OSAtPiAxDQorZHFjb3Q0OTQgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5IC0+IDENCitkcWNvdDQ5NSBjb21wYXJldG90YWwgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwRSs4OSAtPiAxDQorZHFjb3Q0OTYgY29tcGFyZXRvdGFsIDEyMy40NTZFLTg5IDEyMy40NTYwRS04OSAtPiAxDQorZHFjb3Q0OTcgY29tcGFyZXRvdGFsIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5IC0+IDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorZHFjb3Q0OTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE3ICAgIC0+IDENCitkcWNvdDQ5OSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTYgICAgLT4gMQ0KK2RxY290NTAwIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xNSAgICAtPiAxDQorZHFjb3Q1MDEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTE0ICAgIC0+IDENCitkcWNvdDUwMiBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTMgICAgLT4gMQ0KK2RxY290NTAzIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0xMiAgICAtPiAxDQorZHFjb3Q1MDQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTExICAgIC0+IDENCitkcWNvdDUwNSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMTAgICAgLT4gMQ0KK2RxY290NTA2IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS05ICAgICAtPiAxDQorZHFjb3Q1MDcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTggICAgIC0+IDENCitkcWNvdDUwOCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNyAgICAgLT4gMQ0KK2RxY290NTA5IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS02ICAgICAtPiAxDQorZHFjb3Q1MTAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTUgICAgIC0+IDENCitkcWNvdDUxMSBjb21wYXJldG90YWwgICAgMSAgICAgMUUtNCAgICAgLT4gMQ0KK2RxY290NTEyIGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0zICAgICAtPiAxDQorZHFjb3Q1MTMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFLTIgICAgIC0+IDENCitkcWNvdDUxNCBjb21wYXJldG90YWwgICAgMSAgICAgMUUtMSAgICAgLT4gMQ0KK2RxY290NTE1IGNvbXBhcmV0b3RhbCAgICAxICAgICAxRS0wICAgICAtPiAwDQorZHFjb3Q1MTYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEgICAgIC0+IC0xDQorZHFjb3Q1MTcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzIgICAgIC0+IC0xDQorZHFjb3Q1MTggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzMgICAgIC0+IC0xDQorZHFjb3Q1MTkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzQgICAgIC0+IC0xDQorZHFjb3Q1MjEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzUgICAgIC0+IC0xDQorZHFjb3Q1MjIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzYgICAgIC0+IC0xDQorZHFjb3Q1MjMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzcgICAgIC0+IC0xDQorZHFjb3Q1MjQgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzggICAgIC0+IC0xDQorZHFjb3Q1MjUgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzkgICAgIC0+IC0xDQorZHFjb3Q1MjYgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEwICAgIC0+IC0xDQorZHFjb3Q1MjcgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzExICAgIC0+IC0xDQorZHFjb3Q1MjggY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEyICAgIC0+IC0xDQorZHFjb3Q1MjkgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzEzICAgIC0+IC0xDQorZHFjb3Q1MzAgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE0ICAgIC0+IC0xDQorZHFjb3Q1MzEgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE1ICAgIC0+IC0xDQorZHFjb3Q1MzIgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE2ICAgIC0+IC0xDQorZHFjb3Q1MzMgY29tcGFyZXRvdGFsICAgIDEgICAgIDFFKzE3ICAgIC0+IC0xDQorLS0gTFIgc3dhcA0KK2RxY290NTM4IGNvbXBhcmV0b3RhbCAgICAxRS0xNyAgMSAgICAgICAtPiAtMQ0KK2RxY290NTM5IGNvbXBhcmV0b3RhbCAgICAxRS0xNiAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQwIGNvbXBhcmV0b3RhbCAgICAxRS0xNSAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQxIGNvbXBhcmV0b3RhbCAgICAxRS0xNCAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQyIGNvbXBhcmV0b3RhbCAgICAxRS0xMyAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQzIGNvbXBhcmV0b3RhbCAgICAxRS0xMiAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ0IGNvbXBhcmV0b3RhbCAgICAxRS0xMSAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ1IGNvbXBhcmV0b3RhbCAgICAxRS0xMCAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ2IGNvbXBhcmV0b3RhbCAgICAxRS05ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ3IGNvbXBhcmV0b3RhbCAgICAxRS04ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ4IGNvbXBhcmV0b3RhbCAgICAxRS03ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTQ5IGNvbXBhcmV0b3RhbCAgICAxRS02ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTUwIGNvbXBhcmV0b3RhbCAgICAxRS01ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTUxIGNvbXBhcmV0b3RhbCAgICAxRS00ICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTUyIGNvbXBhcmV0b3RhbCAgICAxRS0zICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTUzIGNvbXBhcmV0b3RhbCAgICAxRS0yICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTU0IGNvbXBhcmV0b3RhbCAgICAxRS0xICAgMSAgICAgICAtPiAtMQ0KK2RxY290NTU1IGNvbXBhcmV0b3RhbCAgICAxRS0wICAgMSAgICAgICAtPiAgMA0KK2RxY290NTU2IGNvbXBhcmV0b3RhbCAgICAxRSsxICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTU3IGNvbXBhcmV0b3RhbCAgICAxRSsyICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTU4IGNvbXBhcmV0b3RhbCAgICAxRSszICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTU5IGNvbXBhcmV0b3RhbCAgICAxRSs0ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTYxIGNvbXBhcmV0b3RhbCAgICAxRSs1ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTYyIGNvbXBhcmV0b3RhbCAgICAxRSs2ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTYzIGNvbXBhcmV0b3RhbCAgICAxRSs3ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY0IGNvbXBhcmV0b3RhbCAgICAxRSs4ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY1IGNvbXBhcmV0b3RhbCAgICAxRSs5ICAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY2IGNvbXBhcmV0b3RhbCAgICAxRSsxMCAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY3IGNvbXBhcmV0b3RhbCAgICAxRSsxMSAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY4IGNvbXBhcmV0b3RhbCAgICAxRSsxMiAgMSAgICAgICAtPiAgMQ0KK2RxY290NTY5IGNvbXBhcmV0b3RhbCAgICAxRSsxMyAgMSAgICAgICAtPiAgMQ0KK2RxY290NTcwIGNvbXBhcmV0b3RhbCAgICAxRSsxNCAgMSAgICAgICAtPiAgMQ0KK2RxY290NTcxIGNvbXBhcmV0b3RhbCAgICAxRSsxNSAgMSAgICAgICAtPiAgMQ0KK2RxY290NTcyIGNvbXBhcmV0b3RhbCAgICAxRSsxNiAgMSAgICAgICAtPiAgMQ0KK2RxY290NTczIGNvbXBhcmV0b3RhbCAgICAxRSsxNyAgMSAgICAgICAtPiAgMQ0KKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KK2RxY290NTc4IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE3ICAgIC0+IDENCitkcWNvdDU3OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNiAgICAtPiAxDQorZHFjb3Q1ODAgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgLT4gMQ0KK2RxY290NTgxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE0ICAgIC0+IDENCitkcWNvdDU4MiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMyAgICAtPiAxDQorZHFjb3Q1ODMgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgLT4gMQ0KK2RxY290NTg0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTExICAgIC0+IDENCitkcWNvdDU4NSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMCAgICAtPiAxDQorZHFjb3Q1ODYgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgLT4gMQ0KK2RxY290NTg3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTggICAgIC0+IDENCitkcWNvdDU4OCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS03ICAgICAtPiAxDQorZHFjb3Q1ODkgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgLT4gLTENCitkcWNvdDU5MCBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAtPiAtMQ0KK2RxY290NTkxIGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgIC0+IC0xDQorZHFjb3Q1OTIgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgLT4gLTENCitkcWNvdDU5MyBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAtPiAtMQ0KK2RxY290NTk0IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgIC0+IC0xDQorZHFjb3Q1OTUgY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgLT4gLTENCitkcWNvdDU5NiBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAtPiAtMQ0KK2RxY290NTk3IGNvbXBhcmV0b3RhbCAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgIC0+IC0xDQorZHFjb3Q1OTggY29tcGFyZXRvdGFsICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgLT4gLTENCitkcWNvdDU5OSBjb21wYXJldG90YWwgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAtPiAtMQ0KKw0KKy0tIGNoZWNrIHNvbWUgdW5pdC15IHRyYXBzDQorZHFjb3Q2MDAgY29tcGFyZXRvdGFsICAgMTIgICAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDEgY29tcGFyZXRvdGFsICAgMTIuMCAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDIgY29tcGFyZXRvdGFsICAgMTIuMDAgICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDMgY29tcGFyZXRvdGFsICAgMTIuMDAwICAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDQgY29tcGFyZXRvdGFsICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDUgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDYgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDcgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDggY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MDkgY29tcGFyZXRvdGFsICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1IC0+IC0xDQorZHFjb3Q2MTAgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMiAgICAgICAgICAgIC0+ICAxDQorZHFjb3Q2MTEgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wICAgICAgICAgIC0+ICAxDQorZHFjb3Q2MTIgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMCAgICAgICAgIC0+ICAxDQorZHFjb3Q2MTMgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAgICAgICAgIC0+ICAxDQorZHFjb3Q2MTQgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwICAgICAgIC0+ICAxDQorZHFjb3Q2MTUgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgIC0+ICAxDQorZHFjb3Q2MTYgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgIC0+ICAxDQorZHFjb3Q2MTcgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgIC0+ICAxDQorZHFjb3Q2MTggY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgIC0+ICAxDQorZHFjb3Q2MTkgY29tcGFyZXRvdGFsICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgIC0+ICAxDQorZHFjb3Q2MjAgY29tcGFyZXRvdGFsICAtMTIgICAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjEgY29tcGFyZXRvdGFsICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjIgY29tcGFyZXRvdGFsICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjMgY29tcGFyZXRvdGFsICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjQgY29tcGFyZXRvdGFsICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjUgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjYgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjcgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjggY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MjkgY29tcGFyZXRvdGFsICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1IC0+ICAxDQorZHFjb3Q2MzAgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIgICAgICAgICAgIC0+IC0xDQorZHFjb3Q2MzEgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMCAgICAgICAgIC0+IC0xDQorZHFjb3Q2MzIgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAgICAgICAgIC0+IC0xDQorZHFjb3Q2MzMgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwICAgICAgIC0+IC0xDQorZHFjb3Q2MzQgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgIC0+IC0xDQorZHFjb3Q2MzUgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgIC0+IC0xDQorZHFjb3Q2MzYgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgIC0+IC0xDQorZHFjb3Q2MzcgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgIC0+IC0xDQorZHFjb3Q2MzggY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgIC0+IC0xDQorZHFjb3Q2MzkgY29tcGFyZXRvdGFsICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwIC0+IC0xDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitkcWNvdDY0MCBjb21wYXJldG90YWwgICAwICAgICAwICAgLT4gMA0KK2RxY290NjQxIGNvbXBhcmV0b3RhbCAgIDAgICAgLTAgICAtPiAxDQorZHFjb3Q2NDIgY29tcGFyZXRvdGFsICAgMCAgICAtMC4wIC0+IDENCitkcWNvdDY0MyBjb21wYXJldG90YWwgICAwICAgICAwLjAgLT4gMQ0KK2RxY290NjQ0IGNvbXBhcmV0b3RhbCAgLTAgICAgIDAgICAtPiAtMQ0KK2RxY290NjQ1IGNvbXBhcmV0b3RhbCAgLTAgICAgLTAgICAtPiAwDQorZHFjb3Q2NDYgY29tcGFyZXRvdGFsICAtMCAgICAtMC4wIC0+IC0xDQorZHFjb3Q2NDcgY29tcGFyZXRvdGFsICAtMCAgICAgMC4wIC0+IC0xDQorZHFjb3Q2NDggY29tcGFyZXRvdGFsICAgMC4wICAgMCAgIC0+IC0xDQorZHFjb3Q2NDkgY29tcGFyZXRvdGFsICAgMC4wICAtMCAgIC0+IDENCitkcWNvdDY1MCBjb21wYXJldG90YWwgICAwLjAgIC0wLjAgLT4gMQ0KK2RxY290NjUxIGNvbXBhcmV0b3RhbCAgIDAuMCAgIDAuMCAtPiAwDQorZHFjb3Q2NTIgY29tcGFyZXRvdGFsICAtMC4wICAgMCAgIC0+IC0xDQorZHFjb3Q2NTMgY29tcGFyZXRvdGFsICAtMC4wICAtMCAgIC0+IDENCitkcWNvdDY1NCBjb21wYXJldG90YWwgIC0wLjAgIC0wLjAgLT4gMA0KK2RxY290NjU1IGNvbXBhcmV0b3RhbCAgLTAuMCAgIDAuMCAtPiAtMQ0KKw0KK2RxY290NjU2IGNvbXBhcmV0b3RhbCAgLTBFMSAgIDAuMCAtPiAtMQ0KK2RxY290NjU3IGNvbXBhcmV0b3RhbCAgLTBFMiAgIDAuMCAtPiAtMQ0KK2RxY290NjU4IGNvbXBhcmV0b3RhbCAgIDBFMSAgIDAuMCAtPiAxDQorZHFjb3Q2NTkgY29tcGFyZXRvdGFsICAgMEUyICAgMC4wIC0+IDENCitkcWNvdDY2MCBjb21wYXJldG90YWwgIC0wRTEgICAwICAgLT4gLTENCitkcWNvdDY2MSBjb21wYXJldG90YWwgIC0wRTIgICAwICAgLT4gLTENCitkcWNvdDY2MiBjb21wYXJldG90YWwgICAwRTEgICAwICAgLT4gMQ0KK2RxY290NjYzIGNvbXBhcmV0b3RhbCAgIDBFMiAgIDAgICAtPiAxDQorZHFjb3Q2NjQgY29tcGFyZXRvdGFsICAtMEUxICAtMEUxIC0+IDANCitkcWNvdDY2NSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTEgLT4gLTENCitkcWNvdDY2NiBjb21wYXJldG90YWwgICAwRTEgIC0wRTEgLT4gMQ0KK2RxY290NjY3IGNvbXBhcmV0b3RhbCAgIDBFMiAgLTBFMSAtPiAxDQorZHFjb3Q2NjggY29tcGFyZXRvdGFsICAtMEUxICAtMEUyIC0+IDENCitkcWNvdDY2OSBjb21wYXJldG90YWwgIC0wRTIgIC0wRTIgLT4gMA0KK2RxY290NjcwIGNvbXBhcmV0b3RhbCAgIDBFMSAgLTBFMiAtPiAxDQorZHFjb3Q2NzEgY29tcGFyZXRvdGFsICAgMEUyICAtMEUyIC0+IDENCitkcWNvdDY3MiBjb21wYXJldG90YWwgIC0wRTEgICAwRTEgLT4gLTENCitkcWNvdDY3MyBjb21wYXJldG90YWwgIC0wRTIgICAwRTEgLT4gLTENCitkcWNvdDY3NCBjb21wYXJldG90YWwgICAwRTEgICAwRTEgLT4gMA0KK2RxY290Njc1IGNvbXBhcmV0b3RhbCAgIDBFMiAgIDBFMSAtPiAxDQorZHFjb3Q2NzYgY29tcGFyZXRvdGFsICAtMEUxICAgMEUyIC0+IC0xDQorZHFjb3Q2NzcgY29tcGFyZXRvdGFsICAtMEUyICAgMEUyIC0+IC0xDQorZHFjb3Q2NzggY29tcGFyZXRvdGFsICAgMEUxICAgMEUyIC0+IC0xDQorZHFjb3Q2NzkgY29tcGFyZXRvdGFsICAgMEUyICAgMEUyIC0+IDANCisNCistLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15DQorZHFjb3Q2ODAgY29tcGFyZXRvdGFsICAgMTIgICAgMTIgICAgICAgICAgIC0+IDANCitkcWNvdDY4MSBjb21wYXJldG90YWwgICAxMiAgICAxMi4wICAgICAgICAgLT4gMQ0KK2RxY290NjgyIGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwICAgICAgICAtPiAxDQorZHFjb3Q2ODMgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwICAgICAgIC0+IDENCitkcWNvdDY4NCBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwICAgICAgLT4gMQ0KK2RxY290Njg1IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwICAgICAtPiAxDQorZHFjb3Q2ODYgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwICAgIC0+IDENCitkcWNvdDY4NyBjb21wYXJldG90YWwgICAxMiAgICAxMi4wMDAwMDAwICAgLT4gMQ0KK2RxY290Njg4IGNvbXBhcmV0b3RhbCAgIDEyICAgIDEyLjAwMDAwMDAwICAtPiAxDQorZHFjb3Q2ODkgY29tcGFyZXRvdGFsICAgMTIgICAgMTIuMDAwMDAwMDAwIC0+IDENCitkcWNvdDY5MCBjb21wYXJldG90YWwgICAxMiAgICAgICAgICAgICAgMTIgLT4gMA0KK2RxY290NjkxIGNvbXBhcmV0b3RhbCAgIDEyLjAgICAgICAgICAgICAxMiAtPiAtMQ0KK2RxY290NjkyIGNvbXBhcmV0b3RhbCAgIDEyLjAwICAgICAgICAgICAxMiAtPiAtMQ0KK2RxY290NjkzIGNvbXBhcmV0b3RhbCAgIDEyLjAwMCAgICAgICAgICAxMiAtPiAtMQ0KK2RxY290Njk0IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAgICAgICAgICAxMiAtPiAtMQ0KK2RxY290Njk1IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwICAgICAgICAxMiAtPiAtMQ0KK2RxY290Njk2IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMCAgICAgICAxMiAtPiAtMQ0KK2RxY290Njk3IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAgICAgICAxMiAtPiAtMQ0KK2RxY290Njk4IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwICAgICAxMiAtPiAtMQ0KK2RxY290Njk5IGNvbXBhcmV0b3RhbCAgIDEyLjAwMDAwMDAwMCAgICAxMiAtPiAtMQ0KKw0KKy0tIG9sZCBsb25nIG9wZXJhbmQgY2hlY2tzDQorZHFjb3Q3MDEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAwICAxIC0+ICAxDQorZHFjb3Q3MDIgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMDAgIC0+IC0xDQorZHFjb3Q3MDMgY29tcGFyZXRvdGFsIDEyMzQ1Njc4MDAgICAxIC0+ICAxDQorZHFjb3Q3MDQgY29tcGFyZXRvdGFsIDEgMTIzNDU2NzgwMCAgIC0+IC0xDQorZHFjb3Q3MDUgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAgICAxIC0+ICAxDQorZHFjb3Q3MDYgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MCAgIC0+IC0xDQorZHFjb3Q3MDcgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTEgICAxIC0+ICAxDQorZHFjb3Q3MDggY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MSAgIC0+IC0xDQorZHFjb3Q3MDkgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTAxICAxIC0+ICAxDQorZHFjb3Q3MTAgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5MDEgIC0+IC0xDQorZHFjb3Q3MTEgY29tcGFyZXRvdGFsIDEyMzQ1Njc4OTYgICAxIC0+ICAxDQorZHFjb3Q3MTIgY29tcGFyZXRvdGFsIDEgMTIzNDU2Nzg5NiAgIC0+IC0xDQorZHFjb3Q3MTMgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkxICAxIC0+IC0xDQorZHFjb3Q3MTQgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTEgIC0+ICAxDQorZHFjb3Q3MTUgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODkwMSAxIC0+IC0xDQorZHFjb3Q3MTYgY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTAxIC0+ICAxDQorZHFjb3Q3MTcgY29tcGFyZXRvdGFsIC0xMjM0NTY3ODk2ICAxIC0+IC0xDQorZHFjb3Q3MTggY29tcGFyZXRvdGFsIDEgLTEyMzQ1Njc4OTYgIC0+ICAxDQorDQorLS0gb2xkIHJlc2lkdWUgY2FzZXMNCitkcWNvdDc0MCBjb21wYXJldG90YWwgIDEgIDAuOTk5OTk5OSAgLT4gMQ0KK2RxY290NzQxIGNvbXBhcmV0b3RhbCAgMSAgMC45OTk5OTkgICAtPiAxDQorZHFjb3Q3NDIgY29tcGFyZXRvdGFsICAxICAwLjk5OTk5ICAgIC0+IDENCitkcWNvdDc0MyBjb21wYXJldG90YWwgIDEgIDEuMDAwMCAgICAgLT4gMQ0KK2RxY290NzQ0IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMSAgICAtPiAtMQ0KK2RxY290NzQ1IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDEgICAtPiAtMQ0KK2RxY290NzQ2IGNvbXBhcmV0b3RhbCAgMSAgMS4wMDAwMDAxICAtPiAtMQ0KK2RxY290NzUwIGNvbXBhcmV0b3RhbCAgMC45OTk5OTk5ICAxICAtPiAtMQ0KK2RxY290NzUxIGNvbXBhcmV0b3RhbCAgMC45OTk5OTkgICAxICAtPiAtMQ0KK2RxY290NzUyIGNvbXBhcmV0b3RhbCAgMC45OTk5OSAgICAxICAtPiAtMQ0KK2RxY290NzUzIGNvbXBhcmV0b3RhbCAgMS4wMDAwICAgICAxICAtPiAtMQ0KK2RxY290NzU0IGNvbXBhcmV0b3RhbCAgMS4wMDAwMSAgICAxICAtPiAxDQorZHFjb3Q3NTUgY29tcGFyZXRvdGFsICAxLjAwMDAwMSAgIDEgIC0+IDENCitkcWNvdDc1NiBjb21wYXJldG90YWwgIDEuMDAwMDAwMSAgMSAgLT4gMQ0KKw0KKy0tIFNwZWNpYWxzDQorZHFjb3Q3ODAgY29tcGFyZXRvdGFsICBJbmYgIC1JbmYgICAtPiAgMQ0KK2RxY290NzgxIGNvbXBhcmV0b3RhbCAgSW5mICAtMTAwMCAgLT4gIDENCitkcWNvdDc4MiBjb21wYXJldG90YWwgIEluZiAgLTEgICAgIC0+ICAxDQorZHFjb3Q3ODMgY29tcGFyZXRvdGFsICBJbmYgIC0wICAgICAtPiAgMQ0KK2RxY290Nzg0IGNvbXBhcmV0b3RhbCAgSW5mICAgMCAgICAgLT4gIDENCitkcWNvdDc4NSBjb21wYXJldG90YWwgIEluZiAgIDEgICAgIC0+ICAxDQorZHFjb3Q3ODYgY29tcGFyZXRvdGFsICBJbmYgICAxMDAwICAtPiAgMQ0KK2RxY290Nzg3IGNvbXBhcmV0b3RhbCAgSW5mICAgSW5mICAgLT4gIDANCitkcWNvdDc4OCBjb21wYXJldG90YWwgLTEwMDAgIEluZiAgIC0+IC0xDQorZHFjb3Q3ODkgY29tcGFyZXRvdGFsIC1JbmYgICBJbmYgICAtPiAtMQ0KK2RxY290NzkwIGNvbXBhcmV0b3RhbCAtMSAgICAgSW5mICAgLT4gLTENCitkcWNvdDc5MSBjb21wYXJldG90YWwgLTAgICAgIEluZiAgIC0+IC0xDQorZHFjb3Q3OTIgY29tcGFyZXRvdGFsICAwICAgICBJbmYgICAtPiAtMQ0KK2RxY290NzkzIGNvbXBhcmV0b3RhbCAgMSAgICAgSW5mICAgLT4gLTENCitkcWNvdDc5NCBjb21wYXJldG90YWwgIDEwMDAgIEluZiAgIC0+IC0xDQorZHFjb3Q3OTUgY29tcGFyZXRvdGFsICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2RxY290ODAwIGNvbXBhcmV0b3RhbCAtSW5mICAtSW5mICAgLT4gIDANCitkcWNvdDgwMSBjb21wYXJldG90YWwgLUluZiAgLTEwMDAgIC0+IC0xDQorZHFjb3Q4MDIgY29tcGFyZXRvdGFsIC1JbmYgIC0xICAgICAtPiAtMQ0KK2RxY290ODAzIGNvbXBhcmV0b3RhbCAtSW5mICAtMCAgICAgLT4gLTENCitkcWNvdDgwNCBjb21wYXJldG90YWwgLUluZiAgIDAgICAgIC0+IC0xDQorZHFjb3Q4MDUgY29tcGFyZXRvdGFsIC1JbmYgICAxICAgICAtPiAtMQ0KK2RxY290ODA2IGNvbXBhcmV0b3RhbCAtSW5mICAgMTAwMCAgLT4gLTENCitkcWNvdDgwNyBjb21wYXJldG90YWwgLUluZiAgIEluZiAgIC0+IC0xDQorZHFjb3Q4MDggY29tcGFyZXRvdGFsIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RxY290ODA5IGNvbXBhcmV0b3RhbCAtMTAwMCAtSW5mICAgLT4gIDENCitkcWNvdDgxMCBjb21wYXJldG90YWwgLTEgICAgLUluZiAgIC0+ICAxDQorZHFjb3Q4MTEgY29tcGFyZXRvdGFsIC0wICAgIC1JbmYgICAtPiAgMQ0KK2RxY290ODEyIGNvbXBhcmV0b3RhbCAgMCAgICAtSW5mICAgLT4gIDENCitkcWNvdDgxMyBjb21wYXJldG90YWwgIDEgICAgLUluZiAgIC0+ICAxDQorZHFjb3Q4MTQgY29tcGFyZXRvdGFsICAxMDAwIC1JbmYgICAtPiAgMQ0KK2RxY290ODE1IGNvbXBhcmV0b3RhbCAgSW5mICAtSW5mICAgLT4gIDENCisNCitkcWNvdDgyMSBjb21wYXJldG90YWwgIE5hTiAtSW5mICAgIC0+ICAxDQorZHFjb3Q4MjIgY29tcGFyZXRvdGFsICBOYU4gLTEwMDAgICAtPiAgMQ0KK2RxY290ODIzIGNvbXBhcmV0b3RhbCAgTmFOIC0xICAgICAgLT4gIDENCitkcWNvdDgyNCBjb21wYXJldG90YWwgIE5hTiAtMCAgICAgIC0+ICAxDQorZHFjb3Q4MjUgY29tcGFyZXRvdGFsICBOYU4gIDAgICAgICAtPiAgMQ0KK2RxY290ODI2IGNvbXBhcmV0b3RhbCAgTmFOICAxICAgICAgLT4gIDENCitkcWNvdDgyNyBjb21wYXJldG90YWwgIE5hTiAgMTAwMCAgIC0+ICAxDQorZHFjb3Q4MjggY29tcGFyZXRvdGFsICBOYU4gIEluZiAgICAtPiAgMQ0KK2RxY290ODI5IGNvbXBhcmV0b3RhbCAgTmFOICBOYU4gICAgLT4gIDANCitkcWNvdDgzMCBjb21wYXJldG90YWwgLUluZiAgTmFOICAgIC0+ICAtMQ0KK2RxY290ODMxIGNvbXBhcmV0b3RhbCAtMTAwMCBOYU4gICAgLT4gIC0xDQorZHFjb3Q4MzIgY29tcGFyZXRvdGFsIC0xICAgIE5hTiAgICAtPiAgLTENCitkcWNvdDgzMyBjb21wYXJldG90YWwgLTAgICAgTmFOICAgIC0+ICAtMQ0KK2RxY290ODM0IGNvbXBhcmV0b3RhbCAgMCAgICBOYU4gICAgLT4gIC0xDQorZHFjb3Q4MzUgY29tcGFyZXRvdGFsICAxICAgIE5hTiAgICAtPiAgLTENCitkcWNvdDgzNiBjb21wYXJldG90YWwgIDEwMDAgTmFOICAgIC0+ICAtMQ0KK2RxY290ODM3IGNvbXBhcmV0b3RhbCAgSW5mICBOYU4gICAgLT4gIC0xDQorZHFjb3Q4MzggY29tcGFyZXRvdGFsIC1OYU4gLU5hTiAgICAtPiAgMA0KK2RxY290ODM5IGNvbXBhcmV0b3RhbCArTmFOIC1OYU4gICAgLT4gIDENCitkcWNvdDg0MCBjb21wYXJldG90YWwgLU5hTiArTmFOICAgIC0+ICAtMQ0KKw0KK2RxY290ODQxIGNvbXBhcmV0b3RhbCAgc05hTiAtc05hTiAgLT4gIDENCitkcWNvdDg0MiBjb21wYXJldG90YWwgIHNOYU4gLU5hTiAgIC0+ICAxDQorZHFjb3Q4NDMgY29tcGFyZXRvdGFsICBzTmFOIC1JbmYgICAtPiAgMQ0KK2RxY290ODQ0IGNvbXBhcmV0b3RhbCAgc05hTiAtMTAwMCAgLT4gIDENCitkcWNvdDg0NSBjb21wYXJldG90YWwgIHNOYU4gLTEgICAgIC0+ICAxDQorZHFjb3Q4NDYgY29tcGFyZXRvdGFsICBzTmFOIC0wICAgICAtPiAgMQ0KK2RxY290ODQ3IGNvbXBhcmV0b3RhbCAgc05hTiAgMCAgICAgLT4gIDENCitkcWNvdDg0OCBjb21wYXJldG90YWwgIHNOYU4gIDEgICAgIC0+ICAxDQorZHFjb3Q4NDkgY29tcGFyZXRvdGFsICBzTmFOICAxMDAwICAtPiAgMQ0KK2RxY290ODUwIGNvbXBhcmV0b3RhbCAgc05hTiAgTmFOICAgLT4gIC0xDQorZHFjb3Q4NTEgY29tcGFyZXRvdGFsICBzTmFOIHNOYU4gICAtPiAgMA0KKw0KK2RxY290ODUyIGNvbXBhcmV0b3RhbCAtc05hTiBzTmFOICAgLT4gIC0xDQorZHFjb3Q4NTMgY29tcGFyZXRvdGFsIC1OYU4gIHNOYU4gICAtPiAgLTENCitkcWNvdDg1NCBjb21wYXJldG90YWwgLUluZiAgc05hTiAgIC0+ICAtMQ0KK2RxY290ODU1IGNvbXBhcmV0b3RhbCAtMTAwMCBzTmFOICAgLT4gIC0xDQorZHFjb3Q4NTYgY29tcGFyZXRvdGFsIC0xICAgIHNOYU4gICAtPiAgLTENCitkcWNvdDg1NyBjb21wYXJldG90YWwgLTAgICAgc05hTiAgIC0+ICAtMQ0KK2RxY290ODU4IGNvbXBhcmV0b3RhbCAgMCAgICBzTmFOICAgLT4gIC0xDQorZHFjb3Q4NTkgY29tcGFyZXRvdGFsICAxICAgIHNOYU4gICAtPiAgLTENCitkcWNvdDg2MCBjb21wYXJldG90YWwgIDEwMDAgc05hTiAgIC0+ICAtMQ0KK2RxY290ODYxIGNvbXBhcmV0b3RhbCAgSW5mICBzTmFOICAgLT4gIC0xDQorZHFjb3Q4NjIgY29tcGFyZXRvdGFsICBOYU4gIHNOYU4gICAtPiAgMQ0KK2RxY290ODYzIGNvbXBhcmV0b3RhbCAgc05hTiBzTmFOICAgLT4gIDANCisNCitkcWNvdDg3MSBjb21wYXJldG90YWwgIC1zTmFOIC1zTmFOICAtPiAgMA0KK2RxY290ODcyIGNvbXBhcmV0b3RhbCAgLXNOYU4gLU5hTiAgIC0+ICAxDQorZHFjb3Q4NzMgY29tcGFyZXRvdGFsICAtc05hTiAtSW5mICAgLT4gIC0xDQorZHFjb3Q4NzQgY29tcGFyZXRvdGFsICAtc05hTiAtMTAwMCAgLT4gIC0xDQorZHFjb3Q4NzUgY29tcGFyZXRvdGFsICAtc05hTiAtMSAgICAgLT4gIC0xDQorZHFjb3Q4NzYgY29tcGFyZXRvdGFsICAtc05hTiAtMCAgICAgLT4gIC0xDQorZHFjb3Q4NzcgY29tcGFyZXRvdGFsICAtc05hTiAgMCAgICAgLT4gIC0xDQorZHFjb3Q4NzggY29tcGFyZXRvdGFsICAtc05hTiAgMSAgICAgLT4gIC0xDQorZHFjb3Q4NzkgY29tcGFyZXRvdGFsICAtc05hTiAgMTAwMCAgLT4gIC0xDQorZHFjb3Q4ODAgY29tcGFyZXRvdGFsICAtc05hTiAgTmFOICAgLT4gIC0xDQorZHFjb3Q4ODEgY29tcGFyZXRvdGFsICAtc05hTiBzTmFOICAgLT4gIC0xDQorDQorZHFjb3Q4ODIgY29tcGFyZXRvdGFsIC1zTmFOIC1zTmFOICAgLT4gIDANCitkcWNvdDg4MyBjb21wYXJldG90YWwgLU5hTiAgLXNOYU4gICAtPiAgLTENCitkcWNvdDg4NCBjb21wYXJldG90YWwgLUluZiAgLXNOYU4gICAtPiAgMQ0KK2RxY290ODg1IGNvbXBhcmV0b3RhbCAtMTAwMCAtc05hTiAgIC0+ICAxDQorZHFjb3Q4ODYgY29tcGFyZXRvdGFsIC0xICAgIC1zTmFOICAgLT4gIDENCitkcWNvdDg4NyBjb21wYXJldG90YWwgLTAgICAgLXNOYU4gICAtPiAgMQ0KK2RxY290ODg4IGNvbXBhcmV0b3RhbCAgMCAgICAtc05hTiAgIC0+ICAxDQorZHFjb3Q4ODkgY29tcGFyZXRvdGFsICAxICAgIC1zTmFOICAgLT4gIDENCitkcWNvdDg5MCBjb21wYXJldG90YWwgIDEwMDAgLXNOYU4gICAtPiAgMQ0KK2RxY290ODkxIGNvbXBhcmV0b3RhbCAgSW5mICAtc05hTiAgIC0+ICAxDQorZHFjb3Q4OTIgY29tcGFyZXRvdGFsICBOYU4gIC1zTmFOICAgLT4gIDENCitkcWNvdDg5MyBjb21wYXJldG90YWwgIHNOYU4gLXNOYU4gICAtPiAgMQ0KKw0KKy0tIE5hTnMgd2l0aCBwYXlsb2FkDQorZHFjb3Q5NjAgY29tcGFyZXRvdGFsICBOYU45IC1JbmYgICAtPiAgMQ0KK2RxY290OTYxIGNvbXBhcmV0b3RhbCAgTmFOOCAgOTk5ICAgLT4gIDENCitkcWNvdDk2MiBjb21wYXJldG90YWwgIE5hTjc3IEluZiAgIC0+ICAxDQorZHFjb3Q5NjMgY29tcGFyZXRvdGFsIC1OYU42NyBOYU41ICAtPiAgLTENCitkcWNvdDk2NCBjb21wYXJldG90YWwgLUluZiAgLU5hTjQgIC0+ICAxDQorZHFjb3Q5NjUgY29tcGFyZXRvdGFsIC05OTkgIC1OYU4zMyAtPiAgMQ0KK2RxY290OTY2IGNvbXBhcmV0b3RhbCAgSW5mICAgTmFOMiAgLT4gIC0xDQorDQorZHFjb3Q5NzAgY29tcGFyZXRvdGFsIC1OYU40MSAtTmFONDIgLT4gMQ0KK2RxY290OTcxIGNvbXBhcmV0b3RhbCArTmFONDEgLU5hTjQyIC0+IDENCitkcWNvdDk3MiBjb21wYXJldG90YWwgLU5hTjQxICtOYU40MiAtPiAtMQ0KK2RxY290OTczIGNvbXBhcmV0b3RhbCArTmFONDEgK05hTjQyIC0+IC0xDQorZHFjb3Q5NzQgY29tcGFyZXRvdGFsIC1OYU40MiAtTmFOMDEgLT4gLTENCitkcWNvdDk3NSBjb21wYXJldG90YWwgK05hTjQyIC1OYU4wMSAtPiAgMQ0KK2RxY290OTc2IGNvbXBhcmV0b3RhbCAtTmFONDIgK05hTjAxIC0+IC0xDQorZHFjb3Q5NzcgY29tcGFyZXRvdGFsICtOYU40MiArTmFOMDEgLT4gIDENCisNCitkcWNvdDk4MCBjb21wYXJldG90YWwgLXNOYU43NzEgLXNOYU43NzIgLT4gMQ0KK2RxY290OTgxIGNvbXBhcmV0b3RhbCArc05hTjc3MSAtc05hTjc3MiAtPiAxDQorZHFjb3Q5ODIgY29tcGFyZXRvdGFsIC1zTmFONzcxICtzTmFONzcyIC0+IC0xDQorZHFjb3Q5ODMgY29tcGFyZXRvdGFsICtzTmFONzcxICtzTmFONzcyIC0+IC0xDQorZHFjb3Q5ODQgY29tcGFyZXRvdGFsIC1zTmFONzcyIC1zTmFONzcxIC0+IC0xDQorZHFjb3Q5ODUgY29tcGFyZXRvdGFsICtzTmFONzcyIC1zTmFONzcxIC0+ICAxDQorZHFjb3Q5ODYgY29tcGFyZXRvdGFsIC1zTmFONzcyICtzTmFONzcxIC0+IC0xDQorZHFjb3Q5ODcgY29tcGFyZXRvdGFsICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQorDQorZHFjb3Q5OTEgY29tcGFyZXRvdGFsIC1zTmFOOTkgLUluZiAgICAtPiAtMQ0KK2RxY290OTkyIGNvbXBhcmV0b3RhbCAgc05hTjk4IC0xMSAgICAgLT4gIDENCitkcWNvdDk5MyBjb21wYXJldG90YWwgIHNOYU45NyAgTmFOICAgIC0+IC0xDQorZHFjb3Q5OTQgY29tcGFyZXRvdGFsICBzTmFOMTYgc05hTjk0ICAtPiAtMQ0KK2RxY290OTk1IGNvbXBhcmV0b3RhbCAgTmFOODUgIHNOYU44MyAgLT4gIDENCitkcWNvdDk5NiBjb21wYXJldG90YWwgLUluZiAgICBzTmFOOTIgIC0+IC0xDQorZHFjb3Q5OTcgY29tcGFyZXRvdGFsICAwODggICAgc05hTjgxICAtPiAtMQ0KK2RxY290OTk4IGNvbXBhcmV0b3RhbCAgSW5mICAgIHNOYU45MCAgLT4gLTENCitkcWNvdDk5OSBjb21wYXJldG90YWwgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQorDQorLS0gc3ByZWFkIHplcm9zDQorZHFjb3QxMTEwIGNvbXBhcmV0b3RhbCAgIDBFLTYxNDMgIDAgICAgICAgLT4gLTENCitkcWNvdDExMTEgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMCAgICAgICAtPiAgMQ0KK2RxY290MTExMiBjb21wYXJldG90YWwgIC0wRS02MTQzICAwICAgICAgIC0+IC0xDQorZHFjb3QxMTEzIGNvbXBhcmV0b3RhbCAgLTBFLTYxNDMgLTAgICAgICAgLT4gIDENCitkcWNvdDExMTQgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTENCitkcWNvdDExMTUgY29tcGFyZXRvdGFsICAgMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDENCitkcWNvdDExMTYgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAgMEUrNjE0NCAgLT4gLTENCitkcWNvdDExMTcgY29tcGFyZXRvdGFsICAtMEUtNjE0MyAtMEUrNjE0NCAgLT4gIDENCitkcWNvdDExMTggY29tcGFyZXRvdGFsICAgMCAgICAgICAwRSs2MTQ0ICAtPiAtMQ0KK2RxY290MTExOSBjb21wYXJldG90YWwgICAwICAgICAgLTBFKzYxNDQgIC0+ICAxDQorZHFjb3QxMTIwIGNvbXBhcmV0b3RhbCAgLTAgICAgICAgMEUrNjE0NCAgLT4gLTENCitkcWNvdDExMjEgY29tcGFyZXRvdGFsICAtMCAgICAgIC0wRSs2MTQ0ICAtPiAgMQ0KKw0KK2RxY290MTEzMCBjb21wYXJldG90YWwgICAwRSs2MTQ0ICAwICAgICAgIC0+ICAxDQorZHFjb3QxMTMxIGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTAgICAgICAgLT4gIDENCitkcWNvdDExMzIgY29tcGFyZXRvdGFsICAtMEUrNjE0NCAgMCAgICAgICAtPiAtMQ0KK2RxY290MTEzMyBjb21wYXJldG90YWwgIC0wRSs2MTQ0IC0wICAgICAgIC0+IC0xDQorZHFjb3QxMTM0IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgIDBFLTYxNDMgIC0+ICAxDQorZHFjb3QxMTM1IGNvbXBhcmV0b3RhbCAgIDBFKzYxNDQgLTBFLTYxNDMgIC0+ICAxDQorZHFjb3QxMTM2IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgIDBFLTYxNDMgIC0+IC0xDQorZHFjb3QxMTM3IGNvbXBhcmV0b3RhbCAgLTBFKzYxNDQgLTBFLTYxNDMgIC0+IC0xDQorZHFjb3QxMTM4IGNvbXBhcmV0b3RhbCAgIDAgICAgICAgMEUtNjE0MyAgLT4gIDENCitkcWNvdDExMzkgY29tcGFyZXRvdGFsICAgMCAgICAgIC0wRS02MTQzICAtPiAgMQ0KK2RxY290MTE0MCBjb21wYXJldG90YWwgIC0wICAgICAgIDBFLTYxNDMgIC0+IC0xDQorZHFjb3QxMTQxIGNvbXBhcmV0b3RhbCAgLTAgICAgICAtMEUtNjE0MyAgLT4gLTENCisNCistLSBOdWxsIHRlc3RzDQorZHFjb3Q5OTkwIGNvbXBhcmV0b3RhbCAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWNvdDk5OTEgY29tcGFyZXRvdGFsICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKaW5kZXggMGI4MWJmYi4uNDhiM2UwOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QKQEAgLTEsNzA2ICsxLDcwNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUNvbXBhcmVUb3RhbE1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgY29tcGFyaXNvbjsgYWJzLiB0b3RhbCBvcmRlciAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIE5vdGUgdGhhdCB3ZSBjYW5ub3QgYXNzdW1lIGFkZC9zdWJ0cmFjdCB0ZXN0cyBjb3ZlciBwYXRocyBhZGVxdWF0ZWx5LAotLS0gaGVyZSwgYmVjYXVzZSB0aGUgY29kZSBtaWdodCBiZSBxdWl0ZSBkaWZmZXJlbnQgKGNvbXBhcmlzb24gY2Fubm90Ci0tLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLgotLS0gU2ltaWxhcmx5LCBjb21wYXJldG90YWwgd2lsbCBoYXZlIHNvbWUgcmFkaWNhbGx5IGRpZmZlcmVudCBwYXRocwotLS0gdGhhbiBjb21wYXJlLgotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFjdG0wMDEgY29tcGFyZXRvdG1hZyAgLTIgIC0yICAgLT4gICAwCi1kcWN0bTAwMiBjb21wYXJldG90bWFnICAtMiAgLTEgICAtPiAgIDEKLWRxY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQotZHFjdG0wMDQgY29tcGFyZXRvdG1hZyAgLTIgICAxICAgLT4gICAxCi1kcWN0bTAwNSBjb21wYXJldG90bWFnICAtMiAgIDIgICAtPiAgIDAKLWRxY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQotZHFjdG0wMDcgY29tcGFyZXRvdG1hZyAgLTEgIC0xICAgLT4gICAwCi1kcWN0bTAwOCBjb21wYXJldG90bWFnICAtMSAgIDAgICAtPiAgIDEKLWRxY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMAotZHFjdG0wMTAgY29tcGFyZXRvdG1hZyAgLTEgICAyICAgLT4gIC0xCi1kcWN0bTAxMSBjb21wYXJldG90bWFnICAgMCAgLTIgICAtPiAgLTEKLWRxY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQotZHFjdG0wMTMgY29tcGFyZXRvdG1hZyAgIDAgICAwICAgLT4gICAwCi1kcWN0bTAxNCBjb21wYXJldG90bWFnICAgMCAgIDEgICAtPiAgLTEKLWRxY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQotZHFjdG0wMTYgY29tcGFyZXRvdG1hZyAgIDEgIC0yICAgLT4gIC0xCi1kcWN0bTAxNyBjb21wYXJldG90bWFnICAgMSAgLTEgICAtPiAgIDAKLWRxY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQotZHFjdG0wMTkgY29tcGFyZXRvdG1hZyAgIDEgICAxICAgLT4gICAwCi1kcWN0bTAyMCBjb21wYXJldG90bWFnICAgMSAgIDIgICAtPiAgLTEKLWRxY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMAotZHFjdG0wMjIgY29tcGFyZXRvdG1hZyAgIDIgIC0xICAgLT4gICAxCi1kcWN0bTAyMyBjb21wYXJldG90bWFnICAgMiAgIDAgICAtPiAgIDEKLWRxY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQotZHFjdG0wMjYgY29tcGFyZXRvdG1hZyAgIDIgICAyICAgLT4gICAwCi0KLWRxY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwCi1kcWN0bTAzMiBjb21wYXJldG90bWFnICAtMjAgIC0xMCAgIC0+ICAgMQotZHFjdG0wMzMgY29tcGFyZXRvdG1hZyAgLTIwICAgMDAgICAtPiAgIDEKLWRxY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxCi1kcWN0bTAzNSBjb21wYXJldG90bWFnICAtMjAgICAyMCAgIC0+ICAgMAotZHFjdG0wMzYgY29tcGFyZXRvdG1hZyAgLTEwICAtMjAgICAtPiAgLTEKLWRxY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwCi1kcWN0bTAzOCBjb21wYXJldG90bWFnICAtMTAgICAwMCAgIC0+ICAgMQotZHFjdG0wMzkgY29tcGFyZXRvdG1hZyAgLTEwICAgMTAgICAtPiAgIDAKLWRxY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xCi1kcWN0bTA0MSBjb21wYXJldG90bWFnICAgMDAgIC0yMCAgIC0+ICAtMQotZHFjdG0wNDIgY29tcGFyZXRvdG1hZyAgIDAwICAtMTAgICAtPiAgLTEKLWRxY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwCi1kcWN0bTA0NCBjb21wYXJldG90bWFnICAgMDAgICAxMCAgIC0+ICAtMQotZHFjdG0wNDUgY29tcGFyZXRvdG1hZyAgIDAwICAgMjAgICAtPiAgLTEKLWRxY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xCi1kcWN0bTA0NyBjb21wYXJldG90bWFnICAgMTAgIC0xMCAgIC0+ICAgMAotZHFjdG0wNDggY29tcGFyZXRvdG1hZyAgIDEwICAgMDAgICAtPiAgIDEKLWRxY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwCi1kcWN0bTA1MCBjb21wYXJldG90bWFnICAgMTAgICAyMCAgIC0+ICAtMQotZHFjdG0wNTEgY29tcGFyZXRvdG1hZyAgIDIwICAtMjAgICAtPiAgIDAKLWRxY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxCi1kcWN0bTA1MyBjb21wYXJldG90bWFnICAgMjAgICAwMCAgIC0+ICAgMQotZHFjdG0wNTUgY29tcGFyZXRvdG1hZyAgIDIwICAgMTAgICAtPiAgIDEKLWRxY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwCi0KLWRxY3RtMDYxIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0yLjAgICAtPiAgIDAKLWRxY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDEKLWRxY3RtMDYzIGNvbXBhcmV0b3RtYWcgIC0yLjAgICAwLjAgICAtPiAgIDEKLWRxY3RtMDY0IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAxLjAgICAtPiAgIDEKLWRxY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDAKLWRxY3RtMDY2IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0yLjAgICAtPiAgLTEKLWRxY3RtMDY3IGNvbXBhcmV0b3RtYWcgIC0xLjAgIC0xLjAgICAtPiAgIDAKLWRxY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDEKLWRxY3RtMDY5IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAxLjAgICAtPiAgIDAKLWRxY3RtMDcwIGNvbXBhcmV0b3RtYWcgIC0xLjAgICAyLjAgICAtPiAgLTEKLWRxY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTEKLWRxY3RtMDcyIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0xLjAgICAtPiAgLTEKLWRxY3RtMDczIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgICAtPiAgIDAKLWRxY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTEKLWRxY3RtMDc1IGNvbXBhcmV0b3RtYWcgICAwLjAgICAyLjAgICAtPiAgLTEKLWRxY3RtMDc2IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0yLjAgICAtPiAgLTEKLWRxY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDAKLWRxY3RtMDc4IGNvbXBhcmV0b3RtYWcgICAxLjAgICAwLjAgICAtPiAgIDEKLWRxY3RtMDc5IGNvbXBhcmV0b3RtYWcgICAxLjAgICAxLjAgICAtPiAgIDAKLWRxY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTEKLWRxY3RtMDgxIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0yLjAgICAtPiAgIDAKLWRxY3RtMDgyIGNvbXBhcmV0b3RtYWcgICAyLjAgIC0xLjAgICAtPiAgIDEKLWRxY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDEKLWRxY3RtMDg1IGNvbXBhcmV0b3RtYWcgICAyLjAgICAxLjAgICAtPiAgIDEKLWRxY3RtMDg2IGNvbXBhcmV0b3RtYWcgICAyLjAgICAyLjAgICAtPiAgIDAKLQotLS0gbm93IHNvbWUgY2FzZXMgd2hpY2ggbWlnaHQgb3ZlcmZsb3cgaWYgc3VidHJhY3Qgd2VyZSB1c2VkCi1kcWN0bTA5MCBjb21wYXJldG90bWFnICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgIDAKLWRxY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMAotZHFjdG0wOTIgY29tcGFyZXRvdG1hZyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gICAwCi1kcWN0bTA5MyBjb21wYXJldG90bWFnIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgIDAKLQotLS0gc29tZSBkaWZmZXJpbmcgbGVuZ3RoL2V4cG9uZW50IGNhc2VzCi0tLSBpbiB0aGlzIGZpcnN0IGdyb3VwLCBjb21wYXJlIHdvdWxkIGNvbXBhcmUgYWxsIGVxdWFsCi1kcWN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwCi1kcWN0bTEwMSBjb21wYXJldG90bWFnICAgNy4wICAgIDcgICAgICAgLT4gIC0xCi1kcWN0bTEwMiBjb21wYXJldG90bWFnICAgNyAgICAgIDcuMCAgICAgLT4gICAxCi1kcWN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxCi1kcWN0bTEwNCBjb21wYXJldG90bWFnICAgNzBFLTEgIDcuMCAgICAgLT4gICAwCi1kcWN0bTEwNSBjb21wYXJldG90bWFnICAgMC43RSsxIDcgICAgICAgLT4gICAwCi1kcWN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xCi1kcWN0bTEwNyBjb21wYXJldG90bWFnICAgNy4wICAgIDdFKzAgICAgLT4gIC0xCi1kcWN0bTEwOCBjb21wYXJldG90bWFnICAgNy4wICAgIDcwRS0xICAgLT4gICAwCi1kcWN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwCi1kcWN0bTExMCBjb21wYXJldG90bWFnICAgNyAgICAgIDcwRS0xICAgLT4gICAxCi0KLWRxY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDEKLWRxY3RtMTIxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNyAgICAgICAtPiAgIDEKLWRxY3RtMTIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgNy4wICAgICAtPiAgIDEKLWRxY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDEKLWRxY3RtMTI0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNy4wICAgICAtPiAgIDEKLWRxY3RtMTI1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgNyAgICAgICAtPiAgIDEKLWRxY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDEKLWRxY3RtMTI3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgN0UrMCAgICAtPiAgIDEKLWRxY3RtMTI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNzBFLTEgICAtPiAgIDEKLWRxY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxCi1kcWN0bTEzMCBjb21wYXJldG90bWFnICAgOCAgICAgIDcwRS0xICAgLT4gICAxCi0KLWRxY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMTQxIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOSAgICAgICAtPiAgLTEKLWRxY3RtMTQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMTQ0IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOS4wICAgICAtPiAgLTEKLWRxY3RtMTQ1IGNvbXBhcmV0b3RtYWcgICAwLjhFKzEgOSAgICAgICAtPiAgLTEKLWRxY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTEKLWRxY3RtMTQ3IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOUUrMCAgICAtPiAgLTEKLWRxY3RtMTQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOTBFLTEgICAtPiAgLTEKLWRxY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTEKLWRxY3RtMTUwIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgOTBFLTEgICAtPiAgLTEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLgotZHFjdG0yMDAgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3LjAgICAgIC0+ICAgMAotZHFjdG0yMDEgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3ICAgICAgIC0+ICAtMQotZHFjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQotZHFjdG0yMDMgY29tcGFyZXRvdG1hZyAgLTdFKzAgICA3LjAgICAgIC0+ICAgMQotZHFjdG0yMDQgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3LjAgICAgIC0+ICAgMAotZHFjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMAotZHFjdG0yMDYgY29tcGFyZXRvdG1hZyAgLTcwRS0xICA3ICAgICAgIC0+ICAtMQotZHFjdG0yMDcgY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3RSswICAgIC0+ICAtMQotZHFjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMAotZHFjdG0yMDkgY29tcGFyZXRvdG1hZyAgLTcgICAgICAwLjdFKzEgIC0+ICAgMAotZHFjdG0yMTAgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3MEUtMSAgIC0+ICAgMQotCi1kcWN0bTIyMCBjb21wYXJldG90bWFnICAtOC4wICAgIDcuMCAgICAgLT4gICAxCi1kcWN0bTIyMSBjb21wYXJldG90bWFnICAtOC4wICAgIDcgICAgICAgLT4gICAxCi1kcWN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxCi1kcWN0bTIyMyBjb21wYXJldG90bWFnICAtOEUrMCAgIDcuMCAgICAgLT4gICAxCi1kcWN0bTIyNCBjb21wYXJldG90bWFnICAtODBFLTEgIDcuMCAgICAgLT4gICAxCi1kcWN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxCi1kcWN0bTIyNiBjb21wYXJldG90bWFnICAtODBFLTEgIDcgICAgICAgLT4gICAxCi1kcWN0bTIyNyBjb21wYXJldG90bWFnICAtOC4wICAgIDdFKzAgICAgLT4gICAxCi1kcWN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxCi1kcWN0bTIyOSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuN0UrMSAgLT4gICAxCi1kcWN0bTIzMCBjb21wYXJldG90bWFnICAtOCAgICAgIDcwRS0xICAgLT4gICAxCi0KLWRxY3RtMjQwIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMjQxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOSAgICAgICAtPiAgLTEKLWRxY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMjQzIGNvbXBhcmV0b3RtYWcgIC04RSswICAgOS4wICAgICAtPiAgLTEKLWRxY3RtMjQ0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOS4wICAgICAtPiAgLTEKLWRxY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTEKLWRxY3RtMjQ2IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgOSAgICAgICAtPiAgLTEKLWRxY3RtMjQ3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOUUrMCAgICAtPiAgLTEKLWRxY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTEKLWRxY3RtMjQ5IGNvbXBhcmV0b3RtYWcgIC04ICAgICAgMC45RSsxICAtPiAgLTEKLWRxY3RtMjUwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOTBFLTEgICAtPiAgLTEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyArLSAuLgotZHFjdG0zMDAgY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNy4wICAgICAtPiAgIDAKLWRxY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xCi1kcWN0bTMwMiBjb21wYXJldG90bWFnICAgNyAgICAgIC03LjAgICAgIC0+ICAgMQotZHFjdG0zMDMgY29tcGFyZXRvdG1hZyAgIDdFKzAgICAtNy4wICAgICAtPiAgIDEKLWRxY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwCi1kcWN0bTMwNSBjb21wYXJldG90bWFnICAgLjdFKzEgIC03ICAgICAgIC0+ICAgMAotZHFjdG0zMDYgY29tcGFyZXRvdG1hZyAgIDcwRS0xICAtNyAgICAgICAtPiAgLTEKLWRxY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xCi1kcWN0bTMwOCBjb21wYXJldG90bWFnICAgNy4wICAgIC03MEUtMSAgIC0+ICAgMAotZHFjdG0zMDkgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtLjdFKzEgICAtPiAgIDAKLWRxY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxCi0KLWRxY3RtMzIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcuMCAgICAgLT4gICAxCi1kcWN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQotZHFjdG0zMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICAtNy4wICAgICAtPiAgIDEKLWRxY3RtMzIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTcuMCAgICAgLT4gICAxCi1kcWN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQotZHFjdG0zMjUgY29tcGFyZXRvdG1hZyAgIC44RSsxICAtNyAgICAgICAtPiAgIDEKLWRxY3RtMzI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTcgICAgICAgLT4gICAxCi1kcWN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQotZHFjdG0zMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNzBFLTEgICAtPiAgIDEKLWRxY3RtMzI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS43RSsxICAgLT4gICAxCi1kcWN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQotCi1kcWN0bTM0MCBjb21wYXJldG90bWFnICAgOC4wICAgIC05LjAgICAgIC0+ICAtMQotZHFjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTEKLWRxY3RtMzQyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTkuMCAgICAgLT4gIC0xCi1kcWN0bTM0MyBjb21wYXJldG90bWFnICAgOEUrMCAgIC05LjAgICAgIC0+ICAtMQotZHFjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTEKLWRxY3RtMzQ1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTkgICAgICAgLT4gIC0xCi1kcWN0bTM0NiBjb21wYXJldG90bWFnICAgODBFLTEgIC05ICAgICAgIC0+ICAtMQotZHFjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTEKLWRxY3RtMzQ4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkwRS0xICAgLT4gIC0xCi1kcWN0bTM0OSBjb21wYXJldG90bWFnICAgOCAgICAgIC0uOUUrMSAgIC0+ICAtMQotZHFjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTEKLQotLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtLSAuLgotZHFjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwCi1kcWN0bTQwMSBjb21wYXJldG90bWFnICAgLTcuMCAgICAtNyAgICAgICAtPiAgLTEKLWRxY3RtNDAyIGNvbXBhcmV0b3RtYWcgICAtNyAgICAgIC03LjAgICAgIC0+ICAgMQotZHFjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxCi1kcWN0bTQwNCBjb21wYXJldG90bWFnICAgLTcwRS0xICAtNy4wICAgICAtPiAgIDAKLWRxY3RtNDA1IGNvbXBhcmV0b3RtYWcgICAtLjdFKzEgIC03ICAgICAgIC0+ICAgMAotZHFjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xCi1kcWN0bTQwNyBjb21wYXJldG90bWFnICAgLTcuMCAgICAtN0UrMCAgICAtPiAgLTEKLWRxY3RtNDA4IGNvbXBhcmV0b3RtYWcgICAtNy4wICAgIC03MEUtMSAgIC0+ICAgMAotZHFjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwCi1kcWN0bTQxMCBjb21wYXJldG90bWFnICAgLTcgICAgICAtNzBFLTEgICAtPiAgIDEKLQotZHFjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxCi1kcWN0bTQyMSBjb21wYXJldG90bWFnICAgLTguMCAgICAtNyAgICAgICAtPiAgIDEKLWRxY3RtNDIyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC03LjAgICAgIC0+ICAgMQotZHFjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxCi1kcWN0bTQyNCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtNy4wICAgICAtPiAgIDEKLWRxY3RtNDI1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC03ICAgICAgIC0+ICAgMQotZHFjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxCi1kcWN0bTQyNyBjb21wYXJldG90bWFnICAgLTguMCAgICAtN0UrMCAgICAtPiAgIDEKLWRxY3RtNDI4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC03MEUtMSAgIC0+ICAgMQotZHFjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxCi1kcWN0bTQzMCBjb21wYXJldG90bWFnICAgLTggICAgICAtNzBFLTEgICAtPiAgIDEKLQotZHFjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xCi1kcWN0bTQ0MSBjb21wYXJldG90bWFnICAgLTguMCAgICAtOSAgICAgICAtPiAgLTEKLWRxY3RtNDQyIGNvbXBhcmV0b3RtYWcgICAtOCAgICAgIC05LjAgICAgIC0+ICAtMQotZHFjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xCi1kcWN0bTQ0NCBjb21wYXJldG90bWFnICAgLTgwRS0xICAtOS4wICAgICAtPiAgLTEKLWRxY3RtNDQ1IGNvbXBhcmV0b3RtYWcgICAtLjhFKzEgIC05ICAgICAgIC0+ICAtMQotZHFjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xCi1kcWN0bTQ0NyBjb21wYXJldG90bWFnICAgLTguMCAgICAtOUUrMCAgICAtPiAgLTEKLWRxY3RtNDQ4IGNvbXBhcmV0b3RtYWcgICAtOC4wICAgIC05MEUtMSAgIC0+ICAtMQotZHFjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xCi1kcWN0bTQ1MCBjb21wYXJldG90bWFnICAgLTggICAgICAtOTBFLTEgICAtPiAgLTEKLQotCi0tLSB0ZXN0Y2FzZXMgdGhhdCBzdWJ0cmFjdCB0byBsb3RzIG9mIHplcm9zIGF0IGJvdW5kYXJpZXMgW3Bncl0KLWRxY3RtNDczIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWRxY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQotZHFjdG00NzUgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWRxY3RtNDc2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKLWRxY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQotZHFjdG00NzggY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKLWRxY3RtNDc5IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWRxY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQotZHFjdG00ODEgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDBFLTg5IDEyMy40NTZFLTg5ICAtPiAgLTEKLWRxY3RtNDgyIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjBFKzg5IDEyMy40NTZFKzg5ICAtPiAgLTEKLWRxY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMAotZHFjdG00ODcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwMDAwMEUrODkgIC0+ICAgMQotZHFjdG00ODggY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMDAwRS04OSAgLT4gICAxCi1kcWN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQotZHFjdG00OTAgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwMDAwMEUtODkgIC0+ICAgMQotZHFjdG00OTEgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMDAwRSs4OSAgLT4gICAxCi1kcWN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQotZHFjdG00OTMgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2MDAwMEUrODkgIC0+ICAgMQotZHFjdG00OTQgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MDAwRS04OSAgLT4gICAxCi1kcWN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQotZHFjdG00OTYgY29tcGFyZXRvdG1hZyAxMjMuNDU2RS04OSAxMjMuNDU2MEUtODkgIC0+ICAgMQotZHFjdG00OTcgY29tcGFyZXRvdG1hZyAxMjMuNDU2RSs4OSAxMjMuNDU2RSs4OSAgLT4gICAwCi0KLS0tIHdpZGUtcmFuZ2luZywgYXJvdW5kIHByZWNpc2lvbjsgc2lnbnMgZXF1YWwKLWRxY3RtNDk4IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTcgICAgIC0+ICAgMQotZHFjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxCi1kcWN0bTUwMCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTE1ICAgICAtPiAgIDEKLWRxY3RtNTAxIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTQgICAgIC0+ICAgMQotZHFjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxCi1kcWN0bTUwMyBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTEyICAgICAtPiAgIDEKLWRxY3RtNTA0IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMTEgICAgIC0+ICAgMQotZHFjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxCi1kcWN0bTUwNiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTkgICAgICAtPiAgIDEKLWRxY3RtNTA3IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtOCAgICAgIC0+ICAgMQotZHFjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxCi1kcWN0bTUwOSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTYgICAgICAtPiAgIDEKLWRxY3RtNTEwIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtNSAgICAgIC0+ICAgMQotZHFjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxCi1kcWN0bTUxMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTMgICAgICAtPiAgIDEKLWRxY3RtNTEzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUtMiAgICAgIC0+ICAgMQotZHFjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxCi1kcWN0bTUxNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFLTAgICAgICAtPiAgIDAKLWRxY3RtNTE2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMSAgICAgIC0+ICAtMQotZHFjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xCi1kcWN0bTUxOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzMgICAgICAtPiAgLTEKLWRxY3RtNTE5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNCAgICAgIC0+ICAtMQotZHFjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xCi1kcWN0bTUyMiBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzYgICAgICAtPiAgLTEKLWRxY3RtNTIzIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrNyAgICAgIC0+ICAtMQotZHFjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xCi1kcWN0bTUyNSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzkgICAgICAtPiAgLTEKLWRxY3RtNTI2IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTAgICAgIC0+ICAtMQotZHFjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xCi1kcWN0bTUyOCBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzEyICAgICAtPiAgLTEKLWRxY3RtNTI5IGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTMgICAgIC0+ICAtMQotZHFjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xCi1kcWN0bTUzMSBjb21wYXJldG90bWFnICAgIDEgICAgIDFFKzE1ICAgICAtPiAgLTEKLWRxY3RtNTMyIGNvbXBhcmV0b3RtYWcgICAgMSAgICAgMUUrMTYgICAgIC0+ICAtMQotZHFjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xCi0tLSBMUiBzd2FwCi1kcWN0bTUzOCBjb21wYXJldG90bWFnICAgIDFFLTE3ICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NDAgY29tcGFyZXRvdG1hZyAgICAxRS0xNSAgMSAgICAgICAgLT4gIC0xCi1kcWN0bTU0MSBjb21wYXJldG90bWFnICAgIDFFLTE0ICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NDMgY29tcGFyZXRvdG1hZyAgICAxRS0xMiAgMSAgICAgICAgLT4gIC0xCi1kcWN0bTU0NCBjb21wYXJldG90bWFnICAgIDFFLTExICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NDYgY29tcGFyZXRvdG1hZyAgICAxRS05ICAgMSAgICAgICAgLT4gIC0xCi1kcWN0bTU0NyBjb21wYXJldG90bWFnICAgIDFFLTggICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NDkgY29tcGFyZXRvdG1hZyAgICAxRS02ICAgMSAgICAgICAgLT4gIC0xCi1kcWN0bTU1MCBjb21wYXJldG90bWFnICAgIDFFLTUgICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NTIgY29tcGFyZXRvdG1hZyAgICAxRS0zICAgMSAgICAgICAgLT4gIC0xCi1kcWN0bTU1MyBjb21wYXJldG90bWFnICAgIDFFLTIgICAxICAgICAgICAtPiAgLTEKLWRxY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQotZHFjdG01NTUgY29tcGFyZXRvdG1hZyAgICAxRS0wICAgMSAgICAgICAgLT4gICAwCi1kcWN0bTU1NiBjb21wYXJldG90bWFnICAgIDFFKzEgICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQotZHFjdG01NTggY29tcGFyZXRvdG1hZyAgICAxRSszICAgMSAgICAgICAgLT4gICAxCi1kcWN0bTU1OSBjb21wYXJldG90bWFnICAgIDFFKzQgICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQotZHFjdG01NjIgY29tcGFyZXRvdG1hZyAgICAxRSs2ICAgMSAgICAgICAgLT4gICAxCi1kcWN0bTU2MyBjb21wYXJldG90bWFnICAgIDFFKzcgICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQotZHFjdG01NjUgY29tcGFyZXRvdG1hZyAgICAxRSs5ICAgMSAgICAgICAgLT4gICAxCi1kcWN0bTU2NiBjb21wYXJldG90bWFnICAgIDFFKzEwICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQotZHFjdG01NjggY29tcGFyZXRvdG1hZyAgICAxRSsxMiAgMSAgICAgICAgLT4gICAxCi1kcWN0bTU2OSBjb21wYXJldG90bWFnICAgIDFFKzEzICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQotZHFjdG01NzEgY29tcGFyZXRvdG1hZyAgICAxRSsxNSAgMSAgICAgICAgLT4gICAxCi1kcWN0bTU3MiBjb21wYXJldG90bWFnICAgIDFFKzE2ICAxICAgICAgICAtPiAgIDEKLWRxY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQotLS0gc2ltaWxhciB3aXRoIGEgdXNlZnVsIGNvZWZmaWNpZW50LCBvbmUgc2lkZSBvbmx5Ci1kcWN0bTU3OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTcgICAgIC0+ICAgMQotZHFjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDEKLWRxY3RtNTgwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNSAgICAgLT4gICAxCi1kcWN0bTU4MSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTQgICAgIC0+ICAgMQotZHFjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDEKLWRxY3RtNTgzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMiAgICAgLT4gICAxCi1kcWN0bTU4NCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTEgICAgIC0+ICAgMQotZHFjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDEKLWRxY3RtNTg2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS05ICAgICAgLT4gICAxCi1kcWN0bTU4NyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOCAgICAgIC0+ICAgMQotZHFjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDEKLWRxY3RtNTg5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS02ICAgICAgLT4gIC0xCi1kcWN0bTU5MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNSAgICAgIC0+ICAtMQotZHFjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTEKLWRxY3RtNTkyIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0zICAgICAgLT4gIC0xCi1kcWN0bTU5MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMiAgICAgIC0+ICAtMQotZHFjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTEKLWRxY3RtNTk1IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0wICAgICAgLT4gIC0xCi1kcWN0bTU5NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMSAgICAgIC0+ICAtMQotZHFjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTEKLWRxY3RtNTk4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSszICAgICAgLT4gIC0xCi1kcWN0bTU5OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrNCAgICAgIC0+ICAtMQotCi0tLSBjaGVjayBzb21lIHVuaXQteSB0cmFwcwotZHFjdG02MDAgY29tcGFyZXRvdG1hZyAgIDEyICAgICAgICAgICAgMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjAyIGNvbXBhcmV0b3RtYWcgICAxMi4wMCAgICAgICAgIDEyLjIzNDUgIC0+ICAtMQotZHFjdG02MDMgY29tcGFyZXRvdG1hZyAgIDEyLjAwMCAgICAgICAgMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjA1IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMCAgICAgIDEyLjIzNDUgIC0+ICAtMQotZHFjdG02MDYgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMCAgICAgMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjA4IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMCAgIDEyLjIzNDUgIC0+ICAtMQotZHFjdG02MDkgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAwMCAgMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDEKLWRxY3RtNjExIGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAgICAgICAgICAgIC0+ICAgMQotZHFjdG02MTIgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAgICAgICAgICAgLT4gICAxCi1kcWN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDEKLWRxY3RtNjE0IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAgICAgICAgIC0+ICAgMQotZHFjdG02MTUgY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAgICAgICAgLT4gICAxCi1kcWN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDEKLWRxY3RtNjE3IGNvbXBhcmV0b3RtYWcgICAxMi4xMjM0IDEyLjAwMDAwMDAgICAgIC0+ICAgMQotZHFjdG02MTggY29tcGFyZXRvdG1hZyAgIDEyLjEyMzQgMTIuMDAwMDAwMDAgICAgLT4gICAxCi1kcWN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDEKLWRxY3RtNjIwIGNvbXBhcmV0b3RtYWcgIC0xMiAgICAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQotZHFjdG02MjEgY29tcGFyZXRvdG1hZyAgLTEyLjAgICAgICAgICAtMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjIzIGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAgICAgICAgLTEyLjIzNDUgIC0+ICAtMQotZHFjdG02MjQgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAgICAgICAtMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjI2IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAgICAgLTEyLjIzNDUgIC0+ICAtMQotZHFjdG02MjcgY29tcGFyZXRvdG1hZyAgLTEyLjAwMDAwMDAgICAtMTIuMjM0NSAgLT4gIC0xCi1kcWN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTEKLWRxY3RtNjI5IGNvbXBhcmV0b3RtYWcgIC0xMi4wMDAwMDAwMDAgLTEyLjIzNDUgIC0+ICAtMQotZHFjdG02MzAgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyICAgICAgICAgICAgLT4gICAxCi1kcWN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDEKLWRxY3RtNjMyIGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMCAgICAgICAgIC0+ICAgMQotZHFjdG02MzMgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMCAgICAgICAgLT4gICAxCi1kcWN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDEKLWRxY3RtNjM1IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMCAgICAgIC0+ICAgMQotZHFjdG02MzYgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMCAgICAgLT4gICAxCi1kcWN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDEKLWRxY3RtNjM4IGNvbXBhcmV0b3RtYWcgIC0xMi4xMjM0IC0xMi4wMDAwMDAwMCAgIC0+ICAgMQotZHFjdG02MzkgY29tcGFyZXRvdG1hZyAgLTEyLjEyMzQgLTEyLjAwMDAwMDAwMCAgLT4gICAxCi0KLS0tIGV4dGVuZGVkIHplcm9zCi1kcWN0bTY0MCBjb21wYXJldG90bWFnICAgMCAgICAgMCAgICAtPiAgIDAKLWRxY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMAotZHFjdG02NDIgY29tcGFyZXRvdG1hZyAgIDAgICAgLTAuMCAgLT4gICAxCi1kcWN0bTY0MyBjb21wYXJldG90bWFnICAgMCAgICAgMC4wICAtPiAgIDEKLWRxY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMAotZHFjdG02NDUgY29tcGFyZXRvdG1hZyAgLTAgICAgLTAgICAgLT4gICAwCi1kcWN0bTY0NiBjb21wYXJldG90bWFnICAtMCAgICAtMC4wICAtPiAgIDEKLWRxY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQotZHFjdG02NDggY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAgICAgLT4gIC0xCi1kcWN0bTY0OSBjb21wYXJldG90bWFnICAgMC4wICAtMCAgICAtPiAgLTEKLWRxY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMAotZHFjdG02NTEgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgLT4gICAwCi1kcWN0bTY1MiBjb21wYXJldG90bWFnICAtMC4wICAgMCAgICAtPiAgLTEKLWRxY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQotZHFjdG02NTQgY29tcGFyZXRvdG1hZyAgLTAuMCAgLTAuMCAgLT4gICAwCi1kcWN0bTY1NSBjb21wYXJldG90bWFnICAtMC4wICAgMC4wICAtPiAgIDAKLQotZHFjdG02NTYgY29tcGFyZXRvdG1hZyAgLTBFMSAgIDAuMCAgLT4gICAxCi1kcWN0bTY1NyBjb21wYXJldG90bWFnICAtMEUyICAgMC4wICAtPiAgIDEKLWRxY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQotZHFjdG02NTkgY29tcGFyZXRvdG1hZyAgIDBFMiAgIDAuMCAgLT4gICAxCi1kcWN0bTY2MCBjb21wYXJldG90bWFnICAtMEUxICAgMCAgICAtPiAgIDEKLWRxY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQotZHFjdG02NjIgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDAgICAgLT4gICAxCi1kcWN0bTY2MyBjb21wYXJldG90bWFnICAgMEUyICAgMCAgICAtPiAgIDEKLWRxY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMAotZHFjdG02NjUgY29tcGFyZXRvdG1hZyAgLTBFMiAgLTBFMSAgLT4gICAxCi1kcWN0bTY2NiBjb21wYXJldG90bWFnICAgMEUxICAtMEUxICAtPiAgIDAKLWRxY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQotZHFjdG02NjggY29tcGFyZXRvdG1hZyAgLTBFMSAgLTBFMiAgLT4gIC0xCi1kcWN0bTY2OSBjb21wYXJldG90bWFnICAtMEUyICAtMEUyICAtPiAgIDAKLWRxY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQotZHFjdG02NzEgY29tcGFyZXRvdG1hZyAgIDBFMiAgLTBFMiAgLT4gICAwCi1kcWN0bTY3MiBjb21wYXJldG90bWFnICAtMEUxICAgMEUxICAtPiAgIDAKLWRxY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQotZHFjdG02NzQgY29tcGFyZXRvdG1hZyAgIDBFMSAgIDBFMSAgLT4gICAwCi1kcWN0bTY3NSBjb21wYXJldG90bWFnICAgMEUyICAgMEUxICAtPiAgIDEKLWRxY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQotZHFjdG02NzcgY29tcGFyZXRvdG1hZyAgLTBFMiAgIDBFMiAgLT4gICAwCi1kcWN0bTY3OCBjb21wYXJldG90bWFnICAgMEUxICAgMEUyICAtPiAgLTEKLWRxY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMAotCi0tLSB0cmFpbGluZyB6ZXJvczsgdW5pdC15Ci1kcWN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDAKLWRxY3RtNjgxIGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wICAgICAgICAgIC0+ICAgMQotZHFjdG02ODIgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwICAgICAgICAgLT4gICAxCi1kcWN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDEKLWRxY3RtNjg0IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwICAgICAgIC0+ICAgMQotZHFjdG02ODUgY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwICAgICAgLT4gICAxCi1kcWN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDEKLWRxY3RtNjg3IGNvbXBhcmV0b3RtYWcgICAxMiAgICAxMi4wMDAwMDAwICAgIC0+ICAgMQotZHFjdG02ODggY29tcGFyZXRvdG1hZyAgIDEyICAgIDEyLjAwMDAwMDAwICAgLT4gICAxCi1kcWN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDEKLWRxY3RtNjkwIGNvbXBhcmV0b3RtYWcgICAxMiAgICAgICAgICAgICAgMTIgIC0+ICAgMAotZHFjdG02OTEgY29tcGFyZXRvdG1hZyAgIDEyLjAgICAgICAgICAgICAxMiAgLT4gIC0xCi1kcWN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTEKLWRxY3RtNjkzIGNvbXBhcmV0b3RtYWcgICAxMi4wMDAgICAgICAgICAgMTIgIC0+ICAtMQotZHFjdG02OTQgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAgICAgICAgICAxMiAgLT4gIC0xCi1kcWN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTEKLWRxY3RtNjk2IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAgICAgICAgMTIgIC0+ICAtMQotZHFjdG02OTcgY29tcGFyZXRvdG1hZyAgIDEyLjAwMDAwMDAgICAgICAxMiAgLT4gIC0xCi1kcWN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTEKLWRxY3RtNjk5IGNvbXBhcmV0b3RtYWcgICAxMi4wMDAwMDAwMDAgICAgMTIgIC0+ICAtMQotCi0tLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcwotZHFjdG03MDEgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODAwMCAgMSAgLT4gICAxCi1kcWN0bTcwMiBjb21wYXJldG90bWFnIDEgMTIzNDU2NzgwMDAgICAtPiAgLTEKLWRxY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQotZHFjdG03MDQgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4MDAgICAgLT4gIC0xCi1kcWN0bTcwNSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTAgICAxICAtPiAgIDEKLWRxY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQotZHFjdG03MDcgY29tcGFyZXRvdG1hZyAxMjM0NTY3ODkxICAgMSAgLT4gICAxCi1kcWN0bTcwOCBjb21wYXJldG90bWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAgLTEKLWRxY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQotZHFjdG03MTAgY29tcGFyZXRvdG1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gIC0xCi1kcWN0bTcxMSBjb21wYXJldG90bWFnIDEyMzQ1Njc4OTYgICAxICAtPiAgIDEKLWRxY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQotZHFjdG03MTMgY29tcGFyZXRvdG1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gICAxCi1kcWN0bTcxNCBjb21wYXJldG90bWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAgLTEKLWRxY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQotZHFjdG03MTYgY29tcGFyZXRvdG1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gIC0xCi1kcWN0bTcxNyBjb21wYXJldG90bWFnIC0xMjM0NTY3ODk2ICAxICAtPiAgIDEKLWRxY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQotCi0tLSBvbGQgcmVzaWR1ZSBjYXNlcwotZHFjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxCi1kcWN0bTc0MSBjb21wYXJldG90bWFnICAxICAwLjk5OTk5OSAgICAtPiAgIDEKLWRxY3RtNzQyIGNvbXBhcmV0b3RtYWcgIDEgIDAuOTk5OTkgICAgIC0+ICAgMQotZHFjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxCi1kcWN0bTc0NCBjb21wYXJldG90bWFnICAxICAxLjAwMDAxICAgICAtPiAgLTEKLWRxY3RtNzQ1IGNvbXBhcmV0b3RtYWcgIDEgIDEuMDAwMDAxICAgIC0+ICAtMQotZHFjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xCi1kcWN0bTc1MCBjb21wYXJldG90bWFnICAwLjk5OTk5OTkgIDEgICAtPiAgLTEKLWRxY3RtNzUxIGNvbXBhcmV0b3RtYWcgIDAuOTk5OTk5ICAgMSAgIC0+ICAtMQotZHFjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xCi1kcWN0bTc1MyBjb21wYXJldG90bWFnICAxLjAwMDAgICAgIDEgICAtPiAgLTEKLWRxY3RtNzU0IGNvbXBhcmV0b3RtYWcgIDEuMDAwMDEgICAgMSAgIC0+ICAgMQotZHFjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxCi1kcWN0bTc1NiBjb21wYXJldG90bWFnICAxLjAwMDAwMDEgIDEgICAtPiAgIDEKLQotLS0gU3BlY2lhbHMKLWRxY3RtNzgwIGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCi1kcWN0bTc4MSBjb21wYXJldG90bWFnICBJbmYgIC0xMDAwICAtPiAgMQotZHFjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDEKLWRxY3RtNzgzIGNvbXBhcmV0b3RtYWcgIEluZiAgLTAgICAgIC0+ICAxCi1kcWN0bTc4NCBjb21wYXJldG90bWFnICBJbmYgICAwICAgICAtPiAgMQotZHFjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDEKLWRxY3RtNzg2IGNvbXBhcmV0b3RtYWcgIEluZiAgIDEwMDAgIC0+ICAxCi1kcWN0bTc4NyBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMAotZHFjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTEKLWRxY3RtNzg5IGNvbXBhcmV0b3RtYWcgLUluZiAgIEluZiAgIC0+ICAwCi1kcWN0bTc5MCBjb21wYXJldG90bWFnIC0xICAgICBJbmYgICAtPiAtMQotZHFjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTEKLWRxY3RtNzkyIGNvbXBhcmV0b3RtYWcgIDAgICAgIEluZiAgIC0+IC0xCi1kcWN0bTc5MyBjb21wYXJldG90bWFnICAxICAgICBJbmYgICAtPiAtMQotZHFjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTEKLWRxY3RtNzk1IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwCi0KLWRxY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwCi1kcWN0bTgwMSBjb21wYXJldG90bWFnIC1JbmYgIC0xMDAwICAtPiAgMQotZHFjdG04MDIgY29tcGFyZXRvdG1hZyAtSW5mICAtMSAgICAgLT4gIDEKLWRxY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxCi1kcWN0bTgwNCBjb21wYXJldG90bWFnIC1JbmYgICAwICAgICAtPiAgMQotZHFjdG04MDUgY29tcGFyZXRvdG1hZyAtSW5mICAgMSAgICAgLT4gIDEKLWRxY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxCi1kcWN0bTgwNyBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMAotZHFjdG04MDggY29tcGFyZXRvdG1hZyAtSW5mICAtSW5mICAgLT4gIDAKLWRxY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xCi1kcWN0bTgxMCBjb21wYXJldG90bWFnIC0xICAgIC1JbmYgICAtPiAtMQotZHFjdG04MTEgY29tcGFyZXRvdG1hZyAtMCAgICAtSW5mICAgLT4gLTEKLWRxY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xCi1kcWN0bTgxMyBjb21wYXJldG90bWFnICAxICAgIC1JbmYgICAtPiAtMQotZHFjdG04MTQgY29tcGFyZXRvdG1hZyAgMTAwMCAtSW5mICAgLT4gLTEKLWRxY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwCi0KLWRxY3RtODIxIGNvbXBhcmV0b3RtYWcgIE5hTiAtSW5mICAgIC0+ICAxCi1kcWN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQotZHFjdG04MjMgY29tcGFyZXRvdG1hZyAgTmFOIC0xICAgICAgLT4gIDEKLWRxY3RtODI0IGNvbXBhcmV0b3RtYWcgIE5hTiAtMCAgICAgIC0+ICAxCi1kcWN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQotZHFjdG04MjYgY29tcGFyZXRvdG1hZyAgTmFOICAxICAgICAgLT4gIDEKLWRxY3RtODI3IGNvbXBhcmV0b3RtYWcgIE5hTiAgMTAwMCAgIC0+ICAxCi1kcWN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQotZHFjdG04MjkgY29tcGFyZXRvdG1hZyAgTmFOICBOYU4gICAgLT4gIDAKLWRxY3RtODMwIGNvbXBhcmV0b3RtYWcgLUluZiAgTmFOICAgIC0+ICAtMQotZHFjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xCi1kcWN0bTgzMiBjb21wYXJldG90bWFnIC0xICAgIE5hTiAgICAtPiAgLTEKLWRxY3RtODMzIGNvbXBhcmV0b3RtYWcgLTAgICAgTmFOICAgIC0+ICAtMQotZHFjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xCi1kcWN0bTgzNSBjb21wYXJldG90bWFnICAxICAgIE5hTiAgICAtPiAgLTEKLWRxY3RtODM2IGNvbXBhcmV0b3RtYWcgIDEwMDAgTmFOICAgIC0+ICAtMQotZHFjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xCi1kcWN0bTgzOCBjb21wYXJldG90bWFnIC1OYU4gLU5hTiAgICAtPiAgMAotZHFjdG04MzkgY29tcGFyZXRvdG1hZyArTmFOIC1OYU4gICAgLT4gIDAKLWRxY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwCi0KLWRxY3RtODQxIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gIC0+ICAwCi1kcWN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTEKLWRxY3RtODQzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLUluZiAgIC0+ICAxCi1kcWN0bTg0NCBjb21wYXJldG90bWFnICBzTmFOIC0xMDAwICAtPiAgMQotZHFjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDEKLWRxY3RtODQ2IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTAgICAgIC0+ICAxCi1kcWN0bTg0NyBjb21wYXJldG90bWFnICBzTmFOICAwICAgICAtPiAgMQotZHFjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDEKLWRxY3RtODQ5IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDEwMDAgIC0+ICAxCi1kcWN0bTg1MCBjb21wYXJldG90bWFnICBzTmFOICBOYU4gICAtPiAgLTEKLWRxY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwCi0KLWRxY3RtODUyIGNvbXBhcmV0b3RtYWcgLXNOYU4gc05hTiAgIC0+ICAwCi1kcWN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQotZHFjdG04NTQgY29tcGFyZXRvdG1hZyAtSW5mICBzTmFOICAgLT4gIC0xCi1kcWN0bTg1NSBjb21wYXJldG90bWFnIC0xMDAwIHNOYU4gICAtPiAgLTEKLWRxY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQotZHFjdG04NTcgY29tcGFyZXRvdG1hZyAtMCAgICBzTmFOICAgLT4gIC0xCi1kcWN0bTg1OCBjb21wYXJldG90bWFnICAwICAgIHNOYU4gICAtPiAgLTEKLWRxY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQotZHFjdG04NjAgY29tcGFyZXRvdG1hZyAgMTAwMCBzTmFOICAgLT4gIC0xCi1kcWN0bTg2MSBjb21wYXJldG90bWFnICBJbmYgIHNOYU4gICAtPiAgLTEKLWRxY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxCi1kcWN0bTg2MyBjb21wYXJldG90bWFnICBzTmFOIHNOYU4gICAtPiAgMAotCi1kcWN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDAKLWRxY3RtODcyIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1OYU4gICAtPiAgLTEKLWRxY3RtODczIGNvbXBhcmV0b3RtYWcgIC1zTmFOIC1JbmYgICAtPiAgMQotZHFjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxCi1kcWN0bTg3NSBjb21wYXJldG90bWFnICAtc05hTiAtMSAgICAgLT4gIDEKLWRxY3RtODc2IGNvbXBhcmV0b3RtYWcgIC1zTmFOIC0wICAgICAtPiAgMQotZHFjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxCi1kcWN0bTg3OCBjb21wYXJldG90bWFnICAtc05hTiAgMSAgICAgLT4gIDEKLWRxY3RtODc5IGNvbXBhcmV0b3RtYWcgIC1zTmFOICAxMDAwICAtPiAgMQotZHFjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQotZHFjdG04ODEgY29tcGFyZXRvdG1hZyAgLXNOYU4gc05hTiAgIC0+ICAwCi0KLWRxY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMAotZHFjdG04ODMgY29tcGFyZXRvdG1hZyAtTmFOICAtc05hTiAgIC0+ICAxCi1kcWN0bTg4NCBjb21wYXJldG90bWFnIC1JbmYgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg4NiBjb21wYXJldG90bWFnIC0xICAgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg4NyBjb21wYXJldG90bWFnIC0wICAgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg4OSBjb21wYXJldG90bWFnICAxICAgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg5MCBjb21wYXJldG90bWFnICAxMDAwIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xCi1kcWN0bTg5MiBjb21wYXJldG90bWFnICBOYU4gIC1zTmFOICAgLT4gIDEKLWRxY3RtODkzIGNvbXBhcmV0b3RtYWcgIHNOYU4gLXNOYU4gICAtPiAgMAotCi0tLSBOYU5zIHdpdGggcGF5bG9hZAotZHFjdG05NjAgY29tcGFyZXRvdG1hZyAgTmFOOSAtSW5mICAgLT4gIDEKLWRxY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxCi1kcWN0bTk2MiBjb21wYXJldG90bWFnICBOYU43NyBJbmYgICAtPiAgMQotZHFjdG05NjMgY29tcGFyZXRvdG1hZyAtTmFONjcgTmFONSAgLT4gIDEKLWRxY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQotZHFjdG05NjUgY29tcGFyZXRvdG1hZyAtOTk5ICAtTmFOMzMgLT4gIC0xCi1kcWN0bTk2NiBjb21wYXJldG90bWFnICBJbmYgICBOYU4yICAtPiAgLTEKLQotZHFjdG05NzAgY29tcGFyZXRvdG1hZyAtTmFONDEgLU5hTjQyIC0+IC0xCi1kcWN0bTk3MSBjb21wYXJldG90bWFnICtOYU40MSAtTmFONDIgLT4gLTEKLWRxY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQotZHFjdG05NzMgY29tcGFyZXRvdG1hZyArTmFONDEgK05hTjQyIC0+IC0xCi1kcWN0bTk3NCBjb21wYXJldG90bWFnIC1OYU40MiAtTmFOMDEgLT4gIDEKLWRxY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQotZHFjdG05NzYgY29tcGFyZXRvdG1hZyAtTmFONDIgK05hTjAxIC0+ICAxCi1kcWN0bTk3NyBjb21wYXJldG90bWFnICtOYU40MiArTmFOMDEgLT4gIDEKLQotZHFjdG05ODAgY29tcGFyZXRvdG1hZyAtc05hTjc3MSAtc05hTjc3MiAtPiAtMQotZHFjdG05ODEgY29tcGFyZXRvdG1hZyArc05hTjc3MSAtc05hTjc3MiAtPiAtMQotZHFjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQotZHFjdG05ODMgY29tcGFyZXRvdG1hZyArc05hTjc3MSArc05hTjc3MiAtPiAtMQotZHFjdG05ODQgY29tcGFyZXRvdG1hZyAtc05hTjc3MiAtc05hTjc3MSAtPiAgMQotZHFjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQotZHFjdG05ODYgY29tcGFyZXRvdG1hZyAtc05hTjc3MiArc05hTjc3MSAtPiAgMQotZHFjdG05ODcgY29tcGFyZXRvdG1hZyArc05hTjc3MiArc05hTjc3MSAtPiAgMQotCi1kcWN0bTk5MSBjb21wYXJldG90bWFnIC1zTmFOOTkgLUluZiAgICAtPiAgMQotZHFjdG05OTIgY29tcGFyZXRvdG1hZyAgc05hTjk4IC0xMSAgICAgLT4gIDEKLWRxY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xCi1kcWN0bTk5NCBjb21wYXJldG90bWFnICBzTmFOMTYgc05hTjk0ICAtPiAtMQotZHFjdG05OTUgY29tcGFyZXRvdG1hZyAgTmFOODUgIHNOYU44MyAgLT4gIDEKLWRxY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xCi1kcWN0bTk5NyBjb21wYXJldG90bWFnICAwODggICAgc05hTjgxICAtPiAtMQotZHFjdG05OTggY29tcGFyZXRvdG1hZyAgSW5mICAgIHNOYU45MCAgLT4gLTEKLWRxY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxCi0KLS0tIHNwcmVhZCB6ZXJvcwotZHFjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwICAgICAgICAtPiAgLTEKLWRxY3RtMTExMSBjb21wYXJldG90bWFnICAgMEUtNjE0MyAtMCAgICAgICAgLT4gIC0xCi1kcWN0bTExMTIgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDAgICAgICAgIC0+ICAtMQotZHFjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wICAgICAgICAtPiAgLTEKLWRxY3RtMTExNCBjb21wYXJldG90bWFnICAgMEUtNjE0MyAgMEUrNjE0NCAgIC0+ICAtMQotZHFjdG0xMTE1IGNvbXBhcmV0b3RtYWcgICAwRS02MTQzIC0wRSs2MTQ0ICAgLT4gIC0xCi1kcWN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTEKLWRxY3RtMTExNyBjb21wYXJldG90bWFnICAtMEUtNjE0MyAtMEUrNjE0NCAgIC0+ICAtMQotZHFjdG0xMTE4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFKzYxNDQgICAtPiAgLTEKLWRxY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xCi1kcWN0bTExMjAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQotZHFjdG0xMTIxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFKzYxNDQgICAtPiAgLTEKLQotZHFjdG0xMTMwIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwICAgICAgICAtPiAgIDEKLWRxY3RtMTEzMSBjb21wYXJldG90bWFnICAgMEUrNjE0NCAtMCAgICAgICAgLT4gICAxCi1kcWN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQotZHFjdG0xMTMzIGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wICAgICAgICAtPiAgIDEKLWRxY3RtMTEzNCBjb21wYXJldG90bWFnICAgMEUrNjE0NCAgMEUtNjE0MyAgIC0+ICAgMQotZHFjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxCi1kcWN0bTExMzYgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDBFLTYxNDMgICAtPiAgIDEKLWRxY3RtMTEzNyBjb21wYXJldG90bWFnICAtMEUrNjE0NCAtMEUtNjE0MyAgIC0+ICAgMQotZHFjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTYxNDMgICAtPiAgIDEKLWRxY3RtMTEzOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRS02MTQzICAgLT4gICAxCi1kcWN0bTExNDAgY29tcGFyZXRvdG1hZyAgLTAgICAgICAgMEUtNjE0MyAgIC0+ICAgMQotZHFjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTYxNDMgICAtPiAgIDEKLQotLS0gTnVsbCB0ZXN0cwotZHFjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWN0bTk5OTEgY29tcGFyZXRvdG1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQ29tcGFyZVRvdGFsTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBjb21wYXJpc29uOyBhYnMuIHRvdGFsIG9yZGVyICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBOb3RlIHRoYXQgd2UgY2Fubm90IGFzc3VtZSBhZGQvc3VidHJhY3QgdGVzdHMgY292ZXIgcGF0aHMgYWRlcXVhdGVseSwNCistLSBoZXJlLCBiZWNhdXNlIHRoZSBjb2RlIG1pZ2h0IGJlIHF1aXRlIGRpZmZlcmVudCAoY29tcGFyaXNvbiBjYW5ub3QNCistLSBvdmVyZmxvdyBvciB1bmRlcmZsb3csIHNvIGFjdHVhbCBzdWJ0cmFjdGlvbnMgYXJlIG5vdCBuZWNlc3NhcnkpLg0KKy0tIFNpbWlsYXJseSwgY29tcGFyZXRvdGFsIHdpbGwgaGF2ZSBzb21lIHJhZGljYWxseSBkaWZmZXJlbnQgcGF0aHMNCistLSB0aGFuIGNvbXBhcmUuDQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RxY3RtMDAxIGNvbXBhcmV0b3RtYWcgIC0yICAtMiAgIC0+ICAgMA0KK2RxY3RtMDAyIGNvbXBhcmV0b3RtYWcgIC0yICAtMSAgIC0+ICAgMQ0KK2RxY3RtMDAzIGNvbXBhcmV0b3RtYWcgIC0yICAgMCAgIC0+ICAgMQ0KK2RxY3RtMDA0IGNvbXBhcmV0b3RtYWcgIC0yICAgMSAgIC0+ICAgMQ0KK2RxY3RtMDA1IGNvbXBhcmV0b3RtYWcgIC0yICAgMiAgIC0+ICAgMA0KK2RxY3RtMDA2IGNvbXBhcmV0b3RtYWcgIC0xICAtMiAgIC0+ICAtMQ0KK2RxY3RtMDA3IGNvbXBhcmV0b3RtYWcgIC0xICAtMSAgIC0+ICAgMA0KK2RxY3RtMDA4IGNvbXBhcmV0b3RtYWcgIC0xICAgMCAgIC0+ICAgMQ0KK2RxY3RtMDA5IGNvbXBhcmV0b3RtYWcgIC0xICAgMSAgIC0+ICAgMA0KK2RxY3RtMDEwIGNvbXBhcmV0b3RtYWcgIC0xICAgMiAgIC0+ICAtMQ0KK2RxY3RtMDExIGNvbXBhcmV0b3RtYWcgICAwICAtMiAgIC0+ICAtMQ0KK2RxY3RtMDEyIGNvbXBhcmV0b3RtYWcgICAwICAtMSAgIC0+ICAtMQ0KK2RxY3RtMDEzIGNvbXBhcmV0b3RtYWcgICAwICAgMCAgIC0+ICAgMA0KK2RxY3RtMDE0IGNvbXBhcmV0b3RtYWcgICAwICAgMSAgIC0+ICAtMQ0KK2RxY3RtMDE1IGNvbXBhcmV0b3RtYWcgICAwICAgMiAgIC0+ICAtMQ0KK2RxY3RtMDE2IGNvbXBhcmV0b3RtYWcgICAxICAtMiAgIC0+ICAtMQ0KK2RxY3RtMDE3IGNvbXBhcmV0b3RtYWcgICAxICAtMSAgIC0+ICAgMA0KK2RxY3RtMDE4IGNvbXBhcmV0b3RtYWcgICAxICAgMCAgIC0+ICAgMQ0KK2RxY3RtMDE5IGNvbXBhcmV0b3RtYWcgICAxICAgMSAgIC0+ICAgMA0KK2RxY3RtMDIwIGNvbXBhcmV0b3RtYWcgICAxICAgMiAgIC0+ICAtMQ0KK2RxY3RtMDIxIGNvbXBhcmV0b3RtYWcgICAyICAtMiAgIC0+ICAgMA0KK2RxY3RtMDIyIGNvbXBhcmV0b3RtYWcgICAyICAtMSAgIC0+ICAgMQ0KK2RxY3RtMDIzIGNvbXBhcmV0b3RtYWcgICAyICAgMCAgIC0+ICAgMQ0KK2RxY3RtMDI1IGNvbXBhcmV0b3RtYWcgICAyICAgMSAgIC0+ICAgMQ0KK2RxY3RtMDI2IGNvbXBhcmV0b3RtYWcgICAyICAgMiAgIC0+ICAgMA0KKw0KK2RxY3RtMDMxIGNvbXBhcmV0b3RtYWcgIC0yMCAgLTIwICAgLT4gICAwDQorZHFjdG0wMzIgY29tcGFyZXRvdG1hZyAgLTIwICAtMTAgICAtPiAgIDENCitkcWN0bTAzMyBjb21wYXJldG90bWFnICAtMjAgICAwMCAgIC0+ICAgMQ0KK2RxY3RtMDM0IGNvbXBhcmV0b3RtYWcgIC0yMCAgIDEwICAgLT4gICAxDQorZHFjdG0wMzUgY29tcGFyZXRvdG1hZyAgLTIwICAgMjAgICAtPiAgIDANCitkcWN0bTAzNiBjb21wYXJldG90bWFnICAtMTAgIC0yMCAgIC0+ICAtMQ0KK2RxY3RtMDM3IGNvbXBhcmV0b3RtYWcgIC0xMCAgLTEwICAgLT4gICAwDQorZHFjdG0wMzggY29tcGFyZXRvdG1hZyAgLTEwICAgMDAgICAtPiAgIDENCitkcWN0bTAzOSBjb21wYXJldG90bWFnICAtMTAgICAxMCAgIC0+ICAgMA0KK2RxY3RtMDQwIGNvbXBhcmV0b3RtYWcgIC0xMCAgIDIwICAgLT4gIC0xDQorZHFjdG0wNDEgY29tcGFyZXRvdG1hZyAgIDAwICAtMjAgICAtPiAgLTENCitkcWN0bTA0MiBjb21wYXJldG90bWFnICAgMDAgIC0xMCAgIC0+ICAtMQ0KK2RxY3RtMDQzIGNvbXBhcmV0b3RtYWcgICAwMCAgIDAwICAgLT4gICAwDQorZHFjdG0wNDQgY29tcGFyZXRvdG1hZyAgIDAwICAgMTAgICAtPiAgLTENCitkcWN0bTA0NSBjb21wYXJldG90bWFnICAgMDAgICAyMCAgIC0+ICAtMQ0KK2RxY3RtMDQ2IGNvbXBhcmV0b3RtYWcgICAxMCAgLTIwICAgLT4gIC0xDQorZHFjdG0wNDcgY29tcGFyZXRvdG1hZyAgIDEwICAtMTAgICAtPiAgIDANCitkcWN0bTA0OCBjb21wYXJldG90bWFnICAgMTAgICAwMCAgIC0+ICAgMQ0KK2RxY3RtMDQ5IGNvbXBhcmV0b3RtYWcgICAxMCAgIDEwICAgLT4gICAwDQorZHFjdG0wNTAgY29tcGFyZXRvdG1hZyAgIDEwICAgMjAgICAtPiAgLTENCitkcWN0bTA1MSBjb21wYXJldG90bWFnICAgMjAgIC0yMCAgIC0+ICAgMA0KK2RxY3RtMDUyIGNvbXBhcmV0b3RtYWcgICAyMCAgLTEwICAgLT4gICAxDQorZHFjdG0wNTMgY29tcGFyZXRvdG1hZyAgIDIwICAgMDAgICAtPiAgIDENCitkcWN0bTA1NSBjb21wYXJldG90bWFnICAgMjAgICAxMCAgIC0+ICAgMQ0KK2RxY3RtMDU2IGNvbXBhcmV0b3RtYWcgICAyMCAgIDIwICAgLT4gICAwDQorDQorZHFjdG0wNjEgY29tcGFyZXRvdG1hZyAgLTIuMCAgLTIuMCAgIC0+ICAgMA0KK2RxY3RtMDYyIGNvbXBhcmV0b3RtYWcgIC0yLjAgIC0xLjAgICAtPiAgIDENCitkcWN0bTA2MyBjb21wYXJldG90bWFnICAtMi4wICAgMC4wICAgLT4gICAxDQorZHFjdG0wNjQgY29tcGFyZXRvdG1hZyAgLTIuMCAgIDEuMCAgIC0+ICAgMQ0KK2RxY3RtMDY1IGNvbXBhcmV0b3RtYWcgIC0yLjAgICAyLjAgICAtPiAgIDANCitkcWN0bTA2NiBjb21wYXJldG90bWFnICAtMS4wICAtMi4wICAgLT4gIC0xDQorZHFjdG0wNjcgY29tcGFyZXRvdG1hZyAgLTEuMCAgLTEuMCAgIC0+ICAgMA0KK2RxY3RtMDY4IGNvbXBhcmV0b3RtYWcgIC0xLjAgICAwLjAgICAtPiAgIDENCitkcWN0bTA2OSBjb21wYXJldG90bWFnICAtMS4wICAgMS4wICAgLT4gICAwDQorZHFjdG0wNzAgY29tcGFyZXRvdG1hZyAgLTEuMCAgIDIuMCAgIC0+ICAtMQ0KK2RxY3RtMDcxIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0yLjAgICAtPiAgLTENCitkcWN0bTA3MiBjb21wYXJldG90bWFnICAgMC4wICAtMS4wICAgLT4gIC0xDQorZHFjdG0wNzMgY29tcGFyZXRvdG1hZyAgIDAuMCAgIDAuMCAgIC0+ICAgMA0KK2RxY3RtMDc0IGNvbXBhcmV0b3RtYWcgICAwLjAgICAxLjAgICAtPiAgLTENCitkcWN0bTA3NSBjb21wYXJldG90bWFnICAgMC4wICAgMi4wICAgLT4gIC0xDQorZHFjdG0wNzYgY29tcGFyZXRvdG1hZyAgIDEuMCAgLTIuMCAgIC0+ICAtMQ0KK2RxY3RtMDc3IGNvbXBhcmV0b3RtYWcgICAxLjAgIC0xLjAgICAtPiAgIDANCitkcWN0bTA3OCBjb21wYXJldG90bWFnICAgMS4wICAgMC4wICAgLT4gICAxDQorZHFjdG0wNzkgY29tcGFyZXRvdG1hZyAgIDEuMCAgIDEuMCAgIC0+ICAgMA0KK2RxY3RtMDgwIGNvbXBhcmV0b3RtYWcgICAxLjAgICAyLjAgICAtPiAgLTENCitkcWN0bTA4MSBjb21wYXJldG90bWFnICAgMi4wICAtMi4wICAgLT4gICAwDQorZHFjdG0wODIgY29tcGFyZXRvdG1hZyAgIDIuMCAgLTEuMCAgIC0+ICAgMQ0KK2RxY3RtMDgzIGNvbXBhcmV0b3RtYWcgICAyLjAgICAwLjAgICAtPiAgIDENCitkcWN0bTA4NSBjb21wYXJldG90bWFnICAgMi4wICAgMS4wICAgLT4gICAxDQorZHFjdG0wODYgY29tcGFyZXRvdG1hZyAgIDIuMCAgIDIuMCAgIC0+ICAgMA0KKw0KKy0tIG5vdyBzb21lIGNhc2VzIHdoaWNoIG1pZ2h0IG92ZXJmbG93IGlmIHN1YnRyYWN0IHdlcmUgdXNlZA0KK2RxY3RtMDkwIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMA0KK2RxY3RtMDkxIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgMA0KK2RxY3RtMDkyIGNvbXBhcmV0b3RtYWcgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMA0KK2RxY3RtMDkzIGNvbXBhcmV0b3RtYWcgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICAgMA0KKw0KKy0tIHNvbWUgZGlmZmVyaW5nIGxlbmd0aC9leHBvbmVudCBjYXNlcw0KKy0tIGluIHRoaXMgZmlyc3QgZ3JvdXAsIGNvbXBhcmUgd291bGQgY29tcGFyZSBhbGwgZXF1YWwNCitkcWN0bTEwMCBjb21wYXJldG90bWFnICAgNy4wICAgIDcuMCAgICAgLT4gICAwDQorZHFjdG0xMDEgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3ICAgICAgIC0+ICAtMQ0KK2RxY3RtMTAyIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgNy4wICAgICAtPiAgIDENCitkcWN0bTEwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIDcuMCAgICAgLT4gICAxDQorZHFjdG0xMDQgY29tcGFyZXRvdG1hZyAgIDcwRS0xICA3LjAgICAgIC0+ICAgMA0KK2RxY3RtMTA1IGNvbXBhcmV0b3RtYWcgICAwLjdFKzEgNyAgICAgICAtPiAgIDANCitkcWN0bTEwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIDcgICAgICAgLT4gIC0xDQorZHFjdG0xMDcgY29tcGFyZXRvdG1hZyAgIDcuMCAgICA3RSswICAgIC0+ICAtMQ0KK2RxY3RtMTA4IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgNzBFLTEgICAtPiAgIDANCitkcWN0bTEwOSBjb21wYXJldG90bWFnICAgNyAgICAgIDAuN0UrMSAgLT4gICAwDQorZHFjdG0xMTAgY29tcGFyZXRvdG1hZyAgIDcgICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2RxY3RtMTIwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgNy4wICAgICAtPiAgIDENCitkcWN0bTEyMSBjb21wYXJldG90bWFnICAgOC4wICAgIDcgICAgICAgLT4gICAxDQorZHFjdG0xMjIgY29tcGFyZXRvdG1hZyAgIDggICAgICA3LjAgICAgIC0+ICAgMQ0KK2RxY3RtMTIzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgNy4wICAgICAtPiAgIDENCitkcWN0bTEyNCBjb21wYXJldG90bWFnICAgODBFLTEgIDcuMCAgICAgLT4gICAxDQorZHFjdG0xMjUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA3ICAgICAgIC0+ICAgMQ0KK2RxY3RtMTI2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgNyAgICAgICAtPiAgIDENCitkcWN0bTEyNyBjb21wYXJldG90bWFnICAgOC4wICAgIDdFKzAgICAgLT4gICAxDQorZHFjdG0xMjggY29tcGFyZXRvdG1hZyAgIDguMCAgICA3MEUtMSAgIC0+ICAgMQ0KK2RxY3RtMTI5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC43RSsxICAgLT4gICAxDQorZHFjdG0xMzAgY29tcGFyZXRvdG1hZyAgIDggICAgICA3MEUtMSAgIC0+ICAgMQ0KKw0KK2RxY3RtMTQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgOS4wICAgICAtPiAgLTENCitkcWN0bTE0MSBjb21wYXJldG90bWFnICAgOC4wICAgIDkgICAgICAgLT4gIC0xDQorZHFjdG0xNDIgY29tcGFyZXRvdG1hZyAgIDggICAgICA5LjAgICAgIC0+ICAtMQ0KK2RxY3RtMTQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgOS4wICAgICAtPiAgLTENCitkcWN0bTE0NCBjb21wYXJldG90bWFnICAgODBFLTEgIDkuMCAgICAgLT4gIC0xDQorZHFjdG0xNDUgY29tcGFyZXRvdG1hZyAgIDAuOEUrMSA5ICAgICAgIC0+ICAtMQ0KK2RxY3RtMTQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgOSAgICAgICAtPiAgLTENCitkcWN0bTE0NyBjb21wYXJldG90bWFnICAgOC4wICAgIDlFKzAgICAgLT4gIC0xDQorZHFjdG0xNDggY29tcGFyZXRvdG1hZyAgIDguMCAgICA5MEUtMSAgIC0+ICAtMQ0KK2RxY3RtMTQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgMC45RSsxICAtPiAgLTENCitkcWN0bTE1MCBjb21wYXJldG90bWFnICAgOCAgICAgIDkwRS0xICAgLT4gIC0xDQorDQorLS0gYW5kIGFnYWluLCB3aXRoIHNpZ24gY2hhbmdlcyAtKyAuLg0KK2RxY3RtMjAwIGNvbXBhcmV0b3RtYWcgIC03LjAgICAgNy4wICAgICAtPiAgIDANCitkcWN0bTIwMSBjb21wYXJldG90bWFnICAtNy4wICAgIDcgICAgICAgLT4gIC0xDQorZHFjdG0yMDIgY29tcGFyZXRvdG1hZyAgLTcgICAgICA3LjAgICAgIC0+ICAgMQ0KK2RxY3RtMjAzIGNvbXBhcmV0b3RtYWcgIC03RSswICAgNy4wICAgICAtPiAgIDENCitkcWN0bTIwNCBjb21wYXJldG90bWFnICAtNzBFLTEgIDcuMCAgICAgLT4gICAwDQorZHFjdG0yMDUgY29tcGFyZXRvdG1hZyAgLTAuN0UrMSA3ICAgICAgIC0+ICAgMA0KK2RxY3RtMjA2IGNvbXBhcmV0b3RtYWcgIC03MEUtMSAgNyAgICAgICAtPiAgLTENCitkcWN0bTIwNyBjb21wYXJldG90bWFnICAtNy4wICAgIDdFKzAgICAgLT4gIC0xDQorZHFjdG0yMDggY29tcGFyZXRvdG1hZyAgLTcuMCAgICA3MEUtMSAgIC0+ICAgMA0KK2RxY3RtMjA5IGNvbXBhcmV0b3RtYWcgIC03ICAgICAgMC43RSsxICAtPiAgIDANCitkcWN0bTIxMCBjb21wYXJldG90bWFnICAtNyAgICAgIDcwRS0xICAgLT4gICAxDQorDQorZHFjdG0yMjAgY29tcGFyZXRvdG1hZyAgLTguMCAgICA3LjAgICAgIC0+ICAgMQ0KK2RxY3RtMjIxIGNvbXBhcmV0b3RtYWcgIC04LjAgICAgNyAgICAgICAtPiAgIDENCitkcWN0bTIyMiBjb21wYXJldG90bWFnICAtOCAgICAgIDcuMCAgICAgLT4gICAxDQorZHFjdG0yMjMgY29tcGFyZXRvdG1hZyAgLThFKzAgICA3LjAgICAgIC0+ICAgMQ0KK2RxY3RtMjI0IGNvbXBhcmV0b3RtYWcgIC04MEUtMSAgNy4wICAgICAtPiAgIDENCitkcWN0bTIyNSBjb21wYXJldG90bWFnICAtMC44RSsxIDcgICAgICAgLT4gICAxDQorZHFjdG0yMjYgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA3ICAgICAgIC0+ICAgMQ0KK2RxY3RtMjI3IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgN0UrMCAgICAtPiAgIDENCitkcWN0bTIyOCBjb21wYXJldG90bWFnICAtOC4wICAgIDcwRS0xICAgLT4gICAxDQorZHFjdG0yMjkgY29tcGFyZXRvdG1hZyAgLTggICAgICAwLjdFKzEgIC0+ICAgMQ0KK2RxY3RtMjMwIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgNzBFLTEgICAtPiAgIDENCisNCitkcWN0bTI0MCBjb21wYXJldG90bWFnICAtOC4wICAgIDkuMCAgICAgLT4gIC0xDQorZHFjdG0yNDEgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5ICAgICAgIC0+ICAtMQ0KK2RxY3RtMjQyIGNvbXBhcmV0b3RtYWcgIC04ICAgICAgOS4wICAgICAtPiAgLTENCitkcWN0bTI0MyBjb21wYXJldG90bWFnICAtOEUrMCAgIDkuMCAgICAgLT4gIC0xDQorZHFjdG0yNDQgY29tcGFyZXRvdG1hZyAgLTgwRS0xICA5LjAgICAgIC0+ICAtMQ0KK2RxY3RtMjQ1IGNvbXBhcmV0b3RtYWcgIC0wLjhFKzEgOSAgICAgICAtPiAgLTENCitkcWN0bTI0NiBjb21wYXJldG90bWFnICAtODBFLTEgIDkgICAgICAgLT4gIC0xDQorZHFjdG0yNDcgY29tcGFyZXRvdG1hZyAgLTguMCAgICA5RSswICAgIC0+ICAtMQ0KK2RxY3RtMjQ4IGNvbXBhcmV0b3RtYWcgIC04LjAgICAgOTBFLTEgICAtPiAgLTENCitkcWN0bTI0OSBjb21wYXJldG90bWFnICAtOCAgICAgIDAuOUUrMSAgLT4gIC0xDQorZHFjdG0yNTAgY29tcGFyZXRvdG1hZyAgLTggICAgICA5MEUtMSAgIC0+ICAtMQ0KKw0KKy0tIGFuZCBhZ2Fpbiwgd2l0aCBzaWduIGNoYW5nZXMgKy0gLi4NCitkcWN0bTMwMCBjb21wYXJldG90bWFnICAgNy4wICAgIC03LjAgICAgIC0+ICAgMA0KK2RxY3RtMzAxIGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTcgICAgICAgLT4gIC0xDQorZHFjdG0zMDIgY29tcGFyZXRvdG1hZyAgIDcgICAgICAtNy4wICAgICAtPiAgIDENCitkcWN0bTMwMyBjb21wYXJldG90bWFnICAgN0UrMCAgIC03LjAgICAgIC0+ICAgMQ0KK2RxY3RtMzA0IGNvbXBhcmV0b3RtYWcgICA3MEUtMSAgLTcuMCAgICAgLT4gICAwDQorZHFjdG0zMDUgY29tcGFyZXRvdG1hZyAgIC43RSsxICAtNyAgICAgICAtPiAgIDANCitkcWN0bTMwNiBjb21wYXJldG90bWFnICAgNzBFLTEgIC03ICAgICAgIC0+ICAtMQ0KK2RxY3RtMzA3IGNvbXBhcmV0b3RtYWcgICA3LjAgICAgLTdFKzAgICAgLT4gIC0xDQorZHFjdG0zMDggY29tcGFyZXRvdG1hZyAgIDcuMCAgICAtNzBFLTEgICAtPiAgIDANCitkcWN0bTMwOSBjb21wYXJldG90bWFnICAgNyAgICAgIC0uN0UrMSAgIC0+ICAgMA0KK2RxY3RtMzEwIGNvbXBhcmV0b3RtYWcgICA3ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZHFjdG0zMjAgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtNy4wICAgICAtPiAgIDENCitkcWN0bTMyMSBjb21wYXJldG90bWFnICAgOC4wICAgIC03ICAgICAgIC0+ICAgMQ0KK2RxY3RtMzIyIGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG0zMjMgY29tcGFyZXRvdG1hZyAgIDhFKzAgICAtNy4wICAgICAtPiAgIDENCitkcWN0bTMyNCBjb21wYXJldG90bWFnICAgODBFLTEgIC03LjAgICAgIC0+ICAgMQ0KK2RxY3RtMzI1IGNvbXBhcmV0b3RtYWcgICAuOEUrMSAgLTcgICAgICAgLT4gICAxDQorZHFjdG0zMjYgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtNyAgICAgICAtPiAgIDENCitkcWN0bTMyNyBjb21wYXJldG90bWFnICAgOC4wICAgIC03RSswICAgIC0+ICAgMQ0KK2RxY3RtMzI4IGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTcwRS0xICAgLT4gICAxDQorZHFjdG0zMjkgY29tcGFyZXRvdG1hZyAgIDggICAgICAtLjdFKzEgICAtPiAgIDENCitkcWN0bTMzMCBjb21wYXJldG90bWFnICAgOCAgICAgIC03MEUtMSAgIC0+ICAgMQ0KKw0KK2RxY3RtMzQwIGNvbXBhcmV0b3RtYWcgICA4LjAgICAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG0zNDEgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOSAgICAgICAtPiAgLTENCitkcWN0bTM0MiBjb21wYXJldG90bWFnICAgOCAgICAgIC05LjAgICAgIC0+ICAtMQ0KK2RxY3RtMzQzIGNvbXBhcmV0b3RtYWcgICA4RSswICAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG0zNDQgY29tcGFyZXRvdG1hZyAgIDgwRS0xICAtOS4wICAgICAtPiAgLTENCitkcWN0bTM0NSBjb21wYXJldG90bWFnICAgLjhFKzEgIC05ICAgICAgIC0+ICAtMQ0KK2RxY3RtMzQ2IGNvbXBhcmV0b3RtYWcgICA4MEUtMSAgLTkgICAgICAgLT4gIC0xDQorZHFjdG0zNDcgY29tcGFyZXRvdG1hZyAgIDguMCAgICAtOUUrMCAgICAtPiAgLTENCitkcWN0bTM0OCBjb21wYXJldG90bWFnICAgOC4wICAgIC05MEUtMSAgIC0+ICAtMQ0KK2RxY3RtMzQ5IGNvbXBhcmV0b3RtYWcgICA4ICAgICAgLS45RSsxICAgLT4gIC0xDQorZHFjdG0zNTAgY29tcGFyZXRvdG1hZyAgIDggICAgICAtOTBFLTEgICAtPiAgLTENCisNCistLSBhbmQgYWdhaW4sIHdpdGggc2lnbiBjaGFuZ2VzIC0tIC4uDQorZHFjdG00MDAgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcuMCAgICAgLT4gICAwDQorZHFjdG00MDEgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcgICAgICAgLT4gIC0xDQorZHFjdG00MDIgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MDMgY29tcGFyZXRvdG1hZyAgIC03RSswICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MDQgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcuMCAgICAgLT4gICAwDQorZHFjdG00MDUgY29tcGFyZXRvdG1hZyAgIC0uN0UrMSAgLTcgICAgICAgLT4gICAwDQorZHFjdG00MDYgY29tcGFyZXRvdG1hZyAgIC03MEUtMSAgLTcgICAgICAgLT4gIC0xDQorZHFjdG00MDcgY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTdFKzAgICAgLT4gIC0xDQorZHFjdG00MDggY29tcGFyZXRvdG1hZyAgIC03LjAgICAgLTcwRS0xICAgLT4gICAwDQorZHFjdG00MDkgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLS43RSsxICAgLT4gICAwDQorZHFjdG00MTAgY29tcGFyZXRvdG1hZyAgIC03ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZHFjdG00MjAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MjEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcgICAgICAgLT4gICAxDQorZHFjdG00MjIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MjMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MjQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcuMCAgICAgLT4gICAxDQorZHFjdG00MjUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTcgICAgICAgLT4gICAxDQorZHFjdG00MjYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTcgICAgICAgLT4gICAxDQorZHFjdG00MjcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTdFKzAgICAgLT4gICAxDQorZHFjdG00MjggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTcwRS0xICAgLT4gICAxDQorZHFjdG00MjkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS43RSsxICAgLT4gICAxDQorZHFjdG00MzAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTcwRS0xICAgLT4gICAxDQorDQorZHFjdG00NDAgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG00NDEgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkgICAgICAgLT4gIC0xDQorZHFjdG00NDIgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG00NDMgY29tcGFyZXRvdG1hZyAgIC04RSswICAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG00NDQgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkuMCAgICAgLT4gIC0xDQorZHFjdG00NDUgY29tcGFyZXRvdG1hZyAgIC0uOEUrMSAgLTkgICAgICAgLT4gIC0xDQorZHFjdG00NDYgY29tcGFyZXRvdG1hZyAgIC04MEUtMSAgLTkgICAgICAgLT4gIC0xDQorZHFjdG00NDcgY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTlFKzAgICAgLT4gIC0xDQorZHFjdG00NDggY29tcGFyZXRvdG1hZyAgIC04LjAgICAgLTkwRS0xICAgLT4gIC0xDQorZHFjdG00NDkgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLS45RSsxICAgLT4gIC0xDQorZHFjdG00NTAgY29tcGFyZXRvdG1hZyAgIC04ICAgICAgLTkwRS0xICAgLT4gIC0xDQorDQorDQorLS0gdGVzdGNhc2VzIHRoYXQgc3VidHJhY3QgdG8gbG90cyBvZiB6ZXJvcyBhdCBib3VuZGFyaWVzIFtwZ3JdDQorZHFjdG00NzMgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RxY3RtNDc0IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RxY3RtNDc1IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMDAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorZHFjdG00NzYgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMDAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RxY3RtNDc3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RxY3RtNDc4IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMDAwRSs4OSAxMjMuNDU2RSs4OSAgLT4gIC0xDQorZHFjdG00NzkgY29tcGFyZXRvdG1hZyAxMjMuNDU2MDAwMEUtODkgMTIzLjQ1NkUtODkgIC0+ICAtMQ0KK2RxY3RtNDgwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwMEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RxY3RtNDgxIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NjAwRS04OSAxMjMuNDU2RS04OSAgLT4gIC0xDQorZHFjdG00ODIgY29tcGFyZXRvdG1hZyAxMjMuNDU2MEUrODkgMTIzLjQ1NkUrODkgIC0+ICAtMQ0KK2RxY3RtNDgzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NkUtODkgIC0+ICAgMA0KK2RxY3RtNDg3IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDAwMDAwMDBFKzg5ICAtPiAgIDENCitkcWN0bTQ4OCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMDAwMDBFLTg5ICAtPiAgIDENCitkcWN0bTQ4OSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDAwMEUrODkgIC0+ICAgMQ0KK2RxY3RtNDkwIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjAwMDAwMDBFLTg5ICAtPiAgIDENCitkcWN0bTQ5MSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMDAwMDBFKzg5ICAtPiAgIDENCitkcWN0bTQ5MiBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDAwMEUtODkgIC0+ICAgMQ0KK2RxY3RtNDkzIGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUrODkgMTIzLjQ1NjAwMDBFKzg5ICAtPiAgIDENCitkcWN0bTQ5NCBjb21wYXJldG90bWFnIDEyMy40NTZFLTg5IDEyMy40NTYwMDBFLTg5ICAtPiAgIDENCitkcWN0bTQ5NSBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTYwMEUrODkgIC0+ICAgMQ0KK2RxY3RtNDk2IGNvbXBhcmV0b3RtYWcgMTIzLjQ1NkUtODkgMTIzLjQ1NjBFLTg5ICAtPiAgIDENCitkcWN0bTQ5NyBjb21wYXJldG90bWFnIDEyMy40NTZFKzg5IDEyMy40NTZFKzg5ICAtPiAgIDANCisNCistLSB3aWRlLXJhbmdpbmcsIGFyb3VuZCBwcmVjaXNpb247IHNpZ25zIGVxdWFsDQorZHFjdG00OTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNyAgICAgLT4gICAxDQorZHFjdG00OTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNiAgICAgLT4gICAxDQorZHFjdG01MDAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNSAgICAgLT4gICAxDQorZHFjdG01MDEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xNCAgICAgLT4gICAxDQorZHFjdG01MDIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMyAgICAgLT4gICAxDQorZHFjdG01MDMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMiAgICAgLT4gICAxDQorZHFjdG01MDQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMSAgICAgLT4gICAxDQorZHFjdG01MDUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xMCAgICAgLT4gICAxDQorZHFjdG01MDYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS05ICAgICAgLT4gICAxDQorZHFjdG01MDcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS04ICAgICAgLT4gICAxDQorZHFjdG01MDggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS03ICAgICAgLT4gICAxDQorZHFjdG01MDkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS02ICAgICAgLT4gICAxDQorZHFjdG01MTAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS01ICAgICAgLT4gICAxDQorZHFjdG01MTEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS00ICAgICAgLT4gICAxDQorZHFjdG01MTIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0zICAgICAgLT4gICAxDQorZHFjdG01MTMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0yICAgICAgLT4gICAxDQorZHFjdG01MTQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0xICAgICAgLT4gICAxDQorZHFjdG01MTUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRS0wICAgICAgLT4gICAwDQorZHFjdG01MTYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxICAgICAgLT4gIC0xDQorZHFjdG01MTcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsyICAgICAgLT4gIC0xDQorZHFjdG01MTggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSszICAgICAgLT4gIC0xDQorZHFjdG01MTkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs0ICAgICAgLT4gIC0xDQorZHFjdG01MjEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs1ICAgICAgLT4gIC0xDQorZHFjdG01MjIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs2ICAgICAgLT4gIC0xDQorZHFjdG01MjMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs3ICAgICAgLT4gIC0xDQorZHFjdG01MjQgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs4ICAgICAgLT4gIC0xDQorZHFjdG01MjUgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSs5ICAgICAgLT4gIC0xDQorZHFjdG01MjYgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMCAgICAgLT4gIC0xDQorZHFjdG01MjcgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMSAgICAgLT4gIC0xDQorZHFjdG01MjggY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMiAgICAgLT4gIC0xDQorZHFjdG01MjkgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxMyAgICAgLT4gIC0xDQorZHFjdG01MzAgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNCAgICAgLT4gIC0xDQorZHFjdG01MzEgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNSAgICAgLT4gIC0xDQorZHFjdG01MzIgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNiAgICAgLT4gIC0xDQorZHFjdG01MzMgY29tcGFyZXRvdG1hZyAgICAxICAgICAxRSsxNyAgICAgLT4gIC0xDQorLS0gTFIgc3dhcA0KK2RxY3RtNTM4IGNvbXBhcmV0b3RtYWcgICAgMUUtMTcgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTM5IGNvbXBhcmV0b3RtYWcgICAgMUUtMTYgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQwIGNvbXBhcmV0b3RtYWcgICAgMUUtMTUgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQxIGNvbXBhcmV0b3RtYWcgICAgMUUtMTQgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQyIGNvbXBhcmV0b3RtYWcgICAgMUUtMTMgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQzIGNvbXBhcmV0b3RtYWcgICAgMUUtMTIgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ0IGNvbXBhcmV0b3RtYWcgICAgMUUtMTEgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ1IGNvbXBhcmV0b3RtYWcgICAgMUUtMTAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ2IGNvbXBhcmV0b3RtYWcgICAgMUUtOSAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ3IGNvbXBhcmV0b3RtYWcgICAgMUUtOCAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ4IGNvbXBhcmV0b3RtYWcgICAgMUUtNyAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTQ5IGNvbXBhcmV0b3RtYWcgICAgMUUtNiAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTUwIGNvbXBhcmV0b3RtYWcgICAgMUUtNSAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTUxIGNvbXBhcmV0b3RtYWcgICAgMUUtNCAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTUyIGNvbXBhcmV0b3RtYWcgICAgMUUtMyAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTUzIGNvbXBhcmV0b3RtYWcgICAgMUUtMiAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTU0IGNvbXBhcmV0b3RtYWcgICAgMUUtMSAgIDEgICAgICAgIC0+ICAtMQ0KK2RxY3RtNTU1IGNvbXBhcmV0b3RtYWcgICAgMUUtMCAgIDEgICAgICAgIC0+ICAgMA0KK2RxY3RtNTU2IGNvbXBhcmV0b3RtYWcgICAgMUUrMSAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTU3IGNvbXBhcmV0b3RtYWcgICAgMUUrMiAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTU4IGNvbXBhcmV0b3RtYWcgICAgMUUrMyAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTU5IGNvbXBhcmV0b3RtYWcgICAgMUUrNCAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTYxIGNvbXBhcmV0b3RtYWcgICAgMUUrNSAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTYyIGNvbXBhcmV0b3RtYWcgICAgMUUrNiAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTYzIGNvbXBhcmV0b3RtYWcgICAgMUUrNyAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY0IGNvbXBhcmV0b3RtYWcgICAgMUUrOCAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY1IGNvbXBhcmV0b3RtYWcgICAgMUUrOSAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY2IGNvbXBhcmV0b3RtYWcgICAgMUUrMTAgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY3IGNvbXBhcmV0b3RtYWcgICAgMUUrMTEgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY4IGNvbXBhcmV0b3RtYWcgICAgMUUrMTIgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTY5IGNvbXBhcmV0b3RtYWcgICAgMUUrMTMgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTcwIGNvbXBhcmV0b3RtYWcgICAgMUUrMTQgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTcxIGNvbXBhcmV0b3RtYWcgICAgMUUrMTUgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTcyIGNvbXBhcmV0b3RtYWcgICAgMUUrMTYgIDEgICAgICAgIC0+ICAgMQ0KK2RxY3RtNTczIGNvbXBhcmV0b3RtYWcgICAgMUUrMTcgIDEgICAgICAgIC0+ICAgMQ0KKy0tIHNpbWlsYXIgd2l0aCBhIHVzZWZ1bCBjb2VmZmljaWVudCwgb25lIHNpZGUgb25seQ0KK2RxY3RtNTc4IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNyAgICAgLT4gICAxDQorZHFjdG01NzkgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTE2ICAgICAtPiAgIDENCitkcWN0bTU4MCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTUgICAgIC0+ICAgMQ0KK2RxY3RtNTgxIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xNCAgICAgLT4gICAxDQorZHFjdG01ODIgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEzICAgICAtPiAgIDENCitkcWN0bTU4MyBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMTIgICAgIC0+ICAgMQ0KK2RxY3RtNTg0IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0xMSAgICAgLT4gICAxDQorZHFjdG01ODUgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEwICAgICAtPiAgIDENCitkcWN0bTU4NiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtOSAgICAgIC0+ICAgMQ0KK2RxY3RtNTg3IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS04ICAgICAgLT4gICAxDQorZHFjdG01ODggY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTcgICAgICAtPiAgIDENCitkcWN0bTU4OSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtNiAgICAgIC0+ICAtMQ0KK2RxY3RtNTkwIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS01ICAgICAgLT4gIC0xDQorZHFjdG01OTEgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTQgICAgICAtPiAgLTENCitkcWN0bTU5MiBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMyAgICAgIC0+ICAtMQ0KK2RxY3RtNTkzIGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRS0yICAgICAgLT4gIC0xDQorZHFjdG01OTQgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFLTEgICAgICAtPiAgLTENCitkcWN0bTU5NSBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUtMCAgICAgIC0+ICAtMQ0KK2RxY3RtNTk2IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSsxICAgICAgLT4gIC0xDQorZHFjdG01OTcgY29tcGFyZXRvdG1hZyAgMC4wMDAwMDA5ODc2NTQzMjEgICAgIDFFKzIgICAgICAtPiAgLTENCitkcWN0bTU5OCBjb21wYXJldG90bWFnICAwLjAwMDAwMDk4NzY1NDMyMSAgICAgMUUrMyAgICAgIC0+ICAtMQ0KK2RxY3RtNTk5IGNvbXBhcmV0b3RtYWcgIDAuMDAwMDAwOTg3NjU0MzIxICAgICAxRSs0ICAgICAgLT4gIC0xDQorDQorLS0gY2hlY2sgc29tZSB1bml0LXkgdHJhcHMNCitkcWN0bTYwMCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwMSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwMiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwMyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwNCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwNSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwNiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwNyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwOCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYwOSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAxMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYxMCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMiAgICAgICAgICAgICAtPiAgIDENCitkcWN0bTYxMSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wICAgICAgICAgICAtPiAgIDENCitkcWN0bTYxMiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMCAgICAgICAgICAtPiAgIDENCitkcWN0bTYxMyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAgICAgICAgICAtPiAgIDENCitkcWN0bTYxNCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwICAgICAgICAtPiAgIDENCitkcWN0bTYxNSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMCAgICAgICAtPiAgIDENCitkcWN0bTYxNiBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAgICAgICAtPiAgIDENCitkcWN0bTYxNyBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwICAgICAtPiAgIDENCitkcWN0bTYxOCBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMCAgICAtPiAgIDENCitkcWN0bTYxOSBjb21wYXJldG90bWFnICAgMTIuMTIzNCAxMi4wMDAwMDAwMDAgICAtPiAgIDENCitkcWN0bTYyMCBjb21wYXJldG90bWFnICAtMTIgICAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyMSBjb21wYXJldG90bWFnICAtMTIuMCAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyMiBjb21wYXJldG90bWFnICAtMTIuMDAgICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyMyBjb21wYXJldG90bWFnICAtMTIuMDAwICAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyNCBjb21wYXJldG90bWFnICAtMTIuMDAwMCAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyNSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAgICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyNiBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwICAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyNyBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMCAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyOCBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAgIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYyOSBjb21wYXJldG90bWFnICAtMTIuMDAwMDAwMDAwIC0xMi4yMzQ1ICAtPiAgLTENCitkcWN0bTYzMCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIgICAgICAgICAgICAtPiAgIDENCitkcWN0bTYzMSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMCAgICAgICAgICAtPiAgIDENCitkcWN0bTYzMiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAgICAgICAgICAtPiAgIDENCitkcWN0bTYzMyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwICAgICAgICAtPiAgIDENCitkcWN0bTYzNCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMCAgICAgICAtPiAgIDENCitkcWN0bTYzNSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAgICAgICAtPiAgIDENCitkcWN0bTYzNiBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwICAgICAtPiAgIDENCitkcWN0bTYzNyBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMCAgICAtPiAgIDENCitkcWN0bTYzOCBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAgICAtPiAgIDENCitkcWN0bTYzOSBjb21wYXJldG90bWFnICAtMTIuMTIzNCAtMTIuMDAwMDAwMDAwICAtPiAgIDENCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RxY3RtNjQwIGNvbXBhcmV0b3RtYWcgICAwICAgICAwICAgIC0+ICAgMA0KK2RxY3RtNjQxIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wICAgIC0+ICAgMA0KK2RxY3RtNjQyIGNvbXBhcmV0b3RtYWcgICAwICAgIC0wLjAgIC0+ICAgMQ0KK2RxY3RtNjQzIGNvbXBhcmV0b3RtYWcgICAwICAgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjQ0IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwICAgIC0+ICAgMA0KK2RxY3RtNjQ1IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wICAgIC0+ICAgMA0KK2RxY3RtNjQ2IGNvbXBhcmV0b3RtYWcgIC0wICAgIC0wLjAgIC0+ICAgMQ0KK2RxY3RtNjQ3IGNvbXBhcmV0b3RtYWcgIC0wICAgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjQ4IGNvbXBhcmV0b3RtYWcgICAwLjAgICAwICAgIC0+ICAtMQ0KK2RxY3RtNjQ5IGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wICAgIC0+ICAtMQ0KK2RxY3RtNjUwIGNvbXBhcmV0b3RtYWcgICAwLjAgIC0wLjAgIC0+ICAgMA0KK2RxY3RtNjUxIGNvbXBhcmV0b3RtYWcgICAwLjAgICAwLjAgIC0+ICAgMA0KK2RxY3RtNjUyIGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwICAgIC0+ICAtMQ0KK2RxY3RtNjUzIGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wICAgIC0+ICAtMQ0KK2RxY3RtNjU0IGNvbXBhcmV0b3RtYWcgIC0wLjAgIC0wLjAgIC0+ICAgMA0KK2RxY3RtNjU1IGNvbXBhcmV0b3RtYWcgIC0wLjAgICAwLjAgIC0+ICAgMA0KKw0KK2RxY3RtNjU2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjU3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjU4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjU5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwLjAgIC0+ICAgMQ0KK2RxY3RtNjYwIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwICAgIC0+ICAgMQ0KK2RxY3RtNjYxIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwICAgIC0+ICAgMQ0KK2RxY3RtNjYyIGNvbXBhcmV0b3RtYWcgICAwRTEgICAwICAgIC0+ICAgMQ0KK2RxY3RtNjYzIGNvbXBhcmV0b3RtYWcgICAwRTIgICAwICAgIC0+ICAgMQ0KK2RxY3RtNjY0IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTEgIC0+ICAgMA0KK2RxY3RtNjY1IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTEgIC0+ICAgMQ0KK2RxY3RtNjY2IGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTEgIC0+ICAgMA0KK2RxY3RtNjY3IGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTEgIC0+ICAgMQ0KK2RxY3RtNjY4IGNvbXBhcmV0b3RtYWcgIC0wRTEgIC0wRTIgIC0+ICAtMQ0KK2RxY3RtNjY5IGNvbXBhcmV0b3RtYWcgIC0wRTIgIC0wRTIgIC0+ICAgMA0KK2RxY3RtNjcwIGNvbXBhcmV0b3RtYWcgICAwRTEgIC0wRTIgIC0+ICAtMQ0KK2RxY3RtNjcxIGNvbXBhcmV0b3RtYWcgICAwRTIgIC0wRTIgIC0+ICAgMA0KK2RxY3RtNjcyIGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTEgIC0+ICAgMA0KK2RxY3RtNjczIGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTEgIC0+ICAgMQ0KK2RxY3RtNjc0IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTEgIC0+ICAgMA0KK2RxY3RtNjc1IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTEgIC0+ICAgMQ0KK2RxY3RtNjc2IGNvbXBhcmV0b3RtYWcgIC0wRTEgICAwRTIgIC0+ICAtMQ0KK2RxY3RtNjc3IGNvbXBhcmV0b3RtYWcgIC0wRTIgICAwRTIgIC0+ICAgMA0KK2RxY3RtNjc4IGNvbXBhcmV0b3RtYWcgICAwRTEgICAwRTIgIC0+ICAtMQ0KK2RxY3RtNjc5IGNvbXBhcmV0b3RtYWcgICAwRTIgICAwRTIgIC0+ICAgMA0KKw0KKy0tIHRyYWlsaW5nIHplcm9zOyB1bml0LXkNCitkcWN0bTY4MCBjb21wYXJldG90bWFnICAgMTIgICAgMTIgICAgICAgICAgICAtPiAgIDANCitkcWN0bTY4MSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMCAgICAgICAgICAtPiAgIDENCitkcWN0bTY4MiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAgICAgICAgICAtPiAgIDENCitkcWN0bTY4MyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwICAgICAgICAtPiAgIDENCitkcWN0bTY4NCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMCAgICAgICAtPiAgIDENCitkcWN0bTY4NSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAgICAgICAtPiAgIDENCitkcWN0bTY4NiBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwICAgICAtPiAgIDENCitkcWN0bTY4NyBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMCAgICAtPiAgIDENCitkcWN0bTY4OCBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAgICAtPiAgIDENCitkcWN0bTY4OSBjb21wYXJldG90bWFnICAgMTIgICAgMTIuMDAwMDAwMDAwICAtPiAgIDENCitkcWN0bTY5MCBjb21wYXJldG90bWFnICAgMTIgICAgICAgICAgICAgIDEyICAtPiAgIDANCitkcWN0bTY5MSBjb21wYXJldG90bWFnICAgMTIuMCAgICAgICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5MiBjb21wYXJldG90bWFnICAgMTIuMDAgICAgICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5MyBjb21wYXJldG90bWFnICAgMTIuMDAwICAgICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5NCBjb21wYXJldG90bWFnICAgMTIuMDAwMCAgICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5NSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAgICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5NiBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwICAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5NyBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMCAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5OCBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAgICAgIDEyICAtPiAgLTENCitkcWN0bTY5OSBjb21wYXJldG90bWFnICAgMTIuMDAwMDAwMDAwICAgIDEyICAtPiAgLTENCisNCistLSBvbGQgbG9uZyBvcGVyYW5kIGNoZWNrcw0KK2RxY3RtNzAxIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMDAgIDEgIC0+ICAgMQ0KK2RxY3RtNzAyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwMCAgIC0+ICAtMQ0KK2RxY3RtNzAzIGNvbXBhcmV0b3RtYWcgMTIzNDU2NzgwMCAgIDEgIC0+ICAgMQ0KK2RxY3RtNzA0IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODAwICAgIC0+ICAtMQ0KK2RxY3RtNzA1IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MCAgIDEgIC0+ICAgMQ0KK2RxY3RtNzA2IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwICAgIC0+ICAtMQ0KK2RxY3RtNzA3IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MSAgIDEgIC0+ICAgMQ0KK2RxY3RtNzA4IGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkxICAgIC0+ICAtMQ0KK2RxY3RtNzA5IGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5MDEgIDEgIC0+ICAgMQ0KK2RxY3RtNzEwIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODkwMSAgIC0+ICAtMQ0KK2RxY3RtNzExIGNvbXBhcmV0b3RtYWcgMTIzNDU2Nzg5NiAgIDEgIC0+ICAgMQ0KK2RxY3RtNzEyIGNvbXBhcmV0b3RtYWcgMSAxMjM0NTY3ODk2ICAgIC0+ICAtMQ0KK2RxY3RtNzEzIGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTEgIDEgIC0+ICAgMQ0KK2RxY3RtNzE0IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MSAgIC0+ICAtMQ0KK2RxY3RtNzE1IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTAxIDEgIC0+ICAgMQ0KK2RxY3RtNzE2IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5MDEgIC0+ICAtMQ0KK2RxY3RtNzE3IGNvbXBhcmV0b3RtYWcgLTEyMzQ1Njc4OTYgIDEgIC0+ICAgMQ0KK2RxY3RtNzE4IGNvbXBhcmV0b3RtYWcgMSAtMTIzNDU2Nzg5NiAgIC0+ICAtMQ0KKw0KKy0tIG9sZCByZXNpZHVlIGNhc2VzDQorZHFjdG03NDAgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTk5ICAgLT4gICAxDQorZHFjdG03NDEgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OTkgICAgLT4gICAxDQorZHFjdG03NDIgY29tcGFyZXRvdG1hZyAgMSAgMC45OTk5OSAgICAgLT4gICAxDQorZHFjdG03NDMgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwICAgICAgLT4gICAxDQorZHFjdG03NDQgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMSAgICAgLT4gIC0xDQorZHFjdG03NDUgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDEgICAgLT4gIC0xDQorZHFjdG03NDYgY29tcGFyZXRvdG1hZyAgMSAgMS4wMDAwMDAxICAgLT4gIC0xDQorZHFjdG03NTAgY29tcGFyZXRvdG1hZyAgMC45OTk5OTk5ICAxICAgLT4gIC0xDQorZHFjdG03NTEgY29tcGFyZXRvdG1hZyAgMC45OTk5OTkgICAxICAgLT4gIC0xDQorZHFjdG03NTIgY29tcGFyZXRvdG1hZyAgMC45OTk5OSAgICAxICAgLT4gIC0xDQorZHFjdG03NTMgY29tcGFyZXRvdG1hZyAgMS4wMDAwICAgICAxICAgLT4gIC0xDQorZHFjdG03NTQgY29tcGFyZXRvdG1hZyAgMS4wMDAwMSAgICAxICAgLT4gICAxDQorZHFjdG03NTUgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDEgICAxICAgLT4gICAxDQorZHFjdG03NTYgY29tcGFyZXRvdG1hZyAgMS4wMDAwMDAxICAxICAgLT4gICAxDQorDQorLS0gU3BlY2lhbHMNCitkcWN0bTc4MCBjb21wYXJldG90bWFnICBJbmYgIC1JbmYgICAtPiAgMA0KK2RxY3RtNzgxIGNvbXBhcmV0b3RtYWcgIEluZiAgLTEwMDAgIC0+ICAxDQorZHFjdG03ODIgY29tcGFyZXRvdG1hZyAgSW5mICAtMSAgICAgLT4gIDENCitkcWN0bTc4MyBjb21wYXJldG90bWFnICBJbmYgIC0wICAgICAtPiAgMQ0KK2RxY3RtNzg0IGNvbXBhcmV0b3RtYWcgIEluZiAgIDAgICAgIC0+ICAxDQorZHFjdG03ODUgY29tcGFyZXRvdG1hZyAgSW5mICAgMSAgICAgLT4gIDENCitkcWN0bTc4NiBjb21wYXJldG90bWFnICBJbmYgICAxMDAwICAtPiAgMQ0KK2RxY3RtNzg3IGNvbXBhcmV0b3RtYWcgIEluZiAgIEluZiAgIC0+ICAwDQorZHFjdG03ODggY29tcGFyZXRvdG1hZyAtMTAwMCAgSW5mICAgLT4gLTENCitkcWN0bTc4OSBjb21wYXJldG90bWFnIC1JbmYgICBJbmYgICAtPiAgMA0KK2RxY3RtNzkwIGNvbXBhcmV0b3RtYWcgLTEgICAgIEluZiAgIC0+IC0xDQorZHFjdG03OTEgY29tcGFyZXRvdG1hZyAtMCAgICAgSW5mICAgLT4gLTENCitkcWN0bTc5MiBjb21wYXJldG90bWFnICAwICAgICBJbmYgICAtPiAtMQ0KK2RxY3RtNzkzIGNvbXBhcmV0b3RtYWcgIDEgICAgIEluZiAgIC0+IC0xDQorZHFjdG03OTQgY29tcGFyZXRvdG1hZyAgMTAwMCAgSW5mICAgLT4gLTENCitkcWN0bTc5NSBjb21wYXJldG90bWFnICBJbmYgICBJbmYgICAtPiAgMA0KKw0KK2RxY3RtODAwIGNvbXBhcmV0b3RtYWcgLUluZiAgLUluZiAgIC0+ICAwDQorZHFjdG04MDEgY29tcGFyZXRvdG1hZyAtSW5mICAtMTAwMCAgLT4gIDENCitkcWN0bTgwMiBjb21wYXJldG90bWFnIC1JbmYgIC0xICAgICAtPiAgMQ0KK2RxY3RtODAzIGNvbXBhcmV0b3RtYWcgLUluZiAgLTAgICAgIC0+ICAxDQorZHFjdG04MDQgY29tcGFyZXRvdG1hZyAtSW5mICAgMCAgICAgLT4gIDENCitkcWN0bTgwNSBjb21wYXJldG90bWFnIC1JbmYgICAxICAgICAtPiAgMQ0KK2RxY3RtODA2IGNvbXBhcmV0b3RtYWcgLUluZiAgIDEwMDAgIC0+ICAxDQorZHFjdG04MDcgY29tcGFyZXRvdG1hZyAtSW5mICAgSW5mICAgLT4gIDANCitkcWN0bTgwOCBjb21wYXJldG90bWFnIC1JbmYgIC1JbmYgICAtPiAgMA0KK2RxY3RtODA5IGNvbXBhcmV0b3RtYWcgLTEwMDAgLUluZiAgIC0+IC0xDQorZHFjdG04MTAgY29tcGFyZXRvdG1hZyAtMSAgICAtSW5mICAgLT4gLTENCitkcWN0bTgxMSBjb21wYXJldG90bWFnIC0wICAgIC1JbmYgICAtPiAtMQ0KK2RxY3RtODEyIGNvbXBhcmV0b3RtYWcgIDAgICAgLUluZiAgIC0+IC0xDQorZHFjdG04MTMgY29tcGFyZXRvdG1hZyAgMSAgICAtSW5mICAgLT4gLTENCitkcWN0bTgxNCBjb21wYXJldG90bWFnICAxMDAwIC1JbmYgICAtPiAtMQ0KK2RxY3RtODE1IGNvbXBhcmV0b3RtYWcgIEluZiAgLUluZiAgIC0+ICAwDQorDQorZHFjdG04MjEgY29tcGFyZXRvdG1hZyAgTmFOIC1JbmYgICAgLT4gIDENCitkcWN0bTgyMiBjb21wYXJldG90bWFnICBOYU4gLTEwMDAgICAtPiAgMQ0KK2RxY3RtODIzIGNvbXBhcmV0b3RtYWcgIE5hTiAtMSAgICAgIC0+ICAxDQorZHFjdG04MjQgY29tcGFyZXRvdG1hZyAgTmFOIC0wICAgICAgLT4gIDENCitkcWN0bTgyNSBjb21wYXJldG90bWFnICBOYU4gIDAgICAgICAtPiAgMQ0KK2RxY3RtODI2IGNvbXBhcmV0b3RtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQorZHFjdG04MjcgY29tcGFyZXRvdG1hZyAgTmFOICAxMDAwICAgLT4gIDENCitkcWN0bTgyOCBjb21wYXJldG90bWFnICBOYU4gIEluZiAgICAtPiAgMQ0KK2RxY3RtODI5IGNvbXBhcmV0b3RtYWcgIE5hTiAgTmFOICAgIC0+ICAwDQorZHFjdG04MzAgY29tcGFyZXRvdG1hZyAtSW5mICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzEgY29tcGFyZXRvdG1hZyAtMTAwMCBOYU4gICAgLT4gIC0xDQorZHFjdG04MzIgY29tcGFyZXRvdG1hZyAtMSAgICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzMgY29tcGFyZXRvdG1hZyAtMCAgICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzQgY29tcGFyZXRvdG1hZyAgMCAgICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzUgY29tcGFyZXRvdG1hZyAgMSAgICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzYgY29tcGFyZXRvdG1hZyAgMTAwMCBOYU4gICAgLT4gIC0xDQorZHFjdG04MzcgY29tcGFyZXRvdG1hZyAgSW5mICBOYU4gICAgLT4gIC0xDQorZHFjdG04MzggY29tcGFyZXRvdG1hZyAtTmFOIC1OYU4gICAgLT4gIDANCitkcWN0bTgzOSBjb21wYXJldG90bWFnICtOYU4gLU5hTiAgICAtPiAgMA0KK2RxY3RtODQwIGNvbXBhcmV0b3RtYWcgLU5hTiArTmFOICAgIC0+ICAwDQorDQorZHFjdG04NDEgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgLT4gIDANCitkcWN0bTg0MiBjb21wYXJldG90bWFnICBzTmFOIC1OYU4gICAtPiAgLTENCitkcWN0bTg0MyBjb21wYXJldG90bWFnICBzTmFOIC1JbmYgICAtPiAgMQ0KK2RxY3RtODQ0IGNvbXBhcmV0b3RtYWcgIHNOYU4gLTEwMDAgIC0+ICAxDQorZHFjdG04NDUgY29tcGFyZXRvdG1hZyAgc05hTiAtMSAgICAgLT4gIDENCitkcWN0bTg0NiBjb21wYXJldG90bWFnICBzTmFOIC0wICAgICAtPiAgMQ0KK2RxY3RtODQ3IGNvbXBhcmV0b3RtYWcgIHNOYU4gIDAgICAgIC0+ICAxDQorZHFjdG04NDggY29tcGFyZXRvdG1hZyAgc05hTiAgMSAgICAgLT4gIDENCitkcWN0bTg0OSBjb21wYXJldG90bWFnICBzTmFOICAxMDAwICAtPiAgMQ0KK2RxY3RtODUwIGNvbXBhcmV0b3RtYWcgIHNOYU4gIE5hTiAgIC0+ICAtMQ0KK2RxY3RtODUxIGNvbXBhcmV0b3RtYWcgIHNOYU4gc05hTiAgIC0+ICAwDQorDQorZHFjdG04NTIgY29tcGFyZXRvdG1hZyAtc05hTiBzTmFOICAgLT4gIDANCitkcWN0bTg1MyBjb21wYXJldG90bWFnIC1OYU4gIHNOYU4gICAtPiAgMQ0KK2RxY3RtODU0IGNvbXBhcmV0b3RtYWcgLUluZiAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODU1IGNvbXBhcmV0b3RtYWcgLTEwMDAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODU2IGNvbXBhcmV0b3RtYWcgLTEgICAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODU3IGNvbXBhcmV0b3RtYWcgLTAgICAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODU4IGNvbXBhcmV0b3RtYWcgIDAgICAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODU5IGNvbXBhcmV0b3RtYWcgIDEgICAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODYwIGNvbXBhcmV0b3RtYWcgIDEwMDAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODYxIGNvbXBhcmV0b3RtYWcgIEluZiAgc05hTiAgIC0+ICAtMQ0KK2RxY3RtODYyIGNvbXBhcmV0b3RtYWcgIE5hTiAgc05hTiAgIC0+ICAxDQorZHFjdG04NjMgY29tcGFyZXRvdG1hZyAgc05hTiBzTmFOICAgLT4gIDANCisNCitkcWN0bTg3MSBjb21wYXJldG90bWFnICAtc05hTiAtc05hTiAgLT4gIDANCitkcWN0bTg3MiBjb21wYXJldG90bWFnICAtc05hTiAtTmFOICAgLT4gIC0xDQorZHFjdG04NzMgY29tcGFyZXRvdG1hZyAgLXNOYU4gLUluZiAgIC0+ICAxDQorZHFjdG04NzQgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEwMDAgIC0+ICAxDQorZHFjdG04NzUgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTEgICAgIC0+ICAxDQorZHFjdG04NzYgY29tcGFyZXRvdG1hZyAgLXNOYU4gLTAgICAgIC0+ICAxDQorZHFjdG04NzcgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDAgICAgIC0+ICAxDQorZHFjdG04NzggY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEgICAgIC0+ICAxDQorZHFjdG04NzkgY29tcGFyZXRvdG1hZyAgLXNOYU4gIDEwMDAgIC0+ICAxDQorZHFjdG04ODAgY29tcGFyZXRvdG1hZyAgLXNOYU4gIE5hTiAgIC0+ICAtMQ0KK2RxY3RtODgxIGNvbXBhcmV0b3RtYWcgIC1zTmFOIHNOYU4gICAtPiAgMA0KKw0KK2RxY3RtODgyIGNvbXBhcmV0b3RtYWcgLXNOYU4gLXNOYU4gICAtPiAgMA0KK2RxY3RtODgzIGNvbXBhcmV0b3RtYWcgLU5hTiAgLXNOYU4gICAtPiAgMQ0KK2RxY3RtODg0IGNvbXBhcmV0b3RtYWcgLUluZiAgLXNOYU4gICAtPiAgLTENCitkcWN0bTg4NSBjb21wYXJldG90bWFnIC0xMDAwIC1zTmFOICAgLT4gIC0xDQorZHFjdG04ODYgY29tcGFyZXRvdG1hZyAtMSAgICAtc05hTiAgIC0+ICAtMQ0KK2RxY3RtODg3IGNvbXBhcmV0b3RtYWcgLTAgICAgLXNOYU4gICAtPiAgLTENCitkcWN0bTg4OCBjb21wYXJldG90bWFnICAwICAgIC1zTmFOICAgLT4gIC0xDQorZHFjdG04ODkgY29tcGFyZXRvdG1hZyAgMSAgICAtc05hTiAgIC0+ICAtMQ0KK2RxY3RtODkwIGNvbXBhcmV0b3RtYWcgIDEwMDAgLXNOYU4gICAtPiAgLTENCitkcWN0bTg5MSBjb21wYXJldG90bWFnICBJbmYgIC1zTmFOICAgLT4gIC0xDQorZHFjdG04OTIgY29tcGFyZXRvdG1hZyAgTmFOICAtc05hTiAgIC0+ICAxDQorZHFjdG04OTMgY29tcGFyZXRvdG1hZyAgc05hTiAtc05hTiAgIC0+ICAwDQorDQorLS0gTmFOcyB3aXRoIHBheWxvYWQNCitkcWN0bTk2MCBjb21wYXJldG90bWFnICBOYU45IC1JbmYgICAtPiAgMQ0KK2RxY3RtOTYxIGNvbXBhcmV0b3RtYWcgIE5hTjggIDk5OSAgIC0+ICAxDQorZHFjdG05NjIgY29tcGFyZXRvdG1hZyAgTmFONzcgSW5mICAgLT4gIDENCitkcWN0bTk2MyBjb21wYXJldG90bWFnIC1OYU42NyBOYU41ICAtPiAgMQ0KK2RxY3RtOTY0IGNvbXBhcmV0b3RtYWcgLUluZiAgLU5hTjQgIC0+ICAtMQ0KK2RxY3RtOTY1IGNvbXBhcmV0b3RtYWcgLTk5OSAgLU5hTjMzIC0+ICAtMQ0KK2RxY3RtOTY2IGNvbXBhcmV0b3RtYWcgIEluZiAgIE5hTjIgIC0+ICAtMQ0KKw0KK2RxY3RtOTcwIGNvbXBhcmV0b3RtYWcgLU5hTjQxIC1OYU40MiAtPiAtMQ0KK2RxY3RtOTcxIGNvbXBhcmV0b3RtYWcgK05hTjQxIC1OYU40MiAtPiAtMQ0KK2RxY3RtOTcyIGNvbXBhcmV0b3RtYWcgLU5hTjQxICtOYU40MiAtPiAtMQ0KK2RxY3RtOTczIGNvbXBhcmV0b3RtYWcgK05hTjQxICtOYU40MiAtPiAtMQ0KK2RxY3RtOTc0IGNvbXBhcmV0b3RtYWcgLU5hTjQyIC1OYU4wMSAtPiAgMQ0KK2RxY3RtOTc1IGNvbXBhcmV0b3RtYWcgK05hTjQyIC1OYU4wMSAtPiAgMQ0KK2RxY3RtOTc2IGNvbXBhcmV0b3RtYWcgLU5hTjQyICtOYU4wMSAtPiAgMQ0KK2RxY3RtOTc3IGNvbXBhcmV0b3RtYWcgK05hTjQyICtOYU4wMSAtPiAgMQ0KKw0KK2RxY3RtOTgwIGNvbXBhcmV0b3RtYWcgLXNOYU43NzEgLXNOYU43NzIgLT4gLTENCitkcWN0bTk4MSBjb21wYXJldG90bWFnICtzTmFONzcxIC1zTmFONzcyIC0+IC0xDQorZHFjdG05ODIgY29tcGFyZXRvdG1hZyAtc05hTjc3MSArc05hTjc3MiAtPiAtMQ0KK2RxY3RtOTgzIGNvbXBhcmV0b3RtYWcgK3NOYU43NzEgK3NOYU43NzIgLT4gLTENCitkcWN0bTk4NCBjb21wYXJldG90bWFnIC1zTmFONzcyIC1zTmFONzcxIC0+ICAxDQorZHFjdG05ODUgY29tcGFyZXRvdG1hZyArc05hTjc3MiAtc05hTjc3MSAtPiAgMQ0KK2RxY3RtOTg2IGNvbXBhcmV0b3RtYWcgLXNOYU43NzIgK3NOYU43NzEgLT4gIDENCitkcWN0bTk4NyBjb21wYXJldG90bWFnICtzTmFONzcyICtzTmFONzcxIC0+ICAxDQorDQorZHFjdG05OTEgY29tcGFyZXRvdG1hZyAtc05hTjk5IC1JbmYgICAgLT4gIDENCitkcWN0bTk5MiBjb21wYXJldG90bWFnICBzTmFOOTggLTExICAgICAtPiAgMQ0KK2RxY3RtOTkzIGNvbXBhcmV0b3RtYWcgIHNOYU45NyAgTmFOICAgIC0+IC0xDQorZHFjdG05OTQgY29tcGFyZXRvdG1hZyAgc05hTjE2IHNOYU45NCAgLT4gLTENCitkcWN0bTk5NSBjb21wYXJldG90bWFnICBOYU44NSAgc05hTjgzICAtPiAgMQ0KK2RxY3RtOTk2IGNvbXBhcmV0b3RtYWcgLUluZiAgICBzTmFOOTIgIC0+IC0xDQorZHFjdG05OTcgY29tcGFyZXRvdG1hZyAgMDg4ICAgIHNOYU44MSAgLT4gLTENCitkcWN0bTk5OCBjb21wYXJldG90bWFnICBJbmYgICAgc05hTjkwICAtPiAtMQ0KK2RxY3RtOTk5IGNvbXBhcmV0b3RtYWcgIE5hTiAgIC1zTmFOODkgIC0+ICAxDQorDQorLS0gc3ByZWFkIHplcm9zDQorZHFjdG0xMTEwIGNvbXBhcmV0b3RtYWcgICAwRS02MTQzICAwICAgICAgICAtPiAgLTENCitkcWN0bTExMTEgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTAgICAgICAgIC0+ICAtMQ0KK2RxY3RtMTExMiBjb21wYXJldG90bWFnICAtMEUtNjE0MyAgMCAgICAgICAgLT4gIC0xDQorZHFjdG0xMTEzIGNvbXBhcmV0b3RtYWcgIC0wRS02MTQzIC0wICAgICAgICAtPiAgLTENCitkcWN0bTExMTQgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTENCitkcWN0bTExMTUgY29tcGFyZXRvdG1hZyAgIDBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTENCitkcWN0bTExMTYgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgIDBFKzYxNDQgICAtPiAgLTENCitkcWN0bTExMTcgY29tcGFyZXRvdG1hZyAgLTBFLTYxNDMgLTBFKzYxNDQgICAtPiAgLTENCitkcWN0bTExMTggY29tcGFyZXRvdG1hZyAgIDAgICAgICAgMEUrNjE0NCAgIC0+ICAtMQ0KK2RxY3RtMTExOSBjb21wYXJldG90bWFnICAgMCAgICAgIC0wRSs2MTQ0ICAgLT4gIC0xDQorZHFjdG0xMTIwIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgIDBFKzYxNDQgICAtPiAgLTENCitkcWN0bTExMjEgY29tcGFyZXRvdG1hZyAgLTAgICAgICAtMEUrNjE0NCAgIC0+ICAtMQ0KKw0KK2RxY3RtMTEzMCBjb21wYXJldG90bWFnICAgMEUrNjE0NCAgMCAgICAgICAgLT4gICAxDQorZHFjdG0xMTMxIGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wICAgICAgICAtPiAgIDENCitkcWN0bTExMzIgY29tcGFyZXRvdG1hZyAgLTBFKzYxNDQgIDAgICAgICAgIC0+ICAgMQ0KK2RxY3RtMTEzMyBjb21wYXJldG90bWFnICAtMEUrNjE0NCAtMCAgICAgICAgLT4gICAxDQorZHFjdG0xMTM0IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxDQorZHFjdG0xMTM1IGNvbXBhcmV0b3RtYWcgICAwRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxDQorZHFjdG0xMTM2IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0ICAwRS02MTQzICAgLT4gICAxDQorZHFjdG0xMTM3IGNvbXBhcmV0b3RtYWcgIC0wRSs2MTQ0IC0wRS02MTQzICAgLT4gICAxDQorZHFjdG0xMTM4IGNvbXBhcmV0b3RtYWcgICAwICAgICAgIDBFLTYxNDMgICAtPiAgIDENCitkcWN0bTExMzkgY29tcGFyZXRvdG1hZyAgIDAgICAgICAtMEUtNjE0MyAgIC0+ICAgMQ0KK2RxY3RtMTE0MCBjb21wYXJldG90bWFnICAtMCAgICAgICAwRS02MTQzICAgLT4gICAxDQorZHFjdG0xMTQxIGNvbXBhcmV0b3RtYWcgIC0wICAgICAgLTBFLTYxNDMgICAtPiAgIDENCisNCistLSBOdWxsIHRlc3RzDQorZHFjdG05OTkwIGNvbXBhcmV0b3RtYWcgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFjdG05OTkxIGNvbXBhcmV0b3RtYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weS5kZWNUZXN0CmluZGV4IDBjNjI0MzEuLjcyNTRkNjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHkuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5LmRlY1Rlc3QKQEAgLTEsODggKzEsODggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFDb3B5LmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrCi1kcWNweTAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwCi0KLS0tIEluZmluaXRpZXMKLWRxY3B5MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5Ci1kcWNweTAxMiBjb3B5ICAtSW5maW5pdHkgICAtPiAtSW5maW5pdHkKLQotLS0gTmFOcywgMCBwYXlsb2FkCi1kcWNweTAyMSBjb3B5ICAgICAgICAgTmFOICAtPiBOYU4KLWRxY3B5MDIyIGNvcHkgICAgICAgIC1OYU4gIC0+IC1OYU4KLWRxY3B5MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4KLWRxY3B5MDI0IGNvcHkgICAgICAgLXNOYU4gIC0+IC1zTmFOCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWRxY3B5MDMxIGNvcHkgICAgICAgTmFOMTAgIC0+IE5hTjEwCi1kcWNweTAzMiBjb3B5ICAgICAgLU5hTjEwICAtPiAtTmFOMTAKLWRxY3B5MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMAotZHFjcHkwMzQgY29weSAgICAgLXNOYU4xMCAgLT4gLXNOYU4xMAotZHFjcHkwMzUgY29weSAgICAgICBOYU43ICAgLT4gTmFONwotZHFjcHkwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcKLWRxY3B5MDM3IGNvcHkgICAgICBzTmFOMTAxIC0+IHNOYU4xMDEKLWRxY3B5MDM4IGNvcHkgICAgIC1zTmFOMTAxIC0+IC1zTmFOMTAxCi0KLS0tIGZpbml0ZXMKLWRxY3B5MTAxIGNvcHkgICAgICAgICAgNyAgIC0+IDcKLWRxY3B5MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03Ci1kcWNweTEwMyBjb3B5ICAgICAgICAgNzUgICAtPiA3NQotZHFjcHkxMDQgY29weSAgICAgICAgLTc1ICAgLT4gLTc1Ci1kcWNweTEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwCi1kcWNweTEwNiBjb3B5ICAgICAgLTcuNTAgICAtPiAtNy41MAotZHFjcHkxMDcgY29weSAgICAgICA3LjUwMCAgLT4gNy41MDAKLWRxY3B5MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMAotCi0tLSB6ZXJvcwotZHFjcHkxMTEgY29weSAgICAgICAgICAwICAgLT4gMAotZHFjcHkxMTIgY29weSAgICAgICAgIC0wICAgLT4gLTAKLWRxY3B5MTEzIGNvcHkgICAgICAgMEUrNCAgIC0+IDBFKzQKLWRxY3B5MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0Ci1kcWNweTExNSBjb3B5ICAgICAwLjAwMDAgICAtPiAwLjAwMDAKLWRxY3B5MTE2IGNvcHkgICAgLTAuMDAwMCAgIC0+IC0wLjAwMDAKLWRxY3B5MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotZHFjcHkxMTggY29weSAgICAgLTBFLTE0MSAgLT4gLTBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZHFjcHkxMjEgY29weSAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKLWRxY3B5MTIyIGNvcHkgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCi1kcWNweTEyMyBjb3B5ICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotZHFjcHkxMjQgY29weSAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRxY3B5MTMxIGNvcHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcWNweTEzMiBjb3B5ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCi1kcWNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFjcHkxMzQgY29weSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgotCi1kcWNweTEzNSBjb3B5ICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2Ci1kcWNweTEzNiBjb3B5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFjcHkxMzcgY29weSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MwotZHFjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxQ29weS5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkcWNweTAwMSBjb3B5ICAgICAgICs3LjUwICAtPiA3LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RxY3B5MDExIGNvcHkgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorZHFjcHkwMTIgY29weSAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZHFjcHkwMjEgY29weSAgICAgICAgIE5hTiAgLT4gTmFODQorZHFjcHkwMjIgY29weSAgICAgICAgLU5hTiAgLT4gLU5hTg0KK2RxY3B5MDIzIGNvcHkgICAgICAgIHNOYU4gIC0+IHNOYU4NCitkcWNweTAyNCBjb3B5ICAgICAgIC1zTmFOICAtPiAtc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkcWNweTAzMSBjb3B5ICAgICAgIE5hTjEwICAtPiBOYU4xMA0KK2RxY3B5MDMyIGNvcHkgICAgICAtTmFOMTAgIC0+IC1OYU4xMA0KK2RxY3B5MDMzIGNvcHkgICAgICBzTmFOMTAgIC0+IHNOYU4xMA0KK2RxY3B5MDM0IGNvcHkgICAgIC1zTmFOMTAgIC0+IC1zTmFOMTANCitkcWNweTAzNSBjb3B5ICAgICAgIE5hTjcgICAtPiBOYU43DQorZHFjcHkwMzYgY29weSAgICAgIC1OYU43ICAgLT4gLU5hTjcNCitkcWNweTAzNyBjb3B5ICAgICAgc05hTjEwMSAtPiBzTmFOMTAxDQorZHFjcHkwMzggY29weSAgICAgLXNOYU4xMDEgLT4gLXNOYU4xMDENCisNCistLSBmaW5pdGVzDQorZHFjcHkxMDEgY29weSAgICAgICAgICA3ICAgLT4gNw0KK2RxY3B5MTAyIGNvcHkgICAgICAgICAtNyAgIC0+IC03DQorZHFjcHkxMDMgY29weSAgICAgICAgIDc1ICAgLT4gNzUNCitkcWNweTEwNCBjb3B5ICAgICAgICAtNzUgICAtPiAtNzUNCitkcWNweTEwNSBjb3B5ICAgICAgIDcuNTAgICAtPiA3LjUwDQorZHFjcHkxMDYgY29weSAgICAgIC03LjUwICAgLT4gLTcuNTANCitkcWNweTEwNyBjb3B5ICAgICAgIDcuNTAwICAtPiA3LjUwMA0KK2RxY3B5MTA4IGNvcHkgICAgICAtNy41MDAgIC0+IC03LjUwMA0KKw0KKy0tIHplcm9zDQorZHFjcHkxMTEgY29weSAgICAgICAgICAwICAgLT4gMA0KK2RxY3B5MTEyIGNvcHkgICAgICAgICAtMCAgIC0+IC0wDQorZHFjcHkxMTMgY29weSAgICAgICAwRSs0ICAgLT4gMEUrNA0KK2RxY3B5MTE0IGNvcHkgICAgICAtMEUrNCAgIC0+IC0wRSs0DQorZHFjcHkxMTUgY29weSAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQorZHFjcHkxMTYgY29weSAgICAtMC4wMDAwICAgLT4gLTAuMDAwMA0KK2RxY3B5MTE3IGNvcHkgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KK2RxY3B5MTE4IGNvcHkgICAgIC0wRS0xNDEgIC0+IC0wRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RxY3B5MTIxIGNvcHkgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQorZHFjcHkxMjIgY29weSAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCitkcWNweTEyMyBjb3B5ICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KK2RxY3B5MTI0IGNvcHkgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkcWNweTEzMSBjb3B5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxY3B5MTMyIGNvcHkgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCitkcWNweTEzMyBjb3B5ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxY3B5MTM0IGNvcHkgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCisNCitkcWNweTEzNSBjb3B5ICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQorZHFjcHkxMzYgY29weSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCitkcWNweTEzNyBjb3B5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQorZHFjcHkxMzggY29weSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5QWJzLmRlY1Rlc3QKaW5kZXggMTZiY2I0ZS4uYmRlYzAyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weUFicy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlBYnMuZGVjVGVzdApAQCAtMSw4OCArMSw4OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUNvcHlBYnMuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIHNldCBzaWduIHRvIHplcm8gICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sKLWRxY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTAKLQotLS0gSW5maW5pdGllcwotZHFjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkKLWRxY3BhMDEyIGNvcHlhYnMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZHFjcGEwMjEgY29weWFicyAgICAgICAgIE5hTiAgLT4gTmFOCi1kcWNwYTAyMiBjb3B5YWJzICAgICAgICAtTmFOICAtPiBOYU4KLWRxY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4KLWRxY3BhMDI0IGNvcHlhYnMgICAgICAgLXNOYU4gIC0+IHNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZHFjcGEwMzEgY29weWFicyAgICAgICBOYU4xMCAgLT4gTmFOMTAKLWRxY3BhMDMyIGNvcHlhYnMgICAgICAtTmFOMTUgIC0+IE5hTjE1Ci1kcWNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUKLWRxY3BhMDM0IGNvcHlhYnMgICAgIC1zTmFOMTAgIC0+IHNOYU4xMAotZHFjcGEwMzUgY29weWFicyAgICAgICBOYU43ICAgLT4gTmFONwotZHFjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONwotZHFjcGEwMzcgY29weWFicyAgICAgIHNOYU4xMDEgLT4gc05hTjEwMQotZHFjcGEwMzggY29weWFicyAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQotCi0tLSBmaW5pdGVzCi1kcWNwYTEwMSBjb3B5YWJzICAgICAgICAgIDcgICAtPiA3Ci1kcWNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3Ci1kcWNwYTEwMyBjb3B5YWJzICAgICAgICAgNzUgICAtPiA3NQotZHFjcGExMDQgY29weWFicyAgICAgICAgLTc1ICAgLT4gNzUKLWRxY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTAKLWRxY3BhMTA2IGNvcHlhYnMgICAgICAtNy4xMCAgIC0+IDcuMTAKLWRxY3BhMTA3IGNvcHlhYnMgICAgICAgNy41MDAgIC0+IDcuNTAwCi1kcWNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMAotCi0tLSB6ZXJvcwotZHFjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMAotZHFjcGExMTIgY29weWFicyAgICAgICAgIC0wICAgLT4gMAotZHFjcGExMTMgY29weWFicyAgICAgICAwRSs2ICAgLT4gMEUrNgotZHFjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNgotZHFjcGExMTUgY29weWFicyAgICAgMC4wMDAwICAgLT4gMC4wMDAwCi1kcWNwYTExNiBjb3B5YWJzICAgIC0wLjAwMDAgICAtPiAwLjAwMDAKLWRxY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotZHFjcGExMTggY29weWFicyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kcWNwYTEyMSBjb3B5YWJzICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFjcGExMjIgY29weWFicyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKLWRxY3BhMTIzIGNvcHlhYnMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCi1kcWNwYTEyNCBjb3B5YWJzICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotCi0tLSBObWF4LCBObWluLCBOdGlueQotZHFjcGExMzEgY29weWFicyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxY3BhMTMyIGNvcHlhYnMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKLWRxY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcWNwYTEzNCBjb3B5YWJzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2Ci0KLWRxY3BhMTM1IGNvcHlhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKLWRxY3BhMTM2IGNvcHlhYnMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcWNwYTEzNyBjb3B5YWJzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTQzCi1kcWNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFDb3B5QWJzLmRlY1Rlc3QgLS0gcXVpZXQgZGVjUXVhZCBjb3B5IGFuZCBzZXQgc2lnbiB0byB6ZXJvICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2RxY3BhMDAxIGNvcHlhYnMgICAgICAgKzcuNTAgIC0+IDcuNTANCisNCistLSBJbmZpbml0aWVzDQorZHFjcGEwMTEgY29weWFicyAgSW5maW5pdHkgICAgLT4gSW5maW5pdHkNCitkcWNwYTAxMiBjb3B5YWJzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQ0KKw0KKy0tIE5hTnMsIDAgcGF5bG9hZA0KK2RxY3BhMDIxIGNvcHlhYnMgICAgICAgICBOYU4gIC0+IE5hTg0KK2RxY3BhMDIyIGNvcHlhYnMgICAgICAgIC1OYU4gIC0+IE5hTg0KK2RxY3BhMDIzIGNvcHlhYnMgICAgICAgIHNOYU4gIC0+IHNOYU4NCitkcWNwYTAyNCBjb3B5YWJzICAgICAgIC1zTmFOICAtPiBzTmFODQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2RxY3BhMDMxIGNvcHlhYnMgICAgICAgTmFOMTAgIC0+IE5hTjEwDQorZHFjcGEwMzIgY29weWFicyAgICAgIC1OYU4xNSAgLT4gTmFOMTUNCitkcWNwYTAzMyBjb3B5YWJzICAgICAgc05hTjE1ICAtPiBzTmFOMTUNCitkcWNwYTAzNCBjb3B5YWJzICAgICAtc05hTjEwICAtPiBzTmFOMTANCitkcWNwYTAzNSBjb3B5YWJzICAgICAgIE5hTjcgICAtPiBOYU43DQorZHFjcGEwMzYgY29weWFicyAgICAgIC1OYU43ICAgLT4gTmFONw0KK2RxY3BhMDM3IGNvcHlhYnMgICAgICBzTmFOMTAxIC0+IHNOYU4xMDENCitkcWNwYTAzOCBjb3B5YWJzICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQorDQorLS0gZmluaXRlcw0KK2RxY3BhMTAxIGNvcHlhYnMgICAgICAgICAgNyAgIC0+IDcNCitkcWNwYTEwMiBjb3B5YWJzICAgICAgICAgLTcgICAtPiA3DQorZHFjcGExMDMgY29weWFicyAgICAgICAgIDc1ICAgLT4gNzUNCitkcWNwYTEwNCBjb3B5YWJzICAgICAgICAtNzUgICAtPiA3NQ0KK2RxY3BhMTA1IGNvcHlhYnMgICAgICAgNy4xMCAgIC0+IDcuMTANCitkcWNwYTEwNiBjb3B5YWJzICAgICAgLTcuMTAgICAtPiA3LjEwDQorZHFjcGExMDcgY29weWFicyAgICAgICA3LjUwMCAgLT4gNy41MDANCitkcWNwYTEwOCBjb3B5YWJzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KKw0KKy0tIHplcm9zDQorZHFjcGExMTEgY29weWFicyAgICAgICAgICAwICAgLT4gMA0KK2RxY3BhMTEyIGNvcHlhYnMgICAgICAgICAtMCAgIC0+IDANCitkcWNwYTExMyBjb3B5YWJzICAgICAgIDBFKzYgICAtPiAwRSs2DQorZHFjcGExMTQgY29weWFicyAgICAgIC0wRSs2ICAgLT4gMEUrNg0KK2RxY3BhMTE1IGNvcHlhYnMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMA0KK2RxY3BhMTE2IGNvcHlhYnMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KK2RxY3BhMTE3IGNvcHlhYnMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQ0KK2RxY3BhMTE4IGNvcHlhYnMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQ0KKw0KKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQorZHFjcGExMjEgY29weWFicyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCitkcWNwYTEyMiBjb3B5YWJzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BhMTIzIGNvcHlhYnMgICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQorZHFjcGExMjQgY29weWFicyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RxY3BhMTMxIGNvcHlhYnMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFjcGExMzIgY29weWFicyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KK2RxY3BhMTMzIGNvcHlhYnMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFjcGExMzQgY29weWFicyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3Ng0KKw0KK2RxY3BhMTM1IGNvcHlhYnMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYNCitkcWNwYTEzNiBjb3B5YWJzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxY3BhMTM3IGNvcHlhYnMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCitkcWNwYTEzOCBjb3B5YWJzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlOZWdhdGUuZGVjVGVzdAppbmRleCA2MjUzZjVhLi5lYTAwODU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5TmVnYXRlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weU5lZ2F0ZS5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxQ29weU5lZ2F0ZS5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSBhbmQgbmVnYXRlICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZHFjcG4wMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTAKLQotLS0gSW5maW5pdGllcwotZHFjcG4wMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5Ci1kcWNwbjAxMiBjb3B5bmVnYXRlICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWRxY3BuMDIxIGNvcHluZWdhdGUgICAgICAgICBOYU4gIC0+IC1OYU4KLWRxY3BuMDIyIGNvcHluZWdhdGUgICAgICAgIC1OYU4gIC0+IE5hTgotZHFjcG4wMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4KLWRxY3BuMDI0IGNvcHluZWdhdGUgICAgICAgLXNOYU4gIC0+IHNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZHFjcG4wMzEgY29weW5lZ2F0ZSAgICAgICBOYU4xMyAgLT4gLU5hTjEzCi1kcWNwbjAzMiBjb3B5bmVnYXRlICAgICAgLU5hTjEzICAtPiBOYU4xMwotZHFjcG4wMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMwotZHFjcG4wMzQgY29weW5lZ2F0ZSAgICAgLXNOYU4xMyAgLT4gc05hTjEzCi1kcWNwbjAzNSBjb3B5bmVnYXRlICAgICAgIE5hTjcwICAtPiAtTmFONzAKLWRxY3BuMDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwCi1kcWNwbjAzNyBjb3B5bmVnYXRlICAgICAgc05hTjEwMSAtPiAtc05hTjEwMQotZHFjcG4wMzggY29weW5lZ2F0ZSAgICAgLXNOYU4xMDEgLT4gc05hTjEwMQotCi0tLSBmaW5pdGVzCi1kcWNwbjEwMSBjb3B5bmVnYXRlICAgICAgICAgIDcgICAtPiAtNwotZHFjcG4xMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNwotZHFjcG4xMDMgY29weW5lZ2F0ZSAgICAgICAgIDc1ICAgLT4gLTc1Ci1kcWNwbjEwNCBjb3B5bmVnYXRlICAgICAgICAtNzUgICAtPiA3NQotZHFjcG4xMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTAKLWRxY3BuMTA2IGNvcHluZWdhdGUgICAgICAtNy41MCAgIC0+IDcuNTAKLWRxY3BuMTA3IGNvcHluZWdhdGUgICAgICAgNy41MDAgIC0+IC03LjUwMAotZHFjcG4xMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDAKLQotLS0gemVyb3MKLWRxY3BuMTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wCi1kcWNwbjExMiBjb3B5bmVnYXRlICAgICAgICAgLTAgICAtPiAwCi1kcWNwbjExMyBjb3B5bmVnYXRlICAgICAgIDBFKzQgICAtPiAtMEUrNAotZHFjcG4xMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNAotZHFjcG4xMTUgY29weW5lZ2F0ZSAgICAgMC4wMDAwICAgLT4gLTAuMDAwMAotZHFjcG4xMTYgY29weW5lZ2F0ZSAgICAtMC4wMDAwICAgLT4gMC4wMDAwCi1kcWNwbjExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxCi1kcWNwbjExOCBjb3B5bmVnYXRlICAgICAtMEUtMTQxICAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRxY3BuMTIxIGNvcHluZWdhdGUgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCi1kcWNwbjEyMiBjb3B5bmVnYXRlICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFjcG4xMjMgY29weW5lZ2F0ZSAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKLWRxY3BuMTI0IGNvcHluZWdhdGUgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcWNwbjEzMSBjb3B5bmVnYXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFjcG4xMzIgY29weW5lZ2F0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MwotZHFjcG4xMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxY3BuMTM0IGNvcHluZWdhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKLQotZHFjcG4xMzUgY29weW5lZ2F0ZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgotZHFjcG4xMzYgY29weW5lZ2F0ZSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxY3BuMTM3IGNvcHluZWdhdGUgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKLWRxY3BuMTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcUNvcHlOZWdhdGUuZGVjVGVzdCAtLSBxdWlldCBkZWNRdWFkIGNvcHkgYW5kIG5lZ2F0ZSAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrDQorZHFjcG4wMDEgY29weW5lZ2F0ZSAgICAgICArNy41MCAgLT4gLTcuNTANCisNCistLSBJbmZpbml0aWVzDQorZHFjcG4wMTEgY29weW5lZ2F0ZSAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQorZHFjcG4wMTIgY29weW5lZ2F0ZSAgLUluZmluaXR5ICAgLT4gSW5maW5pdHkNCisNCistLSBOYU5zLCAwIHBheWxvYWQNCitkcWNwbjAyMSBjb3B5bmVnYXRlICAgICAgICAgTmFOICAtPiAtTmFODQorZHFjcG4wMjIgY29weW5lZ2F0ZSAgICAgICAgLU5hTiAgLT4gTmFODQorZHFjcG4wMjMgY29weW5lZ2F0ZSAgICAgICAgc05hTiAgLT4gLXNOYU4NCitkcWNwbjAyNCBjb3B5bmVnYXRlICAgICAgIC1zTmFOICAtPiBzTmFODQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2RxY3BuMDMxIGNvcHluZWdhdGUgICAgICAgTmFOMTMgIC0+IC1OYU4xMw0KK2RxY3BuMDMyIGNvcHluZWdhdGUgICAgICAtTmFOMTMgIC0+IE5hTjEzDQorZHFjcG4wMzMgY29weW5lZ2F0ZSAgICAgIHNOYU4xMyAgLT4gLXNOYU4xMw0KK2RxY3BuMDM0IGNvcHluZWdhdGUgICAgIC1zTmFOMTMgIC0+IHNOYU4xMw0KK2RxY3BuMDM1IGNvcHluZWdhdGUgICAgICAgTmFONzAgIC0+IC1OYU43MA0KK2RxY3BuMDM2IGNvcHluZWdhdGUgICAgICAtTmFONzAgIC0+IE5hTjcwDQorZHFjcG4wMzcgY29weW5lZ2F0ZSAgICAgIHNOYU4xMDEgLT4gLXNOYU4xMDENCitkcWNwbjAzOCBjb3B5bmVnYXRlICAgICAtc05hTjEwMSAtPiBzTmFOMTAxDQorDQorLS0gZmluaXRlcw0KK2RxY3BuMTAxIGNvcHluZWdhdGUgICAgICAgICAgNyAgIC0+IC03DQorZHFjcG4xMDIgY29weW5lZ2F0ZSAgICAgICAgIC03ICAgLT4gNw0KK2RxY3BuMTAzIGNvcHluZWdhdGUgICAgICAgICA3NSAgIC0+IC03NQ0KK2RxY3BuMTA0IGNvcHluZWdhdGUgICAgICAgIC03NSAgIC0+IDc1DQorZHFjcG4xMDUgY29weW5lZ2F0ZSAgICAgICA3LjUwICAgLT4gLTcuNTANCitkcWNwbjEwNiBjb3B5bmVnYXRlICAgICAgLTcuNTAgICAtPiA3LjUwDQorZHFjcG4xMDcgY29weW5lZ2F0ZSAgICAgICA3LjUwMCAgLT4gLTcuNTAwDQorZHFjcG4xMDggY29weW5lZ2F0ZSAgICAgIC03LjUwMCAgLT4gNy41MDANCisNCistLSB6ZXJvcw0KK2RxY3BuMTExIGNvcHluZWdhdGUgICAgICAgICAgMCAgIC0+IC0wDQorZHFjcG4xMTIgY29weW5lZ2F0ZSAgICAgICAgIC0wICAgLT4gMA0KK2RxY3BuMTEzIGNvcHluZWdhdGUgICAgICAgMEUrNCAgIC0+IC0wRSs0DQorZHFjcG4xMTQgY29weW5lZ2F0ZSAgICAgIC0wRSs0ICAgLT4gMEUrNA0KK2RxY3BuMTE1IGNvcHluZWdhdGUgICAgIDAuMDAwMCAgIC0+IC0wLjAwMDANCitkcWNwbjExNiBjb3B5bmVnYXRlICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitkcWNwbjExNyBjb3B5bmVnYXRlICAgICAgMEUtMTQxICAtPiAtMEUtMTQxDQorZHFjcG4xMTggY29weW5lZ2F0ZSAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkcWNwbjEyMSBjb3B5bmVnYXRlICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BuMTIyIGNvcHluZWdhdGUgIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQorZHFjcG4xMjMgY29weW5lZ2F0ZSAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCitkcWNwbjEyNCBjb3B5bmVnYXRlICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZHFjcG4xMzEgY29weW5lZ2F0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcWNwbjEzMiBjb3B5bmVnYXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQorZHFjcG4xMzMgY29weW5lZ2F0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCitkcWNwbjEzNCBjb3B5bmVnYXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQorDQorZHFjcG4xMzUgY29weW5lZ2F0ZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3Ng0KK2RxY3BuMTM2IGNvcHluZWdhdGUgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFjcG4xMzcgY29weW5lZ2F0ZSAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0Mw0KK2RxY3BuMTM4IGNvcHluZWdhdGUgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUNvcHlTaWduLmRlY1Rlc3QKaW5kZXggOTdiNWU2ZS4uY2U3OTRiNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxQ29weVNpZ24uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFDb3B5U2lnbi5kZWNUZXN0CkBAIC0xLDE3NSArMSwxNzUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLgotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrCi1kcWNwczAwMSBjb3B5c2lnbiAgICAgICArNy41MCAgICAgMTEgLT4gNy41MAotCi0tLSBJbmZpbml0aWVzCi1kcWNwczAxMSBjb3B5c2lnbiAgSW5maW5pdHkgICAgICAgMTEgLT4gSW5maW5pdHkKLWRxY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWRxY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4KLWRxY3BzMDIyIGNvcHlzaWduICAgICAgICAtTmFOICAgICAxMSAtPiBOYU4KLWRxY3BzMDIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAxMSAtPiBzTmFOCi1kcWNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi1kcWNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTAKLWRxY3BzMDMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAxMSAtPiBOYU4xMAotZHFjcHMwMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIDExIC0+IHNOYU4xMAotZHFjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMAotZHFjcHMwMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIDExIC0+IE5hTjcKLWRxY3BzMDM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAxMSAtPiBOYU43Ci1kcWNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQotZHFjcHMwMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIDExIC0+IHNOYU4xMDEKLQotLS0gZmluaXRlcwotZHFjcHMxMDEgY29weXNpZ24gICAgICAgICAgNyAgICAgIDExIC0+IDcKLWRxY3BzMTAyIGNvcHlzaWduICAgICAgICAgLTcgICAgICAxMSAtPiA3Ci1kcWNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUKLWRxY3BzMTA0IGNvcHlzaWduICAgICAgICAtNzUgICAgICAxMSAtPiA3NQotZHFjcHMxMDUgY29weXNpZ24gICAgICAgNy41MCAgICAgIDExIC0+IDcuNTAKLWRxY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwCi1kcWNwczEwNyBjb3B5c2lnbiAgICAgICA3LjUwMCAgICAgMTEgLT4gNy41MDAKLWRxY3BzMTA4IGNvcHlzaWduICAgICAgLTcuNTAwICAgICAxMSAtPiA3LjUwMAotCi0tLSB6ZXJvcwotZHFjcHMxMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIDExIC0+IDAKLWRxY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwCi1kcWNwczExMyBjb3B5c2lnbiAgICAgICAwRSs0ICAgICAgMTEgLT4gMEUrNAotZHFjcHMxMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIDExIC0+IDBFKzQKLWRxY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKLWRxY3BzMTE2IGNvcHlzaWduICAgIC0wLjAwMDAgICAgICAxMSAtPiAwLjAwMDAKLWRxY3BzMTE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKLWRxY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRxY3BzMTIxIGNvcHlzaWduICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFjcHMxMjIgY29weXNpZ24gIC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyIDggIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCi1kcWNwczEyMyBjb3B5c2lnbiAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgOCAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKLWRxY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSA4ICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotCi0tLSBObWF4LCBObWluLCBOdGlueQotZHFjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDggLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcWNwczEzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MwotZHFjcHMxMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIDggLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcWNwczEzNCBjb3B5c2lnbiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE3NgotCi1kcWNwczEzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNzYKLWRxY3BzMTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgOCAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxY3BzMTM3IGNvcHlzaWduICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE0MwotZHFjcHMxMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCA4IC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotCi0tLSByZXBlYXQgd2l0aCBuZWdhdGl2ZSBSSFMKLQotLS0gSW5maW5pdGllcwotZHFjcHMyMTEgY29weXNpZ24gIEluZmluaXR5ICAgICAgIC0zNCAtPiAtSW5maW5pdHkKLWRxY3BzMjEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAtMzQgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZHFjcHMyMjEgY29weXNpZ24gICAgICAgICBOYU4gICAgIC0zNCAtPiAtTmFOCi1kcWNwczIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4KLWRxY3BzMjIzIGNvcHlzaWduICAgICAgICBzTmFOICAgICAtMzQgLT4gLXNOYU4KLWRxY3BzMjI0IGNvcHlzaWduICAgICAgIC1zTmFOICAgICAtMzQgLT4gLXNOYU4KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZHFjcHMyMzEgY29weXNpZ24gICAgICAgTmFOMTAgICAgIC0zNCAtPiAtTmFOMTAKLWRxY3BzMjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwCi1kcWNwczIzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgLTM0IC0+IC1zTmFOMTAKLWRxY3BzMjM0IGNvcHlzaWduICAgICAtc05hTjEwICAgICAtMzQgLT4gLXNOYU4xMAotZHFjcHMyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONwotZHFjcHMyMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIC0zNCAtPiAtTmFONwotZHFjcHMyMzcgY29weXNpZ24gICAgICBzTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQotZHFjcHMyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQotCi0tLSBmaW5pdGVzCi1kcWNwczMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03Ci1kcWNwczMwMiBjb3B5c2lnbiAgICAgICAgIC03ICAgICAgLTM0IC0+IC03Ci1kcWNwczMwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgLTM0IC0+IC03NQotZHFjcHMzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUKLWRxY3BzMzA1IGNvcHlzaWduICAgICAgIDcuNTAgICAgICAtMzQgLT4gLTcuNTAKLWRxY3BzMzA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAtMzQgLT4gLTcuNTAKLWRxY3BzMzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwCi1kcWNwczMwOCBjb3B5c2lnbiAgICAgIC03LjUwMCAgICAgLTM0IC0+IC03LjUwMAotCi0tLSB6ZXJvcwotZHFjcHMzMTEgY29weXNpZ24gICAgICAgICAgMCAgICAgIC0zNCAtPiAtMAotZHFjcHMzMTIgY29weXNpZ24gICAgICAgICAtMCAgICAgIC0zNCAtPiAtMAotZHFjcHMzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNAotZHFjcHMzMTQgY29weXNpZ24gICAgICAtMEUrNCAgICAgIC0zNCAtPiAtMEUrNAotZHFjcHMzMTUgY29weXNpZ24gICAgIDAuMDAwMCAgICAgIC0zNCAtPiAtMC4wMDAwCi1kcWNwczMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDAKLWRxY3BzMzE3IGNvcHlzaWduICAgICAgMEUtMTQxICAgICAtMzQgLT4gLTBFLTE0MQotZHFjcHMzMTggY29weXNpZ24gICAgIC0wRS0xNDEgICAgIC0zNCAtPiAtMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kcWNwczMyMSBjb3B5c2lnbiAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgLTkgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKLWRxY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAtOSAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFjcHMzMjMgY29weXNpZ24gICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxIC05IC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCi1kcWNwczMyNCBjb3B5c2lnbiAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgLTkgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRxY3BzMzMxIGNvcHlzaWduICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcWNwczMzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xRS02MTQzCi1kcWNwczMzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFjcHMzMzQgY29weXNpZ24gIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAtMUUtNjE3NgotCi1kcWNwczMzNSBjb3B5c2lnbiAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zIC0+IC0xRS02MTc2Ci1kcWNwczMzNiBjb3B5c2lnbiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0zIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFjcHMzMzcgY29weXNpZ24gIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE0MwotZHFjcHMzMzggY29weXNpZ24gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLQotLS0gT3RoZXIga2luZHMgb2YgUkhTCi1kcWNwczQwMSBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLTM0IC0+IC03MDEKLWRxY3BzNDAyIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtMzQgLT4gLTcyMAotZHFjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxCi1kcWNwczQwNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLTAgIC0+IC03MjAKLWRxY3BzNDA1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArMCAgLT4gIDcwMQotZHFjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwCi1kcWNwczQwNyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgKzM0IC0+ICA3MDEKLWRxY3BzNDA4IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArMzQgLT4gIDcyMAotCi1kcWNwczQxMyBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLUluZiAgLT4gLTcwMQotZHFjcHM0MTQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1JbmYgIC0+IC03MjAKLWRxY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxCi1kcWNwczQxNiBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK0luZiAgLT4gIDcyMAotCi1kcWNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQotZHFjcHM0MjEgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1OYU4gIC0+IC03MjAKLWRxY3BzNDIyIGNvcHlzaWduICAgICAgICAgIDcwMSAgICArTmFOICAtPiAgNzAxCi1kcWNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMAotZHFjcHM0MjUgY29weXNpZ24gICAgICAgICAtNzIwICAgICtOYU44IC0+ICA3MjAKLQotZHFjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxCi1kcWNwczQyNyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLXNOYU4gIC0+IC03MjAKLWRxY3BzNDI4IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArc05hTiAgLT4gIDcwMQotZHFjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwCi1kcWNwczQzMCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK3NOYU4zIC0+ICA3MjAKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFDb3B5U2lnbi5kZWNUZXN0IC0tIHF1aWV0IGRlY1F1YWQgY29weSB3aXRoIHNpZ24gZnJvbSByaHMgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2RxY3BzMDAxIGNvcHlzaWduICAgICAgICs3LjUwICAgICAxMSAtPiA3LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RxY3BzMDExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAxMSAtPiBJbmZpbml0eQ0KK2RxY3BzMDEyIGNvcHlzaWduICAtSW5maW5pdHkgICAgICAxMSAtPiBJbmZpbml0eQ0KKw0KKy0tIE5hTnMsIDAgcGF5bG9hZA0KK2RxY3BzMDIxIGNvcHlzaWduICAgICAgICAgTmFOICAgICAxMSAtPiBOYU4NCitkcWNwczAyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgMTEgLT4gTmFODQorZHFjcHMwMjMgY29weXNpZ24gICAgICAgIHNOYU4gICAgIDExIC0+IHNOYU4NCitkcWNwczAyNCBjb3B5c2lnbiAgICAgICAtc05hTiAgICAgMTEgLT4gc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkcWNwczAzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgMTEgLT4gTmFOMTANCitkcWNwczAzMiBjb3B5c2lnbiAgICAgIC1OYU4xMCAgICAgMTEgLT4gTmFOMTANCitkcWNwczAzMyBjb3B5c2lnbiAgICAgIHNOYU4xMCAgICAgMTEgLT4gc05hTjEwDQorZHFjcHMwMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIDExIC0+IHNOYU4xMA0KK2RxY3BzMDM1IGNvcHlzaWduICAgICAgIE5hTjcgICAgICAxMSAtPiBOYU43DQorZHFjcHMwMzYgY29weXNpZ24gICAgICAtTmFONyAgICAgIDExIC0+IE5hTjcNCitkcWNwczAzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgMTEgLT4gc05hTjEwMQ0KK2RxY3BzMDM4IGNvcHlzaWduICAgICAtc05hTjEwMSAgICAxMSAtPiBzTmFOMTAxDQorDQorLS0gZmluaXRlcw0KK2RxY3BzMTAxIGNvcHlzaWduICAgICAgICAgIDcgICAgICAxMSAtPiA3DQorZHFjcHMxMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIDExIC0+IDcNCitkcWNwczEwMyBjb3B5c2lnbiAgICAgICAgIDc1ICAgICAgMTEgLT4gNzUNCitkcWNwczEwNCBjb3B5c2lnbiAgICAgICAgLTc1ICAgICAgMTEgLT4gNzUNCitkcWNwczEwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgMTEgLT4gNy41MA0KK2RxY3BzMTA2IGNvcHlzaWduICAgICAgLTcuNTAgICAgICAxMSAtPiA3LjUwDQorZHFjcHMxMDcgY29weXNpZ24gICAgICAgNy41MDAgICAgIDExIC0+IDcuNTAwDQorZHFjcHMxMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIDExIC0+IDcuNTAwDQorDQorLS0gemVyb3MNCitkcWNwczExMSBjb3B5c2lnbiAgICAgICAgICAwICAgICAgMTEgLT4gMA0KK2RxY3BzMTEyIGNvcHlzaWduICAgICAgICAgLTAgICAgICAxMSAtPiAwDQorZHFjcHMxMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIDExIC0+IDBFKzQNCitkcWNwczExNCBjb3B5c2lnbiAgICAgIC0wRSs0ICAgICAgMTEgLT4gMEUrNA0KK2RxY3BzMTE1IGNvcHlzaWduICAgICAwLjAwMDAgICAgICAxMSAtPiAwLjAwMDANCitkcWNwczExNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgMTEgLT4gMC4wMDAwDQorZHFjcHMxMTcgY29weXNpZ24gICAgICAwRS0xNDEgICAgIDExIC0+IDBFLTE0MQ0KK2RxY3BzMTE4IGNvcHlzaWduICAgICAtMEUtMTQxICAgICAxMSAtPiAwRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RxY3BzMTIxIGNvcHlzaWduICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BzMTIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiA4ICAtPiAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BzMTIzIGNvcHlzaWduICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSA4ICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KK2RxY3BzMTI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSA4ICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZHFjcHMxMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDggLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFjcHMxMzIgY29weXNpZ24gIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMNCitkcWNwczEzMyBjb3B5c2lnbiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgOCAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCitkcWNwczEzNCBjb3B5c2lnbiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE3Ng0KKw0KK2RxY3BzMTM1IGNvcHlzaWduICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAtPiAgMUUtNjE3Ng0KK2RxY3BzMTM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgOCAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCitkcWNwczEzNyBjb3B5c2lnbiAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggLT4gIDFFLTYxNDMNCitkcWNwczEzOCBjb3B5c2lnbiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IDggLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorDQorLS0gcmVwZWF0IHdpdGggbmVnYXRpdmUgUkhTDQorDQorLS0gSW5maW5pdGllcw0KK2RxY3BzMjExIGNvcHlzaWduICBJbmZpbml0eSAgICAgICAtMzQgLT4gLUluZmluaXR5DQorZHFjcHMyMTIgY29weXNpZ24gIC1JbmZpbml0eSAgICAgIC0zNCAtPiAtSW5maW5pdHkNCisNCistLSBOYU5zLCAwIHBheWxvYWQNCitkcWNwczIyMSBjb3B5c2lnbiAgICAgICAgIE5hTiAgICAgLTM0IC0+IC1OYU4NCitkcWNwczIyMiBjb3B5c2lnbiAgICAgICAgLU5hTiAgICAgLTM0IC0+IC1OYU4NCitkcWNwczIyMyBjb3B5c2lnbiAgICAgICAgc05hTiAgICAgLTM0IC0+IC1zTmFODQorZHFjcHMyMjQgY29weXNpZ24gICAgICAgLXNOYU4gICAgIC0zNCAtPiAtc05hTg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkcWNwczIzMSBjb3B5c2lnbiAgICAgICBOYU4xMCAgICAgLTM0IC0+IC1OYU4xMA0KK2RxY3BzMjMyIGNvcHlzaWduICAgICAgLU5hTjEwICAgICAtMzQgLT4gLU5hTjEwDQorZHFjcHMyMzMgY29weXNpZ24gICAgICBzTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwDQorZHFjcHMyMzQgY29weXNpZ24gICAgIC1zTmFOMTAgICAgIC0zNCAtPiAtc05hTjEwDQorZHFjcHMyMzUgY29weXNpZ24gICAgICAgTmFONyAgICAgIC0zNCAtPiAtTmFONw0KK2RxY3BzMjM2IGNvcHlzaWduICAgICAgLU5hTjcgICAgICAtMzQgLT4gLU5hTjcNCitkcWNwczIzNyBjb3B5c2lnbiAgICAgIHNOYU4xMDEgICAgLTM0IC0+IC1zTmFOMTAxDQorZHFjcHMyMzggY29weXNpZ24gICAgIC1zTmFOMTAxICAgIC0zNCAtPiAtc05hTjEwMQ0KKw0KKy0tIGZpbml0ZXMNCitkcWNwczMwMSBjb3B5c2lnbiAgICAgICAgICA3ICAgICAgLTM0IC0+IC03DQorZHFjcHMzMDIgY29weXNpZ24gICAgICAgICAtNyAgICAgIC0zNCAtPiAtNw0KK2RxY3BzMzAzIGNvcHlzaWduICAgICAgICAgNzUgICAgICAtMzQgLT4gLTc1DQorZHFjcHMzMDQgY29weXNpZ24gICAgICAgIC03NSAgICAgIC0zNCAtPiAtNzUNCitkcWNwczMwNSBjb3B5c2lnbiAgICAgICA3LjUwICAgICAgLTM0IC0+IC03LjUwDQorZHFjcHMzMDYgY29weXNpZ24gICAgICAtNy41MCAgICAgIC0zNCAtPiAtNy41MA0KK2RxY3BzMzA3IGNvcHlzaWduICAgICAgIDcuNTAwICAgICAtMzQgLT4gLTcuNTAwDQorZHFjcHMzMDggY29weXNpZ24gICAgICAtNy41MDAgICAgIC0zNCAtPiAtNy41MDANCisNCistLSB6ZXJvcw0KK2RxY3BzMzExIGNvcHlzaWduICAgICAgICAgIDAgICAgICAtMzQgLT4gLTANCitkcWNwczMxMiBjb3B5c2lnbiAgICAgICAgIC0wICAgICAgLTM0IC0+IC0wDQorZHFjcHMzMTMgY29weXNpZ24gICAgICAgMEUrNCAgICAgIC0zNCAtPiAtMEUrNA0KK2RxY3BzMzE0IGNvcHlzaWduICAgICAgLTBFKzQgICAgICAtMzQgLT4gLTBFKzQNCitkcWNwczMxNSBjb3B5c2lnbiAgICAgMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDANCitkcWNwczMxNiBjb3B5c2lnbiAgICAtMC4wMDAwICAgICAgLTM0IC0+IC0wLjAwMDANCitkcWNwczMxNyBjb3B5c2lnbiAgICAgIDBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDENCitkcWNwczMxOCBjb3B5c2lnbiAgICAgLTBFLTE0MSAgICAgLTM0IC0+IC0wRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RxY3BzMzIxIGNvcHlzaWduICAgMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAtOSAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BzMzIyIGNvcHlzaWduICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAtOSAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4Mg0KK2RxY3BzMzIzIGNvcHlzaWduICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAtOSAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KK2RxY3BzMzI0IGNvcHlzaWduICAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAtOSAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZHFjcHMzMzEgY29weXNpZ24gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcWNwczMzMiBjb3B5c2lnbiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xRS02MTQzDQorZHFjcHMzMzMgY29weXNpZ24gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCitkcWNwczMzNCBjb3B5c2lnbiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0xRS02MTc2DQorDQorZHFjcHMzMzUgY29weXNpZ24gIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE3Ng0KK2RxY3BzMzM2IGNvcHlzaWduICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFjcHMzMzcgY29weXNpZ24gIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMyAtPiAtMUUtNjE0Mw0KK2RxY3BzMzM4IGNvcHlzaWduICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorDQorLS0gT3RoZXIga2luZHMgb2YgUkhTDQorZHFjcHM0MDEgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0zNCAtPiAtNzAxDQorZHFjcHM0MDIgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0zNCAtPiAtNzIwDQorZHFjcHM0MDMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC0wICAtPiAtNzAxDQorZHFjcHM0MDQgY29weXNpZ24gICAgICAgICAtNzIwICAgIC0wICAtPiAtNzIwDQorZHFjcHM0MDUgY29weXNpZ24gICAgICAgICAgNzAxICAgICswICAtPiAgNzAxDQorZHFjcHM0MDYgY29weXNpZ24gICAgICAgICAtNzIwICAgICswICAtPiAgNzIwDQorZHFjcHM0MDcgY29weXNpZ24gICAgICAgICAgNzAxICAgICszNCAtPiAgNzAxDQorZHFjcHM0MDggY29weXNpZ24gICAgICAgICAtNzIwICAgICszNCAtPiAgNzIwDQorDQorZHFjcHM0MTMgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1JbmYgIC0+IC03MDENCitkcWNwczQxNCBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgLUluZiAgLT4gLTcyMA0KK2RxY3BzNDE1IGNvcHlzaWduICAgICAgICAgIDcwMSAgICArSW5mICAtPiAgNzAxDQorZHFjcHM0MTYgY29weXNpZ24gICAgICAgICAtNzIwICAgICtJbmYgIC0+ICA3MjANCisNCitkcWNwczQyMCBjb3B5c2lnbiAgICAgICAgICA3MDEgICAgLU5hTiAgLT4gLTcwMQ0KK2RxY3BzNDIxIGNvcHlzaWduICAgICAgICAgLTcyMCAgICAtTmFOICAtPiAtNzIwDQorZHFjcHM0MjIgY29weXNpZ24gICAgICAgICAgNzAxICAgICtOYU4gIC0+ICA3MDENCitkcWNwczQyMyBjb3B5c2lnbiAgICAgICAgIC03MjAgICAgK05hTiAgLT4gIDcyMA0KK2RxY3BzNDI1IGNvcHlzaWduICAgICAgICAgLTcyMCAgICArTmFOOCAtPiAgNzIwDQorDQorZHFjcHM0MjYgY29weXNpZ24gICAgICAgICAgNzAxICAgIC1zTmFOICAtPiAtNzAxDQorZHFjcHM0MjcgY29weXNpZ24gICAgICAgICAtNzIwICAgIC1zTmFOICAtPiAtNzIwDQorZHFjcHM0MjggY29weXNpZ24gICAgICAgICAgNzAxICAgICtzTmFOICAtPiAgNzAxDQorZHFjcHM0MjkgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOICAtPiAgNzIwDQorZHFjcHM0MzAgY29weXNpZ24gICAgICAgICAtNzIwICAgICtzTmFOMyAtPiAgNzIwDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxRGl2aWRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdAppbmRleCAyYWJiOTM5Li4zY2Y2MGM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGUuZGVjVGVzdApAQCAtMSw4MDggKzEsODA4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxRGl2aWRlLmRlY1Rlc3QgLS0gZGVjUXVhZCBkaXZpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxCi1kcWRpdjAwMiBkaXZpZGUgIDIgICAgIDEgICAgLT4gIDIKLWRxZGl2MDAzIGRpdmlkZSAgMSAgICAgMiAgICAtPiAgMC41Ci1kcWRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDEKLWRxZGl2MDA1IGRpdmlkZSAgMCAgICAgMSAgICAtPiAgMAotZHFkaXYwMDYgZGl2aWRlICAwICAgICAyICAgIC0+ICAwCi1kcWRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MDA4IGRpdmlkZSAgMiAgICAgMyAgICAtPiAgMC42NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY3IEluZXhhY3QgUm91bmRlZAotZHFkaXYwMDkgZGl2aWRlICAzICAgICAzICAgIC0+ICAxCi0KLWRxZGl2MDEwIGRpdmlkZSAgMi40ICAgMSAgICAtPiAgMi40Ci1kcWRpdjAxMSBkaXZpZGUgIDIuNCAgIC0xICAgLT4gIC0yLjQKLWRxZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNAotZHFkaXYwMTMgZGl2aWRlICAtMi40ICAtMSAgIC0+ICAyLjQKLWRxZGl2MDE0IGRpdmlkZSAgMi40MCAgMSAgICAtPiAgMi40MAotZHFkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMAotZHFkaXYwMTYgZGl2aWRlICAyLjQgICAyICAgIC0+ICAxLjIKLWRxZGl2MDE3IGRpdmlkZSAgMi40MDAgMiAgICAtPiAgMS4yMDAKLWRxZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQotZHFkaXYwMTkgZGl2aWRlICAyMCAgICAyMCAgIC0+ICAxCi0KLWRxZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxCi1kcWRpdjAyMSBkaXZpZGUgIDUgICAgIDIgICAgICAtPiAgMi41Ci1kcWRpdjAyMiBkaXZpZGUgIDUwICAgIDIwICAgICAtPiAgMi41Ci1kcWRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41Ci1kcWRpdjAyNCBkaXZpZGUgIDUwLjAgIDIwLjAgICAtPiAgMi41Ci1kcWRpdjAyNSBkaXZpZGUgIDUuMDAgIDIuMDAgICAtPiAgMi41Ci1kcWRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41Ci1kcWRpdjAyNyBkaXZpZGUgIDUgICAgIDIuMDAwICAtPiAgMi41Ci1kcWRpdjAyOCBkaXZpZGUgIDUgICAgIDAuMjAgICAtPiAgMjUKLWRxZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQotZHFkaXYwMzAgZGl2aWRlICAxMCAgICAxICAgICAgLT4gIDEwCi1kcWRpdjAzMSBkaXZpZGUgIDEwMCAgIDEgICAgICAtPiAgMTAwCi1kcWRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMAotZHFkaXYwMzMgZGl2aWRlICAxMDAwICAxMDAgICAgLT4gIDEwCi0KLWRxZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUKLWRxZGl2MDM2IGRpdmlkZSAgMSAgICAgNCAgICAgIC0+ICAwLjI1Ci1kcWRpdjAzNyBkaXZpZGUgIDEgICAgIDggICAgICAtPiAgMC4xMjUKLWRxZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUKLWRxZGl2MDM5IGRpdmlkZSAgMSAgICAgMzIgICAgIC0+ICAwLjAzMTI1Ci1kcWRpdjA0MCBkaXZpZGUgIDEgICAgIDY0ICAgICAtPiAgMC4wMTU2MjUKLWRxZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41Ci1kcWRpdjA0MiBkaXZpZGUgIDEgICAgLTQgICAgICAtPiAgLTAuMjUKLWRxZGl2MDQzIGRpdmlkZSAgMSAgICAtOCAgICAgIC0+ICAtMC4xMjUKLWRxZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1Ci1kcWRpdjA0NSBkaXZpZGUgIDEgICAgLTMyICAgICAtPiAgLTAuMDMxMjUKLWRxZGl2MDQ2IGRpdmlkZSAgMSAgICAtNjQgICAgIC0+ICAtMC4wMTU2MjUKLWRxZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41Ci1kcWRpdjA0OCBkaXZpZGUgLTEgICAgIDQgICAgICAtPiAgLTAuMjUKLWRxZGl2MDQ5IGRpdmlkZSAtMSAgICAgOCAgICAgIC0+ICAtMC4xMjUKLWRxZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1Ci1kcWRpdjA1MSBkaXZpZGUgLTEgICAgIDMyICAgICAtPiAgLTAuMDMxMjUKLWRxZGl2MDUyIGRpdmlkZSAtMSAgICAgNjQgICAgIC0+ICAtMC4wMTU2MjUKLWRxZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUKLWRxZGl2MDU0IGRpdmlkZSAtMSAgICAtNCAgICAgIC0+ICAwLjI1Ci1kcWRpdjA1NSBkaXZpZGUgLTEgICAgLTggICAgICAtPiAgMC4xMjUKLWRxZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUKLWRxZGl2MDU3IGRpdmlkZSAtMSAgICAtMzIgICAgIC0+ICAwLjAzMTI1Ci1kcWRpdjA1OCBkaXZpZGUgLTEgICAgLTY0ICAgICAtPiAgMC4wMTU2MjUKLQotLS0gYmNkVGltZQotZHFkaXYwNjAgZGl2aWRlICAxIDcgICAgICAgICAgICAgICAgICAgLT4gMC4xNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI4NTcxNDI5IEluZXhhY3QgUm91bmRlZAotZHFkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3MTIzMTkzOTA3NTExOTg1MzU5IEluZXhhY3QgUm91bmRlZAotCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRxZGl2MDY3IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFkaXYwNjggZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxZGl2MDY5IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxZGl2MDcwIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTkKLWRxZGl2MDcxIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OQotZHFkaXYwNzIgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTkKLWRxZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTkKLWRxZGl2MDc0IGRpdmlkZSAgOTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OQotZHFkaXYwNzUgZGl2aWRlICA5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTk5OTkKLWRxZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTkKLWRxZGl2MDc3IGRpdmlkZSAgOTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OQotZHFkaXYwNzggZGl2aWRlICA5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTk5OTkKLWRxZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTkKLWRxZGl2MDgwIGRpdmlkZSAgOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OQotZHFkaXYwODEgZGl2aWRlICA5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTk5OTkKLWRxZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTkKLWRxZGl2MDgzIGRpdmlkZSAgOTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OQotZHFkaXYwODQgZGl2aWRlICA5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC0+ICA5OTkKLWRxZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTkKLWRxZGl2MDg2IGRpdmlkZSAgOSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOQotCi1kcWRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMAotZHFkaXYwOTEgZGl2aWRlICAuMCAgICAgICAgICAgIDEgICAgLT4gIDAuMAotZHFkaXYwOTIgZGl2aWRlICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAuMDAKLWRxZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3Ci1kcWRpdjA5NCBkaXZpZGUgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMEUtNTQKLQotZHFkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgKLWRxZGl2MDk2IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTkgIC0+ICAxRSs5Ci1kcWRpdjA5NyBkaXZpZGUgIDEgICAgICAgICAgICAxRS0xMCAtPiAgMUUrMTAKLWRxZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQotZHFkaXYwOTkgZGl2aWRlICAxICAgICAgICAgICAgMUUtMTIgLT4gIDFFKzEyCi0KLWRxZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDEKLWRxZGl2MTAxIGRpdmlkZSAgMSAgMiAgIC0+IDAuNQotZHFkaXYxMDIgZGl2aWRlICAxICAzICAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAotZHFkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQotZHFkaXYxMDQgZGl2aWRlICAxICA1ICAgLT4gMC4yCi1kcWRpdjEwNSBkaXZpZGUgIDEgIDYgICAtPiAwLjE2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjcgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjEwNyBkaXZpZGUgIDEgIDggICAtPiAwLjEyNQotZHFkaXYxMDggZGl2aWRlICAxICA5ICAgLT4gMC4xMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIEluZXhhY3QgUm91bmRlZAotZHFkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xCi1kcWRpdjExMCBkaXZpZGUgIDEgIDEgICAtPiAxCi1kcWRpdjExMSBkaXZpZGUgIDIgIDEgICAtPiAyCi1kcWRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzCi1kcWRpdjExMyBkaXZpZGUgIDQgIDEgICAtPiA0Ci1kcWRpdjExNCBkaXZpZGUgIDUgIDEgICAtPiA1Ci1kcWRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2Ci1kcWRpdjExNiBkaXZpZGUgIDcgIDEgICAtPiA3Ci1kcWRpdjExNyBkaXZpZGUgIDggIDEgICAtPiA4Ci1kcWRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5Ci1kcWRpdjExOSBkaXZpZGUgIDEwIDEgICAtPiAxMAotCi1kcWRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQKLWRxZGl2MTIxIGRpdmlkZSAgMi4yMDAgMiAgICAgLT4gMS4xMDAKLQotZHFkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+IDI0NjkuNDkzODk4Nzc5NzU1OTUxMTkwMjM4MDQ3NjA5NTIyICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTMxIGRpdmlkZSAgMTIzNDUgIDQuOTkgICAtPiAyNDczLjk0Nzg5NTc5MTU4MzE2NjMzMjY2NTMzMDY2MTMyMyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjEzMiBkaXZpZGUgIDEyMzQ1ICA0LjkgICAgLT4gMjUxOS4zODc3NTUxMDIwNDA4MTYzMjY1MzA2MTIyNDQ4OTggIEluZXhhY3QgUm91bmRlZAotZHFkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+IDI0NjkKLWRxZGl2MTM0IGRpdmlkZSAgMTIzNDUgIDUuMSAgICAtPiAyNDIwLjU4ODIzNTI5NDExNzY0NzA1ODgyMzUyOTQxMTc2NSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjEzNSBkaXZpZGUgIDEyMzQ1ICA1LjAxICAgLT4gMjQ2NC4wNzE4NTYyODc0MjUxNDk3MDA1OTg4MDIzOTUyMTAgIEluZXhhY3QgUm91bmRlZAotZHFkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+IDI0NjguNTA2Mjk4NzQwMjUxOTQ5NjEwMDc3OTg0NDAzMTE5ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdGVzdCBwb3NzaWJseSBpbXByZWNpc2UgcmVzdWx0cwotZHFkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjIxIGRpdmlkZSAzOTEgIC01OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIyMiBkaXZpZGUgLTM5MSAgNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZAotZHFkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdGVzdCBzb21lIGNhc2VzIHRoYXQgYXJlIGNsb3NlIHRvIGV4cG9uZW50IG92ZXJmbG93Ci1kcWRpdjI3MCBkaXZpZGUgMSAxZTYxNDQgICAgICAgICAgICAgICAgICAtPiAxRS02MTQ0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKLWRxZGl2MjcxIGRpdmlkZSAxIDAuOWU2MTQ0ICAgICAgICAgICAgICAgIC0+IDEuMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcWRpdjI3MiBkaXZpZGUgMSAwLjk5ZTYxNDQgICAgICAgICAgICAgICAtPiAxLjAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZGl2Mjc0IGRpdmlkZSA5ZTYxNDQgICAgMSAgICAgICAgICAgICAgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKLWRxZGl2Mjc1IGRpdmlkZSA5LjllNjE0NCAgMSAgICAgICAgICAgICAgIC0+IDkuOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKLWRxZGl2Mjc2IGRpdmlkZSA5Ljk5ZTYxNDQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKLWRxZGl2Mjc3IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKLQotZHFkaXYyNzggZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZGl2Mjc5IGRpdmlkZSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWU2MTQ0IDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci0KLS0tIERpdmlkZSBpbnRvIDAgdGVzdHMKLWRxZGl2MzAxIGRpdmlkZSAgICAwICAgIDcgICAgIC0+IDAKLWRxZGl2MzAyIGRpdmlkZSAgICAwICAgIDdFLTUgIC0+IDBFKzUKLWRxZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzEKLWRxZGl2MzA0IGRpdmlkZSAgICAwICAgIDdFKzEgIC0+IDAuMAotZHFkaXYzMDUgZGl2aWRlICAgIDAgICAgN0UrNSAgLT4gMC4wMDAwMAotZHFkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDAKLWRxZGl2MzA3IGRpdmlkZSAgICAwICAgIDdFKzcgIC0+IDBFLTcKLWRxZGl2MzA4IGRpdmlkZSAgICAwICAgNzBFLTUgIC0+IDBFKzUKLWRxZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzEKLWRxZGl2MzEwIGRpdmlkZSAgICAwICAgNzBFKzAgIC0+IDAKLWRxZGl2MzExIGRpdmlkZSAgICAwICAgNzBFKzEgIC0+IDAuMAotZHFkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMAotZHFkaXYzMTMgZGl2aWRlICAgIDAgICA3MEUrNiAgLT4gMC4wMDAwMDAKLWRxZGl2MzE0IGRpdmlkZSAgICAwICAgNzBFKzcgIC0+IDBFLTcKLWRxZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUKLWRxZGl2MzE2IGRpdmlkZSAgICAwICA3MDBFLTEgIC0+IDBFKzEKLWRxZGl2MzE3IGRpdmlkZSAgICAwICA3MDBFKzAgIC0+IDAKLWRxZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMAotZHFkaXYzMTkgZGl2aWRlICAgIDAgIDcwMEUrNSAgLT4gMC4wMDAwMAotZHFkaXYzMjAgZGl2aWRlICAgIDAgIDcwMEUrNiAgLT4gMC4wMDAwMDAKLWRxZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcKLWRxZGl2MzIyIGRpdmlkZSAgICAwICA3MDBFKzc3IC0+IDBFLTc3Ci0KLWRxZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzIKLWRxZGl2MzMyIGRpdmlkZSAwRS0zICAgIDdFLTEgIC0+IDAuMDAKLWRxZGl2MzMzIGRpdmlkZSAwRS0zICAgIDdFKzEgIC0+IDAuMDAwMAotZHFkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOAotZHFkaXYzMzUgZGl2aWRlIDBFLTEgICAgN0UtNSAgLT4gMEUrNAotZHFkaXYzMzYgZGl2aWRlIDBFLTEgICAgN0UtMSAgLT4gMAotZHFkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMAotZHFkaXYzMzggZGl2aWRlIDBFLTEgICAgN0UrNSAgLT4gMC4wMDAwMDAKLWRxZGl2MzM5IGRpdmlkZSAwRSsxICAgIDdFLTUgIC0+IDBFKzYKLWRxZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzIKLWRxZGl2MzQxIGRpdmlkZSAwRSsxICAgIDdFKzEgIC0+IDAKLWRxZGl2MzQyIGRpdmlkZSAwRSsxICAgIDdFKzUgIC0+IDAuMDAwMAotZHFkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOAotZHFkaXYzNDQgZGl2aWRlIDBFKzMgICAgN0UtMSAgLT4gMEUrNAotZHFkaXYzNDUgZGl2aWRlIDBFKzMgICAgN0UrMSAgLT4gMEUrMgotZHFkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMAotCi0tLSBUaGVzZSB3ZXJlICdpbnB1dCByb3VuZGluZycKLWRxZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCi1kcWRpdjQ0MiBkaXZpZGUgMSAxMjM0NTY3ODAwMCAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTEgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQ0MyBkaXZpZGUgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCi1kcWRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQ0NSBkaXZpZGUgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCi1kcWRpdjQ0NiBkaXZpZGUgMSAxMjM0NTY3ODkwICAtPiA4LjEwMDAwMDA3MzcxMDAwMDY3MDc2MTAwNjEwMzkyNTE1NkUtMTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCi1kcWRpdjQ0OCBkaXZpZGUgMSAxMjM0NTY3ODkxICAtPiA4LjEwMDAwMDA2NzE0OTAwMDU1NjY2NTIxNDYxNDc1NDYyOUUtMTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQ0OSBkaXZpZGUgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQotZHFkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDA2NTg4NzMxMzAwNDIzNzY3NjBFLTExIEluZXhhY3QgUm91bmRlZAotZHFkaXY0NTEgZGl2aWRlIDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgotZHFkaXY0NTIgZGl2aWRlIDEgMTIzNDU2Nzg5NiAgLT4gOC4xMDAwMDAwMzQzNDQwMDAxNDU2MTg1NjA2MTc0MjI2OTdFLTEwIEluZXhhY3QgUm91bmRlZAotCi0tLSBoaWdoLWxvd3MKLWRxZGl2NDUzIGRpdmlkZSAxZSsxICAgMSAgICAtPiAgIDFFKzEKLWRxZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzEKLWRxZGl2NDU1IGRpdmlkZSAxZSsxICAgMS4wMCAtPiAgIDFFKzEKLWRxZGl2NDU2IGRpdmlkZSAxZSsyICAgMiAgICAtPiAgIDVFKzEKLWRxZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzEKLWRxZGl2NDU4IGRpdmlkZSAxZSsyICAgMi4wMCAtPiAgIDVFKzEKLQotLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMKLWRxZGl2NDYwIGRpdmlkZSAzZTAgICAgICAyZTAgICAgIC0+IDEuNQotZHFkaXY0NjEgZGl2aWRlIDMwZS0xICAgIDJlMCAgICAgLT4gMS41Ci1kcWRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwCi1kcWRpdjQ2NCBkaXZpZGUgMzAwMGUtMyAgMmUwICAgICAtPiAxLjUwMAotZHFkaXY0NjUgZGl2aWRlIDNlMCAgICAgIDIwZS0xICAgLT4gMS41Ci1kcWRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUKLWRxZGl2NDY3IGRpdmlkZSAzMDBlLTIgICAyMGUtMSAgIC0+IDEuNQotZHFkaXY0NjggZGl2aWRlIDMwMDBlLTMgIDIwZS0xICAgLT4gMS41MAotZHFkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41Ci1kcWRpdjQ3MCBkaXZpZGUgMzBlLTEgICAgMjAwZS0yICAtPiAxLjUKLWRxZGl2NDcxIGRpdmlkZSAzMDBlLTIgICAyMDBlLTIgIC0+IDEuNQotZHFkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41Ci1kcWRpdjQ3MyBkaXZpZGUgM2UwICAgICAgMjAwMGUtMyAtPiAxLjUKLWRxZGl2NDc0IGRpdmlkZSAzMGUtMSAgICAyMDAwZS0zIC0+IDEuNQotZHFkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41Ci1kcWRpdjQ3NiBkaXZpZGUgMzAwMGUtMyAgMjAwMGUtMyAtPiAxLjUKLQotLS0gc29tZSByZWNpcHJvY2FscwotZHFkaXY0ODAgZGl2aWRlIDEgICAgICAgIDEuMEUrMzMgLT4gMUUtMzMKLWRxZGl2NDgxIGRpdmlkZSAxICAgICAgICAxMEUrMzMgIC0+IDFFLTM0Ci1kcWRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMwotZHFkaXY0ODMgZGl2aWRlIDEgICAgICAgIDEwRS0zMyAgLT4gMUUrMzIKLQotLS0gUk1TIGRpc2N1c3Npb24gdGFibGUKLWRxZGl2NDg0IGRpdmlkZSAwZTUgICAgIDFlMyAtPiAgIDBFKzIKLWRxZGl2NDg1IGRpdmlkZSAwZTUgICAgIDJlMyAtPiAgIDBFKzIKLWRxZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMKLWRxZGl2NDg3IGRpdmlkZSAwZTUgICAgMjBlMiAtPiAgIDBFKzMKLWRxZGl2NDg4IGRpdmlkZSAwZTUgICAxMDBlMSAtPiAgIDBFKzQKLWRxZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQKLQotZHFkaXY0OTEgZGl2aWRlIDFlNSAgICAgMWUzIC0+ICAgMUUrMgotZHFkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQotZHFkaXY0OTMgZGl2aWRlIDFlNSAgICAxMGUyIC0+ICAgMUUrMgotZHFkaXY0OTQgZGl2aWRlIDFlNSAgICAyMGUyIC0+ICAgNUUrMQotZHFkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMgotZHFkaXY0OTYgZGl2aWRlIDFlNSAgIDIwMGUxIC0+ICAgNUUrMQotCi0tLSB0cnl6ZXJvcyBjYXNlcwotcm91bmRpbmc6ICAgIGhhbGZfdXAKLWRxZGl2NDk3ICBkaXZpZGUgIDBFKzYxMDggMTAwMEUtMzMgIC0+IDBFKzYxMTEgQ2xhbXBlZAotZHFkaXY0OTggIGRpdmlkZSAgMEUtNjE3MCAxMDAwRSszMyAgLT4gMEUtNjE3NiBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBoYWxmX3VwCi0KLS0tIGZvY3VzIG9uIHRyYWlsaW5nIHplcm9zIGlzc3VlcwotZHFkaXY1MDAgZGl2aWRlICAxICAgICAgOS45ICAgIC0+ICAwLjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgIEluZXhhY3QgUm91bmRlZAotZHFkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEgIEluZXhhY3QgUm91bmRlZAotZHFkaXY1MDIgZGl2aWRlICAxICAgICAgOS4wMDkgIC0+ICAwLjExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAwMDExMTAgIEluZXhhY3QgUm91bmRlZAotCi1kcWRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41Ci1kcWRpdjUxMiBkaXZpZGUgMS4wICAgICAgIDIgICAgLT4gMC41Ci1kcWRpdjUxMyBkaXZpZGUgMS4wMCAgICAgIDIgICAgLT4gMC41MAotZHFkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwCi1kcWRpdjUxNSBkaXZpZGUgMS4wMDAwICAgIDIgICAgLT4gMC41MDAwCi1kcWRpdjUxNiBkaXZpZGUgMS4wMDAwMCAgIDIgICAgLT4gMC41MDAwMAotZHFkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwCi1kcWRpdjUxOCBkaXZpZGUgMS4wMDAwMDAwIDIgICAgLT4gMC41MDAwMDAwCi1kcWRpdjUxOSBkaXZpZGUgMS4wMCAgICAgIDIuMDAgLT4gMC41Ci0KLWRxZGl2NTIxIGRpdmlkZSAyICAgIDEgICAgICAgICAtPiAyCi1kcWRpdjUyMiBkaXZpZGUgMiAgICAxLjAgICAgICAgLT4gMgotZHFkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDIKLWRxZGl2NTI0IGRpdmlkZSAyICAgIDEuMDAwICAgICAtPiAyCi1kcWRpdjUyNSBkaXZpZGUgMiAgICAxLjAwMDAgICAgLT4gMgotZHFkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDIKLWRxZGl2NTI3IGRpdmlkZSAyICAgIDEuMDAwMDAwICAtPiAyCi1kcWRpdjUyOCBkaXZpZGUgMiAgICAxLjAwMDAwMDAgLT4gMgotZHFkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDIKLQotZHFkaXY1MzAgZGl2aWRlICAyLjQwICAgMiAgICAgIC0+ICAxLjIwCi1kcWRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjAKLWRxZGl2NTMyIGRpdmlkZSAgMi40MCAgMTAgICAgICAtPiAgMC4yNAotZHFkaXY1MzMgZGl2aWRlICAyLjQwICAgMi4wICAgIC0+ICAxLjIKLWRxZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42Ci1kcWRpdjUzNSBkaXZpZGUgIDIuNDAgIDEwLjAgICAgLT4gIDAuMjQKLWRxZGl2NTM2IGRpdmlkZSAgMi40MCAgIDIuMDAgICAtPiAgMS4yCi1kcWRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNgotZHFkaXY1MzggZGl2aWRlICAyLjQwICAxMC4wMCAgIC0+ICAwLjI0Ci1kcWRpdjUzOSBkaXZpZGUgIDAuOSAgICAwLjEgICAgLT4gIDkKLWRxZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQotZHFkaXY1NDEgZGl2aWRlICAwLjkgICAgMC4wMDEgIC0+ICA5RSsyCi1kcWRpdjU0MiBkaXZpZGUgIDUgICAgICAyICAgICAgLT4gIDIuNQotZHFkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUKLWRxZGl2NTQ0IGRpdmlkZSAgNSAgICAgIDIuMDAgICAtPiAgMi41Ci1kcWRpdjU0NSBkaXZpZGUgIDUgICAgICAyMCAgICAgLT4gIDAuMjUKLWRxZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQotZHFkaXY1NDcgZGl2aWRlICAyLjQwMCAgMiAgICAgIC0+ICAxLjIwMAotZHFkaXY1NDggZGl2aWRlICAyLjQwMCAgMi4wICAgIC0+ICAxLjIwCi1kcWRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDEKLQotZHFkaXY1NTAgZGl2aWRlICAyNDAgICAgMSAgICAgIC0+ICAyNDAKLWRxZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQKLWRxZGl2NTUyIGRpdmlkZSAgMjQwICAgIDEwMCAgICAtPiAgMi40Ci1kcWRpdjU1MyBkaXZpZGUgIDI0MCAgICAxMDAwICAgLT4gIDAuMjQKLWRxZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMAotZHFkaXY1NTUgZGl2aWRlICAyNDAwICAgMTAgICAgIC0+ICAyNDAKLWRxZGl2NTU2IGRpdmlkZSAgMjQwMCAgIDEwMCAgICAtPiAgMjQKLWRxZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40Ci0KLS0tICt2ZSBleHBvbmVudAotZHFkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkKLWRxZGl2NjAxIGRpdmlkZSAgMi40MEUrOSAgICAyICAtPiAgMS4yMEUrOQotZHFkaXY2MDIgZGl2aWRlICAyLjQwMEUrOSAgIDIgIC0+ICAxLjIwMEUrOQotZHFkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkKLWRxZGl2NjA0IGRpdmlkZSAgMjRFKzggICAgICAyICAtPiAgMS4yRSs5Ci1kcWRpdjYwNSBkaXZpZGUgIDI0MEUrNyAgICAgMiAgLT4gIDEuMjBFKzkKLWRxZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkKLWRxZGl2NjA3IGRpdmlkZSAgMjQwMDBFKzUgICAyICAtPiAgMS4yMDAwRSs5Ci0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLWRxZGl2NzMxIGRpdmlkZSA1LjAwIDFFLTMgICAgLT4gNS4wMEUrMwotZHFkaXY3MzIgZGl2aWRlIDAwLjAwIDAuMDAwICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcWRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxZGl2NzM0IGRpdmlkZSAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFkaXY3MzUgZGl2aWRlIC0wICAgICAwICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcWRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLQotZHFkaXY3NDEgZGl2aWRlICAwICAgIC0xICAgICAtPiAtMAotZHFkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMAotZHFkaXY3NDMgZGl2aWRlICAwICAgICAxICAgICAtPiAgMAotZHFkaXY3NDQgZGl2aWRlIC0wICAgICAxICAgICAtPiAtMAotZHFkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NDYgZGl2aWRlIC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NDcgZGl2aWRlICAxICAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWRpdjc1MSBkaXZpZGUgIDAuMCAgLTEgICAgIC0+IC0wLjAKLWRxZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMAotZHFkaXY3NTMgZGl2aWRlICAwLjAgICAxICAgICAtPiAgMC4wCi1kcWRpdjc1NCBkaXZpZGUgLTAuMCAgIDEgICAgIC0+IC0wLjAKLWRxZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2NzU2IGRpdmlkZSAtMS4wICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2NzU3IGRpdmlkZSAgMS4wICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLQotZHFkaXY3NjEgZGl2aWRlICAwICAgIC0xLjAgICAtPiAtMEUrMQotZHFkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQotZHFkaXY3NjMgZGl2aWRlICAwICAgICAxLjAgICAtPiAgMEUrMQotZHFkaXY3NjQgZGl2aWRlIC0wICAgICAxLjAgICAtPiAtMEUrMQotZHFkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NjYgZGl2aWRlIC0xICAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NjcgZGl2aWRlICAxICAgICAwLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWRpdjc3MSBkaXZpZGUgIDAuMCAgLTEuMCAgIC0+IC0wCi1kcWRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwCi1kcWRpdjc3MyBkaXZpZGUgIDAuMCAgIDEuMCAgIC0+ICAwCi1kcWRpdjc3NCBkaXZpZGUgLTAuMCAgIDEuMCAgIC0+IC0wCi1kcWRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjc3NiBkaXZpZGUgLTEuMCAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjc3NyBkaXZpZGUgIDEuMCAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi0KLS0tIFNwZWNpYWxzCi1kcWRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2NzgxIGRpdmlkZSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kcWRpdjc4MiBkaXZpZGUgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZHFkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRxZGl2Nzg0IGRpdmlkZSAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1kcWRpdjc4NSBkaXZpZGUgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZHFkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLWRxZGl2Nzg3IGRpdmlkZSAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY3ODggZGl2aWRlIC0xMDAwICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCi1kcWRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2NzkwIGRpdmlkZSAtMSAgICAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAotZHFkaXY3OTEgZGl2aWRlIC0wICAgICBJbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCi1kcWRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKLWRxZGl2NzkzIGRpdmlkZSAgMSAgICAgSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAotZHFkaXY3OTQgZGl2aWRlICAxMDAwICBJbmYgICAtPiAgMEUtNjE3NiBDbGFtcGVkCi1kcWRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFkaXY4MDAgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZHFkaXY4MDIgZGl2aWRlIC1JbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLWRxZGl2ODAzIGRpdmlkZSAtSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kcWRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZHFkaXY4MDUgZGl2aWRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRxZGl2ODA2IGRpdmlkZSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kcWRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODA4IGRpdmlkZSAtMTAwMCAgSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAotZHFkaXY4MDkgZGl2aWRlIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQKLWRxZGl2ODExIGRpdmlkZSAtMCAgICAtSW5mICAgLT4gIDBFLTYxNzYgQ2xhbXBlZAotZHFkaXY4MTIgZGl2aWRlICAwICAgIC1JbmYgICAtPiAtMEUtNjE3NiBDbGFtcGVkCi1kcWRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQKLWRxZGl2ODE0IGRpdmlkZSAgMTAwMCAtSW5mICAgLT4gLTBFLTYxNzYgQ2xhbXBlZAotZHFkaXY4MTUgZGl2aWRlICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxZGl2ODIxIGRpdmlkZSAgTmFOIC1JbmYgICAgLT4gIE5hTgotZHFkaXY4MjIgZGl2aWRlICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kcWRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRxZGl2ODI0IGRpdmlkZSAgTmFOIC0wICAgICAgLT4gIE5hTgotZHFkaXY4MjUgZGl2aWRlICBOYU4gIDAgICAgICAtPiAgTmFOCi1kcWRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRxZGl2ODI3IGRpdmlkZSAgTmFOICAxMDAwICAgLT4gIE5hTgotZHFkaXY4MjggZGl2aWRlICBOYU4gIEluZiAgICAtPiAgTmFOCi1kcWRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRxZGl2ODMwIGRpdmlkZSAtSW5mICBOYU4gICAgLT4gIE5hTgotZHFkaXY4MzEgZGl2aWRlIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kcWRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRxZGl2ODMzIGRpdmlkZSAtMCAgICBOYU4gICAgLT4gIE5hTgotZHFkaXY4MzQgZGl2aWRlICAwICAgIE5hTiAgICAtPiAgTmFOCi1kcWRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRxZGl2ODM2IGRpdmlkZSAgMTAwMCBOYU4gICAgLT4gIE5hTgotZHFkaXY4MzcgZGl2aWRlICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRxZGl2ODQxIGRpdmlkZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQyIGRpdmlkZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ0IGRpdmlkZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ1IGRpdmlkZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ3IGRpdmlkZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ4IGRpdmlkZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODUwIGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODUxIGRpdmlkZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODUzIGRpdmlkZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU0IGRpdmlkZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU2IGRpdmlkZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU3IGRpdmlkZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODU5IGRpdmlkZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFkaXY4NjEgZGl2aWRlICBOYU45IC1JbmYgICAtPiAgTmFOOQotZHFkaXY4NjIgZGl2aWRlICBOYU44ICAxMDAwICAtPiAgTmFOOAotZHFkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONwotZHFkaXY4NjQgZGl2aWRlICBOYU42ICBOYU41ICAtPiAgTmFONgotZHFkaXY4NjUgZGl2aWRlIC1JbmYgICBOYU40ICAtPiAgTmFONAotZHFkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMwotZHFkaXY4NjcgZGl2aWRlICBJbmYgICBOYU4yICAtPiAgTmFOMgotCi1kcWRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY4NzIgZGl2aWRlICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODczIGRpdmlkZSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY4NzUgZGl2aWRlICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODc2IGRpdmlkZSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY4NzggZGl2aWRlICBJbmYgICAgc05hTjkwICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODc5IGRpdmlkZSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRxZGl2ODgxIGRpdmlkZSAgLU5hTjkgIC1JbmYgICAtPiAgLU5hTjkKLWRxZGl2ODgyIGRpdmlkZSAgLU5hTjggICAxMDAwICAtPiAgLU5hTjgKLWRxZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcKLWRxZGl2ODg0IGRpdmlkZSAgLU5hTjYgIC1OYU41ICAtPiAgLU5hTjYKLWRxZGl2ODg1IGRpdmlkZSAgLUluZiAgIC1OYU40ICAtPiAgLU5hTjQKLWRxZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMKLWRxZGl2ODg3IGRpdmlkZSAgIEluZiAgIC1OYU4yICAtPiAgLU5hTjIKLQotZHFkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODkyIGRpdmlkZSAtc05hTjk4IC0xICAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjg5MyBkaXZpZGUgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODk1IGRpdmlkZSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjg5NiBkaXZpZGUgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxZGl2ODk4IGRpdmlkZSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcWRpdjg5OSBkaXZpZGUgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBWYXJpb3VzIGZsYXZvdXJzIG9mIGRpdmlkZSBieSAwCi1kcWRpdjkwMSBkaXZpZGUgICAgMCAgICAgICAwICAgLT4gIE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFkaXY5MDMgZGl2aWRlICAgIDAuMDAwICAgMCAgIC0+ICBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcWRpdjkwNCBkaXZpZGUgICAgMC4wMDAxICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MDYgZGl2aWRlICAgIDAuMSAgICAgMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkwNyBkaXZpZGUgICAgMSAgICAgICAwICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MDkgZGl2aWRlICAgMTAgICAgICAgMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkxMCBkaXZpZGUgICAxRSsxMDAgICAwLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWRpdjkyMSBkaXZpZGUgICAtMC4wMDAxICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MjMgZGl2aWRlICAgLTAuMSAgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkyNCBkaXZpZGUgICAtMSAgICAgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MjYgZGl2aWRlICAtMTAgICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkyNyBkaXZpZGUgIC0xRSsxMDAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWRpdjkzMSBkaXZpZGUgICAgMC4wMDAxIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MzMgZGl2aWRlICAgIDAuMSAgICAtMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkzNCBkaXZpZGUgICAgMSAgICAgIC0wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5MzYgZGl2aWRlICAgMTAgICAgICAtMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjkzNyBkaXZpZGUgICAxRSsxMDAgIC0wLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWRpdjk0MSBkaXZpZGUgICAtMC4wMDAxIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5NDMgZGl2aWRlICAgLTAuMSAgICAtMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjk0NCBkaXZpZGUgICAtMSAgICAgIC0wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkaXY5NDYgZGl2aWRlICAtMTAgICAgICAtMC4wIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWRpdjk0NyBkaXZpZGUgIC0xRSsxMDAgIC0wLjAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi0tLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkKLWRxZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQotZHFkaXYxMDIyICBkaXZpZGUgMUUwICAgICAgICAgIDJFMCAtPiAwLjUKLWRxZGl2MTAyMyAgZGl2aWRlIDFFMCAgICAgICAgICAzRTAgLT4gMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzIEluZXhhY3QgUm91bmRlZAotZHFkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxCi1kcWRpdjEwMjUgIGRpdmlkZSAyNEUtMSAgICAgICAgMkUwIC0+IDEuMgotZHFkaXYxMDI2ICBkaXZpZGUgMjQwMEUtMyAgICAgIDJFMCAtPiAxLjIwMAotZHFkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUKLWRxZGl2MTAyOCAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTEgLT4gMi41Ci1kcWRpdjEwMjkgIGRpdmlkZSA1RTAgICAgICAyMDAwRS0zIC0+IDIuNQotZHFkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQotZHFkaXYxMDMxICBkaXZpZGUgNUUwICAgICAgICAyMEUtMiAtPiAyNQotZHFkaXYxMDMyICBkaXZpZGUgNDgwRS0yICAgICAgIDNFMCAtPiAxLjYwCi1kcWRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUKLQotLS0gRUNNQVNjcmlwdCBiYWQgZXhhbXBsZXMKLXJvdW5kaW5nOiAgICBoYWxmX2Rvd24KLWRxZGl2MTA0MCAgZGl2aWRlIDUgOSAgLT4gMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotZHFkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEd5dXJpcyBleGFtcGxlCi1kcWRpdjEwNTAgIGRpdmlkZSA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTEyNTQgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cwotLS0gc2lnbnMKLWRxZGl2MTc1MSBkaXZpZGUgIDFlKzQyNzcgIDFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFkaXYxNzUyIGRpdmlkZSAgMWUrNDI3NyAtMWUtMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE3NTMgZGl2aWRlIC0xZSs0Mjc3ICAxZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc1NCBkaXZpZGUgLTFlKzQyNzcgLTFlLTMzMTEgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFkaXYxNzU1IGRpdmlkZSAgMWUtNDI3NyAgMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWRpdjE3NTYgZGl2aWRlICAxZS00Mjc3IC0xZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZGl2MTc1NyBkaXZpZGUgLTFlLTQyNzcgIDFlKzMzMTEgLT4gLTBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFkaXYxNzU4IGRpdmlkZSAtMWUtNDI3NyAtMWUrMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQotZHFkaXYxNzYwIGRpdmlkZSAxZS02MDY5IDFlKzEwMSAtPiAxRS02MTcwIFN1Ym5vcm1hbAotZHFkaXYxNzYxIGRpdmlkZSAxZS02MDY5IDFlKzEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbAotZHFkaXYxNzYyIGRpdmlkZSAxZS02MDY5IDFlKzEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbAotZHFkaXYxNzYzIGRpdmlkZSAxZS02MDY5IDFlKzEwNCAtPiAxRS02MTczIFN1Ym5vcm1hbAotZHFkaXYxNzY0IGRpdmlkZSAxZS02MDY5IDFlKzEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbAotZHFkaXYxNzY1IGRpdmlkZSAxZS02MDY5IDFlKzEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxNzY2IGRpdmlkZSAxZS02MDY5IDFlKzEwNyAtPiAxRS02MTc2IFN1Ym5vcm1hbAotZHFkaXYxNzY3IGRpdmlkZSAxZS02MDY5IDFlKzEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZGl2MTc2OCBkaXZpZGUgMWUtNjA2OSAxZSsxMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWRpdjE3NjkgZGl2aWRlIDFlLTYwNjkgMWUrMTEwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQotZHFkaXYxNzcwIGRpdmlkZSAxZSs0MCAxZS02MTAxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxIENsYW1wZWQKLWRxZGl2MTc3MSBkaXZpZGUgMWUrNDAgMWUtNjEwMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKLWRxZGl2MTc3MiBkaXZpZGUgMWUrNDAgMWUtNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkCi1kcWRpdjE3NzMgZGl2aWRlIDFlKzQwIDFlLTYxMDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKLWRxZGl2MTc3NCBkaXZpZGUgMWUrNDAgMWUtNjEwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc3NSBkaXZpZGUgMWUrNDAgMWUtNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc3NiBkaXZpZGUgMWUrNDAgMWUtNjEwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc3NyBkaXZpZGUgMWUrNDAgMWUtNjEwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc3OCBkaXZpZGUgMWUrNDAgMWUtNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTc3OSBkaXZpZGUgMWUrNDAgMWUtNjExMCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotZHFkaXYxODAxIGRpdmlkZSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCi1kcWRpdjE4MDIgZGl2aWRlICAxLjAwMEUtNjE3MiAgIDFlKzEgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwKLWRxZGl2MTgwMyBkaXZpZGUgIDEuMDBFLTYxNzIgICAgMWUrMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbAotZHFkaXYxODA0IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSszICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCi1kcWRpdjE4MDUgZGl2aWRlICAxLjBFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcWRpdjE4MDYgZGl2aWRlICAxLjNFLTYxNzIgICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MDcgZGl2aWRlICAxLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MDggZGl2aWRlICAxLjdFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MDkgZGl2aWRlICAyLjNFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTAgZGl2aWRlICAyLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTEgZGl2aWRlICAyLjdFLTYxNzIgICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTIgZGl2aWRlICAxLjQ5RS02MTcyICAgIDFlKzQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTMgZGl2aWRlICAxLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTQgZGl2aWRlICAxLjUxRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTUgZGl2aWRlICAyLjQ5RS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTYgZGl2aWRlICAyLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjE4MTcgZGl2aWRlICAyLjUxRS02MTcyICAgIDFlKzQgIC0+IDNFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRxZGl2MTgxOCBkaXZpZGUgIDFFLTYxNzIgICAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsCi1kcWRpdjE4MTkgZGl2aWRlICAzRS02MTcyICAgICAgIDFlKzUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZGl2MTgyMCBkaXZpZGUgIDVFLTYxNzIgICAgICAgMWUrNSAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFkaXYxODIxIGRpdmlkZSAgN0UtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFkaXYxODIyIGRpdmlkZSAgOUUtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFkaXYxODIzIGRpdmlkZSAgOS45RS02MTcyICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kcWRpdjE4MjQgZGl2aWRlICAxRS02MTcyICAgICAgLTFlKzQgIC0+IC0xRS02MTc2ICAgIFN1Ym5vcm1hbAotZHFkaXYxODI1IGRpdmlkZSAgM0UtNjE3MiAgICAgIC0xZSs1ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWRpdjE4MjYgZGl2aWRlIC01RS02MTcyICAgICAgIDFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZGl2MTgyNyBkaXZpZGUgIDdFLTYxNzIgICAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTgyOCBkaXZpZGUgLTlFLTYxNzIgICAgICAgMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTgyOSBkaXZpZGUgIDkuOUUtNjE3MiAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MTgzMCBkaXZpZGUgIDMuMEUtNjE3MiAgICAtMWUrNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi1kcWRpdjE4MzEgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZGl2MTgzMiBkaXZpZGUgIDEuMEUtNTk3NyAgICAgMWUrMTk5IC0+IDFFLTYxNzYgICBTdWJub3JtYWwgUm91bmRlZAotZHFkaXYxODMzIGRpdmlkZSAgMS4wRS01OTc3ICAgICAxZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxODM0IGRpdmlkZSAgMi4wRS01OTc3ICAgICAyZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxODM1IGRpdmlkZSAgNC4wRS01OTc3ICAgICA0ZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxODM2IGRpdmlkZSAxMC4wRS01OTc3ICAgIDEwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxODM3IGRpdmlkZSAzMC4wRS01OTc3ICAgIDMwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotZHFkaXYxODM4IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjYgLT4gMS4wRS02MTQ4IFN1Ym5vcm1hbAotZHFkaXYxODM5IGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjUgLT4gMS4wRS02MTQ3IFN1Ym5vcm1hbAotZHFkaXYxODQwIGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjQgLT4gMS4wRS02MTQ2IFN1Ym5vcm1hbAotCi0tLSByYW5kb21zCi1yb3VuZGluZzogIGhhbGZfZXZlbgotZHFkaXYyMDEwICBkaXZpZGUgIC01MjMxMTk1NjUyOTMxNjUxOTY4MDM0MzU2MTE3MTE4ODUwICAgICAgICAgLTcyNDM3MTg2NjQ0MjI1NDg1NzMyMDMyNjA5NzAuMzQ5OTUgICAgICAgICAgLT4gICA3MjIxNjkuOTA5NTgzMTI4NDYyNDczNjA1MTQ2MDU1MDY4MCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAxMSAgZGl2aWRlICAtODk1ODQ2Njk3NzM5MjcuODI3MTEyMzczNTAwMjI1MTUzNTIgICAgICAgIC00MjA3Nzk0MzcyODUyOTYzNTg4NC4yMTE0MjYyNzUzMjk4NSAgICAgICAgIC0+ICAgMC4wMDAwMDIxMjkwMTcyOTExNDY0NzE1NjU5MjgxMjU4ODc1MjcyNjYgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMTIgIGRpdmlkZSAgLTIuODI4MjAxNjkzMzYwNzIzMjAzODA2OTc0ODkxOTQ2MTgwRS0yMzIgICAgODEyNTk2NTQxMjIxODIzOTYwMzg2Mzg0NDAzMDg5MjQwLjkgICAgICAgICAtPiAgLTMuNDgwNDUwMDc1NjQwNTIxMzIwMDQwMDU1NzU5MTI1MTIwRS0yNjUgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMTMgIGRpdmlkZSAgLTY0NDI3NzUzNzI3NjEwNjkyNjc1MDI5Mzc1Mzk0MDg3MjAgICAgICAgICAgMjQ5MDQwODUwNTYuNjkxODU0NjUxNDUxODI2MDYwODkxOTYgICAgICAgICAtPiAgLTI1ODcwMzU1NjM4ODIyNjQ2MzY4NzcwMS40ODg0NzE5NTg5IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDE0ICBkaXZpZGUgICA1LjUzNTUyMDAxMTI3MjYyNTYyOTYxMDA3OTg3OTcxNDcwNSAgICAgICAgLTQ0MzQzNjY0NjUwLjU3MjAzMDUyMDAzMDY4MTEzNTMxMjA4ICAgICAgICAgLT4gIC0xLjI0ODMyMjYzMDcyODA4OTMwODk3NTk0MDUzMzQ5MzU2MkUtMTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMTUgIGRpdmlkZSAgIDY1OTE5MjczNzEyNTE3ODY1OTY0MzI1Ljk5NDE5NjI1MDEwICAgICAgICAtMzE0NzMzMzU0MTQxMzgxNzM3Mzc4NjIyNTE1Ljc3ODkwNTQgICAgICAgICAtPiAgLTAuMDAwMjA5NDQ0ODI5NTUyMTQ5MDYxNjM3OTc4NDc1ODkxMTYzMiBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAxNiAgZGl2aWRlICAtNy43NzkxNzI1NjgxOTMxOTcxMDcxMTUyNzUxNDA0MzExMjlFKzc1OSAgIC0xNDA0NTMwMTU2MzkuMzk4ODk4NzY1Mjg5NTE3ODc4MjE0MyAgICAgICAgIC0+ICAgNS41Mzg2Mjk3OTIxNjE2NDE1MzQ5NjI3NzQyNDQyMzgxMTVFKzc0OCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAxNyAgZGl2aWRlICAgNjQ0MzE0ODMyNTk3NTY5LjAxODEyMjYwNjc1MTgxNzg3OTcgICAgICAgIC0xMTUwMjQ1ODUyNTc0MjUuMTYzNTc1OTUyMTU2NTIwMTA3NSAgICAgICAgIC0+ICAtNS42MDE1NDAxNTAzNTY0NzkyNTczNjc2ODc0NTA5MjI3OTUgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMTggIGRpdmlkZSAgIDYuODk4NjQwOTQxNTc5NjExNDUwNjc2NTkyNTUzMjg2ODcwRS00NyAgICAtMTEyNzI0Mjk4ODE0MDc4NTE0ODUxNjM5MTQ5OTkuMjU5NDMgICAgICAgICAtPiAgLTYuMTE5OTIzNTc4Mjg1MzM4Njg5MzcxMTM3NjQ4MzE5MjgwRS03NSBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAxOSAgZGl2aWRlICAtMzU5MTM0NDU0NDg4ODcyNzEzMy4zMDgxOTc1MDE2MzI1NCAgICAgICAgICA1MzI5Mzk1LjQyMzc5Mjc5NTY2MTQ0NjU2MTA5MDMzMTAzNyAgICAgICAgIC0+ICAtNjczODc0NjYyOTQxLjE5Njg1MjU1ODk0NjA1MzM3MjUyOTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMjAgIGRpdmlkZSAgLTcuNjgyMzU2NzgxMzg0NjMxMzEzMTU2NDYyNzI0NDI1ODM4RSs3NDcgICAtNi42MDM3NTg1NTUxMjIxOTA1NzI4MTkyMjE0MTgwOTk0MEUrNzAzICAgICAtPiAgIDEuMTYzMzMwOTYwMjc5NTU2MDE2Njc4Mzc5MTI4ODc1MTQ5RSs0NCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAyMSAgZGl2aWRlICAtNDUxMTQ5NTU5NjU5Njk0MTgyMDg2MzIyNC4yNzQ2Nzk2OTkgICAgICAgICAzMzY1Mzk1MDE3LjI2MzMyOTc5NTQ0OTY2MTYxNjA5MDcyNCAgICAgICAgIC0+ICAtMTM0MDU1NDU0ODExNTMwNC45MDQxNjY4ODgwMTgzNDYyOTkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMjIgIGRpdmlkZSAgIDUuMjExMTY0MTI3ODQwOTMxNTE3MjYzNjM5NjA4MTUxMjk5ICAgICAgICAgMTY0LjU1NjYzODEzNTYyNzY1NjcwMTI1MzM4NDcwMDY0NTMgICAgICAgICAtPiAgIDAuMDMxNjY3OTA1ODc2NTUyMjg4NjQ0NzgyNjAxNTcxNTY1MTAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMjMgIGRpdmlkZSAgLTQ5ODkxLjIyNDM4OTM0NTg4MzAzODQwNzc2ODQ2MjAzODMgICAgICAgICAtNDcxNzkuOTMxMjk2MTg2MDc0NzU1NDA1MzM3MTE3MTUzMCAgICAgICAgICAtPiAgIDEuMDU3NDY3MDg0Mzg2NzY3MjkxNjAyMTg5NjU2NDMwMjY4IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDI0ICBkaXZpZGUgICAxNTA2NTQ3Ny40NzIxNDI2ODQ4ODA3NzQxNTQ2MjQxMzM1MyAgICAgICAgIDQzNjYyMTEuMTIwODkyOTUzMjYxMzA5NTI5NzQwNTUyNTk2ICAgICAgICAgLT4gICAzLjQ1MDQ2OTMwOTY2MTIyNzk4NDI0NDU0NTUxMzQ0MTM1OSBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAyNSAgZGl2aWRlICAgMS41NzU2NzAyNjk0NDA3NjE4NDYxMDk2MDI0Mjk2MTI2NDRFKzM3MCAgICA2NTMxOTk2NDkzMjQ3NDAzMDAuMDA2MTg1NDgyNjQzNDM5ICAgICAgICAgIC0+ICAgMi40MTIyMzM3OTU3MDAzNTkxNzA5MDQ1ODg1NDgwNDE0ODFFKzM1MiBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAyNiAgZGl2aWRlICAtMjExMjQyMjMxMTczMzQ0ODkyNDU3MzQzMjE5Mi42MjAxNDUgICAgICAgIC04MDA2NzIwNi4wMzU5MDY5MzE1Mzg0ODIxNTg0ODYxMzQwNiAgICAgICAgIC0+ICAgMjYzODMxMTUwODk0MTc2NjAxNzUuMjAxMDI2NDY3NTY1NzQgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMjcgIGRpdmlkZSAgLTY3MDk2NTM2MDUxMjc5ODA5LjMyMjE4NjExNTQ4NzIxODM5ICAgICAgICAtODY5Njg1NDEyODgxOTQxMDgxNjY0MjUxOTkwMTgxLjEwNDkgICAgICAgICAtPiAgIDcuNzE1MDM1MjM2NTg0ODA1OTIxMjc4NTY2MzY1MjMxMTY4RS0xNCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAyOCAgZGl2aWRlICAtNTg2MTI5MDg1NDg5NjIwNDcuMjE4NjY5MTM0MjU0ODg5NzIgICAgICAgIC05Nzg0NDk1OTc1MzEuMzg3MzY2NTU4MzQ3NTYzMzgzMTY0NCAgICAgICAgIC0+ICAgNTk5MDMuODYwODU5OTE3MDMwOTEyMzY1MDc4NTk4MzcwMjMgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMjkgIGRpdmlkZSAgLTEzMzAzMjQxMjAxMDk0Mi4xNDc2ODY0MTM4MjEzMzE5Nzk2ICAgICAgICAtNy44ODIwNTkyOTM0OTg2NzA3MDU0NDY1Mjg2NDgyMDEzNTlFLTQyOCAgICAtPiAgIDEuNjg3Nzg3NTA2NTA0NDMzMDY0NTQ5NTE1NjgxNjkzNzE1RSs0NDEgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzAgIGRpdmlkZSAgIDEuODM3NDY2OTgzMzg5NjYwMjk0OTIyOTk3MTYzNjA1MTNFKzk3NyAgICAtOS44OTc5MjY2MDg5Nzk2NDk5NTE2NzI4Mzk4NzkxMjg2MDNFKzE1NCAgICAtPiAgLTEuODU2NDE2MDUxNTQyMjEyNTUyMDQyMzkwMjE4MDYyNDU4RSs4MjIgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzEgIGRpdmlkZSAgLTExMzc0MjQ3NTg0MTM5OTIzNjMwNzEyODk2Mi4xNTA3MDYzICAgICAgICAgODI5ODYwMi4yMDMwNDk4MzQ3MzI2NTc1Njc5NjUyNjI5ODkgICAgICAgICAtPiAgLTEzNzA2MjIxMDA2NjY1MTM3ODI2LjE2NTU3MzkzOTE5OTI5IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDMyICBkaXZpZGUgICAxOTYuNDc4NzU3NDY1MDc1NDE1Mjk5NTk0MTgwODMzMTg2MiAgICAgICAgIDkyOS42NTUzMzg4NDcyMzE4MDk0NDI3NDIyMTE3MTcyMzk0ICAgICAgICAgLT4gICAwLjIxMTM0NTgwNjYxNzY1MjY2NTEwMDY5MTc5MjI4MTQwMTggSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzMgIGRpdmlkZSAgIDcxOTMxMjIxNDY1LjQzODY3OTk2MjgyODAzNjI4MTMwMzUwICAgICAgICAgMzgzODY4NTkzNDIwNjQyNjI1NzA5MDcxOC40MDIyNDg4NTMgICAgICAgICAtPiAgIDEuODczODUwMTMyNTI3NDIzNDEzNjA3MTk5NTEzMzI0MDIxRS0xNCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAzNCAgZGl2aWRlICAgNDg4LjQyODI1MDIyODk2NTE2NTM3ODM1OTYyNDYzMTI4ODUgICAgICAgIC04MC42ODk0MDk1NjgwNjYzNDI4MDA3ODcwNjU3Nzk1MzE4OCAgICAgICAgIC0+ICAtNi4wNTMxODkwNDcyODA2OTMzMTg4NDQ4MDE4OTk0NzMyNzIgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzUgIGRpdmlkZSAgIDkuMDAxNzY0MzQ0OTYzOTIxNzU0OTgxNzYyOTEzMjQ3Mzk0RS0xNjIgICAtOC41ODU1NDA5NzM2NjcyMDU3NTM3MzQ5Njc2NDUzODY5MTlFLTcyOSAgICAtPiAgLTEuMDQ4NDc5NTc0MjcxODI3MzI2Mzk2MDEyNTczMjMyOTM0RSs1NjcgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzYgIGRpdmlkZSAgLTcuNDA0MTMzOTU5NDA5ODk0NzQzNzA2NDAyODU3MTQ1NDcxRS04MjggICAtNTEuMzgxNTk5Mjk0NjAyODk3MTExMzQ2ODQ4NDMwODYyNjUgICAgICAgICAtPiAgIDEuNDQxMDA4ODU1NTE2MDI5NDYxMDMyMDYxNzg1MjE5NzczRS04MjkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzcgIGRpdmlkZSAgIDIuOTY3NTIwMjM1NTc0NDE5Nzk0MDQ4OTk0NDM2MDQwNzE3RS02MTMgICAtNjI1MjUxMzg1NS45MTM5NDg5NDk0OTg3OTI2MjczMTg4OSAgICAgICAgICAtPiAgLTQuNzQ2MTIzNDA1NjU2NDA5MTI3NTcyOTk4NzUxODg1MzM4RS02MjMgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwMzggIGRpdmlkZSAgLTE4ODI2ODUyNjU0ODI0MDQwNTA1LjgzOTIwMzY2NzY1MDUxICAgICAgICAtNjMzNjkyNDg3Nzk0MjQzNzk5MjU5MDU1NzQ2MDE0NzM0MCAgICAgICAgICAtPiAgIDIuOTcwOTc2MTQ2NTQ2NDk0NjY5ODA3ODg2Mjc4NTE5MTk0RS0xNSBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjAzOSAgZGl2aWRlICAtOC4xMDE0MDY3ODQ4MDkxOTc2MDQ5NDk1ODQwMDE3MzU5NDlFKzU2MSAgICA0LjgyMzMwMDMwNjk0ODk0MjgyMTA3NjY4MTY1ODc3MTYzNUUrMzYxICAgIC0+ICAtMS42Nzk2Mzk3MjE2MTA4MzkyMDQ3Mzg0NDU3NDcyMzg5ODdFKzIwMCBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjA0MCAgZGl2aWRlICAtNi4xMTk4MTk3Nzc3MzA5NDA1MjMzMTA2MjU4NTE5MTcyM0UrMjk1ICAgICAxLjUwNzYxMDI1Mzc1NTMzOTMyODMwMjc3OTAwNTU4NjUzNEUrMjM4ICAgIC0+ICAtNC4wNTkyODUwNTg5MTE1NzcyNDQwNDQ0MTg0MTYwNDQ3NjNFKzU3IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDQxICBkaXZpZGUgICA2LjQ3MjYzODg1MDA0NjgxNTg4MDU5OTIyMDUzNDI3NDA1NUUtNTk2ICAgLTQuNDc1MjMzNzEyMDgzMDQ3NTE2OTMzOTExNzg2MTU5OTcyICAgICAgICAgLT4gIC0xLjQ0NjMyNDIwNzA2MjI2MTc0NTUyMDQ5NjQ3NTc3ODg3OUUtNTk2IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDQyICBkaXZpZGUgIC04NDQzODU5MzMzMC43MTI3NzgzOTYzMTE0NDUwOTM5NzExMiAgICAgICAgLTU4NjY4NDU5NjIwNDQwMTY2NDIwODk0Ny40MDU0ODc5NjMzICAgICAgICAgLT4gICAxLjQzOTI1MDIxODU1MDA0MTIyODc1OTk4MzkzNzc3MjUwNEUtMTMgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDMgIGRpdmlkZSAgIDkuMzU0NTMzMjMzMjk0MDIyNjE2Njk1ODE1NjU2NzA0MzY5RS0yNCAgICAgNDA1LjUwMDM5MDYyNjEzNTMwNDI1MjE0NDE2MzU5MTc0NiAgICAgICAgICAtPiAgIDIuMzA2OTExMDI4ODI3Nzc0NTQ5NzQwNTcxMjI5NzM2MTk4RS0yNiBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjA0NCAgZGl2aWRlICAgOTg1NjA2NDIzMzUwMjEwLjczNzQ4NzY2NTAxNDk5NTc4ODEgICAgICAgIC0zNjgxMTU2MzY5Ny40MTkyNTY4MTg2NjY5NDg1OTgyODc5NCAgICAgICAgIC0+ICAtMjY3NzQuMzY5OTA4NjQxMTk0NDUzMzU4MTMzNTQ3MTc3MTEgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDUgIGRpdmlkZSAgLTguMTg3MjgwNzc0MTc3NzE1NzA2Mjc4MDAyMjQ3NzY2MzExRS0xMjMgICAtMzg3ODQxMjQzOTMuOTEyMTI4NzA4Mjg0MzAwMDEzMDAwNjggICAgICAgICAtPiAgIDIuMTEwOTg3NjUzMzU2MTM5MTQ3MzU3MjQwNzI3Nzk0MzY1RS0xMzMgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDYgIGRpdmlkZSAgLTQuNjEyMjAzMTI2MzUwMDcwOTAzNDU5MjQ1Nzk4MzcxNjU3RSs5MTIgICAgNy45NzE1NjIxODI3Mjc5NTYyOTA5MDE5ODQ3MzY4MDA1MTlFKzY0ICAgICAtPiAgLTUuNzg1ODIwOTIyNzA4NjgzMjM3MDk4ODI2NjYyNzY5NzQ4RSs4NDcgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDcgIGRpdmlkZSAgIDQuNjYxMDE1OTA5NDIxNDg1Mjk4MjQ3OTI4OTY3OTc3MDg5RSs4ODggICAtNi4zNjA5MTEyNTMzMjM5MjIzMzg3MzczMTE1NjM4NDU1ODFFKzM4OCAgICAtPiAgLTcuMzI3NTkxNDc4MzIxMzY1OTgwMTU2NjU0NTM5NjM4ODM2RSs0OTkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDggIGRpdmlkZSAgIDkxNTYwNzgxNzI5MDMuMjU3NTAwMDAzMjYwNzEwODMzMDMwICAgICAgICAgNy4xODk3OTY2NTMyNjIxNDcxMzkwNzE2MzQyMzc5NjQwNzRFLTkwICAgICAtPiAgIDEuMjczNDgyMjE1NzY2MDAwOTk0MzY1MjAxNTQ1MDk2MDI2RSsxMDIgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNDkgIGRpdmlkZSAgLTEuNzEwNzIyMzAzMzI3NDc2NTg2MzczNDc3NzgxMjc2NTg2RS0zMTEgICAtMzE2NzU2MTYyODI2MDE1NjgzNzMyOTMyMy43MjkzODA2OTUgICAgICAgICAtPiAgIDUuNDAwNzU0NTk5NTc4NjEzOTg0ODc1NzUyOTU4NjQ1NjU1RS0zMzYgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNTAgIGRpdmlkZSAgLTQuNjQ3OTM1MjEwODgxODA2MjM4MzIxNjE2MzQ1NDEzMDIxRS04NzggICAgMjA5Mzg4LjU0MzE4Njc3NDQ2NDgxNzczMDg0NjA2Mzk1ODIgICAgICAgICAtPiAgLTIuMjE5NzY1NzcxMzk0NTkzNzMzMTQwNDk0Mjk3Mzg4MTQwRS04ODMgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNTEgIGRpdmlkZSAgIDU5NTguNjk0NzI4Mzk1NzYwOTkyNzE5MDg0NzgxNTgyNzAwICAgICAgICAgNC41NDE1MTAxNTY1NjQzMTU2MzI1MzYzNTMxNzE4NDYwOTZFLTc0NiAgICAtPiAgIDEuMzEyMDUxMzkzMjUzNjM4NjY0OTQ3ODUyNjkzMDA1NDgwRSs3NDkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNTIgIGRpdmlkZSAgLTcuOTM1NzMyNTQ0NjQ5NzAyMTc1MjU2Njk5ODg2ODcyMDkzRS00ODkgICAtNy40MzMzMjkwNzM2NjQ3OTMxMzg5OTg3NjU2NDc0Njc5NzFFKzM2MCAgICAtPiAgIDEuMDY3NTg3OTQ5NjI2MDc2OTE3NjcyMjcxNjE5NjY0NjU2RS04NDkgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNTMgIGRpdmlkZSAgLTI3NDY2NTA4NjQ2MDExNTcuODYzNTg5OTU5OTM5OTAxMzUwICAgICAgICAgNy4wMTY2ODQ5NDU1MDc2NDc1Mjg5MDcxODQ2OTQzNTk1OThFKzU0OCAgICAtPiAgLTMuOTE0NDU2NTkzMDA5MzA5NTI5MzUxMjU0OTUwNDI5OTMyRS01MzQgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjIwNTQgIGRpdmlkZSAgIDM2MDUxNDk0MDg2MzExOTczNjU0NDc5NTMuOTk0NTY5MTc4ICAgICAgICAtNzU2MTQwMjU4MjU2NDkwODIuNzgyNjQ4NjQ0MjgyMzc4MzMgICAgICAgICAtPiAgLTQ3Njc4MzE1Ljg4NDcyNjkzNTA3MDYwMDYzMTg4MDIwNTMyIEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDU1ICBkaXZpZGUgICA3ODgxOTQzMjA5MjE3OTg0MDQ5MDYzNzUyMTQuMTk2MzQ5ICAgICAgICAgLTYuMjIyNzE4MTQ4NDMzMjQ3Mzg0OTMyNTczNDAxOTc2MzM3RS00MTggICAgLT4gIC0xLjI2NjYzOTkxODYzNDY3MTgwMzk4MjIyMjI0NDk3NzI4N0UrNDQ0IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDU2ICBkaXZpZGUgICA1NjIwNzIyNzMwNTM0NzUyLjc1ODIwODk0MzQ0NzYwMzIxMSAgICAgICAgIDYuODQzNTUyODQxMTY4NTM4MzE5MTIzMDAwOTE3NjU3NzU5RS0xMzkgICAgLT4gICA4LjIxMzE2NDgwMDQ4NTQzNDY2NjYyOTk3MDQ0MzczOTU1NEUrMTUzIEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDU3ICBkaXZpZGUgICA3MzA0NTM0Njc2NzEzNzAzOTM4MTAyLjQwMzk0OTAxOTQwMiAgICAgICAgLTU3NjE2OS4zNjg1MDEwOTM1MTA4MTUzMDIzODAzNTkwODM1ICAgICAgICAgLT4gIC0xMjY3Nzc1NjAxNDIwMTk5NS4zMTk2OTIzNzE0NDM5NDc3MiBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjA1OCAgZGl2aWRlICAgODA2NzkxODc2Mi4xMzQ2MjE2MzkyNTQ5MTY3ODY5NDU1NDcgICAgICAgIC04Ljc3NDc3MTQ4MDA1NTUzNjAwOTEwNTU5NjE2Mzg2NDc1OEUrOTU0ICAgIC0+ICAtOS4xOTQ0NDg4NTg4MzYzMzIxNTY3NjY3NjQ2MDUxMjUyNDVFLTk0NiBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2MjA1OSAgZGl2aWRlICAgOC43MDIwOTM0NTQxMjMwNDY1MDc1NzgyNTY4OTk1Mzc1NjNFLTMyNCAgIC01Ljg3NTM5OTczMzAxNjAxODQwNDU4MDIwMTE3NjU3NjI5M0UtNDAxICAgIC0+ICAtMS40ODExMDY2MjI0NTIwNTI1ODE0NzA0NDM1MjY5NTczMzVFKzc3IEluZXhhY3QgUm91bmRlZAotZHFkaXYyMDYwICBkaXZpZGUgIC00MTQyNi4wMTY2MjUxODQ1MTg2MTM4NjM1MjQxNTA5MjM1NiAgICAgICAgIDkwLjAwMTQ2NjIxNjg0NDc4MzAwNTEwNzY5ODAyMDEzNDY0ICAgICAgICAgLT4gIC00NjAuMjgxNTc1MDI4NzMxODY5MjczMjA2NzcwOTE3NjIwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gcmFuZG9tIGRpdmlkZSB0ZXN0cyB3aXRoIHJlc3VsdCBuZWFyIDEKLWRxZGl2NDAwMSBkaXZpZGUgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ1MjQ5MDAgICAyMDAzMTAwMzUyNzcwNzUzOTY5ODc4OTI1NjY0NDk3ODI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1MTcgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDAyIGRpdmlkZSAgNDgxNzc4NTc5MzkxNjQ5MDY1MjU3OTU1MjMxODM3MTY0NSAgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNjIwOTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTk4MiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDMgZGl2aWRlICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTYwMjgyICAgODI5OTE4NzQxMDkyMDA2NzMyNTY0ODA2ODQzOTU5MTE1OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Mjc5NSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDQgZGl2aWRlICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1MzY1ODk5ICAgNTY0MTA4ODQ1NTg5NzQwNzA0NDU0NDQ2MTc4NTM4OTk2NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzMzOCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDUgZGl2aWRlICA1NzUyMjc0Njk0NzA2NTQ1MzU5MzI2MzYxMzEzNDkwNDI0ICAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzUwMjcyMyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODYxOSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDYgZGl2aWRlICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MDk5NjY1ICAgNjc2MjA3OTQ3NzM3MzY3MDU5NDgyOTMxOTM0NjEzMjU3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MTMyNiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDcgZGl2aWRlICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjAyOTE2ICAgNzI4NjQyNTE1MzY5MTg5MDM0MTYzMzAyMzIyMjYwNjU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwNCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMDggZGl2aWRlICA5NDgxMjMzOTkxOTAxMzA1NzI3NjQ4MzA2NDIxOTQ2NjU1ICAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTkxOTEyNCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOTA0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAwOSBkaXZpZGUgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU2MTQzMTEgICA0MjgyMDUzOTQxODkzOTUxNzQyMDI5NDQ0MDY1NTgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyOTQgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDEwIGRpdmlkZSAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMzODY5NSAgICA2MjY4ODgyMjU0NDEyNTA2Mzk3NDE3ODE4NTAzMjcyOTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE3OSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMTEgZGl2aWRlICAzODYwOTczNjQ5MjIyMDI4MDA5NDU2NTk4NjA0NDY4NTQ3ICAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ3Njg0OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODQ5OCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMTIgZGl2aWRlICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3ODIxODM5ICAgNDc1MzE1NzA4MDEyNzQ2ODEyNzkwODA2MDYwNzc4ODM3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MDQwICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxMyBkaXZpZGUgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODA0MTkgICAgNTUyNDQ4NTQ2MjAzNzU0MDYyODA1NzA2Mjc3ODgxOTAzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMTM4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxNCBkaXZpZGUgIDg0MDU5NTQ1Mjc5NTIxNTg0NTUzMjM3MTM3Mjg5MTczOTUgICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTMzODY2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNDA2ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxNSBkaXZpZGUgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMTYxMTYgICA3NTU0MDk2NTAyMjM1MzIxMTQyNTU1ODAyMjM4MDI2NTQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg2MTkzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxNiBkaXZpZGUgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NDY3ODIgICA0MDUzMjU3Njc0MTI3NTE4NjA2ODcxMDU0OTM0NzY3MzU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5MjQzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxNyBkaXZpZGUgIDcxMTI0MTk0MjA3NTUwOTA0NTQ3MTY4ODg4NDQwMTE1ODIgICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDM4MTA1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzA5ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAxOCBkaXZpZGUgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MTE4NDYgICAzMTMyMzAyMTM3NTIwMDcyNzI4MTY0NTQ5NzMwOTA4NDE2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTUgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDE5IGRpdmlkZSAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE2MTAxMyAgIDQ3ODgzNzQwNDU4NDE0MTYzNTU3MDY3MTUwNDgxOTAwNzcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzkzMDMgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDIwIGRpdmlkZSAgOTQ2NjAyMTYzNjA0NzYzMDIxODIzODA3NTA5OTUxMDU5NyAgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk0ODQwNTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgwNCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMjEgZGl2aWRlICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM4NjUwICAgIDkxMjc0Mjc0NTY0Njc2NTYyNTU5NzM5OTY5MjEzOTA0MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTcwNSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMjIgZGl2aWRlICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTg4NTA0ICAgOTUwODQwMjc0MjkzMzY0MzIwODgwNjI2NDg5NzE5NTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjE0NSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMjMgZGl2aWRlICAxMTg2OTU2Nzk1NzI3MjMzNzA0OTYyMzYxOTE0MzYwODk1ICAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDMyOTU3NyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Mzg1ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAyNCBkaXZpZGUgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5Njc5MzggICA1OTcyMjEwMjY4ODM5MDE0ODEyNjk2OTE2MTcwOTU0OTc0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxNzEgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDI1IGRpdmlkZSAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5MzE0MCAgIDIzMDM4MDE2MjU1MjE2MTk5MzA4OTQ0NjAxMzk3OTk2NDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzE3NzMgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDI2IGRpdmlkZSAgNjAyMjIzMTU2MDAwMjg5ODI2NDc3NzM5MzQ3Mzk2NjU5NSAgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NDcxOTggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIyMSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMjcgZGl2aWRlICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjEwODkzICAgODQyNjE0ODMzNTgwMTM5NjE5OTk2OTM0NjAzMjIwMzE3OSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTE1ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAyOCBkaXZpZGUgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTg0MTE3NDkgICA4ODEyMjc4OTQ3MDI4Nzg0NjM3MzgyODQ3MDk4Mzg1MzE3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5OTkgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDI5IGRpdmlkZSAgODE0NTI4MjAwMjM0ODM2NzM4MzI2NDE5NzE3MDExNjE0NiAgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAwODM5ODggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzk0OCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMzAgZGl2aWRlICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3Mzg3MDI2ICAgNjgyMTU3NzU3MTg3Njg0MDE1MzEyMzUxMDEwNzQxODAwOCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NDU4MiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMzEgZGl2aWRlICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDIzNzIwICAgOTAxODU1NTMxOTUxODk2Njk3MDQ4MDU2NTQ4MjAxMzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTUwICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzMiBkaXZpZGUgIDQ2MDIxNTU3MTI5OTgyMjg0NDk2NDA3MTcyNTI3ODg4NjQgICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyODE4NTAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTM1NjAwICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzMyBkaXZpZGUgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNjQ0NzIgICA2Njc1NjA3NDgxNTIyNzg1NjE0NTA2ODI4MjkyMjc3MTAwICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgxMDgzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzNCBkaXZpZGUgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjQ0NzIgICA0MDE1ODgxNTE2ODcxODMzODk3NzY2OTQ1ODM2MjYyNjQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTUgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDM1IGRpdmlkZSAgMTQxNTU4MDIwNTkzMzQxMTgzNzU5NTQ1OTcxNjkxMDM2NSAgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY4ODAxMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMTM1MiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwMzYgZGl2aWRlICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzYxNTUyICAgOTQzMjk2ODI5NzA2OTU0MjgxNjc1MjAzNTI3NjM1MzA1NCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAxICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzNyBkaXZpZGUgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNDA2NTggICA0Nzk5MzE5NTkxMzAzODQ4NTAwNTMyNzY2NjgyMTcyNjU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMzMzMwICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzOCBkaXZpZGUgICAzMTY4NTQyNzA3MzI4Mzk1Mjk3OTA1ODQyODQ5ODc0NzIgICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg1MDA0ODMyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDUyMTE0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDAzOSBkaXZpZGUgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2OTc0MTUgICAzNTk4OTgxMzAwNTkyNDkwNDI3ODI2MDI3OTc1Njg2NzEyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5NzQgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDQwIGRpdmlkZSAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NjUyMCAgIDE2NjQzMTU0MzU2OTQ0NjEzNzExNTU4MDA2ODIxOTU2MTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0MyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNDEgZGl2aWRlICAxNjgwODcyMzE2NTMxMTI4ODkwMTAyODU1MzE2NTEwNTgxICAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjQ5NTU0NSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OTQ1ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA0MiBkaXZpZGUgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2NDQ3MzAgICA5ODgxMjc0ODc5NTY2NDA1NDc1NzU1NDk5MjgxNjE1NzQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5MzQgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDQzIGRpdmlkZSAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3OTIxNiAgIDQ3MzcyMjU5NTc3MTc0NjY5NjA0NDcyMDQyMzIyNzc0NTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNDQgZGl2aWRlICAyNDgyMDk3Mzc5NDE0ODY3MDYxMjEzMzE5MzQ2NDE4Mjg4ICAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjM4NzkzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMjI4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA0NSBkaXZpZGUgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxNjE4NjggICA3NDA2OTc3NTk1MjMzNzYyNzIzNTc2NDM0MTIyMTg5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzMzEzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA0NiBkaXZpZGUgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3NzM1NzcgICAgMjI4NzgyMDU3NzU3NTY2MDQ3MDg2NTkzMjgxNzY5NzI3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY4MjggIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDQ3IGRpdmlkZSAgMjk1NjU5NDI3MDI0MDU3OTY0ODgyMzI3MDU0MDM2NzY1MyAgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjg1NTYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY5NDYgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDQ4IGRpdmlkZSAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYzNDM0MCAgIDYzMjY5NjQwOTg4OTc2MjA2MjA1MzQxMzY3Njc2MTkzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM3MSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNDkgZGl2aWRlICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzI3ODAwICAgIDQxNDU4NjQ0MDQ1NjU5MDIxNTI0NzAwMjY3ODMxNjkyMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2MjM4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA1MCBkaXZpZGUgIDczNjQ1NTIyMDg1NzAwMzkzODYyMjA1MDU2MzY3NzkxMjUgICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2ODAzNTQ4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2ODM3ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA1MSBkaXZpZGUgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTAwNTYgICA1NjI2MjY2NzQ5OTAyMzY5NzEwMDIyODI0OTUwNTkxMDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MzA4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA1MiBkaXZpZGUgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NjA0ODQgICA0ODYzMjc4MjkzOTE2MTk3NDU0OTg3NDgxMzQzNDQyNTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2OTMgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDUzIGRpdmlkZSAgMTE3MDcxMzU4MjAzMDYzNzM1OTcxMzI0OTc5NjgzNTQ4MyAgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MjMzNDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDM2OCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNTQgZGl2aWRlICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDUyOTMxICAgOTgzODA2MjQ5NDcyNTk2NTY2Nzc3NjMyNjU1NjA2MTAwMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MTc5NiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNTUgZGl2aWRlICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4OTIyICAgNDA3MTM4ODczMTI5ODg2MTA5MzAwNTY4NzA5MTQ5ODI3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTU4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA1NiBkaXZpZGUgIDg3NTMxNTU3MjIzMjQ3MDY3OTU4NTUwMzg1OTAyNzI1MjYgICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjc2NjU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjgyICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA1NyBkaXZpZGUgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyNDA0ODUgICA0Mzk5OTQxOTExNTMzMjczNDE4ODQ0NzQyNjU4MjE5ODkxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2ODEgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDU4IGRpdmlkZSAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDA1MDI2OSAgIDQxMjc4ODQxNTk5NDk1MDM2Nzc3NzY0MzA2MjAwMjYwOTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTg1NyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNTkgZGl2aWRlICA1NTM2MTYwODIyMzYwODAwMDY3MDQyNTI4MzE3NDM4ODA4ICAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQ1MDY4NyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3ODU0MyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNjAgZGl2aWRlICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzEwMjQ2ICAgMzk3MzIzNDk5ODQ2ODY2NDkzNjY3MTA4ODIzNzc0MTg4NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMDM2NyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNjEgZGl2aWRlICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI3MzU4ICAgOTgyNDg1NTkzNTYzODI2MzU5MzQxMDQ0NDE0MjMyODU3NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODc2MCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNjIgZGl2aWRlICA1OTE3MDc4NTE3MzQwMjE4MTMxODY3MzI3MzAwODE0ODY3ICAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDc4ODcwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NDIyICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA2MyBkaXZpZGUgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1MjEzNjIgICA0MzU0MjM2NjAxODMwNTQ0ODgyMjg2MTM5NjEyNTQzMjIzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5Nzk0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA2NCBkaXZpZGUgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM4OTEyOTQgICA4MDU4NDc0NzcyMzc1MjU5MDE3MzQyMTEwMDEzOTA2NzkyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNzY4ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA2NSBkaXZpZGUgIDU1MTk2MDQwMjA5ODE3NDgxNzA1MTcwOTM3NDYxNjYzMjggICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTgxNzYzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcyMDM2ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA2NiBkaXZpZGUgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0NDMxMzkgICAxNTAyMTMwOTY2ODc5ODA1NDU4ODMxMzIzNzgyNDEyMjEzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjA1ODggIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDY3IGRpdmlkZSAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4Nzk4MDI3MCAgICA1NjI3OTU2MzM3MTk0ODEyMTI5MTUxNTk3ODgwMDcwNjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjM4NzcgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDY4IGRpdmlkZSAgNjU4NDc0MzMyNDQ5NDY2NDI3Mzk0MTI4MTU1NzI2ODg3OCAgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNTg5NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUwOCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNjkgZGl2aWRlICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDE2NTAwICAgMzYzMjAwMDMyNzI4NTc0Mzk5Nzk3NjQzMTEwOTQwODEwNyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzExICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA3MCBkaXZpZGUgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1NjE0NTAgICAxMTQ1ODI3MjM3MzE1NDMwMDg5Mzg4OTUzODM4NTI3MzMyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NzYgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDcxIGRpdmlkZSAgODg3NDQzMTAxMDM1NzY5MTg2OTcyNTM3MjMxNzM1MDM4MCAgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczMTY0NzIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgyMSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNzIgZGl2aWRlICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjAyMTk2ICAgIDk5Mjk0ODcxODkwMjgwNDY0ODExOTc1MzE0MTIzNTIyMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTY2NzM5NSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNzMgZGl2aWRlICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDM5OTg5ICAgMjUyMjczNTE4MzM3NDIxODUwNTE0MjQxNzI2NTQ1Mzc3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTMzNyAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwNzQgZGl2aWRlICAyNjY4NDE5MTYxOTEyOTM2NTA4MDA2ODcyMzAzNTAxMDUyICAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzQ3MTAzNiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMjQ5ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA3NSBkaXZpZGUgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE3NzUwOTIgICAzMDM2MTY5MDg1NjY1MTg2NzEyNTkwOTQxMTExODA4ODQ2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODg4ODI3ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA3NiBkaXZpZGUgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDYxNDcgICA5NDQxNjM0NjA0OTE3MjMxNjM4NTA4ODk4OTM0MDAwMjg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MjEgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDc3IGRpdmlkZSAgMjY3NzMwMTM1MzE2NDM3NzA5MTExMTQ1ODgxMTgzOTE5MCAgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4Njc3MjIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTM0MzAgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDc4IGRpdmlkZSAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE3MTQyNiAgIDY4NDQ5NzkyMDMxMTIwNjYxNjY1ODM3NjU4NTcxODk2ODIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzMjkgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDc5IGRpdmlkZSAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIzMTY2MSAgIDIyMjAzMzc0MzUxNDE3OTY3MjQzMjM3ODM5NjAyMDg3NzggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDMwNiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwODAgZGl2aWRlICA2NDQ3NDI0NzAwMDE5NzgzOTMxNTY5OTk2OTg5NTYxMzgwICAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU3MjQ1NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MjgyNCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwODEgZGl2aWRlICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTg3MTgwICAgNzUxMjg1Njc2MjY5NjYwNzExOTg0NzA5MjE5NTU1NzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOTcxICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA4MiBkaXZpZGUgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyMzc0ODIgICA3Mzk1MjYxOTgxMTkzOTYwMzk5MDg3ODE5MDc3MjQyNDg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMjMyICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA4MyBkaXZpZGUgIDIyNTM0NDI0Njc2ODI1ODQwMzU3OTI3MjQ4ODQzNzY3MzUgICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0NDA3MTc4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODY0OTA0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA4NCBkaXZpZGUgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYxOTA5OTcgICA4MTUzMTM4NjgwMzAwMjEzMTM1NTc3MzM2NDY2MjIwNjA3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYzNjgzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA4NSBkaXZpZGUgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE4MDEzOTAgICA0NjY4NzMxMjUyMjU0MTQ4MDc0MDQxMDIyNjgxNzc4MTAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ODggIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDg2IGRpdmlkZSAgNjA3ODQwNDU1Nzk5MzY2OTY5NjA0MDQyNTUwMTgxNTA1NiAgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE3OTc2MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjg3MCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwODcgZGl2aWRlICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzE2Mjc4ICAgMjMwNjM1MjM1OTg3NDI2MTYyMzIyMzM1Njg3ODMzNTYxMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNjE3MSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwODggZGl2aWRlICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDkxOTA4ICAgMzI2NDg0MjE4NjY2ODQ4MDM2MjkwMDkwOTU2NDA1ODY1OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTg0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA4OSBkaXZpZGUgIDY5NzE5ODUwNDcyNzk2MzY4Nzg5NTc5NTk2MDg2MTIyMDQgICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjE1MDg4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ODYzICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA5MCBkaXZpZGUgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM4MTYyNTcgICA1MjYyODEwODg5OTUyNzIxMjM1NDY2NDQ1OTczNzgzMDc3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzMDUgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDkxIGRpdmlkZSAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA4MDI4OCAgIDc5NDc5NDQ3MzEwMzUyNjcxNzg1NDgzNTcwNzAwNjEzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM4NCAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwOTIgZGl2aWRlICA1MDcxODA4OTA4Mzk1Mzc1MTA4MzgzMDM1ODAwNDQzMjI5ICAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQxMjQyOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MDczICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA5MyBkaXZpZGUgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNjI5NjkgICAyMDQzMTQ2NTQyMDg0NTAzNjU1NTExNTA3MjA5MjQ5MjYzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3MDggIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDk0IGRpdmlkZSAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTI2NDgwMiAgIDQwOTc2MzI3MzUzODQ1MzQxODE2NjE5NTk3MzEyMzQ0OTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzM5NSAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwOTUgZGl2aWRlICAzMDYxNDc3NjQyODMxMzg3NDg5NzI5NDY0NTg3MDQ0NDMwICAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA1OTQ1MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MDkzMiAgSW5leGFjdCBSb3VuZGVkCi1kcWRpdjQwOTYgZGl2aWRlICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjUyNjM4ICAgMzQyOTg1NDk0MTAzOTc3NjE1OTQ5ODgwMjkzNjI0NjQxNSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE0ICBJbmV4YWN0IFJvdW5kZWQKLWRxZGl2NDA5NyBkaXZpZGUgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyODQ1NDUgICA0ODc0MzI0OTc5NTc4NTk5NzAwMDI0MTMzMjc4MjYyMTMxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1OTggIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDk4IGRpdmlkZSAgNTcwMTY1MjM2OTY5MTgzMzU0MTQ1NTk3ODUxNTgyMDg4MiAgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MzQ4NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzU0OTUgIEluZXhhY3QgUm91bmRlZAotZHFkaXY0MDk5IGRpdmlkZSAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM0MzExMyAgIDI5MjgyMDU3Mjg0MDI5NDUyNjY5NTMyNTU2MzIzNzM3OTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4OTUyMjMgIEluZXhhY3QgUm91bmRlZAotCi0tLSBOdWxsIHRlc3RzCi1kcWRpdjk5OTggZGl2aWRlIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFEaXZpZGUuZGVjVGVzdCAtLSBkZWNRdWFkIGRpdmlzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZHFkaXYwMDEgZGl2aWRlICAxICAgICAxICAgIC0+ICAxDQorZHFkaXYwMDIgZGl2aWRlICAyICAgICAxICAgIC0+ICAyDQorZHFkaXYwMDMgZGl2aWRlICAxICAgICAyICAgIC0+ICAwLjUNCitkcWRpdjAwNCBkaXZpZGUgIDIgICAgIDIgICAgLT4gIDENCitkcWRpdjAwNSBkaXZpZGUgIDAgICAgIDEgICAgLT4gIDANCitkcWRpdjAwNiBkaXZpZGUgIDAgICAgIDIgICAgLT4gIDANCitkcWRpdjAwNyBkaXZpZGUgIDEgICAgIDMgICAgLT4gIDAuMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjAwOCBkaXZpZGUgIDIgICAgIDMgICAgLT4gIDAuNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjAwOSBkaXZpZGUgIDMgICAgIDMgICAgLT4gIDENCisNCitkcWRpdjAxMCBkaXZpZGUgIDIuNCAgIDEgICAgLT4gIDIuNA0KK2RxZGl2MDExIGRpdmlkZSAgMi40ICAgLTEgICAtPiAgLTIuNA0KK2RxZGl2MDEyIGRpdmlkZSAgLTIuNCAgMSAgICAtPiAgLTIuNA0KK2RxZGl2MDEzIGRpdmlkZSAgLTIuNCAgLTEgICAtPiAgMi40DQorZHFkaXYwMTQgZGl2aWRlICAyLjQwICAxICAgIC0+ICAyLjQwDQorZHFkaXYwMTUgZGl2aWRlICAyLjQwMCAxICAgIC0+ICAyLjQwMA0KK2RxZGl2MDE2IGRpdmlkZSAgMi40ICAgMiAgICAtPiAgMS4yDQorZHFkaXYwMTcgZGl2aWRlICAyLjQwMCAyICAgIC0+ICAxLjIwMA0KK2RxZGl2MDE4IGRpdmlkZSAgMi4gICAgMiAgICAtPiAgMQ0KK2RxZGl2MDE5IGRpdmlkZSAgMjAgICAgMjAgICAtPiAgMQ0KKw0KK2RxZGl2MDIwIGRpdmlkZSAgMTg3ICAgMTg3ICAgIC0+ICAxDQorZHFkaXYwMjEgZGl2aWRlICA1ICAgICAyICAgICAgLT4gIDIuNQ0KK2RxZGl2MDIyIGRpdmlkZSAgNTAgICAgMjAgICAgIC0+ICAyLjUNCitkcWRpdjAyMyBkaXZpZGUgIDUwMCAgIDIwMCAgICAtPiAgMi41DQorZHFkaXYwMjQgZGl2aWRlICA1MC4wICAyMC4wICAgLT4gIDIuNQ0KK2RxZGl2MDI1IGRpdmlkZSAgNS4wMCAgMi4wMCAgIC0+ICAyLjUNCitkcWRpdjAyNiBkaXZpZGUgIDUgICAgIDIuMCAgICAtPiAgMi41DQorZHFkaXYwMjcgZGl2aWRlICA1ICAgICAyLjAwMCAgLT4gIDIuNQ0KK2RxZGl2MDI4IGRpdmlkZSAgNSAgICAgMC4yMCAgIC0+ICAyNQ0KK2RxZGl2MDI5IGRpdmlkZSAgNSAgICAgMC4yMDAgIC0+ICAyNQ0KK2RxZGl2MDMwIGRpdmlkZSAgMTAgICAgMSAgICAgIC0+ICAxMA0KK2RxZGl2MDMxIGRpdmlkZSAgMTAwICAgMSAgICAgIC0+ICAxMDANCitkcWRpdjAzMiBkaXZpZGUgIDEwMDAgIDEgICAgICAtPiAgMTAwMA0KK2RxZGl2MDMzIGRpdmlkZSAgMTAwMCAgMTAwICAgIC0+ICAxMA0KKw0KK2RxZGl2MDM1IGRpdmlkZSAgMSAgICAgMiAgICAgIC0+ICAwLjUNCitkcWRpdjAzNiBkaXZpZGUgIDEgICAgIDQgICAgICAtPiAgMC4yNQ0KK2RxZGl2MDM3IGRpdmlkZSAgMSAgICAgOCAgICAgIC0+ICAwLjEyNQ0KK2RxZGl2MDM4IGRpdmlkZSAgMSAgICAgMTYgICAgIC0+ICAwLjA2MjUNCitkcWRpdjAzOSBkaXZpZGUgIDEgICAgIDMyICAgICAtPiAgMC4wMzEyNQ0KK2RxZGl2MDQwIGRpdmlkZSAgMSAgICAgNjQgICAgIC0+ICAwLjAxNTYyNQ0KK2RxZGl2MDQxIGRpdmlkZSAgMSAgICAtMiAgICAgIC0+ICAtMC41DQorZHFkaXYwNDIgZGl2aWRlICAxICAgIC00ICAgICAgLT4gIC0wLjI1DQorZHFkaXYwNDMgZGl2aWRlICAxICAgIC04ICAgICAgLT4gIC0wLjEyNQ0KK2RxZGl2MDQ0IGRpdmlkZSAgMSAgICAtMTYgICAgIC0+ICAtMC4wNjI1DQorZHFkaXYwNDUgZGl2aWRlICAxICAgIC0zMiAgICAgLT4gIC0wLjAzMTI1DQorZHFkaXYwNDYgZGl2aWRlICAxICAgIC02NCAgICAgLT4gIC0wLjAxNTYyNQ0KK2RxZGl2MDQ3IGRpdmlkZSAtMSAgICAgMiAgICAgIC0+ICAtMC41DQorZHFkaXYwNDggZGl2aWRlIC0xICAgICA0ICAgICAgLT4gIC0wLjI1DQorZHFkaXYwNDkgZGl2aWRlIC0xICAgICA4ICAgICAgLT4gIC0wLjEyNQ0KK2RxZGl2MDUwIGRpdmlkZSAtMSAgICAgMTYgICAgIC0+ICAtMC4wNjI1DQorZHFkaXYwNTEgZGl2aWRlIC0xICAgICAzMiAgICAgLT4gIC0wLjAzMTI1DQorZHFkaXYwNTIgZGl2aWRlIC0xICAgICA2NCAgICAgLT4gIC0wLjAxNTYyNQ0KK2RxZGl2MDUzIGRpdmlkZSAtMSAgICAtMiAgICAgIC0+ICAwLjUNCitkcWRpdjA1NCBkaXZpZGUgLTEgICAgLTQgICAgICAtPiAgMC4yNQ0KK2RxZGl2MDU1IGRpdmlkZSAtMSAgICAtOCAgICAgIC0+ICAwLjEyNQ0KK2RxZGl2MDU2IGRpdmlkZSAtMSAgICAtMTYgICAgIC0+ICAwLjA2MjUNCitkcWRpdjA1NyBkaXZpZGUgLTEgICAgLTMyICAgICAtPiAgMC4wMzEyNQ0KK2RxZGl2MDU4IGRpdmlkZSAtMSAgICAtNjQgICAgIC0+ICAwLjAxNTYyNQ0KKw0KKy0tIGJjZFRpbWUNCitkcWRpdjA2MCBkaXZpZGUgIDEgNyAgICAgICAgICAgICAgICAgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYwNjEgZGl2aWRlIDEuMjM0NTY3OCAgMS45ODc2NTQzICAgLT4gMC42MjExMTc5NjgwNDkwNzE3MTIzMTkzOTA3NTExOTg1MzU5IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxZGl2MDY3IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxZGl2MDY4IGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFkaXYwNjkgZGl2aWRlICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxZGl2MDcwIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTk5OTkNCitkcWRpdjA3MSBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OTkNCitkcWRpdjA3MiBkaXZpZGUgIDk5OTk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTk5OQ0KK2RxZGl2MDczIGRpdmlkZSAgOTk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTk5OTkNCitkcWRpdjA3NCBkaXZpZGUgIDk5OTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OTkNCitkcWRpdjA3NSBkaXZpZGUgIDk5OTk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTk5OQ0KK2RxZGl2MDc2IGRpdmlkZSAgOTk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTk5OTkNCitkcWRpdjA3NyBkaXZpZGUgIDk5OTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OTkNCitkcWRpdjA3OCBkaXZpZGUgIDk5OTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTk5OQ0KK2RxZGl2MDc5IGRpdmlkZSAgOTk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTk5OTkNCitkcWRpdjA4MCBkaXZpZGUgIDk5OTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OTkNCitkcWRpdjA4MSBkaXZpZGUgIDk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTk5OQ0KK2RxZGl2MDgyIGRpdmlkZSAgOTk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTk5OTkNCitkcWRpdjA4MyBkaXZpZGUgIDk5OTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OTkNCitkcWRpdjA4NCBkaXZpZGUgIDk5OSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDk5OQ0KK2RxZGl2MDg1IGRpdmlkZSAgOTkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtPiAgOTkNCitkcWRpdjA4NiBkaXZpZGUgIDkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLT4gIDkNCisNCitkcWRpdjA5MCBkaXZpZGUgIDAuICAgICAgICAgICAgMSAgICAtPiAgMA0KK2RxZGl2MDkxIGRpdmlkZSAgLjAgICAgICAgICAgICAxICAgIC0+ICAwLjANCitkcWRpdjA5MiBkaXZpZGUgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMC4wMA0KK2RxZGl2MDkzIGRpdmlkZSAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwRSs3DQorZHFkaXYwOTQgZGl2aWRlICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDBFLTU0DQorDQorZHFkaXYwOTUgZGl2aWRlICAxICAgICAgICAgICAgMUUtOCAgLT4gIDFFKzgNCitkcWRpdjA5NiBkaXZpZGUgIDEgICAgICAgICAgICAxRS05ICAtPiAgMUUrOQ0KK2RxZGl2MDk3IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEwIC0+ICAxRSsxMA0KK2RxZGl2MDk4IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTExIC0+ICAxRSsxMQ0KK2RxZGl2MDk5IGRpdmlkZSAgMSAgICAgICAgICAgIDFFLTEyIC0+ICAxRSsxMg0KKw0KK2RxZGl2MTAwIGRpdmlkZSAgMSAgMSAgIC0+IDENCitkcWRpdjEwMSBkaXZpZGUgIDEgIDIgICAtPiAwLjUNCitkcWRpdjEwMiBkaXZpZGUgIDEgIDMgICAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMDMgZGl2aWRlICAxICA0ICAgLT4gMC4yNQ0KK2RxZGl2MTA0IGRpdmlkZSAgMSAgNSAgIC0+IDAuMg0KK2RxZGl2MTA1IGRpdmlkZSAgMSAgNiAgIC0+IDAuMTY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjEwNiBkaXZpZGUgIDEgIDcgICAtPiAwLjE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0Mjg1NzE0MjkgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMDcgZGl2aWRlICAxICA4ICAgLT4gMC4xMjUNCitkcWRpdjEwOCBkaXZpZGUgIDEgIDkgICAtPiAwLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMDkgZGl2aWRlICAxICAxMCAgLT4gMC4xDQorZHFkaXYxMTAgZGl2aWRlICAxICAxICAgLT4gMQ0KK2RxZGl2MTExIGRpdmlkZSAgMiAgMSAgIC0+IDINCitkcWRpdjExMiBkaXZpZGUgIDMgIDEgICAtPiAzDQorZHFkaXYxMTMgZGl2aWRlICA0ICAxICAgLT4gNA0KK2RxZGl2MTE0IGRpdmlkZSAgNSAgMSAgIC0+IDUNCitkcWRpdjExNSBkaXZpZGUgIDYgIDEgICAtPiA2DQorZHFkaXYxMTYgZGl2aWRlICA3ICAxICAgLT4gNw0KK2RxZGl2MTE3IGRpdmlkZSAgOCAgMSAgIC0+IDgNCitkcWRpdjExOCBkaXZpZGUgIDkgIDEgICAtPiA5DQorZHFkaXYxMTkgZGl2aWRlICAxMCAxICAgLT4gMTANCisNCitkcWRpdjEyMCBkaXZpZGUgIDNFKzEgMC4wMDEgIC0+IDNFKzQNCitkcWRpdjEyMSBkaXZpZGUgIDIuMjAwIDIgICAgIC0+IDEuMTAwDQorDQorZHFkaXYxMzAgZGl2aWRlICAxMjM0NSAgNC45OTkgIC0+IDI0NjkuNDkzODk4Nzc5NzU1OTUxMTkwMjM4MDQ3NjA5NTIyICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjEzMSBkaXZpZGUgIDEyMzQ1ICA0Ljk5ICAgLT4gMjQ3My45NDc4OTU3OTE1ODMxNjYzMzI2NjUzMzA2NjEzMjMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTMyIGRpdmlkZSAgMTIzNDUgIDQuOSAgICAtPiAyNTE5LjM4Nzc1NTEwMjA0MDgxNjMyNjUzMDYxMjI0NDg5OCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMzMgZGl2aWRlICAxMjM0NSAgNSAgICAgIC0+IDI0NjkNCitkcWRpdjEzNCBkaXZpZGUgIDEyMzQ1ICA1LjEgICAgLT4gMjQyMC41ODgyMzUyOTQxMTc2NDcwNTg4MjM1Mjk0MTE3NjUgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTM1IGRpdmlkZSAgMTIzNDUgIDUuMDEgICAtPiAyNDY0LjA3MTg1NjI4NzQyNTE0OTcwMDU5ODgwMjM5NTIxMCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMzYgZGl2aWRlICAxMjM0NSAgNS4wMDEgIC0+IDI0NjguNTA2Mjk4NzQwMjUxOTQ5NjEwMDc3OTg0NDAzMTE5ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB0ZXN0IHBvc3NpYmx5IGltcHJlY2lzZSByZXN1bHRzDQorZHFkaXYyMjAgZGl2aWRlIDM5MSAgIDU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIyMSBkaXZpZGUgMzkxICAtNTk3IC0+IC0wLjY1NDk0MTM3MzUzNDMzODM1ODQ1ODk2MTQ3NDAzNjg1MDkgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjIyIGRpdmlkZSAtMzkxICA1OTcgLT4gLTAuNjU0OTQxMzczNTM0MzM4MzU4NDU4OTYxNDc0MDM2ODUwOSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMjMgZGl2aWRlIC0zOTEgLTU5NyAtPiAgMC42NTQ5NDEzNzM1MzQzMzgzNTg0NTg5NjE0NzQwMzY4NTA5ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cNCitkcWRpdjI3MCBkaXZpZGUgMSAxZTYxNDQgICAgICAgICAgICAgICAgICAtPiAxRS02MTQ0ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCitkcWRpdjI3MSBkaXZpZGUgMSAwLjllNjE0NCAgICAgICAgICAgICAgICAtPiAxLjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExRS02MTQ0ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxZGl2MjcyIGRpdmlkZSAxIDAuOTllNjE0NCAgICAgICAgICAgICAgIC0+IDEuMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDFFLTYxNDQgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFkaXYyNzMgZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMUUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcWRpdjI3NCBkaXZpZGUgOWU2MTQ0ICAgIDEgICAgICAgICAgICAgICAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQorZHFkaXYyNzUgZGl2aWRlIDkuOWU2MTQ0ICAxICAgICAgICAgICAgICAgLT4gOS45MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZA0KK2RxZGl2Mjc2IGRpdmlkZSA5Ljk5ZTYxNDQgMSAgICAgICAgICAgICAgIC0+IDkuOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCitkcWRpdjI3NyBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTllNjE0NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkDQorDQorZHFkaXYyNzggZGl2aWRlIDEgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZTYxNDQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcWRpdjI3OSBkaXZpZGUgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTllNjE0NCAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKw0KKy0tIERpdmlkZSBpbnRvIDAgdGVzdHMNCitkcWRpdjMwMSBkaXZpZGUgICAgMCAgICA3ICAgICAtPiAwDQorZHFkaXYzMDIgZGl2aWRlICAgIDAgICAgN0UtNSAgLT4gMEUrNQ0KK2RxZGl2MzAzIGRpdmlkZSAgICAwICAgIDdFLTEgIC0+IDBFKzENCitkcWRpdjMwNCBkaXZpZGUgICAgMCAgICA3RSsxICAtPiAwLjANCitkcWRpdjMwNSBkaXZpZGUgICAgMCAgICA3RSs1ICAtPiAwLjAwMDAwDQorZHFkaXYzMDYgZGl2aWRlICAgIDAgICAgN0UrNiAgLT4gMC4wMDAwMDANCitkcWRpdjMwNyBkaXZpZGUgICAgMCAgICA3RSs3ICAtPiAwRS03DQorZHFkaXYzMDggZGl2aWRlICAgIDAgICA3MEUtNSAgLT4gMEUrNQ0KK2RxZGl2MzA5IGRpdmlkZSAgICAwICAgNzBFLTEgIC0+IDBFKzENCitkcWRpdjMxMCBkaXZpZGUgICAgMCAgIDcwRSswICAtPiAwDQorZHFkaXYzMTEgZGl2aWRlICAgIDAgICA3MEUrMSAgLT4gMC4wDQorZHFkaXYzMTIgZGl2aWRlICAgIDAgICA3MEUrNSAgLT4gMC4wMDAwMA0KK2RxZGl2MzEzIGRpdmlkZSAgICAwICAgNzBFKzYgIC0+IDAuMDAwMDAwDQorZHFkaXYzMTQgZGl2aWRlICAgIDAgICA3MEUrNyAgLT4gMEUtNw0KK2RxZGl2MzE1IGRpdmlkZSAgICAwICA3MDBFLTUgIC0+IDBFKzUNCitkcWRpdjMxNiBkaXZpZGUgICAgMCAgNzAwRS0xICAtPiAwRSsxDQorZHFkaXYzMTcgZGl2aWRlICAgIDAgIDcwMEUrMCAgLT4gMA0KK2RxZGl2MzE4IGRpdmlkZSAgICAwICA3MDBFKzEgIC0+IDAuMA0KK2RxZGl2MzE5IGRpdmlkZSAgICAwICA3MDBFKzUgIC0+IDAuMDAwMDANCitkcWRpdjMyMCBkaXZpZGUgICAgMCAgNzAwRSs2ICAtPiAwLjAwMDAwMA0KK2RxZGl2MzIxIGRpdmlkZSAgICAwICA3MDBFKzcgIC0+IDBFLTcNCitkcWRpdjMyMiBkaXZpZGUgICAgMCAgNzAwRSs3NyAtPiAwRS03Nw0KKw0KK2RxZGl2MzMxIGRpdmlkZSAwRS0zICAgIDdFLTUgIC0+IDBFKzINCitkcWRpdjMzMiBkaXZpZGUgMEUtMyAgICA3RS0xICAtPiAwLjAwDQorZHFkaXYzMzMgZGl2aWRlIDBFLTMgICAgN0UrMSAgLT4gMC4wMDAwDQorZHFkaXYzMzQgZGl2aWRlIDBFLTMgICAgN0UrNSAgLT4gMEUtOA0KK2RxZGl2MzM1IGRpdmlkZSAwRS0xICAgIDdFLTUgIC0+IDBFKzQNCitkcWRpdjMzNiBkaXZpZGUgMEUtMSAgICA3RS0xICAtPiAwDQorZHFkaXYzMzcgZGl2aWRlIDBFLTEgICAgN0UrMSAgLT4gMC4wMA0KK2RxZGl2MzM4IGRpdmlkZSAwRS0xICAgIDdFKzUgIC0+IDAuMDAwMDAwDQorZHFkaXYzMzkgZGl2aWRlIDBFKzEgICAgN0UtNSAgLT4gMEUrNg0KK2RxZGl2MzQwIGRpdmlkZSAwRSsxICAgIDdFLTEgIC0+IDBFKzINCitkcWRpdjM0MSBkaXZpZGUgMEUrMSAgICA3RSsxICAtPiAwDQorZHFkaXYzNDIgZGl2aWRlIDBFKzEgICAgN0UrNSAgLT4gMC4wMDAwDQorZHFkaXYzNDMgZGl2aWRlIDBFKzMgICAgN0UtNSAgLT4gMEUrOA0KK2RxZGl2MzQ0IGRpdmlkZSAwRSszICAgIDdFLTEgIC0+IDBFKzQNCitkcWRpdjM0NSBkaXZpZGUgMEUrMyAgICA3RSsxICAtPiAwRSsyDQorZHFkaXYzNDYgZGl2aWRlIDBFKzMgICAgN0UrNSAgLT4gMC4wMA0KKw0KKy0tIFRoZXNlIHdlcmUgJ2lucHV0IHJvdW5kaW5nJw0KK2RxZGl2NDQxIGRpdmlkZSAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwDQorZHFkaXY0NDIgZGl2aWRlIDEgMTIzNDU2NzgwMDAgLT4gOC4xMDAwMDA2NjQyMDAwNTQ0NjQ0MDQ0NjYwODExNjYyMTlFLTExIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDQzIGRpdmlkZSAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDANCitkcWRpdjQ0NCBkaXZpZGUgMSAxMjM0NTY3ODAwICAtPiA4LjEwMDAwMDY2NDIwMDA1NDQ2NDQwNDQ2NjA4MTE2NjIxOUUtMTAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0NDUgZGl2aWRlIDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MA0KK2RxZGl2NDQ2IGRpdmlkZSAxIDEyMzQ1Njc4OTAgIC0+IDguMTAwMDAwMDczNzEwMDAwNjcwNzYxMDA2MTAzOTI1MTU2RS0xMCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQ0NyBkaXZpZGUgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxDQorZHFkaXY0NDggZGl2aWRlIDEgMTIzNDU2Nzg5MSAgLT4gOC4xMDAwMDAwNjcxNDkwMDA1NTY2NjUyMTQ2MTQ3NTQ2MjlFLTEwIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDQ5IGRpdmlkZSAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxDQorZHFkaXY0NTAgZGl2aWRlIDEgMTIzNDU2Nzg5MDEgLT4gOC4xMDAwMDAwNzMwNTM5MDA2NTg4NzMxMzAwNDIzNzY3NjBFLTExIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDUxIGRpdmlkZSAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYNCitkcWRpdjQ1MiBkaXZpZGUgMSAxMjM0NTY3ODk2ICAtPiA4LjEwMDAwMDAzNDM0NDAwMDE0NTYxODU2MDYxNzQyMjY5N0UtMTAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gaGlnaC1sb3dzDQorZHFkaXY0NTMgZGl2aWRlIDFlKzEgICAxICAgIC0+ICAgMUUrMQ0KK2RxZGl2NDU0IGRpdmlkZSAxZSsxICAgMS4wICAtPiAgIDFFKzENCitkcWRpdjQ1NSBkaXZpZGUgMWUrMSAgIDEuMDAgLT4gICAxRSsxDQorZHFkaXY0NTYgZGl2aWRlIDFlKzIgICAyICAgIC0+ICAgNUUrMQ0KK2RxZGl2NDU3IGRpdmlkZSAxZSsyICAgMi4wICAtPiAgIDVFKzENCitkcWRpdjQ1OCBkaXZpZGUgMWUrMiAgIDIuMDAgLT4gICA1RSsxDQorDQorLS0gc29tZSBmcm9tIElFRUUgZGlzY3Vzc2lvbnMNCitkcWRpdjQ2MCBkaXZpZGUgM2UwICAgICAgMmUwICAgICAtPiAxLjUNCitkcWRpdjQ2MSBkaXZpZGUgMzBlLTEgICAgMmUwICAgICAtPiAxLjUNCitkcWRpdjQ2MiBkaXZpZGUgMzAwZS0yICAgMmUwICAgICAtPiAxLjUwDQorZHFkaXY0NjQgZGl2aWRlIDMwMDBlLTMgIDJlMCAgICAgLT4gMS41MDANCitkcWRpdjQ2NSBkaXZpZGUgM2UwICAgICAgMjBlLTEgICAtPiAxLjUNCitkcWRpdjQ2NiBkaXZpZGUgMzBlLTEgICAgMjBlLTEgICAtPiAxLjUNCitkcWRpdjQ2NyBkaXZpZGUgMzAwZS0yICAgMjBlLTEgICAtPiAxLjUNCitkcWRpdjQ2OCBkaXZpZGUgMzAwMGUtMyAgMjBlLTEgICAtPiAxLjUwDQorZHFkaXY0NjkgZGl2aWRlIDNlMCAgICAgIDIwMGUtMiAgLT4gMS41DQorZHFkaXY0NzAgZGl2aWRlIDMwZS0xICAgIDIwMGUtMiAgLT4gMS41DQorZHFkaXY0NzEgZGl2aWRlIDMwMGUtMiAgIDIwMGUtMiAgLT4gMS41DQorZHFkaXY0NzIgZGl2aWRlIDMwMDBlLTMgIDIwMGUtMiAgLT4gMS41DQorZHFkaXY0NzMgZGl2aWRlIDNlMCAgICAgIDIwMDBlLTMgLT4gMS41DQorZHFkaXY0NzQgZGl2aWRlIDMwZS0xICAgIDIwMDBlLTMgLT4gMS41DQorZHFkaXY0NzUgZGl2aWRlIDMwMGUtMiAgIDIwMDBlLTMgLT4gMS41DQorZHFkaXY0NzYgZGl2aWRlIDMwMDBlLTMgIDIwMDBlLTMgLT4gMS41DQorDQorLS0gc29tZSByZWNpcHJvY2Fscw0KK2RxZGl2NDgwIGRpdmlkZSAxICAgICAgICAxLjBFKzMzIC0+IDFFLTMzDQorZHFkaXY0ODEgZGl2aWRlIDEgICAgICAgIDEwRSszMyAgLT4gMUUtMzQNCitkcWRpdjQ4MiBkaXZpZGUgMSAgICAgICAgMS4wRS0zMyAtPiAxRSszMw0KK2RxZGl2NDgzIGRpdmlkZSAxICAgICAgICAxMEUtMzMgIC0+IDFFKzMyDQorDQorLS0gUk1TIGRpc2N1c3Npb24gdGFibGUNCitkcWRpdjQ4NCBkaXZpZGUgMGU1ICAgICAxZTMgLT4gICAwRSsyDQorZHFkaXY0ODUgZGl2aWRlIDBlNSAgICAgMmUzIC0+ICAgMEUrMg0KK2RxZGl2NDg2IGRpdmlkZSAwZTUgICAgMTBlMiAtPiAgIDBFKzMNCitkcWRpdjQ4NyBkaXZpZGUgMGU1ICAgIDIwZTIgLT4gICAwRSszDQorZHFkaXY0ODggZGl2aWRlIDBlNSAgIDEwMGUxIC0+ICAgMEUrNA0KK2RxZGl2NDg5IGRpdmlkZSAwZTUgICAyMDBlMSAtPiAgIDBFKzQNCisNCitkcWRpdjQ5MSBkaXZpZGUgMWU1ICAgICAxZTMgLT4gICAxRSsyDQorZHFkaXY0OTIgZGl2aWRlIDFlNSAgICAgMmUzIC0+ICAgNUUrMQ0KK2RxZGl2NDkzIGRpdmlkZSAxZTUgICAgMTBlMiAtPiAgIDFFKzINCitkcWRpdjQ5NCBkaXZpZGUgMWU1ICAgIDIwZTIgLT4gICA1RSsxDQorZHFkaXY0OTUgZGl2aWRlIDFlNSAgIDEwMGUxIC0+ICAgMUUrMg0KK2RxZGl2NDk2IGRpdmlkZSAxZTUgICAyMDBlMSAtPiAgIDVFKzENCisNCistLSB0cnl6ZXJvcyBjYXNlcw0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorZHFkaXY0OTcgIGRpdmlkZSAgMEUrNjEwOCAxMDAwRS0zMyAgLT4gMEUrNjExMSBDbGFtcGVkDQorZHFkaXY0OTggIGRpdmlkZSAgMEUtNjE3MCAxMDAwRSszMyAgLT4gMEUtNjE3NiBDbGFtcGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCisNCistLSBmb2N1cyBvbiB0cmFpbGluZyB6ZXJvcyBpc3N1ZXMNCitkcWRpdjUwMCBkaXZpZGUgIDEgICAgICA5LjkgICAgLT4gIDAuMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY1MDEgZGl2aWRlICAxICAgICAgOS4wOSAgIC0+ICAwLjExMDAxMTAwMTEwMDExMDAxMTAwMTEwMDExMDAxMTAwMTEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NTAyIGRpdmlkZSAgMSAgICAgIDkuMDA5ICAtPiAgMC4xMTEwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMTEwICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWRpdjUxMSBkaXZpZGUgMSAgICAgICAgIDIgICAgLT4gMC41DQorZHFkaXY1MTIgZGl2aWRlIDEuMCAgICAgICAyICAgIC0+IDAuNQ0KK2RxZGl2NTEzIGRpdmlkZSAxLjAwICAgICAgMiAgICAtPiAwLjUwDQorZHFkaXY1MTQgZGl2aWRlIDEuMDAwICAgICAyICAgIC0+IDAuNTAwDQorZHFkaXY1MTUgZGl2aWRlIDEuMDAwMCAgICAyICAgIC0+IDAuNTAwMA0KK2RxZGl2NTE2IGRpdmlkZSAxLjAwMDAwICAgMiAgICAtPiAwLjUwMDAwDQorZHFkaXY1MTcgZGl2aWRlIDEuMDAwMDAwICAyICAgIC0+IDAuNTAwMDAwDQorZHFkaXY1MTggZGl2aWRlIDEuMDAwMDAwMCAyICAgIC0+IDAuNTAwMDAwMA0KK2RxZGl2NTE5IGRpdmlkZSAxLjAwICAgICAgMi4wMCAtPiAwLjUNCisNCitkcWRpdjUyMSBkaXZpZGUgMiAgICAxICAgICAgICAgLT4gMg0KK2RxZGl2NTIyIGRpdmlkZSAyICAgIDEuMCAgICAgICAtPiAyDQorZHFkaXY1MjMgZGl2aWRlIDIgICAgMS4wMCAgICAgIC0+IDINCitkcWRpdjUyNCBkaXZpZGUgMiAgICAxLjAwMCAgICAgLT4gMg0KK2RxZGl2NTI1IGRpdmlkZSAyICAgIDEuMDAwMCAgICAtPiAyDQorZHFkaXY1MjYgZGl2aWRlIDIgICAgMS4wMDAwMCAgIC0+IDINCitkcWRpdjUyNyBkaXZpZGUgMiAgICAxLjAwMDAwMCAgLT4gMg0KK2RxZGl2NTI4IGRpdmlkZSAyICAgIDEuMDAwMDAwMCAtPiAyDQorZHFkaXY1MjkgZGl2aWRlIDIuMDAgMS4wMCAgICAgIC0+IDINCisNCitkcWRpdjUzMCBkaXZpZGUgIDIuNDAgICAyICAgICAgLT4gIDEuMjANCitkcWRpdjUzMSBkaXZpZGUgIDIuNDAgICA0ICAgICAgLT4gIDAuNjANCitkcWRpdjUzMiBkaXZpZGUgIDIuNDAgIDEwICAgICAgLT4gIDAuMjQNCitkcWRpdjUzMyBkaXZpZGUgIDIuNDAgICAyLjAgICAgLT4gIDEuMg0KK2RxZGl2NTM0IGRpdmlkZSAgMi40MCAgIDQuMCAgICAtPiAgMC42DQorZHFkaXY1MzUgZGl2aWRlICAyLjQwICAxMC4wICAgIC0+ICAwLjI0DQorZHFkaXY1MzYgZGl2aWRlICAyLjQwICAgMi4wMCAgIC0+ICAxLjINCitkcWRpdjUzNyBkaXZpZGUgIDIuNDAgICA0LjAwICAgLT4gIDAuNg0KK2RxZGl2NTM4IGRpdmlkZSAgMi40MCAgMTAuMDAgICAtPiAgMC4yNA0KK2RxZGl2NTM5IGRpdmlkZSAgMC45ICAgIDAuMSAgICAtPiAgOQ0KK2RxZGl2NTQwIGRpdmlkZSAgMC45ICAgIDAuMDEgICAtPiAgOUUrMQ0KK2RxZGl2NTQxIGRpdmlkZSAgMC45ICAgIDAuMDAxICAtPiAgOUUrMg0KK2RxZGl2NTQyIGRpdmlkZSAgNSAgICAgIDIgICAgICAtPiAgMi41DQorZHFkaXY1NDMgZGl2aWRlICA1ICAgICAgMi4wICAgIC0+ICAyLjUNCitkcWRpdjU0NCBkaXZpZGUgIDUgICAgICAyLjAwICAgLT4gIDIuNQ0KK2RxZGl2NTQ1IGRpdmlkZSAgNSAgICAgIDIwICAgICAtPiAgMC4yNQ0KK2RxZGl2NTQ2IGRpdmlkZSAgNSAgICAgIDIwLjAgICAtPiAgMC4yNQ0KK2RxZGl2NTQ3IGRpdmlkZSAgMi40MDAgIDIgICAgICAtPiAgMS4yMDANCitkcWRpdjU0OCBkaXZpZGUgIDIuNDAwICAyLjAgICAgLT4gIDEuMjANCitkcWRpdjU0OSBkaXZpZGUgIDIuNDAwICAyLjQwMCAgLT4gIDENCisNCitkcWRpdjU1MCBkaXZpZGUgIDI0MCAgICAxICAgICAgLT4gIDI0MA0KK2RxZGl2NTUxIGRpdmlkZSAgMjQwICAgIDEwICAgICAtPiAgMjQNCitkcWRpdjU1MiBkaXZpZGUgIDI0MCAgICAxMDAgICAgLT4gIDIuNA0KK2RxZGl2NTUzIGRpdmlkZSAgMjQwICAgIDEwMDAgICAtPiAgMC4yNA0KK2RxZGl2NTU0IGRpdmlkZSAgMjQwMCAgIDEgICAgICAtPiAgMjQwMA0KK2RxZGl2NTU1IGRpdmlkZSAgMjQwMCAgIDEwICAgICAtPiAgMjQwDQorZHFkaXY1NTYgZGl2aWRlICAyNDAwICAgMTAwICAgIC0+ICAyNA0KK2RxZGl2NTU3IGRpdmlkZSAgMjQwMCAgIDEwMDAgICAtPiAgMi40DQorDQorLS0gK3ZlIGV4cG9uZW50DQorZHFkaXY2MDAgZGl2aWRlICAyLjRFKzkgICAgIDIgIC0+ICAxLjJFKzkNCitkcWRpdjYwMSBkaXZpZGUgIDIuNDBFKzkgICAgMiAgLT4gIDEuMjBFKzkNCitkcWRpdjYwMiBkaXZpZGUgIDIuNDAwRSs5ICAgMiAgLT4gIDEuMjAwRSs5DQorZHFkaXY2MDMgZGl2aWRlICAyLjQwMDBFKzkgIDIgIC0+ICAxLjIwMDBFKzkNCitkcWRpdjYwNCBkaXZpZGUgIDI0RSs4ICAgICAgMiAgLT4gIDEuMkUrOQ0KK2RxZGl2NjA1IGRpdmlkZSAgMjQwRSs3ICAgICAyICAtPiAgMS4yMEUrOQ0KK2RxZGl2NjA2IGRpdmlkZSAgMjQwMEUrNiAgICAyICAtPiAgMS4yMDBFKzkNCitkcWRpdjYwNyBkaXZpZGUgIDI0MDAwRSs1ICAgMiAgLT4gIDEuMjAwMEUrOQ0KKw0KKy0tIG1vcmUgemVyb3MsIGV0Yy4NCitkcWRpdjczMSBkaXZpZGUgNS4wMCAxRS0zICAgIC0+IDUuMDBFKzMNCitkcWRpdjczMiBkaXZpZGUgMDAuMDAgMC4wMDAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcWRpdjczMyBkaXZpZGUgMDAuMDAgMEUtMyAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcWRpdjczNCBkaXZpZGUgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcWRpdjczNSBkaXZpZGUgLTAgICAgIDAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcWRpdjczNiBkaXZpZGUgLTAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCisNCitkcWRpdjc0MSBkaXZpZGUgIDAgICAgLTEgICAgIC0+IC0wDQorZHFkaXY3NDIgZGl2aWRlIC0wICAgIC0xICAgICAtPiAgMA0KK2RxZGl2NzQzIGRpdmlkZSAgMCAgICAgMSAgICAgLT4gIDANCitkcWRpdjc0NCBkaXZpZGUgLTAgICAgIDEgICAgIC0+IC0wDQorZHFkaXY3NDUgZGl2aWRlIC0xICAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2NzQ2IGRpdmlkZSAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWRpdjc0NyBkaXZpZGUgIDEgICAgIDAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkaXY3NDggZGl2aWRlICAxICAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZGl2NzUxIGRpdmlkZSAgMC4wICAtMSAgICAgLT4gLTAuMA0KK2RxZGl2NzUyIGRpdmlkZSAtMC4wICAtMSAgICAgLT4gIDAuMA0KK2RxZGl2NzUzIGRpdmlkZSAgMC4wICAgMSAgICAgLT4gIDAuMA0KK2RxZGl2NzU0IGRpdmlkZSAtMC4wICAgMSAgICAgLT4gLTAuMA0KK2RxZGl2NzU1IGRpdmlkZSAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWRpdjc1NiBkaXZpZGUgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkaXY3NTcgZGl2aWRlICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2NzU4IGRpdmlkZSAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCitkcWRpdjc2MSBkaXZpZGUgIDAgICAgLTEuMCAgIC0+IC0wRSsxDQorZHFkaXY3NjIgZGl2aWRlIC0wICAgIC0xLjAgICAtPiAgMEUrMQ0KK2RxZGl2NzYzIGRpdmlkZSAgMCAgICAgMS4wICAgLT4gIDBFKzENCitkcWRpdjc2NCBkaXZpZGUgLTAgICAgIDEuMCAgIC0+IC0wRSsxDQorZHFkaXY3NjUgZGl2aWRlIC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2NzY2IGRpdmlkZSAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWRpdjc2NyBkaXZpZGUgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkaXY3NjggZGl2aWRlICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZGl2NzcxIGRpdmlkZSAgMC4wICAtMS4wICAgLT4gLTANCitkcWRpdjc3MiBkaXZpZGUgLTAuMCAgLTEuMCAgIC0+ICAwDQorZHFkaXY3NzMgZGl2aWRlICAwLjAgICAxLjAgICAtPiAgMA0KK2RxZGl2Nzc0IGRpdmlkZSAtMC4wICAgMS4wICAgLT4gLTANCitkcWRpdjc3NSBkaXZpZGUgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkaXY3NzYgZGl2aWRlIC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2Nzc3IGRpdmlkZSAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWRpdjc3OCBkaXZpZGUgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorDQorLS0gU3BlY2lhbHMNCitkcWRpdjc4MCBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjc4MSBkaXZpZGUgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RxZGl2NzgyIGRpdmlkZSAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZHFkaXY3ODMgZGl2aWRlICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkcWRpdjc4NCBkaXZpZGUgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KK2RxZGl2Nzg1IGRpdmlkZSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQorZHFkaXY3ODYgZGl2aWRlICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCitkcWRpdjc4NyBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjc4OCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjc4OSBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjc5MCBkaXZpZGUgLTEgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjc5MSBkaXZpZGUgLTAgICAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjc5MiBkaXZpZGUgIDAgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCitkcWRpdjc5MyBkaXZpZGUgIDEgICAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCitkcWRpdjc5NCBkaXZpZGUgIDEwMDAgIEluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCitkcWRpdjc5NSBkaXZpZGUgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWRpdjgwMCBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjgwMSBkaXZpZGUgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KK2RxZGl2ODAyIGRpdmlkZSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQorZHFkaXY4MDMgZGl2aWRlIC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCitkcWRpdjgwNCBkaXZpZGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RxZGl2ODA1IGRpdmlkZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFkaXY4MDYgZGl2aWRlIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkcWRpdjgwNyBkaXZpZGUgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjgwOCBkaXZpZGUgLTEwMDAgIEluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjgwOSBkaXZpZGUgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjgxMCBkaXZpZGUgLTEgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCitkcWRpdjgxMSBkaXZpZGUgLTAgICAgLUluZiAgIC0+ICAwRS02MTc2IENsYW1wZWQNCitkcWRpdjgxMiBkaXZpZGUgIDAgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjgxMyBkaXZpZGUgIDEgICAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjgxNCBkaXZpZGUgIDEwMDAgLUluZiAgIC0+IC0wRS02MTc2IENsYW1wZWQNCitkcWRpdjgxNSBkaXZpZGUgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWRpdjgyMSBkaXZpZGUgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkcWRpdjgyMiBkaXZpZGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcWRpdjgyMyBkaXZpZGUgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkcWRpdjgyNCBkaXZpZGUgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkcWRpdjgyNSBkaXZpZGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcWRpdjgyNiBkaXZpZGUgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkcWRpdjgyNyBkaXZpZGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkcWRpdjgyOCBkaXZpZGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcWRpdjgyOSBkaXZpZGUgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzMCBkaXZpZGUgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzMSBkaXZpZGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzMiBkaXZpZGUgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzMyBkaXZpZGUgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzNCBkaXZpZGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzNSBkaXZpZGUgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzNiBkaXZpZGUgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWRpdjgzNyBkaXZpZGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcWRpdjg0MSBkaXZpZGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NDIgZGl2aWRlICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODQzIGRpdmlkZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg0NCBkaXZpZGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NDUgZGl2aWRlICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODQ2IGRpdmlkZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg0NyBkaXZpZGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NDggZGl2aWRlICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODQ5IGRpdmlkZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg1MCBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NTEgZGl2aWRlIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODUyIGRpdmlkZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg1MyBkaXZpZGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NTQgZGl2aWRlIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODU1IGRpdmlkZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg1NiBkaXZpZGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NTcgZGl2aWRlICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODU4IGRpdmlkZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg1OSBkaXZpZGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxZGl2ODYxIGRpdmlkZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkcWRpdjg2MiBkaXZpZGUgIE5hTjggIDEwMDAgIC0+ICBOYU44DQorZHFkaXY4NjMgZGl2aWRlICBOYU43ICBJbmYgICAtPiAgTmFONw0KK2RxZGl2ODY0IGRpdmlkZSAgTmFONiAgTmFONSAgLT4gIE5hTjYNCitkcWRpdjg2NSBkaXZpZGUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQorZHFkaXY4NjYgZGl2aWRlIC0xMDAwICBOYU4zICAtPiAgTmFOMw0KK2RxZGl2ODY3IGRpdmlkZSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCisNCitkcWRpdjg3MSBkaXZpZGUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODcyIGRpdmlkZSAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NzMgZGl2aWRlICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg3NCBkaXZpZGUgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODc1IGRpdmlkZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NzYgZGl2aWRlIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg3NyBkaXZpZGUgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODc4IGRpdmlkZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4NzkgZGl2aWRlICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWRpdjg4MSBkaXZpZGUgIC1OYU45ICAtSW5mICAgLT4gIC1OYU45DQorZHFkaXY4ODIgZGl2aWRlICAtTmFOOCAgIDEwMDAgIC0+ICAtTmFOOA0KK2RxZGl2ODgzIGRpdmlkZSAgLU5hTjcgICBJbmYgICAtPiAgLU5hTjcNCitkcWRpdjg4NCBkaXZpZGUgIC1OYU42ICAtTmFONSAgLT4gIC1OYU42DQorZHFkaXY4ODUgZGl2aWRlICAtSW5mICAgLU5hTjQgIC0+ICAtTmFONA0KK2RxZGl2ODg2IGRpdmlkZSAgLTEwMDAgIC1OYU4zICAtPiAgLU5hTjMNCitkcWRpdjg4NyBkaXZpZGUgICBJbmYgICAtTmFOMiAgLT4gIC1OYU4yDQorDQorZHFkaXY4OTEgZGl2aWRlIC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg5MiBkaXZpZGUgLXNOYU45OCAtMSAgICAgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODkzIGRpdmlkZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4OTQgZGl2aWRlIC1zTmFOOTYgLXNOYU45NCAtPiAtTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg5NSBkaXZpZGUgLU5hTjk1ICAtc05hTjkzIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODk2IGRpdmlkZSAtSW5mICAgIC1zTmFOOTIgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY4OTcgZGl2aWRlICAwICAgICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcWRpdjg5OCBkaXZpZGUgIEluZiAgICAtc05hTjkwIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZGl2ODk5IGRpdmlkZSAtTmFOICAgIC1zTmFOODkgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gVmFyaW91cyBmbGF2b3VycyBvZiBkaXZpZGUgYnkgMA0KK2RxZGl2OTAxIGRpdmlkZSAgICAwICAgICAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZGl2OTAyIGRpdmlkZSAgICAwLjBFNSAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZGl2OTAzIGRpdmlkZSAgICAwLjAwMCAgIDAgICAtPiAgTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZGl2OTA0IGRpdmlkZSAgICAwLjAwMDEgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTA1IGRpdmlkZSAgICAwLjAxICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTA2IGRpdmlkZSAgICAwLjEgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTA3IGRpdmlkZSAgICAxICAgICAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTA4IGRpdmlkZSAgICAxICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTA5IGRpdmlkZSAgIDEwICAgICAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTEwIGRpdmlkZSAgIDFFKzEwMCAgIDAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTExIGRpdmlkZSAgIDFFKzEwMCAgIDAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZGl2OTIxIGRpdmlkZSAgIC0wLjAwMDEgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTIyIGRpdmlkZSAgIC0wLjAxICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTIzIGRpdmlkZSAgIC0wLjEgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTI0IGRpdmlkZSAgIC0xICAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTI1IGRpdmlkZSAgIC0xICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTI2IGRpdmlkZSAgLTEwICAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTI3IGRpdmlkZSAgLTFFKzEwMCAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTI4IGRpdmlkZSAgLTFFKzEwMCAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZGl2OTMxIGRpdmlkZSAgICAwLjAwMDEgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTMyIGRpdmlkZSAgICAwLjAxICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTMzIGRpdmlkZSAgICAwLjEgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTM0IGRpdmlkZSAgICAxICAgICAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTM1IGRpdmlkZSAgICAxICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTM2IGRpdmlkZSAgIDEwICAgICAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTM3IGRpdmlkZSAgIDFFKzEwMCAgLTAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTM4IGRpdmlkZSAgIDFFKzEwMCAgLTAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZGl2OTQxIGRpdmlkZSAgIC0wLjAwMDEgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQyIGRpdmlkZSAgIC0wLjAxICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQzIGRpdmlkZSAgIC0wLjEgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQ0IGRpdmlkZSAgIC0xICAgICAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQ1IGRpdmlkZSAgIC0xICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQ2IGRpdmlkZSAgLTEwICAgICAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQ3IGRpdmlkZSAgLTFFKzEwMCAgLTAuMCAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZGl2OTQ4IGRpdmlkZSAgLTFFKzEwMCAgLTAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KK2RxZGl2MTAyMSAgZGl2aWRlIDFFMCAgICAgICAgICAxRTAgLT4gMQ0KK2RxZGl2MTAyMiAgZGl2aWRlIDFFMCAgICAgICAgICAyRTAgLT4gMC41DQorZHFkaXYxMDIzICBkaXZpZGUgMUUwICAgICAgICAgIDNFMCAtPiAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxMDI0ICBkaXZpZGUgMTAwRS0yICAgMTAwMEUtMyAtPiAxDQorZHFkaXYxMDI1ICBkaXZpZGUgMjRFLTEgICAgICAgIDJFMCAtPiAxLjINCitkcWRpdjEwMjYgIGRpdmlkZSAyNDAwRS0zICAgICAgMkUwIC0+IDEuMjAwDQorZHFkaXYxMDI3ICBkaXZpZGUgNUUwICAgICAgICAgIDJFMCAtPiAyLjUNCitkcWRpdjEwMjggIGRpdmlkZSA1RTAgICAgICAgIDIwRS0xIC0+IDIuNQ0KK2RxZGl2MTAyOSAgZGl2aWRlIDVFMCAgICAgIDIwMDBFLTMgLT4gMi41DQorZHFkaXYxMDMwICBkaXZpZGUgNUUwICAgICAgICAgMkUtMSAtPiAyNQ0KK2RxZGl2MTAzMSAgZGl2aWRlIDVFMCAgICAgICAgMjBFLTIgLT4gMjUNCitkcWRpdjEwMzIgIGRpdmlkZSA0ODBFLTIgICAgICAgM0UwIC0+IDEuNjANCitkcWRpdjEwMzMgIGRpdmlkZSA0N0UtMSAgICAgICAgMkUwIC0+IDIuMzUNCisNCistLSBFQ01BU2NyaXB0IGJhZCBleGFtcGxlcw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCitkcWRpdjEwNDAgIGRpdmlkZSA1IDkgIC0+IDAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NiBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorZHFkaXYxMDQxICBkaXZpZGUgNiAxMSAtPiAwLjU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTQ1NDU0NTUgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gR3l1cmlzIGV4YW1wbGUNCitkcWRpdjEwNTAgIGRpdmlkZSA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTEyNTQgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQorLS0gc2lnbnMNCitkcWRpdjE3NTEgZGl2aWRlICAxZSs0Mjc3ICAxZS0zMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NTIgZGl2aWRlICAxZSs0Mjc3IC0xZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NTMgZGl2aWRlIC0xZSs0Mjc3ICAxZS0zMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NTQgZGl2aWRlIC0xZSs0Mjc3IC0xZS0zMzExIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NTUgZGl2aWRlICAxZS00Mjc3ICAxZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE3NTYgZGl2aWRlICAxZS00Mjc3IC0xZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE3NTcgZGl2aWRlIC0xZS00Mjc3ICAxZSszMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE3NTggZGl2aWRlIC0xZS00Mjc3IC0xZSszMzExIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCitkcWRpdjE3NjAgZGl2aWRlIDFlLTYwNjkgMWUrMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsDQorZHFkaXYxNzYxIGRpdmlkZSAxZS02MDY5IDFlKzEwMiAtPiAxRS02MTcxIFN1Ym5vcm1hbA0KK2RxZGl2MTc2MiBkaXZpZGUgMWUtNjA2OSAxZSsxMDMgLT4gMUUtNjE3MiBTdWJub3JtYWwNCitkcWRpdjE3NjMgZGl2aWRlIDFlLTYwNjkgMWUrMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsDQorZHFkaXYxNzY0IGRpdmlkZSAxZS02MDY5IDFlKzEwNSAtPiAxRS02MTc0IFN1Ym5vcm1hbA0KK2RxZGl2MTc2NSBkaXZpZGUgMWUtNjA2OSAxZSsxMDYgLT4gMUUtNjE3NSBTdWJub3JtYWwNCitkcWRpdjE3NjYgZGl2aWRlIDFlLTYwNjkgMWUrMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsDQorZHFkaXYxNzY3IGRpdmlkZSAxZS02MDY5IDFlKzEwOCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE3NjggZGl2aWRlIDFlLTYwNjkgMWUrMTA5IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxZGl2MTc2OSBkaXZpZGUgMWUtNjA2OSAxZSsxMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KK2RxZGl2MTc3MCBkaXZpZGUgMWUrNDAgMWUtNjEwMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSBDbGFtcGVkDQorZHFkaXYxNzcxIGRpdmlkZSAxZSs0MCAxZS02MTAyIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MiAgQ2xhbXBlZA0KK2RxZGl2MTc3MiBkaXZpZGUgMWUrNDAgMWUtNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkDQorZHFkaXYxNzczIGRpdmlkZSAxZSs0MCAxZS02MTA0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQorZHFkaXYxNzc0IGRpdmlkZSAxZSs0MCAxZS02MTA1IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTc3NSBkaXZpZGUgMWUrNDAgMWUtNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NzYgZGl2aWRlIDFlKzQwIDFlLTYxMDcgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxNzc3IGRpdmlkZSAxZSs0MCAxZS02MTA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTc3OCBkaXZpZGUgMWUrNDAgMWUtNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE3NzkgZGl2aWRlIDFlKzQwIDFlLTYxMTAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorZHFkaXYxODAxIGRpdmlkZSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsDQorZHFkaXYxODAyIGRpdmlkZSAgMS4wMDBFLTYxNzIgICAxZSsxICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQorZHFkaXYxODAzIGRpdmlkZSAgMS4wMEUtNjE3MiAgICAxZSsyICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsDQorZHFkaXYxODA0IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSszICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsDQorZHFkaXYxODA1IGRpdmlkZSAgMS4wRS02MTcyICAgICAxZSs0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZA0KK2RxZGl2MTgwNiBkaXZpZGUgIDEuM0UtNjE3MiAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MDcgZGl2aWRlICAxLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxODA4IGRpdmlkZSAgMS43RS02MTcyICAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTgwOSBkaXZpZGUgIDIuM0UtNjE3MiAgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MTAgZGl2aWRlICAyLjVFLTYxNzIgICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxODExIGRpdmlkZSAgMi43RS02MTcyICAgICAxZSs0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTgxMiBkaXZpZGUgIDEuNDlFLTYxNzIgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MTMgZGl2aWRlICAxLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxODE0IGRpdmlkZSAgMS41MUUtNjE3MiAgICAxZSs0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTgxNSBkaXZpZGUgIDIuNDlFLTYxNzIgICAgMWUrNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MTYgZGl2aWRlICAyLjUwRS02MTcyICAgIDFlKzQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxODE3IGRpdmlkZSAgMi41MUUtNjE3MiAgICAxZSs0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxZGl2MTgxOCBkaXZpZGUgIDFFLTYxNzIgICAgICAgMWUrNCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsDQorZHFkaXYxODE5IGRpdmlkZSAgM0UtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFkaXYxODIwIGRpdmlkZSAgNUUtNjE3MiAgICAgICAxZSs1ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFkaXYxODIxIGRpdmlkZSAgN0UtNjE3MiAgICAgICAxZSs1ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTgyMiBkaXZpZGUgIDlFLTYxNzIgICAgICAgMWUrNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MjMgZGl2aWRlICA5LjlFLTYxNzIgICAgIDFlKzUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZHFkaXYxODI0IGRpdmlkZSAgMUUtNjE3MiAgICAgIC0xZSs0ICAtPiAtMUUtNjE3NiAgICBTdWJub3JtYWwNCitkcWRpdjE4MjUgZGl2aWRlICAzRS02MTcyICAgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE4MjYgZGl2aWRlIC01RS02MTcyICAgICAgIDFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE4MjcgZGl2aWRlICA3RS02MTcyICAgICAgLTFlKzUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYxODI4IGRpdmlkZSAtOUUtNjE3MiAgICAgICAxZSs1ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MTgyOSBkaXZpZGUgIDkuOUUtNjE3MiAgICAtMWUrNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjE4MzAgZGl2aWRlICAzLjBFLTYxNzIgICAgLTFlKzUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCitkcWRpdjE4MzEgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWRpdjE4MzIgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OSAtPiAxRS02MTc2ICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkcWRpdjE4MzMgZGl2aWRlICAxLjBFLTU5NzcgICAgIDFlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQorZHFkaXYxODM0IGRpdmlkZSAgMi4wRS01OTc3ICAgICAyZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KK2RxZGl2MTgzNSBkaXZpZGUgIDQuMEUtNTk3NyAgICAgNGUrMTk4IC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCitkcWRpdjE4MzYgZGl2aWRlIDEwLjBFLTU5NzcgICAgMTBlKzE5OCAtPiAxLjBFLTYxNzUgU3Vibm9ybWFsDQorZHFkaXYxODM3IGRpdmlkZSAzMC4wRS01OTc3ICAgIDMwZSsxOTggLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KK2RxZGl2MTgzOCBkaXZpZGUgNDAuMEUtNTk4MiAgICA0MGUrMTY2IC0+IDEuMEUtNjE0OCBTdWJub3JtYWwNCitkcWRpdjE4MzkgZGl2aWRlIDQwLjBFLTU5ODIgICAgNDBlKzE2NSAtPiAxLjBFLTYxNDcgU3Vibm9ybWFsDQorZHFkaXYxODQwIGRpdmlkZSA0MC4wRS01OTgyICAgIDQwZSsxNjQgLT4gMS4wRS02MTQ2IFN1Ym5vcm1hbA0KKw0KKy0tIHJhbmRvbXMNCityb3VuZGluZzogIGhhbGZfZXZlbg0KK2RxZGl2MjAxMCAgZGl2aWRlICAtNTIzMTE5NTY1MjkzMTY1MTk2ODAzNDM1NjExNzExODg1MCAgICAgICAgIC03MjQzNzE4NjY0NDIyNTQ4NTczMjAzMjYwOTcwLjM0OTk1ICAgICAgICAgIC0+ICAgNzIyMTY5LjkwOTU4MzEyODQ2MjQ3MzYwNTE0NjA1NTA2ODAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDExICBkaXZpZGUgIC04OTU4NDY2OTc3MzkyNy44MjcxMTIzNzM1MDAyMjUxNTM1MiAgICAgICAgLTQyMDc3OTQzNzI4NTI5NjM1ODg0LjIxMTQyNjI3NTMyOTg1ICAgICAgICAgLT4gICAwLjAwMDAwMjEyOTAxNzI5MTE0NjQ3MTU2NTkyODEyNTg4NzUyNzI2NiBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTIgIGRpdmlkZSAgLTIuODI4MjAxNjkzMzYwNzIzMjAzODA2OTc0ODkxOTQ2MTgwRS0yMzIgICAgODEyNTk2NTQxMjIxODIzOTYwMzg2Mzg0NDAzMDg5MjQwLjkgICAgICAgICAtPiAgLTMuNDgwNDUwMDc1NjQwNTIxMzIwMDQwMDU1NzU5MTI1MTIwRS0yNjUgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDEzICBkaXZpZGUgIC02NDQyNzc1MzcyNzYxMDY5MjY3NTAyOTM3NTM5NDA4NzIwICAgICAgICAgIDI0OTA0MDg1MDU2LjY5MTg1NDY1MTQ1MTgyNjA2MDg5MTk2ICAgICAgICAgLT4gIC0yNTg3MDM1NTYzODgyMjY0NjM2ODc3MDEuNDg4NDcxOTU4OSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTQgIGRpdmlkZSAgIDUuNTM1NTIwMDExMjcyNjI1NjI5NjEwMDc5ODc5NzE0NzA1ICAgICAgICAtNDQzNDM2NjQ2NTAuNTcyMDMwNTIwMDMwNjgxMTM1MzEyMDggICAgICAgICAtPiAgLTEuMjQ4MzIyNjMwNzI4MDg5MzA4OTc1OTQwNTMzNDkzNTYyRS0xMCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTUgIGRpdmlkZSAgIDY1OTE5MjczNzEyNTE3ODY1OTY0MzI1Ljk5NDE5NjI1MDEwICAgICAgICAtMzE0NzMzMzU0MTQxMzgxNzM3Mzc4NjIyNTE1Ljc3ODkwNTQgICAgICAgICAtPiAgLTAuMDAwMjA5NDQ0ODI5NTUyMTQ5MDYxNjM3OTc4NDc1ODkxMTYzMiBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTYgIGRpdmlkZSAgLTcuNzc5MTcyNTY4MTkzMTk3MTA3MTE1Mjc1MTQwNDMxMTI5RSs3NTkgICAtMTQwNDUzMDE1NjM5LjM5ODg5ODc2NTI4OTUxNzg3ODIxNDMgICAgICAgICAtPiAgIDUuNTM4NjI5NzkyMTYxNjQxNTM0OTYyNzc0MjQ0MjM4MTE1RSs3NDggSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDE3ICBkaXZpZGUgICA2NDQzMTQ4MzI1OTc1NjkuMDE4MTIyNjA2NzUxODE3ODc5NyAgICAgICAgLTExNTAyNDU4NTI1NzQyNS4xNjM1NzU5NTIxNTY1MjAxMDc1ICAgICAgICAgLT4gIC01LjYwMTU0MDE1MDM1NjQ3OTI1NzM2NzY4NzQ1MDkyMjc5NSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTggIGRpdmlkZSAgIDYuODk4NjQwOTQxNTc5NjExNDUwNjc2NTkyNTUzMjg2ODcwRS00NyAgICAtMTEyNzI0Mjk4ODE0MDc4NTE0ODUxNjM5MTQ5OTkuMjU5NDMgICAgICAgICAtPiAgLTYuMTE5OTIzNTc4Mjg1MzM4Njg5MzcxMTM3NjQ4MzE5MjgwRS03NSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMTkgIGRpdmlkZSAgLTM1OTEzNDQ1NDQ4ODg3MjcxMzMuMzA4MTk3NTAxNjMyNTQgICAgICAgICAgNTMyOTM5NS40MjM3OTI3OTU2NjE0NDY1NjEwOTAzMzEwMzcgICAgICAgICAtPiAgLTY3Mzg3NDY2Mjk0MS4xOTY4NTI1NTg5NDYwNTMzNzI1MjkwIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAyMCAgZGl2aWRlICAtNy42ODIzNTY3ODEzODQ2MzEzMTMxNTY0NjI3MjQ0MjU4MzhFKzc0NyAgIC02LjYwMzc1ODU1NTEyMjE5MDU3MjgxOTIyMTQxODA5OTQwRSs3MDMgICAgIC0+ICAgMS4xNjMzMzA5NjAyNzk1NTYwMTY2NzgzNzkxMjg4NzUxNDlFKzQ0IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAyMSAgZGl2aWRlICAtNDUxMTQ5NTU5NjU5Njk0MTgyMDg2MzIyNC4yNzQ2Nzk2OTkgICAgICAgICAzMzY1Mzk1MDE3LjI2MzMyOTc5NTQ0OTY2MTYxNjA5MDcyNCAgICAgICAgIC0+ICAtMTM0MDU1NDU0ODExNTMwNC45MDQxNjY4ODgwMTgzNDYyOTkgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDIyICBkaXZpZGUgICA1LjIxMTE2NDEyNzg0MDkzMTUxNzI2MzYzOTYwODE1MTI5OSAgICAgICAgIDE2NC41NTY2MzgxMzU2Mjc2NTY3MDEyNTMzODQ3MDA2NDUzICAgICAgICAgLT4gICAwLjAzMTY2NzkwNTg3NjU1MjI4ODY0NDc4MjYwMTU3MTU2NTEwIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAyMyAgZGl2aWRlICAtNDk4OTEuMjI0Mzg5MzQ1ODgzMDM4NDA3NzY4NDYyMDM4MyAgICAgICAgIC00NzE3OS45MzEyOTYxODYwNzQ3NTU0MDUzMzcxMTcxNTMwICAgICAgICAgIC0+ICAgMS4wNTc0NjcwODQzODY3NjcyOTE2MDIxODk2NTY0MzAyNjggSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDI0ICBkaXZpZGUgICAxNTA2NTQ3Ny40NzIxNDI2ODQ4ODA3NzQxNTQ2MjQxMzM1MyAgICAgICAgIDQzNjYyMTEuMTIwODkyOTUzMjYxMzA5NTI5NzQwNTUyNTk2ICAgICAgICAgLT4gICAzLjQ1MDQ2OTMwOTY2MTIyNzk4NDI0NDU0NTUxMzQ0MTM1OSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMjUgIGRpdmlkZSAgIDEuNTc1NjcwMjY5NDQwNzYxODQ2MTA5NjAyNDI5NjEyNjQ0RSszNzAgICAgNjUzMTk5NjQ5MzI0NzQwMzAwLjAwNjE4NTQ4MjY0MzQzOSAgICAgICAgICAtPiAgIDIuNDEyMjMzNzk1NzAwMzU5MTcwOTA0NTg4NTQ4MDQxNDgxRSszNTIgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDI2ICBkaXZpZGUgIC0yMTEyNDIyMzExNzMzNDQ4OTI0NTczNDMyMTkyLjYyMDE0NSAgICAgICAgLTgwMDY3MjA2LjAzNTkwNjkzMTUzODQ4MjE1ODQ4NjEzNDA2ICAgICAgICAgLT4gICAyNjM4MzExNTA4OTQxNzY2MDE3NS4yMDEwMjY0Njc1NjU3NCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMjcgIGRpdmlkZSAgLTY3MDk2NTM2MDUxMjc5ODA5LjMyMjE4NjExNTQ4NzIxODM5ICAgICAgICAtODY5Njg1NDEyODgxOTQxMDgxNjY0MjUxOTkwMTgxLjEwNDkgICAgICAgICAtPiAgIDcuNzE1MDM1MjM2NTg0ODA1OTIxMjc4NTY2MzY1MjMxMTY4RS0xNCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMjggIGRpdmlkZSAgLTU4NjEyOTA4NTQ4OTYyMDQ3LjIxODY2OTEzNDI1NDg4OTcyICAgICAgICAtOTc4NDQ5NTk3NTMxLjM4NzM2NjU1ODM0NzU2MzM4MzE2NDQgICAgICAgICAtPiAgIDU5OTAzLjg2MDg1OTkxNzAzMDkxMjM2NTA3ODU5ODM3MDIzIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAyOSAgZGl2aWRlICAtMTMzMDMyNDEyMDEwOTQyLjE0NzY4NjQxMzgyMTMzMTk3OTYgICAgICAgIC03Ljg4MjA1OTI5MzQ5ODY3MDcwNTQ0NjUyODY0ODIwMTM1OUUtNDI4ICAgIC0+ICAgMS42ODc3ODc1MDY1MDQ0MzMwNjQ1NDk1MTU2ODE2OTM3MTVFKzQ0MSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMzAgIGRpdmlkZSAgIDEuODM3NDY2OTgzMzg5NjYwMjk0OTIyOTk3MTYzNjA1MTNFKzk3NyAgICAtOS44OTc5MjY2MDg5Nzk2NDk5NTE2NzI4Mzk4NzkxMjg2MDNFKzE1NCAgICAtPiAgLTEuODU2NDE2MDUxNTQyMjEyNTUyMDQyMzkwMjE4MDYyNDU4RSs4MjIgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDMxICBkaXZpZGUgIC0xMTM3NDI0NzU4NDEzOTkyMzYzMDcxMjg5NjIuMTUwNzA2MyAgICAgICAgIDgyOTg2MDIuMjAzMDQ5ODM0NzMyNjU3NTY3OTY1MjYyOTg5ICAgICAgICAgLT4gIC0xMzcwNjIyMTAwNjY2NTEzNzgyNi4xNjU1NzM5MzkxOTkyOSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMzIgIGRpdmlkZSAgIDE5Ni40Nzg3NTc0NjUwNzU0MTUyOTk1OTQxODA4MzMxODYyICAgICAgICAgOTI5LjY1NTMzODg0NzIzMTgwOTQ0Mjc0MjIxMTcxNzIzOTQgICAgICAgICAtPiAgIDAuMjExMzQ1ODA2NjE3NjUyNjY1MTAwNjkxNzkyMjgxNDAxOCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMzMgIGRpdmlkZSAgIDcxOTMxMjIxNDY1LjQzODY3OTk2MjgyODAzNjI4MTMwMzUwICAgICAgICAgMzgzODY4NTkzNDIwNjQyNjI1NzA5MDcxOC40MDIyNDg4NTMgICAgICAgICAtPiAgIDEuODczODUwMTMyNTI3NDIzNDEzNjA3MTk5NTEzMzI0MDIxRS0xNCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMzQgIGRpdmlkZSAgIDQ4OC40MjgyNTAyMjg5NjUxNjUzNzgzNTk2MjQ2MzEyODg1ICAgICAgICAtODAuNjg5NDA5NTY4MDY2MzQyODAwNzg3MDY1Nzc5NTMxODggICAgICAgICAtPiAgLTYuMDUzMTg5MDQ3MjgwNjkzMzE4ODQ0ODAxODk5NDczMjcyIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAzNSAgZGl2aWRlICAgOS4wMDE3NjQzNDQ5NjM5MjE3NTQ5ODE3NjI5MTMyNDczOTRFLTE2MiAgIC04LjU4NTU0MDk3MzY2NzIwNTc1MzczNDk2NzY0NTM4NjkxOUUtNzI5ICAgIC0+ICAtMS4wNDg0Nzk1NzQyNzE4MjczMjYzOTYwMTI1NzMyMzI5MzRFKzU2NyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwMzYgIGRpdmlkZSAgLTcuNDA0MTMzOTU5NDA5ODk0NzQzNzA2NDAyODU3MTQ1NDcxRS04MjggICAtNTEuMzgxNTk5Mjk0NjAyODk3MTExMzQ2ODQ4NDMwODYyNjUgICAgICAgICAtPiAgIDEuNDQxMDA4ODU1NTE2MDI5NDYxMDMyMDYxNzg1MjE5NzczRS04MjkgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDM3ICBkaXZpZGUgICAyLjk2NzUyMDIzNTU3NDQxOTc5NDA0ODk5NDQzNjA0MDcxN0UtNjEzICAgLTYyNTI1MTM4NTUuOTEzOTQ4OTQ5NDk4NzkyNjI3MzE4ODkgICAgICAgICAgLT4gIC00Ljc0NjEyMzQwNTY1NjQwOTEyNzU3Mjk5ODc1MTg4NTMzOEUtNjIzIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAzOCAgZGl2aWRlICAtMTg4MjY4NTI2NTQ4MjQwNDA1MDUuODM5MjAzNjY3NjUwNTEgICAgICAgIC02MzM2OTI0ODc3OTQyNDM3OTkyNTkwNTU3NDYwMTQ3MzQwICAgICAgICAgIC0+ICAgMi45NzA5NzYxNDY1NDY0OTQ2Njk4MDc4ODYyNzg1MTkxOTRFLTE1IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjAzOSAgZGl2aWRlICAtOC4xMDE0MDY3ODQ4MDkxOTc2MDQ5NDk1ODQwMDE3MzU5NDlFKzU2MSAgICA0LjgyMzMwMDMwNjk0ODk0MjgyMTA3NjY4MTY1ODc3MTYzNUUrMzYxICAgIC0+ICAtMS42Nzk2Mzk3MjE2MTA4MzkyMDQ3Mzg0NDU3NDcyMzg5ODdFKzIwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNDAgIGRpdmlkZSAgLTYuMTE5ODE5Nzc3NzMwOTQwNTIzMzEwNjI1ODUxOTE3MjNFKzI5NSAgICAgMS41MDc2MTAyNTM3NTUzMzkzMjgzMDI3NzkwMDU1ODY1MzRFKzIzOCAgICAtPiAgLTQuMDU5Mjg1MDU4OTExNTc3MjQ0MDQ0NDE4NDE2MDQ0NzYzRSs1NyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNDEgIGRpdmlkZSAgIDYuNDcyNjM4ODUwMDQ2ODE1ODgwNTk5MjIwNTM0Mjc0MDU1RS01OTYgICAtNC40NzUyMzM3MTIwODMwNDc1MTY5MzM5MTE3ODYxNTk5NzIgICAgICAgICAtPiAgLTEuNDQ2MzI0MjA3MDYyMjYxNzQ1NTIwNDk2NDc1Nzc4ODc5RS01OTYgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDQyICBkaXZpZGUgIC04NDQzODU5MzMzMC43MTI3NzgzOTYzMTE0NDUwOTM5NzExMiAgICAgICAgLTU4NjY4NDU5NjIwNDQwMTY2NDIwODk0Ny40MDU0ODc5NjMzICAgICAgICAgLT4gICAxLjQzOTI1MDIxODU1MDA0MTIyODc1OTk4MzkzNzc3MjUwNEUtMTMgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDQzICBkaXZpZGUgICA5LjM1NDUzMzIzMzI5NDAyMjYxNjY5NTgxNTY1NjcwNDM2OUUtMjQgICAgIDQwNS41MDAzOTA2MjYxMzUzMDQyNTIxNDQxNjM1OTE3NDYgICAgICAgICAgLT4gICAyLjMwNjkxMTAyODgyNzc3NDU0OTc0MDU3MTIyOTczNjE5OEUtMjYgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDQ0ICBkaXZpZGUgICA5ODU2MDY0MjMzNTAyMTAuNzM3NDg3NjY1MDE0OTk1Nzg4MSAgICAgICAgLTM2ODExNTYzNjk3LjQxOTI1NjgxODY2Njk0ODU5ODI4Nzk0ICAgICAgICAgLT4gIC0yNjc3NC4zNjk5MDg2NDExOTQ0NTMzNTgxMzM1NDcxNzcxMSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNDUgIGRpdmlkZSAgLTguMTg3MjgwNzc0MTc3NzE1NzA2Mjc4MDAyMjQ3NzY2MzExRS0xMjMgICAtMzg3ODQxMjQzOTMuOTEyMTI4NzA4Mjg0MzAwMDEzMDAwNjggICAgICAgICAtPiAgIDIuMTEwOTg3NjUzMzU2MTM5MTQ3MzU3MjQwNzI3Nzk0MzY1RS0xMzMgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDQ2ICBkaXZpZGUgIC00LjYxMjIwMzEyNjM1MDA3MDkwMzQ1OTI0NTc5ODM3MTY1N0UrOTEyICAgIDcuOTcxNTYyMTgyNzI3OTU2MjkwOTAxOTg0NzM2ODAwNTE5RSs2NCAgICAgLT4gIC01Ljc4NTgyMDkyMjcwODY4MzIzNzA5ODgyNjY2Mjc2OTc0OEUrODQ3IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjA0NyAgZGl2aWRlICAgNC42NjEwMTU5MDk0MjE0ODUyOTgyNDc5Mjg5Njc5NzcwODlFKzg4OCAgIC02LjM2MDkxMTI1MzMyMzkyMjMzODczNzMxMTU2Mzg0NTU4MUUrMzg4ICAgIC0+ICAtNy4zMjc1OTE0NzgzMjEzNjU5ODAxNTY2NTQ1Mzk2Mzg4MzZFKzQ5OSBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNDggIGRpdmlkZSAgIDkxNTYwNzgxNzI5MDMuMjU3NTAwMDAzMjYwNzEwODMzMDMwICAgICAgICAgNy4xODk3OTY2NTMyNjIxNDcxMzkwNzE2MzQyMzc5NjQwNzRFLTkwICAgICAtPiAgIDEuMjczNDgyMjE1NzY2MDAwOTk0MzY1MjAxNTQ1MDk2MDI2RSsxMDIgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDQ5ICBkaXZpZGUgIC0xLjcxMDcyMjMwMzMyNzQ3NjU4NjM3MzQ3Nzc4MTI3NjU4NkUtMzExICAgLTMxNjc1NjE2MjgyNjAxNTY4MzczMjkzMjMuNzI5MzgwNjk1ICAgICAgICAgLT4gICA1LjQwMDc1NDU5OTU3ODYxMzk4NDg3NTc1Mjk1ODY0NTY1NUUtMzM2IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjA1MCAgZGl2aWRlICAtNC42NDc5MzUyMTA4ODE4MDYyMzgzMjE2MTYzNDU0MTMwMjFFLTg3OCAgICAyMDkzODguNTQzMTg2Nzc0NDY0ODE3NzMwODQ2MDYzOTU4MiAgICAgICAgIC0+ICAtMi4yMTk3NjU3NzEzOTQ1OTM3MzMxNDA0OTQyOTczODgxNDBFLTg4MyBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNTEgIGRpdmlkZSAgIDU5NTguNjk0NzI4Mzk1NzYwOTkyNzE5MDg0NzgxNTgyNzAwICAgICAgICAgNC41NDE1MTAxNTY1NjQzMTU2MzI1MzYzNTMxNzE4NDYwOTZFLTc0NiAgICAtPiAgIDEuMzEyMDUxMzkzMjUzNjM4NjY0OTQ3ODUyNjkzMDA1NDgwRSs3NDkgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDUyICBkaXZpZGUgIC03LjkzNTczMjU0NDY0OTcwMjE3NTI1NjY5OTg4Njg3MjA5M0UtNDg5ICAgLTcuNDMzMzI5MDczNjY0NzkzMTM4OTk4NzY1NjQ3NDY3OTcxRSszNjAgICAgLT4gICAxLjA2NzU4Nzk0OTYyNjA3NjkxNzY3MjI3MTYxOTY2NDY1NkUtODQ5IEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjA1MyAgZGl2aWRlICAtMjc0NjY1MDg2NDYwMTE1Ny44NjM1ODk5NTk5Mzk5MDEzNTAgICAgICAgICA3LjAxNjY4NDk0NTUwNzY0NzUyODkwNzE4NDY5NDM1OTU5OEUrNTQ4ICAgIC0+ICAtMy45MTQ0NTY1OTMwMDkzMDk1MjkzNTEyNTQ5NTA0Mjk5MzJFLTUzNCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNTQgIGRpdmlkZSAgIDM2MDUxNDk0MDg2MzExOTczNjU0NDc5NTMuOTk0NTY5MTc4ICAgICAgICAtNzU2MTQwMjU4MjU2NDkwODIuNzgyNjQ4NjQ0MjgyMzc4MzMgICAgICAgICAtPiAgLTQ3Njc4MzE1Ljg4NDcyNjkzNTA3MDYwMDYzMTg4MDIwNTMyIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2MjA1NSAgZGl2aWRlICAgNzg4MTk0MzIwOTIxNzk4NDA0OTA2Mzc1MjE0LjE5NjM0OSAgICAgICAgIC02LjIyMjcxODE0ODQzMzI0NzM4NDkzMjU3MzQwMTk3NjMzN0UtNDE4ICAgIC0+ICAtMS4yNjY2Mzk5MTg2MzQ2NzE4MDM5ODIyMjIyNDQ5NzcyODdFKzQ0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNTYgIGRpdmlkZSAgIDU2MjA3MjI3MzA1MzQ3NTIuNzU4MjA4OTQzNDQ3NjAzMjExICAgICAgICAgNi44NDM1NTI4NDExNjg1MzgzMTkxMjMwMDA5MTc2NTc3NTlFLTEzOSAgICAtPiAgIDguMjEzMTY0ODAwNDg1NDM0NjY2NjI5OTcwNDQzNzM5NTU0RSsxNTMgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDU3ICBkaXZpZGUgICA3MzA0NTM0Njc2NzEzNzAzOTM4MTAyLjQwMzk0OTAxOTQwMiAgICAgICAgLTU3NjE2OS4zNjg1MDEwOTM1MTA4MTUzMDIzODAzNTkwODM1ICAgICAgICAgLT4gIC0xMjY3Nzc1NjAxNDIwMTk5NS4zMTk2OTIzNzE0NDM5NDc3MiBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjIwNTggIGRpdmlkZSAgIDgwNjc5MTg3NjIuMTM0NjIxNjM5MjU0OTE2Nzg2OTQ1NTQ3ICAgICAgICAtOC43NzQ3NzE0ODAwNTU1MzYwMDkxMDU1OTYxNjM4NjQ3NThFKzk1NCAgICAtPiAgLTkuMTk0NDQ4ODU4ODM2MzMyMTU2NzY2NzY0NjA1MTI1MjQ1RS05NDYgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDU5ICBkaXZpZGUgICA4LjcwMjA5MzQ1NDEyMzA0NjUwNzU3ODI1Njg5OTUzNzU2M0UtMzI0ICAgLTUuODc1Mzk5NzMzMDE2MDE4NDA0NTgwMjAxMTc2NTc2MjkzRS00MDEgICAgLT4gIC0xLjQ4MTEwNjYyMjQ1MjA1MjU4MTQ3MDQ0MzUyNjk1NzMzNUUrNzcgSW5leGFjdCBSb3VuZGVkDQorZHFkaXYyMDYwICBkaXZpZGUgIC00MTQyNi4wMTY2MjUxODQ1MTg2MTM4NjM1MjQxNTA5MjM1NiAgICAgICAgIDkwLjAwMTQ2NjIxNjg0NDc4MzAwNTEwNzY5ODAyMDEzNDY0ICAgICAgICAgLT4gIC00NjAuMjgxNTc1MDI4NzMxODY5MjczMjA2NzcwOTE3NjIwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSByYW5kb20gZGl2aWRlIHRlc3RzIHdpdGggcmVzdWx0IG5lYXIgMQ0KK2RxZGl2NDAwMSBkaXZpZGUgIDIwMDMxMDAzNTI3NzA3NTM5Njk4Nzg5MjU2NjQ1MjQ5MDAgICAyMDAzMTAwMzUyNzcwNzUzOTY5ODc4OTI1NjY0NDk3ODI0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM1MTcgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAwMiBkaXZpZGUgIDQ4MTc3ODU3OTM5MTY0OTA2NTI1Nzk1NTIzMTgzNzE2NDUgICA0ODE3Nzg1NzkzOTE2NDkwNjUyNTc5NTUyMzE4MzYyMDk3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5ODIgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAwMyBkaXZpZGUgIDgyOTkxODc0MTA5MjAwNjczMjU2NDgwNjg0Mzk1NjAyODIgICA4Mjk5MTg3NDEwOTIwMDY3MzI1NjQ4MDY4NDM5NTkxMTU5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYyNzk1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMDQgZGl2aWRlICA1NjQxMDg4NDU1ODk3NDA3MDQ0NTQ0NDYxNzg1MzY1ODk5ICAgNTY0MTA4ODQ1NTg5NzQwNzA0NDU0NDQ2MTc4NTM4OTk2NSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzMzOCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDA1IGRpdmlkZSAgNTc1MjI3NDY5NDcwNjU0NTM1OTMyNjM2MTMxMzQ5MDQyNCAgIDU3NTIyNzQ2OTQ3MDY1NDUzNTkzMjYzNjEzMTM1MDI3MjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg2MTkgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAwNiBkaXZpZGUgIDY3NjIwNzk0NzczNzM2NzA1OTQ4MjkzMTkzNDYwOTk2NjUgICA2NzYyMDc5NDc3MzczNjcwNTk0ODI5MzE5MzQ2MTMyNTc5ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUxMzI2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMDcgZGl2aWRlICA3Mjg2NDI1MTUzNjkxODkwMzQxNjMzMDIzMjIyNjAyOTE2ICAgNzI4NjQyNTE1MzY5MTg5MDM0MTYzMzAyMzIyMjYwNjU1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwNCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDA4IGRpdmlkZSAgOTQ4MTIzMzk5MTkwMTMwNTcyNzY0ODMwNjQyMTk0NjY1NSAgIDk0ODEyMzM5OTE5MDEzMDU3Mjc2NDgzMDY0MjE5MTkxMjQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkwNCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDA5IGRpdmlkZSAgNDI4MjA1Mzk0MTg5Mzk1MTc0MjAyOTQ0NDA2NTYxNDMxMSAgIDQyODIwNTM5NDE4OTM5NTE3NDIwMjk0NDQwNjU1ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzI5NCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDEwIGRpdmlkZSAgIDYyNjg4ODIyNTQ0MTI1MDYzOTc0MTc4MTg1MDMzODY5NSAgICA2MjY4ODgyMjU0NDEyNTA2Mzk3NDE3ODE4NTAzMjcyOTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxODE3OSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDExIGRpdmlkZSAgMzg2MDk3MzY0OTIyMjAyODAwOTQ1NjU5ODYwNDQ2ODU0NyAgIDM4NjA5NzM2NDkyMjIwMjgwMDk0NTY1OTg2MDQ0NzY4NDkgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg0OTggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAxMiBkaXZpZGUgIDQ3NTMxNTcwODAxMjc0NjgxMjc5MDgwNjA2MDc4MjE4MzkgICA0NzUzMTU3MDgwMTI3NDY4MTI3OTA4MDYwNjA3Nzg4Mzc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwNDAgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAxMyBkaXZpZGUgICA1NTI0NDg1NDYyMDM3NTQwNjI4MDU3MDYyNzc4ODA0MTkgICAgNTUyNDQ4NTQ2MjAzNzU0MDYyODA1NzA2Mjc3ODgxOTAzICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTczMTM4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMTQgZGl2aWRlICA4NDA1OTU0NTI3OTUyMTU4NDU1MzIzNzEzNzI4OTE3Mzk1ICAgODQwNTk1NDUyNzk1MjE1ODQ1NTMyMzcxMzcyODkzMzg2NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4MDQwNiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDE1IGRpdmlkZSAgNzU1NDA5NjUwMjIzNTMyMTE0MjU1NTgwMjIzODAxNjExNiAgIDc1NTQwOTY1MDIyMzUzMjExNDI1NTU4MDIyMzgwMjY1NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODYxOTMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAxNiBkaXZpZGUgIDQwNTMyNTc2NzQxMjc1MTg2MDY4NzEwNTQ5MzQ3NDY3ODIgICA0MDUzMjU3Njc0MTI3NTE4NjA2ODcxMDU0OTM0NzY3MzU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ5MjQzICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMTcgZGl2aWRlICA3MTEyNDE5NDIwNzU1MDkwNDU0NzE2ODg4ODQ0MDExNTgyICAgNzExMjQxOTQyMDc1NTA5MDQ1NDcxNjg4ODg0NDAzODEwNSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2MjcwOSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDE4IGRpdmlkZSAgMzEzMjMwMjEzNzUyMDA3MjcyODE2NDU0OTczMDkxMTg0NiAgIDMxMzIzMDIxMzc1MjAwNzI3MjgxNjQ1NDk3MzA5MDg0MTYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTA5NSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDE5IGRpdmlkZSAgNDc4ODM3NDA0NTg0MTQxNjM1NTcwNjcxNTA0ODE2MTAxMyAgIDQ3ODgzNzQwNDU4NDE0MTYzNTU3MDY3MTUwNDgxOTAwNzcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MzkzMDMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyMCBkaXZpZGUgIDk0NjYwMjE2MzYwNDc2MzAyMTgyMzgwNzUwOTk1MTA1OTcgICA5NDY2MDIxNjM2MDQ3NjMwMjE4MjM4MDc1MDk5NDg0MDUzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4MDQgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyMSBkaXZpZGUgICA5MTI3NDI3NDU2NDY3NjU2MjU1OTczOTk2OTIxMzg2NTAgICAgOTEyNzQyNzQ1NjQ2NzY1NjI1NTk3Mzk5NjkyMTM5MDQyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1NzA1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMjIgZGl2aWRlICA5NTA4NDAyNzQyOTMzNjQzMjA4ODA2MjY0ODk3MTg4NTA0ICAgOTUwODQwMjc0MjkzMzY0MzIwODgwNjI2NDg5NzE5NTk3MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjE0NSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDIzIGRpdmlkZSAgMTE4Njk1Njc5NTcyNzIzMzcwNDk2MjM2MTkxNDM2MDg5NSAgIDExODY5NTY3OTU3MjcyMzM3MDQ5NjIzNjE5MTQzMjk1NzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNjM4NSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDI0IGRpdmlkZSAgNTk3MjIxMDI2ODgzOTAxNDgxMjY5NjkxNjE3MDk2NzkzOCAgIDU5NzIyMTAyNjg4MzkwMTQ4MTI2OTY5MTYxNzA5NTQ5NzQgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjE3MSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDI1IGRpdmlkZSAgMjMwMzgwMTYyNTUyMTYxOTkzMDg5NDQ2MDEzOTc5MzE0MCAgIDIzMDM4MDE2MjU1MjE2MTk5MzA4OTQ0NjAxMzk3OTk2NDMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzE3NzMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyNiBkaXZpZGUgIDYwMjIyMzE1NjAwMDI4OTgyNjQ3NzczOTM0NzM5NjY1OTUgICA2MDIyMjMxNTYwMDAyODk4MjY0Nzc3MzkzNDczOTQ3MTk4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyNyBkaXZpZGUgIDg0MjYxNDgzMzU4MDEzOTYxOTk5NjkzNDYwMzIyMTA4OTMgICA4NDI2MTQ4MzM1ODAxMzk2MTk5OTY5MzQ2MDMyMjAzMTc5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MTUgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyOCBkaXZpZGUgIDg4MTIyNzg5NDcwMjg3ODQ2MzczODI4NDcwOTg0MTE3NDkgICA4ODEyMjc4OTQ3MDI4Nzg0NjM3MzgyODQ3MDk4Mzg1MzE3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5OTkgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAyOSBkaXZpZGUgIDgxNDUyODIwMDIzNDgzNjczODMyNjQxOTcxNzAxMTYxNDYgICA4MTQ1MjgyMDAyMzQ4MzY3MzgzMjY0MTk3MTcwMDgzOTg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NDggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAzMCBkaXZpZGUgIDY4MjE1Nzc1NzE4NzY4NDAxNTMxMjM1MTAxMDczODcwMjYgICA2ODIxNTc3NTcxODc2ODQwMTUzMTIzNTEwMTA3NDE4MDA4ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTU0NTgyICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMzEgZGl2aWRlICA5MDE4NTU1MzE5NTE4OTY2OTcwNDgwNTY1NDgyMDIzNzIwICAgOTAxODU1NTMxOTUxODk2Njk3MDQ4MDU2NTQ4MjAxMzM0NiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTUwICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMzIgZGl2aWRlICA0NjAyMTU1NzEyOTk4MjI4NDQ5NjQwNzE3MjUyNzg4ODY0ICAgNDYwMjE1NTcxMjk5ODIyODQ0OTY0MDcxNzI1MjgxODUwMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzNTYwMCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDMzIGRpdmlkZSAgNjY3NTYwNzQ4MTUyMjc4NTYxNDUwNjgyODI5MjI2NDQ3MiAgIDY2NzU2MDc0ODE1MjI3ODU2MTQ1MDY4MjgyOTIyNzcxMDAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODEwODMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAzNCBkaXZpZGUgIDQwMTU4ODE1MTY4NzE4MzM4OTc3NjY5NDU4MzYyNjQ0NzIgICA0MDE1ODgxNTE2ODcxODMzODk3NzY2OTQ1ODM2MjYyNjQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NTUgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAzNSBkaXZpZGUgIDE0MTU1ODAyMDU5MzM0MTE4Mzc1OTU0NTk3MTY5MTAzNjUgICAxNDE1NTgwMjA1OTMzNDExODM3NTk1NDU5NzE2ODgwMTM5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEzNTIgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAzNiBkaXZpZGUgIDk0MzI5NjgyOTcwNjk1NDI4MTY3NTIwMzUyNzYzNjE1NTIgICA5NDMyOTY4Mjk3MDY5NTQyODE2NzUyMDM1Mjc2MzUzMDU0ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MDEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDAzNyBkaXZpZGUgIDQ3OTkzMTk1OTEzMDM4NDg1MDA1MzI3NjY2ODIxNDA2NTggICA0Nzk5MzE5NTkxMzAzODQ4NTAwNTMyNzY2NjgyMTcyNjU1ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMzMzMwICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwMzggZGl2aWRlICAgMzE2ODU0MjcwNzMyODM5NTI5NzkwNTg0Mjg0OTg3NDcyICAgIDMxNjg1NDI3MDczMjgzOTUyOTc5MDU4NDI4NTAwNDgzMiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQ1MjExNCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDM5IGRpdmlkZSAgMzU5ODk4MTMwMDU5MjQ5MDQyNzgyNjAyNzk3NTY5NzQxNSAgIDM1OTg5ODEzMDA1OTI0OTA0Mjc4MjYwMjc5NzU2ODY3MTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQwIGRpdmlkZSAgMTY2NDMxNTQzNTY5NDQ2MTM3MTE1NTgwMDY4MjE5NjUyMCAgIDE2NjQzMTU0MzU2OTQ0NjEzNzExNTU4MDA2ODIxOTU2MTcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0MyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQxIGRpdmlkZSAgMTY4MDg3MjMxNjUzMTEyODg5MDEwMjg1NTMxNjUxMDU4MSAgIDE2ODA4NzIzMTY1MzExMjg4OTAxMDI4NTUzMTY0OTU1NDUgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODk0NSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQyIGRpdmlkZSAgOTg4MTI3NDg3OTU2NjQwNTQ3NTc1NTQ5OTI4MTY0NDczMCAgIDk4ODEyNzQ4Nzk1NjY0MDU0NzU3NTU0OTkyODE2MTU3NDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkzNCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQzIGRpdmlkZSAgNDczNzIyNTk1NzcxNzQ2Njk2MDQ0NzIwNDIzMjI3OTIxNiAgIDQ3MzcyMjU5NTc3MTc0NjY5NjA0NDcyMDQyMzIyNzc0NTIgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3MiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQ0IGRpdmlkZSAgMjQ4MjA5NzM3OTQxNDg2NzA2MTIxMzMxOTM0NjQxODI4OCAgIDI0ODIwOTczNzk0MTQ4NjcwNjEyMTMzMTkzNDYzODc5MzYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjIyOCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDQ1IGRpdmlkZSAgNzQwNjk3NzU5NTIzMzc2MjcyMzU3NjQzNDEyMjE2MTg2OCAgIDc0MDY5Nzc1OTUyMzM3NjI3MjM1NzY0MzQxMjIxODkwNDIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjMzMTMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA0NiBkaXZpZGUgICAyMjg3ODIwNTc3NTc1NjYwNDcwODY1OTMyODE3NzM1NzcgICAgMjI4NzgyMDU3NzU3NTY2MDQ3MDg2NTkzMjgxNzY5NzI3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTY4MjggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA0NyBkaXZpZGUgIDI5NTY1OTQyNzAyNDA1Nzk2NDg4MjMyNzA1NDAzNjc2NTMgICAyOTU2NTk0MjcwMjQwNTc5NjQ4ODIzMjcwNTQwMzY4NTU2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2OTQ2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNDggZGl2aWRlICA2MzI2OTY0MDk4ODk3NjIwNjIwNTM0MTM2NzY3NjM0MzQwICAgNjMyNjk2NDA5ODg5NzYyMDYyMDUzNDEzNjc2NzYxOTMzOSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMzcxICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNDkgZGl2aWRlICAgNDE0NTg2NDQwNDU2NTkwMjE1MjQ3MDAyNjc4MzI3ODAwICAgIDQxNDU4NjQ0MDQ1NjU5MDIxNTI0NzAwMjY3ODMxNjkyMiAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2MjM4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNTAgZGl2aWRlICA3MzY0NTUyMjA4NTcwMDM5Mzg2MjIwNTA1NjM2Nzc5MTI1ICAgNzM2NDU1MjIwODU3MDAzOTM4NjIyMDUwNTYzNjgwMzU0OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2NjgzNyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDUxIGRpdmlkZSAgNTYyNjI2Njc0OTkwMjM2OTcxMDAyMjgyNDk1MDU5MDA1NiAgIDU2MjYyNjY3NDk5MDIzNjk3MTAwMjI4MjQ5NTA1OTEwMDggIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgzMDggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA1MiBkaXZpZGUgIDQ4NjMyNzgyOTM5MTYxOTc0NTQ5ODc0ODEzNDM0NjA0ODQgICA0ODYzMjc4MjkzOTE2MTk3NDU0OTg3NDgxMzQzNDQyNTIyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2OTMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA1MyBkaXZpZGUgIDExNzA3MTM1ODIwMzA2MzczNTk3MTMyNDk3OTY4MzU0ODMgICAxMTcwNzEzNTgyMDMwNjM3MzU5NzEzMjQ5Nzk2ODIzMzQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAzNjggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA1NCBkaXZpZGUgIDk4MzgwNjI0OTQ3MjU5NjU2Njc3NzYzMjY1NTYwNTI5MzEgICA5ODM4MDYyNDk0NzI1OTY1NjY3Nzc2MzI2NTU2MDYxMDAyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkxNzk2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNTUgZGl2aWRlICA0MDcxMzg4NzMxMjk4ODYxMDkzMDA1Njg3MDkxNDk4OTIyICAgNDA3MTM4ODczMTI5ODg2MTA5MzAwNTY4NzA5MTQ5ODI3OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTU4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNTYgZGl2aWRlICA4NzUzMTU1NzIyMzI0NzA2Nzk1ODU1MDM4NTkwMjcyNTI2ICAgODc1MzE1NTcyMjMyNDcwNjc5NTg1NTAzODU5MDI3NjY1NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTI4MiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDU3IGRpdmlkZSAgNDM5OTk0MTkxMTUzMzI3MzQxODg0NDc0MjY1ODI0MDQ4NSAgIDQzOTk5NDE5MTE1MzMyNzM0MTg4NDQ3NDI2NTgyMTk4OTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDY4MSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDU4IGRpdmlkZSAgNDEyNzg4NDE1OTk0OTUwMzY3Nzc3NjQzMDYyMDA1MDI2OSAgIDQxMjc4ODQxNTk5NDk1MDM2Nzc3NzY0MzA2MjAwMjYwOTEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTg1NyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDU5IGRpdmlkZSAgNTUzNjE2MDgyMjM2MDgwMDA2NzA0MjUyODMxNzQzODgwOCAgIDU1MzYxNjA4MjIzNjA4MDAwNjcwNDI1MjgzMTc0NTA2ODcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nzg1NDMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA2MCBkaXZpZGUgIDM5NzMyMzQ5OTg0Njg2NjQ5MzY2NzEwODgyMzc3MTAyNDYgICAzOTczMjM0OTk4NDY4NjY0OTM2NjcxMDg4MjM3NzQxODg2ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIwMzY3ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNjEgZGl2aWRlICA5ODI0ODU1OTM1NjM4MjYzNTkzNDEwNDQ0MTQyMzI3MzU4ICAgOTgyNDg1NTkzNTYzODI2MzU5MzQxMDQ0NDE0MjMyODU3NiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODc2MCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDYyIGRpdmlkZSAgNTkxNzA3ODUxNzM0MDIxODEzMTg2NzMyNzMwMDgxNDg2NyAgIDU5MTcwNzg1MTczNDAyMTgxMzE4NjczMjczMDA3ODg3MDEgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQyMiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDYzIGRpdmlkZSAgNDM1NDIzNjYwMTgzMDU0NDg4MjI4NjEzOTYxMjUyMTM2MiAgIDQzNTQyMzY2MDE4MzA1NDQ4ODIyODYxMzk2MTI1NDMyMjMgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NDk3OTQgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA2NCBkaXZpZGUgIDgwNTg0NzQ3NzIzNzUyNTkwMTczNDIxMTAwMTM4OTEyOTQgICA4MDU4NDc0NzcyMzc1MjU5MDE3MzQyMTEwMDEzOTA2NzkyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgwNzY4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNjUgZGl2aWRlICA1NTE5NjA0MDIwOTgxNzQ4MTcwNTE3MDkzNzQ2MTY2MzI4ICAgNTUxOTYwNDAyMDk4MTc0ODE3MDUxNzA5Mzc0NjE4MTc2MyAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MjAzNiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDY2IGRpdmlkZSAgMTUwMjEzMDk2Njg3OTgwNTQ1ODgzMTMyMzc4MjQ0MzEzOSAgIDE1MDIxMzA5NjY4Nzk4MDU0NTg4MzEzMjM3ODI0MTIyMTMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDU4OCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDY3IGRpdmlkZSAgIDU2Mjc5NTYzMzcxOTQ4MTIxMjkxNTE1OTc4Nzk4MDI3MCAgICA1NjI3OTU2MzM3MTk0ODEyMTI5MTUxNTk3ODgwMDcwNjYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1MjM4NzcgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA2OCBkaXZpZGUgIDY1ODQ3NDMzMjQ0OTQ2NjQyNzM5NDEyODE1NTcyNjg4NzggICA2NTg0NzQzMzI0NDk0NjY0MjczOTQxMjgxNTU3MjU4OTQ1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1MDggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA2OSBkaXZpZGUgIDM2MzIwMDAzMjcyODU3NDM5OTc5NzY0MzExMDk0MTY1MDAgICAzNjMyMDAwMzI3Mjg1NzQzOTk3OTc2NDMxMTA5NDA4MTA3ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzMTEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA3MCBkaXZpZGUgIDExNDU4MjcyMzczMTU0MzAwODkzODg5NTM4Mzg1NjE0NTAgICAxMTQ1ODI3MjM3MzE1NDMwMDg5Mzg4OTUzODM4NTI3MzMyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjk3NzYgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA3MSBkaXZpZGUgIDg4NzQ0MzEwMTAzNTc2OTE4Njk3MjUzNzIzMTczNTAzODAgICA4ODc0NDMxMDEwMzU3NjkxODY5NzI1MzcyMzE3MzE2NDcyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4MjEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA3MiBkaXZpZGUgICA5OTI5NDg3MTg5MDI4MDQ2NDgxMTk3NTMxNDEyMDIxOTYgICAgOTkyOTQ4NzE4OTAyODA0NjQ4MTE5NzUzMTQxMjM1MjIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjY3Mzk1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNzMgZGl2aWRlICAyNTIyNzM1MTgzMzc0MjE4NTA1MTQyNDE3MjY1NDM5OTg5ICAgMjUyMjczNTE4MzM3NDIxODUwNTE0MjQxNzI2NTQ1Mzc3OSAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0NTMzNyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDc0IGRpdmlkZSAgMjY2ODQxOTE2MTkxMjkzNjUwODAwNjg3MjMwMzUwMTA1MiAgIDI2Njg0MTkxNjE5MTI5MzY1MDgwMDY4NzIzMDM0NzEwMzYgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTI0OSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDc1IGRpdmlkZSAgMzAzNjE2OTA4NTY2NTE4NjcxMjU5MDk0MTExMTc3NTA5MiAgIDMwMzYxNjkwODU2NjUxODY3MTI1OTA5NDExMTE4MDg4NDYgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ODg4MjcgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA3NiBkaXZpZGUgIDk0NDE2MzQ2MDQ5MTcyMzE2Mzg1MDg4OTg5MzQwMDYxNDcgICA5NDQxNjM0NjA0OTE3MjMxNjM4NTA4ODk4OTM0MDAwMjg4ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MjEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA3NyBkaXZpZGUgIDI2NzczMDEzNTMxNjQzNzcwOTExMTE0NTg4MTE4MzkxOTAgICAyNjc3MzAxMzUzMTY0Mzc3MDkxMTExNDU4ODExODY3NzIyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODkzNDMwICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwNzggZGl2aWRlICA2ODQ0OTc5MjAzMTEyMDY2MTY2NTgzNzY1ODU3MTcxNDI2ICAgNjg0NDk3OTIwMzExMjA2NjE2NjU4Mzc2NTg1NzE4OTY4MiAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzMyOSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDc5IGRpdmlkZSAgMjIyMDMzNzQzNTE0MTc5NjcyNDMyMzc4Mzk2MDIzMTY2MSAgIDIyMjAzMzc0MzUxNDE3OTY3MjQzMjM3ODM5NjAyMDg3NzggIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDMwNiAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDgwIGRpdmlkZSAgNjQ0NzQyNDcwMDAxOTc4MzkzMTU2OTk5Njk4OTU2MTM4MCAgIDY0NDc0MjQ3MDAwMTk3ODM5MzE1Njk5OTY5ODk1NzI0NTQgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ODI4MjQgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA4MSBkaXZpZGUgIDc1MTI4NTY3NjI2OTY2MDcxMTk4NDcwOTIxOTU1ODcxODAgICA3NTEyODU2NzYyNjk2NjA3MTE5ODQ3MDkyMTk1NTU3MzQ2ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5NzEgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA4MiBkaXZpZGUgIDczOTUyNjE5ODExOTM5NjAzOTkwODc4MTkwNzcyMzc0ODIgICA3Mzk1MjYxOTgxMTkzOTYwMzk5MDg3ODE5MDc3MjQyNDg3ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMjMyICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwODMgZGl2aWRlICAyMjUzNDQyNDY3NjgyNTg0MDM1NzkyNzI0ODg0Mzc2NzM1ICAgMjI1MzQ0MjQ2NzY4MjU4NDAzNTc5MjcyNDg4NDQwNzE3OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg2NDkwNCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDg0IGRpdmlkZSAgODE1MzEzODY4MDMwMDIxMzEzNTU3NzMzNjQ2NjE5MDk5NyAgIDgxNTMxMzg2ODAzMDAyMTMxMzU1NzczMzY0NjYyMjA2MDcgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NjM2ODMgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA4NSBkaXZpZGUgIDQ2Njg3MzEyNTIyNTQxNDgwNzQwNDEwMjI2ODE4MDEzOTAgICA0NjY4NzMxMjUyMjU0MTQ4MDc0MDQxMDIyNjgxNzc4MTAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ODggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA4NiBkaXZpZGUgIDYwNzg0MDQ1NTc5OTM2Njk2OTYwNDA0MjU1MDE4MTUwNTYgICA2MDc4NDA0NTU3OTkzNjY5Njk2MDQwNDI1NTAxNzk3NjEyICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4NzAgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA4NyBkaXZpZGUgIDIzMDYzNTIzNTk4NzQyNjE2MjMyMjMzNTY4NzgzMTYyNzggICAyMzA2MzUyMzU5ODc0MjYxNjIzMjIzMzU2ODc4MzM1NjEyICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTE2MTcxICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwODggZGl2aWRlICAzMjY0ODQyMTg2NjY4NDgwMzYyOTAwOTA5NTY0MDkxOTA4ICAgMzI2NDg0MjE4NjY2ODQ4MDM2MjkwMDkwOTU2NDA1ODY1OCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTg0ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwODkgZGl2aWRlICA2OTcxOTg1MDQ3Mjc5NjM2ODc4OTU3OTU5NjA4NjEyMjA0ICAgNjk3MTk4NTA0NzI3OTYzNjg3ODk1Nzk1OTYwODYxNTA4OCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTg2MyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDkwIGRpdmlkZSAgNTI2MjgxMDg4OTk1MjcyMTIzNTQ2NjQ0NTk3MzgxNjI1NyAgIDUyNjI4MTA4ODk5NTI3MjEyMzU0NjY0NDU5NzM3ODMwNzcgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMwNSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDkxIGRpdmlkZSAgNzk0Nzk0NDczMTAzNTI2NzE3ODU0ODM1NzA3MDA4MDI4OCAgIDc5NDc5NDQ3MzEwMzUyNjcxNzg1NDgzNTcwNzAwNjEzMzkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjM4NCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDkyIGRpdmlkZSAgNTA3MTgwODkwODM5NTM3NTEwODM4MzAzNTgwMDQ0MzIyOSAgIDUwNzE4MDg5MDgzOTUzNzUxMDgzODMwMzU4MDA0MTI0MjkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjA3MyAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDkzIGRpdmlkZSAgMjA0MzE0NjU0MjA4NDUwMzY1NTUxMTUwNzIwOTI2Mjk2OSAgIDIwNDMxNDY1NDIwODQ1MDM2NTU1MTE1MDcyMDkyNDkyNjMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcwOCAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDk0IGRpdmlkZSAgNDA5NzYzMjczNTM4NDUzNDE4MTY2MTk1OTczMTI2NDgwMiAgIDQwOTc2MzI3MzUzODQ1MzQxODE2NjE5NTk3MzEyMzQ0OTkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzM5NSAgSW5leGFjdCBSb3VuZGVkDQorZHFkaXY0MDk1IGRpdmlkZSAgMzA2MTQ3NzY0MjgzMTM4NzQ4OTcyOTQ2NDU4NzA0NDQzMCAgIDMwNjE0Nzc2NDI4MzEzODc0ODk3Mjk0NjQ1ODcwNTk0NTIgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTA5MzIgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA5NiBkaXZpZGUgIDM0Mjk4NTQ5NDEwMzk3NzYxNTk0OTg4MDI5MzYyNTI2MzggICAzNDI5ODU0OTQxMDM5Nzc2MTU5NDk4ODAyOTM2MjQ2NDE1ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4MTQgIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA5NyBkaXZpZGUgIDQ4NzQzMjQ5Nzk1Nzg1OTk3MDAwMjQxMzMyNzgyODQ1NDUgICA0ODc0MzI0OTc5NTc4NTk5NzAwMDI0MTMzMjc4MjYyMTMxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1OTggIEluZXhhY3QgUm91bmRlZA0KK2RxZGl2NDA5OCBkaXZpZGUgIDU3MDE2NTIzNjk2OTE4MzM1NDE0NTU5Nzg1MTU4MjA4ODIgICA1NzAxNjUyMzY5NjkxODMzNTQxNDU1OTc4NTE1ODM0ODU0ICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTc1NDk1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWRpdjQwOTkgZGl2aWRlICAyOTI4MjA1NzI4NDAyOTQ1MjY2OTUzMjU1NjMyMzQzMTEzICAgMjkyODIwNTcyODQwMjk0NTI2Njk1MzI1NTYzMjM3Mzc5NCAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTg5NTIyMyAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxZGl2OTk5OCBkaXZpZGUgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFkaXY5OTk5IGRpdmlkZSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFEaXZpZGVJbnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CmluZGV4IGMyOTAzNTEuLjNmZWM2ZGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcURpdmlkZUludC5kZWNUZXN0CkBAIC0xLDQ1MyArMSw0NTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFEaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNRdWFkIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0KLWRxZHZpMDAxIGRpdmlkZWludCAgMSAgICAgMSAgICAtPiAgMQotZHFkdmkwMDIgZGl2aWRlaW50ICAyICAgICAxICAgIC0+ICAyCi1kcWR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDAKLWRxZHZpMDA0IGRpdmlkZWludCAgMiAgICAgMiAgICAtPiAgMQotZHFkdmkwMDUgZGl2aWRlaW50ICAwICAgICAxICAgIC0+ICAwCi1kcWR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDAKLWRxZHZpMDA3IGRpdmlkZWludCAgMSAgICAgMyAgICAtPiAgMAotZHFkdmkwMDggZGl2aWRlaW50ICAyICAgICAzICAgIC0+ICAwCi1kcWR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDEKLQotZHFkdmkwMTAgZGl2aWRlaW50ICAyLjQgICAxICAgIC0+ICAyCi1kcWR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yCi1kcWR2aTAxMiBkaXZpZGVpbnQgIC0yLjQgIDEgICAgLT4gIC0yCi1kcWR2aTAxMyBkaXZpZGVpbnQgIC0yLjQgIC0xICAgLT4gIDIKLWRxZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMgotZHFkdmkwMTUgZGl2aWRlaW50ICAyLjQwMCAxICAgIC0+ICAyCi1kcWR2aTAxNiBkaXZpZGVpbnQgIDIuNCAgIDIgICAgLT4gIDEKLWRxZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQotZHFkdmkwMTggZGl2aWRlaW50ICAyLiAgICAyICAgIC0+ICAxCi1kcWR2aTAxOSBkaXZpZGVpbnQgIDIwICAgIDIwICAgLT4gIDEKLQotZHFkdmkwMjAgZGl2aWRlaW50ICAxODcgICAxODcgIC0+ICAxCi1kcWR2aTAyMSBkaXZpZGVpbnQgIDUgICAgIDIgICAgLT4gIDIKLWRxZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyCi1kcWR2aTAyMyBkaXZpZGVpbnQgIDUgICAgIDIuMDAwICAtPiAgMgotZHFkdmkwMjQgZGl2aWRlaW50ICA1ICAgICAwLjIwMCAgLT4gIDI1Ci1kcWR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUKLQotZHFkdmkwMzAgZGl2aWRlaW50ICAxICAgICAyICAgICAgLT4gIDAKLWRxZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwCi1kcWR2aTAzMiBkaXZpZGVpbnQgIDEgICAgIDggICAgICAtPiAgMAotZHFkdmkwMzMgZGl2aWRlaW50ICAxICAgICAxNiAgICAgLT4gIDAKLWRxZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwCi1kcWR2aTAzNSBkaXZpZGVpbnQgIDEgICAgIDY0ICAgICAtPiAgMAotZHFkdmkwNDAgZGl2aWRlaW50ICAxICAgIC0yICAgICAgLT4gLTAKLWRxZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wCi1kcWR2aTA0MiBkaXZpZGVpbnQgIDEgICAgLTggICAgICAtPiAtMAotZHFkdmkwNDMgZGl2aWRlaW50ICAxICAgIC0xNiAgICAgLT4gLTAKLWRxZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wCi1kcWR2aTA0NSBkaXZpZGVpbnQgIDEgICAgLTY0ICAgICAtPiAtMAotZHFkdmkwNTAgZGl2aWRlaW50IC0xICAgICAyICAgICAgLT4gLTAKLWRxZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wCi1kcWR2aTA1MiBkaXZpZGVpbnQgLTEgICAgIDggICAgICAtPiAtMAotZHFkdmkwNTMgZGl2aWRlaW50IC0xICAgICAxNiAgICAgLT4gLTAKLWRxZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wCi1kcWR2aTA1NSBkaXZpZGVpbnQgLTEgICAgIDY0ICAgICAtPiAtMAotZHFkdmkwNjAgZGl2aWRlaW50IC0xICAgIC0yICAgICAgLT4gIDAKLWRxZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwCi1kcWR2aTA2MiBkaXZpZGVpbnQgLTEgICAgLTggICAgICAtPiAgMAotZHFkdmkwNjMgZGl2aWRlaW50IC0xICAgIC0xNiAgICAgLT4gIDAKLWRxZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwCi1kcWR2aTA2NSBkaXZpZGVpbnQgLTEgICAgLTY0ICAgICAtPiAgMAotCi0tLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbgotZHFkdmkxNjAgZGl2aWRlaW50ICAxICAgICAxICAgICAgICAgLT4gIDEKLWRxZHZpMTYxIGRpdmlkZWludCAgMSAgICAgMTAgICAgICAgIC0+ICAwCi1kcWR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMAotZHFkdmkxNjMgZGl2aWRlaW50ICAxICAgICAxMDAwICAgICAgLT4gIDAKLWRxZHZpMTY0IGRpdmlkZWludCAgMSAgICAgMTAwMDAgICAgIC0+ICAwCi1kcWR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMAotZHFkdmkxNjYgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwICAgLT4gIDAKLWRxZHZpMTY3IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMDAgIC0+ICAwCi1kcWR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMAotZHFkdmkxNzAgZGl2aWRlaW50ICAxICAgIC0xICAgICAgICAgLT4gLTEKLWRxZHZpMTcxIGRpdmlkZWludCAgMSAgICAtMTAgICAgICAgIC0+IC0wCi1kcWR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMAotZHFkdmkxNzMgZGl2aWRlaW50ICAxICAgIC0xMDAwICAgICAgLT4gLTAKLWRxZHZpMTc0IGRpdmlkZWludCAgMSAgICAtMTAwMDAgICAgIC0+IC0wCi1kcWR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMAotZHFkdmkxNzYgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwICAgLT4gLTAKLWRxZHZpMTc3IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMDAgIC0+IC0wCi1kcWR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMAotZHFkdmkxODAgZGl2aWRlaW50IC0xICAgICAxICAgICAgICAgLT4gLTEKLWRxZHZpMTgxIGRpdmlkZWludCAtMSAgICAgMTAgICAgICAgIC0+IC0wCi1kcWR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMAotZHFkdmkxODMgZGl2aWRlaW50IC0xICAgICAxMDAwICAgICAgLT4gLTAKLWRxZHZpMTg0IGRpdmlkZWludCAtMSAgICAgMTAwMDAgICAgIC0+IC0wCi1kcWR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMAotZHFkdmkxODYgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwICAgLT4gLTAKLWRxZHZpMTg3IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMDAgIC0+IC0wCi1kcWR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMAotZHFkdmkxOTAgZGl2aWRlaW50IC0xICAgIC0xICAgICAgICAgLT4gIDEKLWRxZHZpMTkxIGRpdmlkZWludCAtMSAgICAtMTAgICAgICAgIC0+ICAwCi1kcWR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMAotZHFkdmkxOTMgZGl2aWRlaW50IC0xICAgIC0xMDAwICAgICAgLT4gIDAKLWRxZHZpMTk0IGRpdmlkZWludCAtMSAgICAtMTAwMDAgICAgIC0+ICAwCi1kcWR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMAotZHFkdmkxOTYgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwICAgLT4gIDAKLWRxZHZpMTk3IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMDAgIC0+ICAwCi1kcWR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMAotCi0tLSBzb21lIGxvbmcgb3BlcmFuZCAoYXQgcD05KSBjYXNlcwotZHFkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkKLWRxZHZpMDcxIGRpdmlkZWludCAgOTk5OTk5OTk5LjQgICAxICAtPiAgOTk5OTk5OTk5Ci1kcWR2aTA3MiBkaXZpZGVpbnQgIDk5OTk5OTk5OS41ICAgMSAgLT4gIDk5OTk5OTk5OQotZHFkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkKLWRxZHZpMDc0IGRpdmlkZWludCAgOTk5OTk5OTk5Ljk5OSAxICAtPiAgOTk5OTk5OTk5Ci0KLWRxZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwCi1kcWR2aTA5MSBkaXZpZGVpbnQgIC4wICAgICAgICAgICAgMSAgICAtPiAgMAotZHFkdmkwOTIgZGl2aWRlaW50ICAwLjAwICAgICAgICAgIDEgICAgLT4gIDAKLWRxZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwCi1kcWR2aTA5NCBkaXZpZGVpbnQgIDAuMDAwMEUtNTAgICAgMSAgICAtPiAgMAotCi1kcWR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCi1kcWR2aTEwMSBkaXZpZGVpbnQgIDEgIDIgICAtPiAwCi1kcWR2aTEwMiBkaXZpZGVpbnQgIDEgIDMgICAtPiAwCi1kcWR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwCi1kcWR2aTEwNCBkaXZpZGVpbnQgIDEgIDUgICAtPiAwCi1kcWR2aTEwNSBkaXZpZGVpbnQgIDEgIDYgICAtPiAwCi1kcWR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwCi1kcWR2aTEwNyBkaXZpZGVpbnQgIDEgIDggICAtPiAwCi1kcWR2aTEwOCBkaXZpZGVpbnQgIDEgIDkgICAtPiAwCi1kcWR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwCi1kcWR2aTExMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxCi1kcWR2aTExMSBkaXZpZGVpbnQgIDIgIDEgICAtPiAyCi1kcWR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzCi1kcWR2aTExMyBkaXZpZGVpbnQgIDQgIDEgICAtPiA0Ci1kcWR2aTExNCBkaXZpZGVpbnQgIDUgIDEgICAtPiA1Ci1kcWR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2Ci1kcWR2aTExNiBkaXZpZGVpbnQgIDcgIDEgICAtPiA3Ci1kcWR2aTExNyBkaXZpZGVpbnQgIDggIDEgICAtPiA4Ci1kcWR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5Ci1kcWR2aTExOSBkaXZpZGVpbnQgIDEwIDEgICAtPiAxMAotCi0tLSBmcm9tIERpYWdCaWdEZWNpbWFsCi1kcWR2aTEzMSBkaXZpZGVpbnQgIDEwMS4zICAgMSAgICAgLT4gIDEwMQotZHFkdmkxMzIgZGl2aWRlaW50ICAxMDEuMCAgIDEgICAgIC0+ICAxMDEKLWRxZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMKLWRxZHZpMTM0IGRpdmlkZWludCAgMTAxLjAgICAzICAgICAtPiAgMzMKLWRxZHZpMTM1IGRpdmlkZWludCAgMi40ICAgICAxICAgICAtPiAgMgotZHFkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyCi1kcWR2aTEzNyBkaXZpZGVpbnQgIDE4ICAgICAgMTggICAgLT4gIDEKLWRxZHZpMTM4IGRpdmlkZWludCAgMTEyMCAgICAxMDAwICAtPiAgMQotZHFkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxCi1kcWR2aTE0MCBkaXZpZGVpbnQgIDIuNDAwICAgMiAgICAgLT4gIDEKLWRxZHZpMTQxIGRpdmlkZWludCAgMC41ICAgICAyLjAwMCAtPiAgMAotZHFkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxCi1kcWR2aTE0MyBkaXZpZGVpbnQgIDUgICAgICAgMiAgICAgLT4gIDIKLWRxZHZpMTQ0IGRpdmlkZWludCAgMCAgICAgICAyICAgICAtPiAgMAotZHFkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwCi0KLS0tIE90aGVycwotZHFkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5Ci1kcWR2aTE1MSBkaXZpZGVpbnQgIDEyMzQ1ICA0Ljk5ICAgLT4gIDI0NzMKLWRxZHZpMTUyIGRpdmlkZWludCAgMTIzNDUgIDQuOSAgICAtPiAgMjUxOQotZHFkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5Ci1kcWR2aTE1NCBkaXZpZGVpbnQgIDEyMzQ1ICA1LjEgICAgLT4gIDI0MjAKLWRxZHZpMTU1IGRpdmlkZWludCAgMTIzNDUgIDUuMDEgICAtPiAgMjQ2NAotZHFkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4Ci1kcWR2aTE1NyBkaXZpZGVpbnQgICAgMTAxICA3LjYgICAgLT4gIDEzCi0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDAKLWRxZHZpMjAxIGRpdmlkZWludCAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcWR2aTIwMiBkaXZpZGVpbnQgIDAuMEU1ICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxZHZpMjA0IGRpdmlkZWludCAgMC4wMDAxIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTIwNSBkaXZpZGVpbnQgIDAuMDEgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpMjA3IGRpdmlkZWludCAgMSAgICAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTIwOCBkaXZpZGVpbnQgIDEgICAgICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpMjEwIGRpdmlkZWludCAxRSsxMDAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTIxMSBkaXZpZGVpbnQgMUUrMzgwICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTUgZGl2aWRlaW50ICAtMC4wMSAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTYgZGl2aWRlaW50ICAtMC4xICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTggZGl2aWRlaW50ICAtMSAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMTkgZGl2aWRlaW50IC0xMCAgICAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmkyMjEgZGl2aWRlaW50IC0xRSszODAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi0tLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cKLWRxZHZpMjcwIGRpdmlkZWludCAxIDFlMzg0ICAgICAgICAgIC0+IDAKLWRxZHZpMjcxIGRpdmlkZWludCAxIDAuOWUzODQgICAgICAgIC0+IDAKLWRxZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDAKLWRxZHZpMjczIGRpdmlkZWludCAxIDAuOTk5OTk5OTk5OTk5OTk5OWUzODQgICAgICAgLT4gMAotZHFkdmkyNzQgZGl2aWRlaW50IDllMzg0ICAgIDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcWR2aTI3NiBkaXZpZGVpbnQgOS45OWUzODQgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFkdmkyNzcgZGl2aWRlaW50IDkuOTk5OTk5OTk5OTk5OTk5ZTM4NCAxIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi0KLWRxZHZpMjgwIGRpdmlkZWludCAwLjEgOWUtMzgzICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcWR2aTI4MSBkaXZpZGVpbnQgMC4xIDk5ZS0zODMgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxZHZpMjgzIGRpdmlkZWludCAwLjEgOWUtMzgyICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcWR2aTI4NCBkaXZpZGVpbnQgMC4xIDk5ZS0zODIgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotCi0tLSBHRCBlZGdlIGNhc2VzOiBsaHMgc21hbGxlciB0aGFuIHJocyBidXQgbW9yZSBkaWdpdHMKLWRxZHZpMzAxICBkaXZpZGVpbnQgIDAuOSAgICAgIDIgICAgICAtPiAgMAotZHFkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwCi1kcWR2aTMwMyAgZGl2aWRlaW50ICAwLjkgICAgICAyLjEgICAgLT4gIDAKLWRxZHZpMzA0ICBkaXZpZGVpbnQgIDAuOSAgICAgIDIuMDAgICAtPiAgMAotZHFkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwCi1kcWR2aTMwNiAgZGl2aWRlaW50ICAwLjEyICAgICAxICAgICAgLT4gIDAKLWRxZHZpMzA3ICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMCAgICAtPiAgMAotZHFkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwCi1kcWR2aTMwOSAgZGl2aWRlaW50ICAwLjEyICAgICAxLjAgICAgLT4gIDAKLWRxZHZpMzEwICBkaXZpZGVpbnQgIDAuMTIgICAgIDEuMDAgICAtPiAgMAotZHFkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwCi1kcWR2aTMxMiAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAgICAgLT4gIDAKLWRxZHZpMzEzICBkaXZpZGVpbnQgIDAuMTIgICAgIDIuMSAgICAtPiAgMAotZHFkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwCi1kcWR2aTMxNSAgZGl2aWRlaW50ICAwLjEyICAgICAyLjAxICAgLT4gIDAKLQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCi1kcWR2aTMzMCAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAxMCAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1Ci1kcWR2aTMzMSAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMSAgICAtPiAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NgotZHFkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcWR2aTMzMyAgZGl2aWRlaW50ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLQotLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdCi1kcWR2aTEwNTEgZGl2aWRlaW50ICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxZHZpMTA1MiBkaXZpZGVpbnQgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcWR2aTEwNTQgZGl2aWRlaW50IC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxZHZpMTA1NSBkaXZpZGVpbnQgIDFlLTI3NyAgMWUrMzExIC0+ICAwCi1kcWR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMAotZHFkdmkxMDU3IGRpdmlkZWludCAtMWUtMjc3ICAxZSszMTEgLT4gLTAKLWRxZHZpMTA1OCBkaXZpZGVpbnQgLTFlLTI3NyAtMWUrMzExIC0+ICAwCi0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQotZHFkdmkxMDYwIGRpdmlkZWludCAxZS0yOTEgMWUrMTAxIC0+IDAKLWRxZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwCi1kcWR2aTEwNjIgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDMgLT4gMAotZHFkdmkxMDYzIGRpdmlkZWludCAxZS0yOTEgMWUrMTA0IC0+IDAKLWRxZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwCi1kcWR2aTEwNjUgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDYgLT4gMAotZHFkdmkxMDY2IGRpdmlkZWludCAxZS0yOTEgMWUrMTA3IC0+IDAKLWRxZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwCi1kcWR2aTEwNjggZGl2aWRlaW50IDFlLTI5MSAxZSsxMDkgLT4gMAotZHFkdmkxMDY5IGRpdmlkZWludCAxZS0yOTEgMWUrMTEwIC0+IDAKLQotZHFkdmkxMTAxIGRpdmlkZWludCAgMS4wMDAwRS0zOTQgIDEgICAgIC0+IDAKLWRxZHZpMTEwMiBkaXZpZGVpbnQgIDEuMDAwRS0zOTQgICAxZSsxICAtPiAwCi1kcWR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMAotCi1kcWR2aTExMTggZGl2aWRlaW50ICAxRS0zOTQgICAgICAgMWUrNCAgLT4gMAotZHFkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wCi1kcWR2aTExMjAgZGl2aWRlaW50ICA1RS0zOTQgICAgICAgMWUrNSAgLT4gMAotCi1kcWR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTAKLWRxZHZpMTEzMCBkaXZpZGVpbnQgIDMuMEUtMzk0ICAgIC0xZSs1ICAtPiAtMAotCi1kcWR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDAKLWRxZHZpMTEzMiBkaXZpZGVpbnQgIDEuMEUtMTk5ICAgICAxZSsxOTkgLT4gMAotZHFkdmkxMTMzIGRpdmlkZWludCAgMS4wRS0xOTkgICAgIDFlKzE5OCAtPiAwCi1kcWR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDAKLWRxZHZpMTEzNSBkaXZpZGVpbnQgIDQuMEUtMTk5ICAgICA0ZSsxOTggLT4gMAotCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzCi1kcWR2aTQwMSBkaXZpZGVpbnQgMTIzNDU2NzgwMDAgMTAwIC0+IDEyMzQ1Njc4MAotZHFkdmk0MDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgICAtPiAwCi1kcWR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MAotZHFkdmk0MDQgZGl2aWRlaW50IDEgMTIzNDU2NzgwMCAgICAtPiAwCi1kcWR2aTQwNSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMTAgIC0+IDEyMzQ1Njc4OQotZHFkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwCi1kcWR2aTQwNyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMTAgIC0+IDEyMzQ1Njc4OQotZHFkdmk0MDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgICAtPiAwCi1kcWR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQotZHFkdmk0MTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgICAtPiAwCi1kcWR2aTQxMSBkaXZpZGVpbnQgMTIzNDU2Nzg5NiAgMTAgIC0+IDEyMzQ1Njc4OQotZHFkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwCi1kcWR2aTQxMyBkaXZpZGVpbnQgMTIzNDU2Nzg5NDggMTAwIC0+IDEyMzQ1Njc4OQotZHFkdmk0MTQgZGl2aWRlaW50IDEyMzQ1Njc4OTQ5IDEwMCAtPiAxMjM0NTY3ODkKLWRxZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5Ci1kcWR2aTQxNiBkaXZpZGVpbnQgMTIzNDU2Nzg5NTEgMTAwIC0+IDEyMzQ1Njc4OQotZHFkdmk0MTcgZGl2aWRlaW50IDEyMzQ1Njc4OTk5IDEwMCAtPiAxMjM0NTY3ODkKLWRxZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwCi1kcWR2aTQ0MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAtPiAwCi1kcWR2aTQ0MyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMSAtPiAxMjM0NTY3ODAwCi1kcWR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwCi1kcWR2aTQ0NSBkaXZpZGVpbnQgMTIzNDU2Nzg5MCAgMSAtPiAxMjM0NTY3ODkwCi1kcWR2aTQ0NiBkaXZpZGVpbnQgMSAxMjM0NTY3ODkwICAtPiAwCi1kcWR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxCi1kcWR2aTQ0OCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAtPiAwCi1kcWR2aTQ0OSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMSAtPiAxMjM0NTY3ODkwMQotZHFkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMAotZHFkdmk0NTEgZGl2aWRlaW50IDEyMzQ1Njc4OTYgIDEgLT4gMTIzNDU2Nzg5NgotZHFkdmk0NTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgLT4gMAotCi0tLSBtb3JlIHplcm9zLCBldGMuCi1kcWR2aTUzMSBkaXZpZGVpbnQgNS4wMCAxRS0zICAgIC0+IDUwMDAKLWRxZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFkdmk1MzMgZGl2aWRlaW50IDAwLjAwIDBFLTMgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcWR2aTUzNCBkaXZpZGVpbnQgIDAgICAgLTAgICAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFkdmk1MzYgZGl2aWRlaW50IC0wICAgIC0wICAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi0KLWRxZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTAKLWRxZHZpNTQyIGRpdmlkZWludCAtMCAgICAtMSAgICAgLT4gIDAKLWRxZHZpNTQzIGRpdmlkZWludCAgMCAgICAgMSAgICAgLT4gIDAKLWRxZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTAKLWRxZHZpNTQ1IGRpdmlkZWludCAtMSAgICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTQ2IGRpdmlkZWludCAtMSAgICAtMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTQ4IGRpdmlkZWludCAgMSAgICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLQotZHFkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMAotZHFkdmk1NTIgZGl2aWRlaW50IC0wLjAgIC0xICAgICAtPiAgMAotZHFkdmk1NTMgZGl2aWRlaW50ICAwLjAgICAxICAgICAtPiAgMAotZHFkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMAotZHFkdmk1NTUgZGl2aWRlaW50IC0xLjAgICAwICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmk1NTYgZGl2aWRlaW50IC0xLjAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFkdmk1NTggZGl2aWRlaW50ICAxLjAgIC0wICAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotCi1kcWR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wCi1kcWR2aTU2MiBkaXZpZGVpbnQgLTAgICAgLTEuMCAgIC0+ICAwCi1kcWR2aTU2MyBkaXZpZGVpbnQgIDAgICAgIDEuMCAgIC0+ICAwCi1kcWR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wCi1kcWR2aTU2NSBkaXZpZGVpbnQgLTEgICAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTU2NiBkaXZpZGVpbnQgLTEgICAgLTAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi1kcWR2aTU2OCBkaXZpZGVpbnQgIDEgICAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvCi0KLWRxZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTAKLWRxZHZpNTcyIGRpdmlkZWludCAtMC4wICAtMS4wICAgLT4gIDAKLWRxZHZpNTczIGRpdmlkZWludCAgMC4wICAgMS4wICAgLT4gIDAKLWRxZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTAKLWRxZHZpNTc1IGRpdmlkZWludCAtMS4wICAgMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTc2IGRpdmlkZWludCAtMS4wICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWRxZHZpNTc4IGRpdmlkZWludCAgMS4wICAtMC4wICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLQotLS0gU3BlY2lhbHMKLWRxZHZpNTgwIGRpdmlkZWludCAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk1ODEgZGl2aWRlaW50ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRxZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1kcWR2aTU4MyBkaXZpZGVpbnQgIEluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotZHFkdmk1ODQgZGl2aWRlaW50ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKLWRxZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kcWR2aTU4NiBkaXZpZGVpbnQgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQotZHFkdmk1ODcgZGl2aWRlaW50ICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wCi1kcWR2aTU4OSBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZHZpNTkwIGRpdmlkZWludCAtMSAgICAgSW5mICAgLT4gLTAKLWRxZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTAKLWRxZHZpNTkyIGRpdmlkZWludCAgMCAgICAgSW5mICAgLT4gIDAKLWRxZHZpNTkzIGRpdmlkZWludCAgMSAgICAgSW5mICAgLT4gIDAKLWRxZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDAKLWRxZHZpNTk1IGRpdmlkZWludCAgSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcWR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZHZpNjAxIGRpdmlkZWludCAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1kcWR2aTYwMiBkaXZpZGVpbnQgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZHFkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkKLWRxZHZpNjA0IGRpdmlkZWludCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1kcWR2aTYwNSBkaXZpZGVpbnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRxZHZpNjA3IGRpdmlkZWludCAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2MDggZGl2aWRlaW50IC0xMDAwICBJbmYgICAtPiAtMAotZHFkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTYxMCBkaXZpZGVpbnQgLTEgICAgLUluZiAgIC0+ICAwCi1kcWR2aTYxMSBkaXZpZGVpbnQgLTAgICAgLUluZiAgIC0+ICAwCi1kcWR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wCi1kcWR2aTYxMyBkaXZpZGVpbnQgIDEgICAgLUluZiAgIC0+IC0wCi1kcWR2aTYxNCBkaXZpZGVpbnQgIDEwMDAgLUluZiAgIC0+IC0wCi1kcWR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFkdmk2MjEgZGl2aWRlaW50ICBOYU4gLUluZiAgICAtPiAgTmFOCi1kcWR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRxZHZpNjIzIGRpdmlkZWludCAgTmFOIC0xICAgICAgLT4gIE5hTgotZHFkdmk2MjQgZGl2aWRlaW50ICBOYU4gLTAgICAgICAtPiAgTmFOCi1kcWR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KLWRxZHZpNjI2IGRpdmlkZWludCAgTmFOICAxICAgICAgLT4gIE5hTgotZHFkdmk2MjcgZGl2aWRlaW50ICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kcWR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRxZHZpNjI5IGRpdmlkZWludCAgTmFOICBOYU4gICAgLT4gIE5hTgotZHFkdmk2MzAgZGl2aWRlaW50IC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kcWR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRxZHZpNjMyIGRpdmlkZWludCAtMSAgICBOYU4gICAgLT4gIE5hTgotZHFkdmk2MzMgZGl2aWRlaW50IC0wICAgIE5hTiAgICAtPiAgTmFOCi1kcWR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRxZHZpNjM1IGRpdmlkZWludCAgMSAgICBOYU4gICAgLT4gIE5hTgotZHFkdmk2MzYgZGl2aWRlaW50ICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kcWR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotZHFkdmk2NDEgZGl2aWRlaW50ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDMgZGl2aWRlaW50ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDQgZGl2aWRlaW50ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDYgZGl2aWRlaW50ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDcgZGl2aWRlaW50ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NDkgZGl2aWRlaW50ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTAgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTIgZGl2aWRlaW50IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTMgZGl2aWRlaW50IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTUgZGl2aWRlaW50ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTYgZGl2aWRlaW50ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTggZGl2aWRlaW50ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NTkgZGl2aWRlaW50ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcWR2aTY2MSBkaXZpZGVpbnQgIE5hTjkgLUluZiAgIC0+ICBOYU45Ci1kcWR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44Ci1kcWR2aTY2MyBkaXZpZGVpbnQgIE5hTjcgIEluZiAgIC0+ICBOYU43Ci1kcWR2aTY2NCBkaXZpZGVpbnQgLU5hTjYgIE5hTjUgIC0+IC1OYU42Ci1kcWR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40Ci1kcWR2aTY2NiBkaXZpZGVpbnQgLTEwMDAgIE5hTjMgIC0+ICBOYU4zCi1kcWR2aTY2NyBkaXZpZGVpbnQgIEluZiAgLU5hTjIgIC0+IC1OYU4yCi0KLWRxZHZpNjcxIGRpdmlkZWludCAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTY3MiBkaXZpZGVpbnQgIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRxZHZpNjc0IGRpdmlkZWludCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTY3NSBkaXZpZGVpbnQgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRxZHZpNjc3IGRpdmlkZWludCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTY3OCBkaXZpZGVpbnQgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gR3l1cmlzIGV4YW1wbGUKLWRxZHZpNzAwIGRpdmlkZWludCA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwCi0KLS0tIE51bGwgdGVzdHMKLWRxZHZpOTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWR2aTkwMSBkaXZpZGVpbnQgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFEaXZpZGVJbnQuZGVjVGVzdCAtLSBkZWNRdWFkIGludGVnZXIgZGl2aXNpb24gICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCisNCitkcWR2aTAwMSBkaXZpZGVpbnQgIDEgICAgIDEgICAgLT4gIDENCitkcWR2aTAwMiBkaXZpZGVpbnQgIDIgICAgIDEgICAgLT4gIDINCitkcWR2aTAwMyBkaXZpZGVpbnQgIDEgICAgIDIgICAgLT4gIDANCitkcWR2aTAwNCBkaXZpZGVpbnQgIDIgICAgIDIgICAgLT4gIDENCitkcWR2aTAwNSBkaXZpZGVpbnQgIDAgICAgIDEgICAgLT4gIDANCitkcWR2aTAwNiBkaXZpZGVpbnQgIDAgICAgIDIgICAgLT4gIDANCitkcWR2aTAwNyBkaXZpZGVpbnQgIDEgICAgIDMgICAgLT4gIDANCitkcWR2aTAwOCBkaXZpZGVpbnQgIDIgICAgIDMgICAgLT4gIDANCitkcWR2aTAwOSBkaXZpZGVpbnQgIDMgICAgIDMgICAgLT4gIDENCisNCitkcWR2aTAxMCBkaXZpZGVpbnQgIDIuNCAgIDEgICAgLT4gIDINCitkcWR2aTAxMSBkaXZpZGVpbnQgIDIuNCAgIC0xICAgLT4gIC0yDQorZHFkdmkwMTIgZGl2aWRlaW50ICAtMi40ICAxICAgIC0+ICAtMg0KK2RxZHZpMDEzIGRpdmlkZWludCAgLTIuNCAgLTEgICAtPiAgMg0KK2RxZHZpMDE0IGRpdmlkZWludCAgMi40MCAgMSAgICAtPiAgMg0KK2RxZHZpMDE1IGRpdmlkZWludCAgMi40MDAgMSAgICAtPiAgMg0KK2RxZHZpMDE2IGRpdmlkZWludCAgMi40ICAgMiAgICAtPiAgMQ0KK2RxZHZpMDE3IGRpdmlkZWludCAgMi40MDAgMiAgICAtPiAgMQ0KK2RxZHZpMDE4IGRpdmlkZWludCAgMi4gICAgMiAgICAtPiAgMQ0KK2RxZHZpMDE5IGRpdmlkZWludCAgMjAgICAgMjAgICAtPiAgMQ0KKw0KK2RxZHZpMDIwIGRpdmlkZWludCAgMTg3ICAgMTg3ICAtPiAgMQ0KK2RxZHZpMDIxIGRpdmlkZWludCAgNSAgICAgMiAgICAtPiAgMg0KK2RxZHZpMDIyIGRpdmlkZWludCAgNSAgICAgMi4wICAgIC0+ICAyDQorZHFkdmkwMjMgZGl2aWRlaW50ICA1ICAgICAyLjAwMCAgLT4gIDINCitkcWR2aTAyNCBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUNCitkcWR2aTAyNSBkaXZpZGVpbnQgIDUgICAgIDAuMjAwICAtPiAgMjUNCisNCitkcWR2aTAzMCBkaXZpZGVpbnQgIDEgICAgIDIgICAgICAtPiAgMA0KK2RxZHZpMDMxIGRpdmlkZWludCAgMSAgICAgNCAgICAgIC0+ICAwDQorZHFkdmkwMzIgZGl2aWRlaW50ICAxICAgICA4ICAgICAgLT4gIDANCitkcWR2aTAzMyBkaXZpZGVpbnQgIDEgICAgIDE2ICAgICAtPiAgMA0KK2RxZHZpMDM0IGRpdmlkZWludCAgMSAgICAgMzIgICAgIC0+ICAwDQorZHFkdmkwMzUgZGl2aWRlaW50ICAxICAgICA2NCAgICAgLT4gIDANCitkcWR2aTA0MCBkaXZpZGVpbnQgIDEgICAgLTIgICAgICAtPiAtMA0KK2RxZHZpMDQxIGRpdmlkZWludCAgMSAgICAtNCAgICAgIC0+IC0wDQorZHFkdmkwNDIgZGl2aWRlaW50ICAxICAgIC04ICAgICAgLT4gLTANCitkcWR2aTA0MyBkaXZpZGVpbnQgIDEgICAgLTE2ICAgICAtPiAtMA0KK2RxZHZpMDQ0IGRpdmlkZWludCAgMSAgICAtMzIgICAgIC0+IC0wDQorZHFkdmkwNDUgZGl2aWRlaW50ICAxICAgIC02NCAgICAgLT4gLTANCitkcWR2aTA1MCBkaXZpZGVpbnQgLTEgICAgIDIgICAgICAtPiAtMA0KK2RxZHZpMDUxIGRpdmlkZWludCAtMSAgICAgNCAgICAgIC0+IC0wDQorZHFkdmkwNTIgZGl2aWRlaW50IC0xICAgICA4ICAgICAgLT4gLTANCitkcWR2aTA1MyBkaXZpZGVpbnQgLTEgICAgIDE2ICAgICAtPiAtMA0KK2RxZHZpMDU0IGRpdmlkZWludCAtMSAgICAgMzIgICAgIC0+IC0wDQorZHFkdmkwNTUgZGl2aWRlaW50IC0xICAgICA2NCAgICAgLT4gLTANCitkcWR2aTA2MCBkaXZpZGVpbnQgLTEgICAgLTIgICAgICAtPiAgMA0KK2RxZHZpMDYxIGRpdmlkZWludCAtMSAgICAtNCAgICAgIC0+ICAwDQorZHFkdmkwNjIgZGl2aWRlaW50IC0xICAgIC04ICAgICAgLT4gIDANCitkcWR2aTA2MyBkaXZpZGVpbnQgLTEgICAgLTE2ICAgICAtPiAgMA0KK2RxZHZpMDY0IGRpdmlkZWludCAtMSAgICAtMzIgICAgIC0+ICAwDQorZHFkdmkwNjUgZGl2aWRlaW50IC0xICAgIC02NCAgICAgLT4gIDANCisNCistLSBzaW1pbGFyIHdpdGggcG93ZXJzIG9mIHRlbg0KK2RxZHZpMTYwIGRpdmlkZWludCAgMSAgICAgMSAgICAgICAgIC0+ICAxDQorZHFkdmkxNjEgZGl2aWRlaW50ICAxICAgICAxMCAgICAgICAgLT4gIDANCitkcWR2aTE2MiBkaXZpZGVpbnQgIDEgICAgIDEwMCAgICAgICAtPiAgMA0KK2RxZHZpMTYzIGRpdmlkZWludCAgMSAgICAgMTAwMCAgICAgIC0+ICAwDQorZHFkdmkxNjQgZGl2aWRlaW50ICAxICAgICAxMDAwMCAgICAgLT4gIDANCitkcWR2aTE2NSBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMCAgICAtPiAgMA0KK2RxZHZpMTY2IGRpdmlkZWludCAgMSAgICAgMTAwMDAwMCAgIC0+ICAwDQorZHFkdmkxNjcgZGl2aWRlaW50ICAxICAgICAxMDAwMDAwMCAgLT4gIDANCitkcWR2aTE2OCBkaXZpZGVpbnQgIDEgICAgIDEwMDAwMDAwMCAtPiAgMA0KK2RxZHZpMTcwIGRpdmlkZWludCAgMSAgICAtMSAgICAgICAgIC0+IC0xDQorZHFkdmkxNzEgZGl2aWRlaW50ICAxICAgIC0xMCAgICAgICAgLT4gLTANCitkcWR2aTE3MiBkaXZpZGVpbnQgIDEgICAgLTEwMCAgICAgICAtPiAtMA0KK2RxZHZpMTczIGRpdmlkZWludCAgMSAgICAtMTAwMCAgICAgIC0+IC0wDQorZHFkdmkxNzQgZGl2aWRlaW50ICAxICAgIC0xMDAwMCAgICAgLT4gLTANCitkcWR2aTE3NSBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMCAgICAtPiAtMA0KK2RxZHZpMTc2IGRpdmlkZWludCAgMSAgICAtMTAwMDAwMCAgIC0+IC0wDQorZHFkdmkxNzcgZGl2aWRlaW50ICAxICAgIC0xMDAwMDAwMCAgLT4gLTANCitkcWR2aTE3OCBkaXZpZGVpbnQgIDEgICAgLTEwMDAwMDAwMCAtPiAtMA0KK2RxZHZpMTgwIGRpdmlkZWludCAtMSAgICAgMSAgICAgICAgIC0+IC0xDQorZHFkdmkxODEgZGl2aWRlaW50IC0xICAgICAxMCAgICAgICAgLT4gLTANCitkcWR2aTE4MiBkaXZpZGVpbnQgLTEgICAgIDEwMCAgICAgICAtPiAtMA0KK2RxZHZpMTgzIGRpdmlkZWludCAtMSAgICAgMTAwMCAgICAgIC0+IC0wDQorZHFkdmkxODQgZGl2aWRlaW50IC0xICAgICAxMDAwMCAgICAgLT4gLTANCitkcWR2aTE4NSBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMCAgICAtPiAtMA0KK2RxZHZpMTg2IGRpdmlkZWludCAtMSAgICAgMTAwMDAwMCAgIC0+IC0wDQorZHFkdmkxODcgZGl2aWRlaW50IC0xICAgICAxMDAwMDAwMCAgLT4gLTANCitkcWR2aTE4OCBkaXZpZGVpbnQgLTEgICAgIDEwMDAwMDAwMCAtPiAtMA0KK2RxZHZpMTkwIGRpdmlkZWludCAtMSAgICAtMSAgICAgICAgIC0+ICAxDQorZHFkdmkxOTEgZGl2aWRlaW50IC0xICAgIC0xMCAgICAgICAgLT4gIDANCitkcWR2aTE5MiBkaXZpZGVpbnQgLTEgICAgLTEwMCAgICAgICAtPiAgMA0KK2RxZHZpMTkzIGRpdmlkZWludCAtMSAgICAtMTAwMCAgICAgIC0+ICAwDQorZHFkdmkxOTQgZGl2aWRlaW50IC0xICAgIC0xMDAwMCAgICAgLT4gIDANCitkcWR2aTE5NSBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMCAgICAtPiAgMA0KK2RxZHZpMTk2IGRpdmlkZWludCAtMSAgICAtMTAwMDAwMCAgIC0+ICAwDQorZHFkdmkxOTcgZGl2aWRlaW50IC0xICAgIC0xMDAwMDAwMCAgLT4gIDANCitkcWR2aTE5OCBkaXZpZGVpbnQgLTEgICAgLTEwMDAwMDAwMCAtPiAgMA0KKw0KKy0tIHNvbWUgbG9uZyBvcGVyYW5kIChhdCBwPTkpIGNhc2VzDQorZHFkdmkwNzAgZGl2aWRlaW50ICA5OTk5OTk5OTkgICAgIDEgIC0+ICA5OTk5OTk5OTkNCitkcWR2aTA3MSBkaXZpZGVpbnQgIDk5OTk5OTk5OS40ICAgMSAgLT4gIDk5OTk5OTk5OQ0KK2RxZHZpMDcyIGRpdmlkZWludCAgOTk5OTk5OTk5LjUgICAxICAtPiAgOTk5OTk5OTk5DQorZHFkdmkwNzMgZGl2aWRlaW50ICA5OTk5OTk5OTkuOSAgIDEgIC0+ICA5OTk5OTk5OTkNCitkcWR2aTA3NCBkaXZpZGVpbnQgIDk5OTk5OTk5OS45OTkgMSAgLT4gIDk5OTk5OTk5OQ0KKw0KK2RxZHZpMDkwIGRpdmlkZWludCAgMC4gICAgICAgICAgICAxICAgIC0+ICAwDQorZHFkdmkwOTEgZGl2aWRlaW50ICAuMCAgICAgICAgICAgIDEgICAgLT4gIDANCitkcWR2aTA5MiBkaXZpZGVpbnQgIDAuMDAgICAgICAgICAgMSAgICAtPiAgMA0KK2RxZHZpMDkzIGRpdmlkZWludCAgMC4wMEUrOSAgICAgICAxICAgIC0+ICAwDQorZHFkdmkwOTQgZGl2aWRlaW50ICAwLjAwMDBFLTUwICAgIDEgICAgLT4gIDANCisNCitkcWR2aTEwMCBkaXZpZGVpbnQgIDEgIDEgICAtPiAxDQorZHFkdmkxMDEgZGl2aWRlaW50ICAxICAyICAgLT4gMA0KK2RxZHZpMTAyIGRpdmlkZWludCAgMSAgMyAgIC0+IDANCitkcWR2aTEwMyBkaXZpZGVpbnQgIDEgIDQgICAtPiAwDQorZHFkdmkxMDQgZGl2aWRlaW50ICAxICA1ICAgLT4gMA0KK2RxZHZpMTA1IGRpdmlkZWludCAgMSAgNiAgIC0+IDANCitkcWR2aTEwNiBkaXZpZGVpbnQgIDEgIDcgICAtPiAwDQorZHFkdmkxMDcgZGl2aWRlaW50ICAxICA4ICAgLT4gMA0KK2RxZHZpMTA4IGRpdmlkZWludCAgMSAgOSAgIC0+IDANCitkcWR2aTEwOSBkaXZpZGVpbnQgIDEgIDEwICAtPiAwDQorZHFkdmkxMTAgZGl2aWRlaW50ICAxICAxICAgLT4gMQ0KK2RxZHZpMTExIGRpdmlkZWludCAgMiAgMSAgIC0+IDINCitkcWR2aTExMiBkaXZpZGVpbnQgIDMgIDEgICAtPiAzDQorZHFkdmkxMTMgZGl2aWRlaW50ICA0ICAxICAgLT4gNA0KK2RxZHZpMTE0IGRpdmlkZWludCAgNSAgMSAgIC0+IDUNCitkcWR2aTExNSBkaXZpZGVpbnQgIDYgIDEgICAtPiA2DQorZHFkdmkxMTYgZGl2aWRlaW50ICA3ICAxICAgLT4gNw0KK2RxZHZpMTE3IGRpdmlkZWludCAgOCAgMSAgIC0+IDgNCitkcWR2aTExOCBkaXZpZGVpbnQgIDkgIDEgICAtPiA5DQorZHFkdmkxMTkgZGl2aWRlaW50ICAxMCAxICAgLT4gMTANCisNCistLSBmcm9tIERpYWdCaWdEZWNpbWFsDQorZHFkdmkxMzEgZGl2aWRlaW50ICAxMDEuMyAgIDEgICAgIC0+ICAxMDENCitkcWR2aTEzMiBkaXZpZGVpbnQgIDEwMS4wICAgMSAgICAgLT4gIDEwMQ0KK2RxZHZpMTMzIGRpdmlkZWludCAgMTAxLjMgICAzICAgICAtPiAgMzMNCitkcWR2aTEzNCBkaXZpZGVpbnQgIDEwMS4wICAgMyAgICAgLT4gIDMzDQorZHFkdmkxMzUgZGl2aWRlaW50ICAyLjQgICAgIDEgICAgIC0+ICAyDQorZHFkdmkxMzYgZGl2aWRlaW50ICAyLjQwMCAgIDEgICAgIC0+ICAyDQorZHFkdmkxMzcgZGl2aWRlaW50ICAxOCAgICAgIDE4ICAgIC0+ICAxDQorZHFkdmkxMzggZGl2aWRlaW50ICAxMTIwICAgIDEwMDAgIC0+ICAxDQorZHFkdmkxMzkgZGl2aWRlaW50ICAyLjQgICAgIDIgICAgIC0+ICAxDQorZHFkdmkxNDAgZGl2aWRlaW50ICAyLjQwMCAgIDIgICAgIC0+ICAxDQorZHFkdmkxNDEgZGl2aWRlaW50ICAwLjUgICAgIDIuMDAwIC0+ICAwDQorZHFkdmkxNDIgZGl2aWRlaW50ICA4LjAwNSAgIDcgICAgIC0+ICAxDQorZHFkdmkxNDMgZGl2aWRlaW50ICA1ICAgICAgIDIgICAgIC0+ICAyDQorZHFkdmkxNDQgZGl2aWRlaW50ICAwICAgICAgIDIgICAgIC0+ICAwDQorZHFkdmkxNDUgZGl2aWRlaW50ICAwLjAwICAgIDIgICAgIC0+ICAwDQorDQorLS0gT3RoZXJzDQorZHFkdmkxNTAgZGl2aWRlaW50ICAxMjM0NSAgNC45OTkgIC0+ICAyNDY5DQorZHFkdmkxNTEgZGl2aWRlaW50ICAxMjM0NSAgNC45OSAgIC0+ICAyNDczDQorZHFkdmkxNTIgZGl2aWRlaW50ICAxMjM0NSAgNC45ICAgIC0+ICAyNTE5DQorZHFkdmkxNTMgZGl2aWRlaW50ICAxMjM0NSAgNSAgICAgIC0+ICAyNDY5DQorZHFkdmkxNTQgZGl2aWRlaW50ICAxMjM0NSAgNS4xICAgIC0+ICAyNDIwDQorZHFkdmkxNTUgZGl2aWRlaW50ICAxMjM0NSAgNS4wMSAgIC0+ICAyNDY0DQorZHFkdmkxNTYgZGl2aWRlaW50ICAxMjM0NSAgNS4wMDEgIC0+ICAyNDY4DQorZHFkdmkxNTcgZGl2aWRlaW50ICAgIDEwMSAgNy42ICAgIC0+ICAxMw0KKw0KKy0tIFZhcmlvdXMgZmxhdm91cnMgb2YgZGl2aWRlaW50IGJ5IDANCitkcWR2aTIwMSBkaXZpZGVpbnQgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZHZpMjAyIGRpdmlkZWludCAgMC4wRTUgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFkdmkyMDMgZGl2aWRlaW50ICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcWR2aTIwNCBkaXZpZGVpbnQgIDAuMDAwMSAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjA1IGRpdmlkZWludCAgMC4wMSAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmkyMDYgZGl2aWRlaW50ICAwLjEgICAgMCAgIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTIwNyBkaXZpZGVpbnQgIDEgICAgICAwICAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjA4IGRpdmlkZWludCAgMSAgICAgIDAuMCAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmkyMDkgZGl2aWRlaW50IDEwICAgICAgMC4wIC0+IEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTIxMCBkaXZpZGVpbnQgMUUrMTAwICAwLjAgLT4gSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjExIGRpdmlkZWludCAxRSszODAgIDAgICAtPiBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmkyMTQgZGl2aWRlaW50ICAtMC4wMDAxIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjE1IGRpdmlkZWludCAgLTAuMDEgICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTIxNiBkaXZpZGVpbnQgIC0wLjEgICAgMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmkyMTcgZGl2aWRlaW50ICAtMSAgICAgIDAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjE4IGRpdmlkZWludCAgLTEgICAgICAwLjAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTIxOSBkaXZpZGVpbnQgLTEwICAgICAgMC4wIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmkyMjAgZGl2aWRlaW50IC0xRSsxMDAgIDAuMCAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpMjIxIGRpdmlkZWludCAtMUUrMzgwICAwICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cNCitkcWR2aTI3MCBkaXZpZGVpbnQgMSAxZTM4NCAgICAgICAgICAtPiAwDQorZHFkdmkyNzEgZGl2aWRlaW50IDEgMC45ZTM4NCAgICAgICAgLT4gMA0KK2RxZHZpMjcyIGRpdmlkZWludCAxIDAuOTllMzg0ICAgICAgIC0+IDANCitkcWR2aTI3MyBkaXZpZGVpbnQgMSAwLjk5OTk5OTk5OTk5OTk5OTllMzg0ICAgICAgIC0+IDANCitkcWR2aTI3NCBkaXZpZGVpbnQgOWUzODQgICAgMSAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RxZHZpMjc1IGRpdmlkZWludCA5LjllMzg0ICAxICAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkyNzYgZGl2aWRlaW50IDkuOTllMzg0IDEgICAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcWR2aTI3NyBkaXZpZGVpbnQgOS45OTk5OTk5OTk5OTk5OTllMzg0IDEgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCisNCitkcWR2aTI4MCBkaXZpZGVpbnQgMC4xIDllLTM4MyAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RxZHZpMjgxIGRpdmlkZWludCAwLjEgOTllLTM4MyAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkyODIgZGl2aWRlaW50IDAuMSA5OTllLTM4MyAgICAgLT4gTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcWR2aTI4MyBkaXZpZGVpbnQgMC4xIDllLTM4MiAgICAgICAtPiBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2RxZHZpMjg0IGRpdmlkZWludCAwLjEgOTllLTM4MiAgICAgIC0+IE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorDQorLS0gR0QgZWRnZSBjYXNlczogbGhzIHNtYWxsZXIgdGhhbiByaHMgYnV0IG1vcmUgZGlnaXRzDQorZHFkdmkzMDEgIGRpdmlkZWludCAgMC45ICAgICAgMiAgICAgIC0+ICAwDQorZHFkdmkzMDIgIGRpdmlkZWludCAgMC45ICAgICAgMi4wICAgIC0+ICAwDQorZHFkdmkzMDMgIGRpdmlkZWludCAgMC45ICAgICAgMi4xICAgIC0+ICAwDQorZHFkdmkzMDQgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMCAgIC0+ICAwDQorZHFkdmkzMDUgIGRpdmlkZWludCAgMC45ICAgICAgMi4wMSAgIC0+ICAwDQorZHFkdmkzMDYgIGRpdmlkZWludCAgMC4xMiAgICAgMSAgICAgIC0+ICAwDQorZHFkdmkzMDcgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwDQorZHFkdmkzMDggIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwDQorZHFkdmkzMDkgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wICAgIC0+ICAwDQorZHFkdmkzMTAgIGRpdmlkZWludCAgMC4xMiAgICAgMS4wMCAgIC0+ICAwDQorZHFkdmkzMTEgIGRpdmlkZWludCAgMC4xMiAgICAgMiAgICAgIC0+ICAwDQorZHFkdmkzMTIgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wICAgIC0+ICAwDQorZHFkdmkzMTMgIGRpdmlkZWludCAgMC4xMiAgICAgMi4xICAgIC0+ICAwDQorZHFkdmkzMTQgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMCAgIC0+ICAwDQorZHFkdmkzMTUgIGRpdmlkZWludCAgMC4xMiAgICAgMi4wMSAgIC0+ICAwDQorDQorLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlDQorZHFkdmkzMzAgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgMTAgICAgLT4gIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NQ0KK2RxZHZpMzMxICBkaXZpZGVpbnQgIDEyMzQ1Njc5ODc2NTQzMjE5ODc2NTQzMjE4OTAxMjM0NTYgICAxICAgIC0+ICAxMjM0NTY3OTg3NjU0MzIxOTg3NjU0MzIxODkwMTIzNDU2DQorZHFkdmkzMzIgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkzMzMgIGRpdmlkZWludCAgMTIzNDU2Nzk4NzY1NDMyMTk4NzY1NDMyMTg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyBbZnJvbSBkaXZpZGVdDQorZHFkdmkxMDUxIGRpdmlkZWludCAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkxMDUyIGRpdmlkZWludCAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkxMDUzIGRpdmlkZWludCAtMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkxMDU0IGRpdmlkZWludCAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFkdmkxMDU1IGRpdmlkZWludCAgMWUtMjc3ICAxZSszMTEgLT4gIDANCitkcWR2aTEwNTYgZGl2aWRlaW50ICAxZS0yNzcgLTFlKzMxMSAtPiAtMA0KK2RxZHZpMTA1NyBkaXZpZGVpbnQgLTFlLTI3NyAgMWUrMzExIC0+IC0wDQorZHFkdmkxMDU4IGRpdmlkZWludCAtMWUtMjc3IC0xZSszMTEgLT4gIDANCisNCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCitkcWR2aTEwNjAgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDEgLT4gMA0KK2RxZHZpMTA2MSBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwMiAtPiAwDQorZHFkdmkxMDYyIGRpdmlkZWludCAxZS0yOTEgMWUrMTAzIC0+IDANCitkcWR2aTEwNjMgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDQgLT4gMA0KK2RxZHZpMTA2NCBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwNSAtPiAwDQorZHFkdmkxMDY1IGRpdmlkZWludCAxZS0yOTEgMWUrMTA2IC0+IDANCitkcWR2aTEwNjYgZGl2aWRlaW50IDFlLTI5MSAxZSsxMDcgLT4gMA0KK2RxZHZpMTA2NyBkaXZpZGVpbnQgMWUtMjkxIDFlKzEwOCAtPiAwDQorZHFkdmkxMDY4IGRpdmlkZWludCAxZS0yOTEgMWUrMTA5IC0+IDANCitkcWR2aTEwNjkgZGl2aWRlaW50IDFlLTI5MSAxZSsxMTAgLT4gMA0KKw0KK2RxZHZpMTEwMSBkaXZpZGVpbnQgIDEuMDAwMEUtMzk0ICAxICAgICAtPiAwDQorZHFkdmkxMTAyIGRpdmlkZWludCAgMS4wMDBFLTM5NCAgIDFlKzEgIC0+IDANCitkcWR2aTExMDMgZGl2aWRlaW50ICAxLjAwRS0zOTQgICAgMWUrMiAgLT4gMA0KKw0KK2RxZHZpMTExOCBkaXZpZGVpbnQgIDFFLTM5NCAgICAgICAxZSs0ICAtPiAwDQorZHFkdmkxMTE5IGRpdmlkZWludCAgM0UtMzk0ICAgICAgLTFlKzUgIC0+IC0wDQorZHFkdmkxMTIwIGRpdmlkZWludCAgNUUtMzk0ICAgICAgIDFlKzUgIC0+IDANCisNCitkcWR2aTExMjQgZGl2aWRlaW50ICAxRS0zOTQgICAgICAtMWUrNCAgLT4gLTANCitkcWR2aTExMzAgZGl2aWRlaW50ICAzLjBFLTM5NCAgICAtMWUrNSAgLT4gLTANCisNCitkcWR2aTExMzEgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMjAwIC0+IDANCitkcWR2aTExMzIgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk5IC0+IDANCitkcWR2aTExMzMgZGl2aWRlaW50ICAxLjBFLTE5OSAgICAgMWUrMTk4IC0+IDANCitkcWR2aTExMzQgZGl2aWRlaW50ICAyLjBFLTE5OSAgICAgMmUrMTk4IC0+IDANCitkcWR2aTExMzUgZGl2aWRlaW50ICA0LjBFLTE5OSAgICAgNGUrMTk4IC0+IDANCisNCistLSBsb25nIG9wZXJhbmQgY2hlY2tzDQorZHFkdmk0MDEgZGl2aWRlaW50IDEyMzQ1Njc4MDAwIDEwMCAtPiAxMjM0NTY3ODANCitkcWR2aTQwMiBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwMCAgIC0+IDANCitkcWR2aTQwMyBkaXZpZGVpbnQgMTIzNDU2NzgwMCAgMTAgIC0+IDEyMzQ1Njc4MA0KK2RxZHZpNDA0IGRpdmlkZWludCAxIDEyMzQ1Njc4MDAgICAgLT4gMA0KK2RxZHZpNDA1IGRpdmlkZWludCAxMjM0NTY3ODkwICAxMCAgLT4gMTIzNDU2Nzg5DQorZHFkdmk0MDYgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MCAgICAtPiAwDQorZHFkdmk0MDcgZGl2aWRlaW50IDEyMzQ1Njc4OTEgIDEwICAtPiAxMjM0NTY3ODkNCitkcWR2aTQwOCBkaXZpZGVpbnQgMSAxMjM0NTY3ODkxICAgIC0+IDANCitkcWR2aTQwOSBkaXZpZGVpbnQgMTIzNDU2Nzg5MDEgMTAwIC0+IDEyMzQ1Njc4OQ0KK2RxZHZpNDEwIGRpdmlkZWludCAxIDEyMzQ1Njc4OTAxICAgLT4gMA0KK2RxZHZpNDExIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxMCAgLT4gMTIzNDU2Nzg5DQorZHFkdmk0MTIgZGl2aWRlaW50IDEgMTIzNDU2Nzg5NiAgICAtPiAwDQorZHFkdmk0MTMgZGl2aWRlaW50IDEyMzQ1Njc4OTQ4IDEwMCAtPiAxMjM0NTY3ODkNCitkcWR2aTQxNCBkaXZpZGVpbnQgMTIzNDU2Nzg5NDkgMTAwIC0+IDEyMzQ1Njc4OQ0KK2RxZHZpNDE1IGRpdmlkZWludCAxMjM0NTY3ODk1MCAxMDAgLT4gMTIzNDU2Nzg5DQorZHFkdmk0MTYgZGl2aWRlaW50IDEyMzQ1Njc4OTUxIDEwMCAtPiAxMjM0NTY3ODkNCitkcWR2aTQxNyBkaXZpZGVpbnQgMTIzNDU2Nzg5OTkgMTAwIC0+IDEyMzQ1Njc4OQ0KK2RxZHZpNDQxIGRpdmlkZWludCAxMjM0NTY3ODAwMCAxIC0+IDEyMzQ1Njc4MDAwDQorZHFkdmk0NDIgZGl2aWRlaW50IDEgMTIzNDU2NzgwMDAgLT4gMA0KK2RxZHZpNDQzIGRpdmlkZWludCAxMjM0NTY3ODAwICAxIC0+IDEyMzQ1Njc4MDANCitkcWR2aTQ0NCBkaXZpZGVpbnQgMSAxMjM0NTY3ODAwICAtPiAwDQorZHFkdmk0NDUgZGl2aWRlaW50IDEyMzQ1Njc4OTAgIDEgLT4gMTIzNDU2Nzg5MA0KK2RxZHZpNDQ2IGRpdmlkZWludCAxIDEyMzQ1Njc4OTAgIC0+IDANCitkcWR2aTQ0NyBkaXZpZGVpbnQgMTIzNDU2Nzg5MSAgMSAtPiAxMjM0NTY3ODkxDQorZHFkdmk0NDggZGl2aWRlaW50IDEgMTIzNDU2Nzg5MSAgLT4gMA0KK2RxZHZpNDQ5IGRpdmlkZWludCAxMjM0NTY3ODkwMSAxIC0+IDEyMzQ1Njc4OTAxDQorZHFkdmk0NTAgZGl2aWRlaW50IDEgMTIzNDU2Nzg5MDEgLT4gMA0KK2RxZHZpNDUxIGRpdmlkZWludCAxMjM0NTY3ODk2ICAxIC0+IDEyMzQ1Njc4OTYNCitkcWR2aTQ1MiBkaXZpZGVpbnQgMSAxMjM0NTY3ODk2ICAtPiAwDQorDQorLS0gbW9yZSB6ZXJvcywgZXRjLg0KK2RxZHZpNTMxIGRpdmlkZWludCA1LjAwIDFFLTMgICAgLT4gNTAwMA0KK2RxZHZpNTMyIGRpdmlkZWludCAwMC4wMCAwLjAwMCAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZHZpNTMzIGRpdmlkZWludCAwMC4wMCAwRS0zICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZHZpNTM0IGRpdmlkZWludCAgMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZHZpNTM1IGRpdmlkZWludCAtMCAgICAgMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxZHZpNTM2IGRpdmlkZWludCAtMCAgICAtMCAgICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KKw0KK2RxZHZpNTQxIGRpdmlkZWludCAgMCAgICAtMSAgICAgLT4gLTANCitkcWR2aTU0MiBkaXZpZGVpbnQgLTAgICAgLTEgICAgIC0+ICAwDQorZHFkdmk1NDMgZGl2aWRlaW50ICAwICAgICAxICAgICAtPiAgMA0KK2RxZHZpNTQ0IGRpdmlkZWludCAtMCAgICAgMSAgICAgLT4gLTANCitkcWR2aTU0NSBkaXZpZGVpbnQgLTEgICAgIDAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmk1NDYgZGl2aWRlaW50IC0xICAgIC0wICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpNTQ3IGRpdmlkZWludCAgMSAgICAgMCAgICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTU0OCBkaXZpZGVpbnQgIDEgICAgLTAgICAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorDQorZHFkdmk1NTEgZGl2aWRlaW50ICAwLjAgIC0xICAgICAtPiAtMA0KK2RxZHZpNTUyIGRpdmlkZWludCAtMC4wICAtMSAgICAgLT4gIDANCitkcWR2aTU1MyBkaXZpZGVpbnQgIDAuMCAgIDEgICAgIC0+ICAwDQorZHFkdmk1NTQgZGl2aWRlaW50IC0wLjAgICAxICAgICAtPiAtMA0KK2RxZHZpNTU1IGRpdmlkZWludCAtMS4wICAgMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTU1NiBkaXZpZGVpbnQgLTEuMCAgLTAgICAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmk1NTcgZGl2aWRlaW50ICAxLjAgICAwICAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpNTU4IGRpdmlkZWludCAgMS4wICAtMCAgICAgLT4gLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCisNCitkcWR2aTU2MSBkaXZpZGVpbnQgIDAgICAgLTEuMCAgIC0+IC0wDQorZHFkdmk1NjIgZGl2aWRlaW50IC0wICAgIC0xLjAgICAtPiAgMA0KK2RxZHZpNTYzIGRpdmlkZWludCAgMCAgICAgMS4wICAgLT4gIDANCitkcWR2aTU2NCBkaXZpZGVpbnQgLTAgICAgIDEuMCAgIC0+IC0wDQorZHFkdmk1NjUgZGl2aWRlaW50IC0xICAgICAwLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpNTY2IGRpdmlkZWludCAtMSAgICAtMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTU2NyBkaXZpZGVpbnQgIDEgICAgIDAuMCAgIC0+ICBJbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmk1NjggZGl2aWRlaW50ICAxICAgIC0wLjAgICAtPiAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KKw0KK2RxZHZpNTcxIGRpdmlkZWludCAgMC4wICAtMS4wICAgLT4gLTANCitkcWR2aTU3MiBkaXZpZGVpbnQgLTAuMCAgLTEuMCAgIC0+ICAwDQorZHFkdmk1NzMgZGl2aWRlaW50ICAwLjAgICAxLjAgICAtPiAgMA0KK2RxZHZpNTc0IGRpdmlkZWludCAtMC4wICAgMS4wICAgLT4gLTANCitkcWR2aTU3NSBkaXZpZGVpbnQgLTEuMCAgIDAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorZHFkdmk1NzYgZGl2aWRlaW50IC0xLjAgIC0wLjAgICAtPiAgSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2RxZHZpNTc3IGRpdmlkZWludCAgMS4wICAgMC4wICAgLT4gIEluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWR2aTU3OCBkaXZpZGVpbnQgIDEuMCAgLTAuMCAgIC0+IC1JbmZpbml0eSBEaXZpc2lvbl9ieV96ZXJvDQorDQorLS0gU3BlY2lhbHMNCitkcWR2aTU4MCBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTU4MSBkaXZpZGVpbnQgIEluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RxZHZpNTgyIGRpdmlkZWludCAgSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZHFkdmk1ODMgZGl2aWRlaW50ICBJbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkcWR2aTU4NCBkaXZpZGVpbnQgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KK2RxZHZpNTg1IGRpdmlkZWludCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQorZHFkdmk1ODYgZGl2aWRlaW50ICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkNCitkcWR2aTU4NyBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTU4OCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wDQorZHFkdmk1ODkgZGl2aWRlaW50IC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk1OTAgZGl2aWRlaW50IC0xICAgICBJbmYgICAtPiAtMA0KK2RxZHZpNTkxIGRpdmlkZWludCAtMCAgICAgSW5mICAgLT4gLTANCitkcWR2aTU5MiBkaXZpZGVpbnQgIDAgICAgIEluZiAgIC0+ICAwDQorZHFkdmk1OTMgZGl2aWRlaW50ICAxICAgICBJbmYgICAtPiAgMA0KK2RxZHZpNTk0IGRpdmlkZWludCAgMTAwMCAgSW5mICAgLT4gIDANCitkcWR2aTU5NSBkaXZpZGVpbnQgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWR2aTYwMCBkaXZpZGVpbnQgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTYwMSBkaXZpZGVpbnQgLUluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KK2RxZHZpNjAyIGRpdmlkZWludCAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQorZHFkdmk2MDMgZGl2aWRlaW50IC1JbmYgIC0wICAgICAtPiAgSW5maW5pdHkNCitkcWR2aTYwNCBkaXZpZGVpbnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RxZHZpNjA1IGRpdmlkZWludCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFkdmk2MDYgZGl2aWRlaW50IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkcWR2aTYwNyBkaXZpZGVpbnQgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTYwOCBkaXZpZGVpbnQgLTEwMDAgIEluZiAgIC0+IC0wDQorZHFkdmk2MDkgZGl2aWRlaW50IC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2MTAgZGl2aWRlaW50IC0xICAgIC1JbmYgICAtPiAgMA0KK2RxZHZpNjExIGRpdmlkZWludCAtMCAgICAtSW5mICAgLT4gIDANCitkcWR2aTYxMiBkaXZpZGVpbnQgIDAgICAgLUluZiAgIC0+IC0wDQorZHFkdmk2MTMgZGl2aWRlaW50ICAxICAgIC1JbmYgICAtPiAtMA0KK2RxZHZpNjE0IGRpdmlkZWludCAgMTAwMCAtSW5mICAgLT4gLTANCitkcWR2aTYxNSBkaXZpZGVpbnQgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWR2aTYyMSBkaXZpZGVpbnQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkcWR2aTYyMiBkaXZpZGVpbnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcWR2aTYyMyBkaXZpZGVpbnQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkcWR2aTYyNCBkaXZpZGVpbnQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkcWR2aTYyNSBkaXZpZGVpbnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcWR2aTYyNiBkaXZpZGVpbnQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkcWR2aTYyNyBkaXZpZGVpbnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkcWR2aTYyOCBkaXZpZGVpbnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcWR2aTYyOSBkaXZpZGVpbnQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzMCBkaXZpZGVpbnQgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzMSBkaXZpZGVpbnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzMiBkaXZpZGVpbnQgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzMyBkaXZpZGVpbnQgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzNCBkaXZpZGVpbnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzNSBkaXZpZGVpbnQgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzNiBkaXZpZGVpbnQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWR2aTYzNyBkaXZpZGVpbnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcWR2aTY0MSBkaXZpZGVpbnQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NDIgZGl2aWRlaW50ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjQzIGRpdmlkZWludCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY0NCBkaXZpZGVpbnQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NDUgZGl2aWRlaW50ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjQ2IGRpdmlkZWludCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY0NyBkaXZpZGVpbnQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NDggZGl2aWRlaW50ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjQ5IGRpdmlkZWludCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY1MCBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NTEgZGl2aWRlaW50IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjUyIGRpdmlkZWludCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY1MyBkaXZpZGVpbnQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NTQgZGl2aWRlaW50IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjU1IGRpdmlkZWludCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY1NiBkaXZpZGVpbnQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NTcgZGl2aWRlaW50ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjU4IGRpdmlkZWludCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY1OSBkaXZpZGVpbnQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxZHZpNjYxIGRpdmlkZWludCAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkcWR2aTY2MiBkaXZpZGVpbnQgIE5hTjggIDEwMDAgIC0+ICBOYU44DQorZHFkdmk2NjMgZGl2aWRlaW50ICBOYU43ICBJbmYgICAtPiAgTmFONw0KK2RxZHZpNjY0IGRpdmlkZWludCAtTmFONiAgTmFONSAgLT4gLU5hTjYNCitkcWR2aTY2NSBkaXZpZGVpbnQgLUluZiAgIE5hTjQgIC0+ICBOYU40DQorZHFkdmk2NjYgZGl2aWRlaW50IC0xMDAwICBOYU4zICAtPiAgTmFOMw0KK2RxZHZpNjY3IGRpdmlkZWludCAgSW5mICAtTmFOMiAgLT4gLU5hTjINCisNCitkcWR2aTY3MSBkaXZpZGVpbnQgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjcyIGRpdmlkZWludCAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NzMgZGl2aWRlaW50ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY3NCBkaXZpZGVpbnQgIHNOYU45NiBzTmFOOTQgIC0+ICBOYU45NiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjc1IGRpdmlkZWludCAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NzYgZGl2aWRlaW50IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkcWR2aTY3NyBkaXZpZGVpbnQgIDAgICAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZHZpNjc4IGRpdmlkZWludCAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk2NzkgZGl2aWRlaW50ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBHeXVyaXMgZXhhbXBsZQ0KK2RxZHZpNzAwIGRpdmlkZWludCA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiAwDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxZHZpOTAwIGRpdmlkZWludCAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFkdmk5MDEgZGl2aWRlaW50ICAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFFbmNvZGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CmluZGV4IDQ5ZWRmNWIuLjhjNWQ3YjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUVuY29kZS5kZWNUZXN0CkBAIC0xLDQ3NyArMSw0NzcgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIHNpeHRlZW4tYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwxMjguZGVjVGVzdF0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBzaXh0ZWVuLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uCi0tLSBJdHMgY2hhcmFjdGVyaXN0aWNzIGFyZToKLS0tCi0tLSAgIDEgYml0ICBzaWduCi0tLSAgIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAotLS0gIDEyIGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uCi0tLSAxMTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24KLS0tCi0tLSBUb3RhbCBleHBvbmVudCBsZW5ndGggMTQgYml0cwotLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDExNCBiaXRzICgzNCBkaWdpdHMpCi0tLQotLS0gRWxpbWl0ID0gMTIyODcgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKLS0tIEVtYXggICA9ICA2MTQ0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQotLS0gRW1pbiAgID0gLTYxNDMgKHNtYWxsZXN0IGV4cG9uZW50IHZhbHVlKQotLS0gYmlhcyAgID0gIDYxNzYgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQotCi0tLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQotLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKLS0tIHRlc3RjYXNlIGdyb3Vwcy4KLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi0KLS0tIEdlbmVyYWwgdGVzdGNhc2VzCi0tLSAobW9zdGx5IGRlcml2ZWQgZnJvbSB0aGUgU3RyYXdtYW4gNCBkb2N1bWVudCBhbmQgZXhhbXBsZXMpCi1kZWNxMDAxIGFwcGx5ICAgI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwCi1kZWNxMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi0tLSBkZXJpdmF0aXZlIGNhbm9uaWNhbCBwbGFpbiBzdHJpbmdzCi1kZWNxMDAzIGFwcGx5ICAgI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRSszCi1kZWNxMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi1kZWNxMDA1IGFwcGx5ICAgI0EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03NTAKLWRlY3EwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKLWRlY3EwMDcgYXBwbHkgICAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1LjAKLWRlY3EwMDggYXBwbHkgICAtNzUuMCAgICAgICAgICAgICAtPiAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKLWRlY3EwMDkgYXBwbHkgICAjQTIwNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuNzUwCi1kZWNxMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi1kZWNxMDExIGFwcGx5ICAgI0EyMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjA3NTAKLWRlY3EwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAKLWRlY3EwMTMgYXBwbHkgICAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwCi1kZWNxMDE0IGFwcGx5ICAgLTAuMDAwNzUwICAgICAgICAgLT4gI0EyMDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi1kZWNxMDE1IGFwcGx5ICAgI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC0wLjAwMDAwNzUwCi1kZWNxMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi1kZWNxMDE3IGFwcGx5ICAgI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwIC0+IC03LjUwRS03Ci1kZWNxMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0EyMDVjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwCi0KLS0tIE5vcm1hbGl0eQotZGVjcTAyMCBhcHBseSAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtPiAjMjYwODEzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQKLWRlY3EwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLT4gI2E2MDgxMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0Ci1kZWNxMDIyIGFwcGx5ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgIC0+ICMyNjA4MDkxMjQ0OTEyNDQ5MTI0NDkxMjQ0OTEyNDQ5MQotCi0tLSBObWF4IGFuZCBzaW1pbGFyCi1kZWNxMDMxIGFwcGx5ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotZGVjcTAzMiBhcHBseSAgICM3N2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZiAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZGVjcTAzMyBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAotZGVjcTAzNCBhcHBseSAgICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAxLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNEUrNjE0NAotLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykKLWRlY3EwMzUgYXBwbHkgICAxLjIzRSs2MTQ0ICAgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxMDM2IGFwcGx5ICAgIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0Ci1kZWNxMDM3IGFwcGx5ICAgMUUrNjE0NCAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTAzOCBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAotCi1kZWNxMDUxIGFwcGx5ICAgMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1Ci1kZWNxMDUyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1Ci1kZWNxMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0Ci1kZWNxMDU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IDEyMzQKLWRlY3EwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKLWRlY3EwNTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMTIzCi1kZWNxMDU3IGFwcGx5ICAgMTIgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi1kZWNxMDU4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IDEyCi1kZWNxMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kZWNxMDYwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IDEKLWRlY3EwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMKLWRlY3EwNjIgYXBwbHkgICAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gMS4yMwotZGVjcTA2MyBhcHBseSAgIDEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQotZGVjcTA2NCBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUKLQotLS0gTm1pbiBhbmQgYmVsb3cKLWRlY3EwNzEgYXBwbHkgICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kZWNxMDcyIGFwcGx5ICAgIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDFFLTYxNDMKLWRlY3EwNzMgYXBwbHkgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kZWNxMDc1IGFwcGx5ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZGVjcTA3NiBhcHBseSAgICMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MwotCi1kZWNxMDc3IGFwcGx5ICAgMC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgIFN1Ym5vcm1hbAotZGVjcTA3OCBhcHBseSAgICMwMDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0ICBTdWJub3JtYWwKLWRlY3EwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsCi1kZWNxMDgwIGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgICAgIC0+IDEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCi1kZWNxMDgxIGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAotZGVjcTA4MiBhcHBseSAgICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbAotZGVjcTA4MyBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICBTdWJub3JtYWwKLWRlY3EwODQgYXBwbHkgICAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gMUUtNjE3NiAgICAgICAgICAgICAgICAgU3Vibm9ybWFsCi0KLS0tIHVuZGVyZmxvd3MgY2Fubm90IGJlIHRlc3RlZCBmb3Igc2ltcGxlIGNvcGllcywgY2hlY2sgZWRnZSBjYXNlcwotZGVjcTA5MCBhcHBseSAgIDFlLTYxNzYgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIFN1Ym5vcm1hbAotZGVjcTEwMCBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjMDAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAotCi0tLSBzYW1lIGFnYWluLCBuZWdhdGl2ZXMKLS0tIE5tYXggYW5kIHNpbWlsYXIKLWRlY3ExMjIgYXBwbHkgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kZWNxMTIzIGFwcGx5ICAgI2Y3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZGVjcTEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNAotZGVjcTEyNSBhcHBseSAgICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNCAtPiAtMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQKLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCi1kZWNxMTMwIGFwcGx5ICAtMS4yM0UrNjE0NCAgICAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTEzMSBhcHBseSAgICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMS4yMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQKLWRlY3ExMzIgYXBwbHkgIC0xRSs2MTQ0ICAgICAgIC0+ICNjN2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxMTMzIGFwcGx5ICAgI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAotCi1kZWNxMTUxIGFwcGx5ICAtMTIzNDUgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1Ci1kZWNxMTUyIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQotZGVjcTE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNAotZGVjcTE1NCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNCAgICAgICAtPiAtMTIzNAotZGVjcTE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMwotZGVjcTE1NiBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMTIzCi1kZWNxMTU3IGFwcGx5ICAtMTIgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi1kZWNxMTU4IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMgotZGVjcTE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZGVjcTE2MCBhcHBseSAgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAtMQotZGVjcTE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMwotZGVjcTE2MiBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMyAgICAgICAtPiAtMS4yMwotZGVjcTE2MyBhcHBseSAgLTEyMy40NSAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQotZGVjcTE2NCBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1Ci0KLS0tIE5taW4gYW5kIGJlbG93Ci1kZWNxMTcxIGFwcGx5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZGVjcTE3MiBhcHBseSAgICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE0MwotZGVjcTE3MyBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3ExNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kZWNxMTc1IGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZGVjcTE3NiBhcHBseSAgICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKLQotZGVjcTE3NyBhcHBseSAgLTAuMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwKLWRlY3ExNzggYXBwbHkgICAjODAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbAotZGVjcTE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwKLWRlY3ExODAgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgICAgLT4gLTEuMEUtNjE3NSAgICAgICAgICAgICAgU3Vibm9ybWFsCi1kZWNxMTgxIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgIC0+ICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbAotZGVjcTE4MiBhcHBseSAgICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE3NSAgICAgICAgICAgICAgICBTdWJub3JtYWwKLWRlY3ExODMgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsCi1kZWNxMTg0IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwKLQotLS0gdW5kZXJmbG93IGVkZ2UgY2FzZXMKLWRlY3ExOTAgYXBwbHkgICAtMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsCi1kZWNxMjAwIGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjODAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbAotCi0tLSB6ZXJvcwotZGVjcTQwMCBhcHBseSAgIDBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjcTQwMSBhcHBseSAgIDBFLTYxNzcgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjcTQwMiBhcHBseSAgIDBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTQwMyBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2Ci1kZWNxNDA0IGFwcGx5ICAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTQwNSBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2Ci1kZWNxNDA2IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDA3IGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDAuMDAKLWRlY3E0MDggYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E0MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMAotZGVjcTQxMCBhcHBseSAgIDBFKzMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTQxMSBhcHBseSAgICMyMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSszCi1kZWNxNDEyIGFwcGx5ICAgMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDEzIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKLS0tIGNsYW1wZWQgemVyb3MuLi4KLWRlY3E0MTQgYXBwbHkgICAwRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY3E0MTUgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQotZGVjcTQxNiBhcHBseSAgIDBFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZAotZGVjcTQxNyBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExCi1kZWNxNDE4IGFwcGx5ICAgMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNxNDE5IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTEKLQotLS0gbmVnYXRpdmUgemVyb3MKLWRlY3E0MjAgYXBwbHkgIC0wRS04MDAwICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY3E0MjEgYXBwbHkgIC0wRS02MTc3ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQKLWRlY3E0MjIgYXBwbHkgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E0MjMgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFLTYxNzYKLWRlY3E0MjQgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDI1IGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRS02MTc2Ci1kZWNxNDI2IGFwcGx5ICAtMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDI3IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwCi1kZWNxNDI4IGFwcGx5ICAtMCAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDI5IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wCi1kZWNxNDMwIGFwcGx5ICAtMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDMxIGFwcGx5ICAgI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSszCi1kZWNxNDMyIGFwcGx5ICAtMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNDMzIGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCi0tLSBjbGFtcGVkIHplcm9zLi4uCi1kZWNxNDM0IGFwcGx5ICAtMEUrNjExMiAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNxNDM1IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCi1kZWNxNDM2IGFwcGx5ICAtMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNxNDM3IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCi1kZWNxNDM4IGFwcGx5ICAtMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkCi1kZWNxNDM5IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExCi0KLS0tIGV4cG9uZW50IGxlbmd0aHMKLWRlY3E0NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gNwotZGVjcTQ0MSBhcHBseSAgIDcgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kZWNxNDQyIGFwcGx5ICAgIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzkKLWRlY3E0NDMgYXBwbHkgICA3RSs5IC0+ICMyMjBhNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotZGVjcTQ0NCBhcHBseSAgICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OQotZGVjcTQ0NSBhcHBseSAgIDdFKzk5IC0+ICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotZGVjcTQ0NiBhcHBseSAgICMyMzAxYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgICAgICAtPiA3RSs5OTkKLWRlY3E0NDcgYXBwbHkgICA3RSs5OTkgLT4gIzIzMDFjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kZWNxNDQ4IGFwcGx5ICAgIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzU5OTkKLWRlY3E0NDkgYXBwbHkgICA3RSs1OTk5IC0+ICM0M2UzYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotCi0tLSBTcGVjaWFscwotZGVjcTUwMCBhcHBseSAgIEluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1MDEgYXBwbHkgICAjNzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4NzggLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNTAyIGFwcGx5ICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5Ci1kZWNxNTAzIGFwcGx5ICAgIzc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTUwNCBhcHBseSAgICM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBJbmZpbml0eQotZGVjcTUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1MDYgYXBwbHkgICAjN2EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gSW5maW5pdHkKLWRlY3E1MDcgYXBwbHkgICAjN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2IgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNTA4IGFwcGx5ICAgIzdiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5Ci0KLWRlY3E1MDkgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNTEwIGFwcGx5ICAgIzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YwotZGVjcTUxMSBhcHBseSAgICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBOYU4KLWRlY3E1MTIgYXBwbHkgICAjN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QgLT4gIzdjMDAzZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkCi1kZWNxNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTgotZGVjcTUxNCBhcHBseSAgICM3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZSAtPiAjN2UwMDNlN2U3YzdlN2U3ZTdlN2M3ZTdlN2U3ZTdjN2UKLWRlY3E1MTUgYXBwbHkgICAjN2UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgotZGVjcTUxNiBhcHBseSAgICM3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKLWRlY3E1MTcgYXBwbHkgICAjN2YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gc05hTgotZGVjcTUxOCBhcHBseSAgICM3ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZiAtPiBzTmFOOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kZWNxNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZgotCi1kZWNxNTIwIGFwcGx5ICAgLUluZmluaXR5ICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1MjIgYXBwbHkgICAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5Ci1kZWNxNTIzIGFwcGx5ICAgI2Y5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5IC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZGVjcTUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkKLWRlY3E1MjUgYXBwbHkgICAjZmE3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2EgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNTI2IGFwcGx5ICAgI2ZhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQotZGVjcTUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1MjggYXBwbHkgICAjZmIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5Ci0KLWRlY3E1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kZWNxNTMwIGFwcGx5ICAgI2ZjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICNmYzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YwotZGVjcTUzMSBhcHBseSAgICNmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCi1kZWNxNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAwM2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZAotZGVjcTUzMyBhcHBseSAgICNmZDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtTmFOCi1kZWNxNTM0IGFwcGx5ICAgI2ZlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlIC0+ICNmZTAwM2U3ZTdjN2U3ZTdlN2U3YzdlN2U3ZTdlN2M3ZQotZGVjcTUzNSBhcHBseSAgICNmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTgotZGVjcTUzNiBhcHBseSAgICNmZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjZmUwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YKLWRlY3E1MzcgYXBwbHkgICAjZmYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLXNOYU4KLWRlY3E1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRlY3E1MzkgYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gI2ZlMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi0KLWRlY3E1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1NDEgYXBwbHkgICBOYU4wICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRlY3E1NDIgYXBwbHkgICBOYU4xICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRlY3E1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLWRlY3E1NDQgYXBwbHkgICBOYU43OSAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLWRlY3E1NDUgYXBwbHkgICBOYU4xMjM0NSAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUKLWRlY3E1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjhlNTYKLWRlY3E1NDcgYXBwbHkgICBOYU43OTk3OTkgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZjdmZGYKLWRlY3E1NDggYXBwbHkgICBOYU43OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTk3OTkgIC0+ICM3YzAwM2RmZjdmZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZgotZGVjcTU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmCi1kZWNxNTUwIGFwcGx5ICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAjNmUwODBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYKLQotLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKLWRlY3E2MDEgYXBwbHkgICAxRSs2MTQ0ICAgICAgICAgICAgICAgICAtPiAjNDdmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYwMiBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAotZGVjcTYwMyBhcHBseSAgIDFFKzYxNDMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjA0IGFwcGx5ICAgIzQzZmZjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMKLWRlY3E2MDUgYXBwbHkgICAxRSs2MTQyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYwNiBhcHBseSAgICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIKLWRlY3E2MDcgYXBwbHkgICAxRSs2MTQxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYwOCBhcHBseSAgICM0M2ZmYzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MQotZGVjcTYwOSBhcHBseSAgIDFFKzYxNDAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjEwIGFwcGx5ICAgIzQzZmZjMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAKLWRlY3E2MTEgYXBwbHkgICAxRSs2MTM5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYxMiBhcHBseSAgICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkKLWRlY3E2MTMgYXBwbHkgICAxRSs2MTM4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYxNCBhcHBseSAgICM0M2ZmYzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOAotZGVjcTYxNSBhcHBseSAgIDFFKzYxMzcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjE2IGFwcGx5ICAgIzQzZmZjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcKLWRlY3E2MTcgYXBwbHkgICAxRSs2MTM2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYxOCBhcHBseSAgICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYKLWRlY3E2MTkgYXBwbHkgICAxRSs2MTM1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYyMCBhcHBseSAgICM0M2ZmYzAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNQotZGVjcTYyMSBhcHBseSAgIDFFKzYxMzQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjIyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzQKLWRlY3E2MjMgYXBwbHkgICAxRSs2MTMzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYyNCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzMKLWRlY3E2MjUgYXBwbHkgICAxRSs2MTMyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYyNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzMgotZGVjcTYyNyBhcHBseSAgIDFFKzYxMzEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjI4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzEKLWRlY3E2MjkgYXBwbHkgICAxRSs2MTMwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYzMCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzAKLWRlY3E2MzEgYXBwbHkgICAxRSs2MTI5ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYzMiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUrNjEyOQotZGVjcTYzMyBhcHBseSAgIDFFKzYxMjggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjM0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDBFKzYxMjgKLWRlY3E2MzUgYXBwbHkgICAxRSs2MTI3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYzNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFKzYxMjcKLWRlY3E2MzcgYXBwbHkgICAxRSs2MTI2ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTYzOCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwNDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrNjEyNgotZGVjcTYzOSBhcHBseSAgIDFFKzYxMjUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjQwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDBFKzYxMjUKLWRlY3E2NDEgYXBwbHkgICAxRSs2MTI0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTY0MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzYxMjQKLWRlY3E2NDMgYXBwbHkgICAxRSs2MTIzICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAgQ2xhbXBlZAotZGVjcTY0NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMEUrNjEyMwotZGVjcTY0NSBhcHBseSAgIDFFKzYxMjIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCBDbGFtcGVkCi1kZWNxNjQ2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDBFKzYxMjIKLWRlY3E2NDcgYXBwbHkgICAxRSs2MTIxICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAgQ2xhbXBlZAotZGVjcTY0OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzYxMjEKLWRlY3E2NDkgYXBwbHkgICAxRSs2MTIwICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMDAwMDAgQ2xhbXBlZAotZGVjcTY1MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMEUrNjEyMAotZGVjcTY1MSBhcHBseSAgIDFFKzYxMTkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMCBDbGFtcGVkCi1kZWNxNjUyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDBFKzYxMTkKLWRlY3E2NTMgYXBwbHkgICAxRSs2MTE4ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAgQ2xhbXBlZAotZGVjcTY1NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzYxMTgKLWRlY3E2NTUgYXBwbHkgICAxRSs2MTE3ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAgQ2xhbXBlZAotZGVjcTY1NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMCAgICAgICAtPiAxLjAwMDAwMEUrNjExNwotZGVjcTY1NyBhcHBseSAgIDFFKzYxMTYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCBDbGFtcGVkCi1kZWNxNjU4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwICAgICAgIC0+IDEuMDAwMDBFKzYxMTYKLWRlY3E2NTkgYXBwbHkgICAxRSs2MTE1ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAgQ2xhbXBlZAotZGVjcTY2MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzYxMTUKLWRlY3E2NjEgYXBwbHkgICAxRSs2MTE0ICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAgQ2xhbXBlZAotZGVjcTY2MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwMCAgICAgICAtPiAxLjAwMEUrNjExNAotZGVjcTY2MyBhcHBseSAgIDFFKzYxMTMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MCBDbGFtcGVkCi1kZWNxNjY0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwICAgICAgIC0+IDEuMDBFKzYxMTMKLWRlY3E2NjUgYXBwbHkgICAxRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgQ2xhbXBlZAotZGVjcTY2NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzYxMTIKLWRlY3E2NjcgYXBwbHkgICAxRSs2MTExICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRlY3E2NjggYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrNjExMQotZGVjcTY2OSBhcHBseSAgIDFFKzYxMTAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZGVjcTY3MCBhcHBseSAgICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTEwCi0KLS0tIFNlbGVjdGVkIERQRCBjb2RlcwotZGVjcTcwMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwCi1kZWNxNzAxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAgICAgIC0+IDkKLWRlY3E3MDIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMTAKLWRlY3E3MDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkgICAgICAgLT4gMTkKLWRlY3E3MDQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAgICAgICAgLT4gMjAKLWRlY3E3MDUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkKLWRlY3E3MDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAgICAgICAgLT4gMzAKLWRlY3E3MDcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkgICAgICAgLT4gMzkKLWRlY3E3MDggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgICAgICAgLT4gNDAKLWRlY3E3MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkgICAgICAgLT4gNDkKLWRlY3E3MTAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAgICAgICAgLT4gNTAKLWRlY3E3MTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkKLWRlY3E3MTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAgICAgICAgLT4gNjAKLWRlY3E3MTMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkgICAgICAgLT4gNjkKLWRlY3E3MTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAgICAgICAgLT4gNzAKLWRlY3E3MTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEgICAgICAgLT4gNzEKLWRlY3E3MTYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIgICAgICAgLT4gNzIKLWRlY3E3MTcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMKLWRlY3E3MTggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQgICAgICAgLT4gNzQKLWRlY3E3MTkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUgICAgICAgLT4gNzUKLWRlY3E3MjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYKLWRlY3E3MjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcgICAgICAgLT4gNzcKLWRlY3E3MjIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzggICAgICAgLT4gNzgKLWRlY3E3MjMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkKLQotZGVjcTczMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5ZSAgICAgICAtPiA5OTQKLWRlY3E3MzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1Ci1kZWNxNzMyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmEwICAgICAgIC0+IDUyMAotZGVjcTczMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJhMSAgICAgICAtPiA1MjEKLQotLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKLWRlY3E3NDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZjcgICAgICAgLT4gNzc3Ci1kZWNxNzQxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OAotZGVjcTc0MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNlYiAgICAgICAtPiA3ODcKLWRlY3E3NDMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2QgICAgICAgLT4gODc3Ci1kZWNxNzQ0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzlmICAgICAgIC0+IDk5NwotZGVjcTc0NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNiZiAgICAgICAtPiA5NzkKLWRlY3E3NDYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZGYgICAgICAgLT4gNzk5Ci1kZWNxNzQ3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAotCi0KLS0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCi1kZWNxNzUwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OAotZGVjcTc1MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2ZSAgICAgICAtPiA4ODgKLWRlY3E3NTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4Ci1kZWNxNzUzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZlICAgICAgIC0+IDg4OAotZGVjcTc1NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZiAgICAgICAtPiA4ODkKLWRlY3E3NTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5Ci1kZWNxNzU2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjZmICAgICAgIC0+IDg4OQotZGVjcTc1NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2ZiAgICAgICAtPiA4ODkKLQotZGVjcTc2MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZSAgICAgICAtPiA4OTgKLWRlY3E3NjEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxN2UgICAgICAgLT4gODk4Ci1kZWNxNzYyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OAotZGVjcTc2MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZSAgICAgICAtPiA4OTgKLWRlY3E3NjQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2YgICAgICAgLT4gODk5Ci1kZWNxNzY1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQotZGVjcTc2NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3ZiAgICAgICAtPiA4OTkKLWRlY3E3NjcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2YgICAgICAgLT4gODk5Ci0KLWRlY3E3NzAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWUgICAgICAgLT4gOTg4Ci1kZWNxNzcxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWVlICAgICAgIC0+IDk4OAotZGVjcTc3MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgKLWRlY3E3NzMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWUgICAgICAgLT4gOTg4Ci1kZWNxNzc0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVmICAgICAgIC0+IDk4OQotZGVjcTc3NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkKLWRlY3E3NzYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZWYgICAgICAgLT4gOTg5Ci1kZWNxNzc3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2VmICAgICAgIC0+IDk4OQotCi1kZWNxNzgwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZlICAgICAgIC0+IDk5OAotZGVjcTc4MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFmZSAgICAgICAtPiA5OTgKLWRlY3E3ODIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4Ci1kZWNxNzgzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZlICAgICAgIC0+IDk5OAotZGVjcTc4NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZiAgICAgICAtPiA5OTkKLWRlY3E3ODUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5Ci1kZWNxNzg2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmZmICAgICAgIC0+IDk5OQotZGVjcTc4NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmZiAgICAgICAtPiA5OTkKLQotLS0gTWlzY2VsbGFuZW91cyAodGVzdGVycycgcXVlcmllcywgZXRjLikKLQotZGVjcTc5MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMCAgICAgICAtPiAzMDAwMAotZGVjcTc5MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgwMCAgICAgICAtPiA4OTAwMDAKLWRlY3E3OTIgYXBwbHkgICAzMDAwMCAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGMwMDAKLWRlY3E3OTMgYXBwbHkgICA4OTAwMDAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwCi0KLS0tIHZhbHVlcyBhcm91bmQgW3VdaW50MzIgZWRnZXMgKHplcm9zIGRvbmUgZWFybGllcikKLWRlY3E4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NgotZGVjcTgwMSBhcHBseSAtMjE0NzQ4MzY0NyAgLT4gI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ3Ci1kZWNxODAyIGFwcGx5IC0yMTQ3NDgzNjQ4ICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDgKLWRlY3E4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OQotZGVjcTgwNCBhcHBseSAgMjE0NzQ4MzY0NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2Ci1kZWNxODA1IGFwcGx5ICAyMTQ3NDgzNjQ3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcKLWRlY3E4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OAotZGVjcTgwNyBhcHBseSAgMjE0NzQ4MzY0OSAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5Ci1kZWNxODA4IGFwcGx5ICA0Mjk0OTY3Mjk0ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1NWEKLWRlY3E4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YgotZGVjcTgxMCBhcHBseSAgNDI5NDk2NzI5NiAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTdhCi1kZWNxODExIGFwcGx5ICA0Mjk0OTY3Mjk3ICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2IKLQotZGVjcTgyMCBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ2IC0+IC0yMTQ3NDgzNjQ2Ci1kZWNxODIxIGFwcGx5ICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDcgLT4gLTIxNDc0ODM2NDcKLWRlY3E4MjIgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OAotZGVjcTgyMyBhcHBseSAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ5IC0+IC0yMTQ3NDgzNjQ5Ci1kZWNxODI0IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDYgLT4gIDIxNDc0ODM2NDYKLWRlY3E4MjUgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0NwotZGVjcTgyNiBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDhjNzhhZjQ4IC0+ICAyMTQ3NDgzNjQ4Ci1kZWNxODI3IGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwOGM3OGFmNDkgLT4gIDIxNDc0ODM2NDkKLWRlY3E4MjggYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NAotZGVjcTgyOSBhcHBseSAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMTE1YWZiNTViIC0+ICA0Mjk0OTY3Mjk1Ci1kZWNxODMwIGFwcGx5ICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAxMTVhZmI1N2EgLT4gIDQyOTQ5NjcyOTYKLWRlY3E4MzEgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5NwotCi0tLSBWRyB0ZXN0Y2FzZQotZGVjcTg0MCBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OAotZGVjcTg0MSBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMDAwMDAgLT4gOC4wMDAwMDAwMDAwMDAwMDAwMDBFLTE1NTAKLWRlY3E4NDIgYXBwbHkgICAgIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIC0+IDcuMDQ5MDAwMDAwMDAwMDEwNzk1NDg4MDAwMDAwMDAwMDAwRS0zMDk3Ci1kZWNxODQzIG11bHRpcGx5ICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIFJvdW5kZWQKLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIHNpeHRlZW4tYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDAsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwxMjguZGVjVGVzdF0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIHRoZSBzaXh0ZWVuLWJ5dGUgY29uY3JldGUgcmVwcmVzZW50YXRpb24uDQorLS0gSXRzIGNoYXJhY3RlcmlzdGljcyBhcmU6DQorLS0NCistLSAgIDEgYml0ICBzaWduDQorLS0gICA1IGJpdHMgY29tYmluYXRpb24gZmllbGQNCistLSAgMTIgYml0cyBleHBvbmVudCBjb250aW51YXRpb24NCistLSAxMTAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24NCistLQ0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCAxNCBiaXRzDQorLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDExNCBiaXRzICgzNCBkaWdpdHMpDQorLS0NCistLSBFbGltaXQgPSAxMjI4NyAobWF4aW11bSBlbmNvZGVkIGV4cG9uZW50KQ0KKy0tIEVtYXggICA9ICA2MTQ0IChsYXJnZXN0IGV4cG9uZW50IHZhbHVlKQ0KKy0tIEVtaW4gICA9IC02MTQzIChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkNCistLSBiaWFzICAgPSAgNjE3NiAoc3VidHJhY3RlZCBmcm9tIGVuY29kZWQgZXhwb25lbnQpID0gLUV0aW55DQorDQorLS0gVGhlIHRlc3RjYXNlcyBoZXJlIGhhdmUgb25seSBleGFjdGx5IHJlcHJlc2VudGFibGUgZGF0YSBvbiB0aGUNCistLSAnbGVmdC1oYW5kLXNpZGUnOyByb3VuZGluZyBmcm9tIHN0cmluZ3MgaXMgdGVzdGVkIGluICdiYXNlJw0KKy0tIHRlc3RjYXNlIGdyb3Vwcy4NCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KKw0KKy0tIEdlbmVyYWwgdGVzdGNhc2VzDQorLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQ0KK2RlY3EwMDEgYXBwbHkgICAjQTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTANCitkZWNxMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgLT4gI0EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQorLS0gZGVyaXZhdGl2ZSBjYW5vbmljYWwgcGxhaW4gc3RyaW5ncw0KK2RlY3EwMDMgYXBwbHkgICAjQTIwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTcuNTBFKzMNCitkZWNxMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQorZGVjcTAwNSBhcHBseSAgICNBMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNzUwDQorZGVjcTAwNiBhcHBseSAgIC03NTAgICAgICAgICAgICAgIC0+ICNBMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KK2RlY3EwMDcgYXBwbHkgICAjQTIwN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTc1LjANCitkZWNxMDA4IGFwcGx5ICAgLTc1LjAgICAgICAgICAgICAgLT4gI0EyMDdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQorZGVjcTAwOSBhcHBseSAgICNBMjA3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC43NTANCitkZWNxMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQorZGVjcTAxMSBhcHBseSAgICNBMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtMC4wNzUwDQorZGVjcTAxMiBhcHBseSAgIC0wLjA3NTAgICAgICAgICAgIC0+ICNBMjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KK2RlY3EwMTMgYXBwbHkgICAjQTIwNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwNzUwDQorZGVjcTAxNCBhcHBseSAgIC0wLjAwMDc1MCAgICAgICAgIC0+ICNBMjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMA0KK2RlY3EwMTUgYXBwbHkgICAjQTIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDAgLT4gLTAuMDAwMDA3NTANCitkZWNxMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0EyMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QwDQorZGVjcTAxNyBhcHBseSAgICNBMjA1YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNEMCAtPiAtNy41MEUtNw0KK2RlY3EwMTggYXBwbHkgICAtNy41MEUtNyAgICAgICAgICAtPiAjQTIwNWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRDANCisNCistLSBOb3JtYWxpdHkNCitkZWNxMDIwIGFwcGx5ICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0+ICMyNjA4MTM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNA0KK2RlY3EwMjEgYXBwbHkgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLT4gI2E2MDgxMzRiOWMxZTI4ZTU2ZjNjMTI3MTc3ODIzNTM0DQorZGVjcTAyMiBhcHBseSAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgICAtPiAjMjYwODA5MTI0NDkxMjQ0OTEyNDQ5MTI0NDkxMjQ0OTENCisNCistLSBObWF4IGFuZCBzaW1pbGFyDQorZGVjcTAzMSBhcHBseSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAjNzdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYNCitkZWNxMDMyIGFwcGx5ICAgIzc3ZmZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZGVjcTAzMyBhcHBseSAgIDEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICM0N2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNA0KK2RlY3EwMzQgYXBwbHkgICAjNDdmZmQzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQgLT4gMS4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzRFKzYxNDQNCistLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQ0KK2RlY3EwMzUgYXBwbHkgICAxLjIzRSs2MTQ0ICAgIC0+ICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTAzNiBhcHBseSAgICM0N2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KK2RlY3EwMzcgYXBwbHkgICAxRSs2MTQ0ICAgICAgIC0+ICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTAzOCBhcHBseSAgICM0N2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KKw0KK2RlY3EwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUNCitkZWNxMDUyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IDEyMzQ1DQorZGVjcTA1MyBhcHBseSAgIDEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzNA0KK2RlY3EwNTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQgICAgICAgLT4gMTIzNA0KK2RlY3EwNTUgYXBwbHkgICAxMjMgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMNCitkZWNxMDU2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IDEyMw0KK2RlY3EwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCitkZWNxMDU4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IDEyDQorZGVjcTA1OSBhcHBseSAgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RlY3EwNjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMQ0KK2RlY3EwNjEgYXBwbHkgICAxLjIzICAgICAgICAgICAgICAgICAgICAtPiAjMjIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMNCitkZWNxMDYyIGFwcGx5ICAgIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGEzICAgICAgIC0+IDEuMjMNCitkZWNxMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1DQorZGVjcTA2NCBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAxMjMuNDUNCisNCistLSBObWluIGFuZCBiZWxvdw0KK2RlY3EwNzEgYXBwbHkgICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzAwMDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZGVjcTA3MiBhcHBseSAgICMwMDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTQzDQorZGVjcTA3MyBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxMDc0IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZGVjcTA3NSBhcHBseSAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkZWNxMDc2IGFwcGx5ICAgIzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorDQorZGVjcTA3NyBhcHBseSAgIDAuMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjMDAwMDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICBTdWJub3JtYWwNCitkZWNxMDc4IGFwcGx5ICAgIzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgIFN1Ym5vcm1hbA0KK2RlY3EwNzkgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMEUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgU3Vibm9ybWFsDQorZGVjcTA4MCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAgICAtPiAxLjBFLTYxNzUgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KK2RlY3EwODEgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQorZGVjcTA4MiBhcHBseSAgICMwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc1ICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KK2RlY3EwODMgYXBwbHkgICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MyAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQorZGVjcTA4NCBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAxRS02MTc2ICAgICAgICAgICAgICAgICBTdWJub3JtYWwNCisNCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQgZm9yIHNpbXBsZSBjb3BpZXMsIGNoZWNrIGVkZ2UgY2FzZXMNCitkZWNxMDkwIGFwcGx5ICAgMWUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgU3Vibm9ybWFsDQorZGVjcTEwMCBhcHBseSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjMDAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbA0KKw0KKy0tIHNhbWUgYWdhaW4sIG5lZ2F0aXZlcw0KKy0tIE5tYXggYW5kIHNpbWlsYXINCitkZWNxMTIyIGFwcGx5ICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICNmN2ZmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KK2RlY3ExMjMgYXBwbHkgICAjZjdmZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZGVjcTEyNCBhcHBseSAgLTEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0IC0+ICNjN2ZmZDM0YjljMWUyOGU1NmYzYzEyNzE3NzgyMzUzNA0KK2RlY3ExMjUgYXBwbHkgICAjYzdmZmQzNGI5YzFlMjhlNTZmM2MxMjcxNzc4MjM1MzQgLT4gLTEuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0RSs2MTQ0DQorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCitkZWNxMTMwIGFwcGx5ICAtMS4yM0UrNjE0NCAgICAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KK2RlY3ExMzEgYXBwbHkgICAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTEuMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQorZGVjcTEzMiBhcHBseSAgLTFFKzYxNDQgICAgICAgLT4gI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxMTMzIGFwcGx5ICAgI2M3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KKw0KK2RlY3ExNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5YzUNCitkZWNxMTUyIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1ICAgICAgIC0+IC0xMjM0NQ0KK2RlY3ExNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MzQNCitkZWNxMTU0IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTM0ICAgICAgIC0+IC0xMjM0DQorZGVjcTE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMw0KK2RlY3ExNTYgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gLTEyMw0KK2RlY3ExNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCitkZWNxMTU4IGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAgICAgIC0+IC0xMg0KK2RlY3ExNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkZWNxMTYwIGFwcGx5ICAgI2EyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgIC0+IC0xDQorZGVjcTE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBhMw0KK2RlY3ExNjIgYXBwbHkgICAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYTMgICAgICAgLT4gLTEuMjMNCitkZWNxMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OWM1DQorZGVjcTE2NCBhcHBseSAgICNhMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNSAgICAgICAtPiAtMTIzLjQ1DQorDQorLS0gTm1pbiBhbmQgYmVsb3cNCitkZWNxMTcxIGFwcGx5ICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICM4MDA4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RlY3ExNzIgYXBwbHkgICAjODAwODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTFFLTYxNDMNCitkZWNxMTczIGFwcGx5ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RlY3ExNzQgYXBwbHkgICAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZGVjcTE3NSBhcHBseSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAtPiAjODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkZWNxMTc2IGFwcGx5ICAgIzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KKw0KK2RlY3ExNzcgYXBwbHkgIC0wLjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzgwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgU3Vibm9ybWFsDQorZGVjcTE3OCBhcHBseSAgICM4MDAwMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NCAgU3Vibm9ybWFsDQorZGVjcTE3OSBhcHBseSAgLTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwRS02MTQzICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICBTdWJub3JtYWwNCitkZWNxMTgwIGFwcGx5ICAgIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgICAgICAgIC0+IC0xLjBFLTYxNzUgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KK2RlY3ExODEgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzICAgLT4gIzgwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgICAgU3Vibm9ybWFsDQorZGVjcTE4MiBhcHBseSAgICM4MDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAgICAtPiAtMUUtNjE3NSAgICAgICAgICAgICAgICBTdWJub3JtYWwNCitkZWNxMTgzIGFwcGx5ICAtMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgIFN1Ym5vcm1hbA0KK2RlY3ExODQgYXBwbHkgICAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgICAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFN1Ym5vcm1hbA0KKw0KKy0tIHVuZGVyZmxvdyBlZGdlIGNhc2VzDQorZGVjcTE5MCBhcHBseSAgIC0xZS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBTdWJub3JtYWwNCitkZWNxMjAwIGFwcGx5ICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUtNjE3NiAtPiAjODAwMDBmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYgIFN1Ym5vcm1hbA0KKw0KKy0tIHplcm9zDQorZGVjcTQwMCBhcHBseSAgIDBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3E0MDEgYXBwbHkgICAwRS02MTc3ICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNxNDAyIGFwcGx5ICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQwMyBhcHBseSAgICMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRS02MTc2DQorZGVjcTQwNCBhcHBseSAgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNDA1IGFwcGx5ICAgIzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFLTYxNzYNCitkZWNxNDA2IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQwNyBhcHBseSAgICMyMjA3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwLjAwDQorZGVjcTQwOCBhcHBseSAgIDAgICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RlY3E0MDkgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMA0KK2RlY3E0MTAgYXBwbHkgICAwRSszICAgICAgICAgICAgICAgICAgICAtPiAjMjIwOGMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNDExIGFwcGx5ICAgIzIyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzMNCitkZWNxNDEyIGFwcGx5ICAgMEUrNjExMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQxMyBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExDQorLS0gY2xhbXBlZCB6ZXJvcy4uLg0KK2RlY3E0MTQgYXBwbHkgICAwRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNxNDE1IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDBFKzYxMTENCitkZWNxNDE2IGFwcGx5ICAgMEUrNjE0NCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjcTQxNyBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAwRSs2MTExDQorZGVjcTQxOCBhcHBseSAgIDBFKzgwMDAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3E0MTkgYXBwbHkgICAjNDNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMEUrNjExMQ0KKw0KKy0tIG5lZ2F0aXZlIHplcm9zDQorZGVjcTQyMCBhcHBseSAgLTBFLTgwMDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3E0MjEgYXBwbHkgIC0wRS02MTc3ICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNxNDIyIGFwcGx5ICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQyMyBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtNjE3Ng0KK2RlY3E0MjQgYXBwbHkgIC0wLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQyNSBhcHBseSAgICM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUtNjE3Ng0KK2RlY3E0MjYgYXBwbHkgIC0wRS0yICAgICAgICAgICAgICAgICAgICAtPiAjYTIwNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNDI3IGFwcGx5ICAgI2EyMDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wLjAwDQorZGVjcTQyOCBhcHBseSAgLTAgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RlY3E0MjkgYXBwbHkgICAjYTIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTANCitkZWNxNDMwIGFwcGx5ICAtMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gI2EyMDhjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTQzMSBhcHBseSAgICNhMjA4YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrMw0KK2RlY3E0MzIgYXBwbHkgIC0wRSs2MTExICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNDMzIGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExDQorLS0gY2xhbXBlZCB6ZXJvcy4uLg0KK2RlY3E0MzQgYXBwbHkgIC0wRSs2MTEyICAgICAgICAgICAgICAgICAtPiAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIENsYW1wZWQNCitkZWNxNDM1IGFwcGx5ICAgI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IC0wRSs2MTExDQorZGVjcTQzNiBhcHBseSAgLTBFKzYxNDQgICAgICAgICAgICAgICAgIC0+ICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3E0MzcgYXBwbHkgICAjYzNmZmMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gLTBFKzYxMTENCitkZWNxNDM4IGFwcGx5ICAtMEUrODAwMCAgICAgICAgICAgICAgICAgLT4gI2MzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBDbGFtcGVkDQorZGVjcTQzOSBhcHBseSAgICNjM2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAtMEUrNjExMQ0KKw0KKy0tIGV4cG9uZW50IGxlbmd0aHMNCitkZWNxNDQwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDcNCitkZWNxNDQxIGFwcGx5ICAgNyAtPiAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCitkZWNxNDQyIGFwcGx5ICAgIzIyMGE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzkNCitkZWNxNDQzIGFwcGx5ICAgN0UrOSAtPiAjMjIwYTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCitkZWNxNDQ0IGFwcGx5ICAgIzIyMjBjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzk5DQorZGVjcTQ0NSBhcHBseSAgIDdFKzk5IC0+ICMyMjIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RlY3E0NDYgYXBwbHkgICAjMjMwMWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAgICAgLT4gN0UrOTk5DQorZGVjcTQ0NyBhcHBseSAgIDdFKzk5OSAtPiAjMjMwMWMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCitkZWNxNDQ4IGFwcGx5ICAgIzQzZTNjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgICAgIC0+IDdFKzU5OTkNCitkZWNxNDQ5IGFwcGx5ICAgN0UrNTk5OSAtPiAjNDNlM2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCisNCistLSBTcGVjaWFscw0KK2RlY3E1MDAgYXBwbHkgICBJbmZpbml0eSAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTUwMSBhcHBseSAgICM3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTAyIGFwcGx5ICAgIzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQorZGVjcTUwMyBhcHBseSAgICM3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTA0IGFwcGx5ICAgIzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQorZGVjcTUwNSBhcHBseSAgICM3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YSAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTA2IGFwcGx5ICAgIzdhMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQorZGVjcTUwNyBhcHBseSAgICM3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTA4IGFwcGx5ICAgIzdiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IEluZmluaXR5DQorDQorZGVjcTUwOSBhcHBseSAgIE5hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTEwIGFwcGx5ICAgIzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjIC0+ICM3YzAwM2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3Yw0KK2RlY3E1MTEgYXBwbHkgICAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gTmFODQorZGVjcTUxMiBhcHBseSAgICM3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZCAtPiAjN2MwMDNkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2QNCitkZWNxNTEzIGFwcGx5ICAgIzdkMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IE5hTg0KK2RlY3E1MTQgYXBwbHkgICAjN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2UgLT4gIzdlMDAzZTdlN2M3ZTdlN2U3ZTdjN2U3ZTdlN2U3YzdlDQorZGVjcTUxNSBhcHBseSAgICM3ZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiBzTmFODQorZGVjcTUxNiBhcHBseSAgICM3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZiAtPiAjN2UwMDNmN2Y3YzdmN2Y3ZjdmN2M3ZjdmN2Y3ZjdjN2YNCitkZWNxNTE3IGFwcGx5ICAgIzdmMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IHNOYU4NCitkZWNxNTE4IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+IHNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkZWNxNTE5IGFwcGx5ICAgIzdmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+ICM3ZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KKw0KK2RlY3E1MjAgYXBwbHkgICAtSW5maW5pdHkgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTUyMSBhcHBseSAgICNmODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3ODc4Nzg3OCAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTIyIGFwcGx5ICAgI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KK2RlY3E1MjMgYXBwbHkgICAjZjk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5Nzk3OTc5NzkgLT4gI2Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTUyNCBhcHBseSAgICNmOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtSW5maW5pdHkNCitkZWNxNTI1IGFwcGx5ICAgI2ZhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhN2E3YTdhIC0+ICNmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RlY3E1MjYgYXBwbHkgICAjZmEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLUluZmluaXR5DQorZGVjcTUyNyBhcHBseSAgICNmYjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YjdiN2I3YiAtPiAjZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTI4IGFwcGx5ICAgI2ZiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1JbmZpbml0eQ0KKw0KK2RlY3E1MjkgYXBwbHkgICAtTmFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTUzMCBhcHBseSAgICNmYzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YyAtPiAjZmMwMDNjN2M3YzdjN2M3YzdjN2M3YzdjN2M3YzdjN2MNCitkZWNxNTMxIGFwcGx5ICAgI2ZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IC1OYU4NCitkZWNxNTMyIGFwcGx5ICAgI2ZkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkIC0+ICNmYzAwM2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZDdkN2Q3ZA0KK2RlY3E1MzMgYXBwbHkgICAjZmQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gLU5hTg0KK2RlY3E1MzQgYXBwbHkgICAjZmU3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2U3ZTdlN2UgLT4gI2ZlMDAzZTdlN2M3ZTdlN2U3ZTdjN2U3ZTdlN2U3YzdlDQorZGVjcTUzNSBhcHBseSAgICNmZTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTg0KK2RlY3E1MzYgYXBwbHkgICAjZmY3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2Y3ZjdmN2YgLT4gI2ZlMDAzZjdmN2M3ZjdmN2Y3ZjdjN2Y3ZjdmN2Y3YzdmDQorZGVjcTUzNyBhcHBseSAgICNmZjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAtc05hTg0KK2RlY3E1MzggYXBwbHkgICAjZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmYgLT4gLXNOYU45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkZWNxNTM5IGFwcGx5ICAgI2ZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmIC0+ICNmZTAwMGZmM2ZjZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZg0KKw0KK2RlY3E1NDAgYXBwbHkgICBOYU4gICAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkZWNxNTQxIGFwcGx5ICAgTmFOMCAgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZGVjcTU0MiBhcHBseSAgIE5hTjEgICAgICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RlY3E1NDMgYXBwbHkgICBOYU4xMiAgICAgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCitkZWNxNTQ0IGFwcGx5ICAgTmFONzkgICAgICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5DQorZGVjcTU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgICAgICAgIC0+ICM3YzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDljNQ0KK2RlY3E1NDYgYXBwbHkgICBOYU4xMjM0NTYgICAgICAgICAtPiAjN2MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjhlNTYNCitkZWNxNTQ3IGFwcGx5ICAgTmFONzk5Nzk5ICAgICAgICAgLT4gIzdjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGY3ZmRmDQorZGVjcTU0OCBhcHBseSAgIE5hTjc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OTc5OSAgLT4gIzdjMDAzZGZmN2ZkZmY3ZmRmZjdmZGZmN2ZkZmY3ZmRmDQorZGVjcTU0OSBhcHBseSAgIE5hTjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzdjMDAwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorZGVjcTU1MCBhcHBseSAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIzZlMDgwZmYzZmNmZjNmY2ZmM2ZjZmYzZmNmZjNmY2ZmDQorDQorLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UNCitkZWNxNjAxIGFwcGx5ICAgMUUrNjE0NCAgICAgICAgICAgICAgICAgLT4gIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjAyIGFwcGx5ICAgIzQ3ZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0DQorZGVjcTYwMyBhcHBseSAgIDFFKzYxNDMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYwNCBhcHBseSAgICM0M2ZmYzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzDQorZGVjcTYwNSBhcHBseSAgIDFFKzYxNDIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYwNiBhcHBseSAgICM0M2ZmYzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDINCitkZWNxNjA3IGFwcGx5ICAgMUUrNjE0MSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjA4IGFwcGx5ICAgIzQzZmZjMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQxDQorZGVjcTYwOSBhcHBseSAgIDFFKzYxNDAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYxMCBhcHBseSAgICM0M2ZmYzAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQwDQorZGVjcTYxMSBhcHBseSAgIDFFKzYxMzkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYxMiBhcHBseSAgICM0M2ZmYzAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkNCitkZWNxNjEzIGFwcGx5ICAgMUUrNjEzOCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjE0IGFwcGx5ICAgIzQzZmZjMDAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM4DQorZGVjcTYxNSBhcHBseSAgIDFFKzYxMzcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYxNiBhcHBseSAgICM0M2ZmYzAwMDAwODAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM3DQorZGVjcTYxNyBhcHBseSAgIDFFKzYxMzYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYxOCBhcHBseSAgICM0M2ZmYzAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYNCitkZWNxNjE5IGFwcGx5ICAgMUUrNjEzNSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjIwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM1DQorZGVjcTYyMSBhcHBseSAgIDFFKzYxMzQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYyMiBhcHBseSAgICM0M2ZmYzAwMDAwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM0DQorZGVjcTYyMyBhcHBseSAgIDFFKzYxMzMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYyNCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzMNCitkZWNxNjI1IGFwcGx5ICAgMUUrNjEzMiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjI2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMyDQorZGVjcTYyNyBhcHBseSAgIDFFKzYxMzEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYyOCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTMxDQorZGVjcTYyOSBhcHBseSAgIDFFKzYxMzAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYzMCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzANCitkZWNxNjMxIGFwcGx5ICAgMUUrNjEyOSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjMyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTI5DQorZGVjcTYzMyBhcHBseSAgIDFFKzYxMjggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYzNCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwRSs2MTI4DQorZGVjcTYzNSBhcHBseSAgIDFFKzYxMjcgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTYzNiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDBFKzYxMjcNCitkZWNxNjM3IGFwcGx5ICAgMUUrNjEyNiAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjM4IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDA0MDAwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRSs2MTI2DQorZGVjcTYzOSBhcHBseSAgIDFFKzYxMjUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTY0MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDgwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwRSs2MTI1DQorZGVjcTY0MSBhcHBseSAgIDFFKzYxMjQgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTY0MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDBFKzYxMjQNCitkZWNxNjQzIGFwcGx5ICAgMUUrNjEyMyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwIENsYW1wZWQNCitkZWNxNjQ0IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwRSs2MTIzDQorZGVjcTY0NSBhcHBseSAgIDFFKzYxMjIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTY0NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDAwRSs2MTIyDQorZGVjcTY0NyBhcHBseSAgIDFFKzYxMjEgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCBDbGFtcGVkDQorZGVjcTY0OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwMDBFKzYxMjENCitkZWNxNjQ5IGFwcGx5ICAgMUUrNjEyMCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwIENsYW1wZWQNCitkZWNxNjUwIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDQwMDAwMDAwICAgICAgIC0+IDEuMDAwMDAwMDAwRSs2MTIwDQorZGVjcTY1MSBhcHBseSAgIDFFKzYxMTkgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMCBDbGFtcGVkDQorZGVjcTY1MiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDAwRSs2MTE5DQorZGVjcTY1MyBhcHBseSAgIDFFKzYxMTggICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCBDbGFtcGVkDQorZGVjcTY1NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMCAgICAgICAtPiAxLjAwMDAwMDBFKzYxMTgNCitkZWNxNjU1IGFwcGx5ICAgMUUrNjExNyAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwIENsYW1wZWQNCitkZWNxNjU2IGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwICAgICAgIC0+IDEuMDAwMDAwRSs2MTE3DQorZGVjcTY1NyBhcHBseSAgIDFFKzYxMTYgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCBDbGFtcGVkDQorZGVjcTY1OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMCAgICAgICAtPiAxLjAwMDAwRSs2MTE2DQorZGVjcTY1OSBhcHBseSAgIDFFKzYxMTUgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCBDbGFtcGVkDQorZGVjcTY2MCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMCAgICAgICAtPiAxLjAwMDBFKzYxMTUNCitkZWNxNjYxIGFwcGx5ICAgMUUrNjExNCAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwIENsYW1wZWQNCitkZWNxNjYyIGFwcGx5ICAgIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwICAgICAgIC0+IDEuMDAwRSs2MTE0DQorZGVjcTY2MyBhcHBseSAgIDFFKzYxMTMgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MCBDbGFtcGVkDQorZGVjcTY2NCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MCAgICAgICAtPiAxLjAwRSs2MTEzDQorZGVjcTY2NSBhcHBseSAgIDFFKzYxMTIgICAgICAgICAgICAgICAgIC0+ICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCBDbGFtcGVkDQorZGVjcTY2NiBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgICAgICAtPiAxLjBFKzYxMTINCitkZWNxNjY3IGFwcGx5ICAgMUUrNjExMSAgICAgICAgICAgICAgICAgLT4gIzQzZmZjMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZGVjcTY2OCBhcHBseSAgICM0M2ZmYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAgICAtPiAxRSs2MTExDQorZGVjcTY2OSBhcHBseSAgIDFFKzYxMTAgICAgICAgICAgICAgICAgIC0+ICM0M2ZmODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RlY3E2NzAgYXBwbHkgICAjNDNmZjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgICAgLT4gMUUrNjExMA0KKw0KKy0tIFNlbGVjdGVkIERQRCBjb2Rlcw0KK2RlY3E3MDAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgICAgLT4gMA0KK2RlY3E3MDEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAgICAgLT4gOQ0KK2RlY3E3MDIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAgICAgLT4gMTANCitkZWNxNzAzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5ICAgICAgIC0+IDE5DQorZGVjcTcwNCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMCAgICAgICAtPiAyMA0KK2RlY3E3MDUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkgICAgICAgLT4gMjkNCitkZWNxNzA2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwICAgICAgIC0+IDMwDQorZGVjcTcwNyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOSAgICAgICAtPiAzOQ0KK2RlY3E3MDggYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAgICAgICAgLT4gNDANCitkZWNxNzA5IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5ICAgICAgIC0+IDQ5DQorZGVjcTcxMCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MCAgICAgICAtPiA1MA0KK2RlY3E3MTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkgICAgICAgLT4gNTkNCitkZWNxNzEyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwICAgICAgIC0+IDYwDQorZGVjcTcxMyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OSAgICAgICAtPiA2OQ0KK2RlY3E3MTQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAgICAgICAgLT4gNzANCitkZWNxNzE1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxICAgICAgIC0+IDcxDQorZGVjcTcxNiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MiAgICAgICAtPiA3Mg0KK2RlY3E3MTcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMgICAgICAgLT4gNzMNCitkZWNxNzE4IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0ICAgICAgIC0+IDc0DQorZGVjcTcxOSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NSAgICAgICAtPiA3NQ0KK2RlY3E3MjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYgICAgICAgLT4gNzYNCitkZWNxNzIxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3ICAgICAgIC0+IDc3DQorZGVjcTcyMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OCAgICAgICAtPiA3OA0KK2RlY3E3MjMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkgICAgICAgLT4gNzkNCisNCitkZWNxNzMwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjllICAgICAgIC0+IDk5NA0KK2RlY3E3MzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOWYgICAgICAgLT4gOTk1DQorZGVjcTczMiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJhMCAgICAgICAtPiA1MjANCitkZWNxNzMzIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmExICAgICAgIC0+IDUyMQ0KKw0KKy0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzDQorZGVjcTc0MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmNyAgICAgICAtPiA3NzcNCitkZWNxNzQxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2Y4ICAgICAgIC0+IDc3OA0KK2RlY3E3NDIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWIgICAgICAgLT4gNzg3DQorZGVjcTc0MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZCAgICAgICAtPiA4NzcNCitkZWNxNzQ0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzlmICAgICAgIC0+IDk5Nw0KK2RlY3E3NDUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzYmYgICAgICAgLT4gOTc5DQorZGVjcTc0NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNkZiAgICAgICAtPiA3OTkNCitkZWNxNzQ3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZlICAgICAgIC0+IDg4OA0KKw0KKw0KKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpDQorZGVjcTc1MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ZSAgICAgICAtPiA4ODgNCitkZWNxNzUxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTZlICAgICAgIC0+IDg4OA0KK2RlY3E3NTIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNmUgICAgICAgLT4gODg4DQorZGVjcTc1MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2ZSAgICAgICAtPiA4ODgNCitkZWNxNzU0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZmICAgICAgIC0+IDg4OQ0KK2RlY3E3NTUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNmYgICAgICAgLT4gODg5DQorZGVjcTc1NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2ZiAgICAgICAtPiA4ODkNCitkZWNxNzU3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzZmICAgICAgIC0+IDg4OQ0KKw0KK2RlY3E3NjAgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN2UgICAgICAgLT4gODk4DQorZGVjcTc2MSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3ZSAgICAgICAtPiA4OTgNCitkZWNxNzYyIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjdlICAgICAgIC0+IDg5OA0KK2RlY3E3NjMgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzN2UgICAgICAgLT4gODk4DQorZGVjcTc2NCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZiAgICAgICAtPiA4OTkNCitkZWNxNzY1IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTdmICAgICAgIC0+IDg5OQ0KK2RlY3E3NjYgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyN2YgICAgICAgLT4gODk5DQorZGVjcTc2NyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3ZiAgICAgICAtPiA4OTkNCisNCitkZWNxNzcwIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGVlICAgICAgIC0+IDk4OA0KK2RlY3E3NzEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZWUgICAgICAgLT4gOTg4DQorZGVjcTc3MiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJlZSAgICAgICAtPiA5ODgNCitkZWNxNzczIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2VlICAgICAgIC0+IDk4OA0KK2RlY3E3NzQgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwZWYgICAgICAgLT4gOTg5DQorZGVjcTc3NSBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFlZiAgICAgICAtPiA5ODkNCitkZWNxNzc2IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMmVmICAgICAgIC0+IDk4OQ0KK2RlY3E3NzcgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzZWYgICAgICAgLT4gOTg5DQorDQorZGVjcTc4MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBmZSAgICAgICAtPiA5OTgNCitkZWNxNzgxIGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMWZlICAgICAgIC0+IDk5OA0KK2RlY3E3ODIgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyZmUgICAgICAgLT4gOTk4DQorZGVjcTc4MyBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNmZSAgICAgICAtPiA5OTgNCitkZWNxNzg0IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGZmICAgICAgIC0+IDk5OQ0KK2RlY3E3ODUgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxZmYgICAgICAgLT4gOTk5DQorZGVjcTc4NiBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJmZiAgICAgICAtPiA5OTkNCitkZWNxNzg3IGFwcGx5ICAgIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM2ZmICAgICAgIC0+IDk5OQ0KKw0KKy0tIE1pc2NlbGxhbmVvdXMgKHRlc3RlcnMnIHF1ZXJpZXMsIGV0Yy4pDQorDQorZGVjcTc5MCBhcHBseSAgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMCAgICAgICAtPiAzMDAwMA0KK2RlY3E3OTEgYXBwbHkgICAjMjIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4MDAgICAgICAgLT4gODkwMDAwDQorZGVjcTc5MiBhcHBseSAgIDMwMDAwIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwYzAwMA0KK2RlY3E3OTMgYXBwbHkgICA4OTAwMDAgLT4gIzIyMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ODAwDQorDQorLS0gdmFsdWVzIGFyb3VuZCBbdV1pbnQzMiBlZGdlcyAoemVyb3MgZG9uZSBlYXJsaWVyKQ0KK2RlY3E4MDAgYXBwbHkgLTIxNDc0ODM2NDYgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0Ng0KK2RlY3E4MDEgYXBwbHkgLTIxNDc0ODM2NDcgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0Nw0KK2RlY3E4MDIgYXBwbHkgLTIxNDc0ODM2NDggIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OA0KK2RlY3E4MDMgYXBwbHkgLTIxNDc0ODM2NDkgIC0+ICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OQ0KK2RlY3E4MDQgYXBwbHkgIDIxNDc0ODM2NDYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0Ng0KK2RlY3E4MDUgYXBwbHkgIDIxNDc0ODM2NDcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0Nw0KK2RlY3E4MDYgYXBwbHkgIDIxNDc0ODM2NDggIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OA0KK2RlY3E4MDcgYXBwbHkgIDIxNDc0ODM2NDkgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OQ0KK2RlY3E4MDggYXBwbHkgIDQyOTQ5NjcyOTQgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YQ0KK2RlY3E4MDkgYXBwbHkgIDQyOTQ5NjcyOTUgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1Yg0KK2RlY3E4MTAgYXBwbHkgIDQyOTQ5NjcyOTYgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YQ0KK2RlY3E4MTEgYXBwbHkgIDQyOTQ5NjcyOTcgIC0+ICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3Yg0KKw0KK2RlY3E4MjAgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NiAtPiAtMjE0NzQ4MzY0Ng0KK2RlY3E4MjEgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAtMjE0NzQ4MzY0Nw0KK2RlY3E4MjIgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OCAtPiAtMjE0NzQ4MzY0OA0KK2RlY3E4MjMgYXBwbHkgICNhMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OSAtPiAtMjE0NzQ4MzY0OQ0KK2RlY3E4MjQgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NiAtPiAgMjE0NzQ4MzY0Ng0KK2RlY3E4MjUgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0NyAtPiAgMjE0NzQ4MzY0Nw0KK2RlY3E4MjYgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OCAtPiAgMjE0NzQ4MzY0OA0KK2RlY3E4MjcgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDA4Yzc4YWY0OSAtPiAgMjE0NzQ4MzY0OQ0KK2RlY3E4MjggYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YSAtPiAgNDI5NDk2NzI5NA0KK2RlY3E4MjkgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU1YiAtPiAgNDI5NDk2NzI5NQ0KK2RlY3E4MzAgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YSAtPiAgNDI5NDk2NzI5Ng0KK2RlY3E4MzEgYXBwbHkgICMyMjA4MDAwMDAwMDAwMDAwMDAwMDAwMDExNWFmYjU3YiAtPiAgNDI5NDk2NzI5Nw0KKw0KKy0tIFZHIHRlc3RjYXNlDQorZGVjcTg0MCBhcHBseSAgICAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OA0KK2RlY3E4NDEgYXBwbHkgICAgIzIwODAwMDAwMDAwMDAwMDA4MDAwMDAwMDAwMDAwMDAwIC0+IDguMDAwMDAwMDAwMDAwMDAwMDAwRS0xNTUwDQorZGVjcTg0MiBhcHBseSAgICAjMUVGOTg0OTAwMDAwMDAwMTBGNkU0RTAwMDAwMDAwMDAgLT4gNy4wNDkwMDAwMDAwMDAwMTA3OTU0ODgwMDAwMDAwMDAwMDBFLTMwOTcNCitkZWNxODQzIG11bHRpcGx5ICMyMDgwMDAwMDAwMDAwMDAwODAwMDAwMDAwMDAwMDAwMCAjMjA4MDAwMDAwMDAwMDAwMEYyOTQwMDAwMDAxNzI2MzYgLT4gIzFFRjk4NDkwMDAwMDAwMDEwRjZFNEUwMDAwMDAwMDAwIFJvdW5kZWQNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFGTUEuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CmluZGV4IGQ4ODQ1NTMuLjIzNTNmMmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUZNQS5kZWNUZXN0CkBAIC0xLDE3ODYgKzEsMTc4NiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUZNQS5kZWNUZXN0IC0tIGRlY1F1YWQgRnVzZWQgTXVsdGlwbHkgQWRkICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOgotLS0gICAxLiBTYW5pdHkgY2hlY2tzIGFuZCBvdGhlciB0aHJlZS1vcGVyYW5kIHRlc3RzIChlc3BlY2lhbGx5IHRob3NlCi0tLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQotLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQotLS0gICAzLiBBZGRpdGlvbiB0ZXN0cyAoZmlyc3Qgb3BlcmFuZCBpcyAxKQotLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlCi0tLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQotLS0gYWxzbyBpbmhlcmVudGx5IGNoZWNrIHRoZSBsZWZ0LXRvLXJpZ2h0IHByb3BlcnRpZXMuCi0KLS0tIFNhbml0eSBjaGVja3MKLWRxZm1hMDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDIKLWRxZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKLWRxZm1hMDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcKLWRxZm1hMDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTAKLWRxZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKLWRxZm1hMDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDEKLWRxZm1hMDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTEKLWRxZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKLWRxZm1hMDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDAKLWRxZm1hMDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDEKLWRxZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKLWRxZm1hMDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzIKLWRxZm1hMDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDAKLWRxZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKLWRxZm1hMDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDEKLWRxZm1hMDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzIKLQotLS0gbm9uLWludGVnZXIgZXhhY3RzCi1kcWZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCi1kcWZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwCi1kcWZtYTAxMDIgIGZtYSAgICA0OS4yICAgLTQuOCAgIDIzLjMgIC0+ICAtMjEyLjg2Ci1kcWZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKLWRxZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgKLWRxZm1hMDEwNSAgZm1hICAgIDYuMTMgICAtMTYxICAgNjUuOSAgLT4gIC05MjEuMDMKLWRxZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1Ci1kcWZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4Ci1kcWZtYTAxMDggIGZtYSAgICA5My4zICAgMC4xOSAgMC4yMjYgIC0+ICAxNy45NTMKLWRxZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKLWRxZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjIKLWRxZm1hMDExMSAgZm1hICAtMC40MDkgICAgIDEzICAgMjAuNCAgLT4gIDE1LjA4MwotZHFmbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAotZHFmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4Ci1kcWZtYTAxMTQgIGZtYSAgICAxLjM2ICAwLjk4NCAgMC40OTMgIC0+ICAxLjgzMTI0Ci1kcWZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgotZHFmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4Ci1kcWZtYTAxMTcgIGZtYSAgICAgNjY2ICAwLjI0NyAgIDI1LjQgIC0+ICAxODkuOTAyCi1kcWZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4Ci1kcWZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0Ci1kcWZtYTAxMjAgIGZtYSAgIC05MS42ICAgNS4yOSAgMC4xNTMgIC0+ICAtNDg0LjQxMQotCi0tLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gKLS0tIGlzIHByZWNlZGVkIGJ5IHRoZSByZXN1bHQgb2YgdW5mdXNlZCBtdWx0aXBseSBhbmQgYWRkCi0tLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OEUrMzgKLWRxZm1hMDIwMiAgZm1hICAgICAgIDY4NTM3OTg1ODYxMzU1ODY0NDU3LjU2OTQgICAgICA2NTY1ODc1NzYyOTcyMDg2NjA1Ljg1OTY5ICAgICAgIDM1ODkyNjM0NDQ3MjM2NzUzLjE3MjgxMiAgLT4gIDQuNTAwMTE5MDAyMTAwMDAwMjA5NDY5NzI5Mzc1Njk4Nzc5RSszOCBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDUuOTk2MjQ4NDY5NTg0NTk0MzQ2ODU4ODgxNjIwMTg1NTE0RSs0MQotZHFmbWEwMjA4ICBmbWEgICAgICAgICAgODkyNjE4MjIzNDQ3Mjc2Mjg1NzEuOSAgICAgIDY3MTc1OTU4NDU2NTQxMzEzODMzMzYuODkgICAgICA1MDYxMDM2NDk3Mjg4Nzk2MDc2MjY2LjExICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTNFKzQxIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS44OTkyNDI5Njg2NzgyNTY5MjQwMjE1OTQ3NzA4NzQwNzBFKzM0Ci1kcWZtYTAyMTAgIGZtYSAgICAgICAzMjA1MDYyMzcyMzI0NDg2ODUuNDk1OTcxICAgICAgIDU5MjU3NTk3NzY0MDE3OTY3Ljk4NDQ0OCAgICAgIDMyMDU2MTUyMzkwNzc3MTE1ODk5MTIuODUgIC0+ICAxLjg5OTI0Mjk2ODY3ODI1NjkyNDAyMTU5NDc3MDg3NDA3MUUrMzQgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOUUrMzcKLWRxZm1hMDIxNSAgZm1hICAgICAgICAyMjAyNDc4NDMyNTkxMTIyNjMuMTc5OTUgICAgICAgMzIxMzkyMzQwMjg3OTg3OTc5MDAyLjgwICAgICAgICA0NzUzMzI3OTgxOTk5NzE2NzY1NTQ0MCAgLT4gIDcuMDc4NTk2OTc4ODQyODA5NTM3OTI5Njk5OTU0ODYwMzA4RSszNyBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuMjI0OTU1NjY3NTgxNDI3NTU5NzU0MTA2ODYyMzUwNzQzRSszNwotZHFmbWEwMjI2ICBmbWEgICAgICAgMjM4ODA3Mjk3OTAzNjg4ODA0MTIuMTQ0OSAgICAgICA1MTI5NDczMzM4MjcwNjQ3MTkuNTU0MDcgICAgICAyMTcxMTc0Mzg0MTk1OTA4MjQ1MDIuOTYzICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDRFKzM3IEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgLTIuNTMwMDk0MDQzMjUzMTQ4ODA2MjcyMjc2MzY4NTc5MTQ0RSs0MgotZHFmbWEwMjI5ICBmbWEgICAgICAgIDI1Mzk4OTIzNTcwMTYwOTk3MDYuNDEyNiAgICAgIC05OTYxNDIyMzI2Njc1MDQ4MTc3MTc0MzUgICAgICAgNTM2ODIwODI1OTgzMTU5NDk0MjUuOTM3ICAtPiAgLTIuNTMwMDk0MDQzMjUzMTQ4ODA2MjcyMjc2MzY4NTc5MTQzRSs0MiBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDU0RSszNwotZHFmbWEwMjMzICBmbWEgICAgICAgIDQ1NDYzMzk0OTEzNDE2MjQ0NjQuMDgwNCAgICAgICAgICAgIDM3Njg3MTc4NjQxNjkyMDU1ODEgICAgICAgODM1Nzg5ODAyNzg2OTAzOTUxODQuNjIwICAtPiAgMS43MTMzODcwODU3NTk3MTE5NTQzMTkzOTE0MTI3ODg0NTNFKzM3IEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNC4wNjIyNzU2NjM0MDU4MjM3MTY0MTE1NzkxMTc3NzE1NDdFKzM1Ci1kcWZtYTAyMzUgIGZtYSAgICAgICAgNDA5MjQyMTE5NDMzODE2MTMxLjQyMjUzICAgICAgOTkyNjMzODE1MTY2NzQxNTAxLjQ3NzI0OSAgICAgICAgNzAxNzk2MzY1NDQ0MTY3NTYxMjk1NDYgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0OEUrMzUgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA2LjAwMjYwNDMyNzczMjU2ODQ5MDU2MjI0OTg3NTMwNjgyM0UrNDcKLWRxZm1hMDI1OCAgZm1hICAgICAgICA4MTc5NDEzMzY1OTM1NDE3NDIxNTk2ODQgICAgICAgNzMzODY3MzM5NzY5MzEwNzI5MjY2NTk4ICAgICAgNzg1NjM4NDQ2NTA5NDI0MTkzMTE4MzAuOCAgLT4gIDYuMDAyNjA0MzI3NzMyNTY4NDkwNTYyMjQ5ODc1MzA2ODIyRSs0NyBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAyNzAyMjUxNDM4MTQ1MjE5NzUxMDEwMzM5NTI4Mzg3NEUrMzkKLWRxZm1hMDI2NCAgZm1hICAgICAgIDM4NzYxNzMxMDE2OTE2MTI3MC43Mzc1MzIgICAgIC01MjI5NDQyNzAzNDE0OTU2MDYxMjE2LjYyICAgICAgNTc2NjU2NjY4MTY2NTI5NjcxNTA0NzMuNSAgLT4gIC0yLjAyNzAyMjUxNDM4MTQ1MjE5NzUxMDEwMzM5NTI4Mzg3M0UrMzkgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtNy44NTY1MjUwMzk4MDM1NTQwMDExNDQwODk4NDI3MzAzNjFFKzM3Ci1kcWZtYTAyNjcgIGZtYSAgICAgIC04NDc2NTU4NDU3MjA1NjUyNzQ3MDEuMjEwICAgICAgICA5MjY4NTMxNjU2NDExNzczOS44Mzk4NCAgICAgIDIyNzgwOTUwMDQxMzc2NDI0NDI5LjU2ODYgIC0+ICAtNy44NTY1MjUwMzk4MDM1NTQwMDExNDQwODk4NDI3MzAzNjBFKzM3IEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS42OTU1MTU1NjIwMTE1MjA3NDYxMjU2MDc1MDIyMzc1NTlFKzM4Ci1kcWZtYTAyNjggIGZtYSAgICAgICAgICAyMTU5MDI5MDM2NTEyNzY4NS4zNjc1ICAgICAgIDc4NTMxMzkyMjc1NzY1NDEzNzk0MjYuOCAgICAgICAtMzI3NTg1OTQzNzIzNjE4MC43NjE1NDQgIC0+ICAxLjY5NTUxNTU2MjAxMTUyMDc0NjEyNTYwNzUwMjIzNzU1OEUrMzggSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtOC40NDg0MjI5MzU3ODMyODkyMTk3NDgxMTUwMzgwMTQ3MTBFKzM4Ci1kcWZtYTAyNjkgIGZtYSAgICAgIC05NzQzMjA2MzYyNzI4NjI2OTcuOTcxNTg2ICAgICAgODY3MTA5MTAzNjQxODYwMjQ3NDQwLjc1NiAgICAgICAgLTk3NzUxNzA3NzU5MDI0NTQ3NjIuOTggIC0+ICAtOC40NDg0MjI5MzU3ODMyODkyMTk3NDgxMTUwMzgwMTQ3MDlFKzM4IEluZXhhY3QgUm91bmRlZAotCi0tLSBDYXNlcyB3aGVyZSBtdWx0aXBseSB3b3VsZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaWYgc2VwYXJhdGUKLWRxZm1hMDMwMCAgZm1hICAgOWUrNjE0NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTAzMDEgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFmbWEwMzAyICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTFlKzYxNDQgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQKLWRxZm1hMDMwMyAgZm1hICAgMWUrNjE0NCAgICAxMCAgIC05ZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCBDbGFtcGVkCi0tLSBzdWJub3JtYWwgZXRjLgotZHFmbWEwMzA1ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMCAgICAgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFmbWEwMzA2ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMSAgICAgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFmbWEwMzA3ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMWUtNjE3NiAgIC0+IDFFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gSW5maW5pdGUgY29tYmluYXRpb25zCi1kcWZtYTA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5Ci1kcWZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKLWRxZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5Ci1kcWZtYTA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5Ci1kcWZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBUcmlwbGUgTmFOIHByb3BhZ2F0aW9uCi1kcWZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjIKLWRxZm1hMDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMwotZHFmbWEwOTAyIGZtYSAgMCAgICAgMCAgICAgTmFONSAgIC0+ICBOYU41Ci0tLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcKLS0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQotZHFmbWEwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFmbWEyMDAwIGZtYSAgMiAgICAgIDIgICAwZSs2MTQ0ICAtPiA0Ci1kcWZtYTIwMDEgZm1hICAyICAgICAgMyAgIDBlKzYxNDQgIC0+IDYKLWRxZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrNjE0NCAgLT4gNQotZHFmbWEyMDAzIGZtYSAgNSAgICAgIDIgICAwZSs2MTQ0ICAtPiAxMAotZHFmbWEyMDA0IGZtYSAgMS4yMCAgIDIgICAwZSs2MTQ0ICAtPiAyLjQwCi1kcWZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzYxNDQgIC0+IDAuMDAKLWRxZm1hMjAwNiBmbWEgIDEuMjAgIC0yICAgMGUrNjE0NCAgLT4gLTIuNDAKLWRxZm1hMjAwNyBmbWEgIC0xLjIwICAyICAgMGUrNjE0NCAgLT4gLTIuNDAKLWRxZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrNjE0NCAgLT4gMC4wMAotZHFmbWEyMDA5IGZtYSAgLTEuMjAgLTIgICAwZSs2MTQ0ICAtPiAyLjQwCi1kcWZtYTIwMTAgZm1hICA1LjA5IDcuMSAgIDBlKzYxNDQgIC0+IDM2LjEzOQotZHFmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wCi1kcWZtYTIwMTIgZm1hICAyLjUwICAgNCAgIDBlKzYxNDQgIC0+IDEwLjAwCi1kcWZtYTIwMTMgZm1hICAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIDBlKzYxNDQgIC0+IDEuMjM0NTY3ODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKLWRxZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDAKLWRxZm1hMjAxNiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFmbWEyMDE3IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgICAwZSs2MTQ0ICAtPiAtOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTIwMTggZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxZm1hMjAxOSBmbWEgIC05Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gIDk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSB6ZXJvcywgZXRjLgotZHFmbWEyMDIxIGZtYSAgIDAgICAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwCi1kcWZtYTIwMjIgZm1hICAgMCAgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKLWRxZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAotZHFmbWEyMDI0IGZtYSAgLTAgICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCi1kcWZtYTIwMjUgZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKLWRxZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyMDI3IGZtYSAgLTAuMCAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTIwMjggZm1hICAtMC4wICAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKLWRxZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMAotZHFmbWEyMDMxIGZtYSAgIDAwLjAwICAwLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCi1kcWZtYTIwMzIgZm1hICAgMDAuMDAgIDBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kcWZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi1kcWZtYTIwMzQgZm1hICAtNS4wMCAgIDFFLTMgICAgMGUrNjE0NCAgLT4gLTAuMDA1MDAKLWRxZm1hMjAzNSBmbWEgIC0wMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMAotZHFmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMAotZHFmbWEyMDM3IGZtYSAgLTBFLTMgICAwMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZHFmbWEyMDM4IGZtYSAgIDUuMDAgIC0xRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwCi1kcWZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAKLWRxZm1hMjA0MCBmbWEgICAwMC4wMCAtMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRxZm1hMjA0MSBmbWEgICAwRS0zICAtMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKLWRxZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMAotZHFmbWEyMDQzIGZtYSAgLTAwLjAwIC0wLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwCi1kcWZtYTIwNDQgZm1hICAtMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kcWZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKLWRxZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAzLjYwCi1kcWZtYTIwNTEgZm1hICA3ICAgIDMgICAgICAgICAgMGUrNjE0NCAgLT4gMjEKLWRxZm1hMjA1MiBmbWEgIDAuOSAgMC44ICAgICAgICAwZSs2MTQ0ICAtPiAwLjcyCi1kcWZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrNjE0NCAgLT4gMC4wCi1kcWZtYTIwNTQgZm1hICA2NTQzMjEgNjU0MzIxICAgMGUrNjE0NCAgLT4gNDI4MTM1OTcxMDQxCi0KLWRxZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrOQotZHFmbWEyMDYxIGZtYSAgMTIzLjQ1IDFlOCAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMAotZHFmbWEyMDYyIGZtYSAgMTIzLjQ1IDFlKzkgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMQotZHFmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMgotZHFmbWEyMDY0IGZtYSAgMTIzLjQ1IDFlMTEgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMwotZHFmbWEyMDY1IGZtYSAgMTIzLjQ1IDFlMTIgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxNAotZHFmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxNQotCi0KLS0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3RocwotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRxZm1hMjA4MCBmbWEgIDAuMSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45Ci1kcWZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQotZHFmbWEyMDkwIGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKLWRxZm1hMjA5NCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45Ci0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKLWRxZm1hMjEwMSBmbWEgIDkgOSAgICAgMGUrNjE0NCAgLT4gODEKLWRxZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzYxNDQgIC0+IDgxMAotZHFmbWEyMTAzIGZtYSAgOSA5MDAgICAgIDBlKzYxNDQgIC0+IDgxMDAKLWRxZm1hMjEwNCBmbWEgIDkgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAKLWRxZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMAotZHFmbWEyMTA2IGZtYSAgOSA5MDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAKLWRxZm1hMjEwNyBmbWEgIDkgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAKLWRxZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMAotZHFmbWEyMTA5IGZtYSAgOSA5MDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAKLWRxZm1hMjExMCBmbWEgIDkgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAKLWRxZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMAotZHFmbWEyMTEyIGZtYSAgOSA5MDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAKLWRxZm1hMjExMyBmbWEgIDkgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAKLWRxZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMAotZHFmbWEyMTE1IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAKLS0tZHFmbWEyMTE2IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMAotLS1kcWZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAKLS0tZHFmbWEyMTE4IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFmbWEyMTE5IGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMAotLS1kcWZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFmbWEyMTIxIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFmbWEyMTIyIGZtYSAgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kcWZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzCi1kcWZtYTIxMzEgZm1hICAzIDMgICAgIDBlKzYxNDQgIC0+IDkKLWRxZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzYxNDQgIC0+IDkwCi1kcWZtYTIxMzMgZm1hICAzIDMwMCAgICAgMGUrNjE0NCAgLT4gOTAwCi1kcWZtYTIxMzQgZm1hICAzIDMwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAKLWRxZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwCi1kcWZtYTIxMzYgZm1hICAzIDMwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwCi1kcWZtYTIxMzcgZm1hICAzIDMwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAKLWRxZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwCi1kcWZtYTIxMzkgZm1hICAzIDMwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwCi1kcWZtYTIxNDAgZm1hICAzIDMwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAKLWRxZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwCi1kcWZtYTIxNDIgZm1hICAzIDMwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwCi1kcWZtYTIxNDMgZm1hICAzIDMwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAKLWRxZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNDUgZm1hICAzIDMwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNDYgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjE0NyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNDggZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNDkgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjE1MCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNTEgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWZtYTIxNTIgZm1hICAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjE1MyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLWRxZm1hMjI2MyBmbWEgIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgICAwZSs2MTQ0ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyODI5NiBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZwotZHFmbWEyMzAxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFmbWEyMzA0IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwNSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwNiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFmbWEyMzA3IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMwOSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFmbWEyMzEwIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMxMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMxMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFmbWEyMzEzIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMxNCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMxNSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFmbWEyMzE2IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxZm1hMjMxNyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkCi1kcWZtYTIzMTggZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQKLWRxZm1hMjMxOSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgIFJvdW5kZWQKLWRxZm1hMjMyMCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICBSb3VuZGVkCi1kcWZtYTIzMjEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzggIFJvdW5kZWQKLWRxZm1hMjMyMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzkgIFJvdW5kZWQKLWRxZm1hMjMyMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzQwICBSb3VuZGVkCi0KLS0tIHRyeXplcm9zIGNhc2VzCi1kcWZtYTI1MDQgIGZtYSAgIDBFLTQyNjAgMTAwMEUtNDI2MCAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IENsYW1wZWQKLWRxZm1hMjUwNSAgZm1hICAgMTAwRSs0MjYwIDBFKzQyNjAgICAgIDBlKzYxNDQgIC0+IDBFKzYxMTEgQ2xhbXBlZAotCi0tLSBtaXhlZCB3aXRoIHplcm9zCi1kcWZtYTI1NDEgZm1hICAgMCAgICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMAotZHFmbWEyNTQyIGZtYSAgLTAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAKLWRxZm1hMjU0MyBmbWEgICAwICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwCi1kcWZtYTI1NDQgZm1hICAtMCAgICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgMAotZHFmbWEyNTQ1IGZtYSAgLTEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAKLWRxZm1hMjU0NiBmbWEgIC0xICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwCi1kcWZtYTI1NDcgZm1hICAgMSAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMAotZHFmbWEyNTQ4IGZtYSAgIDEgICAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAKLQotZHFmbWEyNTUxIGZtYSAgIDAuMCAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTUyIGZtYSAgLTAuMCAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTUzIGZtYSAgIDAuMCAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTU0IGZtYSAgLTAuMCAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTU1IGZtYSAgLTEuMCAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTU2IGZtYSAgLTEuMCAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTU3IGZtYSAgIDEuMCAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotZHFmbWEyNTU4IGZtYSAgIDEuMCAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAuMAotCi1kcWZtYTI1NjEgZm1hICAgMCAgICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjIgZm1hICAtMCAgICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjMgZm1hICAgMCAgICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjQgZm1hICAtMCAgICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjUgZm1hICAtMSAgICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjYgZm1hICAtMSAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjcgZm1hICAgMSAgICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi1kcWZtYTI1NjggZm1hICAgMSAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wCi0KLWRxZm1hMjU3MSBmbWEgICAwLjAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTI1NzIgZm1hICAtMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyNTczIGZtYSAgIDAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKLWRxZm1hMjU3NCBmbWEgIC0wLjAgICAxLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTI1NzUgZm1hICAtMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyNTc2IGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKLWRxZm1hMjU3NyBmbWEgICAxLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTI1NzggZm1hICAgMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyNTc5IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDAKLWRxZm1hMjUzMCBmbWEgIC0xLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTI1MzEgZm1hICAtMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyNTMyIGZtYSAgIDEuMCAgLTAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDAKLWRxZm1hMjUzMyBmbWEgICAxLjAgICAwLjAgICAgLTBlKzYxNDQgIC0+ICAwLjAwCi1kcWZtYTI1MzQgZm1hICAtMS4wICAtMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMAotZHFmbWEyNTM1IGZtYSAgLTEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDAKLQotCi0tLSBTcGVjaWFscwotZHFmbWEyNTgwIGZtYSAgIEluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5Ci1kcWZtYTI1ODEgZm1hICAgSW5mICAtMTAwMCAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKLWRxZm1hMjU4MiBmbWEgICBJbmYgIC0xICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQotZHFmbWEyNTgzIGZtYSAgIEluZiAgLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjU4NCBmbWEgICBJbmYgICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI1ODUgZm1hICAgSW5mICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKLWRxZm1hMjU4NiBmbWEgICBJbmYgICAxMDAwICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQotZHFmbWEyNTg3IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5Ci1kcWZtYTI1ODggZm1hICAtMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKLWRxZm1hMjU4OSBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQotZHFmbWEyNTkwIGZtYSAgLTEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5Ci1kcWZtYTI1OTEgZm1hICAtMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNTkyIGZtYSAgIDAgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjU5MyBmbWEgICAxICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQotZHFmbWEyNTk0IGZtYSAgIDEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5Ci1kcWZtYTI1OTUgZm1hICAgSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKLQotZHFmbWEyNjAwIGZtYSAgLUluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5Ci1kcWZtYTI2MDEgZm1hICAtSW5mICAtMTAwMCAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkKLWRxZm1hMjYwMiBmbWEgIC1JbmYgIC0xICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQotZHFmbWEyNjAzIGZtYSAgLUluZiAgLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjYwNCBmbWEgIC1JbmYgICAwICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2MDUgZm1hICAtSW5mICAgMSAgICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKLWRxZm1hMjYwNiBmbWEgIC1JbmYgICAxMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQotZHFmbWEyNjA3IGZtYSAgLUluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5Ci1kcWZtYTI2MDggZm1hICAtMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKLWRxZm1hMjYwOSBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQotZHFmbWEyNjEwIGZtYSAgLTEgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5Ci1kcWZtYTI2MTEgZm1hICAtMCAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjEyIGZtYSAgIDAgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjYxMyBmbWEgICAxICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQotZHFmbWEyNjE0IGZtYSAgIDEwMDAgLUluZiAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5Ci1kcWZtYTI2MTUgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkKLQotZHFmbWEyNjIxIGZtYSAgIE5hTiAtSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjIyIGZtYSAgIE5hTiAtMTAwMCAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjIzIGZtYSAgIE5hTiAtMSAgICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI0IGZtYSAgIE5hTiAtMCAgICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI1IGZtYSAgIE5hTiAgMCAgICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI2IGZtYSAgIE5hTiAgMSAgICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI3IGZtYSAgIE5hTiAgMTAwMCAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI4IGZtYSAgIE5hTiAgSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjI5IGZtYSAgIE5hTiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjMwIGZtYSAgLUluZiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjMxIGZtYSAgLTEwMDAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjMyIGZtYSAgLTEgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjMzIGZtYSAgLTAgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjM0IGZtYSAgIDAgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjM1IGZtYSAgIDEgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjM2IGZtYSAgIDEwMDAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotZHFmbWEyNjM3IGZtYSAgIEluZiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTgotCi1kcWZtYTI2NDEgZm1hICAgc05hTiAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjQyIGZtYSAgIHNOYU4gLTEwMDAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY0MyBmbWEgICBzTmFOIC0xICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NDQgZm1hICAgc05hTiAtMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjQ1IGZtYSAgIHNOYU4gIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY0NiBmbWEgICBzTmFOICAxICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NDcgZm1hICAgc05hTiAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjQ4IGZtYSAgIHNOYU4gIE5hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY0OSBmbWEgICBzTmFOIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NTAgZm1hICAgTmFOICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjUxIGZtYSAgLUluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY1MiBmbWEgIC0xMDAwIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NTMgZm1hICAtMSAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjU0IGZtYSAgLTAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY1NSBmbWEgICAwICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NTYgZm1hICAgMSAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjU3IGZtYSAgIDEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY1OCBmbWEgICBJbmYgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NTkgZm1hICAgTmFOICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcWZtYTI2NjEgZm1hICAgTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOOQotZHFmbWEyNjYyIGZtYSAgIE5hTjggIDk5OSAgICAgMGUrNjE0NCAgLT4gIE5hTjgKLWRxZm1hMjY2MyBmbWEgICBOYU43MSBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU43MQotZHFmbWEyNjY0IGZtYSAgIE5hTjYgIE5hTjUgICAgMGUrNjE0NCAgLT4gIE5hTjYKLWRxZm1hMjY2NSBmbWEgIC1JbmYgICBOYU40ICAgIDBlKzYxNDQgIC0+ICBOYU40Ci1kcWZtYTI2NjYgZm1hICAtOTk5ICAgTmFOMzMgICAwZSs2MTQ0ICAtPiAgTmFOMzMKLWRxZm1hMjY2NyBmbWEgICBJbmYgICBOYU4yICAgIDBlKzYxNDQgIC0+ICBOYU4yCi0KLWRxZm1hMjY3MSBmbWEgICBzTmFOOTkgLUluZiAgICAgIDBlKzYxNDQgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjcyIGZtYSAgIHNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NzMgZm1hICAgc05hTjk3ICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY3NCBmbWEgICBzTmFOMTYgc05hTjk0ICAgIDBlKzYxNDQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjc1IGZtYSAgIE5hTjk1ICBzTmFOOTMgICAgMGUrNjE0NCAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NzYgZm1hICAtSW5mICAgIHNOYU45MiAgICAwZSs2MTQ0ICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY3NyBmbWEgICAwODggICAgc05hTjkxICAgIDBlKzYxNDQgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjc4IGZtYSAgIEluZiAgICBzTmFOOTAgICAgMGUrNjE0NCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2NzkgZm1hICAgTmFOICAgIHNOYU44OSAgICAwZSs2MTQ0ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KLQotZHFmbWEyNjgxIGZtYSAgLU5hTjkgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjkKLWRxZm1hMjY4MiBmbWEgIC1OYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU44Ci1kcWZtYTI2ODMgZm1hICAtTmFONzEgSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFONzEKLWRxZm1hMjY4NCBmbWEgIC1OYU42IC1OYU41ICAgIDBlKzYxNDQgIC0+IC1OYU42Ci1kcWZtYTI2ODUgZm1hICAtSW5mICAtTmFONCAgICAwZSs2MTQ0ICAtPiAtTmFONAotZHFmbWEyNjg2IGZtYSAgLTk5OSAgLU5hTjMzICAgMGUrNjE0NCAgLT4gLU5hTjMzCi1kcWZtYTI2ODcgZm1hICAgSW5mICAtTmFOMiAgICAwZSs2MTQ0ICAtPiAtTmFOMgotCi1kcWZtYTI2OTEgZm1hICAtc05hTjk5IC1JbmYgICAgICAwZSs2MTQ0ICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY5MiBmbWEgIC1zTmFOOTggLTExICAgICAgIDBlKzYxNDQgIC0+IC1OYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjkzIGZtYSAgLXNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2OTQgZm1hICAtc05hTjE2IC1zTmFOOTQgICAwZSs2MTQ0ICAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY5NSBmbWEgIC1OYU45NSAgLXNOYU45MyAgIDBlKzYxNDQgIC0+IC1OYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjk2IGZtYSAgLUluZiAgICAtc05hTjkyICAgMGUrNjE0NCAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kcWZtYTI2OTcgZm1hICAgMDg4ICAgIC1zTmFOOTEgICAwZSs2MTQ0ICAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxZm1hMjY5OCBmbWEgICBJbmYgICAgLXNOYU45MCAgIDBlKzYxNDQgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNjk5IGZtYSAgLU5hTiAgICAtc05hTjg5ICAgMGUrNjE0NCAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRxZm1hMjcwMSBmbWEgIC1OYU4gIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwMiBmbWEgIC1OYU4gICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwMyBmbWEgIC1OYU4gICBJbmYgICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwNCBmbWEgIC1OYU4gIC1OYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwNSBmbWEgIC1JbmYgIC1OYU4wICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwNiBmbWEgIC05OTkgIC1OYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4KLWRxZm1hMjcwNyBmbWEgICBJbmYgIC1OYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4KLQotZHFmbWEyNzExIGZtYSAgLXNOYU4gICAtSW5mICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzEyIGZtYSAgLXNOYU4gICAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzEzIGZtYSAgLXNOYU4wMCAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE0IGZtYSAgLXNOYU4gICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE1IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE2IGZtYSAgLUluZiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE3IGZtYSAgIDA4OCAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE4IGZtYSAgIEluZiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyNzE5IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKLS0tIHNpZ25zCi1kcWZtYTI3NTEgZm1hICAgMWUrNDI3NyAgMWUrMzMxMSAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZm1hMjc1MiBmbWEgICAxZSs0Mjc3IC0xZSszMzExICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFmbWEyNzUzIGZtYSAgLTFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NTQgZm1hICAtMWUrNDI3NyAtMWUrMzMxMSAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxZm1hMjc1NSBmbWEgICAxZS00Mjc3ICAxZS0zMzExICAgMGUrNjE0NCAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFmbWEyNzU2IGZtYSAgIDFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWZtYTI3NTcgZm1hICAtMWUtNDI3NyAgMWUtMzMxMSAgIDBlKzYxNDQgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZm1hMjc1OCBmbWEgIC0xZS00Mjc3IC0xZS0zMzExICAgMGUrNjE0NCAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi0tLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykKLWRxZm1hMjc2MCBmbWEgIDFlLTYwNjkgMWUtMTAxICAgMGUrNjE0NCAgLT4gMUUtNjE3MCBTdWJub3JtYWwKLWRxZm1hMjc2MSBmbWEgIDFlLTYwNjkgMWUtMTAyICAgMGUrNjE0NCAgLT4gMUUtNjE3MSBTdWJub3JtYWwKLWRxZm1hMjc2MiBmbWEgIDFlLTYwNjkgMWUtMTAzICAgMGUrNjE0NCAgLT4gMUUtNjE3MiBTdWJub3JtYWwKLWRxZm1hMjc2MyBmbWEgIDFlLTYwNjkgMWUtMTA0ICAgMGUrNjE0NCAgLT4gMUUtNjE3MyBTdWJub3JtYWwKLWRxZm1hMjc2NCBmbWEgIDFlLTYwNjkgMWUtMTA1ICAgMGUrNjE0NCAgLT4gMUUtNjE3NCBTdWJub3JtYWwKLWRxZm1hMjc2NSBmbWEgIDFlLTYwNjkgMWUtMTA2ICAgMGUrNjE0NCAgLT4gMUUtNjE3NSBTdWJub3JtYWwKLWRxZm1hMjc2NiBmbWEgIDFlLTYwNjkgMWUtMTA3ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiBTdWJub3JtYWwKLWRxZm1hMjc2NyBmbWEgIDFlLTYwNjkgMWUtMTA4ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWZtYTI3NjggZm1hICAxZS02MDY5IDFlLTEwOSAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFmbWEyNzY5IGZtYSAgMWUtNjA2OSAxZS0xMTAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KLWRxZm1hMjc3MCBmbWEgIDFlKzQwIDFlKzYxMDEgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSBDbGFtcGVkCi1kcWZtYTI3NzEgZm1hICAxZSs0MCAxZSs2MTAyICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkCi1kcWZtYTI3NzIgZm1hICAxZSs0MCAxZSs2MTAzICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZAotZHFmbWEyNzczIGZtYSAgMWUrNDAgMWUrNjEwNCAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkCi1kcWZtYTI3NzQgZm1hICAxZSs0MCAxZSs2MTA1ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NzUgZm1hICAxZSs0MCAxZSs2MTA2ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NzYgZm1hICAxZSs0MCAxZSs2MTA3ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NzcgZm1hICAxZSs0MCAxZSs2MTA4ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NzggZm1hICAxZSs0MCAxZSs2MTA5ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI3NzkgZm1hICAxZSs0MCAxZSs2MTEwICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLWRxZm1hMjgwMSBmbWEgICAxLjAwMDBFLTYxNzIgIDEgICAgICAgMGUrNjE0NCAgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbAotZHFmbWEyODAyIGZtYSAgIDEuMDAwRS02MTcyICAgMWUtMSAgICAwZSs2MTQ0ICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsCi1kcWZtYTI4MDMgZm1hICAgMS4wMEUtNjE3MiAgICAxZS0yICAgIDBlKzYxNDQgIC0+IDEuMDBFLTYxNzQgICBTdWJub3JtYWwKLWRxZm1hMjgwNCBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTMgICAgMGUrNjE0NCAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAotZHFmbWEyODA1IGZtYSAgIDEuMEUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZAotZHFmbWEyODA2IGZtYSAgIDEuM0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODA3IGZtYSAgIDEuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODA4IGZtYSAgIDEuN0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODA5IGZtYSAgIDIuM0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODEwIGZtYSAgIDIuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODExIGZtYSAgIDIuN0UtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODEyIGZtYSAgIDEuNDlFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODEzIGZtYSAgIDEuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODE0IGZtYSAgIDEuNTFFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODE1IGZtYSAgIDIuNDlFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODE2IGZtYSAgIDIuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFmbWEyODE3IGZtYSAgIDIuNTFFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kcWZtYTI4MTggZm1hICAgMUUtNjE3MiAgICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbAotZHFmbWEyODE5IGZtYSAgIDNFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWZtYTI4MjAgZm1hICAgNUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxZm1hMjgyMSBmbWEgICA3RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxZm1hMjgyMiBmbWEgICA5RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxZm1hMjgyMyBmbWEgICA5LjlFLTYxNzIgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZHFmbWEyODI0IGZtYSAgIDFFLTYxNzIgICAgICAtMWUtNCAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBTdWJub3JtYWwKLWRxZm1hMjgyNSBmbWEgICAzRS02MTcyICAgICAgLTFlLTUgICAgMGUrNjE0NCAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFmbWEyODI2IGZtYSAgLTVFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWZtYTI4MjcgZm1hICAgN0UtNjE3MiAgICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI4MjggZm1hICAtOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI4MjkgZm1hICAgOS45RS02MTcyICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcWZtYTI4MzAgZm1hICAgMy4wRS02MTcyICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotZHFmbWEyODMxIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMjAwICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcWZtYTI4MzIgZm1hICAgMS4wRS01OTc3ICAgICAxZS0xOTkgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcWZtYTI4MzMgZm1hICAgMS4wRS01OTc3ICAgICAxZS0xOTggICAwZSs2MTQ0ICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCi1kcWZtYTI4MzQgZm1hICAgMi4wRS01OTc3ICAgICAyZS0xOTggICAwZSs2MTQ0ICAtPiA0LjBFLTYxNzUgICAgU3Vibm9ybWFsCi1kcWZtYTI4MzUgZm1hICAgNC4wRS01OTc3ICAgICA0ZS0xOTggICAwZSs2MTQ0ICAtPiAxLjYwRS02MTc0ICAgU3Vibm9ybWFsCi1kcWZtYTI4MzYgZm1hICAxMC4wRS01OTc3ICAgIDEwZS0xOTggICAwZSs2MTQ0ICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsCi1kcWZtYTI4MzcgZm1hICAzMC4wRS01OTc3ICAgIDMwZS0xOTggICAwZSs2MTQ0ICAtPiA5LjAwMEUtNjE3MyAgU3Vibm9ybWFsCi1kcWZtYTI4MzggZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjYgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDUgU3Vibm9ybWFsCi1kcWZtYTI4MzkgZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjUgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDQgU3Vibm9ybWFsCi1kcWZtYTI4NDAgZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjQgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDMKLQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCi1kcWZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRxZm1hMjg3MSBmbWEgIDEwMCAtOS45OTlFKzYxNDMgICAgICAgMGUrNjE0NCAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZHFmbWEyODcyIGZtYSAgICAgICA5Ljk5OUUrNjE0MyAxMDAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCi1kcWZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKLWRxZm1hMjg4MSBmbWEgICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgICAwZSs2MTQ0ICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZm1hMjg4MiBmbWEgICAxLjIzNEUtNjEzMyAxLjIzNEUtNDAgICAgICAwZSs2MTQ0ICAtPiAgMS41MjNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZm1hMjg4MyBmbWEgICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgICAwZSs2MTQ0ICAtPiAgMS41MTNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZm1hMjg4NCBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsCi1kcWZtYTI4ODUgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MSAgICAgICAgMGUrNjE0NCAgLT4gIDEuNDRFLTYxNzQgIFN1Ym5vcm1hbAotZHFmbWEyODg2IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjRFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFmbWEyODg3IGZtYSAgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFmbWEyODg4IGZtYSAgIDEuM0UtNjEzMyAgIDEuM0UtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjdFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFmbWEyODg5IGZtYSAgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAgIDBlKzYxNDQgIC0+ICAgIDJFLTYxNzYgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFmbWEyODkwIGZtYSAgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAgIDBlKzYxNDQgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0KLWRxZm1hMjg5MSBmbWEgICAxLjIzNDVFLTM5ICAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcWZtYTI4OTMgZm1hICAgMS4yMzQ1RS00MCAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFmbWEyODk0IGZtYSAgIDEuMjM0NTZFLTQwICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcWZtYTI4OTYgZm1hICAgMS4yMzQ1NkUtNDEgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTJFLTYxNzQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotCi0tLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93Ci0tLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QKLWRxZm1hMjkwNiBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMSAgICAgICAgICAgICAgICAgICAgICAgICAwZSs2MTQ0ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MwotZHFmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrNjE0NCAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KLWRxZm1hMjkwOCBmbWEgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotCi0tLSBodWdlc3QKLWRxZm1hMjkwOSBmbWEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCi1wcmVjaXNpb246ICAgMzQKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1kcWZtYTIxMDAxICBmbWEgIDEzMEUtMiAgMTIwRS0yICAgMGUrNjE0NCAgLT4gMS41NjAwCi1kcWZtYTIxMDAyICBmbWEgIDEzMEUtMiAgMTJFLTEgICAgMGUrNjE0NCAgLT4gMS41NjAKLWRxZm1hMjEwMDMgIGZtYSAgMTMwRS0yICAxRTAgICAgICAwZSs2MTQ0ICAtPiAxLjMwCi1kcWZtYTIxMDA0ICBmbWEgIDFFMiAgICAgMUU0ICAgICAgMGUrNjE0NCAgLT4gMUUrNgotCi0tLSBOdWxsIHRlc3RzCi1kcWZtYTI5OTAgZm1hICAxMCAgIyAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFmbWEyOTkxIGZtYSAgICMgMTAgICAwZSs2MTQ0ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotCi0tLSBBRERJVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCi1kcWFkZDMwMDEgZm1hICAxICAxICAgICAgIDEgICAgICAgLT4gIDIKLWRxYWRkMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQotZHFhZGQzMDAzIGZtYSAgMSAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1Ci1kcWFkZDMwMDQgZm1hICAxICAnNScgICAgICctMycgICAgLT4gIDIKLWRxYWRkMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgKLWRxYWRkMzAwNiBmbWEgIDEgICctNycgICAgJzIuNScgICAtPiAgLTQuNQotZHFhZGQzMDA3IGZtYSAgMSAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjAKLWRxYWRkMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MAotZHFhZGQzMDA5IGZtYSAgMSAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCi1kcWFkZDMwMTAgZm1hICAxICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcKLQotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRxYWRkMzAxMSBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDYnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAotZHFhZGQzMDEzIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknCi1kcWFkZDMwMTQgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMTYgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTk5JyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMTcgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAwJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMTkgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDEnICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMjAgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MScgICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzAyMSBmbWEgIDEgIDAgMSAtPiAxCi1kcWFkZDMwMjIgZm1hICAxICAxIDEgLT4gMgotZHFhZGQzMDIzIGZtYSAgMSAgMiAxIC0+IDMKLWRxYWRkMzAyNCBmbWEgIDEgIDMgMSAtPiA0Ci1kcWFkZDMwMjUgZm1hICAxICA0IDEgLT4gNQotZHFhZGQzMDI2IGZtYSAgMSAgNSAxIC0+IDYKLWRxYWRkMzAyNyBmbWEgIDEgIDYgMSAtPiA3Ci1kcWFkZDMwMjggZm1hICAxICA3IDEgLT4gOAotZHFhZGQzMDI5IGZtYSAgMSAgOCAxIC0+IDkKLWRxYWRkMzAzMCBmbWEgIDEgIDkgMSAtPiAxMAotCi0tLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMKLWRxYWRkMzAzMSBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4JwotZHFhZGQzMDMyIGZtYSAgMSAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCi1kcWFkZDMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcKLWRxYWRkMzAzNCBmbWEgIDEgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJwotCi1kcWFkZDMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzAzNiBmbWEgIDEgICc3MDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzAzNyBmbWEgIDEgICc3MDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzAzOSBmbWEgIDEgICc3MDAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkCi0KLS0tIHN5bW1ldHJ5OgotZHFhZGQzMDQwIGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwNDEgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwNDIgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMDQ0IGZtYSAgMSAgJzEwMDAwZSszNCcgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMwNDUgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZAotCi0tLSBzYW1lLCB3aXRob3V0IHJvdW5kaW5nCi1kcWFkZDMwNDYgZm1hICAxICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3JwotZHFhZGQzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCi1kcWFkZDMwNDggZm1hICAxICAnMTAwMDBlKzknICAnNzAwJyAtPiAnMTAwMDAwMDAwMDA3MDAnCi1kcWFkZDMwNDkgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJwotZHFhZGQzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCi1kcWFkZDMwNTEgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwJyAtPiAnMTAwMDAwMDA3MDAwMDAnCi1kcWFkZDMwNTIgZm1hICAxICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJwotCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCi1kcWFkZDMwNTMgZm1hICAxICAnMTInICc3LjAwJyAtPiAnMTkuMDAnCi1kcWFkZDMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJwotZHFhZGQzMDU1IGZtYSAgMSAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKLWRxYWRkMzA1NiBmbWEgIDEgICcxLjMnICctMi4wNycgLT4gJy0wLjc3JwotZHFhZGQzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcKLQotLS0gbGVhZGluZyB6ZXJvIHByZXNlcnZhdGlvbgotZHFhZGQzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJwotZHFhZGQzMDYyIGZtYSAgMSAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnCi1kcWFkZDMwNjMgZm1hICAxICAxICcwLjAwMDAwMScgLT4gJzEuMDAwMDAxJwotZHFhZGQzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJwotZHFhZGQzMDY1IGZtYSAgMSAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnCi0KLS0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0KLWRxYWRkMzA3MCBmbWEgIDEgIDEgIDAgICAgLT4gMQotZHFhZGQzMDcxIGZtYSAgMSAgMSAwLiAgICAtPiAxCi1kcWFkZDMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMAotZHFhZGQzMDczIGZtYSAgMSAgMSAwLjAgICAtPiAxLjAKLWRxYWRkMzA3NCBmbWEgIDEgIDEgMC4wMCAgLT4gMS4wMAotZHFhZGQzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxCi1kcWFkZDMwNzYgZm1hICAxICAwLiAgMSAgIC0+IDEKLWRxYWRkMzA3NyBmbWEgIDEgICAuMCAxICAgLT4gMS4wCi1kcWFkZDMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMAotZHFhZGQzMDc5IGZtYSAgMSAgMC4wMCAxICAtPiAxLjAwCi0KLS0tIHNvbWUgY2FycmllcwotZHFhZGQzMDgwIGZtYSAgMSAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQotZHFhZGQzMDgxIGZtYSAgMSAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAKLWRxYWRkMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAKLWRxYWRkMzA4MyBmbWEgIDEgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMAotZHFhZGQzMDg0IGZtYSAgMSAgICAgOTk5OTk5IDEgIC0+IDEwMDAwMDAKLWRxYWRkMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDAKLWRxYWRkMzA4NiBmbWEgIDEgICAgICAgOTk5OSAxICAtPiAxMDAwMAotZHFhZGQzMDg3IGZtYSAgMSAgICAgICAgOTk5IDEgIC0+IDEwMDAKLWRxYWRkMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDAKLWRxYWRkMzA4OSBmbWEgIDEgICAgICAgICAgOSAxICAtPiAxMAotCi0KLS0tIG1vcmUgTEhTIHN3YXBzCi1kcWFkZDMwOTAgZm1hICAxICAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKLWRxYWRkMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCi1kcWFkZDMwOTIgZm1hICAxICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCi1kcWFkZDMwOTMgZm1hICAxICAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKLWRxYWRkMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JwotZHFhZGQzMDk1IGZtYSAgMSAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCi1kcWFkZDMwOTYgZm1hICAxICAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKLWRxYWRkMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCi1kcWFkZDMwOTggZm1hICAxICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJwotZHFhZGQzMDk5IGZtYSAgMSAgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JwotZHFhZGQzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKLWRxYWRkMzEwMSBmbWEgIDEgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKLWRxYWRkMzEwMiBmbWEgIDEgICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JwotZHFhZGQzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCi1kcWFkZDMxMDQgZm1hICAxICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCi1kcWFkZDMxMDUgZm1hICAxICAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJwotZHFhZGQzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCi1kcWFkZDMxMDcgZm1hICAxICAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCi1kcWFkZDMxMDggZm1hICAxICAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKLWRxYWRkMzEwOSBmbWEgIDEgICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZAotZHFhZGQzMTEwIGZtYSAgMSAgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCi1kcWFkZDMxMTEgZm1hICAxICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKLQotLS0gbW9yZSBSSFMgc3dhcHMKLWRxYWRkMzExMyBmbWEgIDEgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCi1kcWFkZDMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCi1kcWFkZDMxMTYgZm1hICAxICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKLWRxYWRkMzExNyBmbWEgIDEgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCi1kcWFkZDMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JwotZHFhZGQzMTIwIGZtYSAgMSAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKLWRxYWRkMzEyMSBmbWEgIDEgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCi1kcWFkZDMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCi1kcWFkZDMxMjMgZm1hICAxICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCi1kcWFkZDMxMjQgZm1hICAxICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKLWRxYWRkMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKLWRxYWRkMzEyNiBmbWEgIDEgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JwotZHFhZGQzMTI3IGZtYSAgMSAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKLWRxYWRkMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCi1kcWFkZDMxMjkgZm1hICAxICAwICAnLTVFMCcgICAgICAgLT4gICctNScKLWRxYWRkMzEzMCBmbWEgIDEgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKLWRxYWRkMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCi1kcWFkZDMxMzIgZm1hICAxICAwICAnLTVFMzMnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcKLWRxYWRkMzEzMyBmbWEgIDEgIDAgICctNUUzNCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZAotZHFhZGQzMTM0IGZtYSAgMSAgMCAgJy01RTM1JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgICBSb3VuZGVkCi1kcWFkZDMxMzUgZm1hICAxICAwICAnLTVFMzYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgIFJvdW5kZWQKLWRxYWRkMzEzNiBmbWEgIDEgIDAgICctNUUxMDAnICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAotCi0tLSByZWxhdGVkCi1kcWFkZDMxMzcgZm1hICAxICAgMSAgJzBFLTM5JyAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCi1kcWFkZDMxMzggZm1hICAxICAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kcWFkZDMxMzkgZm1hICAxICAnMEUtMzknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkCi1kcWFkZDMxNDAgZm1hICAxICAnMEUtMzknIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1kcWFkZDMxNDEgZm1hICAxICAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnCi1kcWFkZDMxNDIgZm1hICAxICAxRSsyOSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkCi1kcWFkZDMxNDMgZm1hICAxICAwLjAwMCAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnCi1kcWFkZDMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCi0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCi1kcWFkZDMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnCi1kcWFkZDMxNDcgZm1hICAxICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJwotZHFhZGQzMTQ4IGZtYSAgMSAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKLWRxYWRkMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcKLWRxYWRkMzE1MCBmbWEgIDEgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnCi1kcWFkZDMxNTEgZm1hICAxICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJwotZHFhZGQzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJwotZHFhZGQzMTUzIGZtYSAgMSAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJwotZHFhZGQzMTU0IGZtYSAgMSAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJwotZHFhZGQzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcKLWRxYWRkMzE1NiBmbWEgIDEgICczJyAgICAgJzMnICAgICAtPiAgJzYnCi1kcWFkZDMxNTcgZm1hICAxICAnMycgICAgICcrMycgICAgLT4gICc2JwotZHFhZGQzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcKLWRxYWRkMzE1OSBmbWEgIDEgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcKLWRxYWRkMzE2MCBmbWEgIDEgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCi0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCi1kcWFkZDMxNjEgZm1hICAxICAnMUUrMTInICctMScgICAgLT4gJzk5OTk5OTk5OTk5OScKLWRxYWRkMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKLWRxYWRkMzE2MyBmbWEgIDEgICcxLjExJyAgJzFFKzEyJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScKLWRxYWRkMzE2NCBmbWEgIDEgICctMScgICAgJzFFKzEyJyAtPiAnOTk5OTk5OTk5OTk5JwotZHFhZGQzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5JwotZHFhZGQzMTY2IGZtYSAgMSAgJzdFKzEyJyAgJzEuMTEnIC0+ICc3MDAwMDAwMDAwMDAxLjExJwotZHFhZGQzMTY3IGZtYSAgMSAgJzEuMTEnICAnN0UrMTInIC0+ICc3MDAwMDAwMDAwMDAxLjExJwotZHFhZGQzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5JwotCi1yb3VuZGluZzogaGFsZl91cAotZHFhZGQzMTcwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzE3MSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjYnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMxNzIgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY1JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMTczIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzE3NCBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTMnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMxNzUgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMTc2IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzE3NyBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTAnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgUm91bmRlZAotZHFhZGQzMTc4IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0NScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzE3OSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMxODAgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMTgxIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MicgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzE4MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMxODMgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIFJvdW5kZWQKLQotLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncwotcm91bmRpbmc6IGhhbGZfdXAKLWRxYWRkMzIwMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JwotZHFhZGQzMjAxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjAyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjAzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjA5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjEwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjExIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjEyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjEzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjE0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjE1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjE2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCi1kcWFkZDMyMTcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyMTggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyMTkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWRxYWRkMzIyMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JwotZHFhZGQzMjIxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjIyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjIzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjI5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjMwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjMxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjMyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjMzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjM0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjM1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjM2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnCi1kcWFkZDMyMzcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyMzggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyMzkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgotZHFhZGQzMjQwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjQxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMjQyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZHFhZGQzMjUwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknCi1kcWFkZDMyNTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNTkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMyNjYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcKLWRxYWRkMzI2NyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzI2OCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzI2OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gMSBpbiBsYXN0IHBsYWNlIHRlc3RzCi1yb3VuZGluZzogaGFsZl91cAotZHFhZGQzMzAxIGZtYSAgMSAgIC0xICAgMSAgICAgIC0+ICAgMAotZHFhZGQzMzAyIGZtYSAgMSAgICAwICAgMSAgICAgIC0+ICAgMQotZHFhZGQzMzAzIGZtYSAgMSAgICAxICAgMSAgICAgIC0+ICAgMgotZHFhZGQzMzA0IGZtYSAgMSAgIDEyICAgMSAgICAgIC0+ICAxMwotZHFhZGQzMzA1IGZtYSAgMSAgIDk4ICAgMSAgICAgIC0+ICA5OQotZHFhZGQzMzA2IGZtYSAgMSAgIDk5ICAgMSAgICAgIC0+IDEwMAotZHFhZGQzMzA3IGZtYSAgMSAgMTAwICAgMSAgICAgIC0+IDEwMQotZHFhZGQzMzA4IGZtYSAgMSAgMTAxICAgMSAgICAgIC0+IDEwMgotZHFhZGQzMzA5IGZtYSAgMSAgIC0xICAtMSAgICAgIC0+ICAtMgotZHFhZGQzMzEwIGZtYSAgMSAgICAwICAtMSAgICAgIC0+ICAtMQotZHFhZGQzMzExIGZtYSAgMSAgICAxICAtMSAgICAgIC0+ICAgMAotZHFhZGQzMzEyIGZtYSAgMSAgIDEyICAtMSAgICAgIC0+ICAxMQotZHFhZGQzMzEzIGZtYSAgMSAgIDk4ICAtMSAgICAgIC0+ICA5NwotZHFhZGQzMzE0IGZtYSAgMSAgIDk5ICAtMSAgICAgIC0+ICA5OAotZHFhZGQzMzE1IGZtYSAgMSAgMTAwICAtMSAgICAgIC0+ICA5OQotZHFhZGQzMzE2IGZtYSAgMSAgMTAxICAtMSAgICAgIC0+IDEwMAotCi1kcWFkZDMzMjEgZm1hICAxICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMAotZHFhZGQzMzIyIGZtYSAgMSAgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKLWRxYWRkMzMyMyBmbWEgIDEgICAwLjAxICAwLjAxICAgIC0+ICAwLjAyCi1kcWFkZDMzMjQgZm1hICAxICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMwotZHFhZGQzMzI1IGZtYSAgMSAgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKLWRxYWRkMzMyNiBmbWEgIDEgICAwLjk5ICAwLjAxICAgIC0+ICAxLjAwCi1kcWFkZDMzMjcgZm1hICAxICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQotZHFhZGQzMzI4IGZtYSAgMSAgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKLWRxYWRkMzMyOSBmbWEgIDEgIC0wLjAxIC0wLjAxICAgIC0+IC0wLjAyCi1kcWFkZDMzMzAgZm1hICAxICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQotZHFhZGQzMzMxIGZtYSAgMSAgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKLWRxYWRkMzMzMiBmbWEgIDEgICAwLjEyIC0wLjAxICAgIC0+ICAwLjExCi1kcWFkZDMzMzMgZm1hICAxICAgMC45OCAtMC4wMSAgICAtPiAgMC45NwotZHFhZGQzMzM0IGZtYSAgMSAgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKLWRxYWRkMzMzNSBmbWEgIDEgICAxLjAwIC0wLjAxICAgIC0+ICAwLjk5Ci1kcWFkZDMzMzYgZm1hICAxICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMAotCi0tLSBzb21lIG1vcmUgY2FzZXMgd2hlcmUgYWRkaW5nIDAgYWZmZWN0cyB0aGUgY29lZmZpY2llbnQKLWRxYWRkMzM0MCBmbWEgIDEgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKLWRxYWRkMzM0MSBmbWEgIDEgIDFFKzMzICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWFkZDMzNDIgZm1hICAxICAxRSszNCAgIDAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIFJvdW5kZWQKLWRxYWRkMzM0MyBmbWEgIDEgIDFFKzM1ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAotLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgotZHFhZGQzMzQ0IGZtYSAgMSAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQotZHFhZGQzMzQ1IGZtYSAgMSAgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxYWRkMzM0NiBmbWEgIDEgIDFFKzM0ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMzNDcgZm1hICAxICAxRSszNSAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzMzQ4IGZtYSAgMSAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNwotZHFhZGQzMzQ5IGZtYSAgMSAgMUUrMzMgICA3ICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLWRxYWRkMzM1MCBmbWEgIDEgIDFFKzM0ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRSszNCAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDMzNTEgZm1hICAxICAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotcm91bmRpbmc6ICAgIGhhbGZfdXAKLWRxYWRkMzM2MCAgZm1hICAxICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1Ci1kcWFkZDMzNjEgIGZtYSAgMSAgMEUtNTAgMTAwMDBFKzEgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQKLWRxYWRkMzM2MiAgZm1hICAxICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAotZHFhZGQzMzYzICBmbWEgIDEgIDEwMDAwRSsxIDEwMDAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZCBJbmV4YWN0Ci1kcWFkZDMzNjQgIGZtYSAgMSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDBFKzYxMTEKLS0tICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKLQotLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZwotcm91bmRpbmc6ICAgIGhhbGZfZG93bgotZHFhZGQzMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxNAotZHFhZGQzMzcxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICAgIGhhbGZfdXAKLWRxYWRkMzM3MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKLWRxYWRkMzM3MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRxYWRkMzM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQKLWRxYWRkMzM3NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxRSszNCBSb3VuZGVkIEluZXhhY3QKLQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCi1kcWFkZDM0MDAgZm1hICAxICAgIDEgICA3N2UtMzIgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQzNDAxIGZtYSAgMSAgICAxICAgNzdlLTMzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci1kcWFkZDM0MDIgZm1hICAxICAgIDEgICA3N2UtMzQgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MDMgZm1hICAxICAgIDEgICA3N2UtMzUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MDQgZm1hICAxICAgIDEgICA3N2UtMzYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MDUgZm1hICAxICAgIDEgICA3N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MDYgZm1hICAxICAgIDEgICA3N2UtMjk5ICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzQxMCBmbWEgIDEgICAxMCAgIDc3ZS0zMiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQzNDExIGZtYSAgMSAgIDEwICAgNzdlLTMzICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDEyIGZtYSAgMSAgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDEzIGZtYSAgMSAgIDEwICAgNzdlLTM1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDE0IGZtYSAgMSAgIDEwICAgNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDE1IGZtYSAgMSAgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDE2IGZtYSAgMSAgIDEwICAgNzdlLTI5OSAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kcWFkZDM0MjAgZm1hICAxICAgNzdlLTMyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQzNDIxIGZtYSAgMSAgIDc3ZS0zMyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Ci1kcWFkZDM0MjIgZm1hICAxICAgNzdlLTM0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MjMgZm1hICAxICAgNzdlLTM1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MjQgZm1hICAxICAgNzdlLTM2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MjUgZm1hICAxICAgNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM0MjYgZm1hICAxICAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzQzMCBmbWEgIDEgICA3N2UtMzIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NwotZHFhZGQzNDMxIGZtYSAgMSAgIDc3ZS0zMyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDMyIGZtYSAgMSAgIDc3ZS0zNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDMzIGZtYSAgMSAgIDc3ZS0zNSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDM0IGZtYSAgMSAgIDc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDM1IGZtYSAgMSAgIDc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNDM2IGZtYSAgMSAgIDc3ZS0yOTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBuZWdhdGl2ZSB1bHBzCi1kcWFkZDM2NDQwIGZtYSAgMSAgICAxICAgLTc3ZS0zMiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NDQxIGZtYSAgMSAgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ0MiBmbWEgIDEgICAgMSAgIC03N2UtMzQgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NDQzIGZtYSAgMSAgICAxICAgLTc3ZS0zNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDQ0IGZtYSAgMSAgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDQ1IGZtYSAgMSAgICAxICAgLTc3ZS0zNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NDYgZm1hICAxICAgIDEgICAtNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kcWFkZDM2NDUwIGZtYSAgMSAgIDEwICAgLTc3ZS0zMiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ1MSBmbWEgIDEgICAxMCAgIC03N2UtMzMgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NDUyIGZtYSAgMSAgIDEwICAgLTc3ZS0zNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDUzIGZtYSAgMSAgIDEwICAgLTc3ZS0zNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDU0IGZtYSAgMSAgIDEwICAgLTc3ZS0zNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NTUgZm1hICAxICAgMTAgICAtNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjQ1NiBmbWEgIDEgICAxMCAgIC03N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzY0NjAgZm1hICAxICAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY0NjEgZm1hICAxICAgLTc3ZS0zMyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NDYyIGZtYSAgMSAgIC03N2UtMzQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY0NjMgZm1hICAxICAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NjQgZm1hICAxICAgLTc3ZS0zNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NjUgZm1hICAxICAgLTc3ZS0zNyAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjQ2NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzY0NzAgZm1hICAxICAgLTc3ZS0zMiAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NDcxIGZtYSAgMSAgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY0NzIgZm1hICAxICAgLTc3ZS0zNCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NzMgZm1hICAxICAgLTc3ZS0zNSAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0NzQgZm1hICAxICAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjQ3NSBmbWEgIDEgICAtNzdlLTM3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDc2IGZtYSAgMSAgIC03N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbmVnYXRpdmUgdWxwcwotZHFhZGQzNjQ4MCBmbWEgIDEgICAtMSAgICA3N2UtMzIgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY0ODEgZm1hICAxICAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ4MiBmbWEgIDEgICAtMSAgICA3N2UtMzQgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ4MyBmbWEgIDEgICAtMSAgICA3N2UtMzUgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0ODQgZm1hICAxICAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDg1IGZtYSAgMSAgIC0xICAgIDc3ZS0zNyAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDg2IGZtYSAgMSAgIC0xICAgIDc3ZS05OSAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzY0OTAgZm1hICAxICAtMTAgICAgNzdlLTMyICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ5MSBmbWEgIDEgIC0xMCAgICA3N2UtMzMgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMwotZHFhZGQzNjQ5MiBmbWEgIDEgIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY0OTMgZm1hICAxICAtMTAgICAgNzdlLTM1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDk0IGZtYSAgMSAgLTEwICAgIDc3ZS0zNiAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDk1IGZtYSAgMSAgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NDk2IGZtYSAgMSAgLTEwICAgIDc3ZS05OSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzY1MDAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzCi1kcWFkZDM2NTAxIGZtYSAgMSAgICA3N2UtMzMgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY1MDIgZm1hICAxICAgIDc3ZS0zNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY1MDMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTA0IGZtYSAgMSAgICA3N2UtMzYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjUwNSBmbWEgIDEgICAgNzdlLTM3ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjUwNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1kcWFkZDM2NTEwIGZtYSAgMSAgICA3N2UtMzIgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY1MTEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMKLWRxYWRkMzY1MTIgZm1hICAxICAgIDc3ZS0zNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTEzIGZtYSAgMSAgICA3N2UtMzUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjUxNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjUxNSBmbWEgIDEgICAgNzdlLTM3ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjUxNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBhbmQgc29tZSBtb3JlIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncwotcm91bmRpbmc6IGhhbGZfdXAKLWRxYWRkMzY1NDAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScKLWRxYWRkMzY1NDEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTQyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU0MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NDQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTQ1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU0NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NDcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTQ4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU0OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NTAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU1MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NTMgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU1NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NTYgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcKLWRxYWRkMzY1NTcgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU1OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfZXZlbgotZHFhZGQzNjU2MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JwotZHFhZGQzNjU2MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTYzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU2NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTY2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU2NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NjggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTY5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU3MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NzEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTcyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU3MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NzQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTc1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNjU3NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJwotZHFhZGQzNjU3NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzY1NzggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM2NTc5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0tLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLgotZHFhZGQzNzU0MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NDEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTQyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZG93bgotZHFhZGQzNzU1MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JwotZHFhZGQzNzU1MSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTUzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzU1NCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTU2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NTggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTU5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzU2MCBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NjEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTYyIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NjQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTY1IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJwotZHFhZGQzNzU2NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1NjggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTY5IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotCi0tLSBtb3JlIHplcm9zLCBldGMuCi1yb3VuZGluZzogaGFsZl9ldmVuCi0KLWRxYWRkMzc3MDEgZm1hICAxICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAotZHFhZGQzNzcwMiBmbWEgIDEgIDAwLjAwIDAuMDAwICAtPiAwLjAwMAotZHFhZGQzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMAotZHFhZGQzNzcwNCBmbWEgIDEgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAotCi1kcWFkZDM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDAKLWRxYWRkMzc3MTEgZm1hICAxICAwRSszICAwMC4wICAgLT4gMC4wCi1kcWFkZDM3NzEyIGZtYSAgMSAgMEUrMyAgMDAuICAgIC0+IDAKLWRxYWRkMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQotZHFhZGQzNzcxNCBmbWEgIDEgIDBFKzMgIDAwLkUrMiAtPiAwRSsyCi1kcWFkZDM3NzE1IGZtYSAgMSAgMEUrMyAgMDAuRSszIC0+IDBFKzMKLWRxYWRkMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMwotZHFhZGQzNzcxNyBmbWEgIDEgIDBFKzMgIDAwLkUrNSAtPiAwRSszCi1kcWFkZDM3NzE4IGZtYSAgMSAgMEUrMyAgLTAwLjAgICAtPiAwLjAKLWRxYWRkMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDAKLWRxYWRkMzc3MzEgZm1hICAxICAwRSszICAtMDAuRSsxIC0+IDBFKzEKLQotZHFhZGQzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwCi1kcWFkZDM3NzIxIGZtYSAgMSAgMDAuMCAgIDBFKzMgIC0+IDAuMAotZHFhZGQzNzcyMiBmbWEgIDEgIDAwLiAgICAwRSszICAtPiAwCi1kcWFkZDM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKLWRxYWRkMzc3MjQgZm1hICAxICAwMC5FKzIgMEUrMyAgLT4gMEUrMgotZHFhZGQzNzcyNSBmbWEgIDEgIDAwLkUrMyAwRSszICAtPiAwRSszCi1kcWFkZDM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKLWRxYWRkMzc3MjcgZm1hICAxICAwMC5FKzUgMEUrMyAgLT4gMEUrMwotZHFhZGQzNzcyOCBmbWEgIDEgIC0wMC4wMCAwRSszICAtPiAwLjAwCi1kcWFkZDM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMAotZHFhZGQzNzczMCBmbWEgIDEgIC0wMC4gICAwRSszICAtPiAwCi0KLWRxYWRkMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDAKLWRxYWRkMzc3MzMgZm1hICAxICAgMCAgICAtMCAgICAgLT4gIDAKLWRxYWRkMzc3MzQgZm1hICAxICAtMCAgICAgMCAgICAgLT4gIDAKLWRxYWRkMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQotCi1kcWFkZDM3NzM2IGZtYSAgMSAgIDEgICAgLTEgICAgIC0+ICAwCi1kcWFkZDM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yCi1kcWFkZDM3NzM4IGZtYSAgMSAgIDEgICAgIDEgICAgIC0+ICAyCi1kcWFkZDM3NzM5IGZtYSAgMSAgLTEgICAgIDEgICAgIC0+ICAwCi0KLWRxYWRkMzc3NDEgZm1hICAxICAgMCAgICAtMSAgICAgLT4gLTEKLWRxYWRkMzc3NDIgZm1hICAxICAtMCAgICAtMSAgICAgLT4gLTEKLWRxYWRkMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDEKLWRxYWRkMzc3NDQgZm1hICAxICAtMCAgICAgMSAgICAgLT4gIDEKLWRxYWRkMzc3NDUgZm1hICAxICAtMSAgICAgMCAgICAgLT4gLTEKLWRxYWRkMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTEKLWRxYWRkMzc3NDcgZm1hICAxICAgMSAgICAgMCAgICAgLT4gIDEKLWRxYWRkMzc3NDggZm1hICAxICAgMSAgICAtMCAgICAgLT4gIDEKLQotZHFhZGQzNzc1MSBmbWEgIDEgICAwLjAgIC0xICAgICAtPiAtMS4wCi1kcWFkZDM3NzUyIGZtYSAgMSAgLTAuMCAgLTEgICAgIC0+IC0xLjAKLWRxYWRkMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMAotZHFhZGQzNzc1NCBmbWEgIDEgIC0wLjAgICAxICAgICAtPiAgMS4wCi1kcWFkZDM3NzU1IGZtYSAgMSAgLTEuMCAgIDAgICAgIC0+IC0xLjAKLWRxYWRkMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMAotZHFhZGQzNzc1NyBmbWEgIDEgICAxLjAgICAwICAgICAtPiAgMS4wCi1kcWFkZDM3NzU4IGZtYSAgMSAgIDEuMCAgLTAgICAgIC0+ICAxLjAKLQotZHFhZGQzNzc2MSBmbWEgIDEgICAwICAgIC0xLjAgICAtPiAtMS4wCi1kcWFkZDM3NzYyIGZtYSAgMSAgLTAgICAgLTEuMCAgIC0+IC0xLjAKLWRxYWRkMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMAotZHFhZGQzNzc2NCBmbWEgIDEgIC0wICAgICAxLjAgICAtPiAgMS4wCi1kcWFkZDM3NzY1IGZtYSAgMSAgLTEgICAgIDAuMCAgIC0+IC0xLjAKLWRxYWRkMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMAotZHFhZGQzNzc2NyBmbWEgIDEgICAxICAgICAwLjAgICAtPiAgMS4wCi1kcWFkZDM3NzY4IGZtYSAgMSAgIDEgICAgLTAuMCAgIC0+ICAxLjAKLQotZHFhZGQzNzc3MSBmbWEgIDEgICAwLjAgIC0xLjAgICAtPiAtMS4wCi1kcWFkZDM3NzcyIGZtYSAgMSAgLTAuMCAgLTEuMCAgIC0+IC0xLjAKLWRxYWRkMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMAotZHFhZGQzNzc3NCBmbWEgIDEgIC0wLjAgICAxLjAgICAtPiAgMS4wCi1kcWFkZDM3Nzc1IGZtYSAgMSAgLTEuMCAgIDAuMCAgIC0+IC0xLjAKLWRxYWRkMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMAotZHFhZGQzNzc3NyBmbWEgIDEgICAxLjAgICAwLjAgICAtPiAgMS4wCi1kcWFkZDM3Nzc4IGZtYSAgMSAgIDEuMCAgLTAuMCAgIC0+ICAxLjAKLQotLS0gU3BlY2lhbHMKLWRxYWRkMzc3ODAgZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQotZHFhZGQzNzc4MiBmbWEgIDEgIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRxYWRkMzc3ODMgZm1hICAxICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1kcWFkZDM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZHFhZGQzNzc4NSBmbWEgIDEgIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRxYWRkMzc3ODYgZm1hICAxICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kcWFkZDM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFhZGQzNzc4OCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxYWRkMzc3ODkgZm1hICAxICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFhZGQzNzc5MSBmbWEgIDEgICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxYWRkMzc3OTIgZm1hICAxICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcWFkZDM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFhZGQzNzc5NCBmbWEgIDEgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi1kcWFkZDM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM3ODAxIGZtYSAgMSAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZHFhZGQzNzgwMiBmbWEgIDEgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLWRxYWRkMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kcWFkZDM3ODA0IGZtYSAgMSAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZHFhZGQzNzgwNSBmbWEgIDEgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKLWRxYWRkMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kcWFkZDM3ODA3IGZtYSAgMSAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQzNzgwOCBmbWEgIDEgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRxYWRkMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4MTAgZm1hICAxICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcWFkZDM3ODExIGZtYSAgMSAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxYWRkMzc4MTMgZm1hICAxICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcWFkZDM3ODE0IGZtYSAgMSAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFhZGQzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZHFhZGQzNzgyMSBmbWEgIDEgICBOYU4gLUluZiAgICAtPiAgTmFOCi1kcWFkZDM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLWRxYWRkMzc4MjMgZm1hICAxICAgTmFOIC0xICAgICAgLT4gIE5hTgotZHFhZGQzNzgyNCBmbWEgIDEgICBOYU4gLTAgICAgICAtPiAgTmFOCi1kcWFkZDM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4KLWRxYWRkMzc4MjYgZm1hICAxICAgTmFOICAxICAgICAgLT4gIE5hTgotZHFhZGQzNzgyNyBmbWEgIDEgICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kcWFkZDM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4KLWRxYWRkMzc4MjkgZm1hICAxICAgTmFOICBOYU4gICAgLT4gIE5hTgotZHFhZGQzNzgzMCBmbWEgIDEgIC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kcWFkZDM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4KLWRxYWRkMzc4MzIgZm1hICAxICAtMSAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQzNzgzMyBmbWEgIDEgIC0wICAgIE5hTiAgICAtPiAgTmFOCi1kcWFkZDM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4KLWRxYWRkMzc4MzUgZm1hICAxICAgMSAgICBOYU4gICAgLT4gIE5hTgotZHFhZGQzNzgzNiBmbWEgIDEgICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kcWFkZDM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotZHFhZGQzNzg0MSBmbWEgIDEgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0MyBmbWEgIDEgICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0NCBmbWEgIDEgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0NiBmbWEgIDEgICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0NyBmbWEgIDEgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg0OSBmbWEgIDEgICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1MCBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1MiBmbWEgIDEgIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1MyBmbWEgIDEgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1NSBmbWEgIDEgICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1NiBmbWEgIDEgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1OCBmbWEgIDEgICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg1OSBmbWEgIDEgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcWFkZDM3ODYxIGZtYSAgMSAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCi1kcWFkZDM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1kcWFkZDM3ODYzIGZtYSAgMSAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCi1kcWFkZDM3ODY0IGZtYSAgMSAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40Ci1kcWFkZDM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1kcWFkZDM3ODY2IGZtYSAgMSAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Ci1kcWFkZDM3ODY3IGZtYSAgMSAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44Ci1kcWFkZDM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1kcWFkZDM3ODY5IGZtYSAgMSAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAotZHFhZGQzNzg3MSBmbWEgIDEgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4NzMgZm1hICAxICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg3NCBmbWEgIDEgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4NzYgZm1hICAxICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg3NyBmbWEgIDEgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4NzkgZm1hICAxICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgotZHFhZGQzNzg4MCBmbWEgIDEgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4ODIgZm1hICAxICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Ci1kcWFkZDM3ODgzIGZtYSAgMSAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KLWRxYWRkMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1kcWFkZDM3ODg1IGZtYSAgMSAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4KLWRxYWRkMzc1NzUgZm1hICAxICAgMUUtNjE0MyAtMUUtNjE3NiAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwKLWRxYWRkMzc1NzYgZm1hICAxICAtMUUtNjE0MyArMUUtNjE3NiAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCBTdWJub3JtYWwKLQotLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWRxYWRkMzc5NzIgYXBwbHkgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFhZGQzNzk3MyBmbWEgIDEgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk3NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3OTc2IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA5RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc5NzcgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDhFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3OTc5IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICA2RSs2MTEwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc5ODAgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDVFKzYxMTAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3OTgyIGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAzRSs2MTEwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc5ODMgZm1hICAxICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgIDJFKzYxMTAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzc5ODUgYXBwbHkgICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxYWRkMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3OTg3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk4OCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5MCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOEUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5MSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtN0UrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5MyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5NCBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNEUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5NiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMkUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzk5NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMUUrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZAotCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKLXJvdW5kaW5nOiAgICAgZG93bgotZHFhZGQzNzExMDAgZm1hICAxICAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMDEgZm1hICAxICAxZSsxIC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTAzIGZtYSAgMSAgICArMSAtMWUtNjE0MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMDQgZm1hICAxICAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMDUgZm1hICAxICAxZS0yIC0xZS02MTQzICAgIC0+IDAuMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTA2IGZtYSAgMSAgMWUtMyAtMWUtNjE0MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMDcgZm1hICAxICAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMDggZm1hICAxICAxZS01IC0xZS02MTQzICAgIC0+IDAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTA5IGZtYSAgMSAgMWUtNiAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0Ci0KLXJvdW5kaW5nOiAgICAgY2VpbGluZwotZHFhZGQzNzExMTAgZm1hICAxICAtMWUrMiArMWUtNjE0MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTExIGZtYSAgMSAgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMTMgZm1hICAxICAgICAtMSArMWUtNjE0MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMTQgZm1hICAxICAtMWUtMSArMWUtNjE0MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTE1IGZtYSAgMSAgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMTYgZm1hICAxICAtMWUtMyArMWUtNjE0MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMTcgZm1hICAxICAtMWUtNCArMWUtNjE0MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWRxYWRkMzcxMTE4IGZtYSAgMSAgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZHFhZGQzNzExMTkgZm1hICAxICAtMWUtNiArMWUtNjE0MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0Ci0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCi1yb3VuZGluZzogICAgIGhhbGZfZXZlbgotCi1kcWFkZDM3MTMwMCBmbWEgIDEgIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxMCBmbWEgIDEgIDFFMzQgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxMSBmbWEgIDEgIDFFMzQgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxOCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMxOSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyMCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyMSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyOCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMyOSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzMCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzMSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzOCBmbWEgIDEgIDFFMzQgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTMzOSBmbWEgIDEgIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi0KLWRxYWRkMzcxMzQwIGZtYSAgMSAgMUUzNCAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzQxIGZtYSAgMSAgMUUzNCAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFhZGQzNzEzNDkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM1MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM1NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM1NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNTggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM2MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNjEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM2MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNjQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM2NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNjggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM3MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM3MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNzQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM3NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzNzcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM3OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzODAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM4MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzODMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM4NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzODYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM4OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzODkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM5MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzOTIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTM5NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzEzOTUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCi1kcWFkZDM3MTQyMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE0MjEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQyMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE0MjQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQyNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE0MjcgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcKLWRxYWRkMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04Ci1kcWFkZDM3MTQyOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQotZHFhZGQzNzE0MzAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwCi1kcWFkZDM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEKLWRxYWRkMzcxNDMyIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMgotZHFhZGQzNzE0MzMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzCi1kcWFkZDM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQKLWRxYWRkMzcxNDM1IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQotZHFhZGQzNzE0MzYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2Ci1kcWFkZDM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcKLWRxYWRkMzcxNDM4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOAotZHFhZGQzNzE0MzkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5Ci1kcWFkZDM3MTQ0MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAKLWRxYWRkMzcxNDQxIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQotZHFhZGQzNzE0NDIgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjIgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyCi1kcWFkZDM3MTQ0MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMKLWRxYWRkMzcxNDQ0IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNAotZHFhZGQzNzE0NDUgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1Ci1kcWFkZDM3MTQ0NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYKLWRxYWRkMzcxNDQ3IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNwotZHFhZGQzNzE0NDggZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjggLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4Ci1kcWFkZDM3MTQ0OSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkKLWRxYWRkMzcxNDUwIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMAotZHFhZGQzNzE0NTEgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzEgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxCi1kcWFkZDM3MTQ1MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIKLWRxYWRkMzcxNDUzIGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMwotZHFhZGQzNzE0NTQgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0Ci1kcWFkZDM3MTQ1NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUKLWRxYWRkMzcxNDU2IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNgotCi0tLSBzYW1lLCByZXZlcnNlZCAwCi1kcWFkZDM3MTQ2MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAgICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQ2MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAwIC0+IDAuMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQ2MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zICAwIC0+IDAuMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQ2NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAwIC0+IDAuMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQ2NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS02ICAwIC0+IDAuMDAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTQ2NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03Ci1kcWFkZDM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04Ci1kcWFkZDM3MTQ2OSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS05Ci1kcWFkZDM3MTQ3MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMAotZHFhZGQzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEKLWRxYWRkMzcxNDcyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEyCi1kcWFkZDM3MTQ3MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMwotZHFhZGQzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQKLWRxYWRkMzcxNDc1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE1Ci1kcWFkZDM3MTQ3NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNgotZHFhZGQzNzE0NzcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcKLWRxYWRkMzcxNDc4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE4Ci1kcWFkZDM3MTQ3OSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOQotZHFhZGQzNzE0ODAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAKLWRxYWRkMzcxNDgxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIxCi1kcWFkZDM3MTQ4MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMgotZHFhZGQzNzE0ODMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMKLWRxYWRkMzcxNDg0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI0Ci1kcWFkZDM3MTQ4NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNQotZHFhZGQzNzE0ODYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYKLWRxYWRkMzcxNDg3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI3Ci1kcWFkZDM3MTQ4OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOAotZHFhZGQzNzE0ODkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkKLWRxYWRkMzcxNDkwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMwCi1kcWFkZDM3MTQ5MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMQotZHFhZGQzNzE0OTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIKLWRxYWRkMzcxNDkzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMzCi1kcWFkZDM3MTQ5NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNAotZHFhZGQzNzE0OTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUKLWRxYWRkMzcxNDk2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM2Ci0KLS0tIHNhbWUsIEVzIG9uIHRoZSAwCi1kcWFkZDM3MTUwMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTAxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MDIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUwMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTA0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MDUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUwNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTA3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MDggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUwOSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTEwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MTEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUxMiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTEzIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MTQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUxNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTE2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MTcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUxOCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xOCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTE5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUyMSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yMSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTIyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTIyICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUyNCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTI1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI1ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUyNyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yNyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTI4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTI4ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUzMCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMCAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLWRxYWRkMzcxNTMxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTMxICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQotZHFhZGQzNzE1MzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1Ci1kcWFkZDM3MTUzMyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zMyAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUKLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKLWRxYWRkMzcxNTM0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1kcWFkZDM3MTUzNSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotZHFhZGQzNzE1MzYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLWRxYWRkMzcxNTM3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCi1yb3VuZGluZzogICAgaGFsZl91cAotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZHFhZGQzNzE2MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQzNzE2MDIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZHFhZGQzNzE2MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWRxYWRkMzcxNjExIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDAKLWRxYWRkMzcxNjEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDAKLS0tIG92ZXJmbG93Ci1kcWFkZDM3MTYxMyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzcxNjE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTYyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTYyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE2MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNjMzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE2MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWRxYWRkMzcxNjQwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkMzcxNjQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkMzcxNjQyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWRxYWRkMzcxNjQzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLS0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1kcWFkZDM3MTY1MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwCi1kcWFkZDM3MTY1MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwCi0tLSBvdmVyZmxvdwotZHFhZGQzNzE2NTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3MTY1NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIHVwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTY2MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY2MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY2MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE2NzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQzNzE2NzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNjczIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE2NzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBkb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTY4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY4MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY4MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTY4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE2OTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQzNzE2OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNjkzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE2OTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBjZWlsaW5nCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTcwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTcwMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTcwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTcwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE3MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQzNzE3MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNzEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE3MTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgotcm91bmRpbmc6ICAgIGZsb29yCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTcyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTcyMSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1kcWFkZDM3MTcyMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1kcWFkZDM3MTcyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE3MzEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgotZHFhZGQzNzE3MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKgotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNzMzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE3MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICAwNXVwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1kcWFkZDM3MTc0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTc0MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTc0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1kcWFkZDM3MTc0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci0tLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZHFhZGQzNzE3NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMAotZHFhZGQzNzE3NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMAotLS0gb3ZlcmZsb3cKLWRxYWRkMzcxNzUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzE3NTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQotZHFhZGQzNzE3NjEgZm1hICAxICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKLWRxYWRkMzcxNzYyIGZtYSAgMSAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCi1kcWFkZDM3MTc2MyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAotZHFhZGQzNzE3NjQgZm1hICAxICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKLWRxYWRkMzcxNzY1IGZtYSAgMSAgMTMwRS0yICAgLTEyMEUtMiAtPiAwLjEwCi1kcWFkZDM3MTc2NiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMAotZHFhZGQzNzE3NjcgZm1hICAxICAxMzBFLTIgICAtMUUwICAgIC0+IDAuMzAKLWRxYWRkMzcxNzY4IGZtYSAgMSAgMUUyICAgICAgLTFFNCAgICAtPiAtOS45RSszCi0KLS0tIEdhcHB5IGNvZWZmaWNpZW50czsgY2hlY2sgcmVzaWR1ZSBoYW5kbGluZyBldmVuIHdpdGggZnVsbCBjb2VmZmljaWVudCBnYXAKLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLQotZHFhZGQzNzUwMDEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU3Ci1kcWFkZDM3NTAwMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMDMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDA0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0zICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAwNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMDYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDA3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS02ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAwOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMDkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDEwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS05ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAxMSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMTIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDEzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAxNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMTUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDE2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAxNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMTggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDE5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTAyMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwMjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcAotZHFhZGQzNzUwMzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OQotZHFhZGQzNzUwMzEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xCi1kcWFkZDM3NTAzMiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyCi1kcWFkZDM3NTAzMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMwotZHFhZGQzNzUwMzQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0Ci1kcWFkZDM3NTAzNSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Ci1kcWFkZDM3NTAzNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1NgotZHFhZGQzNzUwMzcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1NjcgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3Ci1kcWFkZDM3NTAzOCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc4Ci1kcWFkZDM3NTAzOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNDAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NSAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDQxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA0MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNDMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAxICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDQ0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA0NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNDYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAxICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDQ3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA0OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNDkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2Ci1yb3VuZGluZzogaGFsZl9ldmVuCi1kcWFkZDM3NTA1MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNTEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDUyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA1MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNTQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDU1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA1NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNTcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDYwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA2MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNjIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDYzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA2NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNjUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDY2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA2NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQotcm91bmRpbmc6IHVwCi1kcWFkZDM3NTA3MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTggICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxCi1kcWFkZDM3NTA3MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNzIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDczIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA3NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNzUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDc2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA3NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwNzggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDc5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTcgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA4MCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwODEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDgyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA4MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwODQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDg1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzEgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA4NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZHFhZGQzNzUwODcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWRxYWRkMzc1MDg4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzQgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1kcWFkZDM3NTA4OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotCi0tLSBEZXN0cnVjdGl2ZSBzdWJ0cmFjdCAoZnJvbSByZW1haW5kZXIgdGVzdHMpCi0KLS0tICsrKyBzb21lIG9mIHRoZXNlIHdpbGwgYmUgb2ZmLWJ5LW9uZSByZW1haW5kZXIgdnMgcmVtYWluZGVyTmVhcgotCi1kcWZtYTQwMDAgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMzCi1kcWZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIKLWRxZm1hNDAwMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMSAgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC40NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExCi1kcWZtYTQwMDMgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQgICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICAtPiAgLTEuMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzE0Ci1kcWZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMDggICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKLWRxZm1hNDAwNSAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MiAgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMS4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzQ4Ci1kcWZtYTQwMDYgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NwotZHFmbWE0MDA3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjc1MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1MwotZHFmbWE0MDA4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0xLjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NwotZHFmbWE0MDA5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQKLWRxZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MiAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyCi1kcWZtYTQwMTEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzIgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC43NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjgKLWRxZm1hNDAxMiAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIyMSAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAwLjY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4Nzc5Ci1kcWZtYTQwMTMgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTAgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwCi1kcWZtYTQwMTQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTMgICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICAtPiAgMi42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2ODcKLWRxZm1hNDAxNSAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMwOCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY5MgotZHFmbWE0MDE2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDMuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MQotZHFmbWE0MDE3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKLWRxZm1hNDAxOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NiAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICA0LjI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NgotZHFmbWE0MDE5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQxICAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1OQotCi0tLSBOdWxsIHRlc3RzCi1kcWFkZDM5OTkwIGZtYSAgMSAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWFkZDM5OTkxIGZtYSAgMSAgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFGTUEuZGVjVGVzdCAtLSBkZWNRdWFkIEZ1c2VkIE11bHRpcGx5IEFkZCAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBUaGVzZSB0ZXN0cyBjb21wcmVzZSB0aHJlZSBwYXJ0czoNCistLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UNCistLSAgICAgIHdoZXJlIHRoZSBmdXNlZCBvcGVyYXRpb24gbWFrZXMgYSBkaWZmZXJlbmNlKQ0KKy0tICAgMi4gTXVsdGlwbHkgdGVzdHMgKHRoaXJkIG9wZXJhbmQgaXMgbmV1dHJhbCB6ZXJvIFswRStlbWF4XSkNCistLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpDQorLS0gVGhlIG11bHRpcGx5IGFuZCBhZGRpdGlvbiB0ZXN0cyBhcmUgZXh0ZW5zaXZlIGJlY2F1c2UgRk1BIG1heSBoYXZlDQorLS0gaXRzIG93biBkZWRpY2F0ZWQgbXVsdGlwbGljYXRpb24gb3IgYWRkaXRpb24gcm91dGluZShzKSwgYW5kIHRoZXkNCistLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4NCisNCistLSBTYW5pdHkgY2hlY2tzDQorZHFmbWEwMDAxIGZtYSAgMSAgIDEgICAxIC0+ICAgMg0KK2RxZm1hMDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCitkcWZtYTAwMDMgZm1hICAyICAgMiAgIDMgLT4gICA3DQorZHFmbWEwMDA0IGZtYSAgOSAgIDkgICA5IC0+ICA5MA0KK2RxZm1hMDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCitkcWZtYTAwMDYgZm1hIC0xICAgMSAgIDIgLT4gICAxDQorZHFmbWEwMDA3IGZtYSAtMiAgIDIgICAzIC0+ICAtMQ0KK2RxZm1hMDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCitkcWZtYTAwMTEgZm1hICAxICAtMSAgIDEgLT4gICAwDQorZHFmbWEwMDEyIGZtYSAgMSAgLTEgICAyIC0+ICAgMQ0KK2RxZm1hMDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCitkcWZtYTAwMTQgZm1hICA5ICAtOSAgIDkgLT4gLTcyDQorZHFmbWEwMDE1IGZtYSAgMSAgIDEgIC0xIC0+ICAgMA0KK2RxZm1hMDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCitkcWZtYTAwMTcgZm1hICAyICAgMiAgLTMgLT4gICAxDQorZHFmbWEwMDE4IGZtYSAgOSAgIDkgIC05IC0+ICA3Mg0KKw0KKy0tIG5vbi1pbnRlZ2VyIGV4YWN0cw0KK2RxZm1hMDEwMCAgZm1hICAgIDI1LjIgICA2My42ICAgLTQzOCAgLT4gIDExNjQuNzINCitkcWZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQorZHFmbWEwMTAyICBmbWEgICAgNDkuMiAgIC00LjggICAyMy4zICAtPiAgLTIxMi44Ng0KK2RxZm1hMDEwMyAgZm1hICAgIDQuMjIgIDAuMDc5ICAtOTQuNiAgLT4gIC05NC4yNjY2Mg0KK2RxZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCitkcWZtYTAxMDUgIGZtYSAgICA2LjEzICAgLTE2MSAgIDY1LjkgIC0+ICAtOTIxLjAzDQorZHFmbWEwMTA2ICBmbWEgICAgMjguMiAgICA3MjcgICA1LjQ1ICAtPiAgMjA1MDYuODUNCitkcWZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQorZHFmbWEwMTA4ICBmbWEgICAgOTMuMyAgIDAuMTkgIDAuMjI2ICAtPiAgMTcuOTUzDQorZHFmbWEwMTA5ICBmbWEgICAwLjE2OSAgIC0zNDEgICA1LjYxICAtPiAgLTUyLjAxOQ0KK2RxZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCitkcWZtYTAxMTEgIGZtYSAgLTAuNDA5ICAgICAxMyAgIDIwLjQgIC0+ICAxNS4wODMNCitkcWZtYTAxMTIgIGZtYSAgICAgMzE3ICAgNzcuMCAgIDE5LjAgIC0+ICAyNDQyOC4wDQorZHFmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQorZHFmbWEwMTE0ICBmbWEgICAgMS4zNiAgMC45ODQgIDAuNDkzICAtPiAgMS44MzEyNA0KK2RxZm1hMDExNSAgZm1hICAgIDcyLjcgICAgMjc0ICAgMS41NiAgLT4gIDE5OTIxLjM2DQorZHFmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQorZHFmbWEwMTE3ICBmbWEgICAgIDY2NiAgMC4yNDcgICAyNS40ICAtPiAgMTg5LjkwMg0KK2RxZm1hMDExOCAgZm1hICAgLTMuODcgICAzLjA2ICAgNzguMCAgLT4gIDY2LjE1NzgNCitkcWZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQorZHFmbWEwMTIwICBmbWEgICAtOTEuNiAgIDUuMjkgIDAuMTUzICAtPiAgLTQ4NC40MTENCisNCistLSBjYXNlcyB3aGVyZSByZXN1bHQgaXMgZGlmZmVyZW50IGZyb20gc2VwYXJhdGUgbXVsdGlwbHkgKyBhZGQ7IGVhY2gNCistLSBpcyBwcmVjZWRlZCBieSB0aGUgcmVzdWx0IG9mIHVuZnVzZWQgbXVsdGlwbHkgYW5kIGFkZA0KKy0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OEUrMzgNCitkcWZtYTAyMDIgIGZtYSAgICAgICA2ODUzNzk4NTg2MTM1NTg2NDQ1Ny41Njk0ICAgICAgNjU2NTg3NTc2Mjk3MjA4NjYwNS44NTk2OSAgICAgICAzNTg5MjYzNDQ0NzIzNjc1My4xNzI4MTIgIC0+ICA0LjUwMDExOTAwMjEwMDAwMDIwOTQ2OTcyOTM3NTY5ODc3OUUrMzggSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTRFKzQxDQorZHFmbWEwMjA4ICBmbWEgICAgICAgICAgODkyNjE4MjIzNDQ3Mjc2Mjg1NzEuOSAgICAgIDY3MTc1OTU4NDU2NTQxMzEzODMzMzYuODkgICAgICA1MDYxMDM2NDk3Mjg4Nzk2MDc2MjY2LjExICAtPiAgNS45OTYyNDg0Njk1ODQ1OTQzNDY4NTg4ODE2MjAxODU1MTNFKzQxIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcwRSszNA0KK2RxZm1hMDIxMCAgZm1hICAgICAgIDMyMDUwNjIzNzIzMjQ0ODY4NS40OTU5NzEgICAgICAgNTkyNTc1OTc3NjQwMTc5NjcuOTg0NDQ4ICAgICAgMzIwNTYxNTIzOTA3NzcxMTU4OTkxMi44NSAgLT4gIDEuODk5MjQyOTY4Njc4MjU2OTI0MDIxNTk0NzcwODc0MDcxRSszNCBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOUUrMzcNCitkcWZtYTAyMTUgIGZtYSAgICAgICAgMjIwMjQ3ODQzMjU5MTEyMjYzLjE3OTk1ICAgICAgIDMyMTM5MjM0MDI4Nzk4Nzk3OTAwMi44MCAgICAgICAgNDc1MzMyNzk4MTk5OTcxNjc2NTU0NDAgIC0+ICA3LjA3ODU5Njk3ODg0MjgwOTUzNzkyOTY5OTk1NDg2MDMwOEUrMzcgSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDNFKzM3DQorZHFmbWEwMjI2ICBmbWEgICAgICAgMjM4ODA3Mjk3OTAzNjg4ODA0MTIuMTQ0OSAgICAgICA1MTI5NDczMzM4MjcwNjQ3MTkuNTU0MDcgICAgICAyMTcxMTc0Mzg0MTk1OTA4MjQ1MDIuOTYzICAtPiAgMS4yMjQ5NTU2Njc1ODE0Mjc1NTk3NTQxMDY4NjIzNTA3NDRFKzM3IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjUzMDA5NDA0MzI1MzE0ODgwNjI3MjI3NjM2ODU3OTE0NEUrNDINCitkcWZtYTAyMjkgIGZtYSAgICAgICAgMjUzOTg5MjM1NzAxNjA5OTcwNi40MTI2ICAgICAgLTk5NjE0MjIzMjY2NzUwNDgxNzcxNzQzNSAgICAgICA1MzY4MjA4MjU5ODMxNTk0OTQyNS45MzcgIC0+ICAtMi41MzAwOTQwNDMyNTMxNDg4MDYyNzIyNzYzNjg1NzkxNDNFKzQyIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDU0RSszNw0KK2RxZm1hMDIzMyAgZm1hICAgICAgICA0NTQ2MzM5NDkxMzQxNjI0NDY0LjA4MDQgICAgICAgICAgICAzNzY4NzE3ODY0MTY5MjA1NTgxICAgICAgIDgzNTc4OTgwMjc4NjkwMzk1MTg0LjYyMCAgLT4gIDEuNzEzMzg3MDg1NzU5NzExOTU0MzE5MzkxNDEyNzg4NDUzRSszNyBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0N0UrMzUNCitkcWZtYTAyMzUgIGZtYSAgICAgICAgNDA5MjQyMTE5NDMzODE2MTMxLjQyMjUzICAgICAgOTkyNjMzODE1MTY2NzQxNTAxLjQ3NzI0OSAgICAgICAgNzAxNzk2MzY1NDQ0MTY3NTYxMjk1NDYgIC0+ICA0LjA2MjI3NTY2MzQwNTgyMzcxNjQxMTU3OTExNzc3MTU0OEUrMzUgSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjNFKzQ3DQorZHFmbWEwMjU4ICBmbWEgICAgICAgIDgxNzk0MTMzNjU5MzU0MTc0MjE1OTY4NCAgICAgICA3MzM4NjczMzk3NjkzMTA3MjkyNjY1OTggICAgICA3ODU2Mzg0NDY1MDk0MjQxOTMxMTgzMC44ICAtPiAgNi4wMDI2MDQzMjc3MzI1Njg0OTA1NjIyNDk4NzUzMDY4MjJFKzQ3IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC0yLjAyNzAyMjUxNDM4MTQ1MjE5NzUxMDEwMzM5NTI4Mzg3NEUrMzkNCitkcWZtYTAyNjQgIGZtYSAgICAgICAzODc2MTczMTAxNjkxNjEyNzAuNzM3NTMyICAgICAtNTIyOTQ0MjcwMzQxNDk1NjA2MTIxNi42MiAgICAgIDU3NjY1NjY2ODE2NjUyOTY3MTUwNDczLjUgIC0+ICAtMi4wMjcwMjI1MTQzODE0NTIxOTc1MTAxMDMzOTUyODM4NzNFKzM5IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIC03Ljg1NjUyNTAzOTgwMzU1NDAwMTE0NDA4OTg0MjczMDM2MUUrMzcNCitkcWZtYTAyNjcgIGZtYSAgICAgIC04NDc2NTU4NDU3MjA1NjUyNzQ3MDEuMjEwICAgICAgICA5MjY4NTMxNjU2NDExNzczOS44Mzk4NCAgICAgIDIyNzgwOTUwMDQxMzc2NDI0NDI5LjU2ODYgIC0+ICAtNy44NTY1MjUwMzk4MDM1NTQwMDExNDQwODk4NDI3MzAzNjBFKzM3IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU5RSszOA0KK2RxZm1hMDI2OCAgZm1hICAgICAgICAgIDIxNTkwMjkwMzY1MTI3Njg1LjM2NzUgICAgICAgNzg1MzEzOTIyNzU3NjU0MTM3OTQyNi44ICAgICAgIC0zMjc1ODU5NDM3MjM2MTgwLjc2MTU0NCAgLT4gIDEuNjk1NTE1NTYyMDExNTIwNzQ2MTI1NjA3NTAyMjM3NTU4RSszOCBJbmV4YWN0IFJvdW5kZWQNCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICAtOC40NDg0MjI5MzU3ODMyODkyMTk3NDgxMTUwMzgwMTQ3MTBFKzM4DQorZHFmbWEwMjY5ICBmbWEgICAgICAtOTc0MzIwNjM2MjcyODYyNjk3Ljk3MTU4NiAgICAgIDg2NzEwOTEwMzY0MTg2MDI0NzQ0MC43NTYgICAgICAgIC05Nzc1MTcwNzc1OTAyNDU0NzYyLjk4ICAtPiAgLTguNDQ4NDIyOTM1NzgzMjg5MjE5NzQ4MTE1MDM4MDE0NzA5RSszOCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBDYXNlcyB3aGVyZSBtdWx0aXBseSB3b3VsZCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgaWYgc2VwYXJhdGUNCitkcWZtYTAzMDAgIGZtYSAgIDllKzYxNDQgICAgMTAgICAwICAgICAgICAgLT4gSW5maW5pdHkgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMDMwMSAgZm1hICAgMWUrNjE0NCAgICAxMCAgIDAgICAgICAgICAtPiBJbmZpbml0eSAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEwMzAyICBmbWEgICAxZSs2MTQ0ICAgIDEwICAgLTFlKzYxNDQgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IENsYW1wZWQNCitkcWZtYTAzMDMgIGZtYSAgIDFlKzYxNDQgICAgMTAgICAtOWUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgQ2xhbXBlZA0KKy0tIHN1Ym5vcm1hbCBldGMuDQorZHFmbWEwMzA1ICBmbWEgICAxZS02MTc2ICAgIDAuMSAgMCAgICAgICAgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxZm1hMDMwNiAgZm1hICAgMWUtNjE3NiAgICAwLjEgIDEgICAgICAgICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTAzMDcgIGZtYSAgIDFlLTYxNzYgICAgMC4xICAxZS02MTc2ICAgLT4gMUUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEluZmluaXRlIGNvbWJpbmF0aW9ucw0KK2RxZm1hMDgwMCBmbWEgIEluZiAgIEluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCitkcWZtYTA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEwODAzIGZtYSAgSW5mICAtSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMDgwNiBmbWEgLUluZiAgLUluZiAgIEluZiAgICAtPiAgSW5maW5pdHkNCitkcWZtYTA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24NCitkcWZtYTA5MDAgZm1hICBOYU4yICBOYU4zICBOYU41ICAgLT4gIE5hTjINCitkcWZtYTA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCitkcWZtYTA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUNCistLSBmaXJzdCBzTmFOIHdpbnMgKGNvbnNpZGVyIHFOYU4gZnJvbSBlYXJsaWVyIHNOYU4gYmVpbmcNCistLSBvdmVycmlkZGVuIGJ5IGFuIHNOYU4gaW4gdGhpcmQgb3BlcmFuZCkNCitkcWZtYTA5MDMgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTA5MDUgZm1hICAwICAgICAwICAgICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTA5MDYgZm1hICBzTmFOMSBzTmFOMiBzTmFOMyAgLT4gIE5hTjEgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTA5MDggZm1hICBOYU43ICBOYU41ICBzTmFOMyAgLT4gIE5hTjMgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBNVUxUSVBMSUNBVElPTiBURVNUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RxZm1hMjAwMCBmbWEgIDIgICAgICAyICAgMGUrNjE0NCAgLT4gNA0KK2RxZm1hMjAwMSBmbWEgIDIgICAgICAzICAgMGUrNjE0NCAgLT4gNg0KK2RxZm1hMjAwMiBmbWEgIDUgICAgICAxICAgMGUrNjE0NCAgLT4gNQ0KK2RxZm1hMjAwMyBmbWEgIDUgICAgICAyICAgMGUrNjE0NCAgLT4gMTANCitkcWZtYTIwMDQgZm1hICAxLjIwICAgMiAgIDBlKzYxNDQgIC0+IDIuNDANCitkcWZtYTIwMDUgZm1hICAxLjIwICAgMCAgIDBlKzYxNDQgIC0+IDAuMDANCitkcWZtYTIwMDYgZm1hICAxLjIwICAtMiAgIDBlKzYxNDQgIC0+IC0yLjQwDQorZHFmbWEyMDA3IGZtYSAgLTEuMjAgIDIgICAwZSs2MTQ0ICAtPiAtMi40MA0KK2RxZm1hMjAwOCBmbWEgIC0xLjIwICAwICAgMGUrNjE0NCAgLT4gMC4wMA0KK2RxZm1hMjAwOSBmbWEgIC0xLjIwIC0yICAgMGUrNjE0NCAgLT4gMi40MA0KK2RxZm1hMjAxMCBmbWEgIDUuMDkgNy4xICAgMGUrNjE0NCAgLT4gMzYuMTM5DQorZHFmbWEyMDExIGZtYSAgMi41ICAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wDQorZHFmbWEyMDEyIGZtYSAgMi41MCAgIDQgICAwZSs2MTQ0ICAtPiAxMC4wMA0KK2RxZm1hMjAxMyBmbWEgIDEuMjM0NTY3ODkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMGUrNjE0NCAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KK2RxZm1hMjAxNSBmbWEgIDIuNTAgICA0ICAgMGUrNjE0NCAgLT4gMTAuMDANCitkcWZtYTIwMTYgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTIwMTcgZm1hICAgOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTIwMTggZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTIwMTkgZm1hICAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAgIDBlKzYxNDQgIC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB6ZXJvcywgZXRjLg0KK2RxZm1hMjAyMSBmbWEgICAwICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjAyMiBmbWEgICAwICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjAyMyBmbWEgIC0wICAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjAyNCBmbWEgIC0wICAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjAyNSBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjAyNiBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjAyNyBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjAyOCBmbWEgIC0wLjAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjAzMCBmbWEgICA1LjAwICAgMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMA0KK2RxZm1hMjAzMSBmbWEgICAwMC4wMCAgMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMA0KK2RxZm1hMjAzMiBmbWEgICAwMC4wMCAgMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcWZtYTIwMzMgZm1hICAgMEUtMyAgIDAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZHFmbWEyMDM0IGZtYSAgLTUuMDAgICAxRS0zICAgIDBlKzYxNDQgIC0+IC0wLjAwNTAwDQorZHFmbWEyMDM1IGZtYSAgLTAwLjAwICAwLjAwMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwDQorZHFmbWEyMDM2IGZtYSAgLTAwLjAwICAwRS0zICAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2RxZm1hMjAzNyBmbWEgIC0wRS0zICAgMDAuMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCitkcWZtYTIwMzggZm1hICAgNS4wMCAgLTFFLTMgICAgMGUrNjE0NCAgLT4gLTAuMDA1MDANCitkcWZtYTIwMzkgZm1hICAgMDAuMDAgLTAuMDAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDANCitkcWZtYTIwNDAgZm1hICAgMDAuMDAgLTBFLTMgICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQorZHFmbWEyMDQxIGZtYSAgIDBFLTMgIC0wMC4wMCAgIDBlKzYxNDQgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2RxZm1hMjA0MiBmbWEgIC01LjAwICAtMUUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDUwMA0KK2RxZm1hMjA0MyBmbWEgIC0wMC4wMCAtMC4wMDAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMA0KK2RxZm1hMjA0NCBmbWEgIC0wMC4wMCAtMEUtMyAgICAwZSs2MTQ0ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcWZtYTIwNDUgZm1hICAtMEUtMyAgLTAwLjAwICAgMGUrNjE0NCAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KK2RxZm1hMjA1MCBmbWEgIDEuMjAgMyAgICAgICAgICAwZSs2MTQ0ICAtPiAzLjYwDQorZHFmbWEyMDUxIGZtYSAgNyAgICAzICAgICAgICAgIDBlKzYxNDQgIC0+IDIxDQorZHFmbWEyMDUyIGZtYSAgMC45ICAwLjggICAgICAgIDBlKzYxNDQgIC0+IDAuNzINCitkcWZtYTIwNTMgZm1hICAwLjkgIC0wICAgICAgICAgMGUrNjE0NCAgLT4gMC4wDQorZHFmbWEyMDU0IGZtYSAgNjU0MzIxIDY1NDMyMSAgIDBlKzYxNDQgIC0+IDQyODEzNTk3MTA0MQ0KKw0KK2RxZm1hMjA2MCBmbWEgIDEyMy40NSAxZTcgICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrOQ0KK2RxZm1hMjA2MSBmbWEgIDEyMy40NSAxZTggICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTANCitkcWZtYTIwNjIgZm1hICAxMjMuNDUgMWUrOSAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzExDQorZHFmbWEyMDYzIGZtYSAgMTIzLjQ1IDFlMTAgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxMg0KK2RxZm1hMjA2NCBmbWEgIDEyMy40NSAxZTExICAgMGUrNjE0NCAgLT4gIDEuMjM0NUUrMTMNCitkcWZtYTIwNjUgZm1hICAxMjMuNDUgMWUxMiAgIDBlKzYxNDQgIC0+ICAxLjIzNDVFKzE0DQorZHFmbWEyMDY2IGZtYSAgMTIzLjQ1IDFlMTMgICAwZSs2MTQ0ICAtPiAgMS4yMzQ1RSsxNQ0KKw0KKw0KKy0tIHRlc3Qgc29tZSBpbnRlcm1lZGlhdGUgbGVuZ3Rocw0KKy0tICAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZHFmbWEyMDgwIGZtYSAgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCitkcWZtYTIwODQgZm1hICAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgICAwZSs2MTQ0ICAtPiAxMjMwMTIzNDU2NDU2NzguOQ0KK2RxZm1hMjA5MCBmbWEgIDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAgIDBlKzYxNDQgIC0+IDEyMzAxMjM0NTY0NTY3OC45DQorZHFmbWEyMDk0IGZtYSAgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xICAgMGUrNjE0NCAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCisNCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQorZHFmbWEyMTAxIGZtYSAgOSA5ICAgICAwZSs2MTQ0ICAtPiA4MQ0KK2RxZm1hMjEwMiBmbWEgIDkgOTAgICAgIDBlKzYxNDQgIC0+IDgxMA0KK2RxZm1hMjEwMyBmbWEgIDkgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwDQorZHFmbWEyMTA0IGZtYSAgOSA5MDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMA0KK2RxZm1hMjEwNSBmbWEgIDkgOTAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMA0KK2RxZm1hMjEwNiBmbWEgIDkgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwDQorZHFmbWEyMTA3IGZtYSAgOSA5MDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMA0KK2RxZm1hMjEwOCBmbWEgIDkgOTAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMA0KK2RxZm1hMjEwOSBmbWEgIDkgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwDQorZHFmbWEyMTEwIGZtYSAgOSA5MDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMA0KK2RxZm1hMjExMSBmbWEgIDkgOTAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMA0KK2RxZm1hMjExMiBmbWEgIDkgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwDQorZHFmbWEyMTEzIGZtYSAgOSA5MDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMA0KK2RxZm1hMjExNCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjExNSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMTYgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMTcgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDANCistLWRxZm1hMjExOCBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMTkgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMjAgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCistLWRxZm1hMjEyMSBmbWEgIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMjIgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcWZtYTIxMjMgZm1hICA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIHdpdGhvdXQgY2Fycmllcw0KK2RxZm1hMjEzMSBmbWEgIDMgMyAgICAgMGUrNjE0NCAgLT4gOQ0KK2RxZm1hMjEzMiBmbWEgIDMgMzAgICAgIDBlKzYxNDQgIC0+IDkwDQorZHFmbWEyMTMzIGZtYSAgMyAzMDAgICAgIDBlKzYxNDQgIC0+IDkwMA0KK2RxZm1hMjEzNCBmbWEgIDMgMzAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMA0KK2RxZm1hMjEzNSBmbWEgIDMgMzAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwDQorZHFmbWEyMTM2IGZtYSAgMyAzMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMA0KK2RxZm1hMjEzNyBmbWEgIDMgMzAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMA0KK2RxZm1hMjEzOCBmbWEgIDMgMzAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwDQorZHFmbWEyMTM5IGZtYSAgMyAzMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMA0KK2RxZm1hMjE0MCBmbWEgIDMgMzAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMA0KK2RxZm1hMjE0MSBmbWEgIDMgMzAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwDQorZHFmbWEyMTQyIGZtYSAgMyAzMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMA0KK2RxZm1hMjE0MyBmbWEgIDMgMzAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMA0KK2RxZm1hMjE0NCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwDQorZHFmbWEyMTQ1IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE0NiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE0NyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwDQorZHFmbWEyMTQ4IGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE0OSBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE1MCBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFmbWEyMTUxIGZtYSAgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE1MiBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjE1MyBmbWEgIDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorDQorZHFmbWEyMjYzIGZtYSAgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgIDBlKzYxNDQgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcNCitkcWZtYTIzMDEgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMwMiBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMDMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMDQgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMwNSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMDYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMDcgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMwOCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMDkgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMTAgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMxMSBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMTIgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMTMgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMxNCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMTUgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgICAwZSs2MTQ0ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcWZtYTIzMTYgZm1hICA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxZm1hMjMxNyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0ICBSb3VuZGVkDQorZHFmbWEyMzE4IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1ICBSb3VuZGVkDQorZHFmbWEyMzE5IGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZA0KK2RxZm1hMjMyMCBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM3ICBSb3VuZGVkDQorZHFmbWEyMzIxIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4ICBSb3VuZGVkDQorZHFmbWEyMzIyIGZtYSAgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAgIDBlKzYxNDQgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZA0KK2RxZm1hMjMyMyBmbWEgIDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgICAgMGUrNjE0NCAgLT4gOC4xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzQwICBSb3VuZGVkDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCitkcWZtYTI1MDQgIGZtYSAgIDBFLTQyNjAgMTAwMEUtNDI2MCAgICAwZSs2MTQ0ICAtPiAwRS02MTc2IENsYW1wZWQNCitkcWZtYTI1MDUgIGZtYSAgIDEwMEUrNDI2MCAwRSs0MjYwICAgICAwZSs2MTQ0ICAtPiAwRSs2MTExIENsYW1wZWQNCisNCistLSBtaXhlZCB3aXRoIHplcm9zDQorZHFmbWEyNTQxIGZtYSAgIDAgICAgLTEgICAgICAgMGUrNjE0NCAgLT4gIDANCitkcWZtYTI1NDIgZm1hICAtMCAgICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjU0MyBmbWEgICAwICAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwDQorZHFmbWEyNTQ0IGZtYSAgLTAgICAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDANCitkcWZtYTI1NDUgZm1hICAtMSAgICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KK2RxZm1hMjU0NiBmbWEgIC0xICAgIC0wICAgICAgIDBlKzYxNDQgIC0+ICAwDQorZHFmbWEyNTQ3IGZtYSAgIDEgICAgIDAgICAgICAgMGUrNjE0NCAgLT4gIDANCitkcWZtYTI1NDggZm1hICAgMSAgICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMA0KKw0KK2RxZm1hMjU1MSBmbWEgICAwLjAgIC0xICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCitkcWZtYTI1NTIgZm1hICAtMC4wICAtMSAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQorZHFmbWEyNTUzIGZtYSAgIDAuMCAgIDEgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KK2RxZm1hMjU1NCBmbWEgIC0wLjAgICAxICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCitkcWZtYTI1NTUgZm1hICAtMS4wICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQorZHFmbWEyNTU2IGZtYSAgLTEuMCAgLTAgICAgICAgMGUrNjE0NCAgLT4gIDAuMA0KK2RxZm1hMjU1NyBmbWEgICAxLjAgICAwICAgICAgIDBlKzYxNDQgIC0+ICAwLjANCitkcWZtYTI1NTggZm1hICAgMS4wICAtMCAgICAgICAwZSs2MTQ0ICAtPiAgMC4wDQorDQorZHFmbWEyNTYxIGZtYSAgIDAgICAgLTEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KK2RxZm1hMjU2MiBmbWEgIC0wICAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCitkcWZtYTI1NjMgZm1hICAgMCAgICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQorZHFmbWEyNTY0IGZtYSAgLTAgICAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KK2RxZm1hMjU2NSBmbWEgIC0xICAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCitkcWZtYTI1NjYgZm1hICAtMSAgICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wDQorZHFmbWEyNTY3IGZtYSAgIDEgICAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMA0KK2RxZm1hMjU2OCBmbWEgICAxICAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjANCisNCitkcWZtYTI1NzEgZm1hICAgMC4wICAtMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjU3MiBmbWEgIC0wLjAgIC0xLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQorZHFmbWEyNTczIGZtYSAgIDAuMCAgIDEuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCitkcWZtYTI1NzQgZm1hICAtMC4wICAgMS4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjU3NSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQorZHFmbWEyNTc2IGZtYSAgLTEuMCAgLTAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCitkcWZtYTI1NzcgZm1hICAgMS4wICAgMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjU3OCBmbWEgICAxLjAgIC0wLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQorZHFmbWEyNTc5IGZtYSAgIDEuMCAgIDAuMCAgICAgMGUrNjE0NCAgLT4gIDAuMDANCitkcWZtYTI1MzAgZm1hICAtMS4wICAtMC4wICAgICAwZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjUzMSBmbWEgIC0xLjAgICAwLjAgICAgIDBlKzYxNDQgIC0+ICAwLjAwDQorZHFmbWEyNTMyIGZtYSAgIDEuMCAgLTAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDANCitkcWZtYTI1MzMgZm1hICAgMS4wICAgMC4wICAgIC0wZSs2MTQ0ICAtPiAgMC4wMA0KK2RxZm1hMjUzNCBmbWEgIC0xLjAgIC0wLjAgICAgLTBlKzYxNDQgIC0+ICAwLjAwDQorZHFmbWEyNTM1IGZtYSAgLTEuMCAgIDAuMCAgICAtMGUrNjE0NCAgLT4gLTAuMDANCisNCisNCistLSBTcGVjaWFscw0KK2RxZm1hMjU4MCBmbWEgICBJbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjU4MSBmbWEgICBJbmYgIC0xMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjU4MiBmbWEgICBJbmYgIC0xICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjU4MyBmbWEgICBJbmYgIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNTg0IGZtYSAgIEluZiAgIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI1ODUgZm1hICAgSW5mICAgMSAgICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCitkcWZtYTI1ODYgZm1hICAgSW5mICAgMTAwMCAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCitkcWZtYTI1ODcgZm1hICAgSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkNCitkcWZtYTI1ODggZm1hICAtMTAwMCAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCitkcWZtYTI1ODkgZm1hICAtSW5mICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCitkcWZtYTI1OTAgZm1hICAtMSAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCitkcWZtYTI1OTEgZm1hICAtMCAgICAgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjU5MiBmbWEgICAwICAgICBJbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNTkzIGZtYSAgIDEgICAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorZHFmbWEyNTk0IGZtYSAgIDEwMDAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorZHFmbWEyNTk1IGZtYSAgIEluZiAgIEluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorDQorZHFmbWEyNjAwIGZtYSAgLUluZiAgLUluZiAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorZHFmbWEyNjAxIGZtYSAgLUluZiAgLTEwMDAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorZHFmbWEyNjAyIGZtYSAgLUluZiAgLTEgICAgICAgMGUrNjE0NCAgLT4gIEluZmluaXR5DQorZHFmbWEyNjAzIGZtYSAgLUluZiAgLTAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2MDQgZm1hICAtSW5mICAgMCAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjYwNSBmbWEgIC1JbmYgICAxICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjYwNiBmbWEgIC1JbmYgICAxMDAwICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjYwNyBmbWEgIC1JbmYgICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjYwOCBmbWEgIC0xMDAwICBJbmYgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eQ0KK2RxZm1hMjYwOSBmbWEgIC1JbmYgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KK2RxZm1hMjYxMCBmbWEgIC0xICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eQ0KK2RxZm1hMjYxMSBmbWEgIC0wICAgIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjEyIGZtYSAgIDAgICAgLUluZiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2MTMgZm1hICAgMSAgICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCitkcWZtYTI2MTQgZm1hICAgMTAwMCAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCitkcWZtYTI2MTUgZm1hICAgSW5mICAtSW5mICAgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkNCisNCitkcWZtYTI2MjEgZm1hICAgTmFOIC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjIyIGZtYSAgIE5hTiAtMTAwMCAgICAgMGUrNjE0NCAgLT4gIE5hTg0KK2RxZm1hMjYyMyBmbWEgICBOYU4gLTEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCitkcWZtYTI2MjQgZm1hICAgTmFOIC0wICAgICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjI1IGZtYSAgIE5hTiAgMCAgICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KK2RxZm1hMjYyNiBmbWEgICBOYU4gIDEgICAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCitkcWZtYTI2MjcgZm1hICAgTmFOICAxMDAwICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjI4IGZtYSAgIE5hTiAgSW5mICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KK2RxZm1hMjYyOSBmbWEgICBOYU4gIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCitkcWZtYTI2MzAgZm1hICAtSW5mICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjMxIGZtYSAgLTEwMDAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KK2RxZm1hMjYzMiBmbWEgIC0xICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCitkcWZtYTI2MzMgZm1hICAtMCAgICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjM0IGZtYSAgIDAgICAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KK2RxZm1hMjYzNSBmbWEgICAxICAgIE5hTiAgICAgIDBlKzYxNDQgIC0+ICBOYU4NCitkcWZtYTI2MzYgZm1hICAgMTAwMCBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFODQorZHFmbWEyNjM3IGZtYSAgIEluZiAgTmFOICAgICAgMGUrNjE0NCAgLT4gIE5hTg0KKw0KK2RxZm1hMjY0MSBmbWEgICBzTmFOIC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjQyIGZtYSAgIHNOYU4gLTEwMDAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NDMgZm1hICAgc05hTiAtMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY0NCBmbWEgICBzTmFOIC0wICAgICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjQ1IGZtYSAgIHNOYU4gIDAgICAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NDYgZm1hICAgc05hTiAgMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY0NyBmbWEgICBzTmFOICAxMDAwICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjQ4IGZtYSAgIHNOYU4gIE5hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NDkgZm1hICAgc05hTiBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY1MCBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjUxIGZtYSAgLUluZiAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NTIgZm1hICAtMTAwMCBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY1MyBmbWEgIC0xICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjU0IGZtYSAgLTAgICAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NTUgZm1hICAgMCAgICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY1NiBmbWEgICAxICAgIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjU3IGZtYSAgIDEwMDAgc05hTiAgICAgMGUrNjE0NCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NTggZm1hICAgSW5mICBzTmFOICAgICAwZSs2MTQ0ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjY1OSBmbWEgICBOYU4gIHNOYU4gICAgIDBlKzYxNDQgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxZm1hMjY2MSBmbWEgICBOYU45IC1JbmYgICAgIDBlKzYxNDQgIC0+ICBOYU45DQorZHFmbWEyNjYyIGZtYSAgIE5hTjggIDk5OSAgICAgMGUrNjE0NCAgLT4gIE5hTjgNCitkcWZtYTI2NjMgZm1hICAgTmFONzEgSW5mICAgICAwZSs2MTQ0ICAtPiAgTmFONzENCitkcWZtYTI2NjQgZm1hICAgTmFONiAgTmFONSAgICAwZSs2MTQ0ICAtPiAgTmFONg0KK2RxZm1hMjY2NSBmbWEgIC1JbmYgICBOYU40ICAgIDBlKzYxNDQgIC0+ICBOYU40DQorZHFmbWEyNjY2IGZtYSAgLTk5OSAgIE5hTjMzICAgMGUrNjE0NCAgLT4gIE5hTjMzDQorZHFmbWEyNjY3IGZtYSAgIEluZiAgIE5hTjIgICAgMGUrNjE0NCAgLT4gIE5hTjINCisNCitkcWZtYTI2NzEgZm1hICAgc05hTjk5IC1JbmYgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzIgZm1hICAgc05hTjk4IC0xMSAgICAgICAwZSs2MTQ0ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzMgZm1hICAgc05hTjk3ICBOYU4gICAgICAwZSs2MTQ0ICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzQgZm1hICAgc05hTjE2IHNOYU45NCAgICAwZSs2MTQ0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzUgZm1hICAgTmFOOTUgIHNOYU45MyAgICAwZSs2MTQ0ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzYgZm1hICAtSW5mICAgIHNOYU45MiAgICAwZSs2MTQ0ICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzcgZm1hICAgMDg4ICAgIHNOYU45MSAgICAwZSs2MTQ0ICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzggZm1hICAgSW5mICAgIHNOYU45MCAgICAwZSs2MTQ0ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI2NzkgZm1hICAgTmFOICAgIHNOYU44OSAgICAwZSs2MTQ0ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWZtYTI2ODEgZm1hICAtTmFOOSAtSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFOOQ0KK2RxZm1hMjY4MiBmbWEgIC1OYU44ICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU44DQorZHFmbWEyNjgzIGZtYSAgLU5hTjcxIEluZiAgICAgMGUrNjE0NCAgLT4gLU5hTjcxDQorZHFmbWEyNjg0IGZtYSAgLU5hTjYgLU5hTjUgICAgMGUrNjE0NCAgLT4gLU5hTjYNCitkcWZtYTI2ODUgZm1hICAtSW5mICAtTmFONCAgICAwZSs2MTQ0ICAtPiAtTmFONA0KK2RxZm1hMjY4NiBmbWEgIC05OTkgIC1OYU4zMyAgIDBlKzYxNDQgIC0+IC1OYU4zMw0KK2RxZm1hMjY4NyBmbWEgICBJbmYgIC1OYU4yICAgIDBlKzYxNDQgIC0+IC1OYU4yDQorDQorZHFmbWEyNjkxIGZtYSAgLXNOYU45OSAtSW5mICAgICAgMGUrNjE0NCAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjkyIGZtYSAgLXNOYU45OCAtMTEgICAgICAgMGUrNjE0NCAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjkzIGZtYSAgLXNOYU45NyAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk0IGZtYSAgLXNOYU4xNiAtc05hTjk0ICAgMGUrNjE0NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk1IGZtYSAgLU5hTjk1ICAtc05hTjkzICAgMGUrNjE0NCAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk2IGZtYSAgLUluZiAgICAtc05hTjkyICAgMGUrNjE0NCAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk3IGZtYSAgIDA4OCAgICAtc05hTjkxICAgMGUrNjE0NCAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk4IGZtYSAgIEluZiAgICAtc05hTjkwICAgMGUrNjE0NCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNjk5IGZtYSAgLU5hTiAgICAtc05hTjg5ICAgMGUrNjE0NCAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFmbWEyNzAxIGZtYSAgLU5hTiAgLUluZiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KK2RxZm1hMjcwMiBmbWEgIC1OYU4gICA5OTkgICAgIDBlKzYxNDQgIC0+IC1OYU4NCitkcWZtYTI3MDMgZm1hICAtTmFOICAgSW5mICAgICAwZSs2MTQ0ICAtPiAtTmFODQorZHFmbWEyNzA0IGZtYSAgLU5hTiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KK2RxZm1hMjcwNSBmbWEgIC1JbmYgIC1OYU4wICAgIDBlKzYxNDQgIC0+IC1OYU4NCitkcWZtYTI3MDYgZm1hICAtOTk5ICAtTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFODQorZHFmbWEyNzA3IGZtYSAgIEluZiAgLU5hTiAgICAgMGUrNjE0NCAgLT4gLU5hTg0KKw0KK2RxZm1hMjcxMSBmbWEgIC1zTmFOICAgLUluZiAgICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI3MTIgZm1hICAtc05hTiAgIC0xMSAgICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNzEzIGZtYSAgLXNOYU4wMCAgTmFOICAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjcxNCBmbWEgIC1zTmFOICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI3MTUgZm1hICAtTmFOICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNzE2IGZtYSAgLUluZiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjcxNyBmbWEgICAwODggICAgLXNOYU4gICAgIDBlKzYxNDQgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWZtYTI3MTggZm1hICAgSW5mICAgIC1zTmFOICAgICAwZSs2MTQ0ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFmbWEyNzE5IGZtYSAgLU5hTiAgICAtc05hTiAgICAgMGUrNjE0NCAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KKy0tIHNpZ25zDQorZHFmbWEyNzUxIGZtYSAgIDFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzUyIGZtYSAgIDFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzUzIGZtYSAgLTFlKzQyNzcgIDFlKzMzMTEgICAwZSs2MTQ0ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzU0IGZtYSAgLTFlKzQyNzcgLTFlKzMzMTEgICAwZSs2MTQ0ICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzU1IGZtYSAgIDFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyNzU2IGZtYSAgIDFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyNzU3IGZtYSAgLTFlLTQyNzcgIDFlLTMzMTEgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyNzU4IGZtYSAgLTFlLTQyNzcgLTFlLTMzMTEgICAwZSs2MTQ0ICAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gJ3N1Ym5vcm1hbCcgYm91bmRhcnkgKGFsbCBoYXJkIHVuZGVyZmxvdyBvciBvdmVyZmxvdyBpbiBiYXNlIGFyaXRoZW10aWMpDQorZHFmbWEyNzYwIGZtYSAgMWUtNjA2OSAxZS0xMDEgICAwZSs2MTQ0ICAtPiAxRS02MTcwIFN1Ym5vcm1hbA0KK2RxZm1hMjc2MSBmbWEgIDFlLTYwNjkgMWUtMTAyICAgMGUrNjE0NCAgLT4gMUUtNjE3MSBTdWJub3JtYWwNCitkcWZtYTI3NjIgZm1hICAxZS02MDY5IDFlLTEwMyAgIDBlKzYxNDQgIC0+IDFFLTYxNzIgU3Vibm9ybWFsDQorZHFmbWEyNzYzIGZtYSAgMWUtNjA2OSAxZS0xMDQgICAwZSs2MTQ0ICAtPiAxRS02MTczIFN1Ym5vcm1hbA0KK2RxZm1hMjc2NCBmbWEgIDFlLTYwNjkgMWUtMTA1ICAgMGUrNjE0NCAgLT4gMUUtNjE3NCBTdWJub3JtYWwNCitkcWZtYTI3NjUgZm1hICAxZS02MDY5IDFlLTEwNiAgIDBlKzYxNDQgIC0+IDFFLTYxNzUgU3Vibm9ybWFsDQorZHFmbWEyNzY2IGZtYSAgMWUtNjA2OSAxZS0xMDcgICAwZSs2MTQ0ICAtPiAxRS02MTc2IFN1Ym5vcm1hbA0KK2RxZm1hMjc2NyBmbWEgIDFlLTYwNjkgMWUtMTA4ICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyNzY4IGZtYSAgMWUtNjA2OSAxZS0xMDkgICAwZSs2MTQ0ICAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcWZtYTI3NjkgZm1hICAxZS02MDY5IDFlLTExMCAgIDBlKzYxNDQgIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCitkcWZtYTI3NzAgZm1hICAxZSs0MCAxZSs2MTAxICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZA0KK2RxZm1hMjc3MSBmbWEgIDFlKzQwIDFlKzYxMDIgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQNCitkcWZtYTI3NzIgZm1hICAxZSs0MCAxZSs2MTAzICAgMGUrNjE0NCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZA0KK2RxZm1hMjc3MyBmbWEgIDFlKzQwIDFlKzYxMDQgICAwZSs2MTQ0ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KK2RxZm1hMjc3NCBmbWEgIDFlKzQwIDFlKzYxMDUgICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI3NzUgZm1hICAxZSs0MCAxZSs2MTA2ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzc2IGZtYSAgMWUrNDAgMWUrNjEwNyAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjc3NyBmbWEgIDFlKzQwIDFlKzYxMDggICAwZSs2MTQ0ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI3NzggZm1hICAxZSs0MCAxZSs2MTA5ICAgMGUrNjE0NCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyNzc5IGZtYSAgMWUrNDAgMWUrNjExMCAgIDBlKzYxNDQgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KK2RxZm1hMjgwMSBmbWEgICAxLjAwMDBFLTYxNzIgIDEgICAgICAgMGUrNjE0NCAgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbA0KK2RxZm1hMjgwMiBmbWEgICAxLjAwMEUtNjE3MiAgIDFlLTEgICAgMGUrNjE0NCAgLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KK2RxZm1hMjgwMyBmbWEgICAxLjAwRS02MTcyICAgIDFlLTIgICAgMGUrNjE0NCAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbA0KK2RxZm1hMjgwNCBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTMgICAgMGUrNjE0NCAgLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbA0KK2RxZm1hMjgwNSBmbWEgICAxLjBFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgU3Vibm9ybWFsIFJvdW5kZWQNCitkcWZtYTI4MDYgZm1hICAgMS4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODA3IGZtYSAgIDEuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjgwOCBmbWEgICAxLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI4MDkgZm1hICAgMi4zRS02MTcyICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODEwIGZtYSAgIDIuNUUtNjE3MiAgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjgxMSBmbWEgICAyLjdFLTYxNzIgICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI4MTIgZm1hICAgMS40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODEzIGZtYSAgIDEuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjgxNCBmbWEgICAxLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI4MTUgZm1hICAgMi40OUUtNjE3MiAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODE2IGZtYSAgIDIuNTBFLTYxNzIgICAgMWUtNCAgICAwZSs2MTQ0ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjgxNyBmbWEgICAyLjUxRS02MTcyICAgIDFlLTQgICAgMGUrNjE0NCAgLT4gM0UtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWZtYTI4MTggZm1hICAgMUUtNjE3MiAgICAgICAxZS00ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbA0KK2RxZm1hMjgxOSBmbWEgICAzRS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxZm1hMjgyMCBmbWEgICA1RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMEUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxZm1hMjgyMSBmbWEgICA3RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI4MjIgZm1hICAgOUUtNjE3MiAgICAgICAxZS01ICAgIDBlKzYxNDQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODIzIGZtYSAgIDkuOUUtNjE3MiAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxZm1hMjgyNCBmbWEgICAxRS02MTcyICAgICAgLTFlLTQgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsDQorZHFmbWEyODI1IGZtYSAgIDNFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyODI2IGZtYSAgLTVFLTYxNzIgICAgICAgMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyODI3IGZtYSAgIDdFLTYxNzIgICAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxZm1hMjgyOCBmbWEgIC05RS02MTcyICAgICAgIDFlLTUgICAgMGUrNjE0NCAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcWZtYTI4MjkgZm1hICAgOS45RS02MTcyICAgIC0xZS01ICAgIDBlKzYxNDQgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFmbWEyODMwIGZtYSAgIDMuMEUtNjE3MiAgICAtMWUtNSAgICAwZSs2MTQ0ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZHFmbWEyODMxIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMjAwICAgMGUrNjE0NCAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFmbWEyODMyIGZtYSAgIDEuMEUtNTk3NyAgICAgMWUtMTk5ICAgMGUrNjE0NCAgLT4gMUUtNjE3NiAgICBTdWJub3JtYWwgUm91bmRlZA0KK2RxZm1hMjgzMyBmbWEgICAxLjBFLTU5NzcgICAgIDFlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCitkcWZtYTI4MzQgZm1hICAgMi4wRS01OTc3ICAgICAyZS0xOTggICAwZSs2MTQ0ICAtPiA0LjBFLTYxNzUgICAgU3Vibm9ybWFsDQorZHFmbWEyODM1IGZtYSAgIDQuMEUtNTk3NyAgICAgNGUtMTk4ICAgMGUrNjE0NCAgLT4gMS42MEUtNjE3NCAgIFN1Ym5vcm1hbA0KK2RxZm1hMjgzNiBmbWEgIDEwLjBFLTU5NzcgICAgMTBlLTE5OCAgIDBlKzYxNDQgIC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCitkcWZtYTI4MzcgZm1hICAzMC4wRS01OTc3ICAgIDMwZS0xOTggICAwZSs2MTQ0ICAtPiA5LjAwMEUtNjE3MyAgU3Vibm9ybWFsDQorZHFmbWEyODM4IGZtYSAgNDAuMEUtNTk4MiAgICA0MGUtMTY2ICAgMGUrNjE0NCAgLT4gMS42MDAwRS02MTQ1IFN1Ym5vcm1hbA0KK2RxZm1hMjgzOSBmbWEgIDQwLjBFLTU5ODIgICAgNDBlLTE2NSAgIDBlKzYxNDQgIC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwNCitkcWZtYTI4NDAgZm1hICA0MC4wRS01OTgyICAgIDQwZS0xNjQgICAwZSs2MTQ0ICAtPiAxLjYwMDBFLTYxNDMNCisNCistLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgNCitkcWZtYTI4NzAgZm1hICAxMDAgIDkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitkcWZtYTI4NzEgZm1hICAxMDAgLTkuOTk5RSs2MTQzICAgICAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitkcWZtYTI4NzIgZm1hICAgICAgIDkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitkcWZtYTI4NzMgZm1hICAgICAgLTkuOTk5RSs2MTQzIDEwMCAgIDBlKzYxNDQgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCisNCistLSBjaGVjayBmb3IgZG91YmxlLXJvdW5kZWQgc3Vibm9ybWFscw0KK2RxZm1hMjg4MSBmbWEgICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgICAwZSs2MTQ0ICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcWZtYTI4ODIgZm1hICAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFmbWEyODgzIGZtYSAgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAgIDBlKzYxNDQgIC0+ICAxLjUxM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxZm1hMjg4NCBmbWEgICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgICAwZSs2MTQ0ICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsDQorZHFmbWEyODg1IGZtYSAgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAgIDBlKzYxNDQgIC0+ICAxLjQ0RS02MTc0ICBTdWJub3JtYWwNCitkcWZtYTI4ODYgZm1hICAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgICAgMGUrNjE0NCAgLT4gIDEuNEUtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZHFmbWEyODg3IGZtYSAgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAgIDBlKzYxNDQgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2RxZm1hMjg4OCBmbWEgICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgICAwZSs2MTQ0ICAtPiAgMS43RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkcWZtYTI4ODkgZm1hICAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgICAgMGUrNjE0NCAgLT4gICAgMkUtNjE3NiAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZHFmbWEyODkwIGZtYSAgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAgIDBlKzYxNDQgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorDQorZHFmbWEyODkxIGZtYSAgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFmbWEyODkyIGZtYSAgIDEuMjM0NTZFLTM5ICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFmbWEyODkzIGZtYSAgIDEuMjM0NUUtNDAgICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcWZtYTI4OTQgZm1hICAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzICAgMGUrNjE0NCAgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxZm1hMjg5NSBmbWEgICAxLjIzNDVFLTQxICAgMS4yMzRFLTYxMzMgICAwZSs2MTQ0ICAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFmbWEyODk2IGZtYSAgIDEuMjM0NTZFLTQxICAxLjIzNEUtNjEzMyAgIDBlKzYxNDQgIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93DQorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0DQorZHFmbWEyOTA2IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAgIDBlKzYxNDQgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzDQorZHFmbWEyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgIDEgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAgMGUrNjE0NCAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQorZHFmbWEyOTA4IGZtYSAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgIDBlKzYxNDQgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gaHVnZXN0DQorZHFmbWEyOTA5IGZtYSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMGUrNjE0NCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KK3ByZWNpc2lvbjogICAzNA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCitkcWZtYTIxMDAxICBmbWEgIDEzMEUtMiAgMTIwRS0yICAgMGUrNjE0NCAgLT4gMS41NjAwDQorZHFmbWEyMTAwMiAgZm1hICAxMzBFLTIgIDEyRS0xICAgIDBlKzYxNDQgIC0+IDEuNTYwDQorZHFmbWEyMTAwMyAgZm1hICAxMzBFLTIgIDFFMCAgICAgIDBlKzYxNDQgIC0+IDEuMzANCitkcWZtYTIxMDA0ICBmbWEgIDFFMiAgICAgMUU0ICAgICAgMGUrNjE0NCAgLT4gMUUrNg0KKw0KKy0tIE51bGwgdGVzdHMNCitkcWZtYTI5OTAgZm1hICAxMCAgIyAgIDBlKzYxNDQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxZm1hMjk5MSBmbWEgICAjIDEwICAgMGUrNjE0NCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorDQorLS0gQURESVRJT04gVEVTVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFtmaXJzdCBncm91cCBhcmUgJ3F1aWNrIGNvbmZpZGVuY2UgY2hlY2snXQ0KK2RxYWRkMzAwMSBmbWEgIDEgIDEgICAgICAgMSAgICAgICAtPiAgMg0KK2RxYWRkMzAwMiBmbWEgIDEgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KK2RxYWRkMzAwMyBmbWEgIDEgICc1Ljc1JyAgJzMuMycgICAtPiAgOS4wNQ0KK2RxYWRkMzAwNCBmbWEgIDEgICc1JyAgICAgJy0zJyAgICAtPiAgMg0KK2RxYWRkMzAwNSBmbWEgIDEgICctNScgICAgJy0zJyAgICAtPiAgLTgNCitkcWFkZDMwMDYgZm1hICAxICAnLTcnICAgICcyLjUnICAgLT4gIC00LjUNCitkcWFkZDMwMDcgZm1hICAxICAnMC43JyAgICcwLjMnICAgLT4gIDEuMA0KK2RxYWRkMzAwOCBmbWEgIDEgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KK2RxYWRkMzAwOSBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMDAnIC0+ICcyLjIzNDU2Nzg5Jw0KK2RxYWRkMzAxMCBmbWEgIDEgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJw0KKw0KKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZHFhZGQzMDExIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NicgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMDEyIGZtYSAgMSAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KK2RxYWRkMzAxMyBmbWEgIDEgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jw0KK2RxYWRkMzAxNCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjQ5JyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwMTUgZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC40OTknICAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMDE2IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNDk5OScgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzAxNyBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUwMDAnIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwMTggZm1hICAxICAgICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAnMC41MDAxJyAtPiAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMDE5IGZtYSAgMSAgICAnNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgJzAuNTAxJyAgLT4gJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzAyMCBmbWEgIDEgICAgJzQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICcwLjUxJyAgIC0+ICc0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDMwMjEgZm1hICAxICAwIDEgLT4gMQ0KK2RxYWRkMzAyMiBmbWEgIDEgIDEgMSAtPiAyDQorZHFhZGQzMDIzIGZtYSAgMSAgMiAxIC0+IDMNCitkcWFkZDMwMjQgZm1hICAxICAzIDEgLT4gNA0KK2RxYWRkMzAyNSBmbWEgIDEgIDQgMSAtPiA1DQorZHFhZGQzMDI2IGZtYSAgMSAgNSAxIC0+IDYNCitkcWFkZDMwMjcgZm1hICAxICA2IDEgLT4gNw0KK2RxYWRkMzAyOCBmbWEgIDEgIDcgMSAtPiA4DQorZHFhZGQzMDI5IGZtYSAgMSAgOCAxIC0+IDkNCitkcWFkZDMwMzAgZm1hICAxICA5IDEgLT4gMTANCisNCistLSBzb21lIGNhcnJ5aW5nIGVmZmVjdHMNCitkcWFkZDMwMzEgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcNCitkcWFkZDMwMzIgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCitkcWFkZDMwMzMgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMicgLT4gJzEuMDAwMCcNCitkcWFkZDMwMzQgZm1hICAxICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScNCisNCitkcWFkZDMwMzUgZm1hICAxICAnNzAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwMzYgZm1hICAxICAnNzAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMDM3IGZtYSAgMSAgJzcwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwMzggZm1hICAxICAnNzAwMDAnICAnMTAwMDBlKzM0JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwMzkgZm1hICAxICAnNzAwMDAwJyAgJzEwMDAwZSszNCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RSszOCcgUm91bmRlZA0KKw0KKy0tIHN5bW1ldHJ5Og0KK2RxYWRkMzA0MCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzA0MSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMwNDIgZm1hICAxICAnMTAwMDBlKzM0JyAgJzcwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzA0NCBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzA0NSBmbWEgIDEgICcxMDAwMGUrMzQnICAnNzAwMDAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFKzM4JyBSb3VuZGVkDQorDQorLS0gc2FtZSwgd2l0aG91dCByb3VuZGluZw0KK2RxYWRkMzA0NiBmbWEgIDEgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnDQorZHFhZGQzMDQ3IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnDQorZHFhZGQzMDQ4IGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KK2RxYWRkMzA0OSBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnDQorZHFhZGQzMDUwIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnDQorZHFhZGQzMDUxIGZtYSAgMSAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KK2RxYWRkMzA1MiBmbWEgIDEgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNhcml0aA0KK2RxYWRkMzA1MyBmbWEgIDEgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcNCitkcWFkZDMwNTQgZm1hICAxICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KK2RxYWRkMzA1NSBmbWEgIDEgICcxLjMnICctMS4zMCcgLT4gJzAuMDAnDQorZHFhZGQzMDU2IGZtYSAgMSAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnDQorZHFhZGQzMDU3IGZtYSAgMSAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCisNCistLSBsZWFkaW5nIHplcm8gcHJlc2VydmF0aW9uDQorZHFhZGQzMDYxIGZtYSAgMSAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KK2RxYWRkMzA2MiBmbWEgIDEgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KK2RxYWRkMzA2MyBmbWEgIDEgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQorZHFhZGQzMDY0IGZtYSAgMSAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJw0KK2RxYWRkMzA2NSBmbWEgIDEgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJw0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitkcWFkZDMwNzAgZm1hICAxICAxICAwICAgIC0+IDENCitkcWFkZDMwNzEgZm1hICAxICAxIDAuICAgIC0+IDENCitkcWFkZDMwNzIgZm1hICAxICAxICAuMCAgIC0+IDEuMA0KK2RxYWRkMzA3MyBmbWEgIDEgIDEgMC4wICAgLT4gMS4wDQorZHFhZGQzMDc0IGZtYSAgMSAgMSAwLjAwICAtPiAxLjAwDQorZHFhZGQzMDc1IGZtYSAgMSAgIDAgIDEgICAtPiAxDQorZHFhZGQzMDc2IGZtYSAgMSAgMC4gIDEgICAtPiAxDQorZHFhZGQzMDc3IGZtYSAgMSAgIC4wIDEgICAtPiAxLjANCitkcWFkZDMwNzggZm1hICAxICAwLjAgMSAgIC0+IDEuMA0KK2RxYWRkMzA3OSBmbWEgIDEgIDAuMDAgMSAgLT4gMS4wMA0KKw0KKy0tIHNvbWUgY2Fycmllcw0KK2RxYWRkMzA4MCBmbWEgIDEgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCitkcWFkZDMwODEgZm1hICAxICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMA0KK2RxYWRkMzA4MiBmbWEgIDEgICA5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDANCitkcWFkZDMwODMgZm1hICAxICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDANCitkcWFkZDMwODQgZm1hICAxICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMA0KK2RxYWRkMzA4NSBmbWEgIDEgICAgICA5OTk5OSAxICAtPiAxMDAwMDANCitkcWFkZDMwODYgZm1hICAxICAgICAgIDk5OTkgMSAgLT4gMTAwMDANCitkcWFkZDMwODcgZm1hICAxICAgICAgICA5OTkgMSAgLT4gMTAwMA0KK2RxYWRkMzA4OCBmbWEgIDEgICAgICAgICA5OSAxICAtPiAxMDANCitkcWFkZDMwODkgZm1hICAxICAgICAgICAgIDkgMSAgLT4gMTANCisNCisNCistLSBtb3JlIExIUyBzd2Fwcw0KK2RxYWRkMzA5MCBmbWEgIDEgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KK2RxYWRkMzA5MSBmbWEgIDEgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnDQorZHFhZGQzMDkyIGZtYSAgMSAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3Jw0KK2RxYWRkMzA5MyBmbWEgIDEgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KK2RxYWRkMzA5NCBmbWEgIDEgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3Jw0KK2RxYWRkMzA5NSBmbWEgIDEgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3Jw0KK2RxYWRkMzA5NiBmbWEgIDEgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KK2RxYWRkMzA5NyBmbWEgIDEgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnDQorZHFhZGQzMDk4IGZtYSAgMSAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcNCitkcWFkZDMwOTkgZm1hICAxICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQorZHFhZGQzMTAwIGZtYSAgMSAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScNCitkcWFkZDMxMDEgZm1hICAxICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnDQorZHFhZGQzMTAyIGZtYSAgMSAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQorZHFhZGQzMTAzIGZtYSAgMSAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnDQorZHFhZGQzMTA0IGZtYSAgMSAgJy01RTAnICAgICAgICAgMCAtPiAgJy01Jw0KK2RxYWRkMzEwNSBmbWEgIDEgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQorZHFhZGQzMTA2IGZtYSAgMSAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnDQorZHFhZGQzMTA3IGZtYSAgMSAgJy01RTMzJyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJw0KK2RxYWRkMzEwOCBmbWEgIDEgICctNUUzNCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgUm91bmRlZA0KK2RxYWRkMzEwOSBmbWEgIDEgICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZA0KK2RxYWRkMzExMCBmbWEgIDEgICctNUUzNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM2JyAgUm91bmRlZA0KK2RxYWRkMzExMSBmbWEgIDEgICctNUUxMDAnICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KKw0KKy0tIG1vcmUgUkhTIHN3YXBzDQorZHFhZGQzMTEzIGZtYSAgMSAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCitkcWFkZDMxMTQgZm1hICAxICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQorZHFhZGQzMTE2IGZtYSAgMSAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQorZHFhZGQzMTE3IGZtYSAgMSAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCitkcWFkZDMxMTkgZm1hICAxICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KK2RxYWRkMzEyMCBmbWEgIDEgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQorZHFhZGQzMTIxIGZtYSAgMSAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCitkcWFkZDMxMjIgZm1hICAxICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQorZHFhZGQzMTIzIGZtYSAgMSAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KK2RxYWRkMzEyNCBmbWEgIDEgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KK2RxYWRkMzEyNSBmbWEgIDEgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCitkcWFkZDMxMjYgZm1hICAxICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCitkcWFkZDMxMjcgZm1hICAxICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KK2RxYWRkMzEyOCBmbWEgIDEgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQorZHFhZGQzMTI5IGZtYSAgMSAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQorZHFhZGQzMTMwIGZtYSAgMSAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KK2RxYWRkMzEzMSBmbWEgIDEgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQorZHFhZGQzMTMyIGZtYSAgMSAgMCAgJy01RTMzJyAgICAgIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFhZGQzMTMzIGZtYSAgMSAgMCAgJy01RTM0JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgICBSb3VuZGVkDQorZHFhZGQzMTM0IGZtYSAgMSAgMCAgJy01RTM1JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNScgICBSb3VuZGVkDQorZHFhZGQzMTM1IGZtYSAgMSAgMCAgJy01RTM2JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQorZHFhZGQzMTM2IGZtYSAgMSAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnICBSb3VuZGVkDQorDQorLS0gcmVsYXRlZA0KK2RxYWRkMzEzNyBmbWEgIDEgICAxICAnMEUtMzknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCitkcWFkZDMxMzggZm1hICAxICAtMSAgJzBFLTM5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZHFhZGQzMTM5IGZtYSAgMSAgJzBFLTM5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZA0KK2RxYWRkMzE0MCBmbWEgIDEgICcwRS0zOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitkcWFkZDMxNDEgZm1hICAxICAxRSsyOSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMDAnDQorZHFhZGQzMTQyIGZtYSAgMSAgMUUrMjkgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZA0KK2RxYWRkMzE0MyBmbWEgIDEgIDAuMDAwICAgMUUrMzAgICAgLT4gICcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAwMCcNCitkcWFkZDMxNDQgZm1hICAxICAwLjAwMDAgIDFFKzMwICAgIC0+ICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkDQorDQorLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10NCitkcWFkZDMxNDYgZm1hICAxICAnMDAuMCcgIDAgICAgICAgLT4gICcwLjAnDQorZHFhZGQzMTQ3IGZtYSAgMSAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCitkcWFkZDMxNDggZm1hICAxICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJw0KK2RxYWRkMzE0OSBmbWEgIDEgICAwICAgICAgJzAwLjAnICAtPiAgJzAuMCcNCitkcWFkZDMxNTAgZm1hICAxICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KK2RxYWRkMzE1MSBmbWEgIDEgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnDQorZHFhZGQzMTUyIGZtYSAgMSAgJzMnICAgICAnLjMnICAgIC0+ICAnMy4zJw0KK2RxYWRkMzE1MyBmbWEgIDEgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCitkcWFkZDMxNTQgZm1hICAxICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnDQorZHFhZGQzMTU1IGZtYSAgMSAgJzMuMDAnICAnLjMnICAgIC0+ICAnMy4zMCcNCitkcWFkZDMxNTYgZm1hICAxICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KK2RxYWRkMzE1NyBmbWEgIDEgICczJyAgICAgJyszJyAgICAtPiAgJzYnDQorZHFhZGQzMTU4IGZtYSAgMSAgJzMnICAgICAnLTMnICAgIC0+ICAnMCcNCitkcWFkZDMxNTkgZm1hICAxICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQorZHFhZGQzMTYwIGZtYSAgMSAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcNCisNCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KK2RxYWRkMzE2MSBmbWEgIDEgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KK2RxYWRkMzE2MiBmbWEgIDEgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCitkcWFkZDMxNjMgZm1hICAxICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQorZHFhZGQzMTY0IGZtYSAgMSAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQorZHFhZGQzMTY1IGZtYSAgMSAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KK2RxYWRkMzE2NiBmbWEgIDEgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCitkcWFkZDMxNjcgZm1hICAxICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQorZHFhZGQzMTY4IGZtYSAgMSAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KKw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZHFhZGQzMTcwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NycgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMxNzEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTY2JyAtPiAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzE3MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjUnIC0+ICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMTczIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2NCcgLT4gJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMxNzQgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzE3NSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMTc2IGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MScgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMxNzcgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIFJvdW5kZWQNCitkcWFkZDMxNzggZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQ1JyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzE3OSBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDQnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMTgwIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MycgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMxODEgZm1hICAxICAnNC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQyJyAtPiAnNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzE4MiBmbWEgIDEgICc0LjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NDEnIC0+ICc0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMTgzIGZtYSAgMSAgJzQuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0MCcgLT4gJzQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JyBSb3VuZGVkDQorDQorLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZHFhZGQzMjAwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknDQorZHFhZGQzMjAxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIwMiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMDMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjA0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIwNSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMDYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjA3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIwOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMDkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjEwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIxMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMTIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjEzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIxNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMTUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjE2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnDQorZHFhZGQzMjE3IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIxOCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMTkgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RxYWRkMzIyMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5Jw0KK2RxYWRkMzIyMSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMjIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjIzIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIyNCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMjUgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjI2IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIyNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMjggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjI5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIzMCBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMzEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjMyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIzMyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMzQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjM1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzIzNiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJw0KK2RxYWRkMzIzNyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyMzggZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjM5IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQorZHFhZGQzMjQwIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI0MSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNDIgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkcWFkZDMyNTAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScNCitkcWFkZDMyNTEgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjUyIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI1MyBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNTQgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjU1IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI1NiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNTcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjU4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI1OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNjAgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjYxIGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI2MiBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNjMgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjY0IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI2NSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMyNjYgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcNCitkcWFkZDMyNjcgZm1hICAxICAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnMTIzMTIzNDU2Nzg5MDEyMzQ1Njc4NDU2MDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMjY4IGZtYSAgMSAgJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1Njc4OTAxMjM0NTY3ODQ1NjAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzI2OSBmbWEgIDEgICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTY3ODkwMTIzNDU2Nzg0NTYwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCityb3VuZGluZzogaGFsZl91cA0KK2RxYWRkMzMwMSBmbWEgIDEgICAtMSAgIDEgICAgICAtPiAgIDANCitkcWFkZDMzMDIgZm1hICAxICAgIDAgICAxICAgICAgLT4gICAxDQorZHFhZGQzMzAzIGZtYSAgMSAgICAxICAgMSAgICAgIC0+ICAgMg0KK2RxYWRkMzMwNCBmbWEgIDEgICAxMiAgIDEgICAgICAtPiAgMTMNCitkcWFkZDMzMDUgZm1hICAxICAgOTggICAxICAgICAgLT4gIDk5DQorZHFhZGQzMzA2IGZtYSAgMSAgIDk5ICAgMSAgICAgIC0+IDEwMA0KK2RxYWRkMzMwNyBmbWEgIDEgIDEwMCAgIDEgICAgICAtPiAxMDENCitkcWFkZDMzMDggZm1hICAxICAxMDEgICAxICAgICAgLT4gMTAyDQorZHFhZGQzMzA5IGZtYSAgMSAgIC0xICAtMSAgICAgIC0+ICAtMg0KK2RxYWRkMzMxMCBmbWEgIDEgICAgMCAgLTEgICAgICAtPiAgLTENCitkcWFkZDMzMTEgZm1hICAxICAgIDEgIC0xICAgICAgLT4gICAwDQorZHFhZGQzMzEyIGZtYSAgMSAgIDEyICAtMSAgICAgIC0+ICAxMQ0KK2RxYWRkMzMxMyBmbWEgIDEgICA5OCAgLTEgICAgICAtPiAgOTcNCitkcWFkZDMzMTQgZm1hICAxICAgOTkgIC0xICAgICAgLT4gIDk4DQorZHFhZGQzMzE1IGZtYSAgMSAgMTAwICAtMSAgICAgIC0+ICA5OQ0KK2RxYWRkMzMxNiBmbWEgIDEgIDEwMSAgLTEgICAgICAtPiAxMDANCisNCitkcWFkZDMzMjEgZm1hICAxICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KK2RxYWRkMzMyMiBmbWEgIDEgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQorZHFhZGQzMzIzIGZtYSAgMSAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCitkcWFkZDMzMjQgZm1hICAxICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KK2RxYWRkMzMyNSBmbWEgIDEgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQorZHFhZGQzMzI2IGZtYSAgMSAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCitkcWFkZDMzMjcgZm1hICAxICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KK2RxYWRkMzMyOCBmbWEgIDEgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQorZHFhZGQzMzI5IGZtYSAgMSAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCitkcWFkZDMzMzAgZm1hICAxICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KK2RxYWRkMzMzMSBmbWEgIDEgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQorZHFhZGQzMzMyIGZtYSAgMSAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCitkcWFkZDMzMzMgZm1hICAxICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KK2RxYWRkMzMzNCBmbWEgIDEgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQorZHFhZGQzMzM1IGZtYSAgMSAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCitkcWFkZDMzMzYgZm1hICAxICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KKw0KKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBhZGRpbmcgMCBhZmZlY3RzIHRoZSBjb2VmZmljaWVudA0KK2RxYWRkMzM0MCBmbWEgIDEgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCitkcWFkZDMzNDEgZm1hICAxICAxRSszMyAgIDAgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxYWRkMzM0MiBmbWEgIDEgIDFFKzM0ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KK2RxYWRkMzM0MyBmbWEgIDEgIDFFKzM1ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZA0KKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCitkcWFkZDMzNDQgZm1hICAxICAxRSszICAgIDEgICAgLT4gICAgICAgICAxMDAxDQorZHFhZGQzMzQ1IGZtYSAgMSAgMUUrMzMgICAxICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcWFkZDMzNDYgZm1hICAxICAxRSszNCAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzM0NyBmbWEgIDEgIDFFKzM1ICAgMSAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzMzQ4IGZtYSAgMSAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNw0KK2RxYWRkMzM0OSBmbWEgIDEgIDFFKzMzICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQorZHFhZGQzMzUwIGZtYSAgMSAgMUUrMzQgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFKzM0ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDMzNTEgZm1hICAxICAxRSszNSAgIDcgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHRyeXplcm9zIGNhc2VzDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkcWFkZDMzNjAgIGZtYSAgMSAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQ0KK2RxYWRkMzM2MSAgZm1hICAxICAwRS01MCAxMDAwMEUrMSAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KK2RxYWRkMzM2MiAgZm1hICAxICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZA0KK2RxYWRkMzM2MyAgZm1hICAxICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzM2NCAgZm1hICAxICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMEUrNjExMQ0KKy0tICAgICAgICAgICAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCisNCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KK2RxYWRkMzM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgODE1IC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MTQNCitkcWFkZDMzNzEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MUUrMzQgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkcWFkZDMzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQorZHFhZGQzMzczIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCitkcWFkZDMzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDgxNSAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODE0DQorZHFhZGQzMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA4MTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODFFKzM0IFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KK2RxYWRkMzQwMCBmbWEgIDEgICAgMSAgIDc3ZS0zMiAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQzNDAxIGZtYSAgMSAgICAxICAgNzdlLTMzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQzNDAyIGZtYSAgMSAgICAxICAgNzdlLTM0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQwMyBmbWEgIDEgICAgMSAgIDc3ZS0zNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MDQgZm1hICAxICAgIDEgICA3N2UtMzYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNDA1IGZtYSAgMSAgICAxICAgNzdlLTM3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQwNiBmbWEgIDEgICAgMSAgIDc3ZS0yOTkgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDM0MTAgZm1hICAxICAgMTAgICA3N2UtMzIgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcNCitkcWFkZDM0MTEgZm1hICAxICAgMTAgICA3N2UtMzMgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNDEyIGZtYSAgMSAgIDEwICAgNzdlLTM0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQxMyBmbWEgIDEgICAxMCAgIDc3ZS0zNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MTQgZm1hICAxICAgMTAgICA3N2UtMzYgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNDE1IGZtYSAgMSAgIDEwICAgNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQxNiBmbWEgIDEgICAxMCAgIDc3ZS0yOTkgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDM0MjAgZm1hICAxICAgNzdlLTMyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KK2RxYWRkMzQyMSBmbWEgIDEgICA3N2UtMzMgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Nw0KK2RxYWRkMzQyMiBmbWEgIDEgICA3N2UtMzQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MjMgZm1hICAxICAgNzdlLTM1ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNDI0IGZtYSAgMSAgIDc3ZS0zNiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQyNSBmbWEgIDEgICA3N2UtMzcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MjYgZm1hICAxICAgNzdlLTI5OSAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQzNDMwIGZtYSAgMSAgIDc3ZS0zMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3DQorZHFhZGQzNDMxIGZtYSAgMSAgIDc3ZS0zMyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQzMiBmbWEgIDEgICA3N2UtMzQgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MzMgZm1hICAxICAgNzdlLTM1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNDM0IGZtYSAgMSAgIDc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzQzNSBmbWEgIDEgICA3N2UtMzcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM0MzYgZm1hICAxICAgNzdlLTI5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbmVnYXRpdmUgdWxwcw0KK2RxYWRkMzY0NDAgZm1hICAxICAgIDEgICAtNzdlLTMyICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDQxIGZtYSAgMSAgICAxICAgLTc3ZS0zMyAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0NDIgZm1hICAxICAgIDEgICAtNzdlLTM0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0NDMgZm1hICAxICAgIDEgICAtNzdlLTM1ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NDQ0IGZtYSAgMSAgICAxICAgLTc3ZS0zNiAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ0NSBmbWEgIDEgICAgMSAgIC03N2UtMzcgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ0NiBmbWEgIDEgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQzNjQ1MCBmbWEgIDEgICAxMCAgIC03N2UtMzIgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDUxIGZtYSAgMSAgIDEwICAgLTc3ZS0zMyAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDUyIGZtYSAgMSAgIDEwICAgLTc3ZS0zNCAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ1MyBmbWEgIDEgICAxMCAgIC03N2UtMzUgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NTQgZm1hICAxICAgMTAgICAtNzdlLTM2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NTUgZm1hICAxICAgMTAgICAtNzdlLTM3ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NTYgZm1hICAxICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkMzY0NjAgZm1hICAxICAgLTc3ZS0zMiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDYxIGZtYSAgMSAgIC03N2UtMzMgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0NjIgZm1hICAxICAgLTc3ZS0zNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0NjMgZm1hICAxICAgLTc3ZS0zNSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NDY0IGZtYSAgMSAgIC03N2UtMzYgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ2NSBmbWEgIDEgICAtNzdlLTM3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ2NiBmbWEgIDEgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQzNjQ3MCBmbWEgIDEgICAtNzdlLTMyICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDcxIGZtYSAgMSAgIC03N2UtMzMgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDcyIGZtYSAgMSAgIC03N2UtMzQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ3MyBmbWEgIDEgICAtNzdlLTM1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NzQgZm1hICAxICAgLTc3ZS0zNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NzUgZm1hICAxICAgLTc3ZS0zNyAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0NzYgZm1hICAxICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG5lZ2F0aXZlIHVscHMNCitkcWFkZDM2NDgwIGZtYSAgMSAgIC0xICAgIDc3ZS0zMiAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0ODEgZm1hICAxICAgLTEgICAgNzdlLTMzICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY0ODIgZm1hICAxICAgLTEgICAgNzdlLTM0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDgzIGZtYSAgMSAgIC0xICAgIDc3ZS0zNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0ODQgZm1hICAxICAgLTEgICAgNzdlLTM2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ4NSBmbWEgIDEgICAtMSAgICA3N2UtMzcgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0ODYgZm1hICAxICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDM2NDkwIGZtYSAgMSAgLTEwICAgIDc3ZS0zMiAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NDkxIGZtYSAgMSAgLTEwICAgIDc3ZS0zMyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQzNjQ5MiBmbWEgIDEgIC0xMCAgICA3N2UtMzQgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NDkzIGZtYSAgMSAgLTEwICAgIDc3ZS0zNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY0OTQgZm1hICAxICAtMTAgICAgNzdlLTM2ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NDk1IGZtYSAgMSAgLTEwICAgIDc3ZS0zNyAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjQ5NiBmbWEgIDEgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkMzY1MDAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQzNjUwMSBmbWEgIDEgICAgNzdlLTMzICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIzDQorZHFhZGQzNjUwMiBmbWEgIDEgICAgNzdlLTM0ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY1MDMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjUwNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTA1IGZtYSAgMSAgICA3N2UtMzcgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjUwNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxYWRkMzY1MTAgZm1hICAxICAgIDc3ZS0zMiAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyMw0KK2RxYWRkMzY1MTEgZm1hICAxICAgIDc3ZS0zMyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MjMNCitkcWFkZDM2NTEyIGZtYSAgMSAgICA3N2UtMzQgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1MTMgZm1hICAxICAgIDc3ZS0zNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjUxNCBmbWEgIDEgICAgNzdlLTM2ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1MTUgZm1hICAxICAgIDc3ZS0zNyAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTE2IGZtYSAgMSAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gYW5kIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MNCityb3VuZGluZzogaGFsZl91cA0KK2RxYWRkMzY1NDAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCitkcWFkZDM2NTQxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NDIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU0MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTQ0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NDUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU0NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTQ3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NDggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU0OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTUwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NTEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU1MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTUzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NTQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU1NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTU2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQorZHFhZGQzNjU1NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTU4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NTkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RxYWRkMzY1NjAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCitkcWFkZDM2NTYxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NjIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU2MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTY0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NjUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU2NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTY3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NjggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU2OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTcwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NzEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU3MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTczIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NzQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNjU3NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTc2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQorZHFhZGQzNjU3NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM2NTc4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzY1NzkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCitkcWFkZDM3NTQwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NDEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU0MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2RxYWRkMzc1NTAgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScNCitkcWFkZDM3NTUxIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NTIgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU1MyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTU0IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NTUgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU1NiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTU3IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NTggZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU1OSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTYwIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NjEgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU2MiBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTYzIGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NjQgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzU2NSBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTY2IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnDQorZHFhZGQzNzU2NyBmbWEgIDEgICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICc5ODc2NTQzMjE5ODc2NTQzMjE2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTY4IGZtYSAgMSAgJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzk4NzY1NDMyMTk4NzY1NDMyMTY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1NjkgZm1hICAxICAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnOTg3NjU0MzIxOTg3NjU0MzIxNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbW9yZSB6ZXJvcywgZXRjLg0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitkcWFkZDM3NzAxIGZtYSAgMSAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCitkcWFkZDM3NzAyIGZtYSAgMSAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwDQorZHFhZGQzNzcwMyBmbWEgIDEgIDAwLjAwIDBFLTMgICAtPiAwLjAwMA0KK2RxYWRkMzc3MDQgZm1hICAxICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCisNCitkcWFkZDM3NzEwIGZtYSAgMSAgMEUrMyAgMDAuMDAgIC0+IDAuMDANCitkcWFkZDM3NzExIGZtYSAgMSAgMEUrMyAgMDAuMCAgIC0+IDAuMA0KK2RxYWRkMzc3MTIgZm1hICAxICAwRSszICAwMC4gICAgLT4gMA0KK2RxYWRkMzc3MTMgZm1hICAxICAwRSszICAwMC5FKzEgLT4gMEUrMQ0KK2RxYWRkMzc3MTQgZm1hICAxICAwRSszICAwMC5FKzIgLT4gMEUrMg0KK2RxYWRkMzc3MTUgZm1hICAxICAwRSszICAwMC5FKzMgLT4gMEUrMw0KK2RxYWRkMzc3MTYgZm1hICAxICAwRSszICAwMC5FKzQgLT4gMEUrMw0KK2RxYWRkMzc3MTcgZm1hICAxICAwRSszICAwMC5FKzUgLT4gMEUrMw0KK2RxYWRkMzc3MTggZm1hICAxICAwRSszICAtMDAuMCAgIC0+IDAuMA0KK2RxYWRkMzc3MTkgZm1hICAxICAwRSszICAtMDAuICAgIC0+IDANCitkcWFkZDM3NzMxIGZtYSAgMSAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxDQorDQorZHFhZGQzNzcyMCBmbWEgIDEgIDAwLjAwICAwRSszICAtPiAwLjAwDQorZHFhZGQzNzcyMSBmbWEgIDEgIDAwLjAgICAwRSszICAtPiAwLjANCitkcWFkZDM3NzIyIGZtYSAgMSAgMDAuICAgIDBFKzMgIC0+IDANCitkcWFkZDM3NzIzIGZtYSAgMSAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCitkcWFkZDM3NzI0IGZtYSAgMSAgMDAuRSsyIDBFKzMgIC0+IDBFKzINCitkcWFkZDM3NzI1IGZtYSAgMSAgMDAuRSszIDBFKzMgIC0+IDBFKzMNCitkcWFkZDM3NzI2IGZtYSAgMSAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCitkcWFkZDM3NzI3IGZtYSAgMSAgMDAuRSs1IDBFKzMgIC0+IDBFKzMNCitkcWFkZDM3NzI4IGZtYSAgMSAgLTAwLjAwIDBFKzMgIC0+IDAuMDANCitkcWFkZDM3NzI5IGZtYSAgMSAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KK2RxYWRkMzc3MzAgZm1hICAxICAtMDAuICAgMEUrMyAgLT4gMA0KKw0KK2RxYWRkMzc3MzIgZm1hICAxICAgMCAgICAgMCAgICAgLT4gIDANCitkcWFkZDM3NzMzIGZtYSAgMSAgIDAgICAgLTAgICAgIC0+ICAwDQorZHFhZGQzNzczNCBmbWEgIDEgIC0wICAgICAwICAgICAtPiAgMA0KK2RxYWRkMzc3MzUgZm1hICAxICAtMCAgICAtMCAgICAgLT4gLTAgICAgIC0tIElFRUUgODU0IHNwZWNpYWwgY2FzZQ0KKw0KK2RxYWRkMzc3MzYgZm1hICAxICAgMSAgICAtMSAgICAgLT4gIDANCitkcWFkZDM3NzM3IGZtYSAgMSAgLTEgICAgLTEgICAgIC0+IC0yDQorZHFhZGQzNzczOCBmbWEgIDEgICAxICAgICAxICAgICAtPiAgMg0KK2RxYWRkMzc3MzkgZm1hICAxICAtMSAgICAgMSAgICAgLT4gIDANCisNCitkcWFkZDM3NzQxIGZtYSAgMSAgIDAgICAgLTEgICAgIC0+IC0xDQorZHFhZGQzNzc0MiBmbWEgIDEgIC0wICAgIC0xICAgICAtPiAtMQ0KK2RxYWRkMzc3NDMgZm1hICAxICAgMCAgICAgMSAgICAgLT4gIDENCitkcWFkZDM3NzQ0IGZtYSAgMSAgLTAgICAgIDEgICAgIC0+ICAxDQorZHFhZGQzNzc0NSBmbWEgIDEgIC0xICAgICAwICAgICAtPiAtMQ0KK2RxYWRkMzc3NDYgZm1hICAxICAtMSAgICAtMCAgICAgLT4gLTENCitkcWFkZDM3NzQ3IGZtYSAgMSAgIDEgICAgIDAgICAgIC0+ICAxDQorZHFhZGQzNzc0OCBmbWEgIDEgICAxICAgIC0wICAgICAtPiAgMQ0KKw0KK2RxYWRkMzc3NTEgZm1hICAxICAgMC4wICAtMSAgICAgLT4gLTEuMA0KK2RxYWRkMzc3NTIgZm1hICAxICAtMC4wICAtMSAgICAgLT4gLTEuMA0KK2RxYWRkMzc3NTMgZm1hICAxICAgMC4wICAgMSAgICAgLT4gIDEuMA0KK2RxYWRkMzc3NTQgZm1hICAxICAtMC4wICAgMSAgICAgLT4gIDEuMA0KK2RxYWRkMzc3NTUgZm1hICAxICAtMS4wICAgMCAgICAgLT4gLTEuMA0KK2RxYWRkMzc3NTYgZm1hICAxICAtMS4wICAtMCAgICAgLT4gLTEuMA0KK2RxYWRkMzc3NTcgZm1hICAxICAgMS4wICAgMCAgICAgLT4gIDEuMA0KK2RxYWRkMzc3NTggZm1hICAxICAgMS4wICAtMCAgICAgLT4gIDEuMA0KKw0KK2RxYWRkMzc3NjEgZm1hICAxICAgMCAgICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NjIgZm1hICAxICAtMCAgICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NjMgZm1hICAxICAgMCAgICAgMS4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NjQgZm1hICAxICAtMCAgICAgMS4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NjUgZm1hICAxICAtMSAgICAgMC4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NjYgZm1hICAxICAtMSAgICAtMC4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NjcgZm1hICAxICAgMSAgICAgMC4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NjggZm1hICAxICAgMSAgICAtMC4wICAgLT4gIDEuMA0KKw0KK2RxYWRkMzc3NzEgZm1hICAxICAgMC4wICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NzIgZm1hICAxICAtMC4wICAtMS4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NzMgZm1hICAxICAgMC4wICAgMS4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NzQgZm1hICAxICAtMC4wICAgMS4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NzUgZm1hICAxICAtMS4wICAgMC4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NzYgZm1hICAxICAtMS4wICAtMC4wICAgLT4gLTEuMA0KK2RxYWRkMzc3NzcgZm1hICAxICAgMS4wICAgMC4wICAgLT4gIDEuMA0KK2RxYWRkMzc3NzggZm1hICAxICAgMS4wICAtMC4wICAgLT4gIDEuMA0KKw0KKy0tIFNwZWNpYWxzDQorZHFhZGQzNzc4MCBmbWEgIDEgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcWFkZDM3NzgxIGZtYSAgMSAgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQ0KK2RxYWRkMzc3ODIgZm1hICAxICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZHFhZGQzNzc4MyBmbWEgIDEgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitkcWFkZDM3Nzg0IGZtYSAgMSAgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK2RxYWRkMzc3ODUgZm1hICAxICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFhZGQzNzc4NiBmbWEgIDEgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkcWFkZDM3Nzg3IGZtYSAgMSAgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxYWRkMzc3ODggZm1hICAxICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQzNzc4OSBmbWEgIDEgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcWFkZDM3NzkwIGZtYSAgMSAgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxYWRkMzc3OTEgZm1hICAxICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFhZGQzNzc5MiBmbWEgIDEgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcWFkZDM3NzkzIGZtYSAgMSAgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxYWRkMzc3OTQgZm1hICAxICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcWFkZDM3ODAwIGZtYSAgMSAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzgwMSBmbWEgIDEgICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkcWFkZDM3ODAyIGZtYSAgMSAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkMzc4MDMgZm1hICAxICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZHFhZGQzNzgwNCBmbWEgIDEgICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkcWFkZDM3ODA1IGZtYSAgMSAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkMzc4MDYgZm1hICAxICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZHFhZGQzNzgwNyBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcWFkZDM3ODA4IGZtYSAgMSAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkMzc4MDkgZm1hICAxICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODEwIGZtYSAgMSAgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkMzc4MTEgZm1hICAxICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQzNzgxMiBmbWEgIDEgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcWFkZDM3ODEzIGZtYSAgMSAgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxYWRkMzc4MTQgZm1hICAxICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorZHFhZGQzNzgxNSBmbWEgIDEgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkcWFkZDM3ODIxIGZtYSAgMSAgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitkcWFkZDM3ODIyIGZtYSAgMSAgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcWFkZDM3ODIzIGZtYSAgMSAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitkcWFkZDM3ODI0IGZtYSAgMSAgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitkcWFkZDM3ODI1IGZtYSAgMSAgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcWFkZDM3ODI2IGZtYSAgMSAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitkcWFkZDM3ODI3IGZtYSAgMSAgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitkcWFkZDM3ODI4IGZtYSAgMSAgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcWFkZDM3ODI5IGZtYSAgMSAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODMwIGZtYSAgMSAgLUluZiAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODMxIGZtYSAgMSAgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODMyIGZtYSAgMSAgLTEgICAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODMzIGZtYSAgMSAgLTAgICAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODM0IGZtYSAgMSAgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODM1IGZtYSAgMSAgIDEgICAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODM2IGZtYSAgMSAgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitkcWFkZDM3ODM3IGZtYSAgMSAgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcWFkZDM3ODQxIGZtYSAgMSAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg0MiBmbWEgIDEgICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NDMgZm1hICAxICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODQ0IGZtYSAgMSAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg0NSBmbWEgIDEgICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NDYgZm1hICAxICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODQ3IGZtYSAgMSAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg0OCBmbWEgIDEgICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NDkgZm1hICAxICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODUwIGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg1MSBmbWEgIDEgIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NTIgZm1hICAxICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODUzIGZtYSAgMSAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg1NCBmbWEgIDEgIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NTUgZm1hICAxICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODU2IGZtYSAgMSAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzNzg1NyBmbWEgIDEgICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4NTggZm1hICAxICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODU5IGZtYSAgMSAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxYWRkMzc4NjEgZm1hICAxICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCitkcWFkZDM3ODYyIGZtYSAgMSAgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZHFhZGQzNzg2MyBmbWEgIDEgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KK2RxYWRkMzc4NjQgZm1hICAxICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCitkcWFkZDM3ODY1IGZtYSAgMSAgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZHFhZGQzNzg2NiBmbWEgIDEgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KK2RxYWRkMzc4NjcgZm1hICAxICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCitkcWFkZDM3ODY4IGZtYSAgMSAgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZHFhZGQzNzg2OSBmbWEgIDEgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCitkcWFkZDM3ODcxIGZtYSAgMSAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODcyIGZtYSAgMSAgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODczIGZtYSAgMSAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc0IGZtYSAgMSAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc1IGZtYSAgMSAgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc2IGZtYSAgMSAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc3IGZtYSAgMSAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc4IGZtYSAgMSAgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODc5IGZtYSAgMSAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODgwIGZtYSAgMSAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODgxIGZtYSAgMSAgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkcWFkZDM3ODgyIGZtYSAgMSAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KK2RxYWRkMzc4ODMgZm1hICAxICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxYWRkMzc4ODQgZm1hICAxICAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZHFhZGQzNzg4NSBmbWEgIDEgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gSGVyZSB3ZSBleHBsb3JlIG5lYXIgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCitkcWFkZDM3NTc1IGZtYSAgMSAgIDFFLTYxNDMgLTFFLTYxNzYgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgU3Vibm9ybWFsDQorZHFhZGQzNzU3NiBmbWEgIDEgIC0xRS02MTQzICsxRS02MTc2IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0IFN1Ym5vcm1hbA0KKw0KKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxYWRkMzc5NzIgYXBwbHkgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxYWRkMzc5NzMgZm1hICAxICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3OTc0IGZtYSAgMSAgICAgICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExICAxICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk3NSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk3NiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk3NyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgOEUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk3OCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgN0UrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk3OSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNkUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4MCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNUUrNjExMCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4MSBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgNEUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4MiBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgM0UrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4MyBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMkUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4NCBmbWEgIDEgICAgICAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAgMUUrNjExMCAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQzNzk4NSBhcHBseSAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxYWRkMzc5ODYgZm1hICAxICAgICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4NyBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3OTg4IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTExICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk4OSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtOUUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc5OTAgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLThFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3OTkxIGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC03RSs2MTEwICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk5MiBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtNkUrNjExMCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc5OTMgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTVFKzYxMTAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3OTk0IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC00RSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzk5NSBmbWEgIDEgICAgICAtOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjExMSAtM0UrNjExMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc5OTYgZm1hICAxICAgICAgLTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMTEgLTJFKzYxMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3OTk3IGZtYSAgMSAgICAgIC05OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTExIC0xRSs2MTEwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQorcm91bmRpbmc6ICAgICBkb3duDQorZHFhZGQzNzExMDAgZm1hICAxICAxZSsyIC0xZS02MTQzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTAxIGZtYSAgMSAgMWUrMSAtMWUtNjE0MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZHFhZGQzNzExMDMgZm1hICAxICAgICsxIC0xZS02MTQzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZHFhZGQzNzExMDQgZm1hICAxICAxZS0xIC0xZS02MTQzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTA1IGZtYSAgMSAgMWUtMiAtMWUtNjE0MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZHFhZGQzNzExMDYgZm1hICAxICAxZS0zIC0xZS02MTQzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZHFhZGQzNzExMDcgZm1hICAxICAxZS00IC0xZS02MTQzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTA4IGZtYSAgMSAgMWUtNSAtMWUtNjE0MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZHFhZGQzNzExMDkgZm1hICAxICAxZS02IC0xZS02MTQzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCisNCityb3VuZGluZzogICAgIGNlaWxpbmcNCitkcWFkZDM3MTExMCBmbWEgIDEgIC0xZSsyICsxZS02MTQzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTExIGZtYSAgMSAgLTFlKzEgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTEzIGZtYSAgMSAgICAgLTEgKzFlLTYxNDMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDM3MTExNCBmbWEgIDEgIC0xZS0xICsxZS02MTQzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTE1IGZtYSAgMSAgLTFlLTIgKzFlLTYxNDMgICAtPiAtMC4wMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTE2IGZtYSAgMSAgLTFlLTMgKzFlLTYxNDMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitkcWFkZDM3MTExNyBmbWEgIDEgIC0xZS00ICsxZS02MTQzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTE4IGZtYSAgMSAgLTFlLTUgKzFlLTYxNDMgICAtPiAtMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2RxYWRkMzcxMTE5IGZtYSAgMSAgLTFlLTYgKzFlLTYxNDMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCisNCitkcWFkZDM3MTMwMCBmbWEgIDEgIDFFMzQgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMTAgZm1hICAxICAxRTM0ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzExIGZtYSAgMSAgMUUzNCAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMxMiBmbWEgIDEgIDFFMzQgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMTMgZm1hICAxICAxRTM0ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzE0IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMxNSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMTYgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzE3IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMxOCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMTkgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzIwIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMyMSBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMjIgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzIzIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMyNCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMjUgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzI2IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMyNyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMjggZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzI5IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMzMCBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMzEgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzMyIGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMzMyBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMzQgZm1hICAxICAxRTM0ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzM1IGZtYSAgMSAgMUUzNCAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMzNiBmbWEgIDEgIDFFMzQgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzMzcgZm1hICAxICAxRTM0ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzM4IGZtYSAgMSAgMUUzNCAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTMzOSBmbWEgIDEgIDFFMzQgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorDQorZHFhZGQzNzEzNDAgZm1hICAxICAxRTM0ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzQxIGZtYSAgMSAgMUUzNCAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcWFkZDM3MTM0OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzUwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM1MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzUzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM1NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzU2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNTcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM1OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzU5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNjAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM2MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzYyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNjMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM2NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzY1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNjcgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM2OCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzY5IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNzAgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM3MSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzcyIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNzMgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM3NCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzc1IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNzYgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM3NyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzc4IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzNzkgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM4MCBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzgxIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzODIgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM4MyBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzg0IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzODUgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM4NiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzg3IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzODggZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM4OSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzkwIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzOTEgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM5MiBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzkzIGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzEzOTQgZm1hICAxICA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTM5NSBmbWEgIDEgIDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxMzk2IGZtYSAgMSAgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQorZHFhZGQzNzE0MjAgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDM3MTQyMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDM3MTQyMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0MjMgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDM3MTQyNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDM3MTQyNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0MjYgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUNCitkcWFkZDM3MTQyNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNw0KK2RxYWRkMzcxNDI4IGZtYSAgMSAgIDAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04DQorZHFhZGQzNzE0MjkgZm1hICAxICAgMCAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTkNCitkcWFkZDM3MTQzMCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTANCitkcWFkZDM3MTQzMSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTENCitkcWFkZDM3MTQzMiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTINCitkcWFkZDM3MTQzMyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTMNCitkcWFkZDM3MTQzNCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQNCitkcWFkZDM3MTQzNSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTUNCitkcWFkZDM3MTQzNiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTYNCitkcWFkZDM3MTQzNyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcNCitkcWFkZDM3MTQzOCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTgNCitkcWFkZDM3MTQzOSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTkNCitkcWFkZDM3MTQ0MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjANCitkcWFkZDM3MTQ0MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjENCitkcWFkZDM3MTQ0MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjINCitkcWFkZDM3MTQ0MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMNCitkcWFkZDM3MTQ0NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjQNCitkcWFkZDM3MTQ0NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjUNCitkcWFkZDM3MTQ0NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYNCitkcWFkZDM3MTQ0NyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjcNCitkcWFkZDM3MTQ0OCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjgNCitkcWFkZDM3MTQ0OSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yOSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkNCitkcWFkZDM3MTQ1MCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzANCitkcWFkZDM3MTQ1MSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzENCitkcWFkZDM3MTQ1MiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzINCitkcWFkZDM3MTQ1MyBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzMNCitkcWFkZDM3MTQ1NCBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzQNCitkcWFkZDM3MTQ1NSBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNSAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUNCitkcWFkZDM3MTQ1NiBmbWEgIDEgICAwIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzYNCisNCistLSBzYW1lLCByZXZlcnNlZCAwDQorZHFhZGQzNzE0NjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkMzcxNDYxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0NjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0NjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkMzcxNDY0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0NjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE0NjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NQ0KK2RxYWRkMzcxNDY3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTcNCitkcWFkZDM3MTQ2OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS04DQorZHFhZGQzNzE0NjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2RxYWRkMzcxNDcwIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEwDQorZHFhZGQzNzE0NzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTENCitkcWFkZDM3MTQ3MiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2RxYWRkMzcxNDczIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTEzDQorZHFhZGQzNzE0NzQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTQNCitkcWFkZDM3MTQ3NSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2RxYWRkMzcxNDc2IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE2DQorZHFhZGQzNzE0NzcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMTcNCitkcWFkZDM3MTQ3OCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2RxYWRkMzcxNDc5IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTE5DQorZHFhZGQzNzE0ODAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjAgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjANCitkcWFkZDM3MTQ4MSBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMSAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yMQ0KK2RxYWRkMzcxNDgyIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTIyDQorZHFhZGQzNzE0ODMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjMNCitkcWFkZDM3MTQ4NCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNA0KK2RxYWRkMzcxNDg1IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI1DQorZHFhZGQzNzE0ODYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjYNCitkcWFkZDM3MTQ4NyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0yNw0KK2RxYWRkMzcxNDg4IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTI4DQorZHFhZGQzNzE0ODkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMjkNCitkcWFkZDM3MTQ5MCBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMCAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMA0KK2RxYWRkMzcxNDkxIGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxIDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTMxDQorZHFhZGQzNzE0OTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzIgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzINCitkcWFkZDM3MTQ5MyBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMyAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zMw0KK2RxYWRkMzcxNDk0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0IDAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDVFLTM0DQorZHFhZGQzNzE0OTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUgMCAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NUUtMzUNCitkcWFkZDM3MTQ5NiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNiAwIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1RS0zNg0KKw0KKy0tIHNhbWUsIEVzIG9uIHRoZSAwDQorZHFhZGQzNzE1MDAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MDkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MTkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjQgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjQgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjYgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjYgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjcgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjcgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjggZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjggIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MjkgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMjkgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MzAgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzAgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MzEgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzEgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MzIgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzIgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorZHFhZGQzNzE1MzMgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzMgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1DQorLS0gbmV4dCBmb3VyIGZsYWcgUm91bmRlZCBiZWNhdXNlIHRoZSAwIGV4dGVuZHMgdGhlIHJlc3VsdA0KK2RxYWRkMzcxNTM0IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM0ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorZHFhZGQzNzE1MzUgZm1hICAxICAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSAgMEUtMzUgIC0+IDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitkcWFkZDM3MTUzNiBmbWEgIDEgIDEuMTIzNDU2Nzg5OTg3NjU0MzIxMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zNiAgLT4gMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KK2RxYWRkMzcxNTM3IGZtYSAgMSAgMS4xMjM0NTY3ODk5ODc2NTQzMjExMjM0NTY3ODkwMTIzNDUgIDBFLTM3ICAtPiAxLjEyMzQ1Njc4OTk4NzY1NDMyMTEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorDQorLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCityb3VuZGluZzogICAgaGFsZl91cA0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDM3MTYwMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE2MDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNjAyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTYwMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDM3MTYxMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQzNzE2MTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKy0tIG92ZXJmbG93DQorZHFhZGQzNzE2MTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzE2MTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDM3MTYyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE2MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNjIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTYyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDM3MTYzMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQzNzE2MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKy0tIG92ZXJmbG93DQorZHFhZGQzNzE2MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzE2MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDM3MTY0MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE2NDEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNjQyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTY0MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDM3MTY1MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQzNzE2NTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKy0tIG92ZXJmbG93DQorZHFhZGQzNzE2NTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzE2NTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIHVwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2RxYWRkMzcxNjYwIGZtYSAgMSAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTY2MSBmbWEgIDEgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE2NjIgZm1hICAxICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNjYzIGZtYSAgMSAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCistLSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2RxYWRkMzcxNjcxIGZtYSAgMSAgLTExICAgICAgMTEgICAgLT4gIDANCitkcWFkZDM3MTY3MiBmbWEgIDEgICAxMSAgICAgLTExICAgIC0+ICAwDQorLS0gb3ZlcmZsb3cNCitkcWFkZDM3MTY3MyBmbWEgIDlFNjE0NCAxMCAgIDEgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3MTY3NCBmbWEgLTlFNjE0NCAxMCAgIDEgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgZG93bg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDM3MTY4MCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE2ODEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNjgyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTY4MyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDM3MTY5MSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAwDQorZHFhZGQzNzE2OTIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgMA0KKy0tIG92ZXJmbG93DQorZHFhZGQzNzE2OTMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzE2OTQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGNlaWxpbmcNCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZHFhZGQzNzE3MDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNzAxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTcwMiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE3MDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZHFhZGQzNzE3MTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RxYWRkMzcxNzEyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCistLSBvdmVyZmxvdw0KK2RxYWRkMzcxNzEzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxNzE0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KK3JvdW5kaW5nOiAgICBmbG9vcg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitkcWFkZDM3MTcyMCBmbWEgIDEgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE3MjEgZm1hICAxICAtMCAgICAgICAgMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KK2RxYWRkMzcxNzIyIGZtYSAgMSAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCitkcWFkZDM3MTcyMyBmbWEgIDEgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorLS0gZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitkcWFkZDM3MTczMSBmbWEgIDEgIC0xMSAgICAgIDExICAgIC0+ICAtMCAgICAgICAgICAgICAgICAtLSAqDQorZHFhZGQzNzE3MzIgZm1hICAxICAgMTEgICAgIC0xMSAgICAtPiAgLTAgICAgICAgICAgICAgICAgLS0gKg0KKy0tIG92ZXJmbG93DQorZHFhZGQzNzE3MzMgZm1hICA5RTYxNDQgMTAgICAxICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzE3MzQgZm1hIC05RTYxNDQgMTAgICAxICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIDA1dXANCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZHFhZGQzNzE3NDAgZm1hICAxICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2RxYWRkMzcxNzQxIGZtYSAgMSAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitkcWFkZDM3MTc0MiBmbWEgIDEgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZHFhZGQzNzE3NDMgZm1hICAxICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KKy0tIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZHFhZGQzNzE3NTEgZm1hICAxICAtMTEgICAgICAxMSAgICAtPiAgMA0KK2RxYWRkMzcxNzUyIGZtYSAgMSAgIDExICAgICAtMTEgICAgLT4gIDANCistLSBvdmVyZmxvdw0KK2RxYWRkMzcxNzUzIGZtYSAgOUU2MTQ0IDEwICAgMSAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzcxNzU0IGZtYSAtOUU2MTQ0IDEwICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KK2RxYWRkMzcxNzYxIGZtYSAgMSAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQorZHFhZGQzNzE3NjIgZm1hICAxICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCitkcWFkZDM3MTc2MyBmbWEgIDEgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KK2RxYWRkMzcxNzY0IGZtYSAgMSAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQorZHFhZGQzNzE3NjUgZm1hICAxICAxMzBFLTIgICAtMTIwRS0yIC0+IDAuMTANCitkcWFkZDM3MTc2NiBmbWEgIDEgIDEzMEUtMiAgIC0xMkUtMSAgLT4gMC4xMA0KK2RxYWRkMzcxNzY3IGZtYSAgMSAgMTMwRS0yICAgLTFFMCAgICAtPiAwLjMwDQorZHFhZGQzNzE3NjggZm1hICAxICAxRTIgICAgICAtMUU0ICAgIC0+IC05LjlFKzMNCisNCistLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KKw0KK2RxYWRkMzc1MDAxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1Nw0KK2RxYWRkMzc1MDAyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAwLjYgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NyAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMDMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDAuMDYgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAwNCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDA1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS00ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMDYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTUgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAwNyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDA4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS03ICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMDkgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTggICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAxMCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDExIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMCAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMTIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTExICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAxMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDE0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xMyAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMTUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE0ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAxNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDE3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xNiAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMTggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTE3ICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTAxOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDIwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiA2RS0xOSAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwMjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2IDZFLTIwICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB3aWRlbmluZyBzZWNvbmQgYXJndW1lbnQgYXQgZ2FwDQorZHFhZGQzNzUwMzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxICAgICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OQ0KK2RxYWRkMzc1MDMxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMQ0KK2RxYWRkMzc1MDMyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMiAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTINCitkcWFkZDM3NTAzMyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMw0KK2RxYWRkMzc1MDM0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNA0KK2RxYWRkMzc1MDM1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NSAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDUNCitkcWFkZDM3NTAzNiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2ICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Ng0KK2RxYWRkMzc1MDM3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2Nw0KK2RxYWRkMzc1MDM4IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3OCAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzgNCitkcWFkZDM3NTAzOSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg5ICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDQwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNDEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA0MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MSAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDQzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNDQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMSAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA0NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMSAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDQ2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNDcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMSAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA0OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDQ5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTAxMjM0NTYNCityb3VuZGluZzogaGFsZl9ldmVuDQorZHFhZGQzNzUwNTAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA1MSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAzNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDUyIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDA0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNTMgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA1NCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDA2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwNjc4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDU1IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDA3NzUwMDAwMDAwICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNTYgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA1NyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwMDA1MDAwMDAwMCAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDYwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMjM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNjEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA2MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDYzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwNTY3NzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNjQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA2NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMSAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDY2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMC4wMDAwMDAwNzUwMDAwMDAxICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNjcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCistLSBmYXItb3V0IHJlc2lkdWVzIChmdWxsIGNvZWZmaWNpZW50IGdhcCBpcyAxNisxNSBkaWdpdHMpDQorcm91bmRpbmc6IHVwDQorZHFhZGQzNzUwNzAgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMQ0KK2RxYWRkMzc1MDcxIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtOSAgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNzIgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA3MyBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDc0IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNzUgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA3NiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDc3IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwNzggZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xNiAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA3OSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDgwIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMTggICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwODEgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0xOSAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA4MiBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDgzIGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMjUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwODQgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMCAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA4NSBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDg2IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzIgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZHFhZGQzNzUwODcgZm1hICAxICAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OCAxRS0zMyAgICAgICAgICAgICAgICAgICAtPiAxMjM5ODc2NTQzMjExMjM0NTY3ODk0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitkcWFkZDM3NTA4OCBmbWEgIDEgIDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzk4NzY1NDMyMTEyMzQ1Njc4OTQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2RxYWRkMzc1MDg5IGZtYSAgMSAgMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzggMUUtMzUgICAgICAgICAgICAgICAgICAgLT4gMTIzOTg3NjU0MzIxMTIzNDU2Nzg5NDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gRGVzdHJ1Y3RpdmUgc3VidHJhY3QgKGZyb20gcmVtYWluZGVyIHRlc3RzKQ0KKw0KKy0tICsrKyBzb21lIG9mIHRoZXNlIHdpbGwgYmUgb2ZmLWJ5LW9uZSByZW1haW5kZXIgdnMgcmVtYWluZGVyTmVhcg0KKw0KK2RxZm1hNDAwMCAgZm1hICAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMNCitkcWZtYTQwMDEgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjINCitkcWZtYTQwMDIgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTAuNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTExMQ0KK2RxZm1hNDAwMyAgZm1hICAgLTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNCAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyNTUgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQNCitkcWZtYTQwMDQgIGZtYSAgIC0zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMDggICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTINCitkcWZtYTQwMDUgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTIgICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgLTEuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc0OA0KK2RxZm1hNDAwNiAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQorZHFmbWE0MDA3ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIC0wLjc1MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1Mw0KK2RxZm1hNDAwOCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcNCitkcWZtYTQwMDkgIGZtYSAgIC0yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NA0KK2RxZm1hNDAxMCAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0MiAgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAtMC42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQyDQorZHFmbWE0MDExICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMyICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4NzY4DQorZHFmbWE0MDEyICBmbWEgIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjIxICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkNCitkcWZtYTQwMTMgIGZtYSAgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTAgICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAtPiAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwDQorZHFmbWE0MDE0ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzEzICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgLT4gIDIuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0Njg3DQorZHFmbWE0MDE1ICBmbWEgICAtMzA4NjQxOTcyNTMwODY0MTk3MjUzMDg2NDE5NzI1MzA4ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyDQorZHFmbWE0MDE2ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxICAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDMuNjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI1MQ0KK2RxZm1hNDAxNyAgZm1hICAgLTI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NyAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIC0+ICAxLjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQorZHFmbWE0MDE4ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2DQorZHFmbWE0MDE5ICBmbWEgICAtMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQxICAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgLT4gIDQuMzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1OQ0KKw0KKy0tIE51bGwgdGVzdHMNCitkcWFkZDM5OTkwIGZtYSAgMSAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFhZGQzOTk5MSBmbWEgIDEgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUludmVydC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKaW5kZXggNTIyY2ZjOC4uM2ExZTI5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxSW52ZXJ0LmRlY1Rlc3QKQEAgLTEsMjQ1ICsxLDI0NSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCBmb3IgZGVjUXVhZHMgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCi1kcWludjAwMSBpbnZlcnQgICAgICAgICAgICAgMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWludjAwMiBpbnZlcnQgICAgICAgICAgICAgMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwCi1kcWludjAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxCi1kcWludjAwNCBpbnZlcnQgICAgIDExMTExMTExMSAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwCi1kcWludjAwNSBpbnZlcnQgICAgIDAwMDAwMDAwMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQotZHFpbnYwMDcgaW52ZXJ0IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWludjAwOCBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxaW52MDA5IGludmVydCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFpbnYwMTAgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcWludjAxMSBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxaW52MDEyIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAgMAotZHFpbnYwMTMgaW52ZXJ0IDAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgLT4gICAxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcWludjAxNCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotLS0gVmFyaW91cyBsZW5ndGhzCi1kcWludjYwMCBpbnZlcnQgMDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAKLWRxaW52NjAxIGludmVydCAwMDExMTExMTExMTExMTExMTEwMTAxMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMAotZHFpbnY2MDIgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTAxMTExMTExMTExMTEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAxMDAwMDAwMDAwMDAwCi1kcWludjYwMyBpbnZlcnQgMDExMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMSAtPiAgIDEwMDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDAKLWRxaW52NjA0IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTAxMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMAotZHFpbnY2MDUgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTAxMTExMTExMTEgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAxMDAwMDAwMDAwCi1kcWludjYwNiBpbnZlcnQgMDExMTExMDExMTExMTAxMTExMTExMTExMTAxMTExMTExMSAtPiAgIDEwMDAwMDEwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDAwMDAKLWRxaW52NjA3IGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTAxMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAwMAotZHFpbnY2MDggaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTAxMTExMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwCi1kcWludjYwOSBpbnZlcnQgMDExMTExMTExMDAxMTExMTExMTExMTExMTExMTAxMTExMSAtPiAgIDEwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAKLWRxaW52NjEwIGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMTAxMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMAotZHFpbnY2MTEgaW52ZXJ0IDAxMTExMTExMDExMDExMTExMTExMTExMTExMTExMTAxMTEgLT4gICAxMDAwMDAwMDEwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwCi1kcWludjYxMiBpbnZlcnQgMDExMTExMTAxMTExMDExMTExMTExMTExMTExMTExMTAxMSAtPiAgIDEwMDAwMDAxMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMDAKLWRxaW52NjEzIGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMTExMTExMTAxIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMAotZHFpbnY2MTQgaW52ZXJ0IDAxMTExMDExMTExMTExMDExMTExMTExMTExMTExMTExMTAgLT4gICAxMDAwMDEwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcWludjYxNSBpbnZlcnQgMDExMTAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAKLWRxaW52NjE2IGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQotZHFpbnY2MTcgaW52ZXJ0IDAxMDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMDEgLT4gICAxMDEwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDEwCi1kcWludjYxOCBpbnZlcnQgMDAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTAxMSAtPiAgIDExMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAxMDAKLWRxaW52NjE5IGludmVydCAwMTAxMTExMTExMTExMTExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMTAwMAotZHFpbnY2MjAgaW52ZXJ0IDAxMTAxMTExMTExMTExMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDEwMDAwCi1kcWludjYyMSBpbnZlcnQgMDExMTAxMTExMTExMTExMTExMTExMDExMTExMTAxMTExMSAtPiAgIDEwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAxMDAwMDAKLWRxaW52NjIyIGludmVydCAwMTExMTAxMTExMTExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMAotZHFpbnY2MjMgaW52ZXJ0IDAxMTExMTAxMTExMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwCi1kcWludjYyNCBpbnZlcnQgMDExMTExMTAxMTExMTExMTExMTExMTExMDAxMTExMTExMSAtPiAgIDEwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAKLWRxaW52NjI1IGludmVydCAwMTExMTExMTAxMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMAotZHFpbnY2MjYgaW52ZXJ0IDAxMTExMTExMTAxMTExMTExMTExMTExMDExMDExMTExMTEgLT4gICAxMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDEwMDEwMDAwMDAwCi1kcWludjYyNyBpbnZlcnQgMDExMTExMTExMTAxMTExMTExMTExMTAxMTExMDExMTExMSAtPiAgIDEwMDAwMDAwMDAxMDAwMDAwMDAwMDAxMDAwMDEwMDAwMDAKLWRxaW52NjI4IGludmVydCAwMTExMTExMTExMTAxMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMDAxMDAwMDAwMDAwMTAwMDAwMDEwMDAwMAotZHFpbnY2MjkgaW52ZXJ0IDAxMTExMTExMTExMTAxMTExMTExMDExMTExMTExMDExMTEgLT4gICAxMDAwMDAwMDAwMDAxMDAwMDAwMDEwMDAwMDAwMDEwMDAwCi1kcWludjYzMCBpbnZlcnQgMDExMTExMTExMTExMTAxMTExMTAxMTExMTExMTExMDExMSAtPiAgIDEwMDAwMDAwMDAwMDAxMDAwMDAxMDAwMDAwMDAwMDEwMDAKLWRxaW52NjMxIGludmVydCAwMTExMTExMTExMTExMTAxMTEwMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDAwMDAwMDAxMDAwMTAwMDAwMDAwMDAwMDEwMAotZHFpbnY2MzIgaW52ZXJ0IDAxMTExMTExMTExMTExMTAxMDExMTExMTExMTExMTExMDEgLT4gICAxMDAwMDAwMDAwMDAwMDAxMDEwMDAwMDAwMDAwMDAwMDEwCi1kcWludjYzMyBpbnZlcnQgMDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDEKLQotZHFpbnYwMjEgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMAotZHFpbnYwMjIgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMAotZHFpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMAotZHFpbnYwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMAotZHFpbnYwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMAotZHFpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMAotZHFpbnYwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMAotZHFpbnYwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMAotZHFpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMAotZHFpbnYwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAotZHFpbnYwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMAotZHFpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMAotZHFpbnYwMzUgaW52ZXJ0IDExMTExMTExMTEgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMAotZHFpbnYwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMAotCi1kcWludjA0MCBpbnZlcnQgMDExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMAotZHFpbnYwNDEgaW52ZXJ0IDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDAKLWRxaW52MDQyIGludmVydCAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAwCi1kcWludjA0MyBpbnZlcnQgMTExMDExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAwMAotZHFpbnYwNDQgaW52ZXJ0IDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAwMDAKLWRxaW52MDQ1IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwCi1kcWludjA0NiBpbnZlcnQgMTExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDEwMAotZHFpbnYwNDcgaW52ZXJ0IDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTAKLWRxaW52MDQ4IGludmVydCAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAxCi1kcWludjA0OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMAotZHFpbnYwNTAgaW52ZXJ0IDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAKLWRxaW52MDUxIGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxCi1kcWludjA1MiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMAotZHFpbnYwNTMgaW52ZXJ0IDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAxMDAKLWRxaW52MDU0IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwCi1kcWludjA1NSBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMAotZHFpbnYwNTYgaW52ZXJ0IDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMTAKLWRxaW52MDU3IGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxCi1kcWludjA1OCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMAotZHFpbnYwNTkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAKLQotZHFpbnYwODAgaW52ZXJ0IDEwMDAwMDAwMTExMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMTAwMDAwMDAwCi1kcWludjA4MSBpbnZlcnQgMDEwMDAwMDEwMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMTAwMDAwMDAKLWRxaW52MDgyIGludmVydCAwMDEwMDAwMTEwMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMTAwMDAwMAotZHFpbnYwODMgaW52ZXJ0IDAwMDEwMDAxMTEwMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMTAwMDAwCi1kcWludjA4NCBpbnZlcnQgMDAwMDEwMDExMTEwMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMTAwMDAKLWRxaW52MDg1IGludmVydCAwMDAwMDEwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAwMAotZHFpbnYwODYgaW52ZXJ0IDAwMDAwMDExMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMTAwCi1kcWludjA4NyBpbnZlcnQgMDAwMDAxMDExMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDEwMDAwMDAwMTAKLWRxaW52MDg4IGludmVydCAwMDAwMTAwMTExMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAwMDAwMQotZHFpbnYwODkgaW52ZXJ0IDAwMDEwMDAwMTExMTEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwCi1kcWludjA5MCBpbnZlcnQgMDAxMDAwMDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTEwMTAwMDAwMTAKLWRxaW52MDkxIGludmVydCAwMTAwMDAwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMTAwMDAwMQotZHFpbnYwOTIgaW52ZXJ0IDEwMDAwMDAxMTEwMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTEwMTExMTExMDAwMTAwMDEwCi1kcWludjA5MyBpbnZlcnQgMDEwMDAwMDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTEwMTExMTEwMDAwMTAxMDAKLWRxaW52MDk0IGludmVydCAwMDEwMDAwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwMAotZHFpbnYwOTUgaW52ZXJ0IDAwMDEwMDAxMTExMDEwMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTEwMTExMDAwMDEwMTAwCi1kcWludjA5NiBpbnZlcnQgMDAwMDEwMDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAxMDAwMTAKLWRxaW52MDk3IGludmVydCAwMDAwMDEwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMTAwMDAwMQotZHFpbnYwOTggaW52ZXJ0IDAwMDAwMDExMDExMTExMDEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTEwMDEwMDAwMDEwCi1kcWludjA5OSBpbnZlcnQgMDAwMDAxMDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMDAwMDAxMDAKLQotLS0gYW5kIG1vcmUgdGhvcm91Z2ggTVNEL0xTRCB0ZXN0cyBbOCBhbmQgOSBtZ2h0IGJlIGVuY29kZWQgZGlmZmVyZW50bHkuLi5dCi1kcWludjE1MSBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQotZHFpbnYxNTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMTEKLWRxaW52MTUzIGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExIC0+ICAgMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAwCi1kcWludjE1NCBpbnZlcnQgMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMQotZHFpbnYxNTUgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTEgLT4gIDEwMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDAKLWRxaW52MTU2IGludmVydCAxMDExMTExMTExMTExMTExMTEwMTAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAxMDExMTExMTExMTExMTExCi1kcWludjE1NyBpbnZlcnQgMTEwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMAotZHFpbnYxNTggaW52ZXJ0IDExMTAxMTExMTExMTExMTExMTAwMTExMTExMTExMTExMTEgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDAKLQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCi1kcWludjIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyMjEgaW52ZXJ0IDMzMzMzMzMzMyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjIyIGludmVydCA1NTU1NTU1NTUgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyMjQgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjI1IGludmVydCAyMjIyMjIyMjIgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyMjcgaW52ZXJ0IDY2NjY2NjY2NiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjI4IGludmVydCA4ODg4ODg4ODggICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyMzAgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjMxIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYSBmZXcgcmFuZG9tcwotZHFpbnYyNDAgaW52ZXJ0ICA1Njc0Njg2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNDMgaW52ZXJ0IC03NTYyNTMyNTcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRAotZHFpbnYyNTAgaW52ZXJ0ICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjUxIGludmVydCAgMzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI1MiBpbnZlcnQgIDQwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNTMgaW52ZXJ0ICA1MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjU0IGludmVydCAgNjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI1NSBpbnZlcnQgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNTYgaW52ZXJ0ICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjU3IGludmVydCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRC0xCi1kcWludjI3MCBpbnZlcnQgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNzEgaW52ZXJ0ICAwMzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjcyIGludmVydCAgMDQwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI3MyBpbnZlcnQgIDA1MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNzQgaW52ZXJ0ICAxNjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52Mjc1IGludmVydCAgMTcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI3NiBpbnZlcnQgIDE4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyNzcgaW52ZXJ0ICAxOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1kcWludjI4MCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjgyIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI4MyBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDUgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyODQgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDA2IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52Mjg1IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI4NiBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kcWludjI4OCBpbnZlcnQgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyODkgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDMwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjkwIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA0MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI5MSBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwNTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyOTIgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDYwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MjkzIGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDE3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjI5NCBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYyOTUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHNpZ25zCi1kcWludjI5NiBpbnZlcnQgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52Mjk5IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIDExMTExMTAwMDExMTAwMDExMTAwMDExMTExMDExMTExMQotCi0tLSBObWF4LCBObWluLCBOdGlueS1saWtlCi1kcWludjM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzI5OTggIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYzNDIgaW52ZXJ0ICAxRS0yOTk4ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MzQzIGludmVydCAgMS4wMDAwMDAwMEUtMjk5OCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjM0NCBpbnZlcnQgIDFFLTIwNzggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYzNDUgaW52ZXJ0ICAtMUUtMjA3OCAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MzQ2IGludmVydCAgLTEuMDAwMDAwMDBFLTI5OTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjM0NyBpbnZlcnQgIC0xRS0yOTk4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYzNDggaW52ZXJ0ICAtOS45OTk5OTk5OUUrMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzCi1kcWludjM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnYzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxaW52MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3IKLWRxaW52Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnY4MjEgaW52ZXJ0ICBOYU4gICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxaW52ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcWludjg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcWludjg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcUludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCBmb3IgZGVjUXVhZHMgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQorZHFpbnYwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxaW52MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCitkcWludjAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxDQorZHFpbnYwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMA0KK2RxaW52MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KK2RxaW52MDA3IGludmVydCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxaW52MDA4IGludmVydCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxaW52MDA5IGludmVydCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxaW52MDEwIGludmVydCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2RxaW52MDExIGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxaW52MDEyIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgICAgICAgICAgICAgICAgMA0KK2RxaW52MDEzIGludmVydCAwMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxaW52MDE0IGludmVydCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KK2RxaW52NjAwIGludmVydCAwMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMA0KK2RxaW52NjAxIGludmVydCAwMDExMTExMTExMTExMTExMTEwMTAxMTExMTExMTExMTExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMA0KK2RxaW52NjAyIGludmVydCAwMTAxMTExMTExMTExMTExMTAxMTEwMTExMTExMTExMTExIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAxMDAwMTAwMDAwMDAwMDAwMA0KK2RxaW52NjAzIGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTExIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMA0KK2RxaW52NjA0IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTAxMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAwMA0KK2RxaW52NjA1IGludmVydCAwMTExMTAxMTExMTExMTAxMTExMTExMTEwMTExMTExMTExIC0+ICAgMTAwMDAxMDAwMDAwMDAxMDAwMDAwMDAwMTAwMDAwMDAwMA0KK2RxaW52NjA2IGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMDExMTExMTExIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMDAwMA0KK2RxaW52NjA3IGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTAxMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAxMDAwMDAwMA0KK2RxaW52NjA4IGludmVydCAwMTExMTExMTAxMTAxMTExMTExMTExMTExMTEwMTExMTExIC0+ICAgMTAwMDAwMDAxMDAxMDAwMDAwMDAwMDAwMDAwMTAwMDAwMA0KK2RxaW52NjA5IGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMA0KK2RxaW52NjEwIGludmVydCAwMTExMTExMTEwMDExMTExMTExMTExMTExMTExMTAxMTExIC0+ICAgMTAwMDAwMDAwMTEwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMA0KK2RxaW52NjExIGludmVydCAwMTExMTExMTAxMTAxMTExMTExMTExMTExMTExMTEwMTExIC0+ICAgMTAwMDAwMDAxMDAxMDAwMDAwMDAwMDAwMDAwMDAwMTAwMA0KK2RxaW52NjEyIGludmVydCAwMTExMTExMDExMTEwMTExMTExMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDEwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDEwMA0KK2RxaW52NjEzIGludmVydCAwMTExMTEwMTExMTExMDExMTExMTExMTExMTExMTExMTAxIC0+ICAgMTAwMDAwMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAxMA0KK2RxaW52NjE0IGludmVydCAwMTExMTAxMTExMTExMTAxMTExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMDAxMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxaW52NjE1IGludmVydCAwMTExMDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxaW52NjE2IGludmVydCAwMTEwMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxaW52NjE3IGludmVydCAwMTAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTAxIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAxMA0KK2RxaW52NjE4IGludmVydCAwMDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMDExIC0+ICAgMTEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMA0KK2RxaW52NjE5IGludmVydCAwMTAxMTExMTExMTExMTExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMTAwMA0KK2RxaW52NjIwIGludmVydCAwMTEwMTExMTExMTExMTExMTExMTAxMTExMTExMTAxMTExIC0+ICAgMTAwMTAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAxMDAwMA0KK2RxaW52NjIxIGludmVydCAwMTExMDExMTExMTExMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDEwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDEwMDAwMA0KK2RxaW52NjIyIGludmVydCAwMTExMTAxMTExMTExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAxMDAwMDAwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMA0KK2RxaW52NjIzIGludmVydCAwMTExMTEwMTExMTExMTExMTExMTExMTAxMTAxMTExMTExIC0+ICAgMTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAxMDAxMDAwMDAwMA0KK2RxaW52NjI0IGludmVydCAwMTExMTExMDExMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMA0KK2RxaW52NjI1IGludmVydCAwMTExMTExMTAxMTExMTExMTExMTExMTEwMDExMTExMTExIC0+ICAgMTAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMTEwMDAwMDAwMA0KK2RxaW52NjI2IGludmVydCAwMTExMTExMTEwMTExMTExMTExMTExMTAxMTAxMTExMTExIC0+ICAgMTAwMDAwMDAwMTAwMDAwMDAwMDAwMDAxMDAxMDAwMDAwMA0KK2RxaW52NjI3IGludmVydCAwMTExMTExMTExMDExMTExMTExMTExMDExMTEwMTExMTExIC0+ICAgMTAwMDAwMDAwMDEwMDAwMDAwMDAwMDEwMDAwMTAwMDAwMA0KK2RxaW52NjI4IGludmVydCAwMTExMTExMTExMTAxMTExMTExMTEwMTExMTExMDExMTExIC0+ICAgMTAwMDAwMDAwMDAxMDAwMDAwMDAwMTAwMDAwMDEwMDAwMA0KK2RxaW52NjI5IGludmVydCAwMTExMTExMTExMTEwMTExMTExMTAxMTExMTExMTAxMTExIC0+ICAgMTAwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDAxMDAwMA0KK2RxaW52NjMwIGludmVydCAwMTExMTExMTExMTExMDExMTExMDExMTExMTExMTEwMTExIC0+ICAgMTAwMDAwMDAwMDAwMDEwMDAwMDEwMDAwMDAwMDAwMTAwMA0KK2RxaW52NjMxIGludmVydCAwMTExMTExMTExMTExMTAxMTEwMTExMTExMTExMTExMDExIC0+ICAgMTAwMDAwMDAwMDAwMDAxMDAwMTAwMDAwMDAwMDAwMDEwMA0KK2RxaW52NjMyIGludmVydCAwMTExMTExMTExMTExMTEwMTAxMTExMTExMTExMTExMTAxIC0+ICAgMTAwMDAwMDAwMDAwMDAwMTAxMDAwMDAwMDAwMDAwMDAxMA0KK2RxaW52NjMzIGludmVydCAwMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMQ0KKw0KK2RxaW52MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDANCitkcWludjAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwDQorZHFpbnYwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMA0KK2RxaW52MDI1IGludmVydCAgIDExMTExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDANCitkcWludjAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwDQorZHFpbnYwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMA0KK2RxaW52MDI4IGludmVydCAgICAgIDExMTEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDANCitkcWludjAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDAwDQorZHFpbnYwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMA0KK2RxaW52MDMyIGludmVydCAgICAgICAgIDEgICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCitkcWludjAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwDQorZHFpbnYwMzQgaW52ZXJ0IDExMTExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMA0KK2RxaW52MDM1IGludmVydCAxMTExMTExMTExICAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDANCitkcWludjAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwDQorDQorZHFpbnYwNDAgaW52ZXJ0IDAxMTExMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDANCitkcWludjA0MSBpbnZlcnQgMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAwMA0KK2RxaW52MDQyIGludmVydCAxMTAxMTExMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAwDQorZHFpbnYwNDMgaW52ZXJ0IDExMTAxMTExMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMDANCitkcWludjA0NCBpbnZlcnQgMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDAwMA0KK2RxaW52MDQ1IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwDQorZHFpbnYwNDYgaW52ZXJ0IDExMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDAxMDANCitkcWludjA0NyBpbnZlcnQgMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAwMDAxMA0KK2RxaW52MDQ4IGludmVydCAxMTExMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDAxDQorZHFpbnYwNDkgaW52ZXJ0IDAxMTExMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDANCitkcWludjA1MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAxMDAwMDAxMA0KK2RxaW52MDUxIGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxDQorZHFpbnYwNTIgaW52ZXJ0IDExMTAxMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAxMDAwMTANCitkcWludjA1MyBpbnZlcnQgMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDAxMDEwMA0KK2RxaW52MDU0IGludmVydCAxMTExMTAxMTEgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAxMDAwDQorZHFpbnYwNTUgaW52ZXJ0IDExMTEwMTAxMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMTAxMDANCitkcWludjA1NiBpbnZlcnQgMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTAwMDEwMDAxMA0KK2RxaW52MDU3IGludmVydCAxMTAxMTExMTAgICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxDQorZHFpbnYwNTggaW52ZXJ0IDEwMTExMTEwMSAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTANCitkcWludjA1OSBpbnZlcnQgMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMDAwMDEwMA0KKw0KK2RxaW52MDgwIGludmVydCAxMDAwMDAwMDExMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTEwMDAwMDAwMA0KK2RxaW52MDgxIGludmVydCAwMTAwMDAwMTAxMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAxMDAwMDAwMA0KK2RxaW52MDgyIGludmVydCAwMDEwMDAwMTEwMTExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMTAwMDAwMA0KK2RxaW52MDgzIGludmVydCAwMDAxMDAwMTExMDExMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTAwMDEwMDAwMA0KK2RxaW52MDg0IGludmVydCAwMDAwMTAwMTExMTAxMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAxMDAwMA0KK2RxaW52MDg1IGludmVydCAwMDAwMDEwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMTAwMA0KK2RxaW52MDg2IGludmVydCAwMDAwMDAxMTExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAwMDAwMDEwMA0KK2RxaW52MDg3IGludmVydCAwMDAwMDEwMTExMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMDAwMDAxMA0KK2RxaW52MDg4IGludmVydCAwMDAwMTAwMTExMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDAwMDAwMQ0KK2RxaW52MDg5IGludmVydCAwMDAxMDAwMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTEwMDAwMDEwMA0KK2RxaW52MDkwIGludmVydCAwMDEwMDAwMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAxMDAwMDAxMA0KK2RxaW52MDkxIGludmVydCAwMTAwMDAwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMTAwMDAwMQ0KK2RxaW52MDkyIGludmVydCAxMDAwMDAwMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTAwMDEwMDAxMA0KK2RxaW52MDkzIGludmVydCAwMTAwMDAwMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTAxMTExMTAwMDAxMDEwMA0KK2RxaW52MDk0IGludmVydCAwMDEwMDAwMTExMTEwMTExICAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTAwMDAwMTAwMA0KK2RxaW52MDk1IGludmVydCAwMDAxMDAwMTExMTAxMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTAwMDAxMDEwMA0KK2RxaW52MDk2IGludmVydCAwMDAwMTAwMTExMDExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTAxMTAwMDEwMDAxMA0KK2RxaW52MDk3IGludmVydCAwMDAwMDEwMTEwMTExMTEwICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTAwMTAwMDAwMQ0KK2RxaW52MDk4IGludmVydCAwMDAwMDAxMTAxMTExMTAxICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDAxMDAwMDAxMA0KK2RxaW52MDk5IGludmVydCAwMDAwMDEwMDExMTExMDExICAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTEwMDAwMDEwMA0KKw0KKy0tIGFuZCBtb3JlIHRob3JvdWdoIE1TRC9MU0QgdGVzdHMgWzggYW5kIDkgbWdodCBiZSBlbmNvZGVkIGRpZmZlcmVudGx5Li4uXQ0KK2RxaW52MTUxIGludmVydCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQorZHFpbnYxNTIgaW52ZXJ0IDExMTExMTExMTExMTExMTExMTAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMTENCitkcWludjE1MyBpbnZlcnQgMTAwMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMSAtPiAgIDExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwMA0KK2RxaW52MTU0IGludmVydCAxMTExMTExMTExMTExMTExMTExMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExDQorZHFpbnYxNTUgaW52ZXJ0IDAxMDAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTEgLT4gIDEwMTExMTExMTExMTExMTExMTEwMDAwMDAwMDAwMDAwMDANCitkcWludjE1NiBpbnZlcnQgMTAxMTExMTExMTExMTExMTExMDEwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMTAxMTExMTExMTExMTExMQ0KK2RxaW52MTU3IGludmVydCAxMTAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwDQorZHFpbnYxNTggaW52ZXJ0IDExMTAxMTExMTExMTExMTExMTAwMTExMTExMTExMTExMTEgLT4gICAgIDEwMDAwMDAwMDAwMDAwMDExMDAwMDAwMDAwMDAwMDANCisNCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCitkcWludjIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyMjIgaW52ZXJ0IDU1NTU1NTU1NSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyMjUgaW52ZXJ0IDIyMjIyMjIyMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyMjggaW52ZXJ0IDg4ODg4ODg4OCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyMzEgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGEgZmV3IHJhbmRvbXMNCitkcWludjI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjQxIGludmVydCAgNTY3MzY3Njg5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNDIgaW52ZXJ0IC02MzE5MTc3NzIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjQ0IGludmVydCAgODM1NTkwMTQ5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QNCitkcWludjI1MCBpbnZlcnQgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjUxIGludmVydCAgMzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNTIgaW52ZXJ0ICA0MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI1MyBpbnZlcnQgIDUwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjU0IGludmVydCAgNjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNTUgaW52ZXJ0ICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI1NiBpbnZlcnQgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjU3IGludmVydCAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK2RxaW52MjcwIGludmVydCAgMDIwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNzEgaW52ZXJ0ICAwMzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI3MiBpbnZlcnQgIDA0MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjczIGludmVydCAgMDUwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNzQgaW52ZXJ0ICAxNjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI3NSBpbnZlcnQgIDE3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52Mjc2IGludmVydCAgMTgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyNzcgaW52ZXJ0ICAxOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2RxaW52MjgwIGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyODEgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAzIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI4MiBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjgzIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwNSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyODQgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDA2IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI4NSBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52Mjg2IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyODcgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1pZGRpZQ0KK2RxaW52Mjg4IGludmVydCAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyODkgaW52ZXJ0ICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDMwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI5MCBpbnZlcnQgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwNDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MjkxIGludmVydCAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDA1MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyOTIgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDYwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjI5MyBpbnZlcnQgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52Mjk0IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYyOTUgaW52ZXJ0ICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkxMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK2RxaW52Mjk2IGludmVydCAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52Mjk5IGludmVydCAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgLT4gIDExMTExMTAwMDExMTAwMDExMTAwMDExMTExMDExMTExMQ0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UNCitkcWludjM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzI5OTggIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MzQyIGludmVydCAgMUUtMjk5OCAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYzNDMgaW52ZXJ0ICAxLjAwMDAwMDAwRS0yOTk4ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjM0NCBpbnZlcnQgIDFFLTIwNzggICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MzQ1IGludmVydCAgLTFFLTIwNzggICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYzNDYgaW52ZXJ0ICAtMS4wMDAwMDAwMEUtMjk5OCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjM0NyBpbnZlcnQgIC0xRS0yOTk4ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzI5OTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorZHFpbnYzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjM2MiBpbnZlcnQgIDFFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnYzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjM2NSBpbnZlcnQgIDkuOSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2RxaW52Nzg4IGludmVydCAtSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnY3OTQgaW52ZXJ0ICBJbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcWludjgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52ODQxIGludmVydCAgc05hTiAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxaW52ODYxIGludmVydCAgTmFOMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnY4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52ODY0IGludmVydCAgTmFONCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnY4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52ODcyIGludmVydCAgc05hTjEyICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnY4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52ODc1IGludmVydCAgc05hTjE1ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnY4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW52ODgyIGludmVydCAtTmFOMjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcWludjg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTG9nQi5kZWNUZXN0CmluZGV4IDQ0OWYzZGMuLmExODMxM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcUxvZ0IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFMb2dCLmRlY1Rlc3QKQEAgLTEsMTYwICsxLDE2MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcUxvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjUXVhZHMgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIGJhc2ljcwotZHFsb2diMDAwIGxvZ2IgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMDAxIGxvZ2IgIDFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2Ci1kcWxvZ2IwMDIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKLWRxbG9nYjAwMyBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMwotZHFsb2diMDA0IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yCi1kcWxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDAKLWRxbG9nYjAwNiBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAotZHFsb2diMDA3IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwCi1kcWxvZ2IwMDggbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDAKLWRxbG9nYjAwOSBsb2diICAyLjUwMCAgICAgICAgICAgICAtPiAgMAotZHFsb2diMDEwIGxvZ2IgIDEwICAgICAgICAgICAgICAgIC0+ICAxCi1kcWxvZ2IwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKLWRxbG9nYjAxMiBsb2diICAxMDAgICAgICAgICAgICAgICAtPiAgMgotZHFsb2diMDEzIGxvZ2IgIDI1MCAgICAgICAgICAgICAgIC0+ICAyCi1kcWxvZ2IwMTQgbG9nYiAgOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQKLWRxbG9nYjAxNSBsb2diICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKLQotLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcwotZHFsb2diMDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMDIyIGxvZ2IgLTFFLTYxNzYgICAgICAgICAgIC0+IC02MTc2Ci1kcWxvZ2IwMjMgbG9nYiAtOUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMKLWRxbG9nYjAyNCBsb2diIC0wLjAwMSAgICAgICAgICAgICAtPiAtMwotZHFsb2diMDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCi1kcWxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDAKLWRxbG9nYjAyNyBsb2diIC0xMCAgICAgICAgICAgICAgICAtPiAgMQotZHFsb2diMDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCi1kcWxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDIKLWRxbG9nYjAzMCBsb2diIC05RSs2MTQ0ICAgICAgICAgICAtPiAgNjE0NAotZHFsb2diMDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0tLSB6ZXJvcwotZHFsb2diMTExIGxvZ2IgICAgICAgICAgMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTE0IGxvZ2IgICAgICAtMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTE3IGxvZ2IgICAgICAwRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotZHFsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZHFsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKLWRxbG9nYjEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4Ci1kcWxvZ2IxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOAotZHFsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRxbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA2MTQ0Ci1kcWxvZ2IxMzIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAtNjE0MwotZHFsb2diMTMzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTYxNDMKLWRxbG9nYjEzNCBsb2diICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC02MTc2Ci0KLWRxbG9nYjEzNSBsb2diICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC02MTc2Ci1kcWxvZ2IxMzYgbG9nYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtNjE0MwotZHFsb2diMTM3IGxvZ2IgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTYxNDMKLWRxbG9nYjE2MTQgbG9nYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgNjE0NAotCi0tLSBvbmVzCi1kcWxvZ2IwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAotZHFsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDAKLWRxbG9nYjAwNjMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCi0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCi1kcWxvZ2IxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCi1kcWxvZ2IxMTAxIGxvZ2IgMTAgICAgICAgICAgICAtPiAxCi1kcWxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyCi1kcWxvZ2IxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCi1kcWxvZ2IxMTA0IGxvZ2IgMTAwMDAgICAgICAgICAtPiA0Ci1kcWxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1Ci1kcWxvZ2IxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2Ci1kcWxvZ2IxMTA3IGxvZ2IgMTAwMDAwMDAgICAgICAtPiA3Ci1kcWxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4Ci1kcWxvZ2IxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5Ci1kcWxvZ2IxMTEwIGxvZ2IgMTAwMDAwMDAwMDAgICAtPiAxMAotZHFsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTEKLWRxbG9nYjExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCi1kcWxvZ2IxMTEzIGxvZ2IgMC4wMDAwMDAwMDAwMSAtPiAtMTEKLWRxbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwCi1kcWxvZ2IxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKLWRxbG9nYjExMTYgbG9nYiAwLjAwMDAwMDAxIC0+IC04Ci1kcWxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03Ci1kcWxvZ2IxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKLWRxbG9nYjExMTkgbG9nYiAwLjAwMDAxIC0+IC01Ci1kcWxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00Ci1kcWxvZ2IxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKLWRxbG9nYjExMjIgbG9nYiAwLjAxIC0+IC0yCi1kcWxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xCi1kcWxvZ2IxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQotZHFsb2diMTEyNSBsb2diIDFFLTEwMCAtPiAtMTAwCi1kcWxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkKLWRxbG9nYjExMjYgbG9nYiAxRS02MTQzIC0+IC02MTQzCi0KLS0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWEKLWRxbG9nYjE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMgotZHFsb2diMTQwMSBsb2diIDEwRS0yICAgIC0+IC0xCi1kcWxvZ2IxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDAKLWRxbG9nYjE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQotZHFsb2diMTQwNCBsb2diIDEwMDAwRS0yIC0+ICAyCi1kcWxvZ2IxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDAKLWRxbG9nYjE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQotZHFsb2diMTQwNyBsb2diIDEwMDBFLTEgIC0+ICAyCi1kcWxvZ2IxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMKLWRxbG9nYjE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQotZHFsb2diMTQxMCBsb2diIDEwMEUwICAgIC0+ICAyCi1kcWxvZ2IxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMKLWRxbG9nYjE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNAotZHFsb2diMTQxMyBsb2diIDEwRTEgICAgIC0+ICAyCi1kcWxvZ2IxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMKLWRxbG9nYjE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNAotZHFsb2diMTQxNiBsb2diIDEwMDAwRTEgIC0+ICA1Ci1kcWxvZ2IxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMKLWRxbG9nYjE0MTggbG9nYiAxMDBFMiAgICAtPiAgNAotZHFsb2diMTQxOSBsb2diIDEwMDBFMiAgIC0+ICA1Ci1kcWxvZ2IxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYKLQotLS0gc3BlY2lhbCB2YWx1ZXMKLWRxbG9nYjgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKLWRxbG9nYjgyMSAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybwotZHFsb2diODIyICBsb2diICAgTmFOICAgICAgLT4gICBOYU4KLWRxbG9nYjgyMyAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFsb2diODI0ICBsb2diICAgc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uCi1kcWxvZ2I4MjUgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KLWRxbG9nYjgyNiAgbG9nYiAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2Ci1kcWxvZ2I4MjcgIGxvZ2IgICAtTmFONjU0ICAtPiAgLU5hTjY1NAotZHFsb2diODI4ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xCi0KLS0tIE51bGwgdGVzdAotZHFsb2diOTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcUxvZ0IuZGVjVGVzdCAtLSBpbnRlZ3JhbCA3NTRyIGFkanVzdGVkIGV4cG9uZW50LCBmb3IgZGVjUXVhZHMgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIGJhc2ljcw0KK2RxbG9nYjAwMCBsb2diICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkcWxvZ2IwMDEgbG9nYiAgMUUtNjE3NiAgICAgICAgICAgLT4gLTYxNzYNCitkcWxvZ2IwMDIgbG9nYiAgMUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMNCitkcWxvZ2IwMDMgbG9nYiAgMC4wMDEgICAgICAgICAgICAgLT4gLTMNCitkcWxvZ2IwMDQgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTINCitkcWxvZ2IwMDUgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMDYgbG9nYiAgMiAgICAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMDcgbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMDggbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMDkgbG9nYiAgMi41MDAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMTAgbG9nYiAgMTAgICAgICAgICAgICAgICAgLT4gIDENCitkcWxvZ2IwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDENCitkcWxvZ2IwMTIgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDINCitkcWxvZ2IwMTMgbG9nYiAgMjUwICAgICAgICAgICAgICAgLT4gIDINCitkcWxvZ2IwMTQgbG9nYiAgOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQNCitkcWxvZ2IwMTUgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQorDQorLS0gbmVnYXRpdmVzIGFwcGVhciB0byBiZSB0cmVhdGVkIGFzIHBvc2l0aXZlcw0KK2RxbG9nYjAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkcWxvZ2IwMjIgbG9nYiAtMUUtNjE3NiAgICAgICAgICAgLT4gLTYxNzYNCitkcWxvZ2IwMjMgbG9nYiAtOUUtNjE0MyAgICAgICAgICAgLT4gLTYxNDMNCitkcWxvZ2IwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMNCitkcWxvZ2IwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMjYgbG9nYiAtMiAgICAgICAgICAgICAgICAgLT4gIDANCitkcWxvZ2IwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDENCitkcWxvZ2IwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDENCitkcWxvZ2IwMjkgbG9nYiAtMTAwICAgICAgICAgICAgICAgLT4gIDINCitkcWxvZ2IwMzAgbG9nYiAtOUUrNjE0NCAgICAgICAgICAgLT4gIDYxNDQNCitkcWxvZ2IwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQorDQorLS0gemVyb3MNCitkcWxvZ2IxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorZHFsb2diMTEyIGxvZ2IgICAgICAgICAtMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RxbG9nYjExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkcWxvZ2IxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorZHFsb2diMTE1IGxvZ2IgICAgIDAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KK2RxbG9nYjExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitkcWxvZ2IxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorZHFsb2diMTE4IGxvZ2IgICAgIC0wRS0xNDEgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybw0KKw0KKy0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzDQorZHFsb2diMTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgNCitkcWxvZ2IxMjIgbG9nYiAgLTI2ODI2ODI2OCAgICAgICAgLT4gOA0KK2RxbG9nYjEyMyBsb2diICAgMTM0MTM0MTM0ICAgICAgICAtPiA4DQorZHFsb2diMTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RxbG9nYjEzMSBsb2diICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA2MTQ0DQorZHFsb2diMTMyIGxvZ2IgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gLTYxNDMNCitkcWxvZ2IxMzMgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtNjE0Mw0KK2RxbG9nYjEzNCBsb2diICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IC02MTc2DQorDQorZHFsb2diMTM1IGxvZ2IgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTYxNzYNCitkcWxvZ2IxMzYgbG9nYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAtNjE0Mw0KK2RxbG9nYjEzNyBsb2diICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC02MTQzDQorZHFsb2diMTYxNCBsb2diICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA2MTQ0DQorDQorLS0gb25lcw0KK2RxbG9nYjAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQorZHFsb2diMDA2MiBsb2diICAxLjAgICAgICAgICAgICAgICAtPiAgIDANCitkcWxvZ2IwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KKw0KKy0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwDQorZHFsb2diMTEwMCBsb2diIDEgICAgICAgICAgICAgLT4gMA0KK2RxbG9nYjExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDENCitkcWxvZ2IxMTAyIGxvZ2IgMTAwICAgICAgICAgICAtPiAyDQorZHFsb2diMTEwMyBsb2diIDEwMDAgICAgICAgICAgLT4gMw0KK2RxbG9nYjExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQNCitkcWxvZ2IxMTA1IGxvZ2IgMTAwMDAwICAgICAgICAtPiA1DQorZHFsb2diMTEwNiBsb2diIDEwMDAwMDAgICAgICAgLT4gNg0KK2RxbG9nYjExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcNCitkcWxvZ2IxMTA4IGxvZ2IgMTAwMDAwMDAwICAgICAtPiA4DQorZHFsb2diMTEwOSBsb2diIDEwMDAwMDAwMDAgICAgLT4gOQ0KK2RxbG9nYjExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwDQorZHFsb2diMTExMSBsb2diIDEwMDAwMDAwMDAwMCAgLT4gMTENCitkcWxvZ2IxMTEyIGxvZ2IgMTAwMDAwMDAwMDAwMCAtPiAxMg0KK2RxbG9nYjExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQ0KK2RxbG9nYjExMTQgbG9nYiAwLjAwMDAwMDAwMDEgLT4gLTEwDQorZHFsb2diMTExNSBsb2diIDAuMDAwMDAwMDAxIC0+IC05DQorZHFsb2diMTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgNCitkcWxvZ2IxMTE3IGxvZ2IgMC4wMDAwMDAxIC0+IC03DQorZHFsb2diMTExOCBsb2diIDAuMDAwMDAxIC0+IC02DQorZHFsb2diMTExOSBsb2diIDAuMDAwMDEgLT4gLTUNCitkcWxvZ2IxMTIwIGxvZ2IgMC4wMDAxIC0+IC00DQorZHFsb2diMTEyMSBsb2diIDAuMDAxIC0+IC0zDQorZHFsb2diMTEyMiBsb2diIDAuMDEgLT4gLTINCitkcWxvZ2IxMTIzIGxvZ2IgMC4xIC0+IC0xDQorZHFsb2diMTEyNCBsb2diIDFFLTk5ICAtPiAtOTkNCitkcWxvZ2IxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDANCitkcWxvZ2IxMTI3IGxvZ2IgMUUtMjk5IC0+IC0yOTkNCitkcWxvZ2IxMTI2IGxvZ2IgMUUtNjE0MyAtPiAtNjE0Mw0KKw0KKy0tIHN1Z2dlc3Rpb25zIGZyb20gSWxhbiBOZWhhbWENCitkcWxvZ2IxNDAwIGxvZ2IgMTBFLTMgICAgLT4gLTINCitkcWxvZ2IxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTENCitkcWxvZ2IxNDAyIGxvZ2IgMTAwRS0yICAgLT4gIDANCitkcWxvZ2IxNDAzIGxvZ2IgMTAwMEUtMiAgLT4gIDENCitkcWxvZ2IxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDINCitkcWxvZ2IxNDA1IGxvZ2IgMTBFLTEgICAgLT4gIDANCitkcWxvZ2IxNDA2IGxvZ2IgMTAwRS0xICAgLT4gIDENCitkcWxvZ2IxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDINCitkcWxvZ2IxNDA4IGxvZ2IgMTAwMDBFLTEgLT4gIDMNCitkcWxvZ2IxNDA5IGxvZ2IgMTBFMCAgICAgLT4gIDENCitkcWxvZ2IxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDINCitkcWxvZ2IxNDExIGxvZ2IgMTAwMEUwICAgLT4gIDMNCitkcWxvZ2IxNDEyIGxvZ2IgMTAwMDBFMCAgLT4gIDQNCitkcWxvZ2IxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDINCitkcWxvZ2IxNDE0IGxvZ2IgMTAwRTEgICAgLT4gIDMNCitkcWxvZ2IxNDE1IGxvZ2IgMTAwMEUxICAgLT4gIDQNCitkcWxvZ2IxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUNCitkcWxvZ2IxNDE3IGxvZ2IgMTBFMiAgICAgLT4gIDMNCitkcWxvZ2IxNDE4IGxvZ2IgMTAwRTIgICAgLT4gIDQNCitkcWxvZ2IxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUNCitkcWxvZ2IxNDIwIGxvZ2IgMTAwMDBFMiAgLT4gIDYNCisNCistLSBzcGVjaWFsIHZhbHVlcw0KK2RxbG9nYjgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkNCitkcWxvZ2I4MjEgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8NCitkcWxvZ2I4MjIgIGxvZ2IgICBOYU4gICAgICAtPiAgIE5hTg0KK2RxbG9nYjgyMyAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcWxvZ2I4MjQgIGxvZ2IgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24NCitkcWxvZ2I4MjUgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcWxvZ2I4MjYgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1Ng0KK2RxbG9nYjgyNyAgbG9nYiAgIC1OYU42NTQgIC0+ICAtTmFONjU0DQorZHFsb2diODI4ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xDQorDQorLS0gTnVsbCB0ZXN0DQorZHFsb2diOTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNYXguZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CmluZGV4IDE2MmQ0YmQuLmRjNmExYWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heC5kZWNUZXN0CkBAIC0xLDMyMiArMSwzMjIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFNYXguZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFtYXgwMDEgbWF4ICAtMiAgLTIgIC0+IC0yCi1kcW1heDAwMiBtYXggIC0yICAtMSAgLT4gLTEKLWRxbWF4MDAzIG1heCAgLTIgICAwICAtPiAgMAotZHFtYXgwMDQgbWF4ICAtMiAgIDEgIC0+ICAxCi1kcW1heDAwNSBtYXggIC0yICAgMiAgLT4gIDIKLWRxbWF4MDA2IG1heCAgLTEgIC0yICAtPiAtMQotZHFtYXgwMDcgbWF4ICAtMSAgLTEgIC0+IC0xCi1kcW1heDAwOCBtYXggIC0xICAgMCAgLT4gIDAKLWRxbWF4MDA5IG1heCAgLTEgICAxICAtPiAgMQotZHFtYXgwMTAgbWF4ICAtMSAgIDIgIC0+ICAyCi1kcW1heDAxMSBtYXggICAwICAtMiAgLT4gIDAKLWRxbWF4MDEyIG1heCAgIDAgIC0xICAtPiAgMAotZHFtYXgwMTMgbWF4ICAgMCAgIDAgIC0+ICAwCi1kcW1heDAxNCBtYXggICAwICAgMSAgLT4gIDEKLWRxbWF4MDE1IG1heCAgIDAgICAyICAtPiAgMgotZHFtYXgwMTYgbWF4ICAgMSAgLTIgIC0+ICAxCi1kcW1heDAxNyBtYXggICAxICAtMSAgLT4gIDEKLWRxbWF4MDE4IG1heCAgIDEgICAwICAtPiAgMQotZHFtYXgwMTkgbWF4ICAgMSAgIDEgIC0+ICAxCi1kcW1heDAyMCBtYXggICAxICAgMiAgLT4gIDIKLWRxbWF4MDIxIG1heCAgIDIgIC0yICAtPiAgMgotZHFtYXgwMjIgbWF4ICAgMiAgLTEgIC0+ICAyCi1kcW1heDAyMyBtYXggICAyICAgMCAgLT4gIDIKLWRxbWF4MDI1IG1heCAgIDIgICAxICAtPiAgMgotZHFtYXgwMjYgbWF4ICAgMiAgIDIgIC0+ICAyCi0KLS0tIGV4dGVuZGVkIHplcm9zCi1kcW1heDAzMCBtYXggICAwICAgICAwICAgLT4gIDAKLWRxbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMAotZHFtYXgwMzIgbWF4ICAgMCAgICAtMC4wIC0+ICAwCi1kcW1heDAzMyBtYXggICAwICAgICAwLjAgLT4gIDAKLWRxbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgotZHFtYXgwMzUgbWF4ICAtMCAgICAtMCAgIC0+IC0wCi1kcW1heDAzNiBtYXggIC0wICAgIC0wLjAgLT4gLTAuMAotZHFtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjAKLWRxbWF4MDM4IG1heCAgIDAuMCAgIDAgICAtPiAgMAotZHFtYXgwMzkgbWF4ICAgMC4wICAtMCAgIC0+ICAwLjAKLWRxbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wCi1kcW1heDA0MSBtYXggICAwLjAgICAwLjAgLT4gIDAuMAotZHFtYXgwNDIgbWF4ICAtMC4wICAgMCAgIC0+ICAwCi1kcW1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMAotZHFtYXgwNDQgbWF4ICAtMC4wICAtMC4wIC0+IC0wLjAKLWRxbWF4MDQ1IG1heCAgLTAuMCAgIDAuMCAtPiAgMC4wCi0KLWRxbWF4MDUwIG1heCAgLTBFMSAgIDBFMSAtPiAgMEUrMQotZHFtYXgwNTEgbWF4ICAtMEUyICAgMEUyIC0+ICAwRSsyCi1kcW1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzEKLWRxbWF4MDUzIG1heCAgLTBFMSAgIDBFMiAtPiAgMEUrMgotZHFtYXgwNTQgbWF4ICAgMEUxICAtMEUxIC0+ICAwRSsxCi1kcW1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzIKLWRxbWF4MDU2IG1heCAgIDBFMiAgLTBFMSAtPiAgMEUrMgotZHFtYXgwNTcgbWF4ICAgMEUxICAtMEUyIC0+ICAwRSsxCi0KLWRxbWF4MDU4IG1heCAgIDBFMSAgIDBFMSAtPiAgMEUrMQotZHFtYXgwNTkgbWF4ICAgMEUyICAgMEUyIC0+ICAwRSsyCi1kcW1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzIKLWRxbWF4MDYxIG1heCAgIDBFMSAgIDBFMiAtPiAgMEUrMgotZHFtYXgwNjIgbWF4ICAtMEUxICAtMEUxIC0+IC0wRSsxCi1kcW1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzIKLWRxbWF4MDY0IG1heCAgLTBFMiAgLTBFMSAtPiAtMEUrMQotZHFtYXgwNjUgbWF4ICAtMEUxICAtMEUyIC0+IC0wRSsxCi0KLS0tIFNwZWNpYWxzCi1kcW1heDA5MCBtYXggIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotZHFtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKLWRxbWF4MDkyIG1heCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kcW1heDA5MyBtYXggIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQotZHFtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKLWRxbWF4MDk1IG1heCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kcW1heDA5NiBtYXggIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQotZHFtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbWF4MDk4IG1heCAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW1heDA5OSBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbWF4MTAxIG1heCAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW1heDEwMiBtYXggIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbWF4MTA0IG1heCAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW1heDEwNSBtYXggIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kcW1heDEyMCBtYXggLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFtYXgxMjEgbWF4IC1JbmYgIC0xMDAwICAtPiAtMTAwMAotZHFtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQotZHFtYXgxMjMgbWF4IC1JbmYgIC0wICAgICAtPiAtMAotZHFtYXgxMjQgbWF4IC1JbmYgICAwICAgICAtPiAgMAotZHFtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQotZHFtYXgxMjYgbWF4IC1JbmYgICAxMDAwICAtPiAgMTAwMAotZHFtYXgxMjcgbWF4IC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQotZHFtYXgxMjkgbWF4IC0xMDAwIC1JbmYgICAtPiAgLTEwMDAKLWRxbWF4MTMwIG1heCAtMSAgICAtSW5mICAgLT4gIC0xCi1kcW1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMAotZHFtYXgxMzIgbWF4ICAwICAgIC1JbmYgICAtPiAgMAotZHFtYXgxMzMgbWF4ICAxICAgIC1JbmYgICAtPiAgMQotZHFtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMAotZHFtYXgxMzUgbWF4ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKLQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCi1kcW1heDE0MSBtYXggIE5hTiAtSW5mICAgIC0+IC1JbmZpbml0eQotZHFtYXgxNDIgbWF4ICBOYU4gLTEwMDAgICAtPiAtMTAwMAotZHFtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQotZHFtYXgxNDQgbWF4ICBOYU4gLTAgICAgICAtPiAtMAotZHFtYXgxNDUgbWF4ICBOYU4gIDAgICAgICAtPiAgMAotZHFtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQotZHFtYXgxNDcgbWF4ICBOYU4gIDEwMDAgICAtPiAgMTAwMAotZHFtYXgxNDggbWF4ICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLWRxbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTgotZHFtYXgxNTAgbWF4IC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkKLWRxbWF4MTUxIG1heCAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLWRxbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTEKLWRxbWF4MTUzIG1heCAtMCAgICBOYU4gICAgLT4gLTAKLWRxbWF4MTU0IG1heCAgMCAgICBOYU4gICAgLT4gIDAKLWRxbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDEKLWRxbWF4MTU2IG1heCAgMTAwMCBOYU4gICAgLT4gIDEwMDAKLWRxbWF4MTU3IG1heCAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLWRxbWF4MTYxIG1heCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTYyIG1heCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY0IG1heCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY1IG1heCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY3IG1heCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY4IG1heCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTcwIG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTcxIG1heCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTczIG1heCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc0IG1heCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc2IG1heCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc3IG1heCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTc5IG1heCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFtYXgxODEgbWF4ICBOYU45ICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1heDE4MiBtYXggIE5hTjggICAgIDkgICAtPiAgOQotZHFtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRxbWF4MTg0IG1heCAtTmFOMSAgIE5hTjExIC0+IC1OYU4xCi1kcW1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMgotZHFtYXgxODYgbWF4IC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzCi1kcW1heDE4NyBtYXggIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQKLQotZHFtYXgxODggbWF4IC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5Ci1kcW1heDE4OSBtYXggLTkgICAgIC1OYU4zICAtPiAtOQotZHFtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5Ci0KLWRxbWF4MTkxIG1heCAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcW1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFtYXgxOTMgbWF4IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTk0IG1heCAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCi1kcW1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZHFtYXgxOTYgbWF4IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4MTk3IG1heCAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kcW1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFtYXgxOTkgbWF4ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcwotZHFtYXgyMjEgbWF4IDEyMzQ1Njc4MDAwIDEgIC0+IDEyMzQ1Njc4MDAwCi1kcW1heDIyMiBtYXggMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDAKLWRxbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCi1kcW1heDIyNCBtYXggMSAxMjM0NTY3ODAwICAgLT4gMTIzNDU2NzgwMAotZHFtYXgyMjUgbWF4IDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTAKLWRxbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCi1kcW1heDIyNyBtYXggMTIzNDU2Nzg5MSAgMSAgLT4gMTIzNDU2Nzg5MQotZHFtYXgyMjggbWF4IDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTEKLWRxbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQotZHFtYXgyMzAgbWF4IDEgMTIzNDU2Nzg5MDEgIC0+IDEyMzQ1Njc4OTAxCi1kcW1heDIzMSBtYXggMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5NgotZHFtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKLWRxbWF4MjMzIG1heCAtMTIzNDU2Nzg5MSAgMSAtPiAxCi1kcW1heDIzNCBtYXggMSAtMTIzNDU2Nzg5MSAgLT4gMQotZHFtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDEKLWRxbWF4MjM2IG1heCAxIC0xMjM0NTY3ODkwMSAtPiAxCi1kcW1heDIzNyBtYXggLTEyMzQ1Njc4OTYgIDEgLT4gMQotZHFtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDEKLQotLS0gZnJvbSBleGFtcGxlcwotZHFtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJwotZHFtYXgyODEgbWF4ICctMTAnICczJyAgLT4gICczJwotZHFtYXgyODIgbWF4ICcxLjAnICcxJyAgLT4gICcxJwotZHFtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJwotZHFtYXgyODQgbWF4ICc3JyAnTmFOJyAgLT4gICc3JwotCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KLWRxbWF4NDAxIG1heCAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5Ci1kcW1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjEKLWRxbWF4NDAzIG1heCAgMSAgICAgIDEuMCAgICAgLT4gIDEKLWRxbWF4NDA0IG1heCAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAotZHFtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCi1kcW1heDQwNiBtYXggIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCi1kcW1heDQwNyBtYXggIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCi1kcW1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwCi1kcW1heDQwOSBtYXggIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKLWRxbWF4NDEwIG1heCAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAotZHFtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAotZHFtYXg0MTIgbWF4ICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCi1kcW1heDQxMyBtYXggIDAgICAgIC0wLjAgICAgIC0+ICAwCi1kcW1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwCi1kcW1heDQxNSBtYXggLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKLWRxbWF4NDE2IG1heCAtMCAgICAgLTAuMTAwICAgLT4gLTAKLWRxbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCi1kcW1heDQxOCBtYXggLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwCi1kcW1heDQxOSBtYXggLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKLWRxbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMAotZHFtYXg0MjEgbWF4IC0xICAgICAtMS4xICAgICAtPiAtMQotZHFtYXg0MjMgbWF4IC0xLjEgICAtSW5mICAgICAtPiAtMS4xCi0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKLWRxbWF4NDMxIG1heCAgMS4xICAgIEluZiAgICAgLT4gIEluZmluaXR5Ci1kcW1heDQzMiBtYXggIDEgICAgICAxLjEgICAgIC0+ICAxLjEKLWRxbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDEKLWRxbWF4NDM0IG1heCAgMC4xICAgIDEuMCAgICAgLT4gIDEuMAotZHFtYXg0MzUgbWF4ICAwLjEwICAgMC4xICAgICAtPiAgMC4xCi1kcW1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwCi1kcW1heDQzNyBtYXggIDAgICAgICAwLjEwICAgIC0+ICAwLjEwCi1kcW1heDQzOCBtYXggIDAuMCAgICAwICAgICAgIC0+ICAwCi1kcW1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjAKLWRxbWF4NDQwIG1heCAtMC4wICAgIDAuMCAgICAgLT4gIDAuMAotZHFtYXg0NDEgbWF4IC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAotZHFtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wCi1kcW1heDQ0MyBtYXggLTAuMCAgICAwICAgICAgIC0+ICAwCi1kcW1heDQ0NCBtYXggLTAgICAgICAwICAgICAgIC0+ICAwCi1kcW1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjAKLWRxbWF4NDQ2IG1heCAtMC4xMDAgLTAgICAgICAgLT4gLTAKLWRxbWF4NDQ3IG1heCAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCi1kcW1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCi1kcW1heDQ0OSBtYXggLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKLWRxbWF4NDUwIG1heCAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAotZHFtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQotZHFtYXg0NTMgbWF4IC1JbmYgICAtMS4xICAgICAtPiAtMS4xCi0tLSBsYXJnaWVzCi1kcW1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszCi1kcW1heDQ2MSBtYXggIDFFKzMgICAxMDAwICAgIC0+ICAxRSszCi1kcW1heDQ2MiBtYXggIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCi1kcW1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszCi1kcW1heDQ2NCBtYXggLTEwMDAgICAxRSszICAgIC0+ICAxRSszCi1kcW1heDQ2NSBtYXggLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCi1kcW1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwCi1kcW1heDQ2NyBtYXggLTFFKzMgIC0xMDAwICAgIC0+IC0xMDAwCi0KLS0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbgotZHFtYXg0NzEgbWF4ICAgICAgMS4wICAgICAgIDAuMSAgLT4gMS4wCi1kcW1heDQ3MiBtYXggICAgICAwLjEgICAgICAgMS4wICAtPiAxLjAKLWRxbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjAKLWRxbWF4NDc0IG1heCAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDEwLjAKLWRxbWF4NDc1IG1heCAgICAgIDEwMCAgICAgICAxLjAgIC0+IDEwMAotZHFtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwCi1kcW1heDQ3NyBtYXggICAgIDEwMDAgICAgICAxMC4wICAtPiAxMDAwCi1kcW1heDQ3OCBtYXggICAgIDEwLjAgICAgICAxMDAwICAtPiAxMDAwCi1kcW1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMAotZHFtYXg0ODAgbWF4ICAgIDEwMC4wICAgICAxMDAwMCAgLT4gMTAwMDAKLWRxbWF4NDgxIG1heCAgIDEwMDAwMCAgICAxMDAwLjAgIC0+IDEwMDAwMAotZHFtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwCi1kcW1heDQ4MyBtYXggIDEwMDAwMDAgICAxMDAwMC4wICAtPiAxMDAwMDAwCi1kcW1heDQ4NCBtYXggIDEwMDAwLjAgICAxMDAwMDAwICAtPiAxMDAwMDAwCi0KLS0tIHN1Ym5vcm1hbHMKLWRxbWF4NTEwIG1heCAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDEuMDBFLTYxNDMKLWRxbWF4NTExIG1heCAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsCi1kcW1heDUxMiBtYXggIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbAotZHFtYXg1MTMgbWF4ICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMS4wMEUtNjE0NCBTdWJub3JtYWwKLWRxbWF4NTE0IG1heCAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsCi1kcW1heDUxNSBtYXggIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbAotZHFtYXg1MTYgbWF4ICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45RS02MTQ1ICBTdWJub3JtYWwKLWRxbWF4NTE3IG1heCAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsCi1kcW1heDUxOCBtYXggIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbAotZHFtYXg1MTkgbWF4ICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgOUUtNjE0NyAgICBTdWJub3JtYWwKLWRxbWF4NTIwIG1heCAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsCi0KLWRxbWF4NTMwIG1heCAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbWF4NTMxIG1heCAtMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKLWRxbWF4NTMyIG1heCAtMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbWF4NTMzIG1heCAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbWF4NTM0IG1heCAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbWF4NTM1IG1heCAtMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbWF4NTM2IG1heCAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbWF4NTM3IG1heCAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbWF4NTM4IG1heCAtMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbWF4NTM5IG1heCAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKLWRxbWF4NTQwIG1heCAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKLQotLS0gTnVsbCB0ZXN0cwotZHFtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbWF4OTAxIG1heCAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcU1heC5kZWNUZXN0IC0tIGRlY1F1YWQgbWF4bnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQorLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MNCitkcW1heDAwMSBtYXggIC0yICAtMiAgLT4gLTINCitkcW1heDAwMiBtYXggIC0yICAtMSAgLT4gLTENCitkcW1heDAwMyBtYXggIC0yICAgMCAgLT4gIDANCitkcW1heDAwNCBtYXggIC0yICAgMSAgLT4gIDENCitkcW1heDAwNSBtYXggIC0yICAgMiAgLT4gIDINCitkcW1heDAwNiBtYXggIC0xICAtMiAgLT4gLTENCitkcW1heDAwNyBtYXggIC0xICAtMSAgLT4gLTENCitkcW1heDAwOCBtYXggIC0xICAgMCAgLT4gIDANCitkcW1heDAwOSBtYXggIC0xICAgMSAgLT4gIDENCitkcW1heDAxMCBtYXggIC0xICAgMiAgLT4gIDINCitkcW1heDAxMSBtYXggICAwICAtMiAgLT4gIDANCitkcW1heDAxMiBtYXggICAwICAtMSAgLT4gIDANCitkcW1heDAxMyBtYXggICAwICAgMCAgLT4gIDANCitkcW1heDAxNCBtYXggICAwICAgMSAgLT4gIDENCitkcW1heDAxNSBtYXggICAwICAgMiAgLT4gIDINCitkcW1heDAxNiBtYXggICAxICAtMiAgLT4gIDENCitkcW1heDAxNyBtYXggICAxICAtMSAgLT4gIDENCitkcW1heDAxOCBtYXggICAxICAgMCAgLT4gIDENCitkcW1heDAxOSBtYXggICAxICAgMSAgLT4gIDENCitkcW1heDAyMCBtYXggICAxICAgMiAgLT4gIDINCitkcW1heDAyMSBtYXggICAyICAtMiAgLT4gIDINCitkcW1heDAyMiBtYXggICAyICAtMSAgLT4gIDINCitkcW1heDAyMyBtYXggICAyICAgMCAgLT4gIDINCitkcW1heDAyNSBtYXggICAyICAgMSAgLT4gIDINCitkcW1heDAyNiBtYXggICAyICAgMiAgLT4gIDINCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK2RxbWF4MDMwIG1heCAgIDAgICAgIDAgICAtPiAgMA0KK2RxbWF4MDMxIG1heCAgIDAgICAgLTAgICAtPiAgMA0KK2RxbWF4MDMyIG1heCAgIDAgICAgLTAuMCAtPiAgMA0KK2RxbWF4MDMzIG1heCAgIDAgICAgIDAuMCAtPiAgMA0KK2RxbWF4MDM0IG1heCAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3Nlbg0KK2RxbWF4MDM1IG1heCAgLTAgICAgLTAgICAtPiAtMA0KK2RxbWF4MDM2IG1heCAgLTAgICAgLTAuMCAtPiAtMC4wDQorZHFtYXgwMzcgbWF4ICAtMCAgICAgMC4wIC0+ICAwLjANCitkcW1heDAzOCBtYXggICAwLjAgICAwICAgLT4gIDANCitkcW1heDAzOSBtYXggICAwLjAgIC0wICAgLT4gIDAuMA0KK2RxbWF4MDQwIG1heCAgIDAuMCAgLTAuMCAtPiAgMC4wDQorZHFtYXgwNDEgbWF4ICAgMC4wICAgMC4wIC0+ICAwLjANCitkcW1heDA0MiBtYXggIC0wLjAgICAwICAgLT4gIDANCitkcW1heDA0MyBtYXggIC0wLjAgIC0wICAgLT4gLTAuMA0KK2RxbWF4MDQ0IG1heCAgLTAuMCAgLTAuMCAtPiAtMC4wDQorZHFtYXgwNDUgbWF4ICAtMC4wICAgMC4wIC0+ICAwLjANCisNCitkcW1heDA1MCBtYXggIC0wRTEgICAwRTEgLT4gIDBFKzENCitkcW1heDA1MSBtYXggIC0wRTIgICAwRTIgLT4gIDBFKzINCitkcW1heDA1MiBtYXggIC0wRTIgICAwRTEgLT4gIDBFKzENCitkcW1heDA1MyBtYXggIC0wRTEgICAwRTIgLT4gIDBFKzINCitkcW1heDA1NCBtYXggICAwRTEgIC0wRTEgLT4gIDBFKzENCitkcW1heDA1NSBtYXggICAwRTIgIC0wRTIgLT4gIDBFKzINCitkcW1heDA1NiBtYXggICAwRTIgIC0wRTEgLT4gIDBFKzINCitkcW1heDA1NyBtYXggICAwRTEgIC0wRTIgLT4gIDBFKzENCisNCitkcW1heDA1OCBtYXggICAwRTEgICAwRTEgLT4gIDBFKzENCitkcW1heDA1OSBtYXggICAwRTIgICAwRTIgLT4gIDBFKzINCitkcW1heDA2MCBtYXggICAwRTIgICAwRTEgLT4gIDBFKzINCitkcW1heDA2MSBtYXggICAwRTEgICAwRTIgLT4gIDBFKzINCitkcW1heDA2MiBtYXggIC0wRTEgIC0wRTEgLT4gLTBFKzENCitkcW1heDA2MyBtYXggIC0wRTIgIC0wRTIgLT4gLTBFKzINCitkcW1heDA2NCBtYXggIC0wRTIgIC0wRTEgLT4gLTBFKzENCitkcW1heDA2NSBtYXggIC0wRTEgIC0wRTIgLT4gLTBFKzENCisNCistLSBTcGVjaWFscw0KK2RxbWF4MDkwIG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorZHFtYXgwOTEgbWF4ICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitkcW1heDA5MiBtYXggIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MDkzIG1heCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZHFtYXgwOTQgbWF4ICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitkcW1heDA5NSBtYXggIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MDk2IG1heCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZHFtYXgwOTcgbWF4ICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW1heDA5OCBtYXggLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MDk5IG1heCAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFtYXgxMDAgbWF4IC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW1heDEwMSBtYXggLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MTAyIG1heCAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFtYXgxMDMgbWF4ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW1heDEwNCBtYXggIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MTA1IG1heCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZHFtYXgxMjAgbWF4IC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1heDEyMSBtYXggLUluZiAgLTEwMDAgIC0+IC0xMDAwDQorZHFtYXgxMjIgbWF4IC1JbmYgIC0xICAgICAtPiAtMQ0KK2RxbWF4MTIzIG1heCAtSW5mICAtMCAgICAgLT4gLTANCitkcW1heDEyNCBtYXggLUluZiAgIDAgICAgIC0+ICAwDQorZHFtYXgxMjUgbWF4IC1JbmYgICAxICAgICAtPiAgMQ0KK2RxbWF4MTI2IG1heCAtSW5mICAgMTAwMCAgLT4gIDEwMDANCitkcW1heDEyNyBtYXggLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MTI4IG1heCAtSW5mICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RxbWF4MTI5IG1heCAtMTAwMCAtSW5mICAgLT4gIC0xMDAwDQorZHFtYXgxMzAgbWF4IC0xICAgIC1JbmYgICAtPiAgLTENCitkcW1heDEzMSBtYXggLTAgICAgLUluZiAgIC0+ICAtMA0KK2RxbWF4MTMyIG1heCAgMCAgICAtSW5mICAgLT4gIDANCitkcW1heDEzMyBtYXggIDEgICAgLUluZiAgIC0+ICAxDQorZHFtYXgxMzQgbWF4ICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KK2RxbWF4MTM1IG1heCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorDQorLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzDQorZHFtYXgxNDEgbWF4ICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkNCitkcW1heDE0MiBtYXggIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQorZHFtYXgxNDMgbWF4ICBOYU4gLTEgICAgICAtPiAtMQ0KK2RxbWF4MTQ0IG1heCAgTmFOIC0wICAgICAgLT4gLTANCitkcW1heDE0NSBtYXggIE5hTiAgMCAgICAgIC0+ICAwDQorZHFtYXgxNDYgbWF4ICBOYU4gIDEgICAgICAtPiAgMQ0KK2RxbWF4MTQ3IG1heCAgTmFOICAxMDAwICAgLT4gIDEwMDANCitkcW1heDE0OCBtYXggIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4MTQ5IG1heCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RxbWF4MTUwIG1heCAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5DQorZHFtYXgxNTEgbWF4IC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KK2RxbWF4MTUyIG1heCAtMSAgICBOYU4gICAgLT4gLTENCitkcW1heDE1MyBtYXggLTAgICAgTmFOICAgIC0+IC0wDQorZHFtYXgxNTQgbWF4ICAwICAgIE5hTiAgICAtPiAgMA0KK2RxbWF4MTU1IG1heCAgMSAgICBOYU4gICAgLT4gIDENCitkcW1heDE1NiBtYXggIDEwMDAgTmFOICAgIC0+ICAxMDAwDQorZHFtYXgxNTcgbWF4ICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCisNCitkcW1heDE2MSBtYXggIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNjIgbWF4ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTYzIG1heCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE2NCBtYXggIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNjUgbWF4ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTY2IG1heCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE2NyBtYXggIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNjggbWF4ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTY5IG1heCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE3MCBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNzEgbWF4IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTcyIG1heCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE3MyBtYXggLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNzQgbWF4IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTc1IG1heCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE3NiBtYXggIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxNzcgbWF4ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTc4IG1heCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE3OSBtYXggIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2RxbWF4MTgxIG1heCAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWF4MTgyIG1heCAgTmFOOCAgICAgOSAgIC0+ICA5DQorZHFtYXgxODMgbWF4IC1OYU43ICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZHFtYXgxODQgbWF4IC1OYU4xICAgTmFOMTEgLT4gLU5hTjENCitkcW1heDE4NSBtYXggIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KK2RxbWF4MTg2IG1heCAtTmFOMTMgLU5hTjcgIC0+IC1OYU4xMw0KK2RxbWF4MTg3IG1heCAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNA0KKw0KK2RxbWF4MTg4IG1heCAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KK2RxbWF4MTg5IG1heCAtOSAgICAgLU5hTjMgIC0+IC05DQorZHFtYXgxOTAgbWF4ICBJbmYgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorZHFtYXgxOTEgbWF4ICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE5MiBtYXggIHNOYU45OCAtMSAgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTkzIG1heCAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxOTQgbWF4ICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE5NSBtYXggIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTk2IG1heCAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFtYXgxOTcgbWF4ICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDE5OCBtYXggIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWF4MTk5IG1heCAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KK2RxbWF4MjIxIG1heCAxMjM0NTY3ODAwMCAxICAtPiAxMjM0NTY3ODAwMA0KK2RxbWF4MjIyIG1heCAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KK2RxbWF4MjIzIG1heCAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwDQorZHFtYXgyMjQgbWF4IDEgMTIzNDU2NzgwMCAgIC0+IDEyMzQ1Njc4MDANCitkcW1heDIyNSBtYXggMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KK2RxbWF4MjI2IG1heCAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwDQorZHFtYXgyMjcgbWF4IDEyMzQ1Njc4OTEgIDEgIC0+IDEyMzQ1Njc4OTENCitkcW1heDIyOCBtYXggMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KK2RxbWF4MjI5IG1heCAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQ0KK2RxbWF4MjMwIG1heCAxIDEyMzQ1Njc4OTAxICAtPiAxMjM0NTY3ODkwMQ0KK2RxbWF4MjMxIG1heCAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQorZHFtYXgyMzIgbWF4IDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYNCitkcW1heDIzMyBtYXggLTEyMzQ1Njc4OTEgIDEgLT4gMQ0KK2RxbWF4MjM0IG1heCAxIC0xMjM0NTY3ODkxICAtPiAxDQorZHFtYXgyMzUgbWF4IC0xMjM0NTY3ODkwMSAxIC0+IDENCitkcW1heDIzNiBtYXggMSAtMTIzNDU2Nzg5MDEgLT4gMQ0KK2RxbWF4MjM3IG1heCAtMTIzNDU2Nzg5NiAgMSAtPiAxDQorZHFtYXgyMzggbWF4IDEgLTEyMzQ1Njc4OTYgIC0+IDENCisNCistLSBmcm9tIGV4YW1wbGVzDQorZHFtYXgyODAgbWF4ICczJyAgICcyJyAgLT4gICczJw0KK2RxbWF4MjgxIG1heCAnLTEwJyAnMycgIC0+ICAnMycNCitkcW1heDI4MiBtYXggJzEuMCcgJzEnICAtPiAgJzEnDQorZHFtYXgyODMgbWF4ICcxJyAnMS4wJyAgLT4gICcxJw0KK2RxbWF4Mjg0IG1heCAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQorZHFtYXg0MDEgbWF4ICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCitkcW1heDQwMiBtYXggIDEuMSAgICAxICAgICAgIC0+ICAxLjENCitkcW1heDQwMyBtYXggIDEgICAgICAxLjAgICAgIC0+ICAxDQorZHFtYXg0MDQgbWF4ICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQorZHFtYXg0MDUgbWF4ICAwLjEgICAgMC4xMCAgICAtPiAgMC4xDQorZHFtYXg0MDYgbWF4ICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMA0KK2RxbWF4NDA3IG1heCAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCitkcW1heDQwOCBtYXggIDAgICAgICAwLjAgICAgIC0+ICAwDQorZHFtYXg0MDkgbWF4ICAwLjAgICAtMCAgICAgICAtPiAgMC4wDQorZHFtYXg0MTAgbWF4ICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQorZHFtYXg0MTEgbWF4ICAwLjAwICAtMC4wICAgICAtPiAgMC4wMA0KK2RxbWF4NDEyIG1heCAgMC4wICAgLTAuMDAgICAgLT4gIDAuMA0KK2RxbWF4NDEzIG1heCAgMCAgICAgLTAuMCAgICAgLT4gIDANCitkcW1heDQxNCBtYXggIDAgICAgIC0wICAgICAgIC0+ICAwDQorZHFtYXg0MTUgbWF4IC0wLjAgICAtMCAgICAgICAtPiAtMC4wDQorZHFtYXg0MTYgbWF4IC0wICAgICAtMC4xMDAgICAtPiAtMA0KK2RxbWF4NDE3IG1heCAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQorZHFtYXg0MTggbWF4IC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KK2RxbWF4NDE5IG1heCAtMC4xICAgLTEuMCAgICAgLT4gLTAuMQ0KK2RxbWF4NDIwIG1heCAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KK2RxbWF4NDIxIG1heCAtMSAgICAgLTEuMSAgICAgLT4gLTENCitkcW1heDQyMyBtYXggLTEuMSAgIC1JbmYgICAgIC0+IC0xLjENCistLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQNCitkcW1heDQzMSBtYXggIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQ0KK2RxbWF4NDMyIG1heCAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KK2RxbWF4NDMzIG1heCAgMS4wICAgIDEgICAgICAgLT4gIDENCitkcW1heDQzNCBtYXggIDAuMSAgICAxLjAgICAgIC0+ICAxLjANCitkcW1heDQzNSBtYXggIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCitkcW1heDQzNiBtYXggIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwDQorZHFtYXg0MzcgbWF4ICAwICAgICAgMC4xMCAgICAtPiAgMC4xMA0KK2RxbWF4NDM4IG1heCAgMC4wICAgIDAgICAgICAgLT4gIDANCitkcW1heDQzOSBtYXggLTAgICAgICAwLjAgICAgIC0+ICAwLjANCitkcW1heDQ0MCBtYXggLTAuMCAgICAwLjAgICAgIC0+ICAwLjANCitkcW1heDQ0MSBtYXggLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQorZHFtYXg0NDIgbWF4IC0wLjAwICAgMC4wICAgICAtPiAgMC4wDQorZHFtYXg0NDMgbWF4IC0wLjAgICAgMCAgICAgICAtPiAgMA0KK2RxbWF4NDQ0IG1heCAtMCAgICAgIDAgICAgICAgLT4gIDANCitkcW1heDQ0NSBtYXggLTAgICAgIC0wLjAgICAgIC0+IC0wLjANCitkcW1heDQ0NiBtYXggLTAuMTAwIC0wICAgICAgIC0+IC0wDQorZHFtYXg0NDcgbWF4IC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMDANCitkcW1heDQ0OCBtYXggLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQorZHFtYXg0NDkgbWF4IC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQorZHFtYXg0NTAgbWF4IC0xICAgICAtMS4wICAgICAtPiAtMS4wDQorZHFtYXg0NTEgbWF4IC0xLjEgICAtMSAgICAgICAtPiAtMQ0KK2RxbWF4NDUzIG1heCAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KKy0tIGxhcmdpZXMNCitkcW1heDQ2MCBtYXggIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQorZHFtYXg0NjEgbWF4ICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KK2RxbWF4NDYyIG1heCAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCitkcW1heDQ2MyBtYXggIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQorZHFtYXg0NjQgbWF4IC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KK2RxbWF4NDY1IG1heCAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitkcW1heDQ2NiBtYXggLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQorZHFtYXg0NjcgbWF4IC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KKw0KKy0tIG1pc2FsaWdubWVudCB0cmFwcyBmb3IgbGl0dGxlLWVuZGlhbg0KK2RxbWF4NDcxIG1heCAgICAgIDEuMCAgICAgICAwLjEgIC0+IDEuMA0KK2RxbWF4NDcyIG1heCAgICAgIDAuMSAgICAgICAxLjAgIC0+IDEuMA0KK2RxbWF4NDczIG1heCAgICAgMTAuMCAgICAgICAwLjEgIC0+IDEwLjANCitkcW1heDQ3NCBtYXggICAgICAwLjEgICAgICAxMC4wICAtPiAxMC4wDQorZHFtYXg0NzUgbWF4ICAgICAgMTAwICAgICAgIDEuMCAgLT4gMTAwDQorZHFtYXg0NzYgbWF4ICAgICAgMS4wICAgICAgIDEwMCAgLT4gMTAwDQorZHFtYXg0NzcgbWF4ICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAwMA0KK2RxbWF4NDc4IG1heCAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwMDANCitkcW1heDQ3OSBtYXggICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAwMA0KK2RxbWF4NDgwIG1heCAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMDAwDQorZHFtYXg0ODEgbWF4ICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMDAwDQorZHFtYXg0ODIgbWF4ICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMDAwDQorZHFtYXg0ODMgbWF4ICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAwMA0KK2RxbWF4NDg0IG1heCAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwMDANCisNCistLSBzdWJub3JtYWxzDQorZHFtYXg1MTAgbWF4ICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wMEUtNjE0Mw0KK2RxbWF4NTExIG1heCAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDFFLTYxNDQgICAgU3Vibm9ybWFsDQorZHFtYXg1MTIgbWF4ICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wRS02MTQ0ICBTdWJub3JtYWwNCitkcW1heDUxMyBtYXggIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAxLjAwRS02MTQ0IFN1Ym5vcm1hbA0KK2RxbWF4NTE0IG1heCAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDFFLTYxNDUgICAgU3Vibm9ybWFsDQorZHFtYXg1MTUgbWF4ICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45OUUtNjE0NCBTdWJub3JtYWwNCitkcW1heDUxNiBtYXggIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICA5LjlFLTYxNDUgIFN1Ym5vcm1hbA0KK2RxbWF4NTE3IG1heCAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDlFLTYxNDYgICAgU3Vibm9ybWFsDQorZHFtYXg1MTggbWF4ICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMUUtNjE0NiAgICBTdWJub3JtYWwNCitkcW1heDUxOSBtYXggIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICA5RS02MTQ3ICAgIFN1Ym5vcm1hbA0KK2RxbWF4NTIwIG1heCAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDFFLTYxNDcgICAgU3Vibm9ybWFsDQorDQorZHFtYXg1MzAgbWF4IC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KK2RxbWF4NTMxIG1heCAtMC4xRS02MTQzICAgICAgICAwICAtPiAgIDANCitkcW1heDUzMiBtYXggLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwDQorZHFtYXg1MzMgbWF4IC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbWF4NTM0IG1heCAtMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDANCitkcW1heDUzNSBtYXggLTAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtYXg1MzYgbWF4IC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbWF4NTM3IG1heCAtMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1heDUzOCBtYXggLTAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtYXg1MzkgbWF4IC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMA0KK2RxbWF4NTQwIG1heCAtMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDANCisNCistLSBOdWxsIHRlc3RzDQorZHFtYXg5MDAgbWF4IDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW1heDkwMSBtYXggICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1heE1hZy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKaW5kZXggNjYyMWU4MC4uNmY1YmUyNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWF4TWFnLmRlY1Rlc3QKQEAgLTEsMzA0ICsxLDMwNCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcU1heE1hZy5kZWNUZXN0IC0tIGRlY1F1YWQgbWF4bnVtbWFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbwotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kcW14ZzAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTIKLWRxbXhnMDAyIG1heG1hZyAgLTIgIC0xICAtPiAtMgotZHFteGcwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yCi1kcW14ZzAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTIKLWRxbXhnMDA1IG1heG1hZyAgLTIgICAyICAtPiAgMgotZHFteGcwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yCi1kcW14ZzAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTEKLWRxbXhnMDA4IG1heG1hZyAgLTEgICAwICAtPiAtMQotZHFteGcwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxCi1kcW14ZzAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDIKLWRxbXhnMDExIG1heG1hZyAgIDAgIC0yICAtPiAtMgotZHFteGcwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xCi1kcW14ZzAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDAKLWRxbXhnMDE0IG1heG1hZyAgIDAgICAxICAtPiAgMQotZHFteGcwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyCi1kcW14ZzAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTIKLWRxbXhnMDE3IG1heG1hZyAgIDEgIC0xICAtPiAgMQotZHFteGcwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxCi1kcW14ZzAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDEKLWRxbXhnMDIwIG1heG1hZyAgIDEgICAyICAtPiAgMgotZHFteGcwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyCi1kcW14ZzAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDIKLWRxbXhnMDIzIG1heG1hZyAgIDIgICAwICAtPiAgMgotZHFteGcwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyCi1kcW14ZzAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDIKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRxbXhnMDMwIG1heG1hZyAgIDAgICAgIDAgICAtPiAgMAotZHFteGcwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwCi1kcW14ZzAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDAKLWRxbXhnMDMzIG1heG1hZyAgIDAgICAgIDAuMCAtPiAgMAotZHFteGcwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuCi1kcW14ZzAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTAKLWRxbXhnMDM2IG1heG1hZyAgLTAgICAgLTAuMCAtPiAtMC4wCi1kcW14ZzAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMAotZHFteGcwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwCi1kcW14ZzAzOSBtYXhtYWcgICAwLjAgIC0wICAgLT4gIDAuMAotZHFteGcwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjAKLWRxbXhnMDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCi1kcW14ZzA0MiBtYXhtYWcgIC0wLjAgICAwICAgLT4gIDAKLWRxbXhnMDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wCi1kcW14ZzA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAotZHFteGcwNDUgbWF4bWFnICAtMC4wICAgMC4wIC0+ICAwLjAKLQotZHFteGcwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxCi1kcW14ZzA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzIKLWRxbXhnMDUyIG1heG1hZyAgLTBFMiAgIDBFMSAtPiAgMEUrMQotZHFteGcwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyCi1kcW14ZzA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzEKLWRxbXhnMDU1IG1heG1hZyAgIDBFMiAgLTBFMiAtPiAgMEUrMgotZHFteGcwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyCi1kcW14ZzA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzEKLQotZHFteGcwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxCi1kcW14ZzA1OSBtYXhtYWcgICAwRTIgICAwRTIgLT4gIDBFKzIKLWRxbXhnMDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMgotZHFteGcwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyCi1kcW14ZzA2MiBtYXhtYWcgIC0wRTEgIC0wRTEgLT4gLTBFKzEKLWRxbXhnMDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMgotZHFteGcwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxCi1kcW14ZzA2NSBtYXhtYWcgIC0wRTEgIC0wRTIgLT4gLTBFKzEKLQotLS0gU3BlY2lhbHMKLWRxbXhnMDkwIG1heG1hZyAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5Ci1kcW14ZzA5MSBtYXhtYWcgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQotZHFteGcwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLWRxbXhnMDkzIG1heG1hZyAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kcW14ZzA5NCBtYXhtYWcgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQotZHFteGcwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKLWRxbXhnMDk2IG1heG1hZyAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kcW14ZzA5NyBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFteGcwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbXhnMDk5IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW14ZzEwMCBtYXhtYWcgLTEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFteGcxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbXhnMTAyIG1heG1hZyAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW14ZzEwMyBtYXhtYWcgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFteGcxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWRxbXhnMTA1IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRxbXhnMTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW14ZzEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQotZHFteGcxMjIgbWF4bWFnIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRxbXhnMTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1kcW14ZzEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZHFteGcxMjUgbWF4bWFnIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRxbXhnMTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1kcW14ZzEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFteGcxMjggbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAgLUluZmluaXR5Ci1kcW14ZzEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFteGcxMzAgbWF4bWFnIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXhnMTMxIG1heG1hZyAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW14ZzEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFteGcxMzMgbWF4bWFnICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXhnMTM0IG1heG1hZyAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW14ZzEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKLWRxbXhnMTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5Ci1kcW14ZzE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwCi1kcW14ZzE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xCi1kcW14ZzE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wCi1kcW14ZzE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwCi1kcW14ZzE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1kcW14ZzE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCi1kcW14ZzE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQotZHFteGcxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kcW14ZzE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQotZHFteGcxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAotZHFteGcxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQotZHFteGcxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMAotZHFteGcxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMAotZHFteGcxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQotZHFteGcxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAotZHFteGcxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKLQotZHFteGcxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjIgbWF4bWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjMgbWF4bWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjUgbWF4bWFnICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjYgbWF4bWFnICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjggbWF4bWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNjkgbWF4bWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzEgbWF4bWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzIgbWF4bWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzQgbWF4bWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzUgbWF4bWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzcgbWF4bWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzggbWF4bWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcW14ZzE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXhnMTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5Ci1kcW14ZzE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZHFteGcxODQgbWF4bWFnIC1OYU4xICAgTmFOMTEgLT4gLU5hTjEKLWRxbXhnMTg1IG1heG1hZyAgTmFOMiAgIE5hTjEyIC0+ICBOYU4yCi1kcW14ZzE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKLWRxbXhnMTg3IG1heG1hZyAgTmFOMTQgLU5hTjUgIC0+ICBOYU4xNAotCi1kcW14ZzE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkKLWRxbXhnMTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05Ci1kcW14ZzE5MCBtYXhtYWcgIEluZiAgICBOYU4yICAtPiAgSW5maW5pdHkKLQotZHFteGcxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxbXhnMTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcW14ZzE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24KLWRxbXhnMTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcW14ZzE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZHFteGcxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxbXhnMTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcW14ZzE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzCi1kcW14ZzIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKLWRxbXhnMjIyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMAotZHFteGcyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDAKLWRxbXhnMjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCi1kcW14ZzIyNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MAotZHFteGcyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTAKLWRxbXhnMjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCi1kcW14ZzIyOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQotZHFteGcyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxCi1kcW14ZzIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKLWRxbXhnMjMxIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2Ci1kcW14ZzIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5NgotZHFteGcyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxCi1kcW14ZzIzNCBtYXhtYWcgMSAtMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTEKLWRxbXhnMjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDEKLWRxbXhnMjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDEKLWRxbXhnMjM3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMTIzNDU2Nzg5NgotZHFteGcyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2Ci0KLS0tIGZyb20gZXhhbXBsZXMKLWRxbXhnMjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycKLWRxbXhnMjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJwotZHFteGcyODIgbWF4bWFnICcxLjAnICcxJyAgLT4gICcxJwotZHFteGcyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJwotZHFteGcyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3JwotCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KLWRxbXhnNDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5Ci1kcW14ZzQwMiBtYXhtYWcgIDEuMSAgICAxICAgICAgIC0+ICAxLjEKLWRxbXhnNDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEKLWRxbXhnNDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAotZHFteGc0MDUgbWF4bWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xCi1kcW14ZzQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwCi1kcW14ZzQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCi1kcW14ZzQwOCBtYXhtYWcgIDAgICAgICAwLjAgICAgIC0+ICAwCi1kcW14ZzQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjAKLWRxbXhnNDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAotZHFteGc0MTEgbWF4bWFnICAwLjAwICAtMC4wICAgICAtPiAgMC4wMAotZHFteGc0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wCi1kcW14ZzQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwCi1kcW14ZzQxNCBtYXhtYWcgIDAgICAgIC0wICAgICAgIC0+ICAwCi1kcW14ZzQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjAKLWRxbXhnNDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCi1kcW14ZzQxNyBtYXhtYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwMAotZHFteGc0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMAotZHFteGc0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCi1kcW14ZzQyMCBtYXhtYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xLjAKLWRxbXhnNDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQotZHFteGc0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAotZHFteGc0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkKLWRxbXhnNDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQotZHFteGc0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQotZHFteGc0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wCi1kcW14ZzQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEKLWRxbXhnNDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKLWRxbXhnNDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTAKLWRxbXhnNDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAKLWRxbXhnNDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAotZHFteGc0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wCi1kcW14ZzQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwCi1kcW14ZzQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKLWRxbXhnNDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDAKLWRxbXhnNDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDAKLWRxbXhnNDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAotZHFteGc0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDAKLWRxbXhnNDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwCi1kcW14ZzQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCi1kcW14ZzQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjAKLWRxbXhnNDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMAotZHFteGc0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCi1kcW14ZzQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQotLS0gbGFyZ2llcwotZHFteGc0NjAgbWF4bWFnICAxMDAwICAgMUUrMyAgICAtPiAgMUUrMwotZHFteGc0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMwotZHFteGc0NjIgbWF4bWFnICAxMDAwICAtMUUrMyAgICAtPiAgMTAwMAotZHFteGc0NjMgbWF4bWFnICAxRSszICAtMTAwMCAgICAtPiAgMUUrMwotZHFteGc0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMwotZHFteGc0NjUgbWF4bWFnIC0xRSszICAgMTAwMCAgICAtPiAgMTAwMAotZHFteGc0NjYgbWF4bWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMTAwMAotZHFteGc0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAotCi0tLSBzdWJub3JtYWxzCi1kcW14ZzUxMCBtYXhtYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAxLjAwRS02MTQzCi1kcW14ZzUxMSBtYXhtYWcgIDAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAxRS02MTQ0ICAgIFN1Ym5vcm1hbAotZHFteGc1MTIgbWF4bWFnICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMS4wRS02MTQ0ICBTdWJub3JtYWwKLWRxbXhnNTEzIG1heG1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDEuMDBFLTYxNDQgU3Vibm9ybWFsCi1kcW14ZzUxNCBtYXhtYWcgIDAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAxRS02MTQ1ICAgIFN1Ym5vcm1hbAotZHFteGc1MTUgbWF4bWFnICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgOS45OUUtNjE0NCBTdWJub3JtYWwKLWRxbXhnNTE2IG1heG1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDkuOUUtNjE0NSAgU3Vibm9ybWFsCi1kcW14ZzUxNyBtYXhtYWcgIDAuMDA5RS02MTQzICAgICAgMCAgLT4gICA5RS02MTQ2ICAgIFN1Ym5vcm1hbAotZHFteGc1MTggbWF4bWFnICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMUUtNjE0NiAgICBTdWJub3JtYWwKLWRxbXhnNTE5IG1heG1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDlFLTYxNDcgICAgU3Vibm9ybWFsCi1kcW14ZzUyMCBtYXhtYWcgIDAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAxRS02MTQ3ICAgIFN1Ym5vcm1hbAotCi1kcW14ZzUzMCBtYXhtYWcgLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzCi1kcW14ZzUzMSBtYXhtYWcgLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbAotZHFteGc1MzIgbWF4bWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKLWRxbXhnNTMzIG1heG1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsCi1kcW14ZzUzNCBtYXhtYWcgLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAotZHFteGc1MzUgbWF4bWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45OUUtNjE0NCBTdWJub3JtYWwKLWRxbXhnNTM2IG1heG1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsCi1kcW14ZzUzNyBtYXhtYWcgLTAuMDA5RS02MTQzICAgICAgMCAgLT4gIC05RS02MTQ2ICAgIFN1Ym5vcm1hbAotZHFteGc1MzggbWF4bWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAtMUUtNjE0NiAgICBTdWJub3JtYWwKLWRxbXhnNTM5IG1heG1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsCi1kcW14ZzU0MCBtYXhtYWcgLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gIC0xRS02MTQ3ICAgIFN1Ym5vcm1hbAotCi0tLSBOdWxsIHRlc3RzCi1kcW14ZzkwMCBtYXhtYWcgMTAgICMgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFteGc5MDEgbWF4bWFnICAjIDEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFNYXhNYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1heG51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbw0KKy0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZHFteGcwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yDQorZHFteGcwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yDQorZHFteGcwMDMgbWF4bWFnICAtMiAgIDAgIC0+IC0yDQorZHFteGcwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yDQorZHFteGcwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyDQorZHFteGcwMDYgbWF4bWFnICAtMSAgLTIgIC0+IC0yDQorZHFteGcwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xDQorZHFteGcwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xDQorZHFteGcwMDkgbWF4bWFnICAtMSAgIDEgIC0+ICAxDQorZHFteGcwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyDQorZHFteGcwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yDQorZHFteGcwMTIgbWF4bWFnICAgMCAgLTEgIC0+IC0xDQorZHFteGcwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwDQorZHFteGcwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxDQorZHFteGcwMTUgbWF4bWFnICAgMCAgIDIgIC0+ICAyDQorZHFteGcwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yDQorZHFteGcwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxDQorZHFteGcwMTggbWF4bWFnICAgMSAgIDAgIC0+ICAxDQorZHFteGcwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxDQorZHFteGcwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyDQorZHFteGcwMjEgbWF4bWFnICAgMiAgLTIgIC0+ICAyDQorZHFteGcwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyDQorZHFteGcwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyDQorZHFteGcwMjUgbWF4bWFnICAgMiAgIDEgIC0+ICAyDQorZHFteGcwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitkcW14ZzAzMCBtYXhtYWcgICAwICAgICAwICAgLT4gIDANCitkcW14ZzAzMSBtYXhtYWcgICAwICAgIC0wICAgLT4gIDANCitkcW14ZzAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDANCitkcW14ZzAzMyBtYXhtYWcgICAwICAgICAwLjAgLT4gIDANCitkcW14ZzAzNCBtYXhtYWcgIC0wICAgICAwICAgLT4gIDAgICAgLS0gbm90ZTogLTAgPSAwLCBidXQgMCBjaG9zZW4NCitkcW14ZzAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTANCitkcW14ZzAzNiBtYXhtYWcgIC0wICAgIC0wLjAgLT4gLTAuMA0KK2RxbXhnMDM3IG1heG1hZyAgLTAgICAgIDAuMCAtPiAgMC4wDQorZHFteGcwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwDQorZHFteGcwMzkgbWF4bWFnICAgMC4wICAtMCAgIC0+ICAwLjANCitkcW14ZzA0MCBtYXhtYWcgICAwLjAgIC0wLjAgLT4gIDAuMA0KK2RxbXhnMDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQorZHFteGcwNDIgbWF4bWFnICAtMC4wICAgMCAgIC0+ICAwDQorZHFteGcwNDMgbWF4bWFnICAtMC4wICAtMCAgIC0+IC0wLjANCitkcW14ZzA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KK2RxbXhnMDQ1IG1heG1hZyAgLTAuMCAgIDAuMCAtPiAgMC4wDQorDQorZHFteGcwNTAgbWF4bWFnICAtMEUxICAgMEUxIC0+ICAwRSsxDQorZHFteGcwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyDQorZHFteGcwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxDQorZHFteGcwNTMgbWF4bWFnICAtMEUxICAgMEUyIC0+ICAwRSsyDQorZHFteGcwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxDQorZHFteGcwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyDQorZHFteGcwNTYgbWF4bWFnICAgMEUyICAtMEUxIC0+ICAwRSsyDQorZHFteGcwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxDQorDQorZHFteGcwNTggbWF4bWFnICAgMEUxICAgMEUxIC0+ICAwRSsxDQorZHFteGcwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyDQorZHFteGcwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyDQorZHFteGcwNjEgbWF4bWFnICAgMEUxICAgMEUyIC0+ICAwRSsyDQorZHFteGcwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxDQorZHFteGcwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyDQorZHFteGcwNjQgbWF4bWFnICAtMEUyICAtMEUxIC0+IC0wRSsxDQorZHFteGcwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxDQorDQorLS0gU3BlY2lhbHMNCitkcW14ZzA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnMDkxIG1heG1hZyAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZHFteGcwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitkcW14ZzA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnMDk0IG1heG1hZyAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQorZHFteGcwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkcW14ZzA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnMDk3IG1heG1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFteGcwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW14ZzA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnMTAwIG1heG1hZyAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFteGcxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW14ZzEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnMTAzIG1heG1hZyAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFteGcxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW14ZzEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbXhnMTIwIG1heG1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFteGcxMjEgbWF4bWFnIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCitkcW14ZzEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2RxbXhnMTIzIG1heG1hZyAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQorZHFteGcxMjQgbWF4bWFnIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCitkcW14ZzEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2RxbXhnMTI2IG1heG1hZyAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQorZHFteGcxMjcgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW14ZzEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+ICAtSW5maW5pdHkNCitkcW14ZzEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbXhnMTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFteGcxMzEgbWF4bWFnIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW14ZzEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbXhnMTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFteGcxMzQgbWF4bWFnICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW14ZzEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KKw0KKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KK2RxbXhnMTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQorZHFteGcxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMA0KK2RxbXhnMTQzIG1heG1hZyAgTmFOIC0xICAgICAgLT4gLTENCitkcW14ZzE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wDQorZHFteGcxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMA0KK2RxbXhnMTQ2IG1heG1hZyAgTmFOICAxICAgICAgLT4gIDENCitkcW14ZzE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQorZHFteGcxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCitkcW14ZzE0OSBtYXhtYWcgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitkcW14ZzE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KK2RxbXhnMTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCitkcW14ZzE1MiBtYXhtYWcgLTEgICAgTmFOICAgIC0+IC0xDQorZHFteGcxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMA0KK2RxbXhnMTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDANCitkcW14ZzE1NSBtYXhtYWcgIDEgICAgTmFOICAgIC0+ICAxDQorZHFteGcxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KK2RxbXhnMTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQorDQorZHFteGcxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE2MyBtYXhtYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE2NiBtYXhtYWcgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE2OSBtYXhtYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE3MiBtYXhtYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE3NSBtYXhtYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE3OCBtYXhtYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcW14ZzE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW14ZzE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQ0KK2RxbXhnMTgzIG1heG1hZyAtTmFONyAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbXhnMTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQorZHFteGcxODUgbWF4bWFnICBOYU4yICAgTmFOMTIgLT4gIE5hTjINCitkcW14ZzE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMNCitkcW14ZzE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCisNCitkcW14ZzE4OCBtYXhtYWcgLUluZiAgICBOYU40ICAtPiAtSW5maW5pdHkNCitkcW14ZzE4OSBtYXhtYWcgLTkgICAgIC1OYU4zICAtPiAtOQ0KK2RxbXhnMTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbXhnMTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxOTIgbWF4bWFnICBzTmFOOTggLTEgICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxOTUgbWF4bWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXhnMTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZHFteGcxOTggbWF4bWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG9sZCByb3VuZGluZyBjaGVja3MNCitkcW14ZzIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCitkcW14ZzIyMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMTIzNDU2NzgwMDANCitkcW14ZzIyMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMTIzNDU2NzgwMA0KK2RxbXhnMjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQorZHFteGcyMjUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEyMzQ1Njc4OTANCitkcW14ZzIyNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMTIzNDU2Nzg5MA0KK2RxbXhnMjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQorZHFteGcyMjggbWF4bWFnIDEgMTIzNDU2Nzg5MSAgIC0+IDEyMzQ1Njc4OTENCitkcW14ZzIyOSBtYXhtYWcgMTIzNDU2Nzg5MDEgMSAgLT4gMTIzNDU2Nzg5MDENCitkcW14ZzIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCitkcW14ZzIzMSBtYXhtYWcgMTIzNDU2Nzg5NiAgMSAgLT4gMTIzNDU2Nzg5Ng0KK2RxbXhnMjMyIG1heG1hZyAxIDEyMzQ1Njc4OTYgICAtPiAxMjM0NTY3ODk2DQorZHFteGcyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxDQorZHFteGcyMzQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xMjM0NTY3ODkxDQorZHFteGcyMzUgbWF4bWFnIC0xMjM0NTY3ODkwMSAxIC0+IC0xMjM0NTY3ODkwMQ0KK2RxbXhnMjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDENCitkcW14ZzIzNyBtYXhtYWcgLTEyMzQ1Njc4OTYgIDEgLT4gLTEyMzQ1Njc4OTYNCitkcW14ZzIzOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEyMzQ1Njc4OTYNCisNCistLSBmcm9tIGV4YW1wbGVzDQorZHFteGcyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJw0KK2RxbXhnMjgxIG1heG1hZyAnLTEwJyAnMycgIC0+ICAnLTEwJw0KK2RxbXhnMjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScNCitkcW14ZzI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnDQorZHFteGcyODQgbWF4bWFnICc3JyAnTmFOJyAgLT4gICc3Jw0KKw0KKy0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlDQorLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10NCitkcW14ZzQwMSBtYXhtYWcgIEluZiAgICAxLjEgICAgIC0+ICBJbmZpbml0eQ0KK2RxbXhnNDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KK2RxbXhnNDAzIG1heG1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDENCitkcW14ZzQwNCBtYXhtYWcgIDEuMCAgICAwLjEgICAgIC0+ICAxLjANCitkcW14ZzQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCitkcW14ZzQwNiBtYXhtYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwDQorZHFteGc0MDcgbWF4bWFnICAwLjEwICAgMCAgICAgICAtPiAgMC4xMA0KK2RxbXhnNDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDANCitkcW14ZzQwOSBtYXhtYWcgIDAuMCAgIC0wICAgICAgIC0+ICAwLjANCitkcW14ZzQxMCBtYXhtYWcgIDAuMCAgIC0wLjAgICAgIC0+ICAwLjANCitkcW14ZzQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQorZHFteGc0MTIgbWF4bWFnICAwLjAgICAtMC4wMCAgICAtPiAgMC4wDQorZHFteGc0MTMgbWF4bWFnICAwICAgICAtMC4wICAgICAtPiAgMA0KK2RxbXhnNDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDANCitkcW14ZzQxNSBtYXhtYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wLjANCitkcW14ZzQxNiBtYXhtYWcgLTAgICAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KK2RxbXhnNDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQorZHFteGc0MTggbWF4bWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xMA0KK2RxbXhnNDE5IG1heG1hZyAtMC4xICAgLTEuMCAgICAgLT4gLTEuMA0KK2RxbXhnNDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KK2RxbXhnNDIxIG1heG1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KK2RxbXhnNDIzIG1heG1hZyAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQorZHFteGc0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCitkcW14ZzQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjENCitkcW14ZzQzMyBtYXhtYWcgIDEuMCAgICAxICAgICAgIC0+ICAxDQorZHFteGc0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQorZHFteGc0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xDQorZHFteGc0MzYgbWF4bWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMA0KK2RxbXhnNDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCitkcW14ZzQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwDQorZHFteGc0MzkgbWF4bWFnIC0wICAgICAgMC4wICAgICAtPiAgMC4wDQorZHFteGc0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQorZHFteGc0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMA0KK2RxbXhnNDQyIG1heG1hZyAtMC4wMCAgIDAuMCAgICAgLT4gIDAuMA0KK2RxbXhnNDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDANCitkcW14ZzQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwDQorZHFteGc0NDUgbWF4bWFnIC0wICAgICAtMC4wICAgICAtPiAtMC4wDQorZHFteGc0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCitkcW14ZzQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMA0KK2RxbXhnNDQ4IG1heG1hZyAtMC4xICAgLTAuMTAgICAgLT4gLTAuMTANCitkcW14ZzQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCitkcW14ZzQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjANCitkcW14ZzQ1MSBtYXhtYWcgLTEuMSAgIC0xICAgICAgIC0+IC0xLjENCitkcW14ZzQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KKy0tIGxhcmdpZXMNCitkcW14ZzQ2MCBtYXhtYWcgIDEwMDAgICAxRSszICAgIC0+ICAxRSszDQorZHFteGc0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMw0KK2RxbXhnNDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCitkcW14ZzQ2MyBtYXhtYWcgIDFFKzMgIC0xMDAwICAgIC0+ICAxRSszDQorZHFteGc0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMw0KK2RxbXhnNDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitkcW14ZzQ2NiBtYXhtYWcgLTEwMDAgIC0xRSszICAgIC0+IC0xMDAwDQorZHFteGc0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMA0KKw0KKy0tIHN1Ym5vcm1hbHMNCitkcW14ZzUxMCBtYXhtYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAxLjAwRS02MTQzDQorZHFteGc1MTEgbWF4bWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMUUtNjE0NCAgICBTdWJub3JtYWwNCitkcW14ZzUxMiBtYXhtYWcgIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAxLjBFLTYxNDQgIFN1Ym5vcm1hbA0KK2RxbXhnNTEzIG1heG1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDEuMDBFLTYxNDQgU3Vibm9ybWFsDQorZHFteGc1MTQgbWF4bWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMUUtNjE0NSAgICBTdWJub3JtYWwNCitkcW14ZzUxNSBtYXhtYWcgIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICA5Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KK2RxbXhnNTE2IG1heG1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDkuOUUtNjE0NSAgU3Vibm9ybWFsDQorZHFteGc1MTcgbWF4bWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgOUUtNjE0NiAgICBTdWJub3JtYWwNCitkcW14ZzUxOCBtYXhtYWcgIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAxRS02MTQ2ICAgIFN1Ym5vcm1hbA0KK2RxbXhnNTE5IG1heG1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDlFLTYxNDcgICAgU3Vibm9ybWFsDQorZHFteGc1MjAgbWF4bWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMUUtNjE0NyAgICBTdWJub3JtYWwNCisNCitkcW14ZzUzMCBtYXhtYWcgLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzDQorZHFteGc1MzEgbWF4bWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCitkcW14ZzUzMiBtYXhtYWcgLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KK2RxbXhnNTMzIG1heG1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsDQorZHFteGc1MzQgbWF4bWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwNCitkcW14ZzUzNSBtYXhtYWcgLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KK2RxbXhnNTM2IG1heG1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsDQorZHFteGc1MzcgbWF4bWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwNCitkcW14ZzUzOCBtYXhtYWcgLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbA0KK2RxbXhnNTM5IG1heG1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsDQorZHFteGc1NDAgbWF4bWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwNCisNCistLSBOdWxsIHRlc3RzDQorZHFteGc5MDAgbWF4bWFnIDEwICAjICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW14ZzkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKaW5kZXggYzg3ZjRjNS4uNTMwMjAzOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWluLmRlY1Rlc3QKQEAgLTEsMzA5ICsxLDMwOSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcU1pbi5kZWNUZXN0IC0tIGRlY1F1YWQgbWlubnVtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIHdlIGFzc3VtZSB0aGF0IGJhc2UgY29tcGFyaXNvbiBpcyB0ZXN0ZWQgaW4gY29tcGFyZS5kZWNUZXN0LCBzbwotLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kcW1pbjAwMSBtaW4gIC0yICAtMiAgLT4gLTIKLWRxbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMgotZHFtaW4wMDMgbWluICAtMiAgIDAgIC0+IC0yCi1kcW1pbjAwNCBtaW4gIC0yICAgMSAgLT4gLTIKLWRxbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMgotZHFtaW4wMDYgbWluICAtMSAgLTIgIC0+IC0yCi1kcW1pbjAwNyBtaW4gIC0xICAtMSAgLT4gLTEKLWRxbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQotZHFtaW4wMDkgbWluICAtMSAgIDEgIC0+IC0xCi1kcW1pbjAxMCBtaW4gIC0xICAgMiAgLT4gLTEKLWRxbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMgotZHFtaW4wMTIgbWluICAgMCAgLTEgIC0+IC0xCi1kcW1pbjAxMyBtaW4gICAwICAgMCAgLT4gIDAKLWRxbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMAotZHFtaW4wMTUgbWluICAgMCAgIDIgIC0+ICAwCi1kcW1pbjAxNiBtaW4gICAxICAtMiAgLT4gLTIKLWRxbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQotZHFtaW4wMTggbWluICAgMSAgIDAgIC0+ICAwCi1kcW1pbjAxOSBtaW4gICAxICAgMSAgLT4gIDEKLWRxbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQotZHFtaW4wMjEgbWluICAgMiAgLTIgIC0+IC0yCi1kcW1pbjAyMiBtaW4gICAyICAtMSAgLT4gLTEKLWRxbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMAotZHFtaW4wMjUgbWluICAgMiAgIDEgIC0+ICAxCi1kcW1pbjAyNiBtaW4gICAyICAgMiAgLT4gIDIKLQotLS0gZXh0ZW5kZWQgemVyb3MKLWRxbWluMDMwIG1pbiAgIDAgICAgIDAgICAtPiAgMAotZHFtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wCi1kcW1pbjAzMiBtaW4gICAwICAgIC0wLjAgLT4gLTAuMAotZHFtaW4wMzMgbWluICAgMCAgICAgMC4wIC0+ICAwLjAKLWRxbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMAotZHFtaW4wMzUgbWluICAtMCAgICAtMCAgIC0+IC0wCi1kcW1pbjAzNiBtaW4gIC0wICAgIC0wLjAgLT4gLTAKLWRxbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMAotZHFtaW4wMzggbWluICAgMC4wICAgMCAgIC0+ICAwLjAKLWRxbWluMDM5IG1pbiAgIDAuMCAgLTAgICAtPiAtMAotZHFtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjAKLWRxbWluMDQxIG1pbiAgIDAuMCAgIDAuMCAtPiAgMC4wCi1kcW1pbjA0MiBtaW4gIC0wLjAgICAwICAgLT4gLTAuMAotZHFtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wCi1kcW1pbjA0NCBtaW4gIC0wLjAgIC0wLjAgLT4gLTAuMAotZHFtaW4wNDUgbWluICAtMC4wICAgMC4wIC0+IC0wLjAKLQotZHFtaW4wNDYgbWluICAgMEUxICAtMEUxIC0+IC0wRSsxCi1kcW1pbjA0NyBtaW4gIC0wRTEgICAwRTIgLT4gLTBFKzEKLWRxbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQotZHFtaW4wNDkgbWluICAgMEUxICAgMEUyIC0+ICAwRSsxCi1kcW1pbjA1MCBtaW4gIC0wRTMgIC0wRTIgLT4gLTBFKzMKLWRxbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMwotCi0tLSBTcGVjaWFscwotZHFtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbWluMDkxIG1pbiAgSW5mICAtMTAwMCAgLT4gLTEwMDAKLWRxbWluMDkyIG1pbiAgSW5mICAtMSAgICAgLT4gLTEKLWRxbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTAKLWRxbWluMDk0IG1pbiAgSW5mICAgMCAgICAgLT4gIDAKLWRxbWluMDk1IG1pbiAgSW5mICAgMSAgICAgLT4gIDEKLWRxbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDAKLWRxbWluMDk3IG1pbiAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW1pbjA5OCBtaW4gLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1kcW1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQotZHFtaW4xMDAgbWluIC0xICAgICBJbmYgICAtPiAtMQotZHFtaW4xMDEgbWluIC0wICAgICBJbmYgICAtPiAtMAotZHFtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMAotZHFtaW4xMDMgbWluICAxICAgICBJbmYgICAtPiAgMQotZHFtaW4xMDQgbWluICAxMDAwICBJbmYgICAtPiAgMTAwMAotZHFtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZHFtaW4xMjAgbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1kcW1pbjEyMiBtaW4gLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZHFtaW4xMjMgbWluIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRxbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1kcW1pbjEyNSBtaW4gLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFtaW4xMjYgbWluIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRxbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kcW1pbjEyOCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFtaW4xMjkgbWluIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1pbjEzMSBtaW4gLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFtaW4xMzIgbWluICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1pbjEzNCBtaW4gIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFtaW4xMzUgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLQotLS0gMjAwNC4wOC4wMiA3NTRyIGNob29zZXMgbnVtYmVyIG92ZXIgTmFOIGluIG1peGVkIGNhc2VzCi1kcW1pbjE0MSBtaW4gIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKLWRxbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwCi1kcW1pbjE0MyBtaW4gIE5hTiAtMSAgICAgIC0+ICAtMQotZHFtaW4xNDQgbWluICBOYU4gLTAgICAgICAtPiAgLTAKLWRxbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDAKLWRxbWluMTQ2IG1pbiAgTmFOICAxICAgICAgLT4gIDEKLWRxbWluMTQ3IG1pbiAgTmFOICAxMDAwICAgLT4gIDEwMDAKLWRxbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5Ci1kcW1pbjE0OSBtaW4gIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRxbWluMTUwIG1pbiAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5Ci1kcW1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwCi1kcW1pbjE1MiBtaW4gLTEgICAtTmFOICAgIC0+IC0xCi1kcW1pbjE1MyBtaW4gLTAgICAgTmFOICAgIC0+IC0wCi1kcW1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwCi1kcW1pbjE1NSBtaW4gIDEgICAgTmFOICAgIC0+ICAxCi1kcW1pbjE1NiBtaW4gIDEwMDAgTmFOICAgIC0+ICAxMDAwCi1kcW1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQotCi1kcW1pbjE2MSBtaW4gIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2MyBtaW4gIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2NCBtaW4gIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2NiBtaW4gLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2NyBtaW4gIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE2OSBtaW4gIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3MCBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3MiBtaW4gLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3MyBtaW4gLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3NSBtaW4gIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3NiBtaW4gIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3OCBtaW4gIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE3OSBtaW4gIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRxbWluMTgxIG1pbiAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MAotZHFtaW4xODMgbWluICBOYU43MSAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kcW1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKLWRxbWluMTg1IG1pbiAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjIKLWRxbWluMTg2IG1pbiAtTmFOMyAgICBOYU42ICAtPiAtTmFOMwotZHFtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAotCi1kcW1pbjE4OCBtaW4gLUluZiAgICAgTmFONDEgLT4gLUluZmluaXR5Ci1kcW1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkKLWRxbWluMTkwIG1pbiAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKLQotZHFtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxbWluMTkyIG1pbiAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE5MyBtaW4gLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZHFtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24KLWRxbWluMTk1IG1pbiAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE5NiBtaW4gLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZHFtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxbWluMTk4IG1pbiAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcW1pbjE5OSBtaW4gIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBvbGQgcm91bmRpbmcgY2hlY2tzCi1kcW1pbjIyMSBtaW4gLTEyMzQ1Njc4MDAwIDEgIC0+IC0xMjM0NTY3ODAwMAotZHFtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDAKLWRxbWluMjIzIG1pbiAtMTIzNDU2NzgwMCAgMSAgLT4gLTEyMzQ1Njc4MDAKLWRxbWluMjI0IG1pbiAxIC0xMjM0NTY3ODAwICAgLT4gLTEyMzQ1Njc4MDAKLWRxbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTAKLWRxbWluMjI2IG1pbiAxIC0xMjM0NTY3ODkwICAgLT4gLTEyMzQ1Njc4OTAKLWRxbWluMjI3IG1pbiAtMTIzNDU2Nzg5MSAgMSAgLT4gLTEyMzQ1Njc4OTEKLWRxbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTEKLWRxbWluMjI5IG1pbiAtMTIzNDU2Nzg5MDEgMSAgLT4gLTEyMzQ1Njc4OTAxCi1kcW1pbjIzMCBtaW4gMSAtMTIzNDU2Nzg5MDEgIC0+IC0xMjM0NTY3ODkwMQotZHFtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5NgotZHFtaW4yMzIgbWluIDEgLTEyMzQ1Njc4OTYgICAtPiAtMTIzNDU2Nzg5NgotZHFtaW4yMzMgbWluIDEyMzQ1Njc4OTEgIDEgICAtPiAxCi1kcW1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDEKLWRxbWluMjM1IG1pbiAxMjM0NTY3ODkwMSAxICAgLT4gMQotZHFtaW4yMzYgbWluIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kcW1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDEKLWRxbWluMjM4IG1pbiAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi0tLSBmcm9tIGV4YW1wbGVzCi1kcW1pbjI4MCBtaW4gJzMnICAgJzInICAtPiAgJzInCi1kcW1pbjI4MSBtaW4gJy0xMCcgJzMnICAtPiAgJy0xMCcKLWRxbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJwotZHFtaW4yODMgbWluICcxJyAnMS4wJyAgLT4gICcxLjAnCi1kcW1pbjI4NCBtaW4gJzcnICdOYU4nICAtPiAgJzcnCi0KLS0tIGV4cGFuZGVkIGxpc3QgZnJvbSBtaW4vbWF4IDc1NHIgcHVycGxlIHByb3NlCi0tLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQotZHFtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xCi1kcW1pbjQwMiBtaW4gIDEuMSAgICAxICAgICAgIC0+ICAxCi1kcW1pbjQwMyBtaW4gIDEgICAgICAxLjAgICAgIC0+ICAxLjAKLWRxbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQotZHFtaW40MDUgbWluICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMAotZHFtaW40MDYgbWluICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDAKLWRxbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDAKLWRxbWluNDA4IG1pbiAgMCAgICAgIDAuMCAgICAgLT4gIDAuMAotZHFtaW40MDkgbWluICAwLjAgICAtMCAgICAgICAtPiAtMAotZHFtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wCi1kcW1pbjQxMSBtaW4gIDAuMDAgIC0wLjAgICAgIC0+IC0wLjAKLWRxbWluNDEyIG1pbiAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDAKLWRxbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAotZHFtaW40MTQgbWluICAwICAgICAtMCAgICAgICAtPiAtMAotZHFtaW40MTUgbWluIC0wLjAgICAtMCAgICAgICAtPiAtMAotZHFtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDAKLWRxbWluNDE3IG1pbiAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKLWRxbWluNDE4IG1pbiAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQotZHFtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCi1kcW1pbjQyMCBtaW4gLTEuMCAgIC0xICAgICAgIC0+IC0xCi1kcW1pbjQyMSBtaW4gLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKLWRxbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5Ci0tLSBzYW1lIHdpdGggb3BlcmFuZHMgcmV2ZXJzZWQKLWRxbWluNDMxIG1pbiAgMS4xICAgIEluZiAgICAgLT4gIDEuMQotZHFtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQotZHFtaW40MzMgbWluICAxLjAgICAgMSAgICAgICAtPiAgMS4wCi1kcW1pbjQzNCBtaW4gIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKLWRxbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTAKLWRxbWluNDM2IG1pbiAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAwCi1kcW1pbjQzNyBtaW4gIDAgICAgICAwLjEwICAgIC0+ICAwCi1kcW1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjAKLWRxbWluNDM5IG1pbiAtMCAgICAgIDAuMCAgICAgLT4gLTAKLWRxbWluNDQwIG1pbiAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAotZHFtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wCi1kcW1pbjQ0MiBtaW4gLTAuMDAgICAwLjAgICAgIC0+IC0wLjAwCi1kcW1pbjQ0MyBtaW4gLTAuMCAgICAwICAgICAgIC0+IC0wLjAKLWRxbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTAKLWRxbWluNDQ1IG1pbiAtMCAgICAgLTAuMCAgICAgLT4gLTAKLWRxbWluNDQ2IG1pbiAtMC4xMDAgLTAgICAgICAgLT4gLTAuMTAwCi1kcW1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwCi1kcW1pbjQ0OCBtaW4gLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKLWRxbWluNDQ5IG1pbiAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAotZHFtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQotZHFtaW40NTEgbWluIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCi1kcW1pbjQ1MyBtaW4gLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQotLS0gbGFyZ2llcwotZHFtaW40NjAgbWluICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAotZHFtaW40NjEgbWluICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAotZHFtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMwotZHFtaW40NjMgbWluICAxRSszICAtMzg0ICAgIC0+IC0zODQKLWRxbWluNDY0IG1pbiAtMzg0ICAgMUUrMyAgICAtPiAtMzg0Ci1kcW1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszCi1kcW1pbjQ2NiBtaW4gLTM4NCAgLTFFKzMgICAgLT4gLTFFKzMKLWRxbWluNDY3IG1pbiAtMUUrMyAgLTM4NCAgICAtPiAtMUUrMwotCi0tLSBtaXNhbGlnbm1lbnQgdHJhcHMgZm9yIGxpdHRsZS1lbmRpYW4KLWRxbWluNDcxIG1pbiAgICAgIDEuMCAgICAgICAwLjEgIC0+IDAuMQotZHFtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xCi1kcW1pbjQ3MyBtaW4gICAgIDEwLjAgICAgICAgMC4xICAtPiAwLjEKLWRxbWluNDc0IG1pbiAgICAgIDAuMSAgICAgIDEwLjAgIC0+IDAuMQotZHFtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wCi1kcW1pbjQ3NiBtaW4gICAgICAxLjAgICAgICAgMTAwICAtPiAxLjAKLWRxbWluNDc3IG1pbiAgICAgMTAwMCAgICAgIDEwLjAgIC0+IDEwLjAKLWRxbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjAKLWRxbWluNDc5IG1pbiAgICAxMDAwMCAgICAgMTAwLjAgIC0+IDEwMC4wCi1kcW1pbjQ4MCBtaW4gICAgMTAwLjAgICAgIDEwMDAwICAtPiAxMDAuMAotZHFtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wCi1kcW1pbjQ4MiBtaW4gICAxMDAwLjAgICAgMTAwMDAwICAtPiAxMDAwLjAKLWRxbWluNDgzIG1pbiAgMTAwMDAwMCAgIDEwMDAwLjAgIC0+IDEwMDAwLjAKLWRxbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjAKLQotLS0gc3Vibm9ybWFscwotZHFtaW41MTAgbWluICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtaW41MTEgbWluICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAotZHFtaW41MTIgbWluICAwLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtaW41MTMgbWluICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtaW41MTQgbWluICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtaW41MTUgbWluICAwLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtaW41MTYgbWluICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtaW41MTcgbWluICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtaW41MTggbWluICAwLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtaW41MTkgbWluICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAotZHFtaW41MjAgbWluICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAotCi1kcW1pbjUzMCBtaW4gLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzCi1kcW1pbjUzMSBtaW4gLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbAotZHFtaW41MzIgbWluIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKLWRxbWluNTMzIG1pbiAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsCi1kcW1pbjUzNCBtaW4gLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAotZHFtaW41MzUgbWluIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAtOS45OUUtNjE0NCBTdWJub3JtYWwKLWRxbWluNTM2IG1pbiAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsCi1kcW1pbjUzNyBtaW4gLTAuMDA5RS02MTQzICAgICAgMCAgLT4gIC05RS02MTQ2ICAgIFN1Ym5vcm1hbAotZHFtaW41MzggbWluIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAtMUUtNjE0NiAgICBTdWJub3JtYWwKLWRxbWluNTM5IG1pbiAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsCi1kcW1pbjU0MCBtaW4gLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gIC0xRS02MTQ3ICAgIFN1Ym5vcm1hbAotCi0KLS0tIE51bGwgdGVzdHMKLWRxbWluOTAwIG1pbiAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxTWluLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RxbWluMDAxIG1pbiAgLTIgIC0yICAtPiAtMg0KK2RxbWluMDAyIG1pbiAgLTIgIC0xICAtPiAtMg0KK2RxbWluMDAzIG1pbiAgLTIgICAwICAtPiAtMg0KK2RxbWluMDA0IG1pbiAgLTIgICAxICAtPiAtMg0KK2RxbWluMDA1IG1pbiAgLTIgICAyICAtPiAtMg0KK2RxbWluMDA2IG1pbiAgLTEgIC0yICAtPiAtMg0KK2RxbWluMDA3IG1pbiAgLTEgIC0xICAtPiAtMQ0KK2RxbWluMDA4IG1pbiAgLTEgICAwICAtPiAtMQ0KK2RxbWluMDA5IG1pbiAgLTEgICAxICAtPiAtMQ0KK2RxbWluMDEwIG1pbiAgLTEgICAyICAtPiAtMQ0KK2RxbWluMDExIG1pbiAgIDAgIC0yICAtPiAtMg0KK2RxbWluMDEyIG1pbiAgIDAgIC0xICAtPiAtMQ0KK2RxbWluMDEzIG1pbiAgIDAgICAwICAtPiAgMA0KK2RxbWluMDE0IG1pbiAgIDAgICAxICAtPiAgMA0KK2RxbWluMDE1IG1pbiAgIDAgICAyICAtPiAgMA0KK2RxbWluMDE2IG1pbiAgIDEgIC0yICAtPiAtMg0KK2RxbWluMDE3IG1pbiAgIDEgIC0xICAtPiAtMQ0KK2RxbWluMDE4IG1pbiAgIDEgICAwICAtPiAgMA0KK2RxbWluMDE5IG1pbiAgIDEgICAxICAtPiAgMQ0KK2RxbWluMDIwIG1pbiAgIDEgICAyICAtPiAgMQ0KK2RxbWluMDIxIG1pbiAgIDIgIC0yICAtPiAtMg0KK2RxbWluMDIyIG1pbiAgIDIgIC0xICAtPiAtMQ0KK2RxbWluMDIzIG1pbiAgIDIgICAwICAtPiAgMA0KK2RxbWluMDI1IG1pbiAgIDIgICAxICAtPiAgMQ0KK2RxbWluMDI2IG1pbiAgIDIgICAyICAtPiAgMg0KKw0KKy0tIGV4dGVuZGVkIHplcm9zDQorZHFtaW4wMzAgbWluICAgMCAgICAgMCAgIC0+ICAwDQorZHFtaW4wMzEgbWluICAgMCAgICAtMCAgIC0+IC0wDQorZHFtaW4wMzIgbWluICAgMCAgICAtMC4wIC0+IC0wLjANCitkcW1pbjAzMyBtaW4gICAwICAgICAwLjAgLT4gIDAuMA0KK2RxbWluMDM0IG1pbiAgLTAgICAgIDAgICAtPiAtMA0KK2RxbWluMDM1IG1pbiAgLTAgICAgLTAgICAtPiAtMA0KK2RxbWluMDM2IG1pbiAgLTAgICAgLTAuMCAtPiAtMA0KK2RxbWluMDM3IG1pbiAgLTAgICAgIDAuMCAtPiAtMA0KK2RxbWluMDM4IG1pbiAgIDAuMCAgIDAgICAtPiAgMC4wDQorZHFtaW4wMzkgbWluICAgMC4wICAtMCAgIC0+IC0wDQorZHFtaW4wNDAgbWluICAgMC4wICAtMC4wIC0+IC0wLjANCitkcW1pbjA0MSBtaW4gICAwLjAgICAwLjAgLT4gIDAuMA0KK2RxbWluMDQyIG1pbiAgLTAuMCAgIDAgICAtPiAtMC4wDQorZHFtaW4wNDMgbWluICAtMC4wICAtMCAgIC0+IC0wDQorZHFtaW4wNDQgbWluICAtMC4wICAtMC4wIC0+IC0wLjANCitkcW1pbjA0NSBtaW4gIC0wLjAgICAwLjAgLT4gLTAuMA0KKw0KK2RxbWluMDQ2IG1pbiAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KK2RxbWluMDQ3IG1pbiAgLTBFMSAgIDBFMiAtPiAtMEUrMQ0KK2RxbWluMDQ4IG1pbiAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KK2RxbWluMDQ5IG1pbiAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KK2RxbWluMDUwIG1pbiAgLTBFMyAgLTBFMiAtPiAtMEUrMw0KK2RxbWluMDUxIG1pbiAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KKw0KKy0tIFNwZWNpYWxzDQorZHFtaW4wOTAgbWluICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1pbjA5MSBtaW4gIEluZiAgLTEwMDAgIC0+IC0xMDAwDQorZHFtaW4wOTIgbWluICBJbmYgIC0xICAgICAtPiAtMQ0KK2RxbWluMDkzIG1pbiAgSW5mICAtMCAgICAgLT4gLTANCitkcW1pbjA5NCBtaW4gIEluZiAgIDAgICAgIC0+ICAwDQorZHFtaW4wOTUgbWluICBJbmYgICAxICAgICAtPiAgMQ0KK2RxbWluMDk2IG1pbiAgSW5mICAgMTAwMCAgLT4gIDEwMDANCitkcW1pbjA5NyBtaW4gIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbWluMDk4IG1pbiAtMTAwMCAgSW5mICAgLT4gLTEwMDANCitkcW1pbjA5OSBtaW4gLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTAwIG1pbiAtMSAgICAgSW5mICAgLT4gLTENCitkcW1pbjEwMSBtaW4gLTAgICAgIEluZiAgIC0+IC0wDQorZHFtaW4xMDIgbWluICAwICAgICBJbmYgICAtPiAgMA0KK2RxbWluMTAzIG1pbiAgMSAgICAgSW5mICAgLT4gIDENCitkcW1pbjEwNCBtaW4gIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorZHFtaW4xMDUgbWluICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkcW1pbjEyMCBtaW4gLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTIxIG1pbiAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZHFtaW4xMjIgbWluIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCitkcW1pbjEyMyBtaW4gLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTI0IG1pbiAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZHFtaW4xMjUgbWluIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkcW1pbjEyNiBtaW4gLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTI3IG1pbiAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZHFtaW4xMjggbWluIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1pbjEyOSBtaW4gLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTMwIG1pbiAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFtaW4xMzEgbWluIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1pbjEzMiBtaW4gIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTMzIG1pbiAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFtaW4xMzQgbWluICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1pbjEzNSBtaW4gIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KKw0KKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KK2RxbWluMTQxIG1pbiAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KK2RxbWluMTQyIG1pbiAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQorZHFtaW4xNDMgbWluICBOYU4gLTEgICAgICAtPiAgLTENCitkcW1pbjE0NCBtaW4gIE5hTiAtMCAgICAgIC0+ICAtMA0KK2RxbWluMTQ1IG1pbiAgTmFOICAwICAgICAgLT4gIDANCitkcW1pbjE0NiBtaW4gIE5hTiAgMSAgICAgIC0+ICAxDQorZHFtaW4xNDcgbWluICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KK2RxbWluMTQ4IG1pbiAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQorZHFtaW4xNDkgbWluICBOYU4gIE5hTiAgICAtPiAgTmFODQorZHFtaW4xNTAgbWluIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCitkcW1pbjE1MSBtaW4gLTEwMDAgTmFOICAgIC0+IC0xMDAwDQorZHFtaW4xNTIgbWluIC0xICAgLU5hTiAgICAtPiAtMQ0KK2RxbWluMTUzIG1pbiAtMCAgICBOYU4gICAgLT4gLTANCitkcW1pbjE1NCBtaW4gIDAgICAtTmFOICAgIC0+ICAwDQorZHFtaW4xNTUgbWluICAxICAgIE5hTiAgICAtPiAgMQ0KK2RxbWluMTU2IG1pbiAgMTAwMCBOYU4gICAgLT4gIDEwMDANCitkcW1pbjE1NyBtaW4gIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbWluMTYxIG1pbiAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE2MiBtaW4gIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNjMgbWluICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTY0IG1pbiAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE2NSBtaW4gLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNjYgbWluIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTY3IG1pbiAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE2OCBtaW4gIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNjkgbWluICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTcwIG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE3MSBtaW4gLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNzIgbWluIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTczIG1pbiAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE3NCBtaW4gLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNzUgbWluICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTc2IG1pbiAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE3NyBtaW4gIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xNzggbWluICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTc5IG1pbiAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFtaW4xODEgbWluICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbWluMTgyIG1pbiAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KK2RxbWluMTgzIG1pbiAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkcW1pbjE4NCBtaW4gIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCitkcW1pbjE4NSBtaW4gIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQorZHFtaW4xODYgbWluIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zDQorZHFtaW4xODcgbWluIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KKw0KK2RxbWluMTg4IG1pbiAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCitkcW1pbjE4OSBtaW4gLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkNCitkcW1pbjE5MCBtaW4gIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorZHFtaW4xOTEgbWluICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE5MiBtaW4gIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTkzIG1pbiAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xOTQgbWluICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE5NSBtaW4gIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTk2IG1pbiAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFtaW4xOTcgbWluICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcW1pbjE5OCBtaW4gIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluMTk5IG1pbiAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KK2RxbWluMjIxIG1pbiAtMTIzNDU2NzgwMDAgMSAgLT4gLTEyMzQ1Njc4MDAwDQorZHFtaW4yMjIgbWluIDEgLTEyMzQ1Njc4MDAwICAtPiAtMTIzNDU2NzgwMDANCitkcW1pbjIyMyBtaW4gLTEyMzQ1Njc4MDAgIDEgIC0+IC0xMjM0NTY3ODAwDQorZHFtaW4yMjQgbWluIDEgLTEyMzQ1Njc4MDAgICAtPiAtMTIzNDU2NzgwMA0KK2RxbWluMjI1IG1pbiAtMTIzNDU2Nzg5MCAgMSAgLT4gLTEyMzQ1Njc4OTANCitkcW1pbjIyNiBtaW4gMSAtMTIzNDU2Nzg5MCAgIC0+IC0xMjM0NTY3ODkwDQorZHFtaW4yMjcgbWluIC0xMjM0NTY3ODkxICAxICAtPiAtMTIzNDU2Nzg5MQ0KK2RxbWluMjI4IG1pbiAxIC0xMjM0NTY3ODkxICAgLT4gLTEyMzQ1Njc4OTENCitkcW1pbjIyOSBtaW4gLTEyMzQ1Njc4OTAxIDEgIC0+IC0xMjM0NTY3ODkwMQ0KK2RxbWluMjMwIG1pbiAxIC0xMjM0NTY3ODkwMSAgLT4gLTEyMzQ1Njc4OTAxDQorZHFtaW4yMzEgbWluIC0xMjM0NTY3ODk2ICAxICAtPiAtMTIzNDU2Nzg5Ng0KK2RxbWluMjMyIG1pbiAxIC0xMjM0NTY3ODk2ICAgLT4gLTEyMzQ1Njc4OTYNCitkcW1pbjIzMyBtaW4gMTIzNDU2Nzg5MSAgMSAgIC0+IDENCitkcW1pbjIzNCBtaW4gMSAxMjM0NTY3ODkxICAgIC0+IDENCitkcW1pbjIzNSBtaW4gMTIzNDU2Nzg5MDEgMSAgIC0+IDENCitkcW1pbjIzNiBtaW4gMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkcW1pbjIzNyBtaW4gMTIzNDU2Nzg5NiAgMSAgIC0+IDENCitkcW1pbjIzOCBtaW4gMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCistLSBmcm9tIGV4YW1wbGVzDQorZHFtaW4yODAgbWluICczJyAgICcyJyAgLT4gICcyJw0KK2RxbWluMjgxIG1pbiAnLTEwJyAnMycgIC0+ICAnLTEwJw0KK2RxbWluMjgyIG1pbiAnMS4wJyAnMScgIC0+ICAnMS4wJw0KK2RxbWluMjgzIG1pbiAnMScgJzEuMCcgIC0+ICAnMS4wJw0KK2RxbWluMjg0IG1pbiAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQorZHFtaW40MDEgbWluICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQorZHFtaW40MDIgbWluICAxLjEgICAgMSAgICAgICAtPiAgMQ0KK2RxbWluNDAzIG1pbiAgMSAgICAgIDEuMCAgICAgLT4gIDEuMA0KK2RxbWluNDA0IG1pbiAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KK2RxbWluNDA1IG1pbiAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCitkcW1pbjQwNiBtaW4gIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMA0KK2RxbWluNDA3IG1pbiAgMC4xMCAgIDAgICAgICAgLT4gIDANCitkcW1pbjQwOCBtaW4gIDAgICAgICAwLjAgICAgIC0+ICAwLjANCitkcW1pbjQwOSBtaW4gIDAuMCAgIC0wICAgICAgIC0+IC0wDQorZHFtaW40MTAgbWluICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQorZHFtaW40MTEgbWluICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQorZHFtaW40MTIgbWluICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMA0KK2RxbWluNDEzIG1pbiAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KK2RxbWluNDE0IG1pbiAgMCAgICAgLTAgICAgICAgLT4gLTANCitkcW1pbjQxNSBtaW4gLTAuMCAgIC0wICAgICAgIC0+IC0wDQorZHFtaW40MTYgbWluIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCitkcW1pbjQxNyBtaW4gLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwDQorZHFtaW40MTggbWluIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQorZHFtaW40MTkgbWluIC0wLjEgICAtMS4wICAgICAtPiAtMS4wDQorZHFtaW40MjAgbWluIC0xLjAgICAtMSAgICAgICAtPiAtMQ0KK2RxbWluNDIxIG1pbiAtMSAgICAgLTEuMSAgICAgLT4gLTEuMQ0KK2RxbWluNDIzIG1pbiAtMS4xICAgLUluZiAgICAgLT4gLUluZmluaXR5DQorLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkDQorZHFtaW40MzEgbWluICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQorZHFtaW40MzIgbWluICAxICAgICAgMS4xICAgICAtPiAgMQ0KK2RxbWluNDMzIG1pbiAgMS4wICAgIDEgICAgICAgLT4gIDEuMA0KK2RxbWluNDM0IG1pbiAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KK2RxbWluNDM1IG1pbiAgMC4xMCAgIDAuMSAgICAgLT4gIDAuMTANCitkcW1pbjQzNiBtaW4gIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMA0KK2RxbWluNDM3IG1pbiAgMCAgICAgIDAuMTAgICAgLT4gIDANCitkcW1pbjQzOCBtaW4gIDAuMCAgICAwICAgICAgIC0+ICAwLjANCitkcW1pbjQzOSBtaW4gLTAgICAgICAwLjAgICAgIC0+IC0wDQorZHFtaW40NDAgbWluIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQorZHFtaW40NDEgbWluIC0wLjAgICAgMC4wMCAgICAtPiAtMC4wDQorZHFtaW40NDIgbWluIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMA0KK2RxbWluNDQzIG1pbiAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KK2RxbWluNDQ0IG1pbiAtMCAgICAgIDAgICAgICAgLT4gLTANCitkcW1pbjQ0NSBtaW4gLTAgICAgIC0wLjAgICAgIC0+IC0wDQorZHFtaW40NDYgbWluIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCitkcW1pbjQ0NyBtaW4gLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwDQorZHFtaW40NDggbWluIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQorZHFtaW40NDkgbWluIC0xLjAgICAtMC4xICAgICAtPiAtMS4wDQorZHFtaW40NTAgbWluIC0xICAgICAtMS4wICAgICAtPiAtMQ0KK2RxbWluNDUxIG1pbiAtMS4xICAgLTEgICAgICAgLT4gLTEuMQ0KK2RxbWluNDUzIG1pbiAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5DQorLS0gbGFyZ2llcw0KK2RxbWluNDYwIG1pbiAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCitkcW1pbjQ2MSBtaW4gIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwDQorZHFtaW40NjIgbWluICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMw0KK2RxbWluNDYzIG1pbiAgMUUrMyAgLTM4NCAgICAtPiAtMzg0DQorZHFtaW40NjQgbWluIC0zODQgICAxRSszICAgIC0+IC0zODQNCitkcW1pbjQ2NSBtaW4gLTFFKzMgICAxMDAwICAgIC0+IC0xRSszDQorZHFtaW40NjYgbWluIC0zODQgIC0xRSszICAgIC0+IC0xRSszDQorZHFtaW40NjcgbWluIC0xRSszICAtMzg0ICAgIC0+IC0xRSszDQorDQorLS0gbWlzYWxpZ25tZW50IHRyYXBzIGZvciBsaXR0bGUtZW5kaWFuDQorZHFtaW40NzEgbWluICAgICAgMS4wICAgICAgIDAuMSAgLT4gMC4xDQorZHFtaW40NzIgbWluICAgICAgMC4xICAgICAgIDEuMCAgLT4gMC4xDQorZHFtaW40NzMgbWluICAgICAxMC4wICAgICAgIDAuMSAgLT4gMC4xDQorZHFtaW40NzQgbWluICAgICAgMC4xICAgICAgMTAuMCAgLT4gMC4xDQorZHFtaW40NzUgbWluICAgICAgMTAwICAgICAgIDEuMCAgLT4gMS4wDQorZHFtaW40NzYgbWluICAgICAgMS4wICAgICAgIDEwMCAgLT4gMS4wDQorZHFtaW40NzcgbWluICAgICAxMDAwICAgICAgMTAuMCAgLT4gMTAuMA0KK2RxbWluNDc4IG1pbiAgICAgMTAuMCAgICAgIDEwMDAgIC0+IDEwLjANCitkcW1pbjQ3OSBtaW4gICAgMTAwMDAgICAgIDEwMC4wICAtPiAxMDAuMA0KK2RxbWluNDgwIG1pbiAgICAxMDAuMCAgICAgMTAwMDAgIC0+IDEwMC4wDQorZHFtaW40ODEgbWluICAgMTAwMDAwICAgIDEwMDAuMCAgLT4gMTAwMC4wDQorZHFtaW40ODIgbWluICAgMTAwMC4wICAgIDEwMDAwMCAgLT4gMTAwMC4wDQorZHFtaW40ODMgbWluICAxMDAwMDAwICAgMTAwMDAuMCAgLT4gMTAwMDAuMA0KK2RxbWluNDg0IG1pbiAgMTAwMDAuMCAgIDEwMDAwMDAgIC0+IDEwMDAwLjANCisNCistLSBzdWJub3JtYWxzDQorZHFtaW41MTAgbWluICAxLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KK2RxbWluNTExIG1pbiAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDANCitkcW1pbjUxMiBtaW4gIDAuMTBFLTYxNDMgICAgICAgMCAgLT4gICAwDQorZHFtaW41MTMgbWluICAwLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbWluNTE0IG1pbiAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDANCitkcW1pbjUxNSBtaW4gIDAuOTk5RS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtaW41MTYgbWluICAwLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbWluNTE3IG1pbiAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1pbjUxOCBtaW4gIDAuMDAxRS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtaW41MTkgbWluICAwLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMA0KK2RxbWluNTIwIG1pbiAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDANCisNCitkcW1pbjUzMCBtaW4gLTEuMDBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjAwRS02MTQzDQorZHFtaW41MzEgbWluIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCitkcW1pbjUzMiBtaW4gLTAuMTBFLTYxNDMgICAgICAgMCAgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KK2RxbWluNTMzIG1pbiAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgLTEuMDBFLTYxNDQgU3Vibm9ybWFsDQorZHFtaW41MzQgbWluIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAtMUUtNjE0NSAgICBTdWJub3JtYWwNCitkcW1pbjUzNSBtaW4gLTAuOTk5RS02MTQzICAgICAgMCAgLT4gIC05Ljk5RS02MTQ0IFN1Ym5vcm1hbA0KK2RxbWluNTM2IG1pbiAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgLTkuOUUtNjE0NSAgU3Vibm9ybWFsDQorZHFtaW41MzcgbWluIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAtOUUtNjE0NiAgICBTdWJub3JtYWwNCitkcW1pbjUzOCBtaW4gLTAuMDAxRS02MTQzICAgICAgMCAgLT4gIC0xRS02MTQ2ICAgIFN1Ym5vcm1hbA0KK2RxbWluNTM5IG1pbiAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgLTlFLTYxNDcgICAgU3Vibm9ybWFsDQorZHFtaW41NDAgbWluIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAtMUUtNjE0NyAgICBTdWJub3JtYWwNCisNCisNCistLSBOdWxsIHRlc3RzDQorZHFtaW45MDAgbWluIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbWluOTAxIG1pbiAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW5NYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CmluZGV4IGVkYzJlNDcuLjcxYjg4NmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbk1hZy5kZWNUZXN0CkBAIC0xLDI5MyArMSwyOTMgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFNaW5NYWcuZGVjVGVzdCAtLSBkZWNRdWFkIG1pbm51bW1hZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZwotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc2FuaXR5IGNoZWNrcwotZHFtbmcwMDEgbWlubWFnICAtMiAgLTIgIC0+IC0yCi1kcW1uZzAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKLWRxbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMAotZHFtbmcwMDQgbWlubWFnICAtMiAgIDEgIC0+ICAxCi1kcW1uZzAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKLWRxbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQotZHFtbmcwMDcgbWlubWFnICAtMSAgLTEgIC0+IC0xCi1kcW1uZzAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKLWRxbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQotZHFtbmcwMTAgbWlubWFnICAtMSAgIDIgIC0+IC0xCi1kcW1uZzAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKLWRxbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMAotZHFtbmcwMTMgbWlubWFnICAgMCAgIDAgIC0+ICAwCi1kcW1uZzAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKLWRxbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMAotZHFtbmcwMTYgbWlubWFnICAgMSAgLTIgIC0+ICAxCi1kcW1uZzAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKLWRxbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMAotZHFtbmcwMTkgbWlubWFnICAgMSAgIDEgIC0+ICAxCi1kcW1uZzAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKLWRxbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMgotZHFtbmcwMjIgbWlubWFnICAgMiAgLTEgIC0+IC0xCi1kcW1uZzAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKLWRxbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQotZHFtbmcwMjYgbWlubWFnICAgMiAgIDIgIC0+ICAyCi0KLS0tIGV4dGVuZGVkIHplcm9zCi1kcW1uZzAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKLWRxbW5nMDMxIG1pbm1hZyAgIDAgICAgLTAgICAtPiAtMAotZHFtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjAKLWRxbW5nMDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCi1kcW1uZzAzNCBtaW5tYWcgIC0wICAgICAwICAgLT4gLTAKLWRxbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMAotZHFtbmcwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCi1kcW1uZzAzNyBtaW5tYWcgIC0wICAgICAwLjAgLT4gLTAKLWRxbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wCi1kcW1uZzAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKLWRxbW5nMDQwIG1pbm1hZyAgIDAuMCAgLTAuMCAtPiAtMC4wCi1kcW1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMAotZHFtbmcwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKLWRxbW5nMDQzIG1pbm1hZyAgLTAuMCAgLTAgICAtPiAtMAotZHFtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjAKLWRxbW5nMDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCi0KLWRxbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQotZHFtbmcwNDcgbWlubWFnICAtMEUxICAgMEUyIC0+IC0wRSsxCi1kcW1uZzA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKLWRxbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQotZHFtbmcwNTAgbWlubWFnICAtMEUzICAtMEUyIC0+IC0wRSszCi1kcW1uZzA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKLQotLS0gU3BlY2lhbHMKLWRxbW5nMDkwIG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCi1kcW1uZzA5MiBtaW5tYWcgIEluZiAgLTEgICAgIC0+IC0xCi1kcW1uZzA5MyBtaW5tYWcgIEluZiAgLTAgICAgIC0+IC0wCi1kcW1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCi1kcW1uZzA5NSBtaW5tYWcgIEluZiAgIDEgICAgIC0+ICAxCi1kcW1uZzA5NiBtaW5tYWcgIEluZiAgIDEwMDAgIC0+ICAxMDAwCi1kcW1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFtbmcwOTggbWlubWFnIC0xMDAwICBJbmYgICAtPiAtMTAwMAotZHFtbmcwOTkgbWlubWFnIC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKLWRxbW5nMTAxIG1pbm1hZyAtMCAgICAgSW5mICAgLT4gLTAKLWRxbW5nMTAyIG1pbm1hZyAgMCAgICAgSW5mICAgLT4gIDAKLWRxbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKLWRxbW5nMTA0IG1pbm1hZyAgMTAwMCAgSW5mICAgLT4gIDEwMDAKLWRxbW5nMTA1IG1pbm1hZyAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRxbW5nMTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1uZzEyMSBtaW5tYWcgLUluZiAgLTEwMDAgIC0+IC0xMDAwCi1kcW1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xCi1kcW1uZzEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCi1kcW1uZzEyNCBtaW5tYWcgLUluZiAgIDAgICAgIC0+ICAwCi1kcW1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxCi1kcW1uZzEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCi1kcW1uZzEyNyBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQotZHFtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbW5nMTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKLWRxbW5nMTMwIG1pbm1hZyAtMSAgICAtSW5mICAgLT4gLTEKLWRxbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTAKLWRxbW5nMTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKLWRxbW5nMTMzIG1pbm1hZyAgMSAgICAtSW5mICAgLT4gIDEKLWRxbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDAKLWRxbW5nMTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcwotZHFtbmcxNDEgbWlubWFnICBOYU4gLUluZiAgICAtPiAgLUluZmluaXR5Ci1kcW1uZzE0MiBtaW5tYWcgIE5hTiAtMTAwMCAgIC0+ICAtMTAwMAotZHFtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKLWRxbW5nMTQ0IG1pbm1hZyAgTmFOIC0wICAgICAgLT4gIC0wCi1kcW1uZzE0NSBtaW5tYWcgIE5hTiAgMCAgICAgIC0+ICAwCi1kcW1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1kcW1uZzE0NyBtaW5tYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwCi1kcW1uZzE0OCBtaW5tYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQotZHFtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kcW1uZzE1MCBtaW5tYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQotZHFtbmcxNTEgbWlubWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMAotZHFtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQotZHFtbmcxNTMgbWlubWFnIC0wICAgIE5hTiAgICAtPiAtMAotZHFtbmcxNTQgbWlubWFnICAwICAgLU5hTiAgICAtPiAgMAotZHFtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQotZHFtbmcxNTYgbWlubWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMAotZHFtbmcxNTcgbWlubWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkKLQotZHFtbmcxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjIgbWlubWFnICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjUgbWlubWFnIC1zTmFOICAwICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjggbWlubWFnICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzEgbWlubWFnIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzQgbWlubWFnIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzcgbWlubWFnICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcW1uZzE4MSBtaW5tYWcgIE5hTjkgICAtSW5mICAgLT4gLUluZmluaXR5Ci1kcW1uZzE4MiBtaW5tYWcgLU5hTjggICAgOTk5MCAgLT4gIDk5OTAKLWRxbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZHFtbmcxODQgbWlubWFnICBOYU4xICAgIE5hTjU0IC0+ICBOYU4xCi1kcW1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyCi1kcW1uZzE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKLWRxbW5nMTg3IG1pbm1hZyAtTmFONDQgICBOYU43ICAtPiAtTmFONDQKLQotZHFtbmcxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQotZHFtbmcxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5Ci1kcW1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5Ci0KLWRxbW5nMTkxIG1pbm1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcW1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxOTMgbWlubWFnIC1zTmFOOTcgIE5hTjggICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRxbW5nMTk0IG1pbm1hZyAgc05hTjY5IHNOYU45NCAgLT4gIE5hTjY5IEludmFsaWRfb3BlcmF0aW9uCi1kcW1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxOTYgbWlubWFnIC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRxbW5nMTk3IG1pbm1hZyAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kcW1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFtbmcxOTkgbWlubWFnICBOYU4gICAgc05hTjg2ICAtPiAgTmFOODYgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb2xkIHJvdW5kaW5nIGNoZWNrcwotZHFtbmcyMjEgbWlubWFnIC0xMjM0NTY3ODAwMCAxICAtPiAxCi1kcW1uZzIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKLWRxbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQotZHFtbmcyMjQgbWlubWFnIDEgLTEyMzQ1Njc4MDAgICAtPiAxCi1kcW1uZzIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKLWRxbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQotZHFtbmcyMjcgbWlubWFnIC0xMjM0NTY3ODkxICAxICAtPiAxCi1kcW1uZzIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKLWRxbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQotZHFtbmcyMzAgbWlubWFnIDEgLTEyMzQ1Njc4OTAxICAtPiAxCi1kcW1uZzIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKLWRxbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQotZHFtbmcyMzMgbWlubWFnIDEyMzQ1Njc4OTEgIDEgICAtPiAxCi1kcW1uZzIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKLWRxbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQotZHFtbmcyMzYgbWlubWFnIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kcW1uZzIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKLWRxbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi0tLSBmcm9tIGV4YW1wbGVzCi1kcW1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInCi1kcW1uZzI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCi1kcW1uZzI4MiBtaW5tYWcgJzEuMCcgJzEnICAtPiAgJzEuMCcKLWRxbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJwotZHFtbmcyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JwotCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KLWRxbW5nNDAxIG1pbm1hZyAgSW5mICAgIDEuMSAgICAgLT4gIDEuMQotZHFtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQotZHFtbmc0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCi1kcW1uZzQwNCBtaW5tYWcgIDEuMCAgICAwLjEgICAgIC0+ICAwLjEKLWRxbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTAKLWRxbW5nNDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCi1kcW1uZzQwNyBtaW5tYWcgIDAuMTAgICAwICAgICAgIC0+ICAwCi1kcW1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjAKLWRxbW5nNDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKLWRxbW5nNDEwIG1pbm1hZyAgMC4wICAgLTAuMCAgICAgLT4gLTAuMAotZHFtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wCi1kcW1uZzQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCi1kcW1uZzQxMyBtaW5tYWcgIDAgICAgIC0wLjAgICAgIC0+IC0wLjAKLWRxbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTAKLWRxbW5nNDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKLWRxbW5nNDE2IG1pbm1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAKLWRxbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAKLWRxbW5nNDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQotZHFtbmc0MTkgbWlubWFnIC0wLjEgICAtMS4wICAgICAtPiAtMC4xCi1kcW1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xCi1kcW1uZzQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCi1kcW1uZzQyMyBtaW5tYWcgLTEuMSAgIC1JbmYgICAgIC0+IC0xLjEKLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAotZHFtbmc0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xCi1kcW1uZzQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCi1kcW1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjAKLWRxbW5nNDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQotZHFtbmc0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAotZHFtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDAKLWRxbW5nNDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAKLWRxbW5nNDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAotZHFtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMAotZHFtbmc0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wCi1kcW1uZzQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKLWRxbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDAKLWRxbW5nNDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMAotZHFtbmc0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAotZHFtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMAotZHFtbmc0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMAotZHFtbmc0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAotZHFtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xCi1kcW1uZzQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjEKLWRxbW5nNDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKLWRxbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTEKLWRxbW5nNDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQotLS0gbGFyZ2llcwotZHFtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAotZHFtbmc0NjEgbWlubWFnICAxRSszICAgMTAwMCAgICAtPiAgMTAwMAotZHFtbmc0NjIgbWlubWFnICAxMDAwICAtMUUrMyAgICAtPiAtMUUrMwotZHFtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0Ci1kcW1uZzQ2NCBtaW5tYWcgLTM4NCAgICAxRSszICAgIC0+IC0zODQKLWRxbW5nNDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKLWRxbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NAotZHFtbmc0NjcgbWlubWFnIC0xRSszICAgLTM4NCAgICAtPiAtMzg0Ci0KLS0tIHN1Ym5vcm1hbHMKLWRxbW5nNTEwIG1pbm1hZyAgMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbW5nNTExIG1pbm1hZyAgMC4xRS02MTQzICAgICAgICAwICAtPiAgIDAKLWRxbW5nNTEyIG1pbm1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbW5nNTEzIG1pbm1hZyAgMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbW5nNTE0IG1pbm1hZyAgMC4wMUUtNjE0MyAgICAgICAwICAtPiAgIDAKLWRxbW5nNTE1IG1pbm1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbW5nNTE2IG1pbm1hZyAgMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbW5nNTE3IG1pbm1hZyAgMC4wMDlFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDAKLWRxbW5nNTE5IG1pbm1hZyAgMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDAKLWRxbW5nNTIwIG1pbm1hZyAgMC4wMDAxRS02MTQzICAgICAwICAtPiAgIDAKLQotZHFtbmc1MzAgbWlubWFnIC0xLjAwRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzEgbWlubWFnIC0wLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzIgbWlubWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzMgbWlubWFnIC0wLjEwMEUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzQgbWlubWFnIC0wLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzUgbWlubWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzYgbWlubWFnIC0wLjA5OUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzcgbWlubWFnIC0wLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzggbWlubWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMAotZHFtbmc1MzkgbWlubWFnIC0wLjAwMDlFLTYxNDMgICAgIDAgIC0+ICAgMAotZHFtbmc1NDAgbWlubWFnIC0wLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMAotCi0KLS0tIE51bGwgdGVzdHMKLWRxbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxTWluTWFnLmRlY1Rlc3QgLS0gZGVjUXVhZCBtaW5udW1tYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK2RxbW5nMDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMg0KK2RxbW5nMDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQ0KK2RxbW5nMDAzIG1pbm1hZyAgLTIgICAwICAtPiAgMA0KK2RxbW5nMDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQ0KK2RxbW5nMDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMg0KK2RxbW5nMDA2IG1pbm1hZyAgLTEgIC0yICAtPiAtMQ0KK2RxbW5nMDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQ0KK2RxbW5nMDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMA0KK2RxbW5nMDA5IG1pbm1hZyAgLTEgICAxICAtPiAtMQ0KK2RxbW5nMDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQ0KK2RxbW5nMDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMA0KK2RxbW5nMDEyIG1pbm1hZyAgIDAgIC0xICAtPiAgMA0KK2RxbW5nMDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMA0KK2RxbW5nMDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMA0KK2RxbW5nMDE1IG1pbm1hZyAgIDAgICAyICAtPiAgMA0KK2RxbW5nMDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQ0KK2RxbW5nMDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQ0KK2RxbW5nMDE4IG1pbm1hZyAgIDEgICAwICAtPiAgMA0KK2RxbW5nMDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQ0KK2RxbW5nMDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQ0KK2RxbW5nMDIxIG1pbm1hZyAgIDIgIC0yICAtPiAtMg0KK2RxbW5nMDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQ0KK2RxbW5nMDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMA0KK2RxbW5nMDI1IG1pbm1hZyAgIDIgICAxICAtPiAgMQ0KK2RxbW5nMDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMg0KKw0KKy0tIGV4dGVuZGVkIHplcm9zDQorZHFtbmcwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwDQorZHFtbmcwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wDQorZHFtbmcwMzIgbWlubWFnICAgMCAgICAtMC4wIC0+IC0wLjANCitkcW1uZzAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMA0KK2RxbW5nMDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMA0KK2RxbW5nMDM1IG1pbm1hZyAgLTAgICAgLTAgICAtPiAtMA0KK2RxbW5nMDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMA0KK2RxbW5nMDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMA0KK2RxbW5nMDM4IG1pbm1hZyAgIDAuMCAgIDAgICAtPiAgMC4wDQorZHFtbmcwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wDQorZHFtbmcwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjANCitkcW1uZzA0MSBtaW5tYWcgICAwLjAgICAwLjAgLT4gIDAuMA0KK2RxbW5nMDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wDQorZHFtbmcwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wDQorZHFtbmcwNDQgbWlubWFnICAtMC4wICAtMC4wIC0+IC0wLjANCitkcW1uZzA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMA0KKw0KK2RxbW5nMDQ2IG1pbm1hZyAgIDBFMSAgLTBFMSAtPiAtMEUrMQ0KK2RxbW5nMDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQ0KK2RxbW5nMDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KK2RxbW5nMDQ5IG1pbm1hZyAgIDBFMSAgIDBFMiAtPiAgMEUrMQ0KK2RxbW5nMDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMw0KK2RxbW5nMDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KKw0KKy0tIFNwZWNpYWxzDQorZHFtbmcwOTAgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1uZzA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwDQorZHFtbmcwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQ0KK2RxbW5nMDkzIG1pbm1hZyAgSW5mICAtMCAgICAgLT4gLTANCitkcW1uZzA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwDQorZHFtbmcwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQ0KK2RxbW5nMDk2IG1pbm1hZyAgSW5mICAgMTAwMCAgLT4gIDEwMDANCitkcW1uZzA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbW5nMDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDANCitkcW1uZzA5OSBtaW5tYWcgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbW5nMTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTENCitkcW1uZzEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wDQorZHFtbmcxMDIgbWlubWFnICAwICAgICBJbmYgICAtPiAgMA0KK2RxbW5nMTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDENCitkcW1uZzEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorZHFtbmcxMDUgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkcW1uZzEyMCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbW5nMTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDANCitkcW1uZzEyMiBtaW5tYWcgLUluZiAgLTEgICAgIC0+IC0xDQorZHFtbmcxMjMgbWlubWFnIC1JbmYgIC0wICAgICAtPiAtMA0KK2RxbW5nMTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDANCitkcW1uZzEyNSBtaW5tYWcgLUluZiAgIDEgICAgIC0+ICAxDQorZHFtbmcxMjYgbWlubWFnIC1JbmYgICAxMDAwICAtPiAgMTAwMA0KK2RxbW5nMTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZHFtbmcxMjggbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW1uZzEyOSBtaW5tYWcgLTEwMDAgLUluZiAgIC0+IC0xMDAwDQorZHFtbmcxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KK2RxbW5nMTMxIG1pbm1hZyAtMCAgICAtSW5mICAgLT4gLTANCitkcW1uZzEzMiBtaW5tYWcgIDAgICAgLUluZiAgIC0+ICAwDQorZHFtbmcxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQ0KK2RxbW5nMTM0IG1pbm1hZyAgMTAwMCAtSW5mICAgLT4gIDEwMDANCitkcW1uZzEzNSBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KKw0KKy0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcw0KK2RxbW5nMTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KK2RxbW5nMTQyIG1pbm1hZyAgTmFOIC0xMDAwICAgLT4gIC0xMDAwDQorZHFtbmcxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTENCitkcW1uZzE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMA0KK2RxbW5nMTQ1IG1pbm1hZyAgTmFOICAwICAgICAgLT4gIDANCitkcW1uZzE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxDQorZHFtbmcxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KK2RxbW5nMTQ4IG1pbm1hZyAgTmFOICBJbmYgICAgLT4gIEluZmluaXR5DQorZHFtbmcxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQorZHFtbmcxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCitkcW1uZzE1MSBtaW5tYWcgLTEwMDAgTmFOICAgIC0+IC0xMDAwDQorZHFtbmcxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQ0KK2RxbW5nMTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTANCitkcW1uZzE1NCBtaW5tYWcgIDAgICAtTmFOICAgIC0+ICAwDQorZHFtbmcxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQ0KK2RxbW5nMTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCitkcW1uZzE1NyBtaW5tYWcgIEluZiAgTmFOICAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbW5nMTYxIG1pbm1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNjMgbWlubWFnICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTY0IG1pbm1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNjYgbWlubWFnIC1zTmFOICAxICAgICAtPiAtTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTY3IG1pbm1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNjkgbWlubWFnICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTcwIG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNzIgbWlubWFnIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTczIG1pbm1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNzUgbWlubWFnICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTc2IG1pbm1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxNzggbWlubWFnICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTc5IG1pbm1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFtbmcxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbW5nMTgyIG1pbm1hZyAtTmFOOCAgICA5OTkwICAtPiAgOTk5MA0KK2RxbW5nMTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitkcW1uZzE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCitkcW1uZzE4NSBtaW5tYWcgIE5hTjIyICAtTmFONTMgLT4gIE5hTjIyDQorZHFtbmcxODYgbWlubWFnIC1OYU4zICAgIE5hTjYgIC0+IC1OYU4zDQorZHFtbmcxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KKw0KK2RxbW5nMTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkNCitkcW1uZzE4OSBtaW5tYWcgLTk5OTkgICAtTmFOMzMgLT4gLTk5OTkNCitkcW1uZzE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorZHFtbmcxOTEgbWlubWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxOTQgbWlubWFnICBzTmFONjkgc05hTjk0ICAtPiAgTmFONjkgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFtbmcxOTcgbWlubWFnICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5nMTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb2xkIHJvdW5kaW5nIGNoZWNrcw0KK2RxbW5nMjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQ0KK2RxbW5nMjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQ0KK2RxbW5nMjIzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQ0KK2RxbW5nMjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQ0KK2RxbW5nMjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQ0KK2RxbW5nMjI2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQ0KK2RxbW5nMjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQ0KK2RxbW5nMjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQ0KK2RxbW5nMjI5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQ0KK2RxbW5nMjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQ0KK2RxbW5nMjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQ0KK2RxbW5nMjMyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQ0KK2RxbW5nMjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQ0KK2RxbW5nMjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KK2RxbW5nMjM1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQ0KK2RxbW5nMjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KK2RxbW5nMjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KK2RxbW5nMjM4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQ0KKw0KKy0tIGZyb20gZXhhbXBsZXMNCitkcW1uZzI4MCBtaW5tYWcgJzMnICAgJzInICAtPiAgJzInDQorZHFtbmcyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJw0KK2RxbW5nMjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJw0KK2RxbW5nMjgzIG1pbm1hZyAnMScgJzEuMCcgIC0+ICAnMS4wJw0KK2RxbW5nMjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQ0KKy0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddDQorZHFtbmc0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQorZHFtbmc0MDIgbWlubWFnICAxLjEgICAgMSAgICAgICAtPiAgMQ0KK2RxbW5nNDAzIG1pbm1hZyAgMSAgICAgIDEuMCAgICAgLT4gIDEuMA0KK2RxbW5nNDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KK2RxbW5nNDA1IG1pbm1hZyAgMC4xICAgIDAuMTAgICAgLT4gIDAuMTANCitkcW1uZzQwNiBtaW5tYWcgIDAuMTAgICAwLjEwMCAgIC0+ICAwLjEwMA0KK2RxbW5nNDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDANCitkcW1uZzQwOCBtaW5tYWcgIDAgICAgICAwLjAgICAgIC0+ICAwLjANCitkcW1uZzQwOSBtaW5tYWcgIDAuMCAgIC0wICAgICAgIC0+IC0wDQorZHFtbmc0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQorZHFtbmc0MTEgbWlubWFnICAwLjAwICAtMC4wICAgICAtPiAtMC4wDQorZHFtbmc0MTIgbWlubWFnICAwLjAgICAtMC4wMCAgICAtPiAtMC4wMA0KK2RxbW5nNDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KK2RxbW5nNDE0IG1pbm1hZyAgMCAgICAgLTAgICAgICAgLT4gLTANCitkcW1uZzQxNSBtaW5tYWcgLTAuMCAgIC0wICAgICAgIC0+IC0wDQorZHFtbmc0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMA0KK2RxbW5nNDE3IG1pbm1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTANCitkcW1uZzQxOCBtaW5tYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjENCitkcW1uZzQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjENCitkcW1uZzQyMCBtaW5tYWcgLTEuMCAgIC0xICAgICAgIC0+IC0xDQorZHFtbmc0MjEgbWlubWFnIC0xICAgICAtMS4xICAgICAtPiAtMQ0KK2RxbW5nNDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KK2RxbW5nNDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQ0KK2RxbW5nNDMyIG1pbm1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDENCitkcW1uZzQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjANCitkcW1uZzQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjENCitkcW1uZzQzNSBtaW5tYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjEwDQorZHFtbmc0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDANCitkcW1uZzQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwDQorZHFtbmc0MzggbWlubWFnICAwLjAgICAgMCAgICAgICAtPiAgMC4wDQorZHFtbmc0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMA0KK2RxbW5nNDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMA0KK2RxbW5nNDQxIG1pbm1hZyAtMC4wICAgIDAuMDAgICAgLT4gLTAuMA0KK2RxbW5nNDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDANCitkcW1uZzQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjANCitkcW1uZzQ0NCBtaW5tYWcgLTAgICAgICAwICAgICAgIC0+IC0wDQorZHFtbmc0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMA0KK2RxbW5nNDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTANCitkcW1uZzQ0NyBtaW5tYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwDQorZHFtbmc0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQorZHFtbmc0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xDQorZHFtbmc0NTAgbWlubWFnIC0xICAgICAtMS4wICAgICAtPiAtMQ0KK2RxbW5nNDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTENCitkcW1uZzQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjENCistLSBsYXJnaWVzDQorZHFtbmc0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMA0KK2RxbW5nNDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitkcW1uZzQ2MiBtaW5tYWcgIDEwMDAgIC0xRSszICAgIC0+IC0xRSszDQorZHFtbmc0NjMgbWlubWFnICAxRSszICAgLTM4NCAgICAtPiAtMzg0DQorZHFtbmc0NjQgbWlubWFnIC0zODQgICAgMUUrMyAgICAtPiAtMzg0DQorZHFtbmc0NjUgbWlubWFnIC0xRSszICAgMTAwMCAgICAtPiAtMUUrMw0KK2RxbW5nNDY2IG1pbm1hZyAtMzg0ICAgLTFFKzMgICAgLT4gLTM4NA0KK2RxbW5nNDY3IG1pbm1hZyAtMUUrMyAgIC0zODQgICAgLT4gLTM4NA0KKw0KKy0tIHN1Ym5vcm1hbHMNCitkcW1uZzUxMCBtaW5tYWcgIDEuMDBFLTYxNDMgICAgICAgMCAgLT4gICAwDQorZHFtbmc1MTEgbWlubWFnICAwLjFFLTYxNDMgICAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTEyIG1pbm1hZyAgMC4xMEUtNjE0MyAgICAgICAwICAtPiAgIDANCitkcW1uZzUxMyBtaW5tYWcgIDAuMTAwRS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtbmc1MTQgbWlubWFnICAwLjAxRS02MTQzICAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTE1IG1pbm1hZyAgMC45OTlFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1uZzUxNiBtaW5tYWcgIDAuMDk5RS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtbmc1MTcgbWlubWFnICAwLjAwOUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTE4IG1pbm1hZyAgMC4wMDFFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1uZzUxOSBtaW5tYWcgIDAuMDAwOUUtNjE0MyAgICAgMCAgLT4gICAwDQorZHFtbmc1MjAgbWlubWFnICAwLjAwMDFFLTYxNDMgICAgIDAgIC0+ICAgMA0KKw0KK2RxbW5nNTMwIG1pbm1hZyAtMS4wMEUtNjE0MyAgICAgICAwICAtPiAgIDANCitkcW1uZzUzMSBtaW5tYWcgLTAuMUUtNjE0MyAgICAgICAgMCAgLT4gICAwDQorZHFtbmc1MzIgbWlubWFnIC0wLjEwRS02MTQzICAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTMzIG1pbm1hZyAtMC4xMDBFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1uZzUzNCBtaW5tYWcgLTAuMDFFLTYxNDMgICAgICAgMCAgLT4gICAwDQorZHFtbmc1MzUgbWlubWFnIC0wLjk5OUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTM2IG1pbm1hZyAtMC4wOTlFLTYxNDMgICAgICAwICAtPiAgIDANCitkcW1uZzUzNyBtaW5tYWcgLTAuMDA5RS02MTQzICAgICAgMCAgLT4gICAwDQorZHFtbmc1MzggbWlubWFnIC0wLjAwMUUtNjE0MyAgICAgIDAgIC0+ICAgMA0KK2RxbW5nNTM5IG1pbm1hZyAtMC4wMDA5RS02MTQzICAgICAwICAtPiAgIDANCitkcW1uZzU0MCBtaW5tYWcgLTAuMDAwMUUtNjE0MyAgICAgMCAgLT4gICAwDQorDQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW1uZzkwMSBtaW5tYWcgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU1pbnVzLmRlY1Rlc3QKaW5kZXggMDJlNDYyZS4uN2EwMDc3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTWludXMuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNaW51cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxTWludXMuZGVjVGVzdCAtLSBkZWNRdWFkIDAteCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZHFtbnMwMDEgbWludXMgICAgICAgKzcuNTAgIC0+IC03LjUwCi0KLS0tIEluZmluaXRpZXMKLWRxbW5zMDExIG1pbnVzICBJbmZpbml0eSAgICAtPiAtSW5maW5pdHkKLWRxbW5zMDEyIG1pbnVzICAtSW5maW5pdHkgICAtPiBJbmZpbml0eQotCi0tLSBOYU5zLCAwIHBheWxvYWQKLWRxbW5zMDIxIG1pbnVzICAgICAgICAgTmFOICAtPiBOYU4KLWRxbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFOCi1kcW1uczAyMyBtaW51cyAgICAgICAgc05hTiAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbnMwMjQgbWludXMgICAgICAgLXNOYU4gIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotZHFtbnMwMzEgbWludXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCi1kcW1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzCi1kcW1uczAzMyBtaW51cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbgotZHFtbnMwMzQgbWludXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MAotZHFtbnMwMzYgbWludXMgICAgICAtTmFONzAgIC0+IC1OYU43MAotZHFtbnMwMzcgbWludXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KLWRxbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGZpbml0ZXMKLWRxbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNwotZHFtbnMxMDIgbWludXMgICAgICAgICAtNyAgIC0+IDcKLWRxbW5zMTAzIG1pbnVzICAgICAgICAgNzUgICAtPiAtNzUKLWRxbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQotZHFtbnMxMDUgbWludXMgICAgICAgNy41MCAgIC0+IC03LjUwCi1kcW1uczEwNiBtaW51cyAgICAgIC03LjUwICAgLT4gNy41MAotZHFtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMAotZHFtbnMxMDggbWludXMgICAgICAtNy41MDAgIC0+IDcuNTAwCi0KLS0tIHplcm9zCi1kcW1uczExMSBtaW51cyAgICAgICAgICAwICAgLT4gMAotZHFtbnMxMTIgbWludXMgICAgICAgICAtMCAgIC0+IDAKLWRxbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0Ci1kcW1uczExNCBtaW51cyAgICAgIC0wRSs0ICAgLT4gMEUrNAotZHFtbnMxMTUgbWludXMgICAgIDAuMDAwMCAgIC0+IDAuMDAwMAotZHFtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotZHFtbnMxMTcgbWludXMgICAgICAwRS0xNDEgIC0+IDBFLTE0MQotZHFtbnMxMTggbWludXMgICAgIC0wRS0xNDEgIC0+IDBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotZHFtbnMxMjEgbWludXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+IC0yNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCi1kcW1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIKLWRxbW5zMTIzIG1pbnVzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAtMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQotZHFtbnMxMjQgbWludXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+ICAxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcW1uczEzMSBtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbW5zMTMyIG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzCi1kcW1uczEzMyBtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxbW5zMTM0IG1pbnVzICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2IFN1Ym5vcm1hbAotCi1kcW1uczEzNSBtaW51cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NiBTdWJub3JtYWwKLWRxbW5zMTM2IG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFtbnMxMzcgbWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMKLWRxbW5zMTM4IG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgMC14ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2RxbW5zMDAxIG1pbnVzICAgICAgICs3LjUwICAtPiAtNy41MA0KKw0KKy0tIEluZmluaXRpZXMNCitkcW1uczAxMSBtaW51cyAgSW5maW5pdHkgICAgLT4gLUluZmluaXR5DQorZHFtbnMwMTIgbWludXMgIC1JbmZpbml0eSAgIC0+IEluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZHFtbnMwMjEgbWludXMgICAgICAgICBOYU4gIC0+IE5hTg0KK2RxbW5zMDIyIG1pbnVzICAgICAgICAtTmFOICAtPiAtTmFODQorZHFtbnMwMjMgbWludXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uczAyNCBtaW51cyAgICAgICAtc05hTiAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5hTnMsIG5vbi0wIHBheWxvYWQNCitkcW1uczAzMSBtaW51cyAgICAgICBOYU4xMyAgLT4gTmFOMTMNCitkcW1uczAzMiBtaW51cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQorZHFtbnMwMzMgbWludXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24NCitkcW1uczAzNCBtaW51cyAgICAgLXNOYU4xMyAgLT4gLU5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5zMDM1IG1pbnVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KK2RxbW5zMDM2IG1pbnVzICAgICAgLU5hTjcwICAtPiAtTmFONzANCitkcW1uczAzNyBtaW51cyAgICAgIHNOYU4xMDEgLT4gTmFOMTAxICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbW5zMDM4IG1pbnVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZmluaXRlcw0KK2RxbW5zMTAxIG1pbnVzICAgICAgICAgIDcgICAtPiAtNw0KK2RxbW5zMTAyIG1pbnVzICAgICAgICAgLTcgICAtPiA3DQorZHFtbnMxMDMgbWludXMgICAgICAgICA3NSAgIC0+IC03NQ0KK2RxbW5zMTA0IG1pbnVzICAgICAgICAtNzUgICAtPiA3NQ0KK2RxbW5zMTA1IG1pbnVzICAgICAgIDcuNTAgICAtPiAtNy41MA0KK2RxbW5zMTA2IG1pbnVzICAgICAgLTcuNTAgICAtPiA3LjUwDQorZHFtbnMxMDcgbWludXMgICAgICAgNy41MDAgIC0+IC03LjUwMA0KK2RxbW5zMTA4IG1pbnVzICAgICAgLTcuNTAwICAtPiA3LjUwMA0KKw0KKy0tIHplcm9zDQorZHFtbnMxMTEgbWludXMgICAgICAgICAgMCAgIC0+IDANCitkcW1uczExMiBtaW51cyAgICAgICAgIC0wICAgLT4gMA0KK2RxbW5zMTEzIG1pbnVzICAgICAgIDBFKzQgICAtPiAwRSs0DQorZHFtbnMxMTQgbWludXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCitkcW1uczExNSBtaW51cyAgICAgMC4wMDAwICAgLT4gMC4wMDAwDQorZHFtbnMxMTYgbWludXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMA0KK2RxbW5zMTE3IG1pbnVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkcW1uczExOCBtaW51cyAgICAgLTBFLTE0MSAgLT4gMEUtMTQxDQorDQorLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMNCitkcW1uczEyMSBtaW51cyAgIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCitkcW1uczEyMiBtaW51cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gIDI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCitkcW1uczEyMyBtaW51cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCitkcW1uczEyNCBtaW51cyAgLTEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDENCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RxbW5zMTMxIG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbW5zMTMyIG1pbnVzICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQorZHFtbnMxMzMgbWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFtbnMxMzQgbWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsDQorDQorZHFtbnMxMzUgbWludXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQorZHFtbnMxMzYgbWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFtbnMxMzcgbWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCitkcW1uczEzOCBtaW51cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTXVsdGlwbHkuZGVjVGVzdAppbmRleCA4Mzg3YTg1Li42NzZjMWY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFNdWx0aXBseS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU11bHRpcGx5LmRlY1Rlc3QKQEAgLTEsNTg5ICsxLDU4OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcU11bHRpcGx5LmRlY1Rlc3QgLS0gZGVjUXVhZCBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzCi1kcW11bDAwMCBtdWx0aXBseSAyICAgICAgMiAtPiA0Ci1kcW11bDAwMSBtdWx0aXBseSAyICAgICAgMyAtPiA2Ci1kcW11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1Ci1kcW11bDAwMyBtdWx0aXBseSA1ICAgICAgMiAtPiAxMAotZHFtdWwwMDQgbXVsdGlwbHkgMS4yMCAgIDIgLT4gMi40MAotZHFtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMAotZHFtdWwwMDYgbXVsdGlwbHkgMS4yMCAgLTIgLT4gLTIuNDAKLWRxbXVsMDA3IG11bHRpcGx5IC0xLjIwICAyIC0+IC0yLjQwCi1kcW11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMAotZHFtdWwwMDkgbXVsdGlwbHkgLTEuMjAgLTIgLT4gMi40MAotZHFtdWwwMTAgbXVsdGlwbHkgNS4wOSA3LjEgLT4gMzYuMTM5Ci1kcW11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wCi1kcW11bDAxMiBtdWx0aXBseSAyLjUwICAgNCAtPiAxMC4wMAotZHFtdWwwMTMgbXVsdGlwbHkgMS4yMzQ1Njc4OSAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMS4yMzQ1Njc4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgUm91bmRlZAotZHFtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDAKLWRxbXVsMDE2IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsMDE3IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsMDE4IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsMDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC05Ljk5OTk5OTk5OTk5OTk5OTk5IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gemVyb3MsIGV0Yy4KLWRxbXVsMDIxIG11bHRpcGx5ICAwICAgICAgMCAgICAgLT4gIDAKLWRxbXVsMDIyIG11bHRpcGx5ICAwICAgICAtMCAgICAgLT4gLTAKLWRxbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTAKLWRxbXVsMDI0IG11bHRpcGx5IC0wICAgICAtMCAgICAgLT4gIDAKLWRxbXVsMDI1IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKLWRxbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKLWRxbXVsMDI3IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKLWRxbXVsMDI4IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDAKLWRxbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDAKLWRxbXVsMDMxIG11bHRpcGx5ICAwMC4wMCAgMC4wMDAgLT4gIDAuMDAwMDAKLWRxbXVsMDMyIG11bHRpcGx5ICAwMC4wMCAgMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kcW11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZHFtdWwwMzQgbXVsdGlwbHkgLTUuMDAgICAxRS0zICAtPiAtMC4wMDUwMAotZHFtdWwwMzUgbXVsdGlwbHkgLTAwLjAwICAwLjAwMCAtPiAtMC4wMDAwMAotZHFtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWRxbXVsMDM3IG11bHRpcGx5IC0wRS0zICAgMDAuMDAgLT4gLTAuMDAwMDAgICAgIC0tIGxocyBpcyAwCi1kcW11bDAzOCBtdWx0aXBseSAgNS4wMCAgLTFFLTMgIC0+IC0wLjAwNTAwCi1kcW11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwCi1kcW11bDA0MCBtdWx0aXBseSAgMDAuMDAgLTBFLTMgIC0+IC0wLjAwMDAwICAgICAtLSByaHMgaXMgMAotZHFtdWwwNDEgbXVsdGlwbHkgIDBFLTMgIC0wMC4wMCAtPiAtMC4wMDAwMCAgICAgLS0gbGhzIGlzIDAKLWRxbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDAKLWRxbXVsMDQzIG11bHRpcGx5IC0wMC4wMCAtMC4wMDAgLT4gIDAuMDAwMDAKLWRxbXVsMDQ0IG11bHRpcGx5IC0wMC4wMCAtMEUtMyAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwCi1kcW11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCi1kcW11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjAKLWRxbXVsMDUxIG11bHRpcGx5IDcgICAgMyAgICAgICAgLT4gMjEKLWRxbXVsMDUyIG11bHRpcGx5IDAuOSAgMC44ICAgICAgLT4gMC43MgotZHFtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wCi1kcW11bDA1NCBtdWx0aXBseSA2NTQzMjEgNjU0MzIxIC0+IDQyODEzNTk3MTA0MQotCi1kcW11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5Ci1kcW11bDA2MSBtdWx0aXBseSAxMjMuNDUgMWU4ICAtPiAgMS4yMzQ1RSsxMAotZHFtdWwwNjIgbXVsdGlwbHkgMTIzLjQ1IDFlKzkgLT4gIDEuMjM0NUUrMTEKLWRxbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyCi1kcW11bDA2NCBtdWx0aXBseSAxMjMuNDUgMWUxMSAtPiAgMS4yMzQ1RSsxMwotZHFtdWwwNjUgbXVsdGlwbHkgMTIzLjQ1IDFlMTIgLT4gIDEuMjM0NUUrMTQKLWRxbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1Ci0KLQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCi0tLSAgICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZHFtdWwwODAgbXVsdGlwbHkgMC4xIDEyMzAxMjM0NTY0NTY3ODkgICAgIC0+IDEyMzAxMjM0NTY0NTY3OC45Ci1kcW11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkKLWRxbXVsMDkwIG11bHRpcGx5IDEyMzAxMjM0NTY0NTY3ODkgICAgIDAuMSAtPiAxMjMwMTIzNDU2NDU2NzguOQotZHFtdWwwOTQgbXVsdGlwbHkgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgMC4xIC0+IDEyMzAxMjM0NTY0NTY3OC45Ci0KLS0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgYW5kIGNhcnJpZXMKLWRxbXVsMTAxIG11bHRpcGx5IDkgOSAgIC0+IDgxCi1kcW11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwCi1kcW11bDEwMyBtdWx0aXBseSA5IDkwMCAgIC0+IDgxMDAKLWRxbXVsMTA0IG11bHRpcGx5IDkgOTAwMCAgIC0+IDgxMDAwCi1kcW11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwCi1kcW11bDEwNiBtdWx0aXBseSA5IDkwMDAwMCAgIC0+IDgxMDAwMDAKLWRxbXVsMTA3IG11bHRpcGx5IDkgOTAwMDAwMCAgIC0+IDgxMDAwMDAwCi1kcW11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwCi1kcW11bDEwOSBtdWx0aXBseSA5IDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAKLWRxbXVsMTEwIG11bHRpcGx5IDkgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwCi1kcW11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwCi1kcW11bDExMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAKLWRxbXVsMTEzIG11bHRpcGx5IDkgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwCi1kcW11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwCi1kcW11bDExNSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMTYgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAotLS1kcW11bDExOCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMTkgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAotLS1kcW11bDEyMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMjIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tZHFtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKLWRxbXVsMTMxIG11bHRpcGx5IDMgMyAgIC0+IDkKLWRxbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MAotZHFtdWwxMzMgbXVsdGlwbHkgMyAzMDAgICAtPiA5MDAKLWRxbXVsMTM0IG11bHRpcGx5IDMgMzAwMCAgIC0+IDkwMDAKLWRxbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMAotZHFtdWwxMzYgbXVsdGlwbHkgMyAzMDAwMDAgICAtPiA5MDAwMDAKLWRxbXVsMTM3IG11bHRpcGx5IDMgMzAwMDAwMCAgIC0+IDkwMDAwMDAKLWRxbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMAotZHFtdWwxMzkgbXVsdGlwbHkgMyAzMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAKLWRxbXVsMTQwIG11bHRpcGx5IDMgMzAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAKLWRxbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMAotZHFtdWwxNDIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAKLWRxbXVsMTQzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAKLWRxbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMAotZHFtdWwxNDUgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAKLWRxbXVsMTQ2IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTQ3IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxNDggbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTQ5IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTUwIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxNTEgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTUyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTUzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotCi1kcW11bDI2MyBtdWx0aXBseSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4Mjk2IEluZXhhY3QgUm91bmRlZAotCi0tLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nCi1kcW11bDMwMSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOSAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzAyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMwMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMwNCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzA1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMwNiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMwNyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzA4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMwOSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMxMCBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzExIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMxMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMxMyBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzE0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMxNSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDMxNiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMzE3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZAotZHFtdWwzMTggbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNSAgUm91bmRlZAotZHFtdWwzMTkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYgIFJvdW5kZWQKLWRxbXVsMzIwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZAotZHFtdWwzMjEgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCAgUm91bmRlZAotZHFtdWwzMjIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzkgIFJvdW5kZWQKLWRxbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotZHFtdWw1MDQgIG11bHRpcGx5ICAwRS00MjYwIDEwMDBFLTQyNjAgIC0+IDBFLTYxNzYgQ2xhbXBlZAotZHFtdWw1MDUgIG11bHRpcGx5ICAxMDBFKzQyNjAgMEUrNDI2MCAgIC0+IDBFKzYxMTEgQ2xhbXBlZAotCi0tLSBtaXhlZCB3aXRoIHplcm9zCi1kcW11bDU0MSBtdWx0aXBseSAgMCAgICAtMSAgICAgLT4gLTAKLWRxbXVsNTQyIG11bHRpcGx5IC0wICAgIC0xICAgICAtPiAgMAotZHFtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwCi1kcW11bDU0NCBtdWx0aXBseSAtMCAgICAgMSAgICAgLT4gLTAKLWRxbXVsNTQ1IG11bHRpcGx5IC0xICAgICAwICAgICAtPiAtMAotZHFtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwCi1kcW11bDU0NyBtdWx0aXBseSAgMSAgICAgMCAgICAgLT4gIDAKLWRxbXVsNTQ4IG11bHRpcGx5ICAxICAgIC0wICAgICAtPiAtMAotCi1kcW11bDU1MSBtdWx0aXBseSAgMC4wICAtMSAgICAgLT4gLTAuMAotZHFtdWw1NTIgbXVsdGlwbHkgLTAuMCAgLTEgICAgIC0+ICAwLjAKLWRxbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wCi1kcW11bDU1NCBtdWx0aXBseSAtMC4wICAgMSAgICAgLT4gLTAuMAotZHFtdWw1NTUgbXVsdGlwbHkgLTEuMCAgIDAgICAgIC0+IC0wLjAKLWRxbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wCi1kcW11bDU1NyBtdWx0aXBseSAgMS4wICAgMCAgICAgLT4gIDAuMAotZHFtdWw1NTggbXVsdGlwbHkgIDEuMCAgLTAgICAgIC0+IC0wLjAKLQotZHFtdWw1NjEgbXVsdGlwbHkgIDAgICAgLTEuMCAgIC0+IC0wLjAKLWRxbXVsNTYyIG11bHRpcGx5IC0wICAgIC0xLjAgICAtPiAgMC4wCi1kcW11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMAotZHFtdWw1NjQgbXVsdGlwbHkgLTAgICAgIDEuMCAgIC0+IC0wLjAKLWRxbXVsNTY1IG11bHRpcGx5IC0xICAgICAwLjAgICAtPiAtMC4wCi1kcW11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMAotZHFtdWw1NjcgbXVsdGlwbHkgIDEgICAgIDAuMCAgIC0+ICAwLjAKLWRxbXVsNTY4IG11bHRpcGx5ICAxICAgIC0wLjAgICAtPiAtMC4wCi0KLWRxbXVsNTcxIG11bHRpcGx5ICAwLjAgIC0xLjAgICAtPiAtMC4wMAotZHFtdWw1NzIgbXVsdGlwbHkgLTAuMCAgLTEuMCAgIC0+ICAwLjAwCi1kcW11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDAKLWRxbXVsNTc0IG11bHRpcGx5IC0wLjAgICAxLjAgICAtPiAtMC4wMAotZHFtdWw1NzUgbXVsdGlwbHkgLTEuMCAgIDAuMCAgIC0+IC0wLjAwCi1kcW11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDAKLWRxbXVsNTc3IG11bHRpcGx5ICAxLjAgICAwLjAgICAtPiAgMC4wMAotZHFtdWw1NzggbXVsdGlwbHkgIDEuMCAgLTAuMCAgIC0+IC0wLjAwCi0KLQotLS0gU3BlY2lhbHMKLWRxbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXVsNTgxIG11bHRpcGx5ICBJbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRxbXVsNTgyIG11bHRpcGx5ICBJbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRxbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw1ODQgbXVsdGlwbHkgIEluZiAgIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDU4NSBtdWx0aXBseSAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kcW11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kcW11bDU4NyBtdWx0aXBseSAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW11bDU4OCBtdWx0aXBseSAtMTAwMCAgSW5mICAgLT4gLUluZmluaXR5Ci1kcW11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1kcW11bDU5MCBtdWx0aXBseSAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5Ci1kcW11bDU5MSBtdWx0aXBseSAtMCAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw1OTMgbXVsdGlwbHkgIDEgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFtdWw1OTQgbXVsdGlwbHkgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQotZHFtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1kcW11bDYwMCBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5Ci1kcW11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1kcW11bDYwMiBtdWx0aXBseSAtSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kcW11bDYwMyBtdWx0aXBseSAtSW5mICAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2MDUgbXVsdGlwbHkgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFtdWw2MDYgbXVsdGlwbHkgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQotZHFtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQotZHFtdWw2MDggbXVsdGlwbHkgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQotZHFtdWw2MDkgbXVsdGlwbHkgLUluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotZHFtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQotZHFtdWw2MTEgbXVsdGlwbHkgLTAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDYxMiBtdWx0aXBseSAgMCAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXVsNjE0IG11bHRpcGx5ICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbXVsNjE1IG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLQotZHFtdWw2MjEgbXVsdGlwbHkgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRxbXVsNjIyIG11bHRpcGx5ICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kcW11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTgotZHFtdWw2MjQgbXVsdGlwbHkgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRxbXVsNjI1IG11bHRpcGx5ICBOYU4gIDAgICAgICAtPiAgTmFOCi1kcW11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTgotZHFtdWw2MjcgbXVsdGlwbHkgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRxbXVsNjI4IG11bHRpcGx5ICBOYU4gIEluZiAgICAtPiAgTmFOCi1kcW11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTgotZHFtdWw2MzAgbXVsdGlwbHkgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRxbXVsNjMxIG11bHRpcGx5IC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kcW11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTgotZHFtdWw2MzMgbXVsdGlwbHkgLTAgICAgTmFOICAgIC0+ICBOYU4KLWRxbXVsNjM0IG11bHRpcGx5ICAwICAgIE5hTiAgICAtPiAgTmFOCi1kcW11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTgotZHFtdWw2MzYgbXVsdGlwbHkgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRxbXVsNjM3IG11bHRpcGx5ICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRxbXVsNjQxIG11bHRpcGx5ICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NDIgbXVsdGlwbHkgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjQ0IG11bHRpcGx5ICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NDUgbXVsdGlwbHkgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjQ3IG11bHRpcGx5ICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NDggbXVsdGlwbHkgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjUwIG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NTEgbXVsdGlwbHkgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjUzIG11bHRpcGx5IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NTQgbXVsdGlwbHkgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjU2IG11bHRpcGx5ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw2NTcgbXVsdGlwbHkgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjU5IG11bHRpcGx5ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcW11bDY2MSBtdWx0aXBseSAgTmFOOSAtSW5mICAgLT4gIE5hTjkKLWRxbXVsNjYyIG11bHRpcGx5ICBOYU44ICA5OTkgICAtPiAgTmFOOAotZHFtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQotZHFtdWw2NjQgbXVsdGlwbHkgIE5hTjYgIE5hTjUgIC0+ICBOYU42Ci1kcW11bDY2NSBtdWx0aXBseSAtSW5mICAgTmFONCAgLT4gIE5hTjQKLWRxbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMKLWRxbXVsNjY3IG11bHRpcGx5ICBJbmYgICBOYU4yICAtPiAgTmFOMgotCi1kcW11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3MiBtdWx0aXBseSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3MyBtdWx0aXBseSAgc05hTjk3ICBOYU4gICAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3NSBtdWx0aXBseSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3NiBtdWx0aXBseSAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3OCBtdWx0aXBseSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDY3OSBtdWx0aXBseSAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWRxbXVsNjgxIG11bHRpcGx5IC1OYU45IC1JbmYgICAtPiAtTmFOOQotZHFtdWw2ODIgbXVsdGlwbHkgLU5hTjggIDk5OSAgIC0+IC1OYU44Ci1kcW11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxCi1kcW11bDY4NCBtdWx0aXBseSAtTmFONiAtTmFONSAgLT4gLU5hTjYKLWRxbXVsNjg1IG11bHRpcGx5IC1JbmYgIC1OYU40ICAtPiAtTmFONAotZHFtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMwotZHFtdWw2ODcgbXVsdGlwbHkgIEluZiAgLU5hTjIgIC0+IC1OYU4yCi0KLWRxbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjkyIG11bHRpcGx5IC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjkzIG11bHRpcGx5IC1zTmFOOTcgIE5hTiAgICAtPiAtTmFOOTcgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk1IG11bHRpcGx5IC1OYU45NSAgLXNOYU45MyAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk2IG11bHRpcGx5IC1JbmYgICAgLXNOYU45MiAtPiAtTmFOOTIgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk4IG11bHRpcGx5ICBJbmYgICAgLXNOYU45MCAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNjk5IG11bHRpcGx5IC1OYU4gICAgLXNOYU44OSAtPiAtTmFOODkgSW52YWxpZF9vcGVyYXRpb24KLQotZHFtdWw3MDEgbXVsdGlwbHkgLU5hTiAgLUluZiAgIC0+IC1OYU4KLWRxbXVsNzAyIG11bHRpcGx5IC1OYU4gICA5OTkgICAtPiAtTmFOCi1kcW11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTgotZHFtdWw3MDQgbXVsdGlwbHkgLU5hTiAgLU5hTiAgIC0+IC1OYU4KLWRxbXVsNzA1IG11bHRpcGx5IC1JbmYgIC1OYU4wICAtPiAtTmFOCi1kcW11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTgotZHFtdWw3MDcgbXVsdGlwbHkgIEluZiAgLU5hTiAgIC0+IC1OYU4KLQotZHFtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNzEyIG11bHRpcGx5IC1zTmFOICAgLTExICAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDcxMyBtdWx0aXBseSAtc05hTjAwICBOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNzE1IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDcxNiBtdWx0aXBseSAtSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsNzE4IG11bHRpcGx5ICBJbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW11bDcxOSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIG5vdGUgc3Vibm9ybWFsIHJlc3VsdHMKLS0tIHNpZ25zCi1kcW11bDc1MSBtdWx0aXBseSAgMWUrNDI3NyAgMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc1MiBtdWx0aXBseSAgMWUrNDI3NyAtMWUrMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc1MyBtdWx0aXBseSAtMWUrNDI3NyAgMWUrMzMxMSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc1NCBtdWx0aXBseSAtMWUrNDI3NyAtMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc1NSBtdWx0aXBseSAgMWUtNDI3NyAgMWUtMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDc1NiBtdWx0aXBseSAgMWUtNDI3NyAtMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDc1NyBtdWx0aXBseSAtMWUtNDI3NyAgMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDc1OCBtdWx0aXBseSAtMWUtNDI3NyAtMWUtMzMxMSAtPiAgMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQotZHFtdWw3NjAgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDEgLT4gMUUtNjE3MCBTdWJub3JtYWwKLWRxbXVsNzYxIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAyIC0+IDFFLTYxNzEgU3Vibm9ybWFsCi1kcW11bDc2MiBtdWx0aXBseSAxZS02MDY5IDFlLTEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbAotZHFtdWw3NjMgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDQgLT4gMUUtNjE3MyBTdWJub3JtYWwKLWRxbXVsNzY0IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA1IC0+IDFFLTYxNzQgU3Vibm9ybWFsCi1kcW11bDc2NSBtdWx0aXBseSAxZS02MDY5IDFlLTEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbAotZHFtdWw3NjYgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDcgLT4gMUUtNjE3NiBTdWJub3JtYWwKLWRxbXVsNzY3IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA4IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFtdWw3NjggbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDc2OSBtdWx0aXBseSAxZS02MDY5IDFlLTExMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLS0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10KLWRxbXVsNzcwIG11bHRpcGx5IDFlKzQwIDFlKzYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZAotZHFtdWw3NzEgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgIENsYW1wZWQKLWRxbXVsNzcyIG11bHRpcGx5IDFlKzQwIDFlKzYxMDMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyAgQ2xhbXBlZAotZHFtdWw3NzMgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAotZHFtdWw3NzQgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsNzc1IG11bHRpcGx5IDFlKzQwIDFlKzYxMDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc3NiBtdWx0aXBseSAxZSs0MCAxZSs2MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFtdWw3NzcgbXVsdGlwbHkgMWUrNDAgMWUrNjEwOCAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsNzc4IG11bHRpcGx5IDFlKzQwIDFlKzYxMDkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW11bDc3OSBtdWx0aXBseSAxZSs0MCAxZSs2MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotCi1kcW11bDgwMSBtdWx0aXBseSAgMS4wMDAwRS02MTcyICAxICAgICAtPiAxLjAwMDBFLTYxNzIgU3Vibm9ybWFsCi1kcW11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTYxNzIgICAxZS0xICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsCi1kcW11bDgwMyBtdWx0aXBseSAgMS4wMEUtNjE3MiAgICAxZS0yICAtPiAxLjAwRS02MTc0ICAgU3Vibm9ybWFsCi1kcW11bDgwNCBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS0zICAtPiAxLjBFLTYxNzUgICAgU3Vibm9ybWFsCi1kcW11bDgwNSBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZAotZHFtdWw4MDYgbXVsdGlwbHkgIDEuM0UtNjE3MiAgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsODA3IG11bHRpcGx5ICAxLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgwOCBtdWx0aXBseSAgMS43RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFtdWw4MDkgbXVsdGlwbHkgIDIuM0UtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsODEwIG11bHRpcGx5ICAyLjVFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgxMSBtdWx0aXBseSAgMi43RS02MTcyICAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFtdWw4MTIgbXVsdGlwbHkgIDEuNDlFLTYxNzIgICAgMWUtNCAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsODEzIG11bHRpcGx5ICAxLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgxNCBtdWx0aXBseSAgMS41MUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFtdWw4MTUgbXVsdGlwbHkgIDIuNDlFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsODE2IG11bHRpcGx5ICAyLjUwRS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgxNyBtdWx0aXBseSAgMi41MUUtNjE3MiAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kcW11bDgxOCBtdWx0aXBseSAgMUUtNjE3MiAgICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwKLWRxbXVsODE5IG11bHRpcGx5ICAzRS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxbXVsODIwIG11bHRpcGx5ICA1RS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxbXVsODIxIG11bHRpcGx5ICA3RS02MTcyICAgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgyMiBtdWx0aXBseSAgOUUtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFtdWw4MjMgbXVsdGlwbHkgIDkuOUUtNjE3MiAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZHFtdWw4MjQgbXVsdGlwbHkgIDFFLTYxNzIgICAgICAtMWUtNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsCi1kcW11bDgyNSBtdWx0aXBseSAgM0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDgyNiBtdWx0aXBseSAtNUUtNjE3MiAgICAgICAxZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kcW11bDgyNyBtdWx0aXBseSAgN0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFtdWw4MjggbXVsdGlwbHkgLTlFLTYxNzIgICAgICAgMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbXVsODI5IG11bHRpcGx5ICA5LjlFLTYxNzIgICAgLTFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW11bDgzMCBtdWx0aXBseSAgMy4wRS02MTcyICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLWRxbXVsODMxIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTIwMCAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxbXVsODMyIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OSAtPiAxRS02MTc2ICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcW11bDgzMyBtdWx0aXBseSAgMS4wRS01OTc3ICAgICAxZS0xOTggLT4gMS4wRS02MTc1ICAgIFN1Ym5vcm1hbAotZHFtdWw4MzQgbXVsdGlwbHkgIDIuMEUtNTk3NyAgICAgMmUtMTk4IC0+IDQuMEUtNjE3NSAgICBTdWJub3JtYWwKLWRxbXVsODM1IG11bHRpcGx5ICA0LjBFLTU5NzcgICAgIDRlLTE5OCAtPiAxLjYwRS02MTc0ICAgU3Vibm9ybWFsCi1kcW11bDgzNiBtdWx0aXBseSAxMC4wRS01OTc3ICAgIDEwZS0xOTggLT4gMS4wMDBFLTYxNzMgIFN1Ym5vcm1hbAotZHFtdWw4MzcgbXVsdGlwbHkgMzAuMEUtNTk3NyAgICAzMGUtMTk4IC0+IDkuMDAwRS02MTczICBTdWJub3JtYWwKLWRxbXVsODM4IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NiAtPiAxLjYwMDBFLTYxNDUgU3Vibm9ybWFsCi1kcW11bDgzOSBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjUgLT4gMS42MDAwRS02MTQ0IFN1Ym5vcm1hbAotZHFtdWw4NDAgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY0IC0+IDEuNjAwMEUtNjE0MwotCi0tLSBMb25nIG9wZXJhbmQgb3ZlcmZsb3cgbWF5IGJlIGEgZGlmZmVyZW50IHBhdGgKLWRxbXVsODcwIG11bHRpcGx5IDEwMCAgOS45OTlFKzYxNDMgICAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRxbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzYxNDMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRxbXVsODcyIG11bHRpcGx5ICAgICAgOS45OTlFKzYxNDMgMTAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWRxbXVsODczIG11bHRpcGx5ICAgICAtOS45OTlFKzYxNDMgMTAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKLWRxbXVsODgxIG11bHRpcGx5ICAxLjIzNDdFLTYxMzMgMS4yMzQ3RS00MCAgLT4gIDEuNTI0RS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcW11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFtdWw4ODMgbXVsdGlwbHkgIDEuMjNFLTYxMzMgIDEuMjNFLTQwICAgICAtPiAgMS41MTNFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxbXVsODg0IG11bHRpcGx5ICAxLjJFLTYxMzMgICAxLjJFLTQwICAgICAgLT4gIDEuNDRFLTYxNzMgIFN1Ym5vcm1hbAotZHFtdWw4ODUgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsCi1kcW11bDg4NiBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4yRS00MiAgICAgIC0+ICAxLjRFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFtdWw4ODcgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuM0UtNDIgICAgICAtPiAgMS42RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWRxbXVsODg4IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1kcW11bDg4OSBtdWx0aXBseSAgMS4zRS02MTMzICAgMS4zRS00MyAgICAgIC0+ICAgIDJFLTYxNzYgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZHFtdWw4OTAgbXVsdGlwbHkgIDEuM0UtNjEzNCAgIDEuM0UtNDMgICAgICAtPiAgICAwRS02MTc2ICAgQ2xhbXBlZCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotCi1kcW11bDg5MSBtdWx0aXBseSAgMS4yMzQ1RS0zOSAgICAxLjIzNEUtNjEzMyAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcW11bDg5MiBtdWx0aXBseSAgMS4yMzQ1NkUtMzkgICAxLjIzNEUtNjEzMyAtPiAgMS41MjM0RS02MTcyIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcW11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRxbXVsODk0IG11bHRpcGx5ICAxLjIzNDU2RS00MCAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzRS02MTczICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZHFtdWw4OTUgbXVsdGlwbHkgIDEuMjM0NUUtNDEgICAxLjIzNEUtNjEzMyAtPiAgMS41MkUtNjE3NCAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1kcW11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gTm93IGV4cGxvcmUgdGhlIGNhc2Ugd2hlcmUgd2UgZ2V0IGEgbm9ybWFsIHJlc3VsdCB3aXRoIFVuZGVyZmxvdwotLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0Ci1kcW11bDkwNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDEgICAgICAgICAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzCi1kcW11bDkwNyBtdWx0aXBseSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4KLWRxbXVsOTA4IG11bHRpcGx5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLQotLS0gaHVnZXN0Ci1kcW11bDkwOSBtdWx0aXBseSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzY3IEluZXhhY3QgUm91bmRlZAotLS0gVkcgY2FzZQotZHFtdWw5MTAgbXVsdGlwbHkgOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OCA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MCAtPiA3LjA0OTAwMDAwMDAwMDAxMDc5NTQ4ODAwMDAwMDAwMDAwMEUtMzA5NyBSb3VuZGVkCi0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQotcHJlY2lzaW9uOiAgIDM0Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0MwotZHFtdWw5MTEgIG11bHRpcGx5IDEzMEUtMiAgMTIwRS0yIC0+IDEuNTYwMAotZHFtdWw5MTIgIG11bHRpcGx5IDEzMEUtMiAgMTJFLTEgIC0+IDEuNTYwCi1kcW11bDkxMyAgbXVsdGlwbHkgMTMwRS0yICAxRTAgICAgLT4gMS4zMAotZHFtdWw5MTQgIG11bHRpcGx5IDFFMiAgICAgMUU0ICAgIC0+IDFFKzYKLQotLS0gcG93ZXItb2YtdGVuIGVkZ2UgY2FzZXMKLWRxbXVsMTAwMSBtdWx0aXBseSAgMSAgICAgIDEwICAgICAgICAgICAgICAgLT4gMTAKLWRxbXVsMTAwMiBtdWx0aXBseSAgMSAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwCi1kcW11bDEwMDMgbXVsdGlwbHkgIDEgICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAKLWRxbXVsMTAwNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAKLWRxbXVsMTAwNSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwCi1kcW11bDEwMDYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAKLWRxbXVsMTAwNyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAKLWRxbXVsMTAwOCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwCi1kcW11bDEwMDkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAKLWRxbXVsMTAxMCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAKLWRxbXVsMTAxMSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwCi1kcW11bDEwMTIgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAKLWRxbXVsMTAxMyBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwICAgLT4gMTAwMDAwMDAwMDAwMDAKLWRxbXVsMTAxNCBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwCi1kcW11bDEwMTUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAKLQotZHFtdWwxMDE2IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwMTcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwMTggbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTAxOSBtdWx0aXBseSAgMSAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwMjAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotZHFtdWwxMDIxIG11bHRpcGx5ICAxMCAgICAgMSAgICAgICAgICAgICAgICAtPiAxMAotZHFtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAKLWRxbXVsMTAyMyBtdWx0aXBseSAgMTAgICAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMAotZHFtdWwxMDI0IG11bHRpcGx5ICAxMCAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMAotZHFtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAKLWRxbXVsMTAyNiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMAotZHFtdWwxMDI3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMAotZHFtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAKLWRxbXVsMTAyOSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMAotZHFtdWwxMDMwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMAotZHFtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAKLWRxbXVsMTAzMiBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMAotZHFtdWwxMDMzIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMAotZHFtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTAzNSBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMCAgLT4gMTAwMDAwMDAwMDAwMDAwMAotCi1kcW11bDEwMzYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDM3IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwMzggbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDM5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDQwIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotZHFtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wCi1kcW11bDEwNDIgbXVsdGlwbHkgIDEwMCAgICAxICAgICAgICAgICAgICAgIC0+IDEwMAotZHFtdWwxMDQzIG11bHRpcGx5ICAxMDAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwCi1kcW11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwCi1kcW11bDEwNDUgbXVsdGlwbHkgIDEwMCAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwMAotZHFtdWwxMDQ2IG11bHRpcGx5ICAxMDAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwCi1kcW11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwCi1kcW11bDEwNDggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwMAotZHFtdWwxMDQ5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwCi1kcW11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwCi1kcW11bDEwNTEgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwMAotZHFtdWwxMDUyIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwCi1kcW11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCi1kcW11bDEwNTQgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDU1IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCi0KLWRxbXVsMTA1NiBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTA1NyBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwNTggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwNTkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTA2MCBtdWx0aXBseSAgMTAwICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLQotZHFtdWwxMDYxIG11bHRpcGx5ICAxMDAwICAgMC4wMSAgICAgICAgICAgICAtPiAxMC4wMAotZHFtdWwxMDYyIG11bHRpcGx5ICAxMDAwICAgMC4xICAgICAgICAgICAgICAtPiAxMDAuMAotZHFtdWwxMDYzIG11bHRpcGx5ICAxMDAwICAgMSAgICAgICAgICAgICAgICAtPiAxMDAwCi1kcW11bDEwNjQgbXVsdGlwbHkgIDEwMDAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDAwCi1kcW11bDEwNjUgbXVsdGlwbHkgIDEwMDAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMAotZHFtdWwxMDY2IG11bHRpcGx5ICAxMDAwICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwCi1kcW11bDEwNjcgbXVsdGlwbHkgIDEwMDAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDAwCi1kcW11bDEwNjggbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMAotZHFtdWwxMDY5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwCi1kcW11bDEwNzAgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDAwCi1kcW11bDEwNzEgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMAotZHFtdWwxMDcyIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwCi1kcW11bDEwNzMgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDAwCi1kcW11bDEwNzQgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDc1IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAwCi0KLWRxbXVsMTA3NiBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDc3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDc4IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW11bDEwNzkgbXVsdGlwbHkgIDEwMDAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDgwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLWRxbXVsMTA4MSBtdWx0aXBseSAgMTAwMDAgIDAuMDAxICAgICAgICAgICAgLT4gMTAuMDAwCi1kcW11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMAotZHFtdWwxMDgzIG11bHRpcGx5ICAxMDAwMCAgMC4xICAgICAgICAgICAgICAtPiAxMDAwLjAKLWRxbXVsMTA4NCBtdWx0aXBseSAgMTAwMDAgIDEgICAgICAgICAgICAgICAgLT4gMTAwMDAKLWRxbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwCi1kcW11bDEwODYgbXVsdGlwbHkgIDEwMDAwICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwMDAKLWRxbXVsMTA4NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAgICAgICAgICAgICAgLT4gMTAwMDAwMDAKLWRxbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwCi1kcW11bDEwODkgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwMDAKLWRxbXVsMTA5MCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAgICAgICAgICAgLT4gMTAwMDAwMDAwMDAKLWRxbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwCi1kcW11bDEwOTIgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwMDAKLWRxbXVsMTA5MyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAgICAgICAgLT4gMTAwMDAwMDAwMDAwMDAKLWRxbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwCi1kcW11bDEwOTUgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwMDAKLQotZHFtdWwxMDk2IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTA5NyBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFtdWwxMDk4IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTA5OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbXVsMTEwMCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLWRxbXVsMTEwNyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMAotZHFtdWwxMTA4IG11bHRpcGx5ICAxMDAwMCAgIDk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTkwMDAwCi0KLS0tIE51bGwgdGVzdHMKLWRxbXVsOTk5MCBtdWx0aXBseSAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxbXVsOTk5MSBtdWx0aXBseSAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFNdWx0aXBseS5kZWNUZXN0IC0tIGRlY1F1YWQgbXVsdGlwbGljYXRpb24gICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZA0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZHFtdWwwMDAgbXVsdGlwbHkgMiAgICAgIDIgLT4gNA0KK2RxbXVsMDAxIG11bHRpcGx5IDIgICAgICAzIC0+IDYNCitkcW11bDAwMiBtdWx0aXBseSA1ICAgICAgMSAtPiA1DQorZHFtdWwwMDMgbXVsdGlwbHkgNSAgICAgIDIgLT4gMTANCitkcW11bDAwNCBtdWx0aXBseSAxLjIwICAgMiAtPiAyLjQwDQorZHFtdWwwMDUgbXVsdGlwbHkgMS4yMCAgIDAgLT4gMC4wMA0KK2RxbXVsMDA2IG11bHRpcGx5IDEuMjAgIC0yIC0+IC0yLjQwDQorZHFtdWwwMDcgbXVsdGlwbHkgLTEuMjAgIDIgLT4gLTIuNDANCitkcW11bDAwOCBtdWx0aXBseSAtMS4yMCAgMCAtPiAtMC4wMA0KK2RxbXVsMDA5IG11bHRpcGx5IC0xLjIwIC0yIC0+IDIuNDANCitkcW11bDAxMCBtdWx0aXBseSA1LjA5IDcuMSAtPiAzNi4xMzkNCitkcW11bDAxMSBtdWx0aXBseSAyLjUgICAgNCAtPiAxMC4wDQorZHFtdWwwMTIgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCitkcW11bDAxMyBtdWx0aXBseSAxLjIzNDU2Nzg5IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxLjIzNDU2Nzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBSb3VuZGVkDQorZHFtdWwwMTUgbXVsdGlwbHkgMi41MCAgIDQgLT4gMTAuMDANCitkcW11bDAxNiBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OSAgOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZHFtdWwwMTcgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTkgLTkuOTk5OTk5OTk5OTk5OTk5OTkgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5OTgwMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsMDE4IG11bHRpcGx5IC05Ljk5OTk5OTk5OTk5OTk5OTk5ICA5Ljk5OTk5OTk5OTk5OTk5OTk5IC0+IC05OS45OTk5OTk5OTk5OTk5OTk4MDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDAxOSBtdWx0aXBseSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtOS45OTk5OTk5OTk5OTk5OTk5OSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5ODAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gemVyb3MsIGV0Yy4NCitkcW11bDAyMSBtdWx0aXBseSAgMCAgICAgIDAgICAgIC0+ICAwDQorZHFtdWwwMjIgbXVsdGlwbHkgIDAgICAgIC0wICAgICAtPiAtMA0KK2RxbXVsMDIzIG11bHRpcGx5IC0wICAgICAgMCAgICAgLT4gLTANCitkcW11bDAyNCBtdWx0aXBseSAtMCAgICAgLTAgICAgIC0+ICAwDQorZHFtdWwwMjUgbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KK2RxbXVsMDI2IG11bHRpcGx5IC0wLjAgICAtMC4wICAgLT4gIDAuMDANCitkcW11bDAyNyBtdWx0aXBseSAtMC4wICAgLTAuMCAgIC0+ICAwLjAwDQorZHFtdWwwMjggbXVsdGlwbHkgLTAuMCAgIC0wLjAgICAtPiAgMC4wMA0KK2RxbXVsMDMwIG11bHRpcGx5ICA1LjAwICAgMUUtMyAgLT4gIDAuMDA1MDANCitkcW11bDAzMSBtdWx0aXBseSAgMDAuMDAgIDAuMDAwIC0+ICAwLjAwMDAwDQorZHFtdWwwMzIgbXVsdGlwbHkgIDAwLjAwICAwRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcW11bDAzMyBtdWx0aXBseSAgMEUtMyAgIDAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2RxbXVsMDM0IG11bHRpcGx5IC01LjAwICAgMUUtMyAgLT4gLTAuMDA1MDANCitkcW11bDAzNSBtdWx0aXBseSAtMDAuMDAgIDAuMDAwIC0+IC0wLjAwMDAwDQorZHFtdWwwMzYgbXVsdGlwbHkgLTAwLjAwICAwRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcW11bDAzNyBtdWx0aXBseSAtMEUtMyAgIDAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2RxbXVsMDM4IG11bHRpcGx5ICA1LjAwICAtMUUtMyAgLT4gLTAuMDA1MDANCitkcW11bDAzOSBtdWx0aXBseSAgMDAuMDAgLTAuMDAwIC0+IC0wLjAwMDAwDQorZHFtdWwwNDAgbXVsdGlwbHkgIDAwLjAwIC0wRS0zICAtPiAtMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcW11bDA0MSBtdWx0aXBseSAgMEUtMyAgLTAwLjAwIC0+IC0wLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2RxbXVsMDQyIG11bHRpcGx5IC01LjAwICAtMUUtMyAgLT4gIDAuMDA1MDANCitkcW11bDA0MyBtdWx0aXBseSAtMDAuMDAgLTAuMDAwIC0+ICAwLjAwMDAwDQorZHFtdWwwNDQgbXVsdGlwbHkgLTAwLjAwIC0wRS0zICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitkcW11bDA0NSBtdWx0aXBseSAtMEUtMyAgLTAwLjAwIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KKw0KKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCitkcW11bDA1MCBtdWx0aXBseSAxLjIwIDMgICAgICAgIC0+IDMuNjANCitkcW11bDA1MSBtdWx0aXBseSA3ICAgIDMgICAgICAgIC0+IDIxDQorZHFtdWwwNTIgbXVsdGlwbHkgMC45ICAwLjggICAgICAtPiAwLjcyDQorZHFtdWwwNTMgbXVsdGlwbHkgMC45ICAtMCAgICAgICAtPiAtMC4wDQorZHFtdWwwNTQgbXVsdGlwbHkgNjU0MzIxIDY1NDMyMSAtPiA0MjgxMzU5NzEwNDENCisNCitkcW11bDA2MCBtdWx0aXBseSAxMjMuNDUgMWU3ICAtPiAgMS4yMzQ1RSs5DQorZHFtdWwwNjEgbXVsdGlwbHkgMTIzLjQ1IDFlOCAgLT4gIDEuMjM0NUUrMTANCitkcW11bDA2MiBtdWx0aXBseSAxMjMuNDUgMWUrOSAtPiAgMS4yMzQ1RSsxMQ0KK2RxbXVsMDYzIG11bHRpcGx5IDEyMy40NSAxZTEwIC0+ICAxLjIzNDVFKzEyDQorZHFtdWwwNjQgbXVsdGlwbHkgMTIzLjQ1IDFlMTEgLT4gIDEuMjM0NUUrMTMNCitkcW11bDA2NSBtdWx0aXBseSAxMjMuNDUgMWUxMiAtPiAgMS4yMzQ1RSsxNA0KK2RxbXVsMDY2IG11bHRpcGx5IDEyMy40NSAxZTEzIC0+ICAxLjIzNDVFKzE1DQorDQorDQorLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQorLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYNCitkcW11bDA4MCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCitkcW11bDA4NCBtdWx0aXBseSAwLjEgMTIzMDEyMzQ1NjQ1Njc4OSAgICAgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCitkcW11bDA5MCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCitkcW11bDA5NCBtdWx0aXBseSAxMjMwMTIzNDU2NDU2Nzg5ICAgICAwLjEgLT4gMTIzMDEyMzQ1NjQ1Njc4LjkNCisNCistLSB0ZXN0IHNvbWUgbW9yZSBlZGdlIGNhc2VzIGFuZCBjYXJyaWVzDQorZHFtdWwxMDEgbXVsdGlwbHkgOSA5ICAgLT4gODENCitkcW11bDEwMiBtdWx0aXBseSA5IDkwICAgLT4gODEwDQorZHFtdWwxMDMgbXVsdGlwbHkgOSA5MDAgICAtPiA4MTAwDQorZHFtdWwxMDQgbXVsdGlwbHkgOSA5MDAwICAgLT4gODEwMDANCitkcW11bDEwNSBtdWx0aXBseSA5IDkwMDAwICAgLT4gODEwMDAwDQorZHFtdWwxMDYgbXVsdGlwbHkgOSA5MDAwMDAgICAtPiA4MTAwMDAwDQorZHFtdWwxMDcgbXVsdGlwbHkgOSA5MDAwMDAwICAgLT4gODEwMDAwMDANCitkcW11bDEwOCBtdWx0aXBseSA5IDkwMDAwMDAwICAgLT4gODEwMDAwMDAwDQorZHFtdWwxMDkgbXVsdGlwbHkgOSA5MDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwDQorZHFtdWwxMTAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDANCitkcW11bDExMSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwDQorZHFtdWwxMTIgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwDQorZHFtdWwxMTMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDANCitkcW11bDExNCBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwDQorZHFtdWwxMTUgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwDQorLS1kcW11bDExNiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KKy0tZHFtdWwxMTcgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMA0KKy0tZHFtdWwxMTggbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcW11bDExOSBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tZHFtdWwxMjAgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tZHFtdWwxMjEgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS1kcW11bDEyMiBtdWx0aXBseSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tZHFtdWwxMjMgbXVsdGlwbHkgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKy0tIHRlc3Qgc29tZSBtb3JlIGVkZ2UgY2FzZXMgd2l0aG91dCBjYXJyaWVzDQorZHFtdWwxMzEgbXVsdGlwbHkgMyAzICAgLT4gOQ0KK2RxbXVsMTMyIG11bHRpcGx5IDMgMzAgICAtPiA5MA0KK2RxbXVsMTMzIG11bHRpcGx5IDMgMzAwICAgLT4gOTAwDQorZHFtdWwxMzQgbXVsdGlwbHkgMyAzMDAwICAgLT4gOTAwMA0KK2RxbXVsMTM1IG11bHRpcGx5IDMgMzAwMDAgICAtPiA5MDAwMA0KK2RxbXVsMTM2IG11bHRpcGx5IDMgMzAwMDAwICAgLT4gOTAwMDAwDQorZHFtdWwxMzcgbXVsdGlwbHkgMyAzMDAwMDAwICAgLT4gOTAwMDAwMA0KK2RxbXVsMTM4IG11bHRpcGx5IDMgMzAwMDAwMDAgICAtPiA5MDAwMDAwMA0KK2RxbXVsMTM5IG11bHRpcGx5IDMgMzAwMDAwMDAwICAgLT4gOTAwMDAwMDAwDQorZHFtdWwxNDAgbXVsdGlwbHkgMyAzMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMA0KK2RxbXVsMTQxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMA0KK2RxbXVsMTQyIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwDQorZHFtdWwxNDMgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMA0KK2RxbXVsMTQ0IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMA0KK2RxbXVsMTQ1IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwDQorZHFtdWwxNDYgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTQ3IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTQ4IG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxNDkgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTUwIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTUxIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxNTIgbXVsdGlwbHkgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTUzIG11bHRpcGx5IDMgMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KK2RxbXVsMjYzIG11bHRpcGx5IDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgyOTYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdGVzdCBzb21lIGVkZ2UgY2FzZXMgd2l0aCBleGFjdCByb3VuZGluZw0KK2RxbXVsMzAxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5ICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzAyIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwzMDMgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzA0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzA1IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwzMDYgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzA3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzA4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwzMDkgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzEwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzExIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwzMTIgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzEzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzE0IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwzMTUgbXVsdGlwbHkgOTAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMCAgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzE2IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMCA5MDAwMDAwMDAwMDAwMDAwICAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMzE3IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCAgUm91bmRlZA0KK2RxbXVsMzE4IG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUgIFJvdW5kZWQNCitkcW11bDMxOSBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNiAgUm91bmRlZA0KK2RxbXVsMzIwIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNyAgUm91bmRlZA0KK2RxbXVsMzIxIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDkwMDAwMDAwMDAwMDAwMDAgICAtPiA4LjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzggIFJvdW5kZWQNCitkcW11bDMyMiBtdWx0aXBseSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOSAgUm91bmRlZA0KK2RxbXVsMzIzIG11bHRpcGx5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgOTAwMDAwMDAwMDAwMDAwMCAgIC0+IDguMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs0MCAgUm91bmRlZA0KKw0KKy0tIHRyeXplcm9zIGNhc2VzDQorZHFtdWw1MDQgIG11bHRpcGx5ICAwRS00MjYwIDEwMDBFLTQyNjAgIC0+IDBFLTYxNzYgQ2xhbXBlZA0KK2RxbXVsNTA1ICBtdWx0aXBseSAgMTAwRSs0MjYwIDBFKzQyNjAgICAtPiAwRSs2MTExIENsYW1wZWQNCisNCistLSBtaXhlZCB3aXRoIHplcm9zDQorZHFtdWw1NDEgbXVsdGlwbHkgIDAgICAgLTEgICAgIC0+IC0wDQorZHFtdWw1NDIgbXVsdGlwbHkgLTAgICAgLTEgICAgIC0+ICAwDQorZHFtdWw1NDMgbXVsdGlwbHkgIDAgICAgIDEgICAgIC0+ICAwDQorZHFtdWw1NDQgbXVsdGlwbHkgLTAgICAgIDEgICAgIC0+IC0wDQorZHFtdWw1NDUgbXVsdGlwbHkgLTEgICAgIDAgICAgIC0+IC0wDQorZHFtdWw1NDYgbXVsdGlwbHkgLTEgICAgLTAgICAgIC0+ICAwDQorZHFtdWw1NDcgbXVsdGlwbHkgIDEgICAgIDAgICAgIC0+ICAwDQorZHFtdWw1NDggbXVsdGlwbHkgIDEgICAgLTAgICAgIC0+IC0wDQorDQorZHFtdWw1NTEgbXVsdGlwbHkgIDAuMCAgLTEgICAgIC0+IC0wLjANCitkcW11bDU1MiBtdWx0aXBseSAtMC4wICAtMSAgICAgLT4gIDAuMA0KK2RxbXVsNTUzIG11bHRpcGx5ICAwLjAgICAxICAgICAtPiAgMC4wDQorZHFtdWw1NTQgbXVsdGlwbHkgLTAuMCAgIDEgICAgIC0+IC0wLjANCitkcW11bDU1NSBtdWx0aXBseSAtMS4wICAgMCAgICAgLT4gLTAuMA0KK2RxbXVsNTU2IG11bHRpcGx5IC0xLjAgIC0wICAgICAtPiAgMC4wDQorZHFtdWw1NTcgbXVsdGlwbHkgIDEuMCAgIDAgICAgIC0+ICAwLjANCitkcW11bDU1OCBtdWx0aXBseSAgMS4wICAtMCAgICAgLT4gLTAuMA0KKw0KK2RxbXVsNTYxIG11bHRpcGx5ICAwICAgIC0xLjAgICAtPiAtMC4wDQorZHFtdWw1NjIgbXVsdGlwbHkgLTAgICAgLTEuMCAgIC0+ICAwLjANCitkcW11bDU2MyBtdWx0aXBseSAgMCAgICAgMS4wICAgLT4gIDAuMA0KK2RxbXVsNTY0IG11bHRpcGx5IC0wICAgICAxLjAgICAtPiAtMC4wDQorZHFtdWw1NjUgbXVsdGlwbHkgLTEgICAgIDAuMCAgIC0+IC0wLjANCitkcW11bDU2NiBtdWx0aXBseSAtMSAgICAtMC4wICAgLT4gIDAuMA0KK2RxbXVsNTY3IG11bHRpcGx5ICAxICAgICAwLjAgICAtPiAgMC4wDQorZHFtdWw1NjggbXVsdGlwbHkgIDEgICAgLTAuMCAgIC0+IC0wLjANCisNCitkcW11bDU3MSBtdWx0aXBseSAgMC4wICAtMS4wICAgLT4gLTAuMDANCitkcW11bDU3MiBtdWx0aXBseSAtMC4wICAtMS4wICAgLT4gIDAuMDANCitkcW11bDU3MyBtdWx0aXBseSAgMC4wICAgMS4wICAgLT4gIDAuMDANCitkcW11bDU3NCBtdWx0aXBseSAtMC4wICAgMS4wICAgLT4gLTAuMDANCitkcW11bDU3NSBtdWx0aXBseSAtMS4wICAgMC4wICAgLT4gLTAuMDANCitkcW11bDU3NiBtdWx0aXBseSAtMS4wICAtMC4wICAgLT4gIDAuMDANCitkcW11bDU3NyBtdWx0aXBseSAgMS4wICAgMC4wICAgLT4gIDAuMDANCitkcW11bDU3OCBtdWx0aXBseSAgMS4wICAtMC4wICAgLT4gLTAuMDANCisNCisNCistLSBTcGVjaWFscw0KK2RxbXVsNTgwIG11bHRpcGx5ICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW11bDU4MSBtdWx0aXBseSAgSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZHFtdWw1ODIgbXVsdGlwbHkgIEluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2RxbXVsNTgzIG11bHRpcGx5ICBJbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNTg0IG11bHRpcGx5ICBJbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNTg1IG11bHRpcGx5ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkcW11bDU4NiBtdWx0aXBseSAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZHFtdWw1ODcgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbXVsNTg4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCitkcW11bDU4OSBtdWx0aXBseSAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorZHFtdWw1OTAgbXVsdGlwbHkgLTEgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbXVsNTkxIG11bHRpcGx5IC0wICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNTkyIG11bHRpcGx5ICAwICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNTkzIG11bHRpcGx5ICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW11bDU5NCBtdWx0aXBseSAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorZHFtdWw1OTUgbXVsdGlwbHkgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbXVsNjAwIG11bHRpcGx5IC1JbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkcW11bDYwMSBtdWx0aXBseSAtSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZHFtdWw2MDIgbXVsdGlwbHkgLUluZiAgLTEgICAgIC0+ICBJbmZpbml0eQ0KK2RxbXVsNjAzIG11bHRpcGx5IC1JbmYgIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjA0IG11bHRpcGx5IC1JbmYgICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjA1IG11bHRpcGx5IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkcW11bDYwNiBtdWx0aXBseSAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQorZHFtdWw2MDcgbXVsdGlwbHkgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RxbXVsNjA4IG11bHRpcGx5IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkNCitkcW11bDYwOSBtdWx0aXBseSAtSW5mICAtSW5mICAgLT4gIEluZmluaXR5DQorZHFtdWw2MTAgbXVsdGlwbHkgLTEgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2RxbXVsNjExIG11bHRpcGx5IC0wICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjEyIG11bHRpcGx5ICAwICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjEzIG11bHRpcGx5ICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW11bDYxNCBtdWx0aXBseSAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQorZHFtdWw2MTUgbXVsdGlwbHkgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KKw0KK2RxbXVsNjIxIG11bHRpcGx5ICBOYU4gLUluZiAgICAtPiAgTmFODQorZHFtdWw2MjIgbXVsdGlwbHkgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcW11bDYyMyBtdWx0aXBseSAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2RxbXVsNjI0IG11bHRpcGx5ICBOYU4gLTAgICAgICAtPiAgTmFODQorZHFtdWw2MjUgbXVsdGlwbHkgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcW11bDYyNiBtdWx0aXBseSAgTmFOICAxICAgICAgLT4gIE5hTg0KK2RxbXVsNjI3IG11bHRpcGx5ICBOYU4gIDEwMDAgICAtPiAgTmFODQorZHFtdWw2MjggbXVsdGlwbHkgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcW11bDYyOSBtdWx0aXBseSAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RxbXVsNjMwIG11bHRpcGx5IC1JbmYgIE5hTiAgICAtPiAgTmFODQorZHFtdWw2MzEgbXVsdGlwbHkgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcW11bDYzMiBtdWx0aXBseSAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2RxbXVsNjMzIG11bHRpcGx5IC0wICAgIE5hTiAgICAtPiAgTmFODQorZHFtdWw2MzQgbXVsdGlwbHkgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcW11bDYzNSBtdWx0aXBseSAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2RxbXVsNjM2IG11bHRpcGx5ICAxMDAwIE5hTiAgICAtPiAgTmFODQorZHFtdWw2MzcgbXVsdGlwbHkgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcW11bDY0MSBtdWx0aXBseSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0MiBtdWx0aXBseSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0MyBtdWx0aXBseSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0NCBtdWx0aXBseSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0NSBtdWx0aXBseSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0NiBtdWx0aXBseSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0NyBtdWx0aXBseSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0OCBtdWx0aXBseSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY0OSBtdWx0aXBseSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1MCBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1MSBtdWx0aXBseSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1MiBtdWx0aXBseSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1MyBtdWx0aXBseSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1NCBtdWx0aXBseSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1NSBtdWx0aXBseSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1NiBtdWx0aXBseSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1NyBtdWx0aXBseSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1OCBtdWx0aXBseSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY1OSBtdWx0aXBseSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFtdWw2NjEgbXVsdGlwbHkgIE5hTjkgLUluZiAgIC0+ICBOYU45DQorZHFtdWw2NjIgbXVsdGlwbHkgIE5hTjggIDk5OSAgIC0+ICBOYU44DQorZHFtdWw2NjMgbXVsdGlwbHkgIE5hTjcxIEluZiAgIC0+ICBOYU43MQ0KK2RxbXVsNjY0IG11bHRpcGx5ICBOYU42ICBOYU41ICAtPiAgTmFONg0KK2RxbXVsNjY1IG11bHRpcGx5IC1JbmYgICBOYU40ICAtPiAgTmFONA0KK2RxbXVsNjY2IG11bHRpcGx5IC05OTkgICBOYU4zMyAtPiAgTmFOMzMNCitkcW11bDY2NyBtdWx0aXBseSAgSW5mICAgTmFOMiAgLT4gIE5hTjINCisNCitkcW11bDY3MSBtdWx0aXBseSAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2NzIgbXVsdGlwbHkgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjczIG11bHRpcGx5ICBzTmFOOTcgIE5hTiAgICAtPiAgTmFOOTcgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY3NCBtdWx0aXBseSAgc05hTjE2IHNOYU45NCAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2NzUgbXVsdGlwbHkgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjc2IG11bHRpcGx5IC1JbmYgICAgc05hTjkyICAtPiAgTmFOOTIgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY3NyBtdWx0aXBseSAgMDg4ICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2NzggbXVsdGlwbHkgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjc5IG11bHRpcGx5ICBOYU4gICAgc05hTjg5ICAtPiAgTmFOODkgSW52YWxpZF9vcGVyYXRpb24NCisNCitkcW11bDY4MSBtdWx0aXBseSAtTmFOOSAtSW5mICAgLT4gLU5hTjkNCitkcW11bDY4MiBtdWx0aXBseSAtTmFOOCAgOTk5ICAgLT4gLU5hTjgNCitkcW11bDY4MyBtdWx0aXBseSAtTmFONzEgSW5mICAgLT4gLU5hTjcxDQorZHFtdWw2ODQgbXVsdGlwbHkgLU5hTjYgLU5hTjUgIC0+IC1OYU42DQorZHFtdWw2ODUgbXVsdGlwbHkgLUluZiAgLU5hTjQgIC0+IC1OYU40DQorZHFtdWw2ODYgbXVsdGlwbHkgLTk5OSAgLU5hTjMzIC0+IC1OYU4zMw0KK2RxbXVsNjg3IG11bHRpcGx5ICBJbmYgIC1OYU4yICAtPiAtTmFOMg0KKw0KK2RxbXVsNjkxIG11bHRpcGx5IC1zTmFOOTkgLUluZiAgICAtPiAtTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY5MiBtdWx0aXBseSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2OTMgbXVsdGlwbHkgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjk0IG11bHRpcGx5IC1zTmFOMTYgLXNOYU45NCAtPiAtTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY5NSBtdWx0aXBseSAtTmFOOTUgIC1zTmFOOTMgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2OTYgbXVsdGlwbHkgLUluZiAgICAtc05hTjkyIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNjk3IG11bHRpcGx5ICAwODggICAgLXNOYU45MSAtPiAtTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDY5OCBtdWx0aXBseSAgSW5mICAgIC1zTmFOOTAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw2OTkgbXVsdGlwbHkgLU5hTiAgICAtc05hTjg5IC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RxbXVsNzAxIG11bHRpcGx5IC1OYU4gIC1JbmYgICAtPiAtTmFODQorZHFtdWw3MDIgbXVsdGlwbHkgLU5hTiAgIDk5OSAgIC0+IC1OYU4NCitkcW11bDcwMyBtdWx0aXBseSAtTmFOICAgSW5mICAgLT4gLU5hTg0KK2RxbXVsNzA0IG11bHRpcGx5IC1OYU4gIC1OYU4gICAtPiAtTmFODQorZHFtdWw3MDUgbXVsdGlwbHkgLUluZiAgLU5hTjAgIC0+IC1OYU4NCitkcW11bDcwNiBtdWx0aXBseSAtOTk5ICAtTmFOICAgLT4gLU5hTg0KK2RxbXVsNzA3IG11bHRpcGx5ICBJbmYgIC1OYU4gICAtPiAtTmFODQorDQorZHFtdWw3MTEgbXVsdGlwbHkgLXNOYU4gICAtSW5mICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDcxMiBtdWx0aXBseSAtc05hTiAgIC0xMSAgICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNzEzIG11bHRpcGx5IC1zTmFOMDAgIE5hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw3MTQgbXVsdGlwbHkgLXNOYU4gICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDcxNSBtdWx0aXBseSAtTmFOICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNzE2IG11bHRpcGx5IC1JbmYgICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw3MTcgbXVsdGlwbHkgIDA4OCAgICAtc05hTiAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW11bDcxOCBtdWx0aXBseSAgSW5mICAgIC1zTmFOICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbXVsNzE5IG11bHRpcGx5IC1OYU4gICAgLXNOYU4gICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLiBub3RlIHN1Ym5vcm1hbCByZXN1bHRzDQorLS0gc2lnbnMNCitkcW11bDc1MSBtdWx0aXBseSAgMWUrNDI3NyAgMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw3NTIgbXVsdGlwbHkgIDFlKzQyNzcgLTFlKzMzMTEgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxbXVsNzUzIG11bHRpcGx5IC0xZSs0Mjc3ICAxZSszMzExIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDc1NCBtdWx0aXBseSAtMWUrNDI3NyAtMWUrMzMxMSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw3NTUgbXVsdGlwbHkgIDFlLTQyNzcgIDFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxbXVsNzU2IG11bHRpcGx5ICAxZS00Mjc3IC0xZS0zMzExIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcW11bDc1NyBtdWx0aXBseSAtMWUtNDI3NyAgMWUtMzMxMSAtPiAtMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFtdWw3NTggbXVsdGlwbHkgLTFlLTQyNzcgLTFlLTMzMTEgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KKy0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQ0KK2RxbXVsNzYwIG11bHRpcGx5IDFlLTYwNjkgMWUtMTAxIC0+IDFFLTYxNzAgU3Vibm9ybWFsDQorZHFtdWw3NjEgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDIgLT4gMUUtNjE3MSBTdWJub3JtYWwNCitkcW11bDc2MiBtdWx0aXBseSAxZS02MDY5IDFlLTEwMyAtPiAxRS02MTcyIFN1Ym5vcm1hbA0KK2RxbXVsNzYzIG11bHRpcGx5IDFlLTYwNjkgMWUtMTA0IC0+IDFFLTYxNzMgU3Vibm9ybWFsDQorZHFtdWw3NjQgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDUgLT4gMUUtNjE3NCBTdWJub3JtYWwNCitkcW11bDc2NSBtdWx0aXBseSAxZS02MDY5IDFlLTEwNiAtPiAxRS02MTc1IFN1Ym5vcm1hbA0KK2RxbXVsNzY2IG11bHRpcGx5IDFlLTYwNjkgMWUtMTA3IC0+IDFFLTYxNzYgU3Vibm9ybWFsDQorZHFtdWw3NjcgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDggLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFtdWw3NjggbXVsdGlwbHkgMWUtNjA2OSAxZS0xMDkgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFtdWw3NjkgbXVsdGlwbHkgMWUtNjA2OSAxZS0xMTAgLT4gMEUtNjE3NiBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQ0KK2RxbXVsNzcwIG11bHRpcGx5IDFlKzQwIDFlKzYxMDEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDEgQ2xhbXBlZA0KK2RxbXVsNzcxIG11bHRpcGx5IDFlKzQwIDFlKzYxMDIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICBDbGFtcGVkDQorZHFtdWw3NzIgbXVsdGlwbHkgMWUrNDAgMWUrNjEwMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICBDbGFtcGVkDQorZHFtdWw3NzMgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZA0KK2RxbXVsNzc0IG11bHRpcGx5IDFlKzQwIDFlKzYxMDUgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw3NzUgbXVsdGlwbHkgMWUrNDAgMWUrNjEwNiAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDc3NiBtdWx0aXBseSAxZSs0MCAxZSs2MTA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxbXVsNzc3IG11bHRpcGx5IDFlKzQwIDFlKzYxMDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw3NzggbXVsdGlwbHkgMWUrNDAgMWUrNjEwOSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDc3OSBtdWx0aXBseSAxZSs0MCAxZSs2MTEwIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KK2RxbXVsODAxIG11bHRpcGx5ICAxLjAwMDBFLTYxNzIgIDEgICAgIC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwNCitkcW11bDgwMiBtdWx0aXBseSAgMS4wMDBFLTYxNzIgICAxZS0xICAtPiAxLjAwMEUtNjE3MyAgU3Vibm9ybWFsDQorZHFtdWw4MDMgbXVsdGlwbHkgIDEuMDBFLTYxNzIgICAgMWUtMiAgLT4gMS4wMEUtNjE3NCAgIFN1Ym5vcm1hbA0KK2RxbXVsODA0IG11bHRpcGx5ICAxLjBFLTYxNzIgICAgIDFlLTMgIC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCitkcW11bDgwNSBtdWx0aXBseSAgMS4wRS02MTcyICAgICAxZS00ICAtPiAxRS02MTc2ICAgICBTdWJub3JtYWwgUm91bmRlZA0KK2RxbXVsODA2IG11bHRpcGx5ICAxLjNFLTYxNzIgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw4MDcgbXVsdGlwbHkgIDEuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgwOCBtdWx0aXBseSAgMS43RS02MTcyICAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsODA5IG11bHRpcGx5ICAyLjNFLTYxNzIgICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw4MTAgbXVsdGlwbHkgIDIuNUUtNjE3MiAgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgxMSBtdWx0aXBseSAgMi43RS02MTcyICAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsODEyIG11bHRpcGx5ICAxLjQ5RS02MTcyICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw4MTMgbXVsdGlwbHkgIDEuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgxNCBtdWx0aXBseSAgMS41MUUtNjE3MiAgICAxZS00ICAtPiAyRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsODE1IG11bHRpcGx5ICAyLjQ5RS02MTcyICAgIDFlLTQgIC0+IDJFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw4MTYgbXVsdGlwbHkgIDIuNTBFLTYxNzIgICAgMWUtNCAgLT4gMkUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgxNyBtdWx0aXBseSAgMi41MUUtNjE3MiAgICAxZS00ICAtPiAzRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxbXVsODE4IG11bHRpcGx5ICAxRS02MTcyICAgICAgIDFlLTQgIC0+IDFFLTYxNzYgICAgIFN1Ym5vcm1hbA0KK2RxbXVsODE5IG11bHRpcGx5ICAzRS02MTcyICAgICAgIDFlLTUgIC0+IDBFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcW11bDgyMCBtdWx0aXBseSAgNUUtNjE3MiAgICAgICAxZS01ICAtPiAwRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHFtdWw4MjEgbXVsdGlwbHkgIDdFLTYxNzIgICAgICAgMWUtNSAgLT4gMUUtNjE3NiAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgyMiBtdWx0aXBseSAgOUUtNjE3MiAgICAgICAxZS01ICAtPiAxRS02MTc2ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsODIzIG11bHRpcGx5ICA5LjlFLTYxNzIgICAgIDFlLTUgIC0+IDFFLTYxNzYgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZHFtdWw4MjQgbXVsdGlwbHkgIDFFLTYxNzIgICAgICAtMWUtNCAgLT4gLTFFLTYxNzYgICAgU3Vibm9ybWFsDQorZHFtdWw4MjUgbXVsdGlwbHkgIDNFLTYxNzIgICAgICAtMWUtNSAgLT4gLTBFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxbXVsODI2IG11bHRpcGx5IC01RS02MTcyICAgICAgIDFlLTUgIC0+IC0wRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcW11bDgyNyBtdWx0aXBseSAgN0UtNjE3MiAgICAgIC0xZS01ICAtPiAtMUUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbXVsODI4IG11bHRpcGx5IC05RS02MTcyICAgICAgIDFlLTUgIC0+IC0xRS02MTc2ICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFtdWw4MjkgbXVsdGlwbHkgIDkuOUUtNjE3MiAgICAtMWUtNSAgLT4gLTFFLTYxNzYgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW11bDgzMCBtdWx0aXBseSAgMy4wRS02MTcyICAgIC0xZS01ICAtPiAtMEUtNjE3NiAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZHFtdWw4MzEgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMjAwIC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxbXVsODMyIG11bHRpcGx5ICAxLjBFLTU5NzcgICAgIDFlLTE5OSAtPiAxRS02MTc2ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFtdWw4MzMgbXVsdGlwbHkgIDEuMEUtNTk3NyAgICAgMWUtMTk4IC0+IDEuMEUtNjE3NSAgICBTdWJub3JtYWwNCitkcW11bDgzNCBtdWx0aXBseSAgMi4wRS01OTc3ICAgICAyZS0xOTggLT4gNC4wRS02MTc1ICAgIFN1Ym5vcm1hbA0KK2RxbXVsODM1IG11bHRpcGx5ICA0LjBFLTU5NzcgICAgIDRlLTE5OCAtPiAxLjYwRS02MTc0ICAgU3Vibm9ybWFsDQorZHFtdWw4MzYgbXVsdGlwbHkgMTAuMEUtNTk3NyAgICAxMGUtMTk4IC0+IDEuMDAwRS02MTczICBTdWJub3JtYWwNCitkcW11bDgzNyBtdWx0aXBseSAzMC4wRS01OTc3ICAgIDMwZS0xOTggLT4gOS4wMDBFLTYxNzMgIFN1Ym5vcm1hbA0KK2RxbXVsODM4IG11bHRpcGx5IDQwLjBFLTU5ODIgICAgNDBlLTE2NiAtPiAxLjYwMDBFLTYxNDUgU3Vibm9ybWFsDQorZHFtdWw4MzkgbXVsdGlwbHkgNDAuMEUtNTk4MiAgICA0MGUtMTY1IC0+IDEuNjAwMEUtNjE0NCBTdWJub3JtYWwNCitkcW11bDg0MCBtdWx0aXBseSA0MC4wRS01OTgyICAgIDQwZS0xNjQgLT4gMS42MDAwRS02MTQzDQorDQorLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoDQorZHFtdWw4NzAgbXVsdGlwbHkgMTAwICA5Ljk5OUUrNjE0MyAgICAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2RxbXVsODcxIG11bHRpcGx5IDEwMCAtOS45OTlFKzYxNDMgICAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitkcW11bDg3MiBtdWx0aXBseSAgICAgIDkuOTk5RSs2MTQzIDEwMCAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZHFtdWw4NzMgbXVsdGlwbHkgICAgIC05Ljk5OUUrNjE0MyAxMDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQorZHFtdWw4ODEgbXVsdGlwbHkgIDEuMjM0N0UtNjEzMyAxLjIzNDdFLTQwICAtPiAgMS41MjRFLTYxNzMgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcW11bDg4MiBtdWx0aXBseSAgMS4yMzRFLTYxMzMgMS4yMzRFLTQwICAgIC0+ICAxLjUyM0UtNjE3MyBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxbXVsODgzIG11bHRpcGx5ICAxLjIzRS02MTMzICAxLjIzRS00MCAgICAgLT4gIDEuNTEzRS02MTczIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZHFtdWw4ODQgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDAgICAgICAtPiAgMS40NEUtNjE3MyAgU3Vibm9ybWFsDQorZHFtdWw4ODUgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDEgICAgICAtPiAgMS40NEUtNjE3NCAgU3Vibm9ybWFsDQorZHFtdWw4ODYgbXVsdGlwbHkgIDEuMkUtNjEzMyAgIDEuMkUtNDIgICAgICAtPiAgMS40RS02MTc1ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkcW11bDg4NyBtdWx0aXBseSAgMS4yRS02MTMzICAgMS4zRS00MiAgICAgIC0+ICAxLjZFLTYxNzUgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2RxbXVsODg4IG11bHRpcGx5ICAxLjNFLTYxMzMgICAxLjNFLTQyICAgICAgLT4gIDEuN0UtNjE3NSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZHFtdWw4ODkgbXVsdGlwbHkgIDEuM0UtNjEzMyAgIDEuM0UtNDMgICAgICAtPiAgICAyRS02MTc2ICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitkcW11bDg5MCBtdWx0aXBseSAgMS4zRS02MTM0ICAgMS4zRS00MyAgICAgIC0+ICAgIDBFLTYxNzYgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorDQorZHFtdWw4OTEgbXVsdGlwbHkgIDEuMjM0NUUtMzkgICAgMS4yMzRFLTYxMzMgLT4gIDEuNTIzNEUtNjE3MiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RxbXVsODkyIG11bHRpcGx5ICAxLjIzNDU2RS0zOSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyMzRFLTYxNzIgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcW11bDg5MyBtdWx0aXBseSAgMS4yMzQ1RS00MCAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcW11bDg5NCBtdWx0aXBseSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS02MTMzIC0+ICAxLjUyM0UtNjE3MyAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcW11bDg5NSBtdWx0aXBseSAgMS4yMzQ1RS00MSAgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkcW11bDg5NiBtdWx0aXBseSAgMS4yMzQ1NkUtNDEgIDEuMjM0RS02MTMzIC0+ICAxLjUyRS02MTc0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93DQorLS0gcHJvdmUgb3BlcmFuZHMgYXJlIGV4YWN0DQorZHFtdWw5MDYgbXVsdGlwbHkgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQzICAxICAgICAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0Mw0KK2RxbXVsOTA3IG11bHRpcGx5ICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorLS0gdGhlIG5leHQgcm91bmRzIHRvIE5taW4NCitkcW11bDkwOCBtdWx0aXBseSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gaHVnZXN0DQorZHFtdWw5MDkgbXVsdGlwbHkgOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2NyBJbmV4YWN0IFJvdW5kZWQNCistLSBWRyBjYXNlDQorZHFtdWw5MTAgbXVsdGlwbHkgOC44MTEyNTAwMDAwMDAwMTM0OTQzNkUtMTU0OCA4LjAwMDAwMDAwMDAwMDAwMDAwMEUtMTU1MCAtPiA3LjA0OTAwMDAwMDAwMDAxMDc5NTQ4ODAwMDAwMDAwMDAwMEUtMzA5NyBSb3VuZGVkDQorDQorLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQorcHJlY2lzaW9uOiAgIDM0DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK2RxbXVsOTExICBtdWx0aXBseSAxMzBFLTIgIDEyMEUtMiAtPiAxLjU2MDANCitkcW11bDkxMiAgbXVsdGlwbHkgMTMwRS0yICAxMkUtMSAgLT4gMS41NjANCitkcW11bDkxMyAgbXVsdGlwbHkgMTMwRS0yICAxRTAgICAgLT4gMS4zMA0KK2RxbXVsOTE0ICBtdWx0aXBseSAxRTIgICAgIDFFNCAgICAtPiAxRSs2DQorDQorLS0gcG93ZXItb2YtdGVuIGVkZ2UgY2FzZXMNCitkcW11bDEwMDEgbXVsdGlwbHkgIDEgICAgICAxMCAgICAgICAgICAgICAgIC0+IDEwDQorZHFtdWwxMDAyIG11bHRpcGx5ICAxICAgICAgMTAwICAgICAgICAgICAgICAtPiAxMDANCitkcW11bDEwMDMgbXVsdGlwbHkgIDEgICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDANCitkcW11bDEwMDQgbXVsdGlwbHkgIDEgICAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwDQorZHFtdWwxMDA1IG11bHRpcGx5ICAxICAgICAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDANCitkcW11bDEwMDYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDANCitkcW11bDEwMDcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwDQorZHFtdWwxMDA4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDANCitkcW11bDEwMDkgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDANCitkcW11bDEwMTAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwDQorZHFtdWwxMDExIG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDANCitkcW11bDEwMTIgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDANCitkcW11bDEwMTMgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDE0IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwICAtPiAxMDAwMDAwMDAwMDAwMDANCitkcW11bDEwMTUgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDANCisNCitkcW11bDEwMTYgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDEwMTcgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDE4IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDE5IG11bHRpcGx5ICAxICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDEwMjAgbXVsdGlwbHkgIDEgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCisNCitkcW11bDEwMjEgbXVsdGlwbHkgIDEwICAgICAxICAgICAgICAgICAgICAgIC0+IDEwDQorZHFtdWwxMDIyIG11bHRpcGx5ICAxMCAgICAgMTAgICAgICAgICAgICAgICAtPiAxMDANCitkcW11bDEwMjMgbXVsdGlwbHkgIDEwICAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDANCitkcW11bDEwMjQgbXVsdGlwbHkgIDEwICAgICAxMDAwICAgICAgICAgICAgIC0+IDEwMDAwDQorZHFtdWwxMDI1IG11bHRpcGx5ICAxMCAgICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDANCitkcW11bDEwMjYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDANCitkcW11bDEwMjcgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwICAgICAgICAgIC0+IDEwMDAwMDAwDQorZHFtdWwxMDI4IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDANCitkcW11bDEwMjkgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDANCitkcW11bDEwMzAgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwICAgICAgIC0+IDEwMDAwMDAwMDAwDQorZHFtdWwxMDMxIG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDANCitkcW11bDEwMzIgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDANCitkcW11bDEwMzMgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwICAgIC0+IDEwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDM0IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAgICAtPiAxMDAwMDAwMDAwMDAwMDANCitkcW11bDEwMzUgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCisNCitkcW11bDEwMzYgbXVsdGlwbHkgIDEwICAgICAxMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTAzNyBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTAzOCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDM5IG11bHRpcGx5ICAxMCAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA0MCBtdWx0aXBseSAgMTAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorDQorZHFtdWwxMDQxIG11bHRpcGx5ICAxMDAgICAgMC4xICAgICAgICAgICAgICAtPiAxMC4wDQorZHFtdWwxMDQyIG11bHRpcGx5ICAxMDAgICAgMSAgICAgICAgICAgICAgICAtPiAxMDANCitkcW11bDEwNDMgbXVsdGlwbHkgIDEwMCAgICAxMCAgICAgICAgICAgICAgIC0+IDEwMDANCitkcW11bDEwNDQgbXVsdGlwbHkgIDEwMCAgICAxMDAgICAgICAgICAgICAgIC0+IDEwMDAwDQorZHFtdWwxMDQ1IG11bHRpcGx5ICAxMDAgICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDANCitkcW11bDEwNDYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMCAgICAgICAgICAgIC0+IDEwMDAwMDANCitkcW11bDEwNDcgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAgICAgICAgICAgIC0+IDEwMDAwMDAwDQorZHFtdWwxMDQ4IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDANCitkcW11bDEwNDkgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMCAgICAgICAgIC0+IDEwMDAwMDAwMDANCitkcW11bDEwNTAgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAgICAgICAgIC0+IDEwMDAwMDAwMDAwDQorZHFtdWwxMDUxIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDANCitkcW11bDEwNTIgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMCAgICAgIC0+IDEwMDAwMDAwMDAwMDANCitkcW11bDEwNTMgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAgICAgIC0+IDEwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDU0IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDANCitkcW11bDEwNTUgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMCAgIC0+IDEwMDAwMDAwMDAwMDAwMDANCisNCitkcW11bDEwNTYgbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDU3IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDEwNTggbXVsdGlwbHkgIDEwMCAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDU5IG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDYwIG11bHRpcGx5ICAxMDAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KK2RxbXVsMTA2MSBtdWx0aXBseSAgMTAwMCAgIDAuMDEgICAgICAgICAgICAgLT4gMTAuMDANCitkcW11bDEwNjIgbXVsdGlwbHkgIDEwMDAgICAwLjEgICAgICAgICAgICAgIC0+IDEwMC4wDQorZHFtdWwxMDYzIG11bHRpcGx5ICAxMDAwICAgMSAgICAgICAgICAgICAgICAtPiAxMDAwDQorZHFtdWwxMDY0IG11bHRpcGx5ICAxMDAwICAgMTAgICAgICAgICAgICAgICAtPiAxMDAwMA0KK2RxbXVsMTA2NSBtdWx0aXBseSAgMTAwMCAgIDEwMCAgICAgICAgICAgICAgLT4gMTAwMDAwDQorZHFtdWwxMDY2IG11bHRpcGx5ICAxMDAwICAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwDQorZHFtdWwxMDY3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAgICAgICAgICAgICAtPiAxMDAwMDAwMA0KK2RxbXVsMTA2OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMCAgICAgICAgICAgLT4gMTAwMDAwMDAwDQorZHFtdWwxMDY5IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwDQorZHFtdWwxMDcwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAgICAgICAgICAtPiAxMDAwMDAwMDAwMA0KK2RxbXVsMTA3MSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMCAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQorZHFtdWwxMDcyIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQorZHFtdWwxMDczIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAgICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA3NCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMCAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDc1IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMCAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQorDQorZHFtdWwxMDc2IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDc3IG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA3OCBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA3OSBtdWx0aXBseSAgMTAwMCAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDgwIG11bHRpcGx5ICAxMDAwICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorDQorZHFtdWwxMDgxIG11bHRpcGx5ICAxMDAwMCAgMC4wMDEgICAgICAgICAgICAtPiAxMC4wMDANCitkcW11bDEwODIgbXVsdGlwbHkgIDEwMDAwICAwLjAxICAgICAgICAgICAgIC0+IDEwMC4wMA0KK2RxbXVsMTA4MyBtdWx0aXBseSAgMTAwMDAgIDAuMSAgICAgICAgICAgICAgLT4gMTAwMC4wDQorZHFtdWwxMDg0IG11bHRpcGx5ICAxMDAwMCAgMSAgICAgICAgICAgICAgICAtPiAxMDAwMA0KK2RxbXVsMTA4NSBtdWx0aXBseSAgMTAwMDAgIDEwICAgICAgICAgICAgICAgLT4gMTAwMDAwDQorZHFtdWwxMDg2IG11bHRpcGx5ICAxMDAwMCAgMTAwICAgICAgICAgICAgICAtPiAxMDAwMDAwDQorZHFtdWwxMDg3IG11bHRpcGx5ICAxMDAwMCAgMTAwMCAgICAgICAgICAgICAtPiAxMDAwMDAwMA0KK2RxbXVsMTA4OCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwICAgICAgICAgICAgLT4gMTAwMDAwMDAwDQorZHFtdWwxMDg5IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwICAgICAgICAgICAtPiAxMDAwMDAwMDAwDQorZHFtdWwxMDkwIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMCAgICAgICAgICAtPiAxMDAwMDAwMDAwMA0KK2RxbXVsMTA5MSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwICAgICAgICAgLT4gMTAwMDAwMDAwMDAwDQorZHFtdWwxMDkyIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwICAgICAgICAtPiAxMDAwMDAwMDAwMDAwDQorZHFtdWwxMDkzIG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMCAgICAgICAtPiAxMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA5NCBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwICAgICAgLT4gMTAwMDAwMDAwMDAwMDAwDQorZHFtdWwxMDk1IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwICAgICAtPiAxMDAwMDAwMDAwMDAwMDAwDQorDQorZHFtdWwxMDk2IG11bHRpcGx5ICAxMDAwMCAgMTAwMDAwMDAwMDAwMDAwIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDEwOTcgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDEwOTggbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbXVsMTA5OSBtdWx0aXBseSAgMTAwMDAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW11bDExMDAgbXVsdGlwbHkgIDEwMDAwICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KKw0KK2RxbXVsMTEwNyBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KK2RxbXVsMTEwOCBtdWx0aXBseSAgMTAwMDAgICA5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5MDAwMA0KKw0KKy0tIE51bGwgdGVzdHMNCitkcW11bDk5OTAgbXVsdGlwbHkgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFtdWw5OTkxIG11bHRpcGx5ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRNaW51cy5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKaW5kZXggODE3N2I1OC4uMzRmMzk1OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dE1pbnVzLmRlY1Rlc3QKQEAgLTEsMTI2ICsxLDEyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcU5leHRNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kcW5leHRtMDAxIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0Ci1kcW5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1Ci1kcW5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Ci1kcW5leHRtMDA0IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Ci1kcW5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHRtMDA3IG5leHRtaW51cyAgMS4wICAgICAgICAgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dG0wMDggbmV4dG1pbnVzICAxICAgICAgICAgICAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotZHFuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi1kcW5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLWRxbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotZHFuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci1kcW5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLWRxbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotZHFuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci1kcW5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLWRxbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotCi1kcW5leHRtMDIxIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Ci1kcW5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Ci1kcW5leHRtMDI0IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFuZXh0bTAyNyBuZXh0bWludXMgLTEuMCAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dG0wMjggbmV4dG1pbnVzIC0xICAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLWRxbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotZHFuZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci1kcW5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLWRxbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotZHFuZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kcW5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLWRxbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotZHFuZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi1kcW5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLWRxbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotCi0tLSB1bHRyYS10aW55IGlucHV0cwotZHFuZXh0bTA2MiBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAtPiAgIDBFLTYxNzYKLWRxbmV4dG0wNjUgbmV4dG1pbnVzIC0xRS02MTc2ICAgICAgICAgLT4gIC0yRS02MTc2Ci0KLS0tIFplcm9zCi1kcW5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTYxNzYKLWRxbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtNjE3NgotZHFuZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS02MTc2Ci1kcW5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTYxNzYKLWRxbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtNjE3NgotZHFuZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS02MTc2Ci1kcW5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTYxNzYKLWRxbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtNjE3NgotCi0tLSBzcGVjaWFscwotZHFuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHRtMTUxIG5leHRtaW51cyAgLUluZiAgICAtPiAtSW5maW5pdHkKLWRxbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4KLWRxbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0bTE1NCBuZXh0bWludXMgICBOYU43NyAgLT4gIE5hTjc3Ci1kcW5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4KLWRxbmV4dG0xNTcgbmV4dG1pbnVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3Ci1kcW5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKLWRxbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0Ci1kcW5leHRtMTcxIG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NAotZHFuZXh0bTE3MiBuZXh0bWludXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NAotZHFuZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NAotZHFuZXh0bTE3NCBuZXh0bWludXMgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gOEUtNjE3NgotZHFuZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLT4gOS44RS02MTc1Ci1kcW5leHRtMTc2IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3Ci1kcW5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0Ci1kcW5leHRtMTc4IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0Ci1kcW5leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0Ci1kcW5leHRtMTgwIG5leHRtaW51cyAgMEUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgotZHFuZXh0bTE4MSBuZXh0bWludXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMEUtNjE3NgotZHFuZXh0bTE4MiBuZXh0bWludXMgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE3NgotCi1kcW5leHRtMTgzIG5leHRtaW51cyAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NgotZHFuZXh0bTE4NCBuZXh0bWludXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTJFLTYxNzYKLWRxbmV4dG0xODUgbmV4dG1pbnVzICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0zRS02MTc2Ci1kcW5leHRtMTg2IG5leHRtaW51cyAgLTEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAtMS4xRS02MTc1Ci1kcW5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtNjE3NiAgICAgICAgICAgICAgICAtPiAtMS4wMUUtNjE3NAotZHFuZXh0bTE4OCBuZXh0bWludXMgIC0xMDAwMDBFLTYxNzYgICAgICAgICAgICAgLT4gLTEuMDAwMDFFLTYxNzEKLWRxbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MwotZHFuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCi1kcW5leHRtMTkxIG5leHRtaW51cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKLWRxbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLUluZmluaXR5Ci0KLS0tIE51bGwgdGVzdHMKLWRxbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcU5leHRNaW51cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4NCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZHFuZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NA0KK2RxbmV4dG0wMDIgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCitkcW5leHRtMDAzIG5leHRtaW51cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQorZHFuZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KK2RxbmV4dG0wMDUgbmV4dG1pbnVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCitkcW5leHRtMDA2IG5leHRtaW51cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFuZXh0bTAxMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFuZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQorZHFuZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQorZHFuZXh0bTAxMyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQorZHFuZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQorZHFuZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQorZHFuZXh0bTAxNiBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQorZHFuZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQorZHFuZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQorZHFuZXh0bTAxOSBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQorZHFuZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQorDQorZHFuZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KK2RxbmV4dG0wMjIgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCitkcW5leHRtMDIzIG5leHRtaW51cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQorZHFuZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dG0wMjUgbmV4dG1pbnVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbmV4dG0wMjYgbmV4dG1pbnVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFuZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCitkcW5leHRtMDMwIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCitkcW5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCitkcW5leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCitkcW5leHRtMDMzIG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCitkcW5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCitkcW5leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCitkcW5leHRtMDM2IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCitkcW5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCitkcW5leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCitkcW5leHRtMDM5IG5leHRtaW51cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCisNCistLSB1bHRyYS10aW55IGlucHV0cw0KK2RxbmV4dG0wNjIgbmV4dG1pbnVzICAxRS02MTc2ICAgICAgICAgLT4gICAwRS02MTc2DQorZHFuZXh0bTA2NSBuZXh0bWludXMgLTFFLTYxNzYgICAgICAgICAtPiAgLTJFLTYxNzYNCisNCistLSBaZXJvcw0KK2RxbmV4dG0xMDAgbmV4dG1pbnVzIC0wICAgICAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDIgbmV4dG1pbnVzICAwLjAwICAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDMgbmV4dG1pbnVzIC0wLjAwICAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDUgbmV4dG1pbnVzICAwRSszMDAgICAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDYgbmV4dG1pbnVzICAwRSszMDAwMCAgICAtPiAtMUUtNjE3Ng0KK2RxbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtNjE3Ng0KKw0KKy0tIHNwZWNpYWxzDQorZHFuZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0bTE1MSBuZXh0bWludXMgIC1JbmYgICAgLT4gLUluZmluaXR5DQorZHFuZXh0bTE1MiBuZXh0bWludXMgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dG0xNTQgbmV4dG1pbnVzICAgTmFONzcgIC0+ICBOYU43Nw0KK2RxbmV4dG0xNTUgbmV4dG1pbnVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4NCitkcW5leHRtMTU3IG5leHRtaW51cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHRtMTU4IG5leHRtaW51cyAgLU5hTjc3ICAtPiAtTmFONzcNCitkcW5leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK2RxbmV4dG0xNzAgbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0DQorZHFuZXh0bTE3MSBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQNCitkcW5leHRtMTcyIG5leHRtaW51cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0DQorZHFuZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NA0KK2RxbmV4dG0xNzQgbmV4dG1pbnVzICA5RS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDhFLTYxNzYNCitkcW5leHRtMTc1IG5leHRtaW51cyAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtPiA5LjhFLTYxNzUNCitkcW5leHRtMTc2IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3DQorZHFuZXh0bTE3NyBuZXh0bWludXMgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NA0KK2RxbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQNCitkcW5leHRtMTc5IG5leHRtaW51cyAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0DQorZHFuZXh0bTE4MCBuZXh0bWludXMgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYNCitkcW5leHRtMTgxIG5leHRtaW51cyAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAwRS02MTc2DQorZHFuZXh0bTE4MiBuZXh0bWludXMgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAgLT4gMUUtNjE3Ng0KKw0KK2RxbmV4dG0xODMgbmV4dG1pbnVzICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTc2DQorZHFuZXh0bTE4NCBuZXh0bWludXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTJFLTYxNzYNCitkcW5leHRtMTg1IG5leHRtaW51cyAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtM0UtNjE3Ng0KK2RxbmV4dG0xODYgbmV4dG1pbnVzICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+IC0xLjFFLTYxNzUNCitkcW5leHRtMTg3IG5leHRtaW51cyAgLTEwMEUtNjE3NiAgICAgICAgICAgICAgICAtPiAtMS4wMUUtNjE3NA0KK2RxbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+IC0xLjAwMDAxRS02MTcxDQorZHFuZXh0bTE4OSBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorZHFuZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorZHFuZXh0bTE5MSBuZXh0bWludXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorZHFuZXh0bTE5MiBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLUluZmluaXR5DQorDQorLS0gTnVsbCB0ZXN0cw0KK2RxbmV4dG05MDAgbmV4dG1pbnVzICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0UGx1cy5kZWNUZXN0CmluZGV4IDhjOGU5Y2QuLmFjM2YwNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFBsdXMuZGVjVGVzdApAQCAtMSwxMjQgKzEsMTI0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxTmV4dFBsdXMuZGVjVGVzdCAtLSBkZWNRdWFkIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWRxbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgotZHFuZXh0cDAwMiBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKLWRxbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0cDAwNSBuZXh0cGx1cyAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHRwMDA4IG5leHRwbHVzICAxICAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotZHFuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLWRxbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci1kcW5leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotZHFuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLWRxbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kcW5leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotZHFuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLWRxbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi1kcW5leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotZHFuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLQotZHFuZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0Ci1kcW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKLWRxbmV4dHAwMjMgbmV4dHBsdXMgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgotZHFuZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgKLWRxbmV4dHAwMjYgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFuZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi1kcW5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotZHFuZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLWRxbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci1kcW5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotZHFuZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLWRxbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci1kcW5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotZHFuZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLWRxbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi0KLS0tIFplcm9zCi1kcW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtNjE3NgotZHFuZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTYxNzYKLWRxbmV4dHAxMDIgbmV4dHBsdXMgIDBFLTMwMCAgICAgIC0+ICAxRS02MTc2Ci1kcW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtNjE3NgotZHFuZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTYxNzYKLWRxbmV4dHAxMDUgbmV4dHBsdXMgLTAgICAgICAgICAgIC0+ICAxRS02MTc2Ci1kcW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtNjE3NgotZHFuZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTYxNzYKLWRxbmV4dHAxMDggbmV4dHBsdXMgLTBFKzMwMCAgICAgIC0+ICAxRS02MTc2Ci1kcW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtNjE3NgotCi0tLSBzcGVjaWFscwotZHFuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkKLWRxbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHRwMTUyIG5leHRwbHVzICAgTmFOICAgIC0+ICBOYU4KLWRxbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHRwMTU0IG5leHRwbHVzICAgTmFONzcgIC0+ICBOYU43NwotZHFuZXh0cDE1NSBuZXh0cGx1cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgotZHFuZXh0cDE1NyBuZXh0cGx1cyAtc05hTiAgICAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHAxNTggbmV4dHBsdXMgIC1OYU43NyAgLT4gLU5hTjc3Ci1kcW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotZHFuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKLWRxbmV4dHAxNzEgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0Ci1kcW5leHRwMTcyIG5leHRwbHVzICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0Ci1kcW5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0Ci1kcW5leHRwMTc0IG5leHRwbHVzICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIC0+IC04RS02MTc2Ci1kcW5leHRwMTc1IG5leHRwbHVzICAtOS45RS02MTc1ICAgICAgICAgICAgICAgIC0+IC05LjhFLTYxNzUKLWRxbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcKLWRxbmV4dHAxNzcgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQKLWRxbmV4dHAxNzggbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQKLWRxbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQKLWRxbmV4dHAxODAgbmV4dHBsdXMgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYKLWRxbmV4dHAxODEgbmV4dHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTBFLTYxNzYKLWRxbmV4dHAxODIgbmV4dHBsdXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYKLQotZHFuZXh0cDE4MyBuZXh0cGx1cyAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE3NgotZHFuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMkUtNjE3NgotZHFuZXh0cDE4NSBuZXh0cGx1cyAgIDJFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgM0UtNjE3NgotZHFuZXh0cDE4NiBuZXh0cGx1cyAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICAtPiAgMS4xRS02MTc1Ci1kcW5leHRwMTg3IG5leHRwbHVzICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS02MTc0Ci1kcW5leHRwMTg4IG5leHRwbHVzICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC0+ICAxLjAwMDAxRS02MTcxCi1kcW5leHRwMTg5IG5leHRwbHVzICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MwotZHFuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKLWRxbmV4dHAxOTEgbmV4dHBsdXMgICAxRS02MTQzICAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCi1kcW5leHRwMTkyIG5leHRwbHVzICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgSW5maW5pdHkKLQotLS0gTnVsbCB0ZXN0cwotZHFuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFOZXh0UGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0aGF0IGlzIGdyZWF0ZXIgWzc1NHIgbmV4dHVwXSAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RxbmV4dHAwMDEgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KK2RxbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Nw0KK2RxbmV4dHAwMDMgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KK2RxbmV4dHAwMDQgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFuZXh0cDAwNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHRwMDA3IG5leHRwbHVzICAxLjAgICAgICAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFuZXh0cDAwOCBuZXh0cGx1cyAgMSAgICAgICAgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQorZHFuZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCitkcW5leHRwMDExIG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KK2RxbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQorZHFuZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCitkcW5leHRwMDE0IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RxbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQorZHFuZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCitkcW5leHRwMDE3IG5leHRwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KK2RxbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQorZHFuZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTINCisNCitkcW5leHRwMDIxIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQNCitkcW5leHRwMDIyIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCitkcW5leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCitkcW5leHRwMDI0IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCitkcW5leHRwMDI1IG5leHRwbHVzIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTgNCitkcW5leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHRwMDI3IG5leHRwbHVzIC0xLjAgICAgICAgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0cDAyOSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQorZHFuZXh0cDAzMiBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMNCitkcW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KK2RxbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQorZHFuZXh0cDAzNSBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYNCitkcW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RxbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQorZHFuZXh0cDAzOCBuZXh0cGx1cyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkNCitkcW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KK2RxbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQorDQorLS0gWmVyb3MNCitkcW5leHRwMTAwIG5leHRwbHVzICAwICAgICAgICAgICAtPiAgMUUtNjE3Ng0KK2RxbmV4dHAxMDEgbmV4dHBsdXMgIDAuMDAgICAgICAgIC0+ICAxRS02MTc2DQorZHFuZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTYxNzYNCitkcW5leHRwMTAzIG5leHRwbHVzICAwRSszMDAgICAgICAtPiAgMUUtNjE3Ng0KK2RxbmV4dHAxMDQgbmV4dHBsdXMgIDBFKzMwMDAwICAgIC0+ICAxRS02MTc2DQorZHFuZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTYxNzYNCitkcW5leHRwMTA2IG5leHRwbHVzIC0wLjAwICAgICAgICAtPiAgMUUtNjE3Ng0KK2RxbmV4dHAxMDcgbmV4dHBsdXMgLTBFLTMwMCAgICAgIC0+ICAxRS02MTc2DQorZHFuZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTYxNzYNCitkcW5leHRwMTA5IG5leHRwbHVzIC0wRSszMDAwMCAgICAtPiAgMUUtNjE3Ng0KKw0KKy0tIHNwZWNpYWxzDQorZHFuZXh0cDE1MCBuZXh0cGx1cyAgIEluZiAgICAtPiAgSW5maW5pdHkNCitkcW5leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcNCitkcW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTg0KK2RxbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcNCitkcW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQorZHFuZXh0cDE3MCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCitkcW5leHRwMTcxIG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NA0KK2RxbmV4dHAxNzIgbmV4dHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQNCitkcW5leHRwMTczIG5leHRwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0DQorZHFuZXh0cDE3NCBuZXh0cGx1cyAgLTlFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtOEUtNjE3Ng0KK2RxbmV4dHAxNzUgbmV4dHBsdXMgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgLT4gLTkuOEUtNjE3NQ0KK2RxbmV4dHAxNzYgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ3ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcNCitkcW5leHRwMTc3IG5leHRwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0DQorZHFuZXh0cDE3OCBuZXh0cGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NA0KK2RxbmV4dHAxNzkgbmV4dHBsdXMgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQNCitkcW5leHRwMTgwIG5leHRwbHVzICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQorZHFuZXh0cDE4MSBuZXh0cGx1cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMEUtNjE3Ng0KK2RxbmV4dHAxODIgbmV4dHBsdXMgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYNCisNCitkcW5leHRwMTgzIG5leHRwbHVzICAgMEUtNjE3NiAgICAgICAgICAgICAgICAgIC0+ICAxRS02MTc2DQorZHFuZXh0cDE4NCBuZXh0cGx1cyAgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAgMkUtNjE3Ng0KK2RxbmV4dHAxODUgbmV4dHBsdXMgICAyRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gIDNFLTYxNzYNCitkcW5leHRwMTg2IG5leHRwbHVzICAgMTBFLTYxNzYgICAgICAgICAgICAgICAgIC0+ICAxLjFFLTYxNzUNCitkcW5leHRwMTg3IG5leHRwbHVzICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIC0+ICAxLjAxRS02MTc0DQorZHFuZXh0cDE4OCBuZXh0cGx1cyAgIDEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtPiAgMS4wMDAwMUUtNjE3MQ0KK2RxbmV4dHAxODkgbmV4dHBsdXMgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorZHFuZXh0cDE5MCBuZXh0cGx1cyAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCitkcW5leHRwMTkxIG5leHRwbHVzICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KK2RxbmV4dHAxOTIgbmV4dHBsdXMgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0cDE5MyBuZXh0cGx1cyAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgSW5maW5pdHkNCisNCistLSBOdWxsIHRlc3RzDQorZHFuZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFOZXh0VG93YXJkLmRlY1Rlc3QKaW5kZXggMTA3ZTdmNS4uZTZkMWUwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxTmV4dFRvd2FyZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU5leHRUb3dhcmQuZGVjVGVzdApAQCAtMSwzNzUgKzEsMzc1IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLQotLS0gU2FuaXR5IGNoZWNrIHdpdGggYSBzY2F0dGVyaW5nIG9mIG51bWVyaWNzCi1kcW5leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMAotZHFuZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTAKLWRxbmV4dHQwMDMgbmV4dHRvd2FyZCAgIDEgICAgIDEwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDAwNiBuZXh0dG93YXJkICAtMSAgICAtMTAgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQwMDkgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICtJbmZpbml0eSAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDAxMSBuZXh0dG93YXJkICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAxMCAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW5leHR0MDEyIG5leHR0b3dhcmQgICAxMCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHQwMTMgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtMTAgIC0+IC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFuZXh0dDAxNCBuZXh0dG93YXJkICAtMTAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHR0MDE1IG5leHR0b3dhcmQgICAgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggIDEwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHQwMTYgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDAxNyBuZXh0dG93YXJkICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IC0xMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHR0MDE4IG5leHR0b3dhcmQgIC0xMCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLQotLS0tLS0tLSBsaHM9cmhzCi0tLSBmaW5pdGVzCi1kcW5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3Ci1kcW5leHR0MTAyIG5leHR0b3dhcmQgICAgICAgICAtNyAgICAgIC03IC0+IC03Ci1kcW5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQotZHFuZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUKLWRxbmV4dHQxMDUgbmV4dHRvd2FyZCAgICAgICA3LjUwICAgICA3LjUgLT4gIDcuNTAKLWRxbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKLWRxbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwCi1kcW5leHR0MTA4IG5leHR0b3dhcmQgICAgICAtNy41MDAgICAtNy41IC0+IC03LjUwMAotCi0tLSB6ZXJvcwotZHFuZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAotZHFuZXh0dDExMiBuZXh0dG93YXJkICAgICAgICAgLTAgICAgICAtMCAtPiAtMAotZHFuZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNAotZHFuZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAotZHFuZXh0dDExNSBuZXh0dG93YXJkICAgICAwLjAwMDAwMDAwMDAwICAgMC4wMDAwMDAwMDAwMDAgLT4gIDBFLTExCi1kcW5leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMDAwMDAwMDAgIC0wLjAwICAgICAgICAgICAtPiAtMEUtMTEKLWRxbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQotZHFuZXh0dDExOCBuZXh0dG93YXJkICAgICAtMEUtMTQxICAgLTAwMCAtPiAtMEUtMTQxCi0KLS0tIGZ1bGwgY29lZmZpY2llbnRzLCBhbHRlcm5hdGluZyBiaXRzCi1kcW5leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4Ci1kcW5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4Ci1kcW5leHR0MTIzIG5leHR0b3dhcmQgICAxMzQxMzQxMzQgICAgMTM0MTM0MTM0IC0+ICAgMTM0MTM0MTM0Ci1kcW5leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0Ci0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcW5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgIC0+ICAgMUUtNjE0MwotZHFuZXh0dDEzMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcW5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgIDFFLTYxNzYgICAgICAgICAgICAtPiAgIDFFLTYxNzYKLQotZHFuZXh0dDEzNSBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAgLT4gIC0xRS02MTc2Ci1kcW5leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgIC0+ICAtMUUtNjE0MwotZHFuZXh0dDEzOCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci0KLS0tLS0tLS0gbGhzPHJocwotZHFuZXh0dDIwMSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYKLWRxbmV4dHQyMDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OAotZHFuZXh0dDIwNCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHQyMDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQyMDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFuZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCi1kcW5leHR0MjEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi1kcW5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci1kcW5leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Ci1kcW5leHR0MjEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci1kcW5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kcW5leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Ci1kcW5leHR0MjE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci1kcW5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi1kcW5leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCi1kcW5leHR0MjE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCi0KLWRxbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0Ci1kcW5leHR0MjIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiBJbmZpbml0eSAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1Ci1kcW5leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgotZHFuZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcKLWRxbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Ci1kcW5leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDIyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDIyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFuZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFuZXh0dDIzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotZHFuZXh0dDIzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotZHFuZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAotZHFuZXh0dDIzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotZHFuZXh0dDIzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotZHFuZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNwotZHFuZXh0dDIzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotZHFuZXh0dDIzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotZHFuZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAotZHFuZXh0dDI0MCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotCi0tLSBaZXJvcwotZHFuZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzMDEgbmV4dHRvd2FyZCAgMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzMDQgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzMDcgbmV4dHRvd2FyZCAtMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc3BlY2lhbHMKLWRxbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkKLWRxbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFOCi1kcW5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3Ci1kcW5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgotZHFuZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43NwotZHFuZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotZHFuZXh0dDM3MCBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKLWRxbmV4dHQzNzEgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0Ci1kcW5leHR0MzcyIG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDM3MyBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDBFLTYxNDMgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzNzQgbmV4dHRvd2FyZCAgLTlFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLThFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Mzc1IG5leHR0b3dhcmQgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05LjhFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDM3NiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NyAgICAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzNzcgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Mzc4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDM3OSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NkUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzODAgbmV4dHRvd2FyZCAgLTBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0MzgxIG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxbmV4dHQzODIgbmV4dHRvd2FyZCAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRxbmV4dHQzODMgbmV4dHRvd2FyZCAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Mzg0IG5leHR0b3dhcmQgICAxRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAyRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDM4NSBuZXh0dG93YXJkICAgMkUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgM0UtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzODYgbmV4dHRvd2FyZCAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Mzg3IG5leHR0b3dhcmQgICAxMDBFLTYxNzYgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAxRS02MTc0ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDM4OCBuZXh0dG93YXJkICAgMTAwMDAwRS02MTc2ICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMUUtNjE3MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQzODkgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCi1kcW5leHR0MzkwIG5leHR0b3dhcmQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MwotZHFuZXh0dDM5MSBuZXh0dG93YXJkICAgMUUtNjE0MyAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKLWRxbmV4dHQzOTIgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0Ci1kcW5leHR0MzkzIG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgSW5maW5pdHkgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0dDM5NCBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIEluZmluaXR5ICAtPiAgSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0tLS0tLSBsaHM+cmhzCi1kcW5leHR0NDAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0Ci1kcW5leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1Ci1kcW5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Ci1kcW5leHR0NDA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Ci1kcW5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHR0NDA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDQwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW5leHR0NDEwIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgotZHFuZXh0dDQxMiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCi1kcW5leHR0NDEzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLWRxbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQotZHFuZXh0dDQxNSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Ci1kcW5leHR0NDE2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLWRxbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAotZHFuZXh0dDQxOCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Ci1kcW5leHR0NDE5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLWRxbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQotCi1kcW5leHR0NDIxIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NSAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2Ci1kcW5leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3Ci1kcW5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Ci1kcW5leHR0NDI0IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFuZXh0dDQyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHR0NDI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLWRxbmV4dHQ0MzAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMwotZHFuZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci1kcW5leHR0NDMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLWRxbmV4dHQ0MzMgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgotZHFuZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci1kcW5leHR0NDM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLWRxbmV4dHQ0MzYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQotZHFuZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi1kcW5leHR0NDM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLWRxbmV4dHQ0MzkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgotCi0tLSBaZXJvcwotZHFuZXh0dDUwMCBuZXh0dG93YXJkIC0wICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDUwMyBuZXh0dG93YXJkIC0wLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDUwNiBuZXh0dG93YXJkICAwRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNwZWNpYWxzCi1kcW5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQotZHFuZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTgotZHFuZXh0dDU1MyBuZXh0dG93YXJkICBzTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcKLWRxbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDU1NiBuZXh0dG93YXJkICAtTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTgotZHFuZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcKLWRxbmV4dHQ1NTkgbmV4dHRvd2FyZCAtc05hTjg4ICAgLUluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotZHFuZXh0dDY3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQKLWRxbmV4dHQ2NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0Ci1kcW5leHR0NjcyIG5leHR0b3dhcmQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NjczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc0IG5leHR0b3dhcmQgIDlFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA4RS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc1IG5leHR0b3dhcmQgIDkuOUUtNjE3NSAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiA5LjhFLTYxNzUgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc2IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc3IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0Njc5IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NjgwIG5leHR0b3dhcmQgIDBFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NjgxIG5leHR0b3dhcmQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAwRS02MTc2ICAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxbmV4dHQ2ODIgbmV4dHRvd2FyZCAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDFFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQKLQotZHFuZXh0dDY4MyBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4NCBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4NSBuZXh0dG93YXJkICAtMkUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTNFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4NiBuZXh0dG93YXJkICAtMTBFLTYxNzYgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4NyBuZXh0dG93YXJkICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4OCBuZXh0dG93YXJkICAtMTAwMDAwRS02MTc2ICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDFFLTYxNzEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDY4OSBuZXh0dG93YXJkICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCi1kcW5leHR0NjkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKLWRxbmV4dHQ2OTEgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MwotZHFuZXh0dDY5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIC1JbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHR0NjkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0tLS0tLSBTcGVjaWFscwotZHFuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWRxbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCi1kcW5leHR0Nzg4IG5leHR0b3dhcmQgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZHFuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQ3OTAgbmV4dHRvd2FyZCAtMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0NzkxIG5leHR0b3dhcmQgIDAgICAgLUluZiAgIC0+IC0xRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHFuZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ci1kcW5leHR0NzkzIG5leHR0b3dhcmQgIDEwMDAgLUluZiAgIC0+ICA5OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDc5NCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLQotZHFuZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcW5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFuZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcW5leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQotZHFuZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRxbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kcW5leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQotZHFuZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLWRxbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTgotZHFuZXh0dDgyMiBuZXh0dG93YXJkICBOYU4gLTEwMDAgICAtPiAgTmFOCi1kcW5leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRxbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTgotZHFuZXh0dDgyNSBuZXh0dG93YXJkICBOYU4gIDAgICAgICAtPiAgTmFOCi1kcW5leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRxbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTgotZHFuZXh0dDgyOCBuZXh0dG93YXJkICBOYU4gIEluZiAgICAtPiAgTmFOCi1kcW5leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRxbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTgotZHFuZXh0dDgzMSBuZXh0dG93YXJkIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1kcW5leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRxbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTgotZHFuZXh0dDgzNCBuZXh0dG93YXJkICAwICAgIE5hTiAgICAtPiAgTmFOCi1kcW5leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRxbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTgotZHFuZXh0dDgzNyBuZXh0dG93YXJkICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWRxbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDMgbmV4dHRvd2FyZCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDYgbmV4dHRvd2FyZCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NDkgbmV4dHRvd2FyZCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTIgbmV4dHRvd2FyZCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTUgbmV4dHRvd2FyZCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTggbmV4dHRvd2FyZCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFuZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQotZHFuZXh0dDg2MiBuZXh0dG93YXJkICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgotZHFuZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMwotZHFuZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONAotZHFuZXh0dDg2NSBuZXh0dG93YXJkICBOYU41ICAgK05hTjYgICAtPiAgTmFONQotZHFuZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONwotZHFuZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAotZHFuZXh0dDg2OCBuZXh0dG93YXJkICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQotZHFuZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKLWRxbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDg3MiBuZXh0dG93YXJkICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDg3NSBuZXh0dG93YXJkICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDg3OCBuZXh0dG93YXJkIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KLWRxbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDg4MSBuZXh0dG93YXJkICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgotZHFuZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCi1kcW5leHR0ODg0IG5leHR0b3dhcmQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAotZHFuZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE51bGwgdGVzdHMKLWRxbmV4dHQ5MDAgbmV4dHRvd2FyZCAxICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFuZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxTmV4dFRvd2FyZC5kZWNUZXN0IC0tIGRlY1F1YWQgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCisNCistLSBTYW5pdHkgY2hlY2sgd2l0aCBhIHNjYXR0ZXJpbmcgb2YgbnVtZXJpY3MNCitkcW5leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMA0KK2RxbmV4dHQwMDIgbmV4dHRvd2FyZCAgLTEwICAgLTEwICAgLT4gLTEwDQorZHFuZXh0dDAwMyBuZXh0dG93YXJkICAgMSAgICAgMTAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0MDA0IG5leHR0b3dhcmQgICAxICAgIC0xMCAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHR0MDA2IG5leHR0b3dhcmQgIC0xICAgIC0xMCAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHQwMDcgbmV4dHRvd2FyZCAgIDAgICAgIDEwICAgLT4gIDFFLTYxNzYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS02MTc2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDAwOSBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtSW5maW5pdHkgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQwMTEgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgMTAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbmV4dHQwMTIgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQwMTMgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtMTAgIC0+IC0xMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbmV4dHQwMTQgbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQwMTUgbmV4dHRvd2FyZCAgICAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgMTAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQwMTYgbmV4dHRvd2FyZCAgIDEwICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQwMTcgbmV4dHRvd2FyZCAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAtMTAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQwMTggbmV4dHRvd2FyZCAgLTEwIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OCAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KKw0KKy0tLS0tLS0gbGhzPXJocw0KKy0tIGZpbml0ZXMNCitkcW5leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3DQorZHFuZXh0dDEwMiBuZXh0dG93YXJkICAgICAgICAgLTcgICAgICAtNyAtPiAtNw0KK2RxbmV4dHQxMDMgbmV4dHRvd2FyZCAgICAgICAgIDc1ICAgICAgNzUgLT4gIDc1DQorZHFuZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUNCitkcW5leHR0MTA1IG5leHR0b3dhcmQgICAgICAgNy41MCAgICAgNy41IC0+ICA3LjUwDQorZHFuZXh0dDEwNiBuZXh0dG93YXJkICAgICAgLTcuNTAgICAtNy41MCAtPiAtNy41MA0KK2RxbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwDQorZHFuZXh0dDEwOCBuZXh0dG93YXJkICAgICAgLTcuNTAwICAgLTcuNSAtPiAtNy41MDANCisNCistLSB6ZXJvcw0KK2RxbmV4dHQxMTEgbmV4dHRvd2FyZCAgICAgICAgICAwICAgICAgIDAgLT4gIDANCitkcW5leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wDQorZHFuZXh0dDExMyBuZXh0dG93YXJkICAgICAgIDBFKzQgICAgICAgMCAtPiAgMEUrNA0KK2RxbmV4dHQxMTQgbmV4dHRvd2FyZCAgICAgIC0wRSs0ICAgICAgLTAgLT4gLTBFKzQNCitkcW5leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMDAwMDAwMDAgICAwLjAwMDAwMDAwMDAwMCAtPiAgMEUtMTENCitkcW5leHR0MTE2IG5leHR0b3dhcmQgICAgLTAuMDAwMDAwMDAwMDAgIC0wLjAwICAgICAgICAgICAtPiAtMEUtMTENCitkcW5leHR0MTE3IG5leHR0b3dhcmQgICAgICAwRS0xNDEgICAgICAwIC0+ICAwRS0xNDENCitkcW5leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RxbmV4dHQxMjEgbmV4dHRvd2FyZCAgIDI2ODI2ODI2OCAgICAyNjgyNjgyNjggLT4gICAyNjgyNjgyNjgNCitkcW5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4DQorZHFuZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNA0KK2RxbmV4dHQxMjQgbmV4dHRvd2FyZCAgLTEzNDEzNDEzNCAgIC0xMzQxMzQxMzQgLT4gIC0xMzQxMzQxMzQNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2RxbmV4dHQxMzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgIC0+ICAgMUUtNjE0Mw0KK2RxbmV4dHQxMzMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxbmV4dHQxMzQgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgIC0+ICAgMUUtNjE3Ng0KKw0KK2RxbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTYxNzYgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgIC0+ICAtMUUtNjE3Ng0KK2RxbmV4dHQxMzYgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTYxNDMgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgIC0+ICAtMUUtNjE0Mw0KK2RxbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKw0KKy0tLS0tLS0gbGhzPHJocw0KK2RxbmV4dHQyMDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQorZHFuZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCitkcW5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NyBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KK2RxbmV4dHQyMDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0MjA3IG5leHR0b3dhcmQgIDEuMCAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0MjA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0MjA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQorZHFuZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KK2RxbmV4dHQyMTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQNCitkcW5leHR0MjEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQorZHFuZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KK2RxbmV4dHQyMTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcNCitkcW5leHR0MjE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQorZHFuZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KK2RxbmV4dHQyMTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTANCitkcW5leHR0MjE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQorZHFuZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMg0KKw0KK2RxbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQorZHFuZXh0dDIyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYgSW5maW5pdHkgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NQ0KK2RxbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2DQorZHFuZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCitkcW5leHR0MjI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KK2RxbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFuZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHQyMzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDINCitkcW5leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQorZHFuZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KK2RxbmV4dHQyMzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUNCitkcW5leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQorZHFuZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RxbmV4dHQyMzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgNCitkcW5leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQorZHFuZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KK2RxbmV4dHQyNDAgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTENCisNCistLSBaZXJvcw0KK2RxbmV4dHQzMDAgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MzAyIG5leHR0b3dhcmQgIDBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzMDMgbmV4dHRvd2FyZCAgMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MzA1IG5leHR0b3dhcmQgLTAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzMDYgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MzA4IG5leHR0b3dhcmQgLTBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS02MTc2ICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzMDkgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgSW5maW5pdHkgLT4gIDFFLTYxNzYgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3BlY2lhbHMNCitkcW5leHR0MzUwIG5leHR0b3dhcmQgICBJbmYgICAgSW5maW5pdHkgLT4gIEluZmluaXR5DQorZHFuZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQzNTIgbmV4dHRvd2FyZCAgIE5hTiAgICBJbmZpbml0eSAtPiAgTmFODQorZHFuZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQzNTQgbmV4dHRvd2FyZCAgIE5hTjc3ICBJbmZpbml0eSAtPiAgTmFONzcNCitkcW5leHR0MzU1IG5leHR0b3dhcmQgIHNOYU44OCAgSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4NCitkcW5leHR0MzU3IG5leHR0b3dhcmQgLXNOYU4gICAgSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDM1OCBuZXh0dG93YXJkICAtTmFONzcgIEluZmluaXR5IC0+IC1OYU43Nw0KK2RxbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK2RxbmV4dHQzNzAgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0DQorZHFuZXh0dDM3MSBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFKzYxNDQNCitkcW5leHR0MzcyIG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzNzMgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDAwMDAwMDAwRS02MTQzICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDM3NCBuZXh0dG93YXJkICAtOUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAtOEUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Mzc1IG5leHR0b3dhcmQgIC05LjlFLTYxNzUgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC05LjhFLTYxNzUgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzNzYgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFLTYxNDcgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDM3NyBuZXh0dG93YXJkICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUtNjE0NCAgIEluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Mzc4IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ0ICAgSW5maW5pdHkgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RS02MTQ0ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzNzkgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICBJbmZpbml0eSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTZFLTYxNDQgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDM4MCBuZXh0dG93YXJkICAtMEUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0MzgxIG5leHR0b3dhcmQgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0wRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcW5leHR0MzgyIG5leHR0b3dhcmQgIC0yRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+IC0xRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxbmV4dHQzODMgbmV4dHRvd2FyZCAgIDBFLTYxNzYgICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDM4NCBuZXh0dG93YXJkICAgMUUtNjE3NiAgICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMkUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Mzg1IG5leHR0b3dhcmQgICAyRS02MTc2ICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAzRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzODYgbmV4dHRvd2FyZCAgIDEwRS02MTc2ICAgICAgICAgICAgICAgICBJbmZpbml0eSAgLT4gIDEuMUUtNjE3NSAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDM4NyBuZXh0dG93YXJkICAgMTAwRS02MTc2ICAgICAgICAgICAgICAgIEluZmluaXR5ICAtPiAgMS4wMUUtNjE3NCAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Mzg4IG5leHR0b3dhcmQgICAxMDAwMDBFLTYxNzYgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAxRS02MTcxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQzODkgbmV4dHRvd2FyZCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICBJbmZpbml0eSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQorZHFuZXh0dDM5MCBuZXh0dG93YXJkICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIEluZmluaXR5ICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCitkcW5leHR0MzkxIG5leHR0b3dhcmQgICAxRS02MTQzICAgICAgICAgICAgICAgICAgSW5maW5pdHkgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0Mw0KK2RxbmV4dHQzOTIgbmV4dHRvd2FyZCAgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3RSs2MTQ0ICBJbmZpbml0eSAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0DQorZHFuZXh0dDM5MyBuZXh0dG93YXJkICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQgIEluZmluaXR5ICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0Mzk0IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgSW5maW5pdHkgIC0+ICBJbmZpbml0eSAgICAgICAgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tLS0tLS0gbGhzPnJocw0KK2RxbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQNCitkcW5leHR0NDAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1DQorZHFuZXh0dDQwMyBuZXh0dG93YXJkICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ng0KK2RxbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcNCitkcW5leHR0NDA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4DQorZHFuZXh0dDQwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxbmV4dHQ0MTAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMg0KK2RxbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMw0KK2RxbmV4dHQ0MTMgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNA0KK2RxbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQ0KK2RxbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNg0KK2RxbmV4dHQ0MTYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDggICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNw0KK2RxbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOA0KK2RxbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQ0KK2RxbmV4dHQ0MTkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMA0KK2RxbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQ0KKw0KK2RxbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCitkcW5leHR0NDIyIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3DQorZHFuZXh0dDQyMyBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OA0KK2RxbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHR0NDI1IG5leHR0b3dhcmQgLTAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcW5leHR0NDI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFuZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyDQorZHFuZXh0dDQzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzDQorZHFuZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0DQorZHFuZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1DQorZHFuZXh0dDQzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2DQorZHFuZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3DQorZHFuZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4DQorZHFuZXh0dDQzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5DQorZHFuZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwDQorZHFuZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExDQorZHFuZXh0dDQzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyDQorDQorLS0gWmVyb3MNCitkcW5leHR0NTAwIG5leHR0b3dhcmQgLTAgICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDUwMiBuZXh0dG93YXJkICAwLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0NTAzIG5leHR0b3dhcmQgLTAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDUwNSBuZXh0dG93YXJkICAwRSszMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0NTA2IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgICAtSW5maW5pdHkgLT4gLTFFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtNjE3NiAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3BlY2lhbHMNCitkcW5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0NTUxIG5leHR0b3dhcmQgIC1JbmYgICAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkNCitkcW5leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFODQorZHFuZXh0dDU1MyBuZXh0dG93YXJkICBzTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDU1NCBuZXh0dG93YXJkICAgTmFONzcgICAtSW5maW5pdHkgLT4gIE5hTjc3DQorZHFuZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDU1NiBuZXh0dG93YXJkICAtTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTg0KK2RxbmV4dHQ1NTcgbmV4dHRvd2FyZCAtc05hTiAgICAgLUluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43Nw0KK2RxbmV4dHQ1NTkgbmV4dHRvd2FyZCAtc05hTjg4ICAgLUluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQorZHFuZXh0dDY3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OThFKzYxNDQNCitkcW5leHR0NjcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RSs2MTQ0ICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5N0UrNjE0NA0KK2RxbmV4dHQ2NzIgbmV4dHRvd2FyZCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0NjczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDY3NCBuZXh0dG93YXJkICA5RS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gOEUtNjE3NiAgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ2NzUgbmV4dHRvd2FyZCAgOS45RS02MTc1ICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDkuOEUtNjE3NSAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Njc2IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFLTYxNDcgICAgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4RS02MTQ3ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDY3NyBuZXh0dG93YXJkICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RS02MTQ0ICAgIC1JbmZpbml0eSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ2NzggbmV4dHRvd2FyZCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUtNjE0NCAgICAtSW5maW5pdHkgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Njc5IG5leHR0b3dhcmQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTdFLTYxNDQgICAgLUluZmluaXR5ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2RS02MTQ0ICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDY4MCBuZXh0dG93YXJkICAwRS02MTc2ICAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTFFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ2ODEgbmV4dHRvd2FyZCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDBFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RxbmV4dHQ2ODIgbmV4dHRvd2FyZCAgMkUtNjE3NiAgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IDFFLTYxNzYgICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcW5leHR0NjgzIG5leHR0b3dhcmQgIC0wRS02MTc2ICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMUUtNjE3NiAgICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDY4NCBuZXh0dG93YXJkICAtMUUtNjE3NiAgICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTJFLTYxNzYgICAgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ2ODUgbmV4dHRvd2FyZCAgLTJFLTYxNzYgICAgICAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0zRS02MTc2ICAgICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Njg2IG5leHR0b3dhcmQgIC0xMEUtNjE3NiAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4xRS02MTc1ICAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCAgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDY4NyBuZXh0dG93YXJkICAtMTAwRS02MTc2ICAgICAgICAgICAgICAgIC1JbmZpbml0eSAgLT4gLTEuMDFFLTYxNzQgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ2ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtNjE3NiAgICAgICAgICAgICAtSW5maW5pdHkgIC0+IC0xLjAwMDAxRS02MTcxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsICBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0Njg5IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCitkcW5leHR0NjkwIG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCitkcW5leHR0NjkxIG5leHR0b3dhcmQgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLUluZmluaXR5ICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMNCitkcW5leHR0NjkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OEUrNjE0NCAgLUluZmluaXR5ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0NjkzIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLUluZmluaXR5ICAtPiAtSW5maW5pdHkgICAgICAgICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCistLS0tLS0tIFNwZWNpYWxzDQorZHFuZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitkcW5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQ3ODIgbmV4dHRvd2FyZCAtSW5mICAtMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQ3ODUgbmV4dHRvd2FyZCAtSW5mICAgMSAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQ0KK2RxbmV4dHQ3ODggbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZHFuZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTYxNzYgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHFuZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkNCitkcW5leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KKw0KK2RxbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDgwMSBuZXh0dG93YXJkICBJbmYgIC0xMDAwICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDgwNCBuZXh0dG93YXJkICBJbmYgICAwICAgICAtPiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcW5leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDgwNyBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcW5leHR0ODA4IG5leHR0b3dhcmQgLTEwMDAgIEluZiAgIC0+IC05OTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OQ0KK2RxbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFuZXh0dDgxMCBuZXh0dG93YXJkIC0xICAgICBJbmYgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFuZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtNjE3NiAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkcW5leHR0ODEyIG5leHR0b3dhcmQgIDAgICAgIEluZiAgIC0+ICAxRS02MTc2ICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RxbmV4dHQ4MTMgbmV4dHRvd2FyZCAgMSAgICAgSW5mICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHFuZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDENCitkcW5leHR0ODE1IG5leHR0b3dhcmQgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK2RxbmV4dHQ4MjEgbmV4dHRvd2FyZCAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjMgbmV4dHRvd2FyZCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjQgbmV4dHRvd2FyZCAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjYgbmV4dHRvd2FyZCAgTmFOICAxICAgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjcgbmV4dHRvd2FyZCAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2RxbmV4dHQ4MjkgbmV4dHRvd2FyZCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzAgbmV4dHRvd2FyZCAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzIgbmV4dHRvd2FyZCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzMgbmV4dHRvd2FyZCAtMCAgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzUgbmV4dHRvd2FyZCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzYgbmV4dHRvd2FyZCAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2RxbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK2RxbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFuZXh0dDg2MSBuZXh0dG93YXJkICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KK2RxbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCitkcW5leHR0ODYzIG5leHR0b3dhcmQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorZHFuZXh0dDg2NCBuZXh0dG93YXJkICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KK2RxbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCitkcW5leHR0ODY2IG5leHR0b3dhcmQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorZHFuZXh0dDg2NyBuZXh0dG93YXJkIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KK2RxbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCitkcW5leHR0ODY5IG5leHR0b3dhcmQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK2RxbmV4dHQ4NzEgbmV4dHRvd2FyZCAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzMgbmV4dHRvd2FyZCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzQgbmV4dHRvd2FyZCAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzYgbmV4dHRvd2FyZCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzcgbmV4dHRvd2FyZCAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4NzkgbmV4dHRvd2FyZCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4ODAgbmV4dHRvd2FyZCAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxbmV4dHQ4ODIgbmV4dHRvd2FyZCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorZHFuZXh0dDg4MyBuZXh0dG93YXJkIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCitkcW5leHR0ODg1IG5leHR0b3dhcmQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOdWxsIHRlc3RzDQorZHFuZXh0dDkwMCBuZXh0dG93YXJkIDEgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFuZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcU9yLmRlY1Rlc3QKaW5kZXggMWZkMzRiMi4uZGFhM2M4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxT3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFPci5kZWNUZXN0CkBAIC0xLDQwMSArMSw0MDEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQotZHFvcjAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAotZHFvcjAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQotZHFvcjAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQotZHFvcjAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQotZHFvcjAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMAotLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTEKLWRxb3IwMDYgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1kcW9yMDA3IG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxb3IwMDggb3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFvcjAwOSBvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW9yMDEwIG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAotZHFvcjAxMSBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcW9yMDEyIG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxb3IwMTMgb3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLWRxb3I2MDEgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjAyIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYwMyBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MDQgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjA1IG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYwNiBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MDcgb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjA4IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYwOSBvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MTAgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjExIG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYxMiBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MTMgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjE0IG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYxNSBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MTYgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjE3IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYxOCBvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MTkgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjIwIG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYyMSBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MjIgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjIzIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYyNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MjUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjI2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYyNyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2Mjggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjI5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYzMCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MzEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjMyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjYzMyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2MzQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi0KLWRxb3I2NDEgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjQyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY0MyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NDQgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjQ1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY0NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NDcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjQ4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY0OSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NTAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjUxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY1MiBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NTMgb3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjU0IG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY1NSBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NTYgb3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjU3IG9yIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAgMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMTAxMDEwMTAxMCAgLT4gMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMAotZHFvcjY1OCBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NTkgb3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjYwIG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY2MSBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NjIgb3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjYzIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY2NCBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NjUgb3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjY2IG9yIDAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDAwMTAxMDEwMSAgLT4gIDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMQotZHFvcjY2NyBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2Njggb3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjY5IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY3MCBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NzEgb3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjcyIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY3MyBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2NzQgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjc1IG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMAotZHFvcjY3NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKLQotZHFvcjY4MSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2ODIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjgzIG9yIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMDExMTExMTExMTExMTExMTExMTAxMSAgLT4gMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY4NCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTEwMTExMTEwMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2ODUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDEwMTExMTExMTAxMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjg2IG9yIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMDExMTExMTExMTExMTAxMTExMSAgLT4gMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY4NyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTAxMTExMTExMTEwMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2ODggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMDExMTExMTExMTAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjg5IG9yIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTEwMTExMTExMTExMDExMTExMTAxMTExMTExMSAgLT4gMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY5MCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTAxMTExMTExMTEwMTExMTAxMTExMTExMTAgIC0+IDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2OTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMDExMTExMTExMTAxMTAxMTExMTExMTAxICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExCi1kcW9yNjkyIG9yIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMDAxMTExMTExMTAxMSAgLT4gMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMQotZHFvcjY5MyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAwMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEKLWRxb3I2OTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExCi1kcW9yNjk1IG9yIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTAxMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMQotZHFvcjY5NiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTEwMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEKLWRxb3I2OTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExCi1kcW9yNjk4IG9yIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTAwMTExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMQotZHFvcjY5OSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTAxMTExMTAxMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEKLWRxb3I3MDAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExCi1kcW9yNzAxIG9yIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgMTExMTExMTExMTExMTAxMTExMTEwMTAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMQotZHFvcjcwMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTAxMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEKLWRxb3I3MDMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTAxMDExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExCi1kcW9yNzA0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgMTExMTExMTExMTAxMTExMTExMTAxMTEwMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMQotZHFvcjcwNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDAxMTExMTExMTAxMTExMTExMTAxMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEKLWRxb3I3MDYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMDExMTExMTAxMTExMTExMTAxMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExCi1kcW9yNzA3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgMTEwMTExMTAxMTExMTExMTAxMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMQotZHFvcjcwOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTAxMTAxMTExMTExMTAxMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEKLWRxb3I3MDkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMDAxMTExMTExMTAxMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExCi1kcW9yNzEwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgMTExMTAwMTExMTExMTAxMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMQotZHFvcjcxMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTAxMTExMTAxMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEKLWRxb3I3MTIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMDExMTAxMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExCi1kcW9yNzEzIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgMTAxMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMQotZHFvcjcxNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAKLQotCi0KLS0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2Ci1kcW9yMDIwIG9yIDExMTExMTExMTExMTExMTEgICAgIDExMTExMTExMTExMTExMTEgIC0+ICAxMTExMTExMTExMTExMTExCi1kcW9yMDIxIG9yICAxMTExMTExMTExMTExMTEgICAgICAxMTExMTExMTExMTExMTEgIC0+ICAgMTExMTExMTExMTExMTExCi1kcW9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExCi1kcW9yMDIzIG9yICAgIDExMTExMTExMTExMTEgICAgICAgIDExMTExMTExMTExMTEgIC0+ICAgICAxMTExMTExMTExMTExCi1kcW9yMDI0IG9yICAgICAxMTExMTExMTExMTEgICAgICAgICAxMTExMTExMTExMTEgIC0+ICAgICAgMTExMTExMTExMTExCi1kcW9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExCi1kcW9yMDI2IG9yICAgICAgIDExMTExMTExMTEgICAgICAgICAgIDExMTExMTExMTEgIC0+ICAgICAgICAxMTExMTExMTExCi1kcW9yMDI3IG9yICAgICAgICAxMTExMTExMTEgICAgICAgICAgICAxMTExMTExMTEgIC0+ICAgICAgICAgMTExMTExMTExCi1kcW9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExCi1kcW9yMDI5IG9yICAgICAgICAgIDExMTExMTEgICAgICAgICAgICAgIDExMTExMTEgIC0+ICAgICAgICAgICAxMTExMTExCi1kcW9yMDMwIG9yICAgICAgICAgICAxMTExMTEgICAgICAgICAgICAgICAxMTExMTEgIC0+ICAgICAgICAgICAgMTExMTExCi1kcW9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExCi1kcW9yMDMyIG9yICAgICAgICAgICAgIDExMTEgICAgICAgICAgICAgICAgIDExMTEgIC0+ICAgICAgICAgICAgICAxMTExCi1kcW9yMDMzIG9yICAgICAgICAgICAgICAxMTEgICAgICAgICAgICAgICAgICAxMTEgIC0+ICAgICAgICAgICAgICAgMTExCi1kcW9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExCi1kcW9yMDM1IG9yICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgICAgICAgICAxCi1kcW9yMDM2IG9yICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgIDAgIC0+ICAgICAgICAgICAgICAgICAwCi0KLWRxb3IwNDIgb3IgIDExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDExMTExMTExMTAwMDAwMDAKLWRxb3IwNDMgb3IgICAxMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMDEwMDAwMDAwMCAgLT4gIDEwMTExMTExMTAwMDAwMDAKLWRxb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDAKLWRxb3IwNDUgb3IgICAgIDExMTExMDAwMDAwMCAgICAgMTAwMDAxMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKLWRxb3IwNDYgb3IgICAgICAxMTExMDAwMDAwMCAgICAgMTAwMDEwMDAwMDAwMDAwMCAgLT4gIDEwMDAxMTExMTAwMDAwMDAKLWRxb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDAKLWRxb3IwNDggb3IgICAgICAgIDExMDAwMDAwMCAgICAgMTAxMDAwMDAwMDAwMDAwMCAgLT4gIDEwMTAwMDAxMTAwMDAwMDAKLWRxb3IwNDkgb3IgICAgICAgICAxMDAwMDAwMCAgICAgMTEwMDAwMDAwMDAwMDAwMCAgLT4gIDExMDAwMDAwMTAwMDAwMDAKLQotZHFvcjA5MCBvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5MSBvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5MyBvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5NCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQotZHFvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5NiBvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5NyBvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotZHFvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotCi1kcW9yMTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExCi1kcW9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExCi1kcW9yMTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCi1kcW9yMTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExCi1kcW9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExCi1kcW9yMTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCi1kcW9yMTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExCi1kcW9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExCi1kcW9yMTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotZHFvcjIyMCBvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyMSBvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyMyBvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyNCBvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyNiBvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyNyBvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIyOSBvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIzMCBvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjIzMiBvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYSBmZXcgcmFuZG9tcwotZHFvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWRxb3IyNTAgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjUxIG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI1MiBvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNTMgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjU0IG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI1NSBvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNTYgb3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjU3IG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI1OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjYwIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI2MSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNjIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjYzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI2NCBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNjUgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRC0xCi1kcW9yMjcwIG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI3MSBvciAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNzIgb3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjczIG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI3NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyNzUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjc2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI3NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1kcW9yMjgwIG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI4MSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyODIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDggMTAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjgzIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDA5IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI4NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyODUgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjg2IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDAxMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI4NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kcW9yMjg4IG9yICAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI4OSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyOTAgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjkxIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDkwMDAwMTAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI5MiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyOTMgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjk0IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwODAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI5NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHNpZ25zCi1kcW9yMjk2IG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IyOTcgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjI5OCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMjk5IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMTExMDAxMTExMDAxMTExMDAwMDExMDAwMTAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKLWRxb3IzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSsxOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjMzMiBvciAgMyAgIDFFLTE5OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtMTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzMzQgb3IgIDUgICAxRS0xMDA5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjMzNSBvciAgNiAgIC0xRS0xMDA5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTE5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzMzcgb3IgIDggICAtMUUtMTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzQxIG9yICA5Ljk5OTk5OTk5RSsyOTk5ICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNDIgb3IgIDFFLTI5OTkgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzQ0IG9yICAxRS0xMDA5ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNDUgb3IgIC0xRS0xMDA5ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OTkgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzQ3IG9yICAtMUUtMjk5OSAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNDggb3IgIC05Ljk5OTk5OTk5RSsyOTk5ICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKLWRxb3IzNjEgb3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzYzIG9yICAwLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNjQgb3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzY2IG9yICA5RSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNzEgb3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzczIG9yICAwIDAuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3IzNzQgb3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yMzc2IG9yICAwIDlFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgotZHFvcjc4MCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yNzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjc4MyBvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yNzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjc4NiBvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yNzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjc4OSBvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yNzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjc5MiBvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yNzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcW9yODAwIG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgwMiBvciAgSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODAzIG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgwNSBvciAgSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODA2IG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgwOCBvciAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODA5IG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgxMSBvciAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODEyIG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgxNCBvciAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODE1IG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFvcjgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFvcjg0MSBvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg0NCBvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg0NyBvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg1MCBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg1MyBvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg1NiBvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg1OSBvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFvcjg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFvcjg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcW9yODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFPci5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIE9SIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KK2Rxb3IwMDEgb3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCitkcW9yMDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxDQorZHFvcjAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQ0KK2Rxb3IwMDQgb3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDENCitkcW9yMDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwDQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCitkcW9yMDA2IG9yIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK2Rxb3IwMDcgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxb3IwMDggb3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxb3IwMDkgb3IgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxb3IwMTAgb3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQorZHFvcjAxMSBvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFvcjAxMiBvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFvcjAxMyBvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorDQorLS0gVmFyaW91cyBsZW5ndGhzDQorZHFvcjYwMSBvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjAyIG9yIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MDMgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYwNCBvciAxMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjA1IG9yIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MDYgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYwNyBvciAxMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjA4IG9yIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MDkgb3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYxMCBvciAxMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjExIG9yIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MTIgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYxMyBvciAxMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjE0IG9yIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MTUgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYxNiBvciAxMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjE3IG9yIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MTggb3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYxOSBvciAxMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjIwIG9yIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MjEgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYyMiBvciAxMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjIzIG9yIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MjQgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYyNSBvciAxMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjI2IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2Mjcgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYyOCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjI5IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MzAgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYzMSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjMyIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2MzMgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjYzNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCisNCitkcW9yNjQxIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NDIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY0MyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjQ0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NDUgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY0NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjQ3IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NDggb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY0OSBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjUwIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NTEgb3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY1MiBvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjUzIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NTQgb3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY1NSBvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjU2IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NTcgb3IgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMCAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxMDEwMTAxMDEwICAtPiAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwDQorZHFvcjY1OCBvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjU5IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NjAgb3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY2MSBvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjYyIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NjMgb3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY2NCBvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjY1IG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NjYgb3IgMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMSAwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMDAxMDEwMTAxICAtPiAgMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxDQorZHFvcjY2NyBvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjY4IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2Njkgb3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY3MCBvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjcxIG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NzIgb3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY3MyBvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjc0IG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2NzUgb3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwDQorZHFvcjY3NiBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTANCisNCitkcW9yNjgxIG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMCAgLT4gIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2ODIgb3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTEwMTAxMTExMTExMTExMTExMTExMTExMTAxICAtPiAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY4MyBvciAxMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMDExMTAxMTExMTExMTExMTExMTExMTEwMTEgIC0+IDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjg0IG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMDExMTAxMTExMTAxMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2ODUgb3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDEwMTExMTExMTAxMTExMTExMTExMTExMTAxMTExICAtPiAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY4NiBvciAxMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTAxMTExMTExMTExMTEwMTExMTEgIC0+IDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjg3IG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTAxMDExMTExMTExMTAxMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2ODggb3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTEwMTExMDExMTExMTExMTAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY4OSBvciAxMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMDExMTExMTExMTAxMTExMTEwMTExMTExMTEgIC0+IDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjkwIG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTAxMTExMTExMDExMTExMTExMTAxMTExMDExMTExMTExMCAgLT4gMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2OTEgb3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAwMTExMTExMTExMDExMTExMTExMTAxMTAxMTExMTExMTAxICAtPiAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExDQorZHFvcjY5MiBvciAxMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTAwMTExMTExMTEwMTEgIC0+IDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTENCitkcW9yNjkzIG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDAxMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2OTQgb3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTAxMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExDQorZHFvcjY5NSBvciAxMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTEwMTExMTAxMTEwMTExMTEgIC0+IDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTENCitkcW9yNjk2IG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMTAxMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMQ0KK2Rxb3I2OTcgb3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDAxMTExMTExMTAxMTExMTExICAtPiAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExDQorZHFvcjY5OCBvciAxMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMDExMTExMTEwMTAxMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTENCitkcW9yNjk5IG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMDExMDExMTExMDExMTAxMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMQ0KK2Rxb3I3MDAgb3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTAxMTExMDExMTAxMTExMTAxMTExICAtPiAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExDQorZHFvcjcwMSBvciAxMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMDEwMTExMTExMTAxMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTENCitkcW9yNzAyIG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMDExMTExMTExMDExMTExMTExMTAxMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMQ0KK2Rxb3I3MDMgb3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTAxMTExMTExMTAxMDExMTExMTExMTAxICAtPiAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExDQorZHFvcjcwNCBvciAxMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTEwMTExMDExMTExMTExMTAgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTENCitkcW9yNzA1IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMDExMTExMTExMDExMTExMTExMDExMTExMDExMTExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMQ0KK2Rxb3I3MDYgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMDExMTExMTAxMTExMTExMTAxMTExMTExMDExMTExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExDQorZHFvcjcwNyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExIDExMDExMTEwMTExMTExMTEwMTExMTExMTExMDExMTExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTENCitkcW9yNzA4IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMDExMDExMTExMTExMDExMTExMTExMTExMDExMTExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMQ0KK2Rxb3I3MDkgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMDAxMTExMTExMTAxMTExMTExMTExMTExMDExMTExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExDQorZHFvcjcxMCBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExIDExMTEwMDExMTExMTEwMTExMTExMTExMTExMTExMDExMTEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTENCitkcW9yNzExIG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMDExMDExMTExMDExMTExMTExMTExMTExMTExMDExMSAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMQ0KK2Rxb3I3MTIgb3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTAxMTExMDExMTAxMTExMTExMTExMTExMTExMTExMDExICAtPiAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExDQorZHFvcjcxMyBvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxIDEwMTExMTExMDEwMTExMTExMTExMTExMTExMTExMTExMDEgIC0+IDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDENCitkcW9yNzE0IG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMA0KKw0KKw0KKw0KKy0tICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAxMjM0NTY3ODkwMTIzNDU2DQorZHFvcjAyMCBvciAxMTExMTExMTExMTExMTExICAgICAxMTExMTExMTExMTExMTExICAtPiAgMTExMTExMTExMTExMTExMQ0KK2Rxb3IwMjEgb3IgIDExMTExMTExMTExMTExMSAgICAgIDExMTExMTExMTExMTExMSAgLT4gICAxMTExMTExMTExMTExMTENCitkcW9yMDIyIG9yICAgMTExMTExMTExMTExMTEgICAgICAgMTExMTExMTExMTExMTEgIC0+ICAgIDExMTExMTExMTExMTExDQorZHFvcjAyMyBvciAgICAxMTExMTExMTExMTExICAgICAgICAxMTExMTExMTExMTExICAtPiAgICAgMTExMTExMTExMTExMQ0KK2Rxb3IwMjQgb3IgICAgIDExMTExMTExMTExMSAgICAgICAgIDExMTExMTExMTExMSAgLT4gICAgICAxMTExMTExMTExMTENCitkcW9yMDI1IG9yICAgICAgMTExMTExMTExMTEgICAgICAgICAgMTExMTExMTExMTEgIC0+ICAgICAgIDExMTExMTExMTExDQorZHFvcjAyNiBvciAgICAgICAxMTExMTExMTExICAgICAgICAgICAxMTExMTExMTExICAtPiAgICAgICAgMTExMTExMTExMQ0KK2Rxb3IwMjcgb3IgICAgICAgIDExMTExMTExMSAgICAgICAgICAgIDExMTExMTExMSAgLT4gICAgICAgICAxMTExMTExMTENCitkcW9yMDI4IG9yICAgICAgICAgMTExMTExMTEgICAgICAgICAgICAgMTExMTExMTEgIC0+ICAgICAgICAgIDExMTExMTExDQorZHFvcjAyOSBvciAgICAgICAgICAxMTExMTExICAgICAgICAgICAgICAxMTExMTExICAtPiAgICAgICAgICAgMTExMTExMQ0KK2Rxb3IwMzAgb3IgICAgICAgICAgIDExMTExMSAgICAgICAgICAgICAgIDExMTExMSAgLT4gICAgICAgICAgICAxMTExMTENCitkcW9yMDMxIG9yICAgICAgICAgICAgMTExMTEgICAgICAgICAgICAgICAgMTExMTEgIC0+ICAgICAgICAgICAgIDExMTExDQorZHFvcjAzMiBvciAgICAgICAgICAgICAxMTExICAgICAgICAgICAgICAgICAxMTExICAtPiAgICAgICAgICAgICAgMTExMQ0KK2Rxb3IwMzMgb3IgICAgICAgICAgICAgIDExMSAgICAgICAgICAgICAgICAgIDExMSAgLT4gICAgICAgICAgICAgICAxMTENCitkcW9yMDM0IG9yICAgICAgICAgICAgICAgMTEgICAgICAgICAgICAgICAgICAgMTEgIC0+ICAgICAgICAgICAgICAgIDExDQorZHFvcjAzNSBvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgICAgICAgICAgICAgICAgMQ0KK2Rxb3IwMzYgb3IgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgMCAgLT4gICAgICAgICAgICAgICAgIDANCisNCitkcW9yMDQyIG9yICAxMTExMTExMTAwMDAwMDAgICAgIDExMTExMTExMTAwMDAwMDAgIC0+ICAxMTExMTExMTEwMDAwMDAwDQorZHFvcjA0MyBvciAgIDExMTExMTEwMDAwMDAwICAgICAxMDAwMDAwMTAwMDAwMDAwICAtPiAgMTAxMTExMTExMDAwMDAwMA0KK2Rxb3IwNDQgb3IgICAgMTExMTExMDAwMDAwMCAgICAgMTAwMDAwMTAwMDAwMDAwMCAgLT4gIDEwMDExMTExMTAwMDAwMDANCitkcW9yMDQ1IG9yICAgICAxMTExMTAwMDAwMDAgICAgIDEwMDAwMTAwMDAwMDAwMDAgIC0+ICAxMDAwMTExMTEwMDAwMDAwDQorZHFvcjA0NiBvciAgICAgIDExMTEwMDAwMDAwICAgICAxMDAwMTAwMDAwMDAwMDAwICAtPiAgMTAwMDExMTExMDAwMDAwMA0KK2Rxb3IwNDcgb3IgICAgICAgMTExMDAwMDAwMCAgICAgMTAwMTAwMDAwMDAwMDAwMCAgLT4gIDEwMDEwMDExMTAwMDAwMDANCitkcW9yMDQ4IG9yICAgICAgICAxMTAwMDAwMDAgICAgIDEwMTAwMDAwMDAwMDAwMDAgIC0+ICAxMDEwMDAwMTEwMDAwMDAwDQorZHFvcjA0OSBvciAgICAgICAgIDEwMDAwMDAwICAgICAxMTAwMDAwMDAwMDAwMDAwICAtPiAgMTEwMDAwMDAxMDAwMDAwMA0KKw0KK2Rxb3IwOTAgb3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkcW9yMDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorZHFvcjA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KK2Rxb3IwOTMgb3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkcW9yMDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorZHFvcjA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KK2Rxb3IwOTYgb3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTENCitkcW9yMDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorZHFvcjA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQ0KKw0KK2Rxb3IxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTENCitkcW9yMTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExDQorZHFvcjEwMiBvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gIDExMTExMTExMQ0KK2Rxb3IxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTENCitkcW9yMTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorZHFvcjEwNSBvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gIDExMTExMTExMQ0KK2Rxb3IxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTENCitkcW9yMTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExDQorZHFvcjEwOCBvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gIDExMTExMTExMQ0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2Rxb3IyMjAgb3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyMjMgb3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyMjYgb3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyMjkgb3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyMzIgb3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBhIGZldyByYW5kb21zDQorZHFvcjI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNDEgb3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNDQgb3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2Rxb3IyNTAgb3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI1MSBvciAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjUyIG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNTMgb3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI1NCBvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjU1IG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNTYgb3IgIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI1NyBvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjU4IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI2MCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjYxIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNjIgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI2MyBvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjY0IG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNjUgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK2Rxb3IyNzAgb3IgIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI3MSBvciAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjcyIG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNzMgb3IgIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI3NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjc1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyNzYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDEwMDAgMDgwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI3NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2Rxb3IyODAgb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDIgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI4MSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjgyIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyODMgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDkgMTAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI4NCBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjg1IG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyODYgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMDEwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI4NyBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1pZGRpZQ0KK2Rxb3IyODggb3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI4OSBvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAwMDAwMSAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjkwIG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDgwMDAwMDEwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyOTEgb3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI5MiBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDIwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcW9yMjkzIG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDEwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyOTQgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjI5NSBvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDkwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK2Rxb3IyOTYgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyOTcgb3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyOTggb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3IyOTkgb3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTEwMDAxMDAgLT4gIDEwMDAwMDExMTEwMDExMTEwMDExMTEwMDAwMTEwMDAxMDANCisNCistLSBObWF4LCBObWluLCBOdGlueS1saWtlDQorZHFvcjMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzE5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzMiBvciAgMyAgIDFFLTE5OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzMyBvciAgNCAgIDEuMDAwMDAwMDBFLTE5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzNCBvciAgNSAgIDFFLTEwMDkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzNSBvciAgNiAgIC0xRS0xMDA5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzNiBvciAgNyAgIC0xLjAwMDAwMDAwRS0xOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzNyBvciAgOCAgIC0xRS0xOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSsxOTk5ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0MSBvciAgOS45OTk5OTk5OUUrMjk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0MiBvciAgMUUtMjk5OSAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0MyBvciAgMS4wMDAwMDAwMEUtMjk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0NCBvciAgMUUtMTAwOSAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0NSBvciAgLTFFLTEwMDkgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0NiBvciAgLTEuMDAwMDAwMDBFLTI5OTkgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0NyBvciAgLTFFLTI5OTkgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM0OCBvciAgLTkuOTk5OTk5OTlFKzI5OTkgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorZHFvcjM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM2MyBvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM2NiBvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3MyBvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjM3NiBvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2Rxb3I3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODEgb3IgLUluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODIgb3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODQgb3IgLUluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODUgb3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODcgb3IgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODggb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3OTAgb3IgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3OTEgb3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3OTMgb3IgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I3OTQgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rxb3I4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDIgb3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDUgb3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDggb3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTEgb3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTQgb3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rxb3I4MjEgb3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MjQgb3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Mjcgb3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzAgb3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzMgb3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4MzYgb3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rxb3I4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg0MiBvciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODQzIG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg0NSBvciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODQ2IG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg0OCBvciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODQ5IG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg1MSBvciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODUyIG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg1NCBvciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODU1IG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFvcjg1NyBvciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcW9yODU4IG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2Rxb3I4NjEgb3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NjQgb3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Njcgb3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzEgb3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzQgb3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Nzcgb3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODAgb3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODMgb3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxb3I4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVBsdXMuZGVjVGVzdAppbmRleCA4YWVjYWFiLi5kZjFhMTVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFQbHVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUGx1cy5kZWNUZXN0CkBAIC0xLDg4ICsxLDg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxUGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gQWxsIG9wZXJhbmRzIGFuZCByZXN1bHRzIGFyZSBkZWNRdWFkcy4KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZHFwbHMwMDEgcGx1cyAgICAgICArNy41MCAgLT4gNy41MAotCi0tLSBJbmZpbml0aWVzCi1kcXBsczAxMSBwbHVzICBJbmZpbml0eSAgICAtPiBJbmZpbml0eQotZHFwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5Ci0KLS0tIE5hTnMsIDAgcGF5bG9hZAotZGRxbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFOCi1kZHFsczAyMiBwbHVzICAgICAgICAtTmFOICAtPiAtTmFOCi1kZHFsczAyMyBwbHVzICAgICAgICBzTmFOICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kZHFsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5hTnMsIG5vbi0wIHBheWxvYWQKLWRkcWxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzCi1kZHFsczAzMiBwbHVzICAgICAgLU5hTjEzICAtPiAtTmFOMTMKLWRkcWxzMDMzIHBsdXMgICAgICBzTmFOMTMgIC0+IE5hTjEzICAgSW52YWxpZF9vcGVyYXRpb24KLWRkcWxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRkcWxzMDM1IHBsdXMgICAgICAgTmFONzAgIC0+IE5hTjcwCi1kZHFsczAzNiBwbHVzICAgICAgLU5hTjcwICAtPiAtTmFONzAKLWRkcWxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24KLWRkcWxzMDM4IHBsdXMgICAgIC1zTmFOMTAxIC0+IC1OYU4xMDEgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZmluaXRlcwotZHFwbHMxMDEgcGx1cyAgICAgICAgICA3ICAgLT4gNwotZHFwbHMxMDIgcGx1cyAgICAgICAgIC03ICAgLT4gLTcKLWRxcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1Ci1kcXBsczEwNCBwbHVzICAgICAgICAtNzUgICAtPiAtNzUKLWRxcGxzMTA1IHBsdXMgICAgICAgNy41MCAgIC0+IDcuNTAKLWRxcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwCi1kcXBsczEwNyBwbHVzICAgICAgIDcuNTAwICAtPiA3LjUwMAotZHFwbHMxMDggcGx1cyAgICAgIC03LjUwMCAgLT4gLTcuNTAwCi0KLS0tIHplcm9zCi1kcXBsczExMSBwbHVzICAgICAgICAgIDAgICAtPiAwCi1kcXBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwCi1kcXBsczExMyBwbHVzICAgICAgIDBFKzQgICAtPiAwRSs0Ci1kcXBsczExNCBwbHVzICAgICAgLTBFKzQgICAtPiAwRSs0Ci1kcXBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDAKLWRxcGxzMTE2IHBsdXMgICAgLTAuMDAwMCAgIC0+IDAuMDAwMAotZHFwbHMxMTcgcGx1cyAgICAgIDBFLTE0MSAgLT4gMEUtMTQxCi1kcXBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDEKLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWRxcGxzMTIxIHBsdXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyCi1kcXBsczEyMiBwbHVzICAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MiAgICAtPiAtMjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MjY4MgotZHFwbHMxMjMgcGx1cyAgIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEgICAgLT4gIDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEzNDEKLWRxcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcXBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFwbHMxMzIgcGx1cyAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgMUUtNjE0MwotZHFwbHMxMzMgcGx1cyAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxcGxzMTM0IHBsdXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsCi0KLWRxcGxzMTM1IHBsdXMgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgU3Vibm9ybWFsCi1kcXBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFwbHMxMzcgcGx1cyAgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE0MwotZHFwbHMxMzggcGx1cyAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxUGx1cy5kZWNUZXN0IC0tIGRlY1F1YWQgMCt4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkcXBsczAwMSBwbHVzICAgICAgICs3LjUwICAtPiA3LjUwDQorDQorLS0gSW5maW5pdGllcw0KK2RxcGxzMDExIHBsdXMgIEluZmluaXR5ICAgIC0+IEluZmluaXR5DQorZHFwbHMwMTIgcGx1cyAgLUluZmluaXR5ICAgLT4gLUluZmluaXR5DQorDQorLS0gTmFOcywgMCBwYXlsb2FkDQorZGRxbHMwMjEgcGx1cyAgICAgICAgIE5hTiAgLT4gTmFODQorZGRxbHMwMjIgcGx1cyAgICAgICAgLU5hTiAgLT4gLU5hTg0KK2RkcWxzMDIzIHBsdXMgICAgICAgIHNOYU4gIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkZHFsczAyNCBwbHVzICAgICAgIC1zTmFOICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTmFOcywgbm9uLTAgcGF5bG9hZA0KK2RkcWxzMDMxIHBsdXMgICAgICAgTmFOMTMgIC0+IE5hTjEzDQorZGRxbHMwMzIgcGx1cyAgICAgIC1OYU4xMyAgLT4gLU5hTjEzDQorZGRxbHMwMzMgcGx1cyAgICAgIHNOYU4xMyAgLT4gTmFOMTMgICBJbnZhbGlkX29wZXJhdGlvbg0KK2RkcWxzMDM0IHBsdXMgICAgIC1zTmFOMTMgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitkZHFsczAzNSBwbHVzICAgICAgIE5hTjcwICAtPiBOYU43MA0KK2RkcWxzMDM2IHBsdXMgICAgICAtTmFONzAgIC0+IC1OYU43MA0KK2RkcWxzMDM3IHBsdXMgICAgICBzTmFOMTAxIC0+IE5hTjEwMSAgSW52YWxpZF9vcGVyYXRpb24NCitkZHFsczAzOCBwbHVzICAgICAtc05hTjEwMSAtPiAtTmFOMTAxIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZmluaXRlcw0KK2RxcGxzMTAxIHBsdXMgICAgICAgICAgNyAgIC0+IDcNCitkcXBsczEwMiBwbHVzICAgICAgICAgLTcgICAtPiAtNw0KK2RxcGxzMTAzIHBsdXMgICAgICAgICA3NSAgIC0+IDc1DQorZHFwbHMxMDQgcGx1cyAgICAgICAgLTc1ICAgLT4gLTc1DQorZHFwbHMxMDUgcGx1cyAgICAgICA3LjUwICAgLT4gNy41MA0KK2RxcGxzMTA2IHBsdXMgICAgICAtNy41MCAgIC0+IC03LjUwDQorZHFwbHMxMDcgcGx1cyAgICAgICA3LjUwMCAgLT4gNy41MDANCitkcXBsczEwOCBwbHVzICAgICAgLTcuNTAwICAtPiAtNy41MDANCisNCistLSB6ZXJvcw0KK2RxcGxzMTExIHBsdXMgICAgICAgICAgMCAgIC0+IDANCitkcXBsczExMiBwbHVzICAgICAgICAgLTAgICAtPiAwDQorZHFwbHMxMTMgcGx1cyAgICAgICAwRSs0ICAgLT4gMEUrNA0KK2RxcGxzMTE0IHBsdXMgICAgICAtMEUrNCAgIC0+IDBFKzQNCitkcXBsczExNSBwbHVzICAgICAwLjAwMDAgICAtPiAwLjAwMDANCitkcXBsczExNiBwbHVzICAgIC0wLjAwMDAgICAtPiAwLjAwMDANCitkcXBsczExNyBwbHVzICAgICAgMEUtMTQxICAtPiAwRS0xNDENCitkcXBsczExOCBwbHVzICAgICAtMEUtMTQxICAtPiAwRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2RxcGxzMTIxIHBsdXMgICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyICAgIC0+ICAyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyNjgyDQorZHFwbHMxMjIgcGx1cyAgLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODIgICAgLT4gLTI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODI2ODINCitkcXBsczEyMyBwbHVzICAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MSAgICAtPiAgMTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MTM0MQ0KK2RxcGxzMTI0IHBsdXMgIC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxICAgIC0+IC0xMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxMzQxDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkcXBsczEzMSBwbHVzICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC0+ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxcGxzMTMyIHBsdXMgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNDMNCitkcXBsczEzMyBwbHVzICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxcGxzMTM0IHBsdXMgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIDFFLTYxNzYgU3Vibm9ybWFsDQorDQorZHFwbHMxMzUgcGx1cyAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiBTdWJub3JtYWwNCitkcXBsczEzNiBwbHVzICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2RxcGxzMTM3IHBsdXMgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMNCitkcXBsczEzOCBwbHVzICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFRdWFudGl6ZS5kZWNUZXN0CmluZGV4IDUxNDcxYzIuLjRlZDM5YjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVF1YW50aXplLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUXVhbnRpemUuZGVjVGVzdApAQCAtMSw4MzYgKzEsODM2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxUXVhbnRpemUuZGVjVGVzdCAtLSBkZWNRdWFkIHF1YW50aXplIG9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlCi0tLSBzaWduIGFuZCBjb2VmZmljaWVudCBhcmUgKzEuCi0tLSAyMDA0LjAzLjE1IFVuZGVyZmxvdyBmb3IgcXVhbnRpemUgaXMgc3VwcHJlc3NlZAotLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcKLS0tIFtGb3JrZWQgZnJvbSBxdWFudGl6ZS5kZWNUZXN0IDIwMDYuMTEuMjVdCi0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MKLWRxcXVhMDAxIHF1YW50aXplIDAgICAgICAgMWUwICAgLT4gMAotZHFxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxCi1kcXF1YTAwMyBxdWFudGl6ZSAwLjEgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAwNSBxdWFudGl6ZSAwLjEgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAwNyBxdWFudGl6ZSAwLjEgICAgMWUtMSAgIC0+IDAuMQotZHFxdWEwMDggcXVhbnRpemUgMC4xICAgIDFlLTIgICAtPiAwLjEwCi1kcXF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwCi1kcXF1YTAxMCBxdWFudGl6ZSAwLjkgICAgMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAxMSBxdWFudGl6ZSAwLjkgICAgMWUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAxMyBxdWFudGl6ZSAwLjkgICAgMWUtMSAgIC0+IDAuOQotZHFxdWEwMTQgcXVhbnRpemUgMC45ICAgIDFlLTIgICAtPiAwLjkwCi1kcXF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwCi0tLSBuZWdhdGl2ZXMKLWRxcXVhMDIxIHF1YW50aXplIC0wICAgICAgMWUwICAgLT4gLTAKLWRxcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTEKLWRxcXVhMDIzIHF1YW50aXplIC0wLjEgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAyNSBxdWFudGl6ZSAtMC4xICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDI3IHF1YW50aXplIC0wLjEgICAxZS0xICAgLT4gLTAuMQotZHFxdWEwMjggcXVhbnRpemUgLTAuMSAgIDFlLTIgICAtPiAtMC4xMAotZHFxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDAKLWRxcXVhMDMwIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAzMSBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDMzIHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQotZHFxdWEwMzQgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAotZHFxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKLWRxcXVhMDM2IHF1YW50aXplIC0wLjUgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTAzNyBxdWFudGl6ZSAtMC41ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDM5IHF1YW50aXplIC0wLjUgICAxZS0xICAgLT4gLTAuNQotZHFxdWEwNDAgcXVhbnRpemUgLTAuNSAgIDFlLTIgICAtPiAtMC41MAotZHFxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDAKLWRxcXVhMDQyIHF1YW50aXplIC0wLjkgICAxZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTA0MyBxdWFudGl6ZSAtMC45ICAgMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDQ1IHF1YW50aXplIC0wLjkgICAxZS0xICAgLT4gLTAuOQotZHFxdWEwNDYgcXVhbnRpemUgLTAuOSAgIDFlLTIgICAtPiAtMC45MAotZHFxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDAKLQotLS0gZXhhbXBsZXMgZnJvbSBTcGVjaWZpY2F0aW9uCi1kcXF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwCi1kcXF1YTA2MSBxdWFudGl6ZSAyLjE3ICAgMC4wMSAgIC0+IDIuMTcKLWRxcXVhMDYyIHF1YW50aXplIDIuMTcgICAwLjEgICAgLT4gMi4yIEluZXhhY3QgUm91bmRlZAotZHFxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZAotZHFxdWEwNjQgcXVhbnRpemUgMi4xNyAgIDFlKzEgICAtPiAwRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwNjUgcXVhbnRpemUgLUluZiAgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTA2NyBxdWFudGl6ZSAtMC4xICAgIDEgICAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAotZHFxdWEwNjggcXVhbnRpemUgLTAgICAgICAxZSs1ICAgICAtPiAtMEUrNQotZHFxdWEwNjkgcXVhbnRpemUgKzEyMzQ1MTIzNDU2Nzg5OTg3NjU0MzIxNjc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTA3MCBxdWFudGl6ZSAtOTg3NjUxMjM0NTY3ODk5ODc2NTQzMjE0MzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhMDcxIHF1YW50aXplIDIxNyAgICAxZS0xICAgLT4gMjE3LjAKLWRxcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3Ci1kcXF1YTA3MyBxdWFudGl6ZSAyMTcgICAgMWUrMSAgIC0+IDIuMkUrMiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDc0IHF1YW50aXplIDIxNyAgICAxZSsyICAgLT4gMkUrMiBJbmV4YWN0IFJvdW5kZWQKLQotLS0gZ2VuZXJhbCB0ZXN0cyAuLgotZHFxdWEwODkgcXVhbnRpemUgMTIgICAgIDFlKzQgICAtPiAwRSs0IEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTEgcXVhbnRpemUgMTIgICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTIgcXVhbnRpemUgMTIgICAgIDFlKzEgICAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTQgcXVhbnRpemUgMS4yMzU1IDFlLTIgICAtPiAxLjI0IEluZXhhY3QgUm91bmRlZAotZHFxdWEwOTUgcXVhbnRpemUgMS4yMzQ1IDFlLTYgICAtPiAxLjIzNDUwMAotZHFxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDk3IHF1YW50aXplIDAuMDAwMSAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDk4IHF1YW50aXplIDAuMDAxICAxZS0yICAgLT4gMC4wMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTAwIHF1YW50aXplIDkyICAgICAxZSsyICAgLT4gMUUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTEKLWRxcXVhMTAyIHF1YW50aXplIC0xICAgICAxZS0xICAgLT4gIC0xLjAKLWRxcXVhMTAzIHF1YW50aXplIC0xICAgICAxZS0yICAgLT4gIC0xLjAwCi1kcXF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwCi1kcXF1YTEwNSBxdWFudGl6ZSAgMCAgICAgMWUtMSAgIC0+ICAwLjAKLWRxcXVhMTA2IHF1YW50aXplICAwICAgICAxZS0yICAgLT4gIDAuMDAKLWRxcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDAKLWRxcXVhMTA4IHF1YW50aXplICAwICAgICAxZSsxICAgLT4gIDBFKzEKLWRxcXVhMTA5IHF1YW50aXplICAwICAgICAxZSsyICAgLT4gIDBFKzIKLWRxcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDEKLWRxcXVhMTExIHF1YW50aXplICsxICAgICAxZS0xICAgLT4gIDEuMAotZHFxdWExMTIgcXVhbnRpemUgKzEgICAgIDFlLTIgICAtPiAgMS4wMAotCi1kcXF1YTEyMCBxdWFudGl6ZSAgIDEuMDQgIDFlLTMgLT4gIDEuMDQwCi1kcXF1YTEyMSBxdWFudGl6ZSAgIDEuMDQgIDFlLTIgLT4gIDEuMDQKLWRxcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZAotZHFxdWExMjMgcXVhbnRpemUgICAxLjA0ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAotZHFxdWExMjQgcXVhbnRpemUgICAxLjA1ICAxZS0zIC0+ICAxLjA1MAotZHFxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1Ci1kcXF1YTEyNiBxdWFudGl6ZSAgIDEuMDUgIDFlLTEgLT4gIDEuMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTMxIHF1YW50aXplICAgMS4wNSAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjAKLWRxcXVhMTMzIHF1YW50aXplICAgMS4wNiAgMWUtMiAtPiAgMS4wNgotZHFxdWExMzQgcXVhbnRpemUgICAxLjA2ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhMTQwIHF1YW50aXplICAgLTEwICAgIDFlLTIgIC0+ICAtMTAuMDAKLWRxcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwCi1kcXF1YTE0MiBxdWFudGl6ZSAgICsxMCAgICAxZS0yICAtPiAgMTAuMDAKLWRxcXVhMTQzIHF1YW50aXplICAgMUUrMzcgIDFlLTIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhMTQ0IHF1YW50aXplICAgMUUtMzcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZAotZHFxdWExNDUgcXVhbnRpemUgICAxRS0zICAgMWUtMiAgLT4gIDAuMDAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE0NiBxdWFudGl6ZSAgIDFFLTIgICAxZS0yICAtPiAgMC4wMQotZHFxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTAKLWRxcXVhMTQ4IHF1YW50aXplICAgMEUtMzcgIDFlLTIgIC0+ICAwLjAwCi0KLWRxcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDAKLWRxcXVhMTUxIHF1YW50aXplICAgMS4wNjAwIDFlLTQgLT4gIDEuMDYwMAotZHFxdWExNTIgcXVhbnRpemUgICAxLjA2MDAgMWUtMyAtPiAgMS4wNjAgUm91bmRlZAotZHFxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkCi1kcXF1YTE1NCBxdWFudGl6ZSAgIDEuMDYwMCAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE1NSBxdWFudGl6ZSAgIDEuMDYwMCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAotCi0tLSBhIGNvdXBsZSB3aGVyZSByb3VuZGluZyB3YXMgZGlmZmVyZW50IGluIGJhc2UgdGVzdHMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kcXF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotZHFxdWExNTggcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE1OSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIGJhc2UgdGVzdHMgd2l0aCBub24tMSBjb2VmZmljaWVudHMKLWRxcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMAotZHFxdWExNjIgcXVhbnRpemUgMSAgICAgIC03ZTAgICAtPiAxCi1kcXF1YTE2MyBxdWFudGl6ZSAwLjEgICAtMWUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2NiBxdWFudGl6ZSAwLjEgICAgIDJlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2NyBxdWFudGl6ZSAwLjEgICAgM2UtMSAgIC0+IDAuMQotZHFxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwCi1kcXF1YTE2OSBxdWFudGl6ZSAwLjEgIDU1NWUtMyAgIC0+IDAuMTAwCi1kcXF1YTE3MCBxdWFudGl6ZSAwLjkgNjY2NmUrMiAgIC0+IDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MiBxdWFudGl6ZSAwLjkgIC04OGUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MyBxdWFudGl6ZSAwLjkgICAtOWUtMSAgIC0+IDAuOQotZHFxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwCi1kcXF1YTE3NSBxdWFudGl6ZSAwLjkgIDEuMWUtMyAgIC0+IDAuOTAwMAotLS0gbmVnYXRpdmVzCi1kcXF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjAKLWRxcXVhMTgyIHF1YW50aXplIC0xICAgICAtMWUwICAgLT4gLTEKLWRxcXVhMTgzIHF1YW50aXplIC0wLjEgIDExZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWExODYgcXVhbnRpemUgLTAuMSAgIDcxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTg3IHF1YW50aXplIC0wLjEgLTkxZS0xICAgLT4gLTAuMQotZHFxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDAKLWRxcXVhMTg5IHF1YW50aXplIC0wLjEgIC0xZS0zICAgLT4gLTAuMTAwCi1kcXF1YTE5MCBxdWFudGl6ZSAtMC45ICAgMGUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTkyIHF1YW50aXplIC0wLjkgLTEwZSswICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE5MyBxdWFudGl6ZSAtMC45IDEwMGUtMSAgIC0+IC0wLjkKLWRxcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTAKLQotLS0gK3ZlIGV4cG9uZW50cyAuLgotZHFxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xCi1kcXF1YTIwMiBxdWFudGl6ZSAgIC0xICAgMWUrMSAtPiAgLTBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwMyBxdWFudGl6ZSAgIC0xICAgMWUrMiAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMAotZHFxdWEyMDUgcXVhbnRpemUgICAgMCAgIDFlKzEgLT4gIDBFKzEKLWRxcXVhMjA2IHF1YW50aXplICAgIDAgICAxZSsyIC0+ICAwRSsyCi1kcXF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQotZHFxdWEyMDggcXVhbnRpemUgICArMSAgIDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwOSBxdWFudGl6ZSAgICsxICAgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEyMjAgcXVhbnRpemUgICAxLjA0IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyMSBxdWFudGl6ZSAgIDEuMDQgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMjMgcXVhbnRpemUgICAxLjA0IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyNCBxdWFudGl6ZSAgIDEuMDUgMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMjYgcXVhbnRpemUgICAxLjA1IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyNyBxdWFudGl6ZSAgIDEuMDUgMWUrMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMjkgcXVhbnRpemUgICAxLjA1IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIzMCBxdWFudGl6ZSAgIDEuMDUgMWUrMSAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMzIgcXVhbnRpemUgICAxLjA2IDFlKzMgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIzMyBxdWFudGl6ZSAgIDEuMDYgMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMzUgcXVhbnRpemUgICAxLjA2IDFlKzAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQKLWRxcXVhMjQxIHF1YW50aXplICAgKzEgICAgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI0MiBxdWFudGl6ZSAgICsxMCAgIDFlKzEgIC0+ICAxRSsxIFJvdW5kZWQKLWRxcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZHFxdWEyNDQgcXVhbnRpemUgICAxRSsyICAxZSsxICAtPiAgMS4wRSsyICAgICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi1kcXF1YTI0NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzEgIC0+ICAxLjAwRSszICAgICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLWRxcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZHFxdWEyNDcgcXVhbnRpemUgICAxRSs1ICAxZSsxICAtPiAgMS4wMDAwRSs1ICAgICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi1kcXF1YTI0OCBxdWFudGl6ZSAgIDFFKzYgIDFlKzEgIC0+ICAxLjAwMDAwRSs2ICAgIC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLWRxcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQotZHFxdWEyNTAgcXVhbnRpemUgICAxRSs4ICAxZSsxICAtPiAgMS4wMDAwMDAwRSs4ICAtLSB1bmRlcm5lYXRoIHRoaXMgaXMgRSsxCi1kcXF1YTI1MSBxdWFudGl6ZSAgIDFFKzkgIDFlKzEgIC0+ICAxLjAwMDAwMDAwRSs5IC0tIHVuZGVybmVhdGggdGhpcyBpcyBFKzEKLS0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zCi1kcXF1YTI1MiBxdWFudGl6ZSAgIDFFKzM3IDFlKzEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhMjUzIHF1YW50aXplICAgMUUtMzcgMWUrMSAgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEyNTUgcXVhbnRpemUgICAwRS0zNyAxZSsxICAtPiAgMEUrMQotZHFxdWEyNTYgcXVhbnRpemUgIC0wRS0zNyAxZSsxICAtPiAtMEUrMQotZHFxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQotZHFxdWEyNTggcXVhbnRpemUgIC0wICAgICAxZSsxICAtPiAtMEUrMQotZHFxdWEyNTkgcXVhbnRpemUgIC0wRSsxICAxZSsxICAtPiAtMEUrMQotCi1kcXF1YTI2MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzIgIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjYxIHF1YW50aXplICAgKzEgICAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWEyNjMgcXVhbnRpemUgICAxRSsxICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjY0IHF1YW50aXplICAgMUUrMiAgMWUrMiAgLT4gIDFFKzIKLWRxcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMwotZHFxdWEyNjYgcXVhbnRpemUgICAxRSs0ICAxZSsyICAtPiAgMS4wMEUrNAotZHFxdWEyNjcgcXVhbnRpemUgICAxRSs1ICAxZSsyICAtPiAgMS4wMDBFKzUKLWRxcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNgotZHFxdWEyNjkgcXVhbnRpemUgICAxRSs3ICAxZSsyICAtPiAgMS4wMDAwMEUrNwotZHFxdWEyNzAgcXVhbnRpemUgICAxRSs4ICAxZSsyICAtPiAgMS4wMDAwMDBFKzgKLWRxcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQotZHFxdWEyNzIgcXVhbnRpemUgICAxRSsxMCAxZSsyICAtPiAgMS4wMDAwMDAwMEUrMTAKLWRxcXVhMjczIHF1YW50aXplICAgMUUtMTAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWEyNzUgcXVhbnRpemUgICAwRS0xMCAxZSsyICAtPiAgMEUrMgotCi1kcXF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjgxIHF1YW50aXplICAgKzEgICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI4MiBxdWFudGl6ZSAgICsxMCAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZHFxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjg0IHF1YW50aXplICAgMUUrMiAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTI4NSBxdWFudGl6ZSAgIDFFKzMgIDFlKzMgIC0+ICAxRSszCi1kcXF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQKLWRxcXVhMjg3IHF1YW50aXplICAgMUUrNSAgMWUrMyAgLT4gIDEuMDBFKzUKLWRxcXVhMjg4IHF1YW50aXplICAgMUUrNiAgMWUrMyAgLT4gIDEuMDAwRSs2Ci1kcXF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcKLWRxcXVhMjkwIHF1YW50aXplICAgMUUrOCAgMWUrMyAgLT4gIDEuMDAwMDBFKzgKLWRxcXVhMjkxIHF1YW50aXplICAgMUUrOSAgMWUrMyAgLT4gIDEuMDAwMDAwRSs5Ci1kcXF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwCi1kcXF1YTI5MyBxdWFudGl6ZSAgIDFFLTEwIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZAotZHFxdWEyOTQgcXVhbnRpemUgICAxRS0yICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMKLQotLS0gcm91bmQgdXAgZnJvbSBiZWxvdyBbc2lnbiB3cm9uZyBpbiBKSVQgY29tcGlsZXIgb25jZV0KLWRxcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODAKLWRxcXVhMzAxIHF1YW50aXplICAgMC4wMDc4IDFlLTQgLT4gIDAuMDA3OAotZHFxdWEzMDIgcXVhbnRpemUgICAwLjAwNzggMWUtMyAtPiAgMC4wMDggSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMDQgcXVhbnRpemUgICAwLjAwNzggMWUtMSAtPiAgMC4wIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMDUgcXVhbnRpemUgICAwLjAwNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMwNyBxdWFudGl6ZSAgIDAuMDA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotCi1kcXF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwCi1kcXF1YTMxMSBxdWFudGl6ZSAgLTAuMDA3OCAxZS00IC0+IC0wLjAwNzgKLWRxcXVhMzEyIHF1YW50aXplICAtMC4wMDc4IDFlLTMgLT4gLTAuMDA4IEluZXhhY3QgUm91bmRlZAotZHFxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzE0IHF1YW50aXplICAtMC4wMDc4IDFlLTEgLT4gLTAuMCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzE1IHF1YW50aXplICAtMC4wMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMTcgcXVhbnRpemUgIC0wLjAwNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwCi1kcXF1YTMyMSBxdWFudGl6ZSAgIDAuMDc4IDFlLTQgLT4gIDAuMDc4MAotZHFxdWEzMjIgcXVhbnRpemUgICAwLjA3OCAxZS0zIC0+ICAwLjA3OAotZHFxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZAotZHFxdWEzMjQgcXVhbnRpemUgICAwLjA3OCAxZS0xIC0+ICAwLjEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMyNSBxdWFudGl6ZSAgIDAuMDc4ICAxZTAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTMyNyBxdWFudGl6ZSAgIDAuMDc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMAotZHFxdWEzMzEgcXVhbnRpemUgIC0wLjA3OCAxZS00IC0+IC0wLjA3ODAKLWRxcXVhMzMyIHF1YW50aXplICAtMC4wNzggMWUtMyAtPiAtMC4wNzgKLWRxcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzM0IHF1YW50aXplICAtMC4wNzggMWUtMSAtPiAtMC4xIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMzUgcXVhbnRpemUgIC0wLjA3OCAgMWUwIC0+IC0wIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzMzcgcXVhbnRpemUgIC0wLjA3OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZAotCi1kcXF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMAotZHFxdWEzNDEgcXVhbnRpemUgICAwLjc4IDFlLTQgLT4gIDAuNzgwMAotZHFxdWEzNDIgcXVhbnRpemUgICAwLjc4IDFlLTMgLT4gIDAuNzgwCi1kcXF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OAotZHFxdWEzNDQgcXVhbnRpemUgICAwLjc4IDFlLTEgLT4gIDAuOCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzQ1IHF1YW50aXplICAgMC43OCAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTM0NyBxdWFudGl6ZSAgIDAuNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDAKLWRxcXVhMzUxIHF1YW50aXplICAtMC43OCAxZS00IC0+IC0wLjc4MDAKLWRxcXVhMzUyIHF1YW50aXplICAtMC43OCAxZS0zIC0+IC0wLjc4MAotZHFxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgKLWRxcXVhMzU0IHF1YW50aXplICAtMC43OCAxZS0xIC0+IC0wLjggSW5leGFjdCBSb3VuZGVkCi1kcXF1YTM1NSBxdWFudGl6ZSAgLTAuNzggIDFlMCAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzNTcgcXVhbnRpemUgIC0wLjc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDAKLWRxcXVhMzYxIHF1YW50aXplICAgNy44IDFlLTQgLT4gIDcuODAwMAotZHFxdWEzNjIgcXVhbnRpemUgICA3LjggMWUtMyAtPiAgNy44MDAKLWRxcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODAKLWRxcXVhMzY0IHF1YW50aXplICAgNy44IDFlLTEgLT4gIDcuOAotZHFxdWEzNjUgcXVhbnRpemUgICA3LjggIDFlMCAtPiAgOCBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTM2NyBxdWFudGl6ZSAgIDcuOCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZAotZHFxdWEzNjggcXVhbnRpemUgICA3LjggMWUrMyAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEzNzAgcXVhbnRpemUgIC03LjggMWUtNSAtPiAtNy44MDAwMAotZHFxdWEzNzEgcXVhbnRpemUgIC03LjggMWUtNCAtPiAtNy44MDAwCi1kcXF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMAotZHFxdWEzNzMgcXVhbnRpemUgIC03LjggMWUtMiAtPiAtNy44MAotZHFxdWEzNzQgcXVhbnRpemUgIC03LjggMWUtMSAtPiAtNy44Ci1kcXF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZAotZHFxdWEzNzYgcXVhbnRpemUgIC03LjggMWUrMSAtPiAtMUUrMSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzc3IHF1YW50aXplICAtNy44IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZAotCi0tLSBzb21lIGluZGl2aWR1YWxzCi1kcXF1YTM4MCBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzgxIHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYgMWUtMiAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgotZHFxdWEzODIgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWEzODMgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWEzODQgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUwNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0LjUxIEluZXhhY3QgUm91bmRlZAotZHFxdWEzODUgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNiAxZS0yIC0+IC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NS4wNgotZHFxdWEzODYgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWEzODcgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1yb3VuZGluZzogZG93bgotZHFxdWEzODkgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm91bmRpbmc6IGhhbGZfdXAKLQotLS0gYW5kIGEgZmV3IG1vcmUgZnJvbSBlLW1haWwgZGlzY3Vzc2lvbnMKLWRxcXVhMzkxIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMi4zNDYgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzkyIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMzkzIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjM0NTY3LiAgMWUtMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzCi1kcXF1YTQwMCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS01ICAtPiAgOS45OTkwMAotZHFxdWE0MDEgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNCAgLT4gIDkuOTk5MAotZHFxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5Ci1kcXF1YTQwMyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0yICAtPiAxMC4wMCAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQwNCBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS0xICAtPiAxMC4wICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQwNiBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUxICAtPiAxRSsxICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQwNyBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUyICAtPiAwRSsyICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhNDEwIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTUgIC0+ICAwLjk5OTAwCi1kcXF1YTQxMSBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS00ICAtPiAgMC45OTkwCi1kcXF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkKLWRxcXVhNDEzIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTIgIC0+ICAxLjAwICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDE0IHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTEgIC0+ICAxLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDE2IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTAKLWRxcXVhNDIxIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTQgIC0+ICAwLjA5OTkKLWRxcXVhNDIyIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTMgIC0+ICAwLjEwMCAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDI0IHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTEgIC0+ICAwLjEgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDI1IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWE0MzAgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtNSAgLT4gIDAuMDA5OTkKLWRxcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDMyIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTMgIC0+ICAwLjAxMCAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDMzIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTIgIC0+ICAwLjAxICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDM1IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTAgIC0+ICAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDM2IHF1YW50aXplICAgMC4wMDk5OSAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWE0NDAgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNSAgLT4gIDAuMDAxMDAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDEgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtNCAgLT4gIDAuMDAxMCAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDMgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMiAgLT4gIDAuMDAgICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDQgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMSAgLT4gIDAuMCAgICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE0NDYgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZAotCi1kcXF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDAKLWRxcXVhMTAwMiBxdWFudGl6ZSAgMC4wMDEgICAgICAgIDAuMDAxIC0+ICAwLjAwMQotZHFxdWExMDAzIHF1YW50aXplICAwLjAwMTIgICAgICAgMC4wMDEgLT4gIDAuMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEwMDUgcXVhbnRpemUgIDAuNTAxICAgICAgICAwLjAwMSAtPiAgMC41MDEKLWRxcXVhMTAwNiBxdWFudGl6ZSAgMC41MDEyICAgICAgIDAuMDAxIC0+ICAwLjUwMSAgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMDA4IHF1YW50aXplICAwLjk5OSAgICAgICAgMC4wMDEgLT4gIDAuOTk5Ci0KLWRxcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCi1kcXF1YTQ4MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAotZHFxdWE0ODMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKLWRxcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDg1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQ4NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCi0tLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQKLWRxcXVhNDg3IHF1YW50aXplIDEyMzQuOTg3NjQzIDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAotZHFxdWE0ODggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkCi0KLWRxcXVhNDkxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkCi1kcXF1YTQ5MiBxdWFudGl6ZSAxMjM0NTY3ODAwICAxZSsxIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZAotZHFxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKLWRxcXVhNDk0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDk1IHF1YW50aXplIDEyMzQ1Njc4OTAxIDFlKzIgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTQ5NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNDk4IHF1YW50aXplIDEyMzQuOTg3NjQ3IDFlLTQgLT4gMTIzNC45ODc2IEluZXhhY3QgUm91bmRlZAotCi0tLSBaZXJvcwotZHFxdWE1MDAgcXVhbnRpemUgICAwICAgICAxZTEgLT4gIDBFKzEKLWRxcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwCi1kcXF1YTUwMiBxdWFudGl6ZSAgIDAgICAgMWUtMSAtPiAgMC4wCi1kcXF1YTUwMyBxdWFudGl6ZSAgIDAuMCAgMWUtMSAtPiAgMC4wCi1kcXF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMAotZHFxdWE1MDUgcXVhbnRpemUgICAwLjAgIDFlKzEgLT4gIDBFKzEKLWRxcXVhNTA2IHF1YW50aXplICAgMEUrMSAxZS0xIC0+ICAwLjAKLWRxcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwCi1kcXF1YTUwOCBxdWFudGl6ZSAgIDBFKzEgMWUrMSAtPiAgMEUrMQotZHFxdWE1MDkgcXVhbnRpemUgIC0wICAgICAxZTEgLT4gLTBFKzEKLWRxcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wCi1kcXF1YTUxMSBxdWFudGl6ZSAgLTAgICAgMWUtMSAtPiAtMC4wCi1kcXF1YTUxMiBxdWFudGl6ZSAgLTAuMCAgMWUtMSAtPiAtMC4wCi1kcXF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMAotZHFxdWE1MTQgcXVhbnRpemUgIC0wLjAgIDFlKzEgLT4gLTBFKzEKLWRxcXVhNTE1IHF1YW50aXplICAtMEUrMSAxZS0xIC0+IC0wLjAKLWRxcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wCi1kcXF1YTUxNyBxdWFudGl6ZSAgLTBFKzEgMWUrMSAtPiAtMEUrMQotLS0gIzUxOSBoZXJlIG9uY2UgYSBwcm9ibGVtCi1kcXF1YTUxOCBxdWFudGl6ZSAgMCAgICAwRS0zICAtPiAwLjAwMAotZHFxdWE1MTkgcXVhbnRpemUgIDAgICAgMEUtMzMgLT4gMEUtMzMKLWRxcXVhNTIwIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgMEUtMzMgLT4gMEUtMzMKLWRxcXVhNTIxIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMEUtMzMgLT4gMEUtMzMKLQotLS0gU29tZSBub24temVyb3Mgd2l0aCBsb3RzIG9mIHBhZGRpbmcgb24gdGhlIHJpZ2h0Ci1kcXF1YTUyMyBxdWFudGl6ZSAgIDEgICAwRS0zMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFxdWE1MjQgcXVhbnRpemUgIDEyICAgMEUtMzIgLT4gMTIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxcXVhNTI1IHF1YW50aXplIDEyMyAgIDBFLTMxIC0+IDEyMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXF1YTUyNiBxdWFudGl6ZSAxMjMgICAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNTI3IHF1YW50aXplIDEyMy40IDBFLTMxIC0+IDEyMy40MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXF1YTUyOCBxdWFudGl6ZSAxMjMuNCAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gU3VzcGljaW91cyBSSFMgdmFsdWVzCi1kcXF1YTUzMCBxdWFudGl6ZSAgIDEuMjM0ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNTMxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZAotZHFxdWE1MzIgcXVhbnRpemUgICAxLjIzNCAgICAxZTM1OSAtPiAwRSszNTkgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTUzMyBxdWFudGl6ZSAxMjMuNDU2ICAgIDFlMzU5IC0+IDBFKzM1OSBJbmV4YWN0IFJvdW5kZWQKLS0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCi1kcXF1YTUzNiBxdWFudGl6ZSAgIDEuMjM0ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE1MzcgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTUzOSBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXF1YTU0MiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE1NDMgcXVhbnRpemUgICAxLjIzNEUrMjk4ICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNTQ0IHF1YW50aXplICAgMS4yMzQgICAgICAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTU0NyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5Ci0tLSBuZXh0IHR3byBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzCi1kcXF1YTU0OCBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTU0OSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBbbW9yZSBiZWxvd10KLQotLS0gU3BlY2lhbHMKLWRxcXVhNTgwIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQotZHFxdWE1ODEgcXVhbnRpemUgIEluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTU4MyBxdWFudGl6ZSAgSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE1ODQgcXVhbnRpemUgIEluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTU4NiBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWRxcXVhNTg3IHF1YW50aXplIC0xMDAwICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5Ci1kcXF1YTU4OSBxdWFudGl6ZSAtMSAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE1OTAgcXVhbnRpemUgIDAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTU5MiBxdWFudGl6ZSAgMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE1OTMgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1kcXF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE1OTUgcXVhbnRpemUgLTAgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotZHFxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQotZHFxdWE2MDEgcXVhbnRpemUgLUluZiAgMWUtMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjAyIHF1YW50aXplIC1JbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2MDQgcXVhbnRpemUgLUluZiAgIDFlMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjA1IHF1YW50aXplIC1JbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5Ci1kcXF1YTYwNyBxdWFudGl6ZSAtMTAwMCAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2MDggcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQotZHFxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjEwIHF1YW50aXplICAwICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTYxMSBxdWFudGl6ZSAgMSAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjEzIHF1YW50aXplICBJbmYgICAgLUluZiAgIC0+ICBJbmZpbml0eQotZHFxdWE2MTQgcXVhbnRpemUgLUluZiAgMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxcXVhNjIxIHF1YW50aXplICBOYU4gICAtSW5mICAgIC0+ICBOYU4KLWRxcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4KLWRxcXVhNjIzIHF1YW50aXplICBOYU4gMWUtMSAgICAgIC0+ICBOYU4KLWRxcXVhNjI0IHF1YW50aXplICBOYU4gIDFlMCAgICAgIC0+ICBOYU4KLWRxcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4KLWRxcXVhNjI2IHF1YW50aXplICBOYU4gIDFlMjk5ICAgIC0+ICBOYU4KLWRxcXVhNjI3IHF1YW50aXplICBOYU4gICAgSW5mICAgIC0+ICBOYU4KLWRxcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjI5IHF1YW50aXplIC1JbmYgICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjMwIHF1YW50aXplIC0xMDAwICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjMyIHF1YW50aXplICAwICAgICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjMzIHF1YW50aXplICAxICAgICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjM1IHF1YW50aXplICBJbmYgICAgTmFOICAgIC0+ICBOYU4KLWRxcXVhNjM2IHF1YW50aXplICBOYU4gMWUtMCAgICAgIC0+ICBOYU4KLWRxcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4KLQotZHFxdWE2NDEgcXVhbnRpemUgIHNOYU4gICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY0MyBxdWFudGl6ZSAgc05hTiAxZS0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NDQgcXVhbnRpemUgIHNOYU4gIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY0NiBxdWFudGl6ZSAgc05hTiAgMWUyOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NDcgcXVhbnRpemUgIHNOYU4gICAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY0OSBxdWFudGl6ZSAgTmFOICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NTAgcXVhbnRpemUgLUluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY1MiBxdWFudGl6ZSAtMSAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NTMgcXVhbnRpemUgIDAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY1NSBxdWFudGl6ZSAgMTAwMCAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NTYgcXVhbnRpemUgIEluZiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY1OCBxdWFudGl6ZSAgc05hTiAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NTkgcXVhbnRpemUgLTAgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFxdWE2NjEgcXVhbnRpemUgIE5hTjkgLUluZiAgIC0+ICBOYU45Ci1kcXF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgKLWRxcXVhNjYzIHF1YW50aXplICBOYU43MSBJbmYgICAtPiAgTmFONzEKLWRxcXVhNjY0IHF1YW50aXplICBOYU42ICBOYU41ICAtPiAgTmFONgotZHFxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40Ci1kcXF1YTY2NiBxdWFudGl6ZSAtOTE5ICAgTmFOMzEgLT4gIE5hTjMxCi1kcXF1YTY2NyBxdWFudGl6ZSAgSW5mICAgTmFOMiAgLT4gIE5hTjIKLQotZHFxdWE2NzEgcXVhbnRpemUgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzIgcXVhbnRpemUgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzQgcXVhbnRpemUgIHNOYU4xNiBzTmFOOTQgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzUgcXVhbnRpemUgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzcgcXVhbnRpemUgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzggcXVhbnRpemUgIEluZiAgICBzTmFOOTAgIC0+ICBOYU45MCBJbnZhbGlkX29wZXJhdGlvbgotZHFxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXF1YTY4MSBxdWFudGl6ZSAtTmFOOSAtSW5mICAgLT4gLU5hTjkKLWRxcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOAotZHFxdWE2ODMgcXVhbnRpemUgLU5hTjcxIEluZiAgIC0+IC1OYU43MQotZHFxdWE2ODQgcXVhbnRpemUgLU5hTjYgLU5hTjUgIC0+IC1OYU42Ci1kcXF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQKLWRxcXVhNjg2IHF1YW50aXplIC05MTkgIC1OYU4zMSAtPiAtTmFOMzEKLWRxcXVhNjg3IHF1YW50aXplICBJbmYgIC1OYU4yICAtPiAtTmFOMgotCi1kcXF1YTY5MSBxdWFudGl6ZSAtc05hTjk5IC1JbmYgICAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5MiBxdWFudGl6ZSAtc05hTjk4IC0xMSAgICAgLT4gLU5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5NCBxdWFudGl6ZSAtc05hTjE2IHNOYU45NCAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5NSBxdWFudGl6ZSAtTmFOOTUgLXNOYU45MyAgLT4gLU5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5NyBxdWFudGl6ZSAgMDg4ICAgLXNOYU45MSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5OCBxdWFudGl6ZSAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1kcXF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdwotZHFxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBSb3VuZGVkCi1kcXF1YTcxMSBxdWFudGl6ZSAgMC4xRS02MTQzICAgIDJlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbAotZHFxdWE3MTIgcXVhbnRpemUgIDAuMTBFLTYxNDMgICAzZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAotZHFxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS02MTQzICA0ZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZAotZHFxdWE3MTQgcXVhbnRpemUgIDAuMDFFLTYxNDMgICA1ZS02MTQ1ICAtPiAgIDFFLTYxNDUgICBTdWJub3JtYWwKLS0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluCi1kcXF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTYxNDMgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE3MTYgcXVhbnRpemUgIDAuMDk5RS02MTQzIDEwZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCi0KLWRxcXVhNzE3IHF1YW50aXplICAwLjAwOUUtNjE0MyAgMWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbAotZHFxdWE3MTggcXVhbnRpemUgIDAuMDAxRS02MTQzICAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNzE5IHF1YW50aXplICAwLjAwMDlFLTYxNDMgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZAotCi1kcXF1YTczMCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDMgIC0+ICAtMUUtNjE0MyAgICAgUm91bmRlZAotZHFxdWE3MzEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAotZHFxdWE3MzIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAotZHFxdWE3MzMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdAotZHFxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZAotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KLWRxcXVhNzM1IHF1YW50aXplIC0wLjk5OUUtNjE0MyA5MGUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNzM3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNzM4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAtMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWE3NDAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgUm91bmRlZAotZHFxdWE3NDEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwKLWRxcXVhNzQyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRxcXVhNzQzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NCAtPiAgLTFFLTYxNDQgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRxcXVhNzQ0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gRW1pbgotZHFxdWE3NDUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ0IC0+ICAtMS4wRS02MTQzICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKLWRxcXVhNzQ3IHF1YW50aXplIC0wLjAwOUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTc0OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZAotZHFxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWE3NTAgcXVhbnRpemUgLTEuMDBFLTYxNDMgICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MwotZHFxdWE3NTEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwKLWRxcXVhNzUyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsCi1kcXF1YTc1MyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbAotLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4KLWRxcXVhNzU1IHF1YW50aXplIC0wLjk5OUUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMDBFLTYxNDMgIEluZXhhY3QgUm91bmRlZAotZHFxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsCi1kcXF1YTc1NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwKLWRxcXVhNzU4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NSAtPiAgLTBFLTYxNDUgICAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZAotCi1kcXF1YTc2MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwMEUtNjE0MwotZHFxdWE3NjEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsCi1kcXF1YTc2MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDYgLT4gIC0xLjAwRS02MTQ0ICBTdWJub3JtYWwKLWRxcXVhNzYzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NiAtPiAgLTEuMDBFLTYxNDQgIFN1Ym5vcm1hbAotZHFxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wRS02MTQ1ICAgU3Vibm9ybWFsCi1kcXF1YTc2NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDYgLT4gIC05Ljk5RS02MTQ0ICBTdWJub3JtYWwKLWRxcXVhNzY2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAgMWUtNjE0NiAtPiAgLTkuOUUtNjE0NSAgIFN1Ym5vcm1hbAotZHFxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ2IC0+ICAtOUUtNjE0NiAgICAgU3Vibm9ybWFsCi1kcXF1YTc2OCBxdWFudGl6ZSAtMC4wMDFFLTYxNDMgIDFlLTYxNDYgLT4gIC0xRS02MTQ2ICAgICBTdWJub3JtYWwKLWRxcXVhNzY5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMWUtNjE0NiAtPiAgLTBFLTYxNDYgICAgIEluZXhhY3QgUm91bmRlZAotCi0tLSBNb3JlIGZyb20gRnVuZyBMZWUKLS0tIHRoZSBuZXh0IGZvdXIgd291bGQgYXBwZWFyIHRvIGJlIGluIGVycm9yLCBidXQgdGhleSBhcmUgbWlzbGVhZGluZyAodGhlCi0tLSBvcGVyYW5kcyB3aWxsIGJlIGNsYW1wZWQgdG8gYSBsb3dlciBleHBvbmVudCkgYW5kIHNvIGFyZSBvbWl0dGVkCi0tLSBkcXF1YTEwMjEgcXVhbnRpemUgIDguNjY2NjY2NjY2NjY2MDAwRSs2MTQ0ICAxLjAwMDAwMDAwMDAwMDAwMEUrNjE0NCAtPiAgOC42NjY2NjY2NjY2NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDQgIENsYW1wZWQKLS0tIGRxcXVhMTAyMiBxdWFudGl6ZSAtOC42NjY2NjY2NjY2NjYwMDBFKzYxNDQgIDEuMDAwMDAwMDAwMDAwMDAwRSs2MTQ0IC0+IC04LjY2NjY2NjY2NjY2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgQ2xhbXBlZAotLS0gZHFxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gZHFxdWExMDMwIHF1YW50aXplIDguNjY2NjY2NjZFKzMgICAgICAgICAgIDFFKzMgICAgIC0+IDlFKzMgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCi1kcXF1YTEwNDAgcXVhbnRpemUgLTIxNDc0ODM2NDYgICAgIDAgLT4gLTIxNDc0ODM2NDYKLWRxcXVhMTA0MSBxdWFudGl6ZSAtMjE0NzQ4MzY0NyAgICAgMCAtPiAtMjE0NzQ4MzY0NwotZHFxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4Ci1kcXF1YTEwNDMgcXVhbnRpemUgLTIxNDc0ODM2NDkgICAgIDAgLT4gLTIxNDc0ODM2NDkKLWRxcXVhMTA0NCBxdWFudGl6ZSAgMjE0NzQ4MzY0NiAgICAgMCAtPiAgMjE0NzQ4MzY0NgotZHFxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3Ci1kcXF1YTEwNDYgcXVhbnRpemUgIDIxNDc0ODM2NDggICAgIDAgLT4gIDIxNDc0ODM2NDgKLWRxcXVhMTA0NyBxdWFudGl6ZSAgMjE0NzQ4MzY0OSAgICAgMCAtPiAgMjE0NzQ4MzY0OQotZHFxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0Ci1kcXF1YTEwNDkgcXVhbnRpemUgIDQyOTQ5NjcyOTUgICAgIDAgLT4gIDQyOTQ5NjcyOTUKLWRxcXVhMTA1MCBxdWFudGl6ZSAgNDI5NDk2NzI5NiAgICAgMCAtPiAgNDI5NDk2NzI5NgotZHFxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3Ci0KLS0tIFJvdW5kaW5nIHN3YXRoZQotcm91bmRpbmc6IGhhbGZfZXZlbgotZHFxdWExMTAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAotZHFxdWExMTAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTEwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMTA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTEwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMTA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTEwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl91cAotZHFxdWExMjAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAotZHFxdWExMjAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTIwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMjA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTIwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMjA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTIwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl9kb3duCi1kcXF1YTEzMDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCi1kcXF1YTEzMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEzMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTEzMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExMzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiB1cAotZHFxdWExNDAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZAotZHFxdWExNDAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTQwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNDA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTQwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNDA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTQwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNDExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1kcXF1YTE1MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkCi1kcXF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTUwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNTAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTUwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNTA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTUwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNTA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGNlaWxpbmcKLWRxcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKLWRxcXVhMTYwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNjAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTYwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNjA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTYwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNjA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTYxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjMgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogZmxvb3IKLWRxcXVhMTcwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQKLWRxcXVhMTcwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTcwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTcwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZAotZHFxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE3MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTcxMSBxdWFudGl6ZSAtMS4yMzk5ICAgIDEuMDAgICAgLT4gLTEuMjQgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogMDV1cAotZHFxdWExODAwIHF1YW50aXplICAxLjIwMDAgICAgMS4wMCAgICAtPiAgMS4yMCAgUm91bmRlZAotZHFxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE4MDIgcXVhbnRpemUgIDEuMjAxMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTgwMyBxdWFudGl6ZSAgMS4yMDUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZHFxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE4MDcgcXVhbnRpemUgIDEuMjA2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTgwOCBxdWFudGl6ZSAgMS4yMDcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZHFxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE4MTEgcXVhbnRpemUgLTEuMjA5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZAotZHFxdWExOTAxIHF1YW50aXplICAxLjIxMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE5MDIgcXVhbnRpemUgIDEuMjExMCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZHFxdWExOTA0IHF1YW50aXplICAxLjIxNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE5MDcgcXVhbnRpemUgIDEuMjE2MCAgICAxLjAwICAgIC0+ICAxLjIxICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZAotZHFxdWExOTA5IHF1YW50aXplICAxLjIxOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTE5MTEgcXVhbnRpemUgLTEuMjE5OSAgICAxLjAwICAgIC0+IC0xLjIxICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEyMDAwIHF1YW50aXplICAxLjI0MDAgICAgMS4wMCAgICAtPiAgMS4yNCAgUm91bmRlZAotZHFxdWEyMDAxIHF1YW50aXplICAxLjI0MDEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjAwMyBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMDA0IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjAwOCBxdWFudGl6ZSAgMS4yNDcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMDA5IHF1YW50aXplICAxLjI0OTkgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEyMTAwIHF1YW50aXplICAxLjI1MDAgICAgMS4wMCAgICAtPiAgMS4yNSAgUm91bmRlZAotZHFxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIxMDIgcXVhbnRpemUgIDEuMjUxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjEwMyBxdWFudGl6ZSAgMS4yNTUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIxMDcgcXVhbnRpemUgIDEuMjU2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjEwOCBxdWFudGl6ZSAgMS4yNTcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIxMTEgcXVhbnRpemUgLTEuMjU5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZAotZHFxdWEyMjAxIHF1YW50aXplICAxLjI2MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyMDIgcXVhbnRpemUgIDEuMjYxMCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMjA0IHF1YW50aXplICAxLjI2NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyMDcgcXVhbnRpemUgIDEuMjY2MCAgICAxLjAwICAgIC0+ICAxLjI2ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMjA5IHF1YW50aXplICAxLjI2OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIyMTEgcXVhbnRpemUgLTEuMjY5OSAgICAxLjAwICAgIC0+IC0xLjI2ICBJbmV4YWN0IFJvdW5kZWQKLQotZHFxdWEyMzAwIHF1YW50aXplICAxLjI5MDAgICAgMS4wMCAgICAtPiAgMS4yOSAgUm91bmRlZAotZHFxdWEyMzAxIHF1YW50aXplICAxLjI5MDEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjMwMyBxdWFudGl6ZSAgMS4yOTUwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMzA0IHF1YW50aXplICAxLjI5NTEgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQKLWRxcXVhMjMwOCBxdWFudGl6ZSAgMS4yOTcwICAgIDEuMDAgICAgLT4gIDEuMjkgIEluZXhhY3QgUm91bmRlZAotZHFxdWEyMzA5IHF1YW50aXplICAxLjI5OTkgICAgMS4wMCAgICAtPiAgMS4yOSAgSW5leGFjdCBSb3VuZGVkCi1kcXF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gTnVsbCB0ZXN0cwotZHFxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcXVhOTk5IHF1YW50aXplICAjIDFlMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcVF1YW50aXplLmRlY1Rlc3QgLS0gZGVjUXVhZCBxdWFudGl6ZSBvcGVyYXRpb24gICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gTW9zdCBvZiB0aGUgdGVzdHMgaGVyZSBhc3N1bWUgYSAicmVndWxhciBwYXR0ZXJuIiwgd2hlcmUgdGhlDQorLS0gc2lnbiBhbmQgY29lZmZpY2llbnQgYXJlICsxLg0KKy0tIDIwMDQuMDMuMTUgVW5kZXJmbG93IGZvciBxdWFudGl6ZSBpcyBzdXBwcmVzc2VkDQorLS0gMjAwNS4wNi4wOCBNb3JlIGV4dGVuc2l2ZSB0ZXN0cyBmb3IgJ2RvZXMgbm90IGZpdCcNCistLSBbRm9ya2VkIGZyb20gcXVhbnRpemUuZGVjVGVzdCAyMDA2LjExLjI1XQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzDQorZHFxdWEwMDEgcXVhbnRpemUgMCAgICAgICAxZTAgICAtPiAwDQorZHFxdWEwMDIgcXVhbnRpemUgMSAgICAgICAxZTAgICAtPiAxDQorZHFxdWEwMDMgcXVhbnRpemUgMC4xICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDA1IHF1YW50aXplIDAuMSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTAwNiBxdWFudGl6ZSAwLjEgICAgIDFlMCAgIC0+IDAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwMDcgcXVhbnRpemUgMC4xICAgIDFlLTEgICAtPiAwLjENCitkcXF1YTAwOCBxdWFudGl6ZSAwLjEgICAgMWUtMiAgIC0+IDAuMTANCitkcXF1YTAwOSBxdWFudGl6ZSAwLjEgICAgMWUtMyAgIC0+IDAuMTAwDQorZHFxdWEwMTAgcXVhbnRpemUgMC45ICAgIDFlKzIgICAtPiAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDExIHF1YW50aXplIDAuOSAgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTAxMiBxdWFudGl6ZSAwLjkgICAgMWUrMCAgIC0+IDEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwMTMgcXVhbnRpemUgMC45ICAgIDFlLTEgICAtPiAwLjkNCitkcXF1YTAxNCBxdWFudGl6ZSAwLjkgICAgMWUtMiAgIC0+IDAuOTANCitkcXF1YTAxNSBxdWFudGl6ZSAwLjkgICAgMWUtMyAgIC0+IDAuOTAwDQorLS0gbmVnYXRpdmVzDQorZHFxdWEwMjEgcXVhbnRpemUgLTAgICAgICAxZTAgICAtPiAtMA0KK2RxcXVhMDIyIHF1YW50aXplIC0xICAgICAgMWUwICAgLT4gLTENCitkcXF1YTAyMyBxdWFudGl6ZSAtMC4xICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDI1IHF1YW50aXplIC0wLjEgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwMjYgcXVhbnRpemUgLTAuMSAgICAxZTAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTAyNyBxdWFudGl6ZSAtMC4xICAgMWUtMSAgIC0+IC0wLjENCitkcXF1YTAyOCBxdWFudGl6ZSAtMC4xICAgMWUtMiAgIC0+IC0wLjEwDQorZHFxdWEwMjkgcXVhbnRpemUgLTAuMSAgIDFlLTMgICAtPiAtMC4xMDANCitkcXF1YTAzMCBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDMxIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwMzIgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTAzMyBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCitkcXF1YTAzNCBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQorZHFxdWEwMzUgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCitkcXF1YTAzNiBxdWFudGl6ZSAtMC41ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDM3IHF1YW50aXplIC0wLjUgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwMzggcXVhbnRpemUgLTAuNSAgIDFlKzAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTAzOSBxdWFudGl6ZSAtMC41ICAgMWUtMSAgIC0+IC0wLjUNCitkcXF1YTA0MCBxdWFudGl6ZSAtMC41ICAgMWUtMiAgIC0+IC0wLjUwDQorZHFxdWEwNDEgcXVhbnRpemUgLTAuNSAgIDFlLTMgICAtPiAtMC41MDANCitkcXF1YTA0MiBxdWFudGl6ZSAtMC45ICAgMWUrMiAgIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDQzIHF1YW50aXplIC0wLjkgICAxZSsxICAgLT4gLTBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwNDQgcXVhbnRpemUgLTAuOSAgIDFlKzAgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA0NSBxdWFudGl6ZSAtMC45ICAgMWUtMSAgIC0+IC0wLjkNCitkcXF1YTA0NiBxdWFudGl6ZSAtMC45ICAgMWUtMiAgIC0+IC0wLjkwDQorZHFxdWEwNDcgcXVhbnRpemUgLTAuOSAgIDFlLTMgICAtPiAtMC45MDANCisNCistLSBleGFtcGxlcyBmcm9tIFNwZWNpZmljYXRpb24NCitkcXF1YTA2MCBxdWFudGl6ZSAyLjE3ICAgMC4wMDEgIC0+IDIuMTcwDQorZHFxdWEwNjEgcXVhbnRpemUgMi4xNyAgIDAuMDEgICAtPiAyLjE3DQorZHFxdWEwNjIgcXVhbnRpemUgMi4xNyAgIDAuMSAgICAtPiAyLjIgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwNjMgcXVhbnRpemUgMi4xNyAgIDFlKzAgICAtPiAyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDY0IHF1YW50aXplIDIuMTcgICAxZSsxICAgLT4gMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA2NSBxdWFudGl6ZSAtSW5mICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2RxcXVhMDY2IHF1YW50aXplIDIgICAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWEwNjcgcXVhbnRpemUgLTAuMSAgICAxICAgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA2OCBxdWFudGl6ZSAtMCAgICAgIDFlKzUgICAgIC0+IC0wRSs1DQorZHFxdWEwNjkgcXVhbnRpemUgKzEyMzQ1MTIzNDU2Nzg5OTg3NjU0MzIxNjc4OTAxMjM0NS42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWEwNzAgcXVhbnRpemUgLTk4NzY1MTIzNDU2Nzg5OTg3NjU0MzIxNDMzNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWEwNzEgcXVhbnRpemUgMjE3ICAgIDFlLTEgICAtPiAyMTcuMA0KK2RxcXVhMDcyIHF1YW50aXplIDIxNyAgICAxZSswICAgLT4gMjE3DQorZHFxdWEwNzMgcXVhbnRpemUgMjE3ICAgIDFlKzEgICAtPiAyLjJFKzIgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwNzQgcXVhbnRpemUgMjE3ICAgIDFlKzIgICAtPiAyRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGdlbmVyYWwgdGVzdHMgLi4NCitkcXF1YTA4OSBxdWFudGl6ZSAxMiAgICAgMWUrNCAgIC0+IDBFKzQgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwOTAgcXVhbnRpemUgMTIgICAgIDFlKzMgICAtPiAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDkxIHF1YW50aXplIDEyICAgICAxZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA5MiBxdWFudGl6ZSAxMiAgICAgMWUrMSAgIC0+IDFFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwOTMgcXVhbnRpemUgMS4yMzQ1IDFlLTIgICAtPiAxLjIzIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDk0IHF1YW50aXplIDEuMjM1NSAxZS0yICAgLT4gMS4yNCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA5NSBxdWFudGl6ZSAxLjIzNDUgMWUtNiAgIC0+IDEuMjM0NTAwDQorZHFxdWEwOTYgcXVhbnRpemUgOS45OTk5IDFlLTIgICAtPiAxMC4wMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTA5NyBxdWFudGl6ZSAwLjAwMDEgMWUtMiAgIC0+IDAuMDAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEwOTggcXVhbnRpemUgMC4wMDEgIDFlLTIgICAtPiAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMDk5IHF1YW50aXplIDAuMDA5ICAxZS0yICAgLT4gMC4wMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEwMCBxdWFudGl6ZSA5MiAgICAgMWUrMiAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWExMDEgcXVhbnRpemUgLTEgICAgICAxZTAgICAtPiAgLTENCitkcXF1YTEwMiBxdWFudGl6ZSAtMSAgICAgMWUtMSAgIC0+ICAtMS4wDQorZHFxdWExMDMgcXVhbnRpemUgLTEgICAgIDFlLTIgICAtPiAgLTEuMDANCitkcXF1YTEwNCBxdWFudGl6ZSAgMCAgICAgIDFlMCAgIC0+ICAwDQorZHFxdWExMDUgcXVhbnRpemUgIDAgICAgIDFlLTEgICAtPiAgMC4wDQorZHFxdWExMDYgcXVhbnRpemUgIDAgICAgIDFlLTIgICAtPiAgMC4wMA0KK2RxcXVhMTA3IHF1YW50aXplICAwLjAwICAgMWUwICAgLT4gIDANCitkcXF1YTEwOCBxdWFudGl6ZSAgMCAgICAgMWUrMSAgIC0+ICAwRSsxDQorZHFxdWExMDkgcXVhbnRpemUgIDAgICAgIDFlKzIgICAtPiAgMEUrMg0KK2RxcXVhMTEwIHF1YW50aXplICsxICAgICAgMWUwICAgLT4gIDENCitkcXF1YTExMSBxdWFudGl6ZSArMSAgICAgMWUtMSAgIC0+ICAxLjANCitkcXF1YTExMiBxdWFudGl6ZSArMSAgICAgMWUtMiAgIC0+ICAxLjAwDQorDQorZHFxdWExMjAgcXVhbnRpemUgICAxLjA0ICAxZS0zIC0+ICAxLjA0MA0KK2RxcXVhMTIxIHF1YW50aXplICAgMS4wNCAgMWUtMiAtPiAgMS4wNA0KK2RxcXVhMTIyIHF1YW50aXplICAgMS4wNCAgMWUtMSAtPiAgMS4wIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTIzIHF1YW50aXplICAgMS4wNCAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyNCBxdWFudGl6ZSAgIDEuMDUgIDFlLTMgLT4gIDEuMDUwDQorZHFxdWExMjUgcXVhbnRpemUgICAxLjA1ICAxZS0yIC0+ICAxLjA1DQorZHFxdWExMjYgcXVhbnRpemUgICAxLjA1ICAxZS0xIC0+ICAxLjAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExMzEgcXVhbnRpemUgICAxLjA1ICAgMWUwIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMyIHF1YW50aXplICAgMS4wNiAgMWUtMyAtPiAgMS4wNjANCitkcXF1YTEzMyBxdWFudGl6ZSAgIDEuMDYgIDFlLTIgLT4gIDEuMDYNCitkcXF1YTEzNCBxdWFudGl6ZSAgIDEuMDYgIDFlLTEgLT4gIDEuMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEzNSBxdWFudGl6ZSAgIDEuMDYgICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWExNDAgcXVhbnRpemUgICAtMTAgICAgMWUtMiAgLT4gIC0xMC4wMA0KK2RxcXVhMTQxIHF1YW50aXplICAgKzEgICAgIDFlLTIgIC0+ICAxLjAwDQorZHFxdWExNDIgcXVhbnRpemUgICArMTAgICAgMWUtMiAgLT4gIDEwLjAwDQorZHFxdWExNDMgcXVhbnRpemUgICAxRSszNyAgMWUtMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhMTQ0IHF1YW50aXplICAgMUUtMzcgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTQ1IHF1YW50aXplICAgMUUtMyAgIDFlLTIgIC0+ICAwLjAwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTQ2IHF1YW50aXplICAgMUUtMiAgIDFlLTIgIC0+ICAwLjAxDQorZHFxdWExNDcgcXVhbnRpemUgICAxRS0xICAgMWUtMiAgLT4gIDAuMTANCitkcXF1YTE0OCBxdWFudGl6ZSAgIDBFLTM3ICAxZS0yICAtPiAgMC4wMA0KKw0KK2RxcXVhMTUwIHF1YW50aXplICAgMS4wNjAwIDFlLTUgLT4gIDEuMDYwMDANCitkcXF1YTE1MSBxdWFudGl6ZSAgIDEuMDYwMCAxZS00IC0+ICAxLjA2MDANCitkcXF1YTE1MiBxdWFudGl6ZSAgIDEuMDYwMCAxZS0zIC0+ICAxLjA2MCBSb3VuZGVkDQorZHFxdWExNTMgcXVhbnRpemUgICAxLjA2MDAgMWUtMiAtPiAgMS4wNiBSb3VuZGVkDQorZHFxdWExNTQgcXVhbnRpemUgICAxLjA2MDAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTU1IHF1YW50aXplICAgMS4wNjAwICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gYSBjb3VwbGUgd2hlcmUgcm91bmRpbmcgd2FzIGRpZmZlcmVudCBpbiBiYXNlIHRlc3RzDQorcm91bmRpbmc6ICAgIGhhbGZfdXANCitkcXF1YTE1NyBxdWFudGl6ZSAtMC41ICAgMWUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTU4IHF1YW50aXplICAgMS4wNSAgMWUtMSAtPiAgMS4xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTU5IHF1YW50aXplICAgMS4wNiAgIDFlMCAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gYmFzZSB0ZXN0cyB3aXRoIG5vbi0xIGNvZWZmaWNpZW50cw0KK2RxcXVhMTYxIHF1YW50aXplIDAgICAgICAtOWUwICAgLT4gMA0KK2RxcXVhMTYyIHF1YW50aXplIDEgICAgICAtN2UwICAgLT4gMQ0KK2RxcXVhMTYzIHF1YW50aXplIDAuMSAgIC0xZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2NSBxdWFudGl6ZSAwLjEgICAgMGUrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNjYgcXVhbnRpemUgMC4xICAgICAyZTAgICAtPiAwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTY3IHF1YW50aXplIDAuMSAgICAzZS0xICAgLT4gMC4xDQorZHFxdWExNjggcXVhbnRpemUgMC4xICAgNDRlLTIgICAtPiAwLjEwDQorZHFxdWExNjkgcXVhbnRpemUgMC4xICA1NTVlLTMgICAtPiAwLjEwMA0KK2RxcXVhMTcwIHF1YW50aXplIDAuOSA2NjY2ZSsyICAgLT4gMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE3MSBxdWFudGl6ZSAwLjkgLTc3N2UrMSAgIC0+IDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzIgcXVhbnRpemUgMC45ICAtODhlKzAgICAtPiAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTczIHF1YW50aXplIDAuOSAgIC05ZS0xICAgLT4gMC45DQorZHFxdWExNzQgcXVhbnRpemUgMC45ICAgIDBlLTIgICAtPiAwLjkwDQorZHFxdWExNzUgcXVhbnRpemUgMC45ICAxLjFlLTMgICAtPiAwLjkwMDANCistLSBuZWdhdGl2ZXMNCitkcXF1YTE4MSBxdWFudGl6ZSAtMCAgICAxLjFlMCAgIC0+IC0wLjANCitkcXF1YTE4MiBxdWFudGl6ZSAtMSAgICAgLTFlMCAgIC0+IC0xDQorZHFxdWExODMgcXVhbnRpemUgLTAuMSAgMTFlKzIgICAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE4NSBxdWFudGl6ZSAtMC4xIDExMWUrMSAgIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTg2IHF1YW50aXplIC0wLjEgICA3MWUwICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODcgcXVhbnRpemUgLTAuMSAtOTFlLTEgICAtPiAtMC4xDQorZHFxdWExODggcXVhbnRpemUgLTAuMSAtLjFlLTIgICAtPiAtMC4xMDANCitkcXF1YTE4OSBxdWFudGl6ZSAtMC4xICAtMWUtMyAgIC0+IC0wLjEwMA0KK2RxcXVhMTkwIHF1YW50aXplIC0wLjkgICAwZSsyICAgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExOTEgcXVhbnRpemUgLTAuOSAgLTBlKzEgICAtPiAtMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE5MiBxdWFudGl6ZSAtMC45IC0xMGUrMCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkzIHF1YW50aXplIC0wLjkgMTAwZS0xICAgLT4gLTAuOQ0KK2RxcXVhMTk0IHF1YW50aXplIC0wLjkgOTk5ZS0yICAgLT4gLTAuOTANCisNCistLSArdmUgZXhwb25lbnRzIC4uDQorZHFxdWEyMDEgcXVhbnRpemUgICAtMSAgIDFlKzAgLT4gIC0xDQorZHFxdWEyMDIgcXVhbnRpemUgICAtMSAgIDFlKzEgLT4gIC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjAzIHF1YW50aXplICAgLTEgICAxZSsyIC0+ICAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwNCBxdWFudGl6ZSAgICAwICAgMWUrMCAtPiAgMA0KK2RxcXVhMjA1IHF1YW50aXplICAgIDAgICAxZSsxIC0+ICAwRSsxDQorZHFxdWEyMDYgcXVhbnRpemUgICAgMCAgIDFlKzIgLT4gIDBFKzINCitkcXF1YTIwNyBxdWFudGl6ZSAgICsxICAgMWUrMCAtPiAgMQ0KK2RxcXVhMjA4IHF1YW50aXplICAgKzEgICAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjA5IHF1YW50aXplICAgKzEgICAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMjIwIHF1YW50aXplICAgMS4wNCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIxIHF1YW50aXplICAgMS4wNCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIyIHF1YW50aXplICAgMS4wNCAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIzIHF1YW50aXplICAgMS4wNCAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI0IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI1IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI2IHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI3IHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI4IHF1YW50aXplICAgMS4wNSAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjI5IHF1YW50aXplICAgMS4wNSAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjMwIHF1YW50aXplICAgMS4wNSAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjMxIHF1YW50aXplICAgMS4wNSAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjMyIHF1YW50aXplICAgMS4wNiAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjMzIHF1YW50aXplICAgMS4wNiAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjM0IHF1YW50aXplICAgMS4wNiAxZSsxIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjM1IHF1YW50aXplICAgMS4wNiAxZSswIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMjQwIHF1YW50aXplICAgLTEwICAgMWUrMSAgLT4gIC0xRSsxIFJvdW5kZWQNCitkcXF1YTI0MSBxdWFudGl6ZSAgICsxICAgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjQyIHF1YW50aXplICAgKzEwICAgMWUrMSAgLT4gIDFFKzEgUm91bmRlZA0KK2RxcXVhMjQzIHF1YW50aXplICAgMUUrMSAgMWUrMSAgLT4gIDFFKzEgICAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ0IHF1YW50aXplICAgMUUrMiAgMWUrMSAgLT4gIDEuMEUrMiAgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ1IHF1YW50aXplICAgMUUrMyAgMWUrMSAgLT4gIDEuMDBFKzMgICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ2IHF1YW50aXplICAgMUUrNCAgMWUrMSAgLT4gIDEuMDAwRSs0ICAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ3IHF1YW50aXplICAgMUUrNSAgMWUrMSAgLT4gIDEuMDAwMEUrNSAgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ4IHF1YW50aXplICAgMUUrNiAgMWUrMSAgLT4gIDEuMDAwMDBFKzYgICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjQ5IHF1YW50aXplICAgMUUrNyAgMWUrMSAgLT4gIDEuMDAwMDAwRSs3ICAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjUwIHF1YW50aXplICAgMUUrOCAgMWUrMSAgLT4gIDEuMDAwMDAwMEUrOCAgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KK2RxcXVhMjUxIHF1YW50aXplICAgMUUrOSAgMWUrMSAgLT4gIDEuMDAwMDAwMDBFKzkgLS0gdW5kZXJuZWF0aCB0aGlzIGlzIEUrMQ0KKy0tIG5leHQgb25lIHRyaWVzIHRvIGFkZCA5IHplcm9zDQorZHFxdWEyNTIgcXVhbnRpemUgICAxRSszNyAxZSsxICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWEyNTMgcXVhbnRpemUgICAxRS0zNyAxZSsxICAtPiAgMEUrMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI1NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzEgIC0+ICAwRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjU1IHF1YW50aXplICAgMEUtMzcgMWUrMSAgLT4gIDBFKzENCitkcXF1YTI1NiBxdWFudGl6ZSAgLTBFLTM3IDFlKzEgIC0+IC0wRSsxDQorZHFxdWEyNTcgcXVhbnRpemUgIC0wRS0xICAxZSsxICAtPiAtMEUrMQ0KK2RxcXVhMjU4IHF1YW50aXplICAtMCAgICAgMWUrMSAgLT4gLTBFKzENCitkcXF1YTI1OSBxdWFudGl6ZSAgLTBFKzEgIDFlKzEgIC0+IC0wRSsxDQorDQorZHFxdWEyNjAgcXVhbnRpemUgICAtMTAgICAxZSsyICAtPiAgLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyNjEgcXVhbnRpemUgICArMSAgICAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI2MiBxdWFudGl6ZSAgICsxMCAgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjYzIHF1YW50aXplICAgMUUrMSAgMWUrMiAgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyNjQgcXVhbnRpemUgICAxRSsyICAxZSsyICAtPiAgMUUrMg0KK2RxcXVhMjY1IHF1YW50aXplICAgMUUrMyAgMWUrMiAgLT4gIDEuMEUrMw0KK2RxcXVhMjY2IHF1YW50aXplICAgMUUrNCAgMWUrMiAgLT4gIDEuMDBFKzQNCitkcXF1YTI2NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzIgIC0+ICAxLjAwMEUrNQ0KK2RxcXVhMjY4IHF1YW50aXplICAgMUUrNiAgMWUrMiAgLT4gIDEuMDAwMEUrNg0KK2RxcXVhMjY5IHF1YW50aXplICAgMUUrNyAgMWUrMiAgLT4gIDEuMDAwMDBFKzcNCitkcXF1YTI3MCBxdWFudGl6ZSAgIDFFKzggIDFlKzIgIC0+ICAxLjAwMDAwMEUrOA0KK2RxcXVhMjcxIHF1YW50aXplICAgMUUrOSAgMWUrMiAgLT4gIDEuMDAwMDAwMEUrOQ0KK2RxcXVhMjcyIHF1YW50aXplICAgMUUrMTAgMWUrMiAgLT4gIDEuMDAwMDAwMDBFKzEwDQorZHFxdWEyNzMgcXVhbnRpemUgICAxRS0xMCAxZSsyICAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI3NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzIgIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjc1IHF1YW50aXplICAgMEUtMTAgMWUrMiAgLT4gIDBFKzINCisNCitkcXF1YTI4MCBxdWFudGl6ZSAgIC0xMCAgIDFlKzMgIC0+ICAtMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI4MSBxdWFudGl6ZSAgICsxICAgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjgyIHF1YW50aXplICAgKzEwICAgMWUrMyAgLT4gIDBFKzMgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyODMgcXVhbnRpemUgICAxRSsxICAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI4NCBxdWFudGl6ZSAgIDFFKzIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjg1IHF1YW50aXplICAgMUUrMyAgMWUrMyAgLT4gIDFFKzMNCitkcXF1YTI4NiBxdWFudGl6ZSAgIDFFKzQgIDFlKzMgIC0+ICAxLjBFKzQNCitkcXF1YTI4NyBxdWFudGl6ZSAgIDFFKzUgIDFlKzMgIC0+ICAxLjAwRSs1DQorZHFxdWEyODggcXVhbnRpemUgICAxRSs2ICAxZSszICAtPiAgMS4wMDBFKzYNCitkcXF1YTI4OSBxdWFudGl6ZSAgIDFFKzcgIDFlKzMgIC0+ICAxLjAwMDBFKzcNCitkcXF1YTI5MCBxdWFudGl6ZSAgIDFFKzggIDFlKzMgIC0+ICAxLjAwMDAwRSs4DQorZHFxdWEyOTEgcXVhbnRpemUgICAxRSs5ICAxZSszICAtPiAgMS4wMDAwMDBFKzkNCitkcXF1YTI5MiBxdWFudGl6ZSAgIDFFKzEwIDFlKzMgIC0+ICAxLjAwMDAwMDBFKzEwDQorZHFxdWEyOTMgcXVhbnRpemUgICAxRS0xMCAxZSszICAtPiAgMEUrMyBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTI5NCBxdWFudGl6ZSAgIDFFLTIgIDFlKzMgIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjk1IHF1YW50aXplICAgMEUtMTAgMWUrMyAgLT4gIDBFKzMNCisNCistLSByb3VuZCB1cCBmcm9tIGJlbG93IFtzaWduIHdyb25nIGluIEpJVCBjb21waWxlciBvbmNlXQ0KK2RxcXVhMzAwIHF1YW50aXplICAgMC4wMDc4IDFlLTUgLT4gIDAuMDA3ODANCitkcXF1YTMwMSBxdWFudGl6ZSAgIDAuMDA3OCAxZS00IC0+ICAwLjAwNzgNCitkcXF1YTMwMiBxdWFudGl6ZSAgIDAuMDA3OCAxZS0zIC0+ICAwLjAwOCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMwMyBxdWFudGl6ZSAgIDAuMDA3OCAxZS0yIC0+ICAwLjAxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzA0IHF1YW50aXplICAgMC4wMDc4IDFlLTEgLT4gIDAuMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMwNSBxdWFudGl6ZSAgIDAuMDA3OCAgMWUwIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzA2IHF1YW50aXplICAgMC4wMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzMDcgcXVhbnRpemUgICAwLjAwNzggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTMxMCBxdWFudGl6ZSAgLTAuMDA3OCAxZS01IC0+IC0wLjAwNzgwDQorZHFxdWEzMTEgcXVhbnRpemUgIC0wLjAwNzggMWUtNCAtPiAtMC4wMDc4DQorZHFxdWEzMTIgcXVhbnRpemUgIC0wLjAwNzggMWUtMyAtPiAtMC4wMDggSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzMTMgcXVhbnRpemUgIC0wLjAwNzggMWUtMiAtPiAtMC4wMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMxNCBxdWFudGl6ZSAgLTAuMDA3OCAxZS0xIC0+IC0wLjAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzMTUgcXVhbnRpemUgIC0wLjAwNzggIDFlMCAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMxNiBxdWFudGl6ZSAgLTAuMDA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzE3IHF1YW50aXplICAtMC4wMDc4IDFlKzIgLT4gLTBFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWEzMjAgcXVhbnRpemUgICAwLjA3OCAxZS01IC0+ICAwLjA3ODAwDQorZHFxdWEzMjEgcXVhbnRpemUgICAwLjA3OCAxZS00IC0+ICAwLjA3ODANCitkcXF1YTMyMiBxdWFudGl6ZSAgIDAuMDc4IDFlLTMgLT4gIDAuMDc4DQorZHFxdWEzMjMgcXVhbnRpemUgICAwLjA3OCAxZS0yIC0+ICAwLjA4IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzI0IHF1YW50aXplICAgMC4wNzggMWUtMSAtPiAgMC4xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzI1IHF1YW50aXplICAgMC4wNzggIDFlMCAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMyNiBxdWFudGl6ZSAgIDAuMDc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzMjcgcXVhbnRpemUgICAwLjA3OCAxZSsyIC0+ICAwRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMzMwIHF1YW50aXplICAtMC4wNzggMWUtNSAtPiAtMC4wNzgwMA0KK2RxcXVhMzMxIHF1YW50aXplICAtMC4wNzggMWUtNCAtPiAtMC4wNzgwDQorZHFxdWEzMzIgcXVhbnRpemUgIC0wLjA3OCAxZS0zIC0+IC0wLjA3OA0KK2RxcXVhMzMzIHF1YW50aXplICAtMC4wNzggMWUtMiAtPiAtMC4wOCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMzNCBxdWFudGl6ZSAgLTAuMDc4IDFlLTEgLT4gLTAuMSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTMzNSBxdWFudGl6ZSAgLTAuMDc4ICAxZTAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzMzYgcXVhbnRpemUgIC0wLjA3OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzM3IHF1YW50aXplICAtMC4wNzggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTM0MCBxdWFudGl6ZSAgIDAuNzggMWUtNSAtPiAgMC43ODAwMA0KK2RxcXVhMzQxIHF1YW50aXplICAgMC43OCAxZS00IC0+ICAwLjc4MDANCitkcXF1YTM0MiBxdWFudGl6ZSAgIDAuNzggMWUtMyAtPiAgMC43ODANCitkcXF1YTM0MyBxdWFudGl6ZSAgIDAuNzggMWUtMiAtPiAgMC43OA0KK2RxcXVhMzQ0IHF1YW50aXplICAgMC43OCAxZS0xIC0+ICAwLjggSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzNDUgcXVhbnRpemUgICAwLjc4ICAxZTAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzNDYgcXVhbnRpemUgICAwLjc4IDFlKzEgLT4gIDBFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzNDcgcXVhbnRpemUgICAwLjc4IDFlKzIgLT4gIDBFKzIgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWEzNTAgcXVhbnRpemUgIC0wLjc4IDFlLTUgLT4gLTAuNzgwMDANCitkcXF1YTM1MSBxdWFudGl6ZSAgLTAuNzggMWUtNCAtPiAtMC43ODAwDQorZHFxdWEzNTIgcXVhbnRpemUgIC0wLjc4IDFlLTMgLT4gLTAuNzgwDQorZHFxdWEzNTMgcXVhbnRpemUgIC0wLjc4IDFlLTIgLT4gLTAuNzgNCitkcXF1YTM1NCBxdWFudGl6ZSAgLTAuNzggMWUtMSAtPiAtMC44IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzU1IHF1YW50aXplICAtMC43OCAgMWUwIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzU2IHF1YW50aXplICAtMC43OCAxZSsxIC0+IC0wRSsxIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzU3IHF1YW50aXplICAtMC43OCAxZSsyIC0+IC0wRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMzYwIHF1YW50aXplICAgNy44IDFlLTUgLT4gIDcuODAwMDANCitkcXF1YTM2MSBxdWFudGl6ZSAgIDcuOCAxZS00IC0+ICA3LjgwMDANCitkcXF1YTM2MiBxdWFudGl6ZSAgIDcuOCAxZS0zIC0+ICA3LjgwMA0KK2RxcXVhMzYzIHF1YW50aXplICAgNy44IDFlLTIgLT4gIDcuODANCitkcXF1YTM2NCBxdWFudGl6ZSAgIDcuOCAxZS0xIC0+ICA3LjgNCitkcXF1YTM2NSBxdWFudGl6ZSAgIDcuOCAgMWUwIC0+ICA4IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzY2IHF1YW50aXplICAgNy44IDFlKzEgLT4gIDFFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzNjcgcXVhbnRpemUgICA3LjggMWUrMiAtPiAgMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTM2OCBxdWFudGl6ZSAgIDcuOCAxZSszIC0+ICAwRSszIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMzcwIHF1YW50aXplICAtNy44IDFlLTUgLT4gLTcuODAwMDANCitkcXF1YTM3MSBxdWFudGl6ZSAgLTcuOCAxZS00IC0+IC03LjgwMDANCitkcXF1YTM3MiBxdWFudGl6ZSAgLTcuOCAxZS0zIC0+IC03LjgwMA0KK2RxcXVhMzczIHF1YW50aXplICAtNy44IDFlLTIgLT4gLTcuODANCitkcXF1YTM3NCBxdWFudGl6ZSAgLTcuOCAxZS0xIC0+IC03LjgNCitkcXF1YTM3NSBxdWFudGl6ZSAgLTcuOCAgMWUwIC0+IC04IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzc2IHF1YW50aXplICAtNy44IDFlKzEgLT4gLTFFKzEgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEzNzcgcXVhbnRpemUgIC03LjggMWUrMiAtPiAtMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTM3OCBxdWFudGl6ZSAgLTcuOCAxZSszIC0+IC0wRSszIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgaW5kaXZpZHVhbHMNCitkcXF1YTM4MCBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQuNTA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTM4MSBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUuMDYNCitkcXF1YTM4MiBxdWFudGl6ZSAgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1MC42IDFlLTIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWEzODMgcXVhbnRpemUgICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTA2ICAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhMzg0IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MDYgMWUtMiAtPiAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NC41MSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTM4NSBxdWFudGl6ZSAgLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2IDFlLTIgLT4gLTExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1NjczNTIzNjQ1LjA2DQorZHFxdWEzODYgcXVhbnRpemUgIC0xMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3MzUyMzY0NTAuNiAxZS0yIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhMzg3IHF1YW50aXplICAtMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwNiAgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCityb3VuZGluZzogZG93bg0KK2RxcXVhMzg5IHF1YW50aXplICAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2NzM1MjM2NDUwLjYgMWUtMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3VuZGluZzogaGFsZl91cA0KKw0KKy0tIGFuZCBhIGZldyBtb3JlIGZyb20gZS1tYWlsIGRpc2N1c3Npb25zDQorZHFxdWEzOTEgcXVhbnRpemUgIDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NTY3ICAxZS0zIC0+IDExMjIzMzQ0NTU2Njc3ODg5OTEyMzQ1Njc4OTEyLjM0NiAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMzkyIHF1YW50aXplICAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU2NyAgMWUtMyAtPiAxMTIyMzM0NDU1NjY3Nzg4OTkxMjM0NTY3ODkxMjMuNDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTM5MyBxdWFudGl6ZSAgMTEyMjMzNDQ1NTY2Nzc4ODk5MTIzNDU2Nzg5MTIzNDU2Ny4gIDFlLTMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gc29tZSA5OTk5IHJvdW5kLXVwIGNhc2VzDQorZHFxdWE0MDAgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtNSAgLT4gIDkuOTk5MDANCitkcXF1YTQwMSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAxZS00ICAtPiAgOS45OTkwDQorZHFxdWE0MDIgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMyAgLT4gIDkuOTk5DQorZHFxdWE0MDMgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgMWUtMiAgLT4gMTAuMDAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDA0IHF1YW50aXplICAgOS45OTkgICAgICAgIDFlLTEgIC0+IDEwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQwNSBxdWFudGl6ZSAgIDkuOTk5ICAgICAgICAgMWUwICAtPiAxMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0MDYgcXVhbnRpemUgICA5Ljk5OSAgICAgICAgIDFlMSAgLT4gMUUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDA3IHF1YW50aXplICAgOS45OTkgICAgICAgICAxZTIgIC0+IDBFKzIgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTQxMCBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS01ICAtPiAgMC45OTkwMA0KK2RxcXVhNDExIHF1YW50aXplICAgMC45OTkgICAgICAgIDFlLTQgIC0+ICAwLjk5OTANCitkcXF1YTQxMiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0zICAtPiAgMC45OTkNCitkcXF1YTQxMyBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAxZS0yICAtPiAgMS4wMCAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0MTQgcXVhbnRpemUgICAwLjk5OSAgICAgICAgMWUtMSAgLT4gIDEuMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDE1IHF1YW50aXplICAgMC45OTkgICAgICAgICAxZTAgIC0+ICAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQxNiBxdWFudGl6ZSAgIDAuOTk5ICAgICAgICAgMWUxICAtPiAwRSsxICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWE0MjAgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtNSAgLT4gIDAuMDk5OTANCitkcXF1YTQyMSBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS00ICAtPiAgMC4wOTk5DQorZHFxdWE0MjIgcXVhbnRpemUgICAwLjA5OTkgICAgICAgMWUtMyAgLT4gIDAuMTAwICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDIzIHF1YW50aXplICAgMC4wOTk5ICAgICAgIDFlLTIgIC0+ICAwLjEwICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQyNCBxdWFudGl6ZSAgIDAuMDk5OSAgICAgICAxZS0xICAtPiAgMC4xICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0MjUgcXVhbnRpemUgICAwLjA5OTkgICAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDI2IHF1YW50aXplICAgMC4wOTk5ICAgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTQzMCBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS01ICAtPiAgMC4wMDk5OQ0KK2RxcXVhNDMxIHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTQgIC0+ICAwLjAxMDAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQzMiBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAxZS0zICAtPiAgMC4wMTAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0MzMgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgMWUtMiAgLT4gIDAuMDEgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDM0IHF1YW50aXplICAgMC4wMDk5OSAgICAgIDFlLTEgIC0+ICAwLjAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQzNSBxdWFudGl6ZSAgIDAuMDA5OTkgICAgICAgMWUwICAtPiAgMCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0MzYgcXVhbnRpemUgICAwLjAwOTk5ICAgICAgIDFlMSAgLT4gMEUrMSAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhNDQwIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTUgIC0+ICAwLjAwMTAwICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQ0MSBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS00ICAtPiAgMC4wMDEwICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0NDIgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgMWUtMyAgLT4gIDAuMDAxICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDQzIHF1YW50aXplICAgMC4wMDA5OTkgICAgIDFlLTIgIC0+ICAwLjAwICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQ0NCBxdWFudGl6ZSAgIDAuMDAwOTk5ICAgICAxZS0xICAtPiAgMC4wICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0NDUgcXVhbnRpemUgICAwLjAwMDk5OSAgICAgIDFlMCAgLT4gIDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDQ2IHF1YW50aXplICAgMC4wMDA5OTkgICAgICAxZTEgIC0+IDBFKzEgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTEwMDEgcXVhbnRpemUgIDAuMDAwICAgICAgICAwLjAwMSAtPiAgMC4wMDANCitkcXF1YTEwMDIgcXVhbnRpemUgIDAuMDAxICAgICAgICAwLjAwMSAtPiAgMC4wMDENCitkcXF1YTEwMDMgcXVhbnRpemUgIDAuMDAxMiAgICAgICAwLjAwMSAtPiAgMC4wMDEgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTAwNCBxdWFudGl6ZSAgMC4wMDE4ICAgICAgIDAuMDAxIC0+ICAwLjAwMiAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExMDA1IHF1YW50aXplICAwLjUwMSAgICAgICAgMC4wMDEgLT4gIDAuNTAxDQorZHFxdWExMDA2IHF1YW50aXplICAwLjUwMTIgICAgICAgMC4wMDEgLT4gIDAuNTAxICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEwMDcgcXVhbnRpemUgIDAuNTAxOCAgICAgICAwLjAwMSAtPiAgMC41MDIgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTAwOCBxdWFudGl6ZSAgMC45OTkgICAgICAgIDAuMDAxIC0+ICAwLjk5OQ0KKw0KK2RxcXVhNDgxIHF1YW50aXplIDEyMzQ1Njc4MDAwIDFlKzMgLT4gMS4yMzQ1Njc4RSsxMCBSb3VuZGVkDQorZHFxdWE0ODIgcXVhbnRpemUgMTIzNDU2NzgwMCAgMWUrMSAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQNCitkcXF1YTQ4MyBxdWFudGl6ZSAxMjM0NTY3ODkwICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KK2RxcXVhNDg0IHF1YW50aXplIDEyMzQ1Njc4OTEgIDFlKzEgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQ4NSBxdWFudGl6ZSAxMjM0NTY3ODkwMSAxZSsyIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNDg2IHF1YW50aXplIDEyMzQ1Njc4OTYgIDFlKzEgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCistLSBhIHBvdGVudGlhbCBkb3VibGUtcm91bmQNCitkcXF1YTQ4NyBxdWFudGl6ZSAxMjM0Ljk4NzY0MyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQ4OCBxdWFudGl6ZSAxMjM0Ljk4NzY0NyAxZS00IC0+IDEyMzQuOTg3NiBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTQ5MSBxdWFudGl6ZSAxMjM0NTY3ODAwMCAxZSszIC0+IDEuMjM0NTY3OEUrMTAgUm91bmRlZA0KK2RxcXVhNDkyIHF1YW50aXplIDEyMzQ1Njc4MDAgIDFlKzEgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQorZHFxdWE0OTMgcXVhbnRpemUgMTIzNDU2Nzg5MCAgMWUrMSAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCitkcXF1YTQ5NCBxdWFudGl6ZSAxMjM0NTY3ODkxICAxZSsxIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0OTUgcXVhbnRpemUgMTIzNDU2Nzg5MDEgMWUrMiAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTQ5NiBxdWFudGl6ZSAxMjM0NTY3ODk2ICAxZSsxIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0OTcgcXVhbnRpemUgMTIzNC45ODc2NDMgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE0OTggcXVhbnRpemUgMTIzNC45ODc2NDcgMWUtNCAtPiAxMjM0Ljk4NzYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gWmVyb3MNCitkcXF1YTUwMCBxdWFudGl6ZSAgIDAgICAgIDFlMSAtPiAgMEUrMQ0KK2RxcXVhNTAxIHF1YW50aXplICAgMCAgICAgMWUwIC0+ICAwDQorZHFxdWE1MDIgcXVhbnRpemUgICAwICAgIDFlLTEgLT4gIDAuMA0KK2RxcXVhNTAzIHF1YW50aXplICAgMC4wICAxZS0xIC0+ICAwLjANCitkcXF1YTUwNCBxdWFudGl6ZSAgIDAuMCAgIDFlMCAtPiAgMA0KK2RxcXVhNTA1IHF1YW50aXplICAgMC4wICAxZSsxIC0+ICAwRSsxDQorZHFxdWE1MDYgcXVhbnRpemUgICAwRSsxIDFlLTEgLT4gIDAuMA0KK2RxcXVhNTA3IHF1YW50aXplICAgMEUrMSAgMWUwIC0+ICAwDQorZHFxdWE1MDggcXVhbnRpemUgICAwRSsxIDFlKzEgLT4gIDBFKzENCitkcXF1YTUwOSBxdWFudGl6ZSAgLTAgICAgIDFlMSAtPiAtMEUrMQ0KK2RxcXVhNTEwIHF1YW50aXplICAtMCAgICAgMWUwIC0+IC0wDQorZHFxdWE1MTEgcXVhbnRpemUgIC0wICAgIDFlLTEgLT4gLTAuMA0KK2RxcXVhNTEyIHF1YW50aXplICAtMC4wICAxZS0xIC0+IC0wLjANCitkcXF1YTUxMyBxdWFudGl6ZSAgLTAuMCAgIDFlMCAtPiAtMA0KK2RxcXVhNTE0IHF1YW50aXplICAtMC4wICAxZSsxIC0+IC0wRSsxDQorZHFxdWE1MTUgcXVhbnRpemUgIC0wRSsxIDFlLTEgLT4gLTAuMA0KK2RxcXVhNTE2IHF1YW50aXplICAtMEUrMSAgMWUwIC0+IC0wDQorZHFxdWE1MTcgcXVhbnRpemUgIC0wRSsxIDFlKzEgLT4gLTBFKzENCistLSAjNTE5IGhlcmUgb25jZSBhIHByb2JsZW0NCitkcXF1YTUxOCBxdWFudGl6ZSAgMCAgICAwRS0zICAtPiAwLjAwMA0KK2RxcXVhNTE5IHF1YW50aXplICAwICAgIDBFLTMzIC0+IDBFLTMzDQorZHFxdWE1MjAgcXVhbnRpemUgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAwRS0zMyAtPiAwRS0zMw0KK2RxcXVhNTIxIHF1YW50aXplICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgMEUtMzMgLT4gMEUtMzMNCisNCistLSBTb21lIG5vbi16ZXJvcyB3aXRoIGxvdHMgb2YgcGFkZGluZyBvbiB0aGUgcmlnaHQNCitkcXF1YTUyMyBxdWFudGl6ZSAgIDEgICAwRS0zMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxcXVhNTI0IHF1YW50aXplICAxMiAgIDBFLTMyIC0+IDEyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFxdWE1MjUgcXVhbnRpemUgMTIzICAgMEUtMzEgLT4gMTIzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXF1YTUyNiBxdWFudGl6ZSAxMjMgICAwRS0zMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTUyNyBxdWFudGl6ZSAxMjMuNCAwRS0zMSAtPiAxMjMuNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxcXVhNTI4IHF1YW50aXplIDEyMy40IDBFLTMyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIFN1c3BpY2lvdXMgUkhTIHZhbHVlcw0KK2RxcXVhNTMwIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNTMxIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNTMyIHF1YW50aXplICAgMS4yMzQgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNTMzIHF1YW50aXplIDEyMy40NTYgICAgMWUzNTkgLT4gMEUrMzU5IEluZXhhY3QgUm91bmRlZA0KKy0tIG5leHQgZm91ciBhcmUgIndvbid0IGZpdCIgb3ZlcmZsb3dzDQorZHFxdWE1MzYgcXVhbnRpemUgICAxLjIzNCAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTUzNyBxdWFudGl6ZSAxMjMuNDU2ICAgMWUtMjk5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNTM4IHF1YW50aXplICAgMS4yMzQgICAxZS0yOTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE1MzkgcXVhbnRpemUgMTIzLjQ1NiAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcXF1YTU0MiBxdWFudGl6ZSAgIDEuMjM0RSsyOTkgICAgMWUyOTkgLT4gMUUrMjk5ICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNTQzIHF1YW50aXplICAgMS4yMzRFKzI5OCAgICAxZTI5OSAtPiAwRSsyOTkgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE1NDQgcXVhbnRpemUgICAxLjIzNCAgICAgICAgIDFlMjk5IC0+IDBFKzI5OSAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTU0NyBxdWFudGl6ZSAgIDAgICAgICAgICAgICAxZS0yOTkgLT4gMEUtMjk5DQorLS0gbmV4dCB0d28gYXJlICJ3b24ndCBmaXQiIG92ZXJmbG93cw0KK2RxcXVhNTQ4IHF1YW50aXplICAgMS4yMzQgICAgICAgIDFlLTI5OSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTU0OSBxdWFudGl6ZSAgIDEuMjM0ICAgICAgICAxZS0zMDAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gW21vcmUgYmVsb3ddDQorDQorLS0gU3BlY2lhbHMNCitkcXF1YTU4MCBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkcXF1YTU4MSBxdWFudGl6ZSAgSW5mICAxZS0yOTkgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNTgyIHF1YW50aXplICBJbmYgIDFlLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE1ODMgcXVhbnRpemUgIEluZiAgIDFlMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTU4NCBxdWFudGl6ZSAgSW5mICAgMWUxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNTg1IHF1YW50aXplICBJbmYgICAxZTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE1ODYgcXVhbnRpemUgIEluZiAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZHFxdWE1ODcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTU4OCBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQorZHFxdWE1ODkgcXVhbnRpemUgLTEgICAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTU5MCBxdWFudGl6ZSAgMCAgICAgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNTkxIHF1YW50aXplICAxICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE1OTIgcXVhbnRpemUgIDEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTU5MyBxdWFudGl6ZSAgSW5mICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitkcXF1YTU5NCBxdWFudGl6ZSAgSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNTk1IHF1YW50aXplIC0wICAgICAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFxdWE2MDAgcXVhbnRpemUgLUluZiAgICAtSW5mICAgLT4gIC1JbmZpbml0eQ0KK2RxcXVhNjAxIHF1YW50aXplIC1JbmYgIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2MDIgcXVhbnRpemUgLUluZiAgMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTYwMyBxdWFudGl6ZSAtSW5mICAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjA0IHF1YW50aXplIC1JbmYgICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2MDUgcXVhbnRpemUgLUluZiAgIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTYwNiBxdWFudGl6ZSAtSW5mICAgICBJbmYgICAtPiAgLUluZmluaXR5DQorZHFxdWE2MDcgcXVhbnRpemUgLTEwMDAgICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTYwOCBxdWFudGl6ZSAtSW5mICAgIC1JbmYgICAtPiAgLUluZmluaXR5DQorZHFxdWE2MDkgcXVhbnRpemUgLTEgICAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTYxMCBxdWFudGl6ZSAgMCAgICAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjExIHF1YW50aXplICAxICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2MTIgcXVhbnRpemUgIDEwMDAgICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTYxMyBxdWFudGl6ZSAgSW5mICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkcXF1YTYxNCBxdWFudGl6ZSAtSW5mICAxZS0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjE1IHF1YW50aXplIC0wICAgICAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFxdWE2MjEgcXVhbnRpemUgIE5hTiAgIC1JbmYgICAgLT4gIE5hTg0KK2RxcXVhNjIyIHF1YW50aXplICBOYU4gMWUtMjk5ICAgIC0+ICBOYU4NCitkcXF1YTYyMyBxdWFudGl6ZSAgTmFOIDFlLTEgICAgICAtPiAgTmFODQorZHFxdWE2MjQgcXVhbnRpemUgIE5hTiAgMWUwICAgICAgLT4gIE5hTg0KK2RxcXVhNjI1IHF1YW50aXplICBOYU4gIDFlMSAgICAgIC0+ICBOYU4NCitkcXF1YTYyNiBxdWFudGl6ZSAgTmFOICAxZTI5OSAgICAtPiAgTmFODQorZHFxdWE2MjcgcXVhbnRpemUgIE5hTiAgICBJbmYgICAgLT4gIE5hTg0KK2RxcXVhNjI4IHF1YW50aXplICBOYU4gICAgTmFOICAgIC0+ICBOYU4NCitkcXF1YTYyOSBxdWFudGl6ZSAtSW5mICAgIE5hTiAgICAtPiAgTmFODQorZHFxdWE2MzAgcXVhbnRpemUgLTEwMDAgICBOYU4gICAgLT4gIE5hTg0KK2RxcXVhNjMxIHF1YW50aXplIC0xICAgICAgTmFOICAgIC0+ICBOYU4NCitkcXF1YTYzMiBxdWFudGl6ZSAgMCAgICAgIE5hTiAgICAtPiAgTmFODQorZHFxdWE2MzMgcXVhbnRpemUgIDEgICAgICBOYU4gICAgLT4gIE5hTg0KK2RxcXVhNjM0IHF1YW50aXplICAxMDAwICAgTmFOICAgIC0+ICBOYU4NCitkcXF1YTYzNSBxdWFudGl6ZSAgSW5mICAgIE5hTiAgICAtPiAgTmFODQorZHFxdWE2MzYgcXVhbnRpemUgIE5hTiAxZS0wICAgICAgLT4gIE5hTg0KK2RxcXVhNjM3IHF1YW50aXplIC0wICAgICAgTmFOICAgIC0+ICBOYU4NCisNCitkcXF1YTY0MSBxdWFudGl6ZSAgc05hTiAgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjQyIHF1YW50aXplICBzTmFOIDFlLTI5OSAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NDMgcXVhbnRpemUgIHNOYU4gMWUtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY0NCBxdWFudGl6ZSAgc05hTiAgMWUwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjQ1IHF1YW50aXplICBzTmFOICAxZTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NDYgcXVhbnRpemUgIHNOYU4gIDFlMjk5ICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY0NyBxdWFudGl6ZSAgc05hTiAgICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjQ4IHF1YW50aXplICBzTmFOICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NDkgcXVhbnRpemUgIE5hTiAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY1MCBxdWFudGl6ZSAtSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjUxIHF1YW50aXplIC0xMDAwICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NTIgcXVhbnRpemUgLTEgICAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY1MyBxdWFudGl6ZSAgMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjU0IHF1YW50aXplICAxICAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NTUgcXVhbnRpemUgIDEwMDAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY1NiBxdWFudGl6ZSAgSW5mICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjU3IHF1YW50aXplICBOYU4gICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NTggcXVhbnRpemUgIHNOYU4gMWUtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY1OSBxdWFudGl6ZSAtMCAgICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcXF1YTY2MSBxdWFudGl6ZSAgTmFOOSAtSW5mICAgLT4gIE5hTjkNCitkcXF1YTY2MiBxdWFudGl6ZSAgTmFOOCAgOTE5ICAgLT4gIE5hTjgNCitkcXF1YTY2MyBxdWFudGl6ZSAgTmFONzEgSW5mICAgLT4gIE5hTjcxDQorZHFxdWE2NjQgcXVhbnRpemUgIE5hTjYgIE5hTjUgIC0+ICBOYU42DQorZHFxdWE2NjUgcXVhbnRpemUgLUluZiAgIE5hTjQgIC0+ICBOYU40DQorZHFxdWE2NjYgcXVhbnRpemUgLTkxOSAgIE5hTjMxIC0+ICBOYU4zMQ0KK2RxcXVhNjY3IHF1YW50aXplICBJbmYgICBOYU4yICAtPiAgTmFOMg0KKw0KK2RxcXVhNjcxIHF1YW50aXplICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY3MiBxdWFudGl6ZSAgc05hTjk4IC0xMSAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NzMgcXVhbnRpemUgIHNOYU45NyAgTmFOICAgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjc0IHF1YW50aXplICBzTmFOMTYgc05hTjk0ICAtPiAgTmFOMTYgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY3NSBxdWFudGl6ZSAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NzYgcXVhbnRpemUgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjc3IHF1YW50aXplICAwODggICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY3OCBxdWFudGl6ZSAgSW5mICAgIHNOYU45MCAgLT4gIE5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2NzkgcXVhbnRpemUgIE5hTiAgICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RxcXVhNjgxIHF1YW50aXplIC1OYU45IC1JbmYgICAtPiAtTmFOOQ0KK2RxcXVhNjgyIHF1YW50aXplIC1OYU44ICA5MTkgICAtPiAtTmFOOA0KK2RxcXVhNjgzIHF1YW50aXplIC1OYU43MSBJbmYgICAtPiAtTmFONzENCitkcXF1YTY4NCBxdWFudGl6ZSAtTmFONiAtTmFONSAgLT4gLU5hTjYNCitkcXF1YTY4NSBxdWFudGl6ZSAtSW5mICAtTmFONCAgLT4gLU5hTjQNCitkcXF1YTY4NiBxdWFudGl6ZSAtOTE5ICAtTmFOMzEgLT4gLU5hTjMxDQorZHFxdWE2ODcgcXVhbnRpemUgIEluZiAgLU5hTjIgIC0+IC1OYU4yDQorDQorZHFxdWE2OTEgcXVhbnRpemUgLXNOYU45OSAtSW5mICAgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjkyIHF1YW50aXplIC1zTmFOOTggLTExICAgICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY5MyBxdWFudGl6ZSAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2OTQgcXVhbnRpemUgLXNOYU4xNiBzTmFOOTQgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjk1IHF1YW50aXplIC1OYU45NSAtc05hTjkzICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY5NiBxdWFudGl6ZSAtSW5mICAgLXNOYU45MiAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorZHFxdWE2OTcgcXVhbnRpemUgIDA4OCAgIC1zTmFOOTEgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcXVhNjk4IHF1YW50aXplICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTY5OSBxdWFudGl6ZSAgTmFOICAgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQorZHFxdWE3MTAgcXVhbnRpemUgIDEuMDBFLTYxNDMgICAxZS02MTQzICAtPiAgIDFFLTYxNDMgICBSb3VuZGVkDQorZHFxdWE3MTEgcXVhbnRpemUgIDAuMUUtNjE0MyAgICAyZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwNCitkcXF1YTcxMiBxdWFudGl6ZSAgMC4xMEUtNjE0MyAgIDNlLTYxNDQgIC0+ICAgMUUtNjE0NCAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFxdWE3MTMgcXVhbnRpemUgIDAuMTAwRS02MTQzICA0ZS02MTQ0ICAtPiAgIDFFLTYxNDQgICBTdWJub3JtYWwgUm91bmRlZA0KK2RxcXVhNzE0IHF1YW50aXplICAwLjAxRS02MTQzICAgNWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCitkcXF1YTcxNSBxdWFudGl6ZSAgMC45OTlFLTYxNDMgIDFlLTYxNDMgIC0+ICAgMUUtNjE0MyAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNzE2IHF1YW50aXplICAwLjA5OUUtNjE0MyAxMGUtNjE0NCAgLT4gICAxRS02MTQ0ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KKw0KK2RxcXVhNzE3IHF1YW50aXplICAwLjAwOUUtNjE0MyAgMWUtNjE0NSAgLT4gICAxRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbA0KK2RxcXVhNzE4IHF1YW50aXplICAwLjAwMUUtNjE0MyAgMWUtNjE0NSAgLT4gICAwRS02MTQ1ICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE3MTkgcXVhbnRpemUgIDAuMDAwOUUtNjE0MyAxZS02MTQ1ICAtPiAgIDBFLTYxNDUgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTcyMCBxdWFudGl6ZSAgMC4wMDAxRS02MTQzIDFlLTYxNDUgIC0+ICAgMEUtNjE0NSAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhNzMwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0xRS02MTQzICAgICBSb3VuZGVkDQorZHFxdWE3MzEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIFJvdW5kZWQgSW5leGFjdA0KK2RxcXVhNzMyIHF1YW50aXplIC0wLjEwRS02MTQzICAgMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBSb3VuZGVkIEluZXhhY3QNCitkcXF1YTczMyBxdWFudGl6ZSAtMC4xMDBFLTYxNDMgIDFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgUm91bmRlZCBJbmV4YWN0DQorZHFxdWE3MzQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQorZHFxdWE3MzUgcXVhbnRpemUgLTAuOTk5RS02MTQzIDkwZS02MTQzICAtPiAgLTFFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNzM2IHF1YW50aXplIC0wLjA5OUUtNjE0MyAtMWUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTczNyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgLTFlLTYxNDMgIC0+ICAtMEUtNjE0MyAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE3MzggcXVhbnRpemUgLTAuMDAxRS02MTQzIC0wZS02MTQzICAtPiAgLTBFLTYxNDMgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNzM5IHF1YW50aXplIC0wLjAwMDFFLTYxNDMgMGUtNjE0MyAgLT4gIC0wRS02MTQzICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTc0MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBSb3VuZGVkDQorZHFxdWE3NDEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwNCitkcXF1YTc0MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFxdWE3NDMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ0IC0+ICAtMUUtNjE0NCAgICBTdWJub3JtYWwgUm91bmRlZA0KK2RxcXVhNzQ0IHF1YW50aXplIC0wLjAxRS02MTQzICAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIEVtaW4NCitkcXF1YTc0NSBxdWFudGl6ZSAtMC45OTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xLjBFLTYxNDMgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTc0NiBxdWFudGl6ZSAtMC4wOTlFLTYxNDMgIDFlLTYxNDQgLT4gIC0xRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwNCitkcXF1YTc0NyBxdWFudGl6ZSAtMC4wMDlFLTYxNDMgIDFlLTYxNDQgLT4gIC0wRS02MTQ0ICAgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhNzQ4IHF1YW50aXplIC0wLjAwMUUtNjE0MyAgMWUtNjE0NCAtPiAgLTBFLTYxNDQgICAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE3NDkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ0IC0+ICAtMEUtNjE0NCAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTc1MCBxdWFudGl6ZSAtMS4wMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjAwRS02MTQzDQorZHFxdWE3NTEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBTdWJub3JtYWwNCitkcXF1YTc1MiBxdWFudGl6ZSAtMC4xMEUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xLjBFLTYxNDQgIFN1Ym5vcm1hbA0KK2RxcXVhNzUzIHF1YW50aXplIC0wLjEwMEUtNjE0MyAgMWUtNjE0NSAtPiAgLTEuMEUtNjE0NCAgU3Vibm9ybWFsIFJvdW5kZWQNCitkcXF1YTc1NCBxdWFudGl6ZSAtMC4wMUUtNjE0MyAgIDFlLTYxNDUgLT4gIC0xRS02MTQ1ICAgIFN1Ym5vcm1hbA0KKy0tIG5leHQgaXMgcm91bmRlZCB0byBFbWluDQorZHFxdWE3NTUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wMEUtNjE0MyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWE3NTYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ1IC0+ICAtMS4wRS02MTQ0ICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQorZHFxdWE3NTcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ1IC0+ICAtMUUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsDQorZHFxdWE3NTggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ1IC0+ICAtMEUtNjE0NSAgICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTc1OSBxdWFudGl6ZSAtMC4wMDAxRS02MTQzIDFlLTYxNDUgLT4gIC0wRS02MTQ1ICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhNzYwIHF1YW50aXplIC0xLjAwRS02MTQzICAgMWUtNjE0NiAtPiAgLTEuMDAwRS02MTQzDQorZHFxdWE3NjEgcXVhbnRpemUgLTAuMUUtNjE0MyAgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQorZHFxdWE3NjIgcXVhbnRpemUgLTAuMTBFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQorZHFxdWE3NjMgcXVhbnRpemUgLTAuMTAwRS02MTQzICAxZS02MTQ2IC0+ICAtMS4wMEUtNjE0NCAgU3Vibm9ybWFsDQorZHFxdWE3NjQgcXVhbnRpemUgLTAuMDFFLTYxNDMgICAxZS02MTQ2IC0+ICAtMS4wRS02MTQ1ICAgU3Vibm9ybWFsDQorZHFxdWE3NjUgcXVhbnRpemUgLTAuOTk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45OUUtNjE0NCAgU3Vibm9ybWFsDQorZHFxdWE3NjYgcXVhbnRpemUgLTAuMDk5RS02MTQzICAxZS02MTQ2IC0+ICAtOS45RS02MTQ1ICAgU3Vibm9ybWFsDQorZHFxdWE3NjcgcXVhbnRpemUgLTAuMDA5RS02MTQzICAxZS02MTQ2IC0+ICAtOUUtNjE0NiAgICAgU3Vibm9ybWFsDQorZHFxdWE3NjggcXVhbnRpemUgLTAuMDAxRS02MTQzICAxZS02MTQ2IC0+ICAtMUUtNjE0NiAgICAgU3Vibm9ybWFsDQorZHFxdWE3NjkgcXVhbnRpemUgLTAuMDAwMUUtNjE0MyAxZS02MTQ2IC0+ICAtMEUtNjE0NiAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTW9yZSBmcm9tIEZ1bmcgTGVlDQorLS0gdGhlIG5leHQgZm91ciB3b3VsZCBhcHBlYXIgdG8gYmUgaW4gZXJyb3IsIGJ1dCB0aGV5IGFyZSBtaXNsZWFkaW5nICh0aGUNCistLSBvcGVyYW5kcyB3aWxsIGJlIGNsYW1wZWQgdG8gYSBsb3dlciBleHBvbmVudCkgYW5kIHNvIGFyZSBvbWl0dGVkDQorLS0gZHFxdWExMDIxIHF1YW50aXplICA4LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gIDguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQorLS0gZHFxdWExMDIyIHF1YW50aXplIC04LjY2NjY2NjY2NjY2NjAwMEUrNjE0NCAgMS4wMDAwMDAwMDAwMDAwMDBFKzYxNDQgLT4gLTguNjY2NjY2NjY2NjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQ0ICBDbGFtcGVkDQorLS0gZHFxdWExMDI3IHF1YW50aXplIDguNjY2NjY2NjY2NjY2MDAwRSszMjMgIDFFKzMxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGRxcXVhMTAzMCBxdWFudGl6ZSA4LjY2NjY2NjY2RSszICAgICAgICAgICAxRSszICAgICAtPiA5RSszIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zDQorZHFxdWExMDQwIHF1YW50aXplIC0yMTQ3NDgzNjQ2ICAgICAwIC0+IC0yMTQ3NDgzNjQ2DQorZHFxdWExMDQxIHF1YW50aXplIC0yMTQ3NDgzNjQ3ICAgICAwIC0+IC0yMTQ3NDgzNjQ3DQorZHFxdWExMDQyIHF1YW50aXplIC0yMTQ3NDgzNjQ4ICAgICAwIC0+IC0yMTQ3NDgzNjQ4DQorZHFxdWExMDQzIHF1YW50aXplIC0yMTQ3NDgzNjQ5ICAgICAwIC0+IC0yMTQ3NDgzNjQ5DQorZHFxdWExMDQ0IHF1YW50aXplICAyMTQ3NDgzNjQ2ICAgICAwIC0+ICAyMTQ3NDgzNjQ2DQorZHFxdWExMDQ1IHF1YW50aXplICAyMTQ3NDgzNjQ3ICAgICAwIC0+ICAyMTQ3NDgzNjQ3DQorZHFxdWExMDQ2IHF1YW50aXplICAyMTQ3NDgzNjQ4ICAgICAwIC0+ICAyMTQ3NDgzNjQ4DQorZHFxdWExMDQ3IHF1YW50aXplICAyMTQ3NDgzNjQ5ICAgICAwIC0+ICAyMTQ3NDgzNjQ5DQorZHFxdWExMDQ4IHF1YW50aXplICA0Mjk0OTY3Mjk0ICAgICAwIC0+ICA0Mjk0OTY3Mjk0DQorZHFxdWExMDQ5IHF1YW50aXplICA0Mjk0OTY3Mjk1ICAgICAwIC0+ICA0Mjk0OTY3Mjk1DQorZHFxdWExMDUwIHF1YW50aXplICA0Mjk0OTY3Mjk2ICAgICAwIC0+ICA0Mjk0OTY3Mjk2DQorZHFxdWExMDUxIHF1YW50aXplICA0Mjk0OTY3Mjk3ICAgICAwIC0+ICA0Mjk0OTY3Mjk3DQorDQorLS0gUm91bmRpbmcgc3dhdGhlDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2RxcXVhMTEwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkcXF1YTExMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTExMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl91cA0KK2RxcXVhMTIwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkcXF1YTEyMDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTEyMDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9kb3duDQorZHFxdWExMzAwIHF1YW50aXplICAxLjIzMDAgICAgMS4wMCAgICAtPiAgMS4yMyAgUm91bmRlZA0KK2RxcXVhMTMwMSBxdWFudGl6ZSAgMS4yMzAxICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwMiBxdWFudGl6ZSAgMS4yMzEwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwMyBxdWFudGl6ZSAgMS4yMzUwICAgIDEuMDAgICAgLT4gIDEuMjMgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwNCBxdWFudGl6ZSAgMS4yMzUxICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwNSBxdWFudGl6ZSAgMS4yNDUwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwNiBxdWFudGl6ZSAgMS4yNDUxICAgIDEuMDAgICAgLT4gIDEuMjUgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwNyBxdWFudGl6ZSAgMS4yMzYwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwOCBxdWFudGl6ZSAgMS4yMzcwICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTMwOSBxdWFudGl6ZSAgMS4yMzk5ICAgIDEuMDAgICAgLT4gIDEuMjQgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiB1cA0KK2RxcXVhMTQwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkcXF1YTE0MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE0MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2RxcXVhMTUwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkcXF1YTE1MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjIzICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE1MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogY2VpbGluZw0KK2RxcXVhMTYwMCBxdWFudGl6ZSAgMS4yMzAwICAgIDEuMDAgICAgLT4gIDEuMjMgIFJvdW5kZWQNCitkcXF1YTE2MDEgcXVhbnRpemUgIDEuMjMwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDIgcXVhbnRpemUgIDEuMjMxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDMgcXVhbnRpemUgIDEuMjM1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDQgcXVhbnRpemUgIDEuMjM1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDUgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDYgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDcgcXVhbnRpemUgIDEuMjM2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDggcXVhbnRpemUgIDEuMjM3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MDkgcXVhbnRpemUgIDEuMjM5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTE2MTEgcXVhbnRpemUgLTEuMjM5OSAgICAxLjAwICAgIC0+IC0xLjIzICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZmxvb3INCitkcXF1YTE3MDAgcXVhbnRpemUgIDEuMjMwMCAgICAxLjAwICAgIC0+ICAxLjIzICBSb3VuZGVkDQorZHFxdWExNzAxIHF1YW50aXplICAxLjIzMDEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzAyIHF1YW50aXplICAxLjIzMTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzAzIHF1YW50aXplICAxLjIzNTAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA0IHF1YW50aXplICAxLjIzNTEgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA1IHF1YW50aXplICAxLjI0NTAgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA2IHF1YW50aXplICAxLjI0NTEgICAgMS4wMCAgICAtPiAgMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA3IHF1YW50aXplICAxLjIzNjAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA4IHF1YW50aXplICAxLjIzNzAgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzA5IHF1YW50aXplICAxLjIzOTkgICAgMS4wMCAgICAtPiAgMS4yMyAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExNzExIHF1YW50aXplIC0xLjIzOTkgICAgMS4wMCAgICAtPiAtMS4yNCAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IDA1dXANCitkcXF1YTE4MDAgcXVhbnRpemUgIDEuMjAwMCAgICAxLjAwICAgIC0+ICAxLjIwICBSb3VuZGVkDQorZHFxdWExODAxIHF1YW50aXplICAxLjIwMDEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODAyIHF1YW50aXplICAxLjIwMTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODAzIHF1YW50aXplICAxLjIwNTAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODA0IHF1YW50aXplICAxLjIwNTEgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODA3IHF1YW50aXplICAxLjIwNjAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODA4IHF1YW50aXplICAxLjIwNzAgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODA5IHF1YW50aXplICAxLjIwOTkgICAgMS4wMCAgICAtPiAgMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWExODExIHF1YW50aXplIC0xLjIwOTkgICAgMS4wMCAgICAtPiAtMS4yMSAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWExOTAwIHF1YW50aXplICAxLjIxMDAgICAgMS4wMCAgICAtPiAgMS4yMSAgUm91bmRlZA0KK2RxcXVhMTkwMSBxdWFudGl6ZSAgMS4yMTAxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwMiBxdWFudGl6ZSAgMS4yMTEwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwMyBxdWFudGl6ZSAgMS4yMTUwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwNCBxdWFudGl6ZSAgMS4yMTUxICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwNyBxdWFudGl6ZSAgMS4yMTYwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwOCBxdWFudGl6ZSAgMS4yMTcwICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkwOSBxdWFudGl6ZSAgMS4yMTk5ICAgIDEuMDAgICAgLT4gIDEuMjEgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMTkxMSBxdWFudGl6ZSAtMS4yMTk5ICAgIDEuMDAgICAgLT4gLTEuMjEgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMjAwMCBxdWFudGl6ZSAgMS4yNDAwICAgIDEuMDAgICAgLT4gIDEuMjQgIFJvdW5kZWQNCitkcXF1YTIwMDEgcXVhbnRpemUgIDEuMjQwMSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDIgcXVhbnRpemUgIDEuMjQxMCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDMgcXVhbnRpemUgIDEuMjQ1MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDQgcXVhbnRpemUgIDEuMjQ1MSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDcgcXVhbnRpemUgIDEuMjQ2MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDggcXVhbnRpemUgIDEuMjQ3MCAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMDkgcXVhbnRpemUgIDEuMjQ5OSAgICAxLjAwICAgIC0+ICAxLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIwMTEgcXVhbnRpemUgLTEuMjQ5OSAgICAxLjAwICAgIC0+IC0xLjI0ICBJbmV4YWN0IFJvdW5kZWQNCisNCitkcXF1YTIxMDAgcXVhbnRpemUgIDEuMjUwMCAgICAxLjAwICAgIC0+ICAxLjI1ICBSb3VuZGVkDQorZHFxdWEyMTAxIHF1YW50aXplICAxLjI1MDEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTAyIHF1YW50aXplICAxLjI1MTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTAzIHF1YW50aXplICAxLjI1NTAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTA0IHF1YW50aXplICAxLjI1NTEgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTA3IHF1YW50aXplICAxLjI1NjAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTA4IHF1YW50aXplICAxLjI1NzAgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTA5IHF1YW50aXplICAxLjI1OTkgICAgMS4wMCAgICAtPiAgMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorZHFxdWEyMTExIHF1YW50aXplIC0xLjI1OTkgICAgMS4wMCAgICAtPiAtMS4yNiAgSW5leGFjdCBSb3VuZGVkDQorDQorZHFxdWEyMjAwIHF1YW50aXplICAxLjI2MDAgICAgMS4wMCAgICAtPiAgMS4yNiAgUm91bmRlZA0KK2RxcXVhMjIwMSBxdWFudGl6ZSAgMS4yNjAxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwMiBxdWFudGl6ZSAgMS4yNjEwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwMyBxdWFudGl6ZSAgMS4yNjUwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwNCBxdWFudGl6ZSAgMS4yNjUxICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwNyBxdWFudGl6ZSAgMS4yNjYwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwOCBxdWFudGl6ZSAgMS4yNjcwICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIwOSBxdWFudGl6ZSAgMS4yNjk5ICAgIDEuMDAgICAgLT4gIDEuMjYgIEluZXhhY3QgUm91bmRlZA0KK2RxcXVhMjIxMSBxdWFudGl6ZSAtMS4yNjk5ICAgIDEuMDAgICAgLT4gLTEuMjYgIEluZXhhY3QgUm91bmRlZA0KKw0KK2RxcXVhMjMwMCBxdWFudGl6ZSAgMS4yOTAwICAgIDEuMDAgICAgLT4gIDEuMjkgIFJvdW5kZWQNCitkcXF1YTIzMDEgcXVhbnRpemUgIDEuMjkwMSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDIgcXVhbnRpemUgIDEuMjkxMCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDMgcXVhbnRpemUgIDEuMjk1MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDQgcXVhbnRpemUgIDEuMjk1MSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDcgcXVhbnRpemUgIDEuMjk2MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDggcXVhbnRpemUgIDEuMjk3MCAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMDkgcXVhbnRpemUgIDEuMjk5OSAgICAxLjAwICAgIC0+ICAxLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitkcXF1YTIzMTEgcXVhbnRpemUgLTEuMjk5OSAgICAxLjAwICAgIC0+IC0xLjI5ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBOdWxsIHRlc3RzDQorZHFxdWE5OTggcXVhbnRpemUgMTAgICAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXF1YTk5OSBxdWFudGl6ZSAgIyAxZTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlZHVjZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKaW5kZXggNTYzNWU2Yi4uMjM2NTc0ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVkdWNlLmRlY1Rlc3QKQEAgLTEsMTgzICsxLDE4MyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjUXVhZCAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAzLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZHFyZWQwMDEgcmVkdWNlICcxJyAgICAgIC0+ICcxJwotZHFyZWQwMDIgcmVkdWNlICctMScgICAgIC0+ICctMScKLWRxcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScKLWRxcmVkMDA0IHJlZHVjZSAnLTEuMDAnICAtPiAnLTEnCi1kcXJlZDAwNSByZWR1Y2UgJzAnICAgICAgLT4gJzAnCi1kcXJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnCi1kcXJlZDAwNyByZWR1Y2UgJzAwLjAnICAgLT4gJzAnCi1kcXJlZDAwOCByZWR1Y2UgJzAwLjAwJyAgLT4gJzAnCi1kcXJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnCi1kcXJlZDAxMCByZWR1Y2UgJzBFKzEnICAgLT4gJzAnCi1kcXJlZDAxMSByZWR1Y2UgJzBFKzUnICAgLT4gJzAnCi0KLWRxcmVkMDEyIHJlZHVjZSAnLTInICAgICAtPiAnLTInCi1kcXJlZDAxMyByZWR1Y2UgJzInICAgICAgLT4gJzInCi1kcXJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJwotZHFyZWQwMTUgcmVkdWNlICcyLjAwJyAgIC0+ICcyJwotZHFyZWQwMTYgcmVkdWNlICctMCcgICAgIC0+ICctMCcKLWRxcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnCi1kcXJlZDAxOCByZWR1Y2UgJy0wMC4wJyAgLT4gJy0wJwotZHFyZWQwMTkgcmVkdWNlICctMDAuMDAnIC0+ICctMCcKLWRxcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnCi1kcXJlZDAyMSByZWR1Y2UgJy0wRSs1JyAgIC0+ICctMCcKLWRxcmVkMDIyIHJlZHVjZSAnLTBFKzEnICAtPiAnLTAnCi0KLWRxcmVkMDMwIHJlZHVjZSAnKzAuMScgICAgICAgICAgICAtPiAnMC4xJwotZHFyZWQwMzEgcmVkdWNlICctMC4xJyAgICAgICAgICAgIC0+ICctMC4xJwotZHFyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJwotZHFyZWQwMzMgcmVkdWNlICctMC4wMScgICAgICAgICAgIC0+ICctMC4wMScKLWRxcmVkMDM0IHJlZHVjZSAnKzAuMDAxJyAgICAgICAgICAtPiAnMC4wMDEnCi1kcXJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScKLWRxcmVkMDM2IHJlZHVjZSAnKzAuMDAwMDAxJyAgICAgICAtPiAnMC4wMDAwMDEnCi1kcXJlZDAzNyByZWR1Y2UgJy0wLjAwMDAwMScgICAgICAgLT4gJy0wLjAwMDAwMScKLWRxcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInCi1kcXJlZDAzOSByZWR1Y2UgJy0wLjAwMDAwMDAwMDAwMScgLT4gJy0xRS0xMicKLQotZHFyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xCi1kcXJlZDA0MiByZWR1Y2UgMS4xMCAgICAgICAtPiAxLjEKLWRxcmVkMDQzIHJlZHVjZSAxLjEwMCAgICAgIC0+IDEuMQotZHFyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQotZHFyZWQwNDUgcmVkdWNlIC0xLjEgICAgICAgLT4gLTEuMQotZHFyZWQwNDYgcmVkdWNlIC0xLjEwICAgICAgLT4gLTEuMQotZHFyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQotZHFyZWQwNDggcmVkdWNlIC0xLjExMCAgICAgLT4gLTEuMTEKLWRxcmVkMDQ5IHJlZHVjZSA5LjkgICAgICAgIC0+IDkuOQotZHFyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45Ci1kcXJlZDA1MSByZWR1Y2UgOS45MDAgICAgICAtPiA5LjkKLWRxcmVkMDUyIHJlZHVjZSA5Ljk5MCAgICAgIC0+IDkuOTkKLWRxcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkKLWRxcmVkMDU0IHJlZHVjZSAtOS45MCAgICAgIC0+IC05LjkKLWRxcmVkMDU1IHJlZHVjZSAtOS45MDAgICAgIC0+IC05LjkKLWRxcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5Ci0KLS0tIHNvbWUgdHJhaWxpbmcgZnJhY3Rpb25hbCB6ZXJvcyB3aXRoIHplcm9zIGluIHVuaXRzCi1kcXJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzEKLWRxcmVkMDYxIHJlZHVjZSAgMTAuMDAgICAgICAgLT4gMUUrMQotZHFyZWQwNjIgcmVkdWNlICAxMDAuMCAgICAgICAtPiAxRSsyCi1kcXJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzIKLWRxcmVkMDY0IHJlZHVjZSAgMS4xMDAwRSszICAgLT4gMS4xRSszCi1kcXJlZDA2NSByZWR1Y2UgIDEuMTAwMDBFKzMgIC0+IDEuMUUrMwotZHFyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQotZHFyZWQwNjcgcmVkdWNlIC0xMC4wMCAgICAgICAtPiAtMUUrMQotZHFyZWQwNjggcmVkdWNlIC0xMDAuMCAgICAgICAtPiAtMUUrMgotZHFyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMgotZHFyZWQwNzAgcmVkdWNlIC0xLjEwMDBFKzMgICAtPiAtMS4xRSszCi1kcXJlZDA3MSByZWR1Y2UgLTEuMTAwMDBFKzMgIC0+IC0xLjFFKzMKLQotLS0gc29tZSBpbnNpZ25pZmljYW50IHRyYWlsaW5nIHplcm9zIHdpdGggcG9zaXRpdmUgZXhwb25lbnQKLWRxcmVkMDgwIHJlZHVjZSAgMTBFKzEgICAgICAgLT4gMUUrMgotZHFyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszCi1kcXJlZDA4MiByZWR1Y2UgIDEuMEUrMiAgICAgIC0+IDFFKzIKLWRxcmVkMDgzIHJlZHVjZSAgMS4wRSszICAgICAgLT4gMUUrMwotZHFyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMKLWRxcmVkMDg1IHJlZHVjZSAgMS4wMEUrMyAgICAgLT4gMUUrMwotZHFyZWQwODYgcmVkdWNlICAxLjEwRSszICAgICAtPiAxLjFFKzMKLWRxcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzIKLWRxcmVkMDg4IHJlZHVjZSAtMTAwRSsxICAgICAgLT4gLTFFKzMKLWRxcmVkMDg5IHJlZHVjZSAtMS4wRSsyICAgICAgLT4gLTFFKzIKLWRxcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMKLWRxcmVkMDkxIHJlZHVjZSAtMS4xRSszICAgICAgLT4gLTEuMUUrMwotZHFyZWQwOTIgcmVkdWNlIC0xLjAwRSszICAgICAtPiAtMUUrMwotZHFyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszCi0KLS0tIHNvbWUgc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MsIHdlcmUgd2UgdG8gYmUgdHJpbW1pbmcKLWRxcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTEKLWRxcmVkMTAxIHJlZHVjZSAgMTAgICAgICAgICAgLT4gMUUrMQotZHFyZWQxMDIgcmVkdWNlICAxMC4gICAgICAgICAtPiAxRSsxCi1kcXJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExCi1kcXJlZDEwNCByZWR1Y2UgIDEuMEUrMSAgICAgIC0+IDFFKzEKLWRxcmVkMTA1IHJlZHVjZSAgMS4xMEUrMiAgICAgLT4gMS4xRSsyCi1kcXJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzIKLWRxcmVkMTA3IHJlZHVjZSAgMS4xMDBFKzMgICAgLT4gMS4xRSszCi1kcXJlZDEwOCByZWR1Y2UgIDEuMDAwRSszICAgIC0+IDFFKzMKLWRxcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNgotZHFyZWQxMTAgcmVkdWNlIC0xMSAgICAgICAgICAtPiAtMTEKLWRxcmVkMTExIHJlZHVjZSAtMTAgICAgICAgICAgLT4gLTFFKzEKLWRxcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzEKLWRxcmVkMTEzIHJlZHVjZSAtMS4xRSsxICAgICAgLT4gLTExCi1kcXJlZDExNCByZWR1Y2UgLTEuMEUrMSAgICAgIC0+IC0xRSsxCi1kcXJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzIKLWRxcmVkMTE2IHJlZHVjZSAtMS4wMEUrMiAgICAgLT4gLTFFKzIKLWRxcmVkMTE3IHJlZHVjZSAtMS4xMDBFKzMgICAgLT4gLTEuMUUrMwotZHFyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMwotZHFyZWQxMTkgcmVkdWNlIC0xLjAwMDAwRSs1ICAtPiAtMUUrNQotZHFyZWQxMjAgcmVkdWNlIC0xLjAwMDAwMEUrNiAtPiAtMUUrNgotZHFyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNwotZHFyZWQxMjIgcmVkdWNlIC0xMDAuMDAwMEUrNiAtPiAtMUUrOAotZHFyZWQxMjMgcmVkdWNlIC0xMDAwLjAwMEUrNiAtPiAtMUUrOQotZHFyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTAKLWRxcmVkMTI1IHJlZHVjZSAtMTAwMDAwLjBFKzYgLT4gLTFFKzExCi1kcXJlZDEyNiByZWR1Y2UgLTEwMDAwMDAuRSs2IC0+IC0xRSsxMgotCi0tLSBleGFtcGxlcyBmcm9tIGRlY0FyaXRoCi1kcXJlZDE0MCByZWR1Y2UgJzIuMScgICAgIC0+ICAnMi4xJwotZHFyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJwotZHFyZWQxNDIgcmVkdWNlICcxLjIwMCcgICAtPiAgJzEuMicKLWRxcmVkMTQzIHJlZHVjZSAnLTEyMCcgICAgLT4gICctMS4yRSsyJwotZHFyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicKLWRxcmVkMTQ1IHJlZHVjZSAnMC4wMCcgICAgLT4gICcwJwotCi0tLSBObWF4LCBObWluLCBOdGlueQotLS0gbm90ZSBvcmlnYW1pIGVmZmVjdCBvbiBzb21lIG9mIHRoZXNlCi1kcXJlZDE1MSByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxcmVkMTUyIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwCi1kcXJlZDE1MyByZWR1Y2UgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0ICAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQKLWRxcmVkMTU0IHJlZHVjZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAtPiAxRS02MTQzCi1kcXJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gMUUtNjE0MwotZHFyZWQxNTYgcmVkdWNlICAyLjAwMEUtNjE3MyAgICAgICAgICAgICAgIC0+IDJFLTYxNzMgICBTdWJub3JtYWwKLWRxcmVkMTU3IHJlZHVjZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAtPiAxRS02MTc2ICAgU3Vibm9ybWFsCi0KLWRxcmVkMTYxIHJlZHVjZSAgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAtPiAtMUUtNjE3NiAgU3Vibm9ybWFsCi1kcXJlZDE2MiByZWR1Y2UgIC0yLjAwMEUtNjE3MyAgICAgICAgICAgICAgLT4gLTJFLTYxNzMgIFN1Ym5vcm1hbAotZHFyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xRS02MTQzCi1kcXJlZDE2NCByZWR1Y2UgIC0xRS02MTQzICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNDMKLWRxcmVkMTY1IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwRSs2MTQwICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMEUrNjE0MAotZHFyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NAotZHFyZWQxNjcgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAotZHFyZWQxNjggcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NAotCi0KLS0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpCi1kcXJlZDgyMCByZWR1Y2UgJ0luZicgICAgLT4gJ0luZmluaXR5JwotZHFyZWQ4MjEgcmVkdWNlICctSW5mJyAgIC0+ICctSW5maW5pdHknCi1kcXJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTgotZHFyZWQ4MjMgcmVkdWNlICBzTmFOICAgIC0+ICBOYU4gICAgSW52YWxpZF9vcGVyYXRpb24KLWRxcmVkODI0IHJlZHVjZSAgIE5hTjEwMSAtPiAgTmFOMTAxCi1kcXJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbgotZHFyZWQ4MjcgcmVkdWNlICAtTmFOICAgIC0+IC1OYU4KLWRxcmVkODI4IHJlZHVjZSAtc05hTiAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQotZHFyZWQ4MzAgcmVkdWNlIC1zTmFOMDEwIC0+IC1OYU4xMCAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTnVsbCB0ZXN0Ci1kcXJlZDkwMCByZWR1Y2UgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcVJlZHVjZS5kZWNUZXN0IC0tIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBmcm9tIGEgZGVjUXVhZCAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMywgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KK2RxcmVkMDAxIHJlZHVjZSAnMScgICAgICAtPiAnMScNCitkcXJlZDAwMiByZWR1Y2UgJy0xJyAgICAgLT4gJy0xJw0KK2RxcmVkMDAzIHJlZHVjZSAnMS4wMCcgICAtPiAnMScNCitkcXJlZDAwNCByZWR1Y2UgJy0xLjAwJyAgLT4gJy0xJw0KK2RxcmVkMDA1IHJlZHVjZSAnMCcgICAgICAtPiAnMCcNCitkcXJlZDAwNiByZWR1Y2UgJzAuMDAnICAgLT4gJzAnDQorZHFyZWQwMDcgcmVkdWNlICcwMC4wJyAgIC0+ICcwJw0KK2RxcmVkMDA4IHJlZHVjZSAnMDAuMDAnICAtPiAnMCcNCitkcXJlZDAwOSByZWR1Y2UgJzAwJyAgICAgLT4gJzAnDQorZHFyZWQwMTAgcmVkdWNlICcwRSsxJyAgIC0+ICcwJw0KK2RxcmVkMDExIHJlZHVjZSAnMEUrNScgICAtPiAnMCcNCisNCitkcXJlZDAxMiByZWR1Y2UgJy0yJyAgICAgLT4gJy0yJw0KK2RxcmVkMDEzIHJlZHVjZSAnMicgICAgICAtPiAnMicNCitkcXJlZDAxNCByZWR1Y2UgJy0yLjAwJyAgLT4gJy0yJw0KK2RxcmVkMDE1IHJlZHVjZSAnMi4wMCcgICAtPiAnMicNCitkcXJlZDAxNiByZWR1Y2UgJy0wJyAgICAgLT4gJy0wJw0KK2RxcmVkMDE3IHJlZHVjZSAnLTAuMDAnICAtPiAnLTAnDQorZHFyZWQwMTggcmVkdWNlICctMDAuMCcgIC0+ICctMCcNCitkcXJlZDAxOSByZWR1Y2UgJy0wMC4wMCcgLT4gJy0wJw0KK2RxcmVkMDIwIHJlZHVjZSAnLTAwJyAgICAtPiAnLTAnDQorZHFyZWQwMjEgcmVkdWNlICctMEUrNScgICAtPiAnLTAnDQorZHFyZWQwMjIgcmVkdWNlICctMEUrMScgIC0+ICctMCcNCisNCitkcXJlZDAzMCByZWR1Y2UgJyswLjEnICAgICAgICAgICAgLT4gJzAuMScNCitkcXJlZDAzMSByZWR1Y2UgJy0wLjEnICAgICAgICAgICAgLT4gJy0wLjEnDQorZHFyZWQwMzIgcmVkdWNlICcrMC4wMScgICAgICAgICAgIC0+ICcwLjAxJw0KK2RxcmVkMDMzIHJlZHVjZSAnLTAuMDEnICAgICAgICAgICAtPiAnLTAuMDEnDQorZHFyZWQwMzQgcmVkdWNlICcrMC4wMDEnICAgICAgICAgIC0+ICcwLjAwMScNCitkcXJlZDAzNSByZWR1Y2UgJy0wLjAwMScgICAgICAgICAgLT4gJy0wLjAwMScNCitkcXJlZDAzNiByZWR1Y2UgJyswLjAwMDAwMScgICAgICAgLT4gJzAuMDAwMDAxJw0KK2RxcmVkMDM3IHJlZHVjZSAnLTAuMDAwMDAxJyAgICAgICAtPiAnLTAuMDAwMDAxJw0KK2RxcmVkMDM4IHJlZHVjZSAnKzAuMDAwMDAwMDAwMDAxJyAtPiAnMUUtMTInDQorZHFyZWQwMzkgcmVkdWNlICctMC4wMDAwMDAwMDAwMDEnIC0+ICctMUUtMTInDQorDQorZHFyZWQwNDEgcmVkdWNlIDEuMSAgICAgICAgLT4gMS4xDQorZHFyZWQwNDIgcmVkdWNlIDEuMTAgICAgICAgLT4gMS4xDQorZHFyZWQwNDMgcmVkdWNlIDEuMTAwICAgICAgLT4gMS4xDQorZHFyZWQwNDQgcmVkdWNlIDEuMTEwICAgICAgLT4gMS4xMQ0KK2RxcmVkMDQ1IHJlZHVjZSAtMS4xICAgICAgIC0+IC0xLjENCitkcXJlZDA0NiByZWR1Y2UgLTEuMTAgICAgICAtPiAtMS4xDQorZHFyZWQwNDcgcmVkdWNlIC0xLjEwMCAgICAgLT4gLTEuMQ0KK2RxcmVkMDQ4IHJlZHVjZSAtMS4xMTAgICAgIC0+IC0xLjExDQorZHFyZWQwNDkgcmVkdWNlIDkuOSAgICAgICAgLT4gOS45DQorZHFyZWQwNTAgcmVkdWNlIDkuOTAgICAgICAgLT4gOS45DQorZHFyZWQwNTEgcmVkdWNlIDkuOTAwICAgICAgLT4gOS45DQorZHFyZWQwNTIgcmVkdWNlIDkuOTkwICAgICAgLT4gOS45OQ0KK2RxcmVkMDUzIHJlZHVjZSAtOS45ICAgICAgIC0+IC05LjkNCitkcXJlZDA1NCByZWR1Y2UgLTkuOTAgICAgICAtPiAtOS45DQorZHFyZWQwNTUgcmVkdWNlIC05LjkwMCAgICAgLT4gLTkuOQ0KK2RxcmVkMDU2IHJlZHVjZSAtOS45OTAgICAgIC0+IC05Ljk5DQorDQorLS0gc29tZSB0cmFpbGluZyBmcmFjdGlvbmFsIHplcm9zIHdpdGggemVyb3MgaW4gdW5pdHMNCitkcXJlZDA2MCByZWR1Y2UgIDEwLjAgICAgICAgIC0+IDFFKzENCitkcXJlZDA2MSByZWR1Y2UgIDEwLjAwICAgICAgIC0+IDFFKzENCitkcXJlZDA2MiByZWR1Y2UgIDEwMC4wICAgICAgIC0+IDFFKzINCitkcXJlZDA2MyByZWR1Y2UgIDEwMC4wMCAgICAgIC0+IDFFKzINCitkcXJlZDA2NCByZWR1Y2UgIDEuMTAwMEUrMyAgIC0+IDEuMUUrMw0KK2RxcmVkMDY1IHJlZHVjZSAgMS4xMDAwMEUrMyAgLT4gMS4xRSszDQorZHFyZWQwNjYgcmVkdWNlIC0xMC4wICAgICAgICAtPiAtMUUrMQ0KK2RxcmVkMDY3IHJlZHVjZSAtMTAuMDAgICAgICAgLT4gLTFFKzENCitkcXJlZDA2OCByZWR1Y2UgLTEwMC4wICAgICAgIC0+IC0xRSsyDQorZHFyZWQwNjkgcmVkdWNlIC0xMDAuMDAgICAgICAtPiAtMUUrMg0KK2RxcmVkMDcwIHJlZHVjZSAtMS4xMDAwRSszICAgLT4gLTEuMUUrMw0KK2RxcmVkMDcxIHJlZHVjZSAtMS4xMDAwMEUrMyAgLT4gLTEuMUUrMw0KKw0KKy0tIHNvbWUgaW5zaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcyB3aXRoIHBvc2l0aXZlIGV4cG9uZW50DQorZHFyZWQwODAgcmVkdWNlICAxMEUrMSAgICAgICAtPiAxRSsyDQorZHFyZWQwODEgcmVkdWNlICAxMDBFKzEgICAgICAtPiAxRSszDQorZHFyZWQwODIgcmVkdWNlICAxLjBFKzIgICAgICAtPiAxRSsyDQorZHFyZWQwODMgcmVkdWNlICAxLjBFKzMgICAgICAtPiAxRSszDQorZHFyZWQwODQgcmVkdWNlICAxLjFFKzMgICAgICAtPiAxLjFFKzMNCitkcXJlZDA4NSByZWR1Y2UgIDEuMDBFKzMgICAgIC0+IDFFKzMNCitkcXJlZDA4NiByZWR1Y2UgIDEuMTBFKzMgICAgIC0+IDEuMUUrMw0KK2RxcmVkMDg3IHJlZHVjZSAtMTBFKzEgICAgICAgLT4gLTFFKzINCitkcXJlZDA4OCByZWR1Y2UgLTEwMEUrMSAgICAgIC0+IC0xRSszDQorZHFyZWQwODkgcmVkdWNlIC0xLjBFKzIgICAgICAtPiAtMUUrMg0KK2RxcmVkMDkwIHJlZHVjZSAtMS4wRSszICAgICAgLT4gLTFFKzMNCitkcXJlZDA5MSByZWR1Y2UgLTEuMUUrMyAgICAgIC0+IC0xLjFFKzMNCitkcXJlZDA5MiByZWR1Y2UgLTEuMDBFKzMgICAgIC0+IC0xRSszDQorZHFyZWQwOTMgcmVkdWNlIC0xLjEwRSszICAgICAtPiAtMS4xRSszDQorDQorLS0gc29tZSBzaWduaWZpY2FudCB0cmFpbGluZyB6ZXJvcywgd2VyZSB3ZSB0byBiZSB0cmltbWluZw0KK2RxcmVkMTAwIHJlZHVjZSAgMTEgICAgICAgICAgLT4gMTENCitkcXJlZDEwMSByZWR1Y2UgIDEwICAgICAgICAgIC0+IDFFKzENCitkcXJlZDEwMiByZWR1Y2UgIDEwLiAgICAgICAgIC0+IDFFKzENCitkcXJlZDEwMyByZWR1Y2UgIDEuMUUrMSAgICAgIC0+IDExDQorZHFyZWQxMDQgcmVkdWNlICAxLjBFKzEgICAgICAtPiAxRSsxDQorZHFyZWQxMDUgcmVkdWNlICAxLjEwRSsyICAgICAtPiAxLjFFKzINCitkcXJlZDEwNiByZWR1Y2UgIDEuMDBFKzIgICAgIC0+IDFFKzINCitkcXJlZDEwNyByZWR1Y2UgIDEuMTAwRSszICAgIC0+IDEuMUUrMw0KK2RxcmVkMTA4IHJlZHVjZSAgMS4wMDBFKzMgICAgLT4gMUUrMw0KK2RxcmVkMTA5IHJlZHVjZSAgMS4wMDAwMDBFKzYgLT4gMUUrNg0KK2RxcmVkMTEwIHJlZHVjZSAtMTEgICAgICAgICAgLT4gLTExDQorZHFyZWQxMTEgcmVkdWNlIC0xMCAgICAgICAgICAtPiAtMUUrMQ0KK2RxcmVkMTEyIHJlZHVjZSAtMTAuICAgICAgICAgLT4gLTFFKzENCitkcXJlZDExMyByZWR1Y2UgLTEuMUUrMSAgICAgIC0+IC0xMQ0KK2RxcmVkMTE0IHJlZHVjZSAtMS4wRSsxICAgICAgLT4gLTFFKzENCitkcXJlZDExNSByZWR1Y2UgLTEuMTBFKzIgICAgIC0+IC0xLjFFKzINCitkcXJlZDExNiByZWR1Y2UgLTEuMDBFKzIgICAgIC0+IC0xRSsyDQorZHFyZWQxMTcgcmVkdWNlIC0xLjEwMEUrMyAgICAtPiAtMS4xRSszDQorZHFyZWQxMTggcmVkdWNlIC0xLjAwMEUrMyAgICAtPiAtMUUrMw0KK2RxcmVkMTE5IHJlZHVjZSAtMS4wMDAwMEUrNSAgLT4gLTFFKzUNCitkcXJlZDEyMCByZWR1Y2UgLTEuMDAwMDAwRSs2IC0+IC0xRSs2DQorZHFyZWQxMjEgcmVkdWNlIC0xMC4wMDAwMEUrNiAtPiAtMUUrNw0KK2RxcmVkMTIyIHJlZHVjZSAtMTAwLjAwMDBFKzYgLT4gLTFFKzgNCitkcXJlZDEyMyByZWR1Y2UgLTEwMDAuMDAwRSs2IC0+IC0xRSs5DQorZHFyZWQxMjQgcmVkdWNlIC0xMDAwMC4wMEUrNiAtPiAtMUUrMTANCitkcXJlZDEyNSByZWR1Y2UgLTEwMDAwMC4wRSs2IC0+IC0xRSsxMQ0KK2RxcmVkMTI2IHJlZHVjZSAtMTAwMDAwMC5FKzYgLT4gLTFFKzEyDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KK2RxcmVkMTQwIHJlZHVjZSAnMi4xJyAgICAgLT4gICcyLjEnDQorZHFyZWQxNDEgcmVkdWNlICctMi4wJyAgICAtPiAgJy0yJw0KK2RxcmVkMTQyIHJlZHVjZSAnMS4yMDAnICAgLT4gICcxLjInDQorZHFyZWQxNDMgcmVkdWNlICctMTIwJyAgICAtPiAgJy0xLjJFKzInDQorZHFyZWQxNDQgcmVkdWNlICcxMjAuMDAnICAtPiAgJzEuMkUrMicNCitkcXJlZDE0NSByZWR1Y2UgJzAuMDAnICAgIC0+ICAnMCcNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KKy0tIG5vdGUgb3JpZ2FtaSBlZmZlY3Qgb24gc29tZSBvZiB0aGVzZQ0KK2RxcmVkMTUxIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2RxcmVkMTUyIHJlZHVjZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwDQorZHFyZWQxNTMgcmVkdWNlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NCAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwRSs2MTQ0DQorZHFyZWQxNTQgcmVkdWNlICAxRS02MTQzICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNDMNCitkcXJlZDE1NSByZWR1Y2UgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLT4gMUUtNjE0Mw0KK2RxcmVkMTU2IHJlZHVjZSAgMi4wMDBFLTYxNzMgICAgICAgICAgICAgICAtPiAyRS02MTczICAgU3Vibm9ybWFsDQorZHFyZWQxNTcgcmVkdWNlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgIC0+IDFFLTYxNzYgICBTdWJub3JtYWwNCisNCitkcXJlZDE2MSByZWR1Y2UgIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgLT4gLTFFLTYxNzYgIFN1Ym5vcm1hbA0KK2RxcmVkMTYyIHJlZHVjZSAgLTIuMDAwRS02MTczICAgICAgICAgICAgICAtPiAtMkUtNjE3MyAgU3Vibm9ybWFsDQorZHFyZWQxNjMgcmVkdWNlICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IC0xRS02MTQzDQorZHFyZWQxNjQgcmVkdWNlICAtMUUtNjE0MyAgICAgICAgICAgICAgICAgIC0+IC0xRS02MTQzDQorZHFyZWQxNjUgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwMDAwMDAwMDBFKzYxNDAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwRSs2MTQwDQorZHFyZWQxNjYgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMEUrNjE0NA0KK2RxcmVkMTY3IHJlZHVjZSAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0ICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQNCitkcXJlZDE2OCByZWR1Y2UgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFyZWQxNjkgcmVkdWNlICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NA0KKw0KKw0KKy0tIHNwZWNpYWxzIChyZWR1Y2UgZG9lcyBub3QgYWZmZWN0IHBheWxvYWQpDQorZHFyZWQ4MjAgcmVkdWNlICdJbmYnICAgIC0+ICdJbmZpbml0eScNCitkcXJlZDgyMSByZWR1Y2UgJy1JbmYnICAgLT4gJy1JbmZpbml0eScNCitkcXJlZDgyMiByZWR1Y2UgICBOYU4gICAgLT4gIE5hTg0KK2RxcmVkODIzIHJlZHVjZSAgc05hTiAgICAtPiAgTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZWQ4MjQgcmVkdWNlICAgTmFOMTAxIC0+ICBOYU4xMDENCitkcXJlZDgyNSByZWR1Y2UgIHNOYU4wMTAgLT4gIE5hTjEwICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVkODI3IHJlZHVjZSAgLU5hTiAgICAtPiAtTmFODQorZHFyZWQ4MjggcmVkdWNlIC1zTmFOICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlZDgyOSByZWR1Y2UgIC1OYU4xMDEgLT4gLU5hTjEwMQ0KK2RxcmVkODMwIHJlZHVjZSAtc05hTjAxMCAtPiAtTmFOMTAgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTnVsbCB0ZXN0DQorZHFyZWQ5MDAgcmVkdWNlICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKaW5kZXggMDkwZDNjZi4uYmFlOGVhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyLmRlY1Rlc3QKQEAgLTEsNTk3ICsxLDU5NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQotZHFyZW0wMDEgcmVtYWluZGVyICAxICAgICAxICAgIC0+ICAwCi1kcXJlbTAwMiByZW1haW5kZXIgIDIgICAgIDEgICAgLT4gIDAKLWRxcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQotZHFyZW0wMDQgcmVtYWluZGVyICAyICAgICAyICAgIC0+ICAwCi1kcXJlbTAwNSByZW1haW5kZXIgIDAgICAgIDEgICAgLT4gIDAKLWRxcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMAotZHFyZW0wMDcgcmVtYWluZGVyICAxICAgICAzICAgIC0+ICAxCi1kcXJlbTAwOCByZW1haW5kZXIgIDIgICAgIDMgICAgLT4gIDIKLWRxcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMAotCi1kcXJlbTAxMCByZW1haW5kZXIgIDIuNCAgIDEgICAgLT4gIDAuNAotZHFyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQKLWRxcmVtMDEyIHJlbWFpbmRlciAgLTIuNCAgMSAgICAtPiAgLTAuNAotZHFyZW0wMTMgcmVtYWluZGVyICAtMi40ICAtMSAgIC0+ICAtMC40Ci1kcXJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKLWRxcmVtMDE1IHJlbWFpbmRlciAgMi40MDAgMSAgICAtPiAgMC40MDAKLWRxcmVtMDE2IHJlbWFpbmRlciAgMi40ICAgMiAgICAtPiAgMC40Ci1kcXJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCi1kcXJlbTAxOCByZW1haW5kZXIgIDIuICAgIDIgICAgLT4gIDAKLWRxcmVtMDE5IHJlbWFpbmRlciAgMjAgICAgMjAgICAtPiAgMAotCi1kcXJlbTAyMCByZW1haW5kZXIgIDE4NyAgIDE4NyAgICAtPiAgMAotZHFyZW0wMjEgcmVtYWluZGVyICA1ICAgICAyICAgICAgLT4gIDEKLWRxcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjAKLWRxcmVtMDIzIHJlbWFpbmRlciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAotZHFyZW0wMjQgcmVtYWluZGVyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwCi1kcXJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDAKLQotZHFyZW0wMzAgcmVtYWluZGVyICAxICAgICAyICAgICAgLT4gIDEKLWRxcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxCi1kcXJlbTAzMiByZW1haW5kZXIgIDEgICAgIDggICAgICAtPiAgMQotCi1kcXJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQotZHFyZW0wMzQgcmVtYWluZGVyICAxICAgICAzMiAgICAgLT4gIDEKLWRxcmVtMDM1IHJlbWFpbmRlciAgMSAgICAgNjQgICAgIC0+ICAxCi1kcXJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQotZHFyZW0wNDEgcmVtYWluZGVyICAxICAgIC00ICAgICAgLT4gIDEKLWRxcmVtMDQyIHJlbWFpbmRlciAgMSAgICAtOCAgICAgIC0+ICAxCi1kcXJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQotZHFyZW0wNDQgcmVtYWluZGVyICAxICAgIC0zMiAgICAgLT4gIDEKLWRxcmVtMDQ1IHJlbWFpbmRlciAgMSAgICAtNjQgICAgIC0+ICAxCi1kcXJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTEKLWRxcmVtMDUxIHJlbWFpbmRlciAtMSAgICAgNCAgICAgIC0+ICAtMQotZHFyZW0wNTIgcmVtYWluZGVyIC0xICAgICA4ICAgICAgLT4gIC0xCi1kcXJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTEKLWRxcmVtMDU0IHJlbWFpbmRlciAtMSAgICAgMzIgICAgIC0+ICAtMQotZHFyZW0wNTUgcmVtYWluZGVyIC0xICAgICA2NCAgICAgLT4gIC0xCi1kcXJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTEKLWRxcmVtMDYxIHJlbWFpbmRlciAtMSAgICAtNCAgICAgIC0+ICAtMQotZHFyZW0wNjIgcmVtYWluZGVyIC0xICAgIC04ICAgICAgLT4gIC0xCi1kcXJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTEKLWRxcmVtMDY0IHJlbWFpbmRlciAtMSAgICAtMzIgICAgIC0+ICAtMQotZHFyZW0wNjUgcmVtYWluZGVyIC0xICAgIC02NCAgICAgLT4gIC0xCi0KLWRxcmVtMDY2IHJlbWFpbmRlciAgOTk5OTk5OTk5ICAgICAxICAtPiAwCi1kcXJlbTA2NyByZW1haW5kZXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40Ci1kcXJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41Ci1kcXJlbTA2OSByZW1haW5kZXIgIDk5OTk5OTk5OS45ICAgMSAgLT4gMC45Ci1kcXJlbTA3MCByZW1haW5kZXIgIDk5OTk5OTk5OS45OTkgMSAgLT4gMC45OTkKLWRxcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQotZHFyZW0wNzIgcmVtYWluZGVyICA5ICAgICAgICAgICAgIDEgIC0+IDAKLQotZHFyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDAKLWRxcmVtMDgxIHJlbWFpbmRlciAgLjAgICAgICAgICAgICAxICAtPiAwLjAKLWRxcmVtMDgyIHJlbWFpbmRlciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCi1kcXJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMAotZHFyZW0wODQgcmVtYWluZGVyICAwLjAwRSszICAgICAgIDEgIC0+IDAKLWRxcmVtMDg1IHJlbWFpbmRlciAgMC4wMEUrMiAgICAgICAxICAtPiAwCi1kcXJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wCi1kcXJlbTA4NyByZW1haW5kZXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMAotZHFyZW0wODggcmVtYWluZGVyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKLWRxcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMAotZHFyZW0wOTAgcmVtYWluZGVyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMAotZHFyZW0wOTEgcmVtYWluZGVyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKLWRxcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMAotZHFyZW0wOTMgcmVtYWluZGVyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcKLWRxcmVtMDk0IHJlbWFpbmRlciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04Ci1kcXJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQKLQotLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMAotZHFyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJlbTEwMiByZW1haW5kZXIgIDAgICAgICAtMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxcmVtMTAzIHJlbWFpbmRlciAtMCAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJlbTEwNSByZW1haW5kZXIgIDAuMEU1ICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxcmVtMTA2IHJlbWFpbmRlciAgMC4wMDAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0Ci0tLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcgotLS0gcmVtYWluZGVyLW5lYXIsIGFueXdheV0KLWRxcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTEwOCByZW1haW5kZXIgIDAuMDEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW0xMDkgcmVtYWluZGVyICAwLjEgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTExMSByZW1haW5kZXIgIDEgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW0xMTIgcmVtYWluZGVyIDEwICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTExNCByZW1haW5kZXIgMUUrMzgwICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW0xMTUgcmVtYWluZGVyICAwLjAwMDEgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTExOSByZW1haW5kZXIgIDAuMSAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW0xMjAgcmVtYWluZGVyICAxICAgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTEyMiByZW1haW5kZXIgMTAgICAgICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW0xMjMgcmVtYWluZGVyIDFFKzEwMCAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhbmQgemVyb3Mgb24gbGVmdAotZHFyZW0xMzAgcmVtYWluZGVyICAwICAgICAgMSAgIC0+ICAwCi1kcXJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDAKLWRxcmVtMTMyIHJlbWFpbmRlciAgMC4wICAgIDEgICAtPiAgMC4wCi1kcXJlbTEzMyByZW1haW5kZXIgIDAuMCAgIC0xICAgLT4gIDAuMAotZHFyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wCi1kcXJlbTEzNSByZW1haW5kZXIgLTAgICAgIC0xICAgLT4gLTAKLWRxcmVtMTM2IHJlbWFpbmRlciAtMC4wICAgIDEgICAtPiAtMC4wCi1kcXJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMAotCi0tLSAwLjVlcnMKLWRxcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQotZHFyZW0xNDQgcmVtYWluZGVyICAgMC41ICAyLjEgICAtPiAgMC41Ci1kcXJlbTE0NSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwCi1kcXJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAotZHFyZW0xNDcgcmVtYWluZGVyICAgMC41MCAyICAgICAtPiAgMC41MAotZHFyZW0xNDggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MAotZHFyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKLQotLS0gc3RlYWRpZXMKLWRxcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKLWRxcmVtMTUxIHJlbWFpbmRlciAgMSAgMiAgIC0+IDEKLWRxcmVtMTUyIHJlbWFpbmRlciAgMSAgMyAgIC0+IDEKLWRxcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDEKLWRxcmVtMTU0IHJlbWFpbmRlciAgMSAgNSAgIC0+IDEKLWRxcmVtMTU1IHJlbWFpbmRlciAgMSAgNiAgIC0+IDEKLWRxcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDEKLWRxcmVtMTU3IHJlbWFpbmRlciAgMSAgOCAgIC0+IDEKLWRxcmVtMTU4IHJlbWFpbmRlciAgMSAgOSAgIC0+IDEKLWRxcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDEKLWRxcmVtMTYwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDAKLWRxcmVtMTYxIHJlbWFpbmRlciAgMiAgMSAgIC0+IDAKLWRxcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDAKLWRxcmVtMTYzIHJlbWFpbmRlciAgNCAgMSAgIC0+IDAKLWRxcmVtMTY0IHJlbWFpbmRlciAgNSAgMSAgIC0+IDAKLWRxcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDAKLWRxcmVtMTY2IHJlbWFpbmRlciAgNyAgMSAgIC0+IDAKLWRxcmVtMTY3IHJlbWFpbmRlciAgOCAgMSAgIC0+IDAKLWRxcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDAKLWRxcmVtMTY5IHJlbWFpbmRlciAgMTAgMSAgIC0+IDAKLQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXIKLWRxcmVtMTcxIHJlbWFpbmRlciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwCi1kcXJlbTE3MiByZW1haW5kZXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAotZHFyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTAKLWRxcmVtMTc0IHJlbWFpbmRlciAgIDAuNTIgMS4wMjAgLT4gIDAuNTIwCi1kcXJlbTE3NSByZW1haW5kZXIgICAwLjYgIDEuMDIwIC0+ICAwLjYwMAotCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwCi1kcXJlbTIwMSByZW1haW5kZXIgIDAgICAgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxcmVtMjAzIHJlbWFpbmRlciAgMC4wMDAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJlbTIwNCByZW1haW5kZXIgIDAuMDAwMSAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIwNiByZW1haW5kZXIgIDAuMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIwNyByZW1haW5kZXIgIDEgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIwOSByZW1haW5kZXIgMTAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIxMCByZW1haW5kZXIgMUUrMTAwICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHNvbWUgZGlmZmVyZW5jZXMgZnJvbSByZW1haW5kZXJOZWFyCi1kcXJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMAotZHFyZW0yMzIgcmVtYWluZGVyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKLWRxcmVtMjMzIHJlbWFpbmRlciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwCi1kcXJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMAotZHFyZW0yMzUgcmVtYWluZGVyICAtMC42ICAxLjAyMCAtPiAtMC42MDAKLQotLS0gaGlnaCBYcwotZHFyZW0yNDAgcmVtYWluZGVyICAxRSsyICAxLjAwICAtPiAgMC4wMAotCi0tLSBkcXJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbAotZHFyZW0zMDEgcmVtYWluZGVyICAgMSAgICAzICAgICAtPiAgMQotZHFyZW0zMDIgcmVtYWluZGVyICAgNSAgICA1ICAgICAtPiAgMAotZHFyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMwotZHFyZW0zMDQgcmVtYWluZGVyICAgMTMgICA1MCAgICAtPiAgMTMKLWRxcmVtMzA1IHJlbWFpbmRlciAgIDEzICAgMTAwICAgLT4gIDEzCi1kcXJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMwotZHFyZW0zMDcgcmVtYWluZGVyICAgLjEzICAgIDEgICAtPiAgMC4xMwotZHFyZW0zMDggcmVtYWluZGVyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKLWRxcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMwotZHFyZW0zMTAgcmVtYWluZGVyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMKLWRxcmVtMzExIHJlbWFpbmRlciAgIDEwLjMzICAxICAgLT4gIDAuMzMKLWRxcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMKLWRxcmVtMzEzIHJlbWFpbmRlciAgIDEwMy4zICAxICAgLT4gIDAuMwotZHFyZW0zMTQgcmVtYWluZGVyICAgMTMzICAgMTAgICAtPiAgMwotZHFyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMwotZHFyZW0zMTYgcmVtYWluZGVyICAgMTAzMyAgNTAgICAtPiAgMzMKLWRxcmVtMzE3IHJlbWFpbmRlciAgIDEwMS4wICAzICAgLT4gIDIuMAotZHFyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wCi1kcXJlbTMxOSByZW1haW5kZXIgICAxMDMuMCAgMyAgIC0+ICAxLjAKLWRxcmVtMzIwIHJlbWFpbmRlciAgIDIuNDAgICAxICAgLT4gIDAuNDAKLWRxcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwCi1kcXJlbTMyMiByZW1haW5kZXIgICAyLjQgICAgMSAgIC0+ICAwLjQKLWRxcmVtMzIzIHJlbWFpbmRlciAgIDIuNCAgICAyICAgLT4gIDAuNAotZHFyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDAKLWRxcmVtMzI1IHJlbWFpbmRlciAgIDEgICAwLjMgICAgLT4gIDAuMQotZHFyZW0zMjYgcmVtYWluZGVyICAgMSAgIDAuMzAgICAtPiAgMC4xMAotZHFyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDAKLWRxcmVtMzI4IHJlbWFpbmRlciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMAotZHFyZW0zMjkgcmVtYWluZGVyICAgMS4wICAgIDAuMyAtPiAgMC4xCi1kcXJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwCi1kcXJlbTMzMSByZW1haW5kZXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMAotZHFyZW0zMzIgcmVtYWluZGVyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCi1kcXJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUKLWRxcmVtMzM0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQotZHFyZW0zMzUgcmVtYWluZGVyICAgMC41ICAyLjAxICAtPiAgMC41MAotZHFyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDAKLWRxcmVtMzM3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKLWRxcmVtMzM4IHJlbWFpbmRlciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKLWRxcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwCi0KLWRxcmVtMzQwIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMSAgICAtPiAgMC41MDAwMDAwCi1kcXJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwCi1kcXJlbTM0MiByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAKLWRxcmVtMzQzIHJlbWFpbmRlciAgIDAuNSAgIDAuNTAwMDAwMDAwMSAgICAtPiAgMC41MDAwMDAwMDAwCi1kcXJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwCi1kcXJlbTM0NSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKLWRxcmVtMzQ2IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgKLWRxcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05Ci1kcXJlbTM0OCByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCi1kcXJlbTM0OSByZW1haW5kZXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQotZHFyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyCi0KLWRxcmVtMzUxIHJlbWFpbmRlciAgIDAuMDMgIDcgIC0+ICAwLjAzCi1kcXJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQotZHFyZW0zNTMgcmVtYWluZGVyICAgNC4xICAgMiAgICAtPiAgMC4xCi1kcXJlbTM1NCByZW1haW5kZXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQotZHFyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQotZHFyZW0zNTYgcmVtYWluZGVyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxCi1kcXJlbTM1NyByZW1haW5kZXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQotZHFyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQotZHFyZW0zNTkgcmVtYWluZGVyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNwotCi1kcXJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQotZHFyZW0zNjEgcmVtYWluZGVyICAgMC44ICAgMTIgICAgIC0+ICAwLjgKLWRxcmVtMzYyIHJlbWFpbmRlciAgIDAuOCAgIDAuMiAgICAtPiAgMC4wCi1kcXJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMgotZHFyZW0zNjQgcmVtYWluZGVyICAgMC44MDAgICAxMiAgIC0+ICAwLjgwMAotZHFyZW0zNjUgcmVtYWluZGVyICAgMC44MDAgICAxLjcgIC0+ICAwLjgwMAotZHFyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAotCi1kcXJlbTM3MSByZW1haW5kZXIgICAyLjQwMCAgMiAgICAgICAgLT4gIDAuNDAwCi0KLWRxcmVtMzgxIHJlbWFpbmRlciAxMjM0NSAgMSAgICAgICAgIC0+ICAwCi1kcXJlbTM4MiByZW1haW5kZXIgMTIzNDUgIDEuMDAwMSAgICAtPiAgMC43NjU3Ci1kcXJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgKLWRxcmVtMzg0IHJlbWFpbmRlciAxMjM0NSAgMS4wMSAgICAgIC0+ICAwLjc4Ci1kcXJlbTM4NSByZW1haW5kZXIgMTIzNDUgIDEuMSAgICAgICAtPiAgMC44Ci1kcXJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMwotZHFyZW0zODcgcmVtYWluZGVyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDEKLWRxcmVtMzg4IHJlbWFpbmRlciAxMjM1NSAgNC4wMDAxICAgIC0+ICAyLjY5MTIKLWRxcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKLWRxcmVtMzkwIHJlbWFpbmRlciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkKLWRxcmVtMzkxIHJlbWFpbmRlciAxMjM0NSAgNC45OSAgICAgIC0+ICA0LjczCi1kcXJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKLWRxcmVtMzkzIHJlbWFpbmRlciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkKLWRxcmVtMzk0IHJlbWFpbmRlciAxMjM0NSAgNSAgICAgICAgIC0+ICAwCi1kcXJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyCi1kcXJlbTM5NiByZW1haW5kZXIgMTIzNDUgIDUuMDAxICAgICAtPiAgMi41MzIKLWRxcmVtMzk3IHJlbWFpbmRlciAxMjM0NSAgNS4wMSAgICAgIC0+ICAwLjM2Ci1kcXJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wCi0KLS0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCi1kcXJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQotZHFyZW00MDIgcmVtYWluZGVyICAgMC41NSAgICAgICAgMSAgIC0+ICAwLjU1Ci1kcXJlbTQwMyByZW1haW5kZXIgICAwLjU1NSAgICAgICAxICAgLT4gIDAuNTU1Ci1kcXJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQotZHFyZW00MDUgcmVtYWluZGVyICAgMC41NTU1NSAgICAgMSAgIC0+ICAwLjU1NTU1Ci1kcXJlbTQwNiByZW1haW5kZXIgICAwLjU1NTU1NSAgICAxICAgLT4gIDAuNTU1NTU1Ci1kcXJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQotZHFyZW00MDggcmVtYWluZGVyICAgMC41NTU1NTU1NSAgMSAgIC0+ICAwLjU1NTU1NTU1Ci1kcXJlbTQwOSByZW1haW5kZXIgICAwLjU1NTU1NTU1NSAxICAgLT4gIDAuNTU1NTU1NTU1Ci0KLS0tIGZvbGRkb3ducwotZHFyZW00MjEgcmVtYWluZGVyICAgMUUrNjE0NCAgICAgICAgMSAgLT4gICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFyZW00MjIgcmVtYWluZGVyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQKLWRxcmVtNDIzIHJlbWFpbmRlciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCi1kcXJlbTQyNCByZW1haW5kZXIgICAxRSs2MTQ0ICAzRSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAotZHFyZW00MjUgcmVtYWluZGVyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKLWRxcmVtNDI2IHJlbWFpbmRlciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCi1kcXJlbTQyNyByZW1haW5kZXIgICAxRSs2MTQ0ICA2RSs2MTQzICAtPiAgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAotZHFyZW00MjggcmVtYWluZGVyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKLWRxcmVtNDI5IHJlbWFpbmRlciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCi1kcXJlbTQzMCByZW1haW5kZXIgICAxRSs2MTQ0ICA5RSs2MTQzICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAotLS0gdGluaWVzCi1kcXJlbTQzMSByZW1haW5kZXIgICAxRS02MTc1ICAxRS02MTc2ICAtPiAgIDBFLTYxNzYKLWRxcmVtNDMyIHJlbWFpbmRlciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgotZHFyZW00MzMgcmVtYWluZGVyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAotZHFyZW00MzQgcmVtYWluZGVyICAgMUUtNjE3NSAgNEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbAotZHFyZW00MzUgcmVtYWluZGVyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2Ci1kcXJlbTQzNiByZW1haW5kZXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgIDRFLTYxNzYgU3Vibm9ybWFsCi1kcXJlbTQzNyByZW1haW5kZXIgICAxRS02MTc1ICA3RS02MTc2ICAtPiAgIDNFLTYxNzYgU3Vibm9ybWFsCi1kcXJlbTQzOCByZW1haW5kZXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCi1kcXJlbTQzOSByZW1haW5kZXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsCi1kcXJlbTQ0MCByZW1haW5kZXIgICAxRS02MTc1IDEwRS02MTc2ICAtPiAgIDBFLTYxNzYKLWRxcmVtNDQxIHJlbWFpbmRlciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKLWRxcmVtNDQyIHJlbWFpbmRlciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKLWRxcmVtNDQzIHJlbWFpbmRlciAxMDBFLTYxNzUgMjBFLTYxNzYgIC0+ICAgMEUtNjE3NgotZHFyZW00NDQgcmVtYWluZGVyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gMS4zRS02MTc1IFN1Ym5vcm1hbAotZHFyZW00NDUgcmVtYWluZGVyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbAotCi0tLSB6ZXJvIHNpZ25zCi1kcXJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDAKLWRxcmVtNjUxIHJlbWFpbmRlciAtMSAgMSAtPiAtMAotZHFyZW02NTIgcmVtYWluZGVyICAxIC0xIC0+ICAwCi1kcXJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTAKLWRxcmVtNjU0IHJlbWFpbmRlciAgMCAgMSAtPiAgMAotZHFyZW02NTUgcmVtYWluZGVyIC0wICAxIC0+IC0wCi1kcXJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDAKLWRxcmVtNjU3IHJlbWFpbmRlciAtMCAtMSAtPiAtMAotZHFyZW02NTggcmVtYWluZGVyICAwLjAwICAxICAtPiAgMC4wMAotZHFyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMAotCi0tLSBTcGVjaWFscwotZHFyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTY4MSByZW1haW5kZXIgIEluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNjgyIHJlbWFpbmRlciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTY4NCByZW1haW5kZXIgIEluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNjg1IHJlbWFpbmRlciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTY4NyByZW1haW5kZXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNjg4IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKLWRxcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW02OTEgcmVtYWluZGVyIC0xICAgICBJbmYgICAtPiAtMQotZHFyZW02OTIgcmVtYWluZGVyICAwICAgICBJbmYgICAtPiAgMAotZHFyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMAotZHFyZW02OTQgcmVtYWluZGVyICAxICAgICBJbmYgICAtPiAgMQotZHFyZW02OTUgcmVtYWluZGVyICAxMDAwICBJbmYgICAtPiAgMTAwMAotZHFyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxcmVtNzAwIHJlbWFpbmRlciAtSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTcwMiByZW1haW5kZXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNzAzIHJlbWFpbmRlciAtSW5mICAtMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTcwNSByZW1haW5kZXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNzA2IHJlbWFpbmRlciAtSW5mICAgMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTcwOCByZW1haW5kZXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNzA5IHJlbWFpbmRlciAtMTAwMCAgSW5mICAgLT4gLTEwMDAKLWRxcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTEKLWRxcmVtNzExIHJlbWFpbmRlciAtMCAgICAtSW5mICAgLT4gLTAKLWRxcmVtNzEyIHJlbWFpbmRlciAgMCAgICAtSW5mICAgLT4gIDAKLWRxcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDEKLWRxcmVtNzE0IHJlbWFpbmRlciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKLWRxcmVtNzE1IHJlbWFpbmRlciAgSW5mICAtSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXJlbTcyMSByZW1haW5kZXIgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRxcmVtNzIyIHJlbWFpbmRlciAgTmFOIC0xMDAwICAgLT4gIE5hTgotZHFyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFOCi1kcXJlbTcyNCByZW1haW5kZXIgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRxcmVtNzI1IHJlbWFpbmRlciAtTmFOICAwICAgICAgLT4gLU5hTgotZHFyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFOCi1kcXJlbTcyNyByZW1haW5kZXIgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRxcmVtNzI4IHJlbWFpbmRlciAgTmFOICBJbmYgICAgLT4gIE5hTgotZHFyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFOCi1kcXJlbTczMCByZW1haW5kZXIgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRxcmVtNzMxIHJlbWFpbmRlciAtMTAwMCBOYU4gICAgLT4gIE5hTgotZHFyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFOCi1kcXJlbTczMyByZW1haW5kZXIgLTAgICAtTmFOICAgIC0+IC1OYU4KLWRxcmVtNzM0IHJlbWFpbmRlciAgMCAgICBOYU4gICAgLT4gIE5hTgotZHFyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFOCi1kcXJlbTczNiByZW1haW5kZXIgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRxcmVtNzM3IHJlbWFpbmRlciAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kcXJlbTc0MSByZW1haW5kZXIgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0MiByZW1haW5kZXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0NCByZW1haW5kZXIgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0NSByZW1haW5kZXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0NyByZW1haW5kZXIgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc0OSByZW1haW5kZXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1MSByZW1haW5kZXIgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1MiByZW1haW5kZXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1NCByZW1haW5kZXIgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1NSByZW1haW5kZXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1NyByZW1haW5kZXIgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1OCByZW1haW5kZXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2luZyBOYU5zCi1kcXJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjEKLWRxcmVtNzYxIHJlbWFpbmRlciBzTmFOMiAgIE5hTjggICAtPiAgTmFOMiBJbnZhbGlkX29wZXJhdGlvbgotZHFyZW03NjIgcmVtYWluZGVyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24KLWRxcmVtNzY0IHJlbWFpbmRlciAgICAxNSAgIE5hTjExICAtPiAgTmFOMTEKLWRxcmVtNzY1IHJlbWFpbmRlciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgotZHFyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMwotZHFyZW03NjcgcmVtYWluZGVyICBOYU4xNCAgLUluZiAgIC0+ICBOYU4xNAotZHFyZW03NjggcmVtYWluZGVyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQotZHFyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNgotCi0tLSBlZGdlIGNhc2VzIG9mIGltcG9zc2libGUKLWRxcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgIDEwICAgIC0+ICA2Ci1kcXJlbTc3MSAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAotZHFyZW03NzIgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDAuMSAgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcXJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLQotLS0gbG9uZyBvcGVyYW5kIGNoZWNrcwotZHFyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kcXJlbTgwMiByZW1haW5kZXIgMSAxMjM0NTY3ODAwMCAgIC0+IDEKLWRxcmVtODAzIHJlbWFpbmRlciAxMjM0NTY3ODAwICAxMCAgLT4gMAotZHFyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kcXJlbTgwNSByZW1haW5kZXIgMTIzNDU2Nzg5MCAgMTAgIC0+IDAKLWRxcmVtODA2IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTAgICAgLT4gMQotZHFyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kcXJlbTgwOCByZW1haW5kZXIgMSAxMjM0NTY3ODkxICAgIC0+IDEKLWRxcmVtODA5IHJlbWFpbmRlciAxMjM0NTY3ODkwMSAxMDAgLT4gMQotZHFyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kcXJlbTgxMSByZW1haW5kZXIgMTIzNDU2Nzg5NiAgMTAgIC0+IDYKLWRxcmVtODEyIHJlbWFpbmRlciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi1kcXJlbTgyMSByZW1haW5kZXIgMTIzNDU2NzgwMDAgMTAwIC0+IDAKLWRxcmVtODIyIHJlbWFpbmRlciAxIDEyMzQ1Njc4MDAwICAgLT4gMQotZHFyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCi1kcXJlbTgyNCByZW1haW5kZXIgMSAxMjM0NTY3ODAwICAgIC0+IDEKLWRxcmVtODI1IHJlbWFpbmRlciAxMjM0NTY3ODkwICAxMCAgLT4gMAotZHFyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCi1kcXJlbTgyNyByZW1haW5kZXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDEKLWRxcmVtODI4IHJlbWFpbmRlciAxIDEyMzQ1Njc4OTEgICAgLT4gMQotZHFyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCi1kcXJlbTgzMCByZW1haW5kZXIgMSAxMjM0NTY3ODkwMSAgIC0+IDEKLWRxcmVtODMxIHJlbWFpbmRlciAxMjM0NTY3ODk2ICAxMCAgLT4gNgotZHFyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxCi0KLS0tIGZyb20gZGl2aWRlaW50Ci1kcXJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMAotZHFyZW04NDEgcmVtYWluZGVyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKLWRxcmVtODQyIHJlbWFpbmRlciAgMTAwMDAwMDAwLjUgICAxICAtPiAgMC41Ci1kcXJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQotZHFyZW04NDQgcmVtYWluZGVyICAxMDAwMDAwMDAuOTk5IDEgIC0+ICAwLjk5OQotZHFyZW04NTAgcmVtYWluZGVyICAxMDAwMDAwMDMgICAgIDUgIC0+ICAzCi1kcXJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMKLWRxcmVtODUyIHJlbWFpbmRlciAgMTAwMDAwMyAgICAgICA1ICAtPiAgMwotZHFyZW04NTMgcmVtYWluZGVyICAxMDAwMDMgICAgICAgIDUgIC0+ICAzCi1kcXJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMKLWRxcmVtODU1IHJlbWFpbmRlciAgMTAwMyAgICAgICAgICA1ICAtPiAgMwotZHFyZW04NTYgcmVtYWluZGVyICAxMDMgICAgICAgICAgIDUgIC0+ICAzCi1kcXJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMKLWRxcmVtODU4IHJlbWFpbmRlciAgMSAgICAgICAgICAgICA1ICAtPiAgMQotCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZHFyZW04NjAgcmVtYWluZGVyIDEyMy4wZTEgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFyZW04NjEgcmVtYWluZGVyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFyZW04NjMgcmVtYWluZGVyIDEuMjNlMyAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFyZW04NjQgcmVtYWluZGVyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzEgcmVtYWluZGVyIDEyM2UxICAgICAxMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzIgcmVtYWluZGVyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzQgcmVtYWluZGVyIDEyM2UxICAgICAgICAxMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzggcmVtYWluZGVyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMAotZHFyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAotZHFyZW04ODAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDEwMDAwMDAgLT4gMTIzMAotZHFyZW04ODEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMAotZHFyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAotZHFyZW04ODMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDEwMDAgLT4gIDIzMAotZHFyZW04ODQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMAotZHFyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAotZHFyZW04ODYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDEgLT4gICAgMAotCi1kcXJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5MSByZW1haW5kZXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5MiByZW1haW5kZXIgMTIzZTEgICAgICAyMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5NCByZW1haW5kZXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAyMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5NyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTg5OSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAyMDAwMDAwMCAtPiAxMjMwCi1kcXJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwCi1kcXJlbTkwMSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCi1kcXJlbTkwMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAyMDAwMCAtPiAxMjMwCi1kcXJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwCi1kcXJlbTkwNCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCi1kcXJlbTkwNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAyMCAtPiAgIDEwCi1kcXJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwCi0KLWRxcmVtOTEwIHJlbWFpbmRlciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTEyIHJlbWFpbmRlciAxMjNlMSAgICAgIDUwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTEzIHJlbWFpbmRlciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTE1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDUwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTE2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTE5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDUwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTIwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKLWRxcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzAKLWRxcmVtOTIyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDUwMDAwIC0+IDEyMzAKLWRxcmVtOTIzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKLWRxcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzAKLWRxcmVtOTI1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDUwIC0+ICAgMzAKLWRxcmVtOTI2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKLQotZHFyZW05MzAgcmVtYWluZGVyIDEyM2UxICAgIDkwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzEgcmVtYWluZGVyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDkwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzQgcmVtYWluZGVyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDkwMDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMAotZHFyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAotZHFyZW05NDAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDkwMDAwMDAgLT4gMTIzMAotZHFyZW05NDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMAotZHFyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAotZHFyZW05NDMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDkwMDAgLT4gMTIzMAotZHFyZW05NDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMAotZHFyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MAotZHFyZW05NDYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDkgLT4gICAgNgotCi1kcXJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcmVtOTYxIHJlbWFpbmRlciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFyZW05NjIgcmVtYWluZGVyIDEyM2UxICAgMzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCi1kcXJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKLWRxcmVtOTY0IHJlbWFpbmRlciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFyZW05NjUgcmVtYWluZGVyIDEyM2UxICAgNjk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCi1kcXJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzAKLWRxcmVtOTY3IHJlbWFpbmRlciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFyZW05NjggcmVtYWluZGVyIDEyM2UxICAgOTk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwCi1kcXJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzAKLQotZHFyZW05ODAgcmVtYWluZGVyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5Ci0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQotZHFyZW0xMDUxIHJlbWFpbmRlciAgMWUrMjc3ICAxZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcXJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxcmVtMTA1MyByZW1haW5kZXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFyZW0xMDU0IHJlbWFpbmRlciAtMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlCi1kcXJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3Ci1kcXJlbTEwNTYgcmVtYWluZGVyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3Ci1kcXJlbTEwNTcgcmVtYWluZGVyIC0xZS0yNzcgIDFlKzMxMSAtPiAtMUUtMjc3Ci1kcXJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3Ci0KLS0tIEd5dXJpcyBleGFtcGxlCi1kcXJlbTEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzCi0KLS0tIGRlc3RydWN0aXZlIHN1YnRyYWN0Ci1kcXJlbTExMjAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OAotZHFyZW0xMTIxICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgIDAuNjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NzkKLWRxcmVtMTEyMiAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMC41NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4ODkwCi1kcXJlbTExMjMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4NwotZHFyZW0xMTI0ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKLWRxcmVtMTEyNSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMy42OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjUxCi1kcXJlbTExMjYgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NwotZHFyZW0xMTI3ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgNC4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDYKLWRxcmVtMTEyOCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgNC4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzU5Ci0KLS0tIE51bGwgdGVzdHMKLWRxcmVtMTAwMCByZW1haW5kZXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcVJlbWFpbmRlci5kZWNUZXN0IC0tIGRlY1F1YWQgcmVtYWluZGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQ0KK2RxcmVtMDAxIHJlbWFpbmRlciAgMSAgICAgMSAgICAtPiAgMA0KK2RxcmVtMDAyIHJlbWFpbmRlciAgMiAgICAgMSAgICAtPiAgMA0KK2RxcmVtMDAzIHJlbWFpbmRlciAgMSAgICAgMiAgICAtPiAgMQ0KK2RxcmVtMDA0IHJlbWFpbmRlciAgMiAgICAgMiAgICAtPiAgMA0KK2RxcmVtMDA1IHJlbWFpbmRlciAgMCAgICAgMSAgICAtPiAgMA0KK2RxcmVtMDA2IHJlbWFpbmRlciAgMCAgICAgMiAgICAtPiAgMA0KK2RxcmVtMDA3IHJlbWFpbmRlciAgMSAgICAgMyAgICAtPiAgMQ0KK2RxcmVtMDA4IHJlbWFpbmRlciAgMiAgICAgMyAgICAtPiAgMg0KK2RxcmVtMDA5IHJlbWFpbmRlciAgMyAgICAgMyAgICAtPiAgMA0KKw0KK2RxcmVtMDEwIHJlbWFpbmRlciAgMi40ICAgMSAgICAtPiAgMC40DQorZHFyZW0wMTEgcmVtYWluZGVyICAyLjQgICAtMSAgIC0+ICAwLjQNCitkcXJlbTAxMiByZW1haW5kZXIgIC0yLjQgIDEgICAgLT4gIC0wLjQNCitkcXJlbTAxMyByZW1haW5kZXIgIC0yLjQgIC0xICAgLT4gIC0wLjQNCitkcXJlbTAxNCByZW1haW5kZXIgIDIuNDAgIDEgICAgLT4gIDAuNDANCitkcXJlbTAxNSByZW1haW5kZXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwDQorZHFyZW0wMTYgcmVtYWluZGVyICAyLjQgICAyICAgIC0+ICAwLjQNCitkcXJlbTAxNyByZW1haW5kZXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwDQorZHFyZW0wMTggcmVtYWluZGVyICAyLiAgICAyICAgIC0+ICAwDQorZHFyZW0wMTkgcmVtYWluZGVyICAyMCAgICAyMCAgIC0+ICAwDQorDQorZHFyZW0wMjAgcmVtYWluZGVyICAxODcgICAxODcgICAgLT4gIDANCitkcXJlbTAyMSByZW1haW5kZXIgIDUgICAgIDIgICAgICAtPiAgMQ0KK2RxcmVtMDIyIHJlbWFpbmRlciAgNSAgICAgMi4wICAgIC0+ICAxLjANCitkcXJlbTAyMyByZW1haW5kZXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDANCitkcXJlbTAyNCByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCitkcXJlbTAyNSByZW1haW5kZXIgIDUgICAgIDAuMjAwICAtPiAgMC4wMDANCisNCitkcXJlbTAzMCByZW1haW5kZXIgIDEgICAgIDIgICAgICAtPiAgMQ0KK2RxcmVtMDMxIHJlbWFpbmRlciAgMSAgICAgNCAgICAgIC0+ICAxDQorZHFyZW0wMzIgcmVtYWluZGVyICAxICAgICA4ICAgICAgLT4gIDENCisNCitkcXJlbTAzMyByZW1haW5kZXIgIDEgICAgIDE2ICAgICAtPiAgMQ0KK2RxcmVtMDM0IHJlbWFpbmRlciAgMSAgICAgMzIgICAgIC0+ICAxDQorZHFyZW0wMzUgcmVtYWluZGVyICAxICAgICA2NCAgICAgLT4gIDENCitkcXJlbTA0MCByZW1haW5kZXIgIDEgICAgLTIgICAgICAtPiAgMQ0KK2RxcmVtMDQxIHJlbWFpbmRlciAgMSAgICAtNCAgICAgIC0+ICAxDQorZHFyZW0wNDIgcmVtYWluZGVyICAxICAgIC04ICAgICAgLT4gIDENCitkcXJlbTA0MyByZW1haW5kZXIgIDEgICAgLTE2ICAgICAtPiAgMQ0KK2RxcmVtMDQ0IHJlbWFpbmRlciAgMSAgICAtMzIgICAgIC0+ICAxDQorZHFyZW0wNDUgcmVtYWluZGVyICAxICAgIC02NCAgICAgLT4gIDENCitkcXJlbTA1MCByZW1haW5kZXIgLTEgICAgIDIgICAgICAtPiAgLTENCitkcXJlbTA1MSByZW1haW5kZXIgLTEgICAgIDQgICAgICAtPiAgLTENCitkcXJlbTA1MiByZW1haW5kZXIgLTEgICAgIDggICAgICAtPiAgLTENCitkcXJlbTA1MyByZW1haW5kZXIgLTEgICAgIDE2ICAgICAtPiAgLTENCitkcXJlbTA1NCByZW1haW5kZXIgLTEgICAgIDMyICAgICAtPiAgLTENCitkcXJlbTA1NSByZW1haW5kZXIgLTEgICAgIDY0ICAgICAtPiAgLTENCitkcXJlbTA2MCByZW1haW5kZXIgLTEgICAgLTIgICAgICAtPiAgLTENCitkcXJlbTA2MSByZW1haW5kZXIgLTEgICAgLTQgICAgICAtPiAgLTENCitkcXJlbTA2MiByZW1haW5kZXIgLTEgICAgLTggICAgICAtPiAgLTENCitkcXJlbTA2MyByZW1haW5kZXIgLTEgICAgLTE2ICAgICAtPiAgLTENCitkcXJlbTA2NCByZW1haW5kZXIgLTEgICAgLTMyICAgICAtPiAgLTENCitkcXJlbTA2NSByZW1haW5kZXIgLTEgICAgLTY0ICAgICAtPiAgLTENCisNCitkcXJlbTA2NiByZW1haW5kZXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMA0KK2RxcmVtMDY3IHJlbWFpbmRlciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQNCitkcXJlbTA2OCByZW1haW5kZXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gMC41DQorZHFyZW0wNjkgcmVtYWluZGVyICA5OTk5OTk5OTkuOSAgIDEgIC0+IDAuOQ0KK2RxcmVtMDcwIHJlbWFpbmRlciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAwLjk5OQ0KK2RxcmVtMDcxIHJlbWFpbmRlciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAwLjk5OTk5OQ0KK2RxcmVtMDcyIHJlbWFpbmRlciAgOSAgICAgICAgICAgICAxICAtPiAwDQorDQorZHFyZW0wODAgcmVtYWluZGVyICAwLiAgICAgICAgICAgIDEgIC0+IDANCitkcXJlbTA4MSByZW1haW5kZXIgIC4wICAgICAgICAgICAgMSAgLT4gMC4wDQorZHFyZW0wODIgcmVtYWluZGVyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDANCitkcXJlbTA4MyByZW1haW5kZXIgIDAuMDBFKzkgICAgICAgMSAgLT4gMA0KK2RxcmVtMDg0IHJlbWFpbmRlciAgMC4wMEUrMyAgICAgICAxICAtPiAwDQorZHFyZW0wODUgcmVtYWluZGVyICAwLjAwRSsyICAgICAgIDEgIC0+IDANCitkcXJlbTA4NiByZW1haW5kZXIgIDAuMDBFKzEgICAgICAgMSAgLT4gMC4wDQorZHFyZW0wODcgcmVtYWluZGVyICAwLjAwRSswICAgICAgIDEgIC0+IDAuMDANCitkcXJlbTA4OCByZW1haW5kZXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMA0KK2RxcmVtMDg5IHJlbWFpbmRlciAgMC4wMEUtMSAgICAgICAxICAtPiAwLjAwMA0KK2RxcmVtMDkwIHJlbWFpbmRlciAgMC4wMEUtMiAgICAgICAxICAtPiAwLjAwMDANCitkcXJlbTA5MSByZW1haW5kZXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMA0KK2RxcmVtMDkyIHJlbWFpbmRlciAgMC4wMEUtNCAgICAgICAxICAtPiAwLjAwMDAwMA0KK2RxcmVtMDkzIHJlbWFpbmRlciAgMC4wMEUtNSAgICAgICAxICAtPiAwRS03DQorZHFyZW0wOTQgcmVtYWluZGVyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgNCitkcXJlbTA5NSByZW1haW5kZXIgIDAuMDAwMEUtNTAgICAgMSAgLT4gMEUtNTQNCisNCistLSBWYXJpb3VzIGZsYXZvdXJzIG9mIHJlbWFpbmRlciBieSAwDQorZHFyZW0xMDEgcmVtYWluZGVyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0xMDIgcmVtYWluZGVyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0xMDMgcmVtYWluZGVyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0xMDQgcmVtYWluZGVyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0xMDUgcmVtYWluZGVyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0xMDYgcmVtYWluZGVyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorLS0gW1NvbWUgdGhpbmsgdGhpcyBuZXh0IGdyb3VwIHNob3VsZCBiZSBEaXZpc2lvbl9ieV96ZXJvIGV4Y2VwdGlvbiwgYnV0DQorLS0gSUVFRSA4NTQgaXMgZXhwbGljaXQgdGhhdCBpdCBpcyBJbnZhbGlkIG9wZXJhdGlvbiAuLiBmb3INCistLSByZW1haW5kZXItbmVhciwgYW55d2F5XQ0KK2RxcmVtMTA3IHJlbWFpbmRlciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0xMDggcmVtYWluZGVyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTEwOSByZW1haW5kZXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMTEwIHJlbWFpbmRlciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0xMTEgcmVtYWluZGVyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTExMiByZW1haW5kZXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMTEzIHJlbWFpbmRlciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0xMTQgcmVtYWluZGVyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTExNSByZW1haW5kZXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMTE2IHJlbWFpbmRlciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0xMTkgcmVtYWluZGVyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTEyMCByZW1haW5kZXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMTIxIHJlbWFpbmRlciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0xMjIgcmVtYWluZGVyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTEyMyByZW1haW5kZXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMTI0IHJlbWFpbmRlciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYW5kIHplcm9zIG9uIGxlZnQNCitkcXJlbTEzMCByZW1haW5kZXIgIDAgICAgICAxICAgLT4gIDANCitkcXJlbTEzMSByZW1haW5kZXIgIDAgICAgIC0xICAgLT4gIDANCitkcXJlbTEzMiByZW1haW5kZXIgIDAuMCAgICAxICAgLT4gIDAuMA0KK2RxcmVtMTMzIHJlbWFpbmRlciAgMC4wICAgLTEgICAtPiAgMC4wDQorZHFyZW0xMzQgcmVtYWluZGVyIC0wICAgICAgMSAgIC0+IC0wDQorZHFyZW0xMzUgcmVtYWluZGVyIC0wICAgICAtMSAgIC0+IC0wDQorZHFyZW0xMzYgcmVtYWluZGVyIC0wLjAgICAgMSAgIC0+IC0wLjANCitkcXJlbTEzNyByZW1haW5kZXIgLTAuMCAgIC0xICAgLT4gLTAuMA0KKw0KKy0tIDAuNWVycw0KK2RxcmVtMTQzIHJlbWFpbmRlciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KK2RxcmVtMTQ0IHJlbWFpbmRlciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KK2RxcmVtMTQ1IHJlbWFpbmRlciAgIDAuNSAgMi4wMSAgLT4gIDAuNTANCitkcXJlbTE0NiByZW1haW5kZXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KK2RxcmVtMTQ3IHJlbWFpbmRlciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCitkcXJlbTE0OCByZW1haW5kZXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwDQorZHFyZW0xNDkgcmVtYWluZGVyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCisNCistLSBzdGVhZGllcw0KK2RxcmVtMTUwIHJlbWFpbmRlciAgMSAgMSAgIC0+IDANCitkcXJlbTE1MSByZW1haW5kZXIgIDEgIDIgICAtPiAxDQorZHFyZW0xNTIgcmVtYWluZGVyICAxICAzICAgLT4gMQ0KK2RxcmVtMTUzIHJlbWFpbmRlciAgMSAgNCAgIC0+IDENCitkcXJlbTE1NCByZW1haW5kZXIgIDEgIDUgICAtPiAxDQorZHFyZW0xNTUgcmVtYWluZGVyICAxICA2ICAgLT4gMQ0KK2RxcmVtMTU2IHJlbWFpbmRlciAgMSAgNyAgIC0+IDENCitkcXJlbTE1NyByZW1haW5kZXIgIDEgIDggICAtPiAxDQorZHFyZW0xNTggcmVtYWluZGVyICAxICA5ICAgLT4gMQ0KK2RxcmVtMTU5IHJlbWFpbmRlciAgMSAgMTAgIC0+IDENCitkcXJlbTE2MCByZW1haW5kZXIgIDEgIDEgICAtPiAwDQorZHFyZW0xNjEgcmVtYWluZGVyICAyICAxICAgLT4gMA0KK2RxcmVtMTYyIHJlbWFpbmRlciAgMyAgMSAgIC0+IDANCitkcXJlbTE2MyByZW1haW5kZXIgIDQgIDEgICAtPiAwDQorZHFyZW0xNjQgcmVtYWluZGVyICA1ICAxICAgLT4gMA0KK2RxcmVtMTY1IHJlbWFpbmRlciAgNiAgMSAgIC0+IDANCitkcXJlbTE2NiByZW1haW5kZXIgIDcgIDEgICAtPiAwDQorZHFyZW0xNjcgcmVtYWluZGVyICA4ICAxICAgLT4gMA0KK2RxcmVtMTY4IHJlbWFpbmRlciAgOSAgMSAgIC0+IDANCitkcXJlbTE2OSByZW1haW5kZXIgIDEwIDEgICAtPiAwDQorDQorLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXINCitkcXJlbTE3MSByZW1haW5kZXIgICAwLjQgIDEuMDIwIC0+ICAwLjQwMA0KK2RxcmVtMTcyIHJlbWFpbmRlciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwDQorZHFyZW0xNzMgcmVtYWluZGVyICAgMC41MSAxLjAyMCAtPiAgMC41MTANCitkcXJlbTE3NCByZW1haW5kZXIgICAwLjUyIDEuMDIwIC0+ICAwLjUyMA0KK2RxcmVtMTc1IHJlbWFpbmRlciAgIDAuNiAgMS4wMjAgLT4gIDAuNjAwDQorDQorLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXIgYnkgMA0KK2RxcmVtMjAxIHJlbWFpbmRlciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFyZW0yMDIgcmVtYWluZGVyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcXJlbTIwMyByZW1haW5kZXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2RxcmVtMjA0IHJlbWFpbmRlciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTIwNSByZW1haW5kZXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0yMDYgcmVtYWluZGVyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMjA3IHJlbWFpbmRlciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTIwOCByZW1haW5kZXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW0yMDkgcmVtYWluZGVyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtMjEwIHJlbWFpbmRlciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTIxMSByZW1haW5kZXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlck5lYXINCitkcXJlbTIzMSByZW1haW5kZXIgIC0wLjQgIDEuMDIwIC0+IC0wLjQwMA0KK2RxcmVtMjMyIHJlbWFpbmRlciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwDQorZHFyZW0yMzMgcmVtYWluZGVyICAtMC41MSAxLjAyMCAtPiAtMC41MTANCitkcXJlbTIzNCByZW1haW5kZXIgIC0wLjUyIDEuMDIwIC0+IC0wLjUyMA0KK2RxcmVtMjM1IHJlbWFpbmRlciAgLTAuNiAgMS4wMjAgLT4gLTAuNjAwDQorDQorLS0gaGlnaCBYcw0KK2RxcmVtMjQwIHJlbWFpbmRlciAgMUUrMiAgMS4wMCAgLT4gIDAuMDANCisNCistLSBkcXJlbTN4eCBhcmUgZnJvbSBEaWFnQmlnRGVjaW1hbA0KK2RxcmVtMzAxIHJlbWFpbmRlciAgIDEgICAgMyAgICAgLT4gIDENCitkcXJlbTMwMiByZW1haW5kZXIgICA1ICAgIDUgICAgIC0+ICAwDQorZHFyZW0zMDMgcmVtYWluZGVyICAgMTMgICAxMCAgICAtPiAgMw0KK2RxcmVtMzA0IHJlbWFpbmRlciAgIDEzICAgNTAgICAgLT4gIDEzDQorZHFyZW0zMDUgcmVtYWluZGVyICAgMTMgICAxMDAgICAtPiAgMTMNCitkcXJlbTMwNiByZW1haW5kZXIgICAxMyAgIDEwMDAgIC0+ICAxMw0KK2RxcmVtMzA3IHJlbWFpbmRlciAgIC4xMyAgICAxICAgLT4gIDAuMTMNCitkcXJlbTMwOCByZW1haW5kZXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMw0KK2RxcmVtMzA5IHJlbWFpbmRlciAgIDAuMTAzMyAxICAgLT4gIDAuMTAzMw0KK2RxcmVtMzEwIHJlbWFpbmRlciAgIDEuMDMzICAxICAgLT4gIDAuMDMzDQorZHFyZW0zMTEgcmVtYWluZGVyICAgMTAuMzMgIDEgICAtPiAgMC4zMw0KK2RxcmVtMzEyIHJlbWFpbmRlciAgIDEwLjMzIDEwICAgLT4gIDAuMzMNCitkcXJlbTMxMyByZW1haW5kZXIgICAxMDMuMyAgMSAgIC0+ICAwLjMNCitkcXJlbTMxNCByZW1haW5kZXIgICAxMzMgICAxMCAgIC0+ICAzDQorZHFyZW0zMTUgcmVtYWluZGVyICAgMTAzMyAgMTAgICAtPiAgMw0KK2RxcmVtMzE2IHJlbWFpbmRlciAgIDEwMzMgIDUwICAgLT4gIDMzDQorZHFyZW0zMTcgcmVtYWluZGVyICAgMTAxLjAgIDMgICAtPiAgMi4wDQorZHFyZW0zMTggcmVtYWluZGVyICAgMTAyLjAgIDMgICAtPiAgMC4wDQorZHFyZW0zMTkgcmVtYWluZGVyICAgMTAzLjAgIDMgICAtPiAgMS4wDQorZHFyZW0zMjAgcmVtYWluZGVyICAgMi40MCAgIDEgICAtPiAgMC40MA0KK2RxcmVtMzIxIHJlbWFpbmRlciAgIDIuNDAwICAxICAgLT4gIDAuNDAwDQorZHFyZW0zMjIgcmVtYWluZGVyICAgMi40ICAgIDEgICAtPiAgMC40DQorZHFyZW0zMjMgcmVtYWluZGVyICAgMi40ICAgIDIgICAtPiAgMC40DQorZHFyZW0zMjQgcmVtYWluZGVyICAgMi40MDAgIDIgICAtPiAgMC40MDANCitkcXJlbTMyNSByZW1haW5kZXIgICAxICAgMC4zICAgIC0+ICAwLjENCitkcXJlbTMyNiByZW1haW5kZXIgICAxICAgMC4zMCAgIC0+ICAwLjEwDQorZHFyZW0zMjcgcmVtYWluZGVyICAgMSAgIDAuMzAwICAtPiAgMC4xMDANCitkcXJlbTMyOCByZW1haW5kZXIgICAxICAgMC4zMDAwIC0+ICAwLjEwMDANCitkcXJlbTMyOSByZW1haW5kZXIgICAxLjAgICAgMC4zIC0+ICAwLjENCitkcXJlbTMzMCByZW1haW5kZXIgICAxLjAwICAgMC4zIC0+ICAwLjEwDQorZHFyZW0zMzEgcmVtYWluZGVyICAgMS4wMDAgIDAuMyAtPiAgMC4xMDANCitkcXJlbTMzMiByZW1haW5kZXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDANCitkcXJlbTMzMyByZW1haW5kZXIgICAwLjUgIDIgICAgIC0+ICAwLjUNCitkcXJlbTMzNCByZW1haW5kZXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCitkcXJlbTMzNSByZW1haW5kZXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQorZHFyZW0zMzYgcmVtYWluZGVyICAgMC41ICAyLjAwMSAtPiAgMC41MDANCitkcXJlbTMzNyByZW1haW5kZXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQorZHFyZW0zMzggcmVtYWluZGVyICAgMC41MCAyLjAxICAtPiAgMC41MA0KK2RxcmVtMzM5IHJlbWFpbmRlciAgIDAuNTAgMi4wMDEgLT4gIDAuNTAwDQorDQorZHFyZW0zNDAgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAwLjUwMDAwMDANCitkcXJlbTM0MSByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwDQorZHFyZW0zNDIgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIDAuNTAwMDAwMDAwDQorZHFyZW0zNDMgcmVtYWluZGVyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDANCitkcXJlbTM0NCByZW1haW5kZXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAwLjUwMDAwMDAwMDAwDQorZHFyZW0zNDUgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03DQorZHFyZW0zNDYgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OSAgICAtPiAgMUUtOA0KK2RxcmVtMzQ3IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5ICAgIC0+ICAxRS05DQorZHFyZW0zNDggcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMA0KK2RxcmVtMzQ5IHJlbWFpbmRlciAgIDAuNSAgIDAuNDk5OTk5OTk5OTkgICAgLT4gIDFFLTExDQorZHFyZW0zNTAgcmVtYWluZGVyICAgMC41ICAgMC40OTk5OTk5OTk5OTkgICAgLT4gIDFFLTEyDQorDQorZHFyZW0zNTEgcmVtYWluZGVyICAgMC4wMyAgNyAgLT4gIDAuMDMNCitkcXJlbTM1MiByZW1haW5kZXIgICA1ICAgMiAgICAtPiAgMQ0KK2RxcmVtMzUzIHJlbWFpbmRlciAgIDQuMSAgIDIgICAgLT4gIDAuMQ0KK2RxcmVtMzU0IHJlbWFpbmRlciAgIDQuMDEgICAyICAgIC0+ICAwLjAxDQorZHFyZW0zNTUgcmVtYWluZGVyICAgNC4wMDEgICAyICAgIC0+ICAwLjAwMQ0KK2RxcmVtMzU2IHJlbWFpbmRlciAgIDQuMDAwMSAgIDIgICAgLT4gIDAuMDAwMQ0KK2RxcmVtMzU3IHJlbWFpbmRlciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxDQorZHFyZW0zNTggcmVtYWluZGVyICAgNC4wMDAwMDEgICAyICAgIC0+ICAwLjAwMDAwMQ0KK2RxcmVtMzU5IHJlbWFpbmRlciAgIDQuMDAwMDAwMSAgIDIgICAgLT4gIDFFLTcNCisNCitkcXJlbTM2MCByZW1haW5kZXIgICAxLjIgICAwLjczNDUgLT4gIDAuNDY1NQ0KK2RxcmVtMzYxIHJlbWFpbmRlciAgIDAuOCAgIDEyICAgICAtPiAgMC44DQorZHFyZW0zNjIgcmVtYWluZGVyICAgMC44ICAgMC4yICAgIC0+ICAwLjANCitkcXJlbTM2MyByZW1haW5kZXIgICAwLjggICAwLjMgICAgLT4gIDAuMg0KK2RxcmVtMzY0IHJlbWFpbmRlciAgIDAuODAwICAgMTIgICAtPiAgMC44MDANCitkcXJlbTM2NSByZW1haW5kZXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwDQorZHFyZW0zNjYgcmVtYWluZGVyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMA0KKw0KK2RxcmVtMzcxIHJlbWFpbmRlciAgIDIuNDAwICAyICAgICAgICAtPiAgMC40MDANCisNCitkcXJlbTM4MSByZW1haW5kZXIgMTIzNDUgIDEgICAgICAgICAtPiAgMA0KK2RxcmVtMzgyIHJlbWFpbmRlciAxMjM0NSAgMS4wMDAxICAgIC0+ICAwLjc2NTcNCitkcXJlbTM4MyByZW1haW5kZXIgMTIzNDUgIDEuMDAxICAgICAtPiAgMC42NjgNCitkcXJlbTM4NCByZW1haW5kZXIgMTIzNDUgIDEuMDEgICAgICAtPiAgMC43OA0KK2RxcmVtMzg1IHJlbWFpbmRlciAxMjM0NSAgMS4xICAgICAgIC0+ICAwLjgNCitkcXJlbTM4NiByZW1haW5kZXIgMTIzNTUgIDQgICAgICAgICAtPiAgMw0KK2RxcmVtMzg3IHJlbWFpbmRlciAxMjM0NSAgNCAgICAgICAgIC0+ICAxDQorZHFyZW0zODggcmVtYWluZGVyIDEyMzU1ICA0LjAwMDEgICAgLT4gIDIuNjkxMg0KK2RxcmVtMzg5IHJlbWFpbmRlciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQNCitkcXJlbTM5MCByZW1haW5kZXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45DQorZHFyZW0zOTEgcmVtYWluZGVyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gIDQuNzMNCitkcXJlbTM5MiByZW1haW5kZXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkNCitkcXJlbTM5MyByZW1haW5kZXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5DQorZHFyZW0zOTQgcmVtYWluZGVyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDANCitkcXJlbTM5NSByZW1haW5kZXIgMTIzNDUgIDUuMDAwMSAgICAtPiAgNC43NTMyDQorZHFyZW0zOTYgcmVtYWluZGVyIDEyMzQ1ICA1LjAwMSAgICAgLT4gIDIuNTMyDQorZHFyZW0zOTcgcmVtYWluZGVyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYNCitkcXJlbTM5OCByZW1haW5kZXIgMTIzNDUgIDUuMSAgICAgICAtPiAgMy4wDQorDQorLS0gdGhlIG5hc3R5IGRpdmlzaW9uLWJ5LTEgY2FzZXMNCitkcXJlbTQwMSByZW1haW5kZXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQ0KK2RxcmVtNDAyIHJlbWFpbmRlciAgIDAuNTUgICAgICAgIDEgICAtPiAgMC41NQ0KK2RxcmVtNDAzIHJlbWFpbmRlciAgIDAuNTU1ICAgICAgIDEgICAtPiAgMC41NTUNCitkcXJlbTQwNCByZW1haW5kZXIgICAwLjU1NTUgICAgICAxICAgLT4gIDAuNTU1NQ0KK2RxcmVtNDA1IHJlbWFpbmRlciAgIDAuNTU1NTUgICAgIDEgICAtPiAgMC41NTU1NQ0KK2RxcmVtNDA2IHJlbWFpbmRlciAgIDAuNTU1NTU1ICAgIDEgICAtPiAgMC41NTU1NTUNCitkcXJlbTQwNyByZW1haW5kZXIgICAwLjU1NTU1NTUgICAxICAgLT4gIDAuNTU1NTU1NQ0KK2RxcmVtNDA4IHJlbWFpbmRlciAgIDAuNTU1NTU1NTUgIDEgICAtPiAgMC41NTU1NTU1NQ0KK2RxcmVtNDA5IHJlbWFpbmRlciAgIDAuNTU1NTU1NTU1IDEgICAtPiAgMC41NTU1NTU1NTUNCisNCistLSBmb2xkZG93bnMNCitkcXJlbTQyMSByZW1haW5kZXIgICAxRSs2MTQ0ICAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFyZW00MjIgcmVtYWluZGVyICAgMUUrNjE0NCAgMUUrNjE0MyAgLT4gICAwRSs2MTExIENsYW1wZWQNCitkcXJlbTQyMyByZW1haW5kZXIgICAxRSs2MTQ0ICAyRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KK2RxcmVtNDI0IHJlbWFpbmRlciAgIDFFKzYxNDQgIDNFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFyZW00MjUgcmVtYWluZGVyICAgMUUrNjE0NCAgNEUrNjE0MyAgLT4gICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCitkcXJlbTQyNiByZW1haW5kZXIgICAxRSs2MTQ0ICA1RSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZA0KK2RxcmVtNDI3IHJlbWFpbmRlciAgIDFFKzYxNDQgIDZFKzYxNDMgIC0+ICAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFyZW00MjggcmVtYWluZGVyICAgMUUrNjE0NCAgN0UrNjE0MyAgLT4gICAzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQNCitkcXJlbTQyOSByZW1haW5kZXIgICAxRSs2MTQ0ICA4RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZA0KK2RxcmVtNDMwIHJlbWFpbmRlciAgIDFFKzYxNDQgIDlFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorLS0gdGluaWVzDQorZHFyZW00MzEgcmVtYWluZGVyICAgMUUtNjE3NSAgMUUtNjE3NiAgLT4gICAwRS02MTc2DQorZHFyZW00MzIgcmVtYWluZGVyICAgMUUtNjE3NSAgMkUtNjE3NiAgLT4gICAwRS02MTc2DQorZHFyZW00MzMgcmVtYWluZGVyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbA0KK2RxcmVtNDM0IHJlbWFpbmRlciAgIDFFLTYxNzUgIDRFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwNCitkcXJlbTQzNSByZW1haW5kZXIgICAxRS02MTc1ICA1RS02MTc2ICAtPiAgIDBFLTYxNzYNCitkcXJlbTQzNiByZW1haW5kZXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgIDRFLTYxNzYgU3Vibm9ybWFsDQorZHFyZW00MzcgcmVtYWluZGVyICAgMUUtNjE3NSAgN0UtNjE3NiAgLT4gICAzRS02MTc2IFN1Ym5vcm1hbA0KK2RxcmVtNDM4IHJlbWFpbmRlciAgIDFFLTYxNzUgIDhFLTYxNzYgIC0+ICAgMkUtNjE3NiBTdWJub3JtYWwNCitkcXJlbTQzOSByZW1haW5kZXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsDQorZHFyZW00NDAgcmVtYWluZGVyICAgMUUtNjE3NSAxMEUtNjE3NiAgLT4gICAwRS02MTc2DQorZHFyZW00NDEgcmVtYWluZGVyICAgMUUtNjE3NSAxMUUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KK2RxcmVtNDQyIHJlbWFpbmRlciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwNCitkcXJlbTQ0MyByZW1haW5kZXIgMTAwRS02MTc1IDIwRS02MTc2ICAtPiAgIDBFLTYxNzYNCitkcXJlbTQ0NCByZW1haW5kZXIgMTAwRS02MTc1IDIxRS02MTc2ICAtPiAxLjNFLTYxNzUgU3Vibm9ybWFsDQorZHFyZW00NDUgcmVtYWluZGVyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KKw0KKy0tIHplcm8gc2lnbnMNCitkcXJlbTY1MCByZW1haW5kZXIgIDEgIDEgLT4gIDANCitkcXJlbTY1MSByZW1haW5kZXIgLTEgIDEgLT4gLTANCitkcXJlbTY1MiByZW1haW5kZXIgIDEgLTEgLT4gIDANCitkcXJlbTY1MyByZW1haW5kZXIgLTEgLTEgLT4gLTANCitkcXJlbTY1NCByZW1haW5kZXIgIDAgIDEgLT4gIDANCitkcXJlbTY1NSByZW1haW5kZXIgLTAgIDEgLT4gLTANCitkcXJlbTY1NiByZW1haW5kZXIgIDAgLTEgLT4gIDANCitkcXJlbTY1NyByZW1haW5kZXIgLTAgLTEgLT4gLTANCitkcXJlbTY1OCByZW1haW5kZXIgIDAuMDAgIDEgIC0+ICAwLjAwDQorZHFyZW02NTkgcmVtYWluZGVyIC0wLjAwICAxICAtPiAtMC4wMA0KKw0KKy0tIFNwZWNpYWxzDQorZHFyZW02ODAgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODEgcmVtYWluZGVyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODIgcmVtYWluZGVyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODMgcmVtYWluZGVyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODQgcmVtYWluZGVyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODUgcmVtYWluZGVyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODYgcmVtYWluZGVyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODcgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW02ODggcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KK2RxcmVtNjg5IHJlbWFpbmRlciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNjkxIHJlbWFpbmRlciAtMSAgICAgSW5mICAgLT4gLTENCitkcXJlbTY5MiByZW1haW5kZXIgIDAgICAgIEluZiAgIC0+ICAwDQorZHFyZW02OTMgcmVtYWluZGVyIC0wICAgICBJbmYgICAtPiAtMA0KK2RxcmVtNjk0IHJlbWFpbmRlciAgMSAgICAgSW5mICAgLT4gIDENCitkcXJlbTY5NSByZW1haW5kZXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorZHFyZW02OTYgcmVtYWluZGVyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFyZW03MDAgcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDEgcmVtYWluZGVyIC1JbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDIgcmVtYWluZGVyIC1JbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDMgcmVtYWluZGVyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDQgcmVtYWluZGVyIC1JbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDUgcmVtYWluZGVyIC1JbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDYgcmVtYWluZGVyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDcgcmVtYWluZGVyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDggcmVtYWluZGVyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03MDkgcmVtYWluZGVyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KK2RxcmVtNzEwIHJlbWFpbmRlciAtMSAgICAtSW5mICAgLT4gLTENCitkcXJlbTcxMSByZW1haW5kZXIgLTAgICAgLUluZiAgIC0+IC0wDQorZHFyZW03MTIgcmVtYWluZGVyICAwICAgIC1JbmYgICAtPiAgMA0KK2RxcmVtNzEzIHJlbWFpbmRlciAgMSAgICAtSW5mICAgLT4gIDENCitkcXJlbTcxNCByZW1haW5kZXIgIDEwMDAgLUluZiAgIC0+ICAxMDAwDQorZHFyZW03MTUgcmVtYWluZGVyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFyZW03MjEgcmVtYWluZGVyICBOYU4gLUluZiAgICAtPiAgTmFODQorZHFyZW03MjIgcmVtYWluZGVyICBOYU4gLTEwMDAgICAtPiAgTmFODQorZHFyZW03MjMgcmVtYWluZGVyICBOYU4gLTEgICAgICAtPiAgTmFODQorZHFyZW03MjQgcmVtYWluZGVyICBOYU4gLTAgICAgICAtPiAgTmFODQorZHFyZW03MjUgcmVtYWluZGVyIC1OYU4gIDAgICAgICAtPiAtTmFODQorZHFyZW03MjYgcmVtYWluZGVyICBOYU4gIDEgICAgICAtPiAgTmFODQorZHFyZW03MjcgcmVtYWluZGVyICBOYU4gIDEwMDAgICAtPiAgTmFODQorZHFyZW03MjggcmVtYWluZGVyICBOYU4gIEluZiAgICAtPiAgTmFODQorZHFyZW03MjkgcmVtYWluZGVyICBOYU4gLU5hTiAgICAtPiAgTmFODQorZHFyZW03MzAgcmVtYWluZGVyIC1JbmYgIE5hTiAgICAtPiAgTmFODQorZHFyZW03MzEgcmVtYWluZGVyIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZHFyZW03MzIgcmVtYWluZGVyIC0xICAgIE5hTiAgICAtPiAgTmFODQorZHFyZW03MzMgcmVtYWluZGVyIC0wICAgLU5hTiAgICAtPiAtTmFODQorZHFyZW03MzQgcmVtYWluZGVyICAwICAgIE5hTiAgICAtPiAgTmFODQorZHFyZW03MzUgcmVtYWluZGVyICAxICAgLU5hTiAgICAtPiAtTmFODQorZHFyZW03MzYgcmVtYWluZGVyICAxMDAwIE5hTiAgICAtPiAgTmFODQorZHFyZW03MzcgcmVtYWluZGVyICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorZHFyZW03NDEgcmVtYWluZGVyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzQyIHJlbWFpbmRlciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc0MyByZW1haW5kZXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03NDQgcmVtYWluZGVyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzQ1IHJlbWFpbmRlciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc0NiByZW1haW5kZXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03NDcgcmVtYWluZGVyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzQ5IHJlbWFpbmRlciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc1MCByZW1haW5kZXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03NTEgcmVtYWluZGVyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzUyIHJlbWFpbmRlciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc1MyByZW1haW5kZXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03NTQgcmVtYWluZGVyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzU1IHJlbWFpbmRlciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc1NiByZW1haW5kZXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyZW03NTcgcmVtYWluZGVyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxcmVtNzU4IHJlbWFpbmRlciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc1OSByZW1haW5kZXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnaW5nIE5hTnMNCitkcXJlbTc2MCByZW1haW5kZXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjENCitkcXJlbTc2MSByZW1haW5kZXIgc05hTjIgICBOYU44ICAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc2MiByZW1haW5kZXIgIE5hTjMgIHNOYU45ICAgLT4gIE5hTjkgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc2MyByZW1haW5kZXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTc2NCByZW1haW5kZXIgICAgMTUgICBOYU4xMSAgLT4gIE5hTjExDQorZHFyZW03NjUgcmVtYWluZGVyICBOYU42ICAgTmFOMTIgIC0+ICBOYU42DQorZHFyZW03NjYgcmVtYWluZGVyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMw0KK2RxcmVtNzY3IHJlbWFpbmRlciAgTmFOMTQgIC1JbmYgICAtPiAgTmFOMTQNCitkcXJlbTc2OCByZW1haW5kZXIgICAgMCAgICBOYU4xNSAgLT4gIE5hTjE1DQorZHFyZW03NjkgcmVtYWluZGVyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNg0KKw0KKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQ0KK2RxcmVtNzcwICByZW1haW5kZXIgIDEyMzQ1Njg4ODg4ODg4ODc3Nzc3Nzc3Nzc4OTAxMjM0NTYgIDEwICAgIC0+ICA2DQorZHFyZW03NzEgIHJlbWFpbmRlciAgMTIzNDU2ODg4ODg4ODg4Nzc3Nzc3Nzc3Nzg5MDEyMzQ1NiAgIDEgICAgLT4gIDANCitkcXJlbTc3MiAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJlbTc3MyAgcmVtYWluZGVyICAxMjM0NTY4ODg4ODg4ODg3Nzc3Nzc3Nzc3ODkwMTIzNDU2ICAgMC4wMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCisNCistLSBsb25nIG9wZXJhbmQgY2hlY2tzDQorZHFyZW04MDEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQorZHFyZW04MDIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQorZHFyZW04MDMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQorZHFyZW04MDQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQorZHFyZW04MDUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQorZHFyZW04MDYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQorZHFyZW04MDcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQorZHFyZW04MDggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQorZHFyZW04MDkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQorZHFyZW04MTAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQorZHFyZW04MTEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2DQorZHFyZW04MTIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQorDQorZHFyZW04MjEgcmVtYWluZGVyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQorZHFyZW04MjIgcmVtYWluZGVyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQorZHFyZW04MjMgcmVtYWluZGVyIDEyMzQ1Njc4MDAgIDEwICAtPiAwDQorZHFyZW04MjQgcmVtYWluZGVyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQorZHFyZW04MjUgcmVtYWluZGVyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQorZHFyZW04MjYgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MCAgICAtPiAxDQorZHFyZW04MjcgcmVtYWluZGVyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQorZHFyZW04MjggcmVtYWluZGVyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQorZHFyZW04MjkgcmVtYWluZGVyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxDQorZHFyZW04MzAgcmVtYWluZGVyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQorZHFyZW04MzEgcmVtYWluZGVyIDEyMzQ1Njc4OTYgIDEwICAtPiA2DQorZHFyZW04MzIgcmVtYWluZGVyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQorDQorLS0gZnJvbSBkaXZpZGVpbnQNCitkcXJlbTg0MCByZW1haW5kZXIgIDEwMDAwMDAwMC4wICAgMSAgLT4gIDAuMA0KK2RxcmVtODQxIHJlbWFpbmRlciAgMTAwMDAwMDAwLjQgICAxICAtPiAgMC40DQorZHFyZW04NDIgcmVtYWluZGVyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUNCitkcXJlbTg0MyByZW1haW5kZXIgIDEwMDAwMDAwMC45ICAgMSAgLT4gIDAuOQ0KK2RxcmVtODQ0IHJlbWFpbmRlciAgMTAwMDAwMDAwLjk5OSAxICAtPiAgMC45OTkNCitkcXJlbTg1MCByZW1haW5kZXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gIDMNCitkcXJlbTg1MSByZW1haW5kZXIgIDEwMDAwMDAzICAgICAgNSAgLT4gIDMNCitkcXJlbTg1MiByZW1haW5kZXIgIDEwMDAwMDMgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1MyByZW1haW5kZXIgIDEwMDAwMyAgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1NCByZW1haW5kZXIgIDEwMDAzICAgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1NSByZW1haW5kZXIgIDEwMDMgICAgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1NiByZW1haW5kZXIgIDEwMyAgICAgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1NyByZW1haW5kZXIgIDEzICAgICAgICAgICAgNSAgLT4gIDMNCitkcXJlbTg1OCByZW1haW5kZXIgIDEgICAgICAgICAgICAgNSAgLT4gIDENCisNCistLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2RxcmVtODYwIHJlbWFpbmRlciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkcXJlbTg2MSByZW1haW5kZXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZHFyZW04NjIgcmVtYWluZGVyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2RxcmVtODYzIHJlbWFpbmRlciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkcXJlbTg2NCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZHFyZW04NzAgcmVtYWluZGVyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODcxIHJlbWFpbmRlciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTg3MiByZW1haW5kZXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04NzMgcmVtYWluZGVyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODc0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTg3NSByZW1haW5kZXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04NzYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODc3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTg3OCByZW1haW5kZXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04NzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODgwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzANCitkcXJlbTg4MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwDQorZHFyZW04ODIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMA0KK2RxcmVtODgzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzANCitkcXJlbTg4NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwDQorZHFyZW04ODUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMA0KK2RxcmVtODg2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDANCisNCitkcXJlbTg5MCByZW1haW5kZXIgMTIzZTEgICAgMjAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04OTEgcmVtYWluZGVyIDEyM2UxICAgICAyMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODkyIHJlbWFpbmRlciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTg5MyByZW1haW5kZXIgMTIzZTEgICAgICAgMjAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04OTQgcmVtYWluZGVyIDEyM2UxICAgICAgICAyMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODk1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTg5NiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgMjAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW04OTcgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAyMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtODk5IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkwMCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgMjAwMDAwMCAtPiAxMjMwDQorZHFyZW05MDEgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAyMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTAyIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzANCitkcXJlbTkwMyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgMjAwMCAtPiAxMjMwDQorZHFyZW05MDQgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAyMDAgLT4gICAzMA0KK2RxcmVtOTA1IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAgMTANCitkcXJlbTkwNiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICAgMiAtPiAgICAwDQorDQorZHFyZW05MTAgcmVtYWluZGVyIDEyM2UxICAgIDUwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTExIHJlbWFpbmRlciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkxMiByZW1haW5kZXIgMTIzZTEgICAgICA1MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MTMgcmVtYWluZGVyIDEyM2UxICAgICAgIDUwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTE0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkxNSByZW1haW5kZXIgMTIzZTEgICAgICAgICA1MDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MTYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgIDUwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTE3IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkxOSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICA1MDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MjAgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgIDUwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTIxIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzANCitkcXJlbTkyMiByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICA1MDAwMCAtPiAxMjMwDQorZHFyZW05MjMgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgIDUwMDAgLT4gMTIzMA0KK2RxcmVtOTI0IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzANCitkcXJlbTkyNSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgICA1MCAtPiAgIDMwDQorZHFyZW05MjYgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgIDUgLT4gICAgMA0KKw0KK2RxcmVtOTMwIHJlbWFpbmRlciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkzMSByZW1haW5kZXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MzIgcmVtYWluZGVyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTMzIHJlbWFpbmRlciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkzNCByZW1haW5kZXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MzUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTM2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTkzNyByZW1haW5kZXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwDQorZHFyZW05MzkgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMA0KK2RxcmVtOTQwIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzANCitkcXJlbTk0MSByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwDQorZHFyZW05NDIgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMA0KK2RxcmVtOTQzIHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzANCitkcXJlbTk0NCByZW1haW5kZXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwDQorZHFyZW05NDUgcmVtYWluZGVyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gICA2MA0KK2RxcmVtOTQ2IHJlbWFpbmRlciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgIDYNCisNCitkcXJlbTk1MCByZW1haW5kZXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJlbTk2MSByZW1haW5kZXIgMTIzZTEgICAyOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2MiByZW1haW5kZXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2MyByZW1haW5kZXIgMTIzZTEgICA0OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2NCByZW1haW5kZXIgMTIzZTEgICA1OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2NSByZW1haW5kZXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2NiByZW1haW5kZXIgMTIzZTEgICA3OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2NyByZW1haW5kZXIgMTIzZTEgICA4OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2OCByZW1haW5kZXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJlbTk2OSByZW1haW5kZXIgMTIzZTEgICA5ODc2NTQzMjEwOTg3NjU0IC0+IDEyMzANCisNCitkcXJlbTk4MCByZW1haW5kZXIgMTIzZTEgMTAwMEUyOTkgLT4gMS4yM0UrMyAgLS0gMTIzRSsxIGludGVybmFsbHkNCisNCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIFtmcm9tIGRpdmlkZV0NCitkcXJlbTEwNTEgcmVtYWluZGVyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJlbTEwNTIgcmVtYWluZGVyICAxZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJlbTEwNTMgcmVtYWluZGVyIC0xZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJlbTEwNTQgcmVtYWluZGVyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJlbTEwNTUgcmVtYWluZGVyICAxZS0yNzcgIDFlKzMxMSAtPiAgMUUtMjc3DQorZHFyZW0xMDU2IHJlbWFpbmRlciAgMWUtMjc3IC0xZSszMTEgLT4gIDFFLTI3Nw0KK2RxcmVtMTA1NyByZW1haW5kZXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcNCitkcXJlbTEwNTggcmVtYWluZGVyIC0xZS0yNzcgLTFlKzMxMSAtPiAtMUUtMjc3DQorDQorLS0gR3l1cmlzIGV4YW1wbGUNCitkcXJlbTEwNzAgcmVtYWluZGVyIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzIDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODg5MDAwRS02MTQzIC0+IDguMzM2ODA0NDE4MDk0MDQwOTg5NjMwMDA2ODE5ODgxNzA5RS02MTQzDQorDQorLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QNCitkcXJlbTExMjAgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAwLjc2NTQzMjEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2OA0KK2RxcmVtMTEyMSAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAwLjY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMDk4Nzc5DQorZHFyZW0xMTIyICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAwLjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg4OTANCitkcXJlbTExMjMgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAyLjY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkxMzU4MDI3NDY4Nw0KK2RxcmVtMTEyNCAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuNjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTEzNTgwMjc0NjkyDQorZHFyZW0xMTI1ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAzLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNTENCitkcXJlbTExMjYgIHJlbWFpbmRlciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Nw0KK2RxcmVtMTEyNyAgcmVtYWluZGVyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gIDQuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ2DQorZHFyZW0xMTI4ICByZW1haW5kZXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICA0LjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTkNCisNCistLSBOdWxsIHRlc3RzDQorZHFyZW0xMDAwIHJlbWFpbmRlciAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJlbTEwMDEgcmVtYWluZGVyICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVJlbWFpbmRlck5lYXIuZGVjVGVzdAppbmRleCAwZGQyNzNmLi5iODUwNjI2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUmVtYWluZGVyTmVhci5kZWNUZXN0CkBAIC0xLDYzMSArMSw2MzEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkKLWRxcm1uMDAxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDEgICAgLT4gIDAKLWRxcm1uMDAyIHJlbWFpbmRlcm5lYXIgIDIgICAgIDEgICAgLT4gIDAKLWRxcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDEKLWRxcm1uMDA0IHJlbWFpbmRlcm5lYXIgIDIgICAgIDIgICAgLT4gIDAKLWRxcm1uMDA1IHJlbWFpbmRlcm5lYXIgIDAgICAgIDEgICAgLT4gIDAKLWRxcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDAKLWRxcm1uMDA3IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMgICAgLT4gIDEKLWRxcm1uMDA4IHJlbWFpbmRlcm5lYXIgIDIgICAgIDMgICAgLT4gLTEKLWRxcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDAKLQotZHFybW4wMTAgcmVtYWluZGVybmVhciAgMi40ICAgMSAgICAtPiAgMC40Ci1kcXJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQKLWRxcm1uMDEyIHJlbWFpbmRlcm5lYXIgIC0yLjQgIDEgICAgLT4gIC0wLjQKLWRxcm1uMDEzIHJlbWFpbmRlcm5lYXIgIC0yLjQgIC0xICAgLT4gIC0wLjQKLWRxcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDAKLWRxcm1uMDE1IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDEgICAgLT4gIDAuNDAwCi1kcXJtbjAxNiByZW1haW5kZXJuZWFyICAyLjQgICAyICAgIC0+ICAwLjQKLWRxcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwCi1kcXJtbjAxOCByZW1haW5kZXJuZWFyICAyLiAgICAyICAgIC0+ICAwCi1kcXJtbjAxOSByZW1haW5kZXJuZWFyICAyMCAgICAyMCAgIC0+ICAwCi0KLWRxcm1uMDIwIHJlbWFpbmRlcm5lYXIgIDE4NyAgIDE4NyAgICAtPiAgMAotZHFybW4wMjEgcmVtYWluZGVybmVhciAgNSAgICAgMiAgICAgIC0+ICAxCi1kcXJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMAotZHFybW4wMjMgcmVtYWluZGVybmVhciAgNSAgICAgMi4wMDAgIC0+ICAxLjAwMAotZHFybW4wMjQgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAotZHFybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMAotCi1kcXJtbjAzMCByZW1haW5kZXJuZWFyICAxICAgICAyICAgICAgLT4gIDEKLWRxcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQotZHFybW4wMzIgcmVtYWluZGVybmVhciAgMSAgICAgOCAgICAgIC0+ICAxCi0KLWRxcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQotZHFybW4wMzQgcmVtYWluZGVybmVhciAgMSAgICAgMzIgICAgIC0+ICAxCi1kcXJtbjAzNSByZW1haW5kZXJuZWFyICAxICAgICA2NCAgICAgLT4gIDEKLWRxcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQotZHFybW4wNDEgcmVtYWluZGVybmVhciAgMSAgICAtNCAgICAgIC0+ICAxCi1kcXJtbjA0MiByZW1haW5kZXJuZWFyICAxICAgIC04ICAgICAgLT4gIDEKLWRxcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQotZHFybW4wNDQgcmVtYWluZGVybmVhciAgMSAgICAtMzIgICAgIC0+ICAxCi1kcXJtbjA0NSByZW1haW5kZXJuZWFyICAxICAgIC02NCAgICAgLT4gIDEKLWRxcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTEKLWRxcm1uMDUxIHJlbWFpbmRlcm5lYXIgLTEgICAgIDQgICAgICAtPiAgLTEKLWRxcm1uMDUyIHJlbWFpbmRlcm5lYXIgLTEgICAgIDggICAgICAtPiAgLTEKLWRxcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTEKLWRxcm1uMDU0IHJlbWFpbmRlcm5lYXIgLTEgICAgIDMyICAgICAtPiAgLTEKLWRxcm1uMDU1IHJlbWFpbmRlcm5lYXIgLTEgICAgIDY0ICAgICAtPiAgLTEKLWRxcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTEKLWRxcm1uMDYxIHJlbWFpbmRlcm5lYXIgLTEgICAgLTQgICAgICAtPiAgLTEKLWRxcm1uMDYyIHJlbWFpbmRlcm5lYXIgLTEgICAgLTggICAgICAtPiAgLTEKLWRxcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTEKLWRxcm1uMDY0IHJlbWFpbmRlcm5lYXIgLTEgICAgLTMyICAgICAtPiAgLTEKLWRxcm1uMDY1IHJlbWFpbmRlcm5lYXIgLTEgICAgLTY0ICAgICAtPiAgLTEKLQotZHFybW4wNjYgcmVtYWluZGVybmVhciAgICAgICAgICA5LjkgICAxICAtPiAtMC4xCi1kcXJtbjA2NyByZW1haW5kZXJuZWFyICAgICAgICAgOTkuNyAgIDEgIC0+IC0wLjMKLWRxcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMAotZHFybW4wNjkgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjQgICAxICAtPiAwLjQKLWRxcm1uMDcwIHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS41ICAgMSAgLT4gLTAuNQotZHFybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xCi1kcXJtbjA3MiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTkuOTk5IDEgIC0+IC0wLjAwMQotZHFybW4wNzMgcmVtYWluZGVybmVhciAgOTk5OTk5Ljk5OTk5OSAxICAtPiAtMC4wMDAwMDEKLWRxcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMAotZHFybW4wNzUgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAwCi1kcXJtbjA3NiByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDIgIC0+IC0xCi1kcXJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDAKLWRxcm1uMDc4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgNCAgLT4gLTEKLQotZHFybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwCi1kcXJtbjA4MSByZW1haW5kZXJuZWFyICAuMCAgICAgICAgICAgIDEgIC0+IDAuMAotZHFybW4wODIgcmVtYWluZGVybmVhciAgMC4wMCAgICAgICAgICAxICAtPiAwLjAwCi1kcXJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDAKLWRxcm1uMDg0IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzMgICAgICAgMSAgLT4gMAotZHFybW4wODUgcmVtYWluZGVybmVhciAgMC4wMEUrMiAgICAgICAxICAtPiAwCi1kcXJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMAotZHFybW4wODcgcmVtYWluZGVybmVhciAgMC4wMEUrMCAgICAgICAxICAtPiAwLjAwCi1kcXJtbjA4OCByZW1haW5kZXJuZWFyICAwLjAwRS0wICAgICAgIDEgIC0+IDAuMDAKLWRxcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDAKLWRxcm1uMDkwIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTIgICAgICAgMSAgLT4gMC4wMDAwCi1kcXJtbjA5MSByZW1haW5kZXJuZWFyICAwLjAwRS0zICAgICAgIDEgIC0+IDAuMDAwMDAKLWRxcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDAKLWRxcm1uMDkzIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTUgICAgICAgMSAgLT4gMEUtNwotZHFybW4wOTQgcmVtYWluZGVybmVhciAgMC4wMEUtNiAgICAgICAxICAtPiAwRS04Ci1kcXJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0Ci0KLS0tIFZhcmlvdXMgZmxhdm91cnMgb2YgcmVtYWluZGVybmVhciBieSAwCi1kcXJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjEwMiByZW1haW5kZXJuZWFyICAwICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjEwMyByZW1haW5kZXJuZWFyIC0wICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjEwNSByZW1haW5kZXJuZWFyICAwLjBFNSAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjEwNiByZW1haW5kZXJuZWFyICAwLjAwMCAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi0tLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQKLS0tIElFRUUgODU0IGlzIGV4cGxpY2l0IHRoYXQgaXQgaXMgSW52YWxpZCBvcGVyYXRpb24gLi4gZm9yCi0tLSByZW1haW5kZXItbmVhciwgYW55d2F5XQotZHFybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjEwOCByZW1haW5kZXJuZWFyICAwLjAxICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMTA5IHJlbWFpbmRlcm5lYXIgIDAuMSAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjExMSByZW1haW5kZXJuZWFyICAxICAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMTEyIHJlbWFpbmRlcm5lYXIgMTAgICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjExNCByZW1haW5kZXJuZWFyIDFFKzM4MCAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMTE1IHJlbWFpbmRlcm5lYXIgIDAuMDAwMSAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjExOSByZW1haW5kZXJuZWFyICAwLjEgICAgLTAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMTIwIHJlbWFpbmRlcm5lYXIgIDEgICAgICAtMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjEyMiByZW1haW5kZXJuZWFyIDEwICAgICAgLTAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMTIzIHJlbWFpbmRlcm5lYXIgMUUrMTAwICAtMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhbmQgemVyb3Mgb24gbGVmdAotZHFybW4xMzAgcmVtYWluZGVybmVhciAgMCAgICAgIDEgICAtPiAgMAotZHFybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMAotZHFybW4xMzIgcmVtYWluZGVybmVhciAgMC4wICAgIDEgICAtPiAgMC4wCi1kcXJtbjEzMyByZW1haW5kZXJuZWFyICAwLjAgICAtMSAgIC0+ICAwLjAKLWRxcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTAKLWRxcm1uMTM1IHJlbWFpbmRlcm5lYXIgLTAgICAgIC0xICAgLT4gLTAKLWRxcm1uMTM2IHJlbWFpbmRlcm5lYXIgLTAuMCAgICAxICAgLT4gLTAuMAotZHFybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wCi0KLS0tIDAuNWVycwotZHFybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQotZHFybW4xNDQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQotZHFybW4xNDUgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMSAgLT4gIDAuNTAKLWRxcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMAotZHFybW4xNDcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTAKLWRxcm1uMTQ4IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDEgIC0+ICAwLjUwCi1kcXJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDAKLQotLS0gc3RlYWRpZXMKLWRxcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwCi1kcXJtbjE1MSByZW1haW5kZXJuZWFyICAxICAyICAgLT4gMQotZHFybW4xNTIgcmVtYWluZGVybmVhciAgMSAgMyAgIC0+IDEKLWRxcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxCi1kcXJtbjE1NCByZW1haW5kZXJuZWFyICAxICA1ICAgLT4gMQotZHFybW4xNTUgcmVtYWluZGVybmVhciAgMSAgNiAgIC0+IDEKLWRxcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxCi1kcXJtbjE1NyByZW1haW5kZXJuZWFyICAxICA4ICAgLT4gMQotZHFybW4xNTggcmVtYWluZGVybmVhciAgMSAgOSAgIC0+IDEKLWRxcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxCi1kcXJtbjE2MCByZW1haW5kZXJuZWFyICAxICAxICAgLT4gMAotZHFybW4xNjEgcmVtYWluZGVybmVhciAgMiAgMSAgIC0+IDAKLWRxcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwCi1kcXJtbjE2MyByZW1haW5kZXJuZWFyICA0ICAxICAgLT4gMAotZHFybW4xNjQgcmVtYWluZGVybmVhciAgNSAgMSAgIC0+IDAKLWRxcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwCi1kcXJtbjE2NiByZW1haW5kZXJuZWFyICA3ICAxICAgLT4gMAotZHFybW4xNjcgcmVtYWluZGVybmVhciAgOCAgMSAgIC0+IDAKLWRxcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwCi1kcXJtbjE2OSByZW1haW5kZXJuZWFyICAxMCAxICAgLT4gMAotCi0tLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyCi1kcXJtbjE3MSByZW1haW5kZXJuZWFyICAgMC40ICAxLjAyMCAtPiAgMC40MDAKLWRxcm1uMTcyIHJlbWFpbmRlcm5lYXIgICAwLjUwIDEuMDIwIC0+ICAwLjUwMAotZHFybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwCi1kcXJtbjE3NCByZW1haW5kZXJuZWFyICAgMC41MiAxLjAyMCAtPiAtMC41MDAKLWRxcm1uMTc1IHJlbWFpbmRlcm5lYXIgICAwLjYgIDEuMDIwIC0+IC0wLjQyMAotCi0tLSBNb3JlIGZsYXZvdXJzIG9mIHJlbWFpbmRlcm5lYXIgYnkgMAotZHFybW4yMDEgcmVtYWluZGVybmVhciAgMCAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkCi1kcXJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQKLWRxcm1uMjAzIHJlbWFpbmRlcm5lYXIgIDAuMDAwICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZAotZHFybW4yMDQgcmVtYWluZGVybmVhciAgMC4wMDAxIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjIwNiByZW1haW5kZXJuZWFyICAwLjEgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4yMDcgcmVtYWluZGVybmVhciAgMSAgICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjIwOSByZW1haW5kZXJuZWFyIDEwICAgICAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW4yMTAgcmVtYWluZGVybmVhciAxRSsxMDAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHRlc3RzIGZyb20gdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24KLWRxcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQotZHFybW4yMjIgcmVtYWluZGVybmVhciAgMTAgICAgIDYgICAtPiAtMgotZHFybW4yMjMgcmVtYWluZGVybmVhciAgMTAgICAgIDMgICAtPiAgMQotZHFybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQotZHFybW4yMjUgcmVtYWluZGVybmVhciAgMTAuMiAgIDEgICAtPiAwLjIKLWRxcm1uMjI2IHJlbWFpbmRlcm5lYXIgIDEwICAgICAwLjMgLT4gMC4xCi1kcXJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMKLQotLS0gc29tZSBkaWZmZXJlbmNlcyBmcm9tIHJlbWFpbmRlcgotZHFybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwCi1kcXJtbjIzMiByZW1haW5kZXJuZWFyICAtMC41MCAxLjAyMCAtPiAtMC41MDAKLWRxcm1uMjMzIHJlbWFpbmRlcm5lYXIgIC0wLjUxIDEuMDIwIC0+IC0wLjUxMAotZHFybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwCi1kcXJtbjIzNSByZW1haW5kZXJuZWFyICAtMC42ICAxLjAyMCAtPiAgMC40MjAKLQotLS0gaGlnaCBYcwotZHFybW4yNDAgcmVtYWluZGVybmVhciAgMUUrMiAgMS4wMCAgLT4gIDAuMDAKLQotLS0gZHFybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwKLWRxcm1uMzAxIHJlbWFpbmRlcm5lYXIgICAxICAgIDMgICAgIC0+ICAxCi1kcXJtbjMwMiByZW1haW5kZXJuZWFyICAgNSAgICA1ICAgICAtPiAgMAotZHFybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMKLWRxcm1uMzA0IHJlbWFpbmRlcm5lYXIgICAxMyAgIDUwICAgIC0+ICAxMwotZHFybW4zMDUgcmVtYWluZGVybmVhciAgIDEzICAgMTAwICAgLT4gIDEzCi1kcXJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMKLWRxcm1uMzA3IHJlbWFpbmRlcm5lYXIgICAuMTMgICAgMSAgIC0+ICAwLjEzCi1kcXJtbjMwOCByZW1haW5kZXJuZWFyICAgMC4xMzMgIDEgICAtPiAgMC4xMzMKLWRxcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMKLWRxcm1uMzEwIHJlbWFpbmRlcm5lYXIgICAxLjAzMyAgMSAgIC0+ICAwLjAzMwotZHFybW4zMTEgcmVtYWluZGVybmVhciAgIDEwLjMzICAxICAgLT4gIDAuMzMKLWRxcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzCi1kcXJtbjMxMyByZW1haW5kZXJuZWFyICAgMTAzLjMgIDEgICAtPiAgMC4zCi1kcXJtbjMxNCByZW1haW5kZXJuZWFyICAgMTMzICAgMTAgICAtPiAgMwotZHFybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMKLWRxcm1uMzE2IHJlbWFpbmRlcm5lYXIgICAxMDMzICA1MCAgIC0+IC0xNwotZHFybW4zMTcgcmVtYWluZGVybmVhciAgIDEwMS4wICAzICAgLT4gLTEuMAotZHFybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMAotZHFybW4zMTkgcmVtYWluZGVybmVhciAgIDEwMy4wICAzICAgLT4gIDEuMAotZHFybW4zMjAgcmVtYWluZGVybmVhciAgIDIuNDAgICAxICAgLT4gIDAuNDAKLWRxcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMAotZHFybW4zMjIgcmVtYWluZGVybmVhciAgIDIuNCAgICAxICAgLT4gIDAuNAotZHFybW4zMjMgcmVtYWluZGVybmVhciAgIDIuNCAgICAyICAgLT4gIDAuNAotZHFybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwCi1kcXJtbjMyNSByZW1haW5kZXJuZWFyICAgMSAgIDAuMyAgICAtPiAgMC4xCi1kcXJtbjMyNiByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAgICAtPiAgMC4xMAotZHFybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwCi1kcXJtbjMyOCByZW1haW5kZXJuZWFyICAgMSAgIDAuMzAwMCAtPiAgMC4xMDAwCi1kcXJtbjMyOSByZW1haW5kZXJuZWFyICAgMS4wICAgIDAuMyAtPiAgMC4xCi1kcXJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMAotZHFybW4zMzEgcmVtYWluZGVybmVhciAgIDEuMDAwICAwLjMgLT4gIDAuMTAwCi1kcXJtbjMzMiByZW1haW5kZXJuZWFyICAgMS4wMDAwIDAuMyAtPiAgMC4xMDAwCi1kcXJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41Ci1kcXJtbjMzNCByZW1haW5kZXJuZWFyICAgMC41ICAyLjEgICAtPiAgMC41Ci1kcXJtbjMzNSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MAotZHFybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwCi1kcXJtbjMzNyByZW1haW5kZXJuZWFyICAgMC41MCAyICAgICAtPiAgMC41MAotZHFybW4zMzggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTAKLWRxcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMAotCi1kcXJtbjM0MCByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAxICAgIC0+ICAtMUUtNwotZHFybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04Ci1kcXJtbjM0MiByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDEgICAgLT4gIC0xRS05Ci1kcXJtbjM0MyByZW1haW5kZXJuZWFyICAgMC41ICAgMC41MDAwMDAwMDAxICAgIC0+ICAtMUUtMTAKLWRxcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTEKLWRxcm1uMzQ1IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTkgICAgLT4gIDFFLTcKLWRxcm1uMzQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5ICAgIC0+ICAxRS04Ci1kcXJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkKLWRxcm1uMzQ4IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTkgICAgLT4gIDFFLTEwCi1kcXJtbjM0OSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5OSAgICAtPiAgMUUtMTEKLWRxcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTIKLQotZHFybW4zNTEgcmVtYWluZGVybmVhciAgIDAuMDMgIDcgIC0+ICAwLjAzCi1kcXJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDEKLWRxcm1uMzUzIHJlbWFpbmRlcm5lYXIgICA0LjEgICAyICAgIC0+ICAwLjEKLWRxcm1uMzU0IHJlbWFpbmRlcm5lYXIgICA0LjAxICAgMiAgICAtPiAgMC4wMQotZHFybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDEKLWRxcm1uMzU2IHJlbWFpbmRlcm5lYXIgICA0LjAwMDEgICAyICAgIC0+ICAwLjAwMDEKLWRxcm1uMzU3IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAxICAgMiAgICAtPiAgMC4wMDAwMQotZHFybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDEKLWRxcm1uMzU5IHJlbWFpbmRlcm5lYXIgICA0LjAwMDAwMDEgICAyICAgIC0+ICAxRS03Ci0KLWRxcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MAotZHFybW4zNjEgcmVtYWluZGVybmVhciAgIDAuOCAgIDEyICAgICAtPiAgMC44Ci1kcXJtbjM2MiByZW1haW5kZXJuZWFyICAgMC44ICAgMC4yICAgIC0+ICAwLjAKLWRxcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQotZHFybW4zNjQgcmVtYWluZGVybmVhciAgIDAuODAwICAgMTIgICAtPiAgMC44MDAKLWRxcm1uMzY1IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEuNyAgLT4gIDAuODAwCi1kcXJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMAotCi0tLSByb3VuZCB0byBldmVuCi1kcXJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxCi1kcXJtbjM3MiByZW1haW5kZXJuZWFyICAgMTIyICAgICAyICAgIC0+ICAwCi1kcXJtbjM3MyByZW1haW5kZXJuZWFyICAgMTIzICAgICAyICAgIC0+IC0xCi1kcXJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwCi1kcXJtbjM3NSByZW1haW5kZXJuZWFyICAgMTI1ICAgICAyICAgIC0+ICAxCi1kcXJtbjM3NiByZW1haW5kZXJuZWFyICAgMTI2ICAgICAyICAgIC0+ICAwCi1kcXJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xCi0KLWRxcm1uMzgxIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEgICAgICAgICAtPiAgMAotZHFybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQKLWRxcm1uMzgzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDAxICAgICAtPiAtMC4zMzMKLWRxcm1uMzg0IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDEuMDEgICAgICAtPiAtMC4yMwotZHFybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMKLWRxcm1uMzg2IHJlbWFpbmRlcm5lYXIgMTIzNTUgIDQgICAgICAgICAtPiAtMQotZHFybW4zODcgcmVtYWluZGVybmVhciAxMjM0NSAgNCAgICAgICAgIC0+ICAxCi1kcXJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQotZHFybW4zODkgcmVtYWluZGVybmVhciAxMjM0NSAgNC4wMDAxICAgIC0+ICAwLjY5MTQKLWRxcm1uMzkwIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOSAgICAgICAtPiAgMS45Ci1kcXJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYKLWRxcm1uMzkyIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5ICAgICAtPiAgMi40NjkKLWRxcm1uMzkzIHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuOTk5OSAgICAtPiAgMC4yNDY5Ci1kcXJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDAKLWRxcm1uMzk1IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAwMSAgICAtPiAtMC4yNDY5Ci1kcXJtbjM5NiByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMSAgICAgLT4gLTIuNDY5Ci1kcXJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYKLWRxcm1uMzk4IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMSAgICAgICAtPiAtMi4xCi0KLS0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzCi1kcXJtbjQwMSByZW1haW5kZXJuZWFyICAgMC40ICAgICAgICAgMSAgIC0+ICAwLjQKLWRxcm1uNDAyIHJlbWFpbmRlcm5lYXIgICAwLjQ1ICAgICAgICAxICAgLT4gIDAuNDUKLWRxcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1Ci1kcXJtbjQwNCByZW1haW5kZXJuZWFyICAgMC40NTU1ICAgICAgMSAgIC0+ICAwLjQ1NTUKLWRxcm1uNDA1IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1ICAgICAxICAgLT4gIDAuNDU1NTUKLWRxcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1Ci1kcXJtbjQwNyByZW1haW5kZXJuZWFyICAgMC40NTU1NTU1ICAgMSAgIC0+ICAwLjQ1NTU1NTUKLWRxcm1uNDA4IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1ICAxICAgLT4gIDAuNDU1NTU1NTUKLWRxcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1Ci0tLSB3aXRoIHNwaWxsLi4uIFs0MTIgZXhlcmNpc2VzIHN0aWNrdGFiIGxvb3BdCi1kcXJtbjQxMSByZW1haW5kZXJuZWFyICAgMC41ICAgICAgICAgMSAgIC0+ICAwLjUKLWRxcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUKLWRxcm1uNDEzIHJlbWFpbmRlcm5lYXIgICAwLjU1NSAgICAgICAxICAgLT4gLTAuNDQ1Ci1kcXJtbjQxNCByZW1haW5kZXJuZWFyICAgMC41NTU1ICAgICAgMSAgIC0+IC0wLjQ0NDUKLWRxcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUKLWRxcm1uNDE2IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NSAgICAxICAgLT4gLTAuNDQ0NDQ1Ci1kcXJtbjQxNyByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1ICAgMSAgIC0+IC0wLjQ0NDQ0NDUKLWRxcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUKLWRxcm1uNDE5IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1NSAxICAgLT4gLTAuNDQ0NDQ0NDQ1Ci0KLS0tIGZvbGRkb3ducwotZHFybW40MjEgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgICAgICAgIDEgIC0+ICAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUKLWRxcm1uNDIyIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAxRSs2MTQzICAtPiAgIDBFKzYxMTEgQ2xhbXBlZAotZHFybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCi1kcXJtbjQyNCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgM0UrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKLWRxcm1uNDI1IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA0RSs2MTQzICAtPiAgIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAotZHFybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkCi1kcXJtbjQyNyByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgNkUrNjE0MyAgLT4gIC0yLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKLWRxcm1uNDI4IHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICA3RSs2MTQzICAtPiAgIDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgQ2xhbXBlZAotZHFybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkCi1kcXJtbjQzMCByZW1haW5kZXJuZWFyICAgMUUrNjE0NCAgOUUrNjE0MyAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzIENsYW1wZWQKLS0tIHRpbmllcwotZHFybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3NgotZHFybW40MzIgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDJFLTYxNzYgIC0+ICAgMEUtNjE3NgotZHFybW40MzMgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDNFLTYxNzYgIC0+ICAgMUUtNjE3NiBTdWJub3JtYWwKLWRxcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCi1kcXJtbjQzNSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNUUtNjE3NiAgLT4gICAwRS02MTc2Ci1kcXJtbjQzNiByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgNkUtNjE3NiAgLT4gIC0yRS02MTc2IFN1Ym5vcm1hbAotZHFybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwKLWRxcm1uNDM4IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA4RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsCi1kcXJtbjQzOSByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOUUtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbAotZHFybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3NgotZHFybW40NDEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwKLWRxcm1uNDQyIHJlbWFpbmRlcm5lYXIgMTAwRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsCi1kcXJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2Ci1kcXJtbjQ0NCByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMUUtNjE3NiAgLT4gIC04RS02MTc2IFN1Ym5vcm1hbAotZHFybW40NDUgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMzBFLTYxNzYgIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwKLQotLS0gemVybyBzaWducwotZHFybW42NTAgcmVtYWluZGVybmVhciAgMSAgMSAtPiAgMAotZHFybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMAotZHFybW42NTIgcmVtYWluZGVybmVhciAgMSAtMSAtPiAgMAotZHFybW42NTMgcmVtYWluZGVybmVhciAtMSAtMSAtPiAtMAotZHFybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMAotZHFybW42NTUgcmVtYWluZGVybmVhciAtMCAgMSAtPiAtMAotZHFybW42NTYgcmVtYWluZGVybmVhciAgMCAtMSAtPiAgMAotZHFybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMAotZHFybW42NTggcmVtYWluZGVybmVhciAgMC4wMCAgMSAgLT4gIDAuMDAKLWRxcm1uNjU5IHJlbWFpbmRlcm5lYXIgLTAuMDAgIDEgIC0+IC0wLjAwCi0KLS0tIFNwZWNpYWxzCi1kcXJtbjY4MCByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4MiByZW1haW5kZXJuZWFyICBJbmYgIC0xICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4MyByZW1haW5kZXJuZWFyICBJbmYgICAwICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4NSByZW1haW5kZXJuZWFyICBJbmYgICAxICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4NiByZW1haW5kZXJuZWFyICBJbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjY4OCByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMAotZHFybW42ODkgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTEKLWRxcm1uNjkyIHJlbWFpbmRlcm5lYXIgIDAgICAgIEluZiAgIC0+ICAwCi1kcXJtbjY5MyByZW1haW5kZXJuZWFyIC0wICAgICBJbmYgICAtPiAtMAotZHFybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDEKLWRxcm1uNjk1IHJlbWFpbmRlcm5lYXIgIDEwMDAgIEluZiAgIC0+ICAxMDAwCi1kcXJtbjY5NiByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxcm1uNzAwIHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzAxIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzAzIHJlbWFpbmRlcm5lYXIgLUluZiAgLTAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA0IHJlbWFpbmRlcm5lYXIgLUluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA2IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA3IHJlbWFpbmRlcm5lYXIgLUluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzA5IHJlbWFpbmRlcm5lYXIgLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1kcXJtbjcxMCByZW1haW5kZXJuZWFyIC0xICAgIC1JbmYgICAtPiAtMQotZHFybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTAKLWRxcm1uNzEyIHJlbWFpbmRlcm5lYXIgIDAgICAgLUluZiAgIC0+ICAwCi1kcXJtbjcxMyByZW1haW5kZXJuZWFyICAxICAgIC1JbmYgICAtPiAgMQotZHFybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDAKLWRxcm1uNzE1IHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotZHFybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTgotZHFybW43MjIgcmVtYWluZGVybmVhciAgTmFOIC0xMDAwICAgLT4gIE5hTgotZHFybW43MjMgcmVtYWluZGVybmVhciAgTmFOIC0xICAgICAgLT4gIE5hTgotZHFybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTgotZHFybW43MjUgcmVtYWluZGVybmVhciAtTmFOICAwICAgICAgLT4gLU5hTgotZHFybW43MjYgcmVtYWluZGVybmVhciAgTmFOICAxICAgICAgLT4gIE5hTgotZHFybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTgotZHFybW43MjggcmVtYWluZGVybmVhciAgTmFOICBJbmYgICAgLT4gIE5hTgotZHFybW43MjkgcmVtYWluZGVybmVhciAgTmFOIC1OYU4gICAgLT4gIE5hTgotZHFybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTgotZHFybW43MzEgcmVtYWluZGVybmVhciAtMTAwMCBOYU4gICAgLT4gIE5hTgotZHFybW43MzIgcmVtYWluZGVybmVhciAtMSAgICBOYU4gICAgLT4gIE5hTgotZHFybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTgotZHFybW43MzQgcmVtYWluZGVybmVhciAgMCAgICBOYU4gICAgLT4gIE5hTgotZHFybW43MzUgcmVtYWluZGVybmVhciAgMSAgIC1OYU4gICAgLT4gLU5hTgotZHFybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTgotZHFybW43MzcgcmVtYWluZGVybmVhciAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kcXJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NDIgcmVtYWluZGVybmVhciAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzQzIHJlbWFpbmRlcm5lYXIgLXNOYU4gLTEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NDUgcmVtYWluZGVybmVhciAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzQ2IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NDkgcmVtYWluZGVybmVhciAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzUwIHJlbWFpbmRlcm5lYXIgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NTIgcmVtYWluZGVybmVhciAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzUzIHJlbWFpbmRlcm5lYXIgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NTUgcmVtYWluZGVybmVhciAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzU2IHJlbWFpbmRlcm5lYXIgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFybW43NTggcmVtYWluZGVybmVhciAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm1uNzU5IHJlbWFpbmRlcm5lYXIgIEluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2luZyBOYU5zCi1kcXJtbjc2MCByZW1haW5kZXJuZWFyICBOYU4xICAgTmFONyAgIC0+ICBOYU4xCi1kcXJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc2MiByZW1haW5kZXJuZWFyICBOYU4zICBzTmFOOSAgIC0+ICBOYU45IEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc2MyByZW1haW5kZXJuZWFyIHNOYU40ICBzTmFOMTAgIC0+ICBOYU40IEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQotZHFybW43NjUgcmVtYWluZGVybmVhciAgTmFONiAgIE5hTjEyICAtPiAgTmFONgotZHFybW43NjYgcmVtYWluZGVybmVhciAgSW5mICAgIE5hTjEzICAtPiAgTmFOMTMKLWRxcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0Ci1kcXJtbjc2OCByZW1haW5kZXJuZWFyICAgIDAgICAgTmFOMTUgIC0+ICBOYU4xNQotZHFybW43NjkgcmVtYWluZGVybmVhciAgTmFOMTYgICAtMCAgICAtPiAgTmFOMTYKLQotLS0gZWRnZSBjYXNlcyBvZiBpbXBvc3NpYmxlCi1kcXJtbjc3MCAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgMTAgICAgLT4gLTQKLWRxcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMAotZHFybW43NzIgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjEgIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFybW43NzMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1MDAwMDAwMDAwMDAwMDAwMDAwNjc4OTAxMjM0NTYgICAwLjAxIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotCi0tLSBsb25nIG9wZXJhbmQgY2hlY2tzCi1kcXJtbjgwMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kcXJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCi1kcXJtbjgwMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCi1kcXJtbjgwNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kcXJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCi1kcXJtbjgwNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCi1kcXJtbjgwNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kcXJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kcXJtbjgwOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCi1kcXJtbjgxMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kcXJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAotZHFybW44MTIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi1kcXJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwCi1kcXJtbjgyMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxCi1kcXJtbjgyMyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAgIDEwICAtPiAwCi1kcXJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxCi1kcXJtbjgyNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwCi1kcXJtbjgyNiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MCAgICAtPiAxCi1kcXJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxCi1kcXJtbjgyOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1kcXJtbjgyOSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAxIDEwMCAtPiAxCi1kcXJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxCi1kcXJtbjgzMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNAotZHFybW44MzIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi0tLSBmcm9tIGRpdmlkZWludAotZHFybW44NDAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjAgICAxICAtPiAgMC4wCi1kcXJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQKLWRxcm1uODQyIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMC41ICAgMSAgLT4gIDAuNQotZHFybW44NDMgcmVtYWluZGVybmVhciAgMTAwMDAwMDAwLjkgICAxICAtPiAtMC4xCi1kcXJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQotZHFybW44NTAgcmVtYWluZGVybmVhciAgMTAwMDAwMDAzICAgICA1ICAtPiAtMgotZHFybW44NTEgcmVtYWluZGVybmVhciAgMTAwMDAwMDMgICAgICA1ICAtPiAtMgotZHFybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMgotZHFybW44NTMgcmVtYWluZGVybmVhciAgMTAwMDAzICAgICAgICA1ICAtPiAtMgotZHFybW44NTQgcmVtYWluZGVybmVhciAgMTAwMDMgICAgICAgICA1ICAtPiAtMgotZHFybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMgotZHFybW44NTYgcmVtYWluZGVybmVhciAgMTAzICAgICAgICAgICA1ICAtPiAtMgotZHFybW44NTcgcmVtYWluZGVybmVhciAgMTMgICAgICAgICAgICA1ICAtPiAtMgotZHFybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQotCi0tLSBWbGFkaW1pcidzIGNhc2VzICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NgotZHFybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRxcm1uODYxIHJlbWFpbmRlcm5lYXIgMTIzMCAgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCi1kcXJtbjg2MiByZW1haW5kZXJuZWFyIDEyLjNlMiAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMAotZHFybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzAKLWRxcm1uODY0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwCi1kcXJtbjg3MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODcyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAxMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg3MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDEwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODc1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAxMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg3NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDEwMDAwMDAwMDAgLT4gMTIzMAotZHFybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODc4IHJlbWFpbmRlcm5lYXIgMTIzMCAgICAgICAgICAgIDEwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg3OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMTAwMDAwMDAgLT4gMTIzMAotZHFybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzAKLWRxcm1uODgxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDEwMDAwMCAtPiAxMjMwCi1kcXJtbjg4MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMTAwMDAgLT4gMTIzMAotZHFybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzAKLWRxcm1uODg0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDEwMCAtPiAgIDMwCi1kcXJtbjg4NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMTAgLT4gICAgMAotZHFybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDAKLQotZHFybW44OTAgcmVtYWluZGVybmVhciAxMjNlMSAgICAyMDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg5MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMjAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW44OTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAyMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg5NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMjAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW44OTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAyMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjg5OSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgMjAwMDAwMDAgLT4gMTIzMAotZHFybW45MDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAyMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwCi1kcXJtbjkwMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgMjAwMDAgLT4gMTIzMAotZHFybW45MDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAyMDAwIC0+IC03NzAKLWRxcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwCi1kcXJtbjkwNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgMjAgLT4gIC0xMAotZHFybW45MDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAyIC0+ICAgIDAKLQotZHFybW45MTAgcmVtYWluZGVybmVhciAxMjNlMSAgICA1MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTExIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDUwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW45MTMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA1MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTE0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDUwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW45MTYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA1MDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTE3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDUwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMAotZHFybW45MjAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA1MDAwMDAwIC0+IDEyMzAKLWRxcm1uOTIxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDUwMDAwMCAtPiAxMjMwCi1kcXJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMAotZHFybW45MjMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA1MDAwIC0+IDEyMzAKLWRxcm1uOTI0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDUwMCAtPiAgMjMwCi1kcXJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMAotZHFybW45MjYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA1IC0+ICAgIDAKLQotZHFybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTMxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDkwMDAwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkzMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgOTAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTM0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDkwMDAwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkzNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgOTAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzAKLWRxcm1uOTM3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDkwMDAwMDAwMCAtPiAxMjMwCi1kcXJtbjkzOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgOTAwMDAwMDAgLT4gMTIzMAotZHFybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzAKLWRxcm1uOTQxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDkwMDAwMCAtPiAxMjMwCi1kcXJtbjk0MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgOTAwMDAgLT4gMTIzMAotZHFybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzAKLWRxcm1uOTQ0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDkwMCAtPiAgMzMwCi1kcXJtbjk0NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgOTAgLT4gIC0zMAotZHFybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMKLQotZHFybW45NTAgcmVtYWluZGVybmVhciAxMjNlMSAgIDEwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMAotZHFybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjIgcmVtYWluZGVybmVhciAxMjNlMSAgIDM5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjMgcmVtYWluZGVybmVhciAxMjNlMSAgIDQ5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjUgcmVtYWluZGVybmVhciAxMjNlMSAgIDY5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjYgcmVtYWluZGVybmVhciAxMjNlMSAgIDc5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjggcmVtYWluZGVybmVhciAxMjNlMSAgIDk5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMAotZHFybW45NjkgcmVtYWluZGVybmVhciAxMjNlMSAgIDk4NzY1NDMyMTA5ODc2NTQgLT4gMTIzMAotCi1kcXJtbjk4MCByZW1haW5kZXJuZWFyIDEyM2UxIDEwMDBFMjk5IC0+IDEuMjNFKzMgIC0tIDEyM0UrMSBpbnRlcm5hbGx5Ci0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQotZHFybW4xMDUxIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFybW4xMDUyIHJlbWFpbmRlcm5lYXIgIDFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFybW4xMDU0IHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAtMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQotZHFybW4xMDU1IHJlbWFpbmRlcm5lYXIgIDFlLTI3NyAgMWUrMzExIC0+ICAxRS0yNzcKLWRxcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3Ci1kcXJtbjEwNTcgcmVtYWluZGVybmVhciAtMWUtMjc3ICAxZSszMTEgLT4gLTFFLTI3NwotZHFybW4xMDU4IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAtMWUrMzExIC0+IC0xRS0yNzcKLQotLS0gR3l1cmlzIGV4YW1wbGUKLWRxcm1uMTA3MCByZW1haW5kZXIgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMgOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODkwMDBFLTYxNDMgLT4gOC4zMzY4MDQ0MTgwOTQwNDA5ODk2MzAwMDY4MTk4ODE3MDlFLTYxNDMKLQotLS0gZGVzdHJ1Y3RpdmUgc3VidHJhY3QKLWRxcm1uMTEwMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMC4yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzMKLWRxcm1uMTEwMiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjIKLWRxcm1uMTEwMyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDExMTEKLWRxcm1uMTEwNCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI1NSAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4zMDg2NDE5NzI1MzA4NjQxOTcyNTMwODY0MTk3MjUzMTQKLWRxcm1uMTEwNSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTIKLWRxcm1uMTEwNiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA0Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIC0xLjMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NDgKLWRxcm1uMTEwNyAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAgIDEuNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKLWRxcm1uMTEwOCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMKLWRxcm1uMTEwOSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAtMS4yNDY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDcKLWRxcm1uMTExMCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIDEuNTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTQKLWRxcm1uMTExMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDIKLQotLS0gTnVsbCB0ZXN0cwotZHFybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJtbjEwMDEgcmVtYWluZGVybmVhciAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFSZW1haW5kZXJOZWFyLmRlY1Rlc3QgLS0gZGVjUXVhZCByZW1haW5kZXItbmVhciAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzYW5pdHkgY2hlY2tzIChhcyBiYXNlLCBhYm92ZSkNCitkcXJtbjAwMSByZW1haW5kZXJuZWFyICAxICAgICAxICAgIC0+ICAwDQorZHFybW4wMDIgcmVtYWluZGVybmVhciAgMiAgICAgMSAgICAtPiAgMA0KK2Rxcm1uMDAzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgLT4gIDENCitkcXJtbjAwNCByZW1haW5kZXJuZWFyICAyICAgICAyICAgIC0+ICAwDQorZHFybW4wMDUgcmVtYWluZGVybmVhciAgMCAgICAgMSAgICAtPiAgMA0KK2Rxcm1uMDA2IHJlbWFpbmRlcm5lYXIgIDAgICAgIDIgICAgLT4gIDANCitkcXJtbjAwNyByZW1haW5kZXJuZWFyICAxICAgICAzICAgIC0+ICAxDQorZHFybW4wMDggcmVtYWluZGVybmVhciAgMiAgICAgMyAgICAtPiAtMQ0KK2Rxcm1uMDA5IHJlbWFpbmRlcm5lYXIgIDMgICAgIDMgICAgLT4gIDANCisNCitkcXJtbjAxMCByZW1haW5kZXJuZWFyICAyLjQgICAxICAgIC0+ICAwLjQNCitkcXJtbjAxMSByZW1haW5kZXJuZWFyICAyLjQgICAtMSAgIC0+ICAwLjQNCitkcXJtbjAxMiByZW1haW5kZXJuZWFyICAtMi40ICAxICAgIC0+ICAtMC40DQorZHFybW4wMTMgcmVtYWluZGVybmVhciAgLTIuNCAgLTEgICAtPiAgLTAuNA0KK2Rxcm1uMDE0IHJlbWFpbmRlcm5lYXIgIDIuNDAgIDEgICAgLT4gIDAuNDANCitkcXJtbjAxNSByZW1haW5kZXJuZWFyICAyLjQwMCAxICAgIC0+ICAwLjQwMA0KK2Rxcm1uMDE2IHJlbWFpbmRlcm5lYXIgIDIuNCAgIDIgICAgLT4gIDAuNA0KK2Rxcm1uMDE3IHJlbWFpbmRlcm5lYXIgIDIuNDAwIDIgICAgLT4gIDAuNDAwDQorZHFybW4wMTggcmVtYWluZGVybmVhciAgMi4gICAgMiAgICAtPiAgMA0KK2Rxcm1uMDE5IHJlbWFpbmRlcm5lYXIgIDIwICAgIDIwICAgLT4gIDANCisNCitkcXJtbjAyMCByZW1haW5kZXJuZWFyICAxODcgICAxODcgICAgLT4gIDANCitkcXJtbjAyMSByZW1haW5kZXJuZWFyICA1ICAgICAyICAgICAgLT4gIDENCitkcXJtbjAyMiByZW1haW5kZXJuZWFyICA1ICAgICAyLjAgICAgLT4gIDEuMA0KK2Rxcm1uMDIzIHJlbWFpbmRlcm5lYXIgIDUgICAgIDIuMDAwICAtPiAgMS4wMDANCitkcXJtbjAyNCByZW1haW5kZXJuZWFyICA1ICAgICAwLjIwMCAgLT4gIDAuMDAwDQorZHFybW4wMjUgcmVtYWluZGVybmVhciAgNSAgICAgMC4yMDAgIC0+ICAwLjAwMA0KKw0KK2Rxcm1uMDMwIHJlbWFpbmRlcm5lYXIgIDEgICAgIDIgICAgICAtPiAgMQ0KK2Rxcm1uMDMxIHJlbWFpbmRlcm5lYXIgIDEgICAgIDQgICAgICAtPiAgMQ0KK2Rxcm1uMDMyIHJlbWFpbmRlcm5lYXIgIDEgICAgIDggICAgICAtPiAgMQ0KKw0KK2Rxcm1uMDMzIHJlbWFpbmRlcm5lYXIgIDEgICAgIDE2ICAgICAtPiAgMQ0KK2Rxcm1uMDM0IHJlbWFpbmRlcm5lYXIgIDEgICAgIDMyICAgICAtPiAgMQ0KK2Rxcm1uMDM1IHJlbWFpbmRlcm5lYXIgIDEgICAgIDY0ICAgICAtPiAgMQ0KK2Rxcm1uMDQwIHJlbWFpbmRlcm5lYXIgIDEgICAgLTIgICAgICAtPiAgMQ0KK2Rxcm1uMDQxIHJlbWFpbmRlcm5lYXIgIDEgICAgLTQgICAgICAtPiAgMQ0KK2Rxcm1uMDQyIHJlbWFpbmRlcm5lYXIgIDEgICAgLTggICAgICAtPiAgMQ0KK2Rxcm1uMDQzIHJlbWFpbmRlcm5lYXIgIDEgICAgLTE2ICAgICAtPiAgMQ0KK2Rxcm1uMDQ0IHJlbWFpbmRlcm5lYXIgIDEgICAgLTMyICAgICAtPiAgMQ0KK2Rxcm1uMDQ1IHJlbWFpbmRlcm5lYXIgIDEgICAgLTY0ICAgICAtPiAgMQ0KK2Rxcm1uMDUwIHJlbWFpbmRlcm5lYXIgLTEgICAgIDIgICAgICAtPiAgLTENCitkcXJtbjA1MSByZW1haW5kZXJuZWFyIC0xICAgICA0ICAgICAgLT4gIC0xDQorZHFybW4wNTIgcmVtYWluZGVybmVhciAtMSAgICAgOCAgICAgIC0+ICAtMQ0KK2Rxcm1uMDUzIHJlbWFpbmRlcm5lYXIgLTEgICAgIDE2ICAgICAtPiAgLTENCitkcXJtbjA1NCByZW1haW5kZXJuZWFyIC0xICAgICAzMiAgICAgLT4gIC0xDQorZHFybW4wNTUgcmVtYWluZGVybmVhciAtMSAgICAgNjQgICAgIC0+ICAtMQ0KK2Rxcm1uMDYwIHJlbWFpbmRlcm5lYXIgLTEgICAgLTIgICAgICAtPiAgLTENCitkcXJtbjA2MSByZW1haW5kZXJuZWFyIC0xICAgIC00ICAgICAgLT4gIC0xDQorZHFybW4wNjIgcmVtYWluZGVybmVhciAtMSAgICAtOCAgICAgIC0+ICAtMQ0KK2Rxcm1uMDYzIHJlbWFpbmRlcm5lYXIgLTEgICAgLTE2ICAgICAtPiAgLTENCitkcXJtbjA2NCByZW1haW5kZXJuZWFyIC0xICAgIC0zMiAgICAgLT4gIC0xDQorZHFybW4wNjUgcmVtYWluZGVybmVhciAtMSAgICAtNjQgICAgIC0+ICAtMQ0KKw0KK2Rxcm1uMDY2IHJlbWFpbmRlcm5lYXIgICAgICAgICAgOS45ICAgMSAgLT4gLTAuMQ0KK2Rxcm1uMDY3IHJlbWFpbmRlcm5lYXIgICAgICAgICA5OS43ICAgMSAgLT4gLTAuMw0KK2Rxcm1uMDY4IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OSAgICAgMSAgLT4gMA0KK2Rxcm1uMDY5IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OS40ICAgMSAgLT4gMC40DQorZHFybW4wNzAgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjUgICAxICAtPiAtMC41DQorZHFybW4wNzEgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5LjkgICAxICAtPiAtMC4xDQorZHFybW4wNzIgcmVtYWluZGVybmVhciAgOTk5OTk5OTk5Ljk5OSAxICAtPiAtMC4wMDENCitkcXJtbjA3MyByZW1haW5kZXJuZWFyICA5OTk5OTkuOTk5OTk5IDEgIC0+IC0wLjAwMDAwMQ0KK2Rxcm1uMDc0IHJlbWFpbmRlcm5lYXIgIDkgICAgICAgICAgICAgMSAgLT4gMA0KK2Rxcm1uMDc1IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMA0KK2Rxcm1uMDc2IHJlbWFpbmRlcm5lYXIgIDk5OTk5OTk5OTk5OTk5OTkgMiAgLT4gLTENCitkcXJtbjA3NyByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDMgIC0+IDANCitkcXJtbjA3OCByZW1haW5kZXJuZWFyICA5OTk5OTk5OTk5OTk5OTk5IDQgIC0+IC0xDQorDQorZHFybW4wODAgcmVtYWluZGVybmVhciAgMC4gICAgICAgICAgICAxICAtPiAwDQorZHFybW4wODEgcmVtYWluZGVybmVhciAgLjAgICAgICAgICAgICAxICAtPiAwLjANCitkcXJtbjA4MiByZW1haW5kZXJuZWFyICAwLjAwICAgICAgICAgIDEgIC0+IDAuMDANCitkcXJtbjA4MyByZW1haW5kZXJuZWFyICAwLjAwRSs5ICAgICAgIDEgIC0+IDANCitkcXJtbjA4NCByZW1haW5kZXJuZWFyICAwLjAwRSszICAgICAgIDEgIC0+IDANCitkcXJtbjA4NSByZW1haW5kZXJuZWFyICAwLjAwRSsyICAgICAgIDEgIC0+IDANCitkcXJtbjA4NiByZW1haW5kZXJuZWFyICAwLjAwRSsxICAgICAgIDEgIC0+IDAuMA0KK2Rxcm1uMDg3IHJlbWFpbmRlcm5lYXIgIDAuMDBFKzAgICAgICAgMSAgLT4gMC4wMA0KK2Rxcm1uMDg4IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTAgICAgICAgMSAgLT4gMC4wMA0KK2Rxcm1uMDg5IHJlbWFpbmRlcm5lYXIgIDAuMDBFLTEgICAgICAgMSAgLT4gMC4wMDANCitkcXJtbjA5MCByZW1haW5kZXJuZWFyICAwLjAwRS0yICAgICAgIDEgIC0+IDAuMDAwMA0KK2Rxcm1uMDkxIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTMgICAgICAgMSAgLT4gMC4wMDAwMA0KK2Rxcm1uMDkyIHJlbWFpbmRlcm5lYXIgIDAuMDBFLTQgICAgICAgMSAgLT4gMC4wMDAwMDANCitkcXJtbjA5MyByZW1haW5kZXJuZWFyICAwLjAwRS01ICAgICAgIDEgIC0+IDBFLTcNCitkcXJtbjA5NCByZW1haW5kZXJuZWFyICAwLjAwRS02ICAgICAgIDEgIC0+IDBFLTgNCitkcXJtbjA5NSByZW1haW5kZXJuZWFyICAwLjAwMDBFLTUwICAgIDEgIC0+IDBFLTU0DQorDQorLS0gVmFyaW91cyBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDANCitkcXJtbjEwMSByZW1haW5kZXJuZWFyICAwICAgICAgIDAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFybW4xMDIgcmVtYWluZGVybmVhciAgMCAgICAgIC0wICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2Rxcm1uMTAzIHJlbWFpbmRlcm5lYXIgLTAgICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcXJtbjEwNCByZW1haW5kZXJuZWFyIC0wICAgICAgLTAgICAtPiBOYU4gRGl2aXNpb25fdW5kZWZpbmVkDQorZHFybW4xMDUgcmVtYWluZGVybmVhciAgMC4wRTUgICAwICAgLT4gTmFOIERpdmlzaW9uX3VuZGVmaW5lZA0KK2Rxcm1uMTA2IHJlbWFpbmRlcm5lYXIgIDAuMDAwICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCistLSBbU29tZSB0aGluayB0aGlzIG5leHQgZ3JvdXAgc2hvdWxkIGJlIERpdmlzaW9uX2J5X3plcm8gZXhjZXB0aW9uLCBidXQNCistLSBJRUVFIDg1NCBpcyBleHBsaWNpdCB0aGF0IGl0IGlzIEludmFsaWQgb3BlcmF0aW9uIC4uIGZvcg0KKy0tIHJlbWFpbmRlci1uZWFyLCBhbnl3YXldDQorZHFybW4xMDcgcmVtYWluZGVybmVhciAgMC4wMDAxICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMDggcmVtYWluZGVybmVhciAgMC4wMSAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMDkgcmVtYWluZGVybmVhciAgMC4xICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTAgcmVtYWluZGVybmVhciAgMSAgICAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTEgcmVtYWluZGVybmVhciAgMSAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTIgcmVtYWluZGVybmVhciAxMCAgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTMgcmVtYWluZGVybmVhciAxRSsxMDAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTQgcmVtYWluZGVybmVhciAxRSszODAgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTUgcmVtYWluZGVybmVhciAgMC4wMDAxIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTYgcmVtYWluZGVybmVhciAgMC4wMSAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMTkgcmVtYWluZGVybmVhciAgMC4xICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMjAgcmVtYWluZGVybmVhciAgMSAgICAgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMjEgcmVtYWluZGVybmVhciAgMSAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMjIgcmVtYWluZGVybmVhciAxMCAgICAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMjMgcmVtYWluZGVybmVhciAxRSsxMDAgIC0wLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMjQgcmVtYWluZGVybmVhciAxRSszODQgIC0wICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYW5kIHplcm9zIG9uIGxlZnQNCitkcXJtbjEzMCByZW1haW5kZXJuZWFyICAwICAgICAgMSAgIC0+ICAwDQorZHFybW4xMzEgcmVtYWluZGVybmVhciAgMCAgICAgLTEgICAtPiAgMA0KK2Rxcm1uMTMyIHJlbWFpbmRlcm5lYXIgIDAuMCAgICAxICAgLT4gIDAuMA0KK2Rxcm1uMTMzIHJlbWFpbmRlcm5lYXIgIDAuMCAgIC0xICAgLT4gIDAuMA0KK2Rxcm1uMTM0IHJlbWFpbmRlcm5lYXIgLTAgICAgICAxICAgLT4gLTANCitkcXJtbjEzNSByZW1haW5kZXJuZWFyIC0wICAgICAtMSAgIC0+IC0wDQorZHFybW4xMzYgcmVtYWluZGVybmVhciAtMC4wICAgIDEgICAtPiAtMC4wDQorZHFybW4xMzcgcmVtYWluZGVybmVhciAtMC4wICAgLTEgICAtPiAtMC4wDQorDQorLS0gMC41ZXJzDQorZHFybW4xNDMgcmVtYWluZGVybmVhciAgIDAuNSAgMiAgICAgLT4gIDAuNQ0KK2Rxcm1uMTQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMSAgIC0+ICAwLjUNCitkcXJtbjE0NSByZW1haW5kZXJuZWFyICAgMC41ICAyLjAxICAtPiAgMC41MA0KK2Rxcm1uMTQ2IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDAxIC0+ICAwLjUwMA0KK2Rxcm1uMTQ3IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIgICAgIC0+ICAwLjUwDQorZHFybW4xNDggcmVtYWluZGVybmVhciAgIDAuNTAgMi4wMSAgLT4gIDAuNTANCitkcXJtbjE0OSByZW1haW5kZXJuZWFyICAgMC41MCAyLjAwMSAtPiAgMC41MDANCisNCistLSBzdGVhZGllcw0KK2Rxcm1uMTUwIHJlbWFpbmRlcm5lYXIgIDEgIDEgICAtPiAwDQorZHFybW4xNTEgcmVtYWluZGVybmVhciAgMSAgMiAgIC0+IDENCitkcXJtbjE1MiByZW1haW5kZXJuZWFyICAxICAzICAgLT4gMQ0KK2Rxcm1uMTUzIHJlbWFpbmRlcm5lYXIgIDEgIDQgICAtPiAxDQorZHFybW4xNTQgcmVtYWluZGVybmVhciAgMSAgNSAgIC0+IDENCitkcXJtbjE1NSByZW1haW5kZXJuZWFyICAxICA2ICAgLT4gMQ0KK2Rxcm1uMTU2IHJlbWFpbmRlcm5lYXIgIDEgIDcgICAtPiAxDQorZHFybW4xNTcgcmVtYWluZGVybmVhciAgMSAgOCAgIC0+IDENCitkcXJtbjE1OCByZW1haW5kZXJuZWFyICAxICA5ICAgLT4gMQ0KK2Rxcm1uMTU5IHJlbWFpbmRlcm5lYXIgIDEgIDEwICAtPiAxDQorZHFybW4xNjAgcmVtYWluZGVybmVhciAgMSAgMSAgIC0+IDANCitkcXJtbjE2MSByZW1haW5kZXJuZWFyICAyICAxICAgLT4gMA0KK2Rxcm1uMTYyIHJlbWFpbmRlcm5lYXIgIDMgIDEgICAtPiAwDQorZHFybW4xNjMgcmVtYWluZGVybmVhciAgNCAgMSAgIC0+IDANCitkcXJtbjE2NCByZW1haW5kZXJuZWFyICA1ICAxICAgLT4gMA0KK2Rxcm1uMTY1IHJlbWFpbmRlcm5lYXIgIDYgIDEgICAtPiAwDQorZHFybW4xNjYgcmVtYWluZGVybmVhciAgNyAgMSAgIC0+IDANCitkcXJtbjE2NyByZW1haW5kZXJuZWFyICA4ICAxICAgLT4gMA0KK2Rxcm1uMTY4IHJlbWFpbmRlcm5lYXIgIDkgIDEgICAtPiAwDQorZHFybW4xNjkgcmVtYWluZGVybmVhciAgMTAgMSAgIC0+IDANCisNCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyDQorZHFybW4xNzEgcmVtYWluZGVybmVhciAgIDAuNCAgMS4wMjAgLT4gIDAuNDAwDQorZHFybW4xNzIgcmVtYWluZGVybmVhciAgIDAuNTAgMS4wMjAgLT4gIDAuNTAwDQorZHFybW4xNzMgcmVtYWluZGVybmVhciAgIDAuNTEgMS4wMjAgLT4gIDAuNTEwDQorZHFybW4xNzQgcmVtYWluZGVybmVhciAgIDAuNTIgMS4wMjAgLT4gLTAuNTAwDQorZHFybW4xNzUgcmVtYWluZGVybmVhciAgIDAuNiAgMS4wMjAgLT4gLTAuNDIwDQorDQorLS0gTW9yZSBmbGF2b3VycyBvZiByZW1haW5kZXJuZWFyIGJ5IDANCitkcXJtbjIwMSByZW1haW5kZXJuZWFyICAwICAgICAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcXJtbjIwMiByZW1haW5kZXJuZWFyICAwLjBFNSAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcXJtbjIwMyByZW1haW5kZXJuZWFyICAwLjAwMCAgMCAgIC0+IE5hTiBEaXZpc2lvbl91bmRlZmluZWQNCitkcXJtbjIwNCByZW1haW5kZXJuZWFyICAwLjAwMDEgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uMjA1IHJlbWFpbmRlcm5lYXIgIDAuMDEgICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4yMDYgcmVtYWluZGVybmVhciAgMC4xICAgIDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjIwNyByZW1haW5kZXJuZWFyICAxICAgICAgMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uMjA4IHJlbWFpbmRlcm5lYXIgIDEgICAgICAwLjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4yMDkgcmVtYWluZGVybmVhciAxMCAgICAgIDAuMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjIxMCByZW1haW5kZXJuZWFyIDFFKzEwMCAgMC4wIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uMjExIHJlbWFpbmRlcm5lYXIgMUUrMzgwICAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gdGVzdHMgZnJvbSB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbg0KK2Rxcm1uMjIxIHJlbWFpbmRlcm5lYXIgMi4xICAgICAzICAgLT4gLTAuOQ0KK2Rxcm1uMjIyIHJlbWFpbmRlcm5lYXIgIDEwICAgICA2ICAgLT4gLTINCitkcXJtbjIyMyByZW1haW5kZXJuZWFyICAxMCAgICAgMyAgIC0+ICAxDQorZHFybW4yMjQgcmVtYWluZGVybmVhciAtMTAgICAgIDMgICAtPiAtMQ0KK2Rxcm1uMjI1IHJlbWFpbmRlcm5lYXIgIDEwLjIgICAxICAgLT4gMC4yDQorZHFybW4yMjYgcmVtYWluZGVybmVhciAgMTAgICAgIDAuMyAtPiAwLjENCitkcXJtbjIyNyByZW1haW5kZXJuZWFyICAgMy42ICAgMS4zIC0+IC0wLjMNCisNCistLSBzb21lIGRpZmZlcmVuY2VzIGZyb20gcmVtYWluZGVyDQorZHFybW4yMzEgcmVtYWluZGVybmVhciAgLTAuNCAgMS4wMjAgLT4gLTAuNDAwDQorZHFybW4yMzIgcmVtYWluZGVybmVhciAgLTAuNTAgMS4wMjAgLT4gLTAuNTAwDQorZHFybW4yMzMgcmVtYWluZGVybmVhciAgLTAuNTEgMS4wMjAgLT4gLTAuNTEwDQorZHFybW4yMzQgcmVtYWluZGVybmVhciAgLTAuNTIgMS4wMjAgLT4gIDAuNTAwDQorZHFybW4yMzUgcmVtYWluZGVybmVhciAgLTAuNiAgMS4wMjAgLT4gIDAuNDIwDQorDQorLS0gaGlnaCBYcw0KK2Rxcm1uMjQwIHJlbWFpbmRlcm5lYXIgIDFFKzIgIDEuMDAgIC0+ICAwLjAwDQorDQorLS0gZHFybW4zeHggYXJlIGZyb20gRGlhZ0JpZ0RlY2ltYWwNCitkcXJtbjMwMSByZW1haW5kZXJuZWFyICAgMSAgICAzICAgICAtPiAgMQ0KK2Rxcm1uMzAyIHJlbWFpbmRlcm5lYXIgICA1ICAgIDUgICAgIC0+ICAwDQorZHFybW4zMDMgcmVtYWluZGVybmVhciAgIDEzICAgMTAgICAgLT4gIDMNCitkcXJtbjMwNCByZW1haW5kZXJuZWFyICAgMTMgICA1MCAgICAtPiAgMTMNCitkcXJtbjMwNSByZW1haW5kZXJuZWFyICAgMTMgICAxMDAgICAtPiAgMTMNCitkcXJtbjMwNiByZW1haW5kZXJuZWFyICAgMTMgICAxMDAwICAtPiAgMTMNCitkcXJtbjMwNyByZW1haW5kZXJuZWFyICAgLjEzICAgIDEgICAtPiAgMC4xMw0KK2Rxcm1uMzA4IHJlbWFpbmRlcm5lYXIgICAwLjEzMyAgMSAgIC0+ICAwLjEzMw0KK2Rxcm1uMzA5IHJlbWFpbmRlcm5lYXIgICAwLjEwMzMgMSAgIC0+ICAwLjEwMzMNCitkcXJtbjMxMCByZW1haW5kZXJuZWFyICAgMS4wMzMgIDEgICAtPiAgMC4wMzMNCitkcXJtbjMxMSByZW1haW5kZXJuZWFyICAgMTAuMzMgIDEgICAtPiAgMC4zMw0KK2Rxcm1uMzEyIHJlbWFpbmRlcm5lYXIgICAxMC4zMyAxMCAgIC0+ICAwLjMzDQorZHFybW4zMTMgcmVtYWluZGVybmVhciAgIDEwMy4zICAxICAgLT4gIDAuMw0KK2Rxcm1uMzE0IHJlbWFpbmRlcm5lYXIgICAxMzMgICAxMCAgIC0+ICAzDQorZHFybW4zMTUgcmVtYWluZGVybmVhciAgIDEwMzMgIDEwICAgLT4gIDMNCitkcXJtbjMxNiByZW1haW5kZXJuZWFyICAgMTAzMyAgNTAgICAtPiAtMTcNCitkcXJtbjMxNyByZW1haW5kZXJuZWFyICAgMTAxLjAgIDMgICAtPiAtMS4wDQorZHFybW4zMTggcmVtYWluZGVybmVhciAgIDEwMi4wICAzICAgLT4gIDAuMA0KK2Rxcm1uMzE5IHJlbWFpbmRlcm5lYXIgICAxMDMuMCAgMyAgIC0+ICAxLjANCitkcXJtbjMyMCByZW1haW5kZXJuZWFyICAgMi40MCAgIDEgICAtPiAgMC40MA0KK2Rxcm1uMzIxIHJlbWFpbmRlcm5lYXIgICAyLjQwMCAgMSAgIC0+ICAwLjQwMA0KK2Rxcm1uMzIyIHJlbWFpbmRlcm5lYXIgICAyLjQgICAgMSAgIC0+ICAwLjQNCitkcXJtbjMyMyByZW1haW5kZXJuZWFyICAgMi40ICAgIDIgICAtPiAgMC40DQorZHFybW4zMjQgcmVtYWluZGVybmVhciAgIDIuNDAwICAyICAgLT4gIDAuNDAwDQorZHFybW4zMjUgcmVtYWluZGVybmVhciAgIDEgICAwLjMgICAgLT4gIDAuMQ0KK2Rxcm1uMzI2IHJlbWFpbmRlcm5lYXIgICAxICAgMC4zMCAgIC0+ICAwLjEwDQorZHFybW4zMjcgcmVtYWluZGVybmVhciAgIDEgICAwLjMwMCAgLT4gIDAuMTAwDQorZHFybW4zMjggcmVtYWluZGVybmVhciAgIDEgICAwLjMwMDAgLT4gIDAuMTAwMA0KK2Rxcm1uMzI5IHJlbWFpbmRlcm5lYXIgICAxLjAgICAgMC4zIC0+ICAwLjENCitkcXJtbjMzMCByZW1haW5kZXJuZWFyICAgMS4wMCAgIDAuMyAtPiAgMC4xMA0KK2Rxcm1uMzMxIHJlbWFpbmRlcm5lYXIgICAxLjAwMCAgMC4zIC0+ICAwLjEwMA0KK2Rxcm1uMzMyIHJlbWFpbmRlcm5lYXIgICAxLjAwMDAgMC4zIC0+ICAwLjEwMDANCitkcXJtbjMzMyByZW1haW5kZXJuZWFyICAgMC41ICAyICAgICAtPiAgMC41DQorZHFybW4zMzQgcmVtYWluZGVybmVhciAgIDAuNSAgMi4xICAgLT4gIDAuNQ0KK2Rxcm1uMzM1IHJlbWFpbmRlcm5lYXIgICAwLjUgIDIuMDEgIC0+ICAwLjUwDQorZHFybW4zMzYgcmVtYWluZGVybmVhciAgIDAuNSAgMi4wMDEgLT4gIDAuNTAwDQorZHFybW4zMzcgcmVtYWluZGVybmVhciAgIDAuNTAgMiAgICAgLT4gIDAuNTANCitkcXJtbjMzOCByZW1haW5kZXJuZWFyICAgMC41MCAyLjAxICAtPiAgMC41MA0KK2Rxcm1uMzM5IHJlbWFpbmRlcm5lYXIgICAwLjUwIDIuMDAxIC0+ICAwLjUwMA0KKw0KK2Rxcm1uMzQwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDEgICAgLT4gIC0xRS03DQorZHFybW4zNDEgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDEgICAgLT4gIC0xRS04DQorZHFybW4zNDIgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNTAwMDAwMDAxICAgIC0+ICAtMUUtOQ0KK2Rxcm1uMzQzIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDEgICAgLT4gIC0xRS0xMA0KK2Rxcm1uMzQ0IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjUwMDAwMDAwMDAxICAgIC0+ICAtMUUtMTENCitkcXJtbjM0NSByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5ICAgIC0+ICAxRS03DQorZHFybW4zNDYgcmVtYWluZGVybmVhciAgIDAuNSAgIDAuNDk5OTk5OTkgICAgLT4gIDFFLTgNCitkcXJtbjM0NyByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTkgICAgLT4gIDFFLTkNCitkcXJtbjM0OCByZW1haW5kZXJuZWFyICAgMC41ICAgMC40OTk5OTk5OTk5ICAgIC0+ICAxRS0xMA0KK2Rxcm1uMzQ5IHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5ICAgIC0+ICAxRS0xMQ0KK2Rxcm1uMzUwIHJlbWFpbmRlcm5lYXIgICAwLjUgICAwLjQ5OTk5OTk5OTk5OSAgICAtPiAgMUUtMTINCisNCitkcXJtbjM1MSByZW1haW5kZXJuZWFyICAgMC4wMyAgNyAgLT4gIDAuMDMNCitkcXJtbjM1MiByZW1haW5kZXJuZWFyICAgNSAgIDIgICAgLT4gIDENCitkcXJtbjM1MyByZW1haW5kZXJuZWFyICAgNC4xICAgMiAgICAtPiAgMC4xDQorZHFybW4zNTQgcmVtYWluZGVybmVhciAgIDQuMDEgICAyICAgIC0+ICAwLjAxDQorZHFybW4zNTUgcmVtYWluZGVybmVhciAgIDQuMDAxICAgMiAgICAtPiAgMC4wMDENCitkcXJtbjM1NiByZW1haW5kZXJuZWFyICAgNC4wMDAxICAgMiAgICAtPiAgMC4wMDAxDQorZHFybW4zNTcgcmVtYWluZGVybmVhciAgIDQuMDAwMDEgICAyICAgIC0+ICAwLjAwMDAxDQorZHFybW4zNTggcmVtYWluZGVybmVhciAgIDQuMDAwMDAxICAgMiAgICAtPiAgMC4wMDAwMDENCitkcXJtbjM1OSByZW1haW5kZXJuZWFyICAgNC4wMDAwMDAxICAgMiAgICAtPiAgMUUtNw0KKw0KK2Rxcm1uMzYwIHJlbWFpbmRlcm5lYXIgICAxLjIgICAwLjczNDUgLT4gLTAuMjY5MA0KK2Rxcm1uMzYxIHJlbWFpbmRlcm5lYXIgICAwLjggICAxMiAgICAgLT4gIDAuOA0KK2Rxcm1uMzYyIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjIgICAgLT4gIDAuMA0KK2Rxcm1uMzYzIHJlbWFpbmRlcm5lYXIgICAwLjggICAwLjMgICAgLT4gLTAuMQ0KK2Rxcm1uMzY0IHJlbWFpbmRlcm5lYXIgICAwLjgwMCAgIDEyICAgLT4gIDAuODAwDQorZHFybW4zNjUgcmVtYWluZGVybmVhciAgIDAuODAwICAgMS43ICAtPiAgMC44MDANCitkcXJtbjM2NiByZW1haW5kZXJuZWFyICAgMi40MDAgICAyICAgIC0+ICAwLjQwMA0KKw0KKy0tIHJvdW5kIHRvIGV2ZW4NCitkcXJtbjM3MSByZW1haW5kZXJuZWFyICAgMTIxICAgICAyICAgIC0+ICAxDQorZHFybW4zNzIgcmVtYWluZGVybmVhciAgIDEyMiAgICAgMiAgICAtPiAgMA0KK2Rxcm1uMzczIHJlbWFpbmRlcm5lYXIgICAxMjMgICAgIDIgICAgLT4gLTENCitkcXJtbjM3NCByZW1haW5kZXJuZWFyICAgMTI0ICAgICAyICAgIC0+ICAwDQorZHFybW4zNzUgcmVtYWluZGVybmVhciAgIDEyNSAgICAgMiAgICAtPiAgMQ0KK2Rxcm1uMzc2IHJlbWFpbmRlcm5lYXIgICAxMjYgICAgIDIgICAgLT4gIDANCitkcXJtbjM3NyByZW1haW5kZXJuZWFyICAgMTI3ICAgICAyICAgIC0+IC0xDQorDQorZHFybW4zODEgcmVtYWluZGVybmVhciAxMjM0NSAgMSAgICAgICAgIC0+ICAwDQorZHFybW4zODIgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMDAxICAgIC0+IC0wLjIzNDQNCitkcXJtbjM4MyByZW1haW5kZXJuZWFyIDEyMzQ1ICAxLjAwMSAgICAgLT4gLTAuMzMzDQorZHFybW4zODQgcmVtYWluZGVybmVhciAxMjM0NSAgMS4wMSAgICAgIC0+IC0wLjIzDQorZHFybW4zODUgcmVtYWluZGVybmVhciAxMjM0NSAgMS4xICAgICAgIC0+IC0wLjMNCitkcXJtbjM4NiByZW1haW5kZXJuZWFyIDEyMzU1ICA0ICAgICAgICAgLT4gLTENCitkcXJtbjM4NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA0ICAgICAgICAgLT4gIDENCitkcXJtbjM4OCByZW1haW5kZXJuZWFyIDEyMzU1ICA0LjAwMDEgICAgLT4gLTEuMzA4OQ0KK2Rxcm1uMzg5IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDQuMDAwMSAgICAtPiAgMC42OTE0DQorZHFybW4zOTAgcmVtYWluZGVybmVhciAxMjM0NSAgNC45ICAgICAgIC0+ICAxLjkNCitkcXJtbjM5MSByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5ICAgICAgLT4gLTAuMjYNCitkcXJtbjM5MiByZW1haW5kZXJuZWFyIDEyMzQ1ICA0Ljk5OSAgICAgLT4gIDIuNDY5DQorZHFybW4zOTMgcmVtYWluZGVybmVhciAxMjM0NSAgNC45OTk5ICAgIC0+ICAwLjI0NjkNCitkcXJtbjM5NCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1ICAgICAgICAgLT4gIDANCitkcXJtbjM5NSByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAwMDEgICAgLT4gLTAuMjQ2OQ0KK2Rxcm1uMzk2IHJlbWFpbmRlcm5lYXIgMTIzNDUgIDUuMDAxICAgICAtPiAtMi40NjkNCitkcXJtbjM5NyByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjAxICAgICAgLT4gIDAuMzYNCitkcXJtbjM5OCByZW1haW5kZXJuZWFyIDEyMzQ1ICA1LjEgICAgICAgLT4gLTIuMQ0KKw0KKy0tIHRoZSBuYXN0eSBkaXZpc2lvbi1ieS0xIGNhc2VzDQorZHFybW40MDEgcmVtYWluZGVybmVhciAgIDAuNCAgICAgICAgIDEgICAtPiAgMC40DQorZHFybW40MDIgcmVtYWluZGVybmVhciAgIDAuNDUgICAgICAgIDEgICAtPiAgMC40NQ0KK2Rxcm1uNDAzIHJlbWFpbmRlcm5lYXIgICAwLjQ1NSAgICAgICAxICAgLT4gIDAuNDU1DQorZHFybW40MDQgcmVtYWluZGVybmVhciAgIDAuNDU1NSAgICAgIDEgICAtPiAgMC40NTU1DQorZHFybW40MDUgcmVtYWluZGVybmVhciAgIDAuNDU1NTUgICAgIDEgICAtPiAgMC40NTU1NQ0KK2Rxcm1uNDA2IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NSAgICAxICAgLT4gIDAuNDU1NTU1DQorZHFybW40MDcgcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NSAgIDEgICAtPiAgMC40NTU1NTU1DQorZHFybW40MDggcmVtYWluZGVybmVhciAgIDAuNDU1NTU1NTUgIDEgICAtPiAgMC40NTU1NTU1NQ0KK2Rxcm1uNDA5IHJlbWFpbmRlcm5lYXIgICAwLjQ1NTU1NTU1NSAxICAgLT4gIDAuNDU1NTU1NTU1DQorLS0gd2l0aCBzcGlsbC4uLiBbNDEyIGV4ZXJjaXNlcyBzdGlja3RhYiBsb29wXQ0KK2Rxcm1uNDExIHJlbWFpbmRlcm5lYXIgICAwLjUgICAgICAgICAxICAgLT4gIDAuNQ0KK2Rxcm1uNDEyIHJlbWFpbmRlcm5lYXIgICAwLjU1ICAgICAgICAxICAgLT4gLTAuNDUNCitkcXJtbjQxMyByZW1haW5kZXJuZWFyICAgMC41NTUgICAgICAgMSAgIC0+IC0wLjQ0NQ0KK2Rxcm1uNDE0IHJlbWFpbmRlcm5lYXIgICAwLjU1NTUgICAgICAxICAgLT4gLTAuNDQ0NQ0KK2Rxcm1uNDE1IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1ICAgICAxICAgLT4gLTAuNDQ0NDUNCitkcXJtbjQxNiByZW1haW5kZXJuZWFyICAgMC41NTU1NTUgICAgMSAgIC0+IC0wLjQ0NDQ0NQ0KK2Rxcm1uNDE3IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTUgICAxICAgLT4gLTAuNDQ0NDQ0NQ0KK2Rxcm1uNDE4IHJlbWFpbmRlcm5lYXIgICAwLjU1NTU1NTU1ICAxICAgLT4gLTAuNDQ0NDQ0NDUNCitkcXJtbjQxOSByZW1haW5kZXJuZWFyICAgMC41NTU1NTU1NTUgMSAgIC0+IC0wLjQ0NDQ0NDQ0NQ0KKw0KKy0tIGZvbGRkb3ducw0KK2Rxcm1uNDIxIHJlbWFpbmRlcm5lYXIgICAxRSs2MTQ0ICAgICAgICAxICAtPiAgIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFybW40MjIgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDFFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQorZHFybW40MjMgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDJFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQorZHFybW40MjQgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDNFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFybW40MjUgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDRFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFybW40MjYgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDVFKzYxNDMgIC0+ICAgMEUrNjExMSBDbGFtcGVkDQorZHFybW40MjcgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDZFKzYxNDMgIC0+ICAtMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFybW40MjggcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDdFKzYxNDMgIC0+ICAgMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFybW40MjkgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDhFKzYxNDMgIC0+ICAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorZHFybW40MzAgcmVtYWluZGVybmVhciAgIDFFKzYxNDQgIDlFKzYxNDMgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MyBDbGFtcGVkDQorLS0gdGluaWVzDQorZHFybW40MzEgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDFFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KK2Rxcm1uNDMyIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICAyRS02MTc2ICAtPiAgIDBFLTYxNzYNCitkcXJtbjQzMyByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgM0UtNjE3NiAgLT4gICAxRS02MTc2IFN1Ym5vcm1hbA0KK2Rxcm1uNDM0IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA0RS02MTc2ICAtPiAgIDJFLTYxNzYgU3Vibm9ybWFsDQorZHFybW40MzUgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDVFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KK2Rxcm1uNDM2IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA2RS02MTc2ICAtPiAgLTJFLTYxNzYgU3Vibm9ybWFsDQorZHFybW40MzcgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgIDdFLTYxNzYgIC0+ICAgM0UtNjE3NiBTdWJub3JtYWwNCitkcXJtbjQzOCByZW1haW5kZXJuZWFyICAgMUUtNjE3NSAgOEUtNjE3NiAgLT4gICAyRS02MTc2IFN1Ym5vcm1hbA0KK2Rxcm1uNDM5IHJlbWFpbmRlcm5lYXIgICAxRS02MTc1ICA5RS02MTc2ICAtPiAgIDFFLTYxNzYgU3Vibm9ybWFsDQorZHFybW40NDAgcmVtYWluZGVybmVhciAgIDFFLTYxNzUgMTBFLTYxNzYgIC0+ICAgMEUtNjE3Ng0KK2Rxcm1uNDQxIHJlbWFpbmRlcm5lYXIgICAxRS02MTc1IDExRS02MTc2ICAtPiAgLTFFLTYxNzYgU3Vibm9ybWFsDQorZHFybW40NDIgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMTFFLTYxNzYgIC0+ICAtMUUtNjE3NiBTdWJub3JtYWwNCitkcXJtbjQ0MyByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAyMEUtNjE3NiAgLT4gICAwRS02MTc2DQorZHFybW40NDQgcmVtYWluZGVybmVhciAxMDBFLTYxNzUgMjFFLTYxNzYgIC0+ICAtOEUtNjE3NiBTdWJub3JtYWwNCitkcXJtbjQ0NSByZW1haW5kZXJuZWFyIDEwMEUtNjE3NSAzMEUtNjE3NiAgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbA0KKw0KKy0tIHplcm8gc2lnbnMNCitkcXJtbjY1MCByZW1haW5kZXJuZWFyICAxICAxIC0+ICAwDQorZHFybW42NTEgcmVtYWluZGVybmVhciAtMSAgMSAtPiAtMA0KK2Rxcm1uNjUyIHJlbWFpbmRlcm5lYXIgIDEgLTEgLT4gIDANCitkcXJtbjY1MyByZW1haW5kZXJuZWFyIC0xIC0xIC0+IC0wDQorZHFybW42NTQgcmVtYWluZGVybmVhciAgMCAgMSAtPiAgMA0KK2Rxcm1uNjU1IHJlbWFpbmRlcm5lYXIgLTAgIDEgLT4gLTANCitkcXJtbjY1NiByZW1haW5kZXJuZWFyICAwIC0xIC0+ICAwDQorZHFybW42NTcgcmVtYWluZGVybmVhciAtMCAtMSAtPiAtMA0KK2Rxcm1uNjU4IHJlbWFpbmRlcm5lYXIgIDAuMDAgIDEgIC0+ICAwLjAwDQorZHFybW42NTkgcmVtYWluZGVybmVhciAtMC4wMCAgMSAgLT4gLTAuMDANCisNCistLSBTcGVjaWFscw0KK2Rxcm1uNjgwIHJlbWFpbmRlcm5lYXIgIEluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjY4MSByZW1haW5kZXJuZWFyICBJbmYgIC0xMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW42ODIgcmVtYWluZGVybmVhciAgSW5mICAtMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNjgzIHJlbWFpbmRlcm5lYXIgIEluZiAgIDAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjY4NCByZW1haW5kZXJuZWFyICBJbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW42ODUgcmVtYWluZGVybmVhciAgSW5mICAgMSAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNjg2IHJlbWFpbmRlcm5lYXIgIEluZiAgIDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjY4NyByZW1haW5kZXJuZWFyICBJbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW42ODggcmVtYWluZGVybmVhciAtMTAwMCAgSW5mICAgLT4gLTEwMDANCitkcXJtbjY4OSByZW1haW5kZXJuZWFyIC1JbmYgICBJbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW42OTEgcmVtYWluZGVybmVhciAtMSAgICAgSW5mICAgLT4gLTENCitkcXJtbjY5MiByZW1haW5kZXJuZWFyICAwICAgICBJbmYgICAtPiAgMA0KK2Rxcm1uNjkzIHJlbWFpbmRlcm5lYXIgLTAgICAgIEluZiAgIC0+IC0wDQorZHFybW42OTQgcmVtYWluZGVybmVhciAgMSAgICAgSW5mICAgLT4gIDENCitkcXJtbjY5NSByZW1haW5kZXJuZWFyICAxMDAwICBJbmYgICAtPiAgMTAwMA0KK2Rxcm1uNjk2IHJlbWFpbmRlcm5lYXIgIEluZiAgIEluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcXJtbjcwMCByZW1haW5kZXJuZWFyIC1JbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43MDEgcmVtYWluZGVybmVhciAtSW5mICAtMTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzAyIHJlbWFpbmRlcm5lYXIgLUluZiAgLTEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjcwMyByZW1haW5kZXJuZWFyIC1JbmYgIC0wICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43MDQgcmVtYWluZGVybmVhciAtSW5mICAgMCAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzA1IHJlbWFpbmRlcm5lYXIgLUluZiAgIDEgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjcwNiByZW1haW5kZXJuZWFyIC1JbmYgICAxMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43MDcgcmVtYWluZGVybmVhciAtSW5mICAgSW5mICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzA4IHJlbWFpbmRlcm5lYXIgLUluZiAgLUluZiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjcwOSByZW1haW5kZXJuZWFyIC0xMDAwICBJbmYgICAtPiAtMTAwMA0KK2Rxcm1uNzEwIHJlbWFpbmRlcm5lYXIgLTEgICAgLUluZiAgIC0+IC0xDQorZHFybW43MTEgcmVtYWluZGVybmVhciAtMCAgICAtSW5mICAgLT4gLTANCitkcXJtbjcxMiByZW1haW5kZXJuZWFyICAwICAgIC1JbmYgICAtPiAgMA0KK2Rxcm1uNzEzIHJlbWFpbmRlcm5lYXIgIDEgICAgLUluZiAgIC0+ICAxDQorZHFybW43MTQgcmVtYWluZGVybmVhciAgMTAwMCAtSW5mICAgLT4gIDEwMDANCitkcXJtbjcxNSByZW1haW5kZXJuZWFyICBJbmYgIC1JbmYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFybW43MjEgcmVtYWluZGVybmVhciAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2Rxcm1uNzIyIHJlbWFpbmRlcm5lYXIgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcXJtbjcyMyByZW1haW5kZXJuZWFyICBOYU4gLTEgICAgICAtPiAgTmFODQorZHFybW43MjQgcmVtYWluZGVybmVhciAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2Rxcm1uNzI1IHJlbWFpbmRlcm5lYXIgLU5hTiAgMCAgICAgIC0+IC1OYU4NCitkcXJtbjcyNiByZW1haW5kZXJuZWFyICBOYU4gIDEgICAgICAtPiAgTmFODQorZHFybW43MjcgcmVtYWluZGVybmVhciAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2Rxcm1uNzI4IHJlbWFpbmRlcm5lYXIgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcXJtbjcyOSByZW1haW5kZXJuZWFyICBOYU4gLU5hTiAgICAtPiAgTmFODQorZHFybW43MzAgcmVtYWluZGVybmVhciAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2Rxcm1uNzMxIHJlbWFpbmRlcm5lYXIgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcXJtbjczMiByZW1haW5kZXJuZWFyIC0xICAgIE5hTiAgICAtPiAgTmFODQorZHFybW43MzMgcmVtYWluZGVybmVhciAtMCAgIC1OYU4gICAgLT4gLU5hTg0KK2Rxcm1uNzM0IHJlbWFpbmRlcm5lYXIgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcXJtbjczNSByZW1haW5kZXJuZWFyICAxICAgLU5hTiAgICAtPiAtTmFODQorZHFybW43MzYgcmVtYWluZGVybmVhciAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2Rxcm1uNzM3IHJlbWFpbmRlcm5lYXIgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcXJtbjc0MSByZW1haW5kZXJuZWFyICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzQyIHJlbWFpbmRlcm5lYXIgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NDMgcmVtYWluZGVybmVhciAtc05hTiAtMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc0NCByZW1haW5kZXJuZWFyICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzQ1IHJlbWFpbmRlcm5lYXIgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NDYgcmVtYWluZGVybmVhciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc0NyByZW1haW5kZXJuZWFyICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzQ5IHJlbWFpbmRlcm5lYXIgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NTAgcmVtYWluZGVybmVhciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc1MSByZW1haW5kZXJuZWFyICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzUyIHJlbWFpbmRlcm5lYXIgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NTMgcmVtYWluZGVybmVhciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc1NCByZW1haW5kZXJuZWFyIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzU1IHJlbWFpbmRlcm5lYXIgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NTYgcmVtYWluZGVybmVhciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc1NyByZW1haW5kZXJuZWFyICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzU4IHJlbWFpbmRlcm5lYXIgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NTkgcmVtYWluZGVybmVhciAgSW5mIC1zTmFOICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdpbmcgTmFOcw0KK2Rxcm1uNzYwIHJlbWFpbmRlcm5lYXIgIE5hTjEgICBOYU43ICAgLT4gIE5hTjENCitkcXJtbjc2MSByZW1haW5kZXJuZWFyIHNOYU4yICAgTmFOOCAgIC0+ICBOYU4yIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW43NjIgcmVtYWluZGVybmVhciAgTmFOMyAgc05hTjkgICAtPiAgTmFOOSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm1uNzYzIHJlbWFpbmRlcm5lYXIgc05hTjQgIHNOYU4xMCAgLT4gIE5hTjQgSW52YWxpZF9vcGVyYXRpb24NCitkcXJtbjc2NCByZW1haW5kZXJuZWFyICAgIDE1ICAgTmFOMTEgIC0+ICBOYU4xMQ0KK2Rxcm1uNzY1IHJlbWFpbmRlcm5lYXIgIE5hTjYgICBOYU4xMiAgLT4gIE5hTjYNCitkcXJtbjc2NiByZW1haW5kZXJuZWFyICBJbmYgICAgTmFOMTMgIC0+ICBOYU4xMw0KK2Rxcm1uNzY3IHJlbWFpbmRlcm5lYXIgIE5hTjE0ICAtSW5mICAgLT4gIE5hTjE0DQorZHFybW43NjggcmVtYWluZGVybmVhciAgICAwICAgIE5hTjE1ICAtPiAgTmFOMTUNCitkcXJtbjc2OSByZW1haW5kZXJuZWFyICBOYU4xNiAgIC0wICAgIC0+ICBOYU4xNg0KKw0KKy0tIGVkZ2UgY2FzZXMgb2YgaW1wb3NzaWJsZQ0KK2Rxcm1uNzcwICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAxMCAgICAtPiAtNA0KK2Rxcm1uNzcxICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMSAgICAtPiAgMA0KK2Rxcm1uNzcyICByZW1haW5kZXJuZWFyICAxMjM0NTAwMDAwMDAwMDAwMDAwMDAwMDY3ODkwMTIzNDU2ICAgMC4xICAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJtbjc3MyAgcmVtYWluZGVybmVhciAgMTIzNDUwMDAwMDAwMDAwMDAwMDAwMDA2Nzg5MDEyMzQ1NiAgIDAuMDEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorDQorLS0gbG9uZyBvcGVyYW5kIGNoZWNrcw0KK2Rxcm1uODAxIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMDAgMTAwIC0+IDANCitkcXJtbjgwMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMDAgICAtPiAxDQorZHFybW44MDMgcmVtYWluZGVybmVhciAxMjM0NTY3ODAwICAxMCAgLT4gMA0KK2Rxcm1uODA0IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODAwICAgIC0+IDENCitkcXJtbjgwNSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTAgIDEwICAtPiAwDQorZHFybW44MDYgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTAgICAgLT4gMQ0KK2Rxcm1uODA3IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MSAgMTAgIC0+IDENCitkcXJtbjgwOCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQorZHFybW44MDkgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwMSAxMDAgLT4gMQ0KK2Rxcm1uODEwIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwMSAgIC0+IDENCitkcXJtbjgxMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTYgIDEwICAtPiAtNA0KK2Rxcm1uODEyIHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCitkcXJtbjgyMSByZW1haW5kZXJuZWFyIDEyMzQ1Njc4MDAwIDEwMCAtPiAwDQorZHFybW44MjIgcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4MDAwICAgLT4gMQ0KK2Rxcm1uODIzIHJlbWFpbmRlcm5lYXIgMTIzNDU2NzgwMCAgMTAgIC0+IDANCitkcXJtbjgyNCByZW1haW5kZXJuZWFyIDEgMTIzNDU2NzgwMCAgICAtPiAxDQorZHFybW44MjUgcmVtYWluZGVybmVhciAxMjM0NTY3ODkwICAxMCAgLT4gMA0KK2Rxcm1uODI2IHJlbWFpbmRlcm5lYXIgMSAxMjM0NTY3ODkwICAgIC0+IDENCitkcXJtbjgyNyByZW1haW5kZXJuZWFyIDEyMzQ1Njc4OTEgIDEwICAtPiAxDQorZHFybW44MjggcmVtYWluZGVybmVhciAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KK2Rxcm1uODI5IHJlbWFpbmRlcm5lYXIgMTIzNDU2Nzg5MDEgMTAwIC0+IDENCitkcXJtbjgzMCByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5MDEgICAtPiAxDQorZHFybW44MzEgcmVtYWluZGVybmVhciAxMjM0NTY3ODk2ICAxMCAgLT4gLTQNCitkcXJtbjgzMiByZW1haW5kZXJuZWFyIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQorDQorLS0gZnJvbSBkaXZpZGVpbnQNCitkcXJtbjg0MCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuMCAgIDEgIC0+ICAwLjANCitkcXJtbjg0MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNCAgIDEgIC0+ICAwLjQNCitkcXJtbjg0MiByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuNSAgIDEgIC0+ICAwLjUNCitkcXJtbjg0MyByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOSAgIDEgIC0+IC0wLjENCitkcXJtbjg0NCByZW1haW5kZXJuZWFyICAxMDAwMDAwMDAuOTk5IDEgIC0+IC0wLjAwMQ0KK2Rxcm1uODUwIHJlbWFpbmRlcm5lYXIgIDEwMDAwMDAwMyAgICAgNSAgLT4gLTINCitkcXJtbjg1MSByZW1haW5kZXJuZWFyICAxMDAwMDAwMyAgICAgIDUgIC0+IC0yDQorZHFybW44NTIgcmVtYWluZGVybmVhciAgMTAwMDAwMyAgICAgICA1ICAtPiAtMg0KK2Rxcm1uODUzIHJlbWFpbmRlcm5lYXIgIDEwMDAwMyAgICAgICAgNSAgLT4gLTINCitkcXJtbjg1NCByZW1haW5kZXJuZWFyICAxMDAwMyAgICAgICAgIDUgIC0+IC0yDQorZHFybW44NTUgcmVtYWluZGVybmVhciAgMTAwMyAgICAgICAgICA1ICAtPiAtMg0KK2Rxcm1uODU2IHJlbWFpbmRlcm5lYXIgIDEwMyAgICAgICAgICAgNSAgLT4gLTINCitkcXJtbjg1NyByZW1haW5kZXJuZWFyICAxMyAgICAgICAgICAgIDUgIC0+IC0yDQorZHFybW44NTggcmVtYWluZGVybmVhciAgMSAgICAgICAgICAgICA1ICAtPiAgMQ0KKw0KKy0tIFZsYWRpbWlyJ3MgY2FzZXMgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2DQorZHFybW44NjAgcmVtYWluZGVybmVhciAxMjMuMGUxIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkcXJtbjg2MSByZW1haW5kZXJuZWFyIDEyMzAgICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2Rxcm1uODYyIHJlbWFpbmRlcm5lYXIgMTIuM2UyICAxMDAwMDAwMDAwMDAwMDAwICAtPiAxMjMwDQorZHFybW44NjMgcmVtYWluZGVybmVhciAxLjIzZTMgIDEwMDAwMDAwMDAwMDAwMDAgIC0+IDEyMzANCitkcXJtbjg2NCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAgLT4gMTIzMA0KK2Rxcm1uODcwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44NzEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgMTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjg3MiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgMTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODczIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgMTAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44NzQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgMTAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjg3NSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgMTAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODc2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgMTAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44NzcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgMTAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjg3OCByZW1haW5kZXJuZWFyIDEyMzAgICAgICAgICAgICAxMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODc5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAxMDAwMDAwMCAtPiAxMjMwDQorZHFybW44ODAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAxMDAwMDAwIC0+IDEyMzANCitkcXJtbjg4MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAxMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODgyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAxMDAwMCAtPiAxMjMwDQorZHFybW44ODMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAxMDAwIC0+ICAyMzANCitkcXJtbjg4NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAxMDAgLT4gICAzMA0KK2Rxcm1uODg1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAxMCAtPiAgICAwDQorZHFybW44ODYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICAxIC0+ICAgIDANCisNCitkcXJtbjg5MCByZW1haW5kZXJuZWFyIDEyM2UxICAgIDIwMDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODkxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgIDIwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44OTIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgIDIwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjg5MyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgIDIwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODk0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgIDIwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44OTUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgIDIwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjg5NiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgIDIwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uODk3IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgIDIwMDAwMDAwMCAtPiAxMjMwDQorZHFybW44OTkgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgIDIwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkwMCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgIDIwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTAxIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgIDIwMDAwMCAtPiAxMjMwDQorZHFybW45MDIgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgIDIwMDAwIC0+IDEyMzANCitkcXJtbjkwMyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgIDIwMDAgLT4gLTc3MA0KK2Rxcm1uOTA0IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgIDIwMCAtPiAgIDMwDQorZHFybW45MDUgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgIDIwIC0+ICAtMTANCitkcXJtbjkwNiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgIDIgLT4gICAgMA0KKw0KK2Rxcm1uOTEwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgNTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45MTEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgNTAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkxMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgNTAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTEzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgNTAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45MTQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgNTAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkxNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgNTAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTE2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgNTAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45MTcgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgNTAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkxOSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgNTAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTIwIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgNTAwMDAwMCAtPiAxMjMwDQorZHFybW45MjEgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgNTAwMDAwIC0+IDEyMzANCitkcXJtbjkyMiByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgNTAwMDAgLT4gMTIzMA0KK2Rxcm1uOTIzIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgNTAwMCAtPiAxMjMwDQorZHFybW45MjQgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgNTAwIC0+ICAyMzANCitkcXJtbjkyNSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICAgNTAgLT4gIC0yMA0KK2Rxcm1uOTI2IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICAgNSAtPiAgICAwDQorDQorZHFybW45MzAgcmVtYWluZGVybmVhciAxMjNlMSAgICA5MDAwMDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkzMSByZW1haW5kZXJuZWFyIDEyM2UxICAgICA5MDAwMDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTMyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICA5MDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45MzMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICA5MDAwMDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkzNCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICA5MDAwMDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTM1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICA5MDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45MzYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICA5MDAwMDAwMDAwIC0+IDEyMzANCitkcXJtbjkzNyByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICA5MDAwMDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTM5IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICA5MDAwMDAwMCAtPiAxMjMwDQorZHFybW45NDAgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICA5MDAwMDAwIC0+IDEyMzANCitkcXJtbjk0MSByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICA5MDAwMDAgLT4gMTIzMA0KK2Rxcm1uOTQyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICA5MDAwMCAtPiAxMjMwDQorZHFybW45NDMgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICA5MDAwIC0+IDEyMzANCitkcXJtbjk0NCByZW1haW5kZXJuZWFyIDEyM2UxICAgICAgICAgICAgICAgICA5MDAgLT4gIDMzMA0KK2Rxcm1uOTQ1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICAgICAgICAgICAgICAgICA5MCAtPiAgLTMwDQorZHFybW45NDYgcmVtYWluZGVybmVhciAxMjNlMSAgICAgICAgICAgICAgICAgICA5IC0+ICAgLTMNCisNCitkcXJtbjk1MCByZW1haW5kZXJuZWFyIDEyM2UxICAgMTAwMDAwMDAwMDAwMDAwMCAtPiAxMjMwDQorZHFybW45NjEgcmVtYWluZGVybmVhciAxMjNlMSAgIDI5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rxcm1uOTYyIHJlbWFpbmRlcm5lYXIgMTIzZTEgICAzOTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJtbjk2MyByZW1haW5kZXJuZWFyIDEyM2UxICAgNDk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQorZHFybW45NjQgcmVtYWluZGVybmVhciAxMjNlMSAgIDU5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rxcm1uOTY1IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA2OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJtbjk2NiByZW1haW5kZXJuZWFyIDEyM2UxICAgNzk5OTk5OTk5OTk5OTk5OSAtPiAxMjMwDQorZHFybW45NjcgcmVtYWluZGVybmVhciAxMjNlMSAgIDg5OTk5OTk5OTk5OTk5OTkgLT4gMTIzMA0KK2Rxcm1uOTY4IHJlbWFpbmRlcm5lYXIgMTIzZTEgICA5OTk5OTk5OTk5OTk5OTk5IC0+IDEyMzANCitkcXJtbjk2OSByZW1haW5kZXJuZWFyIDEyM2UxICAgOTg3NjU0MzIxMDk4NzY1NCAtPiAxMjMwDQorDQorZHFybW45ODAgcmVtYWluZGVybmVhciAxMjNlMSAxMDAwRTI5OSAtPiAxLjIzRSszICAtLSAxMjNFKzEgaW50ZXJuYWxseQ0KKw0KKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgW2Zyb20gZGl2aWRlXQ0KK2Rxcm1uMTA1MSByZW1haW5kZXJuZWFyICAxZSsyNzcgIDFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJtbjEwNTIgcmVtYWluZGVybmVhciAgMWUrMjc3IC0xZS0zMTEgLT4gIE5hTiBEaXZpc2lvbl9pbXBvc3NpYmxlDQorZHFybW4xMDUzIHJlbWFpbmRlcm5lYXIgLTFlKzI3NyAgMWUtMzExIC0+ICBOYU4gRGl2aXNpb25faW1wb3NzaWJsZQ0KK2Rxcm1uMTA1NCByZW1haW5kZXJuZWFyIC0xZSsyNzcgLTFlLTMxMSAtPiAgTmFOIERpdmlzaW9uX2ltcG9zc2libGUNCitkcXJtbjEwNTUgcmVtYWluZGVybmVhciAgMWUtMjc3ICAxZSszMTEgLT4gIDFFLTI3Nw0KK2Rxcm1uMTA1NiByZW1haW5kZXJuZWFyICAxZS0yNzcgLTFlKzMxMSAtPiAgMUUtMjc3DQorZHFybW4xMDU3IHJlbWFpbmRlcm5lYXIgLTFlLTI3NyAgMWUrMzExIC0+IC0xRS0yNzcNCitkcXJtbjEwNTggcmVtYWluZGVybmVhciAtMWUtMjc3IC0xZSszMTEgLT4gLTFFLTI3Nw0KKw0KKy0tIEd5dXJpcyBleGFtcGxlDQorZHFybW4xMDcwIHJlbWFpbmRlciA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0MyA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4OTAwMEUtNjE0MyAtPiA4LjMzNjgwNDQxODA5NDA0MDk4OTYzMDAwNjgxOTg4MTcwOUUtNjE0Mw0KKw0KKy0tIGRlc3RydWN0aXZlIHN1YnRyYWN0DQorZHFybW4xMTAxICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0wLjIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzMw0KK2Rxcm1uMTEwMiAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgLTAuMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMjINCitkcXJtbjExMDMgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgICAtMC40NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMTExDQorZHFybW4xMTA0ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjU1ICA0LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gIC0xLjMwODY0MTk3MjUzMDg2NDE5NzI1MzA4NjQxOTcyNTMxNA0KK2Rxcm1uMTEwNSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgMS42OTEzNTgwMjc0NjkxMzU4MDI3NDY5MTM1ODAyNzQ2OTINCitkcXJtbjExMDYgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAtPiAgICAtMS4zMDg2NDIxOTc1MzA4NjQyMTk3NTMwODY0MjE5NzQ4DQorZHFybW4xMTA3ICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gICAgMS40NjkxMzU3ODAyNDY5MTM1NzgwMjQ2OTEzNTc4MDI0Nw0KK2Rxcm1uMTEwOCAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgIC0+ICAtMC43NTMwODY0MjE5NzUzMDg2NDIxOTc1MzA4NjQyMTk3NTMNCitkcXJtbjExMDkgIHJlbWFpbmRlcm5lYXIgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAtPiAgLTEuMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDY5MTM1NzgwMjQ3DQorZHFybW4xMTEwICByZW1haW5kZXJuZWFyICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gICAgMS41MzA4NjQyMTk3NTMwODY0MjE5NzUzMDg2NDIxOTc1NA0KK2Rxcm1uMTExMSAgcmVtYWluZGVybmVhciAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+ICAgIC0wLjY5MTM1NzgwMjQ2OTEzNTc4MDI0NjkxMzU3ODAyNDINCisNCistLSBOdWxsIHRlc3RzDQorZHFybW4xMDAwIHJlbWFpbmRlcm5lYXIgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFybW4xMDAxIHJlbWFpbmRlcm5lYXIgICMgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxUm90YXRlLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdAppbmRleCBlZGNmOWVlLi44NThiODIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFSb3RhdGUuZGVjVGVzdApAQCAtMSwyOTggKzEsMjk4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxUm90YXRlLmRlY1Rlc3QgLS0gcm90YXRlIGRlY1F1YWQgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgMzQKLW1heEV4cG9uZW50OiA2MTQ0Ci1taW5FeHBvbmVudDogLTYxNDMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gU2FuaXR5IGNoZWNrCi1kcXJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKLWRxcm90MDAyIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgICAyICAtPiAgMAotZHFyb3QwMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgIDIgIC0+ICAxMDAKLWRxcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFyb3QwMDUgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgMzQgIC0+ICAxCi1kcXJvdDAwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAotZHFyb3QwMDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTEgIC0+ICA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCi1kcXJvdDAwOSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEKLWRxcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFyb3QwMTEgcm90YXRlICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICA5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ5Ci1kcXJvdDAxMiByb3RhdGUgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKLQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgotZHFyb3QwMTUgcm90YXRlICAgICAgICAxICAgIDEuNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDAxNyByb3RhdGUgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3QwMTggcm90YXRlICAgICAgICAxICAgIDAuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDAyMCByb3RhdGUgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3QwMjEgcm90YXRlICAgICAgICAxICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCi1kcXJvdDAyNSByb3RhdGUgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90MDI3IHJvdGF0ZSAgICAgICAgMSAgICAgMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDAyOCByb3RhdGUgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmdWxsIHBhdHRlcm4KLWRxcm90MDMwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCi1kcXJvdDAzMiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIKLWRxcm90MDMzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMwotZHFyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0Ci1kcXJvdDAzNSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUKLWRxcm90MDM2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NgotZHFyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3Ci1kcXJvdDAzOCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgKLWRxcm90MDM5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OQotZHFyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwCi1kcXJvdDA0MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEKLWRxcm90MDQyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMgotZHFyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzCi1kcXJvdDA0NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQKLWRxcm90MDQ1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NQotZHFyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Ci1kcXJvdDA0OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcKLWRxcm90MDQ5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gOTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3OAotZHFyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5Ci1kcXJvdDA1MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAKLWRxcm90MDUyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQotZHFyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCi1kcXJvdDA1NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKLWRxcm90MDU1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gNTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ci1kcXJvdDA1NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKLWRxcm90MDU4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NwotZHFyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4Ci1kcXJvdDA2MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLWRxcm90MDYxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotZHFyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCi1kcXJvdDA2MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKLWRxcm90MDY0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMwotZHFyb3QwNjUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Ci0KLWRxcm90MDY2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFyb3QwNjcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCi1kcXJvdDA2OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIKLWRxcm90MDY5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMwotZHFyb3QwNzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0Ci1kcXJvdDA3MSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDUKLWRxcm90MDcyIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1NgotZHFyb3QwNzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3Ci1kcXJvdDA3NCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOCAgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2NzgKLWRxcm90MDc1IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OQotZHFyb3QwNzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwCi1kcXJvdDA3NyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTEgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEKLWRxcm90MDc4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMgotZHFyb3QwNzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzCi1kcXJvdDA4MCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTQgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQKLWRxcm90MDgxIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NQotZHFyb3QwODIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Ci1kcXJvdDA4MyByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1NjcKLWRxcm90MDg0IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3OAotZHFyb3QwODUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5Ci1kcXJvdDA4NiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjAgIC0+IDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAKLWRxcm90MDg3IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQotZHFyb3QwODggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCi1kcXJvdDA4OSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjMgIC0+IDQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMKLWRxcm90MDkwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFyb3QwOTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ci1kcXJvdDA5MiByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjYgIC0+IDc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKLWRxcm90MDkzIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NwotZHFyb3QwOTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4Ci1kcXJvdDA5NSByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjkgIC0+ICAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLWRxcm90MDk2IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotZHFyb3QwOTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCi1kcXJvdDA5OCByb3RhdGUgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzIgIC0+IDM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIKLWRxcm90MDk5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMwotZHFyb3QxMDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Ci0KLS0tIHplcm9zCi1kcXJvdDI3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwCi1kcXJvdDI3MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwCi1kcXJvdDI3MiByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgIDAuMDAwCi1kcXJvdDI3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwCi1kcXJvdDI3NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwCi1kcXJvdDI3NSByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFKzEwCi1kcXJvdDI3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwCi1kcXJvdDI3NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwCi1kcXJvdDI3OCByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICArMjkgICAtPiAgLTAuMDAwCi1kcXJvdDI3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwCi1kcXJvdDI4MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwCi1kcXJvdDI4MSByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFKzEwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcXJvdDE0MSByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxcm90MTQyIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NAotZHFyb3QxNDMgcm90YXRlICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXJvdDE0NCByb3RhdGUgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQKLWRxcm90MTQ1IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAotZHFyb3QxNDYgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE0MgotZHFyb3QxNDcgcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE0MgotZHFyb3QxNDggcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCi1kcXJvdDE1MSByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFyb3QxNTIgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDFFLTYxNzYKLWRxcm90MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAxRS02MTc2Ci1kcXJvdDE1NCByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFyb3QxNTUgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKLWRxcm90MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2Ci1kcXJvdDE1NyByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gOUUtNjE3NgotZHFyb3QxNTggcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQKLWRxcm90MTYwIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFyb3QxNjEgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IDEuMEUtNjE3NQotZHFyb3QxNjIgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtNjE3NQotZHFyb3QxNjMgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi0tLSAgbmVnYXRpdmVzCi1kcXJvdDE3MSByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXJvdDE3MyByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXJvdDE3NCByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXJvdDE3NSByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwCi1kcXJvdDE3NiByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE0MgotZHFyb3QxNzcgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNDIKLWRxcm90MTc4IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKLWRxcm90MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFyb3QxODIgcm90YXRlIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC0xRS02MTc2Ci1kcXJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTFFLTYxNzYKLWRxcm90MTg0IHJvdGF0ZSAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFyb3QxODUgcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0Ci1kcXJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYKLWRxcm90MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAtOUUtNjE3NgotZHFyb3QxODggcm90YXRlIC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0Ci1kcXJvdDE5MCByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzCi1kcXJvdDE5MSByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTEuMEUtNjE3NQotZHFyb3QxOTIgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTYxNzUKLWRxcm90MTkzIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLQotLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQotZHFyb3QyMDEgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wCi1kcXJvdDIwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTAKLWRxcm90MjAzIHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCi1kcXJvdDIwNCByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxcm90MjA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDM0ICAtPiAtMQotZHFyb3QyMDYgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXJvdDIwNyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTAKLWRxcm90MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAtNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMwotZHFyb3QyMDkgcm90YXRlIC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC0yMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxCi1kcXJvdDIxMCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQKLWRxcm90MjExIHJvdGF0ZSAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQotZHFyb3QyMTIgcm90YXRlIC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Ci0KLQotLS0gU3BlY2lhbHM7IE5hTnMgYXJlIGhhbmRsZWQgYXMgdXN1YWwKLWRxcm90NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5Ci1kcXJvdDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZHFyb3Q3ODMgcm90YXRlIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRxcm90Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1kcXJvdDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFyb3Q3ODYgcm90YXRlIC1JbmYgICA4ICAgICAtPiAtSW5maW5pdHkKLWRxcm90Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q3ODkgcm90YXRlIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q3OTIgcm90YXRlICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXJvdDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQotZHFyb3Q4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXJvdDgyMSByb3RhdGUgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWRxcm90ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgotZHFyb3Q4MjMgcm90YXRlICBOYU4gLTEgICAgICAtPiAgTmFOCi1kcXJvdDgyNCByb3RhdGUgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWRxcm90ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgotZHFyb3Q4MjYgcm90YXRlICBOYU4gIDEgICAgICAtPiAgTmFOCi1kcXJvdDgyNyByb3RhdGUgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWRxcm90ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgotZHFyb3Q4Mjkgcm90YXRlICBOYU4gIE5hTiAgICAtPiAgTmFOCi1kcXJvdDgzMCByb3RhdGUgLUluZiAgTmFOICAgIC0+ICBOYU4KLWRxcm90ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgotZHFyb3Q4MzIgcm90YXRlIC0xICAgIE5hTiAgICAtPiAgTmFOCi1kcXJvdDgzMyByb3RhdGUgLTAgICAgTmFOICAgIC0+ICBOYU4KLWRxcm90ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgotZHFyb3Q4MzUgcm90YXRlICAxICAgIE5hTiAgICAtPiAgTmFOCi1kcXJvdDgzNiByb3RhdGUgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWRxcm90ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kcXJvdDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0MyByb3RhdGUgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0NiByb3RhdGUgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg0OSByb3RhdGUgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1MiByb3RhdGUgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1NSByb3RhdGUgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1OCByb3RhdGUgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRxcm90ODYxIHJvdGF0ZSAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLWRxcm90ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKLWRxcm90ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLWRxcm90ODY0IHJvdGF0ZSAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLWRxcm90ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKLWRxcm90ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLWRxcm90ODY3IHJvdGF0ZSAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLWRxcm90ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKLWRxcm90ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1kcXJvdDg3MSByb3RhdGUgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg3NCByb3RhdGUgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg3NyByb3RhdGUgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1kcXJvdDg4MCByb3RhdGUgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxcm90ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLWRxcm90ODgzIHJvdGF0ZSAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotZHFyb3Q4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKLWRxcm90ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFSb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBTYW5pdHkgY2hlY2sNCitkcXJvdDAwMSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDANCitkcXJvdDAwMiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDANCitkcXJvdDAwMyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAgMiAgLT4gIDEwMA0KK2Rxcm90MDA0IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxcm90MDA1IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDM0ICAtPiAgMQ0KK2Rxcm90MDA2IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxcm90MDA3IHJvdGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMA0KK2Rxcm90MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAgNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMw0KK2Rxcm90MDA5IHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MQ0KK2Rxcm90MDEwIHJvdGF0ZSAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KK2Rxcm90MDExIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OQ0KK2Rxcm90MDEyIHJvdGF0ZSAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KKw0KKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCitkcXJvdDAxNSByb3RhdGUgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3QwMTcgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDAxOCByb3RhdGUgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90MDE5IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3QwMjAgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDAyMSByb3RhdGUgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90MDIyIHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KK2Rxcm90MDI1IHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3QwMjYgcm90YXRlICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDAyNyByb3RhdGUgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90MDI4IHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZnVsbCBwYXR0ZXJuDQorZHFyb3QwMzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwMzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxDQorZHFyb3QwMzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyDQorZHFyb3QwMzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzDQorZHFyb3QwMzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0DQorZHFyb3QwMzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1DQorZHFyb3QwMzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2DQorZHFyb3QwMzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3DQorZHFyb3QwMzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4DQorZHFyb3QwMzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI1ICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5DQorZHFyb3QwNDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTI0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwDQorZHFyb3QwNDEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIzICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxDQorZHFyb3QwNDIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyDQorZHFyb3QwNDMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIxICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzDQorZHFyb3QwNDQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIwICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwNDUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE5ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1DQorZHFyb3QwNDcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE4ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2DQorZHFyb3QwNDggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3DQorZHFyb3QwNDkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE2ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4DQorZHFyb3QwNTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE1ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5DQorZHFyb3QwNTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTE0ICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQorZHFyb3QwNTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEzICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorZHFyb3QwNTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQorZHFyb3QwNTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTExICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFyb3QwNTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEwICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwNTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTkgICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1DQorZHFyb3QwNTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTggICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2DQorZHFyb3QwNTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTcgICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3DQorZHFyb3QwNTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTYgICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4DQorZHFyb3QwNjAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTUgICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5DQorZHFyb3QwNjEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTQgICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQorZHFyb3QwNjIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTMgICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorZHFyb3QwNjMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTIgICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQorZHFyb3QwNjQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTEgICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFyb3QwNjUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorDQorZHFyb3QwNjYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwNjcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxDQorZHFyb3QwNjggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyDQorZHFyb3QwNjkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMgICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzDQorZHFyb3QwNzAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0DQorZHFyb3QwNzEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1DQorZHFyb3QwNzIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzYgICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2DQorZHFyb3QwNzMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3DQorZHFyb3QwNzQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4DQorZHFyb3QwNzUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzkgICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5DQorZHFyb3QwNzYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwDQorZHFyb3QwNzcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxDQorZHFyb3QwNzggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEyICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyDQorZHFyb3QwNzkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzDQorZHFyb3QwODAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwODEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE1ICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1DQorZHFyb3QwODIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2DQorZHFyb3QwODMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3DQorZHFyb3QwODQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE4ICAtPiA5MDEyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4DQorZHFyb3QwODUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5DQorZHFyb3QwODYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQorZHFyb3QwODcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIxICAtPiAyMzQ1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorZHFyb3QwODggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQorZHFyb3QwODkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFyb3QwOTAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI0ICAtPiA1Njc4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHFyb3QwOTEgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1DQorZHFyb3QwOTIgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2DQorZHFyb3QwOTMgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI3ICAtPiA4OTAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3DQorZHFyb3QwOTQgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4DQorZHFyb3QwOTUgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5DQorZHFyb3QwOTYgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMwICAtPiAxMjM0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQorZHFyb3QwOTcgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorZHFyb3QwOTggcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyDQorZHFyb3QwOTkgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMzICAtPiA0MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFyb3QxMDAgcm90YXRlICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorDQorLS0gemVyb3MNCitkcXJvdDI3MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFLTEwDQorZHFyb3QyNzEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwRS0xMA0KK2Rxcm90MjcyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDANCitkcXJvdDI3MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgIDAuMDAwDQorZHFyb3QyNzQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRSsxMA0KK2Rxcm90Mjc1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTANCitkcXJvdDI3NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFLTEwDQorZHFyb3QyNzcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wRS0xMA0KK2Rxcm90Mjc4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDANCitkcXJvdDI3OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtMjkgICAtPiAgLTAuMDAwDQorZHFyb3QyODAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRSsxMA0KK2Rxcm90MjgxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTANCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Rxcm90MTQxIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxcm90MTQyIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxcm90MTQzIHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxcm90MTQ0IHJvdGF0ZSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxcm90MTQ1IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMA0KK2Rxcm90MTQ2IHJvdGF0ZSAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNDINCitkcXJvdDE0NyByb3RhdGUgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyDQorZHFyb3QxNDggcm90YXRlICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQorZHFyb3QxNTEgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE1MiByb3RhdGUgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3Ng0KK2Rxcm90MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAxRS02MTc2DQorZHFyb3QxNTQgcm90YXRlICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE1NSByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KK2Rxcm90MTU2IHJvdGF0ZSAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiA5RS02MTc2DQorZHFyb3QxNTcgcm90YXRlICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDlFLTYxNzYNCitkcXJvdDE1OCByb3RhdGUgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KK2Rxcm90MTYwIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2Rxcm90MTYxIHJvdGF0ZSAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAxLjBFLTYxNzUNCitkcXJvdDE2MiByb3RhdGUgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1DQorZHFyb3QxNjMgcm90YXRlICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorLS0gIG5lZ2F0aXZlcw0KK2Rxcm90MTcxIHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0xICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcXJvdDE3MiByb3RhdGUgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMzMgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0DQorZHFyb3QxNzMgcm90YXRlIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxcm90MTc0IHJvdGF0ZSAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcXJvdDE3NSByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQorZHFyb3QxNzYgcm90YXRlIC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNDINCitkcXJvdDE3NyByb3RhdGUgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE0Mg0KK2Rxcm90MTc4IHJvdGF0ZSAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCitkcXJvdDE4MSByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE4MiByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTFFLTYxNzYNCitkcXJvdDE4MyByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTFFLTYxNzYNCitkcXJvdDE4NCByb3RhdGUgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE4NSByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE4NiByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYNCitkcXJvdDE4NyByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTlFLTYxNzYNCitkcXJvdDE4OCByb3RhdGUgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXJvdDE5MCByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFyb3QxOTEgcm90YXRlIC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0xLjBFLTYxNzUNCitkcXJvdDE5MiByb3RhdGUgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtNjE3NQ0KK2Rxcm90MTkzIHJvdGF0ZSAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCisNCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQorZHFyb3QyMDEgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wDQorZHFyb3QyMDIgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wDQorZHFyb3QyMDMgcm90YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgIDIgIC0+IC0xMDANCitkcXJvdDIwNCByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXJvdDIwNSByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTENCitkcXJvdDIwNiByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAtMSAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXJvdDIwNyByb3RhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTANCitkcXJvdDIwOCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTQxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCitkcXJvdDIwOSByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDENCitkcXJvdDIxMCByb3RhdGUgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCitkcXJvdDIxMSByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDkNCitkcXJvdDIxMiByb3RhdGUgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCisNCisNCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KK2Rxcm90NzgxIHJvdGF0ZSAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5DQorZHFyb3Q3ODIgcm90YXRlIC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCitkcXJvdDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2Rxcm90Nzg0IHJvdGF0ZSAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZHFyb3Q3ODUgcm90YXRlIC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkNCitkcXJvdDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KK2Rxcm90Nzg3IHJvdGF0ZSAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q3ODggcm90YXRlIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90NzkwIHJvdGF0ZSAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q3OTEgcm90YXRlICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90NzkzIHJvdGF0ZSAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q3OTQgcm90YXRlICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitkcXJvdDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkNCitkcXJvdDgwMiByb3RhdGUgIEluZiAgLTEgICAgIC0+IEluZmluaXR5DQorZHFyb3Q4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KK2Rxcm90ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkNCitkcXJvdDgwNSByb3RhdGUgIEluZiAgIDEgICAgIC0+IEluZmluaXR5DQorZHFyb3Q4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KK2Rxcm90ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4MDggcm90YXRlIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4MTEgcm90YXRlIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4MTQgcm90YXRlICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rxcm90ODIxIHJvdGF0ZSAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2Rxcm90ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK2Rxcm90ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2Rxcm90ODI0IHJvdGF0ZSAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2Rxcm90ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTg0KK2Rxcm90ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTg0KK2Rxcm90ODI3IHJvdGF0ZSAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2Rxcm90ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTg0KK2Rxcm90ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODMwIHJvdGF0ZSAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODMzIHJvdGF0ZSAtMCAgICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODM2IHJvdGF0ZSAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2Rxcm90ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK2Rxcm90ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg0MiByb3RhdGUgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg0NSByb3RhdGUgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg0OCByb3RhdGUgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg1MSByb3RhdGUgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg1NCByb3RhdGUgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXJvdDg1NyByb3RhdGUgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFyb3Q4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KK2Rxcm90ODYyIHJvdGF0ZSArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCitkcXJvdDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorZHFyb3Q4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KK2Rxcm90ODY1IHJvdGF0ZSAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCitkcXJvdDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorZHFyb3Q4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KK2Rxcm90ODY4IHJvdGF0ZSAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCitkcXJvdDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK2Rxcm90ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODcyIHJvdGF0ZSAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc1IHJvdGF0ZSAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc4IHJvdGF0ZSAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODgxIHJvdGF0ZSArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxcm90ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorZHFyb3Q4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQorZHFyb3Q4ODQgcm90YXRlICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCitkcXJvdDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2FtZVF1YW50dW0uZGVjVGVzdAppbmRleCAyNTdjZGE4Li4yZjM1NmJiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTYW1lUXVhbnR1bS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNhbWVRdWFudHVtLmRlY1Rlc3QKQEAgLTEsMzg5ICsxLDM4OSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVNhbWVRdWFudHVtLmRlY1Rlc3QgLS0gY2hlY2sgZGVjUXVhZCBxdWFudHVtcyBtYXRjaCAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIEFsbCBvcGVyYW5kcyBhbmQgcmVzdWx0cyBhcmUgZGVjUXVhZHMuCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kcXNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDEKLWRxc2FtcTAwMiBzYW1lcXVhbnR1bSAgMCAgICAgIDEgICAgICAtPiAgMQotZHFzYW1xMDAzIHNhbWVxdWFudHVtICAxICAgICAgMCAgICAgIC0+ICAxCi1kcXNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDEKLQotZHFzYW1xMDExIHNhbWVxdWFudHVtICAxMCAgICAgMUUrMSAgIC0+IDAKLWRxc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxCi1kcXNhbXEwMTMgc2FtZXF1YW50dW0gIDEwMCAgICAxMEUrMSAgLT4gMAotZHFzYW1xMDE0IHNhbWVxdWFudHVtICAxMDAgICAgMUUrMiAgIC0+IDAKLWRxc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwCi1kcXNhbXEwMTYgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0xICAgLT4gMQotZHFzYW1xMDE3IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMCAgIC0+IDAKLWRxc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxCi1kcXNhbXEwMTkgc2FtZXF1YW50dW0gIDk5OUUtMSA5OS45ICAgLT4gMQotZHFzYW1xMDIwIHNhbWVxdWFudHVtICAxMTFFLTEgMjIuMiAgIC0+IDEKLWRxc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxCi0KLS0tIHplcm9zCi1kcXNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQotZHFzYW1xMDMxIHNhbWVxdWFudHVtICAwLjAgICAgMS4xMSAgIC0+IDAKLWRxc2FtcTAzMiBzYW1lcXVhbnR1bSAgMC4wICAgIDAgICAgICAtPiAwCi1kcXNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQotZHFzYW1xMDM0IHNhbWVxdWFudHVtICAwLjAgICAgMC4wMCAgIC0+IDAKLWRxc2FtcTAzNSBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzAgICAtPiAwCi1kcXNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQotZHFzYW1xMDM3IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMiAgIC0+IDAKLWRxc2FtcTAzOCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE2ICAtPiAwCi1kcXNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQotZHFzYW1xMDQwIHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTggIC0+IDAKLWRxc2FtcTA0MSBzYW1lcXVhbnR1bSAgMEUtMTcgIDAuMEUtMTUgLT4gMAotZHFzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxCi1kcXNhbXEwNDMgc2FtZXF1YW50dW0gIDBFLTE3ICAwLjBFLTE3IC0+IDAKLWRxc2FtcTA0NCBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTYgLT4gMQotZHFzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwCi1kcXNhbXEwNDYgc2FtZXF1YW50dW0gIDBFLTE3IC0wLjBFLTE2IC0+IDEKLWRxc2FtcTA0NyBzYW1lcXVhbnR1bSAtMEUtMTcgIDAuMEUtMTcgLT4gMAotZHFzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxCi1kcXNhbXEwNDkgc2FtZXF1YW50dW0gLTBFLTE3IC0wLjBFLTE3IC0+IDAKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRxc2FtcTA1MSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxCi1kcXNhbXEwNTIgc2FtZXF1YW50dW0gIDFFLTYxNDMgICAgICAgICAgICAgMUUtNjE0MyAgICAgICAgICAgLT4gMQotZHFzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDEKLWRxc2FtcTA1NCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxCi1kcXNhbXEwNTUgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQotZHFzYW1xMDU2IHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDEKLWRxc2FtcTA1NyBzYW1lcXVhbnR1bSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtPiAxCi1kcXNhbXEwNTggc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQotCi1kcXNhbXEwNjEgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQotZHFzYW1xMDYyIHNhbWVxdWFudHVtICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzIC0+IDEKLWRxc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxCi1kcXNhbXEwNjQgc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQotZHFzYW1xMDY1IHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKLWRxc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxCi1kcXNhbXEwNjcgc2FtZXF1YW50dW0gIC0xRS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQotZHFzYW1xMDY4IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKLQotZHFzYW1xMDcxIHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDEKLWRxc2FtcTA3MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAwMEUtNjE0MyAtPiAxCi1kcXNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQotZHFzYW1xMDc0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDEKLWRxc2FtcTA3NSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxCi1kcXNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQotZHFzYW1xMDc3IHNhbWVxdWFudHVtICAtNEUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDEKLWRxc2FtcTA3OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxCi0KLWRxc2FtcTA4MSBzYW1lcXVhbnR1bSAgLTRFLTEwMDYgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDAKLWRxc2FtcTA4MiBzYW1lcXVhbnR1bSAgLTQuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjEzNiAtPiAwCi1kcXNhbXEwODMgc2FtZXF1YW50dW0gIC00RS02MTQwICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwCi1kcXNhbXEwODQgc2FtZXF1YW50dW0gIC00Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxMzYgLT4gMAotZHFzYW1xMDg1IHNhbWVxdWFudHVtICAtNEUtMTAwNiAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMAotZHFzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDAKLWRxc2FtcTA4NyBzYW1lcXVhbnR1bSAgLTRFLTYxMzMgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDAKLWRxc2FtcTA4OCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45NDk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjEzNiAtPiAwCi0KLS0tIHNwZWNpYWxzICYgY29tYmluYXRpb25zCi1kcXNhbXEwMTEwIHNhbWVxdWFudHVtICAtSW5mICAgIC1JbmYgICAtPiAxCi1kcXNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxCi1kcXNhbXEwMTEyIHNhbWVxdWFudHVtICAtSW5mICAgICBOYU4gICAtPiAwCi1kcXNhbXEwMTEzIHNhbWVxdWFudHVtICAtSW5mICAgIC03RSszICAtPiAwCi1kcXNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwCi1kcXNhbXEwMTE1IHNhbWVxdWFudHVtICAtSW5mICAgIC03RS0zICAtPiAwCi1kcXNhbXEwMTE2IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRS0zICAtPiAwCi1kcXNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwCi1kcXNhbXEwMTE4IHNhbWVxdWFudHVtICAtSW5mICAgIC0wRSszICAtPiAwCi1kcXNhbXEwMTE5IHNhbWVxdWFudHVtICAtSW5mICAgICAwRS0zICAtPiAwCi1kcXNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwCi1kcXNhbXEwMTIxIHNhbWVxdWFudHVtICAtSW5mICAgICAwRSszICAtPiAwCi1kcXNhbXEwMTIyIHNhbWVxdWFudHVtICAtSW5mICAgICA3RS0zICAtPiAwCi1kcXNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwCi1kcXNhbXEwMTI0IHNhbWVxdWFudHVtICAtSW5mICAgICA3RSszICAtPiAwCi1kcXNhbXEwMTI1IHNhbWVxdWFudHVtICAtSW5mICAgICBzTmFOICAtPiAwCi0KLWRxc2FtcTAyMTAgc2FtZXF1YW50dW0gICBJbmYgICAgLUluZiAgIC0+IDEKLWRxc2FtcTAyMTEgc2FtZXF1YW50dW0gICBJbmYgICAgIEluZiAgIC0+IDEKLWRxc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDAKLWRxc2FtcTAyMTMgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFKzMgIC0+IDAKLWRxc2FtcTAyMTQgc2FtZXF1YW50dW0gICBJbmYgICAgLTcgICAgIC0+IDAKLWRxc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDAKLWRxc2FtcTAyMTYgc2FtZXF1YW50dW0gICBJbmYgICAgLTBFLTMgIC0+IDAKLWRxc2FtcTAyMTcgc2FtZXF1YW50dW0gICBJbmYgICAgLTAgICAgIC0+IDAKLWRxc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDAKLWRxc2FtcTAyMTkgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFLTMgIC0+IDAKLWRxc2FtcTAyMjAgc2FtZXF1YW50dW0gICBJbmYgICAgIDAgICAgIC0+IDAKLWRxc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDAKLWRxc2FtcTAyMjIgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFLTMgIC0+IDAKLWRxc2FtcTAyMjMgc2FtZXF1YW50dW0gICBJbmYgICAgIDcgICAgIC0+IDAKLWRxc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDAKLWRxc2FtcTAyMjUgc2FtZXF1YW50dW0gICBJbmYgICAgIHNOYU4gIC0+IDAKLQotZHFzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMAotZHFzYW1xMDMxMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgSW5mICAgLT4gMAotZHFzYW1xMDMxMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgTmFOICAgLT4gMQotZHFzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMAotZHFzYW1xMDMxNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtNyAgICAgLT4gMAotZHFzYW1xMDMxNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UtMyAgLT4gMAotZHFzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMAotZHFzYW1xMDMxNyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMCAgICAgLT4gMAotZHFzYW1xMDMxOCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUrMyAgLT4gMAotZHFzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMAotZHFzYW1xMDMyMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMCAgICAgLT4gMAotZHFzYW1xMDMyMSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUrMyAgLT4gMAotZHFzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMAotZHFzYW1xMDMyMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAgNyAgICAgLT4gMAotZHFzYW1xMDMyNCBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UrMyAgLT4gMAotZHFzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQotCi1kcXNhbXEwNDEwIHNhbWVxdWFudHVtICAtN0UrMyAgICAtSW5mICAgLT4gMAotZHFzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDAKLWRxc2FtcTA0MTIgc2FtZXF1YW50dW0gIC03RSszICAgICBOYU4gICAtPiAwCi1kcXNhbXEwNDEzIHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UrMyAgLT4gMQotZHFzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDAKLWRxc2FtcTA0MTUgc2FtZXF1YW50dW0gIC03RSszICAgIC03RS0zICAtPiAwCi1kcXNhbXEwNDE2IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUtMyAgLT4gMAotZHFzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDAKLWRxc2FtcTA0MTggc2FtZXF1YW50dW0gIC03RSszICAgIC0wRSszICAtPiAxCi1kcXNhbXEwNDE5IHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUtMyAgLT4gMAotZHFzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDAKLWRxc2FtcTA0MjEgc2FtZXF1YW50dW0gIC03RSszICAgICAwRSszICAtPiAxCi1kcXNhbXEwNDIyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UtMyAgLT4gMAotZHFzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDAKLWRxc2FtcTA0MjQgc2FtZXF1YW50dW0gIC03RSszICAgICA3RSszICAtPiAxCi1kcXNhbXEwNDI1IHNhbWVxdWFudHVtICAtN0UrMyAgICAgc05hTiAgLT4gMAotCi1kcXNhbXEwNTEwIHNhbWVxdWFudHVtICAtNyAgICAgIC1JbmYgICAtPiAwCi1kcXNhbXEwNTExIHNhbWVxdWFudHVtICAtNyAgICAgICBJbmYgICAtPiAwCi1kcXNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwCi1kcXNhbXEwNTEzIHNhbWVxdWFudHVtICAtNyAgICAgIC03RSszICAtPiAwCi1kcXNhbXEwNTE0IHNhbWVxdWFudHVtICAtNyAgICAgIC03ICAgICAtPiAxCi1kcXNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwCi1kcXNhbXEwNTE2IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRS0zICAtPiAwCi1kcXNhbXEwNTE3IHNhbWVxdWFudHVtICAtNyAgICAgIC0wICAgICAtPiAxCi1kcXNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwCi1kcXNhbXEwNTE5IHNhbWVxdWFudHVtICAtNyAgICAgICAwRS0zICAtPiAwCi1kcXNhbXEwNTIwIHNhbWVxdWFudHVtICAtNyAgICAgICAwICAgICAtPiAxCi1kcXNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwCi1kcXNhbXEwNTIyIHNhbWVxdWFudHVtICAtNyAgICAgICA3RS0zICAtPiAwCi1kcXNhbXEwNTIzIHNhbWVxdWFudHVtICAtNyAgICAgICA3ICAgICAtPiAxCi1kcXNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwCi1kcXNhbXEwNTI1IHNhbWVxdWFudHVtICAtNyAgICAgICBzTmFOICAtPiAwCi0KLWRxc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwCi1kcXNhbXEwNjExIHNhbWVxdWFudHVtICAtN0UtMyAgICAgSW5mICAgLT4gMAotZHFzYW1xMDYxMiBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIE5hTiAgIC0+IDAKLWRxc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwCi1kcXNhbXEwNjE0IHNhbWVxdWFudHVtICAtN0UtMyAgICAtNyAgICAgLT4gMAotZHFzYW1xMDYxNSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTdFLTMgIC0+IDEKLWRxc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxCi1kcXNhbXEwNjE3IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMCAgICAgLT4gMAotZHFzYW1xMDYxOCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTBFKzMgIC0+IDAKLWRxc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxCi1kcXNhbXEwNjIwIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMCAgICAgLT4gMAotZHFzYW1xMDYyMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDBFKzMgIC0+IDAKLWRxc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxCi1kcXNhbXEwNjIzIHNhbWVxdWFudHVtICAtN0UtMyAgICAgNyAgICAgLT4gMAotZHFzYW1xMDYyNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDdFKzMgIC0+IDAKLWRxc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwCi0KLWRxc2FtcTA3MTAgc2FtZXF1YW50dW0gIC0wRS0zICAgIC1JbmYgICAtPiAwCi1kcXNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMAotZHFzYW1xMDcxMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIE5hTiAgIC0+IDAKLWRxc2FtcTA3MTMgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RSszICAtPiAwCi1kcXNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMAotZHFzYW1xMDcxNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFLTMgIC0+IDEKLWRxc2FtcTA3MTYgc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRS0zICAtPiAxCi1kcXNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMAotZHFzYW1xMDcxOCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFKzMgIC0+IDAKLWRxc2FtcTA3MTkgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRS0zICAtPiAxCi1kcXNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMAotZHFzYW1xMDcyMSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFKzMgIC0+IDAKLWRxc2FtcTA3MjIgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RS0zICAtPiAxCi1kcXNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMAotZHFzYW1xMDcyNCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFKzMgIC0+IDAKLWRxc2FtcTA3MjUgc2FtZXF1YW50dW0gIC0wRS0zICAgICBzTmFOICAtPiAwCi0KLWRxc2FtcTA4MTAgc2FtZXF1YW50dW0gIC0wICAgICAgLUluZiAgIC0+IDAKLWRxc2FtcTA4MTEgc2FtZXF1YW50dW0gIC0wICAgICAgIEluZiAgIC0+IDAKLWRxc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDAKLWRxc2FtcTA4MTMgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFKzMgIC0+IDAKLWRxc2FtcTA4MTQgc2FtZXF1YW50dW0gIC0wICAgICAgLTcgICAgIC0+IDEKLWRxc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDAKLWRxc2FtcTA4MTYgc2FtZXF1YW50dW0gIC0wICAgICAgLTBFLTMgIC0+IDAKLWRxc2FtcTA4MTcgc2FtZXF1YW50dW0gIC0wICAgICAgLTAgICAgIC0+IDEKLWRxc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDAKLWRxc2FtcTA4MTkgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFLTMgIC0+IDAKLWRxc2FtcTA4MjAgc2FtZXF1YW50dW0gIC0wICAgICAgIDAgICAgIC0+IDEKLWRxc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDAKLWRxc2FtcTA4MjIgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFLTMgIC0+IDAKLWRxc2FtcTA4MjMgc2FtZXF1YW50dW0gIC0wICAgICAgIDcgICAgIC0+IDEKLWRxc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDAKLWRxc2FtcTA4MjUgc2FtZXF1YW50dW0gIC0wICAgICAgIHNOYU4gIC0+IDAKLQotZHFzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDAKLWRxc2FtcTA5MTEgc2FtZXF1YW50dW0gIC0wRSszICAgICBJbmYgICAtPiAwCi1kcXNhbXEwOTEyIHNhbWVxdWFudHVtICAtMEUrMyAgICAgTmFOICAgLT4gMAotZHFzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDEKLWRxc2FtcTA5MTQgc2FtZXF1YW50dW0gIC0wRSszICAgIC03ICAgICAtPiAwCi1kcXNhbXEwOTE1IHNhbWVxdWFudHVtICAtMEUrMyAgICAtN0UtMyAgLT4gMAotZHFzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDAKLWRxc2FtcTA5MTcgc2FtZXF1YW50dW0gIC0wRSszICAgIC0wICAgICAtPiAwCi1kcXNhbXEwOTE4IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMEUrMyAgLT4gMQotZHFzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDAKLWRxc2FtcTA5MjAgc2FtZXF1YW50dW0gIC0wRSszICAgICAwICAgICAtPiAwCi1kcXNhbXEwOTIxIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMEUrMyAgLT4gMQotZHFzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDAKLWRxc2FtcTA5MjMgc2FtZXF1YW50dW0gIC0wRSszICAgICA3ICAgICAtPiAwCi1kcXNhbXEwOTI0IHNhbWVxdWFudHVtICAtMEUrMyAgICAgN0UrMyAgLT4gMQotZHFzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDAKLQotZHFzYW1xMTExMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtSW5mICAgLT4gMAotZHFzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMAotZHFzYW1xMTExMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgTmFOICAgLT4gMAotZHFzYW1xMTExMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UrMyAgLT4gMAotZHFzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMAotZHFzYW1xMTExNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAtN0UtMyAgLT4gMQotZHFzYW1xMTExNiBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUtMyAgLT4gMQotZHFzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMAotZHFzYW1xMTExOCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMEUrMyAgLT4gMAotZHFzYW1xMTExOSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUtMyAgLT4gMQotZHFzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMAotZHFzYW1xMTEyMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMEUrMyAgLT4gMAotZHFzYW1xMTEyMiBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UtMyAgLT4gMQotZHFzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMAotZHFzYW1xMTEyNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgN0UrMyAgLT4gMAotZHFzYW1xMTEyNSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgc05hTiAgLT4gMAotCi1kcXNhbXExMjEwIHNhbWVxdWFudHVtICAwICAgICAgIC1JbmYgICAtPiAwCi1kcXNhbXExMjExIHNhbWVxdWFudHVtICAwICAgICAgICBJbmYgICAtPiAwCi1kcXNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwCi1kcXNhbXExMjEzIHNhbWVxdWFudHVtICAwICAgICAgIC03RSszICAtPiAwCi1kcXNhbXExMjE0IHNhbWVxdWFudHVtICAwICAgICAgIC03ICAgICAtPiAxCi1kcXNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwCi1kcXNhbXExMjE2IHNhbWVxdWFudHVtICAwICAgICAgIC0wRS0zICAtPiAwCi1kcXNhbXExMjE3IHNhbWVxdWFudHVtICAwICAgICAgIC0wICAgICAtPiAxCi1kcXNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwCi1kcXNhbXExMjE5IHNhbWVxdWFudHVtICAwICAgICAgICAwRS0zICAtPiAwCi1kcXNhbXExMjIwIHNhbWVxdWFudHVtICAwICAgICAgICAwICAgICAtPiAxCi1kcXNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwCi1kcXNhbXExMjIyIHNhbWVxdWFudHVtICAwICAgICAgICA3RS0zICAtPiAwCi1kcXNhbXExMjIzIHNhbWVxdWFudHVtICAwICAgICAgICA3ICAgICAtPiAxCi1kcXNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwCi1kcXNhbXExMjI1IHNhbWVxdWFudHVtICAwICAgICAgICBzTmFOICAtPiAwCi0KLWRxc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDAKLWRxc2FtcTEzMTEgc2FtZXF1YW50dW0gIDBFKzMgICAgIEluZiAgIC0+IDAKLWRxc2FtcTEzMTIgc2FtZXF1YW50dW0gIDBFKzMgICAgIE5hTiAgIC0+IDAKLWRxc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDEKLWRxc2FtcTEzMTQgc2FtZXF1YW50dW0gIDBFKzMgICAgLTcgICAgIC0+IDAKLWRxc2FtcTEzMTUgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFLTMgIC0+IDAKLWRxc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDAKLWRxc2FtcTEzMTcgc2FtZXF1YW50dW0gIDBFKzMgICAgLTAgICAgIC0+IDAKLWRxc2FtcTEzMTggc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFKzMgIC0+IDEKLWRxc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDAKLWRxc2FtcTEzMjAgc2FtZXF1YW50dW0gIDBFKzMgICAgIDAgICAgIC0+IDAKLWRxc2FtcTEzMjEgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFKzMgIC0+IDEKLWRxc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDAKLWRxc2FtcTEzMjMgc2FtZXF1YW50dW0gIDBFKzMgICAgIDcgICAgIC0+IDAKLWRxc2FtcTEzMjQgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFKzMgIC0+IDEKLWRxc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDAKLQotZHFzYW1xMTQxMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtSW5mICAgLT4gMAotZHFzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMAotZHFzYW1xMTQxMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgTmFOICAgLT4gMAotZHFzYW1xMTQxMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UrMyAgLT4gMAotZHFzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMAotZHFzYW1xMTQxNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAtN0UtMyAgLT4gMQotZHFzYW1xMTQxNiBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUtMyAgLT4gMQotZHFzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMAotZHFzYW1xMTQxOCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMEUrMyAgLT4gMAotZHFzYW1xMTQxOSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUtMyAgLT4gMQotZHFzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMAotZHFzYW1xMTQyMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMEUrMyAgLT4gMAotZHFzYW1xMTQyMiBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UtMyAgLT4gMQotZHFzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMAotZHFzYW1xMTQyNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgN0UrMyAgLT4gMAotZHFzYW1xMTQyNSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgc05hTiAgLT4gMAotCi1kcXNhbXExNTEwIHNhbWVxdWFudHVtICA3ICAgICAgLUluZiAgIC0+IDAKLWRxc2FtcTE1MTEgc2FtZXF1YW50dW0gIDcgICAgICAgSW5mICAgLT4gMAotZHFzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwCi1kcXNhbXExNTEzIHNhbWVxdWFudHVtICA3ICAgICAgLTdFKzMgIC0+IDAKLWRxc2FtcTE1MTQgc2FtZXF1YW50dW0gIDcgICAgICAtNyAgICAgLT4gMQotZHFzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwCi1kcXNhbXExNTE2IHNhbWVxdWFudHVtICA3ICAgICAgLTBFLTMgIC0+IDAKLWRxc2FtcTE1MTcgc2FtZXF1YW50dW0gIDcgICAgICAtMCAgICAgLT4gMQotZHFzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwCi1kcXNhbXExNTE5IHNhbWVxdWFudHVtICA3ICAgICAgIDBFLTMgIC0+IDAKLWRxc2FtcTE1MjAgc2FtZXF1YW50dW0gIDcgICAgICAgMCAgICAgLT4gMQotZHFzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwCi1kcXNhbXExNTIyIHNhbWVxdWFudHVtICA3ICAgICAgIDdFLTMgIC0+IDAKLWRxc2FtcTE1MjMgc2FtZXF1YW50dW0gIDcgICAgICAgNyAgICAgLT4gMQotZHFzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwCi1kcXNhbXExNTI1IHNhbWVxdWFudHVtICA3ICAgICAgIHNOYU4gIC0+IDAKLQotZHFzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMAotZHFzYW1xMTYxMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgSW5mICAgLT4gMAotZHFzYW1xMTYxMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgTmFOICAgLT4gMAotZHFzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQotZHFzYW1xMTYxNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtNyAgICAgLT4gMAotZHFzYW1xMTYxNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UtMyAgLT4gMAotZHFzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMAotZHFzYW1xMTYxNyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMCAgICAgLT4gMAotZHFzYW1xMTYxOCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUrMyAgLT4gMQotZHFzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMAotZHFzYW1xMTYyMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMCAgICAgLT4gMAotZHFzYW1xMTYyMSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUrMyAgLT4gMQotZHFzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMAotZHFzYW1xMTYyMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAgNyAgICAgLT4gMAotZHFzYW1xMTYyNCBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UrMyAgLT4gMQotZHFzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMAotCi1kcXNhbXExNzEwIHNhbWVxdWFudHVtICBzTmFOICAgIC1JbmYgICAtPiAwCi1kcXNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwCi1kcXNhbXExNzEyIHNhbWVxdWFudHVtICBzTmFOICAgICBOYU4gICAtPiAxCi1kcXNhbXExNzEzIHNhbWVxdWFudHVtICBzTmFOICAgIC03RSszICAtPiAwCi1kcXNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwCi1kcXNhbXExNzE1IHNhbWVxdWFudHVtICBzTmFOICAgIC03RS0zICAtPiAwCi1kcXNhbXExNzE2IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRS0zICAtPiAwCi1kcXNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwCi1kcXNhbXExNzE4IHNhbWVxdWFudHVtICBzTmFOICAgIC0wRSszICAtPiAwCi1kcXNhbXExNzE5IHNhbWVxdWFudHVtICBzTmFOICAgICAwRS0zICAtPiAwCi1kcXNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwCi1kcXNhbXExNzIxIHNhbWVxdWFudHVtICBzTmFOICAgICAwRSszICAtPiAwCi1kcXNhbXExNzIyIHNhbWVxdWFudHVtICBzTmFOICAgICA3RS0zICAtPiAwCi1kcXNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwCi1kcXNhbXExNzI0IHNhbWVxdWFudHVtICBzTmFOICAgICA3RSszICAtPiAwCi1kcXNhbXExNzI1IHNhbWVxdWFudHVtICBzTmFOICAgICBzTmFOICAtPiAxCi0tLSBub2lzeSBOYU5zCi1kcXNhbXExNzMwIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFOMyAtPiAxCi1kcXNhbXExNzMxIHNhbWVxdWFudHVtICBzTmFOMyAgICBzTmFONCAtPiAxCi1kcXNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxCi1kcXNhbXExNzMzIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFONCAtPiAxCi1kcXNhbXExNzM0IHNhbWVxdWFudHVtICBzTmFOMyAgICAgMyAgICAtPiAwCi1kcXNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwCi1kcXNhbXExNzM2IHNhbWVxdWFudHVtICAgICAgNCAgICBzTmFONCAtPiAwCi1kcXNhbXExNzM3IHNhbWVxdWFudHVtICAgICAgMyAgICAgTmFOMyAtPiAwCi1kcXNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwCi1kcXNhbXExNzM5IHNhbWVxdWFudHVtICAgLUluZiAgICAgTmFOMyAtPiAwCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxU2FtZVF1YW50dW0uZGVjVGVzdCAtLSBjaGVjayBkZWNRdWFkIHF1YW50dW1zIG1hdGNoICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBBbGwgb3BlcmFuZHMgYW5kIHJlc3VsdHMgYXJlIGRlY1F1YWRzLg0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitkcXNhbXEwMDEgc2FtZXF1YW50dW0gIDAgICAgICAwICAgICAgLT4gIDENCitkcXNhbXEwMDIgc2FtZXF1YW50dW0gIDAgICAgICAxICAgICAgLT4gIDENCitkcXNhbXEwMDMgc2FtZXF1YW50dW0gIDEgICAgICAwICAgICAgLT4gIDENCitkcXNhbXEwMDQgc2FtZXF1YW50dW0gIDEgICAgICAxICAgICAgLT4gIDENCisNCitkcXNhbXEwMTEgc2FtZXF1YW50dW0gIDEwICAgICAxRSsxICAgLT4gMA0KK2Rxc2FtcTAxMiBzYW1lcXVhbnR1bSAgMTBFKzEgIDEwRSsxICAtPiAxDQorZHFzYW1xMDEzIHNhbWVxdWFudHVtICAxMDAgICAgMTBFKzEgIC0+IDANCitkcXNhbXEwMTQgc2FtZXF1YW50dW0gIDEwMCAgICAxRSsyICAgLT4gMA0KK2Rxc2FtcTAxNSBzYW1lcXVhbnR1bSAgMC4xICAgIDFFLTIgICAtPiAwDQorZHFzYW1xMDE2IHNhbWVxdWFudHVtICAwLjEgICAgMUUtMSAgIC0+IDENCitkcXNhbXEwMTcgc2FtZXF1YW50dW0gIDAuMSAgICAxRS0wICAgLT4gMA0KK2Rxc2FtcTAxOCBzYW1lcXVhbnR1bSAgOTk5ICAgIDk5OSAgICAtPiAxDQorZHFzYW1xMDE5IHNhbWVxdWFudHVtICA5OTlFLTEgOTkuOSAgIC0+IDENCitkcXNhbXEwMjAgc2FtZXF1YW50dW0gIDExMUUtMSAyMi4yICAgLT4gMQ0KK2Rxc2FtcTAyMSBzYW1lcXVhbnR1bSAgMTExRS0xIDEyMzQuMiAtPiAxDQorDQorLS0gemVyb3MNCitkcXNhbXEwMzAgc2FtZXF1YW50dW0gIDAuMCAgICAxLjEgICAgLT4gMQ0KK2Rxc2FtcTAzMSBzYW1lcXVhbnR1bSAgMC4wICAgIDEuMTEgICAtPiAwDQorZHFzYW1xMDMyIHNhbWVxdWFudHVtICAwLjAgICAgMCAgICAgIC0+IDANCitkcXNhbXEwMzMgc2FtZXF1YW50dW0gIDAuMCAgICAwLjAgICAgLT4gMQ0KK2Rxc2FtcTAzNCBzYW1lcXVhbnR1bSAgMC4wICAgIDAuMDAgICAtPiAwDQorZHFzYW1xMDM1IHNhbWVxdWFudHVtICAwRSsxICAgMEUrMCAgIC0+IDANCitkcXNhbXEwMzYgc2FtZXF1YW50dW0gIDBFKzEgICAwRSsxICAgLT4gMQ0KK2Rxc2FtcTAzNyBzYW1lcXVhbnR1bSAgMEUrMSAgIDBFKzIgICAtPiAwDQorZHFzYW1xMDM4IHNhbWVxdWFudHVtICAwRS0xNyAgMEUtMTYgIC0+IDANCitkcXNhbXEwMzkgc2FtZXF1YW50dW0gIDBFLTE3ICAwRS0xNyAgLT4gMQ0KK2Rxc2FtcTA0MCBzYW1lcXVhbnR1bSAgMEUtMTcgIDBFLTE4ICAtPiAwDQorZHFzYW1xMDQxIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNSAtPiAwDQorZHFzYW1xMDQyIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNiAtPiAxDQorZHFzYW1xMDQzIHNhbWVxdWFudHVtICAwRS0xNyAgMC4wRS0xNyAtPiAwDQorZHFzYW1xMDQ0IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNiAtPiAxDQorZHFzYW1xMDQ1IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNyAtPiAwDQorZHFzYW1xMDQ2IHNhbWVxdWFudHVtICAwRS0xNyAtMC4wRS0xNiAtPiAxDQorZHFzYW1xMDQ3IHNhbWVxdWFudHVtIC0wRS0xNyAgMC4wRS0xNyAtPiAwDQorZHFzYW1xMDQ4IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNiAtPiAxDQorZHFzYW1xMDQ5IHNhbWVxdWFudHVtIC0wRS0xNyAtMC4wRS0xNyAtPiAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitkcXNhbXEwNTEgc2FtZXF1YW50dW0gIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgLT4gMQ0KK2Rxc2FtcTA1MiBzYW1lcXVhbnR1bSAgMUUtNjE0MyAgICAgICAgICAgICAxRS02MTQzICAgICAgICAgICAtPiAxDQorZHFzYW1xMDUzIHNhbWVxdWFudHVtICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0+IDENCitkcXNhbXEwNTQgc2FtZXF1YW50dW0gIDFFLTYxNzYgICAgICAgICAgICAgMUUtNjE3NiAgICAgICAgICAgLT4gMQ0KK2Rxc2FtcTA1NSBzYW1lcXVhbnR1bSAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtPiAxDQorZHFzYW1xMDU2IHNhbWVxdWFudHVtICAxRS02MTQzICAgICAgICAgICAgIDFFLTYxNDMgICAgICAgICAgIC0+IDENCitkcXNhbXEwNTcgc2FtZXF1YW50dW0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLT4gMQ0KK2Rxc2FtcTA1OCBzYW1lcXVhbnR1bSAgMUUtNjE3NiAgICAgICAgICAgICAxRS02MTc2ICAgICAgICAgICAtPiAxDQorDQorZHFzYW1xMDYxIHNhbWVxdWFudHVtICAtMUUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDENCitkcXNhbXEwNjIgc2FtZXF1YW50dW0gIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQ0KK2Rxc2FtcTA2MyBzYW1lcXVhbnR1bSAgLTFFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxDQorZHFzYW1xMDY0IHNhbWVxdWFudHVtICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCitkcXNhbXEwNjUgc2FtZXF1YW50dW0gIC0xRS02MTc2ICAgICAgICAgICAgLTFFLTYxNzYgICAgICAgICAgLT4gMQ0KK2Rxc2FtcTA2NiBzYW1lcXVhbnR1bSAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAtPiAxDQorZHFzYW1xMDY3IHNhbWVxdWFudHVtICAtMUUtNjE0MyAgICAgICAgICAgIC0xRS02MTQzICAgICAgICAgIC0+IDENCitkcXNhbXEwNjggc2FtZXF1YW50dW0gIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgLT4gMQ0KKw0KK2Rxc2FtcTA3MSBzYW1lcXVhbnR1bSAgLTRFLTYxNzYgICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAxDQorZHFzYW1xMDcyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MDAwRS02MTQzIC0+IDENCitkcXNhbXEwNzMgc2FtZXF1YW50dW0gIC00RS02MTQzICAgICAgICAgICAgLTFFLTYxNDMgICAgICAgICAgLT4gMQ0KK2Rxc2FtcTA3NCBzYW1lcXVhbnR1bSAgLTQuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAtOS45OTk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtPiAxDQorZHFzYW1xMDc1IHNhbWVxdWFudHVtICAtNEUtNjE3NiAgICAgICAgICAgIC0xRS02MTc2ICAgICAgICAgIC0+IDENCitkcXNhbXEwNzYgc2FtZXF1YW50dW0gIC00LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgLTEuMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLT4gMQ0KK2Rxc2FtcTA3NyBzYW1lcXVhbnR1bSAgLTRFLTYxNDMgICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAxDQorZHFzYW1xMDc4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0IC0+IDENCisNCitkcXNhbXEwODEgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwDQorZHFzYW1xMDgyIHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDANCitkcXNhbXEwODMgc2FtZXF1YW50dW0gIC00RS02MTQwICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwDQorZHFzYW1xMDg0IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk5OTQ5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDANCitkcXNhbXEwODUgc2FtZXF1YW50dW0gIC00RS0xMDA2ICAgICAgICAgICAtMUUtNjE3NiAgICAgICAgICAtPiAwDQorZHFzYW1xMDg2IHNhbWVxdWFudHVtICAtNC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIC0xLjAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTM2IC0+IDANCitkcXNhbXEwODcgc2FtZXF1YW50dW0gIC00RS02MTMzICAgICAgICAgICAtMUUtNjE0MyAgICAgICAgICAtPiAwDQorZHFzYW1xMDg4IHNhbWVxdWFudHVtICAtNC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIC05Ljk0OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTM2IC0+IDANCisNCistLSBzcGVjaWFscyAmIGNvbWJpbmF0aW9ucw0KK2Rxc2FtcTAxMTAgc2FtZXF1YW50dW0gIC1JbmYgICAgLUluZiAgIC0+IDENCitkcXNhbXEwMTExIHNhbWVxdWFudHVtICAtSW5mICAgICBJbmYgICAtPiAxDQorZHFzYW1xMDExMiBzYW1lcXVhbnR1bSAgLUluZiAgICAgTmFOICAgLT4gMA0KK2Rxc2FtcTAxMTMgc2FtZXF1YW50dW0gIC1JbmYgICAgLTdFKzMgIC0+IDANCitkcXNhbXEwMTE0IHNhbWVxdWFudHVtICAtSW5mICAgIC03ICAgICAtPiAwDQorZHFzYW1xMDExNSBzYW1lcXVhbnR1bSAgLUluZiAgICAtN0UtMyAgLT4gMA0KK2Rxc2FtcTAxMTYgc2FtZXF1YW50dW0gIC1JbmYgICAgLTBFLTMgIC0+IDANCitkcXNhbXEwMTE3IHNhbWVxdWFudHVtICAtSW5mICAgIC0wICAgICAtPiAwDQorZHFzYW1xMDExOCBzYW1lcXVhbnR1bSAgLUluZiAgICAtMEUrMyAgLT4gMA0KK2Rxc2FtcTAxMTkgc2FtZXF1YW50dW0gIC1JbmYgICAgIDBFLTMgIC0+IDANCitkcXNhbXEwMTIwIHNhbWVxdWFudHVtICAtSW5mICAgICAwICAgICAtPiAwDQorZHFzYW1xMDEyMSBzYW1lcXVhbnR1bSAgLUluZiAgICAgMEUrMyAgLT4gMA0KK2Rxc2FtcTAxMjIgc2FtZXF1YW50dW0gIC1JbmYgICAgIDdFLTMgIC0+IDANCitkcXNhbXEwMTIzIHNhbWVxdWFudHVtICAtSW5mICAgICA3ICAgICAtPiAwDQorZHFzYW1xMDEyNCBzYW1lcXVhbnR1bSAgLUluZiAgICAgN0UrMyAgLT4gMA0KK2Rxc2FtcTAxMjUgc2FtZXF1YW50dW0gIC1JbmYgICAgIHNOYU4gIC0+IDANCisNCitkcXNhbXEwMjEwIHNhbWVxdWFudHVtICAgSW5mICAgIC1JbmYgICAtPiAxDQorZHFzYW1xMDIxMSBzYW1lcXVhbnR1bSAgIEluZiAgICAgSW5mICAgLT4gMQ0KK2Rxc2FtcTAyMTIgc2FtZXF1YW50dW0gICBJbmYgICAgIE5hTiAgIC0+IDANCitkcXNhbXEwMjEzIHNhbWVxdWFudHVtICAgSW5mICAgIC03RSszICAtPiAwDQorZHFzYW1xMDIxNCBzYW1lcXVhbnR1bSAgIEluZiAgICAtNyAgICAgLT4gMA0KK2Rxc2FtcTAyMTUgc2FtZXF1YW50dW0gICBJbmYgICAgLTdFLTMgIC0+IDANCitkcXNhbXEwMjE2IHNhbWVxdWFudHVtICAgSW5mICAgIC0wRS0zICAtPiAwDQorZHFzYW1xMDIxNyBzYW1lcXVhbnR1bSAgIEluZiAgICAtMCAgICAgLT4gMA0KK2Rxc2FtcTAyMTggc2FtZXF1YW50dW0gICBJbmYgICAgLTBFKzMgIC0+IDANCitkcXNhbXEwMjE5IHNhbWVxdWFudHVtICAgSW5mICAgICAwRS0zICAtPiAwDQorZHFzYW1xMDIyMCBzYW1lcXVhbnR1bSAgIEluZiAgICAgMCAgICAgLT4gMA0KK2Rxc2FtcTAyMjEgc2FtZXF1YW50dW0gICBJbmYgICAgIDBFKzMgIC0+IDANCitkcXNhbXEwMjIyIHNhbWVxdWFudHVtICAgSW5mICAgICA3RS0zICAtPiAwDQorZHFzYW1xMDIyMyBzYW1lcXVhbnR1bSAgIEluZiAgICAgNyAgICAgLT4gMA0KK2Rxc2FtcTAyMjQgc2FtZXF1YW50dW0gICBJbmYgICAgIDdFKzMgIC0+IDANCitkcXNhbXEwMjI1IHNhbWVxdWFudHVtICAgSW5mICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMDMxMCBzYW1lcXVhbnR1bSAgIE5hTiAgICAtSW5mICAgLT4gMA0KK2Rxc2FtcTAzMTEgc2FtZXF1YW50dW0gICBOYU4gICAgIEluZiAgIC0+IDANCitkcXNhbXEwMzEyIHNhbWVxdWFudHVtICAgTmFOICAgICBOYU4gICAtPiAxDQorZHFzYW1xMDMxMyBzYW1lcXVhbnR1bSAgIE5hTiAgICAtN0UrMyAgLT4gMA0KK2Rxc2FtcTAzMTQgc2FtZXF1YW50dW0gICBOYU4gICAgLTcgICAgIC0+IDANCitkcXNhbXEwMzE1IHNhbWVxdWFudHVtICAgTmFOICAgIC03RS0zICAtPiAwDQorZHFzYW1xMDMxNiBzYW1lcXVhbnR1bSAgIE5hTiAgICAtMEUtMyAgLT4gMA0KK2Rxc2FtcTAzMTcgc2FtZXF1YW50dW0gICBOYU4gICAgLTAgICAgIC0+IDANCitkcXNhbXEwMzE4IHNhbWVxdWFudHVtICAgTmFOICAgIC0wRSszICAtPiAwDQorZHFzYW1xMDMxOSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgMEUtMyAgLT4gMA0KK2Rxc2FtcTAzMjAgc2FtZXF1YW50dW0gICBOYU4gICAgIDAgICAgIC0+IDANCitkcXNhbXEwMzIxIHNhbWVxdWFudHVtICAgTmFOICAgICAwRSszICAtPiAwDQorZHFzYW1xMDMyMiBzYW1lcXVhbnR1bSAgIE5hTiAgICAgN0UtMyAgLT4gMA0KK2Rxc2FtcTAzMjMgc2FtZXF1YW50dW0gICBOYU4gICAgIDcgICAgIC0+IDANCitkcXNhbXEwMzI0IHNhbWVxdWFudHVtICAgTmFOICAgICA3RSszICAtPiAwDQorZHFzYW1xMDMyNSBzYW1lcXVhbnR1bSAgIE5hTiAgICAgc05hTiAgLT4gMQ0KKw0KK2Rxc2FtcTA0MTAgc2FtZXF1YW50dW0gIC03RSszICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMDQxMSBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIEluZiAgIC0+IDANCitkcXNhbXEwNDEyIHNhbWVxdWFudHVtICAtN0UrMyAgICAgTmFOICAgLT4gMA0KK2Rxc2FtcTA0MTMgc2FtZXF1YW50dW0gIC03RSszICAgIC03RSszICAtPiAxDQorZHFzYW1xMDQxNCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTcgICAgIC0+IDANCitkcXNhbXEwNDE1IHNhbWVxdWFudHVtICAtN0UrMyAgICAtN0UtMyAgLT4gMA0KK2Rxc2FtcTA0MTYgc2FtZXF1YW50dW0gIC03RSszICAgIC0wRS0zICAtPiAwDQorZHFzYW1xMDQxNyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgLTAgICAgIC0+IDANCitkcXNhbXEwNDE4IHNhbWVxdWFudHVtICAtN0UrMyAgICAtMEUrMyAgLT4gMQ0KK2Rxc2FtcTA0MTkgc2FtZXF1YW50dW0gIC03RSszICAgICAwRS0zICAtPiAwDQorZHFzYW1xMDQyMCBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDAgICAgIC0+IDANCitkcXNhbXEwNDIxIHNhbWVxdWFudHVtICAtN0UrMyAgICAgMEUrMyAgLT4gMQ0KK2Rxc2FtcTA0MjIgc2FtZXF1YW50dW0gIC03RSszICAgICA3RS0zICAtPiAwDQorZHFzYW1xMDQyMyBzYW1lcXVhbnR1bSAgLTdFKzMgICAgIDcgICAgIC0+IDANCitkcXNhbXEwNDI0IHNhbWVxdWFudHVtICAtN0UrMyAgICAgN0UrMyAgLT4gMQ0KK2Rxc2FtcTA0MjUgc2FtZXF1YW50dW0gIC03RSszICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMDUxMCBzYW1lcXVhbnR1bSAgLTcgICAgICAtSW5mICAgLT4gMA0KK2Rxc2FtcTA1MTEgc2FtZXF1YW50dW0gIC03ICAgICAgIEluZiAgIC0+IDANCitkcXNhbXEwNTEyIHNhbWVxdWFudHVtICAtNyAgICAgICBOYU4gICAtPiAwDQorZHFzYW1xMDUxMyBzYW1lcXVhbnR1bSAgLTcgICAgICAtN0UrMyAgLT4gMA0KK2Rxc2FtcTA1MTQgc2FtZXF1YW50dW0gIC03ICAgICAgLTcgICAgIC0+IDENCitkcXNhbXEwNTE1IHNhbWVxdWFudHVtICAtNyAgICAgIC03RS0zICAtPiAwDQorZHFzYW1xMDUxNiBzYW1lcXVhbnR1bSAgLTcgICAgICAtMEUtMyAgLT4gMA0KK2Rxc2FtcTA1MTcgc2FtZXF1YW50dW0gIC03ICAgICAgLTAgICAgIC0+IDENCitkcXNhbXEwNTE4IHNhbWVxdWFudHVtICAtNyAgICAgIC0wRSszICAtPiAwDQorZHFzYW1xMDUxOSBzYW1lcXVhbnR1bSAgLTcgICAgICAgMEUtMyAgLT4gMA0KK2Rxc2FtcTA1MjAgc2FtZXF1YW50dW0gIC03ICAgICAgIDAgICAgIC0+IDENCitkcXNhbXEwNTIxIHNhbWVxdWFudHVtICAtNyAgICAgICAwRSszICAtPiAwDQorZHFzYW1xMDUyMiBzYW1lcXVhbnR1bSAgLTcgICAgICAgN0UtMyAgLT4gMA0KK2Rxc2FtcTA1MjMgc2FtZXF1YW50dW0gIC03ICAgICAgIDcgICAgIC0+IDENCitkcXNhbXEwNTI0IHNhbWVxdWFudHVtICAtNyAgICAgICA3RSszICAtPiAwDQorZHFzYW1xMDUyNSBzYW1lcXVhbnR1bSAgLTcgICAgICAgc05hTiAgLT4gMA0KKw0KK2Rxc2FtcTA2MTAgc2FtZXF1YW50dW0gIC03RS0zICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMDYxMSBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIEluZiAgIC0+IDANCitkcXNhbXEwNjEyIHNhbWVxdWFudHVtICAtN0UtMyAgICAgTmFOICAgLT4gMA0KK2Rxc2FtcTA2MTMgc2FtZXF1YW50dW0gIC03RS0zICAgIC03RSszICAtPiAwDQorZHFzYW1xMDYxNCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTcgICAgIC0+IDANCitkcXNhbXEwNjE1IHNhbWVxdWFudHVtICAtN0UtMyAgICAtN0UtMyAgLT4gMQ0KK2Rxc2FtcTA2MTYgc2FtZXF1YW50dW0gIC03RS0zICAgIC0wRS0zICAtPiAxDQorZHFzYW1xMDYxNyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgLTAgICAgIC0+IDANCitkcXNhbXEwNjE4IHNhbWVxdWFudHVtICAtN0UtMyAgICAtMEUrMyAgLT4gMA0KK2Rxc2FtcTA2MTkgc2FtZXF1YW50dW0gIC03RS0zICAgICAwRS0zICAtPiAxDQorZHFzYW1xMDYyMCBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDAgICAgIC0+IDANCitkcXNhbXEwNjIxIHNhbWVxdWFudHVtICAtN0UtMyAgICAgMEUrMyAgLT4gMA0KK2Rxc2FtcTA2MjIgc2FtZXF1YW50dW0gIC03RS0zICAgICA3RS0zICAtPiAxDQorZHFzYW1xMDYyMyBzYW1lcXVhbnR1bSAgLTdFLTMgICAgIDcgICAgIC0+IDANCitkcXNhbXEwNjI0IHNhbWVxdWFudHVtICAtN0UtMyAgICAgN0UrMyAgLT4gMA0KK2Rxc2FtcTA2MjUgc2FtZXF1YW50dW0gIC03RS0zICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMDcxMCBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLUluZiAgIC0+IDANCitkcXNhbXEwNzExIHNhbWVxdWFudHVtICAtMEUtMyAgICAgSW5mICAgLT4gMA0KK2Rxc2FtcTA3MTIgc2FtZXF1YW50dW0gIC0wRS0zICAgICBOYU4gICAtPiAwDQorZHFzYW1xMDcxMyBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTdFKzMgIC0+IDANCitkcXNhbXEwNzE0IHNhbWVxdWFudHVtICAtMEUtMyAgICAtNyAgICAgLT4gMA0KK2Rxc2FtcTA3MTUgc2FtZXF1YW50dW0gIC0wRS0zICAgIC03RS0zICAtPiAxDQorZHFzYW1xMDcxNiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgLTBFLTMgIC0+IDENCitkcXNhbXEwNzE3IHNhbWVxdWFudHVtICAtMEUtMyAgICAtMCAgICAgLT4gMA0KK2Rxc2FtcTA3MTggc2FtZXF1YW50dW0gIC0wRS0zICAgIC0wRSszICAtPiAwDQorZHFzYW1xMDcxOSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDBFLTMgIC0+IDENCitkcXNhbXEwNzIwIHNhbWVxdWFudHVtICAtMEUtMyAgICAgMCAgICAgLT4gMA0KK2Rxc2FtcTA3MjEgc2FtZXF1YW50dW0gIC0wRS0zICAgICAwRSszICAtPiAwDQorZHFzYW1xMDcyMiBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIDdFLTMgIC0+IDENCitkcXNhbXEwNzIzIHNhbWVxdWFudHVtICAtMEUtMyAgICAgNyAgICAgLT4gMA0KK2Rxc2FtcTA3MjQgc2FtZXF1YW50dW0gIC0wRS0zICAgICA3RSszICAtPiAwDQorZHFzYW1xMDcyNSBzYW1lcXVhbnR1bSAgLTBFLTMgICAgIHNOYU4gIC0+IDANCisNCitkcXNhbXEwODEwIHNhbWVxdWFudHVtICAtMCAgICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMDgxMSBzYW1lcXVhbnR1bSAgLTAgICAgICAgSW5mICAgLT4gMA0KK2Rxc2FtcTA4MTIgc2FtZXF1YW50dW0gIC0wICAgICAgIE5hTiAgIC0+IDANCitkcXNhbXEwODEzIHNhbWVxdWFudHVtICAtMCAgICAgIC03RSszICAtPiAwDQorZHFzYW1xMDgxNCBzYW1lcXVhbnR1bSAgLTAgICAgICAtNyAgICAgLT4gMQ0KK2Rxc2FtcTA4MTUgc2FtZXF1YW50dW0gIC0wICAgICAgLTdFLTMgIC0+IDANCitkcXNhbXEwODE2IHNhbWVxdWFudHVtICAtMCAgICAgIC0wRS0zICAtPiAwDQorZHFzYW1xMDgxNyBzYW1lcXVhbnR1bSAgLTAgICAgICAtMCAgICAgLT4gMQ0KK2Rxc2FtcTA4MTggc2FtZXF1YW50dW0gIC0wICAgICAgLTBFKzMgIC0+IDANCitkcXNhbXEwODE5IHNhbWVxdWFudHVtICAtMCAgICAgICAwRS0zICAtPiAwDQorZHFzYW1xMDgyMCBzYW1lcXVhbnR1bSAgLTAgICAgICAgMCAgICAgLT4gMQ0KK2Rxc2FtcTA4MjEgc2FtZXF1YW50dW0gIC0wICAgICAgIDBFKzMgIC0+IDANCitkcXNhbXEwODIyIHNhbWVxdWFudHVtICAtMCAgICAgICA3RS0zICAtPiAwDQorZHFzYW1xMDgyMyBzYW1lcXVhbnR1bSAgLTAgICAgICAgNyAgICAgLT4gMQ0KK2Rxc2FtcTA4MjQgc2FtZXF1YW50dW0gIC0wICAgICAgIDdFKzMgIC0+IDANCitkcXNhbXEwODI1IHNhbWVxdWFudHVtICAtMCAgICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMDkxMCBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLUluZiAgIC0+IDANCitkcXNhbXEwOTExIHNhbWVxdWFudHVtICAtMEUrMyAgICAgSW5mICAgLT4gMA0KK2Rxc2FtcTA5MTIgc2FtZXF1YW50dW0gIC0wRSszICAgICBOYU4gICAtPiAwDQorZHFzYW1xMDkxMyBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTdFKzMgIC0+IDENCitkcXNhbXEwOTE0IHNhbWVxdWFudHVtICAtMEUrMyAgICAtNyAgICAgLT4gMA0KK2Rxc2FtcTA5MTUgc2FtZXF1YW50dW0gIC0wRSszICAgIC03RS0zICAtPiAwDQorZHFzYW1xMDkxNiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgLTBFLTMgIC0+IDANCitkcXNhbXEwOTE3IHNhbWVxdWFudHVtICAtMEUrMyAgICAtMCAgICAgLT4gMA0KK2Rxc2FtcTA5MTggc2FtZXF1YW50dW0gIC0wRSszICAgIC0wRSszICAtPiAxDQorZHFzYW1xMDkxOSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDBFLTMgIC0+IDANCitkcXNhbXEwOTIwIHNhbWVxdWFudHVtICAtMEUrMyAgICAgMCAgICAgLT4gMA0KK2Rxc2FtcTA5MjEgc2FtZXF1YW50dW0gIC0wRSszICAgICAwRSszICAtPiAxDQorZHFzYW1xMDkyMiBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIDdFLTMgIC0+IDANCitkcXNhbXEwOTIzIHNhbWVxdWFudHVtICAtMEUrMyAgICAgNyAgICAgLT4gMA0KK2Rxc2FtcTA5MjQgc2FtZXF1YW50dW0gIC0wRSszICAgICA3RSszICAtPiAxDQorZHFzYW1xMDkyNSBzYW1lcXVhbnR1bSAgLTBFKzMgICAgIHNOYU4gIC0+IDANCisNCitkcXNhbXExMTEwIHNhbWVxdWFudHVtICAwRS0zICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMTExMSBzYW1lcXVhbnR1bSAgMEUtMyAgICAgSW5mICAgLT4gMA0KK2Rxc2FtcTExMTIgc2FtZXF1YW50dW0gIDBFLTMgICAgIE5hTiAgIC0+IDANCitkcXNhbXExMTEzIHNhbWVxdWFudHVtICAwRS0zICAgIC03RSszICAtPiAwDQorZHFzYW1xMTExNCBzYW1lcXVhbnR1bSAgMEUtMyAgICAtNyAgICAgLT4gMA0KK2Rxc2FtcTExMTUgc2FtZXF1YW50dW0gIDBFLTMgICAgLTdFLTMgIC0+IDENCitkcXNhbXExMTE2IHNhbWVxdWFudHVtICAwRS0zICAgIC0wRS0zICAtPiAxDQorZHFzYW1xMTExNyBzYW1lcXVhbnR1bSAgMEUtMyAgICAtMCAgICAgLT4gMA0KK2Rxc2FtcTExMTggc2FtZXF1YW50dW0gIDBFLTMgICAgLTBFKzMgIC0+IDANCitkcXNhbXExMTE5IHNhbWVxdWFudHVtICAwRS0zICAgICAwRS0zICAtPiAxDQorZHFzYW1xMTEyMCBzYW1lcXVhbnR1bSAgMEUtMyAgICAgMCAgICAgLT4gMA0KK2Rxc2FtcTExMjEgc2FtZXF1YW50dW0gIDBFLTMgICAgIDBFKzMgIC0+IDANCitkcXNhbXExMTIyIHNhbWVxdWFudHVtICAwRS0zICAgICA3RS0zICAtPiAxDQorZHFzYW1xMTEyMyBzYW1lcXVhbnR1bSAgMEUtMyAgICAgNyAgICAgLT4gMA0KK2Rxc2FtcTExMjQgc2FtZXF1YW50dW0gIDBFLTMgICAgIDdFKzMgIC0+IDANCitkcXNhbXExMTI1IHNhbWVxdWFudHVtICAwRS0zICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMTIxMCBzYW1lcXVhbnR1bSAgMCAgICAgICAtSW5mICAgLT4gMA0KK2Rxc2FtcTEyMTEgc2FtZXF1YW50dW0gIDAgICAgICAgIEluZiAgIC0+IDANCitkcXNhbXExMjEyIHNhbWVxdWFudHVtICAwICAgICAgICBOYU4gICAtPiAwDQorZHFzYW1xMTIxMyBzYW1lcXVhbnR1bSAgMCAgICAgICAtN0UrMyAgLT4gMA0KK2Rxc2FtcTEyMTQgc2FtZXF1YW50dW0gIDAgICAgICAgLTcgICAgIC0+IDENCitkcXNhbXExMjE1IHNhbWVxdWFudHVtICAwICAgICAgIC03RS0zICAtPiAwDQorZHFzYW1xMTIxNiBzYW1lcXVhbnR1bSAgMCAgICAgICAtMEUtMyAgLT4gMA0KK2Rxc2FtcTEyMTcgc2FtZXF1YW50dW0gIDAgICAgICAgLTAgICAgIC0+IDENCitkcXNhbXExMjE4IHNhbWVxdWFudHVtICAwICAgICAgIC0wRSszICAtPiAwDQorZHFzYW1xMTIxOSBzYW1lcXVhbnR1bSAgMCAgICAgICAgMEUtMyAgLT4gMA0KK2Rxc2FtcTEyMjAgc2FtZXF1YW50dW0gIDAgICAgICAgIDAgICAgIC0+IDENCitkcXNhbXExMjIxIHNhbWVxdWFudHVtICAwICAgICAgICAwRSszICAtPiAwDQorZHFzYW1xMTIyMiBzYW1lcXVhbnR1bSAgMCAgICAgICAgN0UtMyAgLT4gMA0KK2Rxc2FtcTEyMjMgc2FtZXF1YW50dW0gIDAgICAgICAgIDcgICAgIC0+IDENCitkcXNhbXExMjI0IHNhbWVxdWFudHVtICAwICAgICAgICA3RSszICAtPiAwDQorZHFzYW1xMTIyNSBzYW1lcXVhbnR1bSAgMCAgICAgICAgc05hTiAgLT4gMA0KKw0KK2Rxc2FtcTEzMTAgc2FtZXF1YW50dW0gIDBFKzMgICAgLUluZiAgIC0+IDANCitkcXNhbXExMzExIHNhbWVxdWFudHVtICAwRSszICAgICBJbmYgICAtPiAwDQorZHFzYW1xMTMxMiBzYW1lcXVhbnR1bSAgMEUrMyAgICAgTmFOICAgLT4gMA0KK2Rxc2FtcTEzMTMgc2FtZXF1YW50dW0gIDBFKzMgICAgLTdFKzMgIC0+IDENCitkcXNhbXExMzE0IHNhbWVxdWFudHVtICAwRSszICAgIC03ICAgICAtPiAwDQorZHFzYW1xMTMxNSBzYW1lcXVhbnR1bSAgMEUrMyAgICAtN0UtMyAgLT4gMA0KK2Rxc2FtcTEzMTYgc2FtZXF1YW50dW0gIDBFKzMgICAgLTBFLTMgIC0+IDANCitkcXNhbXExMzE3IHNhbWVxdWFudHVtICAwRSszICAgIC0wICAgICAtPiAwDQorZHFzYW1xMTMxOCBzYW1lcXVhbnR1bSAgMEUrMyAgICAtMEUrMyAgLT4gMQ0KK2Rxc2FtcTEzMTkgc2FtZXF1YW50dW0gIDBFKzMgICAgIDBFLTMgIC0+IDANCitkcXNhbXExMzIwIHNhbWVxdWFudHVtICAwRSszICAgICAwICAgICAtPiAwDQorZHFzYW1xMTMyMSBzYW1lcXVhbnR1bSAgMEUrMyAgICAgMEUrMyAgLT4gMQ0KK2Rxc2FtcTEzMjIgc2FtZXF1YW50dW0gIDBFKzMgICAgIDdFLTMgIC0+IDANCitkcXNhbXExMzIzIHNhbWVxdWFudHVtICAwRSszICAgICA3ICAgICAtPiAwDQorZHFzYW1xMTMyNCBzYW1lcXVhbnR1bSAgMEUrMyAgICAgN0UrMyAgLT4gMQ0KK2Rxc2FtcTEzMjUgc2FtZXF1YW50dW0gIDBFKzMgICAgIHNOYU4gIC0+IDANCisNCitkcXNhbXExNDEwIHNhbWVxdWFudHVtICA3RS0zICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMTQxMSBzYW1lcXVhbnR1bSAgN0UtMyAgICAgSW5mICAgLT4gMA0KK2Rxc2FtcTE0MTIgc2FtZXF1YW50dW0gIDdFLTMgICAgIE5hTiAgIC0+IDANCitkcXNhbXExNDEzIHNhbWVxdWFudHVtICA3RS0zICAgIC03RSszICAtPiAwDQorZHFzYW1xMTQxNCBzYW1lcXVhbnR1bSAgN0UtMyAgICAtNyAgICAgLT4gMA0KK2Rxc2FtcTE0MTUgc2FtZXF1YW50dW0gIDdFLTMgICAgLTdFLTMgIC0+IDENCitkcXNhbXExNDE2IHNhbWVxdWFudHVtICA3RS0zICAgIC0wRS0zICAtPiAxDQorZHFzYW1xMTQxNyBzYW1lcXVhbnR1bSAgN0UtMyAgICAtMCAgICAgLT4gMA0KK2Rxc2FtcTE0MTggc2FtZXF1YW50dW0gIDdFLTMgICAgLTBFKzMgIC0+IDANCitkcXNhbXExNDE5IHNhbWVxdWFudHVtICA3RS0zICAgICAwRS0zICAtPiAxDQorZHFzYW1xMTQyMCBzYW1lcXVhbnR1bSAgN0UtMyAgICAgMCAgICAgLT4gMA0KK2Rxc2FtcTE0MjEgc2FtZXF1YW50dW0gIDdFLTMgICAgIDBFKzMgIC0+IDANCitkcXNhbXExNDIyIHNhbWVxdWFudHVtICA3RS0zICAgICA3RS0zICAtPiAxDQorZHFzYW1xMTQyMyBzYW1lcXVhbnR1bSAgN0UtMyAgICAgNyAgICAgLT4gMA0KK2Rxc2FtcTE0MjQgc2FtZXF1YW50dW0gIDdFLTMgICAgIDdFKzMgIC0+IDANCitkcXNhbXExNDI1IHNhbWVxdWFudHVtICA3RS0zICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMTUxMCBzYW1lcXVhbnR1bSAgNyAgICAgIC1JbmYgICAtPiAwDQorZHFzYW1xMTUxMSBzYW1lcXVhbnR1bSAgNyAgICAgICBJbmYgICAtPiAwDQorZHFzYW1xMTUxMiBzYW1lcXVhbnR1bSAgNyAgICAgICBOYU4gICAtPiAwDQorZHFzYW1xMTUxMyBzYW1lcXVhbnR1bSAgNyAgICAgIC03RSszICAtPiAwDQorZHFzYW1xMTUxNCBzYW1lcXVhbnR1bSAgNyAgICAgIC03ICAgICAtPiAxDQorZHFzYW1xMTUxNSBzYW1lcXVhbnR1bSAgNyAgICAgIC03RS0zICAtPiAwDQorZHFzYW1xMTUxNiBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRS0zICAtPiAwDQorZHFzYW1xMTUxNyBzYW1lcXVhbnR1bSAgNyAgICAgIC0wICAgICAtPiAxDQorZHFzYW1xMTUxOCBzYW1lcXVhbnR1bSAgNyAgICAgIC0wRSszICAtPiAwDQorZHFzYW1xMTUxOSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRS0zICAtPiAwDQorZHFzYW1xMTUyMCBzYW1lcXVhbnR1bSAgNyAgICAgICAwICAgICAtPiAxDQorZHFzYW1xMTUyMSBzYW1lcXVhbnR1bSAgNyAgICAgICAwRSszICAtPiAwDQorZHFzYW1xMTUyMiBzYW1lcXVhbnR1bSAgNyAgICAgICA3RS0zICAtPiAwDQorZHFzYW1xMTUyMyBzYW1lcXVhbnR1bSAgNyAgICAgICA3ICAgICAtPiAxDQorZHFzYW1xMTUyNCBzYW1lcXVhbnR1bSAgNyAgICAgICA3RSszICAtPiAwDQorZHFzYW1xMTUyNSBzYW1lcXVhbnR1bSAgNyAgICAgICBzTmFOICAtPiAwDQorDQorZHFzYW1xMTYxMCBzYW1lcXVhbnR1bSAgN0UrMyAgICAtSW5mICAgLT4gMA0KK2Rxc2FtcTE2MTEgc2FtZXF1YW50dW0gIDdFKzMgICAgIEluZiAgIC0+IDANCitkcXNhbXExNjEyIHNhbWVxdWFudHVtICA3RSszICAgICBOYU4gICAtPiAwDQorZHFzYW1xMTYxMyBzYW1lcXVhbnR1bSAgN0UrMyAgICAtN0UrMyAgLT4gMQ0KK2Rxc2FtcTE2MTQgc2FtZXF1YW50dW0gIDdFKzMgICAgLTcgICAgIC0+IDANCitkcXNhbXExNjE1IHNhbWVxdWFudHVtICA3RSszICAgIC03RS0zICAtPiAwDQorZHFzYW1xMTYxNiBzYW1lcXVhbnR1bSAgN0UrMyAgICAtMEUtMyAgLT4gMA0KK2Rxc2FtcTE2MTcgc2FtZXF1YW50dW0gIDdFKzMgICAgLTAgICAgIC0+IDANCitkcXNhbXExNjE4IHNhbWVxdWFudHVtICA3RSszICAgIC0wRSszICAtPiAxDQorZHFzYW1xMTYxOSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgMEUtMyAgLT4gMA0KK2Rxc2FtcTE2MjAgc2FtZXF1YW50dW0gIDdFKzMgICAgIDAgICAgIC0+IDANCitkcXNhbXExNjIxIHNhbWVxdWFudHVtICA3RSszICAgICAwRSszICAtPiAxDQorZHFzYW1xMTYyMiBzYW1lcXVhbnR1bSAgN0UrMyAgICAgN0UtMyAgLT4gMA0KK2Rxc2FtcTE2MjMgc2FtZXF1YW50dW0gIDdFKzMgICAgIDcgICAgIC0+IDANCitkcXNhbXExNjI0IHNhbWVxdWFudHVtICA3RSszICAgICA3RSszICAtPiAxDQorZHFzYW1xMTYyNSBzYW1lcXVhbnR1bSAgN0UrMyAgICAgc05hTiAgLT4gMA0KKw0KK2Rxc2FtcTE3MTAgc2FtZXF1YW50dW0gIHNOYU4gICAgLUluZiAgIC0+IDANCitkcXNhbXExNzExIHNhbWVxdWFudHVtICBzTmFOICAgICBJbmYgICAtPiAwDQorZHFzYW1xMTcxMiBzYW1lcXVhbnR1bSAgc05hTiAgICAgTmFOICAgLT4gMQ0KK2Rxc2FtcTE3MTMgc2FtZXF1YW50dW0gIHNOYU4gICAgLTdFKzMgIC0+IDANCitkcXNhbXExNzE0IHNhbWVxdWFudHVtICBzTmFOICAgIC03ICAgICAtPiAwDQorZHFzYW1xMTcxNSBzYW1lcXVhbnR1bSAgc05hTiAgICAtN0UtMyAgLT4gMA0KK2Rxc2FtcTE3MTYgc2FtZXF1YW50dW0gIHNOYU4gICAgLTBFLTMgIC0+IDANCitkcXNhbXExNzE3IHNhbWVxdWFudHVtICBzTmFOICAgIC0wICAgICAtPiAwDQorZHFzYW1xMTcxOCBzYW1lcXVhbnR1bSAgc05hTiAgICAtMEUrMyAgLT4gMA0KK2Rxc2FtcTE3MTkgc2FtZXF1YW50dW0gIHNOYU4gICAgIDBFLTMgIC0+IDANCitkcXNhbXExNzIwIHNhbWVxdWFudHVtICBzTmFOICAgICAwICAgICAtPiAwDQorZHFzYW1xMTcyMSBzYW1lcXVhbnR1bSAgc05hTiAgICAgMEUrMyAgLT4gMA0KK2Rxc2FtcTE3MjIgc2FtZXF1YW50dW0gIHNOYU4gICAgIDdFLTMgIC0+IDANCitkcXNhbXExNzIzIHNhbWVxdWFudHVtICBzTmFOICAgICA3ICAgICAtPiAwDQorZHFzYW1xMTcyNCBzYW1lcXVhbnR1bSAgc05hTiAgICAgN0UrMyAgLT4gMA0KK2Rxc2FtcTE3MjUgc2FtZXF1YW50dW0gIHNOYU4gICAgIHNOYU4gIC0+IDENCistLSBub2lzeSBOYU5zDQorZHFzYW1xMTczMCBzYW1lcXVhbnR1bSAgc05hTjMgICAgc05hTjMgLT4gMQ0KK2Rxc2FtcTE3MzEgc2FtZXF1YW50dW0gIHNOYU4zICAgIHNOYU40IC0+IDENCitkcXNhbXExNzMyIHNhbWVxdWFudHVtICAgTmFOMyAgICAgTmFOMyAtPiAxDQorZHFzYW1xMTczMyBzYW1lcXVhbnR1bSAgIE5hTjMgICAgIE5hTjQgLT4gMQ0KK2Rxc2FtcTE3MzQgc2FtZXF1YW50dW0gIHNOYU4zICAgICAzICAgIC0+IDANCitkcXNhbXExNzM1IHNhbWVxdWFudHVtICAgTmFOMyAgICAgMyAgICAtPiAwDQorZHFzYW1xMTczNiBzYW1lcXVhbnR1bSAgICAgIDQgICAgc05hTjQgLT4gMA0KK2Rxc2FtcTE3Mzcgc2FtZXF1YW50dW0gICAgICAzICAgICBOYU4zIC0+IDANCitkcXNhbXExNzM4IHNhbWVxdWFudHVtICAgIEluZiAgICBzTmFONCAtPiAwDQorZHFzYW1xMTczOSBzYW1lcXVhbnR1bSAgIC1JbmYgICAgIE5hTjMgLT4gMA0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNjYWxlQi5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKaW5kZXggMDQ1ZGM1OC4uMDFlMTE5MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2NhbGVCLmRlY1Rlc3QKQEAgLTEsMjYwICsxLDI2MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVNjYWxlYkIuZGVjVGVzdCAtLSBzY2FsZSBhIGRlY1F1YWQgYnkgcG93ZXJzIG9mIDEwICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIE1heCB8cmhzfCBpcyAyKig2MTQ0KzM0KSA9IDEyMzU2Ci0KLS0tIFNhbml0eSBjaGVja3MKLWRxc2NiMDAxIHNjYWxlYiAgICAgICA3LjUwICAgMTAgLT4gNy41MEUrMTAKLWRxc2NiMDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMwotZHFzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTAKLWRxc2NiMDA0IHNjYWxlYiAgICAgICA3LjUwICAgIDEgLT4gNzUuMAotZHFzY2IwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwCi1kcXNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwCi1kcXNjYjAwNyBzY2FsZWIgICAgICAgNy41MCAgIC0yIC0+IDAuMDc1MAotZHFzY2IwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMAotZHFzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMwotZHFzY2IwMTAgc2NhbGViICAgICAgLTcuNTAgICAgMiAtPiAtNzUwCi1kcXNjYjAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wCi1kcXNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwCi1kcXNjYjAxMyBzY2FsZWIgICAgICAtNy41MCAgIC0xIC0+IC0wLjc1MAotCi0tLSBJbmZpbml0aWVzCi1kcXNjYjAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQotZHFzY2IwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5Ci1kcXNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQotZHFzY2IwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5Ci0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXIKLWRxc2NiMDE4IHNjYWxlYiAgMTAgIEluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwMTkgc2NhbGViICAxMCAtSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5hTnMgYXJlIHVuZGVmaW5lZCBpbiA3NTRyOyBhc3N1bWUgdXN1YWwgcHJvY2Vzc2luZwotLS0gTmFOcywgMCBwYXlsb2FkCi1kcXNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFOCi1kcXNjYjAyMiBzY2FsZWIgICAgICAgIC1OYU4gLTEgLT4gLU5hTgotZHFzY2IwMjMgc2NhbGViICAgICAgICBzTmFOICAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiMDI1IHNjYWxlYiAgICA0ICAgIE5hTiAgICAtPiBOYU4KLWRxc2NiMDI2IHNjYWxlYiAtSW5mICAgLU5hTiAgICAtPiAtTmFOCi1kcXNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAyOCBzY2FsZWIgIEluZiAgLXNOYU4gICAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBub24taW50ZWdlciBSSFMKLWRxc2NiMDMwIHNjYWxlYiAgMS4yMyAgICAxICAgIC0+ICAxMi4zCi1kcXNjYjAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAzMyBzY2FsZWIgIDEuMjMgICAgMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjAzNiBzY2FsZWIgIDEuMjMgICAgMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzCi1kcXNjYjA2MTQgc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2IwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIG91dC1vZiByYW5nZSBSSFMKLWRxc2NiMTIwIHNjYWxlYiAgMS4yMyAgICAxMjM1NSAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcXNjYjEyMSBzY2FsZWIgIDEuMjMgICAgMTIzNTYgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFzY2IxMjIgc2NhbGViICAxLjIzICAgIDEyMzU3ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiMTIzIHNjYWxlYiAgMS4yMyAgICAxMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjEyNCBzY2FsZWIgIDEuMjMgICAtMTIzNTUgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFzY2IxMjUgc2NhbGViICAxLjIzICAgLTEyMzU2ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRxc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC0xMjM1NyAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjEyNyBzY2FsZWIgIDEuMjMgICAtMTIzNTggICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOYU5zLCBub24tMCBwYXlsb2FkCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcXNjYjg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKLWRxc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMgotZHFzY2I4NjMgc2NhbGViICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCi1kcXNjYjg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKLWRxc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQotZHFzY2I4NjYgc2NhbGViIC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQotZHFzY2I4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQotZHFzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQotZHFzY2I4Njkgc2NhbGViICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKLWRxc2NiODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2I4NzMgc2NhbGViIC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2I4NzYgc2NhbGViICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbgotZHFzY2I4Nzkgc2NhbGViICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KLWRxc2NiODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCi1kcXNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmaW5pdGVzCi1kcXNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3Ci1kcXNjYjA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNwotZHFzY2IwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQotZHFzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUKLWRxc2NiMDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MAotZHFzY2IwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MAotZHFzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMAotZHFzY2IwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDAKLWRxc2NiMDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNwotZHFzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNwotZHFzY2IwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41Ci1kcXNjYjA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41Ci1kcXNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MAotZHFzY2IwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwCi1kcXNjYjA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDAKLWRxc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDAKLWRxc2NiMDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcKLWRxc2NiMDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03Ci1kcXNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQotZHFzY2IwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1Ci1kcXNjYjA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwCi1kcXNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MAotZHFzY2IwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDAKLWRxc2NiMDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMAotZHFzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQotZHFzY2IwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzEKLWRxc2NiMDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMgotZHFzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMgotZHFzY2IwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMAotZHFzY2IwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjAKLWRxc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwCi1kcXNjYjA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDAKLWRxc2NiMDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzIKLWRxc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyCi1kcXNjYjA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMKLWRxc2NiMDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMKLWRxc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MAotZHFzY2IwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MAotZHFzY2IwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjAKLWRxc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMAotCi0tLSB6ZXJvcwotZHFzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQotZHFzY2IxMTIgc2NhbGViICAgICAgICAgLTAgIDIgLT4gLTBFKzIKLWRxc2NiMTEzIHNjYWxlYiAgICAgICAwRSs0ICAzIC0+IDBFKzcKLWRxc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4Ci1kcXNjYjExNSBzY2FsZWIgICAgIDAuMDAwMCAgNSAtPiAwRSsxCi1kcXNjYjExNiBzY2FsZWIgICAgLTAuMDAwMCAgNiAtPiAtMEUrMgotZHFzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0Ci1kcXNjYjExOCBzY2FsZWIgICAgIC0wRS0xNDEgOCAtPiAtMEUtMTMzCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1kcXNjYjEzMiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArNjE0NCAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRxc2NiMTMzIHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcXNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFzY2IxMzUgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgIDAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXNjYjEzNiBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAtMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKLWRxc2NiMTM3IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgKzEgIC0+IDFFLTYxNDIKLWRxc2NiMTYxNCBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgIC0wICAtPiAxRS02MTQzCi1kcXNjYjEzOSBzY2FsZWIgIDFFLTYxNDMgICAgICAgICAgIC0xICAtPiAxRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbAotZHFzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyCi1kcXNjYjE0MSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxc2NiMTQyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjE0MyBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgKzEgIC0+IDFFLTYxNzUgICAgICAgICBTdWJub3JtYWwKLWRxc2NiMTQ0IHNjYWxlYiAgMUUtNjE3NiAgICAgICAgICAtMCAgLT4gMUUtNjE3NiAgICAgICAgIFN1Ym5vcm1hbAotZHFzY2IxNDUgc2NhbGViICAxRS02MTc2ICAgICAgICAgIC0xICAtPiAwRS02MTc2ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi1kcXNjYjE1MCBzY2FsZWIgIC0xRS02MTc2ICAgICAgICAgKzEgIC0+IC0xRS02MTc1ICAgICAgICBTdWJub3JtYWwKLWRxc2NiMTUxIHNjYWxlYiAgLTFFLTYxNzYgICAgICAgICAtMCAgLT4gLTFFLTYxNzYgICAgICAgIFN1Ym5vcm1hbAotZHFzY2IxNTIgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0xICAtPiAtMEUtNjE3NiAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFzY2IxNTMgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgKzEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MgotZHFzY2IxNTQgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgKzAgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotZHFzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjE1NiBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgICsxICAtPiAtMUUtNjE0MgotZHFzY2IxNTcgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICAtMCAgLT4gLTFFLTYxNDMKLWRxc2NiMTU4IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgLTEgIC0+IC0xRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbAotZHFzY2IxNTkgc2NhbGViICAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kcXNjYjE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCArMCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0Ci1kcXNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzCi1kcXNjYjE2MiBzY2FsZWIgIC05RSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHFzY2IxNjMgc2NhbGViICAtMUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc29tZSBPcmlnYW1pCi0tLSAodGhlc2UgY2hlY2sgdGhhdCBvdmVyZmxvdyBpcyBiZWluZyBkb25lIGNvcnJlY3RseSkKLWRxc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzYxMDkgICsxIC0+IDEuMDAwRSs2MTEzCi1kcXNjYjE3MiBzY2FsZWIgICAxMDAwRSs2MTEwICArMSAtPiAxLjAwMEUrNjExNAotZHFzY2IxNzMgc2NhbGViICAgMTAwMEUrNjExMSAgKzEgLT4gMS4wMDAwRSs2MTE1ICAgICAgICAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE3NCBzY2FsZWIgICAxMDAwRSs2MTEyICArMSAtPiAxLjAwMDAwRSs2MTE2ICAgICAgICAgICAgICAgICAgIENsYW1wZWQKLWRxc2NiMTc1IHNjYWxlYiAgIDEwMDBFKzYxMTMgICsxIC0+IDEuMDAwMDAwRSs2MTE3ICAgICAgICAgICAgICAgICAgQ2xhbXBlZAotZHFzY2IxNzYgc2NhbGViICAgMTAwMEUrNjExNCAgKzEgLT4gMS4wMDAwMDAwRSs2MTE4ICAgICAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE3NyBzY2FsZWIgICAxMDAwRSs2MTMxICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNSAgICAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE3OCBzY2FsZWIgICAxMDAwRSs2MTMyICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzYgICAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE3OSBzY2FsZWIgICAxMDAwRSs2MTMzICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM3ICAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4MCBzY2FsZWIgICAxMDAwRSs2MTM0ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOCAgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4MSBzY2FsZWIgICAxMDAwRSs2MTM1ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzkgICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4MiBzY2FsZWIgICAxMDAwRSs2MTM2ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQwICAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4MyBzY2FsZWIgICAxMDAwRSs2MTM3ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSAgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4NCBzY2FsZWIgICAxMDAwRSs2MTM4ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDIgICAgICAgICBDbGFtcGVkCi1kcXNjYjE4NSBzY2FsZWIgICAxMDAwRSs2MTM5ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQzICAgICAgICBDbGFtcGVkCi1kcXNjYjE4NiBzY2FsZWIgICAxMDAwRSs2MTQwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgICAgICBDbGFtcGVkCi1kcXNjYjE4NyBzY2FsZWIgICAxMDAwRSs2MTQxICArMSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zCi0tLSAodGhlc2UgY2hlY2sgdGhhdCB1bmRlcmZsb3cgaXMgYmVpbmcgZG9uZSBjb3JyZWN0bHkpCi1kcXNjYjIyMSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgMCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLWRxc2NiMjIyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIyMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMiAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ1IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIyNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMyAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDYgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjI1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC00ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ3IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIyNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ4IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIyNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtNiAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDkgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjI4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC03ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUwIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIyOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtOCAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUxIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtOSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTIgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjMxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUzIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTIgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTUgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjM0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU2IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU3IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTUgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDBFLTYxNTggU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjM3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwRS02MTU5IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzOCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTcgLT4gMS4wMDAwMDAwMDAwMDAwMDAwRS02MTYwIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIzOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMTggLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTYxNjEgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOSAtPiAxLjAwMDAwMDAwMDAwMDAwRS02MTYyIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIwMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjAgLT4gMS4wMDAwMDAwMDAwMDAwRS02MTYzIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIwNCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjEgLT4gMS4wMDAwMDAwMDAwMDBFLTYxNjQgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMiAtPiAxLjAwMDAwMDAwMDAwRS02MTY1IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIwNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjMgLT4gMS4wMDAwMDAwMDAwRS02MTY2IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIwNyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjQgLT4gMS4wMDAwMDAwMDBFLTYxNjcgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNSAtPiAxLjAwMDAwMDAwRS02MTY4IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIwOSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjYgLT4gMS4wMDAwMDAwRS02MTY5IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIxMCBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjcgLT4gMS4wMDAwMDBFLTYxNzAgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOCAtPiAxLjAwMDAwRS02MTcxIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIxMiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMjkgLT4gMS4wMDAwRS02MTcyIFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIxMyBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzAgLT4gMS4wMDBFLTYxNzMgU3Vibm9ybWFsIFJvdW5kZWQKLWRxc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMSAtPiAxLjAwRS02MTc0IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIxNSBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzIgLT4gMS4wRS02MTc1IFN1Ym5vcm1hbCBSb3VuZGVkCi1kcXNjYjIxNiBzY2FsZWIgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAtMzMgLT4gMUUtNjE3NiBTdWJub3JtYWwgUm91bmRlZAotZHFzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM0IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHFzY2IyMTggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM1IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFTY2FsZWJCLmRlY1Rlc3QgLS0gc2NhbGUgYSBkZWNRdWFkIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBNYXggfHJoc3wgaXMgMiooNjE0NCszNCkgPSAxMjM1Ng0KKw0KKy0tIFNhbml0eSBjaGVja3MNCitkcXNjYjAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwDQorZHFzY2IwMDIgc2NhbGViICAgICAgIDcuNTAgICAgMyAtPiA3LjUwRSszDQorZHFzY2IwMDMgc2NhbGViICAgICAgIDcuNTAgICAgMiAtPiA3NTANCitkcXNjYjAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjANCitkcXNjYjAwNSBzY2FsZWIgICAgICAgNy41MCAgICAwIC0+IDcuNTANCitkcXNjYjAwNiBzY2FsZWIgICAgICAgNy41MCAgIC0xIC0+IDAuNzUwDQorZHFzY2IwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTANCitkcXNjYjAwOCBzY2FsZWIgICAgICAgNy41MCAgLTEwIC0+IDcuNTBFLTEwDQorZHFzY2IwMDkgc2NhbGViICAgICAgLTcuNTAgICAgMyAtPiAtNy41MEUrMw0KK2Rxc2NiMDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MA0KK2Rxc2NiMDExIHNjYWxlYiAgICAgIC03LjUwICAgIDEgLT4gLTc1LjANCitkcXNjYjAxMiBzY2FsZWIgICAgICAtNy41MCAgICAwIC0+IC03LjUwDQorZHFzY2IwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTANCisNCistLSBJbmZpbml0aWVzDQorZHFzY2IwMTQgc2NhbGViICBJbmZpbml0eSAgIDEgLT4gSW5maW5pdHkNCitkcXNjYjAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkNCitkcXNjYjAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQ0KK2Rxc2NiMDE3IHNjYWxlYiAgLUluZmluaXR5IC0yIC0+IC1JbmZpbml0eQ0KKw0KKy0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXINCitkcXNjYjAxOCBzY2FsZWIgIDEwICBJbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcNCistLSBOYU5zLCAwIHBheWxvYWQNCitkcXNjYjAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFODQorZHFzY2IwMjIgc2NhbGViICAgICAgICAtTmFOIC0xIC0+IC1OYU4NCitkcXNjYjAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjAyNSBzY2FsZWIgICAgNCAgICBOYU4gICAgLT4gTmFODQorZHFzY2IwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4NCitkcXNjYjAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwMjggc2NhbGViICBJbmYgIC1zTmFOICAgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBub24taW50ZWdlciBSSFMNCitkcXNjYjAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMw0KK2Rxc2NiMDMxIHNjYWxlYiAgMS4yMyAgICAxLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjAzMiBzY2FsZWIgIDEuMjMgICAgMS4xICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMDM0IHNjYWxlYiAgMS4yMyAgICAwLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjAzNSBzY2FsZWIgIDEuMjMgICAgMC4xMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjAzNyBzY2FsZWIgIDEuMjMgICAtMSAgICAtPiAgMC4xMjMNCitkcXNjYjA2MTQgc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMDM5IHNjYWxlYiAgMS4yMyAgIC0xLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMDQyIHNjYWxlYiAgMS4yMyAgIC0wLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IwNDUgc2NhbGViICAxLjIzICAgIDFFKzEgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb3V0LW9mIHJhbmdlIFJIUw0KK2Rxc2NiMTIwIHNjYWxlYiAgMS4yMyAgICAxMjM1NSAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFzY2IxMjEgc2NhbGViICAxLjIzICAgIDEyMzU2ICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcXNjYjEyMiBzY2FsZWIgIDEuMjMgICAgMTIzNTcgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiMTIzIHNjYWxlYiAgMS4yMyAgICAxMjM1OCAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IxMjQgc2NhbGViICAxLjIzICAgLTEyMzU1ICAgICAgIC0+ICAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkcXNjYjEyNSBzY2FsZWIgIDEuMjMgICAtMTIzNTYgICAgICAgLT4gIDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2Rxc2NiMTI2IHNjYWxlYiAgMS4yMyAgIC0xMjM1NyAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2IxMjcgc2NhbGViICAxLjIzICAgLTEyMzU4ICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2Rxc2NiODYxIHNjYWxlYiAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQ0KK2Rxc2NiODYyIHNjYWxlYiAtTmFOMDIgICAtMTAwMCAgICAtPiAtTmFOMg0KK2Rxc2NiODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KK2Rxc2NiODY0IHNjYWxlYiAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONA0KK2Rxc2NiODY1IHNjYWxlYiAgTmFOMDUgICAgTmFONjEgICAtPiAgTmFONQ0KK2Rxc2NiODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCitkcXNjYjg2NyBzY2FsZWIgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxDQorZHFzY2I4Njggc2NhbGViICAxMDAwICAgICBOYU45MSAgIC0+ICBOYU45MQ0KK2Rxc2NiODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQorZHFzY2I4NzEgc2NhbGViICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjg3MiBzY2FsZWIgIHNOYU4wMTIgIC0xMDAwICAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2I4NzQgc2NhbGViICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjg3NSBzY2FsZWIgIHNOYU4wMTUgIHNOYU4xODEgLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2I4Nzcgc2NhbGViIC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjg3OCBzY2FsZWIgLTEwMDAgICAgIHNOYU4yMTEgLT4gIE5hTjIxMSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2NiODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQorZHFzY2I4ODAgc2NhbGViICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24NCitkcXNjYjg4MSBzY2FsZWIgIE5hTjAyNSAgIHNOYU4yNDEgLT4gIE5hTjI0MSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIGZpbml0ZXMNCitkcXNjYjA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3DQorZHFzY2IwNTIgc2NhbGViICAgICAgICAgLTcgICAtMiAgLT4gLTAuMDcNCitkcXNjYjA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1DQorZHFzY2IwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUNCitkcXNjYjA1NSBzY2FsZWIgICAgICAgNy41MCAgIC0yICAtPiAwLjA3NTANCitkcXNjYjA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwDQorZHFzY2IwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMA0KK2Rxc2NiMDU4IHNjYWxlYiAgICAgIC03LjUwMCAgLTIgIC0+IC0wLjA3NTAwDQorZHFzY2IwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43DQorZHFzY2IwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNw0KK2Rxc2NiMDYzIHNjYWxlYiAgICAgICAgIDc1ICAgLTEgIC0+IDcuNQ0KK2Rxc2NiMDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUNCitkcXNjYjA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MA0KK2Rxc2NiMDY2IHNjYWxlYiAgICAgIC03LjUwICAgLTEgIC0+IC0wLjc1MA0KK2Rxc2NiMDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMA0KK2Rxc2NiMDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDANCitkcXNjYjA3MSBzY2FsZWIgICAgICAgICAgNyAgICAwICAtPiA3DQorZHFzY2IwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcNCitkcXNjYjA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQ0KK2Rxc2NiMDc0IHNjYWxlYiAgICAgICAgLTc1ICAgIDAgIC0+IC03NQ0KK2Rxc2NiMDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTANCitkcXNjYjA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MA0KK2Rxc2NiMDc3IHNjYWxlYiAgICAgICA3LjUwMCAgIDAgIC0+IDcuNTAwDQorZHFzY2IwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwDQorZHFzY2IwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQ0KK2Rxc2NiMDgyIHNjYWxlYiAgICAgICAgIC03ICAgIDEgIC0+IC03RSsxDQorZHFzY2IwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyDQorZHFzY2IwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMg0KK2Rxc2NiMDg1IHNjYWxlYiAgICAgICA3LjUwICAgIDEgIC0+IDc1LjANCitkcXNjYjA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMA0KK2Rxc2NiMDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwDQorZHFzY2IwODggc2NhbGViICAgICAgLTcuNTAwICAgMSAgLT4gLTc1LjAwDQorZHFzY2IwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMg0KK2Rxc2NiMDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyDQorZHFzY2IwOTMgc2NhbGViICAgICAgICAgNzUgICAgMiAgLT4gNy41RSszDQorZHFzY2IwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMw0KK2Rxc2NiMDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MA0KK2Rxc2NiMDk2IHNjYWxlYiAgICAgIC03LjUwICAgIDIgIC0+IC03NTANCitkcXNjYjA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMA0KK2Rxc2NiMDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMA0KKw0KKy0tIHplcm9zDQorZHFzY2IxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQ0KK2Rxc2NiMTEyIHNjYWxlYiAgICAgICAgIC0wICAyIC0+IC0wRSsyDQorZHFzY2IxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNw0KK2Rxc2NiMTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4DQorZHFzY2IxMTUgc2NhbGViICAgICAwLjAwMDAgIDUgLT4gMEUrMQ0KK2Rxc2NiMTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyDQorZHFzY2IxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0DQorZHFzY2IxMTggc2NhbGViICAgICAtMEUtMTQxIDggLT4gLTBFLTEzMw0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorZHFzY2IxMzIgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzYxNDQgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHFzY2IxMzMgc2NhbGViICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgKzEwIC0+IEluZmluaXR5ICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcXNjYjEzNCBzY2FsZWIgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2Rxc2NiMTM1IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAwICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NA0KK2Rxc2NiMTM2IHNjYWxlYiAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgIC0xICAtPiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0Mw0KK2Rxc2NiMTM3IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgKzEgIC0+IDFFLTYxNDINCitkcXNjYjE2MTQgc2NhbGViICAxRS02MTQzICAgICAgICAgICAtMCAgLT4gMUUtNjE0Mw0KK2Rxc2NiMTM5IHNjYWxlYiAgMUUtNjE0MyAgICAgICAgICAgLTEgIC0+IDFFLTYxNDQgICAgICAgICAgU3Vibm9ybWFsDQorZHFzY2IxNDAgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgKzEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQyDQorZHFzY2IxNDEgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgIDAgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFzY2IxNDIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTEgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQgU3Vibm9ybWFsIFJvdW5kZWQNCitkcXNjYjE0MyBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgKzEgIC0+IDFFLTYxNzUgICAgICAgICBTdWJub3JtYWwNCitkcXNjYjE0NCBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTAgIC0+IDFFLTYxNzYgICAgICAgICBTdWJub3JtYWwNCitkcXNjYjE0NSBzY2FsZWIgIDFFLTYxNzYgICAgICAgICAgLTEgIC0+IDBFLTYxNzYgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorZHFzY2IxNTAgc2NhbGViICAtMUUtNjE3NiAgICAgICAgICsxICAtPiAtMUUtNjE3NSAgICAgICAgU3Vibm9ybWFsDQorZHFzY2IxNTEgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0wICAtPiAtMUUtNjE3NiAgICAgICAgU3Vibm9ybWFsDQorZHFzY2IxNTIgc2NhbGViICAtMUUtNjE3NiAgICAgICAgIC0xICAtPiAtMEUtNjE3NiAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2Rxc2NiMTUzIHNjYWxlYiAgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICsxICAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDINCitkcXNjYjE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyArMCAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorZHFzY2IxNTUgc2NhbGViICAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IxNTYgc2NhbGViICAtMUUtNjE0MyAgICAgICAgICArMSAgLT4gLTFFLTYxNDINCitkcXNjYjE1NyBzY2FsZWIgIC0xRS02MTQzICAgICAgICAgIC0wICAtPiAtMUUtNjE0Mw0KK2Rxc2NiMTU4IHNjYWxlYiAgLTFFLTYxNDMgICAgICAgICAgLTEgIC0+IC0xRS02MTQ0ICAgICAgICAgIFN1Ym5vcm1hbA0KK2Rxc2NiMTU5IHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2Rxc2NiMTYwIHNjYWxlYiAgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICswICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQNCitkcXNjYjE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQzDQorZHFzY2IxNjIgc2NhbGViICAtOUUrNjE0NCAgICAgICAgICArMSAgLT4gLUluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkcXNjYjE2MyBzY2FsZWIgIC0xRSs2MTQ0ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgT3JpZ2FtaQ0KKy0tICh0aGVzZSBjaGVjayB0aGF0IG92ZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQ0KK2Rxc2NiMTcxIHNjYWxlYiAgIDEwMDBFKzYxMDkgICsxIC0+IDEuMDAwRSs2MTEzDQorZHFzY2IxNzIgc2NhbGViICAgMTAwMEUrNjExMCAgKzEgLT4gMS4wMDBFKzYxMTQNCitkcXNjYjE3MyBzY2FsZWIgICAxMDAwRSs2MTExICArMSAtPiAxLjAwMDBFKzYxMTUgICAgICAgICAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE3NCBzY2FsZWIgICAxMDAwRSs2MTEyICArMSAtPiAxLjAwMDAwRSs2MTE2ICAgICAgICAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE3NSBzY2FsZWIgICAxMDAwRSs2MTEzICArMSAtPiAxLjAwMDAwMEUrNjExNyAgICAgICAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE3NiBzY2FsZWIgICAxMDAwRSs2MTE0ICArMSAtPiAxLjAwMDAwMDBFKzYxMTggICAgICAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE3NyBzY2FsZWIgICAxMDAwRSs2MTMxICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzNSAgICAgICAgICAgICAgICBDbGFtcGVkDQorZHFzY2IxNzggc2NhbGViICAgMTAwMEUrNjEzMiAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM2ICAgICAgICAgICAgICAgQ2xhbXBlZA0KK2Rxc2NiMTc5IHNjYWxlYiAgIDEwMDBFKzYxMzMgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxMzcgICAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE4MCBzY2FsZWIgICAxMDAwRSs2MTM0ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjEzOCAgICAgICAgICAgICBDbGFtcGVkDQorZHFzY2IxODEgc2NhbGViICAgMTAwMEUrNjEzNSAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTM5ICAgICAgICAgICAgQ2xhbXBlZA0KK2Rxc2NiMTgyIHNjYWxlYiAgIDEwMDBFKzYxMzYgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDAgICAgICAgICAgIENsYW1wZWQNCitkcXNjYjE4MyBzY2FsZWIgICAxMDAwRSs2MTM3ICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0MSAgICAgICAgICBDbGFtcGVkDQorZHFzY2IxODQgc2NhbGViICAgMTAwMEUrNjEzOCAgKzEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSs2MTQyICAgICAgICAgQ2xhbXBlZA0KK2Rxc2NiMTg1IHNjYWxlYiAgIDEwMDBFKzYxMzkgICsxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzYxNDMgICAgICAgIENsYW1wZWQNCitkcXNjYjE4NiBzY2FsZWIgICAxMDAwRSs2MTQwICArMSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NCAgICAgICBDbGFtcGVkDQorZHFzY2IxODcgc2NhbGViICAgMTAwMEUrNjE0MSAgKzEgLT4gSW5maW5pdHkgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gYW5kIGEgZmV3IG1vcmUgc3Vibm9ybWFsIHRydW5jYXRpb25zDQorLS0gKHRoZXNlIGNoZWNrIHRoYXQgdW5kZXJmbG93IGlzIGJlaW5nIGRvbmUgY29ycmVjdGx5KQ0KK2Rxc2NiMjIxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAwICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0Mw0KK2Rxc2NiMjIyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMjMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjI0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NiBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjI1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC00ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ3IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMjYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTUgIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjI3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC02ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0OSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjI4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC03ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUwIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMjkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTggIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjMwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC05ICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1MiBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjMxIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMCAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTUzIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMzIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTExIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjMzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjM0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTU2IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMzUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1NyBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjM2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNSAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMEUtNjE1OCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjM3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xNiAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwRS02MTU5IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMzggc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTE3IC0+IDEuMDAwMDAwMDAwMDAwMDAwMEUtNjE2MCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjM5IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOCAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtNjE2MSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjAyIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0xOSAtPiAxLjAwMDAwMDAwMDAwMDAwRS02MTYyIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMDMgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIwIC0+IDEuMDAwMDAwMDAwMDAwMEUtNjE2MyBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjA0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMSAtPiAxLjAwMDAwMDAwMDAwMEUtNjE2NCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjA1IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yMiAtPiAxLjAwMDAwMDAwMDAwRS02MTY1IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMDYgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTIzIC0+IDEuMDAwMDAwMDAwMEUtNjE2NiBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjA3IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNCAtPiAxLjAwMDAwMDAwMEUtNjE2NyBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjA4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNSAtPiAxLjAwMDAwMDAwRS02MTY4IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMDkgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI2IC0+IDEuMDAwMDAwMEUtNjE2OSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjEwIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yNyAtPiAxLjAwMDAwMEUtNjE3MCBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjExIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0yOCAtPiAxLjAwMDAwRS02MTcxIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMTIgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTI5IC0+IDEuMDAwMEUtNjE3MiBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjEzIHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMCAtPiAxLjAwMEUtNjE3MyBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjE0IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMSAtPiAxLjAwRS02MTc0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMTUgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTMyIC0+IDEuMEUtNjE3NSBTdWJub3JtYWwgUm91bmRlZA0KK2Rxc2NiMjE2IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zMyAtPiAxRS02MTc2IFN1Ym5vcm1hbCBSb3VuZGVkDQorZHFzY2IyMTcgc2NhbGViICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgLTM0IC0+IDBFLTYxNzYgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2Rxc2NiMjE4IHNjYWxlYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgIC0zNSAtPiAwRS02MTc2IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU2hpZnQuZGVjVGVzdAppbmRleCA2ZDY5MjEzLi40ZWU4MzZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTaGlmdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVNoaWZ0LmRlY1Rlc3QKQEAgLTEsMjk4ICsxLDI5OCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1jbGFtcDogICAgICAgMQotcHJlY2lzaW9uOiAgIDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFNhbml0eSBjaGVjawotZHFzaGkwMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMCAgLT4gIDAKLWRxc2hpMDAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDIgIC0+ICAwCi1kcXNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwCi1kcXNoaTAwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDMzICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzNCAgLT4gIDAKLWRxc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwCi1kcXNoaTAwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAgIC0yICAtPiAgMAotZHFzaGkwMDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMwotZHFzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDEKLWRxc2hpMDEwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+ICAwCi1kcXNoaTAxMSBzaGlmdCAgOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAgOQotZHFzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDAKLQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgotZHFzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMTYgc2hpZnQgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMTcgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMTkgc2hpZnQgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjAgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjIgc2hpZnQgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbgotZHFzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjYgc2hpZnQgICAgICAgIDEgICAgLTM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjcgc2hpZnQgICAgICAgIDEgICAgIDM1ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KLWRxc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAwCi1kcXNoaTAzMSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMyAgLT4gMQotZHFzaGkwMzIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzIgIC0+IDEyCi1kcXNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gMTIzCi1kcXNoaTAzNCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMCAgLT4gMTIzNAotZHFzaGkwMzUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjkgIC0+IDEyMzQ1Ci1kcXNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gMTIzNDU2Ci1kcXNoaTAzNyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNyAgLT4gMTIzNDU2NwotZHFzaGkwMzggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjYgIC0+IDEyMzQ1Njc4Ci1kcXNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gMTIzNDU2Nzg5Ci1kcXNoaTA0MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNCAgLT4gMTIzNDU2Nzg5MAotZHFzaGkwNDEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjMgIC0+IDEyMzQ1Njc4OTAxCi1kcXNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMTIzNDU2Nzg5MDEyCi1kcXNoaTA0MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMSAgLT4gMTIzNDU2Nzg5MDEyMwotZHFzaGkwNDQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjAgIC0+IDEyMzQ1Njc4OTAxMjM0Ci1kcXNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Ci1kcXNoaTA0NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NgotZHFzaGkwNDggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTcgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3Ci1kcXNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4Ci1kcXNoaTA1MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OQotZHFzaGkwNTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTQgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwCi1kcXNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxCi1kcXNoaTA1MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMgotZHFzaGkwNTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTEgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCi1kcXNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Ci1kcXNoaTA1NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC05ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NQotZHFzaGkwNTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Ci1kcXNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3Ci1kcXNoaTA1OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC02ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3OAotZHFzaGkwNjAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5Ci1kcXNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwCi1kcXNoaTA2MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQotZHFzaGkwNjMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyCi1kcXNoaTA2NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzCi1kcXNoaTA2NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0wICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotCi1kcXNoaTA2NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNAotZHFzaGkwNjcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAKLWRxc2hpMDY4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwCi1kcXNoaTA2OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMAotZHFzaGkwNzAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNCAgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAKLWRxc2hpMDcxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzUgICAtPiA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwCi1kcXNoaTA3MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMAotZHFzaGkwNzMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNyAgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAKLWRxc2hpMDc0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzggICAtPiA5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwCi1kcXNoaTA3NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMAotZHFzaGkwNzYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAKLWRxc2hpMDc3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzExICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwCi1kcXNoaTA3OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMAotZHFzaGkwNzkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTMgIC0+IDQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAKLWRxc2hpMDgwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE0ICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA4MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwODIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTYgIC0+IDc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDgzIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE3ICAtPiA4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA4NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwODUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTkgIC0+ICAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDg2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIwICAtPiAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA4NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwODggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjIgIC0+IDM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDg5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIzICAtPiA0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA5MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwOTEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjUgIC0+IDY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDkyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI2ICAtPiA3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA5MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwOTQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjggIC0+IDkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDk1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI5ICAtPiAgMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA5NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkwOTcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzEgIC0+IDIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxc2hpMDk4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMyICAtPiAzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXNoaTA5OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkxMDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzQgIC0+IDAKLQotLS0gemVyb3MKLWRxc2hpMjcwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gICAwRS0xMAotZHFzaGkyNzEgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgIDBFLTEwCi1kcXNoaTI3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDAKLWRxc2hpMjczIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gICAwLjAwMAotZHFzaGkyNzQgc2hpZnQgIDBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgIDBFKzEwCi1kcXNoaTI3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTAKLWRxc2hpMjc2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzI5ICAgLT4gIC0wRS0xMAotZHFzaGkyNzcgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICAtMjkgICAtPiAgLTBFLTEwCi1kcXNoaTI3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDAKLWRxc2hpMjc5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTI5ICAgLT4gIC0wLjAwMAotZHFzaGkyODAgc2hpZnQgLTBFKzEwICAgICAgICAgICAgICArMjkgICAtPiAgLTBFKzEwCi1kcXNoaTI4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTAKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWRxc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKLWRxc2hpMTQyIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IDlFKzYxMTEKLWRxc2hpMTQzIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkwRSs2MTQ0Ci1kcXNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAotZHFzaGkxNDUgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE0MwotZHFzaGkxNDYgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE0MwotZHFzaGkxNDcgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyCi1kcXNoaTE0OCBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjExMAotZHFzaGkxNTEgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3NgotZHFzaGkxNTMgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgotZHFzaGkxNTQgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgotZHFzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFzaGkxNTYgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gOUUtNjE3NgotZHFzaGkxNTcgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gMEUtNjE3NgotZHFzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3NgotZHFzaGkxNjAgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gMEUtNjE3NgotZHFzaGkxNjEgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gMEUtNjE3NgotZHFzaGkxNjIgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1Ci1kcXNoaTE2MyBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MwotLS0gIG5lZ2F0aXZlcwotZHFzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMKLWRxc2hpMTcyIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTMzIC0+IC05RSs2MTExCi1kcXNoaTE3MyBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAxICAtPiAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQKLWRxc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NAotZHFzaGkxNzUgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNDMKLWRxc2hpMTc2IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTQzCi1kcXNoaTE3NyBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyCi1kcXNoaTE3OCBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTAKLWRxc2hpMTgxIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTEgIC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0Ci1kcXNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3NgotZHFzaGkxODMgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYKLWRxc2hpMTg0IHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDMzIC0+IC0wRS02MTc2Ci1kcXNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NAotZHFzaGkxODYgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gLTlFLTYxNzYKLWRxc2hpMTg3IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2Ci1kcXNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3NgotZHFzaGkxOTAgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgLT4gLTBFLTYxNzYKLWRxc2hpMTkxIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTMzIC0+IC0wRS02MTc2Ci1kcXNoaTE5MiBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1Ci1kcXNoaTE5MyBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMyAtPiAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMKLQotLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQotZHFzaGkyMDEgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMCAgLT4gLTAKLWRxc2hpMjAyIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDIgIC0+IC0wCi1kcXNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwCi1kcXNoaTIwNCBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDMzICAtPiAtMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHFzaGkyMDUgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzNCAgLT4gLTAKLWRxc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wCi1kcXNoaTIwNyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMCAgIC0yICAtPiAtMAotZHFzaGkyMDggc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMSAgLT4gLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMwotZHFzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTEKLWRxc2hpMjEwIHNoaWZ0IC0xMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTM0IC0+IC0wCi1kcXNoaTIxMSBzaGlmdCAtOTkzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zMyAtPiAtOQotZHFzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTAKLQotCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAotZHFzaGk3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQotZHFzaGk3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXNoaTgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgwMSBzaGlmdCAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKLWRxc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQotZHFzaGk4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Ci1kcXNoaTgwNCBzaGlmdCAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKLWRxc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQotZHFzaGk4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5Ci1kcXNoaTgwNyBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxMCBzaGlmdCAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxMyBzaGlmdCAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFOCi1kcXNoaTgyMiBzaGlmdCAgTmFOIC0xMDAwICAgLT4gIE5hTgotZHFzaGk4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KLWRxc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFOCi1kcXNoaTgyNSBzaGlmdCAgTmFOICAwICAgICAgLT4gIE5hTgotZHFzaGk4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KLWRxc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFOCi1kcXNoaTgyOCBzaGlmdCAgTmFOICBJbmYgICAgLT4gIE5hTgotZHFzaGk4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KLWRxc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFOCi1kcXNoaTgzMSBzaGlmdCAtMTAwMCBOYU4gICAgLT4gIE5hTgotZHFzaGk4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KLWRxc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFOCi1kcXNoaTgzNCBzaGlmdCAgMCAgICBOYU4gICAgLT4gIE5hTgotZHFzaGk4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KLWRxc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFOCi1kcXNoaTgzNyBzaGlmdCAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1kcXNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotZHFzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xCi1kcXNoaTg2MiBzaGlmdCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKLWRxc2hpODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMwotZHFzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40Ci1kcXNoaTg2NSBzaGlmdCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKLWRxc2hpODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONwotZHFzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44Ci1kcXNoaTg2OCBzaGlmdCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKLWRxc2hpODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKLWRxc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg3MiBzaGlmdCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg3NSBzaGlmdCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg3OCBzaGlmdCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uCi1kcXNoaTg4MSBzaGlmdCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgotZHFzaGk4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgotZHFzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24KLWRxc2hpODg0IHNoaWZ0ICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKLWRxc2hpODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkcVNoaWZ0LmRlY1Rlc3QgLS0gc2hpZnQgZGVjUXVhZCBjb2VmZmljaWVudCBsZWZ0IG9yIHJpZ2h0ICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitjbGFtcDogICAgICAgMQ0KK3ByZWNpc2lvbjogICAzNA0KK21heEV4cG9uZW50OiA2MTQ0DQorbWluRXhwb25lbnQ6IC02MTQzDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIFNhbml0eSBjaGVjaw0KK2Rxc2hpMDAxIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICAgIDAgIC0+ICAwDQorZHFzaGkwMDIgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAgMiAgLT4gIDANCitkcXNoaTAwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgICAyICAtPiAgMTAwDQorZHFzaGkwMDQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgICAzMyAgLT4gIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTAwNSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgIDM0ICAtPiAgMA0KK2Rxc2hpMDA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgLTEgIC0+ICAwDQorZHFzaGkwMDcgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgICAtMiAgLT4gIDANCitkcXNoaTAwOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFzaGkwMDkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gIDENCitkcXNoaTAxMCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAgMA0KK2Rxc2hpMDExIHNoaWZ0ICA5OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+ICA5DQorZHFzaGkwMTIgc2hpZnQgIDk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gIDANCisNCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyDQorZHFzaGkwMTUgc2hpZnQgICAgICAgIDEgICAgMS41ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpMDE2IHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTAxNyBzaGlmdCAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGkwMTggc2hpZnQgICAgICAgIDEgICAgMC4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpMDE5IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTAyMCBzaGlmdCAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGkwMjEgc2hpZnQgICAgICAgIDEgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpMDIyIHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uDQorZHFzaGkwMjUgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpMDI2IHNoaWZ0ICAgICAgICAxICAgIC0zNSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTAyNyBzaGlmdCAgICAgICAgMSAgICAgMzUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGkwMjggc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIGZ1bGwgc2hpZnRpbmcgcGF0dGVybg0KK2Rxc2hpMDMwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgLTM0ICAtPiAwDQorZHFzaGkwMzEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzMgIC0+IDENCitkcXNoaTAzMiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMiAgLT4gMTINCitkcXNoaTAzMyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0zMSAgLT4gMTIzDQorZHFzaGkwMzQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMzAgIC0+IDEyMzQNCitkcXNoaTAzNSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOSAgLT4gMTIzNDUNCitkcXNoaTAzNiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yOCAgLT4gMTIzNDU2DQorZHFzaGkwMzcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjcgIC0+IDEyMzQ1NjcNCitkcXNoaTAzOCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNiAgLT4gMTIzNDU2NzgNCitkcXNoaTAzOSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yNSAgLT4gMTIzNDU2Nzg5DQorZHFzaGkwNDAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjQgIC0+IDEyMzQ1Njc4OTANCitkcXNoaTA0MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMyAgLT4gMTIzNDU2Nzg5MDENCitkcXNoaTA0MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMiAgLT4gMTIzNDU2Nzg5MDEyDQorZHFzaGkwNDMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMjEgIC0+IDEyMzQ1Njc4OTAxMjMNCitkcXNoaTA0NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQNCitkcXNoaTA0NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xOSAgLT4gMTIzNDU2Nzg5MDEyMzQ1DQorZHFzaGkwNDcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYNCitkcXNoaTA0OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NjcNCitkcXNoaTA0OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNiAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4DQorZHFzaGkwNTAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkNCitkcXNoaTA1MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTANCitkcXNoaTA1MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMyAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxDQorZHFzaGkwNTMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCitkcXNoaTA1NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMNCitkcXNoaTA1NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHFzaGkwNTYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUNCitkcXNoaTA1NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYNCitkcXNoaTA1OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC03ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3DQorZHFzaGkwNTkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2NzgNCitkcXNoaTA2MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkNCitkcXNoaTA2MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC00ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwDQorZHFzaGkwNjIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDENCitkcXNoaTA2MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0yICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTINCitkcXNoaTA2NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgIC0xICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFzaGkwNjUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQNCisNCitkcXNoaTA2NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICswICAgLT4gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNA0KK2Rxc2hpMDY3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwDQorZHFzaGkwNjggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMiAgIC0+IDM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDANCitkcXNoaTA2OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszICAgLT4gNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMA0KK2Rxc2hpMDcwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzQgICAtPiA1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwDQorZHFzaGkwNzEgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArNSAgIC0+IDY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDANCitkcXNoaTA3MiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs2ICAgLT4gNzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMA0KK2Rxc2hpMDczIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzcgICAtPiA4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwDQorZHFzaGkwNzQgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArOCAgIC0+IDkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDANCitkcXNoaTA3NSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICs5ICAgLT4gIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMA0KK2Rxc2hpMDc2IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEwICAtPiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwDQorZHFzaGkwNzcgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTEgIC0+IDIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDANCitkcXNoaTA3OCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxMiAgLT4gMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDc5IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzEzICAtPiA0NTY3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwDQorZHFzaGkwODAgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTQgIC0+IDU2Nzg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDANCitkcXNoaTA4MSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxNSAgLT4gNjc4OTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDgyIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE2ICAtPiA3ODkwMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwODMgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMTcgIC0+IDg5MDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA4NCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsxOCAgLT4gOTAxMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDg1IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzE5ICAtPiAgMTIzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwODYgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjAgIC0+IDEyMzQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA4NyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyMSAgLT4gMjM0NTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDg4IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzIyICAtPiAzNDU2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwODkgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjMgIC0+IDQ1Njc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA5MCBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNCAgLT4gNTY3ODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDkxIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI1ICAtPiA2Nzg5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwOTIgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjYgIC0+IDc4OTAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA5MyBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICsyNyAgLT4gODkwMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDk0IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzI4ICAtPiA5MDEyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwOTUgc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMjkgIC0+ICAxMjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA5NiBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMCAgLT4gMTIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMDk3IHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzMxICAtPiAyMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzaGkwOTggc2hpZnQgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAgICAgICArMzIgIC0+IDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTA5OSBzaGlmdCAgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgICAgICAgICszMyAgLT4gNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2Rxc2hpMTAwIHNoaWZ0ICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgICAgICAgKzM0ICAtPiAwDQorDQorLS0gemVyb3MNCitkcXNoaTI3MCBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUtMTANCitkcXNoaTI3MSBzaGlmdCAgMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUtMTANCitkcXNoaTI3MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMC4wMDANCitkcXNoaTI3MyBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMC4wMDANCitkcXNoaTI3NCBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAgMEUrMTANCitkcXNoaTI3NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAgMEUrMTANCitkcXNoaTI3NiBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUtMTANCitkcXNoaTI3NyBzaGlmdCAtMEUtMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUtMTANCitkcXNoaTI3OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMC4wMDANCitkcXNoaTI3OSBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMC4wMDANCitkcXNoaTI4MCBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgICsyOSAgIC0+ICAtMEUrMTANCitkcXNoaTI4MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC0yOSAgIC0+ICAtMEUrMTANCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2Rxc2hpMTQxIHNoaWZ0ICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgLTEgIC0+IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMNCitkcXNoaTE0MiBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiA5RSs2MTExDQorZHFzaGkxNDMgc2hpZnQgIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAgMSAgLT4gOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTBFKzYxNDQNCitkcXNoaTE0NCBzaGlmdCAgOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgICAzMyAtPiA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KK2Rxc2hpMTQ1IHNoaWZ0ICAxRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTYxNDMNCitkcXNoaTE0NiBzaGlmdCAgMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAwRS02MTQzDQorZHFzaGkxNDcgc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTQyDQorZHFzaGkxNDggc2hpZnQgIDFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxMTANCitkcXNoaTE1MSBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQ0DQorZHFzaGkxNTIgc2hpZnQgIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMzMgLT4gMUUtNjE3Ng0KK2Rxc2hpMTUzIHNoaWZ0ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IDBFLTYxNzYNCitkcXNoaTE1NCBzaGlmdCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAwRS02MTc2DQorZHFzaGkxNTUgc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KK2Rxc2hpMTU2IHNoaWZ0ICA5LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IDlFLTYxNzYNCitkcXNoaTE1NyBzaGlmdCAgOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAxICAtPiAwRS02MTc2DQorZHFzaGkxNTggc2hpZnQgIDkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gMEUtNjE3Ng0KK2Rxc2hpMTYwIHNoaWZ0ICAxRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IDBFLTYxNzYNCitkcXNoaTE2MSBzaGlmdCAgMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0zMyAtPiAwRS02MTc2DQorZHFzaGkxNjIgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLT4gMS4wRS02MTc1DQorZHFzaGkxNjMgc2hpZnQgIDFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMNCistLSAgbmVnYXRpdmVzDQorZHFzaGkxNzEgc2hpZnQgLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSs2MTQ0ICAgICAtMSAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDMNCitkcXNoaTE3MiBzaGlmdCAtOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFKzYxNDQgICAgIC0zMyAtPiAtOUUrNjExMQ0KK2Rxc2hpMTczIHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDEgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MEUrNjE0NA0KK2Rxc2hpMTc0IHNoaWZ0IC05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrNjE0NCAgICAgIDMzIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrNjE0NA0KK2Rxc2hpMTc1IHNoaWZ0IC0xRS02MTQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS02MTQzDQorZHFzaGkxNzYgc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTBFLTYxNDMNCitkcXNoaTE3NyBzaGlmdCAtMUUtNjE0MyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTQyDQorZHFzaGkxNzggc2hpZnQgLTFFLTYxNDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTEwDQorZHFzaGkxODEgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAtMSAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDQNCitkcXNoaTE4MiBzaGlmdCAtMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0zMyAtPiAtMUUtNjE3Ng0KK2Rxc2hpMTgzIHNoaWZ0IC0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgIDEgIC0+IC0wRS02MTc2DQorZHFzaGkxODQgc2hpZnQgLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMzMgLT4gLTBFLTYxNzYNCitkcXNoaTE4NSBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgIC0xICAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0NA0KK2Rxc2hpMTg2IHNoaWZ0IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUtNjE0MyAgICAgLTMzIC0+IC05RS02MTc2DQorZHFzaGkxODcgc2hpZnQgLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzICAgICAgMSAgLT4gLTBFLTYxNzYNCitkcXNoaTE4OCBzaGlmdCAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFLTYxNDMgICAgICAzMyAtPiAtMEUtNjE3Ng0KK2Rxc2hpMTkwIHNoaWZ0IC0xRS02MTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgIC0+IC0wRS02MTc2DQorZHFzaGkxOTEgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMzMgLT4gLTBFLTYxNzYNCitkcXNoaTE5MiBzaGlmdCAtMUUtNjE3NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAtPiAtMS4wRS02MTc1DQorZHFzaGkxOTMgc2hpZnQgLTFFLTYxNzYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzMgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRS02MTQzDQorDQorLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KK2Rxc2hpMjAxIHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0wICAgIDAgIC0+IC0wDQorZHFzaGkyMDIgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAgMiAgLT4gLTANCitkcXNoaTIwMyBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgICAyICAtPiAtMTAwDQorZHFzaGkyMDQgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEgICAzMyAgLT4gLTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXNoaTIwNSBzaGlmdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSAgIDM0ICAtPiAtMA0KK2Rxc2hpMjA2IHNoaWZ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICAgLTEgIC0+IC0wDQorZHFzaGkyMDcgc2hpZnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTAgICAtMiAgLT4gLTANCitkcXNoaTIwOCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0xICAtPiAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzDQorZHFzaGkyMDkgc2hpZnQgLTEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzMgLT4gLTENCitkcXNoaTIxMCBzaGlmdCAtMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCAgIC0zNCAtPiAtMA0KK2Rxc2hpMjExIHNoaWZ0IC05OTM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0ICAgLTMzIC0+IC05DQorZHFzaGkyMTIgc2hpZnQgLTk5MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQgICAtMzQgLT4gLTANCisNCisNCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KK2Rxc2hpNzgxIHNoaWZ0IC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCitkcXNoaTc4MiBzaGlmdCAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorZHFzaGk3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2Rxc2hpNzg0IHNoaWZ0IC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCitkcXNoaTc4NSBzaGlmdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFzaGk3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KK2Rxc2hpNzg3IHNoaWZ0IC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTc4OCBzaGlmdCAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpNzkwIHNoaWZ0IC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTc5MSBzaGlmdCAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpNzkzIHNoaWZ0ICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTc5NCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHFzaGk4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODAyIHNoaWZ0ICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODA1IHNoaWZ0ICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KK2Rxc2hpODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTgwOCBzaGlmdCAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTgxMSBzaGlmdCAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTgxNCBzaGlmdCAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2Rxc2hpODIxIHNoaWZ0ICBOYU4gLUluZiAgICAtPiAgTmFODQorZHFzaGk4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCitkcXNoaTgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK2Rxc2hpODI0IHNoaWZ0ICBOYU4gLTAgICAgICAtPiAgTmFODQorZHFzaGk4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4NCitkcXNoaTgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTg0KK2Rxc2hpODI3IHNoaWZ0ICBOYU4gIDEwMDAgICAtPiAgTmFODQorZHFzaGk4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4NCitkcXNoaTgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK2Rxc2hpODMwIHNoaWZ0IC1JbmYgIE5hTiAgICAtPiAgTmFODQorZHFzaGk4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4NCitkcXNoaTgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rxc2hpODMzIHNoaWZ0IC0wICAgIE5hTiAgICAtPiAgTmFODQorZHFzaGk4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4NCitkcXNoaTgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK2Rxc2hpODM2IHNoaWZ0ICAxMDAwIE5hTiAgICAtPiAgTmFODQorZHFzaGk4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCitkcXNoaTg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0MiBzaGlmdCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0MyBzaGlmdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0NSBzaGlmdCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0NiBzaGlmdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0OCBzaGlmdCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg0OSBzaGlmdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1MSBzaGlmdCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1MiBzaGlmdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1NCBzaGlmdCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1NSBzaGlmdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1NyBzaGlmdCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1OCBzaGlmdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHFzaGk4NjEgc2hpZnQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorZHFzaGk4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorZHFzaGk4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorZHFzaGk4NjQgc2hpZnQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorZHFzaGk4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorZHFzaGk4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorZHFzaGk4Njcgc2hpZnQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorZHFzaGk4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorZHFzaGk4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK2Rxc2hpODcxIHNoaWZ0ICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODc0IHNoaWZ0ICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODc3IHNoaWZ0IC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc2hpODgwIHNoaWZ0ICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzaGk4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorZHFzaGk4ODMgc2hpZnQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCitkcXNoaTg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorZHFzaGk4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxU3VidHJhY3QuZGVjVGVzdAppbmRleCAzNDU3MmY2Li5mM2I5MjI3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFTdWJ0cmFjdC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVN1YnRyYWN0LmRlY1Rlc3QKQEAgLTEsNjM1ICsxLDYzNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBkcVN1YnRyYWN0LmRlY1Rlc3QgLS0gZGVjUXVhZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUKLS0tIHJlcHJlc2VudGFibGUgaW4gYSBkZWNRdWFkCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KLWRxc3ViMDAxIHN1YnRyYWN0ICAwICAgMCAgLT4gJzAnCi1kcXN1YjAwMiBzdWJ0cmFjdCAgMSAgIDEgIC0+ICcwJwotZHFzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnCi1kcXN1YjAwNCBzdWJ0cmFjdCAgMiAgIDEgIC0+ICcxJwotZHFzdWIwMDUgc3VidHJhY3QgIDIgICAyICAtPiAnMCcKLWRxc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnCi1kcXN1YjAwNyBzdWJ0cmFjdCAgMiAgIDMgIC0+ICctMScKLQotZHFzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnCi1kcXN1YjAxMiBzdWJ0cmFjdCAtMSAgIDEgIC0+ICctMicKLWRxc3ViMDEzIHN1YnRyYWN0IC0xICAgMiAgLT4gJy0zJwotZHFzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnCi1kcXN1YjAxNSBzdWJ0cmFjdCAtMiAgIDIgIC0+ICctNCcKLWRxc3ViMDE2IHN1YnRyYWN0IC0zICAgMiAgLT4gJy01JwotZHFzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnCi0KLWRxc3ViMDIxIHN1YnRyYWN0ICAwICAtMCAgLT4gJzAnCi1kcXN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJwotZHFzdWIwMjMgc3VidHJhY3QgIDEgIC0yICAtPiAnMycKLWRxc3ViMDI0IHN1YnRyYWN0ICAyICAtMSAgLT4gJzMnCi1kcXN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0JwotZHFzdWIwMjYgc3VidHJhY3QgIDMgIC0yICAtPiAnNScKLWRxc3ViMDI3IHN1YnRyYWN0ICAyICAtMyAgLT4gJzUnCi0KLWRxc3ViMDMwIHN1YnRyYWN0ICAxMSAgMSAgLT4gMTAKLWRxc3ViMDMxIHN1YnRyYWN0ICAxMCAgMSAgLT4gIDkKLWRxc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgKLWRxc3ViMDMzIHN1YnRyYWN0ICAxICAgMSAgLT4gIDAKLWRxc3ViMDM0IHN1YnRyYWN0ICAwICAgMSAgLT4gLTEKLWRxc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTIKLWRxc3ViMDM2IHN1YnRyYWN0IC05ICAgMSAgLT4gLTEwCi1kcXN1YjAzNyBzdWJ0cmFjdCAtMTAgIDEgIC0+IC0xMQotZHFzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTIKLQotZHFzdWIwNDAgc3VidHJhY3QgJzUuNzUnICczLjMnICAtPiAnMi40NScKLWRxc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnCi1kcXN1YjA0MiBzdWJ0cmFjdCAnLTUnICAgJy0zJyAgIC0+ICctMicKLWRxc3ViMDQzIHN1YnRyYWN0ICctNycgICAnMi41JyAgLT4gJy05LjUnCi1kcXN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnCi1kcXN1YjA0NSBzdWJ0cmFjdCAnMS4zJyAgJzAuMycgIC0+ICcxLjAnCi1kcXN1YjA0NiBzdWJ0cmFjdCAnMS4yNScgJzEuMjUnIC0+ICcwLjAwJwotCi1kcXN1YjA1MCBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwMDAnIC0+ICcwLjIzNDU2Nzg5JwotZHFzdWIwNTEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDg5JyAtPiAnMC4yMzQ1NjcwMCcKLQotZHFzdWIwNjAgc3VidHJhY3QgJzcwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjA2MSBzdWJ0cmFjdCAnNzAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZAotZHFzdWIwNjMgc3VidHJhY3QgJzcwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzRSszNycgUm91bmRlZAotZHFzdWIwNjQgc3VidHJhY3QgJzcwMDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKLSAgLS0gc3ltbWV0cnk6Ci1kcXN1YjA2NSBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZAotZHFzdWIwNjYgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszOCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjA2OCBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5M0UrMzcnIFJvdW5kZWQKLWRxc3ViMDY5IHN1YnRyYWN0ICcxMDAwMGUrMzQnICAgICc3MDAwMDAnIC0+ICc5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkzMEUrMzcnIFJvdW5kZWQKLQotICAtLSBzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHMKLWRxc3ViMDkwIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wJyAgLT4gJzAuMCcKLWRxc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnCi1kcXN1YjA5MiBzdWJ0cmFjdCAnMC4wMCcgICAgJzAwLjAnIC0+ICcwLjAwJwotZHFzdWIwOTMgc3VidHJhY3QgJzAwLjAnICAgICcwLjAwJyAtPiAnMC4wMCcKLWRxc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnCi1kcXN1YjA5NSBzdWJ0cmFjdCAnMycgICAgJy4zJyAgIC0+ICcyLjcnCi1kcXN1YjA5NiBzdWJ0cmFjdCAnMy4nICAgJy4zJyAgIC0+ICcyLjcnCi1kcXN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnCi1kcXN1YjA5OCBzdWJ0cmFjdCAnMy4wMCcgJy4zJyAgIC0+ICcyLjcwJwotZHFzdWIwOTkgc3VidHJhY3QgJzMnICAgICczJyAgICAtPiAnMCcKLWRxc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnCi1kcXN1YjEwMSBzdWJ0cmFjdCAnMycgICAgJy0zJyAgIC0+ICc2JwotZHFzdWIxMDIgc3VidHJhY3QgJzMnICAgICcwLjMnICAtPiAnMi43JwotZHFzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43JwotZHFzdWIxMDQgc3VidHJhY3QgJzMuMCcgICcwLjMnICAtPiAnMi43JwotZHFzdWIxMDUgc3VidHJhY3QgJzMuMDAnICcwLjMnICAtPiAnMi43MCcKLWRxc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcKLWRxc3ViMTA3IHN1YnRyYWN0ICczJyAgICAnKzMuMCcgLT4gJzAuMCcKLWRxc3ViMTA4IHN1YnRyYWN0ICczJyAgICAnLTMuMCcgLT4gJzYuMCcKLQotLS0gdGhlIGFib3ZlIGFsbCBmcm9tIGFkZDsgbWFzc2FnZWQgYW5kIGV4dGVuZGVkLiAgTm93IHNvbWUgbmV3IG9uZXMuLi4KLS0tIFtwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciBjb21wYXJpc29uc10KLS0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNwotLS0gd2l0aCBpbnB1dCByb3VuZGluZy4KLWRxc3ViMTIwIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNUUtOCcKLWRxc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcKLWRxc3ViMTIyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctM0UtOCcKLWRxc3ViMTIzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMkUtOCcKLWRxc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcKLWRxc3ViMTI1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4OScgIC0+ICcwRS04JwotZHFzdWIxMjYgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzFFLTgnCi1kcXN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcKLWRxc3ViMTI4IHN1YnRyYWN0ICAnMTAuMjM0NTY3OTInICAgICcxMC4yMzQ1Njc4OScgIC0+ICczRS04JwotZHFzdWIxMjkgc3VidHJhY3QgICcxMC4yMzQ1Njc5MycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJzRFLTgnCi1kcXN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcKLWRxc3ViMTMxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNUUtOCcKLWRxc3ViMTMyIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODInICAgICcxMC4yMzQ1Njc4NicgIC0+ICctNEUtOCcKLWRxc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcKLWRxc3ViMTM0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODQnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMkUtOCcKLWRxc3ViMTM1IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctMUUtOCcKLWRxc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04JwotZHFzdWIxMzcgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzFFLTgnCi1kcXN1YjEzOCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg4JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnMkUtOCcKLWRxc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04JwotZHFzdWIxNDAgc3VidHJhY3QgICcxMC4yMzQ1Njc5MCcgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJzRFLTgnCi1kcXN1YjE0MSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnNUUtOCcKLWRxc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05JwotZHFzdWIxNDMgc3VidHJhY3QgICcwLjk5OTk5OTk5OScgICAgJzEnICAgICAgICAgICAgLT4gJy0xRS05JwotZHFzdWIxNDQgc3VidHJhY3QgICctMTAuMjM0NTY3ODAnICAgJy0xMC4yMzQ1Njc4NicgLT4gJzZFLTgnCi1kcXN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnCi1kcXN1YjE0NiBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MScgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTVFLTgnCi0KLS0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0KLWRxc3ViMTYwIHN1YnRyYWN0ICcwJyAgICAgJy4xJyAgICAgIC0+ICctMC4xJwotZHFzdWIxNjEgc3VidHJhY3QgJzAwJyAgICAnLjk3OTgzJyAgLT4gJy0wLjk3OTgzJwotZHFzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknCi1kcXN1YjE2MyBzdWJ0cmFjdCAnMCcgICAgICcwLjEwMicgICAtPiAnLTAuMTAyJwotZHFzdWIxNjQgc3VidHJhY3QgJzAnICAgICAnLjQnICAgICAgLT4gJy0wLjQnCi1kcXN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3JwotZHFzdWIxNjYgc3VidHJhY3QgJzAnICAgICAnLjQzODIyJyAgLT4gJy0wLjQzODIyJwotZHFzdWIxNjcgc3VidHJhY3QgJzAnICAgICAnLjkxMScgICAgLT4gJy0wLjkxMScKLWRxc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicKLWRxc3ViMTY5IHN1YnRyYWN0ICcwMCcgICAgJy4zOTInICAgIC0+ICctMC4zOTInCi1kcXN1YjE3MCBzdWJ0cmFjdCAnMCcgICAgICcuMjYnICAgICAtPiAnLTAuMjYnCi1kcXN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnCi1kcXN1YjE3MiBzdWJ0cmFjdCAnMCcgICAgICcuMjIzNCcgICAtPiAnLTAuMjIzNCcKLWRxc3ViMTczIHN1YnRyYWN0ICcwJyAgICAgJy4yJyAgICAgIC0+ICctMC4yJwotZHFzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnCi0tLSAwLiBvbiBsZWZ0Ci1kcXN1YjE4MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMScgICAgICAtPiAnMC4xJwotZHFzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnCi1kcXN1YjE4MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uOScgICAgICAtPiAnMC45JwotZHFzdWIxODMgc3VidHJhY3QgJzAuMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJwotZHFzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcKLWRxc3ViMTg1IHN1YnRyYWN0ICcwLjAnICAgICAnLS4zMDcnICAgIC0+ICcwLjMwNycKLWRxc3ViMTg2IHN1YnRyYWN0ICcwLjAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJwotZHFzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJwotZHFzdWIxODggc3VidHJhY3QgJzAuMCcgICAgICctLjAyJyAgICAgLT4gJzAuMDInCi1kcXN1YjE4OSBzdWJ0cmFjdCAnMC4wMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCi1kcXN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicKLWRxc3ViMTkxIHN1YnRyYWN0ICcwLjAnICAgICAnLTAuNTEnICAgIC0+ICcwLjUxJwotZHFzdWIxOTIgc3VidHJhY3QgJzAuMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKLWRxc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInCi1kcXN1YjE5NCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMDAwOCcgICAtPiAnMC4wMDA4JwotLS0gbmVnYXRpdmVzIG9mIHNhbWUKLWRxc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJwotZHFzdWIyMDEgc3VidHJhY3QgJzAwJyAgICAnLS45Nzk4MycgIC0+ICcwLjk3OTgzJwotZHFzdWIyMDIgc3VidHJhY3QgJzAnICAgICAnLS45JyAgICAgIC0+ICcwLjknCi1kcXN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJwotZHFzdWIyMDQgc3VidHJhY3QgJzAnICAgICAnLS40JyAgICAgIC0+ICcwLjQnCi1kcXN1YjIwNSBzdWJ0cmFjdCAnMCcgICAgICctLjMwNycgICAgLT4gJzAuMzA3JwotZHFzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJwotZHFzdWIyMDcgc3VidHJhY3QgJzAnICAgICAnLS45MTEnICAgIC0+ICcwLjkxMScKLWRxc3ViMjA4IHN1YnRyYWN0ICcuMCcgICAgJy0uMDInICAgICAtPiAnMC4wMicKLWRxc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInCi1kcXN1YjIxMCBzdWJ0cmFjdCAnMCcgICAgICctLjI2JyAgICAgLT4gJzAuMjYnCi1kcXN1YjIxMSBzdWJ0cmFjdCAnMCcgICAgICctMC41MScgICAgLT4gJzAuNTEnCi1kcXN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcKLWRxc3ViMjEzIHN1YnRyYWN0ICcwJyAgICAgJy0uMicgICAgICAtPiAnMC4yJwotZHFzdWIyMTQgc3VidHJhY3QgJy4wJyAgICAnLS4wMDA4JyAgIC0+ICcwLjAwMDgnCi0KLS0tIG1vcmUgZml4ZWQsIExIUyBzd2FwcyBbcmVhbGx5IHRoZSBzYW1lIGFzIHRlc3RjYXNlcyB1bmRlciBhZGRdCi1kcXN1YjIyMCBzdWJ0cmFjdCAnLTU2MjY3RS0xMicgMCAgLT4gJy01LjYyNjdFLTgnCi1kcXN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnCi1kcXN1YjIyMiBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgMCAgLT4gJy0wLjAwMDAwNTYyNjcnCi1kcXN1YjIyMyBzdWJ0cmFjdCAnLTU2MjY3RS05JyAgMCAgLT4gJy0wLjAwMDA1NjI2NycKLWRxc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnCi1kcXN1YjIyNSBzdWJ0cmFjdCAnLTU2MjY3RS03JyAgMCAgLT4gJy0wLjAwNTYyNjcnCi1kcXN1YjIyNiBzdWJ0cmFjdCAnLTU2MjY3RS02JyAgMCAgLT4gJy0wLjA1NjI2NycKLWRxc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnCi1kcXN1YjIyOCBzdWJ0cmFjdCAnLTU2MjY3RS0yJyAgMCAgLT4gJy01NjIuNjcnCi1kcXN1YjIyOSBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgMCAgLT4gJy01NjI2LjcnCi1kcXN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycKLS0tIHN5bW1ldHJ5IC4uLgotZHFzdWIyNDAgc3VidHJhY3QgMCAnLTU2MjY3RS0xMicgIC0+ICc1LjYyNjdFLTgnCi1kcXN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycKLWRxc3ViMjQyIHN1YnRyYWN0IDAgJy01NjI2N0UtMTAnICAtPiAnMC4wMDAwMDU2MjY3JwotZHFzdWIyNDMgc3VidHJhY3QgMCAnLTU2MjY3RS05JyAgIC0+ICcwLjAwMDA1NjI2NycKLWRxc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycKLWRxc3ViMjQ1IHN1YnRyYWN0IDAgJy01NjI2N0UtNycgICAtPiAnMC4wMDU2MjY3JwotZHFzdWIyNDYgc3VidHJhY3QgMCAnLTU2MjY3RS02JyAgIC0+ICcwLjA1NjI2NycKLWRxc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycKLWRxc3ViMjQ4IHN1YnRyYWN0IDAgJy01NjI2N0UtMicgICAtPiAnNTYyLjY3JwotZHFzdWIyNDkgc3VidHJhY3QgMCAnLTU2MjY3RS0xJyAgIC0+ICc1NjI2LjcnCi1kcXN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3JwotCi0tLSBub3cgc29tZSBtb3JlIGZyb20gdGhlICduZXcnIGFkZAotZHFzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknCi1kcXN1YjMwMiBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMC4yMzQ1Njc3OCcKLQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCi1kcXN1YjMyMSBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKLWRxc3ViMzIyIHN1YnRyYWN0ICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk3JwotZHFzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnCi1kcXN1YjMyNCBzdWJ0cmFjdCAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzAuOTk5NScKLWRxc3ViMzI1IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMCcgLT4gJzAuOTk5OCcKLWRxc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScKLWRxc3ViMzI3IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMicgLT4gJzEuMDAwMCcKLWRxc3ViMzI4IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMycgLT4gJzEuMDAwMScKLQotLS0gaW50ZXJuYWwgYm91bmRhcmllcwotZHFzdWIzNDYgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcnICAgLT4gJzk5OTk5OTk5OTk5OTMnCi1kcXN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnCi1kcXN1YjM0OCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwJyAgIC0+ICc5OTk5OTk5OTk5MzAwJwotZHFzdWIzNDkgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAnICAgLT4gJzk5OTk5OTk5OTMwMDAnCi1kcXN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnCi1kcXN1YjM1MSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAwJyAgIC0+ICc5OTk5OTk5MzAwMDAwJwotZHFzdWIzNTIgc3VidHJhY3QgJzcnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5OTMnCi1kcXN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnCi1kcXN1YjM1NCBzdWJ0cmFjdCAnNzAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5OTk5MzAwJwotZHFzdWIzNTUgc3VidHJhY3QgJzcwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTMwMDAnCi1kcXN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnCi1kcXN1YjM1NyBzdWJ0cmFjdCAnNzAwMDAwJyAnMTAwMDBlKzknICAgLT4gJy05OTk5OTk5MzAwMDAwJwotCi0tLSB6ZXJvIHByZXNlcnZhdGlvbgotZHFzdWIzNjEgc3VidHJhY3QgMSAnMC4wMDAxJyAtPiAnMC45OTk5JwotZHFzdWIzNjIgc3VidHJhY3QgMSAnMC4wMDAwMScgLT4gJzAuOTk5OTknCi1kcXN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5JwotZHFzdWIzNjQgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JwotZHFzdWIzNjUgc3VidHJhY3QgMSAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCi1kcXN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxCi1kcXN1YjM3MSBzdWJ0cmFjdCAxIDAuICAtPiAxCi1kcXN1YjM3MiBzdWJ0cmFjdCAxICAuMCAtPiAxLjAKLWRxc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMAotZHFzdWIzNzQgc3VidHJhY3QgIDAgIDEgLT4gLTEKLWRxc3ViMzc1IHN1YnRyYWN0IDAuICAxIC0+IC0xCi1kcXN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wCi1kcXN1YjM3NyBzdWJ0cmFjdCAwLjAgMSAtPiAtMS4wCi0KLS0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQKLWRxc3ViOTEwIHN1YnRyYWN0IC0xMDM1MTkzNjIgLTUxODk3OTU1LjMgLT4gLTUxNjIxNDA2LjcKLWRxc3ViOTExIHN1YnRyYWN0IDE1OTU3OS40NDQgODk4MjcuNTIyOSAtPiA2OTc1MS45MjExCi0KLWRxc3ViOTIwIHN1YnRyYWN0IDMzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+IDI5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZHFzdWI5MjEgc3VidHJhY3QgMzMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjUgLT4gMzAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUKLWRxc3ViOTIzIHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY0IC0+ICA5OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NgotZHFzdWI5MjQgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NDAgLT4gMTAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIgUm91bmRlZAotZHFzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXN1YjkyNiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA0My4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2MSAtPiAgODkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkKLWRxc3ViOTI3IHN1YnRyYWN0IDEzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2IDQzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTY2IC0+ICA4OS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NAotZHFzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0Ci1kcXN1YjkyOSBzdWJ0cmFjdCAxMDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiA5OS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAgIDEuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTQKLQotLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdCi1kcXN1YjM5MCBzdWJ0cmFjdCAnLTU2MjY3RS0xMCcgICAwIC0+ICAnLTAuMDAwMDA1NjI2NycKLWRxc3ViMzkxIHN1YnRyYWN0ICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCi1kcXN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnCi1kcXN1YjM5MyBzdWJ0cmFjdCAnLTU2MjY3RS00JyAgICAwIC0+ICAnLTUuNjI2NycKLWRxc3ViMzk0IHN1YnRyYWN0ICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JwotZHFzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnCi1kcXN1YjM5NiBzdWJ0cmFjdCAnLTU2MjY3RS0xJyAgICAwIC0+ICAnLTU2MjYuNycKLWRxc3ViMzk3IHN1YnRyYWN0ICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCi1kcXN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJwotZHFzdWIzOTkgc3VidHJhY3QgJy01RS03JyAgICAgICAgMCAtPiAgJy01RS03JwotZHFzdWI0MDAgc3VidHJhY3QgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKLWRxc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScKLWRxc3ViNDAyIHN1YnRyYWN0ICctNUUtNCcgICAgICAgIDAgLT4gICctMC4wMDA1JwotZHFzdWI0MDMgc3VidHJhY3QgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCi1kcXN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnCi1kcXN1YjQwNSBzdWJ0cmFjdCAnLTVFMScgICAgICAgICAwIC0+ICAnLTUwJwotZHFzdWI0MDYgc3VidHJhY3QgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCi1kcXN1YjQwNyBzdWJ0cmFjdCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCi1kcXN1YjQwOCBzdWJ0cmFjdCAnLTVFMzQnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNCcgIFJvdW5kZWQKLWRxc3ViNDA5IHN1YnRyYWN0ICctNUUzNScgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgUm91bmRlZAotZHFzdWI0MTAgc3VidHJhY3QgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkCi1kcXN1YjQxMSBzdWJ0cmFjdCAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKLQotLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdCi1kcXN1YjQyMCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xMCcgLT4gICcwLjAwMDAwNTYyNjcnCi1kcXN1YjQyMSBzdWJ0cmFjdCAwICAnLTU2MjY3RS02JyAgLT4gICcwLjA1NjI2NycKLWRxc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnCi1kcXN1YjQyMyBzdWJ0cmFjdCAwICAnLTU2MjY3RS00JyAgLT4gICc1LjYyNjcnCi1kcXN1YjQyNCBzdWJ0cmFjdCAwICAnLTU2MjY3RS0zJyAgLT4gICc1Ni4yNjcnCi1kcXN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnCi1kcXN1YjQyNiBzdWJ0cmFjdCAwICAnLTU2MjY3RS0xJyAgLT4gICc1NjI2LjcnCi1kcXN1YjQyNyBzdWJ0cmFjdCAwICAnLTU2MjY3RS0wJyAgLT4gICc1NjI2NycKLWRxc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJwotZHFzdWI0Mjkgc3VidHJhY3QgMCAgJy01RS03JyAgICAgIC0+ICAnNUUtNycKLWRxc3ViNDMwIHN1YnRyYWN0IDAgICctNUUtNicgICAgICAtPiAgJzAuMDAwMDA1JwotZHFzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScKLWRxc3ViNDMyIHN1YnRyYWN0IDAgICctNUUtNCcgICAgICAtPiAgJzAuMDAwNScKLWRxc3ViNDMzIHN1YnRyYWN0IDAgICctNUUtMScgICAgICAtPiAgJzAuNScKLWRxc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnCi1kcXN1YjQzNSBzdWJ0cmFjdCAwICAnLTVFMScgICAgICAgLT4gICc1MCcKLWRxc3ViNDM2IHN1YnRyYWN0IDAgICctNUU1JyAgICAgICAtPiAgJzUwMDAwMCcKLWRxc3ViNDM3IHN1YnRyYWN0IDAgICctNUUzMycgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCi1kcXN1YjQzOCBzdWJ0cmFjdCAwICAnLTVFMzQnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICAgUm91bmRlZAotZHFzdWI0Mzkgc3VidHJhY3QgMCAgJy01RTM1JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM1JyAgIFJvdW5kZWQKLWRxc3ViNDQwIHN1YnRyYWN0IDAgICctNUUzNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkCi1kcXN1YjQ0MSBzdWJ0cmFjdCAwICAnLTVFMTAwJyAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyAgUm91bmRlZAotCi0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCi1kcXN1YjQ2MSBzdWJ0cmFjdCAnMUUrMTYnICcxJyAgICAgICAgLT4gJzk5OTk5OTk5OTk5OTk5OTknCi1kcXN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJwotZHFzdWI0NjMgc3VidHJhY3QgJzEuMTExJyAgJy0xRSsxMicgIC0+ICcxMDAwMDAwMDAwMDAxLjExMScKLWRxc3ViNDY0IHN1YnRyYWN0ICctMScgICAgJy0xRSsxNicgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScKLWRxc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScKLWRxc3ViNDY2IHN1YnRyYWN0ICc3RSsxMicgJy0xLjExMScgICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnCi1kcXN1YjQ2NyBzdWJ0cmFjdCAnMS4xMTEnICAnLTdFKzEyJyAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJwotZHFzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5JwotCi0tLSAgICAgICAgICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxIDIzNDU2Nzg5MDEyMzQ1Ci1kcXN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3MiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3NCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3NSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjQ3NyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZAotZHFzdWI0Nzggc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JwotZHFzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4JwotZHFzdWI0ODAgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3JwotZHFzdWI0ODEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk2JwotZHFzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1JwotZHFzdWI0ODMgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0JwotCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCi1yb3VuZGluZzogaGFsZl91cAotZHFzdWI1MDAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCi1kcXN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUwOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKLWRxc3ViNTE3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTE4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfZXZlbgotZHFzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknCi1kcXN1YjUyMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyOCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjUzNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKLWRxc3ViNTM3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTM5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1kcXN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjU0MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjU0MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1kcXN1YjU1MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKLWRxc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTUyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTUzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTU5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTYxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTYyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTY0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTY1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JwotZHFzdWI1Njcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotZHFzdWI1Njggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotZHFzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotCi0tLSBzeW1tZXRyeS4uLgotcm91bmRpbmc6IGhhbGZfdXAKLWRxc3ViNjAwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKLWRxc3ViNjAxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MDMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjA0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MDYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjA3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MDkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjEwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MTIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjEzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MTUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjE2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKLWRxc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYxOCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MTkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfZXZlbgotZHFzdWI2MjAgc3VidHJhY3QgMCAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JwotZHFzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjIyIHN1YnRyYWN0IDAuMDAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYyMyBzdWJ0cmFjdCAwLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjI1IHN1YnRyYWN0IDAuNDkgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYyNiBzdWJ0cmFjdCAwLjQ5OTk5OSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZHFzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjI4IHN1YnRyYWN0IDAuNSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYyOSBzdWJ0cmFjdCAwLjUwMDAwMDAwMSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjMxIHN1YnRyYWN0IDAuNTEgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYzMiBzdWJ0cmFjdCAwLjYgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjM0IHN1YnRyYWN0IDAuOTk5OTkgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYzNSBzdWJ0cmFjdCAwLjk5OTk5OTk5OSAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JwotZHFzdWI2Mzcgc3VidHJhY3QgMS4wMDAwMDAwMSAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjM4IHN1YnRyYWN0IDEuMDAwMDEgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4KLWRxc3ViNjQwIHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NDIgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGRvd24KLWRxc3ViNjUwIHN1YnRyYWN0IDAgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScKLWRxc3ViNjUxIHN1YnRyYWN0IDAuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NTMgc3VidHJhY3QgMC4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjU0IHN1YnRyYWN0IDAuNCAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NTYgc3VidHJhY3QgMC40OTk5OTkgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjU3IHN1YnRyYWN0IDAuNDk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NTkgc3VidHJhY3QgMC41MDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjYwIHN1YnRyYWN0IDAuNTAwMDAxICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NjIgc3VidHJhY3QgMC42ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjYzIHN1YnRyYWN0IDAuOSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2NjUgc3VidHJhY3QgMC45OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWRxc3ViNjY2IHN1YnRyYWN0IDEgICAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcKLWRxc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkCi1kcXN1YjY2OCBzdWJ0cmFjdCAxLjAwMDAxICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZAotZHFzdWI2Njkgc3VidHJhY3QgMS4xICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQKLQotCi0tLSBsb3RzIG9mIGxlYWRpbmcgemVyb3MgaW4gaW50ZXJtZWRpYXRlIHJlc3VsdCwgYW5kIHNob3dpbmcgZWZmZWN0cyBvZgotLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nCi1yb3VuZGluZzogaGFsZl91cAotZHFzdWI2NzAgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjEnIC0+IDAuOQotZHFzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQotZHFzdWI2NzIgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjEnIC0+IC0wLjEKLWRxc3ViNjczIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS41JyAtPiAtMC41Ci1kcXN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQotCi1yb3VuZGluZzogaGFsZl9ldmVuCi1kcXN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45Ci1kcXN1YjY4MSBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguOScgLT4gMC4xCi1kcXN1YjY4MiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuMScgLT4gLTAuMQotZHFzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUKLWRxc3ViNjg0IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS45JyAtPiAtMC45Ci0KLWRxc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkKLWRxc3ViNjg2IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny45JyAtPiAwLjEKLWRxc3ViNjg3IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAtMC4xCi1kcXN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQotZHFzdWI2ODkgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjknIC0+IC0wLjkKLQotcm91bmRpbmc6IGRvd24KLWRxc3ViNjkwIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC4xJyAtPiAwLjkKLWRxc3ViNjkxIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAwLjEKLWRxc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xCi1kcXN1YjY5MyBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuNScgLT4gLTAuNQotZHFzdWI2OTQgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjknIC0+IC0wLjkKLQotLS0gU3BlY2lhbHMKLWRxc3ViNzgwIHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWRxc3ViNzgyIHN1YnRyYWN0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLWRxc3ViNzgzIHN1YnRyYWN0IC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWRxc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLWRxc3ViNzg1IHN1YnRyYWN0IC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkKLWRxc3ViNzg3IHN1YnRyYWN0IC0xMDAwICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzg5IHN1YnRyYWN0IC0xICAgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzkwIHN1YnRyYWN0ICAwICAgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkKLWRxc3ViNzkyIHN1YnRyYWN0ICAxMDAwICBJbmYgICAtPiAtSW5maW5pdHkKLQotZHFzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1YjgwMSBzdWJ0cmFjdCAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1kcXN1YjgwMiBzdWJ0cmFjdCAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwNCBzdWJ0cmFjdCAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwNSBzdWJ0cmFjdCAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1kcXN1YjgwNyBzdWJ0cmFjdCAgSW5mICAtSW5mICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwOCBzdWJ0cmFjdCAtMTAwMCAtSW5mICAgLT4gIEluZmluaXR5Ci1kcXN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODEwIHN1YnRyYWN0IC0xICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRxc3ViODExIHN1YnRyYWN0IC0wICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRxc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRxc3ViODEzIHN1YnRyYWN0ICAxICAgIC1JbmYgICAtPiAgSW5maW5pdHkKLWRxc3ViODE0IHN1YnRyYWN0ICAxMDAwIC1JbmYgICAtPiAgSW5maW5pdHkKLWRxc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKLQotZHFzdWI4MjEgc3VidHJhY3QgIE5hTiAgIEluZiAgIC0+ICBOYU4KLWRxc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFOCi1kcXN1YjgyMyBzdWJ0cmFjdCAgTmFOICAgMSAgICAgLT4gIE5hTgotZHFzdWI4MjQgc3VidHJhY3QgIE5hTiAgIDAgICAgIC0+ICBOYU4KLWRxc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFOCi1kcXN1YjgyNiBzdWJ0cmFjdCAgTmFOICAtMSAgICAgLT4gIE5hTgotZHFzdWI4Mjcgc3VidHJhY3QgIE5hTiAgLTEwMDAgIC0+ICBOYU4KLWRxc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFOCi1kcXN1YjgyOSBzdWJ0cmFjdCAtTmFOICAgTmFOICAgLT4gLU5hTgotZHFzdWI4MzAgc3VidHJhY3QgLUluZiAgIE5hTiAgIC0+ICBOYU4KLWRxc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFOCi1kcXN1YjgzMiBzdWJ0cmFjdCAtMSAgICAgTmFOICAgLT4gIE5hTgotZHFzdWI4MzMgc3VidHJhY3QgLTAgICAgIE5hTiAgIC0+ICBOYU4KLWRxc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFOCi1kcXN1YjgzNSBzdWJ0cmFjdCAgMSAgICAgTmFOICAgLT4gIE5hTgotZHFzdWI4MzYgc3VidHJhY3QgIDEwMDAgLU5hTiAgIC0+IC1OYU4KLWRxc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFOCi0KLWRxc3ViODQxIHN1YnRyYWN0ICBzTmFOICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg0MyBzdWJ0cmFjdCAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODQ0IHN1YnRyYWN0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg0NiBzdWJ0cmFjdCAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODQ3IHN1YnRyYWN0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg0OSBzdWJ0cmFjdCAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODUwIHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg1MiBzdWJ0cmFjdCAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODUzIHN1YnRyYWN0IC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg1NSBzdWJ0cmFjdCAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODU2IHN1YnRyYWN0ICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXN1Yjg1OCBzdWJ0cmFjdCAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODU5IHN1YnRyYWN0ICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1kcXN1Yjg2MSBzdWJ0cmFjdCAgTmFOMDEgICAtSW5mICAgICAtPiAgTmFOMQotZHFzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjIKLWRxc3ViODYzIHN1YnRyYWN0ICBOYU4wMyAgICAxMDAwICAgIC0+ICBOYU4zCi1kcXN1Yjg2NCBzdWJ0cmFjdCAgTmFOMDQgICAgSW5mICAgICAtPiAgTmFONAotZHFzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUKLWRxc3ViODY2IHN1YnRyYWN0IC1JbmYgICAgIC1OYU43MSAgIC0+IC1OYU43MQotZHFzdWI4Njcgc3VidHJhY3QgLTEwMDAgICAgIE5hTjgxICAgLT4gIE5hTjgxCi1kcXN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTEKLWRxc3ViODY5IHN1YnRyYWN0ICBJbmYgICAgICBOYU4xMDEgIC0+ICBOYU4xMDEKLWRxc3ViODcxIHN1YnRyYWN0ICBzTmFOMDExICAtSW5mICAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODczIHN1YnRyYWN0IC1zTmFOMDEzICAgMTAwMCAgIC0+IC1OYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc0IHN1YnRyYWN0ICBzTmFOMDE0ICAgTmFOMTcxIC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc2IHN1YnRyYWN0ICBOYU4wMTYgICBzTmFOMTkxIC0+ICBOYU4xOTEgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc3IHN1YnRyYWN0IC1JbmYgICAgICBzTmFOMjAxIC0+ICBOYU4yMDEgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODc5IHN1YnRyYWN0ICAxMDAwICAgIC1zTmFOMjIxIC0+IC1OYU4yMjEgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODgwIHN1YnRyYWN0ICBJbmYgICAgICBzTmFOMjMxIC0+ICBOYU4yMzEgSW52YWxpZF9vcGVyYXRpb24KLWRxc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZWRnZSBjYXNlIHNwaWxscwotZHFzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwCi1kcXN1YjkwMiBzdWJ0cmFjdCAgMi4wRS0zICAxLjAwMiAgLT4gLTEuMDAwMAotZHFzdWI5MDMgc3VidHJhY3QgIDIuMDBFLTMgIDEuMDAyMCAgLT4gLTEuMDAwMDAKLWRxc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwCi1kcXN1YjkwNSBzdWJ0cmFjdCAgMi4wMDAwRS0zICAxLjAwMjAwMCAgLT4gLTEuMDAwMDAwMAotZHFzdWI5MDYgc3VidHJhY3QgIDIuMDAwMDBFLTMgIDEuMDAyMDAwMCAgLT4gLTEuMDAwMDAwMDAKLWRxc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwCi1kcXN1YjkwOCBzdWJ0cmFjdCAgMi4wMDAwMDAwRS0zICAxLjAwMjAwMDAwMCAgLT4gLTEuMDAwMDAwMDAwMAotCi0tLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQKLQotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCi1kcXN1YjExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTAKLWRxc3ViMTEyNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMAotZHFzdWIxMTI3ICBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwCi1kcXN1YjExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMKLQotLS0gTnVsbCB0ZXN0cwotZHFzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHFzdWI5OTkxIHN1YnRyYWN0ICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZHFTdWJ0cmFjdC5kZWNUZXN0IC0tIGRlY1F1YWQgc3VidHJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGFyZSBmb3IgZGVjUXVhZHMgb25seTsgYWxsIGFyZ3VtZW50cyBhcmUNCistLSByZXByZXNlbnRhYmxlIGluIGEgZGVjUXVhZA0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCitkcXN1YjAwMSBzdWJ0cmFjdCAgMCAgIDAgIC0+ICcwJw0KK2Rxc3ViMDAyIHN1YnRyYWN0ICAxICAgMSAgLT4gJzAnDQorZHFzdWIwMDMgc3VidHJhY3QgIDEgICAyICAtPiAnLTEnDQorZHFzdWIwMDQgc3VidHJhY3QgIDIgICAxICAtPiAnMScNCitkcXN1YjAwNSBzdWJ0cmFjdCAgMiAgIDIgIC0+ICcwJw0KK2Rxc3ViMDA2IHN1YnRyYWN0ICAzICAgMiAgLT4gJzEnDQorZHFzdWIwMDcgc3VidHJhY3QgIDIgICAzICAtPiAnLTEnDQorDQorZHFzdWIwMTEgc3VidHJhY3QgLTAgICAwICAtPiAnLTAnDQorZHFzdWIwMTIgc3VidHJhY3QgLTEgICAxICAtPiAnLTInDQorZHFzdWIwMTMgc3VidHJhY3QgLTEgICAyICAtPiAnLTMnDQorZHFzdWIwMTQgc3VidHJhY3QgLTIgICAxICAtPiAnLTMnDQorZHFzdWIwMTUgc3VidHJhY3QgLTIgICAyICAtPiAnLTQnDQorZHFzdWIwMTYgc3VidHJhY3QgLTMgICAyICAtPiAnLTUnDQorZHFzdWIwMTcgc3VidHJhY3QgLTIgICAzICAtPiAnLTUnDQorDQorZHFzdWIwMjEgc3VidHJhY3QgIDAgIC0wICAtPiAnMCcNCitkcXN1YjAyMiBzdWJ0cmFjdCAgMSAgLTEgIC0+ICcyJw0KK2Rxc3ViMDIzIHN1YnRyYWN0ICAxICAtMiAgLT4gJzMnDQorZHFzdWIwMjQgc3VidHJhY3QgIDIgIC0xICAtPiAnMycNCitkcXN1YjAyNSBzdWJ0cmFjdCAgMiAgLTIgIC0+ICc0Jw0KK2Rxc3ViMDI2IHN1YnRyYWN0ICAzICAtMiAgLT4gJzUnDQorZHFzdWIwMjcgc3VidHJhY3QgIDIgIC0zICAtPiAnNScNCisNCitkcXN1YjAzMCBzdWJ0cmFjdCAgMTEgIDEgIC0+IDEwDQorZHFzdWIwMzEgc3VidHJhY3QgIDEwICAxICAtPiAgOQ0KK2Rxc3ViMDMyIHN1YnRyYWN0ICA5ICAgMSAgLT4gIDgNCitkcXN1YjAzMyBzdWJ0cmFjdCAgMSAgIDEgIC0+ICAwDQorZHFzdWIwMzQgc3VidHJhY3QgIDAgICAxICAtPiAtMQ0KK2Rxc3ViMDM1IHN1YnRyYWN0IC0xICAgMSAgLT4gLTINCitkcXN1YjAzNiBzdWJ0cmFjdCAtOSAgIDEgIC0+IC0xMA0KK2Rxc3ViMDM3IHN1YnRyYWN0IC0xMCAgMSAgLT4gLTExDQorZHFzdWIwMzggc3VidHJhY3QgLTExICAxICAtPiAtMTINCisNCitkcXN1YjA0MCBzdWJ0cmFjdCAnNS43NScgJzMuMycgIC0+ICcyLjQ1Jw0KK2Rxc3ViMDQxIHN1YnRyYWN0ICc1JyAgICAnLTMnICAgLT4gJzgnDQorZHFzdWIwNDIgc3VidHJhY3QgJy01JyAgICctMycgICAtPiAnLTInDQorZHFzdWIwNDMgc3VidHJhY3QgJy03JyAgICcyLjUnICAtPiAnLTkuNScNCitkcXN1YjA0NCBzdWJ0cmFjdCAnMC43JyAgJzAuMycgIC0+ICcwLjQnDQorZHFzdWIwNDUgc3VidHJhY3QgJzEuMycgICcwLjMnICAtPiAnMS4wJw0KK2Rxc3ViMDQ2IHN1YnRyYWN0ICcxLjI1JyAnMS4yNScgLT4gJzAuMDAnDQorDQorZHFzdWIwNTAgc3VidHJhY3QgJzEuMjM0NTY3ODknICAgICcxLjAwMDAwMDAwJyAtPiAnMC4yMzQ1Njc4OScNCitkcXN1YjA1MSBzdWJ0cmFjdCAnMS4yMzQ1Njc4OScgICAgJzEuMDAwMDAwODknIC0+ICcwLjIzNDU2NzAwJw0KKw0KK2Rxc3ViMDYwIHN1YnRyYWN0ICc3MCcgICAgJzEwMDAwZSszNCcgLT4gJy0xLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViMDYxIHN1YnRyYWN0ICc3MDAnICAgICcxMDAwMGUrMzQnIC0+ICctMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjA2MiBzdWJ0cmFjdCAnNzAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUUrMzcnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViMDYzIHN1YnRyYWN0ICc3MDAwMCcgICAgJzEwMDAwZSszNCcgLT4gJy05Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5M0UrMzcnIFJvdW5kZWQNCitkcXN1YjA2NCBzdWJ0cmFjdCAnNzAwMDAwJyAgICAnMTAwMDBlKzM0JyAtPiAnLTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZA0KKyAgLS0gc3ltbWV0cnk6DQorZHFzdWIwNjUgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjA2NiBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjA2NyBzdWJ0cmFjdCAnMTAwMDBlKzM0JyAgICAnNzAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5RSszNycgSW5leGFjdCBSb3VuZGVkDQorZHFzdWIwNjggc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwJyAtPiAnOS45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTNFKzM3JyBSb3VuZGVkDQorZHFzdWIwNjkgc3VidHJhY3QgJzEwMDAwZSszNCcgICAgJzcwMDAwMCcgLT4gJzkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTMwRSszNycgUm91bmRlZA0KKw0KKyAgLS0gc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzDQorZHFzdWIwOTAgc3VidHJhY3QgJzAwLjAnICAgICcwLjAnICAtPiAnMC4wJw0KK2Rxc3ViMDkxIHN1YnRyYWN0ICcwMC4wJyAgICAnMC4wMCcgLT4gJzAuMDAnDQorZHFzdWIwOTIgc3VidHJhY3QgJzAuMDAnICAgICcwMC4wJyAtPiAnMC4wMCcNCitkcXN1YjA5MyBzdWJ0cmFjdCAnMDAuMCcgICAgJzAuMDAnIC0+ICcwLjAwJw0KK2Rxc3ViMDk0IHN1YnRyYWN0ICcwLjAwJyAgICAnMDAuMCcgLT4gJzAuMDAnDQorZHFzdWIwOTUgc3VidHJhY3QgJzMnICAgICcuMycgICAtPiAnMi43Jw0KK2Rxc3ViMDk2IHN1YnRyYWN0ICczLicgICAnLjMnICAgLT4gJzIuNycNCitkcXN1YjA5NyBzdWJ0cmFjdCAnMy4wJyAgJy4zJyAgIC0+ICcyLjcnDQorZHFzdWIwOTggc3VidHJhY3QgJzMuMDAnICcuMycgICAtPiAnMi43MCcNCitkcXN1YjA5OSBzdWJ0cmFjdCAnMycgICAgJzMnICAgIC0+ICcwJw0KK2Rxc3ViMTAwIHN1YnRyYWN0ICczJyAgICAnKzMnICAgLT4gJzAnDQorZHFzdWIxMDEgc3VidHJhY3QgJzMnICAgICctMycgICAtPiAnNicNCitkcXN1YjEwMiBzdWJ0cmFjdCAnMycgICAgJzAuMycgIC0+ICcyLjcnDQorZHFzdWIxMDMgc3VidHJhY3QgJzMuJyAgICcwLjMnICAtPiAnMi43Jw0KK2Rxc3ViMTA0IHN1YnRyYWN0ICczLjAnICAnMC4zJyAgLT4gJzIuNycNCitkcXN1YjEwNSBzdWJ0cmFjdCAnMy4wMCcgJzAuMycgIC0+ICcyLjcwJw0KK2Rxc3ViMTA2IHN1YnRyYWN0ICczJyAgICAnMy4wJyAgLT4gJzAuMCcNCitkcXN1YjEwNyBzdWJ0cmFjdCAnMycgICAgJyszLjAnIC0+ICcwLjAnDQorZHFzdWIxMDggc3VidHJhY3QgJzMnICAgICctMy4wJyAtPiAnNi4wJw0KKw0KKy0tIHRoZSBhYm92ZSBhbGwgZnJvbSBhZGQ7IG1hc3NhZ2VkIGFuZCBleHRlbmRlZC4gIE5vdyBzb21lIG5ldyBvbmVzLi4uDQorLS0gW3BhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIGNvbXBhcmlzb25zXQ0KKy0tIE5COiAteEUtOCBiZWxvdyB3ZXJlIG5vbi1leHBvbmVudHMgcHJlLUFOU0kgWDMtMjc0LCBhbmQgLTFFLTcgb3IgMEUtNw0KKy0tIHdpdGggaW5wdXQgcm91bmRpbmcuDQorZHFzdWIxMjAgc3VidHJhY3QgICcxMC4yMzQ1Njc4NCcgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy01RS04Jw0KK2Rxc3ViMTIxIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODUnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctNEUtOCcNCitkcXN1YjEyMiBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg2JyAgICAnMTAuMjM0NTY3ODknICAtPiAnLTNFLTgnDQorZHFzdWIxMjMgc3VidHJhY3QgICcxMC4yMzQ1Njc4NycgICAgJzEwLjIzNDU2Nzg5JyAgLT4gJy0yRS04Jw0KK2Rxc3ViMTI0IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4OScgIC0+ICctMUUtOCcNCitkcXN1YjEyNSBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg5JyAgICAnMTAuMjM0NTY3ODknICAtPiAnMEUtOCcNCitkcXN1YjEyNiBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkwJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMUUtOCcNCitkcXN1YjEyNyBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkxJyAgICAnMTAuMjM0NTY3ODknICAtPiAnMkUtOCcNCitkcXN1YjEyOCBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkyJyAgICAnMTAuMjM0NTY3ODknICAtPiAnM0UtOCcNCitkcXN1YjEyOSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzkzJyAgICAnMTAuMjM0NTY3ODknICAtPiAnNEUtOCcNCitkcXN1YjEzMCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzk0JyAgICAnMTAuMjM0NTY3ODknICAtPiAnNUUtOCcNCitkcXN1YjEzMSBzdWJ0cmFjdCAgJzEwLjIzNDU2NzgxJyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTVFLTgnDQorZHFzdWIxMzIgc3VidHJhY3QgICcxMC4yMzQ1Njc4MicgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy00RS04Jw0KK2Rxc3ViMTMzIHN1YnRyYWN0ICAnMTAuMjM0NTY3ODMnICAgICcxMC4yMzQ1Njc4NicgIC0+ICctM0UtOCcNCitkcXN1YjEzNCBzdWJ0cmFjdCAgJzEwLjIzNDU2Nzg0JyAgICAnMTAuMjM0NTY3ODYnICAtPiAnLTJFLTgnDQorZHFzdWIxMzUgc3VidHJhY3QgICcxMC4yMzQ1Njc4NScgICAgJzEwLjIzNDU2Nzg2JyAgLT4gJy0xRS04Jw0KK2Rxc3ViMTM2IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODYnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcwRS04Jw0KK2Rxc3ViMTM3IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODcnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcxRS04Jw0KK2Rxc3ViMTM4IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODgnICAgICcxMC4yMzQ1Njc4NicgIC0+ICcyRS04Jw0KK2Rxc3ViMTM5IHN1YnRyYWN0ICAnMTAuMjM0NTY3ODknICAgICcxMC4yMzQ1Njc4NicgIC0+ICczRS04Jw0KK2Rxc3ViMTQwIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTAnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc0RS04Jw0KK2Rxc3ViMTQxIHN1YnRyYWN0ICAnMTAuMjM0NTY3OTEnICAgICcxMC4yMzQ1Njc4NicgIC0+ICc1RS04Jw0KK2Rxc3ViMTQyIHN1YnRyYWN0ICAnMScgICAgICAgICAgICAgICcwLjk5OTk5OTk5OScgIC0+ICcxRS05Jw0KK2Rxc3ViMTQzIHN1YnRyYWN0ICAnMC45OTk5OTk5OTknICAgICcxJyAgICAgICAgICAgIC0+ICctMUUtOScNCitkcXN1YjE0NCBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc4MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnNkUtOCcNCitkcXN1YjE0NSBzdWJ0cmFjdCAgJy0xMC4yMzQ1Njc5MCcgICAnLTEwLjIzNDU2Nzg2JyAtPiAnLTRFLTgnDQorZHFzdWIxNDYgc3VidHJhY3QgICctMTAuMjM0NTY3OTEnICAgJy0xMC4yMzQ1Njc4NicgLT4gJy01RS04Jw0KKw0KKy0tIGFkZGl0aW9uYWwgc2NhbGVkIGFyaXRobWV0aWMgdGVzdHMgWzAuOTcgcHJvYmxlbV0NCitkcXN1YjE2MCBzdWJ0cmFjdCAnMCcgICAgICcuMScgICAgICAtPiAnLTAuMScNCitkcXN1YjE2MSBzdWJ0cmFjdCAnMDAnICAgICcuOTc5ODMnICAtPiAnLTAuOTc5ODMnDQorZHFzdWIxNjIgc3VidHJhY3QgJzAnICAgICAnLjknICAgICAgLT4gJy0wLjknDQorZHFzdWIxNjMgc3VidHJhY3QgJzAnICAgICAnMC4xMDInICAgLT4gJy0wLjEwMicNCitkcXN1YjE2NCBzdWJ0cmFjdCAnMCcgICAgICcuNCcgICAgICAtPiAnLTAuNCcNCitkcXN1YjE2NSBzdWJ0cmFjdCAnMCcgICAgICcuMzA3JyAgICAtPiAnLTAuMzA3Jw0KK2Rxc3ViMTY2IHN1YnRyYWN0ICcwJyAgICAgJy40MzgyMicgIC0+ICctMC40MzgyMicNCitkcXN1YjE2NyBzdWJ0cmFjdCAnMCcgICAgICcuOTExJyAgICAtPiAnLTAuOTExJw0KK2Rxc3ViMTY4IHN1YnRyYWN0ICcuMCcgICAgJy4wMicgICAgIC0+ICctMC4wMicNCitkcXN1YjE2OSBzdWJ0cmFjdCAnMDAnICAgICcuMzkyJyAgICAtPiAnLTAuMzkyJw0KK2Rxc3ViMTcwIHN1YnRyYWN0ICcwJyAgICAgJy4yNicgICAgIC0+ICctMC4yNicNCitkcXN1YjE3MSBzdWJ0cmFjdCAnMCcgICAgICcwLjUxJyAgICAtPiAnLTAuNTEnDQorZHFzdWIxNzIgc3VidHJhY3QgJzAnICAgICAnLjIyMzQnICAgLT4gJy0wLjIyMzQnDQorZHFzdWIxNzMgc3VidHJhY3QgJzAnICAgICAnLjInICAgICAgLT4gJy0wLjInDQorZHFzdWIxNzQgc3VidHJhY3QgJy4wJyAgICAnLjAwMDgnICAgLT4gJy0wLjAwMDgnDQorLS0gMC4gb24gbGVmdA0KK2Rxc3ViMTgwIHN1YnRyYWN0ICcwLjAnICAgICAnLS4xJyAgICAgIC0+ICcwLjEnDQorZHFzdWIxODEgc3VidHJhY3QgJzAuMDAnICAgICctLjk3OTgzJyAgLT4gJzAuOTc5ODMnDQorZHFzdWIxODIgc3VidHJhY3QgJzAuMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCitkcXN1YjE4MyBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjEwMicgICAtPiAnMC4xMDInDQorZHFzdWIxODQgc3VidHJhY3QgJzAuMCcgICAgICctLjQnICAgICAgLT4gJzAuNCcNCitkcXN1YjE4NSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQorZHFzdWIxODYgc3VidHJhY3QgJzAuMCcgICAgICctLjQzODIyJyAgLT4gJzAuNDM4MjInDQorZHFzdWIxODcgc3VidHJhY3QgJzAuMCcgICAgICctLjkxMScgICAgLT4gJzAuOTExJw0KK2Rxc3ViMTg4IHN1YnRyYWN0ICcwLjAnICAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KK2Rxc3ViMTg5IHN1YnRyYWN0ICcwLjAwJyAgICAnLS4zOTInICAgIC0+ICcwLjM5MicNCitkcXN1YjE5MCBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjYnICAgICAtPiAnMC4yNicNCitkcXN1YjE5MSBzdWJ0cmFjdCAnMC4wJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCitkcXN1YjE5MiBzdWJ0cmFjdCAnMC4wJyAgICAgJy0uMjIzNCcgICAtPiAnMC4yMjM0Jw0KK2Rxc3ViMTkzIHN1YnRyYWN0ICcwLjAnICAgICAnLS4yJyAgICAgIC0+ICcwLjInDQorZHFzdWIxOTQgc3VidHJhY3QgJzAuMCcgICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCistLSBuZWdhdGl2ZXMgb2Ygc2FtZQ0KK2Rxc3ViMjAwIHN1YnRyYWN0ICcwJyAgICAgJy0uMScgICAgICAtPiAnMC4xJw0KK2Rxc3ViMjAxIHN1YnRyYWN0ICcwMCcgICAgJy0uOTc5ODMnICAtPiAnMC45Nzk4MycNCitkcXN1YjIwMiBzdWJ0cmFjdCAnMCcgICAgICctLjknICAgICAgLT4gJzAuOScNCitkcXN1YjIwMyBzdWJ0cmFjdCAnMCcgICAgICctMC4xMDInICAgLT4gJzAuMTAyJw0KK2Rxc3ViMjA0IHN1YnRyYWN0ICcwJyAgICAgJy0uNCcgICAgICAtPiAnMC40Jw0KK2Rxc3ViMjA1IHN1YnRyYWN0ICcwJyAgICAgJy0uMzA3JyAgICAtPiAnMC4zMDcnDQorZHFzdWIyMDYgc3VidHJhY3QgJzAnICAgICAnLS40MzgyMicgIC0+ICcwLjQzODIyJw0KK2Rxc3ViMjA3IHN1YnRyYWN0ICcwJyAgICAgJy0uOTExJyAgICAtPiAnMC45MTEnDQorZHFzdWIyMDggc3VidHJhY3QgJy4wJyAgICAnLS4wMicgICAgIC0+ICcwLjAyJw0KK2Rxc3ViMjA5IHN1YnRyYWN0ICcwMCcgICAgJy0uMzkyJyAgICAtPiAnMC4zOTInDQorZHFzdWIyMTAgc3VidHJhY3QgJzAnICAgICAnLS4yNicgICAgIC0+ICcwLjI2Jw0KK2Rxc3ViMjExIHN1YnRyYWN0ICcwJyAgICAgJy0wLjUxJyAgICAtPiAnMC41MScNCitkcXN1YjIxMiBzdWJ0cmFjdCAnMCcgICAgICctLjIyMzQnICAgLT4gJzAuMjIzNCcNCitkcXN1YjIxMyBzdWJ0cmFjdCAnMCcgICAgICctLjInICAgICAgLT4gJzAuMicNCitkcXN1YjIxNCBzdWJ0cmFjdCAnLjAnICAgICctLjAwMDgnICAgLT4gJzAuMDAwOCcNCisNCistLSBtb3JlIGZpeGVkLCBMSFMgc3dhcHMgW3JlYWxseSB0aGUgc2FtZSBhcyB0ZXN0Y2FzZXMgdW5kZXIgYWRkXQ0KK2Rxc3ViMjIwIHN1YnRyYWN0ICctNTYyNjdFLTEyJyAwICAtPiAnLTUuNjI2N0UtOCcNCitkcXN1YjIyMSBzdWJ0cmFjdCAnLTU2MjY3RS0xMScgMCAgLT4gJy01LjYyNjdFLTcnDQorZHFzdWIyMjIgc3VidHJhY3QgJy01NjI2N0UtMTAnIDAgIC0+ICctMC4wMDAwMDU2MjY3Jw0KK2Rxc3ViMjIzIHN1YnRyYWN0ICctNTYyNjdFLTknICAwICAtPiAnLTAuMDAwMDU2MjY3Jw0KK2Rxc3ViMjI0IHN1YnRyYWN0ICctNTYyNjdFLTgnICAwICAtPiAnLTAuMDAwNTYyNjcnDQorZHFzdWIyMjUgc3VidHJhY3QgJy01NjI2N0UtNycgIDAgIC0+ICctMC4wMDU2MjY3Jw0KK2Rxc3ViMjI2IHN1YnRyYWN0ICctNTYyNjdFLTYnICAwICAtPiAnLTAuMDU2MjY3Jw0KK2Rxc3ViMjI3IHN1YnRyYWN0ICctNTYyNjdFLTUnICAwICAtPiAnLTAuNTYyNjcnDQorZHFzdWIyMjggc3VidHJhY3QgJy01NjI2N0UtMicgIDAgIC0+ICctNTYyLjY3Jw0KK2Rxc3ViMjI5IHN1YnRyYWN0ICctNTYyNjdFLTEnICAwICAtPiAnLTU2MjYuNycNCitkcXN1YjIzMCBzdWJ0cmFjdCAnLTU2MjY3RS0wJyAgMCAgLT4gJy01NjI2NycNCistLSBzeW1tZXRyeSAuLi4NCitkcXN1YjI0MCBzdWJ0cmFjdCAwICctNTYyNjdFLTEyJyAgLT4gJzUuNjI2N0UtOCcNCitkcXN1YjI0MSBzdWJ0cmFjdCAwICctNTYyNjdFLTExJyAgLT4gJzUuNjI2N0UtNycNCitkcXN1YjI0MiBzdWJ0cmFjdCAwICctNTYyNjdFLTEwJyAgLT4gJzAuMDAwMDA1NjI2NycNCitkcXN1YjI0MyBzdWJ0cmFjdCAwICctNTYyNjdFLTknICAgLT4gJzAuMDAwMDU2MjY3Jw0KK2Rxc3ViMjQ0IHN1YnRyYWN0IDAgJy01NjI2N0UtOCcgICAtPiAnMC4wMDA1NjI2NycNCitkcXN1YjI0NSBzdWJ0cmFjdCAwICctNTYyNjdFLTcnICAgLT4gJzAuMDA1NjI2NycNCitkcXN1YjI0NiBzdWJ0cmFjdCAwICctNTYyNjdFLTYnICAgLT4gJzAuMDU2MjY3Jw0KK2Rxc3ViMjQ3IHN1YnRyYWN0IDAgJy01NjI2N0UtNScgICAtPiAnMC41NjI2NycNCitkcXN1YjI0OCBzdWJ0cmFjdCAwICctNTYyNjdFLTInICAgLT4gJzU2Mi42NycNCitkcXN1YjI0OSBzdWJ0cmFjdCAwICctNTYyNjdFLTEnICAgLT4gJzU2MjYuNycNCitkcXN1YjI1MCBzdWJ0cmFjdCAwICctNTYyNjdFLTAnICAgLT4gJzU2MjY3Jw0KKw0KKy0tIG5vdyBzb21lIG1vcmUgZnJvbSB0aGUgJ25ldycgYWRkDQorZHFzdWIzMDEgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzAuMjM0NTY3ODknDQorZHFzdWIzMDIgc3VidHJhY3QgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzAuMjM0NTY3NzgnDQorDQorLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQorZHFzdWIzMjEgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnDQorZHFzdWIzMjIgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTcnDQorZHFzdWIzMjMgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcwLjk5OTYnDQorZHFzdWIzMjQgc3VidHJhY3QgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcwLjk5OTUnDQorZHFzdWIzMjUgc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAwJyAtPiAnMC45OTk4Jw0KK2Rxc3ViMzI2IHN1YnRyYWN0ICcwLjk5OTgnICAnLTAuMDAwMScgLT4gJzAuOTk5OScNCitkcXN1YjMyNyBzdWJ0cmFjdCAnMC45OTk4JyAgJy0wLjAwMDInIC0+ICcxLjAwMDAnDQorZHFzdWIzMjggc3VidHJhY3QgJzAuOTk5OCcgICctMC4wMDAzJyAtPiAnMS4wMDAxJw0KKw0KKy0tIGludGVybmFsIGJvdW5kYXJpZXMNCitkcXN1YjM0NiBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNycgICAtPiAnOTk5OTk5OTk5OTk5MycNCitkcXN1YjM0NyBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAnICAgLT4gJzk5OTk5OTk5OTk5MzAnDQorZHFzdWIzNDggc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMCcgICAtPiAnOTk5OTk5OTk5OTMwMCcNCitkcXN1YjM0OSBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMCcgICAtPiAnOTk5OTk5OTk5MzAwMCcNCitkcXN1YjM1MCBzdWJ0cmFjdCAnMTAwMDBlKzknICAnNzAwMDAnICAgLT4gJzk5OTk5OTk5MzAwMDAnDQorZHFzdWIzNTEgc3VidHJhY3QgJzEwMDAwZSs5JyAgJzcwMDAwMCcgICAtPiAnOTk5OTk5OTMwMDAwMCcNCitkcXN1YjM1MiBzdWJ0cmFjdCAnNycgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTk5MycNCitkcXN1YjM1MyBzdWJ0cmFjdCAnNzAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5OTk5MzAnDQorZHFzdWIzNTQgc3VidHJhY3QgJzcwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5OTMwMCcNCitkcXN1YjM1NSBzdWJ0cmFjdCAnNzAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTk5MzAwMCcNCitkcXN1YjM1NiBzdWJ0cmFjdCAnNzAwMDAnICcxMDAwMGUrOScgICAtPiAnLTk5OTk5OTk5MzAwMDAnDQorZHFzdWIzNTcgc3VidHJhY3QgJzcwMDAwMCcgJzEwMDAwZSs5JyAgIC0+ICctOTk5OTk5OTMwMDAwMCcNCisNCistLSB6ZXJvIHByZXNlcnZhdGlvbg0KK2Rxc3ViMzYxIHN1YnRyYWN0IDEgJzAuMDAwMScgLT4gJzAuOTk5OScNCitkcXN1YjM2MiBzdWJ0cmFjdCAxICcwLjAwMDAxJyAtPiAnMC45OTk5OScNCitkcXN1YjM2MyBzdWJ0cmFjdCAxICcwLjAwMDAwMScgLT4gJzAuOTk5OTk5Jw0KK2Rxc3ViMzY0IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OScNCitkcXN1YjM2NSBzdWJ0cmFjdCAxICcwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViMzY2IHN1YnRyYWN0IDEgJzAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitkcXN1YjM3MCBzdWJ0cmFjdCAxICAwICAtPiAxDQorZHFzdWIzNzEgc3VidHJhY3QgMSAwLiAgLT4gMQ0KK2Rxc3ViMzcyIHN1YnRyYWN0IDEgIC4wIC0+IDEuMA0KK2Rxc3ViMzczIHN1YnRyYWN0IDEgMC4wIC0+IDEuMA0KK2Rxc3ViMzc0IHN1YnRyYWN0ICAwICAxIC0+IC0xDQorZHFzdWIzNzUgc3VidHJhY3QgMC4gIDEgLT4gLTENCitkcXN1YjM3NiBzdWJ0cmFjdCAgLjAgMSAtPiAtMS4wDQorZHFzdWIzNzcgc3VidHJhY3QgMC4wIDEgLT4gLTEuMA0KKw0KKy0tIGxlYWRpbmcgMCBkaWdpdCBiZWZvcmUgcm91bmQNCitkcXN1YjkxMCBzdWJ0cmFjdCAtMTAzNTE5MzYyIC01MTg5Nzk1NS4zIC0+IC01MTYyMTQwNi43DQorZHFzdWI5MTEgc3VidHJhY3QgMTU5NTc5LjQ0NCA4OTgyNy41MjI5IC0+IDY5NzUxLjkyMTENCisNCitkcXN1YjkyMCBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NiAtPiAyOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjkyMSBzdWJ0cmFjdCAzMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAzMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjkyMiBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NSAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTUNCitkcXN1YjkyMyBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU2NCAtPiAgOTkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYNCitkcXN1YjkyNCBzdWJ0cmFjdCAxMzMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NiAzMy4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzNDU0MCAtPiAxMDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMiBSb3VuZGVkDQorZHFzdWI5MjUgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjAgLT4gIDkwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHFzdWI5MjYgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjEgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5DQorZHFzdWI5Mjcgc3VidHJhY3QgMTMzLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgNDMuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gIDg5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQorZHFzdWI5Mjggc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQorZHFzdWI5Mjkgc3VidHJhY3QgMTAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjM0NTYgOTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMzQ1NjYgLT4gICAxLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk0DQorDQorLS0gbW9yZSBMSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQorZHFzdWIzOTAgc3VidHJhY3QgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQorZHFzdWIzOTEgc3VidHJhY3QgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCitkcXN1YjM5MiBzdWJ0cmFjdCAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQorZHFzdWIzOTMgc3VidHJhY3QgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQorZHFzdWIzOTQgc3VidHJhY3QgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQorZHFzdWIzOTUgc3VidHJhY3QgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQorZHFzdWIzOTYgc3VidHJhY3QgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQorZHFzdWIzOTcgc3VidHJhY3QgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCitkcXN1YjM5OCBzdWJ0cmFjdCAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KK2Rxc3ViMzk5IHN1YnRyYWN0ICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCitkcXN1YjQwMCBzdWJ0cmFjdCAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KK2Rxc3ViNDAxIHN1YnRyYWN0ICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCitkcXN1YjQwMiBzdWJ0cmFjdCAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCitkcXN1YjQwMyBzdWJ0cmFjdCAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCitkcXN1YjQwNCBzdWJ0cmFjdCAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQorZHFzdWI0MDUgc3VidHJhY3QgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCitkcXN1YjQwNiBzdWJ0cmFjdCAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCitkcXN1YjQwNyBzdWJ0cmFjdCAnLTVFMzMnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFzdWI0MDggc3VidHJhY3QgJy01RTM0JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzQnICBSb3VuZGVkDQorZHFzdWI0MDkgc3VidHJhY3QgJy01RTM1JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICBSb3VuZGVkDQorZHFzdWI0MTAgc3VidHJhY3QgJy01RTM2JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzYnICBSb3VuZGVkDQorZHFzdWI0MTEgc3VidHJhY3QgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMTAwJyBSb3VuZGVkDQorDQorLS0gbW9yZSBSSFMgc3dhcHMgW3dlcmUgZml4ZWRdDQorZHFzdWI0MjAgc3VidHJhY3QgMCAgJy01NjI2N0UtMTAnIC0+ICAnMC4wMDAwMDU2MjY3Jw0KK2Rxc3ViNDIxIHN1YnRyYWN0IDAgICctNTYyNjdFLTYnICAtPiAgJzAuMDU2MjY3Jw0KK2Rxc3ViNDIyIHN1YnRyYWN0IDAgICctNTYyNjdFLTUnICAtPiAgJzAuNTYyNjcnDQorZHFzdWI0MjMgc3VidHJhY3QgMCAgJy01NjI2N0UtNCcgIC0+ICAnNS42MjY3Jw0KK2Rxc3ViNDI0IHN1YnRyYWN0IDAgICctNTYyNjdFLTMnICAtPiAgJzU2LjI2NycNCitkcXN1YjQyNSBzdWJ0cmFjdCAwICAnLTU2MjY3RS0yJyAgLT4gICc1NjIuNjcnDQorZHFzdWI0MjYgc3VidHJhY3QgMCAgJy01NjI2N0UtMScgIC0+ICAnNTYyNi43Jw0KK2Rxc3ViNDI3IHN1YnRyYWN0IDAgICctNTYyNjdFLTAnICAtPiAgJzU2MjY3Jw0KK2Rxc3ViNDI4IHN1YnRyYWN0IDAgICctNUUtMTAnICAgICAtPiAgJzVFLTEwJw0KK2Rxc3ViNDI5IHN1YnRyYWN0IDAgICctNUUtNycgICAgICAtPiAgJzVFLTcnDQorZHFzdWI0MzAgc3VidHJhY3QgMCAgJy01RS02JyAgICAgIC0+ICAnMC4wMDAwMDUnDQorZHFzdWI0MzEgc3VidHJhY3QgMCAgJy01RS01JyAgICAgIC0+ICAnMC4wMDAwNScNCitkcXN1YjQzMiBzdWJ0cmFjdCAwICAnLTVFLTQnICAgICAgLT4gICcwLjAwMDUnDQorZHFzdWI0MzMgc3VidHJhY3QgMCAgJy01RS0xJyAgICAgIC0+ICAnMC41Jw0KK2Rxc3ViNDM0IHN1YnRyYWN0IDAgICctNUUwJyAgICAgICAtPiAgJzUnDQorZHFzdWI0MzUgc3VidHJhY3QgMCAgJy01RTEnICAgICAgIC0+ICAnNTAnDQorZHFzdWI0MzYgc3VidHJhY3QgMCAgJy01RTUnICAgICAgIC0+ICAnNTAwMDAwJw0KK2Rxc3ViNDM3IHN1YnRyYWN0IDAgICctNUUzMycgICAgICAtPiAgJzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnDQorZHFzdWI0Mzggc3VidHJhY3QgMCAgJy01RTM0JyAgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzM0JyAgIFJvdW5kZWQNCitkcXN1YjQzOSBzdWJ0cmFjdCAwICAnLTVFMzUnICAgICAgLT4gICc1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUrMzUnICAgUm91bmRlZA0KK2Rxc3ViNDQwIHN1YnRyYWN0IDAgICctNUUzNicgICAgICAtPiAgJzUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRSszNicgICBSb3VuZGVkDQorZHFzdWI0NDEgc3VidHJhY3QgMCAgJy01RTEwMCcgICAgIC0+ICAnNS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCisNCisNCistLSB0cnkgYm9yZGVybGluZSBwcmVjaXNpb24sIHdpdGggY2FycmllcywgZXRjLg0KK2Rxc3ViNDYxIHN1YnRyYWN0ICcxRSsxNicgJzEnICAgICAgICAtPiAnOTk5OTk5OTk5OTk5OTk5OScNCitkcXN1YjQ2MiBzdWJ0cmFjdCAnMUUrMTInICctMS4xMTEnICAgLT4gJzEwMDAwMDAwMDAwMDEuMTExJw0KK2Rxc3ViNDYzIHN1YnRyYWN0ICcxLjExMScgICctMUUrMTInICAtPiAnMTAwMDAwMDAwMDAwMS4xMTEnDQorZHFzdWI0NjQgc3VidHJhY3QgJy0xJyAgICAnLTFFKzE2JyAgIC0+ICc5OTk5OTk5OTk5OTk5OTk5Jw0KK2Rxc3ViNDY1IHN1YnRyYWN0ICc3RSsxNScgJzEnICAgICAgICAtPiAnNjk5OTk5OTk5OTk5OTk5OScNCitkcXN1YjQ2NiBzdWJ0cmFjdCAnN0UrMTInICctMS4xMTEnICAgLT4gJzcwMDAwMDAwMDAwMDEuMTExJw0KK2Rxc3ViNDY3IHN1YnRyYWN0ICcxLjExMScgICctN0UrMTInICAtPiAnNzAwMDAwMDAwMDAwMS4xMTEnDQorZHFzdWI0Njggc3VidHJhY3QgJy0xJyAgICAnLTdFKzE1JyAgIC0+ICc2OTk5OTk5OTk5OTk5OTk5Jw0KKw0KKy0tICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAgMTIzNDU2Nzg5MDEyMzQ1NiAgICAgIDEgMjM0NTY3ODkwMTIzNDUNCitkcXN1YjQ3MCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI0NzEgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNDcyIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjQ3MyBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI0NzQgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNDc1IHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjQ3NiBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI0Nzcgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitkcXN1YjQ3OCBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknDQorZHFzdWI0Nzkgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4Jw0KK2Rxc3ViNDgwIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NycNCitkcXN1YjQ4MSBzdWJ0cmFjdCAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJy0wLjU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTYnDQorZHFzdWI0ODIgc3VidHJhY3QgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICctMC41NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk1Jw0KK2Rxc3ViNDgzIHN1YnRyYWN0ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnLTAuNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5NCcNCisNCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQorcm91bmRpbmc6IGhhbGZfdXANCitkcXN1YjUwMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScNCitkcXN1YjUwMSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MDIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTAzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUwNCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MDUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTA2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUwNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MDggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTA5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUxMCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MTEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTEyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUxMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MTQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTE1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUxNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcNCitkcXN1YjUxNyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MTggc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTE5IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZHFzdWI1MjAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQorZHFzdWI1MjEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTIyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUyMyBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MjQgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTI1IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUyNiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1Mjcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTI4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUyOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MzAgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTMxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUzMiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MzMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTM0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUzNSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1MzYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnDQorZHFzdWI1Mzcgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTM4IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjUzOSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorLS0gY3JpdGljYWwgZmV3IHdpdGggZXZlbiBib3R0b20gZGlnaXQuLi4NCitkcXN1YjU0MCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgMC40OTk5OTk5OTkgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NDEgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTQyIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogZG93bg0KK2Rxc3ViNTUwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5Jw0KK2Rxc3ViNTUxIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU1MiBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NTMgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTU0IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU1NSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NTYgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTU3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU1OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NTkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTYwIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU2MSBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NjIgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTYzIHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU2NCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1NjUgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNTY2IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KK2Rxc3ViNTY3IHN1YnRyYWN0ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjU2OCBzdWJ0cmFjdCAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI1Njkgc3VidHJhY3QgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHN5bW1ldHJ5Li4uDQorcm91bmRpbmc6IGhhbGZfdXANCitkcXN1YjYwMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQorZHFzdWI2MDEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYwMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjAzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MDQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYwNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjA2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MDcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYwOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjA5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MTAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYxMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjEyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MTMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYxNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjE1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MTYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KK2Rxc3ViNjE3IHN1YnRyYWN0IDEuMDAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MTggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYxOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkcXN1YjYyMCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQorZHFzdWI2MjEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYyMiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjIzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MjQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYyNSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjI2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2Mjcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYyOCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjI5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MzAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYzMSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjMyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MzMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYzNCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjM1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2MzYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KK2Rxc3ViNjM3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2Mzggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjYzOSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQorZHFzdWI2NDAgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY0MSBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjQyIHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitkcXN1YjY1MCBzdWJ0cmFjdCAwICAgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknDQorZHFzdWI2NTEgc3VidHJhY3QgMC4wMDAwMDAwMDEgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY1MiBzdWJ0cmFjdCAwLjAwMDAwMSAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjUzIHN1YnRyYWN0IDAuMSAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2NTQgc3VidHJhY3QgMC40ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY1NSBzdWJ0cmFjdCAwLjQ5ICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjU2IHN1YnRyYWN0IDAuNDk5OTk5ICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2NTcgc3VidHJhY3QgMC40OTk5OTk5OTkgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY1OCBzdWJ0cmFjdCAwLjUgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjU5IHN1YnRyYWN0IDAuNTAwMDAwMDAxICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2NjAgc3VidHJhY3QgMC41MDAwMDEgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY2MSBzdWJ0cmFjdCAwLjUxICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjYyIHN1YnRyYWN0IDAuNiAgICAgICAgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2NjMgc3VidHJhY3QgMC45ICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY2NCBzdWJ0cmFjdCAwLjk5OTk5ICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2Rxc3ViNjY1IHN1YnRyYWN0IDAuOTk5OTk5OTk5ICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2NjYgc3VidHJhY3QgMSAgICAgICAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg4Jw0KK2Rxc3ViNjY3IHN1YnRyYWN0IDEuMDAwMDAwMDEgICAgJzEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODknIC0+ICctMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4NycgSW5leGFjdCBSb3VuZGVkDQorZHFzdWI2Njggc3VidHJhY3QgMS4wMDAwMSAgICAgICAnMTIzMTIzNDU1NTU1NTU1NTU1NTU1NTU1NTU2NzQ1Njc4OScgLT4gJy0xMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg3JyBJbmV4YWN0IFJvdW5kZWQNCitkcXN1YjY2OSBzdWJ0cmFjdCAxLjEgICAgICAgICAgICcxMjMxMjM0NTU1NTU1NTU1NTU1NTU1NTU1NTY3NDU2Nzg5JyAtPiAnLTEyMzEyMzQ1NTU1NTU1NTU1NTU1NTU1NTU1Njc0NTY3ODcnIEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKy0tIGxvdHMgb2YgbGVhZGluZyB6ZXJvcyBpbiBpbnRlcm1lZGlhdGUgcmVzdWx0LCBhbmQgc2hvd2luZyBlZmZlY3RzIG9mDQorLS0gaW5wdXQgcm91bmRpbmcgd291bGQgaGF2ZSBhZmZlY3RlZCB0aGUgZm9sbG93aW5nDQorcm91bmRpbmc6IGhhbGZfdXANCitkcXN1YjY3MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQorZHFzdWI2NzEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KK2Rxc3ViNjcyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQorZHFzdWI2NzMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCitkcXN1YjY3NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KKw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitkcXN1YjY4MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQorZHFzdWI2ODEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KK2Rxc3ViNjgyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQorZHFzdWI2ODMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCitkcXN1YjY4NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KKw0KK2Rxc3ViNjg1IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4Ny4xJyAtPiAwLjkNCitkcXN1YjY4NiBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODcuOScgLT4gMC4xDQorZHFzdWI2ODcgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODgnICcxMjM0NTY3NDU2Nzg4LjEnIC0+IC0wLjENCitkcXN1YjY4OCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OCcgJzEyMzQ1Njc0NTY3ODguNScgLT4gLTAuNQ0KK2Rxc3ViNjg5IHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg4JyAnMTIzNDU2NzQ1Njc4OC45JyAtPiAtMC45DQorDQorcm91bmRpbmc6IGRvd24NCitkcXN1YjY5MCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODguMScgLT4gMC45DQorZHFzdWI2OTEgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg4LjknIC0+IDAuMQ0KK2Rxc3ViNjkyIHN1YnRyYWN0ICcxMjM0NTY3NDU2Nzg5JyAnMTIzNDU2NzQ1Njc4OS4xJyAtPiAtMC4xDQorZHFzdWI2OTMgc3VidHJhY3QgJzEyMzQ1Njc0NTY3ODknICcxMjM0NTY3NDU2Nzg5LjUnIC0+IC0wLjUNCitkcXN1YjY5NCBzdWJ0cmFjdCAnMTIzNDU2NzQ1Njc4OScgJzEyMzQ1Njc0NTY3ODkuOScgLT4gLTAuOQ0KKw0KKy0tIFNwZWNpYWxzDQorZHFzdWI3ODAgc3VidHJhY3QgLUluZiAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2Rxc3ViNzgxIHN1YnRyYWN0IC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitkcXN1Yjc4MiBzdWJ0cmFjdCAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorZHFzdWI3ODMgc3VidHJhY3QgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK2Rxc3ViNzg0IHN1YnRyYWN0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkNCitkcXN1Yjc4NSBzdWJ0cmFjdCAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZHFzdWI3ODcgc3VidHJhY3QgLTEwMDAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2Rxc3ViNzg4IHN1YnRyYWN0IC1JbmYgICBJbmYgICAtPiAtSW5maW5pdHkNCitkcXN1Yjc4OSBzdWJ0cmFjdCAtMSAgICAgSW5mICAgLT4gLUluZmluaXR5DQorZHFzdWI3OTAgc3VidHJhY3QgIDAgICAgIEluZiAgIC0+IC1JbmZpbml0eQ0KK2Rxc3ViNzkxIHN1YnRyYWN0ICAxICAgICBJbmYgICAtPiAtSW5maW5pdHkNCitkcXN1Yjc5MiBzdWJ0cmFjdCAgMTAwMCAgSW5mICAgLT4gLUluZmluaXR5DQorDQorZHFzdWI4MDAgc3VidHJhY3QgIEluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4MDEgc3VidHJhY3QgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2Rxc3ViODAyIHN1YnRyYWN0ICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitkcXN1YjgwMyBzdWJ0cmFjdCAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQorZHFzdWI4MDQgc3VidHJhY3QgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2Rxc3ViODA1IHN1YnRyYWN0ICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitkcXN1YjgwNiBzdWJ0cmFjdCAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZHFzdWI4MDcgc3VidHJhY3QgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2Rxc3ViODA4IHN1YnRyYWN0IC0xMDAwIC1JbmYgICAtPiAgSW5maW5pdHkNCitkcXN1YjgwOSBzdWJ0cmFjdCAtSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXN1YjgxMCBzdWJ0cmFjdCAtMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZHFzdWI4MTEgc3VidHJhY3QgLTAgICAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2Rxc3ViODEyIHN1YnRyYWN0ICAwICAgIC1JbmYgICAtPiAgSW5maW5pdHkNCitkcXN1YjgxMyBzdWJ0cmFjdCAgMSAgICAtSW5mICAgLT4gIEluZmluaXR5DQorZHFzdWI4MTQgc3VidHJhY3QgIDEwMDAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK2Rxc3ViODE1IHN1YnRyYWN0ICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCisNCitkcXN1YjgyMSBzdWJ0cmFjdCAgTmFOICAgSW5mICAgLT4gIE5hTg0KK2Rxc3ViODIyIHN1YnRyYWN0IC1OYU4gICAxMDAwICAtPiAtTmFODQorZHFzdWI4MjMgc3VidHJhY3QgIE5hTiAgIDEgICAgIC0+ICBOYU4NCitkcXN1YjgyNCBzdWJ0cmFjdCAgTmFOICAgMCAgICAgLT4gIE5hTg0KK2Rxc3ViODI1IHN1YnRyYWN0ICBOYU4gIC0wICAgICAtPiAgTmFODQorZHFzdWI4MjYgc3VidHJhY3QgIE5hTiAgLTEgICAgIC0+ICBOYU4NCitkcXN1YjgyNyBzdWJ0cmFjdCAgTmFOICAtMTAwMCAgLT4gIE5hTg0KK2Rxc3ViODI4IHN1YnRyYWN0ICBOYU4gIC1JbmYgICAtPiAgTmFODQorZHFzdWI4Mjkgc3VidHJhY3QgLU5hTiAgIE5hTiAgIC0+IC1OYU4NCitkcXN1YjgzMCBzdWJ0cmFjdCAtSW5mICAgTmFOICAgLT4gIE5hTg0KK2Rxc3ViODMxIHN1YnRyYWN0IC0xMDAwICBOYU4gICAtPiAgTmFODQorZHFzdWI4MzIgc3VidHJhY3QgLTEgICAgIE5hTiAgIC0+ICBOYU4NCitkcXN1YjgzMyBzdWJ0cmFjdCAtMCAgICAgTmFOICAgLT4gIE5hTg0KK2Rxc3ViODM0IHN1YnRyYWN0ICAwICAgICBOYU4gICAtPiAgTmFODQorZHFzdWI4MzUgc3VidHJhY3QgIDEgICAgIE5hTiAgIC0+ICBOYU4NCitkcXN1YjgzNiBzdWJ0cmFjdCAgMTAwMCAtTmFOICAgLT4gLU5hTg0KK2Rxc3ViODM3IHN1YnRyYWN0ICBJbmYgICBOYU4gICAtPiAgTmFODQorDQorZHFzdWI4NDEgc3VidHJhY3QgIHNOYU4gIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDIgc3VidHJhY3QgLXNOYU4gIDEwMDAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDMgc3VidHJhY3QgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDQgc3VidHJhY3QgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDUgc3VidHJhY3QgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDYgc3VidHJhY3QgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDcgc3VidHJhY3QgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDggc3VidHJhY3QgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NDkgc3VidHJhY3QgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTAgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTEgc3VidHJhY3QgLUluZiAtc05hTiAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTIgc3VidHJhY3QgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTMgc3VidHJhY3QgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTQgc3VidHJhY3QgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTUgc3VidHJhY3QgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTYgc3VidHJhY3QgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTcgc3VidHJhY3QgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTggc3VidHJhY3QgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NTkgc3VidHJhY3QgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2Rxc3ViODYxIHN1YnRyYWN0ICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xDQorZHFzdWI4NjIgc3VidHJhY3QgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCitkcXN1Yjg2MyBzdWJ0cmFjdCAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KK2Rxc3ViODY0IHN1YnRyYWN0ICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40DQorZHFzdWI4NjUgc3VidHJhY3QgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCitkcXN1Yjg2NiBzdWJ0cmFjdCAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCitkcXN1Yjg2NyBzdWJ0cmFjdCAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODENCitkcXN1Yjg2OCBzdWJ0cmFjdCAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCitkcXN1Yjg2OSBzdWJ0cmFjdCAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQorZHFzdWI4NzEgc3VidHJhY3QgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc3ViODcyIHN1YnRyYWN0ICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXN1Yjg3MyBzdWJ0cmFjdCAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4NzQgc3VidHJhY3QgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc3ViODc1IHN1YnRyYWN0ICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitkcXN1Yjg3NiBzdWJ0cmFjdCAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4Nzcgc3VidHJhY3QgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc3ViODc4IHN1YnRyYWN0IC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCitkcXN1Yjg3OSBzdWJ0cmFjdCAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQorZHFzdWI4ODAgc3VidHJhY3QgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc3ViODgxIHN1YnRyYWN0ICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBlZGdlIGNhc2Ugc3BpbGxzDQorZHFzdWI5MDEgc3VidHJhY3QgIDIuRS0zICAxLjAwMiAgLT4gLTEuMDAwDQorZHFzdWI5MDIgc3VidHJhY3QgIDIuMEUtMyAgMS4wMDIgIC0+IC0xLjAwMDANCitkcXN1YjkwMyBzdWJ0cmFjdCAgMi4wMEUtMyAgMS4wMDIwICAtPiAtMS4wMDAwMA0KK2Rxc3ViOTA0IHN1YnRyYWN0ICAyLjAwMEUtMyAgMS4wMDIwMCAgLT4gLTEuMDAwMDAwDQorZHFzdWI5MDUgc3VidHJhY3QgIDIuMDAwMEUtMyAgMS4wMDIwMDAgIC0+IC0xLjAwMDAwMDANCitkcXN1YjkwNiBzdWJ0cmFjdCAgMi4wMDAwMEUtMyAgMS4wMDIwMDAwICAtPiAtMS4wMDAwMDAwMA0KK2Rxc3ViOTA3IHN1YnRyYWN0ICAyLjAwMDAwMEUtMyAgMS4wMDIwMDAwMCAgLT4gLTEuMDAwMDAwMDAwDQorZHFzdWI5MDggc3VidHJhY3QgIDIuMDAwMDAwMEUtMyAgMS4wMDIwMDAwMDAgIC0+IC0xLjAwMDAwMDAwMDANCisNCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MgY292ZXJlZCB1bmRlciBBZGQNCisNCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCitkcXN1YjExMjUgIHN1YnRyYWN0IDEzMEUtMiAgMTIwRS0yIC0+IDAuMTANCitkcXN1YjExMjYgIHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTANCitkcXN1YjExMjcgIHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzANCitkcXN1YjExMjggIHN1YnRyYWN0IDFFMiAgICAgMUU0ICAgIC0+IC05LjlFKzMNCisNCistLSBOdWxsIHRlc3RzDQorZHFzdWI5OTkwIHN1YnRyYWN0IDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2Rxc3ViOTk5MSBzdWJ0cmFjdCAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFUb0ludGVncmFsLmRlY1Rlc3QKaW5kZXggMzA1NWRlNS4uZWIxMjM4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RxVG9JbnRlZ3JhbC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVRvSW50ZWdyYWwuZGVjVGVzdApAQCAtMSwyNTcgKzEsMjU3IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRxVG9JbnRlZ3JhbC5kZWNUZXN0IC0tIHJvdW5kIFF1YWQgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsCi0tLSB2YWx1ZS1leGFjdCcgb3BlcmF0aW9ucyAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuCi0tLSBBbGwgbm9uLXplcm8gcmVzdWx0cyBhcmUgZGVmaW5lZCBhcyBiZWluZyB0aG9zZSBmcm9tIGVpdGhlciBjb3B5IG9yCi0tLSBxdWFudGl6ZSwgc28gdGhvc2UgYXJlIGFzc3VtZWQgdG8gaGF2ZSBiZWVuIHRlc3RlZCBleHRlbnNpdmVseQotLS0gZWxzZXdoZXJlOyB0aGUgdGVzdHMgaGVyZSBhcmUgZm9yIGludGVncml0eSwgcm91bmRpbmcgbW9kZSwgZXRjLgotLS0gQWxzbywgaXQgaXMgYXNzdW1lZCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwgdXNlIHRoZXNlIHRlc3RzIGZvciBib3RoCi0tLSBUb0ludGVncmFsRXhhY3QgKHdoaWNoIGRvZXMgc2V0IEluZXhhY3QpIGFuZCB0aGUgZml4ZWQtbmFtZQotLS0gZnVuY3Rpb25zICh3aGljaCBkbyBub3Qgc2V0IEluZXhhY3QpLgotCi0tLSBOb3RlIHRoYXQgZGVjTnVtYmVyIGltcGxlbWVudHMgYW4gZWFybGllciBkZWZpbml0aW9uIG9mIHRvSW50ZWdyYWwKLS0tIHdoaWNoIG5ldmVyIHNldHMgSW5leGFjdDsgdGhlIGRlY1Rlc3Qgb3BlcmF0b3IgZm9yIHRoYXQgaXMgY2FsbGVkCi0tLSAndG9pbnRlZ3JhbCcgaW5zdGVhZCBvZiAndG9pbnRlZ3JhbHgnLgotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi1kcWludHgwMDEgdG9pbnRlZ3JhbHggICAgICAwICAgICAtPiAgMAotZHFpbnR4MDAyIHRvaW50ZWdyYWx4ICAgICAgMC4wICAgLT4gIDAKLWRxaW50eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwNSB0b2ludGVncmFseCAgICAgIDAuMyAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwOCB0b2ludGVncmFseCAgICAgIDAuNiAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAxMSB0b2ludGVncmFseCAgICAgIDAuOSAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCi1kcWludHgwMTMgdG9pbnRlZ3JhbHggICAgICAxLjAgICAtPiAgMSAgUm91bmRlZAotZHFpbnR4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDE2IHRvaW50ZWdyYWx4ICAgICAgMS4zICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDE5IHRvaW50ZWdyYWx4ICAgICAgMS42ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDIyIHRvaW50ZWdyYWx4ICAgICAgMS45ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZAotLS0gbmVnYXRpdmVzCi1kcWludHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAotZHFpbnR4MDMyIHRvaW50ZWdyYWx4ICAgICAtMC4wICAgLT4gLTAKLWRxaW50eDAzMyB0b2ludGVncmFseCAgICAgLTAuMSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzNiB0b2ludGVncmFseCAgICAgLTAuNCAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDAzOSB0b2ludGVncmFseCAgICAgLTAuNyAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDA0MiB0b2ludGVncmFseCAgICAgLTEgICAgIC0+IC0xCi1kcWludHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSAgUm91bmRlZAotZHFpbnR4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDQ1IHRvaW50ZWdyYWx4ICAgICAtMS4yICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDQ4IHRvaW50ZWdyYWx4ICAgICAtMS41ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDUxIHRvaW50ZWdyYWx4ICAgICAtMS44ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZAotLS0gbmV4dCB0d28gd291bGQgYmUgTmFOIHVzaW5nIHF1YW50aXplKHgsIDApCi1kcWludHgwNTMgdG9pbnRlZ3JhbHggICAgMTBFKzYwICAtPiAxLjBFKzYxCi1kcWludHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzYwICAtPiAtMS4wRSs2MQotCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KLWRxaW50eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTE3JyAgIC0+ICcwJyAgICAgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JwotZHFpbnR4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3JwotZHFpbnR4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScKLWRxaW50eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzknICAgIC0+ICc1LjYyNjdFKzEzJwotZHFpbnR4MDY5IHRvaW50ZWdyYWx4ICc1NjI2N0UrMTAnICAgLT4gJzUuNjI2N0UrMTQnCi1kcWludHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMScgICAtPiAnNS42MjY3RSsxNScKLWRxaW50eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzEyJyAgIC0+ICc1LjYyNjdFKzE2JwotZHFpbnR4MDcyIHRvaW50ZWdyYWx4ICc1NjI2N0UrMTMnICAgLT4gJzUuNjI2N0UrMTcnCi1kcWludHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCi1kcWludHgwNzQgdG9pbnRlZ3JhbHggJzEuMjNFKzYxNDQnICAtPiAjNDdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZAotCi1kcWludHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3JwotZHFpbnR4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycKLWRxaW50eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JwotZHFpbnR4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzknICAgLT4gJy01LjYyNjdFKzEzJwotZHFpbnR4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzEwJyAgLT4gJy01LjYyNjdFKzE0JwotZHFpbnR4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzExJyAgLT4gJy01LjYyNjdFKzE1JwotZHFpbnR4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEyJyAgLT4gJy01LjYyNjdFKzE2JwotZHFpbnR4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzEzJyAgLT4gJy01LjYyNjdFKzE3JwotZHFpbnR4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicKLWRxaW50eDA5NCB0b2ludGVncmFseCAnLTEuMjNFKzYxNDQnIC0+ICNjN2ZmZDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCBDbGFtcGVkCi0KLS0tIHN1Ym5vcm1hbCBpbnB1dHMKLWRxaW50eDEwMCB0b2ludGVncmFseCAgICAgICAgMUUtMjk5IC0+IDAgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MTAxIHRvaW50ZWdyYWx4ICAgICAgMC4xRS0yOTkgLT4gMCAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDEwMyB0b2ludGVncmFseCAgICAgICAgMEUtMjk5IC0+IDAKLQotLS0gc3BlY2lhbHMgYW5kIHplcm9zCi1kcWludHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5Ci1kcWludHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5Ci1kcWludHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTgotZHFpbnR4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcWludHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKLWRxaW50eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMAotZHFpbnR4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwCi1kcWludHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKLWRxaW50eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMAotZHFpbnR4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwCi1kcWludHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKLWRxaW50eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMAotZHFpbnR4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwCi1kcWludHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKLWRxaW50eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQotZHFpbnR4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyCi1kcWludHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKLWRxaW50eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNAotZHFpbnR4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1Ci1kcWludHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKLWRxaW50eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMAotZHFpbnR4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wCi1kcWludHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKLWRxaW50eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMAotZHFpbnR4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wCi1kcWludHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKLWRxaW50eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMAotZHFpbnR4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxCi1kcWludHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKLWRxaW50eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMwotZHFpbnR4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0Ci1kcWludHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRxaW50eDE1MiB0b2ludGVncmFseCAgIE5hTjgwOCAgICAtPiAgTmFOODA4Ci1kcWludHgxNTMgdG9pbnRlZ3JhbHggIHNOYU4wODAgICAgLT4gIE5hTjgwICBJbnZhbGlkX29wZXJhdGlvbgotZHFpbnR4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKLWRxaW50eDE1NSB0b2ludGVncmFseCAtc05hTjA4MCAgICAtPiAtTmFOODAgIEludmFsaWRfb3BlcmF0aW9uCi1kcWludHgxNTYgdG9pbnRlZ3JhbHggIC1OYU4gICAgICAgLT4gLU5hTgotZHFpbnR4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZXhhbXBsZXMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1kcWludHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMDEgdG9pbnRlZ3JhbHggICAxMDAgICAgICAtPiAxMDAKLWRxaW50eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICBSb3VuZGVkCi1kcWludHgyMDMgdG9pbnRlZ3JhbHggICAxMDEuNSAgICAtPiAxMDIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKLWRxaW50eDIwNiB0b2ludGVncmFseCAgNy44OUUrNzcgIC0+IDcuODlFKzc3Ci1kcWludHgyMDcgdG9pbnRlZ3JhbHggICAtSW5mICAgICAtPiAtSW5maW5pdHkKLQotCi0tLSBhbGwgcm91bmRpbmcgbW9kZXMKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLWRxaW50eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMTEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMTQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLQotZHFpbnR4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDIyMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDIyNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0KLWRxaW50eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMzEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyMzQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIHVwCi0KLWRxaW50eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNDEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNDQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGRvd24KLQotZHFpbnR4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI1MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI1NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgY2VpbGluZwotCi1kcWludHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjYxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjY0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBmbG9vcgotCi1kcWludHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4MjcxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkCi1kcWludHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZAotZHFpbnR4Mjc0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQKLWRxaW50eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCi1kcWludHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2Ci1kcWludHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3Ci1kcWludHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4Ci1kcWludHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5Ci1kcWludHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2Ci1kcWludHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3Ci1kcWludHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4Ci1kcWludHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5Ci1kcWludHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0Ci1kcWludHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1Ci1kcWludHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2Ci1kcWludHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3Ci0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxVG9JbnRlZ3JhbC5kZWNUZXN0IC0tIHJvdW5kIFF1YWQgdG8gaW50ZWdyYWwgdmFsdWUgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDAxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwNCistLSB2YWx1ZS1leGFjdCcgb3BlcmF0aW9ucyAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuDQorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcg0KKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkIGV4dGVuc2l2ZWx5DQorLS0gZWxzZXdoZXJlOyB0aGUgdGVzdHMgaGVyZSBhcmUgZm9yIGludGVncml0eSwgcm91bmRpbmcgbW9kZSwgZXRjLg0KKy0tIEFsc28sIGl0IGlzIGFzc3VtZWQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIHVzZSB0aGVzZSB0ZXN0cyBmb3IgYm90aA0KKy0tIFRvSW50ZWdyYWxFeGFjdCAod2hpY2ggZG9lcyBzZXQgSW5leGFjdCkgYW5kIHRoZSBmaXhlZC1uYW1lDQorLS0gZnVuY3Rpb25zICh3aGljaCBkbyBub3Qgc2V0IEluZXhhY3QpLg0KKw0KKy0tIE5vdGUgdGhhdCBkZWNOdW1iZXIgaW1wbGVtZW50cyBhbiBlYXJsaWVyIGRlZmluaXRpb24gb2YgdG9JbnRlZ3JhbA0KKy0tIHdoaWNoIG5ldmVyIHNldHMgSW5leGFjdDsgdGhlIGRlY1Rlc3Qgb3BlcmF0b3IgZm9yIHRoYXQgaXMgY2FsbGVkDQorLS0gJ3RvaW50ZWdyYWwnIGluc3RlYWQgb2YgJ3RvaW50ZWdyYWx4Jy4NCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZHFpbnR4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDANCitkcWludHgwMDIgdG9pbnRlZ3JhbHggICAgICAwLjAgICAtPiAgMA0KK2RxaW50eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMDQgdG9pbnRlZ3JhbHggICAgICAwLjIgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMDcgdG9pbnRlZ3JhbHggICAgICAwLjUgICAtPiAgMCAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMTAgdG9pbnRlZ3JhbHggICAgICAwLjggICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxDQorZHFpbnR4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgIFJvdW5kZWQNCitkcWludHgwMTQgdG9pbnRlZ3JhbHggICAgICAxLjEgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDE1IHRvaW50ZWdyYWx4ICAgICAgMS4yICAgLT4gIDEgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMTcgdG9pbnRlZ3JhbHggICAgICAxLjQgICAtPiAgMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDE4IHRvaW50ZWdyYWx4ICAgICAgMS41ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMjAgdG9pbnRlZ3JhbHggICAgICAxLjcgICAtPiAgMiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDIxIHRvaW50ZWdyYWx4ICAgICAgMS44ICAgLT4gIDIgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyICBJbmV4YWN0IFJvdW5kZWQNCistLSBuZWdhdGl2ZXMNCitkcWludHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMA0KK2RxaW50eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wDQorZHFpbnR4MDMzIHRvaW50ZWdyYWx4ICAgICAtMC4xICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMzUgdG9pbnRlZ3JhbHggICAgIC0wLjMgICAtPiAtMCAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDM2IHRvaW50ZWdyYWx4ICAgICAtMC40ICAgLT4gLTAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0wICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwMzggdG9pbnRlZ3JhbHggICAgIC0wLjYgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDM5IHRvaW50ZWdyYWx4ICAgICAtMC43ICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwNDEgdG9pbnRlZ3JhbHggICAgIC0wLjkgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDQyIHRvaW50ZWdyYWx4ICAgICAtMSAgICAgLT4gLTENCitkcWludHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSAgUm91bmRlZA0KK2RxaW50eDA0NCB0b2ludGVncmFseCAgICAgLTEuMSAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA0NyB0b2ludGVncmFseCAgICAgLTEuNCAgIC0+IC0xICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA1MCB0b2ludGVncmFseCAgICAgLTEuNyAgIC0+IC0yICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgIEluZXhhY3QgUm91bmRlZA0KKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQ0KK2RxaW50eDA1MyB0b2ludGVncmFseCAgICAxMEUrNjAgIC0+IDEuMEUrNjENCitkcWludHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzYwICAtPiAtMS4wRSs2MQ0KKw0KKy0tIG51bWJlcnMgYXJvdW5kIHByZWNpc2lvbg0KK2RxaW50eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTE3JyAgIC0+ICcwJyAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA2MSB0b2ludGVncmFseCAnNTYyNjdFLTUnICAgIC0+ICcxJyAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA2NSB0b2ludGVncmFseCAnNTYyNjdFLTAnICAgIC0+ICc1NjI2NycNCitkcWludHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnDQorZHFpbnR4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScNCitkcWludHgwNjggdG9pbnRlZ3JhbHggJzU2MjY3RSs5JyAgICAtPiAnNS42MjY3RSsxMycNCitkcWludHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMCcgICAtPiAnNS42MjY3RSsxNCcNCitkcWludHgwNzAgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMScgICAtPiAnNS42MjY3RSsxNScNCitkcWludHgwNzEgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMicgICAtPiAnNS42MjY3RSsxNicNCitkcWludHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSsxMycgICAtPiAnNS42MjY3RSsxNycNCitkcWludHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnDQorZHFpbnR4MDc0IHRvaW50ZWdyYWx4ICcxLjIzRSs2MTQ0JyAgLT4gIzQ3ZmZkMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIENsYW1wZWQNCisNCitkcWludHgwODAgdG9pbnRlZ3JhbHggJy01NjI2N0UtMTAnICAtPiAnLTAnICAgICAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDgxIHRvaW50ZWdyYWx4ICctNTYyNjdFLTUnICAgLT4gJy0xJyAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgwODMgdG9pbnRlZ3JhbHggJy01NjI2N0UtMScgICAtPiAnLTU2MjcnICAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MDg1IHRvaW50ZWdyYWx4ICctNTYyNjdFLTAnICAgLT4gJy01NjI2NycNCitkcWludHgwODYgdG9pbnRlZ3JhbHggJy01NjI2N0UrMCcgICAtPiAnLTU2MjY3Jw0KK2RxaW50eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1Jw0KK2RxaW50eDA4OCB0b2ludGVncmFseCAnLTU2MjY3RSs5JyAgIC0+ICctNS42MjY3RSsxMycNCitkcWludHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTAnICAtPiAnLTUuNjI2N0UrMTQnDQorZHFpbnR4MDkwIHRvaW50ZWdyYWx4ICctNTYyNjdFKzExJyAgLT4gJy01LjYyNjdFKzE1Jw0KK2RxaW50eDA5MSB0b2ludGVncmFseCAnLTU2MjY3RSsxMicgIC0+ICctNS42MjY3RSsxNicNCitkcWludHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrMTMnICAtPiAnLTUuNjI2N0UrMTcnDQorZHFpbnR4MDkzIHRvaW50ZWdyYWx4ICctMS4yM0UrOTYnICAgLT4gJy0xLjIzRSs5NicNCitkcWludHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSs2MTQ0JyAtPiAjYzdmZmQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgQ2xhbXBlZA0KKw0KKy0tIHN1Ym5vcm1hbCBpbnB1dHMNCitkcWludHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgxMDEgdG9pbnRlZ3JhbHggICAgICAwLjFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTI5OSAtPiAwICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTI5OSAtPiAwDQorDQorLS0gc3BlY2lhbHMgYW5kIHplcm9zDQorZHFpbnR4MTIwIHRvaW50ZWdyYWx4ICdJbmYnICAgICAgIC0+ICBJbmZpbml0eQ0KK2RxaW50eDEyMSB0b2ludGVncmFseCAnLUluZicgICAgICAtPiAtSW5maW5pdHkNCitkcWludHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTg0KK2RxaW50eDEyMyB0b2ludGVncmFseCAgc05hTiAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW50eDEyNCB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMA0KK2RxaW50eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMA0KK2RxaW50eDEyNiB0b2ludGVncmFseCAgICAgMC4wMDAgICAtPiAgMA0KK2RxaW50eDEyNyB0b2ludGVncmFseCAgICAgMC4wMCAgICAtPiAgMA0KK2RxaW50eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMA0KK2RxaW50eDEyOSB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMA0KK2RxaW50eDEzMCB0b2ludGVncmFseCAgICAgMEUtMyAgICAtPiAgMA0KK2RxaW50eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMA0KK2RxaW50eDEzMiB0b2ludGVncmFseCAgICAgMEUtMSAgICAtPiAgMA0KK2RxaW50eDEzMyB0b2ludGVncmFseCAgICAgMEUtMCAgICAtPiAgMA0KK2RxaW50eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQ0KK2RxaW50eDEzNSB0b2ludGVncmFseCAgICAgMEUrMiAgICAtPiAgMEUrMg0KK2RxaW50eDEzNiB0b2ludGVncmFseCAgICAgMEUrMyAgICAtPiAgMEUrMw0KK2RxaW50eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNA0KK2RxaW50eDEzOCB0b2ludGVncmFseCAgICAgMEUrNSAgICAtPiAgMEUrNQ0KK2RxaW50eDEzOSB0b2ludGVncmFseCAgICAtMC4wMDAgICAtPiAtMA0KK2RxaW50eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMA0KK2RxaW50eDE0MSB0b2ludGVncmFseCAgICAtMC4wICAgICAtPiAtMA0KK2RxaW50eDE0MiB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMA0KK2RxaW50eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMA0KK2RxaW50eDE0NCB0b2ludGVncmFseCAgICAtMEUtMiAgICAtPiAtMA0KK2RxaW50eDE0NSB0b2ludGVncmFseCAgICAtMEUtMSAgICAtPiAtMA0KK2RxaW50eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMA0KK2RxaW50eDE0NyB0b2ludGVncmFseCAgICAtMEUrMSAgICAtPiAtMEUrMQ0KK2RxaW50eDE0OCB0b2ludGVncmFseCAgICAtMEUrMiAgICAtPiAtMEUrMg0KK2RxaW50eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMw0KK2RxaW50eDE1MCB0b2ludGVncmFseCAgICAtMEUrNCAgICAtPiAtMEUrNA0KK2RxaW50eDE1MSB0b2ludGVncmFseCAgICAtMEUrNSAgICAtPiAtMEUrNQ0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitkcWludHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOA0KK2RxaW50eDE1MyB0b2ludGVncmFseCAgc05hTjA4MCAgICAtPiAgTmFOODAgIEludmFsaWRfb3BlcmF0aW9uDQorZHFpbnR4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgNCitkcWludHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxaW50eDE1NiB0b2ludGVncmFseCAgLU5hTiAgICAgICAtPiAtTmFODQorZHFpbnR4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBleGFtcGxlcw0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorZHFpbnR4MjAwIHRvaW50ZWdyYWx4ICAgICAyLjEgICAgLT4gMiAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMA0KK2RxaW50eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICBSb3VuZGVkDQorZHFpbnR4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYNCitkcWludHgyMDYgdG9pbnRlZ3JhbHggIDcuODlFKzc3ICAtPiA3Ljg5RSs3Nw0KK2RxaW50eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KKw0KKw0KKy0tIGFsbCByb3VuZGluZyBtb2Rlcw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCitkcWludHgyMTAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjEyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyMTMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjE1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgaGFsZl91cA0KKw0KK2RxaW50eDIyMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyMjIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIyMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyMjUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCisNCitkcWludHgyMzAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTUgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjMyIHRvaW50ZWdyYWx4ICAgICA1Ny41ICAgLT4gIDU3ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyMzMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTUgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjM1IHRvaW50ZWdyYWx4ICAgIC01Ny41ICAgLT4gLTU3ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgdXANCisNCitkcWludHgyNDAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjQyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNDMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjQ1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU4ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgZG93bg0KKw0KK2RxaW50eDI1MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNTIgdG9pbnRlZ3JhbHggICAgIDU3LjcgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI1MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NSAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNTUgdG9pbnRlZ3JhbHggICAgLTU3LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgICBjZWlsaW5nDQorDQorZHFpbnR4MjYwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI2MiB0b2ludGVncmFseCAgICAgNTcuMyAgIC0+ICA1OCAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjYzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI2NSB0b2ludGVncmFseCAgICAtNTcuMyAgIC0+IC01NyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGZsb29yDQorDQorZHFpbnR4MjcwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI3MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgSW5leGFjdCBSb3VuZGVkDQorZHFpbnR4MjczIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU2ICBJbmV4YWN0IFJvdW5kZWQNCitkcWludHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgIEluZXhhY3QgUm91bmRlZA0KK2RxaW50eDI3NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01OCAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMNCitkcWludHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2DQorZHFpbnR4MzAxIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ3ICAtPiAtMjE0NzQ4MzY0Nw0KK2RxaW50eDMwMiB0b2ludGVncmFseCAtMjE0NzQ4MzY0OCAgLT4gLTIxNDc0ODM2NDgNCitkcWludHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5DQorZHFpbnR4MzA0IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ2ICAtPiAgMjE0NzQ4MzY0Ng0KK2RxaW50eDMwNSB0b2ludGVncmFseCAgMjE0NzQ4MzY0NyAgLT4gIDIxNDc0ODM2NDcNCitkcWludHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4DQorZHFpbnR4MzA3IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ5ICAtPiAgMjE0NzQ4MzY0OQ0KK2RxaW50eDMwOCB0b2ludGVncmFseCAgNDI5NDk2NzI5NCAgLT4gIDQyOTQ5NjcyOTQNCitkcWludHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1DQorZHFpbnR4MzEwIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk2ICAtPiAgNDI5NDk2NzI5Ng0KK2RxaW50eDMxMSB0b2ludGVncmFseCAgNDI5NDk2NzI5NyAgLT4gIDQyOTQ5NjcyOTcNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHFYb3IuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CmluZGV4IDIyMTZlOWUuLmZiYjMyZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kcVhvci5kZWNUZXN0CkBAIC0xLDQxMCArMSw0MTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHFYb3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgZm9yIGRlY1F1YWRzICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0Mwotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQotZHF4b3IwMDEgeG9yICAgICAgICAgICAgIDAgICAgMCAtPiAgICAwCi1kcXhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKLWRxeG9yMDAzIHhvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQotZHF4b3IwMDQgeG9yICAgICAgICAgICAgIDEgICAgMSAtPiAgICAwCi1kcXhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKLS0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xCi1kcXhvcjAwNiB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1kcXhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHF4b3IwMDggeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yMDA5IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKLWRxeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKLWRxeG9yMDExIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjAxMiB4b3IgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotZHF4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLS0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Ci1kcXhvcjYwMSB4b3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwMiB4b3IgMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwMyB4b3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwNCB4b3IgMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwNSB4b3IgMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwNiB4b3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwNyB4b3IgMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwOCB4b3IgMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYwOSB4b3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxMCB4b3IgMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxMSB4b3IgMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxMiB4b3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxMyB4b3IgMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxNCB4b3IgMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxNSB4b3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxNiB4b3IgMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxNyB4b3IgMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxOCB4b3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYxOSB4b3IgMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwCi1kcXhvcjYyMCB4b3IgMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwCi1kcXhvcjYyMSB4b3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwCi1kcXhvcjYyMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwCi1kcXhvcjYyMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwCi1kcXhvcjYyNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwCi1kcXhvcjYyNSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwCi1kcXhvcjYyNiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwCi1kcXhvcjYyNyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwCi1kcXhvcjYyOCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwCi1kcXhvcjYyOSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwCi1kcXhvcjYzMCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwCi1kcXhvcjYzMSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwCi1kcXhvcjYzMiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwCi1kcXhvcjYzMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCi1kcXhvcjYzNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCi0KLWRxeG9yNjQxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjQ5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjUwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjUxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjUyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjUzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjU5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjYwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAKLWRxeG9yNjYxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAKLWRxeG9yNjYyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAKLWRxeG9yNjYzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAKLWRxeG9yNjY0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAKLWRxeG9yNjY1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAKLWRxeG9yNjY2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAKLWRxeG9yNjY3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAKLWRxeG9yNjY4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAKLWRxeG9yNjY5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAKLWRxeG9yNjcwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAKLWRxeG9yNjcxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAKLWRxeG9yNjcyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAKLWRxeG9yNjczIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAKLWRxeG9yNjc0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLWRxeG9yNjc1IHhvciAwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLWRxeG9yNjc2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKLQotCi1kcXhvcjAyMSB4b3IgMTExMTExMTExMDAwMDAwMCAgICAgMTExMTExMTExMDAwMDAwMCAgLT4gIDAKLWRxeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMAotZHF4b3IwMjMgeG9yICAgMTExMTExMTAwMDAwMDAgICAgICAgMTExMTExMTAwMDAwMDAgIC0+ICAwCi1kcXhvcjAyNCB4b3IgICAgMTExMTExMDAwMDAwMCAgICAgICAgMTExMTExMDAwMDAwMCAgLT4gIDAKLWRxeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMAotZHF4b3IwMjYgeG9yICAgICAgMTExMTAwMDAwMDAgICAgICAgICAgMTExMTAwMDAwMDAgIC0+ICAwCi1kcXhvcjAyNyB4b3IgICAgICAgMTExMDAwMDAwMCAgICAgICAgICAgMTExMDAwMDAwMCAgLT4gIDAKLWRxeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMAotZHF4b3IwMjkgeG9yICAgICAgICAgMTAwMDAwMDAgICAgICAgICAgICAgMTAwMDAwMDAgIC0+ICAwCi1kcXhvcjAzMCB4b3IgICAgICAgICAgMTAwMDAwMCAgICAgICAgICAgICAgMTAwMDAwMCAgLT4gIDAKLWRxeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMAotZHF4b3IwMzIgeG9yICAgICAgICAgICAgMTAwMDAgICAgICAgICAgICAgICAgMTAwMDAgIC0+ICAwCi1kcXhvcjAzMyB4b3IgICAgICAgICAgICAgMTAwMCAgICAgICAgICAgICAgICAgMTAwMCAgLT4gIDAKLWRxeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMAotZHF4b3IwMzUgeG9yICAgICAgICAgICAgICAgMTAgICAgICAgICAgICAgICAgICAgMTAgIC0+ICAwCi1kcXhvcjAzNiB4b3IgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgMSAgLT4gIDAKLQotZHF4b3IwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTExMDAwMDAwMDAwCi1kcXhvcjA0MSB4b3IgIDExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMDAwMDAwMDAKLWRxeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMAotZHF4b3IwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCi1kcXhvcjA0NCB4b3IgICAgMTExMTExICAgICAxMDAwMDAxMDAgIC0+ICAxMDAxMTEwMTEKLWRxeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQotZHF4b3IwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCi1kcXhvcjA0NyB4b3IgICAgICAgMTExICAgICAxMDAxMDAwMDAgIC0+ICAxMDAxMDAxMTEKLWRxeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQotZHF4b3IwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCi0KLWRxeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMAotZHF4b3IwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKLWRxeG9yMDUyIHhvciAgIDExMTExMTExICAxICAtPiAgMTExMTExMTAKLWRxeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMAotZHF4b3IwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKLWRxeG9yMDU1IHhvciAgICAgIDExMTExICAxICAtPiAgMTExMTAKLWRxeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMAotZHF4b3IwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKLWRxeG9yMDU4IHhvciAgICAgICAgIDExICAxICAtPiAgMTAKLWRxeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMAotCi1kcXhvcjA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMTEKLWRxeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCi1kcXhvcjA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCi1kcXhvcjA2MyB4b3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKLWRxeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCi1kcXhvcjA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCi1kcXhvcjA2NiB4b3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKLWRxeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExCi1kcXhvcjA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCi1kcXhvcjA2OSB4b3IgICAgICAgICAgMSAgMCAgLT4gIDEKLQotZHF4b3IwNzAgeG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEwCi1kcXhvcjA3MSB4b3IgMSAgIDExMTExMTExMSAgLT4gIDExMTExMTExMAotZHF4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMAotZHF4b3IwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCi1kcXhvcjA3NCB4b3IgMSAgICAgIDExMTExMSAgLT4gIDExMTExMAotZHF4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMAotZHF4b3IwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCi1kcXhvcjA3NyB4b3IgMSAgICAgICAgIDExMSAgLT4gIDExMAotZHF4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMAotZHF4b3IwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCi0KLWRxeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQotZHF4b3IwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKLWRxeG9yMDgyIHhvciAwICAgIDExMTExMTExICAtPiAgMTExMTExMTEKLWRxeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQotZHF4b3IwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKLWRxeG9yMDg1IHhvciAwICAgICAgIDExMTExICAtPiAgMTExMTEKLWRxeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQotZHF4b3IwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKLWRxeG9yMDg4IHhvciAwICAgICAgICAgIDExICAtPiAgMTEKLWRxeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQotCi1kcXhvcjA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKLWRxeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMAotZHF4b3IwOTIgeG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgICAxMDEwMDAwCi1kcXhvcjA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKLWRxeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMAotZHF4b3IwOTUgeG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgICAgIDExMDAwCi1kcXhvcjA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKLWRxeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMAotZHF4b3IwOTggeG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgICAgIDEwMDAxCi0KLWRxeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAotZHF4b3IxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwCi1kcXhvcjEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDAKLWRxeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAotZHF4b3IxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCi1kcXhvcjEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDAKLWRxeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAotZHF4b3IxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwCi1kcXhvcjEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDEKLQotLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zCi1kcXhvcjIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyMjIgeG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyMjUgeG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyMjggeG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyMzEgeG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLWRxeG9yMjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRAotZHF4b3IyNTAgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTEgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTIgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTMgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTQgeG9yICAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTUgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTYgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTcgeG9yICA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTggeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjAgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjEgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjMgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjQgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNjUgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QtMQotZHF4b3IyNzAgeG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzEgeG9yICAwNzAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzIgeG9yICAwODAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzMgeG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzQgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMTAwMDAwIDAyMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIDA3MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyNzcgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMTAwIDA5MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBMU0QKLWRxeG9yMjgwIHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjgxIHhvciAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwNyAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjgyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDAwMDAwMDAwOCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjgzIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjg0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjg1IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAwMDEwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjg2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjg3IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1kcXhvcjI4OCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI4OSB4b3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwNzAwMDAwMDEgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5MCB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwODAwMDAwMTAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5MSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5MiB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDEwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAyMDEwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5MyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA3MDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA5MDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBzaWducwotZHF4b3IyOTYgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMjk3IHhvciAtMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAgMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjI5OCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgLTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IyOTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMDAxMDAxMDAxMDAxMDAxMDAwMDEwMDAwMTAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LWxpa2UKLWRxeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtMjgyMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzM0IHhvciAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjMzNSB4b3IgIDYgICAtMUUtOTAwICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNDQgeG9yICAxRS05MDggICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzQ1IHhvciAgLTFFLTkwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OTEgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycwotZHF4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzYyIHhvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzY1IHhvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzcyIHhvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yMzc1IHhvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCi1kcXhvcjc4MCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yNzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjc4MyB4b3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yNzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjc4NiB4b3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yNzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjc4OSB4b3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yNzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjc5MiB4b3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yNzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgwMSB4b3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgwNCB4b3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgwNyB4b3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgxMCB4b3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgxMyB4b3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLWRxeG9yODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1kcXhvcjg0MSB4b3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0NCB4b3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0NyB4b3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1MCB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1MyB4b3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1NiB4b3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg1OSB4b3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWRxeG9yODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWRxeG9yODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1kcXhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZHF4b3I4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGRxWG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SIGZvciBkZWNRdWFkcyAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK2NsYW1wOiAgICAgICAxDQorcHJlY2lzaW9uOiAgIDM0DQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkNCitkcXhvcjAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCitkcXhvcjAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDENCitkcXhvcjAwMyB4b3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDENCitkcXhvcjAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDANCitkcXhvcjAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTANCistLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQ0KK2RxeG9yMDA2IHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCitkcXhvcjAwNyB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yMDA4IHhvciAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3IwMDkgeG9yIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK2RxeG9yMDEwIHhvciAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCitkcXhvcjAxMSB4b3IgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yMDEyIHhvciAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3IwMTMgeG9yIDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KKy0tICAgICAgICAgICAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0DQorZHF4b3I2MDEgeG9yIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjAyIHhvciAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYwMyB4b3IgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MDQgeG9yIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjA1IHhvciAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYwNiB4b3IgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MDcgeG9yIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjA4IHhvciAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYwOSB4b3IgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MTAgeG9yIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjExIHhvciAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYxMiB4b3IgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MTMgeG9yIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjE0IHhvciAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYxNSB4b3IgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MTYgeG9yIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjE3IHhvciAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjYxOCB4b3IgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2MTkgeG9yIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjIwIHhvciAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDANCitkcXhvcjYyMSB4b3IgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwDQorZHF4b3I2MjIgeG9yIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMA0KK2RxeG9yNjIzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDANCitkcXhvcjYyNCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwDQorZHF4b3I2MjUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMA0KK2RxeG9yNjI2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDANCitkcXhvcjYyNyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwDQorZHF4b3I2MjggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMA0KK2RxeG9yNjI5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDANCitkcXhvcjYzMCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwDQorZHF4b3I2MzEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMA0KK2RxeG9yNjMyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDANCitkcXhvcjYzMyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwDQorZHF4b3I2MzQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KKw0KK2RxeG9yNjQxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+IDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY0MiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NDMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjQ0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY0NSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NDYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjQ3IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY0OCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NDkgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjUwIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY1MSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NTIgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjUzIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY1NCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NTUgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjU2IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY1NyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NTggeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjU5IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDAwMDANCitkcXhvcjY2MCB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwMDAwDQorZHF4b3I2NjEgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMDAwMA0KK2RxeG9yNjYyIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDAwMDANCitkcXhvcjY2MyB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwMDAwDQorZHF4b3I2NjQgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMDAwMA0KK2RxeG9yNjY1IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDAwMDANCitkcXhvcjY2NiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMDAwDQorZHF4b3I2NjcgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMDAwMA0KK2RxeG9yNjY4IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTExMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMDANCitkcXhvcjY2OSB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExMTExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwDQorZHF4b3I2NzAgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMTExMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwMA0KK2RxeG9yNjcxIHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAxMTEgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDANCitkcXhvcjY3MiB4b3IgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMDExICAtPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwDQorZHF4b3I2NzMgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwMSAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMA0KK2RxeG9yNjc0IHhvciAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTAgIC0+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDENCitkcXhvcjY3NSB4b3IgMDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwICAtPiAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxDQorZHF4b3I2NzYgeG9yIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMCAgLT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQ0KKw0KKw0KK2RxeG9yMDIxIHhvciAxMTExMTExMTEwMDAwMDAwICAgICAxMTExMTExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDIyIHhvciAgMTExMTExMTEwMDAwMDAwICAgICAgMTExMTExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDIzIHhvciAgIDExMTExMTEwMDAwMDAwICAgICAgIDExMTExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI0IHhvciAgICAxMTExMTEwMDAwMDAwICAgICAgICAxMTExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI1IHhvciAgICAgMTExMTEwMDAwMDAwICAgICAgICAgMTExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI2IHhvciAgICAgIDExMTEwMDAwMDAwICAgICAgICAgIDExMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI3IHhvciAgICAgICAxMTEwMDAwMDAwICAgICAgICAgICAxMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI4IHhvciAgICAgICAgMTEwMDAwMDAwICAgICAgICAgICAgMTEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDI5IHhvciAgICAgICAgIDEwMDAwMDAwICAgICAgICAgICAgIDEwMDAwMDAwICAtPiAgMA0KK2RxeG9yMDMwIHhvciAgICAgICAgICAxMDAwMDAwICAgICAgICAgICAgICAxMDAwMDAwICAtPiAgMA0KK2RxeG9yMDMxIHhvciAgICAgICAgICAgMTAwMDAwICAgICAgICAgICAgICAgMTAwMDAwICAtPiAgMA0KK2RxeG9yMDMyIHhvciAgICAgICAgICAgIDEwMDAwICAgICAgICAgICAgICAgIDEwMDAwICAtPiAgMA0KK2RxeG9yMDMzIHhvciAgICAgICAgICAgICAxMDAwICAgICAgICAgICAgICAgICAxMDAwICAtPiAgMA0KK2RxeG9yMDM0IHhvciAgICAgICAgICAgICAgMTAwICAgICAgICAgICAgICAgICAgMTAwICAtPiAgMA0KK2RxeG9yMDM1IHhvciAgICAgICAgICAgICAgIDEwICAgICAgICAgICAgICAgICAgIDEwICAtPiAgMA0KK2RxeG9yMDM2IHhvciAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgICAxICAtPiAgMA0KKw0KK2RxeG9yMDQwIHhvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTAwMDAwMDAwMA0KK2RxeG9yMDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTEwMDAwMDAwMA0KK2RxeG9yMDQyIHhvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDEwMDAwMDAwMA0KK2RxeG9yMDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQ0KK2RxeG9yMDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQ0KK2RxeG9yMDQ1IHhvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMDExMQ0KK2RxeG9yMDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KK2RxeG9yMDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQ0KK2RxeG9yMDQ4IHhvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQ0KK2RxeG9yMDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KKw0KK2RxeG9yMDUwIHhvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExMA0KK2RxeG9yMDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQorZHF4b3IwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMA0KK2RxeG9yMDUzIHhvciAgICAxMTExMTExICAxICAtPiAgMTExMTExMA0KK2RxeG9yMDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwDQorZHF4b3IwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMA0KK2RxeG9yMDU2IHhvciAgICAgICAxMTExICAxICAtPiAgMTExMA0KK2RxeG9yMDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwDQorZHF4b3IwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMA0KK2RxeG9yMDU5IHhvciAgICAgICAgICAxICAxICAtPiAgMA0KKw0KK2RxeG9yMDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExMQ0KK2RxeG9yMDYxIHhvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQorZHF4b3IwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KK2RxeG9yMDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQ0KK2RxeG9yMDY0IHhvciAgICAgMTExMTExICAwICAtPiAgMTExMTExDQorZHF4b3IwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KK2RxeG9yMDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQ0KK2RxeG9yMDY3IHhvciAgICAgICAgMTExICAwICAtPiAgMTExDQorZHF4b3IwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KK2RxeG9yMDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQ0KKw0KK2RxeG9yMDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTExMA0KK2RxeG9yMDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwDQorZHF4b3IwNzIgeG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMA0KK2RxeG9yMDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMA0KK2RxeG9yMDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwDQorZHF4b3IwNzUgeG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMA0KK2RxeG9yMDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMA0KK2RxeG9yMDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwDQorZHF4b3IwNzggeG9yIDEgICAgICAgICAgMTEgIC0+ICAxMA0KK2RxeG9yMDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMA0KKw0KK2RxeG9yMDgwIHhvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExMQ0KK2RxeG9yMDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQorZHF4b3IwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KK2RxeG9yMDgzIHhvciAwICAgICAxMTExMTExICAtPiAgMTExMTExMQ0KK2RxeG9yMDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQorZHF4b3IwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KK2RxeG9yMDg2IHhvciAwICAgICAgICAxMTExICAtPiAgMTExMQ0KK2RxeG9yMDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExDQorZHF4b3IwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQ0KK2RxeG9yMDg5IHhvciAwICAgICAgICAgICAxICAtPiAgMQ0KKw0KK2RxeG9yMDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMA0KK2RxeG9yMDkxIHhvciAxMDExMTExMTEgIDExMTEwMTExMSAgLT4gICAxMDAxMDAwMA0KK2RxeG9yMDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMA0KK2RxeG9yMDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMA0KK2RxeG9yMDk0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KK2RxeG9yMDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMA0KK2RxeG9yMDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMA0KK2RxeG9yMDk3IHhvciAxMTExMTExMDEgIDExMTEwMTExMSAgLT4gICAgICAxMDAxMA0KK2RxeG9yMDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQ0KKw0KK2RxeG9yMTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMA0KK2RxeG9yMTAxIHhvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gICAxMDAxMDAwMA0KK2RxeG9yMTAyIHhvciAxMTExMDExMTEgIDExMDExMTExMSAgLT4gICAgMTAxMDAwMA0KK2RxeG9yMTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMA0KK2RxeG9yMTA0IHhvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gICAgICAgICAgMA0KK2RxeG9yMTA1IHhvciAxMTExMDExMTEgIDExMTExMDExMSAgLT4gICAgICAxMTAwMA0KK2RxeG9yMTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMA0KK2RxeG9yMTA3IHhvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gICAgICAxMDAxMA0KK2RxeG9yMTA4IHhvciAxMTExMDExMTEgIDExMTExMTExMCAgLT4gICAgICAxMDAwMQ0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2RxeG9yMjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjIxIHhvciAzMzMzMzMzMzMgIDMzMzMzMzMzMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI0IHhvciA5OTk5OTk5OTkgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI3IHhvciA2NjY2NjY2NjYgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjMwIHhvciA5OTk5OTk5OTkgIDQ0NDQ0NDQ0NCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGEgZmV3IHJhbmRvbXMNCitkcXhvcjI0MCB4b3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI0MSB4b3IgIDU2NzM2NzY4OSAgOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI0MyB4b3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI0NCB4b3IgIDgzNTU5MDE0OSAgNTY3NDM1NDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2RxeG9yMjUwIHhvciAgMjAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI1MSB4b3IgIDcwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNTIgeG9yICA4MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjUzIHhvciAgOTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI1NCB4b3IgIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNTUgeG9yICA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjU2IHhvciAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI1NyB4b3IgIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNTggeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDIwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjU5IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA3MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI2MCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgODAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNjEgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDkwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjYyIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAyMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI2MyB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgNzAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNjQgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIDgwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjY1IHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMCA5MDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRC0xDQorZHF4b3IyNzAgeG9yICAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTExMDAwMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjcxIHhvciAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAwMDAwMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI3MiB4b3IgIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNzMgeG9yICAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjc0IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDEwMDAwMCAwMjAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMTAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI3NSB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMTAwMDAgMDcwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyNzYgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAxMDAwIDA4MDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjc3IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDEwMCAwOTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IExTRA0KK2RxeG9yMjgwIHhvciAgMDAxMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI4MSB4b3IgIDAwMDEwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAxMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyODIgeG9yICAwMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDA4IDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjgzIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAxMDAwMDAwMDAwOSAxMDAwMDAwMTExMDAwMTExMDAwMTExMTAwMDAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI4NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMDAgMDAwMTAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyODUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDAwIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDAwMDAwMDcgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjg2IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAxMDAwMDAwMCAwMTAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI4NyB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNaWRkaWUNCitkcXhvcjI4OCB4b3IgIDAwMTAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAwMDAwMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyODkgeG9yICAwMDAxMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDAwMDAxIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjkwIHhvciAgMDAwMDAwMDExMTAwMDExMTAwMDExMTEwMDA4MDAwMDAxMCAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDEwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI5MSB4b3IgIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMTAwOTAwMDAxMDAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyOTIgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAxMDAwMDAxMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMjAxMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjkzIHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDEwMDAxMDAwMCAwMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDcwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI5NCB4b3IgIDEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMTAxMDAwMDAgMDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDA4MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyOTUgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIDAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwOTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNpZ25zDQorZHF4b3IyOTYgeG9yIC0xMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwIC0wMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDEwMDAwMDAwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjI5NyB4b3IgLTEwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDEwMDAwMDAgIDAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMjk4IHhvciAgMTAwMDAwMDExMTAwMDExMTAwMDExMTAwMDAwMTAwMDAwMCAtMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMTAwMDAwMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IyOTkgeG9yICAxMDAwMDAwMTExMDAwMTExMDAwMTExMDAwMDAxMDAwMDAwICAwMDAwMDAxMTEwMDAxMTEwMDAxMTEwMDAwMDExMDAwMTAwIC0+ICAxMDAwMDAxMDAxMDAxMDAxMDAxMDAxMDAwMDEwMDAwMTAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnktbGlrZQ0KK2RxeG9yMzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzMzIgeG9yICAzICAgMUUtOTk5ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjMzMyB4b3IgIDQgICAxLjAwMDAwMDAwRS0yODIxICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzM0IHhvciAgNSAgIDFFLTkwMCAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzMzUgeG9yICA2ICAgLTFFLTkwMCAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjMzNiB4b3IgIDcgICAtMS4wMDAwMDAwMEUtOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzMzggeG9yICA5ICAgLTkuOTk5OTk5OTlFKzk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM0MSB4b3IgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzNDMgeG9yICAxLjAwMDAwMDAwRS05OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM0NCB4b3IgIDFFLTkwOCAgICAgICAgICAgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzQ1IHhvciAgLTFFLTkwNyAgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzNDYgeG9yICAtMS4wMDAwMDAwMEUtOTk5ICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM0NyB4b3IgIC0xRS05OTkgICAgICAgICAgICAgIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzQ4IHhvciAgLTkuOTk5OTk5OTlFKzI5OTEgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQorZHF4b3IzNjEgeG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzNjQgeG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzNzEgeG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3IzNzQgeG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yMzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2RxeG9yNzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I3ODEgeG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yNzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I3ODQgeG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yNzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I3ODcgeG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yNzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I3OTAgeG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yNzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I3OTMgeG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RxeG9yODAwIHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODAzIHhvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODA2IHhvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODA5IHhvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODEyIHhvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODE1IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorZHF4b3I4MjEgeG9yICBOYU4gLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODIzIHhvciAgTmFOIC0xICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MjQgeG9yICBOYU4gLTAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODI2IHhvciAgTmFOICAxICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MjcgeG9yICBOYU4gIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODI5IHhvciAgTmFOICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MzAgeG9yIC1JbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODMyIHhvciAtMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MzMgeG9yIC0wICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODM1IHhvciAgMSAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4MzYgeG9yICAxMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2RxeG9yODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg0MiB4b3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg0NSB4b3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg0OCB4b3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg1MSB4b3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg1NCB4b3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg1NyB4b3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorZHF4b3I4NjEgeG9yICBOYU4xICAgLUluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODYzIHhvciAgTmFOMyAgICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NjQgeG9yICBOYU40ICAgIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODY2IHhvciAtSW5mICAgICBOYU43ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NjcgeG9yIC0xMDAwICAgIE5hTjggICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODY5IHhvciAgSW5mICAgICtOYU4xMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NzEgeG9yICBzTmFOMTEgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODczIHhvciAgc05hTjEzICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NzQgeG9yICBzTmFOMTQgICBOYU4xNyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODc2IHhvciAgTmFOMTYgICBzTmFOMTkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4NzcgeG9yIC1JbmYgICAgK3NOYU4yMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODc5IHhvciAgMTAwMCAgICBzTmFOMjIgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4ODAgeG9yICBJbmYgICAgIHNOYU4yMyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODgyIHhvciAtTmFOMjYgICAgTmFOMjggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZHF4b3I4ODMgeG9yIC1zTmFOMjcgIHNOYU4yOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitkcXhvcjg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2RxeG9yODg1IHhvciAgMTAwMCAgIC1zTmFOMzEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2RzQmFzZS5kZWNUZXN0CmluZGV4IDVlNWU1YTUuLjhhYzQ1ZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0Jhc2UuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNCYXNlLmRlY1Rlc3QKQEAgLTEsMTA2MiArMSwxMDYyIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGRzQmFzZS5kZWNUZXN0IC0tIGJhc2UgZGVjU2luZ2xlIDwtLT4gc3RyaW5nIGNvbnZlcnNpb25zICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcgotLS0gYW5kIGJhY2sgdG8gYSBzdHJpbmcgKGluIFNjaWVudGlmaWMgZm9ybSkKLQotLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcKLS0tIHRvIGNvbmZvcm0gdG8gZW1heCBhbmQgcHJlY2lzaW9uIHNldHRpbmdzICh0aGF0IGlzLCBudW1iZXJzIHdpbGwKLS0tIGNvbmZvcm0gdG8gcnVsZXMgYW5kIGV4cG9uZW50IHdpbGwgYmUgaW4gcGVybWl0dGVkIHJhbmdlKS4gIFRoZQotLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlCi0tLSByZXByZXNlbnRlZCBpbiBhIGRlY1NpbmdsZS4gIFNvbWUgdGVzdGNhc2VzIGdvIHRvIHRoZSBsaW1pdCBvZiB0aGUKLS0tIG5leHQtd2lkZXIgZm9ybWF0LCBhbmQgaGVuY2UgdGhlc2UgdGVzdGNhc2VzIG1heSBhbHNvIGJlIHVzZWQgdG8KLS0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLgotCi1leHRlbmRlZDogICAgMQotY2xhbXA6ICAgICAgIDEKLXByZWNpc2lvbjogICA3Ci1tYXhFeHBvbmVudDogOTYKLW1pbkV4cG9uZW50OiAtOTUKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZHNiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwCi1kc2JhczAwMiB0b1NjaSAgICAgICAxIC0+IDEKLWRzYmFzMDAzIHRvU2NpICAgICAxLjAgLT4gMS4wCi1kc2JhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDAKLWRzYmFzMDA1IHRvU2NpICAgICAgMTAgLT4gMTAKLWRzYmFzMDA2IHRvU2NpICAgIDEwMDAgLT4gMTAwMAotZHNiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wCi1kc2JhczAwOCB0b1NjaSAgICAxMC4xIC0+IDEwLjEKLWRzYmFzMDA5IHRvU2NpICAgIDEwLjQgLT4gMTAuNAotZHNiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41Ci1kc2JhczAxMSB0b1NjaSAgICAxMC42IC0+IDEwLjYKLWRzYmFzMDEyIHRvU2NpICAgIDEwLjkgLT4gMTAuOQotZHNiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wCi1kc2JhczAxNCB0b1NjaSAgMS4yMzQgLT4gMS4yMzQKLWRzYmFzMDE1IHRvU2NpICAwLjEyMyAtPiAwLjEyMwotZHNiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyCi1kc2JhczAxNyB0b1NjaSAgLTAgICAgLT4gLTAKLWRzYmFzMDE4IHRvU2NpICAtMC4wICAtPiAtMC4wCi1kc2JhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDAKLQotZHNiYXMwMjEgdG9TY2kgICAgIC0xIC0+IC0xCi1kc2JhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMAotZHNiYXMwMjMgdG9TY2kgICAtMC4xIC0+IC0wLjEKLWRzYmFzMDI0IHRvU2NpICAgLTkuMSAtPiAtOS4xCi1kc2JhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExCi1kc2JhczAyNiB0b1NjaSAgIC05LjExOSAtPiAtOS4xMTkKLWRzYmFzMDI3IHRvU2NpICAgLTkuOTk5IC0+IC05Ljk5OQotCi1kc2JhczAzMCB0b1NjaSAgJzEyMzQuNTY3JyAgIC0+ICcxMjM0LjU2NycKLWRzYmFzMDMxIHRvU2NpICAnMTIzNC4wMDAnICAgLT4gJzEyMzQuMDAwJwotZHNiYXMwMzIgdG9TY2kgICAnMTIzNDkxMicgICAtPiAnMTIzNDkxMicKLWRzYmFzMDMzIHRvU2NpICAgJzAuMDAwMDEyMzQ1NjcnICAgLT4gJzAuMDAwMDEyMzQ1NjcnCi1kc2JhczAzNCB0b1NjaSAgJzAuMDAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAwMTIzNDU2NycKLWRzYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1NjcnICAgLT4gJzEuMjM0NTY3RS03JwotZHNiYXMwMzYgdG9TY2kgJzAuMDAwMDAwMDEyMzQ1NjcnICAtPiAnMS4yMzQ1NjdFLTgnCi0KLWRzYmFzMDM3IHRvU2NpICcwLjEyMzQ1NjQnICAgLT4gJzAuMTIzNDU2NCcKLWRzYmFzMDM4IHRvU2NpICcwLjEyMzQ1NjUnICAgLT4gJzAuMTIzNDU2NScKLQotLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkKLWRzYnNuMDAxIHRvU2NpIC05Ljk5OTk5OUUrOTYgLT4gLTkuOTk5OTk5RSs5NgotZHNic24wMDIgdG9TY2kgLTFFLTk1IC0+IC0xRS05NQotZHNic24wMDMgdG9TY2kgLTFFLTEwMSAtPiAtMUUtMTAxIFN1Ym5vcm1hbAotZHNic24wMDQgdG9TY2kgLTAgLT4gLTAKLWRzYnNuMDA1IHRvU2NpICswIC0+ICAwCi1kc2JzbjAwNiB0b1NjaSArMUUtMTAxIC0+ICAxRS0xMDEgU3Vibm9ybWFsCi1kc2JzbjAwNyB0b1NjaSArMUUtOTUgLT4gIDFFLTk1Ci1kc2JzbjAwOCB0b1NjaSArOS45OTk5OTlFKzk2IC0+ICA5Ljk5OTk5OUUrOTYKLQotLS0gU3RyaW5nIFttYW55IG1vcmUgZXhhbXBsZXMgYXJlIGltcGxpY2l0bHkgdGVzdGVkIGVsc2V3aGVyZV0KLS0tIHN0cmluZ3Mgd2l0aG91dCBFIGNhbm5vdCBnZW5lcmF0ZSBFIGluIHJlc3VsdAotZHNiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJwotZHNiYXMwNDEgdG9TY2kgIi03NiIgICAgICAgLT4gJy03NicKLWRzYmFzMDQyIHRvU2NpICIxMi43NiIgICAgIC0+ICcxMi43NicKLWRzYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicKLWRzYmFzMDQ0IHRvU2NpICIwMTIuNzYiICAgIC0+ICcxMi43NicKLWRzYmFzMDQ1IHRvU2NpICIrMC4wMDMiICAgIC0+ICcwLjAwMycKLWRzYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycKLWRzYmFzMDQ3IHRvU2NpICIuNSIgICAgICAgIC0+ICcwLjUnCi1kc2JhczA0OCB0b1NjaSAiMDQ0IiAgICAgICAtPiAnNDQnCi1kc2JhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnCi1kc2JhczA1MCB0b1NjaSAiMC4wMDA1IiAgICAgIC0+ICcwLjAwMDUnCi1kc2JhczA1MSB0b1NjaSAiMDAuMDAwMDUiICAgIC0+ICcwLjAwMDA1JwotZHNiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnCi1kc2JhczA1MyB0b1NjaSAiMC4wMDAwMDUwIiAgIC0+ICcwLjAwMDAwNTAnCi1kc2JhczA1NCB0b1NjaSAiMC4wMDAwMDA1IiAgIC0+ICc1RS03JwotZHNiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcKLWRzYmFzMDU2IHRvU2NpICIxMjY3OC41NCIgLT4gJzEyNjc4LjU0JwotZHNiYXMwNTcgdG9TY2kgIjI2NzguNTQzIiAtPiAnMjY3OC41NDMnCi1kc2JhczA1OCB0b1NjaSAiMzQ1Njc4LjUiIC0+ICczNDU2NzguNScKLWRzYmFzMDU5IHRvU2NpICIwNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKLWRzYmFzMDYwIHRvU2NpICI2NzguNTQzMiIgLT4gJzY3OC41NDMyJwotZHNiYXMwNjEgdG9TY2kgIis2NzguNTQzMiIgLT4gJzY3OC41NDMyJwotZHNiYXMwNjIgdG9TY2kgIiswNjc4LjU0MzIiIC0+ICc2NzguNTQzMicKLWRzYmFzMDYzIHRvU2NpICIrMDA2NzguNTQzMiIgLT4gJzY3OC41NDMyJwotZHNiYXMwNjQgdG9TY2kgIi02NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCi1kc2JhczA2NSB0b1NjaSAiLTA2NzguNTQzMiIgIC0+ICctNjc4LjU0MzInCi1kc2JhczA2NiB0b1NjaSAiLTAwNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJwotLS0gZXhhbXBsZXMKLWRzYmFzMDY3IHRvU2NpICI1RS02IiAgICAgICAgLT4gJzAuMDAwMDA1JwotZHNiYXMwNjggdG9TY2kgIjUwRS03IiAgICAgICAtPiAnMC4wMDAwMDUwJwotZHNiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycKLQotLS0gW05vIGV4b3RpY3MgYXMgbm8gVW5pY29kZV0KLQotLS0gcm91bmRlZCB3aXRoIGRvdHMgaW4gYWxsIChpbmNsdWRpbmcgZWRnZSkgcGxhY2VzCi1kc2JhczA3MSB0b1NjaSAgLjEyMzQ1Njc4OTAxMjM0NTYgIC0+IDAuMTIzNDU2OCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NiAgLT4gMS4yMzQ1NjggSW5leGFjdCBSb3VuZGVkCi1kc2JhczA3MyB0b1NjaSAgMTIuMzQ1Njc4OTAxMjM0NTYgIC0+IDEyLjM0NTY4IEluZXhhY3QgUm91bmRlZAotZHNiYXMwNzQgdG9TY2kgIDEyMy40NTY3ODkwMTIzNDU2ICAtPiAxMjMuNDU2OCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gMTIzNC41NjggSW5leGFjdCBSb3VuZGVkCi1kc2JhczA3NiB0b1NjaSAgMTIzNDUuNjc4OTAxMjM0NTYgIC0+IDEyMzQ1LjY4IEluZXhhY3QgUm91bmRlZAotZHNiYXMwNzcgdG9TY2kgIDEyMzQ1Ni43ODkwMTIzNDU2ICAtPiAxMjM0NTYuOCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NiAgLT4gMTIzNDU2OCAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczA3OSB0b1NjaSAgMTIzNDU2NzguOTAxMjM0NTYgIC0+IDEuMjM0NTY4RSs3IEluZXhhY3QgUm91bmRlZAotZHNiYXMwODAgdG9TY2kgIDEyMzQ1Njc4OS4wMTIzNDU2ICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCi1kc2JhczA4MiB0b1NjaSAgMTIzNDU2Nzg5MDEuMjM0NTYgIC0+IDEuMjM0NTY4RSsxMCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDgzIHRvU2NpICAxMjM0NTY3ODkwMTIuMzQ1NiAgLT4gMS4yMzQ1NjhFKzExIEluZXhhY3QgUm91bmRlZAotZHNiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCi1kc2JhczA4NSB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQuNTYgIC0+IDEuMjM0NTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMDg2IHRvU2NpICAxMjM0NTY3ODkwMTIzNDUuNiAgLT4gMS4yMzQ1NjhFKzE0IEluZXhhY3QgUm91bmRlZAotZHNiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCi1kc2JhczA4OCB0b1NjaSAgMTIzNDU2Nzg5MDEyMzQ1NiAgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gTnVtYmVycyB3aXRoIEUKLWRzYmFzMTMwIHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCi1kc2JhczEzMSB0b1NjaSAiMC4wMDBFLTIiICAtPiAnMC4wMDAwMCcKLWRzYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcKLWRzYmFzMTMzIHRvU2NpICIwLjAwMEUtNCIgIC0+ICcwRS03JwotZHNiYXMxMzQgdG9TY2kgIjAuMDBFLTIiICAgLT4gJzAuMDAwMCcKLWRzYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJwotZHNiYXMxMzYgdG9TY2kgIjAuMDBFLTQiICAgLT4gJzAuMDAwMDAwJwotZHNiYXMxMzcgdG9TY2kgIjAuMDBFLTUiICAgLT4gJzBFLTcnCi1kc2JhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScKLWRzYmFzMTM5IHRvU2NpICItMEUrOSIgICAgIC0+ICctMEUrOScKLWRzYmFzMTQwIHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5JwotZHNiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknCi1kc2JhczE0MiB0b1NjaSAiMUUrOTAiICAgICAtPiAnMUUrOTAnCi1kc2JhczE0MyB0b1NjaSAiKzFFKzAwOSIgICAtPiAnMUUrOScKLWRzYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5JwotZHNiYXMxNDUgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknCi1kc2JhczE0NiB0b1NjaSAiMUUrMDkiICAgICAtPiAnMUUrOScKLWRzYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcKLWRzYmFzMTQ4IHRvU2NpICIxRSswMDkiICAgIC0+ICcxRSs5JwotZHNiYXMxNDkgdG9TY2kgIjAwMEUrOSIgICAgLT4gJzBFKzknCi1kc2JhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScKLWRzYmFzMTUxIHRvU2NpICIxZTA5IiAgICAgIC0+ICcxRSs5JwotZHNiYXMxNTIgdG9TY2kgIjFFOTAiICAgICAgLT4gJzFFKzkwJwotZHNiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknCi1kc2JhczE1NCB0b1NjaSAiMEU5IiAgICAgICAtPiAnMEUrOScKLWRzYmFzMTU1IHRvU2NpICIwLjAwMGUrMCIgIC0+ICcwLjAwMCcKLWRzYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnCi1kc2JhczE1NyB0b1NjaSAiNEUrOSIgICAgICAtPiAnNEUrOScKLWRzYmFzMTU4IHRvU2NpICI0NEUrOSIgICAgIC0+ICc0LjRFKzEwJwotZHNiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcKLWRzYmFzMTYwIHRvU2NpICIwMEUrOSIgICAgIC0+ICcwRSs5JwotZHNiYXMxNjEgdG9TY2kgIjAwRS05IiAgICAgLT4gJzBFLTknCi1kc2JhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcKLWRzYmFzMTYzIHRvU2NpICIxMEUrMDkiICAgIC0+ICcxLjBFKzEwJwotZHNiYXMxNjQgdG9TY2kgIjEwZSs5MCIgICAgLT4gJzEuMEUrOTEnCi1kc2JhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcKLWRzYmFzMTY2IHRvU2NpICIxMDBlKzkiICAgIC0+ICcxLjAwRSsxMScKLWRzYmFzMTY3IHRvU2NpICIxMDBlKzA5IiAgIC0+ICcxLjAwRSsxMScKLWRzYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicKLWRzYmFzMTY5IHRvU2NpICIxMDBlKzAwOSIgIC0+ICcxLjAwRSsxMScKLQotZHNiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1JwotZHNiYXMxNzEgdG9TY2kgIjEuMjY1RS0yMCIgLT4gJzEuMjY1RS0yMCcKLWRzYmFzMTcyIHRvU2NpICIxLjI2NUUtOCIgIC0+ICcxLjI2NUUtOCcKLWRzYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnCi1kc2JhczE3NCB0b1NjaSAiMS4yNjVFLTMiICAtPiAnMC4wMDEyNjUnCi1kc2JhczE3NSB0b1NjaSAiMS4yNjVFLTIiICAtPiAnMC4wMTI2NScKLWRzYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnCi1kc2JhczE3NyB0b1NjaSAiMS4yNjVFLTAiICAtPiAnMS4yNjUnCi1kc2JhczE3OCB0b1NjaSAiMS4yNjVFKzEiICAtPiAnMTIuNjUnCi1kc2JhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnCi1kc2JhczE4MCB0b1NjaSAiMS4yNjVFKzMiICAtPiAnMTI2NScKLWRzYmFzMTgxIHRvU2NpICIxLjI2NUUrNCIgIC0+ICcxLjI2NUUrNCcKLWRzYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcKLWRzYmFzMTgzIHRvU2NpICIxLjI2NUUrMjAiIC0+ICcxLjI2NUUrMjAnCi0KLWRzYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScKLWRzYmFzMTkxIHRvU2NpICIxMi42NUUtMjAiIC0+ICcxLjI2NUUtMTknCi1kc2JhczE5MiB0b1NjaSAiMTIuNjVFLTgiICAtPiAnMS4yNjVFLTcnCi1kc2JhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnCi1kc2JhczE5NCB0b1NjaSAiMTIuNjVFLTMiICAtPiAnMC4wMTI2NScKLWRzYmFzMTk1IHRvU2NpICIxMi42NUUtMiIgIC0+ICcwLjEyNjUnCi1kc2JhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnCi1kc2JhczE5NyB0b1NjaSAiMTIuNjVFLTAiICAtPiAnMTIuNjUnCi1kc2JhczE5OCB0b1NjaSAiMTIuNjVFKzEiICAtPiAnMTI2LjUnCi1kc2JhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScKLWRzYmFzMjAwIHRvU2NpICIxMi42NUUrMyIgIC0+ICcxLjI2NUUrNCcKLWRzYmFzMjAxIHRvU2NpICIxMi42NUUrNCIgIC0+ICcxLjI2NUUrNScKLWRzYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScKLWRzYmFzMjAzIHRvU2NpICIxMi42NUUrMjAiIC0+ICcxLjI2NUUrMjEnCi0KLWRzYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScKLWRzYmFzMjExIHRvU2NpICIxMjYuNUUtMjAiIC0+ICcxLjI2NUUtMTgnCi1kc2JhczIxMiB0b1NjaSAiMTI2LjVFLTgiICAtPiAnMC4wMDAwMDEyNjUnCi1kc2JhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScKLWRzYmFzMjE0IHRvU2NpICIxMjYuNUUtMyIgIC0+ICcwLjEyNjUnCi1kc2JhczIxNSB0b1NjaSAiMTI2LjVFLTIiICAtPiAnMS4yNjUnCi1kc2JhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnCi1kc2JhczIxNyB0b1NjaSAiMTI2LjVFLTAiICAtPiAnMTI2LjUnCi1kc2JhczIxOCB0b1NjaSAiMTI2LjVFKzEiICAtPiAnMTI2NScKLWRzYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcKLWRzYmFzMjIwIHRvU2NpICIxMjYuNUUrMyIgIC0+ICcxLjI2NUUrNScKLWRzYmFzMjIxIHRvU2NpICIxMjYuNUUrNCIgIC0+ICcxLjI2NUUrNicKLWRzYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnCi1kc2JhczIyMyB0b1NjaSAiMTI2LjVFKzIwIiAtPiAnMS4yNjVFKzIyJwotCi1kc2JhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1JwotZHNiYXMyMzEgdG9TY2kgIjEyNjVFLTIwIiAtPiAnMS4yNjVFLTE3JwotZHNiYXMyMzIgdG9TY2kgIjEyNjVFLTgiICAtPiAnMC4wMDAwMTI2NScKLWRzYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScKLWRzYmFzMjM0IHRvU2NpICIxMjY1RS0zIiAgLT4gJzEuMjY1JwotZHNiYXMyMzUgdG9TY2kgIjEyNjVFLTIiICAtPiAnMTIuNjUnCi1kc2JhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScKLWRzYmFzMjM3IHRvU2NpICIxMjY1RS0wIiAgLT4gJzEyNjUnCi1kc2JhczIzOCB0b1NjaSAiMTI2NUUrMSIgIC0+ICcxLjI2NUUrNCcKLWRzYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1JwotZHNiYXMyNDAgdG9TY2kgIjEyNjVFKzMiICAtPiAnMS4yNjVFKzYnCi1kc2JhczI0MSB0b1NjaSAiMTI2NUUrNCIgIC0+ICcxLjI2NUUrNycKLWRzYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScKLWRzYmFzMjQzIHRvU2NpICIxMjY1RSsyMCIgLT4gJzEuMjY1RSsyMycKLQotZHNiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnCi1kc2JhczI1MSB0b1NjaSAiMC4xMjY1RS0yMCIgLT4gJzEuMjY1RS0yMScKLWRzYmFzMjUyIHRvU2NpICIwLjEyNjVFLTgiICAtPiAnMS4yNjVFLTknCi1kc2JhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnCi1kc2JhczI1NCB0b1NjaSAiMC4xMjY1RS0zIiAgLT4gJzAuMDAwMTI2NScKLWRzYmFzMjU1IHRvU2NpICIwLjEyNjVFLTIiICAtPiAnMC4wMDEyNjUnCi1kc2JhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnCi1kc2JhczI1NyB0b1NjaSAiMC4xMjY1RS0wIiAgLT4gJzAuMTI2NScKLWRzYmFzMjU4IHRvU2NpICIwLjEyNjVFKzEiICAtPiAnMS4yNjUnCi1kc2JhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1JwotZHNiYXMyNjAgdG9TY2kgIjAuMTI2NUUrMyIgIC0+ICcxMjYuNScKLWRzYmFzMjYxIHRvU2NpICIwLjEyNjVFKzQiICAtPiAnMTI2NScKLWRzYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnCi1kc2JhczI2MyB0b1NjaSAiMC4xMjY1RSsyMCIgLT4gJzEuMjY1RSsxOScKLQotLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQotZHNiYXMyOTAgdG9TY2kgIi0wLjAwMEUtMSIgIC0+ICctMC4wMDAwJwotZHNiYXMyOTEgdG9TY2kgIi0wLjAwMEUtMiIgIC0+ICctMC4wMDAwMCcKLWRzYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJwotZHNiYXMyOTMgdG9TY2kgIi0wLjAwMEUtNCIgIC0+ICctMEUtNycKLWRzYmFzMjk0IHRvU2NpICItMC4wMEUtMiIgICAtPiAnLTAuMDAwMCcKLWRzYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnCi1kc2JhczI5NiB0b1NjaSAiLTAuMEUtMiIgICAgLT4gJy0wLjAwMCcKLWRzYmFzMjk3IHRvU2NpICItMC4wRS0zIiAgICAtPiAnLTAuMDAwMCcKLWRzYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnCi1kc2JhczI5OSB0b1NjaSAiLTBFLTMiICAgICAgLT4gJy0wLjAwMCcKLQotLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMKLWRzYmFzMzAxICB0b1NjaSAxMGUxMiAgLT4gMS4wRSsxMwotZHNiYXMzMDIgIHRvRW5nIDEwZTEyICAtPiAxMEUrMTIKLWRzYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMgotZHNiYXMzMDQgIHRvRW5nIDEwZTExICAtPiAxLjBFKzEyCi1kc2JhczMwNSAgdG9TY2kgMTBlMTAgIC0+IDEuMEUrMTEKLWRzYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5Ci1kc2JhczMwNyAgdG9TY2kgMTBlOSAgIC0+IDEuMEUrMTAKLWRzYmFzMzA4ICB0b0VuZyAxMGU5ICAgLT4gMTBFKzkKLWRzYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5Ci1kc2JhczMxMCAgdG9FbmcgMTBlOCAgIC0+IDEuMEUrOQotZHNiYXMzMTEgIHRvU2NpIDEwZTcgICAtPiAxLjBFKzgKLWRzYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2Ci1kc2JhczMxMyAgdG9TY2kgMTBlNiAgIC0+IDEuMEUrNwotZHNiYXMzMTQgIHRvRW5nIDEwZTYgICAtPiAxMEUrNgotZHNiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYKLWRzYmFzMzE2ICB0b0VuZyAxMGU1ICAgLT4gMS4wRSs2Ci1kc2JhczMxNyAgdG9TY2kgMTBlNCAgIC0+IDEuMEUrNQotZHNiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMKLWRzYmFzMzE5ICB0b1NjaSAxMGUzICAgLT4gMS4wRSs0Ci1kc2JhczMyMCAgdG9FbmcgMTBlMyAgIC0+IDEwRSszCi1kc2JhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMwotZHNiYXMzMjIgIHRvRW5nIDEwZTIgICAtPiAxLjBFKzMKLWRzYmFzMzIzICB0b1NjaSAxMGUxICAgLT4gMS4wRSsyCi1kc2JhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMAotZHNiYXMzMjUgIHRvU2NpIDEwZTAgICAtPiAxMAotZHNiYXMzMjYgIHRvRW5nIDEwZTAgICAtPiAxMAotZHNiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjAKLWRzYmFzMzI4ICB0b0VuZyAxMGUtMSAgLT4gMS4wCi1kc2JhczMyOSAgdG9TY2kgMTBlLTIgIC0+IDAuMTAKLWRzYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMAotZHNiYXMzMzEgIHRvU2NpIDEwZS0zICAtPiAwLjAxMAotZHNiYXMzMzIgIHRvRW5nIDEwZS0zICAtPiAwLjAxMAotZHNiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTAKLWRzYmFzMzM0ICB0b0VuZyAxMGUtNCAgLT4gMC4wMDEwCi1kc2JhczMzNSAgdG9TY2kgMTBlLTUgIC0+IDAuMDAwMTAKLWRzYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMAotZHNiYXMzMzcgIHRvU2NpIDEwZS02ICAtPiAwLjAwMDAxMAotZHNiYXMzMzggIHRvRW5nIDEwZS02ICAtPiAwLjAwMDAxMAotZHNiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTAKLWRzYmFzMzQwICB0b0VuZyAxMGUtNyAgLT4gMC4wMDAwMDEwCi1kc2JhczM0MSAgdG9TY2kgMTBlLTggIC0+IDEuMEUtNwotZHNiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkKLWRzYmFzMzQzICB0b1NjaSAxMGUtOSAgLT4gMS4wRS04Ci1kc2JhczM0NCAgdG9FbmcgMTBlLTkgIC0+IDEwRS05Ci1kc2JhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQotZHNiYXMzNDYgIHRvRW5nIDEwZS0xMCAtPiAxLjBFLTkKLWRzYmFzMzQ3ICB0b1NjaSAxMGUtMTEgLT4gMS4wRS0xMAotZHNiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyCi1kc2JhczM0OSAgdG9TY2kgMTBlLTEyIC0+IDEuMEUtMTEKLWRzYmFzMzUwICB0b0VuZyAxMGUtMTIgLT4gMTBFLTEyCi1kc2JhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTIKLWRzYmFzMzUyICB0b0VuZyAxMGUtMTMgLT4gMS4wRS0xMgotCi1kc2JhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTIKLWRzYmFzMzYyICB0b0VuZyA3RTEyICAtPiA3RSsxMgotZHNiYXMzNjMgIHRvU2NpIDdFMTEgIC0+IDdFKzExCi1kc2JhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5Ci1kc2JhczM2NSAgdG9TY2kgN0UxMCAgLT4gN0UrMTAKLWRzYmFzMzY2ICB0b0VuZyA3RTEwICAtPiA3MEUrOQotZHNiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkKLWRzYmFzMzY4ICB0b0VuZyA3RTkgICAtPiA3RSs5Ci1kc2JhczM2OSAgdG9TY2kgN0U4ICAgLT4gN0UrOAotZHNiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNgotZHNiYXMzNzEgIHRvU2NpIDdFNyAgIC0+IDdFKzcKLWRzYmFzMzcyICB0b0VuZyA3RTcgICAtPiA3MEUrNgotZHNiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYKLWRzYmFzMzc0ICB0b0VuZyA3RTYgICAtPiA3RSs2Ci1kc2JhczM3NSAgdG9TY2kgN0U1ICAgLT4gN0UrNQotZHNiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMwotZHNiYXMzNzcgIHRvU2NpIDdFNCAgIC0+IDdFKzQKLWRzYmFzMzc4ICB0b0VuZyA3RTQgICAtPiA3MEUrMwotZHNiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMKLWRzYmFzMzgwICB0b0VuZyA3RTMgICAtPiA3RSszCi1kc2JhczM4MSAgdG9TY2kgN0UyICAgLT4gN0UrMgotZHNiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMAotZHNiYXMzODMgIHRvU2NpIDdFMSAgIC0+IDdFKzEKLWRzYmFzMzg0ICB0b0VuZyA3RTEgICAtPiA3MAotZHNiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcKLWRzYmFzMzg2ICB0b0VuZyA3RTAgICAtPiA3Ci1kc2JhczM4NyAgdG9TY2kgN0UtMSAgLT4gMC43Ci1kc2JhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43Ci1kc2JhczM4OSAgdG9TY2kgN0UtMiAgLT4gMC4wNwotZHNiYXMzOTAgIHRvRW5nIDdFLTIgIC0+IDAuMDcKLWRzYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNwotZHNiYXMzOTIgIHRvRW5nIDdFLTMgIC0+IDAuMDA3Ci1kc2JhczM5MyAgdG9TY2kgN0UtNCAgLT4gMC4wMDA3Ci1kc2JhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3Ci1kc2JhczM5NSAgdG9TY2kgN0UtNSAgLT4gMC4wMDAwNwotZHNiYXMzOTYgIHRvRW5nIDdFLTUgIC0+IDAuMDAwMDcKLWRzYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNwotZHNiYXMzOTggIHRvRW5nIDdFLTYgIC0+IDAuMDAwMDA3Ci1kc2JhczM5OSAgdG9TY2kgN0UtNyAgLT4gN0UtNwotZHNiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQotZHNiYXM0MDEgIHRvU2NpIDdFLTggIC0+IDdFLTgKLWRzYmFzNDAyICB0b0VuZyA3RS04ICAtPiA3MEUtOQotZHNiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkKLWRzYmFzNDA0ICB0b0VuZyA3RS05ICAtPiA3RS05Ci1kc2JhczQwNSAgdG9TY2kgN0UtMTAgLT4gN0UtMTAKLWRzYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyCi1kc2JhczQwNyAgdG9TY2kgN0UtMTEgLT4gN0UtMTEKLWRzYmFzNDA4ICB0b0VuZyA3RS0xMSAtPiA3MEUtMTIKLWRzYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMgotZHNiYXM0MTAgIHRvRW5nIDdFLTEyIC0+IDdFLTEyCi1kc2JhczQxMSAgdG9TY2kgN0UtMTMgLT4gN0UtMTMKLWRzYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1Ci0KLS0tIEV4YWN0cyByZW1haW4gZXhhY3QgdXAgdG8gcHJlY2lzaW9uIC4uCi1kc2JhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMAotZHNiYXM0MjIgIHRvU2NpICAgMTAwMCAtPiAxMDAwCi1kc2JhczQyNCAgdG9TY2kgIDk5OS45IC0+ICA5OTkuOQotZHNiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjAKLWRzYmFzNDI4ICB0b1NjaSAxMDAwLjEgLT4gMTAwMC4xCi1kc2JhczQzMCAgdG9TY2kgMTAwMDAgLT4gMTAwMDAKLWRzYmFzNDMyICB0b1NjaSAxMDAwICAgICAgICAtPiAxMDAwCi1kc2JhczQzNCAgdG9TY2kgMTAwMDAgICAgICAgLT4gMTAwMDAKLWRzYmFzNDM2ICB0b1NjaSAxMDAwMDAgICAgICAtPiAxMDAwMDAKLWRzYmFzNDM4ICB0b1NjaSAxMDAwMDAwICAgICAtPiAxMDAwMDAwCi1kc2JhczQ0MCAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCi1kc2JhczQ0MiAgdG9TY2kgMTAwMDAwMDAgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkCi1kc2JhczQ0NCAgdG9TY2kgMTAwMDAwMDMgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QKLWRzYmFzNDQ2ICB0b1NjaSAxMDAwMDAwNSAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQgSW5leGFjdAotZHNiYXM0NDggIHRvU2NpIDEwMDAwMDA1MCAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Ci1kc2JhczQ1MCAgdG9TY2kgMTAwMDAwMDkgICAgLT4gMS4wMDAwMDFFKzcgICBSb3VuZGVkIEluZXhhY3QKLWRzYmFzNDUyICB0b1NjaSAxMDAwMDAwMDAgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQKLWRzYmFzNDU0ICB0b1NjaSAxMDAwMDAwMDMgICAtPiAxLjAwMDAwMEUrOCAgIFJvdW5kZWQgSW5leGFjdAotZHNiYXM0NTYgIHRvU2NpIDEwMDAwMDAwNSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0Ci1kc2JhczQ1OCAgdG9TY2kgMTAwMDAwMDA5ICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QKLWRzYmFzNDYwICB0b1NjaSAxMDAwMDAwMDAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQKLWRzYmFzNDYyICB0b1NjaSAxMDAwMDAwMzAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdAotZHNiYXM0NjQgIHRvU2NpIDEwMDAwMDA1MDAgIC0+IDEuMDAwMDAwRSs5ICAgUm91bmRlZCBJbmV4YWN0Ci1kc2JhczQ2NiAgdG9TY2kgMTAwMDAwMDkwMCAgLT4gMS4wMDAwMDFFKzkgICBSb3VuZGVkIEluZXhhY3QKLWRzYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQKLWRzYmFzNDcwICB0b1NjaSAxMDAwMDAwMzAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQgSW5leGFjdAotZHNiYXM0NzIgIHRvU2NpIDEwMDAwMDA1MDAwIC0+IDEuMDAwMDAwRSsxMCAgUm91bmRlZCBJbmV4YWN0Ci1kc2JhczQ3NCAgdG9TY2kgMTAwMDAwMDkwMDAgLT4gMS4wMDAwMDFFKzEwICBSb3VuZGVkIEluZXhhY3QKLQotLS0gY2hlY2sgcm91bmRpbmcgbW9kZXMgaGVlZGVkCi1yb3VuZGluZzogIGNlaWxpbmcKLWRzYnNyNDAxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZAotZHNic3I0MDIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNDAzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQwNCAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICB1cAotZHNic3I0MDUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjQwNiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MDcgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNDA4ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGZsb29yCi1kc2JzcjQxMCAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNDExICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQxMiAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MTMgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl9kb3duCi1kc2JzcjQxNSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNDE2ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQxNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MTggIHRvU2NpICAxLjExMjM0NjUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNDE5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZXZlbgotZHNic3I0MjEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjQyMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MjMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNDI0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQyNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBkb3duCi1kc2JzcjQyNiAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNDI3ICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQyOCAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MjkgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl91cAotZHNic3I0MzEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjQzMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I0MzMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNDM0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjQzNSAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotLS0gbmVnYXRpdmVzCi1yb3VuZGluZzogIGNlaWxpbmcKLWRzYnNyNTAxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZAotZHNic3I1MDIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNTAzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUwNCAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICB1cAotZHNic3I1MDUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjUwNiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MDcgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNTA4ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGZsb29yCi1kc2JzcjUxMCAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNTExICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUxMiAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MTMgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl9kb3duCi1kc2JzcjUxNSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNTE2ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUxNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MTggIHRvU2NpIC0xLjExMjM0NjUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNTE5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1yb3VuZGluZzogIGhhbGZfZXZlbgotZHNic3I1MjEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjUyMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MjMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNTI0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUyNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICBkb3duCi1kc2JzcjUyNiAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQKLWRzYnNyNTI3ICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUyOCAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MjkgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgaGFsZl91cAotZHNic3I1MzEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkCi1kc2JzcjUzMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdAotZHNic3I1MzMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QKLWRzYnNyNTM0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0Ci1kc2JzcjUzNSAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdAotCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIFRoZSAnYmFkZGllcycgdGVzdHMgZnJvbSBEaWFnQmlnRGVjaW1hbCwgcGx1cyBzb21lIG5ldyBvbmVzCi1kc2JhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTAxIHRvU2NpICcuJyAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MDIgdG9TY2kgJy4uJyAgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTA0IHRvU2NpICctLTEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MDUgdG9TY2kgJy0rMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTA3IHRvU2NpICcxMmUnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MDggdG9TY2kgJzEyZSsrJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTEwIHRvU2NpICcgKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MTEgdG9TY2kgJysgMScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTEzIHRvU2NpICcgKyAxJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MTQgdG9TY2kgJyAtIDEgJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTE2IHRvU2NpICctMS0nICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MTcgdG9TY2kgJzEyLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTE5IHRvU2NpICcnICAgICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MjAgdG9TY2kgJzFlLScgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTIyIHRvU2NpICc3ZTEyMzU2Nzg5MHgnICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MjMgdG9TY2kgJzdlMTIzNTY3ODkwMTJ4JyAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTI1IHRvU2NpICdlMTAwJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MjYgdG9TY2kgJ1x1MGU1YScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTI4IHRvU2NpICcxMjMsNjUnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MjkgdG9TY2kgJzEuMzQuNScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTMxIHRvU2NpICcwMS4zNS4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MzIgdG9TY2kgJzAxLjM1LScgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTM0IHRvU2NpICcuMDAwMC4nICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MzUgdG9TY2kgJzAwLi4wMCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTM3IHRvU2NpICcxMTFlMTIzLScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1MzggdG9TY2kgJzExMWUrMTIrJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTQwIHRvU2NpICcxMTFlMSoyMycgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NDEgdG9TY2kgJzExMWUxZSszJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTQzIHRvU2NpICcxZTEyM2UnICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NDQgdG9TY2kgJ3RlbicgICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTQ2IHRvU2NpICcxZS4xJyAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NDcgdG9TY2kgJzFlMS4nICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTQ5IHRvU2NpICdlKzEnICAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NTAgdG9TY2kgJzEuMjMuNCcgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTUyIHRvU2NpICcxRSsxLjInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NTMgdG9TY2kgJzFFKzEuMi4zJyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTU1IHRvU2NpICcxRS0tMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NTYgdG9TY2kgJzFFKy0xJyAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTU4IHRvU2NpICcxRScnMScgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NTkgdG9TY2kgIjFFIiIxIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLS0tIE5lYXItc3BlY2lhbHMKLWRzYmFzNTYxIHRvU2NpICJxTmFOIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU2MyB0b1NjaSAiTmFOcyIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTY0IHRvU2NpICJJbmZpIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU2NiB0b1NjaSAiSW5maW5pIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTY3IHRvU2NpICJJbmZpbml0IiAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU2OSB0b1NjaSAiMEluZiIgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTcwIHRvU2NpICI5SW5mIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU3MiB0b1NjaSAiLTlJbmYiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTczIHRvU2NpICItc05hIiAgICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU3NSB0b1NjaSAiMHNOYU4iICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzCi1kc2JhczU3NiB0b1NjaSAgJ2UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU3NyB0b1NjaSAgJy5lKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU3OSB0b1NjaSAgJy0uZSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4MCB0b1NjaSAgJy0uZScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4MiB0b1NjaSAgJy5FKzEnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4MyB0b1NjaSAgJysuRSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczU4NSB0b1NjaSAgJy0uRScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4Ci0KLWRzYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTg3IHRvU2NpICAnLS5OYU4nICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTg4IHRvU2NpICAnKy5zTmFOJyAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNTkwIHRvU2NpICAnLkluZmluaXR5JyAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotLS0gWmVyb3MKLWRzYmFzNjAxIHRvU2NpIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkKLWRzYmFzNjAyIHRvU2NpIDAuMDAwMDAwMDAgICAgICAgIC0+IDBFLTgKLWRzYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcKLWRzYmFzNjA0IHRvU2NpIDAuMDAwMDAwICAgICAgICAgIC0+IDAuMDAwMDAwCi1kc2JhczYwNSB0b1NjaSAwLjAwMDAwICAgICAgICAgICAtPiAwLjAwMDAwCi1kc2JhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKLWRzYmFzNjA3IHRvU2NpIDAuMDAwICAgICAgICAgICAgIC0+IDAuMDAwCi1kc2JhczYwOCB0b1NjaSAwLjAwICAgICAgICAgICAgICAtPiAwLjAwCi1kc2JhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRzYmFzNjEwIHRvU2NpICAuMCAgICAgICAgICAgICAgIC0+IDAuMAotZHNiYXM2MTEgdG9TY2kgMC4gICAgICAgICAgICAgICAgLT4gMAotZHNiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAotZHNiYXM2MTMgdG9TY2kgLTAuICAgICAgICAgICAgICAgLT4gLTAKLWRzYmFzNjE0IHRvU2NpIC0wLjAgICAgICAgICAgICAgIC0+IC0wLjAKLWRzYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCi1kc2JhczYxNiB0b1NjaSAtMC4wMDAgICAgICAgICAgICAtPiAtMC4wMDAKLWRzYmFzNjE3IHRvU2NpIC0wLjAwMDAgICAgICAgICAgIC0+IC0wLjAwMDAKLWRzYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCi1kc2JhczYxOSB0b1NjaSAtMC4wMDAwMDAgICAgICAgICAtPiAtMC4wMDAwMDAKLWRzYmFzNjIwIHRvU2NpIC0wLjAwMDAwMDAgICAgICAgIC0+IC0wRS03Ci1kc2JhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOAotZHNiYXM2MjIgdG9TY2kgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKLQotZHNiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMAotZHNiYXM2MzEgdG9TY2kgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wCi1kc2JhczYzMiB0b1NjaSAgMC4wMEUrMiAgICAgICAgICAtPiAwCi1kc2JhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxCi1kc2JhczYzNCB0b1NjaSAgMC4wMEUrNCAgICAgICAgICAtPiAwRSsyCi1kc2JhczYzNSB0b1NjaSAgMC4wMEUrNSAgICAgICAgICAtPiAwRSszCi1kc2JhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0Ci1kc2JhczYzNyB0b1NjaSAgMC4wMEUrNyAgICAgICAgICAtPiAwRSs1Ci1kc2JhczYzOCB0b1NjaSAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2Ci1kc2JhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3Ci0KLWRzYmFzNjQwIHRvU2NpICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAotZHNiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMAotZHNiYXM2NDIgdG9TY2kgIDAuMEUrMiAgICAgICAgICAgLT4gMEUrMQotZHNiYXM2NDMgdG9TY2kgIDAuMEUrMyAgICAgICAgICAgLT4gMEUrMgotZHNiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMwotZHNiYXM2NDUgdG9TY2kgIDAuMEUrNSAgICAgICAgICAgLT4gMEUrNAotZHNiYXM2NDYgdG9TY2kgIDAuMEUrNiAgICAgICAgICAgLT4gMEUrNQotZHNiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNgotZHNiYXM2NDggdG9TY2kgIDAuMEUrOCAgICAgICAgICAgLT4gMEUrNwotZHNiYXM2NDkgdG9TY2kgIDAuMEUrOSAgICAgICAgICAgLT4gMEUrOAotCi1kc2JhczY1MCB0b1NjaSAgMEUrMCAgICAgICAgICAgICAtPiAwCi1kc2JhczY1MSB0b1NjaSAgMEUrMSAgICAgICAgICAgICAtPiAwRSsxCi1kc2JhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyCi1kc2JhczY1MyB0b1NjaSAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCi1kc2JhczY1NCB0b1NjaSAgMEUrNCAgICAgICAgICAgICAtPiAwRSs0Ci1kc2JhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1Ci1kc2JhczY1NiB0b1NjaSAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2Ci1kc2JhczY1NyB0b1NjaSAgMEUrNyAgICAgICAgICAgICAtPiAwRSs3Ci1kc2JhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4Ci1kc2JhczY1OSB0b1NjaSAgMEUrOSAgICAgICAgICAgICAtPiAwRSs5Ci0KLWRzYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMAotZHNiYXM2NjEgdG9TY2kgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAotZHNiYXM2NjIgdG9TY2kgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDAKLWRzYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMAotZHNiYXM2NjQgdG9TY2kgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAotZHNiYXM2NjUgdG9TY2kgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDAKLWRzYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcKLWRzYmFzNjY3IHRvU2NpICAwLjBFLTcgICAgICAgICAgIC0+IDBFLTgKLWRzYmFzNjY4IHRvU2NpICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKLWRzYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwCi0KLWRzYmFzNjcwIHRvU2NpICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKLWRzYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwCi1kc2JhczY3MiB0b1NjaSAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDAKLWRzYmFzNjczIHRvU2NpICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKLWRzYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwCi1kc2JhczY3NSB0b1NjaSAgMC4wMEUtNSAgICAgICAgICAtPiAwRS03Ci1kc2JhczY3NiB0b1NjaSAgMC4wMEUtNiAgICAgICAgICAtPiAwRS04Ci1kc2JhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Ci1kc2JhczY3OCB0b1NjaSAgMC4wMEUtOCAgICAgICAgICAtPiAwRS0xMAotZHNiYXM2NzkgdG9TY2kgIDAuMDBFLTkgICAgICAgICAgLT4gMEUtMTEKLQotZHNiYXM2ODAgdG9TY2kgIDAwMDAwMC4gICAgICAgICAgLT4gIDAKLWRzYmFzNjgxIHRvU2NpICAgMDAwMDAuICAgICAgICAgIC0+ICAwCi1kc2JhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMAotZHNiYXM2ODMgdG9TY2kgICAgIDAwMC4gICAgICAgICAgLT4gIDAKLWRzYmFzNjg0IHRvU2NpICAgICAgMDAuICAgICAgICAgIC0+ICAwCi1kc2JhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMAotZHNiYXM2ODYgdG9TY2kgICswMDAwMC4gICAgICAgICAgLT4gIDAKLWRzYmFzNjg3IHRvU2NpICAtMDAwMDAuICAgICAgICAgIC0+IC0wCi1kc2JhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMAotZHNiYXM2ODkgdG9TY2kgIC0wLiAgICAgICAgICAgICAgLT4gLTAKLQotLS0gU3BlY2lhbHMKLWRzYmFzNzAwIHRvU2NpICJOYU4iICAgICAgICAgICAgIC0+IE5hTgotZHNiYXM3MDEgdG9TY2kgIm5hbiIgICAgICAgICAgICAgLT4gTmFOCi1kc2JhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzNzAzIHRvU2NpICJOQU4iICAgICAgICAgICAgIC0+IE5hTgotZHNiYXM3MDQgdG9TY2kgIitOYU4iICAgICAgICAgICAgLT4gTmFOCi1kc2JhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4KLWRzYmFzNzA2IHRvU2NpICIrbkFuIiAgICAgICAgICAgIC0+IE5hTgotZHNiYXM3MDcgdG9TY2kgIitOQU4iICAgICAgICAgICAgLT4gTmFOCi1kc2JhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFOCi1kc2JhczcwOSB0b1NjaSAiLW5hbiIgICAgICAgICAgICAtPiAtTmFOCi1kc2JhczcxMCB0b1NjaSAiLW5BbiIgICAgICAgICAgICAtPiAtTmFOCi1kc2JhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFOCi1kc2JhczcxMiB0b1NjaSAnTmFOMCcgICAgICAgICAgICAtPiBOYU4KLWRzYmFzNzEzIHRvU2NpICdOYU4xJyAgICAgICAgICAgIC0+IE5hTjEKLWRzYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyCi1kc2JhczcxNSB0b1NjaSAnTmFOMTIzJyAgICAgICAgICAtPiBOYU4xMjMKLWRzYmFzNzE2IHRvU2NpICdOYU4xMjM0JyAgICAgICAgIC0+IE5hTjEyMzQKLWRzYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjEKLWRzYmFzNzE4IHRvU2NpICdOYU4wMTInICAgICAgICAgIC0+IE5hTjEyCi1kc2JhczcxOSB0b1NjaSAnTmFOMDEyMycgICAgICAgICAtPiBOYU4xMjMKLWRzYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQKLWRzYmFzNzIxIHRvU2NpICdOYU4wMDEnICAgICAgICAgIC0+IE5hTjEKLWRzYmFzNzIyIHRvU2NpICdOYU4wMDEyJyAgICAgICAgIC0+IE5hTjEyCi1kc2JhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMKLWRzYmFzNzI0IHRvU2NpICdOYU4wMDEyMzQnICAgICAgIC0+IE5hTjEyMzQKLWRzYmFzNzI1IHRvU2NpICdOYU4xMjM0NTY3ODkwMTIzNDU2JyAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM3MjcgdG9TY2kgJ05hTjEyLjQ1JyAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2JhczcyOCB0b1NjaSAnTmFOLTEyJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLWRzYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotCi1kc2JhczczMCB0b1NjaSAic05hTiIgICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczMiB0b1NjaSAiU25BbiIgICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczMyB0b1NjaSAiU05BTiIgICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczNSB0b1NjaSAiK3NuYW4iICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczNiB0b1NjaSAiK1NuQW4iICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFOCi1kc2JhczczOCB0b1NjaSAiLXNOYU4iICAgICAgICAgICAtPiAtc05hTgotZHNiYXM3MzkgdG9TY2kgIi1zbmFuIiAgICAgICAgICAgLT4gLXNOYU4KLWRzYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFOCi1kc2Jhczc0MSB0b1NjaSAiLVNOQU4iICAgICAgICAgICAtPiAtc05hTgotZHNiYXM3NDIgdG9TY2kgJ3NOYU4wMDAwJyAgICAgICAgLT4gc05hTgotZHNiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcKLWRzYmFzNzQ0IHRvU2NpICdzTmFOMDA3MjM0JyAgICAgIC0+IHNOYU43MjM0Ci1kc2Jhczc0NSB0b1NjaSAnc05hTjcyMzQ1NjEyMzQ1Njc4OTAnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheAotZHNiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4Ci1kc2Jhczc0NyB0b1NjaSAnc05hTi03MicgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgKLQotZHNiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzQ5IHRvU2NpICJpbmYiICAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc1MCB0b1NjaSAiaU5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQotZHNiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzUyIHRvU2NpICIrSW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc1MyB0b1NjaSAiK2luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQotZHNiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzU1IHRvU2NpICIrSU5GIiAgICAgICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc1NiB0b1NjaSAiLUluZiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWRzYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQotZHNiYXM3NTggdG9TY2kgIi1pTmYiICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1kc2Jhczc1OSB0b1NjaSAiLUlORiIgICAgICAgICAgICAtPiAtSW5maW5pdHkKLQotZHNiYXM3NjAgdG9TY2kgIkluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzYxIHRvU2NpICJpbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQotZHNiYXM3NjMgdG9TY2kgIklORklOSVRZIiAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzY0IHRvU2NpICIrSW5maW5pdHkiICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQotZHNiYXM3NjYgdG9TY2kgIitpTmZJbkl0WSIgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzNzY3IHRvU2NpICIrSU5GSU5JVFkiICAgICAgIC0+IEluZmluaXR5Ci1kc2Jhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkKLWRzYmFzNzY5IHRvU2NpICItaW5maW5pdHkiICAgICAgIC0+IC1JbmZpbml0eQotZHNiYXM3NzAgdG9TY2kgIi1pTmZJbkl0WSIgICAgICAgLT4gLUluZmluaXR5Ci1kc2Jhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkKLQotLS0gU3BlY2lhbHMgYW5kIHplcm9zIGZvciB0b0VuZwotZHNiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc3MyB0b0VuZyAiLUluZmluaXR5IiAgICAgICAgLT4gLUluZmluaXR5Ci1kc2Jhc3Q3NzQgdG9FbmcgIi1zTmFOIiAgICAgICAgICAgIC0+IC1zTmFOCi1kc2Jhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4KLWRzYmFzdDc3NiB0b0VuZyAiK0luZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc3OCB0b0VuZyAiK3NOYU4iICAgICAgICAgICAgLT4gc05hTgotZHNiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc4MCB0b0VuZyAiSU5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc4MSB0b0VuZyAiU05BTiIgICAgICAgICAgICAgLT4gc05hTgotZHNiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc4MyB0b0VuZyAiaW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc4NCB0b0VuZyAic25hbiIgICAgICAgICAgICAgLT4gc05hTgotZHNiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc4NiB0b0VuZyAiSW5GSU5JVFkiICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc4NyB0b0VuZyAiU25BTiIgICAgICAgICAgICAgLT4gc05hTgotZHNiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc4OSB0b0VuZyAiaU5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc5MCB0b0VuZyAic05hbiIgICAgICAgICAgICAgLT4gc05hTgotZHNiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4KLWRzYmFzdDc5MiB0b0VuZyAiSW5maW5pdHkiICAgICAgICAgLT4gSW5maW5pdHkKLWRzYmFzdDc5MyB0b0VuZyAic05hTiIgICAgICAgICAgICAgLT4gc05hTgotCi0tLSBaZXJvIHRvRW5nLCBldGMuCi1kc2Jhc3Q4MDAgdG9FbmcgMGUrMSAgICAgICAgICAgICAgLT4gIjAuMDBFKzMiICAtLSBkb2MgZXhhbXBsZQotCi1kc2Jhc3Q4MDEgdG9FbmcgMC4wMDAwMDAwMDAgICAgICAgLT4gMEUtOQotZHNiYXN0ODAyIHRvRW5nIDAuMDAwMDAwMDAgICAgICAgIC0+IDAuMDBFLTYKLWRzYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYKLWRzYmFzdDgwNCB0b0VuZyAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMAotZHNiYXN0ODA1IHRvRW5nIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDAKLWRzYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDAKLWRzYmFzdDgwNyB0b0VuZyAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMAotZHNiYXN0ODA4IHRvRW5nIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDAKLWRzYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRzYmFzdDgxMCB0b0VuZyAgLjAgICAgICAgICAgICAgICAtPiAwLjAKLWRzYmFzdDgxMSB0b0VuZyAwLiAgICAgICAgICAgICAgICAtPiAwCi1kc2Jhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMAotZHNiYXN0ODEzIHRvRW5nIC0wLiAgICAgICAgICAgICAgIC0+IC0wCi1kc2Jhc3Q4MTQgdG9FbmcgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMAotZHNiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwCi1kc2Jhc3Q4MTYgdG9FbmcgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwCi1kc2Jhc3Q4MTcgdG9FbmcgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMAotZHNiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwCi1kc2Jhc3Q4MTkgdG9FbmcgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwCi1kc2Jhc3Q4MjAgdG9FbmcgLTAuMDAwMDAwMCAgICAgICAgLT4gLTAuMEUtNgotZHNiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02Ci1kc2Jhc3Q4MjIgdG9FbmcgLTAuMDAwMDAwMDAwICAgICAgLT4gLTBFLTkKLQotZHNiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDAKLWRzYmFzdDgzMSB0b0VuZyAgMC4wMEUrMSAgICAgICAgICAtPiAwLjAKLWRzYmFzdDgzMiB0b0VuZyAgMC4wMEUrMiAgICAgICAgICAtPiAwCi1kc2Jhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMwotZHNiYXN0ODM0IHRvRW5nICAwLjAwRSs0ICAgICAgICAgIC0+IDAuMEUrMwotZHNiYXN0ODM1IHRvRW5nICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMKLWRzYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2Ci1kc2Jhc3Q4MzcgdG9FbmcgIDAuMDBFKzcgICAgICAgICAgLT4gMC4wRSs2Ci1kc2Jhc3Q4MzggdG9FbmcgIDAuMDBFKzggICAgICAgICAgLT4gMEUrNgotZHNiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkKLQotZHNiYXN0ODQwIHRvRW5nICAwLjBFKzAgICAgICAgICAgIC0+IDAuMAotZHNiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDAKLWRzYmFzdDg0MiB0b0VuZyAgMC4wRSsyICAgICAgICAgICAtPiAwLjAwRSszCi1kc2Jhc3Q4NDMgdG9FbmcgIDAuMEUrMyAgICAgICAgICAgLT4gMC4wRSszCi1kc2Jhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMwotZHNiYXN0ODQ1IHRvRW5nICAwLjBFKzUgICAgICAgICAgIC0+IDAuMDBFKzYKLWRzYmFzdDg0NiB0b0VuZyAgMC4wRSs2ICAgICAgICAgICAtPiAwLjBFKzYKLWRzYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2Ci1kc2Jhc3Q4NDggdG9FbmcgIDAuMEUrOCAgICAgICAgICAgLT4gMC4wMEUrOQotZHNiYXN0ODQ5IHRvRW5nICAwLjBFKzkgICAgICAgICAgIC0+IDAuMEUrOQotCi1kc2Jhc3Q4NTAgdG9FbmcgIDBFKzAgICAgICAgICAgICAgLT4gMAotZHNiYXN0ODUxIHRvRW5nICAwRSsxICAgICAgICAgICAgIC0+IDAuMDBFKzMKLWRzYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMKLWRzYmFzdDg1MyB0b0VuZyAgMEUrMyAgICAgICAgICAgICAtPiAwRSszCi1kc2Jhc3Q4NTQgdG9FbmcgIDBFKzQgICAgICAgICAgICAgLT4gMC4wMEUrNgotZHNiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNgotZHNiYXN0ODU2IHRvRW5nICAwRSs2ICAgICAgICAgICAgIC0+IDBFKzYKLWRzYmFzdDg1NyB0b0VuZyAgMEUrNyAgICAgICAgICAgICAtPiAwLjAwRSs5Ci1kc2Jhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5Ci1kc2Jhc3Q4NTkgdG9FbmcgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQotCi1kc2Jhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wCi1kc2Jhc3Q4NjEgdG9FbmcgIDAuMEUtMSAgICAgICAgICAgLT4gMC4wMAotZHNiYXN0ODYyIHRvRW5nICAwLjBFLTIgICAgICAgICAgIC0+IDAuMDAwCi1kc2Jhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwCi1kc2Jhc3Q4NjQgdG9FbmcgIDAuMEUtNCAgICAgICAgICAgLT4gMC4wMDAwMAotZHNiYXN0ODY1IHRvRW5nICAwLjBFLTUgICAgICAgICAgIC0+IDAuMDAwMDAwCi1kc2Jhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02Ci1kc2Jhc3Q4NjcgdG9FbmcgIDAuMEUtNyAgICAgICAgICAgLT4gMC4wMEUtNgotZHNiYXN0ODY4IHRvRW5nICAwLjBFLTggICAgICAgICAgIC0+IDBFLTkKLWRzYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkKLQotZHNiYXN0ODcwIHRvRW5nICAwLjAwRS0wICAgICAgICAgIC0+IDAuMDAKLWRzYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMAotZHNiYXN0ODcyIHRvRW5nICAwLjAwRS0yICAgICAgICAgIC0+IDAuMDAwMAotZHNiYXN0ODczIHRvRW5nICAwLjAwRS0zICAgICAgICAgIC0+IDAuMDAwMDAKLWRzYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMAotZHNiYXN0ODc1IHRvRW5nICAwLjAwRS01ICAgICAgICAgIC0+IDAuMEUtNgotZHNiYXN0ODc2IHRvRW5nICAwLjAwRS02ICAgICAgICAgIC0+IDAuMDBFLTYKLWRzYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05Ci1kc2Jhc3Q4NzggdG9FbmcgIDAuMDBFLTggICAgICAgICAgLT4gMC4wRS05Ci1kc2Jhc3Q4NzkgdG9FbmcgIDAuMDBFLTkgICAgICAgICAgLT4gMC4wMEUtOQotCi0tLSBsb25nIGlucHV0IHN0cmluZ3MKLWRzYmFzODAxIHRvc2NpICAgICAgICAgICcwMTIzNDU2NycgLT4gMTIzNDU2NwotZHNiYXM4MDIgdG9zY2kgICAgICAgICAnMDAxMjM0NTY3JyAtPiAxMjM0NTY3Ci1kc2JhczgwMyB0b3NjaSAgICAgICAgJzAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKLWRzYmFzODA0IHRvc2NpICAgICAgICcwMDAwMTIzNDU2NycgLT4gMTIzNDU2NwotZHNiYXM4MDUgdG9zY2kgICAgICAnMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Ci1kc2JhczgwNiB0b3NjaSAgICAgJzAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKLWRzYmFzODA3IHRvc2NpICAgICcwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NwotZHNiYXM4MDggdG9zY2kgICAnMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3Ci1kc2JhczgwOSB0b3NjaSAgJzAwMDAwMDAwMDEyMzQ1NjcnIC0+IDEyMzQ1NjcKLWRzYmFzODEwIHRvc2NpICcwMDAwMDAwMDAwMTIzNDU2NycgLT4gMTIzNDU2NwotCi1kc2JhczgxMSB0b3NjaSAgICAgICAgICAnMC4xMjM0NTY3JyAtPiAgICAgIDAuMTIzNDU2NwotZHNiYXM4MTIgdG9zY2kgICAgICAgICAnMC4wMTIzNDU2NycgLT4gICAgIDAuMDEyMzQ1NjcKLWRzYmFzODEzIHRvc2NpICAgICAgICAnMC4wMDEyMzQ1NjcnIC0+ICAgIDAuMDAxMjM0NTY3Ci1kc2JhczgxNCB0b3NjaSAgICAgICAnMC4wMDAxMjM0NTY3JyAtPiAgIDAuMDAwMTIzNDU2NwotZHNiYXM4MTUgdG9zY2kgICAgICAnMC4wMDAwMTIzNDU2NycgLT4gIDAuMDAwMDEyMzQ1NjcKLWRzYmFzODE2IHRvc2NpICAgICAnMC4wMDAwMDEyMzQ1NjcnIC0+IDAuMDAwMDAxMjM0NTY3Ci1kc2JhczgxNyB0b3NjaSAgICAnMC4wMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtNwotZHNiYXM4MTggdG9zY2kgICAnMC4wMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTgKLWRzYmFzODE5IHRvc2NpICAnMC4wMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS05Ci1kc2JhczgyMCB0b3NjaSAnMC4wMDAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtMTAKLQotZHNiYXM4MjEgdG9zY2kgJzEyMzQ1Njc5MCcgICAgICAgICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzODIyIHRvc2NpICcxMjM0NTY3OTAxJyAgICAgICAgLT4gMS4yMzQ1NjhFKzkgIEluZXhhY3QgUm91bmRlZAotZHNiYXM4MjMgdG9zY2kgJzEyMzQ1Njc5MDEyJyAgICAgICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczgyNCB0b3NjaSAnMTIzNDU2NzkwMTIzJyAgICAgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzODI1IHRvc2NpICcxMjM0NTY3OTAxMjM0JyAgICAgLT4gMS4yMzQ1NjhFKzEyIEluZXhhY3QgUm91bmRlZAotZHNiYXM4MjYgdG9zY2kgJzEyMzQ1Njc5MDEyMzQ1JyAgICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkCi1kc2JhczgyNyB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2JyAgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzODI4IHRvc2NpICcxMjM0NTY3OTAxMjM0NTY3JyAgLT4gMS4yMzQ1NjhFKzE1IEluZXhhY3QgUm91bmRlZAotZHNiYXM4MjkgdG9zY2kgJzEyMzQ1Njc4OTAxMjM0NTYnICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHN1Ym5vcm1hbHMgYW5kIG92ZXJmbG93cwotZHNiYXM5MDYgdG9TY2kgJzk5ZTk5OTk5OTk5OScgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MDggdG9TY2kgJzAuOWUtOTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRzYmFzOTA5IHRvU2NpICcwLjA5ZS05OTk5OTk5OTknICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczkxMSB0b1NjaSAnMTBlLTEwMDAwMDAwMDAnICAgICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHNiYXM5MTIgdG9TY2kgJzAuOWU5OTk5OTk5OTk5JyAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRzYmFzOTE0IHRvU2NpICcxMTFlOTk5OTk5OTk5OScgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzOTE1IHRvU2NpICcxMTExZS05OTk5OTk5OTk5JyAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHNiYXM5MTcgdG9TY2kgJzdlMTAwMDAwMDAwMCcgICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotLS0gbmVnYXRpdmVzIHRoZSBzYW1lCi1kc2JhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MTkgdG9TY2kgJy05OTllOTk5OTk5OTk5JyAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzOTIwIHRvU2NpICctMC45ZS05OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHNiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkyMiB0b1NjaSAnLTAuMWUxMDAwMDAwMDAwJyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MjMgdG9TY2kgJy0xMGUtMTAwMDAwMDAwMCcgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MjUgdG9TY2kgJy05OWUtOTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkyNiB0b1NjaSAnLTExMWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotZHNiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczkyOCB0b1NjaSAnLTExMTFlLTk5OTk5OTk5OTk5JyAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRzYmFzOTI5IHRvU2NpICctN2UxMDAwMDAwMDAwJyAgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG92ZXJmbG93IHJlc3VsdHMgYXQgZGlmZmVyZW50IHJvdW5kaW5nIG1vZGVzCi1yb3VuZGluZzogIGNlaWxpbmcKLWRzYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczkzMSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiAgdXAKLWRzYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczkzMyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICBkb3duCi1kc2JhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzOTM1IHRvU2NpICctN2UxMDAwMCcgIC0+IC05Ljk5OTk5OUUrOTYgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICBmbG9vcgotZHNiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczkzNyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogIGhhbGZfdXAKLWRzYmFzOTM4IHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2JhczkzOSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICBoYWxmX2V2ZW4KLWRzYmFzOTQwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2Jhczk0MSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6ICBoYWxmX2Rvd24KLWRzYmFzOTQyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkCi1kc2Jhczk0MyB0b1NjaSAnLTdlMTAwMDAnICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogIGhhbGZfZXZlbgotCi0tLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMAotZHNiZW00MDAgdG9TY2kgIDEuMDAwMEUtODYgICAgIC0+IDEuMDAwMEUtODYKLWRzYmVtNDAxIHRvU2NpICAwLjFFLTk3ICAgICAgICAtPiAxRS05OCAgICAgICBTdWJub3JtYWwKLWRzYmVtNDAyIHRvU2NpICAwLjEwMDBFLTk3ICAgICAtPiAxLjAwMEUtOTggICBTdWJub3JtYWwKLWRzYmVtNDAzIHRvU2NpICAwLjAxMDBFLTk3ICAgICAtPiAxLjAwRS05OSAgICBTdWJub3JtYWwKLWRzYmVtNDA0IHRvU2NpICAwLjAwMTBFLTk3ICAgICAtPiAxLjBFLTEwMCAgICAgU3Vibm9ybWFsCi1kc2JlbTQwNSB0b1NjaSAgMC4wMDAxRS05NyAgICAgLT4gMUUtMTAxICAgICAgIFN1Ym5vcm1hbAotZHNiZW00MDYgdG9TY2kgIDAuMDAwMTBFLTk3ICAgIC0+IDFFLTEwMSAgICAgU3Vibm9ybWFsIFJvdW5kZWQKLWRzYmVtNDA3IHRvU2NpICAwLjAwMDEzRS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQwOCB0b1NjaSAgMC4wMDAxNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MDkgdG9TY2kgIDAuMDAwMTdFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDEwIHRvU2NpICAwLjAwMDIzRS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQxMSB0b1NjaSAgMC4wMDAyNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MTIgdG9TY2kgIDAuMDAwMjdFLTk3ICAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDEzIHRvU2NpICAwLjAwMDE0OUUtOTcgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MTUgdG9TY2kgIDAuMDAwMTUxRS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDE2IHRvU2NpICAwLjAwMDI0OUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MTggdG9TY2kgIDAuMDAwMjUxRS05NyAgIC0+IDNFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDE5IHRvU2NpICAwLjAwMDA5RS05NyAgICAtPiAxRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQyMCB0b1NjaSAgMC4wMDAwNUUtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JlbTQyMSB0b1NjaSAgMC4wMDAwM0UtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JlbTQyMiB0b1NjaSAgMC4wMDAwMDlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JlbTQyNCB0b1NjaSAgMC4wMDAwMDNFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLWRzYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQyNiB0b1NjaSAgMC4wMDEwNTBFLTk3ICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MjcgdG9TY2kgIDAuMDAxMDUxRS05NyAgIC0+IDEuMUUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQyOSB0b1NjaSAgMC4wMDExNTBFLTk3ICAgLT4gMS4yRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzAgdG9TY2kgIDAuMDAxMTUxRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotZHNiZW00MzIgdG9TY2kgIDAuMDEwMDQ5RS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzMgdG9TY2kgIDAuMDEwMDUwRS05NyAgIC0+IDEuMDBFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzUgdG9TY2kgIDAuMDEwMTQ5RS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzYgdG9TY2kgIDAuMDEwMTUwRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1kc2JlbTQ0MCB0b1NjaSAgMC4xMDEwM0UtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ0MiB0b1NjaSAgMC4xMDEwN0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ0MyB0b1NjaSAgMC4xMDExM0UtOTcgICAgLT4gMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ0NCB0b1NjaSAgMC4xMDExNUUtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ0NSB0b1NjaSAgMC4xMDExN0UtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWRzYmVtNDUwIHRvU2NpICAxLjEwNzMwRS05OCAgICAtPiAxLjEwN0UtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDUxIHRvU2NpICAxLjEwNzUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDUyIHRvU2NpICAxLjEwNzcwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDUzIHRvU2NpICAxLjEwODMwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDU0IHRvU2NpICAxLjEwODUwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDU1IHRvU2NpICAxLjEwODcwRS05OCAgICAtPiAxLjEwOUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbWFrZSBzdXJlIHNpZ24gT0sKLWRzYmVtNDU2IHRvU2NpICAtMC4xMDEwM0UtOTcgICAtPiAtMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00NTggdG9TY2kgIC0wLjEwMTA3RS05NyAgIC0+IC0xLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDU5IHRvU2NpICAtMC4xMDExM0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00NjEgdG9TY2kgIC0wLjEwMTE3RS05NyAgIC0+IC0xLjAxMkUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gJzk5OXMnIGNhc2VzCi1kc2JlbTQ2NCB0b1NjaSAgOTk5OTk5RS05OCAgICAgICAgIC0+IDkuOTk5OTlFLTkzCi1kc2JlbTQ2NSB0b1NjaSAgOTk5OTkuMEUtOTcgICAgICAgIC0+IDkuOTk5OTBFLTkzCi1kc2JlbTQ2NiB0b1NjaSAgOTk5OTkuRS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTMKLWRzYmVtNDY3IHRvU2NpICA5OTk5LjlFLTk3ICAgICAgICAgLT4gOS45OTk5RS05NAotZHNiZW00NjggdG9TY2kgIDk5OS45OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk1Ci1kc2JlbTQ2OSB0b1NjaSAgOTkuOTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTYgU3Vibm9ybWFsCi1kc2JlbTQ3MCB0b1NjaSAgOS45OTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTcgU3Vibm9ybWFsCi1kc2JlbTQ3MSB0b1NjaSAgMC45OTk5OUUtOTcgICAgICAgIC0+IDEuMDAwMEUtOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtOTcgICAgICAgLT4gMS4wMDBFLTk4ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00NzMgdG9TY2kgIDAuMDA5OTk5OUUtOTcgICAgICAtPiAxLjAwRS05OSAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1kc2JlbTQ3NCB0b1NjaSAgMC4wMDA5OTk5OUUtOTcgICAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWRzYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZHNiZW00NzYgdG9TY2kgIDAuMDAwMDA5OTk5OUUtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRzYmVtNDc3IHRvU2NpICAwLjAwMDAwMDk5OTk5RS05NyAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTk3IC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotCi0tLSBFeHBvbmVudHMgd2l0aCBpbnNpZ25pZmljYW50IGxlYWRpbmcgemVyb3MKLWRzYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kc2JhczEwMDIgdG9TY2kgIDFlMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMTAwMyB0b1NjaSAgMWUwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1kc2JhczEwMDUgdG9TY2kgIDFlMDAwMDAwMDAwMDAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZHNiYXMxMDA2IHRvU2NpICAxZTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczEwMDggdG9TY2kgIDFlLTA5OTk5OTk5OTkgLT4gMEUtMTAxICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHNiYXMxMDA5IHRvU2NpICAxZS0wMDk5OTk5OTk5OSAtPiAwRS0xMDEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWRzYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1kc2JhczEwMTEgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZHNiYXMxMDEyIHRvU2NpICAxZS0wMDAwMDAwMDAwMDEwMDAwMDAwMDcgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKLWRzYmFzMTA0MSB0b1NjaSAgICAgMS4xMTUyNDQ0RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRzYmFzMTA0MiB0b1NjaSAgICAgMS4xMTUyNDQ1RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWRzYmFzMTA0MyB0b1NjaSAgICAgMS4xMTUyNDQ2RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0KLWRzYmFzMTA3NSB0b1NjaSAgIDBlKzEwMDAwICAtPiAgMEUrOTAgICBDbGFtcGVkCi1kc2JhczEwNzYgdG9TY2kgICAwZS0xMDAwMCAgLT4gIDBFLTEwMSAgQ2xhbXBlZAotZHNiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs5MCAgIENsYW1wZWQKLWRzYmFzMTA3OCB0b1NjaSAgLTBlLTEwMDAwICAtPiAtMEUtMTAxICBDbGFtcGVkCi0KLS0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcgotZHNiYXMxMTAxIHRvU2NpIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWRzYmFzMTEwMiB0b1NjaSAtMUUtMzgzIC0+IC0wRS0xMDEgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotZHNiYXMxMTAzIHRvU2NpIC0xRS0zOTggLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1kc2JhczExMDQgdG9TY2kgLTAgLT4gLTAKLWRzYmFzMTEwNSB0b1NjaSArMCAtPiAgMAotZHNiYXMxMTA2IHRvU2NpICsxRS0zOTggLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1kc2JhczExMDcgdG9TY2kgKzFFLTM4MyAtPiAgMEUtMTAxIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLWRzYmFzMTEwOCB0b1NjaSArOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG5hcnJvd2luZyBjYXNlCi1kc2JhczExMTAgdG9TY2kgMi4wMDAwMDAwMDAwMDAwMDBFLTk5IC0+IDIuMDBFLTk5IFJvdW5kZWQgU3Vibm9ybWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkc0Jhc2UuZGVjVGVzdCAtLSBiYXNlIGRlY1NpbmdsZSA8LS0+IHN0cmluZyBjb252ZXJzaW9ucyAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gVGhpcyBmaWxlIHRlc3RzIGJhc2UgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcgdG8gYSBkZWNpbWFsIG51bWJlcg0KKy0tIGFuZCBiYWNrIHRvIGEgc3RyaW5nIChpbiBTY2llbnRpZmljIGZvcm0pDQorDQorLS0gTm90ZSB0aGF0IHVubGlrZSBvdGhlciBvcGVyYXRpb25zIHRoZSBvcGVyYW5kIGlzIHN1YmplY3QgdG8gcm91bmRpbmcNCistLSB0byBjb25mb3JtIHRvIGVtYXggYW5kIHByZWNpc2lvbiBzZXR0aW5ncyAodGhhdCBpcywgbnVtYmVycyB3aWxsDQorLS0gY29uZm9ybSB0byBydWxlcyBhbmQgZXhwb25lbnQgd2lsbCBiZSBpbiBwZXJtaXR0ZWQgcmFuZ2UpLiAgVGhlDQorLS0gJ2xlZnQgaGFuZCBzaWRlJywgdGhlcmVmb3JlLCBtYXkgaGF2ZSBudW1iZXJzIHRoYXQgY2Fubm90IGJlDQorLS0gcmVwcmVzZW50ZWQgaW4gYSBkZWNTaW5nbGUuICBTb21lIHRlc3RjYXNlcyBnbyB0byB0aGUgbGltaXQgb2YgdGhlDQorLS0gbmV4dC13aWRlciBmb3JtYXQsIGFuZCBoZW5jZSB0aGVzZSB0ZXN0Y2FzZXMgbWF5IGFsc28gYmUgdXNlZCB0bw0KKy0tIHRlc3QgbmFycm93aW5nIGFuZCB3aWRlbmluZyBvcGVyYXRpb25zLg0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgNw0KK21heEV4cG9uZW50OiA5Ng0KK21pbkV4cG9uZW50OiAtOTUNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorZHNiYXMwMDEgdG9TY2kgICAgICAgMCAtPiAwDQorZHNiYXMwMDIgdG9TY2kgICAgICAgMSAtPiAxDQorZHNiYXMwMDMgdG9TY2kgICAgIDEuMCAtPiAxLjANCitkc2JhczAwNCB0b1NjaSAgICAxLjAwIC0+IDEuMDANCitkc2JhczAwNSB0b1NjaSAgICAgIDEwIC0+IDEwDQorZHNiYXMwMDYgdG9TY2kgICAgMTAwMCAtPiAxMDAwDQorZHNiYXMwMDcgdG9TY2kgICAgMTAuMCAtPiAxMC4wDQorZHNiYXMwMDggdG9TY2kgICAgMTAuMSAtPiAxMC4xDQorZHNiYXMwMDkgdG9TY2kgICAgMTAuNCAtPiAxMC40DQorZHNiYXMwMTAgdG9TY2kgICAgMTAuNSAtPiAxMC41DQorZHNiYXMwMTEgdG9TY2kgICAgMTAuNiAtPiAxMC42DQorZHNiYXMwMTIgdG9TY2kgICAgMTAuOSAtPiAxMC45DQorZHNiYXMwMTMgdG9TY2kgICAgMTEuMCAtPiAxMS4wDQorZHNiYXMwMTQgdG9TY2kgIDEuMjM0IC0+IDEuMjM0DQorZHNiYXMwMTUgdG9TY2kgIDAuMTIzIC0+IDAuMTIzDQorZHNiYXMwMTYgdG9TY2kgIDAuMDEyIC0+IDAuMDEyDQorZHNiYXMwMTcgdG9TY2kgIC0wICAgIC0+IC0wDQorZHNiYXMwMTggdG9TY2kgIC0wLjAgIC0+IC0wLjANCitkc2JhczAxOSB0b1NjaSAtMDAuMDAgLT4gLTAuMDANCisNCitkc2JhczAyMSB0b1NjaSAgICAgLTEgLT4gLTENCitkc2JhczAyMiB0b1NjaSAgIC0xLjAgLT4gLTEuMA0KK2RzYmFzMDIzIHRvU2NpICAgLTAuMSAtPiAtMC4xDQorZHNiYXMwMjQgdG9TY2kgICAtOS4xIC0+IC05LjENCitkc2JhczAyNSB0b1NjaSAgIC05LjExIC0+IC05LjExDQorZHNiYXMwMjYgdG9TY2kgICAtOS4xMTkgLT4gLTkuMTE5DQorZHNiYXMwMjcgdG9TY2kgICAtOS45OTkgLT4gLTkuOTk5DQorDQorZHNiYXMwMzAgdG9TY2kgICcxMjM0LjU2NycgICAtPiAnMTIzNC41NjcnDQorZHNiYXMwMzEgdG9TY2kgICcxMjM0LjAwMCcgICAtPiAnMTIzNC4wMDAnDQorZHNiYXMwMzIgdG9TY2kgICAnMTIzNDkxMicgICAtPiAnMTIzNDkxMicNCitkc2JhczAzMyB0b1NjaSAgICcwLjAwMDAxMjM0NTY3JyAgIC0+ICcwLjAwMDAxMjM0NTY3Jw0KK2RzYmFzMDM0IHRvU2NpICAnMC4wMDAwMDEyMzQ1NjcnICAgLT4gJzAuMDAwMDAxMjM0NTY3Jw0KK2RzYmFzMDM1IHRvU2NpICcwLjAwMDAwMDEyMzQ1NjcnICAgLT4gJzEuMjM0NTY3RS03Jw0KK2RzYmFzMDM2IHRvU2NpICcwLjAwMDAwMDAxMjM0NTY3JyAgLT4gJzEuMjM0NTY3RS04Jw0KKw0KK2RzYmFzMDM3IHRvU2NpICcwLjEyMzQ1NjQnICAgLT4gJzAuMTIzNDU2NCcNCitkc2JhczAzOCB0b1NjaSAnMC4xMjM0NTY1JyAgIC0+ICcwLjEyMzQ1NjUnDQorDQorLS0gdGVzdCBmaW5pdGUgYm91bmRzIChOZWdzIG9mLCB0aGVuIDAsIE50aW55LCBObWluLCBvdGhlciwgTm1heCkNCitkc2JzbjAwMSB0b1NjaSAtOS45OTk5OTlFKzk2IC0+IC05Ljk5OTk5OUUrOTYNCitkc2JzbjAwMiB0b1NjaSAtMUUtOTUgLT4gLTFFLTk1DQorZHNic24wMDMgdG9TY2kgLTFFLTEwMSAtPiAtMUUtMTAxIFN1Ym5vcm1hbA0KK2RzYnNuMDA0IHRvU2NpIC0wIC0+IC0wDQorZHNic24wMDUgdG9TY2kgKzAgLT4gIDANCitkc2JzbjAwNiB0b1NjaSArMUUtMTAxIC0+ICAxRS0xMDEgU3Vibm9ybWFsDQorZHNic24wMDcgdG9TY2kgKzFFLTk1IC0+ICAxRS05NQ0KK2RzYnNuMDA4IHRvU2NpICs5Ljk5OTk5OUUrOTYgLT4gIDkuOTk5OTk5RSs5Ng0KKw0KKy0tIFN0cmluZyBbbWFueSBtb3JlIGV4YW1wbGVzIGFyZSBpbXBsaWNpdGx5IHRlc3RlZCBlbHNld2hlcmVdDQorLS0gc3RyaW5ncyB3aXRob3V0IEUgY2Fubm90IGdlbmVyYXRlIEUgaW4gcmVzdWx0DQorZHNiYXMwNDAgdG9TY2kgIjEyIiAgICAgICAgLT4gJzEyJw0KK2RzYmFzMDQxIHRvU2NpICItNzYiICAgICAgIC0+ICctNzYnDQorZHNiYXMwNDIgdG9TY2kgIjEyLjc2IiAgICAgLT4gJzEyLjc2Jw0KK2RzYmFzMDQzIHRvU2NpICIrMTIuNzYiICAgIC0+ICcxMi43NicNCitkc2JhczA0NCB0b1NjaSAiMDEyLjc2IiAgICAtPiAnMTIuNzYnDQorZHNiYXMwNDUgdG9TY2kgIiswLjAwMyIgICAgLT4gJzAuMDAzJw0KK2RzYmFzMDQ2IHRvU2NpICIxNy4iICAgICAgIC0+ICcxNycNCitkc2JhczA0NyB0b1NjaSAiLjUiICAgICAgICAtPiAnMC41Jw0KK2RzYmFzMDQ4IHRvU2NpICIwNDQiICAgICAgIC0+ICc0NCcNCitkc2JhczA0OSB0b1NjaSAiMDA0NCIgICAgICAtPiAnNDQnDQorZHNiYXMwNTAgdG9TY2kgIjAuMDAwNSIgICAgICAtPiAnMC4wMDA1Jw0KK2RzYmFzMDUxIHRvU2NpICIwMC4wMDAwNSIgICAgLT4gJzAuMDAwMDUnDQorZHNiYXMwNTIgdG9TY2kgIjAuMDAwMDA1IiAgICAtPiAnMC4wMDAwMDUnDQorZHNiYXMwNTMgdG9TY2kgIjAuMDAwMDA1MCIgICAtPiAnMC4wMDAwMDUwJw0KK2RzYmFzMDU0IHRvU2NpICIwLjAwMDAwMDUiICAgLT4gJzVFLTcnDQorZHNiYXMwNTUgdG9TY2kgIjAuMDAwMDAwMDUiICAtPiAnNUUtOCcNCitkc2JhczA1NiB0b1NjaSAiMTI2NzguNTQiIC0+ICcxMjY3OC41NCcNCitkc2JhczA1NyB0b1NjaSAiMjY3OC41NDMiIC0+ICcyNjc4LjU0MycNCitkc2JhczA1OCB0b1NjaSAiMzQ1Njc4LjUiIC0+ICczNDU2NzguNScNCitkc2JhczA1OSB0b1NjaSAiMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQorZHNiYXMwNjAgdG9TY2kgIjY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQorZHNiYXMwNjEgdG9TY2kgIis2NzguNTQzMiIgLT4gJzY3OC41NDMyJw0KK2RzYmFzMDYyIHRvU2NpICIrMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQorZHNiYXMwNjMgdG9TY2kgIiswMDY3OC41NDMyIiAtPiAnNjc4LjU0MzInDQorZHNiYXMwNjQgdG9TY2kgIi02NzguNTQzMiIgIC0+ICctNjc4LjU0MzInDQorZHNiYXMwNjUgdG9TY2kgIi0wNjc4LjU0MzIiICAtPiAnLTY3OC41NDMyJw0KK2RzYmFzMDY2IHRvU2NpICItMDA2NzguNTQzMiIgIC0+ICctNjc4LjU0MzInDQorLS0gZXhhbXBsZXMNCitkc2JhczA2NyB0b1NjaSAiNUUtNiIgICAgICAgIC0+ICcwLjAwMDAwNScNCitkc2JhczA2OCB0b1NjaSAiNTBFLTciICAgICAgIC0+ICcwLjAwMDAwNTAnDQorZHNiYXMwNjkgdG9TY2kgIjVFLTciICAgICAgICAtPiAnNUUtNycNCisNCistLSBbTm8gZXhvdGljcyBhcyBubyBVbmljb2RlXQ0KKw0KKy0tIHJvdW5kZWQgd2l0aCBkb3RzIGluIGFsbCAoaW5jbHVkaW5nIGVkZ2UpIHBsYWNlcw0KK2RzYmFzMDcxIHRvU2NpICAuMTIzNDU2Nzg5MDEyMzQ1NiAgLT4gMC4xMjM0NTY4IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMDcyIHRvU2NpICAxLjIzNDU2Nzg5MDEyMzQ1NiAgLT4gMS4yMzQ1NjggSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwNzMgdG9TY2kgIDEyLjM0NTY3ODkwMTIzNDU2ICAtPiAxMi4zNDU2OCBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczA3NCB0b1NjaSAgMTIzLjQ1Njc4OTAxMjM0NTYgIC0+IDEyMy40NTY4IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMDc1IHRvU2NpICAxMjM0LjU2Nzg5MDEyMzQ1NiAgLT4gMTIzNC41NjggSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwNzYgdG9TY2kgIDEyMzQ1LjY3ODkwMTIzNDU2ICAtPiAxMjM0NS42OCBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczA3NyB0b1NjaSAgMTIzNDU2Ljc4OTAxMjM0NTYgIC0+IDEyMzQ1Ni44IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMDc4IHRvU2NpICAxMjM0NTY3Ljg5MDEyMzQ1NiAgLT4gMTIzNDU2OCAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwNzkgdG9TY2kgIDEyMzQ1Njc4LjkwMTIzNDU2ICAtPiAxLjIzNDU2OEUrNyBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczA4MCB0b1NjaSAgMTIzNDU2Nzg5LjAxMjM0NTYgIC0+IDEuMjM0NTY4RSs4IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMDgxIHRvU2NpICAxMjM0NTY3ODkwLjEyMzQ1NiAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODIgdG9TY2kgIDEyMzQ1Njc4OTAxLjIzNDU2ICAtPiAxLjIzNDU2OEUrMTAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODMgdG9TY2kgIDEyMzQ1Njc4OTAxMi4zNDU2ICAtPiAxLjIzNDU2OEUrMTEgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODQgdG9TY2kgIDEyMzQ1Njc4OTAxMjMuNDU2ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODUgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0LjU2ICAtPiAxLjIzNDU2OEUrMTMgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODYgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NS42ICAtPiAxLjIzNDU2OEUrMTQgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODcgdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYuICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMwODggdG9TY2kgIDEyMzQ1Njc4OTAxMjM0NTYgICAtPiAxLjIzNDU2OEUrMTUgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTnVtYmVycyB3aXRoIEUNCitkc2JhczEzMCB0b1NjaSAiMC4wMDBFLTEiICAtPiAnMC4wMDAwJw0KK2RzYmFzMTMxIHRvU2NpICIwLjAwMEUtMiIgIC0+ICcwLjAwMDAwJw0KK2RzYmFzMTMyIHRvU2NpICIwLjAwMEUtMyIgIC0+ICcwLjAwMDAwMCcNCitkc2JhczEzMyB0b1NjaSAiMC4wMDBFLTQiICAtPiAnMEUtNycNCitkc2JhczEzNCB0b1NjaSAiMC4wMEUtMiIgICAtPiAnMC4wMDAwJw0KK2RzYmFzMTM1IHRvU2NpICIwLjAwRS0zIiAgIC0+ICcwLjAwMDAwJw0KK2RzYmFzMTM2IHRvU2NpICIwLjAwRS00IiAgIC0+ICcwLjAwMDAwMCcNCitkc2JhczEzNyB0b1NjaSAiMC4wMEUtNSIgICAtPiAnMEUtNycNCitkc2JhczEzOCB0b1NjaSAiKzBFKzkiICAgICAtPiAnMEUrOScNCitkc2JhczEzOSB0b1NjaSAiLTBFKzkiICAgICAtPiAnLTBFKzknDQorZHNiYXMxNDAgdG9TY2kgIjFFKzkiICAgICAgLT4gJzFFKzknDQorZHNiYXMxNDEgdG9TY2kgIjFlKzA5IiAgICAgLT4gJzFFKzknDQorZHNiYXMxNDIgdG9TY2kgIjFFKzkwIiAgICAgLT4gJzFFKzkwJw0KK2RzYmFzMTQzIHRvU2NpICIrMUUrMDA5IiAgIC0+ICcxRSs5Jw0KK2RzYmFzMTQ0IHRvU2NpICIwRSs5IiAgICAgIC0+ICcwRSs5Jw0KK2RzYmFzMTQ1IHRvU2NpICIxRSs5IiAgICAgIC0+ICcxRSs5Jw0KK2RzYmFzMTQ2IHRvU2NpICIxRSswOSIgICAgIC0+ICcxRSs5Jw0KK2RzYmFzMTQ3IHRvU2NpICIxZSs5MCIgICAgIC0+ICcxRSs5MCcNCitkc2JhczE0OCB0b1NjaSAiMUUrMDA5IiAgICAtPiAnMUUrOScNCitkc2JhczE0OSB0b1NjaSAiMDAwRSs5IiAgICAtPiAnMEUrOScNCitkc2JhczE1MCB0b1NjaSAiMUU5IiAgICAgICAtPiAnMUUrOScNCitkc2JhczE1MSB0b1NjaSAiMWUwOSIgICAgICAtPiAnMUUrOScNCitkc2JhczE1MiB0b1NjaSAiMUU5MCIgICAgICAtPiAnMUUrOTAnDQorZHNiYXMxNTMgdG9TY2kgIjFFMDA5IiAgICAgLT4gJzFFKzknDQorZHNiYXMxNTQgdG9TY2kgIjBFOSIgICAgICAgLT4gJzBFKzknDQorZHNiYXMxNTUgdG9TY2kgIjAuMDAwZSswIiAgLT4gJzAuMDAwJw0KK2RzYmFzMTU2IHRvU2NpICIwLjAwMEUtMSIgIC0+ICcwLjAwMDAnDQorZHNiYXMxNTcgdG9TY2kgIjRFKzkiICAgICAgLT4gJzRFKzknDQorZHNiYXMxNTggdG9TY2kgIjQ0RSs5IiAgICAgLT4gJzQuNEUrMTAnDQorZHNiYXMxNTkgdG9TY2kgIjAuNzNlLTciICAgLT4gJzcuM0UtOCcNCitkc2JhczE2MCB0b1NjaSAiMDBFKzkiICAgICAtPiAnMEUrOScNCitkc2JhczE2MSB0b1NjaSAiMDBFLTkiICAgICAtPiAnMEUtOScNCitkc2JhczE2MiB0b1NjaSAiMTBFKzkiICAgICAtPiAnMS4wRSsxMCcNCitkc2JhczE2MyB0b1NjaSAiMTBFKzA5IiAgICAtPiAnMS4wRSsxMCcNCitkc2JhczE2NCB0b1NjaSAiMTBlKzkwIiAgICAtPiAnMS4wRSs5MScNCitkc2JhczE2NSB0b1NjaSAiMTBFKzAwOSIgICAtPiAnMS4wRSsxMCcNCitkc2JhczE2NiB0b1NjaSAiMTAwZSs5IiAgICAtPiAnMS4wMEUrMTEnDQorZHNiYXMxNjcgdG9TY2kgIjEwMGUrMDkiICAgLT4gJzEuMDBFKzExJw0KK2RzYmFzMTY4IHRvU2NpICIxMDBFKzkwIiAgIC0+ICcxLjAwRSs5MicNCitkc2JhczE2OSB0b1NjaSAiMTAwZSswMDkiICAtPiAnMS4wMEUrMTEnDQorDQorZHNiYXMxNzAgdG9TY2kgIjEuMjY1IiAgICAgLT4gJzEuMjY1Jw0KK2RzYmFzMTcxIHRvU2NpICIxLjI2NUUtMjAiIC0+ICcxLjI2NUUtMjAnDQorZHNiYXMxNzIgdG9TY2kgIjEuMjY1RS04IiAgLT4gJzEuMjY1RS04Jw0KK2RzYmFzMTczIHRvU2NpICIxLjI2NUUtNCIgIC0+ICcwLjAwMDEyNjUnDQorZHNiYXMxNzQgdG9TY2kgIjEuMjY1RS0zIiAgLT4gJzAuMDAxMjY1Jw0KK2RzYmFzMTc1IHRvU2NpICIxLjI2NUUtMiIgIC0+ICcwLjAxMjY1Jw0KK2RzYmFzMTc2IHRvU2NpICIxLjI2NUUtMSIgIC0+ICcwLjEyNjUnDQorZHNiYXMxNzcgdG9TY2kgIjEuMjY1RS0wIiAgLT4gJzEuMjY1Jw0KK2RzYmFzMTc4IHRvU2NpICIxLjI2NUUrMSIgIC0+ICcxMi42NScNCitkc2JhczE3OSB0b1NjaSAiMS4yNjVFKzIiICAtPiAnMTI2LjUnDQorZHNiYXMxODAgdG9TY2kgIjEuMjY1RSszIiAgLT4gJzEyNjUnDQorZHNiYXMxODEgdG9TY2kgIjEuMjY1RSs0IiAgLT4gJzEuMjY1RSs0Jw0KK2RzYmFzMTgyIHRvU2NpICIxLjI2NUUrOCIgIC0+ICcxLjI2NUUrOCcNCitkc2JhczE4MyB0b1NjaSAiMS4yNjVFKzIwIiAtPiAnMS4yNjVFKzIwJw0KKw0KK2RzYmFzMTkwIHRvU2NpICIxMi42NSIgICAgIC0+ICcxMi42NScNCitkc2JhczE5MSB0b1NjaSAiMTIuNjVFLTIwIiAtPiAnMS4yNjVFLTE5Jw0KK2RzYmFzMTkyIHRvU2NpICIxMi42NUUtOCIgIC0+ICcxLjI2NUUtNycNCitkc2JhczE5MyB0b1NjaSAiMTIuNjVFLTQiICAtPiAnMC4wMDEyNjUnDQorZHNiYXMxOTQgdG9TY2kgIjEyLjY1RS0zIiAgLT4gJzAuMDEyNjUnDQorZHNiYXMxOTUgdG9TY2kgIjEyLjY1RS0yIiAgLT4gJzAuMTI2NScNCitkc2JhczE5NiB0b1NjaSAiMTIuNjVFLTEiICAtPiAnMS4yNjUnDQorZHNiYXMxOTcgdG9TY2kgIjEyLjY1RS0wIiAgLT4gJzEyLjY1Jw0KK2RzYmFzMTk4IHRvU2NpICIxMi42NUUrMSIgIC0+ICcxMjYuNScNCitkc2JhczE5OSB0b1NjaSAiMTIuNjVFKzIiICAtPiAnMTI2NScNCitkc2JhczIwMCB0b1NjaSAiMTIuNjVFKzMiICAtPiAnMS4yNjVFKzQnDQorZHNiYXMyMDEgdG9TY2kgIjEyLjY1RSs0IiAgLT4gJzEuMjY1RSs1Jw0KK2RzYmFzMjAyIHRvU2NpICIxMi42NUUrOCIgIC0+ICcxLjI2NUUrOScNCitkc2JhczIwMyB0b1NjaSAiMTIuNjVFKzIwIiAtPiAnMS4yNjVFKzIxJw0KKw0KK2RzYmFzMjEwIHRvU2NpICIxMjYuNSIgICAgIC0+ICcxMjYuNScNCitkc2JhczIxMSB0b1NjaSAiMTI2LjVFLTIwIiAtPiAnMS4yNjVFLTE4Jw0KK2RzYmFzMjEyIHRvU2NpICIxMjYuNUUtOCIgIC0+ICcwLjAwMDAwMTI2NScNCitkc2JhczIxMyB0b1NjaSAiMTI2LjVFLTQiICAtPiAnMC4wMTI2NScNCitkc2JhczIxNCB0b1NjaSAiMTI2LjVFLTMiICAtPiAnMC4xMjY1Jw0KK2RzYmFzMjE1IHRvU2NpICIxMjYuNUUtMiIgIC0+ICcxLjI2NScNCitkc2JhczIxNiB0b1NjaSAiMTI2LjVFLTEiICAtPiAnMTIuNjUnDQorZHNiYXMyMTcgdG9TY2kgIjEyNi41RS0wIiAgLT4gJzEyNi41Jw0KK2RzYmFzMjE4IHRvU2NpICIxMjYuNUUrMSIgIC0+ICcxMjY1Jw0KK2RzYmFzMjE5IHRvU2NpICIxMjYuNUUrMiIgIC0+ICcxLjI2NUUrNCcNCitkc2JhczIyMCB0b1NjaSAiMTI2LjVFKzMiICAtPiAnMS4yNjVFKzUnDQorZHNiYXMyMjEgdG9TY2kgIjEyNi41RSs0IiAgLT4gJzEuMjY1RSs2Jw0KK2RzYmFzMjIyIHRvU2NpICIxMjYuNUUrOCIgIC0+ICcxLjI2NUUrMTAnDQorZHNiYXMyMjMgdG9TY2kgIjEyNi41RSsyMCIgLT4gJzEuMjY1RSsyMicNCisNCitkc2JhczIzMCB0b1NjaSAiMTI2NSIgICAgIC0+ICcxMjY1Jw0KK2RzYmFzMjMxIHRvU2NpICIxMjY1RS0yMCIgLT4gJzEuMjY1RS0xNycNCitkc2JhczIzMiB0b1NjaSAiMTI2NUUtOCIgIC0+ICcwLjAwMDAxMjY1Jw0KK2RzYmFzMjMzIHRvU2NpICIxMjY1RS00IiAgLT4gJzAuMTI2NScNCitkc2JhczIzNCB0b1NjaSAiMTI2NUUtMyIgIC0+ICcxLjI2NScNCitkc2JhczIzNSB0b1NjaSAiMTI2NUUtMiIgIC0+ICcxMi42NScNCitkc2JhczIzNiB0b1NjaSAiMTI2NUUtMSIgIC0+ICcxMjYuNScNCitkc2JhczIzNyB0b1NjaSAiMTI2NUUtMCIgIC0+ICcxMjY1Jw0KK2RzYmFzMjM4IHRvU2NpICIxMjY1RSsxIiAgLT4gJzEuMjY1RSs0Jw0KK2RzYmFzMjM5IHRvU2NpICIxMjY1RSsyIiAgLT4gJzEuMjY1RSs1Jw0KK2RzYmFzMjQwIHRvU2NpICIxMjY1RSszIiAgLT4gJzEuMjY1RSs2Jw0KK2RzYmFzMjQxIHRvU2NpICIxMjY1RSs0IiAgLT4gJzEuMjY1RSs3Jw0KK2RzYmFzMjQyIHRvU2NpICIxMjY1RSs4IiAgLT4gJzEuMjY1RSsxMScNCitkc2JhczI0MyB0b1NjaSAiMTI2NUUrMjAiIC0+ICcxLjI2NUUrMjMnDQorDQorZHNiYXMyNTAgdG9TY2kgIjAuMTI2NSIgICAgIC0+ICcwLjEyNjUnDQorZHNiYXMyNTEgdG9TY2kgIjAuMTI2NUUtMjAiIC0+ICcxLjI2NUUtMjEnDQorZHNiYXMyNTIgdG9TY2kgIjAuMTI2NUUtOCIgIC0+ICcxLjI2NUUtOScNCitkc2JhczI1MyB0b1NjaSAiMC4xMjY1RS00IiAgLT4gJzAuMDAwMDEyNjUnDQorZHNiYXMyNTQgdG9TY2kgIjAuMTI2NUUtMyIgIC0+ICcwLjAwMDEyNjUnDQorZHNiYXMyNTUgdG9TY2kgIjAuMTI2NUUtMiIgIC0+ICcwLjAwMTI2NScNCitkc2JhczI1NiB0b1NjaSAiMC4xMjY1RS0xIiAgLT4gJzAuMDEyNjUnDQorZHNiYXMyNTcgdG9TY2kgIjAuMTI2NUUtMCIgIC0+ICcwLjEyNjUnDQorZHNiYXMyNTggdG9TY2kgIjAuMTI2NUUrMSIgIC0+ICcxLjI2NScNCitkc2JhczI1OSB0b1NjaSAiMC4xMjY1RSsyIiAgLT4gJzEyLjY1Jw0KK2RzYmFzMjYwIHRvU2NpICIwLjEyNjVFKzMiICAtPiAnMTI2LjUnDQorZHNiYXMyNjEgdG9TY2kgIjAuMTI2NUUrNCIgIC0+ICcxMjY1Jw0KK2RzYmFzMjYyIHRvU2NpICIwLjEyNjVFKzgiICAtPiAnMS4yNjVFKzcnDQorZHNiYXMyNjMgdG9TY2kgIjAuMTI2NUUrMjAiIC0+ICcxLjI2NUUrMTknDQorDQorLS0gc29tZSBtb3JlIG5lZ2F0aXZlIHplcm9zIFtzeXN0ZW1hdGljIHRlc3RzIGJlbG93XQ0KK2RzYmFzMjkwIHRvU2NpICItMC4wMDBFLTEiICAtPiAnLTAuMDAwMCcNCitkc2JhczI5MSB0b1NjaSAiLTAuMDAwRS0yIiAgLT4gJy0wLjAwMDAwJw0KK2RzYmFzMjkyIHRvU2NpICItMC4wMDBFLTMiICAtPiAnLTAuMDAwMDAwJw0KK2RzYmFzMjkzIHRvU2NpICItMC4wMDBFLTQiICAtPiAnLTBFLTcnDQorZHNiYXMyOTQgdG9TY2kgIi0wLjAwRS0yIiAgIC0+ICctMC4wMDAwJw0KK2RzYmFzMjk1IHRvU2NpICItMC4wMEUtMyIgICAtPiAnLTAuMDAwMDAnDQorZHNiYXMyOTYgdG9TY2kgIi0wLjBFLTIiICAgIC0+ICctMC4wMDAnDQorZHNiYXMyOTcgdG9TY2kgIi0wLjBFLTMiICAgIC0+ICctMC4wMDAwJw0KK2RzYmFzMjk4IHRvU2NpICItMEUtMiIgICAgICAtPiAnLTAuMDAnDQorZHNiYXMyOTkgdG9TY2kgIi0wRS0zIiAgICAgIC0+ICctMC4wMDAnDQorDQorLS0gRW5naW5lZXJpbmcgbm90YXRpb24gdGVzdHMNCitkc2JhczMwMSAgdG9TY2kgMTBlMTIgIC0+IDEuMEUrMTMNCitkc2JhczMwMiAgdG9FbmcgMTBlMTIgIC0+IDEwRSsxMg0KK2RzYmFzMzAzICB0b1NjaSAxMGUxMSAgLT4gMS4wRSsxMg0KK2RzYmFzMzA0ICB0b0VuZyAxMGUxMSAgLT4gMS4wRSsxMg0KK2RzYmFzMzA1ICB0b1NjaSAxMGUxMCAgLT4gMS4wRSsxMQ0KK2RzYmFzMzA2ICB0b0VuZyAxMGUxMCAgLT4gMTAwRSs5DQorZHNiYXMzMDcgIHRvU2NpIDEwZTkgICAtPiAxLjBFKzEwDQorZHNiYXMzMDggIHRvRW5nIDEwZTkgICAtPiAxMEUrOQ0KK2RzYmFzMzA5ICB0b1NjaSAxMGU4ICAgLT4gMS4wRSs5DQorZHNiYXMzMTAgIHRvRW5nIDEwZTggICAtPiAxLjBFKzkNCitkc2JhczMxMSAgdG9TY2kgMTBlNyAgIC0+IDEuMEUrOA0KK2RzYmFzMzEyICB0b0VuZyAxMGU3ICAgLT4gMTAwRSs2DQorZHNiYXMzMTMgIHRvU2NpIDEwZTYgICAtPiAxLjBFKzcNCitkc2JhczMxNCAgdG9FbmcgMTBlNiAgIC0+IDEwRSs2DQorZHNiYXMzMTUgIHRvU2NpIDEwZTUgICAtPiAxLjBFKzYNCitkc2JhczMxNiAgdG9FbmcgMTBlNSAgIC0+IDEuMEUrNg0KK2RzYmFzMzE3ICB0b1NjaSAxMGU0ICAgLT4gMS4wRSs1DQorZHNiYXMzMTggIHRvRW5nIDEwZTQgICAtPiAxMDBFKzMNCitkc2JhczMxOSAgdG9TY2kgMTBlMyAgIC0+IDEuMEUrNA0KK2RzYmFzMzIwICB0b0VuZyAxMGUzICAgLT4gMTBFKzMNCitkc2JhczMyMSAgdG9TY2kgMTBlMiAgIC0+IDEuMEUrMw0KK2RzYmFzMzIyICB0b0VuZyAxMGUyICAgLT4gMS4wRSszDQorZHNiYXMzMjMgIHRvU2NpIDEwZTEgICAtPiAxLjBFKzINCitkc2JhczMyNCAgdG9FbmcgMTBlMSAgIC0+IDEwMA0KK2RzYmFzMzI1ICB0b1NjaSAxMGUwICAgLT4gMTANCitkc2JhczMyNiAgdG9FbmcgMTBlMCAgIC0+IDEwDQorZHNiYXMzMjcgIHRvU2NpIDEwZS0xICAtPiAxLjANCitkc2JhczMyOCAgdG9FbmcgMTBlLTEgIC0+IDEuMA0KK2RzYmFzMzI5ICB0b1NjaSAxMGUtMiAgLT4gMC4xMA0KK2RzYmFzMzMwICB0b0VuZyAxMGUtMiAgLT4gMC4xMA0KK2RzYmFzMzMxICB0b1NjaSAxMGUtMyAgLT4gMC4wMTANCitkc2JhczMzMiAgdG9FbmcgMTBlLTMgIC0+IDAuMDEwDQorZHNiYXMzMzMgIHRvU2NpIDEwZS00ICAtPiAwLjAwMTANCitkc2JhczMzNCAgdG9FbmcgMTBlLTQgIC0+IDAuMDAxMA0KK2RzYmFzMzM1ICB0b1NjaSAxMGUtNSAgLT4gMC4wMDAxMA0KK2RzYmFzMzM2ICB0b0VuZyAxMGUtNSAgLT4gMC4wMDAxMA0KK2RzYmFzMzM3ICB0b1NjaSAxMGUtNiAgLT4gMC4wMDAwMTANCitkc2JhczMzOCAgdG9FbmcgMTBlLTYgIC0+IDAuMDAwMDEwDQorZHNiYXMzMzkgIHRvU2NpIDEwZS03ICAtPiAwLjAwMDAwMTANCitkc2JhczM0MCAgdG9FbmcgMTBlLTcgIC0+IDAuMDAwMDAxMA0KK2RzYmFzMzQxICB0b1NjaSAxMGUtOCAgLT4gMS4wRS03DQorZHNiYXMzNDIgIHRvRW5nIDEwZS04ICAtPiAxMDBFLTkNCitkc2JhczM0MyAgdG9TY2kgMTBlLTkgIC0+IDEuMEUtOA0KK2RzYmFzMzQ0ICB0b0VuZyAxMGUtOSAgLT4gMTBFLTkNCitkc2JhczM0NSAgdG9TY2kgMTBlLTEwIC0+IDEuMEUtOQ0KK2RzYmFzMzQ2ICB0b0VuZyAxMGUtMTAgLT4gMS4wRS05DQorZHNiYXMzNDcgIHRvU2NpIDEwZS0xMSAtPiAxLjBFLTEwDQorZHNiYXMzNDggIHRvRW5nIDEwZS0xMSAtPiAxMDBFLTEyDQorZHNiYXMzNDkgIHRvU2NpIDEwZS0xMiAtPiAxLjBFLTExDQorZHNiYXMzNTAgIHRvRW5nIDEwZS0xMiAtPiAxMEUtMTINCitkc2JhczM1MSAgdG9TY2kgMTBlLTEzIC0+IDEuMEUtMTINCitkc2JhczM1MiAgdG9FbmcgMTBlLTEzIC0+IDEuMEUtMTINCisNCitkc2JhczM2MSAgdG9TY2kgN0UxMiAgLT4gN0UrMTINCitkc2JhczM2MiAgdG9FbmcgN0UxMiAgLT4gN0UrMTINCitkc2JhczM2MyAgdG9TY2kgN0UxMSAgLT4gN0UrMTENCitkc2JhczM2NCAgdG9FbmcgN0UxMSAgLT4gNzAwRSs5DQorZHNiYXMzNjUgIHRvU2NpIDdFMTAgIC0+IDdFKzEwDQorZHNiYXMzNjYgIHRvRW5nIDdFMTAgIC0+IDcwRSs5DQorZHNiYXMzNjcgIHRvU2NpIDdFOSAgIC0+IDdFKzkNCitkc2JhczM2OCAgdG9FbmcgN0U5ICAgLT4gN0UrOQ0KK2RzYmFzMzY5ICB0b1NjaSA3RTggICAtPiA3RSs4DQorZHNiYXMzNzAgIHRvRW5nIDdFOCAgIC0+IDcwMEUrNg0KK2RzYmFzMzcxICB0b1NjaSA3RTcgICAtPiA3RSs3DQorZHNiYXMzNzIgIHRvRW5nIDdFNyAgIC0+IDcwRSs2DQorZHNiYXMzNzMgIHRvU2NpIDdFNiAgIC0+IDdFKzYNCitkc2JhczM3NCAgdG9FbmcgN0U2ICAgLT4gN0UrNg0KK2RzYmFzMzc1ICB0b1NjaSA3RTUgICAtPiA3RSs1DQorZHNiYXMzNzYgIHRvRW5nIDdFNSAgIC0+IDcwMEUrMw0KK2RzYmFzMzc3ICB0b1NjaSA3RTQgICAtPiA3RSs0DQorZHNiYXMzNzggIHRvRW5nIDdFNCAgIC0+IDcwRSszDQorZHNiYXMzNzkgIHRvU2NpIDdFMyAgIC0+IDdFKzMNCitkc2JhczM4MCAgdG9FbmcgN0UzICAgLT4gN0UrMw0KK2RzYmFzMzgxICB0b1NjaSA3RTIgICAtPiA3RSsyDQorZHNiYXMzODIgIHRvRW5nIDdFMiAgIC0+IDcwMA0KK2RzYmFzMzgzICB0b1NjaSA3RTEgICAtPiA3RSsxDQorZHNiYXMzODQgIHRvRW5nIDdFMSAgIC0+IDcwDQorZHNiYXMzODUgIHRvU2NpIDdFMCAgIC0+IDcNCitkc2JhczM4NiAgdG9FbmcgN0UwICAgLT4gNw0KK2RzYmFzMzg3ICB0b1NjaSA3RS0xICAtPiAwLjcNCitkc2JhczM4OCAgdG9FbmcgN0UtMSAgLT4gMC43DQorZHNiYXMzODkgIHRvU2NpIDdFLTIgIC0+IDAuMDcNCitkc2JhczM5MCAgdG9FbmcgN0UtMiAgLT4gMC4wNw0KK2RzYmFzMzkxICB0b1NjaSA3RS0zICAtPiAwLjAwNw0KK2RzYmFzMzkyICB0b0VuZyA3RS0zICAtPiAwLjAwNw0KK2RzYmFzMzkzICB0b1NjaSA3RS00ICAtPiAwLjAwMDcNCitkc2JhczM5NCAgdG9FbmcgN0UtNCAgLT4gMC4wMDA3DQorZHNiYXMzOTUgIHRvU2NpIDdFLTUgIC0+IDAuMDAwMDcNCitkc2JhczM5NiAgdG9FbmcgN0UtNSAgLT4gMC4wMDAwNw0KK2RzYmFzMzk3ICB0b1NjaSA3RS02ICAtPiAwLjAwMDAwNw0KK2RzYmFzMzk4ICB0b0VuZyA3RS02ICAtPiAwLjAwMDAwNw0KK2RzYmFzMzk5ICB0b1NjaSA3RS03ICAtPiA3RS03DQorZHNiYXM0MDAgIHRvRW5nIDdFLTcgIC0+IDcwMEUtOQ0KK2RzYmFzNDAxICB0b1NjaSA3RS04ICAtPiA3RS04DQorZHNiYXM0MDIgIHRvRW5nIDdFLTggIC0+IDcwRS05DQorZHNiYXM0MDMgIHRvU2NpIDdFLTkgIC0+IDdFLTkNCitkc2JhczQwNCAgdG9FbmcgN0UtOSAgLT4gN0UtOQ0KK2RzYmFzNDA1ICB0b1NjaSA3RS0xMCAtPiA3RS0xMA0KK2RzYmFzNDA2ICB0b0VuZyA3RS0xMCAtPiA3MDBFLTEyDQorZHNiYXM0MDcgIHRvU2NpIDdFLTExIC0+IDdFLTExDQorZHNiYXM0MDggIHRvRW5nIDdFLTExIC0+IDcwRS0xMg0KK2RzYmFzNDA5ICB0b1NjaSA3RS0xMiAtPiA3RS0xMg0KK2RzYmFzNDEwICB0b0VuZyA3RS0xMiAtPiA3RS0xMg0KK2RzYmFzNDExICB0b1NjaSA3RS0xMyAtPiA3RS0xMw0KK2RzYmFzNDEyICB0b0VuZyA3RS0xMyAtPiA3MDBFLTE1DQorDQorLS0gRXhhY3RzIHJlbWFpbiBleGFjdCB1cCB0byBwcmVjaXNpb24gLi4NCitkc2JhczQyMCAgdG9TY2kgICAgMTAwIC0+IDEwMA0KK2RzYmFzNDIyICB0b1NjaSAgIDEwMDAgLT4gMTAwMA0KK2RzYmFzNDI0ICB0b1NjaSAgOTk5LjkgLT4gIDk5OS45DQorZHNiYXM0MjYgIHRvU2NpIDEwMDAuMCAtPiAxMDAwLjANCitkc2JhczQyOCAgdG9TY2kgMTAwMC4xIC0+IDEwMDAuMQ0KK2RzYmFzNDMwICB0b1NjaSAxMDAwMCAtPiAxMDAwMA0KK2RzYmFzNDMyICB0b1NjaSAxMDAwICAgICAgICAtPiAxMDAwDQorZHNiYXM0MzQgIHRvU2NpIDEwMDAwICAgICAgIC0+IDEwMDAwDQorZHNiYXM0MzYgIHRvU2NpIDEwMDAwMCAgICAgIC0+IDEwMDAwMA0KK2RzYmFzNDM4ICB0b1NjaSAxMDAwMDAwICAgICAtPiAxMDAwMDAwDQorZHNiYXM0NDAgIHRvU2NpIDEwMDAwMDAwICAgIC0+IDEuMDAwMDAwRSs3ICAgUm91bmRlZA0KK2RzYmFzNDQyICB0b1NjaSAxMDAwMDAwMCAgICAtPiAxLjAwMDAwMEUrNyAgIFJvdW5kZWQNCitkc2JhczQ0NCAgdG9TY2kgMTAwMDAwMDMgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ0NiAgdG9TY2kgMTAwMDAwMDUgICAgLT4gMS4wMDAwMDBFKzcgICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ0OCAgdG9TY2kgMTAwMDAwMDUwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ1MCAgdG9TY2kgMTAwMDAwMDkgICAgLT4gMS4wMDAwMDFFKzcgICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ1MiAgdG9TY2kgMTAwMDAwMDAwICAgLT4gMS4wMDAwMDBFKzggICBSb3VuZGVkDQorZHNiYXM0NTQgIHRvU2NpIDEwMDAwMDAwMyAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQorZHNiYXM0NTYgIHRvU2NpIDEwMDAwMDAwNSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQorZHNiYXM0NTggIHRvU2NpIDEwMDAwMDAwOSAgIC0+IDEuMDAwMDAwRSs4ICAgUm91bmRlZCBJbmV4YWN0DQorZHNiYXM0NjAgIHRvU2NpIDEwMDAwMDAwMDAgIC0+IDEuMDAwMDAwRSs5ICAgUm91bmRlZA0KK2RzYmFzNDYyICB0b1NjaSAxMDAwMDAwMzAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdA0KK2RzYmFzNDY0ICB0b1NjaSAxMDAwMDAwNTAwICAtPiAxLjAwMDAwMEUrOSAgIFJvdW5kZWQgSW5leGFjdA0KK2RzYmFzNDY2ICB0b1NjaSAxMDAwMDAwOTAwICAtPiAxLjAwMDAwMUUrOSAgIFJvdW5kZWQgSW5leGFjdA0KK2RzYmFzNDY4ICB0b1NjaSAxMDAwMDAwMDAwMCAtPiAxLjAwMDAwMEUrMTAgIFJvdW5kZWQNCitkc2JhczQ3MCAgdG9TY2kgMTAwMDAwMDMwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ3MiAgdG9TY2kgMTAwMDAwMDUwMDAgLT4gMS4wMDAwMDBFKzEwICBSb3VuZGVkIEluZXhhY3QNCitkc2JhczQ3NCAgdG9TY2kgMTAwMDAwMDkwMDAgLT4gMS4wMDAwMDFFKzEwICBSb3VuZGVkIEluZXhhY3QNCisNCistLSBjaGVjayByb3VuZGluZyBtb2RlcyBoZWVkZWQNCityb3VuZGluZzogIGNlaWxpbmcNCitkc2JzcjQwMSAgdG9TY2kgIDEuMTEyMzQ1MCAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQNCitkc2JzcjQwMiAgdG9TY2kgIDEuMTEyMzQ1NDkgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDAzICB0b1NjaSAgMS4xMTIzNDU1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I0MDQgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIHVwDQorZHNic3I0MDUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I0MDYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQwNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDA4ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBmbG9vcg0KK2RzYnNyNDEwICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KK2RzYnNyNDExICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I0MTIgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQxMyAgdG9TY2kgIDEuMTEyMzQ1NTEgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl9kb3duDQorZHNic3I0MTUgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I0MTYgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQxNyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDE4ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I0MTkgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZXZlbg0KK2RzYnNyNDIxICB0b1NjaSAgMS4xMTIzNDUwICAgIC0+ICAxLjExMjM0NSAgUm91bmRlZA0KK2RzYnNyNDIyICB0b1NjaSAgMS4xMTIzNDU0OSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I0MjMgIHRvU2NpICAxLjExMjM0NTUwICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQyNCAgdG9TY2kgIDEuMTEyMzQ2NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDI1ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBkb3duDQorZHNic3I0MjYgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I0MjcgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQyOCAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDI5ICB0b1NjaSAgMS4xMTIzNDU1MSAgIC0+ICAxLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX3VwDQorZHNic3I0MzEgIHRvU2NpICAxLjExMjM0NTAgICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I0MzIgIHRvU2NpICAxLjExMjM0NTQ5ICAgLT4gIDEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjQzMyAgdG9TY2kgIDEuMTEyMzQ1NTAgICAtPiAgMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNDM0ICB0b1NjaSAgMS4xMTIzNDY1MCAgIC0+ICAxLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I0MzUgIHRvU2NpICAxLjExMjM0NTUxICAgLT4gIDEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCistLSBuZWdhdGl2ZXMNCityb3VuZGluZzogIGNlaWxpbmcNCitkc2JzcjUwMSAgdG9TY2kgLTEuMTEyMzQ1MCAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQNCitkc2JzcjUwMiAgdG9TY2kgLTEuMTEyMzQ1NDkgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTAzICB0b1NjaSAtMS4xMTIzNDU1MCAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I1MDQgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIHVwDQorZHNic3I1MDUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I1MDYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUwNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTA4ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBmbG9vcg0KK2RzYnNyNTEwICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KK2RzYnNyNTExICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I1MTIgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUxMyAgdG9TY2kgLTEuMTEyMzQ1NTEgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK3JvdW5kaW5nOiAgaGFsZl9kb3duDQorZHNic3I1MTUgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I1MTYgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUxNyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTE4ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I1MTkgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogIGhhbGZfZXZlbg0KK2RzYnNyNTIxICB0b1NjaSAtMS4xMTIzNDUwICAgIC0+IC0xLjExMjM0NSAgUm91bmRlZA0KK2RzYnNyNTIyICB0b1NjaSAtMS4xMTIzNDU0OSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I1MjMgIHRvU2NpIC0xLjExMjM0NTUwICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUyNCAgdG9TY2kgLTEuMTEyMzQ2NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTI1ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NiAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBkb3duDQorZHNic3I1MjYgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I1MjcgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUyOCAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDUgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTI5ICB0b1NjaSAtMS4xMTIzNDU1MSAgIC0+IC0xLjExMjM0NSAgUm91bmRlZCBJbmV4YWN0DQorcm91bmRpbmc6ICBoYWxmX3VwDQorZHNic3I1MzEgIHRvU2NpIC0xLjExMjM0NTAgICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkDQorZHNic3I1MzIgIHRvU2NpIC0xLjExMjM0NTQ5ICAgLT4gLTEuMTEyMzQ1ICBSb3VuZGVkIEluZXhhY3QNCitkc2JzcjUzMyAgdG9TY2kgLTEuMTEyMzQ1NTAgICAtPiAtMS4xMTIzNDYgIFJvdW5kZWQgSW5leGFjdA0KK2RzYnNyNTM0ICB0b1NjaSAtMS4xMTIzNDY1MCAgIC0+IC0xLjExMjM0NyAgUm91bmRlZCBJbmV4YWN0DQorZHNic3I1MzUgIHRvU2NpIC0xLjExMjM0NTUxICAgLT4gLTEuMTEyMzQ2ICBSb3VuZGVkIEluZXhhY3QNCisNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gVGhlICdiYWRkaWVzJyB0ZXN0cyBmcm9tIERpYWdCaWdEZWNpbWFsLCBwbHVzIHNvbWUgbmV3IG9uZXMNCitkc2JhczUwMCB0b1NjaSAnMS4uMicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwMSB0b1NjaSAnLicgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwMiB0b1NjaSAnLi4nICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwMyB0b1NjaSAnKysxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwNCB0b1NjaSAnLS0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwNSB0b1NjaSAnLSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwNiB0b1NjaSAnKy0xJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwNyB0b1NjaSAnMTJlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwOCB0b1NjaSAnMTJlKysnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUwOSB0b1NjaSAnMTJmNCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxMCB0b1NjaSAnICsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxMSB0b1NjaSAnKyAxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxMiB0b1NjaSAnMTIgJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxMyB0b1NjaSAnICsgMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxNCB0b1NjaSAnIC0gMSAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxNSB0b1NjaSAneCcgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxNiB0b1NjaSAnLTEtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxNyB0b1NjaSAnMTItJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxOCB0b1NjaSAnMysnICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUxOSB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyMCB0b1NjaSAnMWUtJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyMSB0b1NjaSAnN2U5OTk5OWEnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyMiB0b1NjaSAnN2UxMjM1Njc4OTB4JyAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyMyB0b1NjaSAnN2UxMjM1Njc4OTAxMngnICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyNCB0b1NjaSAnJyAgICAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyNSB0b1NjaSAnZTEwMCcgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyNiB0b1NjaSAnXHUwZTVhJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyNyB0b1NjaSAnXHUwYjY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyOCB0b1NjaSAnMTIzLDY1JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUyOSB0b1NjaSAnMS4zNC41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzMCB0b1NjaSAnLjEyMy41JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzMSB0b1NjaSAnMDEuMzUuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzMiB0b1NjaSAnMDEuMzUtJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzMyB0b1NjaSAnMDAwMC4uJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzNCB0b1NjaSAnLjAwMDAuJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzNSB0b1NjaSAnMDAuLjAwJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzNiB0b1NjaSAnMTExZSoxMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzNyB0b1NjaSAnMTExZTEyMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzOCB0b1NjaSAnMTExZSsxMisnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczUzOSB0b1NjaSAnMTExZTEtMy0nICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0MCB0b1NjaSAnMTExZTEqMjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0MSB0b1NjaSAnMTExZTFlKzMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0MiB0b1NjaSAnMWUxLjAnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0MyB0b1NjaSAnMWUxMjNlJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0NCB0b1NjaSAndGVuJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0NSB0b1NjaSAnT05FJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0NiB0b1NjaSAnMWUuMScgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0NyB0b1NjaSAnMWUxLicgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0OCB0b1NjaSAnMWVlJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU0OSB0b1NjaSAnZSsxJyAgICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1MCB0b1NjaSAnMS4yMy40JyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1MSB0b1NjaSAnMS4yLjEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1MiB0b1NjaSAnMUUrMS4yJyAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1MyB0b1NjaSAnMUUrMS4yLjMnICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1NCB0b1NjaSAnMUUrKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1NSB0b1NjaSAnMUUtLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1NiB0b1NjaSAnMUUrLTEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1NyB0b1NjaSAnMUUtKzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1OCB0b1NjaSAnMUUnJzEnICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU1OSB0b1NjaSAiMUUiIjEiICAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU2MCB0b1NjaSAiMUUiIiIiIiAgICAgICAgICAtPiBOYU4gQ29udmVyc2lvbl9zeW50YXgNCistLSBOZWFyLXNwZWNpYWxzDQorZHNiYXM1NjEgdG9TY2kgInFOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjIgdG9TY2kgIk5hTnEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjMgdG9TY2kgIk5hTnMiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjQgdG9TY2kgIkluZmkiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjUgdG9TY2kgIkluZmluIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjYgdG9TY2kgIkluZmluaSIgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjcgdG9TY2kgIkluZmluaXQiICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjggdG9TY2kgIi1JbmZpbml0IiAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NjkgdG9TY2kgIjBJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzAgdG9TY2kgIjlJbmYiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzEgdG9TY2kgIi0wSW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzIgdG9TY2kgIi05SW5mIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzMgdG9TY2kgIi1zTmEiICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzQgdG9TY2kgInhOYU4iICAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzUgdG9TY2kgIjBzTmFOIiAgICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorLS0gc29tZSBiYWRkaWVzIHdpdGggZG90cyBhbmQgRXMgYW5kIGRvdHMgYW5kIHNwZWNpYWxzDQorZHNiYXM1NzYgdG9TY2kgICdlKzEnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNTc3IHRvU2NpICAnLmUrMScgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU3OCB0b1NjaSAgJysuZSsxJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1NzkgdG9TY2kgICctLmUrJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNTgwIHRvU2NpICAnLS5lJyAgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU4MSB0b1NjaSAgJ0UrMScgICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1ODIgdG9TY2kgICcuRSsxJyAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNTgzIHRvU2NpICAnKy5FKzEnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU4NCB0b1NjaSAgJy0uRSsnICAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1ODUgdG9TY2kgICctLkUnICAgICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KK2RzYmFzNTg2IHRvU2NpICAnLk5hTicgICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU4NyB0b1NjaSAgJy0uTmFOJyAgICAgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM1ODggdG9TY2kgICcrLnNOYU4nICAgICAgICAgLT4gIE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNTg5IHRvU2NpICAnKy5JbmYnICAgICAgICAgIC0+ICBOYU4gQ29udmVyc2lvbl9zeW50YXgNCitkc2JhczU5MCB0b1NjaSAgJy5JbmZpbml0eScgICAgICAtPiAgTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorLS0gWmVyb3MNCitkc2JhczYwMSB0b1NjaSAwLjAwMDAwMDAwMCAgICAgICAtPiAwRS05DQorZHNiYXM2MDIgdG9TY2kgMC4wMDAwMDAwMCAgICAgICAgLT4gMEUtOA0KK2RzYmFzNjAzIHRvU2NpIDAuMDAwMDAwMCAgICAgICAgIC0+IDBFLTcNCitkc2JhczYwNCB0b1NjaSAwLjAwMDAwMCAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RzYmFzNjA1IHRvU2NpIDAuMDAwMDAgICAgICAgICAgIC0+IDAuMDAwMDANCitkc2JhczYwNiB0b1NjaSAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCitkc2JhczYwNyB0b1NjaSAwLjAwMCAgICAgICAgICAgICAtPiAwLjAwMA0KK2RzYmFzNjA4IHRvU2NpIDAuMDAgICAgICAgICAgICAgIC0+IDAuMDANCitkc2JhczYwOSB0b1NjaSAwLjAgICAgICAgICAgICAgICAtPiAwLjANCitkc2JhczYxMCB0b1NjaSAgLjAgICAgICAgICAgICAgICAtPiAwLjANCitkc2JhczYxMSB0b1NjaSAwLiAgICAgICAgICAgICAgICAtPiAwDQorZHNiYXM2MTIgdG9TY2kgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KK2RzYmFzNjEzIHRvU2NpIC0wLiAgICAgICAgICAgICAgIC0+IC0wDQorZHNiYXM2MTQgdG9TY2kgLTAuMCAgICAgICAgICAgICAgLT4gLTAuMA0KK2RzYmFzNjE1IHRvU2NpIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQorZHNiYXM2MTYgdG9TY2kgLTAuMDAwICAgICAgICAgICAgLT4gLTAuMDAwDQorZHNiYXM2MTcgdG9TY2kgLTAuMDAwMCAgICAgICAgICAgLT4gLTAuMDAwMA0KK2RzYmFzNjE4IHRvU2NpIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQorZHNiYXM2MTkgdG9TY2kgLTAuMDAwMDAwICAgICAgICAgLT4gLTAuMDAwMDAwDQorZHNiYXM2MjAgdG9TY2kgLTAuMDAwMDAwMCAgICAgICAgLT4gLTBFLTcNCitkc2JhczYyMSB0b1NjaSAtMC4wMDAwMDAwMCAgICAgICAtPiAtMEUtOA0KK2RzYmFzNjIyIHRvU2NpIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQorDQorZHNiYXM2MzAgdG9TY2kgIDAuMDBFKzAgICAgICAgICAgLT4gMC4wMA0KK2RzYmFzNjMxIHRvU2NpICAwLjAwRSsxICAgICAgICAgIC0+IDAuMA0KK2RzYmFzNjMyIHRvU2NpICAwLjAwRSsyICAgICAgICAgIC0+IDANCitkc2JhczYzMyB0b1NjaSAgMC4wMEUrMyAgICAgICAgICAtPiAwRSsxDQorZHNiYXM2MzQgdG9TY2kgIDAuMDBFKzQgICAgICAgICAgLT4gMEUrMg0KK2RzYmFzNjM1IHRvU2NpICAwLjAwRSs1ICAgICAgICAgIC0+IDBFKzMNCitkc2JhczYzNiB0b1NjaSAgMC4wMEUrNiAgICAgICAgICAtPiAwRSs0DQorZHNiYXM2MzcgdG9TY2kgIDAuMDBFKzcgICAgICAgICAgLT4gMEUrNQ0KK2RzYmFzNjM4IHRvU2NpICAwLjAwRSs4ICAgICAgICAgIC0+IDBFKzYNCitkc2JhczYzOSB0b1NjaSAgMC4wMEUrOSAgICAgICAgICAtPiAwRSs3DQorDQorZHNiYXM2NDAgdG9TY2kgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQorZHNiYXM2NDEgdG9TY2kgIDAuMEUrMSAgICAgICAgICAgLT4gMA0KK2RzYmFzNjQyIHRvU2NpICAwLjBFKzIgICAgICAgICAgIC0+IDBFKzENCitkc2JhczY0MyB0b1NjaSAgMC4wRSszICAgICAgICAgICAtPiAwRSsyDQorZHNiYXM2NDQgdG9TY2kgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KK2RzYmFzNjQ1IHRvU2NpICAwLjBFKzUgICAgICAgICAgIC0+IDBFKzQNCitkc2JhczY0NiB0b1NjaSAgMC4wRSs2ICAgICAgICAgICAtPiAwRSs1DQorZHNiYXM2NDcgdG9TY2kgIDAuMEUrNyAgICAgICAgICAgLT4gMEUrNg0KK2RzYmFzNjQ4IHRvU2NpICAwLjBFKzggICAgICAgICAgIC0+IDBFKzcNCitkc2JhczY0OSB0b1NjaSAgMC4wRSs5ICAgICAgICAgICAtPiAwRSs4DQorDQorZHNiYXM2NTAgdG9TY2kgIDBFKzAgICAgICAgICAgICAgLT4gMA0KK2RzYmFzNjUxIHRvU2NpICAwRSsxICAgICAgICAgICAgIC0+IDBFKzENCitkc2JhczY1MiB0b1NjaSAgMEUrMiAgICAgICAgICAgICAtPiAwRSsyDQorZHNiYXM2NTMgdG9TY2kgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KK2RzYmFzNjU0IHRvU2NpICAwRSs0ICAgICAgICAgICAgIC0+IDBFKzQNCitkc2JhczY1NSB0b1NjaSAgMEUrNSAgICAgICAgICAgICAtPiAwRSs1DQorZHNiYXM2NTYgdG9TY2kgIDBFKzYgICAgICAgICAgICAgLT4gMEUrNg0KK2RzYmFzNjU3IHRvU2NpICAwRSs3ICAgICAgICAgICAgIC0+IDBFKzcNCitkc2JhczY1OCB0b1NjaSAgMEUrOCAgICAgICAgICAgICAtPiAwRSs4DQorZHNiYXM2NTkgdG9TY2kgIDBFKzkgICAgICAgICAgICAgLT4gMEUrOQ0KKw0KK2RzYmFzNjYwIHRvU2NpICAwLjBFLTAgICAgICAgICAgIC0+IDAuMA0KK2RzYmFzNjYxIHRvU2NpICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCitkc2JhczY2MiB0b1NjaSAgMC4wRS0yICAgICAgICAgICAtPiAwLjAwMA0KK2RzYmFzNjYzIHRvU2NpICAwLjBFLTMgICAgICAgICAgIC0+IDAuMDAwMA0KK2RzYmFzNjY0IHRvU2NpICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCitkc2JhczY2NSB0b1NjaSAgMC4wRS01ICAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RzYmFzNjY2IHRvU2NpICAwLjBFLTYgICAgICAgICAgIC0+IDBFLTcNCitkc2JhczY2NyB0b1NjaSAgMC4wRS03ICAgICAgICAgICAtPiAwRS04DQorZHNiYXM2NjggdG9TY2kgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KK2RzYmFzNjY5IHRvU2NpICAwLjBFLTkgICAgICAgICAgIC0+IDBFLTEwDQorDQorZHNiYXM2NzAgdG9TY2kgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KK2RzYmFzNjcxIHRvU2NpICAwLjAwRS0xICAgICAgICAgIC0+IDAuMDAwDQorZHNiYXM2NzIgdG9TY2kgIDAuMDBFLTIgICAgICAgICAgLT4gMC4wMDAwDQorZHNiYXM2NzMgdG9TY2kgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KK2RzYmFzNjc0IHRvU2NpICAwLjAwRS00ICAgICAgICAgIC0+IDAuMDAwMDAwDQorZHNiYXM2NzUgdG9TY2kgIDAuMDBFLTUgICAgICAgICAgLT4gMEUtNw0KK2RzYmFzNjc2IHRvU2NpICAwLjAwRS02ICAgICAgICAgIC0+IDBFLTgNCitkc2JhczY3NyB0b1NjaSAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQorZHNiYXM2NzggdG9TY2kgIDAuMDBFLTggICAgICAgICAgLT4gMEUtMTANCitkc2JhczY3OSB0b1NjaSAgMC4wMEUtOSAgICAgICAgICAtPiAwRS0xMQ0KKw0KK2RzYmFzNjgwIHRvU2NpICAwMDAwMDAuICAgICAgICAgIC0+ICAwDQorZHNiYXM2ODEgdG9TY2kgICAwMDAwMC4gICAgICAgICAgLT4gIDANCitkc2JhczY4MiB0b1NjaSAgICAwMDAwLiAgICAgICAgICAtPiAgMA0KK2RzYmFzNjgzIHRvU2NpICAgICAwMDAuICAgICAgICAgIC0+ICAwDQorZHNiYXM2ODQgdG9TY2kgICAgICAwMC4gICAgICAgICAgLT4gIDANCitkc2JhczY4NSB0b1NjaSAgICAgICAwLiAgICAgICAgICAtPiAgMA0KK2RzYmFzNjg2IHRvU2NpICArMDAwMDAuICAgICAgICAgIC0+ICAwDQorZHNiYXM2ODcgdG9TY2kgIC0wMDAwMC4gICAgICAgICAgLT4gLTANCitkc2JhczY4OCB0b1NjaSAgKzAuICAgICAgICAgICAgICAtPiAgMA0KK2RzYmFzNjg5IHRvU2NpICAtMC4gICAgICAgICAgICAgIC0+IC0wDQorDQorLS0gU3BlY2lhbHMNCitkc2JhczcwMCB0b1NjaSAiTmFOIiAgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwMSB0b1NjaSAibmFuIiAgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwMiB0b1NjaSAibkFuIiAgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwMyB0b1NjaSAiTkFOIiAgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwNCB0b1NjaSAiK05hTiIgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwNSB0b1NjaSAiK25hbiIgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwNiB0b1NjaSAiK25BbiIgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwNyB0b1NjaSAiK05BTiIgICAgICAgICAgICAtPiBOYU4NCitkc2JhczcwOCB0b1NjaSAiLU5hTiIgICAgICAgICAgICAtPiAtTmFODQorZHNiYXM3MDkgdG9TY2kgIi1uYW4iICAgICAgICAgICAgLT4gLU5hTg0KK2RzYmFzNzEwIHRvU2NpICItbkFuIiAgICAgICAgICAgIC0+IC1OYU4NCitkc2JhczcxMSB0b1NjaSAiLU5BTiIgICAgICAgICAgICAtPiAtTmFODQorZHNiYXM3MTIgdG9TY2kgJ05hTjAnICAgICAgICAgICAgLT4gTmFODQorZHNiYXM3MTMgdG9TY2kgJ05hTjEnICAgICAgICAgICAgLT4gTmFOMQ0KK2RzYmFzNzE0IHRvU2NpICdOYU4xMicgICAgICAgICAgIC0+IE5hTjEyDQorZHNiYXM3MTUgdG9TY2kgJ05hTjEyMycgICAgICAgICAgLT4gTmFOMTIzDQorZHNiYXM3MTYgdG9TY2kgJ05hTjEyMzQnICAgICAgICAgLT4gTmFOMTIzNA0KK2RzYmFzNzE3IHRvU2NpICdOYU4wMScgICAgICAgICAgIC0+IE5hTjENCitkc2JhczcxOCB0b1NjaSAnTmFOMDEyJyAgICAgICAgICAtPiBOYU4xMg0KK2RzYmFzNzE5IHRvU2NpICdOYU4wMTIzJyAgICAgICAgIC0+IE5hTjEyMw0KK2RzYmFzNzIwIHRvU2NpICdOYU4wMTIzNCcgICAgICAgIC0+IE5hTjEyMzQNCitkc2JhczcyMSB0b1NjaSAnTmFOMDAxJyAgICAgICAgICAtPiBOYU4xDQorZHNiYXM3MjIgdG9TY2kgJ05hTjAwMTInICAgICAgICAgLT4gTmFOMTINCitkc2JhczcyMyB0b1NjaSAnTmFOMDAxMjMnICAgICAgICAtPiBOYU4xMjMNCitkc2JhczcyNCB0b1NjaSAnTmFOMDAxMjM0JyAgICAgICAtPiBOYU4xMjM0DQorZHNiYXM3MjUgdG9TY2kgJ05hTjEyMzQ1Njc4OTAxMjM0NTYnIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNzI2IHRvU2NpICdOYU4xMjNlKzEnICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNzI3IHRvU2NpICdOYU4xMi40NScgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNzI4IHRvU2NpICdOYU4tMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KK2RzYmFzNzI5IHRvU2NpICdOYU4rMTInICAgICAgICAgIC0+IE5hTiBDb252ZXJzaW9uX3N5bnRheA0KKw0KK2RzYmFzNzMwIHRvU2NpICJzTmFOIiAgICAgICAgICAgIC0+IHNOYU4NCitkc2JhczczMSB0b1NjaSAic25hbiIgICAgICAgICAgICAtPiBzTmFODQorZHNiYXM3MzIgdG9TY2kgIlNuQW4iICAgICAgICAgICAgLT4gc05hTg0KK2RzYmFzNzMzIHRvU2NpICJTTkFOIiAgICAgICAgICAgIC0+IHNOYU4NCitkc2JhczczNCB0b1NjaSAiK3NOYU4iICAgICAgICAgICAtPiBzTmFODQorZHNiYXM3MzUgdG9TY2kgIitzbmFuIiAgICAgICAgICAgLT4gc05hTg0KK2RzYmFzNzM2IHRvU2NpICIrU25BbiIgICAgICAgICAgIC0+IHNOYU4NCitkc2JhczczNyB0b1NjaSAiK1NOQU4iICAgICAgICAgICAtPiBzTmFODQorZHNiYXM3MzggdG9TY2kgIi1zTmFOIiAgICAgICAgICAgLT4gLXNOYU4NCitkc2JhczczOSB0b1NjaSAiLXNuYW4iICAgICAgICAgICAtPiAtc05hTg0KK2RzYmFzNzQwIHRvU2NpICItU25BbiIgICAgICAgICAgIC0+IC1zTmFODQorZHNiYXM3NDEgdG9TY2kgIi1TTkFOIiAgICAgICAgICAgLT4gLXNOYU4NCitkc2Jhczc0MiB0b1NjaSAnc05hTjAwMDAnICAgICAgICAtPiBzTmFODQorZHNiYXM3NDMgdG9TY2kgJ3NOYU43JyAgICAgICAgICAgLT4gc05hTjcNCitkc2Jhczc0NCB0b1NjaSAnc05hTjAwNzIzNCcgICAgICAtPiBzTmFONzIzNA0KK2RzYmFzNzQ1IHRvU2NpICdzTmFONzIzNDU2MTIzNDU2Nzg5MCcgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM3NDYgdG9TY2kgJ3NOYU43Mi40NScgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorZHNiYXM3NDcgdG9TY2kgJ3NOYU4tNzInICAgICAgICAgLT4gTmFOIENvbnZlcnNpb25fc3ludGF4DQorDQorZHNiYXM3NDggdG9TY2kgIkluZiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc0OSB0b1NjaSAiaW5mIiAgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RzYmFzNzUwIHRvU2NpICJpTmYiICAgICAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXM3NTEgdG9TY2kgIklORiIgICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc1MiB0b1NjaSAiK0luZiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RzYmFzNzUzIHRvU2NpICIraW5mIiAgICAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXM3NTQgdG9TY2kgIitpTmYiICAgICAgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc1NSB0b1NjaSAiK0lORiIgICAgICAgICAgICAtPiBJbmZpbml0eQ0KK2RzYmFzNzU2IHRvU2NpICItSW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RzYmFzNzU3IHRvU2NpICItaW5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RzYmFzNzU4IHRvU2NpICItaU5mIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RzYmFzNzU5IHRvU2NpICItSU5GIiAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KKw0KK2RzYmFzNzYwIHRvU2NpICJJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXM3NjEgdG9TY2kgImluZmluaXR5IiAgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc2MiB0b1NjaSAiaU5mSW5JdFkiICAgICAgICAtPiBJbmZpbml0eQ0KK2RzYmFzNzYzIHRvU2NpICJJTkZJTklUWSIgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXM3NjQgdG9TY2kgIitJbmZpbml0eSIgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc2NSB0b1NjaSAiK2luZmluaXR5IiAgICAgICAtPiBJbmZpbml0eQ0KK2RzYmFzNzY2IHRvU2NpICIraU5mSW5JdFkiICAgICAgIC0+IEluZmluaXR5DQorZHNiYXM3NjcgdG9TY2kgIitJTkZJTklUWSIgICAgICAgLT4gSW5maW5pdHkNCitkc2Jhczc2OCB0b1NjaSAiLUluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCitkc2Jhczc2OSB0b1NjaSAiLWluZmluaXR5IiAgICAgICAtPiAtSW5maW5pdHkNCitkc2Jhczc3MCB0b1NjaSAiLWlOZkluSXRZIiAgICAgICAtPiAtSW5maW5pdHkNCitkc2Jhczc3MSB0b1NjaSAiLUlORklOSVRZIiAgICAgICAtPiAtSW5maW5pdHkNCisNCistLSBTcGVjaWFscyBhbmQgemVyb3MgZm9yIHRvRW5nDQorZHNiYXN0NzcyIHRvRW5nICJOYU4iICAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3NzMgdG9FbmcgIi1JbmZpbml0eSIgICAgICAgIC0+IC1JbmZpbml0eQ0KK2RzYmFzdDc3NCB0b0VuZyAiLXNOYU4iICAgICAgICAgICAgLT4gLXNOYU4NCitkc2Jhc3Q3NzUgdG9FbmcgIi1OYU4iICAgICAgICAgICAgIC0+IC1OYU4NCitkc2Jhc3Q3NzYgdG9FbmcgIitJbmZpbml0eSIgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0Nzc4IHRvRW5nICIrc05hTiIgICAgICAgICAgICAtPiBzTmFODQorZHNiYXN0Nzc5IHRvRW5nICIrTmFOIiAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3ODAgdG9FbmcgIklORklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0NzgxIHRvRW5nICJTTkFOIiAgICAgICAgICAgICAtPiBzTmFODQorZHNiYXN0NzgyIHRvRW5nICJOQU4iICAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3ODMgdG9FbmcgImluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0Nzg0IHRvRW5nICJzbmFuIiAgICAgICAgICAgICAtPiBzTmFODQorZHNiYXN0Nzg1IHRvRW5nICJuYW4iICAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3ODYgdG9FbmcgIkluRklOSVRZIiAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0Nzg3IHRvRW5nICJTbkFOIiAgICAgICAgICAgICAtPiBzTmFODQorZHNiYXN0Nzg4IHRvRW5nICJuQU4iICAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3ODkgdG9FbmcgImlOZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0NzkwIHRvRW5nICJzTmFuIiAgICAgICAgICAgICAtPiBzTmFODQorZHNiYXN0NzkxIHRvRW5nICJOYW4iICAgICAgICAgICAgICAtPiBOYU4NCitkc2Jhc3Q3OTIgdG9FbmcgIkluZmluaXR5IiAgICAgICAgIC0+IEluZmluaXR5DQorZHNiYXN0NzkzIHRvRW5nICJzTmFOIiAgICAgICAgICAgICAtPiBzTmFODQorDQorLS0gWmVybyB0b0VuZywgZXRjLg0KK2RzYmFzdDgwMCB0b0VuZyAwZSsxICAgICAgICAgICAgICAtPiAiMC4wMEUrMyIgIC0tIGRvYyBleGFtcGxlDQorDQorZHNiYXN0ODAxIHRvRW5nIDAuMDAwMDAwMDAwICAgICAgIC0+IDBFLTkNCitkc2Jhc3Q4MDIgdG9FbmcgMC4wMDAwMDAwMCAgICAgICAgLT4gMC4wMEUtNg0KK2RzYmFzdDgwMyB0b0VuZyAwLjAwMDAwMDAgICAgICAgICAtPiAwLjBFLTYNCitkc2Jhc3Q4MDQgdG9FbmcgMC4wMDAwMDAgICAgICAgICAgLT4gMC4wMDAwMDANCitkc2Jhc3Q4MDUgdG9FbmcgMC4wMDAwMCAgICAgICAgICAgLT4gMC4wMDAwMA0KK2RzYmFzdDgwNiB0b0VuZyAwLjAwMDAgICAgICAgICAgICAtPiAwLjAwMDANCitkc2Jhc3Q4MDcgdG9FbmcgMC4wMDAgICAgICAgICAgICAgLT4gMC4wMDANCitkc2Jhc3Q4MDggdG9FbmcgMC4wMCAgICAgICAgICAgICAgLT4gMC4wMA0KK2RzYmFzdDgwOSB0b0VuZyAwLjAgICAgICAgICAgICAgICAtPiAwLjANCitkc2Jhc3Q4MTAgdG9FbmcgIC4wICAgICAgICAgICAgICAgLT4gMC4wDQorZHNiYXN0ODExIHRvRW5nIDAuICAgICAgICAgICAgICAgIC0+IDANCitkc2Jhc3Q4MTIgdG9FbmcgLS4wICAgICAgICAgICAgICAgLT4gLTAuMA0KK2RzYmFzdDgxMyB0b0VuZyAtMC4gICAgICAgICAgICAgICAtPiAtMA0KK2RzYmFzdDgxNCB0b0VuZyAtMC4wICAgICAgICAgICAgICAtPiAtMC4wDQorZHNiYXN0ODE1IHRvRW5nIC0wLjAwICAgICAgICAgICAgIC0+IC0wLjAwDQorZHNiYXN0ODE2IHRvRW5nIC0wLjAwMCAgICAgICAgICAgIC0+IC0wLjAwMA0KK2RzYmFzdDgxNyB0b0VuZyAtMC4wMDAwICAgICAgICAgICAtPiAtMC4wMDAwDQorZHNiYXN0ODE4IHRvRW5nIC0wLjAwMDAwICAgICAgICAgIC0+IC0wLjAwMDAwDQorZHNiYXN0ODE5IHRvRW5nIC0wLjAwMDAwMCAgICAgICAgIC0+IC0wLjAwMDAwMA0KK2RzYmFzdDgyMCB0b0VuZyAtMC4wMDAwMDAwICAgICAgICAtPiAtMC4wRS02DQorZHNiYXN0ODIxIHRvRW5nIC0wLjAwMDAwMDAwICAgICAgIC0+IC0wLjAwRS02DQorZHNiYXN0ODIyIHRvRW5nIC0wLjAwMDAwMDAwMCAgICAgIC0+IC0wRS05DQorDQorZHNiYXN0ODMwIHRvRW5nICAwLjAwRSswICAgICAgICAgIC0+IDAuMDANCitkc2Jhc3Q4MzEgdG9FbmcgIDAuMDBFKzEgICAgICAgICAgLT4gMC4wDQorZHNiYXN0ODMyIHRvRW5nICAwLjAwRSsyICAgICAgICAgIC0+IDANCitkc2Jhc3Q4MzMgdG9FbmcgIDAuMDBFKzMgICAgICAgICAgLT4gMC4wMEUrMw0KK2RzYmFzdDgzNCB0b0VuZyAgMC4wMEUrNCAgICAgICAgICAtPiAwLjBFKzMNCitkc2Jhc3Q4MzUgdG9FbmcgIDAuMDBFKzUgICAgICAgICAgLT4gMEUrMw0KK2RzYmFzdDgzNiB0b0VuZyAgMC4wMEUrNiAgICAgICAgICAtPiAwLjAwRSs2DQorZHNiYXN0ODM3IHRvRW5nICAwLjAwRSs3ICAgICAgICAgIC0+IDAuMEUrNg0KK2RzYmFzdDgzOCB0b0VuZyAgMC4wMEUrOCAgICAgICAgICAtPiAwRSs2DQorZHNiYXN0ODM5IHRvRW5nICAwLjAwRSs5ICAgICAgICAgIC0+IDAuMDBFKzkNCisNCitkc2Jhc3Q4NDAgdG9FbmcgIDAuMEUrMCAgICAgICAgICAgLT4gMC4wDQorZHNiYXN0ODQxIHRvRW5nICAwLjBFKzEgICAgICAgICAgIC0+IDANCitkc2Jhc3Q4NDIgdG9FbmcgIDAuMEUrMiAgICAgICAgICAgLT4gMC4wMEUrMw0KK2RzYmFzdDg0MyB0b0VuZyAgMC4wRSszICAgICAgICAgICAtPiAwLjBFKzMNCitkc2Jhc3Q4NDQgdG9FbmcgIDAuMEUrNCAgICAgICAgICAgLT4gMEUrMw0KK2RzYmFzdDg0NSB0b0VuZyAgMC4wRSs1ICAgICAgICAgICAtPiAwLjAwRSs2DQorZHNiYXN0ODQ2IHRvRW5nICAwLjBFKzYgICAgICAgICAgIC0+IDAuMEUrNg0KK2RzYmFzdDg0NyB0b0VuZyAgMC4wRSs3ICAgICAgICAgICAtPiAwRSs2DQorZHNiYXN0ODQ4IHRvRW5nICAwLjBFKzggICAgICAgICAgIC0+IDAuMDBFKzkNCitkc2Jhc3Q4NDkgdG9FbmcgIDAuMEUrOSAgICAgICAgICAgLT4gMC4wRSs5DQorDQorZHNiYXN0ODUwIHRvRW5nICAwRSswICAgICAgICAgICAgIC0+IDANCitkc2Jhc3Q4NTEgdG9FbmcgIDBFKzEgICAgICAgICAgICAgLT4gMC4wMEUrMw0KK2RzYmFzdDg1MiB0b0VuZyAgMEUrMiAgICAgICAgICAgICAtPiAwLjBFKzMNCitkc2Jhc3Q4NTMgdG9FbmcgIDBFKzMgICAgICAgICAgICAgLT4gMEUrMw0KK2RzYmFzdDg1NCB0b0VuZyAgMEUrNCAgICAgICAgICAgICAtPiAwLjAwRSs2DQorZHNiYXN0ODU1IHRvRW5nICAwRSs1ICAgICAgICAgICAgIC0+IDAuMEUrNg0KK2RzYmFzdDg1NiB0b0VuZyAgMEUrNiAgICAgICAgICAgICAtPiAwRSs2DQorZHNiYXN0ODU3IHRvRW5nICAwRSs3ICAgICAgICAgICAgIC0+IDAuMDBFKzkNCitkc2Jhc3Q4NTggdG9FbmcgIDBFKzggICAgICAgICAgICAgLT4gMC4wRSs5DQorZHNiYXN0ODU5IHRvRW5nICAwRSs5ICAgICAgICAgICAgIC0+IDBFKzkNCisNCitkc2Jhc3Q4NjAgdG9FbmcgIDAuMEUtMCAgICAgICAgICAgLT4gMC4wDQorZHNiYXN0ODYxIHRvRW5nICAwLjBFLTEgICAgICAgICAgIC0+IDAuMDANCitkc2Jhc3Q4NjIgdG9FbmcgIDAuMEUtMiAgICAgICAgICAgLT4gMC4wMDANCitkc2Jhc3Q4NjMgdG9FbmcgIDAuMEUtMyAgICAgICAgICAgLT4gMC4wMDAwDQorZHNiYXN0ODY0IHRvRW5nICAwLjBFLTQgICAgICAgICAgIC0+IDAuMDAwMDANCitkc2Jhc3Q4NjUgdG9FbmcgIDAuMEUtNSAgICAgICAgICAgLT4gMC4wMDAwMDANCitkc2Jhc3Q4NjYgdG9FbmcgIDAuMEUtNiAgICAgICAgICAgLT4gMC4wRS02DQorZHNiYXN0ODY3IHRvRW5nICAwLjBFLTcgICAgICAgICAgIC0+IDAuMDBFLTYNCitkc2Jhc3Q4NjggdG9FbmcgIDAuMEUtOCAgICAgICAgICAgLT4gMEUtOQ0KK2RzYmFzdDg2OSB0b0VuZyAgMC4wRS05ICAgICAgICAgICAtPiAwLjBFLTkNCisNCitkc2Jhc3Q4NzAgdG9FbmcgIDAuMDBFLTAgICAgICAgICAgLT4gMC4wMA0KK2RzYmFzdDg3MSB0b0VuZyAgMC4wMEUtMSAgICAgICAgICAtPiAwLjAwMA0KK2RzYmFzdDg3MiB0b0VuZyAgMC4wMEUtMiAgICAgICAgICAtPiAwLjAwMDANCitkc2Jhc3Q4NzMgdG9FbmcgIDAuMDBFLTMgICAgICAgICAgLT4gMC4wMDAwMA0KK2RzYmFzdDg3NCB0b0VuZyAgMC4wMEUtNCAgICAgICAgICAtPiAwLjAwMDAwMA0KK2RzYmFzdDg3NSB0b0VuZyAgMC4wMEUtNSAgICAgICAgICAtPiAwLjBFLTYNCitkc2Jhc3Q4NzYgdG9FbmcgIDAuMDBFLTYgICAgICAgICAgLT4gMC4wMEUtNg0KK2RzYmFzdDg3NyB0b0VuZyAgMC4wMEUtNyAgICAgICAgICAtPiAwRS05DQorZHNiYXN0ODc4IHRvRW5nICAwLjAwRS04ICAgICAgICAgIC0+IDAuMEUtOQ0KK2RzYmFzdDg3OSB0b0VuZyAgMC4wMEUtOSAgICAgICAgICAtPiAwLjAwRS05DQorDQorLS0gbG9uZyBpbnB1dCBzdHJpbmdzDQorZHNiYXM4MDEgdG9zY2kgICAgICAgICAgJzAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDIgdG9zY2kgICAgICAgICAnMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDMgdG9zY2kgICAgICAgICcwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDQgdG9zY2kgICAgICAgJzAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDUgdG9zY2kgICAgICAnMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDYgdG9zY2kgICAgICcwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDcgdG9zY2kgICAgJzAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDggdG9zY2kgICAnMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MDkgdG9zY2kgICcwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorZHNiYXM4MTAgdG9zY2kgJzAwMDAwMDAwMDAxMjM0NTY3JyAtPiAxMjM0NTY3DQorDQorZHNiYXM4MTEgdG9zY2kgICAgICAgICAgJzAuMTIzNDU2NycgLT4gICAgICAwLjEyMzQ1NjcNCitkc2JhczgxMiB0b3NjaSAgICAgICAgICcwLjAxMjM0NTY3JyAtPiAgICAgMC4wMTIzNDU2Nw0KK2RzYmFzODEzIHRvc2NpICAgICAgICAnMC4wMDEyMzQ1NjcnIC0+ICAgIDAuMDAxMjM0NTY3DQorZHNiYXM4MTQgdG9zY2kgICAgICAgJzAuMDAwMTIzNDU2NycgLT4gICAwLjAwMDEyMzQ1NjcNCitkc2JhczgxNSB0b3NjaSAgICAgICcwLjAwMDAxMjM0NTY3JyAtPiAgMC4wMDAwMTIzNDU2Nw0KK2RzYmFzODE2IHRvc2NpICAgICAnMC4wMDAwMDEyMzQ1NjcnIC0+IDAuMDAwMDAxMjM0NTY3DQorZHNiYXM4MTcgdG9zY2kgICAgJzAuMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTcNCitkc2JhczgxOCB0b3NjaSAgICcwLjAwMDAwMDAxMjM0NTY3JyAtPiAgICAgICAxLjIzNDU2N0UtOA0KK2RzYmFzODE5IHRvc2NpICAnMC4wMDAwMDAwMDEyMzQ1NjcnIC0+ICAgICAgIDEuMjM0NTY3RS05DQorZHNiYXM4MjAgdG9zY2kgJzAuMDAwMDAwMDAwMTIzNDU2NycgLT4gICAgICAgMS4yMzQ1NjdFLTEwDQorDQorZHNiYXM4MjEgdG9zY2kgJzEyMzQ1Njc5MCcgICAgICAgICAtPiAxLjIzNDU2OEUrOCBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyMiB0b3NjaSAnMTIzNDU2NzkwMScgICAgICAgIC0+IDEuMjM0NTY4RSs5ICBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyMyB0b3NjaSAnMTIzNDU2NzkwMTInICAgICAgIC0+IDEuMjM0NTY4RSsxMCBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyNCB0b3NjaSAnMTIzNDU2NzkwMTIzJyAgICAgIC0+IDEuMjM0NTY4RSsxMSBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyNSB0b3NjaSAnMTIzNDU2NzkwMTIzNCcgICAgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyNiB0b3NjaSAnMTIzNDU2NzkwMTIzNDUnICAgIC0+IDEuMjM0NTY4RSsxMyBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyNyB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2JyAgIC0+IDEuMjM0NTY4RSsxNCBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyOCB0b3NjaSAnMTIzNDU2NzkwMTIzNDU2NycgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczgyOSB0b3NjaSAnMTIzNDU2Nzg5MDEyMzQ1NicgIC0+IDEuMjM0NTY4RSsxNSBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBzdWJub3JtYWxzIGFuZCBvdmVyZmxvd3MNCitkc2JhczkwNiB0b1NjaSAnOTllOTk5OTk5OTk5JyAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MDcgdG9TY2kgJzk5OWU5OTk5OTk5OTknICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTA4IHRvU2NpICcwLjllLTk5OTk5OTk5OScgICAgIC0+IDBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXM5MDkgdG9TY2kgJzAuMDllLTk5OTk5OTk5OScgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczkxMCB0b1NjaSAnMC4xZTEwMDAwMDAwMDAnICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MTEgdG9TY2kgJzEwZS0xMDAwMDAwMDAwJyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczkxMiB0b1NjaSAnMC45ZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MTMgdG9TY2kgJzk5ZS05OTk5OTk5OTk5JyAgICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczkxNCB0b1NjaSAnMTExZTk5OTk5OTk5OTknICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MTUgdG9TY2kgJzExMTFlLTk5OTk5OTk5OTknICAgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczkxNiB0b1NjaSAnMTExMWUtOTk5OTk5OTk5OTknICAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RzYmFzOTE3IHRvU2NpICc3ZTEwMDAwMDAwMDAnICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCistLSBuZWdhdGl2ZXMgdGhlIHNhbWUNCitkc2JhczkxOCB0b1NjaSAnLTk5ZTk5OTk5OTk5OScgICAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTE5IHRvU2NpICctOTk5ZTk5OTk5OTk5OScgICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MjAgdG9TY2kgJy0wLjllLTk5OTk5OTk5OScgICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXM5MjEgdG9TY2kgJy0wLjA5ZS05OTk5OTk5OTknICAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXM5MjIgdG9TY2kgJy0wLjFlMTAwMDAwMDAwMCcgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczkyMyB0b1NjaSAnLTEwZS0xMDAwMDAwMDAwJyAgICAtPiAtMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczkyNCB0b1NjaSAnLTAuOWU5OTk5OTk5OTk5JyAgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTI1IHRvU2NpICctOTllLTk5OTk5OTk5OTknICAgIC0+IC0wRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RzYmFzOTI2IHRvU2NpICctMTExZTk5OTk5OTk5OTknICAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MjcgdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5JyAgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXM5MjggdG9TY2kgJy0xMTExZS05OTk5OTk5OTk5OScgLT4gLTBFLTEwMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXM5MjkgdG9TY2kgJy03ZTEwMDAwMDAwMDAnICAgICAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBvdmVyZmxvdyByZXN1bHRzIGF0IGRpZmZlcmVudCByb3VuZGluZyBtb2Rlcw0KK3JvdW5kaW5nOiAgY2VpbGluZw0KK2RzYmFzOTMwIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MzEgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLTkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICB1cA0KK2RzYmFzOTMyIHRvU2NpICAnN2UxMDAwMCcgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MzMgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogIGRvd24NCitkc2JhczkzNCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczkzNSB0b1NjaSAnLTdlMTAwMDAnICAtPiAtOS45OTk5OTlFKzk2IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogIGZsb29yDQorZHNiYXM5MzYgdG9TY2kgICc3ZTEwMDAwJyAgLT4gIDkuOTk5OTk5RSs5NiBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorZHNiYXM5MzcgdG9TY2kgJy03ZTEwMDAwJyAgLT4gLUluZmluaXR5IE92ZXJmbG93ICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogIGhhbGZfdXANCitkc2JhczkzOCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTM5IHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitkc2Jhczk0MCB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTQxIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6ICBoYWxmX2Rvd24NCitkc2Jhczk0MiB0b1NjaSAgJzdlMTAwMDAnICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgIEluZXhhY3QgUm91bmRlZA0KK2RzYmFzOTQzIHRvU2NpICctN2UxMDAwMCcgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCisNCistLSBOb3cgY2hlY2sgODU0Lzc1NHIgc29tZSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cgdG8gMA0KK2RzYmVtNDAwIHRvU2NpICAxLjAwMDBFLTg2ICAgICAtPiAxLjAwMDBFLTg2DQorZHNiZW00MDEgdG9TY2kgIDAuMUUtOTcgICAgICAgIC0+IDFFLTk4ICAgICAgIFN1Ym5vcm1hbA0KK2RzYmVtNDAyIHRvU2NpICAwLjEwMDBFLTk3ICAgICAtPiAxLjAwMEUtOTggICBTdWJub3JtYWwNCitkc2JlbTQwMyB0b1NjaSAgMC4wMTAwRS05NyAgICAgLT4gMS4wMEUtOTkgICAgU3Vibm9ybWFsDQorZHNiZW00MDQgdG9TY2kgIDAuMDAxMEUtOTcgICAgIC0+IDEuMEUtMTAwICAgICBTdWJub3JtYWwNCitkc2JlbTQwNSB0b1NjaSAgMC4wMDAxRS05NyAgICAgLT4gMUUtMTAxICAgICAgIFN1Ym5vcm1hbA0KK2RzYmVtNDA2IHRvU2NpICAwLjAwMDEwRS05NyAgICAtPiAxRS0xMDEgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZHNiZW00MDcgdG9TY2kgIDAuMDAwMTNFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQwOCB0b1NjaSAgMC4wMDAxNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDA5IHRvU2NpICAwLjAwMDE3RS05NyAgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MTAgdG9TY2kgIDAuMDAwMjNFLTk3ICAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQxMSB0b1NjaSAgMC4wMDAyNUUtOTcgICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDEyIHRvU2NpICAwLjAwMDI3RS05NyAgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MTMgdG9TY2kgIDAuMDAwMTQ5RS05NyAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQxNCB0b1NjaSAgMC4wMDAxNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDE1IHRvU2NpICAwLjAwMDE1MUUtOTcgICAtPiAyRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MTYgdG9TY2kgIDAuMDAwMjQ5RS05NyAgIC0+IDJFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQxNyB0b1NjaSAgMC4wMDAyNTBFLTk3ICAgLT4gMkUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDE4IHRvU2NpICAwLjAwMDI1MUUtOTcgICAtPiAzRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MTkgdG9TY2kgIDAuMDAwMDlFLTk3ICAgIC0+IDFFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQyMCB0b1NjaSAgMC4wMDAwNUUtOTcgICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiZW00MjEgdG9TY2kgIDAuMDAwMDNFLTk3ICAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RzYmVtNDIyIHRvU2NpICAwLjAwMDAwOUUtOTcgICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JlbTQyMyB0b1NjaSAgMC4wMDAwMDVFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiZW00MjQgdG9TY2kgIDAuMDAwMDAzRS05NyAgIC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KK2RzYmVtNDI1IHRvU2NpICAwLjAwMTA0OUUtOTcgICAtPiAxLjBFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MjYgdG9TY2kgIDAuMDAxMDUwRS05NyAgIC0+IDEuMEUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQyNyB0b1NjaSAgMC4wMDEwNTFFLTk3ICAgLT4gMS4xRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDI4IHRvU2NpICAwLjAwMTE0OUUtOTcgICAtPiAxLjFFLTEwMCAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MjkgdG9TY2kgIDAuMDAxMTUwRS05NyAgIC0+IDEuMkUtMTAwICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQzMCB0b1NjaSAgMC4wMDExNTFFLTk3ICAgLT4gMS4yRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RzYmVtNDMyIHRvU2NpICAwLjAxMDA0OUUtOTcgICAtPiAxLjAwRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQzMyB0b1NjaSAgMC4wMTAwNTBFLTk3ICAgLT4gMS4wMEUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MzQgdG9TY2kgIDAuMDEwMDUxRS05NyAgIC0+IDEuMDFFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDM1IHRvU2NpICAwLjAxMDE0OUUtOTcgICAtPiAxLjAxRS05OSAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQzNiB0b1NjaSAgMC4wMTAxNTBFLTk3ICAgLT4gMS4wMkUtOTkgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00MzcgdG9TY2kgIDAuMDEwMTUxRS05NyAgIC0+IDEuMDJFLTk5ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RzYmVtNDQwIHRvU2NpICAwLjEwMTAzRS05NyAgICAtPiAxLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ0MSB0b1NjaSAgMC4xMDEwNUUtOTcgICAgLT4gMS4wMTBFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00NDIgdG9TY2kgIDAuMTAxMDdFLTk3ICAgIC0+IDEuMDExRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDQzIHRvU2NpICAwLjEwMTEzRS05NyAgICAtPiAxLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ0NCB0b1NjaSAgMC4xMDExNUUtOTcgICAgLT4gMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00NDUgdG9TY2kgIDAuMTAxMTdFLTk3ICAgIC0+IDEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KK2RzYmVtNDUwIHRvU2NpICAxLjEwNzMwRS05OCAgICAtPiAxLjEwN0UtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ1MSB0b1NjaSAgMS4xMDc1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00NTIgdG9TY2kgIDEuMTA3NzBFLTk4ICAgIC0+IDEuMTA4RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDUzIHRvU2NpICAxLjEwODMwRS05OCAgICAtPiAxLjEwOEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ1NCB0b1NjaSAgMS4xMDg1MEUtOTggICAgLT4gMS4xMDhFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00NTUgdG9TY2kgIDEuMTA4NzBFLTk4ICAgIC0+IDEuMTA5RS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG1ha2Ugc3VyZSBzaWduIE9LDQorZHNiZW00NTYgdG9TY2kgIC0wLjEwMTAzRS05NyAgIC0+IC0xLjAxMEUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ1NyB0b1NjaSAgLTAuMTAxMDVFLTk3ICAgLT4gLTEuMDEwRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDU4IHRvU2NpICAtMC4xMDEwN0UtOTcgICAtPiAtMS4wMTFFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZHNiZW00NTkgdG9TY2kgIC0wLjEwMTEzRS05NyAgIC0+IC0xLjAxMUUtOTggVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitkc2JlbTQ2MCB0b1NjaSAgLTAuMTAxMTVFLTk3ICAgLT4gLTEuMDEyRS05OCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDYxIHRvU2NpICAtMC4xMDExN0UtOTcgICAtPiAtMS4wMTJFLTk4IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gJzk5OXMnIGNhc2VzDQorZHNiZW00NjQgdG9TY2kgIDk5OTk5OUUtOTggICAgICAgICAtPiA5Ljk5OTk5RS05Mw0KK2RzYmVtNDY1IHRvU2NpICA5OTk5OS4wRS05NyAgICAgICAgLT4gOS45OTk5MEUtOTMNCitkc2JlbTQ2NiB0b1NjaSAgOTk5OTkuRS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTMNCitkc2JlbTQ2NyB0b1NjaSAgOTk5OS45RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTQNCitkc2JlbTQ2OCB0b1NjaSAgOTk5Ljk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTUNCitkc2JlbTQ2OSB0b1NjaSAgOTkuOTk5RS05NyAgICAgICAgIC0+IDkuOTk5OUUtOTYgU3Vibm9ybWFsDQorZHNiZW00NzAgdG9TY2kgIDkuOTk5OUUtOTcgICAgICAgICAtPiA5Ljk5OTlFLTk3IFN1Ym5vcm1hbA0KK2RzYmVtNDcxIHRvU2NpICAwLjk5OTk5RS05NyAgICAgICAgLT4gMS4wMDAwRS05NyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDcyIHRvU2NpICAwLjA5OTk5OUUtOTcgICAgICAgLT4gMS4wMDBFLTk4ICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDczIHRvU2NpICAwLjAwOTk5OTlFLTk3ICAgICAgLT4gMS4wMEUtOTkgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDc0IHRvU2NpICAwLjAwMDk5OTk5RS05NyAgICAgLT4gMS4wRS0xMDAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDc1IHRvU2NpICAwLjAwMDA5OTk5OUUtOTcgICAgLT4gMUUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2RzYmVtNDc2IHRvU2NpICAwLjAwMDAwOTk5OTlFLTk3ICAgLT4gMEUtMTAxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiZW00NzcgdG9TY2kgIDAuMDAwMDAwOTk5OTlFLTk3ICAtPiAwRS0xMDEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JlbTQ3OCB0b1NjaSAgMC4wMDAwMDAwOTk5OTlFLTk3IC0+IDBFLTEwMSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KKy0tIEV4cG9uZW50cyB3aXRoIGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcw0KK2RzYmFzMTAwMSB0b1NjaSAgMWU5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMxMDAyIHRvU2NpICAxZTA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMxMDAzIHRvU2NpICAxZTAwOTk5OTk5OTk5IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMTAwNCB0b1NjaSAgMWUwMDA5OTk5OTk5OTkgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMxMDA1IHRvU2NpICAxZTAwMDAwMDAwMDAwMDk5OTk5OTk5OSAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitkc2JhczEwMDYgdG9TY2kgIDFlMDAwMDAwMDAwMDAxMDAwMDAwMDA3IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2RzYmFzMTAwNyB0b1NjaSAgMWUtOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXMxMDA4IHRvU2NpICAxZS0wOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczEwMDkgdG9TY2kgIDFlLTAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2RzYmFzMTAxMCB0b1NjaSAgMWUtMDAwOTk5OTk5OTk5IC0+IDBFLTEwMSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZHNiYXMxMDExIHRvU2NpICAxZS0wMDAwMDAwMDAwMDA5OTk5OTk5OTkgLT4gMEUtMTAxIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitkc2JhczEwMTIgdG9TY2kgIDFlLTAwMDAwMDAwMDAwMTAwMDAwMDAwNyAtPiAwRS0xMDEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQorZHNiYXMxMDQxIHRvU2NpICAgICAxLjExNTI0NDRFLTk2IC0+ICAxLjExNTI0RS05NiBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2RzYmFzMTA0MiB0b1NjaSAgICAgMS4xMTUyNDQ1RS05NiAtPiAgMS4xMTUyNEUtOTYgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitkc2JhczEwNDMgdG9TY2kgICAgIDEuMTE1MjQ0NkUtOTYgLT4gIDEuMTE1MjRFLTk2IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorDQorLS0gY2xhbXBlZCB6ZXJvcyBbc2VlIGFsc28gY2xhbXAuZGVjVGVzdF0NCitkc2JhczEwNzUgdG9TY2kgICAwZSsxMDAwMCAgLT4gIDBFKzkwICAgQ2xhbXBlZA0KK2RzYmFzMTA3NiB0b1NjaSAgIDBlLTEwMDAwICAtPiAgMEUtMTAxICBDbGFtcGVkDQorZHNiYXMxMDc3IHRvU2NpICAtMGUrMTAwMDAgIC0+IC0wRSs5MCAgIENsYW1wZWQNCitkc2JhczEwNzggdG9TY2kgIC0wZS0xMDAwMCAgLT4gLTBFLTEwMSAgQ2xhbXBlZA0KKw0KKy0tIGV4dHJlbWUgdmFsdWVzIGZyb20gbmV4dC13aWRlcg0KK2RzYmFzMTEwMSB0b1NjaSAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZHNiYXMxMTAyIHRvU2NpIC0xRS0zODMgLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZHNiYXMxMTAzIHRvU2NpIC0xRS0zOTggLT4gLTBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZHNiYXMxMTA0IHRvU2NpIC0wIC0+IC0wDQorZHNiYXMxMTA1IHRvU2NpICswIC0+ICAwDQorZHNiYXMxMTA2IHRvU2NpICsxRS0zOTggLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZHNiYXMxMTA3IHRvU2NpICsxRS0zODMgLT4gIDBFLTEwMSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZHNiYXMxMTA4IHRvU2NpICs5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBuYXJyb3dpbmcgY2FzZQ0KK2RzYmFzMTExMCB0b1NjaSAyLjAwMDAwMDAwMDAwMDAwMEUtOTkgLT4gMi4wMEUtOTkgUm91bmRlZCBTdWJub3JtYWwNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZHNFbmNvZGUuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CmluZGV4IDgxODU3OGIuLjcyNjQ3NDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9kc0VuY29kZS5kZWNUZXN0CkBAIC0xLDM3MiArMSwzNzIgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gZHNFbmNvZGUuZGVjVGVzdCAtLSBkZWNpbWFsIGZvdXItYnl0ZSBmb3JtYXQgdGVzdGNhc2VzICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gW1ByZXZpb3VzbHkgY2FsbGVkIGRlY2ltYWwzMi5kZWNUZXN0XQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIGZvdXItYnl0ZSBjb25jcmV0ZSByZXByZXNlbnRhdGlvbi4KLS0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOgotLS0KLS0tICAxIGJpdCAgc2lnbgotLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZAotLS0gIDYgYml0cyBleHBvbmVudCBjb250aW51YXRpb24KLS0tIDIwIGJpdHMgY29lZmZpY2llbnQgY29udGludWF0aW9uCi0tLQotLS0gVG90YWwgZXhwb25lbnQgbGVuZ3RoIDggYml0cwotLS0gVG90YWwgY29lZmZpY2llbnQgbGVuZ3RoIDI0IGJpdHMgKDcgZGlnaXRzKQotLS0KLS0tIEVsaW1pdCA9ICAxOTEgKG1heGltdW0gZW5jb2RlZCBleHBvbmVudCkKLS0tIEVtYXggICA9ICAgOTYgKGxhcmdlc3QgZXhwb25lbnQgdmFsdWUpCi0tLSBFbWluICAgPSAgLTk1IChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkKLS0tIGJpYXMgICA9ICAxMDEgKHN1YnRyYWN0ZWQgZnJvbSBlbmNvZGVkIGV4cG9uZW50KSA9IC1FdGlueQotCi0tLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQotLS0gJ2xlZnQtaGFuZC1zaWRlJzsgcm91bmRpbmcgZnJvbSBzdHJpbmdzIGlzIHRlc3RlZCBpbiAnYmFzZScKLS0tIHRlc3RjYXNlIGdyb3Vwcy4KLQotZXh0ZW5kZWQ6ICAgIDEKLWNsYW1wOiAgICAgICAxCi1wcmVjaXNpb246ICAgNwotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiA5NgotbWluRXhwb25lbnQ6IC05NQotCi0tLSBHZW5lcmFsIHRlc3RjYXNlcwotLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQotZGVjczAwMSBhcHBseSAgICNBMjMwMDNEMCAgICAgICAgICAtPiAtNy41MAotZGVjczAwMiBhcHBseSAgIC03LjUwICAgICAgICAgICAgICAtPiAjQTIzMDAzRDAKLS0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MKLWRlY3MwMDMgYXBwbHkgICAjQTI2MDAzRDAgICAgICAgICAtPiAtNy41MEUrMwotZGVjczAwNCBhcHBseSAgIC03LjUwRSszICAgICAgICAgIC0+ICNBMjYwMDNEMAotZGVjczAwNSBhcHBseSAgICNBMjUwMDNEMCAgICAgICAgIC0+IC03NTAKLWRlY3MwMDYgYXBwbHkgICAtNzUwICAgICAgICAgICAgICAtPiAjQTI1MDAzRDAKLWRlY3MwMDcgYXBwbHkgICAjQTI0MDAzRDAgICAgICAgICAtPiAtNzUuMAotZGVjczAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjQwMDNEMAotZGVjczAwOSBhcHBseSAgICNBMjIwMDNEMCAgICAgICAgIC0+IC0wLjc1MAotZGVjczAxMCBhcHBseSAgIC0wLjc1MCAgICAgICAgICAgIC0+ICNBMjIwMDNEMAotZGVjczAxMSBhcHBseSAgICNBMjEwMDNEMCAgICAgICAgIC0+IC0wLjA3NTAKLWRlY3MwMTIgYXBwbHkgICAtMC4wNzUwICAgICAgICAgICAtPiAjQTIxMDAzRDAKLWRlY3MwMTMgYXBwbHkgICAjQTFmMDAzRDAgICAgICAgICAtPiAtMC4wMDA3NTAKLWRlY3MwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTFmMDAzRDAKLWRlY3MwMTUgYXBwbHkgICAjQTFkMDAzRDAgICAgICAgICAtPiAtMC4wMDAwMDc1MAotZGVjczAxNiBhcHBseSAgIC0wLjAwMDAwNzUwICAgICAgIC0+ICNBMWQwMDNEMAotZGVjczAxNyBhcHBseSAgICNBMWMwMDNEMCAgICAgICAgIC0+IC03LjUwRS03Ci1kZWNzMDE4IGFwcGx5ICAgLTcuNTBFLTcgICAgICAgICAgLT4gI0ExYzAwM0QwCi0KLS0tIE5vcm1hbGl0eQotZGVjczAyMCBhcHBseSAgIDEyMzQ1NjcgICAgICAgICAgICAtPiAjMjY1NGQyZTcKLWRlY3MwMjEgYXBwbHkgIC0xMjM0NTY3ICAgICAgICAgICAgLT4gI2E2NTRkMmU3Ci1kZWNzMDIyIGFwcGx5ICAgMTExMTExMSAgICAgICAgICAgIC0+ICMyNjUyNDQ5MQotCi0tLSBObWF4IGFuZCBzaW1pbGFyCi1kZWNzMDMxIGFwcGx5ICAgOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gIzc3ZjNmY2ZmCi1kZWNzMDMyIGFwcGx5ICAgIzc3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gOS45OTk5OTlFKzk2Ci1kZWNzMDMzIGFwcGx5ICAgMS4yMzQ1NjdFKzk2ICAgICAgICAgICAgLT4gIzQ3ZjRkMmU3Ci1kZWNzMDM0IGFwcGx5ICAgIzQ3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gMS4yMzQ1NjdFKzk2Ci0tLSBmb2xkLWRvd25zIChtb3JlIGJlbG93KQotZGVjczAzNSBhcHBseSAgIDEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+ICM0N2Y0YzAwMCBDbGFtcGVkCi1kZWNzMDM2IGFwcGx5ICAgIzQ3ZjRjMDAwICAgICAgICAgICAgICAgLT4gMS4yMzAwMDBFKzk2Ci1kZWNzMDM3IGFwcGx5ICAgMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQ3ZjAwMDAwIENsYW1wZWQKLWRlY3MwMzggYXBwbHkgICAjNDdmMDAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwMEUrOTYKLQotZGVjczA1MSBhcHBseSAgIDEyMzQ1ICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwNDljNQotZGVjczA1MiBhcHBseSAgICMyMjUwNDljNSAgICAgICAgICAgICAgIC0+IDEyMzQ1Ci1kZWNzMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwNTM0Ci1kZWNzMDU0IGFwcGx5ICAgIzIyNTAwNTM0ICAgICAgICAgICAgICAgLT4gMTIzNAotZGVjczA1NSBhcHBseSAgIDEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDBhMwotZGVjczA1NiBhcHBseSAgICMyMjUwMDBhMyAgICAgICAgICAgICAgIC0+IDEyMwotZGVjczA1NyBhcHBseSAgIDEyICAgICAgICAgICAgICAgICAgICAgIC0+ICMyMjUwMDAxMgotZGVjczA1OCBhcHBseSAgICMyMjUwMDAxMiAgICAgICAgICAgICAgIC0+IDEyCi1kZWNzMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAxCi1kZWNzMDYwIGFwcGx5ICAgIzIyNTAwMDAxICAgICAgICAgICAgICAgLT4gMQotZGVjczA2MSBhcHBseSAgIDEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDBhMwotZGVjczA2MiBhcHBseSAgICMyMjMwMDBhMyAgICAgICAgICAgICAgIC0+IDEuMjMKLWRlY3MwNjMgYXBwbHkgICAxMjMuNDUgICAgICAgICAgICAgICAgICAtPiAjMjIzMDQ5YzUKLWRlY3MwNjQgYXBwbHkgICAjMjIzMDQ5YzUgICAgICAgICAgICAgICAtPiAxMjMuNDUKLQotLS0gTm1pbiBhbmQgYmVsb3cKLWRlY3MwNzEgYXBwbHkgICAxRS05NSAgICAgICAgICAgICAgICAgICAtPiAjMDA2MDAwMDEKLWRlY3MwNzIgYXBwbHkgICAjMDA2MDAwMDEgICAgICAgICAgICAgICAtPiAxRS05NQotZGVjczA3MyBhcHBseSAgIDEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMAotZGVjczA3NCBhcHBseSAgICMwNDAwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRS05NQotZGVjczA3NSBhcHBseSAgIDEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMQotZGVjczA3NiBhcHBseSAgICMwNDAwMDAwMSAgICAgICAgICAgICAgIC0+IDEuMDAwMDAxRS05NQotCi1kZWNzMDc3IGFwcGx5ICAgMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDIwMDAwICAgICBTdWJub3JtYWwKLWRlY3MwN3ggYXBwbHkgICAxLjAwMDAwRS05NiAgICAgICAgICAgICAtPiAxLjAwMDAwRS05NiAgIFN1Ym5vcm1hbAotZGVjczA3OCBhcHBseSAgICMwMDAyMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDBFLTk2ICAgU3Vibm9ybWFsCi1kZWNzMDc5IGFwcGx5ICAgMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDEwICAgICBTdWJub3JtYWwKLWRlY3MwODAgYXBwbHkgICAjMDAwMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFLTEwMCAgICAgIFN1Ym5vcm1hbAotZGVjczA4MSBhcHBseSAgIDAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgICAgU3Vibm9ybWFsCi1kZWNzMDgyIGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKLWRlY3MwODMgYXBwbHkgICAxZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDEgICAgIFN1Ym5vcm1hbAotZGVjczA4NCBhcHBseSAgICMwMDAwMDAwMSAgICAgICAgICAgICAgIC0+IDFFLTEwMSAgICAgICAgU3Vibm9ybWFsCi1kZWNzMDh4IGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwKLQotLS0gdW5kZXJmbG93cyBjYW5ub3QgYmUgdGVzdGVkOyBqdXN0IGNoZWNrIGVkZ2UgY2FzZQotZGVjczA5MCBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgU3Vibm9ybWFsCi0KLS0tIHNhbWUgYWdhaW4sIG5lZ2F0aXZlcyAtLQotCi0tLSBObWF4IGFuZCBzaW1pbGFyCi1kZWNzMTIyIGFwcGx5ICAtOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gI2Y3ZjNmY2ZmCi1kZWNzMTIzIGFwcGx5ICAgI2Y3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5RSs5NgotZGVjczEyNCBhcHBseSAgLTEuMjM0NTY3RSs5NiAgICAgICAgICAgIC0+ICNjN2Y0ZDJlNwotZGVjczEyNSBhcHBseSAgICNjN2Y0ZDJlNyAgICAgICAgICAgICAgIC0+IC0xLjIzNDU2N0UrOTYKLS0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpCi1kZWNzMTMwIGFwcGx5ICAtMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gI2M3ZjRjMDAwIENsYW1wZWQKLWRlY3MxMzEgYXBwbHkgICAjYzdmNGMwMDAgICAgICAgICAgICAgICAtPiAtMS4yMzAwMDBFKzk2Ci1kZWNzMTMyIGFwcGx5ICAtMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gI2M3ZjAwMDAwIENsYW1wZWQKLWRlY3MxMzMgYXBwbHkgICAjYzdmMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFKzk2Ci0KLWRlY3MxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDQ5YzUKLWRlY3MxNTIgYXBwbHkgICAjYTI1MDQ5YzUgICAgICAgICAgICAgICAtPiAtMTIzNDUKLWRlY3MxNTMgYXBwbHkgIC0xMjM0ICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDA1MzQKLWRlY3MxNTQgYXBwbHkgICAjYTI1MDA1MzQgICAgICAgICAgICAgICAtPiAtMTIzNAotZGVjczE1NSBhcHBseSAgLTEyMyAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDBhMwotZGVjczE1NiBhcHBseSAgICNhMjUwMDBhMyAgICAgICAgICAgICAgIC0+IC0xMjMKLWRlY3MxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMTIKLWRlY3MxNTggYXBwbHkgICAjYTI1MDAwMTIgICAgICAgICAgICAgICAtPiAtMTIKLWRlY3MxNTkgYXBwbHkgIC0xICAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMDEKLWRlY3MxNjAgYXBwbHkgICAjYTI1MDAwMDEgICAgICAgICAgICAgICAtPiAtMQotZGVjczE2MSBhcHBseSAgLTEuMjMgICAgICAgICAgICAgICAgICAgIC0+ICNhMjMwMDBhMwotZGVjczE2MiBhcHBseSAgICNhMjMwMDBhMyAgICAgICAgICAgICAgIC0+IC0xLjIzCi1kZWNzMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzA0OWM1Ci1kZWNzMTY0IGFwcGx5ICAgI2EyMzA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMy40NQotCi0tLSBObWluIGFuZCBiZWxvdwotZGVjczE3MSBhcHBseSAgLTFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICM4MDYwMDAwMQotZGVjczE3MiBhcHBseSAgICM4MDYwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS05NQotZGVjczE3MyBhcHBseSAgLTEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMAotZGVjczE3NCBhcHBseSAgICM4NDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwMEUtOTUKLWRlY3MxNzUgYXBwbHkgIC0xLjAwMDAwMUUtOTUgICAgICAgICAgICAtPiAjODQwMDAwMDEKLWRlY3MxNzYgYXBwbHkgICAjODQwMDAwMDEgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDFFLTk1Ci0KLWRlY3MxNzcgYXBwbHkgIC0wLjEwMDAwMEUtOTUgICAgICAgICAgICAtPiAjODAwMjAwMDAgICAgIFN1Ym5vcm1hbAotZGVjczE3OCBhcHBseSAgICM4MDAyMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwRS05NiAgU3Vibm9ybWFsCi1kZWNzMTc5IGFwcGx5ICAtMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzgwMDAwMDEwICAgICBTdWJub3JtYWwKLWRlY3MxODAgYXBwbHkgICAjODAwMDAwMTAgICAgICAgICAgICAgICAtPiAtMS4wRS0xMDAgICAgIFN1Ym5vcm1hbAotZGVjczE4MSBhcHBseSAgLTAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsCi1kZWNzMTgyIGFwcGx5ICAgIzgwMDAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTEwMSAgICAgICBTdWJub3JtYWwKLWRlY3MxODMgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgICAgIFN1Ym5vcm1hbAotZGVjczE4NCBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsCi0KLS0tIHVuZGVyZmxvdyBlZGdlIGNhc2UKLWRlY3MxOTAgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgIFN1Ym5vcm1hbAotCi0tLSB6ZXJvcwotZGVjczQwMCBhcHBseSAgIDBFLTQwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMCAgQ2xhbXBlZAotZGVjczQwMSBhcHBseSAgIDBFLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMAotZGVjczQwMiBhcHBseSAgICMwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDBFLTEwMQotZGVjczQwMyBhcHBseSAgIDAuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMAotZGVjczQwNCBhcHBseSAgICMwMDAwMDAwMCAgICAgICAgICAgICAgIC0+IDBFLTEwMQotZGVjczQwNSBhcHBseSAgIDBFLTIgICAgICAgICAgICAgICAgICAgIC0+ICMyMjMwMDAwMAotZGVjczQwNiBhcHBseSAgICMyMjMwMDAwMCAgICAgICAgICAgICAgIC0+IDAuMDAKLWRlY3M0MDcgYXBwbHkgICAwICAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMDAKLWRlY3M0MDggYXBwbHkgICAjMjI1MDAwMDAgICAgICAgICAgICAgICAtPiAwCi1kZWNzNDA5IGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyODAwMDAwCi1kZWNzNDEwIGFwcGx5ICAgIzIyODAwMDAwICAgICAgICAgICAgICAgLT4gMEUrMwotZGVjczQxMSBhcHBseSAgIDBFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMAotZGVjczQxMiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCi0tLSBjbGFtcGVkIHplcm9zLi4uCi1kZWNzNDEzIGFwcGx5ICAgMEUrOTEgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkCi1kZWNzNDE0IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTAKLWRlY3M0MTUgYXBwbHkgICAwRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQKLWRlY3M0MTYgYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MAotZGVjczQxNyBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZAotZGVjczQxOCBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwCi0KLS0tIG5lZ2F0aXZlIHplcm9zCi1kZWNzNDIwIGFwcGx5ICAgLTBFLTQwMCAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwICBDbGFtcGVkCi1kZWNzNDIxIGFwcGx5ICAgLTBFLTEwMSAgICAgICAgICAgICAgICAgLT4gIzgwMDAwMDAwCi1kZWNzNDIyIGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQotZGVjczQyMyBhcHBseSAgIC0wLjAwMDAwMEUtOTUgICAgICAgICAgIC0+ICM4MDAwMDAwMAotZGVjczQyNCBhcHBseSAgICM4MDAwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRS0xMDEKLWRlY3M0MjUgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDAKLWRlY3M0MjYgYXBwbHkgICAjYTIzMDAwMDAgICAgICAgICAgICAgICAtPiAtMC4wMAotZGVjczQyNyBhcHBseSAgIC0wICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMAotZGVjczQyOCBhcHBseSAgICNhMjUwMDAwMCAgICAgICAgICAgICAgIC0+IC0wCi1kZWNzNDI5IGFwcGx5ICAgLTBFKzMgICAgICAgICAgICAgICAgICAgLT4gI2EyODAwMDAwCi1kZWNzNDMwIGFwcGx5ICAgI2EyODAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzMKLWRlY3M0MzEgYXBwbHkgICAtMEUrOTAgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAKLWRlY3M0MzIgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKLS0tIGNsYW1wZWQgemVyb3MuLi4KLWRlY3M0MzMgYXBwbHkgICAtMEUrOTEgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKLWRlY3M0MzQgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKLWRlY3M0MzUgYXBwbHkgICAtMEUrOTYgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKLWRlY3M0MzYgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKLWRlY3M0MzcgYXBwbHkgICAtMEUrNDAwICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQKLWRlY3M0MzggYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTAKLQotLS0gU3BlY2lhbHMKLWRlY3M1MDAgYXBwbHkgICBJbmZpbml0eSAgLT4gIzc4MDAwMDAwCi1kZWNzNTAxIGFwcGx5ICAgIzc4Nzg3ODc4IC0+ICM3ODAwMDAwMAotZGVjczUwMiBhcHBseSAgICM3ODAwMDAwMCAtPiBJbmZpbml0eQotZGVjczUwMyBhcHBseSAgICM3OTc5Nzk3OSAtPiAjNzgwMDAwMDAKLWRlY3M1MDQgYXBwbHkgICAjNzkwMDAwMDAgLT4gSW5maW5pdHkKLWRlY3M1MDUgYXBwbHkgICAjN2E3YTdhN2EgLT4gIzc4MDAwMDAwCi1kZWNzNTA2IGFwcGx5ICAgIzdhMDAwMDAwIC0+IEluZmluaXR5Ci1kZWNzNTA3IGFwcGx5ICAgIzdiN2I3YjdiIC0+ICM3ODAwMDAwMAotZGVjczUwOCBhcHBseSAgICM3YjAwMDAwMCAtPiBJbmZpbml0eQotZGVjczUwOSBhcHBseSAgICM3YzdjN2M3YyAtPiAjN2MwYzdjN2MKLQotZGVjczUxMCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDAKLWRlY3M1MTEgYXBwbHkgICAjN2MwMDAwMDAgLT4gTmFOCi1kZWNzNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkIC0+ICM3YzBkN2Q3ZAotZGVjczUxMyBhcHBseSAgICM3ZDAwMDAwMCAtPiBOYU4KLWRlY3M1MTQgYXBwbHkgICAjN2U3ZTdlN2UgLT4gIzdlMGU3YzdlCi1kZWNzNTE1IGFwcGx5ICAgIzdlMDAwMDAwIC0+IHNOYU4KLWRlY3M1MTYgYXBwbHkgICAjN2Y3ZjdmN2YgLT4gIzdlMGY3YzdmCi1kZWNzNTE3IGFwcGx5ICAgIzdmMDAwMDAwIC0+IHNOYU4KLWRlY3M1MTggYXBwbHkgICAjN2ZmZmZmZmYgLT4gc05hTjk5OTk5OQotZGVjczUxOSBhcHBseSAgICM3ZmZmZmZmZiAtPiAjN2UwM2ZjZmYKLQotZGVjczUyMCBhcHBseSAgIC1JbmZpbml0eSAtPiAjZjgwMDAwMDAKLWRlY3M1MjEgYXBwbHkgICAjZjg3ODc4NzggLT4gI2Y4MDAwMDAwCi1kZWNzNTIyIGFwcGx5ICAgI2Y4MDAwMDAwIC0+IC1JbmZpbml0eQotZGVjczUyMyBhcHBseSAgICNmOTc5Nzk3OSAtPiAjZjgwMDAwMDAKLWRlY3M1MjQgYXBwbHkgICAjZjkwMDAwMDAgLT4gLUluZmluaXR5Ci1kZWNzNTI1IGFwcGx5ICAgI2ZhN2E3YTdhIC0+ICNmODAwMDAwMAotZGVjczUyNiBhcHBseSAgICNmYTAwMDAwMCAtPiAtSW5maW5pdHkKLWRlY3M1MjcgYXBwbHkgICAjZmI3YjdiN2IgLT4gI2Y4MDAwMDAwCi1kZWNzNTI4IGFwcGx5ICAgI2ZiMDAwMDAwIC0+IC1JbmZpbml0eQotCi1kZWNzNTI5IGFwcGx5ICAgLU5hTiAgICAgIC0+ICNmYzAwMDAwMAotZGVjczUzMCBhcHBseSAgICNmYzdjN2M3YyAtPiAjZmMwYzdjN2MKLWRlY3M1MzEgYXBwbHkgICAjZmMwMDAwMDAgLT4gLU5hTgotZGVjczUzMiBhcHBseSAgICNmZDdkN2Q3ZCAtPiAjZmMwZDdkN2QKLWRlY3M1MzMgYXBwbHkgICAjZmQwMDAwMDAgLT4gLU5hTgotZGVjczUzNCBhcHBseSAgICNmZTdlN2U3ZSAtPiAjZmUwZTdjN2UKLWRlY3M1MzUgYXBwbHkgICAjZmUwMDAwMDAgLT4gLXNOYU4KLWRlY3M1MzYgYXBwbHkgICAjZmY3ZjdmN2YgLT4gI2ZlMGY3YzdmCi1kZWNzNTM3IGFwcGx5ICAgI2ZmMDAwMDAwIC0+IC1zTmFOCi1kZWNzNTM4IGFwcGx5ICAgI2ZmZmZmZmZmIC0+IC1zTmFOOTk5OTk5Ci1kZWNzNTM5IGFwcGx5ICAgI2ZmZmZmZmZmIC0+ICNmZTAzZmNmZgotCi0tLSBkaWFnbm9zdGljIE5hTnMKLWRlY3M1NDAgYXBwbHkgICBOYU4gICAgICAgLT4gIzdjMDAwMDAwCi1kZWNzNTQxIGFwcGx5ICAgTmFOMCAgICAgIC0+ICM3YzAwMDAwMAotZGVjczU0MiBhcHBseSAgIE5hTjEgICAgICAtPiAjN2MwMDAwMDEKLWRlY3M1NDMgYXBwbHkgICBOYU4xMiAgICAgLT4gIzdjMDAwMDEyCi1kZWNzNTQ0IGFwcGx5ICAgTmFONzkgICAgIC0+ICM3YzAwMDA3OQotZGVjczU0NSBhcHBseSAgIE5hTjEyMzQ1ICAgLT4gIzdjMDA0OWM1Ci1kZWNzNTQ2IGFwcGx5ICAgTmFOMTIzNDU2ICAtPiAjN2MwMjhlNTYKLWRlY3M1NDcgYXBwbHkgICBOYU43OTk3OTkgIC0+ICM3YzBmN2ZkZgotZGVjczU0OCBhcHBseSAgIE5hTjk5OTk5OSAgLT4gIzdjMDNmY2ZmCi0KLQotLS0gZm9sZC1kb3duIGZ1bGwgc2VxdWVuY2UKLWRlY3M2MDEgYXBwbHkgICAxRSs5NiAgICAgICAgICAgICAgICAgICAtPiAjNDdmMDAwMDAgQ2xhbXBlZAotZGVjczYwMiBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5NgotZGVjczYwMyBhcHBseSAgIDFFKzk1ICAgICAgICAgICAgICAgICAgIC0+ICM0M2YyMDAwMCBDbGFtcGVkCi1kZWNzNjA0IGFwcGx5ICAgIzQzZjIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUrOTUKLWRlY3M2MDUgYXBwbHkgICAxRSs5NCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDQwMDAgQ2xhbXBlZAotZGVjczYwNiBhcHBseSAgICM0M2YwNDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMEUrOTQKLWRlY3M2MDcgYXBwbHkgICAxRSs5MyAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDA0MDAgQ2xhbXBlZAotZGVjczYwOCBhcHBseSAgICM0M2YwMDQwMCAgICAgICAgICAgICAgIC0+IDEuMDAwRSs5MwotZGVjczYwOSBhcHBseSAgIDFFKzkyICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDA4MCBDbGFtcGVkCi1kZWNzNjEwIGFwcGx5ICAgIzQzZjAwMDgwICAgICAgICAgICAgICAgLT4gMS4wMEUrOTIKLWRlY3M2MTEgYXBwbHkgICAxRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMTAgQ2xhbXBlZAotZGVjczYxMiBhcHBseSAgICM0M2YwMDAxMCAgICAgICAgICAgICAgIC0+IDEuMEUrOTEKLWRlY3M2MTMgYXBwbHkgICAxRSs5MCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDEKLWRlY3M2MTQgYXBwbHkgICAjNDNmMDAwMDEgICAgICAgICAgICAgICAtPiAxRSs5MAotCi0KLS0tIFNlbGVjdGVkIERQRCBjb2RlcwotZGVjczcwMCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAtPiAwCi1kZWNzNzAxIGFwcGx5ICAgIzIyNTAwMDA5ICAgICAgIC0+IDkKLWRlY3M3MDIgYXBwbHkgICAjMjI1MDAwMTAgICAgICAgLT4gMTAKLWRlY3M3MDMgYXBwbHkgICAjMjI1MDAwMTkgICAgICAgLT4gMTkKLWRlY3M3MDQgYXBwbHkgICAjMjI1MDAwMjAgICAgICAgLT4gMjAKLWRlY3M3MDUgYXBwbHkgICAjMjI1MDAwMjkgICAgICAgLT4gMjkKLWRlY3M3MDYgYXBwbHkgICAjMjI1MDAwMzAgICAgICAgLT4gMzAKLWRlY3M3MDcgYXBwbHkgICAjMjI1MDAwMzkgICAgICAgLT4gMzkKLWRlY3M3MDggYXBwbHkgICAjMjI1MDAwNDAgICAgICAgLT4gNDAKLWRlY3M3MDkgYXBwbHkgICAjMjI1MDAwNDkgICAgICAgLT4gNDkKLWRlY3M3MTAgYXBwbHkgICAjMjI1MDAwNTAgICAgICAgLT4gNTAKLWRlY3M3MTEgYXBwbHkgICAjMjI1MDAwNTkgICAgICAgLT4gNTkKLWRlY3M3MTIgYXBwbHkgICAjMjI1MDAwNjAgICAgICAgLT4gNjAKLWRlY3M3MTMgYXBwbHkgICAjMjI1MDAwNjkgICAgICAgLT4gNjkKLWRlY3M3MTQgYXBwbHkgICAjMjI1MDAwNzAgICAgICAgLT4gNzAKLWRlY3M3MTUgYXBwbHkgICAjMjI1MDAwNzEgICAgICAgLT4gNzEKLWRlY3M3MTYgYXBwbHkgICAjMjI1MDAwNzIgICAgICAgLT4gNzIKLWRlY3M3MTcgYXBwbHkgICAjMjI1MDAwNzMgICAgICAgLT4gNzMKLWRlY3M3MTggYXBwbHkgICAjMjI1MDAwNzQgICAgICAgLT4gNzQKLWRlY3M3MTkgYXBwbHkgICAjMjI1MDAwNzUgICAgICAgLT4gNzUKLWRlY3M3MjAgYXBwbHkgICAjMjI1MDAwNzYgICAgICAgLT4gNzYKLWRlY3M3MjEgYXBwbHkgICAjMjI1MDAwNzcgICAgICAgLT4gNzcKLWRlY3M3MjIgYXBwbHkgICAjMjI1MDAwNzggICAgICAgLT4gNzgKLWRlY3M3MjMgYXBwbHkgICAjMjI1MDAwNzkgICAgICAgLT4gNzkKLQotZGVjczczMCBhcHBseSAgICMyMjUwMDI5ZSAgICAgICAtPiA5OTQKLWRlY3M3MzEgYXBwbHkgICAjMjI1MDAyOWYgICAgICAgLT4gOTk1Ci1kZWNzNzMyIGFwcGx5ICAgIzIyNTAwMmEwICAgICAgIC0+IDUyMAotZGVjczczMyBhcHBseSAgICMyMjUwMDJhMSAgICAgICAtPiA1MjEKLQotLS0gRFBEOiBvbmUgb2YgZWFjaCBvZiB0aGUgaHVmZm1hbiBncm91cHMKLWRlY3M3NDAgYXBwbHkgICAjMjI1MDAzZjcgICAgICAgLT4gNzc3Ci1kZWNzNzQxIGFwcGx5ICAgIzIyNTAwM2Y4ICAgICAgIC0+IDc3OAotZGVjczc0MiBhcHBseSAgICMyMjUwMDNlYiAgICAgICAtPiA3ODcKLWRlY3M3NDMgYXBwbHkgICAjMjI1MDAzN2QgICAgICAgLT4gODc3Ci1kZWNzNzQ0IGFwcGx5ICAgIzIyNTAwMzlmICAgICAgIC0+IDk5NwotZGVjczc0NSBhcHBseSAgICMyMjUwMDNiZiAgICAgICAtPiA5NzkKLWRlY3M3NDYgYXBwbHkgICAjMjI1MDAzZGYgICAgICAgLT4gNzk5Ci1kZWNzNzQ3IGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OAotCi0KLS0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpCi1kZWNzNzUwIGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OAotZGVjczc1MSBhcHBseSAgICMyMjUwMDE2ZSAgICAgICAtPiA4ODgKLWRlY3M3NTIgYXBwbHkgICAjMjI1MDAyNmUgICAgICAgLT4gODg4Ci1kZWNzNzUzIGFwcGx5ICAgIzIyNTAwMzZlICAgICAgIC0+IDg4OAotZGVjczc1NCBhcHBseSAgICMyMjUwMDA2ZiAgICAgICAtPiA4ODkKLWRlY3M3NTUgYXBwbHkgICAjMjI1MDAxNmYgICAgICAgLT4gODg5Ci1kZWNzNzU2IGFwcGx5ICAgIzIyNTAwMjZmICAgICAgIC0+IDg4OQotZGVjczc1NyBhcHBseSAgICMyMjUwMDM2ZiAgICAgICAtPiA4ODkKLQotZGVjczc2MCBhcHBseSAgICMyMjUwMDA3ZSAgICAgICAtPiA4OTgKLWRlY3M3NjEgYXBwbHkgICAjMjI1MDAxN2UgICAgICAgLT4gODk4Ci1kZWNzNzYyIGFwcGx5ICAgIzIyNTAwMjdlICAgICAgIC0+IDg5OAotZGVjczc2MyBhcHBseSAgICMyMjUwMDM3ZSAgICAgICAtPiA4OTgKLWRlY3M3NjQgYXBwbHkgICAjMjI1MDAwN2YgICAgICAgLT4gODk5Ci1kZWNzNzY1IGFwcGx5ICAgIzIyNTAwMTdmICAgICAgIC0+IDg5OQotZGVjczc2NiBhcHBseSAgICMyMjUwMDI3ZiAgICAgICAtPiA4OTkKLWRlY3M3NjcgYXBwbHkgICAjMjI1MDAzN2YgICAgICAgLT4gODk5Ci0KLWRlY3M3NzAgYXBwbHkgICAjMjI1MDAwZWUgICAgICAgLT4gOTg4Ci1kZWNzNzcxIGFwcGx5ICAgIzIyNTAwMWVlICAgICAgIC0+IDk4OAotZGVjczc3MiBhcHBseSAgICMyMjUwMDJlZSAgICAgICAtPiA5ODgKLWRlY3M3NzMgYXBwbHkgICAjMjI1MDAzZWUgICAgICAgLT4gOTg4Ci1kZWNzNzc0IGFwcGx5ICAgIzIyNTAwMGVmICAgICAgIC0+IDk4OQotZGVjczc3NSBhcHBseSAgICMyMjUwMDFlZiAgICAgICAtPiA5ODkKLWRlY3M3NzYgYXBwbHkgICAjMjI1MDAyZWYgICAgICAgLT4gOTg5Ci1kZWNzNzc3IGFwcGx5ICAgIzIyNTAwM2VmICAgICAgIC0+IDk4OQotCi1kZWNzNzgwIGFwcGx5ICAgIzIyNTAwMGZlICAgICAgIC0+IDk5OAotZGVjczc4MSBhcHBseSAgICMyMjUwMDFmZSAgICAgICAtPiA5OTgKLWRlY3M3ODIgYXBwbHkgICAjMjI1MDAyZmUgICAgICAgLT4gOTk4Ci1kZWNzNzgzIGFwcGx5ICAgIzIyNTAwM2ZlICAgICAgIC0+IDk5OAotZGVjczc4NCBhcHBseSAgICMyMjUwMDBmZiAgICAgICAtPiA5OTkKLWRlY3M3ODUgYXBwbHkgICAjMjI1MDAxZmYgICAgICAgLT4gOTk5Ci1kZWNzNzg2IGFwcGx5ICAgIzIyNTAwMmZmICAgICAgIC0+IDk5OQotZGVjczc4NyBhcHBseSAgICMyMjUwMDNmZiAgICAgICAtPiA5OTkKLQotLS0gbmFycm93aW5nIGNhc2UKLWRlY3M3OTAgYXBwbHkgMi4wMEUtOTkgLT4gIzAwMDAwMTAwIFN1Ym5vcm1hbAotZGVjczc5MSBhcHBseSAjMDAwMDAxMDAgLT4gMi4wMEUtOTkgU3Vibm9ybWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBkc0VuY29kZS5kZWNUZXN0IC0tIGRlY2ltYWwgZm91ci1ieXRlIGZvcm1hdCB0ZXN0Y2FzZXMgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMCwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBbUHJldmlvdXNseSBjYWxsZWQgZGVjaW1hbDMyLmRlY1Rlc3RdDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgZm91ci1ieXRlIGNvbmNyZXRlIHJlcHJlc2VudGF0aW9uLg0KKy0tIEl0cyBjaGFyYWN0ZXJpc3RpY3MgYXJlOg0KKy0tDQorLS0gIDEgYml0ICBzaWduDQorLS0gIDUgYml0cyBjb21iaW5hdGlvbiBmaWVsZA0KKy0tICA2IGJpdHMgZXhwb25lbnQgY29udGludWF0aW9uDQorLS0gMjAgYml0cyBjb2VmZmljaWVudCBjb250aW51YXRpb24NCistLQ0KKy0tIFRvdGFsIGV4cG9uZW50IGxlbmd0aCA4IGJpdHMNCistLSBUb3RhbCBjb2VmZmljaWVudCBsZW5ndGggMjQgYml0cyAoNyBkaWdpdHMpDQorLS0NCistLSBFbGltaXQgPSAgMTkxIChtYXhpbXVtIGVuY29kZWQgZXhwb25lbnQpDQorLS0gRW1heCAgID0gICA5NiAobGFyZ2VzdCBleHBvbmVudCB2YWx1ZSkNCistLSBFbWluICAgPSAgLTk1IChzbWFsbGVzdCBleHBvbmVudCB2YWx1ZSkNCistLSBiaWFzICAgPSAgMTAxIChzdWJ0cmFjdGVkIGZyb20gZW5jb2RlZCBleHBvbmVudCkgPSAtRXRpbnkNCisNCistLSBUaGUgdGVzdGNhc2VzIGhlcmUgaGF2ZSBvbmx5IGV4YWN0bHkgcmVwcmVzZW50YWJsZSBkYXRhIG9uIHRoZQ0KKy0tICdsZWZ0LWhhbmQtc2lkZSc7IHJvdW5kaW5nIGZyb20gc3RyaW5ncyBpcyB0ZXN0ZWQgaW4gJ2Jhc2UnDQorLS0gdGVzdGNhc2UgZ3JvdXBzLg0KKw0KK2V4dGVuZGVkOiAgICAxDQorY2xhbXA6ICAgICAgIDENCitwcmVjaXNpb246ICAgNw0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDk2DQorbWluRXhwb25lbnQ6IC05NQ0KKw0KKy0tIEdlbmVyYWwgdGVzdGNhc2VzDQorLS0gKG1vc3RseSBkZXJpdmVkIGZyb20gdGhlIFN0cmF3bWFuIDQgZG9jdW1lbnQgYW5kIGV4YW1wbGVzKQ0KK2RlY3MwMDEgYXBwbHkgICAjQTIzMDAzRDAgICAgICAgICAgLT4gLTcuNTANCitkZWNzMDAyIGFwcGx5ICAgLTcuNTAgICAgICAgICAgICAgIC0+ICNBMjMwMDNEMA0KKy0tIGRlcml2YXRpdmUgY2Fub25pY2FsIHBsYWluIHN0cmluZ3MNCitkZWNzMDAzIGFwcGx5ICAgI0EyNjAwM0QwICAgICAgICAgLT4gLTcuNTBFKzMNCitkZWNzMDA0IGFwcGx5ICAgLTcuNTBFKzMgICAgICAgICAgLT4gI0EyNjAwM0QwDQorZGVjczAwNSBhcHBseSAgICNBMjUwMDNEMCAgICAgICAgIC0+IC03NTANCitkZWNzMDA2IGFwcGx5ICAgLTc1MCAgICAgICAgICAgICAgLT4gI0EyNTAwM0QwDQorZGVjczAwNyBhcHBseSAgICNBMjQwMDNEMCAgICAgICAgIC0+IC03NS4wDQorZGVjczAwOCBhcHBseSAgIC03NS4wICAgICAgICAgICAgIC0+ICNBMjQwMDNEMA0KK2RlY3MwMDkgYXBwbHkgICAjQTIyMDAzRDAgICAgICAgICAtPiAtMC43NTANCitkZWNzMDEwIGFwcGx5ICAgLTAuNzUwICAgICAgICAgICAgLT4gI0EyMjAwM0QwDQorZGVjczAxMSBhcHBseSAgICNBMjEwMDNEMCAgICAgICAgIC0+IC0wLjA3NTANCitkZWNzMDEyIGFwcGx5ICAgLTAuMDc1MCAgICAgICAgICAgLT4gI0EyMTAwM0QwDQorZGVjczAxMyBhcHBseSAgICNBMWYwMDNEMCAgICAgICAgIC0+IC0wLjAwMDc1MA0KK2RlY3MwMTQgYXBwbHkgICAtMC4wMDA3NTAgICAgICAgICAtPiAjQTFmMDAzRDANCitkZWNzMDE1IGFwcGx5ICAgI0ExZDAwM0QwICAgICAgICAgLT4gLTAuMDAwMDA3NTANCitkZWNzMDE2IGFwcGx5ICAgLTAuMDAwMDA3NTAgICAgICAgLT4gI0ExZDAwM0QwDQorZGVjczAxNyBhcHBseSAgICNBMWMwMDNEMCAgICAgICAgIC0+IC03LjUwRS03DQorZGVjczAxOCBhcHBseSAgIC03LjUwRS03ICAgICAgICAgIC0+ICNBMWMwMDNEMA0KKw0KKy0tIE5vcm1hbGl0eQ0KK2RlY3MwMjAgYXBwbHkgICAxMjM0NTY3ICAgICAgICAgICAgLT4gIzI2NTRkMmU3DQorZGVjczAyMSBhcHBseSAgLTEyMzQ1NjcgICAgICAgICAgICAtPiAjYTY1NGQyZTcNCitkZWNzMDIyIGFwcGx5ICAgMTExMTExMSAgICAgICAgICAgIC0+ICMyNjUyNDQ5MQ0KKw0KKy0tIE5tYXggYW5kIHNpbWlsYXINCitkZWNzMDMxIGFwcGx5ICAgOS45OTk5OTlFKzk2ICAgICAgICAgICAgLT4gIzc3ZjNmY2ZmDQorZGVjczAzMiBhcHBseSAgICM3N2YzZmNmZiAgICAgICAgICAgICAgIC0+IDkuOTk5OTk5RSs5Ng0KK2RlY3MwMzMgYXBwbHkgICAxLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjNDdmNGQyZTcNCitkZWNzMDM0IGFwcGx5ICAgIzQ3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gMS4yMzQ1NjdFKzk2DQorLS0gZm9sZC1kb3ducyAobW9yZSBiZWxvdykNCitkZWNzMDM1IGFwcGx5ICAgMS4yM0UrOTYgICAgICAgICAgICAgICAgLT4gIzQ3ZjRjMDAwIENsYW1wZWQNCitkZWNzMDM2IGFwcGx5ICAgIzQ3ZjRjMDAwICAgICAgICAgICAgICAgLT4gMS4yMzAwMDBFKzk2DQorZGVjczAzNyBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkDQorZGVjczAzOCBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5Ng0KKw0KK2RlY3MwNTEgYXBwbHkgICAxMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDQ5YzUNCitkZWNzMDUyIGFwcGx5ICAgIzIyNTA0OWM1ICAgICAgICAgICAgICAgLT4gMTIzNDUNCitkZWNzMDUzIGFwcGx5ICAgMTIzNCAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwNTM0DQorZGVjczA1NCBhcHBseSAgICMyMjUwMDUzNCAgICAgICAgICAgICAgIC0+IDEyMzQNCitkZWNzMDU1IGFwcGx5ICAgMTIzICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMGEzDQorZGVjczA1NiBhcHBseSAgICMyMjUwMDBhMyAgICAgICAgICAgICAgIC0+IDEyMw0KK2RlY3MwNTcgYXBwbHkgICAxMiAgICAgICAgICAgICAgICAgICAgICAtPiAjMjI1MDAwMTINCitkZWNzMDU4IGFwcGx5ICAgIzIyNTAwMDEyICAgICAgICAgICAgICAgLT4gMTINCitkZWNzMDU5IGFwcGx5ICAgMSAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAxDQorZGVjczA2MCBhcHBseSAgICMyMjUwMDAwMSAgICAgICAgICAgICAgIC0+IDENCitkZWNzMDYxIGFwcGx5ICAgMS4yMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMGEzDQorZGVjczA2MiBhcHBseSAgICMyMjMwMDBhMyAgICAgICAgICAgICAgIC0+IDEuMjMNCitkZWNzMDYzIGFwcGx5ICAgMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gIzIyMzA0OWM1DQorZGVjczA2NCBhcHBseSAgICMyMjMwNDljNSAgICAgICAgICAgICAgIC0+IDEyMy40NQ0KKw0KKy0tIE5taW4gYW5kIGJlbG93DQorZGVjczA3MSBhcHBseSAgIDFFLTk1ICAgICAgICAgICAgICAgICAgIC0+ICMwMDYwMDAwMQ0KK2RlY3MwNzIgYXBwbHkgICAjMDA2MDAwMDEgICAgICAgICAgICAgICAtPiAxRS05NQ0KK2RlY3MwNzMgYXBwbHkgICAxLjAwMDAwMEUtOTUgICAgICAgICAgICAtPiAjMDQwMDAwMDANCitkZWNzMDc0IGFwcGx5ICAgIzA0MDAwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMDBFLTk1DQorZGVjczA3NSBhcHBseSAgIDEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICMwNDAwMDAwMQ0KK2RlY3MwNzYgYXBwbHkgICAjMDQwMDAwMDEgICAgICAgICAgICAgICAtPiAxLjAwMDAwMUUtOTUNCisNCitkZWNzMDc3IGFwcGx5ICAgMC4xMDAwMDBFLTk1ICAgICAgICAgICAgLT4gIzAwMDIwMDAwICAgICBTdWJub3JtYWwNCitkZWNzMDd4IGFwcGx5ICAgMS4wMDAwMEUtOTYgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwNCitkZWNzMDc4IGFwcGx5ICAgIzAwMDIwMDAwICAgICAgICAgICAgICAgLT4gMS4wMDAwMEUtOTYgICBTdWJub3JtYWwNCitkZWNzMDc5IGFwcGx5ICAgMC4wMDAwMTBFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDEwICAgICBTdWJub3JtYWwNCitkZWNzMDgwIGFwcGx5ICAgIzAwMDAwMDEwICAgICAgICAgICAgICAgLT4gMS4wRS0xMDAgICAgICBTdWJub3JtYWwNCitkZWNzMDgxIGFwcGx5ICAgMC4wMDAwMDFFLTk1ICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwNCitkZWNzMDgyIGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCitkZWNzMDgzIGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gIzAwMDAwMDAxICAgICBTdWJub3JtYWwNCitkZWNzMDg0IGFwcGx5ICAgIzAwMDAwMDAxICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCitkZWNzMDh4IGFwcGx5ICAgMWUtMTAxICAgICAgICAgICAgICAgICAgLT4gMUUtMTAxICAgICAgICBTdWJub3JtYWwNCisNCistLSB1bmRlcmZsb3dzIGNhbm5vdCBiZSB0ZXN0ZWQ7IGp1c3QgY2hlY2sgZWRnZSBjYXNlDQorZGVjczA5MCBhcHBseSAgIDFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMSAgU3Vibm9ybWFsDQorDQorLS0gc2FtZSBhZ2FpbiwgbmVnYXRpdmVzIC0tDQorDQorLS0gTm1heCBhbmQgc2ltaWxhcg0KK2RlY3MxMjIgYXBwbHkgIC05Ljk5OTk5OUUrOTYgICAgICAgICAgICAtPiAjZjdmM2ZjZmYNCitkZWNzMTIzIGFwcGx5ICAgI2Y3ZjNmY2ZmICAgICAgICAgICAgICAgLT4gLTkuOTk5OTk5RSs5Ng0KK2RlY3MxMjQgYXBwbHkgIC0xLjIzNDU2N0UrOTYgICAgICAgICAgICAtPiAjYzdmNGQyZTcNCitkZWNzMTI1IGFwcGx5ICAgI2M3ZjRkMmU3ICAgICAgICAgICAgICAgLT4gLTEuMjM0NTY3RSs5Ng0KKy0tIGZvbGQtZG93bnMgKG1vcmUgYmVsb3cpDQorZGVjczEzMCBhcHBseSAgLTEuMjNFKzk2ICAgICAgICAgICAgICAgIC0+ICNjN2Y0YzAwMCBDbGFtcGVkDQorZGVjczEzMSBhcHBseSAgICNjN2Y0YzAwMCAgICAgICAgICAgICAgIC0+IC0xLjIzMDAwMEUrOTYNCitkZWNzMTMyIGFwcGx5ICAtMUUrOTYgICAgICAgICAgICAgICAgICAgLT4gI2M3ZjAwMDAwIENsYW1wZWQNCitkZWNzMTMzIGFwcGx5ICAgI2M3ZjAwMDAwICAgICAgICAgICAgICAgLT4gLTEuMDAwMDAwRSs5Ng0KKw0KK2RlY3MxNTEgYXBwbHkgIC0xMjM0NSAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDQ5YzUNCitkZWNzMTUyIGFwcGx5ICAgI2EyNTA0OWM1ICAgICAgICAgICAgICAgLT4gLTEyMzQ1DQorZGVjczE1MyBhcHBseSAgLTEyMzQgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDUzNA0KK2RlY3MxNTQgYXBwbHkgICAjYTI1MDA1MzQgICAgICAgICAgICAgICAtPiAtMTIzNA0KK2RlY3MxNTUgYXBwbHkgIC0xMjMgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwYTMNCitkZWNzMTU2IGFwcGx5ICAgI2EyNTAwMGEzICAgICAgICAgICAgICAgLT4gLTEyMw0KK2RlY3MxNTcgYXBwbHkgIC0xMiAgICAgICAgICAgICAgICAgICAgICAtPiAjYTI1MDAwMTINCitkZWNzMTU4IGFwcGx5ICAgI2EyNTAwMDEyICAgICAgICAgICAgICAgLT4gLTEyDQorZGVjczE1OSBhcHBseSAgLTEgICAgICAgICAgICAgICAgICAgICAgIC0+ICNhMjUwMDAwMQ0KK2RlY3MxNjAgYXBwbHkgICAjYTI1MDAwMDEgICAgICAgICAgICAgICAtPiAtMQ0KK2RlY3MxNjEgYXBwbHkgIC0xLjIzICAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwYTMNCitkZWNzMTYyIGFwcGx5ICAgI2EyMzAwMGEzICAgICAgICAgICAgICAgLT4gLTEuMjMNCitkZWNzMTYzIGFwcGx5ICAtMTIzLjQ1ICAgICAgICAgICAgICAgICAgLT4gI2EyMzA0OWM1DQorZGVjczE2NCBhcHBseSAgICNhMjMwNDljNSAgICAgICAgICAgICAgIC0+IC0xMjMuNDUNCisNCistLSBObWluIGFuZCBiZWxvdw0KK2RlY3MxNzEgYXBwbHkgIC0xRS05NSAgICAgICAgICAgICAgICAgICAtPiAjODA2MDAwMDENCitkZWNzMTcyIGFwcGx5ICAgIzgwNjAwMDAxICAgICAgICAgICAgICAgLT4gLTFFLTk1DQorZGVjczE3MyBhcHBseSAgLTEuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMA0KK2RlY3MxNzQgYXBwbHkgICAjODQwMDAwMDAgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDBFLTk1DQorZGVjczE3NSBhcHBseSAgLTEuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4NDAwMDAwMQ0KK2RlY3MxNzYgYXBwbHkgICAjODQwMDAwMDEgICAgICAgICAgICAgICAtPiAtMS4wMDAwMDFFLTk1DQorDQorZGVjczE3NyBhcHBseSAgLTAuMTAwMDAwRS05NSAgICAgICAgICAgIC0+ICM4MDAyMDAwMCAgICAgU3Vibm9ybWFsDQorZGVjczE3OCBhcHBseSAgICM4MDAyMDAwMCAgICAgICAgICAgICAgIC0+IC0xLjAwMDAwRS05NiAgU3Vibm9ybWFsDQorZGVjczE3OSBhcHBseSAgLTAuMDAwMDEwRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAxMCAgICAgU3Vibm9ybWFsDQorZGVjczE4MCBhcHBseSAgICM4MDAwMDAxMCAgICAgICAgICAgICAgIC0+IC0xLjBFLTEwMCAgICAgU3Vibm9ybWFsDQorZGVjczE4MSBhcHBseSAgLTAuMDAwMDAxRS05NSAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsDQorZGVjczE4MiBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsDQorZGVjczE4MyBhcHBseSAgLTFlLTEwMSAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMSAgICAgU3Vibm9ybWFsDQorZGVjczE4NCBhcHBseSAgICM4MDAwMDAwMSAgICAgICAgICAgICAgIC0+IC0xRS0xMDEgICAgICAgU3Vibm9ybWFsDQorDQorLS0gdW5kZXJmbG93IGVkZ2UgY2FzZQ0KK2RlY3MxOTAgYXBwbHkgIC0xZS0xMDEgICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDEgIFN1Ym5vcm1hbA0KKw0KKy0tIHplcm9zDQorZGVjczQwMCBhcHBseSAgIDBFLTQwMCAgICAgICAgICAgICAgICAgIC0+ICMwMDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3M0MDEgYXBwbHkgICAwRS0xMDEgICAgICAgICAgICAgICAgICAtPiAjMDAwMDAwMDANCitkZWNzNDAyIGFwcGx5ICAgIzAwMDAwMDAwICAgICAgICAgICAgICAgLT4gMEUtMTAxDQorZGVjczQwMyBhcHBseSAgIDAuMDAwMDAwRS05NSAgICAgICAgICAgIC0+ICMwMDAwMDAwMA0KK2RlY3M0MDQgYXBwbHkgICAjMDAwMDAwMDAgICAgICAgICAgICAgICAtPiAwRS0xMDENCitkZWNzNDA1IGFwcGx5ICAgMEUtMiAgICAgICAgICAgICAgICAgICAgLT4gIzIyMzAwMDAwDQorZGVjczQwNiBhcHBseSAgICMyMjMwMDAwMCAgICAgICAgICAgICAgIC0+IDAuMDANCitkZWNzNDA3IGFwcGx5ICAgMCAgICAgICAgICAgICAgICAgICAgICAgLT4gIzIyNTAwMDAwDQorZGVjczQwOCBhcHBseSAgICMyMjUwMDAwMCAgICAgICAgICAgICAgIC0+IDANCitkZWNzNDA5IGFwcGx5ICAgMEUrMyAgICAgICAgICAgICAgICAgICAgLT4gIzIyODAwMDAwDQorZGVjczQxMCBhcHBseSAgICMyMjgwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzMNCitkZWNzNDExIGFwcGx5ICAgMEUrOTAgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwDQorZGVjczQxMiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwDQorLS0gY2xhbXBlZCB6ZXJvcy4uLg0KK2RlY3M0MTMgYXBwbHkgICAwRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMDAgIENsYW1wZWQNCitkZWNzNDE0IGFwcGx5ICAgIzQzZjAwMDAwICAgICAgICAgICAgICAgLT4gMEUrOTANCitkZWNzNDE1IGFwcGx5ICAgMEUrOTYgICAgICAgICAgICAgICAgICAgLT4gIzQzZjAwMDAwICBDbGFtcGVkDQorZGVjczQxNiBhcHBseSAgICM0M2YwMDAwMCAgICAgICAgICAgICAgIC0+IDBFKzkwDQorZGVjczQxNyBhcHBseSAgIDBFKzQwMCAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMCAgQ2xhbXBlZA0KK2RlY3M0MTggYXBwbHkgICAjNDNmMDAwMDAgICAgICAgICAgICAgICAtPiAwRSs5MA0KKw0KKy0tIG5lZ2F0aXZlIHplcm9zDQorZGVjczQyMCBhcHBseSAgIC0wRS00MDAgICAgICAgICAgICAgICAgIC0+ICM4MDAwMDAwMCAgQ2xhbXBlZA0KK2RlY3M0MjEgYXBwbHkgICAtMEUtMTAxICAgICAgICAgICAgICAgICAtPiAjODAwMDAwMDANCitkZWNzNDIyIGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQ0KK2RlY3M0MjMgYXBwbHkgICAtMC4wMDAwMDBFLTk1ICAgICAgICAgICAtPiAjODAwMDAwMDANCitkZWNzNDI0IGFwcGx5ICAgIzgwMDAwMDAwICAgICAgICAgICAgICAgLT4gLTBFLTEwMQ0KK2RlY3M0MjUgYXBwbHkgICAtMEUtMiAgICAgICAgICAgICAgICAgICAtPiAjYTIzMDAwMDANCitkZWNzNDI2IGFwcGx5ICAgI2EyMzAwMDAwICAgICAgICAgICAgICAgLT4gLTAuMDANCitkZWNzNDI3IGFwcGx5ICAgLTAgICAgICAgICAgICAgICAgICAgICAgLT4gI2EyNTAwMDAwDQorZGVjczQyOCBhcHBseSAgICNhMjUwMDAwMCAgICAgICAgICAgICAgIC0+IC0wDQorZGVjczQyOSBhcHBseSAgIC0wRSszICAgICAgICAgICAgICAgICAgIC0+ICNhMjgwMDAwMA0KK2RlY3M0MzAgYXBwbHkgICAjYTI4MDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrMw0KK2RlY3M0MzEgYXBwbHkgICAtMEUrOTAgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDANCitkZWNzNDMyIGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwDQorLS0gY2xhbXBlZCB6ZXJvcy4uLg0KK2RlY3M0MzMgYXBwbHkgICAtMEUrOTEgICAgICAgICAgICAgICAgICAtPiAjYzNmMDAwMDAgIENsYW1wZWQNCitkZWNzNDM0IGFwcGx5ICAgI2MzZjAwMDAwICAgICAgICAgICAgICAgLT4gLTBFKzkwDQorZGVjczQzNSBhcHBseSAgIC0wRSs5NiAgICAgICAgICAgICAgICAgIC0+ICNjM2YwMDAwMCAgQ2xhbXBlZA0KK2RlY3M0MzYgYXBwbHkgICAjYzNmMDAwMDAgICAgICAgICAgICAgICAtPiAtMEUrOTANCitkZWNzNDM3IGFwcGx5ICAgLTBFKzQwMCAgICAgICAgICAgICAgICAgLT4gI2MzZjAwMDAwICBDbGFtcGVkDQorZGVjczQzOCBhcHBseSAgICNjM2YwMDAwMCAgICAgICAgICAgICAgIC0+IC0wRSs5MA0KKw0KKy0tIFNwZWNpYWxzDQorZGVjczUwMCBhcHBseSAgIEluZmluaXR5ICAtPiAjNzgwMDAwMDANCitkZWNzNTAxIGFwcGx5ICAgIzc4Nzg3ODc4IC0+ICM3ODAwMDAwMA0KK2RlY3M1MDIgYXBwbHkgICAjNzgwMDAwMDAgLT4gSW5maW5pdHkNCitkZWNzNTAzIGFwcGx5ICAgIzc5Nzk3OTc5IC0+ICM3ODAwMDAwMA0KK2RlY3M1MDQgYXBwbHkgICAjNzkwMDAwMDAgLT4gSW5maW5pdHkNCitkZWNzNTA1IGFwcGx5ICAgIzdhN2E3YTdhIC0+ICM3ODAwMDAwMA0KK2RlY3M1MDYgYXBwbHkgICAjN2EwMDAwMDAgLT4gSW5maW5pdHkNCitkZWNzNTA3IGFwcGx5ICAgIzdiN2I3YjdiIC0+ICM3ODAwMDAwMA0KK2RlY3M1MDggYXBwbHkgICAjN2IwMDAwMDAgLT4gSW5maW5pdHkNCitkZWNzNTA5IGFwcGx5ICAgIzdjN2M3YzdjIC0+ICM3YzBjN2M3Yw0KKw0KK2RlY3M1MTAgYXBwbHkgICBOYU4gICAgICAgLT4gIzdjMDAwMDAwDQorZGVjczUxMSBhcHBseSAgICM3YzAwMDAwMCAtPiBOYU4NCitkZWNzNTEyIGFwcGx5ICAgIzdkN2Q3ZDdkIC0+ICM3YzBkN2Q3ZA0KK2RlY3M1MTMgYXBwbHkgICAjN2QwMDAwMDAgLT4gTmFODQorZGVjczUxNCBhcHBseSAgICM3ZTdlN2U3ZSAtPiAjN2UwZTdjN2UNCitkZWNzNTE1IGFwcGx5ICAgIzdlMDAwMDAwIC0+IHNOYU4NCitkZWNzNTE2IGFwcGx5ICAgIzdmN2Y3ZjdmIC0+ICM3ZTBmN2M3Zg0KK2RlY3M1MTcgYXBwbHkgICAjN2YwMDAwMDAgLT4gc05hTg0KK2RlY3M1MTggYXBwbHkgICAjN2ZmZmZmZmYgLT4gc05hTjk5OTk5OQ0KK2RlY3M1MTkgYXBwbHkgICAjN2ZmZmZmZmYgLT4gIzdlMDNmY2ZmDQorDQorZGVjczUyMCBhcHBseSAgIC1JbmZpbml0eSAtPiAjZjgwMDAwMDANCitkZWNzNTIxIGFwcGx5ICAgI2Y4Nzg3ODc4IC0+ICNmODAwMDAwMA0KK2RlY3M1MjIgYXBwbHkgICAjZjgwMDAwMDAgLT4gLUluZmluaXR5DQorZGVjczUyMyBhcHBseSAgICNmOTc5Nzk3OSAtPiAjZjgwMDAwMDANCitkZWNzNTI0IGFwcGx5ICAgI2Y5MDAwMDAwIC0+IC1JbmZpbml0eQ0KK2RlY3M1MjUgYXBwbHkgICAjZmE3YTdhN2EgLT4gI2Y4MDAwMDAwDQorZGVjczUyNiBhcHBseSAgICNmYTAwMDAwMCAtPiAtSW5maW5pdHkNCitkZWNzNTI3IGFwcGx5ICAgI2ZiN2I3YjdiIC0+ICNmODAwMDAwMA0KK2RlY3M1MjggYXBwbHkgICAjZmIwMDAwMDAgLT4gLUluZmluaXR5DQorDQorZGVjczUyOSBhcHBseSAgIC1OYU4gICAgICAtPiAjZmMwMDAwMDANCitkZWNzNTMwIGFwcGx5ICAgI2ZjN2M3YzdjIC0+ICNmYzBjN2M3Yw0KK2RlY3M1MzEgYXBwbHkgICAjZmMwMDAwMDAgLT4gLU5hTg0KK2RlY3M1MzIgYXBwbHkgICAjZmQ3ZDdkN2QgLT4gI2ZjMGQ3ZDdkDQorZGVjczUzMyBhcHBseSAgICNmZDAwMDAwMCAtPiAtTmFODQorZGVjczUzNCBhcHBseSAgICNmZTdlN2U3ZSAtPiAjZmUwZTdjN2UNCitkZWNzNTM1IGFwcGx5ICAgI2ZlMDAwMDAwIC0+IC1zTmFODQorZGVjczUzNiBhcHBseSAgICNmZjdmN2Y3ZiAtPiAjZmUwZjdjN2YNCitkZWNzNTM3IGFwcGx5ICAgI2ZmMDAwMDAwIC0+IC1zTmFODQorZGVjczUzOCBhcHBseSAgICNmZmZmZmZmZiAtPiAtc05hTjk5OTk5OQ0KK2RlY3M1MzkgYXBwbHkgICAjZmZmZmZmZmYgLT4gI2ZlMDNmY2ZmDQorDQorLS0gZGlhZ25vc3RpYyBOYU5zDQorZGVjczU0MCBhcHBseSAgIE5hTiAgICAgICAtPiAjN2MwMDAwMDANCitkZWNzNTQxIGFwcGx5ICAgTmFOMCAgICAgIC0+ICM3YzAwMDAwMA0KK2RlY3M1NDIgYXBwbHkgICBOYU4xICAgICAgLT4gIzdjMDAwMDAxDQorZGVjczU0MyBhcHBseSAgIE5hTjEyICAgICAtPiAjN2MwMDAwMTINCitkZWNzNTQ0IGFwcGx5ICAgTmFONzkgICAgIC0+ICM3YzAwMDA3OQ0KK2RlY3M1NDUgYXBwbHkgICBOYU4xMjM0NSAgIC0+ICM3YzAwNDljNQ0KK2RlY3M1NDYgYXBwbHkgICBOYU4xMjM0NTYgIC0+ICM3YzAyOGU1Ng0KK2RlY3M1NDcgYXBwbHkgICBOYU43OTk3OTkgIC0+ICM3YzBmN2ZkZg0KK2RlY3M1NDggYXBwbHkgICBOYU45OTk5OTkgIC0+ICM3YzAzZmNmZg0KKw0KKw0KKy0tIGZvbGQtZG93biBmdWxsIHNlcXVlbmNlDQorZGVjczYwMSBhcHBseSAgIDFFKzk2ICAgICAgICAgICAgICAgICAgIC0+ICM0N2YwMDAwMCBDbGFtcGVkDQorZGVjczYwMiBhcHBseSAgICM0N2YwMDAwMCAgICAgICAgICAgICAgIC0+IDEuMDAwMDAwRSs5Ng0KK2RlY3M2MDMgYXBwbHkgICAxRSs5NSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMjAwMDAgQ2xhbXBlZA0KK2RlY3M2MDQgYXBwbHkgICAjNDNmMjAwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDAwRSs5NQ0KK2RlY3M2MDUgYXBwbHkgICAxRSs5NCAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDQwMDAgQ2xhbXBlZA0KK2RlY3M2MDYgYXBwbHkgICAjNDNmMDQwMDAgICAgICAgICAgICAgICAtPiAxLjAwMDBFKzk0DQorZGVjczYwNyBhcHBseSAgIDFFKzkzICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDQwMCBDbGFtcGVkDQorZGVjczYwOCBhcHBseSAgICM0M2YwMDQwMCAgICAgICAgICAgICAgIC0+IDEuMDAwRSs5Mw0KK2RlY3M2MDkgYXBwbHkgICAxRSs5MiAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwODAgQ2xhbXBlZA0KK2RlY3M2MTAgYXBwbHkgICAjNDNmMDAwODAgICAgICAgICAgICAgICAtPiAxLjAwRSs5Mg0KK2RlY3M2MTEgYXBwbHkgICAxRSs5MSAgICAgICAgICAgICAgICAgICAtPiAjNDNmMDAwMTAgQ2xhbXBlZA0KK2RlY3M2MTIgYXBwbHkgICAjNDNmMDAwMTAgICAgICAgICAgICAgICAtPiAxLjBFKzkxDQorZGVjczYxMyBhcHBseSAgIDFFKzkwICAgICAgICAgICAgICAgICAgIC0+ICM0M2YwMDAwMQ0KK2RlY3M2MTQgYXBwbHkgICAjNDNmMDAwMDEgICAgICAgICAgICAgICAtPiAxRSs5MA0KKw0KKw0KKy0tIFNlbGVjdGVkIERQRCBjb2Rlcw0KK2RlY3M3MDAgYXBwbHkgICAjMjI1MDAwMDAgICAgICAgLT4gMA0KK2RlY3M3MDEgYXBwbHkgICAjMjI1MDAwMDkgICAgICAgLT4gOQ0KK2RlY3M3MDIgYXBwbHkgICAjMjI1MDAwMTAgICAgICAgLT4gMTANCitkZWNzNzAzIGFwcGx5ICAgIzIyNTAwMDE5ICAgICAgIC0+IDE5DQorZGVjczcwNCBhcHBseSAgICMyMjUwMDAyMCAgICAgICAtPiAyMA0KK2RlY3M3MDUgYXBwbHkgICAjMjI1MDAwMjkgICAgICAgLT4gMjkNCitkZWNzNzA2IGFwcGx5ICAgIzIyNTAwMDMwICAgICAgIC0+IDMwDQorZGVjczcwNyBhcHBseSAgICMyMjUwMDAzOSAgICAgICAtPiAzOQ0KK2RlY3M3MDggYXBwbHkgICAjMjI1MDAwNDAgICAgICAgLT4gNDANCitkZWNzNzA5IGFwcGx5ICAgIzIyNTAwMDQ5ICAgICAgIC0+IDQ5DQorZGVjczcxMCBhcHBseSAgICMyMjUwMDA1MCAgICAgICAtPiA1MA0KK2RlY3M3MTEgYXBwbHkgICAjMjI1MDAwNTkgICAgICAgLT4gNTkNCitkZWNzNzEyIGFwcGx5ICAgIzIyNTAwMDYwICAgICAgIC0+IDYwDQorZGVjczcxMyBhcHBseSAgICMyMjUwMDA2OSAgICAgICAtPiA2OQ0KK2RlY3M3MTQgYXBwbHkgICAjMjI1MDAwNzAgICAgICAgLT4gNzANCitkZWNzNzE1IGFwcGx5ICAgIzIyNTAwMDcxICAgICAgIC0+IDcxDQorZGVjczcxNiBhcHBseSAgICMyMjUwMDA3MiAgICAgICAtPiA3Mg0KK2RlY3M3MTcgYXBwbHkgICAjMjI1MDAwNzMgICAgICAgLT4gNzMNCitkZWNzNzE4IGFwcGx5ICAgIzIyNTAwMDc0ICAgICAgIC0+IDc0DQorZGVjczcxOSBhcHBseSAgICMyMjUwMDA3NSAgICAgICAtPiA3NQ0KK2RlY3M3MjAgYXBwbHkgICAjMjI1MDAwNzYgICAgICAgLT4gNzYNCitkZWNzNzIxIGFwcGx5ICAgIzIyNTAwMDc3ICAgICAgIC0+IDc3DQorZGVjczcyMiBhcHBseSAgICMyMjUwMDA3OCAgICAgICAtPiA3OA0KK2RlY3M3MjMgYXBwbHkgICAjMjI1MDAwNzkgICAgICAgLT4gNzkNCisNCitkZWNzNzMwIGFwcGx5ICAgIzIyNTAwMjllICAgICAgIC0+IDk5NA0KK2RlY3M3MzEgYXBwbHkgICAjMjI1MDAyOWYgICAgICAgLT4gOTk1DQorZGVjczczMiBhcHBseSAgICMyMjUwMDJhMCAgICAgICAtPiA1MjANCitkZWNzNzMzIGFwcGx5ICAgIzIyNTAwMmExICAgICAgIC0+IDUyMQ0KKw0KKy0tIERQRDogb25lIG9mIGVhY2ggb2YgdGhlIGh1ZmZtYW4gZ3JvdXBzDQorZGVjczc0MCBhcHBseSAgICMyMjUwMDNmNyAgICAgICAtPiA3NzcNCitkZWNzNzQxIGFwcGx5ICAgIzIyNTAwM2Y4ICAgICAgIC0+IDc3OA0KK2RlY3M3NDIgYXBwbHkgICAjMjI1MDAzZWIgICAgICAgLT4gNzg3DQorZGVjczc0MyBhcHBseSAgICMyMjUwMDM3ZCAgICAgICAtPiA4NzcNCitkZWNzNzQ0IGFwcGx5ICAgIzIyNTAwMzlmICAgICAgIC0+IDk5Nw0KK2RlY3M3NDUgYXBwbHkgICAjMjI1MDAzYmYgICAgICAgLT4gOTc5DQorZGVjczc0NiBhcHBseSAgICMyMjUwMDNkZiAgICAgICAtPiA3OTkNCitkZWNzNzQ3IGFwcGx5ICAgIzIyNTAwMDZlICAgICAgIC0+IDg4OA0KKw0KKw0KKy0tIERQRCBhbGwtaGlnaHMgY2FzZXMgKGluY2x1ZGVzIHRoZSAyNCByZWR1bmRhbnQgY29kZXMpDQorZGVjczc1MCBhcHBseSAgICMyMjUwMDA2ZSAgICAgICAtPiA4ODgNCitkZWNzNzUxIGFwcGx5ICAgIzIyNTAwMTZlICAgICAgIC0+IDg4OA0KK2RlY3M3NTIgYXBwbHkgICAjMjI1MDAyNmUgICAgICAgLT4gODg4DQorZGVjczc1MyBhcHBseSAgICMyMjUwMDM2ZSAgICAgICAtPiA4ODgNCitkZWNzNzU0IGFwcGx5ICAgIzIyNTAwMDZmICAgICAgIC0+IDg4OQ0KK2RlY3M3NTUgYXBwbHkgICAjMjI1MDAxNmYgICAgICAgLT4gODg5DQorZGVjczc1NiBhcHBseSAgICMyMjUwMDI2ZiAgICAgICAtPiA4ODkNCitkZWNzNzU3IGFwcGx5ICAgIzIyNTAwMzZmICAgICAgIC0+IDg4OQ0KKw0KK2RlY3M3NjAgYXBwbHkgICAjMjI1MDAwN2UgICAgICAgLT4gODk4DQorZGVjczc2MSBhcHBseSAgICMyMjUwMDE3ZSAgICAgICAtPiA4OTgNCitkZWNzNzYyIGFwcGx5ICAgIzIyNTAwMjdlICAgICAgIC0+IDg5OA0KK2RlY3M3NjMgYXBwbHkgICAjMjI1MDAzN2UgICAgICAgLT4gODk4DQorZGVjczc2NCBhcHBseSAgICMyMjUwMDA3ZiAgICAgICAtPiA4OTkNCitkZWNzNzY1IGFwcGx5ICAgIzIyNTAwMTdmICAgICAgIC0+IDg5OQ0KK2RlY3M3NjYgYXBwbHkgICAjMjI1MDAyN2YgICAgICAgLT4gODk5DQorZGVjczc2NyBhcHBseSAgICMyMjUwMDM3ZiAgICAgICAtPiA4OTkNCisNCitkZWNzNzcwIGFwcGx5ICAgIzIyNTAwMGVlICAgICAgIC0+IDk4OA0KK2RlY3M3NzEgYXBwbHkgICAjMjI1MDAxZWUgICAgICAgLT4gOTg4DQorZGVjczc3MiBhcHBseSAgICMyMjUwMDJlZSAgICAgICAtPiA5ODgNCitkZWNzNzczIGFwcGx5ICAgIzIyNTAwM2VlICAgICAgIC0+IDk4OA0KK2RlY3M3NzQgYXBwbHkgICAjMjI1MDAwZWYgICAgICAgLT4gOTg5DQorZGVjczc3NSBhcHBseSAgICMyMjUwMDFlZiAgICAgICAtPiA5ODkNCitkZWNzNzc2IGFwcGx5ICAgIzIyNTAwMmVmICAgICAgIC0+IDk4OQ0KK2RlY3M3NzcgYXBwbHkgICAjMjI1MDAzZWYgICAgICAgLT4gOTg5DQorDQorZGVjczc4MCBhcHBseSAgICMyMjUwMDBmZSAgICAgICAtPiA5OTgNCitkZWNzNzgxIGFwcGx5ICAgIzIyNTAwMWZlICAgICAgIC0+IDk5OA0KK2RlY3M3ODIgYXBwbHkgICAjMjI1MDAyZmUgICAgICAgLT4gOTk4DQorZGVjczc4MyBhcHBseSAgICMyMjUwMDNmZSAgICAgICAtPiA5OTgNCitkZWNzNzg0IGFwcGx5ICAgIzIyNTAwMGZmICAgICAgIC0+IDk5OQ0KK2RlY3M3ODUgYXBwbHkgICAjMjI1MDAxZmYgICAgICAgLT4gOTk5DQorZGVjczc4NiBhcHBseSAgICMyMjUwMDJmZiAgICAgICAtPiA5OTkNCitkZWNzNzg3IGFwcGx5ICAgIzIyNTAwM2ZmICAgICAgIC0+IDk5OQ0KKw0KKy0tIG5hcnJvd2luZyBjYXNlDQorZGVjczc5MCBhcHBseSAyLjAwRS05OSAtPiAjMDAwMDAxMDAgU3Vibm9ybWFsDQorZGVjczc5MSBhcHBseSAjMDAwMDAxMDAgLT4gMi4wMEUtOTkgU3Vibm9ybWFsDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CmluZGV4IGVhYjk5MGQuLjAyMWI0NzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QKQEAgLTEsNjc0ICsxLDY3NCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBleHAuZGVjVGVzdCAtLSBkZWNpbWFsIG5hdHVyYWwgZXhwb25lbnRpYXRpb24gICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRlc3RzIG9mIHRoZSBleHBvbmVudGlhbCBmdW50aW9uLiAgQ3VycmVudGx5IGFsbCB0ZXN0Y2FzZXMgaGVyZQotLS0gc2hvdyByZXN1bHRzIHdoaWNoIGFyZSBjb3JyZWN0bHkgcm91bmRlZCAod2l0aGluIDw9IDAuNSB1bHApLgotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLW1heEV4cG9uZW50OiAzODQKLW1pbmV4cG9uZW50OiAtMzgzCi0KLS0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNpYXRpb24sIGV0Yy4pCi1leHB4MDAxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCi1leHB4MDAyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NTM5OTkyOTggSW5leGFjdCBSb3VuZGVkCi1leHB4MDAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2Nzg3OTQ0MSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMDQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKLWV4cHgwMDUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKLWV4cHgwMDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzE4MjgxODMgIEluZXhhY3QgUm91bmRlZAotZXhweDAwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCi1leHB4MDA4IGV4cCAgIDEwICAgICAgICAgICAtPiAyMjAyNi40NjU4ICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5Ci0KLS0tIHRpbnkgZWRnZSBjYXNlcwotcHJlY2lzaW9uOiAgIDcKLWV4cHgwMTEgZXhwICAwLjEgICAgICAgICAgLT4gIDEuMTA1MTcxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTIgZXhwICAwLjAxICAgICAgICAgLT4gIDEuMDEwMDUwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTMgZXhwICAwLjAwMSAgICAgICAgLT4gIDEuMDAxMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTQgZXhwICAwLjAwMDEgICAgICAgLT4gIDEuMDAwMTAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTUgZXhwICAwLjAwMDAxICAgICAgLT4gIDEuMDAwMDEwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTYgZXhwICAwLjAwMDAwMSAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTcgZXhwICAwLjAwMDAwMDEgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTggZXhwICAwLjAwMDAwMDMgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMTkgZXhwICAwLjAwMDAwMDQgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjAgZXhwICAwLjAwMDAwMDUgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjEgZXhwICAwLjAwMDAwMDggICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjIgZXhwICAwLjAwMDAwMDkgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjMgZXhwICAwLjAwMDAwMTAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjQgZXhwICAwLjAwMDAwMTEgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjUgZXhwICAwLjAwMDAwMDA5ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjYgZXhwICAwLjAwMDAwMDA1ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjcgZXhwICAwLjAwMDAwMDA0ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwMjggZXhwICAwLjAwMDAwMDAxICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gYW5kIHNvbWUgbW9yZSB6ZXJvcwotZXhweDAzMCBleHAgIDAuMDAwMDAwMDAgICAtPiAgMQotZXhweDAzMSBleHAgIDBFKzEwMCAgICAgICAtPiAgMQotZXhweDAzMiBleHAgIDBFLTEwMCAgICAgICAtPiAgMQotZXhweDAzMyBleHAgLTAuMDAwMDAwMDAgICAtPiAgMQotZXhweDAzNCBleHAgLTBFKzEwMCAgICAgICAtPiAgMQotZXhweDAzNSBleHAgLTBFLTEwMCAgICAgICAtPiAgMQotCi0tLSBiYXNpYyBlPTAsIGU9MSwgZT0yLCBlPTQsIGU+PTggY2FzZXMKLXByZWNpc2lvbjogICA3Ci1leHB4MDQxIGV4cCAgMSAgICAgICAgICAtPiAgMi43MTgyODIgIEluZXhhY3QgUm91bmRlZAotZXhweDA0MiBleHAgLTEgICAgICAgICAgLT4gIDAuMzY3ODc5NCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwNDMgZXhwICAxMCAgICAgICAgIC0+ICAyMjAyNi40NyAgSW5leGFjdCBSb3VuZGVkCi1leHB4MDQ0IGV4cCAtMTAgICAgICAgICAtPiAgMC4wMDAwNDUzOTk5MyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwNDUgZXhwICAxMDAgICAgICAgIC0+ICAyLjY4ODExN0UrNDMgIEluZXhhY3QgUm91bmRlZAotZXhweDA0NiBleHAgLTEwMCAgICAgICAgLT4gIDMuNzIwMDc2RS00NCAgSW5leGFjdCBSb3VuZGVkCi1leHB4MDQ3IGV4cCAgMTAwMCAgICAgICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1leHB4MDQ4IGV4cCAtMTAwMCAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKLWV4cHgwNDkgZXhwICAxMDAwMDAwMDAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgwNTAgZXhwIC0xMDAwMDAwMDAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAotCi0tLSBtaXNjZWxsYW5lYQotLS0gc2ltaWxhciB0byAnVkYgYnVnJyB0ZXN0LCBhdCAxNywgYnV0IHdpdGggbGFzdCBkaWdpdCBjb3JyZWN0ZWQgZm9yIGRlY2ltYWwKLXByZWNpc2lvbjogMTYKLWV4cHgwNTUgZXhwIC01LjQyNDEwMzExMjg3NDQxNDU5MTcyRSsyIC0+IDIuNzE3NjU4NDg2ODg0NTcyRS0yMzYgSW5leGFjdCBSb3VuZGVkCi0tLSAgcmVzdWx0IGZyb20gTmV0UmV4eC9KYXZhIHByb3RvdHlwZSAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMTc2Nzc5Mjk2Mjg2MTcyNDYwNTQ0NTk2NDQ3MTExMDhFLTIzNgotLS0gICByZXN1bHQgZnJvbSBSZXh4IChzZXJpZXMpIHZlcnNpb24gLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE3Njc3OTI5NjI4NjE3MjQ2MDU0NDZFLTIzNgotcHJlY2lzaW9uOiAxNwotZXhweDA1NiBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxRS0yMzYgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE4Ci1leHB4MDU3IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExRS0yMzYgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE5Ci1leHB4MDU4IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyMAotZXhweDA1OSBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE4RS0yMzYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHJvdW5kaW5nIGluIGFyZWFzIG9mIC4uNTAwLi4sIC4uNDk5Li4sIC4uMTAwLi4sIC4uOTk5Li4gc2VxdWVuY2VzCi1wcmVjaXNpb246ICAgNTAKLWV4cHgxMDEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMzEKLWV4cHgxMDIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAzMAotZXhweDEwMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDMgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDI5Ci1leHB4MTA0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMjgKLWV4cHgxMDUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMCAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyNwotZXhweDEwNiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDI2Ci1leHB4MTA3IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMjUKLWV4cHgxMDggZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NSAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyNAotZXhweDEwOSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4NzkgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDIzCi1leHB4MTEwIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMjIKLWV4cHgxMTEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyMQotZXhweDExMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDIwCi1leHB4MTEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMTkKLWV4cHgxMTQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxOAotZXhweDExNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDE3Ci1leHB4MTE2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMTYKLWV4cHgxMTcgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxNQotZXhweDExOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDE0Ci1leHB4MTE5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMTMKLWV4cHgxMjAgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxMgotZXhweDEyMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDExCi1leHB4MTIyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMTAKLWV4cHgxMjMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMCAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgOQotZXhweDEyNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICA4Ci1leHB4MTI1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDcKLWV4cHgxMjYgZXhwIC05RS04IC0+IDAuOTk5OTk5OSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgNgotZXhweDEyNyBleHAgLTlFLTggLT4gMS4wMDAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICA1Ci1leHB4MTI4IGV4cCAtOUUtOCAtPiAxLjAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDQKLWV4cHgxMjkgZXhwIC05RS04IC0+IDEuMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgMwotZXhweDEzMCBleHAgLTlFLTggLT4gMS4wMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICAyCi1leHB4MTMxIGV4cCAtOUUtOCAtPiAxLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDEKLWV4cHgxMzIgZXhwIC05RS04IC0+IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotCi0tLSBzYW5pdHkgY2hlY2tzLCB3aXRoIGl0ZXJhdGlvbiBjb3VudHMgW25vcm1hbGl6ZWQgc28gMDw9fHh8PDFdCi1wcmVjaXNpb246ICAgNTAKLQotZXhweDIxMCBleHAgMCAtPiAxCi0tLSBpdGVyYXRpb25zOiAyCi1leHB4MjExIGV4cCAtMUUtNDAgLT4gMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5MDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDgKLWV4cHgyMTIgZXhwIC05RS03IC0+IDAuOTk5OTk5MTAwMDAwNDA0OTk5ODc4NTAwMDI3MzM3NDk1MDc5MjUwNzM4MTEyNDA1MTAgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiA2Ci1leHB4MjEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMjczMzc0OTk1MDc5MjUwMDczODExIEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMTUKLWV4cHgyMTQgZXhwIC0wLjAwMyAtPiAwLjk5NzAwNDQ5NTUwMzM3Mjk3NjAxMjA2NjIzNDA5NzU2MDkxMDc0MTc3NDgwNDg5ODQ1IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMTQKLWV4cHgyMTUgZXhwIC0wLjAwMSAtPiAwLjk5OTAwMDQ5OTgzMzM3NDk5MTY2ODA1NTM1NzE2NzY1NTk3NDcwMjM1NTkwMjM2MDA4IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMjYKLWV4cHgyMTYgZXhwIC0wLjEgLT4gMC45MDQ4Mzc0MTgwMzU5NTk1NzMxNjQyNDkwNTk0NDY0MzY2MjExOTQ3MDUzNjA5ODA0MCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDM5Ci1leHB4MjE3IGV4cCAtMC43IC0+IDAuNDk2NTg1MzAzNzkxNDA5NTE0NzA0ODAwMDkzMzk3NTI4OTYxNzA3NjY3MTY1NzExODIgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiA0MQotZXhweDIxOCBleHAgLTAuOSAtPiAwLjQwNjU2OTY1OTc0MDU5OTExMTg4MzQ1NDIzOTY0NTYyNTk4NzgzMzcwMzM3NjE3MDM4IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogNDMKLWV4cHgyMTkgZXhwIC0wLjk5IC0+IDAuMzcxNTc2NjkxMDIyMDQ1NjkwNTMxNTI0MTE5OTA4MjAxMzg2OTE4MDI4ODU0OTA1MDEgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyNgotZXhweDIyMCBleHAgLTEgLT4gMC4zNjc4Nzk0NDExNzE0NDIzMjE1OTU1MjM3NzAxNjE0NjA4Njc0NDU4MTExMzEwMzE3NyBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI2Ci1leHB4MjIxIGV4cCAtMS4wMSAtPiAwLjM2NDIxODk3OTU3MTUyMzMxOTc1NzA0NjI5NTYzNzM0NTQ4OTU5NTg5MTM5MTkyNDgyIEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMjcKLWV4cHgyMjIgZXhwIC0xLjEgLT4gMC4zMzI4NzEwODM2OTgwNzk1NTMyODg4NDY5MDY0MzEzMTU1MjE2MTI0Nzk1MjE1NjkyMSBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI4Ci1leHB4MjIzIGV4cCAtMS41IC0+IDAuMjIzMTMwMTYwMTQ4NDI5ODI4OTMzMjgwNDcwNzY0MDEyNTIxMzQyMTcxNjI5MzYxMDggSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAzMAotZXhweDIyNCBleHAgLTIgLT4gMC4xMzUzMzUyODMyMzY2MTI2OTE4OTM5OTk0OTQ5NzI0ODQ0MDM0MDc2MzE1NDU5MDk1OCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDM2Ci1leHB4MjI1IGV4cCAtNSAtPiAwLjAwNjczNzk0Njk5OTA4NTQ2NzA5NjYzNjA0ODQyMzE0ODQyNDI0ODg0OTU4NTAyNzM1NTEgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyNgotZXhweDIyNiBleHAgLTEwIC0+IDAuMDAwMDQ1Mzk5OTI5NzYyNDg0ODUxNTM1NTkxNTE1NTYwNTUwNjEwMjM3OTE4MDg4ODY2NTY1IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMjgKLWV4cHgyMjcgZXhwIC0xNCAtPiA4LjMxNTI4NzE5MTAzNTY3ODg0MDYzOTg1MTQyNTY1MjYyMjk0NjA3NjU4MzY0OTg0NTdFLTcgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyOQotZXhweDIyOCBleHAgLTE1IC0+IDMuMDU5MDIzMjA1MDE4MjU3ODgzNzE0Nzk0OTc3MDIyODk2MzkzNzA4MjA3ODA4MTg1NkUtNyBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDMwCi1leHB4MjMzIGV4cCAwIC0+IDEKLS0tIGl0ZXJhdGlvbnM6IDIKLWV4cHgyMzQgZXhwIDFFLTQwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDcKLWV4cHgyMzUgZXhwIDlFLTcgLT4gMS4wMDAwMDA5MDAwMDA0MDUwMDAxMjE1MDAwMjczMzc1MDQ5MjA3NTA3MzgxMTI1OTQ5IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogNgotZXhweDIzNiBleHAgOUUtOCAtPiAxLjAwMDAwMDA5MDAwMDAwNDA1MDAwMDEyMTUwMDAwMjczMzc1MDA0OTIwNzUwMDczODEgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAxNQotZXhweDIzNyBleHAgMC4wMDMgLT4gMS4wMDMwMDQ1MDQ1MDMzNzcwMjYwMTI5MzQwOTEzNDg5MDAyMDUzMzE4NzI3MTk1NjE5IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMTMKLWV4cHgyMzggZXhwIDAuMDAxIC0+IDEuMDAxMDAwNTAwMTY2NzA4MzQxNjY4MDU1NzUzOTkzMDU4MzExNTYzMDc2MjAwNTgwNyBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI1Ci1leHB4MjM5IGV4cCAwLjEgLT4gMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY2NjgyMjQ1NDcxOTQ3Mzc1IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMzgKLWV4cHgyNDAgZXhwIDAuNyAtPiAyLjAxMzc1MjcwNzQ3MDQ3NjUyMTYyNDU0OTM4ODU4MzA2NTI3MDAxNzU0MjM5NDE0NTkgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiA0MQotZXhweDI0MSBleHAgMC45IC0+IDIuNDU5NjAzMTExMTU2OTQ5NjYzODAwMTI2NTYzNjAyNDcwNjk1NDIxNzcyMzA2NDQwMSBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDQyCi1leHB4MjQyIGV4cCAwLjk5IC0+IDIuNjkxMjM0NDcyMzQ5MjYyMjg5MDk5ODc5NDA0MDcxMDEzOTcyMTgwMjkzMTg0MTAzMCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI2Ci1leHB4MjQzIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNzAwMCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI2Ci1leHB4MjQ0IGV4cCAxLjAxIC0+IDIuNzQ1NjAxMDE1MDE2OTE2NDkzOTg5Nzc2MzE2NjYwMzg3NjI0MDczNzUwODE5NTk2MCBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI2Ci1leHB4MjQ1IGV4cCAxLjEgLT4gMy4wMDQxNjYwMjM5NDY0MzMxMTIwNTg0MDc5NTM1ODg2NzIzOTMyODI2ODEwMjYwMTYzIEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMjgKLWV4cHgyNDYgZXhwIDEuNSAtPiA0LjQ4MTY4OTA3MDMzODA2NDgyMjYwMjA1NTQ2MDExOTI3NTgxOTAwNTc0OTg2ODM2OTcgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyOQotZXhweDI0NyBleHAgMiAtPiA3LjM4OTA1NjA5ODkzMDY1MDIyNzIzMDQyNzQ2MDU3NTAwNzgxMzE4MDMxNTU3MDU1MTggSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAzNgotZXhweDI0OCBleHAgNSAtPiAxNDguNDEzMTU5MTAyNTc2NjAzNDIxMTE1NTgwMDQwNTUyMjc5NjIzNDg3NjY3NTkzODggSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyNgotZXhweDI0OSBleHAgMTAgLT4gMjIwMjYuNDY1Nzk0ODA2NzE2NTE2OTU3OTAwNjQ1Mjg0MjQ0MzY2MzUzNTEyNjE4NTU3IEluZXhhY3QgUm91bmRlZAotLS0gaXRlcmF0aW9uczogMjgKLWV4cHgyNTAgZXhwIDE0IC0+IDEyMDI2MDQuMjg0MTY0Nzc2Nzc3NzQ5MjM2NzcwNzY3ODU5NDQ5NDEyNDg2NTQzMzc2MSBJbmV4YWN0IFJvdW5kZWQKLS0tIGl0ZXJhdGlvbnM6IDI4Ci1leHB4MjUxIGV4cCAxNSAtPiAzMjY5MDE3LjM3MjQ3MjExMDYzOTMwMTg1NTA0NjA5MTcyMTMxNTUwNTczODU0MzgyMDAgSW5leGFjdCBSb3VuZGVkCi0tLSBpdGVyYXRpb25zOiAyOQotCi0tLSBhIGJpZ2dpZSBbcmVzdWx0IHZlcmlmaWVkIDMgd2F5c10KLXByZWNpc2lvbjogMjUwCi1leHB4MjYwIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNjk5OTU5NTc0OTY2OTY3NjI3NzI0MDc2NjMwMzUzNTQ3NTk0NTcxMzgyMTc4NTI1MTY2NDI3NDI3NDY2MzkxOTMyMDAzMDU5OTIxODE3NDEzNTk2NjI5MDQzNTcyOTAwMzM0Mjk1MjYwNTk1NjMwNzM4MTMyMzI4NjI3OTQzNDkwNzYzMjMzODI5ODgwNzUzMTk1MjUxMDE5MDExNTczODM0MTg3OTMwNzAyMTU0MDg5MTQ5OTM0ODg0MTY3NTA5MjQ0NzYxNDYwNjY4IEluZXhhY3QgUm91bmRlZAotCi0tLSBleHRyZW1lIHJhbmdlIGJvdW5kYXJpZXMKLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDk5OTk5OQotbWluRXhwb25lbnQ6IC05OTk5OTkKLS0tIE50aW55IGJvdW5kYXJ5Ci1leHB4MjkwIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI5IC0+IDBFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZXhweDI5MSBleHAgIC0yMzAyNjE4LjAyMjMzMjUyOCAtPiAxRS0xMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0tLSBObWF4LzEwIGFuZCBObWF4IGJvdW5kYXJ5Ci1leHB4MjkyIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTIgLT4gOS45OTk5OTk5OTMxMDAyNzdFKzk5OTk5OCAgSW5leGFjdCBSb3VuZGVkCi1leHB4MjkzIGV4cCAgMjMwMjU4Mi43OTA0MDg5NTMgLT4gMS4wMDAwMDAwMDAzMTAwMjhFKzk5OTk5OSAgSW5leGFjdCBSb3VuZGVkCi1leHB4Mjk0IGV4cCAgMjMwMjU4NS4wOTI5OTM5NDYgLT4gOS45OTk5OTkwMDMxNTk4NzBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgyOTUgZXhwICAyMzAyNTg1LjA5Mjk5NDAzNiAtPiA5Ljk5OTk5OTkwMzE1OTgyMUUrOTk5OTk5IEluZXhhY3QgUm91bmRlZAotZXhweDI5NiBleHAgIDIzMDI1ODUuMDkyOTk0MDQ1IC0+IDkuOTk5OTk5OTkzMTU5ODIwRSs5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1leHB4Mjk3IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gMDwteDw8MSBlZmZlY3RzCi1wcmVjaXNpb246ICAgIDMwCi1leHB4MzIwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAwOTc5MTY2NjE3IEluZXhhY3QgUm91bmRlZAotZXhweDMyMSBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI0OTk5OTk3OTE2NjY2NyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzMjIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNDk5OTg5NzkxNjY3MTcgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDIwCi1leHB4MzIzIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzI0IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzI1IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDE0Ci1leHB4MzI2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzI3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzI4IGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0tLSBvdmVycHJlY2lzZSBhbmQgMDwteDw8MQotcHJlY2lzaW9uOiAgICA4Ci1leHB4MzMwIGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzMxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzMyIGV4cCAtNS4wMDAwMDAwMDAwMDAxRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDcKLWV4cHgzMzMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzMzQgZXhwIC01LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzMzUgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgMwotZXhweDMzNiBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDMzNyBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDMzOCBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotCi0tLSAwPHg8PDEgZWZmZWN0cwotcHJlY2lzaW9uOiAgICAzMAotZXhweDM0MCBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI0OTk5OTAyMDgzMzI4ICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzNDEgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwMDAwMjA4MzMzMyAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzQyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMDAxMDIwODMzMzggIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICAyMAotZXhweDM0MyBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAotZXhweDM0NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAotZXhweDM0NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICAxNAotZXhweDM0NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAotZXhweDM0NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAotZXhweDM0OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZAotLS0gb3ZlcnByZWNpc2UgYW5kIDA8eDw8MQotcHJlY2lzaW9uOiAgICA4Ci1leHB4MzUwIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzUxIGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4MzUyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDcKLWV4cHgzNTMgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzNTQgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHgzNTUgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgMwotZXhweDM1NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDM1NyBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDM1OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotCi0tLSBjYXNlcyBuZWFyIDEgICAgICAgICAgICAgIC0tICAxIDIzNDU2Nzg5MDEyMzQ1Njc4OTAKLXByZWNpc2lvbjogICAgMjAKLWV4cHg0MDEgZXhwIDAuOTk5OTk5OTk5OTk5OTYgIC0+IDIuNzE4MjgxODI4NDU4OTM2NTA0MSAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDAyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgIEluZXhhY3QgUm91bmRlZAotZXhweDQwMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTg5OTA4Njk3ICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MDQgZXhwIDAuOTk5OTk5OTk5OTk5OTkgIC0+IDIuNzE4MjgxODI4NDU5MDE4MDUyNSAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDA1IGV4cCAxLjAwMDAwMDAwMDAwMDAgICAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgIEluZXhhY3QgUm91bmRlZAotZXhweDQwNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzMTcwNjM1ICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MDcgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgxODI4NDU5NTg4ODkxNyAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDE0Ci1leHB4NDExIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MTgyODQ1ODkgIEluZXhhY3QgUm91bmRlZAotZXhweDQxMiBleHAgMC45OTk5OTk5OTk5OTk5NyAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MTMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDE0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZAotZXhweDQxNSBleHAgMS4wMDAwMDAwMDAwMDAwICAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MTYgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgxODI4NDU5MyAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDE3IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MTgyODQ1OTYgIEluZXhhY3QgUm91bmRlZAotLS0gb3ZlcnByZWNpc2UuLi4KLXByZWNpc2lvbjogICAgNwotZXhweDQyMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MjIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDIzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDQyNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MjUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDI2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDQyNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgMgotZXhweDQzMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MzIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDMzIGV4cCAwLjk5OTk5OTk5OTk5OTk4ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDQzNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg0MzUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NDM2IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDQzNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gYmFzaWNzIGF0IGxvdyBwcmVjaXNpb25zCi1wcmVjaXNpb246IDMKLWV4cHg1MDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDAKLWV4cHg1MDIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1NCAgIEluZXhhY3QgUm91bmRlZAotZXhweDUwMyBleHAgIC0xICAgICAgICAgICAgLT4gMC4zNjggICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NTA0IGV4cCAgIDAgICAgICAgICAgICAtPiAxCi1leHB4NTA1IGV4cCAgLTAgICAgICAgICAgICAtPiAxCi1leHB4NTA2IGV4cCAgIDEgICAgICAgICAgICAtPiAyLjcyICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg1MDcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMDAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDUwOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yMEUrNCAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NTA5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQotcHJlY2lzaW9uOiAyCi1leHB4NTExIGV4cCAgLUluZmluaXR5ICAgICAtPiAwCi1leHB4NTEyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NSAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg1MTMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzcgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDUxNCBleHAgICAwICAgICAgICAgICAgLT4gMQotZXhweDUxNSBleHAgIC0wICAgICAgICAgICAgLT4gMQotZXhweDUxNiBleHAgICAxICAgICAgICAgICAgLT4gMi43ICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NTE3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyLjAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg1MTggZXhwICAgMTAgICAgICAgICAgIC0+IDIuMkUrNCAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDUxOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkKLXByZWNpc2lvbjogMQotZXhweDUyMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMAotZXhweDUyMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNSAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NTIzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjQgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg1MjQgZXhwICAgMCAgICAgICAgICAgIC0+IDEKLWV4cHg1MjUgZXhwICAtMCAgICAgICAgICAgIC0+IDEKLWV4cHg1MjYgZXhwICAgMSAgICAgICAgICAgIC0+IDMgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotZXhweDUyNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1leHB4NTI4IGV4cCAgIDEwICAgICAgICAgICAtPiAyRSs0ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWV4cHg1MjkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5Ci0KLS0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMKLXByZWNpc2lvbjogICA3Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXhweDcwMSBleHAgIDEwMDAwMDAwMDAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwMiBleHAgIDEwMDAwMDAwMCAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwMyBleHAgIDEwMDAwMDAwICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwNCBleHAgIDEwMDAwMDAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwNSBleHAgIDEwMDAwMCAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwNiBleHAgIDEwMDAwICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwNyBleHAgIDEwMDAgICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwOCBleHAgIDg4Ni40OTUyNjA4IC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcwOSBleHAgIDg4Ni40OTUyNjA3IC0+IDkuOTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1leHB4NzEwIGV4cCAgODg2LjQ5NTI3ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1leHB4NzExIGV4cCAgODg2LjQ5NTI2ICAgLT4gOS45OTk5OTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxNgotZXhweDcyMSBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgzIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDcyMiBleHAgIDg4Ni40OTUyNjA4MDI3MDc1ODgyIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1leHB4NzIzIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1leHB4NzI0IGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ICAgLT4gOS45OTk5OTk5OTk5OTk5MTdFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWV4cHg3MjUgZXhwICA4ODYuNDk1MjYwODAyNzA3NiAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWV4cHg3MjYgZXhwICA4ODYuNDk1MjYwODAyNzA3NSAgICAtPiA5Ljk5OTk5OTk5OTk5OTExN0UrMzg0IEluZXhhY3QgUm91bmRlZAotLS0gYW5kIGJ5IHNwZWNpYWwgcmVxdWVzdCAuLi4KLXByZWNpc2lvbjogICAxNQotZXhweDczMSBleHAgIDg4Ni40OTUyNjA4MDI3MDggICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZXhweDczMiBleHAgIDg4Ni40OTUyNjA4MDI3MDcgICAgIC0+IDkuOTk5OTk5OTk5OTk0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWV4cHg3MzMgZXhwICA4ODYuNDk1MjYwODAyNzA2ICAgICAtPiA5Ljk5OTk5OTk5OTk4NDEyRSszODQgSW5leGFjdCBSb3VuZGVkCi1tYXhFeHBvbmVudDogOTk5Ci1taW5FeHBvbmVudDogLTk5OQotZXhweDczNSBleHAgIDIzMDIuNTg1MDkyOTk0MDUgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1leHB4NzM2IGV4cCAgMjMwMi41ODUwOTI5OTQwNCAgICAtPiA5Ljk5OTk5OTk5OTk0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkCi1leHB4NzM3IGV4cCAgMjMwMi41ODUwOTI5OTQwMyAgICAtPiA5Ljk5OTk5OTk5OTg0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MsIGluY2x1ZGluZyB1bmRlcmZsb3ctdG8temVybyBlZGdlIHBvaW50Ci1wcmVjaXNpb246ICAgNwotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWV4cHg3NTEgZXhwIC0xMDAwMDAwMDAwICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCi1leHB4NzUyIGV4cCAtMTAwMDAwMDAwICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAotZXhweDc1MyBleHAgLTEwMDAwMDAwICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKLWV4cHg3NTQgZXhwIC0xMDAwMDAwICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCi1leHB4NzU1IGV4cCAtMTAwMDAwICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbAotZXhweDc1NiBleHAgLTEwMDAwICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwKLWV4cHg3NTcgZXhwIC0xMDAwICAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsCi1leHB4NzU4IGV4cCAtODgxLjg5MDA5ICAgIC0+ICAxLjAwMDAwMUUtMzgzIEluZXhhY3QgUm91bmRlZAotZXhweDc1OSBleHAgLTg4MS44OTAxICAgICAtPiAgOS45OTk5MUUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2MCBleHAgLTg4NSAgICAgICAgICAtPiAgNC40NjA1RS0zODUgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2MSBleHAgLTg4OCAgICAgICAgICAtPiAgMi4yMjFFLTM4NiAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2MiBleHAgLTg5MCAgICAgICAgICAtPiAgMy4wMUUtMzg3ICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2MyBleHAgLTg5Mi45ICAgICAgICAtPiAgMS43RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2NCBleHAgLTg5MyAgICAgICAgICAtPiAgMS41RS0zODggICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2NSBleHAgLTg5My41ICAgICAgICAtPiAgOUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2NiBleHAgLTg5NS43MDU2ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc2OSBleHAgLTg5NS44ICAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc3MCBleHAgLTg5NS43MyAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc3MSBleHAgLTg5Ni4zOTg3ICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotZXhweDc3MiBleHAgLTg5Ni4zOTg4ICAgICAtPiAgMEUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbCBDbGFtcGVkCi1leHB4NzczIGV4cCAtODk4LjAwODEgICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQKLWV4cHg3NzQgZXhwIC04OTguMDA4MiAgICAgLT4gIDBFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwgQ2xhbXBlZAotCi0tLSBzcGVjaWFsIHZhbHVlcwotbWF4ZXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLWV4cHg4MjAgZXhwICAgSW5mICAgIC0+IEluZmluaXR5Ci1leHB4ODIxIGV4cCAgLUluZiAgICAtPiAwCi1leHB4ODIyIGV4cCAgIE5hTiAgICAtPiBOYU4KLWV4cHg4MjMgZXhwICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gcHJvcGFnYXRpbmcgTmFOcwotZXhweDgyNCBleHAgIHNOYU4xMjMgLT4gIE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbgotZXhweDgyNSBleHAgLXNOYU4zMjEgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbgotZXhweDgyNiBleHAgICBOYU40NTYgLT4gIE5hTjQ1NgotZXhweDgyNyBleHAgIC1OYU42NTQgLT4gLU5hTjY1NAotZXhweDgyOCBleHAgICBOYU4xICAgLT4gIE5hTjEKLQotLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMKLS0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdCi1wcmVjaXNpb246IDEwMDAwMDAwMAotZXhweDkwMSBleHAgIC1JbmZpbml0eSAgICAgLT4gTmFOIEludmFsaWRfY29udGV4dAotcHJlY2lzaW9uOiAgOTk5OTk5OTkKLWV4cHg5MDIgZXhwICAtSW5maW5pdHkgICAgIC0+IE5hTiBJbnZhbGlkX2NvbnRleHQKLQotcHJlY2lzaW9uOiA5Ci1tYXhFeHBvbmVudDogICAxMDAwMDAwCi1taW5FeHBvbmVudDogICAtOTk5OTk5Ci1leHB4OTAzIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0Ci1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogICAtOTk5OTk5Ci1leHB4OTA0IGV4cCAgLUluZmluaXR5ICAgICAtPiAwCi1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogIC0xMDAwMDAwCi1leHB4OTA1IGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0Ci1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogICAtOTk5OTk4Ci1leHB4OTA2IGV4cCAgLUluZmluaXR5ICAgICAtPiAwCi0KLS0tCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotcHJlY2lzaW9uOiAgIDE2Ci1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIE51bGwgdGVzdAotZXhweDkwMCBleHAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQotLS0gUmFuZG9tcyBQPTUwLCB3aXRoaW4gMC05OTkKLVByZWNpc2lvbjogNTAKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1leHB4MTUwMSBleHAgNjU2LjM1Mzk3OTUwNTkwMjg1NjEyMjY2MDk1NTk2NTM5OTM0MjEzOTQzODcyODg1NzI4ICAtPiAxLjEyNDM3NTc2MTA2NDAzMTk3ODM2MTExNzg1Mjg4Mzk2NTI2NzIwNjI4MjAwNDAzMTRFKzI4NSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTAyIGV4cCAwLjkzNjIwNTcxMDkzNjUyODAwMjI1MDM4NTUwNjAwNzgwMzIyODMxMjM2MDgyNzgxNDcxIC0+IDIuNTUwMjg2NTEzMDk4NjE3NjY4OTE5OTcxMTg1NzgyNTc3MTMxMTE3ODA0Njg0MjAwOSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTAzIGV4cCAwLjAwMDAwMDAwMDAwMDAwMDA4MzQwNzg1ODU2NjAxNTE0NzE0MTgzMzczODc0MTA1NzkxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTUwNjIwMjY5MTc0MDI1MjUxMiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA0IGV4cCAwLjAwMDA5MTc0MDU3MjYyODg3Nzg5NjI1NzQ1NTc0Njg2NTQ1MTYzMTY4Nzg4NDU2MjAzIC0+IDEuMDAwMDkxNzQ0NzgwOTIzOTAwNTE0NjcyMjM0MTI1MTUyNDA4MTAwNjA1MTQ3MzI3MyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA1IGV4cCAzMy45MDkxMTY4OTc5NzM3OTc3MzU2NTc3NTE1OTEwMTQ5MjY2MjkwNTExMTc1NDEyNDMgIC0+IDUzMjc3MzE4MTAyNTAwMi4wMzU0MzYxODkwMTMwNjcyNjQ5NTg3MDQ3NjYxNzIzMjIyOSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA2IGV4cCAwLjAwMDAwNzQwNDcwNDEzMDA0NDA2NTkyMTI0NTc1Mjk1Mjc4NDU2OTM2ODA5NTg3MzExIC0+IDEuMDAwMDA3NDA0NzMxNTQ0OTMzMzU5MDA2NjM5NTY3MDMwNjEzNTU2Nzg4OTIxMDgxNCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA3IGV4cCAwLjAwMDAwMDAwMDAwMTI0ODU0OTIyMjIyMTA4ODAyNDUzNzQ2OTIyNDgzMDcxNDQ1NDkyIC0+IDEuMDAwMDAwMDAwMDAxMjQ4NTQ5MjIyMjIxODY3NDYyMTE3NjIzOTkxMTQyNDk2ODI2MyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA4IGV4cCA0LjE3OTMyODA2NzQxNTU2NTk3OTQyODY5NTExNTk0MzA2NTEyNTgzNTYwMTQzOTEzODIgIC0+IDY1LjMyMTk0NjUyMDE0NzE5OTQwNDE5OTc4NzgxMTMzNjg2MDA4Nzk3NTExODI3ODE4NSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTA5IGV4cCA0ODUuNDM1OTU3NDU0NjA2NTU4OTM3NDYxNzk4OTAyNTU1Mjk5MTkyMjE1NTAyMDE2ODYgIC0+IDYuNjM5ODQwMzkyMDQ1OTYxNzI1NTk1MDQ3Njk1MzEyOTM3NzQ1OTg0NTM2NjU4NTQ2M0UrMjEwIEluZXhhY3QgUm91bmRlZAotZXhweDE1MTAgZXhwIDAuMDAwMDAwMDAwMDM1NDcyNTk4MDY1OTA4NTYwMzI1Mjc4NzUxNTc4MzAzMjgxNTY1OTcgLT4gMS4wMDAwMDAwMDAwMzU0NzI1OTgwNjY1Mzc3MTI5MzIwNTg5NDA2NzE1MDAwNjg1NTE1IEluZXhhY3QgUm91bmRlZAotZXhweDE1MTEgZXhwIDAuMDAwMDAwMDAwMDAwMDA3NTk2MjE0OTczMzkxMDQwNDc5MzA2MTY0Nzg2MzUwNDI2NzggLT4gMS4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNjkzMzA1NDcxMjU3NzE1NDYzODg3IEluZXhhY3QgUm91bmRlZAotZXhweDE1MTIgZXhwIDkuNzk1OTE2ODgyMTc2MDMzOTMwNDU3MTU5NTQ3NDQ4MDY0MDI4NjA3MjcyMDIzMzc5NiAgLT4gMTc5NjAuMjYxMTQ2MDQyOTU1MTc5MTY0MzAzNjUzNDEyNjUwNzUxNjgxNDM2MzUyNDM3IEluZXhhY3QgUm91bmRlZAotZXhweDE1MTMgZXhwIDAuMDAwMDAwMDA1NjY2NDIwMDYyNTgyOTA1MjY3ODM5MDE0NTExOTQ5NDMxNjQ1MzU1ODEgLT4gMS4wMDAwMDAwMDU2NjY0MjAwNzg2MzcwNjM0NjA5ODMyNDM4ODE1NjY1MjQ5MzQ3NjUwIEluZXhhY3QgUm91bmRlZAotZXhweDE1MTQgZXhwIDc0MS4yOTg4ODc5MTEzNDI5ODE5NDA4ODgyNzU3MjM3NDcxODk0MDkyNTgyMDAyNzM1NCAgLT4gOC43NTAxNjk0MDA2MzE3MzMyODA4MTI4OTQ2NjY2NDAyNjIyNDMyMDY0OTIzMTk4NzMxRSszMjEgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUxNSBleHAgMDMyLjc1NTczMDAzNTUyNTE3NjY4ODA4NTI5MDk5ODk3MTUzNzEwODg3MDE0OTQ3OTM1ICAtPiAxNjgxMjUxOTY1Nzg2NzguMTc3MjU4NDExMDg2MTc5NTU5MDQ0MjUzNDU2MzEwOTIzMzkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUxNiBleHAgNDIuMzMzNzAwNzI2NDI5MzMzMzA4NTk0MjY1NTUzNDIyOTAyNDYzNzM3Mzk5NDM3NjQ0ICAtPiAyNDI4MjQ1Njc1ODY0MTcyNDc1LjQ2ODExMTk0OTMwNDU2NTc3OTczMDkzNjk2NzIwMTIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUxNyBleHAgMC4wMDAwMDAwMDAwMDAwMDU1OTY4MjYxNjg3NjQ5MTg4ODE5NzYwOTE1ODgwMjgzNTc5OCAtPiAxLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkzNDU0NDIwNzY3MzI3Mzk1NzcwNDkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUxOCBleHAgMC4wMDAwMDAwMDAwMDA4MDcwMzY4ODY2ODI4MDE5MzU4NDc1ODMwMDk3MzU0OTQ4NjMxMiAtPiAxLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MzEyNzU5MDExNTgxNjQzMjE4Njc5MTQzNDIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUxOSBleHAgNjQwLjcyMzk2MDEyNzk2NTA5NDgyMzgyNzEyODkxNzA5MDcyNTcwNjUzNjA2ODM4MjUxICAtPiAxLjgzMTgwOTQ5OTA2ODMzOTQyMjkzMDQxMzMwNjg5ODM5MTQyMzY5OTUzMjY4OTEwNDVFKzI3OCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTIwIGV4cCAwLjAwMDAwMDAwMDAwMDAwNTA5NDU4OTIyMTY3NjMxMDcxNDE2OTQ4MTEyMjE5NTEyMjI0IC0+IDEuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzIzNjkxNTg5MTQ5OTMyNDM1ODU1NiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTIxIGV4cCA2Ljc2NzAzOTQzMTQzMTUyMDYzNzg2MjUyMjE1ODM5NzM0MTQ2NjA3Mjc5NjAyNDEzOTUgIC0+IDg2OC43MzYxMzAxMjgyMjAzMTM2NzgwNjI0ODY5NzA5Mjg4NDQxNTExOTU2ODI3MTMxNSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTIyIGV4cCAwNC44MjMyMTc0MDc0MTI5NjM1MDY2MzgyNjcyMjY4OTEwMjQxMzgwNTQ3ODMxMjI1NDggIC0+IDEyNC4zNjQ1NzkyOTU4ODgzNzEyOTczMTgyMTA3NzU4NjcwNTUwNTU2NTkwNDIwNTM2NiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxNTIzIGV4cCAxOTMuNTEzMDc4Nzg3MDExOTY0MDM5OTEyMDg0ODI1MjAxMTUzNTk2OTAxMDYxNDM2MTUgIC0+IDEuMTAwNjgzMDg3Mjg1NDcxNTY3NzM5MDkxNDY1NTQ1MjI2MTU1MDc2ODk1NzU3NjAzNEUrODQgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyNCBleHAgNS43MzA3NzQ5MDM4MzAzNjUwNTM5MjAwMzQ1OTAxMjEwNDk3MDE1NjE3MzkzOTcwNDYzICAtPiAzMDguMjA4MDA3NDMxMDY4NDMwODM1MjI3MjE1MjM3MTU2NDU5NTA1NzQ4NjY0OTUxOTYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyNSBleHAgMC4wMDAwMDAwMDAwMDA5NTIxNzgyNTE5OTc5Nzk2NTIwMDU0MTE2OTEyMzc0MzUwMDI2NyAtPiAxLjAwMDAwMDAwMDAwMDk1MjE3ODI1MTk5ODQzMjk3MzcxNzIwMDc5OTEzOTAzODEyNzMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyNiBleHAgMC4wMDAyNzEzMTQ0MDk0OTE4MzM3MDk2NjM5MzY4MjYxNzkzMDE1MzQ5NTAyODkxOTE0MCAtPiAxLjAwMDI3MTM1MTIxODU3NTEwMjI5MDYwNTgxNjA0ODA2MDY1OTg3NTQ5MTM2MDczNjQgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyNyBleHAgMC4wMDAwMDAwMDA2NDUwMzA1OTExNDY4MDY4MjM0MzAwMjMxNTY2MjA2OTI3MjcwNzEyMyAtPiAxLjAwMDAwMDAwMDY0NTAzMDU5MTM1NDgzOTA1NTIzMjM1MTc0MDM2MTMxMzU0OTY2MzMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyOCBleHAgMC4wMDAwMDAwMDAwMDAwMDA5NTYxNjY0MzUwNjUyNzI4ODg2NjIzNTIzODU0ODQ0MDU5MyAtPiAxLjAwMDAwMDAwMDAwMDAwMDk1NjE2NjQzNTA2NTI3MzM0NTc4OTQ3ODE1ODIwMDkwOTQgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUyOSBleHAgMC4wMDAwMDAwMDAwMDAwMDA4NjQ0OTk0MjgxMTY3ODY1MDI0NDQ1OTU1MDI1Mjc0MzQzMyAtPiAxLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4Njg3NjEyNDIyNjEwOTY1Mjk5ODYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzMCBleHAgMC4wNjIyMzQ4ODM1NTYzNTM1OTk2NTY4MzA1MzE1NzcyOTIwNDk4ODM4MTg4NzYyMTg1MCAtPiAxLjA2NDIxMjI4MTMzOTI0MDY2NTc3ODk2ODg5MzE4Mzg5MTkzMjM4MjYyNTA2MzA4MzEgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzMSBleHAgMC4wMDAwMDQwMDcxMDgwNzgwNDQyOTQzNTUwMjY1NzEzMTkxMjMwODY4MDY3NDA1NzA1MyAtPiAxLjAwMDAwNDAwNzExNjEwNjUxMjU5MjU2MjA4OTAwMTkzMTk4MzIxMjc4NjM1NTkyNjAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzMiBleHAgODUuNTIyNzk2ODk0NzQ0NTc2MjExNTczMjMyMDU1NDk0NTUxNDI5Mjk3ODc4NDEzMDE3ICAtPiAxMzg3MDA3MzY4NjQwNDIyODQ1Mjc1Nzc5OTc3MDI1MTA4NTE3Ny44NTMzMzczNjg5MzUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzMyBleHAgOS4xNDk2NzIwODExMzYzNjc4Njk2OTM4MDM2Mzc5NzU2NjYzNTQ4MzUzMzk5OTU0MzYzICAtPiA5NDExLjM1MzcxMjI4MzI3NDMzODY3ODM1OTc2MjkxNjE3NjMwNTczNzAwMzQ0OTUxNTcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzNCBleHAgOC4yMjE1NzA1MjQwNzg4Mjk0NDcyOTQ0MzgyMDU2MzMwNTE2NzM4NTc3Nzg1MTc3OTQyICAtPiAzNzIwLjM0MDY4MTMzODMwNzY5NTM4OTk2NTQ3MDE2MTUwODQ0MjU1OTgzNzc3NTgxODkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzNSBleHAgMC4wMDAwMDAwMDAxNTc3MjA2NDU2OTY0MDYxMzE0MjgyMzIwMzcyNjgyMTA3NjIzOTU2MSAtPiAxLjAwMDAwMDAwMDE1NzcyMDY0NTcwODg0NDAzMjQ2ODMzMTU3ODgzNTg5MjYxMjk4MzAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzNiBleHAgMC41ODE3OTM0NjQ3Mzk1OTUzMTQzMjYyNDE1MzU3Njg4MzQ0MDYyNTUzODAxNzUzMjQ4MCAtPiAxLjc4OTI0NDUwMTgyNzUzNjAxNjM3OTcwMjIzNzI2NTU4MzcxODg0MjMxOTQ4NjM2MDUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzNyBleHAgMzMuNTU1NzI2MTk3MTQ5NTI1MDYxNDU1NTE3Nzg0ODcwNTcwNDcwODMzNDk4MDk2NTU5ICAtPiAzNzQxNjgwNjk4OTYzMjQuNjI1NzgwNzMxNDg5OTM1MjY2MjYzMDcwOTU4NTQ0MDc5NTIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzOCBleHAgOS43ODk4MDc5ODAzOTA2MjE1MDk0MTQwMDEwMDA5NTgzMzc1NTM3MjU5ODEwMzk4NjU5ICAtPiAxNzg1MC44NzgxMTk5MTIyMDg4ODgyMTcxMDA5OTgwMTk5ODY2MzQ2MjAzNjg1Mzg0MjYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTUzOSBleHAgODkuMTU3Njk3MzI3MTc0NTIxNTQyNTAyNDQ3OTUzMDMyNTM2NTQxMDM4NjM2OTY2MzQ3ICAtPiA1MjU2NDkxNTIzMjAxNjY1MDM3NzEyMjQxNDkzMzA0NDgwODk1NTAuNjcyOTM4MjkyMjcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTU0MCBleHAgMjUuMDIyOTQ3NjAwMTIzMzI4OTEyMDI5MDUxODk3MTcxMzE5NTczMzIyODg4NTE0ODg1ICAtPiA3MzY3NjM0MzQ0Mi45NTI1MTc4MjQzNDU0MzE0Mzc2ODMxNTMzMDQ2NDU4NTE5NjA1MjQgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGV4cCgxKSBhdCAzNAotUHJlY2lzaW9uOiAzNAotZXhweDEyMDAgZXhwIDEgLT4gMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjIgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFJhbmRvbXMgUD0zNCwgd2l0aGluIDAtOTk5Ci1QcmVjaXNpb246IDM0Ci1tYXhFeHBvbmVudDogNjE0NAotbWluRXhwb25lbnQ6IC02MTQzCi1leHB4MTIwMSBleHAgMzA5LjU5NDg4NTU4MjE1MTAyMTI5OTY3MDA2NDUwODcxODggIC0+IDIuODUzMzE5NjkyOTAxMzg3NTIxMjAxNzM4MDE1MDUwNzI0RSsxMzQgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIwMiBleHAgOS45MzY1NDMwNjg3MDYyMTE0MjA0MjI4MDM5NjI2ODAxNjQgIC0+IDIwNjcyLjE1ODM5MjAzMTcxODc3NDc2NTExMDkzMjc2MDIyIEluZXhhY3QgUm91bmRlZAotZXhweDEyMDMgZXhwIDYuMzA3ODcwMzIzODgxNTA1Njg0NDI5ODM5NDkxNzA3OTA4ICAtPiA1NDguODc0Nzc3NzA1NDYzNzI5NjEzNzI3NzM5MTc1NDY2NSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjA0IGV4cCAwLjAwMDM1NDMyODEzODk0Mzg0MjA1MzUyMDEzMDgyODI1MDMgLT4gMS4wMDAzNTQzOTA5MjA1NzM3NDYxNjQ3MzMzNTA4NDMxNTUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIwNSBleHAgMC4wMDAwMDM3MDg3NDUzMzYzOTE4Mzc1NTk4Mzk0OTIwMjI5IC0+IDEuMDAwMDAzNzA4NzUyMjEzNzk2MzI0ODQxOTIwMTg5MzIzIEluZXhhY3QgUm91bmRlZAotZXhweDEyMDYgZXhwIDAuMDAyMDQzMjMxMjY4NzUxMjQzODA0MDIyMjQ0NDExNjU4NSAtPiAxLjAwMjA0NTMyMDA4ODE2NDgyNjAxMzU2MTYzMDk3NTMwOCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjA3IGV4cCA2Ljg1NjMxMzM0MDAzMjE3NzY3MjU1MDM0MzIxNjEyOTU4NiAgLT4gOTQ5Ljg1ODc5ODE2MDQxNDQxNDc5ODM1ODk2NjA1MjQzOTYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIwOCBleHAgMC4wMDAwMDAwMDAwNDAyMDk0OTI4MzMzODE1NjQzMzI2NDE4IC0+IDEuMDAwMDAwMDAwMDQwMjA5NDkyODM0MTg5OTY1OTg5NjEyIEluZXhhY3QgUm91bmRlZAotZXhweDEyMDkgZXhwIDAuMDA0OTYxMDc4NDcyMjQxMjExNzYzMjY0NzAwMzU0NTgzOSAtPiAxLjAwNDk3MzQwNDk5NzkwMTk4NzAzOTU4OTAyOTI3NzgzMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjEwIGV4cCAwLjAwMDA4OTE0NzE4ODM3MjQwNjY5MDk3NDY3ODY3MDI2ODYgLT4gMS4wMDAwODkxNTExNjIxMDEwODU0MTI3ODAwODgyNjY2OTkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIxMSBleHAgMDguNTk5NzkxNzAzNzYwNjE4OTA2ODQ3MjMyMTExMTI1NjYgIC0+IDU0MzAuNTI4MzE0OTIwOTA1NzE0NjE1MzM5MjczNzM4MDk3IEluZXhhY3QgUm91bmRlZAotZXhweDEyMTIgZXhwIDkuNDczMTE3MDM5MzQxMDAzODU0ODcyNzc4MTEyNzUyNTkwICAtPiAxMzAwNS4zNjIzNDMzMTIyNDk1MzQ2MDA1NTg5NzkxMzkxNyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjEzIGV4cCAwLjA5OTkwNjA3MjQ2OTIyMDc2NDg0Mjk5Njk5OTkzMTAxMTggLT4gMS4xMDUwNjcxMTY5NzUxOTA2MDIyOTYwNTI3MDA3MjY4MDIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIxNCBleHAgMC4wMDAwMDAwOTI3ODA0NTMzNTU1ODc3ODg0MDgyMjY5MjQ3IC0+IDEuMDAwMDAwMDkyNzgwNDU3NjU5Njk0MTgzOTU0NzQwNzcyIEluZXhhY3QgUm91bmRlZAotZXhweDEyMTUgZXhwIDAuMDM3NjU3ODU4Mzg3Mjg4OTkxNjI5ODc3MjgxODI2NTY3NyAtPiAxLjAzODM3NTkwMDQ4OTc3MTk0NjQ3Nzg1NzgxODQ0NzU1NiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjE2IGV4cCAyNjEuNjg5NjQxMTY5NzUzOTUyNDkxMTUzNjExNjcxMjMwNyAgLT4gNC40NzA2MTM1NjIxMjc0NjUwOTUyNDE2MDAxNzQ5NDE0NjBFKzExMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjE3IGV4cCAwLjA3MDk5OTc0MjMyNjkxNjI5ODA4NzU4MjQyMTM4ODk2MjYgLT4gMS4wNzM1ODA5NDkyMzU0MDc5NDk0MTc4MTQ0ODU1MzMxNzIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIxOCBleHAgMC4wMDAwMDAwNDQ0NjA1NTgzMjk1MTY5ODk1MjM1NjU4NzMxIC0+IDEuMDAwMDAwMDQ0NDYwNTU5MzE3ODg3NjI3NjU3NTkzOTAwIEluZXhhY3QgUm91bmRlZAotZXhweDEyMTkgZXhwIDAuMDAwMDAyMTIyNDA3Mjg1NDc3NzUxMjI4MTM2OTgxNTE4NSAtPiAxLjAwMDAwMjEyMjQwOTUzNzc4NTY4NzM5MDYzMTA3MDkwNiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjIwIGV4cCA1NDcuNTE3NDQ2MjU3NDE1Njg4NTQ3MzU1ODQ4NTQ3NTA1MiAgLT4gNi4wNzg2MjkyNDczODM4MDc5NDI2MTIxMTQ1Nzk3Mjg2NzJFKzIzNyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjIxIGV4cCAwLjAwMDAwMDkwNjc1OTgwNDE2MTUxOTIwMDIzMzk4NDQ2NzAgLT4gMS4wMDAwMDA5MDY3NjAyMTUyNjgzMTQ2ODAxMTUzNzQzODcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIyMiBleHAgMC4wMzE2NDc2NTAwMzA4MDY1MzY1ODAzNDU1NTMzMjQ0NjAzIC0+IDEuMDMyMTUzNzYxODgwMTg3OTc3NjU4Mzg3OTYxNzY5MDM0IEluZXhhY3QgUm91bmRlZAotZXhweDEyMjMgZXhwIDg0LjQ2MTYwNTMwMzc3NjQ1MTAxODMzOTk2NzA2Mzg0NDczICAtPiA0Ljc5OTY0NDk5NTg5Nzk2ODM4MzUwMzI2OTg3MTY5Nzg1NkUrMzYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIyNCBleHAgMC4wMDAwMDAwMDAwNTIwNTk5NzQwMjkwODQ4MDE4OTA0MTQ1IC0+IDEuMDAwMDAwMDAwMDUyMDU5OTc0MDMwNDM5OTIyMzM4MzkzIEluZXhhY3QgUm91bmRlZAotZXhweDEyMjUgZXhwIDAuMDAwMDAwNjc0ODUzMDY0MDA5MzYyMDY2NTY1MTcyNjcwOCAtPiAxLjAwMDAwMDY3NDg1MzI5MTcyMjc0MjI5MjMzMTgxMjk5NyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjI2IGV4cCAwLjAwMDAwMDAxMTY4NTMxMTk3NjEwNDIwMjA1MDc5MTYxNjkgLT4gMS4wMDAwMDAwMTE2ODUzMTIwNDQzNzc0NjAzMDYxNjUyMDMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIyNyBleHAgMC4wMDIyNTkzODE4MDk0MjU4NjM2NzI3NjE2ODg2NjkzMjgwIC0+IDEuMDAyMjYxOTM2MTM1ODc2ODkzNzA3MDk0ODQ1NTQzNDYxIEluZXhhY3QgUm91bmRlZAotZXhweDEyMjggZXhwIDAuMDAyOTM5ODg1NzY3MzQ3ODkxMjI0OTg1NjUwOTY2NzUxNyAtPiAxLjAwMjk0NDIxMTQ2OTQ5NTA4NjgxMzA4NzY1MTI4NzAxMiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjI5IGV4cCAwLjc1MTE0ODAwMjk5Mjg4MDI3NzUzNzYyNzA1NTc2MzY5NjMgLT4gMi4xMTk0MzE3MzQ1MTAzMjAxNjk4MDY5NzY1NjkzNjY3ODkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIzMCBleHAgMTc0Ljk0MzE5NTIxNzY3NTA2NzExNTA4ODY0MjMwNDg0NDcgIC0+IDkuNDgxMjIyMzA1Mzc0OTU1MDExNDY0NjE5NDY4MDQ0MDUxRSs3NSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjMxIGV4cCAwLjAwMDA4MTA2MTI0NTE2OTQxMzYxMjkxOTk4OTUxNjQ0MjQgLT4gMS4wMDAwODEwNjQ1MzA3MjA5MjQxODY2MTUxNDk2NDY5MjAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIzMiBleHAgNTEuMDY4ODg5ODk3MDI2NjkyODgxODA5NDYyNzI0OTkwMzUgIC0+IDE1MDk4NjEzODg4NjE5MTY1MDczOTU5Ljg5ODk2MDE4NzQ5IEluZXhhY3QgUm91bmRlZAotZXhweDEyMzMgZXhwIDAuMDAwMDAwMDAwNTk5Mjg4NzU5OTQzNzA5MzY1MTQ5NDUxMCAtPiAxLjAwMDAwMDAwMDU5OTI4ODc2MDEyMzI4Mjg3NDA4Mjc1OCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjM0IGV4cCA3MTQuODU0OTA0Njc2MTA1NDg1NjMxMTEwODgyODkwMzk3MiAgLT4gMi44Njc3NDQ1NDQ4OTEwODExMTczODE1OTUwODA0ODA3ODRFKzMxMCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjM1IGV4cCAwLjAwMDAwMDAwMDQ0NjgyNDc4MDI5OTA2NDM2NDU2MDcxMTAgLT4gMS4wMDAwMDAwMDA0NDY4MjQ3ODAzOTg4OTA1NTY3MjAyMzMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIzNiBleHAgODMxLjU4MTgxNTE1ODk4OTAzNjYzMjM1NTE2NzIwNDM3MDkgIC0+IDEuNDE3MDc3NDA5MTgyNjI0OTY5NDM1OTM4MDYyMjYxNjU1RSszNjEgSW5leGFjdCBSb3VuZGVkCi1leHB4MTIzNyBleHAgMC4wMDAwMDAwMDA2ODY4MzIzODI1MTc5NjA1NzQ3MTA4MDQ0IC0+IDEuMDAwMDAwMDAwNjg2ODMyMzgyNzUzODI5OTM1NjAyNDU0IEluZXhhY3QgUm91bmRlZAotZXhweDEyMzggZXhwIDAuMDAwMDAwMTMwNjc0MDI2NjQwODk3Njg0MDIyODQ0MDI1NSAtPiAxLjAwMDAwMDEzMDY3NDAzNTE3ODc0ODY3NTE4NzY0ODA5OCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMjM5IGV4cCAwLjMxODIyMTA2MDkwMjIyNjc3MDQ4MTE1MDI0MTIzMzUxNjMgLT4gMS4zNzQ2ODAxMTU2Njc3OTgxODU3NTg5MjcyNDc4OTQ4NTkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTI0MCBleHAgMC4wMTQ3NzQxMjM0MTc5MTA0NDM3NDQwMjY0NjQ0Mjk1NTAxIC0+IDEuMDE0ODgzODAwMjM5OTUwNjgyNjI4Mjc3NTM0ODM5MjIyIEluZXhhY3QgUm91bmRlZAotCi0tLSBSYW5kb21zIFA9MTYsIHdpdGhpbiAwLTk5Ci1QcmVjaXNpb246IDE2Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotZXhweDExMDEgZXhwIDguNDczMDExNTI3MDEzNzI0ICAtPiA0NzgzLjkwMDY0Mzk2OTI0NiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTAyIGV4cCAwLjAwMDAwNTU3NTMwMjI3NjQgLT4gMS4wMDAwMDU1NzUzMTc4MTggSW5leGFjdCBSb3VuZGVkCi1leHB4MTEwMyBleHAgMC4wMDAwMzIzNDc0MTE0NDgyIC0+IDEuMDAwMDMyMzQ3OTM0NjMxIEluZXhhY3QgUm91bmRlZAotZXhweDExMDQgZXhwIDY0LjU0Mzc0MTM4NTQ0MTY2ICAtPiAxLjA3Mzk2NjQ3NjE3MzUzMUUrMjggSW5leGFjdCBSb3VuZGVkCi1leHB4MTEwNSBleHAgOTAuNDcyMDMyNDY0MTY1NjkgIC0+IDEuOTU2NjEwODg3MjUwNjQzRSszOSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTA2IGV4cCA5LjI5OTkzMTUzMjM0Mjc1NyAgLT4gMTA5MzcuMjcwMzMzMjUyMjcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEwNyBleHAgOC43NTk2Nzg0Mzc4NTIyMDMgIC0+IDYzNzIuMDYyMjM0NDk1MzgxIEluZXhhY3QgUm91bmRlZAotZXhweDExMDggZXhwIDAuMDAwMDkzMTc1NTEyNzE3MiAtPiAxLjAwMDA5MzE3OTg1MzY5MCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTA5IGV4cCAwLjAwMDAwMjgxMDExNTgzNzMgLT4gMS4wMDAwMDI4MTAxMTk3ODYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTExMCBleHAgMC4wMDAwMDA4MDA4MTMwOTE5IC0+IDEuMDAwMDAwODAwODEzNDEzIEluZXhhY3QgUm91bmRlZAotZXhweDExMTEgZXhwIDguMzM5NzcxNzIyMjk5MDQ5ICAtPiA0MTg3LjEzMzgwMzA4MTg3OCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTEyIGV4cCAwLjAwMjYxNDA0OTc5OTU0NzQgLT4gMS4wMDI2MTc0Njk0MDY3NTAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTExMyBleHAgMC43NDc4MDMzMzU2MjYxNzcxIC0+IDIuMTEyMzU0NzgxOTc1NDE4IEluZXhhY3QgUm91bmRlZAotZXhweDExMTQgZXhwIDUxLjc3NjYzNzYxODI3OTY2ICAtPiAzLjA2NDEzNTgwMTEyMDM2NUUrMjIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTExNSBleHAgMC4xNTI0OTg5NzgzMDYxMDEyIC0+IDEuMTY0NzQxMjcyMDg0OTU1IEluZXhhY3QgUm91bmRlZAotZXhweDExMTYgZXhwIDAuMDA2NjI5ODc5ODY2OTIxOSAtPiAxLjAwNjY1MTkwNjE3MDc5MSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTE3IGV4cCA5Ljk1NTE0MTg2NTUzNDk2MCAgLT4gMjEwNjAuMjMzMzQyODcwMzggSW5leGFjdCBSb3VuZGVkCi1leHB4MTExOCBleHAgOTIuMzQ1MDMwNTkxOTg0ODMgIC0+IDEuMjczMzE4OTkzNDgxMjI2RSs0MCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTE5IGV4cCAwLjAwMDA3MDkzODg2NzczNDYgLT4gMS4wMDAwNzA5NDEzODM5NTYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEyMCBleHAgNzkuMTI4ODMwMzY0MzMyMDQgIC0+IDIuMzE4NTM4ODk5Mzg5MjQzRSszNCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTIxIGV4cCAwLjAwMDAwOTA4ODE1NDg4NzMgLT4gMS4wMDAwMDkwODgxOTYxODUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEyMiBleHAgMC4wNDI0ODI4ODA5NjAzNDExIC0+IDEuMDQzMzk4MTk0MjQ1NzIwIEluZXhhY3QgUm91bmRlZAotZXhweDExMjMgZXhwIDAuODAwOTAzNTg5MTQyNzQxNiAtPiAyLjIyNzU1MjgxMTkzMzMxMCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTI0IGV4cCA4LjgyNTc4NjE2NzI4MzEwMiAgLT4gNjgwNy41NDA0NTUyODk5OTUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEyNSBleHAgMS41MzU0NTcyNDk3NDYyNzUgIC0+IDQuNjQzNDQ4MjYwMTQ2ODQ5IEluZXhhY3QgUm91bmRlZAotZXhweDExMjYgZXhwIDY5LjAyMjU0MjU0MzU1ODAwICAtPiA5LjQ2NDc1NDUwMDY3MDY1M0UrMjkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEyNyBleHAgMC4wMDA3MDUwNTU0MzY4NzEzIC0+IDEuMDAwNzA1MzA0MDQ2ODgwIEluZXhhY3QgUm91bmRlZAotZXhweDExMjggZXhwIDAuMDAwMDA4MTIwNjU0OTUwNCAtPiAxLjAwMDAwODEyMDY4NzkyMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTI5IGV4cCAwLjYyMTc3NDg1NDY0MTEzNyAgLT4gMS44NjIyMzAyOTg1NTQ5MDMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEzMCBleHAgMy44NDc2MjkwMzE0MDQzNTQgIC0+IDQ2Ljg4MTc3NjEzNTY4MjAzIEluZXhhY3QgUm91bmRlZAotZXhweDExMzEgZXhwIDI0LjgxMjUwMTg0Njk3NzMyICAtPiA1OTY5NDI2ODQ1Ni4xOTk2NiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTMyIGV4cCA1LjEwNzU0NjUwMDUxNjA0NCAgLT4gMTY1LjI2NDM4MDk3NTU2NzAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEzMyBleHAgNzkuMTc4MTA5NDM5NTE5ODYgIC0+IDIuNDM1NjU2MzcyNTQxMzYwRSszNCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTM0IGV4cCAwLjAwNTEzOTQ2OTU2NjcwMTUgLT4gMS4wMDUxNTI2OTkyOTUzMDEgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEzNSBleHAgNTcuNDQ1MDQ0ODg1MDE3MjUgIC0+IDguODcyOTA4NTY2OTI5Njg4RSsyNCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTM2IGV4cCAwLjAwMDA1MDgzODg5NjgwMzYgLT4gMS4wMDAwNTA4NDAxODkxMjIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEzNyBleHAgNjkuNzEzMDk5MzIxNDg5OTcgIC0+IDEuODg4MDUzNzQwNjkzNTQxRSszMCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMTM4IGV4cCAwLjAwNjQxODM0MTI5ODE1MDIgLT4gMS4wMDY0Mzg5ODI5ODg4MzUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTEzOSBleHAgOS4zNDY5OTEyMjA4MTQ2NzcgIC0+IDExNDY0LjI3ODAyMDM1MDgyIEluZXhhY3QgUm91bmRlZAotZXhweDExNDAgZXhwIDMzLjA5MDg3MTM5OTk5MTUyICAtPiAyMzUwNjIyMjkxNjg3NjMuNSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUmFuZG9tcyBQPTcsIHdpdGhpbiAwLTkKLVByZWNpc2lvbjogNwotbWF4RXhwb25lbnQ6IDk2Ci1taW5FeHBvbmVudDogLTk1Ci1leHB4MTAwMSBleHAgMi4zOTU0NDEgIC0+IDEwLjk3MzA0IEluZXhhY3QgUm91bmRlZAotZXhweDEwMDIgZXhwIDAuNjQwNjc3OSAtPiAxLjg5Nzc2NyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDAzIGV4cCAwLjU2MTgyMTggLT4gMS43NTM4NjUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAwNCBleHAgMy4wNTUxMjAgIC0+IDIxLjIyMzczIEluZXhhY3QgUm91bmRlZAotZXhweDEwMDUgZXhwIDEuNTM2NzkyICAtPiA0LjY0OTY1MCBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDA2IGV4cCAwLjA4MDE1OTEgLT4gMS4wODM0NTkgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAwNyBleHAgMC4wOTY2ODc1IC0+IDEuMTAxNTE2IEluZXhhY3QgUm91bmRlZAotZXhweDEwMDggZXhwIDAuMDY0Njc2MSAtPiAxLjA2NjgxMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDA5IGV4cCAwLjAwOTU2NzAgLT4gMS4wMDk2MTMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAxMCBleHAgMi45NTY4NTkgIC0+IDE5LjIzNzQ1IEluZXhhY3QgUm91bmRlZAotZXhweDEwMTEgZXhwIDcuNTA0Njc5ICAtPiAxODE2LjUyMiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDEyIGV4cCAwLjAwNDUyNTkgLT4gMS4wMDQ1MzYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAxMyBleHAgMy44MTAwNzEgIC0+IDQ1LjE1MzY0IEluZXhhY3QgUm91bmRlZAotZXhweDEwMTQgZXhwIDEuNTAyMzkwICAtPiA0LjQ5MjQxMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDE1IGV4cCAwLjAzMjE1MjMgLT4gMS4wMzI2NzUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAxNiBleHAgMC4wMDU3MjE0IC0+IDEuMDA1NzM4IEluZXhhY3QgUm91bmRlZAotZXhweDEwMTcgZXhwIDkuODExNDQ1ICAtPiAxODI0MS4zMyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDE4IGV4cCAzLjI0NTI0OSAgLT4gMjUuNjY4MTAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAxOSBleHAgMC4zMTg5NzQyIC0+IDEuMzc1NzE2IEluZXhhY3QgUm91bmRlZAotZXhweDEwMjAgZXhwIDAuODYyMTYxMCAtPiAyLjM2ODI3MyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDIxIGV4cCAwLjAxMjI1MTEgLT4gMS4wMTIzMjYgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAyMiBleHAgMi4yMDIwODggIC0+IDkuMDQzODc3IEluZXhhY3QgUm91bmRlZAotZXhweDEwMjMgZXhwIDguNzc4MjAzICAtPiA2NDkxLjIwMiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDI0IGV4cCAwLjE4OTYyNzkgLT4gMS4yMDg4MDAgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAyNSBleHAgMC40NTEwOTQ3IC0+IDEuNTcwMDMwIEluZXhhY3QgUm91bmRlZAotZXhweDEwMjYgZXhwIDAuMjc2NDEzICAtPiAxLjMxODM5MiBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDI3IGV4cCA0LjQ5MDA2NyAgLT4gODkuMTI3NDIgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAyOCBleHAgMC4wNDM5Nzg2IC0+IDEuMDQ0OTYwIEluZXhhY3QgUm91bmRlZAotZXhweDEwMjkgZXhwIDAuODE2ODI0NSAtPiAyLjI2MzMwMSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDMwIGV4cCAwLjAzOTE2NTggLT4gMS4wMzk5NDMgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAzMSBleHAgOS4yNjE4MTYgIC0+IDEwNTI4LjI0IEluZXhhY3QgUm91bmRlZAotZXhweDEwMzIgZXhwIDkuNjExMTg2ICAtPiAxNDkzMC44NyBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDMzIGV4cCA5LjExODEyNSAgLT4gOTExOS4wODcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAzNCBleHAgOS40NjkwODMgIC0+IDEyOTUzLjAwIEluZXhhY3QgUm91bmRlZAotZXhweDEwMzUgZXhwIDAuMDQ5OTk4MyAtPiAxLjA1MTI2OSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDM2IGV4cCAwLjAwNTA3NDYgLT4gMS4wMDUwODcgSW5leGFjdCBSb3VuZGVkCi1leHB4MTAzNyBleHAgMC4wMDE0Njk2IC0+IDEuMDAxNDcxIEluZXhhY3QgUm91bmRlZAotZXhweDEwMzggZXhwIDkuMTM4NDk0ICAtPiA5MzA2LjczOSBJbmV4YWN0IFJvdW5kZWQKLWV4cHgxMDM5IGV4cCAwLjAwNjU0MzYgLT4gMS4wMDY1NjUgSW5leGFjdCBSb3VuZGVkCi1leHB4MTA0MCBleHAgMC43Mjg0ODAzIC0+IDIuMDcxOTMwIEluZXhhY3QgUm91bmRlZAotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBleHAuZGVjVGVzdCAtLSBkZWNpbWFsIG5hdHVyYWwgZXhwb25lbnRpYXRpb24gICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gVGVzdHMgb2YgdGhlIGV4cG9uZW50aWFsIGZ1bnRpb24uICBDdXJyZW50bHkgYWxsIHRlc3RjYXNlcyBoZXJlDQorLS0gc2hvdyByZXN1bHRzIHdoaWNoIGFyZSBjb3JyZWN0bHkgcm91bmRlZCAod2l0aGluIDw9IDAuNSB1bHApLg0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorDQorLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2lhdGlvbiwgZXRjLikNCitleHB4MDAxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQorZXhweDAwMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNDUzOTk5Mjk4IEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMDMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzY3ODc5NDQxIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMDQgZXhwICAgMCAgICAgICAgICAgIC0+IDENCitleHB4MDA1IGV4cCAgLTAgICAgICAgICAgICAtPiAxDQorZXhweDAwNiBleHAgICAxICAgICAgICAgICAgLT4gMi43MTgyODE4MyAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAwNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAwOCBleHAgICAxMCAgICAgICAgICAgLT4gMjIwMjYuNDY1OCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAwOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkNCisNCistLSB0aW55IGVkZ2UgY2FzZXMNCitwcmVjaXNpb246ICAgNw0KK2V4cHgwMTEgZXhwICAwLjEgICAgICAgICAgLT4gIDEuMTA1MTcxICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDEyIGV4cCAgMC4wMSAgICAgICAgIC0+ICAxLjAxMDA1MCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAxMyBleHAgIDAuMDAxICAgICAgICAtPiAgMS4wMDEwMDEgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMTQgZXhwICAwLjAwMDEgICAgICAgLT4gIDEuMDAwMTAwICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDE1IGV4cCAgMC4wMDAwMSAgICAgIC0+ICAxLjAwMDAxMCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAxNiBleHAgIDAuMDAwMDAxICAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMTcgZXhwICAwLjAwMDAwMDEgICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDE4IGV4cCAgMC4wMDAwMDAzICAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAxOSBleHAgIDAuMDAwMDAwNCAgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMjAgZXhwICAwLjAwMDAwMDUgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDIxIGV4cCAgMC4wMDAwMDA4ICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAyMiBleHAgIDAuMDAwMDAwOSAgICAtPiAgMS4wMDAwMDEgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMjMgZXhwICAwLjAwMDAwMTAgICAgLT4gIDEuMDAwMDAxICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDI0IGV4cCAgMC4wMDAwMDExICAgIC0+ICAxLjAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAyNSBleHAgIDAuMDAwMDAwMDkgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwMjYgZXhwICAwLjAwMDAwMDA1ICAgLT4gIDEuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDI3IGV4cCAgMC4wMDAwMDAwNCAgIC0+ICAxLjAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDAyOCBleHAgIDAuMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGFuZCBzb21lIG1vcmUgemVyb3MNCitleHB4MDMwIGV4cCAgMC4wMDAwMDAwMCAgIC0+ICAxDQorZXhweDAzMSBleHAgIDBFKzEwMCAgICAgICAtPiAgMQ0KK2V4cHgwMzIgZXhwICAwRS0xMDAgICAgICAgLT4gIDENCitleHB4MDMzIGV4cCAtMC4wMDAwMDAwMCAgIC0+ICAxDQorZXhweDAzNCBleHAgLTBFKzEwMCAgICAgICAtPiAgMQ0KK2V4cHgwMzUgZXhwIC0wRS0xMDAgICAgICAgLT4gIDENCisNCistLSBiYXNpYyBlPTAsIGU9MSwgZT0yLCBlPTQsIGU+PTggY2FzZXMNCitwcmVjaXNpb246ICAgNw0KK2V4cHgwNDEgZXhwICAxICAgICAgICAgIC0+ICAyLjcxODI4MiAgSW5leGFjdCBSb3VuZGVkDQorZXhweDA0MiBleHAgLTEgICAgICAgICAgLT4gIDAuMzY3ODc5NCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDQzIGV4cCAgMTAgICAgICAgICAtPiAgMjIwMjYuNDcgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwNDQgZXhwIC0xMCAgICAgICAgIC0+ICAwLjAwMDA0NTM5OTkzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwNDUgZXhwICAxMDAgICAgICAgIC0+ICAyLjY4ODExN0UrNDMgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwNDYgZXhwIC0xMDAgICAgICAgIC0+ICAzLjcyMDA3NkUtNDQgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgwNDcgZXhwICAxMDAwICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MDQ4IGV4cCAtMTAwMCAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCitleHB4MDQ5IGV4cCAgMTAwMDAwMDAwICAtPiAgSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZXhweDA1MCBleHAgLTEwMDAwMDAwMCAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQorDQorLS0gbWlzY2VsbGFuZWENCistLSBzaW1pbGFyIHRvICdWRiBidWcnIHRlc3QsIGF0IDE3LCBidXQgd2l0aCBsYXN0IGRpZ2l0IGNvcnJlY3RlZCBmb3IgZGVjaW1hbA0KK3ByZWNpc2lvbjogMTYNCitleHB4MDU1IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MkUtMjM2IEluZXhhY3QgUm91bmRlZA0KKy0tICByZXN1bHQgZnJvbSBOZXRSZXh4L0phdmEgcHJvdG90eXBlIC0+IDIuNzE3NjU4NDg2ODg0NTcyMTExNzY3NzkyOTYyODYxNzI0NjA1NDQ1OTY0NDcxMTEwOEUtMjM2DQorLS0gICByZXN1bHQgZnJvbSBSZXh4IChzZXJpZXMpIHZlcnNpb24gLT4gMi43MTc2NTg0ODY4ODQ1NzIxMTE3Njc3OTI5NjI4NjE3MjQ2MDU0NDZFLTIzNg0KK3ByZWNpc2lvbjogMTcNCitleHB4MDU2IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjFFLTIzNiBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDE4DQorZXhweDA1NyBleHAgLTUuNDI0MTAzMTEyODc0NDE0NTkxNzJFKzIgLT4gMi43MTc2NTg0ODY4ODQ1NzIxMUUtMjM2IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTkNCitleHB4MDU4IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjANCitleHB4MDU5IGV4cCAtNS40MjQxMDMxMTI4NzQ0MTQ1OTE3MkUrMiAtPiAyLjcxNzY1ODQ4Njg4NDU3MjExMThFLTIzNiBJbmV4YWN0IFJvdW5kZWQNCisNCistLSByb3VuZGluZyBpbiBhcmVhcyBvZiAuLjUwMC4uLCAuLjQ5OS4uLCAuLjEwMC4uLCAuLjk5OS4uIHNlcXVlbmNlcw0KK3ByZWNpc2lvbjogICA1MA0KK2V4cHgxMDEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDMxDQorZXhweDEwMiBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwMDI3IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAzMA0KK2V4cHgxMDMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAzICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjkNCitleHB4MTA0IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI4DQorZXhweDEwNSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1MDAwICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAyNw0KK2V4cHgxMDYgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjYNCitleHB4MTA3IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI1DQorZXhweDEwOCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk4Nzg1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAyNA0KK2V4cHgxMDkgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjMNCitleHB4MTEwIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDIyDQorZXhweDExMSBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNDk5OTk5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAyMQ0KK2V4cHgxMTIgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjANCitleHB4MTEzIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDE5DQorZXhweDExNCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwNTAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAxOA0KK2V4cHgxMTUgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDUwICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTcNCitleHB4MTE2IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwNDA1ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDE2DQorZXhweDExNyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwMDQwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAxNQ0KK2V4cHgxMTggZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTQNCitleHB4MTE5IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwMDAwICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDEzDQorZXhweDEyMCBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwMDAwICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAxMg0KK2V4cHgxMjEgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTENCitleHB4MTIyIGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxMDAwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDEwDQorZXhweDEyMyBleHAgLTlFLTggLT4gMC45OTk5OTk5MTAwICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgOQ0KK2V4cHgxMjQgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDgNCitleHB4MTI1IGV4cCAtOUUtOCAtPiAwLjk5OTk5OTkxICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICA3DQorZXhweDEyNiBleHAgLTlFLTggLT4gMC45OTk5OTk5ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgNg0KK2V4cHgxMjcgZXhwIC05RS04IC0+IDEuMDAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDUNCitleHB4MTI4IGV4cCAtOUUtOCAtPiAxLjAwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICA0DQorZXhweDEyOSBleHAgLTlFLTggLT4gMS4wMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMw0KK2V4cHgxMzAgZXhwIC05RS04IC0+IDEuMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDINCitleHB4MTMxIGV4cCAtOUUtOCAtPiAxLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICAxDQorZXhweDEzMiBleHAgLTlFLTggLT4gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKy0tIHNhbml0eSBjaGVja3MsIHdpdGggaXRlcmF0aW9uIGNvdW50cyBbbm9ybWFsaXplZCBzbyAwPD18eHw8MV0NCitwcmVjaXNpb246ICAgNTANCisNCitleHB4MjEwIGV4cCAwIC0+IDENCistLSBpdGVyYXRpb25zOiAyDQorZXhweDIxMSBleHAgLTFFLTQwIC0+IDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogOA0KK2V4cHgyMTIgZXhwIC05RS03IC0+IDAuOTk5OTk5MTAwMDAwNDA0OTk5ODc4NTAwMDI3MzM3NDk1MDc5MjUwNzM4MTEyNDA1MTAgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogNg0KK2V4cHgyMTMgZXhwIC05RS04IC0+IDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNzMzNzQ5OTUwNzkyNTAwNzM4MTEgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogMTUNCitleHB4MjE0IGV4cCAtMC4wMDMgLT4gMC45OTcwMDQ0OTU1MDMzNzI5NzYwMTIwNjYyMzQwOTc1NjA5MTA3NDE3NzQ4MDQ4OTg0NSBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAxNA0KK2V4cHgyMTUgZXhwIC0wLjAwMSAtPiAwLjk5OTAwMDQ5OTgzMzM3NDk5MTY2ODA1NTM1NzE2NzY1NTk3NDcwMjM1NTkwMjM2MDA4IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI2DQorZXhweDIxNiBleHAgLTAuMSAtPiAwLjkwNDgzNzQxODAzNTk1OTU3MzE2NDI0OTA1OTQ0NjQzNjYyMTE5NDcwNTM2MDk4MDQwIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDM5DQorZXhweDIxNyBleHAgLTAuNyAtPiAwLjQ5NjU4NTMwMzc5MTQwOTUxNDcwNDgwMDA5MzM5NzUyODk2MTcwNzY2NzE2NTcxMTgyIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDQxDQorZXhweDIxOCBleHAgLTAuOSAtPiAwLjQwNjU2OTY1OTc0MDU5OTExMTg4MzQ1NDIzOTY0NTYyNTk4NzgzMzcwMzM3NjE3MDM4IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDQzDQorZXhweDIxOSBleHAgLTAuOTkgLT4gMC4zNzE1NzY2OTEwMjIwNDU2OTA1MzE1MjQxMTk5MDgyMDEzODY5MTgwMjg4NTQ5MDUwMSBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAyNg0KK2V4cHgyMjAgZXhwIC0xIC0+IDAuMzY3ODc5NDQxMTcxNDQyMzIxNTk1NTIzNzcwMTYxNDYwODY3NDQ1ODExMTMxMDMxNzcgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogMjYNCitleHB4MjIxIGV4cCAtMS4wMSAtPiAwLjM2NDIxODk3OTU3MTUyMzMxOTc1NzA0NjI5NTYzNzM0NTQ4OTU5NTg5MTM5MTkyNDgyIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI3DQorZXhweDIyMiBleHAgLTEuMSAtPiAwLjMzMjg3MTA4MzY5ODA3OTU1MzI4ODg0NjkwNjQzMTMxNTUyMTYxMjQ3OTUyMTU2OTIxIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI4DQorZXhweDIyMyBleHAgLTEuNSAtPiAwLjIyMzEzMDE2MDE0ODQyOTgyODkzMzI4MDQ3MDc2NDAxMjUyMTM0MjE3MTYyOTM2MTA4IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDMwDQorZXhweDIyNCBleHAgLTIgLT4gMC4xMzUzMzUyODMyMzY2MTI2OTE4OTM5OTk0OTQ5NzI0ODQ0MDM0MDc2MzE1NDU5MDk1OCBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAzNg0KK2V4cHgyMjUgZXhwIC01IC0+IDAuMDA2NzM3OTQ2OTk5MDg1NDY3MDk2NjM2MDQ4NDIzMTQ4NDI0MjQ4ODQ5NTg1MDI3MzU1MSBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAyNg0KK2V4cHgyMjYgZXhwIC0xMCAtPiAwLjAwMDA0NTM5OTkyOTc2MjQ4NDg1MTUzNTU5MTUxNTU2MDU1MDYxMDIzNzkxODA4ODg2NjU2NSBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAyOA0KK2V4cHgyMjcgZXhwIC0xNCAtPiA4LjMxNTI4NzE5MTAzNTY3ODg0MDYzOTg1MTQyNTY1MjYyMjk0NjA3NjU4MzY0OTg0NTdFLTcgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogMjkNCitleHB4MjI4IGV4cCAtMTUgLT4gMy4wNTkwMjMyMDUwMTgyNTc4ODM3MTQ3OTQ5NzcwMjI4OTYzOTM3MDgyMDc4MDgxODU2RS03IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDMwDQorZXhweDIzMyBleHAgMCAtPiAxDQorLS0gaXRlcmF0aW9uczogMg0KK2V4cHgyMzQgZXhwIDFFLTQwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiA3DQorZXhweDIzNSBleHAgOUUtNyAtPiAxLjAwMDAwMDkwMDAwMDQwNTAwMDEyMTUwMDAyNzMzNzUwNDkyMDc1MDczODExMjU5NDkgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogNg0KK2V4cHgyMzYgZXhwIDlFLTggLT4gMS4wMDAwMDAwOTAwMDAwMDQwNTAwMDAxMjE1MDAwMDI3MzM3NTAwNDkyMDc1MDA3MzgxIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDE1DQorZXhweDIzNyBleHAgMC4wMDMgLT4gMS4wMDMwMDQ1MDQ1MDMzNzcwMjYwMTI5MzQwOTEzNDg5MDAyMDUzMzE4NzI3MTk1NjE5IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDEzDQorZXhweDIzOCBleHAgMC4wMDEgLT4gMS4wMDEwMDA1MDAxNjY3MDgzNDE2NjgwNTU3NTM5OTMwNTgzMTE1NjMwNzYyMDA1ODA3IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI1DQorZXhweDIzOSBleHAgMC4xIC0+IDEuMTA1MTcwOTE4MDc1NjQ3NjI0ODExNzA3ODI2NDkwMjQ2NjY4MjI0NTQ3MTk0NzM3NSBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAzOA0KK2V4cHgyNDAgZXhwIDAuNyAtPiAyLjAxMzc1MjcwNzQ3MDQ3NjUyMTYyNDU0OTM4ODU4MzA2NTI3MDAxNzU0MjM5NDE0NTkgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogNDENCitleHB4MjQxIGV4cCAwLjkgLT4gMi40NTk2MDMxMTExNTY5NDk2NjM4MDAxMjY1NjM2MDI0NzA2OTU0MjE3NzIzMDY0NDAxIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDQyDQorZXhweDI0MiBleHAgMC45OSAtPiAyLjY5MTIzNDQ3MjM0OTI2MjI4OTA5OTg3OTQwNDA3MTAxMzk3MjE4MDI5MzE4NDEwMzAgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogMjYNCitleHB4MjQzIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNzAwMCBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAyNg0KK2V4cHgyNDQgZXhwIDEuMDEgLT4gMi43NDU2MDEwMTUwMTY5MTY0OTM5ODk3NzYzMTY2NjAzODc2MjQwNzM3NTA4MTk1OTYwIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI2DQorZXhweDI0NSBleHAgMS4xIC0+IDMuMDA0MTY2MDIzOTQ2NDMzMTEyMDU4NDA3OTUzNTg4NjcyMzkzMjgyNjgxMDI2MDE2MyBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAyOA0KK2V4cHgyNDYgZXhwIDEuNSAtPiA0LjQ4MTY4OTA3MDMzODA2NDgyMjYwMjA1NTQ2MDExOTI3NTgxOTAwNTc0OTg2ODM2OTcgSW5leGFjdCBSb3VuZGVkDQorLS0gaXRlcmF0aW9uczogMjkNCitleHB4MjQ3IGV4cCAyIC0+IDcuMzg5MDU2MDk4OTMwNjUwMjI3MjMwNDI3NDYwNTc1MDA3ODEzMTgwMzE1NTcwNTUxOCBJbmV4YWN0IFJvdW5kZWQNCistLSBpdGVyYXRpb25zOiAzNg0KK2V4cHgyNDggZXhwIDUgLT4gMTQ4LjQxMzE1OTEwMjU3NjYwMzQyMTExNTU4MDA0MDU1MjI3OTYyMzQ4NzY2NzU5Mzg4IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI2DQorZXhweDI0OSBleHAgMTAgLT4gMjIwMjYuNDY1Nzk0ODA2NzE2NTE2OTU3OTAwNjQ1Mjg0MjQ0MzY2MzUzNTEyNjE4NTU3IEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI4DQorZXhweDI1MCBleHAgMTQgLT4gMTIwMjYwNC4yODQxNjQ3NzY3Nzc3NDkyMzY3NzA3Njc4NTk0NDk0MTI0ODY1NDMzNzYxIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI4DQorZXhweDI1MSBleHAgMTUgLT4gMzI2OTAxNy4zNzI0NzIxMTA2MzkzMDE4NTUwNDYwOTE3MjEzMTU1MDU3Mzg1NDM4MjAwIEluZXhhY3QgUm91bmRlZA0KKy0tIGl0ZXJhdGlvbnM6IDI5DQorDQorLS0gYSBiaWdnaWUgW3Jlc3VsdCB2ZXJpZmllZCAzIHdheXNdDQorcHJlY2lzaW9uOiAyNTANCitleHB4MjYwIGV4cCAxIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyNDk3NzU3MjQ3MDkzNjk5OTU5NTc0OTY2OTY3NjI3NzI0MDc2NjMwMzUzNTQ3NTk0NTcxMzgyMTc4NTI1MTY2NDI3NDI3NDY2MzkxOTMyMDAzMDU5OTIxODE3NDEzNTk2NjI5MDQzNTcyOTAwMzM0Mjk1MjYwNTk1NjMwNzM4MTMyMzI4NjI3OTQzNDkwNzYzMjMzODI5ODgwNzUzMTk1MjUxMDE5MDExNTczODM0MTg3OTMwNzAyMTU0MDg5MTQ5OTM0ODg0MTY3NTA5MjQ0NzYxNDYwNjY4IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGV4dHJlbWUgcmFuZ2UgYm91bmRhcmllcw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiA5OTk5OTkNCittaW5FeHBvbmVudDogLTk5OTk5OQ0KKy0tIE50aW55IGJvdW5kYXJ5DQorZXhweDI5MCBleHAgIC0yMzAyNjE4LjAyMjMzMjUyOSAtPiAwRS0xMDAwMDE0IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitleHB4MjkxIGV4cCAgLTIzMDI2MTguMDIyMzMyNTI4IC0+IDFFLTEwMDAwMTQgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCistLSBObWF4LzEwIGFuZCBObWF4IGJvdW5kYXJ5DQorZXhweDI5MiBleHAgIDIzMDI1ODIuNzkwNDA4OTUyIC0+IDkuOTk5OTk5OTkzMTAwMjc3RSs5OTk5OTggIEluZXhhY3QgUm91bmRlZA0KK2V4cHgyOTMgZXhwICAyMzAyNTgyLjc5MDQwODk1MyAtPiAxLjAwMDAwMDAwMDMxMDAyOEUrOTk5OTk5ICBJbmV4YWN0IFJvdW5kZWQNCitleHB4Mjk0IGV4cCAgMjMwMjU4NS4wOTI5OTM5NDYgLT4gOS45OTk5OTkwMDMxNTk4NzBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4Mjk1IGV4cCAgMjMwMjU4NS4wOTI5OTQwMzYgLT4gOS45OTk5OTk5MDMxNTk4MjFFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4Mjk2IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDUgLT4gOS45OTk5OTk5OTMxNTk4MjBFKzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4Mjk3IGV4cCAgMjMwMjU4NS4wOTI5OTQwNDYgLT4gSW5maW5pdHkgT3ZlcmZsb3cgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAwPC14PDwxIGVmZmVjdHMNCitwcmVjaXNpb246ICAgIDMwDQorZXhweDMyMCBleHAgLTQuOTk5OTk5OTk5OTk5OUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwMDk3OTE2NjYxNyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzIxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjQ5OTk5OTc5MTY2NjY3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgzMjIgZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNDk5OTg5NzkxNjY3MTcgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICAyMA0KK2V4cHgzMjMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NTAwMDAwMDEyNTAwMCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzI0IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUwMDAwMDAxMjUwMDAgSW5leGFjdCBSb3VuZGVkDQorZXhweDMyNSBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwMTI1MDAwIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMTQNCitleHB4MzI2IGV4cCAtNC45OTk5OTk5OTk5OTk5RS04IC0+IDAuOTk5OTk5OTUwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZXhweDMyNyBleHAgLTUuMDAwMDAwMDAwMDAwMEUtOCAtPiAwLjk5OTk5OTk1MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgzMjggZXhwIC01LjAwMDAwMDAwMDAwMDFFLTggLT4gMC45OTk5OTk5NTAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCistLSBvdmVycHJlY2lzZSBhbmQgMDwteDw8MQ0KK3ByZWNpc2lvbjogICAgOA0KK2V4cHgzMzAgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMC45OTk5OTk5NSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzMxIGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDAuOTk5OTk5OTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDMzMiBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAwLjk5OTk5OTk1ICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgNw0KK2V4cHgzMzMgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzM0IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDMzNSBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMw0KK2V4cHgzMzYgZXhwIC00Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzM3IGV4cCAtNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDMzOCBleHAgLTUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIDA8eDw8MSBlZmZlY3RzDQorcHJlY2lzaW9uOiAgICAzMA0KK2V4cHgzNDAgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNDk5OTkwMjA4MzMyOCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDM0MSBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAwMDAyMDgzMzMzICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzQyIGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMDAxMDIwODMzMzggIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMjANCitleHB4MzQzIGV4cCAgNC45OTk5OTk5OTk5OTk5RS04IC0+IDEuMDAwMDAwMDUwMDAwMDAxMjUwMCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDM0NCBleHAgIDUuMDAwMDAwMDAwMDAwMEUtOCAtPiAxLjAwMDAwMDA1MDAwMDAwMTI1MDAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgzNDUgZXhwICA1LjAwMDAwMDAwMDAwMDFFLTggLT4gMS4wMDAwMDAwNTAwMDAwMDEyNTAwICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDE0DQorZXhweDM0NiBleHAgIDQuOTk5OTk5OTk5OTk5OUUtOCAtPiAxLjAwMDAwMDA1MDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHgzNDcgZXhwICA1LjAwMDAwMDAwMDAwMDBFLTggLT4gMS4wMDAwMDAwNTAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzQ4IGV4cCAgNS4wMDAwMDAwMDAwMDAxRS04IC0+IDEuMDAwMDAwMDUwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorLS0gb3ZlcnByZWNpc2UgYW5kIDA8eDw8MQ0KK3ByZWNpc2lvbjogICAgOA0KK2V4cHgzNTAgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzUxIGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDM1MiBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMDEgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgNw0KK2V4cHgzNTMgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMDAwMDAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzU0IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDM1NSBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwMDAwMCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMw0KK2V4cHgzNTYgZXhwICA0Ljk5OTk5OTk5OTk5OTlFLTggLT4gMS4wMCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4MzU3IGV4cCAgNS4wMDAwMDAwMDAwMDAwRS04IC0+IDEuMDAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDM1OCBleHAgIDUuMDAwMDAwMDAwMDAwMUUtOCAtPiAxLjAwICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MA0KK3ByZWNpc2lvbjogICAgMjANCitleHB4NDAxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MTgyODQ1ODkzNjUwNDEgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MDIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgxODI4NDU4OTYzNjg2OSAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQwMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTg5OTA4Njk3ICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDA0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MTgyODQ1OTAxODA1MjUgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MDUgZXhwIDEuMDAwMDAwMDAwMDAwMCAgIC0+IDIuNzE4MjgxODI4NDU5MDQ1MjM1NCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQwNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzMTcwNjM1ICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDA3IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MTgyODQ1OTU4ODg5MTcgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMTQNCitleHB4NDExIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcxODI4MTgyODQ1ODkgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MTIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQxMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43MTgyODE4Mjg0NTkwICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDE0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcxODI4MTgyODQ1OTAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MTUgZXhwIDEuMDAwMDAwMDAwMDAwMCAgIC0+IDIuNzE4MjgxODI4NDU5MCAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQxNiBleHAgMS4wMDAwMDAwMDAwMDAxICAgLT4gMi43MTgyODE4Mjg0NTkzICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDE3IGV4cCAxLjAwMDAwMDAwMDAwMDIgICAtPiAyLjcxODI4MTgyODQ1OTYgIEluZXhhY3QgUm91bmRlZA0KKy0tIG92ZXJwcmVjaXNlLi4uDQorcHJlY2lzaW9uOiAgICA3DQorZXhweDQyMSBleHAgMC45OTk5OTk5OTk5OTk5NiAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDIyIGV4cCAwLjk5OTk5OTk5OTk5OTk3ICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MjMgZXhwIDAuOTk5OTk5OTk5OTk5OTggIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQyNCBleHAgMC45OTk5OTk5OTk5OTk5OSAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDI1IGV4cCAxLjAwMDAwMDAwMDAwMDEgICAtPiAyLjcxODI4MiAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MjYgZXhwIDEuMDAwMDAwMDAwMDAwMiAgIC0+IDIuNzE4MjgyICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQyNyBleHAgMS4wMDAwMDAwMDAwMDAzICAgLT4gMi43MTgyODIgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDINCitleHB4NDMxIGV4cCAwLjk5OTk5OTk5OTk5OTk2ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MzIgZXhwIDAuOTk5OTk5OTk5OTk5OTcgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQzMyBleHAgMC45OTk5OTk5OTk5OTk5OCAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDM0IGV4cCAwLjk5OTk5OTk5OTk5OTk5ICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg0MzUgZXhwIDEuMDAwMDAwMDAwMDAwMSAgIC0+IDIuNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDQzNiBleHAgMS4wMDAwMDAwMDAwMDAyICAgLT4gMi43ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NDM3IGV4cCAxLjAwMDAwMDAwMDAwMDMgICAtPiAyLjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGJhc2ljcyBhdCBsb3cgcHJlY2lzaW9ucw0KK3ByZWNpc2lvbjogMw0KK2V4cHg1MDEgZXhwICAtSW5maW5pdHkgICAgIC0+IDANCitleHB4NTAyIGV4cCAgLTEwICAgICAgICAgICAtPiAwLjAwMDA0NTQgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NTAzIGV4cCAgLTEgICAgICAgICAgICAtPiAwLjM2OCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NTA0IGV4cCAgIDAgICAgICAgICAgICAtPiAxDQorZXhweDUwNSBleHAgIC0wICAgICAgICAgICAgLT4gMQ0KK2V4cHg1MDYgZXhwICAgMSAgICAgICAgICAgIC0+IDIuNzIgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg1MDcgZXhwICAgMC42OTMxNDcxODEgIC0+IDIuMDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg1MDggZXhwICAgMTAgICAgICAgICAgIC0+IDIuMjBFKzQgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg1MDkgZXhwICArSW5maW5pdHkgICAgIC0+IEluZmluaXR5DQorcHJlY2lzaW9uOiAyDQorZXhweDUxMSBleHAgIC1JbmZpbml0eSAgICAgLT4gMA0KK2V4cHg1MTIgZXhwICAtMTAgICAgICAgICAgIC0+IDAuMDAwMDQ1ICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg1MTMgZXhwICAtMSAgICAgICAgICAgIC0+IDAuMzcgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2V4cHg1MTQgZXhwICAgMCAgICAgICAgICAgIC0+IDENCitleHB4NTE1IGV4cCAgLTAgICAgICAgICAgICAtPiAxDQorZXhweDUxNiBleHAgICAxICAgICAgICAgICAgLT4gMi43ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDUxNyBleHAgICAwLjY5MzE0NzE4MSAgLT4gMi4wICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDUxOCBleHAgICAxMCAgICAgICAgICAgLT4gMi4yRSs0ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDUxOSBleHAgICtJbmZpbml0eSAgICAgLT4gSW5maW5pdHkNCitwcmVjaXNpb246IDENCitleHB4NTIxIGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQorZXhweDUyMiBleHAgIC0xMCAgICAgICAgICAgLT4gMC4wMDAwNSAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDUyMyBleHAgIC0xICAgICAgICAgICAgLT4gMC40ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorZXhweDUyNCBleHAgICAwICAgICAgICAgICAgLT4gMQ0KK2V4cHg1MjUgZXhwICAtMCAgICAgICAgICAgIC0+IDENCitleHB4NTI2IGV4cCAgIDEgICAgICAgICAgICAtPiAzICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NTI3IGV4cCAgIDAuNjkzMTQ3MTgxICAtPiAyICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NTI4IGV4cCAgIDEwICAgICAgICAgICAtPiAyRSs0ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitleHB4NTI5IGV4cCAgK0luZmluaXR5ICAgICAtPiBJbmZpbml0eQ0KKw0KKy0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMNCitwcmVjaXNpb246ICAgNw0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2V4cHg3MDEgZXhwICAxMDAwMDAwMDAwICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzAyIGV4cCAgMTAwMDAwMDAwICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZXhweDcwMyBleHAgIDEwMDAwMDAwICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2V4cHg3MDQgZXhwICAxMDAwMDAwICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzA1IGV4cCAgMTAwMDAwICAgICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZXhweDcwNiBleHAgIDEwMDAwICAgICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2V4cHg3MDcgZXhwICAxMDAwICAgICAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzA4IGV4cCAgODg2LjQ5NTI2MDggLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZXhweDcwOSBleHAgIDg4Ni40OTUyNjA3IC0+IDkuOTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZXhweDcxMCBleHAgIDg4Ni40OTUyNyAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2V4cHg3MTEgZXhwICA4ODYuNDk1MjYgICAtPiA5Ljk5OTk5MkUrMzg0IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAxNg0KK2V4cHg3MjEgZXhwICA4ODYuNDk1MjYwODAyNzA3NTg4MyAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzIyIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU4ODIgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzIzIGV4cCAgODg2LjQ5NTI2MDgwMjcwNzU5ICAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZXhweDcyNCBleHAgIDg4Ni40OTUyNjA4MDI3MDc1OCAgIC0+IDkuOTk5OTk5OTk5OTk5OTE3RSszODQgSW5leGFjdCBSb3VuZGVkDQorZXhweDcyNSBleHAgIDg4Ni40OTUyNjA4MDI3MDc2ICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2V4cHg3MjYgZXhwICA4ODYuNDk1MjYwODAyNzA3NSAgICAtPiA5Ljk5OTk5OTk5OTk5OTExN0UrMzg0IEluZXhhY3QgUm91bmRlZA0KKy0tIGFuZCBieSBzcGVjaWFsIHJlcXVlc3QgLi4uDQorcHJlY2lzaW9uOiAgIDE1DQorZXhweDczMSBleHAgIDg4Ni40OTUyNjA4MDI3MDggICAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2V4cHg3MzIgZXhwICA4ODYuNDk1MjYwODAyNzA3ICAgICAtPiA5Ljk5OTk5OTk5OTk5NDEyRSszODQgSW5leGFjdCBSb3VuZGVkDQorZXhweDczMyBleHAgIDg4Ni40OTUyNjA4MDI3MDYgICAgIC0+IDkuOTk5OTk5OTk5OTg0MTJFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCittYXhFeHBvbmVudDogOTk5DQorbWluRXhwb25lbnQ6IC05OTkNCitleHB4NzM1IGV4cCAgMjMwMi41ODUwOTI5OTQwNSAgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitleHB4NzM2IGV4cCAgMjMwMi41ODUwOTI5OTQwNCAgICAtPiA5Ljk5OTk5OTk5OTk0MzE2RSs5OTkgSW5leGFjdCBSb3VuZGVkDQorZXhweDczNyBleHAgIDIzMDIuNTg1MDkyOTk0MDMgICAgLT4gOS45OTk5OTk5OTk4NDMxNkUrOTk5IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MsIGluY2x1ZGluZyB1bmRlcmZsb3ctdG8temVybyBlZGdlIHBvaW50DQorcHJlY2lzaW9uOiAgIDcNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHB4NzUxIGV4cCAtMTAwMDAwMDAwMCAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KK2V4cHg3NTIgZXhwIC0xMDAwMDAwMDAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQorZXhweDc1MyBleHAgLTEwMDAwMDAwICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCitleHB4NzU0IGV4cCAtMTAwMDAwMCAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KK2V4cHg3NTUgZXhwIC0xMDAwMDAgICAgICAgLT4gIDBFLTM4OSBVbmRlcmZsb3cgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQgU3Vibm9ybWFsDQorZXhweDc1NiBleHAgLTEwMDAwICAgICAgICAtPiAgMEUtMzg5IFVuZGVyZmxvdyBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZCBTdWJub3JtYWwNCitleHB4NzU3IGV4cCAtMTAwMCAgICAgICAgIC0+ICAwRS0zODkgVW5kZXJmbG93IEluZXhhY3QgUm91bmRlZCBDbGFtcGVkIFN1Ym5vcm1hbA0KK2V4cHg3NTggZXhwIC04ODEuODkwMDkgICAgLT4gIDEuMDAwMDAxRS0zODMgSW5leGFjdCBSb3VuZGVkDQorZXhweDc1OSBleHAgLTg4MS44OTAxICAgICAtPiAgOS45OTk5MUUtMzg0ICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KK2V4cHg3NjAgZXhwIC04ODUgICAgICAgICAgLT4gIDQuNDYwNUUtMzg1ICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCitleHB4NzYxIGV4cCAtODg4ICAgICAgICAgIC0+ICAyLjIyMUUtMzg2ICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQorZXhweDc2MiBleHAgLTg5MCAgICAgICAgICAtPiAgMy4wMUUtMzg3ICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KK2V4cHg3NjMgZXhwIC04OTIuOSAgICAgICAgLT4gIDEuN0UtMzg4ICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCitleHB4NzY0IGV4cCAtODkzICAgICAgICAgIC0+ICAxLjVFLTM4OCAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQorZXhweDc2NSBleHAgLTg5My41ICAgICAgICAtPiAgOUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KK2V4cHg3NjYgZXhwIC04OTUuNzA1NiAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCitleHB4NzY5IGV4cCAtODk1LjggICAgICAgIC0+ICAxRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsDQorZXhweDc3MCBleHAgLTg5NS43MyAgICAgICAtPiAgMUUtMzg5ICAgICAgICBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KK2V4cHg3NzEgZXhwIC04OTYuMzk4NyAgICAgLT4gIDFFLTM4OSAgICAgICAgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCitleHB4NzcyIGV4cCAtODk2LjM5ODggICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQNCitleHB4NzczIGV4cCAtODk4LjAwODEgICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQNCitleHB4Nzc0IGV4cCAtODk4LjAwODIgICAgIC0+ICAwRS0zODkgICAgICAgIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgU3Vibm9ybWFsIENsYW1wZWQNCisNCistLSBzcGVjaWFsIHZhbHVlcw0KK21heGV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK2V4cHg4MjAgZXhwICAgSW5mICAgIC0+IEluZmluaXR5DQorZXhweDgyMSBleHAgIC1JbmYgICAgLT4gMA0KK2V4cHg4MjIgZXhwICAgTmFOICAgIC0+IE5hTg0KK2V4cHg4MjMgZXhwICBzTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitleHB4ODI0IGV4cCAgc05hTjEyMyAtPiAgTmFOMTIzIEludmFsaWRfb3BlcmF0aW9uDQorZXhweDgyNSBleHAgLXNOYU4zMjEgLT4gLU5hTjMyMSBJbnZhbGlkX29wZXJhdGlvbg0KK2V4cHg4MjYgZXhwICAgTmFONDU2IC0+ICBOYU40NTYNCitleHB4ODI3IGV4cCAgLU5hTjY1NCAtPiAtTmFONjU0DQorZXhweDgyOCBleHAgICBOYU4xICAgLT4gIE5hTjENCisNCistLSBJbnZhbGlkIG9wZXJhdGlvbnMgZHVlIHRvIHJlc3RyaWN0aW9ucw0KKy0tIFtuZXh0IHR3byBwcm9iYWJseSBza2lwcGVkIGJ5IG1vc3QgdGVzdCBoYXJuZXNzZXNdDQorcHJlY2lzaW9uOiAxMDAwMDAwMDANCitleHB4OTAxIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0DQorcHJlY2lzaW9uOiAgOTk5OTk5OTkNCitleHB4OTAyIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0DQorDQorcHJlY2lzaW9uOiA5DQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMA0KK21pbkV4cG9uZW50OiAgIC05OTk5OTkNCitleHB4OTAzIGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0DQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KK21pbkV4cG9uZW50OiAgIC05OTk5OTkNCitleHB4OTA0IGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KK21pbkV4cG9uZW50OiAgLTEwMDAwMDANCitleHB4OTA1IGV4cCAgLUluZmluaXR5ICAgICAtPiBOYU4gSW52YWxpZF9jb250ZXh0DQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KK21pbkV4cG9uZW50OiAgIC05OTk5OTgNCitleHB4OTA2IGV4cCAgLUluZmluaXR5ICAgICAtPiAwDQorDQorLS0NCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitwcmVjaXNpb246ICAgMTYNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorDQorLS0gTnVsbCB0ZXN0DQorZXhweDkwMCBleHAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorDQorLS0gUmFuZG9tcyBQPTUwLCB3aXRoaW4gMC05OTkNCitQcmVjaXNpb246IDUwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorZXhweDE1MDEgZXhwIDY1Ni4zNTM5Nzk1MDU5MDI4NTYxMjI2NjA5NTU5NjUzOTkzNDIxMzk0Mzg3Mjg4NTcyOCAgLT4gMS4xMjQzNzU3NjEwNjQwMzE5NzgzNjExMTc4NTI4ODM5NjUyNjcyMDYyODIwMDQwMzE0RSsyODUgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MDIgZXhwIDAuOTM2MjA1NzEwOTM2NTI4MDAyMjUwMzg1NTA2MDA3ODAzMjI4MzEyMzYwODI3ODE0NzEgLT4gMi41NTAyODY1MTMwOTg2MTc2Njg5MTk5NzExODU3ODI1NzcxMzExMTc4MDQ2ODQyMDA5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTAzIGV4cCAwLjAwMDAwMDAwMDAwMDAwMDA4MzQwNzg1ODU2NjAxNTE0NzE0MTgzMzczODc0MTA1NzkxIC0+IDEuMDAwMDAwMDAwMDAwMDAwMDgzNDA3ODU4NTY2MDE1MTUwNjIwMjY5MTc0MDI1MjUxMiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUwNCBleHAgMC4wMDAwOTE3NDA1NzI2Mjg4Nzc4OTYyNTc0NTU3NDY4NjU0NTE2MzE2ODc4ODQ1NjIwMyAtPiAxLjAwMDA5MTc0NDc4MDkyMzkwMDUxNDY3MjIzNDEyNTE1MjQwODEwMDYwNTE0NzMyNzMgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MDUgZXhwIDMzLjkwOTExNjg5Nzk3Mzc5NzczNTY1Nzc1MTU5MTAxNDkyNjYyOTA1MTExNzU0MTI0MyAgLT4gNTMyNzczMTgxMDI1MDAyLjAzNTQzNjE4OTAxMzA2NzI2NDk1ODcwNDc2NjE3MjMyMjI5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTA2IGV4cCAwLjAwMDAwNzQwNDcwNDEzMDA0NDA2NTkyMTI0NTc1Mjk1Mjc4NDU2OTM2ODA5NTg3MzExIC0+IDEuMDAwMDA3NDA0NzMxNTQ0OTMzMzU5MDA2NjM5NTY3MDMwNjEzNTU2Nzg4OTIxMDgxNCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUwNyBleHAgMC4wMDAwMDAwMDAwMDEyNDg1NDkyMjIyMjEwODgwMjQ1Mzc0NjkyMjQ4MzA3MTQ0NTQ5MiAtPiAxLjAwMDAwMDAwMDAwMTI0ODU0OTIyMjIyMTg2NzQ2MjExNzYyMzk5MTE0MjQ5NjgyNjMgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MDggZXhwIDQuMTc5MzI4MDY3NDE1NTY1OTc5NDI4Njk1MTE1OTQzMDY1MTI1ODM1NjAxNDM5MTM4MiAgLT4gNjUuMzIxOTQ2NTIwMTQ3MTk5NDA0MTk5Nzg3ODExMzM2ODYwMDg3OTc1MTE4Mjc4MTg1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTA5IGV4cCA0ODUuNDM1OTU3NDU0NjA2NTU4OTM3NDYxNzk4OTAyNTU1Mjk5MTkyMjE1NTAyMDE2ODYgIC0+IDYuNjM5ODQwMzkyMDQ1OTYxNzI1NTk1MDQ3Njk1MzEyOTM3NzQ1OTg0NTM2NjU4NTQ2M0UrMjEwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTEwIGV4cCAwLjAwMDAwMDAwMDAzNTQ3MjU5ODA2NTkwODU2MDMyNTI3ODc1MTU3ODMwMzI4MTU2NTk3IC0+IDEuMDAwMDAwMDAwMDM1NDcyNTk4MDY2NTM3NzEyOTMyMDU4OTQwNjcxNTAwMDY4NTUxNSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUxMSBleHAgMC4wMDAwMDAwMDAwMDAwMDc1OTYyMTQ5NzMzOTEwNDA0NzkzMDYxNjQ3ODYzNTA0MjY3OCAtPiAxLjAwMDAwMDAwMDAwMDAwNzU5NjIxNDk3MzM5MTA2OTMzMDU0NzEyNTc3MTU0NjM4ODcgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MTIgZXhwIDkuNzk1OTE2ODgyMTc2MDMzOTMwNDU3MTU5NTQ3NDQ4MDY0MDI4NjA3MjcyMDIzMzc5NiAgLT4gMTc5NjAuMjYxMTQ2MDQyOTU1MTc5MTY0MzAzNjUzNDEyNjUwNzUxNjgxNDM2MzUyNDM3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTEzIGV4cCAwLjAwMDAwMDAwNTY2NjQyMDA2MjU4MjkwNTI2NzgzOTAxNDUxMTk0OTQzMTY0NTM1NTgxIC0+IDEuMDAwMDAwMDA1NjY2NDIwMDc4NjM3MDYzNDYwOTgzMjQzODgxNTY2NTI0OTM0NzY1MCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUxNCBleHAgNzQxLjI5ODg4NzkxMTM0Mjk4MTk0MDg4ODI3NTcyMzc0NzE4OTQwOTI1ODIwMDI3MzU0ICAtPiA4Ljc1MDE2OTQwMDYzMTczMzI4MDgxMjg5NDY2NjY0MDI2MjI0MzIwNjQ5MjMxOTg3MzFFKzMyMSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUxNSBleHAgMDMyLjc1NTczMDAzNTUyNTE3NjY4ODA4NTI5MDk5ODk3MTUzNzEwODg3MDE0OTQ3OTM1ICAtPiAxNjgxMjUxOTY1Nzg2NzguMTc3MjU4NDExMDg2MTc5NTU5MDQ0MjUzNDU2MzEwOTIzMzkgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MTYgZXhwIDQyLjMzMzcwMDcyNjQyOTMzMzMwODU5NDI2NTU1MzQyMjkwMjQ2MzczNzM5OTQzNzY0NCAgLT4gMjQyODI0NTY3NTg2NDE3MjQ3NS40NjgxMTE5NDkzMDQ1NjU3Nzk3MzA5MzY5NjcyMDEyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTE3IGV4cCAwLjAwMDAwMDAwMDAwMDAwNTU5NjgyNjE2ODc2NDkxODg4MTk3NjA5MTU4ODAyODM1Nzk4IC0+IDEuMDAwMDAwMDAwMDAwMDA1NTk2ODI2MTY4NzY0OTM0NTQ0MjA3NjczMjczOTU3NzA0OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUxOCBleHAgMC4wMDAwMDAwMDAwMDA4MDcwMzY4ODY2ODI4MDE5MzU4NDc1ODMwMDk3MzU0OTQ4NjMxMiAtPiAxLjAwMDAwMDAwMDAwMDgwNzAzNjg4NjY4MzEyNzU5MDExNTgxNjQzMjE4Njc5MTQzNDIgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MTkgZXhwIDY0MC43MjM5NjAxMjc5NjUwOTQ4MjM4MjcxMjg5MTcwOTA3MjU3MDY1MzYwNjgzODI1MSAgLT4gMS44MzE4MDk0OTkwNjgzMzk0MjI5MzA0MTMzMDY4OTgzOTE0MjM2OTk1MzI2ODkxMDQ1RSsyNzggSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MjAgZXhwIDAuMDAwMDAwMDAwMDAwMDA1MDk0NTg5MjIxNjc2MzEwNzE0MTY5NDgxMTIyMTk1MTIyMjQgLT4gMS4wMDAwMDAwMDAwMDAwMDUwOTQ1ODkyMjE2NzYzMjM2OTE1ODkxNDk5MzI0MzU4NTU2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTIxIGV4cCA2Ljc2NzAzOTQzMTQzMTUyMDYzNzg2MjUyMjE1ODM5NzM0MTQ2NjA3Mjc5NjAyNDEzOTUgIC0+IDg2OC43MzYxMzAxMjgyMjAzMTM2NzgwNjI0ODY5NzA5Mjg4NDQxNTExOTU2ODI3MTMxNSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUyMiBleHAgMDQuODIzMjE3NDA3NDEyOTYzNTA2NjM4MjY3MjI2ODkxMDI0MTM4MDU0NzgzMTIyNTQ4ICAtPiAxMjQuMzY0NTc5Mjk1ODg4MzcxMjk3MzE4MjEwNzc1ODY3MDU1MDU1NjU5MDQyMDUzNjYgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MjMgZXhwIDE5My41MTMwNzg3ODcwMTE5NjQwMzk5MTIwODQ4MjUyMDExNTM1OTY5MDEwNjE0MzYxNSAgLT4gMS4xMDA2ODMwODcyODU0NzE1Njc3MzkwOTE0NjU1NDUyMjYxNTUwNzY4OTU3NTc2MDM0RSs4NCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUyNCBleHAgNS43MzA3NzQ5MDM4MzAzNjUwNTM5MjAwMzQ1OTAxMjEwNDk3MDE1NjE3MzkzOTcwNDYzICAtPiAzMDguMjA4MDA3NDMxMDY4NDMwODM1MjI3MjE1MjM3MTU2NDU5NTA1NzQ4NjY0OTUxOTYgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MjUgZXhwIDAuMDAwMDAwMDAwMDAwOTUyMTc4MjUxOTk3OTc5NjUyMDA1NDExNjkxMjM3NDM1MDAyNjcgLT4gMS4wMDAwMDAwMDAwMDA5NTIxNzgyNTE5OTg0MzI5NzM3MTcyMDA3OTkxMzkwMzgxMjczIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTI2IGV4cCAwLjAwMDI3MTMxNDQwOTQ5MTgzMzcwOTY2MzkzNjgyNjE3OTMwMTUzNDk1MDI4OTE5MTQwIC0+IDEuMDAwMjcxMzUxMjE4NTc1MTAyMjkwNjA1ODE2MDQ4MDYwNjU5ODc1NDkxMzYwNzM2NCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUyNyBleHAgMC4wMDAwMDAwMDA2NDUwMzA1OTExNDY4MDY4MjM0MzAwMjMxNTY2MjA2OTI3MjcwNzEyMyAtPiAxLjAwMDAwMDAwMDY0NTAzMDU5MTM1NDgzOTA1NTIzMjM1MTc0MDM2MTMxMzU0OTY2MzMgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MjggZXhwIDAuMDAwMDAwMDAwMDAwMDAwOTU2MTY2NDM1MDY1MjcyODg4NjYyMzUyMzg1NDg0NDA1OTMgLT4gMS4wMDAwMDAwMDAwMDAwMDA5NTYxNjY0MzUwNjUyNzMzNDU3ODk0NzgxNTgyMDA5MDk0IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTI5IGV4cCAwLjAwMDAwMDAwMDAwMDAwMDg2NDQ5OTQyODExNjc4NjUwMjQ0NDU5NTUwMjUyNzQzNDMzIC0+IDEuMDAwMDAwMDAwMDAwMDAwODY0NDk5NDI4MTE2Nzg2ODc2MTI0MjI2MTA5NjUyOTk4NiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUzMCBleHAgMC4wNjIyMzQ4ODM1NTYzNTM1OTk2NTY4MzA1MzE1NzcyOTIwNDk4ODM4MTg4NzYyMTg1MCAtPiAxLjA2NDIxMjI4MTMzOTI0MDY2NTc3ODk2ODg5MzE4Mzg5MTkzMjM4MjYyNTA2MzA4MzEgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MzEgZXhwIDAuMDAwMDA0MDA3MTA4MDc4MDQ0Mjk0MzU1MDI2NTcxMzE5MTIzMDg2ODA2NzQwNTcwNTMgLT4gMS4wMDAwMDQwMDcxMTYxMDY1MTI1OTI1NjIwODkwMDE5MzE5ODMyMTI3ODYzNTU5MjYwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTMyIGV4cCA4NS41MjI3OTY4OTQ3NDQ1NzYyMTE1NzMyMzIwNTU0OTQ1NTE0MjkyOTc4Nzg0MTMwMTcgIC0+IDEzODcwMDczNjg2NDA0MjI4NDUyNzU3Nzk5NzcwMjUxMDg1MTc3Ljg1MzMzNzM2ODkzNSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUzMyBleHAgOS4xNDk2NzIwODExMzYzNjc4Njk2OTM4MDM2Mzc5NzU2NjYzNTQ4MzUzMzk5OTU0MzYzICAtPiA5NDExLjM1MzcxMjI4MzI3NDMzODY3ODM1OTc2MjkxNjE3NjMwNTczNzAwMzQ0OTUxNTcgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MzQgZXhwIDguMjIxNTcwNTI0MDc4ODI5NDQ3Mjk0NDM4MjA1NjMzMDUxNjczODU3Nzc4NTE3Nzk0MiAgLT4gMzcyMC4zNDA2ODEzMzgzMDc2OTUzODk5NjU0NzAxNjE1MDg0NDI1NTk4Mzc3NzU4MTg5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTM1IGV4cCAwLjAwMDAwMDAwMDE1NzcyMDY0NTY5NjQwNjEzMTQyODIzMjAzNzI2ODIxMDc2MjM5NTYxIC0+IDEuMDAwMDAwMDAwMTU3NzIwNjQ1NzA4ODQ0MDMyNDY4MzMxNTc4ODM1ODkyNjEyOTgzMCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUzNiBleHAgMC41ODE3OTM0NjQ3Mzk1OTUzMTQzMjYyNDE1MzU3Njg4MzQ0MDYyNTUzODAxNzUzMjQ4MCAtPiAxLjc4OTI0NDUwMTgyNzUzNjAxNjM3OTcwMjIzNzI2NTU4MzcxODg0MjMxOTQ4NjM2MDUgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1MzcgZXhwIDMzLjU1NTcyNjE5NzE0OTUyNTA2MTQ1NTUxNzc4NDg3MDU3MDQ3MDgzMzQ5ODA5NjU1OSAgLT4gMzc0MTY4MDY5ODk2MzI0LjYyNTc4MDczMTQ4OTkzNTI2NjI2MzA3MDk1ODU0NDA3OTUyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxNTM4IGV4cCA5Ljc4OTgwNzk4MDM5MDYyMTUwOTQxNDAwMTAwMDk1ODMzNzU1MzcyNTk4MTAzOTg2NTkgIC0+IDE3ODUwLjg3ODExOTkxMjIwODg4ODIxNzEwMDk5ODAxOTk4NjYzNDYyMDM2ODUzODQyNiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTUzOSBleHAgODkuMTU3Njk3MzI3MTc0NTIxNTQyNTAyNDQ3OTUzMDMyNTM2NTQxMDM4NjM2OTY2MzQ3ICAtPiA1MjU2NDkxNTIzMjAxNjY1MDM3NzEyMjQxNDkzMzA0NDgwODk1NTAuNjcyOTM4MjkyMjcgSW5leGFjdCBSb3VuZGVkDQorZXhweDE1NDAgZXhwIDI1LjAyMjk0NzYwMDEyMzMyODkxMjAyOTA1MTg5NzE3MTMxOTU3MzMyMjg4ODUxNDg4NSAgLT4gNzM2NzYzNDM0NDIuOTUyNTE3ODI0MzQ1NDMxNDM3NjgzMTUzMzA0NjQ1ODUxOTYwNTI0IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGV4cCgxKSBhdCAzNA0KK1ByZWNpc2lvbjogMzQNCitleHB4MTIwMCBleHAgMSAtPiAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MiBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBSYW5kb21zIFA9MzQsIHdpdGhpbiAwLTk5OQ0KK1ByZWNpc2lvbjogMzQNCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK2V4cHgxMjAxIGV4cCAzMDkuNTk0ODg1NTgyMTUxMDIxMjk5NjcwMDY0NTA4NzE4OCAgLT4gMi44NTMzMTk2OTI5MDEzODc1MjEyMDE3MzgwMTUwNTA3MjRFKzEzNCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIwMiBleHAgOS45MzY1NDMwNjg3MDYyMTE0MjA0MjI4MDM5NjI2ODAxNjQgIC0+IDIwNjcyLjE1ODM5MjAzMTcxODc3NDc2NTExMDkzMjc2MDIyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjAzIGV4cCA2LjMwNzg3MDMyMzg4MTUwNTY4NDQyOTgzOTQ5MTcwNzkwOCAgLT4gNTQ4Ljg3NDc3NzcwNTQ2MzcyOTYxMzcyNzczOTE3NTQ2NjUgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMDQgZXhwIDAuMDAwMzU0MzI4MTM4OTQzODQyMDUzNTIwMTMwODI4MjUwMyAtPiAxLjAwMDM1NDM5MDkyMDU3Mzc0NjE2NDczMzM1MDg0MzE1NSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIwNSBleHAgMC4wMDAwMDM3MDg3NDUzMzYzOTE4Mzc1NTk4Mzk0OTIwMjI5IC0+IDEuMDAwMDAzNzA4NzUyMjEzNzk2MzI0ODQxOTIwMTg5MzIzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjA2IGV4cCAwLjAwMjA0MzIzMTI2ODc1MTI0MzgwNDAyMjI0NDQxMTY1ODUgLT4gMS4wMDIwNDUzMjAwODgxNjQ4MjYwMTM1NjE2MzA5NzUzMDggSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMDcgZXhwIDYuODU2MzEzMzQwMDMyMTc3NjcyNTUwMzQzMjE2MTI5NTg2ICAtPiA5NDkuODU4Nzk4MTYwNDE0NDE0Nzk4MzU4OTY2MDUyNDM5NiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIwOCBleHAgMC4wMDAwMDAwMDAwNDAyMDk0OTI4MzMzODE1NjQzMzI2NDE4IC0+IDEuMDAwMDAwMDAwMDQwMjA5NDkyODM0MTg5OTY1OTg5NjEyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjA5IGV4cCAwLjAwNDk2MTA3ODQ3MjI0MTIxMTc2MzI2NDcwMDM1NDU4MzkgLT4gMS4wMDQ5NzM0MDQ5OTc5MDE5ODcwMzk1ODkwMjkyNzc4MzMgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMTAgZXhwIDAuMDAwMDg5MTQ3MTg4MzcyNDA2NjkwOTc0Njc4NjcwMjY4NiAtPiAxLjAwMDA4OTE1MTE2MjEwMTA4NTQxMjc4MDA4ODI2NjY5OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIxMSBleHAgMDguNTk5NzkxNzAzNzYwNjE4OTA2ODQ3MjMyMTExMTI1NjYgIC0+IDU0MzAuNTI4MzE0OTIwOTA1NzE0NjE1MzM5MjczNzM4MDk3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjEyIGV4cCA5LjQ3MzExNzAzOTM0MTAwMzg1NDg3Mjc3ODExMjc1MjU5MCAgLT4gMTMwMDUuMzYyMzQzMzEyMjQ5NTM0NjAwNTU4OTc5MTM5MTcgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMTMgZXhwIDAuMDk5OTA2MDcyNDY5MjIwNzY0ODQyOTk2OTk5OTMxMDExOCAtPiAxLjEwNTA2NzExNjk3NTE5MDYwMjI5NjA1MjcwMDcyNjgwMiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIxNCBleHAgMC4wMDAwMDAwOTI3ODA0NTMzNTU1ODc3ODg0MDgyMjY5MjQ3IC0+IDEuMDAwMDAwMDkyNzgwNDU3NjU5Njk0MTgzOTU0NzQwNzcyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjE1IGV4cCAwLjAzNzY1Nzg1ODM4NzI4ODk5MTYyOTg3NzI4MTgyNjU2NzcgLT4gMS4wMzgzNzU5MDA0ODk3NzE5NDY0Nzc4NTc4MTg0NDc1NTYgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMTYgZXhwIDI2MS42ODk2NDExNjk3NTM5NTI0OTExNTM2MTE2NzEyMzA3ICAtPiA0LjQ3MDYxMzU2MjEyNzQ2NTA5NTI0MTYwMDE3NDk0MTQ2MEUrMTEzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjE3IGV4cCAwLjA3MDk5OTc0MjMyNjkxNjI5ODA4NzU4MjQyMTM4ODk2MjYgLT4gMS4wNzM1ODA5NDkyMzU0MDc5NDk0MTc4MTQ0ODU1MzMxNzIgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMTggZXhwIDAuMDAwMDAwMDQ0NDYwNTU4MzI5NTE2OTg5NTIzNTY1ODczMSAtPiAxLjAwMDAwMDA0NDQ2MDU1OTMxNzg4NzYyNzY1NzU5MzkwMCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIxOSBleHAgMC4wMDAwMDIxMjI0MDcyODU0Nzc3NTEyMjgxMzY5ODE1MTg1IC0+IDEuMDAwMDAyMTIyNDA5NTM3Nzg1Njg3MzkwNjMxMDcwOTA2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjIwIGV4cCA1NDcuNTE3NDQ2MjU3NDE1Njg4NTQ3MzU1ODQ4NTQ3NTA1MiAgLT4gNi4wNzg2MjkyNDczODM4MDc5NDI2MTIxMTQ1Nzk3Mjg2NzJFKzIzNyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIyMSBleHAgMC4wMDAwMDA5MDY3NTk4MDQxNjE1MTkyMDAyMzM5ODQ0NjcwIC0+IDEuMDAwMDAwOTA2NzYwMjE1MjY4MzE0NjgwMTE1Mzc0Mzg3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjIyIGV4cCAwLjAzMTY0NzY1MDAzMDgwNjUzNjU4MDM0NTU1MzMyNDQ2MDMgLT4gMS4wMzIxNTM3NjE4ODAxODc5Nzc2NTgzODc5NjE3NjkwMzQgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMjMgZXhwIDg0LjQ2MTYwNTMwMzc3NjQ1MTAxODMzOTk2NzA2Mzg0NDczICAtPiA0Ljc5OTY0NDk5NTg5Nzk2ODM4MzUwMzI2OTg3MTY5Nzg1NkUrMzYgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMjQgZXhwIDAuMDAwMDAwMDAwMDUyMDU5OTc0MDI5MDg0ODAxODkwNDE0NSAtPiAxLjAwMDAwMDAwMDA1MjA1OTk3NDAzMDQzOTkyMjMzODM5MyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIyNSBleHAgMC4wMDAwMDA2NzQ4NTMwNjQwMDkzNjIwNjY1NjUxNzI2NzA4IC0+IDEuMDAwMDAwNjc0ODUzMjkxNzIyNzQyMjkyMzMxODEyOTk3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjI2IGV4cCAwLjAwMDAwMDAxMTY4NTMxMTk3NjEwNDIwMjA1MDc5MTYxNjkgLT4gMS4wMDAwMDAwMTE2ODUzMTIwNDQzNzc0NjAzMDYxNjUyMDMgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMjcgZXhwIDAuMDAyMjU5MzgxODA5NDI1ODYzNjcyNzYxNjg4NjY5MzI4MCAtPiAxLjAwMjI2MTkzNjEzNTg3Njg5MzcwNzA5NDg0NTU0MzQ2MSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIyOCBleHAgMC4wMDI5Mzk4ODU3NjczNDc4OTEyMjQ5ODU2NTA5NjY3NTE3IC0+IDEuMDAyOTQ0MjExNDY5NDk1MDg2ODEzMDg3NjUxMjg3MDEyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjI5IGV4cCAwLjc1MTE0ODAwMjk5Mjg4MDI3NzUzNzYyNzA1NTc2MzY5NjMgLT4gMi4xMTk0MzE3MzQ1MTAzMjAxNjk4MDY5NzY1NjkzNjY3ODkgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMzAgZXhwIDE3NC45NDMxOTUyMTc2NzUwNjcxMTUwODg2NDIzMDQ4NDQ3ICAtPiA5LjQ4MTIyMjMwNTM3NDk1NTAxMTQ2NDYxOTQ2ODA0NDA1MUUrNzUgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMzEgZXhwIDAuMDAwMDgxMDYxMjQ1MTY5NDEzNjEyOTE5OTg5NTE2NDQyNCAtPiAxLjAwMDA4MTA2NDUzMDcyMDkyNDE4NjYxNTE0OTY0NjkyMCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIzMiBleHAgNTEuMDY4ODg5ODk3MDI2NjkyODgxODA5NDYyNzI0OTkwMzUgIC0+IDE1MDk4NjEzODg4NjE5MTY1MDczOTU5Ljg5ODk2MDE4NzQ5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjMzIGV4cCAwLjAwMDAwMDAwMDU5OTI4ODc1OTk0MzcwOTM2NTE0OTQ1MTAgLT4gMS4wMDAwMDAwMDA1OTkyODg3NjAxMjMyODI4NzQwODI3NTggSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMzQgZXhwIDcxNC44NTQ5MDQ2NzYxMDU0ODU2MzExMTA4ODI4OTAzOTcyICAtPiAyLjg2Nzc0NDU0NDg5MTA4MTExNzM4MTU5NTA4MDQ4MDc4NEUrMzEwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjM1IGV4cCAwLjAwMDAwMDAwMDQ0NjgyNDc4MDI5OTA2NDM2NDU2MDcxMTAgLT4gMS4wMDAwMDAwMDA0NDY4MjQ3ODAzOTg4OTA1NTY3MjAyMzMgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMzYgZXhwIDgzMS41ODE4MTUxNTg5ODkwMzY2MzIzNTUxNjcyMDQzNzA5ICAtPiAxLjQxNzA3NzQwOTE4MjYyNDk2OTQzNTkzODA2MjI2MTY1NUUrMzYxIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjM3IGV4cCAwLjAwMDAwMDAwMDY4NjgzMjM4MjUxNzk2MDU3NDcxMDgwNDQgLT4gMS4wMDAwMDAwMDA2ODY4MzIzODI3NTM4Mjk5MzU2MDI0NTQgSW5leGFjdCBSb3VuZGVkDQorZXhweDEyMzggZXhwIDAuMDAwMDAwMTMwNjc0MDI2NjQwODk3Njg0MDIyODQ0MDI1NSAtPiAxLjAwMDAwMDEzMDY3NDAzNTE3ODc0ODY3NTE4NzY0ODA5OCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTIzOSBleHAgMC4zMTgyMjEwNjA5MDIyMjY3NzA0ODExNTAyNDEyMzM1MTYzIC0+IDEuMzc0NjgwMTE1NjY3Nzk4MTg1NzU4OTI3MjQ3ODk0ODU5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMjQwIGV4cCAwLjAxNDc3NDEyMzQxNzkxMDQ0Mzc0NDAyNjQ2NDQyOTU1MDEgLT4gMS4wMTQ4ODM4MDAyMzk5NTA2ODI2MjgyNzc1MzQ4MzkyMjIgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gUmFuZG9tcyBQPTE2LCB3aXRoaW4gMC05OQ0KK1ByZWNpc2lvbjogMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitleHB4MTEwMSBleHAgOC40NzMwMTE1MjcwMTM3MjQgIC0+IDQ3ODMuOTAwNjQzOTY5MjQ2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTAyIGV4cCAwLjAwMDAwNTU3NTMwMjI3NjQgLT4gMS4wMDAwMDU1NzUzMTc4MTggSW5leGFjdCBSb3VuZGVkDQorZXhweDExMDMgZXhwIDAuMDAwMDMyMzQ3NDExNDQ4MiAtPiAxLjAwMDAzMjM0NzkzNDYzMSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEwNCBleHAgNjQuNTQzNzQxMzg1NDQxNjYgIC0+IDEuMDczOTY2NDc2MTczNTMxRSsyOCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEwNSBleHAgOTAuNDcyMDMyNDY0MTY1NjkgIC0+IDEuOTU2NjEwODg3MjUwNjQzRSszOSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEwNiBleHAgOS4yOTk5MzE1MzIzNDI3NTcgIC0+IDEwOTM3LjI3MDMzMzI1MjI3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTA3IGV4cCA4Ljc1OTY3ODQzNzg1MjIwMyAgLT4gNjM3Mi4wNjIyMzQ0OTUzODEgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMDggZXhwIDAuMDAwMDkzMTc1NTEyNzE3MiAtPiAxLjAwMDA5MzE3OTg1MzY5MCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEwOSBleHAgMC4wMDAwMDI4MTAxMTU4MzczIC0+IDEuMDAwMDAyODEwMTE5Nzg2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTEwIGV4cCAwLjAwMDAwMDgwMDgxMzA5MTkgLT4gMS4wMDAwMDA4MDA4MTM0MTMgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMTEgZXhwIDguMzM5NzcxNzIyMjk5MDQ5ICAtPiA0MTg3LjEzMzgwMzA4MTg3OCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTExMiBleHAgMC4wMDI2MTQwNDk3OTk1NDc0IC0+IDEuMDAyNjE3NDY5NDA2NzUwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTEzIGV4cCAwLjc0NzgwMzMzNTYyNjE3NzEgLT4gMi4xMTIzNTQ3ODE5NzU0MTggSW5leGFjdCBSb3VuZGVkDQorZXhweDExMTQgZXhwIDUxLjc3NjYzNzYxODI3OTY2ICAtPiAzLjA2NDEzNTgwMTEyMDM2NUUrMjIgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMTUgZXhwIDAuMTUyNDk4OTc4MzA2MTAxMiAtPiAxLjE2NDc0MTI3MjA4NDk1NSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTExNiBleHAgMC4wMDY2Mjk4Nzk4NjY5MjE5IC0+IDEuMDA2NjUxOTA2MTcwNzkxIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTE3IGV4cCA5Ljk1NTE0MTg2NTUzNDk2MCAgLT4gMjEwNjAuMjMzMzQyODcwMzggSW5leGFjdCBSb3VuZGVkDQorZXhweDExMTggZXhwIDkyLjM0NTAzMDU5MTk4NDgzICAtPiAxLjI3MzMxODk5MzQ4MTIyNkUrNDAgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMTkgZXhwIDAuMDAwMDcwOTM4ODY3NzM0NiAtPiAxLjAwMDA3MDk0MTM4Mzk1NiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEyMCBleHAgNzkuMTI4ODMwMzY0MzMyMDQgIC0+IDIuMzE4NTM4ODk5Mzg5MjQzRSszNCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEyMSBleHAgMC4wMDAwMDkwODgxNTQ4ODczIC0+IDEuMDAwMDA5MDg4MTk2MTg1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTIyIGV4cCAwLjA0MjQ4Mjg4MDk2MDM0MTEgLT4gMS4wNDMzOTgxOTQyNDU3MjAgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMjMgZXhwIDAuODAwOTAzNTg5MTQyNzQxNiAtPiAyLjIyNzU1MjgxMTkzMzMxMCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEyNCBleHAgOC44MjU3ODYxNjcyODMxMDIgIC0+IDY4MDcuNTQwNDU1Mjg5OTk1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTI1IGV4cCAxLjUzNTQ1NzI0OTc0NjI3NSAgLT4gNC42NDM0NDgyNjAxNDY4NDkgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMjYgZXhwIDY5LjAyMjU0MjU0MzU1ODAwICAtPiA5LjQ2NDc1NDUwMDY3MDY1M0UrMjkgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMjcgZXhwIDAuMDAwNzA1MDU1NDM2ODcxMyAtPiAxLjAwMDcwNTMwNDA0Njg4MCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEyOCBleHAgMC4wMDAwMDgxMjA2NTQ5NTA0IC0+IDEuMDAwMDA4MTIwNjg3OTIzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTI5IGV4cCAwLjYyMTc3NDg1NDY0MTEzNyAgLT4gMS44NjIyMzAyOTg1NTQ5MDMgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMzAgZXhwIDMuODQ3NjI5MDMxNDA0MzU0ICAtPiA0Ni44ODE3NzYxMzU2ODIwMyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEzMSBleHAgMjQuODEyNTAxODQ2OTc3MzIgIC0+IDU5Njk0MjY4NDU2LjE5OTY2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTMyIGV4cCA1LjEwNzU0NjUwMDUxNjA0NCAgLT4gMTY1LjI2NDM4MDk3NTU2NzAgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMzMgZXhwIDc5LjE3ODEwOTQzOTUxOTg2ICAtPiAyLjQzNTY1NjM3MjU0MTM2MEUrMzQgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMzQgZXhwIDAuMDA1MTM5NDY5NTY2NzAxNSAtPiAxLjAwNTE1MjY5OTI5NTMwMSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEzNSBleHAgNTcuNDQ1MDQ0ODg1MDE3MjUgIC0+IDguODcyOTA4NTY2OTI5Njg4RSsyNCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTEzNiBleHAgMC4wMDAwNTA4Mzg4OTY4MDM2IC0+IDEuMDAwMDUwODQwMTg5MTIyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTM3IGV4cCA2OS43MTMwOTkzMjE0ODk5NyAgLT4gMS44ODgwNTM3NDA2OTM1NDFFKzMwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMTM4IGV4cCAwLjAwNjQxODM0MTI5ODE1MDIgLT4gMS4wMDY0Mzg5ODI5ODg4MzUgSW5leGFjdCBSb3VuZGVkDQorZXhweDExMzkgZXhwIDkuMzQ2OTkxMjIwODE0Njc3ICAtPiAxMTQ2NC4yNzgwMjAzNTA4MiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTE0MCBleHAgMzMuMDkwODcxMzk5OTkxNTIgIC0+IDIzNTA2MjIyOTE2ODc2My41IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFJhbmRvbXMgUD03LCB3aXRoaW4gMC05DQorUHJlY2lzaW9uOiA3DQorbWF4RXhwb25lbnQ6IDk2DQorbWluRXhwb25lbnQ6IC05NQ0KK2V4cHgxMDAxIGV4cCAyLjM5NTQ0MSAgLT4gMTAuOTczMDQgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMDIgZXhwIDAuNjQwNjc3OSAtPiAxLjg5Nzc2NyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAwMyBleHAgMC41NjE4MjE4IC0+IDEuNzUzODY1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDA0IGV4cCAzLjA1NTEyMCAgLT4gMjEuMjIzNzMgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMDUgZXhwIDEuNTM2NzkyICAtPiA0LjY0OTY1MCBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAwNiBleHAgMC4wODAxNTkxIC0+IDEuMDgzNDU5IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDA3IGV4cCAwLjA5NjY4NzUgLT4gMS4xMDE1MTYgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMDggZXhwIDAuMDY0Njc2MSAtPiAxLjA2NjgxMyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAwOSBleHAgMC4wMDk1NjcwIC0+IDEuMDA5NjEzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDEwIGV4cCAyLjk1Njg1OSAgLT4gMTkuMjM3NDUgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMTEgZXhwIDcuNTA0Njc5ICAtPiAxODE2LjUyMiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAxMiBleHAgMC4wMDQ1MjU5IC0+IDEuMDA0NTM2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDEzIGV4cCAzLjgxMDA3MSAgLT4gNDUuMTUzNjQgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMTQgZXhwIDEuNTAyMzkwICAtPiA0LjQ5MjQxMyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAxNSBleHAgMC4wMzIxNTIzIC0+IDEuMDMyNjc1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDE2IGV4cCAwLjAwNTcyMTQgLT4gMS4wMDU3MzggSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMTcgZXhwIDkuODExNDQ1ICAtPiAxODI0MS4zMyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAxOCBleHAgMy4yNDUyNDkgIC0+IDI1LjY2ODEwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDE5IGV4cCAwLjMxODk3NDIgLT4gMS4zNzU3MTYgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMjAgZXhwIDAuODYyMTYxMCAtPiAyLjM2ODI3MyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAyMSBleHAgMC4wMTIyNTExIC0+IDEuMDEyMzI2IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDIyIGV4cCAyLjIwMjA4OCAgLT4gOS4wNDM4NzcgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMjMgZXhwIDguNzc4MjAzICAtPiA2NDkxLjIwMiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAyNCBleHAgMC4xODk2Mjc5IC0+IDEuMjA4ODAwIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDI1IGV4cCAwLjQ1MTA5NDcgLT4gMS41NzAwMzAgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMjYgZXhwIDAuMjc2NDEzICAtPiAxLjMxODM5MiBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAyNyBleHAgNC40OTAwNjcgIC0+IDg5LjEyNzQyIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDI4IGV4cCAwLjA0Mzk3ODYgLT4gMS4wNDQ5NjAgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMjkgZXhwIDAuODE2ODI0NSAtPiAyLjI2MzMwMSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAzMCBleHAgMC4wMzkxNjU4IC0+IDEuMDM5OTQzIEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDMxIGV4cCA5LjI2MTgxNiAgLT4gMTA1MjguMjQgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMzIgZXhwIDkuNjExMTg2ICAtPiAxNDkzMC44NyBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAzMyBleHAgOS4xMTgxMjUgIC0+IDkxMTkuMDg3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDM0IGV4cCA5LjQ2OTA4MyAgLT4gMTI5NTMuMDAgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMzUgZXhwIDAuMDQ5OTk4MyAtPiAxLjA1MTI2OSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAzNiBleHAgMC4wMDUwNzQ2IC0+IDEuMDA1MDg3IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDM3IGV4cCAwLjAwMTQ2OTYgLT4gMS4wMDE0NzEgSW5leGFjdCBSb3VuZGVkDQorZXhweDEwMzggZXhwIDkuMTM4NDk0ICAtPiA5MzA2LjczOSBJbmV4YWN0IFJvdW5kZWQNCitleHB4MTAzOSBleHAgMC4wMDY1NDM2IC0+IDEuMDA2NTY1IEluZXhhY3QgUm91bmRlZA0KK2V4cHgxMDQwIGV4cCAwLjcyODQ4MDMgLT4gMi4wNzE5MzAgSW5leGFjdCBSb3VuZGVkDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0CmluZGV4IGE4MTk3ZWYuLmIwYTgxY2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKQEAgLTEsMzQyNiArMSwzNDI2IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGZtYS5kZWNUZXN0IC0tIGRlY2ltYWwgZnVzZWQgbXVsdGlwbHkgYWRkICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotLS0gVGhlc2UgdGVzdHMgY29tcHJlc2UgdGhyZWUgcGFydHM6Ci0tLSAgIDEuIFNhbml0eSBjaGVja3MgYW5kIG90aGVyIHRocmVlLW9wZXJhbmQgdGVzdHMgKGVzcGVjaWFsbHkgdGhvc2UKLS0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpCi0tLSAgIDIuIE11bHRpcGx5IHRlc3RzICh0aGlyZCBvcGVyYW5kIGlzIG5ldXRyYWwgemVybyBbMEUrZW1heF0pCi0tLSAgIDMuIEFkZGl0aW9uIHRlc3RzIChmaXJzdCBvcGVyYW5kIGlzIDEpCi0tLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUKLS0tIGl0cyBvd24gZGVkaWNhdGVkIG11bHRpcGxpY2F0aW9uIG9yIGFkZGl0aW9uIHJvdXRpbmUocyksIGFuZCB0aGV5Ci0tLSBhbHNvIGluaGVyZW50bHkgY2hlY2sgdGhlIGxlZnQtdG8tcmlnaHQgcHJvcGVydGllcy4KLQotLS0gU2FuaXR5IGNoZWNrcwotZm1heDAwMDEgZm1hICAxICAgMSAgIDEgLT4gICAyCi1mbWF4MDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMKLWZtYXgwMDAzIGZtYSAgMiAgIDIgICAzIC0+ICAgNwotZm1heDAwMDQgZm1hICA5ICAgOSAgIDkgLT4gIDkwCi1mbWF4MDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDAKLWZtYXgwMDA2IGZtYSAtMSAgIDEgICAyIC0+ICAgMQotZm1heDAwMDcgZm1hIC0yICAgMiAgIDMgLT4gIC0xCi1mbWF4MDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzIKLWZtYXgwMDExIGZtYSAgMSAgLTEgICAxIC0+ICAgMAotZm1heDAwMTIgZm1hICAxICAtMSAgIDIgLT4gICAxCi1mbWF4MDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTEKLWZtYXgwMDE0IGZtYSAgOSAgLTkgICA5IC0+IC03MgotZm1heDAwMTUgZm1hICAxICAgMSAgLTEgLT4gICAwCi1mbWF4MDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTEKLWZtYXgwMDE3IGZtYSAgMiAgIDIgIC0zIC0+ICAgMQotZm1heDAwMTggZm1hICA5ICAgOSAgLTkgLT4gIDcyCi1mbWF4MDAxOSBmbWEgIDMgICA1ICAgNyAtPiAgMjIKLWZtYXgwMDI5IGZtYSAgMyAgLTUgICA3IC0+ICAtOAotCi0tLSBub24taW50ZWdlciBleGFjdHMKLWZtYTAxMDAgIGZtYSAgICAyNS4yICAgNjMuNiAgIC00MzggIC0+ICAxMTY0LjcyCi1mbWEwMTAxICBmbWEgICAwLjMwMSAgMC4zODAgICAgMzM0ICAtPiAgMzM0LjExNDM4MAotZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYKLWZtYTAxMDMgIGZtYSAgICA0LjIyICAwLjA3OSAgLTk0LjYgIC0+ICAtOTQuMjY2NjIKLWZtYTAxMDQgIGZtYSAgICAgOTAzICAwLjc5NyAgMC44ODcgIC0+ICA3MjAuNTc4Ci1mbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMwotZm1hMDEwNiAgZm1hICAgIDI4LjIgICAgNzI3ICAgNS40NSAgLT4gIDIwNTA2Ljg1Ci1mbWEwMTA3ICBmbWEgICAgICAgNCAgICA2MDUgICAgNjg4ICAtPiAgMzEwOAotZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1MwotZm1hMDEwOSAgZm1hICAgMC4xNjkgICAtMzQxICAgNS42MSAgLT4gIC01Mi4wMTkKLWZtYTAxMTAgIGZtYSAgIC03Mi4yICAgICAzMCAgLTUxLjIgIC0+ICAtMjIxNy4yCi1mbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzCi1mbWEwMTEyICBmbWEgICAgIDMxNyAgIDc3LjAgICAxOS4wICAtPiAgMjQ0MjguMAotZm1hMDExMyAgZm1hICAgICAgNDcgICA2LjU4ICAgMS42MiAgLT4gIDMxMC44OAotZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQKLWZtYTAxMTUgIGZtYSAgICA3Mi43ICAgIDI3NCAgIDEuNTYgIC0+ICAxOTkyMS4zNgotZm1hMDExNiAgZm1hICAgICAzMzUgICAgODQ3ICAgICA4MyAgLT4gIDI4MzgyOAotZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDIKLWZtYTAxMTggIGZtYSAgIC0zLjg3ICAgMy4wNiAgIDc4LjAgIC0+ICA2Ni4xNTc4Ci1mbWEwMTE5ICBmbWEgICAwLjc0MiAgICAxOTIgICAzNS42ICAtPiAgMTc4LjA2NAotZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExCi0KLS0tIGNhc2VzIHdoZXJlIHJlc3VsdCBpcyBkaWZmZXJlbnQgZnJvbSBzZXBhcmF0ZSBtdWx0aXBseSArIGFkZDsgZWFjaAotLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQKLS0tIFt0aGlzIGlzIGFib3V0IDIwJSBvZiBhbGwgc2ltaWxhciAgY2FzZXMgaW4gZ2VuZXJhbF0KLS0tICAgICAgICAgICAgICAgODg4NTY1MjkwICAgMTU1Ny45NjkzMCAgLTg2MDg3Ljc1NzggIC0+IDEuMzg0MzU3MzVFKzEyCi1mbWEwMjAxICBmbWEgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM2RSsxMiAgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAtODU1MTkzNDIuOSAgICA3MzUxNTU0MTkgICAgIDQyMDEwNDMxICAtPiAtNi4yODcwMDA4NEUrMTYKLWZtYTAyMDUgIGZtYSAgIC04NTUxOTM0Mi45ICAgIDczNTE1NTQxOSAgICAgNDIwMTA0MzEgIC0+IC02LjI4NzAwMDgzRSsxNiBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NjlFKzEwCi1mbWEwMjA4ICBmbWEgICAgICAtOTgwMjUuNSAgLTI5NDYwMy40NzIgICAxMDQxNDM0OC4yICAtPiAyLjg4ODkwNjcwRSsxMCAgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgNTk2NzYyNy4zOSAgIDgzNTI2NTQwLjYgICA0OTg0OTQuODEwICAtPiA0Ljk4NDU1MjcxRSsxNAotZm1hMDIxMSAgZm1hICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MkUrMTQgIEluZXhhY3QgUm91bmRlZAotLS0gICAgICAgICAgICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTgKLWZtYTAyMTYgIGZtYSAgICAgMzQ1Ni45NDMzICAgIDg3NC4zOTUxOCAgIDE5Nzg2Ni42MTUgIC0+ICAzMjIwNjAxLjE3ICAgICBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDUKLWZtYTAyMTggIGZtYSAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDYgICAgICBJbmV4YWN0IFJvdW5kZWQKLS0tICAgICAgICAgICAgICAgLTY4LjgxNTAwICAgNTk5NjExMTMuOSAgICAgLTg5ODg4NjIgIC0+IC00LjEzNTIxMjkxRSs5Ci1mbWEwMjE5ICBmbWEgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MkUrOSAgSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQwRSsxMQotZm1hMDIyNiAgZm1hICAgIDIxMjYzNDEuMDIgICA2MzQ5MS41MTUyICAgIDMwMjQyNzQ1NSAgLT4gMS4zNTMwNzA0MUUrMTEgIEluZXhhY3QgUm91bmRlZAotCi0KLS0tIEluZmluaXRlIGNvbWJpbmF0aW9ucwotZm1heDA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5Ci1mbWF4MDgwMSBmbWEgIEluZiAgIEluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MDgwMiBmbWEgIEluZiAgLUluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkKLWZtYXgwODA0IGZtYSAtSW5mICAgSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWZtYXgwODA1IGZtYSAtSW5mICAgSW5mICAtSW5mICAgIC0+IC1JbmZpbml0eQotZm1heDA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5Ci1mbWF4MDgwNyBmbWEgLUluZiAgLUluZiAgLUluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MDgwOCBmbWEgLUluZiAgIDAgICAgICAgMSAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MDgwOSBmbWEgLUluZiAgIDAgICAgIE5hTiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIFRyaXBsZSBOYU4gcHJvcGFnYXRpb24KLWZtYXgwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yCi1mbWF4MDkwMSBmbWEgIDAgICAgIE5hTjMgIE5hTjUgICAtPiAgTmFOMwotZm1heDA5MDIgZm1hICAwICAgICAwICAgICBOYU41ICAgLT4gIE5hTjUKLS0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZwotLS0gb3ZlcnJpZGRlbiBieSBhbiBzTmFOIGluIHRoaXJkIG9wZXJhbmQpCi1mbWF4MDkwMyBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgwOTA1IGZtYSAgMCAgICAgMCAgICAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MDkwNiBmbWEgIHNOYU4xIHNOYU4yIHNOYU4zICAtPiAgTmFOMSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgwOTA4IGZtYSAgTmFONyAgTmFONSAgc05hTjMgIC0+ICBOYU4zIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gc2FuaXR5IGNoZWNrcyAoYXMgYmFzZSwgYWJvdmUpCi1mbWF4MjAwMCBmbWEgMiAgICAgIDIgIDBFKzk5OTk5OSAgLT4gNAotZm1heDIwMDEgZm1hIDIgICAgICAzICAwRSs5OTk5OTkgIC0+IDYKLWZtYXgyMDAyIGZtYSA1ICAgICAgMSAgMEUrOTk5OTk5ICAtPiA1Ci1mbWF4MjAwMyBmbWEgNSAgICAgIDIgIDBFKzk5OTk5OSAgLT4gMTAKLWZtYXgyMDA0IGZtYSAxLjIwICAgMiAgMEUrOTk5OTk5ICAtPiAyLjQwCi1mbWF4MjAwNSBmbWEgMS4yMCAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMAotZm1heDIwMDYgZm1hIDEuMjAgIC0yICAwRSs5OTk5OTkgIC0+IC0yLjQwCi1mbWF4MjAwNyBmbWEgLTEuMjAgIDIgIDBFKzk5OTk5OSAgLT4gLTIuNDAKLWZtYXgyMDA4IGZtYSAtMS4yMCAgMCAgMEUrOTk5OTk5ICAtPiAwLjAwCi1mbWF4MjAwOSBmbWEgLTEuMjAgLTIgIDBFKzk5OTk5OSAgLT4gMi40MAotZm1heDIwMTAgZm1hIDUuMDkgNy4xICAwRSs5OTk5OTkgIC0+IDM2LjEzOQotZm1heDIwMTEgZm1hIDIuNSAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAKLWZtYXgyMDEyIGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMAotZm1heDIwMTMgZm1hIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5IFJvdW5kZWQKLWZtYXgyMDE0IGZtYSA5Ljk5OTk5OTk5OSA5Ljk5OTk5OTk5OSAgMEUrOTk5OTk5ICAtPiAxMDAuMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDIwMTUgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwCi1wcmVjaXNpb246IDYKLWZtYXgyMDE2IGZtYSAyLjUwICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wMAotZm1heDIwMTcgZm1hICA5Ljk5OTk5OSAgOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjAxOCBmbWEgIDkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyMDE5IGZtYSAtOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDIwMjAgZm1hIC05Ljk5OTk5OSAtOS45OTk5OTkgIDBFKzk5OTk5OSAgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZAotcHJlY2lzaW9uOiAxNQotZm1heDIwNTkgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzMAotZm1heDIxNjAgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDk3NjU2MjQ5OTk5OTAyMzQzNzUKLXByZWNpc2lvbjogOQotLS0tLS0KLQotLS0gemVyb3MsIGV0Yy4KLWZtYXgyMDIxIGZtYSAgMCAgICAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwCi1mbWF4MjAyMiBmbWEgIDAgICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDIwMjMgZm1hIC0wICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAKLWZtYXgyMDI0IGZtYSAtMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwCi1mbWF4MjAyNSBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAotZm1heDIwMjYgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDAKLWZtYXgyMDI3IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjAyOCBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMAotZm1heDIwMzAgZm1hICA1LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDAKLWZtYXgyMDMxIGZtYSAgMDAuMDAgIDAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCi1mbWF4MjAzMiBmbWEgIDAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWZtYXgyMDMzIGZtYSAgMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZm1heDIwMzQgZm1hIC01LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gLTAuMDA1MDAKLWZtYXgyMDM1IGZtYSAtMDAuMDAgIDAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCi1mbWF4MjAzNiBmbWEgLTAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWZtYXgyMDM3IGZtYSAtMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZm1heDIwMzggZm1hICA1LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gLTAuMDA1MDAKLWZtYXgyMDM5IGZtYSAgMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCi1mbWF4MjA0MCBmbWEgIDAwLjAwIC0wRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWZtYXgyMDQxIGZtYSAgMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotZm1heDIwNDIgZm1hIC01LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDAKLWZtYXgyMDQzIGZtYSAtMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwCi1mbWF4MjA0NCBmbWEgLTAwLjAwIC0wRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDAKLWZtYXgyMDQ1IGZtYSAtMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMAotCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoIG11bHRpcGx5Ci1mbWF4MjA1MCBmbWEgMS4yMCAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAzLjYwCi1mbWF4MjA1MSBmbWEgNyAgICAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAyMQotZm1heDIwNTIgZm1hIDAuOSAgMC44ICAgICAgIDBFKzk5OTk5OSAgLT4gMC43MgotZm1heDIwNTMgZm1hIDAuOSAgLTAgICAgICAgIDBFKzk5OTk5OSAgLT4gMC4wCi1mbWF4MjA1NCBmbWEgNjU0MzIxIDY1NDMyMSAgMEUrOTk5OTk5ICAtPiA0LjI4MTM1OTcxRSsxMSAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgyMDYwIGZtYSAxMjMuNDUgMWU3ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSs5Ci1mbWF4MjA2MSBmbWEgMTIzLjQ1IDFlOCAgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTAKLWZtYXgyMDYyIGZtYSAxMjMuNDUgMWUrOSAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxMQotZm1heDIwNjMgZm1hIDEyMy40NSAxZTEwICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEyCi1mbWF4MjA2NCBmbWEgMTIzLjQ1IDFlMTEgIDBFKzk5OTk5OSAgLT4gIDEuMjM0NUUrMTMKLWZtYXgyMDY1IGZtYSAxMjMuNDUgMWUxMiAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSsxNAotZm1heDIwNjYgZm1hIDEyMy40NSAxZTEzICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE1Ci0KLQotLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzCi1wcmVjaXNpb246IDkKLWZtYXgyMDgwIGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKLWZtYXgyMDgxIGZtYSAwLjEgMTIzNDU2Nzg5MSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyMDgyIGZtYSAwLjEgMTIzNDU2Nzg5MTIgICAgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjA4MyBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSsxMiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyMDg0IGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkKLXByZWNpc2lvbjogOAotZm1heDIwODUgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSs5IEluZXhhY3QgUm91bmRlZAotZm1heDIwODYgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNwotZm1heDIwODcgZm1hIDAuMSAxMjM0NTY3ODkxMiAgICAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1NjhFKzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjA4OCBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkCi0KLXByZWNpc2lvbjogOQotZm1heDIwOTAgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQotZm1heDIwOTEgZm1hIDEyMzQ1Njc4OTEgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotZm1heDIwOTIgZm1hIDEyMzQ1Njc4OTEyICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyMDkzIGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZAotZm1heDIwOTQgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQotcHJlY2lzaW9uOiA4Ci1mbWF4MjA5NSBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjA5NiBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzEyIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA3Ci1mbWF4MjA5NyBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyMDk4IGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY4RSsxMiBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2FycmllcwotbWF4ZXhwb25lbnQ6IDk5OTkKLW1pbmV4cG9uZW50OiAtOTk5OQotcHJlY2lzaW9uOiAzMwotZm1heDIxMDEgZm1hIDkgOSAgICAwRSs5OTk5OTkgIC0+IDgxCi1mbWF4MjEwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMAotZm1heDIxMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMAotZm1heDIxMDQgZm1hIDkgOTAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwCi1mbWF4MjEwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMAotZm1heDIxMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMAotZm1heDIxMDcgZm1hIDkgOTAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwCi1mbWF4MjEwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMAotZm1heDIxMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMAotZm1heDIxMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwCi1mbWF4MjExMSBmbWEgOSA5MDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMAotZm1heDIxMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMAotZm1heDIxMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwCi1mbWF4MjExNCBmbWEgOSA5MDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMAotZm1heDIxMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMAotZm1heDIxMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjExNyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMAotZm1heDIxMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMAotZm1heDIxMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjEyMCBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMAotZm1heDIxMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMAotZm1heDIxMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjEyMyBmbWEgOSA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMKLWZtYXgyMTMxIGZtYSAzIDMgICAgMEUrOTk5OTk5ICAtPiA5Ci1mbWF4MjEzMiBmbWEgMyAzMCAgICAwRSs5OTk5OTkgIC0+IDkwCi1mbWF4MjEzMyBmbWEgMyAzMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAKLWZtYXgyMTM0IGZtYSAzIDMwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwCi1mbWF4MjEzNSBmbWEgMyAzMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwCi1mbWF4MjEzNiBmbWEgMyAzMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAKLWZtYXgyMTM3IGZtYSAzIDMwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwCi1mbWF4MjEzOCBmbWEgMyAzMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwCi1mbWF4MjEzOSBmbWEgMyAzMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAKLWZtYXgyMTQwIGZtYSAzIDMwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwCi1mbWF4MjE0MSBmbWEgMyAzMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwCi1mbWF4MjE0MiBmbWEgMyAzMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAKLWZtYXgyMTQzIGZtYSAzIDMwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwCi1mbWF4MjE0NCBmbWEgMyAzMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwCi1mbWF4MjE0NSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAKLWZtYXgyMTQ2IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwCi1mbWF4MjE0NyBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjE0OCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAKLWZtYXgyMTQ5IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjE1MCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjE1MSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAKLWZtYXgyMTUyIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi1mbWF4MjE1MyBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0KLW1heGV4cG9uZW50OiA5OTk5OTkKLW1pbmV4cG9uZW50OiAtOTk5OTk5Ci1wcmVjaXNpb246IDkKLS0tIHRlc3Qgc29tZSBjYXNlcyB0aGF0IGFyZSBjbG9zZSB0byBleHBvbmVudCBvdmVyZmxvdy91bmRlcmZsb3cKLWZtYXgyMTcwIGZtYSAxIDllOTk5OTk5ICAgICAwRSs5OTk5OTkgIC0+IDlFKzk5OTk5OQotZm1heDIxNzEgZm1hIDEgOS45ZTk5OTk5OSAgIDBFKzk5OTk5OSAgLT4gOS45RSs5OTk5OTkKLWZtYXgyMTcyIGZtYSAxIDkuOTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQotZm1heDIxNzMgZm1hIDllOTk5OTk5ICAgIDEgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5Ci1mbWF4MjE3NCBmbWEgOS45ZTk5OTk5OSAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQotZm1heDIxNzYgZm1hIDkuOTllOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUrOTk5OTk5Ci1mbWF4MjE3NyBmbWEgMSA5Ljk5OTk5ZTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5RSs5OTk5OTkKLWZtYXgyMTc4IGZtYSA5Ljk5OTk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQotCi1mbWF4MjE4MCBmbWEgMC4xIDllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQotZm1heDIxODEgZm1hIDAuMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OAotZm1heDIxODIgZm1hIDAuMSA5OTllLTk5OTk5OCAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcKLQotZm1heDIxODMgZm1hIDAuMSA5ZS05OTk5OTggICAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQotZm1heDIxODQgZm1hIDAuMSA5OWUtOTk5OTk4ICAgICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk4Ci1mbWF4MjE4NSBmbWEgMC4xIDk5OWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk3Ci1mbWF4MjE4NiBmbWEgMC4xIDk5OWUtOTk5OTk3ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2Ci1mbWF4MjE4NyBmbWEgMC4xIDk5OTllLTk5OTk5NyAgIDBFKzk5OTk5OSAgLT4gOS45OTlFLTk5OTk5NQotZm1heDIxODggZm1hIDAuMSA5OTk5OWUtOTk5OTk3ICAwRSs5OTk5OTkgIC0+IDkuOTk5OUUtOTk5OTk0Ci0KLWZtYXgyMTkwIGZtYSAxIDllLTk5OTk5OCAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OAotZm1heDIxOTEgZm1hIDEgOTllLTk5OTk5OCAgIDBFKzk5OTk5OSAgLT4gOS45RS05OTk5OTcKLWZtYXgyMTkyIGZtYSAxIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5NgotZm1heDIxOTMgZm1hIDllLTk5OTk5OCAgIDEgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk4Ci1mbWF4MjE5NCBmbWEgOTllLTk5OTk5OCAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5NwotZm1heDIxOTUgZm1hIDk5OWUtOTk5OTk4IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2Ci0KLS0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQotcHJlY2lzaW9uOiAzMwotZm1heDIyNDYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MjgzMCBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzIKLWZtYXgyMjQ3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MyAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDMxCi1mbWF4MjI0OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTExOTkyOCAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzMAotZm1heDIyNDkgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMTk5MyAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjkKLWZtYXgyMjUwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OSAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDI4Ci1mbWF4MjI1MSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NTEyMCAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyNwotZm1heDIyNTIgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNjUxMiAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjYKLWZtYXgyMjUzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MSAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDI1Ci1mbWF4MjI1NCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOTE2NSAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyNAotZm1heDIyNTUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MTkxNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjMKLWZtYXgyMjU2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDIyCi1mbWF4MjI1NyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NjcxOSAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyMQotZm1heDIyNTggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM2OTY3MiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjAKLWZtYXgyMjU5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE5Ci1mbWF4MjI2MCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzMzY5NyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxOAotZm1heDIyNjEgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MzM3MCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTcKLWZtYXgyMjYyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE2Ci1mbWF4MjI2MyBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMTkzNCAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxNQotZm1heDIyNjQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMTE5MyAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTQKLWZtYXgyMjY1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOSAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDEzCi1mbWF4MjI2NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwODAxMiAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxMgotZm1heDIyNjcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MDgwMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTEKLWZtYXgyMjY4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDEwCi1mbWF4MjI2OSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMjkwOCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgOQotZm1heDIyNzAgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzLjI5MSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDgKLWZtYXgyMjcxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICA3Ci1mbWF4MjI3MiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxNDU0MzMuMyAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgNgotZm1heDIyNzMgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMTQ1NDMzICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgNQotZm1heDIyNzQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTQzRSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgNAotZm1heDIyNzUgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTRFKzUgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAzCi1mbWF4MjI3NiBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMgotZm1heDIyNzcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS41RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMQotZm1heDIyNzggZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMUUrNSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHRlc3Qgc29tZSBlZGdlIGNhc2VzIHdpdGggZXhhY3Qgcm91bmRpbmcKLW1heGV4cG9uZW50OiA5OTk5Ci1taW5leHBvbmVudDogLTk5OTkKLXByZWNpc2lvbjogOQotZm1heDIzMDEgZm1hIDkgOSAgICAwRSs5OTk5OTkgIC0+IDgxCi1mbWF4MjMwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMAotZm1heDIzMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMAotZm1heDIzMDQgZm1hIDkgOTAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwCi1mbWF4MjMwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMAotZm1heDIzMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMAotZm1heDIzMDcgZm1hIDkgOTAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwCi1mbWF4MjMwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMAotZm1heDIzMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrOSAgIFJvdW5kZWQKLWZtYXgyMzEwIGZtYSA5IDkwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMCAgUm91bmRlZAotZm1heDIzMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMSAgUm91bmRlZAotZm1heDIzMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTIgIFJvdW5kZWQKLWZtYXgyMzEzIGZtYSA5IDkwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMyAgUm91bmRlZAotZm1heDIzMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNCAgUm91bmRlZAotZm1heDIzMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTUgIFJvdW5kZWQKLWZtYXgyMzE2IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNiAgUm91bmRlZAotZm1heDIzMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNyAgUm91bmRlZAotZm1heDIzMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMTggIFJvdW5kZWQKLWZtYXgyMzE5IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxOSAgUm91bmRlZAotZm1heDIzMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMCAgUm91bmRlZAotZm1heDIzMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOC4xMDAwMDAwMEUrMjEgIFJvdW5kZWQKLWZtYXgyMzIyIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMiAgUm91bmRlZAotZm1heDIzMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMyAgUm91bmRlZAotCi0tLSBmYXN0cGF0aCBicmVha2VycwotcHJlY2lzaW9uOiAgIDI5Ci1mbWF4MjMzMCBmbWEgMS40OTE4MjQ2OTc2NDEyNzAzMTc4MjQ4NTI5NTI4MzcyMjQgMS4xMDUxNzA5MTgwNzU2NDc2MjQ4MTE3MDc4MjY0OTAyNDY1MTQ2NzU2Mjg2MTQ1NjI4ODM1MzczNDU3NDc2MDMgIDBFKzk5OTk5OSAgLT4gMS42NDg3MjEyNzA3MDAxMjgxNDY4NDg2NTA3ODc4IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDU1Ci1mbWF4MjMzMSBmbWEgMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAgMEUrOTk5OTk5ICAtPiAwLjgwMjUxODc5Nzk2MjQ3ODQ4Mjk4NDI1NTM4Mjk5MzQwNjk5NTU4OTA5ODM2OTY3NTIyMjgyOTkgSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gdHJ5emVyb3MgY2FzZXMKLXByZWNpc2lvbjogICA3Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDkyCi1taW5leHBvbmVudDogLTkyCi1mbWF4MjUwNCAgZm1hICAwRS02MCAxMDAwRS02MCAgIDBFKzk5OTk5OSAgLT4gMEUtOTggQ2xhbXBlZAotZm1heDI1MDUgIGZtYSAgMTAwRSs2MCAwRSs2MCAgICAwRSs5OTk5OTkgIC0+IDBFKzkyIENsYW1wZWQKLQotLS0gbWl4ZWQgd2l0aCB6ZXJvcwotbWF4ZXhwb25lbnQ6IDk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTkKLXByZWNpc2lvbjogOQotZm1heDI1NDEgZm1hICAwICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDIgZm1hIC0wICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDMgZm1hICAwICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDQgZm1hIC0wICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDUgZm1hIC0xICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDYgZm1hIC0xICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDcgZm1hICAxICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMAotZm1heDI1NDggZm1hICAxICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMAotCi1mbWF4MjU1MSBmbWEgIDAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTUyIGZtYSAtMC4wICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotZm1heDI1NTMgZm1hICAwLjAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCi1mbWF4MjU1NCBmbWEgLTAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTU1IGZtYSAtMS4wICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotZm1heDI1NTYgZm1hIC0xLjAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCi1mbWF4MjU1NyBmbWEgIDEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTU4IGZtYSAgMS4wICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotCi1mbWF4MjU2MSBmbWEgIDAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTYyIGZtYSAtMCAgICAtMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotZm1heDI1NjMgZm1hICAwICAgICAxLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCi1mbWF4MjU2NCBmbWEgLTAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTY1IGZtYSAtMSAgICAgMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotZm1heDI1NjYgZm1hIC0xICAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wCi1mbWF4MjU2NyBmbWEgIDEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAKLWZtYXgyNTY4IGZtYSAgMSAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMAotCi1mbWF4MjU3MSBmbWEgIDAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3MiBmbWEgLTAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3MyBmbWEgIDAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3NCBmbWEgLTAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3NSBmbWEgLTEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3NiBmbWEgLTEuMCAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3NyBmbWEgIDEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi1mbWF4MjU3OCBmbWEgIDEuMCAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwCi0KLQotLS0gU3BlY2lhbHMKLWZtYXgyNTgwIGZtYSAgSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5Ci1mbWF4MjU4MSBmbWEgIEluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQotZm1heDI1ODIgZm1hICBJbmYgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKLWZtYXgyNTgzIGZtYSAgSW5mICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNTg0IGZtYSAgSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNTg1IGZtYSAgSW5mICAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5Ci1mbWF4MjU4NiBmbWEgIEluZiAgIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQotZm1heDI1ODcgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKLWZtYXgyNTg4IGZtYSAtMTAwMCAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5Ci1mbWF4MjU4OSBmbWEgLUluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQotZm1heDI1OTAgZm1hIC0xICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKLWZtYXgyNTkxIGZtYSAtMCAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNTkyIGZtYSAgMCAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNTkzIGZtYSAgMSAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5Ci1mbWF4MjU5NCBmbWEgIDEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQotZm1heDI1OTUgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKLQotZm1heDI2MDAgZm1hIC1JbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkKLWZtYXgyNjAxIGZtYSAtSW5mICAtMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5Ci1mbWF4MjYwMiBmbWEgLUluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQotZm1heDI2MDMgZm1hIC1JbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2MDQgZm1hIC1JbmYgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2MDUgZm1hIC1JbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKLWZtYXgyNjA2IGZtYSAtSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5Ci1mbWF4MjYwNyBmbWEgLUluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQotZm1heDI2MDggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKLWZtYXgyNjA5IGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5Ci1mbWF4MjYxMCBmbWEgLTEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQotZm1heDI2MTEgZm1hIC0wICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2MTIgZm1hICAwICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2MTMgZm1hICAxICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkKLWZtYXgyNjE0IGZtYSAgMTAwMCAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5Ci1mbWF4MjYxNSBmbWEgIEluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQotCi1mbWF4MjYyMSBmbWEgIE5hTiAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjIyIGZtYSAgTmFOIC0xMDAwICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotZm1heDI2MjMgZm1hICBOYU4gLTEgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCi1mbWF4MjYyNCBmbWEgIE5hTiAtMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjI1IGZtYSAgTmFOICAwICAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotZm1heDI2MjYgZm1hICBOYU4gIDEgICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCi1mbWF4MjYyNyBmbWEgIE5hTiAgMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjI4IGZtYSAgTmFOICBJbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotZm1heDI2MjkgZm1hICBOYU4gIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCi1mbWF4MjYzMCBmbWEgLUluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjMxIGZtYSAtMTAwMCBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotZm1heDI2MzIgZm1hIC0xICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCi1mbWF4MjYzMyBmbWEgLTAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjM0IGZtYSAgMCAgICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotZm1heDI2MzUgZm1hICAxICAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAgTmFOCi1mbWF4MjYzNiBmbWEgIDEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4KLWZtYXgyNjM3IGZtYSAgSW5mICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTgotCi1mbWF4MjY0MSBmbWEgIHNOYU4gLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0MiBmbWEgIHNOYU4gLTEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0MyBmbWEgIHNOYU4gLTEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0NCBmbWEgIHNOYU4gLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0NSBmbWEgIHNOYU4gIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0NiBmbWEgIHNOYU4gIDEgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0NyBmbWEgIHNOYU4gIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0OCBmbWEgIHNOYU4gIE5hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY0OSBmbWEgIHNOYU4gc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1MCBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1MSBmbWEgLUluZiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1MiBmbWEgLTEwMDAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1MyBmbWEgLTEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1NCBmbWEgLTAgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1NSBmbWEgIDAgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1NiBmbWEgIDEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1NyBmbWEgIDEwMDAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1OCBmbWEgIEluZiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY1OSBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWZtYXgyNjYxIGZtYSAgTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjkKLWZtYXgyNjYyIGZtYSAgTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gIE5hTjgKLWZtYXgyNjYzIGZtYSAgTmFONzEgSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjcxCi1mbWF4MjY2NCBmbWEgIE5hTjYgIE5hTjUgICAwRSs5OTk5OTkgIC0+ICBOYU42Ci1mbWF4MjY2NSBmbWEgLUluZiAgIE5hTjQgICAwRSs5OTk5OTkgIC0+ICBOYU40Ci1mbWF4MjY2NiBmbWEgLTk5OSAgIE5hTjMzICAwRSs5OTk5OTkgIC0+ICBOYU4zMwotZm1heDI2NjcgZm1hICBJbmYgICBOYU4yICAgMEUrOTk5OTk5ICAtPiAgTmFOMgotCi1mbWF4MjY3MSBmbWEgIHNOYU45OSAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2NzIgZm1hICBzTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjczIGZtYSAgc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY3NCBmbWEgIHNOYU4xNiBzTmFOOTQgICAwRSs5OTk5OTkgIC0+ICBOYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2NzUgZm1hICBOYU45NSAgc05hTjkzICAgMEUrOTk5OTk5ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjc2IGZtYSAtSW5mICAgIHNOYU45MiAgIDBFKzk5OTk5OSAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY3NyBmbWEgIDA4OCAgICBzTmFOOTEgICAwRSs5OTk5OTkgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2NzggZm1hICBJbmYgICAgc05hTjkwICAgMEUrOTk5OTk5ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjc5IGZtYSAgTmFOICAgIHNOYU44OSAgIDBFKzk5OTk5OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWZtYXgyNjgxIGZtYSAtTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjkKLWZtYXgyNjgyIGZtYSAtTmFOOCAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTjgKLWZtYXgyNjgzIGZtYSAtTmFONzEgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjcxCi1mbWF4MjY4NCBmbWEgLU5hTjYgLU5hTjUgICAwRSs5OTk5OTkgIC0+IC1OYU42Ci1mbWF4MjY4NSBmbWEgLUluZiAgLU5hTjQgICAwRSs5OTk5OTkgIC0+IC1OYU40Ci1mbWF4MjY4NiBmbWEgLTk5OSAgLU5hTjMzICAwRSs5OTk5OTkgIC0+IC1OYU4zMwotZm1heDI2ODcgZm1hICBJbmYgIC1OYU4yICAgMEUrOTk5OTk5ICAtPiAtTmFOMgotCi1mbWF4MjY5MSBmbWEgLXNOYU45OSAtSW5mICAgICAwRSs5OTk5OTkgIC0+IC1OYU45OSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2OTIgZm1hIC1zTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjkzIGZtYSAtc05hTjk3ICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY5NCBmbWEgLXNOYU4xNiAtc05hTjk0ICAwRSs5OTk5OTkgIC0+IC1OYU4xNiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2OTUgZm1hIC1OYU45NSAgLXNOYU45MyAgMEUrOTk5OTk5ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjk2IGZtYSAtSW5mICAgIC1zTmFOOTIgIDBFKzk5OTk5OSAgLT4gLU5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjY5NyBmbWEgIDA4OCAgICAtc05hTjkxICAwRSs5OTk5OTkgIC0+IC1OYU45MSBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI2OTggZm1hICBJbmYgICAgLXNOYU45MCAgMEUrOTk5OTk5ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNjk5IGZtYSAtTmFOICAgIC1zTmFOODkgIDBFKzk5OTk5OSAgLT4gLU5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLWZtYXgyNzAxIGZtYSAtTmFOICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTgotZm1heDI3MDIgZm1hIC1OYU4gICA5OTkgICAgMEUrOTk5OTk5ICAtPiAtTmFOCi1mbWF4MjcwMyBmbWEgLU5hTiAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KLWZtYXgyNzA0IGZtYSAtTmFOICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgotZm1heDI3MDUgZm1hIC1JbmYgIC1OYU4wICAgMEUrOTk5OTk5ICAtPiAtTmFOCi1mbWF4MjcwNiBmbWEgLTk5OSAgLU5hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4KLWZtYXgyNzA3IGZtYSAgSW5mICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTgotCi1mbWF4MjcxMSBmbWEgLXNOYU4gICAtSW5mICAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNzEyIGZtYSAtc05hTiAgIC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI3MTMgZm1hIC1zTmFOMDAgIE5hTiAgICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjcxNCBmbWEgLXNOYU4gICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNzE1IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI3MTYgZm1hIC1JbmYgICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MjcxNyBmbWEgIDA4OCAgICAtc05hTiAgICAwRSs5OTk5OTkgIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLWZtYXgyNzE4IGZtYSAgSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDI3MTkgZm1hIC1OYU4gICAgLXNOYU4gICAgMEUrOTk5OTk5ICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cwotbWF4ZXhwb25lbnQ6IDk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTkKLWZtYXgyNzMwIGZtYSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCi1mbWF4MjczMSBmbWEgOUUrOTk5OTk5ICsxLjIzNDU2Nzg5MDEyMzQ1RS0wICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZm1heDI3MzIgZm1hICswLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKLWZtYXgyNzMzIGZtYSA5RS05OTk5OTkgKzAuMTAwICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCi1mbWF4MjczNSBmbWEgLTEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWZtYXgyNzM2IGZtYSA5RSs5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZm1heDI3MzcgZm1hIC0wLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsCi1mbWF4MjczOCBmbWEgOUUtOTk5OTk5IC0wLjEwMCAgMEUrOTk5OTk5ICAtPiAtOS4wMEUtMTAwMDAwMCBTdWJub3JtYWwKLQotLS0gc2lnbnMKLWZtYXgyNzUxIGZtYSAgMWUrNzc3Nzc3ICAxZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDI3NTIgZm1hICAxZSs3Nzc3NzcgLTFlKzQxMTExMSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4Mjc1MyBmbWEgLTFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyNzU0IGZtYSAtMWUrNzc3Nzc3IC0xZSs0MTExMTEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDI3NTUgZm1hICAxZS03Nzc3NzcgIDFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1mbWF4Mjc1NiBmbWEgIDFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWZtYXgyNzU3IGZtYSAtMWUtNzc3Nzc3ICAxZS00MTExMTEgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZm1heDI3NTggZm1hIC0xZS03Nzc3NzcgLTFlLTQxMTExMSAgMEUrOTk5OTk5ICAtPiAgMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLS0tICdzdWJub3JtYWwnIGJvdW5kYXJ5IChhbGwgaGFyZCB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgaW4gYmFzZSBhcml0aGVtdGljKQotcHJlY2lzaW9uOiA5Ci1mbWF4Mjc2MCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAxIFN1Ym5vcm1hbAotZm1heDI3NjEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDIgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMiBTdWJub3JtYWwKLWZtYXgyNzYyIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAzICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCi1mbWF4Mjc2MyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA0IFN1Ym5vcm1hbAotZm1heDI3NjQgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDUgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNSBTdWJub3JtYWwKLWZtYXgyNzY1IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA2ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDYgU3Vibm9ybWFsCi1mbWF4Mjc2NiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA3IFN1Ym5vcm1hbAotZm1heDI3NjcgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMEUtMTAwMDAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1mbWF4Mjc2OCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOSAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWZtYXgyNzY5IGZtYSAxZS02MDAwMDAgMWUtNDAwMDEwICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotLS0gW25vIGVxdWl2YWxlbnQgb2YgJ3N1Ym5vcm1hbCcgZm9yIG92ZXJmbG93XQotZm1heDI3NzAgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDEgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4Mjc3MSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyNzcyIGZtYSAxZSs2MDAwMDAgMWUrNDAwMDAzICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDI3NzMgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDQgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4Mjc3NCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyNzc1IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA2ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDI3NzYgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMDcgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4Mjc3NyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyNzc4IGZtYSAxZSs2MDAwMDAgMWUrNDAwMDA5ICAwRSs5OTk5OTkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDI3NzkgZm1hIDFlKzYwMDAwMCAxZSs0MDAwMTAgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tICdzdWJub3JtYWwnIHRlc3QgZWRnZSBjb25kaXRpb24gYXQgaGlnaGVyIHByZWNpc2lvbnMKLXByZWNpc2lvbjogOTkKLWZtYXgyNzgwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsCi1mbWF4Mjc4MSBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwOCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA4IFN1Ym5vcm1hbAotZm1heDI3ODIgZm1hIDFlLTYwMDAwMCAxZS00MDAwOTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDA5NyBTdWJub3JtYWwKLWZtYXgyNzgzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotcHJlY2lzaW9uOiA5OTkKLWZtYXgyNzg0IGZtYSAxZS02MDAwMDAgMWUtNDAwOTk3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDA5OTcgU3Vibm9ybWFsCi1mbWF4Mjc4NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5OCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwOTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gdGVzdCBzdWJub3JtYWxzIHJvdW5kaW5nCi1wcmVjaXNpb246ICAgNQotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotZm1heDI4MDEgZm1hICAxLjAwMDBFLTk5OSAgMSAgICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwRS05OTkKLWZtYXgyODAyIGZtYSAgMS4wMDBFLTk5OSAgIDFlLTEgICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAotZm1heDI4MDMgZm1hICAxLjAwRS05OTkgICAgMWUtMiAgIDBFKzk5OTk5OSAgLT4gMS4wMEUtMTAwMSAgU3Vibm9ybWFsCi1mbWF4MjgwNCBmbWEgIDEuMEUtOTk5ICAgICAxZS0zICAgMEUrOTk5OTk5ICAtPiAxLjBFLTEwMDIgICBTdWJub3JtYWwKLWZtYXgyODA1IGZtYSAgMS4wRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MjgwNiBmbWEgIDEuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZm1heDI4MDcgZm1hICAxLjVFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODA4IGZtYSAgMS43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjgwOSBmbWEgIDIuM0UtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZm1heDI4MTAgZm1hICAyLjVFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODExIGZtYSAgMi43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjgxMiBmbWEgIDEuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZm1heDI4MTMgZm1hICAxLjUwRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODE0IGZtYSAgMS41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjgxNSBmbWEgIDIuNDlFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZm1heDI4MTYgZm1hICAyLjUwRS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODE3IGZtYSAgMi41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgyODE4IGZtYSAgMUUtOTk5ICAgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbAotZm1heDI4MTkgZm1hICAzRS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZm1heDI4MjAgZm1hICA1RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZAotZm1heDI4MjEgZm1hICA3RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODIyIGZtYSAgOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjgyMyBmbWEgIDkuOUUtOTk5ICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MjgyNCBmbWEgIDFFLTk5OSAgICAgIC0xZS00ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBTdWJub3JtYWwKLWZtYXgyODI1IGZtYSAgM0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWZtYXgyODI2IGZtYSAtNUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWZtYXgyODI3IGZtYSAgN0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1mbWF4MjgyOCBmbWEgLTlFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotZm1heDI4MjkgZm1hICA5LjlFLTk5OSAgICAtMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgyODMwIGZtYSAgMy4wRS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotZm1heDI4MzEgZm1hICAxLjBFLTUwMSAgICAgMWUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbAotZm1heDI4MzIgZm1hICAyLjBFLTUwMSAgICAgMmUtNTAxICAwRSs5OTk5OTkgIC0+IDQuMEUtMTAwMiAgIFN1Ym5vcm1hbAotZm1heDI4MzMgZm1hICA0LjBFLTUwMSAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjBFLTEwMDEgIFN1Ym5vcm1hbAotZm1heDI4MzQgZm1hIDEwLjBFLTUwMSAgICAxMGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbAotZm1heDI4MzUgZm1hIDMwLjBFLTUwMSAgICAzMGUtNTAxICAwRSs5OTk5OTkgIC0+IDkuMDAwRS0xMDAwIFN1Ym5vcm1hbAotZm1heDI4MzYgZm1hIDQwLjBFLTUwMSAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwMEUtOTk5Ci0KLS0tIHNxdWFyZXMKLWZtYXgyODQwIGZtYSAgMUUtNTAyICAgICAgIDFlLTUwMiAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1mbWF4Mjg0MSBmbWEgIDFFLTUwMSAgICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMiAgICAgU3Vibm9ybWFsCi1mbWF4Mjg0MiBmbWEgIDJFLTUwMSAgICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNEUtMTAwMiAgICAgU3Vibm9ybWFsCi1mbWF4Mjg0MyBmbWEgIDRFLTUwMSAgICAgICA0ZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42RS0xMDAxICAgU3Vibm9ybWFsCi1mbWF4Mjg0NCBmbWEgMTBFLTUwMSAgICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMEUtMTAwMCAgU3Vibm9ybWFsCi1mbWF4Mjg0NSBmbWEgMzBFLTUwMSAgICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMCAgU3Vibm9ybWFsCi1mbWF4Mjg0NiBmbWEgNDBFLTUwMSAgICAgIDQwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS42MDBFLTk5OQotCi0tLSBjdWJlcwotZm1heDI4NTAgZm1hICAxRS02NzAgICAgIDFlLTMzNSAgMEUrOTk5OTk5ICAtPiAwRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLWZtYXgyODUxIGZtYSAgMUUtNjY4ICAgICAxZS0zMzQgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMiAgICBTdWJub3JtYWwKLWZtYXgyODUyIGZtYSAgNEUtNjY4ICAgICAyZS0zMzQgIDBFKzk5OTk5OSAgLT4gOEUtMTAwMiAgICBTdWJub3JtYWwKLWZtYXgyODUzIGZtYSAgOUUtNjY4ICAgICAzZS0zMzQgIDBFKzk5OTk5OSAgLT4gMi43RS0xMDAxICBTdWJub3JtYWwKLWZtYXgyODU0IGZtYSAxNkUtNjY4ICAgICA0ZS0zMzQgIDBFKzk5OTk5OSAgLT4gNi40RS0xMDAxICBTdWJub3JtYWwKLWZtYXgyODU1IGZtYSAyNUUtNjY4ICAgICA1ZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4yNUUtMTAwMCBTdWJub3JtYWwKLWZtYXgyODU2IGZtYSAxMEUtNjY4ICAgMTAwZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTk5OQotCi0tLSB0ZXN0IGRlcml2ZWQgZnJvbSByZXN1bHQgb2YgMC4wOTkgKiogOTk5IGF0IDE1IGRpZ2l0cyB3aXRoIHVubGltaXRlZCBleHBvbmVudAotcHJlY2lzaW9uOiAxOQotZm1heDI4NjAgZm1hICA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgNjYzNjg1MTU1Nzk5NDU3ODcxNkUtNTIwICAwRSs5OTk5OTkgIC0+IDQuNDA0Nzc5ODYwMjg1NTFFLTEwMDMgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gTG9uZyBvcGVyYW5kIG92ZXJmbG93IG1heSBiZSBhIGRpZmZlcmVudCBwYXRoCi1wcmVjaXNpb246IDMKLW1heEV4cG9uZW50OiA5OTk5OTkKLW1pbmV4cG9uZW50OiAtOTk5OTk5Ci1mbWF4Mjg3MCBmbWEgMSAgOS45OTlFKzk5OTk5OSAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWZtYXgyODcxIGZtYSAxIC05Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotZm1heDI4NzIgZm1hICAgIDkuOTk5RSs5OTk5OTkgMSAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkCi1mbWF4Mjg3MyBmbWEgICAtOS45OTlFKzk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLQotLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMKLXByZWNpc2lvbjogICA1Ci1tYXhleHBvbmVudDogNzkKLW1pbmV4cG9uZW50OiAtNzkKLWZtYXgyODgxIGZtYSAgMS4yMzQ3RS00MCAgMS4yMzQ3RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTI0RS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgyODgyIGZtYSAgMS4yMzRFLTQwICAxLjIzNEUtNDAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgyODgzIGZtYSAgMS4yM0UtNDAgICAxLjIzRS00MCAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTEzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgyODg0IGZtYSAgMS4yRS00MCAgICAxLjJFLTQwICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNDRFLTgwICAgU3Vibm9ybWFsCi1mbWF4Mjg4NSBmbWEgIDEuMkUtNDAgICAgMS4yRS00MSAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MSAgIFN1Ym5vcm1hbAotZm1heDI4ODYgZm1hICAxLjJFLTQwICAgIDEuMkUtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDI4ODcgZm1hICAxLjJFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS42RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDI4ODggZm1hICAxLjNFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS43RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDI4ODkgZm1hICAxLjNFLTQwICAgIDEuM0UtNDMgICAgICAgMEUrOTk5OTk5ICAtPiAgICAyRS04MyAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDI4OTAgZm1hICAxLjNFLTQxICAgIDEuM0UtNDMgICAgICAgMEUrOTk5OTk5ICAtPiAgICAwRS04MyAgICBDbGFtcGVkIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0KLWZtYXgyODkxIGZtYSAgMS4yMzQ1RS0zOSAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4Mjg5MiBmbWEgIDEuMjM0NTZFLTM5ICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZAotZm1heDI4OTMgZm1hICAxLjIzNDVFLTQwICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDI4OTQgZm1hICAxLjIzNDU2RS00MCAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDI4OTUgZm1hICAxLjIzNDVFLTQxICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDI4OTYgZm1hICAxLjIzNDU2RS00MSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotCi0tLSBOb3cgZXhwbG9yZSB0aGUgY2FzZSB3aGVyZSB3ZSBnZXQgYSBub3JtYWwgcmVzdWx0IHdpdGggVW5kZXJmbG93Ci1wcmVjaXNpb246ICAgMTYKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotCi1mbWF4MjkwMCBmbWEgIDAuMzAwMDAwMDAwMEUtMTkxIDAuMzAwMDAwMDAwMEUtMTkxICAwRSs5OTk5OTkgIC0+IDkuMDAwMDAwMDAwMDAwMDBFLTM4NCBTdWJub3JtYWwgUm91bmRlZAotZm1heDI5MDEgZm1hICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWZtYXgyOTAyIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5ICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTAwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MjkwMyBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTkgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5MDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZm1heDI5MDQgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWZtYXgyOTA1IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5ICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OUUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi0tLSBwcm92ZSBvcGVyYW5kcyBhcmUgZXhhY3QKLWZtYXgyOTA2IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4MwotZm1heDI5MDcgZm1hICAgICAgICAgICAgICAgICAgICAgICAxICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAwLjA5OTk5OTk5OTk5OTk5OTk5Ci0tLSB0aGUgbmV4dCByb3VuZHMgdG8gTm1pbgotZm1heDI5MDggZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MjkwOSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OTk5ICAgICAwRSs5OTk5OTkgIC0+IDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWZtYXgyOTEwIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZm1heDI5MTEgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQotcHJlY2lzaW9uOiAgIDM0Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0MwotZm1heDI5MjEgIGZtYSAxMzBFLTIgIDEyMEUtMiAgMEUrOTk5OTk5ICAtPiAxLjU2MDAKLWZtYXgyOTIyICBmbWEgMTMwRS0yICAxMkUtMSAgIDBFKzk5OTk5OSAgLT4gMS41NjAKLWZtYXgyOTIzICBmbWEgMTMwRS0yICAxRTAgICAgIDBFKzk5OTk5OSAgLT4gMS4zMAotCi0tLSBOdWxsIHRlc3RzCi1mbWF4Mjk5MCBmbWEgICMgMTAgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mjk5MSBmbWEgMTAgICMgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi0tLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10KLWZtYXgzMDAxIGZtYSAgMSAgIDEgICAgICAgMSAgICAgICAtPiAgMgotZm1heDMwMDIgZm1hICAxICAgMiAgICAgICAzICAgICAgIC0+ICA1Ci1mbWF4MzAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUKLWZtYXgzMDA0IGZtYSAgMSAgICc1JyAgICAgJy0zJyAgICAtPiAgMgotZm1heDMwMDUgZm1hICAxICAgJy01JyAgICAnLTMnICAgIC0+ICAtOAotZm1heDMwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41Ci1mbWF4MzAwNyBmbWEgIDEgICAnMC43JyAgICcwLjMnICAgLT4gIDEuMAotZm1heDMwMDggZm1hICAxICAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCi1mbWF4MzAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScKLWZtYXgzMDEwIGZtYSAgMSAgICcxLjIzNDU2Nzg5JyAgJzEuMDAwMDAwMTEnIC0+ICcyLjIzNDU2ODAwJwotCi1mbWF4MzAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0MCcgICcwLjU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMDEzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDk5JyAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDk5OScgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMScgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMTkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAxJyAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzAyMSBmbWEgIDEgICAwIDEgLT4gMQotZm1heDMwMjIgZm1hICAxICAgMSAxIC0+IDIKLWZtYXgzMDIzIGZtYSAgMSAgIDIgMSAtPiAzCi1mbWF4MzAyNCBmbWEgIDEgICAzIDEgLT4gNAotZm1heDMwMjUgZm1hICAxICAgNCAxIC0+IDUKLWZtYXgzMDI2IGZtYSAgMSAgIDUgMSAtPiA2Ci1mbWF4MzAyNyBmbWEgIDEgICA2IDEgLT4gNwotZm1heDMwMjggZm1hICAxICAgNyAxIC0+IDgKLWZtYXgzMDI5IGZtYSAgMSAgIDggMSAtPiA5Ci1mbWF4MzAzMCBmbWEgIDEgICA5IDEgLT4gMTAKLQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCi1mbWF4MzAzMSBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMCcgLT4gJzAuOTk5OCcKLWZtYXgzMDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5JwotZm1heDMwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCi1mbWF4MzAzNCBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMycgLT4gJzEuMDAwMScKLQotZm1heDMwMzUgZm1hICAxICAgJzcwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMzYgZm1hICAxICAgJzcwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMDM3IGZtYSAgMSAgICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMzggZm1hICAxICAgJzcwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwMzkgZm1hICAxICAgJzcwMDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCi0KLS0tIHN5bW1ldHJ5OgotZm1heDMwNDAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwNDEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMDQyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwNDQgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMS4wMDAwMDAwMUUrMTMnIEluZXhhY3QgUm91bmRlZAotZm1heDMwNDUgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkCi0KLS0tIHNhbWUsIGhpZ2hlciBwcmVjaXNpb24KLXByZWNpc2lvbjogMTUKLWZtYXgzMDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCi1mbWF4MzA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcKLWZtYXgzMDQ4IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcKLWZtYXgzMDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCi1mbWF4MzA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcKLWZtYXgzMDUxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcKLWZtYXgzMDUyIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAwJyAtPiAnMTAwMDAwMDcwMDAwMDAnCi0KLS0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgKLWZtYXgzMDUzIGZtYSAgMSAgICcxMicgJzcuMDAnIC0+ICcxOS4wMCcKLWZtYXgzMDU0IGZtYSAgMSAgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCi1mbWF4MzA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJwotZm1heDMwNTYgZm1hICAxICAgJzEuMycgJy0yLjA3JyAtPiAnLTAuNzcnCi1mbWF4MzA1NyBmbWEgIDEgICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JwotCi0tLSB6ZXJvIHByZXNlcnZhdGlvbgotcHJlY2lzaW9uOiA2Ci1mbWF4MzA2MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzA2MSBmbWEgIDEgICAxICcwLjAwMDEnIC0+ICcxLjAwMDEnCi1mbWF4MzA2MiBmbWEgIDEgICAxICcwLjAwMDAxJyAtPiAnMS4wMDAwMScKLWZtYXgzMDYzIGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzA2NCBmbWEgIDEgICAxICcwLjAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMDY1IGZtYSAgMSAgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQotZm1heDMwNzAgZm1hICAxICAgMSAgMCAgICAtPiAxCi1mbWF4MzA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDEKLWZtYXgzMDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wCi1mbWF4MzA3MyBmbWEgIDEgICAxIDAuMCAgIC0+IDEuMAotZm1heDMwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwCi1mbWF4MzA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDEKLWZtYXgzMDc2IGZtYSAgMSAgIDAuICAxICAgLT4gMQotZm1heDMwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjAKLWZtYXgzMDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wCi1mbWF4MzA3OSBmbWEgIDEgICAwLjAwIDEgIC0+IDEuMDAKLQotcHJlY2lzaW9uOiA5Ci0KLS0tIHNvbWUgY2FycmllcwotZm1heDMwODAgZm1hICAxICAgOTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OQotZm1heDMwODEgZm1hICAxICAgOTk5OTk5OTk5IDEgIC0+IDEuMDAwMDAwMDBFKzkgUm91bmRlZAotZm1heDMwODIgZm1hICAxICAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMAotZm1heDMwODMgZm1hICAxICAgICA5OTk5OTk5IDEgIC0+IDEwMDAwMDAwCi1mbWF4MzA4NCBmbWEgIDEgICAgICA5OTk5OTkgMSAgLT4gMTAwMDAwMAotZm1heDMwODUgZm1hICAxICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAotZm1heDMwODYgZm1hICAxICAgICAgICA5OTk5IDEgIC0+IDEwMDAwCi1mbWF4MzA4NyBmbWEgIDEgICAgICAgICA5OTkgMSAgLT4gMTAwMAotZm1heDMwODggZm1hICAxICAgICAgICAgIDk5IDEgIC0+IDEwMAotZm1heDMwODkgZm1hICAxICAgICAgICAgICA5IDEgIC0+IDEwCi0KLQotLS0gbW9yZSBMSFMgc3dhcHMKLWZtYXgzMDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JwotZm1heDMwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycKLWZtYXgzMDkyIGZtYSAgMSAgICctNTYyNjdFLTUnICAgIDAgLT4gICctMC41NjI2NycKLWZtYXgzMDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JwotZm1heDMwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnCi1mbWF4MzA5NSBmbWEgIDEgICAnLTU2MjY3RS0yJyAgICAwIC0+ICAnLTU2Mi42NycKLWZtYXgzMDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JwotZm1heDMwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycKLWZtYXgzMDk4IGZtYSAgMSAgICctNUUtMTAnICAgICAgIDAgLT4gICctNUUtMTAnCi1mbWF4MzA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCi1mbWF4MzEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1JwotZm1heDMxMDEgZm1hICAxICAgJy01RS01JyAgICAgICAgMCAtPiAgJy0wLjAwMDA1JwotZm1heDMxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCi1mbWF4MzEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScKLWZtYXgzMTA0IGZtYSAgMSAgICctNUUwJyAgICAgICAgIDAgLT4gICctNScKLWZtYXgzMTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCi1mbWF4MzEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcKLWZtYXgzMTA3IGZtYSAgMSAgICctNUU4JyAgICAgICAgIDAgLT4gICctNTAwMDAwMDAwJwotZm1heDMxMDggZm1hICAxICAgJy01RTknICAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSs5JyAgIFJvdW5kZWQKLWZtYXgzMTA5IGZtYSAgMSAgICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkCi1mbWF4MzExMCBmbWEgIDEgICAnLTVFMTEnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgUm91bmRlZAotZm1heDMxMTEgZm1hICAxICAgJy01RTEwMCcgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKLQotLS0gbW9yZSBSSFMgc3dhcHMKLWZtYXgzMTEzIGZtYSAgMSAgIDAgICctNTYyNjdFLTEwJyAtPiAgJy0wLjAwMDAwNTYyNjcnCi1mbWF4MzExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnCi1mbWF4MzExNiBmbWEgIDEgICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKLWZtYXgzMTE3IGZtYSAgMSAgIDAgICctNTYyNjdFLTQnICAtPiAgJy01LjYyNjcnCi1mbWF4MzExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3JwotZm1heDMxMjAgZm1hICAxICAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKLWZtYXgzMTIxIGZtYSAgMSAgIDAgICctNTYyNjdFLTEnICAtPiAgJy01NjI2LjcnCi1mbWF4MzEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnCi1mbWF4MzEyMyBmbWEgIDEgICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCi1mbWF4MzEyNCBmbWEgIDEgICAwICAnLTVFLTcnICAgICAgLT4gICctNUUtNycKLWZtYXgzMTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScKLWZtYXgzMTI2IGZtYSAgMSAgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JwotZm1heDMxMjcgZm1hICAxICAgMCAgJy01RS00JyAgICAgIC0+ICAnLTAuMDAwNScKLWZtYXgzMTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnCi1mbWF4MzEyOSBmbWEgIDEgICAwICAnLTVFMCcgICAgICAgLT4gICctNScKLWZtYXgzMTMwIGZtYSAgMSAgIDAgICctNUUxJyAgICAgICAtPiAgJy01MCcKLWZtYXgzMTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnCi1mbWF4MzEzMiBmbWEgIDEgICAwICAnLTVFOCcgICAgICAgLT4gICctNTAwMDAwMDAwJwotZm1heDMxMzMgZm1hICAxICAgMCAgJy01RTknICAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgIFJvdW5kZWQKLWZtYXgzMTM0IGZtYSAgMSAgIDAgICctNUUxMCcgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMCcgICBSb3VuZGVkCi1mbWF4MzEzNSBmbWEgIDEgICAwICAnLTVFMTEnICAgICAgLT4gICctNS4wMDAwMDAwMEUrMTEnICAgUm91bmRlZAotZm1heDMxMzYgZm1hICAxICAgMCAgJy01RTEwMCcgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKLQotLS0gcmVsYXRlZAotZm1heDMxMzcgZm1hICAxICAgIDEgICcwRS0xMicgICAgICAtPiAgJzEuMDAwMDAwMDAnICBSb3VuZGVkCi1mbWF4MzEzOCBmbWEgIDEgICAtMSAgJzBFLTEyJyAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQKLWZtYXgzMTM5IGZtYSAgMSAgICcwRS0xMicgMSAgICAgICAgLT4gICcxLjAwMDAwMDAwJyAgUm91bmRlZAotZm1heDMxNDAgZm1hICAxICAgJzBFLTEyJyAtMSAgICAgICAtPiAgJy0xLjAwMDAwMDAwJyBSb3VuZGVkCi1mbWF4MzE0MSBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMCAgIC0+ICAnMTAwMDAuMDAwMCcKLWZtYXgzMTQyIGZtYSAgMSAgIDFFKzQgICAgMC4wMDAwMCAgLT4gICcxMDAwMC4wMDAwJyAgUm91bmRlZAotZm1heDMxNDMgZm1hICAxICAgMC4wMDAgICAxRSs1ICAgICAtPiAgJzEwMDAwMC4wMDAnCi1mbWF4MzE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcgIFJvdW5kZWQKLQotLS0gW3NvbWUgb2YgdGhlIG5leHQgZ3JvdXAgYXJlIHJlYWxseSBjb25zdHJ1Y3RvciB0ZXN0c10KLWZtYXgzMTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcKLWZtYXgzMTQ3IGZtYSAgMSAgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCi1mbWF4MzE0OCBmbWEgIDEgICAgMCAgICAgICcwLjAwJyAgLT4gICcwLjAwJwotZm1heDMxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJwotZm1heDMxNTAgZm1hICAxICAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKLWZtYXgzMTUxIGZtYSAgMSAgICcwLjAwJyAgJzAwLjAnICAtPiAgJzAuMDAnCi1mbWF4MzE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnCi1mbWF4MzE1MyBmbWEgIDEgICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCi1mbWF4MzE1NCBmbWEgIDEgICAnMy4wJyAgICcuMycgICAgLT4gICczLjMnCi1mbWF4MzE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJwotZm1heDMxNTYgZm1hICAxICAgJzMnICAgICAnMycgICAgIC0+ICAnNicKLWZtYXgzMTU3IGZtYSAgMSAgICczJyAgICAgJyszJyAgICAtPiAgJzYnCi1mbWF4MzE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJwotZm1heDMxNTkgZm1hICAxICAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJwotZm1heDMxNjAgZm1hICAxICAgJzAuMDMnICAnLTAuMDMnIC0+ICAnMC4wMCcKLQotLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4KLXByZWNpc2lvbjogMTUKLWZtYXgzMTYxIGZtYSAgMSAgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5JwotZm1heDMxNjIgZm1hICAxICAgJzFFKzEyJyAgJzEuMTEnIC0+ICcxMDAwMDAwMDAwMDAxLjExJwotZm1heDMxNjMgZm1hICAxICAgJzEuMTEnICAnMUUrMTInIC0+ICcxMDAwMDAwMDAwMDAxLjExJwotZm1heDMxNjQgZm1hICAxICAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknCi1mbWF4MzE2NSBmbWEgIDEgICAnN0UrMTInICctMScgICAgLT4gJzY5OTk5OTk5OTk5OTknCi1mbWF4MzE2NiBmbWEgIDEgICAnN0UrMTInICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCi1mbWF4MzE2NyBmbWEgIDEgICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnCi1mbWF4MzE2OCBmbWEgIDEgICAnLTEnICAgICc3RSsxMicgLT4gJzY5OTk5OTk5OTk5OTknCi0KLS0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTcwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZAotZm1heDMxNzEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTczIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZm1heDMxNzQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTc2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZm1heDMxNzcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMCcgUm91bmRlZAotZm1heDMxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknCi1mbWF4MzE3OSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OCcKLWZtYXgzMTgwIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk3JwotZm1heDMxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnCi1mbWF4MzE4MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5NScKLWZtYXgzMTgzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk0JwotCi0tLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzCi1wcmVjaXNpb246IDkKLXJvdW5kaW5nOiBoYWxmX3VwCi1mbWF4MzIwMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCi1mbWF4MzIwMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyMDIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjAzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIwNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyMDUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjA2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIwNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyMDggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjA5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIxMCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjEyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIxMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjE1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIxNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCi1mbWF4MzIxNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMTggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjE5IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWZtYXgzMjIwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScKLWZtYXgzMjIxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIyMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyMjMgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjI0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIyNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyMjYgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjI3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIyOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjMwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIzMSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMzIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjMzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIzNCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMzUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OTk5OTkgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjM2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcKLWZtYXgzMjM3IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzIzOCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyMzkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1mbWF4MzI0MCBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZm1heDMyNDEgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjQyIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1mbWF4MzI1MCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwICAgICAgICAgICAgIC0+ICcxMjM0NTY3ODknCi1mbWF4MzI1MSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyNTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjUzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI1NCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyNTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjU2IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5ICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI1NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyNTggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjU5IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI2MCBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyNjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjYyIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNiAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI2MyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDMyNjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjY1IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOTk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI2NiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnCi1mbWF4MzI2NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDMyNjggZm1hICAxICAgJzEyMzQ1Njc4OScgMS4wMDAwMSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjY5IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGlucHV0IHByZXBhcmF0aW9uIHRlc3RzIChvcGVyYW5kcyBzaG91bGQgbm90IGJlIHJvdW5kZWQpCi1wcmVjaXNpb246IDMKLXJvdW5kaW5nOiBoYWxmX3VwCi0KLWZtYXgzMjcwIGZtYSAgMSAgICcxMjM0NTY3ODkwMDAwMCcgIDk5OTk5OTk5OTk5OTkgLT4gICcyLjIzRSsxMycgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI3MSBmbWEgIDEgICAgJzk5OTk5OTk5OTk5OTknIDEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzI3MiBmbWEgIDEgICAnMTJFKzMnICAnMzQ0NCcgICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyNzMgZm1hICAxICAgJzEyRSszJyAgJzM0NDYnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjc0IGZtYSAgMSAgICcxMkUrMycgICczNDQ5LjknIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI3NSBmbWEgIDEgICAnMTJFKzMnICAnMzQ1MC4wJyAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyNzYgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMScgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjc3IGZtYSAgMSAgICcxMkUrMycgICczNDU0JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI3OCBmbWEgIDEgICAnMTJFKzMnICAnMzQ1NicgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzI4MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyODIgZm1hICAxICAgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjgzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI4NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyODUgZm1hICAxICAgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjg2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI4NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl9kb3duCi1mbWF4MzI5MSBmbWEgIDEgICAnMzQ0NCcgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyOTIgZm1hICAxICAgJzM0NDYnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjkzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI5NCBmbWEgIDEgICAnMzQ1MC4wJyAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZAotZm1heDMyOTUgZm1hICAxICAgJzM0NTAuMScgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMjk2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzI5NyBmbWEgIDEgICAnMzQ1NicgICAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZAotCi0tLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMKLXJvdW5kaW5nOiBoYWxmX3VwCi1mbWF4MzMwMSBmbWEgIDEgICAgLTEgICAxICAgICAgLT4gICAwCi1mbWF4MzMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxCi1mbWF4MzMwMyBmbWEgIDEgICAgIDEgICAxICAgICAgLT4gICAyCi1mbWF4MzMwNCBmbWEgIDEgICAgMTIgICAxICAgICAgLT4gIDEzCi1mbWF4MzMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5Ci1mbWF4MzMwNiBmbWEgIDEgICAgOTkgICAxICAgICAgLT4gMTAwCi1mbWF4MzMwNyBmbWEgIDEgICAxMDAgICAxICAgICAgLT4gMTAxCi1mbWF4MzMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyCi1mbWF4MzMwOSBmbWEgIDEgICAgLTEgIC0xICAgICAgLT4gIC0yCi1mbWF4MzMxMCBmbWEgIDEgICAgIDAgIC0xICAgICAgLT4gIC0xCi1mbWF4MzMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwCi1mbWF4MzMxMiBmbWEgIDEgICAgMTIgIC0xICAgICAgLT4gIDExCi1mbWF4MzMxMyBmbWEgIDEgICAgOTggIC0xICAgICAgLT4gIDk3Ci1mbWF4MzMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4Ci1mbWF4MzMxNSBmbWEgIDEgICAxMDAgIC0xICAgICAgLT4gIDk5Ci1mbWF4MzMxNiBmbWEgIDEgICAxMDEgIC0xICAgICAgLT4gMTAwCi0KLWZtYXgzMzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCi1mbWF4MzMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQotZm1heDMzMjMgZm1hICAxICAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDIKLWZtYXgzMzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCi1mbWF4MzMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQotZm1heDMzMjYgZm1hICAxICAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDAKLWZtYXgzMzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCi1mbWF4MzMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMgotZm1heDMzMjkgZm1hICAxICAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDIKLWZtYXgzMzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCi1mbWF4MzMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMAotZm1heDMzMzIgZm1hICAxICAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTEKLWZtYXgzMzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3Ci1mbWF4MzMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OAotZm1heDMzMzUgZm1hICAxICAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkKLWZtYXgzMzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCi0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50Ci1wcmVjaXNpb246IDkKLWZtYXgzMzQwIGZtYSAgMSAgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDAKLWZtYXgzMzQxIGZtYSAgMSAgIDFFKzggICAgMCAgICAtPiAgICAxMDAwMDAwMDAKLWZtYXgzMzQyIGZtYSAgMSAgIDFFKzkgICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzkgICBSb3VuZGVkCi1mbWF4MzM0MyBmbWEgIDEgICAxRSsxMCAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgUm91bmRlZAotLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLgotZm1heDMzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQotZm1heDMzNDUgZm1hICAxICAgMUUrOCAgICAxICAgIC0+ICAgIDEwMDAwMDAwMQotZm1heDMzNDYgZm1hICAxICAgMUUrOSAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIEluZXhhY3QgUm91bmRlZAotZm1heDMzNDcgZm1hICAxICAgMUUrMTAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIEluZXhhY3QgUm91bmRlZAotZm1heDMzNDggZm1hICAxICAgMUUrMyAgICA3ICAgIC0+ICAgICAgICAgMTAwNwotZm1heDMzNDkgZm1hICAxICAgMUUrOCAgICA3ICAgIC0+ICAgIDEwMDAwMDAwNwotZm1heDMzNTAgZm1hICAxICAgMUUrOSAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMUUrOSAgIEluZXhhY3QgUm91bmRlZAotZm1heDMzNTEgZm1hICAxICAgMUUrMTAgICA3ICAgIC0+ICAgMS4wMDAwMDAwMEUrMTAgIEluZXhhY3QgUm91bmRlZAotCi0tLSB0cnl6ZXJvcyBjYXNlcwotcHJlY2lzaW9uOiAgIDcKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogOTIKLW1pbmV4cG9uZW50OiAtOTIKLWZtYXgzMzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1Ci1mbWF4MzM2MiAgZm1hICAxICAgMTAwMDBFKzEgMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkCi1mbWF4MzM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzM2NCAgZm1hICAxICAgOS45OTk5OTlFKzkyIC05Ljk5OTk5OUUrOTIgLT4gMEUrODYKLQotLS0gYSBjdXJpb3NpdHkgZnJvbSBKU1IgMTMgdGVzdGluZwotcm91bmRpbmc6ICAgIGhhbGZfZG93bgotcHJlY2lzaW9uOiAgIDEwCi1mbWF4MzM3MCBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxMDAwODE1MTEKLXByZWNpc2lvbjogICAgICA2Ci1mbWF4MzM3MSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdAotcm91bmRpbmc6ICAgIGhhbGZfdXAKLXByZWNpc2lvbjogICAxMAotZm1heDMzNzIgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCi1wcmVjaXNpb246ICAgICAgNgotZm1heDMzNzMgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLXByZWNpc2lvbjogICAxMAotZm1heDMzNzQgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExCi1wcmVjaXNpb246ICAgICAgNgotZm1heDMzNzUgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QKLQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCi1wcmVjaXNpb246IDkKLW1heGV4cG9uZW50OiA5OTk5OTkKLW1pbmV4cG9uZW50OiAtOTk5OTk5Ci1mbWF4MzQwMCBmbWEgIDEgICAgIDEgICA3N2UtNyAgICAgICAtPiAgMS4wMDAwMDc3Ci1mbWF4MzQwMSBmbWEgIDEgICAgIDEgICA3N2UtOCAgICAgICAtPiAgMS4wMDAwMDA3NwotZm1heDM0MDIgZm1hICAxICAgICAxICAgNzdlLTkgICAgICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQwMyBmbWEgIDEgICAgIDEgICA3N2UtMTAgICAgICAtPiAgMS4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xMSAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0MDUgZm1hICAxICAgICAxICAgNzdlLTEyICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQwNiBmbWEgIDEgICAgIDEgICA3N2UtOTk5ICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDA3IGZtYSAgMSAgICAgMSAgIDc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzQxMCBmbWEgIDEgICAgMTAgICA3N2UtNyAgICAgICAtPiAgMTAuMDAwMDA3NwotZm1heDM0MTEgZm1hICAxICAgIDEwICAgNzdlLTggICAgICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQxMiBmbWEgIDEgICAgMTAgICA3N2UtOSAgICAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDEzIGZtYSAgMSAgICAxMCAgIDc3ZS0xMCAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0MTQgZm1hICAxICAgIDEwICAgNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQxNSBmbWEgIDEgICAgMTAgICA3N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDE2IGZtYSAgMSAgICAxMCAgIDc3ZS05OTkgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0MTcgZm1hICAxICAgIDEwICAgNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNDIwIGZtYSAgMSAgICA3N2UtNyAgICAgICAgMSAgIC0+ICAxLjAwMDAwNzcKLWZtYXgzNDIxIGZtYSAgMSAgICA3N2UtOCAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDc3Ci1mbWF4MzQyMiBmbWEgIDEgICAgNzdlLTkgICAgICAgIDEgICAtPiAgMS4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDIzIGZtYSAgMSAgICA3N2UtMTAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM0MjQgZm1hICAxICAgIDc3ZS0xMSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQyNSBmbWEgIDEgICAgNzdlLTEyICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDI2IGZtYSAgMSAgICA3N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0MjcgZm1hICAxICAgIDc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNDMwIGZtYSAgMSAgICA3N2UtNyAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDc3Ci1mbWF4MzQzMSBmbWEgIDEgICAgNzdlLTggICAgICAgMTAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDMyIGZtYSAgMSAgICA3N2UtOSAgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM0MzMgZm1hICAxICAgIDc3ZS0xMCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQzNCBmbWEgIDEgICAgNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDM1IGZtYSAgMSAgICA3N2UtMTIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0MzYgZm1hICAxICAgIDc3ZS05OTkgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQzNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbmVnYXRpdmUgdWxwcwotZm1heDM0NDAgZm1hICAxICAgICAxICAgLTc3ZS03ICAgICAgIC0+ICAwLjk5OTk5MjMKLWZtYXgzNDQxIGZtYSAgMSAgICAgMSAgIC03N2UtOCAgICAgICAtPiAgMC45OTk5OTkyMwotZm1heDM0NDIgZm1hICAxICAgICAxICAgLTc3ZS05ICAgICAgIC0+ICAwLjk5OTk5OTkyMwotZm1heDM0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xMCAgICAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDQ0IGZtYSAgMSAgICAgMSAgIC03N2UtMTEgICAgICAtPiAgMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ0NSBmbWEgIDEgICAgIDEgICAtNzdlLTEyICAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ0NyBmbWEgIDEgICAgIDEgICAtNzdlLTk5OTk5OSAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNDUwIGZtYSAgMSAgICAxMCAgIC03N2UtNyAgICAgICAtPiAgIDkuOTk5OTkyMwotZm1heDM0NTEgZm1hICAxICAgIDEwICAgLTc3ZS04ICAgICAgIC0+ICAgOS45OTk5OTkyMwotZm1heDM0NTIgZm1hICAxICAgIDEwICAgLTc3ZS05ICAgICAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTAgICAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ1NyBmbWEgIDEgICAgMTAgICAtNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNDYwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgIDEgICAtPiAgMC45OTk5OTIzCi1mbWF4MzQ2MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgICAxICAgLT4gIDAuOTk5OTk5MjMKLWZtYXgzNDYyIGZtYSAgMSAgICAtNzdlLTkgICAgICAgIDEgICAtPiAgMC45OTk5OTk5MjMKLWZtYXgzNDYzIGZtYSAgMSAgICAtNzdlLTEwICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ2NCBmbWEgIDEgICAgLTc3ZS0xMSAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM0NjUgZm1hICAxICAgIC03N2UtMTIgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0NjYgZm1hICAxICAgIC03N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0NjcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzQ3MCBmbWEgIDEgICAgLTc3ZS03ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5MjMKLWZtYXgzNDcxIGZtYSAgMSAgICAtNzdlLTggICAgICAgMTAgICAtPiAgIDkuOTk5OTk5MjMKLWZtYXgzNDcyIGZtYSAgMSAgICAtNzdlLTkgICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ3MyBmbWEgIDEgICAgLTc3ZS0xMCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM0NzQgZm1hICAxICAgIC03N2UtMTEgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0NzUgZm1hICAxICAgIC03N2UtMTIgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0NzYgZm1hICAxICAgIC03N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0NzcgZm1hICAxICAgIC03N2UtOTk5OTk5ICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi0tLSBuZWdhdGl2ZSB1bHBzCi1mbWF4MzQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTcgICAgICAgLT4gIC0wLjk5OTk5MjMKLWZtYXgzNDgxIGZtYSAgMSAgICAtMSAgICA3N2UtOCAgICAgICAtPiAgLTAuOTk5OTk5MjMKLWZtYXgzNDgyIGZtYSAgMSAgICAtMSAgICA3N2UtOSAgICAgICAtPiAgLTAuOTk5OTk5OTIzCi1mbWF4MzQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTEwICAgICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDg0IGZtYSAgMSAgICAtMSAgICA3N2UtMTEgICAgICAtPiAgLTAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xMiAgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5ICAgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ4NyBmbWEgIDEgICAgLTEgICAgNzdlLTk5OTk5OSAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzQ5MCBmbWEgIDEgICAtMTAgICAgNzdlLTcgICAgICAgLT4gICAtOS45OTk5OTIzCi1mbWF4MzQ5MSBmbWEgIDEgICAtMTAgICAgNzdlLTggICAgICAgLT4gICAtOS45OTk5OTkyMwotZm1heDM0OTIgZm1hICAxICAgLTEwICAgIDc3ZS05ICAgICAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ5MyBmbWEgIDEgICAtMTAgICAgNzdlLTEwICAgICAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDk0IGZtYSAgMSAgIC0xMCAgICA3N2UtMTEgICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTEyICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM0OTYgZm1hICAxICAgLTEwICAgIDc3ZS05OTkgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNDk3IGZtYSAgMSAgIC0xMCAgICA3N2UtOTk5OTk5ICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNTAwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEgICAtPiAgLTAuOTk5OTkyMwotZm1heDM1MDEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMSAgIC0+ICAtMC45OTk5OTkyMwotZm1heDM1MDIgZm1hICAxICAgICA3N2UtOSAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5MjMKLWZtYXgzNTAzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZm1heDM1MDQgZm1hICAxICAgICA3N2UtMTEgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzUwNSBmbWEgIDEgICAgIDc3ZS0xMiAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM1MDYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNTA3IGZtYSAgMSAgICAgNzdlLTk5OTk5OSAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNTEwIGZtYSAgMSAgICAgNzdlLTcgICAgICAgLTEwICAtPiAgIC05Ljk5OTk5MjMKLWZtYXgzNTExIGZtYSAgMSAgICAgNzdlLTggICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTIzCi1mbWF4MzUxMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNTEzIGZtYSAgMSAgICAgNzdlLTEwICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM1MTQgZm1hICAxICAgICA3N2UtMTEgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNTE1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzUxNiBmbWEgIDEgICAgIDc3ZS05OTkgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM1MTcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotCi0tLSBsb25nIG9wZXJhbmRzCi1tYXhleHBvbmVudDogOTk5Ci1taW5leHBvbmVudDogLTk5OQotcHJlY2lzaW9uOiA5Ci1mbWF4MzUyMSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQKLWZtYXgzNTIyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAotZm1heDM1MjMgZm1hICAxICAgMTIzNDU2NzgwMCAgMCAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKLWZtYXgzNTI0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCi1mbWF4MzUyNSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAotZm1heDM1MjYgZm1hICAxICAgMCAxMjM0NTY3ODkwICAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQKLWZtYXgzNTI3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNTI4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNTI5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxIDAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzUzMCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAotZm1heDM1MzEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAotZm1heDM1MzIgZm1hICAxICAgMCAxMjM0NTY3ODk2ICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAotCi1wcmVjaXNpb246IDE1Ci0tLSBzdGlsbCBjaGVja2luZwotZm1heDM1NDEgZm1hICAxICAgMTIzNDU2NzgwMDAgMCAtPiAxMjM0NTY3ODAwMAotZm1heDM1NDIgZm1hICAxICAgMCAxMjM0NTY3ODAwMCAtPiAxMjM0NTY3ODAwMAotZm1heDM1NDMgZm1hICAxICAgMTIzNDU2NzgwMCAgMCAtPiAxMjM0NTY3ODAwCi1mbWF4MzU0NCBmbWEgIDEgICAwIDEyMzQ1Njc4MDAgIC0+IDEyMzQ1Njc4MDAKLWZtYXgzNTQ1IGZtYSAgMSAgIDEyMzQ1Njc4OTAgIDAgLT4gMTIzNDU2Nzg5MAotZm1heDM1NDYgZm1hICAxICAgMCAxMjM0NTY3ODkwICAtPiAxMjM0NTY3ODkwCi1mbWF4MzU0NyBmbWEgIDEgICAxMjM0NTY3ODkxICAwIC0+IDEyMzQ1Njc4OTEKLWZtYXgzNTQ4IGZtYSAgMSAgIDAgMTIzNDU2Nzg5MSAgLT4gMTIzNDU2Nzg5MQotZm1heDM1NDkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxMjM0NTY3ODkwMQotZm1heDM1NTAgZm1hICAxICAgMCAxMjM0NTY3ODkwMSAtPiAxMjM0NTY3ODkwMQotZm1heDM1NTEgZm1hICAxICAgMTIzNDU2Nzg5NiAgMCAtPiAxMjM0NTY3ODk2Ci1mbWF4MzU1MiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEyMzQ1Njc4OTYKLQotLS0gdmVyaWZ5IGEgcXVlcnkKLXByZWNpc2lvbjogICAgMTYKLW1heEV4cG9uZW50OiArMzk0Ci1taW5FeHBvbmVudDogLTM5Mwotcm91bmRpbmc6ICAgICBkb3duCi1mbWF4MzU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM1NjIgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszODQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCBSb3VuZGVkCi0tLSBhbmQgdXNpbmcgZGVjaW1hbDY0IGJvdW5kcy4uLgotcHJlY2lzaW9uOiAgICAxNgotbWF4RXhwb25lbnQ6ICszODQKLW1pbkV4cG9uZW50OiAtMzgzCi1yb3VuZGluZzogICAgIGRvd24KLWZtYXgzNTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzU2NCBmbWEgIDEgICAgICAgIDAgOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IFJvdW5kZWQKLQotCi0tLSBzb21lIG1vcmUgcmVzaWR1ZSBlZmZlY3RzIHdpdGggZXh0cmVtZSByb3VuZGluZwotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiBoYWxmX3VwCi1mbWF4MzYwMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWZtYXgzNjAyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGhhbGZfZG93bgotZm1heDM2MDMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogZmxvb3IKLWZtYXgzNjA0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGNlaWxpbmcKLWZtYXgzNjA1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IHVwCi1mbWF4MzYwNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBkb3duCi1mbWF4MzYwNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfdXAKLWZtYXgzNjExIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGhhbGZfZXZlbgotZm1heDM2MTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogaGFsZl9kb3duCi1mbWF4MzYxMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBmbG9vcgotZm1heDM2MTQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogY2VpbGluZwotZm1heDM2MTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogdXAKLWZtYXgzNjE2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGRvd24KLWZtYXgzNjE3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl91cAotZm1heDM2MjEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogaGFsZl9ldmVuCi1mbWF4MzYyMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBoYWxmX2Rvd24KLWZtYXgzNjIzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGZsb29yCi1mbWF4MzYyNCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBjZWlsaW5nCi1mbWF4MzYyNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiB1cAotZm1heDM2MjYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogZG93bgotZm1heDM2MjcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX3VwCi1mbWF4MzYzMSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWZtYXgzNjMyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGhhbGZfZG93bgotZm1heDM2MzMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogZmxvb3IKLWZtYXgzNjM0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGNlaWxpbmcKLWZtYXgzNjM1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IHVwCi1mbWF4MzYzNiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBkb3duCi1mbWF4MzYzNyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6IGhhbGZfdXAKLWZtYXgzNjQxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGhhbGZfZXZlbgotZm1heDM2NDIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogaGFsZl9kb3duCi1mbWF4MzY0MyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBmbG9vcgotZm1heDM2NDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogY2VpbGluZwotZm1heDM2NDUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogdXAKLWZtYXgzNjQ2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGRvd24KLWZtYXgzNjQ3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogaGFsZl91cAotZm1heDM2NTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogaGFsZl9ldmVuCi1mbWF4MzY1MiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBoYWxmX2Rvd24KLWZtYXgzNjUzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZAotcm91bmRpbmc6IGZsb29yCi1mbWF4MzY1NCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiBjZWlsaW5nCi1mbWF4MzY1NSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQKLXJvdW5kaW5nOiB1cAotZm1heDM2NTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkCi1yb3VuZGluZzogZG93bgotZm1heDM2NTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkCi0KLS0tIGxvbmcgb3BlcmFuZCB0cmlhbmdsZQotcm91bmRpbmc6IGhhbGZfdXAKLXByZWNpc2lvbjogIDM3Ci1mbWF4MzY2MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1MzgKLXByZWNpc2lvbjogIDM2Ci1mbWF4MzY2MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1NCAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAzNQotZm1heDM2NjIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NSAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMzQKLWZtYXgzNjYzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNDgzNSAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDMzCi1mbWF4MzY2NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MyAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAzMgotZm1heDM2NjUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0OCAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMzEKLWZtYXgzNjY2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNzExNSAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDMwCi1mbWF4MzY2NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMSAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAyOQotZm1heDM2NjggZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MSAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMjgKLWZtYXgzNjY5IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMjMzNyAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDI3Ci1mbWF4MzY3MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAyNgotZm1heDM2NzEgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMjUKLWZtYXgzNjcyIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzODkyMiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDI0Ci1mbWF4MzY3MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MiAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAyMwotZm1heDM2NzQgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMjIKLWZtYXgzNjc1IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyMzYzOSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDIxCi1mbWF4MzY3NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAyMAotZm1heDM2NzcgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNiAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMTkKLWZtYXgzNjc4IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMTAyNCAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDE4Ci1mbWF4MzY3OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAxNwotZm1heDM2ODAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMTYKLWZtYXgzNjgxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MjIxMSAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDE1Ci1mbWF4MzY4MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAxNAotZm1heDM2ODMgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMiAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMTMKLWZtYXgzNjg0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5ODQ3MTE3NDE2Ni40MiAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDEyCi1mbWF4MzY4NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAxMQotZm1heDM2ODYgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMTAKLWZtYXgzNjg3IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExNzQxN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICA5Ci1mbWF4MzY4OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgOAotZm1heDM2ODkgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MTE3NEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDcKLWZtYXgzNjkwIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzExN0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDYKLWZtYXgzNjkxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzEyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgNQotZm1heDM2OTIgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuODQ3MUUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDQKLWZtYXgzNjkzIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0N0UrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDMKLWZtYXgzNjk0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg1RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMgotZm1heDM2OTUgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDkuOEUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDEKLWZtYXgzNjk2IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiAxRSsxMSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLXJvdW5kaW5nOiBoYWxmX3VwCi1wcmVjaXNpb246ICAgOQotCi1mbWF4MzcwMSBmbWEgIDEgICA1LjAwIDEuMDBFLTMgLT4gNS4wMDEwMAotZm1heDM3MDIgZm1hICAxICAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCi1mbWF4MzcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDAKLWZtYXgzNzA0IGZtYSAgMSAgIDBFLTMgIDAwLjAwICAtPiAwLjAwMAotCi1mbWF4MzcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMAotZm1heDM3MTEgZm1hICAxICAgMEUrMyAgMDAuMCAgIC0+IDAuMAotZm1heDM3MTIgZm1hICAxICAgMEUrMyAgMDAuICAgIC0+IDAKLWZtYXgzNzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCi1mbWF4MzcxNCBmbWEgIDEgICAwRSszICAwMC5FKzIgLT4gMEUrMgotZm1heDM3MTUgZm1hICAxICAgMEUrMyAgMDAuRSszIC0+IDBFKzMKLWZtYXgzNzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszCi1mbWF4MzcxNyBmbWEgIDEgICAwRSszICAwMC5FKzUgLT4gMEUrMwotZm1heDM3MTggZm1hICAxICAgMEUrMyAgLTAwLjAgICAtPiAwLjAKLWZtYXgzNzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMAotZm1heDM3MzEgZm1hICAxICAgMEUrMyAgLTAwLkUrMSAtPiAwRSsxCi0KLWZtYXgzNzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwCi1mbWF4MzcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wCi1mbWF4MzcyMiBmbWEgIDEgICAwMC4gICAgMEUrMyAgLT4gMAotZm1heDM3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzEKLWZtYXgzNzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyCi1mbWF4MzcyNSBmbWEgIDEgICAwMC5FKzMgMEUrMyAgLT4gMEUrMwotZm1heDM3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMKLWZtYXgzNzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszCi1mbWF4MzcyOCBmbWEgIDEgICAtMDAuMDAgMEUrMyAgLT4gMC4wMAotZm1heDM3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMAotZm1heDM3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDAKLQotZm1heDM3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwCi1mbWF4MzczMyBmbWEgIDEgICAgMCAgICAtMCAgICAgLT4gIDAKLWZtYXgzNzM0IGZtYSAgMSAgIC0wICAgICAwICAgICAtPiAgMAotZm1heDM3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UKLQotZm1heDM3MzYgZm1hICAxICAgIDEgICAgLTEgICAgIC0+ICAwCi1mbWF4MzczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTIKLWZtYXgzNzM4IGZtYSAgMSAgICAxICAgICAxICAgICAtPiAgMgotZm1heDM3MzkgZm1hICAxICAgLTEgICAgIDEgICAgIC0+ICAwCi0KLWZtYXgzNzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQotZm1heDM3NDIgZm1hICAxICAgLTAgICAgLTEgICAgIC0+IC0xCi1mbWF4Mzc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDEKLWZtYXgzNzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQotZm1heDM3NDUgZm1hICAxICAgLTEgICAgIDAgICAgIC0+IC0xCi1mbWF4Mzc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTEKLWZtYXgzNzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQotZm1heDM3NDggZm1hICAxICAgIDEgICAgLTAgICAgIC0+ICAxCi0KLWZtYXgzNzUxIGZtYSAgMSAgICAwLjAgIC0xICAgICAtPiAtMS4wCi1mbWF4Mzc1MiBmbWEgIDEgICAtMC4wICAtMSAgICAgLT4gLTEuMAotZm1heDM3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjAKLWZtYXgzNzU0IGZtYSAgMSAgIC0wLjAgICAxICAgICAtPiAgMS4wCi1mbWF4Mzc1NSBmbWEgIDEgICAtMS4wICAgMCAgICAgLT4gLTEuMAotZm1heDM3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjAKLWZtYXgzNzU3IGZtYSAgMSAgICAxLjAgICAwICAgICAtPiAgMS4wCi1mbWF4Mzc1OCBmbWEgIDEgICAgMS4wICAtMCAgICAgLT4gIDEuMAotCi1mbWF4Mzc2MSBmbWEgIDEgICAgMCAgICAtMS4wICAgLT4gLTEuMAotZm1heDM3NjIgZm1hICAxICAgLTAgICAgLTEuMCAgIC0+IC0xLjAKLWZtYXgzNzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wCi1mbWF4Mzc2NCBmbWEgIDEgICAtMCAgICAgMS4wICAgLT4gIDEuMAotZm1heDM3NjUgZm1hICAxICAgLTEgICAgIDAuMCAgIC0+IC0xLjAKLWZtYXgzNzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wCi1mbWF4Mzc2NyBmbWEgIDEgICAgMSAgICAgMC4wICAgLT4gIDEuMAotZm1heDM3NjggZm1hICAxICAgIDEgICAgLTAuMCAgIC0+ICAxLjAKLQotZm1heDM3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKLWZtYXgzNzcyIGZtYSAgMSAgIC0wLjAgIC0xLjAgICAtPiAtMS4wCi1mbWF4Mzc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMAotZm1heDM3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKLWZtYXgzNzc1IGZtYSAgMSAgIC0xLjAgICAwLjAgICAtPiAtMS4wCi1mbWF4Mzc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMAotZm1heDM3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKLWZtYXgzNzc4IGZtYSAgMSAgICAxLjAgIC0wLjAgICAtPiAgMS4wCi0KLS0tIFNwZWNpYWxzCi1mbWF4Mzc4MCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4MiBmbWEgIDEgICAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4MyBmbWEgIDEgICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4NSBmbWEgIDEgICAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4NiBmbWEgIDEgICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4OCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc4OSBmbWEgIDEgICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc5MSBmbWEgIDEgICAgMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc5MiBmbWEgIDEgICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4Mzc5NCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotZm1heDM4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1mbWF4MzgwMiBmbWEgIDEgICAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwNSBmbWEgIDEgICAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5Ci1mbWF4MzgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwOCBmbWEgIDEgICAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1mbWF4MzgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzODExIGZtYSAgMSAgIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzODE0IGZtYSAgMSAgICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotZm1heDM4MjEgZm1hICAxICAgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWZtYXgzODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFOCi1mbWF4MzgyMyBmbWEgIDEgICAgTmFOIC0xICAgICAgLT4gIE5hTgotZm1heDM4MjQgZm1hICAxICAgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWZtYXgzODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFOCi1mbWF4MzgyNiBmbWEgIDEgICAgTmFOICAxICAgICAgLT4gIE5hTgotZm1heDM4MjcgZm1hICAxICAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWZtYXgzODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFOCi1mbWF4MzgyOSBmbWEgIDEgICAgTmFOICBOYU4gICAgLT4gIE5hTgotZm1heDM4MzAgZm1hICAxICAgLUluZiAgTmFOICAgIC0+ICBOYU4KLWZtYXgzODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFOCi1mbWF4MzgzMiBmbWEgIDEgICAtMSAgICBOYU4gICAgLT4gIE5hTgotZm1heDM4MzMgZm1hICAxICAgLTAgICAgTmFOICAgIC0+ICBOYU4KLWZtYXgzODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFOCi1mbWF4MzgzNSBmbWEgIDEgICAgMSAgICBOYU4gICAgLT4gIE5hTgotZm1heDM4MzYgZm1hICAxICAgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWZtYXgzODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFOCi0KLWZtYXgzODQxIGZtYSAgMSAgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg0MyBmbWEgIDEgICAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODQ0IGZtYSAgMSAgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg0NiBmbWEgIDEgICAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODQ3IGZtYSAgMSAgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg0OSBmbWEgIDEgICAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODUwIGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg1MiBmbWEgIDEgICAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODUzIGZtYSAgMSAgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg1NSBmbWEgIDEgICAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODU2IGZtYSAgMSAgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg1OCBmbWEgIDEgICAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODU5IGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1mbWF4Mzg2MSBmbWEgIDEgICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLWZtYXgzODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMgotZm1heDM4NjMgZm1hICAxICAgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zCi1mbWF4Mzg2NCBmbWEgIDEgICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLWZtYXgzODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQotZm1heDM4NjYgZm1hICAxICAgLUluZiAgICAgTmFONyAgIC0+ICBOYU43Ci1mbWF4Mzg2NyBmbWEgIDEgICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLWZtYXgzODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQotZm1heDM4NjkgZm1hICAxICAgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMAotZm1heDM4NzEgZm1hICAxICAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg3MyBmbWEgIDEgICAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NzQgZm1hICAxICAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg3NiBmbWEgIDEgICAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4NzcgZm1hICAxICAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg3OSBmbWEgIDEgICAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4ODAgZm1hICAxICAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4Mzg4MiBmbWEgIDEgICAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2Ci1mbWF4Mzg4MyBmbWEgIDEgICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMAotZm1heDM4ODUgZm1hICAxICAgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gb3ZlcmZsb3csIHVuZGVyZmxvdyBhbmQgc3Vibm9ybWFsIHRlc3RzCi1tYXhleHBvbmVudDogOTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OQotcHJlY2lzaW9uOiA5Ci1mbWF4Mzg5MCBmbWEgIDEgICAxRSs5OTk5OTkgICAgIDlFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM4OTEgZm1hICAxICAgOUUrOTk5OTk5ICAgICAxRSs5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzODkyIGZtYSAgMSAgIC0xLjFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCi1mbWF4Mzg5MyBmbWEgIDEgICAxRS05OTk5OTkgICAgLTEuMWUtOTk5OTk5IC0+IC0xRS0xMDAwMDAwICAgIFN1Ym5vcm1hbAotZm1heDM4OTQgZm1hICAxICAgLTEuMDAwMUUtOTk5OTk5ICAxRS05OTk5OTkgICAtPiAtMUUtMTAwMDAwMyBTdWJub3JtYWwKLWZtYXgzODk1IGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4wMDAxZS05OTk5OTkgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsCi1mbWF4Mzg5NiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgLTlFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzODk3IGZtYSAgMSAgIC05RSs5OTk5OTkgICAtMUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM4OTggZm1hICAxICAgKzEuMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAwICAgU3Vibm9ybWFsCi1mbWF4Mzg5OSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDAgICAgU3Vibm9ybWFsCi1mbWF4MzkwMCBmbWEgIDEgICArMS4wMDAxRS05OTk5OTkgLTFFLTk5OTk5OSAgIC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCi1mbWF4MzkwMSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMDAwMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsCi1mbWF4MzkwMiBmbWEgIDEgICAtMUUrOTk5OTk5ICAgKzlFKzk5OTk5OSAgIC0+ICA4RSs5OTk5OTkKLWZtYXgzOTAzIGZtYSAgMSAgIC05RSs5OTk5OTkgICArMUUrOTk5OTk5ICAgLT4gLThFKzk5OTk5OQotCi1wcmVjaXNpb246IDMKLWZtYXgzOTA0IGZtYSAgMSAgICAgICAgMCAtOS45OTlFKzk5OTk5OSAgIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWZtYXgzOTA1IGZtYSAgMSAgICAgICAgICAtOS45OTlFKzk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWZtYXgzOTA2IGZtYSAgMSAgICAgICAgMCAgOS45OTlFKzk5OTk5OSAgIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLWZtYXgzOTA3IGZtYSAgMSAgICAgICAgICAgOS45OTlFKzk5OTk5OSAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLQotcHJlY2lzaW9uOiAzCi1tYXhleHBvbmVudDogOTk5Ci1taW5leHBvbmVudDogLTk5OQotZm1heDM5MTAgZm1hICAxICAgIDEuMDBFLTk5OSAgIDAgICAgLT4gICAxLjAwRS05OTkKLWZtYXgzOTExIGZtYSAgMSAgICAwLjFFLTk5OSAgICAwICAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbAotZm1heDM5MTIgZm1hICAxICAgIDAuMTBFLTk5OSAgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsCi1mbWF4MzkxMyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgMCAgICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAotZm1heDM5MTQgZm1hICAxICAgIDAuMDFFLTk5OSAgIDAgICAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsCi0tLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbgotZm1heDM5MTUgZm1hICAxICAgIDAuOTk5RS05OTkgIDAgICAgLT4gICAxLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzOTE2IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAwICAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzkxNyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgMCAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDM5MTggZm1hICAxICAgIDAuMDAxRS05OTkgIDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM5MTkgZm1hICAxICAgIDAuMDAwOUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM5MjAgZm1hICAxICAgIDAuMDAwMUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotCi1mbWF4MzkzMCBmbWEgIDEgICAtMS4wMEUtOTk5ICAgMCAgICAtPiAgLTEuMDBFLTk5OQotZm1heDM5MzEgZm1hICAxICAgLTAuMUUtOTk5ICAgIDAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCi1mbWF4MzkzMiBmbWEgIDEgICAtMC4xMEUtOTk5ICAgMCAgICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwKLWZtYXgzOTMzIGZtYSAgMSAgIC0wLjEwMEUtOTk5ICAwICAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MzkzNCBmbWEgIDEgICAtMC4wMUUtOTk5ICAgMCAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKLS0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCi1mbWF4MzkzNSBmbWEgIDEgICAtMC45OTlFLTk5OSAgMCAgICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDM5MzYgZm1hICAxICAgLTAuMDk5RS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzOTM3IGZtYSAgMSAgIC0wLjAwOUUtOTk5ICAwICAgIC0+ICAtMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzkzOCBmbWEgIDEgICAtMC4wMDFFLTk5OSAgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzkzOSBmbWEgIDEgICAtMC4wMDA5RS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4Mzk0MCBmbWEgIDEgICAtMC4wMDAxRS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi0KLS0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIGZtYSAgMSAgcwotZm1heDM5NTAgZm1hICAxICAgIDEuMDBFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkKLWZtYXgzOTUxIGZtYSAgMSAgICAwLjFFLTk5OSAgICAgMC4xRS05OTkgIC0+ICAgMkUtMTAwMCAgICBTdWJub3JtYWwKLWZtYXgzOTUyIGZtYSAgMSAgICAwLjEwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwKLWZtYXgzOTUzIGZtYSAgMSAgICAwLjEwMEUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwgUm91bmRlZAotZm1heDM5NTQgZm1hICAxICAgIDAuMDFFLTk5OSAgICAwLjFFLTk5OSAgLT4gICAxLjFFLTEwMDAgIFN1Ym5vcm1hbAotZm1heDM5NTUgZm1hICAxICAgIDAuOTk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkgIEluZXhhY3QgUm91bmRlZAotZm1heDM5NTYgZm1hICAxICAgIDAuMDk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAyLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4Mzk1NyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzOTU4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDM5NTkgZm1hICAxICAgIDAuMDAwOUUtOTk5ICAwLjFFLTk5OSAgLT4gICAxLjBFLTEwMDAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4Mzk2MCBmbWEgIDEgICAgMC4wMDAxRS05OTkgIDAuMUUtOTk5ICAtPiAgIDEuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLS0tIG5lZ2F0aXZlcy4uLgotZm1heDM5NjEgZm1hICAxICAgIDEuMDBFLTk5OSAgIC0wLjFFLTk5OSAgLT4gICA5LjBFLTEwMDAgIFN1Ym5vcm1hbAotZm1heDM5NjIgZm1hICAxICAgIDAuMUUtOTk5ICAgIC0wLjFFLTk5OSAgLT4gICAwRS0xMDAwCi1mbWF4Mzk2MyBmbWEgIDEgICAgMC4xMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEKLWZtYXgzOTY0IGZtYSAgMSAgICAwLjEwMEUtOTk5ICAtMC4xRS05OTkgIC0+ICAgMEUtMTAwMSAgICBDbGFtcGVkCi1mbWF4Mzk2NSBmbWEgIDEgICAgMC4wMUUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIC05RS0xMDAxICAgU3Vibm9ybWFsCi1mbWF4Mzk2NiBmbWEgIDEgICAgMC45OTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzOTY3IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4Mzk2OCBmbWEgIDEgICAgMC4wMDlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC05RS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzOTY5IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDM5NzAgZm1hICAxICAgIDAuMDAwOUUtOTk5IC0wLjFFLTk5OSAgLT4gICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4Mzk3MSBmbWEgIDEgICAgMC4wMDAxRS05OTkgLTAuMUUtOTk5ICAtPiAgIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gc29tZSAncmVhbCcgbnVtYmVycwotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLXByZWNpc2lvbjogOAotZm1heDM1NjYgZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OTA2RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKLXByZWNpc2lvbjogNwotZm1heDM1NjcgZm1hICAxICAgOTk5OTkwNjE3MzVFLTM5NCAgMEUtMzk0IC0+IDkuOTk5OTFFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbAotcHJlY2lzaW9uOiA2Ci1mbWF4MzU2OCBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwKLQotLS0gbm93IHRoZSBjYXNlIHdoZXJlIHdlIGNhbiBnZXQgdW5kZXJmbG93IGJ1dCB0aGUgcmVzdWx0IGlzIG5vcm1hbAotLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlCi0tLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdCi1wcmVjaXNpb246ICAgMTYKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotCi1mbWF4MzU3MSBmbWEgIDEgICAgICAgICAxRS0zODMgICAgICAgMCAgLT4gMUUtMzgzCi1mbWF4MzU3MiBmbWEgIDEgICAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsCi1mbWF4MzU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMKLWZtYXgzNTc0IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM4NCAgLT4gICA5RS0zODQgU3Vibm9ybWFsCi0KLS0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbgotZm1heDM1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCi1mbWF4MzU3NiBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTggIC0+ICAgOS45OTk5OTk5OTk5OTk5OUUtMzg0ICBTdWJub3JtYWwKLWZtYXgzNTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MzU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZm1heDM1Nzkgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAxICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWZtYXgzNTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi0KLS0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzCi1wcmVjaXNpb246ICAgNQotbWF4ZXhwb25lbnQ6IDc5Ci1taW5leHBvbmVudDogLTc5Ci0tLSBBZGQ6IGxocyBhbmQgcmhzIDAKLWZtYXgzMTAwMSBmbWEgIDEgICAgICAgICAxLjUyNDQ0RS04MCAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDAyIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzEwMDMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzMTAwNCBmbWEgIDEgICAgICAgICAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDA1IGZtYSAgMSAgICAgICAgIDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzEwMDYgZm1hICAxICAgICAgICAgMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gQWRkOiBsaHMgPj4gcmhzIGFuZCB2aWNlIHZlcnNhCi1mbWF4MzEwMTEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDEyIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzMTAxMyBmbWEgIDEgICAgICAgICAxLjUyNDQ2RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzEwMTQgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDE1IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzMTAxNiBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NkUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci0KLS0tIEFkZDogbGhzICsgcmhzIGZtYSAgMSAgaXRpb24gY2FycmllZCBvdXQKLWZtYXgzMTAyMSBmbWEgIDEgICAgICAgICAxLjUyNDQzRS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzEwMjIgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDIzIGZtYSAgMSAgICAgICAgIDEuNTI0NDVFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzMTAyNCBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0M0UtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzEwMjUgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDRFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMDI2IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQ1RS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cKLQotLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzCi1wcmVjaXNpb246ICAgIDE2Ci1tYXhFeHBvbmVudDogKzM4NAotbWluRXhwb25lbnQ6IC0zODMKLXJvdW5kaW5nOiAgICAgZG93bgotCi1mbWF4MzExMDAgZm1hICAxICAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAotZm1heDMxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMDQgZm1hICAxICAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDMxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMDcgZm1hICAxICAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDMxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKLQotcm91bmRpbmc6ICAgICBjZWlsaW5nCi1mbWF4MzExMTAgZm1hICAxICAgLTFlKzIgKzFlLTM4MyAgIC0+IC05OS45OTk5OTk5OTk5OTk5OSBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExMyBmbWEgIDEgICAgICAtMSArMWUtMzgzICAgLT4gLTAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMTQgZm1hICAxICAgLTFlLTEgKzFlLTM4MyAgIC0+IC0wLjA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExNiBmbWEgIDEgICAtMWUtMyArMWUtMzgzICAgLT4gLTAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzExMTcgZm1hICAxICAgLTFlLTQgKzFlLTM4MyAgIC0+IC0wLjAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTExOSBmbWEgIDEgICAtMWUtNiArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QKLQotcm91bmRpbmc6ICAgICBkb3duCi1wcmVjaXNpb246ICAgIDcKLW1heEV4cG9uZW50OiArOTYKLW1pbkV4cG9uZW50OiAtOTUKLWZtYXgzMTEzMCBmbWEgIDEgICAgIDEgICAgICAgICAgICAtMWUtMjAwICAtPiAwLjk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotLS0gc3Vibm9ybWFsIGJvdW5kYXJ5Ci1mbWF4MzExMzEgZm1hICAxICAgICAxLjAwMDAwMEUtOTQgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5OUUtOTUgIFJvdW5kZWQgSW5leGFjdAotZm1heDMxMTMyIGZtYSAgMSAgICAgMS4wMDAwMDFFLTk1ICAtMWUtMjAwICAtPiAgMS4wMDAwMDBFLTk1ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzMTEzMyBmbWEgIDEgICAgIDEuMDAwMDAwRS05NSAgLTFlLTIwMCAgLT4gIDkuOTk5OTlFLTk2ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMTM0IGZtYSAgMSAgICAgMC45OTk5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OEUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93Ci1mbWF4MzExMzUgZm1hICAxICAgICAwLjAwMTAwMEUtOTUgIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgUm91bmRlZCBJbmV4YWN0IFN1Ym5vcm1hbCBVbmRlcmZsb3cKLWZtYXgzMTEzNiBmbWEgIDEgICAgIDAuMDAwOTk5RS05NSAgLTFlLTIwMCAgLT4gIDkuOThFLTk5ICBSb3VuZGVkIEluZXhhY3QgU3Vibm9ybWFsIFVuZGVyZmxvdwotZm1heDMxMTM3IGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMTAxICAtPiAgOS45OTk5OUUtOTYgIFN1Ym5vcm1hbAotZm1heDMxMTM4IGZtYSAgMSAgICAgICAgMTAwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OTlFLTk4ICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxMTM5IGZtYSAgMSAgICAgICAgIDEwMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45OUUtOTkgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxMTQwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45RS0xMDAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxMTQxIGZtYSAgMSAgICAgICAgICAgMTBFLTEwMSAtMWUtMjAwICAtPiAgOUUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxMTQyIGZtYSAgMSAgICAgICAgICAgIDFFLTEwMSAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzExNDMgZm1hICAxICAgICAgICAgICAgMEUtMTAxIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTE0NCBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotCi1mbWF4MzExNTEgZm1hICAxICAgICAgICAxMDAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzMTE1MiBmbWEgIDEgICAgICAgICAxMDAwRS0xMDIgLTFlLTIwMCAgLT4gIDkuOUUtMTAwICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxMTUzIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMiAtMWUtMjAwICAtPiAgOUUtMTAxICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzMTE1NCBmbWEgIDEgICAgICAgICAgIDEwRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxMTU1IGZtYSAgMSAgICAgICAgICAgIDFFLTEwMiAtMWUtMjAwICAtPiAgMEUtMTAxICAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzExNTYgZm1hICAxICAgICAgICAgICAgMEUtMTAyIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTE1NyBmbWEgIDEgICAgICAgICAgICAxRS0xMDMgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotCi1mbWF4MzExNjAgZm1hICAxICAgICAgICAgIDEwMEUtMTA1IC0xZS0xMDEgIC0+IC0wRS0xMDEgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxMTYxIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMjAxICAtPiAgMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLQotLS0gdGVzdHMgYmFzZWQgb24gR3VubmFyIERlZ25ib2wncyBlZGdlIGNhc2UKLXByZWNpc2lvbjogICAxNQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiAzODQKLW1pbmV4cG9uZW50OiAtMzgzCi0KLWZtYXgzMTIwMCBmbWEgIDEgICAxRTE1ICAtMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMDEgZm1hICAxICAgMUUxNSAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZAotZm1heDMxMjEwIGZtYSAgMSAgIDFFMTUgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIxMSBmbWEgIDEgICAxRTE1ICAtMC41MDEgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMTIgZm1hICAxICAgMUUxNSAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMjEzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIxNCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDEgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMTUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMjE2IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIxNyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDEgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMTggZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMjE5IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIyMCBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDEgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMjEgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMjIyIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIyMyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEyMjQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMjI1IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTIzMCBmbWEgIDEgICAxRTE1ICAtNTAwMDAwMC4wMDAwMDAwMDEgICAtPiAgOTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLXByZWNpc2lvbjogICAxNgotCi1mbWF4MzEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzExIGZtYSAgMSAgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzE0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzE3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzIwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzIzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzI2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzI5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzMyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzM1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzMTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzM4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLQotZm1heDMxMzQwIGZtYSAgMSAgIDFFMTYgIC01MDAwMDAwLjAwMDAxMDAwMSAgIC0+ICA5OTk5OTk5OTk1MDAwMDAwICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZm1heDMxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzUwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzUzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzU5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzYyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDMxMzY1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzY5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzkwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzkzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDMxMzk2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotCi0tLSBNb3JlIEdEIGVkZ2UgY2FzZXMsIHdoZXJlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdW5hZGp1c3RlZAotLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMAotcHJlY2lzaW9uOiAgIDE1Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotZm1heDMxNDAwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQwMSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDAyIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTIgIC0+IDAuMDEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDAzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQwNCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDA1IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTUgIC0+IDAuMDAwMDEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDA2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQwNyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS03Ci1mbWF4MzE0MDggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtOCAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtOAotZm1heDMxNDA5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTkKLWZtYXgzMTQxMCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMAotZm1heDMxNDExIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTExIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTExCi1mbWF4MzE0MTIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTIKLWZtYXgzMTQxMyBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xMwotZm1heDMxNDE0IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE0IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE0Ci1mbWF4MzE0MTUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTUKLWZtYXgzMTQxNiBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xNgotZm1heDMxNDE3IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTE3IC0+IDEuMjM0NTY3ODkwMTIzNDVFLTE3Ci1mbWF4MzE0MTggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTgKLWZtYXgzMTQxOSBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS0xOQotCi0tLSBzYW1lLCBwcmVjaXNpb24gMTYuLgotcHJlY2lzaW9uOiAgIDE2Ci1mbWF4MzE0MjAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0MjMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0MjYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03Ci1mbWF4MzE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04Ci1mbWF4MzE0MjkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS05Ci1mbWF4MzE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMAotZm1heDMxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKLWZtYXgzMTQzMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEyCi1mbWF4MzE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMwotZm1heDMxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKLWZtYXgzMTQzNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE1Ci1mbWF4MzE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNgotZm1heDMxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKLWZtYXgzMTQzOCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE4Ci1mbWF4MzE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQotCi0tLSBzYW1lLCByZXZlcnNlZCAwCi1mbWF4MzE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ0MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgMCAtPiAwLjExMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ0MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ0NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgMCAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ0NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ0NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNwotZm1heDMxNDQ4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04Ci1mbWF4MzE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKLWZtYXgzMTQ1MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAKLWZtYXgzMTQ1MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKLWZtYXgzMTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKLWZtYXgzMTQ1MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMKLWZtYXgzMTQ1NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKLWZtYXgzMTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKLWZtYXgzMTQ1NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYKLWZtYXgzMTQ1NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKLWZtYXgzMTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKLWZtYXgzMTQ1OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkKLQotLS0gc2FtZSwgRXMgb24gdGhlIDAKLWZtYXgzMTQ2MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NjEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ2MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NjQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ2NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NjcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ2OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NzAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ3MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTIgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzE0NzMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDMxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzMTQ3NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTUgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci0tLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0Ci1mbWF4MzE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1mbWF4MzE0NzcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE3ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1mbWF4MzE0NzggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1mbWF4MzE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCi1wcmVjaXNpb246ICAgMTYKLW1heEV4cG9uZW50OiAzODQKLW1pbmV4cG9uZW50OiAtMzgzCi0KLXJvdW5kaW5nOiAgICBoYWxmX3VwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTUwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNTAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLWZtYXgzMTUwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTUwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAotLS0gaW5leGFjdCB6ZXJvcwotZm1heDMxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1MTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1mbWF4MzE1MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLQotcm91bmRpbmc6ICAgIGhhbGZfZG93bgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZm1heDMxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTUyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTUyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKLS0tIGluZXhhY3QgemVyb3MKLWZtYXgzMTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNTMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1MzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZm1heDMxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTUzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWZtYXgzMTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNTQxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotZm1heDMxNTQ0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTQ3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNTUzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWZtYXgzMTU1NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1NTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU1OCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotCi1yb3VuZGluZzogICAgdXAKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWZtYXgzMTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNTYxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE1NjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotZm1heDMxNTY0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1NjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTY3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzE1NzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1mbWF4MzE1NzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTc4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotCi1yb3VuZGluZzogICAgZG93bgotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZm1heDMxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTU4MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU4NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKLS0tIGluZXhhY3QgemVyb3MKLWZtYXgzMTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNTkyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1OTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZm1heDMxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTU5NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBjZWlsaW5nCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzMTYwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLWZtYXgzMTYwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzMTYwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAotLS0gaW5leGFjdCB6ZXJvcwotZm1heDMxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxNjEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWZtYXgzMTYxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzMTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDMxNjE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE2MTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLQotLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqCi1yb3VuZGluZzogICAgZmxvb3IKLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWZtYXgzMTYyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDMxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1mbWF4MzE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoKLWZtYXgzMTYyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotZm1heDMxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKLWZtYXgzMTYyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgotZm1heDMxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzMTYzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDMxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDMxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZm1heDMxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzE2MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKLWZtYXgzMTYzNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKgotZm1heDMxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotCi0tLSBCaWdEZWNpbWFsIHByb2JsZW0gdGVzdGNhc2VzIDIwMDYuMDEuMjMKLXByZWNpc2lvbjogICAxNgotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotcm91bmRpbmc6ICBkb3duCi1wcmVjaXNpb246IDcKLWZtYXgzMTY1MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKLXByZWNpc2lvbjogNgotZm1heDMxNjUyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgotcHJlY2lzaW9uOiA1Ci1mbWF4MzE2NTMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDBFKzYgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNAotZm1heDMxNjU0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDMKLWZtYXgzMTY1NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyCi1mbWF4MzE2NTYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMQotZm1heDMxNjU3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgaGFsZl9ldmVuCi1wcmVjaXNpb246IDcKLWZtYXgzMTY2MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYKLXByZWNpc2lvbjogNgotZm1heDMxNjYyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgotcHJlY2lzaW9uOiA1Ci1mbWF4MzE2NjMgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDFFKzYgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNAotZm1heDMxNjY0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDMKLWZtYXgzMTY2NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyCi1mbWF4MzE2NjYgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjBFKzYgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMQotZm1heDMxNjY3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgdXAKLXByZWNpc2lvbjogNwotZm1heDMxNjcxIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNgotcHJlY2lzaW9uOiA2Ci1mbWF4MzE2NzIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2Ci1wcmVjaXNpb246IDUKLWZtYXgzMTY3MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0Ci1mbWF4MzE2NzQgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMUUrNiAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMwotZm1heDMxNjc1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMUUrNiAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDIKLWZtYXgzMTY3NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMUUrNiAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxCi1mbWF4MzE2NzcgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAyRSs2ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotcHJlY2lzaW9uOiAgIDM0Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDYxNDQKLW1pbkV4cG9uZW50OiAtNjE0MwotLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpCi1mbWF4MzE3MDEgIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MAotZm1heDMxNzAyICBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTAKLWZtYXgzMTcwMyAgZm1hICAxICAgMTMwRS0yICAgIDFFMCAgICAgICAtPiAyLjMwCi1mbWF4MzE3MDQgIGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNAotZm1heDMxNzA1ICBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwCi1mbWF4MzE3MDYgIHN1YnRyYWN0IDEzMEUtMiAgMTJFLTEgIC0+IDAuMTAKLWZtYXgzMTcwNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMAotZm1heDMxNzA4ICBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gU2FtZSBhcyBhYm92ZSwgdXNpbmcgZGVjaW1hbDY0IGRlZmF1bHQgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXByZWNpc2lvbjogICAxNgotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotLS0gW2ZpcnN0IGdyb3VwIGFyZSAncXVpY2sgY29uZmlkZW5jZSBjaGVjayddCi1mbWF4MzYwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyCi1mbWF4MzYwMDIgZm1hICAxICAgMiAgICAgICAzICAgICAgIC0+ICA1Ci1mbWF4MzYwMDMgZm1hICAxICAgJzUuNzUnICAnMy4zJyAgIC0+ICA5LjA1Ci1mbWF4MzYwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyCi1mbWF4MzYwMDUgZm1hICAxICAgJy01JyAgICAnLTMnICAgIC0+ICAtOAotZm1heDM2MDA2IGZtYSAgMSAgICctNycgICAgJzIuNScgICAtPiAgLTQuNQotZm1heDM2MDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wCi1mbWF4MzYwMDggZm1hICAxICAgJzEuMjUnICAnMS4yNScgIC0+ICAyLjUwCi1mbWF4MzYwMDkgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAwMCcgLT4gJzIuMjM0NTY3ODknCi1mbWF4MzYwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnCi0KLWZtYXgzNjAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5JyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OTknICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDAnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMTkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUxJyAgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNjAyMSBmbWEgIDEgICAwIDEgLT4gMQotZm1heDM2MDIyIGZtYSAgMSAgIDEgMSAtPiAyCi1mbWF4MzYwMjMgZm1hICAxICAgMiAxIC0+IDMKLWZtYXgzNjAyNCBmbWEgIDEgICAzIDEgLT4gNAotZm1heDM2MDI1IGZtYSAgMSAgIDQgMSAtPiA1Ci1mbWF4MzYwMjYgZm1hICAxICAgNSAxIC0+IDYKLWZtYXgzNjAyNyBmbWEgIDEgICA2IDEgLT4gNwotZm1heDM2MDI4IGZtYSAgMSAgIDcgMSAtPiA4Ci1mbWF4MzYwMjkgZm1hICAxICAgOCAxIC0+IDkKLWZtYXgzNjAzMCBmbWEgIDEgICA5IDEgLT4gMTAKLQotLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzCi1mbWF4MzYwMzEgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDAnIC0+ICcwLjk5OTgnCi1mbWF4MzYwMzIgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDEnIC0+ICcwLjk5OTknCi1mbWF4MzYwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnCi1mbWF4MzYwMzQgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDMnIC0+ICcxLjAwMDEnCi0KLWZtYXgzNjAzNSBmbWEgIDEgICAnNzAnICAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMzYgZm1hICAxICAgJzcwMCcgICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MDM3IGZtYSAgMSAgICc3MDAwJyAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjAzOCBmbWEgIDEgICAnNzAwMDAnICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwMzkgZm1hICAxICAgJzcwMDAwMCcgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKLQotLS0gc3ltbWV0cnk6Ci1mbWF4MzYwNDAgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwNDEgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MDQyIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwNDQgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYwNDUgZm1hICAxICAgJzEwMDAwZSsxNicgICc3MDAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwN0UrMjAnIFJvdW5kZWQKLQotZm1heDM2MDQ2IGZtYSAgMSAgICcxMDAwMGUrOScgICc3JyAtPiAnMTAwMDAwMDAwMDAwMDcnCi1mbWF4MzYwNDcgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwJyAtPiAnMTAwMDAwMDAwMDAwNzAnCi1mbWF4MzYwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJwotZm1heDM2MDQ5IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwJyAtPiAnMTAwMDAwMDAwMDcwMDAnCi1mbWF4MzYwNTAgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwJyAtPiAnMTAwMDAwMDAwNzAwMDAnCi1mbWF4MzYwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJwotCi0tLSBleGFtcGxlcyBmcm9tIGRlY2FyaXRoCi1mbWF4MzYwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJwotZm1heDM2MDU0IGZtYSAgMSAgICcxLjMnICctMS4wNycgLT4gJzAuMjMnCi1mbWF4MzYwNTUgZm1hICAxICAgJzEuMycgJy0xLjMwJyAtPiAnMC4wMCcKLWZtYXgzNjA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycKLWZtYXgzNjA1NyBmbWEgIDEgICAnMUUrMicgJzFFKzQnIC0+ICcxLjAxRSs0JwotCi0tLSBmcm9tIGFib3ZlCi1mbWF4MzYwNjEgZm1hICAxICAgMSAnMC4xJyAtPiAnMS4xJwotZm1heDM2MDYyIGZtYSAgMSAgIDEgJzAuMDEnIC0+ICcxLjAxJwotZm1heDM2MDYzIGZtYSAgMSAgIDEgJzAuMDAxJyAtPiAnMS4wMDEnCi1mbWF4MzYwNjQgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJwotZm1heDM2MDY1IGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJwotZm1heDM2MDY2IGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnCi1mbWF4MzYwNjcgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMDAxJwotZm1heDM2MDY4IGZtYSAgMSAgIDEgJzAuMDAwMDAwMDEnIC0+ICcxLjAwMDAwMDAxJwotCi0tLSBzb21lIGZ1bm55IHplcm9zIFtpbiBjYXNlIG9mIGJhZCBzaWdudW1dCi1mbWF4MzYwNzAgZm1hICAxICAgMSAgMCAgICAtPiAxCi1mbWF4MzYwNzEgZm1hICAxICAgMSAwLiAgICAtPiAxCi1mbWF4MzYwNzIgZm1hICAxICAgMSAgLjAgICAtPiAxLjAKLWZtYXgzNjA3MyBmbWEgIDEgICAxIDAuMCAgIC0+IDEuMAotZm1heDM2MDc0IGZtYSAgMSAgIDEgMC4wMCAgLT4gMS4wMAotZm1heDM2MDc1IGZtYSAgMSAgICAwICAxICAgLT4gMQotZm1heDM2MDc2IGZtYSAgMSAgIDAuICAxICAgLT4gMQotZm1heDM2MDc3IGZtYSAgMSAgICAuMCAxICAgLT4gMS4wCi1mbWF4MzYwNzggZm1hICAxICAgMC4wIDEgICAtPiAxLjAKLWZtYXgzNjA3OSBmbWEgIDEgICAwLjAwIDEgIC0+IDEuMDAKLQotLS0gc29tZSBjYXJyaWVzCi1mbWF4MzYwODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTk5OTk5OTk5Ci1mbWF4MzYwODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZAotZm1heDM2MDgyIGZtYSAgMSAgICA5OTk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAwMAotZm1heDM2MDgzIGZtYSAgMSAgICAgIDk5OTk5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMDAwMDAKLWZtYXgzNjA4NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMAotZm1heDM2MDg1IGZtYSAgMSAgICAgICAgICA5OTk5OTk5OTkgMSAgLT4gMTAwMDAwMDAwMAotZm1heDM2MDg2IGZtYSAgMSAgICAgICAgICAgIDk5OTk5OTkgMSAgLT4gMTAwMDAwMDAKLWZtYXgzNjA4NyBmbWEgIDEgICAgICAgICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMAotZm1heDM2MDg4IGZtYSAgMSAgICAgICAgICAgICAgICA5OTkgMSAgLT4gMTAwMAotZm1heDM2MDg5IGZtYSAgMSAgICAgICAgICAgICAgICAgIDkgMSAgLT4gMTAKLQotCi0tLSBtb3JlIExIUyBzd2FwcwotZm1heDM2MDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3JwotZm1heDM2MDkxIGZtYSAgMSAgICctNTYyNjdFLTYnICAgIDAgLT4gICctMC4wNTYyNjcnCi1mbWF4MzYwOTIgZm1hICAxICAgJy01NjI2N0UtNScgICAgMCAtPiAgJy0wLjU2MjY3JwotZm1heDM2MDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3JwotZm1heDM2MDk0IGZtYSAgMSAgICctNTYyNjdFLTMnICAgIDAgLT4gICctNTYuMjY3JwotZm1heDM2MDk1IGZtYSAgMSAgICctNTYyNjdFLTInICAgIDAgLT4gICctNTYyLjY3JwotZm1heDM2MDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43JwotZm1heDM2MDk3IGZtYSAgMSAgICctNTYyNjdFLTAnICAgIDAgLT4gICctNTYyNjcnCi1mbWF4MzYwOTggZm1hICAxICAgJy01RS0xMCcgICAgICAgMCAtPiAgJy01RS0xMCcKLWZtYXgzNjA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnCi1mbWF4MzYxMDAgZm1hICAxICAgJy01RS02JyAgICAgICAgMCAtPiAgJy0wLjAwMDAwNScKLWZtYXgzNjEwMSBmbWEgIDEgICAnLTVFLTUnICAgICAgICAwIC0+ICAnLTAuMDAwMDUnCi1mbWF4MzYxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnCi1mbWF4MzYxMDMgZm1hICAxICAgJy01RS0xJyAgICAgICAgMCAtPiAgJy0wLjUnCi1mbWF4MzYxMDQgZm1hICAxICAgJy01RTAnICAgICAgICAgMCAtPiAgJy01JwotZm1heDM2MTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnCi1mbWF4MzYxMDYgZm1hICAxICAgJy01RTUnICAgICAgICAgMCAtPiAgJy01MDAwMDAnCi1mbWF4MzYxMDcgZm1hICAxICAgJy01RTE1JyAgICAgICAgMCAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJwotZm1heDM2MTA4IGZtYSAgMSAgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKLWZtYXgzNjEwOSBmbWEgIDEgICAnLTVFMTcnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgIFJvdW5kZWQKLWZtYXgzNjExMCBmbWEgIDEgICAnLTVFMTgnICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxOCcgIFJvdW5kZWQKLWZtYXgzNjExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQKLQotLS0gbW9yZSBSSFMgc3dhcHMKLWZtYXgzNjExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3JwotZm1heDM2MTE0IGZtYSAgMSAgIDAgICctNTYyNjdFLTYnICAtPiAgJy0wLjA1NjI2NycKLWZtYXgzNjExNiBmbWEgIDEgICAwICAnLTU2MjY3RS01JyAgLT4gICctMC41NjI2NycKLWZtYXgzNjExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3JwotZm1heDM2MTE5IGZtYSAgMSAgIDAgICctNTYyNjdFLTMnICAtPiAgJy01Ni4yNjcnCi1mbWF4MzYxMjAgZm1hICAxICAgMCAgJy01NjI2N0UtMicgIC0+ICAnLTU2Mi42NycKLWZtYXgzNjEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43JwotZm1heDM2MTIyIGZtYSAgMSAgIDAgICctNTYyNjdFLTAnICAtPiAgJy01NjI2NycKLWZtYXgzNjEyMyBmbWEgIDEgICAwICAnLTVFLTEwJyAgICAgLT4gICctNUUtMTAnCi1mbWF4MzYxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnCi1mbWF4MzYxMjUgZm1hICAxICAgMCAgJy01RS02JyAgICAgIC0+ICAnLTAuMDAwMDA1JwotZm1heDM2MTI2IGZtYSAgMSAgIDAgICctNUUtNScgICAgICAtPiAgJy0wLjAwMDA1JwotZm1heDM2MTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnCi1mbWF4MzYxMjggZm1hICAxICAgMCAgJy01RS0xJyAgICAgIC0+ICAnLTAuNScKLWZtYXgzNjEyOSBmbWEgIDEgICAwICAnLTVFMCcgICAgICAgLT4gICctNScKLWZtYXgzNjEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnCi1mbWF4MzYxMzEgZm1hICAxICAgMCAgJy01RTUnICAgICAgIC0+ICAnLTUwMDAwMCcKLWZtYXgzNjEzMiBmbWEgIDEgICAwICAnLTVFMTUnICAgICAgLT4gICctNTAwMDAwMDAwMDAwMDAwMCcKLWZtYXgzNjEzMyBmbWEgIDEgICAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQKLWZtYXgzNjEzNCBmbWEgIDEgICAwICAnLTVFMTcnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE3JyAgIFJvdW5kZWQKLWZtYXgzNjEzNSBmbWEgIDEgICAwICAnLTVFMTgnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgIFJvdW5kZWQKLWZtYXgzNjEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQKLQotLS0gcmVsYXRlZAotZm1heDM2MTM3IGZtYSAgMSAgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQKLWZtYXgzNjEzOCBmbWEgIDEgICAtMSAgJzBFLTE5JyAgICAgIC0+ICAnLTEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1mbWF4MzYxMzkgZm1hICAxICAgJzBFLTE5JyAxICAgICAgICAtPiAgJzEuMDAwMDAwMDAwMDAwMDAwJyAgUm91bmRlZAotZm1heDM2MTQwIGZtYSAgMSAgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQKLWZtYXgzNjE0MSBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMCAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnCi1mbWF4MzYxNDIgZm1hICAxICAgMUUrMTEgICAwLjAwMDAwICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJyAgUm91bmRlZAotZm1heDM2MTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcKLWZtYXgzNjE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzEyICAgIC0+ICAnMTAwMDAwMDAwMDAwMC4wMDAnICBSb3VuZGVkCi0KLS0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdCi1mbWF4MzYxNDYgZm1hICAxICAgJzAwLjAnICAwICAgICAgIC0+ICAnMC4wJwotZm1heDM2MTQ3IGZtYSAgMSAgICcwLjAwJyAgMCAgICAgICAtPiAgJzAuMDAnCi1mbWF4MzYxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcKLWZtYXgzNjE0OSBmbWEgIDEgICAgMCAgICAgICcwMC4wJyAgLT4gICcwLjAnCi1mbWF4MzYxNTAgZm1hICAxICAgJzAwLjAnICAnMC4wMCcgIC0+ICAnMC4wMCcKLWZtYXgzNjE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJwotZm1heDM2MTUyIGZtYSAgMSAgICczJyAgICAgJy4zJyAgICAtPiAgJzMuMycKLWZtYXgzNjE1MyBmbWEgIDEgICAnMy4nICAgICcuMycgICAgLT4gICczLjMnCi1mbWF4MzYxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJwotZm1heDM2MTU1IGZtYSAgMSAgICczLjAwJyAgJy4zJyAgICAtPiAgJzMuMzAnCi1mbWF4MzYxNTYgZm1hICAxICAgJzMnICAgICAnMycgICAgIC0+ICAnNicKLWZtYXgzNjE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2JwotZm1heDM2MTU4IGZtYSAgMSAgICczJyAgICAgJy0zJyAgICAtPiAgJzAnCi1mbWF4MzYxNTkgZm1hICAxICAgJzAuMycgICAnLTAuMycgIC0+ICAnMC4wJwotZm1heDM2MTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnCi0KLS0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuCi1mbWF4MzYxNjEgZm1hICAxICAgJzFFKzEzJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTk5JwotZm1heDM2MTYyIGZtYSAgMSAgICcxRSsxMycgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMDEuMTEnCi1mbWF4MzYxNjMgZm1hICAxICAgJzEuMTEnICAnMUUrMTMnIC0+ICcxMDAwMDAwMDAwMDAwMS4xMScKLWZtYXgzNjE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMycgLT4gJzk5OTk5OTk5OTk5OTknCi1mbWF4MzYxNjUgZm1hICAxICAgJzdFKzEzJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5OScKLWZtYXgzNjE2NiBmbWEgIDEgICAnN0UrMTMnICAnMS4xMScgLT4gJzcwMDAwMDAwMDAwMDAxLjExJwotZm1heDM2MTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEzJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnCi1mbWF4MzYxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTMnIC0+ICc2OTk5OTk5OTk5OTk5OScKLQotLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYKLWZtYXgzNjE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MycgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NycgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkCi1mbWF4MzYxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknCi1mbWF4MzYxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTQnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTgnCi1mbWF4MzYxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTMnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTcnCi1mbWF4MzYxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnCi1mbWF4MzYxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTEnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTUnCi1mbWF4MzYxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTQnCi0KLS0tIGFuZCBzb21lIG1vcmUsIGluY2x1ZGluZyByZXNpZHVlIGVmZmVjdHMgYW5kIGRpZmZlcmVudCByb3VuZGluZ3MKLXJvdW5kaW5nOiBoYWxmX3VwCi1mbWF4MzYyMDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCi1mbWF4MzYyMDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjExIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIxMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMTMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjE0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIxNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMTYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCi1mbWF4MzYyMTcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjE4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIxOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLWZtYXgzNjIyMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScKLWZtYXgzNjIyMSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMjIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjIzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIyNCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMjUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjI2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIyNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjI5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIzMCBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDEgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMzEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjMyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIzMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMzQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjM1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIzNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMSAgICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcKLWZtYXgzNjIzNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMzggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjM5IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjEgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLS0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uCi1mbWF4MzYyNDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjQxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI0MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiBkb3duCi1mbWF4MzYyNTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknCi1mbWF4MzYyNTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjUyIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI1MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyNTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjU1IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5ICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI1NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyNTcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDk5OTk5ICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjU4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI1OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyNjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjYxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUxICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI2MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyNjMgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjY0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjk5OTk5ICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI2NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyNjYgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnCi1mbWF4MzYyNjcgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMDAwMDAwMDEgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjY4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjI2OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkCi0KLS0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cwotcm91bmRpbmc6IGhhbGZfZXZlbgotZm1heDM2MzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDAKLWZtYXgzNjMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxCi1mbWF4MzYzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMgotZm1heDM2MzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMKLWZtYXgzNjMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5Ci1mbWF4MzYzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMAotZm1heDM2MzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDEKLWZtYXgzNjMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyCi1mbWF4MzYzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMgotZm1heDM2MzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTEKLWZtYXgzNjMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwCi1mbWF4MzYzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQotZm1heDM2MzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcKLWZtYXgzNjMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4Ci1mbWF4MzYzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQotZm1heDM2MzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDAKLQotZm1heDM2MzIxIGZtYSAgMSAgIC0wLjAxICAwLjAxICAgIC0+ICAwLjAwCi1mbWF4MzYzMjIgZm1hICAxICAgIDAuMDAgIDAuMDEgICAgLT4gIDAuMDEKLWZtYXgzNjMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMgotZm1heDM2MzI0IGZtYSAgMSAgICAwLjEyICAwLjAxICAgIC0+ICAwLjEzCi1mbWF4MzYzMjUgZm1hICAxICAgIDAuOTggIDAuMDEgICAgLT4gIDAuOTkKLWZtYXgzNjMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMAotZm1heDM2MzI3IGZtYSAgMSAgICAxLjAwICAwLjAxICAgIC0+ICAxLjAxCi1mbWF4MzYzMjggZm1hICAxICAgIDEuMDEgIDAuMDEgICAgLT4gIDEuMDIKLWZtYXgzNjMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMgotZm1heDM2MzMwIGZtYSAgMSAgICAwLjAwIC0wLjAxICAgIC0+IC0wLjAxCi1mbWF4MzYzMzEgZm1hICAxICAgIDAuMDEgLTAuMDEgICAgLT4gIDAuMDAKLWZtYXgzNjMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQotZm1heDM2MzMzIGZtYSAgMSAgICAwLjk4IC0wLjAxICAgIC0+ICAwLjk3Ci1mbWF4MzYzMzQgZm1hICAxICAgIDAuOTkgLTAuMDEgICAgLT4gIDAuOTgKLWZtYXgzNjMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQotZm1heDM2MzM2IGZtYSAgMSAgICAxLjAxIC0wLjAxICAgIC0+ICAxLjAwCi0KLS0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50Ci1mbWF4MzYzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMAotZm1heDM2MzQxIGZtYSAgMSAgIDFFKzE1ICAgMCAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAwCi1mbWF4MzYzNDIgZm1hICAxICAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkCi1mbWF4MzYzNDMgZm1hICAxICAgMUUrMTcgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBSb3VuZGVkCi0tLSB3aGljaCBzaW1wbHkgZm9sbG93IGZyb20gdGhlc2UgY2FzZXMgLi4uCi1mbWF4MzYzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQotZm1heDM2MzQ1IGZtYSAgMSAgIDFFKzE1ICAgMSAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDAxCi1mbWF4MzYzNDYgZm1hICAxICAgMUUrMTYgICAxICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjM0NyBmbWEgIDEgICAxRSsxNyAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MzQ4IGZtYSAgMSAgIDFFKzMgICAgNyAgICAtPiAgICAgICAgIDEwMDcKLWZtYXgzNjM0OSBmbWEgIDEgICAxRSsxNSAgIDcgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwNwotZm1heDM2MzUwIGZtYSAgMSAgIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYzNTEgZm1hICAxICAgMUUrMTcgICA3ICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE3ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gdHJ5emVyb3MgY2FzZXMKLWZtYXgzNjM2MSAgZm1hICAxICAgMEUrNTAgMTAwMDBFKzEgIC0+IDEuMDAwMEUrNQotZm1heDM2MzYyICBmbWEgIDEgICAxMDAwMEUrMSAwRS01MCAgLT4gMTAwMDAwLjAwMDAwMDAwMDAgIFJvdW5kZWQKLWZtYXgzNjM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYzNjQgIGZtYSAgMSAgIDEyLjM0ICAgIDBlLTM5OCAgLT4gMTIuMzQwMDAwMDAwMDAwMDAgIFJvdW5kZWQKLQotLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzCi1mbWF4MzY0MDAgZm1hICAxICAgICAxICAgNzdlLTE0ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwNzcKLWZtYXgzNjQwMSBmbWEgIDEgICAgIDEgICA3N2UtMTUgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwNzcKLWZtYXgzNjQwMiBmbWEgIDEgICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MDMgZm1hICAxICAgICAxICAgNzdlLTE3ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xOCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MDYgZm1hICAxICAgICAxICAgNzdlLTk5ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzY0MTAgZm1hICAxICAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3Ci1mbWF4MzY0MTEgZm1hICAxICAgIDEwICAgNzdlLTE1ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZm1heDM2NDEyIGZtYSAgMSAgICAxMCAgIDc3ZS0xNiAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MTQgZm1hICAxICAgIDEwICAgNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDE1IGZtYSAgMSAgICAxMCAgIDc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNjQyMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDA3NwotZm1heDM2NDIxIGZtYSAgMSAgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3NwotZm1heDM2NDIyIGZtYSAgMSAgICA3N2UtMTYgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQyMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MjQgZm1hICAxICAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDI1IGZtYSAgMSAgICA3N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQyNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNjQzMCBmbWEgIDEgICAgNzdlLTE0ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwNzcKLWZtYXgzNjQzMSBmbWEgIDEgICAgNzdlLTE1ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MzIgZm1hICAxICAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDMzIGZtYSAgMSAgICA3N2UtMTcgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQzNCBmbWEgIDEgICAgNzdlLTE4ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0MzUgZm1hICAxICAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDM2IGZtYSAgMSAgICA3N2UtOTkgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gbmVnYXRpdmUgdWxwcwotZm1heDM2NDQwIGZtYSAgMSAgICAgMSAgIC03N2UtMTQgICAgICAtPiAgMC45OTk5OTk5OTk5OTkyMwotZm1heDM2NDQxIGZtYSAgMSAgICAgMSAgIC03N2UtMTUgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMwotZm1heDM2NDQzIGZtYSAgMSAgICAgMSAgIC03N2UtMTcgICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDQ0IGZtYSAgMSAgICAgMSAgIC03N2UtMTggICAgICAtPiAgMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM2NDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NDYgZm1hICAxICAgICAxICAgLTc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZm1heDM2NDUwIGZtYSAgMSAgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ1MSBmbWEgIDEgICAgMTAgICAtNzdlLTE1ICAgICAgLT4gICA5Ljk5OTk5OTk5OTk5OTkyMwotZm1heDM2NDUyIGZtYSAgMSAgICAxMCAgIC03N2UtMTYgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM2NDU0IGZtYSAgMSAgICAxMCAgIC03N2UtMTggICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NTUgZm1hICAxICAgIDEwICAgLTc3ZS0xOSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzY0NjAgZm1hICAxICAgIC03N2UtMTQgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTIzCi1mbWF4MzY0NjEgZm1hICAxICAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMwotZm1heDM2NDYyIGZtYSAgMSAgICAtNzdlLTE2ICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTk5OTk5OTIzCi1mbWF4MzY0NjMgZm1hICAxICAgIC03N2UtMTcgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NjQgZm1hICAxICAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NjUgZm1hICAxICAgIC03N2UtMTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQ2NiBmbWEgIDEgICAgLTc3ZS05OSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzY0NzAgZm1hICAxICAgIC03N2UtMTQgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTkyMwotZm1heDM2NDcxIGZtYSAgMSAgICAtNzdlLTE1ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTIzCi1mbWF4MzY0NzIgZm1hICAxICAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NzMgZm1hICAxICAgIC03N2UtMTcgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0NzQgZm1hICAxICAgIC03N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjQ3NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDc2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG5lZ2F0aXZlIHVscHMKLWZtYXgzNjQ4MCBmbWEgIDEgICAgLTEgICAgNzdlLTE0ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzCi1mbWF4MzY0ODEgZm1hICAxICAgIC0xICAgIDc3ZS0xNSAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ4MiBmbWEgIDEgICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ4MyBmbWEgIDEgICAgLTEgICAgNzdlLTE3ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xOCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM2NDg1IGZtYSAgMSAgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDg2IGZtYSAgMSAgICAtMSAgICA3N2UtOTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzY0OTAgZm1hICAxICAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ5MSBmbWEgIDEgICAtMTAgICAgNzdlLTE1ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMKLWZtYXgzNjQ5MiBmbWEgIDEgICAtMTAgICAgNzdlLTE2ICAgICAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZAotZm1heDM2NDk0IGZtYSAgMSAgIC0xMCAgICA3N2UtMTggICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDk1IGZtYSAgMSAgIC0xMCAgICA3N2UtMTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotZm1heDM2NDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1mbWF4MzY1MDAgZm1hICAxICAgICA3N2UtMTQgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMwotZm1heDM2NTAxIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzCi1mbWF4MzY1MDIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTIzCi1mbWF4MzY1MDMgZm1hICAxICAgICA3N2UtMTcgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZm1heDM2NTA0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUwNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUwNiBmbWEgIDEgICAgIDc3ZS05OSAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotZm1heDM2NTEwIGZtYSAgMSAgICAgNzdlLTE0ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTIzCi1mbWF4MzY1MTEgZm1hICAxICAgICA3N2UtMTUgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzCi1mbWF4MzY1MTIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZAotZm1heDM2NTEzIGZtYSAgMSAgICAgNzdlLTE3ICAgICAgLTEwICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUxNCBmbWEgIDEgICAgIDc3ZS0xOCAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUxNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUxNiBmbWEgIDEgICAgIDc3ZS05OSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotCi0tLSBsb25nIG9wZXJhbmRzCi1mbWF4MzY1MjEgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4MDAwIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE3IFJvdW5kZWQKLWZtYXgzNjUyMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZAotZm1heDM2NTIzIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODAwICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzgwRSsxNiBSb3VuZGVkCi1mbWF4MzY1MjQgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2NzgwMCAgLT4gMS4wMTIzNDU2MjM0NTY3ODBFKzE2IFJvdW5kZWQKLWZtYXgzNjUyNSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZAotZm1heDM2NTI2IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTAgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBSb3VuZGVkCi1mbWF4MzY1MjcgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTEgIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2NTI4IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTEgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUyOSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MDEgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY1MzAgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5MDEgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZAotZm1heDM2NTMxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODk2ICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjUzMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODk2ICAtPiAxLjAxMjM0NTYyMzQ1Njc5MEUrMTYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHZlcmlmeSBhIHF1ZXJ5Ci1yb3VuZGluZzogICAgIGRvd24KLWZtYXgzNjU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2NTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZAotLS0gYW5kIHVzaW5nIGRlY2ltYWw2NCBib3VuZHMuLi4KLXJvdW5kaW5nOiAgICAgZG93bgotZm1heDM2NTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY1NjQgZm1hICAxICAgICAgICAwIDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgLT4gOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCBSb3VuZGVkCi0KLS0tIG1vcmUgemVyb3MsIGV0Yy4KLXJvdW5kaW5nOiBoYWxmX2V2ZW4KLQotZm1heDM2NzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwCi1mbWF4MzY3MDIgZm1hICAxICAgMDAuMDAgMC4wMDAgIC0+IDAuMDAwCi1mbWF4MzY3MDMgZm1hICAxICAgMDAuMDAgMEUtMyAgIC0+IDAuMDAwCi1mbWF4MzY3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwCi0KLWZtYXgzNjcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMAotZm1heDM2NzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjAKLWZtYXgzNjcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMAotZm1heDM2NzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxCi1mbWF4MzY3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzIKLWZtYXgzNjcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMwotZm1heDM2NzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszCi1mbWF4MzY3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMKLWZtYXgzNjcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMAotZm1heDM2NzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMAotZm1heDM2NzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQotCi1mbWF4MzY3MjAgZm1hICAxICAgMDAuMDAgIDBFKzMgIC0+IDAuMDAKLWZtYXgzNjcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wCi1mbWF4MzY3MjIgZm1hICAxICAgMDAuICAgIDBFKzMgIC0+IDAKLWZtYXgzNjcyMyBmbWEgIDEgICAwMC5FKzEgMEUrMyAgLT4gMEUrMQotZm1heDM2NzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyCi1mbWF4MzY3MjUgZm1hICAxICAgMDAuRSszIDBFKzMgIC0+IDBFKzMKLWZtYXgzNjcyNiBmbWEgIDEgICAwMC5FKzQgMEUrMyAgLT4gMEUrMwotZm1heDM2NzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszCi1mbWF4MzY3MjggZm1hICAxICAgLTAwLjAwIDBFKzMgIC0+IDAuMDAKLWZtYXgzNjcyOSBmbWEgIDEgICAtMDAuMCAgMEUrMyAgLT4gMC4wCi1mbWF4MzY3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDAKLQotZm1heDM2NzMyIGZtYSAgMSAgICAwICAgICAwICAgICAtPiAgMAotZm1heDM2NzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMAotZm1heDM2NzM0IGZtYSAgMSAgIC0wICAgICAwICAgICAtPiAgMAotZm1heDM2NzM1IGZtYSAgMSAgIC0wICAgIC0wICAgICAtPiAtMCAgICAgLS0gSUVFRSA4NTQgc3BlY2lhbCBjYXNlCi0KLWZtYXgzNjczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDAKLWZtYXgzNjczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTIKLWZtYXgzNjczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDIKLWZtYXgzNjczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDAKLQotZm1heDM2NzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQotZm1heDM2NzQyIGZtYSAgMSAgIC0wICAgIC0xICAgICAtPiAtMQotZm1heDM2NzQzIGZtYSAgMSAgICAwICAgICAxICAgICAtPiAgMQotZm1heDM2NzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQotZm1heDM2NzQ1IGZtYSAgMSAgIC0xICAgICAwICAgICAtPiAtMQotZm1heDM2NzQ2IGZtYSAgMSAgIC0xICAgIC0wICAgICAtPiAtMQotZm1heDM2NzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQotZm1heDM2NzQ4IGZtYSAgMSAgICAxICAgIC0wICAgICAtPiAgMQotCi1mbWF4MzY3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjAKLWZtYXgzNjc1MiBmbWEgIDEgICAtMC4wICAtMSAgICAgLT4gLTEuMAotZm1heDM2NzUzIGZtYSAgMSAgICAwLjAgICAxICAgICAtPiAgMS4wCi1mbWF4MzY3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjAKLWZtYXgzNjc1NSBmbWEgIDEgICAtMS4wICAgMCAgICAgLT4gLTEuMAotZm1heDM2NzU2IGZtYSAgMSAgIC0xLjAgIC0wICAgICAtPiAtMS4wCi1mbWF4MzY3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjAKLWZtYXgzNjc1OCBmbWEgIDEgICAgMS4wICAtMCAgICAgLT4gIDEuMAotCi1mbWF4MzY3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjAKLWZtYXgzNjc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMAotZm1heDM2NzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wCi1mbWF4MzY3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjAKLWZtYXgzNjc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMAotZm1heDM2NzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wCi1mbWF4MzY3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjAKLWZtYXgzNjc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMAotCi1mbWF4MzY3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjAKLWZtYXgzNjc3MiBmbWEgIDEgICAtMC4wICAtMS4wICAgLT4gLTEuMAotZm1heDM2NzczIGZtYSAgMSAgICAwLjAgICAxLjAgICAtPiAgMS4wCi1mbWF4MzY3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjAKLWZtYXgzNjc3NSBmbWEgIDEgICAtMS4wICAgMC4wICAgLT4gLTEuMAotZm1heDM2Nzc2IGZtYSAgMSAgIC0xLjAgIC0wLjAgICAtPiAtMS4wCi1mbWF4MzY3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjAKLWZtYXgzNjc3OCBmbWEgIDEgICAgMS4wICAtMC4wICAgLT4gIDEuMAotCi0tLSBTcGVjaWFscwotZm1heDM2NzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLWZtYXgzNjc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5Ci1mbWF4MzY3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotZm1heDM2NzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkKLWZtYXgzNjc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1mbWF4MzY3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotZm1heDM2Nzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkKLWZtYXgzNjc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4MzY3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotZm1heDM2Nzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWZtYXgzNjc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4MzY3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotZm1heDM2NzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkKLWZtYXgzNjc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5Ci1mbWF4MzY3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLWZtYXgzNjgwMCBmbWEgIDEgICAgSW5mICAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzNjgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5Ci1mbWF4MzY4MDIgZm1hICAxICAgIEluZiAgLTEgICAgIC0+ICBJbmZpbml0eQotZm1heDM2ODAzIGZtYSAgMSAgICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKLWZtYXgzNjgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5Ci1mbWF4MzY4MDUgZm1hICAxICAgIEluZiAgIDEgICAgIC0+ICBJbmZpbml0eQotZm1heDM2ODA2IGZtYSAgMSAgICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLWZtYXgzNjgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1mbWF4MzY4MDggZm1hICAxICAgLTEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQotZm1heDM2ODA5IGZtYSAgMSAgIC1JbmYgICBJbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzNjgxMSBmbWEgIDEgICAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5Ci1mbWF4MzY4MTIgZm1hICAxICAgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQotZm1heDM2ODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLWZtYXgzNjgxNCBmbWEgIDEgICAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5Ci1mbWF4MzY4MTUgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1mbWF4MzY4MjEgZm1hICAxICAgIE5hTiAtSW5mICAgIC0+ICBOYU4KLWZtYXgzNjgyMiBmbWEgIDEgICAgTmFOIC0xMDAwICAgLT4gIE5hTgotZm1heDM2ODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFOCi1mbWF4MzY4MjQgZm1hICAxICAgIE5hTiAtMCAgICAgIC0+ICBOYU4KLWZtYXgzNjgyNSBmbWEgIDEgICAgTmFOICAwICAgICAgLT4gIE5hTgotZm1heDM2ODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFOCi1mbWF4MzY4MjcgZm1hICAxICAgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLWZtYXgzNjgyOCBmbWEgIDEgICAgTmFOICBJbmYgICAgLT4gIE5hTgotZm1heDM2ODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFOCi1mbWF4MzY4MzAgZm1hICAxICAgLUluZiAgTmFOICAgIC0+ICBOYU4KLWZtYXgzNjgzMSBmbWEgIDEgICAtMTAwMCBOYU4gICAgLT4gIE5hTgotZm1heDM2ODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFOCi1mbWF4MzY4MzMgZm1hICAxICAgLTAgICAgTmFOICAgIC0+ICBOYU4KLWZtYXgzNjgzNCBmbWEgIDEgICAgMCAgICBOYU4gICAgLT4gIE5hTgotZm1heDM2ODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFOCi1mbWF4MzY4MzYgZm1hICAxICAgIDEwMDAgTmFOICAgIC0+ICBOYU4KLWZtYXgzNjgzNyBmbWEgIDEgICAgSW5mICBOYU4gICAgLT4gIE5hTgotCi1mbWF4MzY4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWZtYXgzNjg2MSBmbWEgIDEgICAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLWZtYXgzNjg2MiBmbWEgIDEgICArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjIKLWZtYXgzNjg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLWZtYXgzNjg2NCBmbWEgIDEgICAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLWZtYXgzNjg2NSBmbWEgIDEgICAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUKLWZtYXgzNjg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLWZtYXgzNjg2NyBmbWEgIDEgICAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLWZtYXgzNjg2OCBmbWEgIDEgICAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkKLWZtYXgzNjg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1mbWF4MzY4NzEgZm1hICAxICAgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzNjg3MiBmbWEgIDEgICAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NzQgZm1hICAxICAgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzNjg3NSBmbWEgIDEgICAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4NzcgZm1hICAxICAgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzNjg3OCBmbWEgIDEgICAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzY4ODAgZm1hICAxICAgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLWZtYXgzNjg4MSBmbWEgIDEgICArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLWZtYXgzNjg4MyBmbWEgIDEgICAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2ODg0IGZtYSAgMSAgICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzAKLWZtYXgzNjg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsCi0tLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UKLS0tIGNhbm5vdCByZXByZXNlbnQgMUUtMzk5LCBmb3IgZXhhbXBsZV0KLQotZm1heDM2NTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMKLWZtYXgzNjU3MiBmbWEgIDEgICAgICAgICAxRS0zODQgICAgICAgMCAgLT4gMUUtMzg0ICAgU3Vibm9ybWFsCi1mbWF4MzY1NzMgZm1hICAxICAgICAgICAgMUUtMzgzICAxRS0zODQgIC0+IDEuMUUtMzgzCi1mbWF4MzY1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwKLQotLS0gSGVyZSB3ZSBleHBsb3JlIHRoZSBib3VuZGFyeSBvZiByb3VuZGluZyBhIHN1Ym5vcm1hbCB0byBObWluCi1mbWF4MzY1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCi1mbWF4MzY1NzYgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsCi1mbWF4MzY1Nzcgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk5ICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLWZtYXgzNjU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZAotZm1heDM2NTc5IHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkCi1mbWF4MzY1ODAgc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAyICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQKLQotLS0gY2hlY2sgb3ZlcmZsb3cgZWRnZSBjYXNlCi0tLSAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYKLWZtYXgzNjk3MiBhcHBseSAgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQKLWZtYXgzNjk3MyBmbWEgIDEgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY5NzQgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTc1IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTc2IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA5RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTc3IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA4RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTc4IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTc5IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA2RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTgwIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA1RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTgxIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY5ODIgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDNFKzM2OCAgLT4gOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjk4MyBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMkUrMzY4ICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNjk4NSBhcHBseSAgICAgICAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0Ci1mbWF4MzY5ODYgZm1hICAxICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjk4NyBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMSAgICAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTg4IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjk4OSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY5OTAgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLThFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTkxIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC03RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjk5MiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzY5OTMgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTVFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTk0IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC00RSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTk1IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTk2IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0yRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotZm1heDM2OTk3IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0xRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZAotCi0tLSBBbmQgZm9yIHJvdW5kIGRvd24gZnVsbCBhbmQgc3Vibm9ybWFsIHJlc3VsdHMKLXJvdW5kaW5nOiAgICAgZG93bgotZm1heDM2MTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTAxIGZtYSAgMSAgIDFlKzEgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTAzIGZtYSAgMSAgICAgKzEgLTFlLTM4MyAgICAtPiAwLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTA1IGZtYSAgMSAgIDFlLTIgLTFlLTM4MyAgICAtPiAwLjAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTA2IGZtYSAgMSAgIDFlLTMgLTFlLTM4MyAgICAtPiAwLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTA4IGZtYSAgMSAgIDFlLTUgLTFlLTM4MyAgICAtPiAwLjAwMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0Ci1mbWF4MzYxMTA5IGZtYSAgMSAgIDFlLTYgLTFlLTM4MyAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0Ci0KLXJvdW5kaW5nOiAgICAgY2VpbGluZwotZm1heDM2MTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzNjExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzNjExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdAotZm1heDM2MTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QKLWZtYXgzNjExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0Ci0KLS0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlCi1yb3VuZGluZzogICAgIGhhbGZfZXZlbgotCi1mbWF4MzYxMzAwIGZtYSAgMSAgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzEwIGZtYSAgMSAgIDFFMTYgIC0wLjUxICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzExIGZtYSAgMSAgIDFFMTYgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzEyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzEzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAxICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAxICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzE5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAxICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzIwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzIxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzIyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAxICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzIzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMCAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzI5IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzMwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzMxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzMyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMCAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzMzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMCAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMCAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzM5IGZtYSAgMSAgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi0KLWZtYXgzNjEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotZm1heDM2MTM0OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNCAgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzUxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTkgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM1MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzU0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTkgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM1NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzU3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTkgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM1OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzYwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTkgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM2MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzYzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTkgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM2NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5OSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzY3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM2OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzcwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM3MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzczIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM3NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzc2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM3NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzc5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzgyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAxICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM4MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzg1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAxICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM4NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzg4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAxICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM4OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAxICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzkxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAxICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM5MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAxICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYxMzk0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAxICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZAotZm1heDM2MTM5NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAxICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkCi0tLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwCi1mbWF4MzYxNDIwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1ICAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQyMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDIzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0zICAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQyNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDI2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS02ICAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQyNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKLWZtYXgzNjE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04Ci1mbWF4MzYxNDI5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS05ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQotZm1heDM2MTQzMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCi1mbWF4MzYxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEKLWZtYXgzNjE0MzIgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEyIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMgotZm1heDM2MTQzMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCi1mbWF4MzYxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQKLWZtYXgzNjE0MzUgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE1IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQotZm1heDM2MTQzNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2Ci1mbWF4MzYxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcKLWZtYXgzNjE0MzggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE4IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOAotZm1heDM2MTQzOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5Ci0KLS0tIHNhbWUsIHJldmVyc2VkIDAKLWZtYXgzNjE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcKLWZtYXgzNjE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgKLWZtYXgzNjE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkKLWZtYXgzNjE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwCi1mbWF4MzYxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQotZm1heDM2MTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIKLWZtYXgzNjE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzCi1mbWF4MzYxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNAotZm1heDM2MTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUKLWZtYXgzNjE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2Ci1mbWF4MzYxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNwotZm1heDM2MTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgKLWZtYXgzNjE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5Ci0KLS0tIHNhbWUsIEVzIG9uIHRoZSAwCi1mbWF4MzYxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NjEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQ2MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMiAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NjQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTQgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQ2NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NjcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTcgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQ2OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtOCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NzAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEwICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQ3MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTEgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLWZtYXgzNjE0NzMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEzICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQotZm1heDM2MTQ3NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTQgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1Ci1mbWF4MzYxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUKLS0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQKLWZtYXgzNjE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi1mbWF4MzYxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZAotZm1heDM2MTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQKLWZtYXgzNjE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkCi0KLS0tIHN1bSBvZiB0d28gb3Bwb3NpdGUtc2lnbiBvcGVyYW5kcyBpcyBleGFjdGx5IDAgYW5kIGZsb29yID0+IC0wCi1yb3VuZGluZzogICAgaGFsZl91cAotLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcwotZm1heDM2MTUwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDM2MTUwMSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQotZm1heDM2MTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQotZm1heDM2MTUwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQotZm1heDM2MTUwNCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDM2MTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDM2MTUwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDM2MTUwNyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZAotLS0gaW5leGFjdCB6ZXJvcwotZm1heDM2MTUxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM2MTUxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM2MTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM2MTUxNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZm1heDM2MTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotZm1heDM2MTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDM2MTUxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZAotZm1heDM2MTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzYxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzYxNTI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzYxNTMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1mbWF4MzYxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLS0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MKLWZtYXgzNjE1NDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzNjE1NDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzNjE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkKLWZtYXgzNjE1NDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkKLWZtYXgzNjE1NDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQKLS0tIGluZXhhY3QgemVyb3MKLWZtYXgzNjE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE1NTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWZtYXgzNjE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE1NTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLQotcm91bmRpbmc6ICAgIHVwCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzYxNTYwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTYxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTYzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzYxNTY0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTY2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTY3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzYxNTcxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDM2MTU3MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzNjE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzYxNTc0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcwotZm1heDM2MTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzNjE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQKLWZtYXgzNjE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0KLXJvdW5kaW5nOiAgICBkb3duCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzYxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTgxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzYxNTg0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTg3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzYxNTkxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTkyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTk0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0tLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zCi1mbWF4MzYxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNTk2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTk3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLXJvdW5kaW5nOiAgICBjZWlsaW5nCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzYxNjAwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNjAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNjAzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzYxNjA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjA2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzYxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDM2MTYxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLWZtYXgzNjE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWZtYXgzNjE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci1mbWF4MzYxNjE2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi0KLS0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKgotcm91bmRpbmc6ICAgIGZsb29yCi0tLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zCi1mbWF4MzYxNjIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5Ci1mbWF4MzYxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1mbWF4MzYxNjIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqCi1mbWF4MzYxNjIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5Ci1mbWF4MzYxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkCi1mbWF4MzYxNjI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCi1mbWF4MzYxNjI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqCi1mbWF4MzYxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkCi0tLSBpbmV4YWN0IHplcm9zCi1mbWF4MzYxNjMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkCi1mbWF4MzYxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdwotZm1heDM2MTYzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cKLS0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MKLWZtYXgzNjE2MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQKLWZtYXgzNjE2MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKLWZtYXgzNjE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoKLWZtYXgzNjE2MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93Ci0KLS0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQotZm1heDM2MTcwMSBmbWEgIDEgICAxMzBFLTIgICAgMTIwRS0yICAgIC0+IDIuNTAKLWZtYXgzNjE3MDIgZm1hICAxICAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwCi1mbWF4MzYxNzAzIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMAotZm1heDM2MTcwNCBmbWEgIDEgICAxRTIgICAgICAgMUU0ICAgICAgIC0+IDEuMDFFKzQKLWZtYXgzNjE3MDUgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMAotZm1heDM2MTcwNiBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwCi1mbWF4MzYxNzA3IHN1YnRyYWN0IDEzMEUtMiAgMUUwICAgIC0+IDAuMzAKLWZtYXgzNjE3MDggc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMwotCi0tLSBHYXBweSBjb2VmZmljaWVudHM7IGNoZWNrIHJlc2lkdWUgaGFuZGxpbmcgZXZlbiB3aXRoIGZ1bGwgY29lZmZpY2llbnQgZ2FwCi1yb3VuZGluZzogaGFsZl9ldmVuCi0KLWZtYXgzNjIwMDEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAxICAgICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NwotZm1heDM2MjAwMiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDAuNiAgICAtPiAxMjM0NTY3ODkwMTIzNDU3ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMDMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDA0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAwNSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTQgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMDYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDA3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNiAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAwOCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTcgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMDkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDEwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtOSAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAxMSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEwICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMTIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDEzIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTIgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAxNCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEzICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMTUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDE2IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTUgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAxNyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE2ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMTggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDE5IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTggIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjAyMCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE5ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwMjEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHdpZGVuaW5nIHNlY29uZCBhcmd1bWVudCBhdCBnYXAKLWZtYXgzNjIwMzAgZm1hICAxICAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkKLWZtYXgzNjIwMzEgZm1hICAxICAgMTIzNDU2NzggMC4xICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMQotZm1heDM2MjAzMiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMgotZm1heDM2MjAzMyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMKLWZtYXgzNjIwMzQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0ICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNAotZm1heDM2MjAzNSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1ICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NQotZm1heDM2MjAzNiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYKLWZtYXgzNjIwMzcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NwotZm1heDM2MjAzOCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4ICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OAotZm1heDM2MjAzOSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNDAgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUgICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDQxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MCAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA0MiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNDMgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMSAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDQ0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAxICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA0NSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNDYgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMSAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDQ3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAxICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA0OCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNDkgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5MDEyMzQ1Ngotcm91bmRpbmc6IGhhbGZfZXZlbgotZm1heDM2MjA1MCBmbWEgIDEgICAxMjM0NTY3OCAwLjAyMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMjM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNTEgZm1hICAxICAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDUyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA1MyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDA1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwNTY3OCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNTQgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDU1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA1NiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDA3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNTcgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDYwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA2MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNjIgZm1hICAxICAgMTIzNDU2NzggMC4wMDA0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwNDU2NzggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDYzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA2NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNjUgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDA3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwNzggSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDY2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA2NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLS0tIGZhci1vdXQgcmVzaWR1ZXMgKGZ1bGwgY29lZmZpY2llbnQgZ2FwIGlzIDE2KzE1IGRpZ2l0cykKLXJvdW5kaW5nOiB1cAotZm1heDM2MjA3MCBmbWEgIDEgICAxMjM0NTY3OCAxRS04ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMQotZm1heDM2MjA3MSBmbWEgIDEgICAxMjM0NTY3OCAxRS05ICAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNzIgZm1hICAxICAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDczIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTExICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA3NCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNzUgZm1hICAxICAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDc2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA3NyBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwNzggZm1hICAxICAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDc5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE3ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA4MCBmbWEgIDEgICAxMjM0NTY3OCAxRS0xOCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwODEgZm1hICAxICAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDgyIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTIwICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA4MyBmbWEgIDEgICAxMjM0NTY3OCAxRS0yNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwODQgZm1hICAxICAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDg1IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMxICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA4NiBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMiAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLWZtYXgzNjIwODcgZm1hICAxICAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkCi1mbWF4MzYyMDg4IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM0ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZAotZm1heDM2MjA4OSBmbWEgIDEgICAxMjM0NTY3OCAxRS0zNSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gcGF5bG9hZCBkZWNhcGl0YXRlIHgzCi1wcmVjaXNpb246IDUKLWZtYXgzNjMwMDAgZm1hICAxIDEgIHNOYU4xMjM0NTY3ODkwICAgICAtPiAgTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCi1mbWF4MzYzMDAxIGZtYSAgICAxIC1zTmFOMTIzNDUxMjM0NSAxICAgLT4gLU5hTjEyMzQ1ICBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM2MzAwMiBmbWEgICAgICAgc05hTjEyMzQ1NTQzMjEgMSAxIC0+ICBOYU41NDMyMSAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTnVsbCB0ZXN0cwotZm1heDM5OTkwIGZtYSAgMSAgIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotZm1heDM5OTkxIGZtYSAgMSAgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gZm1hLmRlY1Rlc3QgLS0gZGVjaW1hbCBmdXNlZCBtdWx0aXBseSBhZGQgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KKy0tIFRoZXNlIHRlc3RzIGNvbXByZXNlIHRocmVlIHBhcnRzOg0KKy0tICAgMS4gU2FuaXR5IGNoZWNrcyBhbmQgb3RoZXIgdGhyZWUtb3BlcmFuZCB0ZXN0cyAoZXNwZWNpYWxseSB0aG9zZQ0KKy0tICAgICAgd2hlcmUgdGhlIGZ1c2VkIG9wZXJhdGlvbiBtYWtlcyBhIGRpZmZlcmVuY2UpDQorLS0gICAyLiBNdWx0aXBseSB0ZXN0cyAodGhpcmQgb3BlcmFuZCBpcyBuZXV0cmFsIHplcm8gWzBFK2VtYXhdKQ0KKy0tICAgMy4gQWRkaXRpb24gdGVzdHMgKGZpcnN0IG9wZXJhbmQgaXMgMSkNCistLSBUaGUgbXVsdGlwbHkgYW5kIGFkZGl0aW9uIHRlc3RzIGFyZSBleHRlbnNpdmUgYmVjYXVzZSBGTUEgbWF5IGhhdmUNCistLSBpdHMgb3duIGRlZGljYXRlZCBtdWx0aXBsaWNhdGlvbiBvciBhZGRpdGlvbiByb3V0aW5lKHMpLCBhbmQgdGhleQ0KKy0tIGFsc28gaW5oZXJlbnRseSBjaGVjayB0aGUgbGVmdC10by1yaWdodCBwcm9wZXJ0aWVzLg0KKw0KKy0tIFNhbml0eSBjaGVja3MNCitmbWF4MDAwMSBmbWEgIDEgICAxICAgMSAtPiAgIDINCitmbWF4MDAwMiBmbWEgIDEgICAxICAgMiAtPiAgIDMNCitmbWF4MDAwMyBmbWEgIDIgICAyICAgMyAtPiAgIDcNCitmbWF4MDAwNCBmbWEgIDkgICA5ICAgOSAtPiAgOTANCitmbWF4MDAwNSBmbWEgLTEgICAxICAgMSAtPiAgIDANCitmbWF4MDAwNiBmbWEgLTEgICAxICAgMiAtPiAgIDENCitmbWF4MDAwNyBmbWEgLTIgICAyICAgMyAtPiAgLTENCitmbWF4MDAwOCBmbWEgLTkgICA5ICAgOSAtPiAtNzINCitmbWF4MDAxMSBmbWEgIDEgIC0xICAgMSAtPiAgIDANCitmbWF4MDAxMiBmbWEgIDEgIC0xICAgMiAtPiAgIDENCitmbWF4MDAxMyBmbWEgIDIgIC0yICAgMyAtPiAgLTENCitmbWF4MDAxNCBmbWEgIDkgIC05ICAgOSAtPiAtNzINCitmbWF4MDAxNSBmbWEgIDEgICAxICAtMSAtPiAgIDANCitmbWF4MDAxNiBmbWEgIDEgICAxICAtMiAtPiAgLTENCitmbWF4MDAxNyBmbWEgIDIgICAyICAtMyAtPiAgIDENCitmbWF4MDAxOCBmbWEgIDkgICA5ICAtOSAtPiAgNzINCitmbWF4MDAxOSBmbWEgIDMgICA1ICAgNyAtPiAgMjINCitmbWF4MDAyOSBmbWEgIDMgIC01ICAgNyAtPiAgLTgNCisNCistLSBub24taW50ZWdlciBleGFjdHMNCitmbWEwMTAwICBmbWEgICAgMjUuMiAgIDYzLjYgICAtNDM4ICAtPiAgMTE2NC43Mg0KK2ZtYTAxMDEgIGZtYSAgIDAuMzAxICAwLjM4MCAgICAzMzQgIC0+ICAzMzQuMTE0MzgwDQorZm1hMDEwMiAgZm1hICAgIDQ5LjIgICAtNC44ICAgMjMuMyAgLT4gIC0yMTIuODYNCitmbWEwMTAzICBmbWEgICAgNC4yMiAgMC4wNzkgIC05NC42ICAtPiAgLTk0LjI2NjYyDQorZm1hMDEwNCAgZm1hICAgICA5MDMgIDAuNzk3ICAwLjg4NyAgLT4gIDcyMC41NzgNCitmbWEwMTA1ICBmbWEgICAgNi4xMyAgIC0xNjEgICA2NS45ICAtPiAgLTkyMS4wMw0KK2ZtYTAxMDYgIGZtYSAgICAyOC4yICAgIDcyNyAgIDUuNDUgIC0+ICAyMDUwNi44NQ0KK2ZtYTAxMDcgIGZtYSAgICAgICA0ICAgIDYwNSAgICA2ODggIC0+ICAzMTA4DQorZm1hMDEwOCAgZm1hICAgIDkzLjMgICAwLjE5ICAwLjIyNiAgLT4gIDE3Ljk1Mw0KK2ZtYTAxMDkgIGZtYSAgIDAuMTY5ICAgLTM0MSAgIDUuNjEgIC0+ICAtNTIuMDE5DQorZm1hMDExMCAgZm1hICAgLTcyLjIgICAgIDMwICAtNTEuMiAgLT4gIC0yMjE3LjINCitmbWEwMTExICBmbWEgIC0wLjQwOSAgICAgMTMgICAyMC40ICAtPiAgMTUuMDgzDQorZm1hMDExMiAgZm1hICAgICAzMTcgICA3Ny4wICAgMTkuMCAgLT4gIDI0NDI4LjANCitmbWEwMTEzICBmbWEgICAgICA0NyAgIDYuNTggICAxLjYyICAtPiAgMzEwLjg4DQorZm1hMDExNCAgZm1hICAgIDEuMzYgIDAuOTg0ICAwLjQ5MyAgLT4gIDEuODMxMjQNCitmbWEwMTE1ICBmbWEgICAgNzIuNyAgICAyNzQgICAxLjU2ICAtPiAgMTk5MjEuMzYNCitmbWEwMTE2ICBmbWEgICAgIDMzNSAgICA4NDcgICAgIDgzICAtPiAgMjgzODI4DQorZm1hMDExNyAgZm1hICAgICA2NjYgIDAuMjQ3ICAgMjUuNCAgLT4gIDE4OS45MDINCitmbWEwMTE4ICBmbWEgICAtMy44NyAgIDMuMDYgICA3OC4wICAtPiAgNjYuMTU3OA0KK2ZtYTAxMTkgIGZtYSAgIDAuNzQyICAgIDE5MiAgIDM1LjYgIC0+ICAxNzguMDY0DQorZm1hMDEyMCAgZm1hICAgLTkxLjYgICA1LjI5ICAwLjE1MyAgLT4gIC00ODQuNDExDQorDQorLS0gY2FzZXMgd2hlcmUgcmVzdWx0IGlzIGRpZmZlcmVudCBmcm9tIHNlcGFyYXRlIG11bHRpcGx5ICsgYWRkOyBlYWNoDQorLS0gaXMgcHJlY2VkZWQgYnkgdGhlIHJlc3VsdCBvZiB1bmZ1c2VkIG11bHRpcGx5IGFuZCBhZGQNCistLSBbdGhpcyBpcyBhYm91dCAyMCUgb2YgYWxsIHNpbWlsYXIgIGNhc2VzIGluIGdlbmVyYWxdDQorLS0gICAgICAgICAgICAgICA4ODg1NjUyOTAgICAxNTU3Ljk2OTMwICAtODYwODcuNzU3OCAgLT4gMS4zODQzNTczNUUrMTINCitmbWEwMjAxICBmbWEgICAgIDg4ODU2NTI5MCAgIDE1NTcuOTY5MzAgIC04NjA4Ny43NTc4ICAtPiAxLjM4NDM1NzM2RSsxMiAgSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODRFKzE2DQorZm1hMDIwNSAgZm1hICAgLTg1NTE5MzQyLjkgICAgNzM1MTU1NDE5ICAgICA0MjAxMDQzMSAgLT4gLTYuMjg3MDAwODNFKzE2IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgIC05ODAyNS41ICAtMjk0NjAzLjQ3MiAgIDEwNDE0MzQ4LjIgIC0+IDIuODg4OTA2NjlFKzEwDQorZm1hMDIwOCAgZm1hICAgICAgLTk4MDI1LjUgIC0yOTQ2MDMuNDcyICAgMTA0MTQzNDguMiAgLT4gMi44ODg5MDY3MEUrMTAgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICA1OTY3NjI3LjM5ICAgODM1MjY1NDAuNiAgIDQ5ODQ5NC44MTAgIC0+IDQuOTg0NTUyNzFFKzE0DQorZm1hMDIxMSAgZm1hICAgIDU5Njc2MjcuMzkgICA4MzUyNjU0MC42ICAgNDk4NDk0LjgxMCAgLT4gNC45ODQ1NTI3MkUrMTQgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgMzQ1Ni45NDMzICAgIDg3NC4zOTUxOCAgIDE5Nzg2Ni42MTUgIC0+ICAzMjIwNjAxLjE4DQorZm1hMDIxNiAgZm1hICAgICAzNDU2Ljk0MzMgICAgODc0LjM5NTE4ICAgMTk3ODY2LjYxNSAgLT4gIDMyMjA2MDEuMTcgICAgIEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICA2Mjc2OS44Mjg3ICAgMjA5Ni45ODkyNyAgICA0OC40MjAzMTcgIC0+ICAxMzE2Mjc3MDUNCitmbWEwMjE4ICBmbWEgICAgNjI3NjkuODI4NyAgIDIwOTYuOTg5MjcgICAgNDguNDIwMzE3ICAtPiAgMTMxNjI3NzA2ICAgICAgSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgICAtNjguODE1MDAgICA1OTk2MTExMy45ICAgICAtODk4ODg2MiAgLT4gLTQuMTM1MjEyOTFFKzkNCitmbWEwMjE5ICBmbWEgICAgIC02OC44MTUwMCAgIDU5OTYxMTEzLjkgICAgIC04OTg4ODYyICAtPiAtNC4xMzUyMTI5MkUrOSAgSW5leGFjdCBSb3VuZGVkDQorLS0gICAgICAgICAgICAgIDIxMjYzNDEuMDIgICA2MzQ5MS41MTUyICAgIDMwMjQyNzQ1NSAgLT4gMS4zNTMwNzA0MEUrMTENCitmbWEwMjI2ICBmbWEgICAgMjEyNjM0MS4wMiAgIDYzNDkxLjUxNTIgICAgMzAyNDI3NDU1ICAtPiAxLjM1MzA3MDQxRSsxMSAgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS0gSW5maW5pdGUgY29tYmluYXRpb25zDQorZm1heDA4MDAgZm1hICBJbmYgICBJbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQorZm1heDA4MDEgZm1hICBJbmYgICBJbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgwODAyIGZtYSAgSW5mICAtSW5mICAgSW5mICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MDgwMyBmbWEgIEluZiAgLUluZiAgLUluZiAgICAtPiAtSW5maW5pdHkNCitmbWF4MDgwNCBmbWEgLUluZiAgIEluZiAgIEluZiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDA4MDUgZm1hIC1JbmYgICBJbmYgIC1JbmYgICAgLT4gLUluZmluaXR5DQorZm1heDA4MDYgZm1hIC1JbmYgIC1JbmYgICBJbmYgICAgLT4gIEluZmluaXR5DQorZm1heDA4MDcgZm1hIC1JbmYgIC1JbmYgIC1JbmYgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgwODA4IGZtYSAtSW5mICAgMCAgICAgICAxICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MDgwOSBmbWEgLUluZiAgIDAgICAgIE5hTiAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gVHJpcGxlIE5hTiBwcm9wYWdhdGlvbg0KK2ZtYXgwOTAwIGZtYSAgTmFOMiAgTmFOMyAgTmFONSAgIC0+ICBOYU4yDQorZm1heDA5MDEgZm1hICAwICAgICBOYU4zICBOYU41ICAgLT4gIE5hTjMNCitmbWF4MDkwMiBmbWEgIDAgICAgIDAgICAgIE5hTjUgICAtPiAgTmFONQ0KKy0tIGZpcnN0IHNOYU4gd2lucyAoY29uc2lkZXIgcU5hTiBmcm9tIGVhcmxpZXIgc05hTiBiZWluZw0KKy0tIG92ZXJyaWRkZW4gYnkgYW4gc05hTiBpbiB0aGlyZCBvcGVyYW5kKQ0KK2ZtYXgwOTAzIGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDA5MDQgZm1hICAwICAgICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MDkwNSBmbWEgIDAgICAgIDAgICAgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgwOTA2IGZtYSAgc05hTjEgc05hTjIgc05hTjMgIC0+ICBOYU4xIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDA5MDcgZm1hICBOYU43ICBzTmFOMiBzTmFOMyAgLT4gIE5hTjIgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MDkwOCBmbWEgIE5hTjcgIE5hTjUgIHNOYU4zICAtPiAgTmFOMyBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE1VTFRJUExJQ0FUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIHNhbml0eSBjaGVja3MgKGFzIGJhc2UsIGFib3ZlKQ0KK2ZtYXgyMDAwIGZtYSAyICAgICAgMiAgMEUrOTk5OTk5ICAtPiA0DQorZm1heDIwMDEgZm1hIDIgICAgICAzICAwRSs5OTk5OTkgIC0+IDYNCitmbWF4MjAwMiBmbWEgNSAgICAgIDEgIDBFKzk5OTk5OSAgLT4gNQ0KK2ZtYXgyMDAzIGZtYSA1ICAgICAgMiAgMEUrOTk5OTk5ICAtPiAxMA0KK2ZtYXgyMDA0IGZtYSAxLjIwICAgMiAgMEUrOTk5OTk5ICAtPiAyLjQwDQorZm1heDIwMDUgZm1hIDEuMjAgICAwICAwRSs5OTk5OTkgIC0+IDAuMDANCitmbWF4MjAwNiBmbWEgMS4yMCAgLTIgIDBFKzk5OTk5OSAgLT4gLTIuNDANCitmbWF4MjAwNyBmbWEgLTEuMjAgIDIgIDBFKzk5OTk5OSAgLT4gLTIuNDANCitmbWF4MjAwOCBmbWEgLTEuMjAgIDAgIDBFKzk5OTk5OSAgLT4gMC4wMA0KK2ZtYXgyMDA5IGZtYSAtMS4yMCAtMiAgMEUrOTk5OTk5ICAtPiAyLjQwDQorZm1heDIwMTAgZm1hIDUuMDkgNy4xICAwRSs5OTk5OTkgIC0+IDM2LjEzOQ0KK2ZtYXgyMDExIGZtYSAyLjUgICAgNCAgMEUrOTk5OTk5ICAtPiAxMC4wDQorZm1heDIwMTIgZm1hIDIuNTAgICA0ICAwRSs5OTk5OTkgIC0+IDEwLjAwDQorZm1heDIwMTMgZm1hIDEuMjM0NTY3ODkgMS4wMDAwMDAwMCAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5IFJvdW5kZWQNCitmbWF4MjAxNCBmbWEgOS45OTk5OTk5OTkgOS45OTk5OTk5OTkgIDBFKzk5OTk5OSAgLT4gMTAwLjAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjAxNSBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDANCitwcmVjaXNpb246IDYNCitmbWF4MjAxNiBmbWEgMi41MCAgIDQgIDBFKzk5OTk5OSAgLT4gMTAuMDANCitmbWF4MjAxNyBmbWEgIDkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjAxOCBmbWEgIDkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjAxOSBmbWEgLTkuOTk5OTk5ICA5Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjAyMCBmbWEgLTkuOTk5OTk5IC05Ljk5OTk5OSAgMEUrOTk5OTk5ICAtPiAgMTAwLjAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAxOTk5LjEyLjIxOiBuZXh0IG9uZSBpcyBhIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQNCitwcmVjaXNpb246IDE1DQorZm1heDIwNTkgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzANCitmbWF4MjE2MCBmbWEgOTk5OTk5OTk5OTk5IDk3NjU2MjUgIDBFKzk5OTk5OSAgLT4gOTc2NTYyNDk5OTk5MDIzNDM3NQ0KK3ByZWNpc2lvbjogOQ0KKy0tLS0tDQorDQorLS0gemVyb3MsIGV0Yy4NCitmbWF4MjAyMSBmbWEgIDAgICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KK2ZtYXgyMDIyIGZtYSAgMCAgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQorZm1heDIwMjMgZm1hIC0wICAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCitmbWF4MjAyNCBmbWEgLTAgICAgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KK2ZtYXgyMDI1IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQorZm1heDIwMjYgZm1hIC0wLjAgICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCitmbWF4MjAyNyBmbWEgLTAuMCAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KK2ZtYXgyMDI4IGZtYSAtMC4wICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQorZm1heDIwMzAgZm1hICA1LjAwICAgMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDANCitmbWF4MjAzMSBmbWEgIDAwLjAwICAwLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMA0KK2ZtYXgyMDMyIGZtYSAgMDAuMDAgIDBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2ZtYXgyMDMzIGZtYSAgMEUtMyAgIDAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KK2ZtYXgyMDM0IGZtYSAtNS4wMCAgIDFFLTMgICAwRSs5OTk5OTkgIC0+IC0wLjAwNTAwDQorZm1heDIwMzUgZm1hIC0wMC4wMCAgMC4wMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDANCitmbWF4MjAzNiBmbWEgLTAwLjAwICAwRS0zICAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gcmhzIGlzIDANCitmbWF4MjAzNyBmbWEgLTBFLTMgICAwMC4wMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMCAgICAgLS0gbGhzIGlzIDANCitmbWF4MjAzOCBmbWEgIDUuMDAgIC0xRS0zICAgMEUrOTk5OTk5ICAtPiAtMC4wMDUwMA0KK2ZtYXgyMDM5IGZtYSAgMDAuMDAgLTAuMDAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwDQorZm1heDIwNDAgZm1hICAwMC4wMCAtMEUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIHJocyBpcyAwDQorZm1heDIwNDEgZm1hICAwRS0zICAtMDAuMDAgIDBFKzk5OTk5OSAgLT4gIDAuMDAwMDAgICAgIC0tIGxocyBpcyAwDQorZm1heDIwNDIgZm1hIC01LjAwICAtMUUtMyAgIDBFKzk5OTk5OSAgLT4gIDAuMDA1MDANCitmbWF4MjA0MyBmbWEgLTAwLjAwIC0wLjAwMCAgMEUrOTk5OTk5ICAtPiAgMC4wMDAwMA0KK2ZtYXgyMDQ0IGZtYSAtMDAuMDAgLTBFLTMgICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSByaHMgaXMgMA0KK2ZtYXgyMDQ1IGZtYSAtMEUtMyAgLTAwLjAwICAwRSs5OTk5OTkgIC0+ICAwLjAwMDAwICAgICAtLSBsaHMgaXMgMA0KKw0KKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGggbXVsdGlwbHkNCitmbWF4MjA1MCBmbWEgMS4yMCAzICAgICAgICAgMEUrOTk5OTk5ICAtPiAzLjYwDQorZm1heDIwNTEgZm1hIDcgICAgMyAgICAgICAgIDBFKzk5OTk5OSAgLT4gMjENCitmbWF4MjA1MiBmbWEgMC45ICAwLjggICAgICAgMEUrOTk5OTk5ICAtPiAwLjcyDQorZm1heDIwNTMgZm1hIDAuOSAgLTAgICAgICAgIDBFKzk5OTk5OSAgLT4gMC4wDQorZm1heDIwNTQgZm1hIDY1NDMyMSA2NTQzMjEgIDBFKzk5OTk5OSAgLT4gNC4yODEzNTk3MUUrMTEgIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgyMDYwIGZtYSAxMjMuNDUgMWU3ICAgMEUrOTk5OTk5ICAtPiAgMS4yMzQ1RSs5DQorZm1heDIwNjEgZm1hIDEyMy40NSAxZTggICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEwDQorZm1heDIwNjIgZm1hIDEyMy40NSAxZSs5ICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzExDQorZm1heDIwNjMgZm1hIDEyMy40NSAxZTEwICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEyDQorZm1heDIwNjQgZm1hIDEyMy40NSAxZTExICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzEzDQorZm1heDIwNjUgZm1hIDEyMy40NSAxZTEyICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE0DQorZm1heDIwNjYgZm1hIDEyMy40NSAxZTEzICAwRSs5OTk5OTkgIC0+ICAxLjIzNDVFKzE1DQorDQorDQorLS0gdGVzdCBzb21lIGludGVybWVkaWF0ZSBsZW5ndGhzDQorcHJlY2lzaW9uOiA5DQorZm1heDIwODAgZm1hIDAuMSAxMjM0NTY3ODkgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KK2ZtYXgyMDgxIGZtYSAwLjEgMTIzNDU2Nzg5MSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjA4MiBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyMDgzIGZtYSAwLjEgMTIzNDU2Nzg5MTIzNDUgICAgICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyMDg0IGZtYSAwLjEgMTIzNDU2Nzg5ICAgICAgICAgICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkNCitwcmVjaXNpb246IDgNCitmbWF4MjA4NSBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDIwODYgZm1hIDAuMSAxMjM0NTY3ODkxMjM0NSAgICAgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDcNCitmbWF4MjA4NyBmbWEgMC4xIDEyMzQ1Njc4OTEyICAgICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjA4OCBmbWEgMC4xIDEyMzQ1Njc4OTEyMzQ1ICAgICAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQorDQorcHJlY2lzaW9uOiA5DQorZm1heDIwOTAgZm1hIDEyMzQ1Njc4OSAgICAgICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMTIzNDU2NzguOQ0KK2ZtYXgyMDkxIGZtYSAxMjM0NTY3ODkxICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjA5MiBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyMDkzIGZtYSAxMjM0NTY3ODkxMjM0NSAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEuMjM0NTY3ODlFKzEyIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyMDk0IGZtYSAxMjM0NTY3ODkgICAgICAgICAgMC4xICAwRSs5OTk5OTkgIC0+IDEyMzQ1Njc4LjkNCitwcmVjaXNpb246IDgNCitmbWF4MjA5NSBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2NzlFKzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDIwOTYgZm1hIDEyMzQ1Njc4OTEyMzQ1ICAgICAwLjEgIDBFKzk5OTk5OSAgLT4gMS4yMzQ1Njc5RSsxMiBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDcNCitmbWF4MjA5NyBmbWEgMTIzNDU2Nzg5MTIgICAgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrOSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjA5OCBmbWEgMTIzNDU2Nzg5MTIzNDUgICAgIDAuMSAgMEUrOTk5OTk5ICAtPiAxLjIzNDU2OEUrMTIgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyBhbmQgY2Fycmllcw0KK21heGV4cG9uZW50OiA5OTk5DQorbWluZXhwb25lbnQ6IC05OTk5DQorcHJlY2lzaW9uOiAzMw0KK2ZtYXgyMTAxIGZtYSA5IDkgICAgMEUrOTk5OTk5ICAtPiA4MQ0KK2ZtYXgyMTAyIGZtYSA5IDkwICAgIDBFKzk5OTk5OSAgLT4gODEwDQorZm1heDIxMDMgZm1hIDkgOTAwICAgIDBFKzk5OTk5OSAgLT4gODEwMA0KK2ZtYXgyMTA0IGZtYSA5IDkwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMA0KK2ZtYXgyMTA1IGZtYSA5IDkwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwDQorZm1heDIxMDYgZm1hIDkgOTAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMA0KK2ZtYXgyMTA3IGZtYSA5IDkwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMA0KK2ZtYXgyMTA4IGZtYSA5IDkwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwDQorZm1heDIxMDkgZm1hIDkgOTAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMA0KK2ZtYXgyMTEwIGZtYSA5IDkwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMA0KK2ZtYXgyMTExIGZtYSA5IDkwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwDQorZm1heDIxMTIgZm1hIDkgOTAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMA0KK2ZtYXgyMTEzIGZtYSA5IDkwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMA0KK2ZtYXgyMTE0IGZtYSA5IDkwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwDQorZm1heDIxMTUgZm1hIDkgOTAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTE2IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTE3IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwDQorZm1heDIxMTggZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTE5IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTIwIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwDQorZm1heDIxMjEgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTIyIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTIzIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwDQorLS0gdGVzdCBzb21lIG1vcmUgZWRnZSBjYXNlcyB3aXRob3V0IGNhcnJpZXMNCitmbWF4MjEzMSBmbWEgMyAzICAgIDBFKzk5OTk5OSAgLT4gOQ0KK2ZtYXgyMTMyIGZtYSAzIDMwICAgIDBFKzk5OTk5OSAgLT4gOTANCitmbWF4MjEzMyBmbWEgMyAzMDAgICAgMEUrOTk5OTk5ICAtPiA5MDANCitmbWF4MjEzNCBmbWEgMyAzMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMA0KK2ZtYXgyMTM1IGZtYSAzIDMwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDANCitmbWF4MjEzNiBmbWEgMyAzMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDANCitmbWF4MjEzNyBmbWEgMyAzMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMA0KK2ZtYXgyMTM4IGZtYSAzIDMwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDANCitmbWF4MjEzOSBmbWEgMyAzMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDANCitmbWF4MjE0MCBmbWEgMyAzMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMA0KK2ZtYXgyMTQxIGZtYSAzIDMwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDANCitmbWF4MjE0MiBmbWEgMyAzMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDANCitmbWF4MjE0MyBmbWEgMyAzMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMA0KK2ZtYXgyMTQ0IGZtYSAzIDMwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDANCitmbWF4MjE0NSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDANCitmbWF4MjE0NiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTQ3IGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDANCitmbWF4MjE0OCBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDANCitmbWF4MjE0OSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTUwIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDANCitmbWF4MjE1MSBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA5MDAwMDAwMDAwMDAwMDAwMDAwMDANCitmbWF4MjE1MiBmbWEgMyAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMA0KK2ZtYXgyMTUzIGZtYSAzIDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDANCisNCittYXhleHBvbmVudDogOTk5OTk5DQorbWluZXhwb25lbnQ6IC05OTk5OTkNCitwcmVjaXNpb246IDkNCistLSB0ZXN0IHNvbWUgY2FzZXMgdGhhdCBhcmUgY2xvc2UgdG8gZXhwb25lbnQgb3ZlcmZsb3cvdW5kZXJmbG93DQorZm1heDIxNzAgZm1hIDEgOWU5OTk5OTkgICAgIDBFKzk5OTk5OSAgLT4gOUUrOTk5OTk5DQorZm1heDIxNzEgZm1hIDEgOS45ZTk5OTk5OSAgIDBFKzk5OTk5OSAgLT4gOS45RSs5OTk5OTkNCitmbWF4MjE3MiBmbWEgMSA5Ljk5ZTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5Ljk5RSs5OTk5OTkNCitmbWF4MjE3MyBmbWEgOWU5OTk5OTkgICAgMSAgMEUrOTk5OTk5ICAtPiA5RSs5OTk5OTkNCitmbWF4MjE3NCBmbWEgOS45ZTk5OTk5OSAgMSAgMEUrOTk5OTk5ICAtPiA5LjlFKzk5OTk5OQ0KK2ZtYXgyMTc2IGZtYSA5Ljk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTlFKzk5OTk5OQ0KK2ZtYXgyMTc3IGZtYSAxIDkuOTk5OTllOTk5OTk5ICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQ0KK2ZtYXgyMTc4IGZtYSA5Ljk5OTk5ZTk5OTk5OSAxICAwRSs5OTk5OTkgIC0+IDkuOTk5OTlFKzk5OTk5OQ0KKw0KK2ZtYXgyMTgwIGZtYSAwLjEgOWUtOTk5OTk4ICAgIDBFKzk5OTk5OSAgLT4gOUUtOTk5OTk5DQorZm1heDIxODEgZm1hIDAuMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OA0KK2ZtYXgyMTgyIGZtYSAwLjEgOTk5ZS05OTk5OTggIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk3DQorDQorZm1heDIxODMgZm1hIDAuMSA5ZS05OTk5OTggICAgICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OQ0KK2ZtYXgyMTg0IGZtYSAwLjEgOTllLTk5OTk5OCAgICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5OA0KK2ZtYXgyMTg1IGZtYSAwLjEgOTk5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5Ljk5RS05OTk5OTcNCitmbWF4MjE4NiBmbWEgMC4xIDk5OWUtOTk5OTk3ICAgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2DQorZm1heDIxODcgZm1hIDAuMSA5OTk5ZS05OTk5OTcgICAwRSs5OTk5OTkgIC0+IDkuOTk5RS05OTk5OTUNCitmbWF4MjE4OCBmbWEgMC4xIDk5OTk5ZS05OTk5OTcgIDBFKzk5OTk5OSAgLT4gOS45OTk5RS05OTk5OTQNCisNCitmbWF4MjE5MCBmbWEgMSA5ZS05OTk5OTggICAgMEUrOTk5OTk5ICAtPiA5RS05OTk5OTgNCitmbWF4MjE5MSBmbWEgMSA5OWUtOTk5OTk4ICAgMEUrOTk5OTk5ICAtPiA5LjlFLTk5OTk5Nw0KK2ZtYXgyMTkyIGZtYSAxIDk5OWUtOTk5OTk4ICAwRSs5OTk5OTkgIC0+IDkuOTlFLTk5OTk5Ng0KK2ZtYXgyMTkzIGZtYSA5ZS05OTk5OTggICAxICAwRSs5OTk5OTkgIC0+IDlFLTk5OTk5OA0KK2ZtYXgyMTk0IGZtYSA5OWUtOTk5OTk4ICAxICAwRSs5OTk5OTkgIC0+IDkuOUUtOTk5OTk3DQorZm1heDIxOTUgZm1hIDk5OWUtOTk5OTk4IDEgIDBFKzk5OTk5OSAgLT4gOS45OUUtOTk5OTk2DQorDQorLS0gbG9uZyBvcGVyYW5kIHRyaWFuZ2xlDQorcHJlY2lzaW9uOiAzMw0KK2ZtYXgyMjQ2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MzAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMg0KK2ZtYXgyMjQ3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4MyAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMQ0KK2ZtYXgyMjQ4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTI4ICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMA0KK2ZtYXgyMjQ5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OTMgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyOQ0KK2ZtYXgyMjUwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTE5OSAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyOA0KK2ZtYXgyMjUxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIwICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNw0KK2ZtYXgyMjUyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MTIgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNg0KK2ZtYXgyMjUzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1MSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNQ0KK2ZtYXgyMjU0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTY1ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNA0KK2ZtYXgyMjU1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMw0KK2ZtYXgyMjU2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5MiAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMg0KK2ZtYXgyMjU3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzE5ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMQ0KK2ZtYXgyMjU4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NzIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMA0KK2ZtYXgyMjU5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk2NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxOQ0KK2ZtYXgyMjYwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNjk3ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxOA0KK2ZtYXgyMjYxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNw0KK2ZtYXgyMjYyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMzNyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNg0KK2ZtYXgyMjYzIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTM0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNQ0KK2ZtYXgyMjY0IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOTMgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNA0KK2ZtYXgyMjY1IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDExOSAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMw0KK2ZtYXgyMjY2IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEyICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMg0KK2ZtYXgyMjY3IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MDEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMQ0KK2ZtYXgyMjY4IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4MCAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMA0KK2ZtYXgyMjY5IGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTA4ICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgOQ0KK2ZtYXgyMjcwIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOTEgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgOA0KK2ZtYXgyMjcxIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4yOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgNw0KK2ZtYXgyMjcyIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMy4zICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgNg0KK2ZtYXgyMjczIGZtYSAzMDI2OS41ODc3NTU2NDA1MDIxNTA5NzcyNTE3NzA1NTQgNC44MDQ2MDA5NzM1OTkwODczMzk1OTM2MzA5NjQwNTQzICAwRSs5OTk5OTkgIC0+IDE0NTQzMyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICA1DQorZm1heDIyNzQgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NTQzRSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogIDQNCitmbWF4MjI3NSBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxLjQ1NEUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAzDQorZm1heDIyNzYgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS40NUUrNSAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAyDQorZm1heDIyNzcgZm1hIDMwMjY5LjU4Nzc1NTY0MDUwMjE1MDk3NzI1MTc3MDU1NCA0LjgwNDYwMDk3MzU5OTA4NzMzOTU5MzYzMDk2NDA1NDMgIDBFKzk5OTk5OSAgLT4gMS41RSs1ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogIDENCitmbWF4MjI3OCBmbWEgMzAyNjkuNTg3NzU1NjQwNTAyMTUwOTc3MjUxNzcwNTU0IDQuODA0NjAwOTczNTk5MDg3MzM5NTkzNjMwOTY0MDU0MyAgMEUrOTk5OTk5ICAtPiAxRSs1ICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSB0ZXN0IHNvbWUgZWRnZSBjYXNlcyB3aXRoIGV4YWN0IHJvdW5kaW5nDQorbWF4ZXhwb25lbnQ6IDk5OTkNCittaW5leHBvbmVudDogLTk5OTkNCitwcmVjaXNpb246IDkNCitmbWF4MjMwMSBmbWEgOSA5ICAgIDBFKzk5OTk5OSAgLT4gODENCitmbWF4MjMwMiBmbWEgOSA5MCAgICAwRSs5OTk5OTkgIC0+IDgxMA0KK2ZtYXgyMzAzIGZtYSA5IDkwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDANCitmbWF4MjMwNCBmbWEgOSA5MDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDANCitmbWF4MjMwNSBmbWEgOSA5MDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMA0KK2ZtYXgyMzA2IGZtYSA5IDkwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDANCitmbWF4MjMwNyBmbWEgOSA5MDAwMDAwICAgIDBFKzk5OTk5OSAgLT4gODEwMDAwMDANCitmbWF4MjMwOCBmbWEgOSA5MDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDgxMDAwMDAwMA0KK2ZtYXgyMzA5IGZtYSA5IDkwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzkgICBSb3VuZGVkDQorZm1heDIzMTAgZm1hIDkgOTAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEwICBSb3VuZGVkDQorZm1heDIzMTEgZm1hIDkgOTAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxMSAgUm91bmRlZA0KK2ZtYXgyMzEyIGZtYSA5IDkwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEyICBSb3VuZGVkDQorZm1heDIzMTMgZm1hIDkgOTAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzEzICBSb3VuZGVkDQorZm1heDIzMTQgZm1hIDkgOTAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNCAgUm91bmRlZA0KK2ZtYXgyMzE1IGZtYSA5IDkwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE1ICBSb3VuZGVkDQorZm1heDIzMTYgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE2ICBSb3VuZGVkDQorZm1heDIzMTcgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsxNyAgUm91bmRlZA0KK2ZtYXgyMzE4IGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE4ICBSb3VuZGVkDQorZm1heDIzMTkgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzE5ICBSb3VuZGVkDQorZm1heDIzMjAgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMCAgUm91bmRlZA0KK2ZtYXgyMzIxIGZtYSA5IDkwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIxICBSb3VuZGVkDQorZm1heDIzMjIgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgICAwRSs5OTk5OTkgIC0+IDguMTAwMDAwMDBFKzIyICBSb3VuZGVkDQorZm1heDIzMjMgZm1hIDkgOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgICAgMEUrOTk5OTk5ICAtPiA4LjEwMDAwMDAwRSsyMyAgUm91bmRlZA0KKw0KKy0tIGZhc3RwYXRoIGJyZWFrZXJzDQorcHJlY2lzaW9uOiAgIDI5DQorZm1heDIzMzAgZm1hIDEuNDkxODI0Njk3NjQxMjcwMzE3ODI0ODUyOTUyODM3MjI0IDEuMTA1MTcwOTE4MDc1NjQ3NjI0ODExNzA3ODI2NDkwMjQ2NTE0Njc1NjI4NjE0NTYyODgzNTM3MzQ1NzQ3NjAzICAwRSs5OTk5OTkgIC0+IDEuNjQ4NzIxMjcwNzAwMTI4MTQ2ODQ4NjUwNzg3OCBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgNTUNCitmbWF4MjMzMSBmbWEgMC44OTU4MzQxMzUyOTY1MjgyNTA2NzY4NTQ1ODI4NzY1MTE3ODAzODczNzE3Mjg0ODkxMDQwNDI4IDAuODk1ODM0MTM1Mjk2NTI4MjUwNjc2ODU0NTgyODc2NTExNzgwMzg3MzcxNzI4NDg5MTA0MDQyOCAgMEUrOTk5OTk5ICAtPiAwLjgwMjUxODc5Nzk2MjQ3ODQ4Mjk4NDI1NTM4Mjk5MzQwNjk5NTU4OTA5ODM2OTY3NTIyMjgyOTkgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCitwcmVjaXNpb246ICAgNw0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDkyDQorbWluZXhwb25lbnQ6IC05Mg0KK2ZtYXgyNTA0ICBmbWEgIDBFLTYwIDEwMDBFLTYwICAgMEUrOTk5OTk5ICAtPiAwRS05OCBDbGFtcGVkDQorZm1heDI1MDUgIGZtYSAgMTAwRSs2MCAwRSs2MCAgICAwRSs5OTk5OTkgIC0+IDBFKzkyIENsYW1wZWQNCisNCistLSBtaXhlZCB3aXRoIHplcm9zDQorbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KK21pbmV4cG9uZW50OiAtOTk5OTk5DQorcHJlY2lzaW9uOiA5DQorZm1heDI1NDEgZm1hICAwICAgIC0xICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KK2ZtYXgyNTQyIGZtYSAtMCAgICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIDANCitmbWF4MjU0MyBmbWEgIDAgICAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwDQorZm1heDI1NDQgZm1hIC0wICAgICAxICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KK2ZtYXgyNTQ1IGZtYSAtMSAgICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCitmbWF4MjU0NiBmbWEgLTEgICAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwDQorZm1heDI1NDcgZm1hICAxICAgICAwICAgICAgMEUrOTk5OTk5ICAtPiAgMA0KK2ZtYXgyNTQ4IGZtYSAgMSAgICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIDANCisNCitmbWF4MjU1MSBmbWEgIDAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1MiBmbWEgLTAuMCAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1MyBmbWEgIDAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1NCBmbWEgLTAuMCAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1NSBmbWEgLTEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1NiBmbWEgLTEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1NyBmbWEgIDEuMCAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU1OCBmbWEgIDEuMCAgLTAgICAgICAwRSs5OTk5OTkgIC0+ICAwLjANCisNCitmbWF4MjU2MSBmbWEgIDAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2MiBmbWEgLTAgICAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2MyBmbWEgIDAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2NCBmbWEgLTAgICAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2NSBmbWEgLTEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2NiBmbWEgLTEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2NyBmbWEgIDEgICAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCitmbWF4MjU2OCBmbWEgIDEgICAgLTAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjANCisNCitmbWF4MjU3MSBmbWEgIDAuMCAgLTEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQorZm1heDI1NzIgZm1hIC0wLjAgIC0xLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KK2ZtYXgyNTczIGZtYSAgMC4wICAgMS4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCitmbWF4MjU3NCBmbWEgLTAuMCAgIDEuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQorZm1heDI1NzUgZm1hIC0xLjAgICAwLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KK2ZtYXgyNTc2IGZtYSAtMS4wICAtMC4wICAgIDBFKzk5OTk5OSAgLT4gIDAuMDANCitmbWF4MjU3NyBmbWEgIDEuMCAgIDAuMCAgICAwRSs5OTk5OTkgIC0+ICAwLjAwDQorZm1heDI1NzggZm1hICAxLjAgIC0wLjAgICAgMEUrOTk5OTk5ICAtPiAgMC4wMA0KKw0KKw0KKy0tIFNwZWNpYWxzDQorZm1heDI1ODAgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCitmbWF4MjU4MSBmbWEgIEluZiAgLTEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KK2ZtYXgyNTgyIGZtYSAgSW5mICAtMSAgICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQorZm1heDI1ODMgZm1hICBJbmYgIC0wICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNTg0IGZtYSAgSW5mICAgMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjU4NSBmbWEgIEluZiAgIDEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KK2ZtYXgyNTg2IGZtYSAgSW5mICAgMTAwMCAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQorZm1heDI1ODcgZm1hICBJbmYgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCitmbWF4MjU4OCBmbWEgLTEwMDAgIEluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KK2ZtYXgyNTg5IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQorZm1heDI1OTAgZm1hIC0xICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCitmbWF4MjU5MSBmbWEgLTAgICAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI1OTIgZm1hICAwICAgICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNTkzIGZtYSAgMSAgICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQorZm1heDI1OTQgZm1hICAxMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCitmbWF4MjU5NSBmbWEgIEluZiAgIEluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KKw0KK2ZtYXgyNjAwIGZtYSAtSW5mICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQorZm1heDI2MDEgZm1hIC1JbmYgIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgSW5maW5pdHkNCitmbWF4MjYwMiBmbWEgLUluZiAgLTEgICAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KK2ZtYXgyNjAzIGZtYSAtSW5mICAtMCAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjYwNCBmbWEgLUluZiAgIDAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2MDUgZm1hIC1JbmYgICAxICAgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCitmbWF4MjYwNiBmbWEgLUluZiAgIDEwMDAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KK2ZtYXgyNjA3IGZtYSAtSW5mICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQorZm1heDI2MDggZm1hIC0xMDAwICBJbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCitmbWF4MjYwOSBmbWEgLUluZiAgLUluZiAgICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eQ0KK2ZtYXgyNjEwIGZtYSAtMSAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5DQorZm1heDI2MTEgZm1hIC0wICAgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjEyIGZtYSAgMCAgICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjYxMyBmbWEgIDEgICAgLUluZiAgICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eQ0KK2ZtYXgyNjE0IGZtYSAgMTAwMCAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5DQorZm1heDI2MTUgZm1hICBJbmYgIC1JbmYgICAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkNCisNCitmbWF4MjYyMSBmbWEgIE5hTiAtSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyMiBmbWEgIE5hTiAtMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyMyBmbWEgIE5hTiAtMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyNCBmbWEgIE5hTiAtMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyNSBmbWEgIE5hTiAgMCAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyNiBmbWEgIE5hTiAgMSAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyNyBmbWEgIE5hTiAgMTAwMCAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyOCBmbWEgIE5hTiAgSW5mICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYyOSBmbWEgIE5hTiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzMCBmbWEgLUluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzMSBmbWEgLTEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzMiBmbWEgLTEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzMyBmbWEgLTAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzNCBmbWEgIDAgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzNSBmbWEgIDEgICAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzNiBmbWEgIDEwMDAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCitmbWF4MjYzNyBmbWEgIEluZiAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU4NCisNCitmbWF4MjY0MSBmbWEgIHNOYU4gLUluZiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NDIgZm1hICBzTmFOIC0xMDAwICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjQzIGZtYSAgc05hTiAtMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY0NCBmbWEgIHNOYU4gLTAgICAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NDUgZm1hICBzTmFOICAwICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjQ2IGZtYSAgc05hTiAgMSAgICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY0NyBmbWEgIHNOYU4gIDEwMDAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NDggZm1hICBzTmFOICBOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjQ5IGZtYSAgc05hTiBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY1MCBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NTEgZm1hIC1JbmYgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjUyIGZtYSAtMTAwMCBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY1MyBmbWEgLTEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NTQgZm1hIC0wICAgIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjU1IGZtYSAgMCAgICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY1NiBmbWEgIDEgICAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NTcgZm1hICAxMDAwIHNOYU4gICAgMEUrOTk5OTk5ICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjU4IGZtYSAgSW5mICBzTmFOICAgIDBFKzk5OTk5OSAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY1OSBmbWEgIE5hTiAgc05hTiAgICAwRSs5OTk5OTkgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2ZtYXgyNjYxIGZtYSAgTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gIE5hTjkNCitmbWF4MjY2MiBmbWEgIE5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+ICBOYU44DQorZm1heDI2NjMgZm1hICBOYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAgTmFONzENCitmbWF4MjY2NCBmbWEgIE5hTjYgIE5hTjUgICAwRSs5OTk5OTkgIC0+ICBOYU42DQorZm1heDI2NjUgZm1hIC1JbmYgICBOYU40ICAgMEUrOTk5OTk5ICAtPiAgTmFONA0KK2ZtYXgyNjY2IGZtYSAtOTk5ICAgTmFOMzMgIDBFKzk5OTk5OSAgLT4gIE5hTjMzDQorZm1heDI2NjcgZm1hICBJbmYgICBOYU4yICAgMEUrOTk5OTk5ICAtPiAgTmFOMg0KKw0KK2ZtYXgyNjcxIGZtYSAgc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NzIgZm1hICBzTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY3MyBmbWEgIHNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+ICBOYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjc0IGZtYSAgc05hTjE2IHNOYU45NCAgIDBFKzk5OTk5OSAgLT4gIE5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NzUgZm1hICBOYU45NSAgc05hTjkzICAgMEUrOTk5OTk5ICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY3NiBmbWEgLUluZiAgICBzTmFOOTIgICAwRSs5OTk5OTkgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjc3IGZtYSAgMDg4ICAgIHNOYU45MSAgIDBFKzk5OTk5OSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2NzggZm1hICBJbmYgICAgc05hTjkwICAgMEUrOTk5OTk5ICAtPiAgTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY3OSBmbWEgIE5hTiAgICBzTmFOODkgICAwRSs5OTk5OTkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2ZtYXgyNjgxIGZtYSAtTmFOOSAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTjkNCitmbWF4MjY4MiBmbWEgLU5hTjggIDk5OSAgICAwRSs5OTk5OTkgIC0+IC1OYU44DQorZm1heDI2ODMgZm1hIC1OYU43MSBJbmYgICAgMEUrOTk5OTk5ICAtPiAtTmFONzENCitmbWF4MjY4NCBmbWEgLU5hTjYgLU5hTjUgICAwRSs5OTk5OTkgIC0+IC1OYU42DQorZm1heDI2ODUgZm1hIC1JbmYgIC1OYU40ICAgMEUrOTk5OTk5ICAtPiAtTmFONA0KK2ZtYXgyNjg2IGZtYSAtOTk5ICAtTmFOMzMgIDBFKzk5OTk5OSAgLT4gLU5hTjMzDQorZm1heDI2ODcgZm1hICBJbmYgIC1OYU4yICAgMEUrOTk5OTk5ICAtPiAtTmFOMg0KKw0KK2ZtYXgyNjkxIGZtYSAtc05hTjk5IC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTjk5IEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2OTIgZm1hIC1zTmFOOTggLTExICAgICAgMEUrOTk5OTk5ICAtPiAtTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY5MyBmbWEgLXNOYU45NyAgTmFOICAgICAwRSs5OTk5OTkgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjk0IGZtYSAtc05hTjE2IC1zTmFOOTQgIDBFKzk5OTk5OSAgLT4gLU5hTjE2IEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2OTUgZm1hIC1OYU45NSAgLXNOYU45MyAgMEUrOTk5OTk5ICAtPiAtTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY5NiBmbWEgLUluZiAgICAtc05hTjkyICAwRSs5OTk5OTkgIC0+IC1OYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNjk3IGZtYSAgMDg4ICAgIC1zTmFOOTEgIDBFKzk5OTk5OSAgLT4gLU5hTjkxIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI2OTggZm1hICBJbmYgICAgLXNOYU45MCAgMEUrOTk5OTk5ICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MjY5OSBmbWEgLU5hTiAgICAtc05hTjg5ICAwRSs5OTk5OTkgIC0+IC1OYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK2ZtYXgyNzAxIGZtYSAtTmFOICAtSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzAyIGZtYSAtTmFOICAgOTk5ICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzAzIGZtYSAtTmFOICAgSW5mICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzA0IGZtYSAtTmFOICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzA1IGZtYSAtSW5mICAtTmFOMCAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzA2IGZtYSAtOTk5ICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KK2ZtYXgyNzA3IGZtYSAgSW5mICAtTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTg0KKw0KK2ZtYXgyNzExIGZtYSAtc05hTiAgIC1JbmYgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzEyIGZtYSAtc05hTiAgIC0xMSAgICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzEzIGZtYSAtc05hTjAwICBOYU4gICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE0IGZtYSAtc05hTiAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE1IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE2IGZtYSAtSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE3IGZtYSAgMDg4ICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE4IGZtYSAgSW5mICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgyNzE5IGZtYSAtTmFOICAgIC1zTmFOICAgIDBFKzk5OTk5OSAgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4gbm90ZSBzdWJub3JtYWwgcmVzdWx0cw0KK21heGV4cG9uZW50OiA5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OQ0KK2ZtYXgyNzMwIGZtYSArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTkgIDBFKzk5OTk5OSAgLT4gSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZm1heDI3MzEgZm1hIDlFKzk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitmbWF4MjczMiBmbWEgKzAuMTAwIDlFLTk5OTk5OSAgMEUrOTk5OTk5ICAtPiA5LjAwRS0xMDAwMDAwIFN1Ym5vcm1hbA0KK2ZtYXgyNzMzIGZtYSA5RS05OTk5OTkgKzAuMTAwICAwRSs5OTk5OTkgIC0+IDkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQorZm1heDI3MzUgZm1hIC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIDlFKzk5OTk5OSAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZm1heDI3MzYgZm1hIDlFKzk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAgMEUrOTk5OTk5ICAtPiAtSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZm1heDI3MzcgZm1hIC0wLjEwMCA5RS05OTk5OTkgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQorZm1heDI3MzggZm1hIDlFLTk5OTk5OSAtMC4xMDAgIDBFKzk5OTk5OSAgLT4gLTkuMDBFLTEwMDAwMDAgU3Vibm9ybWFsDQorDQorLS0gc2lnbnMNCitmbWF4Mjc1MSBmbWEgIDFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc1MiBmbWEgIDFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc1MyBmbWEgLTFlKzc3Nzc3NyAgMWUrNDExMTExICAwRSs5OTk5OTkgIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc1NCBmbWEgLTFlKzc3Nzc3NyAtMWUrNDExMTExICAwRSs5OTk5OTkgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc1NSBmbWEgIDFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitmbWF4Mjc1NiBmbWEgIDFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitmbWF4Mjc1NyBmbWEgLTFlLTc3Nzc3NyAgMWUtNDExMTExICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitmbWF4Mjc1OCBmbWEgLTFlLTc3Nzc3NyAtMWUtNDExMTExICAwRSs5OTk5OTkgIC0+ICAwRS0xMDAwMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCistLSAnc3Vibm9ybWFsJyBib3VuZGFyeSAoYWxsIGhhcmQgdW5kZXJmbG93IG9yIG92ZXJmbG93IGluIGJhc2UgYXJpdGhlbXRpYykNCitwcmVjaXNpb246IDkNCitmbWF4Mjc2MCBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDAxIFN1Ym5vcm1hbA0KK2ZtYXgyNzYxIGZtYSAxZS02MDAwMDAgMWUtNDAwMDAyICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDIgU3Vibm9ybWFsDQorZm1heDI3NjIgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDMgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwNCitmbWF4Mjc2MyBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA0IFN1Ym5vcm1hbA0KK2ZtYXgyNzY0IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA1ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDUgU3Vibm9ybWFsDQorZm1heDI3NjUgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDYgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwNiBTdWJub3JtYWwNCitmbWF4Mjc2NiBmbWEgMWUtNjAwMDAwIDFlLTQwMDAwNyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDA3IFN1Ym5vcm1hbA0KK2ZtYXgyNzY3IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2ZtYXgyNzY4IGZtYSAxZS02MDAwMDAgMWUtNDAwMDA5ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2ZtYXgyNzY5IGZtYSAxZS02MDAwMDAgMWUtNDAwMDEwICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwMDcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKy0tIFtubyBlcXVpdmFsZW50IG9mICdzdWJub3JtYWwnIGZvciBvdmVyZmxvd10NCitmbWF4Mjc3MCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3MSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3MiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwMyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3MyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3NCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3NSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNiAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3NiBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwNyAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3NyBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3OCBmbWEgMWUrNjAwMDAwIDFlKzQwMDAwOSAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mjc3OSBmbWEgMWUrNjAwMDAwIDFlKzQwMDAxMCAgMEUrOTk5OTk5ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAnc3Vibm9ybWFsJyB0ZXN0IGVkZ2UgY29uZGl0aW9uIGF0IGhpZ2hlciBwcmVjaXNpb25zDQorcHJlY2lzaW9uOiA5OQ0KK2ZtYXgyNzgwIGZtYSAxZS02MDAwMDAgMWUtNDAwMDA3ICAwRSs5OTk5OTkgIC0+IDFFLTEwMDAwMDcgU3Vibm9ybWFsDQorZm1heDI3ODEgZm1hIDFlLTYwMDAwMCAxZS00MDAwMDggIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDAwOCBTdWJub3JtYWwNCitmbWF4Mjc4MiBmbWEgMWUtNjAwMDAwIDFlLTQwMDA5NyAgMEUrOTk5OTk5ICAtPiAxRS0xMDAwMDk3IFN1Ym5vcm1hbA0KK2ZtYXgyNzgzIGZtYSAxZS02MDAwMDAgMWUtNDAwMDk4ICAwRSs5OTk5OTkgIC0+IDBFLTEwMDAwOTcgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK3ByZWNpc2lvbjogOTk5DQorZm1heDI3ODQgZm1hIDFlLTYwMDAwMCAxZS00MDA5OTcgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMDk5NyBTdWJub3JtYWwNCitmbWF4Mjc4NSBmbWEgMWUtNjAwMDAwIDFlLTQwMDk5OCAgMEUrOTk5OTk5ICAtPiAwRS0xMDAwOTk3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCistLSB0ZXN0IHN1Ym5vcm1hbHMgcm91bmRpbmcNCitwcmVjaXNpb246ICAgNQ0KK21heEV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitmbWF4MjgwMSBmbWEgIDEuMDAwMEUtOTk5ICAxICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDBFLTk5OQ0KK2ZtYXgyODAyIGZtYSAgMS4wMDBFLTk5OSAgIDFlLTEgICAwRSs5OTk5OTkgIC0+IDEuMDAwRS0xMDAwIFN1Ym5vcm1hbA0KK2ZtYXgyODAzIGZtYSAgMS4wMEUtOTk5ICAgIDFlLTIgICAwRSs5OTk5OTkgIC0+IDEuMDBFLTEwMDEgIFN1Ym5vcm1hbA0KK2ZtYXgyODA0IGZtYSAgMS4wRS05OTkgICAgIDFlLTMgICAwRSs5OTk5OTkgIC0+IDEuMEUtMTAwMiAgIFN1Ym5vcm1hbA0KK2ZtYXgyODA1IGZtYSAgMS4wRS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI4MDYgZm1hICAxLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjgwNyBmbWEgIDEuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODA4IGZtYSAgMS43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4MDkgZm1hICAyLjNFLTk5OSAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjgxMCBmbWEgIDIuNUUtOTk5ICAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODExIGZtYSAgMi43RS05OTkgICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4MTIgZm1hICAxLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjgxMyBmbWEgIDEuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODE0IGZtYSAgMS41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDJFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4MTUgZm1hICAyLjQ5RS05OTkgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMkUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjgxNiBmbWEgIDIuNTBFLTk5OSAgICAxZS00ICAgMEUrOTk5OTk5ICAtPiAyRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODE3IGZtYSAgMi41MUUtOTk5ICAgIDFlLTQgICAwRSs5OTk5OTkgIC0+IDNFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDI4MTggZm1hICAxRS05OTkgICAgICAgMWUtNCAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgU3Vibm9ybWFsDQorZm1heDI4MTkgZm1hICAzRS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2ZtYXgyODIwIGZtYSAgNUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDBFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitmbWF4MjgyMSBmbWEgIDdFLTk5OSAgICAgICAxZS01ICAgMEUrOTk5OTk5ICAtPiAxRS0xMDAzICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODIyIGZtYSAgOUUtOTk5ICAgICAgIDFlLTUgICAwRSs5OTk5OTkgIC0+IDFFLTEwMDMgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4MjMgZm1hICA5LjlFLTk5OSAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gMUUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MjgyNCBmbWEgIDFFLTk5OSAgICAgIC0xZS00ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBTdWJub3JtYWwNCitmbWF4MjgyNSBmbWEgIDNFLTk5OSAgICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZm1heDI4MjYgZm1hIC01RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTBFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2ZtYXgyODI3IGZtYSAgN0UtOTk5ICAgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0xRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4MjggZm1hIC05RS05OTkgICAgICAgMWUtNSAgIDBFKzk5OTk5OSAgLT4gLTFFLTEwMDMgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MjgyOSBmbWEgIDkuOUUtOTk5ICAgIC0xZS01ICAgMEUrOTk5OTk5ICAtPiAtMUUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODMwIGZtYSAgMy4wRS05OTkgICAgLTFlLTUgICAwRSs5OTk5OTkgIC0+IC0wRS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCisNCitmbWF4MjgzMSBmbWEgIDEuMEUtNTAxICAgICAxZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wRS0xMDAyICAgU3Vibm9ybWFsDQorZm1heDI4MzIgZm1hICAyLjBFLTUwMSAgICAgMmUtNTAxICAwRSs5OTk5OTkgIC0+IDQuMEUtMTAwMiAgIFN1Ym5vcm1hbA0KK2ZtYXgyODMzIGZtYSAgNC4wRS01MDEgICAgIDRlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwRS0xMDAxICBTdWJub3JtYWwNCitmbWF4MjgzNCBmbWEgMTAuMEUtNTAxICAgIDEwZS01MDEgIDBFKzk5OTk5OSAgLT4gMS4wMDBFLTEwMDAgU3Vibm9ybWFsDQorZm1heDI4MzUgZm1hIDMwLjBFLTUwMSAgICAzMGUtNTAxICAwRSs5OTk5OTkgIC0+IDkuMDAwRS0xMDAwIFN1Ym5vcm1hbA0KK2ZtYXgyODM2IGZtYSA0MC4wRS01MDEgICAgNDBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjYwMDBFLTk5OQ0KKw0KKy0tIHNxdWFyZXMNCitmbWF4Mjg0MCBmbWEgIDFFLTUwMiAgICAgICAxZS01MDIgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK2ZtYXgyODQxIGZtYSAgMUUtNTAxICAgICAgIDFlLTUwMSAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgICBTdWJub3JtYWwNCitmbWF4Mjg0MiBmbWEgIDJFLTUwMSAgICAgICAyZS01MDEgIDBFKzk5OTk5OSAgLT4gNEUtMTAwMiAgICAgU3Vibm9ybWFsDQorZm1heDI4NDMgZm1hICA0RS01MDEgICAgICAgNGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNkUtMTAwMSAgIFN1Ym5vcm1hbA0KK2ZtYXgyODQ0IGZtYSAxMEUtNTAxICAgICAgMTBlLTUwMSAgMEUrOTk5OTk5ICAtPiAxLjAwRS0xMDAwICBTdWJub3JtYWwNCitmbWF4Mjg0NSBmbWEgMzBFLTUwMSAgICAgIDMwZS01MDEgIDBFKzk5OTk5OSAgLT4gOS4wMEUtMTAwMCAgU3Vibm9ybWFsDQorZm1heDI4NDYgZm1hIDQwRS01MDEgICAgICA0MGUtNTAxICAwRSs5OTk5OTkgIC0+IDEuNjAwRS05OTkNCisNCistLSBjdWJlcw0KK2ZtYXgyODUwIGZtYSAgMUUtNjcwICAgICAxZS0zMzUgIDBFKzk5OTk5OSAgLT4gMEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorZm1heDI4NTEgZm1hICAxRS02NjggICAgIDFlLTMzNCAgMEUrOTk5OTk5ICAtPiAxRS0xMDAyICAgIFN1Ym5vcm1hbA0KK2ZtYXgyODUyIGZtYSAgNEUtNjY4ICAgICAyZS0zMzQgIDBFKzk5OTk5OSAgLT4gOEUtMTAwMiAgICBTdWJub3JtYWwNCitmbWF4Mjg1MyBmbWEgIDlFLTY2OCAgICAgM2UtMzM0ICAwRSs5OTk5OTkgIC0+IDIuN0UtMTAwMSAgU3Vibm9ybWFsDQorZm1heDI4NTQgZm1hIDE2RS02NjggICAgIDRlLTMzNCAgMEUrOTk5OTk5ICAtPiA2LjRFLTEwMDEgIFN1Ym5vcm1hbA0KK2ZtYXgyODU1IGZtYSAyNUUtNjY4ICAgICA1ZS0zMzQgIDBFKzk5OTk5OSAgLT4gMS4yNUUtMTAwMCBTdWJub3JtYWwNCitmbWF4Mjg1NiBmbWEgMTBFLTY2OCAgIDEwMGUtMzM0ICAwRSs5OTk5OTkgIC0+IDEuMDAwRS05OTkNCisNCistLSB0ZXN0IGRlcml2ZWQgZnJvbSByZXN1bHQgb2YgMC4wOTkgKiogOTk5IGF0IDE1IGRpZ2l0cyB3aXRoIHVubGltaXRlZCBleHBvbmVudA0KK3ByZWNpc2lvbjogMTkNCitmbWF4Mjg2MCBmbWEgIDY2MzY4NTE1NTc5OTQ1Nzg3MTZFLTUyMCA2NjM2ODUxNTU3OTk0NTc4NzE2RS01MjAgIDBFKzk5OTk5OSAgLT4gNC40MDQ3Nzk4NjAyODU1MUUtMTAwMyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIExvbmcgb3BlcmFuZCBvdmVyZmxvdyBtYXkgYmUgYSBkaWZmZXJlbnQgcGF0aA0KK3ByZWNpc2lvbjogMw0KK21heEV4cG9uZW50OiA5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OQ0KK2ZtYXgyODcwIGZtYSAxICA5Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2ZtYXgyODcxIGZtYSAxIC05Ljk5OUUrOTk5OTk5ICAgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2ZtYXgyODcyIGZtYSAgICA5Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2ZtYXgyODczIGZtYSAgIC05Ljk5OUUrOTk5OTk5IDEgIDBFKzk5OTk5OSAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KKy0tIGNoZWNrIGZvciBkb3VibGUtcm91bmRlZCBzdWJub3JtYWxzDQorcHJlY2lzaW9uOiAgIDUNCittYXhleHBvbmVudDogNzkNCittaW5leHBvbmVudDogLTc5DQorZm1heDI4ODEgZm1hICAxLjIzNDdFLTQwICAxLjIzNDdFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjRFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgyODgyIGZtYSAgMS4yMzRFLTQwICAxLjIzNEUtNDAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4Mjg4MyBmbWEgIDEuMjNFLTQwICAgMS4yM0UtNDAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjUxM0UtODAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDI4ODQgZm1hICAxLjJFLTQwICAgIDEuMkUtNDAgICAgICAgMEUrOTk5OTk5ICAtPiAgMS40NEUtODAgICBTdWJub3JtYWwNCitmbWF4Mjg4NSBmbWEgIDEuMkUtNDAgICAgMS4yRS00MSAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjQ0RS04MSAgIFN1Ym5vcm1hbA0KK2ZtYXgyODg2IGZtYSAgMS4yRS00MCAgICAxLjJFLTQyICAgICAgIDBFKzk5OTk5OSAgLT4gIDEuNEUtODIgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4Mjg4NyBmbWEgIDEuMkUtNDAgICAgMS4zRS00MiAgICAgICAwRSs5OTk5OTkgIC0+ICAxLjZFLTgyICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZm1heDI4ODggZm1hICAxLjNFLTQwICAgIDEuM0UtNDIgICAgICAgMEUrOTk5OTk5ICAtPiAgMS43RS04MiAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgyODg5IGZtYSAgMS4zRS00MCAgICAxLjNFLTQzICAgICAgIDBFKzk5OTk5OSAgLT4gICAgMkUtODMgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4Mjg5MCBmbWEgIDEuM0UtNDEgICAgMS4zRS00MyAgICAgICAwRSs5OTk5OTkgIC0+ICAgIDBFLTgzICAgIENsYW1wZWQgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCisNCitmbWF4Mjg5MSBmbWEgIDEuMjM0NUUtMzkgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyMzRFLTc5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgyODkyIGZtYSAgMS4yMzQ1NkUtMzkgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzNEUtNzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDI4OTMgZm1hICAxLjIzNDVFLTQwICAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MjNFLTgwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgyODk0IGZtYSAgMS4yMzQ1NkUtNDAgIDEuMjM0RS00MCAgIDBFKzk5OTk5OSAgLT4gIDEuNTIzRS04MCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4Mjg5NSBmbWEgIDEuMjM0NUUtNDEgICAxLjIzNEUtNDAgICAwRSs5OTk5OTkgIC0+ICAxLjUyRS04MSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDI4OTYgZm1hICAxLjIzNDU2RS00MSAgMS4yMzRFLTQwICAgMEUrOTk5OTk5ICAtPiAgMS41MkUtODEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KKw0KKy0tIE5vdyBleHBsb3JlIHRoZSBjYXNlIHdoZXJlIHdlIGdldCBhIG5vcm1hbCByZXN1bHQgd2l0aCBVbmRlcmZsb3cNCitwcmVjaXNpb246ICAgMTYNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KKw0KK2ZtYXgyOTAwIGZtYSAgMC4zMDAwMDAwMDAwRS0xOTEgMC4zMDAwMDAwMDAwRS0xOTEgIDBFKzk5OTk5OSAgLT4gOS4wMDAwMDAwMDAwMDAwMEUtMzg0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI5MDEgZm1hICAwLjMwMDAwMDAwMDFFLTE5MSAwLjMwMDAwMDAwMDFFLTE5MSAgMEUrOTk5OTk5ICAtPiA5LjAwMDAwMDAwNjAwMDAwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4MjkwMiBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OSAgICAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTkwMDBFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2ZtYXgyOTAzIGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMC4wOTk5OTk5OTk5OTk5OSAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTkwMEUtMzg0IFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI5MDQgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OSAgICAgICAgMEUrOTk5OTk5ICAtPiA5Ljk5OTk5OTk5OTk5OTkwRS0zODQgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4MjkwNSBmbWEgIDkuOTk5OTk5OTk5OTk5OTk5RS0zODMgIDAuMDk5OTk5OTk5OTk5OTk5OSAgICAgICAwRSs5OTk5OTkgIC0+IDkuOTk5OTk5OTk5OTk5OTlFLTM4NCBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KKy0tIHByb3ZlIG9wZXJhbmRzIGFyZSBleGFjdA0KK2ZtYXgyOTA2IGZtYSAgOS45OTk5OTk5OTk5OTk5OTlFLTM4MyAgMSAgICAgICAgICAgICAgICAgICAgICAgIDBFKzk5OTk5OSAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTM4Mw0KK2ZtYXgyOTA3IGZtYSAgICAgICAgICAgICAgICAgICAgICAgMSAgMC4wOTk5OTk5OTk5OTk5OTk5OSAgICAgIDBFKzk5OTk5OSAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OQ0KKy0tIHRoZSBuZXh0IHJvdW5kcyB0byBObWluDQorZm1heDI5MDggZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5ICAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI5MDkgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OSAgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI5MTAgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTkgICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDI5MTEgZm1hICA5Ljk5OTk5OTk5OTk5OTk5OUUtMzgzICAwLjA5OTk5OTk5OTk5OTk5OTk5OTk5ICAgMEUrOTk5OTk5ICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gRXhhbXBsZXMgZnJvbSBTUUwgcHJvcG9zYWwgKEtyaXNobmEgS3Vsa2FybmkpDQorcHJlY2lzaW9uOiAgIDM0DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogNjE0NA0KK21pbkV4cG9uZW50OiAtNjE0Mw0KK2ZtYXgyOTIxICBmbWEgMTMwRS0yICAxMjBFLTIgIDBFKzk5OTk5OSAgLT4gMS41NjAwDQorZm1heDI5MjIgIGZtYSAxMzBFLTIgIDEyRS0xICAgMEUrOTk5OTk5ICAtPiAxLjU2MA0KK2ZtYXgyOTIzICBmbWEgMTMwRS0yICAxRTAgICAgIDBFKzk5OTk5OSAgLT4gMS4zMA0KKw0KKy0tIE51bGwgdGVzdHMNCitmbWF4Mjk5MCBmbWEgICMgMTAgIDBFKzk5OTk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDI5OTEgZm1hIDEwICAjICAwRSs5OTk5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEFERElUSU9OIFRFU1RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCitmbWF4MzAwMSBmbWEgIDEgICAxICAgICAgIDEgICAgICAgLT4gIDINCitmbWF4MzAwMiBmbWEgIDEgICAyICAgICAgIDMgICAgICAgLT4gIDUNCitmbWF4MzAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCitmbWF4MzAwNCBmbWEgIDEgICAnNScgICAgICctMycgICAgLT4gIDINCitmbWF4MzAwNSBmbWEgIDEgICAnLTUnICAgICctMycgICAgLT4gIC04DQorZm1heDMwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQorZm1heDMwMDcgZm1hICAxICAgJzAuNycgICAnMC4zJyAgIC0+ICAxLjANCitmbWF4MzAwOCBmbWEgIDEgICAnMS4yNScgICcxLjI1JyAgLT4gIDIuNTANCitmbWF4MzAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCitmbWF4MzAxMCBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDExJyAtPiAnMi4yMzQ1NjgwMCcNCisNCitmbWF4MzAxMSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NScgLT4gJzEuMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDAnICAnMC41NTU1NTU1NTU1JyAtPiAnMS4wMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwMTMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwMTQgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMDE1IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzAxNiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwMTcgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMDE4IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzAxOSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwMjAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzMDIxIGZtYSAgMSAgIDAgMSAtPiAxDQorZm1heDMwMjIgZm1hICAxICAgMSAxIC0+IDINCitmbWF4MzAyMyBmbWEgIDEgICAyIDEgLT4gMw0KK2ZtYXgzMDI0IGZtYSAgMSAgIDMgMSAtPiA0DQorZm1heDMwMjUgZm1hICAxICAgNCAxIC0+IDUNCitmbWF4MzAyNiBmbWEgIDEgICA1IDEgLT4gNg0KK2ZtYXgzMDI3IGZtYSAgMSAgIDYgMSAtPiA3DQorZm1heDMwMjggZm1hICAxICAgNyAxIC0+IDgNCitmbWF4MzAyOSBmbWEgIDEgICA4IDEgLT4gOQ0KK2ZtYXgzMDMwIGZtYSAgMSAgIDkgMSAtPiAxMA0KKw0KKy0tIHNvbWUgY2FycnlpbmcgZWZmZWN0cw0KK2ZtYXgzMDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KK2ZtYXgzMDMyIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAxJyAtPiAnMC45OTk5Jw0KK2ZtYXgzMDMzIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAyJyAtPiAnMS4wMDAwJw0KK2ZtYXgzMDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KKw0KK2ZtYXgzMDM1IGZtYSAgMSAgICc3MCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzAzNiBmbWEgIDEgICAnNzAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMDM3IGZtYSAgMSAgICc3MDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwMEUrMTMnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMDM4IGZtYSAgMSAgICc3MDAwMCcgICcxMDAwMGUrOScgLT4gJzEuMDAwMDAwMDFFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzAzOSBmbWEgIDEgICAnNzAwMDAwJyAgJzEwMDAwZSs5JyAtPiAnMS4wMDAwMDAwN0UrMTMnIFJvdW5kZWQNCisNCistLSBzeW1tZXRyeToNCitmbWF4MzA0MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxLjAwMDAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwNDEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzA0MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEuMDAwMDAwMDBFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzA0NCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAxRSsxMycgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwNDUgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDdFKzEzJyBSb3VuZGVkDQorDQorLS0gc2FtZSwgaGlnaGVyIHByZWNpc2lvbg0KK3ByZWNpc2lvbjogMTUNCitmbWF4MzA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KK2ZtYXgzMDQ3IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MCcgLT4gJzEwMDAwMDAwMDAwMDcwJw0KK2ZtYXgzMDQ4IGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAnIC0+ICcxMDAwMDAwMDAwMDcwMCcNCitmbWF4MzA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KK2ZtYXgzMDUwIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMCcgLT4gJzEwMDAwMDAwMDcwMDAwJw0KK2ZtYXgzMDUxIGZtYSAgMSAgICcxMDAwMGUrOScgICc3MDAwMDAnIC0+ICcxMDAwMDAwMDcwMDAwMCcNCitmbWF4MzA1MiBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAwMCcgLT4gJzEwMDAwMDA3MDAwMDAwJw0KKw0KKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCitmbWF4MzA1MyBmbWEgIDEgICAnMTInICc3LjAwJyAtPiAnMTkuMDAnDQorZm1heDMwNTQgZm1hICAxICAgJzEuMycgJy0xLjA3JyAtPiAnMC4yMycNCitmbWF4MzA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KK2ZtYXgzMDU2IGZtYSAgMSAgICcxLjMnICctMi4wNycgLT4gJy0wLjc3Jw0KK2ZtYXgzMDU3IGZtYSAgMSAgICcxRSsyJyAnMUUrNCcgLT4gJzEuMDFFKzQnDQorDQorLS0gemVybyBwcmVzZXJ2YXRpb24NCitwcmVjaXNpb246IDYNCitmbWF4MzA2MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxLjAwMDAwRSsxMycgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwNjEgZm1hICAxICAgMSAnMC4wMDAxJyAtPiAnMS4wMDAxJw0KK2ZtYXgzMDYyIGZtYSAgMSAgIDEgJzAuMDAwMDEnIC0+ICcxLjAwMDAxJw0KK2ZtYXgzMDYzIGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwNjQgZm1hICAxICAgMSAnMC4wMDAwMDAxJyAtPiAnMS4wMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMwNjUgZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNvbWUgZnVubnkgemVyb3MgW2luIGNhc2Ugb2YgYmFkIHNpZ251bV0NCitmbWF4MzA3MCBmbWEgIDEgICAxICAwICAgIC0+IDENCitmbWF4MzA3MSBmbWEgIDEgICAxIDAuICAgIC0+IDENCitmbWF4MzA3MiBmbWEgIDEgICAxICAuMCAgIC0+IDEuMA0KK2ZtYXgzMDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wDQorZm1heDMwNzQgZm1hICAxICAgMSAwLjAwICAtPiAxLjAwDQorZm1heDMwNzUgZm1hICAxICAgIDAgIDEgICAtPiAxDQorZm1heDMwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxDQorZm1heDMwNzcgZm1hICAxICAgIC4wIDEgICAtPiAxLjANCitmbWF4MzA3OCBmbWEgIDEgICAwLjAgMSAgIC0+IDEuMA0KK2ZtYXgzMDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMA0KKw0KK3ByZWNpc2lvbjogOQ0KKw0KKy0tIHNvbWUgY2Fycmllcw0KK2ZtYXgzMDgwIGZtYSAgMSAgIDk5OTk5OTk5OCAxICAtPiA5OTk5OTk5OTkNCitmbWF4MzA4MSBmbWEgIDEgICA5OTk5OTk5OTkgMSAgLT4gMS4wMDAwMDAwMEUrOSBSb3VuZGVkDQorZm1heDMwODIgZm1hICAxICAgIDk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMA0KK2ZtYXgzMDgzIGZtYSAgMSAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KK2ZtYXgzMDg0IGZtYSAgMSAgICAgIDk5OTk5OSAxICAtPiAxMDAwMDAwDQorZm1heDMwODUgZm1hICAxICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMA0KK2ZtYXgzMDg2IGZtYSAgMSAgICAgICAgOTk5OSAxICAtPiAxMDAwMA0KK2ZtYXgzMDg3IGZtYSAgMSAgICAgICAgIDk5OSAxICAtPiAxMDAwDQorZm1heDMwODggZm1hICAxICAgICAgICAgIDk5IDEgIC0+IDEwMA0KK2ZtYXgzMDg5IGZtYSAgMSAgICAgICAgICAgOSAxICAtPiAxMA0KKw0KKw0KKy0tIG1vcmUgTEhTIHN3YXBzDQorZm1heDMwOTAgZm1hICAxICAgJy01NjI2N0UtMTAnICAgMCAtPiAgJy0wLjAwMDAwNTYyNjcnDQorZm1heDMwOTEgZm1hICAxICAgJy01NjI2N0UtNicgICAgMCAtPiAgJy0wLjA1NjI2NycNCitmbWF4MzA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQorZm1heDMwOTMgZm1hICAxICAgJy01NjI2N0UtNCcgICAgMCAtPiAgJy01LjYyNjcnDQorZm1heDMwOTQgZm1hICAxICAgJy01NjI2N0UtMycgICAgMCAtPiAgJy01Ni4yNjcnDQorZm1heDMwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQorZm1heDMwOTYgZm1hICAxICAgJy01NjI2N0UtMScgICAgMCAtPiAgJy01NjI2LjcnDQorZm1heDMwOTcgZm1hICAxICAgJy01NjI2N0UtMCcgICAgMCAtPiAgJy01NjI2NycNCitmbWF4MzA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KK2ZtYXgzMDk5IGZtYSAgMSAgICctNUUtNycgICAgICAgIDAgLT4gICctNUUtNycNCitmbWF4MzEwMCBmbWEgIDEgICAnLTVFLTYnICAgICAgICAwIC0+ICAnLTAuMDAwMDA1Jw0KK2ZtYXgzMTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCitmbWF4MzEwMiBmbWEgIDEgICAnLTVFLTQnICAgICAgICAwIC0+ICAnLTAuMDAwNScNCitmbWF4MzEwMyBmbWEgIDEgICAnLTVFLTEnICAgICAgICAwIC0+ICAnLTAuNScNCitmbWF4MzEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQorZm1heDMxMDUgZm1hICAxICAgJy01RTEnICAgICAgICAgMCAtPiAgJy01MCcNCitmbWF4MzEwNiBmbWEgIDEgICAnLTVFNScgICAgICAgICAwIC0+ICAnLTUwMDAwMCcNCitmbWF4MzEwNyBmbWEgIDEgICAnLTVFOCcgICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMCcNCitmbWF4MzEwOCBmbWEgIDEgICAnLTVFOScgICAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzknICAgUm91bmRlZA0KK2ZtYXgzMTA5IGZtYSAgMSAgICctNUUxMCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMEUrMTAnICBSb3VuZGVkDQorZm1heDMxMTAgZm1hICAxICAgJy01RTExJyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwRSsxMScgIFJvdW5kZWQNCitmbWF4MzExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDBFKzEwMCcgUm91bmRlZA0KKw0KKy0tIG1vcmUgUkhTIHN3YXBzDQorZm1heDMxMTMgZm1hICAxICAgMCAgJy01NjI2N0UtMTAnIC0+ICAnLTAuMDAwMDA1NjI2NycNCitmbWF4MzExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQorZm1heDMxMTYgZm1hICAxICAgMCAgJy01NjI2N0UtNScgIC0+ICAnLTAuNTYyNjcnDQorZm1heDMxMTcgZm1hICAxICAgMCAgJy01NjI2N0UtNCcgIC0+ICAnLTUuNjI2NycNCitmbWF4MzExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KK2ZtYXgzMTIwIGZtYSAgMSAgIDAgICctNTYyNjdFLTInICAtPiAgJy01NjIuNjcnDQorZm1heDMxMjEgZm1hICAxICAgMCAgJy01NjI2N0UtMScgIC0+ICAnLTU2MjYuNycNCitmbWF4MzEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQorZm1heDMxMjMgZm1hICAxICAgMCAgJy01RS0xMCcgICAgIC0+ICAnLTVFLTEwJw0KK2ZtYXgzMTI0IGZtYSAgMSAgIDAgICctNUUtNycgICAgICAtPiAgJy01RS03Jw0KK2ZtYXgzMTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCitmbWF4MzEyNiBmbWEgIDEgICAwICAnLTVFLTUnICAgICAgLT4gICctMC4wMDAwNScNCitmbWF4MzEyNyBmbWEgIDEgICAwICAnLTVFLTQnICAgICAgLT4gICctMC4wMDA1Jw0KK2ZtYXgzMTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQorZm1heDMxMjkgZm1hICAxICAgMCAgJy01RTAnICAgICAgIC0+ICAnLTUnDQorZm1heDMxMzAgZm1hICAxICAgMCAgJy01RTEnICAgICAgIC0+ICAnLTUwJw0KK2ZtYXgzMTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQorZm1heDMxMzIgZm1hICAxICAgMCAgJy01RTgnICAgICAgIC0+ICAnLTUwMDAwMDAwMCcNCitmbWF4MzEzMyBmbWEgIDEgICAwICAnLTVFOScgICAgICAgLT4gICctNS4wMDAwMDAwMEUrOScgICAgUm91bmRlZA0KK2ZtYXgzMTM0IGZtYSAgMSAgIDAgICctNUUxMCcgICAgICAtPiAgJy01LjAwMDAwMDAwRSsxMCcgICBSb3VuZGVkDQorZm1heDMxMzUgZm1hICAxICAgMCAgJy01RTExJyAgICAgIC0+ICAnLTUuMDAwMDAwMDBFKzExJyAgIFJvdW5kZWQNCitmbWF4MzEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMEUrMTAwJyAgUm91bmRlZA0KKw0KKy0tIHJlbGF0ZWQNCitmbWF4MzEzNyBmbWEgIDEgICAgMSAgJzBFLTEyJyAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQNCitmbWF4MzEzOCBmbWEgIDEgICAtMSAgJzBFLTEyJyAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQNCitmbWF4MzEzOSBmbWEgIDEgICAnMEUtMTInIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMCcgIFJvdW5kZWQNCitmbWF4MzE0MCBmbWEgIDEgICAnMEUtMTInIC0xICAgICAgIC0+ICAnLTEuMDAwMDAwMDAnIFJvdW5kZWQNCitmbWF4MzE0MSBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMCAgIC0+ICAnMTAwMDAuMDAwMCcNCitmbWF4MzE0MiBmbWEgIDEgICAxRSs0ICAgIDAuMDAwMDAgIC0+ICAnMTAwMDAuMDAwMCcgIFJvdW5kZWQNCitmbWF4MzE0MyBmbWEgIDEgICAwLjAwMCAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcNCitmbWF4MzE0NCBmbWEgIDEgICAwLjAwMDAgIDFFKzUgICAgIC0+ICAnMTAwMDAwLjAwMCcgIFJvdW5kZWQNCisNCistLSBbc29tZSBvZiB0aGUgbmV4dCBncm91cCBhcmUgcmVhbGx5IGNvbnN0cnVjdG9yIHRlc3RzXQ0KK2ZtYXgzMTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcNCitmbWF4MzE0NyBmbWEgIDEgICAnMC4wMCcgIDAgICAgICAgLT4gICcwLjAwJw0KK2ZtYXgzMTQ4IGZtYSAgMSAgICAwICAgICAgJzAuMDAnICAtPiAgJzAuMDAnDQorZm1heDMxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJw0KK2ZtYXgzMTUwIGZtYSAgMSAgICcwMC4wJyAgJzAuMDAnICAtPiAgJzAuMDAnDQorZm1heDMxNTEgZm1hICAxICAgJzAuMDAnICAnMDAuMCcgIC0+ICAnMC4wMCcNCitmbWF4MzE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnDQorZm1heDMxNTMgZm1hICAxICAgJzMuJyAgICAnLjMnICAgIC0+ICAnMy4zJw0KK2ZtYXgzMTU0IGZtYSAgMSAgICczLjAnICAgJy4zJyAgICAtPiAgJzMuMycNCitmbWF4MzE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJw0KK2ZtYXgzMTU2IGZtYSAgMSAgICczJyAgICAgJzMnICAgICAtPiAgJzYnDQorZm1heDMxNTcgZm1hICAxICAgJzMnICAgICAnKzMnICAgIC0+ICAnNicNCitmbWF4MzE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJw0KK2ZtYXgzMTU5IGZtYSAgMSAgICcwLjMnICAgJy0wLjMnICAtPiAgJzAuMCcNCitmbWF4MzE2MCBmbWEgIDEgICAnMC4wMycgICctMC4wMycgLT4gICcwLjAwJw0KKw0KKy0tIHRyeSBib3JkZXJsaW5lIHByZWNpc2lvbiwgd2l0aCBjYXJyaWVzLCBldGMuDQorcHJlY2lzaW9uOiAxNQ0KK2ZtYXgzMTYxIGZtYSAgMSAgICcxRSsxMicgJy0xJyAgICAtPiAnOTk5OTk5OTk5OTk5Jw0KK2ZtYXgzMTYyIGZtYSAgMSAgICcxRSsxMicgICcxLjExJyAtPiAnMTAwMDAwMDAwMDAwMS4xMScNCitmbWF4MzE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMicgLT4gJzEwMDAwMDAwMDAwMDEuMTEnDQorZm1heDMxNjQgZm1hICAxICAgJy0xJyAgICAnMUUrMTInIC0+ICc5OTk5OTk5OTk5OTknDQorZm1heDMxNjUgZm1hICAxICAgJzdFKzEyJyAnLTEnICAgIC0+ICc2OTk5OTk5OTk5OTk5Jw0KK2ZtYXgzMTY2IGZtYSAgMSAgICc3RSsxMicgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMS4xMScNCitmbWF4MzE2NyBmbWEgIDEgICAnMS4xMScgICc3RSsxMicgLT4gJzcwMDAwMDAwMDAwMDEuMTEnDQorZm1heDMxNjggZm1hICAxICAgJy0xJyAgICAnN0UrMTInIC0+ICc2OTk5OTk5OTk5OTk5Jw0KKw0KKy0tICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEyMzQ1Njc4OTAxMjM0NSAgICAgIDEgMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE3MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3MSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjInIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjEnIC0+ICcxLjAwMDAwMDAwMDAwMDAxJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3NCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTknIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTgnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3NiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzE3NyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwJyBSb3VuZGVkDQorZm1heDMxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1JyAtPiAnMC45OTk5OTk5OTk5OTk5OTknDQorZm1heDMxNzkgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTgnDQorZm1heDMxODAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUzJyAtPiAnMC45OTk5OTk5OTk5OTk5OTcnDQorZm1heDMxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUyJyAtPiAnMC45OTk5OTk5OTk5OTk5OTYnDQorZm1heDMxODIgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTUnDQorZm1heDMxODMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTUwJyAtPiAnMC45OTk5OTk5OTk5OTk5OTQnDQorDQorLS0gYW5kIHNvbWUgbW9yZSwgaW5jbHVkaW5nIHJlc2lkdWUgZWZmZWN0cyBhbmQgZGlmZmVyZW50IHJvdW5kaW5ncw0KK3ByZWNpc2lvbjogOQ0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZm1heDMyMDAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KK2ZtYXgzMjAxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMDIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIwMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjA0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMDUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIwNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjA3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMDggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIwOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjEwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMTEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIxMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjEzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMTQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIxNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjE2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCitmbWF4MzIxNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjE4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMTkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9ldmVuDQorZm1heDMyMjAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KK2ZtYXgzMjIxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMjIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIyMyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjI0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMjUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIyNiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjI3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMjggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIyOSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjMwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMzEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIzMiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjMzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMzQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzIzNSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjM2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCitmbWF4MzIzNyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjM4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyMzkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCistLSBjcml0aWNhbCBmZXcgd2l0aCBldmVuIGJvdHRvbSBkaWdpdC4uLg0KK2ZtYXgzMjQwIGZtYSAgMSAgICcxMjM0NTY3ODgnIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNDEgZm1hICAxICAgJzEyMzQ1Njc4OCcgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI0MiBmbWEgIDEgICAnMTIzNDU2Nzg4JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBkb3duDQorZm1heDMyNTAgZm1hICAxICAgJzEyMzQ1Njc4OScgMCAgICAgICAgICAgICAtPiAnMTIzNDU2Nzg5Jw0KK2ZtYXgzMjUxIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuMDAwMDAwMDAxICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNTIgZm1hICAxICAgJzEyMzQ1Njc4OScgMC4wMDAwMDEgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI1MyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjEgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjU0IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNCAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNTUgZm1hICAxICAgJzEyMzQ1Njc4OScgMC40OSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI1NiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjU3IGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNDk5OTk5OTk5ICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNTggZm1hICAxICAgJzEyMzQ1Njc4OScgMC41ICAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI1OSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjUwMDAwMDAwMSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjYwIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuNTAwMDAxICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNjEgZm1hICAxICAgJzEyMzQ1Njc4OScgMC41MSAgICAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI2MiBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjYgICAgICAgICAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjYzIGZtYSAgMSAgICcxMjM0NTY3ODknIDAuOSAgICAgICAgICAgLT4gJzEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNjQgZm1hICAxICAgJzEyMzQ1Njc4OScgMC45OTk5OSAgICAgICAtPiAnMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI2NSBmbWEgIDEgICAnMTIzNDU2Nzg5JyAwLjk5OTk5OTk5OSAgIC0+ICcxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjY2IGZtYSAgMSAgICcxMjM0NTY3ODknIDEgICAgICAgICAgICAgLT4gJzEyMzQ1Njc5MCcNCitmbWF4MzI2NyBmbWEgIDEgICAnMTIzNDU2Nzg5JyAxLjAwMDAwMDAxICAgIC0+ICcxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjY4IGZtYSAgMSAgICcxMjM0NTY3ODknIDEuMDAwMDEgICAgICAgLT4gJzEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNjkgZm1hICAxICAgJzEyMzQ1Njc4OScgMS4xICAgICAgICAgICAtPiAnMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBpbnB1dCBwcmVwYXJhdGlvbiB0ZXN0cyAob3BlcmFuZHMgc2hvdWxkIG5vdCBiZSByb3VuZGVkKQ0KK3ByZWNpc2lvbjogMw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorDQorZm1heDMyNzAgZm1hICAxICAgJzEyMzQ1Njc4OTAwMDAwJyAgOTk5OTk5OTk5OTk5OSAtPiAgJzIuMjNFKzEzJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI3MSBmbWEgIDEgICAgJzk5OTk5OTk5OTk5OTknIDEyMzQ1Njc4OTAwMDAwIC0+ICAnMi4yM0UrMTMnIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzMjcyIGZtYSAgMSAgICcxMkUrMycgICczNDQ0JyAgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNzMgZm1hICAxICAgJzEyRSszJyAgJzM0NDYnICAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI3NCBmbWEgIDEgICAnMTJFKzMnICAnMzQ0OS45JyAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjc1IGZtYSAgMSAgICcxMkUrMycgICczNDUwLjAnIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyNzYgZm1hICAxICAgJzEyRSszJyAgJzM0NTAuMScgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI3NyBmbWEgIDEgICAnMTJFKzMnICAnMzQ1NCcgICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjc4IGZtYSAgMSAgICcxMkUrMycgICczNDU2JyAgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDMyODEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI4MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjgzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyODQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI4NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjg2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyODcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl9kb3duDQorZm1heDMyOTEgZm1hICAxICAgJzM0NDQnICAgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI5MiBmbWEgIDEgICAnMzQ0NicgICAnMTJFKzMnICAtPiAgJzEuNTRFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjkzIGZtYSAgMSAgICczNDQ5LjknICcxMkUrMycgIC0+ICAnMS41NEUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyOTQgZm1hICAxICAgJzM0NTAuMCcgJzEyRSszJyAgLT4gICcxLjU0RSs0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzI5NSBmbWEgIDEgICAnMzQ1MC4xJyAnMTJFKzMnICAtPiAgJzEuNTVFKzQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMjk2IGZtYSAgMSAgICczNDU0JyAgICcxMkUrMycgIC0+ICAnMS41NUUrNCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDMyOTcgZm1hICAxICAgJzM0NTYnICAgJzEyRSszJyAgLT4gICcxLjU1RSs0JyBJbmV4YWN0IFJvdW5kZWQNCisNCistLSAxIGluIGxhc3QgcGxhY2UgdGVzdHMNCityb3VuZGluZzogaGFsZl91cA0KK2ZtYXgzMzAxIGZtYSAgMSAgICAtMSAgIDEgICAgICAtPiAgIDANCitmbWF4MzMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxDQorZm1heDMzMDMgZm1hICAxICAgICAxICAgMSAgICAgIC0+ICAgMg0KK2ZtYXgzMzA0IGZtYSAgMSAgICAxMiAgIDEgICAgICAtPiAgMTMNCitmbWF4MzMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5DQorZm1heDMzMDYgZm1hICAxICAgIDk5ICAgMSAgICAgIC0+IDEwMA0KK2ZtYXgzMzA3IGZtYSAgMSAgIDEwMCAgIDEgICAgICAtPiAxMDENCitmbWF4MzMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyDQorZm1heDMzMDkgZm1hICAxICAgIC0xICAtMSAgICAgIC0+ICAtMg0KK2ZtYXgzMzEwIGZtYSAgMSAgICAgMCAgLTEgICAgICAtPiAgLTENCitmbWF4MzMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwDQorZm1heDMzMTIgZm1hICAxICAgIDEyICAtMSAgICAgIC0+ICAxMQ0KK2ZtYXgzMzEzIGZtYSAgMSAgICA5OCAgLTEgICAgICAtPiAgOTcNCitmbWF4MzMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4DQorZm1heDMzMTUgZm1hICAxICAgMTAwICAtMSAgICAgIC0+ICA5OQ0KK2ZtYXgzMzE2IGZtYSAgMSAgIDEwMSAgLTEgICAgICAtPiAxMDANCisNCitmbWF4MzMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KK2ZtYXgzMzIyIGZtYSAgMSAgICAwLjAwICAwLjAxICAgIC0+ICAwLjAxDQorZm1heDMzMjMgZm1hICAxICAgIDAuMDEgIDAuMDEgICAgLT4gIDAuMDINCitmbWF4MzMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KK2ZtYXgzMzI1IGZtYSAgMSAgICAwLjk4ICAwLjAxICAgIC0+ICAwLjk5DQorZm1heDMzMjYgZm1hICAxICAgIDAuOTkgIDAuMDEgICAgLT4gIDEuMDANCitmbWF4MzMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KK2ZtYXgzMzI4IGZtYSAgMSAgICAxLjAxICAwLjAxICAgIC0+ICAxLjAyDQorZm1heDMzMjkgZm1hICAxICAgLTAuMDEgLTAuMDEgICAgLT4gLTAuMDINCitmbWF4MzMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KK2ZtYXgzMzMxIGZtYSAgMSAgICAwLjAxIC0wLjAxICAgIC0+ICAwLjAwDQorZm1heDMzMzIgZm1hICAxICAgIDAuMTIgLTAuMDEgICAgLT4gIDAuMTENCitmbWF4MzMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KK2ZtYXgzMzM0IGZtYSAgMSAgICAwLjk5IC0wLjAxICAgIC0+ICAwLjk4DQorZm1heDMzMzUgZm1hICAxICAgIDEuMDAgLTAuMDEgICAgLT4gIDAuOTkNCitmbWF4MzMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KKw0KKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQorcHJlY2lzaW9uOiA5DQorZm1heDMzNDAgZm1hICAxICAgMUUrMyAgICAwICAgIC0+ICAgICAgICAgMTAwMA0KK2ZtYXgzMzQxIGZtYSAgMSAgIDFFKzggICAgMCAgICAtPiAgICAxMDAwMDAwMDANCitmbWF4MzM0MiBmbWEgIDEgICAxRSs5ICAgIDAgICAgLT4gICAxLjAwMDAwMDAwRSs5ICAgUm91bmRlZA0KK2ZtYXgzMzQzIGZtYSAgMSAgIDFFKzEwICAgMCAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBSb3VuZGVkDQorLS0gd2hpY2ggc2ltcGx5IGZvbGxvdyBmcm9tIHRoZXNlIGNhc2VzIC4uLg0KK2ZtYXgzMzQ0IGZtYSAgMSAgIDFFKzMgICAgMSAgICAtPiAgICAgICAgIDEwMDENCitmbWF4MzM0NSBmbWEgIDEgICAxRSs4ICAgIDEgICAgLT4gICAgMTAwMDAwMDAxDQorZm1heDMzNDYgZm1hICAxICAgMUUrOSAgICAxICAgIC0+ICAgMS4wMDAwMDAwMEUrOSAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMzQ3IGZtYSAgMSAgIDFFKzEwICAgMSAgICAtPiAgIDEuMDAwMDAwMDBFKzEwICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQorZm1heDMzNDkgZm1hICAxICAgMUUrOCAgICA3ICAgIC0+ICAgIDEwMDAwMDAwNw0KK2ZtYXgzMzUwIGZtYSAgMSAgIDFFKzkgICAgNyAgICAtPiAgIDEuMDAwMDAwMDFFKzkgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzM1MSBmbWEgIDEgICAxRSsxMCAgIDcgICAgLT4gICAxLjAwMDAwMDAwRSsxMCAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCitwcmVjaXNpb246ICAgNw0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDkyDQorbWluZXhwb25lbnQ6IC05Mg0KK2ZtYXgzMzYxICBmbWEgIDEgICAwRSs1MCAxMDAwMEUrMSAgLT4gMS4wMDAwRSs1DQorZm1heDMzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMCAgUm91bmRlZA0KK2ZtYXgzMzYzICBmbWEgIDEgICAxMDAwMEUrMSAxMDAwMEUtNTAgIC0+IDEwMDAwMC4wICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzM2NCAgZm1hICAxICAgOS45OTk5OTlFKzkyIC05Ljk5OTk5OUUrOTIgLT4gMEUrODYNCisNCistLSBhIGN1cmlvc2l0eSBmcm9tIEpTUiAxMyB0ZXN0aW5nDQorcm91bmRpbmc6ICAgIGhhbGZfZG93bg0KK3ByZWNpc2lvbjogICAxMA0KK2ZtYXgzMzcwIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQ0KK3ByZWNpc2lvbjogICAgICA2DQorZm1heDMzNzEgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogICAgaGFsZl91cA0KK3ByZWNpc2lvbjogICAxMA0KK2ZtYXgzMzcyIGZtYSAgMSAgIDk5OTk5OTk5IDgxNTEyIC0+IDEwMDA4MTUxMQ0KK3ByZWNpc2lvbjogICAgICA2DQorZm1heDMzNzMgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMS4wMDA4MkUrOCBSb3VuZGVkIEluZXhhY3QNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorcHJlY2lzaW9uOiAgIDEwDQorZm1heDMzNzQgZm1hICAxICAgOTk5OTk5OTkgODE1MTIgLT4gMTAwMDgxNTExDQorcHJlY2lzaW9uOiAgICAgIDYNCitmbWF4MzM3NSBmbWEgIDEgICA5OTk5OTk5OSA4MTUxMiAtPiAxLjAwMDgyRSs4IFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIHVscCByZXBsYWNlbWVudCB0ZXN0cw0KK3ByZWNpc2lvbjogOQ0KK21heGV4cG9uZW50OiA5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OQ0KK2ZtYXgzNDAwIGZtYSAgMSAgICAgMSAgIDc3ZS03ICAgICAgIC0+ICAxLjAwMDAwNzcNCitmbWF4MzQwMSBmbWEgIDEgICAgIDEgICA3N2UtOCAgICAgICAtPiAgMS4wMDAwMDA3Nw0KK2ZtYXgzNDAyIGZtYSAgMSAgICAgMSAgIDc3ZS05ICAgICAgIC0+ICAxLjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xMCAgICAgIC0+ICAxLjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDA0IGZtYSAgMSAgICAgMSAgIDc3ZS0xMSAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDA1IGZtYSAgMSAgICAgMSAgIDc3ZS0xMiAgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OTkgICAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDA3IGZtYSAgMSAgICAgMSAgIDc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNDEwIGZtYSAgMSAgICAxMCAgIDc3ZS03ICAgICAgIC0+ICAxMC4wMDAwMDc3DQorZm1heDM0MTEgZm1hICAxICAgIDEwICAgNzdlLTggICAgICAgLT4gIDEwLjAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTIgZm1hICAxICAgIDEwICAgNzdlLTkgICAgICAgLT4gIDEwLjAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTMgZm1hICAxICAgIDEwICAgNzdlLTEwICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTQgZm1hICAxICAgIDEwICAgNzdlLTExICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTUgZm1hICAxICAgIDEwICAgNzdlLTEyICAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTYgZm1hICAxICAgIDEwICAgNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MTcgZm1hICAxICAgIDEwICAgNzdlLTk5OTk5OSAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM0MjAgZm1hICAxICAgIDc3ZS03ICAgICAgICAxICAgLT4gIDEuMDAwMDA3Nw0KK2ZtYXgzNDIxIGZtYSAgMSAgICA3N2UtOCAgICAgICAgMSAgIC0+ICAxLjAwMDAwMDc3DQorZm1heDM0MjIgZm1hICAxICAgIDc3ZS05ICAgICAgICAxICAgLT4gIDEuMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MjMgZm1hICAxICAgIDc3ZS0xMCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MjQgZm1hICAxICAgIDc3ZS0xMSAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MjUgZm1hICAxICAgIDc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MjYgZm1hICAxICAgIDc3ZS05OTkgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0MjcgZm1hICAxICAgIDc3ZS05OTk5OTkgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM0MzAgZm1hICAxICAgIDc3ZS03ICAgICAgIDEwICAgLT4gIDEwLjAwMDAwNzcNCitmbWF4MzQzMSBmbWEgIDEgICAgNzdlLTggICAgICAgMTAgICAtPiAgMTAuMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzMiBmbWEgIDEgICAgNzdlLTkgICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzMyBmbWEgIDEgICAgNzdlLTEwICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzNCBmbWEgIDEgICAgNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzNSBmbWEgIDEgICAgNzdlLTEyICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzNiBmbWEgIDEgICAgNzdlLTk5OSAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQzNyBmbWEgIDEgICAgNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBuZWdhdGl2ZSB1bHBzDQorZm1heDM0NDAgZm1hICAxICAgICAxICAgLTc3ZS03ICAgICAgIC0+ICAwLjk5OTk5MjMNCitmbWF4MzQ0MSBmbWEgIDEgICAgIDEgICAtNzdlLTggICAgICAgLT4gIDAuOTk5OTk5MjMNCitmbWF4MzQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTkgICAgICAgLT4gIDAuOTk5OTk5OTIzDQorZm1heDM0NDMgZm1hICAxICAgICAxICAgLTc3ZS0xMCAgICAgIC0+ICAwLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ0NCBmbWEgIDEgICAgIDEgICAtNzdlLTExICAgICAgLT4gIDAuOTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTIgICAgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ0NiBmbWEgIDEgICAgIDEgICAtNzdlLTk5OSAgICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NDcgZm1hICAxICAgICAxICAgLTc3ZS05OTk5OTkgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNDUwIGZtYSAgMSAgICAxMCAgIC03N2UtNyAgICAgICAtPiAgIDkuOTk5OTkyMw0KK2ZtYXgzNDUxIGZtYSAgMSAgICAxMCAgIC03N2UtOCAgICAgICAtPiAgIDkuOTk5OTk5MjMNCitmbWF4MzQ1MiBmbWEgIDEgICAgMTAgICAtNzdlLTkgICAgICAgLT4gICA5Ljk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTAgICAgICAtPiAgIDkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NTQgZm1hICAxICAgIDEwICAgLTc3ZS0xMSAgICAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDU1IGZtYSAgMSAgICAxMCAgIC03N2UtMTIgICAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5OSAgICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NTcgZm1hICAxICAgIDEwICAgLTc3ZS05OTk5OTkgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNDYwIGZtYSAgMSAgICAtNzdlLTcgICAgICAgIDEgICAtPiAgMC45OTk5OTIzDQorZm1heDM0NjEgZm1hICAxICAgIC03N2UtOCAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTIzDQorZm1heDM0NjIgZm1hICAxICAgIC03N2UtOSAgICAgICAgMSAgIC0+ICAwLjk5OTk5OTkyMw0KK2ZtYXgzNDYzIGZtYSAgMSAgICAtNzdlLTEwICAgICAgIDEgICAtPiAgMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NjQgZm1hICAxICAgIC03N2UtMTEgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ2NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NjYgZm1hICAxICAgIC03N2UtOTk5ICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDY3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgIDEgICAtPiAgMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzQ3MCBmbWEgIDEgICAgLTc3ZS03ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5MjMNCitmbWF4MzQ3MSBmbWEgIDEgICAgLTc3ZS04ICAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTIzDQorZm1heDM0NzIgZm1hICAxICAgIC03N2UtOSAgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ3MyBmbWEgIDEgICAgLTc3ZS0xMCAgICAgIDEwICAgLT4gICA5Ljk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDc0IGZtYSAgMSAgICAtNzdlLTExICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ3NSBmbWEgIDEgICAgLTc3ZS0xMiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0NzYgZm1hICAxICAgIC03N2UtOTk5ICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDc3IGZtYSAgMSAgICAtNzdlLTk5OTk5OSAgMTAgICAtPiAgMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBuZWdhdGl2ZSB1bHBzDQorZm1heDM0ODAgZm1hICAxICAgIC0xICAgIDc3ZS03ICAgICAgIC0+ICAtMC45OTk5OTIzDQorZm1heDM0ODEgZm1hICAxICAgIC0xICAgIDc3ZS04ICAgICAgIC0+ICAtMC45OTk5OTkyMw0KK2ZtYXgzNDgyIGZtYSAgMSAgICAtMSAgICA3N2UtOSAgICAgICAtPiAgLTAuOTk5OTk5OTIzDQorZm1heDM0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xMCAgICAgIC0+ICAtMC45OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0ODQgZm1hICAxICAgIC0xICAgIDc3ZS0xMSAgICAgIC0+ICAtMC45OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0ODUgZm1hICAxICAgIC0xICAgIDc3ZS0xMiAgICAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5OSAgICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDg3IGZtYSAgMSAgICAtMSAgICA3N2UtOTk5OTk5ICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM0OTAgZm1hICAxICAgLTEwICAgIDc3ZS03ICAgICAgIC0+ICAgLTkuOTk5OTkyMw0KK2ZtYXgzNDkxIGZtYSAgMSAgIC0xMCAgICA3N2UtOCAgICAgICAtPiAgIC05Ljk5OTk5OTIzDQorZm1heDM0OTIgZm1hICAxICAgLTEwICAgIDc3ZS05ICAgICAgIC0+ICAgLTkuOTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xMCAgICAgIC0+ICAgLTkuOTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0OTQgZm1hICAxICAgLTEwICAgIDc3ZS0xMSAgICAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzQ5NSBmbWEgIDEgICAtMTAgICAgNzdlLTEyICAgICAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTk5ICAgICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM0OTcgZm1hICAxICAgLTEwICAgIDc3ZS05OTk5OTkgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzUwMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5MjMNCitmbWF4MzUwMSBmbWEgIDEgICAgIDc3ZS04ICAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTIzDQorZm1heDM1MDIgZm1hICAxICAgICA3N2UtOSAgICAgICAtMSAgIC0+ICAtMC45OTk5OTk5MjMNCitmbWF4MzUwMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUwNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUwNSBmbWEgIDEgICAgIDc3ZS0xMiAgICAgIC0xICAgLT4gIC0xLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNTA2IGZtYSAgMSAgICAgNzdlLTk5OSAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM1MDcgZm1hICAxICAgICA3N2UtOTk5OTk5ICAtMSAgIC0+ICAtMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzUxMCBmbWEgIDEgICAgIDc3ZS03ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTIzDQorZm1heDM1MTEgZm1hICAxICAgICA3N2UtOCAgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5MjMNCitmbWF4MzUxMiBmbWEgIDEgICAgIDc3ZS05ICAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUxMyBmbWEgIDEgICAgIDc3ZS0xMCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUxNCBmbWEgIDEgICAgIDc3ZS0xMSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNTE1IGZtYSAgMSAgICAgNzdlLTEyICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM1MTYgZm1hICAxICAgICA3N2UtOTk5ICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUxNyBmbWEgIDEgICAgIDc3ZS05OTk5OTkgIC0xMCAgLT4gIC0xMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKy0tIGxvbmcgb3BlcmFuZHMNCittYXhleHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCitwcmVjaXNpb246IDkNCitmbWF4MzUyMSBmbWEgIDEgICAxMjM0NTY3ODAwMCAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCitmbWF4MzUyMiBmbWEgIDEgICAwIDEyMzQ1Njc4MDAwIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCitmbWF4MzUyMyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEuMjM0NTY3ODBFKzkgUm91bmRlZA0KK2ZtYXgzNTI0IGZtYSAgMSAgIDAgMTIzNDU2NzgwMCAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQorZm1heDM1MjUgZm1hICAxICAgMTIzNDU2Nzg5MCAgMCAtPiAxLjIzNDU2Nzg5RSs5IFJvdW5kZWQNCitmbWF4MzUyNiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZA0KK2ZtYXgzNTI3IGZtYSAgMSAgIDEyMzQ1Njc4OTEgIDAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUyOCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEuMjM0NTY3ODlFKzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM1MjkgZm1hICAxICAgMTIzNDU2Nzg5MDEgMCAtPiAxLjIzNDU2Nzg5RSsxMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUzMCBmbWEgIDEgICAwIDEyMzQ1Njc4OTAxIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNTMxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzUzMiBmbWEgIDEgICAwIDEyMzQ1Njc4OTYgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQorDQorcHJlY2lzaW9uOiAxNQ0KKy0tIHN0aWxsIGNoZWNraW5nDQorZm1heDM1NDEgZm1hICAxICAgMTIzNDU2NzgwMDAgMCAtPiAxMjM0NTY3ODAwMA0KK2ZtYXgzNTQyIGZtYSAgMSAgIDAgMTIzNDU2NzgwMDAgLT4gMTIzNDU2NzgwMDANCitmbWF4MzU0MyBmbWEgIDEgICAxMjM0NTY3ODAwICAwIC0+IDEyMzQ1Njc4MDANCitmbWF4MzU0NCBmbWEgIDEgICAwIDEyMzQ1Njc4MDAgIC0+IDEyMzQ1Njc4MDANCitmbWF4MzU0NSBmbWEgIDEgICAxMjM0NTY3ODkwICAwIC0+IDEyMzQ1Njc4OTANCitmbWF4MzU0NiBmbWEgIDEgICAwIDEyMzQ1Njc4OTAgIC0+IDEyMzQ1Njc4OTANCitmbWF4MzU0NyBmbWEgIDEgICAxMjM0NTY3ODkxICAwIC0+IDEyMzQ1Njc4OTENCitmbWF4MzU0OCBmbWEgIDEgICAwIDEyMzQ1Njc4OTEgIC0+IDEyMzQ1Njc4OTENCitmbWF4MzU0OSBmbWEgIDEgICAxMjM0NTY3ODkwMSAwIC0+IDEyMzQ1Njc4OTAxDQorZm1heDM1NTAgZm1hICAxICAgMCAxMjM0NTY3ODkwMSAtPiAxMjM0NTY3ODkwMQ0KK2ZtYXgzNTUxIGZtYSAgMSAgIDEyMzQ1Njc4OTYgIDAgLT4gMTIzNDU2Nzg5Ng0KK2ZtYXgzNTUyIGZtYSAgMSAgIDAgMTIzNDU2Nzg5NiAgLT4gMTIzNDU2Nzg5Ng0KKw0KKy0tIHZlcmlmeSBhIHF1ZXJ5DQorcHJlY2lzaW9uOiAgICAxNg0KK21heEV4cG9uZW50OiArMzk0DQorbWluRXhwb25lbnQ6IC0zOTMNCityb3VuZGluZzogICAgIGRvd24NCitmbWF4MzU2MSBmbWEgIDEgICAxZS0zOTggOS4wMDAwMDAwMDAwMDAwMDBFKzM4NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZA0KKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uDQorcHJlY2lzaW9uOiAgICAxNg0KK21heEV4cG9uZW50OiArMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCityb3VuZGluZzogICAgIGRvd24NCitmbWF4MzU2MyBmbWEgIDEgICAxZS0zODggOS4wMDAwMDAwMDAwMDAwMDBFKzM3NCAtPiA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KKw0KKw0KKy0tIHNvbWUgbW9yZSByZXNpZHVlIGVmZmVjdHMgd2l0aCBleHRyZW1lIHJvdW5kaW5nDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogaGFsZl91cA0KK2ZtYXgzNjAxIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitmbWF4MzYwMiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogaGFsZl9kb3duDQorZm1heDM2MDMgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGZsb29yDQorZm1heDM2MDQgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGNlaWxpbmcNCitmbWF4MzYwNSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogdXANCitmbWF4MzYwNiBmbWEgIDEgICAxMjM0NTY3ODkgIDAuMDAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogZG93bg0KK2ZtYXgzNjA3IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZm1heDM2MTEgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2ZtYXgzNjEyIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBoYWxmX2Rvd24NCitmbWF4MzYxMyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogZmxvb3INCitmbWF4MzYxNCBmbWEgIDEgICAxMjM0NTY3ODkgLTAuMDAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogY2VpbGluZw0KK2ZtYXgzNjE1IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiB1cA0KK2ZtYXgzNjE2IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC4wMDAwMDEgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBkb3duDQorZm1heDM2MTcgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjAwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfdXANCitmbWF4MzYyMSBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogaGFsZl9ldmVuDQorZm1heDM2MjIgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGhhbGZfZG93bg0KK2ZtYXgzNjIzIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBmbG9vcg0KK2ZtYXgzNjI0IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBjZWlsaW5nDQorZm1heDM2MjUgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IHVwDQorZm1heDM2MjYgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjQ5OTk5OSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGRvd24NCitmbWF4MzYyNyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogaGFsZl91cA0KK2ZtYXgzNjMxIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg5IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitmbWF4MzYzMiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogaGFsZl9kb3duDQorZm1heDM2MzMgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGZsb29yDQorZm1heDM2MzQgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjQ5OTk5OSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGNlaWxpbmcNCitmbWF4MzYzNSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogdXANCitmbWF4MzYzNiBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNDk5OTk5IC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogZG93bg0KK2ZtYXgzNjM3IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC40OTk5OTkgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX3VwDQorZm1heDM2NDEgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3OTAgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2ZtYXgzNjQyIGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBoYWxmX2Rvd24NCitmbWF4MzY0MyBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc5MCBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogZmxvb3INCitmbWF4MzY0NCBmbWEgIDEgICAxMjM0NTY3ODkgIDAuNTAwMDAxIC0+IDEyMzQ1Njc4OSBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogY2VpbGluZw0KK2ZtYXgzNjQ1IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiB1cA0KK2ZtYXgzNjQ2IGZtYSAgMSAgIDEyMzQ1Njc4OSAgMC41MDAwMDEgLT4gMTIzNDU2NzkwIEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBkb3duDQorZm1heDM2NDcgZm1hICAxICAgMTIzNDU2Nzg5ICAwLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGhhbGZfdXANCitmbWF4MzY1MSBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCityb3VuZGluZzogaGFsZl9ldmVuDQorZm1heDM2NTIgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODggSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGhhbGZfZG93bg0KK2ZtYXgzNjUzIGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBmbG9vcg0KK2ZtYXgzNjU0IGZtYSAgMSAgIDEyMzQ1Njc4OSAtMC41MDAwMDEgLT4gMTIzNDU2Nzg4IEluZXhhY3QgUm91bmRlZA0KK3JvdW5kaW5nOiBjZWlsaW5nDQorZm1heDM2NTUgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IHVwDQorZm1heDM2NTYgZm1hICAxICAgMTIzNDU2Nzg5IC0wLjUwMDAwMSAtPiAxMjM0NTY3ODkgSW5leGFjdCBSb3VuZGVkDQorcm91bmRpbmc6IGRvd24NCitmbWF4MzY1NyBmbWEgIDEgICAxMjM0NTY3ODkgLTAuNTAwMDAxIC0+IDEyMzQ1Njc4OCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBsb25nIG9wZXJhbmQgdHJpYW5nbGUNCityb3VuZGluZzogaGFsZl91cA0KK3ByZWNpc2lvbjogIDM3DQorZm1heDM2NjAgZm1hICAxICAgOTg0NzExOTgxNjAuNTY1MjQ0MTc1Nzg2NjU4ODYwNjAgLTIzOTk0LjE0MzEzMzkzOTM5NzQzNTQ4OTQ1MTY1NDYyIC0+IDk4NDcxMTc0MTY2LjQyMjExMDIzNjM4OTIyMzM3MTE0ODM0NTM4DQorcHJlY2lzaW9uOiAgMzYNCitmbWF4MzY2MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1NCAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzUNCitmbWF4MzY2MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzQ1ICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzQNCitmbWF4MzY2MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MzUgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzMNCitmbWF4MzY2NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4MyAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzINCitmbWF4MzY2NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTQ4ICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzENCitmbWF4MzY2NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMzANCitmbWF4MzY2NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxMSAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjkNCitmbWF4MzY2OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcxICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjgNCitmbWF4MzY2OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzMzcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjcNCitmbWF4MzY3MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzNCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjYNCitmbWF4MzY3MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIzICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjUNCitmbWF4MzY3MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MjIgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjQNCitmbWF4MzY3MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5MiAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjMNCitmbWF4MzY3NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2Mzg5ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjINCitmbWF4MzY3NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2MzkgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjENCitmbWF4MzY3NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2NCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMjANCitmbWF4MzY3NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjM2ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTkNCitmbWF4MzY3OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMjQgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTgNCitmbWF4MzY3OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwMiAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTcNCitmbWF4MzY4MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTYNCitmbWF4MzY4MSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMTEgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTUNCitmbWF4MzY4MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyMSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTQNCitmbWF4MzY4MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIyICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTMNCitmbWF4MzY4NCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNDIgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTINCitmbWF4MzY4NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYuNCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTENCitmbWF4MzY4NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOTg0NzExNzQxNjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMTANCitmbWF4MzY4NyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDkNCitmbWF4MzY4OCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0MkUrMTAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDgNCitmbWF4MzY4OSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTc0RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDcNCitmbWF4MzY5MCBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxMTdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgNg0KK2ZtYXgzNjkxIGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg0NzEyRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDUNCitmbWF4MzY5MiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDcxRSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDQNCitmbWF4MzY5MyBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44NDdFKzEwICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMw0KK2ZtYXgzNjk0IGZtYSAgMSAgIDk4NDcxMTk4MTYwLjU2NTI0NDE3NTc4NjY1ODg2MDYwIC0yMzk5NC4xNDMxMzM5MzkzOTc0MzU0ODk0NTE2NTQ2MiAtPiA5Ljg1RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDINCitmbWF4MzY5NSBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gOS44RSsxMCAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDENCitmbWF4MzY5NiBmbWEgIDEgICA5ODQ3MTE5ODE2MC41NjUyNDQxNzU3ODY2NTg4NjA2MCAtMjM5OTQuMTQzMTMzOTM5Mzk3NDM1NDg5NDUxNjU0NjIgLT4gMUUrMTEgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG1vcmUgemVyb3MsIGV0Yy4NCityb3VuZGluZzogaGFsZl91cA0KK3ByZWNpc2lvbjogICA5DQorDQorZm1heDM3MDEgZm1hICAxICAgNS4wMCAxLjAwRS0zIC0+IDUuMDAxMDANCitmbWF4MzcwMiBmbWEgIDEgICAwMC4wMCAwLjAwMCAgLT4gMC4wMDANCitmbWF4MzcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCitmbWF4MzcwNCBmbWEgIDEgICAwRS0zICAwMC4wMCAgLT4gMC4wMDANCisNCitmbWF4MzcxMCBmbWEgIDEgICAwRSszICAwMC4wMCAgLT4gMC4wMA0KK2ZtYXgzNzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjANCitmbWF4MzcxMiBmbWEgIDEgICAwRSszICAwMC4gICAgLT4gMA0KK2ZtYXgzNzEzIGZtYSAgMSAgIDBFKzMgIDAwLkUrMSAtPiAwRSsxDQorZm1heDM3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCitmbWF4MzcxNSBmbWEgIDEgICAwRSszICAwMC5FKzMgLT4gMEUrMw0KK2ZtYXgzNzE2IGZtYSAgMSAgIDBFKzMgIDAwLkUrNCAtPiAwRSszDQorZm1heDM3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCitmbWF4MzcxOCBmbWEgIDEgICAwRSszICAtMDAuMCAgIC0+IDAuMA0KK2ZtYXgzNzE5IGZtYSAgMSAgIDBFKzMgIC0wMC4gICAgLT4gMA0KK2ZtYXgzNzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KKw0KK2ZtYXgzNzIwIGZtYSAgMSAgIDAwLjAwICAwRSszICAtPiAwLjAwDQorZm1heDM3MjEgZm1hICAxICAgMDAuMCAgIDBFKzMgIC0+IDAuMA0KK2ZtYXgzNzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwDQorZm1heDM3MjMgZm1hICAxICAgMDAuRSsxIDBFKzMgIC0+IDBFKzENCitmbWF4MzcyNCBmbWEgIDEgICAwMC5FKzIgMEUrMyAgLT4gMEUrMg0KK2ZtYXgzNzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszDQorZm1heDM3MjYgZm1hICAxICAgMDAuRSs0IDBFKzMgIC0+IDBFKzMNCitmbWF4MzcyNyBmbWEgIDEgICAwMC5FKzUgMEUrMyAgLT4gMEUrMw0KK2ZtYXgzNzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwDQorZm1heDM3MjkgZm1hICAxICAgLTAwLjAgIDBFKzMgIC0+IDAuMA0KK2ZtYXgzNzMwIGZtYSAgMSAgIC0wMC4gICAwRSszICAtPiAwDQorDQorZm1heDM3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwDQorZm1heDM3MzMgZm1hICAxICAgIDAgICAgLTAgICAgIC0+ICAwDQorZm1heDM3MzQgZm1hICAxICAgLTAgICAgIDAgICAgIC0+ICAwDQorZm1heDM3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCisNCitmbWF4MzczNiBmbWEgIDEgICAgMSAgICAtMSAgICAgLT4gIDANCitmbWF4MzczNyBmbWEgIDEgICAtMSAgICAtMSAgICAgLT4gLTINCitmbWF4MzczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDINCitmbWF4MzczOSBmbWEgIDEgICAtMSAgICAgMSAgICAgLT4gIDANCisNCitmbWF4Mzc0MSBmbWEgIDEgICAgMCAgICAtMSAgICAgLT4gLTENCitmbWF4Mzc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTENCitmbWF4Mzc0MyBmbWEgIDEgICAgMCAgICAgMSAgICAgLT4gIDENCitmbWF4Mzc0NCBmbWEgIDEgICAtMCAgICAgMSAgICAgLT4gIDENCitmbWF4Mzc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTENCitmbWF4Mzc0NiBmbWEgIDEgICAtMSAgICAtMCAgICAgLT4gLTENCitmbWF4Mzc0NyBmbWEgIDEgICAgMSAgICAgMCAgICAgLT4gIDENCitmbWF4Mzc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDENCisNCitmbWF4Mzc1MSBmbWEgIDEgICAgMC4wICAtMSAgICAgLT4gLTEuMA0KK2ZtYXgzNzUyIGZtYSAgMSAgIC0wLjAgIC0xICAgICAtPiAtMS4wDQorZm1heDM3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjANCitmbWF4Mzc1NCBmbWEgIDEgICAtMC4wICAgMSAgICAgLT4gIDEuMA0KK2ZtYXgzNzU1IGZtYSAgMSAgIC0xLjAgICAwICAgICAtPiAtMS4wDQorZm1heDM3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjANCitmbWF4Mzc1NyBmbWEgIDEgICAgMS4wICAgMCAgICAgLT4gIDEuMA0KK2ZtYXgzNzU4IGZtYSAgMSAgICAxLjAgIC0wICAgICAtPiAgMS4wDQorDQorZm1heDM3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjANCitmbWF4Mzc2MiBmbWEgIDEgICAtMCAgICAtMS4wICAgLT4gLTEuMA0KK2ZtYXgzNzYzIGZtYSAgMSAgICAwICAgICAxLjAgICAtPiAgMS4wDQorZm1heDM3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjANCitmbWF4Mzc2NSBmbWEgIDEgICAtMSAgICAgMC4wICAgLT4gLTEuMA0KK2ZtYXgzNzY2IGZtYSAgMSAgIC0xICAgIC0wLjAgICAtPiAtMS4wDQorZm1heDM3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjANCitmbWF4Mzc2OCBmbWEgIDEgICAgMSAgICAtMC4wICAgLT4gIDEuMA0KKw0KK2ZtYXgzNzcxIGZtYSAgMSAgICAwLjAgIC0xLjAgICAtPiAtMS4wDQorZm1heDM3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCitmbWF4Mzc3MyBmbWEgIDEgICAgMC4wICAgMS4wICAgLT4gIDEuMA0KK2ZtYXgzNzc0IGZtYSAgMSAgIC0wLjAgICAxLjAgICAtPiAgMS4wDQorZm1heDM3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCitmbWF4Mzc3NiBmbWEgIDEgICAtMS4wICAtMC4wICAgLT4gLTEuMA0KK2ZtYXgzNzc3IGZtYSAgMSAgICAxLjAgICAwLjAgICAtPiAgMS4wDQorZm1heDM3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCisNCistLSBTcGVjaWFscw0KK2ZtYXgzNzgwIGZtYSAgMSAgIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4Mzc4MSBmbWEgIDEgICAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorZm1heDM3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNzgzIGZtYSAgMSAgIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitmbWF4Mzc4NCBmbWEgIDEgICAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorZm1heDM3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNzg2IGZtYSAgMSAgIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitmbWF4Mzc4NyBmbWEgIDEgICAtMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNzg5IGZtYSAgMSAgIC0xICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4Mzc5MCBmbWEgIDEgICAtMCAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNzkyIGZtYSAgMSAgICAxICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4Mzc5MyBmbWEgIDEgICAgMTAwMCAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorZm1heDM4MDAgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4MDEgZm1hICAxICAgIEluZiAgLTEwMDAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitmbWF4MzgwMyBmbWEgIDEgICAgSW5mICAtMCAgICAgLT4gIEluZmluaXR5DQorZm1heDM4MDQgZm1hICAxICAgIEluZiAgIDAgICAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitmbWF4MzgwNiBmbWEgIDEgICAgSW5mICAgMTAwMCAgLT4gIEluZmluaXR5DQorZm1heDM4MDcgZm1hICAxICAgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitmbWF4MzgwOSBmbWEgIDEgICAtSW5mICAgSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzgxMCBmbWEgIDEgICAtMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZm1heDM4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzODEyIGZtYSAgMSAgICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitmbWF4MzgxMyBmbWEgIDEgICAgMSAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZm1heDM4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzODE1IGZtYSAgMSAgICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitmbWF4MzgyMSBmbWEgIDEgICAgTmFOIC1JbmYgICAgLT4gIE5hTg0KK2ZtYXgzODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFODQorZm1heDM4MjMgZm1hICAxICAgIE5hTiAtMSAgICAgIC0+ICBOYU4NCitmbWF4MzgyNCBmbWEgIDEgICAgTmFOIC0wICAgICAgLT4gIE5hTg0KK2ZtYXgzODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFODQorZm1heDM4MjYgZm1hICAxICAgIE5hTiAgMSAgICAgIC0+ICBOYU4NCitmbWF4MzgyNyBmbWEgIDEgICAgTmFOICAxMDAwICAgLT4gIE5hTg0KK2ZtYXgzODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFODQorZm1heDM4MjkgZm1hICAxICAgIE5hTiAgTmFOICAgIC0+ICBOYU4NCitmbWF4MzgzMCBmbWEgIDEgICAtSW5mICBOYU4gICAgLT4gIE5hTg0KK2ZtYXgzODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZm1heDM4MzIgZm1hICAxICAgLTEgICAgTmFOICAgIC0+ICBOYU4NCitmbWF4MzgzMyBmbWEgIDEgICAtMCAgICBOYU4gICAgLT4gIE5hTg0KK2ZtYXgzODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFODQorZm1heDM4MzUgZm1hICAxICAgIDEgICAgTmFOICAgIC0+ICBOYU4NCitmbWF4MzgzNiBmbWEgIDEgICAgMTAwMCBOYU4gICAgLT4gIE5hTg0KK2ZtYXgzODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorZm1heDM4NDEgZm1hICAxICAgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDIgZm1hICAxICAgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDQgZm1hICAxICAgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDUgZm1hICAxICAgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDcgZm1hICAxICAgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDggZm1hICAxICAgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTAgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTEgZm1hICAxICAgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTMgZm1hICAxICAgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTQgZm1hICAxICAgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTYgZm1hICAxICAgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTcgZm1hICAxICAgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NTkgZm1hICAxICAgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2ZtYXgzODYxIGZtYSAgMSAgICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQ0KK2ZtYXgzODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KK2ZtYXgzODYzIGZtYSAgMSAgICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KK2ZtYXgzODY0IGZtYSAgMSAgICBOYU40ICAgIEluZiAgICAtPiAgTmFONA0KK2ZtYXgzODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KK2ZtYXgzODY2IGZtYSAgMSAgIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KK2ZtYXgzODY3IGZtYSAgMSAgIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOA0KK2ZtYXgzODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KK2ZtYXgzODY5IGZtYSAgMSAgICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCitmbWF4Mzg3MSBmbWEgIDEgICAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NzMgZm1hICAxICAgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4Mzg3NCBmbWEgIDEgICAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NzYgZm1hICAxICAgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4Mzg3NyBmbWEgIDEgICAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4NzkgZm1hICAxICAgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4Mzg4MCBmbWEgIDEgICAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4ODIgZm1hICAxICAgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KK2ZtYXgzODgzIGZtYSAgMSAgIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KK2ZtYXgzODg1IGZtYSAgMSAgICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gb3ZlcmZsb3csIHVuZGVyZmxvdyBhbmQgc3Vibm9ybWFsIHRlc3RzDQorbWF4ZXhwb25lbnQ6IDk5OTk5OQ0KK21pbmV4cG9uZW50OiAtOTk5OTk5DQorcHJlY2lzaW9uOiA5DQorZm1heDM4OTAgZm1hICAxICAgMUUrOTk5OTk5ICAgICA5RSs5OTk5OTkgICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4Mzg5MSBmbWEgIDEgICA5RSs5OTk5OTkgICAgIDFFKzk5OTk5OSAgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzODkyIGZtYSAgMSAgIC0xLjFFLTk5OTk5OSAgMUUtOTk5OTk5ICAgLT4gLTFFLTEwMDAwMDAgICAgU3Vibm9ybWFsDQorZm1heDM4OTMgZm1hICAxICAgMUUtOTk5OTk5ICAgIC0xLjFlLTk5OTk5OSAtPiAtMUUtMTAwMDAwMCAgICBTdWJub3JtYWwNCitmbWF4Mzg5NCBmbWEgIDEgICAtMS4wMDAxRS05OTk5OTkgIDFFLTk5OTk5OSAgIC0+IC0xRS0xMDAwMDAzIFN1Ym5vcm1hbA0KK2ZtYXgzODk1IGZtYSAgMSAgIDFFLTk5OTk5OSAgICAtMS4wMDAxZS05OTk5OTkgLT4gLTFFLTEwMDAwMDMgU3Vibm9ybWFsDQorZm1heDM4OTYgZm1hICAxICAgLTFFKzk5OTk5OSAgIC05RSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM4OTcgZm1hICAxICAgLTlFKzk5OTk5OSAgIC0xRSs5OTk5OTkgICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM4OTggZm1hICAxICAgKzEuMUUtOTk5OTk5IC0xRS05OTk5OTkgICAtPiAxRS0xMDAwMDAwICAgU3Vibm9ybWFsDQorZm1heDM4OTkgZm1hICAxICAgLTFFLTk5OTk5OSAgICsxLjFlLTk5OTk5OSAtPiAxRS0xMDAwMDAwICAgIFN1Ym5vcm1hbA0KK2ZtYXgzOTAwIGZtYSAgMSAgICsxLjAwMDFFLTk5OTk5OSAtMUUtOTk5OTk5ICAgLT4gMUUtMTAwMDAwMyBTdWJub3JtYWwNCitmbWF4MzkwMSBmbWEgIDEgICAtMUUtOTk5OTk5ICAgKzEuMDAwMWUtOTk5OTk5IC0+IDFFLTEwMDAwMDMgU3Vibm9ybWFsDQorZm1heDM5MDIgZm1hICAxICAgLTFFKzk5OTk5OSAgICs5RSs5OTk5OTkgICAtPiAgOEUrOTk5OTk5DQorZm1heDM5MDMgZm1hICAxICAgLTlFKzk5OTk5OSAgICsxRSs5OTk5OTkgICAtPiAtOEUrOTk5OTk5DQorDQorcHJlY2lzaW9uOiAzDQorZm1heDM5MDQgZm1hICAxICAgICAgICAwIC05Ljk5OUUrOTk5OTk5ICAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK2ZtYXgzOTA1IGZtYSAgMSAgICAgICAgICAtOS45OTlFKzk5OTk5OSAwIC0+IC1JbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQNCitmbWF4MzkwNiBmbWEgIDEgICAgICAgIDAgIDkuOTk5RSs5OTk5OTkgICAtPiAgSW5maW5pdHkgSW5leGFjdCBPdmVyZmxvdyBSb3VuZGVkDQorZm1heDM5MDcgZm1hICAxICAgICAgICAgICA5Ljk5OUUrOTk5OTk5IDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KK3ByZWNpc2lvbjogMw0KK21heGV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK2ZtYXgzOTEwIGZtYSAgMSAgICAxLjAwRS05OTkgICAwICAgIC0+ICAgMS4wMEUtOTk5DQorZm1heDM5MTEgZm1hICAxICAgIDAuMUUtOTk5ICAgIDAgICAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsDQorZm1heDM5MTIgZm1hICAxICAgIDAuMTBFLTk5OSAgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsDQorZm1heDM5MTMgZm1hICAxICAgIDAuMTAwRS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4MzkxNCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgMCAgICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwNCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbg0KK2ZtYXgzOTE1IGZtYSAgMSAgICAwLjk5OUUtOTk5ICAwICAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDM5MTYgZm1hICAxICAgIDAuMDk5RS05OTkgIDAgICAgLT4gICAxLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzkxNyBmbWEgIDEgICAgMC4wMDlFLTk5OSAgMCAgICAtPiAgIDFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTE4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAwICAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzkxOSBmbWEgIDEgICAgMC4wMDA5RS05OTkgMCAgICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM5MjAgZm1hICAxICAgIDAuMDAwMUUtOTk5IDAgICAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KK2ZtYXgzOTMwIGZtYSAgMSAgIC0xLjAwRS05OTkgICAwICAgIC0+ICAtMS4wMEUtOTk5DQorZm1heDM5MzEgZm1hICAxICAgLTAuMUUtOTk5ICAgIDAgICAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsDQorZm1heDM5MzIgZm1hICAxICAgLTAuMTBFLTk5OSAgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsDQorZm1heDM5MzMgZm1hICAxICAgLTAuMTAwRS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4MzkzNCBmbWEgIDEgICAtMC4wMUUtOTk5ICAgMCAgICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwNCistLSBuZXh0IGlzIHJvdW5kZWQgdG8gTm1pbg0KK2ZtYXgzOTM1IGZtYSAgMSAgIC0wLjk5OUUtOTk5ICAwICAgIC0+ICAtMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDM5MzYgZm1hICAxICAgLTAuMDk5RS05OTkgIDAgICAgLT4gIC0xLjBFLTEwMDAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzkzNyBmbWEgIDEgICAtMC4wMDlFLTk5OSAgMCAgICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTM4IGZtYSAgMSAgIC0wLjAwMUUtOTk5ICAwICAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzkzOSBmbWEgIDEgICAtMC4wMDA5RS05OTkgMCAgICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM5NDAgZm1hICAxICAgLTAuMDAwMUUtOTk5IDAgICAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KKy0tIHNvbWUgbm9uLXplcm8gc3Vibm9ybWFsIGZtYSAgMSAgcw0KK2ZtYXgzOTUwIGZtYSAgMSAgICAxLjAwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMS4xMEUtOTk5DQorZm1heDM5NTEgZm1hICAxICAgIDAuMUUtOTk5ICAgICAwLjFFLTk5OSAgLT4gICAyRS0xMDAwICAgIFN1Ym5vcm1hbA0KK2ZtYXgzOTUyIGZtYSAgMSAgICAwLjEwRS05OTkgICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBTdWJub3JtYWwNCitmbWF4Mzk1MyBmbWEgIDEgICAgMC4xMDBFLTk5OSAgIDAuMUUtOTk5ICAtPiAgIDIuMEUtMTAwMCAgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4Mzk1NCBmbWEgIDEgICAgMC4wMUUtOTk5ICAgIDAuMUUtOTk5ICAtPiAgIDEuMUUtMTAwMCAgU3Vibm9ybWFsDQorZm1heDM5NTUgZm1hICAxICAgIDAuOTk5RS05OTkgICAwLjFFLTk5OSAgLT4gICAxLjEwRS05OTkgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzOTU2IGZtYSAgMSAgICAwLjA5OUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMi4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTU3IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4xRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTU4IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTU5IGZtYSAgMSAgICAwLjAwMDlFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTYwIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAgMC4xRS05OTkgIC0+ICAgMS4wRS0xMDAwICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KKy0tIG5lZ2F0aXZlcy4uLg0KK2ZtYXgzOTYxIGZtYSAgMSAgICAxLjAwRS05OTkgICAtMC4xRS05OTkgIC0+ICAgOS4wRS0xMDAwICBTdWJub3JtYWwNCitmbWF4Mzk2MiBmbWEgIDEgICAgMC4xRS05OTkgICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDANCitmbWF4Mzk2MyBmbWEgIDEgICAgMC4xMEUtOTk5ICAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDENCitmbWF4Mzk2NCBmbWEgIDEgICAgMC4xMDBFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDBFLTEwMDEgICAgQ2xhbXBlZA0KK2ZtYXgzOTY1IGZtYSAgMSAgICAwLjAxRS05OTkgICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBTdWJub3JtYWwNCitmbWF4Mzk2NiBmbWEgIDEgICAgMC45OTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIDkuMEUtMTAwMCAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4Mzk2NyBmbWEgIDEgICAgMC4wOTlFLTk5OSAgLTAuMUUtOTk5ICAtPiAgIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzOTY4IGZtYSAgMSAgICAwLjAwOUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTlFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTY5IGZtYSAgMSAgICAwLjAwMUUtOTk5ICAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTcwIGZtYSAgMSAgICAwLjAwMDlFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzOTcxIGZtYSAgMSAgICAwLjAwMDFFLTk5OSAtMC4xRS05OTkgIC0+ICAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KKw0KKy0tIHNvbWUgJ3JlYWwnIG51bWJlcnMNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitwcmVjaXNpb246IDgNCitmbWF4MzU2NiBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5MDZFLTM4NCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IFN1Ym5vcm1hbA0KK3ByZWNpc2lvbjogNw0KK2ZtYXgzNTY3IGZtYSAgMSAgIDk5OTk5MDYxNzM1RS0zOTQgIDBFLTM5NCAtPiA5Ljk5OTkxRS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCitwcmVjaXNpb246IDYNCitmbWF4MzU2OCBmbWEgIDEgICA5OTk5OTA2MTczNUUtMzk0ICAwRS0zOTQgLT4gOS45OTk5RS0zODQgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBTdWJub3JtYWwNCisNCistLSBub3cgdGhlIGNhc2Ugd2hlcmUgd2UgY2FuIGdldCB1bmRlcmZsb3cgYnV0IHRoZSByZXN1bHQgaXMgbm9ybWFsDQorLS0gW25vdGUgdGhpcyBjYW4ndCBoYXBwZW4gaWYgdGhlIG9wZXJhbmRzIGFyZSBhbHNvIGJvdW5kZWQsIGFzIHdlDQorLS0gY2Fubm90IHJlcHJlc2VudCAxRS0zOTksIGZvciBleGFtcGxlXQ0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorDQorZm1heDM1NzEgZm1hICAxICAgICAgICAgMUUtMzgzICAgICAgIDAgIC0+IDFFLTM4Mw0KK2ZtYXgzNTcyIGZtYSAgMSAgICAgICAgIDFFLTM4NCAgICAgICAwICAtPiAxRS0zODQgICBTdWJub3JtYWwNCitmbWF4MzU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMNCitmbWF4MzU3NCBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zODQgIC0+ICAgOUUtMzg0IFN1Ym5vcm1hbA0KKw0KKy0tIEhlcmUgd2UgZXhwbG9yZSB0aGUgYm91bmRhcnkgb2Ygcm91bmRpbmcgYSBzdWJub3JtYWwgdG8gTm1pbg0KK2ZtYXgzNTc1IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KK2ZtYXgzNTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KK2ZtYXgzNTc3IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OSAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorZm1heDM1Nzggc3VidHJhY3QgIDFFLTM4MyAgMUUtNDAwICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRS0zODMgVW5kZXJmbG93IEluZXhhY3QgU3Vibm9ybWFsIFJvdW5kZWQNCitmbWF4MzU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2ZtYXgzNTgwIHN1YnRyYWN0ICAxRS0zODMgIDFFLTQwMiAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUtMzgzIFVuZGVyZmxvdyBJbmV4YWN0IFN1Ym5vcm1hbCBSb3VuZGVkDQorDQorLS0gY2hlY2sgZm9yIGRvdWJsZS1yb3VuZGVkIHN1Ym5vcm1hbHMNCitwcmVjaXNpb246ICAgNQ0KK21heGV4cG9uZW50OiA3OQ0KK21pbmV4cG9uZW50OiAtNzkNCistLSBBZGQ6IGxocyBhbmQgcmhzIDANCitmbWF4MzEwMDEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMDIgZm1hICAxICAgICAgICAgMS41MjQ0NUUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMDMgZm1hICAxICAgICAgICAgMS41MjQ0NkUtODAgMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMDQgZm1hICAxICAgICAgICAgMCAxLjUyNDQ0RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMDUgZm1hICAxICAgICAgICAgMCAxLjUyNDQ1RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMDYgZm1hICAxICAgICAgICAgMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBBZGQ6IGxocyA+PiByaHMgYW5kIHZpY2UgdmVyc2ENCitmbWF4MzEwMTEgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMUUtMTAwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzMTAxMiBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxRS0xMDAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMDEzIGZtYSAgMSAgICAgICAgIDEuNTI0NDZFLTgwIDFFLTEwMCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMTQgZm1hICAxICAgICAgICAgMUUtMTAwIDEuNTI0NDRFLTgwIC0+IDEuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzMTAxNSBmbWEgIDEgICAgICAgICAxRS0xMDAgMS41MjQ0NUUtODAgLT4gMS41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMDE2IGZtYSAgMSAgICAgICAgIDFFLTEwMCAxLjUyNDQ2RS04MCAtPiAxLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCisNCistLSBBZGQ6IGxocyArIHJocyBmbWEgIDEgIGl0aW9uIGNhcnJpZWQgb3V0DQorZm1heDMxMDIxIGZtYSAgMSAgICAgICAgIDEuNTI0NDNFLTgwIDEuMDAwMDFFLTgwICAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMjIgZm1hICAxICAgICAgICAgMS41MjQ0NEUtODAgMS4wMDAwMUUtODAgIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzMTAyMyBmbWEgIDEgICAgICAgICAxLjUyNDQ1RS04MCAxLjAwMDAxRS04MCAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMDI0IGZtYSAgMSAgICAgICAgIDEuMDAwMDFFLTgwICAxLjUyNDQzRS04MCAtPiAyLjUyNEUtODAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitmbWF4MzEwMjUgZm1hICAxICAgICAgICAgMS4wMDAwMUUtODAgIDEuNTI0NDRFLTgwIC0+IDIuNTI0RS04MCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK2ZtYXgzMTAyNiBmbWEgIDEgICAgICAgICAxLjAwMDAxRS04MCAgMS41MjQ0NUUtODAgLT4gMi41MjRFLTgwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorDQorLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQorcHJlY2lzaW9uOiAgICAxNg0KK21heEV4cG9uZW50OiArMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCityb3VuZGluZzogICAgIGRvd24NCisNCitmbWF4MzExMDAgZm1hICAxICAgMWUrMiAtMWUtMzgzICAgIC0+IDk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwMyBmbWEgIDEgICAgICsxIC0xZS0zODMgICAgLT4gMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzExMDQgZm1hICAxICAgMWUtMSAtMWUtMzgzICAgIC0+IDAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwNiBmbWEgIDEgICAxZS0zIC0xZS0zODMgICAgLT4gMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzExMDcgZm1hICAxICAgMWUtNCAtMWUtMzgzICAgIC0+IDAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEwOSBmbWEgIDEgICAxZS02IC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KKw0KK3JvdW5kaW5nOiAgICAgY2VpbGluZw0KK2ZtYXgzMTExMCBmbWEgIDEgICAtMWUrMiArMWUtMzgzICAgLT4gLTk5Ljk5OTk5OTk5OTk5OTk5IFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzExMTMgZm1hICAxICAgICAgLTEgKzFlLTM4MyAgIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTExNCBmbWEgIDEgICAtMWUtMSArMWUtMzgzICAgLT4gLTAuMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzExMTYgZm1hICAxICAgLTFlLTMgKzFlLTM4MyAgIC0+IC0wLjAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTExNyBmbWEgIDEgICAtMWUtNCArMWUtMzgzICAgLT4gLTAuMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzExMTkgZm1hICAxICAgLTFlLTYgKzFlLTM4MyAgIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUtNyAgUm91bmRlZCBJbmV4YWN0DQorDQorcm91bmRpbmc6ICAgICBkb3duDQorcHJlY2lzaW9uOiAgICA3DQorbWF4RXhwb25lbnQ6ICs5Ng0KK21pbkV4cG9uZW50OiAtOTUNCitmbWF4MzExMzAgZm1hICAxICAgICAxICAgICAgICAgICAgLTFlLTIwMCAgLT4gMC45OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCistLSBzdWJub3JtYWwgYm91bmRhcnkNCitmbWF4MzExMzEgZm1hICAxICAgICAxLjAwMDAwMEUtOTQgIC0xZS0yMDAgIC0+ICA5Ljk5OTk5OUUtOTUgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzMTEzMiBmbWEgIDEgICAgIDEuMDAwMDAxRS05NSAgLTFlLTIwMCAgLT4gIDEuMDAwMDAwRS05NSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDMxMTMzIGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OUUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMTM0IGZtYSAgMSAgICAgMC45OTk5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OTk5OEUtOTYgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMTM1IGZtYSAgMSAgICAgMC4wMDEwMDBFLTk1ICAtMWUtMjAwICAtPiAgOS45OUUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMTM2IGZtYSAgMSAgICAgMC4wMDA5OTlFLTk1ICAtMWUtMjAwICAtPiAgOS45OEUtOTkgIFJvdW5kZWQgSW5leGFjdCBTdWJub3JtYWwgVW5kZXJmbG93DQorZm1heDMxMTM3IGZtYSAgMSAgICAgMS4wMDAwMDBFLTk1ICAtMWUtMTAxICAtPiAgOS45OTk5OUUtOTYgIFN1Ym5vcm1hbA0KK2ZtYXgzMTEzOCBmbWEgIDEgICAgICAgIDEwMDAwRS0xMDEgLTFlLTIwMCAgLT4gIDkuOTk5RS05OCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzExMzkgZm1hICAxICAgICAgICAgMTAwMEUtMTAxIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZm1heDMxMTQwIGZtYSAgMSAgICAgICAgICAxMDBFLTEwMSAtMWUtMjAwICAtPiAgOS45RS0xMDAgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTE0MSBmbWEgIDEgICAgICAgICAgIDEwRS0xMDEgLTFlLTIwMCAgLT4gIDlFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzExNDIgZm1hICAxICAgICAgICAgICAgMUUtMTAxIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzExNDMgZm1hICAxICAgICAgICAgICAgMEUtMTAxIC0xZS0yMDAgIC0+IC0wRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzExNDQgZm1hICAxICAgICAgICAgICAgMUUtMTAyIC0xZS0yMDAgIC0+ICAwRS0xMDEgICAgIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCisNCitmbWF4MzExNTEgZm1hICAxICAgICAgICAxMDAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5Ljk5RS05OSAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzExNTIgZm1hICAxICAgICAgICAgMTAwMEUtMTAyIC0xZS0yMDAgIC0+ICA5LjlFLTEwMCAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzExNTMgZm1hICAxICAgICAgICAgIDEwMEUtMTAyIC0xZS0yMDAgIC0+ICA5RS0xMDEgICBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTE1NCBmbWEgIDEgICAgICAgICAgIDEwRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTE1NSBmbWEgIDEgICAgICAgICAgICAxRS0xMDIgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTE1NiBmbWEgIDEgICAgICAgICAgICAwRS0xMDIgLTFlLTIwMCAgLT4gLTBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTE1NyBmbWEgIDEgICAgICAgICAgICAxRS0xMDMgLTFlLTIwMCAgLT4gIDBFLTEwMSAgICAgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KK2ZtYXgzMTE2MCBmbWEgIDEgICAgICAgICAgMTAwRS0xMDUgLTFlLTEwMSAgLT4gLTBFLTEwMSBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxMTYxIGZtYSAgMSAgICAgICAgICAxMDBFLTEwNSAtMWUtMjAxICAtPiAgMEUtMTAxIFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCisNCistLSB0ZXN0cyBiYXNlZCBvbiBHdW5uYXIgRGVnbmJvbCdzIGVkZ2UgY2FzZQ0KK3ByZWNpc2lvbjogICAxNQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorDQorZm1heDMxMjAwIGZtYSAgMSAgIDFFMTUgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwRSsxNSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMDEgZm1hICAxICAgMUUxNSAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDBFKzE1IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIxMCBmbWEgIDEgICAxRTE1ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjExIGZtYSAgMSAgIDFFMTUgIC0wLjUwMSAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMTIgZm1hICAxICAgMUUxNSAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIxMyBmbWEgIDEgICAxRTE1ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjE0IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMSAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMTUgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIxNiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjE3IGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMSAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMTggZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIxOSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjIwIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMSAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMjEgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIyMiBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjIzIGZtYSAgMSAgIDFFMTUgIC0wLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEyMjQgZm1hICAxICAgMUUxNSAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTIyNSBmbWEgIDEgICAxRTE1ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMEUrMTUgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMjMwIGZtYSAgMSAgIDFFMTUgIC01MDAwMDAwLjAwMDAwMDAwMSAgIC0+ICA5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitwcmVjaXNpb246ICAgMTYNCisNCitmbWF4MzEzMDAgZm1hICAxICAgMUUxNiAgLTAuNSAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTAgZm1hICAxICAgMUUxNiAgLTAuNTEgICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTIgZm1hICAxICAgMUUxNiAgLTAuNTAwMSAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDEgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMSAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDEgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMTkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDEgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDEgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwMCAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjggZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMCAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzEgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMCAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMCAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzcgZm1hICAxICAgMUUxNiAgLTAuNTAwMCAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzMzkgZm1hICAxICAgMUUxNiAgLTAuNTAgICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzEzNDAgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDEwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzEzNDkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQgICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzUwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTkgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzUzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTkgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzU2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNTggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTkgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzU5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNjEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTkgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzYyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNjQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzY1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNjggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzY5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNzEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzcyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNzQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzc1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzNzcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzc4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzODAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzgxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41ICAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzODMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzg0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzODYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzg3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMSAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzODkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMSAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzkwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMSAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzOTIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMSAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzkzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMSAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzMTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzEzOTUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMSAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDMxMzk2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MSAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIE1vcmUgR0QgZWRnZSBjYXNlcywgd2hlcmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1bmFkanVzdGVkDQorLS0gZXhwb25lbnRzIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIHByZWNpc2lvbiBhbmQgb25lIHNpZGUgaXMgMA0KK3ByZWNpc2lvbjogICAxNQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorDQorZm1heDMxNDAwIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDUgICAgIC0+IDEuMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MDEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMSAgLT4gMC4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MDIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDAzIGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTMgIC0+IDAuMDAxMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MDQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNCAgLT4gMC4wMDAxMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MDUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDA2IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTYgIC0+IDAuMDAwMDAxMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MDcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtNyAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtNw0KK2ZtYXgzMTQwOCBmbWEgIDEgICAgMCAxLjIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjIzNDU2Nzg5MDEyMzQ1RS04DQorZm1heDMxNDA5IGZtYSAgMSAgICAwIDEuMjM0NTY3ODkwMTIzNDVFLTkgIC0+IDEuMjM0NTY3ODkwMTIzNDVFLTkNCitmbWF4MzE0MTAgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTAgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTANCitmbWF4MzE0MTEgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTENCitmbWF4MzE0MTIgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTIgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTINCitmbWF4MzE0MTMgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTMgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTMNCitmbWF4MzE0MTQgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTQNCitmbWF4MzE0MTUgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTUgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTUNCitmbWF4MzE0MTYgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTYgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTYNCitmbWF4MzE0MTcgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTcNCitmbWF4MzE0MTggZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTggLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTgNCitmbWF4MzE0MTkgZm1hICAxICAgIDAgMS4yMzQ1Njc4OTAxMjM0NUUtMTkgLT4gMS4yMzQ1Njc4OTAxMjM0NUUtMTkNCisNCistLSBzYW1lLCBwcmVjaXNpb24gMTYuLg0KK3ByZWNpc2lvbjogICAxNg0KK2ZtYXgzMTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MjEgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIC0+IDAuMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQyMiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgLT4gMC4wMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MjQgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIC0+IDAuMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQyNSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgLT4gMC4wMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0MjcgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS03DQorZm1heDMxNDI4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOA0KK2ZtYXgzMTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCitmbWF4MzE0MzAgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMA0KK2ZtYXgzMTQzMSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTExDQorZm1heDMxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCitmbWF4MzE0MzMgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMw0KK2ZtYXgzMTQzNCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE0DQorZm1heDMxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCitmbWF4MzE0MzYgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNg0KK2ZtYXgzMTQzNyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE3DQorZm1heDMxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCitmbWF4MzE0MzkgZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOQ0KKw0KKy0tIHNhbWUsIHJldmVyc2VkIDANCitmbWF4MzE0NDAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgICAgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDQyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAwIC0+IDAuMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NDMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTMgIDAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDQ1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAwIC0+IDAuMDAwMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NDYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTYgIDAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCitmbWF4MzE0NDggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTgNCitmbWF4MzE0NDkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTkgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCitmbWF4MzE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQorZm1heDMxNDUxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMQ0KK2ZtYXgzMTQ1MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTIgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCitmbWF4MzE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQorZm1heDMxNDU0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNA0KK2ZtYXgzMTQ1NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCitmbWF4MzE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQorZm1heDMxNDU3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNw0KK2ZtYXgzMTQ1OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTggMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCitmbWF4MzE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQorDQorLS0gc2FtZSwgRXMgb24gdGhlIDANCitmbWF4MzE0NjAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTAgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQ2MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMSAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NjMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTMgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQ2NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNCAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NjYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTYgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQ2NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtNyAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NjkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTkgICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQ3MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTAgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NzIgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTEyICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzMTQ3MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTMgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDMxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzE0NzUgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE1ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KKy0tIG5leHQgZm91ciBmbGFnIFJvdW5kZWQgYmVjYXVzZSB0aGUgMCBleHRlbmRzIHRoZSByZXN1bHQNCitmbWF4MzE0NzYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE2ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorZm1heDMxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KK2ZtYXgzMTQ3OCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitmbWF4MzE0NzkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE5ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorDQorLS0gc3VtIG9mIHR3byBvcHBvc2l0ZS1zaWduIG9wZXJhbmRzIGlzIGV4YWN0bHkgMCBhbmQgZmxvb3IgPT4gLTANCitwcmVjaXNpb246ICAgMTYNCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCityb3VuZGluZzogICAgaGFsZl91cA0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitmbWF4MzE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE1MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE1MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCitmbWF4MzE1MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDMxNTExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNTEzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNTE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2ZtYXgzMTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTUxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTUxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDMxNTIwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTIzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorZm1heDMxNTI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTI2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQorLS0gaW5leGFjdCB6ZXJvcw0KK2ZtYXgzMTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTUzMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTUzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitmbWF4MzE1MzUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE1MzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1MzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCisNCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2ZtYXgzMTU0MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU0MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU0MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzMTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU0NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU0NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KKy0tIGluZXhhY3QgemVyb3MNCitmbWF4MzE1NTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE1NTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE1NTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZm1heDMxNTU1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTU3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTU4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorDQorcm91bmRpbmc6ICAgIHVwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2ZtYXgzMTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU2MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU2MiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzMTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzMTU2NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU2NSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTU2NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KKy0tIGluZXhhY3QgemVyb3MNCitmbWF4MzE1NzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZm1heDMxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTU3MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzE1NzQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2ZtYXgzMTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzE1NzYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1NzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorDQorcm91bmRpbmc6ICAgIGRvd24NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDMxNTgwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTgxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDMxNTgzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorZm1heDMxNTg0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTg2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDMxNTg3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQorLS0gaW5leGFjdCB6ZXJvcw0KK2ZtYXgzMTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTU5MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTU5MyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzMTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitmbWF4MzE1OTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE1OTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE1OTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCisNCityb3VuZGluZzogICAgY2VpbGluZw0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitmbWF4MzE2MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE2MDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE2MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCitmbWF4MzE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE2MDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE2MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDMxNjExIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTYxMiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzE2MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZm1heDMxNjE1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTYxNyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzMTYxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KKy0tIGFuZCB0aGUgZXh0cmEtc3BlY2lhbCB1Z2x5IGNhc2U7IHVudXN1YWwgbWludXNlcyBtYXJrZWQgYnkgLS0gKg0KK3JvdW5kaW5nOiAgICBmbG9vcg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitmbWF4MzE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzE2MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCitmbWF4MzE2MjIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkgICAgICAgICAgIC0tICoNCitmbWF4MzE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCitmbWF4MzE2MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzE2MjUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCitmbWF4MzE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCitmbWF4MzE2MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDMxNjMxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNjMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzMTYzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZm1heDMxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDMxNjM2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQorZm1heDMxNjM3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBDbGFtcGVkICAtLSAqDQorZm1heDMxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KKw0KKy0tIEJpZ0RlY2ltYWwgcHJvYmxlbSB0ZXN0Y2FzZXMgMjAwNi4wMS4yMw0KK3ByZWNpc2lvbjogICAxNg0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KK3JvdW5kaW5nOiAgZG93bg0KK3ByZWNpc2lvbjogNw0KK2ZtYXgzMTY1MSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMDhFKzYNCitwcmVjaXNpb246IDYNCitmbWF4MzE2NTIgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQorcHJlY2lzaW9uOiA1DQorZm1heDMxNjUzIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwRSs2ICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0DQorZm1heDMxNjU0IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDBFKzYgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzDQorZm1heDMxNjU1IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMEUrNiAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyDQorZm1heDMxNjU2IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wRSs2ICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxDQorZm1heDMxNjU3IGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMUUrNiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICBoYWxmX2V2ZW4NCitwcmVjaXNpb246IDcNCitmbWF4MzE2NjEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQorcHJlY2lzaW9uOiA2DQorZm1heDMxNjYyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNg0KK3ByZWNpc2lvbjogNQ0KK2ZtYXgzMTY2MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNA0KK2ZtYXgzMTY2NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwRSs2ICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMw0KK2ZtYXgzMTY2NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDBFKzYgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMg0KK2ZtYXgzMTY2NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMEUrNiAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMQ0KK2ZtYXgzMTY2NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDFFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgdXANCitwcmVjaXNpb246IDcNCitmbWF4MzE2NzEgZm1hICAxICAgIDEwMDAxRSsyICAtMkUrMSAtPiAxLjAwMDA4RSs2DQorcHJlY2lzaW9uOiA2DQorZm1heDMxNjcyIGZtYSAgMSAgICAxMDAwMUUrMiAgLTJFKzEgLT4gMS4wMDAwOEUrNg0KK3ByZWNpc2lvbjogNQ0KK2ZtYXgzMTY3MyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAwMUUrNiAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNA0KK2ZtYXgzMTY3NCBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDAxRSs2ICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMw0KK2ZtYXgzMTY3NSBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMDFFKzYgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMg0KK2ZtYXgzMTY3NiBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDEuMUUrNiAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMQ0KK2ZtYXgzMTY3NyBmbWEgIDEgICAgMTAwMDFFKzIgIC0yRSsxIC0+IDJFKzYgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KK3ByZWNpc2lvbjogICAzNA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDYxNDQNCittaW5FeHBvbmVudDogLTYxNDMNCistLSBFeGFtcGxlcyBmcm9tIFNRTCBwcm9wb3NhbCAoS3Jpc2huYSBLdWxrYXJuaSkNCitmbWF4MzE3MDEgIGZtYSAgMSAgIDEzMEUtMiAgICAxMjBFLTIgICAgLT4gMi41MA0KK2ZtYXgzMTcwMiAgZm1hICAxICAgMTMwRS0yICAgIDEyRS0xICAgICAtPiAyLjUwDQorZm1heDMxNzAzICBmbWEgIDEgICAxMzBFLTIgICAgMUUwICAgICAgIC0+IDIuMzANCitmbWF4MzE3MDQgIGZtYSAgMSAgIDFFMiAgICAgICAxRTQgICAgICAgLT4gMS4wMUUrNA0KK2ZtYXgzMTcwNSAgc3VidHJhY3QgMTMwRS0yICAxMjBFLTIgLT4gMC4xMA0KK2ZtYXgzMTcwNiAgc3VidHJhY3QgMTMwRS0yICAxMkUtMSAgLT4gMC4xMA0KK2ZtYXgzMTcwNyAgc3VidHJhY3QgMTMwRS0yICAxRTAgICAgLT4gMC4zMA0KK2ZtYXgzMTcwOCAgc3VidHJhY3QgMUUyICAgICAxRTQgICAgLT4gLTkuOUUrMw0KKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFNhbWUgYXMgYWJvdmUsIHVzaW5nIGRlY2ltYWw2NCBkZWZhdWx0IHBhcmFtZXRlcnMgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCistLSBbZmlyc3QgZ3JvdXAgYXJlICdxdWljayBjb25maWRlbmNlIGNoZWNrJ10NCitmbWF4MzYwMDEgZm1hICAxICAgMSAgICAgICAxICAgICAgIC0+ICAyDQorZm1heDM2MDAyIGZtYSAgMSAgIDIgICAgICAgMyAgICAgICAtPiAgNQ0KK2ZtYXgzNjAwMyBmbWEgIDEgICAnNS43NScgICczLjMnICAgLT4gIDkuMDUNCitmbWF4MzYwMDQgZm1hICAxICAgJzUnICAgICAnLTMnICAgIC0+ICAyDQorZm1heDM2MDA1IGZtYSAgMSAgICctNScgICAgJy0zJyAgICAtPiAgLTgNCitmbWF4MzYwMDYgZm1hICAxICAgJy03JyAgICAnMi41JyAgIC0+ICAtNC41DQorZm1heDM2MDA3IGZtYSAgMSAgICcwLjcnICAgJzAuMycgICAtPiAgMS4wDQorZm1heDM2MDA4IGZtYSAgMSAgICcxLjI1JyAgJzEuMjUnICAtPiAgMi41MA0KK2ZtYXgzNjAwOSBmbWEgIDEgICAnMS4yMzQ1Njc4OScgICcxLjAwMDAwMDAwJyAtPiAnMi4yMzQ1Njc4OScNCitmbWF4MzYwMTAgZm1hICAxICAgJzEuMjM0NTY3ODknICAnMS4wMDAwMDAxMScgLT4gJzIuMjM0NTY4MDAnDQorDQorZm1heDM2MDExIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDEyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQwJyAgJzAuNTU1NTU1NTU1NTU1NTU1NTUnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDEzIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1NTAnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjAxNCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NDknICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYwMTUgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDQ5OScgICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDE2IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ0OTk5JyAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjAxNyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTAwMCcgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYwMTggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NDUwMDEnICAnMCcgLT4gJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDE5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQ1MDEnICAgJzAnIC0+ICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDUnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjAyMCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0NTEnICAgICcwJyAtPiAnMC40NDQ0NDQ0NDQ0NDQ0NDQ1JyBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzYwMjEgZm1hICAxICAgMCAxIC0+IDENCitmbWF4MzYwMjIgZm1hICAxICAgMSAxIC0+IDINCitmbWF4MzYwMjMgZm1hICAxICAgMiAxIC0+IDMNCitmbWF4MzYwMjQgZm1hICAxICAgMyAxIC0+IDQNCitmbWF4MzYwMjUgZm1hICAxICAgNCAxIC0+IDUNCitmbWF4MzYwMjYgZm1hICAxICAgNSAxIC0+IDYNCitmbWF4MzYwMjcgZm1hICAxICAgNiAxIC0+IDcNCitmbWF4MzYwMjggZm1hICAxICAgNyAxIC0+IDgNCitmbWF4MzYwMjkgZm1hICAxICAgOCAxIC0+IDkNCitmbWF4MzYwMzAgZm1hICAxICAgOSAxIC0+IDEwDQorDQorLS0gc29tZSBjYXJyeWluZyBlZmZlY3RzDQorZm1heDM2MDMxIGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAwJyAtPiAnMC45OTk4Jw0KK2ZtYXgzNjAzMiBmbWEgIDEgICAnMC45OTk4JyAgJzAuMDAwMScgLT4gJzAuOTk5OScNCitmbWF4MzYwMzMgZm1hICAxICAgJzAuOTk5OCcgICcwLjAwMDInIC0+ICcxLjAwMDAnDQorZm1heDM2MDM0IGZtYSAgMSAgICcwLjk5OTgnICAnMC4wMDAzJyAtPiAnMS4wMDAxJw0KKw0KK2ZtYXgzNjAzNSBmbWEgIDEgICAnNzAnICAgICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDM2IGZtYSAgMSAgICc3MDAnICAgICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDBFKzIwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYwMzcgZm1hICAxICAgJzcwMDAnICAgICcxMDAwMGUrMTYnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjAzOCBmbWEgIDEgICAnNzAwMDAnICAgJzEwMDAwZSsxNicgLT4gJzEuMDAwMDAwMDAwMDAwMDAxRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDM5IGZtYSAgMSAgICc3MDAwMDAnICAnMTAwMDBlKzE2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDdFKzIwJyBSb3VuZGVkDQorDQorLS0gc3ltbWV0cnk6DQorZm1heDM2MDQwIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMEUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjA0MSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDQyIGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwRSsyMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MDQ0IGZtYSAgMSAgICcxMDAwMGUrMTYnICAnNzAwMDAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMUUrMjAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjA0NSBmbWEgIDEgICAnMTAwMDBlKzE2JyAgJzcwMDAwMCcgLT4gJzEuMDAwMDAwMDAwMDAwMDA3RSsyMCcgUm91bmRlZA0KKw0KK2ZtYXgzNjA0NiBmbWEgIDEgICAnMTAwMDBlKzknICAnNycgLT4gJzEwMDAwMDAwMDAwMDA3Jw0KK2ZtYXgzNjA0NyBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAnIC0+ICcxMDAwMDAwMDAwMDA3MCcNCitmbWF4MzYwNDggZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMCcgLT4gJzEwMDAwMDAwMDAwNzAwJw0KK2ZtYXgzNjA0OSBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMCcgLT4gJzEwMDAwMDAwMDA3MDAwJw0KK2ZtYXgzNjA1MCBmbWEgIDEgICAnMTAwMDBlKzknICAnNzAwMDAnIC0+ICcxMDAwMDAwMDA3MDAwMCcNCitmbWF4MzYwNTEgZm1hICAxICAgJzEwMDAwZSs5JyAgJzcwMDAwMCcgLT4gJzEwMDAwMDAwNzAwMDAwJw0KKw0KKy0tIGV4YW1wbGVzIGZyb20gZGVjYXJpdGgNCitmbWF4MzYwNTMgZm1hICAxICAgJzEyJyAnNy4wMCcgLT4gJzE5LjAwJw0KK2ZtYXgzNjA1NCBmbWEgIDEgICAnMS4zJyAnLTEuMDcnIC0+ICcwLjIzJw0KK2ZtYXgzNjA1NSBmbWEgIDEgICAnMS4zJyAnLTEuMzAnIC0+ICcwLjAwJw0KK2ZtYXgzNjA1NiBmbWEgIDEgICAnMS4zJyAnLTIuMDcnIC0+ICctMC43NycNCitmbWF4MzYwNTcgZm1hICAxICAgJzFFKzInICcxRSs0JyAtPiAnMS4wMUUrNCcNCisNCistLSBmcm9tIGFib3ZlDQorZm1heDM2MDYxIGZtYSAgMSAgIDEgJzAuMScgLT4gJzEuMScNCitmbWF4MzYwNjIgZm1hICAxICAgMSAnMC4wMScgLT4gJzEuMDEnDQorZm1heDM2MDYzIGZtYSAgMSAgIDEgJzAuMDAxJyAtPiAnMS4wMDEnDQorZm1heDM2MDY0IGZtYSAgMSAgIDEgJzAuMDAwMScgLT4gJzEuMDAwMScNCitmbWF4MzYwNjUgZm1hICAxICAgMSAnMC4wMDAwMScgLT4gJzEuMDAwMDEnDQorZm1heDM2MDY2IGZtYSAgMSAgIDEgJzAuMDAwMDAxJyAtPiAnMS4wMDAwMDEnDQorZm1heDM2MDY3IGZtYSAgMSAgIDEgJzAuMDAwMDAwMScgLT4gJzEuMDAwMDAwMScNCitmbWF4MzYwNjggZm1hICAxICAgMSAnMC4wMDAwMDAwMScgLT4gJzEuMDAwMDAwMDEnDQorDQorLS0gc29tZSBmdW5ueSB6ZXJvcyBbaW4gY2FzZSBvZiBiYWQgc2lnbnVtXQ0KK2ZtYXgzNjA3MCBmbWEgIDEgICAxICAwICAgIC0+IDENCitmbWF4MzYwNzEgZm1hICAxICAgMSAwLiAgICAtPiAxDQorZm1heDM2MDcyIGZtYSAgMSAgIDEgIC4wICAgLT4gMS4wDQorZm1heDM2MDczIGZtYSAgMSAgIDEgMC4wICAgLT4gMS4wDQorZm1heDM2MDc0IGZtYSAgMSAgIDEgMC4wMCAgLT4gMS4wMA0KK2ZtYXgzNjA3NSBmbWEgIDEgICAgMCAgMSAgIC0+IDENCitmbWF4MzYwNzYgZm1hICAxICAgMC4gIDEgICAtPiAxDQorZm1heDM2MDc3IGZtYSAgMSAgICAuMCAxICAgLT4gMS4wDQorZm1heDM2MDc4IGZtYSAgMSAgIDAuMCAxICAgLT4gMS4wDQorZm1heDM2MDc5IGZtYSAgMSAgIDAuMDAgMSAgLT4gMS4wMA0KKw0KKy0tIHNvbWUgY2Fycmllcw0KK2ZtYXgzNjA4MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk4IDEgIC0+IDk5OTk5OTk5OTk5OTk5OTkNCitmbWF4MzYwODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAxICAtPiAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgUm91bmRlZA0KK2ZtYXgzNjA4MiBmbWEgIDEgICAgOTk5OTk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMDAwMDANCitmbWF4MzYwODMgZm1hICAxICAgICAgOTk5OTk5OTk5OTk5OSAxICAtPiAxMDAwMDAwMDAwMDAwMA0KK2ZtYXgzNjA4NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDAwMA0KK2ZtYXgzNjA4NSBmbWEgIDEgICAgICAgICAgOTk5OTk5OTk5IDEgIC0+IDEwMDAwMDAwMDANCitmbWF4MzYwODYgZm1hICAxICAgICAgICAgICAgOTk5OTk5OSAxICAtPiAxMDAwMDAwMA0KK2ZtYXgzNjA4NyBmbWEgIDEgICAgICAgICAgICAgIDk5OTk5IDEgIC0+IDEwMDAwMA0KK2ZtYXgzNjA4OCBmbWEgIDEgICAgICAgICAgICAgICAgOTk5IDEgIC0+IDEwMDANCitmbWF4MzYwODkgZm1hICAxICAgICAgICAgICAgICAgICAgOSAxICAtPiAxMA0KKw0KKw0KKy0tIG1vcmUgTEhTIHN3YXBzDQorZm1heDM2MDkwIGZtYSAgMSAgICctNTYyNjdFLTEwJyAgIDAgLT4gICctMC4wMDAwMDU2MjY3Jw0KK2ZtYXgzNjA5MSBmbWEgIDEgICAnLTU2MjY3RS02JyAgICAwIC0+ICAnLTAuMDU2MjY3Jw0KK2ZtYXgzNjA5MiBmbWEgIDEgICAnLTU2MjY3RS01JyAgICAwIC0+ICAnLTAuNTYyNjcnDQorZm1heDM2MDkzIGZtYSAgMSAgICctNTYyNjdFLTQnICAgIDAgLT4gICctNS42MjY3Jw0KK2ZtYXgzNjA5NCBmbWEgIDEgICAnLTU2MjY3RS0zJyAgICAwIC0+ICAnLTU2LjI2NycNCitmbWF4MzYwOTUgZm1hICAxICAgJy01NjI2N0UtMicgICAgMCAtPiAgJy01NjIuNjcnDQorZm1heDM2MDk2IGZtYSAgMSAgICctNTYyNjdFLTEnICAgIDAgLT4gICctNTYyNi43Jw0KK2ZtYXgzNjA5NyBmbWEgIDEgICAnLTU2MjY3RS0wJyAgICAwIC0+ICAnLTU2MjY3Jw0KK2ZtYXgzNjA5OCBmbWEgIDEgICAnLTVFLTEwJyAgICAgICAwIC0+ICAnLTVFLTEwJw0KK2ZtYXgzNjA5OSBmbWEgIDEgICAnLTVFLTcnICAgICAgICAwIC0+ICAnLTVFLTcnDQorZm1heDM2MTAwIGZtYSAgMSAgICctNUUtNicgICAgICAgIDAgLT4gICctMC4wMDAwMDUnDQorZm1heDM2MTAxIGZtYSAgMSAgICctNUUtNScgICAgICAgIDAgLT4gICctMC4wMDAwNScNCitmbWF4MzYxMDIgZm1hICAxICAgJy01RS00JyAgICAgICAgMCAtPiAgJy0wLjAwMDUnDQorZm1heDM2MTAzIGZtYSAgMSAgICctNUUtMScgICAgICAgIDAgLT4gICctMC41Jw0KK2ZtYXgzNjEwNCBmbWEgIDEgICAnLTVFMCcgICAgICAgICAwIC0+ICAnLTUnDQorZm1heDM2MTA1IGZtYSAgMSAgICctNUUxJyAgICAgICAgIDAgLT4gICctNTAnDQorZm1heDM2MTA2IGZtYSAgMSAgICctNUU1JyAgICAgICAgIDAgLT4gICctNTAwMDAwJw0KK2ZtYXgzNjEwNyBmbWEgIDEgICAnLTVFMTUnICAgICAgICAwIC0+ICAnLTUwMDAwMDAwMDAwMDAwMDAnDQorZm1heDM2MTA4IGZtYSAgMSAgICctNUUxNicgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCitmbWF4MzYxMDkgZm1hICAxICAgJy01RTE3JyAgICAgICAgMCAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTcnICBSb3VuZGVkDQorZm1heDM2MTEwIGZtYSAgMSAgICctNUUxOCcgICAgICAgIDAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE4JyAgUm91bmRlZA0KK2ZtYXgzNjExMSBmbWEgIDEgICAnLTVFMTAwJyAgICAgICAwIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxMDAnIFJvdW5kZWQNCisNCistLSBtb3JlIFJIUyBzd2Fwcw0KK2ZtYXgzNjExMyBmbWEgIDEgICAwICAnLTU2MjY3RS0xMCcgLT4gICctMC4wMDAwMDU2MjY3Jw0KK2ZtYXgzNjExNCBmbWEgIDEgICAwICAnLTU2MjY3RS02JyAgLT4gICctMC4wNTYyNjcnDQorZm1heDM2MTE2IGZtYSAgMSAgIDAgICctNTYyNjdFLTUnICAtPiAgJy0wLjU2MjY3Jw0KK2ZtYXgzNjExNyBmbWEgIDEgICAwICAnLTU2MjY3RS00JyAgLT4gICctNS42MjY3Jw0KK2ZtYXgzNjExOSBmbWEgIDEgICAwICAnLTU2MjY3RS0zJyAgLT4gICctNTYuMjY3Jw0KK2ZtYXgzNjEyMCBmbWEgIDEgICAwICAnLTU2MjY3RS0yJyAgLT4gICctNTYyLjY3Jw0KK2ZtYXgzNjEyMSBmbWEgIDEgICAwICAnLTU2MjY3RS0xJyAgLT4gICctNTYyNi43Jw0KK2ZtYXgzNjEyMiBmbWEgIDEgICAwICAnLTU2MjY3RS0wJyAgLT4gICctNTYyNjcnDQorZm1heDM2MTIzIGZtYSAgMSAgIDAgICctNUUtMTAnICAgICAtPiAgJy01RS0xMCcNCitmbWF4MzYxMjQgZm1hICAxICAgMCAgJy01RS03JyAgICAgIC0+ICAnLTVFLTcnDQorZm1heDM2MTI1IGZtYSAgMSAgIDAgICctNUUtNicgICAgICAtPiAgJy0wLjAwMDAwNScNCitmbWF4MzYxMjYgZm1hICAxICAgMCAgJy01RS01JyAgICAgIC0+ICAnLTAuMDAwMDUnDQorZm1heDM2MTI3IGZtYSAgMSAgIDAgICctNUUtNCcgICAgICAtPiAgJy0wLjAwMDUnDQorZm1heDM2MTI4IGZtYSAgMSAgIDAgICctNUUtMScgICAgICAtPiAgJy0wLjUnDQorZm1heDM2MTI5IGZtYSAgMSAgIDAgICctNUUwJyAgICAgICAtPiAgJy01Jw0KK2ZtYXgzNjEzMCBmbWEgIDEgICAwICAnLTVFMScgICAgICAgLT4gICctNTAnDQorZm1heDM2MTMxIGZtYSAgMSAgIDAgICctNUU1JyAgICAgICAtPiAgJy01MDAwMDAnDQorZm1heDM2MTMyIGZtYSAgMSAgIDAgICctNUUxNScgICAgICAtPiAgJy01MDAwMDAwMDAwMDAwMDAwJw0KK2ZtYXgzNjEzMyBmbWEgIDEgICAwICAnLTVFMTYnICAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzE2JyAgIFJvdW5kZWQNCitmbWF4MzYxMzQgZm1hICAxICAgMCAgJy01RTE3JyAgICAgIC0+ICAnLTUuMDAwMDAwMDAwMDAwMDAwRSsxNycgICBSb3VuZGVkDQorZm1heDM2MTM1IGZtYSAgMSAgIDAgICctNUUxOCcgICAgICAtPiAgJy01LjAwMDAwMDAwMDAwMDAwMEUrMTgnICAgUm91bmRlZA0KK2ZtYXgzNjEzNiBmbWEgIDEgICAwICAnLTVFMTAwJyAgICAgLT4gICctNS4wMDAwMDAwMDAwMDAwMDBFKzEwMCcgIFJvdW5kZWQNCisNCistLSByZWxhdGVkDQorZm1heDM2MTM3IGZtYSAgMSAgICAxICAnMEUtMTknICAgICAgLT4gICcxLjAwMDAwMDAwMDAwMDAwMCcgIFJvdW5kZWQNCitmbWF4MzYxMzggZm1hICAxICAgLTEgICcwRS0xOScgICAgICAtPiAgJy0xLjAwMDAwMDAwMDAwMDAwMCcgUm91bmRlZA0KK2ZtYXgzNjEzOSBmbWEgIDEgICAnMEUtMTknIDEgICAgICAgIC0+ICAnMS4wMDAwMDAwMDAwMDAwMDAnICBSb3VuZGVkDQorZm1heDM2MTQwIGZtYSAgMSAgICcwRS0xOScgLTEgICAgICAgLT4gICctMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitmbWF4MzYxNDEgZm1hICAxICAgMUUrMTEgICAwLjAwMDAgICAtPiAgJzEwMDAwMDAwMDAwMC4wMDAwJw0KK2ZtYXgzNjE0MiBmbWEgIDEgICAxRSsxMSAgIDAuMDAwMDAgIC0+ICAnMTAwMDAwMDAwMDAwLjAwMDAnICBSb3VuZGVkDQorZm1heDM2MTQzIGZtYSAgMSAgIDAuMDAwICAgMUUrMTIgICAgLT4gICcxMDAwMDAwMDAwMDAwLjAwMCcNCitmbWF4MzYxNDQgZm1hICAxICAgMC4wMDAwICAxRSsxMiAgICAtPiAgJzEwMDAwMDAwMDAwMDAuMDAwJyAgUm91bmRlZA0KKw0KKy0tIFtzb21lIG9mIHRoZSBuZXh0IGdyb3VwIGFyZSByZWFsbHkgY29uc3RydWN0b3IgdGVzdHNdDQorZm1heDM2MTQ2IGZtYSAgMSAgICcwMC4wJyAgMCAgICAgICAtPiAgJzAuMCcNCitmbWF4MzYxNDcgZm1hICAxICAgJzAuMDAnICAwICAgICAgIC0+ICAnMC4wMCcNCitmbWF4MzYxNDggZm1hICAxICAgIDAgICAgICAnMC4wMCcgIC0+ICAnMC4wMCcNCitmbWF4MzYxNDkgZm1hICAxICAgIDAgICAgICAnMDAuMCcgIC0+ICAnMC4wJw0KK2ZtYXgzNjE1MCBmbWEgIDEgICAnMDAuMCcgICcwLjAwJyAgLT4gICcwLjAwJw0KK2ZtYXgzNjE1MSBmbWEgIDEgICAnMC4wMCcgICcwMC4wJyAgLT4gICcwLjAwJw0KK2ZtYXgzNjE1MiBmbWEgIDEgICAnMycgICAgICcuMycgICAgLT4gICczLjMnDQorZm1heDM2MTUzIGZtYSAgMSAgICczLicgICAgJy4zJyAgICAtPiAgJzMuMycNCitmbWF4MzYxNTQgZm1hICAxICAgJzMuMCcgICAnLjMnICAgIC0+ICAnMy4zJw0KK2ZtYXgzNjE1NSBmbWEgIDEgICAnMy4wMCcgICcuMycgICAgLT4gICczLjMwJw0KK2ZtYXgzNjE1NiBmbWEgIDEgICAnMycgICAgICczJyAgICAgLT4gICc2Jw0KK2ZtYXgzNjE1NyBmbWEgIDEgICAnMycgICAgICcrMycgICAgLT4gICc2Jw0KK2ZtYXgzNjE1OCBmbWEgIDEgICAnMycgICAgICctMycgICAgLT4gICcwJw0KK2ZtYXgzNjE1OSBmbWEgIDEgICAnMC4zJyAgICctMC4zJyAgLT4gICcwLjAnDQorZm1heDM2MTYwIGZtYSAgMSAgICcwLjAzJyAgJy0wLjAzJyAtPiAgJzAuMDAnDQorDQorLS0gdHJ5IGJvcmRlcmxpbmUgcHJlY2lzaW9uLCB3aXRoIGNhcnJpZXMsIGV0Yy4NCitmbWF4MzYxNjEgZm1hICAxICAgJzFFKzEzJyAnLTEnICAgIC0+ICc5OTk5OTk5OTk5OTk5Jw0KK2ZtYXgzNjE2MiBmbWEgIDEgICAnMUUrMTMnICAnMS4xMScgLT4gJzEwMDAwMDAwMDAwMDAxLjExJw0KK2ZtYXgzNjE2MyBmbWEgIDEgICAnMS4xMScgICcxRSsxMycgLT4gJzEwMDAwMDAwMDAwMDAxLjExJw0KK2ZtYXgzNjE2NCBmbWEgIDEgICAnLTEnICAgICcxRSsxMycgLT4gJzk5OTk5OTk5OTk5OTknDQorZm1heDM2MTY1IGZtYSAgMSAgICc3RSsxMycgJy0xJyAgICAtPiAnNjk5OTk5OTk5OTk5OTknDQorZm1heDM2MTY2IGZtYSAgMSAgICc3RSsxMycgICcxLjExJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnDQorZm1heDM2MTY3IGZtYSAgMSAgICcxLjExJyAgJzdFKzEzJyAtPiAnNzAwMDAwMDAwMDAwMDEuMTEnDQorZm1heDM2MTY4IGZtYSAgMSAgICctMScgICAgJzdFKzEzJyAtPiAnNjk5OTk5OTk5OTk5OTknDQorDQorLS0gICAgICAgICAgICAgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTYgICAgICAxMjM0NTY3ODkwMTIzNDU2ICAgICAgMSAyMzQ1Njc4OTAxMjM0NTYNCitmbWF4MzYxNzAgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjMnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTcxIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTYyJyAtPiAnMS4wMDAwMDAwMDAwMDAwMDEnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjE3MiBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU2MScgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxNzMgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NjAnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTc0IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU5JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjE3NSBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1OCcgLT4gJzEuMDAwMDAwMDAwMDAwMDAwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxNzYgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTcnIC0+ICcxLjAwMDAwMDAwMDAwMDAwMCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTc3IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU2JyAtPiAnMS4wMDAwMDAwMDAwMDAwMDAnIFJvdW5kZWQNCitmbWF4MzYxNzggZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTUnIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTknDQorZm1heDM2MTc5IGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTU0JyAtPiAnMC45OTk5OTk5OTk5OTk5OTk4Jw0KK2ZtYXgzNjE4MCBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MycgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NycNCitmbWF4MzYxODEgZm1hICAxICAgJzAuNDQ0NDQ0NDQ0NDQ0NDQ0NCcgICcwLjU1NTU1NTU1NTU1NTU1NTInIC0+ICcwLjk5OTk5OTk5OTk5OTk5OTYnDQorZm1heDM2MTgyIGZtYSAgMSAgICcwLjQ0NDQ0NDQ0NDQ0NDQ0NDQnICAnMC41NTU1NTU1NTU1NTU1NTUxJyAtPiAnMC45OTk5OTk5OTk5OTk5OTk1Jw0KK2ZtYXgzNjE4MyBmbWEgIDEgICAnMC40NDQ0NDQ0NDQ0NDQ0NDQ0JyAgJzAuNTU1NTU1NTU1NTU1NTU1MCcgLT4gJzAuOTk5OTk5OTk5OTk5OTk5NCcNCisNCistLSBhbmQgc29tZSBtb3JlLCBpbmNsdWRpbmcgcmVzaWR1ZSBlZmZlY3RzIGFuZCBkaWZmZXJlbnQgcm91bmRpbmdzDQorcm91bmRpbmc6IGhhbGZfdXANCitmbWF4MzYyMDAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQorZm1heDM2MjAxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjEwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMTEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIxMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjEzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMTQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIxNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjE2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KK2ZtYXgzNjIxNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjE4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMTkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitmbWF4MzYyMjAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQorZm1heDM2MjIxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMjIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIyMyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjI0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMjUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIyNiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjI3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMjggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIyOSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjMwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMzEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIzMiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjMzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMzQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIzNSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjM2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KK2ZtYXgzNjIzNyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjM4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMzkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKy0tIGNyaXRpY2FsIGZldyB3aXRoIGV2ZW4gYm90dG9tIGRpZ2l0Li4uDQorZm1heDM2MjQwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg4JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg4JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNDEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODgnIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODgnIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI0MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OCcgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6IGRvd24NCitmbWF4MzYyNTAgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAgICAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknDQorZm1heDM2MjUxIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjAwMDAwMDAwMSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNTIgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuMDAwMDAxICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI1MyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC4xICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjU0IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNTUgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNDkgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI1NiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC40OTk5OTkgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjU3IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjQ5OTk5OSAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNTggZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI1OSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC41MDAwMDAwMDEgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjYwIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjUwMDAwMSAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNjEgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuNTEgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI2MiBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC42ICAgICAgICAgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjYzIGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAwLjkgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2Nzg5JyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNjQgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDAuOTk5OTkgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3ODknIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjI2NSBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMC45OTk5OTkgICAtPiAnNjU0MzIxMDEyMzQ1Njc4OScgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjY2IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxICAgICAgICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJw0KK2ZtYXgzNjI2NyBmbWEgIDEgICAnNjU0MzIxMDEyMzQ1Njc4OScgMS4wMDAwMDAwMSAgICAtPiAnNjU0MzIxMDEyMzQ1Njc5MCcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjY4IGZtYSAgMSAgICc2NTQzMjEwMTIzNDU2Nzg5JyAxLjAwMDAxICAgICAgIC0+ICc2NTQzMjEwMTIzNDU2NzkwJyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyNjkgZm1hICAxICAgJzY1NDMyMTAxMjM0NTY3ODknIDEuMSAgICAgICAgICAgLT4gJzY1NDMyMTAxMjM0NTY3OTAnIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIDEgaW4gbGFzdCBwbGFjZSB0ZXN0cw0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCitmbWF4MzYzMDEgZm1hICAxICAgIC0xICAgMSAgICAgIC0+ICAgMA0KK2ZtYXgzNjMwMiBmbWEgIDEgICAgIDAgICAxICAgICAgLT4gICAxDQorZm1heDM2MzAzIGZtYSAgMSAgICAgMSAgIDEgICAgICAtPiAgIDINCitmbWF4MzYzMDQgZm1hICAxICAgIDEyICAgMSAgICAgIC0+ICAxMw0KK2ZtYXgzNjMwNSBmbWEgIDEgICAgOTggICAxICAgICAgLT4gIDk5DQorZm1heDM2MzA2IGZtYSAgMSAgICA5OSAgIDEgICAgICAtPiAxMDANCitmbWF4MzYzMDcgZm1hICAxICAgMTAwICAgMSAgICAgIC0+IDEwMQ0KK2ZtYXgzNjMwOCBmbWEgIDEgICAxMDEgICAxICAgICAgLT4gMTAyDQorZm1heDM2MzA5IGZtYSAgMSAgICAtMSAgLTEgICAgICAtPiAgLTINCitmbWF4MzYzMTAgZm1hICAxICAgICAwICAtMSAgICAgIC0+ICAtMQ0KK2ZtYXgzNjMxMSBmbWEgIDEgICAgIDEgIC0xICAgICAgLT4gICAwDQorZm1heDM2MzEyIGZtYSAgMSAgICAxMiAgLTEgICAgICAtPiAgMTENCitmbWF4MzYzMTMgZm1hICAxICAgIDk4ICAtMSAgICAgIC0+ICA5Nw0KK2ZtYXgzNjMxNCBmbWEgIDEgICAgOTkgIC0xICAgICAgLT4gIDk4DQorZm1heDM2MzE1IGZtYSAgMSAgIDEwMCAgLTEgICAgICAtPiAgOTkNCitmbWF4MzYzMTYgZm1hICAxICAgMTAxICAtMSAgICAgIC0+IDEwMA0KKw0KK2ZtYXgzNjMyMSBmbWEgIDEgICAtMC4wMSAgMC4wMSAgICAtPiAgMC4wMA0KK2ZtYXgzNjMyMiBmbWEgIDEgICAgMC4wMCAgMC4wMSAgICAtPiAgMC4wMQ0KK2ZtYXgzNjMyMyBmbWEgIDEgICAgMC4wMSAgMC4wMSAgICAtPiAgMC4wMg0KK2ZtYXgzNjMyNCBmbWEgIDEgICAgMC4xMiAgMC4wMSAgICAtPiAgMC4xMw0KK2ZtYXgzNjMyNSBmbWEgIDEgICAgMC45OCAgMC4wMSAgICAtPiAgMC45OQ0KK2ZtYXgzNjMyNiBmbWEgIDEgICAgMC45OSAgMC4wMSAgICAtPiAgMS4wMA0KK2ZtYXgzNjMyNyBmbWEgIDEgICAgMS4wMCAgMC4wMSAgICAtPiAgMS4wMQ0KK2ZtYXgzNjMyOCBmbWEgIDEgICAgMS4wMSAgMC4wMSAgICAtPiAgMS4wMg0KK2ZtYXgzNjMyOSBmbWEgIDEgICAtMC4wMSAtMC4wMSAgICAtPiAtMC4wMg0KK2ZtYXgzNjMzMCBmbWEgIDEgICAgMC4wMCAtMC4wMSAgICAtPiAtMC4wMQ0KK2ZtYXgzNjMzMSBmbWEgIDEgICAgMC4wMSAtMC4wMSAgICAtPiAgMC4wMA0KK2ZtYXgzNjMzMiBmbWEgIDEgICAgMC4xMiAtMC4wMSAgICAtPiAgMC4xMQ0KK2ZtYXgzNjMzMyBmbWEgIDEgICAgMC45OCAtMC4wMSAgICAtPiAgMC45Nw0KK2ZtYXgzNjMzNCBmbWEgIDEgICAgMC45OSAtMC4wMSAgICAtPiAgMC45OA0KK2ZtYXgzNjMzNSBmbWEgIDEgICAgMS4wMCAtMC4wMSAgICAtPiAgMC45OQ0KK2ZtYXgzNjMzNiBmbWEgIDEgICAgMS4wMSAtMC4wMSAgICAtPiAgMS4wMA0KKw0KKy0tIHNvbWUgbW9yZSBjYXNlcyB3aGVyZSBmbWEgIDEgIGluZyAwIGFmZmVjdHMgdGhlIGNvZWZmaWNpZW50DQorZm1heDM2MzQwIGZtYSAgMSAgIDFFKzMgICAgMCAgICAtPiAgICAgICAgIDEwMDANCitmbWF4MzYzNDEgZm1hICAxICAgMUUrMTUgICAwICAgIC0+ICAgIDEwMDAwMDAwMDAwMDAwMDANCitmbWF4MzYzNDIgZm1hICAxICAgMUUrMTYgICAwICAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2ICBSb3VuZGVkDQorZm1heDM2MzQzIGZtYSAgMSAgIDFFKzE3ICAgMCAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgUm91bmRlZA0KKy0tIHdoaWNoIHNpbXBseSBmb2xsb3cgZnJvbSB0aGVzZSBjYXNlcyAuLi4NCitmbWF4MzYzNDQgZm1hICAxICAgMUUrMyAgICAxICAgIC0+ICAgICAgICAgMTAwMQ0KK2ZtYXgzNjM0NSBmbWEgIDEgICAxRSsxNSAgIDEgICAgLT4gICAgMTAwMDAwMDAwMDAwMDAwMQ0KK2ZtYXgzNjM0NiBmbWEgIDEgICAxRSsxNiAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjM0NyBmbWEgIDEgICAxRSsxNyAgIDEgICAgLT4gICAxLjAwMDAwMDAwMDAwMDAwMEUrMTcgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjM0OCBmbWEgIDEgICAxRSszICAgIDcgICAgLT4gICAgICAgICAxMDA3DQorZm1heDM2MzQ5IGZtYSAgMSAgIDFFKzE1ICAgNyAgICAtPiAgICAxMDAwMDAwMDAwMDAwMDA3DQorZm1heDM2MzUwIGZtYSAgMSAgIDFFKzE2ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAxRSsxNiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MzUxIGZtYSAgMSAgIDFFKzE3ICAgNyAgICAtPiAgIDEuMDAwMDAwMDAwMDAwMDAwRSsxNyAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdHJ5emVyb3MgY2FzZXMNCitmbWF4MzYzNjEgIGZtYSAgMSAgIDBFKzUwIDEwMDAwRSsxICAtPiAxLjAwMDBFKzUNCitmbWF4MzYzNjIgIGZtYSAgMSAgIDEwMDAwRSsxIDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZA0KK2ZtYXgzNjM2MyAgZm1hICAxICAgMTAwMDBFKzEgMTAwMDBFLTUwICAtPiAxMDAwMDAuMDAwMDAwMDAwMCAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MzY0ICBmbWEgIDEgICAxMi4zNCAgICAwZS0zOTggIC0+IDEyLjM0MDAwMDAwMDAwMDAwICBSb3VuZGVkDQorDQorLS0gdWxwIHJlcGxhY2VtZW50IHRlc3RzDQorZm1heDM2NDAwIGZtYSAgMSAgICAgMSAgIDc3ZS0xNCAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQorZm1heDM2NDAxIGZtYSAgMSAgICAgMSAgIDc3ZS0xNSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KK2ZtYXgzNjQwMiBmbWEgIDEgICAgIDEgICA3N2UtMTYgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDAzIGZtYSAgMSAgICAgMSAgIDc3ZS0xNyAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MDQgZm1hICAxICAgICAxICAgNzdlLTE4ICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQwNSBmbWEgIDEgICAgIDEgICA3N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDA2IGZtYSAgMSAgICAgMSAgIDc3ZS05OSAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzY0MTAgZm1hICAxICAgIDEwICAgNzdlLTE0ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQorZm1heDM2NDExIGZtYSAgMSAgICAxMCAgIDc3ZS0xNSAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MTIgZm1hICAxICAgIDEwICAgNzdlLTE2ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQxMyBmbWEgIDEgICAgMTAgICA3N2UtMTcgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDE0IGZtYSAgMSAgICAxMCAgIDc3ZS0xOCAgICAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MTUgZm1hICAxICAgIDEwICAgNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQxNiBmbWEgIDEgICAgMTAgICA3N2UtOTkgICAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM2NDIwIGZtYSAgMSAgICA3N2UtMTQgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDc3DQorZm1heDM2NDIxIGZtYSAgMSAgICA3N2UtMTUgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDA3Nw0KK2ZtYXgzNjQyMiBmbWEgIDEgICAgNzdlLTE2ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDIzIGZtYSAgMSAgICA3N2UtMTcgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MjQgZm1hICAxICAgIDc3ZS0xOCAgICAgICAxICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQyNSBmbWEgIDEgICAgNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDI2IGZtYSAgMSAgICA3N2UtOTkgICAgICAgMSAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzY0MzAgZm1hICAxICAgIDc3ZS0xNCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDc3DQorZm1heDM2NDMxIGZtYSAgMSAgICA3N2UtMTUgICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwOCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MzIgZm1hICAxICAgIDc3ZS0xNiAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQzMyBmbWEgIDEgICAgNzdlLTE3ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDM0IGZtYSAgMSAgICA3N2UtMTggICAgICAxMCAgIC0+ICAxMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0MzUgZm1hICAxICAgIDc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQzNiBmbWEgIDEgICAgNzdlLTk5ICAgICAgMTAgICAtPiAgMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbmVnYXRpdmUgdWxwcw0KK2ZtYXgzNjQ0MCBmbWEgIDEgICAgIDEgICAtNzdlLTE0ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NDEgZm1hICAxICAgICAxICAgLTc3ZS0xNSAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ0MiBmbWEgIDEgICAgIDEgICAtNzdlLTE2ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ0MyBmbWEgIDEgICAgIDEgICAtNzdlLTE3ICAgICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0NDQgZm1hICAxICAgICAxICAgLTc3ZS0xOCAgICAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDQ1IGZtYSAgMSAgICAgMSAgIC03N2UtMTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDQ2IGZtYSAgMSAgICAgMSAgIC03N2UtOTkgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM2NDUwIGZtYSAgMSAgICAxMCAgIC03N2UtMTQgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NTEgZm1hICAxICAgIDEwICAgLTc3ZS0xNSAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NTIgZm1hICAxICAgIDEwICAgLTc3ZS0xNiAgICAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDUzIGZtYSAgMSAgICAxMCAgIC03N2UtMTcgICAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ1NCBmbWEgIDEgICAgMTAgICAtNzdlLTE4ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ1NSBmbWEgIDEgICAgMTAgICAtNzdlLTE5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ1NiBmbWEgIDEgICAgMTAgICAtNzdlLTk5ICAgICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNjQ2MCBmbWEgIDEgICAgLTc3ZS0xNCAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NjEgZm1hICAxICAgIC03N2UtMTUgICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ2MiBmbWEgIDEgICAgLTc3ZS0xNiAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ2MyBmbWEgIDEgICAgLTc3ZS0xNyAgICAgICAxICAgLT4gIDAuOTk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0NjQgZm1hICAxICAgIC03N2UtMTggICAgICAgMSAgIC0+ICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDY1IGZtYSAgMSAgICAtNzdlLTE5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDY2IGZtYSAgMSAgICAtNzdlLTk5ICAgICAgIDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM2NDcwIGZtYSAgMSAgICAtNzdlLTE0ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NzEgZm1hICAxICAgIC03N2UtMTUgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0NzIgZm1hICAxICAgIC03N2UtMTYgICAgICAxMCAgIC0+ICAgOS45OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDczIGZtYSAgMSAgICAtNzdlLTE3ICAgICAgMTAgICAtPiAgIDkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ3NCBmbWEgIDEgICAgLTc3ZS0xOCAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ3NSBmbWEgIDEgICAgLTc3ZS0xOSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ3NiBmbWEgIDEgICAgLTc3ZS05OSAgICAgIDEwICAgLT4gIDEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG5lZ2F0aXZlIHVscHMNCitmbWF4MzY0ODAgZm1hICAxICAgIC0xICAgIDc3ZS0xNCAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ4MSBmbWEgIDEgICAgLTEgICAgNzdlLTE1ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjQ4MiBmbWEgIDEgICAgLTEgICAgNzdlLTE2ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0ODMgZm1hICAxICAgIC0xICAgIDc3ZS0xNyAgICAgIC0+ICAtMC45OTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ4NCBmbWEgIDEgICAgLTEgICAgNzdlLTE4ICAgICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDg1IGZtYSAgMSAgICAtMSAgICA3N2UtMTkgICAgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ4NiBmbWEgIDEgICAgLTEgICAgNzdlLTk5ICAgICAgLT4gIC0xLjAwMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzY0OTAgZm1hICAxICAgLTEwICAgIDc3ZS0xNCAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5MjMNCitmbWF4MzY0OTEgZm1hICAxICAgLTEwICAgIDc3ZS0xNSAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTIzDQorZm1heDM2NDkyIGZtYSAgMSAgIC0xMCAgICA3N2UtMTYgICAgICAtPiAgIC05Ljk5OTk5OTk5OTk5OTk5MiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0OTMgZm1hICAxICAgLTEwICAgIDc3ZS0xNyAgICAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTk5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjQ5NCBmbWEgIDEgICAtMTAgICAgNzdlLTE4ICAgICAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY0OTUgZm1hICAxICAgLTEwICAgIDc3ZS0xOSAgICAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NDk2IGZtYSAgMSAgIC0xMCAgICA3N2UtOTkgICAgICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNjUwMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTIzDQorZm1heDM2NTAxIGZtYSAgMSAgICAgNzdlLTE1ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTIzDQorZm1heDM2NTAyIGZtYSAgMSAgICAgNzdlLTE2ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjUwMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xICAgLT4gIC0wLjk5OTk5OTk5OTk5OTk5OTIgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTA0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEgICAtPiAgLTAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY1MDUgZm1hICAxICAgICA3N2UtMTkgICAgICAtMSAgIC0+ICAtMS4wMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTA2IGZtYSAgMSAgICAgNzdlLTk5ICAgICAgLTEgICAtPiAgLTEuMDAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KKw0KK2ZtYXgzNjUxMCBmbWEgIDEgICAgIDc3ZS0xNCAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTkyMw0KK2ZtYXgzNjUxMSBmbWEgIDEgICAgIDc3ZS0xNSAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5MjMNCitmbWF4MzY1MTIgZm1hICAxICAgICA3N2UtMTYgICAgICAtMTAgIC0+ICAgLTkuOTk5OTk5OTk5OTk5OTkyIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjUxMyBmbWEgIDEgICAgIDc3ZS0xNyAgICAgIC0xMCAgLT4gICAtOS45OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTE0IGZtYSAgMSAgICAgNzdlLTE4ICAgICAgLTEwICAtPiAgLTEwLjAwMDAwMDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjUxNSBmbWEgIDEgICAgIDc3ZS0xOSAgICAgIC0xMCAgLT4gIC0xMC4wMDAwMDAwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY1MTYgZm1hICAxICAgICA3N2UtOTkgICAgICAtMTAgIC0+ICAtMTAuMDAwMDAwMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorDQorLS0gbG9uZyBvcGVyYW5kcw0KK2ZtYXgzNjUyMSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMDAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZA0KK2ZtYXgzNjUyMiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTcgUm91bmRlZA0KK2ZtYXgzNjUyMyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2NzgwMCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZA0KK2ZtYXgzNjUyNCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODAwICAtPiAxLjAxMjM0NTYyMzQ1Njc4MEUrMTYgUm91bmRlZA0KK2ZtYXgzNjUyNSBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MCAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZA0KK2ZtYXgzNjUyNiBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwICAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgUm91bmRlZA0KK2ZtYXgzNjUyNyBmbWEgIDEgICAxMDEyMzQ1NjIzNDU2Nzg5MSAgMCAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTI4IGZtYSAgMSAgIDAgMTAxMjM0NTYyMzQ1Njc4OTEgIC0+IDEuMDEyMzQ1NjIzNDU2Nzg5RSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY1MjkgZm1hICAxICAgMTAxMjM0NTYyMzQ1Njc4OTAxIDAgLT4gMS4wMTIzNDU2MjM0NTY3ODlFKzE3IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjUzMCBmbWEgIDEgICAwIDEwMTIzNDU2MjM0NTY3ODkwMSAtPiAxLjAxMjM0NTYyMzQ1Njc4OUUrMTcgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTMxIGZtYSAgMSAgIDEwMTIzNDU2MjM0NTY3ODk2ICAwIC0+IDEuMDEyMzQ1NjIzNDU2NzkwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY1MzIgZm1hICAxICAgMCAxMDEyMzQ1NjIzNDU2Nzg5NiAgLT4gMS4wMTIzNDU2MjM0NTY3OTBFKzE2IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHZlcmlmeSBhIHF1ZXJ5DQorcm91bmRpbmc6ICAgICBkb3duDQorZm1heDM2NTYxIGZtYSAgMSAgIDFlLTM5OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTYyIGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzg0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszODQgUm91bmRlZA0KKy0tIGFuZCB1c2luZyBkZWNpbWFsNjQgYm91bmRzLi4uDQorcm91bmRpbmc6ICAgICBkb3duDQorZm1heDM2NTYzIGZtYSAgMSAgIDFlLTM4OCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2NTY0IGZtYSAgMSAgICAgICAgMCA5LjAwMDAwMDAwMDAwMDAwMEUrMzc0IC0+IDkuMDAwMDAwMDAwMDAwMDAwRSszNzQgUm91bmRlZA0KKw0KKy0tIG1vcmUgemVyb3MsIGV0Yy4NCityb3VuZGluZzogaGFsZl9ldmVuDQorDQorZm1heDM2NzAxIGZtYSAgMSAgIDUuMDAgMS4wMEUtMyAtPiA1LjAwMTAwDQorZm1heDM2NzAyIGZtYSAgMSAgIDAwLjAwIDAuMDAwICAtPiAwLjAwMA0KK2ZtYXgzNjcwMyBmbWEgIDEgICAwMC4wMCAwRS0zICAgLT4gMC4wMDANCitmbWF4MzY3MDQgZm1hICAxICAgMEUtMyAgMDAuMDAgIC0+IDAuMDAwDQorDQorZm1heDM2NzEwIGZtYSAgMSAgIDBFKzMgIDAwLjAwICAtPiAwLjAwDQorZm1heDM2NzExIGZtYSAgMSAgIDBFKzMgIDAwLjAgICAtPiAwLjANCitmbWF4MzY3MTIgZm1hICAxICAgMEUrMyAgMDAuICAgIC0+IDANCitmbWF4MzY3MTMgZm1hICAxICAgMEUrMyAgMDAuRSsxIC0+IDBFKzENCitmbWF4MzY3MTQgZm1hICAxICAgMEUrMyAgMDAuRSsyIC0+IDBFKzINCitmbWF4MzY3MTUgZm1hICAxICAgMEUrMyAgMDAuRSszIC0+IDBFKzMNCitmbWF4MzY3MTYgZm1hICAxICAgMEUrMyAgMDAuRSs0IC0+IDBFKzMNCitmbWF4MzY3MTcgZm1hICAxICAgMEUrMyAgMDAuRSs1IC0+IDBFKzMNCitmbWF4MzY3MTggZm1hICAxICAgMEUrMyAgLTAwLjAgICAtPiAwLjANCitmbWF4MzY3MTkgZm1hICAxICAgMEUrMyAgLTAwLiAgICAtPiAwDQorZm1heDM2NzMxIGZtYSAgMSAgIDBFKzMgIC0wMC5FKzEgLT4gMEUrMQ0KKw0KK2ZtYXgzNjcyMCBmbWEgIDEgICAwMC4wMCAgMEUrMyAgLT4gMC4wMA0KK2ZtYXgzNjcyMSBmbWEgIDEgICAwMC4wICAgMEUrMyAgLT4gMC4wDQorZm1heDM2NzIyIGZtYSAgMSAgIDAwLiAgICAwRSszICAtPiAwDQorZm1heDM2NzIzIGZtYSAgMSAgIDAwLkUrMSAwRSszICAtPiAwRSsxDQorZm1heDM2NzI0IGZtYSAgMSAgIDAwLkUrMiAwRSszICAtPiAwRSsyDQorZm1heDM2NzI1IGZtYSAgMSAgIDAwLkUrMyAwRSszICAtPiAwRSszDQorZm1heDM2NzI2IGZtYSAgMSAgIDAwLkUrNCAwRSszICAtPiAwRSszDQorZm1heDM2NzI3IGZtYSAgMSAgIDAwLkUrNSAwRSszICAtPiAwRSszDQorZm1heDM2NzI4IGZtYSAgMSAgIC0wMC4wMCAwRSszICAtPiAwLjAwDQorZm1heDM2NzI5IGZtYSAgMSAgIC0wMC4wICAwRSszICAtPiAwLjANCitmbWF4MzY3MzAgZm1hICAxICAgLTAwLiAgIDBFKzMgIC0+IDANCisNCitmbWF4MzY3MzIgZm1hICAxICAgIDAgICAgIDAgICAgIC0+ICAwDQorZm1heDM2NzMzIGZtYSAgMSAgICAwICAgIC0wICAgICAtPiAgMA0KK2ZtYXgzNjczNCBmbWEgIDEgICAtMCAgICAgMCAgICAgLT4gIDANCitmbWF4MzY3MzUgZm1hICAxICAgLTAgICAgLTAgICAgIC0+IC0wICAgICAtLSBJRUVFIDg1NCBzcGVjaWFsIGNhc2UNCisNCitmbWF4MzY3MzYgZm1hICAxICAgIDEgICAgLTEgICAgIC0+ICAwDQorZm1heDM2NzM3IGZtYSAgMSAgIC0xICAgIC0xICAgICAtPiAtMg0KK2ZtYXgzNjczOCBmbWEgIDEgICAgMSAgICAgMSAgICAgLT4gIDINCitmbWF4MzY3MzkgZm1hICAxICAgLTEgICAgIDEgICAgIC0+ICAwDQorDQorZm1heDM2NzQxIGZtYSAgMSAgICAwICAgIC0xICAgICAtPiAtMQ0KK2ZtYXgzNjc0MiBmbWEgIDEgICAtMCAgICAtMSAgICAgLT4gLTENCitmbWF4MzY3NDMgZm1hICAxICAgIDAgICAgIDEgICAgIC0+ICAxDQorZm1heDM2NzQ0IGZtYSAgMSAgIC0wICAgICAxICAgICAtPiAgMQ0KK2ZtYXgzNjc0NSBmbWEgIDEgICAtMSAgICAgMCAgICAgLT4gLTENCitmbWF4MzY3NDYgZm1hICAxICAgLTEgICAgLTAgICAgIC0+IC0xDQorZm1heDM2NzQ3IGZtYSAgMSAgICAxICAgICAwICAgICAtPiAgMQ0KK2ZtYXgzNjc0OCBmbWEgIDEgICAgMSAgICAtMCAgICAgLT4gIDENCisNCitmbWF4MzY3NTEgZm1hICAxICAgIDAuMCAgLTEgICAgIC0+IC0xLjANCitmbWF4MzY3NTIgZm1hICAxICAgLTAuMCAgLTEgICAgIC0+IC0xLjANCitmbWF4MzY3NTMgZm1hICAxICAgIDAuMCAgIDEgICAgIC0+ICAxLjANCitmbWF4MzY3NTQgZm1hICAxICAgLTAuMCAgIDEgICAgIC0+ICAxLjANCitmbWF4MzY3NTUgZm1hICAxICAgLTEuMCAgIDAgICAgIC0+IC0xLjANCitmbWF4MzY3NTYgZm1hICAxICAgLTEuMCAgLTAgICAgIC0+IC0xLjANCitmbWF4MzY3NTcgZm1hICAxICAgIDEuMCAgIDAgICAgIC0+ICAxLjANCitmbWF4MzY3NTggZm1hICAxICAgIDEuMCAgLTAgICAgIC0+ICAxLjANCisNCitmbWF4MzY3NjEgZm1hICAxICAgIDAgICAgLTEuMCAgIC0+IC0xLjANCitmbWF4MzY3NjIgZm1hICAxICAgLTAgICAgLTEuMCAgIC0+IC0xLjANCitmbWF4MzY3NjMgZm1hICAxICAgIDAgICAgIDEuMCAgIC0+ICAxLjANCitmbWF4MzY3NjQgZm1hICAxICAgLTAgICAgIDEuMCAgIC0+ICAxLjANCitmbWF4MzY3NjUgZm1hICAxICAgLTEgICAgIDAuMCAgIC0+IC0xLjANCitmbWF4MzY3NjYgZm1hICAxICAgLTEgICAgLTAuMCAgIC0+IC0xLjANCitmbWF4MzY3NjcgZm1hICAxICAgIDEgICAgIDAuMCAgIC0+ICAxLjANCitmbWF4MzY3NjggZm1hICAxICAgIDEgICAgLTAuMCAgIC0+ICAxLjANCisNCitmbWF4MzY3NzEgZm1hICAxICAgIDAuMCAgLTEuMCAgIC0+IC0xLjANCitmbWF4MzY3NzIgZm1hICAxICAgLTAuMCAgLTEuMCAgIC0+IC0xLjANCitmbWF4MzY3NzMgZm1hICAxICAgIDAuMCAgIDEuMCAgIC0+ICAxLjANCitmbWF4MzY3NzQgZm1hICAxICAgLTAuMCAgIDEuMCAgIC0+ICAxLjANCitmbWF4MzY3NzUgZm1hICAxICAgLTEuMCAgIDAuMCAgIC0+IC0xLjANCitmbWF4MzY3NzYgZm1hICAxICAgLTEuMCAgLTAuMCAgIC0+IC0xLjANCitmbWF4MzY3NzcgZm1hICAxICAgIDEuMCAgIDAuMCAgIC0+ICAxLjANCitmbWF4MzY3NzggZm1hICAxICAgIDEuMCAgLTAuMCAgIC0+ICAxLjANCisNCistLSBTcGVjaWFscw0KK2ZtYXgzNjc4MCBmbWEgIDEgICAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM2NzgxIGZtYSAgMSAgIC1JbmYgIC0xMDAwICAtPiAtSW5maW5pdHkNCitmbWF4MzY3ODIgZm1hICAxICAgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNjc4MyBmbWEgIDEgICAtSW5mICAtMCAgICAgLT4gLUluZmluaXR5DQorZm1heDM2Nzg0IGZtYSAgMSAgIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCitmbWF4MzY3ODUgZm1hICAxICAgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNjc4NiBmbWEgIDEgICAtSW5mICAgMTAwMCAgLT4gLUluZmluaXR5DQorZm1heDM2Nzg3IGZtYSAgMSAgIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4MzY3ODggZm1hICAxICAgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNjc4OSBmbWEgIDEgICAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM2NzkwIGZtYSAgMSAgIC0wICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4MzY3OTEgZm1hICAxICAgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK2ZtYXgzNjc5MiBmbWEgIDEgICAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorZm1heDM2NzkzIGZtYSAgMSAgICAxMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitmbWF4MzY3OTQgZm1hICAxICAgIEluZiAgLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorZm1heDM2ODAwIGZtYSAgMSAgICBJbmYgIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjgwMSBmbWEgIDEgICAgSW5mICAtMTAwMCAgLT4gIEluZmluaXR5DQorZm1heDM2ODAyIGZtYSAgMSAgICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkNCitmbWF4MzY4MDMgZm1hICAxICAgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzNjgwNCBmbWEgIDEgICAgSW5mICAgMCAgICAgLT4gIEluZmluaXR5DQorZm1heDM2ODA1IGZtYSAgMSAgICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkNCitmbWF4MzY4MDYgZm1hICAxICAgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzNjgwNyBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorZm1heDM2ODA4IGZtYSAgMSAgIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkNCitmbWF4MzY4MDkgZm1hICAxICAgLUluZiAgIEluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODEwIGZtYSAgMSAgIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitmbWF4MzY4MTEgZm1hICAxICAgLTAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzNjgxMiBmbWEgIDEgICAgMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorZm1heDM2ODEzIGZtYSAgMSAgICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitmbWF4MzY4MTQgZm1hICAxICAgIDEwMDAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK2ZtYXgzNjgxNSBmbWEgIDEgICAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorZm1heDM2ODIxIGZtYSAgMSAgICBOYU4gLUluZiAgICAtPiAgTmFODQorZm1heDM2ODIyIGZtYSAgMSAgICBOYU4gLTEwMDAgICAtPiAgTmFODQorZm1heDM2ODIzIGZtYSAgMSAgICBOYU4gLTEgICAgICAtPiAgTmFODQorZm1heDM2ODI0IGZtYSAgMSAgICBOYU4gLTAgICAgICAtPiAgTmFODQorZm1heDM2ODI1IGZtYSAgMSAgICBOYU4gIDAgICAgICAtPiAgTmFODQorZm1heDM2ODI2IGZtYSAgMSAgICBOYU4gIDEgICAgICAtPiAgTmFODQorZm1heDM2ODI3IGZtYSAgMSAgICBOYU4gIDEwMDAgICAtPiAgTmFODQorZm1heDM2ODI4IGZtYSAgMSAgICBOYU4gIEluZiAgICAtPiAgTmFODQorZm1heDM2ODI5IGZtYSAgMSAgICBOYU4gIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODMwIGZtYSAgMSAgIC1JbmYgIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODMxIGZtYSAgMSAgIC0xMDAwIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODMyIGZtYSAgMSAgIC0xICAgIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODMzIGZtYSAgMSAgIC0wICAgIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODM0IGZtYSAgMSAgICAwICAgIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODM1IGZtYSAgMSAgICAxICAgIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODM2IGZtYSAgMSAgICAxMDAwIE5hTiAgICAtPiAgTmFODQorZm1heDM2ODM3IGZtYSAgMSAgICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorZm1heDM2ODQxIGZtYSAgMSAgICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg0MiBmbWEgIDEgICAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NDMgZm1hICAxICAgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODQ0IGZtYSAgMSAgICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg0NSBmbWEgIDEgICAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NDYgZm1hICAxICAgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODQ3IGZtYSAgMSAgICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg0OCBmbWEgIDEgICAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NDkgZm1hICAxICAgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODUwIGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg1MSBmbWEgIDEgICAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NTIgZm1hICAxICAgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODUzIGZtYSAgMSAgIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg1NCBmbWEgIDEgICAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NTUgZm1hICAxICAgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODU2IGZtYSAgMSAgICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ZtYXgzNjg1NyBmbWEgIDEgICAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4NTggZm1hICAxICAgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODU5IGZtYSAgMSAgICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitmbWF4MzY4NjEgZm1hICAxICAgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorZm1heDM2ODYyIGZtYSAgMSAgICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KK2ZtYXgzNjg2MyBmbWEgIDEgICAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMNCitmbWF4MzY4NjQgZm1hICAxICAgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorZm1heDM2ODY1IGZtYSAgMSAgICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KK2ZtYXgzNjg2NiBmbWEgIDEgICAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcNCitmbWF4MzY4NjcgZm1hICAxICAgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorZm1heDM2ODY4IGZtYSAgMSAgICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KK2ZtYXgzNjg2OSBmbWEgIDEgICAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwDQorZm1heDM2ODcxIGZtYSAgMSAgICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODcyIGZtYSAgMSAgICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODczIGZtYSAgMSAgICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc0IGZtYSAgMSAgICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc1IGZtYSAgMSAgICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc2IGZtYSAgMSAgICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc3IGZtYSAgMSAgIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc4IGZtYSAgMSAgIC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODc5IGZtYSAgMSAgICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODgwIGZtYSAgMSAgICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODgxIGZtYSAgMSAgICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2ODgyIGZtYSAgMSAgIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYNCitmbWF4MzY4ODMgZm1hICAxICAgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzY4ODQgZm1hICAxICAgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KK2ZtYXgzNjg4NSBmbWEgIDEgICAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIG5vdyB0aGUgY2FzZSB3aGVyZSB3ZSBjYW4gZ2V0IHVuZGVyZmxvdyBidXQgdGhlIHJlc3VsdCBpcyBub3JtYWwNCistLSBbbm90ZSB0aGlzIGNhbid0IGhhcHBlbiBpZiB0aGUgb3BlcmFuZHMgYXJlIGFsc28gYm91bmRlZCwgYXMgd2UNCistLSBjYW5ub3QgcmVwcmVzZW50IDFFLTM5OSwgZm9yIGV4YW1wbGVdDQorDQorZm1heDM2NTcxIGZtYSAgMSAgICAgICAgIDFFLTM4MyAgICAgICAwICAtPiAxRS0zODMNCitmbWF4MzY1NzIgZm1hICAxICAgICAgICAgMUUtMzg0ICAgICAgIDAgIC0+IDFFLTM4NCAgIFN1Ym5vcm1hbA0KK2ZtYXgzNjU3MyBmbWEgIDEgICAgICAgICAxRS0zODMgIDFFLTM4NCAgLT4gMS4xRS0zODMNCitmbWF4MzY1NzQgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzg0ICAtPiAgIDlFLTM4NCBTdWJub3JtYWwNCisNCistLSBIZXJlIHdlIGV4cGxvcmUgdGhlIGJvdW5kYXJ5IG9mIHJvdW5kaW5nIGEgc3Vibm9ybWFsIHRvIE5taW4NCitmbWF4MzY1NzUgc3VidHJhY3QgIDFFLTM4MyAgMUUtMzk4ICAtPiAgIDkuOTk5OTk5OTk5OTk5OTlFLTM4NCAgU3Vibm9ybWFsDQorZm1heDM2NTc2IHN1YnRyYWN0ICAxRS0zODMgIDFFLTM5OCAgLT4gICA5Ljk5OTk5OTk5OTk5OTk5RS0zODQgIFN1Ym5vcm1hbA0KK2ZtYXgzNjU3NyBzdWJ0cmFjdCAgMUUtMzgzICAxRS0zOTkgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2ZtYXgzNjU3OCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDAgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2ZtYXgzNjU3OSBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDEgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KK2ZtYXgzNjU4MCBzdWJ0cmFjdCAgMUUtMzgzICAxRS00MDIgIC0+ICAgMS4wMDAwMDAwMDAwMDAwMDBFLTM4MyBVbmRlcmZsb3cgSW5leGFjdCBTdWJub3JtYWwgUm91bmRlZA0KKw0KKy0tIGNoZWNrIG92ZXJmbG93IGVkZ2UgY2FzZQ0KKy0tICAgICAgICAgICAgICAgMTIzNDU2Nzg5MDEyMzQ1Ng0KK2ZtYXgzNjk3MiBhcHBseSAgICAgICAgOS45OTk5OTk5OTk5OTk5OTlFKzM4NCAgICAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitmbWF4MzY5NzMgZm1hICAxICAgICAgIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgIDEgICAgICAtPiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk3NCBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgMSAgICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTc1IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjkgIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk3NiBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgOUUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5NzcgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDhFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTc4IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA3RSszNjggIC0+IEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk3OSBmbWEgIDEgICAgICAgIDk5OTk5OTk5OTk5OTk5OTlFKzM2OSAgNkUrMzY4ICAtPiBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5ODAgZm1hICAxICAgICAgICA5OTk5OTk5OTk5OTk5OTk5RSszNjkgIDVFKzM2OCAgLT4gSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTgxIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICA0RSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTgyIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAzRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTgzIGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAyRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTg0IGZtYSAgMSAgICAgICAgOTk5OTk5OTk5OTk5OTk5OUUrMzY5ICAxRSszNjggIC0+IDkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM2OTg1IGFwcGx5ICAgICAgIC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0ICAgICAgICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQNCitmbWF4MzY5ODYgZm1hICAxICAgICAgLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5ODcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTEgICAgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5ODggZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OSAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk4OSBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtOUUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTkwIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC04RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5OTEgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTdFKzM2OCAgLT4gLUluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk5MiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtNkUrMzY4ICAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTkzIGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC01RSszNjggIC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5OTQgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTRFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2OTk1IGZtYSAgMSAgICAgICAtOTk5OTk5OTk5OTk5OTk5OUUrMzY5IC0zRSszNjggIC0+IC05Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjk5NiBmbWEgIDEgICAgICAgLTk5OTk5OTk5OTk5OTk5OTlFKzM2OSAtMkUrMzY4ICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFKzM4NCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzY5OTcgZm1hICAxICAgICAgIC05OTk5OTk5OTk5OTk5OTk5RSszNjkgLTFFKzM2OCAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5RSszODQgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gQW5kIGZvciByb3VuZCBkb3duIGZ1bGwgYW5kIHN1Ym5vcm1hbCByZXN1bHRzDQorcm91bmRpbmc6ICAgICBkb3duDQorZm1heDM2MTEwMCBmbWEgIDEgICAxZSsyIC0xZS0zODMgICAgLT4gOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTEwMSBmbWEgIDEgICAxZSsxIC0xZS0zODMgICAgLT4gOS45OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzNjExMDMgZm1hICAxICAgICArMSAtMWUtMzgzICAgIC0+IDAuOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTEwNCBmbWEgIDEgICAxZS0xIC0xZS0zODMgICAgLT4gMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTEwNSBmbWEgIDEgICAxZS0yIC0xZS0zODMgICAgLT4gMC4wMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzNjExMDYgZm1hICAxICAgMWUtMyAtMWUtMzgzICAgIC0+IDAuMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTEwNyBmbWEgIDEgICAxZS00IC0xZS0zODMgICAgLT4gMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTEwOCBmbWEgIDEgICAxZS01IC0xZS0zODMgICAgLT4gMC4wMDAwMDk5OTk5OTk5OTk5OTk5OTkgIFJvdW5kZWQgSW5leGFjdA0KK2ZtYXgzNjExMDkgZm1hICAxICAgMWUtNiAtMWUtMzgzICAgIC0+IDkuOTk5OTk5OTk5OTk5OTk5RS03ICBSb3VuZGVkIEluZXhhY3QNCisNCityb3VuZGluZzogICAgIGNlaWxpbmcNCitmbWF4MzYxMTEwIGZtYSAgMSAgIC0xZSsyICsxZS0zODMgICAtPiAtOTkuOTk5OTk5OTk5OTk5OTkgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTExMSBmbWEgIDEgICAtMWUrMSArMWUtMzgzICAgLT4gLTkuOTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzYxMTEzIGZtYSAgMSAgICAgIC0xICsxZS0zODMgICAtPiAtMC45OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzYxMTE0IGZtYSAgMSAgIC0xZS0xICsxZS0zODMgICAtPiAtMC4wOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTExNSBmbWEgIDEgICAtMWUtMiArMWUtMzgzICAgLT4gLTAuMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzYxMTE2IGZtYSAgMSAgIC0xZS0zICsxZS0zODMgICAtPiAtMC4wMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzYxMTE3IGZtYSAgMSAgIC0xZS00ICsxZS0zODMgICAtPiAtMC4wMDAwOTk5OTk5OTk5OTk5OTk5OSAgUm91bmRlZCBJbmV4YWN0DQorZm1heDM2MTExOCBmbWEgIDEgICAtMWUtNSArMWUtMzgzICAgLT4gLTAuMDAwMDA5OTk5OTk5OTk5OTk5OTk5ICBSb3VuZGVkIEluZXhhY3QNCitmbWF4MzYxMTE5IGZtYSAgMSAgIC0xZS02ICsxZS0zODMgICAtPiAtOS45OTk5OTk5OTk5OTk5OTlFLTcgIFJvdW5kZWQgSW5leGFjdA0KKw0KKy0tIHRlc3RzIGJhc2VkIG9uIEd1bm5hciBEZWduYm9sJ3MgZWRnZSBjYXNlDQorcm91bmRpbmc6ICAgICBoYWxmX2V2ZW4NCisNCitmbWF4MzYxMzAwIGZtYSAgMSAgIDFFMTYgIC0wLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMxMCBmbWEgIDEgICAxRTE2ICAtMC41MSAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMTEgZm1hICAxICAgMUUxNiAgLTAuNTAxICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzEyIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDEgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMxMyBmbWEgIDEgICAxRTE2ICAtMC41MDAwMSAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMTQgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAxICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzE1IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDEgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMxNiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMSAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMTcgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAxICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzE4IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDEgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMxOSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMSAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMjAgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAxICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzIxIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDEgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMyMiBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMSAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMjMgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzI0IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwMDEgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMyNSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwMDAwICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMjYgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzI3IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwMDAwICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMyOCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwMDAwICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMjkgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzMwIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwMDAwICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMzMSBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwMDAwICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMzIgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzMzIGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwMDAwICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMzNCBmbWEgIDEgICAxRTE2ICAtMC41MDAwMDAwICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMzUgZm1hICAxICAgMUUxNiAgLTAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzM2IGZtYSAgMSAgIDFFMTYgIC0wLjUwMDAwICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTMzNyBmbWEgIDEgICAxRTE2ICAtMC41MDAwICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzMzggZm1hICAxICAgMUUxNiAgLTAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzM5IGZtYSAgMSAgIDFFMTYgIC0wLjUwICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorDQorZm1heDM2MTM0MCBmbWEgIDEgICAxRTE2ICAtNTAwMDAwMC4wMDAwMTAwMDEgICAtPiAgOTk5OTk5OTk5NTAwMDAwMCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNDEgZm1hICAxICAgMUUxNiAgLTUwMDAwMDAuMDAwMDAwMDAxICAgLT4gIDk5OTk5OTk5OTUwMDAwMDAgICAgICBJbmV4YWN0IFJvdW5kZWQNCisNCitmbWF4MzYxMzQ5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40ICAgICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5ICAgICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM1MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5ICAgICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzUyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5ICAgICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5ICAgICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM1NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5ICAgICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzU1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5ICAgICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5ICAgICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM1NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5ICAgICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzU4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5ICAgICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNTkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5ICAgICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM2MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5ICAgICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzYxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5ICAgICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNjIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjQ5OTk5OTk5OTk5OTk5ICAgIC0+ICA5OTk5OTk5OTk5OTk5OTk5ICAgICAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM2MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNDk5OTk5OTk5OTk5OTk5ICAgLT4gIDk5OTk5OTk5OTk5OTk5OTkgICAgICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzY0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC40OTk5OTk5OTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5OTk5OTk5OSAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNjUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAwMDAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM2NyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzY4IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMCAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNjkgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM3MCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzcxIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMCAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNzIgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM3MyBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzc0IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMCAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNzUgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM3NiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzc3IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMCAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzNzggZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM3OSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwICAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzgwIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MCAgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzODEgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUgICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM4MiBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMDAwMSAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzgzIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDAwMDEgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzODQgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAwMDAxICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM4NSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMDAwMSAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzg2IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDAwMDEgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzODcgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAwMDAxICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM4OCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMDAwMSAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzg5IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDAwMDEgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzOTAgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAwMDAxICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM5MSBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMDAwMSAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzkyIGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDAwMDEgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzOTMgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUwMDAxICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MTM5NCBmbWEgIDEgICA5OTk5OTk5OTk5OTk5OTk5IDAuNTAwMSAgICAgICAgICAgICAgLT4gIDEuMDAwMDAwMDAwMDAwMDAwRSsxNiBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYxMzk1IGZtYSAgMSAgIDk5OTk5OTk5OTk5OTk5OTkgMC41MDEgICAgICAgICAgICAgICAtPiAgMS4wMDAwMDAwMDAwMDAwMDBFKzE2IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjEzOTYgZm1hICAxICAgOTk5OTk5OTk5OTk5OTk5OSAwLjUxICAgICAgICAgICAgICAgIC0+ICAxLjAwMDAwMDAwMDAwMDAwMEUrMTYgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gTW9yZSBHRCBlZGdlIGNhc2VzLCB3aGVyZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHVuYWRqdXN0ZWQNCistLSBleHBvbmVudHMgaXMgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gcHJlY2lzaW9uIGFuZCBvbmUgc2lkZSBpcyAwDQorZm1heDM2MTQyMCBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDIxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xICAtPiAwLjExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDIyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0yICAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQyMyBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgLT4gMC4wMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDI0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS00ICAtPiAwLjAwMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDI1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS01ICAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQyNiBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgLT4gMC4wMDAwMDExMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDI3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS03ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtNw0KK2ZtYXgzNjE0MjggZm1hICAxICAgIDAgMS4xMjM0NTY3ODkwMTIzNDVFLTggIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQorZm1heDM2MTQyOSBmbWEgIDEgICAgMCAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTkNCitmbWF4MzYxNDMwIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTANCitmbWF4MzYxNDMxIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCitmbWF4MzYxNDMyIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTINCitmbWF4MzYxNDMzIGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTMNCitmbWF4MzYxNDM0IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCitmbWF4MzYxNDM1IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTUNCitmbWF4MzYxNDM2IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNiAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTYNCitmbWF4MzYxNDM3IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNyAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCitmbWF4MzYxNDM4IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTgNCitmbWF4MzYxNDM5IGZtYSAgMSAgICAwIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOSAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTkNCisNCistLSBzYW1lLCByZXZlcnNlZCAwDQorZm1heDM2MTQ0MCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgICAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzNjE0NDEgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEgIDAgLT4gMC4xMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQ0MiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMiAgMCAtPiAwLjAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQ0MyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMyAgMCAtPiAwLjAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzNjE0NDQgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTQgIDAgLT4gMC4wMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQ0NSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNSAgMCAtPiAwLjAwMDAxMTIzNDU2Nzg5MDEyMzQ1DQorZm1heDM2MTQ0NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtNiAgMCAtPiAwLjAwMDAwMTEyMzQ1Njc4OTAxMjM0NQ0KK2ZtYXgzNjE0NDcgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTcgIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTcNCitmbWF4MzYxNDQ4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS04ICAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS04DQorZm1heDM2MTQ0OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtOSAgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtOQ0KK2ZtYXgzNjE0NTAgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEwIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEwDQorZm1heDM2MTQ1MSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTEgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTENCitmbWF4MzYxNDUyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMiAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xMg0KK2ZtYXgzNjE0NTMgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTEzIDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTEzDQorZm1heDM2MTQ1NCBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTQNCitmbWF4MzYxNDU1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNSAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xNQ0KK2ZtYXgzNjE0NTYgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE2IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE2DQorZm1heDM2MTQ1NyBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcgMCAtPiAxLjEyMzQ1Njc4OTAxMjM0NUUtMTcNCitmbWF4MzYxNDU4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOCAwIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1RS0xOA0KK2ZtYXgzNjE0NTkgZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDVFLTE5IDAgLT4gMS4xMjM0NTY3ODkwMTIzNDVFLTE5DQorDQorLS0gc2FtZSwgRXMgb24gdGhlIDANCitmbWF4MzYxNDYwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0wICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDYxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDYyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0yICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDYzIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0zICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS00ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS01ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY2IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS02ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS03ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY4IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS04ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDY5IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS05ICAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDcwIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDcxIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDcyIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMiAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDczIGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xMyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDc0IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNCAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCitmbWF4MzYxNDc1IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNSAgLT4gMS4xMjM0NTY3ODkwMTIzNDUNCistLSBuZXh0IGZvdXIgZmxhZyBSb3VuZGVkIGJlY2F1c2UgdGhlIDAgZXh0ZW5kcyB0aGUgcmVzdWx0DQorZm1heDM2MTQ3NiBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTYgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCitmbWF4MzYxNDc3IGZtYSAgMSAgIDEuMTIzNDU2Nzg5MDEyMzQ1ICAwRS0xNyAgLT4gMS4xMjM0NTY3ODkwMTIzNDUgUm91bmRlZA0KK2ZtYXgzNjE0NzggZm1hICAxICAgMS4xMjM0NTY3ODkwMTIzNDUgIDBFLTE4ICAtPiAxLjEyMzQ1Njc4OTAxMjM0NSBSb3VuZGVkDQorZm1heDM2MTQ3OSBmbWEgIDEgICAxLjEyMzQ1Njc4OTAxMjM0NSAgMEUtMTkgIC0+IDEuMTIzNDU2Nzg5MDEyMzQ1IFJvdW5kZWQNCisNCistLSBzdW0gb2YgdHdvIG9wcG9zaXRlLXNpZ24gb3BlcmFuZHMgaXMgZXhhY3RseSAwIGFuZCBmbG9vciA9PiAtMA0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2ZtYXgzNjE1MDAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNTAxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTUwMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE1MDMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCitmbWF4MzYxNTA0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTUwNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1MDYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTA3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQorLS0gaW5leGFjdCB6ZXJvcw0KK2ZtYXgzNjE1MTEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNTEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTUxMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzNjE1MTQgZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZm1heDM2MTUxNSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzNjE1MTYgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTE3IGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTUxOCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAxIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDM2MTUyMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE1MjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNTIyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTUyMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzNjE1MjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTI1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTUyNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1MjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDM2MTUzMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzNjE1MzIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNTMzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTUzNCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitmbWF4MzYxNTM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTUzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorDQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKy0tIGV4YWN0IHplcm9zIGZyb20gemVyb3MNCitmbWF4MzYxNTQwIGZtYSAgMSAgICAwICAgICAgICAwRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTU0MSBmbWEgIDEgICAtMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE1NDIgZm1hICAxICAgIDAgICAgICAgLTBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNTQzIGZtYSAgMSAgIC0wICAgICAgIC0wRS0xOSAgLT4gLTBFLTE5DQorZm1heDM2MTU0NCBmbWEgIDEgICAgMEUtNDAwICAgMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1NDUgZm1hICAxICAgLTBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTQ2IGZtYSAgMSAgICAwRS00MDAgIC0wRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTU0NyBmbWEgIDEgICAtMEUtNDAwICAtMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZA0KKy0tIGluZXhhY3QgemVyb3MNCitmbWF4MzYxNTUxIGZtYSAgMSAgICAxRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTU1MiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzNjE1NTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNTU0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2ZtYXgzNjE1NTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNTU2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTU1NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1NTggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCisNCityb3VuZGluZzogICAgdXANCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDM2MTU2MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE1NjEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNTYyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTU2MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzNjE1NjQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTY1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTU2NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1NjcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDM2MTU3MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzYxNTcyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzNjE1NzMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZm1heDM2MTU3NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCistLSBzb21lIGV4YWN0IHplcm9zIGZyb20gbm9uLXplcm9zDQorZm1heDM2MTU3NSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAxIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzYxNTc2IGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTU3NyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1NzggZm1hICAxICAgLTFFLTQwMSAgLTFFLTQwMSAtPiAtMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorDQorcm91bmRpbmc6ICAgIGRvd24NCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDM2MTU4MCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE1ODEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNTgyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTU4MyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzNjE1ODQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTg1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTU4NiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1ODcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDM2MTU5MSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAwRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KK2ZtYXgzNjE1OTIgZm1hICAxICAgLTFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNTkzIGZtYSAgMSAgICAxRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTU5NCBmbWEgIDEgICAtMUUtNDAxICAtMUUtNDAwIC0+IC0wRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cgQ2xhbXBlZA0KKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitmbWF4MzYxNTk1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTU5NiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE1OTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNTk4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorDQorcm91bmRpbmc6ICAgIGNlaWxpbmcNCistLSBleGFjdCB6ZXJvcyBmcm9tIHplcm9zDQorZm1heDM2MTYwMCBmbWEgIDEgICAgMCAgICAgICAgMEUtMTkgIC0+ICAwRS0xOQ0KK2ZtYXgzNjE2MDEgZm1hICAxICAgLTAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNjAyIGZtYSAgMSAgICAwICAgICAgIC0wRS0xOSAgLT4gIDBFLTE5DQorZm1heDM2MTYwMyBmbWEgIDEgICAtMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOQ0KK2ZtYXgzNjE2MDQgZm1hICAxICAgIDBFLTQwMCAgIDBFLTE5ICAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNjA1IGZtYSAgMSAgIC0wRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTYwNiBmbWEgIDEgICAgMEUtNDAwICAtMEUtMTkgIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE2MDcgZm1hICAxICAgLTBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQNCistLSBpbmV4YWN0IHplcm9zDQorZm1heDM2MTYxMSBmbWEgIDEgICAgMUUtNDAxICAgMUUtNDAwIC0+ICAxRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzYxNjEyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KK2ZtYXgzNjE2MTMgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMCAtPiAtMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNjE0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorLS0gc29tZSBleGFjdCB6ZXJvcyBmcm9tIG5vbi16ZXJvcw0KK2ZtYXgzNjE2MTUgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMSAtPiAgMUUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93DQorZm1heDM2MTYxNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+ICAwRS0zOTggQ2xhbXBlZA0KK2ZtYXgzNjE2MTcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAgMEUtMzk4IENsYW1wZWQNCitmbWF4MzYxNjE4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorDQorLS0gYW5kIHRoZSBleHRyYS1zcGVjaWFsIHVnbHkgY2FzZTsgdW51c3VhbCBtaW51c2VzIG1hcmtlZCBieSAtLSAqDQorcm91bmRpbmc6ICAgIGZsb29yDQorLS0gZXhhY3QgemVyb3MgZnJvbSB6ZXJvcw0KK2ZtYXgzNjE2MjAgZm1hICAxICAgIDAgICAgICAgIDBFLTE5ICAtPiAgMEUtMTkNCitmbWF4MzYxNjIxIGZtYSAgMSAgIC0wICAgICAgICAwRS0xOSAgLT4gLTBFLTE5ICAgICAgICAgICAtLSAqDQorZm1heDM2MTYyMiBmbWEgIDEgICAgMCAgICAgICAtMEUtMTkgIC0+IC0wRS0xOSAgICAgICAgICAgLS0gKg0KK2ZtYXgzNjE2MjMgZm1hICAxICAgLTAgICAgICAgLTBFLTE5ICAtPiAtMEUtMTkNCitmbWF4MzYxNjI0IGZtYSAgMSAgICAwRS00MDAgICAwRS0xOSAgLT4gIDBFLTM5OCBDbGFtcGVkDQorZm1heDM2MTYyNSBmbWEgIDEgICAtMEUtNDAwICAgMEUtMTkgIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KK2ZtYXgzNjE2MjYgZm1hICAxICAgIDBFLTQwMCAgLTBFLTE5ICAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCitmbWF4MzYxNjI3IGZtYSAgMSAgIC0wRS00MDAgIC0wRS0xOSAgLT4gLTBFLTM5OCBDbGFtcGVkDQorLS0gaW5leGFjdCB6ZXJvcw0KK2ZtYXgzNjE2MzEgZm1hICAxICAgIDFFLTQwMSAgIDFFLTQwMCAtPiAgMEUtMzk4IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgVW5kZXJmbG93IENsYW1wZWQNCitmbWF4MzYxNjMyIGZtYSAgMSAgIC0xRS00MDEgICAxRS00MDAgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTYzMyBmbWEgIDEgICAgMUUtNDAxICAtMUUtNDAwIC0+IC0xRS0zOTggU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBVbmRlcmZsb3cNCitmbWF4MzYxNjM0IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDAgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KKy0tIHNvbWUgZXhhY3QgemVyb3MgZnJvbSBub24temVyb3MNCitmbWF4MzYxNjM1IGZtYSAgMSAgICAxRS00MDEgICAxRS00MDEgLT4gIDBFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdyBDbGFtcGVkDQorZm1heDM2MTYzNiBmbWEgIDEgICAtMUUtNDAxICAgMUUtNDAxIC0+IC0wRS0zOTggQ2xhbXBlZCAgLS0gKg0KK2ZtYXgzNjE2MzcgZm1hICAxICAgIDFFLTQwMSAgLTFFLTQwMSAtPiAtMEUtMzk4IENsYW1wZWQgIC0tICoNCitmbWF4MzYxNjM4IGZtYSAgMSAgIC0xRS00MDEgIC0xRS00MDEgLT4gLTFFLTM5OCBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIFVuZGVyZmxvdw0KKw0KKy0tIEV4YW1wbGVzIGZyb20gU1FMIHByb3Bvc2FsIChLcmlzaG5hIEt1bGthcm5pKQ0KK2ZtYXgzNjE3MDEgZm1hICAxICAgMTMwRS0yICAgIDEyMEUtMiAgICAtPiAyLjUwDQorZm1heDM2MTcwMiBmbWEgIDEgICAxMzBFLTIgICAgMTJFLTEgICAgIC0+IDIuNTANCitmbWF4MzYxNzAzIGZtYSAgMSAgIDEzMEUtMiAgICAxRTAgICAgICAgLT4gMi4zMA0KK2ZtYXgzNjE3MDQgZm1hICAxICAgMUUyICAgICAgIDFFNCAgICAgICAtPiAxLjAxRSs0DQorZm1heDM2MTcwNSBzdWJ0cmFjdCAxMzBFLTIgIDEyMEUtMiAtPiAwLjEwDQorZm1heDM2MTcwNiBzdWJ0cmFjdCAxMzBFLTIgIDEyRS0xICAtPiAwLjEwDQorZm1heDM2MTcwNyBzdWJ0cmFjdCAxMzBFLTIgIDFFMCAgICAtPiAwLjMwDQorZm1heDM2MTcwOCBzdWJ0cmFjdCAxRTIgICAgIDFFNCAgICAtPiAtOS45RSszDQorDQorLS0gR2FwcHkgY29lZmZpY2llbnRzOyBjaGVjayByZXNpZHVlIGhhbmRsaW5nIGV2ZW4gd2l0aCBmdWxsIGNvZWZmaWNpZW50IGdhcA0KK3JvdW5kaW5nOiBoYWxmX2V2ZW4NCisNCitmbWF4MzYyMDAxIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMSAgICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcNCitmbWF4MzYyMDAyIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgMC42ICAgIC0+IDEyMzQ1Njc4OTAxMjM0NTcgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMDMgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiAwLjA2ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAwNCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTMgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDA1IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNCAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMDYgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS01ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAwNyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTYgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDA4IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtNyAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMDkgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS04ICAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAxMCBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTkgICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDExIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTAgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMTIgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xMSAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAxMyBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTEyICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDE0IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTMgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMTUgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAxNiBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE1ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDE3IGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTYgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMTggZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0xNyAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjAxOSBmbWEgIDEgICAxMjM0NTY3ODkwMTIzNDU2IDZFLTE4ICAtPiAxMjM0NTY3ODkwMTIzNDU2ICBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDIwIGZtYSAgMSAgIDEyMzQ1Njc4OTAxMjM0NTYgNkUtMTkgIC0+IDEyMzQ1Njc4OTAxMjM0NTYgIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwMjEgZm1hICAxICAgMTIzNDU2Nzg5MDEyMzQ1NiA2RS0yMCAgLT4gMTIzNDU2Nzg5MDEyMzQ1NiAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gd2lkZW5pbmcgc2Vjb25kIGFyZ3VtZW50IGF0IGdhcA0KK2ZtYXgzNjIwMzAgZm1hICAxICAgMTIzNDU2NzggMSAgICAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzkNCitmbWF4MzYyMDMxIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMSAgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjENCitmbWF4MzYyMDMyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyDQorZm1heDM2MjAzMyBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjMNCitmbWF4MzYyMDM0IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNCAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQNCitmbWF4MzYyMDM1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDUgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1DQorZm1heDM2MjAzNiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1NiAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTYNCitmbWF4MzYyMDM3IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NyAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1NjcNCitmbWF4MzYyMDM4IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2NzggICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4DQorZm1heDM2MjAzOSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4OSAgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDQwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1ICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNDEgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwICAgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA0MiBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTEgICAgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDQzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDEgICAgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNDQgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDEgICAgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA0NSBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDEgICAgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDQ2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDEgICAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc5IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNDcgZm1hICAxICAgMTIzNDU2NzggMC4xMjM0NTY3ODUwMDAwMDEgICAgICAgLT4gMTIzNDU2NzguMTIzNDU2NzkgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA0OCBmbWEgIDEgICAxMjM0NTY3OCAwLjEyMzQ1Njc4NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4xMjM0NTY3OSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDQ5IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMTIzNDU2Nzg1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjEyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkwMTIzNDU2DQorcm91bmRpbmc6IGhhbGZfZXZlbg0KK2ZtYXgzNjIwNTAgZm1hICAxICAgMTIzNDU2NzggMC4wMjM0NTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDIzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA1MSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMzQ1Njc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDM0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDUyIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwNDU2Nzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNTMgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwNTY3NzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDU2NzggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA1NCBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwNjc3NTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDY3OCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDU1IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwNzc1MDAwMDAwMCAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDc4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNTYgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwNzUwMDAwMDAwICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA1NyBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDAwNTAwMDAwMDAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDYwIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDIzNDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAyMzQ1Njc4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNjEgZm1hICAxICAgMTIzNDU2NzggMC4wMDM0NTY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAzNDU2NzggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA2MiBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDQ1Njc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDA0NTY3OCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDYzIGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDU2Nzc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDA1Njc4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNjQgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDY3NzUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDA2NzggSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA2NSBmbWEgIDEgICAxMjM0NTY3OCAwLjAwMDAwMDc3NTAwMDAwMDEgICAgICAtPiAxMjM0NTY3OC4wMDAwMDA3OCBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDY2IGZtYSAgMSAgIDEyMzQ1Njc4IDAuMDAwMDAwMDc1MDAwMDAwMSAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDA4IEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNjcgZm1hICAxICAgMTIzNDU2NzggMC4wMDAwMDAwMDUwMDAwMDAxICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorLS0gZmFyLW91dCByZXNpZHVlcyAoZnVsbCBjb2VmZmljaWVudCBnYXAgaXMgMTYrMTUgZGlnaXRzKQ0KK3JvdW5kaW5nOiB1cA0KK2ZtYXgzNjIwNzAgZm1hICAxICAgMTIzNDU2NzggMUUtOCAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDENCitmbWF4MzYyMDcxIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTkgICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNzIgZm1hICAxICAgMTIzNDU2NzggMUUtMTAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA3MyBmbWEgIDEgICAxMjM0NTY3OCAxRS0xMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDc0IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTEyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNzUgZm1hICAxICAgMTIzNDU2NzggMUUtMTMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA3NiBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDc3IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwNzggZm1hICAxICAgMTIzNDU2NzggMUUtMTYgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA3OSBmbWEgIDEgICAxMjM0NTY3OCAxRS0xNyAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDgwIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTE4ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwODEgZm1hICAxICAgMTIzNDU2NzggMUUtMTkgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA4MiBmbWEgIDEgICAxMjM0NTY3OCAxRS0yMCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDgzIGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTI1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwODQgZm1hICAxICAgMTIzNDU2NzggMUUtMzAgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA4NSBmbWEgIDEgICAxMjM0NTY3OCAxRS0zMSAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDg2IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTMyICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KK2ZtYXgzNjIwODcgZm1hICAxICAgMTIzNDU2NzggMUUtMzMgICAgICAgICAgICAgICAgICAgLT4gMTIzNDU2NzguMDAwMDAwMDEgSW5leGFjdCBSb3VuZGVkDQorZm1heDM2MjA4OCBmbWEgIDEgICAxMjM0NTY3OCAxRS0zNCAgICAgICAgICAgICAgICAgICAtPiAxMjM0NTY3OC4wMDAwMDAwMSBJbmV4YWN0IFJvdW5kZWQNCitmbWF4MzYyMDg5IGZtYSAgMSAgIDEyMzQ1Njc4IDFFLTM1ICAgICAgICAgICAgICAgICAgIC0+IDEyMzQ1Njc4LjAwMDAwMDAxIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHBheWxvYWQgZGVjYXBpdGF0ZSB4Mw0KK3ByZWNpc2lvbjogNQ0KK2ZtYXgzNjMwMDAgZm1hICAxIDEgIHNOYU4xMjM0NTY3ODkwICAgICAtPiAgTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM2MzAwMSBmbWEgICAgMSAtc05hTjEyMzQ1MTIzNDUgMSAgIC0+IC1OYU4xMjM0NSAgSW52YWxpZF9vcGVyYXRpb24NCitmbWF4MzYzMDAyIGZtYSAgICAgICBzTmFOMTIzNDU1NDMyMSAxIDEgLT4gIE5hTjU0MzIxICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE51bGwgdGVzdHMNCitmbWF4Mzk5OTAgZm1hICAxICAgMTAgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorZm1heDM5OTkxIGZtYSAgMSAgICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9pbnZlcnQuZGVjVGVzdAppbmRleCBhMmY3YmU1Li45ZWY1YTkxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvaW52ZXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ludmVydC5kZWNUZXN0CkBAIC0xLDE3NiArMSwxNzYgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gaW52ZXJ0LmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogOTk5Ci1taW5FeHBvbmVudDogLTk5OQotCi0tLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKSwgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgKLWludngwMDEgaW52ZXJ0ICAgICAgICAgICAgIDAgLT4gMTExMTExMTExCi1pbnZ4MDAyIGludmVydCAgICAgICAgICAgICAxIC0+IDExMTExMTExMAotaW52eDAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMDEKLWludngwMDQgaW52ZXJ0ICAgICAxMTExMTExMTEgLT4gICAgICAgICAwCi1pbnZ4MDA1IGludmVydCAgICAgMDAwMDAwMDAwIC0+IDExMTExMTExMQotaW52eDAwNiBpbnZlcnQgICAgIDEwMTAxMDEwMSAtPiAnMTAxMDEwMTAnCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQotaW52eDAwNyBpbnZlcnQgMDAwMDAwMDAwIC0+ICAgMTExMTExMTExCi1pbnZ4MDA5IGludmVydCAxMDAwMDAwMDAgLT4gICAgMTExMTExMTEKLWludngwMTEgaW52ZXJ0IDAwMDAwMDAwMCAtPiAgIDExMTExMTExMQotaW52eDAxMyBpbnZlcnQgMDEwMDAwMDAwIC0+ICAgMTAxMTExMTExCi0KLS0tIFZhcmlvdXMgbGVuZ3RocwotLS0gICAgICAgICAgICAgMTIzNDU2Nzg5ICAgICAgICAgMTIzNDU2Nzg5Ci1pbnZ4MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAwCi1pbnZ4MDIyIGludmVydCAxMTExMTExMTExMTEgIC0+ICAwCi1pbnZ4MDIzIGludmVydCAgMTExMTExMTEgICAgIC0+ICAxMDAwMDAwMDAKLWludngwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMDAwMDAwMAotaW52eDAyNiBpbnZlcnQgICAgMTExMTExICAgICAtPiAgMTExMDAwMDAwCi1pbnZ4MDI3IGludmVydCAgICAgMTExMTEgICAgIC0+ICAxMTExMDAwMDAKLWludngwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMDAwMAotaW52eDAyOSBpbnZlcnQgICAgICAgMTExICAgICAtPiAgMTExMTExMDAwCi1pbnZ4MDMxIGludmVydCAgICAgICAgMTEgICAgIC0+ICAxMTExMTExMDAKLWludngwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMAotaW52eDAzMyBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMAotaW52eDAzNCBpbnZlcnQgMTExMTExMTExMTEgICAtPiAgMAotaW52eDAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMAotaW52eDAzNiBpbnZlcnQgMTExMTExMTExICAgICAtPiAgMAotCi1pbnZ4MDgwIGludmVydCAwMTExMTExMTEgICAtPiAgMTAwMDAwMDAwCi1pbnZ4MDgxIGludmVydCAxMDExMTExMTEgICAtPiAgIDEwMDAwMDAwCi1pbnZ4MDgyIGludmVydCAxMTAxMTExMTEgICAtPiAgICAxMDAwMDAwCi1pbnZ4MDgzIGludmVydCAxMTEwMTExMTEgICAtPiAgICAgMTAwMDAwCi1pbnZ4MDg0IGludmVydCAxMTExMDExMTEgICAtPiAgICAgIDEwMDAwCi1pbnZ4MDg1IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCi1pbnZ4MDg2IGludmVydCAxMTExMTEwMTEgICAtPiAgICAgICAgMTAwCi1pbnZ4MDg3IGludmVydCAxMTExMTExMDEgICAtPiAgICAgICAgIDEwCi1pbnZ4MDg4IGludmVydCAxMTExMTExMTAgICAtPiAgICAgICAgICAxCi1pbnZ4MDg5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCi1pbnZ4MDkwIGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCi1pbnZ4MDkxIGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCi1pbnZ4MDkyIGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCi1pbnZ4MDkzIGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCi1pbnZ4MDk0IGludmVydCAxMTExMTAxMTEgICAtPiAgICAgICAxMDAwCi1pbnZ4MDk1IGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwCi1pbnZ4MDk2IGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwCi1pbnZ4MDk3IGludmVydCAxMTAxMTExMTAgICAtPiAgICAxMDAwMDAxCi1pbnZ4MDk4IGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwCi1pbnZ4MDk5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotaW52eDIyMCBpbnZlcnQgMTExMTExMTEyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyMSBpbnZlcnQgMzMzMzMzMzMzICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyMyBpbnZlcnQgNzc3Nzc3Nzc3ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyNCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyNiBpbnZlcnQgNDQ0NDQ0NDQ0ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyNyBpbnZlcnQgNjY2NjY2NjY2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIyOSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIzMCBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDIzMiBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gYSBmZXcgcmFuZG9tcwotaW52eDI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI0MSBpbnZlcnQgIDU2NzM2NzY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI0MiBpbnZlcnQgLTYzMTkxNzc3MiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI0NCBpbnZlcnQgIDgzNTU5MDE0OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLWludngyNTAgaW52ZXJ0ICAyMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTEgaW52ZXJ0ICAzMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTIgaW52ZXJ0ICA0MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTMgaW52ZXJ0ICA1MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTQgaW52ZXJ0ICA2MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTUgaW52ZXJ0ICA3MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTYgaW52ZXJ0ICA4MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNTcgaW52ZXJ0ICA5MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTVNELTEKLWludngyNzAgaW52ZXJ0ICAwMjEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzEgaW52ZXJ0ICAwMzAxMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzIgaW52ZXJ0ICAwNDAwMTAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzMgaW52ZXJ0ICAwNTAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzQgaW52ZXJ0ICAxNjAwMDAxMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzUgaW52ZXJ0ICAxNzAwMDAwMTAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzYgaW52ZXJ0ICAxODAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyNzcgaW52ZXJ0ICAxOTAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1pbnZ4MjgwIGludmVydCAgMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4MjgxIGludmVydCAgMDAwMDAwMDAzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4MjgyIGludmVydCAgMDAwMDAwMDA0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4MjgzIGludmVydCAgMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4Mjg0IGludmVydCAgMTAxMDAwMDA2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4Mjg1IGludmVydCAgMTAwMTAwMDA3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4Mjg2IGludmVydCAgMTAwMDEwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4Mjg3IGludmVydCAgMTAwMDAxMDA5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1pZGRpZQotaW52eDI4OCBpbnZlcnQgIDAwMDAyMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI4OSBpbnZlcnQgIDAwMDAzMDAwMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5MCBpbnZlcnQgIDAwMDA0MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5MSBpbnZlcnQgIDAwMDA1MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5MiBpbnZlcnQgIDEwMTA2MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5MyBpbnZlcnQgIDEwMDE3MDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5NCBpbnZlcnQgIDEwMDA4MDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDI5NSBpbnZlcnQgIDEwMDA5MTAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc2lnbnMKLWludngyOTYgaW52ZXJ0IC0xMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngyOTkgaW52ZXJ0ICAxMDAwMDEwMDAgIC0+ICAxMTExMDExMQotCi0tLSBObWF4LCBObWluLCBOdGlueQotaW52eDM0MSBpbnZlcnQgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0MiBpbnZlcnQgIDFFLTk5OSAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0NCBpbnZlcnQgIDFFLTEwMDcgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0NSBpbnZlcnQgIC0xRS0xMDA3ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS05OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0NyBpbnZlcnQgIC0xRS05OTkgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDM0OCBpbnZlcnQgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBIGZldyBvdGhlciBub24taW50ZWdlcnMKLWludngzNjEgaW52ZXJ0ICAxLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngzNjMgaW52ZXJ0ICAwLjAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngzNjQgaW52ZXJ0ICAwRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludngzNjYgaW52ZXJ0ICA5RSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcgotaW52eDc4OCBpbnZlcnQgLUluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotaW52eDc5NCBpbnZlcnQgIEluZiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotaW52eDgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotaW52eDg0MSBpbnZlcnQgIHNOYU4gICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbgotLS0gcHJvcGFnYXRpbmcgTmFOcwotaW52eDg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4ODYyIGludmVydCArTmFOMiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludng4NjMgaW52ZXJ0ICBOYU4zICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4ODY1IGludmVydCAgTmFONSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludng4NzEgaW52ZXJ0ICBzTmFOMTEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4ODczIGludmVydCAgc05hTjEzICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludng4NzQgaW52ZXJ0ICBzTmFOMTQgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4ODc2IGludmVydCAgTmFOMTYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWludng4ODEgaW52ZXJ0ICtOYU4yNSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotaW52eDg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1pbnZ4ODgzIGludmVydCAtc05hTjI3ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGludmVydC5kZWNUZXN0IC0tIGRpZ2l0d2lzZSBsb2dpY2FsIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogOTk5DQorbWluRXhwb25lbnQ6IC05OTkNCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKSwgYW5kIGV4YW1wbGVzIGZyb20gZGVjQXJpdGgNCitpbnZ4MDAxIGludmVydCAgICAgICAgICAgICAwIC0+IDExMTExMTExMQ0KK2ludngwMDIgaW52ZXJ0ICAgICAgICAgICAgIDEgLT4gMTExMTExMTEwDQoraW52eDAwMyBpbnZlcnQgICAgICAgICAgICAxMCAtPiAxMTExMTExMDENCitpbnZ4MDA0IGludmVydCAgICAgMTExMTExMTExIC0+ICAgICAgICAgMA0KK2ludngwMDUgaW52ZXJ0ICAgICAwMDAwMDAwMDAgLT4gMTExMTExMTExDQoraW52eDAwNiBpbnZlcnQgICAgIDEwMTAxMDEwMSAtPiAnMTAxMDEwMTAnDQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCitpbnZ4MDA3IGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTENCitpbnZ4MDA5IGludmVydCAxMDAwMDAwMDAgLT4gICAgMTExMTExMTENCitpbnZ4MDExIGludmVydCAwMDAwMDAwMDAgLT4gICAxMTExMTExMTENCitpbnZ4MDEzIGludmVydCAwMTAwMDAwMDAgLT4gICAxMDExMTExMTENCisNCistLSBWYXJpb3VzIGxlbmd0aHMNCistLSAgICAgICAgICAgICAxMjM0NTY3ODkgICAgICAgICAxMjM0NTY3ODkNCitpbnZ4MDIxIGludmVydCAxMTExMTExMTEgICAgIC0+ICAwDQoraW52eDAyMiBpbnZlcnQgMTExMTExMTExMTExICAtPiAgMA0KK2ludngwMjMgaW52ZXJ0ICAxMTExMTExMSAgICAgLT4gIDEwMDAwMDAwMA0KK2ludngwMjUgaW52ZXJ0ICAgMTExMTExMSAgICAgLT4gIDExMDAwMDAwMA0KK2ludngwMjYgaW52ZXJ0ICAgIDExMTExMSAgICAgLT4gIDExMTAwMDAwMA0KK2ludngwMjcgaW52ZXJ0ICAgICAxMTExMSAgICAgLT4gIDExMTEwMDAwMA0KK2ludngwMjggaW52ZXJ0ICAgICAgMTExMSAgICAgLT4gIDExMTExMDAwMA0KK2ludngwMjkgaW52ZXJ0ICAgICAgIDExMSAgICAgLT4gIDExMTExMTAwMA0KK2ludngwMzEgaW52ZXJ0ICAgICAgICAxMSAgICAgLT4gIDExMTExMTEwMA0KK2ludngwMzIgaW52ZXJ0ICAgICAgICAgMSAgICAgLT4gIDExMTExMTExMA0KK2ludngwMzMgaW52ZXJ0IDExMTExMTExMTExMSAgLT4gIDANCitpbnZ4MDM0IGludmVydCAxMTExMTExMTExMSAgIC0+ICAwDQoraW52eDAzNSBpbnZlcnQgMTExMTExMTExMSAgICAtPiAgMA0KK2ludngwMzYgaW52ZXJ0IDExMTExMTExMSAgICAgLT4gIDANCisNCitpbnZ4MDgwIGludmVydCAwMTExMTExMTEgICAtPiAgMTAwMDAwMDAwDQoraW52eDA4MSBpbnZlcnQgMTAxMTExMTExICAgLT4gICAxMDAwMDAwMA0KK2ludngwODIgaW52ZXJ0IDExMDExMTExMSAgIC0+ICAgIDEwMDAwMDANCitpbnZ4MDgzIGludmVydCAxMTEwMTExMTEgICAtPiAgICAgMTAwMDAwDQoraW52eDA4NCBpbnZlcnQgMTExMTAxMTExICAgLT4gICAgICAxMDAwMA0KK2ludngwODUgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDANCitpbnZ4MDg2IGludmVydCAxMTExMTEwMTEgICAtPiAgICAgICAgMTAwDQoraW52eDA4NyBpbnZlcnQgMTExMTExMTAxICAgLT4gICAgICAgICAxMA0KK2ludngwODggaW52ZXJ0IDExMTExMTExMCAgIC0+ICAgICAgICAgIDENCitpbnZ4MDg5IGludmVydCAwMTExMTEwMTEgICAtPiAgMTAwMDAwMTAwDQoraW52eDA5MCBpbnZlcnQgMTAxMTExMTAxICAgLT4gICAxMDAwMDAxMA0KK2ludngwOTEgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDENCitpbnZ4MDkyIGludmVydCAxMTEwMTExMDEgICAtPiAgICAgMTAwMDEwDQoraW52eDA5MyBpbnZlcnQgMTExMTAxMDExICAgLT4gICAgICAxMDEwMA0KK2ludngwOTQgaW52ZXJ0IDExMTExMDExMSAgIC0+ICAgICAgIDEwMDANCitpbnZ4MDk1IGludmVydCAxMTExMDEwMTEgICAtPiAgICAgIDEwMTAwDQoraW52eDA5NiBpbnZlcnQgMTExMDExMTAxICAgLT4gICAgIDEwMDAxMA0KK2ludngwOTcgaW52ZXJ0IDExMDExMTExMCAgIC0+ICAgIDEwMDAwMDENCitpbnZ4MDk4IGludmVydCAxMDExMTExMDEgICAtPiAgIDEwMDAwMDEwDQoraW52eDA5OSBpbnZlcnQgMDExMTExMDExICAgLT4gIDEwMDAwMDEwMA0KKw0KKy0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducw0KK2ludngyMjAgaW52ZXJ0IDExMTExMTExMiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjIxIGludmVydCAzMzMzMzMzMzMgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDIyMiBpbnZlcnQgNTU1NTU1NTU1ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyMjMgaW52ZXJ0IDc3Nzc3Nzc3NyAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjI0IGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDIyNSBpbnZlcnQgMjIyMjIyMjIyICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyMjYgaW52ZXJ0IDQ0NDQ0NDQ0NCAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjI3IGludmVydCA2NjY2NjY2NjYgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDIyOCBpbnZlcnQgODg4ODg4ODg4ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyMjkgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjMwIGludmVydCA5OTk5OTk5OTkgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDIzMSBpbnZlcnQgOTk5OTk5OTk5ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyMzIgaW52ZXJ0IDk5OTk5OTk5OSAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBhIGZldyByYW5kb21zDQoraW52eDI0MCBpbnZlcnQgIDU2NzQ2ODY4OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNDEgaW52ZXJ0ICA1NjczNjc2ODkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjQyIGludmVydCAtNjMxOTE3NzcyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI0MyBpbnZlcnQgLTc1NjI1MzI1NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNDQgaW52ZXJ0ICA4MzU1OTAxNDkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRA0KK2ludngyNTAgaW52ZXJ0ICAyMDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjUxIGludmVydCAgMzAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI1MiBpbnZlcnQgIDQwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNTMgaW52ZXJ0ICA1MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjU0IGludmVydCAgNjAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI1NSBpbnZlcnQgIDcwMDAwMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNTYgaW52ZXJ0ICA4MDAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjU3IGludmVydCAgOTAwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK2ludngyNzAgaW52ZXJ0ICAwMjEwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjcxIGludmVydCAgMDMwMTAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI3MiBpbnZlcnQgIDA0MDAxMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNzMgaW52ZXJ0ICAwNTAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4Mjc0IGludmVydCAgMTYwMDAwMTAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI3NSBpbnZlcnQgIDE3MDAwMDAxMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyNzYgaW52ZXJ0ICAxODAwMDAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4Mjc3IGludmVydCAgMTkwMDAwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBMU0QNCitpbnZ4MjgwIGludmVydCAgMDAwMDAwMDAyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI4MSBpbnZlcnQgIDAwMDAwMDAwMyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyODIgaW52ZXJ0ICAwMDAwMDAwMDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjgzIGludmVydCAgMDAwMDAwMDA1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI4NCBpbnZlcnQgIDEwMTAwMDAwNiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyODUgaW52ZXJ0ICAxMDAxMDAwMDcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4Mjg2IGludmVydCAgMTAwMDEwMDA4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI4NyBpbnZlcnQgIDEwMDAwMTAwOSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTWlkZGllDQoraW52eDI4OCBpbnZlcnQgIDAwMDAyMDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyODkgaW52ZXJ0ICAwMDAwMzAwMDEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjkwIGludmVydCAgMDAwMDQwMDAwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI5MSBpbnZlcnQgIDAwMDA1MDAwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyOTIgaW52ZXJ0ICAxMDEwNjAwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MjkzIGludmVydCAgMTAwMTcwMDEwICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDI5NCBpbnZlcnQgIDEwMDA4MDEwMCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngyOTUgaW52ZXJ0ICAxMDAwOTEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK2ludngyOTYgaW52ZXJ0IC0xMDAwMDEwMDAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4Mjk5IGludmVydCAgMTAwMDAxMDAwICAtPiAgMTExMTAxMTENCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2ludngzNDEgaW52ZXJ0ICA5Ljk5OTk5OTk5RSs5OTkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MzQyIGludmVydCAgMUUtOTk5ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDM0MyBpbnZlcnQgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngzNDQgaW52ZXJ0ICAxRS0xMDA3ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MzQ1IGludmVydCAgLTFFLTEwMDcgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDM0NiBpbnZlcnQgIC0xLjAwMDAwMDAwRS05OTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngzNDcgaW52ZXJ0ICAtMUUtOTk5ICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MzQ4IGludmVydCAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQoraW52eDM2MSBpbnZlcnQgIDEuMCAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngzNjIgaW52ZXJ0ICAxRSsxICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MzYzIGludmVydCAgMC4wICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDM2NCBpbnZlcnQgIDBFKzEgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2ludngzNjUgaW52ZXJ0ICA5LjkgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4MzY2IGludmVydCAgOUUrMSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK2ludng3ODggaW52ZXJ0IC1JbmYgICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitpbnZ4Nzk0IGludmVydCAgSW5mICAgICAtPiBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDgyMSBpbnZlcnQgIE5hTiAgICAgLT4gTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK2ludng4NDEgaW52ZXJ0ICBzTmFOICAgIC0+IE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCistLSBwcm9wYWdhdGluZyBOYU5zDQoraW52eDg2MSBpbnZlcnQgIE5hTjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg2MiBpbnZlcnQgK05hTjIgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg2MyBpbnZlcnQgIE5hTjMgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg2NCBpbnZlcnQgIE5hTjQgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg2NSBpbnZlcnQgIE5hTjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3MSBpbnZlcnQgIHNOYU4xMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3MiBpbnZlcnQgIHNOYU4xMiAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3MyBpbnZlcnQgIHNOYU4xMyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3NCBpbnZlcnQgIHNOYU4xNCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3NSBpbnZlcnQgIHNOYU4xNSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg3NiBpbnZlcnQgIE5hTjE2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg4MSBpbnZlcnQgK05hTjI1ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg4MiBpbnZlcnQgLU5hTjI2ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoraW52eDg4MyBpbnZlcnQgLXNOYU4yNyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xuLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdAppbmRleCBmNjAyYWYyLi5lZmNiMmE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG4uZGVjVGVzdApAQCAtMSw2MTEgKzEsNjExIEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGxuLmRlY1Rlc3QgLS0gZGVjaW1hbCBuYXR1cmFsIGxvZ2FyaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICAxNgotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotLS0gYmFzaWNzIChleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uKQotcHJlY2lzaW9uOiA5Ci1sbnhzMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueHMwMDIgbG4gIDEuMDAwICAgICAgICAgICAgIC0+ICAgMAotbG54czAwMyBsbiAgMi43MTgyODE4MyAgICAgICAgLT4gICAxLjAwMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbnhzMDA0IGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueHMwMDUgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0KLS0tIGJhc2ljcwotcHJlY2lzaW9uOiAgIDE2Ci1sbngwMDAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueDAwMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZAotbG54MDAwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMDIyMjkyMDg2OSAgSW5leGFjdCBSb3VuZGVkCi1sbngwMDA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKLWxueDAwMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5NDM5Mzg3MzI0IEluZXhhY3QgUm91bmRlZAotbG54MDAwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCi1sbngwMDA3IGxuICAxLjAwMCAgICAgICAgICAgICAtPiAgIDAKLWxueDAwMDggbG4gIDEuNSAgICAgICAgICAgICAgIC0+ICAgMC40MDU0NjUxMDgxMDgxNjQ0IEluZXhhY3QgUm91bmRlZAotbG54MDAwOSBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5MzE0NzE4MDU1OTk0NTMgSW5leGFjdCBSb3VuZGVkCi1sbngwMDEwIGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDAuOTk5OTk5OTk5OTk5OTk5OSBJbmV4YWN0IFJvdW5kZWQKLWxueDAwMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAgMS4wMDAwMDAwMDAwMDAwMDAgIEluZXhhY3QgUm91bmRlZAotbG54MDAxMiBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5leGFjdCBSb3VuZGVkCi1sbngwMDEzIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1MDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKLWxueDAwMTQgbG4gIDEwLjUgICAgICAgICAgICAgIC0+ICAgMi4zNTEzNzUyNTcxNjM0NzggIEluZXhhY3QgUm91bmRlZAotbG54MDAxNSBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIxMDI0MDM2Njk3NTg0OSAgSW5leGFjdCBSb3VuZGVkCi1sbngwMDE2IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTMuODE1NTEwNTU3OTY0MjcgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAwMTcgbG4gIDFFKzkgICAgICAgICAgICAgIC0+ICAyMC43MjMyNjU4MzY5NDY0MSAgIEluZXhhY3QgUm91bmRlZAotbG54MDAxOCBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5Ci0KLS0tIG5vdGFibGUgY2FzZXMKLS0tIG5lZ2F0aXZlcwotbG54MDAyMSBsbiAtMUUtOSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sbngwMDIyIGxuIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWxueDAwMjMgbG4gLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotbG54MDAyNCBsbiAtMC43ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sbngwMDI1IGxuIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWxueDAwMjYgbG4gLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotbG54MDAyNyBsbiAtMiAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sbngwMDI5IGxuIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWxueDAwMjggbG4gLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotbG54MDAzMCBsbiAtMi43MTgyODE4Mjg0NTkwNDUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sbngwMDMxIGxuIC0yLjcxODI4MTgyODQ1OTA0NiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWxueDAwMzIgbG4gLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG54MDAzMyBsbiAtMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1sbngwMDM0IGxuIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLS0tIG90aGVyIHplcm9zCi1sbngwMDQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueDAwNDIgbG4gIDBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG54MDA0MyBsbiAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Ci0tLSBpbmZpbml0aWVzCi1sbngwMDQ1IGxuIC1JbmZpbml0eSAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLWxueDAwNDYgbG4gK0luZmluaXR5ICAgICAgICAgIC0+IEluZmluaXR5Ci0tLSBvbmVzCi1sbngwMDUwIGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDAKLWxueDAwNTEgbG4gIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAotbG54MDA1MiBsbiAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCi1sbngwMDUzIGxuICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDAKLQotLS0gbG93ZXIgcHJlY2lzaW9uIGJhc2ljcwotUHJlY2lzaW9uOiA3Ci1sbngwMTAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueDAxMDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMC43MjMyNyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNTY2NzQ5ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCi1sbngwMTA3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OTMxNDcyICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEwOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAwMDAwMCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTEwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wMDAwMDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDExMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NSAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTEzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yMTAyNDAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDExNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTE2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotUHJlY2lzaW9uOiAyCi1sbngwMTIxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueDAxMjIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEyMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTI0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMjUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC4zNiAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEyNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCi1sbngwMTI3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDEgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMjggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC42OSAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEyOSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxLjAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTMwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMzEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMS4wICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEzMiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTMzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMzQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOS4yICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDEzNSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDE0ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTM2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMzcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotUHJlY2lzaW9uOiAxCi1sbngwMTQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkKLWxueDAxNDIgbG4gIDFFLTkgICAgICAgICAgICAgIC0+IC0yRSsxICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDE0MyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTQ0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNDUgbG4gIDAuNyAgICAgICAgICAgICAgIC0+ICAtMC40ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDE0NiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwCi1sbngwMTQ3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNDggbG4gIDIgICAgICAgICAgICAgICAgIC0+ICAgMC43ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDE0OSBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAxICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTUwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNTEgbG4gIDIuNzE4MjgxODI4NDU5MDQ3IC0+ICAgMSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDE1MiBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTUzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNTQgbG4gIDk5OTkgICAgICAgICAgICAgIC0+ICAgOSAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MDE1NSBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDFFKzEgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwMTU2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNTcgbG4gK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0tLSBncm91cCBsb3ctcHJlY2lzaW9uIGxuKDEpczoKLXByZWNpc2lvbjogMQotbG54MDE2MSBsbiAgMSAtPiAwCi1wcmVjaXNpb246IDIKLWxueDAxNjIgbG4gIDEgLT4gMAotcHJlY2lzaW9uOiAzCi1sbngwMTYzIGxuICAxIC0+IDAKLXByZWNpc2lvbjogNAotbG54MDE2NCBsbiAgMSAtPiAwCi1wcmVjaXNpb246IDUKLWxueDAxNjUgbG4gIDEgLT4gMAotcHJlY2lzaW9uOiA2Ci1sbngwMTY2IGxuICAxIC0+IDAKLXByZWNpc2lvbjogNwotbG54MDE2NyBsbiAgMSAtPiAwCi1wcmVjaXNpb246IDgKLWxueDAxNjggbG4gIDEgLT4gMAotCi0tLSBlZGdlLXRlc3QgbG4oMikgYW5kIGxuKDEwKSBpbiBjYXNlIG9mIGxvb2thc2lkZXMKLXByZWNpc2lvbjogNDUKLWxueDIwMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxMzQgIEluZXhhY3QgUm91bmRlZAotbG54MjAyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTQ5ICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDQ0Ci1sbngyMDMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMTMgICBJbmV4YWN0IFJvdW5kZWQKLWxueDIwNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE1ICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0MwotbG54MjA1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEgICAgSW5leGFjdCBSb3VuZGVkCi1sbngyMDYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNDIKLWxueDIwNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MjA4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDQxCi1sbngyMDkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDIxMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0MAotbG54MjExICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngyMTIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzkKLWxueDIxMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzYgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MjE0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDM4Ci1sbngyMTUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDIxNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzNwotbG54MjE3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODEgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngyMTggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzYKLWxueDIxOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MjIwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDM1Ci1sbngyMjEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDIyMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzNAotbG54MjIzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjYgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngyMjQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzMKLWxueDIyNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MjI2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDMyCi1sbngyMjcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDIyOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQ0ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzMQotbG54MjI5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODIgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngyMzAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzAKLWxueDIzMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTggICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54MjMyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIGV4dHJlbWUgaW5wdXQgcmFuZ2UgdmFsdWVzCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotUHJlY2lzaW9uOiAxNgotCi1sbngwOTAxIGxuIDFlLTQwMCAgICAtPiAtOTIxLjAzNDAzNzE5NzYxODMgIEluZXhhY3QgUm91bmRlZAotbG54MDkwMiBsbiAxZSs0MDAgICAgLT4gIDkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQKLWxueDA5MDMgbG4gMWUtOTk5OTk5IC0+IC0yMzAyNTgyLjc5MDQwODk1MyAgSW5leGFjdCBSb3VuZGVkCi1sbngwOTA0IGxuIDFlKzk5OTk5OSAtPiAgMjMwMjU4Mi43OTA0MDg5NTMgIEluZXhhY3QgUm91bmRlZAotbG54MDkwNSBsbiAxZS0xMDAwMDEzICAgICAgICAgICAgICAgIC0+IC0yMzAyNjE1LjAyNjYwMDI1NSAgSW5leGFjdCBSb3VuZGVkCi1sbngwOTA2IGxuIDJlLTEwMDAwMTMgICAgICAgICAgICAgICAgLT4gLTIzMDI2MTQuMzMzNDUzMDc0ICBJbmV4YWN0IFJvdW5kZWQKLQotbG54MDkxMCBsbiA5Ljk5OTk5OWUrOTk5OTk5ICAgICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5Mzk0NiAgSW5leGFjdCBSb3VuZGVkCi1sbngwOTExIGxuIDkuOTk5OTk5OWUrOTk5OTk5ICAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDM2ICBJbmV4YWN0IFJvdW5kZWQKLWxueDA5MTIgbG4gOS45OTk5OTk5OWUrOTk5OTk5ICAgICAgICAtPiAgMjMwMjU4NS4wOTI5OTQwNDUgIEluZXhhY3QgUm91bmRlZAotbG54MDkxMyBsbiA5Ljk5OTk5OTk5OWUrOTk5OTk5ICAgICAgIC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCi1sbngwOTE0IGxuIDkuOTk5OTk5OTk5OTk5ZSs5OTk5OTkgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQKLWxueDA5MTUgbG4gOS45OTk5OTk5OTk5OTk5OTllKzk5OTk5OSAtPiAgMjMwMjU4NS4wOTI5OTQwNDYgIEluZXhhY3QgUm91bmRlZAotbG54MDkxNiBsbiA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OWUrOTk5OTk5IC0+ICAyMzAyNTg1LjA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHJhbmRvbXMKLS0tIFA9NTAsIHdpdGhpbiAwLTk5OQotUHJlY2lzaW9uOiA1MAotbWF4RXhwb25lbnQ6IDM4NAotbWluRXhwb25lbnQ6IC0zODMKLWxueDE1MDEgbG4gMC4wMDA5ODgwMDkwNjU3NDQ4NjM4ODYwNDYwODQ3Nzg2OTgxMjUxODg1NzAyMzc2ODk1MSAtPiAtNi45MTk4MTg2ODQ0MDMzNzg3OTk1OTQ1MTQ3ODM2OTU1NTg2MDA5NTQ4NTEzMDQzNjg5IEluZXhhY3QgUm91bmRlZAotbG54MTUwMiBsbiAxNTguMTU4NjY2MjQ2NjQ2MjMwNzAxODQ1OTUwNDUzMDQxNDU5NDk5MDA3MTQ5ODc4MjcgIC0+IDUuMDYzNTk4NzQ1ODg5NTY0NzQ1NDkwNzgwNjUwNzUwMzgyNTYwMjc1ODM5MjI4NzY4NCBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MDMgbG4gMC4wMDU2NTY2MTQxMjA1OTU3MTkyNTA0MDI4NTgxNDAyMTc5OTc3NTI0OTI4ODMwOTMyMSAtPiAtNS4xNzQ5Mjk3Nzc2NzYwNjMyMTAyMDQ3NTQwMzAwNDkxNTUwOTMxNjUxMzE4OTc1MjM3IEluZXhhY3QgUm91bmRlZAotbG54MTUwNCBsbiAwLjAwMDAwMDA2OTE0MjMyNTMyNjIwNDg5NjAyMDA4NDAyMDkxNjY2NTQ3OTAzMTgwNjA3IC0+IC0xNi40ODcwOTg3NzA4Nzc4MjUzMDgxMzg5NzY4MTg2ODg3NzE2MzgxNzIzMzMwMzQzNDcgSW5leGFjdCBSb3VuZGVkCi1sbngxNTA1IGxuIDAuMDAwMjUzODAzNzQ2MjEyOTc2NTc1MDQ2NjE1NDA3NDkzNTUyNTEyMzE3NzAwNzA3MjMgLT4gLTguMjc4OTQ5MjQyMzAwNTAwMzIwNTI0MjE2Mjc0MTU2OTAzMzEyNDI2MDMyMTk1NDU4OSBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MDYgbG4gODMuMDMzNjU0MDYzODc3NDI2MjYxMTA4NTkyNTk5MTgyNDE4OTUzNDQyNjc3NTU0ODA2ICAtPiA0LjQxOTI0NTk5NjI2NDcxMzc5NzY5NDkyNDk4MTA4MTU2OTg0NjUwMzE2MDk4NDM2NjkgSW5leGFjdCBSb3VuZGVkCi1sbngxNTA3IGxuIDAuMDAwMDAwMDA0MTY4NjMyMjgwOTI0ODE2NTE2Mjc3MzQ2Njg0NDA2NjM2NzgxMTg3MjkgLT4gLTE5LjI5NTY3Nzg0NTEyMjE0MTc3Mjc5MTI5NDU5OTcxNDk1MDE3NTI4NDkxNTY2NjQzMCBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MDggbG4gMC4wMDAwMDE0MDg0Nzg3MzE4NzgyMDU3MDE4MTIxNDI3MTk2MDUxMTA4MDUyMzQ1NzY2OSAtPiAtMTMuNDczMDAwMzQ5NTgxOTY3MTg5NjY4MzA1MzE0Mzg0OTUyMjUxNTU2ODA5NDgwMzM5IEluZXhhY3QgUm91bmRlZAotbG54MTUwOSBsbiA2Ni4xNzYxMDY1NTUxODE1MjcxMDE2MzAzNTExMjc1ODM5NDQ2ODk3NTIwNjkxMzI1MjIgIC0+IDQuMTkyMzE5NDY5NjIzMjUwNTg4MzY2NjE3MTExNjk2NjEzNzY5NDAxMzQzMTUwNDI1MiBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MTAgbG4gMC4wMDAwMDAwMDAwMDAwOTg5OTA0MzQ4NzQwMzU5MDkwMDExMTYwMjAyNDU2MjI5NzkwOCAtPiAtMjkuOTQzNzUzMTY2ODc3ODQwOTg1ODIxNTA4MTEyOTE3OTkxNTA2NjU2NTQ1MTc0MTYzIEluZXhhY3QgUm91bmRlZAotbG54MTUxMSBsbiAwLjAwMDAwMDAwMDAwMzI0NjE4Mjk2NzIxNzQ3MDk3NTEwNDUzMzg4NjgzOTEyNzMzNTY5IC0+IC0yNi40NTM1NDEyODE0NDQ1ODY4MTkwMDk1NDY0MTg1Nzc1MDcxNjMzNjI1OTAxMzk0MjIgSW5leGFjdCBSb3VuZGVkCi1sbngxNTEyIGxuIDcyLjY0Njk2ODgxODQ2MzU0NjQ0OTQ5OTE0NzU3OTAyMzU1NTAwODM5Mjg2MDQyMzM4NSAgLT4gNC4yODU2MTE2NjYwNjg5NjQ2ODgyODUyMTI4ODUzNDIzNTY2Mjc2NzE4MjMwNDI2NDc5IEluZXhhY3QgUm91bmRlZAotbG54MTUxMyBsbiAwLjAwMDAwMDAwMDAwMDAwMDY2NzU1NDgzMTI0NjM1NjEyNTc0MjYzMTUzODI1OTkwNTIzIC0+IC0zNC45NDI5MTAxNDI4MDI3NjkzMTkyNjI4NzUwODAzOTg4NTI0OTE1ODg3MDcxNzI0ODMgSW5leGFjdCBSb3VuZGVkCi1sbngxNTE0IGxuIDYxLjAwMjkxMDQ0NzIwMjM5ODIwNDExNDkwOTQ1MTg1MTExMTQyNDY1NzY3MTkxMTAwMiAgLT4gNC4xMTA5MjE1NzUyODQzMzc3MzIzMzYzMTgyMDUxNDQ2MTc3MDY2NDM0MDM4MDk2NTI5IEluZXhhY3QgUm91bmRlZAotbG54MTUxNSBsbiA5MTcuMDY5MTc2MTEzMzE5ODA5OTkyMjc4OTM1ODQwMTA1NDQ1NDIzMTIyMzkxNzQ3NzQgIC0+IDYuODIxMTgyOTA2ODMwMzExNDEyODc1MjQ1MzY2MTk0NjQ0Njk3OTc4NzgyNjI4MjkwNyBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MTYgbG4gMC4wMDAwMDAwMDE3MDgyMzc5NDg4MzY3MzA4MzM1ODU0OTc0OTA3ODk3MjAwMzk2NTE5NCAtPiAtMjAuMTg3ODAzNDM2OTc2MTUwNDc3Mjk3MjQ2NjY2NzcxNjI2ODI3MDU3MTkxMDIzMDA0IEluZXhhY3QgUm91bmRlZAotbG54MTUxNyBsbiAwLjUzNzMxNzY3ODQ1MzU4MjI0NDQ1ODA5NzYxMzE1MTU5MjQ5ODk4NTY2NTQyOTEwNjQ5IC0+IC0wLjYyMTE2NTc3OTM5OTY4NDA5MjExNzM2NDEzNjI4MjM2Mjg1MTYwMDQ4MzU3MDAwOTYxIEluZXhhY3QgUm91bmRlZAotbG54MTUxOCBsbiAwLjAwMDAwMDAwMDAwMDAwMDA4OTY1MjkxMzkyODgyODA0MTYxMjk5NzU4NzA4MDMzMzczIC0+IC0zNi45NTA1ODU5NzA5ODA4NTczNzYwODEyNjUwNzMyNzYzMDM2NzA4MjAwNTY5MTYyMDYgSW5leGFjdCBSb3VuZGVkCi1sbngxNTE5IGxuIDAuMDAwMDAwMDAwMDY5OTAyNDQ5MTYwMjY0Mjk5MDQ0OTgyNzg5ODI1MzAxNzAyOTU2NjggLT4gLTIzLjM4MzkyMDQyOTI0NDQ1NzU3ODM3MzUyMzUwODQyNzc4MzE0NDU4OTQ4MDQyMDc1MyBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MjAgbG4gNC4wMzEyNTQyOTc3MDcwMzAwMDcwNTA2MDY0NjY2NTM2NDc4MzczODAxOTg4NTQwNjE0ICAtPiAxLjM5NDA3NzU2NzY1OTI0NTE5NDU3OTU3NTI3OTY0MjEzOTE4NzEzMDIwMjQ3NjMzMDUgSW5leGFjdCBSb3VuZGVkCi1sbngxNTIxIGxuIDI3MS44NDk5MTMxMTU1MTg3NTYwMTQzMjUxODgxOTU2MjM5MTY5OTMyNDYzMjM5NjQyMyAgLT4gNS42MDUyNTAxMjM5ODczODYyNTE3OTE2Njc5NzQ3MTQ2NTM5ODA4MDc3NDMxODczNDc4IEluZXhhY3QgUm91bmRlZAotbG54MTUyMiBsbiA3LjQxMTg2NzE2MjkzNzM4NjQ2NjcyMjk0NDU3NDY4NjIzMTQ0NDM4OTU0MDQ4MTg2ODkgIC0+IDIuMDAzMDgyMzg2MzcwNjM0NDYyODIzOTE0NzYzOTMxODI4OTk2MTkxNzA2MDEyMTE0MSBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MjMgbG4gMC4wMDAwMDAwMDAwMDAwMjAyNjMxMTQ1MjYyNTM2NDkwNTM1NzMyMTY2NDE4NjAzNDI1OCAtPiAtMzEuNTI5OTc0MTgwMDU0NDM4NzkyMDQzODU2ODc3MzE0MDQzNzk0MzIwOTUxMTM0NzU0IEluZXhhY3QgUm91bmRlZAotbG54MTUyNCBsbiAwLjAwMDAwMDAwMDAwMDA5NTYzMzk4NjUxMjYxNzU2OTUyMzk4MjUwNjI0NzM3ODA5MzQ3IC0+IC0yOS45NzgyNDgxMzA1NzY5NzI5NTMxNDEyODQxMzY5NjI2NzAwMjEzNjg4MzQ3OTI1NzkgSW5leGFjdCBSb3VuZGVkCi1sbngxNTI1IGxuIDAuMDAwMDAwMDAwMDk1NTY3NzI2Njk0MDk4NTg2NTMwMjY1NTgyMjM0NjUxOTc4MDg5OTEgLT4gLTIzLjA3MTE4NTkzOTc0ODI4NTU0MTIyODIwNjE2MTQ3Mjk1NjY2MTE5Njk1Njc0MTE4NiBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MjYgbG4gNi44NDQxNjQ4Mjk4MDI3MzAxMjkyMzQyMDU3MjQ4NzM3MzI2MTUyMjUwNzk0MDI2NzYxICAtPiAxLjkyMzM5NjQzOTU4MDE5NDY1OTcyNzI1ODk0NzM0MTc5NDgwMjQzNjEwMDUwODI5MDggSW5leGFjdCBSb3VuZGVkCi1sbngxNTI3IGxuIDAuMDAwMDAwMDAwMDAwNzMwNTk2OTk4ODQ0Mzk5NzkzOTQ5NDU4MjIwMzU3MDQyNjQ1NzcgLT4gLTI3Ljk0NDkxNDM4ODM1MzcyNDcxODgzNjEwMTgyODY3Nzc3MTk2NzEyODUwOTYwMzE1OCBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MjggbG4gMC4wMDAwMDAwMDAwMDAwMDAwMjYxMDA3ODI4MDQxOTA4MjI2MzEzODA2NDc0NTQxNjc4NyAtPiAtMzguMTg0NTY2MzY3NTE2MjA3ODg1NTczNzczMzIwMTM1OTY1Nzk4NzE3MTIwNzM1MTE1IEluZXhhY3QgUm91bmRlZAotbG54MTUyOSBsbiAwLjAwMDAwMDAwMDAwMDAwMDAwMTUwMjU5NTE3MTY2Mjk0MjQzMDg4NTQ2ODA2MDgzMjgzIC0+IC00MS4wMzkzMzc5NDYyNjY2NzYxMDg1MzgxNzA4Mzc1ODAwNTE2OTk2MTgzMzQ5Mjg0MjEgSW5leGFjdCBSb3VuZGVkCi1sbngxNTMwIGxuIDAuMDAwMDAwMDAwMDAwMDAwODc5MTkxNjA1NDE3MTQ1ODA3MDcxODE5Njk3MDg1MDIwOTEgLT4gLTM0LjY2NzUyODgxODgyNzY3MTUwNzUxNDMxOTc0NDA0NzQ0MDY5NjE4NzM1ODY3Njg0OCBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MzEgbG4gMC4wMDAwMDAwMDAwMDM5NTcyNjcyNTEyMDc4Nzc2MzI3MTg0OTU3NzcwODA2ODU4NDU5OCAtPiAtMjYuMjU1NDY3NDE2OTYxMzU3NzQxODE4NzM1Nzg3MjI2NjcxOTM4Njc4NDI0NzQ4NDMxIEluZXhhY3QgUm91bmRlZAotbG54MTUzMiBsbiAwLjAwMDAwMDAwMDAyMDE0MzM0OTAxNjY5MzY2MjE4MDE4Mzc3MjEzMTUwNzE1OTM4MzU1IC0+IC0yNC42MjgxNDY5NTU2MzUzNTkwMzUyODkxMjMwMjczMTk5NjkyMDE2OTM3MzcxNTkxMDggSW5leGFjdCBSb3VuZGVkCi1sbngxNTMzIGxuIDAuMDAwMDAwMDgwOTc5MjcxMDExMDEwOTMxMTc3NTM5Mzg3NjYyNDE0NDI4OTYwMzA2MzcgLT4gLTE2LjMyOTA3MjYyODQ2OTcxNTE3ODYzNzE3ODM2NTcxMDM3MzM5ODIwMzE5MDkzNzQ1NCBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MzQgbG4gMC4wMDAwMDAwMDAwMDAxNzExNTgzNDE2MjYzMjg2NDM5MjAzOTY2ODExNjI0Mzk4NDE3NiAtPiAtMjkuMzk2MTg3MjkyNDM0ODk4MjI1NDUzNjI2Nzk0NDU5Mjg1MTU3MjYzMTc3NTI4MDM0IEluZXhhY3QgUm91bmRlZAotbG54MTUzNSBsbiAwLjM5MTY4MzE3NTkzODY2MzM0MDg3MzA1NDU5OTMzNzIzODY0Mjk0ODU3MDg2MTA1MDM1IC0+IC0wLjkzNzMwMTk5MDYyNzU3MjQwNDg1ODM2NjM3MzA2Nzg1MDM3MzY4NzQ2NzM3NjkzMDI5IEluZXhhY3QgUm91bmRlZAotbG54MTUzNiBsbiA3OS4zMzUwMzY3OTg5NzE1MTUwMjY1MTk2MzAxMDMzMjUzNjk3Mjk2Mzc1MTQxMjc2MTcgIC0+IDQuMzczNjc5ODU3MDI4NzgyODgyMzc3MjE0OTczNTE3MDQzMTAxMDYxNjk2MTk3Njk2NSBJbmV4YWN0IFJvdW5kZWQKLWxueDE1MzcgbG4gMC4wMDAwMDAwMDAwMDAwMDA1NjAwNDk1MjEyOTkyNjEzNzQxMzYwMjExNjU5MTQ5MzYyNSAtPiAtMzUuMTE4NTA2NDYzMTgxODcwMDIwNzMwNjg1ODg0MzMzMDAwMjQxMDM5MDI4MTI3MjEzIEluZXhhY3QgUm91bmRlZAotbG54MTUzOCBsbiAwLjAwMDAwMDA2MDA2MDM1OTA3ODQzODkwOTE4ODMyNDgxMDk5NjYwNjM5NTUzNjY2MDc4IC0+IC0xNi42Mjc5MTU3OTU3NDcxMTI1NjY1MzI3MDU5NzQ4NTMxMTQ0NTQ0MDUwMTA0NzIwNDMgSW5leGFjdCBSb3VuZGVkCi1sbngxNTM5IGxuIDAuMDAwMDAwMDAwODUyNDIwMjQ5Mzc0MTQ5MDYzNzEzMzM4MjY1NzQ2MzI0NTA1ODc1OTAgLT4gLTIwLjg4Mjk0MTQ2MDI2ODEwMTA4MDE4NjQ4MjIzMDY1Nzc3NDk5NzI3MzQ5NDEwNzIyMSBJbmV4YWN0IFJvdW5kZWQKLWxueDE1NDAgbG4gMC4wMDAwMDAwMDAwMDA0MzY3MTA5OTQ5OTI2MjM1MDMxNjE3MzI0NjU1MDc3MTk1MTU2MSAtPiAtMjguNDU5NTA0NzU3Mjg1NjM5MjIxNzc2MzA1OTY4NDY5MDU4ODU0NTU4NzI2NTkzOTQ1IEluZXhhY3QgUm91bmRlZAotCi0tLSBQPTM0LCB3aXRoaW4gMC05OTkKLVByZWNpc2lvbjogMzQKLWxueDEyMDEgbG4gMC4wMDg2NzMyODgwODE1OTI3MTgyOTk3NTY2ODEwMzM0Mzk0IC0+IC00Ljc0NzUwNzMxMTkyMDg0NDc1MjQ4NjkzODE4Nzk3MzcyMSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMDIgbG4gMC4wMDA3MTA0MTAzNjkzNDYwMjYwNjA5NzkyMjIyNTY5ODU0IC0+IC03LjI0OTY2Nzc2OTkwMzUwMzAyMzAwNTU0OTI1MDM0NzY5NSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMDMgbG4gNzg2LjgzOTg5NDUzODUxMDUxOTA2OTc1NDE0OTMzOTI3NDIgIC0+IDYuNjY4MDI0NzkwMDMxODM2MzQwNDcxODI0MTQ3MDEwNTQ2IEluZXhhY3QgUm91bmRlZAotbG54MTIwNCBsbiAwLjc3MjMwNzM2MjAyODI2ODc2NTY4OTUxOTAxNzE5NjczOTkgLT4gLTAuMjU4MzcyNjcwODUwNjg1MDg2ODc4NjgxNjIzODIxNzMyNiBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMDUgbG4gMC4wMDYxMDU3OTUxNTE3MTk3NjMxMjg3MTgzOTM4NDEyMjAwIC0+IC01LjA5ODUxNjkzMzkxODc5NzM0NzA2NDQ1NDEwMzc0MjYzNSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMDYgbG4gMC42MTgxMzc5NzA4MTg0MzkzNzMwMTAzOTE3NTYyNDk4NzQ1IC0+IC0wLjQ4MTA0MzU5MjY5MDMzNjUwODc0NjMzODc3NjAzNTAwMjEgSW5leGFjdCBSb3VuZGVkCi1sbngxMjA3IGxuIDA5LjEzODg4MjYxMjI5MDM5OTg5MTEwNzUzMzg5MDk2NzYwICAtPiAyLjIxMjUzODEyNTUwNzk3NTU3NDUwOTU2MzAyNzY5NjAyMSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMDggbG4gODAyLjAxMDU0MTcwNjMxNDM2OTY0OTcyOTIxNTgxNDcxNzQgIC0+IDYuNjg3MTIxNzUyMDUyMzQxNzM3MjM0ODMyMjAzMzUwMjE0IEluZXhhY3QgUm91bmRlZAotbG54MTIwOSBsbiA3NzguNzc0OTcxMDM4Nzc3MzcxMzUyMzAyODQ5NzMzMzA1OCAgLT4gNi42NTc3MjIxMzUxMjY5MzU0NzIwODY2MjUwMzE0MTMwMzEgSW5leGFjdCBSb3VuZGVkCi1sbngxMjEwIGxuIDAuMDAyNDQ1NzI5NTg5NTM0NjUwMjUxMzU2NzY3OTM5MDYxNiAtPiAtNi4wMTM0MTE3OTk5NDAyNDUzNDUzMjEzNDgyOTAzOTg1MTcgSW5leGFjdCBSb3VuZGVkCi1sbngxMjExIGxuIDAuMDAwMDUxMTI5Njk0Nzg3MjgyODMxMDMzODg2NDIxNzg2MCAtPiAtOS44ODExNDUxMTgyMzcyODE3OTgwODE1NzMxMzE3MTE2MzYgSW5leGFjdCBSb3VuZGVkCi1sbngxMjEyIGxuIDAuMDAwMDI0NjgwMzUwODYwMjU1NDkyNDkzODY4NTE1NTY1OCAtPiAtMTAuNjA5NTAzMTQyNjQ4MjU2NjE4MjUzNjA5NzE0MzAyMTggSW5leGFjdCBSb3VuZGVkCi1sbngxMjEzIGxuIDkuMDI3ODk4MTk5MjUzNTExNjY4MjQyOTc3NzY2NjE2MDgyICAtPiAyLjIwMDMxOTU4Mjc3ODg5OTAyOTc4NjAxNzgzMDU1NzI5MyBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMTQgbG4gMC4wOTkxODEyMzk2NTQyNTA1NjMxODUwNjkyODAwOTA0MTg4IC0+IC0yLjMxMDgwNjM5ODk2NDY3MjI1ODgyMzA0MzE4MDQwMDM4NCBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMTUgbG4gMC4wMDAwMDAwMDAwMDcwMjM4ODEwMTQzMDI4ODExMjIzOTI0IC0+IC0yNS42ODE3MDUxOTk2MTYzNjY0NzE3NDcxNDUzODI5MDA3NSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMTYgbG4gMi42MzAxMDE2NjUzNDI4MjY0OTQ3MzAzOTQ3MjkzMTMxNjcgIC0+IDAuOTY3MDIyNTAxNDY2NDM2NzQ2NTEyODI0MzAzOTc0OTU1OSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMTcgbG4gMC4wMDU2ODc4OTI4NTk0MzU5NTg3NjkxNTI2MDYzMjU0NjgzIC0+IC01LjE2OTQxNTQyMjkwNDAzNzgxOTczNjYzNzM5OTQ0NTA5NiBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMTggbG4gNTY3LjM0MzYwNDcxMjEwNTc4NDM5MDgxMDY1NzMwOTU1OTAgIC0+IDYuMzQwOTY1MTI0OTY0MjU4NDg2NDYzNDQ0MzYwNzg3OTcwIEluZXhhY3QgUm91bmRlZAotbG54MTIxOSBsbiAxLjE5OTI5MTI0ODEyNDY1NTk5NjYxNDYwNTc0NTY0OTcyNSAgLT4gMC4xODE3MzA3NTU3NDI1OTExODA1NzY1MDg3NzU1Njc1NjU3IEluZXhhY3QgUm91bmRlZAotbG54MTIyMCBsbiAyNS4wMjA1MDQ0ODU4MjAzMTA5ODY5NjI2NzQ3OTEzNTU1NyAgLT4gMy4yMTk2OTU2NjgxMzc2NTkxMzk1NDQxNzg5MDU0NTkzMTcgSW5leGFjdCBSb3VuZGVkCi1sbngxMjIxIGxuIDAuMDAwMDAwMDAwMDAwOTkzOTU5NzAyMzU1ODc1Njk2MTMwMCAtPiAtMjcuNjM3MDc5NzI5OTY1Mzc2MzY1MDQzOTY1NTgyNTkwNTggSW5leGFjdCBSb3VuZGVkCi1sbngxMjIyIGxuIDAuMDAwMDAwNzk4ODU1MTY3MDE1OTQyOTcxNjUwNjQzMDQwMyAtPiAtMTQuMDQwMDg2MTc1NDI1OTcyMzA5ODgxOTg2MTIzNzY0MTUgSW5leGFjdCBSb3VuZGVkCi1sbngxMjIzIGxuIDQuNjgxNTE1ODAwMTc2MTI5MTg0ODczNzcwNjA1NTg5Nzk1ICAtPiAxLjU0MzYyMTk0NjQxNTM4MzMzODk3MjEyNDQ0NTQ0NTc0OCBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMjQgbG4gMTUuOTUxMjY2NjkxNjExMDMwMTEyMDY2NTg3NDkzNDU3ODEgIC0+IDIuNzY5NTM4MjQyNDc5NDgzNTM5Mjc1OTg2Mzk1NDQzNTM5IEluZXhhY3QgUm91bmRlZAotbG54MTIyNSBsbiAwLjAzMDE2MjY3ODM5MjIyMTEyMTM2NzU0NTcyNzkwNzYwNjYgLT4gLTMuNTAxMTQ5OTMzNjc3MjgzMzQxMDIzOTMyMjgxODI2MzQxIEluZXhhY3QgUm91bmRlZAotbG54MTIyNiBsbiAwMDAuMDA0MDU0NDA2NDg4MTgyMTc3MDUyODQ3NTE4NTY3NCAgLT4gLTUuNTA3OTUwOTY3NTU3MDIxNjcxNjQ3MTY1ODg5NjA4MzI0IEluZXhhY3QgUm91bmRlZAotbG54MTIyNyBsbiAyOS4wMTYxNzA5NTkzNTU5Mzc5MjA5NTkxMzc4NTEwMDM2MCAgLT4gMy4zNjc4NTMyOTM4NjI3NDU2NTE4ODg0NTAwMDQ0NzMyOTcgSW5leGFjdCBSb3VuZGVkCi1sbngxMjI4IGxuIDc4LjAxODM2MTY3MzQ0NzM2NzMzMDI0ODA0MjQzMTk1MzIzICAtPiA0LjM1Njk0NDIwNTA1NTc2ODU3NTk4Nzc4MTM3NTAwMzk5MiBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMjkgbG4gMC4wMDAwMDAwMDk2NTQ1MzE5MzE2OTY1MzIxMTU4NjM0ODkzIC0+IC0xOC40NTU4Mzg0MDE2MDk2NTgxNDQ2MjA5NTQ3NzM2NTAxMyBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzAgbG4gOTcuOTU0NzUyMzc3MjA1Nzk3NTI3NzA1ODcxODUwNzQ0MjggIC0+IDQuNTg0NTA1NjYxNjEyODEyNzQyMjA4NjE5MzU4MjE0NzI5IEluZXhhY3QgUm91bmRlZAotbG54MTIzMSBsbiA1MjguMDYwOTI2MjA1MDQyMzI0NjQwMjU2NDIyODQzMjM3MSAgLT4gNi4yNjkyMTE2Njc1ODkxMzgxMTMzOTY1ODM4OTQzMTU5NTYgSW5leGFjdCBSb3VuZGVkCi1sbngxMjMyIGxuIDAuMDAwMDAwMjI1MDA2NDM0OTczMjk2OTY5NjY2MDQ1Mjk3MiAtPiAtMTUuMzA3MTM2ODM1MjY5NjM5OTY3MTIxNjc3MDE3Mzg3MjQgSW5leGFjdCBSb3VuZGVkCi1sbngxMjMzIGxuIDQ3Ljk3MDYzNjM3NzY3OTk4NjU4NTY3MTk5MDQ5NzI1NzU0ICAtPiAzLjg3MDU4OTA4MTU4NTY2MDY5MjE5NTk4OTg1NDg0MjM3MiBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzQgbG4gMC4wMDA1Mzk0MzExMzQ0NTQxNDMyMzE4ODUzNTEzNDE0MzYxIC0+IC03LjUyNDk5NTQyODM5MzkyNTkzNDA4NzEyNjcwMjk3NDEyMSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzUgbG4gMC4wMDAwMDAwMDkwOTczMzg1NjQ5NTY3NDcxNjc0OTcyNjMzIC0+IC0xOC41MTUyODM5MzE1ODkzMTc4MzQ0NzAzNTAwNDEyNTc5MSBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzYgbG4gMC4wMDAwMDAwMDAwMjM4Nzc2NDkwMjI3NTc2MTk3MzE3OTc3IC0+IC0yNC40NTgwNzgyODE4ODM4OTU2MTMzMTE1ODg3OTIwNzI2MiBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzcgbG4gMC4wMDAwMjM2NTg3MDAwMjMxOTIxNTMyMTQ1MzI2MjE4NzU4IC0+IC0xMC42NTE3Nzk2NDQ5OTgyMzMxNDk1MjQyOTI3Nzk3OTAzNCBJbmV4YWN0IFJvdW5kZWQKLWxueDEyMzggbG4gNDk5LjEyNzc0NDg4NDYxMzA3MDk4MjcxNTQ1NTYxMjU5NDIgIC0+IDYuMjEyODYyMDY0NzYxNDI3OTY3NDYxMTg4MDgzNTE0Nzc0IEluZXhhY3QgUm91bmRlZAotbG54MTIzOSBsbiAwLjAwMDAwMDM5NjAxOTIzMDAyODQ3ODc2NjM3MTI0MTc2NDcgLT4gLTE0Ljc0MTgwMzA2NjE5Mjk4NTQ4MDkzNjk3NjA4MjkzMjg0IEluZXhhY3QgUm91bmRlZAotbG54MTI0MCBsbiA0MS4wODI2ODM1MDgyOTQ3NzQ1MTY2NzIyODg5MjQ5NTEzNiAgLT4gMy43MTU1ODY3MDY4ODcyNzgwMzkxNzM1ODQ4NTkyMTg5NjAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFA9MTYsIHdpdGhpbiAwLTk5Ci1QcmVjaXNpb246IDE2Ci1sbngxMTAxIGxuIDcuOTY0ODc1MjYxMDMzOTQ4ICAtPiAyLjA3NTA0MTI4MjM1MjI0MSBJbmV4YWN0IFJvdW5kZWQKLWxueDExMDIgbG4gMTMuNTQ1MjczOTY4NDUzOTQgIC0+IDIuNjA2MDM3NzAxODcwMjYzIEluZXhhY3QgUm91bmRlZAotbG54MTEwMyBsbiAwLjAwMDgwMjY1NTQzNDEzMzEgLT4gLTcuMTI3NTg1MDM0MzIxODE0IEluZXhhY3QgUm91bmRlZAotbG54MTEwNCBsbiAwLjAwMDAwMzA1ODIyMzMyNjEgLT4gLTEyLjY5NzY3NjQyMzAwNjI1IEluZXhhY3QgUm91bmRlZAotbG54MTEwNSBsbiAwLjAwMDQ0Nzc0OTc1MDk2NzIgLT4gLTcuNzExMjc2MDczMjEwNzY2IEluZXhhY3QgUm91bmRlZAotbG54MTEwNiBsbiA3LjYxNjI2ODYyMjQ3NDM3MSAgLT4gMi4wMzAyODY1Njc2NzUxNDggSW5leGFjdCBSb3VuZGVkCi1sbngxMTA3IGxuIDUxLjU4MzI5OTI1ODA2MzgxICAtPiAzLjk0MzE5Nzk2MjMwOTU2OSBJbmV4YWN0IFJvdW5kZWQKLWxueDExMDggbG4gMC4wMDE4MTk3NDk3OTUxMjYzIC0+IC02LjMwOTA1NjI2MjU0OTM0NSBJbmV4YWN0IFJvdW5kZWQKLWxueDExMDkgbG4gMi45NTYyODI0NTcwNzI5ODQgIC0+IDEuMDgzOTMyNTUyMzM0NTc1IEluZXhhY3QgUm91bmRlZAotbG54MTExMCBsbiAwLjM4NDMzMjU1NzkxODk5MDYgLT4gLTAuOTU2MjQ3MDY0OTQwMDU1OCBJbmV4YWN0IFJvdW5kZWQKLWxueDExMTEgbG4gMC4wMDc0NDY2MzI5MjY1NjYzIC0+IC00Ljg5OTk5MzMwNDkxOTIzNyBJbmV4YWN0IFJvdW5kZWQKLWxueDExMTIgbG4gMC4wMDAzMzcyNDc4NTMyOTkzIC0+IC03Ljk5NDY5MjQyODIwNjM3OCBJbmV4YWN0IFJvdW5kZWQKLWxueDExMTMgbG4gMC4wMDg0NzkyMjYzMTY3ODA5IC0+IC00Ljc3MDEzNjA2OTU2OTI3MSBJbmV4YWN0IFJvdW5kZWQKLWxueDExMTQgbG4gNS45MjY3NTY5OTgxNTExMDIgIC0+IDEuNzc5NDc3MTgyODM0MzA1IEluZXhhY3QgUm91bmRlZAotbG54MTExNSBsbiA5LjAyNTY5OTE1MjE4MDg5NyAgLT4gMi4yMDAwNzU5Njk2MDQxMTkgSW5leGFjdCBSb3VuZGVkCi1sbngxMTE2IGxuIDEuOTEwMTI0NjQzNTMzNTI2ICAtPiAwLjY0NzE2ODQ5ODMyMzgxODMgSW5leGFjdCBSb3VuZGVkCi1sbngxMTE3IGxuIDAuODE1ODkyMjcxMTQxMTAyMCAtPiAtMC4yMDM0NzI5NTMzOTM5Mzg3IEluZXhhY3QgUm91bmRlZAotbG54MTExOCBsbiAwLjAwNjcwODAwMTY0NzUzMjIgLT4gLTUuMDA0NDU0MTg5NDE0MTM5IEluZXhhY3QgUm91bmRlZAotbG54MTExOSBsbiAwLjAwNDc1ODMyNDIwOTI3MTYgLT4gLTUuMzQ3ODU5NzI5NjAxMDk0IEluZXhhY3QgUm91bmRlZAotbG54MTEyMCBsbiAwLjAzODY2NDc0MTE2NDEzMzkgLT4gLTMuMjUyODI3MTc1MjYzMTEzIEluZXhhY3QgUm91bmRlZAotbG54MTEyMSBsbiAwLjAwNTAyMjY0Mjc4NDE3NjEgLT4gLTUuMjkzNzk5MDMyNzc0MTMxIEluZXhhY3QgUm91bmRlZAotbG54MTEyMiBsbiA2LjkyNzkzNzU0MTYzNzI2MSAgLT4gMS45MzU1NjIxNTU4NjY5MDYgSW5leGFjdCBSb3VuZGVkCi1sbngxMTIzIGxuIDAuMDAwMDA5NTc0NTM0MzUxMyAtPiAtMTEuNTU2NDAzNjU1Nzk4MTQgSW5leGFjdCBSb3VuZGVkCi1sbngxMTI0IGxuIDEuNjAyNDY1NDkyOTU2NTM4ICAtPiAwLjQ3MTU0MzM3NjMyNDM5MzYgSW5leGFjdCBSb3VuZGVkCi1sbngxMTI1IGxuIDM4Ljk4NDE1NjI1MDg3NTM1ICAtPiAzLjY2MzE1NTMxMzYxMDIxMyBJbmV4YWN0IFJvdW5kZWQKLWxueDExMjYgbG4gNS4zNDMxODIwNDIyNzY3MzQgIC0+IDEuNjc1ODIxMzYzNTY4MTEyIEluZXhhY3QgUm91bmRlZAotbG54MTEyNyBsbiA1NS44OTc2MzcwMzI0NTgxNiAgLT4gNC4wMjM1MjIxMDc5MzQxMTAgSW5leGFjdCBSb3VuZGVkCi1sbngxMTI4IGxuIDAuNzQ0NTI1NzgxMDI4MDg0NyAtPiAtMC4yOTUwMDc3OTg4MTAxMDMwIEluZXhhY3QgUm91bmRlZAotbG54MTEyOSBsbiAxLjYzMTQwNzMxNDk0NjA5NCAgLT4gMC40ODk0NDMwMjU3MjAxMjQ4IEluZXhhY3QgUm91bmRlZAotbG54MTEzMCBsbiAwLjAwMDU0NjI0NTE5MzI2MDIgLT4gLTcuNTEyNDQyNjExMTE2ODUyIEluZXhhY3QgUm91bmRlZAotbG54MTEzMSBsbiAwLjAwMDA4NjQxNzMyNjkzNjIgLT4gLTkuMzU2MzIyMzU5MDE3MzE3IEluZXhhY3QgUm91bmRlZAotbG54MTEzMiBsbiA1LjIyNzE2MTcxOTEzMjg0OSAgLT4gMS42NTM4Njg0Mzg0Mzk2MzcgSW5leGFjdCBSb3VuZGVkCi1sbngxMTMzIGxuIDYwLjU3MDc4NDY2OTQxOTk4ICAtPiA0LjEwMzgxMjY3NTY2MjQ1MiBJbmV4YWN0IFJvdW5kZWQKLWxueDExMzQgbG4gMC4wOTkyODY0MzI1MzMzMTYwIC0+IC0yLjMwOTc0NjM0ODM1MDMxOCBJbmV4YWN0IFJvdW5kZWQKLWxueDExMzUgbG4gMDkuNDg1NjQyNjg0NDczMjUgIC0+IDIuMjQ5Nzc5MzU5MDc0OTgzIEluZXhhY3QgUm91bmRlZAotbG54MTEzNiBsbiAwLjAwMzYxMDYwODkzNTU2MzQgLT4gLTUuNjIzODc4ODQwNjUwNzg3IEluZXhhY3QgUm91bmRlZAotbG54MTEzNyBsbiAxLjgwNTE3Njg2NTU4NzE3MiAgLT4gMC41OTA2NTg1NzM0NTkzNzA3IEluZXhhY3QgUm91bmRlZAotbG54MTEzOCBsbiA2Mi41OTM2MzI1OTY0MjI1NSAgLT4gNC4xMzY2NjM1NTcyMjA1NTkgSW5leGFjdCBSb3VuZGVkCi1sbngxMTM5IGxuIDQuMzczODI4MjYxMTM3MjAxICAtPiAxLjQ3NTYzODY1NzkxMjAwMCBJbmV4YWN0IFJvdW5kZWQKLWxueDExNDAgbG4gMC45OTQ0ODM1MjQxNDg3MzggIC0+IC0wLjAwNTUzMTc0Nzc5NDkzODY5MCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUD03LCB3aXRoaW4gMC05Ci1QcmVjaXNpb246IDcKLWxueDEwMDEgbG4gMC4wOTEyMDI1IC0+IC0yLjM5NDY3MyBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMDIgbG4gMC45NzI4NjI2IC0+IC0wLjAyNzUxMjQyIEluZXhhY3QgUm91bmRlZAotbG54MTAwMyBsbiAwLjM4ODYwMzIgLT4gLTAuOTQ1MTk2NSBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMDQgbG4gOC43OTg2MzkgIC0+IDIuMTc0NTk3IEluZXhhY3QgUm91bmRlZAotbG54MTAwNSBsbiAyLjQ1OTEyMSAgLT4gMC44OTk4MDQwIEluZXhhY3QgUm91bmRlZAotbG54MTAwNiBsbiAyLjAxMzE5MyAgLT4gMC42OTk3MjIwIEluZXhhY3QgUm91bmRlZAotbG54MTAwNyBsbiA5LjA2NDg1NyAgLT4gMi4yMDQ0MDUgSW5leGFjdCBSb3VuZGVkCi1sbngxMDA4IGxuIDUuNzk2NDE3ICAtPiAxLjc1NzI0MCBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMDkgbG4gMC4xMTQzNDcxIC0+IC0yLjE2ODUxNyBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMTAgbG4gMC41MzQxNTQyIC0+IC0wLjYyNzA3MDcgSW5leGFjdCBSb3VuZGVkCi1sbngxMDExIGxuIDYuNjkzNzgxICAtPiAxLjkwMTE3OSBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMTIgbG4gMC4wMDgxNzc5IC0+IC00LjgwNjMyMCBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMTMgbG4gOC4zMTM2MTYgIC0+IDIuMTE3ODk1IEluZXhhY3QgUm91bmRlZAotbG54MTAxNCBsbiAzLjQ4NjkyNSAgLT4gMS4yNDkwMjAgSW5leGFjdCBSb3VuZGVkCi1sbngxMDE1IGxuIDAuMTgwMTQwMSAtPiAtMS43MTQwMjAgSW5leGFjdCBSb3VuZGVkCi1sbngxMDE2IGxuIDAuNTIyNzE0OCAtPiAtMC42NDg3MTkzIEluZXhhY3QgUm91bmRlZAotbG54MTAxNyBsbiA3LjgxODExMSAgLT4gMi4wNTY0NDMgSW5leGFjdCBSb3VuZGVkCi1sbngxMDE4IGxuIDAuMDg3MDY3MSAtPiAtMi40NDEwNzYgSW5leGFjdCBSb3VuZGVkCi1sbngxMDE5IGxuIDguMTUzOTY2ICAtPiAyLjA5ODUwNCBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMjAgbG4gMi4wNDA5NzUgIC0+IDAuNzEzNDI3NiBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMjEgbG4gMS40ODE2NDIgIC0+IDAuMzkzMTUwOSBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMjIgbG4gMC4yNjEwMTIzIC0+IC0xLjM0MzE4OCBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMjMgbG4gMC40NjY3MjMgIC0+IC0wLjc2MjAxOTMgSW5leGFjdCBSb3VuZGVkCi1sbngxMDI0IGxuIDAuMDUxODc1NiAtPiAtMi45NTg5MDcgSW5leGFjdCBSb3VuZGVkCi1sbngxMDI1IGxuIDIuMDU2NDEwICAtPiAwLjcyMDk2MTcgSW5leGFjdCBSb3VuZGVkCi1sbngxMDI2IGxuIDAuMTgxNTIyICAtPiAtMS43MDYzNzggSW5leGFjdCBSb3VuZGVkCi1sbngxMDI3IGxuIDAuNTE1NTUxICAtPiAtMC42NjI1MTkwIEluZXhhY3QgUm91bmRlZAotbG54MTAyOCBsbiA4LjQyNTA4OSAgLT4gMi4xMzEyMTQgSW5leGFjdCBSb3VuZGVkCi1sbngxMDI5IGxuIDIuMDc3MDkxICAtPiAwLjczMDk2ODQgSW5leGFjdCBSb3VuZGVkCi1sbngxMDMwIGxuIDYuMjEyNzA1ICAtPiAxLjgyNjU5NiBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMzEgbG4gNS43MjkzNDMgIC0+IDEuNzQ1NjAxIEluZXhhY3QgUm91bmRlZAotbG54MTAzMiBsbiA0LjgzMTI1MSAgLT4gMS41NzUxMDUgSW5leGFjdCBSb3VuZGVkCi1sbngxMDMzIGxuIDIuMDI5NzYwICAtPiAwLjcwNzkxNzYgSW5leGFjdCBSb3VuZGVkCi1sbngxMDM0IGxuIDguNjE1MDYwICAtPiAyLjE1MzUxMiBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMzUgbG4gMC4wNjExNTExIC0+IC0yLjc5NDQwNyBJbmV4YWN0IFJvdW5kZWQKLWxueDEwMzYgbG4gNS4xOTUyNjkgIC0+IDEuNjQ3NzQ4IEluZXhhY3QgUm91bmRlZAotbG54MTAzNyBsbiA5LjYxNzY4NiAgLT4gMi4yNjM2MDQgSW5leGFjdCBSb3VuZGVkCi1sbngxMDM4IGxuIDAuMDA0OTM4MiAtPiAtNS4zMTA3NTQgSW5leGFjdCBSb3VuZGVkCi1sbngxMDM5IGxuIDIuNzg2ODQwICAtPiAxLjAyNDkwOCBJbmV4YWN0IFJvdW5kZWQKLWxueDEwNDAgbG4gMC4wMDkxMDczIC0+IC00LjY5ODY3OSBJbmV4YWN0IFJvdW5kZWQKLQotLS0gZnJvbSBoZXJlIDMtZGlnaXQgdGVzdHMgYXJlIGJhc2VkIG9uIHJldmVyc2UgZXhwIHRlc3RzCi1wcmVjaXNpb246ICAgOQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotbG54MDAxICBsbiAwICAgICAgICAgICAtPiAgLUluZmluaXR5Ci1sbngwMDIgIGxuIDAuMzY3ODc5NDQxIC0+ICAtMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAwMyAgbG4gMSAgICAgICAgICAgLT4gICAwCi1sbngwMDUgIGxuIDIuNzE4MjgxODMgIC0+ICAgMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAwNiAgbG4gMi4wMDAwMDAwMCAgLT4gICAwLjY5MzE0NzE4MSAgIEluZXhhY3QgUm91bmRlZAotbG54MDA3ICBsbiArSW5maW5pdHkgICAtPiAgIEluZmluaXR5Ci0KLS0tIHRpbnkgZWRnZSBjYXNlcwotcHJlY2lzaW9uOiAgIDcKLWxueDAxMSAgbG4gMS4xMDUxNzEgLT4gIDAuMTAwMDAwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMiAgbG4gMS4wMTAwNTAgLT4gIDAuMDA5OTk5ODM1ICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxMyAgbG4gMS4wMDAwMTAgLT4gIDAuMDAwMDA5OTk5OTUwICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNCAgbG4gMS4wMDAwMDEgLT4gIDkuOTk5OTk1RS03ICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDAxNSAgbG4gMS4wMDAwMDAgLT4gIDAKLQotLS0gYmFzaWMgZT0wLCBlPTEsIGU9MiwgZT00LCBlPj04IGNhc2VzCi1wcmVjaXNpb246ICAgNwotbG54MDQxICBsbiAyLjcxODI4MiAgICAgIC0+ICAxLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDA0MiAgbG4gMC4zNjc4Nzk0ICAgICAtPiAtMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwNDMgIGxuIDIyMDI2LjQ3ICAgICAgLT4gIDEwLjAwMDAwICAgIEluZXhhY3QgUm91bmRlZAotbG54MDQ0ICBsbiAwLjAwMDA0NTM5OTkzIC0+IC0xMC4wMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDA0NSAgbG4gMi42ODgxMTdFKzQzICAtPiAgMTAwLjAwMDAgICAgSW5leGFjdCBSb3VuZGVkCi1sbngwNDYgIGxuIDMuNzIwMDc2RS00NCAgLT4gLTEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZAotbG54MDQ3ICBsbiBJbmZpbml0eSAgICAgIC0+ICBJbmZpbml0eQotbG54MDQ4ICBsbiAwRS0zODkgICAgICAgIC0+IC1JbmZpbml0eQotCi0tLSBtaXNjZWxsYW5lYQotcHJlY2lzaW9uOiAxNgotbG54MDU1ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MkUtMjM2ICAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTUgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE3Ci1sbngwNTYgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMUUtMjM2ICAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDYgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTgKLWxueDA1NyAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMUUtMjM2ICAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxOQotbG54MDU4ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2ICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTIgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDIwCi1sbngwNTkgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTExOEUtMjM2IC0+IC01NDIuNDEwMzExMjg3NDQxNDU5MTcgICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gaW5wdXRzIGVuZGluZyBpbiAuLjUwMC4uLCAuLjQ5OS4uLCAuLjEwMC4uLCAuLjk5OS4uIHNlcXVlbmNlcwotcHJlY2lzaW9uOiAgIDUwCi1sbngxMDIgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzNzQ5OTUzODI5OTk2NDQ2MTI0ODYxNzUwRS04ICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAzMAotbG54MTAzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwMyAtPiAtOC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5NzMzNzQ5OUUtOCAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDI5Ci1sbngxMDQgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1MEUtOCAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyOAotbG54MTA1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1RS04ICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyNwotbG54MTA2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMCAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAyNzMzOEUtOCAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDI2Ci1sbngxMDcgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczNEUtOCAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyNQotbG54MTA4ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyNAotbG54MTA5ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3OSAtPiAtOC45OTk5OTk5OTk5OTk5OTk5NTAwMDAyN0UtOCAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDIzCi1sbngxMTAgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODggLT4gLTguOTk5OTk5OTk5OTk5OTk5ODUwMDAwM0UtOCAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyMgotbG54MTExICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTkgLT4gLTguOTk5OTk5OTk5OTk5OTk3ODUwMDAwRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAyMQotbG54MTEyICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwMCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NTAwMEUtOCAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDIwCi1sbngxMTMgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwMEUtOCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxOQotbG54MTE0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwRS04ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxOAotbG54MTE1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MCAtPiAtOC45OTk5OTk5OTk5OTk5ODc4NUUtOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6Ci0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTguOTk5OTk5OTk5OTk5OTg3ODQ5OTk5MThFLTgKLXByZWNpc2lvbjogICAxNwotbG54MTE2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1IC0+IC04Ljk5OTk5OTk5OTk5OTk4NzhFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxNgotbG54MTE3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDAgLT4gLTkuMDAwMDAwMDA0OTk5OTg4RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgMTUKLWxueDExOCAgbG4gMC45OTk5OTk5MTAwMDAwMDQgLT4gLTkuMDAwMDAwMDA0OTk5OTlFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxNAotbG54MTE5ICBsbiAwLjk5OTk5OTkxMDAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMDBFLTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxMwotbG54MTIwICBsbiAwLjk5OTk5OTkxMDAwMDAgLT4gLTkuMDAwMDAwNDA1MDAwRS04ICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDEyCi1sbngxMjEgIGxuIDAuOTk5OTk5OTEwMDAwIC0+IC05LjAwMDAwMDQwNTAwRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxMQotbG54MTIyICBsbiAwLjk5OTk5OTkxMDAwIC0+IC05LjAwMDAwMDQwNTBFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxMAotbG54MTIzICBsbiAwLjk5OTk5OTkxMDAgLT4gLTkuMDAwMDAwNDA1RS04ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICA5Ci1sbngxMjQgIGxuIDAuOTk5OTk5OTEwIC0+IC05LjAwMDAwMDQxRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgOAotbG54MTI1ICBsbiAwLjk5OTk5OTkxIC0+IC05LjAwMDAwMDRFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgNwotbG54MTI2ICBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwRS03ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgIDE2Ci1sbngxMjZiIGxuIDAuOTk5OTk5OSAtPiAtMS4wMDAwMDAwNTAwMDAwMDNFLTcgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDYKLWxueDEyNyAgbG4gMC45OTk5OTkgLT4gLTAuMDAwMDAxMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgNQotbG54MTI4ICBsbiAwLjk5OTk5IC0+IC0wLjAwMDAxMDAwMCAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICA0Ci1sbngxMjkgIGxuIDAuOTk5OSAtPiAtMC4wMDAxMDAwICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAgIDMKLWxueDEzMCAgbG4gMC45OTkgLT4gLTAuMDAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAgMgotbG54MTMxICBsbiAwLjk5IC0+IC0wLjAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICAxCi1sbngxMzIgIGxuIDAuOSAtPiAtMC4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gY2FzZXMgbmVhciAxICAgICAgICAgICAgICAtLSAgMSAyMzQ1Njc4OTAxMjM0NTY3ODkwCi1wcmVjaXNpb246ICAgIDIwCi1sbng0MDEgIGxuIDIuNzE4MjgxODI4NDU4OTM2NTA0MSAtPiAwLjk5OTk5OTk5OTk5OTk2MDAwMDAwIEluZXhhY3QgUm91bmRlZAotbG54NDAyICBsbiAyLjcxODI4MTgyODQ1ODk2MzY4NjkgLT4gMC45OTk5OTk5OTk5OTk5NzAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWxueDQwMyAgbG4gMi43MTgyODE4Mjg0NTg5OTA4Njk3IC0+IDAuOTk5OTk5OTk5OTk5OTc5OTk5OTkgSW5leGFjdCBSb3VuZGVkCi1sbng0MDQgIGxuIDIuNzE4MjgxODI4NDU5MDE4MDUyNSAtPiAwLjk5OTk5OTk5OTk5OTk4OTk5OTk4IEluZXhhY3QgUm91bmRlZAotbG54NDA1ICBsbiAyLjcxODI4MTgyODQ1OTA0NTIzNTQgLT4gMS4wMDAwMDAwMDAwMDAwMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLWxueDQwNiAgbG4gMi43MTgyODE4Mjg0NTkzMTcwNjM1IC0+IDEuMDAwMDAwMDAwMDAwMTAwMDAwMCAgSW5leGFjdCBSb3VuZGVkCi1sbng0MDcgIGxuIDIuNzE4MjgxODI4NDU5NTg4ODkxNyAtPiAxLjAwMDAwMDAwMDAwMDIwMDAwMDAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgICAxNAotbG54NDExICBsbiAyLjcxODI4MTgyODQ1ODkgLT4gMC45OTk5OTk5OTk5OTk5NSAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDQxMyAgbG4gMi43MTgyODE4Mjg0NTkwIC0+IDAuOTk5OTk5OTk5OTk5OTggICAgSW5leGFjdCBSb3VuZGVkCi1sbng0MTYgIGxuIDIuNzE4MjgxODI4NDU5MSAtPiAxLjAwMDAwMDAwMDAwMDAgICAgIEluZXhhY3QgUm91bmRlZAotbG54NDE3ICBsbiAyLjcxODI4MTgyODQ1OTIgLT4gMS4wMDAwMDAwMDAwMDAxICAgICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gb3ZlcmZsb3dzLCBpbmNsdWRpbmcgc29tZSBleHAgb3ZlcnByZWNpc2UgYm9yZGVybGluZXMKLXByZWNpc2lvbjogICA3Ci1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotbG54NzA5ICBsbiA5Ljk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MyAgICAgSW5leGFjdCBSb3VuZGVkCi1sbng3MTEgIGxuIDkuOTk5OTkyRSszODQgLT4gIDg4Ni40OTUzICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogICAxNgotbG54NzIyICBsbiA5Ljk5OTk5OTk5OTk5OTk5OUUrMzg0IC0+ICA4ODYuNDk1MjYwODAyNzA3NiAgICAgSW5leGFjdCBSb3VuZGVkCi1sbng3MjQgIGxuIDkuOTk5OTk5OTk5OTk5OTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc2ICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDcyNiAgbG4gOS45OTk5OTk5OTk5OTkxMTdFKzM4NCAtPiAgODg2LjQ5NTI2MDgwMjcwNzUgICAgIEluZXhhY3QgUm91bmRlZAotLS0gYW5kIG1vcmUuLi4KLXByZWNpc2lvbjogICAxNQotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLWxueDczMSAgbG4gOS45OTk5OTk5OTk5OTk5OUUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDUgICAgICAgSW5leGFjdCBSb3VuZGVkCi0tLSBuZXh0IG1heSBiZSBhID4gMC41dWxwIGNhc2U7IGEgbW9yZSBwcmVjaXNlIGFuc3dlciBpczoKLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIzMDIuNTg1MDkyOTk0MDQ0OTUwMDE3OTkxNDU0NDIKLWxueDczMiAgbG4gOS45OTk5OTk5OTk5OTI2NkUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkCi1sbng3MzMgIGxuIDkuOTk5OTk5OTk5OTkyNjVFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZAotbG54NzM0ICBsbiA5Ljk5OTk5OTk5OTk5MjY0RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93cyBmb3IgZXhwLCBpbmNsdWRpbmcgdW5kZXJmbG93LXRvLXplcm8gZWRnZSBwb2ludAotcHJlY2lzaW9uOiAgIDcKLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1sbng3NTEgIGxuIDBFLTM4OSAtPiAtSW5maW5pdHkKLWxueDc1OCAgbG4gMS4wMDAwMDFFLTM4MyAtPiAtODgxLjg5MDEgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc1OSAgbG4gOS45OTk5MUUtMzg0IC0+IC04ODEuODkwMSAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2MCAgbG4gNC40NjA1RS0zODUgLT4gLTg4NS4wMDAwICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2MSAgbG4gMi4yMjFFLTM4NiAtPiAtODg3Ljk5OTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2MiAgbG4gMy4wMUUtMzg3IC0+IC04ODkuOTk4NSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2MyAgbG4gMS43RS0zODggLT4gLTg5Mi44NzI0ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2NCAgbG4gMS41RS0zODggLT4gLTg5Mi45OTc2ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2NSAgbG4gOUUtMzg5IC0+IC04OTMuNTA4NCAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc2NiAgbG4gMUUtMzg5IC0+IC04OTUuNzA1NiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxueDc3NCAgbG4gMEUtMzg5IC0+IC1JbmZpbml0eQotCi0tLSBzcGVjaWFsIHZhbHVlcwotbG54ODIwICBsbiBJbmZpbml0eSAtPiAgIEluZmluaXR5Ci1sbng4MjEgIGxuIDAgICAgICAgIC0+ICAtSW5maW5pdHkKLWxueDgyMiAgbG4gTmFOICAgICAgLT4gICBOYU4KLWxueDgyMyAgbG4gc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1sbng4MjQgIGxuIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgotbG54ODI1ICBsbiAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KLWxueDgyNiAgbG4gTmFONDU2ICAgLT4gICBOYU40NTYKLWxueDgyNyAgbG4gLU5hTjY1NCAgLT4gIC1OYU42NTQKLWxueDgyOCAgbG4gTmFOMSAgICAgLT4gICBOYU4xCi0KLS0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zCi0tLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQotcHJlY2lzaW9uOiAxMDAwMDAwMDAKLWxueDkwMSAgbG4gMSAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0Ci1wcmVjaXNpb246ICA5OTk5OTk5OQotbG54OTAyICBsbiAwIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQKLQotcHJlY2lzaW9uOiA5Ci1tYXhFeHBvbmVudDogICAxMDAwMDAwCi1taW5FeHBvbmVudDogICAtOTk5OTk5Ci1sbng5MDMgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dAotbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQotbWluRXhwb25lbnQ6ICAgLTk5OTk5OQotbG54OTA0ICBsbiAwIC0+ICAtSW5maW5pdHkKLW1heEV4cG9uZW50OiAgICA5OTk5OTkKLW1pbkV4cG9uZW50OiAgLTEwMDAwMDAKLWxueDkwNSAgbG4gMSAgIC0+ICBOYU4gICAgICAgICAgSW52YWxpZF9jb250ZXh0Ci1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogICAtOTk5OTk4Ci1sbng5MDYgIGxuIDAgLT4gIC1JbmZpbml0eQotCi0tLSBwYXlsb2FkIGRlY2FwaXRhdGUKLXByZWNpc2lvbjogNQotbG54OTEwICBsbiAtc05hTjEyMzQ1Njc4OTAgLT4gLU5hTjY3ODkwICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOdWxsIHRlc3QKLWxueDkwMCAgbG4gIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGxuLmRlY1Rlc3QgLS0gZGVjaW1hbCBuYXR1cmFsIGxvZ2FyaXRobSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24pDQorcHJlY2lzaW9uOiA5DQorbG54czAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG54czAwMiBsbiAgMS4wMDAgICAgICAgICAgICAgLT4gICAwDQorbG54czAwMyBsbiAgMi43MTgyODE4MyAgICAgICAgLT4gICAxLjAwMDAwMDAwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54czAwNCBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54czAwNSBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQorDQorDQorLS0gYmFzaWNzDQorcHJlY2lzaW9uOiAgIDE2DQorbG54MDAwMSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG54MDAwMiBsbiAgMUUtOSAgICAgICAgICAgICAgLT4gLTIwLjcyMzI2NTgzNjk0NjQxICAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAwMyBsbiAgMC4wMDA3ICAgICAgICAgICAgLT4gIC03LjI2NDQzMDIyMjkyMDg2OSAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAwNCBsbiAgMC4xICAgICAgICAgICAgICAgLT4gIC0yLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAwNSBsbiAgMC43ICAgICAgICAgICAgICAgLT4gIC0wLjM1NjY3NDk0MzkzODczMjQgSW5leGFjdCBSb3VuZGVkDQorbG54MDAwNiBsbiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQorbG54MDAwNyBsbiAgMS4wMDAgICAgICAgICAgICAgLT4gICAwDQorbG54MDAwOCBsbiAgMS41ICAgICAgICAgICAgICAgLT4gICAwLjQwNTQ2NTEwODEwODE2NDQgSW5leGFjdCBSb3VuZGVkDQorbG54MDAwOSBsbiAgMiAgICAgICAgICAgICAgICAgLT4gICAwLjY5MzE0NzE4MDU1OTk0NTMgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxMCBsbiAgMi43MTgyODE4Mjg0NTkwNDUgLT4gICAwLjk5OTk5OTk5OTk5OTk5OTkgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxMSBsbiAgMi43MTgyODE4Mjg0NTkwNDYgLT4gICAxLjAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxMiBsbiAgMi43MTgyODE4Mjg0NTkwNDcgLT4gICAxLjAwMDAwMDAwMDAwMDAwMSAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxMyBsbiAgMTAgICAgICAgICAgICAgICAgLT4gICAyLjMwMjU4NTA5Mjk5NDA0NiAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxNCBsbiAgMTAuNSAgICAgICAgICAgICAgLT4gICAyLjM1MTM3NTI1NzE2MzQ3OCAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxNSBsbiAgOTk5OSAgICAgICAgICAgICAgLT4gICA5LjIxMDI0MDM2Njk3NTg0OSAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxNiBsbiAgMUU2ICAgICAgICAgICAgICAgLT4gIDEzLjgxNTUxMDU1Nzk2NDI3ICAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxNyBsbiAgMUUrOSAgICAgICAgICAgICAgLT4gIDIwLjcyMzI2NTgzNjk0NjQxICAgSW5leGFjdCBSb3VuZGVkDQorbG54MDAxOCBsbiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQorDQorLS0gbm90YWJsZSBjYXNlcw0KKy0tIG5lZ2F0aXZlcw0KK2xueDAwMjEgbG4gLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjIgbG4gLTAuMDAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjMgbG4gLTAuMSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjQgbG4gLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjUgbG4gLTEgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjYgbG4gLTEuNSAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjcgbG4gLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjkgbG4gLTEwLjUgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMjggbG4gLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMzAgbG4gLTIuNzE4MjgxODI4NDU5MDQ1IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMzEgbG4gLTIuNzE4MjgxODI4NDU5MDQ2IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwMzIgbG4gLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2xueDAwMzMgbG4gLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2xueDAwMzQgbG4gLTBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KKy0tIG90aGVyIHplcm9zDQorbG54MDA0MSBsbiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG54MDA0MiBsbiAgMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG54MDA0MyBsbiAgMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorLS0gaW5maW5pdGllcw0KK2xueDAwNDUgbG4gLUluZmluaXR5ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xueDAwNDYgbG4gK0luZmluaXR5ICAgICAgICAgIC0+IEluZmluaXR5DQorLS0gb25lcw0KK2xueDAwNTAgbG4gIDEgICAgICAgICAgICAgICAgIC0+ICAgMA0KK2xueDAwNTEgbG4gIDEuMCAgICAgICAgICAgICAgIC0+ICAgMA0KK2xueDAwNTIgbG4gIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KK2xueDAwNTMgbG4gIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KKw0KKy0tIGxvd2VyIHByZWNpc2lvbiBiYXNpY3MNCitQcmVjaXNpb246IDcNCitsbngwMTAxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitsbngwMTAyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTAzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMjY0NDMwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTA0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMzAyNTg1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTA1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzU2Njc0OSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTA2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDANCitsbngwMTA3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDA1NDY1MSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTA4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkzMTQ3MiAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTA5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTEwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTExIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMDAwMDAwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTEyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMzAyNTg1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTEzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuMzUxMzc1ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTE0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMjEwMjQwICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTE1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTMuODE1NTEgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTE2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjAuNzIzMjcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTE3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCitQcmVjaXNpb246IDINCitsbngwMTIxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitsbngwMTIyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTIzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTI0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTI1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuMzYgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTI2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDANCitsbngwMTI3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNDEgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTI4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNjkgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTI5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTMwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTMxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEuMCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTMyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIuMyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTMzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTM0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkuMiAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTM1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMTQgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTM2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMjEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTM3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCitQcmVjaXNpb246IDENCitsbngwMTQxIGxuICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitsbngwMTQyIGxuICAxRS05ICAgICAgICAgICAgICAtPiAtMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQzIGxuICAwLjAwMDcgICAgICAgICAgICAtPiAgLTcgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQ0IGxuICAwLjEgICAgICAgICAgICAgICAtPiAgLTIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQ1IGxuICAwLjcgICAgICAgICAgICAgICAtPiAgLTAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQ2IGxuICAxICAgICAgICAgICAgICAgICAtPiAgIDANCitsbngwMTQ3IGxuICAxLjUgICAgICAgICAgICAgICAtPiAgIDAuNCAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQ4IGxuICAyICAgICAgICAgICAgICAgICAtPiAgIDAuNyAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTQ5IGxuICAyLjcxODI4MTgyODQ1OTA0NSAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTUwIGxuICAyLjcxODI4MTgyODQ1OTA0NiAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTUxIGxuICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgIDEgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTUyIGxuICAxMCAgICAgICAgICAgICAgICAtPiAgIDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTUzIGxuICAxMC41ICAgICAgICAgICAgICAtPiAgIDIgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTU0IGxuICA5OTk5ICAgICAgICAgICAgICAtPiAgIDkgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTU1IGxuICAxRTYgICAgICAgICAgICAgICAtPiAgMUUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTU2IGxuICAxRSs5ICAgICAgICAgICAgICAtPiAgMkUrMSAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTU3IGxuICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCisNCistLSBncm91cCBsb3ctcHJlY2lzaW9uIGxuKDEpczoNCitwcmVjaXNpb246IDENCitsbngwMTYxIGxuICAxIC0+IDANCitwcmVjaXNpb246IDINCitsbngwMTYyIGxuICAxIC0+IDANCitwcmVjaXNpb246IDMNCitsbngwMTYzIGxuICAxIC0+IDANCitwcmVjaXNpb246IDQNCitsbngwMTY0IGxuICAxIC0+IDANCitwcmVjaXNpb246IDUNCitsbngwMTY1IGxuICAxIC0+IDANCitwcmVjaXNpb246IDYNCitsbngwMTY2IGxuICAxIC0+IDANCitwcmVjaXNpb246IDcNCitsbngwMTY3IGxuICAxIC0+IDANCitwcmVjaXNpb246IDgNCitsbngwMTY4IGxuICAxIC0+IDANCisNCistLSBlZGdlLXRlc3QgbG4oMikgYW5kIGxuKDEwKSBpbiBjYXNlIG9mIGxvb2thc2lkZXMNCitwcmVjaXNpb246IDQ1DQorbG54MjAxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMDEzNCAgSW5leGFjdCBSb3VuZGVkDQorbG54MjAyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTQ5ICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0NA0KK2xueDIwMyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MDAxMyAgIEluZXhhY3QgUm91bmRlZA0KK2xueDIwNCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExMDE1ICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNDMNCitsbngyMDUgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NTAwMSAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngyMDYgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDQyDQorbG54MjA3ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NTUwMCAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MjA4ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0MQ0KK2xueDIwOSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwNzU1MCAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDIxMCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2MDExICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNDANCitsbngyMTEgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MDc1NSAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngyMTIgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDM5DQorbG54MjEzICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2ODA3NiAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MjE0ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzOA0KK2xueDIxNSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NjgwOCAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDIxNiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyMDc2ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzcNCitsbngyMTcgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NTY4MSAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngyMTggIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA4ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDM2DQorbG54MjE5ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NjU2OCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MjIwICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIxICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzNQ0KK2xueDIyMSAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxNzY1NyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDIyMiAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQzNjQyICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzQNCitsbngyMjMgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MTc2NiAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngyMjQgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDMzDQorbG54MjI1ICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1ODE3NyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MjI2ICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMg0KK2xueDIyNyAgbG4gIDIgLT4gMC42OTMxNDcxODA1NTk5NDUzMDk0MTcyMzIxMjE0NTgxOCAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDIyOCAgbG4gMTAgLT4gMi4zMDI1ODUwOTI5OTQwNDU2ODQwMTc5OTE0NTQ2ODQ0ICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzENCitsbngyMjkgIGxuICAyIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MzA5NDE3MjMyMTIxNDU4MiAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngyMzAgIGxuIDEwIC0+IDIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0ICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDMwDQorbG54MjMxICBsbiAgMiAtPiAwLjY5MzE0NzE4MDU1OTk0NTMwOTQxNzIzMjEyMTQ1OCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MjMyICBsbiAxMCAtPiAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4ICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gZXh0cmVtZSBpbnB1dCByYW5nZSB2YWx1ZXMNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitQcmVjaXNpb246IDE2DQorDQorbG54MDkwMSBsbiAxZS00MDAgICAgLT4gLTkyMS4wMzQwMzcxOTc2MTgzICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTAyIGxuIDFlKzQwMCAgICAtPiAgOTIxLjAzNDAzNzE5NzYxODMgIEluZXhhY3QgUm91bmRlZA0KK2xueDA5MDMgbG4gMWUtOTk5OTk5IC0+IC0yMzAyNTgyLjc5MDQwODk1MyAgSW5leGFjdCBSb3VuZGVkDQorbG54MDkwNCBsbiAxZSs5OTk5OTkgLT4gIDIzMDI1ODIuNzkwNDA4OTUzICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTA1IGxuIDFlLTEwMDAwMTMgICAgICAgICAgICAgICAgLT4gLTIzMDI2MTUuMDI2NjAwMjU1ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTA2IGxuIDJlLTEwMDAwMTMgICAgICAgICAgICAgICAgLT4gLTIzMDI2MTQuMzMzNDUzMDc0ICBJbmV4YWN0IFJvdW5kZWQNCisNCitsbngwOTEwIGxuIDkuOTk5OTk5ZSs5OTk5OTkgICAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTkzOTQ2ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTExIGxuIDkuOTk5OTk5OWUrOTk5OTk5ICAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDM2ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTEyIGxuIDkuOTk5OTk5OTllKzk5OTk5OSAgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ1ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTEzIGxuIDkuOTk5OTk5OTk5ZSs5OTk5OTkgICAgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTE0IGxuIDkuOTk5OTk5OTk5OTk5ZSs5OTk5OTkgICAgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTE1IGxuIDkuOTk5OTk5OTk5OTk5OTk5ZSs5OTk5OTkgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCitsbngwOTE2IGxuIDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ZSs5OTk5OTkgLT4gIDIzMDI1ODUuMDkyOTk0MDQ2ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSByYW5kb21zDQorLS0gUD01MCwgd2l0aGluIDAtOTk5DQorUHJlY2lzaW9uOiA1MA0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2xueDE1MDEgbG4gMC4wMDA5ODgwMDkwNjU3NDQ4NjM4ODYwNDYwODQ3Nzg2OTgxMjUxODg1NzAyMzc2ODk1MSAtPiAtNi45MTk4MTg2ODQ0MDMzNzg3OTk1OTQ1MTQ3ODM2OTU1NTg2MDA5NTQ4NTEzMDQzNjg5IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MDIgbG4gMTU4LjE1ODY2NjI0NjY0NjIzMDcwMTg0NTk1MDQ1MzA0MTQ1OTQ5OTAwNzE0OTg3ODI3ICAtPiA1LjA2MzU5ODc0NTg4OTU2NDc0NTQ5MDc4MDY1MDc1MDM4MjU2MDI3NTgzOTIyODc2ODQgSW5leGFjdCBSb3VuZGVkDQorbG54MTUwMyBsbiAwLjAwNTY1NjYxNDEyMDU5NTcxOTI1MDQwMjg1ODE0MDIxNzk5Nzc1MjQ5Mjg4MzA5MzIxIC0+IC01LjE3NDkyOTc3NzY3NjA2MzIxMDIwNDc1NDAzMDA0OTE1NTA5MzE2NTEzMTg5NzUyMzcgSW5leGFjdCBSb3VuZGVkDQorbG54MTUwNCBsbiAwLjAwMDAwMDA2OTE0MjMyNTMyNjIwNDg5NjAyMDA4NDAyMDkxNjY2NTQ3OTAzMTgwNjA3IC0+IC0xNi40ODcwOTg3NzA4Nzc4MjUzMDgxMzg5NzY4MTg2ODg3NzE2MzgxNzIzMzMwMzQzNDcgSW5leGFjdCBSb3VuZGVkDQorbG54MTUwNSBsbiAwLjAwMDI1MzgwMzc0NjIxMjk3NjU3NTA0NjYxNTQwNzQ5MzU1MjUxMjMxNzcwMDcwNzIzIC0+IC04LjI3ODk0OTI0MjMwMDUwMDMyMDUyNDIxNjI3NDE1NjkwMzMxMjQyNjAzMjE5NTQ1ODkgSW5leGFjdCBSb3VuZGVkDQorbG54MTUwNiBsbiA4My4wMzM2NTQwNjM4Nzc0MjYyNjExMDg1OTI1OTkxODI0MTg5NTM0NDI2Nzc1NTQ4MDYgIC0+IDQuNDE5MjQ1OTk2MjY0NzEzNzk3Njk0OTI0OTgxMDgxNTY5ODQ2NTAzMTYwOTg0MzY2OSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTA3IGxuIDAuMDAwMDAwMDA0MTY4NjMyMjgwOTI0ODE2NTE2Mjc3MzQ2Njg0NDA2NjM2NzgxMTg3MjkgLT4gLTE5LjI5NTY3Nzg0NTEyMjE0MTc3Mjc5MTI5NDU5OTcxNDk1MDE3NTI4NDkxNTY2NjQzMCBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTA4IGxuIDAuMDAwMDAxNDA4NDc4NzMxODc4MjA1NzAxODEyMTQyNzE5NjA1MTEwODA1MjM0NTc2NjkgLT4gLTEzLjQ3MzAwMDM0OTU4MTk2NzE4OTY2ODMwNTMxNDM4NDk1MjI1MTU1NjgwOTQ4MDMzOSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTA5IGxuIDY2LjE3NjEwNjU1NTE4MTUyNzEwMTYzMDM1MTEyNzU4Mzk0NDY4OTc1MjA2OTEzMjUyMiAgLT4gNC4xOTIzMTk0Njk2MjMyNTA1ODgzNjY2MTcxMTE2OTY2MTM3Njk0MDEzNDMxNTA0MjUyIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MTAgbG4gMC4wMDAwMDAwMDAwMDAwOTg5OTA0MzQ4NzQwMzU5MDkwMDExMTYwMjAyNDU2MjI5NzkwOCAtPiAtMjkuOTQzNzUzMTY2ODc3ODQwOTg1ODIxNTA4MTEyOTE3OTkxNTA2NjU2NTQ1MTc0MTYzIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MTEgbG4gMC4wMDAwMDAwMDAwMDMyNDYxODI5NjcyMTc0NzA5NzUxMDQ1MzM4ODY4MzkxMjczMzU2OSAtPiAtMjYuNDUzNTQxMjgxNDQ0NTg2ODE5MDA5NTQ2NDE4NTc3NTA3MTYzMzYyNTkwMTM5NDIyIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MTIgbG4gNzIuNjQ2OTY4ODE4NDYzNTQ2NDQ5NDk5MTQ3NTc5MDIzNTU1MDA4MzkyODYwNDIzMzg1ICAtPiA0LjI4NTYxMTY2NjA2ODk2NDY4ODI4NTIxMjg4NTM0MjM1NjYyNzY3MTgyMzA0MjY0NzkgSW5leGFjdCBSb3VuZGVkDQorbG54MTUxMyBsbiAwLjAwMDAwMDAwMDAwMDAwMDY2NzU1NDgzMTI0NjM1NjEyNTc0MjYzMTUzODI1OTkwNTIzIC0+IC0zNC45NDI5MTAxNDI4MDI3NjkzMTkyNjI4NzUwODAzOTg4NTI0OTE1ODg3MDcxNzI0ODMgSW5leGFjdCBSb3VuZGVkDQorbG54MTUxNCBsbiA2MS4wMDI5MTA0NDcyMDIzOTgyMDQxMTQ5MDk0NTE4NTExMTE0MjQ2NTc2NzE5MTEwMDIgIC0+IDQuMTEwOTIxNTc1Mjg0MzM3NzMyMzM2MzE4MjA1MTQ0NjE3NzA2NjQzNDAzODA5NjUyOSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTE1IGxuIDkxNy4wNjkxNzYxMTMzMTk4MDk5OTIyNzg5MzU4NDAxMDU0NDU0MjMxMjIzOTE3NDc3NCAgLT4gNi44MjExODI5MDY4MzAzMTE0MTI4NzUyNDUzNjYxOTQ2NDQ2OTc5Nzg3ODI2MjgyOTA3IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MTYgbG4gMC4wMDAwMDAwMDE3MDgyMzc5NDg4MzY3MzA4MzM1ODU0OTc0OTA3ODk3MjAwMzk2NTE5NCAtPiAtMjAuMTg3ODAzNDM2OTc2MTUwNDc3Mjk3MjQ2NjY2NzcxNjI2ODI3MDU3MTkxMDIzMDA0IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MTcgbG4gMC41MzczMTc2Nzg0NTM1ODIyNDQ0NTgwOTc2MTMxNTE1OTI0OTg5ODU2NjU0MjkxMDY0OSAtPiAtMC42MjExNjU3NzkzOTk2ODQwOTIxMTczNjQxMzYyODIzNjI4NTE2MDA0ODM1NzAwMDk2MSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTE4IGxuIDAuMDAwMDAwMDAwMDAwMDAwMDg5NjUyOTEzOTI4ODI4MDQxNjEyOTk3NTg3MDgwMzMzNzMgLT4gLTM2Ljk1MDU4NTk3MDk4MDg1NzM3NjA4MTI2NTA3MzI3NjMwMzY3MDgyMDA1NjkxNjIwNiBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTE5IGxuIDAuMDAwMDAwMDAwMDY5OTAyNDQ5MTYwMjY0Mjk5MDQ0OTgyNzg5ODI1MzAxNzAyOTU2NjggLT4gLTIzLjM4MzkyMDQyOTI0NDQ1NzU3ODM3MzUyMzUwODQyNzc4MzE0NDU4OTQ4MDQyMDc1MyBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTIwIGxuIDQuMDMxMjU0Mjk3NzA3MDMwMDA3MDUwNjA2NDY2NjUzNjQ3ODM3MzgwMTk4ODU0MDYxNCAgLT4gMS4zOTQwNzc1Njc2NTkyNDUxOTQ1Nzk1NzUyNzk2NDIxMzkxODcxMzAyMDI0NzYzMzA1IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MjEgbG4gMjcxLjg0OTkxMzExNTUxODc1NjAxNDMyNTE4ODE5NTYyMzkxNjk5MzI0NjMyMzk2NDIzICAtPiA1LjYwNTI1MDEyMzk4NzM4NjI1MTc5MTY2Nzk3NDcxNDY1Mzk4MDgwNzc0MzE4NzM0NzggSW5leGFjdCBSb3VuZGVkDQorbG54MTUyMiBsbiA3LjQxMTg2NzE2MjkzNzM4NjQ2NjcyMjk0NDU3NDY4NjIzMTQ0NDM4OTU0MDQ4MTg2ODkgIC0+IDIuMDAzMDgyMzg2MzcwNjM0NDYyODIzOTE0NzYzOTMxODI4OTk2MTkxNzA2MDEyMTE0MSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTIzIGxuIDAuMDAwMDAwMDAwMDAwMDIwMjYzMTE0NTI2MjUzNjQ5MDUzNTczMjE2NjQxODYwMzQyNTggLT4gLTMxLjUyOTk3NDE4MDA1NDQzODc5MjA0Mzg1Njg3NzMxNDA0Mzc5NDMyMDk1MTEzNDc1NCBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTI0IGxuIDAuMDAwMDAwMDAwMDAwMDk1NjMzOTg2NTEyNjE3NTY5NTIzOTgyNTA2MjQ3Mzc4MDkzNDcgLT4gLTI5Ljk3ODI0ODEzMDU3Njk3Mjk1MzE0MTI4NDEzNjk2MjY3MDAyMTM2ODgzNDc5MjU3OSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTI1IGxuIDAuMDAwMDAwMDAwMDk1NTY3NzI2Njk0MDk4NTg2NTMwMjY1NTgyMjM0NjUxOTc4MDg5OTEgLT4gLTIzLjA3MTE4NTkzOTc0ODI4NTU0MTIyODIwNjE2MTQ3Mjk1NjY2MTE5Njk1Njc0MTE4NiBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTI2IGxuIDYuODQ0MTY0ODI5ODAyNzMwMTI5MjM0MjA1NzI0ODczNzMyNjE1MjI1MDc5NDAyNjc2MSAgLT4gMS45MjMzOTY0Mzk1ODAxOTQ2NTk3MjcyNTg5NDczNDE3OTQ4MDI0MzYxMDA1MDgyOTA4IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MjcgbG4gMC4wMDAwMDAwMDAwMDA3MzA1OTY5OTg4NDQzOTk3OTM5NDk0NTgyMjAzNTcwNDI2NDU3NyAtPiAtMjcuOTQ0OTE0Mzg4MzUzNzI0NzE4ODM2MTAxODI4Njc3NzcxOTY3MTI4NTA5NjAzMTU4IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MjggbG4gMC4wMDAwMDAwMDAwMDAwMDAwMjYxMDA3ODI4MDQxOTA4MjI2MzEzODA2NDc0NTQxNjc4NyAtPiAtMzguMTg0NTY2MzY3NTE2MjA3ODg1NTczNzczMzIwMTM1OTY1Nzk4NzE3MTIwNzM1MTE1IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MjkgbG4gMC4wMDAwMDAwMDAwMDAwMDAwMDE1MDI1OTUxNzE2NjI5NDI0MzA4ODU0NjgwNjA4MzI4MyAtPiAtNDEuMDM5MzM3OTQ2MjY2Njc2MTA4NTM4MTcwODM3NTgwMDUxNjk5NjE4MzM0OTI4NDIxIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzAgbG4gMC4wMDAwMDAwMDAwMDAwMDA4NzkxOTE2MDU0MTcxNDU4MDcwNzE4MTk2OTcwODUwMjA5MSAtPiAtMzQuNjY3NTI4ODE4ODI3NjcxNTA3NTE0MzE5NzQ0MDQ3NDQwNjk2MTg3MzU4Njc2ODQ4IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzEgbG4gMC4wMDAwMDAwMDAwMDM5NTcyNjcyNTEyMDc4Nzc2MzI3MTg0OTU3NzcwODA2ODU4NDU5OCAtPiAtMjYuMjU1NDY3NDE2OTYxMzU3NzQxODE4NzM1Nzg3MjI2NjcxOTM4Njc4NDI0NzQ4NDMxIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzIgbG4gMC4wMDAwMDAwMDAwMjAxNDMzNDkwMTY2OTM2NjIxODAxODM3NzIxMzE1MDcxNTkzODM1NSAtPiAtMjQuNjI4MTQ2OTU1NjM1MzU5MDM1Mjg5MTIzMDI3MzE5OTY5MjAxNjkzNzM3MTU5MTA4IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzMgbG4gMC4wMDAwMDAwODA5NzkyNzEwMTEwMTA5MzExNzc1MzkzODc2NjI0MTQ0Mjg5NjAzMDYzNyAtPiAtMTYuMzI5MDcyNjI4NDY5NzE1MTc4NjM3MTc4MzY1NzEwMzczMzk4MjAzMTkwOTM3NDU0IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzQgbG4gMC4wMDAwMDAwMDAwMDAxNzExNTgzNDE2MjYzMjg2NDM5MjAzOTY2ODExNjI0Mzk4NDE3NiAtPiAtMjkuMzk2MTg3MjkyNDM0ODk4MjI1NDUzNjI2Nzk0NDU5Mjg1MTU3MjYzMTc3NTI4MDM0IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzUgbG4gMC4zOTE2ODMxNzU5Mzg2NjMzNDA4NzMwNTQ1OTkzMzcyMzg2NDI5NDg1NzA4NjEwNTAzNSAtPiAtMC45MzczMDE5OTA2Mjc1NzI0MDQ4NTgzNjYzNzMwNjc4NTAzNzM2ODc0NjczNzY5MzAyOSBJbmV4YWN0IFJvdW5kZWQNCitsbngxNTM2IGxuIDc5LjMzNTAzNjc5ODk3MTUxNTAyNjUxOTYzMDEwMzMyNTM2OTcyOTYzNzUxNDEyNzYxNyAgLT4gNC4zNzM2Nzk4NTcwMjg3ODI4ODIzNzcyMTQ5NzM1MTcwNDMxMDEwNjE2OTYxOTc2OTY1IEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzcgbG4gMC4wMDAwMDAwMDAwMDAwMDA1NjAwNDk1MjEyOTkyNjEzNzQxMzYwMjExNjU5MTQ5MzYyNSAtPiAtMzUuMTE4NTA2NDYzMTgxODcwMDIwNzMwNjg1ODg0MzMzMDAwMjQxMDM5MDI4MTI3MjEzIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzggbG4gMC4wMDAwMDAwNjAwNjAzNTkwNzg0Mzg5MDkxODgzMjQ4MTA5OTY2MDYzOTU1MzY2NjA3OCAtPiAtMTYuNjI3OTE1Nzk1NzQ3MTEyNTY2NTMyNzA1OTc0ODUzMTE0NDU0NDA1MDEwNDcyMDQzIEluZXhhY3QgUm91bmRlZA0KK2xueDE1MzkgbG4gMC4wMDAwMDAwMDA4NTI0MjAyNDkzNzQxNDkwNjM3MTMzMzgyNjU3NDYzMjQ1MDU4NzU5MCAtPiAtMjAuODgyOTQxNDYwMjY4MTAxMDgwMTg2NDgyMjMwNjU3Nzc0OTk3MjczNDk0MTA3MjIxIEluZXhhY3QgUm91bmRlZA0KK2xueDE1NDAgbG4gMC4wMDAwMDAwMDAwMDA0MzY3MTA5OTQ5OTI2MjM1MDMxNjE3MzI0NjU1MDc3MTk1MTU2MSAtPiAtMjguNDU5NTA0NzU3Mjg1NjM5MjIxNzc2MzA1OTY4NDY5MDU4ODU0NTU4NzI2NTkzOTQ1IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFA9MzQsIHdpdGhpbiAwLTk5OQ0KK1ByZWNpc2lvbjogMzQNCitsbngxMjAxIGxuIDAuMDA4NjczMjg4MDgxNTkyNzE4Mjk5NzU2NjgxMDMzNDM5NCAtPiAtNC43NDc1MDczMTE5MjA4NDQ3NTI0ODY5MzgxODc5NzM3MjEgSW5leGFjdCBSb3VuZGVkDQorbG54MTIwMiBsbiAwLjAwMDcxMDQxMDM2OTM0NjAyNjA2MDk3OTIyMjI1Njk4NTQgLT4gLTcuMjQ5NjY3NzY5OTAzNTAzMDIzMDA1NTQ5MjUwMzQ3Njk1IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMDMgbG4gNzg2LjgzOTg5NDUzODUxMDUxOTA2OTc1NDE0OTMzOTI3NDIgIC0+IDYuNjY4MDI0NzkwMDMxODM2MzQwNDcxODI0MTQ3MDEwNTQ2IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMDQgbG4gMC43NzIzMDczNjIwMjgyNjg3NjU2ODk1MTkwMTcxOTY3Mzk5IC0+IC0wLjI1ODM3MjY3MDg1MDY4NTA4Njg3ODY4MTYyMzgyMTczMjYgSW5leGFjdCBSb3VuZGVkDQorbG54MTIwNSBsbiAwLjAwNjEwNTc5NTE1MTcxOTc2MzEyODcxODM5Mzg0MTIyMDAgLT4gLTUuMDk4NTE2OTMzOTE4Nzk3MzQ3MDY0NDU0MTAzNzQyNjM1IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMDYgbG4gMC42MTgxMzc5NzA4MTg0MzkzNzMwMTAzOTE3NTYyNDk4NzQ1IC0+IC0wLjQ4MTA0MzU5MjY5MDMzNjUwODc0NjMzODc3NjAzNTAwMjEgSW5leGFjdCBSb3VuZGVkDQorbG54MTIwNyBsbiAwOS4xMzg4ODI2MTIyOTAzOTk4OTExMDc1MzM4OTA5Njc2MCAgLT4gMi4yMTI1MzgxMjU1MDc5NzU1NzQ1MDk1NjMwMjc2OTYwMjEgSW5leGFjdCBSb3VuZGVkDQorbG54MTIwOCBsbiA4MDIuMDEwNTQxNzA2MzE0MzY5NjQ5NzI5MjE1ODE0NzE3NCAgLT4gNi42ODcxMjE3NTIwNTIzNDE3MzcyMzQ4MzIyMDMzNTAyMTQgSW5leGFjdCBSb3VuZGVkDQorbG54MTIwOSBsbiA3NzguNzc0OTcxMDM4Nzc3MzcxMzUyMzAyODQ5NzMzMzA1OCAgLT4gNi42NTc3MjIxMzUxMjY5MzU0NzIwODY2MjUwMzE0MTMwMzEgSW5leGFjdCBSb3VuZGVkDQorbG54MTIxMCBsbiAwLjAwMjQ0NTcyOTU4OTUzNDY1MDI1MTM1Njc2NzkzOTA2MTYgLT4gLTYuMDEzNDExNzk5OTQwMjQ1MzQ1MzIxMzQ4MjkwMzk4NTE3IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMTEgbG4gMC4wMDAwNTExMjk2OTQ3ODcyODI4MzEwMzM4ODY0MjE3ODYwIC0+IC05Ljg4MTE0NTExODIzNzI4MTc5ODA4MTU3MzEzMTcxMTYzNiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjEyIGxuIDAuMDAwMDI0NjgwMzUwODYwMjU1NDkyNDkzODY4NTE1NTY1OCAtPiAtMTAuNjA5NTAzMTQyNjQ4MjU2NjE4MjUzNjA5NzE0MzAyMTggSW5leGFjdCBSb3VuZGVkDQorbG54MTIxMyBsbiA5LjAyNzg5ODE5OTI1MzUxMTY2ODI0Mjk3Nzc2NjYxNjA4MiAgLT4gMi4yMDAzMTk1ODI3Nzg4OTkwMjk3ODYwMTc4MzA1NTcyOTMgSW5leGFjdCBSb3VuZGVkDQorbG54MTIxNCBsbiAwLjA5OTE4MTIzOTY1NDI1MDU2MzE4NTA2OTI4MDA5MDQxODggLT4gLTIuMzEwODA2Mzk4OTY0NjcyMjU4ODIzMDQzMTgwNDAwMzg0IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMTUgbG4gMC4wMDAwMDAwMDAwMDcwMjM4ODEwMTQzMDI4ODExMjIzOTI0IC0+IC0yNS42ODE3MDUxOTk2MTYzNjY0NzE3NDcxNDUzODI5MDA3NSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjE2IGxuIDIuNjMwMTAxNjY1MzQyODI2NDk0NzMwMzk0NzI5MzEzMTY3ICAtPiAwLjk2NzAyMjUwMTQ2NjQzNjc0NjUxMjgyNDMwMzk3NDk1NTkgSW5leGFjdCBSb3VuZGVkDQorbG54MTIxNyBsbiAwLjAwNTY4Nzg5Mjg1OTQzNTk1ODc2OTE1MjYwNjMyNTQ2ODMgLT4gLTUuMTY5NDE1NDIyOTA0MDM3ODE5NzM2NjM3Mzk5NDQ1MDk2IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMTggbG4gNTY3LjM0MzYwNDcxMjEwNTc4NDM5MDgxMDY1NzMwOTU1OTAgIC0+IDYuMzQwOTY1MTI0OTY0MjU4NDg2NDYzNDQ0MzYwNzg3OTcwIEluZXhhY3QgUm91bmRlZA0KK2xueDEyMTkgbG4gMS4xOTkyOTEyNDgxMjQ2NTU5OTY2MTQ2MDU3NDU2NDk3MjUgIC0+IDAuMTgxNzMwNzU1NzQyNTkxMTgwNTc2NTA4Nzc1NTY3NTY1NyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjIwIGxuIDI1LjAyMDUwNDQ4NTgyMDMxMDk4Njk2MjY3NDc5MTM1NTU3ICAtPiAzLjIxOTY5NTY2ODEzNzY1OTEzOTU0NDE3ODkwNTQ1OTMxNyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjIxIGxuIDAuMDAwMDAwMDAwMDAwOTkzOTU5NzAyMzU1ODc1Njk2MTMwMCAtPiAtMjcuNjM3MDc5NzI5OTY1Mzc2MzY1MDQzOTY1NTgyNTkwNTggSW5leGFjdCBSb3VuZGVkDQorbG54MTIyMiBsbiAwLjAwMDAwMDc5ODg1NTE2NzAxNTk0Mjk3MTY1MDY0MzA0MDMgLT4gLTE0LjA0MDA4NjE3NTQyNTk3MjMwOTg4MTk4NjEyMzc2NDE1IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMjMgbG4gNC42ODE1MTU4MDAxNzYxMjkxODQ4NzM3NzA2MDU1ODk3OTUgIC0+IDEuNTQzNjIxOTQ2NDE1MzgzMzM4OTcyMTI0NDQ1NDQ1NzQ4IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMjQgbG4gMTUuOTUxMjY2NjkxNjExMDMwMTEyMDY2NTg3NDkzNDU3ODEgIC0+IDIuNzY5NTM4MjQyNDc5NDgzNTM5Mjc1OTg2Mzk1NDQzNTM5IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMjUgbG4gMC4wMzAxNjI2NzgzOTIyMjExMjEzNjc1NDU3Mjc5MDc2MDY2IC0+IC0zLjUwMTE0OTkzMzY3NzI4MzM0MTAyMzkzMjI4MTgyNjM0MSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjI2IGxuIDAwMC4wMDQwNTQ0MDY0ODgxODIxNzcwNTI4NDc1MTg1Njc0ICAtPiAtNS41MDc5NTA5Njc1NTcwMjE2NzE2NDcxNjU4ODk2MDgzMjQgSW5leGFjdCBSb3VuZGVkDQorbG54MTIyNyBsbiAyOS4wMTYxNzA5NTkzNTU5Mzc5MjA5NTkxMzc4NTEwMDM2MCAgLT4gMy4zNjc4NTMyOTM4NjI3NDU2NTE4ODg0NTAwMDQ0NzMyOTcgSW5leGFjdCBSb3VuZGVkDQorbG54MTIyOCBsbiA3OC4wMTgzNjE2NzM0NDczNjczMzAyNDgwNDI0MzE5NTMyMyAgLT4gNC4zNTY5NDQyMDUwNTU3Njg1NzU5ODc3ODEzNzUwMDM5OTIgSW5leGFjdCBSb3VuZGVkDQorbG54MTIyOSBsbiAwLjAwMDAwMDAwOTY1NDUzMTkzMTY5NjUzMjExNTg2MzQ4OTMgLT4gLTE4LjQ1NTgzODQwMTYwOTY1ODE0NDYyMDk1NDc3MzY1MDEzIEluZXhhY3QgUm91bmRlZA0KK2xueDEyMzAgbG4gOTcuOTU0NzUyMzc3MjA1Nzk3NTI3NzA1ODcxODUwNzQ0MjggIC0+IDQuNTg0NTA1NjYxNjEyODEyNzQyMjA4NjE5MzU4MjE0NzI5IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMzEgbG4gNTI4LjA2MDkyNjIwNTA0MjMyNDY0MDI1NjQyMjg0MzIzNzEgIC0+IDYuMjY5MjExNjY3NTg5MTM4MTEzMzk2NTgzODk0MzE1OTU2IEluZXhhY3QgUm91bmRlZA0KK2xueDEyMzIgbG4gMC4wMDAwMDAyMjUwMDY0MzQ5NzMyOTY5Njk2NjYwNDUyOTcyIC0+IC0xNS4zMDcxMzY4MzUyNjk2Mzk5NjcxMjE2NzcwMTczODcyNCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjMzIGxuIDQ3Ljk3MDYzNjM3NzY3OTk4NjU4NTY3MTk5MDQ5NzI1NzU0ICAtPiAzLjg3MDU4OTA4MTU4NTY2MDY5MjE5NTk4OTg1NDg0MjM3MiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjM0IGxuIDAuMDAwNTM5NDMxMTM0NDU0MTQzMjMxODg1MzUxMzQxNDM2MSAtPiAtNy41MjQ5OTU0MjgzOTM5MjU5MzQwODcxMjY3MDI5NzQxMjEgSW5leGFjdCBSb3VuZGVkDQorbG54MTIzNSBsbiAwLjAwMDAwMDAwOTA5NzMzODU2NDk1Njc0NzE2NzQ5NzI2MzMgLT4gLTE4LjUxNTI4MzkzMTU4OTMxNzgzNDQ3MDM1MDA0MTI1NzkxIEluZXhhY3QgUm91bmRlZA0KK2xueDEyMzYgbG4gMC4wMDAwMDAwMDAwMjM4Nzc2NDkwMjI3NTc2MTk3MzE3OTc3IC0+IC0yNC40NTgwNzgyODE4ODM4OTU2MTMzMTE1ODg3OTIwNzI2MiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMjM3IGxuIDAuMDAwMDIzNjU4NzAwMDIzMTkyMTUzMjE0NTMyNjIxODc1OCAtPiAtMTAuNjUxNzc5NjQ0OTk4MjMzMTQ5NTI0MjkyNzc5NzkwMzQgSW5leGFjdCBSb3VuZGVkDQorbG54MTIzOCBsbiA0OTkuMTI3NzQ0ODg0NjEzMDcwOTgyNzE1NDU1NjEyNTk0MiAgLT4gNi4yMTI4NjIwNjQ3NjE0Mjc5Njc0NjExODgwODM1MTQ3NzQgSW5leGFjdCBSb3VuZGVkDQorbG54MTIzOSBsbiAwLjAwMDAwMDM5NjAxOTIzMDAyODQ3ODc2NjM3MTI0MTc2NDcgLT4gLTE0Ljc0MTgwMzA2NjE5Mjk4NTQ4MDkzNjk3NjA4MjkzMjg0IEluZXhhY3QgUm91bmRlZA0KK2xueDEyNDAgbG4gNDEuMDgyNjgzNTA4Mjk0Nzc0NTE2NjcyMjg4OTI0OTUxMzYgIC0+IDMuNzE1NTg2NzA2ODg3Mjc4MDM5MTczNTg0ODU5MjE4OTYwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFA9MTYsIHdpdGhpbiAwLTk5DQorUHJlY2lzaW9uOiAxNg0KK2xueDExMDEgbG4gNy45NjQ4NzUyNjEwMzM5NDggIC0+IDIuMDc1MDQxMjgyMzUyMjQxIEluZXhhY3QgUm91bmRlZA0KK2xueDExMDIgbG4gMTMuNTQ1MjczOTY4NDUzOTQgIC0+IDIuNjA2MDM3NzAxODcwMjYzIEluZXhhY3QgUm91bmRlZA0KK2xueDExMDMgbG4gMC4wMDA4MDI2NTU0MzQxMzMxIC0+IC03LjEyNzU4NTAzNDMyMTgxNCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTA0IGxuIDAuMDAwMDAzMDU4MjIzMzI2MSAtPiAtMTIuNjk3Njc2NDIzMDA2MjUgSW5leGFjdCBSb3VuZGVkDQorbG54MTEwNSBsbiAwLjAwMDQ0Nzc0OTc1MDk2NzIgLT4gLTcuNzExMjc2MDczMjEwNzY2IEluZXhhY3QgUm91bmRlZA0KK2xueDExMDYgbG4gNy42MTYyNjg2MjI0NzQzNzEgIC0+IDIuMDMwMjg2NTY3Njc1MTQ4IEluZXhhY3QgUm91bmRlZA0KK2xueDExMDcgbG4gNTEuNTgzMjk5MjU4MDYzODEgIC0+IDMuOTQzMTk3OTYyMzA5NTY5IEluZXhhY3QgUm91bmRlZA0KK2xueDExMDggbG4gMC4wMDE4MTk3NDk3OTUxMjYzIC0+IC02LjMwOTA1NjI2MjU0OTM0NSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTA5IGxuIDIuOTU2MjgyNDU3MDcyOTg0ICAtPiAxLjA4MzkzMjU1MjMzNDU3NSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTEwIGxuIDAuMzg0MzMyNTU3OTE4OTkwNiAtPiAtMC45NTYyNDcwNjQ5NDAwNTU4IEluZXhhY3QgUm91bmRlZA0KK2xueDExMTEgbG4gMC4wMDc0NDY2MzI5MjY1NjYzIC0+IC00Ljg5OTk5MzMwNDkxOTIzNyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTEyIGxuIDAuMDAwMzM3MjQ3ODUzMjk5MyAtPiAtNy45OTQ2OTI0MjgyMDYzNzggSW5leGFjdCBSb3VuZGVkDQorbG54MTExMyBsbiAwLjAwODQ3OTIyNjMxNjc4MDkgLT4gLTQuNzcwMTM2MDY5NTY5MjcxIEluZXhhY3QgUm91bmRlZA0KK2xueDExMTQgbG4gNS45MjY3NTY5OTgxNTExMDIgIC0+IDEuNzc5NDc3MTgyODM0MzA1IEluZXhhY3QgUm91bmRlZA0KK2xueDExMTUgbG4gOS4wMjU2OTkxNTIxODA4OTcgIC0+IDIuMjAwMDc1OTY5NjA0MTE5IEluZXhhY3QgUm91bmRlZA0KK2xueDExMTYgbG4gMS45MTAxMjQ2NDM1MzM1MjYgIC0+IDAuNjQ3MTY4NDk4MzIzODE4MyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTE3IGxuIDAuODE1ODkyMjcxMTQxMTAyMCAtPiAtMC4yMDM0NzI5NTMzOTM5Mzg3IEluZXhhY3QgUm91bmRlZA0KK2xueDExMTggbG4gMC4wMDY3MDgwMDE2NDc1MzIyIC0+IC01LjAwNDQ1NDE4OTQxNDEzOSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTE5IGxuIDAuMDA0NzU4MzI0MjA5MjcxNiAtPiAtNS4zNDc4NTk3Mjk2MDEwOTQgSW5leGFjdCBSb3VuZGVkDQorbG54MTEyMCBsbiAwLjAzODY2NDc0MTE2NDEzMzkgLT4gLTMuMjUyODI3MTc1MjYzMTEzIEluZXhhY3QgUm91bmRlZA0KK2xueDExMjEgbG4gMC4wMDUwMjI2NDI3ODQxNzYxIC0+IC01LjI5Mzc5OTAzMjc3NDEzMSBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTIyIGxuIDYuOTI3OTM3NTQxNjM3MjYxICAtPiAxLjkzNTU2MjE1NTg2NjkwNiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTIzIGxuIDAuMDAwMDA5NTc0NTM0MzUxMyAtPiAtMTEuNTU2NDAzNjU1Nzk4MTQgSW5leGFjdCBSb3VuZGVkDQorbG54MTEyNCBsbiAxLjYwMjQ2NTQ5Mjk1NjUzOCAgLT4gMC40NzE1NDMzNzYzMjQzOTM2IEluZXhhY3QgUm91bmRlZA0KK2xueDExMjUgbG4gMzguOTg0MTU2MjUwODc1MzUgIC0+IDMuNjYzMTU1MzEzNjEwMjEzIEluZXhhY3QgUm91bmRlZA0KK2xueDExMjYgbG4gNS4zNDMxODIwNDIyNzY3MzQgIC0+IDEuNjc1ODIxMzYzNTY4MTEyIEluZXhhY3QgUm91bmRlZA0KK2xueDExMjcgbG4gNTUuODk3NjM3MDMyNDU4MTYgIC0+IDQuMDIzNTIyMTA3OTM0MTEwIEluZXhhY3QgUm91bmRlZA0KK2xueDExMjggbG4gMC43NDQ1MjU3ODEwMjgwODQ3IC0+IC0wLjI5NTAwNzc5ODgxMDEwMzAgSW5leGFjdCBSb3VuZGVkDQorbG54MTEyOSBsbiAxLjYzMTQwNzMxNDk0NjA5NCAgLT4gMC40ODk0NDMwMjU3MjAxMjQ4IEluZXhhY3QgUm91bmRlZA0KK2xueDExMzAgbG4gMC4wMDA1NDYyNDUxOTMyNjAyIC0+IC03LjUxMjQ0MjYxMTExNjg1MiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTMxIGxuIDAuMDAwMDg2NDE3MzI2OTM2MiAtPiAtOS4zNTYzMjIzNTkwMTczMTcgSW5leGFjdCBSb3VuZGVkDQorbG54MTEzMiBsbiA1LjIyNzE2MTcxOTEzMjg0OSAgLT4gMS42NTM4Njg0Mzg0Mzk2MzcgSW5leGFjdCBSb3VuZGVkDQorbG54MTEzMyBsbiA2MC41NzA3ODQ2Njk0MTk5OCAgLT4gNC4xMDM4MTI2NzU2NjI0NTIgSW5leGFjdCBSb3VuZGVkDQorbG54MTEzNCBsbiAwLjA5OTI4NjQzMjUzMzMxNjAgLT4gLTIuMzA5NzQ2MzQ4MzUwMzE4IEluZXhhY3QgUm91bmRlZA0KK2xueDExMzUgbG4gMDkuNDg1NjQyNjg0NDczMjUgIC0+IDIuMjQ5Nzc5MzU5MDc0OTgzIEluZXhhY3QgUm91bmRlZA0KK2xueDExMzYgbG4gMC4wMDM2MTA2MDg5MzU1NjM0IC0+IC01LjYyMzg3ODg0MDY1MDc4NyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMTM3IGxuIDEuODA1MTc2ODY1NTg3MTcyICAtPiAwLjU5MDY1ODU3MzQ1OTM3MDcgSW5leGFjdCBSb3VuZGVkDQorbG54MTEzOCBsbiA2Mi41OTM2MzI1OTY0MjI1NSAgLT4gNC4xMzY2NjM1NTcyMjA1NTkgSW5leGFjdCBSb3VuZGVkDQorbG54MTEzOSBsbiA0LjM3MzgyODI2MTEzNzIwMSAgLT4gMS40NzU2Mzg2NTc5MTIwMDAgSW5leGFjdCBSb3VuZGVkDQorbG54MTE0MCBsbiAwLjk5NDQ4MzUyNDE0ODczOCAgLT4gLTAuMDA1NTMxNzQ3Nzk0OTM4NjkwIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFA9Nywgd2l0aGluIDAtOQ0KK1ByZWNpc2lvbjogNw0KK2xueDEwMDEgbG4gMC4wOTEyMDI1IC0+IC0yLjM5NDY3MyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDAyIGxuIDAuOTcyODYyNiAtPiAtMC4wMjc1MTI0MiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDAzIGxuIDAuMzg4NjAzMiAtPiAtMC45NDUxOTY1IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMDQgbG4gOC43OTg2MzkgIC0+IDIuMTc0NTk3IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMDUgbG4gMi40NTkxMjEgIC0+IDAuODk5ODA0MCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDA2IGxuIDIuMDEzMTkzICAtPiAwLjY5OTcyMjAgSW5leGFjdCBSb3VuZGVkDQorbG54MTAwNyBsbiA5LjA2NDg1NyAgLT4gMi4yMDQ0MDUgSW5leGFjdCBSb3VuZGVkDQorbG54MTAwOCBsbiA1Ljc5NjQxNyAgLT4gMS43NTcyNDAgSW5leGFjdCBSb3VuZGVkDQorbG54MTAwOSBsbiAwLjExNDM0NzEgLT4gLTIuMTY4NTE3IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTAgbG4gMC41MzQxNTQyIC0+IC0wLjYyNzA3MDcgSW5leGFjdCBSb3VuZGVkDQorbG54MTAxMSBsbiA2LjY5Mzc4MSAgLT4gMS45MDExNzkgSW5leGFjdCBSb3VuZGVkDQorbG54MTAxMiBsbiAwLjAwODE3NzkgLT4gLTQuODA2MzIwIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTMgbG4gOC4zMTM2MTYgIC0+IDIuMTE3ODk1IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTQgbG4gMy40ODY5MjUgIC0+IDEuMjQ5MDIwIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTUgbG4gMC4xODAxNDAxIC0+IC0xLjcxNDAyMCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDE2IGxuIDAuNTIyNzE0OCAtPiAtMC42NDg3MTkzIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTcgbG4gNy44MTgxMTEgIC0+IDIuMDU2NDQzIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMTggbG4gMC4wODcwNjcxIC0+IC0yLjQ0MTA3NiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDE5IGxuIDguMTUzOTY2ICAtPiAyLjA5ODUwNCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDIwIGxuIDIuMDQwOTc1ICAtPiAwLjcxMzQyNzYgSW5leGFjdCBSb3VuZGVkDQorbG54MTAyMSBsbiAxLjQ4MTY0MiAgLT4gMC4zOTMxNTA5IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMjIgbG4gMC4yNjEwMTIzIC0+IC0xLjM0MzE4OCBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDIzIGxuIDAuNDY2NzIzICAtPiAtMC43NjIwMTkzIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMjQgbG4gMC4wNTE4NzU2IC0+IC0yLjk1ODkwNyBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDI1IGxuIDIuMDU2NDEwICAtPiAwLjcyMDk2MTcgSW5leGFjdCBSb3VuZGVkDQorbG54MTAyNiBsbiAwLjE4MTUyMiAgLT4gLTEuNzA2Mzc4IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMjcgbG4gMC41MTU1NTEgIC0+IC0wLjY2MjUxOTAgSW5leGFjdCBSb3VuZGVkDQorbG54MTAyOCBsbiA4LjQyNTA4OSAgLT4gMi4xMzEyMTQgSW5leGFjdCBSb3VuZGVkDQorbG54MTAyOSBsbiAyLjA3NzA5MSAgLT4gMC43MzA5Njg0IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMzAgbG4gNi4yMTI3MDUgIC0+IDEuODI2NTk2IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMzEgbG4gNS43MjkzNDMgIC0+IDEuNzQ1NjAxIEluZXhhY3QgUm91bmRlZA0KK2xueDEwMzIgbG4gNC44MzEyNTEgIC0+IDEuNTc1MTA1IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMzMgbG4gMi4wMjk3NjAgIC0+IDAuNzA3OTE3NiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDM0IGxuIDguNjE1MDYwICAtPiAyLjE1MzUxMiBJbmV4YWN0IFJvdW5kZWQNCitsbngxMDM1IGxuIDAuMDYxMTUxMSAtPiAtMi43OTQ0MDcgSW5leGFjdCBSb3VuZGVkDQorbG54MTAzNiBsbiA1LjE5NTI2OSAgLT4gMS42NDc3NDggSW5leGFjdCBSb3VuZGVkDQorbG54MTAzNyBsbiA5LjYxNzY4NiAgLT4gMi4yNjM2MDQgSW5leGFjdCBSb3VuZGVkDQorbG54MTAzOCBsbiAwLjAwNDkzODIgLT4gLTUuMzEwNzU0IEluZXhhY3QgUm91bmRlZA0KK2xueDEwMzkgbG4gMi43ODY4NDAgIC0+IDEuMDI0OTA4IEluZXhhY3QgUm91bmRlZA0KK2xueDEwNDAgbG4gMC4wMDkxMDczIC0+IC00LjY5ODY3OSBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBmcm9tIGhlcmUgMy1kaWdpdCB0ZXN0cyBhcmUgYmFzZWQgb24gcmV2ZXJzZSBleHAgdGVzdHMNCitwcmVjaXNpb246ICAgOQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCitsbngwMDEgIGxuIDAgICAgICAgICAgIC0+ICAtSW5maW5pdHkNCitsbngwMDIgIGxuIDAuMzY3ODc5NDQxIC0+ICAtMS4wMDAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMDMgIGxuIDEgICAgICAgICAgIC0+ICAgMA0KK2xueDAwNSAgbG4gMi43MTgyODE4MyAgLT4gICAxLjAwMDAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDAwNiAgbG4gMi4wMDAwMDAwMCAgLT4gICAwLjY5MzE0NzE4MSAgIEluZXhhY3QgUm91bmRlZA0KK2xueDAwNyAgbG4gK0luZmluaXR5ICAgLT4gICBJbmZpbml0eQ0KKw0KKy0tIHRpbnkgZWRnZSBjYXNlcw0KK3ByZWNpc2lvbjogICA3DQorbG54MDExICBsbiAxLjEwNTE3MSAtPiAgMC4xMDAwMDAxICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDAxMiAgbG4gMS4wMTAwNTAgLT4gIDAuMDA5OTk5ODM1ICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwMTMgIGxuIDEuMDAwMDEwIC0+ICAwLjAwMDAwOTk5OTk1MCAgSW5leGFjdCBSb3VuZGVkDQorbG54MDE0ICBsbiAxLjAwMDAwMSAtPiAgOS45OTk5OTVFLTcgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDAxNSAgbG4gMS4wMDAwMDAgLT4gIDANCisNCistLSBiYXNpYyBlPTAsIGU9MSwgZT0yLCBlPTQsIGU+PTggY2FzZXMNCitwcmVjaXNpb246ICAgNw0KK2xueDA0MSAgbG4gMi43MTgyODIgICAgICAtPiAgMS4wMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MDQyICBsbiAwLjM2Nzg3OTQgICAgIC0+IC0xLjAwMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwNDMgIGxuIDIyMDI2LjQ3ICAgICAgLT4gIDEwLjAwMDAwICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDA0NCAgbG4gMC4wMDAwNDUzOTk5MyAtPiAtMTAuMDAwMDAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54MDQ1ICBsbiAyLjY4ODExN0UrNDMgIC0+ICAxMDAuMDAwMCAgICBJbmV4YWN0IFJvdW5kZWQNCitsbngwNDYgIGxuIDMuNzIwMDc2RS00NCAgLT4gLTEwMC4wMDAwICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDA0NyAgbG4gSW5maW5pdHkgICAgICAtPiAgSW5maW5pdHkNCitsbngwNDggIGxuIDBFLTM4OSAgICAgICAgLT4gLUluZmluaXR5DQorDQorLS0gbWlzY2VsbGFuZWENCitwcmVjaXNpb246IDE2DQorbG54MDU1ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MkUtMjM2ICAgICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTUgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNw0KK2xueDA1NiAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxRS0yMzYgICAgLT4gLTU0Mi40MTAzMTEyODc0NDE0NiAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTgNCitsbngwNTcgIGxuIDIuNzE3NjU4NDg2ODg0NTcyMTFFLTIzNiAgIC0+IC01NDIuNDEwMzExMjg3NDQxNDU5ICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDE5DQorbG54MDU4ICBsbiAyLjcxNzY1ODQ4Njg4NDU3MjExMkUtMjM2ICAtPiAtNTQyLjQxMDMxMTI4NzQ0MTQ1OTIgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMA0KK2xueDA1OSAgbG4gMi43MTc2NTg0ODY4ODQ1NzIxMTE4RS0yMzYgLT4gLTU0Mi40MTAzMTEyODc0NDE0NTkxNyAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIGlucHV0cyBlbmRpbmcgaW4gLi41MDAuLiwgLi40OTkuLiwgLi4xMDAuLiwgLi45OTkuLiBzZXF1ZW5jZXMNCitwcmVjaXNpb246ICAgNTANCitsbngxMDIgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAyNyAtPiAtOS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzNzQ5OTUzODI5OTk2NDQ2MTI0ODYxNzUwRS04ICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMzANCitsbngxMDMgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwMDAzIC0+IC04Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk3MzM3NDk5RS04ICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI5DQorbG54MTA0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM3NTBFLTggICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI4DQorbG54MTA1ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwMDAgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczMzc1RS04ICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjcNCitsbngxMDYgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc4NTAwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzM4RS04ICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI2DQorbG54MTA3ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUwIC0+IC05LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3MzRFLTggICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDI1DQorbG54MTA4ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg3ODUgLT4gLTkuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjczRS04ICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjQNCitsbngxMDkgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDQ5OTk5ODc5IC0+IC04Ljk5OTk5OTk5OTk5OTk5OTk1MDAwMDI3RS04ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDIzDQorbG54MTEwICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTg4IC0+IC04Ljk5OTk5OTk5OTk5OTk5OTg1MDAwMDNFLTggICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDIyDQorbG54MTExICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA0OTk5OTkgLT4gLTguOTk5OTk5OTk5OTk5OTk3ODUwMDAwRS04ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMjENCitsbngxMTIgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwMDAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MDAwRS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDIwDQorbG54MTEzICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1MDBFLTggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDE5DQorbG54MTE0ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1MDAgLT4gLTguOTk5OTk5OTk5OTk5OTg3ODUwRS04ICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTgNCitsbngxMTUgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MDUwIC0+IC04Ljk5OTk5OTk5OTk5OTk4Nzg1RS04ICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6DQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC04Ljk5OTk5OTk5OTk5OTk4Nzg0OTk5OTE4RS04DQorcHJlY2lzaW9uOiAgIDE3DQorbG54MTE2ICBsbiAwLjk5OTk5OTkxMDAwMDAwNDA1IC0+IC04Ljk5OTk5OTk5OTk5OTk4NzhFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTYNCitsbngxMTcgIGxuIDAuOTk5OTk5OTEwMDAwMDA0MCAtPiAtOS4wMDAwMDAwMDQ5OTk5ODhFLTggICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTUNCitsbngxMTggIGxuIDAuOTk5OTk5OTEwMDAwMDA0IC0+IC05LjAwMDAwMDAwNDk5OTk5RS04ICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDE0DQorbG54MTE5ICBsbiAwLjk5OTk5OTkxMDAwMDAwIC0+IC05LjAwMDAwMDQwNTAwMDBFLTggICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTMNCitsbngxMjAgIGxuIDAuOTk5OTk5OTEwMDAwMCAtPiAtOS4wMDAwMDA0MDUwMDBFLTggICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDEyDQorbG54MTIxICBsbiAwLjk5OTk5OTkxMDAwMCAtPiAtOS4wMDAwMDA0MDUwMEUtOCAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDExDQorbG54MTIyICBsbiAwLjk5OTk5OTkxMDAwIC0+IC05LjAwMDAwMDQwNTBFLTggICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTANCitsbngxMjMgIGxuIDAuOTk5OTk5OTEwMCAtPiAtOS4wMDAwMDA0MDVFLTggICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICA5DQorbG54MTI0ICBsbiAwLjk5OTk5OTkxMCAtPiAtOS4wMDAwMDA0MUUtOCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICA4DQorbG54MTI1ICBsbiAwLjk5OTk5OTkxIC0+IC05LjAwMDAwMDRFLTggICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDcNCitsbngxMjYgIGxuIDAuOTk5OTk5OSAtPiAtMS4wMDAwMDBFLTcgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgIDE2DQorbG54MTI2YiBsbiAwLjk5OTk5OTkgLT4gLTEuMDAwMDAwMDUwMDAwMDAzRS03ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgNg0KK2xueDEyNyAgbG4gMC45OTk5OTkgLT4gLTAuMDAwMDAxMDAwMDAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDUNCitsbngxMjggIGxuIDAuOTk5OTkgLT4gLTAuMDAwMDEwMDAwICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICA0DQorbG54MTI5ICBsbiAwLjk5OTkgLT4gLTAuMDAwMTAwMCAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMw0KK2xueDEzMCAgbG4gMC45OTkgLT4gLTAuMDAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgIDINCitsbngxMzEgIGxuIDAuOTkgLT4gLTAuMDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgICAxDQorbG54MTMyICBsbiAwLjkgLT4gLTAuMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKw0KKy0tIGNhc2VzIG5lYXIgMSAgICAgICAgICAgICAgLS0gIDEgMjM0NTY3ODkwMTIzNDU2Nzg5MA0KK3ByZWNpc2lvbjogICAgMjANCitsbng0MDEgIGxuIDIuNzE4MjgxODI4NDU4OTM2NTA0MSAtPiAwLjk5OTk5OTk5OTk5OTk2MDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2xueDQwMiAgbG4gMi43MTgyODE4Mjg0NTg5NjM2ODY5IC0+IDAuOTk5OTk5OTk5OTk5OTcwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorbG54NDAzICBsbiAyLjcxODI4MTgyODQ1ODk5MDg2OTcgLT4gMC45OTk5OTk5OTk5OTk5Nzk5OTk5OSBJbmV4YWN0IFJvdW5kZWQNCitsbng0MDQgIGxuIDIuNzE4MjgxODI4NDU5MDE4MDUyNSAtPiAwLjk5OTk5OTk5OTk5OTk4OTk5OTk4IEluZXhhY3QgUm91bmRlZA0KK2xueDQwNSAgbG4gMi43MTgyODE4Mjg0NTkwNDUyMzU0IC0+IDEuMDAwMDAwMDAwMDAwMDAwMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorbG54NDA2ICBsbiAyLjcxODI4MTgyODQ1OTMxNzA2MzUgLT4gMS4wMDAwMDAwMDAwMDAxMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitsbng0MDcgIGxuIDIuNzE4MjgxODI4NDU5NTg4ODkxNyAtPiAxLjAwMDAwMDAwMDAwMDIwMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogICAgMTQNCitsbng0MTEgIGxuIDIuNzE4MjgxODI4NDU4OSAtPiAwLjk5OTk5OTk5OTk5OTk1ICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDQxMyAgbG4gMi43MTgyODE4Mjg0NTkwIC0+IDAuOTk5OTk5OTk5OTk5OTggICAgSW5leGFjdCBSb3VuZGVkDQorbG54NDE2ICBsbiAyLjcxODI4MTgyODQ1OTEgLT4gMS4wMDAwMDAwMDAwMDAwICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng0MTcgIGxuIDIuNzE4MjgxODI4NDU5MiAtPiAxLjAwMDAwMDAwMDAwMDEgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIG92ZXJmbG93cywgaW5jbHVkaW5nIHNvbWUgZXhwIG92ZXJwcmVjaXNlIGJvcmRlcmxpbmVzDQorcHJlY2lzaW9uOiAgIDcNCittYXhFeHBvbmVudDogMzg0DQorbWluRXhwb25lbnQ6IC0zODMNCitsbng3MDkgIGxuIDkuOTk5OTk5RSszODQgLT4gIDg4Ni40OTUzICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3MTEgIGxuIDkuOTk5OTkyRSszODQgLT4gIDg4Ni40OTUzICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAgMTYNCitsbng3MjIgIGxuIDkuOTk5OTk5OTk5OTk5OTk5RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc2ICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3MjQgIGxuIDkuOTk5OTk5OTk5OTk5OTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc2ICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3MjYgIGxuIDkuOTk5OTk5OTk5OTk5MTE3RSszODQgLT4gIDg4Ni40OTUyNjA4MDI3MDc1ICAgICBJbmV4YWN0IFJvdW5kZWQNCistLSBhbmQgbW9yZS4uLg0KK3ByZWNpc2lvbjogICAxNQ0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KK2xueDczMSAgbG4gOS45OTk5OTk5OTk5OTk5OUUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDUgICAgICAgSW5leGFjdCBSb3VuZGVkDQorLS0gbmV4dCBtYXkgYmUgYSA+IDAuNXVscCBjYXNlOyBhIG1vcmUgcHJlY2lzZSBhbnN3ZXIgaXM6DQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjMwMi41ODUwOTI5OTQwNDQ5NTAwMTc5OTE0NTQ0Mg0KK2xueDczMiAgbG4gOS45OTk5OTk5OTk5OTI2NkUrOTk5IC0+IDIzMDIuNTg1MDkyOTk0MDQgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54NzMzICBsbiA5Ljk5OTk5OTk5OTk5MjY1RSs5OTkgLT4gMjMwMi41ODUwOTI5OTQwNCAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3MzQgIGxuIDkuOTk5OTk5OTk5OTkyNjRFKzk5OSAtPiAyMzAyLjU4NTA5Mjk5NDA0ICAgICAgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgZm9yIGV4cCwgaW5jbHVkaW5nIHVuZGVyZmxvdy10by16ZXJvIGVkZ2UgcG9pbnQNCitwcmVjaXNpb246ICAgNw0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK2xueDc1MSAgbG4gMEUtMzg5IC0+IC1JbmZpbml0eQ0KK2xueDc1OCAgbG4gMS4wMDAwMDFFLTM4MyAtPiAtODgxLjg5MDEgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3NTkgIGxuIDkuOTk5OTFFLTM4NCAtPiAtODgxLjg5MDEgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54NzYwICBsbiA0LjQ2MDVFLTM4NSAtPiAtODg1LjAwMDAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDc2MSAgbG4gMi4yMjFFLTM4NiAtPiAtODg3Ljk5OTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3NjIgIGxuIDMuMDFFLTM4NyAtPiAtODg5Ljk5ODUgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54NzYzICBsbiAxLjdFLTM4OCAtPiAtODkyLjg3MjQgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDc2NCAgbG4gMS41RS0zODggLT4gLTg5Mi45OTc2ICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitsbng3NjUgIGxuIDlFLTM4OSAtPiAtODkzLjUwODQgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG54NzY2ICBsbiAxRS0zODkgLT4gLTg5NS43MDU2ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xueDc3NCAgbG4gMEUtMzg5IC0+IC1JbmZpbml0eQ0KKw0KKy0tIHNwZWNpYWwgdmFsdWVzDQorbG54ODIwICBsbiBJbmZpbml0eSAtPiAgIEluZmluaXR5DQorbG54ODIxICBsbiAwICAgICAgICAtPiAgLUluZmluaXR5DQorbG54ODIyICBsbiBOYU4gICAgICAtPiAgIE5hTg0KK2xueDgyMyAgbG4gc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK2xueDgyNCAgbG4gc05hTjEyMyAgLT4gICBOYU4xMjMgIEludmFsaWRfb3BlcmF0aW9uDQorbG54ODI1ICBsbiAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24NCitsbng4MjYgIGxuIE5hTjQ1NiAgIC0+ICAgTmFONDU2DQorbG54ODI3ICBsbiAtTmFONjU0ICAtPiAgLU5hTjY1NA0KK2xueDgyOCAgbG4gTmFOMSAgICAgLT4gICBOYU4xDQorDQorLS0gSW52YWxpZCBvcGVyYXRpb25zIGR1ZSB0byByZXN0cmljdGlvbnMNCistLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQ0KK3ByZWNpc2lvbjogMTAwMDAwMDAwDQorbG54OTAxICBsbiAxIC0+ICBOYU4gICAgICAgICAgICBJbnZhbGlkX2NvbnRleHQNCitwcmVjaXNpb246ICA5OTk5OTk5OQ0KK2xueDkwMiAgbG4gMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQorDQorcHJlY2lzaW9uOiA5DQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMA0KK21pbkV4cG9uZW50OiAgIC05OTk5OTkNCitsbng5MDMgIGxuIDEgICAtPiAgTmFOICAgICAgICAgIEludmFsaWRfY29udGV4dA0KK21heEV4cG9uZW50OiAgICA5OTk5OTkNCittaW5FeHBvbmVudDogICAtOTk5OTk5DQorbG54OTA0ICBsbiAwIC0+ICAtSW5maW5pdHkNCittYXhFeHBvbmVudDogICAgOTk5OTk5DQorbWluRXhwb25lbnQ6ICAtMTAwMDAwMA0KK2xueDkwNSAgbG4gMSAgIC0+ICBOYU4gICAgICAgICAgSW52YWxpZF9jb250ZXh0DQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KK21pbkV4cG9uZW50OiAgIC05OTk5OTgNCitsbng5MDYgIGxuIDAgLT4gIC1JbmZpbml0eQ0KKw0KKy0tIHBheWxvYWQgZGVjYXBpdGF0ZQ0KK3ByZWNpc2lvbjogNQ0KK2xueDkxMCAgbG4gLXNOYU4xMjM0NTY3ODkwIC0+IC1OYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOdWxsIHRlc3QNCitsbng5MDAgIGxuICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nMTAuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CmluZGV4IDY1MDJmMGQuLjUxNjllYWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2cxMC5kZWNUZXN0CkBAIC0xLDU1MSArMSw1NTEgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gbG9nMTAuZGVjVGVzdCAtLSBkZWNpbWFsIGxvZ2FyaXRobSBpbiBiYXNlIDEwICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwNSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIGVtcGhhc2lzZXMgdGhlIHRlc3Rpbmcgb2Ygbm90YWJsZSBjYXNlcywgYXMgdGhleSB3aWxsIG9mdGVuCi0tLSBoYXZlIHVudXN1YWwgcGF0aHMgKGVzcGVjaWFsbHkgdGhlIDEwKipuIHJlc3VsdHMpLgotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDE2Ci1yb3VuZGluZzogICAgaGFsZl9ldmVuCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi0tLSBleGFtcGxlcyBpbiBzcGVjaWZpY2F0aW9uCi1wcmVjaXNpb246ICAgOQotbG9neHMwMDAgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG9neHMwMDEgbG9nMTAgIDAuMDAxICAgICAgICAgICAgIC0+IC0zCi1sb2d4czAwMiBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gIDAKLWxvZ3hzMDAzIGxvZzEwICAyICAgICAgICAgICAgICAgICAtPiAgMC4zMDEwMjk5OTYgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3hzMDA0IGxvZzEwICAxMCAgICAgICAgICAgICAgICAtPiAgMQotbG9neHMwMDUgbG9nMTAgIDcwICAgICAgICAgICAgICAgIC0+ICAxLjg0NTA5ODA0ICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotbG9neHMwMDYgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0KLS0tIGJhc2ljcyAoZXhhbXBsZXMgaW4gc3BlY2lmaWNhdGlvbiwgZXRjLikKLXByZWNpc2lvbjogICAxNgotbG9neDAwMDAgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG9neDAwMDEgbG9nMTAgIDdFLTEwMDAgICAgICAgICAgIC0+IC05OTkuMTU0OTAxOTU5OTg1NyAgIEluZXhhY3QgUm91bmRlZAotbG9neDAwMDIgbG9nMTAgIDEuMUUtOSAgICAgICAgICAgIC0+IC04Ljk1ODYwNzMxNDg0MTc3NSAgIEluZXhhY3QgUm91bmRlZAotbG9neDAwMDMgbG9nMTAgIDAuMDAwNyAgICAgICAgICAgIC0+IC0zLjE1NDkwMTk1OTk4NTc0MyAgIEluZXhhY3QgUm91bmRlZAotbG9neDAwMDQgbG9nMTAgIDAuMTEgICAgICAgICAgICAgIC0+IC0wLjk1ODYwNzMxNDg0MTc3NTAgIEluZXhhY3QgUm91bmRlZAotbG9neDAwMDUgbG9nMTAgIDAuNyAgICAgICAgICAgICAgIC0+IC0wLjE1NDkwMTk1OTk4NTc0MzIgIEluZXhhY3QgUm91bmRlZAotbG9neDAwMDYgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAwCi1sb2d4MDAwNyBsb2cxMCAgMS41ICAgICAgICAgICAgICAgLT4gIDAuMTc2MDkxMjU5MDU1NjgxMiAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAwOCBsb2cxMCAgMiAgICAgICAgICAgICAgICAgLT4gIDAuMzAxMDI5OTk1NjYzOTgxMiAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAwOSBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDUgLT4gIDAuNDM0Mjk0NDgxOTAzMjUxOCAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAxMCBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDYgLT4gIDAuNDM0Mjk0NDgxOTAzMjUxOSAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAxMSBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDcgLT4gIDAuNDM0Mjk0NDgxOTAzMjUyMSAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAxMiBsb2cxMCAgNyAgICAgICAgICAgICAgICAgLT4gIDAuODQ1MDk4MDQwMDE0MjU2OCAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MDAxMyBsb2cxMCAgMTAgICAgICAgICAgICAgICAgLT4gIDEKLWxvZ3gwMDE0IGxvZzEwICAxMC41ICAgICAgICAgICAgICAtPiAgMS4wMjExODkyOTkwNjk5MzggICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDE1IGxvZzEwICAxMSAgICAgICAgICAgICAgICAtPiAgMS4wNDEzOTI2ODUxNTgyMjUgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDE2IGxvZzEwICA3MCAgICAgICAgICAgICAgICAtPiAgMS44NDUwOTgwNDAwMTQyNTcgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDE3IGxvZzEwICA5OTk5ICAgICAgICAgICAgICAtPiAgMy45OTk5NTY1NjgzODAxOTIgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDE4IGxvZzEwICAxLjIxRTYgICAgICAgICAgICAtPiAgNi4wODI3ODUzNzAzMTY0NTAgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDE5IGxvZzEwICAxLjFFKzkgICAgICAgICAgICAtPiAgOS4wNDEzOTI2ODUxNTgyMjUgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDIwIGxvZzEwICA3RSsxMDAwICAgICAgICAgICAtPiAgMTAwMC44NDUwOTgwNDAwMTQgICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gwMDIxIGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkKLQotLS0gbm90YWJsZSBjYXNlcwotLS0gbmVnYXRpdmVzCi1sb2d4MDAzMSBsb2cxMCAtMUUtOSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzMiBsb2cxMCAtMC4wMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzMyBsb2cxMCAtMC4xICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzNCBsb2cxMCAtMC43ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzNSBsb2cxMCAtMSAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzNiBsb2cxMCAtMS41ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzNyBsb2cxMCAtMiAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzOCBsb2cxMCAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDAzOSBsb2cxMCAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDA0MCBsb2cxMCAtOTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDA0MSBsb2cxMCAtMTAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4MDA0MiBsb2cxMCAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1sb2d4MDA0MyBsb2cxMCAtMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Ci1sb2d4MDA0NCBsb2cxMCAtMEUtMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5Ci0tLSBvdGhlciB6ZXJvcwotbG9neDAwNTEgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG9neDAwNTIgbG9nMTAgIDBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotbG9neDAwNTMgbG9nMTAgIDBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQotLS0gaW5maW5pdGllcwotbG9neDAwNTUgbG9nMTAgLUluZmluaXR5ICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotbG9neDAwNTYgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+IEluZmluaXR5Ci0tLSBvbmVzCi1sb2d4MDA2MSBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gICAwCi1sb2d4MDA2MiBsb2cxMCAgMS4wICAgICAgICAgICAgICAgLT4gICAwCi1sb2d4MDA2MyBsb2cxMCAgMS4wMDAwMDAwMDAwMDAwMDAgLT4gICAwCi1sb2d4MDA2NCBsb2cxMCAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwCi0KLS0tIG5vdGFibGUgY2FzZXMgLS0gZXhhY3QgcG93ZXJzIG9mIDEwCi1sb2d4MTEwMCBsb2cxMCAxICAgICAgICAgICAgIC0+IDAKLWxvZ3gxMTAxIGxvZzEwIDEwICAgICAgICAgICAgLT4gMQotbG9neDExMDIgbG9nMTAgMTAwICAgICAgICAgICAtPiAyCi1sb2d4MTEwMyBsb2cxMCAxMDAwICAgICAgICAgIC0+IDMKLWxvZ3gxMTA0IGxvZzEwIDEwMDAwICAgICAgICAgLT4gNAotbG9neDExMDUgbG9nMTAgMTAwMDAwICAgICAgICAtPiA1Ci1sb2d4MTEwNiBsb2cxMCAxMDAwMDAwICAgICAgIC0+IDYKLWxvZ3gxMTA3IGxvZzEwIDEwMDAwMDAwICAgICAgLT4gNwotbG9neDExMDggbG9nMTAgMTAwMDAwMDAwICAgICAtPiA4Ci1sb2d4MTEwOSBsb2cxMCAxMDAwMDAwMDAwICAgIC0+IDkKLWxvZ3gxMTEwIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTAKLWxvZ3gxMTExIGxvZzEwIDEwMDAwMDAwMDAwMCAgLT4gMTEKLWxvZ3gxMTEyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTIKLWxvZ3gxMTEzIGxvZzEwIDAuMDAwMDAwMDAwMDEgLT4gLTExCi1sb2d4MTExNCBsb2cxMCAwLjAwMDAwMDAwMDEgLT4gLTEwCi1sb2d4MTExNSBsb2cxMCAwLjAwMDAwMDAwMSAtPiAtOQotbG9neDExMTYgbG9nMTAgMC4wMDAwMDAwMSAtPiAtOAotbG9neDExMTcgbG9nMTAgMC4wMDAwMDAxIC0+IC03Ci1sb2d4MTExOCBsb2cxMCAwLjAwMDAwMSAtPiAtNgotbG9neDExMTkgbG9nMTAgMC4wMDAwMSAtPiAtNQotbG9neDExMjAgbG9nMTAgMC4wMDAxIC0+IC00Ci1sb2d4MTEyMSBsb2cxMCAwLjAwMSAtPiAtMwotbG9neDExMjIgbG9nMTAgMC4wMSAtPiAtMgotbG9neDExMjMgbG9nMTAgMC4xIC0+IC0xCi1sb2d4MTEyNCBsb2cxMCAxRS05OSAgLT4gLTk5Ci1sb2d4MTEyNSBsb2cxMCAxRS0xMDAgLT4gLTEwMAotbG9neDExMjYgbG9nMTAgMUUtMzgzIC0+IC0zODMKLQotLS0gY2hlY2sgbm9ybWFsbHkgZXhhY3QgY2FzZXMgcm91bmQgcHJvcGVybHkKLXByZWNpc2lvbjogMQotbG9neDExNDEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxRSsxICAgICAgICAgUm91bmRlZAotbG9neDExNDIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxRSsxIEluZXhhY3QgUm91bmRlZAotbG9neDExNDMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxRSsyICAgICAgICAgUm91bmRlZAotbG9neDExNDQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNDUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNDYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5RSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNDcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiAxRSszIEluZXhhY3QgUm91bmRlZAotCi1wcmVjaXNpb246IDIKLWxvZ3gxMTUxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTAKLWxvZ3gxMTUyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTIKLWxvZ3gxMTUzIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMS4wRSsyICAgICAgICAgUm91bmRlZAotbG9neDExNTQgbG9nMTAgMUUrMTIzICAgICAgICAtPiAxLjJFKzIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTE1NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMTU2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOS4yRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNTcgbG9nMTAgMUUrOTk5ICAgICAgICAtPiAxLjBFKzMgSW5leGFjdCBSb3VuZGVkCi0tLSBzb21lIGhhbGYtd2F5IHBvaW50IHJvdW5kcywgb3RoZXIgY2FzZXMsIGFuZCBuZWdhdGl2ZXMKLWxvZ3gxMTU4IGxvZzEwIDFFKzEyNSAgICAgICAgLT4gMS4yRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNTkgbG9nMTAgMUUrMTM1ICAgICAgICAtPiAxLjRFKzIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTE2MCBsb2cxMCAxRSsxMjkgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMTYxIGxvZzEwIDFFKzEzMSAgICAgICAgLT4gMS4zRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjIgbG9nMTAgMUUtMTIzICAgICAgICAtPiAtMS4yRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjMgbG9nMTAgMUUtMTI2ICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjQgbG9nMTAgMUUtOTE2ICAgICAgICAtPiAtOS4yRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjUgbG9nMTAgMUUtOTk5ICAgICAgICAtPiAtMS4wRSszIEluZXhhY3QgUm91bmRlZAotbG9neDExNjYgbG9nMTAgMUUtMTI1ICAgICAgICAtPiAtMS4yRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjcgbG9nMTAgMUUtMTM1ICAgICAgICAtPiAtMS40RSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjggbG9nMTAgMUUtMTI5ICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZAotbG9neDExNjkgbG9nMTAgMUUtMTMxICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZAotCi1wcmVjaXNpb246IDMKLWxvZ3gxMTcxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTAKLWxvZ3gxMTcyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTIKLWxvZ3gxMTczIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMTAwCi1sb2d4MTE3NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDEyMwotbG9neDExNzUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxMjYKLWxvZ3gxMTc2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOTE2Ci1sb2d4MTE3NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDk5OQotCi0tLSBsb2cxMCgyKSAuLiB0ZXN0cyBib3RoIGxuKDIpIGFuZCBsbigxMCkgY29uc3RhbnRzLCB0b28KLXByZWNpc2lvbjogNTAKLWxvZ3gxMjAxIGxvZzEwIDIgICAgIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTIwMiBsb2cxMCAyLjAwMCAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZAotbG9neDEyMDMgbG9nMTAgMC4yRTEgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNDkKLWxvZ3gxMjA0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0OAotbG9neDEyMDUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MiAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDQ3Ci1sb2d4MTIwNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNDYKLWxvZ3gxMjA3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE1ICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0NQotbG9neDEyMDggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MSAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDQ0Ci1sb2d4MTIwOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODggICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNDMKLWxvZ3gxMjEwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk5ICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA0MgotbG9neDEyMTEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE5MCAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDQxCi1sb2d4MTIxMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogNDAKLWxvZ3gxMjEzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgyICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzOQotbG9neDEyMTQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2OCAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDM4Ci1sb2d4MTIxNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzcKLWxvZ3gxMjE2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY4ICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzNgotbG9neDEyMTcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDM1Ci1sb2d4MTIxOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDMgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzQKLWxvZ3gxMjE5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzMwotbG9neDEyMjAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MyAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDMyCi1sb2d4MTIyMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMzEKLWxvZ3gxMjIyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ1ICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAzMAotbG9neDEyMjMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNCAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDI5Ci1sb2d4MTIyNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzIgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjgKLWxvZ3gxMjI1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3ICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyNwotbG9neDEyMjYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NSAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDI2Ci1sb2d4MTIyNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODkgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjUKLWxvZ3gxMjI4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg5ICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyNAotbG9neDEyMjkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczOSAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDIzCi1sb2d4MTIzMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzQgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjIKLWxvZ3gxMjMxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAyMQotbG9neDEyMzIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDIwCi1sb2d4MTIzMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTkKLWxvZ3gxMjM0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxOAotbG9neDEyMzUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE3Ci1sb2d4MTIzNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTYKLWxvZ3gxMjM3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxNQotbG9neDEyMzggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE0Ci1sb2d4MTIzOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTMKLWxvZ3gxMjQwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxMgotbG9neDEyNDEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDExCi1sb2d4MTI0MiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTAKLWxvZ3gxMjQzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgOQotbG9neDEyNDQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICA4Ci1sb2d4MTI0NSBsb2cxMCAyIC0+IDAuMzAxMDMwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDcKLWxvZ3gxMjQ2IGxvZzEwIDIgLT4gMC4zMDEwMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgNgotbG9neDEyNDcgbG9nMTAgMiAtPiAwLjMwMTAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICA1Ci1sb2d4MTI0OCBsb2cxMCAyIC0+IDAuMzAxMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDQKLWxvZ3gxMjQ5IGxvZzEwIDIgLT4gMC4zMDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAgMwotbG9neDEyNTAgbG9nMTAgMiAtPiAwLjMwMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246ICAyCi1sb2d4MTI1MSBsb2cxMCAyIC0+IDAuMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogIDEKLWxvZ3gxMjUyIGxvZzEwIDIgLT4gMC4zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotCi1tYXhFeHBvbmVudDogMzg0Ci1taW5FeHBvbmVudDogLTM4MwotcHJlY2lzaW9uOiAgIDE2Ci1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLS0tIE1vcmUgY2xvc2UtdG8tZSwgZXRjLiwgdGVzdHMKLXByZWNpc2lvbjogICAzNAotbG9neDEzMDEgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjEgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA0OCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzAyIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTMwMyBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MyAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUyIEluZXhhY3QgUm91bmRlZAotbG9neDEzMDQgbG9nMTAgMC45OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgIC0+IC00LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA3M0UtMzMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTMwNSBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUzRS0zNCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzA2IGxvZzEwIDAuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAtPiAtNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTFFLTM1IEluZXhhY3QgUm91bmRlZAotbG9neDEzMDcgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIC0+IDAKLWxvZ3gxMzA4IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUUtMzUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTMwOSBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNDlFLTM0IEluZXhhY3QgUm91bmRlZAotbG9neDEzMTAgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAgIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDI5RS0zMyBJbmV4YWN0IFJvdW5kZWQKLS0tIGxvd2VyIHAKLXByZWNpc2lvbjogICAgNwotbG9neDEzMjAgbG9nMTAgMC45OTk5OTkgICAgLT4gLTQuMzQyOTQ3RS03ICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzIxIGxvZzEwIDAuOTk5OTk5OSAgIC0+IC00LjM0Mjk0NUUtOCAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTMyMiBsb2cxMCAwLjk5OTk5OTk5ICAtPiAtNC4zNDI5NDVFLTkgIEluZXhhY3QgUm91bmRlZAotbG9neDEzMjMgbG9nMTAgMC45OTk5OTk5OTkgLT4gLTQuMzQyOTQ1RS0xMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzI0IGxvZzEwIDEuMDAwMDAwMDAgIC0+ICAwCi1sb2d4MTMyNSBsb2cxMCAxLjAwMDAwMDAxICAtPiAgNC4zNDI5NDVFLTkgIEluZXhhY3QgUm91bmRlZAotbG9neDEzMjYgbG9nMTAgMS4wMDAwMDAxICAgLT4gIDQuMzQyOTQ1RS04ICBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzI3IGxvZzEwIDEuMDAwMDAxICAgIC0+ICA0LjM0Mjk0M0UtNyAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIG5lYXIgMTBeMwotcHJlY2lzaW9uOiAgIDkKLWxvZ3gxMzMxIGxvZzEwICA5OTkuOTk5OTk5OCAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzMyIGxvZzEwICA5OTkuOTk5OTk5OSAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzMzIGxvZzEwIDEwMDAuMDAwMDAwICAgLT4gMwotbG9neDEzMzQgbG9nMTAgMTAwMC4wMDAwMDEgICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotbG9neDEzMzUgbG9nMTAgMTAwMC4wMDAwMDIgICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxNgotbG9neDEzNDEgbG9nMTAgIDk5OS45OTk5OTk4ICAtPiAyLjk5OTk5OTk5OTkxMzE0MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gxMzQyIGxvZzEwICA5OTkuOTk5OTk5OSAgLT4gMi45OTk5OTk5OTk5NTY1NzEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTM0MyBsb2cxMCAxMDAwLjAwMDAwMCAgIC0+IDMKLWxvZ3gxMzQ0IGxvZzEwIDEwMDAuMDAwMDAxICAgLT4gMy4wMDAwMDAwMDA0MzQyOTQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MTM0NSBsb2cxMCAxMDAwLjAwMDAwMiAgIC0+IDMuMDAwMDAwMDAwODY4NTg5IEluZXhhY3QgUm91bmRlZAotCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCi1sb2d4MTQwMCBsb2cxMCAxMEUtMyAgICAtPiAtMgotbG9neDE0MDEgbG9nMTAgMTBFLTIgICAgLT4gLTEKLWxvZ3gxNDAyIGxvZzEwIDEwMEUtMiAgIC0+ICAwCi1sb2d4MTQwMyBsb2cxMCAxMDAwRS0yICAtPiAgMQotbG9neDE0MDQgbG9nMTAgMTAwMDBFLTIgLT4gIDIKLWxvZ3gxNDA1IGxvZzEwIDEwRS0xICAgIC0+ICAwCi1sb2d4MTQwNiBsb2cxMCAxMDBFLTEgICAtPiAgMQotbG9neDE0MDcgbG9nMTAgMTAwMEUtMSAgLT4gIDIKLWxvZ3gxNDA4IGxvZzEwIDEwMDAwRS0xIC0+ICAzCi1sb2d4MTQwOSBsb2cxMCAxMEUwICAgICAtPiAgMQotbG9neDE0MTAgbG9nMTAgMTAwRTAgICAgLT4gIDIKLWxvZ3gxNDExIGxvZzEwIDEwMDBFMCAgIC0+ICAzCi1sb2d4MTQxMiBsb2cxMCAxMDAwMEUwICAtPiAgNAotbG9neDE0MTMgbG9nMTAgMTBFMSAgICAgLT4gIDIKLWxvZ3gxNDE0IGxvZzEwIDEwMEUxICAgIC0+ICAzCi1sb2d4MTQxNSBsb2cxMCAxMDAwRTEgICAtPiAgNAotbG9neDE0MTYgbG9nMTAgMTAwMDBFMSAgLT4gIDUKLWxvZ3gxNDE3IGxvZzEwIDEwRTIgICAgIC0+ICAzCi1sb2d4MTQxOCBsb2cxMCAxMDBFMiAgICAtPiAgNAotbG9neDE0MTkgbG9nMTAgMTAwMEUyICAgLT4gIDUKLWxvZ3gxNDIwIGxvZzEwIDEwMDAwRTIgIC0+ICA2Ci0KLS0tIFJhbmRvbXMKLS0tIFA9NTAsIHdpdGhpbiAwLTk5OTkKLVByZWNpc2lvbjogNTAKLWxvZ3gyNTAxIGxvZzEwIDAuMDAwMzU0NDgwMDE2Njc5NjgxNDE3NzU4OTEyNDY5OTE5MTI2NTU5NjExNjMzNDU5MDQgLT4gIC0zLjQ1MDQwODI0MjU0MTE3NzUyOTA4NjQwNTMzMTgyNDcyNzQ5NDQ2ODU1ODYxODg1MDUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUwMiBsb2cxMCA3MC42MzY0NTU3MjY0MjQzMTEyMjgyNTUzMzg2Mzc5MzUzMzA4MjY5OTUxMzY1OTc2NDQgIC0+ICAgMS44NDkwMjg4OTk4NDA4NDkyMDQ1NzkzMDcwMjU1MzAyMzM1NTU4MTQwOTc1NzE5MjQ3IEluZXhhY3QgUm91bmRlZAotbG9neDI1MDMgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDIzMzU1MDM2MjQ3MzgyMTg4OTA2MDgxMjgwNDA2MzA0MDE2OSAtPiAtMTQuNjMxNjE5NDU0MzQzODM0ODU4MDIzNTc4Mjk5MTQyODY2NTU3NzE3OTA0MjIzNjY3IEluZXhhY3QgUm91bmRlZAotbG9neDI1MDQgbG9nMTAgOTcuNzgzNjI4NjIxNTIzMjQ0Njc5OTAxMjYwMzU4Mjg2ODk4OTU4ODMyMTM1NDMzNzY0ICAtPiAgIDEuOTkwMjY2MTQ5MzIyNDIxOTUxNzg5NzY1Nzk2NDM2MjU3MTY5MDU5MjczNDQwNzMzMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTA1IGxvZzEwIDAwNjIuMjM3NzEzNTMxNTg1ODM5MjgwMjYxMjgxMjAyMjgwNzgzODU5OTU3MjAxNzM0MiAgLT4gICAxLjc5NDA1MzYyOTMwODUwNjYxOTkyODc2MzI3MjUwMjY4MzcwMTg0ODY1MzM1NDQxNDEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUwNiBsb2cxMCA2LjM3Njc2MzQ2NTIwNzEwNTM2MTk5Nzc2MDI4MDQ3MjQxMjk2NTI5ODE3NDc4Nzk1MzIgIC0+ICAgMC44MDQ2MDAzMDc4OTgyNTk2MTYxNTEwMDE2MzU3NjA4MDc2MTMyNjg1NzM3NDA5ODY0NCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTA3IGxvZzEwIDYzLjI5NzA4ODk4MTMxMzI3ODUyOTMwNjUzMzgxNDE5NTA2ODg1MDUzMjY2NjY1ODc5OCAgLT4gICAxLjgwMTM4MzczNzM3MjQ0MjcwOTI0MTcxNzAxNDkwOTg2MTQ0MTA4NDkzNTM4Mzk2NzMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUwOCBsb2cxMCAwLjAwMDAwMDc3MjM5NjkzMzE2ODgxNzk3NzE3ODIwMTEwODk4MTY3NzIxNjAyMjk5MTg3IC0+ICAtNi4xMTIxNTk0NTkyNzE4NTUwNjEzNzczODg2MjQxOTUxOTY2MjY0ODI2NzYwMzEwMDQ3IEluZXhhY3QgUm91bmRlZAotbG9neDI1MDkgbG9nMTAgMC4wMDAwMDAwMzk1MzU4MDM1OTc4MDE4NTUzNDgzMDU3MjQ2MTkyMjUyNzgzMTM5NTAwMiAtPiAgLTcuNDAzMDA5NDI5MzgzMzg0NzEzNjI1MjU0NzA2OTkwNTQ3NzIxMzU0MTc4NzE3NzU2MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTEwIGxvZzEwIDc1NC42MjkwNTgxNzM2OTk4OTE2OTE4ODk5ODExMTUyNzI3MjY4ODc5MTU0NDU3NzIwNCAgLT4gICAyLjg3NzczMzUyNDM3NjEzMDAwNDc3NTg1MzQzMDQzNzE5MTIwOTk5NTgwNTc1NDU0MTYgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUxMSBsb2cxMCAwLjAwMDAwMDQ4MzYwMzc4NDEwMjQxNDI4OTM2NjA3MTQ3MDU2MjgzMjgyODQ5MTU4MzEyIC0+ICAtNi4zMTU1MTAzMDk1MzA5MzUzNDU3NjA0MDM4Mzk3OTgwMDkxNjUwNzYwMzQ2MzM0NTEyIEluZXhhY3QgUm91bmRlZAotbG9neDI1MTIgbG9nMTAgMC4wMDAwNzUwOTAzNzU4MzY0NTYxMjU3NzE5NjEwNDU5MTY3MjA4MDU0MjkzMjE2NjA4OSAtPiAgLTQuMTI0NDE1NzIxOTcwMDE2NjMxNDAxMjM0NDcwNTUzODA4ODAzMDU5Mjg5NjExMTAyNiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTEzIGxvZzEwIDAuMDAwMDAwMDAwMDA3MDU0NzU5NDQ2Mzg5MTUwNTM0MTk4MzkwNjM1Njc4OTgwOTIwNjQgLT4gLTExLjE1MTUxNzc5MDI1NjQ2NjA0ODU1MzgxMDAwMjUyNTg2ODE5ODE3ODE2Nzk1MDM3NyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTE0IGxvZzEwIDkuNjIxMDMwMDQ2MDQ5NzY1NzkxNzQ0NTQxMDk0NzA5OTYzMzQ3OTYwOTE2NTEyMDY2MSAgLT4gICAwLjk4MzIyMTU3MDkzMjYwOTc4MjA2NjMzOTIyODc3NzE2MDc4NjgzNTE4NjE3NzY4NDExIEluZXhhY3QgUm91bmRlZAotbG9neDI1MTUgbG9nMTAgMC4wMDAwMDAwMDA1MDE1MDM2MTM4NjU1NTUyNzQ5NjYwNzI0NTk3NjEyMDg2NDk4NTYxMSAtPiAgLTkuMjk5NzI1OTMzMDc5ODI2MTA0MDQxMTA4NjgzNTU2MzIzNDM5MDkzNDkzNDYyOTM0MCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTE2IGxvZzEwIDA5OC4yNDc1NDAyOTczMTk5NDEyNTc5NzcyMzU0NTMzMzY3NzYwNDQ5MDA3NDgxMDc1MSAgLT4gICAxLjk5MjMyMTY4NjI4NzQzMzcwNzc3OTUyNzg2MjkzNTEwNjA4MTkxMDU2Nzk2NzA2MzMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUxNyBsb2cxMCA3LjUwOTE5OTgxNTAwNDY5OTQzMjA0NDE0NjM4NTQzMDE2MjQ3NDI0OTEwMTU3NTI5ODAgIC0+ICAgMC44NzU1OTM2NjA3ODAwNTkyNDA4MDc2NjQ2OTE1ODc2MzQ5OTcyNTQxNDAyNDEyODc4MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTE4IGxvZzEwIDAuMDAwMDAwMDAwMDAwNzk1NDA1NzEyNzMzMzAwNzUxOTM2Njg1OTY5NDIyNjg1NDI0MjUgLT4gLTEyLjA5OTQxMTI5NDE2NTE3NjAyODgxNzMwNTEwODQ3NTMyNjMyNTAwNjI1MDkzNjk2MyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTE5IGxvZzEwIDAuMDAwMDAwNDIzOTUwMzQ3OTk1NTUyMTU3ODI5MDc1MTUwNzQxMzQxNTQ5MTU0OTE3MDEgLT4gIC02LjM3MjY4NTAwMzkxMjUzODExMzQwNjk0NTA4MDIxMDg4OTMwNzU2MDQ0NjQxMzUyOTcgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUyMCBsb2cxMCA1Ni42ODMzNzYzMDQ2NzQzNTU0ODE5MDUwMjMxNDUyMzg3OTk5MDkzMDE3MzI2OTQ5ODIgIC0+ICAgMS43NTM0NTU3MTA3ODUzNDgwNDM1NzAzNDIxODI2MDc3NjA2MjUwNjM2NTgwMDkxNzU0IEluZXhhY3QgUm91bmRlZAotbG9neDI1MjEgbG9nMTAgNDguNzM0MDMzODExNDQ0MTk1MDcwODA3NjA2NzIxNTE3MTY5ODEwNDM4MDQ5NTgxMjI3ICAtPiAgIDEuNjg3ODMyMzYwMjc0MTA2NTE5MDk0MjY1NDcxMDA0OTQzMzgwODIwODI5MTU2NDA0OSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTIyIGxvZzEwIDAuMDAwNzQ4MzAzMTA5MzAwNDY4NjUwMDk4NTE3MDY5ODk0MzAyMjg1NjE4ODAyMjEwNjMgLT4gIC0zLjEyNTkyMjQ1MDIyMDk5NzQwODIyMjM2Njc3MTIwMTY0NDU1NzI0MzE3OTE5MjA2MTggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUyMyBsb2cxMCAzNi42NzczNDg4ODUxMTE1OTMzODQwMjA4MzY3MjAzOTYyNjI0OTcxMjI3MDg1OTgzNTkgIC0+ICAgMS41NjQzOTc5MzY0MjYwNzk2MDg2NzU0NTMwMjgyMzAyNjA1NDc3NTY3NDY5Mzk1NDI1IEluZXhhY3QgUm91bmRlZAotbG9neDI1MjQgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDAwNDQ5NTY3ODU2MDQ4MDQzMjg1ODgxMjQxOTE0NTgzMzc0NCAtPiAtMTYuMzQ3MjA0NzQ4MjM5NzQwNTEwMDE0MzIwNjMwMzYzMjQ0MDE1OTE2MDI5NjE5NTYxIEluZXhhY3QgUm91bmRlZAotbG9neDI1MjUgbG9nMTAgOTUwOS41ODU0MDEzNjUwNjQyNzk5Mzc0MTU5MTMxOTQwMTA4NzQ4NTk0Nzc0MzA3MTA0ICAtPiAgIDMuOTc4MTYxNTgyOTkxNjMyNjc0MTEwMDE2NjUxOTcyNjgyNDQzMDk0NTQwNjMwMjY2MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTI2IGxvZzEwIDAuMDc4MzQ4OTEyNjg2ODkxNzcwMTQwNDQ0NTQ3OTM2MDg3MTUyNzY2MTU3NDM4MTkwOTcgLT4gIC0xLjEwNTk2NzAyNjIxOTc2NDMxNDc4MDU1MTczOTg2MjEyODg4OTc2Njk4NzY5OTYzNDggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUyNyBsb2cxMCAwLjAwMDAwMDI5NTg0NTI5ODgwNzA2MTI4NDQ0NDU0Njg4NDU0OTk5MDMyODAxOTA0Nzk0IC0+ICAtNi41Mjg5MzUzMjc1ODE0MDQzNzEwMDc2NTI2OTIwNTY2NzIxNTcwMzc1MDI2OTE3MjA2IEluZXhhY3QgUm91bmRlZAotbG9neDI1MjggbG9nMTAgMy4wNzEzNDk2NTQ0NDk3NjE4MDk4Nzk0MzMyNzg3NzcyMTg2MTc2OTgxMDExOTA0Mjk0ICAtPiAgIDAuNDg3MzI5MjYxMDM4OTY4Mjg1NDY0MjQzNDEwMjk0OTI0NjgxMDA0MzE0MTQwNzI5OTQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUyOSBsb2cxMCAzNTIuNjYzOTI2NzA3ODg4MTY0NzQ0MDc0NDI3ODU0NjA4MDM4MzM5MjcxMzY0MTM5NDMgIC0+ICAgMi41NDczNjEwMzg4MTk5NTYyNzE0NzA5ODM2Mzk4MjQzOTMzMzIwMjg0MDc3MDA4MzE0IEluZXhhY3QgUm91bmRlZAotbG9neDI1MzAgbG9nMTAgMC4wMDMwNDc0MzEyNTE4MTg3NjI2NzIxMDUxNjUyNzM2MTc0MjE4NTYxNzA5MTgwMTY1MCAtPiAgLTIuNTE2MDY2MDgzMDE2Mzk4MTk2Nzc3NDEyNDc0NTMxMTQ5NzQ0NzA1MDA1NjQwMDIwNyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTMxIGxvZzEwIDAuMDAwMDAwNzYxMjA1MzU4OTQ5NTIxMzY0OTkyNTAzNjQ2MDQ1MzgxMTc3Mjk0MzcxODMgLT4gIC02LjExODQ5ODE2MjkwNDcwNTE1MzI0NDg0MTM4NjM5NTA3NzY0OTY2NTI0ODMwMTk0MTUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUzMiBsb2cxMCA3NjkuODg3OTU5Nzg1MzQzNTMwNTI5NjUyODYxOTUwNTM3MzUwMDc0NzMxODc3MzU4MTUgIC0+ICAgMi44ODY0Mjc1Mjc3ODYyNjUyNzA5OTg2NDk4NTgxMDY0MTE3OTUwMjg4Nzk4MjIyMTAwIEluZXhhY3QgUm91bmRlZAotbG9neDI1MzMgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDA0MTI5NzQ5NDgwODYxMjIyNjMwNDYxOTU3MDAxNjMzNjE4OCAtPiAtMTUuMzg0MDc2MjkyNzQ1NDE1OTE3NTEwNjY4NDU0MzYxODY4NjU5NDY4NjY5ODA0NzEwIEluZXhhY3QgUm91bmRlZAotbG9neDI1MzQgbG9nMTAgODYwLjg4ODY0NTk1NzE0NDI2OTQwMjQ3OTQwOTYwMjU4NTU4ODc2OTAzNzQxOTY2OTc0ICAtPiAgIDIuOTM0OTQ2OTgwMDU1NDI3NzkxNTkyMDI3ODA5MDY0NzI4MzIzMzQ0MDg1OTE1NTE3NiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTM1IGxvZzEwIDU4MzkuMDMyODgxMjk5NDc4NzIzNTkwMDE3ODU4NzM3MTA1MTA5Njg5ODY4Mzk3MjQ0NCAgLT4gICAzLjc2NjM0MDkyMDg5NzIzOTI1NjkyNjkxMjU1Mzk0Mzg4NzQ3MzcxNDc5MDYyMzg1NDMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUzNiBsb2cxMCAwLjAwMDAwMDI4NTMyNzEwMTUxMjg0ODQwNDcxNjcwNDk3MTEyODIxMjAxNTk4Mzc3ODQxIC0+ICAtNi41NDQ2NTY5NzUzNTE0MDI3Njc1ODc4ODc5ODQzMjM4MDY1NDg4NDkwNjE4MTU5NDkwIEluZXhhY3QgUm91bmRlZAotbG9neDI1MzcgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDAwOTczNDQ5MDA1OTkzMTYzODQ4MzQ0NTYzMTgzNTY1MTU4MSAtPiAtMTYuMDExNjg2Nzk0MDExMjcxMTM1OTc4NjMzODgwODY0Mjc4NjkyMjU0MjQzMTA2OTMxIEluZXhhY3QgUm91bmRlZAotbG9neDI1MzggbG9nMTAgNS44NjEwOTQ5NTI2NDM5NTI5NDg5MjUyMzAyNDYzNDUwMzAyOTgxNTExNzE0MTQ0MzMwICAtPiAgIDAuNzY3OTc4NzU3MjI0NTI1NDkyODEwMjg1NTIwNjc2NDU3MzI0OTA5MjkzNjE5NTIyNzggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjUzOSBsb2cxMCA2LjYyODI0MzIyMjExMTU5MjMzNzIxNTExNDg5OTAxMzcxNzk2MTE5Nzc1NzYzMjcyMDYgIC0+ICAgMC44MjEzOTg0MzYzOTIyNzIxMzIxMTAxMjA0NDAwMDc4NTc1NzI2NzE1NTczNjA3MTM2MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyNTQwIGxvZzEwIDAuMDAwMDAwMDAwMDE5OTQwNzE4NjIzODY4NDY2MjY5NTQ4MTk5MjM5MjMzNDQ0MTM0NTQgLT4gLTEwLjcwMDI1OTE5NDYzMjMzOTk4MDI2NjU1OTIyNDQ0NzIxMjI2MDExNTAyMTYzNzYyNiBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUD0zNCwgd2l0aGluIDAtOTk5OQotUHJlY2lzaW9uOiAzNAotbG9neDIyMDEgbG9nMTAgMS41MjI1MTMyMDM4ODk3MTQxNzkwODgzMjczMjg4NjQxODMgIC0+IDAuMTgyNTYxMDY3NzA5ODg5NjI1MDQ5NjY1MTMzMDQ5MjEwOSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjAyIGxvZzEwIDAuMTcxMTIzNzc0NzY5NzE3MzE2MTU0MDgwODg4OTMwNDA0ICAtPiAtMC43NjY2ODk2NDgzNTQ4NDYyNTgyNDYxODk4MDkyNzY0NDA4IEluZXhhY3QgUm91bmRlZAotbG9neDIyMDMgbG9nMTAgMC4wMDAwMDAwOTk3NDY3MjM2MjUxNzE0MjgzMTA0OTYzODM4IC0+IC03LjAwMTEwMTM2MDY1MjUxODI3NDI3MTU2OTAxMDMxMjExNSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjA0IGxvZzEwIDAuMDAwODg1NjEwMzYyNDEyMjQ3OTc2OTY0NzU0MzQ2ODYzMyAtPiAtMy4wNTI3NTczMTA0NzYwNzA4OTE4MzA0OTAzMjcxMzgxOTAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIwNSBsb2cxMCAxLjkzODI3NDg2ODczODAzMjkzMDcwOTQ5ODIyMTIzNjc1OCAgLT4gMC4yODc0MTUzNjQ4MjU5NDQ5NTIwMjAxNTM2MTcxNzE0NTk0IEluZXhhY3QgUm91bmRlZAotbG9neDIyMDYgbG9nMTAgNDc5LjU2Njc4NDc4MjM4MjY3MTMwODI2MTM0NDUwMTAwOTcgIC0+IDIuNjgwODQ5MDk1ODUwMzYxMDY4NzA5MTY1MTU3Mjg2NDM1IEluZXhhY3QgUm91bmRlZAotbG9neDIyMDcgbG9nMTAgODg1Ni4xMzY1OTkxNzg4MjAyMDIxNDE4MjMxNTczMzY4MDQgIC0+IDMuOTQ3MjQ0MzA2NTg0NzY3MTAxNDgwNDU0MjYxOTUwNTU5IEluZXhhY3QgUm91bmRlZAotbG9neDIyMDggbG9nMTAgMC4wMDAwOTExMDI2MzE4ODAxOTAzOTgyNjQyODcxMzQ0ODU4IC0+IC00LjA0MDQ2OTA3NjQzNDk3OTM5ODQzODYxNzQ2NDAzMzgyNiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjA5IGxvZzEwIDAuMDAwMDAwMDAwMDAxNzI3MTExMjY1MDQyNzQxNDczMjYzMCAtPiAtMTEuNzYyNjc5NjgzMTQwMzg3NDg5OTUxNzgyMTI2NTQ5MjEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIxMCBsb2cxMCA2Ljk2MjYwNTM3MDA3ODg4NTY0NzYzOTUwMzU0ODIyOTY5NSAgLT4gMC44NDI3NzE3ODA3MjAwMzIyMzUyNjg2Mzk2OTI1OTkyMjUwIEluZXhhY3QgUm91bmRlZAotbG9neDIyMTEgbG9nMTAgMC4zMzU0ODA0NDI4OTkyNzkzMTMyODU1OTIzNTQxNjkyNzgxIC0+IC0wLjQ3NDMzMjc5MjMwMTIxNTkxNzA5Njc2MzYwNzA4NDQ4MzQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIxMiBsb2cxMCAyLjA3OTg2NDI1NzQ3NDg1OTAwODI1MjE2NTgzNjY2MzUwNCAgLT4gMC4zMTgwMzQ5OTE2MTk4MDU5MDQ2ODEyNTA2NzQxMzg4ODU2IEluZXhhY3QgUm91bmRlZAotbG9neDIyMTMgbG9nMTAgMjgwNS40Nzk1MjkyOTI5Mzk0OTkyMjAyNzY5ODY2MjE5ODggIC0+IDMuNDQ4MDA3MTA0MTM5OTc0MzQ0NTY1OTc4NzgwNjI0NzQ0IEluZXhhY3QgUm91bmRlZAotbG9neDIyMTQgbG9nMTAgNjYuNDU3MzExMzMwMzQxODczNzQ1NTcwMjg1MzcyMTM5NDkgIC0+IDEuODIyNTQyNzY3MDA1NjQ0MDQxNjYxNTIwOTM2MjIzMDg2IEluZXhhY3QgUm91bmRlZAotbG9neDIyMTUgbG9nMTAgMC4wMDAwMDAxMjA2NTIxMjYxNzYyNjgxNzM4Mjc0ODIyODM1IC0+IC02LjkxODQ2NTAyMDM5MDIxNjk2OTU2MTQ5NDc1NTc2NzMxOCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjE2IGxvZzEwIDAuMDAwMDAwMDAwMTg4NDg5MTkxNjI2NDQwMTE2MDQ3MjM4MSAtPiAtOS43MjQ3MTM1NDgxMTkwNjUzODYwOTE5MzMwMDc1Mjg2MzMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIxNyBsb2cxMCAwLjAwMDAwMTU0NjcyNzk1NTE3MjYzMjY1ODEzMTQ1ODI3NTkgLT4gLTUuODEwNTg2MDY1MDcwNDM1MzgzNzU1NzU5NTE0NjA4NzM4IEluZXhhY3QgUm91bmRlZAotbG9neDIyMTggbG9nMTAgMC4wMDkwNzc2MzE2NzI4MDY4NTg2NzQ0NjMzOTE0MTM1OTUyIC0+IC0yLjA0MjAyNzQ0Mjg0Mzc0NTg4NDUwMzI4MDk1NDM5MDExNCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjE5IGxvZzEwIDAuMDAwMDAwMDAwMDAyNDU0MTEwNjUyODcxMzM5Mzc0MDAzMCAtPiAtMTEuNjEwMTA1ODU5MzU2MzU3MTMwOTAxMTkxNTYwNjk0NzkgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIyMCBsb2cxMCAxNC4xMjkzNjg3OTM4NTg2MzQxMDA4MTA4Nzc1MDY0NTg1NiAgLT4gMS4xNTAxMjI3NjA4OTU0NjY5ODk4NDEwNTczODU3NDI2NjIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIyMSBsb2cxMCAwLjAwMDAwMzY5MTI0ODE4MzEzOTI5MjI5MjI2NDcyMzEzOTIgLT4gLTUuNDMyODI2NzUzNzg5ODkyMjgzNTU2MjExMzgwODI0MjAzIEluZXhhY3QgUm91bmRlZAotbG9neDIyMjIgbG9nMTAgMC4wMDAwMDAwMDA0MDY3NDc3NTI1NDIwNDI0MjcwMTM4NzM0IC0+IC05LjM5MDY3NDgzODA1MDA3MzEyMjg1Nzg2ODAxMjQ3NTA2MCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjIzIGxvZzEwIDcwODAuMTIyNTYyNzA1Mzk5NzQ0OTY5MzE5NTg5ODA2MTk0ICAtPiAzLjg1MDA0MDc3NTc0NzEwMzMxODcyNDMzMDA0NzU0NjkxNiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjI0IGxvZzEwIDI2MS4zNDkxNDExMzYzNjc5MjA5MTc1NTI0NzkwMjU1NzI1ICAtPiAyLjQxNzIyMTA3NzIyNzUzNjMxOTY1NTY5OTUxNzUzMDg1NSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjI1IGxvZzEwIDAwMy45OTQ1NTgxNDQ5OTE1MjQwMDk0NzI4MzgwMDQxNDk0ICAtPiAwLjYwMTQ2ODc0NzE1MzE5ODgyNjA4MjMwNjY5OTc4NDU2OTEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIyNiBsb2cxMCAwLjAwMDAwMDAwMDA1ODM1NDkxNjQ1ODg0OTUyMDY3Njc4NDAgLT4gLTEwLjIzMzkyMjU0ODM0MTgyNjc3MDIzMjMxNzEzNTE5MzQxIEluZXhhY3QgUm91bmRlZAotbG9neDIyMjcgbG9nMTAgOTU2Ny45NjE4MzI2MDcyNDAyNzgzNDI3NjEwODg0ODc0ODQgIC0+IDMuOTgwODE5NDM0MjExMTA3NjMxNTY5Mzg2MTQ3MDE2MzY4IEluZXhhY3QgUm91bmRlZAotbG9neDIyMjggbG9nMTAgMDYuMjY1OTI5NzkxNjAzNDI5NzI3NzcyMTk4Mjg4NjcwMzMgIC0+IDAuNzk2OTg1NTI0Mzk2NjIyMTQwODU5NTAyNDAxMjU3NDcyOSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjI5IGxvZzEwIDAuMDAwMDAwMDAwMDU4OTg0NzA0NjU5ODA2NzI3MzI4NzMxOSAtPiAtMTAuMjI5MjYwNTkwNzgyMDYyMTg3MTc3NTUyNTM1ODI5MDcgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIzMCBsb2cxMCA1NjcuOTM4ODY0ODIzNTU4OTIwNDc2OTQ0Mjg2MzcyNDk5NyAgLT4gMi43NTQzMDE1ODkwNTgzMTM1NzY0NzIzODAyNjI5MDc2MzggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIzMSBsb2cxMCAwMzkuNzc5MDMyNTQ4MDAzNzc3ODkxODE2MjI2NDg4MzQxNSAgLT4gMS41OTk2NTQyMTY1OTIwMTkxOTk2MzkyODUzMDg5OTc4ODYgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIzMiBsb2cxMCAwLjAwMDAwMDAwMDUxMjM5NTE5MjE4OTQxNjIxNDk4MTcyMDcgLT4gLTkuMjkwMzk0OTUzODk4ODYyNjk0ODQ3MzI3MTM3MjQyNjkwIEluZXhhY3QgUm91bmRlZAotbG9neDIyMzMgbG9nMTAgMC4wMDAwMDAwMDAwMDM4NTAwOTk5NzIzNjM2OTA0Mjc2NzIzIC0+IC0xMS40MTQ1Mjc5OTMzNzkyNDA1NjE4Njg2NzMyNDg1NDY5MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjM0IGxvZzEwIDAuMDAwNjcyNjUwMDY1ODk3Nzc1OTgyNTYxNjUzNzkzNTg2NCAtPiAtMy4xNzIyMTA4MTA5MjI3Njg3MjU2ODc2NzE4NDk0MjE3OTIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIzNSBsb2cxMCAyNjAuMjQwMDI1MDQ3NTk2NzUyODQyOTk0Mzc3OTEyNjUwNyAgLT4gMi40MTUzNzQwOTIwNzM3OTkyMDQyMzY4MDEzODMwNzAwNjQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjIzNiBsb2cxMCAwLjAwMDAwMDAwMDYxMDE5NDIzMzkzODUxMDI1ODUwNDI1NDggLT4gLTkuMjE0NTMxOTAwNTYyMDQ2NTU3MTkxMjYxMjI2NjMyNTA5IEluZXhhY3QgUm91bmRlZAotbG9neDIyMzcgbG9nMTAgMC4wMDAwMDAwMDEwODQ2ODY3NTAxMzgyNzQ2NzYwMDY2NTU3IC0+IC04Ljk2NDY5NTY2NDg4MzI4MjQwNjM1OTg3NDI0MjM4NzIzNiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjM4IGxvZzEwIDYwLjI0MDc4Mzc1NTY4ODE0NzY5MDEwMzMzNzExNTA5OTI4ICAtPiAxLjc3OTg5MDYxMzU2NzA4NDI1MzE2ODM3MzI2NjY0ODkyMiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMjM5IGxvZzEwIDAuMDAxMjA1ODczODcxMTc1NzY2OTMzNzYwMDI1Mjk4NjA5MyAtPiAtMi45MTg2OTgxMTUwMTI2MDU5MTU3NTM3MjgyMjA4OTYwMTAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjI0MCBsb2cxMCAyMzAuOTQ1MDkzMDE5Nzg0MTYwMDYxMTUwMzA5NTE4NTYwMCAgLT4gMi4zNjM1MDg3MzkwNTY4MjI4NDY3NDI5NDI1OTk2Mjg5NjYgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFA9MTYsIHdpdGhpbiAwLTk5OQotUHJlY2lzaW9uOiAxNgotbG9neDIxMDEgbG9nMTAgMC4wMDcyMDY3MTE5NjA1MTg0IC0+IC0yLjE0MjI2MjgzNTU3MzAzOCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTAyIGxvZzEwIDUwMy42ODI4NDgyMjI2NjI0ICAtPiAyLjcwMjE1NzE2MjE5NTY1MiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTAzIGxvZzEwIDY0Ljk2MDc0NDQ3ODIxODE1ICAtPiAxLjgxMjY1MDk5MzQ2NDE3NCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTA0IGxvZzEwIDQ4Ljc1NDA4NTk3NDY3MjQ2ICAtPiAxLjY4ODAxMTAxODg0MjYwMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTA1IGxvZzEwIDAuMDMyOTAwOTgzOTI2OTU4NyAtPiAtMS40ODI3OTExMTM5NzUyODAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEwNiBsb2cxMCAyMjMuNTMyMDQxNTA2MDYzMyAgLT4gMi4zNDkzMzk3ODQ1MjM0MTAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEwNyBsb2cxMCA3My4xMjc2NTAwMjI5MjE5NCAgLT4gMS44NjQwODE2MTc0NzYyNjggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEwOCBsb2cxMCA0ODcuMzc0OTM3ODM1ODUwOSAgLT4gMi42ODc4NjMxOTI4MDIyNTIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEwOSBsb2cxMCAwLjAwMDAwMTk2NzE5ODc2MjEgLT4gLTUuNzA2MTUxNzU3NTU3OTI2IEluZXhhY3QgUm91bmRlZAotbG9neDIxMTAgbG9nMTAgMC4wNTcwNjgwNjYwNjA5Nzg0IC0+IC0xLjI0MzYwNjg0NDY5Nzg3MyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTExIGxvZzEwIDMzLjEwMzExNjM4Nzg4OTk4ICAtPiAxLjUxOTg2ODg4MDk3Njc3MyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTEyIGxvZzEwIDAuMDY4NzM4MjY5OTE4NzA3NyAtPiAtMS4xNjI4MDE0MDI4NjgxODUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjExMyBsb2cxMCAyNTguOTQxNjE5MzYyNjQ4NCAgLT4gMi40MTMyMDE4NTk2NTQxNDUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjExNCBsb2cxMCAwLjAwMDUzMDYxMDAxMzY3MzYgLT4gLTMuMjc1MjI0NTU4MjY5NzI1IEluZXhhY3QgUm91bmRlZAotbG9neDIxMTUgbG9nMTAgNjUuNzg0OTAzOTM0MDg1NzIgIC0+IDEuODE4MTI2MjQ0ODI1MTA5IEluZXhhY3QgUm91bmRlZAotbG9neDIxMTYgbG9nMTAgNTA0LjIzMjg4NDIwNzM1MTAgIC0+IDIuNzAyNjMxMTY1MzQ2OTU4IEluZXhhY3QgUm91bmRlZAotbG9neDIxMTcgbG9nMTAgOS40MTc0MzI3NTU4MTUwMjcgIC0+IDAuOTczOTMyNTI3ODUyNDUwMyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTE4IGxvZzEwIDAwNi43MDU0ODM1MzU1NDk4ICAtPiAwLjgyNjQzMDEwMDQ5NDc2NDAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjExOSBsb2cxMCAwLjA5MTcwMTIyNzIzNjM5MTUgLT4gLTEuMDM3NjI0ODUyMTMzMzk5IEluZXhhY3QgUm91bmRlZAotbG9neDIxMjAgbG9nMTAgNS45NTk0MDQzODUyNDQ5MjEgIC0+IDAuNzc1MjAyODU2MTk1MzQwMSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTIxIGxvZzEwIDAuMDAwMTIwOTc1OTE0ODQ4NiAtPiAtMy45MTczMDEwODQ5Njg5MDMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEyMiBsb2cxMCAwLjAwMDQ3MDYxMTIxMzk4MzggLT4gLTMuMzI3MzM3NzI4NDI4MDM5IEluZXhhY3QgUm91bmRlZAotbG9neDIxMjMgbG9nMTAgMC4wMDY5NzAwNDU3Mzc3MDQ2IC0+IC0yLjE1Njc2NDM3MjAzNTc3MSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTI0IGxvZzEwIDAuNTE1NTU4NDU2OTg1MjYxOSAtPiAtMC4yODc3MjIwODQ3ODA1MDI1IEluZXhhY3QgUm91bmRlZAotbG9neDIxMjUgbG9nMTAgODguMDYwMDU4ODU2MDc0MTQgIC0+IDEuOTQ0Nzc4OTcxMzg5OTEzIEluZXhhY3QgUm91bmRlZAotbG9neDIxMjYgbG9nMTAgMC4wNDQ4MjQwMDM4MjE5ODY2IC0+IC0xLjM0ODQ4OTM1MzUwOTcwOSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTI3IGxvZzEwIDMuNDE5NjIyNDg0MDU5NTY1ICAtPiAwLjUzMzk3ODE2MzkxMDExNDUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEyOCBsb2cxMCA1LjE3MTEyMzM1Mzg1ODcyMSAgLT4gMC43MTM1ODQ4OTc3MTQyODU0IEluZXhhY3QgUm91bmRlZAotbG9neDIxMjkgbG9nMTAgMC4wMDAyMTMzMTg4MzE5ODA3IC0+IC0zLjY3MDk3MDgwMjk0NTg3MiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTMwIGxvZzEwIDQ2LjIxMDg2NzAzMTM2OTY2ICAtPiAxLjY2NDc0NDExNzA0NTE0OSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTMxIGxvZzEwIDAuMDAwMDYzMTA1MzcxNDQxNSAtPiAtNC4xOTk5MzM2NzI2Mzk4ODAgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEzMiBsb2cxMCA3OC42NjAxOTE5Njg3MDY5OCAgLT4gMS44OTU3NTUwMDE5NjI0NjkgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEzMyBsb2cxMCAwLjAwMDcxNTIyNzgzNTExODggLT4gLTMuMTQ1NTU1NTkyMDgyMjk3IEluZXhhY3QgUm91bmRlZAotbG9neDIxMzQgbG9nMTAgNDUuNTI1MDk4MTk5Mjg1MzYgIC0+IDEuNjU4MjUwODkxMjU2ODkyIEluZXhhY3QgUm91bmRlZAotbG9neDIxMzUgbG9nMTAgMC4wMDAwNzAzMjI3Nzk1NzQwIC0+IC00LjE1MjkwMzk3MTY5NzE4MyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTM2IGxvZzEwIDI2LjI0NDM4NjQxNDI2NjY5ICAtPiAxLjQxOTAzNjQyMzU1MDU5OSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTM3IGxvZzEwIDAuMDAwMDA0NDY1NDgyOTUzNSAtPiAtNS4zNTAxMzE1NjQxNjY4MTcgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjEzOCBsb2cxMCAwLjczNjA3MDI3MzMwNjI1MjkgLT4gLTAuMTMzMDgwNzIxMTg5MzYxMSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMTM5IGxvZzEwIDguNDE3MDU5MTc2NDY5NjU1ICAtPiAwLjkyNTE2MDM4MDUxMTI3NzggSW5leGFjdCBSb3VuZGVkCi1sb2d4MjE0MCBsb2cxMCAwLjAwMDI5MjY1NzA3Njc5NjggLT4gLTMuNTMzNjQwOTY5NjY0ODE4IEluZXhhY3QgUm91bmRlZAotCi0tLSBQPTcsIHdpdGhpbiAwLTk5Ci1QcmVjaXNpb246IDcKLWxvZ3gyMDAxIGxvZzEwIDU3LjI2MDg5ICAtPiAxLjc1Nzg1OCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDAyIGxvZzEwIDAuMDU3NTQyMSAtPiAtMS4yNDAwMTQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAwMyBsb2cxMCAwLjU5MTg0NjUgLT4gLTAuMjI3NzkwOSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDA0IGxvZzEwIDAuMDA2ODc3NiAtPiAtMi4xNjI1NjMgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAwNSBsb2cxMCAwLjAwNjY4MzMgLT4gLTIuMTc1MDA5IEluZXhhY3QgUm91bmRlZAotbG9neDIwMDYgbG9nMTAgOS45MjY5NjMgIC0+IDAuOTk2ODE2NCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDA3IGxvZzEwIDAuMDA0MTg1MiAtPiAtMi4zNzgyODQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAwOCBsb2cxMCA4NC4xNTQxMiAgLT4gMS45MjUwNzUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAwOSBsb2cxMCAyLjQ2Njg1NiAgLT4gMC4zOTIxNDM4IEluZXhhY3QgUm91bmRlZAotbG9neDIwMTAgbG9nMTAgMC4wMDU4MDQ3IC0+IC0yLjIzNjIyMCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDExIGxvZzEwIDkuODg1MTU0ICAtPiAwLjk5NDk4MzQgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAxMiBsb2cxMCAwLjY2Njc2NTQgLT4gLTAuMTc2MDI2OSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDEzIGxvZzEwIDM0LjY1NzM2ICAtPiAxLjUzOTc5NSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDE0IGxvZzEwIDAuMDAyNjg4NCAtPiAtMi41NzA1MDYgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAxNSBsb2cxMCAwLjA0MzI3NjcgLT4gLTEuMzYzNzQ2IEluZXhhY3QgUm91bmRlZAotbG9neDIwMTYgbG9nMTAgNjYuMDE0MDcgIC0+IDEuODE5NjM3IEluZXhhY3QgUm91bmRlZAotbG9neDIwMTcgbG9nMTAgMC4wMDcwNTcyIC0+IC0yLjE1MTM2OCBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDE4IGxvZzEwIDAuMDczMTYxMyAtPiAtMS4xMzU3MTkgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAxOSBsb2cxMCA5LjgzODk4MyAgLT4gMC45OTI5NTAyIEluZXhhY3QgUm91bmRlZAotbG9neDIwMjAgbG9nMTAgMTUuODk2OTYgIC0+IDEuMjAxMzE0IEluZXhhY3QgUm91bmRlZAotbG9neDIwMjEgbG9nMTAgOC40NTkyNDcgIC0+IDAuOTI3MzMxNyBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDIyIGxvZzEwIDAuMDAxMDg3MyAtPiAtMi45NjM2NTEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAyMyBsb2cxMCAwLjY0OTg2MTkgLT4gLTAuMTg3MTc4OSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDI0IGxvZzEwIDAuMDg0NzAwOCAtPiAtMS4wNzIxMTIgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAyNSBsb2cxMCAwLjAwNzU0ODkgLT4gLTIuMTIyMTE2IEluZXhhY3QgUm91bmRlZAotbG9neDIwMjYgbG9nMTAgNTEuMTExNTIgIC0+IDEuNzA4NTE5IEluZXhhY3QgUm91bmRlZAotbG9neDIwMjcgbG9nMTAgMC43MjMzODY2IC0+IC0wLjE0MDYyOTUgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAyOCBsb2cxMCAyLjI1NDcyMSAgLT4gMC4zNTMwOTI4IEluZXhhY3QgUm91bmRlZAotbG9neDIwMjkgbG9nMTAgNi41Njg0NDQgIC0+IDAuODE3NDYyNSBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDMwIGxvZzEwIDgzLjcyNjM5ICAtPiAxLjkyMjg2MiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDMxIGxvZzEwIDYuNzIwNTg1ICAtPiAwLjgyNzQwNzEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAzMiBsb2cxMCA4Ny45MDM2NiAgLT4gMS45NDQwMDcgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAzMyBsb2cxMCAwLjA0MzMzMjQgLT4gLTEuMzYzMTg3IEluZXhhY3QgUm91bmRlZAotbG9neDIwMzQgbG9nMTAgMzQuNjM5MTIgIC0+IDEuNTM5NTY3IEluZXhhY3QgUm91bmRlZAotbG9neDIwMzUgbG9nMTAgMC44MDg5MDU5IC0+IC0wLjA5MjEwMjAwIEluZXhhY3QgUm91bmRlZAotbG9neDIwMzYgbG9nMTAgNy43OTM0MDUgIC0+IDAuODkxNzI3MiBJbmV4YWN0IFJvdW5kZWQKLWxvZ3gyMDM3IGxvZzEwIDAuMDA0MTc1NyAtPiAtMi4zNzkyNzEgSW5leGFjdCBSb3VuZGVkCi1sb2d4MjAzOCBsb2cxMCA3LjEzNTQxNyAgLT4gMC44NTM0MTk0IEluZXhhY3QgUm91bmRlZAotbG9neDIwMzkgbG9nMTAgMTIuNDk1NzAgIC0+IDEuMDk2NzYxIEluZXhhY3QgUm91bmRlZAotbG9neDIwNDAgbG9nMTAgNi4zNTYyNzYgIC0+IDAuODAzMjAyNyBJbmV4YWN0IFJvdW5kZWQKLQotLS0tLS0tLS0KLW1heEV4cG9uZW50OiAzODQKLW1pbkV4cG9uZW50OiAtMzgzCi1wcmVjaXNpb246ICAgMTYKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLQotLS0gc3BlY2lhbCB2YWx1ZXMKLWxvZ3g4MjAgIGxvZzEwICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQotbG9neDgyMSAgbG9nMTAgICAwICAgICAgICAtPiAgLUluZmluaXR5Ci1sb2d4ODIyICBsb2cxMCAgIE5hTiAgICAgIC0+ICAgTmFOCi1sb2d4ODIzICBsb2cxMCAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbgotLS0gcHJvcGFnYXRpbmcgTmFOcwotbG9neDgyNCAgbG9nMTAgICBzTmFOMTIzICAtPiAgIE5hTjEyMyAgSW52YWxpZF9vcGVyYXRpb24KLWxvZ3g4MjUgIGxvZzEwICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uCi1sb2d4ODI2ICBsb2cxMCAgIE5hTjQ1NiAgIC0+ICAgTmFONDU2Ci1sb2d4ODI3ICBsb2cxMCAgIC1OYU42NTQgIC0+ICAtTmFONjU0Ci1sb2d4ODI4ICBsb2cxMCAgIE5hTjEgICAgIC0+ICAgTmFOMQotCi0KLS0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zCi0tLSBbbmV4dCB0d28gcHJvYmFibHkgc2tpcHBlZCBieSBtb3N0IHRlc3QgaGFybmVzc2VzXQotcHJlY2lzaW9uOiAxMDAwMDAwMDAKLWxvZ3g5MDEgIGxvZzEwIDEgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAotcHJlY2lzaW9uOiAgOTk5OTk5OTkKLWxvZ3g5MDIgIGxvZzEwIDAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dAotCi1wcmVjaXNpb246IDkKLW1heEV4cG9uZW50OiAgIDEwMDAwMDAKLW1pbkV4cG9uZW50OiAgIC05OTk5OTkKLWxvZ3g5MDMgIGxvZzEwIDEgICAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0Ci1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogICAtOTk5OTk5Ci1sb2d4OTA0ICBsb2cxMCAwIC0+ICAtSW5maW5pdHkKLW1heEV4cG9uZW50OiAgICA5OTk5OTkKLW1pbkV4cG9uZW50OiAgLTEwMDAwMDAKLWxvZ3g5MDUgIGxvZzEwIDEgICAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0Ci1tYXhFeHBvbmVudDogICAgOTk5OTk5Ci1taW5FeHBvbmVudDogICAtOTk5OTk4Ci1sb2d4OTA2ICBsb2cxMCAwIC0+ICAtSW5maW5pdHkKLQotLS0gTnVsbCB0ZXN0Ci1sb2d4OTAwICBsb2cxMCAjICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gbG9nMTAuZGVjVGVzdCAtLSBkZWNpbWFsIGxvZ2FyaXRobSBpbiBiYXNlIDEwICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoaXMgZW1waGFzaXNlcyB0aGUgdGVzdGluZyBvZiBub3RhYmxlIGNhc2VzLCBhcyB0aGV5IHdpbGwgb2Z0ZW4NCistLSBoYXZlIHVudXN1YWwgcGF0aHMgKGVzcGVjaWFsbHkgdGhlIDEwKipuIHJlc3VsdHMpLg0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDE2DQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KKy0tIGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24NCitwcmVjaXNpb246ICAgOQ0KK2xvZ3hzMDAwIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitsb2d4czAwMSBsb2cxMCAgMC4wMDEgICAgICAgICAgICAgLT4gLTMNCitsb2d4czAwMiBsb2cxMCAgMSAgICAgICAgICAgICAgICAgLT4gIDANCitsb2d4czAwMyBsb2cxMCAgMiAgICAgICAgICAgICAgICAgLT4gIDAuMzAxMDI5OTk2ICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorbG9neHMwMDQgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxDQorbG9neHMwMDUgbG9nMTAgIDcwICAgICAgICAgICAgICAgIC0+ICAxLjg0NTA5ODA0ICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3hzMDA2IGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCisNCisNCistLSBiYXNpY3MgKGV4YW1wbGVzIGluIHNwZWNpZmljYXRpb24sIGV0Yy4pDQorcHJlY2lzaW9uOiAgIDE2DQorbG9neDAwMDAgbG9nMTAgIDAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2xvZ3gwMDAxIGxvZzEwICA3RS0xMDAwICAgICAgICAgICAtPiAtOTk5LjE1NDkwMTk1OTk4NTcgICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAwMiBsb2cxMCAgMS4xRS05ICAgICAgICAgICAgLT4gLTguOTU4NjA3MzE0ODQxNzc1ICAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMDMgbG9nMTAgIDAuMDAwNyAgICAgICAgICAgIC0+IC0zLjE1NDkwMTk1OTk4NTc0MyAgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDA0IGxvZzEwICAwLjExICAgICAgICAgICAgICAtPiAtMC45NTg2MDczMTQ4NDE3NzUwICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAwNSBsb2cxMCAgMC43ICAgICAgICAgICAgICAgLT4gLTAuMTU0OTAxOTU5OTg1NzQzMiAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMDYgbG9nMTAgIDEgICAgICAgICAgICAgICAgIC0+ICAwDQorbG9neDAwMDcgbG9nMTAgIDEuNSAgICAgICAgICAgICAgIC0+ICAwLjE3NjA5MTI1OTA1NTY4MTIgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDA4IGxvZzEwICAyICAgICAgICAgICAgICAgICAtPiAgMC4zMDEwMjk5OTU2NjM5ODEyICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAwOSBsb2cxMCAgMi43MTgyODE4Mjg0NTkwNDUgLT4gIDAuNDM0Mjk0NDgxOTAzMjUxOCAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMTAgbG9nMTAgIDIuNzE4MjgxODI4NDU5MDQ2IC0+ICAwLjQzNDI5NDQ4MTkwMzI1MTkgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDExIGxvZzEwICAyLjcxODI4MTgyODQ1OTA0NyAtPiAgMC40MzQyOTQ0ODE5MDMyNTIxICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAxMiBsb2cxMCAgNyAgICAgICAgICAgICAgICAgLT4gIDAuODQ1MDk4MDQwMDE0MjU2OCAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMTMgbG9nMTAgIDEwICAgICAgICAgICAgICAgIC0+ICAxDQorbG9neDAwMTQgbG9nMTAgIDEwLjUgICAgICAgICAgICAgIC0+ICAxLjAyMTE4OTI5OTA2OTkzOCAgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDE1IGxvZzEwICAxMSAgICAgICAgICAgICAgICAtPiAgMS4wNDEzOTI2ODUxNTgyMjUgICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAxNiBsb2cxMCAgNzAgICAgICAgICAgICAgICAgLT4gIDEuODQ1MDk4MDQwMDE0MjU3ICAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMTcgbG9nMTAgIDk5OTkgICAgICAgICAgICAgIC0+ICAzLjk5OTk1NjU2ODM4MDE5MiAgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDE4IGxvZzEwICAxLjIxRTYgICAgICAgICAgICAtPiAgNi4wODI3ODUzNzAzMTY0NTAgICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MDAxOSBsb2cxMCAgMS4xRSs5ICAgICAgICAgICAgLT4gIDkuMDQxMzkyNjg1MTU4MjI1ICAgSW5leGFjdCBSb3VuZGVkDQorbG9neDAwMjAgbG9nMTAgIDdFKzEwMDAgICAgICAgICAgIC0+ICAxMDAwLjg0NTA5ODA0MDAxNCAgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gwMDIxIGxvZzEwICtJbmZpbml0eSAgICAgICAgICAtPiAgSW5maW5pdHkNCisNCistLSBub3RhYmxlIGNhc2VzDQorLS0gbmVnYXRpdmVzDQorbG9neDAwMzEgbG9nMTAgLTFFLTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ3gwMDMyIGxvZzEwIC0wLjAwMDcgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitsb2d4MDAzMyBsb2cxMCAtMC4xICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorbG9neDAwMzQgbG9nMTAgLTAuNyAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ3gwMDM1IGxvZzEwIC0xICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitsb2d4MDAzNiBsb2cxMCAtMS41ICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorbG9neDAwMzcgbG9nMTAgLTIgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ3gwMDM4IGxvZzEwIC0xMC41ICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitsb2d4MDAzOSBsb2cxMCAtMTAuNSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorbG9neDAwNDAgbG9nMTAgLTk5OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ3gwMDQxIGxvZzEwIC0xMCAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitsb2d4MDA0MiBsb2cxMCAtMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG9neDAwNDMgbG9nMTAgLTBFKzE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KK2xvZ3gwMDQ0IGxvZzEwIC0wRS0xNyAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCistLSBvdGhlciB6ZXJvcw0KK2xvZ3gwMDUxIGxvZzEwICAwICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkNCitsb2d4MDA1MiBsb2cxMCAgMEUrMTcgICAgICAgICAgICAgLT4gLUluZmluaXR5DQorbG9neDAwNTMgbG9nMTAgIDBFLTE3ICAgICAgICAgICAgIC0+IC1JbmZpbml0eQ0KKy0tIGluZmluaXRpZXMNCitsb2d4MDA1NSBsb2cxMCAtSW5maW5pdHkgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorbG9neDAwNTYgbG9nMTAgK0luZmluaXR5ICAgICAgICAgIC0+IEluZmluaXR5DQorLS0gb25lcw0KK2xvZ3gwMDYxIGxvZzEwICAxICAgICAgICAgICAgICAgICAtPiAgIDANCitsb2d4MDA2MiBsb2cxMCAgMS4wICAgICAgICAgICAgICAgLT4gICAwDQorbG9neDAwNjMgbG9nMTAgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMA0KK2xvZ3gwMDY0IGxvZzEwICAxLjAwMDAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCisNCistLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMA0KK2xvZ3gxMTAwIGxvZzEwIDEgICAgICAgICAgICAgLT4gMA0KK2xvZ3gxMTAxIGxvZzEwIDEwICAgICAgICAgICAgLT4gMQ0KK2xvZ3gxMTAyIGxvZzEwIDEwMCAgICAgICAgICAgLT4gMg0KK2xvZ3gxMTAzIGxvZzEwIDEwMDAgICAgICAgICAgLT4gMw0KK2xvZ3gxMTA0IGxvZzEwIDEwMDAwICAgICAgICAgLT4gNA0KK2xvZ3gxMTA1IGxvZzEwIDEwMDAwMCAgICAgICAgLT4gNQ0KK2xvZ3gxMTA2IGxvZzEwIDEwMDAwMDAgICAgICAgLT4gNg0KK2xvZ3gxMTA3IGxvZzEwIDEwMDAwMDAwICAgICAgLT4gNw0KK2xvZ3gxMTA4IGxvZzEwIDEwMDAwMDAwMCAgICAgLT4gOA0KK2xvZ3gxMTA5IGxvZzEwIDEwMDAwMDAwMDAgICAgLT4gOQ0KK2xvZ3gxMTEwIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTANCitsb2d4MTExMSBsb2cxMCAxMDAwMDAwMDAwMDAgIC0+IDExDQorbG9neDExMTIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxMg0KK2xvZ3gxMTEzIGxvZzEwIDAuMDAwMDAwMDAwMDEgLT4gLTExDQorbG9neDExMTQgbG9nMTAgMC4wMDAwMDAwMDAxIC0+IC0xMA0KK2xvZ3gxMTE1IGxvZzEwIDAuMDAwMDAwMDAxIC0+IC05DQorbG9neDExMTYgbG9nMTAgMC4wMDAwMDAwMSAtPiAtOA0KK2xvZ3gxMTE3IGxvZzEwIDAuMDAwMDAwMSAtPiAtNw0KK2xvZ3gxMTE4IGxvZzEwIDAuMDAwMDAxIC0+IC02DQorbG9neDExMTkgbG9nMTAgMC4wMDAwMSAtPiAtNQ0KK2xvZ3gxMTIwIGxvZzEwIDAuMDAwMSAtPiAtNA0KK2xvZ3gxMTIxIGxvZzEwIDAuMDAxIC0+IC0zDQorbG9neDExMjIgbG9nMTAgMC4wMSAtPiAtMg0KK2xvZ3gxMTIzIGxvZzEwIDAuMSAtPiAtMQ0KK2xvZ3gxMTI0IGxvZzEwIDFFLTk5ICAtPiAtOTkNCitsb2d4MTEyNSBsb2cxMCAxRS0xMDAgLT4gLTEwMA0KK2xvZ3gxMTI2IGxvZzEwIDFFLTM4MyAtPiAtMzgzDQorDQorLS0gY2hlY2sgbm9ybWFsbHkgZXhhY3QgY2FzZXMgcm91bmQgcHJvcGVybHkNCitwcmVjaXNpb246IDENCitsb2d4MTE0MSBsb2cxMCAxMDAwMDAwMDAwMCAgIC0+IDFFKzEgICAgICAgICBSb3VuZGVkDQorbG9neDExNDIgbG9nMTAgMTAwMDAwMDAwMDAwMCAtPiAxRSsxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMTQzIGxvZzEwIDFFKzEwMCAgICAgICAgLT4gMUUrMiAgICAgICAgIFJvdW5kZWQNCitsb2d4MTE0NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDFFKzIgSW5leGFjdCBSb3VuZGVkDQorbG9neDExNDUgbG9nMTAgMUUrMTI2ICAgICAgICAtPiAxRSsyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMTQ2IGxvZzEwIDFFKzkxNiAgICAgICAgLT4gOUUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE0NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDFFKzMgSW5leGFjdCBSb3VuZGVkDQorDQorcHJlY2lzaW9uOiAyDQorbG9neDExNTEgbG9nMTAgMTAwMDAwMDAwMDAgICAtPiAxMA0KK2xvZ3gxMTUyIGxvZzEwIDEwMDAwMDAwMDAwMDAgLT4gMTINCitsb2d4MTE1MyBsb2cxMCAxRSsxMDAgICAgICAgIC0+IDEuMEUrMiAgICAgICAgIFJvdW5kZWQNCitsb2d4MTE1NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE1NSBsb2cxMCAxRSsxMjYgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE1NiBsb2cxMCAxRSs5MTYgICAgICAgIC0+IDkuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE1NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDEuMEUrMyBJbmV4YWN0IFJvdW5kZWQNCistLSBzb21lIGhhbGYtd2F5IHBvaW50IHJvdW5kcywgb3RoZXIgY2FzZXMsIGFuZCBuZWdhdGl2ZXMNCitsb2d4MTE1OCBsb2cxMCAxRSsxMjUgICAgICAgIC0+IDEuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE1OSBsb2cxMCAxRSsxMzUgICAgICAgIC0+IDEuNEUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE2MCBsb2cxMCAxRSsxMjkgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE2MSBsb2cxMCAxRSsxMzEgICAgICAgIC0+IDEuM0UrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE2MiBsb2cxMCAxRS0xMjMgICAgICAgIC0+IC0xLjJFKzIgSW5leGFjdCBSb3VuZGVkDQorbG9neDExNjMgbG9nMTAgMUUtMTI2ICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMTY0IGxvZzEwIDFFLTkxNiAgICAgICAgLT4gLTkuMkUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE2NSBsb2cxMCAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgSW5leGFjdCBSb3VuZGVkDQorbG9neDExNjYgbG9nMTAgMUUtMTI1ICAgICAgICAtPiAtMS4yRSsyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMTY3IGxvZzEwIDFFLTEzNSAgICAgICAgLT4gLTEuNEUrMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTE2OCBsb2cxMCAxRS0xMjkgICAgICAgIC0+IC0xLjNFKzIgSW5leGFjdCBSb3VuZGVkDQorbG9neDExNjkgbG9nMTAgMUUtMTMxICAgICAgICAtPiAtMS4zRSsyIEluZXhhY3QgUm91bmRlZA0KKw0KK3ByZWNpc2lvbjogMw0KK2xvZ3gxMTcxIGxvZzEwIDEwMDAwMDAwMDAwICAgLT4gMTANCitsb2d4MTE3MiBsb2cxMCAxMDAwMDAwMDAwMDAwIC0+IDEyDQorbG9neDExNzMgbG9nMTAgMUUrMTAwICAgICAgICAtPiAxMDANCitsb2d4MTE3NCBsb2cxMCAxRSsxMjMgICAgICAgIC0+IDEyMw0KK2xvZ3gxMTc1IGxvZzEwIDFFKzEyNiAgICAgICAgLT4gMTI2DQorbG9neDExNzYgbG9nMTAgMUUrOTE2ICAgICAgICAtPiA5MTYNCitsb2d4MTE3NyBsb2cxMCAxRSs5OTkgICAgICAgIC0+IDk5OQ0KKw0KKy0tIGxvZzEwKDIpIC4uIHRlc3RzIGJvdGggbG4oMikgYW5kIGxuKDEwKSBjb25zdGFudHMsIHRvbw0KK3ByZWNpc2lvbjogNTANCitsb2d4MTIwMSBsb2cxMCAyICAgICAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjExIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMjAyIGxvZzEwIDIuMDAwIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYyMTEgSW5leGFjdCBSb3VuZGVkDQorbG9neDEyMDMgbG9nMTAgMC4yRTEgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIxMSBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDQ5DQorbG9neDEyMDQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTQ2MjEgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0OA0KK2xvZ3gxMjA1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODE0NjIgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNDcNCitsb2d4MTIwNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODgxNDYgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDQ2DQorbG9neDEyMDcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTg4MTUgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0NQ0KK2xvZ3gxMjA4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxODk4ODEgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNDQNCitsb2d4MTIwOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTg5ODggICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDQzDQorbG9neDEyMTAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODE4OTkgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA0Mg0KK2xvZ3gxMjExIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjgxOTAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogNDENCitsb2d4MTIxMiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzY4MTkgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDQwDQorbG9neDEyMTMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjc2ODIgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzOQ0KK2xvZ3gxMjE0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjY3NjggICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzgNCitsb2d4MTIxNSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDI2NzcgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDM3DQorbG9neDEyMTYgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAyNjggICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzNg0KK2xvZ3gxMjE3IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMwMjcgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzUNCitsb2d4MTIxOCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkzMDMgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDM0DQorbG9neDEyMTkgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDQ5MzAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMw0KK2xvZ3gxMjIwIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQ0OTMgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMzINCitsb2d4MTIyMSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzI0NDkgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDMxDQorbG9neDEyMjIgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcyNDUgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAzMA0KK2xvZ3gxMjIzIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTQ3MjQgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjkNCitsb2d4MTIyNCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODk0NzIgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDI4DQorbG9neDEyMjUgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODg5NDcgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNw0KK2xvZ3gxMjI2IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3Mzg4OTUgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjYNCitsb2d4MTIyNyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzM4ODkgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDI1DQorbG9neDEyMjggbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzczODkgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyNA0KK2xvZ3gxMjI5IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTM3MzkgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjMNCitsb2d4MTIzMCBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEzNzQgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDIyDQorbG9neDEyMzEgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIxMzcgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAyMQ0KK2xvZ3gxMjMyIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUyMTQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjANCitsb2d4MTIzMyBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMTk1MjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDE5DQorbG9neDEyMzQgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTE5NTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxOA0KK2xvZ3gxMjM1IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODExOTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTcNCitsb2d4MTIzNiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTgxMjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDE2DQorbG9neDEyMzcgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2Mzk4MTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNQ0KK2xvZ3gxMjM4IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjM5ODEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTQNCitsb2d4MTIzOSBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYzOTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDEzDQorbG9neDEyNDAgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTY2NDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMg0KK2xvZ3gxMjQxIGxvZzEwIDIgLT4gMC4zMDEwMjk5OTU2NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTENCitsb2d4MTI0MiBsb2cxMCAyIC0+IDAuMzAxMDI5OTk1NjYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDEwDQorbG9neDEyNDMgbG9nMTAgMiAtPiAwLjMwMTAyOTk5NTcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgOQ0KK2xvZ3gxMjQ0IGxvZzEwIDIgLT4gMC4zMDEwMjk5OTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogIDgNCitsb2d4MTI0NSBsb2cxMCAyIC0+IDAuMzAxMDMwMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICA3DQorbG9neDEyNDYgbG9nMTAgMiAtPiAwLjMwMTAzMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgNg0KK2xvZ3gxMjQ3IGxvZzEwIDIgLT4gMC4zMDEwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogIDUNCitsb2d4MTI0OCBsb2cxMCAyIC0+IDAuMzAxMDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICA0DQorbG9neDEyNDkgbG9nMTAgMiAtPiAwLjMwMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAgMw0KK2xvZ3gxMjUwIGxvZzEwIDIgLT4gMC4zMDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogIDINCitsb2d4MTI1MSBsb2cxMCAyIC0+IDAuMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246ICAxDQorbG9neDEyNTIgbG9nMTAgMiAtPiAwLjMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbkV4cG9uZW50OiAtMzgzDQorcHJlY2lzaW9uOiAgIDE2DQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KKw0KKy0tIE1vcmUgY2xvc2UtdG8tZSwgZXRjLiwgdGVzdHMNCitwcmVjaXNpb246ICAgMzQNCitsb2d4MTMwMSBsb2cxMCAyLjcxODI4MTgyODQ1OTA0NTIzNTM2MDI4NzQ3MTM1MjY2MSAgLT4gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzAyIGxvZzEwIDIuNzE4MjgxODI4NDU5MDQ1MjM1MzYwMjg3NDcxMzUyNjYyICAtPiAwLjQzNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwNTAgSW5leGFjdCBSb3VuZGVkDQorbG9neDEzMDMgbG9nMTAgMi43MTgyODE4Mjg0NTkwNDUyMzUzNjAyODc0NzEzNTI2NjMgIC0+IDAuNDM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMwNCBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5ICAgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDczRS0zMyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMwNSBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OSAgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUzRS0zNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMwNiBsb2cxMCAwLjk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTkgLT4gLTQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDUxRS0zNSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMwNyBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCAgLT4gMA0KK2xvZ3gxMzA4IGxvZzEwIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSAtPiA0LjM0Mjk0NDgxOTAzMjUxODI3NjUxMTI4OTE4OTE2NjA1MUUtMzUgSW5leGFjdCBSb3VuZGVkDQorbG9neDEzMDkgbG9nMTAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEgIC0+IDQuMzQyOTQ0ODE5MDMyNTE4Mjc2NTExMjg5MTg5MTY2MDQ5RS0zNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMxMCBsb2cxMCAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxICAgLT4gNC4zNDI5NDQ4MTkwMzI1MTgyNzY1MTEyODkxODkxNjYwMjlFLTMzIEluZXhhY3QgUm91bmRlZA0KKy0tIGxvd2VyIHANCitwcmVjaXNpb246ICAgIDcNCitsb2d4MTMyMCBsb2cxMCAwLjk5OTk5OSAgICAtPiAtNC4zNDI5NDdFLTcgIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzIxIGxvZzEwIDAuOTk5OTk5OSAgIC0+IC00LjM0Mjk0NUUtOCAgSW5leGFjdCBSb3VuZGVkDQorbG9neDEzMjIgbG9nMTAgMC45OTk5OTk5OSAgLT4gLTQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMyMyBsb2cxMCAwLjk5OTk5OTk5OSAtPiAtNC4zNDI5NDVFLTEwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzI0IGxvZzEwIDEuMDAwMDAwMDAgIC0+ICAwDQorbG9neDEzMjUgbG9nMTAgMS4wMDAwMDAwMSAgLT4gIDQuMzQyOTQ1RS05ICBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMyNiBsb2cxMCAxLjAwMDAwMDEgICAtPiAgNC4zNDI5NDVFLTggIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzI3IGxvZzEwIDEuMDAwMDAxICAgIC0+ICA0LjM0Mjk0M0UtNyAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gbmVhciAxMF4zDQorcHJlY2lzaW9uOiAgIDkNCitsb2d4MTMzMSBsb2cxMCAgOTk5Ljk5OTk5OTggIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorbG9neDEzMzIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAzLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzMzIGxvZzEwIDEwMDAuMDAwMDAwICAgLT4gMw0KK2xvZ3gxMzM0IGxvZzEwIDEwMDAuMDAwMDAxICAgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTMzNSBsb2cxMCAxMDAwLjAwMDAwMiAgIC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxNg0KK2xvZ3gxMzQxIGxvZzEwICA5OTkuOTk5OTk5OCAgLT4gMi45OTk5OTk5OTk5MTMxNDEgSW5leGFjdCBSb3VuZGVkDQorbG9neDEzNDIgbG9nMTAgIDk5OS45OTk5OTk5ICAtPiAyLjk5OTk5OTk5OTk1NjU3MSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MTM0MyBsb2cxMCAxMDAwLjAwMDAwMCAgIC0+IDMNCitsb2d4MTM0NCBsb2cxMCAxMDAwLjAwMDAwMSAgIC0+IDMuMDAwMDAwMDAwNDM0Mjk0IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gxMzQ1IGxvZzEwIDEwMDAuMDAwMDAyICAgLT4gMy4wMDAwMDAwMDA4Njg1ODkgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQ0KK2xvZ3gxNDAwIGxvZzEwIDEwRS0zICAgIC0+IC0yDQorbG9neDE0MDEgbG9nMTAgMTBFLTIgICAgLT4gLTENCitsb2d4MTQwMiBsb2cxMCAxMDBFLTIgICAtPiAgMA0KK2xvZ3gxNDAzIGxvZzEwIDEwMDBFLTIgIC0+ICAxDQorbG9neDE0MDQgbG9nMTAgMTAwMDBFLTIgLT4gIDINCitsb2d4MTQwNSBsb2cxMCAxMEUtMSAgICAtPiAgMA0KK2xvZ3gxNDA2IGxvZzEwIDEwMEUtMSAgIC0+ICAxDQorbG9neDE0MDcgbG9nMTAgMTAwMEUtMSAgLT4gIDINCitsb2d4MTQwOCBsb2cxMCAxMDAwMEUtMSAtPiAgMw0KK2xvZ3gxNDA5IGxvZzEwIDEwRTAgICAgIC0+ICAxDQorbG9neDE0MTAgbG9nMTAgMTAwRTAgICAgLT4gIDINCitsb2d4MTQxMSBsb2cxMCAxMDAwRTAgICAtPiAgMw0KK2xvZ3gxNDEyIGxvZzEwIDEwMDAwRTAgIC0+ICA0DQorbG9neDE0MTMgbG9nMTAgMTBFMSAgICAgLT4gIDINCitsb2d4MTQxNCBsb2cxMCAxMDBFMSAgICAtPiAgMw0KK2xvZ3gxNDE1IGxvZzEwIDEwMDBFMSAgIC0+ICA0DQorbG9neDE0MTYgbG9nMTAgMTAwMDBFMSAgLT4gIDUNCitsb2d4MTQxNyBsb2cxMCAxMEUyICAgICAtPiAgMw0KK2xvZ3gxNDE4IGxvZzEwIDEwMEUyICAgIC0+ICA0DQorbG9neDE0MTkgbG9nMTAgMTAwMEUyICAgLT4gIDUNCitsb2d4MTQyMCBsb2cxMCAxMDAwMEUyICAtPiAgNg0KKw0KKy0tIFJhbmRvbXMNCistLSBQPTUwLCB3aXRoaW4gMC05OTk5DQorUHJlY2lzaW9uOiA1MA0KK2xvZ3gyNTAxIGxvZzEwIDAuMDAwMzU0NDgwMDE2Njc5NjgxNDE3NzU4OTEyNDY5OTE5MTI2NTU5NjExNjMzNDU5MDQgLT4gIC0zLjQ1MDQwODI0MjU0MTE3NzUyOTA4NjQwNTMzMTgyNDcyNzQ5NDQ2ODU1ODYxODg1MDUgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MDIgbG9nMTAgNzAuNjM2NDU1NzI2NDI0MzExMjI4MjU1MzM4NjM3OTM1MzMwODI2OTk1MTM2NTk3NjQ0ICAtPiAgIDEuODQ5MDI4ODk5ODQwODQ5MjA0NTc5MzA3MDI1NTMwMjMzNTU1ODE0MDk3NTcxOTI0NyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUwMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMjMzNTUwMzYyNDczODIxODg5MDYwODEyODA0MDYzMDQwMTY5IC0+IC0xNC42MzE2MTk0NTQzNDM4MzQ4NTgwMjM1NzgyOTkxNDI4NjY1NTc3MTc5MDQyMjM2NjcgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MDQgbG9nMTAgOTcuNzgzNjI4NjIxNTIzMjQ0Njc5OTAxMjYwMzU4Mjg2ODk4OTU4ODMyMTM1NDMzNzY0ICAtPiAgIDEuOTkwMjY2MTQ5MzIyNDIxOTUxNzg5NzY1Nzk2NDM2MjU3MTY5MDU5MjczNDQwNzMzMCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUwNSBsb2cxMCAwMDYyLjIzNzcxMzUzMTU4NTgzOTI4MDI2MTI4MTIwMjI4MDc4Mzg1OTk1NzIwMTczNDIgIC0+ICAgMS43OTQwNTM2MjkzMDg1MDY2MTk5Mjg3NjMyNzI1MDI2ODM3MDE4NDg2NTMzNTQ0MTQxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTA2IGxvZzEwIDYuMzc2NzYzNDY1MjA3MTA1MzYxOTk3NzYwMjgwNDcyNDEyOTY1Mjk4MTc0Nzg3OTUzMiAgLT4gICAwLjgwNDYwMDMwNzg5ODI1OTYxNjE1MTAwMTYzNTc2MDgwNzYxMzI2ODU3Mzc0MDk4NjQ0IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTA3IGxvZzEwIDYzLjI5NzA4ODk4MTMxMzI3ODUyOTMwNjUzMzgxNDE5NTA2ODg1MDUzMjY2NjY1ODc5OCAgLT4gICAxLjgwMTM4MzczNzM3MjQ0MjcwOTI0MTcxNzAxNDkwOTg2MTQ0MTA4NDkzNTM4Mzk2NzMgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MDggbG9nMTAgMC4wMDAwMDA3NzIzOTY5MzMxNjg4MTc5NzcxNzgyMDExMDg5ODE2NzcyMTYwMjI5OTE4NyAtPiAgLTYuMTEyMTU5NDU5MjcxODU1MDYxMzc3Mzg4NjI0MTk1MTk2NjI2NDgyNjc2MDMxMDA0NyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUwOSBsb2cxMCAwLjAwMDAwMDAzOTUzNTgwMzU5NzgwMTg1NTM0ODMwNTcyNDYxOTIyNTI3ODMxMzk1MDAyIC0+ICAtNy40MDMwMDk0MjkzODMzODQ3MTM2MjUyNTQ3MDY5OTA1NDc3MjEzNTQxNzg3MTc3NTYxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTEwIGxvZzEwIDc1NC42MjkwNTgxNzM2OTk4OTE2OTE4ODk5ODExMTUyNzI3MjY4ODc5MTU0NDU3NzIwNCAgLT4gICAyLjg3NzczMzUyNDM3NjEzMDAwNDc3NTg1MzQzMDQzNzE5MTIwOTk5NTgwNTc1NDU0MTYgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MTEgbG9nMTAgMC4wMDAwMDA0ODM2MDM3ODQxMDI0MTQyODkzNjYwNzE0NzA1NjI4MzI4Mjg0OTE1ODMxMiAtPiAgLTYuMzE1NTEwMzA5NTMwOTM1MzQ1NzYwNDAzODM5Nzk4MDA5MTY1MDc2MDM0NjMzNDUxMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUxMiBsb2cxMCAwLjAwMDA3NTA5MDM3NTgzNjQ1NjEyNTc3MTk2MTA0NTkxNjcyMDgwNTQyOTMyMTY2MDg5IC0+ICAtNC4xMjQ0MTU3MjE5NzAwMTY2MzE0MDEyMzQ0NzA1NTM4MDg4MDMwNTkyODk2MTExMDI2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTEzIGxvZzEwIDAuMDAwMDAwMDAwMDA3MDU0NzU5NDQ2Mzg5MTUwNTM0MTk4MzkwNjM1Njc4OTgwOTIwNjQgLT4gLTExLjE1MTUxNzc5MDI1NjQ2NjA0ODU1MzgxMDAwMjUyNTg2ODE5ODE3ODE2Nzk1MDM3NyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUxNCBsb2cxMCA5LjYyMTAzMDA0NjA0OTc2NTc5MTc0NDU0MTA5NDcwOTk2MzM0Nzk2MDkxNjUxMjA2NjEgIC0+ICAgMC45ODMyMjE1NzA5MzI2MDk3ODIwNjYzMzkyMjg3NzcxNjA3ODY4MzUxODYxNzc2ODQxMSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUxNSBsb2cxMCAwLjAwMDAwMDAwMDUwMTUwMzYxMzg2NTU1NTI3NDk2NjA3MjQ1OTc2MTIwODY0OTg1NjExIC0+ICAtOS4yOTk3MjU5MzMwNzk4MjYxMDQwNDExMDg2ODM1NTYzMjM0MzkwOTM0OTM0NjI5MzQwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTE2IGxvZzEwIDA5OC4yNDc1NDAyOTczMTk5NDEyNTc5NzcyMzU0NTMzMzY3NzYwNDQ5MDA3NDgxMDc1MSAgLT4gICAxLjk5MjMyMTY4NjI4NzQzMzcwNzc3OTUyNzg2MjkzNTEwNjA4MTkxMDU2Nzk2NzA2MzMgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MTcgbG9nMTAgNy41MDkxOTk4MTUwMDQ2OTk0MzIwNDQxNDYzODU0MzAxNjI0NzQyNDkxMDE1NzUyOTgwICAtPiAgIDAuODc1NTkzNjYwNzgwMDU5MjQwODA3NjY0NjkxNTg3NjM0OTk3MjU0MTQwMjQxMjg3ODEgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MTggbG9nMTAgMC4wMDAwMDAwMDAwMDA3OTU0MDU3MTI3MzMzMDA3NTE5MzY2ODU5Njk0MjI2ODU0MjQyNSAtPiAtMTIuMDk5NDExMjk0MTY1MTc2MDI4ODE3MzA1MTA4NDc1MzI2MzI1MDA2MjUwOTM2OTYzIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTE5IGxvZzEwIDAuMDAwMDAwNDIzOTUwMzQ3OTk1NTUyMTU3ODI5MDc1MTUwNzQxMzQxNTQ5MTU0OTE3MDEgLT4gIC02LjM3MjY4NTAwMzkxMjUzODExMzQwNjk0NTA4MDIxMDg4OTMwNzU2MDQ0NjQxMzUyOTcgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MjAgbG9nMTAgNTYuNjgzMzc2MzA0Njc0MzU1NDgxOTA1MDIzMTQ1MjM4Nzk5OTA5MzAxNzMyNjk0OTgyICAtPiAgIDEuNzUzNDU1NzEwNzg1MzQ4MDQzNTcwMzQyMTgyNjA3NzYwNjI1MDYzNjU4MDA5MTc1NCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUyMSBsb2cxMCA0OC43MzQwMzM4MTE0NDQxOTUwNzA4MDc2MDY3MjE1MTcxNjk4MTA0MzgwNDk1ODEyMjcgIC0+ICAgMS42ODc4MzIzNjAyNzQxMDY1MTkwOTQyNjU0NzEwMDQ5NDMzODA4MjA4MjkxNTY0MDQ5IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTIyIGxvZzEwIDAuMDAwNzQ4MzAzMTA5MzAwNDY4NjUwMDk4NTE3MDY5ODk0MzAyMjg1NjE4ODAyMjEwNjMgLT4gIC0zLjEyNTkyMjQ1MDIyMDk5NzQwODIyMjM2Njc3MTIwMTY0NDU1NzI0MzE3OTE5MjA2MTggSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MjMgbG9nMTAgMzYuNjc3MzQ4ODg1MTExNTkzMzg0MDIwODM2NzIwMzk2MjYyNDk3MTIyNzA4NTk4MzU5ICAtPiAgIDEuNTY0Mzk3OTM2NDI2MDc5NjA4Njc1NDUzMDI4MjMwMjYwNTQ3NzU2NzQ2OTM5NTQyNSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUyNCBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDA0NDk1Njc4NTYwNDgwNDMyODU4ODEyNDE5MTQ1ODMzNzQ0IC0+IC0xNi4zNDcyMDQ3NDgyMzk3NDA1MTAwMTQzMjA2MzAzNjMyNDQwMTU5MTYwMjk2MTk1NjEgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MjUgbG9nMTAgOTUwOS41ODU0MDEzNjUwNjQyNzk5Mzc0MTU5MTMxOTQwMTA4NzQ4NTk0Nzc0MzA3MTA0ICAtPiAgIDMuOTc4MTYxNTgyOTkxNjMyNjc0MTEwMDE2NjUxOTcyNjgyNDQzMDk0NTQwNjMwMjY2MSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUyNiBsb2cxMCAwLjA3ODM0ODkxMjY4Njg5MTc3MDE0MDQ0NDU0NzkzNjA4NzE1Mjc2NjE1NzQzODE5MDk3IC0+ICAtMS4xMDU5NjcwMjYyMTk3NjQzMTQ3ODA1NTE3Mzk4NjIxMjg4ODk3NjY5ODc2OTk2MzQ4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTI3IGxvZzEwIDAuMDAwMDAwMjk1ODQ1Mjk4ODA3MDYxMjg0NDQ0NTQ2ODg0NTQ5OTkwMzI4MDE5MDQ3OTQgLT4gIC02LjUyODkzNTMyNzU4MTQwNDM3MTAwNzY1MjY5MjA1NjY3MjE1NzAzNzUwMjY5MTcyMDYgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MjggbG9nMTAgMy4wNzEzNDk2NTQ0NDk3NjE4MDk4Nzk0MzMyNzg3NzcyMTg2MTc2OTgxMDExOTA0Mjk0ICAtPiAgIDAuNDg3MzI5MjYxMDM4OTY4Mjg1NDY0MjQzNDEwMjk0OTI0NjgxMDA0MzE0MTQwNzI5OTQgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MjkgbG9nMTAgMzUyLjY2MzkyNjcwNzg4ODE2NDc0NDA3NDQyNzg1NDYwODAzODMzOTI3MTM2NDEzOTQzICAtPiAgIDIuNTQ3MzYxMDM4ODE5OTU2MjcxNDcwOTgzNjM5ODI0MzkzMzMyMDI4NDA3NzAwODMxNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUzMCBsb2cxMCAwLjAwMzA0NzQzMTI1MTgxODc2MjY3MjEwNTE2NTI3MzYxNzQyMTg1NjE3MDkxODAxNjUwIC0+ICAtMi41MTYwNjYwODMwMTYzOTgxOTY3Nzc0MTI0NzQ1MzExNDk3NDQ3MDUwMDU2NDAwMjA3IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTMxIGxvZzEwIDAuMDAwMDAwNzYxMjA1MzU4OTQ5NTIxMzY0OTkyNTAzNjQ2MDQ1MzgxMTc3Mjk0MzcxODMgLT4gIC02LjExODQ5ODE2MjkwNDcwNTE1MzI0NDg0MTM4NjM5NTA3NzY0OTY2NTI0ODMwMTk0MTUgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MzIgbG9nMTAgNzY5Ljg4Nzk1OTc4NTM0MzUzMDUyOTY1Mjg2MTk1MDUzNzM1MDA3NDczMTg3NzM1ODE1ICAtPiAgIDIuODg2NDI3NTI3Nzg2MjY1MjcwOTk4NjQ5ODU4MTA2NDExNzk1MDI4ODc5ODIyMjEwMCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUzMyBsb2cxMCAwLjAwMDAwMDAwMDAwMDAwMDQxMjk3NDk0ODA4NjEyMjI2MzA0NjE5NTcwMDE2MzM2MTg4IC0+IC0xNS4zODQwNzYyOTI3NDU0MTU5MTc1MTA2Njg0NTQzNjE4Njg2NTk0Njg2Njk4MDQ3MTAgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MzQgbG9nMTAgODYwLjg4ODY0NTk1NzE0NDI2OTQwMjQ3OTQwOTYwMjU4NTU4ODc2OTAzNzQxOTY2OTc0ICAtPiAgIDIuOTM0OTQ2OTgwMDU1NDI3NzkxNTkyMDI3ODA5MDY0NzI4MzIzMzQ0MDg1OTE1NTE3NiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjUzNSBsb2cxMCA1ODM5LjAzMjg4MTI5OTQ3ODcyMzU5MDAxNzg1ODczNzEwNTEwOTY4OTg2ODM5NzI0NDQgIC0+ICAgMy43NjYzNDA5MjA4OTcyMzkyNTY5MjY5MTI1NTM5NDM4ODc0NzM3MTQ3OTA2MjM4NTQzIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTM2IGxvZzEwIDAuMDAwMDAwMjg1MzI3MTAxNTEyODQ4NDA0NzE2NzA0OTcxMTI4MjEyMDE1OTgzNzc4NDEgLT4gIC02LjU0NDY1Njk3NTM1MTQwMjc2NzU4Nzg4Nzk4NDMyMzgwNjU0ODg0OTA2MTgxNTk0OTAgSW5leGFjdCBSb3VuZGVkDQorbG9neDI1MzcgbG9nMTAgMC4wMDAwMDAwMDAwMDAwMDAwOTczNDQ5MDA1OTkzMTYzODQ4MzQ0NTYzMTgzNTY1MTU4MSAtPiAtMTYuMDExNjg2Nzk0MDExMjcxMTM1OTc4NjMzODgwODY0Mjc4NjkyMjU0MjQzMTA2OTMxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTM4IGxvZzEwIDUuODYxMDk0OTUyNjQzOTUyOTQ4OTI1MjMwMjQ2MzQ1MDMwMjk4MTUxMTcxNDE0NDMzMCAgLT4gICAwLjc2Nzk3ODc1NzIyNDUyNTQ5MjgxMDI4NTUyMDY3NjQ1NzMyNDkwOTI5MzYxOTUyMjc4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTM5IGxvZzEwIDYuNjI4MjQzMjIyMTExNTkyMzM3MjE1MTE0ODk5MDEzNzE3OTYxMTk3NzU3NjMyNzIwNiAgLT4gICAwLjgyMTM5ODQzNjM5MjI3MjEzMjExMDEyMDQ0MDAwNzg1NzU3MjY3MTU1NzM2MDcxMzYxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyNTQwIGxvZzEwIDAuMDAwMDAwMDAwMDE5OTQwNzE4NjIzODY4NDY2MjY5NTQ4MTk5MjM5MjMzNDQ0MTM0NTQgLT4gLTEwLjcwMDI1OTE5NDYzMjMzOTk4MDI2NjU1OTIyNDQ0NzIxMjI2MDExNTAyMTYzNzYyNiBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBQPTM0LCB3aXRoaW4gMC05OTk5DQorUHJlY2lzaW9uOiAzNA0KK2xvZ3gyMjAxIGxvZzEwIDEuNTIyNTEzMjAzODg5NzE0MTc5MDg4MzI3MzI4ODY0MTgzICAtPiAwLjE4MjU2MTA2NzcwOTg4OTYyNTA0OTY2NTEzMzA0OTIxMDkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMDIgbG9nMTAgMC4xNzExMjM3NzQ3Njk3MTczMTYxNTQwODA4ODg5MzA0MDQgIC0+IC0wLjc2NjY4OTY0ODM1NDg0NjI1ODI0NjE4OTgwOTI3NjQ0MDggSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMDMgbG9nMTAgMC4wMDAwMDAwOTk3NDY3MjM2MjUxNzE0MjgzMTA0OTYzODM4IC0+IC03LjAwMTEwMTM2MDY1MjUxODI3NDI3MTU2OTAxMDMxMjExNSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIwNCBsb2cxMCAwLjAwMDg4NTYxMDM2MjQxMjI0Nzk3Njk2NDc1NDM0Njg2MzMgLT4gLTMuMDUyNzU3MzEwNDc2MDcwODkxODMwNDkwMzI3MTM4MTkwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjA1IGxvZzEwIDEuOTM4Mjc0ODY4NzM4MDMyOTMwNzA5NDk4MjIxMjM2NzU4ICAtPiAwLjI4NzQxNTM2NDgyNTk0NDk1MjAyMDE1MzYxNzE3MTQ1OTQgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMDYgbG9nMTAgNDc5LjU2Njc4NDc4MjM4MjY3MTMwODI2MTM0NDUwMTAwOTcgIC0+IDIuNjgwODQ5MDk1ODUwMzYxMDY4NzA5MTY1MTU3Mjg2NDM1IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjA3IGxvZzEwIDg4NTYuMTM2NTk5MTc4ODIwMjAyMTQxODIzMTU3MzM2ODA0ICAtPiAzLjk0NzI0NDMwNjU4NDc2NzEwMTQ4MDQ1NDI2MTk1MDU1OSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIwOCBsb2cxMCAwLjAwMDA5MTEwMjYzMTg4MDE5MDM5ODI2NDI4NzEzNDQ4NTggLT4gLTQuMDQwNDY5MDc2NDM0OTc5Mzk4NDM4NjE3NDY0MDMzODI2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjA5IGxvZzEwIDAuMDAwMDAwMDAwMDAxNzI3MTExMjY1MDQyNzQxNDczMjYzMCAtPiAtMTEuNzYyNjc5NjgzMTQwMzg3NDg5OTUxNzgyMTI2NTQ5MjEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMTAgbG9nMTAgNi45NjI2MDUzNzAwNzg4ODU2NDc2Mzk1MDM1NDgyMjk2OTUgIC0+IDAuODQyNzcxNzgwNzIwMDMyMjM1MjY4NjM5NjkyNTk5MjI1MCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIxMSBsb2cxMCAwLjMzNTQ4MDQ0Mjg5OTI3OTMxMzI4NTU5MjM1NDE2OTI3ODEgLT4gLTAuNDc0MzMyNzkyMzAxMjE1OTE3MDk2NzYzNjA3MDg0NDgzNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIxMiBsb2cxMCAyLjA3OTg2NDI1NzQ3NDg1OTAwODI1MjE2NTgzNjY2MzUwNCAgLT4gMC4zMTgwMzQ5OTE2MTk4MDU5MDQ2ODEyNTA2NzQxMzg4ODU2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjEzIGxvZzEwIDI4MDUuNDc5NTI5MjkyOTM5NDk5MjIwMjc2OTg2NjIxOTg4ICAtPiAzLjQ0ODAwNzEwNDEzOTk3NDM0NDU2NTk3ODc4MDYyNDc0NCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIxNCBsb2cxMCA2Ni40NTczMTEzMzAzNDE4NzM3NDU1NzAyODUzNzIxMzk0OSAgLT4gMS44MjI1NDI3NjcwMDU2NDQwNDE2NjE1MjA5MzYyMjMwODYgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMTUgbG9nMTAgMC4wMDAwMDAxMjA2NTIxMjYxNzYyNjgxNzM4Mjc0ODIyODM1IC0+IC02LjkxODQ2NTAyMDM5MDIxNjk2OTU2MTQ5NDc1NTc2NzMxOCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIxNiBsb2cxMCAwLjAwMDAwMDAwMDE4ODQ4OTE5MTYyNjQ0MDExNjA0NzIzODEgLT4gLTkuNzI0NzEzNTQ4MTE5MDY1Mzg2MDkxOTMzMDA3NTI4NjMzIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjE3IGxvZzEwIDAuMDAwMDAxNTQ2NzI3OTU1MTcyNjMyNjU4MTMxNDU4Mjc1OSAtPiAtNS44MTA1ODYwNjUwNzA0MzUzODM3NTU3NTk1MTQ2MDg3MzggSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMTggbG9nMTAgMC4wMDkwNzc2MzE2NzI4MDY4NTg2NzQ0NjMzOTE0MTM1OTUyIC0+IC0yLjA0MjAyNzQ0Mjg0Mzc0NTg4NDUwMzI4MDk1NDM5MDExNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIxOSBsb2cxMCAwLjAwMDAwMDAwMDAwMjQ1NDExMDY1Mjg3MTMzOTM3NDAwMzAgLT4gLTExLjYxMDEwNTg1OTM1NjM1NzEzMDkwMTE5MTU2MDY5NDc5IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjIwIGxvZzEwIDE0LjEyOTM2ODc5Mzg1ODYzNDEwMDgxMDg3NzUwNjQ1ODU2ICAtPiAxLjE1MDEyMjc2MDg5NTQ2Njk4OTg0MTA1NzM4NTc0MjY2MiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIyMSBsb2cxMCAwLjAwMDAwMzY5MTI0ODE4MzEzOTI5MjI5MjI2NDcyMzEzOTIgLT4gLTUuNDMyODI2NzUzNzg5ODkyMjgzNTU2MjExMzgwODI0MjAzIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjIyIGxvZzEwIDAuMDAwMDAwMDAwNDA2NzQ3NzUyNTQyMDQyNDI3MDEzODczNCAtPiAtOS4zOTA2NzQ4MzgwNTAwNzMxMjI4NTc4NjgwMTI0NzUwNjAgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMjMgbG9nMTAgNzA4MC4xMjI1NjI3MDUzOTk3NDQ5NjkzMTk1ODk4MDYxOTQgIC0+IDMuODUwMDQwNzc1NzQ3MTAzMzE4NzI0MzMwMDQ3NTQ2OTE2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjI0IGxvZzEwIDI2MS4zNDkxNDExMzYzNjc5MjA5MTc1NTI0NzkwMjU1NzI1ICAtPiAyLjQxNzIyMTA3NzIyNzUzNjMxOTY1NTY5OTUxNzUzMDg1NSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIyNSBsb2cxMCAwMDMuOTk0NTU4MTQ0OTkxNTI0MDA5NDcyODM4MDA0MTQ5NCAgLT4gMC42MDE0Njg3NDcxNTMxOTg4MjYwODIzMDY2OTk3ODQ1NjkxIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjI2IGxvZzEwIDAuMDAwMDAwMDAwMDU4MzU0OTE2NDU4ODQ5NTIwNjc2Nzg0MCAtPiAtMTAuMjMzOTIyNTQ4MzQxODI2NzcwMjMyMzE3MTM1MTkzNDEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMjcgbG9nMTAgOTU2Ny45NjE4MzI2MDcyNDAyNzgzNDI3NjEwODg0ODc0ODQgIC0+IDMuOTgwODE5NDM0MjExMTA3NjMxNTY5Mzg2MTQ3MDE2MzY4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjI4IGxvZzEwIDA2LjI2NTkyOTc5MTYwMzQyOTcyNzc3MjE5ODI4ODY3MDMzICAtPiAwLjc5Njk4NTUyNDM5NjYyMjE0MDg1OTUwMjQwMTI1NzQ3MjkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMjkgbG9nMTAgMC4wMDAwMDAwMDAwNTg5ODQ3MDQ2NTk4MDY3MjczMjg3MzE5IC0+IC0xMC4yMjkyNjA1OTA3ODIwNjIxODcxNzc1NTI1MzU4MjkwNyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIzMCBsb2cxMCA1NjcuOTM4ODY0ODIzNTU4OTIwNDc2OTQ0Mjg2MzcyNDk5NyAgLT4gMi43NTQzMDE1ODkwNTgzMTM1NzY0NzIzODAyNjI5MDc2MzggSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMzEgbG9nMTAgMDM5Ljc3OTAzMjU0ODAwMzc3Nzg5MTgxNjIyNjQ4ODM0MTUgIC0+IDEuNTk5NjU0MjE2NTkyMDE5MTk5NjM5Mjg1MzA4OTk3ODg2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjMyIGxvZzEwIDAuMDAwMDAwMDAwNTEyMzk1MTkyMTg5NDE2MjE0OTgxNzIwNyAtPiAtOS4yOTAzOTQ5NTM4OTg4NjI2OTQ4NDczMjcxMzcyNDI2OTAgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMzMgbG9nMTAgMC4wMDAwMDAwMDAwMDM4NTAwOTk5NzIzNjM2OTA0Mjc2NzIzIC0+IC0xMS40MTQ1Mjc5OTMzNzkyNDA1NjE4Njg2NzMyNDg1NDY5MSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIzNCBsb2cxMCAwLjAwMDY3MjY1MDA2NTg5Nzc3NTk4MjU2MTY1Mzc5MzU4NjQgLT4gLTMuMTcyMjEwODEwOTIyNzY4NzI1Njg3NjcxODQ5NDIxNzkyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjM1IGxvZzEwIDI2MC4yNDAwMjUwNDc1OTY3NTI4NDI5OTQzNzc5MTI2NTA3ICAtPiAyLjQxNTM3NDA5MjA3Mzc5OTIwNDIzNjgwMTM4MzA3MDA2NCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjIzNiBsb2cxMCAwLjAwMDAwMDAwMDYxMDE5NDIzMzkzODUxMDI1ODUwNDI1NDggLT4gLTkuMjE0NTMxOTAwNTYyMDQ2NTU3MTkxMjYxMjI2NjMyNTA5IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjM3IGxvZzEwIDAuMDAwMDAwMDAxMDg0Njg2NzUwMTM4Mjc0Njc2MDA2NjU1NyAtPiAtOC45NjQ2OTU2NjQ4ODMyODI0MDYzNTk4NzQyNDIzODcyMzYgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyMzggbG9nMTAgNjAuMjQwNzgzNzU1Njg4MTQ3NjkwMTAzMzM3MTE1MDk5MjggIC0+IDEuNzc5ODkwNjEzNTY3MDg0MjUzMTY4MzczMjY2NjQ4OTIyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMjM5IGxvZzEwIDAuMDAxMjA1ODczODcxMTc1NzY2OTMzNzYwMDI1Mjk4NjA5MyAtPiAtMi45MTg2OTgxMTUwMTI2MDU5MTU3NTM3MjgyMjA4OTYwMTAgSW5leGFjdCBSb3VuZGVkDQorbG9neDIyNDAgbG9nMTAgMjMwLjk0NTA5MzAxOTc4NDE2MDA2MTE1MDMwOTUxODU2MDAgIC0+IDIuMzYzNTA4NzM5MDU2ODIyODQ2NzQyOTQyNTk5NjI4OTY2IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFA9MTYsIHdpdGhpbiAwLTk5OQ0KK1ByZWNpc2lvbjogMTYNCitsb2d4MjEwMSBsb2cxMCAwLjAwNzIwNjcxMTk2MDUxODQgLT4gLTIuMTQyMjYyODM1NTczMDM4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTAyIGxvZzEwIDUwMy42ODI4NDgyMjI2NjI0ICAtPiAyLjcwMjE1NzE2MjE5NTY1MiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEwMyBsb2cxMCA2NC45NjA3NDQ0NzgyMTgxNSAgLT4gMS44MTI2NTA5OTM0NjQxNzQgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMDQgbG9nMTAgNDguNzU0MDg1OTc0NjcyNDYgIC0+IDEuNjg4MDExMDE4ODQyNjAwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTA1IGxvZzEwIDAuMDMyOTAwOTgzOTI2OTU4NyAtPiAtMS40ODI3OTExMTM5NzUyODAgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMDYgbG9nMTAgMjIzLjUzMjA0MTUwNjA2MzMgIC0+IDIuMzQ5MzM5Nzg0NTIzNDEwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTA3IGxvZzEwIDczLjEyNzY1MDAyMjkyMTk0ICAtPiAxLjg2NDA4MTYxNzQ3NjI2OCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEwOCBsb2cxMCA0ODcuMzc0OTM3ODM1ODUwOSAgLT4gMi42ODc4NjMxOTI4MDIyNTIgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMDkgbG9nMTAgMC4wMDAwMDE5NjcxOTg3NjIxIC0+IC01LjcwNjE1MTc1NzU1NzkyNiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjExMCBsb2cxMCAwLjA1NzA2ODA2NjA2MDk3ODQgLT4gLTEuMjQzNjA2ODQ0Njk3ODczIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTExIGxvZzEwIDMzLjEwMzExNjM4Nzg4OTk4ICAtPiAxLjUxOTg2ODg4MDk3Njc3MyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjExMiBsb2cxMCAwLjA2ODczODI2OTkxODcwNzcgLT4gLTEuMTYyODAxNDAyODY4MTg1IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTEzIGxvZzEwIDI1OC45NDE2MTkzNjI2NDg0ICAtPiAyLjQxMzIwMTg1OTY1NDE0NSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjExNCBsb2cxMCAwLjAwMDUzMDYxMDAxMzY3MzYgLT4gLTMuMjc1MjI0NTU4MjY5NzI1IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTE1IGxvZzEwIDY1Ljc4NDkwMzkzNDA4NTcyICAtPiAxLjgxODEyNjI0NDgyNTEwOSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjExNiBsb2cxMCA1MDQuMjMyODg0MjA3MzUxMCAgLT4gMi43MDI2MzExNjUzNDY5NTggSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMTcgbG9nMTAgOS40MTc0MzI3NTU4MTUwMjcgIC0+IDAuOTczOTMyNTI3ODUyNDUwMyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjExOCBsb2cxMCAwMDYuNzA1NDgzNTM1NTQ5OCAgLT4gMC44MjY0MzAxMDA0OTQ3NjQwIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTE5IGxvZzEwIDAuMDkxNzAxMjI3MjM2MzkxNSAtPiAtMS4wMzc2MjQ4NTIxMzMzOTkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMjAgbG9nMTAgNS45NTk0MDQzODUyNDQ5MjEgIC0+IDAuNzc1MjAyODU2MTk1MzQwMSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEyMSBsb2cxMCAwLjAwMDEyMDk3NTkxNDg0ODYgLT4gLTMuOTE3MzAxMDg0OTY4OTAzIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTIyIGxvZzEwIDAuMDAwNDcwNjExMjEzOTgzOCAtPiAtMy4zMjczMzc3Mjg0MjgwMzkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMjMgbG9nMTAgMC4wMDY5NzAwNDU3Mzc3MDQ2IC0+IC0yLjE1Njc2NDM3MjAzNTc3MSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEyNCBsb2cxMCAwLjUxNTU1ODQ1Njk4NTI2MTkgLT4gLTAuMjg3NzIyMDg0NzgwNTAyNSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEyNSBsb2cxMCA4OC4wNjAwNTg4NTYwNzQxNCAgLT4gMS45NDQ3Nzg5NzEzODk5MTMgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMjYgbG9nMTAgMC4wNDQ4MjQwMDM4MjE5ODY2IC0+IC0xLjM0ODQ4OTM1MzUwOTcwOSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEyNyBsb2cxMCAzLjQxOTYyMjQ4NDA1OTU2NSAgLT4gMC41MzM5NzgxNjM5MTAxMTQ1IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTI4IGxvZzEwIDUuMTcxMTIzMzUzODU4NzIxICAtPiAwLjcxMzU4NDg5NzcxNDI4NTQgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMjkgbG9nMTAgMC4wMDAyMTMzMTg4MzE5ODA3IC0+IC0zLjY3MDk3MDgwMjk0NTg3MiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzMCBsb2cxMCA0Ni4yMTA4NjcwMzEzNjk2NiAgLT4gMS42NjQ3NDQxMTcwNDUxNDkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMzEgbG9nMTAgMC4wMDAwNjMxMDUzNzE0NDE1IC0+IC00LjE5OTkzMzY3MjYzOTg4MCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzMiBsb2cxMCA3OC42NjAxOTE5Njg3MDY5OCAgLT4gMS44OTU3NTUwMDE5NjI0NjkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMzMgbG9nMTAgMC4wMDA3MTUyMjc4MzUxMTg4IC0+IC0zLjE0NTU1NTU5MjA4MjI5NyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzNCBsb2cxMCA0NS41MjUwOTgxOTkyODUzNiAgLT4gMS42NTgyNTA4OTEyNTY4OTIgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMzUgbG9nMTAgMC4wMDAwNzAzMjI3Nzk1NzQwIC0+IC00LjE1MjkwMzk3MTY5NzE4MyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzNiBsb2cxMCAyNi4yNDQzODY0MTQyNjY2OSAgLT4gMS40MTkwMzY0MjM1NTA1OTkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIxMzcgbG9nMTAgMC4wMDAwMDQ0NjU0ODI5NTM1IC0+IC01LjM1MDEzMTU2NDE2NjgxNyBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzOCBsb2cxMCAwLjczNjA3MDI3MzMwNjI1MjkgLT4gLTAuMTMzMDgwNzIxMTg5MzYxMSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjEzOSBsb2cxMCA4LjQxNzA1OTE3NjQ2OTY1NSAgLT4gMC45MjUxNjAzODA1MTEyNzc4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMTQwIGxvZzEwIDAuMDAwMjkyNjU3MDc2Nzk2OCAtPiAtMy41MzM2NDA5Njk2NjQ4MTggSW5leGFjdCBSb3VuZGVkDQorDQorLS0gUD03LCB3aXRoaW4gMC05OQ0KK1ByZWNpc2lvbjogNw0KK2xvZ3gyMDAxIGxvZzEwIDU3LjI2MDg5ICAtPiAxLjc1Nzg1OCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAwMiBsb2cxMCAwLjA1NzU0MjEgLT4gLTEuMjQwMDE0IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDAzIGxvZzEwIDAuNTkxODQ2NSAtPiAtMC4yMjc3OTA5IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDA0IGxvZzEwIDAuMDA2ODc3NiAtPiAtMi4xNjI1NjMgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMDUgbG9nMTAgMC4wMDY2ODMzIC0+IC0yLjE3NTAwOSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAwNiBsb2cxMCA5LjkyNjk2MyAgLT4gMC45OTY4MTY0IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDA3IGxvZzEwIDAuMDA0MTg1MiAtPiAtMi4zNzgyODQgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMDggbG9nMTAgODQuMTU0MTIgIC0+IDEuOTI1MDc1IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDA5IGxvZzEwIDIuNDY2ODU2ICAtPiAwLjM5MjE0MzggSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMTAgbG9nMTAgMC4wMDU4MDQ3IC0+IC0yLjIzNjIyMCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAxMSBsb2cxMCA5Ljg4NTE1NCAgLT4gMC45OTQ5ODM0IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDEyIGxvZzEwIDAuNjY2NzY1NCAtPiAtMC4xNzYwMjY5IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDEzIGxvZzEwIDM0LjY1NzM2ICAtPiAxLjUzOTc5NSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAxNCBsb2cxMCAwLjAwMjY4ODQgLT4gLTIuNTcwNTA2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDE1IGxvZzEwIDAuMDQzMjc2NyAtPiAtMS4zNjM3NDYgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMTYgbG9nMTAgNjYuMDE0MDcgIC0+IDEuODE5NjM3IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDE3IGxvZzEwIDAuMDA3MDU3MiAtPiAtMi4xNTEzNjggSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMTggbG9nMTAgMC4wNzMxNjEzIC0+IC0xLjEzNTcxOSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAxOSBsb2cxMCA5LjgzODk4MyAgLT4gMC45OTI5NTAyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDIwIGxvZzEwIDE1Ljg5Njk2ICAtPiAxLjIwMTMxNCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAyMSBsb2cxMCA4LjQ1OTI0NyAgLT4gMC45MjczMzE3IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDIyIGxvZzEwIDAuMDAxMDg3MyAtPiAtMi45NjM2NTEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMjMgbG9nMTAgMC42NDk4NjE5IC0+IC0wLjE4NzE3ODkgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMjQgbG9nMTAgMC4wODQ3MDA4IC0+IC0xLjA3MjExMiBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAyNSBsb2cxMCAwLjAwNzU0ODkgLT4gLTIuMTIyMTE2IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDI2IGxvZzEwIDUxLjExMTUyICAtPiAxLjcwODUxOSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAyNyBsb2cxMCAwLjcyMzM4NjYgLT4gLTAuMTQwNjI5NSBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAyOCBsb2cxMCAyLjI1NDcyMSAgLT4gMC4zNTMwOTI4IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDI5IGxvZzEwIDYuNTY4NDQ0ICAtPiAwLjgxNzQ2MjUgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMzAgbG9nMTAgODMuNzI2MzkgIC0+IDEuOTIyODYyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDMxIGxvZzEwIDYuNzIwNTg1ICAtPiAwLjgyNzQwNzEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMzIgbG9nMTAgODcuOTAzNjYgIC0+IDEuOTQ0MDA3IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDMzIGxvZzEwIDAuMDQzMzMyNCAtPiAtMS4zNjMxODcgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMzQgbG9nMTAgMzQuNjM5MTIgIC0+IDEuNTM5NTY3IEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDM1IGxvZzEwIDAuODA4OTA1OSAtPiAtMC4wOTIxMDIwMCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAzNiBsb2cxMCA3Ljc5MzQwNSAgLT4gMC44OTE3MjcyIEluZXhhY3QgUm91bmRlZA0KK2xvZ3gyMDM3IGxvZzEwIDAuMDA0MTc1NyAtPiAtMi4zNzkyNzEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwMzggbG9nMTAgNy4xMzU0MTcgIC0+IDAuODUzNDE5NCBJbmV4YWN0IFJvdW5kZWQNCitsb2d4MjAzOSBsb2cxMCAxMi40OTU3MCAgLT4gMS4wOTY3NjEgSW5leGFjdCBSb3VuZGVkDQorbG9neDIwNDAgbG9nMTAgNi4zNTYyNzYgIC0+IDAuODAzMjAyNyBJbmV4YWN0IFJvdW5kZWQNCisNCistLS0tLS0tLQ0KK21heEV4cG9uZW50OiAzODQNCittaW5FeHBvbmVudDogLTM4Mw0KK3ByZWNpc2lvbjogICAxNg0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCistLSBzcGVjaWFsIHZhbHVlcw0KK2xvZ3g4MjAgIGxvZzEwICAgSW5maW5pdHkgLT4gICBJbmZpbml0eQ0KK2xvZ3g4MjEgIGxvZzEwICAgMCAgICAgICAgLT4gIC1JbmZpbml0eQ0KK2xvZ3g4MjIgIGxvZzEwICAgTmFOICAgICAgLT4gICBOYU4NCitsb2d4ODIzICBsb2cxMCAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitsb2d4ODI0ICBsb2cxMCAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ3g4MjUgIGxvZzEwICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQorbG9neDgyNiAgbG9nMTAgICBOYU40NTYgICAtPiAgIE5hTjQ1Ng0KK2xvZ3g4MjcgIGxvZzEwICAgLU5hTjY1NCAgLT4gIC1OYU42NTQNCitsb2d4ODI4ICBsb2cxMCAgIE5hTjEgICAgIC0+ICAgTmFOMQ0KKw0KKw0KKy0tIEludmFsaWQgb3BlcmF0aW9ucyBkdWUgdG8gcmVzdHJpY3Rpb25zDQorLS0gW25leHQgdHdvIHByb2JhYmx5IHNraXBwZWQgYnkgbW9zdCB0ZXN0IGhhcm5lc3Nlc10NCitwcmVjaXNpb246IDEwMDAwMDAwMA0KK2xvZ3g5MDEgIGxvZzEwIDEgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KK3ByZWNpc2lvbjogIDk5OTk5OTk5DQorbG9neDkwMiAgbG9nMTAgMCAtPiAgTmFOICAgICAgICAgICAgSW52YWxpZF9jb250ZXh0DQorDQorcHJlY2lzaW9uOiA5DQorbWF4RXhwb25lbnQ6ICAgMTAwMDAwMA0KK21pbkV4cG9uZW50OiAgIC05OTk5OTkNCitsb2d4OTAzICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KK21heEV4cG9uZW50OiAgICA5OTk5OTkNCittaW5FeHBvbmVudDogICAtOTk5OTk5DQorbG9neDkwNCAgbG9nMTAgMCAtPiAgLUluZmluaXR5DQorbWF4RXhwb25lbnQ6ICAgIDk5OTk5OQ0KK21pbkV4cG9uZW50OiAgLTEwMDAwMDANCitsb2d4OTA1ICBsb2cxMCAxICAgLT4gIE5hTiAgICAgICAgICAgIEludmFsaWRfY29udGV4dA0KK21heEV4cG9uZW50OiAgICA5OTk5OTkNCittaW5FeHBvbmVudDogICAtOTk5OTk4DQorbG9neDkwNiAgbG9nMTAgMCAtPiAgLUluZmluaXR5DQorDQorLS0gTnVsbCB0ZXN0DQorbG9neDkwMCAgbG9nMTAgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbG9nYi5kZWNUZXN0CmluZGV4IDhiNzkwMDYuLmZmNDIwZDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9sb2diLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2xvZ2IuZGVjVGVzdApAQCAtMSwxODggKzEsMTg4IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIGxvZ2IuZGVjVGVzdCAtLSByZXR1cm4gaW50ZWdyYWwgYWRqdXN0ZWQgZXhwb25lbnQgYXMgcGVyIDc1NHIgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDUsIDIwMDkuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gVGhpcyBlbXBoYXNpc2VzIHRoZSB0ZXN0aW5nIG9mIG5vdGFibGUgY2FzZXMsIGFzIHRoZXkgd2lsbCBvZnRlbgotLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4KLQotZXh0ZW5kZWQ6ICAgIDEKLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLW1heEV4cG9uZW50OiA5OTkKLW1pbmV4cG9uZW50OiAtOTk5Ci0KLS0tIGJhc2ljcyAmIGV4YW1wbGVzCi1wcmVjaXNpb246ICAgOQotbG9nYngwMDEgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1sb2dieDAwMiBsb2diICAxRS05OTkgICAgICAgICAgICAtPiAtOTk5Ci1sb2dieDAwMyBsb2diICA5RS05OTkgICAgICAgICAgICAtPiAtOTk5Ci1sb2dieDAwNCBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMwotbG9nYngwMDUgbG9nYiAgMC4wMyAgICAgICAgICAgICAgLT4gLTIKLWxvZ2J4MDA2IGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAwCi1sb2dieDAwNyBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMAotbG9nYngwMDggbG9nYiAgMi41ICAgICAgICAgICAgICAgLT4gIDAKLWxvZ2J4MDA5IGxvZ2IgIDIuNTAgICAgICAgICAgICAgIC0+ICAwCi1sb2dieDAxMCBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQotbG9nYngwMTEgbG9nYiAgNzAgICAgICAgICAgICAgICAgLT4gIDEKLWxvZ2J4MDEyIGxvZ2IgIDEwMCAgICAgICAgICAgICAgIC0+ICAyCi1sb2dieDAxMyBsb2diICAyNTAgICAgICAgICAgICAgICAtPiAgMgotbG9nYngwMTQgbG9nYiArSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5Ci0KLS0tIG5lZ2F0aXZlcyBhcmUgdHJlYXRlZCBhcyBwb3NpdGl2ZXMKLWxvZ2J4MDIxIGxvZ2IgLTAgICAgICAgICAgICAgICAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotbG9nYngwMjIgbG9nYiAtMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQotbG9nYngwMjMgbG9nYiAtOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQotbG9nYngwMjQgbG9nYiAtMC4wMDEgICAgICAgICAgICAgLT4gLTMKLWxvZ2J4MDI1IGxvZ2IgLTEgICAgICAgICAgICAgICAgIC0+ICAwCi1sb2dieDAyNiBsb2diIC0yICAgICAgICAgICAgICAgICAtPiAgMAotbG9nYngwMjcgbG9nYiAtMTAgICAgICAgICAgICAgICAgLT4gIDEKLWxvZ2J4MDI4IGxvZ2IgLTcwICAgICAgICAgICAgICAgIC0+ICAxCi1sb2dieDAyOSBsb2diIC0xMDAgICAgICAgICAgICAgICAtPiAgMgotbG9nYngwMzAgbG9nYiAtMTAwMDAwMDAwICAgICAgICAgLT4gIDgKLWxvZ2J4MDMxIGxvZ2IgLUluZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQotCi0tLSB6ZXJvcwotbG9nYngxMTEgbG9nYiAgICAgICAgICAwICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1sb2dieDExMiBsb2diICAgICAgICAgLTAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KLWxvZ2J4MTEzIGxvZ2IgICAgICAgMEUrNCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotbG9nYngxMTQgbG9nYiAgICAgIC0wRSs0ICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1sb2dieDExNSBsb2diICAgICAwLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KLWxvZ2J4MTE2IGxvZ2IgICAgLTAuMDAwMCAgIC0+IC1JbmZpbml0eSAgRGl2aXNpb25fYnlfemVybwotbG9nYngxMTcgbG9nYiAgICAgIDBFLTE0MSAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvCi1sb2dieDExOCBsb2diICAgICAtMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8KLQotLS0gZnVsbCBjb2VmZmljaWVudHMsIGFsdGVybmF0aW5nIGJpdHMKLWxvZ2J4MTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgKLWxvZ2J4MTIyIGxvZ2IgIC0yNjgyNjgyNjggICAgICAgIC0+IDgKLWxvZ2J4MTIzIGxvZ2IgICAxMzQxMzQxMzQgICAgICAgIC0+IDgKLWxvZ2J4MTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLWxvZ2J4MTMxIGxvZ2IgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDk5OQotbG9nYngxMzIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQotbG9nYngxMzMgbG9nYiAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gLTk5OQotbG9nYngxMzQgbG9nYiAgMUUtMTAwNyAgICAgICAgICAgLT4gLTEwMDcKLQotbG9nYngxMzUgbG9nYiAgLTFFLTEwMDcgICAgICAgICAgLT4gLTEwMDcKLWxvZ2J4MTM2IGxvZ2IgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC05OTkKLWxvZ2J4MTM3IGxvZ2IgIC0xRS05OTkgICAgICAgICAgIC0+IC05OTkKLWxvZ2J4MTM4IGxvZ2IgIC05Ljk5OTk5OTk5RSs5OTkgIC0+ICA5OTkKLQotLS0gb25lcwotbG9nYngwMDYxIGxvZ2IgIDEgICAgICAgICAgICAgICAgIC0+ICAgMAotbG9nYngwMDYyIGxvZ2IgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMAotbG9nYngwMDYzIGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAotbG9nYngwMDY0IGxvZ2IgIDEuMDAwMDAwMDAwMDAwMDAwMDAwIC0+ICAgMAotCi0tLSBub3RhYmxlIGNhc2VzIC0tIGV4YWN0IHBvd2VycyBvZiAxMAotbG9nYngxMTAwIGxvZ2IgMSAgICAgICAgICAgICAtPiAwCi1sb2dieDExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDEKLWxvZ2J4MTEwMiBsb2diIDEwMCAgICAgICAgICAgLT4gMgotbG9nYngxMTAzIGxvZ2IgMTAwMCAgICAgICAgICAtPiAzCi1sb2dieDExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQKLWxvZ2J4MTEwNSBsb2diIDEwMDAwMCAgICAgICAgLT4gNQotbG9nYngxMTA2IGxvZ2IgMTAwMDAwMCAgICAgICAtPiA2Ci1sb2dieDExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcKLWxvZ2J4MTEwOCBsb2diIDEwMDAwMDAwMCAgICAgLT4gOAotbG9nYngxMTA5IGxvZ2IgMTAwMDAwMDAwMCAgICAtPiA5Ci1sb2dieDExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwCi1sb2dieDExMTEgbG9nYiAxMDAwMDAwMDAwMDAgIC0+IDExCi1sb2dieDExMTIgbG9nYiAxMDAwMDAwMDAwMDAwIC0+IDEyCi1sb2dieDExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQotbG9nYngxMTE0IGxvZ2IgMC4wMDAwMDAwMDAxIC0+IC0xMAotbG9nYngxMTE1IGxvZ2IgMC4wMDAwMDAwMDEgLT4gLTkKLWxvZ2J4MTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgKLWxvZ2J4MTExNyBsb2diIDAuMDAwMDAwMSAtPiAtNwotbG9nYngxMTE4IGxvZ2IgMC4wMDAwMDEgLT4gLTYKLWxvZ2J4MTExOSBsb2diIDAuMDAwMDEgLT4gLTUKLWxvZ2J4MTEyMCBsb2diIDAuMDAwMSAtPiAtNAotbG9nYngxMTIxIGxvZ2IgMC4wMDEgLT4gLTMKLWxvZ2J4MTEyMiBsb2diIDAuMDEgLT4gLTIKLWxvZ2J4MTEyMyBsb2diIDAuMSAtPiAtMQotbG9nYngxMTI0IGxvZ2IgMUUtOTkgIC0+IC05OQotbG9nYngxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDAKLWxvZ2J4MTEyNiBsb2diIDFFLTM4MyAtPiAtMzgzCi1sb2dieDExMjcgbG9nYiAxRS05OTkgLT4gLTk5OQotCi0tLSBzdWdnZXN0aW9ucyBmcm9tIElsYW4gTmVoYW1hCi1sb2dieDE0MDAgbG9nYiAxMEUtMyAgICAtPiAtMgotbG9nYngxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTEKLWxvZ2J4MTQwMiBsb2diIDEwMEUtMiAgIC0+ICAwCi1sb2dieDE0MDMgbG9nYiAxMDAwRS0yICAtPiAgMQotbG9nYngxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDIKLWxvZ2J4MTQwNSBsb2diIDEwRS0xICAgIC0+ICAwCi1sb2dieDE0MDYgbG9nYiAxMDBFLTEgICAtPiAgMQotbG9nYngxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDIKLWxvZ2J4MTQwOCBsb2diIDEwMDAwRS0xIC0+ICAzCi1sb2dieDE0MDkgbG9nYiAxMEUwICAgICAtPiAgMQotbG9nYngxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDIKLWxvZ2J4MTQxMSBsb2diIDEwMDBFMCAgIC0+ICAzCi1sb2dieDE0MTIgbG9nYiAxMDAwMEUwICAtPiAgNAotbG9nYngxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDIKLWxvZ2J4MTQxNCBsb2diIDEwMEUxICAgIC0+ICAzCi1sb2dieDE0MTUgbG9nYiAxMDAwRTEgICAtPiAgNAotbG9nYngxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUKLWxvZ2J4MTQxNyBsb2diIDEwRTIgICAgIC0+ICAzCi1sb2dieDE0MTggbG9nYiAxMDBFMiAgICAtPiAgNAotbG9nYngxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUKLWxvZ2J4MTQyMCBsb2diIDEwMDAwRTIgIC0+ICA2Ci0KLS0tIGluZXhhY3RzCi1wcmVjaXNpb246IDIKLWxvZ2J4MTUwMCBsb2diIDEwMDAwRTIgICAgICAgLT4gIDYKLWxvZ2J4MTUwMSBsb2diIDFFKzk5ICAgICAgICAgLT4gIDk5Ci1sb2dieDE1MDIgbG9nYiAxRS05OSAgICAgICAgIC0+IC05OQotbG9nYngxNTAzIGxvZ2IgMUUrMTAwICAgICAgICAtPiAgMS4wRSsyICBSb3VuZGVkCi1sb2dieDE1MDQgbG9nYiAxRSs5OTkgICAgICAgIC0+ICAxLjBFKzMgIEluZXhhY3QgUm91bmRlZAotbG9nYngxNTA1IGxvZ2IgMUUtMTAwICAgICAgICAtPiAtMS4wRSsyICBSb3VuZGVkCi1sb2dieDE1MDYgbG9nYiAxRS05OTkgICAgICAgIC0+IC0xLjBFKzMgIEluZXhhY3QgUm91bmRlZAotbG9nYngxNTA3IGxvZ2IgMUUtMTExMSAgICAgICAtPiAtMS4xRSszICBJbmV4YWN0IFJvdW5kZWQKLWxvZ2J4MTUwOCBsb2diIDFFLTMzMzMgICAgICAgLT4gLTMuM0UrMyAgSW5leGFjdCBSb3VuZGVkCi1sb2dieDE1MDkgbG9nYiAxRS02NjY2ICAgICAgIC0+IC02LjdFKzMgIEluZXhhY3QgUm91bmRlZAotbG9nYngxNTEwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wRSs5ICBJbmV4YWN0IFJvdW5kZWQKLWxvZ2J4MTUxMSBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTEuMEUrOSAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDEKLWxvZ2J4MTUxNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTFFKzMgICAgSW5leGFjdCBSb3VuZGVkCi1sb2dieDE1MTggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zRSszICAgIEluZXhhY3QgUm91bmRlZAotbG9nYngxNTE5IGxvZ2IgMUUtNjY2NiAgICAgICAtPiAtN0UrMyAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogOAotbG9nYngxNTIwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAotbG9nYngxNTIxIGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtMS4wMDAwMDAwRSs5IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA5Ci1sb2dieDE1MjMgbG9nYiAxRSs5OTk5OTk5OTkgIC0+ICA5OTk5OTk5OTkKLWxvZ2J4MTUyNCBsb2diIDFFLTk5OTk5OTk5OSAgLT4gLTk5OTk5OTk5OQotCi0tLSBzcGVjaWFsIHZhbHVlcwotcHJlY2lzaW9uOiA5Ci1sb2dieDgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkKLWxvZ2J4ODIxICBsb2diICAtSW5maW5pdHkgLT4gICBJbmZpbml0eQotbG9nYng4MjIgIGxvZ2IgICAwICAgICAgICAtPiAgLUluZmluaXR5IERpdmlzaW9uX2J5X3plcm8KLWxvZ2J4ODIzICBsb2diICAgTmFOICAgICAgLT4gICBOYU4KLWxvZ2J4ODI0ICBsb2diICAgc05hTiAgICAgLT4gICBOYU4gICAgIEludmFsaWRfb3BlcmF0aW9uCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1sb2dieDgyNSAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbgotbG9nYng4MjYgIGxvZ2IgICAtc05hTjMyMSAtPiAgLU5hTjMyMSAgSW52YWxpZF9vcGVyYXRpb24KLWxvZ2J4ODI3ICBsb2diICAgTmFONDU2ICAgLT4gICBOYU40NTYKLWxvZ2J4ODI4ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQKLWxvZ2J4ODI5ICBsb2diICAgTmFOMSAgICAgLT4gICBOYU4xCi0KLS0tIE51bGwgdGVzdAotbG9nYng5MDAgIGxvZ2IgIyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIGxvZ2IuZGVjVGVzdCAtLSByZXR1cm4gaW50ZWdyYWwgYWRqdXN0ZWQgZXhwb25lbnQgYXMgcGVyIDc1NHIgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA1LCAyMDA5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSBUaGlzIGVtcGhhc2lzZXMgdGhlIHRlc3Rpbmcgb2Ygbm90YWJsZSBjYXNlcywgYXMgdGhleSB3aWxsIG9mdGVuDQorLS0gaGF2ZSB1bnVzdWFsIHBhdGhzIChlc3BlY2lhbGx5IHRoZSAxMCoqbiByZXN1bHRzKS4NCisNCitleHRlbmRlZDogICAgMQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCisNCistLSBiYXNpY3MgJiBleGFtcGxlcw0KK3ByZWNpc2lvbjogICA5DQorbG9nYngwMDEgbG9nYiAgMCAgICAgICAgICAgICAgICAgLT4gLUluZmluaXR5ICBEaXZpc2lvbl9ieV96ZXJvDQorbG9nYngwMDIgbG9nYiAgMUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQ0KK2xvZ2J4MDAzIGxvZ2IgIDlFLTk5OSAgICAgICAgICAgIC0+IC05OTkNCitsb2dieDAwNCBsb2diICAwLjAwMSAgICAgICAgICAgICAtPiAtMw0KK2xvZ2J4MDA1IGxvZ2IgIDAuMDMgICAgICAgICAgICAgIC0+IC0yDQorbG9nYngwMDYgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gIDANCitsb2dieDAwNyBsb2diICAyICAgICAgICAgICAgICAgICAtPiAgMA0KK2xvZ2J4MDA4IGxvZ2IgIDIuNSAgICAgICAgICAgICAgIC0+ICAwDQorbG9nYngwMDkgbG9nYiAgMi41MCAgICAgICAgICAgICAgLT4gIDANCitsb2dieDAxMCBsb2diICAxMCAgICAgICAgICAgICAgICAtPiAgMQ0KK2xvZ2J4MDExIGxvZ2IgIDcwICAgICAgICAgICAgICAgIC0+ICAxDQorbG9nYngwMTIgbG9nYiAgMTAwICAgICAgICAgICAgICAgLT4gIDINCitsb2dieDAxMyBsb2diICAyNTAgICAgICAgICAgICAgICAtPiAgMg0KK2xvZ2J4MDE0IGxvZ2IgK0luZmluaXR5ICAgICAgICAgIC0+ICBJbmZpbml0eQ0KKw0KKy0tIG5lZ2F0aXZlcyBhcmUgdHJlYXRlZCBhcyBwb3NpdGl2ZXMNCitsb2dieDAyMSBsb2diIC0wICAgICAgICAgICAgICAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDAyMiBsb2diIC0xRS05OTkgICAgICAgICAgICAtPiAtOTk5DQorbG9nYngwMjMgbG9nYiAtOUUtOTk5ICAgICAgICAgICAgLT4gLTk5OQ0KK2xvZ2J4MDI0IGxvZ2IgLTAuMDAxICAgICAgICAgICAgIC0+IC0zDQorbG9nYngwMjUgbG9nYiAtMSAgICAgICAgICAgICAgICAgLT4gIDANCitsb2dieDAyNiBsb2diIC0yICAgICAgICAgICAgICAgICAtPiAgMA0KK2xvZ2J4MDI3IGxvZ2IgLTEwICAgICAgICAgICAgICAgIC0+ICAxDQorbG9nYngwMjggbG9nYiAtNzAgICAgICAgICAgICAgICAgLT4gIDENCitsb2dieDAyOSBsb2diIC0xMDAgICAgICAgICAgICAgICAtPiAgMg0KK2xvZ2J4MDMwIGxvZ2IgLTEwMDAwMDAwMCAgICAgICAgIC0+ICA4DQorbG9nYngwMzEgbG9nYiAtSW5maW5pdHkgICAgICAgICAgLT4gIEluZmluaXR5DQorDQorLS0gemVyb3MNCitsb2dieDExMSBsb2diICAgICAgICAgIDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExMiBsb2diICAgICAgICAgLTAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExMyBsb2diICAgICAgIDBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExNCBsb2diICAgICAgLTBFKzQgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExNSBsb2diICAgICAwLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExNiBsb2diICAgIC0wLjAwMDAgICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExNyBsb2diICAgICAgMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCitsb2dieDExOCBsb2diICAgICAtMEUtMTQxICAtPiAtSW5maW5pdHkgIERpdmlzaW9uX2J5X3plcm8NCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK2xvZ2J4MTIxIGxvZ2IgICAyNjgyNjgyNjggICAgICAgIC0+IDgNCitsb2dieDEyMiBsb2diICAtMjY4MjY4MjY4ICAgICAgICAtPiA4DQorbG9nYngxMjMgbG9nYiAgIDEzNDEzNDEzNCAgICAgICAgLT4gOA0KK2xvZ2J4MTI0IGxvZ2IgIC0xMzQxMzQxMzQgICAgICAgIC0+IDgNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK2xvZ2J4MTMxIGxvZ2IgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDk5OQ0KK2xvZ2J4MTMyIGxvZ2IgIDFFLTk5OSAgICAgICAgICAgIC0+IC05OTkNCitsb2dieDEzMyBsb2diICAxLjAwMDAwMDAwRS05OTkgICAtPiAtOTk5DQorbG9nYngxMzQgbG9nYiAgMUUtMTAwNyAgICAgICAgICAgLT4gLTEwMDcNCisNCitsb2dieDEzNSBsb2diICAtMUUtMTAwNyAgICAgICAgICAtPiAtMTAwNw0KK2xvZ2J4MTM2IGxvZ2IgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC05OTkNCitsb2dieDEzNyBsb2diICAtMUUtOTk5ICAgICAgICAgICAtPiAtOTk5DQorbG9nYngxMzggbG9nYiAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gIDk5OQ0KKw0KKy0tIG9uZXMNCitsb2dieDAwNjEgbG9nYiAgMSAgICAgICAgICAgICAgICAgLT4gICAwDQorbG9nYngwMDYyIGxvZ2IgIDEuMCAgICAgICAgICAgICAgIC0+ICAgMA0KK2xvZ2J4MDA2MyBsb2diICAxLjAwMDAwMDAwMDAwMDAwMCAtPiAgIDANCitsb2dieDAwNjQgbG9nYiAgMS4wMDAwMDAwMDAwMDAwMDAwMDAgLT4gICAwDQorDQorLS0gbm90YWJsZSBjYXNlcyAtLSBleGFjdCBwb3dlcnMgb2YgMTANCitsb2dieDExMDAgbG9nYiAxICAgICAgICAgICAgIC0+IDANCitsb2dieDExMDEgbG9nYiAxMCAgICAgICAgICAgIC0+IDENCitsb2dieDExMDIgbG9nYiAxMDAgICAgICAgICAgIC0+IDINCitsb2dieDExMDMgbG9nYiAxMDAwICAgICAgICAgIC0+IDMNCitsb2dieDExMDQgbG9nYiAxMDAwMCAgICAgICAgIC0+IDQNCitsb2dieDExMDUgbG9nYiAxMDAwMDAgICAgICAgIC0+IDUNCitsb2dieDExMDYgbG9nYiAxMDAwMDAwICAgICAgIC0+IDYNCitsb2dieDExMDcgbG9nYiAxMDAwMDAwMCAgICAgIC0+IDcNCitsb2dieDExMDggbG9nYiAxMDAwMDAwMDAgICAgIC0+IDgNCitsb2dieDExMDkgbG9nYiAxMDAwMDAwMDAwICAgIC0+IDkNCitsb2dieDExMTAgbG9nYiAxMDAwMDAwMDAwMCAgIC0+IDEwDQorbG9nYngxMTExIGxvZ2IgMTAwMDAwMDAwMDAwICAtPiAxMQ0KK2xvZ2J4MTExMiBsb2diIDEwMDAwMDAwMDAwMDAgLT4gMTINCitsb2dieDExMTMgbG9nYiAwLjAwMDAwMDAwMDAxIC0+IC0xMQ0KK2xvZ2J4MTExNCBsb2diIDAuMDAwMDAwMDAwMSAtPiAtMTANCitsb2dieDExMTUgbG9nYiAwLjAwMDAwMDAwMSAtPiAtOQ0KK2xvZ2J4MTExNiBsb2diIDAuMDAwMDAwMDEgLT4gLTgNCitsb2dieDExMTcgbG9nYiAwLjAwMDAwMDEgLT4gLTcNCitsb2dieDExMTggbG9nYiAwLjAwMDAwMSAtPiAtNg0KK2xvZ2J4MTExOSBsb2diIDAuMDAwMDEgLT4gLTUNCitsb2dieDExMjAgbG9nYiAwLjAwMDEgLT4gLTQNCitsb2dieDExMjEgbG9nYiAwLjAwMSAtPiAtMw0KK2xvZ2J4MTEyMiBsb2diIDAuMDEgLT4gLTINCitsb2dieDExMjMgbG9nYiAwLjEgLT4gLTENCitsb2dieDExMjQgbG9nYiAxRS05OSAgLT4gLTk5DQorbG9nYngxMTI1IGxvZ2IgMUUtMTAwIC0+IC0xMDANCitsb2dieDExMjYgbG9nYiAxRS0zODMgLT4gLTM4Mw0KK2xvZ2J4MTEyNyBsb2diIDFFLTk5OSAtPiAtOTk5DQorDQorLS0gc3VnZ2VzdGlvbnMgZnJvbSBJbGFuIE5laGFtYQ0KK2xvZ2J4MTQwMCBsb2diIDEwRS0zICAgIC0+IC0yDQorbG9nYngxNDAxIGxvZ2IgMTBFLTIgICAgLT4gLTENCitsb2dieDE0MDIgbG9nYiAxMDBFLTIgICAtPiAgMA0KK2xvZ2J4MTQwMyBsb2diIDEwMDBFLTIgIC0+ICAxDQorbG9nYngxNDA0IGxvZ2IgMTAwMDBFLTIgLT4gIDINCitsb2dieDE0MDUgbG9nYiAxMEUtMSAgICAtPiAgMA0KK2xvZ2J4MTQwNiBsb2diIDEwMEUtMSAgIC0+ICAxDQorbG9nYngxNDA3IGxvZ2IgMTAwMEUtMSAgLT4gIDINCitsb2dieDE0MDggbG9nYiAxMDAwMEUtMSAtPiAgMw0KK2xvZ2J4MTQwOSBsb2diIDEwRTAgICAgIC0+ICAxDQorbG9nYngxNDEwIGxvZ2IgMTAwRTAgICAgLT4gIDINCitsb2dieDE0MTEgbG9nYiAxMDAwRTAgICAtPiAgMw0KK2xvZ2J4MTQxMiBsb2diIDEwMDAwRTAgIC0+ICA0DQorbG9nYngxNDEzIGxvZ2IgMTBFMSAgICAgLT4gIDINCitsb2dieDE0MTQgbG9nYiAxMDBFMSAgICAtPiAgMw0KK2xvZ2J4MTQxNSBsb2diIDEwMDBFMSAgIC0+ICA0DQorbG9nYngxNDE2IGxvZ2IgMTAwMDBFMSAgLT4gIDUNCitsb2dieDE0MTcgbG9nYiAxMEUyICAgICAtPiAgMw0KK2xvZ2J4MTQxOCBsb2diIDEwMEUyICAgIC0+ICA0DQorbG9nYngxNDE5IGxvZ2IgMTAwMEUyICAgLT4gIDUNCitsb2dieDE0MjAgbG9nYiAxMDAwMEUyICAtPiAgNg0KKw0KKy0tIGluZXhhY3RzDQorcHJlY2lzaW9uOiAyDQorbG9nYngxNTAwIGxvZ2IgMTAwMDBFMiAgICAgICAtPiAgNg0KK2xvZ2J4MTUwMSBsb2diIDFFKzk5ICAgICAgICAgLT4gIDk5DQorbG9nYngxNTAyIGxvZ2IgMUUtOTkgICAgICAgICAtPiAtOTkNCitsb2dieDE1MDMgbG9nYiAxRSsxMDAgICAgICAgIC0+ICAxLjBFKzIgIFJvdW5kZWQNCitsb2dieDE1MDQgbG9nYiAxRSs5OTkgICAgICAgIC0+ICAxLjBFKzMgIEluZXhhY3QgUm91bmRlZA0KK2xvZ2J4MTUwNSBsb2diIDFFLTEwMCAgICAgICAgLT4gLTEuMEUrMiAgUm91bmRlZA0KK2xvZ2J4MTUwNiBsb2diIDFFLTk5OSAgICAgICAgLT4gLTEuMEUrMyAgSW5leGFjdCBSb3VuZGVkDQorbG9nYngxNTA3IGxvZ2IgMUUtMTExMSAgICAgICAtPiAtMS4xRSszICBJbmV4YWN0IFJvdW5kZWQNCitsb2dieDE1MDggbG9nYiAxRS0zMzMzICAgICAgIC0+IC0zLjNFKzMgIEluZXhhY3QgUm91bmRlZA0KK2xvZ2J4MTUwOSBsb2diIDFFLTY2NjYgICAgICAgLT4gLTYuN0UrMyAgSW5leGFjdCBSb3VuZGVkDQorbG9nYngxNTEwIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgMS4wRSs5ICBJbmV4YWN0IFJvdW5kZWQNCitsb2dieDE1MTEgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC0xLjBFKzkgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMQ0KK2xvZ2J4MTUxNyBsb2diIDFFLTExMTEgICAgICAgLT4gLTFFKzMgICAgSW5leGFjdCBSb3VuZGVkDQorbG9nYngxNTE4IGxvZ2IgMUUtMzMzMyAgICAgICAtPiAtM0UrMyAgICBJbmV4YWN0IFJvdW5kZWQNCitsb2dieDE1MTkgbG9nYiAxRS02NjY2ICAgICAgIC0+IC03RSszICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogOA0KK2xvZ2J4MTUyMCBsb2diIDFFKzk5OTk5OTk5OSAgLT4gIDEuMDAwMDAwMEUrOSBJbmV4YWN0IFJvdW5kZWQNCitsb2dieDE1MjEgbG9nYiAxRS05OTk5OTk5OTkgIC0+IC0xLjAwMDAwMDBFKzkgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA5DQorbG9nYngxNTIzIGxvZ2IgMUUrOTk5OTk5OTk5ICAtPiAgOTk5OTk5OTk5DQorbG9nYngxNTI0IGxvZ2IgMUUtOTk5OTk5OTk5ICAtPiAtOTk5OTk5OTk5DQorDQorLS0gc3BlY2lhbCB2YWx1ZXMNCitwcmVjaXNpb246IDkNCitsb2dieDgyMCAgbG9nYiAgIEluZmluaXR5IC0+ICAgSW5maW5pdHkNCitsb2dieDgyMSAgbG9nYiAgLUluZmluaXR5IC0+ICAgSW5maW5pdHkNCitsb2dieDgyMiAgbG9nYiAgIDAgICAgICAgIC0+ICAtSW5maW5pdHkgRGl2aXNpb25fYnlfemVybw0KK2xvZ2J4ODIzICBsb2diICAgTmFOICAgICAgLT4gICBOYU4NCitsb2dieDgyNCAgbG9nYiAgIHNOYU4gICAgIC0+ICAgTmFOICAgICBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCitsb2dieDgyNSAgbG9nYiAgIHNOYU4xMjMgIC0+ICAgTmFOMTIzICBJbnZhbGlkX29wZXJhdGlvbg0KK2xvZ2J4ODI2ICBsb2diICAgLXNOYU4zMjEgLT4gIC1OYU4zMjEgIEludmFsaWRfb3BlcmF0aW9uDQorbG9nYng4MjcgIGxvZ2IgICBOYU40NTYgICAtPiAgIE5hTjQ1Ng0KK2xvZ2J4ODI4ICBsb2diICAgLU5hTjY1NCAgLT4gIC1OYU42NTQNCitsb2dieDgyOSAgbG9nYiAgIE5hTjEgICAgIC0+ICAgTmFOMQ0KKw0KKy0tIE51bGwgdGVzdA0KK2xvZ2J4OTAwICBsb2diICMgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWF4bWFnLmRlY1Rlc3QKaW5kZXggMjY1ZTkxMi4uNmI0NDIxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21heG1hZy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tYXhtYWcuZGVjVGVzdApAQCAtMSw0MDQgKzEsNDA0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIG1heG1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWF4aW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvCi0tLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDM4NAotbWluZXhwb25lbnQ6IC0zODMKLQotLS0gc2FuaXR5IGNoZWNrcwotbXhneDAwMSBtYXhtYWcgIC0yICAtMiAgLT4gLTIKLW14Z3gwMDIgbWF4bWFnICAtMiAgLTEgIC0+IC0yCi1teGd4MDAzIG1heG1hZyAgLTIgICAwICAtPiAtMgotbXhneDAwNCBtYXhtYWcgIC0yICAgMSAgLT4gLTIKLW14Z3gwMDUgbWF4bWFnICAtMiAgIDIgIC0+ICAyCi1teGd4MDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMgotbXhneDAwNyBtYXhtYWcgIC0xICAtMSAgLT4gLTEKLW14Z3gwMDggbWF4bWFnICAtMSAgIDAgIC0+IC0xCi1teGd4MDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQotbXhneDAxMCBtYXhtYWcgIC0xICAgMiAgLT4gIDIKLW14Z3gwMTEgbWF4bWFnICAgMCAgLTIgIC0+IC0yCi1teGd4MDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQotbXhneDAxMyBtYXhtYWcgICAwICAgMCAgLT4gIDAKLW14Z3gwMTQgbWF4bWFnICAgMCAgIDEgIC0+ICAxCi1teGd4MDE1IG1heG1hZyAgIDAgICAyICAtPiAgMgotbXhneDAxNiBtYXhtYWcgICAxICAtMiAgLT4gLTIKLW14Z3gwMTcgbWF4bWFnICAgMSAgLTEgIC0+ICAxCi1teGd4MDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQotbXhneDAxOSBtYXhtYWcgICAxICAgMSAgLT4gIDEKLW14Z3gwMjAgbWF4bWFnICAgMSAgIDIgIC0+ICAyCi1teGd4MDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMgotbXhneDAyMiBtYXhtYWcgICAyICAtMSAgLT4gIDIKLW14Z3gwMjMgbWF4bWFnICAgMiAgIDAgIC0+ICAyCi1teGd4MDI1IG1heG1hZyAgIDIgICAxICAtPiAgMgotbXhneDAyNiBtYXhtYWcgICAyICAgMiAgLT4gIDIKLQotLS0gZXh0ZW5kZWQgemVyb3MKLW14Z3gwMzAgbWF4bWFnICAgMCAgICAgMCAgIC0+ICAwCi1teGd4MDMxIG1heG1hZyAgIDAgICAgLTAgICAtPiAgMAotbXhneDAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDAKLW14Z3gwMzMgbWF4bWFnICAgMCAgICAgMC4wIC0+ICAwCi1teGd4MDM0IG1heG1hZyAgLTAgICAgIDAgICAtPiAgMCAgICAtLSBub3RlOiAtMCA9IDAsIGJ1dCAwIGNob3NlbgotbXhneDAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTAKLW14Z3gwMzYgbWF4bWFnICAtMCAgICAtMC4wIC0+IC0wLjAKLW14Z3gwMzcgbWF4bWFnICAtMCAgICAgMC4wIC0+ICAwLjAKLW14Z3gwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwCi1teGd4MDM5IG1heG1hZyAgIDAuMCAgLTAgICAtPiAgMC4wCi1teGd4MDQwIG1heG1hZyAgIDAuMCAgLTAuMCAtPiAgMC4wCi1teGd4MDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wCi1teGd4MDQyIG1heG1hZyAgLTAuMCAgIDAgICAtPiAgMAotbXhneDA0MyBtYXhtYWcgIC0wLjAgIC0wICAgLT4gLTAuMAotbXhneDA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMAotbXhneDA0NSBtYXhtYWcgIC0wLjAgICAwLjAgLT4gIDAuMAotCi1teGd4MDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQotbXhneDA1MSBtYXhtYWcgIC0wRTIgICAwRTIgLT4gIDBFKzIKLW14Z3gwNTIgbWF4bWFnICAtMEUyICAgMEUxIC0+ICAwRSsxCi1teGd4MDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMgotbXhneDA1NCBtYXhtYWcgICAwRTEgIC0wRTEgLT4gIDBFKzEKLW14Z3gwNTUgbWF4bWFnICAgMEUyICAtMEUyIC0+ICAwRSsyCi1teGd4MDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMgotbXhneDA1NyBtYXhtYWcgICAwRTEgIC0wRTIgLT4gIDBFKzEKLQotbXhneDA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzEKLW14Z3gwNTkgbWF4bWFnICAgMEUyICAgMEUyIC0+ICAwRSsyCi1teGd4MDYwIG1heG1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMgotbXhneDA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzIKLW14Z3gwNjIgbWF4bWFnICAtMEUxICAtMEUxIC0+IC0wRSsxCi1teGd4MDYzIG1heG1hZyAgLTBFMiAgLTBFMiAtPiAtMEUrMgotbXhneDA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzEKLW14Z3gwNjUgbWF4bWFnICAtMEUxICAtMEUyIC0+IC0wRSsxCi0KLS0tIFNwZWNpYWxzCi1wcmVjaXNpb246IDkKLW14Z3gwOTAgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkKLW14Z3gwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkKLW14Z3gwOTIgbWF4bWFnICBJbmYgIC0xICAgICAtPiAgSW5maW5pdHkKLW14Z3gwOTMgbWF4bWFnICBJbmYgIC0wICAgICAtPiAgSW5maW5pdHkKLW14Z3gwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkKLW14Z3gwOTUgbWF4bWFnICBJbmYgICAxICAgICAtPiAgSW5maW5pdHkKLW14Z3gwOTYgbWF4bWFnICBJbmYgICAxMDAwICAtPiAgSW5maW5pdHkKLW14Z3gwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gwOTggbWF4bWFnIC0xMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gwOTkgbWF4bWFnIC1JbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDEgbWF4bWFnIC0wICAgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDIgbWF4bWFnICAwICAgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDQgbWF4bWFnICAxMDAwICBJbmYgICAtPiAgSW5maW5pdHkKLW14Z3gxMDUgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkKLQotbXhneDEyMCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEyMSBtYXhtYWcgLUluZiAgLTEwMDAgIC0+IC1JbmZpbml0eQotbXhneDEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotbXhneDEyMyBtYXhtYWcgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotbXhneDEyNCBtYXhtYWcgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotbXhneDEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotbXhneDEyNiBtYXhtYWcgLUluZiAgIDEwMDAgIC0+IC1JbmZpbml0eQotbXhneDEyNyBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotbXhneDEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEyOSBtYXhtYWcgLTEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzMCBtYXhtYWcgLTEgICAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzMiBtYXhtYWcgIDAgICAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzMyBtYXhtYWcgIDEgICAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDEzNSBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQotCi0tLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMKLW14Z3gxNDEgbWF4bWFnICBOYU4gLUluZiAgICAtPiAtSW5maW5pdHkKLW14Z3gxNDIgbWF4bWFnICBOYU4gLTEwMDAgICAtPiAtMTAwMAotbXhneDE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xCi1teGd4MTQ0IG1heG1hZyAgTmFOIC0wICAgICAgLT4gLTAKLW14Z3gxNDUgbWF4bWFnICBOYU4gIDAgICAgICAtPiAgMAotbXhneDE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1teGd4MTQ3IG1heG1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKLW14Z3gxNDggbWF4bWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLW14Z3gxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCi1teGd4MTUwIG1heG1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5Ci1teGd4MTUxIG1heG1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLW14Z3gxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQotbXhneDE1MyBtYXhtYWcgLTAgICAgTmFOICAgIC0+IC0wCi1teGd4MTU0IG1heG1hZyAgMCAgICBOYU4gICAgLT4gIDAKLW14Z3gxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQotbXhneDE1NiBtYXhtYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCi1teGd4MTU3IG1heG1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLW14Z3gxNjEgbWF4bWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE2MiBtYXhtYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNjQgbWF4bWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE2NSBtYXhtYWcgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNjcgbWF4bWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE2OCBtYXhtYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNzAgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE3MSBtYXhtYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNzMgbWF4bWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE3NCBtYXhtYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNzYgbWF4bWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbXhneDE3NyBtYXhtYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW14Z3gxNzkgbWF4bWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1teGd4MTgxIG1heG1hZyAgTmFOOSAgLUluZiAgIC0+IC1JbmZpbml0eQotbXhneDE4MiBtYXhtYWcgIE5hTjggICAgIDkgICAtPiAgOQotbXhneDE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkKLQotbXhneDE4NCBtYXhtYWcgLU5hTjEgICBOYU4xMSAtPiAtTmFOMQotbXhneDE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMgotbXhneDE4NiBtYXhtYWcgLU5hTjEzIC1OYU43ICAtPiAtTmFOMTMKLW14Z3gxODcgbWF4bWFnICBOYU4xNCAtTmFONSAgLT4gIE5hTjE0Ci0KLW14Z3gxODggbWF4bWFnIC1JbmYgICAgTmFONCAgLT4gLUluZmluaXR5Ci1teGd4MTg5IG1heG1hZyAtOSAgICAgLU5hTjMgIC0+IC05Ci1teGd4MTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQotCi1teGd4MTkxIG1heG1hZyAgc05hTjk5IC1JbmYgICAgLT4gIE5hTjk5IEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTkzIG1heG1hZyAtc05hTjk3ICBOYU4gICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk0IG1heG1hZyAgc05hTjk2IHNOYU45NCAgLT4gIE5hTjk2IEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk2IG1heG1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk3IG1heG1hZyAgMCAgICAgIHNOYU45MSAgLT4gIE5hTjkxIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uCi1teGd4MTk5IG1heG1hZyAgTmFOICAgIHNOYU44OSAgLT4gIE5hTjg5IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHJvdW5kaW5nIGNoZWNrcwotbWF4ZXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLXByZWNpc2lvbjogOQotbXhneDIwMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAotbXhneDIwMiBtYXhtYWcgMSAxMjM0NTY3ODAwMCAgLT4gMS4yMzQ1Njc4MEUrMTAgUm91bmRlZAotbXhneDIwMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkCi1teGd4MjA0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxLjIzNDU2NzgwRSs5IFJvdW5kZWQKLW14Z3gyMDUgbWF4bWFnIDEyMzQ1Njc4OTAgIDEgIC0+IDEuMjM0NTY3ODlFKzkgUm91bmRlZAotbXhneDIwNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkCi1teGd4MjA3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZAotbXhneDIwOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQKLW14Z3gyMDkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZAotbXhneDIxMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMS4yMzQ1Njc4OUUrMTAgSW5leGFjdCBSb3VuZGVkCi1teGd4MjExIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxLjIzNDU2NzkwRSs5IEluZXhhY3QgUm91bmRlZAotbXhneDIxMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQKLW14Z3gyMTMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkCi1teGd4MjE0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZAotbXhneDIxNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQKLW14Z3gyMTYgbWF4bWFnIDEgLTEyMzQ1Njc4OTAxIC0+IC0xLjIzNDU2Nzg5RSsxMCAgSW5leGFjdCBSb3VuZGVkCi1teGd4MjE3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMS4yMzQ1Njc5MEUrOSAgIEluZXhhY3QgUm91bmRlZAotbXhneDIxOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgICBJbmV4YWN0IFJvdW5kZWQKLQotcHJlY2lzaW9uOiAxNQotbXhneDIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDAKLW14Z3gyMjIgbWF4bWFnIDEgMTIzNDU2NzgwMDAgIC0+IDEyMzQ1Njc4MDAwCi1teGd4MjIzIG1heG1hZyAxMjM0NTY3ODAwICAxICAtPiAxMjM0NTY3ODAwCi1teGd4MjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwCi1teGd4MjI1IG1heG1hZyAxMjM0NTY3ODkwICAxICAtPiAxMjM0NTY3ODkwCi1teGd4MjI2IG1heG1hZyAxIDEyMzQ1Njc4OTAgICAtPiAxMjM0NTY3ODkwCi1teGd4MjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxCi1teGd4MjI4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxMjM0NTY3ODkxCi1teGd4MjI5IG1heG1hZyAxMjM0NTY3ODkwMSAxICAtPiAxMjM0NTY3ODkwMQotbXhneDIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDEKLW14Z3gyMzEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEyMzQ1Njc4OTYKLW14Z3gyMzIgbWF4bWFnIDEgMTIzNDU2Nzg5NiAgIC0+IDEyMzQ1Njc4OTYKLW14Z3gyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxCi1teGd4MjM0IG1heG1hZyAxIC0xMjM0NTY3ODkxICAtPiAtMTIzNDU2Nzg5MQotbXhneDIzNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEyMzQ1Njc4OTAxCi1teGd4MjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDEKLW14Z3gyMzcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xMjM0NTY3ODk2Ci1teGd4MjM4IG1heG1hZyAxIC0xMjM0NTY3ODk2ICAtPiAtMTIzNDU2Nzg5NgotCi0tLSBmcm9tIGV4YW1wbGVzCi1teGd4MjgwIG1heG1hZyAnMycgICAnMicgIC0+ICAnMycKLW14Z3gyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnCi1teGd4MjgyIG1heG1hZyAnMS4wJyAnMScgIC0+ICAnMScKLW14Z3gyODMgbWF4bWFnICcxJyAnMS4wJyAgLT4gICcxJwotbXhneDI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnCi0KLS0tIG92ZXJmbG93IGFuZCB1bmRlcmZsb3cgdGVzdHMgLi4uCi1tYXhFeHBvbmVudDogOTk5OTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OTk5OQotbXhneDMzMCBtYXhtYWcgKzEuMjM0NTY3ODkwMTIzNDVFLTAgOUUrOTk5OTk5OTk5IC0+ICA5RSs5OTk5OTk5OTkKLW14Z3gzMzEgbWF4bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5Ci1teGd4MzMyIG1heG1hZyArMC4xMDAgOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gIDAuMTAwCi1teGd4MzMzIG1heG1hZyA5RS05OTk5OTk5OTkgKzAuMTAwICAgICAgICAgICAgICAgLT4gIDAuMTAwCi1teGd4MzM1IG1heG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQotbXhneDMzNiBtYXhtYWcgOUUrOTk5OTk5OTk5IC0xLjIzNDU2Nzg5MDEyMzQ1RS0wIC0+ICA5RSs5OTk5OTk5OTkKLW14Z3gzMzcgbWF4bWFnIC0wLjEwMCA5RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAgLTAuMTAwCi1teGd4MzM4IG1heG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIC0wLjEwMAotCi1teGd4MzM5IG1heG1hZyAxZS01OTk5OTk5OTkgMWUtNDAwMDAwMDAxICAgLT4gIDFFLTQwMDAwMDAwMQotbXhneDM0MCBtYXhtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDAKLW14Z3gzNDEgbWF4bWFnIDFlLTYwMDAwMDAwMCAxZS00MDAwMDAwMDAgICAtPiAgMUUtNDAwMDAwMDAwCi1teGd4MzQyIG1heG1hZyA5ZS05OTk5OTk5OTggMC4wMSAgICAgICAgICAgLT4gIDAuMDEKLW14Z3gzNDMgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xCi1teGd4MzQ0IG1heG1hZyAwLjAxIDllLTk5OTk5OTk5OCAgICAgICAgICAgLT4gIDAuMDEKLW14Z3gzNDUgbWF4bWFnIDFlNTk5OTk5OTk5IDFlNDAwMDAwMDAxICAgICAtPiAgMUUrNTk5OTk5OTk5Ci1teGd4MzQ2IG1heG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQotbXhneDM0NyBtYXhtYWcgMWU2MDAwMDAwMDAgMWU0MDAwMDAwMDAgICAgIC0+ICAxRSs2MDAwMDAwMDAKLW14Z3gzNDggbWF4bWFnIDllOTk5OTk5OTk4IDEwMCAgICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4Ci1teGd4MzQ5IG1heG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OAotbXhneDM1MCBtYXhtYWcgMTAwICA5ZTk5OTk5OTk5OCAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgKLS0tIHNpZ25zCi1teGd4MzUxIG1heG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3NwotbXhneDM1MiBtYXhtYWcgIDFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+ICAxRSs3Nzc3Nzc3NzcKLW14Z3gzNTMgbWF4bWFnIC0xZSs3Nzc3Nzc3NzcgIDFlKzQxMTExMTExMSAtPiAtMUUrNzc3Nzc3Nzc3Ci1teGd4MzU0IG1heG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3NwotbXhneDM1NSBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAgMWUtNDExMTExMTExIC0+ICAxRS00MTExMTExMTEKLW14Z3gzNTYgbWF4bWFnICAxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExCi1teGd4MzU3IG1heG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQotbXhneDM1OCBtYXhtYWcgLTFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTEKLQotLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UKLS0tIFtleHBsaWNpdCB0ZXN0cyBmb3IgZXhwb25lbnQgb3JkZXJpbmddCi1teGd4NDAxIG1heG1hZyAgSW5mICAgIDEuMSAgICAgLT4gIEluZmluaXR5Ci1teGd4NDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQotbXhneDQwMyBtYXhtYWcgIDEgICAgICAxLjAgICAgIC0+ICAxCi1teGd4NDA0IG1heG1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDEuMAotbXhneDQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEKLW14Z3g0MDYgbWF4bWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMAotbXhneDQwNyBtYXhtYWcgIDAuMTAgICAwICAgICAgIC0+ICAwLjEwCi1teGd4NDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAKLW14Z3g0MDkgbWF4bWFnICAwLjAgICAtMCAgICAgICAtPiAgMC4wCi1teGd4NDEwIG1heG1hZyAgMC4wICAgLTAuMCAgICAgLT4gIDAuMAotbXhneDQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwCi1teGd4NDEyIG1heG1hZyAgMC4wICAgLTAuMDAgICAgLT4gIDAuMAotbXhneDQxMyBtYXhtYWcgIDAgICAgIC0wLjAgICAgIC0+ICAwCi1teGd4NDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDAKLW14Z3g0MTUgbWF4bWFnIC0wLjAgICAtMCAgICAgICAtPiAtMC4wCi1teGd4NDE2IG1heG1hZyAtMCAgICAgLTAuMTAwICAgLT4gLTAuMTAwCi1teGd4NDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwCi1teGd4NDE4IG1heG1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMTAKLW14Z3g0MTkgbWF4bWFnIC0wLjEgICAtMS4wICAgICAtPiAtMS4wCi1teGd4NDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMAotbXhneDQyMSBtYXhtYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xLjEKLW14Z3g0MjMgbWF4bWFnIC0xLjEgICAtSW5mICAgICAtPiAtSW5maW5pdHkKLS0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZAotbXhneDQzMSBtYXhtYWcgIDEuMSAgICBJbmYgICAgIC0+ICBJbmZpbml0eQotbXhneDQzMiBtYXhtYWcgIDEgICAgICAxLjEgICAgIC0+ICAxLjEKLW14Z3g0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQotbXhneDQzNCBtYXhtYWcgIDAuMSAgICAxLjAgICAgIC0+ICAxLjAKLW14Z3g0MzUgbWF4bWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xCi1teGd4NDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTAKLW14Z3g0MzcgbWF4bWFnICAwICAgICAgMC4xMCAgICAtPiAgMC4xMAotbXhneDQzOCBtYXhtYWcgIDAuMCAgICAwICAgICAgIC0+ICAwCi1teGd4NDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMAotbXhneDQ0MCBtYXhtYWcgLTAuMCAgICAwLjAgICAgIC0+ICAwLjAKLW14Z3g0NDEgbWF4bWFnIC0wLjAgICAgMC4wMCAgICAtPiAgMC4wMAotbXhneDQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjAKLW14Z3g0NDMgbWF4bWFnIC0wLjAgICAgMCAgICAgICAtPiAgMAotbXhneDQ0NCBtYXhtYWcgLTAgICAgICAwICAgICAgIC0+ICAwCi1teGd4NDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMAotbXhneDQ0NiBtYXhtYWcgLTAuMTAwIC0wICAgICAgIC0+IC0wLjEwMAotbXhneDQ0NyBtYXhtYWcgLTAuMTAgIC0wLjEwMCAgIC0+IC0wLjEwMAotbXhneDQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwCi1teGd4NDQ5IG1heG1hZyAtMS4wICAgLTAuMSAgICAgLT4gLTEuMAotbXhneDQ1MCBtYXhtYWcgLTEgICAgIC0xLjAgICAgIC0+IC0xLjAKLW14Z3g0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xCi1teGd4NDUzIG1heG1hZyAtSW5mICAgLTEuMSAgICAgLT4gLUluZmluaXR5Ci0tLSBsYXJnaWVzCi1teGd4NDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMKLW14Z3g0NjEgbWF4bWFnICAxRSszICAgMTAwMCAgICAtPiAgMUUrMwotbXhneDQ2MiBtYXhtYWcgIDEwMDAgIC0xRSszICAgIC0+ICAxMDAwCi1teGd4NDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMKLW14Z3g0NjQgbWF4bWFnIC0xMDAwICAgMUUrMyAgICAtPiAgMUUrMwotbXhneDQ2NSBtYXhtYWcgLTFFKzMgICAxMDAwICAgIC0+ICAxMDAwCi1teGd4NDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDAKLW14Z3g0NjcgbWF4bWFnIC0xRSszICAtMTAwMCAgICAtPiAtMTAwMAotCi0tLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQotbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKLXByZWNpc2lvbjogMwotCi1teGd4NDcwIG1heG1hZyAgMSAgICAgIC41ICAgICAtPiAgMQotbXhneDQ3MSBtYXhtYWcgIDEwICAgICA1ICAgICAgLT4gIDEwCi1teGd4NDcyIG1heG1hZyAgMTAwICAgIDUwICAgICAtPiAgMTAwCi1teGd4NDczIG1heG1hZyAgMTAwMCAgIDUwMCAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCi1teGd4NDc0IG1heG1hZyAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkCi1teGd4NDc1IG1heG1hZyAgNiAgICAgIC41ICAgICAtPiAgNgotbXhneDQ3NiBtYXhtYWcgIDY2ICAgICA1ICAgICAgLT4gIDY2Ci1teGd4NDc3IG1heG1hZyAgNjY2ICAgIDUwICAgICAtPiAgNjY2Ci1teGd4NDc4IG1heG1hZyAgNjY2NiAgIDUwMCAgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKLW14Z3g0NzkgbWF4bWFnICA2NjY2NiAgNTAwMCAgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAotbXhneDQ4MCBtYXhtYWcgIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0Ci1teGd4NDgxIG1heG1hZyAgLjUgICAgIDEgICAgICAtPiAgMQotbXhneDQ4MiBtYXhtYWcgIC41ICAgICAxMCAgICAgLT4gIDEwCi1teGd4NDgzIG1heG1hZyAgLjUgICAgIDEwMCAgICAtPiAgMTAwCi1teGd4NDg0IG1heG1hZyAgLjUgICAgIDEwMDAgICAtPiAgMS4wMEUrMyBSb3VuZGVkCi1teGd4NDg1IG1heG1hZyAgLjUgICAgIDEwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkCi1teGd4NDg2IG1heG1hZyAgLjUgICAgIDYgICAgICAtPiAgNgotbXhneDQ4NyBtYXhtYWcgIC41ICAgICA2NiAgICAgLT4gIDY2Ci1teGd4NDg4IG1heG1hZyAgLjUgICAgIDY2NiAgICAtPiAgNjY2Ci1teGd4NDg5IG1heG1hZyAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QKLW14Z3g0OTAgbWF4bWFnICAuNSAgICAgNjY2NjYgIC0+ICA2LjY3RSs0IFJvdW5kZWQgSW5leGFjdAotbXhneDQ5MSBtYXhtYWcgIC41ICAgICAzMzMzMyAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0Ci0KLS0tIG92ZXJmbG93IHRlc3RzCi1tYXhleHBvbmVudDogOTk5OTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OTk5OQotcHJlY2lzaW9uOiAzCi1teGd4NTAwIG1heG1hZyA5Ljk5OUUrOTk5OTk5OTk5ICAwIC0+ICBJbmZpbml0eSBJbmV4YWN0IE92ZXJmbG93IFJvdW5kZWQKLW14Z3g1MDEgbWF4bWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZAotCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKLXByZWNpc2lvbjogMwotbWF4ZXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLW14Z3g1MTAgbWF4bWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkKLW14Z3g1MTEgbWF4bWFnICAwLjFFLTk5OSAgICAgICAgMCAgLT4gICAxRS0xMDAwICAgU3Vibm9ybWFsCi1teGd4NTEyIG1heG1hZyAgMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIFN1Ym5vcm1hbAotbXhneDUxMyBtYXhtYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAotbXhneDUxNCBtYXhtYWcgIDAuMDFFLTk5OSAgICAgICAwICAtPiAgIDFFLTEwMDEgICBTdWJub3JtYWwKLS0tIG5leHQgaXMgcm91bmRlZCB0byBObWluCi1teGd4NTE1IG1heG1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1teGd4NTE2IG1heG1hZyAgMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1teGd4NTE3IG1heG1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMUUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93Ci1teGd4NTE4IG1heG1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLW14Z3g1MTkgbWF4bWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotbXhneDUyMCBtYXhtYWcgIDAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi0KLW14Z3g1MzAgbWF4bWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gIC0xLjAwRS05OTkKLW14Z3g1MzEgbWF4bWFnIC0wLjFFLTk5OSAgICAgICAgMCAgLT4gIC0xRS0xMDAwICAgU3Vibm9ybWFsCi1teGd4NTMyIG1heG1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbAotbXhneDUzMyBtYXhtYWcgLTAuMTAwRS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZAotbXhneDUzNCBtYXhtYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgLTFFLTEwMDEgICBTdWJub3JtYWwKLS0tIG5leHQgaXMgcm91bmRlZCB0byAtTm1pbgotbXhneDUzNSBtYXhtYWcgLTAuOTk5RS05OTkgICAgICAwICAtPiAgLTEuMDBFLTk5OSBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotbXhneDUzNiBtYXhtYWcgLTAuMDk5RS05OTkgICAgICAwICAtPiAgLTEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotbXhneDUzNyBtYXhtYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdwotbXhneDUzOCBtYXhtYWcgLTAuMDAxRS05OTkgICAgICAwICAtPiAgLTBFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdyBDbGFtcGVkCi1teGd4NTM5IG1heG1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAtMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQKLW14Z3g1NDAgbWF4bWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZAotCi0tLSBOdWxsIHRlc3RzCi1teGd4OTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1teGd4OTAxIG1heG1hZyAgIyAxMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLQotCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBtYXhtYWcuZGVjVGVzdCAtLSBkZWNpbWFsIG1heGltdW0gYnkgbWFnbml0dWRlICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gd2UgYXNzdW1lIHRoYXQgYmFzZSBjb21wYXJpc29uIGlzIHRlc3RlZCBpbiBjb21wYXJlLmRlY1Rlc3QsIHNvDQorLS0gdGhlc2UgbWFpbmx5IGNvdmVyIHNwZWNpYWwgY2FzZXMgYW5kIHJvdW5kaW5nDQorDQorZXh0ZW5kZWQ6ICAgIDENCitwcmVjaXNpb246ICAgOQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorDQorLS0gc2FuaXR5IGNoZWNrcw0KK214Z3gwMDEgbWF4bWFnICAtMiAgLTIgIC0+IC0yDQorbXhneDAwMiBtYXhtYWcgIC0yICAtMSAgLT4gLTINCitteGd4MDAzIG1heG1hZyAgLTIgICAwICAtPiAtMg0KK214Z3gwMDQgbWF4bWFnICAtMiAgIDEgIC0+IC0yDQorbXhneDAwNSBtYXhtYWcgIC0yICAgMiAgLT4gIDINCitteGd4MDA2IG1heG1hZyAgLTEgIC0yICAtPiAtMg0KK214Z3gwMDcgbWF4bWFnICAtMSAgLTEgIC0+IC0xDQorbXhneDAwOCBtYXhtYWcgIC0xICAgMCAgLT4gLTENCitteGd4MDA5IG1heG1hZyAgLTEgICAxICAtPiAgMQ0KK214Z3gwMTAgbWF4bWFnICAtMSAgIDIgIC0+ICAyDQorbXhneDAxMSBtYXhtYWcgICAwICAtMiAgLT4gLTINCitteGd4MDEyIG1heG1hZyAgIDAgIC0xICAtPiAtMQ0KK214Z3gwMTMgbWF4bWFnICAgMCAgIDAgIC0+ICAwDQorbXhneDAxNCBtYXhtYWcgICAwICAgMSAgLT4gIDENCitteGd4MDE1IG1heG1hZyAgIDAgICAyICAtPiAgMg0KK214Z3gwMTYgbWF4bWFnICAgMSAgLTIgIC0+IC0yDQorbXhneDAxNyBtYXhtYWcgICAxICAtMSAgLT4gIDENCitteGd4MDE4IG1heG1hZyAgIDEgICAwICAtPiAgMQ0KK214Z3gwMTkgbWF4bWFnICAgMSAgIDEgIC0+ICAxDQorbXhneDAyMCBtYXhtYWcgICAxICAgMiAgLT4gIDINCitteGd4MDIxIG1heG1hZyAgIDIgIC0yICAtPiAgMg0KK214Z3gwMjIgbWF4bWFnICAgMiAgLTEgIC0+ICAyDQorbXhneDAyMyBtYXhtYWcgICAyICAgMCAgLT4gIDINCitteGd4MDI1IG1heG1hZyAgIDIgICAxICAtPiAgMg0KK214Z3gwMjYgbWF4bWFnICAgMiAgIDIgIC0+ICAyDQorDQorLS0gZXh0ZW5kZWQgemVyb3MNCitteGd4MDMwIG1heG1hZyAgIDAgICAgIDAgICAtPiAgMA0KK214Z3gwMzEgbWF4bWFnICAgMCAgICAtMCAgIC0+ICAwDQorbXhneDAzMiBtYXhtYWcgICAwICAgIC0wLjAgLT4gIDANCitteGd4MDMzIG1heG1hZyAgIDAgICAgIDAuMCAtPiAgMA0KK214Z3gwMzQgbWF4bWFnICAtMCAgICAgMCAgIC0+ICAwICAgIC0tIG5vdGU6IC0wID0gMCwgYnV0IDAgY2hvc2VuDQorbXhneDAzNSBtYXhtYWcgIC0wICAgIC0wICAgLT4gLTANCitteGd4MDM2IG1heG1hZyAgLTAgICAgLTAuMCAtPiAtMC4wDQorbXhneDAzNyBtYXhtYWcgIC0wICAgICAwLjAgLT4gIDAuMA0KK214Z3gwMzggbWF4bWFnICAgMC4wICAgMCAgIC0+ICAwDQorbXhneDAzOSBtYXhtYWcgICAwLjAgIC0wICAgLT4gIDAuMA0KK214Z3gwNDAgbWF4bWFnICAgMC4wICAtMC4wIC0+ICAwLjANCitteGd4MDQxIG1heG1hZyAgIDAuMCAgIDAuMCAtPiAgMC4wDQorbXhneDA0MiBtYXhtYWcgIC0wLjAgICAwICAgLT4gIDANCitteGd4MDQzIG1heG1hZyAgLTAuMCAgLTAgICAtPiAtMC4wDQorbXhneDA0NCBtYXhtYWcgIC0wLjAgIC0wLjAgLT4gLTAuMA0KK214Z3gwNDUgbWF4bWFnICAtMC4wICAgMC4wIC0+ICAwLjANCisNCitteGd4MDUwIG1heG1hZyAgLTBFMSAgIDBFMSAtPiAgMEUrMQ0KK214Z3gwNTEgbWF4bWFnICAtMEUyICAgMEUyIC0+ICAwRSsyDQorbXhneDA1MiBtYXhtYWcgIC0wRTIgICAwRTEgLT4gIDBFKzENCitteGd4MDUzIG1heG1hZyAgLTBFMSAgIDBFMiAtPiAgMEUrMg0KK214Z3gwNTQgbWF4bWFnICAgMEUxICAtMEUxIC0+ICAwRSsxDQorbXhneDA1NSBtYXhtYWcgICAwRTIgIC0wRTIgLT4gIDBFKzINCitteGd4MDU2IG1heG1hZyAgIDBFMiAgLTBFMSAtPiAgMEUrMg0KK214Z3gwNTcgbWF4bWFnICAgMEUxICAtMEUyIC0+ICAwRSsxDQorDQorbXhneDA1OCBtYXhtYWcgICAwRTEgICAwRTEgLT4gIDBFKzENCitteGd4MDU5IG1heG1hZyAgIDBFMiAgIDBFMiAtPiAgMEUrMg0KK214Z3gwNjAgbWF4bWFnICAgMEUyICAgMEUxIC0+ICAwRSsyDQorbXhneDA2MSBtYXhtYWcgICAwRTEgICAwRTIgLT4gIDBFKzINCitteGd4MDYyIG1heG1hZyAgLTBFMSAgLTBFMSAtPiAtMEUrMQ0KK214Z3gwNjMgbWF4bWFnICAtMEUyICAtMEUyIC0+IC0wRSsyDQorbXhneDA2NCBtYXhtYWcgIC0wRTIgIC0wRTEgLT4gLTBFKzENCitteGd4MDY1IG1heG1hZyAgLTBFMSAgLTBFMiAtPiAtMEUrMQ0KKw0KKy0tIFNwZWNpYWxzDQorcHJlY2lzaW9uOiA5DQorbXhneDA5MCBtYXhtYWcgIEluZiAgLUluZiAgIC0+ICBJbmZpbml0eQ0KK214Z3gwOTEgbWF4bWFnICBJbmYgIC0xMDAwICAtPiAgSW5maW5pdHkNCitteGd4MDkyIG1heG1hZyAgSW5mICAtMSAgICAgLT4gIEluZmluaXR5DQorbXhneDA5MyBtYXhtYWcgIEluZiAgLTAgICAgIC0+ICBJbmZpbml0eQ0KK214Z3gwOTQgbWF4bWFnICBJbmYgICAwICAgICAtPiAgSW5maW5pdHkNCitteGd4MDk1IG1heG1hZyAgSW5mICAgMSAgICAgLT4gIEluZmluaXR5DQorbXhneDA5NiBtYXhtYWcgIEluZiAgIDEwMDAgIC0+ICBJbmZpbml0eQ0KK214Z3gwOTcgbWF4bWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCitteGd4MDk4IG1heG1hZyAtMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorbXhneDA5OSBtYXhtYWcgLUluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK214Z3gxMDAgbWF4bWFnIC0xICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitteGd4MTAxIG1heG1hZyAtMCAgICAgSW5mICAgLT4gIEluZmluaXR5DQorbXhneDEwMiBtYXhtYWcgIDAgICAgIEluZiAgIC0+ICBJbmZpbml0eQ0KK214Z3gxMDMgbWF4bWFnICAxICAgICBJbmYgICAtPiAgSW5maW5pdHkNCitteGd4MTA0IG1heG1hZyAgMTAwMCAgSW5mICAgLT4gIEluZmluaXR5DQorbXhneDEwNSBtYXhtYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK214Z3gxMjAgbWF4bWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCitteGd4MTIxIG1heG1hZyAtSW5mICAtMTAwMCAgLT4gLUluZmluaXR5DQorbXhneDEyMiBtYXhtYWcgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK214Z3gxMjMgbWF4bWFnIC1JbmYgIC0wICAgICAtPiAtSW5maW5pdHkNCitteGd4MTI0IG1heG1hZyAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5DQorbXhneDEyNSBtYXhtYWcgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK214Z3gxMjYgbWF4bWFnIC1JbmYgICAxMDAwICAtPiAtSW5maW5pdHkNCitteGd4MTI3IG1heG1hZyAtSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorbXhneDEyOCBtYXhtYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK214Z3gxMjkgbWF4bWFnIC0xMDAwIC1JbmYgICAtPiAtSW5maW5pdHkNCitteGd4MTMwIG1heG1hZyAtMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorbXhneDEzMSBtYXhtYWcgLTAgICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK214Z3gxMzIgbWF4bWFnICAwICAgIC1JbmYgICAtPiAtSW5maW5pdHkNCitteGd4MTMzIG1heG1hZyAgMSAgICAtSW5mICAgLT4gLUluZmluaXR5DQorbXhneDEzNCBtYXhtYWcgIDEwMDAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK214Z3gxMzUgbWF4bWFnICBJbmYgIC1JbmYgICAtPiAgSW5maW5pdHkNCisNCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCitteGd4MTQxIG1heG1hZyAgTmFOIC1JbmYgICAgLT4gLUluZmluaXR5DQorbXhneDE0MiBtYXhtYWcgIE5hTiAtMTAwMCAgIC0+IC0xMDAwDQorbXhneDE0MyBtYXhtYWcgIE5hTiAtMSAgICAgIC0+IC0xDQorbXhneDE0NCBtYXhtYWcgIE5hTiAtMCAgICAgIC0+IC0wDQorbXhneDE0NSBtYXhtYWcgIE5hTiAgMCAgICAgIC0+ICAwDQorbXhneDE0NiBtYXhtYWcgIE5hTiAgMSAgICAgIC0+ICAxDQorbXhneDE0NyBtYXhtYWcgIE5hTiAgMTAwMCAgIC0+ICAxMDAwDQorbXhneDE0OCBtYXhtYWcgIE5hTiAgSW5mICAgIC0+ICBJbmZpbml0eQ0KK214Z3gxNDkgbWF4bWFnICBOYU4gIE5hTiAgICAtPiAgTmFODQorbXhneDE1MCBtYXhtYWcgLUluZiAgTmFOICAgIC0+IC1JbmZpbml0eQ0KK214Z3gxNTEgbWF4bWFnIC0xMDAwIE5hTiAgICAtPiAtMTAwMA0KK214Z3gxNTIgbWF4bWFnIC0xICAgIE5hTiAgICAtPiAtMQ0KK214Z3gxNTMgbWF4bWFnIC0wICAgIE5hTiAgICAtPiAtMA0KK214Z3gxNTQgbWF4bWFnICAwICAgIE5hTiAgICAtPiAgMA0KK214Z3gxNTUgbWF4bWFnICAxICAgIE5hTiAgICAtPiAgMQ0KK214Z3gxNTYgbWF4bWFnICAxMDAwIE5hTiAgICAtPiAgMTAwMA0KK214Z3gxNTcgbWF4bWFnICBJbmYgIE5hTiAgICAtPiAgSW5maW5pdHkNCisNCitteGd4MTYxIG1heG1hZyAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTYyIG1heG1hZyAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTYzIG1heG1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY0IG1heG1hZyAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY1IG1heG1hZyAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY2IG1heG1hZyAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY3IG1heG1hZyAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY4IG1heG1hZyAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTY5IG1heG1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTcwIG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTcxIG1heG1hZyAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTcyIG1heG1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTczIG1heG1hZyAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc0IG1heG1hZyAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc1IG1heG1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc2IG1heG1hZyAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc3IG1heG1hZyAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc4IG1heG1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTc5IG1heG1hZyAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorbXhneDE4MSBtYXhtYWcgIE5hTjkgIC1JbmYgICAtPiAtSW5maW5pdHkNCitteGd4MTgyIG1heG1hZyAgTmFOOCAgICAgOSAgIC0+ICA5DQorbXhneDE4MyBtYXhtYWcgLU5hTjcgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCitteGd4MTg0IG1heG1hZyAtTmFOMSAgIE5hTjExIC0+IC1OYU4xDQorbXhneDE4NSBtYXhtYWcgIE5hTjIgICBOYU4xMiAtPiAgTmFOMg0KK214Z3gxODYgbWF4bWFnIC1OYU4xMyAtTmFONyAgLT4gLU5hTjEzDQorbXhneDE4NyBtYXhtYWcgIE5hTjE0IC1OYU41ICAtPiAgTmFOMTQNCisNCitteGd4MTg4IG1heG1hZyAtSW5mICAgIE5hTjQgIC0+IC1JbmZpbml0eQ0KK214Z3gxODkgbWF4bWFnIC05ICAgICAtTmFOMyAgLT4gLTkNCitteGd4MTkwIG1heG1hZyAgSW5mICAgIE5hTjIgIC0+ICBJbmZpbml0eQ0KKw0KK214Z3gxOTEgbWF4bWFnICBzTmFOOTkgLUluZiAgICAtPiAgTmFOOTkgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTkyIG1heG1hZyAgc05hTjk4IC0xICAgICAgLT4gIE5hTjk4IEludmFsaWRfb3BlcmF0aW9uDQorbXhneDE5MyBtYXhtYWcgLXNOYU45NyAgTmFOICAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbg0KK214Z3gxOTQgbWF4bWFnICBzTmFOOTYgc05hTjk0ICAtPiAgTmFOOTYgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTk1IG1heG1hZyAgTmFOOTUgIHNOYU45MyAgLT4gIE5hTjkzIEludmFsaWRfb3BlcmF0aW9uDQorbXhneDE5NiBtYXhtYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbg0KK214Z3gxOTcgbWF4bWFnICAwICAgICAgc05hTjkxICAtPiAgTmFOOTEgSW52YWxpZF9vcGVyYXRpb24NCitteGd4MTk4IG1heG1hZyAgSW5mICAgLXNOYU45MCAgLT4gLU5hTjkwIEludmFsaWRfb3BlcmF0aW9uDQorbXhneDE5OSBtYXhtYWcgIE5hTiAgICBzTmFOODkgIC0+ICBOYU44OSBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHJvdW5kaW5nIGNoZWNrcw0KK21heGV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK3ByZWNpc2lvbjogOQ0KK214Z3gyMDEgbWF4bWFnIDEyMzQ1Njc4MDAwIDEgIC0+IDEuMjM0NTY3ODBFKzEwIFJvdW5kZWQNCitteGd4MjAyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxLjIzNDU2NzgwRSsxMCBSb3VuZGVkDQorbXhneDIwMyBtYXhtYWcgMTIzNDU2NzgwMCAgMSAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQorbXhneDIwNCBtYXhtYWcgMSAxMjM0NTY3ODAwICAgLT4gMS4yMzQ1Njc4MEUrOSBSb3VuZGVkDQorbXhneDIwNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQorbXhneDIwNiBtYXhtYWcgMSAxMjM0NTY3ODkwICAgLT4gMS4yMzQ1Njc4OUUrOSBSb3VuZGVkDQorbXhneDIwNyBtYXhtYWcgMTIzNDU2Nzg5MSAgMSAgLT4gMS4yMzQ1Njc4OUUrOSBJbmV4YWN0IFJvdW5kZWQNCitteGd4MjA4IG1heG1hZyAxIDEyMzQ1Njc4OTEgICAtPiAxLjIzNDU2Nzg5RSs5IEluZXhhY3QgUm91bmRlZA0KK214Z3gyMDkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KK214Z3gyMTAgbWF4bWFnIDEgMTIzNDU2Nzg5MDEgIC0+IDEuMjM0NTY3ODlFKzEwIEluZXhhY3QgUm91bmRlZA0KK214Z3gyMTEgbWF4bWFnIDEyMzQ1Njc4OTYgIDEgIC0+IDEuMjM0NTY3OTBFKzkgSW5leGFjdCBSb3VuZGVkDQorbXhneDIxMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMS4yMzQ1Njc5MEUrOSBJbmV4YWN0IFJvdW5kZWQNCitteGd4MjEzIG1heG1hZyAtMTIzNDU2Nzg5MSAgMSAtPiAtMS4yMzQ1Njc4OUUrOSAgIEluZXhhY3QgUm91bmRlZA0KK214Z3gyMTQgbWF4bWFnIDEgLTEyMzQ1Njc4OTEgIC0+IC0xLjIzNDU2Nzg5RSs5ICAgSW5leGFjdCBSb3VuZGVkDQorbXhneDIxNSBtYXhtYWcgLTEyMzQ1Njc4OTAxIDEgLT4gLTEuMjM0NTY3ODlFKzEwICBJbmV4YWN0IFJvdW5kZWQNCitteGd4MjE2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMS4yMzQ1Njc4OUUrMTAgIEluZXhhY3QgUm91bmRlZA0KK214Z3gyMTcgbWF4bWFnIC0xMjM0NTY3ODk2ICAxIC0+IC0xLjIzNDU2NzkwRSs5ICAgSW5leGFjdCBSb3VuZGVkDQorbXhneDIxOCBtYXhtYWcgMSAtMTIzNDU2Nzg5NiAgLT4gLTEuMjM0NTY3OTBFKzkgICBJbmV4YWN0IFJvdW5kZWQNCisNCitwcmVjaXNpb246IDE1DQorbXhneDIyMSBtYXhtYWcgMTIzNDU2NzgwMDAgMSAgLT4gMTIzNDU2NzgwMDANCitteGd4MjIyIG1heG1hZyAxIDEyMzQ1Njc4MDAwICAtPiAxMjM0NTY3ODAwMA0KK214Z3gyMjMgbWF4bWFnIDEyMzQ1Njc4MDAgIDEgIC0+IDEyMzQ1Njc4MDANCitteGd4MjI0IG1heG1hZyAxIDEyMzQ1Njc4MDAgICAtPiAxMjM0NTY3ODAwDQorbXhneDIyNSBtYXhtYWcgMTIzNDU2Nzg5MCAgMSAgLT4gMTIzNDU2Nzg5MA0KK214Z3gyMjYgbWF4bWFnIDEgMTIzNDU2Nzg5MCAgIC0+IDEyMzQ1Njc4OTANCitteGd4MjI3IG1heG1hZyAxMjM0NTY3ODkxICAxICAtPiAxMjM0NTY3ODkxDQorbXhneDIyOCBtYXhtYWcgMSAxMjM0NTY3ODkxICAgLT4gMTIzNDU2Nzg5MQ0KK214Z3gyMjkgbWF4bWFnIDEyMzQ1Njc4OTAxIDEgIC0+IDEyMzQ1Njc4OTAxDQorbXhneDIzMCBtYXhtYWcgMSAxMjM0NTY3ODkwMSAgLT4gMTIzNDU2Nzg5MDENCitteGd4MjMxIG1heG1hZyAxMjM0NTY3ODk2ICAxICAtPiAxMjM0NTY3ODk2DQorbXhneDIzMiBtYXhtYWcgMSAxMjM0NTY3ODk2ICAgLT4gMTIzNDU2Nzg5Ng0KK214Z3gyMzMgbWF4bWFnIC0xMjM0NTY3ODkxICAxIC0+IC0xMjM0NTY3ODkxDQorbXhneDIzNCBtYXhtYWcgMSAtMTIzNDU2Nzg5MSAgLT4gLTEyMzQ1Njc4OTENCitteGd4MjM1IG1heG1hZyAtMTIzNDU2Nzg5MDEgMSAtPiAtMTIzNDU2Nzg5MDENCitteGd4MjM2IG1heG1hZyAxIC0xMjM0NTY3ODkwMSAtPiAtMTIzNDU2Nzg5MDENCitteGd4MjM3IG1heG1hZyAtMTIzNDU2Nzg5NiAgMSAtPiAtMTIzNDU2Nzg5Ng0KK214Z3gyMzggbWF4bWFnIDEgLTEyMzQ1Njc4OTYgIC0+IC0xMjM0NTY3ODk2DQorDQorLS0gZnJvbSBleGFtcGxlcw0KK214Z3gyODAgbWF4bWFnICczJyAgICcyJyAgLT4gICczJw0KK214Z3gyODEgbWF4bWFnICctMTAnICczJyAgLT4gICctMTAnDQorbXhneDI4MiBtYXhtYWcgJzEuMCcgJzEnICAtPiAgJzEnDQorbXhneDI4MyBtYXhtYWcgJzEnICcxLjAnICAtPiAgJzEnDQorbXhneDI4NCBtYXhtYWcgJzcnICdOYU4nICAtPiAgJzcnDQorDQorLS0gb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdyB0ZXN0cyAuLi4NCittYXhFeHBvbmVudDogOTk5OTk5OTk5DQorbWluZXhwb25lbnQ6IC05OTk5OTk5OTkNCitteGd4MzMwIG1heG1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQ0KK214Z3gzMzEgbWF4bWFnIDlFKzk5OTk5OTk5OSArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5DQorbXhneDMzMiBtYXhtYWcgKzAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAwLjEwMA0KK214Z3gzMzMgbWF4bWFnIDlFLTk5OTk5OTk5OSArMC4xMDAgICAgICAgICAgICAgICAtPiAgMC4xMDANCitteGd4MzM1IG1heG1hZyAtMS4yMzQ1Njc4OTAxMjM0NUUtMCA5RSs5OTk5OTk5OTkgLT4gIDlFKzk5OTk5OTk5OQ0KK214Z3gzMzYgbWF4bWFnIDlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAgOUUrOTk5OTk5OTk5DQorbXhneDMzNyBtYXhtYWcgLTAuMTAwIDlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+ICAtMC4xMDANCitteGd4MzM4IG1heG1hZyA5RS05OTk5OTk5OTkgLTAuMTAwICAgICAgICAgICAgICAgLT4gIC0wLjEwMA0KKw0KK214Z3gzMzkgbWF4bWFnIDFlLTU5OTk5OTk5OSAxZS00MDAwMDAwMDEgICAtPiAgMUUtNDAwMDAwMDAxDQorbXhneDM0MCBtYXhtYWcgMWUtNTk5OTk5OTk5IDFlLTQwMDAwMDAwMCAgIC0+ICAxRS00MDAwMDAwMDANCitteGd4MzQxIG1heG1hZyAxZS02MDAwMDAwMDAgMWUtNDAwMDAwMDAwICAgLT4gIDFFLTQwMDAwMDAwMA0KK214Z3gzNDIgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjAxICAgICAgICAgICAtPiAgMC4wMQ0KK214Z3gzNDMgbWF4bWFnIDllLTk5OTk5OTk5OCAwLjEgICAgICAgICAgICAtPiAgMC4xDQorbXhneDM0NCBtYXhtYWcgMC4wMSA5ZS05OTk5OTk5OTggICAgICAgICAgIC0+ICAwLjAxDQorbXhneDM0NSBtYXhtYWcgMWU1OTk5OTk5OTkgMWU0MDAwMDAwMDEgICAgIC0+ICAxRSs1OTk5OTk5OTkNCitteGd4MzQ2IG1heG1hZyAxZTU5OTk5OTk5OSAxZTQwMDAwMDAwMCAgICAgLT4gIDFFKzU5OTk5OTk5OQ0KK214Z3gzNDcgbWF4bWFnIDFlNjAwMDAwMDAwIDFlNDAwMDAwMDAwICAgICAtPiAgMUUrNjAwMDAwMDAwDQorbXhneDM0OCBtYXhtYWcgOWU5OTk5OTk5OTggMTAwICAgICAgICAgICAgIC0+ICA5RSs5OTk5OTk5OTgNCitteGd4MzQ5IG1heG1hZyA5ZTk5OTk5OTk5OCAxMCAgICAgICAgICAgICAgLT4gIDlFKzk5OTk5OTk5OA0KK214Z3gzNTAgbWF4bWFnIDEwMCAgOWU5OTk5OTk5OTggICAgICAgICAgICAtPiAgOUUrOTk5OTk5OTk4DQorLS0gc2lnbnMNCitteGd4MzUxIG1heG1hZyAgMWUrNzc3Nzc3Nzc3ICAxZSs0MTExMTExMTEgLT4gIDFFKzc3Nzc3Nzc3Nw0KK214Z3gzNTIgbWF4bWFnICAxZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAgMUUrNzc3Nzc3Nzc3DQorbXhneDM1MyBtYXhtYWcgLTFlKzc3Nzc3Nzc3NyAgMWUrNDExMTExMTExIC0+IC0xRSs3Nzc3Nzc3NzcNCitteGd4MzU0IG1heG1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzc3Nzc3Nzc3Nw0KK214Z3gzNTUgbWF4bWFnICAxZS03Nzc3Nzc3NzcgIDFlLTQxMTExMTExMSAtPiAgMUUtNDExMTExMTExDQorbXhneDM1NiBtYXhtYWcgIDFlLTc3Nzc3Nzc3NyAtMWUtNDExMTExMTExIC0+IC0xRS00MTExMTExMTENCitteGd4MzU3IG1heG1hZyAtMWUtNzc3Nzc3Nzc3ICAxZS00MTExMTExMTEgLT4gIDFFLTQxMTExMTExMQ0KK214Z3gzNTggbWF4bWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNDExMTExMTExDQorDQorLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KK214Z3g0MDEgbWF4bWFnICBJbmYgICAgMS4xICAgICAtPiAgSW5maW5pdHkNCitteGd4NDAyIG1heG1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEuMQ0KK214Z3g0MDMgbWF4bWFnICAxICAgICAgMS4wICAgICAtPiAgMQ0KK214Z3g0MDQgbWF4bWFnICAxLjAgICAgMC4xICAgICAtPiAgMS4wDQorbXhneDQwNSBtYXhtYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjENCitteGd4NDA2IG1heG1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTANCitteGd4NDA3IG1heG1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAuMTANCitteGd4NDA4IG1heG1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDANCitteGd4NDA5IG1heG1hZyAgMC4wICAgLTAgICAgICAgLT4gIDAuMA0KK214Z3g0MTAgbWF4bWFnICAwLjAgICAtMC4wICAgICAtPiAgMC4wDQorbXhneDQxMSBtYXhtYWcgIDAuMDAgIC0wLjAgICAgIC0+ICAwLjAwDQorbXhneDQxMiBtYXhtYWcgIDAuMCAgIC0wLjAwICAgIC0+ICAwLjANCitteGd4NDEzIG1heG1hZyAgMCAgICAgLTAuMCAgICAgLT4gIDANCitteGd4NDE0IG1heG1hZyAgMCAgICAgLTAgICAgICAgLT4gIDANCitteGd4NDE1IG1heG1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAuMA0KK214Z3g0MTYgbWF4bWFnIC0wICAgICAtMC4xMDAgICAtPiAtMC4xMDANCitteGd4NDE3IG1heG1hZyAtMC4xMDAgLTAuMTAgICAgLT4gLTAuMTAwDQorbXhneDQxOCBtYXhtYWcgLTAuMTAgIC0wLjEgICAgIC0+IC0wLjEwDQorbXhneDQxOSBtYXhtYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0xLjANCitteGd4NDIwIG1heG1hZyAtMS4wICAgLTEgICAgICAgLT4gLTEuMA0KK214Z3g0MjEgbWF4bWFnIC0xICAgICAtMS4xICAgICAtPiAtMS4xDQorbXhneDQyMyBtYXhtYWcgLTEuMSAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KK214Z3g0MzEgbWF4bWFnICAxLjEgICAgSW5mICAgICAtPiAgSW5maW5pdHkNCitteGd4NDMyIG1heG1hZyAgMSAgICAgIDEuMSAgICAgLT4gIDEuMQ0KK214Z3g0MzMgbWF4bWFnICAxLjAgICAgMSAgICAgICAtPiAgMQ0KK214Z3g0MzQgbWF4bWFnICAwLjEgICAgMS4wICAgICAtPiAgMS4wDQorbXhneDQzNSBtYXhtYWcgIDAuMTAgICAwLjEgICAgIC0+ICAwLjENCitteGd4NDM2IG1heG1hZyAgMC4xMDAgIDAuMTAgICAgLT4gIDAuMTANCitteGd4NDM3IG1heG1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDAuMTANCitteGd4NDM4IG1heG1hZyAgMC4wICAgIDAgICAgICAgLT4gIDANCitteGd4NDM5IG1heG1hZyAtMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KK214Z3g0NDAgbWF4bWFnIC0wLjAgICAgMC4wICAgICAtPiAgMC4wDQorbXhneDQ0MSBtYXhtYWcgLTAuMCAgICAwLjAwICAgIC0+ICAwLjAwDQorbXhneDQ0MiBtYXhtYWcgLTAuMDAgICAwLjAgICAgIC0+ICAwLjANCitteGd4NDQzIG1heG1hZyAtMC4wICAgIDAgICAgICAgLT4gIDANCitteGd4NDQ0IG1heG1hZyAtMCAgICAgIDAgICAgICAgLT4gIDANCitteGd4NDQ1IG1heG1hZyAtMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KK214Z3g0NDYgbWF4bWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMC4xMDANCitteGd4NDQ3IG1heG1hZyAtMC4xMCAgLTAuMTAwICAgLT4gLTAuMTAwDQorbXhneDQ0OCBtYXhtYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEwDQorbXhneDQ0OSBtYXhtYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0xLjANCitteGd4NDUwIG1heG1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEuMA0KK214Z3g0NTEgbWF4bWFnIC0xLjEgICAtMSAgICAgICAtPiAtMS4xDQorbXhneDQ1MyBtYXhtYWcgLUluZiAgIC0xLjEgICAgIC0+IC1JbmZpbml0eQ0KKy0tIGxhcmdpZXMNCitteGd4NDYwIG1heG1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCitteGd4NDYxIG1heG1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDFFKzMNCitteGd4NDYyIG1heG1hZyAgMTAwMCAgLTFFKzMgICAgLT4gIDEwMDANCitteGd4NDYzIG1heG1hZyAgMUUrMyAgLTEwMDAgICAgLT4gIDFFKzMNCitteGd4NDY0IG1heG1hZyAtMTAwMCAgIDFFKzMgICAgLT4gIDFFKzMNCitteGd4NDY1IG1heG1hZyAtMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCitteGd4NDY2IG1heG1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTEwMDANCitteGd4NDY3IG1heG1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCisNCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQ0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK3ByZWNpc2lvbjogMw0KKw0KK214Z3g0NzAgbWF4bWFnICAxICAgICAgLjUgICAgIC0+ICAxDQorbXhneDQ3MSBtYXhtYWcgIDEwICAgICA1ICAgICAgLT4gIDEwDQorbXhneDQ3MiBtYXhtYWcgIDEwMCAgICA1MCAgICAgLT4gIDEwMA0KK214Z3g0NzMgbWF4bWFnICAxMDAwICAgNTAwICAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCitteGd4NDc0IG1heG1hZyAgMTAwMDAgIDUwMDAgICAtPiAgMS4wMEUrNCBSb3VuZGVkDQorbXhneDQ3NSBtYXhtYWcgIDYgICAgICAuNSAgICAgLT4gIDYNCitteGd4NDc2IG1heG1hZyAgNjYgICAgIDUgICAgICAtPiAgNjYNCitteGd4NDc3IG1heG1hZyAgNjY2ICAgIDUwICAgICAtPiAgNjY2DQorbXhneDQ3OCBtYXhtYWcgIDY2NjYgICA1MDAgICAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQorbXhneDQ3OSBtYXhtYWcgIDY2NjY2ICA1MDAwICAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQorbXhneDQ4MCBtYXhtYWcgIDMzMzMzICA1MDAwICAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQorbXhneDQ4MSBtYXhtYWcgIC41ICAgICAxICAgICAgLT4gIDENCitteGd4NDgyIG1heG1hZyAgLjUgICAgIDEwICAgICAtPiAgMTANCitteGd4NDgzIG1heG1hZyAgLjUgICAgIDEwMCAgICAtPiAgMTAwDQorbXhneDQ4NCBtYXhtYWcgIC41ICAgICAxMDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZA0KK214Z3g0ODUgbWF4bWFnICAuNSAgICAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQNCitteGd4NDg2IG1heG1hZyAgLjUgICAgIDYgICAgICAtPiAgNg0KK214Z3g0ODcgbWF4bWFnICAuNSAgICAgNjYgICAgIC0+ICA2Ng0KK214Z3g0ODggbWF4bWFnICAuNSAgICAgNjY2ICAgIC0+ICA2NjYNCitteGd4NDg5IG1heG1hZyAgLjUgICAgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QNCitteGd4NDkwIG1heG1hZyAgLjUgICAgIDY2NjY2ICAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QNCitteGd4NDkxIG1heG1hZyAgLjUgICAgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QNCisNCistLSBvdmVyZmxvdyB0ZXN0cw0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK3ByZWNpc2lvbjogMw0KK214Z3g1MDAgbWF4bWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIEluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KK214Z3g1MDEgbWF4bWFnIC05Ljk5OUUrOTk5OTk5OTk5IDAgLT4gLUluZmluaXR5IEluZXhhY3QgT3ZlcmZsb3cgUm91bmRlZA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvdw0KK3ByZWNpc2lvbjogMw0KK21heGV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK214Z3g1MTAgbWF4bWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAxLjAwRS05OTkNCitteGd4NTExIG1heG1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMUUtMTAwMCAgIFN1Ym5vcm1hbA0KK214Z3g1MTIgbWF4bWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAxLjBFLTEwMDAgU3Vibm9ybWFsDQorbXhneDUxMyBtYXhtYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBTdWJub3JtYWwgUm91bmRlZA0KK214Z3g1MTQgbWF4bWFnICAwLjAxRS05OTkgICAgICAgMCAgLT4gICAxRS0xMDAxICAgU3Vibm9ybWFsDQorLS0gbmV4dCBpcyByb3VuZGVkIHRvIE5taW4NCitteGd4NTE1IG1heG1hZyAgMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMS4wMEUtOTk5IEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorbXhneDUxNiBtYXhtYWcgIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDEuMEUtMTAwMCBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK214Z3g1MTcgbWF4bWFnICAwLjAwOUUtOTk5ICAgICAgMCAgLT4gICAxRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitteGd4NTE4IG1heG1hZyAgMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitteGd4NTE5IG1heG1hZyAgMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCitteGd4NTIwIG1heG1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMEUtMTAwMSAgIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93IENsYW1wZWQNCisNCitteGd4NTMwIG1heG1hZyAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wMEUtOTk5DQorbXhneDUzMSBtYXhtYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgLTFFLTEwMDAgICBTdWJub3JtYWwNCitteGd4NTMyIG1heG1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIFN1Ym5vcm1hbA0KK214Z3g1MzMgbWF4bWFnIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gIC0xLjBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCitteGd4NTM0IG1heG1hZyAtMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAtMUUtMTAwMSAgIFN1Ym5vcm1hbA0KKy0tIG5leHQgaXMgcm91bmRlZCB0byAtTm1pbg0KK214Z3g1MzUgbWF4bWFnIC0wLjk5OUUtOTk5ICAgICAgMCAgLT4gIC0xLjAwRS05OTkgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cNCitteGd4NTM2IG1heG1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAtMS4wRS0xMDAwIEluZXhhY3QgUm91bmRlZCBTdWJub3JtYWwgVW5kZXJmbG93DQorbXhneDUzNyBtYXhtYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgLTFFLTEwMDEgICBJbmV4YWN0IFJvdW5kZWQgU3Vibm9ybWFsIFVuZGVyZmxvdw0KK214Z3g1MzggbWF4bWFnIC0wLjAwMUUtOTk5ICAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK214Z3g1MzkgbWF4bWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KK214Z3g1NDAgbWF4bWFnIC0wLjAwMDFFLTk5OSAgICAgMCAgLT4gIC0wRS0xMDAxICAgSW5leGFjdCBSb3VuZGVkIFN1Ym5vcm1hbCBVbmRlcmZsb3cgQ2xhbXBlZA0KKw0KKy0tIE51bGwgdGVzdHMNCitteGd4OTAwIG1heG1hZyAxMCAgIyAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorbXhneDkwMSBtYXhtYWcgICMgMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9taW5tYWcuZGVjVGVzdAppbmRleCBmMWFjMzg1Li45ZTU2MjMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbWlubWFnLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL21pbm1hZy5kZWNUZXN0CkBAIC0xLDM5MCArMSwzOTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gbWlubWFnLmRlY1Rlc3QgLS0gZGVjaW1hbCBtaW5pbXVtIGJ5IG1hZ25pdHVkZSAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28KLS0tIHRoZXNlIG1haW5seSBjb3ZlciBzcGVjaWFsIGNhc2VzIGFuZCByb3VuZGluZwotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi0tLSBzYW5pdHkgY2hlY2tzCi1tbmd4MDAxIG1pbm1hZyAgLTIgIC0yICAtPiAtMgotbW5neDAwMiBtaW5tYWcgIC0yICAtMSAgLT4gLTEKLW1uZ3gwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwCi1tbmd4MDA0IG1pbm1hZyAgLTIgICAxICAtPiAgMQotbW5neDAwNSBtaW5tYWcgIC0yICAgMiAgLT4gLTIKLW1uZ3gwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xCi1tbmd4MDA3IG1pbm1hZyAgLTEgIC0xICAtPiAtMQotbW5neDAwOCBtaW5tYWcgIC0xICAgMCAgLT4gIDAKLW1uZ3gwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xCi1tbmd4MDEwIG1pbm1hZyAgLTEgICAyICAtPiAtMQotbW5neDAxMSBtaW5tYWcgICAwICAtMiAgLT4gIDAKLW1uZ3gwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwCi1tbmd4MDEzIG1pbm1hZyAgIDAgICAwICAtPiAgMAotbW5neDAxNCBtaW5tYWcgICAwICAgMSAgLT4gIDAKLW1uZ3gwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwCi1tbmd4MDE2IG1pbm1hZyAgIDEgIC0yICAtPiAgMQotbW5neDAxNyBtaW5tYWcgICAxICAtMSAgLT4gLTEKLW1uZ3gwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwCi1tbmd4MDE5IG1pbm1hZyAgIDEgICAxICAtPiAgMQotbW5neDAyMCBtaW5tYWcgICAxICAgMiAgLT4gIDEKLW1uZ3gwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yCi1tbmd4MDIyIG1pbm1hZyAgIDIgIC0xICAtPiAtMQotbW5neDAyMyBtaW5tYWcgICAyICAgMCAgLT4gIDAKLW1uZ3gwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxCi1tbmd4MDI2IG1pbm1hZyAgIDIgICAyICAtPiAgMgotCi0tLSBleHRlbmRlZCB6ZXJvcwotbW5neDAzMCBtaW5tYWcgICAwICAgICAwICAgLT4gIDAKLW1uZ3gwMzEgbWlubWFnICAgMCAgICAtMCAgIC0+IC0wCi1tbmd4MDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wCi1tbmd4MDMzIG1pbm1hZyAgIDAgICAgIDAuMCAtPiAgMC4wCi1tbmd4MDM0IG1pbm1hZyAgLTAgICAgIDAgICAtPiAtMAotbW5neDAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTAKLW1uZ3gwMzYgbWlubWFnICAtMCAgICAtMC4wIC0+IC0wCi1tbmd4MDM3IG1pbm1hZyAgLTAgICAgIDAuMCAtPiAtMAotbW5neDAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMAotbW5neDAzOSBtaW5tYWcgICAwLjAgIC0wICAgLT4gLTAKLW1uZ3gwNDAgbWlubWFnICAgMC4wICAtMC4wIC0+IC0wLjAKLW1uZ3gwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjAKLW1uZ3gwNDIgbWlubWFnICAtMC4wICAgMCAgIC0+IC0wLjAKLW1uZ3gwNDMgbWlubWFnICAtMC4wICAtMCAgIC0+IC0wCi1tbmd4MDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wCi1tbmd4MDQ1IG1pbm1hZyAgLTAuMCAgIDAuMCAtPiAtMC4wCi0KLW1uZ3gwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxCi1tbmd4MDQ3IG1pbm1hZyAgLTBFMSAgIDBFMiAtPiAtMEUrMQotbW5neDA0OCBtaW5tYWcgICAwRTIgICAwRTEgLT4gIDBFKzEKLW1uZ3gwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxCi1tbmd4MDUwIG1pbm1hZyAgLTBFMyAgLTBFMiAtPiAtMEUrMwotbW5neDA1MSBtaW5tYWcgIC0wRTIgIC0wRTMgLT4gLTBFKzMKLQotLS0gU3BlY2lhbHMKLXByZWNpc2lvbjogOQotbW5neDA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQotbW5neDA5MSBtaW5tYWcgIEluZiAgLTEwMDAgIC0+IC0xMDAwCi1tbmd4MDkyIG1pbm1hZyAgSW5mICAtMSAgICAgLT4gLTEKLW1uZ3gwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMAotbW5neDA5NCBtaW5tYWcgIEluZiAgIDAgICAgIC0+ICAwCi1tbmd4MDk1IG1pbm1hZyAgSW5mICAgMSAgICAgLT4gIDEKLW1uZ3gwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMAotbW5neDA5NyBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotbW5neDA5OCBtaW5tYWcgLTEwMDAgIEluZiAgIC0+IC0xMDAwCi1tbmd4MDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1tbmd4MTAwIG1pbm1hZyAtMSAgICAgSW5mICAgLT4gLTEKLW1uZ3gxMDEgbWlubWFnIC0wICAgICBJbmYgICAtPiAtMAotbW5neDEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwCi1tbmd4MTAzIG1pbm1hZyAgMSAgICAgSW5mICAgLT4gIDEKLW1uZ3gxMDQgbWlubWFnICAxMDAwICBJbmYgICAtPiAgMTAwMAotbW5neDEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQotCi1tbmd4MTIwIG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1tbmd4MTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDAKLW1uZ3gxMjIgbWlubWFnIC1JbmYgIC0xICAgICAtPiAtMQotbW5neDEyMyBtaW5tYWcgLUluZiAgLTAgICAgIC0+IC0wCi1tbmd4MTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDAKLW1uZ3gxMjUgbWlubWFnIC1JbmYgICAxICAgICAtPiAgMQotbW5neDEyNiBtaW5tYWcgLUluZiAgIDEwMDAgIC0+ICAxMDAwCi1tbmd4MTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5Ci1tbmd4MTI4IG1pbm1hZyAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci1tbmd4MTI5IG1pbm1hZyAtMTAwMCAtSW5mICAgLT4gLTEwMDAKLW1uZ3gxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQotbW5neDEzMSBtaW5tYWcgLTAgICAgLUluZiAgIC0+IC0wCi1tbmd4MTMyIG1pbm1hZyAgMCAgICAtSW5mICAgLT4gIDAKLW1uZ3gxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQotbW5neDEzNCBtaW5tYWcgIDEwMDAgLUluZiAgIC0+ICAxMDAwCi1tbmd4MTM1IG1pbm1hZyAgSW5mICAtSW5mICAgLT4gLUluZmluaXR5Ci0KLS0tIDIwMDQuMDguMDIgNzU0ciBjaG9vc2VzIG51bWJlciBvdmVyIE5hTiBpbiBtaXhlZCBjYXNlcwotbW5neDE0MSBtaW5tYWcgIE5hTiAtSW5mICAgIC0+ICAtSW5maW5pdHkKLW1uZ3gxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDAKLW1uZ3gxNDMgbWlubWFnICBOYU4gLTEgICAgICAtPiAgLTEKLW1uZ3gxNDQgbWlubWFnICBOYU4gLTAgICAgICAtPiAgLTAKLW1uZ3gxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMAotbW5neDE0NiBtaW5tYWcgIE5hTiAgMSAgICAgIC0+ICAxCi1tbmd4MTQ3IG1pbm1hZyAgTmFOICAxMDAwICAgLT4gIDEwMDAKLW1uZ3gxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkKLW1uZ3gxNDkgbWlubWFnICBOYU4gIE5hTiAgICAtPiAgTmFOCi1tbmd4MTUwIG1pbm1hZyAtSW5mICBOYU4gICAgLT4gLUluZmluaXR5Ci1tbmd4MTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDAKLW1uZ3gxNTIgbWlubWFnIC0xICAgLU5hTiAgICAtPiAtMQotbW5neDE1MyBtaW5tYWcgLTAgICAgTmFOICAgIC0+IC0wCi1tbmd4MTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDAKLW1uZ3gxNTUgbWlubWFnICAxICAgIE5hTiAgICAtPiAgMQotbW5neDE1NiBtaW5tYWcgIDEwMDAgTmFOICAgIC0+ICAxMDAwCi1tbmd4MTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5Ci0KLW1uZ3gxNjEgbWlubWFnICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTYzIG1pbm1hZyAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNjQgbWlubWFnICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTY2IG1pbm1hZyAtc05hTiAgMSAgICAgLT4gLU5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNjcgbWlubWFnICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTY5IG1pbm1hZyAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNzAgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTcyIG1pbm1hZyAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNzMgbWlubWFnIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTc1IG1pbm1hZyAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNzYgbWlubWFnICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1tbmd4MTc4IG1pbm1hZyAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW1uZ3gxNzkgbWlubWFnICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1tbmd4MTgxIG1pbm1hZyAgTmFOOSAgIC1JbmYgICAtPiAtSW5maW5pdHkKLW1uZ3gxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwCi1tbmd4MTgzIG1pbm1hZyAgTmFONzEgICBJbmYgICAtPiAgSW5maW5pdHkKLQotbW5neDE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjEKLW1uZ3gxODUgbWlubWFnICBOYU4yMiAgLU5hTjUzIC0+ICBOYU4yMgotbW5neDE4NiBtaW5tYWcgLU5hTjMgICAgTmFONiAgLT4gLU5hTjMKLW1uZ3gxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NAotCi1tbmd4MTg4IG1pbm1hZyAtSW5mICAgICBOYU40MSAtPiAtSW5maW5pdHkKLW1uZ3gxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5Ci1tbmd4MTkwIG1pbm1hZyAgSW5mICAgICBOYU4yICAtPiAgSW5maW5pdHkKLQotbW5neDE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5MiBtaW5tYWcgIHNOYU45OCAtMTEgICAgIC0+ICBOYU45OCBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5MyBtaW5tYWcgLXNOYU45NyAgTmFOOCAgIC0+IC1OYU45NyBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5NSBtaW5tYWcgIE5hTjk1ICBzTmFOOTMgIC0+ICBOYU45MyBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5NiBtaW5tYWcgLUluZiAgICBzTmFOOTIgIC0+ICBOYU45MiBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5OCBtaW5tYWcgIEluZiAgIC1zTmFOOTAgIC0+IC1OYU45MCBJbnZhbGlkX29wZXJhdGlvbgotbW5neDE5OSBtaW5tYWcgIE5hTiAgICBzTmFOODYgIC0+ICBOYU44NiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSByb3VuZGluZyBjaGVja3MgLS0gY2hvc2VuIGlzIHJvdW5kZWQsIG9yIG5vdAotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLXByZWNpc2lvbjogOQotbW5neDIwMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDEKLW1uZ3gyMDIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxCi1tbmd4MjAzIG1pbm1hZyAtMTIzNDU2NzgwMCAgMSAgLT4gMQotbW5neDIwNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDEKLW1uZ3gyMDUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxCi1tbmd4MjA2IG1pbm1hZyAxIC0xMjM0NTY3ODkwICAgLT4gMQotbW5neDIwNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDEKLW1uZ3gyMDggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxCi1tbmd4MjA5IG1pbm1hZyAtMTIzNDU2Nzg5MDEgMSAgLT4gMQotbW5neDIxMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDEKLW1uZ3gyMTEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxCi1tbmd4MjEyIG1pbm1hZyAxIC0xMjM0NTY3ODk2ICAgLT4gMQotbW5neDIxMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDEKLW1uZ3gyMTQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxCi1tbmd4MjE1IG1pbm1hZyAxMjM0NTY3ODkwMSAxICAgLT4gMQotbW5neDIxNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDEKLW1uZ3gyMTcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxCi1tbmd4MjE4IG1pbm1hZyAxIDEyMzQ1Njc4OTYgICAgLT4gMQotCi1wcmVjaXNpb246IDE1Ci1tbmd4MjIxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQotbW5neDIyMiBtaW5tYWcgMSAtMTIzNDU2NzgwMDAgIC0+IDEKLW1uZ3gyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxCi1tbmd4MjI0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQotbW5neDIyNSBtaW5tYWcgLTEyMzQ1Njc4OTAgIDEgIC0+IDEKLW1uZ3gyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxCi1tbmd4MjI3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQotbW5neDIyOCBtaW5tYWcgMSAtMTIzNDU2Nzg5MSAgIC0+IDEKLW1uZ3gyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxCi1tbmd4MjMwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQotbW5neDIzMSBtaW5tYWcgLTEyMzQ1Njc4OTYgIDEgIC0+IDEKLW1uZ3gyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxCi1tbmd4MjMzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQotbW5neDIzNCBtaW5tYWcgMSAxMjM0NTY3ODkxICAgIC0+IDEKLW1uZ3gyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxCi1tbmd4MjM2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQotbW5neDIzNyBtaW5tYWcgMTIzNDU2Nzg5NiAgMSAgIC0+IDEKLW1uZ3gyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxCi0KLS0tIGZyb20gZXhhbXBsZXMKLW1uZ3gyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJwotbW5neDI4MSBtaW5tYWcgJy0xMCcgJzMnICAtPiAgJzMnCi1tbmd4MjgyIG1pbm1hZyAnMS4wJyAnMScgIC0+ICAnMS4wJwotbW5neDI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcKLW1uZ3gyODQgbWlubWFnICc3JyAnTmFOJyAgLT4gICc3JwotCi0tLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIFtpbnB1dHNdIG5vdyBhbGxvd2VkCi1tYXhFeHBvbmVudDogOTk5OTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OTk5OQotbW5neDMzMCBtaW5tYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtMS4yMzQ1Njc4OTAxMjM0NQotbW5neDMzMSBtaW5tYWcgLTlFKzk5OTk5OTk5OSAtMS4yMzQ1Njc4OTAxMjM0NUUtMCAtPiAtMS4yMzQ1Njc4OTAxMjM0NQotbW5neDMzMiBtaW5tYWcgLTAuMTAwIC05RS05OTk5OTk5OTkgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Ci1tbmd4MzMzIG1pbm1hZyAtOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkKLW1uZ3gzMzUgbWlubWFnICsxLjIzNDU2Nzg5MDEyMzQ1RS0wIC05RSs5OTk5OTk5OTkgLT4gIDEuMjM0NTY3ODkwMTIzNDUKLW1uZ3gzMzYgbWlubWFnIC05RSs5OTk5OTk5OTkgMS4yMzQ1Njc4OTAxMjM0NUUtMCAgLT4gIDEuMjM0NTY3ODkwMTIzNDUKLW1uZ3gzMzcgbWlubWFnICswLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQotbW5neDMzOCBtaW5tYWcgLTlFLTk5OTk5OTk5OSAwLjEwMCAgICAgICAgICAgICAgICAtPiAtOUUtOTk5OTk5OTk5Ci0KLW1uZ3gzMzkgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMSAgIC0+ICAtMUUtNTk5OTk5OTk5Ci1tbmd4MzQwIG1pbm1hZyAtMWUtNTk5OTk5OTk5IC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTU5OTk5OTk5OQotbW5neDM0MSBtaW5tYWcgLTFlLTYwMDAwMDAwMCAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS02MDAwMDAwMDAKLW1uZ3gzNDIgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMDEgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4Ci1tbmd4MzQzIG1pbm1hZyAtOWUtOTk5OTk5OTk4IC0wLjEgICAgICAgICAgICAtPiAgLTlFLTk5OTk5OTk5OAotbW5neDM0NCBtaW5tYWcgLTAuMDEgICAgICAgICAtOWUtOTk5OTk5OTk4ICAgLT4gIC05RS05OTk5OTk5OTgKLW1uZ3gzNDUgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAxICAgIC0+ICAtMUUrNDAwMDAwMDAxCi1tbmd4MzQ2IG1pbm1hZyAtMWU1OTk5OTk5OTkgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzQwMDAwMDAwMAotbW5neDM0NyBtaW5tYWcgLTFlNjAwMDAwMDAwICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDAKLW1uZ3gzNDggbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwMCAgICAgICAgICAgIC0+ICAtMTAwCi1tbmd4MzQ5IG1pbm1hZyAtOWU5OTk5OTk5OTggIC0xMCAgICAgICAgICAgICAtPiAgLTEwCi1tbmd4MzUwIG1pbm1hZyAtMTAwICAgICAgICAgIC05ZTk5OTk5OTk5OCAgICAtPiAgLTEwMAotLS0gc2lnbnMKLW1uZ3gzNTEgbWlubWFnIC0xZSs3Nzc3Nzc3NzcgLTFlKzQxMTExMTExMSAtPiAtMUUrNDExMTExMTExCi1tbmd4MzUyIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQotbW5neDM1MyBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTEKLW1uZ3gzNTQgbWlubWFnICsxZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExCi1tbmd4MzU1IG1pbm1hZyAtMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gLTFFLTc3Nzc3Nzc3NwotbW5neDM1NiBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcKLW1uZ3gzNTcgbWlubWFnICsxZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3Ci1tbmd4MzU4IG1pbm1hZyArMWUtNzc3Nzc3Nzc3ICsxZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3NwotCi0tLSBleHBhbmRlZCBsaXN0IGZyb20gbWluL21heCA3NTRyIHB1cnBsZSBwcm9zZQotLS0gW2V4cGxpY2l0IHRlc3RzIGZvciBleHBvbmVudCBvcmRlcmluZ10KLW1uZ3g0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xCi1tbmd4NDAyIG1pbm1hZyAgMS4xICAgIDEgICAgICAgLT4gIDEKLW1uZ3g0MDMgbWlubWFnICAxICAgICAgMS4wICAgICAtPiAgMS4wCi1tbmd4NDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQotbW5neDQwNSBtaW5tYWcgIDAuMSAgICAwLjEwICAgIC0+ICAwLjEwCi1tbmd4NDA2IG1pbm1hZyAgMC4xMCAgIDAuMTAwICAgLT4gIDAuMTAwCi1tbmd4NDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDAKLW1uZ3g0MDggbWlubWFnICAwICAgICAgMC4wICAgICAtPiAgMC4wCi1tbmd4NDA5IG1pbm1hZyAgMC4wICAgLTAgICAgICAgLT4gLTAKLW1uZ3g0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wCi1tbmd4NDExIG1pbm1hZyAgMC4wMCAgLTAuMCAgICAgLT4gLTAuMAotbW5neDQxMiBtaW5tYWcgIDAuMCAgIC0wLjAwICAgIC0+IC0wLjAwCi1tbmd4NDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMAotbW5neDQxNCBtaW5tYWcgIDAgICAgIC0wICAgICAgIC0+IC0wCi1tbmd4NDE1IG1pbm1hZyAtMC4wICAgLTAgICAgICAgLT4gLTAKLW1uZ3g0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMAotbW5neDQxNyBtaW5tYWcgLTAuMTAwIC0wLjEwICAgIC0+IC0wLjEwCi1tbmd4NDE4IG1pbm1hZyAtMC4xMCAgLTAuMSAgICAgLT4gLTAuMQotbW5neDQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjEKLW1uZ3g0MjAgbWlubWFnIC0xLjAgICAtMSAgICAgICAtPiAtMQotbW5neDQyMSBtaW5tYWcgLTEgICAgIC0xLjEgICAgIC0+IC0xCi1tbmd4NDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQotLS0gc2FtZSB3aXRoIG9wZXJhbmRzIHJldmVyc2VkCi1tbmd4NDMxIG1pbm1hZyAgMS4xICAgIEluZiAgICAgLT4gIDEuMQotbW5neDQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxCi1tbmd4NDMzIG1pbm1hZyAgMS4wICAgIDEgICAgICAgLT4gIDEuMAotbW5neDQzNCBtaW5tYWcgIDAuMSAgICAxLjAgICAgIC0+ICAwLjEKLW1uZ3g0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMAotbW5neDQzNiBtaW5tYWcgIDAuMTAwICAwLjEwICAgIC0+ICAwLjEwMAotbW5neDQzNyBtaW5tYWcgIDAgICAgICAwLjEwICAgIC0+ICAwCi1tbmd4NDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMAotbW5neDQzOSBtaW5tYWcgLTAgICAgICAwLjAgICAgIC0+IC0wCi1tbmd4NDQwIG1pbm1hZyAtMC4wICAgIDAuMCAgICAgLT4gLTAuMAotbW5neDQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjAKLW1uZ3g0NDIgbWlubWFnIC0wLjAwICAgMC4wICAgICAtPiAtMC4wMAotbW5neDQ0MyBtaW5tYWcgLTAuMCAgICAwICAgICAgIC0+IC0wLjAKLW1uZ3g0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMAotbW5neDQ0NSBtaW5tYWcgLTAgICAgIC0wLjAgICAgIC0+IC0wCi1tbmd4NDQ2IG1pbm1hZyAtMC4xMDAgLTAgICAgICAgLT4gLTAKLW1uZ3g0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMAotbW5neDQ0OCBtaW5tYWcgLTAuMSAgIC0wLjEwICAgIC0+IC0wLjEKLW1uZ3g0NDkgbWlubWFnIC0xLjAgICAtMC4xICAgICAtPiAtMC4xCi1tbmd4NDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTEKLW1uZ3g0NTEgbWlubWFnIC0xLjEgICAtMSAgICAgICAtPiAtMQotbW5neDQ1MyBtaW5tYWcgLUluZiAgIC0xLjEgICAgIC0+IC0xLjEKLS0tIGxhcmdpZXMKLW1uZ3g0NjAgbWlubWFnICAxMDAwICAgMUUrMyAgICAtPiAgMTAwMAotbW5neDQ2MSBtaW5tYWcgIDFFKzMgICAxMDAwICAgIC0+ICAxMDAwCi1tbmd4NDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMKLW1uZ3g0NjMgbWlubWFnICAxRSszICAtMTAwMCAgICAtPiAtMTAwMAotbW5neDQ2NCBtaW5tYWcgLTEwMDAgICAxRSszICAgIC0+IC0xMDAwCi1tbmd4NDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMKLW1uZ3g0NjYgbWlubWFnIC0xMDAwICAtMUUrMyAgICAtPiAtMUUrMwotbW5neDQ2NyBtaW5tYWcgLTFFKzMgIC0xMDAwICAgIC0+IC0xRSszCi0KLS0tIHJvdW5kaW5nIChyZXN1bHRzIHRyZWF0ZWQgYXMgdGhvdWdoIHBsdXMpCi1tYXhleHBvbmVudDogOTk5OTk5OTk5Ci1taW5leHBvbmVudDogLTk5OTk5OTk5OQotcHJlY2lzaW9uOiAzCi0KLW1uZ3g0NzAgbWlubWFnICAxICAgICAgNSAgICAgIC0+ICAxCi1tbmd4NDcxIG1pbm1hZyAgMTAgICAgIDUwICAgICAtPiAgMTAKLW1uZ3g0NzIgbWlubWFnICAxMDAgICAgNTAwICAgIC0+ICAxMDAKLW1uZ3g0NzMgbWlubWFnICAxMDAwICAgNTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKLW1uZ3g0NzQgbWlubWFnICAxMDAwMCAgNTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKLW1uZ3g0NzUgbWlubWFnICA2ICAgICAgNTAgICAgIC0+ICA2Ci1tbmd4NDc2IG1pbm1hZyAgNjYgICAgIDUwMCAgICAtPiAgNjYKLW1uZ3g0NzcgbWlubWFnICA2NjYgICAgNTAwMCAgIC0+ICA2NjYKLW1uZ3g0NzggbWlubWFnICA2NjY2ICAgNTAwMDAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAotbW5neDQ3OSBtaW5tYWcgIDY2NjY2ICA1MDAwMDAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Ci1tbmd4NDgwIG1pbm1hZyAgMzMzMzMgIDUwMDAwMCAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKLW1uZ3g0ODEgbWlubWFnICA3NTQwMSAgMSAgICAgIC0+ICAxCi1tbmd4NDgyIG1pbm1hZyAgNzU0MDIgIDEwICAgICAtPiAgMTAKLW1uZ3g0ODMgbWlubWFnICA3NTQwMyAgMTAwICAgIC0+ICAxMDAKLW1uZ3g0ODQgbWlubWFnICA3NTQwNCAgMTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQKLW1uZ3g0ODUgbWlubWFnICA3NTQwNSAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQKLW1uZ3g0ODYgbWlubWFnICA3NTQwNiAgNiAgICAgIC0+ICA2Ci1tbmd4NDg3IG1pbm1hZyAgNzU0MDcgIDY2ICAgICAtPiAgNjYKLW1uZ3g0ODggbWlubWFnICA3NTQwOCAgNjY2ICAgIC0+ICA2NjYKLW1uZ3g0ODkgbWlubWFnICA3NTQwOSAgNjY2NiAgIC0+ICA2LjY3RSszIFJvdW5kZWQgSW5leGFjdAotbW5neDQ5MCBtaW5tYWcgIDc1NDEwICA2NjY2NiAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0Ci1tbmd4NDkxIG1pbm1hZyAgNzU0MTEgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QKLQotCi0tLSBvdmVyZmxvdyB0ZXN0cwotbWF4ZXhwb25lbnQ6IDk5OTk5OTk5OQotbWluZXhwb25lbnQ6IC05OTk5OTk5OTkKLXByZWNpc2lvbjogMwotbW5neDUwMCBtaW5tYWcgOS45OTlFKzk5OTk5OTk5OSAgMCAtPiAgMAotbW5neDUwMSBtaW5tYWcgLTkuOTk5RSs5OTk5OTk5OTkgMCAtPiAgMAotCi0tLSBzdWJub3JtYWxzIGFuZCB1bmRlcmZsb3cKLXByZWNpc2lvbjogMwotbWF4ZXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLW1uZ3g1MTAgbWlubWFnICAxLjAwRS05OTkgICAgICAgMCAgLT4gICAwCi1tbmd4NTExIG1pbm1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMAotbW5neDUxMiBtaW5tYWcgIDAuMTBFLTk5OSAgICAgICAwICAtPiAgIDAKLW1uZ3g1MTMgbWlubWFnICAwLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwCi1tbmd4NTE0IG1pbm1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMAotbW5neDUxNSBtaW5tYWcgIDAuOTk5RS05OTkgICAgICAwICAtPiAgIDAKLW1uZ3g1MTYgbWlubWFnICAwLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwCi1tbmd4NTE3IG1pbm1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMAotbW5neDUxOCBtaW5tYWcgIDAuMDAxRS05OTkgICAgICAwICAtPiAgIDAKLW1uZ3g1MTkgbWlubWFnICAwLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwCi1tbmd4NTIwIG1pbm1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMAotCi1tbmd4NTMwIG1pbm1hZyAtMS4wMEUtOTk5ICAgICAgIDAgIC0+ICAgMAotbW5neDUzMSBtaW5tYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgIDAKLW1uZ3g1MzIgbWlubWFnIC0wLjEwRS05OTkgICAgICAgMCAgLT4gICAwCi1tbmd4NTMzIG1pbm1hZyAtMC4xMDBFLTk5OSAgICAgIDAgIC0+ICAgMAotbW5neDUzNCBtaW5tYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgIDAKLW1uZ3g1MzUgbWlubWFnIC0wLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwCi1tbmd4NTM2IG1pbm1hZyAtMC4wOTlFLTk5OSAgICAgIDAgIC0+ICAgMAotbW5neDUzNyBtaW5tYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgIDAKLW1uZ3g1MzggbWlubWFnIC0wLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwCi1tbmd4NTM5IG1pbm1hZyAtMC4wMDA5RS05OTkgICAgIDAgIC0+ICAgMAotbW5neDU0MCBtaW5tYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDAKLQotCi0tLSBOdWxsIHRlc3RzCi1tbmc5MDAgbWlubWFnIDEwICAjIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotbW5nOTAxIG1pbm1hZyAgIyAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIG1pbm1hZy5kZWNUZXN0IC0tIGRlY2ltYWwgbWluaW11bSBieSBtYWduaXR1ZGUgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCistLSB3ZSBhc3N1bWUgdGhhdCBiYXNlIGNvbXBhcmlzb24gaXMgdGVzdGVkIGluIGNvbXBhcmUuZGVjVGVzdCwgc28NCistLSB0aGVzZSBtYWlubHkgY292ZXIgc3BlY2lhbCBjYXNlcyBhbmQgcm91bmRpbmcNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCistLSBzYW5pdHkgY2hlY2tzDQorbW5neDAwMSBtaW5tYWcgIC0yICAtMiAgLT4gLTINCittbmd4MDAyIG1pbm1hZyAgLTIgIC0xICAtPiAtMQ0KK21uZ3gwMDMgbWlubWFnICAtMiAgIDAgIC0+ICAwDQorbW5neDAwNCBtaW5tYWcgIC0yICAgMSAgLT4gIDENCittbmd4MDA1IG1pbm1hZyAgLTIgICAyICAtPiAtMg0KK21uZ3gwMDYgbWlubWFnICAtMSAgLTIgIC0+IC0xDQorbW5neDAwNyBtaW5tYWcgIC0xICAtMSAgLT4gLTENCittbmd4MDA4IG1pbm1hZyAgLTEgICAwICAtPiAgMA0KK21uZ3gwMDkgbWlubWFnICAtMSAgIDEgIC0+IC0xDQorbW5neDAxMCBtaW5tYWcgIC0xICAgMiAgLT4gLTENCittbmd4MDExIG1pbm1hZyAgIDAgIC0yICAtPiAgMA0KK21uZ3gwMTIgbWlubWFnICAgMCAgLTEgIC0+ICAwDQorbW5neDAxMyBtaW5tYWcgICAwICAgMCAgLT4gIDANCittbmd4MDE0IG1pbm1hZyAgIDAgICAxICAtPiAgMA0KK21uZ3gwMTUgbWlubWFnICAgMCAgIDIgIC0+ICAwDQorbW5neDAxNiBtaW5tYWcgICAxICAtMiAgLT4gIDENCittbmd4MDE3IG1pbm1hZyAgIDEgIC0xICAtPiAtMQ0KK21uZ3gwMTggbWlubWFnICAgMSAgIDAgIC0+ICAwDQorbW5neDAxOSBtaW5tYWcgICAxICAgMSAgLT4gIDENCittbmd4MDIwIG1pbm1hZyAgIDEgICAyICAtPiAgMQ0KK21uZ3gwMjEgbWlubWFnICAgMiAgLTIgIC0+IC0yDQorbW5neDAyMiBtaW5tYWcgICAyICAtMSAgLT4gLTENCittbmd4MDIzIG1pbm1hZyAgIDIgICAwICAtPiAgMA0KK21uZ3gwMjUgbWlubWFnICAgMiAgIDEgIC0+ICAxDQorbW5neDAyNiBtaW5tYWcgICAyICAgMiAgLT4gIDINCisNCistLSBleHRlbmRlZCB6ZXJvcw0KK21uZ3gwMzAgbWlubWFnICAgMCAgICAgMCAgIC0+ICAwDQorbW5neDAzMSBtaW5tYWcgICAwICAgIC0wICAgLT4gLTANCittbmd4MDMyIG1pbm1hZyAgIDAgICAgLTAuMCAtPiAtMC4wDQorbW5neDAzMyBtaW5tYWcgICAwICAgICAwLjAgLT4gIDAuMA0KK21uZ3gwMzQgbWlubWFnICAtMCAgICAgMCAgIC0+IC0wDQorbW5neDAzNSBtaW5tYWcgIC0wICAgIC0wICAgLT4gLTANCittbmd4MDM2IG1pbm1hZyAgLTAgICAgLTAuMCAtPiAtMA0KK21uZ3gwMzcgbWlubWFnICAtMCAgICAgMC4wIC0+IC0wDQorbW5neDAzOCBtaW5tYWcgICAwLjAgICAwICAgLT4gIDAuMA0KK21uZ3gwMzkgbWlubWFnICAgMC4wICAtMCAgIC0+IC0wDQorbW5neDA0MCBtaW5tYWcgICAwLjAgIC0wLjAgLT4gLTAuMA0KK21uZ3gwNDEgbWlubWFnICAgMC4wICAgMC4wIC0+ICAwLjANCittbmd4MDQyIG1pbm1hZyAgLTAuMCAgIDAgICAtPiAtMC4wDQorbW5neDA0MyBtaW5tYWcgIC0wLjAgIC0wICAgLT4gLTANCittbmd4MDQ0IG1pbm1hZyAgLTAuMCAgLTAuMCAtPiAtMC4wDQorbW5neDA0NSBtaW5tYWcgIC0wLjAgICAwLjAgLT4gLTAuMA0KKw0KK21uZ3gwNDYgbWlubWFnICAgMEUxICAtMEUxIC0+IC0wRSsxDQorbW5neDA0NyBtaW5tYWcgIC0wRTEgICAwRTIgLT4gLTBFKzENCittbmd4MDQ4IG1pbm1hZyAgIDBFMiAgIDBFMSAtPiAgMEUrMQ0KK21uZ3gwNDkgbWlubWFnICAgMEUxICAgMEUyIC0+ICAwRSsxDQorbW5neDA1MCBtaW5tYWcgIC0wRTMgIC0wRTIgLT4gLTBFKzMNCittbmd4MDUxIG1pbm1hZyAgLTBFMiAgLTBFMyAtPiAtMEUrMw0KKw0KKy0tIFNwZWNpYWxzDQorcHJlY2lzaW9uOiA5DQorbW5neDA5MCBtaW5tYWcgIEluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK21uZ3gwOTEgbWlubWFnICBJbmYgIC0xMDAwICAtPiAtMTAwMA0KK21uZ3gwOTIgbWlubWFnICBJbmYgIC0xICAgICAtPiAtMQ0KK21uZ3gwOTMgbWlubWFnICBJbmYgIC0wICAgICAtPiAtMA0KK21uZ3gwOTQgbWlubWFnICBJbmYgICAwICAgICAtPiAgMA0KK21uZ3gwOTUgbWlubWFnICBJbmYgICAxICAgICAtPiAgMQ0KK21uZ3gwOTYgbWlubWFnICBJbmYgICAxMDAwICAtPiAgMTAwMA0KK21uZ3gwOTcgbWlubWFnICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCittbmd4MDk4IG1pbm1hZyAtMTAwMCAgSW5mICAgLT4gLTEwMDANCittbmd4MDk5IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorbW5neDEwMCBtaW5tYWcgLTEgICAgIEluZiAgIC0+IC0xDQorbW5neDEwMSBtaW5tYWcgLTAgICAgIEluZiAgIC0+IC0wDQorbW5neDEwMiBtaW5tYWcgIDAgICAgIEluZiAgIC0+ICAwDQorbW5neDEwMyBtaW5tYWcgIDEgICAgIEluZiAgIC0+ICAxDQorbW5neDEwNCBtaW5tYWcgIDEwMDAgIEluZiAgIC0+ICAxMDAwDQorbW5neDEwNSBtaW5tYWcgIEluZiAgIEluZiAgIC0+ICBJbmZpbml0eQ0KKw0KK21uZ3gxMjAgbWlubWFnIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCittbmd4MTIxIG1pbm1hZyAtSW5mICAtMTAwMCAgLT4gLTEwMDANCittbmd4MTIyIG1pbm1hZyAtSW5mICAtMSAgICAgLT4gLTENCittbmd4MTIzIG1pbm1hZyAtSW5mICAtMCAgICAgLT4gLTANCittbmd4MTI0IG1pbm1hZyAtSW5mICAgMCAgICAgLT4gIDANCittbmd4MTI1IG1pbm1hZyAtSW5mICAgMSAgICAgLT4gIDENCittbmd4MTI2IG1pbm1hZyAtSW5mICAgMTAwMCAgLT4gIDEwMDANCittbmd4MTI3IG1pbm1hZyAtSW5mICAgSW5mICAgLT4gLUluZmluaXR5DQorbW5neDEyOCBtaW5tYWcgLUluZiAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK21uZ3gxMjkgbWlubWFnIC0xMDAwIC1JbmYgICAtPiAtMTAwMA0KK21uZ3gxMzAgbWlubWFnIC0xICAgIC1JbmYgICAtPiAtMQ0KK21uZ3gxMzEgbWlubWFnIC0wICAgIC1JbmYgICAtPiAtMA0KK21uZ3gxMzIgbWlubWFnICAwICAgIC1JbmYgICAtPiAgMA0KK21uZ3gxMzMgbWlubWFnICAxICAgIC1JbmYgICAtPiAgMQ0KK21uZ3gxMzQgbWlubWFnICAxMDAwIC1JbmYgICAtPiAgMTAwMA0KK21uZ3gxMzUgbWlubWFnICBJbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCisNCistLSAyMDA0LjA4LjAyIDc1NHIgY2hvb3NlcyBudW1iZXIgb3ZlciBOYU4gaW4gbWl4ZWQgY2FzZXMNCittbmd4MTQxIG1pbm1hZyAgTmFOIC1JbmYgICAgLT4gIC1JbmZpbml0eQ0KK21uZ3gxNDIgbWlubWFnICBOYU4gLTEwMDAgICAtPiAgLTEwMDANCittbmd4MTQzIG1pbm1hZyAgTmFOIC0xICAgICAgLT4gIC0xDQorbW5neDE0NCBtaW5tYWcgIE5hTiAtMCAgICAgIC0+ICAtMA0KK21uZ3gxNDUgbWlubWFnICBOYU4gIDAgICAgICAtPiAgMA0KK21uZ3gxNDYgbWlubWFnICBOYU4gIDEgICAgICAtPiAgMQ0KK21uZ3gxNDcgbWlubWFnICBOYU4gIDEwMDAgICAtPiAgMTAwMA0KK21uZ3gxNDggbWlubWFnICBOYU4gIEluZiAgICAtPiAgSW5maW5pdHkNCittbmd4MTQ5IG1pbm1hZyAgTmFOICBOYU4gICAgLT4gIE5hTg0KK21uZ3gxNTAgbWlubWFnIC1JbmYgIE5hTiAgICAtPiAtSW5maW5pdHkNCittbmd4MTUxIG1pbm1hZyAtMTAwMCBOYU4gICAgLT4gLTEwMDANCittbmd4MTUyIG1pbm1hZyAtMSAgIC1OYU4gICAgLT4gLTENCittbmd4MTUzIG1pbm1hZyAtMCAgICBOYU4gICAgLT4gLTANCittbmd4MTU0IG1pbm1hZyAgMCAgIC1OYU4gICAgLT4gIDANCittbmd4MTU1IG1pbm1hZyAgMSAgICBOYU4gICAgLT4gIDENCittbmd4MTU2IG1pbm1hZyAgMTAwMCBOYU4gICAgLT4gIDEwMDANCittbmd4MTU3IG1pbm1hZyAgSW5mICBOYU4gICAgLT4gIEluZmluaXR5DQorDQorbW5neDE2MSBtaW5tYWcgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2MiBtaW5tYWcgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2MyBtaW5tYWcgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2NCBtaW5tYWcgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2NSBtaW5tYWcgLXNOYU4gIDAgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2NiBtaW5tYWcgLXNOYU4gIDEgICAgIC0+IC1OYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2NyBtaW5tYWcgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2OCBtaW5tYWcgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE2OSBtaW5tYWcgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3MCBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3MSBtaW5tYWcgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3MiBtaW5tYWcgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3MyBtaW5tYWcgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3NCBtaW5tYWcgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3NSBtaW5tYWcgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3NiBtaW5tYWcgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3NyBtaW5tYWcgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3OCBtaW5tYWcgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE3OSBtaW5tYWcgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK21uZ3gxODEgbWlubWFnICBOYU45ICAgLUluZiAgIC0+IC1JbmZpbml0eQ0KK21uZ3gxODIgbWlubWFnIC1OYU44ICAgIDk5OTAgIC0+ICA5OTkwDQorbW5neDE4MyBtaW5tYWcgIE5hTjcxICAgSW5mICAgLT4gIEluZmluaXR5DQorDQorbW5neDE4NCBtaW5tYWcgIE5hTjEgICAgTmFONTQgLT4gIE5hTjENCittbmd4MTg1IG1pbm1hZyAgTmFOMjIgIC1OYU41MyAtPiAgTmFOMjINCittbmd4MTg2IG1pbm1hZyAtTmFOMyAgICBOYU42ICAtPiAtTmFOMw0KK21uZ3gxODcgbWlubWFnIC1OYU40NCAgIE5hTjcgIC0+IC1OYU40NA0KKw0KK21uZ3gxODggbWlubWFnIC1JbmYgICAgIE5hTjQxIC0+IC1JbmZpbml0eQ0KK21uZ3gxODkgbWlubWFnIC05OTk5ICAgLU5hTjMzIC0+IC05OTk5DQorbW5neDE5MCBtaW5tYWcgIEluZiAgICAgTmFOMiAgLT4gIEluZmluaXR5DQorDQorbW5neDE5MSBtaW5tYWcgIHNOYU45OSAtSW5mICAgIC0+ICBOYU45OSBJbnZhbGlkX29wZXJhdGlvbg0KK21uZ3gxOTIgbWlubWFnICBzTmFOOTggLTExICAgICAtPiAgTmFOOTggSW52YWxpZF9vcGVyYXRpb24NCittbmd4MTkzIG1pbm1hZyAtc05hTjk3ICBOYU44ICAgLT4gLU5hTjk3IEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE5NCBtaW5tYWcgIHNOYU42OSBzTmFOOTQgIC0+ICBOYU42OSBJbnZhbGlkX29wZXJhdGlvbg0KK21uZ3gxOTUgbWlubWFnICBOYU45NSAgc05hTjkzICAtPiAgTmFOOTMgSW52YWxpZF9vcGVyYXRpb24NCittbmd4MTk2IG1pbm1hZyAtSW5mICAgIHNOYU45MiAgLT4gIE5hTjkyIEludmFsaWRfb3BlcmF0aW9uDQorbW5neDE5NyBtaW5tYWcgIDA4OCAgICBzTmFOOTEgIC0+ICBOYU45MSBJbnZhbGlkX29wZXJhdGlvbg0KK21uZ3gxOTggbWlubWFnICBJbmYgICAtc05hTjkwICAtPiAtTmFOOTAgSW52YWxpZF9vcGVyYXRpb24NCittbmd4MTk5IG1pbm1hZyAgTmFOICAgIHNOYU44NiAgLT4gIE5hTjg2IEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcm91bmRpbmcgY2hlY2tzIC0tIGNob3NlbiBpcyByb3VuZGVkLCBvciBub3QNCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCitwcmVjaXNpb246IDkNCittbmd4MjAxIG1pbm1hZyAtMTIzNDU2NzgwMDAgMSAgLT4gMQ0KK21uZ3gyMDIgbWlubWFnIDEgLTEyMzQ1Njc4MDAwICAtPiAxDQorbW5neDIwMyBtaW5tYWcgLTEyMzQ1Njc4MDAgIDEgIC0+IDENCittbmd4MjA0IG1pbm1hZyAxIC0xMjM0NTY3ODAwICAgLT4gMQ0KK21uZ3gyMDUgbWlubWFnIC0xMjM0NTY3ODkwICAxICAtPiAxDQorbW5neDIwNiBtaW5tYWcgMSAtMTIzNDU2Nzg5MCAgIC0+IDENCittbmd4MjA3IG1pbm1hZyAtMTIzNDU2Nzg5MSAgMSAgLT4gMQ0KK21uZ3gyMDggbWlubWFnIDEgLTEyMzQ1Njc4OTEgICAtPiAxDQorbW5neDIwOSBtaW5tYWcgLTEyMzQ1Njc4OTAxIDEgIC0+IDENCittbmd4MjEwIG1pbm1hZyAxIC0xMjM0NTY3ODkwMSAgLT4gMQ0KK21uZ3gyMTEgbWlubWFnIC0xMjM0NTY3ODk2ICAxICAtPiAxDQorbW5neDIxMiBtaW5tYWcgMSAtMTIzNDU2Nzg5NiAgIC0+IDENCittbmd4MjEzIG1pbm1hZyAxMjM0NTY3ODkxICAxICAgLT4gMQ0KK21uZ3gyMTQgbWlubWFnIDEgMTIzNDU2Nzg5MSAgICAtPiAxDQorbW5neDIxNSBtaW5tYWcgMTIzNDU2Nzg5MDEgMSAgIC0+IDENCittbmd4MjE2IG1pbm1hZyAxIDEyMzQ1Njc4OTAxICAgLT4gMQ0KK21uZ3gyMTcgbWlubWFnIDEyMzQ1Njc4OTYgIDEgICAtPiAxDQorbW5neDIxOCBtaW5tYWcgMSAxMjM0NTY3ODk2ICAgIC0+IDENCisNCitwcmVjaXNpb246IDE1DQorbW5neDIyMSBtaW5tYWcgLTEyMzQ1Njc4MDAwIDEgIC0+IDENCittbmd4MjIyIG1pbm1hZyAxIC0xMjM0NTY3ODAwMCAgLT4gMQ0KK21uZ3gyMjMgbWlubWFnIC0xMjM0NTY3ODAwICAxICAtPiAxDQorbW5neDIyNCBtaW5tYWcgMSAtMTIzNDU2NzgwMCAgIC0+IDENCittbmd4MjI1IG1pbm1hZyAtMTIzNDU2Nzg5MCAgMSAgLT4gMQ0KK21uZ3gyMjYgbWlubWFnIDEgLTEyMzQ1Njc4OTAgICAtPiAxDQorbW5neDIyNyBtaW5tYWcgLTEyMzQ1Njc4OTEgIDEgIC0+IDENCittbmd4MjI4IG1pbm1hZyAxIC0xMjM0NTY3ODkxICAgLT4gMQ0KK21uZ3gyMjkgbWlubWFnIC0xMjM0NTY3ODkwMSAxICAtPiAxDQorbW5neDIzMCBtaW5tYWcgMSAtMTIzNDU2Nzg5MDEgIC0+IDENCittbmd4MjMxIG1pbm1hZyAtMTIzNDU2Nzg5NiAgMSAgLT4gMQ0KK21uZ3gyMzIgbWlubWFnIDEgLTEyMzQ1Njc4OTYgICAtPiAxDQorbW5neDIzMyBtaW5tYWcgMTIzNDU2Nzg5MSAgMSAgIC0+IDENCittbmd4MjM0IG1pbm1hZyAxIDEyMzQ1Njc4OTEgICAgLT4gMQ0KK21uZ3gyMzUgbWlubWFnIDEyMzQ1Njc4OTAxIDEgICAtPiAxDQorbW5neDIzNiBtaW5tYWcgMSAxMjM0NTY3ODkwMSAgIC0+IDENCittbmd4MjM3IG1pbm1hZyAxMjM0NTY3ODk2ICAxICAgLT4gMQ0KK21uZ3gyMzggbWlubWFnIDEgMTIzNDU2Nzg5NiAgICAtPiAxDQorDQorLS0gZnJvbSBleGFtcGxlcw0KK21uZ3gyODAgbWlubWFnICczJyAgICcyJyAgLT4gICcyJw0KK21uZ3gyODEgbWlubWFnICctMTAnICczJyAgLT4gICczJw0KK21uZ3gyODIgbWlubWFnICcxLjAnICcxJyAgLT4gICcxLjAnDQorbW5neDI4MyBtaW5tYWcgJzEnICcxLjAnICAtPiAgJzEuMCcNCittbmd4Mjg0IG1pbm1hZyAnNycgJ05hTicgIC0+ICAnNycNCisNCistLSBvdmVyZmxvdyBhbmQgdW5kZXJmbG93IHRlc3RzIC4uIHN1Ym5vcm1hbCByZXN1bHRzIFtpbnB1dHNdIG5vdyBhbGxvd2VkDQorbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQ0KK21pbmV4cG9uZW50OiAtOTk5OTk5OTk5DQorbW5neDMzMCBtaW5tYWcgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLTlFKzk5OTk5OTk5OSAtPiAtMS4yMzQ1Njc4OTAxMjM0NQ0KK21uZ3gzMzEgbWlubWFnIC05RSs5OTk5OTk5OTkgLTEuMjM0NTY3ODkwMTIzNDVFLTAgLT4gLTEuMjM0NTY3ODkwMTIzNDUNCittbmd4MzMyIG1pbm1hZyAtMC4xMDAgLTlFLTk5OTk5OTk5OSAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCittbmd4MzMzIG1pbm1hZyAtOUUtOTk5OTk5OTk5IC0wLjEwMCAgICAgICAgICAgICAgIC0+IC05RS05OTk5OTk5OTkNCittbmd4MzM1IG1pbm1hZyArMS4yMzQ1Njc4OTAxMjM0NUUtMCAtOUUrOTk5OTk5OTk5IC0+ICAxLjIzNDU2Nzg5MDEyMzQ1DQorbW5neDMzNiBtaW5tYWcgLTlFKzk5OTk5OTk5OSAxLjIzNDU2Nzg5MDEyMzQ1RS0wICAtPiAgMS4yMzQ1Njc4OTAxMjM0NQ0KK21uZ3gzMzcgbWlubWFnICswLjEwMCAtOUUtOTk5OTk5OTk5ICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQ0KK21uZ3gzMzggbWlubWFnIC05RS05OTk5OTk5OTkgMC4xMDAgICAgICAgICAgICAgICAgLT4gLTlFLTk5OTk5OTk5OQ0KKw0KK21uZ3gzMzkgbWlubWFnIC0xZS01OTk5OTk5OTkgLTFlLTQwMDAwMDAwMSAgIC0+ICAtMUUtNTk5OTk5OTk5DQorbW5neDM0MCBtaW5tYWcgLTFlLTU5OTk5OTk5OSAtMWUtNDAwMDAwMDAwICAgLT4gIC0xRS01OTk5OTk5OTkNCittbmd4MzQxIG1pbm1hZyAtMWUtNjAwMDAwMDAwIC0xZS00MDAwMDAwMDAgICAtPiAgLTFFLTYwMDAwMDAwMA0KK21uZ3gzNDIgbWlubWFnIC05ZS05OTk5OTk5OTggLTAuMDEgICAgICAgICAgIC0+ICAtOUUtOTk5OTk5OTk4DQorbW5neDM0MyBtaW5tYWcgLTllLTk5OTk5OTk5OCAtMC4xICAgICAgICAgICAgLT4gIC05RS05OTk5OTk5OTgNCittbmd4MzQ0IG1pbm1hZyAtMC4wMSAgICAgICAgIC05ZS05OTk5OTk5OTggICAtPiAgLTlFLTk5OTk5OTk5OA0KK21uZ3gzNDUgbWlubWFnIC0xZTU5OTk5OTk5OSAgLTFlNDAwMDAwMDAxICAgIC0+ICAtMUUrNDAwMDAwMDAxDQorbW5neDM0NiBtaW5tYWcgLTFlNTk5OTk5OTk5ICAtMWU0MDAwMDAwMDAgICAgLT4gIC0xRSs0MDAwMDAwMDANCittbmd4MzQ3IG1pbm1hZyAtMWU2MDAwMDAwMDAgIC0xZTQwMDAwMDAwMCAgICAtPiAgLTFFKzQwMDAwMDAwMA0KK21uZ3gzNDggbWlubWFnIC05ZTk5OTk5OTk5OCAgLTEwMCAgICAgICAgICAgIC0+ICAtMTAwDQorbW5neDM0OSBtaW5tYWcgLTllOTk5OTk5OTk4ICAtMTAgICAgICAgICAgICAgLT4gIC0xMA0KK21uZ3gzNTAgbWlubWFnIC0xMDAgICAgICAgICAgLTllOTk5OTk5OTk4ICAgIC0+ICAtMTAwDQorLS0gc2lnbnMNCittbmd4MzUxIG1pbm1hZyAtMWUrNzc3Nzc3Nzc3IC0xZSs0MTExMTExMTEgLT4gLTFFKzQxMTExMTExMQ0KK21uZ3gzNTIgbWlubWFnIC0xZSs3Nzc3Nzc3NzcgKzFlKzQxMTExMTExMSAtPiAgMUUrNDExMTExMTExDQorbW5neDM1MyBtaW5tYWcgKzFlKzc3Nzc3Nzc3NyAtMWUrNDExMTExMTExIC0+IC0xRSs0MTExMTExMTENCittbmd4MzU0IG1pbm1hZyArMWUrNzc3Nzc3Nzc3ICsxZSs0MTExMTExMTEgLT4gIDFFKzQxMTExMTExMQ0KK21uZ3gzNTUgbWlubWFnIC0xZS03Nzc3Nzc3NzcgLTFlLTQxMTExMTExMSAtPiAtMUUtNzc3Nzc3Nzc3DQorbW5neDM1NiBtaW5tYWcgLTFlLTc3Nzc3Nzc3NyArMWUtNDExMTExMTExIC0+IC0xRS03Nzc3Nzc3NzcNCittbmd4MzU3IG1pbm1hZyArMWUtNzc3Nzc3Nzc3IC0xZS00MTExMTExMTEgLT4gIDFFLTc3Nzc3Nzc3Nw0KK21uZ3gzNTggbWlubWFnICsxZS03Nzc3Nzc3NzcgKzFlLTQxMTExMTExMSAtPiAgMUUtNzc3Nzc3Nzc3DQorDQorLS0gZXhwYW5kZWQgbGlzdCBmcm9tIG1pbi9tYXggNzU0ciBwdXJwbGUgcHJvc2UNCistLSBbZXhwbGljaXQgdGVzdHMgZm9yIGV4cG9uZW50IG9yZGVyaW5nXQ0KK21uZ3g0MDEgbWlubWFnICBJbmYgICAgMS4xICAgICAtPiAgMS4xDQorbW5neDQwMiBtaW5tYWcgIDEuMSAgICAxICAgICAgIC0+ICAxDQorbW5neDQwMyBtaW5tYWcgIDEgICAgICAxLjAgICAgIC0+ICAxLjANCittbmd4NDA0IG1pbm1hZyAgMS4wICAgIDAuMSAgICAgLT4gIDAuMQ0KK21uZ3g0MDUgbWlubWFnICAwLjEgICAgMC4xMCAgICAtPiAgMC4xMA0KK21uZ3g0MDYgbWlubWFnICAwLjEwICAgMC4xMDAgICAtPiAgMC4xMDANCittbmd4NDA3IG1pbm1hZyAgMC4xMCAgIDAgICAgICAgLT4gIDANCittbmd4NDA4IG1pbm1hZyAgMCAgICAgIDAuMCAgICAgLT4gIDAuMA0KK21uZ3g0MDkgbWlubWFnICAwLjAgICAtMCAgICAgICAtPiAtMA0KK21uZ3g0MTAgbWlubWFnICAwLjAgICAtMC4wICAgICAtPiAtMC4wDQorbW5neDQxMSBtaW5tYWcgIDAuMDAgIC0wLjAgICAgIC0+IC0wLjANCittbmd4NDEyIG1pbm1hZyAgMC4wICAgLTAuMDAgICAgLT4gLTAuMDANCittbmd4NDEzIG1pbm1hZyAgMCAgICAgLTAuMCAgICAgLT4gLTAuMA0KK21uZ3g0MTQgbWlubWFnICAwICAgICAtMCAgICAgICAtPiAtMA0KK21uZ3g0MTUgbWlubWFnIC0wLjAgICAtMCAgICAgICAtPiAtMA0KK21uZ3g0MTYgbWlubWFnIC0wICAgICAtMC4xMDAgICAtPiAtMA0KK21uZ3g0MTcgbWlubWFnIC0wLjEwMCAtMC4xMCAgICAtPiAtMC4xMA0KK21uZ3g0MTggbWlubWFnIC0wLjEwICAtMC4xICAgICAtPiAtMC4xDQorbW5neDQxOSBtaW5tYWcgLTAuMSAgIC0xLjAgICAgIC0+IC0wLjENCittbmd4NDIwIG1pbm1hZyAtMS4wICAgLTEgICAgICAgLT4gLTENCittbmd4NDIxIG1pbm1hZyAtMSAgICAgLTEuMSAgICAgLT4gLTENCittbmd4NDIzIG1pbm1hZyAtMS4xICAgLUluZiAgICAgLT4gLTEuMQ0KKy0tIHNhbWUgd2l0aCBvcGVyYW5kcyByZXZlcnNlZA0KK21uZ3g0MzEgbWlubWFnICAxLjEgICAgSW5mICAgICAtPiAgMS4xDQorbW5neDQzMiBtaW5tYWcgIDEgICAgICAxLjEgICAgIC0+ICAxDQorbW5neDQzMyBtaW5tYWcgIDEuMCAgICAxICAgICAgIC0+ICAxLjANCittbmd4NDM0IG1pbm1hZyAgMC4xICAgIDEuMCAgICAgLT4gIDAuMQ0KK21uZ3g0MzUgbWlubWFnICAwLjEwICAgMC4xICAgICAtPiAgMC4xMA0KK21uZ3g0MzYgbWlubWFnICAwLjEwMCAgMC4xMCAgICAtPiAgMC4xMDANCittbmd4NDM3IG1pbm1hZyAgMCAgICAgIDAuMTAgICAgLT4gIDANCittbmd4NDM4IG1pbm1hZyAgMC4wICAgIDAgICAgICAgLT4gIDAuMA0KK21uZ3g0MzkgbWlubWFnIC0wICAgICAgMC4wICAgICAtPiAtMA0KK21uZ3g0NDAgbWlubWFnIC0wLjAgICAgMC4wICAgICAtPiAtMC4wDQorbW5neDQ0MSBtaW5tYWcgLTAuMCAgICAwLjAwICAgIC0+IC0wLjANCittbmd4NDQyIG1pbm1hZyAtMC4wMCAgIDAuMCAgICAgLT4gLTAuMDANCittbmd4NDQzIG1pbm1hZyAtMC4wICAgIDAgICAgICAgLT4gLTAuMA0KK21uZ3g0NDQgbWlubWFnIC0wICAgICAgMCAgICAgICAtPiAtMA0KK21uZ3g0NDUgbWlubWFnIC0wICAgICAtMC4wICAgICAtPiAtMA0KK21uZ3g0NDYgbWlubWFnIC0wLjEwMCAtMCAgICAgICAtPiAtMA0KK21uZ3g0NDcgbWlubWFnIC0wLjEwICAtMC4xMDAgICAtPiAtMC4xMA0KK21uZ3g0NDggbWlubWFnIC0wLjEgICAtMC4xMCAgICAtPiAtMC4xDQorbW5neDQ0OSBtaW5tYWcgLTEuMCAgIC0wLjEgICAgIC0+IC0wLjENCittbmd4NDUwIG1pbm1hZyAtMSAgICAgLTEuMCAgICAgLT4gLTENCittbmd4NDUxIG1pbm1hZyAtMS4xICAgLTEgICAgICAgLT4gLTENCittbmd4NDUzIG1pbm1hZyAtSW5mICAgLTEuMSAgICAgLT4gLTEuMQ0KKy0tIGxhcmdpZXMNCittbmd4NDYwIG1pbm1hZyAgMTAwMCAgIDFFKzMgICAgLT4gIDEwMDANCittbmd4NDYxIG1pbm1hZyAgMUUrMyAgIDEwMDAgICAgLT4gIDEwMDANCittbmd4NDYyIG1pbm1hZyAgMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCittbmd4NDYzIG1pbm1hZyAgMUUrMyAgLTEwMDAgICAgLT4gLTEwMDANCittbmd4NDY0IG1pbm1hZyAtMTAwMCAgIDFFKzMgICAgLT4gLTEwMDANCittbmd4NDY1IG1pbm1hZyAtMUUrMyAgIDEwMDAgICAgLT4gLTFFKzMNCittbmd4NDY2IG1pbm1hZyAtMTAwMCAgLTFFKzMgICAgLT4gLTFFKzMNCittbmd4NDY3IG1pbm1hZyAtMUUrMyAgLTEwMDAgICAgLT4gLTFFKzMNCisNCistLSByb3VuZGluZyAocmVzdWx0cyB0cmVhdGVkIGFzIHRob3VnaCBwbHVzKQ0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK3ByZWNpc2lvbjogMw0KKw0KK21uZ3g0NzAgbWlubWFnICAxICAgICAgNSAgICAgIC0+ICAxDQorbW5neDQ3MSBtaW5tYWcgIDEwICAgICA1MCAgICAgLT4gIDEwDQorbW5neDQ3MiBtaW5tYWcgIDEwMCAgICA1MDAgICAgLT4gIDEwMA0KK21uZ3g0NzMgbWlubWFnICAxMDAwICAgNTAwMCAgIC0+ICAxLjAwRSszIFJvdW5kZWQNCittbmd4NDc0IG1pbm1hZyAgMTAwMDAgIDUwMDAwICAtPiAgMS4wMEUrNCBSb3VuZGVkDQorbW5neDQ3NSBtaW5tYWcgIDYgICAgICA1MCAgICAgLT4gIDYNCittbmd4NDc2IG1pbm1hZyAgNjYgICAgIDUwMCAgICAtPiAgNjYNCittbmd4NDc3IG1pbm1hZyAgNjY2ICAgIDUwMDAgICAtPiAgNjY2DQorbW5neDQ3OCBtaW5tYWcgIDY2NjYgICA1MDAwMCAgLT4gIDYuNjdFKzMgUm91bmRlZCBJbmV4YWN0DQorbW5neDQ3OSBtaW5tYWcgIDY2NjY2ICA1MDAwMDAgLT4gIDYuNjdFKzQgUm91bmRlZCBJbmV4YWN0DQorbW5neDQ4MCBtaW5tYWcgIDMzMzMzICA1MDAwMDAgLT4gIDMuMzNFKzQgUm91bmRlZCBJbmV4YWN0DQorbW5neDQ4MSBtaW5tYWcgIDc1NDAxICAxICAgICAgLT4gIDENCittbmd4NDgyIG1pbm1hZyAgNzU0MDIgIDEwICAgICAtPiAgMTANCittbmd4NDgzIG1pbm1hZyAgNzU0MDMgIDEwMCAgICAtPiAgMTAwDQorbW5neDQ4NCBtaW5tYWcgIDc1NDA0ICAxMDAwICAgLT4gIDEuMDBFKzMgUm91bmRlZA0KK21uZ3g0ODUgbWlubWFnICA3NTQwNSAgMTAwMDAgIC0+ICAxLjAwRSs0IFJvdW5kZWQNCittbmd4NDg2IG1pbm1hZyAgNzU0MDYgIDYgICAgICAtPiAgNg0KK21uZ3g0ODcgbWlubWFnICA3NTQwNyAgNjYgICAgIC0+ICA2Ng0KK21uZ3g0ODggbWlubWFnICA3NTQwOCAgNjY2ICAgIC0+ICA2NjYNCittbmd4NDg5IG1pbm1hZyAgNzU0MDkgIDY2NjYgICAtPiAgNi42N0UrMyBSb3VuZGVkIEluZXhhY3QNCittbmd4NDkwIG1pbm1hZyAgNzU0MTAgIDY2NjY2ICAtPiAgNi42N0UrNCBSb3VuZGVkIEluZXhhY3QNCittbmd4NDkxIG1pbm1hZyAgNzU0MTEgIDMzMzMzICAtPiAgMy4zM0UrNCBSb3VuZGVkIEluZXhhY3QNCisNCisNCistLSBvdmVyZmxvdyB0ZXN0cw0KK21heGV4cG9uZW50OiA5OTk5OTk5OTkNCittaW5leHBvbmVudDogLTk5OTk5OTk5OQ0KK3ByZWNpc2lvbjogMw0KK21uZ3g1MDAgbWlubWFnIDkuOTk5RSs5OTk5OTk5OTkgIDAgLT4gIDANCittbmd4NTAxIG1pbm1hZyAtOS45OTlFKzk5OTk5OTk5OSAwIC0+ICAwDQorDQorLS0gc3Vibm9ybWFscyBhbmQgdW5kZXJmbG93DQorcHJlY2lzaW9uOiAzDQorbWF4ZXhwb25lbnQ6IDk5OQ0KK21pbmV4cG9uZW50OiAtOTk5DQorbW5neDUxMCBtaW5tYWcgIDEuMDBFLTk5OSAgICAgICAwICAtPiAgIDANCittbmd4NTExIG1pbm1hZyAgMC4xRS05OTkgICAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MTIgbWlubWFnICAwLjEwRS05OTkgICAgICAgMCAgLT4gICAwDQorbW5neDUxMyBtaW5tYWcgIDAuMTAwRS05OTkgICAgICAwICAtPiAgIDANCittbmd4NTE0IG1pbm1hZyAgMC4wMUUtOTk5ICAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MTUgbWlubWFnICAwLjk5OUUtOTk5ICAgICAgMCAgLT4gICAwDQorbW5neDUxNiBtaW5tYWcgIDAuMDk5RS05OTkgICAgICAwICAtPiAgIDANCittbmd4NTE3IG1pbm1hZyAgMC4wMDlFLTk5OSAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MTggbWlubWFnICAwLjAwMUUtOTk5ICAgICAgMCAgLT4gICAwDQorbW5neDUxOSBtaW5tYWcgIDAuMDAwOUUtOTk5ICAgICAwICAtPiAgIDANCittbmd4NTIwIG1pbm1hZyAgMC4wMDAxRS05OTkgICAgIDAgIC0+ICAgMA0KKw0KK21uZ3g1MzAgbWlubWFnIC0xLjAwRS05OTkgICAgICAgMCAgLT4gICAwDQorbW5neDUzMSBtaW5tYWcgLTAuMUUtOTk5ICAgICAgICAwICAtPiAgIDANCittbmd4NTMyIG1pbm1hZyAtMC4xMEUtOTk5ICAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MzMgbWlubWFnIC0wLjEwMEUtOTk5ICAgICAgMCAgLT4gICAwDQorbW5neDUzNCBtaW5tYWcgLTAuMDFFLTk5OSAgICAgICAwICAtPiAgIDANCittbmd4NTM1IG1pbm1hZyAtMC45OTlFLTk5OSAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MzYgbWlubWFnIC0wLjA5OUUtOTk5ICAgICAgMCAgLT4gICAwDQorbW5neDUzNyBtaW5tYWcgLTAuMDA5RS05OTkgICAgICAwICAtPiAgIDANCittbmd4NTM4IG1pbm1hZyAtMC4wMDFFLTk5OSAgICAgIDAgIC0+ICAgMA0KK21uZ3g1MzkgbWlubWFnIC0wLjAwMDlFLTk5OSAgICAgMCAgLT4gICAwDQorbW5neDU0MCBtaW5tYWcgLTAuMDAwMUUtOTk5ICAgICAwICAtPiAgIDANCisNCisNCistLSBOdWxsIHRlc3RzDQorbW5nOTAwIG1pbm1hZyAxMCAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCittbmc5MDEgbWlubWFnICAjIDEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0bWludXMuZGVjVGVzdAppbmRleCA1MzFjNTI1Li5iYTkzMDY2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dG1pbnVzLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHRtaW51cy5kZWNUZXN0CkBAIC0xLDE0OCArMSwxNDggQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gbmV4dG1pbnVzLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRoYXQgaXMgbGVzcyBbNzU0ciBuZXh0ZG93bl0gICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi1uZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTQKLW5leHRtMDAyIG5leHRtaW51cyAgMC45OTk5OTk5OTYgLT4gICAwLjk5OTk5OTk5NQotbmV4dG0wMDMgbmV4dG1pbnVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk2Ci1uZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTcKLW5leHRtMDA1IG5leHRtaW51cyAgMC45OTk5OTk5OTkgLT4gICAwLjk5OTk5OTk5OAotbmV4dG0wMDYgbmV4dG1pbnVzICAxLjAwMDAwMDAwICAtPiAgIDAuOTk5OTk5OTk5Ci1uZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkKLW5leHRtMDA4IG5leHRtaW51cyAgMSAgICAgICAgICAgLT4gICAwLjk5OTk5OTk5OQotbmV4dG0wMDkgbmV4dG1pbnVzICAxLjAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDAKLW5leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAxCi1uZXh0bTAxMSBuZXh0bWludXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwMgotbmV4dG0wMTIgbmV4dG1pbnVzICAxLjAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDMKLW5leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA0Ci1uZXh0bTAxNCBuZXh0bWludXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNQotbmV4dG0wMTUgbmV4dG1pbnVzICAxLjAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDYKLW5leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA3Ci1uZXh0bTAxNyBuZXh0bWludXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAwOAotbmV4dG0wMTggbmV4dG1pbnVzICAxLjAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMDkKLW5leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEwCi1uZXh0bTAyMCBuZXh0bWludXMgIDEuMDAwMDAwMTIgIC0+ICAgMS4wMDAwMDAxMQotCi1uZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTYKLW5leHRtMDIyIG5leHRtaW51cyAtMC45OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5NwotbmV4dG0wMjMgbmV4dG1pbnVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk4Ci1uZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTkKLW5leHRtMDI1IG5leHRtaW51cyAtMC45OTk5OTk5OTkgLT4gIC0xLjAwMDAwMDAwCi1uZXh0bTAyNiBuZXh0bWludXMgLTEuMDAwMDAwMDAgIC0+ICAtMS4wMDAwMDAwMQotbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDEKLW5leHRtMDI4IG5leHRtaW51cyAtMSAgICAgICAgICAgLT4gIC0xLjAwMDAwMDAxCi1uZXh0bTAyOSBuZXh0bWludXMgLTEuMDAwMDAwMDEgIC0+ICAtMS4wMDAwMDAwMgotbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDMKLW5leHRtMDMxIG5leHRtaW51cyAtMS4wMDAwMDAwMyAgLT4gIC0xLjAwMDAwMDA0Ci1uZXh0bTAzMiBuZXh0bWludXMgLTEuMDAwMDAwMDQgIC0+ICAtMS4wMDAwMDAwNQotbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDYKLW5leHRtMDM0IG5leHRtaW51cyAtMS4wMDAwMDAwNiAgLT4gIC0xLjAwMDAwMDA3Ci1uZXh0bTAzNSBuZXh0bWludXMgLTEuMDAwMDAwMDcgIC0+ICAtMS4wMDAwMDAwOAotbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDkKLW5leHRtMDM3IG5leHRtaW51cyAtMS4wMDAwMDAwOSAgLT4gIC0xLjAwMDAwMDEwCi1uZXh0bTAzOCBuZXh0bWludXMgLTEuMDAwMDAwMTAgIC0+ICAtMS4wMDAwMDAxMQotbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTIKLQotLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCi1uZXh0bTA0MSBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMAotbmV4dG0wNDIgbmV4dG1pbnVzICAxLjAwMDAwMDEwOTk5ICAtPiAgIDEuMDAwMDAwMTAKLW5leHRtMDQzIG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEwCi1uZXh0bTA0NCBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMQotbmV4dG0wNDUgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTEKLW5leHRtMDQ2IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExCi1uZXh0bTA0NyBuZXh0bWludXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMQotbmV4dG0wNDggbmV4dG1pbnVzICAxLjAwMDAwMDExNTUyICAtPiAgIDEuMDAwMDAwMTEKLW5leHRtMDQ5IG5leHRtaW51cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDExCi1uZXh0bTA1MCBuZXh0bWludXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMQotbmV4dG0wNTEgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAwICAtPiAgLTEuMDAwMDAwMTIKLW5leHRtMDUyIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDEyCi1uZXh0bTA1MyBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMgotbmV4dG0wNTQgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTIKLW5leHRtMDU1IG5leHRtaW51cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDEyCi1uZXh0bTA1NiBuZXh0bWludXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMgotLS0gdWx0cmEtdGlueSBpbnB1dHMKLW5leHRtMDYwIG5leHRtaW51cyAgMUUtOTk5OTkgICAgICAgLT4gICAwRS0zOTEKLW5leHRtMDYxIG5leHRtaW51cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAwRS0zOTEKLW5leHRtMDYyIG5leHRtaW51cyAgMUUtMzkxICAgICAgICAgLT4gICAwRS0zOTEKLW5leHRtMDYzIG5leHRtaW51cyAtMUUtOTk5OTkgICAgICAgLT4gIC0xRS0zOTEKLW5leHRtMDY0IG5leHRtaW51cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0xRS0zOTEKLW5leHRtMDY1IG5leHRtaW51cyAtMUUtMzkxICAgICAgICAgLT4gIC0yRS0zOTEKLQotLS0gWmVyb3MKLW5leHRtMTAwIG5leHRtaW51cyAtMCAgICAgICAgICAgLT4gLTFFLTM5MQotbmV4dG0xMDEgbmV4dG1pbnVzICAwICAgICAgICAgICAtPiAtMUUtMzkxCi1uZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTEKLW5leHRtMTAzIG5leHRtaW51cyAtMC4wMCAgICAgICAgLT4gLTFFLTM5MQotbmV4dG0xMDQgbmV4dG1pbnVzICAwRS0zMDAgICAgICAtPiAtMUUtMzkxCi1uZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTEKLW5leHRtMTA2IG5leHRtaW51cyAgMEUrMzAwMDAgICAgLT4gLTFFLTM5MQotbmV4dG0xMDcgbmV4dG1pbnVzIC0wRSszMDAwMCAgICAtPiAtMUUtMzkxCi0KLXByZWNpc2lvbjogOQotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLS0tIHNwZWNpYWxzCi1uZXh0bTE1MCBuZXh0bWludXMgICBJbmYgICAgLT4gIDkuOTk5OTk5OTlFKzk5OQotbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQotbmV4dG0xNTIgbmV4dG1pbnVzICAgTmFOICAgIC0+ICBOYU4KLW5leHRtMTUzIG5leHRtaW51cyAgc05hTiAgICAtPiAgTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLW5leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcKLW5leHRtMTU1IG5leHRtaW51cyAgc05hTjg4ICAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KLW5leHRtMTU2IG5leHRtaW51cyAgLU5hTiAgICAtPiAtTmFOCi1uZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0bTE1OCBuZXh0bWludXMgIC1OYU43NyAgLT4gLU5hTjc3Ci1uZXh0bTE1OSBuZXh0bWludXMgLXNOYU44OCAgLT4gLU5hTjg4IEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzCi1uZXh0bTE3MCBuZXh0bWludXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IDkuOTk5OTk5OThFKzk5OQotbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk3RSs5OTkKLW5leHRtMTcyIG5leHRtaW51cyAgMUUtOTk5ICAgICAgICAgICAgLT4gOS45OTk5OTk5RS0xMDAwCi1uZXh0bTE3MyBuZXh0bWludXMgIDEuMDAwMDAwMDBFLTk5OSAgIC0+IDkuOTk5OTk5OUUtMTAwMAotbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0xMDA3ICAgICAgICAgICAtPiA4RS0xMDA3Ci1uZXh0bTE3NSBuZXh0bWludXMgIDkuOUUtMTAwNiAgICAgICAgIC0+IDkuOEUtMTAwNgotbmV4dG0xNzYgbmV4dG1pbnVzICA5Ljk5OTlFLTEwMDMgICAgICAtPiA5Ljk5OThFLTEwMDMKLW5leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwCi1uZXh0bTE3OCBuZXh0bWludXMgIDkuOTk5OTk5OEUtMTAwMCAgIC0+IDkuOTk5OTk5N0UtMTAwMAotbmV4dG0xNzkgbmV4dG1pbnVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OTZFLTEwMDAKLW5leHRtMTgwIG5leHRtaW51cyAgMEUtMTAwNyAgICAgICAgICAgLT4gLTFFLTEwMDcKLW5leHRtMTgxIG5leHRtaW51cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMEUtMTAwNwotbmV4dG0xODIgbmV4dG1pbnVzICAyRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3Ci0KLW5leHRtMTgzIG5leHRtaW51cyAgLTBFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcKLW5leHRtMTg0IG5leHRtaW51cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTJFLTEwMDcKLW5leHRtMTg1IG5leHRtaW51cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTNFLTEwMDcKLW5leHRtMTg2IG5leHRtaW51cyAgLTEwRS0xMDA3ICAgICAgICAgLT4gLTEuMUUtMTAwNgotbmV4dG0xODcgbmV4dG1pbnVzICAtMTAwRS0xMDA3ICAgICAgICAtPiAtMS4wMUUtMTAwNQotbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtMS4wMDAwMUUtMTAwMgotbmV4dG0xODkgbmV4dG1pbnVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtMS4wMDAwMDAwMUUtOTk5Ci1uZXh0bTE5MCBuZXh0bWludXMgIC0xLjAwMDAwMDAwRS05OTkgIC0+IC0xLjAwMDAwMDAxRS05OTkKLW5leHRtMTkxIG5leHRtaW51cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQotbmV4dG0xOTIgbmV4dG1pbnVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5OUUrOTk5Ci1uZXh0bTE5MyBuZXh0bWludXMgIC05Ljk5OTk5OTk5RSs5OTkgIC0+IC1JbmZpbml0eQotCi0tLSBOdWxsIHRlc3RzCi1uZXh0bTkwMCBuZXh0bWludXMgICMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIG5leHRtaW51cy5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0aGF0IGlzIGxlc3MgWzc1NHIgbmV4dGRvd25dICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogMzg0DQorbWluZXhwb25lbnQ6IC0zODMNCisNCituZXh0bTAwMSBuZXh0bWludXMgIDAuOTk5OTk5OTk1IC0+ICAgMC45OTk5OTk5OTQNCituZXh0bTAwMiBuZXh0bWludXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTUNCituZXh0bTAwMyBuZXh0bWludXMgIDAuOTk5OTk5OTk3IC0+ICAgMC45OTk5OTk5OTYNCituZXh0bTAwNCBuZXh0bWludXMgIDAuOTk5OTk5OTk4IC0+ICAgMC45OTk5OTk5OTcNCituZXh0bTAwNSBuZXh0bWludXMgIDAuOTk5OTk5OTk5IC0+ICAgMC45OTk5OTk5OTgNCituZXh0bTAwNiBuZXh0bWludXMgIDEuMDAwMDAwMDAgIC0+ICAgMC45OTk5OTk5OTkNCituZXh0bTAwNyBuZXh0bWludXMgIDEuMCAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkNCituZXh0bTAwOCBuZXh0bWludXMgIDEgICAgICAgICAgIC0+ICAgMC45OTk5OTk5OTkNCituZXh0bTAwOSBuZXh0bWludXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMA0KK25leHRtMDEwIG5leHRtaW51cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAxDQorbmV4dG0wMTEgbmV4dG1pbnVzICAxLjAwMDAwMDAzICAtPiAgIDEuMDAwMDAwMDINCituZXh0bTAxMiBuZXh0bWludXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwMw0KK25leHRtMDEzIG5leHRtaW51cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA0DQorbmV4dG0wMTQgbmV4dG1pbnVzICAxLjAwMDAwMDA2ICAtPiAgIDEuMDAwMDAwMDUNCituZXh0bTAxNSBuZXh0bWludXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwNg0KK25leHRtMDE2IG5leHRtaW51cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA3DQorbmV4dG0wMTcgbmV4dG1pbnVzICAxLjAwMDAwMDA5ICAtPiAgIDEuMDAwMDAwMDgNCituZXh0bTAxOCBuZXh0bWludXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAwOQ0KK25leHRtMDE5IG5leHRtaW51cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEwDQorbmV4dG0wMjAgbmV4dG1pbnVzICAxLjAwMDAwMDEyICAtPiAgIDEuMDAwMDAwMTENCisNCituZXh0bTAyMSBuZXh0bWludXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTYNCituZXh0bTAyMiBuZXh0bWludXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTcNCituZXh0bTAyMyBuZXh0bWludXMgLTAuOTk5OTk5OTk3IC0+ICAtMC45OTk5OTk5OTgNCituZXh0bTAyNCBuZXh0bWludXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTkNCituZXh0bTAyNSBuZXh0bWludXMgLTAuOTk5OTk5OTk5IC0+ICAtMS4wMDAwMDAwMA0KK25leHRtMDI2IG5leHRtaW51cyAtMS4wMDAwMDAwMCAgLT4gIC0xLjAwMDAwMDAxDQorbmV4dG0wMjcgbmV4dG1pbnVzIC0xLjAgICAgICAgICAtPiAgLTEuMDAwMDAwMDENCituZXh0bTAyOCBuZXh0bWludXMgLTEgICAgICAgICAgIC0+ICAtMS4wMDAwMDAwMQ0KK25leHRtMDI5IG5leHRtaW51cyAtMS4wMDAwMDAwMSAgLT4gIC0xLjAwMDAwMDAyDQorbmV4dG0wMzAgbmV4dG1pbnVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDMNCituZXh0bTAzMSBuZXh0bWludXMgLTEuMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwNA0KK25leHRtMDMyIG5leHRtaW51cyAtMS4wMDAwMDAwNCAgLT4gIC0xLjAwMDAwMDA1DQorbmV4dG0wMzMgbmV4dG1pbnVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDYNCituZXh0bTAzNCBuZXh0bWludXMgLTEuMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwNw0KK25leHRtMDM1IG5leHRtaW51cyAtMS4wMDAwMDAwNyAgLT4gIC0xLjAwMDAwMDA4DQorbmV4dG0wMzYgbmV4dG1pbnVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDkNCituZXh0bTAzNyBuZXh0bWludXMgLTEuMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAxMA0KK25leHRtMDM4IG5leHRtaW51cyAtMS4wMDAwMDAxMCAgLT4gIC0xLjAwMDAwMDExDQorbmV4dG0wMzkgbmV4dG1pbnVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTINCisNCistLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24NCituZXh0bTA0MSBuZXh0bWludXMgIDEuMDAwMDAwMTA5OTggIC0+ICAgMS4wMDAwMDAxMA0KK25leHRtMDQyIG5leHRtaW51cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDEwDQorbmV4dG0wNDMgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAwICAtPiAgIDEuMDAwMDAwMTANCituZXh0bTA0NCBuZXh0bWludXMgIDEuMDAwMDAwMTEwMDEgIC0+ICAgMS4wMDAwMDAxMQ0KK25leHRtMDQ1IG5leHRtaW51cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDExDQorbmV4dG0wNDYgbmV4dG1pbnVzICAxLjAwMDAwMDExMDAyICAtPiAgIDEuMDAwMDAwMTENCituZXh0bTA0NyBuZXh0bWludXMgIDEuMDAwMDAwMTEwNTIgIC0+ICAgMS4wMDAwMDAxMQ0KK25leHRtMDQ4IG5leHRtaW51cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDExDQorbmV4dG0wNDkgbmV4dG1pbnVzIC0xLjAwMDAwMDEwOTk4ICAtPiAgLTEuMDAwMDAwMTENCituZXh0bTA1MCBuZXh0bWludXMgLTEuMDAwMDAwMTA5OTkgIC0+ICAtMS4wMDAwMDAxMQ0KK25leHRtMDUxIG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEyDQorbmV4dG0wNTIgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDAxICAtPiAgLTEuMDAwMDAwMTINCituZXh0bTA1MyBuZXh0bWludXMgLTEuMDAwMDAwMTEwMDIgIC0+ICAtMS4wMDAwMDAxMg0KK25leHRtMDU0IG5leHRtaW51cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDEyDQorbmV4dG0wNTUgbmV4dG1pbnVzIC0xLjAwMDAwMDExMDUyICAtPiAgLTEuMDAwMDAwMTINCituZXh0bTA1NiBuZXh0bWludXMgLTEuMDAwMDAwMTE1NTIgIC0+ICAtMS4wMDAwMDAxMg0KKy0tIHVsdHJhLXRpbnkgaW5wdXRzDQorbmV4dG0wNjAgbmV4dG1pbnVzICAxRS05OTk5OSAgICAgICAtPiAgIDBFLTM5MQ0KK25leHRtMDYxIG5leHRtaW51cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAwRS0zOTENCituZXh0bTA2MiBuZXh0bWludXMgIDFFLTM5MSAgICAgICAgIC0+ICAgMEUtMzkxDQorbmV4dG0wNjMgbmV4dG1pbnVzIC0xRS05OTk5OSAgICAgICAtPiAgLTFFLTM5MQ0KK25leHRtMDY0IG5leHRtaW51cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0xRS0zOTENCituZXh0bTA2NSBuZXh0bWludXMgLTFFLTM5MSAgICAgICAgIC0+ICAtMkUtMzkxDQorDQorLS0gWmVyb3MNCituZXh0bTEwMCBuZXh0bWludXMgLTAgICAgICAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwMSBuZXh0bWludXMgIDAgICAgICAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwMiBuZXh0bWludXMgIDAuMDAgICAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwMyBuZXh0bWludXMgLTAuMDAgICAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwNCBuZXh0bWludXMgIDBFLTMwMCAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwNSBuZXh0bWludXMgIDBFKzMwMCAgICAgIC0+IC0xRS0zOTENCituZXh0bTEwNiBuZXh0bWludXMgIDBFKzMwMDAwICAgIC0+IC0xRS0zOTENCituZXh0bTEwNyBuZXh0bWludXMgLTBFKzMwMDAwICAgIC0+IC0xRS0zOTENCisNCitwcmVjaXNpb246IDkNCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCistLSBzcGVjaWFscw0KK25leHRtMTUwIG5leHRtaW51cyAgIEluZiAgICAtPiAgOS45OTk5OTk5OUUrOTk5DQorbmV4dG0xNTEgbmV4dG1pbnVzICAtSW5mICAgIC0+IC1JbmZpbml0eQ0KK25leHRtMTUyIG5leHRtaW51cyAgIE5hTiAgICAtPiAgTmFODQorbmV4dG0xNTMgbmV4dG1pbnVzICBzTmFOICAgIC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHRtMTU0IG5leHRtaW51cyAgIE5hTjc3ICAtPiAgTmFONzcNCituZXh0bTE1NSBuZXh0bWludXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorbmV4dG0xNTYgbmV4dG1pbnVzICAtTmFOICAgIC0+IC1OYU4NCituZXh0bTE1NyBuZXh0bWludXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dG0xNTggbmV4dG1pbnVzICAtTmFONzcgIC0+IC1OYU43Nw0KK25leHRtMTU5IG5leHRtaW51cyAtc05hTjg4ICAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK25leHRtMTcwIG5leHRtaW51cyAgOS45OTk5OTk5OUUrOTk5ICAgLT4gOS45OTk5OTk5OEUrOTk5DQorbmV4dG0xNzEgbmV4dG1pbnVzICA5Ljk5OTk5OTk4RSs5OTkgICAtPiA5Ljk5OTk5OTk3RSs5OTkNCituZXh0bTE3MiBuZXh0bWludXMgIDFFLTk5OSAgICAgICAgICAgIC0+IDkuOTk5OTk5OUUtMTAwMA0KK25leHRtMTczIG5leHRtaW51cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gOS45OTk5OTk5RS0xMDAwDQorbmV4dG0xNzQgbmV4dG1pbnVzICA5RS0xMDA3ICAgICAgICAgICAtPiA4RS0xMDA3DQorbmV4dG0xNzUgbmV4dG1pbnVzICA5LjlFLTEwMDYgICAgICAgICAtPiA5LjhFLTEwMDYNCituZXh0bTE3NiBuZXh0bWludXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDkuOTk5OEUtMTAwMw0KK25leHRtMTc3IG5leHRtaW51cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gOS45OTk5OTk4RS0xMDAwDQorbmV4dG0xNzggbmV4dG1pbnVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTdFLTEwMDANCituZXh0bTE3OSBuZXh0bWludXMgIDkuOTk5OTk5N0UtMTAwMCAgIC0+IDkuOTk5OTk5NkUtMTAwMA0KK25leHRtMTgwIG5leHRtaW51cyAgMEUtMTAwNyAgICAgICAgICAgLT4gLTFFLTEwMDcNCituZXh0bTE4MSBuZXh0bWludXMgIDFFLTEwMDcgICAgICAgICAgIC0+IDBFLTEwMDcNCituZXh0bTE4MiBuZXh0bWludXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDFFLTEwMDcNCisNCituZXh0bTE4MyBuZXh0bWludXMgIC0wRS0xMDA3ICAgICAgICAgIC0+IC0xRS0xMDA3DQorbmV4dG0xODQgbmV4dG1pbnVzICAtMUUtMTAwNyAgICAgICAgICAtPiAtMkUtMTAwNw0KK25leHRtMTg1IG5leHRtaW51cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTNFLTEwMDcNCituZXh0bTE4NiBuZXh0bWludXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC0xLjFFLTEwMDYNCituZXh0bTE4NyBuZXh0bWludXMgIC0xMDBFLTEwMDcgICAgICAgIC0+IC0xLjAxRS0xMDA1DQorbmV4dG0xODggbmV4dG1pbnVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtMS4wMDAwMUUtMTAwMg0KK25leHRtMTg5IG5leHRtaW51cyAgLTEuMDAwMEUtOTk5ICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KK25leHRtMTkwIG5leHRtaW51cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KK25leHRtMTkxIG5leHRtaW51cyAgLTFFLTk5OSAgICAgICAgICAgLT4gLTEuMDAwMDAwMDFFLTk5OQ0KK25leHRtMTkyIG5leHRtaW51cyAgLTkuOTk5OTk5OThFKzk5OSAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KK25leHRtMTkzIG5leHRtaW51cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLUluZmluaXR5DQorDQorLS0gTnVsbCB0ZXN0cw0KK25leHRtOTAwIG5leHRtaW51cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHBsdXMuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CmluZGV4IGM2NmUzMjguLjQ0OTg5ZTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0cGx1cy5kZWNUZXN0CkBAIC0xLDE1MCArMSwxNTAgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gbmV4dHBsdXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi1uZXh0cDAwMSBuZXh0cGx1cyAgMC45OTk5OTk5OTUgLT4gICAwLjk5OTk5OTk5NgotbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTcKLW5leHRwMDAzIG5leHRwbHVzICAwLjk5OTk5OTk5NyAtPiAgIDAuOTk5OTk5OTk4Ci1uZXh0cDAwNCBuZXh0cGx1cyAgMC45OTk5OTk5OTggLT4gICAwLjk5OTk5OTk5OQotbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMAotbmV4dHAwMDYgbmV4dHBsdXMgIDEuMDAwMDAwMDAgIC0+ICAgMS4wMDAwMDAwMQotbmV4dHAwMDcgbmV4dHBsdXMgIDEuMCAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQotbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQotbmV4dHAwMDkgbmV4dHBsdXMgIDEuMDAwMDAwMDEgIC0+ICAgMS4wMDAwMDAwMgotbmV4dHAwMTAgbmV4dHBsdXMgIDEuMDAwMDAwMDIgIC0+ICAgMS4wMDAwMDAwMwotbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwNAotbmV4dHAwMTIgbmV4dHBsdXMgIDEuMDAwMDAwMDQgIC0+ICAgMS4wMDAwMDAwNQotbmV4dHAwMTMgbmV4dHBsdXMgIDEuMDAwMDAwMDUgIC0+ICAgMS4wMDAwMDAwNgotbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNwotbmV4dHAwMTUgbmV4dHBsdXMgIDEuMDAwMDAwMDcgIC0+ICAgMS4wMDAwMDAwOAotbmV4dHAwMTYgbmV4dHBsdXMgIDEuMDAwMDAwMDggIC0+ICAgMS4wMDAwMDAwOQotbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAxMAotbmV4dHAwMTggbmV4dHBsdXMgIDEuMDAwMDAwMTAgIC0+ICAgMS4wMDAwMDAxMQotbmV4dHAwMTkgbmV4dHBsdXMgIDEuMDAwMDAwMTEgIC0+ICAgMS4wMDAwMDAxMgotCi1uZXh0cDAyMSBuZXh0cGx1cyAtMC45OTk5OTk5OTUgLT4gIC0wLjk5OTk5OTk5NAotbmV4dHAwMjIgbmV4dHBsdXMgLTAuOTk5OTk5OTk2IC0+ICAtMC45OTk5OTk5OTUKLW5leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk2Ci1uZXh0cDAyNCBuZXh0cGx1cyAtMC45OTk5OTk5OTggLT4gIC0wLjk5OTk5OTk5NwotbmV4dHAwMjUgbmV4dHBsdXMgLTAuOTk5OTk5OTk5IC0+ICAtMC45OTk5OTk5OTgKLW5leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5Ci1uZXh0cDAyNyBuZXh0cGx1cyAtMS4wICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQotbmV4dHAwMjggbmV4dHBsdXMgLTEgICAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkKLW5leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDAKLW5leHRwMDMwIG5leHRwbHVzIC0xLjAwMDAwMDAyICAtPiAgLTEuMDAwMDAwMDEKLW5leHRwMDMxIG5leHRwbHVzIC0xLjAwMDAwMDAzICAtPiAgLTEuMDAwMDAwMDIKLW5leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDMKLW5leHRwMDMzIG5leHRwbHVzIC0xLjAwMDAwMDA1ICAtPiAgLTEuMDAwMDAwMDQKLW5leHRwMDM0IG5leHRwbHVzIC0xLjAwMDAwMDA2ICAtPiAgLTEuMDAwMDAwMDUKLW5leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDYKLW5leHRwMDM2IG5leHRwbHVzIC0xLjAwMDAwMDA4ICAtPiAgLTEuMDAwMDAwMDcKLW5leHRwMDM3IG5leHRwbHVzIC0xLjAwMDAwMDA5ICAtPiAgLTEuMDAwMDAwMDgKLW5leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDkKLW5leHRwMDM5IG5leHRwbHVzIC0xLjAwMDAwMDExICAtPiAgLTEuMDAwMDAwMTAKLW5leHRwMDQwIG5leHRwbHVzIC0xLjAwMDAwMDEyICAtPiAgLTEuMDAwMDAwMTEKLQotLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uCi1uZXh0cDA0MSBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OCAgLT4gICAxLjAwMDAwMDExCi1uZXh0cDA0MiBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDExCi1uZXh0cDA0MyBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMCAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0NCBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMSAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0NSBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0NiBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0NyBuZXh0cGx1cyAgMS4wMDAwMDAxMTA1MiAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0OCBuZXh0cGx1cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDEyCi1uZXh0cDA0OSBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OCAgLT4gIC0xLjAwMDAwMDEwCi1uZXh0cDA1MCBuZXh0cGx1cyAtMS4wMDAwMDAxMDk5OSAgLT4gIC0xLjAwMDAwMDEwCi1uZXh0cDA1MSBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEwCi1uZXh0cDA1MiBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMSAgLT4gIC0xLjAwMDAwMDExCi1uZXh0cDA1MyBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCi1uZXh0cDA1NCBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExCi1uZXh0cDA1NSBuZXh0cGx1cyAtMS4wMDAwMDAxMTA1MiAgLT4gIC0xLjAwMDAwMDExCi1uZXh0cDA1NiBuZXh0cGx1cyAtMS4wMDAwMDAxMTU1MiAgLT4gIC0xLjAwMDAwMDExCi0tLSB1bHRyYS10aW55IGlucHV0cwotbmV4dHAwNjAgbmV4dHBsdXMgIDFFLTk5OTk5ICAgICAgIC0+ICAgMUUtMzkxCi1uZXh0cDA2MSBuZXh0cGx1cyAgMUUtOTk5OTk5OTk5ICAgLT4gICAxRS0zOTEKLW5leHRwMDYyIG5leHRwbHVzICAxRS0zOTEgICAgICAgICAtPiAgIDJFLTM5MQotbmV4dHAwNjMgbmV4dHBsdXMgLTFFLTk5OTk5ICAgICAgIC0+ICAtMEUtMzkxCi1uZXh0cDA2NCBuZXh0cGx1cyAtMUUtOTk5OTk5OTk5ICAgLT4gIC0wRS0zOTEKLW5leHRwMDY1IG5leHRwbHVzIC0xRS0zOTEgICAgICAgICAtPiAgLTBFLTM5MQotCi0tLSBaZXJvcwotbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTEKLW5leHRwMTAxIG5leHRwbHVzICAwLjAwICAgICAgICAtPiAgMUUtMzkxCi1uZXh0cDEwMiBuZXh0cGx1cyAgMEUtMzAwICAgICAgLT4gIDFFLTM5MQotbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTEKLW5leHRwMTA0IG5leHRwbHVzICAwRSszMDAwMCAgICAtPiAgMUUtMzkxCi1uZXh0cDEwNSBuZXh0cGx1cyAtMCAgICAgICAgICAgLT4gIDFFLTM5MQotbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTEKLW5leHRwMTA3IG5leHRwbHVzIC0wRS0zMDAgICAgICAtPiAgMUUtMzkxCi1uZXh0cDEwOCBuZXh0cGx1cyAtMEUrMzAwICAgICAgLT4gIDFFLTM5MQotbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTEKLQotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLXByZWNpc2lvbjogOQotLS0gc3BlY2lhbHMKLW5leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQotbmV4dHAxNTEgbmV4dHBsdXMgIC1JbmYgICAgLT4gLTkuOTk5OTk5OTlFKzk5OQotbmV4dHAxNTIgbmV4dHBsdXMgICBOYU4gICAgLT4gIE5hTgotbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0cDE1NCBuZXh0cGx1cyAgIE5hTjc3ICAtPiAgTmFONzcKLW5leHRwMTU1IG5leHRwbHVzICBzTmFOODggIC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTgotbmV4dHAxNTcgbmV4dHBsdXMgLXNOYU4gICAgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0cDE1OCBuZXh0cGx1cyAgLU5hTjc3ICAtPiAtTmFONzcKLW5leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotbmV4dHAxNzAgbmV4dHBsdXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IEluZmluaXR5Ci1uZXh0cDE3MSBuZXh0cGx1cyAgOS45OTk5OTk5OEUrOTk5ICAgLT4gOS45OTk5OTk5OUUrOTk5Ci1uZXh0cDE3MiBuZXh0cGx1cyAgMUUtOTk5ICAgICAgICAgICAgLT4gMS4wMDAwMDAwMUUtOTk5Ci1uZXh0cDE3MyBuZXh0cGx1cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMUUtOTk5Ci1uZXh0cDE3NCBuZXh0cGx1cyAgOUUtMTAwNyAgICAgICAgICAgLT4gMS4wRS0xMDA2Ci1uZXh0cDE3NSBuZXh0cGx1cyAgOS45RS0xMDA2ICAgICAgICAgLT4gMS4wMEUtMTAwNQotbmV4dHAxNzYgbmV4dHBsdXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDEuMDAwMDBFLTEwMDIKLW5leHRwMTc3IG5leHRwbHVzICA5Ljk5OTk5OTlFLTEwMDAgICAtPiAxLjAwMDAwMDAwRS05OTkKLW5leHRwMTc4IG5leHRwbHVzICA5Ljk5OTk5OThFLTEwMDAgICAtPiA5Ljk5OTk5OTlFLTEwMDAKLW5leHRwMTc5IG5leHRwbHVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDAKLW5leHRwMTgwIG5leHRwbHVzICAwRS0xMDA3ICAgICAgICAgICAtPiAxRS0xMDA3Ci1uZXh0cDE4MSBuZXh0cGx1cyAgMUUtMTAwNyAgICAgICAgICAgLT4gMkUtMTAwNwotbmV4dHAxODIgbmV4dHBsdXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDNFLTEwMDcKLQotbmV4dHAxODMgbmV4dHBsdXMgIC0wRS0xMDA3ICAgICAgICAgIC0+ICAxRS0xMDA3Ci1uZXh0cDE4NCBuZXh0cGx1cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTBFLTEwMDcKLW5leHRwMTg1IG5leHRwbHVzICAtMkUtMTAwNyAgICAgICAgICAtPiAtMUUtMTAwNwotbmV4dHAxODYgbmV4dHBsdXMgIC0xMEUtMTAwNyAgICAgICAgIC0+IC05RS0xMDA3Ci1uZXh0cDE4NyBuZXh0cGx1cyAgLTEwMEUtMTAwNyAgICAgICAgLT4gLTkuOUUtMTAwNgotbmV4dHAxODggbmV4dHBsdXMgIC0xMDAwMDBFLTEwMDcgICAgIC0+IC05Ljk5OTlFLTEwMDMKLW5leHRwMTg5IG5leHRwbHVzICAtMS4wMDAwRS05OTkgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwCi1uZXh0cDE5MCBuZXh0cGx1cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTkuOTk5OTk5OUUtMTAwMAotbmV4dHAxOTEgbmV4dHBsdXMgIC0xRS05OTkgICAgICAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDAKLW5leHRwMTkyIG5leHRwbHVzICAtOS45OTk5OTk5OEUrOTk5ICAtPiAtOS45OTk5OTk5N0UrOTk5Ci1uZXh0cDE5MyBuZXh0cGx1cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OThFKzk5OQotCi0tLSBOdWxsIHRlc3RzCi1uZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gbmV4dHBsdXMuZGVjVGVzdCAtLSBkZWNpbWFsIG5leHQgdGhhdCBpcyBncmVhdGVyIFs3NTRyIG5leHR1cF0gICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KK25leHRwMDAxIG5leHRwbHVzICAwLjk5OTk5OTk5NSAtPiAgIDAuOTk5OTk5OTk2DQorbmV4dHAwMDIgbmV4dHBsdXMgIDAuOTk5OTk5OTk2IC0+ICAgMC45OTk5OTk5OTcNCituZXh0cDAwMyBuZXh0cGx1cyAgMC45OTk5OTk5OTcgLT4gICAwLjk5OTk5OTk5OA0KK25leHRwMDA0IG5leHRwbHVzICAwLjk5OTk5OTk5OCAtPiAgIDAuOTk5OTk5OTk5DQorbmV4dHAwMDUgbmV4dHBsdXMgIDAuOTk5OTk5OTk5IC0+ICAgMS4wMDAwMDAwMA0KK25leHRwMDA2IG5leHRwbHVzICAxLjAwMDAwMDAwICAtPiAgIDEuMDAwMDAwMDENCituZXh0cDAwNyBuZXh0cGx1cyAgMS4wICAgICAgICAgLT4gICAxLjAwMDAwMDAxDQorbmV4dHAwMDggbmV4dHBsdXMgIDEgICAgICAgICAgIC0+ICAgMS4wMDAwMDAwMQ0KK25leHRwMDA5IG5leHRwbHVzICAxLjAwMDAwMDAxICAtPiAgIDEuMDAwMDAwMDINCituZXh0cDAxMCBuZXh0cGx1cyAgMS4wMDAwMDAwMiAgLT4gICAxLjAwMDAwMDAzDQorbmV4dHAwMTEgbmV4dHBsdXMgIDEuMDAwMDAwMDMgIC0+ICAgMS4wMDAwMDAwNA0KK25leHRwMDEyIG5leHRwbHVzICAxLjAwMDAwMDA0ICAtPiAgIDEuMDAwMDAwMDUNCituZXh0cDAxMyBuZXh0cGx1cyAgMS4wMDAwMDAwNSAgLT4gICAxLjAwMDAwMDA2DQorbmV4dHAwMTQgbmV4dHBsdXMgIDEuMDAwMDAwMDYgIC0+ICAgMS4wMDAwMDAwNw0KK25leHRwMDE1IG5leHRwbHVzICAxLjAwMDAwMDA3ICAtPiAgIDEuMDAwMDAwMDgNCituZXh0cDAxNiBuZXh0cGx1cyAgMS4wMDAwMDAwOCAgLT4gICAxLjAwMDAwMDA5DQorbmV4dHAwMTcgbmV4dHBsdXMgIDEuMDAwMDAwMDkgIC0+ICAgMS4wMDAwMDAxMA0KK25leHRwMDE4IG5leHRwbHVzICAxLjAwMDAwMDEwICAtPiAgIDEuMDAwMDAwMTENCituZXh0cDAxOSBuZXh0cGx1cyAgMS4wMDAwMDAxMSAgLT4gICAxLjAwMDAwMDEyDQorDQorbmV4dHAwMjEgbmV4dHBsdXMgLTAuOTk5OTk5OTk1IC0+ICAtMC45OTk5OTk5OTQNCituZXh0cDAyMiBuZXh0cGx1cyAtMC45OTk5OTk5OTYgLT4gIC0wLjk5OTk5OTk5NQ0KK25leHRwMDIzIG5leHRwbHVzIC0wLjk5OTk5OTk5NyAtPiAgLTAuOTk5OTk5OTk2DQorbmV4dHAwMjQgbmV4dHBsdXMgLTAuOTk5OTk5OTk4IC0+ICAtMC45OTk5OTk5OTcNCituZXh0cDAyNSBuZXh0cGx1cyAtMC45OTk5OTk5OTkgLT4gIC0wLjk5OTk5OTk5OA0KK25leHRwMDI2IG5leHRwbHVzIC0xLjAwMDAwMDAwICAtPiAgLTAuOTk5OTk5OTk5DQorbmV4dHAwMjcgbmV4dHBsdXMgLTEuMCAgICAgICAgIC0+ICAtMC45OTk5OTk5OTkNCituZXh0cDAyOCBuZXh0cGx1cyAtMSAgICAgICAgICAgLT4gIC0wLjk5OTk5OTk5OQ0KK25leHRwMDI5IG5leHRwbHVzIC0xLjAwMDAwMDAxICAtPiAgLTEuMDAwMDAwMDANCituZXh0cDAzMCBuZXh0cGx1cyAtMS4wMDAwMDAwMiAgLT4gIC0xLjAwMDAwMDAxDQorbmV4dHAwMzEgbmV4dHBsdXMgLTEuMDAwMDAwMDMgIC0+ICAtMS4wMDAwMDAwMg0KK25leHRwMDMyIG5leHRwbHVzIC0xLjAwMDAwMDA0ICAtPiAgLTEuMDAwMDAwMDMNCituZXh0cDAzMyBuZXh0cGx1cyAtMS4wMDAwMDAwNSAgLT4gIC0xLjAwMDAwMDA0DQorbmV4dHAwMzQgbmV4dHBsdXMgLTEuMDAwMDAwMDYgIC0+ICAtMS4wMDAwMDAwNQ0KK25leHRwMDM1IG5leHRwbHVzIC0xLjAwMDAwMDA3ICAtPiAgLTEuMDAwMDAwMDYNCituZXh0cDAzNiBuZXh0cGx1cyAtMS4wMDAwMDAwOCAgLT4gIC0xLjAwMDAwMDA3DQorbmV4dHAwMzcgbmV4dHBsdXMgLTEuMDAwMDAwMDkgIC0+ICAtMS4wMDAwMDAwOA0KK25leHRwMDM4IG5leHRwbHVzIC0xLjAwMDAwMDEwICAtPiAgLTEuMDAwMDAwMDkNCituZXh0cDAzOSBuZXh0cGx1cyAtMS4wMDAwMDAxMSAgLT4gIC0xLjAwMDAwMDEwDQorbmV4dHAwNDAgbmV4dHBsdXMgLTEuMDAwMDAwMTIgIC0+ICAtMS4wMDAwMDAxMQ0KKw0KKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbg0KK25leHRwMDQxIG5leHRwbHVzICAxLjAwMDAwMDEwOTk4ICAtPiAgIDEuMDAwMDAwMTENCituZXh0cDA0MiBuZXh0cGx1cyAgMS4wMDAwMDAxMDk5OSAgLT4gICAxLjAwMDAwMDExDQorbmV4dHAwNDMgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDAgIC0+ICAgMS4wMDAwMDAxMg0KK25leHRwMDQ0IG5leHRwbHVzICAxLjAwMDAwMDExMDAxICAtPiAgIDEuMDAwMDAwMTINCituZXh0cDA0NSBuZXh0cGx1cyAgMS4wMDAwMDAxMTAwMiAgLT4gICAxLjAwMDAwMDEyDQorbmV4dHAwNDYgbmV4dHBsdXMgIDEuMDAwMDAwMTEwMDIgIC0+ICAgMS4wMDAwMDAxMg0KK25leHRwMDQ3IG5leHRwbHVzICAxLjAwMDAwMDExMDUyICAtPiAgIDEuMDAwMDAwMTINCituZXh0cDA0OCBuZXh0cGx1cyAgMS4wMDAwMDAxMTU1MiAgLT4gICAxLjAwMDAwMDEyDQorbmV4dHAwNDkgbmV4dHBsdXMgLTEuMDAwMDAwMTA5OTggIC0+ICAtMS4wMDAwMDAxMA0KK25leHRwMDUwIG5leHRwbHVzIC0xLjAwMDAwMDEwOTk5ICAtPiAgLTEuMDAwMDAwMTANCituZXh0cDA1MSBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMCAgLT4gIC0xLjAwMDAwMDEwDQorbmV4dHAwNTIgbmV4dHBsdXMgLTEuMDAwMDAwMTEwMDEgIC0+ICAtMS4wMDAwMDAxMQ0KK25leHRwMDUzIG5leHRwbHVzIC0xLjAwMDAwMDExMDAyICAtPiAgLTEuMDAwMDAwMTENCituZXh0cDA1NCBuZXh0cGx1cyAtMS4wMDAwMDAxMTAwMiAgLT4gIC0xLjAwMDAwMDExDQorbmV4dHAwNTUgbmV4dHBsdXMgLTEuMDAwMDAwMTEwNTIgIC0+ICAtMS4wMDAwMDAxMQ0KK25leHRwMDU2IG5leHRwbHVzIC0xLjAwMDAwMDExNTUyICAtPiAgLTEuMDAwMDAwMTENCistLSB1bHRyYS10aW55IGlucHV0cw0KK25leHRwMDYwIG5leHRwbHVzICAxRS05OTk5OSAgICAgICAtPiAgIDFFLTM5MQ0KK25leHRwMDYxIG5leHRwbHVzICAxRS05OTk5OTk5OTkgICAtPiAgIDFFLTM5MQ0KK25leHRwMDYyIG5leHRwbHVzICAxRS0zOTEgICAgICAgICAtPiAgIDJFLTM5MQ0KK25leHRwMDYzIG5leHRwbHVzIC0xRS05OTk5OSAgICAgICAtPiAgLTBFLTM5MQ0KK25leHRwMDY0IG5leHRwbHVzIC0xRS05OTk5OTk5OTkgICAtPiAgLTBFLTM5MQ0KK25leHRwMDY1IG5leHRwbHVzIC0xRS0zOTEgICAgICAgICAtPiAgLTBFLTM5MQ0KKw0KKy0tIFplcm9zDQorbmV4dHAxMDAgbmV4dHBsdXMgIDAgICAgICAgICAgIC0+ICAxRS0zOTENCituZXh0cDEwMSBuZXh0cGx1cyAgMC4wMCAgICAgICAgLT4gIDFFLTM5MQ0KK25leHRwMTAyIG5leHRwbHVzICAwRS0zMDAgICAgICAtPiAgMUUtMzkxDQorbmV4dHAxMDMgbmV4dHBsdXMgIDBFKzMwMCAgICAgIC0+ICAxRS0zOTENCituZXh0cDEwNCBuZXh0cGx1cyAgMEUrMzAwMDAgICAgLT4gIDFFLTM5MQ0KK25leHRwMTA1IG5leHRwbHVzIC0wICAgICAgICAgICAtPiAgMUUtMzkxDQorbmV4dHAxMDYgbmV4dHBsdXMgLTAuMDAgICAgICAgIC0+ICAxRS0zOTENCituZXh0cDEwNyBuZXh0cGx1cyAtMEUtMzAwICAgICAgLT4gIDFFLTM5MQ0KK25leHRwMTA4IG5leHRwbHVzIC0wRSszMDAgICAgICAtPiAgMUUtMzkxDQorbmV4dHAxMDkgbmV4dHBsdXMgLTBFKzMwMDAwICAgIC0+ICAxRS0zOTENCisNCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCitwcmVjaXNpb246IDkNCistLSBzcGVjaWFscw0KK25leHRwMTUwIG5leHRwbHVzICAgSW5mICAgIC0+ICBJbmZpbml0eQ0KK25leHRwMTUxIG5leHRwbHVzICAtSW5mICAgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCituZXh0cDE1MiBuZXh0cGx1cyAgIE5hTiAgICAtPiAgTmFODQorbmV4dHAxNTMgbmV4dHBsdXMgIHNOYU4gICAgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHAxNTQgbmV4dHBsdXMgICBOYU43NyAgLT4gIE5hTjc3DQorbmV4dHAxNTUgbmV4dHBsdXMgIHNOYU44OCAgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHAxNTYgbmV4dHBsdXMgIC1OYU4gICAgLT4gLU5hTg0KK25leHRwMTU3IG5leHRwbHVzIC1zTmFOICAgIC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHRwMTU4IG5leHRwbHVzICAtTmFONzcgIC0+IC1OYU43Nw0KK25leHRwMTU5IG5leHRwbHVzIC1zTmFOODggIC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55LCBzdWJub3JtYWxzDQorbmV4dHAxNzAgbmV4dHBsdXMgIDkuOTk5OTk5OTlFKzk5OSAgIC0+IEluZmluaXR5DQorbmV4dHAxNzEgbmV4dHBsdXMgIDkuOTk5OTk5OThFKzk5OSAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK25leHRwMTcyIG5leHRwbHVzICAxRS05OTkgICAgICAgICAgICAtPiAxLjAwMDAwMDAxRS05OTkNCituZXh0cDE3MyBuZXh0cGx1cyAgMS4wMDAwMDAwMEUtOTk5ICAgLT4gMS4wMDAwMDAwMUUtOTk5DQorbmV4dHAxNzQgbmV4dHBsdXMgIDlFLTEwMDcgICAgICAgICAgIC0+IDEuMEUtMTAwNg0KK25leHRwMTc1IG5leHRwbHVzICA5LjlFLTEwMDYgICAgICAgICAtPiAxLjAwRS0xMDA1DQorbmV4dHAxNzYgbmV4dHBsdXMgIDkuOTk5OUUtMTAwMyAgICAgIC0+IDEuMDAwMDBFLTEwMDINCituZXh0cDE3NyBuZXh0cGx1cyAgOS45OTk5OTk5RS0xMDAwICAgLT4gMS4wMDAwMDAwMEUtOTk5DQorbmV4dHAxNzggbmV4dHBsdXMgIDkuOTk5OTk5OEUtMTAwMCAgIC0+IDkuOTk5OTk5OUUtMTAwMA0KK25leHRwMTc5IG5leHRwbHVzICA5Ljk5OTk5OTdFLTEwMDAgICAtPiA5Ljk5OTk5OThFLTEwMDANCituZXh0cDE4MCBuZXh0cGx1cyAgMEUtMTAwNyAgICAgICAgICAgLT4gMUUtMTAwNw0KK25leHRwMTgxIG5leHRwbHVzICAxRS0xMDA3ICAgICAgICAgICAtPiAyRS0xMDA3DQorbmV4dHAxODIgbmV4dHBsdXMgIDJFLTEwMDcgICAgICAgICAgIC0+IDNFLTEwMDcNCisNCituZXh0cDE4MyBuZXh0cGx1cyAgLTBFLTEwMDcgICAgICAgICAgLT4gIDFFLTEwMDcNCituZXh0cDE4NCBuZXh0cGx1cyAgLTFFLTEwMDcgICAgICAgICAgLT4gLTBFLTEwMDcNCituZXh0cDE4NSBuZXh0cGx1cyAgLTJFLTEwMDcgICAgICAgICAgLT4gLTFFLTEwMDcNCituZXh0cDE4NiBuZXh0cGx1cyAgLTEwRS0xMDA3ICAgICAgICAgLT4gLTlFLTEwMDcNCituZXh0cDE4NyBuZXh0cGx1cyAgLTEwMEUtMTAwNyAgICAgICAgLT4gLTkuOUUtMTAwNg0KK25leHRwMTg4IG5leHRwbHVzICAtMTAwMDAwRS0xMDA3ICAgICAtPiAtOS45OTk5RS0xMDAzDQorbmV4dHAxODkgbmV4dHBsdXMgIC0xLjAwMDBFLTk5OSAgICAgIC0+IC05Ljk5OTk5OTlFLTEwMDANCituZXh0cDE5MCBuZXh0cGx1cyAgLTEuMDAwMDAwMDBFLTk5OSAgLT4gLTkuOTk5OTk5OUUtMTAwMA0KK25leHRwMTkxIG5leHRwbHVzICAtMUUtOTk5ICAgICAgICAgICAtPiAtOS45OTk5OTk5RS0xMDAwDQorbmV4dHAxOTIgbmV4dHBsdXMgIC05Ljk5OTk5OTk4RSs5OTkgIC0+IC05Ljk5OTk5OTk3RSs5OTkNCituZXh0cDE5MyBuZXh0cGx1cyAgLTkuOTk5OTk5OTlFKzk5OSAgLT4gLTkuOTk5OTk5OThFKzk5OQ0KKw0KKy0tIE51bGwgdGVzdHMNCituZXh0cDkwMCBuZXh0cGx1cyAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL25leHR0b3dhcmQuZGVjVGVzdAppbmRleCA1NjIzODVhLi5kYTI2ZjY1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbmV4dHRvd2FyZC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9uZXh0dG93YXJkLmRlY1Rlc3QKQEAgLTEsNDI2ICsxLDQyNiBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBuZXh0dG93YXJkLmRlY1Rlc3QgLS0gZGVjaW1hbCBuZXh0IHRvd2FyZCByaHMgWzc1NHIgbmV4dGFmdGVyXSAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1wcmVjaXNpb246ICAgOQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiAzODQKLW1pbmV4cG9uZW50OiAtMzgzCi0KLS0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcwotbmV4dHQwMDEgbmV4dHRvd2FyZCAgIDEwICAgIDEwICAgLT4gIDEwCi1uZXh0dDAwMiBuZXh0dG93YXJkICAtMTAgICAtMTAgICAtPiAtMTAKLW5leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAxCi1uZXh0dDAwNCBuZXh0dG93YXJkICAgMSAgICAtMTAgICAtPiAgMC45OTk5OTk5OTkKLW5leHR0MDA1IG5leHR0b3dhcmQgIC0xICAgICAxMCAgIC0+IC0wLjk5OTk5OTk5OQotbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDEKLW5leHR0MDA3IG5leHR0b3dhcmQgICAwICAgICAxMCAgIC0+ICAxRS0zOTEgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MDA4IG5leHR0b3dhcmQgICAwICAgIC0xMCAgIC0+IC0xRS0zOTEgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MDEwIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSszODQgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLQotLS0tLS0tLSBsaHM9cmhzCi0tLSBmaW5pdGVzCi1uZXh0dDEwMSBuZXh0dG93YXJkICAgICAgICAgIDcgICAgICAgNyAtPiAgNwotbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcKLW5leHR0MTAzIG5leHR0b3dhcmQgICAgICAgICA3NSAgICAgIDc1IC0+ICA3NQotbmV4dHQxMDQgbmV4dHRvd2FyZCAgICAgICAgLTc1ICAgICAtNzUgLT4gLTc1Ci1uZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MAotbmV4dHQxMDYgbmV4dHRvd2FyZCAgICAgIC03LjUwICAgLTcuNTAgLT4gLTcuNTAKLW5leHR0MTA3IG5leHR0b3dhcmQgICAgICAgNy41MDAgNy41MDAwIC0+ICA3LjUwMAotbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwCi0KLS0tIHplcm9zCi1uZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMAotbmV4dHQxMTIgbmV4dHRvd2FyZCAgICAgICAgIC0wICAgICAgLTAgLT4gLTAKLW5leHR0MTEzIG5leHR0b3dhcmQgICAgICAgMEUrNCAgICAgICAwIC0+ICAwRSs0Ci1uZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNAotbmV4dHQxMTUgbmV4dHRvd2FyZCAgICAgMC4wMDAwIDAuMDAwMDAgLT4gIDAuMDAwMAotbmV4dHQxMTYgbmV4dHRvd2FyZCAgICAtMC4wMDAwICAgLTAuMDAgLT4gLTAuMDAwMAotbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQotbmV4dHQxMTggbmV4dHRvd2FyZCAgICAgLTBFLTE0MSAgIC0wMDAgLT4gLTBFLTE0MQotCi0tLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cwotbmV4dHQxMjEgbmV4dHRvd2FyZCAgIDI2ODI2ODI2OCAgICAyNjgyNjgyNjggLT4gICAyNjgyNjgyNjgKLW5leHR0MTIyIG5leHR0b3dhcmQgIC0yNjgyNjgyNjggICAtMjY4MjY4MjY4IC0+ICAtMjY4MjY4MjY4Ci1uZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNAotbmV4dHQxMjQgbmV4dHRvd2FyZCAgLTEzNDEzNDEzNCAgIC0xMzQxMzQxMzQgLT4gIC0xMzQxMzQxMzQKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLW5leHR0MTMxIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzM4NCAgOS45OTk5OTk5OUUrMzg0ICAgLT4gICA5Ljk5OTk5OTk5RSszODQKLW5leHR0MTMyIG5leHR0b3dhcmQgIDFFLTM4MyAgICAgICAgICAgMUUtMzgzICAgICAgICAgICAgLT4gICAxRS0zODMKLW5leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwRS0zODMKLW5leHR0MTM0IG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgICAgMUUtMzkxICAgICAgICAgICAgLT4gICAxRS0zOTEKLQotbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5MSAgICAgICAgICAtMUUtMzkxICAgICAgICAgICAtPiAgLTFFLTM5MQotbmV4dHQxMzYgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTM4MyAtMS4wMDAwMDAwMEUtMzgzICAtPiAgLTEuMDAwMDAwMDBFLTM4MwotbmV4dHQxMzcgbmV4dHRvd2FyZCAgLTFFLTM4MyAgICAgICAgICAtMUUtMzgzICAgICAgICAgICAtPiAgLTFFLTM4MwotbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTlFKzM4NAotCi0tLS0tLS0tIGxoczxyaHMKLW5leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYKLW5leHR0MjAyIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk2IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTcKLW5leHR0MjAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTgKLW5leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKLW5leHR0MjA1IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5IEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMAotbmV4dHQyMDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAxCi1uZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDEKLW5leHR0MjA4IG5leHR0b3dhcmQgIDEgICAgICAgICAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQotbmV4dHQyMDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyCi1uZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMKLW5leHR0MjExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNAotbmV4dHQyMTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1Ci1uZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYKLW5leHR0MjE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAwNwotbmV4dHQyMTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4Ci1uZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkKLW5leHR0MjE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAotbmV4dHQyMTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCi1uZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKLQotbmV4dHQyMjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NAotbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NQotbmV4dHQyMjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTcgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NgotbmV4dHQyMjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NwotbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OAotbmV4dHQyMjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMCAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQotbmV4dHQyMjcgbmV4dHRvd2FyZCAtMS4wICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQotbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQotbmV4dHQyMjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMSAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAwCi1uZXh0dDIzMCBuZXh0dG93YXJkIC0xLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKLW5leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMgotbmV4dHQyMzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzCi1uZXh0dDIzMyBuZXh0dG93YXJkIC0xLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQKLW5leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQotbmV4dHQyMzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNyAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2Ci1uZXh0dDIzNiBuZXh0dG93YXJkIC0xLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcKLW5leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOAotbmV4dHQyMzggbmV4dHRvd2FyZCAtMS4wMDAwMDAxMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5Ci1uZXh0dDIzOSBuZXh0dG93YXJkIC0xLjAwMDAwMDExICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKLW5leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQotCi0tLSBpbnB1dCBvcGVyYW5kIGlzID5wcmVjaXNpb24KLW5leHR0MjQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQotbmV4dHQyNDIgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OSAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCi1uZXh0dDI0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKLW5leHR0MjQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgotbmV4dHQyNDUgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCi1uZXh0dDI0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTIKLW5leHR0MjQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMgotbmV4dHQyNDggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTU1MiAgSW5maW5pdHkgLT4gICAxLjAwMDAwMDEyCi1uZXh0dDI0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTAKLW5leHR0MjUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAotbmV4dHQyNTEgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMCAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEwCi1uZXh0dDI1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKLW5leHR0MjUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQotbmV4dHQyNTQgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExCi1uZXh0dDI1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICBJbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKLW5leHR0MjU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQotLS0gdWx0cmEtdGlueSBpbnB1dHMKLW5leHR0MjYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAgMUUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDI2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQyNjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgSW5maW5pdHkgLT4gICAyRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MjYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLW5leHR0MjY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLW5leHR0MjY1IG5leHR0b3dhcmQgLTFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLQotLS0gWmVyb3MKLW5leHR0MzAwIG5leHR0b3dhcmQgIDAgICAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDMwMSBuZXh0dG93YXJkICAwLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzAzIG5leHR0b3dhcmQgIDBFKzMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDMwNCBuZXh0dG93YXJkICAwRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzA2IG5leHR0b3dhcmQgLTAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDMwNyBuZXh0dG93YXJkIC0wRS0zMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzA5IG5leHR0b3dhcmQgLTBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHNwZWNpYWxzCi1uZXh0dDM1MCBuZXh0dG93YXJkICAgSW5mICAgIEluZmluaXR5IC0+ICBJbmZpbml0eQotbmV4dHQzNTEgbmV4dHRvd2FyZCAgLUluZiAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OUUrMzg0Ci1uZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4KLW5leHR0MzUzIG5leHR0b3dhcmQgIHNOYU4gICAgSW5maW5pdHkgLT4gIE5hTiAgIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDM1NCBuZXh0dG93YXJkICAgTmFONzcgIEluZmluaXR5IC0+ICBOYU43NwotbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24KLW5leHR0MzU2IG5leHR0b3dhcmQgIC1OYU4gICAgSW5maW5pdHkgLT4gLU5hTgotbmV4dHQzNTcgbmV4dHRvd2FyZCAtc05hTiAgICBJbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3Ci1uZXh0dDM1OSBuZXh0dG93YXJkIC1zTmFOODggIEluZmluaXR5IC0+IC1OYU44OCBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscwotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLW5leHR0MzcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgIEluZmluaXR5IC0+IEluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzcxIG5leHR0b3dhcmQgIDkuOTk5OTk5OThFKzk5OSAgIEluZmluaXR5IC0+IDkuOTk5OTk5OTlFKzk5OQotbmV4dHQzNzIgbmV4dHRvd2FyZCAgMUUtOTk5ICAgICAgICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMUUtOTk5Ci1uZXh0dDM3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkKLW5leHR0Mzc0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk5RS05OTkgIEluZmluaXR5IC0+IDEuMDAwMDAwMDBFLTk5OQotbmV4dHQzNzUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OUUtOTk5ICAgSW5maW5pdHkgLT4gMS4wMDAwMDAwMEUtOTk5Ci1uZXh0dDM3NiBuZXh0dG93YXJkICA5RS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxLjBFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0Mzc3IG5leHR0b3dhcmQgIDkuOUUtMTAwNiAgICAgICAgIEluZmluaXR5IC0+IDEuMDBFLTEwMDUgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzNzggbmV4dHRvd2FyZCAgOS45OTk5RS0xMDAzICAgICAgSW5maW5pdHkgLT4gMS4wMDAwMEUtMTAwMiAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDM3OSBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzgwIG5leHR0b3dhcmQgIDkuOTk5OTk5N0UtMTAwMCAgIEluZmluaXR5IC0+IDkuOTk5OTk5OEUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzODEgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDM4MiBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAyRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzgzIG5leHR0b3dhcmQgIDJFLTEwMDcgICAgICAgICAgIEluZmluaXR5IC0+IDNFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotCi1uZXh0dDM4NSBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0Mzg2IG5leHR0b3dhcmQgIC0xRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+IC0wRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1uZXh0dDM4NyBuZXh0dG93YXJkICAtMkUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0Mzg4IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgIEluZmluaXR5IC0+IC05RS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzODkgbmV4dHRvd2FyZCAgLTEwMEUtMTAwNyAgICAgICAgSW5maW5pdHkgLT4gLTkuOUUtMTAwNiAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDM5MCBuZXh0dG93YXJkICAtMTAwMDAwRS0xMDA3ICAgICBJbmZpbml0eSAtPiAtOS45OTk5RS0xMDAzICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0MzkxIG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDM5MiBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQzOTMgbmV4dHRvd2FyZCAgLTFFLTk5OSAgICAgICAgICAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0Mzk0IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk3RSs5OTkKLW5leHR0Mzk1IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk5RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk4RSs5OTkKLQotLS0tLS0tLSBsaHM+cmhzCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk0Ci1uZXh0dDQwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTUKLW5leHR0NDAzIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5NgotbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3Ci1uZXh0dDQwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTgKLW5leHR0NDA2IG5leHR0b3dhcmQgIDEuMDAwMDAwMDAgICAtSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OQotbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5Ci1uZXh0dDQwOCBuZXh0dG93YXJkICAxICAgICAgICAgICAgLUluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkKLW5leHR0NDA5IG5leHR0b3dhcmQgIDEuMDAwMDAwMDEgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAwCi1uZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQotbmV4dHQ0MTEgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDIKLW5leHR0NDEyIG5leHR0b3dhcmQgIDEuMDAwMDAwMDQgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAzCi1uZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNAotbmV4dHQ0MTQgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDUKLW5leHR0NDE1IG5leHR0b3dhcmQgIDEuMDAwMDAwMDcgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA2Ci1uZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNwotbmV4dHQ0MTcgbmV4dHRvd2FyZCAgMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDgKLW5leHR0NDE4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA5Ci1uZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAotbmV4dHQ0MjAgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKLQotbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2Ci1uZXh0dDQyMiBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NiAgLUluZmluaXR5IC0+ICAtMC45OTk5OTk5OTcKLW5leHR0NDIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3ICAtSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OAotbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5Ci1uZXh0dDQyNSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OSAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMAotbmV4dHQ0MjYgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDEKLW5leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxCi1uZXh0dDQyOCBuZXh0dG93YXJkIC0xICAgICAgICAgICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQotbmV4dHQ0MjkgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDIKLW5leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzCi1uZXh0dDQzMSBuZXh0dG93YXJkIC0xLjAwMDAwMDAzICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNAotbmV4dHQ0MzIgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDUKLW5leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2Ci1uZXh0dDQzNCBuZXh0dG93YXJkIC0xLjAwMDAwMDA2ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNwotbmV4dHQ0MzUgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDgKLW5leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5Ci1uZXh0dDQzNyBuZXh0dG93YXJkIC0xLjAwMDAwMDA5ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMAotbmV4dHQ0MzggbmV4dHRvd2FyZCAtMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKLW5leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCi0KLS0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbgotbmV4dHQ0NDEgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTAKLW5leHR0NDQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwCi1uZXh0dDQ0MyBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMAotbmV4dHQ0NDQgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKLW5leHR0NDQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCi1uZXh0dDQ0NiBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQotbmV4dHQ0NDcgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTEKLW5leHR0NDQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExCi1uZXh0dDQ0OSBuZXh0dG93YXJkIC0xLjAwMDAwMDEwOTk4ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQotbmV4dHQ0NTAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTEKLW5leHR0NDUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCi1uZXh0dDQ1MiBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgotbmV4dHQ0NTMgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKLW5leHR0NDU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyCi1uZXh0dDQ1NSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDUyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMgotbmV4dHQ0NTYgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTIKLS0tIHVsdHJhLXRpbnkgaW5wdXRzCi1uZXh0dDQ2MCBuZXh0dG93YXJkICAxRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1uZXh0dDQ2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1uZXh0dDQ2MiBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1uZXh0dDQ2MyBuZXh0dG93YXJkIC0xRS05OTk5OSAgICAgICAgLUluZmluaXR5IC0+ICAtMUUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ0NjQgbmV4dHRvd2FyZCAtMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NDY1IG5leHR0b3dhcmQgLTFFLTM5MSAgICAgICAgICAtSW5maW5pdHkgLT4gIC0yRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFplcm9zCi1uZXh0dDUwMCBuZXh0dG93YXJkIC0wICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1MDEgbmV4dHRvd2FyZCAgMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDUwMyBuZXh0dG93YXJkIC0wLjAwICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1MDQgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDUwNiBuZXh0dG93YXJkICAwRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1MDcgbmV4dHRvd2FyZCAtMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTA4IG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtMC4wMDAwICAgLT4gLTAuMDAKLQotLS0gc3BlY2lhbHMKLW5leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OUUrMzg0Ci1uZXh0dDU1MSBuZXh0dG93YXJkICAtSW5mICAgICAtSW5maW5pdHkgLT4gLUluZmluaXR5Ci1uZXh0dDU1MiBuZXh0dG93YXJkICAgTmFOICAgICAtSW5maW5pdHkgLT4gIE5hTgotbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ1NTQgbmV4dHRvd2FyZCAgIE5hTjc3ICAgLUluZmluaXR5IC0+ICBOYU43NwotbmV4dHQ1NTUgbmV4dHRvd2FyZCAgc05hTjg4ICAgLUluZmluaXR5IC0+ICBOYU44OCBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4KLW5leHR0NTU3IG5leHR0b3dhcmQgLXNOYU4gICAgIC1JbmZpbml0eSAtPiAtTmFOICAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0NTU4IG5leHR0b3dhcmQgIC1OYU43NyAgIC1JbmZpbml0eSAtPiAtTmFONzcKLW5leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTm1heCwgTm1pbiwgTnRpbnksIHN1Ym5vcm1hbHMKLW1heEV4cG9uZW50OiA5OTkKLW1pbmV4cG9uZW50OiAtOTk5Ci1uZXh0dDU3MCBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSs5OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OThFKzk5OQotbmV4dHQ1NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk3RSs5OTkKLW5leHR0NTcyIG5leHR0b3dhcmQgIDFFLTk5OSAgICAgICAgICAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDU3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1NzQgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiA4RS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTc1IG5leHR0b3dhcmQgIDkuOUUtMTAwNiAgICAgICAgICAtSW5maW5pdHkgLT4gOS44RS0xMDA2ICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDU3NiBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OEUtMTAwMyAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTc4IG5leHR0b3dhcmQgIDkuOTk5OTk5OEUtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk3RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDU3OSBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5NkUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1ODAgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTgxIG5leHR0b3dhcmQgIDFFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gMEUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLW5leHR0NTgyIG5leHR0b3dhcmQgIDJFLTEwMDcgICAgICAgICAgICAtSW5maW5pdHkgLT4gMUUtMTAwNyAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLW5leHR0NTgzIG5leHR0b3dhcmQgIC0wRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDU4NCBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0yRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1ODUgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtM0UtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTg2IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMUUtMTAwNiAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1uZXh0dDU4NyBuZXh0dG93YXJkICAtMTAwRS0xMDA3ICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAxRS0xMDA1ICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ1ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMUUtMTAwMiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NTg5IG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgICAtSW5maW5pdHkgLT4gLTEuMDAwMDAwMDFFLTk5OQotbmV4dHQ1OTAgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMDAwMUUtOTk5Ci1uZXh0dDU5MSBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkKLW5leHR0NTkyIG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgICAtSW5maW5pdHkgLT4gLTkuOTk5OTk5OTlFKzk5OQotbmV4dHQ1OTMgbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzk5OSAgIC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLQotCi0KLS0tLS0tLS0gU3BlY2lhbHMKLW1heEV4cG9uZW50OiAzODQKLW1pbmV4cG9uZW50OiAtMzgzCi1uZXh0dDc4MCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLW5leHR0NzgxIG5leHR0b3dhcmQgLUluZiAgLTEwMDAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0NzgzIG5leHR0b3dhcmQgLUluZiAgLTAgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0Nzg0IG5leHR0b3dhcmQgLUluZiAgIDAgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0Nzg2IG5leHR0b3dhcmQgLUluZiAgIDEwMDAgIC0+IC05Ljk5OTk5OTk5RSszODQKLW5leHR0Nzg3IG5leHR0b3dhcmQgLTEwMDAgLUluZiAgIC0+IC0xMDAwLjAwMDAxCi1uZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkKLW5leHR0Nzg5IG5leHR0b3dhcmQgLTEgICAgLUluZiAgIC0+IC0xLjAwMDAwMDAxCi1uZXh0dDc5MCBuZXh0dG93YXJkIC0wICAgIC1JbmYgICAtPiAtMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0NzkyIG5leHR0b3dhcmQgIDEgICAgLUluZiAgIC0+ICAwLjk5OTk5OTk5OQotbmV4dHQ3OTMgbmV4dHRvd2FyZCAgMTAwMCAtSW5mICAgLT4gIDk5OS45OTk5OTkKLW5leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQKLQotbmV4dHQ4MDAgbmV4dHRvd2FyZCAgSW5mICAtSW5mICAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDIgbmV4dHRvd2FyZCAgSW5mICAtMSAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDMgbmV4dHRvd2FyZCAgSW5mICAtMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDUgbmV4dHRvd2FyZCAgSW5mICAgMSAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDYgbmV4dHRvd2FyZCAgSW5mICAgMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci1uZXh0dDgwOCBuZXh0dG93YXJkIC0xMDAwICBJbmYgICAtPiAtOTk5Ljk5OTk5OQotbmV4dHQ4MDkgbmV4dHRvd2FyZCAtSW5mICAgSW5mICAgLT4gLTkuOTk5OTk5OTlFKzM4NAotbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5Ci1uZXh0dDgxMSBuZXh0dG93YXJkIC0wICAgICBJbmYgICAtPiAgMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZAotbmV4dHQ4MTIgbmV4dHRvd2FyZCAgMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLW5leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAxCi1uZXh0dDgxNCBuZXh0dG93YXJkICAxMDAwICBJbmYgICAtPiAgMTAwMC4wMDAwMQotbmV4dHQ4MTUgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5Ci0KLW5leHR0ODIxIG5leHR0b3dhcmQgIE5hTiAtSW5mICAgIC0+ICBOYU4KLW5leHR0ODIyIG5leHR0b3dhcmQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLW5leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4KLW5leHR0ODI0IG5leHR0b3dhcmQgIE5hTiAtMCAgICAgIC0+ICBOYU4KLW5leHR0ODI1IG5leHR0b3dhcmQgIE5hTiAgMCAgICAgIC0+ICBOYU4KLW5leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4KLW5leHR0ODI3IG5leHR0b3dhcmQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLW5leHR0ODI4IG5leHR0b3dhcmQgIE5hTiAgSW5mICAgIC0+ICBOYU4KLW5leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODMwIG5leHR0b3dhcmQgLUluZiAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODMxIG5leHR0b3dhcmQgLTEwMDAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODMzIG5leHR0b3dhcmQgLTAgICAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODM0IG5leHR0b3dhcmQgIDAgICAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODM2IG5leHR0b3dhcmQgIDEwMDAgTmFOICAgIC0+ICBOYU4KLW5leHR0ODM3IG5leHR0b3dhcmQgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotbmV4dHQ4NDEgbmV4dHRvd2FyZCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODQyIG5leHR0b3dhcmQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NDQgbmV4dHRvd2FyZCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODQ1IG5leHR0b3dhcmQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NDcgbmV4dHRvd2FyZCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODQ4IG5leHR0b3dhcmQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NTAgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODUxIG5leHR0b3dhcmQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NTMgbmV4dHRvd2FyZCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODU0IG5leHR0b3dhcmQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NTYgbmV4dHRvd2FyZCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODU3IG5leHR0b3dhcmQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1uZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4NTkgbmV4dHRvd2FyZCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotbmV4dHQ4NjEgbmV4dHRvd2FyZCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLW5leHR0ODYyIG5leHR0b3dhcmQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1uZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMwotbmV4dHQ4NjQgbmV4dHRvd2FyZCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLW5leHR0ODY1IG5leHR0b3dhcmQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1uZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONwotbmV4dHQ4NjcgbmV4dHRvd2FyZCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLW5leHR0ODY4IG5leHR0b3dhcmQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1uZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKLW5leHR0ODcxIG5leHR0b3dhcmQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODcyIG5leHR0b3dhcmQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc0IG5leHR0b3dhcmQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc1IG5leHR0b3dhcmQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc3IG5leHR0b3dhcmQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc4IG5leHR0b3dhcmQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODgwIG5leHR0b3dhcmQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODgxIG5leHR0b3dhcmQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLW5leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgotbmV4dHQ4ODMgbmV4dHRvd2FyZCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotbmV4dHQ4ODQgbmV4dHRvd2FyZCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1uZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIE51bGwgdGVzdHMKLW5leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW5leHR0OTAxIG5leHR0b3dhcmQgIyAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gbmV4dHRvd2FyZC5kZWNUZXN0IC0tIGRlY2ltYWwgbmV4dCB0b3dhcmQgcmhzIFs3NTRyIG5leHRhZnRlcl0gICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KKy0tIFNhbml0eSBjaGVjayB3aXRoIGEgc2NhdHRlcmluZyBvZiBudW1lcmljcw0KK25leHR0MDAxIG5leHR0b3dhcmQgICAxMCAgICAxMCAgIC0+ICAxMA0KK25leHR0MDAyIG5leHR0b3dhcmQgIC0xMCAgIC0xMCAgIC0+IC0xMA0KK25leHR0MDAzIG5leHR0b3dhcmQgICAxICAgICAxMCAgIC0+ICAxLjAwMDAwMDAxDQorbmV4dHQwMDQgbmV4dHRvd2FyZCAgIDEgICAgLTEwICAgLT4gIDAuOTk5OTk5OTk5DQorbmV4dHQwMDUgbmV4dHRvd2FyZCAgLTEgICAgIDEwICAgLT4gLTAuOTk5OTk5OTk5DQorbmV4dHQwMDYgbmV4dHRvd2FyZCAgLTEgICAgLTEwICAgLT4gLTEuMDAwMDAwMDENCituZXh0dDAwNyBuZXh0dG93YXJkICAgMCAgICAgMTAgICAtPiAgMUUtMzkxICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQwMDggbmV4dHRvd2FyZCAgIDAgICAgLTEwICAgLT4gLTFFLTM5MSAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MDA5IG5leHR0b3dhcmQgICA5Ljk5OTk5OTk5RSszODQgK0luZmluaXR5IC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDAxMCBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrMzg0IC1JbmZpbml0eSAtPiAtSW5maW5pdHkgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorDQorLS0tLS0tLSBsaHM9cmhzDQorLS0gZmluaXRlcw0KK25leHR0MTAxIG5leHR0b3dhcmQgICAgICAgICAgNyAgICAgICA3IC0+ICA3DQorbmV4dHQxMDIgbmV4dHRvd2FyZCAgICAgICAgIC03ICAgICAgLTcgLT4gLTcNCituZXh0dDEwMyBuZXh0dG93YXJkICAgICAgICAgNzUgICAgICA3NSAtPiAgNzUNCituZXh0dDEwNCBuZXh0dG93YXJkICAgICAgICAtNzUgICAgIC03NSAtPiAtNzUNCituZXh0dDEwNSBuZXh0dG93YXJkICAgICAgIDcuNTAgICAgIDcuNSAtPiAgNy41MA0KK25leHR0MTA2IG5leHR0b3dhcmQgICAgICAtNy41MCAgIC03LjUwIC0+IC03LjUwDQorbmV4dHQxMDcgbmV4dHRvd2FyZCAgICAgICA3LjUwMCA3LjUwMDAgLT4gIDcuNTAwDQorbmV4dHQxMDggbmV4dHRvd2FyZCAgICAgIC03LjUwMCAgIC03LjUgLT4gLTcuNTAwDQorDQorLS0gemVyb3MNCituZXh0dDExMSBuZXh0dG93YXJkICAgICAgICAgIDAgICAgICAgMCAtPiAgMA0KK25leHR0MTEyIG5leHR0b3dhcmQgICAgICAgICAtMCAgICAgIC0wIC0+IC0wDQorbmV4dHQxMTMgbmV4dHRvd2FyZCAgICAgICAwRSs0ICAgICAgIDAgLT4gIDBFKzQNCituZXh0dDExNCBuZXh0dG93YXJkICAgICAgLTBFKzQgICAgICAtMCAtPiAtMEUrNA0KK25leHR0MTE1IG5leHR0b3dhcmQgICAgIDAuMDAwMCAwLjAwMDAwIC0+ICAwLjAwMDANCituZXh0dDExNiBuZXh0dG93YXJkICAgIC0wLjAwMDAgICAtMC4wMCAtPiAtMC4wMDAwDQorbmV4dHQxMTcgbmV4dHRvd2FyZCAgICAgIDBFLTE0MSAgICAgIDAgLT4gIDBFLTE0MQ0KK25leHR0MTE4IG5leHR0b3dhcmQgICAgIC0wRS0xNDEgICAtMDAwIC0+IC0wRS0xNDENCisNCistLSBmdWxsIGNvZWZmaWNpZW50cywgYWx0ZXJuYXRpbmcgYml0cw0KK25leHR0MTIxIG5leHR0b3dhcmQgICAyNjgyNjgyNjggICAgMjY4MjY4MjY4IC0+ICAgMjY4MjY4MjY4DQorbmV4dHQxMjIgbmV4dHRvd2FyZCAgLTI2ODI2ODI2OCAgIC0yNjgyNjgyNjggLT4gIC0yNjgyNjgyNjgNCituZXh0dDEyMyBuZXh0dG93YXJkICAgMTM0MTM0MTM0ICAgIDEzNDEzNDEzNCAtPiAgIDEzNDEzNDEzNA0KK25leHR0MTI0IG5leHR0b3dhcmQgIC0xMzQxMzQxMzQgICAtMTM0MTM0MTM0IC0+ICAtMTM0MTM0MTM0DQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCituZXh0dDEzMSBuZXh0dG93YXJkICA5Ljk5OTk5OTk5RSszODQgIDkuOTk5OTk5OTlFKzM4NCAgIC0+ICAgOS45OTk5OTk5OUUrMzg0DQorbmV4dHQxMzIgbmV4dHRvd2FyZCAgMUUtMzgzICAgICAgICAgICAxRS0zODMgICAgICAgICAgICAtPiAgIDFFLTM4Mw0KK25leHR0MTMzIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTM4MyAgMS4wMDAwMDAwMEUtMzgzICAgLT4gICAxLjAwMDAwMDAwRS0zODMNCituZXh0dDEzNCBuZXh0dG93YXJkICAxRS0zOTEgICAgICAgICAgIDFFLTM5MSAgICAgICAgICAgIC0+ICAgMUUtMzkxDQorDQorbmV4dHQxMzUgbmV4dHRvd2FyZCAgLTFFLTM5MSAgICAgICAgICAtMUUtMzkxICAgICAgICAgICAtPiAgLTFFLTM5MQ0KK25leHR0MTM2IG5leHR0b3dhcmQgIC0xLjAwMDAwMDAwRS0zODMgLTEuMDAwMDAwMDBFLTM4MyAgLT4gIC0xLjAwMDAwMDAwRS0zODMNCituZXh0dDEzNyBuZXh0dG93YXJkICAtMUUtMzgzICAgICAgICAgIC0xRS0zODMgICAgICAgICAgIC0+ICAtMUUtMzgzDQorbmV4dHQxMzggbmV4dHRvd2FyZCAgLTkuOTk5OTk5OTlFKzM4NCAtOS45OTk5OTk5OUUrMzg0ICAtPiAgLTkuOTk5OTk5OTlFKzM4NA0KKw0KKy0tLS0tLS0gbGhzPHJocw0KK25leHR0MjAxIG5leHR0b3dhcmQgIDAuOTk5OTk5OTk1IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTYNCituZXh0dDIwMiBuZXh0dG93YXJkICAwLjk5OTk5OTk5NiBJbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3DQorbmV4dHQyMDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgSW5maW5pdHkgLT4gICAwLjk5OTk5OTk5OA0KK25leHR0MjA0IG5leHR0b3dhcmQgIDAuOTk5OTk5OTk4IEluZmluaXR5IC0+ICAgMC45OTk5OTk5OTkNCituZXh0dDIwNSBuZXh0dG93YXJkICAwLjk5OTk5OTk5OSBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDANCituZXh0dDIwNiBuZXh0dG93YXJkICAxLjAwMDAwMDAwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCituZXh0dDIwNyBuZXh0dG93YXJkICAxLjAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCituZXh0dDIwOCBuZXh0dG93YXJkICAxICAgICAgICAgICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDENCituZXh0dDIwOSBuZXh0dG93YXJkICAxLjAwMDAwMDAxICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDINCituZXh0dDIxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMNCituZXh0dDIxMSBuZXh0dG93YXJkICAxLjAwMDAwMDAzICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDQNCituZXh0dDIxMiBuZXh0dG93YXJkICAxLjAwMDAwMDA0ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDUNCituZXh0dDIxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYNCituZXh0dDIxNCBuZXh0dG93YXJkICAxLjAwMDAwMDA2ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDcNCituZXh0dDIxNSBuZXh0dG93YXJkICAxLjAwMDAwMDA3ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDgNCituZXh0dDIxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkNCituZXh0dDIxNyBuZXh0dG93YXJkICAxLjAwMDAwMDA5ICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCituZXh0dDIxOCBuZXh0dG93YXJkICAxLjAwMDAwMDEwICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCituZXh0dDIxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICBJbmZpbml0eSAtPiAgIDEuMDAwMDAwMTINCisNCituZXh0dDIyMSBuZXh0dG93YXJkIC0wLjk5OTk5OTk5NSBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk0DQorbmV4dHQyMjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5NQ0KK25leHR0MjIzIG5leHR0b3dhcmQgLTAuOTk5OTk5OTk3IEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTYNCituZXh0dDIyNCBuZXh0dG93YXJkIC0wLjk5OTk5OTk5OCBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3DQorbmV4dHQyMjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OA0KK25leHR0MjI2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDAgIEluZmluaXR5IC0+ICAtMC45OTk5OTk5OTkNCituZXh0dDIyNyBuZXh0dG93YXJkIC0xLjAgICAgICAgICBJbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5DQorbmV4dHQyMjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgSW5maW5pdHkgLT4gIC0wLjk5OTk5OTk5OQ0KK25leHR0MjI5IG5leHR0b3dhcmQgLTEuMDAwMDAwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMA0KK25leHR0MjMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQ0KK25leHR0MjMxIG5leHR0b3dhcmQgLTEuMDAwMDAwMDMgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMg0KK25leHR0MjMyIG5leHR0b3dhcmQgLTEuMDAwMDAwMDQgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwMw0KK25leHR0MjMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNA0KK25leHR0MjM0IG5leHR0b3dhcmQgLTEuMDAwMDAwMDYgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQ0KK25leHR0MjM1IG5leHR0b3dhcmQgLTEuMDAwMDAwMDcgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNg0KK25leHR0MjM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwNw0KK25leHR0MjM3IG5leHR0b3dhcmQgLTEuMDAwMDAwMDkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOA0KK25leHR0MjM4IG5leHR0b3dhcmQgLTEuMDAwMDAwMTAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAwOQ0KK25leHR0MjM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KK25leHR0MjQwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KKw0KKy0tIGlucHV0IG9wZXJhbmQgaXMgPnByZWNpc2lvbg0KK25leHR0MjQxIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KK25leHR0MjQyIG5leHR0b3dhcmQgIDEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KK25leHR0MjQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ0IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ1IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ3IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ4IG5leHR0b3dhcmQgIDEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAgMS4wMDAwMDAxMg0KK25leHR0MjQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KK25leHR0MjUwIG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTkgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KK25leHR0MjUxIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDAgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMA0KK25leHR0MjUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KK25leHR0MjUzIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KK25leHR0MjU0IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KK25leHR0MjU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KK25leHR0MjU2IG5leHR0b3dhcmQgLTEuMDAwMDAwMTE1NTIgIEluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KKy0tIHVsdHJhLXRpbnkgaW5wdXRzDQorbmV4dHQyNjAgbmV4dHRvd2FyZCAgMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gICAxRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDI2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICBJbmZpbml0eSAtPiAgIDFFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MjYyIG5leHR0b3dhcmQgIDFFLTM5MSAgICAgICAgIEluZmluaXR5IC0+ICAgMkUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQyNjMgbmV4dHRvd2FyZCAtMUUtOTk5OTkgICAgICAgSW5maW5pdHkgLT4gIC0wRS0zOTEgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK25leHR0MjY0IG5leHR0b3dhcmQgLTFFLTk5OTk5OTk5OSAgIEluZmluaXR5IC0+ICAtMEUtMzkxICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCituZXh0dDI2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICBJbmZpbml0eSAtPiAgLTBFLTM5MSAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorDQorLS0gWmVyb3MNCituZXh0dDMwMCBuZXh0dG93YXJkICAwICAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MzAxIG5leHR0b3dhcmQgIDAuMDAgICAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQzMDIgbmV4dHRvd2FyZCAgMEUtMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDMwMyBuZXh0dG93YXJkICAwRSszMDAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MzA0IG5leHR0b3dhcmQgIDBFKzMwMDAwICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQzMDUgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDMwNiBuZXh0dG93YXJkIC0wLjAwICAgICAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MzA3IG5leHR0b3dhcmQgLTBFLTMwMCAgICAgIEluZmluaXR5IC0+ICAxRS0zOTEgICAgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQzMDggbmV4dHRvd2FyZCAtMEUrMzAwICAgICAgSW5maW5pdHkgLT4gIDFFLTM5MSAgICAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDMwOSBuZXh0dG93YXJkIC0wRSszMDAwMCAgICBJbmZpbml0eSAtPiAgMUUtMzkxICAgICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHNwZWNpYWxzDQorbmV4dHQzNTAgbmV4dHRvd2FyZCAgIEluZiAgICBJbmZpbml0eSAtPiAgSW5maW5pdHkNCituZXh0dDM1MSBuZXh0dG93YXJkICAtSW5mICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSszODQNCituZXh0dDM1MiBuZXh0dG93YXJkICAgTmFOICAgIEluZmluaXR5IC0+ICBOYU4NCituZXh0dDM1MyBuZXh0dG93YXJkICBzTmFOICAgIEluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0MzU0IG5leHR0b3dhcmQgICBOYU43NyAgSW5maW5pdHkgLT4gIE5hTjc3DQorbmV4dHQzNTUgbmV4dHRvd2FyZCAgc05hTjg4ICBJbmZpbml0eSAtPiAgTmFOODggSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDM1NiBuZXh0dG93YXJkICAtTmFOICAgIEluZmluaXR5IC0+IC1OYU4NCituZXh0dDM1NyBuZXh0dG93YXJkIC1zTmFOICAgIEluZmluaXR5IC0+IC1OYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0MzU4IG5leHR0b3dhcmQgIC1OYU43NyAgSW5maW5pdHkgLT4gLU5hTjc3DQorbmV4dHQzNTkgbmV4dHRvd2FyZCAtc05hTjg4ICBJbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK21heEV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK25leHR0MzcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgIEluZmluaXR5IC0+IEluZmluaXR5ICAgICAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM3MSBuZXh0dG93YXJkICA5Ljk5OTk5OTk4RSs5OTkgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTk5RSs5OTkNCituZXh0dDM3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkNCituZXh0dDM3MyBuZXh0dG93YXJkICAxLjAwMDAwMDAwRS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAxRS05OTkNCituZXh0dDM3NCBuZXh0dG93YXJkICAwLjk5OTk5OTk5OUUtOTk5ICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkNCituZXh0dDM3NSBuZXh0dG93YXJkICAwLjk5OTk5OTk5RS05OTkgICBJbmZpbml0eSAtPiAxLjAwMDAwMDAwRS05OTkNCituZXh0dDM3NiBuZXh0dG93YXJkICA5RS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxLjBFLTEwMDYgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM3NyBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICBJbmZpbml0eSAtPiAxLjAwRS0xMDA1ICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM3OCBuZXh0dG93YXJkICA5Ljk5OTlFLTEwMDMgICAgICBJbmZpbml0eSAtPiAxLjAwMDAwRS0xMDAyICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM3OSBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OTlFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM4MCBuZXh0dG93YXJkICA5Ljk5OTk5OTdFLTEwMDAgICBJbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM4MSBuZXh0dG93YXJkICAwRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM4MiBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAyRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM4MyBuZXh0dG93YXJkICAyRS0xMDA3ICAgICAgICAgICBJbmZpbml0eSAtPiAzRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCituZXh0dDM4NSBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAgMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM4NiBuZXh0dG93YXJkICAtMUUtMTAwNyAgICAgICAgICBJbmZpbml0eSAtPiAtMEUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK25leHR0Mzg3IG5leHR0b3dhcmQgIC0yRS0xMDA3ICAgICAgICAgIEluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0Mzg4IG5leHR0b3dhcmQgIC0xMEUtMTAwNyAgICAgICAgIEluZmluaXR5IC0+IC05RS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0Mzg5IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgIEluZmluaXR5IC0+IC05LjlFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MzkwIG5leHR0b3dhcmQgIC0xMDAwMDBFLTEwMDcgICAgIEluZmluaXR5IC0+IC05Ljk5OTlFLTEwMDMgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0MzkxIG5leHR0b3dhcmQgIC0xLjAwMDBFLTk5OSAgICAgIEluZmluaXR5IC0+IC05Ljk5OTk5OTlFLTEwMDAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQzOTIgbmV4dHRvd2FyZCAgLTEuMDAwMDAwMDBFLTk5OSAgSW5maW5pdHkgLT4gLTkuOTk5OTk5OUUtMTAwMCAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDM5MyBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICBJbmZpbml0eSAtPiAtOS45OTk5OTk5RS0xMDAwICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0Mzk0IG5leHR0b3dhcmQgIC05Ljk5OTk5OTk4RSs5OTkgIEluZmluaXR5IC0+IC05Ljk5OTk5OTk3RSs5OTkNCituZXh0dDM5NSBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICBJbmZpbml0eSAtPiAtOS45OTk5OTk5OEUrOTk5DQorDQorLS0tLS0tLSBsaHM+cmhzDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorbmV4dHQ0MDEgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk0DQorbmV4dHQ0MDIgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk1DQorbmV4dHQ0MDMgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk2DQorbmV4dHQ0MDQgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk3DQorbmV4dHQ0MDUgbmV4dHRvd2FyZCAgMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk4DQorbmV4dHQ0MDYgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMCAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQorbmV4dHQ0MDcgbmV4dHRvd2FyZCAgMS4wICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQorbmV4dHQ0MDggbmV4dHRvd2FyZCAgMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDAuOTk5OTk5OTk5DQorbmV4dHQ0MDkgbmV4dHRvd2FyZCAgMS4wMDAwMDAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDANCituZXh0dDQxMCBuZXh0dG93YXJkICAxLjAwMDAwMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwMQ0KK25leHR0NDExIG5leHR0b3dhcmQgIDEuMDAwMDAwMDMgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDAyDQorbmV4dHQ0MTIgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDMNCituZXh0dDQxMyBuZXh0dG93YXJkICAxLjAwMDAwMDA1ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNA0KK25leHR0NDE0IG5leHR0b3dhcmQgIDEuMDAwMDAwMDYgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA1DQorbmV4dHQ0MTUgbmV4dHRvd2FyZCAgMS4wMDAwMDAwNyAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDYNCituZXh0dDQxNiBuZXh0dG93YXJkICAxLjAwMDAwMDA4ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAwNw0KK25leHR0NDE3IG5leHR0b3dhcmQgIDEuMDAwMDAwMDkgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDA4DQorbmV4dHQ0MTggbmV4dHRvd2FyZCAgMS4wMDAwMDAxMCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMDkNCituZXh0dDQxOSBuZXh0dG93YXJkICAxLjAwMDAwMDExICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMA0KK25leHR0NDIwIG5leHR0b3dhcmQgIDEuMDAwMDAwMTIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQorDQorbmV4dHQ0MjEgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTUgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk2DQorbmV4dHQ0MjIgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTYgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk3DQorbmV4dHQ0MjMgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTcgIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk4DQorbmV4dHQ0MjQgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTggIC1JbmZpbml0eSAtPiAgLTAuOTk5OTk5OTk5DQorbmV4dHQ0MjUgbmV4dHRvd2FyZCAtMC45OTk5OTk5OTkgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDANCituZXh0dDQyNiBuZXh0dG93YXJkIC0xLjAwMDAwMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMQ0KK25leHR0NDI3IG5leHR0b3dhcmQgLTEuMCAgICAgICAgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAxDQorbmV4dHQ0MjggbmV4dHRvd2FyZCAtMSAgICAgICAgICAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDENCituZXh0dDQyOSBuZXh0dG93YXJkIC0xLjAwMDAwMDAxICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwMg0KK25leHR0NDMwIG5leHR0b3dhcmQgLTEuMDAwMDAwMDIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDAzDQorbmV4dHQ0MzEgbmV4dHRvd2FyZCAtMS4wMDAwMDAwMyAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDQNCituZXh0dDQzMiBuZXh0dG93YXJkIC0xLjAwMDAwMDA0ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwNQ0KK25leHR0NDMzIG5leHR0b3dhcmQgLTEuMDAwMDAwMDUgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA2DQorbmV4dHQ0MzQgbmV4dHRvd2FyZCAtMS4wMDAwMDAwNiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMDcNCituZXh0dDQzNSBuZXh0dG93YXJkIC0xLjAwMDAwMDA3ICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAwOA0KK25leHR0NDM2IG5leHR0b3dhcmQgLTEuMDAwMDAwMDggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDA5DQorbmV4dHQ0MzcgbmV4dHRvd2FyZCAtMS4wMDAwMDAwOSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTANCituZXh0dDQzOCBuZXh0dG93YXJkIC0xLjAwMDAwMDEwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMQ0KK25leHR0NDM5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQorDQorLS0gaW5wdXQgb3BlcmFuZCBpcyA+cHJlY2lzaW9uDQorbmV4dHQ0NDEgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMDk5OCAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTANCituZXh0dDQ0MiBuZXh0dG93YXJkICAxLjAwMDAwMDEwOTk5ICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMA0KK25leHR0NDQzIG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDAgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDEwDQorbmV4dHQ0NDQgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTAwMSAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCituZXh0dDQ0NSBuZXh0dG93YXJkICAxLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KK25leHR0NDQ2IG5leHR0b3dhcmQgIDEuMDAwMDAwMTEwMDIgICAtSW5maW5pdHkgLT4gICAxLjAwMDAwMDExDQorbmV4dHQ0NDcgbmV4dHRvd2FyZCAgMS4wMDAwMDAxMTA1MiAgIC1JbmZpbml0eSAtPiAgIDEuMDAwMDAwMTENCituZXh0dDQ0OCBuZXh0dG93YXJkICAxLjAwMDAwMDExNTUyICAgLUluZmluaXR5IC0+ICAgMS4wMDAwMDAxMQ0KK25leHR0NDQ5IG5leHR0b3dhcmQgLTEuMDAwMDAwMTA5OTggICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDExDQorbmV4dHQ0NTAgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMDk5OSAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTENCituZXh0dDQ1MSBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAwICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KK25leHR0NDUyIG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwMDEgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQorbmV4dHQ0NTMgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTAwMiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCituZXh0dDQ1NCBuZXh0dG93YXJkIC0xLjAwMDAwMDExMDAyICAgLUluZmluaXR5IC0+ICAtMS4wMDAwMDAxMg0KK25leHR0NDU1IG5leHR0b3dhcmQgLTEuMDAwMDAwMTEwNTIgICAtSW5maW5pdHkgLT4gIC0xLjAwMDAwMDEyDQorbmV4dHQ0NTYgbmV4dHRvd2FyZCAtMS4wMDAwMDAxMTU1MiAgIC1JbmZpbml0eSAtPiAgLTEuMDAwMDAwMTINCistLSB1bHRyYS10aW55IGlucHV0cw0KK25leHR0NDYwIG5leHR0b3dhcmQgIDFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gICAwRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCituZXh0dDQ2MSBuZXh0dG93YXJkICAxRS05OTk5OTk5OTkgICAgLUluZmluaXR5IC0+ICAgMEUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorbmV4dHQ0NjIgbmV4dHRvd2FyZCAgMUUtMzkxICAgICAgICAgIC1JbmZpbml0eSAtPiAgIDBFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KK25leHR0NDYzIG5leHR0b3dhcmQgLTFFLTk5OTk5ICAgICAgICAtSW5maW5pdHkgLT4gIC0xRS0zOTEgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ0NjQgbmV4dHRvd2FyZCAtMUUtOTk5OTk5OTk5ICAgIC1JbmZpbml0eSAtPiAgLTFFLTM5MSAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDQ2NSBuZXh0dG93YXJkIC0xRS0zOTEgICAgICAgICAgLUluZmluaXR5IC0+ICAtMkUtMzkxICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFplcm9zDQorbmV4dHQ1MDAgbmV4dHRvd2FyZCAtMCAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDUwMSBuZXh0dG93YXJkICAwICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTAyIG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1MDMgbmV4dHRvd2FyZCAtMC4wMCAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDUwNCBuZXh0dG93YXJkICAwRS0zMDAgICAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTA1IG5leHR0b3dhcmQgIDBFKzMwMCAgICAgICAtSW5maW5pdHkgLT4gLTFFLTM5MSAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1MDYgbmV4dHRvd2FyZCAgMEUrMzAwMDAgICAgIC1JbmZpbml0eSAtPiAtMUUtMzkxICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDUwNyBuZXh0dG93YXJkIC0wRSszMDAwMCAgICAgLUluZmluaXR5IC0+IC0xRS0zOTEgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTA4IG5leHR0b3dhcmQgIDAuMDAgICAgICAgICAtMC4wMDAwICAgLT4gLTAuMDANCisNCistLSBzcGVjaWFscw0KK25leHR0NTUwIG5leHR0b3dhcmQgICBJbmYgICAgIC1JbmZpbml0eSAtPiAgOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ1NTEgbmV4dHRvd2FyZCAgLUluZiAgICAgLUluZmluaXR5IC0+IC1JbmZpbml0eQ0KK25leHR0NTUyIG5leHR0b3dhcmQgICBOYU4gICAgIC1JbmZpbml0eSAtPiAgTmFODQorbmV4dHQ1NTMgbmV4dHRvd2FyZCAgc05hTiAgICAgLUluZmluaXR5IC0+ICBOYU4gICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0NTU0IG5leHR0b3dhcmQgICBOYU43NyAgIC1JbmZpbml0eSAtPiAgTmFONzcNCituZXh0dDU1NSBuZXh0dG93YXJkICBzTmFOODggICAtSW5maW5pdHkgLT4gIE5hTjg4IEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ1NTYgbmV4dHRvd2FyZCAgLU5hTiAgICAgLUluZmluaXR5IC0+IC1OYU4NCituZXh0dDU1NyBuZXh0dG93YXJkIC1zTmFOICAgICAtSW5maW5pdHkgLT4gLU5hTiAgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ1NTggbmV4dHRvd2FyZCAgLU5hTjc3ICAgLUluZmluaXR5IC0+IC1OYU43Nw0KK25leHR0NTU5IG5leHR0b3dhcmQgLXNOYU44OCAgIC1JbmZpbml0eSAtPiAtTmFOODggSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBObWF4LCBObWluLCBOdGlueSwgc3Vibm9ybWFscw0KK21heEV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK25leHR0NTcwIG5leHR0b3dhcmQgIDkuOTk5OTk5OTlFKzk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5OEUrOTk5DQorbmV4dHQ1NzEgbmV4dHRvd2FyZCAgOS45OTk5OTk5OEUrOTk5ICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OTk3RSs5OTkNCituZXh0dDU3MiBuZXh0dG93YXJkICAxRS05OTkgICAgICAgICAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5OUUtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTczIG5leHR0b3dhcmQgIDEuMDAwMDAwMDBFLTk5OSAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk5RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1NzQgbmV4dHRvd2FyZCAgOUUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiA4RS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDU3NSBuZXh0dG93YXJkICA5LjlFLTEwMDYgICAgICAgICAgLUluZmluaXR5IC0+IDkuOEUtMTAwNiAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTc2IG5leHR0b3dhcmQgIDkuOTk5OUUtMTAwMyAgICAgICAtSW5maW5pdHkgLT4gOS45OTk4RS0xMDAzICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1NzcgbmV4dHRvd2FyZCAgOS45OTk5OTk5RS0xMDAwICAgIC1JbmZpbml0eSAtPiA5Ljk5OTk5OThFLTEwMDAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDU3OCBuZXh0dG93YXJkICA5Ljk5OTk5OThFLTEwMDAgICAgLUluZmluaXR5IC0+IDkuOTk5OTk5N0UtMTAwMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTc5IG5leHR0b3dhcmQgIDkuOTk5OTk5N0UtMTAwMCAgICAtSW5maW5pdHkgLT4gOS45OTk5OTk2RS0xMDAwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1ODAgbmV4dHRvd2FyZCAgMEUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAtMUUtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDU4MSBuZXh0dG93YXJkICAxRS0xMDA3ICAgICAgICAgICAgLUluZmluaXR5IC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorbmV4dHQ1ODIgbmV4dHRvd2FyZCAgMkUtMTAwNyAgICAgICAgICAgIC1JbmZpbml0eSAtPiAxRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCituZXh0dDU4MyBuZXh0dG93YXJkICAtMEUtMTAwNyAgICAgICAgICAgLUluZmluaXR5IC0+IC0xRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTg0IG5leHR0b3dhcmQgIC0xRS0xMDA3ICAgICAgICAgICAtSW5maW5pdHkgLT4gLTJFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1ODUgbmV4dHRvd2FyZCAgLTJFLTEwMDcgICAgICAgICAgIC1JbmZpbml0eSAtPiAtM0UtMTAwNyAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDU4NiBuZXh0dG93YXJkICAtMTBFLTEwMDcgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjFFLTEwMDYgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0NTg3IG5leHR0b3dhcmQgIC0xMDBFLTEwMDcgICAgICAgICAtSW5maW5pdHkgLT4gLTEuMDFFLTEwMDUgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ1ODggbmV4dHRvd2FyZCAgLTEwMDAwMEUtMTAwNyAgICAgIC1JbmZpbml0eSAtPiAtMS4wMDAwMUUtMTAwMiAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDU4OSBuZXh0dG93YXJkICAtMS4wMDAwRS05OTkgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCituZXh0dDU5MCBuZXh0dG93YXJkICAtMS4wMDAwMDAwMEUtOTk5ICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCituZXh0dDU5MSBuZXh0dG93YXJkICAtMUUtOTk5ICAgICAgICAgICAgLUluZmluaXR5IC0+IC0xLjAwMDAwMDAxRS05OTkNCituZXh0dDU5MiBuZXh0dG93YXJkICAtOS45OTk5OTk5OEUrOTk5ICAgLUluZmluaXR5IC0+IC05Ljk5OTk5OTk5RSs5OTkNCituZXh0dDU5MyBuZXh0dG93YXJkICAtOS45OTk5OTk5OUUrOTk5ICAgLUluZmluaXR5IC0+IC1JbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCisNCisNCisNCisNCistLS0tLS0tIFNwZWNpYWxzDQorbWF4RXhwb25lbnQ6IDM4NA0KK21pbmV4cG9uZW50OiAtMzgzDQorbmV4dHQ3ODAgbmV4dHRvd2FyZCAtSW5mICAtSW5mICAgLT4gLUluZmluaXR5DQorbmV4dHQ3ODEgbmV4dHRvd2FyZCAtSW5mICAtMTAwMCAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KK25leHR0NzgyIG5leHR0b3dhcmQgLUluZiAgLTEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQNCituZXh0dDc4MyBuZXh0dG93YXJkIC1JbmYgIC0wICAgICAtPiAtOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ3ODQgbmV4dHRvd2FyZCAtSW5mICAgMCAgICAgLT4gLTkuOTk5OTk5OTlFKzM4NA0KK25leHR0Nzg1IG5leHR0b3dhcmQgLUluZiAgIDEgICAgIC0+IC05Ljk5OTk5OTk5RSszODQNCituZXh0dDc4NiBuZXh0dG93YXJkIC1JbmYgICAxMDAwICAtPiAtOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ3ODcgbmV4dHRvd2FyZCAtMTAwMCAtSW5mICAgLT4gLTEwMDAuMDAwMDENCituZXh0dDc4OCBuZXh0dG93YXJkIC1JbmYgIC1JbmYgICAtPiAtSW5maW5pdHkNCituZXh0dDc4OSBuZXh0dG93YXJkIC0xICAgIC1JbmYgICAtPiAtMS4wMDAwMDAwMQ0KK25leHR0NzkwIG5leHR0b3dhcmQgLTAgICAgLUluZiAgIC0+IC0xRS0zOTEgICAgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorbmV4dHQ3OTEgbmV4dHRvd2FyZCAgMCAgICAtSW5mICAgLT4gLTFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDc5MiBuZXh0dG93YXJkICAxICAgIC1JbmYgICAtPiAgMC45OTk5OTk5OTkNCituZXh0dDc5MyBuZXh0dG93YXJkICAxMDAwIC1JbmYgICAtPiAgOTk5Ljk5OTk5OQ0KK25leHR0Nzk0IG5leHR0b3dhcmQgIEluZiAgLUluZiAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCisNCituZXh0dDgwMCBuZXh0dG93YXJkICBJbmYgIC1JbmYgICAtPiAgOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ4MDEgbmV4dHRvd2FyZCAgSW5mICAtMTAwMCAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KK25leHR0ODAyIG5leHR0b3dhcmQgIEluZiAgLTEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCituZXh0dDgwMyBuZXh0dG93YXJkICBJbmYgIC0wICAgICAtPiAgOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ4MDQgbmV4dHRvd2FyZCAgSW5mICAgMCAgICAgLT4gIDkuOTk5OTk5OTlFKzM4NA0KK25leHR0ODA1IG5leHR0b3dhcmQgIEluZiAgIDEgICAgIC0+ICA5Ljk5OTk5OTk5RSszODQNCituZXh0dDgwNiBuZXh0dG93YXJkICBJbmYgICAxMDAwICAtPiAgOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ4MDcgbmV4dHRvd2FyZCAgSW5mICAgSW5mICAgLT4gIEluZmluaXR5DQorbmV4dHQ4MDggbmV4dHRvd2FyZCAtMTAwMCAgSW5mICAgLT4gLTk5OS45OTk5OTkNCituZXh0dDgwOSBuZXh0dG93YXJkIC1JbmYgICBJbmYgICAtPiAtOS45OTk5OTk5OUUrMzg0DQorbmV4dHQ4MTAgbmV4dHRvd2FyZCAtMSAgICAgSW5mICAgLT4gLTAuOTk5OTk5OTk5DQorbmV4dHQ4MTEgbmV4dHRvd2FyZCAtMCAgICAgSW5mICAgLT4gIDFFLTM5MSAgICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCituZXh0dDgxMiBuZXh0dG93YXJkICAwICAgICBJbmYgICAtPiAgMUUtMzkxICAgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK25leHR0ODEzIG5leHR0b3dhcmQgIDEgICAgIEluZiAgIC0+ICAxLjAwMDAwMDAxDQorbmV4dHQ4MTQgbmV4dHRvd2FyZCAgMTAwMCAgSW5mICAgLT4gIDEwMDAuMDAwMDENCituZXh0dDgxNSBuZXh0dG93YXJkICBJbmYgICBJbmYgICAtPiAgSW5maW5pdHkNCisNCituZXh0dDgyMSBuZXh0dG93YXJkICBOYU4gLUluZiAgICAtPiAgTmFODQorbmV4dHQ4MjIgbmV4dHRvd2FyZCAgTmFOIC0xMDAwICAgLT4gIE5hTg0KK25leHR0ODIzIG5leHR0b3dhcmQgIE5hTiAtMSAgICAgIC0+ICBOYU4NCituZXh0dDgyNCBuZXh0dG93YXJkICBOYU4gLTAgICAgICAtPiAgTmFODQorbmV4dHQ4MjUgbmV4dHRvd2FyZCAgTmFOICAwICAgICAgLT4gIE5hTg0KK25leHR0ODI2IG5leHR0b3dhcmQgIE5hTiAgMSAgICAgIC0+ICBOYU4NCituZXh0dDgyNyBuZXh0dG93YXJkICBOYU4gIDEwMDAgICAtPiAgTmFODQorbmV4dHQ4MjggbmV4dHRvd2FyZCAgTmFOICBJbmYgICAgLT4gIE5hTg0KK25leHR0ODI5IG5leHR0b3dhcmQgIE5hTiAgTmFOICAgIC0+ICBOYU4NCituZXh0dDgzMCBuZXh0dG93YXJkIC1JbmYgIE5hTiAgICAtPiAgTmFODQorbmV4dHQ4MzEgbmV4dHRvd2FyZCAtMTAwMCBOYU4gICAgLT4gIE5hTg0KK25leHR0ODMyIG5leHR0b3dhcmQgLTEgICAgTmFOICAgIC0+ICBOYU4NCituZXh0dDgzMyBuZXh0dG93YXJkIC0wICAgIE5hTiAgICAtPiAgTmFODQorbmV4dHQ4MzQgbmV4dHRvd2FyZCAgMCAgICBOYU4gICAgLT4gIE5hTg0KK25leHR0ODM1IG5leHR0b3dhcmQgIDEgICAgTmFOICAgIC0+ICBOYU4NCituZXh0dDgzNiBuZXh0dG93YXJkICAxMDAwIE5hTiAgICAtPiAgTmFODQorbmV4dHQ4MzcgbmV4dHRvd2FyZCAgSW5mICBOYU4gICAgLT4gIE5hTg0KKw0KK25leHR0ODQxIG5leHR0b3dhcmQgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NDIgbmV4dHRvd2FyZCAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg0MyBuZXh0dG93YXJkICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODQ0IG5leHR0b3dhcmQgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NDUgbmV4dHRvd2FyZCAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg0NiBuZXh0dG93YXJkICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODQ3IG5leHR0b3dhcmQgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NDggbmV4dHRvd2FyZCAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg0OSBuZXh0dG93YXJkICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODUwIG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NTEgbmV4dHRvd2FyZCAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg1MiBuZXh0dG93YXJkIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODUzIG5leHR0b3dhcmQgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NTQgbmV4dHRvd2FyZCAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg1NSBuZXh0dG93YXJkICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODU2IG5leHR0b3dhcmQgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NTcgbmV4dHRvd2FyZCAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg1OCBuZXh0dG93YXJkICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODU5IG5leHR0b3dhcmQgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK25leHR0ODYxIG5leHR0b3dhcmQgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorbmV4dHQ4NjIgbmV4dHRvd2FyZCArTmFOMiAgIC0xMDAwICAgLT4gIE5hTjINCituZXh0dDg2MyBuZXh0dG93YXJkICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMw0KK25leHR0ODY0IG5leHR0b3dhcmQgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorbmV4dHQ4NjUgbmV4dHRvd2FyZCAgTmFONSAgICtOYU42ICAgLT4gIE5hTjUNCituZXh0dDg2NiBuZXh0dG93YXJkIC1JbmYgICAgIE5hTjcgICAtPiAgTmFONw0KK25leHR0ODY3IG5leHR0b3dhcmQgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorbmV4dHQ4NjggbmV4dHRvd2FyZCAgMTAwMCAgICBOYU45ICAgLT4gIE5hTjkNCituZXh0dDg2OSBuZXh0dG93YXJkICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTANCituZXh0dDg3MSBuZXh0dG93YXJkICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NzIgbmV4dHRvd2FyZCAgc05hTjEyICAtMTAwMCAgLT4gIE5hTjEyICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODczIG5leHR0b3dhcmQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg3NCBuZXh0dG93YXJkICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NzUgbmV4dHRvd2FyZCAgc05hTjE1ICBzTmFOMTggLT4gIE5hTjE1ICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODc2IG5leHR0b3dhcmQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg3NyBuZXh0dG93YXJkIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4NzggbmV4dHRvd2FyZCAtMTAwMCAgICBzTmFOMjEgLT4gIE5hTjIxICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODc5IG5leHR0b3dhcmQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg4MCBuZXh0dG93YXJkICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorbmV4dHQ4ODEgbmV4dHRvd2FyZCArTmFOMjUgICtzTmFOMjQgLT4gIE5hTjI0ICBJbnZhbGlkX29wZXJhdGlvbg0KK25leHR0ODgyIG5leHR0b3dhcmQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNg0KK25leHR0ODgzIG5leHR0b3dhcmQgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDg4NCBuZXh0dG93YXJkICAxMDAwICAgIC1OYU4zMCAtPiAtTmFOMzANCituZXh0dDg4NSBuZXh0dG93YXJkICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gTnVsbCB0ZXN0cw0KK25leHR0OTAwIG5leHR0b3dhcmQgMSAgIyAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCituZXh0dDkwMSBuZXh0dG93YXJkICMgIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL29yLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdAppbmRleCAxYWViZmY0Li5mNDcxZDBiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvb3IuZGVjVGVzdApAQCAtMSwzMzQgKzEsMzM0IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gU2FuaXR5IGNoZWNrICh0cnV0aCB0YWJsZSkKLW9yeDAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAotb3J4MDAyIG9yICAgICAgICAgICAgIDAgICAgMSAtPiAgICAxCi1vcngwMDMgb3IgICAgICAgICAgICAgMSAgICAwIC0+ICAgIDEKLW9yeDAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQotb3J4MDA1IG9yICAgICAgICAgIDExMDAgMTAxMCAtPiAxMTEwCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQotb3J4MDA2IG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDAKLW9yeDAwNyBvciAwMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwCi1vcngwMDggb3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAotb3J4MDA5IG9yIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDAKLW9yeDAxMCBvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwCi1vcngwMTEgb3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAotb3J4MDEyIG9yIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDAKLW9yeDAxMyBvciAwMTAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwCi0KLS0tIFZhcmlvdXMgbGVuZ3RocwotLS0gICAgICAgIDEyMzQ1Njc4OSAgICAgMTIzNDU2Nzg5ICAgICAgMTIzNDU2Nzg5Ci1vcngwMjEgb3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDAyMiBvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQotb3J4MDIzIG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgIDExMTExMTExCi1vcngwMjUgb3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAgIDExMTExMTEKLW9yeDAyNiBvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gICAgIDExMTExMQotb3J4MDI3IG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgICAgIDExMTExCi1vcngwMjggb3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAgICAgIDExMTEKLW9yeDAyOSBvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gICAgICAgIDExMQotb3J4MDMxIG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgICAgICAgIDExCi1vcngwMzIgb3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAgICAgICAgIDEKLW9yeDAzMyBvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQotb3J4MDM0IG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMTExMTExMTExCi1vcngwMzUgb3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDAzNiBvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQotCi1vcngwNDAgb3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDA0MSBvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQotb3J4MDQyIG9yICAxMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMTExMTExMTExCi1vcngwNDMgb3IgICAxMTExMTExICAgICAxMDAwMDAwMTAgIC0+ICAxMDExMTExMTEKLW9yeDA0NCBvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTExMQotb3J4MDQ1IG9yICAgICAxMTExMSAgICAgMTAwMDAxMDAwICAtPiAgMTAwMDExMTExCi1vcngwNDYgb3IgICAgICAxMTExICAgICAxMDAwMTAwMDAgIC0+ICAxMDAwMTExMTEKLW9yeDA0NyBvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQotb3J4MDQ4IG9yICAgICAgICAxMSAgICAgMTAxMDAwMDAwICAtPiAgMTAxMDAwMDExCi1vcngwNDkgb3IgICAgICAgICAxICAgICAxMTAwMDAwMDAgIC0+ICAxMTAwMDAwMDEKLQotb3J4MDUwIG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTEKLW9yeDA1MSBvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTExCi1vcngwNTIgb3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTExCi1vcngwNTMgb3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTEKLW9yeDA1NCBvciAgICAgMTExMTExICAxICAtPiAgMTExMTExCi1vcngwNTUgb3IgICAgICAxMTExMSAgMSAgLT4gIDExMTExCi1vcngwNTYgb3IgICAgICAgMTExMSAgMSAgLT4gIDExMTEKLW9yeDA1NyBvciAgICAgICAgMTExICAxICAtPiAgMTExCi1vcngwNTggb3IgICAgICAgICAxMSAgMSAgLT4gIDExCi1vcngwNTkgb3IgICAgICAgICAgMSAgMSAgLT4gIDEKLQotb3J4MDYwIG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTEKLW9yeDA2MSBvciAgMTExMTExMTExICAwICAtPiAgMTExMTExMTExCi1vcngwNjIgb3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCi1vcngwNjMgb3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTEKLW9yeDA2NCBvciAgICAgMTExMTExICAwICAtPiAgMTExMTExCi1vcngwNjUgb3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCi1vcngwNjYgb3IgICAgICAgMTExMSAgMCAgLT4gIDExMTEKLW9yeDA2NyBvciAgICAgICAgMTExICAwICAtPiAgMTExCi1vcngwNjggb3IgICAgICAgICAxMSAgMCAgLT4gIDExCi1vcngwNjkgb3IgICAgICAgICAgMSAgMCAgLT4gIDEKLQotb3J4MDcwIG9yIDEgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDA3MSBvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTExCi1vcngwNzIgb3IgMSAgICAxMTExMTExMSAgLT4gIDExMTExMTExCi1vcngwNzMgb3IgMSAgICAgMTExMTExMSAgLT4gIDExMTExMTEKLW9yeDA3NCBvciAxICAgICAgMTExMTExICAtPiAgMTExMTExCi1vcngwNzUgb3IgMSAgICAgICAxMTExMSAgLT4gIDExMTExCi1vcngwNzYgb3IgMSAgICAgICAgMTExMSAgLT4gIDExMTEKLW9yeDA3NyBvciAxICAgICAgICAgMTExICAtPiAgMTExCi1vcngwNzggb3IgMSAgICAgICAgICAxMSAgLT4gIDExCi1vcngwNzkgb3IgMSAgICAgICAgICAgMSAgLT4gIDEKLQotb3J4MDgwIG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDA4MSBvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExCi1vcngwODIgb3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExCi1vcngwODMgb3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKLW9yeDA4NCBvciAwICAgICAgMTExMTExICAtPiAgMTExMTExCi1vcngwODUgb3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExCi1vcngwODYgb3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKLW9yeDA4NyBvciAwICAgICAgICAgMTExICAtPiAgMTExCi1vcngwODggb3IgMCAgICAgICAgICAxMSAgLT4gIDExCi1vcngwODkgb3IgMCAgICAgICAgICAgMSAgLT4gIDEKLQotb3J4MDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCi1vcngwOTEgb3IgMTAxMTExMTExICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKLW9yeDA5MiBvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotb3J4MDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCi1vcngwOTQgb3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAxMTExMDExMTEKLW9yeDA5NSBvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotb3J4MDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExCi1vcngwOTcgb3IgMTExMTExMTAxICAxMTExMDExMTEgIC0+ICAxMTExMTExMTEKLW9yeDA5OCBvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gIDExMTExMTExMQotCi1vcngxMDAgb3IgMTExMTAxMTExICAwMTExMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDEwMSBvciAxMTExMDExMTEgIDEwMTExMTExMSAgLT4gIDExMTExMTExMQotb3J4MTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExCi1vcngxMDMgb3IgMTExMTAxMTExICAxMTEwMTExMTEgIC0+ICAxMTExMTExMTEKLW9yeDEwNCBvciAxMTExMDExMTEgIDExMTEwMTExMSAgLT4gIDExMTEwMTExMQotb3J4MTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExCi1vcngxMDYgb3IgMTExMTAxMTExICAxMTExMTEwMTEgIC0+ICAxMTExMTExMTEKLW9yeDEwNyBvciAxMTExMDExMTEgIDExMTExMTEwMSAgLT4gIDExMTExMTExMQotb3J4MTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwotb3J4MjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyMjEgb3IgMzMzMzMzMzMzICAzMzMzMzMzMzMgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDIyMiBvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyMjQgb3IgOTk5OTk5OTk5ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDIyNSBvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyMjcgb3IgNjY2NjY2NjY2ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDIyOCBvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyMzAgb3IgOTk5OTk5OTk5ICA0NDQ0NDQ0NDQgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDIzMSBvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhIGZldyByYW5kb21zCi1vcngyNDAgb3IgIDU2NzQ2ODY4OSAtOTM0OTgxOTQyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjQyIG9yIC02MzE5MTc3NzIgLTcwNjAxNDYzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNDMgb3IgLTc1NjI1MzI1NyAgMTM4NTc5MjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLW9yeDI1MCBvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNTEgb3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjUyIG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI1MyBvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNTQgb3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjU1IG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI1NiBvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNTcgb3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjU4IG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI1OSBvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNjAgb3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjYxIG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI2MiBvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNjMgb3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjY0IG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI2NSBvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1TRC0xCi1vcngyNzAgb3IgIDAyMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjcxIG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI3MiBvciAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNzMgb3IgIDA5MDAwMTAwMCAxMDAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjc0IG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI3NSBvciAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyNzYgb3IgIDEwMDAwMDAxMCAwODAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjc3IG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi1vcngyODAgb3IgIDAwMTAwMDAwMiAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjgxIG9yICAwMDAwMDAwMDcgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI4MiBvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyODMgb3IgIDAwMDAwMDAwOSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjg0IG9yICAxMDAwMDAwMDAgMDAwMTAwMDAyIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI4NSBvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyODYgb3IgIDEwMDAxMDAwMCAwMTAwMDAwMDggLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjg3IG9yICAxMDAwMDEwMDAgMTAwMDAwMDA5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTWlkZGllCi1vcngyODggb3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjg5IG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI5MCBvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyOTEgb3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MjkyIG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI5MyBvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyOTQgb3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjk1IG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHNpZ25zCi1vcngyOTYgb3IgLTEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDI5NyBvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mjk4IG9yICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngyOTkgb3IgIDEwMDAwMTAwMCAgMDAwMDExMDAwIC0+ICAxMDAwMTEwMDAKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLW9yeDMzMSBvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzMzIgb3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDMzNCBvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzMzUgb3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDMzNyBvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzMzggb3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzQxIG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM0MiBvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNDMgb3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzQ0IG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM0NSBvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNDYgb3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzQ3IG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM0OCBvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycwotb3J4MzYxIG9yICAxLjAgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM2MiBvciAgMUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzY0IG9yICAwRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM2NSBvciAgOS45ICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4MzcxIG9yICAwIDEuMCAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM3MiBvciAgMCAxRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Mzc0IG9yICAwIDBFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDM3NSBvciAgMCA5LjkgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcngzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCi1vcng3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4NzgxIG9yIC1JbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDc4MiBvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Nzg0IG9yIC1JbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDc4NSBvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4Nzg3IG9yIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDc4OCBvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4NzkwIG9yIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDc5MSBvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4NzkzIG9yICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDc5NCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLW9yeDgwMCBvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MDEgb3IgIEluZiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgwMyBvciAgSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MDQgb3IgIEluZiAgIDAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgwNiBvciAgSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MDcgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgwOSBvciAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MTAgb3IgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgxMiBvciAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MTMgb3IgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgxNSBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLW9yeDgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MjIgb3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODIzIG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MjUgb3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODI2IG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4Mjggb3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODI5IG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MzEgb3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODMyIG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4MzQgb3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODM1IG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4Mzcgb3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1vcng4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDIgb3IgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDMgb3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDUgb3IgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDYgb3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDggb3IgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NDkgb3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTEgb3IgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTIgb3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTQgb3IgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTUgb3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTcgb3IgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTggb3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLW9yeDg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NjIgb3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODYzIG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NjUgb3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODY2IG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4Njggb3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODY5IG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NzIgb3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODczIG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4NzUgb3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODc2IG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4Nzggb3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODc5IG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4ODEgb3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODgyIG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLW9yeDg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1vcng4ODQgb3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotb3J4ODg1IG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKy0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQ0KKy0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQ0KKy0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQ0KKy0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQ0KKy0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQ0KKy0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQ0KKy0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQ0KKy0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQ0KKy0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQ0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK3ZlcnNpb246IDIuNTkNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfdXANCittYXhFeHBvbmVudDogOTk5DQorbWluRXhwb25lbnQ6IC05OTkNCisNCistLSBTYW5pdHkgY2hlY2sgKHRydXRoIHRhYmxlKQ0KK29yeDAwMSBvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMA0KK29yeDAwMiBvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KK29yeDAwMyBvciAgICAgICAgICAgICAxICAgIDAgLT4gICAgMQ0KK29yeDAwNCBvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMQ0KK29yeDAwNSBvciAgICAgICAgICAxMTAwIDEwMTAgLT4gMTExMA0KKy0tIGFuZCBhdCBtc2QgYW5kIG1zZC0xDQorb3J4MDA2IG9yIDAwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgICAgICAgIDANCitvcngwMDcgb3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KK29yeDAwOCBvciAxMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgMTAwMDAwMDAwDQorb3J4MDA5IG9yIDEwMDAwMDAwMCAxMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCitvcngwMTAgb3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK29yeDAxMSBvciAwMDAwMDAwMDAgMDEwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQorb3J4MDEyIG9yIDAxMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAgMTAwMDAwMDANCitvcngwMTMgb3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQ0KK29yeDAyMSBvciAxMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDAyMiBvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDAyMyBvciAgMTExMTExMTEgICAgICAxMTExMTExMSAgLT4gICAxMTExMTExMQ0KK29yeDAyNSBvciAgIDExMTExMTEgICAgICAgMTExMTExMSAgLT4gICAgMTExMTExMQ0KK29yeDAyNiBvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gICAgIDExMTExMQ0KK29yeDAyNyBvciAgICAgMTExMTEgICAgICAgICAxMTExMSAgLT4gICAgICAxMTExMQ0KK29yeDAyOCBvciAgICAgIDExMTEgICAgICAgICAgMTExMSAgLT4gICAgICAgMTExMQ0KK29yeDAyOSBvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gICAgICAgIDExMQ0KK29yeDAzMSBvciAgICAgICAgMTEgICAgICAgICAgICAxMSAgLT4gICAgICAgICAxMQ0KK29yeDAzMiBvciAgICAgICAgIDEgICAgICAgICAgICAgMSAgLT4gICAgICAgICAgMQ0KK29yeDAzMyBvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDAzNCBvciAxMTExMTExMTExMSAxMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDAzNSBvciAxMTExMTExMTExIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDAzNiBvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KKw0KK29yeDA0MCBvciAxMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDA0MSBvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDA0MiBvciAgMTExMTExMTEgICAgIDExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDA0MyBvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTExMQ0KK29yeDA0NCBvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTExMQ0KK29yeDA0NSBvciAgICAgMTExMTEgICAgIDEwMDAwMTAwMCAgLT4gIDEwMDAxMTExMQ0KK29yeDA0NiBvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KK29yeDA0NyBvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQ0KK29yeDA0OCBvciAgICAgICAgMTEgICAgIDEwMTAwMDAwMCAgLT4gIDEwMTAwMDAxMQ0KK29yeDA0OSBvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KKw0KK29yeDA1MCBvciAxMTExMTExMTExICAxICAtPiAgMTExMTExMTExDQorb3J4MDUxIG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTENCitvcngwNTIgb3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTExDQorb3J4MDUzIG9yICAgIDExMTExMTEgIDEgIC0+ICAxMTExMTExDQorb3J4MDU0IG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTENCitvcngwNTUgb3IgICAgICAxMTExMSAgMSAgLT4gIDExMTExDQorb3J4MDU2IG9yICAgICAgIDExMTEgIDEgIC0+ICAxMTExDQorb3J4MDU3IG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTENCitvcngwNTggb3IgICAgICAgICAxMSAgMSAgLT4gIDExDQorb3J4MDU5IG9yICAgICAgICAgIDEgIDEgIC0+ICAxDQorDQorb3J4MDYwIG9yIDExMTExMTExMTEgIDAgIC0+ICAxMTExMTExMTENCitvcngwNjEgb3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KK29yeDA2MiBvciAgIDExMTExMTExICAwICAtPiAgMTExMTExMTENCitvcngwNjMgb3IgICAgMTExMTExMSAgMCAgLT4gIDExMTExMTENCitvcngwNjQgb3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQ0KK29yeDA2NSBvciAgICAgIDExMTExICAwICAtPiAgMTExMTENCitvcngwNjYgb3IgICAgICAgMTExMSAgMCAgLT4gIDExMTENCitvcngwNjcgb3IgICAgICAgIDExMSAgMCAgLT4gIDExMQ0KK29yeDA2OCBvciAgICAgICAgIDExICAwICAtPiAgMTENCitvcngwNjkgb3IgICAgICAgICAgMSAgMCAgLT4gIDENCisNCitvcngwNzAgb3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMQ0KK29yeDA3MSBvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQorb3J4MDcyIG9yIDEgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQ0KK29yeDA3MyBvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMQ0KK29yeDA3NCBvciAxICAgICAgMTExMTExICAtPiAgMTExMTExDQorb3J4MDc1IG9yIDEgICAgICAgMTExMTEgIC0+ICAxMTExMQ0KK29yeDA3NiBvciAxICAgICAgICAxMTExICAtPiAgMTExMQ0KK29yeDA3NyBvciAxICAgICAgICAgMTExICAtPiAgMTExDQorb3J4MDc4IG9yIDEgICAgICAgICAgMTEgIC0+ICAxMQ0KK29yeDA3OSBvciAxICAgICAgICAgICAxICAtPiAgMQ0KKw0KK29yeDA4MCBvciAwICAxMTExMTExMTExICAtPiAgMTExMTExMTExDQorb3J4MDgxIG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTENCitvcngwODIgb3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExDQorb3J4MDgzIG9yIDAgICAgIDExMTExMTEgIC0+ICAxMTExMTExDQorb3J4MDg0IG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTENCitvcngwODUgb3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExDQorb3J4MDg2IG9yIDAgICAgICAgIDExMTEgIC0+ICAxMTExDQorb3J4MDg3IG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTENCitvcngwODggb3IgMCAgICAgICAgICAxMSAgLT4gIDExDQorb3J4MDg5IG9yIDAgICAgICAgICAgIDEgIC0+ICAxDQorDQorb3J4MDkwIG9yIDAxMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDkxIG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDkyIG9yIDExMDExMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDkzIG9yIDExMTAxMTExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDk0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorb3J4MDk1IG9yIDExMTExMDExMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDk2IG9yIDExMTExMTAxMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDk3IG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorb3J4MDk4IG9yIDExMTExMTExMCAgMTExMTAxMTExICAtPiAgMTExMTExMTExDQorDQorb3J4MTAwIG9yIDExMTEwMTExMSAgMDExMTExMTExICAtPiAgMTExMTExMTExDQorb3J4MTAxIG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgMTExMTExMTExDQorb3J4MTAyIG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgMTExMTExMTExDQorb3J4MTAzIG9yIDExMTEwMTExMSAgMTExMDExMTExICAtPiAgMTExMTExMTExDQorb3J4MTA0IG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgMTExMTAxMTExDQorb3J4MTA1IG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgMTExMTExMTExDQorb3J4MTA2IG9yIDExMTEwMTExMSAgMTExMTExMDExICAtPiAgMTExMTExMTExDQorb3J4MTA3IG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgMTExMTExMTExDQorb3J4MTA4IG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgMTExMTExMTExDQorDQorLS0gbm9uLTAvMSBzaG91bGQgbm90IGJlIGFjY2VwdGVkLCBub3Igc2hvdWxkIHNpZ25zDQorb3J4MjIwIG9yIDExMTExMTExMiAgMTExMTExMTExICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjIxIG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjIyIG9yIDU1NTU1NTU1NSAgNTU1NTU1NTU1ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjIzIG9yIDc3Nzc3Nzc3NyAgNzc3Nzc3Nzc3ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI0IG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI1IG9yIDIyMjIyMjIyMiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI2IG9yIDQ0NDQ0NDQ0NCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI3IG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI4IG9yIDg4ODg4ODg4OCAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjI5IG9yIDk5OTk5OTk5OSAgMjIyMjIyMjIyICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjMwIG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjMxIG9yIDk5OTk5OTk5OSAgNjY2NjY2NjY2ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjMyIG9yIDk5OTk5OTk5OSAgODg4ODg4ODg4ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYSBmZXcgcmFuZG9tcw0KK29yeDI0MCBvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI0MSBvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI0MiBvciAtNjMxOTE3NzcyIC03MDYwMTQ2MzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI0MyBvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI0NCBvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTVNEDQorb3J4MjUwIG9yICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNTEgb3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI1MiBvciAgODAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjUzIG9yICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNTQgb3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI1NSBvciAgNzAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjU2IG9yICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNTcgb3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI1OCBvciAgMTAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjU5IG9yICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNjAgb3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI2MSBvciAgMTAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjYyIG9yICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNjMgb3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI2NCBvciAgMDAwMDAwMDAwIDgwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjY1IG9yICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSB0ZXN0IE1TRC0xDQorb3J4MjcwIG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNzEgb3IgIDA3MDEwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI3MiBvciAgMDgwMDEwMDAwIDEwMDAwMDAwMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjczIG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNzQgb3IgIDEwMDAwMDEwMCAwMjAwMTAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI3NSBvciAgMTAwMDAwMDAwIDA3MDAwMTAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjc2IG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyNzcgb3IgIDEwMDAwMDAwMCAwOTAwMDAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTFNEDQorb3J4MjgwIG9yICAwMDEwMDAwMDIgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyODEgb3IgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI4MiBvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjgzIG9yICAwMDAwMDAwMDkgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyODQgb3IgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI4NSBvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjg2IG9yICAxMDAwMTAwMDAgMDEwMDAwMDA4IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyODcgb3IgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTWlkZGllDQorb3J4Mjg4IG9yICAwMDEwMjAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyODkgb3IgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI5MCBvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MjkxIG9yICAwMDAwOTAwMDAgMTAwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyOTIgb3IgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDI5MyBvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjk0IG9yICAxMDAwMTAxMDAgMDAwMDgwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngyOTUgb3IgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHNpZ25zDQorb3J4Mjk2IG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjk3IG9yIC0xMDAwMDEwMDAgIDAwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjk4IG9yICAxMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mjk5IG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDExMDAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCitvcngzMzEgb3IgIDIgICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDMzMiBvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzMzIG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzMzQgb3IgIDUgICAxRS0xMDA3ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDMzNSBvciAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzM2IG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzMzcgb3IgIDggICAtMUUtOTk5ICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDMzOCBvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzQxIG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNDIgb3IgIDFFLTk5OSAgICAgICAgICAgICAgIDAxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDM0MyBvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzQ0IG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNDUgb3IgIC0xRS0xMDA3ICAgICAgICAgICAgLTEwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDM0NiBvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzQ3IG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNDggb3IgIC05Ljk5OTk5OTk5RSs5OTkgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2Vycw0KK29yeDM2MSBvciAgMS4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzYyIG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNjMgb3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDM2NCBvciAgMEUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzY1IG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNjYgb3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDM3MSBvciAgMCAxLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4MzcyIG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNzMgb3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDM3NCBvciAgMCAwRSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Mzc1IG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcngzNzYgb3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIEFsbCBTcGVjaWFscyBhcmUgaW4gZXJyb3INCitvcng3ODAgb3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDc4MSBvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4NzgyIG9yIC1JbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng3ODMgb3IgLUluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDc4NCBvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Nzg1IG9yIC1JbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng3ODYgb3IgLUluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDc4NyBvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Nzg4IG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng3ODkgb3IgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDc5MCBvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4NzkxIG9yICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng3OTIgb3IgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDc5MyBvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4Nzk0IG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitvcng4MDAgb3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgwMSBvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODAyIG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MDMgb3IgIEluZiAgLTAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgwNCBvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODA1IG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MDYgb3IgIEluZiAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgwNyBvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODA4IG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MDkgb3IgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgxMCBvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODExIG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MTIgb3IgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgxMyBvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODE0IG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MTUgb3IgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK29yeDgyMSBvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODIyIG9yICBOYU4gLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MjMgb3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgyNCBvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODI1IG9yICBOYU4gIDAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MjYgb3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgyNyBvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODI4IG9yICBOYU4gIEluZiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4Mjkgb3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgzMCBvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODMxIG9yIC0xMDAwIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MzIgb3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgzMyBvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODM0IG9yICAwICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4MzUgb3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDgzNiBvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODM3IG9yICBJbmYgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCitvcng4NDEgb3IgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODQyIG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg0MyBvciAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NDQgb3IgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODQ1IG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg0NiBvciAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NDcgb3IgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODQ4IG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg0OSBvciAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NTAgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODUxIG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg1MiBvciAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NTMgb3IgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODU0IG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg1NSBvciAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NTYgb3IgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODU3IG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg1OCBvciAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitvcng4NTkgb3IgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK29yeDg2MSBvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODYyIG9yICtOYU4yICAgLTEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4NjMgb3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg2NCBvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODY1IG9yICBOYU41ICAgK05hTjYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4NjYgb3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg2NyBvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODY4IG9yICAxMDAwICAgIE5hTjkgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4Njkgb3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg3MSBvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODcyIG9yICBzTmFOMTIgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4NzMgb3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg3NCBvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODc1IG9yICBzTmFOMTUgIHNOYU4xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4NzYgb3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg3NyBvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODc4IG9yIC0xMDAwICAgIHNOYU4yMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4Nzkgb3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg4MCBvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODgxIG9yICtOYU4yNSAgK3NOYU4yNCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4ODIgb3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK29yeDg4MyBvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorb3J4ODg0IG9yICAxMDAwICAgIC1OYU4zMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitvcng4ODUgb3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9wb3dlcnNxcnQuZGVjVGVzdAppbmRleCAyNjBiOTQxLi42YzAyMWEwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcG93ZXJzcXJ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3Bvd2Vyc3FydC5kZWNUZXN0CkBAIC0xLDI5NzAgKzEsMjk3MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBwb3dlcnNxcnQuZGVjVGVzdCAtLSBkZWNpbWFsIHNxdWFyZSByb290LCB1c2luZyBwb3dlciAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAyMDA0LCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgdGFrZW4gZnJvbSBzcXVhcmVyb290LmRlY1Rlc3QgYnV0IGFyZQotLS0gZXZhbHVhdGVkIHVzaW5nIHRoZSBwb3dlciBvcGVyYXRvci4gIFRoZSBkaWZmZXJlbmNlcyBpbiByZXN1bHRzCi0tLSAoMTUzIG91dCBvZiAyODU2KSBmYWxsIGludG8gdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOgotLS0KLS0tICAgIHggICAgKiogMC41ICh4PjApIGhhcyBubyBwcmVmZXJyZWQgZXhwb25lbnQsIGFuZCBpcyBJbmV4YWN0Ci0tLSAgICAgICAgICAgICAgICAoYW5kIGhlbmNlIGZ1bGwgcHJlY2lzaW9uKTsgYWxtb3N0IGFsbCBkaWZmZXJlbmNlcyBhcmUKLS0tICAgICAgICAgICAgICAgIGluIHRoaXMgY2F0ZWdvcnkKLS0tICAgIDAuMDAgKiogMC41IGJlY29tZXMgMCAobm90IDAuMCksIGV0Yy4KLS0tICAgLTAgICAgKiogMC41IGJlY29tZXMgMCAobmV2ZXIgLTApCi0tLSAgICBTb21lIGV4YWN0IHN1Ym5vcm1hbHMgYmVjb21lIGluZXhhY3QgYW5kIGhlbmNlIHVuZGVyZmxvd3MKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl9ldmVuCi1tYXhFeHBvbmVudDogMzg0Ci1taW5leHBvbmVudDogLTM4MwotCi0tLSBiYXNpY3MKLXB3c3gwMDEgIHBvd2VyIDEgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDAwMiAgcG93ZXIgLTEgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDAwMyAgcG93ZXIgMS4wMCAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDA0ICBwb3dlciAtMS4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1wd3N4MDA1ICBwb3dlciAwICAgICAgICAwLjUgLT4gMAotcHdzeDAwNiAgcG93ZXIgMDAuMCAgICAgMC41IC0+IDAKLXB3c3gwMDcgIHBvd2VyIDAuMDAgICAgIDAuNSAtPiAwCi1wd3N4MDA4ICBwb3dlciAwMC4wMCAgICAwLjUgLT4gMAotcHdzeDAwOSAgcG93ZXIgMDAuMDAwICAgMC41IC0+IDAKLXB3c3gwMTAgIHBvd2VyIDAwLjAwMDAgIDAuNSAtPiAwCi1wd3N4MDExICBwb3dlciAwMCAgICAgICAwLjUgLT4gMAotCi1wd3N4MDEyICBwb3dlciAtMiAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1wd3N4MDEzICBwb3dlciAyICAgICAgICAwLjUgLT4gMS40MTQyMTM1NiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMTQgIHBvd2VyIC0yLjAwICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwMTUgIHBvd2VyIDIuMDAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZAotcHdzeDAxNiAgcG93ZXIgLTAgICAgICAgMC41IC0+IDAKLXB3c3gwMTcgIHBvd2VyIC0wLjAgICAgIDAuNSAtPiAwCi1wd3N4MDE4ICBwb3dlciAtMDAuMDAgICAwLjUgLT4gMAotcHdzeDAxOSAgcG93ZXIgLTAwLjAwMCAgMC41IC0+IDAKLXB3c3gwMjAgIHBvd2VyIC0wLjAwMDAgIDAuNSAtPiAwCi1wd3N4MDIxICBwb3dlciAtMEUrOSAgICAwLjUgLT4gMAotcHdzeDAyMiAgcG93ZXIgLTBFKzEwICAgMC41IC0+IDAKLXB3c3gwMjMgIHBvd2VyIC0wRSsxMSAgIDAuNSAtPiAwCi1wd3N4MDI0ICBwb3dlciAtMEUrMTIgICAwLjUgLT4gMAotcHdzeDAyNSAgcG93ZXIgLTAwICAgICAgMC41IC0+IDAKLXB3c3gwMjYgIHBvd2VyIDBFKzUgICAgIDAuNSAtPiAwCi1wd3N4MDI3ICBwb3dlciA0LjAgICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMjggIHBvd2VyIDQuMDAgICAgIDAuNSAtPiAyLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotCi1wd3N4MDMwICBwb3dlciArMC4xICAgICAgICAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMzEgIHBvd2VyIC0wLjEgICAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDAzMiAgcG93ZXIgKzAuMDEgICAgICAgICAgICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDMzICBwb3dlciAtMC4wMSAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwMzQgIHBvd2VyICswLjAwMSAgICAgICAgICAgMC41IC0+IDAuMDMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMzUgIHBvd2VyIC0wLjAwMSAgICAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDAzNiAgcG93ZXIgKzAuMDAwMDAxICAgICAgICAwLjUgLT4gMC4wMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMzcgIHBvd2VyIC0wLjAwMDAwMSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDAzOCAgcG93ZXIgKzAuMDAwMDAwMDAwMDAxICAwLjUgLT4gMC4wMDAwMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwMzkgIHBvd2VyIC0wLjAwMDAwMDAwMDAwMSAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1wd3N4MDQxICBwb3dlciAxLjEgICAgICAgICAwLjUgLT4gMS4wNDg4MDg4NSBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNDIgIHBvd2VyIDEuMTAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZAotcHdzeDA0MyAgcG93ZXIgMS4xMDAgICAgICAgMC41IC0+IDEuMDQ4ODA4ODUgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDQ0ICBwb3dlciAxLjExMCAgICAgICAwLjUgLT4gMS4wNTM1NjUzOCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNDUgIHBvd2VyIC0xLjEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNDYgIHBvd2VyIC0xLjEwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNDcgIHBvd2VyIC0xLjEwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNDggIHBvd2VyIC0xLjExMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNDkgIHBvd2VyIDkuOSAgICAgICAgIDAuNSAtPiAzLjE0NjQyNjU0IEluZXhhY3QgUm91bmRlZAotcHdzeDA1MCAgcG93ZXIgOS45MCAgICAgICAgMC41IC0+IDMuMTQ2NDI2NTQgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDUxICBwb3dlciA5LjkwMCAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNTIgIHBvd2VyIDkuOTkwICAgICAgIDAuNSAtPiAzLjE2MDY5NjEzIEluZXhhY3QgUm91bmRlZAotcHdzeDA1MyAgcG93ZXIgLTkuOSAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDA1NCAgcG93ZXIgLTkuOTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDA1NSAgcG93ZXIgLTkuOTAwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDA1NiAgcG93ZXIgLTkuOTkwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1wd3N4MDYwICBwb3dlciAgMSAgICAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA2MSAgcG93ZXIgIDEuMCAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNjIgIHBvd2VyICAxLjAwICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDYzICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAotcHdzeDA2NCAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNjUgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDY2ICBwb3dlciAgMTAuMDAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZAotcHdzeDA2NyAgcG93ZXIgIDEwMCAgICAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNjggIHBvd2VyICAxMDAuMCAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDY5ICBwb3dlciAgMTAwLjAwICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA3MCAgcG93ZXIgIDEuMTAwMEUrMyAgICAwLjUgLT4gMzMuMTY2MjQ3OSBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwNzEgIHBvd2VyICAxLjEwMDAwRSszICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDcyICBwb3dlciAtMTAuMCAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNzMgIHBvd2VyIC0xMC4wMCAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDA3NCAgcG93ZXIgLTEwMC4wICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1wd3N4MDc1ICBwb3dlciAtMTAwLjAwICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXB3c3gwNzYgIHBvd2VyIC0xLjEwMDBFKzMgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDA3NyAgcG93ZXIgLTEuMTAwMDBFKzMgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGZhbW91cyBzcXVhcmVzCi1wd3N4MDgwICBwb3dlciAgICAgMSAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA4MSAgcG93ZXIgICAgIDQgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwODIgIHBvd2VyICAgICA5ICAgMC41IC0+IDMuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDgzICBwb3dlciAgICAxNiAgIDAuNSAtPiA0LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA4NCAgcG93ZXIgICAgMjUgICAwLjUgLT4gNS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwODUgIHBvd2VyICAgIDM2ICAgMC41IC0+IDYuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDg2ICBwb3dlciAgICA0OSAgIDAuNSAtPiA3LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA4NyAgcG93ZXIgICAgNjQgICAwLjUgLT4gOC4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwODggIHBvd2VyICAgIDgxICAgMC41IC0+IDkuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDg5ICBwb3dlciAgIDEwMCAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA5MCAgcG93ZXIgICAxMjEgICAwLjUgLT4gMTEuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwOTEgIHBvd2VyICAgMTQ0ICAgMC41IC0+IDEyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDkyICBwb3dlciAgIDE2OSAgIDAuNSAtPiAxMy4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDA5MyAgcG93ZXIgICAyNTYgICAwLjUgLT4gMTYuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gwOTQgIHBvd2VyICAxMDI0ICAgMC41IC0+IDMyLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MDk1ICBwb3dlciAgNDA5NiAgIDAuNSAtPiA2NC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDEwMCAgcG93ZXIgICAwLjAxICAwLjUgLT4gMC4xMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTAxICBwb3dlciAgIDAuMDQgIDAuNSAtPiAwLjIwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMDIgIHBvd2VyICAgMC4wOSAgMC41IC0+IDAuMzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDEwMyAgcG93ZXIgICAwLjE2ICAwLjUgLT4gMC40MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTA0ICBwb3dlciAgIDAuMjUgIDAuNSAtPiAwLjUwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMDUgIHBvd2VyICAgMC4zNiAgMC41IC0+IDAuNjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDEwNiAgcG93ZXIgICAwLjQ5ICAwLjUgLT4gMC43MDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTA3ICBwb3dlciAgIDAuNjQgIDAuNSAtPiAwLjgwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMDggIHBvd2VyICAgMC44MSAgMC41IC0+IDAuOTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDEwOSAgcG93ZXIgICAxLjAwICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMTAgIHBvd2VyICAgMS4yMSAgMC41IC0+IDEuMTAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTExICBwb3dlciAgIDEuNDQgIDAuNSAtPiAxLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDExMiAgcG93ZXIgICAxLjY5ICAwLjUgLT4gMS4zMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMTMgIHBvd2VyICAgMi41NiAgMC41IC0+IDEuNjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTE0ICBwb3dlciAgMTAuMjQgIDAuNSAtPiAzLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZAotcHdzeDExNSAgcG93ZXIgIDQwLjk2ICAwLjUgLT4gNi40MDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUHJlY2lzaW9uIDEgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQotcm91bmRpbmc6ICAgIGhhbGZfZXZlbgotbWF4RXhwb25lbnQ6IDk5OQotbWluZXhwb25lbnQ6IC05OTkKLXByZWNpc2lvbjogICAxCi1wd3N4MTIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIwNSAgcG93ZXIgMUUtMyAgMC41IC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMUUrMSBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjA4ICBwb3dlciAxRSszICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIxNSAgcG93ZXIgMkUrMiAgMC41IC0+IDFFKzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMTYgIHBvd2VyIDJFKzMgIDAuNSAtPiA0RSsxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMTggIHBvd2VyIDAuMDMgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMTkgIHBvd2VyIDMuMEUtMSAgMC41IC0+IDAuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIyMSAgcG93ZXIgM0UtMyAgMC41IC0+IDAuMDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMjIgIHBvd2VyIDNFKzEgIDAuNSAtPiA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjIzICBwb3dlciAzRSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDVFKzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIyNiAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjMwICBwb3dlciA0RSsxICAwLjUgLT4gNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDJFKzEgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIzMiAgcG93ZXIgNEUrMyAgMC41IC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIzNSAgcG93ZXIgNS4wRS0xICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTIzOCAgcG93ZXIgNUUrMSAgMC41IC0+IDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyRSsxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjQwICBwb3dlciA1RSszICAwLjUgLT4gN0UrMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNDggIHBvd2VyIDZFKzMgIDAuNSAtPiA4RSsxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjQ5ICBwb3dlciAwLjcgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNTEgIHBvd2VyIDcuMEUtMSAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI1MiAgcG93ZXIgNy4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNTQgIHBvd2VyIDdFKzEgIDAuNSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI1NiAgcG93ZXIgN0UrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI1OSAgcG93ZXIgOC4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI2MiAgcG93ZXIgOEUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjY0ICBwb3dlciA4RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNjcgIHBvd2VyIDkuMEUtMSAgMC41IC0+IDAuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MTI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDEyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjcxICBwb3dlciA5RSsyICAwLjUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQKLXB3c3gxMjcyICBwb3dlciA5RSszICAwLjUgLT4gOUUrMSAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIFByZWNpc2lvbiAyIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLW1heEV4cG9uZW50OiA5OTkKLW1pbmV4cG9uZW50OiAtOTk5Ci1wcmVjaXNpb246ICAgMgotcHdzeDIyMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMDIgIHBvd2VyIDAuMDEgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMDMgIHBvd2VyIDEuMEUtMSAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMDQgIHBvd2VyIDEuMDBFLTIgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIwNiAgcG93ZXIgMUUrMSAgMC41IC0+IDMuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIwNyAgcG93ZXIgMUUrMiAgMC41IC0+IDEwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMDggIHBvd2VyIDFFKzMgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIwOSAgcG93ZXIgMC4yICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIxMCAgcG93ZXIgMC4wMiAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMTEgIHBvd2VyIDIuMEUtMSAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMTIgIHBvd2VyIDIuMDBFLTIgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjEzICBwb3dlciAyRS0zICAwLjUgLT4gMC4wNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMTQgIHBvd2VyIDJFKzEgIDAuNSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDQ1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjI0ICBwb3dlciAzRSszICAwLjUgLT4gNTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjUgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjcgIHBvd2VyIDQuMEUtMSAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjggIHBvd2VyIDQuMDBFLTIgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIzMSAgcG93ZXIgNEUrMiAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIzMyAgcG93ZXIgMC41ICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjIzNCAgcG93ZXIgMC4wNSAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMzYgIHBvd2VyIDUuMDBFLTIgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjM3ICBwb3dlciA1RS0zICAwLjUgLT4gMC4wNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3LjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyMzkgIHBvd2VyIDVFKzIgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI0MCAgcG93ZXIgNUUrMyAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjQxICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjQyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI0MyAgcG93ZXIgNi4wRS0xICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI0NCAgcG93ZXIgNi4wMEUtMiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNDUgIHBvd2VyIDZFLTMgIDAuNSAtPiAwLjA3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI0NiAgcG93ZXIgNkUrMSAgMC41IC0+IDcuNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOC40ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjU1ICBwb3dlciA3RSsyICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI1NyAgcG93ZXIgMC44ICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI1OCAgcG93ZXIgMC4wOCAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNjAgIHBvd2VyIDguMDBFLTIgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjYxICBwb3dlciA4RS0zICAwLjUgLT4gMC4wODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA4LjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNjMgIHBvd2VyIDhFKzIgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI2NCAgcG93ZXIgOEUrMyAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjY1ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjY2ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI2OSAgcG93ZXIgOUUtMyAgMC41IC0+IDAuMDk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjcwICBwb3dlciA5RSsxICAwLjUgLT4gOS41ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjcxICBwb3dlciA5RSsyICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjczICBwb3dlciAwLjEwICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI3NCAgcG93ZXIgMC4wMTAgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZAotcHdzeDIyNzUgIHBvd2VyIDEwLjBFLTEgIDAuNSAtPiAxLjAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI3NiAgcG93ZXIgMTAuMDBFLTIgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjc3ICBwb3dlciAxMEUtMyAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI3OCAgcG93ZXIgMTBFKzEgIDAuNSAtPiAxMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjc5ICBwb3dlciAxMEUrMiAgMC41IC0+IDMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjgwICBwb3dlciAxMEUrMyAgMC41IC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjgxICBwb3dlciAwLjExICAwLjUgLT4gMC4zMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI4MiAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjgzICBwb3dlciAxMS4wRS0xICAwLjUgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjg0ICBwb3dlciAxMS4wMEUtMiAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyODUgIHBvd2VyIDExRS0zICAwLjUgLT4gMC4xMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI4NiAgcG93ZXIgMTFFKzEgIDAuNSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI4NyAgcG93ZXIgMTFFKzIgIDAuNSAtPiAzMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI4OCAgcG93ZXIgMTFFKzMgIDAuNSAtPiAxLjBFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyODkgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjkwICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyOTEgIHBvd2VyIDEyLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyOTIgIHBvd2VyIDEyLjAwRS0yICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI5MyAgcG93ZXIgMTJFLTMgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjk0ICBwb3dlciAxMkUrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjk1ICBwb3dlciAxMkUrMiAgMC41IC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMjk2ICBwb3dlciAxMkUrMyAgMC41IC0+IDEuMUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI5NyAgcG93ZXIgMC4xMyAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDIyOTggIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjI5OSAgcG93ZXIgMTMuMEUtMSAgMC41IC0+IDEuMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMwMCAgcG93ZXIgMTMuMDBFLTIgIDAuNSAtPiAwLjM2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzAxICBwb3dlciAxM0UtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMDIgIHBvd2VyIDEzRSsxICAwLjUgLT4gMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMDMgIHBvd2VyIDEzRSsyICAwLjUgLT4gMzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMDQgIHBvd2VyIDEzRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzA1ICBwb3dlciAwLjE0ICAwLjUgLT4gMC4zNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMwNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzA3ICBwb3dlciAxNC4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzA4ICBwb3dlciAxNC4wMEUtMiAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMDkgIHBvd2VyIDE0RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMxMCAgcG93ZXIgMTRFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMxMSAgcG93ZXIgMTRFKzIgIDAuNSAtPiAzNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMxMiAgcG93ZXIgMTRFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMTMgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzE0ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMTUgIHBvd2VyIDE1LjBFLTEgIDAuNSAtPiAxLjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMTYgIHBvd2VyIDE1LjAwRS0yICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMxNyAgcG93ZXIgMTVFLTMgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzE4ICBwb3dlciAxNUUrMSAgMC41IC0+IDEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzE5ICBwb3dlciAxNUUrMiAgMC41IC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzIwICBwb3dlciAxNUUrMyAgMC41IC0+IDEuMkUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMyMSAgcG93ZXIgMC4xNiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMyMiAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzIzICBwb3dlciAxNi4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzI0ICBwb3dlciAxNi4wMEUtMiAgMC41IC0+IDAuNDAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMyNSAgcG93ZXIgMTZFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzI2ICBwb3dlciAxNkUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzI3ICBwb3dlciAxNkUrMiAgMC41IC0+IDQwIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMjggIHBvd2VyIDE2RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzI5ICBwb3dlciAwLjE3ICAwLjUgLT4gMC40MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMzMCAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzMxICBwb3dlciAxNy4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzMyICBwb3dlciAxNy4wMEUtMiAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMzMgIHBvd2VyIDE3RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMzNCAgcG93ZXIgMTdFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMzNSAgcG93ZXIgMTdFKzIgIDAuNSAtPiA0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjMzNiAgcG93ZXIgMTdFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMzcgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzM4ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzMzkgIHBvd2VyIDE4LjBFLTEgIDAuNSAtPiAxLjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNDAgIHBvd2VyIDE4LjAwRS0yICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM0MSAgcG93ZXIgMThFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzQyICBwb3dlciAxOEUrMSAgMC41IC0+IDEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzQzICBwb3dlciAxOEUrMiAgMC41IC0+IDQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzQ0ICBwb3dlciAxOEUrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM0NSAgcG93ZXIgMC4xOSAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNDYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM0NyAgcG93ZXIgMTkuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM0OCAgcG93ZXIgMTkuMDBFLTIgIDAuNSAtPiAwLjQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzQ5ICBwb3dlciAxOUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNTAgIHBvd2VyIDE5RSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNTEgIHBvd2VyIDE5RSsyICAwLjUgLT4gNDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNTIgIHBvd2VyIDE5RSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzUzICBwb3dlciAwLjIwICAwLjUgLT4gMC40NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM1NCAgcG93ZXIgMC4wMjAgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzU1ICBwb3dlciAyMC4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzU2ICBwb3dlciAyMC4wMEUtMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNTcgIHBvd2VyIDIwRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM1OCAgcG93ZXIgMjBFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM1OSAgcG93ZXIgMjBFKzIgIDAuNSAtPiA0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM2MCAgcG93ZXIgMjBFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNjEgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzYyICBwb3dlciAwLjAyMSAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNjMgIHBvd2VyIDIxLjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNjQgIHBvd2VyIDIxLjAwRS0yICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM2NSAgcG93ZXIgMjFFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzY2ICBwb3dlciAyMUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzY3ICBwb3dlciAyMUUrMiAgMC41IC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzY4ICBwb3dlciAyMUUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM2OSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNzAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM3MSAgcG93ZXIgMjIuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM3MiAgcG93ZXIgMjIuMDBFLTIgIDAuNSAtPiAwLjQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzczICBwb3dlciAyMkUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNzQgIHBvd2VyIDIyRSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNzUgIHBvd2VyIDIyRSsyICAwLjUgLT4gNDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzNzYgIHBvd2VyIDIyRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzc3ICBwb3dlciAwLjIzICAwLjUgLT4gMC40OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM3OCAgcG93ZXIgMC4wMjMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzc5ICBwb3dlciAyMy4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzgwICBwb3dlciAyMy4wMEUtMiAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZAotcHdzeDIzODEgIHBvd2VyIDIzRS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM4MiAgcG93ZXIgMjNFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM4MyAgcG93ZXIgMjNFKzIgIDAuNSAtPiA0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM4NCAgcG93ZXIgMjNFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzODUgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzg2ICBwb3dlciAwLjAyNCAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzODcgIHBvd2VyIDI0LjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDIzODggIHBvd2VyIDI0LjAwRS0yICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM4OSAgcG93ZXIgMjRFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzkwICBwb3dlciAyNEUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzkxICBwb3dlciAyNEUrMiAgMC41IC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzkyICBwb3dlciAyNEUrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM5MyAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM5NCAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzk1ICBwb3dlciAyNS4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzk2ICBwb3dlciAyNS4wMEUtMiAgMC41IC0+IDAuNTAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjM5NyAgcG93ZXIgMjVFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzk4ICBwb3dlciAyNUUrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyMzk5ICBwb3dlciAyNUUrMiAgMC41IC0+IDUwIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MDAgIHBvd2VyIDI1RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDAxICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQwMiAgcG93ZXIgMC4wMjYgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDAzICBwb3dlciAyNi4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDA0ICBwb3dlciAyNi4wMEUtMiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MDUgIHBvd2VyIDI2RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQwNiAgcG93ZXIgMjZFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQwNyAgcG93ZXIgMjZFKzIgIDAuNSAtPiA1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQwOCAgcG93ZXIgMjZFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDEwICBwb3dlciAwLjAyNyAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MTEgIHBvd2VyIDI3LjBFLTEgIDAuNSAtPiAxLjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MTIgIHBvd2VyIDI3LjAwRS0yICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQxMyAgcG93ZXIgMjdFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDE0ICBwb3dlciAyN0UrMSAgMC41IC0+IDE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDE1ICBwb3dlciAyN0UrMiAgMC41IC0+IDUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDE2ICBwb3dlciAyN0UrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQxNyAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MTggIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQxOSAgcG93ZXIgMjguMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQyMCAgcG93ZXIgMjguMDBFLTIgIDAuNSAtPiAwLjUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDIxICBwb3dlciAyOEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MjIgIHBvd2VyIDI4RSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MjMgIHBvd2VyIDI4RSsyICAwLjUgLT4gNTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MjQgIHBvd2VyIDI4RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDI1ICBwb3dlciAwLjI5ICAwLjUgLT4gMC41NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQyNiAgcG93ZXIgMC4wMjkgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDI3ICBwb3dlciAyOS4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDI4ICBwb3dlciAyOS4wMEUtMiAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MjkgIHBvd2VyIDI5RS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQzMCAgcG93ZXIgMjlFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQzMSAgcG93ZXIgMjlFKzIgIDAuNSAtPiA1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQzMiAgcG93ZXIgMjlFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MzMgIHBvd2VyIDAuMzAgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDM0ICBwb3dlciAwLjAzMCAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MzUgIHBvd2VyIDMwLjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0MzYgIHBvd2VyIDMwLjAwRS0yICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQzNyAgcG93ZXIgMzBFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDM4ICBwb3dlciAzMEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDM5ICBwb3dlciAzMEUrMiAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDQwICBwb3dlciAzMEUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ0MSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NDIgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ0MyAgcG93ZXIgMzEuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ0NCAgcG93ZXIgMzEuMDBFLTIgIDAuNSAtPiAwLjU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDQ1ICBwb3dlciAzMUUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NDYgIHBvd2VyIDMxRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NDcgIHBvd2VyIDMxRSsyICAwLjUgLT4gNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NDggIHBvd2VyIDMxRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDQ5ICBwb3dlciAwLjMyICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ1MCAgcG93ZXIgMC4wMzIgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDUxICBwb3dlciAzMi4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDUyICBwb3dlciAzMi4wMEUtMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NTMgIHBvd2VyIDMyRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ1NCAgcG93ZXIgMzJFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ1NSAgcG93ZXIgMzJFKzIgIDAuNSAtPiA1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ1NiAgcG93ZXIgMzJFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NTcgIHBvd2VyIDAuMzMgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDU4ICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NTkgIHBvd2VyIDMzLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NjAgIHBvd2VyIDMzLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ2MSAgcG93ZXIgMzNFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDYyICBwb3dlciAzM0UrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDYzICBwb3dlciAzM0UrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDY0ICBwb3dlciAzM0UrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ2NSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NjYgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ2NyAgcG93ZXIgMzQuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ2OCAgcG93ZXIgMzQuMDBFLTIgIDAuNSAtPiAwLjU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDY5ICBwb3dlciAzNEUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NzAgIHBvd2VyIDM0RSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NzEgIHBvd2VyIDM0RSsyICAwLjUgLT4gNTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NzIgIHBvd2VyIDM0RSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDczICBwb3dlciAwLjM1ICAwLjUgLT4gMC41OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ3NCAgcG93ZXIgMC4wMzUgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDc1ICBwb3dlciAzNS4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDc2ICBwb3dlciAzNS4wMEUtMiAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0NzcgIHBvd2VyIDM1RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ3OCAgcG93ZXIgMzVFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ3OSAgcG93ZXIgMzVFKzIgIDAuNSAtPiA1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4MCAgcG93ZXIgMzVFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0ODEgIHBvd2VyIDAuMzYgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAotcHdzeDI0ODIgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4MyAgcG93ZXIgMzYuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4NCAgcG93ZXIgMzYuMDBFLTIgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZAotcHdzeDI0ODUgIHBvd2VyIDM2RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4NiAgcG93ZXIgMzZFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4NyAgcG93ZXIgMzZFKzIgIDAuNSAtPiA2MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDg4ICBwb3dlciAzNkUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ4OSAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0OTAgIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ5MSAgcG93ZXIgMzcuMEUtMSAgMC41IC0+IDEuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ5MiAgcG93ZXIgMzcuMDBFLTIgIDAuNSAtPiAwLjYxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDkzICBwb3dlciAzN0UtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0OTQgIHBvd2VyIDM3RSsxICAwLjUgLT4gMTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0OTUgIHBvd2VyIDM3RSsyICAwLjUgLT4gNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI0OTYgIHBvd2VyIDM3RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDk3ICBwb3dlciAwLjM4ICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjQ5OCAgcG93ZXIgMC4wMzggIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNDk5ICBwb3dlciAzOC4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTAwICBwb3dlciAzOC4wMEUtMiAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MDEgIHBvd2VyIDM4RS0zICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUwMiAgcG93ZXIgMzhFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUwMyAgcG93ZXIgMzhFKzIgIDAuNSAtPiA2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUwNCAgcG93ZXIgMzhFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MDUgIHBvd2VyIDAuMzkgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTA2ICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MDcgIHBvd2VyIDM5LjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MDggIHBvd2VyIDM5LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUwOSAgcG93ZXIgMzlFLTMgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTEwICBwb3dlciAzOUUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTExICBwb3dlciAzOUUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTEyICBwb3dlciAzOUUrMyAgMC41IC0+IDIuMEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUxMyAgcG93ZXIgMC40MCAgMC41IC0+IDAuNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MTQgIHBvd2VyIDAuMDQwICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTE1ICBwb3dlciA0MC4wRS0xICAwLjUgLT4gMi4wIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MTYgIHBvd2VyIDQwLjAwRS0yICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUxNyAgcG93ZXIgNDBFLTMgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MTggIHBvd2VyIDQwRSsxICAwLjUgLT4gMjAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUxOSAgcG93ZXIgNDBFKzIgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUyMCAgcG93ZXIgNDBFKzMgIDAuNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUyMSAgcG93ZXIgMC40MSAgMC41IC0+IDAuNjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MjIgIHBvd2VyIDAuMDQxICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUyMyAgcG93ZXIgNDEuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUyNCAgcG93ZXIgNDEuMDBFLTIgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTI1ICBwb3dlciA0MUUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MjYgIHBvd2VyIDQxRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MjcgIHBvd2VyIDQxRSsyICAwLjUgLT4gNjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MjggIHBvd2VyIDQxRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTI5ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUzMCAgcG93ZXIgMC4wNDIgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTMxICBwb3dlciA0Mi4wRS0xICAwLjUgLT4gMi4wICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTMyICBwb3dlciA0Mi4wMEUtMiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MzMgIHBvd2VyIDQyRS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUzNCAgcG93ZXIgNDJFKzEgIDAuNSAtPiAyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUzNSAgcG93ZXIgNDJFKzIgIDAuNSAtPiA2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjUzNiAgcG93ZXIgNDJFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MzcgIHBvd2VyIDAuNDMgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTM4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1MzkgIHBvd2VyIDQzLjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NDAgIHBvd2VyIDQzLjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU0MSAgcG93ZXIgNDNFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTQyICBwb3dlciA0M0UrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTQzICBwb3dlciA0M0UrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTQ0ICBwb3dlciA0M0UrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU0NSAgcG93ZXIgMC40NCAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NDYgIHBvd2VyIDAuMDQ0ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU0NyAgcG93ZXIgNDQuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU0OCAgcG93ZXIgNDQuMDBFLTIgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTQ5ICBwb3dlciA0NEUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NTAgIHBvd2VyIDQ0RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NTEgIHBvd2VyIDQ0RSsyICAwLjUgLT4gNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NTIgIHBvd2VyIDQ0RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTUzICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU1NCAgcG93ZXIgMC4wNDUgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTU1ICBwb3dlciA0NS4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTU2ICBwb3dlciA0NS4wMEUtMiAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NTcgIHBvd2VyIDQ1RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU1OCAgcG93ZXIgNDVFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU1OSAgcG93ZXIgNDVFKzIgIDAuNSAtPiA2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU2MCAgcG93ZXIgNDVFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NjEgIHBvd2VyIDAuNDYgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTYyICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NjMgIHBvd2VyIDQ2LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NjQgIHBvd2VyIDQ2LjAwRS0yICAwLjUgLT4gMC42OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU2NSAgcG93ZXIgNDZFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTY2ICBwb3dlciA0NkUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTY3ICBwb3dlciA0NkUrMiAgMC41IC0+IDY4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTY4ICBwb3dlciA0NkUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU2OSAgcG93ZXIgMC40NyAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NzAgIHBvd2VyIDAuMDQ3ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU3MSAgcG93ZXIgNDcuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU3MiAgcG93ZXIgNDcuMDBFLTIgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTczICBwb3dlciA0N0UtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NzQgIHBvd2VyIDQ3RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NzUgIHBvd2VyIDQ3RSsyICAwLjUgLT4gNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1NzYgIHBvd2VyIDQ3RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTc3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU3OCAgcG93ZXIgMC4wNDggIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTc5ICBwb3dlciA0OC4wRS0xICAwLjUgLT4gMi4yICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTgwICBwb3dlciA0OC4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1ODEgIHBvd2VyIDQ4RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU4MiAgcG93ZXIgNDhFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU4MyAgcG93ZXIgNDhFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU4NCAgcG93ZXIgNDhFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1ODUgIHBvd2VyIDAuNDkgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAotcHdzeDI1ODYgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU4NyAgcG93ZXIgNDkuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU4OCAgcG93ZXIgNDkuMDBFLTIgIDAuNSAtPiAwLjcwIEluZXhhY3QgUm91bmRlZAotcHdzeDI1ODkgIHBvd2VyIDQ5RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU5MCAgcG93ZXIgNDlFKzEgIDAuNSAtPiAyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU5MSAgcG93ZXIgNDlFKzIgIDAuNSAtPiA3MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTkyICBwb3dlciA0OUUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU5MyAgcG93ZXIgMC41MCAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1OTQgIHBvd2VyIDAuMDUwICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU5NSAgcG93ZXIgNTAuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjU5NiAgcG93ZXIgNTAuMDBFLTIgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNTk3ICBwb3dlciA1MEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1OTggIHBvd2VyIDUwRSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI1OTkgIHBvd2VyIDUwRSsyICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MDAgIHBvd2VyIDUwRSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjAxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYwMiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjAzICBwb3dlciA1MS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjA0ICBwb3dlciA1MS4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MDUgIHBvd2VyIDUxRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYwNiAgcG93ZXIgNTFFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYwNyAgcG93ZXIgNTFFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYwOCAgcG93ZXIgNTFFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MDkgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjEwICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MTEgIHBvd2VyIDUyLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MTIgIHBvd2VyIDUyLjAwRS0yICAwLjUgLT4gMC43MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYxMyAgcG93ZXIgNTJFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjE0ICBwb3dlciA1MkUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjE1ICBwb3dlciA1MkUrMiAgMC41IC0+IDcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjE2ICBwb3dlciA1MkUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYxNyAgcG93ZXIgMC41MyAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MTggIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYxOSAgcG93ZXIgNTMuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYyMCAgcG93ZXIgNTMuMDBFLTIgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjIxICBwb3dlciA1M0UtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MjIgIHBvd2VyIDUzRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MjMgIHBvd2VyIDUzRSsyICAwLjUgLT4gNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MjQgIHBvd2VyIDUzRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjI1ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYyNiAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjI3ICBwb3dlciA1NC4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjI4ICBwb3dlciA1NC4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MjkgIHBvd2VyIDU0RS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYzMCAgcG93ZXIgNTRFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYzMSAgcG93ZXIgNTRFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYzMiAgcG93ZXIgNTRFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MzMgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjM0ICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MzUgIHBvd2VyIDU1LjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2MzYgIHBvd2VyIDU1LjAwRS0yICAwLjUgLT4gMC43NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjYzNyAgcG93ZXIgNTVFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjM4ICBwb3dlciA1NUUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjM5ICBwb3dlciA1NUUrMiAgMC41IC0+IDc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjQwICBwb3dlciA1NUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY0MSAgcG93ZXIgMC41NiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY0MyAgcG93ZXIgNTYuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY0NCAgcG93ZXIgNTYuMDBFLTIgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjQ1ICBwb3dlciA1NkUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NDYgIHBvd2VyIDU2RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NDcgIHBvd2VyIDU2RSsyICAwLjUgLT4gNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NDggIHBvd2VyIDU2RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjQ5ICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY1MCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjUxICBwb3dlciA1Ny4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjUyICBwb3dlciA1Ny4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NTMgIHBvd2VyIDU3RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY1NCAgcG93ZXIgNTdFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY1NSAgcG93ZXIgNTdFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY1NiAgcG93ZXIgNTdFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NTcgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjU4ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NTkgIHBvd2VyIDU4LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NjAgIHBvd2VyIDU4LjAwRS0yICAwLjUgLT4gMC43NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY2MSAgcG93ZXIgNThFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjYyICBwb3dlciA1OEUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjYzICBwb3dlciA1OEUrMiAgMC41IC0+IDc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjY0ICBwb3dlciA1OEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY2NSAgcG93ZXIgMC41OSAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NjYgIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY2NyAgcG93ZXIgNTkuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY2OCAgcG93ZXIgNTkuMDBFLTIgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjY5ICBwb3dlciA1OUUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NzAgIHBvd2VyIDU5RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NzEgIHBvd2VyIDU5RSsyICAwLjUgLT4gNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NzIgIHBvd2VyIDU5RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjczICBwb3dlciAwLjYwICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY3NCAgcG93ZXIgMC4wNjAgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjc1ICBwb3dlciA2MC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjc2ICBwb3dlciA2MC4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2NzcgIHBvd2VyIDYwRS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY3OCAgcG93ZXIgNjBFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY3OSAgcG93ZXIgNjBFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY4MCAgcG93ZXIgNjBFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2ODEgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjgyICBwb3dlciAwLjA2MSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2ODMgIHBvd2VyIDYxLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2ODQgIHBvd2VyIDYxLjAwRS0yICAwLjUgLT4gMC43OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY4NSAgcG93ZXIgNjFFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjg2ICBwb3dlciA2MUUrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjg3ICBwb3dlciA2MUUrMiAgMC41IC0+IDc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjg4ICBwb3dlciA2MUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY4OSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2OTAgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY5MSAgcG93ZXIgNjIuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY5MiAgcG93ZXIgNjIuMDBFLTIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjkzICBwb3dlciA2MkUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2OTQgIHBvd2VyIDYyRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2OTUgIHBvd2VyIDYyRSsyICAwLjUgLT4gNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI2OTYgIHBvd2VyIDYyRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjk3ICBwb3dlciAwLjYzICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjY5OCAgcG93ZXIgMC4wNjMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNjk5ICBwb3dlciA2My4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzAwICBwb3dlciA2My4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MDEgIHBvd2VyIDYzRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcwMiAgcG93ZXIgNjNFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcwMyAgcG93ZXIgNjNFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcwNCAgcG93ZXIgNjNFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MDUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MDYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcwNyAgcG93ZXIgNjQuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcwOCAgcG93ZXIgNjQuMDBFLTIgIDAuNSAtPiAwLjgwIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MDkgIHBvd2VyIDY0RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcxMCAgcG93ZXIgNjRFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcxMSAgcG93ZXIgNjRFKzIgIDAuNSAtPiA4MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzEyICBwb3dlciA2NEUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcxMyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MTQgIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcxNSAgcG93ZXIgNjUuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcxNiAgcG93ZXIgNjUuMDBFLTIgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzE3ICBwb3dlciA2NUUtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MTggIHBvd2VyIDY1RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MTkgIHBvd2VyIDY1RSsyICAwLjUgLT4gODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MjAgIHBvd2VyIDY1RSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzIxICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcyMiAgcG93ZXIgMC4wNjYgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzIzICBwb3dlciA2Ni4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzI0ICBwb3dlciA2Ni4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MjUgIHBvd2VyIDY2RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcyNiAgcG93ZXIgNjZFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcyNyAgcG93ZXIgNjZFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjcyOCAgcG93ZXIgNjZFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MjkgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzMwICBwb3dlciAwLjA2NyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MzEgIHBvd2VyIDY3LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MzIgIHBvd2VyIDY3LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjczMyAgcG93ZXIgNjdFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzM0ICBwb3dlciA2N0UrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzM1ICBwb3dlciA2N0UrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzM2ICBwb3dlciA2N0UrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjczNyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3MzggIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjczOSAgcG93ZXIgNjguMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc0MCAgcG93ZXIgNjguMDBFLTIgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzQxICBwb3dlciA2OEUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NDIgIHBvd2VyIDY4RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NDMgIHBvd2VyIDY4RSsyICAwLjUgLT4gODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NDQgIHBvd2VyIDY4RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzQ1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc0NiAgcG93ZXIgMC4wNjkgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzQ3ICBwb3dlciA2OS4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzQ4ICBwb3dlciA2OS4wMEUtMiAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NDkgIHBvd2VyIDY5RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc1MCAgcG93ZXIgNjlFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc1MSAgcG93ZXIgNjlFKzIgIDAuNSAtPiA4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc1MiAgcG93ZXIgNjlFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NTMgIHBvd2VyIDAuNzAgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzU0ICBwb3dlciAwLjA3MCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NTUgIHBvd2VyIDcwLjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NTYgIHBvd2VyIDcwLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc1NyAgcG93ZXIgNzBFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzU4ICBwb3dlciA3MEUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzU5ICBwb3dlciA3MEUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzYwICBwb3dlciA3MEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc2MSAgcG93ZXIgMC43MSAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NjIgIHBvd2VyIDAuMDcxICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc2MyAgcG93ZXIgNzEuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc2NCAgcG93ZXIgNzEuMDBFLTIgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzY1ICBwb3dlciA3MUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NjYgIHBvd2VyIDcxRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NjcgIHBvd2VyIDcxRSsyICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NjggIHBvd2VyIDcxRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzY5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc3MCAgcG93ZXIgMC4wNzIgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzcxICBwb3dlciA3Mi4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzcyICBwb3dlciA3Mi4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NzMgIHBvd2VyIDcyRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc3NCAgcG93ZXIgNzJFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc3NSAgcG93ZXIgNzJFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc3NiAgcG93ZXIgNzJFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NzcgIHBvd2VyIDAuNzMgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzc4ICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3NzkgIHBvd2VyIDczLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3ODAgIHBvd2VyIDczLjAwRS0yICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc4MSAgcG93ZXIgNzNFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzgyICBwb3dlciA3M0UrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzgzICBwb3dlciA3M0UrMiAgMC41IC0+IDg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzg0ICBwb3dlciA3M0UrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc4NSAgcG93ZXIgMC43NCAgMC41IC0+IDAuODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3ODYgIHBvd2VyIDAuMDc0ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc4NyAgcG93ZXIgNzQuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc4OCAgcG93ZXIgNzQuMDBFLTIgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzg5ICBwb3dlciA3NEUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3OTAgIHBvd2VyIDc0RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3OTEgIHBvd2VyIDc0RSsyICAwLjUgLT4gODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3OTIgIHBvd2VyIDc0RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzkzICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc5NCAgcG93ZXIgMC4wNzUgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzk1ICBwb3dlciA3NS4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyNzk2ICBwb3dlciA3NS4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI3OTcgIHBvd2VyIDc1RS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc5OCAgcG93ZXIgNzVFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjc5OSAgcG93ZXIgNzVFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgwMCAgcG93ZXIgNzVFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MDEgIHBvd2VyIDAuNzYgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODAyICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MDMgIHBvd2VyIDc2LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MDQgIHBvd2VyIDc2LjAwRS0yICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgwNSAgcG93ZXIgNzZFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODA2ICBwb3dlciA3NkUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODA3ICBwb3dlciA3NkUrMiAgMC41IC0+IDg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODA4ICBwb3dlciA3NkUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgwOSAgcG93ZXIgMC43NyAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MTAgIHBvd2VyIDAuMDc3ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgxMSAgcG93ZXIgNzcuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgxMiAgcG93ZXIgNzcuMDBFLTIgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODEzICBwb3dlciA3N0UtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MTQgIHBvd2VyIDc3RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MTUgIHBvd2VyIDc3RSsyICAwLjUgLT4gODggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MTYgIHBvd2VyIDc3RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODE3ICBwb3dlciAwLjc4ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgxOCAgcG93ZXIgMC4wNzggIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODE5ICBwb3dlciA3OC4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODIwICBwb3dlciA3OC4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MjEgIHBvd2VyIDc4RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgyMiAgcG93ZXIgNzhFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgyMyAgcG93ZXIgNzhFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgyNCAgcG93ZXIgNzhFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MjUgIHBvd2VyIDAuNzkgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODI2ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MjcgIHBvd2VyIDc5LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MjggIHBvd2VyIDc5LjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgyOSAgcG93ZXIgNzlFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODMwICBwb3dlciA3OUUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODMxICBwb3dlciA3OUUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODMyICBwb3dlciA3OUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgzMyAgcG93ZXIgMC44MCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MzQgIHBvd2VyIDAuMDgwICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgzNSAgcG93ZXIgODAuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjgzNiAgcG93ZXIgODAuMDBFLTIgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODM3ICBwb3dlciA4MEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MzggIHBvd2VyIDgwRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4MzkgIHBvd2VyIDgwRSsyICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDAgIHBvd2VyIDgwRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODQxICBwb3dlciAwLjgxICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODQyICBwb3dlciAwLjA4MSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDMgIHBvd2VyIDgxLjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDQgIHBvd2VyIDgxLjAwRS0yICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODQ1ICBwb3dlciA4MUUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDYgIHBvd2VyIDgxRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDcgIHBvd2VyIDgxRSsyICAwLjUgLT4gOTAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg0OCAgcG93ZXIgODFFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NDkgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODUwICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NTEgIHBvd2VyIDgyLjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NTIgIHBvd2VyIDgyLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg1MyAgcG93ZXIgODJFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODU0ICBwb3dlciA4MkUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODU1ICBwb3dlciA4MkUrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODU2ICBwb3dlciA4MkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg1NyAgcG93ZXIgMC44MyAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NTggIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg1OSAgcG93ZXIgODMuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg2MCAgcG93ZXIgODMuMDBFLTIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODYxICBwb3dlciA4M0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NjIgIHBvd2VyIDgzRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NjMgIHBvd2VyIDgzRSsyICAwLjUgLT4gOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NjQgIHBvd2VyIDgzRSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODY1ICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg2NiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODY3ICBwb3dlciA4NC4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODY4ICBwb3dlciA4NC4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NjkgIHBvd2VyIDg0RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg3MCAgcG93ZXIgODRFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg3MSAgcG93ZXIgODRFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg3MiAgcG93ZXIgODRFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NzMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODc0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NzUgIHBvd2VyIDg1LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4NzYgIHBvd2VyIDg1LjAwRS0yICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg3NyAgcG93ZXIgODVFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODc4ICBwb3dlciA4NUUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODc5ICBwb3dlciA4NUUrMiAgMC41IC0+IDkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODgwICBwb3dlciA4NUUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg4MSAgcG93ZXIgMC44NiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4ODIgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg4MyAgcG93ZXIgODYuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg4NCAgcG93ZXIgODYuMDBFLTIgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODg1ICBwb3dlciA4NkUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4ODYgIHBvd2VyIDg2RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4ODcgIHBvd2VyIDg2RSsyICAwLjUgLT4gOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4ODggIHBvd2VyIDg2RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODg5ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg5MCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODkxICBwb3dlciA4Ny4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODkyICBwb3dlciA4Ny4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4OTMgIHBvd2VyIDg3RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg5NCAgcG93ZXIgODdFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg5NSAgcG93ZXIgODdFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjg5NiAgcG93ZXIgODdFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4OTcgIHBvd2VyIDAuODggIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyODk4ICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI4OTkgIHBvd2VyIDg4LjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MDAgIHBvd2VyIDg4LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkwMSAgcG93ZXIgODhFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTAyICBwb3dlciA4OEUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTAzICBwb3dlciA4OEUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTA0ICBwb3dlciA4OEUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkwNSAgcG93ZXIgMC44OSAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MDYgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkwNyAgcG93ZXIgODkuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkwOCAgcG93ZXIgODkuMDBFLTIgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTA5ICBwb3dlciA4OUUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MTAgIHBvd2VyIDg5RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MTEgIHBvd2VyIDg5RSsyICAwLjUgLT4gOTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MTIgIHBvd2VyIDg5RSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTEzICBwb3dlciAwLjkwICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkxNCAgcG93ZXIgMC4wOTAgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MTUgIHBvd2VyIDkwLjBFLTEgIDAuNSAtPiAzLjAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkxNiAgcG93ZXIgOTAuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTE3ICBwb3dlciA5MEUtMyAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkxOCAgcG93ZXIgOTBFKzEgIDAuNSAtPiAzMCBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTE5ICBwb3dlciA5MEUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTIwICBwb3dlciA5MEUrMyAgMC41IC0+IDMuMEUrMiBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTIxICBwb3dlciAwLjkxICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkyMiAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTIzICBwb3dlciA5MS4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTI0ICBwb3dlciA5MS4wMEUtMiAgMC41IC0+IDAuOTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MjUgIHBvd2VyIDkxRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkyNiAgcG93ZXIgOTFFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkyNyAgcG93ZXIgOTFFKzIgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkyOCAgcG93ZXIgOTFFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MjkgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTMwICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MzEgIHBvd2VyIDkyLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MzIgIHBvd2VyIDkyLjAwRS0yICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkzMyAgcG93ZXIgOTJFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTM0ICBwb3dlciA5MkUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTM1ICBwb3dlciA5MkUrMiAgMC41IC0+IDk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTM2ICBwb3dlciA5MkUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkzNyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5MzggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MjkzOSAgcG93ZXIgOTMuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk0MCAgcG93ZXIgOTMuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTQxICBwb3dlciA5M0UtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NDIgIHBvd2VyIDkzRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NDMgIHBvd2VyIDkzRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NDQgIHBvd2VyIDkzRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTQ1ICBwb3dlciAwLjk0ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk0NiAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTQ3ICBwb3dlciA5NC4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTQ4ICBwb3dlciA5NC4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NDkgIHBvd2VyIDk0RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk1MCAgcG93ZXIgOTRFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk1MSAgcG93ZXIgOTRFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk1MiAgcG93ZXIgOTRFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NTMgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTU0ICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NTUgIHBvd2VyIDk1LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NTYgIHBvd2VyIDk1LjAwRS0yICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk1NyAgcG93ZXIgOTVFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTU4ICBwb3dlciA5NUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTU5ICBwb3dlciA5NUUrMiAgMC41IC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTYwICBwb3dlciA5NUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk2MSAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NjIgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk2MyAgcG93ZXIgOTYuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk2NCAgcG93ZXIgOTYuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTY1ICBwb3dlciA5NkUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NjYgIHBvd2VyIDk2RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NjcgIHBvd2VyIDk2RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NjggIHBvd2VyIDk2RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTY5ICBwb3dlciAwLjk3ICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk3MCAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTcxICBwb3dlciA5Ny4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTcyICBwb3dlciA5Ny4wMEUtMiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NzMgIHBvd2VyIDk3RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk3NCAgcG93ZXIgOTdFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk3NSAgcG93ZXIgOTdFKzIgIDAuNSAtPiA5OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk3NiAgcG93ZXIgOTdFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5NzkgIHBvd2VyIDk4LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5ODAgIHBvd2VyIDk4LjAwRS0yICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk4MSAgcG93ZXIgOThFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTgyICBwb3dlciA5OEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTgzICBwb3dlciA5OEUrMiAgMC41IC0+IDk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTg0ICBwb3dlciA5OEUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk4NSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5ODYgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk4NyAgcG93ZXIgOTkuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mjk4OCAgcG93ZXIgOTkuMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gyOTg5ICBwb3dlciA5OUUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5OTAgIHBvd2VyIDk5RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5OTEgIHBvd2VyIDk5RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDI5OTIgIHBvd2VyIDk5RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0KLXJvdW5kaW5nOiAgICBoYWxmX2V2ZW4KLW1heEV4cG9uZW50OiA5OTkKLW1pbmV4cG9uZW50OiAtOTk5Ci1wcmVjaXNpb246ICAgMwotcHdzeDMwMDEgIHBvd2VyIDAuMSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMDMgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDA0ICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMDUgIHBvd2VyIDAuMyAgMC41IC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDA2ICBwb3dlciAwLjAzICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMDcgIHBvd2VyIDAuNCAgMC41IC0+IDAuNjMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDA4ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMDkgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDEwICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMTEgIHBvd2VyIDAuNiAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDEyICBwb3dlciAwLjA2ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMTMgIHBvd2VyIDAuNyAgMC41IC0+IDAuODM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDE0ICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMTUgIHBvd2VyIDAuOCAgMC41IC0+IDAuODk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDE2ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMTcgIHBvd2VyIDAuOSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDE4ICBwb3dlciAwLjA5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMTkgIHBvd2VyIDAuMTEgIDAuNSAtPiAwLjMzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAyMCAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAyMSAgcG93ZXIgMC4xMiAgMC41IC0+IDAuMzQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDIyICBwb3dlciAwLjAxMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDIzICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMjQgIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMjUgIHBvd2VyIDAuMTQgIDAuNSAtPiAwLjM3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAyNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAyNyAgcG93ZXIgMC4xNSAgMC41IC0+IDAuMzg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDI4ICBwb3dlciAwLjAxNSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDI5ICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMzAgIHBvd2VyIDAuMDE2ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMzEgIHBvd2VyIDAuMTcgIDAuNSAtPiAwLjQxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAzMiAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAzMyAgcG93ZXIgMC4xOCAgMC41IC0+IDAuNDI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDM0ICBwb3dlciAwLjAxOCAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDM1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMzYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xMzggIEluZXhhY3QgUm91bmRlZAotcHdzeDMwMzcgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ1OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAzOCAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzAzOSAgcG93ZXIgMC4yMiAgMC41IC0+IDAuNDY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDQwICBwb3dlciAwLjAyMiAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDQxICBwb3dlciAwLjIzICAwLjUgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNDIgIHBvd2VyIDAuMDIzICAwLjUgLT4gMC4xNTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNDMgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA0NCAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA0NSAgcG93ZXIgMC4yNSAgMC41IC0+IDAuNTAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDQ2ICBwb3dlciAwLjAyNSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDQ3ICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNDggIHBvd2VyIDAuMDI2ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA1MCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA1MSAgcG93ZXIgMC4yOCAgMC41IC0+IDAuNTI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDUyICBwb3dlciAwLjAyOCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDUzICBwb3dlciAwLjI5ICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNTQgIHBvd2VyIDAuMDI5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNTUgIHBvd2VyIDAuMzEgIDAuNSAtPiAwLjU1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA1NiAgcG93ZXIgMC4wMzEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA1NyAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDU4ICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDU5ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNjAgIHBvd2VyIDAuMDMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNjEgIHBvd2VyIDAuMzQgIDAuNSAtPiAwLjU4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA2MiAgcG93ZXIgMC4wMzQgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA2MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDY0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDY1ICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNjYgIHBvd2VyIDAuMDM2ICAwLjUgLT4gMC4xOTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNjcgIHBvd2VyIDAuMzcgIDAuNSAtPiAwLjYwOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA2OCAgcG93ZXIgMC4wMzcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA2OSAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDcwICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDcxICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNzIgIHBvd2VyIDAuMDM5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNzMgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA3NCAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA3NSAgcG93ZXIgMC40MiAgMC41IC0+IDAuNjQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDc2ICBwb3dlciAwLjA0MiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDc3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNzggIHBvd2VyIDAuMDQzICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwNzkgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA4MCAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA4MSAgcG93ZXIgMC40NSAgMC41IC0+IDAuNjcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDgyICBwb3dlciAwLjA0NSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDgzICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42NzggIEluZXhhY3QgUm91bmRlZAotcHdzeDMwODQgIHBvd2VyIDAuMDQ2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwODUgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA4NiAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA4NyAgcG93ZXIgMC40OCAgMC41IC0+IDAuNjkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDg4ICBwb3dlciAwLjA0OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDg5ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwOTAgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwOTEgIHBvd2VyIDAuNTEgIDAuNSAtPiAwLjcxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA5MiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA5MyAgcG93ZXIgMC41MiAgMC41IC0+IDAuNzIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDk0ICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMDk1ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZAotcHdzeDMwOTYgIHBvd2VyIDAuMDUzICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMwOTcgIHBvd2VyIDAuNTQgIDAuNSAtPiAwLjczNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA5OCAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzA5OSAgcG93ZXIgMC41NSAgMC41IC0+IDAuNzQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTAwICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTAxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMDIgIHBvd2VyIDAuMDU2ICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMDMgIHBvd2VyIDAuNTcgIDAuNSAtPiAwLjc1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEwNCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEwNSAgcG93ZXIgMC41OCAgMC41IC0+IDAuNzYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTA2ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTA3ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMDggIHBvd2VyIDAuMDU5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMDkgIHBvd2VyIDAuNjEgIDAuNSAtPiAwLjc4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzExMCAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzExMSAgcG93ZXIgMC42MiAgMC41IC0+IDAuNzg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTEyICBwb3dlciAwLjA2MiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTEzICBwb3dlciAwLjYzICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMTQgIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMTUgIHBvd2VyIDAuNjQgIDAuNSAtPiAwLjgwMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzExNiAgcG93ZXIgMC4wNjQgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzExNyAgcG93ZXIgMC42NSAgMC41IC0+IDAuODA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTE4ICBwb3dlciAwLjA2NSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTE5ICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMjAgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMjEgIHBvd2VyIDAuNjcgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEyMiAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEyMyAgcG93ZXIgMC42OCAgMC41IC0+IDAuODI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTI0ICBwb3dlciAwLjA2OCAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTI1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMjYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMjcgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEyOCAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEyOSAgcG93ZXIgMC43MiAgMC41IC0+IDAuODQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTMwICBwb3dlciAwLjA3MiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTMxICBwb3dlciAwLjczICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMzIgIHBvd2VyIDAuMDczICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMzMgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEzNCAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzEzNSAgcG93ZXIgMC43NSAgMC41IC0+IDAuODY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTM2ICBwb3dlciAwLjA3NSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTM3ICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMzggIHBvd2VyIDAuMDc2ICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxMzkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE0MCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE0MSAgcG93ZXIgMC43OCAgMC41IC0+IDAuODgzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTQyICBwb3dlciAwLjA3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTQzICBwb3dlciAwLjc5ICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNDQgIHBvd2VyIDAuMDc5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNDUgIHBvd2VyIDAuODEgIDAuNSAtPiAwLjkwMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE0NiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE0NyAgcG93ZXIgMC44MiAgMC41IC0+IDAuOTA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTQ4ICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTQ5ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNTAgIHBvd2VyIDAuMDgzICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNTEgIHBvd2VyIDAuODQgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE1MiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE1MyAgcG93ZXIgMC44NSAgMC41IC0+IDAuOTIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTU0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTU1ICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNTYgIHBvd2VyIDAuMDg2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNTcgIHBvd2VyIDAuODcgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE1OCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE1OSAgcG93ZXIgMC44OCAgMC41IC0+IDAuOTM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTYwICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTYxICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNjIgIHBvd2VyIDAuMDg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNjMgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE2NCAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE2NSAgcG93ZXIgMC45MiAgMC41IC0+IDAuOTU5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTY2ICBwb3dlciAwLjA5MiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTY3ICBwb3dlciAwLjkzICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNjggIHBvd2VyIDAuMDkzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNjkgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE3MCAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE3MSAgcG93ZXIgMC45NSAgMC41IC0+IDAuOTc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTcyICBwb3dlciAwLjA5NSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTczICBwb3dlciAwLjk2ICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNzQgIHBvd2VyIDAuMDk2ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxNzUgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE3NiAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE3NyAgcG93ZXIgMC45OCAgMC41IC0+IDAuOTkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTc4ICBwb3dlciAwLjA5OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTc5ICBwb3dlciAwLjk5ICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxODAgIHBvd2VyIDAuMDk5ICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxODEgIHBvd2VyIDAuMTAxICAwLjUgLT4gMC4zMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDMxODIgIHBvd2VyIDAuMDEwMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTgzICBwb3dlciAwLjEwMiAgMC41IC0+IDAuMzE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTg0ICBwb3dlciAwLjAxMDIgIDAuNSAtPiAwLjEwMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE4NSAgcG93ZXIgMC4xMDMgIDAuNSAtPiAwLjMyMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE4NiAgcG93ZXIgMC4wMTAzICAwLjUgLT4gMC4xMDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxODcgIHBvd2VyIDAuMTA0ICAwLjUgLT4gMC4zMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxODggIHBvd2VyIDAuMDEwNCAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTg5ICBwb3dlciAwLjEwNSAgMC41IC0+IDAuMzI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTkwICBwb3dlciAwLjAxMDUgIDAuNSAtPiAwLjEwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE5MSAgcG93ZXIgMC4xMDYgIDAuNSAtPiAwLjMyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE5MiAgcG93ZXIgMC4wMTA2ICAwLjUgLT4gMC4xMDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxOTMgIHBvd2VyIDAuMTA3ICAwLjUgLT4gMC4zMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxOTQgIHBvd2VyIDAuMDEwNyAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTk1ICBwb3dlciAwLjEwOCAgMC41IC0+IDAuMzI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMTk2ICBwb3dlciAwLjAxMDggIDAuNSAtPiAwLjEwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE5NyAgcG93ZXIgMC4xMDkgIDAuNSAtPiAwLjMzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzE5OCAgcG93ZXIgMC4wMTA5ICAwLjUgLT4gMC4xMDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMxOTkgIHBvd2VyIDAuMTExICAwLjUgLT4gMC4zMzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMDAgIHBvd2VyIDAuMDExMSAgMC41IC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjAxICBwb3dlciAwLjExMiAgMC41IC0+IDAuMzM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjAyICBwb3dlciAwLjAxMTIgIDAuNSAtPiAwLjEwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIwMyAgcG93ZXIgMC4xMTMgIDAuNSAtPiAwLjMzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIwNCAgcG93ZXIgMC4wMTEzICAwLjUgLT4gMC4xMDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMDUgIHBvd2VyIDAuMTE0ICAwLjUgLT4gMC4zMzggIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMDYgIHBvd2VyIDAuMDExNCAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjA3ICBwb3dlciAwLjExNSAgMC41IC0+IDAuMzM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjA4ICBwb3dlciAwLjAxMTUgIDAuNSAtPiAwLjEwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIwOSAgcG93ZXIgMC4xMTYgIDAuNSAtPiAwLjM0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIxMCAgcG93ZXIgMC4wMTE2ICAwLjUgLT4gMC4xMDggIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMTEgIHBvd2VyIDAuMTE3ICAwLjUgLT4gMC4zNDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMTIgIHBvd2VyIDAuMDExNyAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjEzICBwb3dlciAwLjExOCAgMC41IC0+IDAuMzQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjE0ICBwb3dlciAwLjAxMTggIDAuNSAtPiAwLjEwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIxNSAgcG93ZXIgMC4xMTkgIDAuNSAtPiAwLjM0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIxNiAgcG93ZXIgMC4wMTE5ICAwLjUgLT4gMC4xMDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMTcgIHBvd2VyIDAuMTIxICAwLjUgLT4gMC4zNDggIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMTggIHBvd2VyIDAuMDEyMSAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjE5ICBwb3dlciAwLjEyMiAgMC41IC0+IDAuMzQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjIwICBwb3dlciAwLjAxMjIgIDAuNSAtPiAwLjExMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIyMSAgcG93ZXIgMC4xMjMgIDAuNSAtPiAwLjM1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIyMiAgcG93ZXIgMC4wMTIzICAwLjUgLT4gMC4xMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMjMgIHBvd2VyIDAuMTI0ICAwLjUgLT4gMC4zNTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMjQgIHBvd2VyIDAuMDEyNCAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjI1ICBwb3dlciAwLjEyNSAgMC41IC0+IDAuMzU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjI2ICBwb3dlciAwLjAxMjUgIDAuNSAtPiAwLjExMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIyNyAgcG93ZXIgMC4xMjYgIDAuNSAtPiAwLjM1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIyOCAgcG93ZXIgMC4wMTI2ICAwLjUgLT4gMC4xMTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMjkgIHBvd2VyIDAuMTI3ICAwLjUgLT4gMC4zNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMzAgIHBvd2VyIDAuMDEyNyAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjMxICBwb3dlciAwLjEyOCAgMC41IC0+IDAuMzU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjMyICBwb3dlciAwLjAxMjggIDAuNSAtPiAwLjExMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIzMyAgcG93ZXIgMC4xMjkgIDAuNSAtPiAwLjM1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIzNCAgcG93ZXIgMC4wMTI5ICAwLjUgLT4gMC4xMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMzUgIHBvd2VyIDAuMTMxICAwLjUgLT4gMC4zNjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyMzYgIHBvd2VyIDAuMDEzMSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjM3ICBwb3dlciAwLjEzMiAgMC41IC0+IDAuMzYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjM4ICBwb3dlciAwLjAxMzIgIDAuNSAtPiAwLjExNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzIzOSAgcG93ZXIgMC4xMzMgIDAuNSAtPiAwLjM2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI0MCAgcG93ZXIgMC4wMTMzICAwLjUgLT4gMC4xMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNDEgIHBvd2VyIDAuMTM0ICAwLjUgLT4gMC4zNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNDIgIHBvd2VyIDAuMDEzNCAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjQzICBwb3dlciAwLjEzNSAgMC41IC0+IDAuMzY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjQ0ICBwb3dlciAwLjAxMzUgIDAuNSAtPiAwLjExNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI0NSAgcG93ZXIgMC4xMzYgIDAuNSAtPiAwLjM2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI0NiAgcG93ZXIgMC4wMTM2ICAwLjUgLT4gMC4xMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNDcgIHBvd2VyIDAuMTM3ICAwLjUgLT4gMC4zNzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNDggIHBvd2VyIDAuMDEzNyAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjQ5ICBwb3dlciAwLjEzOCAgMC41IC0+IDAuMzcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjUwICBwb3dlciAwLjAxMzggIDAuNSAtPiAwLjExNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI1MSAgcG93ZXIgMC4xMzkgIDAuNSAtPiAwLjM3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI1MiAgcG93ZXIgMC4wMTM5ICAwLjUgLT4gMC4xMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNTMgIHBvd2VyIDAuMTQxICAwLjUgLT4gMC4zNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNTQgIHBvd2VyIDAuMDE0MSAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjU1ICBwb3dlciAwLjE0MiAgMC41IC0+IDAuMzc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjU2ICBwb3dlciAwLjAxNDIgIDAuNSAtPiAwLjExOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI1NyAgcG93ZXIgMC4xNDMgIDAuNSAtPiAwLjM3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI1OCAgcG93ZXIgMC4wMTQzICAwLjUgLT4gMC4xMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNTkgIHBvd2VyIDAuMTQ0ICAwLjUgLT4gMC4zNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNjAgIHBvd2VyIDAuMDE0NCAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjYxICBwb3dlciAwLjE0NSAgMC41IC0+IDAuMzgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjYyICBwb3dlciAwLjAxNDUgIDAuNSAtPiAwLjEyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI2MyAgcG93ZXIgMC4xNDYgIDAuNSAtPiAwLjM4MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI2NCAgcG93ZXIgMC4wMTQ2ICAwLjUgLT4gMC4xMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNjUgIHBvd2VyIDAuMTQ3ICAwLjUgLT4gMC4zODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNjYgIHBvd2VyIDAuMDE0NyAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjY3ICBwb3dlciAwLjE0OCAgMC41IC0+IDAuMzg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjY4ICBwb3dlciAwLjAxNDggIDAuNSAtPiAwLjEyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI2OSAgcG93ZXIgMC4xNDkgIDAuNSAtPiAwLjM4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI3MCAgcG93ZXIgMC4wMTQ5ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNzEgIHBvd2VyIDAuMTUxICAwLjUgLT4gMC4zODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNzIgIHBvd2VyIDAuMDE1MSAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjczICBwb3dlciAwLjE1MiAgMC41IC0+IDAuMzkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjc0ICBwb3dlciAwLjAxNTIgIDAuNSAtPiAwLjEyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI3NSAgcG93ZXIgMC4xNTMgIDAuNSAtPiAwLjM5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI3NiAgcG93ZXIgMC4wMTUzICAwLjUgLT4gMC4xMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNzcgIHBvd2VyIDAuMTU0ICAwLjUgLT4gMC4zOTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyNzggIHBvd2VyIDAuMDE1NCAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjc5ICBwb3dlciAwLjE1NSAgMC41IC0+IDAuMzk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjgwICBwb3dlciAwLjAxNTUgIDAuNSAtPiAwLjEyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI4MSAgcG93ZXIgMC4xNTYgIDAuNSAtPiAwLjM5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI4MiAgcG93ZXIgMC4wMTU2ICAwLjUgLT4gMC4xMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyODMgIHBvd2VyIDAuMTU3ICAwLjUgLT4gMC4zOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyODQgIHBvd2VyIDAuMDE1NyAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjg1ICBwb3dlciAwLjE1OCAgMC41IC0+IDAuMzk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjg2ICBwb3dlciAwLjAxNTggIDAuNSAtPiAwLjEyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI4NyAgcG93ZXIgMC4xNTkgIDAuNSAtPiAwLjM5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI4OCAgcG93ZXIgMC4wMTU5ICAwLjUgLT4gMC4xMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyODkgIHBvd2VyIDAuMTYxICAwLjUgLT4gMC40MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyOTAgIHBvd2VyIDAuMDE2MSAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjkxICBwb3dlciAwLjE2MiAgMC41IC0+IDAuNDAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjkyICBwb3dlciAwLjAxNjIgIDAuNSAtPiAwLjEyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI5MyAgcG93ZXIgMC4xNjMgIDAuNSAtPiAwLjQwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI5NCAgcG93ZXIgMC4wMTYzICAwLjUgLT4gMC4xMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDMyOTUgIHBvd2VyIDAuMTY0ICAwLjUgLT4gMC40MDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMyOTYgIHBvd2VyIDAuMDE2NCAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjk3ICBwb3dlciAwLjE2NSAgMC41IC0+IDAuNDA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMjk4ICBwb3dlciAwLjAxNjUgIDAuNSAtPiAwLjEyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzI5OSAgcG93ZXIgMC4xNjYgIDAuNSAtPiAwLjQwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMwMCAgcG93ZXIgMC4wMTY2ICAwLjUgLT4gMC4xMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMDEgIHBvd2VyIDAuMTY3ICAwLjUgLT4gMC40MDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMDIgIHBvd2VyIDAuMDE2NyAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzAzICBwb3dlciAwLjE2OCAgMC41IC0+IDAuNDEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzA0ICBwb3dlciAwLjAxNjggIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMwNSAgcG93ZXIgMC4xNjkgIDAuNSAtPiAwLjQxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMwNiAgcG93ZXIgMC4wMTY5ICAwLjUgLT4gMC4xMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMDcgIHBvd2VyIDAuMTcxICAwLjUgLT4gMC40MTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMDggIHBvd2VyIDAuMDE3MSAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzA5ICBwb3dlciAwLjE3MiAgMC41IC0+IDAuNDE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzEwICBwb3dlciAwLjAxNzIgIDAuNSAtPiAwLjEzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMxMSAgcG93ZXIgMC4xNzMgIDAuNSAtPiAwLjQxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMxMiAgcG93ZXIgMC4wMTczICAwLjUgLT4gMC4xMzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMTMgIHBvd2VyIDAuMTc0ICAwLjUgLT4gMC40MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMTQgIHBvd2VyIDAuMDE3NCAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzE1ICBwb3dlciAwLjE3NSAgMC41IC0+IDAuNDE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzE2ICBwb3dlciAwLjAxNzUgIDAuNSAtPiAwLjEzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMxNyAgcG93ZXIgMC4xNzYgIDAuNSAtPiAwLjQyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMxOCAgcG93ZXIgMC4wMTc2ICAwLjUgLT4gMC4xMzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMTkgIHBvd2VyIDAuMTc3ICAwLjUgLT4gMC40MjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMjAgIHBvd2VyIDAuMDE3NyAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzIxICBwb3dlciAwLjE3OCAgMC41IC0+IDAuNDIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzIyICBwb3dlciAwLjAxNzggIDAuNSAtPiAwLjEzMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMyMyAgcG93ZXIgMC4xNzkgIDAuNSAtPiAwLjQyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMyNCAgcG93ZXIgMC4wMTc5ICAwLjUgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMjUgIHBvd2VyIDAuMTgxICAwLjUgLT4gMC40MjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMjYgIHBvd2VyIDAuMDE4MSAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzI3ICBwb3dlciAwLjE4MiAgMC41IC0+IDAuNDI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzI4ICBwb3dlciAwLjAxODIgIDAuNSAtPiAwLjEzNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMyOSAgcG93ZXIgMC4xODMgIDAuNSAtPiAwLjQyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMzMCAgcG93ZXIgMC4wMTgzICAwLjUgLT4gMC4xMzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMzEgIHBvd2VyIDAuMTg0ICAwLjUgLT4gMC40MjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMzIgIHBvd2VyIDAuMDE4NCAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzMzICBwb3dlciAwLjE4NSAgMC41IC0+IDAuNDMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzM0ICBwb3dlciAwLjAxODUgIDAuNSAtPiAwLjEzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMzNSAgcG93ZXIgMC4xODYgIDAuNSAtPiAwLjQzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzMzNiAgcG93ZXIgMC4wMTg2ICAwLjUgLT4gMC4xMzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMzcgIHBvd2VyIDAuMTg3ICAwLjUgLT4gMC40MzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzMzggIHBvd2VyIDAuMDE4NyAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzM5ICBwb3dlciAwLjE4OCAgMC41IC0+IDAuNDM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzQwICBwb3dlciAwLjAxODggIDAuNSAtPiAwLjEzNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM0MSAgcG93ZXIgMC4xODkgIDAuNSAtPiAwLjQzNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM0MiAgcG93ZXIgMC4wMTg5ICAwLjUgLT4gMC4xMzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNDMgIHBvd2VyIDAuMTkxICAwLjUgLT4gMC40MzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNDQgIHBvd2VyIDAuMDE5MSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzQ1ICBwb3dlciAwLjE5MiAgMC41IC0+IDAuNDM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzQ2ICBwb3dlciAwLjAxOTIgIDAuNSAtPiAwLjEzOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM0NyAgcG93ZXIgMC4xOTMgIDAuNSAtPiAwLjQzOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM0OCAgcG93ZXIgMC4wMTkzICAwLjUgLT4gMC4xMzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNDkgIHBvd2VyIDAuMTk0ICAwLjUgLT4gMC40NDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNTAgIHBvd2VyIDAuMDE5NCAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzUxICBwb3dlciAwLjE5NSAgMC41IC0+IDAuNDQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzUyICBwb3dlciAwLjAxOTUgIDAuNSAtPiAwLjE0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM1MyAgcG93ZXIgMC4xOTYgIDAuNSAtPiAwLjQ0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM1NCAgcG93ZXIgMC4wMTk2ICAwLjUgLT4gMC4xNDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNTUgIHBvd2VyIDAuMTk3ICAwLjUgLT4gMC40NDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNTYgIHBvd2VyIDAuMDE5NyAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzU3ICBwb3dlciAwLjE5OCAgMC41IC0+IDAuNDQ1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzU4ICBwb3dlciAwLjAxOTggIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM1OSAgcG93ZXIgMC4xOTkgIDAuNSAtPiAwLjQ0NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM2MCAgcG93ZXIgMC4wMTk5ICAwLjUgLT4gMC4xNDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNjEgIHBvd2VyIDAuMjAxICAwLjUgLT4gMC40NDggIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNjIgIHBvd2VyIDAuMDIwMSAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzYzICBwb3dlciAwLjIwMiAgMC41IC0+IDAuNDQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzY0ICBwb3dlciAwLjAyMDIgIDAuNSAtPiAwLjE0MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM2NSAgcG93ZXIgMC4yMDMgIDAuNSAtPiAwLjQ1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM2NiAgcG93ZXIgMC4wMjAzICAwLjUgLT4gMC4xNDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNjcgIHBvd2VyIDAuMjA0ICAwLjUgLT4gMC40NTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNjggIHBvd2VyIDAuMDIwNCAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzY5ICBwb3dlciAwLjIwNSAgMC41IC0+IDAuNDUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzcwICBwb3dlciAwLjAyMDUgIDAuNSAtPiAwLjE0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM3MSAgcG93ZXIgMC4yMDYgIDAuNSAtPiAwLjQ1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM3MiAgcG93ZXIgMC4wMjA2ICAwLjUgLT4gMC4xNDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNzMgIHBvd2VyIDAuMjA3ICAwLjUgLT4gMC40NTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNzQgIHBvd2VyIDAuMDIwNyAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzc1ICBwb3dlciAwLjIwOCAgMC41IC0+IDAuNDU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzc2ICBwb3dlciAwLjAyMDggIDAuNSAtPiAwLjE0NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM3NyAgcG93ZXIgMC4yMDkgIDAuNSAtPiAwLjQ1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM3OCAgcG93ZXIgMC4wMjA5ICAwLjUgLT4gMC4xNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzNzkgIHBvd2VyIDAuMjExICAwLjUgLT4gMC40NTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzODAgIHBvd2VyIDAuMDIxMSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzgxICBwb3dlciAwLjIxMiAgMC41IC0+IDAuNDYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzgyICBwb3dlciAwLjAyMTIgIDAuNSAtPiAwLjE0NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM4MyAgcG93ZXIgMC4yMTMgIDAuNSAtPiAwLjQ2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM4NCAgcG93ZXIgMC4wMjEzICAwLjUgLT4gMC4xNDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzODUgIHBvd2VyIDAuMjE0ICAwLjUgLT4gMC40NjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzODYgIHBvd2VyIDAuMDIxNCAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzg3ICBwb3dlciAwLjIxNSAgMC41IC0+IDAuNDY0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzg4ICBwb3dlciAwLjAyMTUgIDAuNSAtPiAwLjE0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM4OSAgcG93ZXIgMC4yMTYgIDAuNSAtPiAwLjQ2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM5MCAgcG93ZXIgMC4wMjE2ICAwLjUgLT4gMC4xNDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzOTEgIHBvd2VyIDAuMjE3ICAwLjUgLT4gMC40NjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzOTIgIHBvd2VyIDAuMDIxNyAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzkzICBwb3dlciAwLjIxOCAgMC41IC0+IDAuNDY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzk0ICBwb3dlciAwLjAyMTggIDAuNSAtPiAwLjE0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM5NSAgcG93ZXIgMC4yMTkgIDAuNSAtPiAwLjQ2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzM5NiAgcG93ZXIgMC4wMjE5ICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZAotcHdzeDMzOTcgIHBvd2VyIDAuMjIxICAwLjUgLT4gMC40NzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDMzOTggIHBvd2VyIDAuMDIyMSAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzMzk5ICBwb3dlciAwLjIyMiAgMC41IC0+IDAuNDcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDAwICBwb3dlciAwLjAyMjIgIDAuNSAtPiAwLjE0OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQwMSAgcG93ZXIgMC4yMjMgIDAuNSAtPiAwLjQ3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQwMiAgcG93ZXIgMC4wMjIzICAwLjUgLT4gMC4xNDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MDMgIHBvd2VyIDAuMjI0ICAwLjUgLT4gMC40NzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MDQgIHBvd2VyIDAuMDIyNCAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDA1ICBwb3dlciAwLjIyNSAgMC41IC0+IDAuNDc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDA2ICBwb3dlciAwLjAyMjUgIDAuNSAtPiAwLjE1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQwNyAgcG93ZXIgMC4yMjYgIDAuNSAtPiAwLjQ3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQwOCAgcG93ZXIgMC4wMjI2ICAwLjUgLT4gMC4xNTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MDkgIHBvd2VyIDAuMjI3ICAwLjUgLT4gMC40NzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MTAgIHBvd2VyIDAuMDIyNyAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDExICBwb3dlciAwLjIyOCAgMC41IC0+IDAuNDc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDEyICBwb3dlciAwLjAyMjggIDAuNSAtPiAwLjE1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQxMyAgcG93ZXIgMC4yMjkgIDAuNSAtPiAwLjQ3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQxNCAgcG93ZXIgMC4wMjI5ICAwLjUgLT4gMC4xNTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MTUgIHBvd2VyIDAuMjMxICAwLjUgLT4gMC40ODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MTYgIHBvd2VyIDAuMDIzMSAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDE3ICBwb3dlciAwLjIzMiAgMC41IC0+IDAuNDgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDE4ICBwb3dlciAwLjAyMzIgIDAuNSAtPiAwLjE1MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQxOSAgcG93ZXIgMC4yMzMgIDAuNSAtPiAwLjQ4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQyMCAgcG93ZXIgMC4wMjMzICAwLjUgLT4gMC4xNTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MjEgIHBvd2VyIDAuMjM0ICAwLjUgLT4gMC40ODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MjIgIHBvd2VyIDAuMDIzNCAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDIzICBwb3dlciAwLjIzNSAgMC41IC0+IDAuNDg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDI0ICBwb3dlciAwLjAyMzUgIDAuNSAtPiAwLjE1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQyNSAgcG93ZXIgMC4yMzYgIDAuNSAtPiAwLjQ4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQyNiAgcG93ZXIgMC4wMjM2ICAwLjUgLT4gMC4xNTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MjcgIHBvd2VyIDAuMjM3ICAwLjUgLT4gMC40ODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MjggIHBvd2VyIDAuMDIzNyAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDI5ICBwb3dlciAwLjIzOCAgMC41IC0+IDAuNDg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDMwICBwb3dlciAwLjAyMzggIDAuNSAtPiAwLjE1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQzMSAgcG93ZXIgMC4yMzkgIDAuNSAtPiAwLjQ4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQzMiAgcG93ZXIgMC4wMjM5ICAwLjUgLT4gMC4xNTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MzMgIHBvd2VyIDAuMjQxICAwLjUgLT4gMC40OTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MzQgIHBvd2VyIDAuMDI0MSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDM1ICBwb3dlciAwLjI0MiAgMC41IC0+IDAuNDkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDM2ICBwb3dlciAwLjAyNDIgIDAuNSAtPiAwLjE1NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQzNyAgcG93ZXIgMC4yNDMgIDAuNSAtPiAwLjQ5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQzOCAgcG93ZXIgMC4wMjQzICAwLjUgLT4gMC4xNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0MzkgIHBvd2VyIDAuMjQ0ICAwLjUgLT4gMC40OTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NDAgIHBvd2VyIDAuMDI0NCAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDQxICBwb3dlciAwLjI0NSAgMC41IC0+IDAuNDk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDQyICBwb3dlciAwLjAyNDUgIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ0MyAgcG93ZXIgMC4yNDYgIDAuNSAtPiAwLjQ5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ0NCAgcG93ZXIgMC4wMjQ2ICAwLjUgLT4gMC4xNTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NDUgIHBvd2VyIDAuMjQ3ICAwLjUgLT4gMC40OTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NDYgIHBvd2VyIDAuMDI0NyAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDQ3ICBwb3dlciAwLjI0OCAgMC41IC0+IDAuNDk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDQ4ICBwb3dlciAwLjAyNDggIDAuNSAtPiAwLjE1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ0OSAgcG93ZXIgMC4yNDkgIDAuNSAtPiAwLjQ5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ1MCAgcG93ZXIgMC4wMjQ5ICAwLjUgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NTEgIHBvd2VyIDAuMjUxICAwLjUgLT4gMC41MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NTIgIHBvd2VyIDAuMDI1MSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDUzICBwb3dlciAwLjI1MiAgMC41IC0+IDAuNTAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDU0ICBwb3dlciAwLjAyNTIgIDAuNSAtPiAwLjE1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ1NSAgcG93ZXIgMC4yNTMgIDAuNSAtPiAwLjUwMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ1NiAgcG93ZXIgMC4wMjUzICAwLjUgLT4gMC4xNTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NTcgIHBvd2VyIDAuMjU0ICAwLjUgLT4gMC41MDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NTggIHBvd2VyIDAuMDI1NCAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDU5ICBwb3dlciAwLjI1NSAgMC41IC0+IDAuNTA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDYwICBwb3dlciAwLjAyNTUgIDAuNSAtPiAwLjE2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ2MSAgcG93ZXIgMC4yNTYgIDAuNSAtPiAwLjUwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ2MiAgcG93ZXIgMC4wMjU2ICAwLjUgLT4gMC4xNjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NjMgIHBvd2VyIDAuMjU3ICAwLjUgLT4gMC41MDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NjQgIHBvd2VyIDAuMDI1NyAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDY1ICBwb3dlciAwLjI1OCAgMC41IC0+IDAuNTA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDY2ICBwb3dlciAwLjAyNTggIDAuNSAtPiAwLjE2MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ2NyAgcG93ZXIgMC4yNTkgIDAuNSAtPiAwLjUwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ2OCAgcG93ZXIgMC4wMjU5ICAwLjUgLT4gMC4xNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NjkgIHBvd2VyIDAuMjYxICAwLjUgLT4gMC41MTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NzAgIHBvd2VyIDAuMDI2MSAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDcxICBwb3dlciAwLjI2MiAgMC41IC0+IDAuNTEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDcyICBwb3dlciAwLjAyNjIgIDAuNSAtPiAwLjE2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ3MyAgcG93ZXIgMC4yNjMgIDAuNSAtPiAwLjUxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ3NCAgcG93ZXIgMC4wMjYzICAwLjUgLT4gMC4xNjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NzUgIHBvd2VyIDAuMjY0ICAwLjUgLT4gMC41MTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0NzYgIHBvd2VyIDAuMDI2NCAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDc3ICBwb3dlciAwLjI2NSAgMC41IC0+IDAuNTE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDc4ICBwb3dlciAwLjAyNjUgIDAuNSAtPiAwLjE2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ3OSAgcG93ZXIgMC4yNjYgIDAuNSAtPiAwLjUxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ4MCAgcG93ZXIgMC4wMjY2ICAwLjUgLT4gMC4xNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0ODEgIHBvd2VyIDAuMjY3ICAwLjUgLT4gMC41MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0ODIgIHBvd2VyIDAuMDI2NyAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDgzICBwb3dlciAwLjI2OCAgMC41IC0+IDAuNTE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDg0ICBwb3dlciAwLjAyNjggIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ4NSAgcG93ZXIgMC4yNjkgIDAuNSAtPiAwLjUxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ4NiAgcG93ZXIgMC4wMjY5ICAwLjUgLT4gMC4xNjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0ODcgIHBvd2VyIDAuMjcxICAwLjUgLT4gMC41MjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0ODggIHBvd2VyIDAuMDI3MSAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDg5ICBwb3dlciAwLjI3MiAgMC41IC0+IDAuNTIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDkwICBwb3dlciAwLjAyNzIgIDAuNSAtPiAwLjE2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ5MSAgcG93ZXIgMC4yNzMgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ5MiAgcG93ZXIgMC4wMjczICAwLjUgLT4gMC4xNjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0OTMgIHBvd2VyIDAuMjc0ICAwLjUgLT4gMC41MjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0OTQgIHBvd2VyIDAuMDI3NCAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDk1ICBwb3dlciAwLjI3NSAgMC41IC0+IDAuNTI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNDk2ICBwb3dlciAwLjAyNzUgIDAuNSAtPiAwLjE2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ5NyAgcG93ZXIgMC4yNzYgIDAuNSAtPiAwLjUyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzQ5OCAgcG93ZXIgMC4wMjc2ICAwLjUgLT4gMC4xNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM0OTkgIHBvd2VyIDAuMjc3ICAwLjUgLT4gMC41MjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MDAgIHBvd2VyIDAuMDI3NyAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTAxICBwb3dlciAwLjI3OCAgMC41IC0+IDAuNTI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTAyICBwb3dlciAwLjAyNzggIDAuNSAtPiAwLjE2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUwMyAgcG93ZXIgMC4yNzkgIDAuNSAtPiAwLjUyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUwNCAgcG93ZXIgMC4wMjc5ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MDUgIHBvd2VyIDAuMjgxICAwLjUgLT4gMC41MzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MDYgIHBvd2VyIDAuMDI4MSAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTA3ICBwb3dlciAwLjI4MiAgMC41IC0+IDAuNTMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTA4ICBwb3dlciAwLjAyODIgIDAuNSAtPiAwLjE2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUwOSAgcG93ZXIgMC4yODMgIDAuNSAtPiAwLjUzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUxMCAgcG93ZXIgMC4wMjgzICAwLjUgLT4gMC4xNjggIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MTEgIHBvd2VyIDAuMjg0ICAwLjUgLT4gMC41MzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MTIgIHBvd2VyIDAuMDI4NCAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTEzICBwb3dlciAwLjI4NSAgMC41IC0+IDAuNTM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTE0ICBwb3dlciAwLjAyODUgIDAuNSAtPiAwLjE2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUxNSAgcG93ZXIgMC4yODYgIDAuNSAtPiAwLjUzNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUxNiAgcG93ZXIgMC4wMjg2ICAwLjUgLT4gMC4xNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MTcgIHBvd2VyIDAuMjg3ICAwLjUgLT4gMC41MzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MTggIHBvd2VyIDAuMDI4NyAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTE5ICBwb3dlciAwLjI4OCAgMC41IC0+IDAuNTM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTIwICBwb3dlciAwLjAyODggIDAuNSAtPiAwLjE3MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUyMSAgcG93ZXIgMC4yODkgIDAuNSAtPiAwLjUzOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUyMiAgcG93ZXIgMC4wMjg5ICAwLjUgLT4gMC4xNzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MjMgIHBvd2VyIDAuMjkxICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MjQgIHBvd2VyIDAuMDI5MSAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTI1ICBwb3dlciAwLjI5MiAgMC41IC0+IDAuNTQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTI2ICBwb3dlciAwLjAyOTIgIDAuNSAtPiAwLjE3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUyNyAgcG93ZXIgMC4yOTMgIDAuNSAtPiAwLjU0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUyOCAgcG93ZXIgMC4wMjkzICAwLjUgLT4gMC4xNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MjkgIHBvd2VyIDAuMjk0ICAwLjUgLT4gMC41NDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MzAgIHBvd2VyIDAuMDI5NCAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTMxICBwb3dlciAwLjI5NSAgMC41IC0+IDAuNTQzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTMyICBwb3dlciAwLjAyOTUgIDAuNSAtPiAwLjE3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUzMyAgcG93ZXIgMC4yOTYgIDAuNSAtPiAwLjU0NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUzNCAgcG93ZXIgMC4wMjk2ICAwLjUgLT4gMC4xNzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MzUgIHBvd2VyIDAuMjk3ICAwLjUgLT4gMC41NDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1MzYgIHBvd2VyIDAuMDI5NyAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTM3ICBwb3dlciAwLjI5OCAgMC41IC0+IDAuNTQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTM4ICBwb3dlciAwLjAyOTggIDAuNSAtPiAwLjE3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzUzOSAgcG93ZXIgMC4yOTkgIDAuNSAtPiAwLjU0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU0MCAgcG93ZXIgMC4wMjk5ICAwLjUgLT4gMC4xNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NDEgIHBvd2VyIDAuMzAxICAwLjUgLT4gMC41NDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NDIgIHBvd2VyIDAuMDMwMSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTQzICBwb3dlciAwLjMwMiAgMC41IC0+IDAuNTUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTQ0ICBwb3dlciAwLjAzMDIgIDAuNSAtPiAwLjE3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU0NSAgcG93ZXIgMC4zMDMgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU0NiAgcG93ZXIgMC4wMzAzICAwLjUgLT4gMC4xNzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NDcgIHBvd2VyIDAuMzA0ICAwLjUgLT4gMC41NTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NDggIHBvd2VyIDAuMDMwNCAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTQ5ICBwb3dlciAwLjMwNSAgMC41IC0+IDAuNTUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTUwICBwb3dlciAwLjAzMDUgIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU1MSAgcG93ZXIgMC4zMDYgIDAuNSAtPiAwLjU1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU1MiAgcG93ZXIgMC4wMzA2ICAwLjUgLT4gMC4xNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NTMgIHBvd2VyIDAuMzA3ICAwLjUgLT4gMC41NTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NTQgIHBvd2VyIDAuMDMwNyAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTU1ICBwb3dlciAwLjMwOCAgMC41IC0+IDAuNTU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTU2ICBwb3dlciAwLjAzMDggIDAuNSAtPiAwLjE3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU1NyAgcG93ZXIgMC4zMDkgIDAuNSAtPiAwLjU1NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU1OCAgcG93ZXIgMC4wMzA5ICAwLjUgLT4gMC4xNzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NTkgIHBvd2VyIDAuMzExICAwLjUgLT4gMC41NTggIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NjAgIHBvd2VyIDAuMDMxMSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTYxICBwb3dlciAwLjMxMiAgMC41IC0+IDAuNTU5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTYyICBwb3dlciAwLjAzMTIgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU2MyAgcG93ZXIgMC4zMTMgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU2NCAgcG93ZXIgMC4wMzEzICAwLjUgLT4gMC4xNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NjUgIHBvd2VyIDAuMzE0ICAwLjUgLT4gMC41NjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NjYgIHBvd2VyIDAuMDMxNCAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTY3ICBwb3dlciAwLjMxNSAgMC41IC0+IDAuNTYxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTY4ICBwb3dlciAwLjAzMTUgIDAuNSAtPiAwLjE3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU2OSAgcG93ZXIgMC4zMTYgIDAuNSAtPiAwLjU2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU3MCAgcG93ZXIgMC4wMzE2ICAwLjUgLT4gMC4xNzggIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NzEgIHBvd2VyIDAuMzE3ICAwLjUgLT4gMC41NjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NzIgIHBvd2VyIDAuMDMxNyAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTczICBwb3dlciAwLjMxOCAgMC41IC0+IDAuNTY0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTc0ICBwb3dlciAwLjAzMTggIDAuNSAtPiAwLjE3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU3NSAgcG93ZXIgMC4zMTkgIDAuNSAtPiAwLjU2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU3NiAgcG93ZXIgMC4wMzE5ICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NzcgIHBvd2VyIDAuMzIxICAwLjUgLT4gMC41NjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1NzggIHBvd2VyIDAuMDMyMSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTc5ICBwb3dlciAwLjMyMiAgMC41IC0+IDAuNTY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTgwICBwb3dlciAwLjAzMjIgIDAuNSAtPiAwLjE3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU4MSAgcG93ZXIgMC4zMjMgIDAuNSAtPiAwLjU2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU4MiAgcG93ZXIgMC4wMzIzICAwLjUgLT4gMC4xODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1ODMgIHBvd2VyIDAuMzI0ICAwLjUgLT4gMC41NjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1ODQgIHBvd2VyIDAuMDMyNCAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTg1ICBwb3dlciAwLjMyNSAgMC41IC0+IDAuNTcwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTg2ICBwb3dlciAwLjAzMjUgIDAuNSAtPiAwLjE4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU4NyAgcG93ZXIgMC4zMjYgIDAuNSAtPiAwLjU3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU4OCAgcG93ZXIgMC4wMzI2ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1ODkgIHBvd2VyIDAuMzI3ICAwLjUgLT4gMC41NzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1OTAgIHBvd2VyIDAuMDMyNyAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTkxICBwb3dlciAwLjMyOCAgMC41IC0+IDAuNTczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTkyICBwb3dlciAwLjAzMjggIDAuNSAtPiAwLjE4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU5MyAgcG93ZXIgMC4zMjkgIDAuNSAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU5NCAgcG93ZXIgMC4wMzI5ICAwLjUgLT4gMC4xODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1OTUgIHBvd2VyIDAuMzMxICAwLjUgLT4gMC41NzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM1OTYgIHBvd2VyIDAuMDMzMSAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTk3ICBwb3dlciAwLjMzMiAgMC41IC0+IDAuNTc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNTk4ICBwb3dlciAwLjAzMzIgIDAuNSAtPiAwLjE4MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzU5OSAgcG93ZXIgMC4zMzMgIDAuNSAtPiAwLjU3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYwMCAgcG93ZXIgMC4wMzMzICAwLjUgLT4gMC4xODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MDEgIHBvd2VyIDAuMzM0ICAwLjUgLT4gMC41NzggIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MDIgIHBvd2VyIDAuMDMzNCAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjAzICBwb3dlciAwLjMzNSAgMC41IC0+IDAuNTc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjA0ICBwb3dlciAwLjAzMzUgIDAuNSAtPiAwLjE4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYwNSAgcG93ZXIgMC4zMzYgIDAuNSAtPiAwLjU4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYwNiAgcG93ZXIgMC4wMzM2ICAwLjUgLT4gMC4xODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MDcgIHBvd2VyIDAuMzM3ICAwLjUgLT4gMC41ODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MDggIHBvd2VyIDAuMDMzNyAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjA5ICBwb3dlciAwLjMzOCAgMC41IC0+IDAuNTgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjEwICBwb3dlciAwLjAzMzggIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYxMSAgcG93ZXIgMC4zMzkgIDAuNSAtPiAwLjU4MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYxMiAgcG93ZXIgMC4wMzM5ICAwLjUgLT4gMC4xODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MTMgIHBvd2VyIDAuMzQxICAwLjUgLT4gMC41ODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MTQgIHBvd2VyIDAuMDM0MSAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjE1ICBwb3dlciAwLjM0MiAgMC41IC0+IDAuNTg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjE2ICBwb3dlciAwLjAzNDIgIDAuNSAtPiAwLjE4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYxNyAgcG93ZXIgMC4zNDMgIDAuNSAtPiAwLjU4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYxOCAgcG93ZXIgMC4wMzQzICAwLjUgLT4gMC4xODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MTkgIHBvd2VyIDAuMzQ0ICAwLjUgLT4gMC41ODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MjAgIHBvd2VyIDAuMDM0NCAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjIxICBwb3dlciAwLjM0NSAgMC41IC0+IDAuNTg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjIyICBwb3dlciAwLjAzNDUgIDAuNSAtPiAwLjE4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYyMyAgcG93ZXIgMC4zNDYgIDAuNSAtPiAwLjU4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYyNCAgcG93ZXIgMC4wMzQ2ICAwLjUgLT4gMC4xODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MjUgIHBvd2VyIDAuMzQ3ICAwLjUgLT4gMC41ODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MjYgIHBvd2VyIDAuMDM0NyAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjI3ICBwb3dlciAwLjM0OCAgMC41IC0+IDAuNTkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjI4ICBwb3dlciAwLjAzNDggIDAuNSAtPiAwLjE4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYyOSAgcG93ZXIgMC4zNDkgIDAuNSAtPiAwLjU5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYzMCAgcG93ZXIgMC4wMzQ5ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MzEgIHBvd2VyIDAuMzUxICAwLjUgLT4gMC41OTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MzIgIHBvd2VyIDAuMDM1MSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjMzICBwb3dlciAwLjM1MiAgMC41IC0+IDAuNTkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjM0ICBwb3dlciAwLjAzNTIgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYzNSAgcG93ZXIgMC4zNTMgIDAuNSAtPiAwLjU5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzYzNiAgcG93ZXIgMC4wMzUzICAwLjUgLT4gMC4xODggIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MzcgIHBvd2VyIDAuMzU0ICAwLjUgLT4gMC41OTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2MzggIHBvd2VyIDAuMDM1NCAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjM5ICBwb3dlciAwLjM1NSAgMC41IC0+IDAuNTk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjQwICBwb3dlciAwLjAzNTUgIDAuNSAtPiAwLjE4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY0MSAgcG93ZXIgMC4zNTYgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY0MiAgcG93ZXIgMC4wMzU2ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NDMgIHBvd2VyIDAuMzU3ICAwLjUgLT4gMC41OTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NDQgIHBvd2VyIDAuMDM1NyAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjQ1ICBwb3dlciAwLjM1OCAgMC41IC0+IDAuNTk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjQ2ICBwb3dlciAwLjAzNTggIDAuNSAtPiAwLjE4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY0NyAgcG93ZXIgMC4zNTkgIDAuNSAtPiAwLjU5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY0OCAgcG93ZXIgMC4wMzU5ICAwLjUgLT4gMC4xODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NDkgIHBvd2VyIDAuMzYxICAwLjUgLT4gMC42MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NTAgIHBvd2VyIDAuMDM2MSAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjUxICBwb3dlciAwLjM2MiAgMC41IC0+IDAuNjAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjUyICBwb3dlciAwLjAzNjIgIDAuNSAtPiAwLjE5MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY1MyAgcG93ZXIgMC4zNjMgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY1NCAgcG93ZXIgMC4wMzYzICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NTUgIHBvd2VyIDAuMzY0ICAwLjUgLT4gMC42MDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NTYgIHBvd2VyIDAuMDM2NCAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjU3ICBwb3dlciAwLjM2NSAgMC41IC0+IDAuNjA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjU4ICBwb3dlciAwLjAzNjUgIDAuNSAtPiAwLjE5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY1OSAgcG93ZXIgMC4zNjYgIDAuNSAtPiAwLjYwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY2MCAgcG93ZXIgMC4wMzY2ICAwLjUgLT4gMC4xOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NjEgIHBvd2VyIDAuMzY3ICAwLjUgLT4gMC42MDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NjIgIHBvd2VyIDAuMDM2NyAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjYzICBwb3dlciAwLjM2OCAgMC41IC0+IDAuNjA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjY0ICBwb3dlciAwLjAzNjggIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY2NSAgcG93ZXIgMC4zNjkgIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY2NiAgcG93ZXIgMC4wMzY5ICAwLjUgLT4gMC4xOTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NjcgIHBvd2VyIDAuMzcxICAwLjUgLT4gMC42MDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NjggIHBvd2VyIDAuMDM3MSAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjY5ICBwb3dlciAwLjM3MiAgMC41IC0+IDAuNjEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjcwICBwb3dlciAwLjAzNzIgIDAuNSAtPiAwLjE5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY3MSAgcG93ZXIgMC4zNzMgIDAuNSAtPiAwLjYxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY3MiAgcG93ZXIgMC4wMzczICAwLjUgLT4gMC4xOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NzMgIHBvd2VyIDAuMzc0ICAwLjUgLT4gMC42MTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NzQgIHBvd2VyIDAuMDM3NCAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjc1ICBwb3dlciAwLjM3NSAgMC41IC0+IDAuNjEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjc2ICBwb3dlciAwLjAzNzUgIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY3NyAgcG93ZXIgMC4zNzYgIDAuNSAtPiAwLjYxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY3OCAgcG93ZXIgMC4wMzc2ICAwLjUgLT4gMC4xOTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2NzkgIHBvd2VyIDAuMzc3ICAwLjUgLT4gMC42MTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2ODAgIHBvd2VyIDAuMDM3NyAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjgxICBwb3dlciAwLjM3OCAgMC41IC0+IDAuNjE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjgyICBwb3dlciAwLjAzNzggIDAuNSAtPiAwLjE5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY4MyAgcG93ZXIgMC4zNzkgIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY4NCAgcG93ZXIgMC4wMzc5ICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2ODUgIHBvd2VyIDAuMzgxICAwLjUgLT4gMC42MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2ODYgIHBvd2VyIDAuMDM4MSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjg3ICBwb3dlciAwLjM4MiAgMC41IC0+IDAuNjE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjg4ICBwb3dlciAwLjAzODIgIDAuNSAtPiAwLjE5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY4OSAgcG93ZXIgMC4zODMgIDAuNSAtPiAwLjYxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY5MCAgcG93ZXIgMC4wMzgzICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2OTEgIHBvd2VyIDAuMzg0ICAwLjUgLT4gMC42MjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2OTIgIHBvd2VyIDAuMDM4NCAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjkzICBwb3dlciAwLjM4NSAgMC41IC0+IDAuNjIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjk0ICBwb3dlciAwLjAzODUgIDAuNSAtPiAwLjE5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY5NSAgcG93ZXIgMC4zODYgIDAuNSAtPiAwLjYyMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzY5NiAgcG93ZXIgMC4wMzg2ICAwLjUgLT4gMC4xOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2OTcgIHBvd2VyIDAuMzg3ICAwLjUgLT4gMC42MjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM2OTggIHBvd2VyIDAuMDM4NyAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNjk5ICBwb3dlciAwLjM4OCAgMC41IC0+IDAuNjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzAwICBwb3dlciAwLjAzODggIDAuNSAtPiAwLjE5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcwMSAgcG93ZXIgMC4zODkgIDAuNSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcwMiAgcG93ZXIgMC4wMzg5ICAwLjUgLT4gMC4xOTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MDMgIHBvd2VyIDAuMzkxICAwLjUgLT4gMC42MjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MDQgIHBvd2VyIDAuMDM5MSAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzA1ICBwb3dlciAwLjM5MiAgMC41IC0+IDAuNjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzA2ICBwb3dlciAwLjAzOTIgIDAuNSAtPiAwLjE5OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcwNyAgcG93ZXIgMC4zOTMgIDAuNSAtPiAwLjYyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcwOCAgcG93ZXIgMC4wMzkzICAwLjUgLT4gMC4xOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MDkgIHBvd2VyIDAuMzk0ICAwLjUgLT4gMC42MjggIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MTAgIHBvd2VyIDAuMDM5NCAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzExICBwb3dlciAwLjM5NSAgMC41IC0+IDAuNjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzEyICBwb3dlciAwLjAzOTUgIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcxMyAgcG93ZXIgMC4zOTYgIDAuNSAtPiAwLjYyOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcxNCAgcG93ZXIgMC4wMzk2ICAwLjUgLT4gMC4xOTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MTUgIHBvd2VyIDAuMzk3ICAwLjUgLT4gMC42MzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MTYgIHBvd2VyIDAuMDM5NyAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzE3ICBwb3dlciAwLjM5OCAgMC41IC0+IDAuNjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzE4ICBwb3dlciAwLjAzOTggIDAuNSAtPiAwLjE5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcxOSAgcG93ZXIgMC4zOTkgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcyMCAgcG93ZXIgMC4wMzk5ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MjEgIHBvd2VyIDAuNDAxICAwLjUgLT4gMC42MzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MjIgIHBvd2VyIDAuMDQwMSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzIzICBwb3dlciAwLjQwMiAgMC41IC0+IDAuNjM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzI0ICBwb3dlciAwLjA0MDIgIDAuNSAtPiAwLjIwMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcyNSAgcG93ZXIgMC40MDMgIDAuNSAtPiAwLjYzNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzcyNiAgcG93ZXIgMC4wNDAzICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MjcgIHBvd2VyIDAuNDA0ICAwLjUgLT4gMC42MzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MjggIHBvd2VyIDAuMDQwNCAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzI5ICBwb3dlciAwLjQwNSAgMC41IC0+IDAuNjM2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzMwICBwb3dlciAwLjA0MDUgIDAuNSAtPiAwLjIwMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzczMSAgcG93ZXIgMC40MDYgIDAuNSAtPiAwLjYzNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzczMiAgcG93ZXIgMC4wNDA2ICAwLjUgLT4gMC4yMDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MzMgIHBvd2VyIDAuNDA3ICAwLjUgLT4gMC42MzggIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MzQgIHBvd2VyIDAuMDQwNyAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzM1ICBwb3dlciAwLjQwOCAgMC41IC0+IDAuNjM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzM2ICBwb3dlciAwLjA0MDggIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzczNyAgcG93ZXIgMC40MDkgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzczOCAgcG93ZXIgMC4wNDA5ICAwLjUgLT4gMC4yMDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3MzkgIHBvd2VyIDAuNDExICAwLjUgLT4gMC42NDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NDAgIHBvd2VyIDAuMDQxMSAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzQxICBwb3dlciAwLjQxMiAgMC41IC0+IDAuNjQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzQyICBwb3dlciAwLjA0MTIgIDAuNSAtPiAwLjIwMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc0MyAgcG93ZXIgMC40MTMgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc0NCAgcG93ZXIgMC4wNDEzICAwLjUgLT4gMC4yMDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NDUgIHBvd2VyIDAuNDE0ICAwLjUgLT4gMC42NDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NDYgIHBvd2VyIDAuMDQxNCAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzQ3ICBwb3dlciAwLjQxNSAgMC41IC0+IDAuNjQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzQ4ICBwb3dlciAwLjA0MTUgIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc0OSAgcG93ZXIgMC40MTYgIDAuNSAtPiAwLjY0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc1MCAgcG93ZXIgMC4wNDE2ICAwLjUgLT4gMC4yMDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NTEgIHBvd2VyIDAuNDE3ICAwLjUgLT4gMC42NDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NTIgIHBvd2VyIDAuMDQxNyAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzUzICBwb3dlciAwLjQxOCAgMC41IC0+IDAuNjQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzU0ICBwb3dlciAwLjA0MTggIDAuNSAtPiAwLjIwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc1NSAgcG93ZXIgMC40MTkgIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc1NiAgcG93ZXIgMC4wNDE5ICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NTcgIHBvd2VyIDAuNDIxICAwLjUgLT4gMC42NDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NTggIHBvd2VyIDAuMDQyMSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzU5ICBwb3dlciAwLjQyMiAgMC41IC0+IDAuNjUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzYwICBwb3dlciAwLjA0MjIgIDAuNSAtPiAwLjIwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc2MSAgcG93ZXIgMC40MjMgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc2MiAgcG93ZXIgMC4wNDIzICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NjMgIHBvd2VyIDAuNDI0ICAwLjUgLT4gMC42NTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NjQgIHBvd2VyIDAuMDQyNCAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzY1ICBwb3dlciAwLjQyNSAgMC41IC0+IDAuNjUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzY2ICBwb3dlciAwLjA0MjUgIDAuNSAtPiAwLjIwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc2NyAgcG93ZXIgMC40MjYgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc2OCAgcG93ZXIgMC4wNDI2ICAwLjUgLT4gMC4yMDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NjkgIHBvd2VyIDAuNDI3ICAwLjUgLT4gMC42NTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NzAgIHBvd2VyIDAuMDQyNyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzcxICBwb3dlciAwLjQyOCAgMC41IC0+IDAuNjU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzcyICBwb3dlciAwLjA0MjggIDAuNSAtPiAwLjIwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc3MyAgcG93ZXIgMC40MjkgIDAuNSAtPiAwLjY1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc3NCAgcG93ZXIgMC4wNDI5ICAwLjUgLT4gMC4yMDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NzUgIHBvd2VyIDAuNDMxICAwLjUgLT4gMC42NTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3NzYgIHBvd2VyIDAuMDQzMSAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzc3ICBwb3dlciAwLjQzMiAgMC41IC0+IDAuNjU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzc4ICBwb3dlciAwLjA0MzIgIDAuNSAtPiAwLjIwOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc3OSAgcG93ZXIgMC40MzMgIDAuNSAtPiAwLjY1OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc4MCAgcG93ZXIgMC4wNDMzICAwLjUgLT4gMC4yMDggIEluZXhhY3QgUm91bmRlZAotcHdzeDM3ODEgIHBvd2VyIDAuNDM0ICAwLjUgLT4gMC42NTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3ODIgIHBvd2VyIDAuMDQzNCAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzgzICBwb3dlciAwLjQzNSAgMC41IC0+IDAuNjYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzg0ICBwb3dlciAwLjA0MzUgIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc4NSAgcG93ZXIgMC40MzYgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc4NiAgcG93ZXIgMC4wNDM2ICAwLjUgLT4gMC4yMDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3ODcgIHBvd2VyIDAuNDM3ICAwLjUgLT4gMC42NjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3ODggIHBvd2VyIDAuMDQzNyAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzg5ICBwb3dlciAwLjQzOCAgMC41IC0+IDAuNjYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzkwICBwb3dlciAwLjA0MzggIDAuNSAtPiAwLjIwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc5MSAgcG93ZXIgMC40MzkgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc5MiAgcG93ZXIgMC4wNDM5ICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3OTMgIHBvd2VyIDAuNDQxICAwLjUgLT4gMC42NjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3OTQgIHBvd2VyIDAuMDQ0MSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzk1ICBwb3dlciAwLjQ0MiAgMC41IC0+IDAuNjY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzNzk2ICBwb3dlciAwLjA0NDIgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc5NyAgcG93ZXIgMC40NDMgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzc5OCAgcG93ZXIgMC4wNDQzICAwLjUgLT4gMC4yMTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM3OTkgIHBvd2VyIDAuNDQ0ICAwLjUgLT4gMC42NjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MDAgIHBvd2VyIDAuMDQ0NCAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODAxICBwb3dlciAwLjQ0NSAgMC41IC0+IDAuNjY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODAyICBwb3dlciAwLjA0NDUgIDAuNSAtPiAwLjIxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgwMyAgcG93ZXIgMC40NDYgIDAuNSAtPiAwLjY2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgwNCAgcG93ZXIgMC4wNDQ2ICAwLjUgLT4gMC4yMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MDUgIHBvd2VyIDAuNDQ3ICAwLjUgLT4gMC42NjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MDYgIHBvd2VyIDAuMDQ0NyAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODA3ICBwb3dlciAwLjQ0OCAgMC41IC0+IDAuNjY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODA4ICBwb3dlciAwLjA0NDggIDAuNSAtPiAwLjIxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgwOSAgcG93ZXIgMC40NDkgIDAuNSAtPiAwLjY3MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgxMCAgcG93ZXIgMC4wNDQ5ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MTEgIHBvd2VyIDAuNDUxICAwLjUgLT4gMC42NzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MTIgIHBvd2VyIDAuMDQ1MSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODEzICBwb3dlciAwLjQ1MiAgMC41IC0+IDAuNjcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODE0ICBwb3dlciAwLjA0NTIgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgxNSAgcG93ZXIgMC40NTMgIDAuNSAtPiAwLjY3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgxNiAgcG93ZXIgMC4wNDUzICAwLjUgLT4gMC4yMTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MTcgIHBvd2VyIDAuNDU0ICAwLjUgLT4gMC42NzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MTggIHBvd2VyIDAuMDQ1NCAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODE5ICBwb3dlciAwLjQ1NSAgMC41IC0+IDAuNjc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODIwICBwb3dlciAwLjA0NTUgIDAuNSAtPiAwLjIxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgyMSAgcG93ZXIgMC40NTYgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgyMiAgcG93ZXIgMC4wNDU2ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MjMgIHBvd2VyIDAuNDU3ICAwLjUgLT4gMC42NzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MjQgIHBvd2VyIDAuMDQ1NyAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODI1ICBwb3dlciAwLjQ1OCAgMC41IC0+IDAuNjc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODI2ICBwb3dlciAwLjA0NTggIDAuNSAtPiAwLjIxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgyNyAgcG93ZXIgMC40NTkgIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgyOCAgcG93ZXIgMC4wNDU5ICAwLjUgLT4gMC4yMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MjkgIHBvd2VyIDAuNDYxICAwLjUgLT4gMC42NzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MzAgIHBvd2VyIDAuMDQ2MSAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODMxICBwb3dlciAwLjQ2MiAgMC41IC0+IDAuNjgwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODMyICBwb3dlciAwLjA0NjIgIDAuNSAtPiAwLjIxNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgzMyAgcG93ZXIgMC40NjMgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgzNCAgcG93ZXIgMC4wNDYzICAwLjUgLT4gMC4yMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MzUgIHBvd2VyIDAuNDY0ICAwLjUgLT4gMC42ODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4MzYgIHBvd2VyIDAuMDQ2NCAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODM3ICBwb3dlciAwLjQ2NSAgMC41IC0+IDAuNjgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODM4ICBwb3dlciAwLjA0NjUgIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzgzOSAgcG93ZXIgMC40NjYgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg0MCAgcG93ZXIgMC4wNDY2ICAwLjUgLT4gMC4yMTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NDEgIHBvd2VyIDAuNDY3ICAwLjUgLT4gMC42ODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NDIgIHBvd2VyIDAuMDQ2NyAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODQzICBwb3dlciAwLjQ2OCAgMC41IC0+IDAuNjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODQ0ICBwb3dlciAwLjA0NjggIDAuNSAtPiAwLjIxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg0NSAgcG93ZXIgMC40NjkgIDAuNSAtPiAwLjY4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg0NiAgcG93ZXIgMC4wNDY5ICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NDcgIHBvd2VyIDAuNDcxICAwLjUgLT4gMC42ODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NDggIHBvd2VyIDAuMDQ3MSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODQ5ICBwb3dlciAwLjQ3MiAgMC41IC0+IDAuNjg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODUwICBwb3dlciAwLjA0NzIgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg1MSAgcG93ZXIgMC40NzMgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg1MiAgcG93ZXIgMC4wNDczICAwLjUgLT4gMC4yMTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NTMgIHBvd2VyIDAuNDc0ICAwLjUgLT4gMC42ODggIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NTQgIHBvd2VyIDAuMDQ3NCAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODU1ICBwb3dlciAwLjQ3NSAgMC41IC0+IDAuNjg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODU2ICBwb3dlciAwLjA0NzUgIDAuNSAtPiAwLjIxOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg1NyAgcG93ZXIgMC40NzYgIDAuNSAtPiAwLjY5MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg1OCAgcG93ZXIgMC4wNDc2ICAwLjUgLT4gMC4yMTggIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NTkgIHBvd2VyIDAuNDc3ICAwLjUgLT4gMC42OTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NjAgIHBvd2VyIDAuMDQ3NyAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODYxICBwb3dlciAwLjQ3OCAgMC41IC0+IDAuNjkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODYyICBwb3dlciAwLjA0NzggIDAuNSAtPiAwLjIxOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg2MyAgcG93ZXIgMC40NzkgIDAuNSAtPiAwLjY5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg2NCAgcG93ZXIgMC4wNDc5ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NjUgIHBvd2VyIDAuNDgxICAwLjUgLT4gMC42OTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NjYgIHBvd2VyIDAuMDQ4MSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODY3ICBwb3dlciAwLjQ4MiAgMC41IC0+IDAuNjk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODY4ICBwb3dlciAwLjA0ODIgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg2OSAgcG93ZXIgMC40ODMgIDAuNSAtPiAwLjY5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg3MCAgcG93ZXIgMC4wNDgzICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NzEgIHBvd2VyIDAuNDg0ICAwLjUgLT4gMC42OTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NzIgIHBvd2VyIDAuMDQ4NCAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODczICBwb3dlciAwLjQ4NSAgMC41IC0+IDAuNjk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODc0ICBwb3dlciAwLjA0ODUgIDAuNSAtPiAwLjIyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg3NSAgcG93ZXIgMC40ODYgIDAuNSAtPiAwLjY5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg3NiAgcG93ZXIgMC4wNDg2ICAwLjUgLT4gMC4yMjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NzcgIHBvd2VyIDAuNDg3ICAwLjUgLT4gMC42OTggIEluZXhhY3QgUm91bmRlZAotcHdzeDM4NzggIHBvd2VyIDAuMDQ4NyAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODc5ICBwb3dlciAwLjQ4OCAgMC41IC0+IDAuNjk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODgwICBwb3dlciAwLjA0ODggIDAuNSAtPiAwLjIyMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg4MSAgcG93ZXIgMC40ODkgIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg4MiAgcG93ZXIgMC4wNDg5ICAwLjUgLT4gMC4yMjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4ODMgIHBvd2VyIDAuNDkxICAwLjUgLT4gMC43MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4ODQgIHBvd2VyIDAuMDQ5MSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODg1ICBwb3dlciAwLjQ5MiAgMC41IC0+IDAuNzAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODg2ICBwb3dlciAwLjA0OTIgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg4NyAgcG93ZXIgMC40OTMgIDAuNSAtPiAwLjcwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg4OCAgcG93ZXIgMC4wNDkzICAwLjUgLT4gMC4yMjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4ODkgIHBvd2VyIDAuNDk0ICAwLjUgLT4gMC43MDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4OTAgIHBvd2VyIDAuMDQ5NCAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODkxICBwb3dlciAwLjQ5NSAgMC41IC0+IDAuNzA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODkyICBwb3dlciAwLjA0OTUgIDAuNSAtPiAwLjIyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg5MyAgcG93ZXIgMC40OTYgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg5NCAgcG93ZXIgMC4wNDk2ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4OTUgIHBvd2VyIDAuNDk3ICAwLjUgLT4gMC43MDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM4OTYgIHBvd2VyIDAuMDQ5NyAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODk3ICBwb3dlciAwLjQ5OCAgMC41IC0+IDAuNzA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzODk4ICBwb3dlciAwLjA0OTggIDAuNSAtPiAwLjIyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzg5OSAgcG93ZXIgMC40OTkgIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkwMCAgcG93ZXIgMC4wNDk5ICAwLjUgLT4gMC4yMjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MDEgIHBvd2VyIDAuNTAxICAwLjUgLT4gMC43MDggIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MDIgIHBvd2VyIDAuMDUwMSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTAzICBwb3dlciAwLjUwMiAgMC41IC0+IDAuNzA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTA0ICBwb3dlciAwLjA1MDIgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkwNSAgcG93ZXIgMC41MDMgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkwNiAgcG93ZXIgMC4wNTAzICAwLjUgLT4gMC4yMjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MDcgIHBvd2VyIDAuNTA0ICAwLjUgLT4gMC43MTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MDggIHBvd2VyIDAuMDUwNCAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTA5ICBwb3dlciAwLjUwNSAgMC41IC0+IDAuNzExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTEwICBwb3dlciAwLjA1MDUgIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkxMSAgcG93ZXIgMC41MDYgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkxMiAgcG93ZXIgMC4wNTA2ICAwLjUgLT4gMC4yMjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MTMgIHBvd2VyIDAuNTA3ICAwLjUgLT4gMC43MTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MTQgIHBvd2VyIDAuMDUwNyAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTE1ICBwb3dlciAwLjUwOCAgMC41IC0+IDAuNzEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTE2ICBwb3dlciAwLjA1MDggIDAuNSAtPiAwLjIyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkxNyAgcG93ZXIgMC41MDkgIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkxOCAgcG93ZXIgMC4wNTA5ICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MTkgIHBvd2VyIDAuNTExICAwLjUgLT4gMC43MTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MjAgIHBvd2VyIDAuMDUxMSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTIxICBwb3dlciAwLjUxMiAgMC41IC0+IDAuNzE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTIyICBwb3dlciAwLjA1MTIgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkyMyAgcG93ZXIgMC41MTMgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkyNCAgcG93ZXIgMC4wNTEzICAwLjUgLT4gMC4yMjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MjUgIHBvd2VyIDAuNTE0ICAwLjUgLT4gMC43MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MjYgIHBvd2VyIDAuMDUxNCAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTI3ICBwb3dlciAwLjUxNSAgMC41IC0+IDAuNzE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTI4ICBwb3dlciAwLjA1MTUgIDAuNSAtPiAwLjIyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkyOSAgcG93ZXIgMC41MTYgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkzMCAgcG93ZXIgMC4wNTE2ICAwLjUgLT4gMC4yMjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MzEgIHBvd2VyIDAuNTE3ICAwLjUgLT4gMC43MTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MzIgIHBvd2VyIDAuMDUxNyAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTMzICBwb3dlciAwLjUxOCAgMC41IC0+IDAuNzIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTM0ICBwb3dlciAwLjA1MTggIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkzNSAgcG93ZXIgMC41MTkgIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4MzkzNiAgcG93ZXIgMC4wNTE5ICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MzcgIHBvd2VyIDAuNTIxICAwLjUgLT4gMC43MjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5MzggIHBvd2VyIDAuMDUyMSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTM5ICBwb3dlciAwLjUyMiAgMC41IC0+IDAuNzIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTQwICBwb3dlciAwLjA1MjIgIDAuNSAtPiAwLjIyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk0MSAgcG93ZXIgMC41MjMgIDAuNSAtPiAwLjcyMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk0MiAgcG93ZXIgMC4wNTIzICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NDMgIHBvd2VyIDAuNTI0ICAwLjUgLT4gMC43MjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NDQgIHBvd2VyIDAuMDUyNCAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTQ1ICBwb3dlciAwLjUyNSAgMC41IC0+IDAuNzI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTQ2ICBwb3dlciAwLjA1MjUgIDAuNSAtPiAwLjIyOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk0NyAgcG93ZXIgMC41MjYgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk0OCAgcG93ZXIgMC4wNTI2ICAwLjUgLT4gMC4yMjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NDkgIHBvd2VyIDAuNTI3ICAwLjUgLT4gMC43MjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NTAgIHBvd2VyIDAuMDUyNyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTUxICBwb3dlciAwLjUyOCAgMC41IC0+IDAuNzI3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTUyICBwb3dlciAwLjA1MjggIDAuNSAtPiAwLjIzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk1MyAgcG93ZXIgMC41MjkgIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk1NCAgcG93ZXIgMC4wNTI5ICAwLjUgLT4gMC4yMzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NTUgIHBvd2VyIDAuNTMxICAwLjUgLT4gMC43MjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NTYgIHBvd2VyIDAuMDUzMSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTU3ICBwb3dlciAwLjUzMiAgMC41IC0+IDAuNzI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTU4ICBwb3dlciAwLjA1MzIgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk1OSAgcG93ZXIgMC41MzMgIDAuNSAtPiAwLjczMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk2MCAgcG93ZXIgMC4wNTMzICAwLjUgLT4gMC4yMzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NjEgIHBvd2VyIDAuNTM0ICAwLjUgLT4gMC43MzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NjIgIHBvd2VyIDAuMDUzNCAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTYzICBwb3dlciAwLjUzNSAgMC41IC0+IDAuNzMxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTY0ICBwb3dlciAwLjA1MzUgIDAuNSAtPiAwLjIzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk2NSAgcG93ZXIgMC41MzYgIDAuNSAtPiAwLjczMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk2NiAgcG93ZXIgMC4wNTM2ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NjcgIHBvd2VyIDAuNTM3ICAwLjUgLT4gMC43MzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NjggIHBvd2VyIDAuMDUzNyAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTY5ICBwb3dlciAwLjUzOCAgMC41IC0+IDAuNzMzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTcwICBwb3dlciAwLjA1MzggIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk3MSAgcG93ZXIgMC41MzkgIDAuNSAtPiAwLjczNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk3MiAgcG93ZXIgMC4wNTM5ICAwLjUgLT4gMC4yMzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NzMgIHBvd2VyIDAuNTQxICAwLjUgLT4gMC43MzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NzQgIHBvd2VyIDAuMDU0MSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTc1ICBwb3dlciAwLjU0MiAgMC41IC0+IDAuNzM2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTc2ICBwb3dlciAwLjA1NDIgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk3NyAgcG93ZXIgMC41NDMgIDAuNSAtPiAwLjczNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk3OCAgcG93ZXIgMC4wNTQzICAwLjUgLT4gMC4yMzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5NzkgIHBvd2VyIDAuNTQ0ICAwLjUgLT4gMC43MzggIEluZXhhY3QgUm91bmRlZAotcHdzeDM5ODAgIHBvd2VyIDAuMDU0NCAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTgxICBwb3dlciAwLjU0NSAgMC41IC0+IDAuNzM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTgyICBwb3dlciAwLjA1NDUgIDAuNSAtPiAwLjIzMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk4MyAgcG93ZXIgMC41NDYgIDAuNSAtPiAwLjczOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk4NCAgcG93ZXIgMC4wNTQ2ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5ODUgIHBvd2VyIDAuNTQ3ICAwLjUgLT4gMC43NDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5ODYgIHBvd2VyIDAuMDU0NyAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTg3ICBwb3dlciAwLjU0OCAgMC41IC0+IDAuNzQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTg4ICBwb3dlciAwLjA1NDggIDAuNSAtPiAwLjIzNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk4OSAgcG93ZXIgMC41NDkgIDAuNSAtPiAwLjc0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk5MCAgcG93ZXIgMC4wNTQ5ICAwLjUgLT4gMC4yMzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5OTEgIHBvd2VyIDAuNTUxICAwLjUgLT4gMC43NDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5OTIgIHBvd2VyIDAuMDU1MSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTkzICBwb3dlciAwLjU1MiAgMC41IC0+IDAuNzQzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTk0ICBwb3dlciAwLjA1NTIgIDAuNSAtPiAwLjIzNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk5NSAgcG93ZXIgMC41NTMgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Mzk5NiAgcG93ZXIgMC4wNTUzICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5OTcgIHBvd2VyIDAuNTU0ICAwLjUgLT4gMC43NDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDM5OTggIHBvd2VyIDAuMDU1NCAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3gzOTk5ICBwb3dlciAwLjU1NSAgMC41IC0+IDAuNzQ1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDAwICBwb3dlciAwLjA1NTUgIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAwMSAgcG93ZXIgMC41NTYgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAwMiAgcG93ZXIgMC4wNTU2ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMDMgIHBvd2VyIDAuNTU3ICAwLjUgLT4gMC43NDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMDQgIHBvd2VyIDAuMDU1NyAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDA1ICBwb3dlciAwLjU1OCAgMC41IC0+IDAuNzQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDA2ICBwb3dlciAwLjA1NTggIDAuNSAtPiAwLjIzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAwNyAgcG93ZXIgMC41NTkgIDAuNSAtPiAwLjc0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAwOCAgcG93ZXIgMC4wNTU5ICAwLjUgLT4gMC4yMzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMDkgIHBvd2VyIDAuNTYxICAwLjUgLT4gMC43NDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMTAgIHBvd2VyIDAuMDU2MSAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDExICBwb3dlciAwLjU2MiAgMC41IC0+IDAuNzUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDEyICBwb3dlciAwLjA1NjIgIDAuNSAtPiAwLjIzNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAxMyAgcG93ZXIgMC41NjMgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAxNCAgcG93ZXIgMC4wNTYzICAwLjUgLT4gMC4yMzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMTUgIHBvd2VyIDAuNTY0ICAwLjUgLT4gMC43NTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMTYgIHBvd2VyIDAuMDU2NCAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDE3ICBwb3dlciAwLjU2NSAgMC41IC0+IDAuNzUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDE4ICBwb3dlciAwLjA1NjUgIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAxOSAgcG93ZXIgMC41NjYgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAyMCAgcG93ZXIgMC4wNTY2ICAwLjUgLT4gMC4yMzggIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMjEgIHBvd2VyIDAuNTY3ICAwLjUgLT4gMC43NTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMjIgIHBvd2VyIDAuMDU2NyAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDIzICBwb3dlciAwLjU2OCAgMC41IC0+IDAuNzU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDI0ICBwb3dlciAwLjA1NjggIDAuNSAtPiAwLjIzOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAyNSAgcG93ZXIgMC41NjkgIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAyNiAgcG93ZXIgMC4wNTY5ICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMjcgIHBvd2VyIDAuNTcxICAwLjUgLT4gMC43NTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMjggIHBvd2VyIDAuMDU3MSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDI5ICBwb3dlciAwLjU3MiAgMC41IC0+IDAuNzU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDMwICBwb3dlciAwLjA1NzIgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAzMSAgcG93ZXIgMC41NzMgIDAuNSAtPiAwLjc1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAzMiAgcG93ZXIgMC4wNTczICAwLjUgLT4gMC4yMzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMzMgIHBvd2VyIDAuNTc0ICAwLjUgLT4gMC43NTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMzQgIHBvd2VyIDAuMDU3NCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDM1ICBwb3dlciAwLjU3NSAgMC41IC0+IDAuNzU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDM2ICBwb3dlciAwLjA1NzUgIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAzNyAgcG93ZXIgMC41NzYgIDAuNSAtPiAwLjc1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDAzOCAgcG93ZXIgMC4wNTc2ICAwLjUgLT4gMC4yNDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwMzkgIHBvd2VyIDAuNTc3ICAwLjUgLT4gMC43NjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNDAgIHBvd2VyIDAuMDU3NyAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDQxICBwb3dlciAwLjU3OCAgMC41IC0+IDAuNzYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDQyICBwb3dlciAwLjA1NzggIDAuNSAtPiAwLjI0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA0MyAgcG93ZXIgMC41NzkgIDAuNSAtPiAwLjc2MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA0NCAgcG93ZXIgMC4wNTc5ICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNDUgIHBvd2VyIDAuNTgxICAwLjUgLT4gMC43NjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNDYgIHBvd2VyIDAuMDU4MSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDQ3ICBwb3dlciAwLjU4MiAgMC41IC0+IDAuNzYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDQ4ICBwb3dlciAwLjA1ODIgIDAuNSAtPiAwLjI0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA0OSAgcG93ZXIgMC41ODMgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA1MCAgcG93ZXIgMC4wNTgzICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNTEgIHBvd2VyIDAuNTg0ICAwLjUgLT4gMC43NjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNTIgIHBvd2VyIDAuMDU4NCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDUzICBwb3dlciAwLjU4NSAgMC41IC0+IDAuNzY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDU0ICBwb3dlciAwLjA1ODUgIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA1NSAgcG93ZXIgMC41ODYgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA1NiAgcG93ZXIgMC4wNTg2ICAwLjUgLT4gMC4yNDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNTcgIHBvd2VyIDAuNTg3ICAwLjUgLT4gMC43NjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNTggIHBvd2VyIDAuMDU4NyAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDU5ICBwb3dlciAwLjU4OCAgMC41IC0+IDAuNzY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDYwICBwb3dlciAwLjA1ODggIDAuNSAtPiAwLjI0MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA2MSAgcG93ZXIgMC41ODkgIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA2MiAgcG93ZXIgMC4wNTg5ICAwLjUgLT4gMC4yNDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNjMgIHBvd2VyIDAuNTkxICAwLjUgLT4gMC43NjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNjQgIHBvd2VyIDAuMDU5MSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDY1ICBwb3dlciAwLjU5MiAgMC41IC0+IDAuNzY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDY2ICBwb3dlciAwLjA1OTIgIDAuNSAtPiAwLjI0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA2NyAgcG93ZXIgMC41OTMgIDAuNSAtPiAwLjc3MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA2OCAgcG93ZXIgMC4wNTkzICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNjkgIHBvd2VyIDAuNTk0ICAwLjUgLT4gMC43NzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNzAgIHBvd2VyIDAuMDU5NCAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDcxICBwb3dlciAwLjU5NSAgMC41IC0+IDAuNzcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDcyICBwb3dlciAwLjA1OTUgIDAuNSAtPiAwLjI0NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA3MyAgcG93ZXIgMC41OTYgIDAuNSAtPiAwLjc3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA3NCAgcG93ZXIgMC4wNTk2ICAwLjUgLT4gMC4yNDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNzUgIHBvd2VyIDAuNTk3ICAwLjUgLT4gMC43NzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwNzYgIHBvd2VyIDAuMDU5NyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDc3ICBwb3dlciAwLjU5OCAgMC41IC0+IDAuNzczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDc4ICBwb3dlciAwLjA1OTggIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA3OSAgcG93ZXIgMC41OTkgIDAuNSAtPiAwLjc3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA4MCAgcG93ZXIgMC4wNTk5ICAwLjUgLT4gMC4yNDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwODEgIHBvd2VyIDAuNjAxICAwLjUgLT4gMC43NzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwODIgIHBvd2VyIDAuMDYwMSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDgzICBwb3dlciAwLjYwMiAgMC41IC0+IDAuNzc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDg0ICBwb3dlciAwLjA2MDIgIDAuNSAtPiAwLjI0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA4NSAgcG93ZXIgMC42MDMgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA4NiAgcG93ZXIgMC4wNjAzICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwODcgIHBvd2VyIDAuNjA0ICAwLjUgLT4gMC43NzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwODggIHBvd2VyIDAuMDYwNCAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDg5ICBwb3dlciAwLjYwNSAgMC41IC0+IDAuNzc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDkwICBwb3dlciAwLjA2MDUgIDAuNSAtPiAwLjI0NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA5MSAgcG93ZXIgMC42MDYgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA5MiAgcG93ZXIgMC4wNjA2ICAwLjUgLT4gMC4yNDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwOTMgIHBvd2VyIDAuNjA3ICAwLjUgLT4gMC43NzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwOTQgIHBvd2VyIDAuMDYwNyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDk1ICBwb3dlciAwLjYwOCAgMC41IC0+IDAuNzgwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MDk2ICBwb3dlciAwLjA2MDggIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA5NyAgcG93ZXIgMC42MDkgIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDA5OCAgcG93ZXIgMC4wNjA5ICAwLjUgLT4gMC4yNDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQwOTkgIHBvd2VyIDAuNjExICAwLjUgLT4gMC43ODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMDAgIHBvd2VyIDAuMDYxMSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTAxICBwb3dlciAwLjYxMiAgMC41IC0+IDAuNzgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTAyICBwb3dlciAwLjA2MTIgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEwMyAgcG93ZXIgMC42MTMgIDAuNSAtPiAwLjc4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEwNCAgcG93ZXIgMC4wNjEzICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMDUgIHBvd2VyIDAuNjE0ICAwLjUgLT4gMC43ODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMDYgIHBvd2VyIDAuMDYxNCAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTA3ICBwb3dlciAwLjYxNSAgMC41IC0+IDAuNzg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTA4ICBwb3dlciAwLjA2MTUgIDAuNSAtPiAwLjI0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEwOSAgcG93ZXIgMC42MTYgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDExMCAgcG93ZXIgMC4wNjE2ICAwLjUgLT4gMC4yNDggIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMTEgIHBvd2VyIDAuNjE3ICAwLjUgLT4gMC43ODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMTIgIHBvd2VyIDAuMDYxNyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTEzICBwb3dlciAwLjYxOCAgMC41IC0+IDAuNzg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTE0ICBwb3dlciAwLjA2MTggIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDExNSAgcG93ZXIgMC42MTkgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDExNiAgcG93ZXIgMC4wNjE5ICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMTcgIHBvd2VyIDAuNjIxICAwLjUgLT4gMC43ODggIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMTggIHBvd2VyIDAuMDYyMSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTE5ICBwb3dlciAwLjYyMiAgMC41IC0+IDAuNzg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTIwICBwb3dlciAwLjA2MjIgIDAuNSAtPiAwLjI0OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEyMSAgcG93ZXIgMC42MjMgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEyMiAgcG93ZXIgMC4wNjIzICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMjMgIHBvd2VyIDAuNjI0ICAwLjUgLT4gMC43OTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMjQgIHBvd2VyIDAuMDYyNCAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTI1ICBwb3dlciAwLjYyNSAgMC41IC0+IDAuNzkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTI2ICBwb3dlciAwLjA2MjUgIDAuNSAtPiAwLjI1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEyNyAgcG93ZXIgMC42MjYgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEyOCAgcG93ZXIgMC4wNjI2ICAwLjUgLT4gMC4yNTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMjkgIHBvd2VyIDAuNjI3ICAwLjUgLT4gMC43OTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMzAgIHBvd2VyIDAuMDYyNyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTMxICBwb3dlciAwLjYyOCAgMC41IC0+IDAuNzkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTMyICBwb3dlciAwLjA2MjggIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEzMyAgcG93ZXIgMC42MjkgIDAuNSAtPiAwLjc5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEzNCAgcG93ZXIgMC4wNjI5ICAwLjUgLT4gMC4yNTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMzUgIHBvd2VyIDAuNjMxICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxMzYgIHBvd2VyIDAuMDYzMSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTM3ICBwb3dlciAwLjYzMiAgMC41IC0+IDAuNzk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTM4ICBwb3dlciAwLjA2MzIgIDAuNSAtPiAwLjI1MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDEzOSAgcG93ZXIgMC42MzMgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE0MCAgcG93ZXIgMC4wNjMzICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNDEgIHBvd2VyIDAuNjM0ICAwLjUgLT4gMC43OTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNDIgIHBvd2VyIDAuMDYzNCAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTQzICBwb3dlciAwLjYzNSAgMC41IC0+IDAuNzk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTQ0ICBwb3dlciAwLjA2MzUgIDAuNSAtPiAwLjI1MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE0NSAgcG93ZXIgMC42MzYgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE0NiAgcG93ZXIgMC4wNjM2ICAwLjUgLT4gMC4yNTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNDcgIHBvd2VyIDAuNjM3ICAwLjUgLT4gMC43OTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNDggIHBvd2VyIDAuMDYzNyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTQ5ICBwb3dlciAwLjYzOCAgMC41IC0+IDAuNzk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTUwICBwb3dlciAwLjA2MzggIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE1MSAgcG93ZXIgMC42MzkgIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE1MiAgcG93ZXIgMC4wNjM5ICAwLjUgLT4gMC4yNTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNTMgIHBvd2VyIDAuNjQxICAwLjUgLT4gMC44MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNTQgIHBvd2VyIDAuMDY0MSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTU1ICBwb3dlciAwLjY0MiAgMC41IC0+IDAuODAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTU2ICBwb3dlciAwLjA2NDIgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE1NyAgcG93ZXIgMC42NDMgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE1OCAgcG93ZXIgMC4wNjQzICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNTkgIHBvd2VyIDAuNjQ0ICAwLjUgLT4gMC44MDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNjAgIHBvd2VyIDAuMDY0NCAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTYxICBwb3dlciAwLjY0NSAgMC41IC0+IDAuODAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTYyICBwb3dlciAwLjA2NDUgIDAuNSAtPiAwLjI1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE2MyAgcG93ZXIgMC42NDYgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE2NCAgcG93ZXIgMC4wNjQ2ICAwLjUgLT4gMC4yNTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNjUgIHBvd2VyIDAuNjQ3ICAwLjUgLT4gMC44MDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNjYgIHBvd2VyIDAuMDY0NyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTY3ICBwb3dlciAwLjY0OCAgMC41IC0+IDAuODA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTY4ICBwb3dlciAwLjA2NDggIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE2OSAgcG93ZXIgMC42NDkgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE3MCAgcG93ZXIgMC4wNjQ5ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNzEgIHBvd2VyIDAuNjUxICAwLjUgLT4gMC44MDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNzIgIHBvd2VyIDAuMDY1MSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTczICBwb3dlciAwLjY1MiAgMC41IC0+IDAuODA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTc0ICBwb3dlciAwLjA2NTIgIDAuNSAtPiAwLjI1NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE3NSAgcG93ZXIgMC42NTMgIDAuNSAtPiAwLjgwOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE3NiAgcG93ZXIgMC4wNjUzICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNzcgIHBvd2VyIDAuNjU0ICAwLjUgLT4gMC44MDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxNzggIHBvd2VyIDAuMDY1NCAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTc5ICBwb3dlciAwLjY1NSAgMC41IC0+IDAuODA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTgwICBwb3dlciAwLjA2NTUgIDAuNSAtPiAwLjI1NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE4MSAgcG93ZXIgMC42NTYgIDAuNSAtPiAwLjgxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE4MiAgcG93ZXIgMC4wNjU2ICAwLjUgLT4gMC4yNTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxODMgIHBvd2VyIDAuNjU3ICAwLjUgLT4gMC44MTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxODQgIHBvd2VyIDAuMDY1NyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTg1ICBwb3dlciAwLjY1OCAgMC41IC0+IDAuODExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTg2ICBwb3dlciAwLjA2NTggIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE4NyAgcG93ZXIgMC42NTkgIDAuNSAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE4OCAgcG93ZXIgMC4wNjU5ICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxODkgIHBvd2VyIDAuNjYxICAwLjUgLT4gMC44MTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxOTAgIHBvd2VyIDAuMDY2MSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTkxICBwb3dlciAwLjY2MiAgMC41IC0+IDAuODE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTkyICBwb3dlciAwLjA2NjIgIDAuNSAtPiAwLjI1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE5MyAgcG93ZXIgMC42NjMgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE5NCAgcG93ZXIgMC4wNjYzICAwLjUgLT4gMC4yNTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxOTUgIHBvd2VyIDAuNjY0ICAwLjUgLT4gMC44MTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQxOTYgIHBvd2VyIDAuMDY2NCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTk3ICBwb3dlciAwLjY2NSAgMC41IC0+IDAuODE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MTk4ICBwb3dlciAwLjA2NjUgIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDE5OSAgcG93ZXIgMC42NjYgIDAuNSAtPiAwLjgxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIwMCAgcG93ZXIgMC4wNjY2ICAwLjUgLT4gMC4yNTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMDEgIHBvd2VyIDAuNjY3ICAwLjUgLT4gMC44MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMDIgIHBvd2VyIDAuMDY2NyAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjAzICBwb3dlciAwLjY2OCAgMC41IC0+IDAuODE3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjA0ICBwb3dlciAwLjA2NjggIDAuNSAtPiAwLjI1OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIwNSAgcG93ZXIgMC42NjkgIDAuNSAtPiAwLjgxOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIwNiAgcG93ZXIgMC4wNjY5ICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMDcgIHBvd2VyIDAuNjcxICAwLjUgLT4gMC44MTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMDggIHBvd2VyIDAuMDY3MSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjA5ICBwb3dlciAwLjY3MiAgMC41IC0+IDAuODIwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjEwICBwb3dlciAwLjA2NzIgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIxMSAgcG93ZXIgMC42NzMgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIxMiAgcG93ZXIgMC4wNjczICAwLjUgLT4gMC4yNTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMTMgIHBvd2VyIDAuNjc0ICAwLjUgLT4gMC44MjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMTQgIHBvd2VyIDAuMDY3NCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjE1ICBwb3dlciAwLjY3NSAgMC41IC0+IDAuODIyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjE2ICBwb3dlciAwLjA2NzUgIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIxNyAgcG93ZXIgMC42NzYgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIxOCAgcG93ZXIgMC4wNjc2ICAwLjUgLT4gMC4yNjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMTkgIHBvd2VyIDAuNjc3ICAwLjUgLT4gMC44MjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMjAgIHBvd2VyIDAuMDY3NyAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjIxICBwb3dlciAwLjY3OCAgMC41IC0+IDAuODIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjIyICBwb3dlciAwLjA2NzggIDAuNSAtPiAwLjI2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIyMyAgcG93ZXIgMC42NzkgIDAuNSAtPiAwLjgyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIyNCAgcG93ZXIgMC4wNjc5ICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMjUgIHBvd2VyIDAuNjgxICAwLjUgLT4gMC44MjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMjYgIHBvd2VyIDAuMDY4MSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjI3ICBwb3dlciAwLjY4MiAgMC41IC0+IDAuODI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjI4ICBwb3dlciAwLjA2ODIgIDAuNSAtPiAwLjI2MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIyOSAgcG93ZXIgMC42ODMgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIzMCAgcG93ZXIgMC4wNjgzICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMzEgIHBvd2VyIDAuNjg0ICAwLjUgLT4gMC44MjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMzIgIHBvd2VyIDAuMDY4NCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjMzICBwb3dlciAwLjY4NSAgMC41IC0+IDAuODI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjM0ICBwb3dlciAwLjA2ODUgIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIzNSAgcG93ZXIgMC42ODYgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDIzNiAgcG93ZXIgMC4wNjg2ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMzcgIHBvd2VyIDAuNjg3ICAwLjUgLT4gMC44MjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyMzggIHBvd2VyIDAuMDY4NyAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjM5ICBwb3dlciAwLjY4OCAgMC41IC0+IDAuODI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjQwICBwb3dlciAwLjA2ODggIDAuNSAtPiAwLjI2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI0MSAgcG93ZXIgMC42ODkgIDAuNSAtPiAwLjgzMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI0MiAgcG93ZXIgMC4wNjg5ICAwLjUgLT4gMC4yNjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNDMgIHBvd2VyIDAuNjkxICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNDQgIHBvd2VyIDAuMDY5MSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjQ1ICBwb3dlciAwLjY5MiAgMC41IC0+IDAuODMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjQ2ICBwb3dlciAwLjA2OTIgIDAuNSAtPiAwLjI2MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI0NyAgcG93ZXIgMC42OTMgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI0OCAgcG93ZXIgMC4wNjkzICAwLjUgLT4gMC4yNjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNDkgIHBvd2VyIDAuNjk0ICAwLjUgLT4gMC44MzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNTAgIHBvd2VyIDAuMDY5NCAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjUxICBwb3dlciAwLjY5NSAgMC41IC0+IDAuODM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjUyICBwb3dlciAwLjA2OTUgIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI1MyAgcG93ZXIgMC42OTYgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI1NCAgcG93ZXIgMC4wNjk2ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNTUgIHBvd2VyIDAuNjk3ICAwLjUgLT4gMC44MzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNTYgIHBvd2VyIDAuMDY5NyAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjU3ICBwb3dlciAwLjY5OCAgMC41IC0+IDAuODM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjU4ICBwb3dlciAwLjA2OTggIDAuNSAtPiAwLjI2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI1OSAgcG93ZXIgMC42OTkgIDAuNSAtPiAwLjgzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI2MCAgcG93ZXIgMC4wNjk5ICAwLjUgLT4gMC4yNjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNjEgIHBvd2VyIDAuNzAxICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNjIgIHBvd2VyIDAuMDcwMSAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjYzICBwb3dlciAwLjcwMiAgMC41IC0+IDAuODM4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjY0ICBwb3dlciAwLjA3MDIgIDAuNSAtPiAwLjI2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI2NSAgcG93ZXIgMC43MDMgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI2NiAgcG93ZXIgMC4wNzAzICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNjcgIHBvd2VyIDAuNzA0ICAwLjUgLT4gMC44MzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNjggIHBvd2VyIDAuMDcwNCAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjY5ICBwb3dlciAwLjcwNSAgMC41IC0+IDAuODQwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjcwICBwb3dlciAwLjA3MDUgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI3MSAgcG93ZXIgMC43MDYgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI3MiAgcG93ZXIgMC4wNzA2ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNzMgIHBvd2VyIDAuNzA3ICAwLjUgLT4gMC44NDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNzQgIHBvd2VyIDAuMDcwNyAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjc1ICBwb3dlciAwLjcwOCAgMC41IC0+IDAuODQxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjc2ICBwb3dlciAwLjA3MDggIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI3NyAgcG93ZXIgMC43MDkgIDAuNSAtPiAwLjg0MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI3OCAgcG93ZXIgMC4wNzA5ICAwLjUgLT4gMC4yNjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyNzkgIHBvd2VyIDAuNzExICAwLjUgLT4gMC44NDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyODAgIHBvd2VyIDAuMDcxMSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjgxICBwb3dlciAwLjcxMiAgMC41IC0+IDAuODQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjgyICBwb3dlciAwLjA3MTIgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI4MyAgcG93ZXIgMC43MTMgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI4NCAgcG93ZXIgMC4wNzEzICAwLjUgLT4gMC4yNjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyODUgIHBvd2VyIDAuNzE0ICAwLjUgLT4gMC44NDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyODYgIHBvd2VyIDAuMDcxNCAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjg3ICBwb3dlciAwLjcxNSAgMC41IC0+IDAuODQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjg4ICBwb3dlciAwLjA3MTUgIDAuNSAtPiAwLjI2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI4OSAgcG93ZXIgMC43MTYgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI5MCAgcG93ZXIgMC4wNzE2ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAotcHdzeDQyOTEgIHBvd2VyIDAuNzE3ICAwLjUgLT4gMC44NDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyOTIgIHBvd2VyIDAuMDcxNyAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MjkzICBwb3dlciAwLjcxOCAgMC41IC0+IDAuODQ3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjk0ICBwb3dlciAwLjA3MTggIDAuNSAtPiAwLjI2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI5NSAgcG93ZXIgMC43MTkgIDAuNSAtPiAwLjg0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDI5NiAgcG93ZXIgMC4wNzE5ICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZAotcHdzeDQyOTcgIHBvd2VyIDAuNzIxICAwLjUgLT4gMC44NDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQyOTggIHBvd2VyIDAuMDcyMSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mjk5ICBwb3dlciAwLjcyMiAgMC41IC0+IDAuODUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzAwICBwb3dlciAwLjA3MjIgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMwMSAgcG93ZXIgMC43MjMgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMwMiAgcG93ZXIgMC4wNzIzICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMDMgIHBvd2VyIDAuNzI0ICAwLjUgLT4gMC44NTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMDQgIHBvd2VyIDAuMDcyNCAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzA1ICBwb3dlciAwLjcyNSAgMC41IC0+IDAuODUxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzA2ICBwb3dlciAwLjA3MjUgIDAuNSAtPiAwLjI2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMwNyAgcG93ZXIgMC43MjYgIDAuNSAtPiAwLjg1MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMwOCAgcG93ZXIgMC4wNzI2ICAwLjUgLT4gMC4yNjkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMDkgIHBvd2VyIDAuNzI3ICAwLjUgLT4gMC44NTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMTAgIHBvd2VyIDAuMDcyNyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzExICBwb3dlciAwLjcyOCAgMC41IC0+IDAuODUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzEyICBwb3dlciAwLjA3MjggIDAuNSAtPiAwLjI3MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMxMyAgcG93ZXIgMC43MjkgIDAuNSAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMxNCAgcG93ZXIgMC4wNzI5ICAwLjUgLT4gMC4yNzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMTUgIHBvd2VyIDAuNzMxICAwLjUgLT4gMC44NTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMTYgIHBvd2VyIDAuMDczMSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzE3ICBwb3dlciAwLjczMiAgMC41IC0+IDAuODU2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzE4ICBwb3dlciAwLjA3MzIgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMxOSAgcG93ZXIgMC43MzMgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMyMCAgcG93ZXIgMC4wNzMzICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMjEgIHBvd2VyIDAuNzM0ICAwLjUgLT4gMC44NTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMjIgIHBvd2VyIDAuMDczNCAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzIzICBwb3dlciAwLjczNSAgMC41IC0+IDAuODU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzI0ICBwb3dlciAwLjA3MzUgIDAuNSAtPiAwLjI3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMyNSAgcG93ZXIgMC43MzYgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMyNiAgcG93ZXIgMC4wNzM2ICAwLjUgLT4gMC4yNzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMjcgIHBvd2VyIDAuNzM3ICAwLjUgLT4gMC44NTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMjggIHBvd2VyIDAuMDczNyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzI5ICBwb3dlciAwLjczOCAgMC41IC0+IDAuODU5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzMwICBwb3dlciAwLjA3MzggIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMzMSAgcG93ZXIgMC43MzkgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMzMiAgcG93ZXIgMC4wNzM5ICAwLjUgLT4gMC4yNzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMzMgIHBvd2VyIDAuNzQxICAwLjUgLT4gMC44NjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMzQgIHBvd2VyIDAuMDc0MSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzM1ICBwb3dlciAwLjc0MiAgMC41IC0+IDAuODYxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzM2ICBwb3dlciAwLjA3NDIgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMzNyAgcG93ZXIgMC43NDMgIDAuNSAtPiAwLjg2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDMzOCAgcG93ZXIgMC4wNzQzICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzMzkgIHBvd2VyIDAuNzQ0ICAwLjUgLT4gMC44NjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNDAgIHBvd2VyIDAuMDc0NCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzQxICBwb3dlciAwLjc0NSAgMC41IC0+IDAuODYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzQyICBwb3dlciAwLjA3NDUgIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM0MyAgcG93ZXIgMC43NDYgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM0NCAgcG93ZXIgMC4wNzQ2ICAwLjUgLT4gMC4yNzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNDUgIHBvd2VyIDAuNzQ3ICAwLjUgLT4gMC44NjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNDYgIHBvd2VyIDAuMDc0NyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzQ3ICBwb3dlciAwLjc0OCAgMC41IC0+IDAuODY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzQ4ICBwb3dlciAwLjA3NDggIDAuNSAtPiAwLjI3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM0OSAgcG93ZXIgMC43NDkgIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM1MCAgcG93ZXIgMC4wNzQ5ICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNTEgIHBvd2VyIDAuNzUxICAwLjUgLT4gMC44NjcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNTIgIHBvd2VyIDAuMDc1MSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzUzICBwb3dlciAwLjc1MiAgMC41IC0+IDAuODY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzU0ICBwb3dlciAwLjA3NTIgIDAuNSAtPiAwLjI3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM1NSAgcG93ZXIgMC43NTMgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM1NiAgcG93ZXIgMC4wNzUzICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNTcgIHBvd2VyIDAuNzU0ICAwLjUgLT4gMC44NjggIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNTggIHBvd2VyIDAuMDc1NCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzU5ICBwb3dlciAwLjc1NSAgMC41IC0+IDAuODY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzYwICBwb3dlciAwLjA3NTUgIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM2MSAgcG93ZXIgMC43NTYgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM2MiAgcG93ZXIgMC4wNzU2ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNjMgIHBvd2VyIDAuNzU3ICAwLjUgLT4gMC44NzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNjQgIHBvd2VyIDAuMDc1NyAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzY1ICBwb3dlciAwLjc1OCAgMC41IC0+IDAuODcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzY2ICBwb3dlciAwLjA3NTggIDAuNSAtPiAwLjI3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM2NyAgcG93ZXIgMC43NTkgIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM2OCAgcG93ZXIgMC4wNzU5ICAwLjUgLT4gMC4yNzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNjkgIHBvd2VyIDAuNzYxICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNzAgIHBvd2VyIDAuMDc2MSAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzcxICBwb3dlciAwLjc2MiAgMC41IC0+IDAuODczICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzcyICBwb3dlciAwLjA3NjIgIDAuNSAtPiAwLjI3NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM3MyAgcG93ZXIgMC43NjMgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM3NCAgcG93ZXIgMC4wNzYzICAwLjUgLT4gMC4yNzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNzUgIHBvd2VyIDAuNzY0ICAwLjUgLT4gMC44NzQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzNzYgIHBvd2VyIDAuMDc2NCAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzc3ICBwb3dlciAwLjc2NSAgMC41IC0+IDAuODc1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzc4ICBwb3dlciAwLjA3NjUgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM3OSAgcG93ZXIgMC43NjYgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM4MCAgcG93ZXIgMC4wNzY2ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzODEgIHBvd2VyIDAuNzY3ICAwLjUgLT4gMC44NzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzODIgIHBvd2VyIDAuMDc2NyAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzgzICBwb3dlciAwLjc2OCAgMC41IC0+IDAuODc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzg0ICBwb3dlciAwLjA3NjggIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM4NSAgcG93ZXIgMC43NjkgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM4NiAgcG93ZXIgMC4wNzY5ICAwLjUgLT4gMC4yNzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzODcgIHBvd2VyIDAuNzcxICAwLjUgLT4gMC44NzggIEluZXhhY3QgUm91bmRlZAotcHdzeDQzODggIHBvd2VyIDAuMDc3MSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzg5ICBwb3dlciAwLjc3MiAgMC41IC0+IDAuODc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0MzkwICBwb3dlciAwLjA3NzIgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM5MSAgcG93ZXIgMC43NzMgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM5MiAgcG93ZXIgMC4wNzczICAwLjUgLT4gMC4yNzggIEluZXhhY3QgUm91bmRlZAotcHdzeDQzOTMgIHBvd2VyIDAuNzc0ICAwLjUgLT4gMC44ODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzOTQgIHBvd2VyIDAuMDc3NCAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzk1ICBwb3dlciAwLjc3NSAgMC41IC0+IDAuODgwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Mzk2ICBwb3dlciAwLjA3NzUgIDAuNSAtPiAwLjI3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM5NyAgcG93ZXIgMC43NzYgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDM5OCAgcG93ZXIgMC4wNzc2ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQzOTkgIHBvd2VyIDAuNzc3ICAwLjUgLT4gMC44ODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MDAgIHBvd2VyIDAuMDc3NyAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDAxICBwb3dlciAwLjc3OCAgMC41IC0+IDAuODgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDAyICBwb3dlciAwLjA3NzggIDAuNSAtPiAwLjI3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQwMyAgcG93ZXIgMC43NzkgIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQwNCAgcG93ZXIgMC4wNzc5ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MDUgIHBvd2VyIDAuNzgxICAwLjUgLT4gMC44ODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MDYgIHBvd2VyIDAuMDc4MSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDA3ICBwb3dlciAwLjc4MiAgMC41IC0+IDAuODg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDA4ICBwb3dlciAwLjA3ODIgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQwOSAgcG93ZXIgMC43ODMgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQxMCAgcG93ZXIgMC4wNzgzICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MTEgIHBvd2VyIDAuNzg0ICAwLjUgLT4gMC44ODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MTIgIHBvd2VyIDAuMDc4NCAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDEzICBwb3dlciAwLjc4NSAgMC41IC0+IDAuODg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDE0ICBwb3dlciAwLjA3ODUgIDAuNSAtPiAwLjI4MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQxNSAgcG93ZXIgMC43ODYgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQxNiAgcG93ZXIgMC4wNzg2ICAwLjUgLT4gMC4yODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MTcgIHBvd2VyIDAuNzg3ICAwLjUgLT4gMC44ODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MTggIHBvd2VyIDAuMDc4NyAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDE5ICBwb3dlciAwLjc4OCAgMC41IC0+IDAuODg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDIwICBwb3dlciAwLjA3ODggIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQyMSAgcG93ZXIgMC43ODkgIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQyMiAgcG93ZXIgMC4wNzg5ICAwLjUgLT4gMC4yODEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MjMgIHBvd2VyIDAuNzkxICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MjQgIHBvd2VyIDAuMDc5MSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDI1ICBwb3dlciAwLjc5MiAgMC41IC0+IDAuODkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDI2ICBwb3dlciAwLjA3OTIgIDAuNSAtPiAwLjI4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQyNyAgcG93ZXIgMC43OTMgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQyOCAgcG93ZXIgMC4wNzkzICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MjkgIHBvd2VyIDAuNzk0ICAwLjUgLT4gMC44OTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MzAgIHBvd2VyIDAuMDc5NCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDMxICBwb3dlciAwLjc5NSAgMC41IC0+IDAuODkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDMyICBwb3dlciAwLjA3OTUgIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQzMyAgcG93ZXIgMC43OTYgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQzNCAgcG93ZXIgMC4wNzk2ICAwLjUgLT4gMC4yODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MzUgIHBvd2VyIDAuNzk3ICAwLjUgLT4gMC44OTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0MzYgIHBvd2VyIDAuMDc5NyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDM3ICBwb3dlciAwLjc5OCAgMC41IC0+IDAuODkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDM4ICBwb3dlciAwLjA3OTggIDAuNSAtPiAwLjI4MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQzOSAgcG93ZXIgMC43OTkgIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ0MCAgcG93ZXIgMC4wNzk5ICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NDEgIHBvd2VyIDAuODAxICAwLjUgLT4gMC44OTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NDIgIHBvd2VyIDAuMDgwMSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDQzICBwb3dlciAwLjgwMiAgMC41IC0+IDAuODk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDQ0ICBwb3dlciAwLjA4MDIgIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ0NSAgcG93ZXIgMC44MDMgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ0NiAgcG93ZXIgMC4wODAzICAwLjUgLT4gMC4yODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NDcgIHBvd2VyIDAuODA0ICAwLjUgLT4gMC44OTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NDggIHBvd2VyIDAuMDgwNCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDQ5ICBwb3dlciAwLjgwNSAgMC41IC0+IDAuODk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDUwICBwb3dlciAwLjA4MDUgIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ1MSAgcG93ZXIgMC44MDYgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ1MiAgcG93ZXIgMC4wODA2ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NTMgIHBvd2VyIDAuODA3ICAwLjUgLT4gMC44OTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NTQgIHBvd2VyIDAuMDgwNyAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDU1ICBwb3dlciAwLjgwOCAgMC41IC0+IDAuODk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDU2ICBwb3dlciAwLjA4MDggIDAuNSAtPiAwLjI4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ1NyAgcG93ZXIgMC44MDkgIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ1OCAgcG93ZXIgMC4wODA5ICAwLjUgLT4gMC4yODQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NTkgIHBvd2VyIDAuODExICAwLjUgLT4gMC45MDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NjAgIHBvd2VyIDAuMDgxMSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDYxICBwb3dlciAwLjgxMiAgMC41IC0+IDAuOTAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDYyICBwb3dlciAwLjA4MTIgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ2MyAgcG93ZXIgMC44MTMgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ2NCAgcG93ZXIgMC4wODEzICAwLjUgLT4gMC4yODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NjUgIHBvd2VyIDAuODE0ICAwLjUgLT4gMC45MDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NjYgIHBvd2VyIDAuMDgxNCAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDY3ICBwb3dlciAwLjgxNSAgMC41IC0+IDAuOTAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDY4ICBwb3dlciAwLjA4MTUgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ2OSAgcG93ZXIgMC44MTYgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ3MCAgcG93ZXIgMC4wODE2ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NzEgIHBvd2VyIDAuODE3ICAwLjUgLT4gMC45MDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NzIgIHBvd2VyIDAuMDgxNyAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDczICBwb3dlciAwLjgxOCAgMC41IC0+IDAuOTA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDc0ICBwb3dlciAwLjA4MTggIDAuNSAtPiAwLjI4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ3NSAgcG93ZXIgMC44MTkgIDAuNSAtPiAwLjkwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ3NiAgcG93ZXIgMC4wODE5ICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NzcgIHBvd2VyIDAuODIxICAwLjUgLT4gMC45MDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0NzggIHBvd2VyIDAuMDgyMSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDc5ICBwb3dlciAwLjgyMiAgMC41IC0+IDAuOTA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDgwICBwb3dlciAwLjA4MjIgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ4MSAgcG93ZXIgMC44MjMgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ4MiAgcG93ZXIgMC4wODIzICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0ODMgIHBvd2VyIDAuODI0ICAwLjUgLT4gMC45MDggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0ODQgIHBvd2VyIDAuMDgyNCAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDg1ICBwb3dlciAwLjgyNSAgMC41IC0+IDAuOTA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDg2ICBwb3dlciAwLjA4MjUgIDAuNSAtPiAwLjI4NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ4NyAgcG93ZXIgMC44MjYgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ4OCAgcG93ZXIgMC4wODI2ICAwLjUgLT4gMC4yODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0ODkgIHBvd2VyIDAuODI3ICAwLjUgLT4gMC45MDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0OTAgIHBvd2VyIDAuMDgyNyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDkxICBwb3dlciAwLjgyOCAgMC41IC0+IDAuOTEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDkyICBwb3dlciAwLjA4MjggIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ5MyAgcG93ZXIgMC44MjkgIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ5NCAgcG93ZXIgMC4wODI5ICAwLjUgLT4gMC4yODggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0OTUgIHBvd2VyIDAuODMxICAwLjUgLT4gMC45MTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ0OTYgIHBvd2VyIDAuMDgzMSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDk3ICBwb3dlciAwLjgzMiAgMC41IC0+IDAuOTEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NDk4ICBwb3dlciAwLjA4MzIgIDAuNSAtPiAwLjI4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDQ5OSAgcG93ZXIgMC44MzMgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUwMCAgcG93ZXIgMC4wODMzICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MDEgIHBvd2VyIDAuODM0ICAwLjUgLT4gMC45MTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MDIgIHBvd2VyIDAuMDgzNCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTAzICBwb3dlciAwLjgzNSAgMC41IC0+IDAuOTE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTA0ICBwb3dlciAwLjA4MzUgIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUwNSAgcG93ZXIgMC44MzYgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUwNiAgcG93ZXIgMC4wODM2ICAwLjUgLT4gMC4yODkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MDcgIHBvd2VyIDAuODM3ICAwLjUgLT4gMC45MTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MDggIHBvd2VyIDAuMDgzNyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTA5ICBwb3dlciAwLjgzOCAgMC41IC0+IDAuOTE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTEwICBwb3dlciAwLjA4MzggIDAuNSAtPiAwLjI4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUxMSAgcG93ZXIgMC44MzkgIDAuNSAtPiAwLjkxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUxMiAgcG93ZXIgMC4wODM5ICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MTMgIHBvd2VyIDAuODQxICAwLjUgLT4gMC45MTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MTQgIHBvd2VyIDAuMDg0MSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTE1ICBwb3dlciAwLjg0MiAgMC41IC0+IDAuOTE4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTE2ICBwb3dlciAwLjA4NDIgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUxNyAgcG93ZXIgMC44NDMgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUxOCAgcG93ZXIgMC4wODQzICAwLjUgLT4gMC4yOTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MTkgIHBvd2VyIDAuODQ0ICAwLjUgLT4gMC45MTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MjAgIHBvd2VyIDAuMDg0NCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTIxICBwb3dlciAwLjg0NSAgMC41IC0+IDAuOTE5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTIyICBwb3dlciAwLjA4NDUgIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUyMyAgcG93ZXIgMC44NDYgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUyNCAgcG93ZXIgMC4wODQ2ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MjUgIHBvd2VyIDAuODQ3ICAwLjUgLT4gMC45MjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MjYgIHBvd2VyIDAuMDg0NyAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTI3ICBwb3dlciAwLjg0OCAgMC41IC0+IDAuOTIxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTI4ICBwb3dlciAwLjA4NDggIDAuNSAtPiAwLjI5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUyOSAgcG93ZXIgMC44NDkgIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUzMCAgcG93ZXIgMC4wODQ5ICAwLjUgLT4gMC4yOTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MzEgIHBvd2VyIDAuODUxICAwLjUgLT4gMC45MjIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MzIgIHBvd2VyIDAuMDg1MSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTMzICBwb3dlciAwLjg1MiAgMC41IC0+IDAuOTIzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTM0ICBwb3dlciAwLjA4NTIgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUzNSAgcG93ZXIgMC44NTMgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDUzNiAgcG93ZXIgMC4wODUzICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MzcgIHBvd2VyIDAuODU0ICAwLjUgLT4gMC45MjQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1MzggIHBvd2VyIDAuMDg1NCAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTM5ICBwb3dlciAwLjg1NSAgMC41IC0+IDAuOTI1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTQwICBwb3dlciAwLjA4NTUgIDAuNSAtPiAwLjI5MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU0MSAgcG93ZXIgMC44NTYgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU0MiAgcG93ZXIgMC4wODU2ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NDMgIHBvd2VyIDAuODU3ICAwLjUgLT4gMC45MjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NDQgIHBvd2VyIDAuMDg1NyAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTQ1ICBwb3dlciAwLjg1OCAgMC41IC0+IDAuOTI2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTQ2ICBwb3dlciAwLjA4NTggIDAuNSAtPiAwLjI5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU0NyAgcG93ZXIgMC44NTkgIDAuNSAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU0OCAgcG93ZXIgMC4wODU5ICAwLjUgLT4gMC4yOTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NDkgIHBvd2VyIDAuODYxICAwLjUgLT4gMC45MjggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NTAgIHBvd2VyIDAuMDg2MSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTUxICBwb3dlciAwLjg2MiAgMC41IC0+IDAuOTI4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTUyICBwb3dlciAwLjA4NjIgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU1MyAgcG93ZXIgMC44NjMgIDAuNSAtPiAwLjkyOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU1NCAgcG93ZXIgMC4wODYzICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NTUgIHBvd2VyIDAuODY0ICAwLjUgLT4gMC45MzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NTYgIHBvd2VyIDAuMDg2NCAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTU3ICBwb3dlciAwLjg2NSAgMC41IC0+IDAuOTMwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTU4ICBwb3dlciAwLjA4NjUgIDAuNSAtPiAwLjI5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU1OSAgcG93ZXIgMC44NjYgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU2MCAgcG93ZXIgMC4wODY2ICAwLjUgLT4gMC4yOTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NjEgIHBvd2VyIDAuODY3ICAwLjUgLT4gMC45MzEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NjIgIHBvd2VyIDAuMDg2NyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTYzICBwb3dlciAwLjg2OCAgMC41IC0+IDAuOTMyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTY0ICBwb3dlciAwLjA4NjggIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU2NSAgcG93ZXIgMC44NjkgIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU2NiAgcG93ZXIgMC4wODY5ICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NjcgIHBvd2VyIDAuODcxICAwLjUgLT4gMC45MzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NjggIHBvd2VyIDAuMDg3MSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTY5ICBwb3dlciAwLjg3MiAgMC41IC0+IDAuOTM0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTcwICBwb3dlciAwLjA4NzIgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU3MSAgcG93ZXIgMC44NzMgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU3MiAgcG93ZXIgMC4wODczICAwLjUgLT4gMC4yOTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NzMgIHBvd2VyIDAuODc0ICAwLjUgLT4gMC45MzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NzQgIHBvd2VyIDAuMDg3NCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTc1ICBwb3dlciAwLjg3NSAgMC41IC0+IDAuOTM1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTc2ICBwb3dlciAwLjA4NzUgIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU3NyAgcG93ZXIgMC44NzYgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU3OCAgcG93ZXIgMC4wODc2ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1NzkgIHBvd2VyIDAuODc3ICAwLjUgLT4gMC45MzYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1ODAgIHBvd2VyIDAuMDg3NyAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTgxICBwb3dlciAwLjg3OCAgMC41IC0+IDAuOTM3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTgyICBwb3dlciAwLjA4NzggIDAuNSAtPiAwLjI5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU4MyAgcG93ZXIgMC44NzkgIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU4NCAgcG93ZXIgMC4wODc5ICAwLjUgLT4gMC4yOTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1ODUgIHBvd2VyIDAuODgxICAwLjUgLT4gMC45MzkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1ODYgIHBvd2VyIDAuMDg4MSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTg3ICBwb3dlciAwLjg4MiAgMC41IC0+IDAuOTM5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTg4ICBwb3dlciAwLjA4ODIgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU4OSAgcG93ZXIgMC44ODMgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU5MCAgcG93ZXIgMC4wODgzICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1OTEgIHBvd2VyIDAuODg0ICAwLjUgLT4gMC45NDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1OTIgIHBvd2VyIDAuMDg4NCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTkzICBwb3dlciAwLjg4NSAgMC41IC0+IDAuOTQxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTk0ICBwb3dlciAwLjA4ODUgIDAuNSAtPiAwLjI5NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU5NSAgcG93ZXIgMC44ODYgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDU5NiAgcG93ZXIgMC4wODg2ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1OTcgIHBvd2VyIDAuODg3ICAwLjUgLT4gMC45NDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ1OTggIHBvd2VyIDAuMDg4NyAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NTk5ICBwb3dlciAwLjg4OCAgMC41IC0+IDAuOTQyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjAwICBwb3dlciAwLjA4ODggIDAuNSAtPiAwLjI5OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYwMSAgcG93ZXIgMC44ODkgIDAuNSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYwMiAgcG93ZXIgMC4wODg5ICAwLjUgLT4gMC4yOTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MDMgIHBvd2VyIDAuODkxICAwLjUgLT4gMC45NDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MDQgIHBvd2VyIDAuMDg5MSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjA1ICBwb3dlciAwLjg5MiAgMC41IC0+IDAuOTQ0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjA2ICBwb3dlciAwLjA4OTIgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYwNyAgcG93ZXIgMC44OTMgIDAuNSAtPiAwLjk0NSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYwOCAgcG93ZXIgMC4wODkzICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MDkgIHBvd2VyIDAuODk0ICAwLjUgLT4gMC45NDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MTAgIHBvd2VyIDAuMDg5NCAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjExICBwb3dlciAwLjg5NSAgMC41IC0+IDAuOTQ2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjEyICBwb3dlciAwLjA4OTUgIDAuNSAtPiAwLjI5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYxMyAgcG93ZXIgMC44OTYgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYxNCAgcG93ZXIgMC4wODk2ICAwLjUgLT4gMC4yOTkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MTUgIHBvd2VyIDAuODk3ICAwLjUgLT4gMC45NDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MTYgIHBvd2VyIDAuMDg5NyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjE3ICBwb3dlciAwLjg5OCAgMC41IC0+IDAuOTQ4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjE4ICBwb3dlciAwLjA4OTggIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYxOSAgcG93ZXIgMC44OTkgIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYyMCAgcG93ZXIgMC4wODk5ICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MjEgIHBvd2VyIDAuOTAxICAwLjUgLT4gMC45NDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MjIgIHBvd2VyIDAuMDkwMSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjIzICBwb3dlciAwLjkwMiAgMC41IC0+IDAuOTUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjI0ICBwb3dlciAwLjA5MDIgIDAuNSAtPiAwLjMwMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYyNSAgcG93ZXIgMC45MDMgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYyNiAgcG93ZXIgMC4wOTAzICAwLjUgLT4gMC4zMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MjcgIHBvd2VyIDAuOTA0ICAwLjUgLT4gMC45NTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MjggIHBvd2VyIDAuMDkwNCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjI5ICBwb3dlciAwLjkwNSAgMC41IC0+IDAuOTUxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjMwICBwb3dlciAwLjA5MDUgIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYzMSAgcG93ZXIgMC45MDYgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYzMiAgcG93ZXIgMC4wOTA2ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MzMgIHBvd2VyIDAuOTA3ICAwLjUgLT4gMC45NTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MzQgIHBvd2VyIDAuMDkwNyAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjM1ICBwb3dlciAwLjkwOCAgMC41IC0+IDAuOTUzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjM2ICBwb3dlciAwLjA5MDggIDAuNSAtPiAwLjMwMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYzNyAgcG93ZXIgMC45MDkgIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDYzOCAgcG93ZXIgMC4wOTA5ICAwLjUgLT4gMC4zMDEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2MzkgIHBvd2VyIDAuOTExICAwLjUgLT4gMC45NTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NDAgIHBvd2VyIDAuMDkxMSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjQxICBwb3dlciAwLjkxMiAgMC41IC0+IDAuOTU1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjQyICBwb3dlciAwLjA5MTIgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY0MyAgcG93ZXIgMC45MTMgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY0NCAgcG93ZXIgMC4wOTEzICAwLjUgLT4gMC4zMDIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NDUgIHBvd2VyIDAuOTE0ICAwLjUgLT4gMC45NTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NDYgIHBvd2VyIDAuMDkxNCAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjQ3ICBwb3dlciAwLjkxNSAgMC41IC0+IDAuOTU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjQ4ICBwb3dlciAwLjA5MTUgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY0OSAgcG93ZXIgMC45MTYgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY1MCAgcG93ZXIgMC4wOTE2ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NTEgIHBvd2VyIDAuOTE3ICAwLjUgLT4gMC45NTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NTIgIHBvd2VyIDAuMDkxNyAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjUzICBwb3dlciAwLjkxOCAgMC41IC0+IDAuOTU4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjU0ICBwb3dlciAwLjA5MTggIDAuNSAtPiAwLjMwMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY1NSAgcG93ZXIgMC45MTkgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY1NiAgcG93ZXIgMC4wOTE5ICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NTcgIHBvd2VyIDAuOTIxICAwLjUgLT4gMC45NjAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NTggIHBvd2VyIDAuMDkyMSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjU5ICBwb3dlciAwLjkyMiAgMC41IC0+IDAuOTYwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjYwICBwb3dlciAwLjA5MjIgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY2MSAgcG93ZXIgMC45MjMgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY2MiAgcG93ZXIgMC4wOTIzICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NjMgIHBvd2VyIDAuOTI0ICAwLjUgLT4gMC45NjEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NjQgIHBvd2VyIDAuMDkyNCAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjY1ICBwb3dlciAwLjkyNSAgMC41IC0+IDAuOTYyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjY2ICBwb3dlciAwLjA5MjUgIDAuNSAtPiAwLjMwNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY2NyAgcG93ZXIgMC45MjYgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY2OCAgcG93ZXIgMC4wOTI2ICAwLjUgLT4gMC4zMDQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NjkgIHBvd2VyIDAuOTI3ICAwLjUgLT4gMC45NjMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NzAgIHBvd2VyIDAuMDkyNyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjcxICBwb3dlciAwLjkyOCAgMC41IC0+IDAuOTYzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjcyICBwb3dlciAwLjA5MjggIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY3MyAgcG93ZXIgMC45MjkgIDAuNSAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY3NCAgcG93ZXIgMC4wOTI5ICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NzUgIHBvd2VyIDAuOTMxICAwLjUgLT4gMC45NjUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2NzYgIHBvd2VyIDAuMDkzMSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njc3ICBwb3dlciAwLjkzMiAgMC41IC0+IDAuOTY1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njc4ICBwb3dlciAwLjA5MzIgIDAuNSAtPiAwLjMwNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY3OSAgcG93ZXIgMC45MzMgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY4MCAgcG93ZXIgMC4wOTMzICAwLjUgLT4gMC4zMDUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2ODEgIHBvd2VyIDAuOTM0ICAwLjUgLT4gMC45NjYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2ODIgIHBvd2VyIDAuMDkzNCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjgzICBwb3dlciAwLjkzNSAgMC41IC0+IDAuOTY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njg0ICBwb3dlciAwLjA5MzUgIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY4NSAgcG93ZXIgMC45MzYgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY4NiAgcG93ZXIgMC4wOTM2ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2ODcgIHBvd2VyIDAuOTM3ICAwLjUgLT4gMC45NjggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2ODggIHBvd2VyIDAuMDkzNyAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njg5ICBwb3dlciAwLjkzOCAgMC41IC0+IDAuOTY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NjkwICBwb3dlciAwLjA5MzggIDAuNSAtPiAwLjMwNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY5MSAgcG93ZXIgMC45MzkgIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY5MiAgcG93ZXIgMC4wOTM5ICAwLjUgLT4gMC4zMDYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2OTMgIHBvd2VyIDAuOTQxICAwLjUgLT4gMC45NzAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2OTQgIHBvd2VyIDAuMDk0MSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njk1ICBwb3dlciAwLjk0MiAgMC41IC0+IDAuOTcxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Njk2ICBwb3dlciAwLjA5NDIgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY5NyAgcG93ZXIgMC45NDMgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDY5OCAgcG93ZXIgMC4wOTQzICAwLjUgLT4gMC4zMDcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ2OTkgIHBvd2VyIDAuOTQ0ICAwLjUgLT4gMC45NzIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MDAgIHBvd2VyIDAuMDk0NCAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzAxICBwb3dlciAwLjk0NSAgMC41IC0+IDAuOTcyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzAyICBwb3dlciAwLjA5NDUgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcwMyAgcG93ZXIgMC45NDYgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcwNCAgcG93ZXIgMC4wOTQ2ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MDUgIHBvd2VyIDAuOTQ3ICAwLjUgLT4gMC45NzMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MDYgIHBvd2VyIDAuMDk0NyAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzA3ICBwb3dlciAwLjk0OCAgMC41IC0+IDAuOTc0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzA4ICBwb3dlciAwLjA5NDggIDAuNSAtPiAwLjMwOCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcwOSAgcG93ZXIgMC45NDkgIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcxMCAgcG93ZXIgMC4wOTQ5ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MTEgIHBvd2VyIDAuOTUxICAwLjUgLT4gMC45NzUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MTIgIHBvd2VyIDAuMDk1MSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzEzICBwb3dlciAwLjk1MiAgMC41IC0+IDAuOTc2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzE0ICBwb3dlciAwLjA5NTIgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcxNSAgcG93ZXIgMC45NTMgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcxNiAgcG93ZXIgMC4wOTUzICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MTcgIHBvd2VyIDAuOTU0ICAwLjUgLT4gMC45NzcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MTggIHBvd2VyIDAuMDk1NCAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzE5ICBwb3dlciAwLjk1NSAgMC41IC0+IDAuOTc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzIwICBwb3dlciAwLjA5NTUgIDAuNSAtPiAwLjMwOSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcyMSAgcG93ZXIgMC45NTYgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcyMiAgcG93ZXIgMC4wOTU2ICAwLjUgLT4gMC4zMDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MjMgIHBvd2VyIDAuOTU3ICAwLjUgLT4gMC45NzggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MjQgIHBvd2VyIDAuMDk1NyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzI1ICBwb3dlciAwLjk1OCAgMC41IC0+IDAuOTc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzI2ICBwb3dlciAwLjA5NTggIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcyNyAgcG93ZXIgMC45NTkgIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDcyOCAgcG93ZXIgMC4wOTU5ICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MjkgIHBvd2VyIDAuOTYxICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MzAgIHBvd2VyIDAuMDk2MSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzMxICBwb3dlciAwLjk2MiAgMC41IC0+IDAuOTgxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzMyICBwb3dlciAwLjA5NjIgIDAuNSAtPiAwLjMxMCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDczMyAgcG93ZXIgMC45NjMgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDczNCAgcG93ZXIgMC4wOTYzICAwLjUgLT4gMC4zMTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MzUgIHBvd2VyIDAuOTY0ICAwLjUgLT4gMC45ODIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3MzYgIHBvd2VyIDAuMDk2NCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzM3ICBwb3dlciAwLjk2NSAgMC41IC0+IDAuOTgyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzM4ICBwb3dlciAwLjA5NjUgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDczOSAgcG93ZXIgMC45NjYgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc0MCAgcG93ZXIgMC4wOTY2ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NDEgIHBvd2VyIDAuOTY3ICAwLjUgLT4gMC45ODMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NDIgIHBvd2VyIDAuMDk2NyAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzQzICBwb3dlciAwLjk2OCAgMC41IC0+IDAuOTg0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzQ0ICBwb3dlciAwLjA5NjggIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc0NSAgcG93ZXIgMC45NjkgIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc0NiAgcG93ZXIgMC4wOTY5ICAwLjUgLT4gMC4zMTEgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NDcgIHBvd2VyIDAuOTcxICAwLjUgLT4gMC45ODUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NDggIHBvd2VyIDAuMDk3MSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzQ5ICBwb3dlciAwLjk3MiAgMC41IC0+IDAuOTg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzUwICBwb3dlciAwLjA5NzIgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc1MSAgcG93ZXIgMC45NzMgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc1MiAgcG93ZXIgMC4wOTczICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NTMgIHBvd2VyIDAuOTc0ICAwLjUgLT4gMC45ODcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NTQgIHBvd2VyIDAuMDk3NCAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzU1ICBwb3dlciAwLjk3NSAgMC41IC0+IDAuOTg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzU2ICBwb3dlciAwLjA5NzUgIDAuNSAtPiAwLjMxMiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc1NyAgcG93ZXIgMC45NzYgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc1OCAgcG93ZXIgMC4wOTc2ICAwLjUgLT4gMC4zMTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NTkgIHBvd2VyIDAuOTc3ICAwLjUgLT4gMC45ODggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NjAgIHBvd2VyIDAuMDk3NyAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzYxICBwb3dlciAwLjk3OCAgMC41IC0+IDAuOTg5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzYyICBwb3dlciAwLjA5NzggIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc2MyAgcG93ZXIgMC45NzkgIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc2NCAgcG93ZXIgMC4wOTc5ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NjUgIHBvd2VyIDAuOTgxICAwLjUgLT4gMC45OTAgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NjYgIHBvd2VyIDAuMDk4MSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzY3ICBwb3dlciAwLjk4MiAgMC41IC0+IDAuOTkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzY4ICBwb3dlciAwLjA5ODIgIDAuNSAtPiAwLjMxMyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc2OSAgcG93ZXIgMC45ODMgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc3MCAgcG93ZXIgMC4wOTgzICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NzEgIHBvd2VyIDAuOTg0ICAwLjUgLT4gMC45OTIgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NzIgIHBvd2VyIDAuMDk4NCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzczICBwb3dlciAwLjk4NSAgMC41IC0+IDAuOTkyICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzc0ICBwb3dlciAwLjA5ODUgIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc3NSAgcG93ZXIgMC45ODYgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc3NiAgcG93ZXIgMC4wOTg2ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NzcgIHBvd2VyIDAuOTg3ICAwLjUgLT4gMC45OTMgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3NzggIHBvd2VyIDAuMDk4NyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzc5ICBwb3dlciAwLjk4OCAgMC41IC0+IDAuOTk0ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzgwICBwb3dlciAwLjA5ODggIDAuNSAtPiAwLjMxNCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc4MSAgcG93ZXIgMC45ODkgIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc4MiAgcG93ZXIgMC4wOTg5ICAwLjUgLT4gMC4zMTQgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3ODMgIHBvd2VyIDAuOTkxICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3ODQgIHBvd2VyIDAuMDk5MSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzg1ICBwb3dlciAwLjk5MiAgMC41IC0+IDAuOTk2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzg2ICBwb3dlciAwLjA5OTIgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc4NyAgcG93ZXIgMC45OTMgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc4OCAgcG93ZXIgMC4wOTkzICAwLjUgLT4gMC4zMTUgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3ODkgIHBvd2VyIDAuOTk0ICAwLjUgLT4gMC45OTcgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3OTAgIHBvd2VyIDAuMDk5NCAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzkxICBwb3dlciAwLjk5NSAgMC41IC0+IDAuOTk3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0NzkyICBwb3dlciAwLjA5OTUgIDAuNSAtPiAwLjMxNSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc5MyAgcG93ZXIgMC45OTYgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc5NCAgcG93ZXIgMC4wOTk2ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3OTUgIHBvd2VyIDAuOTk3ICAwLjUgLT4gMC45OTggIEluZXhhY3QgUm91bmRlZAotcHdzeDQ3OTYgIHBvd2VyIDAuMDk5NyAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzk3ICBwb3dlciAwLjk5OCAgMC41IC0+IDAuOTk5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g0Nzk4ICBwb3dlciAwLjA5OTggIDAuNSAtPiAwLjMxNiAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDc5OSAgcG93ZXIgMC45OTkgIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NDgwMCAgcG93ZXIgMC4wOTk5ICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZAotCi0tLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlCi0tLSBuZWVkZWQgaW4gc29tZSBjYXNlcyAoYm90aCB1cCBhbmQgZG93bikgW3NlZSBIdWxsMTk4NWJdCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi1tYXhFeHBvbmVudDogOTk5Ci1taW5leHBvbmVudDogLTk5OQotcHJlY2lzaW9uOiAgIDQKLXB3c3g1MDAxICBwb3dlciAwLjAxMTggICAwLjUgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDAyICBwb3dlciAwLjExOSAgICAwLjUgLT4gMC4zNDUwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDAzICBwb3dlciAwLjAxMTkgICAwLjUgLT4gMC4xMDkxICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA0ICBwb3dlciAwLjEyMSAgICAwLjUgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA1ICBwb3dlciAwLjAxMjEgICAwLjUgLT4gMC4xMTAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA2ICBwb3dlciAwLjEyMiAgICAwLjUgLT4gMC4zNDkzICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA3ICBwb3dlciAwLjAxMjIgICAwLjUgLT4gMC4xMTA1ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA4ICBwb3dlciAwLjEyMyAgICAwLjUgLT4gMC4zNTA3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDA5ICBwb3dlciAwLjQ5NCAgICAwLjUgLT4gMC43MDI5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDEwICBwb3dlciAwLjA2NjkgICAwLjUgLT4gMC4yNTg3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDExICBwb3dlciAwLjk1NTggICAwLjUgLT4gMC45Nzc3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDEyICBwb3dlciAwLjkzNDggICAwLjUgLT4gMC45NjY5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDEzICBwb3dlciAwLjkzNDUgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDE0ICBwb3dlciAwLjA5MzQ1ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDE1ICBwb3dlciAwLjkzNDYgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDE2ICBwb3dlciAwLjA5MzQ2ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g1MDE3ICBwb3dlciAwLjkzNDcgICAwLjUgLT4gMC45NjY4ICBJbmV4YWN0IFJvdW5kZWQKLQotLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aAotcHJlY2lzaW9uOiA5Ci1wd3N4NzAwICBwb3dlciAgMCAgICAgICAgMC41IC0+ICcwJwotcHdzeDcwMSAgcG93ZXIgIC0wICAgICAgIDAuNSAtPiAnMCcKLXB3c3g3MDIgIHBvd2VyICAwLjM5ICAgICAwLjUgLT4gMC42MjQ0OTk4MDAgICAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzAzICBwb3dlciAgMTAwICAgICAgMC41IC0+ICcxMC4wMDAwMDAwJyAgIEluZXhhY3QgUm91bmRlZAotcHdzeDcwNCAgcG93ZXIgIDEuMDAgICAgIDAuNSAtPiAnMS4wMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3MDUgIHBvd2VyICA3ICAgICAgICAwLjUgLT4gJzIuNjQ1NzUxMzEnICAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzA2ICBwb3dlciAgMTAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgICAgIEluZXhhY3QgUm91bmRlZAotCi0tLSBzb21lIG9uZS1vZmZzCi1wcmVjaXNpb246IDkKLXB3c3g3MTEgIHBvd2VyICAwLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzEyICBwb3dlciAgMC4yICAgICAgMC41IC0+IDAuNDQ3MjEzNTk1ICAgIEluZXhhY3QgUm91bmRlZAotcHdzeDcxMyAgcG93ZXIgIDAuMyAgICAgIDAuNSAtPiAwLjU0NzcyMjU1OCAgICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3MTQgIHBvd2VyICAwLjQgICAgICAwLjUgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzE1ICBwb3dlciAgMC41ICAgICAgMC41IC0+IDAuNzA3MTA2NzgxICAgIEluZXhhY3QgUm91bmRlZAotcHdzeDcxNiAgcG93ZXIgIDAuNiAgICAgIDAuNSAtPiAwLjc3NDU5NjY2OSAgICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3MTcgIHBvd2VyICAwLjcgICAgICAwLjUgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzE4ICBwb3dlciAgMC44ICAgICAgMC41IC0+IDAuODk0NDI3MTkxICAgIEluZXhhY3QgUm91bmRlZAotcHdzeDcxOSAgcG93ZXIgIDAuOSAgICAgIDAuNSAtPiAwLjk0ODY4MzI5OCAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQotcHdzeDcyMCAgcG93ZXIgKzAuMSAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NjAgICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMTEKLXB3c3g3MjEgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMiAgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDEyCi1wd3N4NzIyICBwb3dlciArMC4xICAgICAgMC41IC0+IDAuMzE2MjI3NzY2MDE3IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiA5Ci1wd3N4NzIzICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxNQotcHdzeDcyNCAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTc5OTgzOTg0MCBJbmV4YWN0IFJvdW5kZWQKLQotLS0gZGlzY3Vzc2lvbiBjYXNlcwotcHJlY2lzaW9uOiA3Ci1wd3N4NzMxICBwb3dlciAgICAgOSAgICAwLjUgLT4gMy4wMDAwMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDczMiAgcG93ZXIgICAxMDAgICAgMC41IC0+IDEwLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3MzMgIHBvd2VyICAgMTIzICAgIDAuNSAtPiAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzM0ICBwb3dlciAgIDE0NCAgICAwLjUgLT4gMTIuMDAwMDAgIEluZXhhY3QgUm91bmRlZAotcHdzeDczNSAgcG93ZXIgICAxNTYgICAgMC41IC0+IDEyLjQ5MDAwICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3MzYgIHBvd2VyIDEwMDAwICAgIDAuNSAtPiAxMDAuMDAwMCAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHZhbHVlcyBjbG9zZSB0byBvdmVyZmxvdyAoaWYgdGhlcmUgd2VyZSBpbnB1dCByb3VuZGluZykKLW1heGV4cG9uZW50OiA5OQotbWluZXhwb25lbnQ6IC05OQotcHJlY2lzaW9uOiA1Ci1wd3N4NzYwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4RSs0OSBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3NjEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTlFKzQ5IEluZXhhY3QgUm91bmRlZAotcHdzeDc2MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OUUrNDkgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzYzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3NjQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiAxLjAwMDBFKzUwIEluZXhhY3QgUm91bmRlZAotcHdzeDc2NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDEuMDAwMEUrNTAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzY2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogOQotcHdzeDc3MCAgcG93ZXIgIDkuOTk5N0UrOTkgICAgMC41IC0+IDkuOTk5ODUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3NzEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzcyICBwb3dlciAgOS45OTk5RSs5OSAgICAwLjUgLT4gOS45OTk5NTAwMEUrNDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDc3MyAgcG93ZXIgIDkuOTk5OTFFKzk5ICAgMC41IC0+IDkuOTk5OTU1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3NzQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkCi1wd3N4Nzc1ICBwb3dlciAgOS45OTk5NUUrOTkgICAwLjUgLT4gOS45OTk5NzUwMEUrNDkgIEluZXhhY3QgUm91bmRlZAotcHdzeDc3NiAgcG93ZXIgIDkuOTk5OTlFKzk5ICAgMC41IC0+IDkuOTk5OTk1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQKLXByZWNpc2lvbjogMjAKLXB3c3g3ODAgIHBvd2VyICA5Ljk5OTdFKzk5ICAgIDAuNSAtPiAnOS45OTk4NDk5OTg4NzQ5ODMxMjQ3RSs0OScgSW5leGFjdCBSb3VuZGVkCi1wd3N4NzgxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gJzkuOTk5ODk5OTk5NDk5OTk0OTk5OUUrNDknIEluZXhhY3QgUm91bmRlZAotcHdzeDc4MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3ODMgIHBvd2VyICA5Ljk5OTkxRSs5OSAgIDAuNSAtPiAnOS45OTk5NTQ5OTk4OTg3NDk1NDQ0RSs0OScgSW5leGFjdCBSb3VuZGVkCi1wd3N4Nzg0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gJzkuOTk5OTY5OTk5OTU0OTk5ODY1MEUrNDknIEluZXhhY3QgUm91bmRlZAotcHdzeDc4NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQKLXB3c3g3ODYgIHBvd2VyICA5Ljk5OTk5RSs5OSAgIDAuNSAtPiAnOS45OTk5OTQ5OTk5OTg3NDk5OTk0RSs0OScgSW5leGFjdCBSb3VuZGVkCi0KLS0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0KLS0tIEV0aW55ID0gLShFbWF4ICsgKHByZWNpc2lvbi0xKSkKLS0tIHN0YXJ0IHdpdGggc3Vibm9ybWFsIG9wZXJhbmRzIGFuZCBub3JtYWwgcmVzdWx0cwotbWF4ZXhwb25lbnQ6IDkKLW1pbmV4cG9uZW50OiAtOQotcHJlY2lzaW9uOiA5ICAgICAgICAgICAgICAgIC0tIEV0aW55PS0xNwotcHdzeDgwMCAgcG93ZXIgIDFFLTE3ICAgIDAuNSAtPiAzLjE2MjI3NzY2RS05IEluZXhhY3QgUm91bmRlZAotcHdzeDgwMSAgcG93ZXIgMTBFLTE3ICAgIDAuNSAtPiAxLjAwMDAwMDAwRS04IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxMCAgICAgICAgICAgICAgIC0tIEV0aW55PS0xOAotcHdzeDgwMiAgcG93ZXIgMTBFLTE4ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQKLXB3c3g4MDMgIHBvd2VyICAxRS0xOCAgICAwLjUgLT4gMS4wMDAwMDAwMDBFLTkgSW5leGFjdCBSb3VuZGVkCi0KLXByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkKLXB3c3g4MDQgIHBvd2VyICAxRS0xOSAgICAwLjUgLT4gMy4xNjIyNzc2NjBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0tLSBUaGUgbmV4dCB0ZXN0IHNob3VsZCBiZSBza2lwcGVkIGZvciBkZWNOdW1iZXIKLXB3c3g4MDUgIHBvd2VyIDEwRS0xOSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZAotcHJlY2lzaW9uOiAxMiAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMAotcHdzeDgwNiAgcG93ZXIgMTBFLTIwICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1wd3N4ODA3ICBwb3dlciAgMUUtMjAgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQKLQotcHJlY2lzaW9uOiAxMyAgICAgICAgICAgICAgIC0tIEV0aW55PS0yMQotcHdzeDgwOCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1wd3N4ODA5ICBwb3dlciAxMEUtMjEgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTEwIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1wcmVjaXNpb246IDE0ICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIyCi1wd3N4ODEwICBwb3dlciAgMUUtMjEgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1wd3N4ODExICBwb3dlciAxMEUtMjIgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi1wd3N4ODEyICBwb3dlciAgMUUtMjIgICAgMC41IC0+IDEuMDAwMDAwMDAwMDBFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkCi0KLQotLS0gc3BlY2lhbCB2YWx1ZXMKLW1heGV4cG9uZW50OiA5OTkKLW1pbmV4cG9uZW50OiAtOTk5Ci1wd3N4ODIwICBwb3dlciAgIEluZiAgICAgMC41IC0+IEluZmluaXR5Ci1wd3N4ODIxICBwb3dlciAgLUluZiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDgyMiAgcG93ZXIgICBOYU4gICAgIDAuNSAtPiBOYU4KLXB3c3g4MjMgIHBvd2VyICBzTmFOICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBwcm9wYWdhdGluZyBOYU5zCi1wd3N4ODI0ICBwb3dlciAgc05hTjEyMyAgMC41IC0+IE5hTjEyMyBJbnZhbGlkX29wZXJhdGlvbgotcHdzeDgyNSAgcG93ZXIgLXNOYU4zMjEgIDAuNSAtPiAtTmFOMzIxIEludmFsaWRfb3BlcmF0aW9uCi1wd3N4ODI2ICBwb3dlciAgIE5hTjQ1NiAgMC41IC0+IE5hTjQ1NgotcHdzeDgyNyAgcG93ZXIgIC1OYU42NTQgIDAuNSAtPiAtTmFONjU0Ci1wd3N4ODI4ICBwb3dlciAgIE5hTjEgICAgMC41IC0+IE5hTjEKLQotLS0gTnVsbCB0ZXN0Ci1wd3N4OTAwICBwb3dlciAgIyAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gcG93ZXJzcXJ0LmRlY1Rlc3QgLS0gZGVjaW1hbCBzcXVhcmUgcm9vdCwgdXNpbmcgcG93ZXIgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDIwMDQsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KKy0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgdGFrZW4gZnJvbSBzcXVhcmVyb290LmRlY1Rlc3QgYnV0IGFyZQ0KKy0tIGV2YWx1YXRlZCB1c2luZyB0aGUgcG93ZXIgb3BlcmF0b3IuICBUaGUgZGlmZmVyZW5jZXMgaW4gcmVzdWx0cw0KKy0tICgxNTMgb3V0IG9mIDI4NTYpIGZhbGwgaW50byB0aGUgZm9sbG93aW5nIGNhdGVnb3JpZXM6DQorLS0NCistLSAgICB4ICAgICoqIDAuNSAoeD4wKSBoYXMgbm8gcHJlZmVycmVkIGV4cG9uZW50LCBhbmQgaXMgSW5leGFjdA0KKy0tICAgICAgICAgICAgICAgIChhbmQgaGVuY2UgZnVsbCBwcmVjaXNpb24pOyBhbG1vc3QgYWxsIGRpZmZlcmVuY2VzIGFyZQ0KKy0tICAgICAgICAgICAgICAgIGluIHRoaXMgY2F0ZWdvcnkNCistLSAgICAwLjAwICoqIDAuNSBiZWNvbWVzIDAgKG5vdCAwLjApLCBldGMuDQorLS0gICAtMCAgICAqKiAwLjUgYmVjb21lcyAwIChuZXZlciAtMCkNCistLSAgICBTb21lIGV4YWN0IHN1Ym5vcm1hbHMgYmVjb21lIGluZXhhY3QgYW5kIGhlbmNlIHVuZGVyZmxvd3MNCisNCitleHRlbmRlZDogICAgMQ0KK3ByZWNpc2lvbjogICA5DQorcm91bmRpbmc6ICAgIGhhbGZfZXZlbg0KK21heEV4cG9uZW50OiAzODQNCittaW5leHBvbmVudDogLTM4Mw0KKw0KKy0tIGJhc2ljcw0KK3B3c3gwMDEgIHBvd2VyIDEgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwMDIgIHBvd2VyIC0xICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDAzICBwb3dlciAxLjAwICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDA0ICBwb3dlciAtMS4wMCAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDAwNSAgcG93ZXIgMCAgICAgICAgMC41IC0+IDANCitwd3N4MDA2ICBwb3dlciAwMC4wICAgICAwLjUgLT4gMA0KK3B3c3gwMDcgIHBvd2VyIDAuMDAgICAgIDAuNSAtPiAwDQorcHdzeDAwOCAgcG93ZXIgMDAuMDAgICAgMC41IC0+IDANCitwd3N4MDA5ICBwb3dlciAwMC4wMDAgICAwLjUgLT4gMA0KK3B3c3gwMTAgIHBvd2VyIDAwLjAwMDAgIDAuNSAtPiAwDQorcHdzeDAxMSAgcG93ZXIgMDAgICAgICAgMC41IC0+IDANCisNCitwd3N4MDEyICBwb3dlciAtMiAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDAxMyAgcG93ZXIgMiAgICAgICAgMC41IC0+IDEuNDE0MjEzNTYgSW5leGFjdCBSb3VuZGVkDQorcHdzeDAxNCAgcG93ZXIgLTIuMDAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3B3c3gwMTUgIHBvd2VyIDIuMDAgICAgIDAuNSAtPiAxLjQxNDIxMzU2IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwMTYgIHBvd2VyIC0wICAgICAgIDAuNSAtPiAwDQorcHdzeDAxNyAgcG93ZXIgLTAuMCAgICAgMC41IC0+IDANCitwd3N4MDE4ICBwb3dlciAtMDAuMDAgICAwLjUgLT4gMA0KK3B3c3gwMTkgIHBvd2VyIC0wMC4wMDAgIDAuNSAtPiAwDQorcHdzeDAyMCAgcG93ZXIgLTAuMDAwMCAgMC41IC0+IDANCitwd3N4MDIxICBwb3dlciAtMEUrOSAgICAwLjUgLT4gMA0KK3B3c3gwMjIgIHBvd2VyIC0wRSsxMCAgIDAuNSAtPiAwDQorcHdzeDAyMyAgcG93ZXIgLTBFKzExICAgMC41IC0+IDANCitwd3N4MDI0ICBwb3dlciAtMEUrMTIgICAwLjUgLT4gMA0KK3B3c3gwMjUgIHBvd2VyIC0wMCAgICAgIDAuNSAtPiAwDQorcHdzeDAyNiAgcG93ZXIgMEUrNSAgICAgMC41IC0+IDANCitwd3N4MDI3ICBwb3dlciA0LjAgICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDI4ICBwb3dlciA0LjAwICAgICAwLjUgLT4gMi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCisNCitwd3N4MDMwICBwb3dlciArMC4xICAgICAgICAgICAgIDAuNSAtPiAwLjMxNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDMxICBwb3dlciAtMC4xICAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDMyICBwb3dlciArMC4wMSAgICAgICAgICAgIDAuNSAtPiAwLjEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDMzICBwb3dlciAtMC4wMSAgICAgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDM0ICBwb3dlciArMC4wMDEgICAgICAgICAgIDAuNSAtPiAwLjAzMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQorcHdzeDAzNSAgcG93ZXIgLTAuMDAxICAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDAzNiAgcG93ZXIgKzAuMDAwMDAxICAgICAgICAwLjUgLT4gMC4wMDEwMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDM3ICBwb3dlciAtMC4wMDAwMDEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDM4ICBwb3dlciArMC4wMDAwMDAwMDAwMDEgIDAuNSAtPiAwLjAwMDAwMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwMzkgIHBvd2VyIC0wLjAwMDAwMDAwMDAwMSAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3B3c3gwNDEgIHBvd2VyIDEuMSAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNDIgIHBvd2VyIDEuMTAgICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNDMgIHBvd2VyIDEuMTAwICAgICAgIDAuNSAtPiAxLjA0ODgwODg1IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNDQgIHBvd2VyIDEuMTEwICAgICAgIDAuNSAtPiAxLjA1MzU2NTM4IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNDUgIHBvd2VyIC0xLjEgICAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDQ2ICBwb3dlciAtMS4xMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA0NyAgcG93ZXIgLTEuMTAwICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3B3c3gwNDggIHBvd2VyIC0xLjExMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDQ5ICBwb3dlciA5LjkgICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDUwICBwb3dlciA5LjkwICAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDUxICBwb3dlciA5LjkwMCAgICAgICAwLjUgLT4gMy4xNDY0MjY1NCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDUyICBwb3dlciA5Ljk5MCAgICAgICAwLjUgLT4gMy4xNjA2OTYxMyBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDUzICBwb3dlciAtOS45ICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA1NCAgcG93ZXIgLTkuOTAgICAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3B3c3gwNTUgIHBvd2VyIC05LjkwMCAgICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitwd3N4MDU2ICBwb3dlciAtOS45OTAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorcHdzeDA2MCAgcG93ZXIgIDEgICAgICAgICAgICAwLjUgLT4gMS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDYxICBwb3dlciAgMS4wICAgICAgICAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNjIgIHBvd2VyICAxLjAwICAgICAgICAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA2MyAgcG93ZXIgIDEwLjAgICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDY0ICBwb3dlciAgMTAuMCAgICAgICAgIDAuNSAtPiAzLjE2MjI3NzY2IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNjUgIHBvd2VyICAxMC4wICAgICAgICAgMC41IC0+IDMuMTYyMjc3NjYgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA2NiAgcG93ZXIgIDEwLjAwICAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDY3ICBwb3dlciAgMTAwICAgICAgICAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNjggIHBvd2VyICAxMDAuMCAgICAgICAgMC41IC0+IDEwLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA2OSAgcG93ZXIgIDEwMC4wMCAgICAgICAwLjUgLT4gMTAuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDcwICBwb3dlciAgMS4xMDAwRSszICAgIDAuNSAtPiAzMy4xNjYyNDc5IEluZXhhY3QgUm91bmRlZA0KK3B3c3gwNzEgIHBvd2VyICAxLjEwMDAwRSszICAgMC41IC0+IDMzLjE2NjI0NzkgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA3MiAgcG93ZXIgLTEwLjAgICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA3MyAgcG93ZXIgLTEwLjAwICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA3NCAgcG93ZXIgLTEwMC4wICAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA3NSAgcG93ZXIgLTEwMC4wMCAgICAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA3NiAgcG93ZXIgLTEuMTAwMEUrMyAgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcHdzeDA3NyAgcG93ZXIgLTEuMTAwMDBFKzMgICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZmFtb3VzIHNxdWFyZXMNCitwd3N4MDgwICBwb3dlciAgICAgMSAgIDAuNSAtPiAxLjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwODEgIHBvd2VyICAgICA0ICAgMC41IC0+IDIuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA4MiAgcG93ZXIgICAgIDkgICAwLjUgLT4gMy4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDgzICBwb3dlciAgICAxNiAgIDAuNSAtPiA0LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwODQgIHBvd2VyICAgIDI1ICAgMC41IC0+IDUuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA4NSAgcG93ZXIgICAgMzYgICAwLjUgLT4gNi4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDg2ICBwb3dlciAgICA0OSAgIDAuNSAtPiA3LjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwODcgIHBvd2VyICAgIDY0ICAgMC41IC0+IDguMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA4OCAgcG93ZXIgICAgODEgICAwLjUgLT4gOS4wMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDg5ICBwb3dlciAgIDEwMCAgIDAuNSAtPiAxMC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwOTAgIHBvd2VyICAgMTIxICAgMC41IC0+IDExLjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA5MSAgcG93ZXIgICAxNDQgICAwLjUgLT4gMTIuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDkyICBwb3dlciAgIDE2OSAgIDAuNSAtPiAxMy4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gwOTMgIHBvd2VyICAgMjU2ICAgMC41IC0+IDE2LjAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDA5NCAgcG93ZXIgIDEwMjQgICAwLjUgLT4gMzIuMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MDk1ICBwb3dlciAgNDA5NiAgIDAuNSAtPiA2NC4wMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDAgIHBvd2VyICAgMC4wMSAgMC41IC0+IDAuMTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDEgIHBvd2VyICAgMC4wNCAgMC41IC0+IDAuMjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDIgIHBvd2VyICAgMC4wOSAgMC41IC0+IDAuMzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDMgIHBvd2VyICAgMC4xNiAgMC41IC0+IDAuNDAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDQgIHBvd2VyICAgMC4yNSAgMC41IC0+IDAuNTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDUgIHBvd2VyICAgMC4zNiAgMC41IC0+IDAuNjAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDYgIHBvd2VyICAgMC40OSAgMC41IC0+IDAuNzAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDcgIHBvd2VyICAgMC42NCAgMC41IC0+IDAuODAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDggIHBvd2VyICAgMC44MSAgMC41IC0+IDAuOTAwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMDkgIHBvd2VyICAgMS4wMCAgMC41IC0+IDEuMDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDExMCAgcG93ZXIgICAxLjIxICAwLjUgLT4gMS4xMDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTExICBwb3dlciAgIDEuNDQgIDAuNSAtPiAxLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMTIgIHBvd2VyICAgMS42OSAgMC41IC0+IDEuMzAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDExMyAgcG93ZXIgICAyLjU2ICAwLjUgLT4gMS42MDAwMDAwMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTE0ICBwb3dlciAgMTAuMjQgIDAuNSAtPiAzLjIwMDAwMDAwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMTUgIHBvd2VyICA0MC45NiAgMC41IC0+IDYuNDAwMDAwMDAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gUHJlY2lzaW9uIDEgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgcGx1cyBleHBvbmVudCBhZGp1c3RzXQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCitwcmVjaXNpb246ICAgMQ0KK3B3c3gxMjAxICBwb3dlciAwLjEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjA0ICBwb3dlciAxLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIwNSAgcG93ZXIgMUUtMyAgMC41IC0+IDAuMDMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjA2ICBwb3dlciAxRSsxICAwLjUgLT4gMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMDcgIHBvd2VyIDFFKzIgIDAuNSAtPiAxRSsxIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjA4ICBwb3dlciAxRSszICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMTAgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjExICBwb3dlciAyLjBFLTEgIDAuNSAtPiAwLjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIxMyAgcG93ZXIgMkUtMyAgMC41IC0+IDAuMDQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjE0ICBwb3dlciAyRSsxICAwLjUgLT4gNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMTUgIHBvd2VyIDJFKzIgIDAuNSAtPiAxRSsxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIxNiAgcG93ZXIgMkUrMyAgMC41IC0+IDRFKzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjE4ICBwb3dlciAwLjAzICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIxOSAgcG93ZXIgMy4wRS0xICAwLjUgLT4gMC41ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMjEgIHBvd2VyIDNFLTMgIDAuNSAtPiAwLjA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyMiAgcG93ZXIgM0UrMSAgMC41IC0+IDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjIzICBwb3dlciAzRSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMjQgIHBvd2VyIDNFKzMgIDAuNSAtPiA1RSsxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyNSAgcG93ZXIgMC40ICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyNiAgcG93ZXIgMC4wNCAgMC41IC0+IDAuMiBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyNyAgcG93ZXIgNC4wRS0xICAwLjUgLT4gMC42ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIyOCAgcG93ZXIgNC4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIzMCAgcG93ZXIgNEUrMSAgMC41IC0+IDYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjMxICBwb3dlciA0RSsyICAwLjUgLT4gMkUrMSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIzMiAgcG93ZXIgNEUrMyAgMC41IC0+IDZFKzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjMzICBwb3dlciAwLjUgIDAuNSAtPiAwLjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjM0ICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIzNSAgcG93ZXIgNS4wRS0xICAwLjUgLT4gMC43ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIzNiAgcG93ZXIgNS4wMEUtMiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyMzcgIHBvd2VyIDVFLTMgIDAuNSAtPiAwLjA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTIzOCAgcG93ZXIgNUUrMSAgMC41IC0+IDcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMkUrMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNDAgIHBvd2VyIDVFKzMgIDAuNSAtPiA3RSsxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI0MSAgcG93ZXIgMC42ICAwLjUgLT4gMC44ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNDMgIHBvd2VyIDYuMEUtMSAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNDQgIHBvd2VyIDYuMDBFLTIgIDAuNSAtPiAwLjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNDYgIHBvd2VyIDZFKzEgIDAuNSAtPiA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDJFKzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjQ4ICBwb3dlciA2RSszICAwLjUgLT4gOEUrMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNDkgIHBvd2VyIDAuNyAgMC41IC0+IDAuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjUxICBwb3dlciA3LjBFLTEgIDAuNSAtPiAwLjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjUyICBwb3dlciA3LjAwRS0yICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjU0ICBwb3dlciA3RSsxICAwLjUgLT4gOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNTUgIHBvd2VyIDdFKzIgIDAuNSAtPiAzRSsxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI1NiAgcG93ZXIgN0UrMyAgMC41IC0+IDhFKzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjU3ICBwb3dlciAwLjggIDAuNSAtPiAwLjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjU4ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4zICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI1OSAgcG93ZXIgOC4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2MCAgcG93ZXIgOC4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNjEgIHBvd2VyIDhFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2MiAgcG93ZXIgOEUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjYzICBwb3dlciA4RSsyICAwLjUgLT4gM0UrMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNjQgIHBvd2VyIDhFKzMgIDAuNSAtPiA5RSsxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2NSAgcG93ZXIgMC45ICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMyBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2NyAgcG93ZXIgOS4wRS0xICAwLjUgLT4gMC45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDEyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI3MCAgcG93ZXIgOUUrMSAgMC41IC0+IDkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gxMjcxICBwb3dlciA5RSsyICAwLjUgLT4gM0UrMSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MTI3MiAgcG93ZXIgOUUrMyAgMC41IC0+IDlFKzEgIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIFByZWNpc2lvbiAyIHNxdWFyZXJvb3QgdGVzdHMgW2V4aGF1c3RpdmUsIHBsdXMgZXhwb25lbnQgYWRqdXN0c10NCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbmV4cG9uZW50OiAtOTk5DQorcHJlY2lzaW9uOiAgIDINCitwd3N4MjIwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMDIgIHBvd2VyIDAuMDEgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjAzICBwb3dlciAxLjBFLTEgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIwNCAgcG93ZXIgMS4wMEUtMiAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMDUgIHBvd2VyIDFFLTMgIDAuNSAtPiAwLjAzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMDYgIHBvd2VyIDFFKzEgIDAuNSAtPiAzLjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjA3ICBwb3dlciAxRSsyICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMDggIHBvd2VyIDFFKzMgIDAuNSAtPiAzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMDkgIHBvd2VyIDAuMiAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjEwICBwb3dlciAwLjAyICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMTEgIHBvd2VyIDIuMEUtMSAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjEyICBwb3dlciAyLjAwRS0yICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMTMgIHBvd2VyIDJFLTMgIDAuNSAtPiAwLjA0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMTQgIHBvd2VyIDJFKzEgIDAuNSAtPiA0LjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjE1ICBwb3dlciAyRSsyICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjE2ICBwb3dlciAyRSszICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjE3ICBwb3dlciAwLjMgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIxOCAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjE5ICBwb3dlciAzLjBFLTEgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIyMCAgcG93ZXIgMy4wMEUtMiAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjIxICBwb3dlciAzRS0zICAwLjUgLT4gMC4wNTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjIyICBwb3dlciAzRSsxICAwLjUgLT4gNS41ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIyMyAgcG93ZXIgM0UrMiAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIyNCAgcG93ZXIgM0UrMyAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIyNSAgcG93ZXIgMC40ICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMjYgIHBvd2VyIDAuMDQgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjI3ICBwb3dlciA0LjBFLTEgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjIyOCAgcG93ZXIgNC4wMEUtMiAgMC41IC0+IDAuMjAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMjkgIHBvd2VyIDRFLTMgIDAuNSAtPiAwLjA2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzAgIHBvd2VyIDRFKzEgIDAuNSAtPiA2LjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjMxICBwb3dlciA0RSsyICAwLjUgLT4gMjAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzIgIHBvd2VyIDRFKzMgIDAuNSAtPiA2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzMgIHBvd2VyIDAuNSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjM0ICBwb3dlciAwLjA1ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzUgIHBvd2VyIDUuMEUtMSAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjM2ICBwb3dlciA1LjAwRS0yICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzcgIHBvd2VyIDVFLTMgIDAuNSAtPiAwLjA3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyMzggIHBvd2VyIDVFKzEgIDAuNSAtPiA3LjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjM5ICBwb3dlciA1RSsyICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjQwICBwb3dlciA1RSszICAwLjUgLT4gNzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjQxICBwb3dlciAwLjYgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI0MiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjQzICBwb3dlciA2LjBFLTEgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI0NCAgcG93ZXIgNi4wMEUtMiAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjQ1ICBwb3dlciA2RS0zICAwLjUgLT4gMC4wNzcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjQ2ICBwb3dlciA2RSsxICAwLjUgLT4gNy43ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI0NyAgcG93ZXIgNkUrMiAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI0OCAgcG93ZXIgNkUrMyAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI0OSAgcG93ZXIgMC43ICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTAgIHBvd2VyIDAuMDcgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI1MSAgcG93ZXIgNy4wRS0xICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTIgIHBvd2VyIDcuMDBFLTIgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI1MyAgcG93ZXIgN0UtMyAgMC41IC0+IDAuMDg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI1NCAgcG93ZXIgN0UrMSAgMC41IC0+IDguNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTUgIHBvd2VyIDdFKzIgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTYgIHBvd2VyIDdFKzMgIDAuNSAtPiA4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTcgIHBvd2VyIDAuOCAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjU4ICBwb3dlciAwLjA4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNTkgIHBvd2VyIDguMEUtMSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjYwICBwb3dlciA4LjAwRS0yICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNjEgIHBvd2VyIDhFLTMgIDAuNSAtPiAwLjA4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNjIgIHBvd2VyIDhFKzEgIDAuNSAtPiA4LjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjYzICBwb3dlciA4RSsyICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjY0ICBwb3dlciA4RSszICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjY1ICBwb3dlciAwLjkgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI2NiAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjY3ICBwb3dlciA5LjBFLTEgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI2OCAgcG93ZXIgOS4wMEUtMiAgMC41IC0+IDAuMzAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNjkgIHBvd2VyIDlFLTMgIDAuNSAtPiAwLjA5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNzAgIHBvd2VyIDlFKzEgIDAuNSAtPiA5LjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjcxICBwb3dlciA5RSsyICAwLjUgLT4gMzAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNzIgIHBvd2VyIDlFKzMgIDAuNSAtPiA5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNzMgIHBvd2VyIDAuMTAgIDAuNSAtPiAwLjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI3NCAgcG93ZXIgMC4wMTAgIDAuNSAtPiAwLjEwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjc1ICBwb3dlciAxMC4wRS0xICAwLjUgLT4gMS4wIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjc2ICBwb3dlciAxMC4wMEUtMiAgMC41IC0+IDAuMzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjc3ICBwb3dlciAxMEUtMyAgMC41IC0+IDAuMTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNzggIHBvd2VyIDEwRSsxICAwLjUgLT4gMTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyNzkgIHBvd2VyIDEwRSsyICAwLjUgLT4gMzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjgwICBwb3dlciAxMEUrMyAgMC41IC0+IDEuMEUrMiBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI4MSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjgyICBwb3dlciAwLjAxMSAgMC41IC0+IDAuMTAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjgzICBwb3dlciAxMS4wRS0xICAwLjUgLT4gMS4wICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI4NCAgcG93ZXIgMTEuMDBFLTIgIDAuNSAtPiAwLjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI4NSAgcG93ZXIgMTFFLTMgIDAuNSAtPiAwLjEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI4NiAgcG93ZXIgMTFFKzEgIDAuNSAtPiAxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyODcgIHBvd2VyIDExRSsyICAwLjUgLT4gMzMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjg4ICBwb3dlciAxMUUrMyAgMC41IC0+IDEuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyODkgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI5MCAgcG93ZXIgMC4wMTIgIDAuNSAtPiAwLjExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI5MSAgcG93ZXIgMTIuMEUtMSAgMC41IC0+IDEuMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyOTIgIHBvd2VyIDEyLjAwRS0yICAwLjUgLT4gMC4zNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyOTMgIHBvd2VyIDEyRS0zICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyOTQgIHBvd2VyIDEyRSsxICAwLjUgLT4gMTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjk1ICBwb3dlciAxMkUrMiAgMC41IC0+IDM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjI5NiAgcG93ZXIgMTJFKzMgIDAuNSAtPiAxLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMjk3ICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyOTggIHBvd2VyIDAuMDEzICAwLjUgLT4gMC4xMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIyOTkgIHBvd2VyIDEzLjBFLTEgIDAuNSAtPiAxLjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzAwICBwb3dlciAxMy4wMEUtMiAgMC41IC0+IDAuMzYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzAxICBwb3dlciAxM0UtMyAgMC41IC0+IDAuMTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzAyICBwb3dlciAxM0UrMSAgMC41IC0+IDExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMwMyAgcG93ZXIgMTNFKzIgIDAuNSAtPiAzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMDQgIHBvd2VyIDEzRSszICAwLjUgLT4gMS4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMwNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzA2ICBwb3dlciAwLjAxNCAgMC41IC0+IDAuMTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzA3ICBwb3dlciAxNC4wRS0xICAwLjUgLT4gMS4yICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMwOCAgcG93ZXIgMTQuMDBFLTIgIDAuNSAtPiAwLjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMwOSAgcG93ZXIgMTRFLTMgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMxMCAgcG93ZXIgMTRFKzEgIDAuNSAtPiAxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMTEgIHBvd2VyIDE0RSsyICAwLjUgLT4gMzcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzEyICBwb3dlciAxNEUrMyAgMC41IC0+IDEuMkUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMTMgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMxNCAgcG93ZXIgMC4wMTUgIDAuNSAtPiAwLjEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMxNSAgcG93ZXIgMTUuMEUtMSAgMC41IC0+IDEuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMTYgIHBvd2VyIDE1LjAwRS0yICAwLjUgLT4gMC4zOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMTcgIHBvd2VyIDE1RS0zICAwLjUgLT4gMC4xMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMTggIHBvd2VyIDE1RSsxICAwLjUgLT4gMTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzE5ICBwb3dlciAxNUUrMiAgMC41IC0+IDM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyMCAgcG93ZXIgMTVFKzMgIDAuNSAtPiAxLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzIxICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyMiAgcG93ZXIgMC4wMTYgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyMyAgcG93ZXIgMTYuMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMjQgIHBvd2VyIDE2LjAwRS0yICAwLjUgLT4gMC40MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyNSAgcG93ZXIgMTZFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyNiAgcG93ZXIgMTZFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMjcgIHBvd2VyIDE2RSsyICAwLjUgLT4gNDAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMjggIHBvd2VyIDE2RSszICAwLjUgLT4gMS4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMyOSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzMwICBwb3dlciAwLjAxNyAgMC41IC0+IDAuMTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzMxICBwb3dlciAxNy4wRS0xICAwLjUgLT4gMS4zICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMzMiAgcG93ZXIgMTcuMDBFLTIgIDAuNSAtPiAwLjQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMzMyAgcG93ZXIgMTdFLTMgIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMzNCAgcG93ZXIgMTdFKzEgIDAuNSAtPiAxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMzUgIHBvd2VyIDE3RSsyICAwLjUgLT4gNDEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzM2ICBwb3dlciAxN0UrMyAgMC41IC0+IDEuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzMzcgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMzOCAgcG93ZXIgMC4wMTggIDAuNSAtPiAwLjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjMzOSAgcG93ZXIgMTguMEUtMSAgMC41IC0+IDEuMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNDAgIHBvd2VyIDE4LjAwRS0yICAwLjUgLT4gMC40MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNDEgIHBvd2VyIDE4RS0zICAwLjUgLT4gMC4xMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNDIgIHBvd2VyIDE4RSsxICAwLjUgLT4gMTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzQzICBwb3dlciAxOEUrMiAgMC41IC0+IDQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM0NCAgcG93ZXIgMThFKzMgIDAuNSAtPiAxLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzQ1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNDYgIHBvd2VyIDAuMDE5ICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNDcgIHBvd2VyIDE5LjBFLTEgIDAuNSAtPiAxLjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzQ4ICBwb3dlciAxOS4wMEUtMiAgMC41IC0+IDAuNDQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzQ5ICBwb3dlciAxOUUtMyAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzUwICBwb3dlciAxOUUrMSAgMC41IC0+IDE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM1MSAgcG93ZXIgMTlFKzIgIDAuNSAtPiA0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNTIgIHBvd2VyIDE5RSszICAwLjUgLT4gMS40RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM1MyAgcG93ZXIgMC4yMCAgMC41IC0+IDAuNDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzU0ICBwb3dlciAwLjAyMCAgMC41IC0+IDAuMTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzU1ICBwb3dlciAyMC4wRS0xICAwLjUgLT4gMS40ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM1NiAgcG93ZXIgMjAuMDBFLTIgIDAuNSAtPiAwLjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM1NyAgcG93ZXIgMjBFLTMgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM1OCAgcG93ZXIgMjBFKzEgIDAuNSAtPiAxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNTkgIHBvd2VyIDIwRSsyICAwLjUgLT4gNDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzYwICBwb3dlciAyMEUrMyAgMC41IC0+IDEuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNjEgIHBvd2VyIDAuMjEgIDAuNSAtPiAwLjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM2MiAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM2MyAgcG93ZXIgMjEuMEUtMSAgMC41IC0+IDEuNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNjQgIHBvd2VyIDIxLjAwRS0yICAwLjUgLT4gMC40NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNjUgIHBvd2VyIDIxRS0zICAwLjUgLT4gMC4xNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNjYgIHBvd2VyIDIxRSsxICAwLjUgLT4gMTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzY3ICBwb3dlciAyMUUrMiAgMC41IC0+IDQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM2OCAgcG93ZXIgMjFFKzMgIDAuNSAtPiAxLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzY5ICBwb3dlciAwLjIyICAwLjUgLT4gMC40NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNzAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNzEgIHBvd2VyIDIyLjBFLTEgIDAuNSAtPiAxLjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzcyICBwb3dlciAyMi4wMEUtMiAgMC41IC0+IDAuNDcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzczICBwb3dlciAyMkUtMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzc0ICBwb3dlciAyMkUrMSAgMC41IC0+IDE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM3NSAgcG93ZXIgMjJFKzIgIDAuNSAtPiA0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzNzYgIHBvd2VyIDIyRSszICAwLjUgLT4gMS41RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM3NyAgcG93ZXIgMC4yMyAgMC41IC0+IDAuNDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzc4ICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzc5ICBwb3dlciAyMy4wRS0xICAwLjUgLT4gMS41ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM4MCAgcG93ZXIgMjMuMDBFLTIgIDAuNSAtPiAwLjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM4MSAgcG93ZXIgMjNFLTMgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM4MiAgcG93ZXIgMjNFKzEgIDAuNSAtPiAxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzODMgIHBvd2VyIDIzRSsyICAwLjUgLT4gNDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzg0ICBwb3dlciAyM0UrMyAgMC41IC0+IDEuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzODUgIHBvd2VyIDAuMjQgIDAuNSAtPiAwLjQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM4NiAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM4NyAgcG93ZXIgMjQuMEUtMSAgMC41IC0+IDEuNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzODggIHBvd2VyIDI0LjAwRS0yICAwLjUgLT4gMC40OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzODkgIHBvd2VyIDI0RS0zICAwLjUgLT4gMC4xNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzOTAgIHBvd2VyIDI0RSsxICAwLjUgLT4gMTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzkxICBwb3dlciAyNEUrMiAgMC41IC0+IDQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM5MiAgcG93ZXIgMjRFKzMgIDAuNSAtPiAxLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyMzkzICBwb3dlciAwLjI1ICAwLjUgLT4gMC41MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM5NCAgcG93ZXIgMC4wMjUgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM5NSAgcG93ZXIgMjUuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzOTYgIHBvd2VyIDI1LjAwRS0yICAwLjUgLT4gMC41MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM5NyAgcG93ZXIgMjVFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjM5OCAgcG93ZXIgMjVFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDIzOTkgIHBvd2VyIDI1RSsyICAwLjUgLT4gNTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MDAgIHBvd2VyIDI1RSszICAwLjUgLT4gMS42RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQwMSAgcG93ZXIgMC4yNiAgMC41IC0+IDAuNTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDAyICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDAzICBwb3dlciAyNi4wRS0xICAwLjUgLT4gMS42ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQwNCAgcG93ZXIgMjYuMDBFLTIgIDAuNSAtPiAwLjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQwNSAgcG93ZXIgMjZFLTMgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQwNiAgcG93ZXIgMjZFKzEgIDAuNSAtPiAxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MDcgIHBvd2VyIDI2RSsyICAwLjUgLT4gNTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDA4ICBwb3dlciAyNkUrMyAgMC41IC0+IDEuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MDkgIHBvd2VyIDAuMjcgIDAuNSAtPiAwLjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQxMCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQxMSAgcG93ZXIgMjcuMEUtMSAgMC41IC0+IDEuNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MTIgIHBvd2VyIDI3LjAwRS0yICAwLjUgLT4gMC41MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MTMgIHBvd2VyIDI3RS0zICAwLjUgLT4gMC4xNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MTQgIHBvd2VyIDI3RSsxICAwLjUgLT4gMTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDE1ICBwb3dlciAyN0UrMiAgMC41IC0+IDUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQxNiAgcG93ZXIgMjdFKzMgIDAuNSAtPiAxLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDE3ICBwb3dlciAwLjI4ICAwLjUgLT4gMC41MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MTggIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MTkgIHBvd2VyIDI4LjBFLTEgIDAuNSAtPiAxLjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDIwICBwb3dlciAyOC4wMEUtMiAgMC41IC0+IDAuNTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDIxICBwb3dlciAyOEUtMyAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDIyICBwb3dlciAyOEUrMSAgMC41IC0+IDE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQyMyAgcG93ZXIgMjhFKzIgIDAuNSAtPiA1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MjQgIHBvd2VyIDI4RSszICAwLjUgLT4gMS43RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQyNSAgcG93ZXIgMC4yOSAgMC41IC0+IDAuNTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDI2ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDI3ICBwb3dlciAyOS4wRS0xICAwLjUgLT4gMS43ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQyOCAgcG93ZXIgMjkuMDBFLTIgIDAuNSAtPiAwLjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQyOSAgcG93ZXIgMjlFLTMgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQzMCAgcG93ZXIgMjlFKzEgIDAuNSAtPiAxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MzEgIHBvd2VyIDI5RSsyICAwLjUgLT4gNTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDMyICBwb3dlciAyOUUrMyAgMC41IC0+IDEuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MzMgIHBvd2VyIDAuMzAgIDAuNSAtPiAwLjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQzNCAgcG93ZXIgMC4wMzAgIDAuNSAtPiAwLjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQzNSAgcG93ZXIgMzAuMEUtMSAgMC41IC0+IDEuNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MzYgIHBvd2VyIDMwLjAwRS0yICAwLjUgLT4gMC41NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MzcgIHBvd2VyIDMwRS0zICAwLjUgLT4gMC4xNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0MzggIHBvd2VyIDMwRSsxICAwLjUgLT4gMTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDM5ICBwb3dlciAzMEUrMiAgMC41IC0+IDU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ0MCAgcG93ZXIgMzBFKzMgIDAuNSAtPiAxLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDQxICBwb3dlciAwLjMxICAwLjUgLT4gMC41NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NDIgIHBvd2VyIDAuMDMxICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NDMgIHBvd2VyIDMxLjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDQ0ICBwb3dlciAzMS4wMEUtMiAgMC41IC0+IDAuNTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDQ1ICBwb3dlciAzMUUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDQ2ICBwb3dlciAzMUUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ0NyAgcG93ZXIgMzFFKzIgIDAuNSAtPiA1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NDggIHBvd2VyIDMxRSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ0OSAgcG93ZXIgMC4zMiAgMC41IC0+IDAuNTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDUwICBwb3dlciAwLjAzMiAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDUxICBwb3dlciAzMi4wRS0xICAwLjUgLT4gMS44ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ1MiAgcG93ZXIgMzIuMDBFLTIgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ1MyAgcG93ZXIgMzJFLTMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ1NCAgcG93ZXIgMzJFKzEgIDAuNSAtPiAxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NTUgIHBvd2VyIDMyRSsyICAwLjUgLT4gNTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDU2ICBwb3dlciAzMkUrMyAgMC41IC0+IDEuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NTcgIHBvd2VyIDAuMzMgIDAuNSAtPiAwLjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ1OCAgcG93ZXIgMC4wMzMgIDAuNSAtPiAwLjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ1OSAgcG93ZXIgMzMuMEUtMSAgMC41IC0+IDEuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NjAgIHBvd2VyIDMzLjAwRS0yICAwLjUgLT4gMC41NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NjEgIHBvd2VyIDMzRS0zICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NjIgIHBvd2VyIDMzRSsxICAwLjUgLT4gMTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDYzICBwb3dlciAzM0UrMiAgMC41IC0+IDU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ2NCAgcG93ZXIgMzNFKzMgIDAuNSAtPiAxLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDY1ICBwb3dlciAwLjM0ICAwLjUgLT4gMC41OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NjYgIHBvd2VyIDAuMDM0ICAwLjUgLT4gMC4xOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NjcgIHBvd2VyIDM0LjBFLTEgIDAuNSAtPiAxLjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDY4ICBwb3dlciAzNC4wMEUtMiAgMC41IC0+IDAuNTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDY5ICBwb3dlciAzNEUtMyAgMC41IC0+IDAuMTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDcwICBwb3dlciAzNEUrMSAgMC41IC0+IDE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ3MSAgcG93ZXIgMzRFKzIgIDAuNSAtPiA1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NzIgIHBvd2VyIDM0RSszICAwLjUgLT4gMS44RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ3MyAgcG93ZXIgMC4zNSAgMC41IC0+IDAuNTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDc0ICBwb3dlciAwLjAzNSAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDc1ICBwb3dlciAzNS4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ3NiAgcG93ZXIgMzUuMDBFLTIgIDAuNSAtPiAwLjU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ3NyAgcG93ZXIgMzVFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ3OCAgcG93ZXIgMzVFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0NzkgIHBvd2VyIDM1RSsyICAwLjUgLT4gNTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDgwICBwb3dlciAzNUUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0ODEgIHBvd2VyIDAuMzYgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDgyICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDgzICBwb3dlciAzNi4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ4NCAgcG93ZXIgMzYuMDBFLTIgIDAuNSAtPiAwLjYwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDg1ICBwb3dlciAzNkUtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDg2ICBwb3dlciAzNkUrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ4NyAgcG93ZXIgMzZFKzIgIDAuNSAtPiA2MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ4OCAgcG93ZXIgMzZFKzMgIDAuNSAtPiAxLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDg5ICBwb3dlciAwLjM3ICAwLjUgLT4gMC42MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0OTAgIHBvd2VyIDAuMDM3ICAwLjUgLT4gMC4xOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0OTEgIHBvd2VyIDM3LjBFLTEgIDAuNSAtPiAxLjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDkyICBwb3dlciAzNy4wMEUtMiAgMC41IC0+IDAuNjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDkzICBwb3dlciAzN0UtMyAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDk0ICBwb3dlciAzN0UrMSAgMC41IC0+IDE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ5NSAgcG93ZXIgMzdFKzIgIDAuNSAtPiA2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI0OTYgIHBvd2VyIDM3RSszICAwLjUgLT4gMS45RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjQ5NyAgcG93ZXIgMC4zOCAgMC41IC0+IDAuNjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDk4ICBwb3dlciAwLjAzOCAgMC41IC0+IDAuMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNDk5ICBwb3dlciAzOC4wRS0xICAwLjUgLT4gMS45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUwMCAgcG93ZXIgMzguMDBFLTIgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUwMSAgcG93ZXIgMzhFLTMgIDAuNSAtPiAwLjE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUwMiAgcG93ZXIgMzhFKzEgIDAuNSAtPiAxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MDMgIHBvd2VyIDM4RSsyICAwLjUgLT4gNjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTA0ICBwb3dlciAzOEUrMyAgMC41IC0+IDEuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MDUgIHBvd2VyIDAuMzkgIDAuNSAtPiAwLjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUwNiAgcG93ZXIgMC4wMzkgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUwNyAgcG93ZXIgMzkuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MDggIHBvd2VyIDM5LjAwRS0yICAwLjUgLT4gMC42MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MDkgIHBvd2VyIDM5RS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MTAgIHBvd2VyIDM5RSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTExICBwb3dlciAzOUUrMiAgMC41IC0+IDYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUxMiAgcG93ZXIgMzlFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTEzICBwb3dlciAwLjQwICAwLjUgLT4gMC42MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MTQgIHBvd2VyIDAuMDQwICAwLjUgLT4gMC4yMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUxNSAgcG93ZXIgNDAuMEUtMSAgMC41IC0+IDIuMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUxNiAgcG93ZXIgNDAuMDBFLTIgIDAuNSAtPiAwLjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUxNyAgcG93ZXIgNDBFLTMgIDAuNSAtPiAwLjIwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTE4ICBwb3dlciA0MEUrMSAgMC41IC0+IDIwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTE5ICBwb3dlciA0MEUrMiAgMC41IC0+IDYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUyMCAgcG93ZXIgNDBFKzMgIDAuNSAtPiAyLjBFKzIgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MjEgIHBvd2VyIDAuNDEgIDAuNSAtPiAwLjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUyMiAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUyMyAgcG93ZXIgNDEuMEUtMSAgMC41IC0+IDIuMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MjQgIHBvd2VyIDQxLjAwRS0yICAwLjUgLT4gMC42NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MjUgIHBvd2VyIDQxRS0zICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MjYgIHBvd2VyIDQxRSsxICAwLjUgLT4gMjAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTI3ICBwb3dlciA0MUUrMiAgMC41IC0+IDY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUyOCAgcG93ZXIgNDFFKzMgIDAuNSAtPiAyLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTI5ICBwb3dlciAwLjQyICAwLjUgLT4gMC42NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MzAgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MzEgIHBvd2VyIDQyLjBFLTEgIDAuNSAtPiAyLjAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTMyICBwb3dlciA0Mi4wMEUtMiAgMC41IC0+IDAuNjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTMzICBwb3dlciA0MkUtMyAgMC41IC0+IDAuMjAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTM0ICBwb3dlciA0MkUrMSAgMC41IC0+IDIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUzNSAgcG93ZXIgNDJFKzIgIDAuNSAtPiA2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1MzYgIHBvd2VyIDQyRSszICAwLjUgLT4gMi4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjUzNyAgcG93ZXIgMC40MyAgMC41IC0+IDAuNjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTM4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTM5ICBwb3dlciA0My4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU0MCAgcG93ZXIgNDMuMDBFLTIgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU0MSAgcG93ZXIgNDNFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU0MiAgcG93ZXIgNDNFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NDMgIHBvd2VyIDQzRSsyICAwLjUgLT4gNjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTQ0ICBwb3dlciA0M0UrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NDUgIHBvd2VyIDAuNDQgIDAuNSAtPiAwLjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU0NiAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU0NyAgcG93ZXIgNDQuMEUtMSAgMC41IC0+IDIuMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NDggIHBvd2VyIDQ0LjAwRS0yICAwLjUgLT4gMC42NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NDkgIHBvd2VyIDQ0RS0zICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NTAgIHBvd2VyIDQ0RSsxICAwLjUgLT4gMjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTUxICBwb3dlciA0NEUrMiAgMC41IC0+IDY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU1MiAgcG93ZXIgNDRFKzMgIDAuNSAtPiAyLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTUzICBwb3dlciAwLjQ1ICAwLjUgLT4gMC42NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NTQgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NTUgIHBvd2VyIDQ1LjBFLTEgIDAuNSAtPiAyLjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTU2ICBwb3dlciA0NS4wMEUtMiAgMC41IC0+IDAuNjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTU3ICBwb3dlciA0NUUtMyAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTU4ICBwb3dlciA0NUUrMSAgMC41IC0+IDIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU1OSAgcG93ZXIgNDVFKzIgIDAuNSAtPiA2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NjAgIHBvd2VyIDQ1RSszICAwLjUgLT4gMi4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU2MSAgcG93ZXIgMC40NiAgMC41IC0+IDAuNjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTYyICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTYzICBwb3dlciA0Ni4wRS0xICAwLjUgLT4gMi4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU2NCAgcG93ZXIgNDYuMDBFLTIgIDAuNSAtPiAwLjY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU2NSAgcG93ZXIgNDZFLTMgIDAuNSAtPiAwLjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU2NiAgcG93ZXIgNDZFKzEgIDAuNSAtPiAyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NjcgIHBvd2VyIDQ2RSsyICAwLjUgLT4gNjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTY4ICBwb3dlciA0NkUrMyAgMC41IC0+IDIuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NjkgIHBvd2VyIDAuNDcgIDAuNSAtPiAwLjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU3MCAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU3MSAgcG93ZXIgNDcuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NzIgIHBvd2VyIDQ3LjAwRS0yICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NzMgIHBvd2VyIDQ3RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NzQgIHBvd2VyIDQ3RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTc1ICBwb3dlciA0N0UrMiAgMC41IC0+IDY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU3NiAgcG93ZXIgNDdFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTc3ICBwb3dlciAwLjQ4ICAwLjUgLT4gMC42OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NzggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1NzkgIHBvd2VyIDQ4LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTgwICBwb3dlciA0OC4wMEUtMiAgMC41IC0+IDAuNjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTgxICBwb3dlciA0OEUtMyAgMC41IC0+IDAuMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTgyICBwb3dlciA0OEUrMSAgMC41IC0+IDIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU4MyAgcG93ZXIgNDhFKzIgIDAuNSAtPiA2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1ODQgIHBvd2VyIDQ4RSszICAwLjUgLT4gMi4yRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU4NSAgcG93ZXIgMC40OSAgMC41IC0+IDAuNzAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1ODYgIHBvd2VyIDAuMDQ5ICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1ODcgIHBvd2VyIDQ5LjBFLTEgIDAuNSAtPiAyLjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTg4ICBwb3dlciA0OS4wMEUtMiAgMC41IC0+IDAuNzAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1ODkgIHBvd2VyIDQ5RS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1OTAgIHBvd2VyIDQ5RSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTkxICBwb3dlciA0OUUrMiAgMC41IC0+IDcwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTkyICBwb3dlciA0OUUrMyAgMC41IC0+IDIuMkUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1OTMgIHBvd2VyIDAuNTAgIDAuNSAtPiAwLjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU5NCAgcG93ZXIgMC4wNTAgIDAuNSAtPiAwLjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjU5NSAgcG93ZXIgNTAuMEUtMSAgMC41IC0+IDIuMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1OTYgIHBvd2VyIDUwLjAwRS0yICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1OTcgIHBvd2VyIDUwRS0zICAwLjUgLT4gMC4yMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI1OTggIHBvd2VyIDUwRSsxICAwLjUgLT4gMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNTk5ICBwb3dlciA1MEUrMiAgMC41IC0+IDcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYwMCAgcG93ZXIgNTBFKzMgIDAuNSAtPiAyLjJFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjAxICBwb3dlciAwLjUxICAwLjUgLT4gMC43MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MDIgIHBvd2VyIDAuMDUxICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MDMgIHBvd2VyIDUxLjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjA0ICBwb3dlciA1MS4wMEUtMiAgMC41IC0+IDAuNzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjA1ICBwb3dlciA1MUUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjA2ICBwb3dlciA1MUUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYwNyAgcG93ZXIgNTFFKzIgIDAuNSAtPiA3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MDggIHBvd2VyIDUxRSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYwOSAgcG93ZXIgMC41MiAgMC41IC0+IDAuNzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjEwICBwb3dlciAwLjA1MiAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjExICBwb3dlciA1Mi4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYxMiAgcG93ZXIgNTIuMDBFLTIgIDAuNSAtPiAwLjcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYxMyAgcG93ZXIgNTJFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYxNCAgcG93ZXIgNTJFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MTUgIHBvd2VyIDUyRSsyICAwLjUgLT4gNzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjE2ICBwb3dlciA1MkUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MTcgIHBvd2VyIDAuNTMgIDAuNSAtPiAwLjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYxOCAgcG93ZXIgMC4wNTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYxOSAgcG93ZXIgNTMuMEUtMSAgMC41IC0+IDIuMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MjAgIHBvd2VyIDUzLjAwRS0yICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MjEgIHBvd2VyIDUzRS0zICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MjIgIHBvd2VyIDUzRSsxICAwLjUgLT4gMjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjIzICBwb3dlciA1M0UrMiAgMC41IC0+IDczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYyNCAgcG93ZXIgNTNFKzMgIDAuNSAtPiAyLjNFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjI1ICBwb3dlciAwLjU0ICAwLjUgLT4gMC43MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MjYgIHBvd2VyIDAuMDU0ICAwLjUgLT4gMC4yMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MjcgIHBvd2VyIDU0LjBFLTEgIDAuNSAtPiAyLjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjI4ICBwb3dlciA1NC4wMEUtMiAgMC41IC0+IDAuNzMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjI5ICBwb3dlciA1NEUtMyAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjMwICBwb3dlciA1NEUrMSAgMC41IC0+IDIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYzMSAgcG93ZXIgNTRFKzIgIDAuNSAtPiA3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MzIgIHBvd2VyIDU0RSszICAwLjUgLT4gMi4zRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYzMyAgcG93ZXIgMC41NSAgMC41IC0+IDAuNzQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjM0ICBwb3dlciAwLjA1NSAgMC41IC0+IDAuMjMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjM1ICBwb3dlciA1NS4wRS0xICAwLjUgLT4gMi4zICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYzNiAgcG93ZXIgNTUuMDBFLTIgIDAuNSAtPiAwLjc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYzNyAgcG93ZXIgNTVFLTMgIDAuNSAtPiAwLjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjYzOCAgcG93ZXIgNTVFKzEgIDAuNSAtPiAyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2MzkgIHBvd2VyIDU1RSsyICAwLjUgLT4gNzQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjQwICBwb3dlciA1NUUrMyAgMC41IC0+IDIuM0UrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NDEgIHBvd2VyIDAuNTYgIDAuNSAtPiAwLjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY0MiAgcG93ZXIgMC4wNTYgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY0MyAgcG93ZXIgNTYuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NDQgIHBvd2VyIDU2LjAwRS0yICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NDUgIHBvd2VyIDU2RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NDYgIHBvd2VyIDU2RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjQ3ICBwb3dlciA1NkUrMiAgMC41IC0+IDc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY0OCAgcG93ZXIgNTZFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjQ5ICBwb3dlciAwLjU3ICAwLjUgLT4gMC43NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NTAgIHBvd2VyIDAuMDU3ICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NTEgIHBvd2VyIDU3LjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjUyICBwb3dlciA1Ny4wMEUtMiAgMC41IC0+IDAuNzUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjUzICBwb3dlciA1N0UtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjU0ICBwb3dlciA1N0UrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY1NSAgcG93ZXIgNTdFKzIgIDAuNSAtPiA3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NTYgIHBvd2VyIDU3RSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY1NyAgcG93ZXIgMC41OCAgMC41IC0+IDAuNzYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjU4ICBwb3dlciAwLjA1OCAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjU5ICBwb3dlciA1OC4wRS0xICAwLjUgLT4gMi40ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY2MCAgcG93ZXIgNTguMDBFLTIgIDAuNSAtPiAwLjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY2MSAgcG93ZXIgNThFLTMgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY2MiAgcG93ZXIgNThFKzEgIDAuNSAtPiAyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NjMgIHBvd2VyIDU4RSsyICAwLjUgLT4gNzYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjY0ICBwb3dlciA1OEUrMyAgMC41IC0+IDIuNEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NjUgIHBvd2VyIDAuNTkgIDAuNSAtPiAwLjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY2NiAgcG93ZXIgMC4wNTkgIDAuNSAtPiAwLjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY2NyAgcG93ZXIgNTkuMEUtMSAgMC41IC0+IDIuNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NjggIHBvd2VyIDU5LjAwRS0yICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NjkgIHBvd2VyIDU5RS0zICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NzAgIHBvd2VyIDU5RSsxICAwLjUgLT4gMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjcxICBwb3dlciA1OUUrMiAgMC41IC0+IDc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY3MiAgcG93ZXIgNTlFKzMgIDAuNSAtPiAyLjRFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjczICBwb3dlciAwLjYwICAwLjUgLT4gMC43NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NzQgIHBvd2VyIDAuMDYwICAwLjUgLT4gMC4yNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2NzUgIHBvd2VyIDYwLjBFLTEgIDAuNSAtPiAyLjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjc2ICBwb3dlciA2MC4wMEUtMiAgMC41IC0+IDAuNzcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjc3ICBwb3dlciA2MEUtMyAgMC41IC0+IDAuMjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjc4ICBwb3dlciA2MEUrMSAgMC41IC0+IDI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY3OSAgcG93ZXIgNjBFKzIgIDAuNSAtPiA3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2ODAgIHBvd2VyIDYwRSszICAwLjUgLT4gMi40RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY4MSAgcG93ZXIgMC42MSAgMC41IC0+IDAuNzggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjgyICBwb3dlciAwLjA2MSAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjgzICBwb3dlciA2MS4wRS0xICAwLjUgLT4gMi41ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY4NCAgcG93ZXIgNjEuMDBFLTIgIDAuNSAtPiAwLjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY4NSAgcG93ZXIgNjFFLTMgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY4NiAgcG93ZXIgNjFFKzEgIDAuNSAtPiAyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2ODcgIHBvd2VyIDYxRSsyICAwLjUgLT4gNzggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjg4ICBwb3dlciA2MUUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2ODkgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY5MCAgcG93ZXIgMC4wNjIgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY5MSAgcG93ZXIgNjIuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2OTIgIHBvd2VyIDYyLjAwRS0yICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2OTMgIHBvd2VyIDYyRS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2OTQgIHBvd2VyIDYyRSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjk1ICBwb3dlciA2MkUrMiAgMC41IC0+IDc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjY5NiAgcG93ZXIgNjJFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNjk3ICBwb3dlciAwLjYzICAwLjUgLT4gMC43OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2OTggIHBvd2VyIDAuMDYzICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI2OTkgIHBvd2VyIDYzLjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzAwICBwb3dlciA2My4wMEUtMiAgMC41IC0+IDAuNzkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzAxICBwb3dlciA2M0UtMyAgMC41IC0+IDAuMjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzAyICBwb3dlciA2M0UrMSAgMC41IC0+IDI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcwMyAgcG93ZXIgNjNFKzIgIDAuNSAtPiA3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MDQgIHBvd2VyIDYzRSszICAwLjUgLT4gMi41RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcwNSAgcG93ZXIgMC42NCAgMC41IC0+IDAuODAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MDYgIHBvd2VyIDAuMDY0ICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MDcgIHBvd2VyIDY0LjBFLTEgIDAuNSAtPiAyLjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzA4ICBwb3dlciA2NC4wMEUtMiAgMC41IC0+IDAuODAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MDkgIHBvd2VyIDY0RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MTAgIHBvd2VyIDY0RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzExICBwb3dlciA2NEUrMiAgMC41IC0+IDgwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzEyICBwb3dlciA2NEUrMyAgMC41IC0+IDIuNUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MTMgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcxNCAgcG93ZXIgMC4wNjUgIDAuNSAtPiAwLjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcxNSAgcG93ZXIgNjUuMEUtMSAgMC41IC0+IDIuNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MTYgIHBvd2VyIDY1LjAwRS0yICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MTcgIHBvd2VyIDY1RS0zICAwLjUgLT4gMC4yNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MTggIHBvd2VyIDY1RSsxICAwLjUgLT4gMjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzE5ICBwb3dlciA2NUUrMiAgMC41IC0+IDgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcyMCAgcG93ZXIgNjVFKzMgIDAuNSAtPiAyLjVFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzIxICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MjIgIHBvd2VyIDAuMDY2ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MjMgIHBvd2VyIDY2LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzI0ICBwb3dlciA2Ni4wMEUtMiAgMC41IC0+IDAuODEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzI1ICBwb3dlciA2NkUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzI2ICBwb3dlciA2NkUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcyNyAgcG93ZXIgNjZFKzIgIDAuNSAtPiA4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MjggIHBvd2VyIDY2RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjcyOSAgcG93ZXIgMC42NyAgMC41IC0+IDAuODIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzMwICBwb3dlciAwLjA2NyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzMxICBwb3dlciA2Ny4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjczMiAgcG93ZXIgNjcuMDBFLTIgIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjczMyAgcG93ZXIgNjdFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjczNCAgcG93ZXIgNjdFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MzUgIHBvd2VyIDY3RSsyICAwLjUgLT4gODIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzM2ICBwb3dlciA2N0UrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3MzcgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjczOCAgcG93ZXIgMC4wNjggIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjczOSAgcG93ZXIgNjguMEUtMSAgMC41IC0+IDIuNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NDAgIHBvd2VyIDY4LjAwRS0yICAwLjUgLT4gMC44MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NDEgIHBvd2VyIDY4RS0zICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NDIgIHBvd2VyIDY4RSsxICAwLjUgLT4gMjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzQzICBwb3dlciA2OEUrMiAgMC41IC0+IDgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc0NCAgcG93ZXIgNjhFKzMgIDAuNSAtPiAyLjZFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzQ1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NDYgIHBvd2VyIDAuMDY5ICAwLjUgLT4gMC4yNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NDcgIHBvd2VyIDY5LjBFLTEgIDAuNSAtPiAyLjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzQ4ICBwb3dlciA2OS4wMEUtMiAgMC41IC0+IDAuODMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzQ5ICBwb3dlciA2OUUtMyAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzUwICBwb3dlciA2OUUrMSAgMC41IC0+IDI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc1MSAgcG93ZXIgNjlFKzIgIDAuNSAtPiA4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NTIgIHBvd2VyIDY5RSszICAwLjUgLT4gMi42RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc1MyAgcG93ZXIgMC43MCAgMC41IC0+IDAuODQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzU0ICBwb3dlciAwLjA3MCAgMC41IC0+IDAuMjYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzU1ICBwb3dlciA3MC4wRS0xICAwLjUgLT4gMi42ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc1NiAgcG93ZXIgNzAuMDBFLTIgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc1NyAgcG93ZXIgNzBFLTMgIDAuNSAtPiAwLjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc1OCAgcG93ZXIgNzBFKzEgIDAuNSAtPiAyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NTkgIHBvd2VyIDcwRSsyICAwLjUgLT4gODQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzYwICBwb3dlciA3MEUrMyAgMC41IC0+IDIuNkUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NjEgIHBvd2VyIDAuNzEgIDAuNSAtPiAwLjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc2MiAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc2MyAgcG93ZXIgNzEuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NjQgIHBvd2VyIDcxLjAwRS0yICAwLjUgLT4gMC44NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NjUgIHBvd2VyIDcxRS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NjYgIHBvd2VyIDcxRSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzY3ICBwb3dlciA3MUUrMiAgMC41IC0+IDg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc2OCAgcG93ZXIgNzFFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzY5ICBwb3dlciAwLjcyICAwLjUgLT4gMC44NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NzEgIHBvd2VyIDcyLjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzcyICBwb3dlciA3Mi4wMEUtMiAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzczICBwb3dlciA3MkUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzc0ICBwb3dlciA3MkUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc3NSAgcG93ZXIgNzJFKzIgIDAuNSAtPiA4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3NzYgIHBvd2VyIDcyRSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc3NyAgcG93ZXIgMC43MyAgMC41IC0+IDAuODUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzc4ICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzc5ICBwb3dlciA3My4wRS0xICAwLjUgLT4gMi43ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc4MCAgcG93ZXIgNzMuMDBFLTIgIDAuNSAtPiAwLjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc4MSAgcG93ZXIgNzNFLTMgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc4MiAgcG93ZXIgNzNFKzEgIDAuNSAtPiAyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3ODMgIHBvd2VyIDczRSsyICAwLjUgLT4gODUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzg0ICBwb3dlciA3M0UrMyAgMC41IC0+IDIuN0UrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3ODUgIHBvd2VyIDAuNzQgIDAuNSAtPiAwLjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc4NiAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc4NyAgcG93ZXIgNzQuMEUtMSAgMC41IC0+IDIuNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3ODggIHBvd2VyIDc0LjAwRS0yICAwLjUgLT4gMC44NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3ODkgIHBvd2VyIDc0RS0zICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3OTAgIHBvd2VyIDc0RSsxICAwLjUgLT4gMjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzkxICBwb3dlciA3NEUrMiAgMC41IC0+IDg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc5MiAgcG93ZXIgNzRFKzMgIDAuNSAtPiAyLjdFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzkzICBwb3dlciAwLjc1ICAwLjUgLT4gMC44NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3OTQgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI3OTUgIHBvd2VyIDc1LjBFLTEgIDAuNSAtPiAyLjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzk2ICBwb3dlciA3NS4wMEUtMiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzk3ICBwb3dlciA3NUUtMyAgMC41IC0+IDAuMjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyNzk4ICBwb3dlciA3NUUrMSAgMC41IC0+IDI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjc5OSAgcG93ZXIgNzVFKzIgIDAuNSAtPiA4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MDAgIHBvd2VyIDc1RSszICAwLjUgLT4gMi43RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgwMSAgcG93ZXIgMC43NiAgMC41IC0+IDAuODcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODAyICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODAzICBwb3dlciA3Ni4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgwNCAgcG93ZXIgNzYuMDBFLTIgIDAuNSAtPiAwLjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgwNSAgcG93ZXIgNzZFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgwNiAgcG93ZXIgNzZFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MDcgIHBvd2VyIDc2RSsyICAwLjUgLT4gODcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODA4ICBwb3dlciA3NkUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MDkgIHBvd2VyIDAuNzcgIDAuNSAtPiAwLjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgxMCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgxMSAgcG93ZXIgNzcuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MTIgIHBvd2VyIDc3LjAwRS0yICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MTMgIHBvd2VyIDc3RS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MTQgIHBvd2VyIDc3RSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODE1ICBwb3dlciA3N0UrMiAgMC41IC0+IDg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgxNiAgcG93ZXIgNzdFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODE3ICBwb3dlciAwLjc4ICAwLjUgLT4gMC44OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MTggIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MTkgIHBvd2VyIDc4LjBFLTEgIDAuNSAtPiAyLjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODIwICBwb3dlciA3OC4wMEUtMiAgMC41IC0+IDAuODggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODIxICBwb3dlciA3OEUtMyAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODIyICBwb3dlciA3OEUrMSAgMC41IC0+IDI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgyMyAgcG93ZXIgNzhFKzIgIDAuNSAtPiA4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MjQgIHBvd2VyIDc4RSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgyNSAgcG93ZXIgMC43OSAgMC41IC0+IDAuODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODI2ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODI3ICBwb3dlciA3OS4wRS0xICAwLjUgLT4gMi44ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgyOCAgcG93ZXIgNzkuMDBFLTIgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgyOSAgcG93ZXIgNzlFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgzMCAgcG93ZXIgNzlFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MzEgIHBvd2VyIDc5RSsyICAwLjUgLT4gODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODMyICBwb3dlciA3OUUrMyAgMC41IC0+IDIuOEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MzMgIHBvd2VyIDAuODAgIDAuNSAtPiAwLjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgzNCAgcG93ZXIgMC4wODAgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjgzNSAgcG93ZXIgODAuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MzYgIHBvd2VyIDgwLjAwRS0yICAwLjUgLT4gMC44OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MzcgIHBvd2VyIDgwRS0zICAwLjUgLT4gMC4yOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4MzggIHBvd2VyIDgwRSsxICAwLjUgLT4gMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODM5ICBwb3dlciA4MEUrMiAgMC41IC0+IDg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0MCAgcG93ZXIgODBFKzMgIDAuNSAtPiAyLjhFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODQxICBwb3dlciAwLjgxICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0MiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0MyAgcG93ZXIgODEuMEUtMSAgMC41IC0+IDIuOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NDQgIHBvd2VyIDgxLjAwRS0yICAwLjUgLT4gMC45MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0NSAgcG93ZXIgODFFLTMgIDAuNSAtPiAwLjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0NiAgcG93ZXIgODFFKzEgIDAuNSAtPiAyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NDcgIHBvd2VyIDgxRSsyICAwLjUgLT4gOTAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NDggIHBvd2VyIDgxRSszICAwLjUgLT4gMi44RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg0OSAgcG93ZXIgMC44MiAgMC41IC0+IDAuOTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODUwICBwb3dlciAwLjA4MiAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODUxICBwb3dlciA4Mi4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg1MiAgcG93ZXIgODIuMDBFLTIgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg1MyAgcG93ZXIgODJFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg1NCAgcG93ZXIgODJFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NTUgIHBvd2VyIDgyRSsyICAwLjUgLT4gOTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODU2ICBwb3dlciA4MkUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NTcgIHBvd2VyIDAuODMgIDAuNSAtPiAwLjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg1OCAgcG93ZXIgMC4wODMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg1OSAgcG93ZXIgODMuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NjAgIHBvd2VyIDgzLjAwRS0yICAwLjUgLT4gMC45MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NjEgIHBvd2VyIDgzRS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NjIgIHBvd2VyIDgzRSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODYzICBwb3dlciA4M0UrMiAgMC41IC0+IDkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg2NCAgcG93ZXIgODNFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODY1ICBwb3dlciAwLjg0ICAwLjUgLT4gMC45MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NjYgIHBvd2VyIDAuMDg0ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NjcgIHBvd2VyIDg0LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODY4ICBwb3dlciA4NC4wMEUtMiAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODY5ICBwb3dlciA4NEUtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODcwICBwb3dlciA4NEUrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg3MSAgcG93ZXIgODRFKzIgIDAuNSAtPiA5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NzIgIHBvd2VyIDg0RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg3MyAgcG93ZXIgMC44NSAgMC41IC0+IDAuOTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODc0ICBwb3dlciAwLjA4NSAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODc1ICBwb3dlciA4NS4wRS0xICAwLjUgLT4gMi45ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg3NiAgcG93ZXIgODUuMDBFLTIgIDAuNSAtPiAwLjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg3NyAgcG93ZXIgODVFLTMgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg3OCAgcG93ZXIgODVFKzEgIDAuNSAtPiAyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4NzkgIHBvd2VyIDg1RSsyICAwLjUgLT4gOTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODgwICBwb3dlciA4NUUrMyAgMC41IC0+IDIuOUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4ODEgIHBvd2VyIDAuODYgIDAuNSAtPiAwLjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg4MiAgcG93ZXIgMC4wODYgIDAuNSAtPiAwLjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg4MyAgcG93ZXIgODYuMEUtMSAgMC41IC0+IDIuOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4ODQgIHBvd2VyIDg2LjAwRS0yICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4ODUgIHBvd2VyIDg2RS0zICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4ODYgIHBvd2VyIDg2RSsxICAwLjUgLT4gMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODg3ICBwb3dlciA4NkUrMiAgMC41IC0+IDkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg4OCAgcG93ZXIgODZFKzMgIDAuNSAtPiAyLjlFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODg5ICBwb3dlciAwLjg3ICAwLjUgLT4gMC45MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4OTAgIHBvd2VyIDAuMDg3ICAwLjUgLT4gMC4yOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4OTEgIHBvd2VyIDg3LjBFLTEgIDAuNSAtPiAyLjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODkyICBwb3dlciA4Ny4wMEUtMiAgMC41IC0+IDAuOTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODkzICBwb3dlciA4N0UtMyAgMC41IC0+IDAuMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODk0ICBwb3dlciA4N0UrMSAgMC41IC0+IDI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg5NSAgcG93ZXIgODdFKzIgIDAuNSAtPiA5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI4OTYgIHBvd2VyIDg3RSszICAwLjUgLT4gMi45RSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjg5NyAgcG93ZXIgMC44OCAgMC41IC0+IDAuOTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODk4ICBwb3dlciAwLjA4OCAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyODk5ICBwb3dlciA4OC4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkwMCAgcG93ZXIgODguMDBFLTIgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkwMSAgcG93ZXIgODhFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkwMiAgcG93ZXIgODhFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MDMgIHBvd2VyIDg4RSsyICAwLjUgLT4gOTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTA0ICBwb3dlciA4OEUrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MDUgIHBvd2VyIDAuODkgIDAuNSAtPiAwLjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkwNiAgcG93ZXIgMC4wODkgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkwNyAgcG93ZXIgODkuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MDggIHBvd2VyIDg5LjAwRS0yICAwLjUgLT4gMC45NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MDkgIHBvd2VyIDg5RS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MTAgIHBvd2VyIDg5RSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTExICBwb3dlciA4OUUrMiAgMC41IC0+IDk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkxMiAgcG93ZXIgODlFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTEzICBwb3dlciAwLjkwICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MTQgIHBvd2VyIDAuMDkwICAwLjUgLT4gMC4zMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkxNSAgcG93ZXIgOTAuMEUtMSAgMC41IC0+IDMuMCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkxNiAgcG93ZXIgOTAuMDBFLTIgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkxNyAgcG93ZXIgOTBFLTMgIDAuNSAtPiAwLjMwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTE4ICBwb3dlciA5MEUrMSAgMC41IC0+IDMwIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTE5ICBwb3dlciA5MEUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkyMCAgcG93ZXIgOTBFKzMgIDAuNSAtPiAzLjBFKzIgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MjEgIHBvd2VyIDAuOTEgIDAuNSAtPiAwLjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkyMiAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkyMyAgcG93ZXIgOTEuMEUtMSAgMC41IC0+IDMuMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MjQgIHBvd2VyIDkxLjAwRS0yICAwLjUgLT4gMC45NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MjUgIHBvd2VyIDkxRS0zICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MjYgIHBvd2VyIDkxRSsxICAwLjUgLT4gMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTI3ICBwb3dlciA5MUUrMiAgMC41IC0+IDk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkyOCAgcG93ZXIgOTFFKzMgIDAuNSAtPiAzLjBFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTI5ICBwb3dlciAwLjkyICAwLjUgLT4gMC45NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MzAgIHBvd2VyIDAuMDkyICAwLjUgLT4gMC4zMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MzEgIHBvd2VyIDkyLjBFLTEgIDAuNSAtPiAzLjAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTMyICBwb3dlciA5Mi4wMEUtMiAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTMzICBwb3dlciA5MkUtMyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTM0ICBwb3dlciA5MkUrMSAgMC41IC0+IDMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkzNSAgcG93ZXIgOTJFKzIgIDAuNSAtPiA5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5MzYgIHBvd2VyIDkyRSszICAwLjUgLT4gMy4wRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MjkzNyAgcG93ZXIgMC45MyAgMC41IC0+IDAuOTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTM4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTM5ICBwb3dlciA5My4wRS0xICAwLjUgLT4gMy4wICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk0MCAgcG93ZXIgOTMuMDBFLTIgIDAuNSAtPiAwLjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk0MSAgcG93ZXIgOTNFLTMgIDAuNSAtPiAwLjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk0MiAgcG93ZXIgOTNFKzEgIDAuNSAtPiAzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NDMgIHBvd2VyIDkzRSsyICAwLjUgLT4gOTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTQ0ICBwb3dlciA5M0UrMyAgMC41IC0+IDMuMEUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NDUgIHBvd2VyIDAuOTQgIDAuNSAtPiAwLjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk0NiAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk0NyAgcG93ZXIgOTQuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NDggIHBvd2VyIDk0LjAwRS0yICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NDkgIHBvd2VyIDk0RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NTAgIHBvd2VyIDk0RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTUxICBwb3dlciA5NEUrMiAgMC41IC0+IDk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk1MiAgcG93ZXIgOTRFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTUzICBwb3dlciAwLjk1ICAwLjUgLT4gMC45NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NTQgIHBvd2VyIDAuMDk1ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NTUgIHBvd2VyIDk1LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTU2ICBwb3dlciA5NS4wMEUtMiAgMC41IC0+IDAuOTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTU3ICBwb3dlciA5NUUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTU4ICBwb3dlciA5NUUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk1OSAgcG93ZXIgOTVFKzIgIDAuNSAtPiA5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NjAgIHBvd2VyIDk1RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk2MSAgcG93ZXIgMC45NiAgMC41IC0+IDAuOTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTYyICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTYzICBwb3dlciA5Ni4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk2NCAgcG93ZXIgOTYuMDBFLTIgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk2NSAgcG93ZXIgOTZFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk2NiAgcG93ZXIgOTZFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NjcgIHBvd2VyIDk2RSsyICAwLjUgLT4gOTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTY4ICBwb3dlciA5NkUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NjkgIHBvd2VyIDAuOTcgIDAuNSAtPiAwLjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk3MCAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk3MSAgcG93ZXIgOTcuMEUtMSAgMC41IC0+IDMuMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NzIgIHBvd2VyIDk3LjAwRS0yICAwLjUgLT4gMC45OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NzMgIHBvd2VyIDk3RS0zICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NzQgIHBvd2VyIDk3RSsxICAwLjUgLT4gMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTc1ICBwb3dlciA5N0UrMiAgMC41IC0+IDk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk3NiAgcG93ZXIgOTdFKzMgIDAuNSAtPiAzLjFFKzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTc3ICBwb3dlciAwLjk4ICAwLjUgLT4gMC45OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NzggIHBvd2VyIDAuMDk4ICAwLjUgLT4gMC4zMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5NzkgIHBvd2VyIDk4LjBFLTEgIDAuNSAtPiAzLjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTgwICBwb3dlciA5OC4wMEUtMiAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTgxICBwb3dlciA5OEUtMyAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTgyICBwb3dlciA5OEUrMSAgMC41IC0+IDMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk4MyAgcG93ZXIgOThFKzIgIDAuNSAtPiA5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5ODQgIHBvd2VyIDk4RSszICAwLjUgLT4gMy4xRSsyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk4NSAgcG93ZXIgMC45OSAgMC41IC0+IDAuOTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTg2ICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTg3ICBwb3dlciA5OS4wRS0xICAwLjUgLT4gMy4xICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk4OCAgcG93ZXIgOTkuMDBFLTIgIDAuNSAtPiAwLjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk4OSAgcG93ZXIgOTlFLTMgIDAuNSAtPiAwLjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mjk5MCAgcG93ZXIgOTlFKzEgIDAuNSAtPiAzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDI5OTEgIHBvd2VyIDk5RSsyICAwLjUgLT4gOTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gyOTkyICBwb3dlciA5OUUrMyAgMC41IC0+IDMuMUUrMiAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gUHJlY2lzaW9uIDMgc3F1YXJlcm9vdCB0ZXN0cyBbZXhoYXVzdGl2ZSwgZiBhbmQgZi8xMF0NCityb3VuZGluZzogICAgaGFsZl9ldmVuDQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbmV4cG9uZW50OiAtOTk5DQorcHJlY2lzaW9uOiAgIDMNCitwd3N4MzAwMSAgcG93ZXIgMC4xICAwLjUgLT4gMC4zMTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDAyICBwb3dlciAwLjAxICAwLjUgLT4gMC4xMDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDAzICBwb3dlciAwLjIgIDAuNSAtPiAwLjQ0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMDQgIHBvd2VyIDAuMDIgIDAuNSAtPiAwLjE0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMDUgIHBvd2VyIDAuMyAgMC41IC0+IDAuNTQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAwNiAgcG93ZXIgMC4wMyAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAwNyAgcG93ZXIgMC40ICAwLjUgLT4gMC42MzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDA4ICBwb3dlciAwLjA0ICAwLjUgLT4gMC4yMDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDA5ICBwb3dlciAwLjUgIDAuNSAtPiAwLjcwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMTAgIHBvd2VyIDAuMDUgIDAuNSAtPiAwLjIyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMTEgIHBvd2VyIDAuNiAgMC41IC0+IDAuNzc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAxMiAgcG93ZXIgMC4wNiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAxMyAgcG93ZXIgMC43ICAwLjUgLT4gMC44MzcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDE0ICBwb3dlciAwLjA3ICAwLjUgLT4gMC4yNjUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDE1ICBwb3dlciAwLjggIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMTYgIHBvd2VyIDAuMDggIDAuNSAtPiAwLjI4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMTcgIHBvd2VyIDAuOSAgMC41IC0+IDAuOTQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAxOCAgcG93ZXIgMC4wOSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAxOSAgcG93ZXIgMC4xMSAgMC41IC0+IDAuMzMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAyMCAgcG93ZXIgMC4wMTEgIDAuNSAtPiAwLjEwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMjEgIHBvd2VyIDAuMTIgIDAuNSAtPiAwLjM0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMjIgIHBvd2VyIDAuMDEyICAwLjUgLT4gMC4xMTAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDIzICBwb3dlciAwLjEzICAwLjUgLT4gMC4zNjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDI0ICBwb3dlciAwLjAxMyAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAyNSAgcG93ZXIgMC4xNCAgMC41IC0+IDAuMzc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAyNiAgcG93ZXIgMC4wMTQgIDAuNSAtPiAwLjExOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMjcgIHBvd2VyIDAuMTUgIDAuNSAtPiAwLjM4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMjggIHBvd2VyIDAuMDE1ICAwLjUgLT4gMC4xMjIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDI5ICBwb3dlciAwLjE2ICAwLjUgLT4gMC40MDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDMwICBwb3dlciAwLjAxNiAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAzMSAgcG93ZXIgMC4xNyAgMC41IC0+IDAuNDEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAzMiAgcG93ZXIgMC4wMTcgIDAuNSAtPiAwLjEzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMzMgIHBvd2VyIDAuMTggIDAuNSAtPiAwLjQyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMzQgIHBvd2VyIDAuMDE4ICAwLjUgLT4gMC4xMzQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDM1ICBwb3dlciAwLjE5ICAwLjUgLT4gMC40MzYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDM2ICBwb3dlciAwLjAxOSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAzNyAgcG93ZXIgMC4yMSAgMC41IC0+IDAuNDU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzAzOCAgcG93ZXIgMC4wMjEgIDAuNSAtPiAwLjE0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwMzkgIHBvd2VyIDAuMjIgIDAuNSAtPiAwLjQ2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNDAgIHBvd2VyIDAuMDIyICAwLjUgLT4gMC4xNDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDQxICBwb3dlciAwLjIzICAwLjUgLT4gMC40ODAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDQyICBwb3dlciAwLjAyMyAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA0MyAgcG93ZXIgMC4yNCAgMC41IC0+IDAuNDkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA0NCAgcG93ZXIgMC4wMjQgIDAuNSAtPiAwLjE1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNDUgIHBvd2VyIDAuMjUgIDAuNSAtPiAwLjUwMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNDYgIHBvd2VyIDAuMDI1ICAwLjUgLT4gMC4xNTggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDQ3ICBwb3dlciAwLjI2ICAwLjUgLT4gMC41MTAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDQ4ICBwb3dlciAwLjAyNiAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA0OSAgcG93ZXIgMC4yNyAgMC41IC0+IDAuNTIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA1MCAgcG93ZXIgMC4wMjcgIDAuNSAtPiAwLjE2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNTEgIHBvd2VyIDAuMjggIDAuNSAtPiAwLjUyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNTIgIHBvd2VyIDAuMDI4ICAwLjUgLT4gMC4xNjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDUzICBwb3dlciAwLjI5ICAwLjUgLT4gMC41MzkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDU0ICBwb3dlciAwLjAyOSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA1NSAgcG93ZXIgMC4zMSAgMC41IC0+IDAuNTU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA1NiAgcG93ZXIgMC4wMzEgIDAuNSAtPiAwLjE3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNTcgIHBvd2VyIDAuMzIgIDAuNSAtPiAwLjU2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNTggIHBvd2VyIDAuMDMyICAwLjUgLT4gMC4xNzkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDU5ICBwb3dlciAwLjMzICAwLjUgLT4gMC41NzQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDYwICBwb3dlciAwLjAzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA2MSAgcG93ZXIgMC4zNCAgMC41IC0+IDAuNTgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA2MiAgcG93ZXIgMC4wMzQgIDAuNSAtPiAwLjE4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNjMgIHBvd2VyIDAuMzUgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNjQgIHBvd2VyIDAuMDM1ICAwLjUgLT4gMC4xODcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDY1ICBwb3dlciAwLjM2ICAwLjUgLT4gMC42MDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDY2ICBwb3dlciAwLjAzNiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA2NyAgcG93ZXIgMC4zNyAgMC41IC0+IDAuNjA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA2OCAgcG93ZXIgMC4wMzcgIDAuNSAtPiAwLjE5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNjkgIHBvd2VyIDAuMzggIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNzAgIHBvd2VyIDAuMDM4ICAwLjUgLT4gMC4xOTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDcxICBwb3dlciAwLjM5ICAwLjUgLT4gMC42MjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDcyICBwb3dlciAwLjAzOSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA3MyAgcG93ZXIgMC40MSAgMC41IC0+IDAuNjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA3NCAgcG93ZXIgMC4wNDEgIDAuNSAtPiAwLjIwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNzUgIHBvd2VyIDAuNDIgIDAuNSAtPiAwLjY0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwNzYgIHBvd2VyIDAuMDQyICAwLjUgLT4gMC4yMDUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDc3ICBwb3dlciAwLjQzICAwLjUgLT4gMC42NTYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDc4ICBwb3dlciAwLjA0MyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA3OSAgcG93ZXIgMC40NCAgMC41IC0+IDAuNjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA4MCAgcG93ZXIgMC4wNDQgIDAuNSAtPiAwLjIxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwODEgIHBvd2VyIDAuNDUgIDAuNSAtPiAwLjY3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwODIgIHBvd2VyIDAuMDQ1ICAwLjUgLT4gMC4yMTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDgzICBwb3dlciAwLjQ2ICAwLjUgLT4gMC42NzggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDg0ICBwb3dlciAwLjA0NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA4NSAgcG93ZXIgMC40NyAgMC41IC0+IDAuNjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA4NiAgcG93ZXIgMC4wNDcgIDAuNSAtPiAwLjIxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwODcgIHBvd2VyIDAuNDggIDAuNSAtPiAwLjY5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwODggIHBvd2VyIDAuMDQ4ICAwLjUgLT4gMC4yMTkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDg5ICBwb3dlciAwLjQ5ICAwLjUgLT4gMC43MDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDkwICBwb3dlciAwLjA0OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA5MSAgcG93ZXIgMC41MSAgMC41IC0+IDAuNzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA5MiAgcG93ZXIgMC4wNTEgIDAuNSAtPiAwLjIyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwOTMgIHBvd2VyIDAuNTIgIDAuNSAtPiAwLjcyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwOTQgIHBvd2VyIDAuMDUyICAwLjUgLT4gMC4yMjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDk1ICBwb3dlciAwLjUzICAwLjUgLT4gMC43MjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMDk2ICBwb3dlciAwLjA1MyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA5NyAgcG93ZXIgMC41NCAgMC41IC0+IDAuNzM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzA5OCAgcG93ZXIgMC4wNTQgIDAuNSAtPiAwLjIzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMwOTkgIHBvd2VyIDAuNTUgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMDAgIHBvd2VyIDAuMDU1ICAwLjUgLT4gMC4yMzUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTAxICBwb3dlciAwLjU2ICAwLjUgLT4gMC43NDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTAyICBwb3dlciAwLjA1NiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEwMyAgcG93ZXIgMC41NyAgMC41IC0+IDAuNzU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEwNCAgcG93ZXIgMC4wNTcgIDAuNSAtPiAwLjIzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMDUgIHBvd2VyIDAuNTggIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMDYgIHBvd2VyIDAuMDU4ICAwLjUgLT4gMC4yNDEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTA3ICBwb3dlciAwLjU5ICAwLjUgLT4gMC43NjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTA4ICBwb3dlciAwLjA1OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEwOSAgcG93ZXIgMC42MSAgMC41IC0+IDAuNzgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzExMCAgcG93ZXIgMC4wNjEgIDAuNSAtPiAwLjI0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMTEgIHBvd2VyIDAuNjIgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMTIgIHBvd2VyIDAuMDYyICAwLjUgLT4gMC4yNDkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTEzICBwb3dlciAwLjYzICAwLjUgLT4gMC43OTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTE0ICBwb3dlciAwLjA2MyAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzExNSAgcG93ZXIgMC42NCAgMC41IC0+IDAuODAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzExNiAgcG93ZXIgMC4wNjQgIDAuNSAtPiAwLjI1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMTcgIHBvd2VyIDAuNjUgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMTggIHBvd2VyIDAuMDY1ICAwLjUgLT4gMC4yNTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTE5ICBwb3dlciAwLjY2ICAwLjUgLT4gMC44MTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTIwICBwb3dlciAwLjA2NiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEyMSAgcG93ZXIgMC42NyAgMC41IC0+IDAuODE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEyMiAgcG93ZXIgMC4wNjcgIDAuNSAtPiAwLjI1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMjMgIHBvd2VyIDAuNjggIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMjQgIHBvd2VyIDAuMDY4ICAwLjUgLT4gMC4yNjEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTI1ICBwb3dlciAwLjY5ICAwLjUgLT4gMC44MzEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTI2ICBwb3dlciAwLjA2OSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEyNyAgcG93ZXIgMC43MSAgMC41IC0+IDAuODQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEyOCAgcG93ZXIgMC4wNzEgIDAuNSAtPiAwLjI2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMjkgIHBvd2VyIDAuNzIgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMzAgIHBvd2VyIDAuMDcyICAwLjUgLT4gMC4yNjggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTMxICBwb3dlciAwLjczICAwLjUgLT4gMC44NTQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTMyICBwb3dlciAwLjA3MyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEzMyAgcG93ZXIgMC43NCAgMC41IC0+IDAuODYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEzNCAgcG93ZXIgMC4wNzQgIDAuNSAtPiAwLjI3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMzUgIHBvd2VyIDAuNzUgIDAuNSAtPiAwLjg2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxMzYgIHBvd2VyIDAuMDc1ICAwLjUgLT4gMC4yNzQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTM3ICBwb3dlciAwLjc2ICAwLjUgLT4gMC44NzIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTM4ICBwb3dlciAwLjA3NiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzEzOSAgcG93ZXIgMC43NyAgMC41IC0+IDAuODc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE0MCAgcG93ZXIgMC4wNzcgIDAuNSAtPiAwLjI3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNDEgIHBvd2VyIDAuNzggIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNDIgIHBvd2VyIDAuMDc4ICAwLjUgLT4gMC4yNzkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTQzICBwb3dlciAwLjc5ICAwLjUgLT4gMC44ODkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTQ0ICBwb3dlciAwLjA3OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE0NSAgcG93ZXIgMC44MSAgMC41IC0+IDAuOTAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE0NiAgcG93ZXIgMC4wODEgIDAuNSAtPiAwLjI4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNDcgIHBvd2VyIDAuODIgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNDggIHBvd2VyIDAuMDgyICAwLjUgLT4gMC4yODYgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTQ5ICBwb3dlciAwLjgzICAwLjUgLT4gMC45MTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTUwICBwb3dlciAwLjA4MyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE1MSAgcG93ZXIgMC44NCAgMC41IC0+IDAuOTE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE1MiAgcG93ZXIgMC4wODQgIDAuNSAtPiAwLjI5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNTMgIHBvd2VyIDAuODUgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNTQgIHBvd2VyIDAuMDg1ICAwLjUgLT4gMC4yOTIgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTU1ICBwb3dlciAwLjg2ICAwLjUgLT4gMC45MjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTU2ICBwb3dlciAwLjA4NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE1NyAgcG93ZXIgMC44NyAgMC41IC0+IDAuOTMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE1OCAgcG93ZXIgMC4wODcgIDAuNSAtPiAwLjI5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNTkgIHBvd2VyIDAuODggIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNjAgIHBvd2VyIDAuMDg4ICAwLjUgLT4gMC4yOTcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTYxICBwb3dlciAwLjg5ICAwLjUgLT4gMC45NDMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTYyICBwb3dlciAwLjA4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE2MyAgcG93ZXIgMC45MSAgMC41IC0+IDAuOTU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE2NCAgcG93ZXIgMC4wOTEgIDAuNSAtPiAwLjMwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNjUgIHBvd2VyIDAuOTIgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNjYgIHBvd2VyIDAuMDkyICAwLjUgLT4gMC4zMDMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTY3ICBwb3dlciAwLjkzICAwLjUgLT4gMC45NjQgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTY4ICBwb3dlciAwLjA5MyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE2OSAgcG93ZXIgMC45NCAgMC41IC0+IDAuOTcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE3MCAgcG93ZXIgMC4wOTQgIDAuNSAtPiAwLjMwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNzEgIHBvd2VyIDAuOTUgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNzIgIHBvd2VyIDAuMDk1ICAwLjUgLT4gMC4zMDggIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTczICBwb3dlciAwLjk2ICAwLjUgLT4gMC45ODAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTc0ICBwb3dlciAwLjA5NiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE3NSAgcG93ZXIgMC45NyAgMC41IC0+IDAuOTg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE3NiAgcG93ZXIgMC4wOTcgIDAuNSAtPiAwLjMxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNzcgIHBvd2VyIDAuOTggIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxNzggIHBvd2VyIDAuMDk4ICAwLjUgLT4gMC4zMTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTc5ICBwb3dlciAwLjk5ICAwLjUgLT4gMC45OTUgIEluZXhhY3QgUm91bmRlZA0KK3B3c3gzMTgwICBwb3dlciAwLjA5OSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE4MSAgcG93ZXIgMC4xMDEgIDAuNSAtPiAwLjMxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxODIgIHBvd2VyIDAuMDEwMSAgMC41IC0+IDAuMTAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE4MyAgcG93ZXIgMC4xMDIgIDAuNSAtPiAwLjMxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxODQgIHBvd2VyIDAuMDEwMiAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE4NSAgcG93ZXIgMC4xMDMgIDAuNSAtPiAwLjMyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxODYgIHBvd2VyIDAuMDEwMyAgMC41IC0+IDAuMTAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE4NyAgcG93ZXIgMC4xMDQgIDAuNSAtPiAwLjMyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxODggIHBvd2VyIDAuMDEwNCAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE4OSAgcG93ZXIgMC4xMDUgIDAuNSAtPiAwLjMyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxOTAgIHBvd2VyIDAuMDEwNSAgMC41IC0+IDAuMTAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE5MSAgcG93ZXIgMC4xMDYgIDAuNSAtPiAwLjMyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxOTIgIHBvd2VyIDAuMDEwNiAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE5MyAgcG93ZXIgMC4xMDcgIDAuNSAtPiAwLjMyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxOTQgIHBvd2VyIDAuMDEwNyAgMC41IC0+IDAuMTAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE5NSAgcG93ZXIgMC4xMDggIDAuNSAtPiAwLjMyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxOTYgIHBvd2VyIDAuMDEwOCAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE5NyAgcG93ZXIgMC4xMDkgIDAuNSAtPiAwLjMzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMxOTggIHBvd2VyIDAuMDEwOSAgMC41IC0+IDAuMTA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzE5OSAgcG93ZXIgMC4xMTEgIDAuNSAtPiAwLjMzMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMDAgIHBvd2VyIDAuMDExMSAgMC41IC0+IDAuMTA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIwMSAgcG93ZXIgMC4xMTIgIDAuNSAtPiAwLjMzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMDIgIHBvd2VyIDAuMDExMiAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIwMyAgcG93ZXIgMC4xMTMgIDAuNSAtPiAwLjMzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMDQgIHBvd2VyIDAuMDExMyAgMC41IC0+IDAuMTA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIwNSAgcG93ZXIgMC4xMTQgIDAuNSAtPiAwLjMzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMDYgIHBvd2VyIDAuMDExNCAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIwNyAgcG93ZXIgMC4xMTUgIDAuNSAtPiAwLjMzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMDggIHBvd2VyIDAuMDExNSAgMC41IC0+IDAuMTA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIwOSAgcG93ZXIgMC4xMTYgIDAuNSAtPiAwLjM0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMTAgIHBvd2VyIDAuMDExNiAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIxMSAgcG93ZXIgMC4xMTcgIDAuNSAtPiAwLjM0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMTIgIHBvd2VyIDAuMDExNyAgMC41IC0+IDAuMTA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIxMyAgcG93ZXIgMC4xMTggIDAuNSAtPiAwLjM0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMTQgIHBvd2VyIDAuMDExOCAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIxNSAgcG93ZXIgMC4xMTkgIDAuNSAtPiAwLjM0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMTYgIHBvd2VyIDAuMDExOSAgMC41IC0+IDAuMTA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIxNyAgcG93ZXIgMC4xMjEgIDAuNSAtPiAwLjM0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMTggIHBvd2VyIDAuMDEyMSAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIxOSAgcG93ZXIgMC4xMjIgIDAuNSAtPiAwLjM0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMjAgIHBvd2VyIDAuMDEyMiAgMC41IC0+IDAuMTEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIyMSAgcG93ZXIgMC4xMjMgIDAuNSAtPiAwLjM1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMjIgIHBvd2VyIDAuMDEyMyAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIyMyAgcG93ZXIgMC4xMjQgIDAuNSAtPiAwLjM1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMjQgIHBvd2VyIDAuMDEyNCAgMC41IC0+IDAuMTExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIyNSAgcG93ZXIgMC4xMjUgIDAuNSAtPiAwLjM1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMjYgIHBvd2VyIDAuMDEyNSAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIyNyAgcG93ZXIgMC4xMjYgIDAuNSAtPiAwLjM1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMjggIHBvd2VyIDAuMDEyNiAgMC41IC0+IDAuMTEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIyOSAgcG93ZXIgMC4xMjcgIDAuNSAtPiAwLjM1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMzAgIHBvd2VyIDAuMDEyNyAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIzMSAgcG93ZXIgMC4xMjggIDAuNSAtPiAwLjM1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMzIgIHBvd2VyIDAuMDEyOCAgMC41IC0+IDAuMTEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIzMyAgcG93ZXIgMC4xMjkgIDAuNSAtPiAwLjM1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMzQgIHBvd2VyIDAuMDEyOSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIzNSAgcG93ZXIgMC4xMzEgIDAuNSAtPiAwLjM2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMzYgIHBvd2VyIDAuMDEzMSAgMC41IC0+IDAuMTE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIzNyAgcG93ZXIgMC4xMzIgIDAuNSAtPiAwLjM2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyMzggIHBvd2VyIDAuMDEzMiAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzIzOSAgcG93ZXIgMC4xMzMgIDAuNSAtPiAwLjM2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNDAgIHBvd2VyIDAuMDEzMyAgMC41IC0+IDAuMTE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI0MSAgcG93ZXIgMC4xMzQgIDAuNSAtPiAwLjM2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNDIgIHBvd2VyIDAuMDEzNCAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI0MyAgcG93ZXIgMC4xMzUgIDAuNSAtPiAwLjM2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNDQgIHBvd2VyIDAuMDEzNSAgMC41IC0+IDAuMTE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI0NSAgcG93ZXIgMC4xMzYgIDAuNSAtPiAwLjM2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNDYgIHBvd2VyIDAuMDEzNiAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI0NyAgcG93ZXIgMC4xMzcgIDAuNSAtPiAwLjM3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNDggIHBvd2VyIDAuMDEzNyAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI0OSAgcG93ZXIgMC4xMzggIDAuNSAtPiAwLjM3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNTAgIHBvd2VyIDAuMDEzOCAgMC41IC0+IDAuMTE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI1MSAgcG93ZXIgMC4xMzkgIDAuNSAtPiAwLjM3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNTIgIHBvd2VyIDAuMDEzOSAgMC41IC0+IDAuMTE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI1MyAgcG93ZXIgMC4xNDEgIDAuNSAtPiAwLjM3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNTQgIHBvd2VyIDAuMDE0MSAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI1NSAgcG93ZXIgMC4xNDIgIDAuNSAtPiAwLjM3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNTYgIHBvd2VyIDAuMDE0MiAgMC41IC0+IDAuMTE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI1NyAgcG93ZXIgMC4xNDMgIDAuNSAtPiAwLjM3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNTggIHBvd2VyIDAuMDE0MyAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI1OSAgcG93ZXIgMC4xNDQgIDAuNSAtPiAwLjM3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNjAgIHBvd2VyIDAuMDE0NCAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI2MSAgcG93ZXIgMC4xNDUgIDAuNSAtPiAwLjM4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNjIgIHBvd2VyIDAuMDE0NSAgMC41IC0+IDAuMTIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI2MyAgcG93ZXIgMC4xNDYgIDAuNSAtPiAwLjM4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNjQgIHBvd2VyIDAuMDE0NiAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI2NSAgcG93ZXIgMC4xNDcgIDAuNSAtPiAwLjM4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNjYgIHBvd2VyIDAuMDE0NyAgMC41IC0+IDAuMTIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI2NyAgcG93ZXIgMC4xNDggIDAuNSAtPiAwLjM4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNjggIHBvd2VyIDAuMDE0OCAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI2OSAgcG93ZXIgMC4xNDkgIDAuNSAtPiAwLjM4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNzAgIHBvd2VyIDAuMDE0OSAgMC41IC0+IDAuMTIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI3MSAgcG93ZXIgMC4xNTEgIDAuNSAtPiAwLjM4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNzIgIHBvd2VyIDAuMDE1MSAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI3MyAgcG93ZXIgMC4xNTIgIDAuNSAtPiAwLjM5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNzQgIHBvd2VyIDAuMDE1MiAgMC41IC0+IDAuMTIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI3NSAgcG93ZXIgMC4xNTMgIDAuNSAtPiAwLjM5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNzYgIHBvd2VyIDAuMDE1MyAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI3NyAgcG93ZXIgMC4xNTQgIDAuNSAtPiAwLjM5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyNzggIHBvd2VyIDAuMDE1NCAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI3OSAgcG93ZXIgMC4xNTUgIDAuNSAtPiAwLjM5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyODAgIHBvd2VyIDAuMDE1NSAgMC41IC0+IDAuMTI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI4MSAgcG93ZXIgMC4xNTYgIDAuNSAtPiAwLjM5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyODIgIHBvd2VyIDAuMDE1NiAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI4MyAgcG93ZXIgMC4xNTcgIDAuNSAtPiAwLjM5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyODQgIHBvd2VyIDAuMDE1NyAgMC41IC0+IDAuMTI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI4NSAgcG93ZXIgMC4xNTggIDAuNSAtPiAwLjM5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyODYgIHBvd2VyIDAuMDE1OCAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI4NyAgcG93ZXIgMC4xNTkgIDAuNSAtPiAwLjM5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyODggIHBvd2VyIDAuMDE1OSAgMC41IC0+IDAuMTI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI4OSAgcG93ZXIgMC4xNjEgIDAuNSAtPiAwLjQwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyOTAgIHBvd2VyIDAuMDE2MSAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI5MSAgcG93ZXIgMC4xNjIgIDAuNSAtPiAwLjQwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyOTIgIHBvd2VyIDAuMDE2MiAgMC41IC0+IDAuMTI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI5MyAgcG93ZXIgMC4xNjMgIDAuNSAtPiAwLjQwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyOTQgIHBvd2VyIDAuMDE2MyAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI5NSAgcG93ZXIgMC4xNjQgIDAuNSAtPiAwLjQwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyOTYgIHBvd2VyIDAuMDE2NCAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI5NyAgcG93ZXIgMC4xNjUgIDAuNSAtPiAwLjQwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMyOTggIHBvd2VyIDAuMDE2NSAgMC41IC0+IDAuMTI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzI5OSAgcG93ZXIgMC4xNjYgIDAuNSAtPiAwLjQwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMDAgIHBvd2VyIDAuMDE2NiAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMwMSAgcG93ZXIgMC4xNjcgIDAuNSAtPiAwLjQwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMDIgIHBvd2VyIDAuMDE2NyAgMC41IC0+IDAuMTI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMwMyAgcG93ZXIgMC4xNjggIDAuNSAtPiAwLjQxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMDQgIHBvd2VyIDAuMDE2OCAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMwNSAgcG93ZXIgMC4xNjkgIDAuNSAtPiAwLjQxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMDYgIHBvd2VyIDAuMDE2OSAgMC41IC0+IDAuMTMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMwNyAgcG93ZXIgMC4xNzEgIDAuNSAtPiAwLjQxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMDggIHBvd2VyIDAuMDE3MSAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMwOSAgcG93ZXIgMC4xNzIgIDAuNSAtPiAwLjQxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMTAgIHBvd2VyIDAuMDE3MiAgMC41IC0+IDAuMTMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMxMSAgcG93ZXIgMC4xNzMgIDAuNSAtPiAwLjQxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMTIgIHBvd2VyIDAuMDE3MyAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMxMyAgcG93ZXIgMC4xNzQgIDAuNSAtPiAwLjQxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMTQgIHBvd2VyIDAuMDE3NCAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMxNSAgcG93ZXIgMC4xNzUgIDAuNSAtPiAwLjQxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMTYgIHBvd2VyIDAuMDE3NSAgMC41IC0+IDAuMTMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMxNyAgcG93ZXIgMC4xNzYgIDAuNSAtPiAwLjQyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMTggIHBvd2VyIDAuMDE3NiAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMxOSAgcG93ZXIgMC4xNzcgIDAuNSAtPiAwLjQyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMjAgIHBvd2VyIDAuMDE3NyAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMyMSAgcG93ZXIgMC4xNzggIDAuNSAtPiAwLjQyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMjIgIHBvd2VyIDAuMDE3OCAgMC41IC0+IDAuMTMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMyMyAgcG93ZXIgMC4xNzkgIDAuNSAtPiAwLjQyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMjQgIHBvd2VyIDAuMDE3OSAgMC41IC0+IDAuMTM0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMyNSAgcG93ZXIgMC4xODEgIDAuNSAtPiAwLjQyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMjYgIHBvd2VyIDAuMDE4MSAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMyNyAgcG93ZXIgMC4xODIgIDAuNSAtPiAwLjQyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMjggIHBvd2VyIDAuMDE4MiAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMyOSAgcG93ZXIgMC4xODMgIDAuNSAtPiAwLjQyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMzAgIHBvd2VyIDAuMDE4MyAgMC41IC0+IDAuMTM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMzMSAgcG93ZXIgMC4xODQgIDAuNSAtPiAwLjQyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMzIgIHBvd2VyIDAuMDE4NCAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMzMyAgcG93ZXIgMC4xODUgIDAuNSAtPiAwLjQzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMzQgIHBvd2VyIDAuMDE4NSAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMzNSAgcG93ZXIgMC4xODYgIDAuNSAtPiAwLjQzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMzYgIHBvd2VyIDAuMDE4NiAgMC41IC0+IDAuMTM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMzNyAgcG93ZXIgMC4xODcgIDAuNSAtPiAwLjQzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzMzggIHBvd2VyIDAuMDE4NyAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzMzOSAgcG93ZXIgMC4xODggIDAuNSAtPiAwLjQzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNDAgIHBvd2VyIDAuMDE4OCAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM0MSAgcG93ZXIgMC4xODkgIDAuNSAtPiAwLjQzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNDIgIHBvd2VyIDAuMDE4OSAgMC41IC0+IDAuMTM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM0MyAgcG93ZXIgMC4xOTEgIDAuNSAtPiAwLjQzNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNDQgIHBvd2VyIDAuMDE5MSAgMC41IC0+IDAuMTM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM0NSAgcG93ZXIgMC4xOTIgIDAuNSAtPiAwLjQzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNDYgIHBvd2VyIDAuMDE5MiAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM0NyAgcG93ZXIgMC4xOTMgIDAuNSAtPiAwLjQzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNDggIHBvd2VyIDAuMDE5MyAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM0OSAgcG93ZXIgMC4xOTQgIDAuNSAtPiAwLjQ0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNTAgIHBvd2VyIDAuMDE5NCAgMC41IC0+IDAuMTM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM1MSAgcG93ZXIgMC4xOTUgIDAuNSAtPiAwLjQ0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNTIgIHBvd2VyIDAuMDE5NSAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM1MyAgcG93ZXIgMC4xOTYgIDAuNSAtPiAwLjQ0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNTQgIHBvd2VyIDAuMDE5NiAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM1NSAgcG93ZXIgMC4xOTcgIDAuNSAtPiAwLjQ0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNTYgIHBvd2VyIDAuMDE5NyAgMC41IC0+IDAuMTQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM1NyAgcG93ZXIgMC4xOTggIDAuNSAtPiAwLjQ0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNTggIHBvd2VyIDAuMDE5OCAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM1OSAgcG93ZXIgMC4xOTkgIDAuNSAtPiAwLjQ0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNjAgIHBvd2VyIDAuMDE5OSAgMC41IC0+IDAuMTQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM2MSAgcG93ZXIgMC4yMDEgIDAuNSAtPiAwLjQ0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNjIgIHBvd2VyIDAuMDIwMSAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM2MyAgcG93ZXIgMC4yMDIgIDAuNSAtPiAwLjQ0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNjQgIHBvd2VyIDAuMDIwMiAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM2NSAgcG93ZXIgMC4yMDMgIDAuNSAtPiAwLjQ1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNjYgIHBvd2VyIDAuMDIwMyAgMC41IC0+IDAuMTQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM2NyAgcG93ZXIgMC4yMDQgIDAuNSAtPiAwLjQ1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNjggIHBvd2VyIDAuMDIwNCAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM2OSAgcG93ZXIgMC4yMDUgIDAuNSAtPiAwLjQ1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNzAgIHBvd2VyIDAuMDIwNSAgMC41IC0+IDAuMTQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM3MSAgcG93ZXIgMC4yMDYgIDAuNSAtPiAwLjQ1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNzIgIHBvd2VyIDAuMDIwNiAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM3MyAgcG93ZXIgMC4yMDcgIDAuNSAtPiAwLjQ1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNzQgIHBvd2VyIDAuMDIwNyAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM3NSAgcG93ZXIgMC4yMDggIDAuNSAtPiAwLjQ1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNzYgIHBvd2VyIDAuMDIwOCAgMC41IC0+IDAuMTQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM3NyAgcG93ZXIgMC4yMDkgIDAuNSAtPiAwLjQ1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzNzggIHBvd2VyIDAuMDIwOSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM3OSAgcG93ZXIgMC4yMTEgIDAuNSAtPiAwLjQ1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzODAgIHBvd2VyIDAuMDIxMSAgMC41IC0+IDAuMTQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM4MSAgcG93ZXIgMC4yMTIgIDAuNSAtPiAwLjQ2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzODIgIHBvd2VyIDAuMDIxMiAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM4MyAgcG93ZXIgMC4yMTMgIDAuNSAtPiAwLjQ2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzODQgIHBvd2VyIDAuMDIxMyAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM4NSAgcG93ZXIgMC4yMTQgIDAuNSAtPiAwLjQ2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzODYgIHBvd2VyIDAuMDIxNCAgMC41IC0+IDAuMTQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM4NyAgcG93ZXIgMC4yMTUgIDAuNSAtPiAwLjQ2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzODggIHBvd2VyIDAuMDIxNSAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM4OSAgcG93ZXIgMC4yMTYgIDAuNSAtPiAwLjQ2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzOTAgIHBvd2VyIDAuMDIxNiAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM5MSAgcG93ZXIgMC4yMTcgIDAuNSAtPiAwLjQ2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzOTIgIHBvd2VyIDAuMDIxNyAgMC41IC0+IDAuMTQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM5MyAgcG93ZXIgMC4yMTggIDAuNSAtPiAwLjQ2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzOTQgIHBvd2VyIDAuMDIxOCAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM5NSAgcG93ZXIgMC4yMTkgIDAuNSAtPiAwLjQ2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzOTYgIHBvd2VyIDAuMDIxOSAgMC41IC0+IDAuMTQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM5NyAgcG93ZXIgMC4yMjEgIDAuNSAtPiAwLjQ3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDMzOTggIHBvd2VyIDAuMDIyMSAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzM5OSAgcG93ZXIgMC4yMjIgIDAuNSAtPiAwLjQ3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MDAgIHBvd2VyIDAuMDIyMiAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQwMSAgcG93ZXIgMC4yMjMgIDAuNSAtPiAwLjQ3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MDIgIHBvd2VyIDAuMDIyMyAgMC41IC0+IDAuMTQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQwMyAgcG93ZXIgMC4yMjQgIDAuNSAtPiAwLjQ3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MDQgIHBvd2VyIDAuMDIyNCAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQwNSAgcG93ZXIgMC4yMjUgIDAuNSAtPiAwLjQ3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MDYgIHBvd2VyIDAuMDIyNSAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQwNyAgcG93ZXIgMC4yMjYgIDAuNSAtPiAwLjQ3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MDggIHBvd2VyIDAuMDIyNiAgMC41IC0+IDAuMTUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQwOSAgcG93ZXIgMC4yMjcgIDAuNSAtPiAwLjQ3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MTAgIHBvd2VyIDAuMDIyNyAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQxMSAgcG93ZXIgMC4yMjggIDAuNSAtPiAwLjQ3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MTIgIHBvd2VyIDAuMDIyOCAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQxMyAgcG93ZXIgMC4yMjkgIDAuNSAtPiAwLjQ3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MTQgIHBvd2VyIDAuMDIyOSAgMC41IC0+IDAuMTUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQxNSAgcG93ZXIgMC4yMzEgIDAuNSAtPiAwLjQ4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MTYgIHBvd2VyIDAuMDIzMSAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQxNyAgcG93ZXIgMC4yMzIgIDAuNSAtPiAwLjQ4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MTggIHBvd2VyIDAuMDIzMiAgMC41IC0+IDAuMTUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQxOSAgcG93ZXIgMC4yMzMgIDAuNSAtPiAwLjQ4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MjAgIHBvd2VyIDAuMDIzMyAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQyMSAgcG93ZXIgMC4yMzQgIDAuNSAtPiAwLjQ4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MjIgIHBvd2VyIDAuMDIzNCAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQyMyAgcG93ZXIgMC4yMzUgIDAuNSAtPiAwLjQ4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MjQgIHBvd2VyIDAuMDIzNSAgMC41IC0+IDAuMTUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQyNSAgcG93ZXIgMC4yMzYgIDAuNSAtPiAwLjQ4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MjYgIHBvd2VyIDAuMDIzNiAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQyNyAgcG93ZXIgMC4yMzcgIDAuNSAtPiAwLjQ4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MjggIHBvd2VyIDAuMDIzNyAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQyOSAgcG93ZXIgMC4yMzggIDAuNSAtPiAwLjQ4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MzAgIHBvd2VyIDAuMDIzOCAgMC41IC0+IDAuMTU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQzMSAgcG93ZXIgMC4yMzkgIDAuNSAtPiAwLjQ4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MzIgIHBvd2VyIDAuMDIzOSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQzMyAgcG93ZXIgMC4yNDEgIDAuNSAtPiAwLjQ5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MzQgIHBvd2VyIDAuMDI0MSAgMC41IC0+IDAuMTU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQzNSAgcG93ZXIgMC4yNDIgIDAuNSAtPiAwLjQ5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MzYgIHBvd2VyIDAuMDI0MiAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQzNyAgcG93ZXIgMC4yNDMgIDAuNSAtPiAwLjQ5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0MzggIHBvd2VyIDAuMDI0MyAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQzOSAgcG93ZXIgMC4yNDQgIDAuNSAtPiAwLjQ5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NDAgIHBvd2VyIDAuMDI0NCAgMC41IC0+IDAuMTU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ0MSAgcG93ZXIgMC4yNDUgIDAuNSAtPiAwLjQ5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NDIgIHBvd2VyIDAuMDI0NSAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ0MyAgcG93ZXIgMC4yNDYgIDAuNSAtPiAwLjQ5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NDQgIHBvd2VyIDAuMDI0NiAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ0NSAgcG93ZXIgMC4yNDcgIDAuNSAtPiAwLjQ5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NDYgIHBvd2VyIDAuMDI0NyAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ0NyAgcG93ZXIgMC4yNDggIDAuNSAtPiAwLjQ5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NDggIHBvd2VyIDAuMDI0OCAgMC41IC0+IDAuMTU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ0OSAgcG93ZXIgMC4yNDkgIDAuNSAtPiAwLjQ5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NTAgIHBvd2VyIDAuMDI0OSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ1MSAgcG93ZXIgMC4yNTEgIDAuNSAtPiAwLjUwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NTIgIHBvd2VyIDAuMDI1MSAgMC41IC0+IDAuMTU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ1MyAgcG93ZXIgMC4yNTIgIDAuNSAtPiAwLjUwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NTQgIHBvd2VyIDAuMDI1MiAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ1NSAgcG93ZXIgMC4yNTMgIDAuNSAtPiAwLjUwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NTYgIHBvd2VyIDAuMDI1MyAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ1NyAgcG93ZXIgMC4yNTQgIDAuNSAtPiAwLjUwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NTggIHBvd2VyIDAuMDI1NCAgMC41IC0+IDAuMTU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ1OSAgcG93ZXIgMC4yNTUgIDAuNSAtPiAwLjUwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NjAgIHBvd2VyIDAuMDI1NSAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ2MSAgcG93ZXIgMC4yNTYgIDAuNSAtPiAwLjUwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NjIgIHBvd2VyIDAuMDI1NiAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ2MyAgcG93ZXIgMC4yNTcgIDAuNSAtPiAwLjUwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NjQgIHBvd2VyIDAuMDI1NyAgMC41IC0+IDAuMTYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ2NSAgcG93ZXIgMC4yNTggIDAuNSAtPiAwLjUwOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NjYgIHBvd2VyIDAuMDI1OCAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ2NyAgcG93ZXIgMC4yNTkgIDAuNSAtPiAwLjUwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NjggIHBvd2VyIDAuMDI1OSAgMC41IC0+IDAuMTYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ2OSAgcG93ZXIgMC4yNjEgIDAuNSAtPiAwLjUxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NzAgIHBvd2VyIDAuMDI2MSAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ3MSAgcG93ZXIgMC4yNjIgIDAuNSAtPiAwLjUxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NzIgIHBvd2VyIDAuMDI2MiAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ3MyAgcG93ZXIgMC4yNjMgIDAuNSAtPiAwLjUxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NzQgIHBvd2VyIDAuMDI2MyAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ3NSAgcG93ZXIgMC4yNjQgIDAuNSAtPiAwLjUxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NzYgIHBvd2VyIDAuMDI2NCAgMC41IC0+IDAuMTYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ3NyAgcG93ZXIgMC4yNjUgIDAuNSAtPiAwLjUxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0NzggIHBvd2VyIDAuMDI2NSAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ3OSAgcG93ZXIgMC4yNjYgIDAuNSAtPiAwLjUxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0ODAgIHBvd2VyIDAuMDI2NiAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ4MSAgcG93ZXIgMC4yNjcgIDAuNSAtPiAwLjUxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0ODIgIHBvd2VyIDAuMDI2NyAgMC41IC0+IDAuMTYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ4MyAgcG93ZXIgMC4yNjggIDAuNSAtPiAwLjUxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0ODQgIHBvd2VyIDAuMDI2OCAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ4NSAgcG93ZXIgMC4yNjkgIDAuNSAtPiAwLjUxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0ODYgIHBvd2VyIDAuMDI2OSAgMC41IC0+IDAuMTY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ4NyAgcG93ZXIgMC4yNzEgIDAuNSAtPiAwLjUyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0ODggIHBvd2VyIDAuMDI3MSAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ4OSAgcG93ZXIgMC4yNzIgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0OTAgIHBvd2VyIDAuMDI3MiAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ5MSAgcG93ZXIgMC4yNzMgIDAuNSAtPiAwLjUyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0OTIgIHBvd2VyIDAuMDI3MyAgMC41IC0+IDAuMTY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ5MyAgcG93ZXIgMC4yNzQgIDAuNSAtPiAwLjUyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0OTQgIHBvd2VyIDAuMDI3NCAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ5NSAgcG93ZXIgMC4yNzUgIDAuNSAtPiAwLjUyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0OTYgIHBvd2VyIDAuMDI3NSAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ5NyAgcG93ZXIgMC4yNzYgIDAuNSAtPiAwLjUyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM0OTggIHBvd2VyIDAuMDI3NiAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzQ5OSAgcG93ZXIgMC4yNzcgIDAuNSAtPiAwLjUyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MDAgIHBvd2VyIDAuMDI3NyAgMC41IC0+IDAuMTY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUwMSAgcG93ZXIgMC4yNzggIDAuNSAtPiAwLjUyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MDIgIHBvd2VyIDAuMDI3OCAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUwMyAgcG93ZXIgMC4yNzkgIDAuNSAtPiAwLjUyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MDQgIHBvd2VyIDAuMDI3OSAgMC41IC0+IDAuMTY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUwNSAgcG93ZXIgMC4yODEgIDAuNSAtPiAwLjUzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MDYgIHBvd2VyIDAuMDI4MSAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUwNyAgcG93ZXIgMC4yODIgIDAuNSAtPiAwLjUzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MDggIHBvd2VyIDAuMDI4MiAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUwOSAgcG93ZXIgMC4yODMgIDAuNSAtPiAwLjUzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MTAgIHBvd2VyIDAuMDI4MyAgMC41IC0+IDAuMTY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUxMSAgcG93ZXIgMC4yODQgIDAuNSAtPiAwLjUzMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MTIgIHBvd2VyIDAuMDI4NCAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUxMyAgcG93ZXIgMC4yODUgIDAuNSAtPiAwLjUzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MTQgIHBvd2VyIDAuMDI4NSAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUxNSAgcG93ZXIgMC4yODYgIDAuNSAtPiAwLjUzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MTYgIHBvd2VyIDAuMDI4NiAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUxNyAgcG93ZXIgMC4yODcgIDAuNSAtPiAwLjUzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MTggIHBvd2VyIDAuMDI4NyAgMC41IC0+IDAuMTY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUxOSAgcG93ZXIgMC4yODggIDAuNSAtPiAwLjUzNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MjAgIHBvd2VyIDAuMDI4OCAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUyMSAgcG93ZXIgMC4yODkgIDAuNSAtPiAwLjUzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MjIgIHBvd2VyIDAuMDI4OSAgMC41IC0+IDAuMTcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUyMyAgcG93ZXIgMC4yOTEgIDAuNSAtPiAwLjUzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MjQgIHBvd2VyIDAuMDI5MSAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUyNSAgcG93ZXIgMC4yOTIgIDAuNSAtPiAwLjU0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MjYgIHBvd2VyIDAuMDI5MiAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUyNyAgcG93ZXIgMC4yOTMgIDAuNSAtPiAwLjU0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MjggIHBvd2VyIDAuMDI5MyAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUyOSAgcG93ZXIgMC4yOTQgIDAuNSAtPiAwLjU0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MzAgIHBvd2VyIDAuMDI5NCAgMC41IC0+IDAuMTcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUzMSAgcG93ZXIgMC4yOTUgIDAuNSAtPiAwLjU0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MzIgIHBvd2VyIDAuMDI5NSAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUzMyAgcG93ZXIgMC4yOTYgIDAuNSAtPiAwLjU0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MzQgIHBvd2VyIDAuMDI5NiAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUzNSAgcG93ZXIgMC4yOTcgIDAuNSAtPiAwLjU0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MzYgIHBvd2VyIDAuMDI5NyAgMC41IC0+IDAuMTcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUzNyAgcG93ZXIgMC4yOTggIDAuNSAtPiAwLjU0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1MzggIHBvd2VyIDAuMDI5OCAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzUzOSAgcG93ZXIgMC4yOTkgIDAuNSAtPiAwLjU0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NDAgIHBvd2VyIDAuMDI5OSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU0MSAgcG93ZXIgMC4zMDEgIDAuNSAtPiAwLjU0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NDIgIHBvd2VyIDAuMDMwMSAgMC41IC0+IDAuMTczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU0MyAgcG93ZXIgMC4zMDIgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NDQgIHBvd2VyIDAuMDMwMiAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU0NSAgcG93ZXIgMC4zMDMgIDAuNSAtPiAwLjU1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NDYgIHBvd2VyIDAuMDMwMyAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU0NyAgcG93ZXIgMC4zMDQgIDAuNSAtPiAwLjU1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NDggIHBvd2VyIDAuMDMwNCAgMC41IC0+IDAuMTc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU0OSAgcG93ZXIgMC4zMDUgIDAuNSAtPiAwLjU1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NTAgIHBvd2VyIDAuMDMwNSAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU1MSAgcG93ZXIgMC4zMDYgIDAuNSAtPiAwLjU1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NTIgIHBvd2VyIDAuMDMwNiAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU1MyAgcG93ZXIgMC4zMDcgIDAuNSAtPiAwLjU1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NTQgIHBvd2VyIDAuMDMwNyAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU1NSAgcG93ZXIgMC4zMDggIDAuNSAtPiAwLjU1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NTYgIHBvd2VyIDAuMDMwOCAgMC41IC0+IDAuMTc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU1NyAgcG93ZXIgMC4zMDkgIDAuNSAtPiAwLjU1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NTggIHBvd2VyIDAuMDMwOSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU1OSAgcG93ZXIgMC4zMTEgIDAuNSAtPiAwLjU1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NjAgIHBvd2VyIDAuMDMxMSAgMC41IC0+IDAuMTc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU2MSAgcG93ZXIgMC4zMTIgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NjIgIHBvd2VyIDAuMDMxMiAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU2MyAgcG93ZXIgMC4zMTMgIDAuNSAtPiAwLjU1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NjQgIHBvd2VyIDAuMDMxMyAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU2NSAgcG93ZXIgMC4zMTQgIDAuNSAtPiAwLjU2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NjYgIHBvd2VyIDAuMDMxNCAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU2NyAgcG93ZXIgMC4zMTUgIDAuNSAtPiAwLjU2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NjggIHBvd2VyIDAuMDMxNSAgMC41IC0+IDAuMTc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU2OSAgcG93ZXIgMC4zMTYgIDAuNSAtPiAwLjU2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NzAgIHBvd2VyIDAuMDMxNiAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU3MSAgcG93ZXIgMC4zMTcgIDAuNSAtPiAwLjU2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NzIgIHBvd2VyIDAuMDMxNyAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU3MyAgcG93ZXIgMC4zMTggIDAuNSAtPiAwLjU2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NzQgIHBvd2VyIDAuMDMxOCAgMC41IC0+IDAuMTc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU3NSAgcG93ZXIgMC4zMTkgIDAuNSAtPiAwLjU2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NzYgIHBvd2VyIDAuMDMxOSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU3NyAgcG93ZXIgMC4zMjEgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1NzggIHBvd2VyIDAuMDMyMSAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU3OSAgcG93ZXIgMC4zMjIgIDAuNSAtPiAwLjU2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1ODAgIHBvd2VyIDAuMDMyMiAgMC41IC0+IDAuMTc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU4MSAgcG93ZXIgMC4zMjMgIDAuNSAtPiAwLjU2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1ODIgIHBvd2VyIDAuMDMyMyAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU4MyAgcG93ZXIgMC4zMjQgIDAuNSAtPiAwLjU2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1ODQgIHBvd2VyIDAuMDMyNCAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU4NSAgcG93ZXIgMC4zMjUgIDAuNSAtPiAwLjU3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1ODYgIHBvd2VyIDAuMDMyNSAgMC41IC0+IDAuMTgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU4NyAgcG93ZXIgMC4zMjYgIDAuNSAtPiAwLjU3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1ODggIHBvd2VyIDAuMDMyNiAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU4OSAgcG93ZXIgMC4zMjcgIDAuNSAtPiAwLjU3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1OTAgIHBvd2VyIDAuMDMyNyAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU5MSAgcG93ZXIgMC4zMjggIDAuNSAtPiAwLjU3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1OTIgIHBvd2VyIDAuMDMyOCAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU5MyAgcG93ZXIgMC4zMjkgIDAuNSAtPiAwLjU3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1OTQgIHBvd2VyIDAuMDMyOSAgMC41IC0+IDAuMTgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU5NSAgcG93ZXIgMC4zMzEgIDAuNSAtPiAwLjU3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1OTYgIHBvd2VyIDAuMDMzMSAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU5NyAgcG93ZXIgMC4zMzIgIDAuNSAtPiAwLjU3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM1OTggIHBvd2VyIDAuMDMzMiAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzU5OSAgcG93ZXIgMC4zMzMgIDAuNSAtPiAwLjU3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MDAgIHBvd2VyIDAuMDMzMyAgMC41IC0+IDAuMTgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYwMSAgcG93ZXIgMC4zMzQgIDAuNSAtPiAwLjU3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MDIgIHBvd2VyIDAuMDMzNCAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYwMyAgcG93ZXIgMC4zMzUgIDAuNSAtPiAwLjU3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MDQgIHBvd2VyIDAuMDMzNSAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYwNSAgcG93ZXIgMC4zMzYgIDAuNSAtPiAwLjU4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MDYgIHBvd2VyIDAuMDMzNiAgMC41IC0+IDAuMTgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYwNyAgcG93ZXIgMC4zMzcgIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MDggIHBvd2VyIDAuMDMzNyAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYwOSAgcG93ZXIgMC4zMzggIDAuNSAtPiAwLjU4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MTAgIHBvd2VyIDAuMDMzOCAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYxMSAgcG93ZXIgMC4zMzkgIDAuNSAtPiAwLjU4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MTIgIHBvd2VyIDAuMDMzOSAgMC41IC0+IDAuMTg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYxMyAgcG93ZXIgMC4zNDEgIDAuNSAtPiAwLjU4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MTQgIHBvd2VyIDAuMDM0MSAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYxNSAgcG93ZXIgMC4zNDIgIDAuNSAtPiAwLjU4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MTYgIHBvd2VyIDAuMDM0MiAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYxNyAgcG93ZXIgMC4zNDMgIDAuNSAtPiAwLjU4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MTggIHBvd2VyIDAuMDM0MyAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYxOSAgcG93ZXIgMC4zNDQgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MjAgIHBvd2VyIDAuMDM0NCAgMC41IC0+IDAuMTg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYyMSAgcG93ZXIgMC4zNDUgIDAuNSAtPiAwLjU4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MjIgIHBvd2VyIDAuMDM0NSAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYyMyAgcG93ZXIgMC4zNDYgIDAuNSAtPiAwLjU4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MjQgIHBvd2VyIDAuMDM0NiAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYyNSAgcG93ZXIgMC4zNDcgIDAuNSAtPiAwLjU4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MjYgIHBvd2VyIDAuMDM0NyAgMC41IC0+IDAuMTg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYyNyAgcG93ZXIgMC4zNDggIDAuNSAtPiAwLjU5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MjggIHBvd2VyIDAuMDM0OCAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYyOSAgcG93ZXIgMC4zNDkgIDAuNSAtPiAwLjU5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MzAgIHBvd2VyIDAuMDM0OSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYzMSAgcG93ZXIgMC4zNTEgIDAuNSAtPiAwLjU5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MzIgIHBvd2VyIDAuMDM1MSAgMC41IC0+IDAuMTg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYzMyAgcG93ZXIgMC4zNTIgIDAuNSAtPiAwLjU5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MzQgIHBvd2VyIDAuMDM1MiAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYzNSAgcG93ZXIgMC4zNTMgIDAuNSAtPiAwLjU5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MzYgIHBvd2VyIDAuMDM1MyAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYzNyAgcG93ZXIgMC4zNTQgIDAuNSAtPiAwLjU5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2MzggIHBvd2VyIDAuMDM1NCAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzYzOSAgcG93ZXIgMC4zNTUgIDAuNSAtPiAwLjU5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NDAgIHBvd2VyIDAuMDM1NSAgMC41IC0+IDAuMTg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY0MSAgcG93ZXIgMC4zNTYgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NDIgIHBvd2VyIDAuMDM1NiAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY0MyAgcG93ZXIgMC4zNTcgIDAuNSAtPiAwLjU5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NDQgIHBvd2VyIDAuMDM1NyAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY0NSAgcG93ZXIgMC4zNTggIDAuNSAtPiAwLjU5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NDYgIHBvd2VyIDAuMDM1OCAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY0NyAgcG93ZXIgMC4zNTkgIDAuNSAtPiAwLjU5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NDggIHBvd2VyIDAuMDM1OSAgMC41IC0+IDAuMTg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY0OSAgcG93ZXIgMC4zNjEgIDAuNSAtPiAwLjYwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NTAgIHBvd2VyIDAuMDM2MSAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY1MSAgcG93ZXIgMC4zNjIgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NTIgIHBvd2VyIDAuMDM2MiAgMC41IC0+IDAuMTkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY1MyAgcG93ZXIgMC4zNjMgIDAuNSAtPiAwLjYwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NTQgIHBvd2VyIDAuMDM2MyAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY1NSAgcG93ZXIgMC4zNjQgIDAuNSAtPiAwLjYwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NTYgIHBvd2VyIDAuMDM2NCAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY1NyAgcG93ZXIgMC4zNjUgIDAuNSAtPiAwLjYwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NTggIHBvd2VyIDAuMDM2NSAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY1OSAgcG93ZXIgMC4zNjYgIDAuNSAtPiAwLjYwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NjAgIHBvd2VyIDAuMDM2NiAgMC41IC0+IDAuMTkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY2MSAgcG93ZXIgMC4zNjcgIDAuNSAtPiAwLjYwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NjIgIHBvd2VyIDAuMDM2NyAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY2MyAgcG93ZXIgMC4zNjggIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NjQgIHBvd2VyIDAuMDM2OCAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY2NSAgcG93ZXIgMC4zNjkgIDAuNSAtPiAwLjYwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NjYgIHBvd2VyIDAuMDM2OSAgMC41IC0+IDAuMTkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY2NyAgcG93ZXIgMC4zNzEgIDAuNSAtPiAwLjYwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NjggIHBvd2VyIDAuMDM3MSAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY2OSAgcG93ZXIgMC4zNzIgIDAuNSAtPiAwLjYxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NzAgIHBvd2VyIDAuMDM3MiAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY3MSAgcG93ZXIgMC4zNzMgIDAuNSAtPiAwLjYxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NzIgIHBvd2VyIDAuMDM3MyAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY3MyAgcG93ZXIgMC4zNzQgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NzQgIHBvd2VyIDAuMDM3NCAgMC41IC0+IDAuMTkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY3NSAgcG93ZXIgMC4zNzUgIDAuNSAtPiAwLjYxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NzYgIHBvd2VyIDAuMDM3NSAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY3NyAgcG93ZXIgMC4zNzYgIDAuNSAtPiAwLjYxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2NzggIHBvd2VyIDAuMDM3NiAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY3OSAgcG93ZXIgMC4zNzcgIDAuNSAtPiAwLjYxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2ODAgIHBvd2VyIDAuMDM3NyAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY4MSAgcG93ZXIgMC4zNzggIDAuNSAtPiAwLjYxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2ODIgIHBvd2VyIDAuMDM3OCAgMC41IC0+IDAuMTk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY4MyAgcG93ZXIgMC4zNzkgIDAuNSAtPiAwLjYxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2ODQgIHBvd2VyIDAuMDM3OSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY4NSAgcG93ZXIgMC4zODEgIDAuNSAtPiAwLjYxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2ODYgIHBvd2VyIDAuMDM4MSAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY4NyAgcG93ZXIgMC4zODIgIDAuNSAtPiAwLjYxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2ODggIHBvd2VyIDAuMDM4MiAgMC41IC0+IDAuMTk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY4OSAgcG93ZXIgMC4zODMgIDAuNSAtPiAwLjYxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2OTAgIHBvd2VyIDAuMDM4MyAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY5MSAgcG93ZXIgMC4zODQgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2OTIgIHBvd2VyIDAuMDM4NCAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY5MyAgcG93ZXIgMC4zODUgIDAuNSAtPiAwLjYyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2OTQgIHBvd2VyIDAuMDM4NSAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY5NSAgcG93ZXIgMC4zODYgIDAuNSAtPiAwLjYyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2OTYgIHBvd2VyIDAuMDM4NiAgMC41IC0+IDAuMTk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY5NyAgcG93ZXIgMC4zODcgIDAuNSAtPiAwLjYyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM2OTggIHBvd2VyIDAuMDM4NyAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzY5OSAgcG93ZXIgMC4zODggIDAuNSAtPiAwLjYyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MDAgIHBvd2VyIDAuMDM4OCAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcwMSAgcG93ZXIgMC4zODkgIDAuNSAtPiAwLjYyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MDIgIHBvd2VyIDAuMDM4OSAgMC41IC0+IDAuMTk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcwMyAgcG93ZXIgMC4zOTEgIDAuNSAtPiAwLjYyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MDQgIHBvd2VyIDAuMDM5MSAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcwNSAgcG93ZXIgMC4zOTIgIDAuNSAtPiAwLjYyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MDYgIHBvd2VyIDAuMDM5MiAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcwNyAgcG93ZXIgMC4zOTMgIDAuNSAtPiAwLjYyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MDggIHBvd2VyIDAuMDM5MyAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcwOSAgcG93ZXIgMC4zOTQgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MTAgIHBvd2VyIDAuMDM5NCAgMC41IC0+IDAuMTk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcxMSAgcG93ZXIgMC4zOTUgIDAuNSAtPiAwLjYyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MTIgIHBvd2VyIDAuMDM5NSAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcxMyAgcG93ZXIgMC4zOTYgIDAuNSAtPiAwLjYyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MTQgIHBvd2VyIDAuMDM5NiAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcxNSAgcG93ZXIgMC4zOTcgIDAuNSAtPiAwLjYzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MTYgIHBvd2VyIDAuMDM5NyAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcxNyAgcG93ZXIgMC4zOTggIDAuNSAtPiAwLjYzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MTggIHBvd2VyIDAuMDM5OCAgMC41IC0+IDAuMTk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcxOSAgcG93ZXIgMC4zOTkgIDAuNSAtPiAwLjYzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MjAgIHBvd2VyIDAuMDM5OSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcyMSAgcG93ZXIgMC40MDEgIDAuNSAtPiAwLjYzMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MjIgIHBvd2VyIDAuMDQwMSAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcyMyAgcG93ZXIgMC40MDIgIDAuNSAtPiAwLjYzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MjQgIHBvd2VyIDAuMDQwMiAgMC41IC0+IDAuMjAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcyNSAgcG93ZXIgMC40MDMgIDAuNSAtPiAwLjYzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MjYgIHBvd2VyIDAuMDQwMyAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcyNyAgcG93ZXIgMC40MDQgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MjggIHBvd2VyIDAuMDQwNCAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzcyOSAgcG93ZXIgMC40MDUgIDAuNSAtPiAwLjYzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MzAgIHBvd2VyIDAuMDQwNSAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzczMSAgcG93ZXIgMC40MDYgIDAuNSAtPiAwLjYzNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MzIgIHBvd2VyIDAuMDQwNiAgMC41IC0+IDAuMjAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzczMyAgcG93ZXIgMC40MDcgIDAuNSAtPiAwLjYzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MzQgIHBvd2VyIDAuMDQwNyAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzczNSAgcG93ZXIgMC40MDggIDAuNSAtPiAwLjYzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MzYgIHBvd2VyIDAuMDQwOCAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzczNyAgcG93ZXIgMC40MDkgIDAuNSAtPiAwLjY0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3MzggIHBvd2VyIDAuMDQwOSAgMC41IC0+IDAuMjAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzczOSAgcG93ZXIgMC40MTEgIDAuNSAtPiAwLjY0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NDAgIHBvd2VyIDAuMDQxMSAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc0MSAgcG93ZXIgMC40MTIgIDAuNSAtPiAwLjY0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NDIgIHBvd2VyIDAuMDQxMiAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc0MyAgcG93ZXIgMC40MTMgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NDQgIHBvd2VyIDAuMDQxMyAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc0NSAgcG93ZXIgMC40MTQgIDAuNSAtPiAwLjY0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NDYgIHBvd2VyIDAuMDQxNCAgMC41IC0+IDAuMjAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc0NyAgcG93ZXIgMC40MTUgIDAuNSAtPiAwLjY0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NDggIHBvd2VyIDAuMDQxNSAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc0OSAgcG93ZXIgMC40MTYgIDAuNSAtPiAwLjY0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NTAgIHBvd2VyIDAuMDQxNiAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc1MSAgcG93ZXIgMC40MTcgIDAuNSAtPiAwLjY0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NTIgIHBvd2VyIDAuMDQxNyAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc1MyAgcG93ZXIgMC40MTggIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NTQgIHBvd2VyIDAuMDQxOCAgMC41IC0+IDAuMjA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc1NSAgcG93ZXIgMC40MTkgIDAuNSAtPiAwLjY0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NTYgIHBvd2VyIDAuMDQxOSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc1NyAgcG93ZXIgMC40MjEgIDAuNSAtPiAwLjY0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NTggIHBvd2VyIDAuMDQyMSAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc1OSAgcG93ZXIgMC40MjIgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NjAgIHBvd2VyIDAuMDQyMiAgMC41IC0+IDAuMjA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc2MSAgcG93ZXIgMC40MjMgIDAuNSAtPiAwLjY1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NjIgIHBvd2VyIDAuMDQyMyAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc2MyAgcG93ZXIgMC40MjQgIDAuNSAtPiAwLjY1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NjQgIHBvd2VyIDAuMDQyNCAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc2NSAgcG93ZXIgMC40MjUgIDAuNSAtPiAwLjY1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NjYgIHBvd2VyIDAuMDQyNSAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc2NyAgcG93ZXIgMC40MjYgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NjggIHBvd2VyIDAuMDQyNiAgMC41IC0+IDAuMjA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc2OSAgcG93ZXIgMC40MjcgIDAuNSAtPiAwLjY1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NzAgIHBvd2VyIDAuMDQyNyAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc3MSAgcG93ZXIgMC40MjggIDAuNSAtPiAwLjY1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NzIgIHBvd2VyIDAuMDQyOCAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc3MyAgcG93ZXIgMC40MjkgIDAuNSAtPiAwLjY1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NzQgIHBvd2VyIDAuMDQyOSAgMC41IC0+IDAuMjA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc3NSAgcG93ZXIgMC40MzEgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NzYgIHBvd2VyIDAuMDQzMSAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc3NyAgcG93ZXIgMC40MzIgIDAuNSAtPiAwLjY1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3NzggIHBvd2VyIDAuMDQzMiAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc3OSAgcG93ZXIgMC40MzMgIDAuNSAtPiAwLjY1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3ODAgIHBvd2VyIDAuMDQzMyAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc4MSAgcG93ZXIgMC40MzQgIDAuNSAtPiAwLjY1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3ODIgIHBvd2VyIDAuMDQzNCAgMC41IC0+IDAuMjA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc4MyAgcG93ZXIgMC40MzUgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3ODQgIHBvd2VyIDAuMDQzNSAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc4NSAgcG93ZXIgMC40MzYgIDAuNSAtPiAwLjY2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3ODYgIHBvd2VyIDAuMDQzNiAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc4NyAgcG93ZXIgMC40MzcgIDAuNSAtPiAwLjY2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3ODggIHBvd2VyIDAuMDQzNyAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc4OSAgcG93ZXIgMC40MzggIDAuNSAtPiAwLjY2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3OTAgIHBvd2VyIDAuMDQzOCAgMC41IC0+IDAuMjA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc5MSAgcG93ZXIgMC40MzkgIDAuNSAtPiAwLjY2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3OTIgIHBvd2VyIDAuMDQzOSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc5MyAgcG93ZXIgMC40NDEgIDAuNSAtPiAwLjY2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3OTQgIHBvd2VyIDAuMDQ0MSAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc5NSAgcG93ZXIgMC40NDIgIDAuNSAtPiAwLjY2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3OTYgIHBvd2VyIDAuMDQ0MiAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc5NyAgcG93ZXIgMC40NDMgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM3OTggIHBvd2VyIDAuMDQ0MyAgMC41IC0+IDAuMjEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzc5OSAgcG93ZXIgMC40NDQgIDAuNSAtPiAwLjY2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MDAgIHBvd2VyIDAuMDQ0NCAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgwMSAgcG93ZXIgMC40NDUgIDAuNSAtPiAwLjY2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MDIgIHBvd2VyIDAuMDQ0NSAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgwMyAgcG93ZXIgMC40NDYgIDAuNSAtPiAwLjY2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MDQgIHBvd2VyIDAuMDQ0NiAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgwNSAgcG93ZXIgMC40NDcgIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MDYgIHBvd2VyIDAuMDQ0NyAgMC41IC0+IDAuMjExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgwNyAgcG93ZXIgMC40NDggIDAuNSAtPiAwLjY2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MDggIHBvd2VyIDAuMDQ0OCAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgwOSAgcG93ZXIgMC40NDkgIDAuNSAtPiAwLjY3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MTAgIHBvd2VyIDAuMDQ0OSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgxMSAgcG93ZXIgMC40NTEgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MTIgIHBvd2VyIDAuMDQ1MSAgMC41IC0+IDAuMjEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgxMyAgcG93ZXIgMC40NTIgIDAuNSAtPiAwLjY3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MTQgIHBvd2VyIDAuMDQ1MiAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgxNSAgcG93ZXIgMC40NTMgIDAuNSAtPiAwLjY3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MTYgIHBvd2VyIDAuMDQ1MyAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgxNyAgcG93ZXIgMC40NTQgIDAuNSAtPiAwLjY3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MTggIHBvd2VyIDAuMDQ1NCAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgxOSAgcG93ZXIgMC40NTUgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MjAgIHBvd2VyIDAuMDQ1NSAgMC41IC0+IDAuMjEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgyMSAgcG93ZXIgMC40NTYgIDAuNSAtPiAwLjY3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MjIgIHBvd2VyIDAuMDQ1NiAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgyMyAgcG93ZXIgMC40NTcgIDAuNSAtPiAwLjY3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MjQgIHBvd2VyIDAuMDQ1NyAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgyNSAgcG93ZXIgMC40NTggIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MjYgIHBvd2VyIDAuMDQ1OCAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgyNyAgcG93ZXIgMC40NTkgIDAuNSAtPiAwLjY3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MjggIHBvd2VyIDAuMDQ1OSAgMC41IC0+IDAuMjE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgyOSAgcG93ZXIgMC40NjEgIDAuNSAtPiAwLjY3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MzAgIHBvd2VyIDAuMDQ2MSAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgzMSAgcG93ZXIgMC40NjIgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MzIgIHBvd2VyIDAuMDQ2MiAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgzMyAgcG93ZXIgMC40NjMgIDAuNSAtPiAwLjY4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MzQgIHBvd2VyIDAuMDQ2MyAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgzNSAgcG93ZXIgMC40NjQgIDAuNSAtPiAwLjY4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MzYgIHBvd2VyIDAuMDQ2NCAgMC41IC0+IDAuMjE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgzNyAgcG93ZXIgMC40NjUgIDAuNSAtPiAwLjY4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4MzggIHBvd2VyIDAuMDQ2NSAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzgzOSAgcG93ZXIgMC40NjYgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NDAgIHBvd2VyIDAuMDQ2NiAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg0MSAgcG93ZXIgMC40NjcgIDAuNSAtPiAwLjY4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NDIgIHBvd2VyIDAuMDQ2NyAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg0MyAgcG93ZXIgMC40NjggIDAuNSAtPiAwLjY4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NDQgIHBvd2VyIDAuMDQ2OCAgMC41IC0+IDAuMjE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg0NSAgcG93ZXIgMC40NjkgIDAuNSAtPiAwLjY4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NDYgIHBvd2VyIDAuMDQ2OSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg0NyAgcG93ZXIgMC40NzEgIDAuNSAtPiAwLjY4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NDggIHBvd2VyIDAuMDQ3MSAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg0OSAgcG93ZXIgMC40NzIgIDAuNSAtPiAwLjY4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NTAgIHBvd2VyIDAuMDQ3MiAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg1MSAgcG93ZXIgMC40NzMgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NTIgIHBvd2VyIDAuMDQ3MyAgMC41IC0+IDAuMjE3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg1MyAgcG93ZXIgMC40NzQgIDAuNSAtPiAwLjY4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NTQgIHBvd2VyIDAuMDQ3NCAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg1NSAgcG93ZXIgMC40NzUgIDAuNSAtPiAwLjY4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NTYgIHBvd2VyIDAuMDQ3NSAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg1NyAgcG93ZXIgMC40NzYgIDAuNSAtPiAwLjY5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NTggIHBvd2VyIDAuMDQ3NiAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg1OSAgcG93ZXIgMC40NzcgIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NjAgIHBvd2VyIDAuMDQ3NyAgMC41IC0+IDAuMjE4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg2MSAgcG93ZXIgMC40NzggIDAuNSAtPiAwLjY5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NjIgIHBvd2VyIDAuMDQ3OCAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg2MyAgcG93ZXIgMC40NzkgIDAuNSAtPiAwLjY5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NjQgIHBvd2VyIDAuMDQ3OSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg2NSAgcG93ZXIgMC40ODEgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NjYgIHBvd2VyIDAuMDQ4MSAgMC41IC0+IDAuMjE5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg2NyAgcG93ZXIgMC40ODIgIDAuNSAtPiAwLjY5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NjggIHBvd2VyIDAuMDQ4MiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg2OSAgcG93ZXIgMC40ODMgIDAuNSAtPiAwLjY5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NzAgIHBvd2VyIDAuMDQ4MyAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg3MSAgcG93ZXIgMC40ODQgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NzIgIHBvd2VyIDAuMDQ4NCAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg3MyAgcG93ZXIgMC40ODUgIDAuNSAtPiAwLjY5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NzQgIHBvd2VyIDAuMDQ4NSAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg3NSAgcG93ZXIgMC40ODYgIDAuNSAtPiAwLjY5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NzYgIHBvd2VyIDAuMDQ4NiAgMC41IC0+IDAuMjIwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg3NyAgcG93ZXIgMC40ODcgIDAuNSAtPiAwLjY5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4NzggIHBvd2VyIDAuMDQ4NyAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg3OSAgcG93ZXIgMC40ODggIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4ODAgIHBvd2VyIDAuMDQ4OCAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg4MSAgcG93ZXIgMC40ODkgIDAuNSAtPiAwLjY5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4ODIgIHBvd2VyIDAuMDQ4OSAgMC41IC0+IDAuMjIxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg4MyAgcG93ZXIgMC40OTEgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4ODQgIHBvd2VyIDAuMDQ5MSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg4NSAgcG93ZXIgMC40OTIgIDAuNSAtPiAwLjcwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4ODYgIHBvd2VyIDAuMDQ5MiAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg4NyAgcG93ZXIgMC40OTMgIDAuNSAtPiAwLjcwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4ODggIHBvd2VyIDAuMDQ5MyAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg4OSAgcG93ZXIgMC40OTQgIDAuNSAtPiAwLjcwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4OTAgIHBvd2VyIDAuMDQ5NCAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg5MSAgcG93ZXIgMC40OTUgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4OTIgIHBvd2VyIDAuMDQ5NSAgMC41IC0+IDAuMjIyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg5MyAgcG93ZXIgMC40OTYgIDAuNSAtPiAwLjcwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4OTQgIHBvd2VyIDAuMDQ5NiAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg5NSAgcG93ZXIgMC40OTcgIDAuNSAtPiAwLjcwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4OTYgIHBvd2VyIDAuMDQ5NyAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg5NyAgcG93ZXIgMC40OTggIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM4OTggIHBvd2VyIDAuMDQ5OCAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzg5OSAgcG93ZXIgMC40OTkgIDAuNSAtPiAwLjcwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MDAgIHBvd2VyIDAuMDQ5OSAgMC41IC0+IDAuMjIzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkwMSAgcG93ZXIgMC41MDEgIDAuNSAtPiAwLjcwOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MDIgIHBvd2VyIDAuMDUwMSAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkwMyAgcG93ZXIgMC41MDIgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MDQgIHBvd2VyIDAuMDUwMiAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkwNSAgcG93ZXIgMC41MDMgIDAuNSAtPiAwLjcwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MDYgIHBvd2VyIDAuMDUwMyAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkwNyAgcG93ZXIgMC41MDQgIDAuNSAtPiAwLjcxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MDggIHBvd2VyIDAuMDUwNCAgMC41IC0+IDAuMjI0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkwOSAgcG93ZXIgMC41MDUgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MTAgIHBvd2VyIDAuMDUwNSAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkxMSAgcG93ZXIgMC41MDYgIDAuNSAtPiAwLjcxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MTIgIHBvd2VyIDAuMDUwNiAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkxMyAgcG93ZXIgMC41MDcgIDAuNSAtPiAwLjcxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MTQgIHBvd2VyIDAuMDUwNyAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkxNSAgcG93ZXIgMC41MDggIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MTYgIHBvd2VyIDAuMDUwOCAgMC41IC0+IDAuMjI1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkxNyAgcG93ZXIgMC41MDkgIDAuNSAtPiAwLjcxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MTggIHBvd2VyIDAuMDUwOSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkxOSAgcG93ZXIgMC41MTEgIDAuNSAtPiAwLjcxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MjAgIHBvd2VyIDAuMDUxMSAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkyMSAgcG93ZXIgMC41MTIgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MjIgIHBvd2VyIDAuMDUxMiAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkyMyAgcG93ZXIgMC41MTMgIDAuNSAtPiAwLjcxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MjQgIHBvd2VyIDAuMDUxMyAgMC41IC0+IDAuMjI2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkyNSAgcG93ZXIgMC41MTQgIDAuNSAtPiAwLjcxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MjYgIHBvd2VyIDAuMDUxNCAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkyNyAgcG93ZXIgMC41MTUgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MjggIHBvd2VyIDAuMDUxNSAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkyOSAgcG93ZXIgMC41MTYgIDAuNSAtPiAwLjcxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MzAgIHBvd2VyIDAuMDUxNiAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkzMSAgcG93ZXIgMC41MTcgIDAuNSAtPiAwLjcxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MzIgIHBvd2VyIDAuMDUxNyAgMC41IC0+IDAuMjI3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkzMyAgcG93ZXIgMC41MTggIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MzQgIHBvd2VyIDAuMDUxOCAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkzNSAgcG93ZXIgMC41MTkgIDAuNSAtPiAwLjcyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MzYgIHBvd2VyIDAuMDUxOSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkzNyAgcG93ZXIgMC41MjEgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5MzggIHBvd2VyIDAuMDUyMSAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4MzkzOSAgcG93ZXIgMC41MjIgIDAuNSAtPiAwLjcyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NDAgIHBvd2VyIDAuMDUyMiAgMC41IC0+IDAuMjI4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk0MSAgcG93ZXIgMC41MjMgIDAuNSAtPiAwLjcyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NDIgIHBvd2VyIDAuMDUyMyAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk0MyAgcG93ZXIgMC41MjQgIDAuNSAtPiAwLjcyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NDQgIHBvd2VyIDAuMDUyNCAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk0NSAgcG93ZXIgMC41MjUgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NDYgIHBvd2VyIDAuMDUyNSAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk0NyAgcG93ZXIgMC41MjYgIDAuNSAtPiAwLjcyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NDggIHBvd2VyIDAuMDUyNiAgMC41IC0+IDAuMjI5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk0OSAgcG93ZXIgMC41MjcgIDAuNSAtPiAwLjcyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NTAgIHBvd2VyIDAuMDUyNyAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk1MSAgcG93ZXIgMC41MjggIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NTIgIHBvd2VyIDAuMDUyOCAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk1MyAgcG93ZXIgMC41MjkgIDAuNSAtPiAwLjcyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NTQgIHBvd2VyIDAuMDUyOSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk1NSAgcG93ZXIgMC41MzEgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NTYgIHBvd2VyIDAuMDUzMSAgMC41IC0+IDAuMjMwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk1NyAgcG93ZXIgMC41MzIgIDAuNSAtPiAwLjcyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NTggIHBvd2VyIDAuMDUzMiAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk1OSAgcG93ZXIgMC41MzMgIDAuNSAtPiAwLjczMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NjAgIHBvd2VyIDAuMDUzMyAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk2MSAgcG93ZXIgMC41MzQgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NjIgIHBvd2VyIDAuMDUzNCAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk2MyAgcG93ZXIgMC41MzUgIDAuNSAtPiAwLjczMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NjQgIHBvd2VyIDAuMDUzNSAgMC41IC0+IDAuMjMxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk2NSAgcG93ZXIgMC41MzYgIDAuNSAtPiAwLjczMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NjYgIHBvd2VyIDAuMDUzNiAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk2NyAgcG93ZXIgMC41MzcgIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NjggIHBvd2VyIDAuMDUzNyAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk2OSAgcG93ZXIgMC41MzggIDAuNSAtPiAwLjczMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NzAgIHBvd2VyIDAuMDUzOCAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk3MSAgcG93ZXIgMC41MzkgIDAuNSAtPiAwLjczNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NzIgIHBvd2VyIDAuMDUzOSAgMC41IC0+IDAuMjMyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk3MyAgcG93ZXIgMC41NDEgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NzQgIHBvd2VyIDAuMDU0MSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk3NSAgcG93ZXIgMC41NDIgIDAuNSAtPiAwLjczNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NzYgIHBvd2VyIDAuMDU0MiAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk3NyAgcG93ZXIgMC41NDMgIDAuNSAtPiAwLjczNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5NzggIHBvd2VyIDAuMDU0MyAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk3OSAgcG93ZXIgMC41NDQgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5ODAgIHBvd2VyIDAuMDU0NCAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk4MSAgcG93ZXIgMC41NDUgIDAuNSAtPiAwLjczOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5ODIgIHBvd2VyIDAuMDU0NSAgMC41IC0+IDAuMjMzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk4MyAgcG93ZXIgMC41NDYgIDAuNSAtPiAwLjczOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5ODQgIHBvd2VyIDAuMDU0NiAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk4NSAgcG93ZXIgMC41NDcgIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5ODYgIHBvd2VyIDAuMDU0NyAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk4NyAgcG93ZXIgMC41NDggIDAuNSAtPiAwLjc0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5ODggIHBvd2VyIDAuMDU0OCAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk4OSAgcG93ZXIgMC41NDkgIDAuNSAtPiAwLjc0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5OTAgIHBvd2VyIDAuMDU0OSAgMC41IC0+IDAuMjM0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk5MSAgcG93ZXIgMC41NTEgIDAuNSAtPiAwLjc0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5OTIgIHBvd2VyIDAuMDU1MSAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk5MyAgcG93ZXIgMC41NTIgIDAuNSAtPiAwLjc0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5OTQgIHBvd2VyIDAuMDU1MiAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk5NSAgcG93ZXIgMC41NTMgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5OTYgIHBvd2VyIDAuMDU1MyAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk5NyAgcG93ZXIgMC41NTQgIDAuNSAtPiAwLjc0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDM5OTggIHBvd2VyIDAuMDU1NCAgMC41IC0+IDAuMjM1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Mzk5OSAgcG93ZXIgMC41NTUgIDAuNSAtPiAwLjc0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMDAgIHBvd2VyIDAuMDU1NSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAwMSAgcG93ZXIgMC41NTYgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMDIgIHBvd2VyIDAuMDU1NiAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAwMyAgcG93ZXIgMC41NTcgIDAuNSAtPiAwLjc0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMDQgIHBvd2VyIDAuMDU1NyAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAwNSAgcG93ZXIgMC41NTggIDAuNSAtPiAwLjc0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMDYgIHBvd2VyIDAuMDU1OCAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAwNyAgcG93ZXIgMC41NTkgIDAuNSAtPiAwLjc0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMDggIHBvd2VyIDAuMDU1OSAgMC41IC0+IDAuMjM2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAwOSAgcG93ZXIgMC41NjEgIDAuNSAtPiAwLjc0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMTAgIHBvd2VyIDAuMDU2MSAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAxMSAgcG93ZXIgMC41NjIgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMTIgIHBvd2VyIDAuMDU2MiAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAxMyAgcG93ZXIgMC41NjMgIDAuNSAtPiAwLjc1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMTQgIHBvd2VyIDAuMDU2MyAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAxNSAgcG93ZXIgMC41NjQgIDAuNSAtPiAwLjc1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMTYgIHBvd2VyIDAuMDU2NCAgMC41IC0+IDAuMjM3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAxNyAgcG93ZXIgMC41NjUgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMTggIHBvd2VyIDAuMDU2NSAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAxOSAgcG93ZXIgMC41NjYgIDAuNSAtPiAwLjc1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMjAgIHBvd2VyIDAuMDU2NiAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAyMSAgcG93ZXIgMC41NjcgIDAuNSAtPiAwLjc1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMjIgIHBvd2VyIDAuMDU2NyAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAyMyAgcG93ZXIgMC41NjggIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMjQgIHBvd2VyIDAuMDU2OCAgMC41IC0+IDAuMjM4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAyNSAgcG93ZXIgMC41NjkgIDAuNSAtPiAwLjc1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMjYgIHBvd2VyIDAuMDU2OSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAyNyAgcG93ZXIgMC41NzEgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMjggIHBvd2VyIDAuMDU3MSAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAyOSAgcG93ZXIgMC41NzIgIDAuNSAtPiAwLjc1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMzAgIHBvd2VyIDAuMDU3MiAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAzMSAgcG93ZXIgMC41NzMgIDAuNSAtPiAwLjc1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMzIgIHBvd2VyIDAuMDU3MyAgMC41IC0+IDAuMjM5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAzMyAgcG93ZXIgMC41NzQgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMzQgIHBvd2VyIDAuMDU3NCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAzNSAgcG93ZXIgMC41NzUgIDAuNSAtPiAwLjc1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMzYgIHBvd2VyIDAuMDU3NSAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAzNyAgcG93ZXIgMC41NzYgIDAuNSAtPiAwLjc1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwMzggIHBvd2VyIDAuMDU3NiAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDAzOSAgcG93ZXIgMC41NzcgIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNDAgIHBvd2VyIDAuMDU3NyAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA0MSAgcG93ZXIgMC41NzggIDAuNSAtPiAwLjc2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNDIgIHBvd2VyIDAuMDU3OCAgMC41IC0+IDAuMjQwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA0MyAgcG93ZXIgMC41NzkgIDAuNSAtPiAwLjc2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNDQgIHBvd2VyIDAuMDU3OSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA0NSAgcG93ZXIgMC41ODEgIDAuNSAtPiAwLjc2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNDYgIHBvd2VyIDAuMDU4MSAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA0NyAgcG93ZXIgMC41ODIgIDAuNSAtPiAwLjc2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNDggIHBvd2VyIDAuMDU4MiAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA0OSAgcG93ZXIgMC41ODMgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNTAgIHBvd2VyIDAuMDU4MyAgMC41IC0+IDAuMjQxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA1MSAgcG93ZXIgMC41ODQgIDAuNSAtPiAwLjc2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNTIgIHBvd2VyIDAuMDU4NCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA1MyAgcG93ZXIgMC41ODUgIDAuNSAtPiAwLjc2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNTQgIHBvd2VyIDAuMDU4NSAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA1NSAgcG93ZXIgMC41ODYgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNTYgIHBvd2VyIDAuMDU4NiAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA1NyAgcG93ZXIgMC41ODcgIDAuNSAtPiAwLjc2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNTggIHBvd2VyIDAuMDU4NyAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA1OSAgcG93ZXIgMC41ODggIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNjAgIHBvd2VyIDAuMDU4OCAgMC41IC0+IDAuMjQyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA2MSAgcG93ZXIgMC41ODkgIDAuNSAtPiAwLjc2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNjIgIHBvd2VyIDAuMDU4OSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA2MyAgcG93ZXIgMC41OTEgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNjQgIHBvd2VyIDAuMDU5MSAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA2NSAgcG93ZXIgMC41OTIgIDAuNSAtPiAwLjc2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNjYgIHBvd2VyIDAuMDU5MiAgMC41IC0+IDAuMjQzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA2NyAgcG93ZXIgMC41OTMgIDAuNSAtPiAwLjc3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNjggIHBvd2VyIDAuMDU5MyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA2OSAgcG93ZXIgMC41OTQgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNzAgIHBvd2VyIDAuMDU5NCAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA3MSAgcG93ZXIgMC41OTUgIDAuNSAtPiAwLjc3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNzIgIHBvd2VyIDAuMDU5NSAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA3MyAgcG93ZXIgMC41OTYgIDAuNSAtPiAwLjc3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNzQgIHBvd2VyIDAuMDU5NiAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA3NSAgcG93ZXIgMC41OTcgIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNzYgIHBvd2VyIDAuMDU5NyAgMC41IC0+IDAuMjQ0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA3NyAgcG93ZXIgMC41OTggIDAuNSAtPiAwLjc3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwNzggIHBvd2VyIDAuMDU5OCAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA3OSAgcG93ZXIgMC41OTkgIDAuNSAtPiAwLjc3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwODAgIHBvd2VyIDAuMDU5OSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA4MSAgcG93ZXIgMC42MDEgIDAuNSAtPiAwLjc3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwODIgIHBvd2VyIDAuMDYwMSAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA4MyAgcG93ZXIgMC42MDIgIDAuNSAtPiAwLjc3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwODQgIHBvd2VyIDAuMDYwMiAgMC41IC0+IDAuMjQ1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA4NSAgcG93ZXIgMC42MDMgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwODYgIHBvd2VyIDAuMDYwMyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA4NyAgcG93ZXIgMC42MDQgIDAuNSAtPiAwLjc3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwODggIHBvd2VyIDAuMDYwNCAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA4OSAgcG93ZXIgMC42MDUgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwOTAgIHBvd2VyIDAuMDYwNSAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA5MSAgcG93ZXIgMC42MDYgIDAuNSAtPiAwLjc3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwOTIgIHBvd2VyIDAuMDYwNiAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA5MyAgcG93ZXIgMC42MDcgIDAuNSAtPiAwLjc3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwOTQgIHBvd2VyIDAuMDYwNyAgMC41IC0+IDAuMjQ2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA5NSAgcG93ZXIgMC42MDggIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwOTYgIHBvd2VyIDAuMDYwOCAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA5NyAgcG93ZXIgMC42MDkgIDAuNSAtPiAwLjc4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQwOTggIHBvd2VyIDAuMDYwOSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDA5OSAgcG93ZXIgMC42MTEgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMDAgIHBvd2VyIDAuMDYxMSAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEwMSAgcG93ZXIgMC42MTIgIDAuNSAtPiAwLjc4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMDIgIHBvd2VyIDAuMDYxMiAgMC41IC0+IDAuMjQ3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEwMyAgcG93ZXIgMC42MTMgIDAuNSAtPiAwLjc4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMDQgIHBvd2VyIDAuMDYxMyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEwNSAgcG93ZXIgMC42MTQgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMDYgIHBvd2VyIDAuMDYxNCAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEwNyAgcG93ZXIgMC42MTUgIDAuNSAtPiAwLjc4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMDggIHBvd2VyIDAuMDYxNSAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEwOSAgcG93ZXIgMC42MTYgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMTAgIHBvd2VyIDAuMDYxNiAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDExMSAgcG93ZXIgMC42MTcgIDAuNSAtPiAwLjc4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMTIgIHBvd2VyIDAuMDYxNyAgMC41IC0+IDAuMjQ4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDExMyAgcG93ZXIgMC42MTggIDAuNSAtPiAwLjc4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMTQgIHBvd2VyIDAuMDYxOCAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDExNSAgcG93ZXIgMC42MTkgIDAuNSAtPiAwLjc4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMTYgIHBvd2VyIDAuMDYxOSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDExNyAgcG93ZXIgMC42MjEgIDAuNSAtPiAwLjc4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMTggIHBvd2VyIDAuMDYyMSAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDExOSAgcG93ZXIgMC42MjIgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMjAgIHBvd2VyIDAuMDYyMiAgMC41IC0+IDAuMjQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEyMSAgcG93ZXIgMC42MjMgIDAuNSAtPiAwLjc4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMjIgIHBvd2VyIDAuMDYyMyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEyMyAgcG93ZXIgMC42MjQgIDAuNSAtPiAwLjc5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMjQgIHBvd2VyIDAuMDYyNCAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEyNSAgcG93ZXIgMC42MjUgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMjYgIHBvd2VyIDAuMDYyNSAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEyNyAgcG93ZXIgMC42MjYgIDAuNSAtPiAwLjc5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMjggIHBvd2VyIDAuMDYyNiAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEyOSAgcG93ZXIgMC42MjcgIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMzAgIHBvd2VyIDAuMDYyNyAgMC41IC0+IDAuMjUwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEzMSAgcG93ZXIgMC42MjggIDAuNSAtPiAwLjc5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMzIgIHBvd2VyIDAuMDYyOCAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEzMyAgcG93ZXIgMC42MjkgIDAuNSAtPiAwLjc5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMzQgIHBvd2VyIDAuMDYyOSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEzNSAgcG93ZXIgMC42MzEgIDAuNSAtPiAwLjc5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMzYgIHBvd2VyIDAuMDYzMSAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEzNyAgcG93ZXIgMC42MzIgIDAuNSAtPiAwLjc5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxMzggIHBvd2VyIDAuMDYzMiAgMC41IC0+IDAuMjUxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDEzOSAgcG93ZXIgMC42MzMgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNDAgIHBvd2VyIDAuMDYzMyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE0MSAgcG93ZXIgMC42MzQgIDAuNSAtPiAwLjc5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNDIgIHBvd2VyIDAuMDYzNCAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE0MyAgcG93ZXIgMC42MzUgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNDQgIHBvd2VyIDAuMDYzNSAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE0NSAgcG93ZXIgMC42MzYgIDAuNSAtPiAwLjc5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNDYgIHBvd2VyIDAuMDYzNiAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE0NyAgcG93ZXIgMC42MzcgIDAuNSAtPiAwLjc5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNDggIHBvd2VyIDAuMDYzNyAgMC41IC0+IDAuMjUyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE0OSAgcG93ZXIgMC42MzggIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNTAgIHBvd2VyIDAuMDYzOCAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE1MSAgcG93ZXIgMC42MzkgIDAuNSAtPiAwLjc5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNTIgIHBvd2VyIDAuMDYzOSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE1MyAgcG93ZXIgMC42NDEgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNTQgIHBvd2VyIDAuMDY0MSAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE1NSAgcG93ZXIgMC42NDIgIDAuNSAtPiAwLjgwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNTYgIHBvd2VyIDAuMDY0MiAgMC41IC0+IDAuMjUzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE1NyAgcG93ZXIgMC42NDMgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNTggIHBvd2VyIDAuMDY0MyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE1OSAgcG93ZXIgMC42NDQgIDAuNSAtPiAwLjgwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNjAgIHBvd2VyIDAuMDY0NCAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE2MSAgcG93ZXIgMC42NDUgIDAuNSAtPiAwLjgwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNjIgIHBvd2VyIDAuMDY0NSAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE2MyAgcG93ZXIgMC42NDYgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNjQgIHBvd2VyIDAuMDY0NiAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE2NSAgcG93ZXIgMC42NDcgIDAuNSAtPiAwLjgwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNjYgIHBvd2VyIDAuMDY0NyAgMC41IC0+IDAuMjU0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE2NyAgcG93ZXIgMC42NDggIDAuNSAtPiAwLjgwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNjggIHBvd2VyIDAuMDY0OCAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE2OSAgcG93ZXIgMC42NDkgIDAuNSAtPiAwLjgwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNzAgIHBvd2VyIDAuMDY0OSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE3MSAgcG93ZXIgMC42NTEgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNzIgIHBvd2VyIDAuMDY1MSAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE3MyAgcG93ZXIgMC42NTIgIDAuNSAtPiAwLjgwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNzQgIHBvd2VyIDAuMDY1MiAgMC41IC0+IDAuMjU1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE3NSAgcG93ZXIgMC42NTMgIDAuNSAtPiAwLjgwOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNzYgIHBvd2VyIDAuMDY1MyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE3NyAgcG93ZXIgMC42NTQgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxNzggIHBvd2VyIDAuMDY1NCAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE3OSAgcG93ZXIgMC42NTUgIDAuNSAtPiAwLjgwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxODAgIHBvd2VyIDAuMDY1NSAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE4MSAgcG93ZXIgMC42NTYgIDAuNSAtPiAwLjgxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxODIgIHBvd2VyIDAuMDY1NiAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE4MyAgcG93ZXIgMC42NTcgIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxODQgIHBvd2VyIDAuMDY1NyAgMC41IC0+IDAuMjU2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE4NSAgcG93ZXIgMC42NTggIDAuNSAtPiAwLjgxMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxODYgIHBvd2VyIDAuMDY1OCAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE4NyAgcG93ZXIgMC42NTkgIDAuNSAtPiAwLjgxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxODggIHBvd2VyIDAuMDY1OSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE4OSAgcG93ZXIgMC42NjEgIDAuNSAtPiAwLjgxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxOTAgIHBvd2VyIDAuMDY2MSAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE5MSAgcG93ZXIgMC42NjIgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxOTIgIHBvd2VyIDAuMDY2MiAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE5MyAgcG93ZXIgMC42NjMgIDAuNSAtPiAwLjgxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxOTQgIHBvd2VyIDAuMDY2MyAgMC41IC0+IDAuMjU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE5NSAgcG93ZXIgMC42NjQgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxOTYgIHBvd2VyIDAuMDY2NCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE5NyAgcG93ZXIgMC42NjUgIDAuNSAtPiAwLjgxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQxOTggIHBvd2VyIDAuMDY2NSAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDE5OSAgcG93ZXIgMC42NjYgIDAuNSAtPiAwLjgxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMDAgIHBvd2VyIDAuMDY2NiAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIwMSAgcG93ZXIgMC42NjcgIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMDIgIHBvd2VyIDAuMDY2NyAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIwMyAgcG93ZXIgMC42NjggIDAuNSAtPiAwLjgxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMDQgIHBvd2VyIDAuMDY2OCAgMC41IC0+IDAuMjU4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIwNSAgcG93ZXIgMC42NjkgIDAuNSAtPiAwLjgxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMDYgIHBvd2VyIDAuMDY2OSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIwNyAgcG93ZXIgMC42NzEgIDAuNSAtPiAwLjgxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMDggIHBvd2VyIDAuMDY3MSAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIwOSAgcG93ZXIgMC42NzIgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMTAgIHBvd2VyIDAuMDY3MiAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIxMSAgcG93ZXIgMC42NzMgIDAuNSAtPiAwLjgyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMTIgIHBvd2VyIDAuMDY3MyAgMC41IC0+IDAuMjU5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIxMyAgcG93ZXIgMC42NzQgIDAuNSAtPiAwLjgyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMTQgIHBvd2VyIDAuMDY3NCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIxNSAgcG93ZXIgMC42NzUgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMTYgIHBvd2VyIDAuMDY3NSAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIxNyAgcG93ZXIgMC42NzYgIDAuNSAtPiAwLjgyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMTggIHBvd2VyIDAuMDY3NiAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIxOSAgcG93ZXIgMC42NzcgIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMjAgIHBvd2VyIDAuMDY3NyAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIyMSAgcG93ZXIgMC42NzggIDAuNSAtPiAwLjgyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMjIgIHBvd2VyIDAuMDY3OCAgMC41IC0+IDAuMjYwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIyMyAgcG93ZXIgMC42NzkgIDAuNSAtPiAwLjgyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMjQgIHBvd2VyIDAuMDY3OSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIyNSAgcG93ZXIgMC42ODEgIDAuNSAtPiAwLjgyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMjYgIHBvd2VyIDAuMDY4MSAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIyNyAgcG93ZXIgMC42ODIgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMjggIHBvd2VyIDAuMDY4MiAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIyOSAgcG93ZXIgMC42ODMgIDAuNSAtPiAwLjgyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMzAgIHBvd2VyIDAuMDY4MyAgMC41IC0+IDAuMjYxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIzMSAgcG93ZXIgMC42ODQgIDAuNSAtPiAwLjgyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMzIgIHBvd2VyIDAuMDY4NCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIzMyAgcG93ZXIgMC42ODUgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMzQgIHBvd2VyIDAuMDY4NSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIzNSAgcG93ZXIgMC42ODYgIDAuNSAtPiAwLjgyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMzYgIHBvd2VyIDAuMDY4NiAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIzNyAgcG93ZXIgMC42ODcgIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyMzggIHBvd2VyIDAuMDY4NyAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDIzOSAgcG93ZXIgMC42ODggIDAuNSAtPiAwLjgyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNDAgIHBvd2VyIDAuMDY4OCAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI0MSAgcG93ZXIgMC42ODkgIDAuNSAtPiAwLjgzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNDIgIHBvd2VyIDAuMDY4OSAgMC41IC0+IDAuMjYyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI0MyAgcG93ZXIgMC42OTEgIDAuNSAtPiAwLjgzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNDQgIHBvd2VyIDAuMDY5MSAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI0NSAgcG93ZXIgMC42OTIgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNDYgIHBvd2VyIDAuMDY5MiAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI0NyAgcG93ZXIgMC42OTMgIDAuNSAtPiAwLjgzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNDggIHBvd2VyIDAuMDY5MyAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI0OSAgcG93ZXIgMC42OTQgIDAuNSAtPiAwLjgzMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNTAgIHBvd2VyIDAuMDY5NCAgMC41IC0+IDAuMjYzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI1MSAgcG93ZXIgMC42OTUgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNTIgIHBvd2VyIDAuMDY5NSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI1MyAgcG93ZXIgMC42OTYgIDAuNSAtPiAwLjgzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNTQgIHBvd2VyIDAuMDY5NiAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI1NSAgcG93ZXIgMC42OTcgIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNTYgIHBvd2VyIDAuMDY5NyAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI1NyAgcG93ZXIgMC42OTggIDAuNSAtPiAwLjgzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNTggIHBvd2VyIDAuMDY5OCAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI1OSAgcG93ZXIgMC42OTkgIDAuNSAtPiAwLjgzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNjAgIHBvd2VyIDAuMDY5OSAgMC41IC0+IDAuMjY0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI2MSAgcG93ZXIgMC43MDEgIDAuNSAtPiAwLjgzNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNjIgIHBvd2VyIDAuMDcwMSAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI2MyAgcG93ZXIgMC43MDIgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNjQgIHBvd2VyIDAuMDcwMiAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI2NSAgcG93ZXIgMC43MDMgIDAuNSAtPiAwLjgzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNjYgIHBvd2VyIDAuMDcwMyAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI2NyAgcG93ZXIgMC43MDQgIDAuNSAtPiAwLjgzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNjggIHBvd2VyIDAuMDcwNCAgMC41IC0+IDAuMjY1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI2OSAgcG93ZXIgMC43MDUgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNzAgIHBvd2VyIDAuMDcwNSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI3MSAgcG93ZXIgMC43MDYgIDAuNSAtPiAwLjg0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNzIgIHBvd2VyIDAuMDcwNiAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI3MyAgcG93ZXIgMC43MDcgIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNzQgIHBvd2VyIDAuMDcwNyAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI3NSAgcG93ZXIgMC43MDggIDAuNSAtPiAwLjg0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNzYgIHBvd2VyIDAuMDcwOCAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI3NyAgcG93ZXIgMC43MDkgIDAuNSAtPiAwLjg0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyNzggIHBvd2VyIDAuMDcwOSAgMC41IC0+IDAuMjY2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI3OSAgcG93ZXIgMC43MTEgIDAuNSAtPiAwLjg0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyODAgIHBvd2VyIDAuMDcxMSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI4MSAgcG93ZXIgMC43MTIgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyODIgIHBvd2VyIDAuMDcxMiAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI4MyAgcG93ZXIgMC43MTMgIDAuNSAtPiAwLjg0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyODQgIHBvd2VyIDAuMDcxMyAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI4NSAgcG93ZXIgMC43MTQgIDAuNSAtPiAwLjg0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyODYgIHBvd2VyIDAuMDcxNCAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI4NyAgcG93ZXIgMC43MTUgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyODggIHBvd2VyIDAuMDcxNSAgMC41IC0+IDAuMjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI4OSAgcG93ZXIgMC43MTYgIDAuNSAtPiAwLjg0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyOTAgIHBvd2VyIDAuMDcxNiAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI5MSAgcG93ZXIgMC43MTcgIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyOTIgIHBvd2VyIDAuMDcxNyAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI5MyAgcG93ZXIgMC43MTggIDAuNSAtPiAwLjg0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyOTQgIHBvd2VyIDAuMDcxOCAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI5NSAgcG93ZXIgMC43MTkgIDAuNSAtPiAwLjg0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyOTYgIHBvd2VyIDAuMDcxOSAgMC41IC0+IDAuMjY4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI5NyAgcG93ZXIgMC43MjEgIDAuNSAtPiAwLjg0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQyOTggIHBvd2VyIDAuMDcyMSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDI5OSAgcG93ZXIgMC43MjIgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMDAgIHBvd2VyIDAuMDcyMiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMwMSAgcG93ZXIgMC43MjMgIDAuNSAtPiAwLjg1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMDIgIHBvd2VyIDAuMDcyMyAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMwMyAgcG93ZXIgMC43MjQgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMDQgIHBvd2VyIDAuMDcyNCAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMwNSAgcG93ZXIgMC43MjUgIDAuNSAtPiAwLjg1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMDYgIHBvd2VyIDAuMDcyNSAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMwNyAgcG93ZXIgMC43MjYgIDAuNSAtPiAwLjg1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMDggIHBvd2VyIDAuMDcyNiAgMC41IC0+IDAuMjY5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMwOSAgcG93ZXIgMC43MjcgIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMTAgIHBvd2VyIDAuMDcyNyAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMxMSAgcG93ZXIgMC43MjggIDAuNSAtPiAwLjg1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMTIgIHBvd2VyIDAuMDcyOCAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMxMyAgcG93ZXIgMC43MjkgIDAuNSAtPiAwLjg1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMTQgIHBvd2VyIDAuMDcyOSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMxNSAgcG93ZXIgMC43MzEgIDAuNSAtPiAwLjg1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMTYgIHBvd2VyIDAuMDczMSAgMC41IC0+IDAuMjcwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMxNyAgcG93ZXIgMC43MzIgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMTggIHBvd2VyIDAuMDczMiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMxOSAgcG93ZXIgMC43MzMgIDAuNSAtPiAwLjg1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMjAgIHBvd2VyIDAuMDczMyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMyMSAgcG93ZXIgMC43MzQgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMjIgIHBvd2VyIDAuMDczNCAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMyMyAgcG93ZXIgMC43MzUgIDAuNSAtPiAwLjg1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMjQgIHBvd2VyIDAuMDczNSAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMyNSAgcG93ZXIgMC43MzYgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMjYgIHBvd2VyIDAuMDczNiAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMyNyAgcG93ZXIgMC43MzcgIDAuNSAtPiAwLjg1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMjggIHBvd2VyIDAuMDczNyAgMC41IC0+IDAuMjcxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMyOSAgcG93ZXIgMC43MzggIDAuNSAtPiAwLjg1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMzAgIHBvd2VyIDAuMDczOCAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMzMSAgcG93ZXIgMC43MzkgIDAuNSAtPiAwLjg2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMzIgIHBvd2VyIDAuMDczOSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMzMyAgcG93ZXIgMC43NDEgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMzQgIHBvd2VyIDAuMDc0MSAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMzNSAgcG93ZXIgMC43NDIgIDAuNSAtPiAwLjg2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMzYgIHBvd2VyIDAuMDc0MiAgMC41IC0+IDAuMjcyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMzNyAgcG93ZXIgMC43NDMgIDAuNSAtPiAwLjg2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzMzggIHBvd2VyIDAuMDc0MyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDMzOSAgcG93ZXIgMC43NDQgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNDAgIHBvd2VyIDAuMDc0NCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM0MSAgcG93ZXIgMC43NDUgIDAuNSAtPiAwLjg2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNDIgIHBvd2VyIDAuMDc0NSAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM0MyAgcG93ZXIgMC43NDYgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNDQgIHBvd2VyIDAuMDc0NiAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM0NSAgcG93ZXIgMC43NDcgIDAuNSAtPiAwLjg2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNDYgIHBvd2VyIDAuMDc0NyAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM0NyAgcG93ZXIgMC43NDggIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNDggIHBvd2VyIDAuMDc0OCAgMC41IC0+IDAuMjczICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM0OSAgcG93ZXIgMC43NDkgIDAuNSAtPiAwLjg2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNTAgIHBvd2VyIDAuMDc0OSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM1MSAgcG93ZXIgMC43NTEgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNTIgIHBvd2VyIDAuMDc1MSAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM1MyAgcG93ZXIgMC43NTIgIDAuNSAtPiAwLjg2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNTQgIHBvd2VyIDAuMDc1MiAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM1NSAgcG93ZXIgMC43NTMgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNTYgIHBvd2VyIDAuMDc1MyAgMC41IC0+IDAuMjc0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM1NyAgcG93ZXIgMC43NTQgIDAuNSAtPiAwLjg2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNTggIHBvd2VyIDAuMDc1NCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM1OSAgcG93ZXIgMC43NTUgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNjAgIHBvd2VyIDAuMDc1NSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM2MSAgcG93ZXIgMC43NTYgIDAuNSAtPiAwLjg2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNjIgIHBvd2VyIDAuMDc1NiAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM2MyAgcG93ZXIgMC43NTcgIDAuNSAtPiAwLjg3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNjQgIHBvd2VyIDAuMDc1NyAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM2NSAgcG93ZXIgMC43NTggIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNjYgIHBvd2VyIDAuMDc1OCAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM2NyAgcG93ZXIgMC43NTkgIDAuNSAtPiAwLjg3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNjggIHBvd2VyIDAuMDc1OSAgMC41IC0+IDAuMjc1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM2OSAgcG93ZXIgMC43NjEgIDAuNSAtPiAwLjg3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNzAgIHBvd2VyIDAuMDc2MSAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM3MSAgcG93ZXIgMC43NjIgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNzIgIHBvd2VyIDAuMDc2MiAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM3MyAgcG93ZXIgMC43NjMgIDAuNSAtPiAwLjg3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNzQgIHBvd2VyIDAuMDc2MyAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM3NSAgcG93ZXIgMC43NjQgIDAuNSAtPiAwLjg3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNzYgIHBvd2VyIDAuMDc2NCAgMC41IC0+IDAuMjc2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM3NyAgcG93ZXIgMC43NjUgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzNzggIHBvd2VyIDAuMDc2NSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM3OSAgcG93ZXIgMC43NjYgIDAuNSAtPiAwLjg3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzODAgIHBvd2VyIDAuMDc2NiAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM4MSAgcG93ZXIgMC43NjcgIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzODIgIHBvd2VyIDAuMDc2NyAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM4MyAgcG93ZXIgMC43NjggIDAuNSAtPiAwLjg3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzODQgIHBvd2VyIDAuMDc2OCAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM4NSAgcG93ZXIgMC43NjkgIDAuNSAtPiAwLjg3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzODYgIHBvd2VyIDAuMDc2OSAgMC41IC0+IDAuMjc3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM4NyAgcG93ZXIgMC43NzEgIDAuNSAtPiAwLjg3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzODggIHBvd2VyIDAuMDc3MSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM4OSAgcG93ZXIgMC43NzIgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzOTAgIHBvd2VyIDAuMDc3MiAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM5MSAgcG93ZXIgMC43NzMgIDAuNSAtPiAwLjg3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzOTIgIHBvd2VyIDAuMDc3MyAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM5MyAgcG93ZXIgMC43NzQgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzOTQgIHBvd2VyIDAuMDc3NCAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM5NSAgcG93ZXIgMC43NzUgIDAuNSAtPiAwLjg4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzOTYgIHBvd2VyIDAuMDc3NSAgMC41IC0+IDAuMjc4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM5NyAgcG93ZXIgMC43NzYgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQzOTggIHBvd2VyIDAuMDc3NiAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDM5OSAgcG93ZXIgMC43NzcgIDAuNSAtPiAwLjg4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MDAgIHBvd2VyIDAuMDc3NyAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQwMSAgcG93ZXIgMC43NzggIDAuNSAtPiAwLjg4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MDIgIHBvd2VyIDAuMDc3OCAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQwMyAgcG93ZXIgMC43NzkgIDAuNSAtPiAwLjg4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MDQgIHBvd2VyIDAuMDc3OSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQwNSAgcG93ZXIgMC43ODEgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MDYgIHBvd2VyIDAuMDc4MSAgMC41IC0+IDAuMjc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQwNyAgcG93ZXIgMC43ODIgIDAuNSAtPiAwLjg4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MDggIHBvd2VyIDAuMDc4MiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQwOSAgcG93ZXIgMC43ODMgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MTAgIHBvd2VyIDAuMDc4MyAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQxMSAgcG93ZXIgMC43ODQgIDAuNSAtPiAwLjg4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MTIgIHBvd2VyIDAuMDc4NCAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQxMyAgcG93ZXIgMC43ODUgIDAuNSAtPiAwLjg4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MTQgIHBvd2VyIDAuMDc4NSAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQxNSAgcG93ZXIgMC43ODYgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MTYgIHBvd2VyIDAuMDc4NiAgMC41IC0+IDAuMjgwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQxNyAgcG93ZXIgMC43ODcgIDAuNSAtPiAwLjg4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MTggIHBvd2VyIDAuMDc4NyAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQxOSAgcG93ZXIgMC43ODggIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MjAgIHBvd2VyIDAuMDc4OCAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQyMSAgcG93ZXIgMC43ODkgIDAuNSAtPiAwLjg4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MjIgIHBvd2VyIDAuMDc4OSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQyMyAgcG93ZXIgMC43OTEgIDAuNSAtPiAwLjg4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MjQgIHBvd2VyIDAuMDc5MSAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQyNSAgcG93ZXIgMC43OTIgIDAuNSAtPiAwLjg5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MjYgIHBvd2VyIDAuMDc5MiAgMC41IC0+IDAuMjgxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQyNyAgcG93ZXIgMC43OTMgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MjggIHBvd2VyIDAuMDc5MyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQyOSAgcG93ZXIgMC43OTQgIDAuNSAtPiAwLjg5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MzAgIHBvd2VyIDAuMDc5NCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQzMSAgcG93ZXIgMC43OTUgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MzIgIHBvd2VyIDAuMDc5NSAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQzMyAgcG93ZXIgMC43OTYgIDAuNSAtPiAwLjg5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MzQgIHBvd2VyIDAuMDc5NiAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQzNSAgcG93ZXIgMC43OTcgIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MzYgIHBvd2VyIDAuMDc5NyAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQzNyAgcG93ZXIgMC43OTggIDAuNSAtPiAwLjg5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0MzggIHBvd2VyIDAuMDc5OCAgMC41IC0+IDAuMjgyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQzOSAgcG93ZXIgMC43OTkgIDAuNSAtPiAwLjg5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NDAgIHBvd2VyIDAuMDc5OSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ0MSAgcG93ZXIgMC44MDEgIDAuNSAtPiAwLjg5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NDIgIHBvd2VyIDAuMDgwMSAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ0MyAgcG93ZXIgMC44MDIgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NDQgIHBvd2VyIDAuMDgwMiAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ0NSAgcG93ZXIgMC44MDMgIDAuNSAtPiAwLjg5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NDYgIHBvd2VyIDAuMDgwMyAgMC41IC0+IDAuMjgzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ0NyAgcG93ZXIgMC44MDQgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NDggIHBvd2VyIDAuMDgwNCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ0OSAgcG93ZXIgMC44MDUgIDAuNSAtPiAwLjg5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NTAgIHBvd2VyIDAuMDgwNSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ1MSAgcG93ZXIgMC44MDYgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NTIgIHBvd2VyIDAuMDgwNiAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ1MyAgcG93ZXIgMC44MDcgIDAuNSAtPiAwLjg5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NTQgIHBvd2VyIDAuMDgwNyAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ1NSAgcG93ZXIgMC44MDggIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NTYgIHBvd2VyIDAuMDgwOCAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ1NyAgcG93ZXIgMC44MDkgIDAuNSAtPiAwLjg5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NTggIHBvd2VyIDAuMDgwOSAgMC41IC0+IDAuMjg0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ1OSAgcG93ZXIgMC44MTEgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NjAgIHBvd2VyIDAuMDgxMSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ2MSAgcG93ZXIgMC44MTIgIDAuNSAtPiAwLjkwMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NjIgIHBvd2VyIDAuMDgxMiAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ2MyAgcG93ZXIgMC44MTMgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NjQgIHBvd2VyIDAuMDgxMyAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ2NSAgcG93ZXIgMC44MTQgIDAuNSAtPiAwLjkwMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NjYgIHBvd2VyIDAuMDgxNCAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ2NyAgcG93ZXIgMC44MTUgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NjggIHBvd2VyIDAuMDgxNSAgMC41IC0+IDAuMjg1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ2OSAgcG93ZXIgMC44MTYgIDAuNSAtPiAwLjkwMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NzAgIHBvd2VyIDAuMDgxNiAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ3MSAgcG93ZXIgMC44MTcgIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NzIgIHBvd2VyIDAuMDgxNyAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ3MyAgcG93ZXIgMC44MTggIDAuNSAtPiAwLjkwNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NzQgIHBvd2VyIDAuMDgxOCAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ3NSAgcG93ZXIgMC44MTkgIDAuNSAtPiAwLjkwNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NzYgIHBvd2VyIDAuMDgxOSAgMC41IC0+IDAuMjg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ3NyAgcG93ZXIgMC44MjEgIDAuNSAtPiAwLjkwNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0NzggIHBvd2VyIDAuMDgyMSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ3OSAgcG93ZXIgMC44MjIgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0ODAgIHBvd2VyIDAuMDgyMiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ4MSAgcG93ZXIgMC44MjMgIDAuNSAtPiAwLjkwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0ODIgIHBvd2VyIDAuMDgyMyAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ4MyAgcG93ZXIgMC44MjQgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0ODQgIHBvd2VyIDAuMDgyNCAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ4NSAgcG93ZXIgMC44MjUgIDAuNSAtPiAwLjkwOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0ODYgIHBvd2VyIDAuMDgyNSAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ4NyAgcG93ZXIgMC44MjYgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0ODggIHBvd2VyIDAuMDgyNiAgMC41IC0+IDAuMjg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ4OSAgcG93ZXIgMC44MjcgIDAuNSAtPiAwLjkwOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0OTAgIHBvd2VyIDAuMDgyNyAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ5MSAgcG93ZXIgMC44MjggIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0OTIgIHBvd2VyIDAuMDgyOCAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ5MyAgcG93ZXIgMC44MjkgIDAuNSAtPiAwLjkxMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0OTQgIHBvd2VyIDAuMDgyOSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ5NSAgcG93ZXIgMC44MzEgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0OTYgIHBvd2VyIDAuMDgzMSAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ5NyAgcG93ZXIgMC44MzIgIDAuNSAtPiAwLjkxMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ0OTggIHBvd2VyIDAuMDgzMiAgMC41IC0+IDAuMjg4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDQ5OSAgcG93ZXIgMC44MzMgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MDAgIHBvd2VyIDAuMDgzMyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUwMSAgcG93ZXIgMC44MzQgIDAuNSAtPiAwLjkxMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MDIgIHBvd2VyIDAuMDgzNCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUwMyAgcG93ZXIgMC44MzUgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MDQgIHBvd2VyIDAuMDgzNSAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUwNSAgcG93ZXIgMC44MzYgIDAuNSAtPiAwLjkxNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MDYgIHBvd2VyIDAuMDgzNiAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUwNyAgcG93ZXIgMC44MzcgIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MDggIHBvd2VyIDAuMDgzNyAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUwOSAgcG93ZXIgMC44MzggIDAuNSAtPiAwLjkxNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MTAgIHBvd2VyIDAuMDgzOCAgMC41IC0+IDAuMjg5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUxMSAgcG93ZXIgMC44MzkgIDAuNSAtPiAwLjkxNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MTIgIHBvd2VyIDAuMDgzOSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUxMyAgcG93ZXIgMC44NDEgIDAuNSAtPiAwLjkxNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MTQgIHBvd2VyIDAuMDg0MSAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUxNSAgcG93ZXIgMC44NDIgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MTYgIHBvd2VyIDAuMDg0MiAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUxNyAgcG93ZXIgMC44NDMgIDAuNSAtPiAwLjkxOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MTggIHBvd2VyIDAuMDg0MyAgMC41IC0+IDAuMjkwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUxOSAgcG93ZXIgMC44NDQgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MjAgIHBvd2VyIDAuMDg0NCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUyMSAgcG93ZXIgMC44NDUgIDAuNSAtPiAwLjkxOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MjIgIHBvd2VyIDAuMDg0NSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUyMyAgcG93ZXIgMC44NDYgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MjQgIHBvd2VyIDAuMDg0NiAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUyNSAgcG93ZXIgMC44NDcgIDAuNSAtPiAwLjkyMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MjYgIHBvd2VyIDAuMDg0NyAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUyNyAgcG93ZXIgMC44NDggIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MjggIHBvd2VyIDAuMDg0OCAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUyOSAgcG93ZXIgMC44NDkgIDAuNSAtPiAwLjkyMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MzAgIHBvd2VyIDAuMDg0OSAgMC41IC0+IDAuMjkxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUzMSAgcG93ZXIgMC44NTEgIDAuNSAtPiAwLjkyMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MzIgIHBvd2VyIDAuMDg1MSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUzMyAgcG93ZXIgMC44NTIgIDAuNSAtPiAwLjkyMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MzQgIHBvd2VyIDAuMDg1MiAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUzNSAgcG93ZXIgMC44NTMgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MzYgIHBvd2VyIDAuMDg1MyAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUzNyAgcG93ZXIgMC44NTQgIDAuNSAtPiAwLjkyNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1MzggIHBvd2VyIDAuMDg1NCAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDUzOSAgcG93ZXIgMC44NTUgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NDAgIHBvd2VyIDAuMDg1NSAgMC41IC0+IDAuMjkyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU0MSAgcG93ZXIgMC44NTYgIDAuNSAtPiAwLjkyNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NDIgIHBvd2VyIDAuMDg1NiAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU0MyAgcG93ZXIgMC44NTcgIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NDQgIHBvd2VyIDAuMDg1NyAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU0NSAgcG93ZXIgMC44NTggIDAuNSAtPiAwLjkyNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NDYgIHBvd2VyIDAuMDg1OCAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU0NyAgcG93ZXIgMC44NTkgIDAuNSAtPiAwLjkyNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NDggIHBvd2VyIDAuMDg1OSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU0OSAgcG93ZXIgMC44NjEgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NTAgIHBvd2VyIDAuMDg2MSAgMC41IC0+IDAuMjkzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU1MSAgcG93ZXIgMC44NjIgIDAuNSAtPiAwLjkyOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NTIgIHBvd2VyIDAuMDg2MiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU1MyAgcG93ZXIgMC44NjMgIDAuNSAtPiAwLjkyOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NTQgIHBvd2VyIDAuMDg2MyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU1NSAgcG93ZXIgMC44NjQgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NTYgIHBvd2VyIDAuMDg2NCAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU1NyAgcG93ZXIgMC44NjUgIDAuNSAtPiAwLjkzMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NTggIHBvd2VyIDAuMDg2NSAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU1OSAgcG93ZXIgMC44NjYgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NjAgIHBvd2VyIDAuMDg2NiAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU2MSAgcG93ZXIgMC44NjcgIDAuNSAtPiAwLjkzMSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NjIgIHBvd2VyIDAuMDg2NyAgMC41IC0+IDAuMjk0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU2MyAgcG93ZXIgMC44NjggIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NjQgIHBvd2VyIDAuMDg2OCAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU2NSAgcG93ZXIgMC44NjkgIDAuNSAtPiAwLjkzMiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NjYgIHBvd2VyIDAuMDg2OSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU2NyAgcG93ZXIgMC44NzEgIDAuNSAtPiAwLjkzMyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NjggIHBvd2VyIDAuMDg3MSAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU2OSAgcG93ZXIgMC44NzIgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NzAgIHBvd2VyIDAuMDg3MiAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU3MSAgcG93ZXIgMC44NzMgIDAuNSAtPiAwLjkzNCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NzIgIHBvd2VyIDAuMDg3MyAgMC41IC0+IDAuMjk1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU3MyAgcG93ZXIgMC44NzQgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NzQgIHBvd2VyIDAuMDg3NCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU3NSAgcG93ZXIgMC44NzUgIDAuNSAtPiAwLjkzNSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NzYgIHBvd2VyIDAuMDg3NSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU3NyAgcG93ZXIgMC44NzYgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1NzggIHBvd2VyIDAuMDg3NiAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU3OSAgcG93ZXIgMC44NzcgIDAuNSAtPiAwLjkzNiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1ODAgIHBvd2VyIDAuMDg3NyAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU4MSAgcG93ZXIgMC44NzggIDAuNSAtPiAwLjkzNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1ODIgIHBvd2VyIDAuMDg3OCAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU4MyAgcG93ZXIgMC44NzkgIDAuNSAtPiAwLjkzOCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1ODQgIHBvd2VyIDAuMDg3OSAgMC41IC0+IDAuMjk2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU4NSAgcG93ZXIgMC44ODEgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1ODYgIHBvd2VyIDAuMDg4MSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU4NyAgcG93ZXIgMC44ODIgIDAuNSAtPiAwLjkzOSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1ODggIHBvd2VyIDAuMDg4MiAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU4OSAgcG93ZXIgMC44ODMgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1OTAgIHBvd2VyIDAuMDg4MyAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU5MSAgcG93ZXIgMC44ODQgIDAuNSAtPiAwLjk0MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1OTIgIHBvd2VyIDAuMDg4NCAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU5MyAgcG93ZXIgMC44ODUgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1OTQgIHBvd2VyIDAuMDg4NSAgMC41IC0+IDAuMjk3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU5NSAgcG93ZXIgMC44ODYgIDAuNSAtPiAwLjk0MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1OTYgIHBvd2VyIDAuMDg4NiAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU5NyAgcG93ZXIgMC44ODcgIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ1OTggIHBvd2VyIDAuMDg4NyAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDU5OSAgcG93ZXIgMC44ODggIDAuNSAtPiAwLjk0MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MDAgIHBvd2VyIDAuMDg4OCAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYwMSAgcG93ZXIgMC44ODkgIDAuNSAtPiAwLjk0MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MDIgIHBvd2VyIDAuMDg4OSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYwMyAgcG93ZXIgMC44OTEgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MDQgIHBvd2VyIDAuMDg5MSAgMC41IC0+IDAuMjk4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYwNSAgcG93ZXIgMC44OTIgIDAuNSAtPiAwLjk0NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MDYgIHBvd2VyIDAuMDg5MiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYwNyAgcG93ZXIgMC44OTMgIDAuNSAtPiAwLjk0NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MDggIHBvd2VyIDAuMDg5MyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYwOSAgcG93ZXIgMC44OTQgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MTAgIHBvd2VyIDAuMDg5NCAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYxMSAgcG93ZXIgMC44OTUgIDAuNSAtPiAwLjk0NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MTIgIHBvd2VyIDAuMDg5NSAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYxMyAgcG93ZXIgMC44OTYgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MTQgIHBvd2VyIDAuMDg5NiAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYxNSAgcG93ZXIgMC44OTcgIDAuNSAtPiAwLjk0NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MTYgIHBvd2VyIDAuMDg5NyAgMC41IC0+IDAuMjk5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYxNyAgcG93ZXIgMC44OTggIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MTggIHBvd2VyIDAuMDg5OCAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYxOSAgcG93ZXIgMC44OTkgIDAuNSAtPiAwLjk0OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MjAgIHBvd2VyIDAuMDg5OSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYyMSAgcG93ZXIgMC45MDEgIDAuNSAtPiAwLjk0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MjIgIHBvd2VyIDAuMDkwMSAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYyMyAgcG93ZXIgMC45MDIgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MjQgIHBvd2VyIDAuMDkwMiAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYyNSAgcG93ZXIgMC45MDMgIDAuNSAtPiAwLjk1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MjYgIHBvd2VyIDAuMDkwMyAgMC41IC0+IDAuMzAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYyNyAgcG93ZXIgMC45MDQgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MjggIHBvd2VyIDAuMDkwNCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYyOSAgcG93ZXIgMC45MDUgIDAuNSAtPiAwLjk1MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MzAgIHBvd2VyIDAuMDkwNSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYzMSAgcG93ZXIgMC45MDYgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MzIgIHBvd2VyIDAuMDkwNiAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYzMyAgcG93ZXIgMC45MDcgIDAuNSAtPiAwLjk1MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MzQgIHBvd2VyIDAuMDkwNyAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYzNSAgcG93ZXIgMC45MDggIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MzYgIHBvd2VyIDAuMDkwOCAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYzNyAgcG93ZXIgMC45MDkgIDAuNSAtPiAwLjk1MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2MzggIHBvd2VyIDAuMDkwOSAgMC41IC0+IDAuMzAxICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDYzOSAgcG93ZXIgMC45MTEgIDAuNSAtPiAwLjk1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NDAgIHBvd2VyIDAuMDkxMSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY0MSAgcG93ZXIgMC45MTIgIDAuNSAtPiAwLjk1NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NDIgIHBvd2VyIDAuMDkxMiAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY0MyAgcG93ZXIgMC45MTMgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NDQgIHBvd2VyIDAuMDkxMyAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY0NSAgcG93ZXIgMC45MTQgIDAuNSAtPiAwLjk1NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NDYgIHBvd2VyIDAuMDkxNCAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY0NyAgcG93ZXIgMC45MTUgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NDggIHBvd2VyIDAuMDkxNSAgMC41IC0+IDAuMzAyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY0OSAgcG93ZXIgMC45MTYgIDAuNSAtPiAwLjk1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NTAgIHBvd2VyIDAuMDkxNiAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY1MSAgcG93ZXIgMC45MTcgIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NTIgIHBvd2VyIDAuMDkxNyAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY1MyAgcG93ZXIgMC45MTggIDAuNSAtPiAwLjk1OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NTQgIHBvd2VyIDAuMDkxOCAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY1NSAgcG93ZXIgMC45MTkgIDAuNSAtPiAwLjk1OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NTYgIHBvd2VyIDAuMDkxOSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY1NyAgcG93ZXIgMC45MjEgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NTggIHBvd2VyIDAuMDkyMSAgMC41IC0+IDAuMzAzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY1OSAgcG93ZXIgMC45MjIgIDAuNSAtPiAwLjk2MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NjAgIHBvd2VyIDAuMDkyMiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY2MSAgcG93ZXIgMC45MjMgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NjIgIHBvd2VyIDAuMDkyMyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY2MyAgcG93ZXIgMC45MjQgIDAuNSAtPiAwLjk2MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NjQgIHBvd2VyIDAuMDkyNCAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY2NSAgcG93ZXIgMC45MjUgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NjYgIHBvd2VyIDAuMDkyNSAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY2NyAgcG93ZXIgMC45MjYgIDAuNSAtPiAwLjk2MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NjggIHBvd2VyIDAuMDkyNiAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY2OSAgcG93ZXIgMC45MjcgIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NzAgIHBvd2VyIDAuMDkyNyAgMC41IC0+IDAuMzA0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY3MSAgcG93ZXIgMC45MjggIDAuNSAtPiAwLjk2MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NzIgIHBvd2VyIDAuMDkyOCAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY3MyAgcG93ZXIgMC45MjkgIDAuNSAtPiAwLjk2NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NzQgIHBvd2VyIDAuMDkyOSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY3NSAgcG93ZXIgMC45MzEgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NzYgIHBvd2VyIDAuMDkzMSAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY3NyAgcG93ZXIgMC45MzIgIDAuNSAtPiAwLjk2NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2NzggIHBvd2VyIDAuMDkzMiAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY3OSAgcG93ZXIgMC45MzMgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2ODAgIHBvd2VyIDAuMDkzMyAgMC41IC0+IDAuMzA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY4MSAgcG93ZXIgMC45MzQgIDAuNSAtPiAwLjk2NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2ODIgIHBvd2VyIDAuMDkzNCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY4MyAgcG93ZXIgMC45MzUgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2ODQgIHBvd2VyIDAuMDkzNSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY4NSAgcG93ZXIgMC45MzYgIDAuNSAtPiAwLjk2NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2ODYgIHBvd2VyIDAuMDkzNiAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY4NyAgcG93ZXIgMC45MzcgIDAuNSAtPiAwLjk2OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2ODggIHBvd2VyIDAuMDkzNyAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY4OSAgcG93ZXIgMC45MzggIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2OTAgIHBvd2VyIDAuMDkzOCAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY5MSAgcG93ZXIgMC45MzkgIDAuNSAtPiAwLjk2OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2OTIgIHBvd2VyIDAuMDkzOSAgMC41IC0+IDAuMzA2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY5MyAgcG93ZXIgMC45NDEgIDAuNSAtPiAwLjk3MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2OTQgIHBvd2VyIDAuMDk0MSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY5NSAgcG93ZXIgMC45NDIgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2OTYgIHBvd2VyIDAuMDk0MiAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY5NyAgcG93ZXIgMC45NDMgIDAuNSAtPiAwLjk3MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ2OTggIHBvd2VyIDAuMDk0MyAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDY5OSAgcG93ZXIgMC45NDQgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MDAgIHBvd2VyIDAuMDk0NCAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcwMSAgcG93ZXIgMC45NDUgIDAuNSAtPiAwLjk3MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MDIgIHBvd2VyIDAuMDk0NSAgMC41IC0+IDAuMzA3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcwMyAgcG93ZXIgMC45NDYgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MDQgIHBvd2VyIDAuMDk0NiAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcwNSAgcG93ZXIgMC45NDcgIDAuNSAtPiAwLjk3MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MDYgIHBvd2VyIDAuMDk0NyAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcwNyAgcG93ZXIgMC45NDggIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MDggIHBvd2VyIDAuMDk0OCAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcwOSAgcG93ZXIgMC45NDkgIDAuNSAtPiAwLjk3NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MTAgIHBvd2VyIDAuMDk0OSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcxMSAgcG93ZXIgMC45NTEgIDAuNSAtPiAwLjk3NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MTIgIHBvd2VyIDAuMDk1MSAgMC41IC0+IDAuMzA4ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcxMyAgcG93ZXIgMC45NTIgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MTQgIHBvd2VyIDAuMDk1MiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcxNSAgcG93ZXIgMC45NTMgIDAuNSAtPiAwLjk3NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MTYgIHBvd2VyIDAuMDk1MyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcxNyAgcG93ZXIgMC45NTQgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MTggIHBvd2VyIDAuMDk1NCAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcxOSAgcG93ZXIgMC45NTUgIDAuNSAtPiAwLjk3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MjAgIHBvd2VyIDAuMDk1NSAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcyMSAgcG93ZXIgMC45NTYgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MjIgIHBvd2VyIDAuMDk1NiAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcyMyAgcG93ZXIgMC45NTcgIDAuNSAtPiAwLjk3OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MjQgIHBvd2VyIDAuMDk1NyAgMC41IC0+IDAuMzA5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcyNSAgcG93ZXIgMC45NTggIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MjYgIHBvd2VyIDAuMDk1OCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcyNyAgcG93ZXIgMC45NTkgIDAuNSAtPiAwLjk3OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MjggIHBvd2VyIDAuMDk1OSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDcyOSAgcG93ZXIgMC45NjEgIDAuNSAtPiAwLjk4MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MzAgIHBvd2VyIDAuMDk2MSAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDczMSAgcG93ZXIgMC45NjIgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MzIgIHBvd2VyIDAuMDk2MiAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDczMyAgcG93ZXIgMC45NjMgIDAuNSAtPiAwLjk4MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MzQgIHBvd2VyIDAuMDk2MyAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDczNSAgcG93ZXIgMC45NjQgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MzYgIHBvd2VyIDAuMDk2NCAgMC41IC0+IDAuMzEwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDczNyAgcG93ZXIgMC45NjUgIDAuNSAtPiAwLjk4MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3MzggIHBvd2VyIDAuMDk2NSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDczOSAgcG93ZXIgMC45NjYgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NDAgIHBvd2VyIDAuMDk2NiAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc0MSAgcG93ZXIgMC45NjcgIDAuNSAtPiAwLjk4MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NDIgIHBvd2VyIDAuMDk2NyAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc0MyAgcG93ZXIgMC45NjggIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NDQgIHBvd2VyIDAuMDk2OCAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc0NSAgcG93ZXIgMC45NjkgIDAuNSAtPiAwLjk4NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NDYgIHBvd2VyIDAuMDk2OSAgMC41IC0+IDAuMzExICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc0NyAgcG93ZXIgMC45NzEgIDAuNSAtPiAwLjk4NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NDggIHBvd2VyIDAuMDk3MSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc0OSAgcG93ZXIgMC45NzIgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NTAgIHBvd2VyIDAuMDk3MiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc1MSAgcG93ZXIgMC45NzMgIDAuNSAtPiAwLjk4NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NTIgIHBvd2VyIDAuMDk3MyAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc1MyAgcG93ZXIgMC45NzQgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NTQgIHBvd2VyIDAuMDk3NCAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc1NSAgcG93ZXIgMC45NzUgIDAuNSAtPiAwLjk4NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NTYgIHBvd2VyIDAuMDk3NSAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc1NyAgcG93ZXIgMC45NzYgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NTggIHBvd2VyIDAuMDk3NiAgMC41IC0+IDAuMzEyICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc1OSAgcG93ZXIgMC45NzcgIDAuNSAtPiAwLjk4OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NjAgIHBvd2VyIDAuMDk3NyAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc2MSAgcG93ZXIgMC45NzggIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NjIgIHBvd2VyIDAuMDk3OCAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc2MyAgcG93ZXIgMC45NzkgIDAuNSAtPiAwLjk4OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NjQgIHBvd2VyIDAuMDk3OSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc2NSAgcG93ZXIgMC45ODEgIDAuNSAtPiAwLjk5MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NjYgIHBvd2VyIDAuMDk4MSAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc2NyAgcG93ZXIgMC45ODIgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NjggIHBvd2VyIDAuMDk4MiAgMC41IC0+IDAuMzEzICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc2OSAgcG93ZXIgMC45ODMgIDAuNSAtPiAwLjk5MSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NzAgIHBvd2VyIDAuMDk4MyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc3MSAgcG93ZXIgMC45ODQgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NzIgIHBvd2VyIDAuMDk4NCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc3MyAgcG93ZXIgMC45ODUgIDAuNSAtPiAwLjk5MiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NzQgIHBvd2VyIDAuMDk4NSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc3NSAgcG93ZXIgMC45ODYgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NzYgIHBvd2VyIDAuMDk4NiAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc3NyAgcG93ZXIgMC45ODcgIDAuNSAtPiAwLjk5MyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3NzggIHBvd2VyIDAuMDk4NyAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc3OSAgcG93ZXIgMC45ODggIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3ODAgIHBvd2VyIDAuMDk4OCAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc4MSAgcG93ZXIgMC45ODkgIDAuNSAtPiAwLjk5NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3ODIgIHBvd2VyIDAuMDk4OSAgMC41IC0+IDAuMzE0ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc4MyAgcG93ZXIgMC45OTEgIDAuNSAtPiAwLjk5NSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3ODQgIHBvd2VyIDAuMDk5MSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc4NSAgcG93ZXIgMC45OTIgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3ODYgIHBvd2VyIDAuMDk5MiAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc4NyAgcG93ZXIgMC45OTMgIDAuNSAtPiAwLjk5NiAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3ODggIHBvd2VyIDAuMDk5MyAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc4OSAgcG93ZXIgMC45OTQgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3OTAgIHBvd2VyIDAuMDk5NCAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc5MSAgcG93ZXIgMC45OTUgIDAuNSAtPiAwLjk5NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3OTIgIHBvd2VyIDAuMDk5NSAgMC41IC0+IDAuMzE1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc5MyAgcG93ZXIgMC45OTYgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3OTQgIHBvd2VyIDAuMDk5NiAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc5NSAgcG93ZXIgMC45OTcgIDAuNSAtPiAwLjk5OCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3OTYgIHBvd2VyIDAuMDk5NyAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc5NyAgcG93ZXIgMC45OTggIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ3OTggIHBvd2VyIDAuMDk5OCAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NDc5OSAgcG93ZXIgMC45OTkgIDAuNSAtPiAwLjk5OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDQ4MDAgIHBvd2VyIDAuMDk5OSAgMC41IC0+IDAuMzE2ICBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBBIGdyb3VwIG9mIHByZWNpc2lvbiA0IHRlc3RzIHdoZXJlIEh1bGwgJiBBYnJoYW0gYWRqdXN0bWVudHMgYXJlDQorLS0gbmVlZGVkIGluIHNvbWUgY2FzZXMgKGJvdGggdXAgYW5kIGRvd24pIFtzZWUgSHVsbDE5ODViXQ0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCittYXhFeHBvbmVudDogOTk5DQorbWluZXhwb25lbnQ6IC05OTkNCitwcmVjaXNpb246ICAgNA0KK3B3c3g1MDAxICBwb3dlciAwLjAxMTggICAwLjUgLT4gMC4xMDg2ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAwMiAgcG93ZXIgMC4xMTkgICAgMC41IC0+IDAuMzQ1MCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDUwMDMgIHBvd2VyIDAuMDExOSAgIDAuNSAtPiAwLjEwOTEgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g1MDA0ICBwb3dlciAwLjEyMSAgICAwLjUgLT4gMC4zNDc5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAwNSAgcG93ZXIgMC4wMTIxICAgMC41IC0+IDAuMTEwMCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDUwMDYgIHBvd2VyIDAuMTIyICAgIDAuNSAtPiAwLjM0OTMgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g1MDA3ICBwb3dlciAwLjAxMjIgICAwLjUgLT4gMC4xMTA1ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAwOCAgcG93ZXIgMC4xMjMgICAgMC41IC0+IDAuMzUwNyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDUwMDkgIHBvd2VyIDAuNDk0ICAgIDAuNSAtPiAwLjcwMjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g1MDEwICBwb3dlciAwLjA2NjkgICAwLjUgLT4gMC4yNTg3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAxMSAgcG93ZXIgMC45NTU4ICAgMC41IC0+IDAuOTc3NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDUwMTIgIHBvd2VyIDAuOTM0OCAgIDAuNSAtPiAwLjk2NjkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g1MDEzICBwb3dlciAwLjkzNDUgICAwLjUgLT4gMC45NjY3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAxNCAgcG93ZXIgMC4wOTM0NSAgMC41IC0+IDAuMzA1NyAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDUwMTUgIHBvd2VyIDAuOTM0NiAgIDAuNSAtPiAwLjk2NjcgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g1MDE2ICBwb3dlciAwLjA5MzQ2ICAwLjUgLT4gMC4zMDU3ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NTAxNyAgcG93ZXIgMC45MzQ3ICAgMC41IC0+IDAuOTY2OCAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gZXhhbXBsZXMgZnJvbSBkZWNBcml0aA0KK3ByZWNpc2lvbjogOQ0KK3B3c3g3MDAgIHBvd2VyICAwICAgICAgICAwLjUgLT4gJzAnDQorcHdzeDcwMSAgcG93ZXIgIC0wICAgICAgIDAuNSAtPiAnMCcNCitwd3N4NzAyICBwb3dlciAgMC4zOSAgICAgMC41IC0+IDAuNjI0NDk5ODAwICAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MDMgIHBvd2VyICAxMDAgICAgICAwLjUgLT4gJzEwLjAwMDAwMDAnICAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDcwNCAgcG93ZXIgIDEuMDAgICAgIDAuNSAtPiAnMS4wMDAwMDAwMCcgICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzA1ICBwb3dlciAgNyAgICAgICAgMC41IC0+ICcyLjY0NTc1MTMxJyAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MDYgIHBvd2VyICAxMCAgICAgICAwLjUgLT4gMy4xNjIyNzc2NiAgICAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gc29tZSBvbmUtb2Zmcw0KK3ByZWNpc2lvbjogOQ0KK3B3c3g3MTEgIHBvd2VyICAwLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYgICAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDcxMiAgcG93ZXIgIDAuMiAgICAgIDAuNSAtPiAwLjQ0NzIxMzU5NSAgICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzEzICBwb3dlciAgMC4zICAgICAgMC41IC0+IDAuNTQ3NzIyNTU4ICAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MTQgIHBvd2VyICAwLjQgICAgICAwLjUgLT4gMC42MzI0NTU1MzIgICAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDcxNSAgcG93ZXIgIDAuNSAgICAgIDAuNSAtPiAwLjcwNzEwNjc4MSAgICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzE2ICBwb3dlciAgMC42ICAgICAgMC41IC0+IDAuNzc0NTk2NjY5ICAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MTcgIHBvd2VyICAwLjcgICAgICAwLjUgLT4gMC44MzY2NjAwMjcgICAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDcxOCAgcG93ZXIgIDAuOCAgICAgIDAuNSAtPiAwLjg5NDQyNzE5MSAgICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzE5ICBwb3dlciAgMC45ICAgICAgMC41IC0+IDAuOTQ4NjgzMjk4ICAgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTAgICAgICAgICAgICAgICAtLSBub3RlIG5vIG5vcm1hbGl6YXRvaW4gaGVyZQ0KK3B3c3g3MjAgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwICAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMQ0KK3B3c3g3MjEgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMiAgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiAxMg0KK3B3c3g3MjIgIHBvd2VyICswLjEgICAgICAwLjUgLT4gMC4zMTYyMjc3NjYwMTcgSW5leGFjdCBSb3VuZGVkDQorcHJlY2lzaW9uOiA5DQorcHdzeDcyMyAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTgwMCAgICBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDE1DQorcHdzeDcyNCAgcG93ZXIgIDAuMzkgICAgIDAuNSAtPiAwLjYyNDQ5OTc5OTgzOTg0MCBJbmV4YWN0IFJvdW5kZWQNCisNCistLSBkaXNjdXNzaW9uIGNhc2VzDQorcHJlY2lzaW9uOiA3DQorcHdzeDczMSAgcG93ZXIgICAgIDkgICAgMC41IC0+IDMuMDAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzMyICBwb3dlciAgIDEwMCAgICAwLjUgLT4gMTAuMDAwMDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MzMgIHBvd2VyICAgMTIzICAgIDAuNSAtPiAxMS4wOTA1NCAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDczNCAgcG93ZXIgICAxNDQgICAgMC41IC0+IDEyLjAwMDAwICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzM1ICBwb3dlciAgIDE1NiAgICAwLjUgLT4gMTIuNDkwMDAgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3MzYgIHBvd2VyIDEwMDAwICAgIDAuNSAtPiAxMDAuMDAwMCAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gdmFsdWVzIGNsb3NlIHRvIG92ZXJmbG93IChpZiB0aGVyZSB3ZXJlIGlucHV0IHJvdW5kaW5nKQ0KK21heGV4cG9uZW50OiA5OQ0KK21pbmV4cG9uZW50OiAtOTkNCitwcmVjaXNpb246IDUNCitwd3N4NzYwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4RSs0OSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzYxICBwb3dlciAgOS45OTk4RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzYyICBwb3dlciAgOS45OTk5RSs5OSAgICAwLjUgLT4gOS45OTk5RSs0OSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzYzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzY0ICBwb3dlciAgOS45OTk5NEUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzY1ICBwb3dlciAgOS45OTk5NUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzY2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gMS4wMDAwRSs1MCBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDkNCitwd3N4NzcwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gOS45OTk4NTAwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3NzEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiA5Ljk5OTkwMDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDc3MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+IDkuOTk5OTUwMDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzczICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gOS45OTk5NTUwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3NzQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiA5Ljk5OTk3MDAwRSs0OSAgSW5leGFjdCBSb3VuZGVkDQorcHdzeDc3NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+IDkuOTk5OTc1MDBFKzQ5ICBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Nzc2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gOS45OTk5OTUwMEUrNDkgIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMjANCitwd3N4NzgwICBwb3dlciAgOS45OTk3RSs5OSAgICAwLjUgLT4gJzkuOTk5ODQ5OTk4ODc0OTgzMTI0N0UrNDknIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3ODEgIHBvd2VyICA5Ljk5OThFKzk5ICAgIDAuNSAtPiAnOS45OTk4OTk5OTk0OTk5OTQ5OTk5RSs0OScgSW5leGFjdCBSb3VuZGVkDQorcHdzeDc4MiAgcG93ZXIgIDkuOTk5OUUrOTkgICAgMC41IC0+ICc5Ljk5OTk0OTk5OTg3NDk5OTM3NTBFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCitwd3N4NzgzICBwb3dlciAgOS45OTk5MUUrOTkgICAwLjUgLT4gJzkuOTk5OTU0OTk5ODk4NzQ5NTQ0NEUrNDknIEluZXhhY3QgUm91bmRlZA0KK3B3c3g3ODQgIHBvd2VyICA5Ljk5OTk0RSs5OSAgIDAuNSAtPiAnOS45OTk5Njk5OTk5NTQ5OTk4NjUwRSs0OScgSW5leGFjdCBSb3VuZGVkDQorcHdzeDc4NSAgcG93ZXIgIDkuOTk5OTVFKzk5ICAgMC41IC0+ICc5Ljk5OTk3NDk5OTk2ODc0OTkyMTlFKzQ5JyBJbmV4YWN0IFJvdW5kZWQNCitwd3N4Nzg2ICBwb3dlciAgOS45OTk5OUUrOTkgICAwLjUgLT4gJzkuOTk5OTk0OTk5OTk4NzQ5OTk5NEUrNDknIEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIHN1Ym5vcm1hbHMgYW5kIHVuZGVyZmxvd3MgW3RoZXNlIGNhbiBvbmx5IHJlc3VsdCB3aGVuIGVNYXggaXMgPCBkaWdpdHMrMV0NCistLSBFdGlueSA9IC0oRW1heCArIChwcmVjaXNpb24tMSkpDQorLS0gc3RhcnQgd2l0aCBzdWJub3JtYWwgb3BlcmFuZHMgYW5kIG5vcm1hbCByZXN1bHRzDQorbWF4ZXhwb25lbnQ6IDkNCittaW5leHBvbmVudDogLTkNCitwcmVjaXNpb246IDkgICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE3DQorcHdzeDgwMCAgcG93ZXIgIDFFLTE3ICAgIDAuNSAtPiAzLjE2MjI3NzY2RS05IEluZXhhY3QgUm91bmRlZA0KK3B3c3g4MDEgIHBvd2VyIDEwRS0xNyAgICAwLjUgLT4gMS4wMDAwMDAwMEUtOCBJbmV4YWN0IFJvdW5kZWQNCitwcmVjaXNpb246IDEwICAgICAgICAgICAgICAgLS0gRXRpbnk9LTE4DQorcHdzeDgwMiAgcG93ZXIgMTBFLTE4ICAgIDAuNSAtPiAzLjE2MjI3NzY2MEUtOSBJbmV4YWN0IFJvdW5kZWQNCitwd3N4ODAzICBwb3dlciAgMUUtMTggICAgMC41IC0+IDEuMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZA0KKw0KK3ByZWNpc2lvbjogMTEgICAgICAgICAgICAgICAtLSBFdGlueT0tMTkNCitwd3N4ODA0ICBwb3dlciAgMUUtMTkgICAgMC41IC0+IDMuMTYyMjc3NjYwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KKy0tIFRoZSBuZXh0IHRlc3Qgc2hvdWxkIGJlIHNraXBwZWQgZm9yIGRlY051bWJlcg0KK3B3c3g4MDUgIHBvd2VyIDEwRS0xOSAgICAwLjUgLT4gMS4wMDAwMDAwMDAwRS05IEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTIgICAgICAgICAgICAgICAtLSBFdGlueT0tMjANCitwd3N4ODA2ICBwb3dlciAxMEUtMjAgICAgMC41IC0+IDMuMTYyMjc3NjYwMkUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCitwd3N4ODA3ICBwb3dlciAgMUUtMjAgICAgMC41IC0+IDEuMDAwMDAwMDAwMEUtMTAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCitwcmVjaXNpb246IDEzICAgICAgICAgICAgICAgLS0gRXRpbnk9LTIxDQorcHdzeDgwOCAgcG93ZXIgIDFFLTIxICAgIDAuNSAtPiAzLjE2MjI3NzY2MDJFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorcHdzeDgwOSAgcG93ZXIgMTBFLTIxICAgIDAuNSAtPiAxLjAwMDAwMDAwMDAwRS0xMCBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK3ByZWNpc2lvbjogMTQgICAgICAgICAgICAgICAtLSBFdGlueT0tMjINCitwd3N4ODEwICBwb3dlciAgMUUtMjEgICAgMC41IC0+IDMuMTYyMjc3NjYwMTdFLTExIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkDQorcHdzeDgxMSAgcG93ZXIgMTBFLTIyICAgIDAuNSAtPiAzLjE2MjI3NzY2MDE3RS0xMSBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZA0KK3B3c3g4MTIgIHBvd2VyICAxRS0yMiAgICAwLjUgLT4gMS4wMDAwMDAwMDAwMEUtMTEgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQNCisNCisNCistLSBzcGVjaWFsIHZhbHVlcw0KK21heGV4cG9uZW50OiA5OTkNCittaW5leHBvbmVudDogLTk5OQ0KK3B3c3g4MjAgIHBvd2VyICAgSW5mICAgICAwLjUgLT4gSW5maW5pdHkNCitwd3N4ODIxICBwb3dlciAgLUluZiAgICAgMC41IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3B3c3g4MjIgIHBvd2VyICAgTmFOICAgICAwLjUgLT4gTmFODQorcHdzeDgyMyAgcG93ZXIgIHNOYU4gICAgIDAuNSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBwcm9wYWdhdGluZyBOYU5zDQorcHdzeDgyNCAgcG93ZXIgIHNOYU4xMjMgIDAuNSAtPiBOYU4xMjMgSW52YWxpZF9vcGVyYXRpb24NCitwd3N4ODI1ICBwb3dlciAtc05hTjMyMSAgMC41IC0+IC1OYU4zMjEgSW52YWxpZF9vcGVyYXRpb24NCitwd3N4ODI2ICBwb3dlciAgIE5hTjQ1NiAgMC41IC0+IE5hTjQ1Ng0KK3B3c3g4MjcgIHBvd2VyICAtTmFONjU0ICAwLjUgLT4gLU5hTjY1NA0KK3B3c3g4MjggIHBvd2VyICAgTmFOMSAgICAwLjUgLT4gTmFOMQ0KKw0KKy0tIE51bGwgdGVzdA0KK3B3c3g5MDAgIHBvd2VyICAjICAwLjUgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3JvdGF0ZS5kZWNUZXN0CmluZGV4IDgxYWRlNzkuLjEyZGI4MjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9yb3RhdGUuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvcm90YXRlLmRlY1Rlc3QKQEAgLTEsMjQ3ICsxLDI0NyBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSByb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1wcmVjaXNpb246ICAgOQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiA5OTkKLW1pbkV4cG9uZW50OiAtOTk5Ci0KLS0tIFNhbml0eSBjaGVjawotcm90eDAwMSByb3RhdGUgICAgICAgICAgMCAgICAwICAtPiAgMAotcm90eDAwMiByb3RhdGUgICAgICAgICAgMCAgICAyICAtPiAgMAotcm90eDAwMyByb3RhdGUgICAgICAgICAgMSAgICAyICAtPiAgMTAwCi1yb3R4MDA0IHJvdGF0ZSAgICAgICAgIDM0ICAgIDggIC0+ICA0MDAwMDAwMDMKLXJvdHgwMDUgcm90YXRlICAgICAgICAgIDEgICAgOSAgLT4gIDEKLXJvdHgwMDYgcm90YXRlICAgICAgICAgIDEgICAtMSAgLT4gIDEwMDAwMDAwMAotcm90eDAwNyByb3RhdGUgIDEyMzQ1Njc4OSAgIC0xICAtPiAgOTEyMzQ1Njc4Ci1yb3R4MDA4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgLTggIC0+ICAyMzQ1Njc4OTEKLXJvdHgwMDkgcm90YXRlICAxMjM0NTY3ODkgICAtOSAgLT4gIDEyMzQ1Njc4OQotcm90eDAxMCByb3RhdGUgICAgICAgICAgMCAgIC0yICAtPiAgMAotCi0tLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyCi1yb3R4MDExIHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDEyIHJvdGF0ZSAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDEzIHJvdGF0ZSAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDE0IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDE1IHJvdGF0ZSAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDE2IHJvdGF0ZSAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDE3IHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDE4IHJvdGF0ZSAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBhbmQgfHJoc3wgPD0gcHJlY2lzaW9uCi1yb3R4MDIwIHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDIxIHJvdGF0ZSAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDIyIHJvdGF0ZSAgICAgICAgMSAgICAgMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4MDIzIHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGZ1bGwgcGF0dGVybgotcm90eDAzMCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OQotcm90eDAzMSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDIzNDU2Nzg5MQotcm90eDAzMiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDM0NTY3ODkxMgotcm90eDAzMyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDQ1Njc4OTEyMwotcm90eDAzNCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDU2Nzg5MTIzNAotcm90eDAzNSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDY3ODkxMjM0NQotcm90eDAzNiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDc4OTEyMzQ1Ngotcm90eDAzNyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDg5MTIzNDU2Nwotcm90eDAzOCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDkxMjM0NTY3OAotcm90eDAzOSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQotcm90eDA0MCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQotcm90eDA0MSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMSAgIC0+IDIzNDU2Nzg5MQotcm90eDA0MiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkxMgotcm90eDA0MyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTEyMwotcm90eDA0NCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNCAgIC0+IDU2Nzg5MTIzNAotcm90eDA0NSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkxMjM0NQotcm90eDA0NiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTEyMzQ1Ngotcm90eDA0NyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNyAgIC0+IDg5MTIzNDU2Nwotcm90eDA0OCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkxMjM0NTY3OAotcm90eDA0OSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDEyMzQ1Njc4OQotCi0tLSB6ZXJvcwotcm90eDA2MCByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTAKLXJvdHgwNjEgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCi1yb3R4MDYyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMAotcm90eDA2MyByb3RhdGUgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDAKLXJvdHgwNjQgcm90YXRlICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCi1yb3R4MDY1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMAotcm90eDA2NiByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTAKLXJvdHgwNjcgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCi1yb3R4MDY4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMAotcm90eDA2OSByb3RhdGUgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDAKLXJvdHgwNzAgcm90YXRlIC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCi1yb3R4MDcxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMAotCi0tLSBObWF4LCBObWluLCBOdGlueQotcm90eDE0MSByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OQotcm90eDE0MiByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IDkuOTk5OTk5OTlFKzk5OQotcm90eDE0MyByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IDkuOTk5OTk5OTlFKzk5OQotcm90eDE0NCByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuOTk5OTk5OTlFKzk5OQotcm90eDE0NSByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5MQotcm90eDE0NiByb3RhdGUgIDFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IDEuMEUtOTk4Ci1yb3R4MTQ3IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgKLXJvdHgxNDggcm90YXRlICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTEKLXJvdHgxNTEgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAKLXJvdHgxNTIgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3Ci1yb3R4MTUzIHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMUUtMTAwNwotcm90eDE1NCByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IDEuMDAwMDAwMEUtMTAwMAotcm90eDE1NSByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMAotcm90eDE1NiByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcKLXJvdHgxNTcgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiA5RS0xMDA3Ci1yb3R4MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwRS0xMDAwCi1yb3R4MTYwIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gMS4wMDAwMDAwMEUtOTk5Ci1yb3R4MTYxIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gMS4wRS0xMDA2Ci1yb3R4MTYyIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2Ci1yb3R4MTYzIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5Ci0tLSAgbmVnYXRpdmVzCi1yb3R4MTcxIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQotcm90eDE3MiByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05Ljk5OTk5OTk5RSs5OTkKLXJvdHgxNzMgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5OUUrOTk5Ci1yb3R4MTc0IHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuOTk5OTk5OTlFKzk5OQotcm90eDE3NSByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTEKLXJvdHgxNzYgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMS4wRS05OTgKLXJvdHgxNzcgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgKLXJvdHgxNzggcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTkxCi1yb3R4MTgxIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTEuMDAwMDAwMEUtMTAwMAotcm90eDE4MiByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3Ci1yb3R4MTgzIHJvdGF0ZSAtMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTFFLTEwMDcKLXJvdHgxODQgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtMS4wMDAwMDAwRS0xMDAwCi1yb3R4MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMAotcm90eDE4NiByb3RhdGUgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3Ci1yb3R4MTg3IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gLTlFLTEwMDcKLXJvdHgxODggcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwRS0xMDAwCi1yb3R4MTkwIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTEuMDAwMDAwMDBFLTk5OQotcm90eDE5MSByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTggIC0+IC0xLjBFLTEwMDYKLXJvdHgxOTIgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2Ci1yb3R4MTkzIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQotCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCi1yb3R4MjAxIHJvdGF0ZSAgICAgICAgIC0wICAgIDAgIC0+ICAtMAotcm90eDIwMiByb3RhdGUgICAgICAgICAtMCAgICAyICAtPiAgLTAKLXJvdHgyMDMgcm90YXRlICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDAKLXJvdHgyMDQgcm90YXRlICAgICAgICAgLTEgICAgOCAgLT4gIC0xMDAwMDAwMDAKLXJvdHgyMDUgcm90YXRlICAgICAgICAgLTEgICAgOSAgLT4gIC0xCi1yb3R4MjA2IHJvdGF0ZSAgICAgICAgIC0xICAgLTEgIC0+ICAtMTAwMDAwMDAwCi1yb3R4MjA3IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtOTEyMzQ1Njc4Ci1yb3R4MjA4IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTggIC0+ICAtMjM0NTY3ODkxCi1yb3R4MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMTIzNDU2Nzg5Ci1yb3R4MjEwIHJvdGF0ZSAgICAgICAgIC0wICAgLTIgIC0+ICAtMAotCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAotcm90eDc4MSByb3RhdGUgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQotcm90eDc4MiByb3RhdGUgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQotcm90eDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotcm90eDc4NCByb3RhdGUgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQotcm90eDc4NSByb3RhdGUgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQotcm90eDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQotcm90eDc4NyByb3RhdGUgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc4OCByb3RhdGUgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc5MCByb3RhdGUgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc5MSByb3RhdGUgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc5MyByb3RhdGUgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotcm90eDc5NCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi1yb3R4ODAwIHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODAxIHJvdGF0ZSAgSW5mICAtOCAgICAgLT4gSW5maW5pdHkKLXJvdHg4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQotcm90eDgwMyByb3RhdGUgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Ci1yb3R4ODA0IHJvdGF0ZSAgSW5mICAgMCAgICAgLT4gSW5maW5pdHkKLXJvdHg4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQotcm90eDgwNiByb3RhdGUgIEluZiAgIDggICAgIC0+IEluZmluaXR5Ci1yb3R4ODA3IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODA5IHJvdGF0ZSAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODEwIHJvdGF0ZSAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODEyIHJvdGF0ZSAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODEzIHJvdGF0ZSAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODE1IHJvdGF0ZSAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLXJvdHg4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFOCi1yb3R4ODIyIHJvdGF0ZSAgTmFOIC0xMDAwICAgLT4gIE5hTgotcm90eDgyMyByb3RhdGUgIE5hTiAtMSAgICAgIC0+ICBOYU4KLXJvdHg4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFOCi1yb3R4ODI1IHJvdGF0ZSAgTmFOICAwICAgICAgLT4gIE5hTgotcm90eDgyNiByb3RhdGUgIE5hTiAgMSAgICAgIC0+ICBOYU4KLXJvdHg4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFOCi1yb3R4ODI4IHJvdGF0ZSAgTmFOICBJbmYgICAgLT4gIE5hTgotcm90eDgyOSByb3RhdGUgIE5hTiAgTmFOICAgIC0+ICBOYU4KLXJvdHg4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFOCi1yb3R4ODMxIHJvdGF0ZSAtMTAwMCBOYU4gICAgLT4gIE5hTgotcm90eDgzMiByb3RhdGUgLTEgICAgTmFOICAgIC0+ICBOYU4KLXJvdHg4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFOCi1yb3R4ODM0IHJvdGF0ZSAgMCAgICBOYU4gICAgLT4gIE5hTgotcm90eDgzNSByb3RhdGUgIDEgICAgTmFOICAgIC0+ICBOYU4KLXJvdHg4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFOCi1yb3R4ODM3IHJvdGF0ZSAgSW5mICBOYU4gICAgLT4gIE5hTgotCi0KLQotcm90eDg0MSByb3RhdGUgIHNOYU4gLUluZiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NDMgcm90YXRlICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg0NCByb3RhdGUgIHNOYU4gLTAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NDYgcm90YXRlICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg0NyByb3RhdGUgIHNOYU4gIDEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NDkgcm90YXRlICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg1MCByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NTIgcm90YXRlIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg1MyByb3RhdGUgLTEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NTUgcm90YXRlICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg1NiByb3RhdGUgIDEgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NTggcm90YXRlICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg1OSByb3RhdGUgIE5hTiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIHByb3BhZ2F0aW5nIE5hTnMKLXJvdHg4NjEgcm90YXRlICBOYU4xICAgLUluZiAgICAtPiAgTmFOMQotcm90eDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1yb3R4ODYzIHJvdGF0ZSAgTmFOMyAgICAxMDAwICAgLT4gIE5hTjMKLXJvdHg4NjQgcm90YXRlICBOYU40ICAgIEluZiAgICAtPiAgTmFONAotcm90eDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1yb3R4ODY2IHJvdGF0ZSAtSW5mICAgICBOYU43ICAgLT4gIE5hTjcKLXJvdHg4Njcgcm90YXRlIC0xMDAwICAgIE5hTjggICAtPiAgTmFOOAotcm90eDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1yb3R4ODY5IHJvdGF0ZSAgSW5mICAgICtOYU4xMCAgLT4gIE5hTjEwCi1yb3R4ODcxIHJvdGF0ZSAgc05hTjExICAtSW5mICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NzMgcm90YXRlICBzTmFOMTMgICAxMDAwICAtPiAgTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODc0IHJvdGF0ZSAgc05hTjE0ICAgTmFOMTcgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4NzYgcm90YXRlICBOYU4xNiAgIHNOYU4xOSAtPiAgTmFOMTkgIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODc3IHJvdGF0ZSAtSW5mICAgICtzTmFOMjAgLT4gIE5hTjIwICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4Nzkgcm90YXRlICAxMDAwICAgIHNOYU4yMiAtPiAgTmFOMjIgIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODgwIHJvdGF0ZSAgSW5mICAgICBzTmFOMjMgLT4gIE5hTjIzICBJbnZhbGlkX29wZXJhdGlvbgotcm90eDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLXJvdHg4ODIgcm90YXRlIC1OYU4yNiAgICBOYU4yOCAtPiAtTmFOMjYKLXJvdHg4ODMgcm90YXRlIC1zTmFOMjcgIHNOYU4yOSAtPiAtTmFOMjcgIEludmFsaWRfb3BlcmF0aW9uCi1yb3R4ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1yb3R4ODg1IHJvdGF0ZSAgMTAwMCAgIC1zTmFOMzEgLT4gLU5hTjMxICBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBwYXlsb2FkIGRlY2FwaXRhdGUKLXByZWNpc2lvbjogNQotcm90eDg4NiByb3RhdGUgIDExIC1zTmFOMTIzNDU2Nzg5MCAtPiAtTmFONjc4OTAgIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSByb3RhdGUuZGVjVGVzdCAtLSByb3RhdGUgY29lZmZpY2llbnQgbGVmdCBvciByaWdodCAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitwcmVjaXNpb246ICAgOQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbkV4cG9uZW50OiAtOTk5DQorDQorLS0gU2FuaXR5IGNoZWNrDQorcm90eDAwMSByb3RhdGUgICAgICAgICAgMCAgICAwICAtPiAgMA0KK3JvdHgwMDIgcm90YXRlICAgICAgICAgIDAgICAgMiAgLT4gIDANCityb3R4MDAzIHJvdGF0ZSAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCityb3R4MDA0IHJvdGF0ZSAgICAgICAgIDM0ICAgIDggIC0+ICA0MDAwMDAwMDMNCityb3R4MDA1IHJvdGF0ZSAgICAgICAgICAxICAgIDkgIC0+ICAxDQorcm90eDAwNiByb3RhdGUgICAgICAgICAgMSAgIC0xICAtPiAgMTAwMDAwMDAwDQorcm90eDAwNyByb3RhdGUgIDEyMzQ1Njc4OSAgIC0xICAtPiAgOTEyMzQ1Njc4DQorcm90eDAwOCByb3RhdGUgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMjM0NTY3ODkxDQorcm90eDAwOSByb3RhdGUgIDEyMzQ1Njc4OSAgIC05ICAtPiAgMTIzNDU2Nzg5DQorcm90eDAxMCByb3RhdGUgICAgICAgICAgMCAgIC0yICAtPiAgMA0KKw0KKy0tIHJocyBtdXN0IGJlIGFuIGludGVnZXINCityb3R4MDExIHJvdGF0ZSAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDAxMiByb3RhdGUgICAgICAgIDEgICAgMS4wICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHgwMTMgcm90YXRlICAgICAgICAxICAgIDAuMSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4MDE0IHJvdGF0ZSAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDAxNSByb3RhdGUgICAgICAgIDEgICAgMUUrMSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHgwMTYgcm90YXRlICAgICAgICAxICAgIDFFKzk5ICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4MDE3IHJvdGF0ZSAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDAxOCByb3RhdGUgICAgICAgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24NCityb3R4MDIwIHJvdGF0ZSAgICAgICAgMSAgICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDAyMSByb3RhdGUgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHgwMjIgcm90YXRlICAgICAgICAxICAgICAxMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4MDIzIHJvdGF0ZSAgICAgICAgMSAgICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZnVsbCBwYXR0ZXJuDQorcm90eDAzMCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDEyMzQ1Njc4OQ0KK3JvdHgwMzEgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAyMzQ1Njc4OTENCityb3R4MDMyIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC03ICAgLT4gMzQ1Njc4OTEyDQorcm90eDAzMyByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtNiAgIC0+IDQ1Njc4OTEyMw0KK3JvdHgwMzQgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiA1Njc4OTEyMzQNCityb3R4MDM1IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC00ICAgLT4gNjc4OTEyMzQ1DQorcm90eDAzNiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMyAgIC0+IDc4OTEyMzQ1Ng0KK3JvdHgwMzcgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiA4OTEyMzQ1NjcNCityb3R4MDM4IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgIC0xICAgLT4gOTEyMzQ1Njc4DQorcm90eDAzOSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICAtMCAgIC0+IDEyMzQ1Njc4OQ0KK3JvdHgwNDAgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkNCityb3R4MDQxIHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICsxICAgLT4gMjM0NTY3ODkxDQorcm90eDA0MiByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArMiAgIC0+IDM0NTY3ODkxMg0KK3JvdHgwNDMgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkxMjMNCityb3R4MDQ0IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs0ICAgLT4gNTY3ODkxMjM0DQorcm90eDA0NSByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArNSAgIC0+IDY3ODkxMjM0NQ0KK3JvdHgwNDYgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkxMjM0NTYNCityb3R4MDQ3IHJvdGF0ZSAgMTIzNDU2Nzg5ICAgICAgICAgICs3ICAgLT4gODkxMjM0NTY3DQorcm90eDA0OCByb3RhdGUgIDEyMzQ1Njc4OSAgICAgICAgICArOCAgIC0+IDkxMjM0NTY3OA0KK3JvdHgwNDkgcm90YXRlICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAxMjM0NTY3ODkNCisNCistLSB6ZXJvcw0KK3JvdHgwNjAgcm90YXRlICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwDQorcm90eDA2MSByb3RhdGUgIDBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAgMEUtMTANCityb3R4MDYyIHJvdGF0ZSAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMA0KK3JvdHgwNjMgcm90YXRlICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwDQorcm90eDA2NCByb3RhdGUgIDBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUrMTANCityb3R4MDY1IHJvdGF0ZSAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMA0KK3JvdHgwNjYgcm90YXRlIC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwDQorcm90eDA2NyByb3RhdGUgLTBFLTEwICAgICAgICAgICAgICAtOSAgIC0+ICAtMEUtMTANCityb3R4MDY4IHJvdGF0ZSAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMA0KK3JvdHgwNjkgcm90YXRlIC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwDQorcm90eDA3MCByb3RhdGUgLTBFKzEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUrMTANCityb3R4MDcxIHJvdGF0ZSAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorcm90eDE0MSByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK3JvdHgxNDIgcm90YXRlICA5Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiA5Ljk5OTk5OTk5RSs5OTkNCityb3R4MTQzIHJvdGF0ZSAgOS45OTk5OTk5OUUrOTk5ICAgICAgMSAgLT4gOS45OTk5OTk5OUUrOTk5DQorcm90eDE0NCByb3RhdGUgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK3JvdHgxNDUgcm90YXRlICAxRS05OTkgICAgICAgICAgICAgIC0xICAtPiAxLjAwMDAwMDAwRS05OTENCityb3R4MTQ2IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAtOCAgLT4gMS4wRS05OTgNCityb3R4MTQ3IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gMS4wRS05OTgNCityb3R4MTQ4IHJvdGF0ZSAgMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTkxDQorcm90eDE1MSByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMA0KK3JvdHgxNTIgcm90YXRlICAxLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAxRS0xMDA3DQorcm90eDE1MyByb3RhdGUgIDEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDFFLTEwMDcNCityb3R4MTU0IHJvdGF0ZSAgMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMS4wMDAwMDAwRS0xMDAwDQorcm90eDE1NSByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMA0KK3JvdHgxNTYgcm90YXRlICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3DQorcm90eDE1NyByb3RhdGUgIDkuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IDlFLTEwMDcNCityb3R4MTU4IHJvdGF0ZSAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gOS4wMDAwMDAwRS0xMDAwDQorcm90eDE2MCByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IDEuMDAwMDAwMDBFLTk5OQ0KK3JvdHgxNjEgcm90YXRlICAxRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAxLjBFLTEwMDYNCityb3R4MTYyIHJvdGF0ZSAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2DQorcm90eDE2MyByb3RhdGUgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQ0KKy0tICBuZWdhdGl2ZXMNCityb3R4MTcxIHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KK3JvdHgxNzIgcm90YXRlIC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOS45OTk5OTk5OUUrOTk5DQorcm90eDE3MyByb3RhdGUgLTkuOTk5OTk5OTlFKzk5OSAgICAgIDEgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCityb3R4MTc0IHJvdGF0ZSAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuOTk5OTk5OTlFKzk5OQ0KK3JvdHgxNzUgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMS4wMDAwMDAwMEUtOTkxDQorcm90eDE3NiByb3RhdGUgLTFFLTk5OSAgICAgICAgICAgICAgLTggIC0+IC0xLjBFLTk5OA0KK3JvdHgxNzcgcm90YXRlIC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgNCityb3R4MTc4IHJvdGF0ZSAtMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5MQ0KK3JvdHgxODEgcm90YXRlIC0xLjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwDQorcm90eDE4MiByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3DQorcm90eDE4MyByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0xRS0xMDA3DQorcm90eDE4NCByb3RhdGUgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0xLjAwMDAwMDBFLTEwMDANCityb3R4MTg1IHJvdGF0ZSAtOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gLTkuMDAwMDAwMEUtMTAwMA0KK3JvdHgxODYgcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtOUUtMTAwNw0KK3JvdHgxODcgcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtOUUtMTAwNw0KK3JvdHgxODggcm90YXRlIC05LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwRS0xMDAwDQorcm90eDE5MCByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0xLjAwMDAwMDAwRS05OTkNCityb3R4MTkxIHJvdGF0ZSAtMUUtMTAwNyAgICAgICAgICAgICAtOCAgLT4gLTEuMEUtMTAwNg0KK3JvdHgxOTIgcm90YXRlIC0xRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAtMS4wRS0xMDA2DQorcm90eDE5MyByb3RhdGUgLTFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTkNCisNCistLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpDQorcm90eDIwMSByb3RhdGUgICAgICAgICAtMCAgICAwICAtPiAgLTANCityb3R4MjAyIHJvdGF0ZSAgICAgICAgIC0wICAgIDIgIC0+ICAtMA0KK3JvdHgyMDMgcm90YXRlICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDANCityb3R4MjA0IHJvdGF0ZSAgICAgICAgIC0xICAgIDggIC0+ICAtMTAwMDAwMDAwDQorcm90eDIwNSByb3RhdGUgICAgICAgICAtMSAgICA5ICAtPiAgLTENCityb3R4MjA2IHJvdGF0ZSAgICAgICAgIC0xICAgLTEgIC0+ICAtMTAwMDAwMDAwDQorcm90eDIwNyByb3RhdGUgLTEyMzQ1Njc4OSAgIC0xICAtPiAgLTkxMjM0NTY3OA0KK3JvdHgyMDggcm90YXRlIC0xMjM0NTY3ODkgICAtOCAgLT4gIC0yMzQ1Njc4OTENCityb3R4MjA5IHJvdGF0ZSAtMTIzNDU2Nzg5ICAgLTkgIC0+ICAtMTIzNDU2Nzg5DQorcm90eDIxMCByb3RhdGUgICAgICAgICAtMCAgIC0yICAtPiAgLTANCisNCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KK3JvdHg3ODEgcm90YXRlIC1JbmYgIC04ICAgICAtPiAtSW5maW5pdHkNCityb3R4NzgyIHJvdGF0ZSAtSW5mICAtMSAgICAgLT4gLUluZmluaXR5DQorcm90eDc4MyByb3RhdGUgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK3JvdHg3ODQgcm90YXRlIC1JbmYgICAwICAgICAtPiAtSW5maW5pdHkNCityb3R4Nzg1IHJvdGF0ZSAtSW5mICAgMSAgICAgLT4gLUluZmluaXR5DQorcm90eDc4NiByb3RhdGUgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KK3JvdHg3ODcgcm90YXRlIC0xMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4Nzg4IHJvdGF0ZSAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDc4OSByb3RhdGUgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg3OTAgcm90YXRlIC0wICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4NzkxIHJvdGF0ZSAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDc5MiByb3RhdGUgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg3OTMgcm90YXRlICAxMDAwIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4Nzk0IHJvdGF0ZSAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorcm90eDgwMCByb3RhdGUgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4MDEgcm90YXRlICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDIgcm90YXRlICBJbmYgIC0xICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDMgcm90YXRlICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDQgcm90YXRlICBJbmYgICAwICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDUgcm90YXRlICBJbmYgICAxICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDYgcm90YXRlICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KK3JvdHg4MDcgcm90YXRlICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODA4IHJvdGF0ZSAtMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDgwOSByb3RhdGUgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4MTAgcm90YXRlIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODExIHJvdGF0ZSAtMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDgxMiByb3RhdGUgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4MTMgcm90YXRlICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODE0IHJvdGF0ZSAgMTAwMCAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDgxNSByb3RhdGUgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3JvdHg4MjEgcm90YXRlICBOYU4gLUluZiAgICAtPiAgTmFODQorcm90eDgyMiByb3RhdGUgIE5hTiAtMTAwMCAgIC0+ICBOYU4NCityb3R4ODIzIHJvdGF0ZSAgTmFOIC0xICAgICAgLT4gIE5hTg0KK3JvdHg4MjQgcm90YXRlICBOYU4gLTAgICAgICAtPiAgTmFODQorcm90eDgyNSByb3RhdGUgIE5hTiAgMCAgICAgIC0+ICBOYU4NCityb3R4ODI2IHJvdGF0ZSAgTmFOICAxICAgICAgLT4gIE5hTg0KK3JvdHg4Mjcgcm90YXRlICBOYU4gIDEwMDAgICAtPiAgTmFODQorcm90eDgyOCByb3RhdGUgIE5hTiAgSW5mICAgIC0+ICBOYU4NCityb3R4ODI5IHJvdGF0ZSAgTmFOICBOYU4gICAgLT4gIE5hTg0KK3JvdHg4MzAgcm90YXRlIC1JbmYgIE5hTiAgICAtPiAgTmFODQorcm90eDgzMSByb3RhdGUgLTEwMDAgTmFOICAgIC0+ICBOYU4NCityb3R4ODMyIHJvdGF0ZSAtMSAgICBOYU4gICAgLT4gIE5hTg0KK3JvdHg4MzMgcm90YXRlIC0wICAgIE5hTiAgICAtPiAgTmFODQorcm90eDgzNCByb3RhdGUgIDAgICAgTmFOICAgIC0+ICBOYU4NCityb3R4ODM1IHJvdGF0ZSAgMSAgICBOYU4gICAgLT4gIE5hTg0KK3JvdHg4MzYgcm90YXRlICAxMDAwIE5hTiAgICAtPiAgTmFODQorcm90eDgzNyByb3RhdGUgIEluZiAgTmFOICAgIC0+ICBOYU4NCisNCisNCisNCityb3R4ODQxIHJvdGF0ZSAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQyIHJvdGF0ZSAgc05hTiAtMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQzIHJvdGF0ZSAgc05hTiAtMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ0IHJvdGF0ZSAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ1IHJvdGF0ZSAgc05hTiAgMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ2IHJvdGF0ZSAgc05hTiAgMSAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ3IHJvdGF0ZSAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ4IHJvdGF0ZSAgc05hTiAgTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODQ5IHJvdGF0ZSAgc05hTiBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODUwIHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODUxIHJvdGF0ZSAtSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODUyIHJvdGF0ZSAtMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODUzIHJvdGF0ZSAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU0IHJvdGF0ZSAtMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU1IHJvdGF0ZSAgMCAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU2IHJvdGF0ZSAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU3IHJvdGF0ZSAgMTAwMCBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU4IHJvdGF0ZSAgSW5mICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODU5IHJvdGF0ZSAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorcm90eDg2MSByb3RhdGUgIE5hTjEgICAtSW5mICAgIC0+ICBOYU4xDQorcm90eDg2MiByb3RhdGUgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yDQorcm90eDg2MyByb3RhdGUgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorcm90eDg2NCByb3RhdGUgIE5hTjQgICAgSW5mICAgIC0+ICBOYU40DQorcm90eDg2NSByb3RhdGUgIE5hTjUgICArTmFONiAgIC0+ICBOYU41DQorcm90eDg2NiByb3RhdGUgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorcm90eDg2NyByb3RhdGUgLTEwMDAgICAgTmFOOCAgIC0+ICBOYU44DQorcm90eDg2OCByb3RhdGUgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45DQorcm90eDg2OSByb3RhdGUgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK3JvdHg4NzEgcm90YXRlICBzTmFOMTEgIC1JbmYgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDg3MiByb3RhdGUgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODczIHJvdGF0ZSAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4NzQgcm90YXRlICBzTmFOMTQgICBOYU4xNyAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDg3NSByb3RhdGUgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODc2IHJvdGF0ZSAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4Nzcgcm90YXRlIC1JbmYgICAgK3NOYU4yMCAtPiAgTmFOMjAgIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDg3OCByb3RhdGUgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODc5IHJvdGF0ZSAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK3JvdHg4ODAgcm90YXRlICBJbmYgICAgIHNOYU4yMyAtPiAgTmFOMjMgIEludmFsaWRfb3BlcmF0aW9uDQorcm90eDg4MSByb3RhdGUgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODgyIHJvdGF0ZSAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorcm90eDg4MyByb3RhdGUgLXNOYU4yNyAgc05hTjI5IC0+IC1OYU4yNyAgSW52YWxpZF9vcGVyYXRpb24NCityb3R4ODg0IHJvdGF0ZSAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwDQorcm90eDg4NSByb3RhdGUgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwYXlsb2FkIGRlY2FwaXRhdGUNCitwcmVjaXNpb246IDUNCityb3R4ODg2IHJvdGF0ZSAgMTEgLXNOYU4xMjM0NTY3ODkwIC0+IC1OYU42Nzg5MCAgSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvc2NhbGViLmRlY1Rlc3QKaW5kZXggMDRhNjVkNi4uMzcyZTNkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NjYWxlYi5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zY2FsZWIuZGVjVGVzdApAQCAtMSwyMDkgKzEsMjA5IEBACi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIHNjYWxlYi5kZWNUZXN0IC0tIHNjYWxlIGEgbnVtYmVyIGJ5IHBvd2VycyBvZiAxMCAgICAgICAgICAgICAgICAgICAtLQotLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tIFBsZWFzZSBzZWUgdGhlIGRvY3VtZW50ICJHZW5lcmFsIERlY2ltYWwgQXJpdGhtZXRpYyBUZXN0Y2FzZXMiICAgICAtLQotLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tCi0tLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tCi0tLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0KLS0tIHBhcnRpY3VsYXIsIGFjaGlldmluZyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSB0ZXN0cyBoZXJlIGlzIG5vdCAgICAtLQotLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tCi0tLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0KLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tCi0tLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tICAgSUJNIFVLLCBQTyBCb3ggMzEsIEJpcm1pbmdoYW0gUm9hZCwgV2Fyd2ljayBDVjM0IDVKTCwgVUsgICAgICAgICAtLQotLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXZlcnNpb246IDIuNTkKLQotZXh0ZW5kZWQ6ICAgIDEKLXByZWNpc2lvbjogICA5Ci1yb3VuZGluZzogICAgaGFsZl91cAotbWF4RXhwb25lbnQ6IDk5OQotbWluRXhwb25lbnQ6IC05OTkKLQotLS0gTWF4IHxyaHN8IGlzIDIqKDk5OSs5KSA9IDIwMTYKLQotLS0gU2FuaXR5IGNoZWNrcwotc2NieDAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwCi1zY2J4MDAyIHNjYWxlYiAgICAgICA3LjUwICAgIDMgLT4gNy41MEUrMwotc2NieDAwMyBzY2FsZWIgICAgICAgNy41MCAgICAyIC0+IDc1MAotc2NieDAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjAKLXNjYngwMDUgc2NhbGViICAgICAgIDcuNTAgICAgMCAtPiA3LjUwCi1zY2J4MDA2IHNjYWxlYiAgICAgICA3LjUwICAgLTEgLT4gMC43NTAKLXNjYngwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTAKLXNjYngwMDggc2NhbGViICAgICAgIDcuNTAgIC0xMCAtPiA3LjUwRS0xMAotc2NieDAwOSBzY2FsZWIgICAgICAtNy41MCAgICAzIC0+IC03LjUwRSszCi1zY2J4MDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MAotc2NieDAxMSBzY2FsZWIgICAgICAtNy41MCAgICAxIC0+IC03NS4wCi1zY2J4MDEyIHNjYWxlYiAgICAgIC03LjUwICAgIDAgLT4gLTcuNTAKLXNjYngwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTAKLQotLS0gSW5maW5pdGllcwotc2NieDAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQotc2NieDAxNSBzY2FsZWIgIC1JbmZpbml0eSAgMiAtPiAtSW5maW5pdHkKLXNjYngwMTYgc2NhbGViICBJbmZpbml0eSAgLTEgLT4gSW5maW5pdHkKLXNjYngwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5Ci0KLS0tIE5leHQgdHdvIGFyZSBzb21ld2hhdCB1bmRlZmluZWQgaW4gNzU0cjsgdHJlYXQgYXMgbm9uLWludGVnZXIKLXNjYngwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4MDE5IHNjYWxlYiAgMTAgLUluZmluaXR5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcKLS0tIE5hTnMsIDAgcGF5bG9hZAotc2NieDAyMSBzY2FsZWIgICAgICAgICBOYU4gIDEgLT4gTmFOCi1zY2J4MDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFOCi1zY2J4MDIzIHNjYWxlYiAgICAgICAgc05hTiAgMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMjQgc2NhbGViICAgICAgIC1zTmFOICAxIC0+IC1OYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTgotc2NieDAyNiBzY2FsZWIgLUluZiAgIC1OYU4gICAgLT4gLU5hTgotc2NieDAyNyBzY2FsZWIgICAgNCAgIHNOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4MDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIG5vbi1pbnRlZ2VyIFJIUwotc2NieDAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMwotc2NieDAzMSBzY2FsZWIgIDEuMjMgICAgMS4wMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4MDMyIHNjYWxlYiAgMS4yMyAgICAxLjEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDAzNCBzY2FsZWIgIDEuMjMgICAgMC4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4MDM1IHNjYWxlYiAgMS4yMyAgICAwLjExIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMzcgc2NhbGViICAxLjIzICAgLTEgICAgLT4gIDAuMTIzCi1zY2J4MDM4IHNjYWxlYiAgMS4yMyAgIC0xLjAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0MCBzY2FsZWIgIDEuMjMgICAtMS4wMSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4MDQxIHNjYWxlYiAgMS4yMyAgIC0wLjAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0MyBzY2FsZWIgIDEuMjMgICAtMC45OTk5OTk5OTkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0NCBzY2FsZWIgIDEuMjMgICAgMC4xICAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0NiBzY2FsZWIgIDEuMjMgICAgMS4xMjM0RSs2ICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2NieDA0NyBzY2FsZWIgIDEuMjMgICAgMS4xMjNFKzQgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0KLXNjYngxMjAgc2NhbGViICAxLjIzICAgIDIwMTUgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLXNjYngxMjEgc2NhbGViICAxLjIzICAgIDIwMTYgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLXNjYngxMjIgc2NhbGViICAxLjIzICAgIDIwMTcgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngxMjMgc2NhbGViICAxLjIzICAgIDIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngxMjQgc2NhbGViICAxLjIzICAgLTIwMTUgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLXNjYngxMjUgc2NhbGViICAxLjIzICAgLTIwMTYgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQKLXNjYngxMjYgc2NhbGViICAxLjIzICAgLTIwMTcgICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNjYngxMjcgc2NhbGViICAxLjIzICAgLTIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotLS0gTmFOcywgbm9uLTAgcGF5bG9hZAotLS0gcHJvcGFnYXRpbmcgTmFOcwotc2NieDg2MSBzY2FsZWIgIE5hTjAxICAgLUluZiAgICAgLT4gIE5hTjEKLXNjYng4NjIgc2NhbGViIC1OYU4wMiAgIC0xMDAwICAgIC0+IC1OYU4yCi1zY2J4ODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMwotc2NieDg2NCBzY2FsZWIgIE5hTjA0ICAgIEluZiAgICAgLT4gIE5hTjQKLXNjYng4NjUgc2NhbGViICBOYU4wNSAgICBOYU42MSAgIC0+ICBOYU41Ci1zY2J4ODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzEKLXNjYng4Njcgc2NhbGViIC0xMDAwICAgICBOYU44MSAgIC0+ICBOYU44MQotc2NieDg2OCBzY2FsZWIgIDEwMDAgICAgIE5hTjkxICAgLT4gIE5hTjkxCi1zY2J4ODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxCi1zY2J4ODcxIHNjYWxlYiAgc05hTjAxMSAgLUluZiAgICAtPiAgTmFOMTEgIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODcyIHNjYWxlYiAgc05hTjAxMiAgLTEwMDAgICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc0IHNjYWxlYiAgc05hTjAxNCAgIE5hTjE3MSAtPiAgTmFOMTQgIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc1IHNjYWxlYiAgc05hTjAxNSAgc05hTjE4MSAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc3IHNjYWxlYiAtSW5mICAgICAgc05hTjIwMSAtPiAgTmFOMjAxIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc4IHNjYWxlYiAtMTAwMCAgICAgc05hTjIxMSAtPiAgTmFOMjExIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODgwIHNjYWxlYiAgSW5mICAgICAgc05hTjIzMSAtPiAgTmFOMjMxIEludmFsaWRfb3BlcmF0aW9uCi1zY2J4ODgxIHNjYWxlYiAgTmFOMDI1ICAgc05hTjI0MSAtPiAgTmFOMjQxIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIGZpbml0ZXMKLXNjYngwNTEgc2NhbGViICAgICAgICAgIDcgICAtMiAgLT4gMC4wNwotc2NieDA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNwotc2NieDA1MyBzY2FsZWIgICAgICAgICA3NSAgIC0yICAtPiAwLjc1Ci1zY2J4MDU0IHNjYWxlYiAgICAgICAgLTc1ICAgLTIgIC0+IC0wLjc1Ci1zY2J4MDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MAotc2NieDA1NiBzY2FsZWIgICAgICAtNy41MCAgIC0yICAtPiAtMC4wNzUwCi1zY2J4MDU3IHNjYWxlYiAgICAgICA3LjUwMCAgLTIgIC0+IDAuMDc1MDAKLXNjYngwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDAKLXNjYngwNjEgc2NhbGViICAgICAgICAgIDcgICAtMSAgLT4gMC43Ci1zY2J4MDYyIHNjYWxlYiAgICAgICAgIC03ICAgLTEgIC0+IC0wLjcKLXNjYngwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41Ci1zY2J4MDY0IHNjYWxlYiAgICAgICAgLTc1ICAgLTEgIC0+IC03LjUKLXNjYngwNjUgc2NhbGViICAgICAgIDcuNTAgICAtMSAgLT4gMC43NTAKLXNjYngwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwCi1zY2J4MDY3IHNjYWxlYiAgICAgICA3LjUwMCAgLTEgIC0+IDAuNzUwMAotc2NieDA2OCBzY2FsZWIgICAgICAtNy41MDAgIC0xICAtPiAtMC43NTAwCi1zY2J4MDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcKLXNjYngwNzIgc2NhbGViICAgICAgICAgLTcgICAgMCAgLT4gLTcKLXNjYngwNzMgc2NhbGViICAgICAgICAgNzUgICAgMCAgLT4gNzUKLXNjYngwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1Ci1zY2J4MDc1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgIC0+IDcuNTAKLXNjYngwNzYgc2NhbGViICAgICAgLTcuNTAgICAgMCAgLT4gLTcuNTAKLXNjYngwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDAKLXNjYngwNzggc2NhbGViICAgICAgLTcuNTAwICAgMCAgLT4gLTcuNTAwCi1zY2J4MDgxIHNjYWxlYiAgICAgICAgICA3ICAgIDEgIC0+IDdFKzEKLXNjYngwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzEKLXNjYngwODMgc2NhbGViICAgICAgICAgNzUgICAgMSAgLT4gNy41RSsyCi1zY2J4MDg0IHNjYWxlYiAgICAgICAgLTc1ICAgIDEgIC0+IC03LjVFKzIKLXNjYngwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMAotc2NieDA4NiBzY2FsZWIgICAgICAtNy41MCAgICAxICAtPiAtNzUuMAotc2NieDA4NyBzY2FsZWIgICAgICAgNy41MDAgICAxICAtPiA3NS4wMAotc2NieDA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDAKLXNjYngwOTEgc2NhbGViICAgICAgICAgIDcgICAgMiAgLT4gN0UrMgotc2NieDA5MiBzY2FsZWIgICAgICAgICAtNyAgICAyICAtPiAtN0UrMgotc2NieDA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMKLXNjYngwOTQgc2NhbGViICAgICAgICAtNzUgICAgMiAgLT4gLTcuNUUrMwotc2NieDA5NSBzY2FsZWIgICAgICAgNy41MCAgICAyICAtPiA3NTAKLXNjYngwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MAotc2NieDA5NyBzY2FsZWIgICAgICAgNy41MDAgICAyICAtPiA3NTAuMAotc2NieDA5OCBzY2FsZWIgICAgICAtNy41MDAgICAyICAtPiAtNzUwLjAKLQotLS0gemVyb3MKLXNjYngxMTEgc2NhbGViICAgICAgICAgIDAgIDEgLT4gMEUrMQotc2NieDExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMgotc2NieDExMyBzY2FsZWIgICAgICAgMEUrNCAgMyAtPiAwRSs3Ci1zY2J4MTE0IHNjYWxlYiAgICAgIC0wRSs0ICA0IC0+IC0wRSs4Ci1zY2J4MTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzEKLXNjYngxMTYgc2NhbGViICAgIC0wLjAwMDAgIDYgLT4gLTBFKzIKLXNjYngxMTcgc2NhbGViICAgICAgMEUtMTQxIDcgLT4gMEUtMTM0Ci1zY2J4MTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMKLQotLS0gTm1heCwgTm1pbiwgTnRpbnkKLXNjYngxMzIgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgKzk5OSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQKLXNjYngxMzMgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxMCAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1zY2J4MTM0IHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMSAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotc2NieDEzNSBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgIDAgIC0+IDkuOTk5OTk5OTlFKzk5OQotc2NieDEzNiBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgLTEgIC0+IDkuOTk5OTk5OTlFKzk5OAotc2NieDEzNyBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgKzEgIC0+IDFFLTk5OAotc2NieDEzOCBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTAgIC0+IDFFLTk5OQotc2NieDEzOSBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTEgIC0+IDFFLTEwMDAgICAgICAgICBTdWJub3JtYWwKLXNjYngxNDAgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICsxICAtPiAxLjAwMDAwMDAwRS05OTgKLXNjYngxNDEgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICAwICAtPiAxLjAwMDAwMDAwRS05OTkKLXNjYngxNDIgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgIC0xICAtPiAxLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQKLXNjYngxNDMgc2NhbGViICAxRS0xMDA3ICAgICAgICAgICsxICAtPiAxRS0xMDA2ICAgICAgICAgU3Vibm9ybWFsCi1zY2J4MTQ0IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMCAgLT4gMUUtMTAwNyAgICAgICAgIFN1Ym5vcm1hbAotc2NieDE0NSBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgLTEgIC0+IDBFLTEwMDcgICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi0KLXNjYngxNTAgc2NhbGViICAtMUUtMTAwNyAgICAgICAgICsxICAtPiAtMUUtMTAwNiAgICAgICAgU3Vibm9ybWFsCi1zY2J4MTUxIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMCAgLT4gLTFFLTEwMDcgICAgICAgIFN1Ym5vcm1hbAotc2NieDE1MiBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTEgIC0+IC0wRS0xMDA3ICAgICAgICBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkCi1zY2J4MTUzIHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMSAgLT4gLTEuMDAwMDAwMDBFLTk5OAotc2NieDE1NCBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgKzAgIC0+IC0xLjAwMDAwMDAwRS05OTkKLXNjYngxNTUgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5IC0xICAtPiAtMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkCi1zY2J4MTU2IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICArMSAgLT4gLTFFLTk5OAotc2NieDE1NyBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTAgIC0+IC0xRS05OTkKLXNjYngxNTggc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0xICAtPiAtMUUtMTAwMCAgICAgICAgIFN1Ym5vcm1hbAotc2NieDE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi1zY2J4MTYwIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSArMCAgLT4gLTkuOTk5OTk5OTlFKzk5OQotc2NieDE2MSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgLTEgIC0+IC05Ljk5OTk5OTk5RSs5OTgKLXNjYngxNjIgc2NhbGViICAtOUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZAotc2NieDE2MyBzY2FsZWIgIC0xRSs5OTkgICAgICAgICAgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEtyYWggZXhhbXBsZXMKLXByZWNpc2lvbjogICAzNAotbWF4RXhwb25lbnQ6IDk5OTk5OTk5OQotbWluRXhwb25lbnQ6IC05OTk5OTk5OTkKLS0tIGludGVnZXIgb3ZlcmZsb3cgaW4gMy42MSBvciBlYXJsaWVyCi1zY2J4MTY0IHNjYWxlYiAgMUUtOTk5OTk5OTk5ICAtMTIwMDAwMDAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSBvdXQgb2YgcmFuZ2UKLXNjYngxNjUgc2NhbGViICAtMUUtOTk5OTk5OTk5ICArMTIwMDAwMDAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBzY2FsZWIuZGVjVGVzdCAtLSBzY2FsZSBhIG51bWJlciBieSBwb3dlcnMgb2YgMTAgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitwcmVjaXNpb246ICAgOQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbkV4cG9uZW50OiAtOTk5DQorDQorLS0gTWF4IHxyaHN8IGlzIDIqKDk5OSs5KSA9IDIwMTYNCisNCistLSBTYW5pdHkgY2hlY2tzDQorc2NieDAwMSBzY2FsZWIgICAgICAgNy41MCAgIDEwIC0+IDcuNTBFKzEwDQorc2NieDAwMiBzY2FsZWIgICAgICAgNy41MCAgICAzIC0+IDcuNTBFKzMNCitzY2J4MDAzIHNjYWxlYiAgICAgICA3LjUwICAgIDIgLT4gNzUwDQorc2NieDAwNCBzY2FsZWIgICAgICAgNy41MCAgICAxIC0+IDc1LjANCitzY2J4MDA1IHNjYWxlYiAgICAgICA3LjUwICAgIDAgLT4gNy41MA0KK3NjYngwMDYgc2NhbGViICAgICAgIDcuNTAgICAtMSAtPiAwLjc1MA0KK3NjYngwMDcgc2NhbGViICAgICAgIDcuNTAgICAtMiAtPiAwLjA3NTANCitzY2J4MDA4IHNjYWxlYiAgICAgICA3LjUwICAtMTAgLT4gNy41MEUtMTANCitzY2J4MDA5IHNjYWxlYiAgICAgIC03LjUwICAgIDMgLT4gLTcuNTBFKzMNCitzY2J4MDEwIHNjYWxlYiAgICAgIC03LjUwICAgIDIgLT4gLTc1MA0KK3NjYngwMTEgc2NhbGViICAgICAgLTcuNTAgICAgMSAtPiAtNzUuMA0KK3NjYngwMTIgc2NhbGViICAgICAgLTcuNTAgICAgMCAtPiAtNy41MA0KK3NjYngwMTMgc2NhbGViICAgICAgLTcuNTAgICAtMSAtPiAtMC43NTANCisNCistLSBJbmZpbml0aWVzDQorc2NieDAxNCBzY2FsZWIgIEluZmluaXR5ICAgMSAtPiBJbmZpbml0eQ0KK3NjYngwMTUgc2NhbGViICAtSW5maW5pdHkgIDIgLT4gLUluZmluaXR5DQorc2NieDAxNiBzY2FsZWIgIEluZmluaXR5ICAtMSAtPiBJbmZpbml0eQ0KK3NjYngwMTcgc2NhbGViICAtSW5maW5pdHkgLTIgLT4gLUluZmluaXR5DQorDQorLS0gTmV4dCB0d28gYXJlIHNvbWV3aGF0IHVuZGVmaW5lZCBpbiA3NTRyOyB0cmVhdCBhcyBub24taW50ZWdlcg0KK3NjYngwMTggc2NhbGViICAxMCAgSW5maW5pdHkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDAxOSBzY2FsZWIgIDEwIC1JbmZpbml0eSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOYU5zIGFyZSB1bmRlZmluZWQgaW4gNzU0cjsgYXNzdW1lIHVzdWFsIHByb2Nlc3NpbmcNCistLSBOYU5zLCAwIHBheWxvYWQNCitzY2J4MDIxIHNjYWxlYiAgICAgICAgIE5hTiAgMSAtPiBOYU4NCitzY2J4MDIyIHNjYWxlYiAgICAgICAgLU5hTiAtMSAtPiAtTmFODQorc2NieDAyMyBzY2FsZWIgICAgICAgIHNOYU4gIDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDAyNCBzY2FsZWIgICAgICAgLXNOYU4gIDEgLT4gLU5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMjUgc2NhbGViICAgIDQgICAgTmFOICAgIC0+IE5hTg0KK3NjYngwMjYgc2NhbGViIC1JbmYgICAtTmFOICAgIC0+IC1OYU4NCitzY2J4MDI3IHNjYWxlYiAgICA0ICAgc05hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitzY2J4MDI4IHNjYWxlYiAgSW5mICAtc05hTiAgICAtPiAtTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gbm9uLWludGVnZXIgUkhTDQorc2NieDAzMCBzY2FsZWIgIDEuMjMgICAgMSAgICAtPiAgMTIuMw0KK3NjYngwMzEgc2NhbGViICAxLjIzICAgIDEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzIgc2NhbGViICAxLjIzICAgIDEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzMgc2NhbGViICAxLjIzICAgIDEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzQgc2NhbGViICAxLjIzICAgIDAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzUgc2NhbGViICAxLjIzICAgIDAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzYgc2NhbGViICAxLjIzICAgIDAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitzY2J4MDM3IHNjYWxlYiAgMS4yMyAgIC0xICAgIC0+ICAwLjEyMw0KK3NjYngwMzggc2NhbGViICAxLjIzICAgLTEuMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwMzkgc2NhbGViICAxLjIzICAgLTEuMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwNDAgc2NhbGViICAxLjIzICAgLTEuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwNDEgc2NhbGViICAxLjIzICAgLTAuMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwNDIgc2NhbGViICAxLjIzICAgLTAuMTEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwNDMgc2NhbGViICAxLjIzICAgLTAuOTk5OTk5OTk5IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitzY2J4MDQ0IHNjYWxlYiAgMS4yMyAgICAwLjEgICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDA0NSBzY2FsZWIgIDEuMjMgICAgMUUrMSAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngwNDYgc2NhbGViICAxLjIzICAgIDEuMTIzNEUrNiAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCitzY2J4MDQ3IHNjYWxlYiAgMS4yMyAgICAxLjEyM0UrNCAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorDQorc2NieDEyMCBzY2FsZWIgIDEuMjMgICAgMjAxNSAgICAgICAgLT4gIEluZmluaXR5IE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK3NjYngxMjEgc2NhbGViICAxLjIzICAgIDIwMTYgICAgICAgIC0+ICBJbmZpbml0eSBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitzY2J4MTIyIHNjYWxlYiAgMS4yMyAgICAyMDE3ICAgICAgICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDEyMyBzY2FsZWIgIDEuMjMgICAgMjAxOCAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngxMjQgc2NhbGViICAxLjIzICAgLTIwMTUgICAgICAgIC0+ICAwRS0xMDA3IFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitzY2J4MTI1IHNjYWxlYiAgMS4yMyAgIC0yMDE2ICAgICAgICAtPiAgMEUtMTAwNyBVbmRlcmZsb3cgU3Vibm9ybWFsIEluZXhhY3QgUm91bmRlZCBDbGFtcGVkDQorc2NieDEyNiBzY2FsZWIgIDEuMjMgICAtMjAxNyAgICAgICAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYngxMjcgc2NhbGViICAxLjIzICAgLTIwMTggICAgICAgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBOYU5zLCBub24tMCBwYXlsb2FkDQorLS0gcHJvcGFnYXRpbmcgTmFOcw0KK3NjYng4NjEgc2NhbGViICBOYU4wMSAgIC1JbmYgICAgIC0+ICBOYU4xDQorc2NieDg2MiBzY2FsZWIgLU5hTjAyICAgLTEwMDAgICAgLT4gLU5hTjINCitzY2J4ODYzIHNjYWxlYiAgTmFOMDMgICAgMTAwMCAgICAtPiAgTmFOMw0KK3NjYng4NjQgc2NhbGViICBOYU4wNCAgICBJbmYgICAgIC0+ICBOYU40DQorc2NieDg2NSBzY2FsZWIgIE5hTjA1ICAgIE5hTjYxICAgLT4gIE5hTjUNCitzY2J4ODY2IHNjYWxlYiAtSW5mICAgICAtTmFONzEgICAtPiAtTmFONzENCitzY2J4ODY3IHNjYWxlYiAtMTAwMCAgICAgTmFOODEgICAtPiAgTmFOODENCitzY2J4ODY4IHNjYWxlYiAgMTAwMCAgICAgTmFOOTEgICAtPiAgTmFOOTENCitzY2J4ODY5IHNjYWxlYiAgSW5mICAgICAgTmFOMTAxICAtPiAgTmFOMTAxDQorc2NieDg3MSBzY2FsZWIgIHNOYU4wMTEgIC1JbmYgICAgLT4gIE5hTjExICBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYng4NzIgc2NhbGViICBzTmFOMDEyICAtMTAwMCAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24NCitzY2J4ODczIHNjYWxlYiAtc05hTjAxMyAgIDEwMDAgICAtPiAtTmFOMTMgIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDg3NCBzY2FsZWIgIHNOYU4wMTQgICBOYU4xNzEgLT4gIE5hTjE0ICBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYng4NzUgc2NhbGViICBzTmFOMDE1ICBzTmFOMTgxIC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24NCitzY2J4ODc2IHNjYWxlYiAgTmFOMDE2ICAgc05hTjE5MSAtPiAgTmFOMTkxIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDg3NyBzY2FsZWIgLUluZiAgICAgIHNOYU4yMDEgLT4gIE5hTjIwMSBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYng4Nzggc2NhbGViIC0xMDAwICAgICBzTmFOMjExIC0+ICBOYU4yMTEgSW52YWxpZF9vcGVyYXRpb24NCitzY2J4ODc5IHNjYWxlYiAgMTAwMCAgICAtc05hTjIyMSAtPiAtTmFOMjIxIEludmFsaWRfb3BlcmF0aW9uDQorc2NieDg4MCBzY2FsZWIgIEluZiAgICAgIHNOYU4yMzEgLT4gIE5hTjIzMSBJbnZhbGlkX29wZXJhdGlvbg0KK3NjYng4ODEgc2NhbGViICBOYU4wMjUgICBzTmFOMjQxIC0+ICBOYU4yNDEgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBmaW5pdGVzDQorc2NieDA1MSBzY2FsZWIgICAgICAgICAgNyAgIC0yICAtPiAwLjA3DQorc2NieDA1MiBzY2FsZWIgICAgICAgICAtNyAgIC0yICAtPiAtMC4wNw0KK3NjYngwNTMgc2NhbGViICAgICAgICAgNzUgICAtMiAgLT4gMC43NQ0KK3NjYngwNTQgc2NhbGViICAgICAgICAtNzUgICAtMiAgLT4gLTAuNzUNCitzY2J4MDU1IHNjYWxlYiAgICAgICA3LjUwICAgLTIgIC0+IDAuMDc1MA0KK3NjYngwNTYgc2NhbGViICAgICAgLTcuNTAgICAtMiAgLT4gLTAuMDc1MA0KK3NjYngwNTcgc2NhbGViICAgICAgIDcuNTAwICAtMiAgLT4gMC4wNzUwMA0KK3NjYngwNTggc2NhbGViICAgICAgLTcuNTAwICAtMiAgLT4gLTAuMDc1MDANCitzY2J4MDYxIHNjYWxlYiAgICAgICAgICA3ICAgLTEgIC0+IDAuNw0KK3NjYngwNjIgc2NhbGViICAgICAgICAgLTcgICAtMSAgLT4gLTAuNw0KK3NjYngwNjMgc2NhbGViICAgICAgICAgNzUgICAtMSAgLT4gNy41DQorc2NieDA2NCBzY2FsZWIgICAgICAgIC03NSAgIC0xICAtPiAtNy41DQorc2NieDA2NSBzY2FsZWIgICAgICAgNy41MCAgIC0xICAtPiAwLjc1MA0KK3NjYngwNjYgc2NhbGViICAgICAgLTcuNTAgICAtMSAgLT4gLTAuNzUwDQorc2NieDA2NyBzY2FsZWIgICAgICAgNy41MDAgIC0xICAtPiAwLjc1MDANCitzY2J4MDY4IHNjYWxlYiAgICAgIC03LjUwMCAgLTEgIC0+IC0wLjc1MDANCitzY2J4MDcxIHNjYWxlYiAgICAgICAgICA3ICAgIDAgIC0+IDcNCitzY2J4MDcyIHNjYWxlYiAgICAgICAgIC03ICAgIDAgIC0+IC03DQorc2NieDA3MyBzY2FsZWIgICAgICAgICA3NSAgICAwICAtPiA3NQ0KK3NjYngwNzQgc2NhbGViICAgICAgICAtNzUgICAgMCAgLT4gLTc1DQorc2NieDA3NSBzY2FsZWIgICAgICAgNy41MCAgICAwICAtPiA3LjUwDQorc2NieDA3NiBzY2FsZWIgICAgICAtNy41MCAgICAwICAtPiAtNy41MA0KK3NjYngwNzcgc2NhbGViICAgICAgIDcuNTAwICAgMCAgLT4gNy41MDANCitzY2J4MDc4IHNjYWxlYiAgICAgIC03LjUwMCAgIDAgIC0+IC03LjUwMA0KK3NjYngwODEgc2NhbGViICAgICAgICAgIDcgICAgMSAgLT4gN0UrMQ0KK3NjYngwODIgc2NhbGViICAgICAgICAgLTcgICAgMSAgLT4gLTdFKzENCitzY2J4MDgzIHNjYWxlYiAgICAgICAgIDc1ICAgIDEgIC0+IDcuNUUrMg0KK3NjYngwODQgc2NhbGViICAgICAgICAtNzUgICAgMSAgLT4gLTcuNUUrMg0KK3NjYngwODUgc2NhbGViICAgICAgIDcuNTAgICAgMSAgLT4gNzUuMA0KK3NjYngwODYgc2NhbGViICAgICAgLTcuNTAgICAgMSAgLT4gLTc1LjANCitzY2J4MDg3IHNjYWxlYiAgICAgICA3LjUwMCAgIDEgIC0+IDc1LjAwDQorc2NieDA4OCBzY2FsZWIgICAgICAtNy41MDAgICAxICAtPiAtNzUuMDANCitzY2J4MDkxIHNjYWxlYiAgICAgICAgICA3ICAgIDIgIC0+IDdFKzINCitzY2J4MDkyIHNjYWxlYiAgICAgICAgIC03ICAgIDIgIC0+IC03RSsyDQorc2NieDA5MyBzY2FsZWIgICAgICAgICA3NSAgICAyICAtPiA3LjVFKzMNCitzY2J4MDk0IHNjYWxlYiAgICAgICAgLTc1ICAgIDIgIC0+IC03LjVFKzMNCitzY2J4MDk1IHNjYWxlYiAgICAgICA3LjUwICAgIDIgIC0+IDc1MA0KK3NjYngwOTYgc2NhbGViICAgICAgLTcuNTAgICAgMiAgLT4gLTc1MA0KK3NjYngwOTcgc2NhbGViICAgICAgIDcuNTAwICAgMiAgLT4gNzUwLjANCitzY2J4MDk4IHNjYWxlYiAgICAgIC03LjUwMCAgIDIgIC0+IC03NTAuMA0KKw0KKy0tIHplcm9zDQorc2NieDExMSBzY2FsZWIgICAgICAgICAgMCAgMSAtPiAwRSsxDQorc2NieDExMiBzY2FsZWIgICAgICAgICAtMCAgMiAtPiAtMEUrMg0KK3NjYngxMTMgc2NhbGViICAgICAgIDBFKzQgIDMgLT4gMEUrNw0KK3NjYngxMTQgc2NhbGViICAgICAgLTBFKzQgIDQgLT4gLTBFKzgNCitzY2J4MTE1IHNjYWxlYiAgICAgMC4wMDAwICA1IC0+IDBFKzENCitzY2J4MTE2IHNjYWxlYiAgICAtMC4wMDAwICA2IC0+IC0wRSsyDQorc2NieDExNyBzY2FsZWIgICAgICAwRS0xNDEgNyAtPiAwRS0xMzQNCitzY2J4MTE4IHNjYWxlYiAgICAgLTBFLTE0MSA4IC0+IC0wRS0xMzMNCisNCistLSBObWF4LCBObWluLCBOdGlueQ0KK3NjYngxMzIgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgKzk5OSAtPiBJbmZpbml0eSAgICBPdmVyZmxvdyBJbmV4YWN0IFJvdW5kZWQNCitzY2J4MTMzIHNjYWxlYiAgOS45OTk5OTk5OUUrOTk5ICArMTAgLT4gSW5maW5pdHkgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK3NjYngxMzQgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgICsxICAtPiBJbmZpbml0eSAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorc2NieDEzNSBzY2FsZWIgIDkuOTk5OTk5OTlFKzk5OSAgIDAgIC0+IDkuOTk5OTk5OTlFKzk5OQ0KK3NjYngxMzYgc2NhbGViICA5Ljk5OTk5OTk5RSs5OTkgIC0xICAtPiA5Ljk5OTk5OTk5RSs5OTgNCitzY2J4MTM3IHNjYWxlYiAgMUUtOTk5ICAgICAgICAgICArMSAgLT4gMUUtOTk4DQorc2NieDEzOCBzY2FsZWIgIDFFLTk5OSAgICAgICAgICAgLTAgIC0+IDFFLTk5OQ0KK3NjYngxMzkgc2NhbGViICAxRS05OTkgICAgICAgICAgIC0xICAtPiAxRS0xMDAwICAgICAgICAgU3Vibm9ybWFsDQorc2NieDE0MCBzY2FsZWIgIDEuMDAwMDAwMDBFLTk5OSAgKzEgIC0+IDEuMDAwMDAwMDBFLTk5OA0KK3NjYngxNDEgc2NhbGViICAxLjAwMDAwMDAwRS05OTkgICAwICAtPiAxLjAwMDAwMDAwRS05OTkNCitzY2J4MTQyIHNjYWxlYiAgMS4wMDAwMDAwMEUtOTk5ICAtMSAgLT4gMS4wMDAwMDAwRS0xMDAwIFN1Ym5vcm1hbCBSb3VuZGVkDQorc2NieDE0MyBzY2FsZWIgIDFFLTEwMDcgICAgICAgICAgKzEgIC0+IDFFLTEwMDYgICAgICAgICBTdWJub3JtYWwNCitzY2J4MTQ0IHNjYWxlYiAgMUUtMTAwNyAgICAgICAgICAtMCAgLT4gMUUtMTAwNyAgICAgICAgIFN1Ym5vcm1hbA0KK3NjYngxNDUgc2NhbGViICAxRS0xMDA3ICAgICAgICAgIC0xICAtPiAwRS0xMDA3ICAgICAgICAgVW5kZXJmbG93IFN1Ym5vcm1hbCBJbmV4YWN0IFJvdW5kZWQgQ2xhbXBlZA0KKw0KK3NjYngxNTAgc2NhbGViICAtMUUtMTAwNyAgICAgICAgICsxICAtPiAtMUUtMTAwNiAgICAgICAgU3Vibm9ybWFsDQorc2NieDE1MSBzY2FsZWIgIC0xRS0xMDA3ICAgICAgICAgLTAgIC0+IC0xRS0xMDA3ICAgICAgICBTdWJub3JtYWwNCitzY2J4MTUyIHNjYWxlYiAgLTFFLTEwMDcgICAgICAgICAtMSAgLT4gLTBFLTEwMDcgICAgICAgIFVuZGVyZmxvdyBTdWJub3JtYWwgSW5leGFjdCBSb3VuZGVkIENsYW1wZWQNCitzY2J4MTUzIHNjYWxlYiAgLTEuMDAwMDAwMDBFLTk5OSArMSAgLT4gLTEuMDAwMDAwMDBFLTk5OA0KK3NjYngxNTQgc2NhbGViICAtMS4wMDAwMDAwMEUtOTk5ICswICAtPiAtMS4wMDAwMDAwMEUtOTk5DQorc2NieDE1NSBzY2FsZWIgIC0xLjAwMDAwMDAwRS05OTkgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAgU3Vibm9ybWFsIFJvdW5kZWQNCitzY2J4MTU2IHNjYWxlYiAgLTFFLTk5OSAgICAgICAgICArMSAgLT4gLTFFLTk5OA0KK3NjYngxNTcgc2NhbGViICAtMUUtOTk5ICAgICAgICAgIC0wICAtPiAtMUUtOTk5DQorc2NieDE1OCBzY2FsZWIgIC0xRS05OTkgICAgICAgICAgLTEgIC0+IC0xRS0xMDAwICAgICAgICAgU3Vibm9ybWFsDQorc2NieDE1OSBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzEgIC0+IC1JbmZpbml0eSAgICAgICAgT3ZlcmZsb3cgSW5leGFjdCBSb3VuZGVkDQorc2NieDE2MCBzY2FsZWIgIC05Ljk5OTk5OTk5RSs5OTkgKzAgIC0+IC05Ljk5OTk5OTk5RSs5OTkNCitzY2J4MTYxIHNjYWxlYiAgLTkuOTk5OTk5OTlFKzk5OSAtMSAgLT4gLTkuOTk5OTk5OTlFKzk5OA0KK3NjYngxNjIgc2NhbGViICAtOUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KK3NjYngxNjMgc2NhbGViICAtMUUrOTk5ICAgICAgICAgICsxICAtPiAtSW5maW5pdHkgICAgICAgIE92ZXJmbG93IEluZXhhY3QgUm91bmRlZA0KKw0KKy0tIEtyYWggZXhhbXBsZXMNCitwcmVjaXNpb246ICAgMzQNCittYXhFeHBvbmVudDogOTk5OTk5OTk5DQorbWluRXhwb25lbnQ6IC05OTk5OTk5OTkNCistLSBpbnRlZ2VyIG92ZXJmbG93IGluIDMuNjEgb3IgZWFybGllcg0KK3NjYngxNjQgc2NhbGViICAxRS05OTk5OTk5OTkgIC0xMjAwMDAwMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBvdXQgb2YgcmFuZ2UNCitzY2J4MTY1IHNjYWxlYiAgLTFFLTk5OTk5OTk5OSAgKzEyMDAwMDAwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9zaGlmdC5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKaW5kZXggNzg4MzhjYy4uM2ZhYzcyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3NoaWZ0LmRlY1Rlc3QKQEAgLTEsMjUwICsxLDI1MCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBzaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1wcmVjaXNpb246ICAgOQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiA5OTkKLW1pbkV4cG9uZW50OiAtOTk5Ci0KLS0tIFNhbml0eSBjaGVjawotc2hpeDAwMSBzaGlmdCAgICAgICAgICAwICAgIDAgIC0+ICAwCi1zaGl4MDAyIHNoaWZ0ICAgICAgICAgIDAgICAgMiAgLT4gIDAKLXNoaXgwMDMgc2hpZnQgICAgICAgICAgMSAgICAyICAtPiAgMTAwCi1zaGl4MDA0IHNoaWZ0ICAgICAgICAgIDEgICAgOCAgLT4gIDEwMDAwMDAwMAotc2hpeDAwNSBzaGlmdCAgICAgICAgICAxICAgIDkgIC0+ICAwCi1zaGl4MDA2IHNoaWZ0ICAgICAgICAgIDEgICAtMSAgLT4gIDAKLXNoaXgwMDcgc2hpZnQgIDEyMzQ1Njc4OSAgIC0xICAtPiAgMTIzNDU2NzgKLXNoaXgwMDggc2hpZnQgIDEyMzQ1Njc4OSAgIC04ICAtPiAgMQotc2hpeDAwOSBzaGlmdCAgMTIzNDU2Nzg5ICAgLTkgIC0+ICAwCi1zaGl4MDEwIHNoaWZ0ICAgICAgICAgIDAgICAtMiAgLT4gIDAKLQotLS0gcmhzIG11c3QgYmUgYW4gaW50ZWdlcgotc2hpeDAxMSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4MDEyIHNoaWZ0ICAgICAgICAxICAgIDEuMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXgwMTMgc2hpZnQgICAgICAgIDEgICAgMC4xICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDAxNCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4MDE1IHNoaWZ0ICAgICAgICAxICAgIDFFKzEgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXgwMTYgc2hpZnQgICAgICAgIDEgICAgMUUrOTkgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDAxNyBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4MDE4IHNoaWZ0ICAgICAgICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGFuZCB8cmhzfCA8PSBwcmVjaXNpb24KLXNoaXgwMjAgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDAyMSBzaGlmdCAgICAgICAgMSAgICAtMTAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4MDIyIHNoaWZ0ICAgICAgICAxICAgICAxMCAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXgwMjMgc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBmdWxsIHNoaWZ0aW5nIHBhdHRlcm4KLXNoaXgwMzAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDAKLXNoaXgwMzEgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOCAgIC0+IDEKLXNoaXgwMzIgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNyAgIC0+IDEyCi1zaGl4MDMzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiAxMjMKLXNoaXgwMzQgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNSAgIC0+IDEyMzQKLXNoaXgwMzUgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtNCAgIC0+IDEyMzQ1Ci1zaGl4MDM2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiAxMjM0NTYKLXNoaXgwMzcgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMiAgIC0+IDEyMzQ1NjcKLXNoaXgwMzggc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtMSAgIC0+IDEyMzQ1Njc4Ci1zaGl4MDM5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkKLXNoaXgwNDAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMCAgIC0+IDEyMzQ1Njc4OQotc2hpeDA0MSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICsxICAgLT4gMjM0NTY3ODkwCi1zaGl4MDQyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDAKLXNoaXgwNDMgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArMyAgIC0+IDQ1Njc4OTAwMAotc2hpeDA0NCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs0ICAgLT4gNTY3ODkwMDAwCi1zaGl4MDQ1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MDAwMDAKLXNoaXgwNDYgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArNiAgIC0+IDc4OTAwMDAwMAotc2hpeDA0NyBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgICs3ICAgLT4gODkwMDAwMDAwCi1zaGl4MDQ4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MDAwMDAwMDAKLXNoaXgwNDkgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICArOSAgIC0+IDAKLQotLS0gZnJvbSBleGFtcGxlcwotc2hpeDA1MSBzaGlmdCAzNCAgICAgICAgOCAgIC0+ICAnNDAwMDAwMDAwJwotc2hpeDA1MiBzaGlmdCAxMiAgICAgICAgOSAgIC0+ICAnMCcKLXNoaXgwNTMgc2hpZnQgMTIzNDU2Nzg5IC0yICAtPiAgJzEyMzQ1NjcnCi1zaGl4MDU0IHNoaWZ0IDEyMzQ1Njc4OSAwICAgLT4gICcxMjM0NTY3ODknCi1zaGl4MDU1IHNoaWZ0IDEyMzQ1Njc4OSArMiAgLT4gICczNDU2Nzg5MDAnCi0KLS0tIHplcm9zCi1zaGl4MDYwIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFLTEwCi1zaGl4MDYxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwCi1zaGl4MDYyIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgIDAuMDAwCi1zaGl4MDYzIHNoaWZ0ICAwLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgIDAuMDAwCi1zaGl4MDY0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwCi1zaGl4MDY1IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFKzEwCi1zaGl4MDY2IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFLTEwCi1zaGl4MDY3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwCi1zaGl4MDY4IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgKzkgICAtPiAgLTAuMDAwCi1zaGl4MDY5IHNoaWZ0IC0wLjAwMCAgICAgICAgICAgICAgLTkgICAtPiAgLTAuMDAwCi1zaGl4MDcwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwCi1zaGl4MDcxIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFKzEwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci1zaGl4MTQxIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xICAtPiA5Ljk5OTk5OTlFKzk5OAotc2hpeDE0MiBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtOCAgLT4gOUUrOTkxCi1zaGl4MTQzIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTkwRSs5OTkKLXNoaXgxNDQgc2hpZnQgIDkuOTk5OTk5OTlFKzk5OSAgICAgIDggIC0+IDkuMDAwMDAwMDBFKzk5OQotc2hpeDE0NSBzaGlmdCAgMUUtOTk5ICAgICAgICAgICAgICAtMSAgLT4gMEUtOTk5Ci1zaGl4MTQ2IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAwRS05OTkKLXNoaXgxNDcgc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgIDEgIC0+IDEuMEUtOTk4Ci1zaGl4MTQ4IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICA4ICAtPiAxLjAwMDAwMDAwRS05OTEKLXNoaXgxNTEgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMAotc2hpeDE1MiBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gMUUtMTAwNwotc2hpeDE1MyBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgMSAgLT4gMEUtMTAwNwotc2hpeDE1NCBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNwotc2hpeDE1NSBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAtMSAgLT4gOS4wMDAwMDAwRS0xMDAwCi1zaGl4MTU2IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiA5RS0xMDA3Ci1zaGl4MTU3IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAwRS0xMDA3Ci1zaGl4MTU4IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICA4ICAtPiAwRS0xMDA3Ci1zaGl4MTYwIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC0xICAtPiAwRS0xMDA3Ci1zaGl4MTYxIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAwRS0xMDA3Ci1zaGl4MTYyIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgICAxICAtPiAxLjBFLTEwMDYKLXNoaXgxNjMgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5OQotLS0gIG5lZ2F0aXZlcwotc2hpeDE3MSBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gLTkuOTk5OTk5OUUrOTk4Ci1zaGl4MTcyIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiAtOUUrOTkxCi1zaGl4MTczIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5MEUrOTk5Ci1zaGl4MTc0IHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiAtOS4wMDAwMDAwMEUrOTk5Ci1zaGl4MTc1IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC0xICAtPiAtMEUtOTk5Ci1zaGl4MTc2IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMEUtOTk5Ci1zaGl4MTc3IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgICAxICAtPiAtMS4wRS05OTgKLXNoaXgxNzggc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IC0xLjAwMDAwMDAwRS05OTEKLXNoaXgxODEgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDAKLXNoaXgxODIgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC0xRS0xMDA3Ci1zaGl4MTgzIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNwotc2hpeDE4NCBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcKLXNoaXgxODUgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC05LjAwMDAwMDBFLTEwMDAKLXNoaXgxODYgc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IC05RS0xMDA3Ci1zaGl4MTg3IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNwotc2hpeDE4OCBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcKLXNoaXgxOTAgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IC0wRS0xMDA3Ci1zaGl4MTkxIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMEUtMTAwNwotc2hpeDE5MiBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtMTAwNgotc2hpeDE5MyBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5OQotCi0tLSBtb3JlIG5lZ2F0aXZlcyAob2Ygc2FuaXRpZXMpCi1zaGl4MjAxIHNoaWZ0ICAgICAgICAgLTAgICAgMCAgLT4gIC0wCi1zaGl4MjAyIHNoaWZ0ICAgICAgICAgLTAgICAgMiAgLT4gIC0wCi1zaGl4MjAzIHNoaWZ0ICAgICAgICAgLTEgICAgMiAgLT4gIC0xMDAKLXNoaXgyMDQgc2hpZnQgICAgICAgICAtMSAgICA4ICAtPiAgLTEwMDAwMDAwMAotc2hpeDIwNSBzaGlmdCAgICAgICAgIC0xICAgIDkgIC0+ICAtMAotc2hpeDIwNiBzaGlmdCAgICAgICAgIC0xICAgLTEgIC0+ICAtMAotc2hpeDIwNyBzaGlmdCAtMTIzNDU2Nzg5ICAgLTEgIC0+ICAtMTIzNDU2NzgKLXNoaXgyMDggc2hpZnQgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTEKLXNoaXgyMDkgc2hpZnQgLTEyMzQ1Njc4OSAgIC05ICAtPiAgLTAKLXNoaXgyMTAgc2hpZnQgICAgICAgICAtMCAgIC0yICAtPiAgLTAKLXNoaXgyMTEgc2hpZnQgICAgICAgICAtMCAgIC0wICAtPiAgLTAKLQotCi0tLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbAotc2hpeDc4MSBzaGlmdCAtSW5mICAtOCAgICAgLT4gLUluZmluaXR5Ci1zaGl4NzgyIHNoaWZ0IC1JbmYgIC0xICAgICAtPiAtSW5maW5pdHkKLXNoaXg3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQotc2hpeDc4NCBzaGlmdCAtSW5mICAgMCAgICAgLT4gLUluZmluaXR5Ci1zaGl4Nzg1IHNoaWZ0IC1JbmYgICAxICAgICAtPiAtSW5maW5pdHkKLXNoaXg3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQotc2hpeDc4NyBzaGlmdCAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4Nzg4IHNoaWZ0IC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXg3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDc5MCBzaGlmdCAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4NzkxIHNoaWZ0ICAwICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXg3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDc5MyBzaGlmdCAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4Nzk0IHNoaWZ0ICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQotc2hpeDgwMCBzaGlmdCAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODAxIHNoaWZ0ICBJbmYgIC04ICAgICAtPiBJbmZpbml0eQotc2hpeDgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkKLXNoaXg4MDMgc2hpZnQgIEluZiAgLTAgICAgIC0+IEluZmluaXR5Ci1zaGl4ODA0IHNoaWZ0ICBJbmYgICAwICAgICAtPiBJbmZpbml0eQotc2hpeDgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkKLXNoaXg4MDYgc2hpZnQgIEluZiAgIDggICAgIC0+IEluZmluaXR5Ci1zaGl4ODA3IHNoaWZ0ICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDgwOSBzaGlmdCAtSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODEwIHNoaWZ0IC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDgxMiBzaGlmdCAgMCAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODEzIHNoaWZ0ICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDgxNSBzaGlmdCAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLXNoaXg4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4KLXNoaXg4MjIgc2hpZnQgIE5hTiAtMTAwMCAgIC0+ICBOYU4KLXNoaXg4MjMgc2hpZnQgIE5hTiAtMSAgICAgIC0+ICBOYU4KLXNoaXg4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4KLXNoaXg4MjUgc2hpZnQgIE5hTiAgMCAgICAgIC0+ICBOYU4KLXNoaXg4MjYgc2hpZnQgIE5hTiAgMSAgICAgIC0+ICBOYU4KLXNoaXg4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4KLXNoaXg4Mjggc2hpZnQgIE5hTiAgSW5mICAgIC0+ICBOYU4KLXNoaXg4Mjkgc2hpZnQgIE5hTiAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzEgc2hpZnQgLTEwMDAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzIgc2hpZnQgLTEgICAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzQgc2hpZnQgIDAgICAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzUgc2hpZnQgIDEgICAgTmFOICAgIC0+ICBOYU4KLXNoaXg4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4KLXNoaXg4Mzcgc2hpZnQgIEluZiAgTmFOICAgIC0+ICBOYU4KLQotc2hpeDg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NDIgc2hpZnQgIHNOYU4gLTEwMDAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODQzIHNoaWZ0ICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NDUgc2hpZnQgIHNOYU4gIDAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODQ2IHNoaWZ0ICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NDggc2hpZnQgIHNOYU4gIE5hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODQ5IHNoaWZ0ICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NTEgc2hpZnQgLUluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODUyIHNoaWZ0IC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NTQgc2hpZnQgLTAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODU1IHNoaWZ0ICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NTcgc2hpZnQgIDEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi1zaGl4ODU4IHNoaWZ0ICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwotc2hpeDg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjEKLXNoaXg4NjIgc2hpZnQgK05hTjIgICAtMTAwMCAgIC0+ICBOYU4yCi1zaGl4ODYzIHNoaWZ0ICBOYU4zICAgIDEwMDAgICAtPiAgTmFOMwotc2hpeDg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQKLXNoaXg4NjUgc2hpZnQgIE5hTjUgICArTmFONiAgIC0+ICBOYU41Ci1zaGl4ODY2IHNoaWZ0IC1JbmYgICAgIE5hTjcgICAtPiAgTmFONwotc2hpeDg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgKLXNoaXg4Njggc2hpZnQgIDEwMDAgICAgTmFOOSAgIC0+ICBOYU45Ci1zaGl4ODY5IHNoaWZ0ICBJbmYgICAgK05hTjEwICAtPiAgTmFOMTAKLXNoaXg4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NzIgc2hpZnQgIHNOYU4xMiAgLTEwMDAgIC0+ICBOYU4xMiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NzMgc2hpZnQgIHNOYU4xMyAgIDEwMDAgIC0+ICBOYU4xMyAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NzUgc2hpZnQgIHNOYU4xNSAgc05hTjE4IC0+ICBOYU4xNSAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4NzYgc2hpZnQgIE5hTjE2ICAgc05hTjE5IC0+ICBOYU4xOSAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4Nzggc2hpZnQgLTEwMDAgICAgc05hTjIxIC0+ICBOYU4yMSAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4Nzkgc2hpZnQgIDEwMDAgICAgc05hTjIyIC0+ICBOYU4yMiAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4ODEgc2hpZnQgK05hTjI1ICArc05hTjI0IC0+ICBOYU4yNCAgSW52YWxpZF9vcGVyYXRpb24KLXNoaXg4ODIgc2hpZnQgLU5hTjI2ICAgIE5hTjI4IC0+IC1OYU4yNgotc2hpeDg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbgotc2hpeDg4NCBzaGlmdCAgMTAwMCAgICAtTmFOMzAgLT4gLU5hTjMwCi1zaGl4ODg1IHNoaWZ0ICAxMDAwICAgLXNOYU4zMSAtPiAtTmFOMzEgIEludmFsaWRfb3BlcmF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBzaGlmdC5kZWNUZXN0IC0tIHNoaWZ0IGNvZWZmaWNpZW50IGxlZnQgb3IgcmlnaHQgICAgICAgICAgICAgICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMTk4MSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorZXh0ZW5kZWQ6ICAgIDENCitwcmVjaXNpb246ICAgOQ0KK3JvdW5kaW5nOiAgICBoYWxmX3VwDQorbWF4RXhwb25lbnQ6IDk5OQ0KK21pbkV4cG9uZW50OiAtOTk5DQorDQorLS0gU2FuaXR5IGNoZWNrDQorc2hpeDAwMSBzaGlmdCAgICAgICAgICAwICAgIDAgIC0+ICAwDQorc2hpeDAwMiBzaGlmdCAgICAgICAgICAwICAgIDIgIC0+ICAwDQorc2hpeDAwMyBzaGlmdCAgICAgICAgICAxICAgIDIgIC0+ICAxMDANCitzaGl4MDA0IHNoaWZ0ICAgICAgICAgIDEgICAgOCAgLT4gIDEwMDAwMDAwMA0KK3NoaXgwMDUgc2hpZnQgICAgICAgICAgMSAgICA5ICAtPiAgMA0KK3NoaXgwMDYgc2hpZnQgICAgICAgICAgMSAgIC0xICAtPiAgMA0KK3NoaXgwMDcgc2hpZnQgIDEyMzQ1Njc4OSAgIC0xICAtPiAgMTIzNDU2NzgNCitzaGl4MDA4IHNoaWZ0ICAxMjM0NTY3ODkgICAtOCAgLT4gIDENCitzaGl4MDA5IHNoaWZ0ICAxMjM0NTY3ODkgICAtOSAgLT4gIDANCitzaGl4MDEwIHNoaWZ0ICAgICAgICAgIDAgICAtMiAgLT4gIDANCisNCistLSByaHMgbXVzdCBiZSBhbiBpbnRlZ2VyDQorc2hpeDAxMSBzaGlmdCAgICAgICAgMSAgICAxLjUgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxMiBzaGlmdCAgICAgICAgMSAgICAxLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxMyBzaGlmdCAgICAgICAgMSAgICAwLjEgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxNCBzaGlmdCAgICAgICAgMSAgICAwLjAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxNSBzaGlmdCAgICAgICAgMSAgICAxRSsxICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxNiBzaGlmdCAgICAgICAgMSAgICAxRSs5OSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxNyBzaGlmdCAgICAgICAgMSAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDAxOCBzaGlmdCAgICAgICAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gYW5kIHxyaHN8IDw9IHByZWNpc2lvbg0KK3NoaXgwMjAgc2hpZnQgICAgICAgIDEgICAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXgwMjEgc2hpZnQgICAgICAgIDEgICAgLTEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXgwMjIgc2hpZnQgICAgICAgIDEgICAgIDEwICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXgwMjMgc2hpZnQgICAgICAgIDEgICAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIGZ1bGwgc2hpZnRpbmcgcGF0dGVybg0KK3NoaXgwMzAgc2hpZnQgIDEyMzQ1Njc4OSAgICAgICAgICAtOSAgIC0+IDANCitzaGl4MDMxIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTggICAtPiAxDQorc2hpeDAzMiBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC03ICAgLT4gMTINCitzaGl4MDMzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTYgICAtPiAxMjMNCitzaGl4MDM0IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTUgICAtPiAxMjM0DQorc2hpeDAzNSBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC00ICAgLT4gMTIzNDUNCitzaGl4MDM2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTMgICAtPiAxMjM0NTYNCitzaGl4MDM3IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTIgICAtPiAxMjM0NTY3DQorc2hpeDAzOCBzaGlmdCAgMTIzNDU2Nzg5ICAgICAgICAgIC0xICAgLT4gMTIzNDU2NzgNCitzaGl4MDM5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgLTAgICAtPiAxMjM0NTY3ODkNCitzaGl4MDQwIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzAgICAtPiAxMjM0NTY3ODkNCitzaGl4MDQxIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzEgICAtPiAyMzQ1Njc4OTANCitzaGl4MDQyIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzIgICAtPiAzNDU2Nzg5MDANCitzaGl4MDQzIHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzMgICAtPiA0NTY3ODkwMDANCitzaGl4MDQ0IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzQgICAtPiA1Njc4OTAwMDANCitzaGl4MDQ1IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzUgICAtPiA2Nzg5MDAwMDANCitzaGl4MDQ2IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzYgICAtPiA3ODkwMDAwMDANCitzaGl4MDQ3IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzcgICAtPiA4OTAwMDAwMDANCitzaGl4MDQ4IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzggICAtPiA5MDAwMDAwMDANCitzaGl4MDQ5IHNoaWZ0ICAxMjM0NTY3ODkgICAgICAgICAgKzkgICAtPiAwDQorDQorLS0gZnJvbSBleGFtcGxlcw0KK3NoaXgwNTEgc2hpZnQgMzQgICAgICAgIDggICAtPiAgJzQwMDAwMDAwMCcNCitzaGl4MDUyIHNoaWZ0IDEyICAgICAgICA5ICAgLT4gICcwJw0KK3NoaXgwNTMgc2hpZnQgMTIzNDU2Nzg5IC0yICAtPiAgJzEyMzQ1NjcnDQorc2hpeDA1NCBzaGlmdCAxMjM0NTY3ODkgMCAgIC0+ICAnMTIzNDU2Nzg5Jw0KK3NoaXgwNTUgc2hpZnQgMTIzNDU2Nzg5ICsyICAtPiAgJzM0NTY3ODkwMCcNCisNCistLSB6ZXJvcw0KK3NoaXgwNjAgc2hpZnQgIDBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAgMEUtMTANCitzaGl4MDYxIHNoaWZ0ICAwRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgIDBFLTEwDQorc2hpeDA2MiBzaGlmdCAgMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gICAwLjAwMA0KK3NoaXgwNjMgc2hpZnQgIDAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAgMC4wMDANCitzaGl4MDY0IHNoaWZ0ICAwRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgIDBFKzEwDQorc2hpeDA2NSBzaGlmdCAgMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gICAwRSsxMA0KK3NoaXgwNjYgc2hpZnQgLTBFLTEwICAgICAgICAgICAgICArOSAgIC0+ICAtMEUtMTANCitzaGl4MDY3IHNoaWZ0IC0wRS0xMCAgICAgICAgICAgICAgLTkgICAtPiAgLTBFLTEwDQorc2hpeDA2OCBzaGlmdCAtMC4wMDAgICAgICAgICAgICAgICs5ICAgLT4gIC0wLjAwMA0KK3NoaXgwNjkgc2hpZnQgLTAuMDAwICAgICAgICAgICAgICAtOSAgIC0+ICAtMC4wMDANCitzaGl4MDcwIHNoaWZ0IC0wRSsxMCAgICAgICAgICAgICAgKzkgICAtPiAgLTBFKzEwDQorc2hpeDA3MSBzaGlmdCAtMEUrMTAgICAgICAgICAgICAgIC05ICAgLT4gIC0wRSsxMA0KKw0KKy0tIE5tYXgsIE5taW4sIE50aW55DQorc2hpeDE0MSBzaGlmdCAgOS45OTk5OTk5OUUrOTk5ICAgICAtMSAgLT4gOS45OTk5OTk5RSs5OTgNCitzaGl4MTQyIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgIC04ICAtPiA5RSs5OTENCitzaGl4MTQzIHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiA5Ljk5OTk5OTkwRSs5OTkNCitzaGl4MTQ0IHNoaWZ0ICA5Ljk5OTk5OTk5RSs5OTkgICAgICA4ICAtPiA5LjAwMDAwMDAwRSs5OTkNCitzaGl4MTQ1IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgIC0xICAtPiAwRS05OTkNCitzaGl4MTQ2IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgIC04ICAtPiAwRS05OTkNCitzaGl4MTQ3IHNoaWZ0ICAxRS05OTkgICAgICAgICAgICAgICAxICAtPiAxLjBFLTk5OA0KK3NoaXgxNDggc2hpZnQgIDFFLTk5OSAgICAgICAgICAgICAgIDggIC0+IDEuMDAwMDAwMDBFLTk5MQ0KK3NoaXgxNTEgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDEuMDAwMDAwMEUtMTAwMA0KK3NoaXgxNTIgc2hpZnQgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDFFLTEwMDcNCitzaGl4MTUzIHNoaWZ0ICAxLjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAwRS0xMDA3DQorc2hpeDE1NCBzaGlmdCAgMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNw0KK3NoaXgxNTUgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IDkuMDAwMDAwMEUtMTAwMA0KK3NoaXgxNTYgc2hpZnQgIDkuMDAwMDAwMDBFLTk5OSAgICAgLTggIC0+IDlFLTEwMDcNCitzaGl4MTU3IHNoaWZ0ICA5LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAwRS0xMDA3DQorc2hpeDE1OCBzaGlmdCAgOS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gMEUtMTAwNw0KK3NoaXgxNjAgc2hpZnQgIDFFLTEwMDcgICAgICAgICAgICAgLTEgIC0+IDBFLTEwMDcNCitzaGl4MTYxIHNoaWZ0ICAxRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAwRS0xMDA3DQorc2hpeDE2MiBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAgMSAgLT4gMS4wRS0xMDA2DQorc2hpeDE2MyBzaGlmdCAgMUUtMTAwNyAgICAgICAgICAgICAgOCAgLT4gMS4wMDAwMDAwMEUtOTk5DQorLS0gIG5lZ2F0aXZlcw0KK3NoaXgxNzEgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTEgIC0+IC05Ljk5OTk5OTlFKzk5OA0KK3NoaXgxNzIgc2hpZnQgLTkuOTk5OTk5OTlFKzk5OSAgICAgLTggIC0+IC05RSs5OTENCitzaGl4MTczIHNoaWZ0IC05Ljk5OTk5OTk5RSs5OTkgICAgICAxICAtPiAtOS45OTk5OTk5MEUrOTk5DQorc2hpeDE3NCBzaGlmdCAtOS45OTk5OTk5OUUrOTk5ICAgICAgOCAgLT4gLTkuMDAwMDAwMDBFKzk5OQ0KK3NoaXgxNzUgc2hpZnQgLTFFLTk5OSAgICAgICAgICAgICAgLTEgIC0+IC0wRS05OTkNCitzaGl4MTc2IHNoaWZ0IC0xRS05OTkgICAgICAgICAgICAgIC04ICAtPiAtMEUtOTk5DQorc2hpeDE3NyBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAgMSAgLT4gLTEuMEUtOTk4DQorc2hpeDE3OCBzaGlmdCAtMUUtOTk5ICAgICAgICAgICAgICAgOCAgLT4gLTEuMDAwMDAwMDBFLTk5MQ0KK3NoaXgxODEgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgLTEgIC0+IC0xLjAwMDAwMDBFLTEwMDANCitzaGl4MTgyIHNoaWZ0IC0xLjAwMDAwMDAwRS05OTkgICAgIC04ICAtPiAtMUUtMTAwNw0KK3NoaXgxODMgc2hpZnQgLTEuMDAwMDAwMDBFLTk5OSAgICAgIDEgIC0+IC0wRS0xMDA3DQorc2hpeDE4NCBzaGlmdCAtMS4wMDAwMDAwMEUtOTk5ICAgICAgOCAgLT4gLTBFLTEwMDcNCitzaGl4MTg1IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgIC0xICAtPiAtOS4wMDAwMDAwRS0xMDAwDQorc2hpeDE4NiBzaGlmdCAtOS4wMDAwMDAwMEUtOTk5ICAgICAtOCAgLT4gLTlFLTEwMDcNCitzaGl4MTg3IHNoaWZ0IC05LjAwMDAwMDAwRS05OTkgICAgICAxICAtPiAtMEUtMTAwNw0KK3NoaXgxODggc2hpZnQgLTkuMDAwMDAwMDBFLTk5OSAgICAgIDggIC0+IC0wRS0xMDA3DQorc2hpeDE5MCBzaGlmdCAtMUUtMTAwNyAgICAgICAgICAgICAtMSAgLT4gLTBFLTEwMDcNCitzaGl4MTkxIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgIC04ICAtPiAtMEUtMTAwNw0KK3NoaXgxOTIgc2hpZnQgLTFFLTEwMDcgICAgICAgICAgICAgIDEgIC0+IC0xLjBFLTEwMDYNCitzaGl4MTkzIHNoaWZ0IC0xRS0xMDA3ICAgICAgICAgICAgICA4ICAtPiAtMS4wMDAwMDAwMEUtOTk5DQorDQorLS0gbW9yZSBuZWdhdGl2ZXMgKG9mIHNhbml0aWVzKQ0KK3NoaXgyMDEgc2hpZnQgICAgICAgICAtMCAgICAwICAtPiAgLTANCitzaGl4MjAyIHNoaWZ0ICAgICAgICAgLTAgICAgMiAgLT4gIC0wDQorc2hpeDIwMyBzaGlmdCAgICAgICAgIC0xICAgIDIgIC0+ICAtMTAwDQorc2hpeDIwNCBzaGlmdCAgICAgICAgIC0xICAgIDggIC0+ICAtMTAwMDAwMDAwDQorc2hpeDIwNSBzaGlmdCAgICAgICAgIC0xICAgIDkgIC0+ICAtMA0KK3NoaXgyMDYgc2hpZnQgICAgICAgICAtMSAgIC0xICAtPiAgLTANCitzaGl4MjA3IHNoaWZ0IC0xMjM0NTY3ODkgICAtMSAgLT4gIC0xMjM0NTY3OA0KK3NoaXgyMDggc2hpZnQgLTEyMzQ1Njc4OSAgIC04ICAtPiAgLTENCitzaGl4MjA5IHNoaWZ0IC0xMjM0NTY3ODkgICAtOSAgLT4gIC0wDQorc2hpeDIxMCBzaGlmdCAgICAgICAgIC0wICAgLTIgIC0+ICAtMA0KK3NoaXgyMTEgc2hpZnQgICAgICAgICAtMCAgIC0wICAtPiAgLTANCisNCisNCistLSBTcGVjaWFsczsgTmFOcyBhcmUgaGFuZGxlZCBhcyB1c3VhbA0KK3NoaXg3ODEgc2hpZnQgLUluZiAgLTggICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODIgc2hpZnQgLUluZiAgLTEgICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODMgc2hpZnQgLUluZiAgLTAgICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODQgc2hpZnQgLUluZiAgIDAgICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODUgc2hpZnQgLUluZiAgIDEgICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODYgc2hpZnQgLUluZiAgIDggICAgIC0+IC1JbmZpbml0eQ0KK3NoaXg3ODcgc2hpZnQgLTEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3ODggc2hpZnQgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3ODkgc2hpZnQgLTEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3OTAgc2hpZnQgLTAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3OTEgc2hpZnQgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3OTIgc2hpZnQgIDEgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3OTMgc2hpZnQgIDEwMDAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg3OTQgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3NoaXg4MDAgc2hpZnQgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MDEgc2hpZnQgIEluZiAgLTggICAgIC0+IEluZmluaXR5DQorc2hpeDgwMiBzaGlmdCAgSW5mICAtMSAgICAgLT4gSW5maW5pdHkNCitzaGl4ODAzIHNoaWZ0ICBJbmYgIC0wICAgICAtPiBJbmZpbml0eQ0KK3NoaXg4MDQgc2hpZnQgIEluZiAgIDAgICAgIC0+IEluZmluaXR5DQorc2hpeDgwNSBzaGlmdCAgSW5mICAgMSAgICAgLT4gSW5maW5pdHkNCitzaGl4ODA2IHNoaWZ0ICBJbmYgICA4ICAgICAtPiBJbmZpbml0eQ0KK3NoaXg4MDcgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MDggc2hpZnQgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MDkgc2hpZnQgLUluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTAgc2hpZnQgLTEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTEgc2hpZnQgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTIgc2hpZnQgIDAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTMgc2hpZnQgIDEgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTQgc2hpZnQgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4MTUgc2hpZnQgIEluZiAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3NoaXg4MjEgc2hpZnQgIE5hTiAtSW5mICAgIC0+ICBOYU4NCitzaGl4ODIyIHNoaWZ0ICBOYU4gLTEwMDAgICAtPiAgTmFODQorc2hpeDgyMyBzaGlmdCAgTmFOIC0xICAgICAgLT4gIE5hTg0KK3NoaXg4MjQgc2hpZnQgIE5hTiAtMCAgICAgIC0+ICBOYU4NCitzaGl4ODI1IHNoaWZ0ICBOYU4gIDAgICAgICAtPiAgTmFODQorc2hpeDgyNiBzaGlmdCAgTmFOICAxICAgICAgLT4gIE5hTg0KK3NoaXg4Mjcgc2hpZnQgIE5hTiAgMTAwMCAgIC0+ICBOYU4NCitzaGl4ODI4IHNoaWZ0ICBOYU4gIEluZiAgICAtPiAgTmFODQorc2hpeDgyOSBzaGlmdCAgTmFOICBOYU4gICAgLT4gIE5hTg0KK3NoaXg4MzAgc2hpZnQgLUluZiAgTmFOICAgIC0+ICBOYU4NCitzaGl4ODMxIHNoaWZ0IC0xMDAwIE5hTiAgICAtPiAgTmFODQorc2hpeDgzMiBzaGlmdCAtMSAgICBOYU4gICAgLT4gIE5hTg0KK3NoaXg4MzMgc2hpZnQgLTAgICAgTmFOICAgIC0+ICBOYU4NCitzaGl4ODM0IHNoaWZ0ICAwICAgIE5hTiAgICAtPiAgTmFODQorc2hpeDgzNSBzaGlmdCAgMSAgICBOYU4gICAgLT4gIE5hTg0KK3NoaXg4MzYgc2hpZnQgIDEwMDAgTmFOICAgIC0+ICBOYU4NCitzaGl4ODM3IHNoaWZ0ICBJbmYgIE5hTiAgICAtPiAgTmFODQorDQorc2hpeDg0MSBzaGlmdCAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODQyIHNoaWZ0ICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NDMgc2hpZnQgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg0NCBzaGlmdCAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODQ1IHNoaWZ0ICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NDYgc2hpZnQgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg0NyBzaGlmdCAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODQ4IHNoaWZ0ICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NDkgc2hpZnQgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg1MCBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODUxIHNoaWZ0IC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NTIgc2hpZnQgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg1MyBzaGlmdCAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODU0IHNoaWZ0IC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NTUgc2hpZnQgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg1NiBzaGlmdCAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODU3IHNoaWZ0ICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NTggc2hpZnQgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg1OSBzaGlmdCAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24NCisNCistLSBwcm9wYWdhdGluZyBOYU5zDQorc2hpeDg2MSBzaGlmdCAgTmFOMSAgIC1JbmYgICAgLT4gIE5hTjENCitzaGl4ODYyIHNoaWZ0ICtOYU4yICAgLTEwMDAgICAtPiAgTmFOMg0KK3NoaXg4NjMgc2hpZnQgIE5hTjMgICAgMTAwMCAgIC0+ICBOYU4zDQorc2hpeDg2NCBzaGlmdCAgTmFONCAgICBJbmYgICAgLT4gIE5hTjQNCitzaGl4ODY1IHNoaWZ0ICBOYU41ICAgK05hTjYgICAtPiAgTmFONQ0KK3NoaXg4NjYgc2hpZnQgLUluZiAgICAgTmFONyAgIC0+ICBOYU43DQorc2hpeDg2NyBzaGlmdCAtMTAwMCAgICBOYU44ICAgLT4gIE5hTjgNCitzaGl4ODY4IHNoaWZ0ICAxMDAwICAgIE5hTjkgICAtPiAgTmFOOQ0KK3NoaXg4Njkgc2hpZnQgIEluZiAgICArTmFOMTAgIC0+ICBOYU4xMA0KK3NoaXg4NzEgc2hpZnQgIHNOYU4xMSAgLUluZiAgIC0+ICBOYU4xMSAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODcyIHNoaWZ0ICBzTmFOMTIgIC0xMDAwICAtPiAgTmFOMTIgIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg3MyBzaGlmdCAgc05hTjEzICAgMTAwMCAgLT4gIE5hTjEzICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4NzQgc2hpZnQgIHNOYU4xNCAgIE5hTjE3IC0+ICBOYU4xNCAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODc1IHNoaWZ0ICBzTmFOMTUgIHNOYU4xOCAtPiAgTmFOMTUgIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg3NiBzaGlmdCAgTmFOMTYgICBzTmFOMTkgLT4gIE5hTjE5ICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4Nzcgc2hpZnQgLUluZiAgICArc05hTjIwIC0+ICBOYU4yMCAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODc4IHNoaWZ0IC0xMDAwICAgIHNOYU4yMSAtPiAgTmFOMjEgIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg3OSBzaGlmdCAgMTAwMCAgICBzTmFOMjIgLT4gIE5hTjIyICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4ODAgc2hpZnQgIEluZiAgICAgc05hTjIzIC0+ICBOYU4yMyAgSW52YWxpZF9vcGVyYXRpb24NCitzaGl4ODgxIHNoaWZ0ICtOYU4yNSAgK3NOYU4yNCAtPiAgTmFOMjQgIEludmFsaWRfb3BlcmF0aW9uDQorc2hpeDg4MiBzaGlmdCAtTmFOMjYgICAgTmFOMjggLT4gLU5hTjI2DQorc2hpeDg4MyBzaGlmdCAtc05hTjI3ICBzTmFOMjkgLT4gLU5hTjI3ICBJbnZhbGlkX29wZXJhdGlvbg0KK3NoaXg4ODQgc2hpZnQgIDEwMDAgICAgLU5hTjMwIC0+IC1OYU4zMA0KK3NoaXg4ODUgc2hpZnQgIDEwMDAgICAtc05hTjMxIC0+IC1OYU4zMSAgSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvdG9pbnRlZ3JhbHguZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CmluZGV4IGUyNTBlM2EuLjBjZTBkMDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS90b2ludGVncmFseC5kZWNUZXN0CkBAIC0xLDI1NSArMSwyNTUgQEAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gdG9pbnRlZ3JhbHguZGVjVGVzdCAtLSByb3VuZCBkZWNpbWFsIHRvIGludGVncmFsIHZhbHVlLCBleGFjdCAgICAgIC0tCi0tLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tCi0tLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0KLS0tIHRoZXNlIHRlc3RjYXNlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0KLS0tIG1heSBjb250YWluIGVycm9ycy4gIFRoZXkgYXJlIG9mZmVyZWQgb24gYW4gYXMtaXMgYmFzaXMuICBJbiAgICAgICAtLQotLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tCi0tLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0KLS0tIG9yIHNwZWNpZmljYXRpb24uICBUaGUgdGVzdHMgYXJlIG5vdCBleGhhdXN0aXZlLiAgICAgICAgICAgICAgICAgICAtLQotLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0KLS0tICAgTWlrZSBDb3dsaXNoYXcsIElCTSBGZWxsb3cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tCi0tLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdmVyc2lvbjogMi41OQotCi0tLSBUaGlzIHNldCBvZiB0ZXN0cyB0ZXN0cyB0aGUgZXh0ZW5kZWQgc3BlY2lmaWNhdGlvbiAncm91bmQtdG8taW50ZWdyYWwKLS0tIHZhbHVlJyBvcGVyYXRpb24gKGZyb20gSUVFRSA4NTQsIGxhdGVyIG1vZGlmaWVkIGluIDc1NHIpLgotLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcgotLS0gcXVhbnRpemUsIHNvIHRob3NlIGFyZSBhc3N1bWVkIHRvIGhhdmUgYmVlbiB0ZXN0ZWQuCi0KLS0tIFRoaXMgdGVzdHMgdG9JbnRlZ3JhRXhhY3QsIHdoaWNoIG1heSBzZXQgSW5leGFjdAotCi1leHRlbmRlZDogICAgMQotcHJlY2lzaW9uOiAgIDkKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1tYXhFeHBvbmVudDogOTk5Ci1taW5FeHBvbmVudDogLTk5OQotCi1pbnR4eDAwMSB0b2ludGVncmFseCAgICAgIDAgICAgIC0+ICAwCi1pbnR4eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwCi1pbnR4eDAwMyB0b2ludGVncmFseCAgICAgIDAuMSAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAotaW50eHgwMDQgdG9pbnRlZ3JhbHggICAgICAwLjIgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAwNiB0b2ludGVncmFseCAgICAgIDAuNCAgIC0+ICAwIEluZXhhY3QgUm91bmRlZAotaW50eHgwMDcgdG9pbnRlZ3JhbHggICAgICAwLjUgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAwOSB0b2ludGVncmFseCAgICAgIDAuNyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAotaW50eHgwMTAgdG9pbnRlZ3JhbHggICAgICAwLjggICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAxMiB0b2ludGVncmFseCAgICAgIDEgICAgIC0+ICAxCi1pbnR4eDAxMyB0b2ludGVncmFseCAgICAgIDEuMCAgIC0+ICAxIFJvdW5kZWQKLWludHh4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAxNSB0b2ludGVncmFseCAgICAgIDEuMiAgIC0+ICAxIEluZXhhY3QgUm91bmRlZAotaW50eHgwMTYgdG9pbnRlZ3JhbHggICAgICAxLjMgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAxOCB0b2ludGVncmFseCAgICAgIDEuNSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAotaW50eHgwMTkgdG9pbnRlZ3JhbHggICAgICAxLjYgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAyMSB0b2ludGVncmFseCAgICAgIDEuOCAgIC0+ICAyIEluZXhhY3QgUm91bmRlZAotaW50eHgwMjIgdG9pbnRlZ3JhbHggICAgICAxLjkgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQKLS0tIG5lZ2F0aXZlcwotaW50eHgwMzEgdG9pbnRlZ3JhbHggICAgIC0wICAgICAtPiAtMAotaW50eHgwMzIgdG9pbnRlZ3JhbHggICAgIC0wLjAgICAtPiAtMAotaW50eHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDM0IHRvaW50ZWdyYWx4ICAgICAtMC4yICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAzNSB0b2ludGVncmFseCAgICAgLTAuMyAgIC0+IC0wIEluZXhhY3QgUm91bmRlZAotaW50eHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDM3IHRvaW50ZWdyYWx4ICAgICAtMC41ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDAzOCB0b2ludGVncmFseCAgICAgLTAuNiAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotaW50eHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDQwIHRvaW50ZWdyYWx4ICAgICAtMC44ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA0MSB0b2ludGVncmFseCAgICAgLTAuOSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotaW50eHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQotaW50eHgwNDMgdG9pbnRlZ3JhbHggICAgIC0xLjAgICAtPiAtMSBSb3VuZGVkCi1pbnR4eDA0NCB0b2ludGVncmFseCAgICAgLTEuMSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotaW50eHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDQ2IHRvaW50ZWdyYWx4ICAgICAtMS4zICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA0NyB0b2ludGVncmFseCAgICAgLTEuNCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZAotaW50eHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDQ5IHRvaW50ZWdyYWx4ICAgICAtMS42ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA1MCB0b2ludGVncmFseCAgICAgLTEuNyAgIC0+IC0yIEluZXhhY3QgUm91bmRlZAotaW50eHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDUyIHRvaW50ZWdyYWx4ICAgICAtMS45ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkCi0tLSBuZXh0IHR3byB3b3VsZCBiZSBOYU4gdXNpbmcgcXVhbnRpemUoeCwgMCkKLWludHh4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSszMCAgLT4gMS4wRSszMQotaW50eHgwNTQgdG9pbnRlZ3JhbHggICAtMTBFKzMwICAtPiAtMS4wRSszMQotCi0tLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24KLXByZWNpc2lvbjogOQotaW50eHgwNjAgdG9pbnRlZ3JhbHggJzU2MjY3RS0xMCcgICAtPiAnMCcgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA2MiB0b2ludGVncmFseCAnNTYyNjdFLTInICAgIC0+ICc1NjMnICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotaW50eHgwNjMgdG9pbnRlZ3JhbHggJzU2MjY3RS0xJyAgICAtPiAnNTYyNycgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3JwotaW50eHgwNjYgdG9pbnRlZ3JhbHggJzU2MjY3RSswJyAgICAtPiAnNTYyNjcnCi1pbnR4eDA2NyB0b2ludGVncmFseCAnNTYyNjdFKzEnICAgIC0+ICc1LjYyNjdFKzUnCi1pbnR4eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzInICAgIC0+ICc1LjYyNjdFKzYnCi1pbnR4eDA2OSB0b2ludGVncmFseCAnNTYyNjdFKzMnICAgIC0+ICc1LjYyNjdFKzcnCi1pbnR4eDA3MCB0b2ludGVncmFseCAnNTYyNjdFKzQnICAgIC0+ICc1LjYyNjdFKzgnCi1pbnR4eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzUnICAgIC0+ICc1LjYyNjdFKzknCi1pbnR4eDA3MiB0b2ludGVncmFseCAnNTYyNjdFKzYnICAgIC0+ICc1LjYyNjdFKzEwJwotaW50eHgwNzMgdG9pbnRlZ3JhbHggJzEuMjNFKzk2JyAgICAtPiAnMS4yM0UrOTYnCi1pbnR4eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICcxLjIzRSszODQnCi1pbnR4eDA3NSB0b2ludGVncmFseCAnMS4yM0UrOTk5JyAgIC0+ICcxLjIzRSs5OTknCi0KLWludHh4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA4MSB0b2ludGVncmFseCAnLTU2MjY3RS01JyAgIC0+ICctMScgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotaW50eHgwODIgdG9pbnRlZ3JhbHggJy01NjI2N0UtMicgICAtPiAnLTU2MycgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDA4NSB0b2ludGVncmFseCAnLTU2MjY3RS0wJyAgIC0+ICctNTYyNjcnCi1pbnR4eDA4NiB0b2ludGVncmFseCAnLTU2MjY3RSswJyAgIC0+ICctNTYyNjcnCi1pbnR4eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1JwotaW50eHgwODggdG9pbnRlZ3JhbHggJy01NjI2N0UrMicgICAtPiAnLTUuNjI2N0UrNicKLWludHh4MDg5IHRvaW50ZWdyYWx4ICctNTYyNjdFKzMnICAgLT4gJy01LjYyNjdFKzcnCi1pbnR4eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSs0JyAgIC0+ICctNS42MjY3RSs4JwotaW50eHgwOTEgdG9pbnRlZ3JhbHggJy01NjI2N0UrNScgICAtPiAnLTUuNjI2N0UrOScKLWludHh4MDkyIHRvaW50ZWdyYWx4ICctNTYyNjdFKzYnICAgLT4gJy01LjYyNjdFKzEwJwotaW50eHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2JwotaW50eHgwOTQgdG9pbnRlZ3JhbHggJy0xLjIzRSszODQnICAtPiAnLTEuMjNFKzM4NCcKLWludHh4MDk1IHRvaW50ZWdyYWx4ICctMS4yM0UrOTk5JyAgLT4gJy0xLjIzRSs5OTknCi0KLS0tIHN1Ym5vcm1hbCBpbnB1dHMKLWludHh4MTAwIHRvaW50ZWdyYWx4ICAgICAgICAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotaW50eHgxMDIgdG9pbnRlZ3JhbHggICAgIDAuMDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MTAzIHRvaW50ZWdyYWx4ICAgICAgICAwRS05OTkgLT4gMAotCi0tLSBzcGVjaWFscyBhbmQgemVyb3MKLWludHh4MTIwIHRvaW50ZWdyYWx4ICdJbmYnICAgICAgIC0+ICBJbmZpbml0eQotaW50eHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5Ci1pbnR4eDEyMiB0b2ludGVncmFseCAgIE5hTiAgICAgICAtPiAgTmFOCi1pbnR4eDEyMyB0b2ludGVncmFseCAgc05hTiAgICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgotaW50eHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDAKLWludHh4MTI1IHRvaW50ZWdyYWx4ICAgIC0wICAgICAgIC0+IC0wCi1pbnR4eDEyNiB0b2ludGVncmFseCAgICAgMC4wMDAgICAtPiAgMAotaW50eHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDAKLWludHh4MTI4IHRvaW50ZWdyYWx4ICAgICAwLjAgICAgIC0+ICAwCi1pbnR4eDEyOSB0b2ludGVncmFseCAgICAgMCAgICAgICAtPiAgMAotaW50eHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDAKLWludHh4MTMxIHRvaW50ZWdyYWx4ICAgICAwRS0yICAgIC0+ICAwCi1pbnR4eDEzMiB0b2ludGVncmFseCAgICAgMEUtMSAgICAtPiAgMAotaW50eHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDAKLWludHh4MTM0IHRvaW50ZWdyYWx4ICAgICAwRSsxICAgIC0+ICAwRSsxCi1pbnR4eDEzNSB0b2ludGVncmFseCAgICAgMEUrMiAgICAtPiAgMEUrMgotaW50eHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMKLWludHh4MTM3IHRvaW50ZWdyYWx4ICAgICAwRSs0ICAgIC0+ICAwRSs0Ci1pbnR4eDEzOCB0b2ludGVncmFseCAgICAgMEUrNSAgICAtPiAgMEUrNQotaW50eHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTAKLWludHh4MTQwIHRvaW50ZWdyYWx4ICAgIC0wLjAwICAgIC0+IC0wCi1pbnR4eDE0MSB0b2ludGVncmFseCAgICAtMC4wICAgICAtPiAtMAotaW50eHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTAKLWludHh4MTQzIHRvaW50ZWdyYWx4ICAgIC0wRS0zICAgIC0+IC0wCi1pbnR4eDE0NCB0b2ludGVncmFseCAgICAtMEUtMiAgICAtPiAtMAotaW50eHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTAKLWludHh4MTQ2IHRvaW50ZWdyYWx4ICAgIC0wRS0wICAgIC0+IC0wCi1pbnR4eDE0NyB0b2ludGVncmFseCAgICAtMEUrMSAgICAtPiAtMEUrMQotaW50eHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzIKLWludHh4MTQ5IHRvaW50ZWdyYWx4ICAgIC0wRSszICAgIC0+IC0wRSszCi1pbnR4eDE1MCB0b2ludGVncmFseCAgICAtMEUrNCAgICAtPiAtMEUrNAotaW50eHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUKLS0tIHByb3BhZ2F0aW5nIE5hTnMKLWludHh4MTUyIHRvaW50ZWdyYWx4ICAgTmFOODA4ICAgIC0+ICBOYU44MDgKLWludHh4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24KLWludHh4MTU0IHRvaW50ZWdyYWx4ICAtTmFOODA4ICAgIC0+IC1OYU44MDgKLWludHh4MTU1IHRvaW50ZWdyYWx4IC1zTmFOMDgwICAgIC0+IC1OYU44MCAgSW52YWxpZF9vcGVyYXRpb24KLWludHh4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4KLWludHh4MTU3IHRvaW50ZWdyYWx4IC1zTmFOICAgICAgIC0+IC1OYU4gICAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gZXhhbXBsZXMKLXJvdW5kaW5nOiAgICBoYWxmX3VwCi1wcmVjaXNpb246ICAgOQotaW50eHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjAxIHRvaW50ZWdyYWx4ICAgMTAwICAgICAgLT4gMTAwCi1pbnR4eDIwMiB0b2ludGVncmFseCAgIDEwMC4wICAgIC0+IDEwMCAgICAgICAgICAgICAgICAgIFJvdW5kZWQKLWludHh4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIwNCB0b2ludGVncmFseCAgLTEwMS41ICAgIC0+IC0xMDIgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMDUgdG9pbnRlZ3JhbHggICAxMEUrNSAgICAtPiAxLjBFKzYKLWludHh4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcKLWludHh4MjA3IHRvaW50ZWdyYWx4ICAgLUluZiAgICAgLT4gLUluZmluaXR5Ci0KLQotLS0gYWxsIHJvdW5kaW5nIG1vZGVzCi1yb3VuZGluZzogICAgaGFsZl9ldmVuCi0KLWludHh4MjEwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIxMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjEzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIxNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLQotaW50eHgyMjAgdG9pbnRlZ3JhbHggICAgIDU1LjUgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjIxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMjMgdG9pbnRlZ3JhbHggICAgLTU1LjUgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjI0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgaGFsZl9kb3duCi0KLWludHh4MjMwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIzMSB0b2ludGVncmFseCAgICAgNTYuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjMzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDIzNCB0b2ludGVncmFseCAgICAtNTYuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIHVwCi0KLWludHh4MjQwIHRvaW50ZWdyYWx4ICAgICA1NS4zICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI0MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjQzIHRvaW50ZWdyYWx4ICAgIC01NS4zICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI0NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQKLQotcm91bmRpbmc6ICAgIGRvd24KLQotaW50eHgyNTAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjUxIHRvaW50ZWdyYWx4ICAgICA1Ni43ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNTMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjU0IHRvaW50ZWdyYWx4ICAgIC01Ni43ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZAotCi1yb3VuZGluZzogICAgY2VpbGluZwotCi1pbnR4eDI2MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNjEgdG9pbnRlZ3JhbHggICAgIDU2LjMgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI2MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNjQgdG9pbnRlZ3JhbHggICAgLTU2LjMgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkCi0KLXJvdW5kaW5nOiAgICBmbG9vcgotCi1pbnR4eDI3MCB0b2ludGVncmFseCAgICAgNTUuNyAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNzEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkCi1pbnR4eDI3MyB0b2ludGVncmFseCAgICAtNTUuNyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZAotaW50eHgyNzQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQKLWludHh4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkCi0KLS0tIEludCBhbmQgdUludDMyIGVkZ2UgdmFsdWVzIGZvciB0ZXN0aW5nIGNvbnZlcnNpb25zCi1wcmVjaXNpb246IDE2Ci1pbnR4eDMwMCB0b2ludGVncmFseCAtMjE0NzQ4MzY0NiAgLT4gLTIxNDc0ODM2NDYKLWludHh4MzAxIHRvaW50ZWdyYWx4IC0yMTQ3NDgzNjQ3ICAtPiAtMjE0NzQ4MzY0NwotaW50eHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4Ci1pbnR4eDMwMyB0b2ludGVncmFseCAtMjE0NzQ4MzY0OSAgLT4gLTIxNDc0ODM2NDkKLWludHh4MzA0IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ2ICAtPiAgMjE0NzQ4MzY0NgotaW50eHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3Ci1pbnR4eDMwNiB0b2ludGVncmFseCAgMjE0NzQ4MzY0OCAgLT4gIDIxNDc0ODM2NDgKLWludHh4MzA3IHRvaW50ZWdyYWx4ICAyMTQ3NDgzNjQ5ICAtPiAgMjE0NzQ4MzY0OQotaW50eHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0Ci1pbnR4eDMwOSB0b2ludGVncmFseCAgNDI5NDk2NzI5NSAgLT4gIDQyOTQ5NjcyOTUKLWludHh4MzEwIHRvaW50ZWdyYWx4ICA0Mjk0OTY3Mjk2ICAtPiAgNDI5NDk2NzI5NgotaW50eHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSB0b2ludGVncmFseC5kZWNUZXN0IC0tIHJvdW5kIGRlY2ltYWwgdG8gaW50ZWdyYWwgdmFsdWUsIGV4YWN0ICAgICAgLS0NCistLSBDb3B5cmlnaHQgKGMpIElCTSBDb3Jwb3JhdGlvbiwgMjAwMSwgMjAwOC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCistLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0NCistLSBhdCBodHRwOi8vd3d3Mi5odXJzbGV5LmlibS5jb20vZGVjaW1hbCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mICAgICAgLS0NCistLSB0aGVzZSB0ZXN0Y2FzZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBUaGVzZSB0ZXN0Y2FzZXMgYXJlIGV4cGVyaW1lbnRhbCAoJ2JldGEnIHZlcnNpb25zKSwgYW5kIHRoZXkgICAgICAgLS0NCistLSBtYXkgY29udGFpbiBlcnJvcnMuICBUaGV5IGFyZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLiAgSW4gICAgICAgLS0NCistLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0NCistLSBhIGd1YXJhbnRlZSB0aGF0IGFuIGltcGxlbWVudGF0aW9uIGNvbXBsaWVzIHdpdGggYW55IFN0YW5kYXJkICAgICAgLS0NCistLSBvciBzcGVjaWZpY2F0aW9uLiAgVGhlIHRlc3RzIGFyZSBub3QgZXhoYXVzdGl2ZS4gICAgICAgICAgICAgICAgICAgLS0NCistLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSBQbGVhc2Ugc2VuZCBjb21tZW50cywgc3VnZ2VzdGlvbnMsIGFuZCBjb3JyZWN0aW9ucyB0byB0aGUgYXV0aG9yOiAgLS0NCistLSAgIE1pa2UgQ293bGlzaGF3LCBJQk0gRmVsbG93ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0NCistLSAgIG1mY0B1ay5pYm0uY29tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCit2ZXJzaW9uOiAyLjU5DQorDQorLS0gVGhpcyBzZXQgb2YgdGVzdHMgdGVzdHMgdGhlIGV4dGVuZGVkIHNwZWNpZmljYXRpb24gJ3JvdW5kLXRvLWludGVncmFsDQorLS0gdmFsdWUnIG9wZXJhdGlvbiAoZnJvbSBJRUVFIDg1NCwgbGF0ZXIgbW9kaWZpZWQgaW4gNzU0cikuDQorLS0gQWxsIG5vbi16ZXJvIHJlc3VsdHMgYXJlIGRlZmluZWQgYXMgYmVpbmcgdGhvc2UgZnJvbSBlaXRoZXIgY29weSBvcg0KKy0tIHF1YW50aXplLCBzbyB0aG9zZSBhcmUgYXNzdW1lZCB0byBoYXZlIGJlZW4gdGVzdGVkLg0KKw0KKy0tIFRoaXMgdGVzdHMgdG9JbnRlZ3JhRXhhY3QsIHdoaWNoIG1heSBzZXQgSW5leGFjdA0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KK2ludHh4MDAxIHRvaW50ZWdyYWx4ICAgICAgMCAgICAgLT4gIDANCitpbnR4eDAwMiB0b2ludGVncmFseCAgICAgIDAuMCAgIC0+ICAwDQoraW50eHgwMDMgdG9pbnRlZ3JhbHggICAgICAwLjEgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAwNCB0b2ludGVncmFseCAgICAgIDAuMiAgIC0+ICAwIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDA1IHRvaW50ZWdyYWx4ICAgICAgMC4zICAgLT4gIDAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMDYgdG9pbnRlZ3JhbHggICAgICAwLjQgICAtPiAgMCBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAwNyB0b2ludGVncmFseCAgICAgIDAuNSAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDA4IHRvaW50ZWdyYWx4ICAgICAgMC42ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMDkgdG9pbnRlZ3JhbHggICAgICAwLjcgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAxMCB0b2ludGVncmFseCAgICAgIDAuOCAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDExIHRvaW50ZWdyYWx4ICAgICAgMC45ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMTIgdG9pbnRlZ3JhbHggICAgICAxICAgICAtPiAgMQ0KK2ludHh4MDEzIHRvaW50ZWdyYWx4ICAgICAgMS4wICAgLT4gIDEgUm91bmRlZA0KK2ludHh4MDE0IHRvaW50ZWdyYWx4ICAgICAgMS4xICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMTUgdG9pbnRlZ3JhbHggICAgICAxLjIgICAtPiAgMSBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAxNiB0b2ludGVncmFseCAgICAgIDEuMyAgIC0+ICAxIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDE3IHRvaW50ZWdyYWx4ICAgICAgMS40ICAgLT4gIDEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMTggdG9pbnRlZ3JhbHggICAgICAxLjUgICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAxOSB0b2ludGVncmFseCAgICAgIDEuNiAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDIwIHRvaW50ZWdyYWx4ICAgICAgMS43ICAgLT4gIDIgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMjEgdG9pbnRlZ3JhbHggICAgICAxLjggICAtPiAgMiBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAyMiB0b2ludGVncmFseCAgICAgIDEuOSAgIC0+ICAyIEluZXhhY3QgUm91bmRlZA0KKy0tIG5lZ2F0aXZlcw0KK2ludHh4MDMxIHRvaW50ZWdyYWx4ICAgICAtMCAgICAgLT4gLTANCitpbnR4eDAzMiB0b2ludGVncmFseCAgICAgLTAuMCAgIC0+IC0wDQoraW50eHgwMzMgdG9pbnRlZ3JhbHggICAgIC0wLjEgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAzNCB0b2ludGVncmFseCAgICAgLTAuMiAgIC0+IC0wIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDM1IHRvaW50ZWdyYWx4ICAgICAtMC4zICAgLT4gLTAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMzYgdG9pbnRlZ3JhbHggICAgIC0wLjQgICAtPiAtMCBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDAzNyB0b2ludGVncmFseCAgICAgLTAuNSAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDM4IHRvaW50ZWdyYWx4ICAgICAtMC42ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwMzkgdG9pbnRlZ3JhbHggICAgIC0wLjcgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA0MCB0b2ludGVncmFseCAgICAgLTAuOCAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDQxIHRvaW50ZWdyYWx4ICAgICAtMC45ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwNDIgdG9pbnRlZ3JhbHggICAgIC0xICAgICAtPiAtMQ0KK2ludHh4MDQzIHRvaW50ZWdyYWx4ICAgICAtMS4wICAgLT4gLTEgUm91bmRlZA0KK2ludHh4MDQ0IHRvaW50ZWdyYWx4ICAgICAtMS4xICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwNDUgdG9pbnRlZ3JhbHggICAgIC0xLjIgICAtPiAtMSBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA0NiB0b2ludGVncmFseCAgICAgLTEuMyAgIC0+IC0xIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDQ3IHRvaW50ZWdyYWx4ICAgICAtMS40ICAgLT4gLTEgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwNDggdG9pbnRlZ3JhbHggICAgIC0xLjUgICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA0OSB0b2ludGVncmFseCAgICAgLTEuNiAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDUwIHRvaW50ZWdyYWx4ICAgICAtMS43ICAgLT4gLTIgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwNTEgdG9pbnRlZ3JhbHggICAgIC0xLjggICAtPiAtMiBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA1MiB0b2ludGVncmFseCAgICAgLTEuOSAgIC0+IC0yIEluZXhhY3QgUm91bmRlZA0KKy0tIG5leHQgdHdvIHdvdWxkIGJlIE5hTiB1c2luZyBxdWFudGl6ZSh4LCAwKQ0KK2ludHh4MDUzIHRvaW50ZWdyYWx4ICAgIDEwRSszMCAgLT4gMS4wRSszMQ0KK2ludHh4MDU0IHRvaW50ZWdyYWx4ICAgLTEwRSszMCAgLT4gLTEuMEUrMzENCisNCistLSBudW1iZXJzIGFyb3VuZCBwcmVjaXNpb24NCitwcmVjaXNpb246IDkNCitpbnR4eDA2MCB0b2ludGVncmFseCAnNTYyNjdFLTEwJyAgIC0+ICcwJyAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDYxIHRvaW50ZWdyYWx4ICc1NjI2N0UtNScgICAgLT4gJzEnICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwNjIgdG9pbnRlZ3JhbHggJzU2MjY3RS0yJyAgICAtPiAnNTYzJyAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA2MyB0b2ludGVncmFseCAnNTYyNjdFLTEnICAgIC0+ICc1NjI3JyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDY1IHRvaW50ZWdyYWx4ICc1NjI2N0UtMCcgICAgLT4gJzU2MjY3Jw0KK2ludHh4MDY2IHRvaW50ZWdyYWx4ICc1NjI2N0UrMCcgICAgLT4gJzU2MjY3Jw0KK2ludHh4MDY3IHRvaW50ZWdyYWx4ICc1NjI2N0UrMScgICAgLT4gJzUuNjI2N0UrNScNCitpbnR4eDA2OCB0b2ludGVncmFseCAnNTYyNjdFKzInICAgIC0+ICc1LjYyNjdFKzYnDQoraW50eHgwNjkgdG9pbnRlZ3JhbHggJzU2MjY3RSszJyAgICAtPiAnNS42MjY3RSs3Jw0KK2ludHh4MDcwIHRvaW50ZWdyYWx4ICc1NjI2N0UrNCcgICAgLT4gJzUuNjI2N0UrOCcNCitpbnR4eDA3MSB0b2ludGVncmFseCAnNTYyNjdFKzUnICAgIC0+ICc1LjYyNjdFKzknDQoraW50eHgwNzIgdG9pbnRlZ3JhbHggJzU2MjY3RSs2JyAgICAtPiAnNS42MjY3RSsxMCcNCitpbnR4eDA3MyB0b2ludGVncmFseCAnMS4yM0UrOTYnICAgIC0+ICcxLjIzRSs5NicNCitpbnR4eDA3NCB0b2ludGVncmFseCAnMS4yM0UrMzg0JyAgIC0+ICcxLjIzRSszODQnDQoraW50eHgwNzUgdG9pbnRlZ3JhbHggJzEuMjNFKzk5OScgICAtPiAnMS4yM0UrOTk5Jw0KKw0KK2ludHh4MDgwIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEwJyAgLT4gJy0wJyAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwODEgdG9pbnRlZ3JhbHggJy01NjI2N0UtNScgICAtPiAnLTEnICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDA4MiB0b2ludGVncmFseCAnLTU2MjY3RS0yJyAgIC0+ICctNTYzJyAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MDgzIHRvaW50ZWdyYWx4ICctNTYyNjdFLTEnICAgLT4gJy01NjI3JyAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgwODUgdG9pbnRlZ3JhbHggJy01NjI2N0UtMCcgICAtPiAnLTU2MjY3Jw0KK2ludHh4MDg2IHRvaW50ZWdyYWx4ICctNTYyNjdFKzAnICAgLT4gJy01NjI2NycNCitpbnR4eDA4NyB0b2ludGVncmFseCAnLTU2MjY3RSsxJyAgIC0+ICctNS42MjY3RSs1Jw0KK2ludHh4MDg4IHRvaW50ZWdyYWx4ICctNTYyNjdFKzInICAgLT4gJy01LjYyNjdFKzYnDQoraW50eHgwODkgdG9pbnRlZ3JhbHggJy01NjI2N0UrMycgICAtPiAnLTUuNjI2N0UrNycNCitpbnR4eDA5MCB0b2ludGVncmFseCAnLTU2MjY3RSs0JyAgIC0+ICctNS42MjY3RSs4Jw0KK2ludHh4MDkxIHRvaW50ZWdyYWx4ICctNTYyNjdFKzUnICAgLT4gJy01LjYyNjdFKzknDQoraW50eHgwOTIgdG9pbnRlZ3JhbHggJy01NjI2N0UrNicgICAtPiAnLTUuNjI2N0UrMTAnDQoraW50eHgwOTMgdG9pbnRlZ3JhbHggJy0xLjIzRSs5NicgICAtPiAnLTEuMjNFKzk2Jw0KK2ludHh4MDk0IHRvaW50ZWdyYWx4ICctMS4yM0UrMzg0JyAgLT4gJy0xLjIzRSszODQnDQoraW50eHgwOTUgdG9pbnRlZ3JhbHggJy0xLjIzRSs5OTknICAtPiAnLTEuMjNFKzk5OScNCisNCistLSBzdWJub3JtYWwgaW5wdXRzDQoraW50eHgxMDAgdG9pbnRlZ3JhbHggICAgICAgIDFFLTk5OSAtPiAwICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDEwMSB0b2ludGVncmFseCAgICAgIDAuMUUtOTk5IC0+IDAgICAgICAgICAgICAgICAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MTAyIHRvaW50ZWdyYWx4ICAgICAwLjAxRS05OTkgLT4gMCAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgxMDMgdG9pbnRlZ3JhbHggICAgICAgIDBFLTk5OSAtPiAwDQorDQorLS0gc3BlY2lhbHMgYW5kIHplcm9zDQoraW50eHgxMjAgdG9pbnRlZ3JhbHggJ0luZicgICAgICAgLT4gIEluZmluaXR5DQoraW50eHgxMjEgdG9pbnRlZ3JhbHggJy1JbmYnICAgICAgLT4gLUluZmluaXR5DQoraW50eHgxMjIgdG9pbnRlZ3JhbHggICBOYU4gICAgICAgLT4gIE5hTg0KK2ludHh4MTIzIHRvaW50ZWdyYWx4ICBzTmFOICAgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uDQoraW50eHgxMjQgdG9pbnRlZ3JhbHggICAgIDAgICAgICAgLT4gIDANCitpbnR4eDEyNSB0b2ludGVncmFseCAgICAtMCAgICAgICAtPiAtMA0KK2ludHh4MTI2IHRvaW50ZWdyYWx4ICAgICAwLjAwMCAgIC0+ICAwDQoraW50eHgxMjcgdG9pbnRlZ3JhbHggICAgIDAuMDAgICAgLT4gIDANCitpbnR4eDEyOCB0b2ludGVncmFseCAgICAgMC4wICAgICAtPiAgMA0KK2ludHh4MTI5IHRvaW50ZWdyYWx4ICAgICAwICAgICAgIC0+ICAwDQoraW50eHgxMzAgdG9pbnRlZ3JhbHggICAgIDBFLTMgICAgLT4gIDANCitpbnR4eDEzMSB0b2ludGVncmFseCAgICAgMEUtMiAgICAtPiAgMA0KK2ludHh4MTMyIHRvaW50ZWdyYWx4ICAgICAwRS0xICAgIC0+ICAwDQoraW50eHgxMzMgdG9pbnRlZ3JhbHggICAgIDBFLTAgICAgLT4gIDANCitpbnR4eDEzNCB0b2ludGVncmFseCAgICAgMEUrMSAgICAtPiAgMEUrMQ0KK2ludHh4MTM1IHRvaW50ZWdyYWx4ICAgICAwRSsyICAgIC0+ICAwRSsyDQoraW50eHgxMzYgdG9pbnRlZ3JhbHggICAgIDBFKzMgICAgLT4gIDBFKzMNCitpbnR4eDEzNyB0b2ludGVncmFseCAgICAgMEUrNCAgICAtPiAgMEUrNA0KK2ludHh4MTM4IHRvaW50ZWdyYWx4ICAgICAwRSs1ICAgIC0+ICAwRSs1DQoraW50eHgxMzkgdG9pbnRlZ3JhbHggICAgLTAuMDAwICAgLT4gLTANCitpbnR4eDE0MCB0b2ludGVncmFseCAgICAtMC4wMCAgICAtPiAtMA0KK2ludHh4MTQxIHRvaW50ZWdyYWx4ICAgIC0wLjAgICAgIC0+IC0wDQoraW50eHgxNDIgdG9pbnRlZ3JhbHggICAgLTAgICAgICAgLT4gLTANCitpbnR4eDE0MyB0b2ludGVncmFseCAgICAtMEUtMyAgICAtPiAtMA0KK2ludHh4MTQ0IHRvaW50ZWdyYWx4ICAgIC0wRS0yICAgIC0+IC0wDQoraW50eHgxNDUgdG9pbnRlZ3JhbHggICAgLTBFLTEgICAgLT4gLTANCitpbnR4eDE0NiB0b2ludGVncmFseCAgICAtMEUtMCAgICAtPiAtMA0KK2ludHh4MTQ3IHRvaW50ZWdyYWx4ICAgIC0wRSsxICAgIC0+IC0wRSsxDQoraW50eHgxNDggdG9pbnRlZ3JhbHggICAgLTBFKzIgICAgLT4gLTBFKzINCitpbnR4eDE0OSB0b2ludGVncmFseCAgICAtMEUrMyAgICAtPiAtMEUrMw0KK2ludHh4MTUwIHRvaW50ZWdyYWx4ICAgIC0wRSs0ICAgIC0+IC0wRSs0DQoraW50eHgxNTEgdG9pbnRlZ3JhbHggICAgLTBFKzUgICAgLT4gLTBFKzUNCistLSBwcm9wYWdhdGluZyBOYU5zDQoraW50eHgxNTIgdG9pbnRlZ3JhbHggICBOYU44MDggICAgLT4gIE5hTjgwOA0KK2ludHh4MTUzIHRvaW50ZWdyYWx4ICBzTmFOMDgwICAgIC0+ICBOYU44MCAgSW52YWxpZF9vcGVyYXRpb24NCitpbnR4eDE1NCB0b2ludGVncmFseCAgLU5hTjgwOCAgICAtPiAtTmFOODA4DQoraW50eHgxNTUgdG9pbnRlZ3JhbHggLXNOYU4wODAgICAgLT4gLU5hTjgwICBJbnZhbGlkX29wZXJhdGlvbg0KK2ludHh4MTU2IHRvaW50ZWdyYWx4ICAtTmFOICAgICAgIC0+IC1OYU4NCitpbnR4eDE1NyB0b2ludGVncmFseCAtc05hTiAgICAgICAtPiAtTmFOICAgIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gZXhhbXBsZXMNCityb3VuZGluZzogICAgaGFsZl91cA0KK3ByZWNpc2lvbjogICA5DQoraW50eHgyMDAgdG9pbnRlZ3JhbHggICAgIDIuMSAgICAtPiAyICAgICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIwMSB0b2ludGVncmFseCAgIDEwMCAgICAgIC0+IDEwMA0KK2ludHh4MjAyIHRvaW50ZWdyYWx4ICAgMTAwLjAgICAgLT4gMTAwICAgICAgICAgICAgICAgICAgUm91bmRlZA0KK2ludHh4MjAzIHRvaW50ZWdyYWx4ICAgMTAxLjUgICAgLT4gMTAyICAgICAgICAgICAgICAgICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMDQgdG9pbnRlZ3JhbHggIC0xMDEuNSAgICAtPiAtMTAyICAgICAgICAgICAgICAgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIwNSB0b2ludGVncmFseCAgIDEwRSs1ICAgIC0+IDEuMEUrNg0KK2ludHh4MjA2IHRvaW50ZWdyYWx4ICA3Ljg5RSs3NyAgLT4gNy44OUUrNzcNCitpbnR4eDIwNyB0b2ludGVncmFseCAgIC1JbmYgICAgIC0+IC1JbmZpbml0eQ0KKw0KKw0KKy0tIGFsbCByb3VuZGluZyBtb2Rlcw0KK3JvdW5kaW5nOiAgICBoYWxmX2V2ZW4NCisNCitpbnR4eDIxMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjExIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMTIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIxMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjE0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMTUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgaGFsZl91cA0KKw0KK2ludHh4MjIwIHRvaW50ZWdyYWx4ICAgICA1NS41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMjEgdG9pbnRlZ3JhbHggICAgIDU2LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIyMiB0b2ludGVncmFseCAgICAgNTcuNSAgIC0+ICA1OCAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjIzIHRvaW50ZWdyYWx4ICAgIC01NS41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMjQgdG9pbnRlZ3JhbHggICAgLTU2LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIyNSB0b2ludGVncmFseCAgICAtNTcuNSAgIC0+IC01OCAgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgICBoYWxmX2Rvd24NCisNCitpbnR4eDIzMCB0b2ludGVncmFseCAgICAgNTUuNSAgIC0+ICA1NSAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjMxIHRvaW50ZWdyYWx4ICAgICA1Ni41ICAgLT4gIDU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMzIgdG9pbnRlZ3JhbHggICAgIDU3LjUgICAtPiAgNTcgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDIzMyB0b2ludGVncmFseCAgICAtNTUuNSAgIC0+IC01NSAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjM0IHRvaW50ZWdyYWx4ICAgIC01Ni41ICAgLT4gLTU2ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyMzUgdG9pbnRlZ3JhbHggICAgLTU3LjUgICAtPiAtNTcgICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgdXANCisNCitpbnR4eDI0MCB0b2ludGVncmFseCAgICAgNTUuMyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjQxIHRvaW50ZWdyYWx4ICAgICA1Ni4zICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNDIgdG9pbnRlZ3JhbHggICAgIDU3LjMgICAtPiAgNTggICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI0MyB0b2ludGVncmFseCAgICAtNTUuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjQ0IHRvaW50ZWdyYWx4ICAgIC01Ni4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNDUgdG9pbnRlZ3JhbHggICAgLTU3LjMgICAtPiAtNTggICBJbmV4YWN0IFJvdW5kZWQNCisNCityb3VuZGluZzogICAgZG93bg0KKw0KK2ludHh4MjUwIHRvaW50ZWdyYWx4ICAgICA1NS43ICAgLT4gIDU1ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNTEgdG9pbnRlZ3JhbHggICAgIDU2LjcgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI1MiB0b2ludGVncmFseCAgICAgNTcuNyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjUzIHRvaW50ZWdyYWx4ICAgIC01NS43ICAgLT4gLTU1ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNTQgdG9pbnRlZ3JhbHggICAgLTU2LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI1NSB0b2ludGVncmFseCAgICAtNTcuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KKw0KK3JvdW5kaW5nOiAgICBjZWlsaW5nDQorDQoraW50eHgyNjAgdG9pbnRlZ3JhbHggICAgIDU1LjMgICAtPiAgNTYgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI2MSB0b2ludGVncmFseCAgICAgNTYuMyAgIC0+ICA1NyAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjYyIHRvaW50ZWdyYWx4ICAgICA1Ny4zICAgLT4gIDU4ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNjMgdG9pbnRlZ3JhbHggICAgLTU1LjMgICAtPiAtNTUgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI2NCB0b2ludGVncmFseCAgICAtNTYuMyAgIC0+IC01NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjY1IHRvaW50ZWdyYWx4ICAgIC01Ny4zICAgLT4gLTU3ICAgSW5leGFjdCBSb3VuZGVkDQorDQorcm91bmRpbmc6ICAgIGZsb29yDQorDQoraW50eHgyNzAgdG9pbnRlZ3JhbHggICAgIDU1LjcgICAtPiAgNTUgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI3MSB0b2ludGVncmFseCAgICAgNTYuNyAgIC0+ICA1NiAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4MjcyIHRvaW50ZWdyYWx4ICAgICA1Ny43ICAgLT4gIDU3ICAgSW5leGFjdCBSb3VuZGVkDQoraW50eHgyNzMgdG9pbnRlZ3JhbHggICAgLTU1LjcgICAtPiAtNTYgICBJbmV4YWN0IFJvdW5kZWQNCitpbnR4eDI3NCB0b2ludGVncmFseCAgICAtNTYuNyAgIC0+IC01NyAgIEluZXhhY3QgUm91bmRlZA0KK2ludHh4Mjc1IHRvaW50ZWdyYWx4ICAgIC01Ny43ICAgLT4gLTU4ICAgSW5leGFjdCBSb3VuZGVkDQorDQorLS0gSW50IGFuZCB1SW50MzIgZWRnZSB2YWx1ZXMgZm9yIHRlc3RpbmcgY29udmVyc2lvbnMNCitwcmVjaXNpb246IDE2DQoraW50eHgzMDAgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDYgIC0+IC0yMTQ3NDgzNjQ2DQoraW50eHgzMDEgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDcgIC0+IC0yMTQ3NDgzNjQ3DQoraW50eHgzMDIgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDggIC0+IC0yMTQ3NDgzNjQ4DQoraW50eHgzMDMgdG9pbnRlZ3JhbHggLTIxNDc0ODM2NDkgIC0+IC0yMTQ3NDgzNjQ5DQoraW50eHgzMDQgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDYgIC0+ICAyMTQ3NDgzNjQ2DQoraW50eHgzMDUgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDcgIC0+ICAyMTQ3NDgzNjQ3DQoraW50eHgzMDYgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDggIC0+ICAyMTQ3NDgzNjQ4DQoraW50eHgzMDcgdG9pbnRlZ3JhbHggIDIxNDc0ODM2NDkgIC0+ICAyMTQ3NDgzNjQ5DQoraW50eHgzMDggdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTQgIC0+ICA0Mjk0OTY3Mjk0DQoraW50eHgzMDkgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTUgIC0+ICA0Mjk0OTY3Mjk1DQoraW50eHgzMTAgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTYgIC0+ICA0Mjk0OTY3Mjk2DQoraW50eHgzMTEgdG9pbnRlZ3JhbHggIDQyOTQ5NjcyOTcgIC0+ICA0Mjk0OTY3Mjk3DQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0IGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL3hvci5kZWNUZXN0CmluZGV4IDEyMjk3NmUuLmNkNzFiYmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS94b3IuZGVjVGVzdAorKysgYi9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEveG9yLmRlY1Rlc3QKQEAgLTEsMzM1ICsxLDMzNSBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSB4b3IuZGVjVGVzdCAtLSBkaWdpdHdpc2UgbG9naWNhbCBYT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIENvcHlyaWdodCAoYykgSUJNIENvcnBvcmF0aW9uLCAxOTgxLCAyMDA4LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLSBQbGVhc2Ugc2VlIHRoZSBkb2N1bWVudCAiR2VuZXJhbCBEZWNpbWFsIEFyaXRobWV0aWMgVGVzdGNhc2VzIiAgICAgLS0KLS0tIGF0IGh0dHA6Ly93d3cyLmh1cnNsZXkuaWJtLmNvbS9kZWNpbWFsIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgICAgICAtLQotLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFRoZXNlIHRlc3RjYXNlcyBhcmUgZXhwZXJpbWVudGFsICgnYmV0YScgdmVyc2lvbnMpLCBhbmQgdGhleSAgICAgICAtLQotLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tCi0tLSBwYXJ0aWN1bGFyLCBhY2hpZXZpbmcgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgdGVzdHMgaGVyZSBpcyBub3QgICAgLS0KLS0tIGEgZ3VhcmFudGVlIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gY29tcGxpZXMgd2l0aCBhbnkgU3RhbmRhcmQgICAgICAtLQotLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0KLS0tIFBsZWFzZSBzZW5kIGNvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGNvcnJlY3Rpb25zIHRvIHRoZSBhdXRob3I6ICAtLQotLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tCi0tLSAgIElCTSBVSywgUE8gQm94IDMxLCBCaXJtaW5naGFtIFJvYWQsIFdhcndpY2sgQ1YzNCA1SkwsIFVLICAgICAgICAgLS0KLS0tICAgbWZjQHVrLmlibS5jb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi12ZXJzaW9uOiAyLjU5Ci0KLWV4dGVuZGVkOiAgICAxCi1wcmVjaXNpb246ICAgOQotcm91bmRpbmc6ICAgIGhhbGZfdXAKLW1heEV4cG9uZW50OiA5OTkKLW1pbkV4cG9uZW50OiAtOTk5Ci0KLS0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpCi14b3J4MDAxIHhvciAgICAgICAgICAgICAwICAgIDAgLT4gICAgMAoteG9yeDAwMiB4b3IgICAgICAgICAgICAgMCAgICAxIC0+ICAgIDEKLXhvcngwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxCi14b3J4MDA0IHhvciAgICAgICAgICAgICAxICAgIDEgLT4gICAgMAoteG9yeDAwNSB4b3IgICAgICAgICAgMTEwMCAxMDEwIC0+ICAxMTAKLXhvcngwMDYgeG9yICAgICAgICAgIDExMTEgICAxMCAtPiAxMTAxCi0tLSBhbmQgYXQgbXNkIGFuZCBtc2QtMQoteG9yeDAxMCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoteG9yeDAxMSB4b3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoteG9yeDAxMiB4b3IgMTAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMAoteG9yeDAxMyB4b3IgMTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgICAgICAgICAgMAoteG9yeDAxNCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMAoteG9yeDAxNSB4b3IgMDAwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoteG9yeDAxNiB4b3IgMDEwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAxMDAwMDAwMAoteG9yeDAxNyB4b3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMAotCi0tLSBWYXJpb3VzIGxlbmd0aHMKLS0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQoteG9yeDAyMSB4b3IgMTExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAwCi14b3J4MDIyIHhvciAxMTExMTExMTExMTEgIDExMTExMTExMSAgLT4gIDAKLXhvcngwMjMgeG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgMAoteG9yeDAyNSB4b3IgICAxMTExMTExICAgICAgIDExMTExMTEgIC0+ICAwCi14b3J4MDI2IHhvciAgICAxMTExMTEgICAgICAgIDExMTExMSAgLT4gIDAKLXhvcngwMjcgeG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgMAoteG9yeDAyOCB4b3IgICAgICAxMTExICAgICAgICAgIDExMTEgIC0+ICAwCi14b3J4MDI5IHhvciAgICAgICAxMTEgICAgICAgICAgIDExMSAgLT4gIDAKLXhvcngwMzEgeG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgMAoteG9yeDAzMiB4b3IgICAgICAgICAxICAgICAgICAgICAgIDEgIC0+ICAwCi14b3J4MDMzIHhvciAxMTExMTExMTExMTEgMTExMTExMTExMSAgLT4gIDAKLXhvcngwMzQgeG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMAoteG9yeDAzNSB4b3IgMTExMTExMTExMSAxMTExMTExMTExMTEgIC0+ICAwCi14b3J4MDM2IHhvciAxMTExMTExMTEgMTExMTExMTExMTExMSAgLT4gIDAKLQoteG9yeDA0MCB4b3IgMTExMTExMTExICAxMTExMTExMTExMTEgIC0+ICAwCi14b3J4MDQxIHhvciAgMTExMTExMTEgIDExMTExMTExMTExMSAgLT4gIDEwMDAwMDAwMAoteG9yeDA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDAKLXhvcngwNDMgeG9yICAgMTExMTExMSAgICAgMTAwMDAwMDEwICAtPiAgMTAxMTExMTAxCi14b3J4MDQ0IHhvciAgICAxMTExMTEgICAgIDEwMDAwMDEwMCAgLT4gIDEwMDExMTAxMQoteG9yeDA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTEKLXhvcngwNDYgeG9yICAgICAgMTExMSAgICAgMTAwMDEwMDAwICAtPiAgMTAwMDExMTExCi14b3J4MDQ3IHhvciAgICAgICAxMTEgICAgIDEwMDEwMDAwMCAgLT4gIDEwMDEwMDExMQoteG9yeDA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTEKLXhvcngwNDkgeG9yICAgICAgICAgMSAgICAgMTEwMDAwMDAwICAtPiAgMTEwMDAwMDAxCi0KLXhvcngwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKLXhvcngwNTEgeG9yICAxMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTAKLXhvcngwNTIgeG9yICAgMTExMTExMTEgIDEgIC0+ICAxMTExMTExMAoteG9yeDA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTAKLXhvcngwNTQgeG9yICAgICAxMTExMTEgIDEgIC0+ICAxMTExMTAKLXhvcngwNTUgeG9yICAgICAgMTExMTEgIDEgIC0+ICAxMTExMAoteG9yeDA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTAKLXhvcngwNTcgeG9yICAgICAgICAxMTEgIDEgIC0+ICAxMTAKLXhvcngwNTggeG9yICAgICAgICAgMTEgIDEgIC0+ICAxMAoteG9yeDA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDAKLQoteG9yeDA2MCB4b3IgMTExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoteG9yeDA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQoteG9yeDA2MiB4b3IgICAxMTExMTExMSAgMCAgLT4gIDExMTExMTExCi14b3J4MDYzIHhvciAgICAxMTExMTExICAwICAtPiAgMTExMTExMQoteG9yeDA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQoteG9yeDA2NSB4b3IgICAgICAxMTExMSAgMCAgLT4gIDExMTExCi14b3J4MDY2IHhvciAgICAgICAxMTExICAwICAtPiAgMTExMQoteG9yeDA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQoteG9yeDA2OCB4b3IgICAgICAgICAxMSAgMCAgLT4gIDExCi14b3J4MDY5IHhvciAgICAgICAgICAxICAwICAtPiAgMQotCi14b3J4MDcwIHhvciAxICAxMTExMTExMTExICAtPiAgMTExMTExMTEwCi14b3J4MDcxIHhvciAxICAgMTExMTExMTExICAtPiAgMTExMTExMTEwCi14b3J4MDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTAKLXhvcngwNzMgeG9yIDEgICAgIDExMTExMTEgIC0+ICAxMTExMTEwCi14b3J4MDc0IHhvciAxICAgICAgMTExMTExICAtPiAgMTExMTEwCi14b3J4MDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTAKLXhvcngwNzYgeG9yIDEgICAgICAgIDExMTEgIC0+ICAxMTEwCi14b3J4MDc3IHhvciAxICAgICAgICAgMTExICAtPiAgMTEwCi14b3J4MDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTAKLXhvcngwNzkgeG9yIDEgICAgICAgICAgIDEgIC0+ICAwCi0KLXhvcngwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTEKLXhvcngwODEgeG9yIDAgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTEKLXhvcngwODIgeG9yIDAgICAgMTExMTExMTEgIC0+ICAxMTExMTExMQoteG9yeDA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTEKLXhvcngwODQgeG9yIDAgICAgICAxMTExMTEgIC0+ICAxMTExMTEKLXhvcngwODUgeG9yIDAgICAgICAgMTExMTEgIC0+ICAxMTExMQoteG9yeDA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTEKLXhvcngwODcgeG9yIDAgICAgICAgICAxMTEgIC0+ICAxMTEKLXhvcngwODggeG9yIDAgICAgICAgICAgMTEgIC0+ICAxMQoteG9yeDA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDEKLQoteG9yeDA5MCB4b3IgMDExMTExMTExICAxMTExMDExMTEgIC0+ICAxMDAwMTAwMDAKLXhvcngwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwCi14b3J4MDkyIHhvciAxMTAxMTExMTEgIDExMTEwMTExMSAgLT4gICAgMTAxMDAwMAoteG9yeDA5MyB4b3IgMTExMDExMTExICAxMTExMDExMTEgIC0+ICAgICAxMTAwMDAKLXhvcngwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwCi14b3J4MDk1IHhvciAxMTExMTAxMTEgIDExMTEwMTExMSAgLT4gICAgICAxMTAwMAoteG9yeDA5NiB4b3IgMTExMTExMDExICAxMTExMDExMTEgIC0+ICAgICAgMTAxMDAKLXhvcngwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwCi14b3J4MDk4IHhvciAxMTExMTExMTAgIDExMTEwMTExMSAgLT4gICAgICAxMDAwMQotCi14b3J4MTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMAoteG9yeDEwMSB4b3IgMTExMTAxMTExICAxMDExMTExMTEgIC0+ICAgMTAwMTAwMDAKLXhvcngxMDIgeG9yIDExMTEwMTExMSAgMTEwMTExMTExICAtPiAgICAxMDEwMDAwCi14b3J4MTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMAoteG9yeDEwNCB4b3IgMTExMTAxMTExICAxMTExMDExMTEgIC0+ICAgICAgICAgIDAKLXhvcngxMDUgeG9yIDExMTEwMTExMSAgMTExMTEwMTExICAtPiAgICAgIDExMDAwCi14b3J4MTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMAoteG9yeDEwNyB4b3IgMTExMTAxMTExICAxMTExMTExMDEgIC0+ICAgICAgMTAwMTAKLXhvcngxMDggeG9yIDExMTEwMTExMSAgMTExMTExMTEwICAtPiAgICAgIDEwMDAxCi0KLS0tIG5vbi0wLzEgc2hvdWxkIG5vdCBiZSBhY2NlcHRlZCwgbm9yIHNob3VsZCBzaWducwoteG9yeDIyMCB4b3IgMTExMTExMTEyICAxMTExMTExMTEgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjIyIHhvciA1NTU1NTU1NTUgIDU1NTU1NTU1NSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDIyMyB4b3IgNzc3Nzc3Nzc3ICA3Nzc3Nzc3NzcgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjI1IHhvciAyMjIyMjIyMjIgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDIyNiB4b3IgNDQ0NDQ0NDQ0ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjI4IHhvciA4ODg4ODg4ODggIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDIyOSB4b3IgOTk5OTk5OTk5ICAyMjIyMjIyMjIgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjMxIHhvciA5OTk5OTk5OTkgIDY2NjY2NjY2NiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDIzMiB4b3IgOTk5OTk5OTk5ICA4ODg4ODg4ODggIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIGEgZmV3IHJhbmRvbXMKLXhvcngyNDAgeG9yICA1Njc0Njg2ODkgLTkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjQxIHhvciAgNTY3MzY3Njg5ICA5MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNDMgeG9yIC03NTYyNTMyNTcgIDEzODU3OTIzNCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjQ0IHhvciAgODM1NTkwMTQ5ICA1Njc0MzU0MDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gdGVzdCBNU0QKLXhvcngyNTAgeG9yICAyMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTEgeG9yICA3MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTIgeG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTMgeG9yICA5MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTQgeG9yICAyMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTUgeG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTYgeG9yICA4MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTcgeG9yICA5MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTggeG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNTkgeG9yICAxMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjAgeG9yICAxMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjEgeG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjIgeG9yICAwMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjMgeG9yICAwMDAwMDAwMDAgNzAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjQgeG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNjUgeG9yICAwMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTVNELTEKLXhvcngyNzAgeG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzEgeG9yICAwNzAxMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzIgeG9yICAwODAwMTAwMDAgMTAwMDAwMDAxIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzMgeG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzQgeG9yICAxMDAwMDAxMDAgMDIwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzUgeG9yICAxMDAwMDAwMDAgMDcwMDAxMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzYgeG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyNzcgeG9yICAxMDAwMDAwMDAgMDkwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLS0tIHRlc3QgTFNECi14b3J4MjgwIHhvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjgxIHhvciAgMDAwMDAwMDA3IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjgyIHhvciAgMDAwMDAwMDA4IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MjgzIHhvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Mjg0IHhvciAgMTAwMDAwMDAwIDAwMDEwMDAwMiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Mjg1IHhvciAgMTAwMTAwMDAwIDAwMTAwMDAwNyAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Mjg2IHhvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Mjg3IHhvciAgMTAwMDAxMDAwIDEwMDAwMDAwOSAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi0tLSB0ZXN0IE1pZGRpZQoteG9yeDI4OCB4b3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI4OSB4b3IgIDAwMDA3MDAwMSAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5MCB4b3IgIDAwMDA4MDAwMCAxMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5MSB4b3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5MiB4b3IgIDEwMDAwMDAxMCAwMDAwMjAxMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5MyB4b3IgIDEwMDEwMDAwMCAwMDAwNzAwMTAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5NCB4b3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5NSB4b3IgIDEwMDAwMTAwMCAwMDAwOTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgotLS0gc2lnbnMKLXhvcngyOTYgeG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Mjk3IHhvciAtMTAwMDAxMDAwICAwMDAwMTAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDI5OCB4b3IgIDEwMDAwMTAwMCAtMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcngyOTkgeG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDEwMDAwCi0KLS0tIE5tYXgsIE5taW4sIE50aW55Ci14b3J4MzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzMyIHhvciAgMyAgIDFFLTk5OSAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzMzIHhvciAgNCAgIDEuMDAwMDAwMDBFLTk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzM0IHhvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzM1IHhvciAgNiAgIC0xRS0xMDA3ICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzM2IHhvciAgNyAgIC0xLjAwMDAwMDAwRS05OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzM4IHhvciAgOSAgIC05Ljk5OTk5OTk5RSs5OTkgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQxIHhvciAgOS45OTk5OTk5OUUrOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQzIHhvciAgMS4wMDAwMDAwMEUtOTk5ICAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQ0IHhvciAgMUUtMTAwNyAgICAgICAgICAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQ1IHhvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQ2IHhvciAgLTEuMDAwMDAwMDBFLTk5OSAgICAgMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQ3IHhvciAgLTFFLTk5OSAgICAgICAgICAgICAgMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4MzQ4IHhvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLS0tIEEgZmV3IG90aGVyIG5vbi1pbnRlZ2VycwoteG9yeDM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM2MiB4b3IgIDFFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM2MyB4b3IgIDAuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM2NSB4b3IgIDkuOSAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM2NiB4b3IgIDlFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3MiB4b3IgIDAgMUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3MyB4b3IgIDAgMC4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3NSB4b3IgIDAgOS45ICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDM3NiB4b3IgIDAgOUUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi0tLSBBbGwgU3BlY2lhbHMgYXJlIGluIGVycm9yCi14b3J4NzgwIHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzgyIHhvciAtSW5mICAtMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzgzIHhvciAtSW5mICAtMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg1IHhvciAtSW5mICAgMSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg2IHhvciAtSW5mICAgMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg4IHhvciAtSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzg5IHhvciAtMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzkxIHhvciAgMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzkyIHhvciAgMSAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4NzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi14b3J4Nzk0IHhvciAgSW5mICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uCi0KLXhvcng4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDEgeG9yICBJbmYgIC0xMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDIgeG9yICBJbmYgIC0xICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDQgeG9yICBJbmYgICAwICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDUgeG9yICBJbmYgICAxICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDcgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDggeG9yIC0xMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTAgeG9yIC0xICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTEgeG9yIC0wICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTMgeG9yICAxICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTQgeG9yICAxMDAwICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLXhvcng4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24KLQoteG9yeDgyMSB4b3IgIE5hTiAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyMyB4b3IgIE5hTiAtMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyNCB4b3IgIE5hTiAtMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyNiB4b3IgIE5hTiAgMSAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyNyB4b3IgIE5hTiAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgyOSB4b3IgIE5hTiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzMCB4b3IgLUluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzMiB4b3IgLTEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzMyB4b3IgLTAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzNSB4b3IgIDEgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzNiB4b3IgIDEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgotCi14b3J4ODQxIHhvciAgc05hTiAtSW5mICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg0MyB4b3IgIHNOYU4gLTEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODQ0IHhvciAgc05hTiAtMCAgICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg0NiB4b3IgIHNOYU4gIDEgICAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODQ3IHhvciAgc05hTiAgMTAwMCAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg0OSB4b3IgIHNOYU4gc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODUwIHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg1MiB4b3IgLTEwMDAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODUzIHhvciAtMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg1NSB4b3IgIDAgICAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODU2IHhvciAgMSAgICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLXhvcng4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg1OCB4b3IgIEluZiAgc05hTiAgIC0+ICBOYU4gIEludmFsaWRfb3BlcmF0aW9uCi14b3J4ODU5IHhvciAgTmFOICBzTmFOICAgLT4gIE5hTiAgSW52YWxpZF9vcGVyYXRpb24KLQotLS0gcHJvcGFnYXRpbmcgTmFOcwoteG9yeDg2MSB4b3IgIE5hTjEgICAtSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2MyB4b3IgIE5hTjMgICAgMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2NCB4b3IgIE5hTjQgICAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2NiB4b3IgLUluZiAgICAgTmFONyAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2NyB4b3IgLTEwMDAgICAgTmFOOCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg2OSB4b3IgIEluZiAgICArTmFOMTAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3MSB4b3IgIHNOYU4xMSAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3MyB4b3IgIHNOYU4xMyAgIDEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3NCB4b3IgIHNOYU4xNCAgIE5hTjE3IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3NiB4b3IgIE5hTjE2ICAgc05hTjE5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3NyB4b3IgLUluZiAgICArc05hTjIwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg3OSB4b3IgIDEwMDAgICAgc05hTjIyIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4MCB4b3IgIEluZiAgICAgc05hTjIzIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4MiB4b3IgLU5hTjI2ICAgIE5hTjI4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4MyB4b3IgLXNOYU4yNyAgc05hTjI5IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgoteG9yeDg4NSB4b3IgIDEwMDAgICAtc05hTjMxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0geG9yLmRlY1Rlc3QgLS0gZGlnaXR3aXNlIGxvZ2ljYWwgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gQ29weXJpZ2h0IChjKSBJQk0gQ29ycG9yYXRpb24sIDE5ODEsIDIwMDguICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorLS0gUGxlYXNlIHNlZSB0aGUgZG9jdW1lbnQgIkdlbmVyYWwgRGVjaW1hbCBBcml0aG1ldGljIFRlc3RjYXNlcyIgICAgIC0tDQorLS0gYXQgaHR0cDovL3d3dzIuaHVyc2xleS5pYm0uY29tL2RlY2ltYWwgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiAgICAgIC0tDQorLS0gdGhlc2UgdGVzdGNhc2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gVGhlc2UgdGVzdGNhc2VzIGFyZSBleHBlcmltZW50YWwgKCdiZXRhJyB2ZXJzaW9ucyksIGFuZCB0aGV5ICAgICAgIC0tDQorLS0gbWF5IGNvbnRhaW4gZXJyb3JzLiAgVGhleSBhcmUgb2ZmZXJlZCBvbiBhbiBhcy1pcyBiYXNpcy4gIEluICAgICAgIC0tDQorLS0gcGFydGljdWxhciwgYWNoaWV2aW5nIHRoZSBzYW1lIHJlc3VsdHMgYXMgdGhlIHRlc3RzIGhlcmUgaXMgbm90ICAgIC0tDQorLS0gYSBndWFyYW50ZWUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBjb21wbGllcyB3aXRoIGFueSBTdGFuZGFyZCAgICAgIC0tDQorLS0gb3Igc3BlY2lmaWNhdGlvbi4gIFRoZSB0ZXN0cyBhcmUgbm90IGV4aGF1c3RpdmUuICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gUGxlYXNlIHNlbmQgY29tbWVudHMsIHN1Z2dlc3Rpb25zLCBhbmQgY29ycmVjdGlvbnMgdG8gdGhlIGF1dGhvcjogIC0tDQorLS0gICBNaWtlIENvd2xpc2hhdywgSUJNIEZlbGxvdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0gICBJQk0gVUssIFBPIEJveCAzMSwgQmlybWluZ2hhbSBSb2FkLCBXYXJ3aWNrIENWMzQgNUpMLCBVSyAgICAgICAgIC0tDQorLS0gICBtZmNAdWsuaWJtLmNvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQordmVyc2lvbjogMi41OQ0KKw0KK2V4dGVuZGVkOiAgICAxDQorcHJlY2lzaW9uOiAgIDkNCityb3VuZGluZzogICAgaGFsZl91cA0KK21heEV4cG9uZW50OiA5OTkNCittaW5FeHBvbmVudDogLTk5OQ0KKw0KKy0tIFNhbml0eSBjaGVjayAodHJ1dGggdGFibGUpDQoreG9yeDAwMSB4b3IgICAgICAgICAgICAgMCAgICAwIC0+ICAgIDANCit4b3J4MDAyIHhvciAgICAgICAgICAgICAwICAgIDEgLT4gICAgMQ0KK3hvcngwMDMgeG9yICAgICAgICAgICAgIDEgICAgMCAtPiAgICAxDQoreG9yeDAwNCB4b3IgICAgICAgICAgICAgMSAgICAxIC0+ICAgIDANCit4b3J4MDA1IHhvciAgICAgICAgICAxMTAwIDEwMTAgLT4gIDExMA0KK3hvcngwMDYgeG9yICAgICAgICAgIDExMTEgICAxMCAtPiAxMTAxDQorLS0gYW5kIGF0IG1zZCBhbmQgbXNkLTENCit4b3J4MDEwIHhvciAwMDAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgICAgICAgICAwDQoreG9yeDAxMSB4b3IgMDAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgIDEwMDAwMDAwMA0KK3hvcngwMTIgeG9yIDEwMDAwMDAwMCAwMDAwMDAwMDAgLT4gICAxMDAwMDAwMDANCit4b3J4MDEzIHhvciAxMDAwMDAwMDAgMTAwMDAwMDAwIC0+ICAgICAgICAgICAwDQoreG9yeDAxNCB4b3IgMDAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgICAgICAgICAgMA0KK3hvcngwMTUgeG9yIDAwMDAwMDAwMCAwMTAwMDAwMDAgLT4gICAgMTAwMDAwMDANCit4b3J4MDE2IHhvciAwMTAwMDAwMDAgMDAwMDAwMDAwIC0+ICAgIDEwMDAwMDAwDQoreG9yeDAxNyB4b3IgMDEwMDAwMDAwIDAxMDAwMDAwMCAtPiAgICAgICAgICAgMA0KKw0KKy0tIFZhcmlvdXMgbGVuZ3Rocw0KKy0tICAgICAgICAxMjM0NTY3ODkgICAgIDEyMzQ1Njc4OSAgICAgIDEyMzQ1Njc4OQ0KK3hvcngwMjEgeG9yIDExMTExMTExMSAgICAgMTExMTExMTExICAtPiAgMA0KK3hvcngwMjIgeG9yIDExMTExMTExMTExMSAgMTExMTExMTExICAtPiAgMA0KK3hvcngwMjMgeG9yICAxMTExMTExMSAgICAgIDExMTExMTExICAtPiAgMA0KK3hvcngwMjUgeG9yICAgMTExMTExMSAgICAgICAxMTExMTExICAtPiAgMA0KK3hvcngwMjYgeG9yICAgIDExMTExMSAgICAgICAgMTExMTExICAtPiAgMA0KK3hvcngwMjcgeG9yICAgICAxMTExMSAgICAgICAgIDExMTExICAtPiAgMA0KK3hvcngwMjggeG9yICAgICAgMTExMSAgICAgICAgICAxMTExICAtPiAgMA0KK3hvcngwMjkgeG9yICAgICAgIDExMSAgICAgICAgICAgMTExICAtPiAgMA0KK3hvcngwMzEgeG9yICAgICAgICAxMSAgICAgICAgICAgIDExICAtPiAgMA0KK3hvcngwMzIgeG9yICAgICAgICAgMSAgICAgICAgICAgICAxICAtPiAgMA0KK3hvcngwMzMgeG9yIDExMTExMTExMTExMSAxMTExMTExMTExICAtPiAgMA0KK3hvcngwMzQgeG9yIDExMTExMTExMTExIDExMTExMTExMTExICAtPiAgMA0KK3hvcngwMzUgeG9yIDExMTExMTExMTEgMTExMTExMTExMTExICAtPiAgMA0KK3hvcngwMzYgeG9yIDExMTExMTExMSAxMTExMTExMTExMTExICAtPiAgMA0KKw0KK3hvcngwNDAgeG9yIDExMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMA0KK3hvcngwNDEgeG9yICAxMTExMTExMSAgMTExMTExMTExMTExICAtPiAgMTAwMDAwMDAwDQoreG9yeDA0MiB4b3IgIDExMTExMTExICAgICAxMTExMTExMTEgIC0+ICAxMDAwMDAwMDANCit4b3J4MDQzIHhvciAgIDExMTExMTEgICAgIDEwMDAwMDAxMCAgLT4gIDEwMTExMTEwMQ0KK3hvcngwNDQgeG9yICAgIDExMTExMSAgICAgMTAwMDAwMTAwICAtPiAgMTAwMTExMDExDQoreG9yeDA0NSB4b3IgICAgIDExMTExICAgICAxMDAwMDEwMDAgIC0+ICAxMDAwMTAxMTENCit4b3J4MDQ2IHhvciAgICAgIDExMTEgICAgIDEwMDAxMDAwMCAgLT4gIDEwMDAxMTExMQ0KK3hvcngwNDcgeG9yICAgICAgIDExMSAgICAgMTAwMTAwMDAwICAtPiAgMTAwMTAwMTExDQoreG9yeDA0OCB4b3IgICAgICAgIDExICAgICAxMDEwMDAwMDAgIC0+ICAxMDEwMDAwMTENCit4b3J4MDQ5IHhvciAgICAgICAgIDEgICAgIDExMDAwMDAwMCAgLT4gIDExMDAwMDAwMQ0KKw0KK3hvcngwNTAgeG9yIDExMTExMTExMTEgIDEgIC0+ICAxMTExMTExMTANCit4b3J4MDUxIHhvciAgMTExMTExMTExICAxICAtPiAgMTExMTExMTEwDQoreG9yeDA1MiB4b3IgICAxMTExMTExMSAgMSAgLT4gIDExMTExMTEwDQoreG9yeDA1MyB4b3IgICAgMTExMTExMSAgMSAgLT4gIDExMTExMTANCit4b3J4MDU0IHhvciAgICAgMTExMTExICAxICAtPiAgMTExMTEwDQoreG9yeDA1NSB4b3IgICAgICAxMTExMSAgMSAgLT4gIDExMTEwDQoreG9yeDA1NiB4b3IgICAgICAgMTExMSAgMSAgLT4gIDExMTANCit4b3J4MDU3IHhvciAgICAgICAgMTExICAxICAtPiAgMTEwDQoreG9yeDA1OCB4b3IgICAgICAgICAxMSAgMSAgLT4gIDEwDQoreG9yeDA1OSB4b3IgICAgICAgICAgMSAgMSAgLT4gIDANCisNCit4b3J4MDYwIHhvciAxMTExMTExMTExICAwICAtPiAgMTExMTExMTExDQoreG9yeDA2MSB4b3IgIDExMTExMTExMSAgMCAgLT4gIDExMTExMTExMQ0KK3hvcngwNjIgeG9yICAgMTExMTExMTEgIDAgIC0+ICAxMTExMTExMQ0KK3hvcngwNjMgeG9yICAgIDExMTExMTEgIDAgIC0+ICAxMTExMTExDQoreG9yeDA2NCB4b3IgICAgIDExMTExMSAgMCAgLT4gIDExMTExMQ0KK3hvcngwNjUgeG9yICAgICAgMTExMTEgIDAgIC0+ICAxMTExMQ0KK3hvcngwNjYgeG9yICAgICAgIDExMTEgIDAgIC0+ICAxMTExDQoreG9yeDA2NyB4b3IgICAgICAgIDExMSAgMCAgLT4gIDExMQ0KK3hvcngwNjggeG9yICAgICAgICAgMTEgIDAgIC0+ICAxMQ0KK3hvcngwNjkgeG9yICAgICAgICAgIDEgIDAgIC0+ICAxDQorDQoreG9yeDA3MCB4b3IgMSAgMTExMTExMTExMSAgLT4gIDExMTExMTExMA0KK3hvcngwNzEgeG9yIDEgICAxMTExMTExMTEgIC0+ICAxMTExMTExMTANCit4b3J4MDcyIHhvciAxICAgIDExMTExMTExICAtPiAgMTExMTExMTANCit4b3J4MDczIHhvciAxICAgICAxMTExMTExICAtPiAgMTExMTExMA0KK3hvcngwNzQgeG9yIDEgICAgICAxMTExMTEgIC0+ICAxMTExMTANCit4b3J4MDc1IHhvciAxICAgICAgIDExMTExICAtPiAgMTExMTANCit4b3J4MDc2IHhvciAxICAgICAgICAxMTExICAtPiAgMTExMA0KK3hvcngwNzcgeG9yIDEgICAgICAgICAxMTEgIC0+ICAxMTANCit4b3J4MDc4IHhvciAxICAgICAgICAgIDExICAtPiAgMTANCit4b3J4MDc5IHhvciAxICAgICAgICAgICAxICAtPiAgMA0KKw0KK3hvcngwODAgeG9yIDAgIDExMTExMTExMTEgIC0+ICAxMTExMTExMTENCit4b3J4MDgxIHhvciAwICAgMTExMTExMTExICAtPiAgMTExMTExMTExDQoreG9yeDA4MiB4b3IgMCAgICAxMTExMTExMSAgLT4gIDExMTExMTExDQoreG9yeDA4MyB4b3IgMCAgICAgMTExMTExMSAgLT4gIDExMTExMTENCit4b3J4MDg0IHhvciAwICAgICAgMTExMTExICAtPiAgMTExMTExDQoreG9yeDA4NSB4b3IgMCAgICAgICAxMTExMSAgLT4gIDExMTExDQoreG9yeDA4NiB4b3IgMCAgICAgICAgMTExMSAgLT4gIDExMTENCit4b3J4MDg3IHhvciAwICAgICAgICAgMTExICAtPiAgMTExDQoreG9yeDA4OCB4b3IgMCAgICAgICAgICAxMSAgLT4gIDExDQoreG9yeDA4OSB4b3IgMCAgICAgICAgICAgMSAgLT4gIDENCisNCit4b3J4MDkwIHhvciAwMTExMTExMTEgIDExMTEwMTExMSAgLT4gIDEwMDAxMDAwMA0KK3hvcngwOTEgeG9yIDEwMTExMTExMSAgMTExMTAxMTExICAtPiAgIDEwMDEwMDAwDQoreG9yeDA5MiB4b3IgMTEwMTExMTExICAxMTExMDExMTEgIC0+ICAgIDEwMTAwMDANCit4b3J4MDkzIHhvciAxMTEwMTExMTEgIDExMTEwMTExMSAgLT4gICAgIDExMDAwMA0KK3hvcngwOTQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQoreG9yeDA5NSB4b3IgMTExMTEwMTExICAxMTExMDExMTEgIC0+ICAgICAgMTEwMDANCit4b3J4MDk2IHhvciAxMTExMTEwMTEgIDExMTEwMTExMSAgLT4gICAgICAxMDEwMA0KK3hvcngwOTcgeG9yIDExMTExMTEwMSAgMTExMTAxMTExICAtPiAgICAgIDEwMDEwDQoreG9yeDA5OCB4b3IgMTExMTExMTEwICAxMTExMDExMTEgIC0+ICAgICAgMTAwMDENCisNCit4b3J4MTAwIHhvciAxMTExMDExMTEgIDAxMTExMTExMSAgLT4gIDEwMDAxMDAwMA0KK3hvcngxMDEgeG9yIDExMTEwMTExMSAgMTAxMTExMTExICAtPiAgIDEwMDEwMDAwDQoreG9yeDEwMiB4b3IgMTExMTAxMTExICAxMTAxMTExMTEgIC0+ICAgIDEwMTAwMDANCit4b3J4MTAzIHhvciAxMTExMDExMTEgIDExMTAxMTExMSAgLT4gICAgIDExMDAwMA0KK3hvcngxMDQgeG9yIDExMTEwMTExMSAgMTExMTAxMTExICAtPiAgICAgICAgICAwDQoreG9yeDEwNSB4b3IgMTExMTAxMTExICAxMTExMTAxMTEgIC0+ICAgICAgMTEwMDANCit4b3J4MTA2IHhvciAxMTExMDExMTEgIDExMTExMTAxMSAgLT4gICAgICAxMDEwMA0KK3hvcngxMDcgeG9yIDExMTEwMTExMSAgMTExMTExMTAxICAtPiAgICAgIDEwMDEwDQoreG9yeDEwOCB4b3IgMTExMTAxMTExICAxMTExMTExMTAgIC0+ICAgICAgMTAwMDENCisNCistLSBub24tMC8xIHNob3VsZCBub3QgYmUgYWNjZXB0ZWQsIG5vciBzaG91bGQgc2lnbnMNCit4b3J4MjIwIHhvciAxMTExMTExMTIgIDExMTExMTExMSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyMjEgeG9yIDMzMzMzMzMzMyAgMzMzMzMzMzMzICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDIyMiB4b3IgNTU1NTU1NTU1ICA1NTU1NTU1NTUgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjIzIHhvciA3Nzc3Nzc3NzcgIDc3Nzc3Nzc3NyAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyMjQgeG9yIDk5OTk5OTk5OSAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDIyNSB4b3IgMjIyMjIyMjIyICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjI2IHhvciA0NDQ0NDQ0NDQgIDk5OTk5OTk5OSAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyMjcgeG9yIDY2NjY2NjY2NiAgOTk5OTk5OTk5ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDIyOCB4b3IgODg4ODg4ODg4ICA5OTk5OTk5OTkgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjI5IHhvciA5OTk5OTk5OTkgIDIyMjIyMjIyMiAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyMzAgeG9yIDk5OTk5OTk5OSAgNDQ0NDQ0NDQ0ICAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDIzMSB4b3IgOTk5OTk5OTk5ICA2NjY2NjY2NjYgIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjMyIHhvciA5OTk5OTk5OTkgIDg4ODg4ODg4OCAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIGEgZmV3IHJhbmRvbXMNCit4b3J4MjQwIHhvciAgNTY3NDY4Njg5IC05MzQ5ODE5NDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNDEgeG9yICA1NjczNjc2ODkgIDkzNDk4MTk0MiAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI0MiB4b3IgLTYzMTkxNzc3MiAtNzA2MDE0NjM0IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjQzIHhvciAtNzU2MjUzMjU3ICAxMzg1NzkyMzQgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNDQgeG9yICA4MzU1OTAxNDkgIDU2NzQzNTQwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QNCit4b3J4MjUwIHhvciAgMjAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI1MSB4b3IgIDcwMDAwMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNTIgeG9yICA4MDAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjUzIHhvciAgOTAwMDAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI1NCB4b3IgIDIwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNTUgeG9yICA3MDAwMDAwMDAgMDAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjU2IHhvciAgODAwMDAwMDAwIDAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI1NyB4b3IgIDkwMDAwMDAwMCAwMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNTggeG9yICAxMDAwMDAwMDAgMjAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjU5IHhvciAgMTAwMDAwMDAwIDcwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI2MCB4b3IgIDEwMDAwMDAwMCA4MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNjEgeG9yICAxMDAwMDAwMDAgOTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjYyIHhvciAgMDAwMDAwMDAwIDIwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI2MyB4b3IgIDAwMDAwMDAwMCA3MDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNjQgeG9yICAwMDAwMDAwMDAgODAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjY1IHhvciAgMDAwMDAwMDAwIDkwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBNU0QtMQ0KK3hvcngyNzAgeG9yICAwMjAwMDAwMDAgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjcxIHhvciAgMDcwMTAwMDAwIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI3MiB4b3IgIDA4MDAxMDAwMCAxMDAwMDAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNzMgeG9yICAwOTAwMDEwMDAgMTAwMDAwMDEwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Mjc0IHhvciAgMTAwMDAwMTAwIDAyMDAxMDEwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI3NSB4b3IgIDEwMDAwMDAwMCAwNzAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyNzYgeG9yICAxMDAwMDAwMTAgMDgwMDEwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Mjc3IHhvciAgMTAwMDAwMDAwIDA5MDAwMDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQorLS0gdGVzdCBMU0QNCit4b3J4MjgwIHhvciAgMDAxMDAwMDAyIDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI4MSB4b3IgIDAwMDAwMDAwNyAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyODIgeG9yICAwMDAwMDAwMDggMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjgzIHhvciAgMDAwMDAwMDA5IDEwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI4NCB4b3IgIDEwMDAwMDAwMCAwMDAxMDAwMDIgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyODUgeG9yICAxMDAxMDAwMDAgMDAxMDAwMDA3IC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Mjg2IHhvciAgMTAwMDEwMDAwIDAxMDAwMDAwOCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI4NyB4b3IgIDEwMDAwMTAwMCAxMDAwMDAwMDkgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKy0tIHRlc3QgTWlkZGllDQoreG9yeDI4OCB4b3IgIDAwMTAyMDAwMCAxMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyODkgeG9yICAwMDAwNzAwMDEgMTAwMDAwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjkwIHhvciAgMDAwMDgwMDAwIDEwMDAxMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI5MSB4b3IgIDAwMDA5MDAwMCAxMDAwMDEwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyOTIgeG9yICAxMDAwMDAwMTAgMDAwMDIwMTAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MjkzIHhvciAgMTAwMTAwMDAwIDAwMDA3MDAxMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI5NCB4b3IgIDEwMDAxMDEwMCAwMDAwODAwMDEgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyOTUgeG9yICAxMDAwMDEwMDAgMDAwMDkwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCistLSBzaWducw0KK3hvcngyOTYgeG9yIC0xMDAwMDEwMDAgLTAwMDAwMDAwMCAtPiAgTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDI5NyB4b3IgLTEwMDAwMTAwMCAgMDAwMDEwMDAwIC0+ICBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Mjk4IHhvciAgMTAwMDAxMDAwIC0wMDAwMDAwMDAgLT4gIE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngyOTkgeG9yICAxMDAwMDEwMDAgIDAwMDAxMTAwMCAtPiAgMTAwMDEwMDAwDQorDQorLS0gTm1heCwgTm1pbiwgTnRpbnkNCit4b3J4MzMxIHhvciAgMiAgIDkuOTk5OTk5OTlFKzk5OSAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDMzMiB4b3IgIDMgICAxRS05OTkgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzMzMgeG9yICA0ICAgMS4wMDAwMDAwMEUtOTk5ICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzM0IHhvciAgNSAgIDFFLTEwMDcgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDMzNSB4b3IgIDYgICAtMUUtMTAwNyAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzMzYgeG9yICA3ICAgLTEuMDAwMDAwMDBFLTk5OSAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzM3IHhvciAgOCAgIC0xRS05OTkgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDMzOCB4b3IgIDkgICAtOS45OTk5OTk5OUUrOTk5ICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNDEgeG9yICA5Ljk5OTk5OTk5RSs5OTkgICAgIC0xOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzQyIHhvciAgMUUtOTk5ICAgICAgICAgICAgICAgMDEgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDM0MyB4b3IgIDEuMDAwMDAwMDBFLTk5OSAgICAgLTE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNDQgeG9yICAxRS0xMDA3ICAgICAgICAgICAgICAxOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzQ1IHhvciAgLTFFLTEwMDcgICAgICAgICAgICAtMTAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDM0NiB4b3IgIC0xLjAwMDAwMDAwRS05OTkgICAgIDE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNDcgeG9yICAtMUUtOTk5ICAgICAgICAgICAgICAxMCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzQ4IHhvciAgLTkuOTk5OTk5OTlFKzk5OSAgICAtMTggLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQSBmZXcgb3RoZXIgbm9uLWludGVnZXJzDQoreG9yeDM2MSB4b3IgIDEuMCAgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNjIgeG9yICAxRSsxICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzYzIHhvciAgMC4wICAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDM2NCB4b3IgIDBFKzEgICAgICAgICAgICAgICAgIDEgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNjUgeG9yICA5LjkgICAgICAgICAgICAgICAgICAxICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzY2IHhvciAgOUUrMSAgICAgICAgICAgICAgICAgMSAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDM3MSB4b3IgIDAgMS4wICAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNzIgeG9yICAwIDFFKzEgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4MzczIHhvciAgMCAwLjAgICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDM3NCB4b3IgIDAgMEUrMSAgICAgICAgICAgICAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcngzNzUgeG9yICAwIDkuOSAgICAgICAgICAgICAgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Mzc2IHhvciAgMCA5RSsxICAgICAgICAgICAgICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQorDQorLS0gQWxsIFNwZWNpYWxzIGFyZSBpbiBlcnJvcg0KK3hvcng3ODAgeG9yIC1JbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4NzgxIHhvciAtSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDc4MiB4b3IgLUluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng3ODMgeG9yIC1JbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Nzg0IHhvciAtSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDc4NSB4b3IgLUluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng3ODYgeG9yIC1JbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4Nzg3IHhvciAtMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDc4OCB4b3IgLUluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng3ODkgeG9yIC0xICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4NzkwIHhvciAtMCAgICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDc5MSB4b3IgIDAgICAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng3OTIgeG9yICAxICAgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4NzkzIHhvciAgMTAwMCAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDc5NCB4b3IgIEluZiAgLUluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3hvcng4MDAgeG9yICBJbmYgIC1JbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODAxIHhvciAgSW5mICAtMTAwMCAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgwMiB4b3IgIEluZiAgLTEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MDMgeG9yICBJbmYgIC0wICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODA0IHhvciAgSW5mICAgMCAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgwNSB4b3IgIEluZiAgIDEgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MDYgeG9yICBJbmYgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODA3IHhvciAgSW5mICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgwOCB4b3IgLTEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MDkgeG9yIC1JbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODEwIHhvciAtMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgxMSB4b3IgLTAgICAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MTIgeG9yICAwICAgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODEzIHhvciAgMSAgICAgSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgxNCB4b3IgIDEwMDAgIEluZiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MTUgeG9yICBJbmYgICBJbmYgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCisNCit4b3J4ODIxIHhvciAgTmFOIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgyMiB4b3IgIE5hTiAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MjMgeG9yICBOYU4gLTEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODI0IHhvciAgTmFOIC0wICAgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgyNSB4b3IgIE5hTiAgMCAgICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MjYgeG9yICBOYU4gIDEgICAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODI3IHhvciAgTmFOICAxMDAwICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgyOCB4b3IgIE5hTiAgSW5mICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MjkgeG9yICBOYU4gIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODMwIHhvciAtSW5mICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgzMSB4b3IgLTEwMDAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MzIgeG9yIC0xICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODMzIHhvciAtMCAgICBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgzNCB4b3IgIDAgICAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4MzUgeG9yICAxICAgIE5hTiAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODM2IHhvciAgMTAwMCBOYU4gICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDgzNyB4b3IgIEluZiAgTmFOICAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KKw0KK3hvcng4NDEgeG9yICBzTmFOIC1JbmYgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDIgeG9yICBzTmFOIC0xMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDMgeG9yICBzTmFOIC0xICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDQgeG9yICBzTmFOIC0wICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDUgeG9yICBzTmFOICAwICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDYgeG9yICBzTmFOICAxICAgICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDcgeG9yICBzTmFOICAxMDAwICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDggeG9yICBzTmFOICBOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NDkgeG9yICBzTmFOIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTAgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTEgeG9yIC1JbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTIgeG9yIC0xMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTMgeG9yIC0xICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTQgeG9yIC0wICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTUgeG9yICAwICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTYgeG9yICAxICAgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTcgeG9yICAxMDAwIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTggeG9yICBJbmYgIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NTkgeG9yICBOYU4gIHNOYU4gICAtPiAgTmFOICBJbnZhbGlkX29wZXJhdGlvbg0KKw0KKy0tIHByb3BhZ2F0aW5nIE5hTnMNCit4b3J4ODYxIHhvciAgTmFOMSAgIC1JbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg2MiB4b3IgK05hTjIgICAtMTAwMCAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NjMgeG9yICBOYU4zICAgIDEwMDAgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODY0IHhvciAgTmFONCAgICBJbmYgICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg2NSB4b3IgIE5hTjUgICArTmFONiAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NjYgeG9yIC1JbmYgICAgIE5hTjcgICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODY3IHhvciAtMTAwMCAgICBOYU44ICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg2OCB4b3IgIDEwMDAgICAgTmFOOSAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NjkgeG9yICBJbmYgICAgK05hTjEwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODcxIHhvciAgc05hTjExICAtSW5mICAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg3MiB4b3IgIHNOYU4xMiAgLTEwMDAgIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NzMgeG9yICBzTmFOMTMgICAxMDAwICAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODc0IHhvciAgc05hTjE0ICAgTmFOMTcgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg3NSB4b3IgIHNOYU4xNSAgc05hTjE4IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NzYgeG9yICBOYU4xNiAgIHNOYU4xOSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODc3IHhvciAtSW5mICAgICtzTmFOMjAgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg3OCB4b3IgLTEwMDAgICAgc05hTjIxIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4NzkgeG9yICAxMDAwICAgIHNOYU4yMiAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODgwIHhvciAgSW5mICAgICBzTmFOMjMgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg4MSB4b3IgK05hTjI1ICArc05hTjI0IC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4ODIgeG9yIC1OYU4yNiAgICBOYU4yOCAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCit4b3J4ODgzIHhvciAtc05hTjI3ICBzTmFOMjkgLT4gTmFOIEludmFsaWRfb3BlcmF0aW9uDQoreG9yeDg4NCB4b3IgIDEwMDAgICAgLU5hTjMwIC0+IE5hTiBJbnZhbGlkX29wZXJhdGlvbg0KK3hvcng4ODUgeG9yICAxMDAwICAgLXNOYU4zMSAtPiBOYU4gSW52YWxpZF9vcGVyYXRpb24NCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkgYi9MaWIvdGVzdC9kb2N0ZXN0X2FsaWFzZXMucHkKaW5kZXggZTVlNmIyOS4uMzBjZWZhZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvZG9jdGVzdF9hbGlhc2VzLnB5CisrKyBiL0xpYi90ZXN0L2RvY3Rlc3RfYWxpYXNlcy5weQpAQCAtMTAsNCArMTAsNCBAQAogICAgICAgICAnJycKICAgICAgICAgcmV0dXJuICdmJwogCi0gICAgICAgIGcgPSBmICMgZGVmaW5lIGFuIGFsaWFzIGZvciBmCisgICAgZyA9IGYgIyBkZWZpbmUgYW4gYWxpYXMgZm9yIGYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2VuY29kZWRfbW9kdWxlcy9fX2luaXRfXy5weSBiL0xpYi90ZXN0L2VuY29kZWRfbW9kdWxlcy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzQzMjUyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZW5jb2RlZF9tb2R1bGVzL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjMgQEAKKyMgLSotIGVuY29kaW5nOiB1dGYtOCAtKi0KKworIyBUaGlzIGlzIGEgcGFja2FnZSB0aGF0IGNvbnRhaW5zIGEgbnVtYmVyIG9mIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCB0bworIyB0ZXN0IGltcG9ydCBmcm9tIHRoZSBzb3VyY2UgZmlsZXMgdGhhdCBoYXZlIGRpZmZlcmVudCBlbmNvZGluZ3MuCisjIFRoaXMgZmlsZSAodGhlIF9faW5pdF9fIG1vZHVsZSBvZiB0aGUgcGFja2FnZSksIGlzIGVuY29kZWQgaW4gdXRmLTgKKyMgYW5kIGNvbnRhaW5zIGEgbGlzdCBvZiBzdHJpbmdzIGZyb20gdmFyaW91cyB1bmljb2RlIHBsYW5lcyB0aGF0IGFyZQorIyBlbmNvZGVkIGRpZmZlcmVudGx5IHRvIGNvbXBhcmUgdGhlbSB0byB0aGUgc2FtZSBzdHJpbmdzIGVuY29kZWQKKyMgZGlmZmVyZW50bHkgaW4gc3VibW9kdWxlcy4gIFRoZSBmb2xsb3dpbmcgbGlzdCwgdGVzdF9zdHJpbmdzLAorIyBjb250YWlucyBhIGxpc3Qgb2YgdHVwbGVzLiBUaGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHR1cGxlIGlzIHRoZQorIyBzdWZmaXggdGhhdCBzaG91bGQgYmUgcHJlcGVuZGVkIHdpdGggJ21vZHVsZV8nIHRvIGFycml2ZSBhdCB0aGUKKyMgZW5jb2RlZCBzdWJtb2R1bGUgbmFtZSwgdGhlIHNlY29uZCBpdGVtIGlzIHRoZSBlbmNvZGluZyBhbmQgdGhlIGxhc3QKKyMgaXMgdGhlIHRlc3Qgc3RyaW5nLiAgVGhlIHNhbWUgc3RyaW5nIGlzIGFzc2lnbmVkIHRvIHRoZSB2YXJpYWJsZQorIyBuYW1lZCAndGVzdCcgaW5zaWRlIHRoZSBzdWJtb2R1bGUuICBJZiB0aGUgZGVjb2Rpbmcgb2YgbW9kdWxlcyB3b3JrcworIyBjb3JyZWN0bHksIGZyb20gbW9kdWxlX3h5eiBpbXBvcnQgdGVzdCBzaG91bGQgcmVzdWx0IGluIHRoZSBzYW1lCisjIHN0cmluZyBhcyBsaXN0ZWQgYmVsb3cgaW4gdGhlICd4eXonIGVudHJ5LgorCisjIG1vZHVsZSwgZW5jb2RpbmcsIHRlc3Qgc3RyaW5nCit0ZXN0X3N0cmluZ3MgPSAoCisgICAgKCdpc29fODg1OV8xJywgJ2lzby04ODU5LTEnLCAiTGVzIGhvbW1lcyBvbnQgb3VibGnDqSBjZXR0ZSB2w6lyaXTDqSwgIgorICAgICAiZGl0IGxlIHJlbmFyZC4gTWFpcyB0dSBuZSBkb2lzIHBhcyBsJ291YmxpZXIuIFR1IGRldmllbnMgIgorICAgICAicmVzcG9uc2FibGUgcG91ciB0b3Vqb3VycyBkZSBjZSBxdWUgdHUgYXMgYXBwcml2b2lzw6kuIiksCisgICAgKCdrb2k4X3InLCAna29pOC1yJywgItCf0L7Qt9C90LDQvdC40LUg0LHQtdGB0LrQvtC90LXRh9C90L7RgdGC0Lgg0YLRgNC10LHRg9C10YIg0LHQtdGB0LrQvtC90LXRh9C90L7Qs9C+INCy0YDQtdC80LXQvdC4LiIpCispCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9lbmNvZGVkX21vZHVsZXMvbW9kdWxlX2lzb184ODU5XzEucHkgYi9MaWIvdGVzdC9lbmNvZGVkX21vZHVsZXMvbW9kdWxlX2lzb184ODU5XzEucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0YTE1YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2VuY29kZWRfbW9kdWxlcy9tb2R1bGVfaXNvXzg4NTlfMS5weQpAQCAtMCwwICsxLDUgQEAKKyMgdGVzdCBpc28tODg1OS0xIGVuY29kaW5nCisjIC0qLSBlbmNvZGluZzogaXNvLTg4NTktMSAtKi0KK3Rlc3QgPSAoIkxlcyBob21tZXMgb250IG91Ymxp6SBjZXR0ZSB26XJpdOksICIKKyAgICAgICAgImRpdCBsZSByZW5hcmQuIE1haXMgdHUgbmUgZG9pcyBwYXMgbCdvdWJsaWVyLiBUdSBkZXZpZW5zICIKKyAgICAgICAgInJlc3BvbnNhYmxlIHBvdXIgdG91am91cnMgZGUgY2UgcXVlIHR1IGFzIGFwcHJpdm9pc+kuIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2VuY29kZWRfbW9kdWxlcy9tb2R1bGVfa29pOF9yLnB5IGIvTGliL3Rlc3QvZW5jb2RlZF9tb2R1bGVzL21vZHVsZV9rb2k4X3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIyM2E1YQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2VuY29kZWRfbW9kdWxlcy9tb2R1bGVfa29pOF9yLnB5CkBAIC0wLDAgKzEsMyBAQAorIyB0ZXN0IGtvaTgtciBlbmNvZGluZworIyAtKi0gZW5jb2Rpbmc6IGtvaTgtciAgLSotCit0ZXN0ID0gIvDP2s7BzsnFIMLF08vPzsXezs/T1Mkg1NLFwtXF1CDCxdPLz87F3s7Px88g19LFzcXOyS4iCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9leGNlcHRpb25faGllcmFyY2h5LnR4dCBiL0xpYi90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0CmluZGV4IDczY2NiNjYuLjUwMzdiMzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0CisrKyBiL0xpYi90ZXN0L2V4Y2VwdGlvbl9oaWVyYXJjaHkudHh0CkBAIC00NywzICs0Nyw0IEBACiAgICAgICAgICAgICstLSBJbXBvcnRXYXJuaW5nCiAgICAgICAgICAgICstLSBVbmljb2RlV2FybmluZwogICAgICAgICAgICArLS0gQnl0ZXNXYXJuaW5nCisgICAgICAgICAgICstLSBSZXNvdXJjZVdhcm5pbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weSBiL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQppbmRleCBhNjk2NTNiLi4xY2FhYjFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mb3JrX3dhaXQucHkKKysrIGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CkBAIC0xLDYgKzEsNiBAQAogIiIiVGhpcyB0ZXN0IGNhc2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9ya2luZyBhbmQgd2FpdCBiZWhhdmlvci4KIAotVG8gdGVzdCBkaWZmZXJlbnQgd2FpdCBiZWhhdmlvciwgb3ZlcnJpc2UgdGhlIHdhaXRfaW1wbCBtZXRob2QuCitUbyB0ZXN0IGRpZmZlcmVudCB3YWl0IGJlaGF2aW9yLCBvdmVycmlkZSB0aGUgd2FpdF9pbXBsIG1ldGhvZC4KIAogV2Ugd2FudCBmb3JrMSgpIHNlbWFudGljcyAtLSBvbmx5IHRoZSBmb3JraW5nIHRocmVhZCBzdXJ2aXZlcyBpbiB0aGUKIGNoaWxkIGFmdGVyIGEgZm9yaygpLgpAQCAtOSw3ICs5LDkgQEAKIGFjdGl2ZSB0aHJlYWRzIHN1cnZpdmUgaW4gdGhlIGNoaWxkIGFmdGVyIGEgZm9yaygpOyB0aGlzIGlzIGFuIGVycm9yLgogIiIiCiAKLWltcG9ydCBvcywgc3lzLCB0aW1lLCBfdGhyZWFkLCB1bml0dGVzdAoraW1wb3J0IG9zLCBzeXMsIHRpbWUsIHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5zdXBwb3J0IGFzIHN1cHBvcnQKK190aHJlYWQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogCiBMT05HU0xFRVAgPSAyCiBTSE9SVFNMRUVQID0gMC41CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0IGIvTGliL3Rlc3QvZm9ybWF0ZmxvYXRfdGVzdGNhc2VzLnR4dAppbmRleCA0Y2YyMGFhLi4yNWMwN2JhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9mb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0CisrKyBiL0xpYi90ZXN0L2Zvcm1hdGZsb2F0X3Rlc3RjYXNlcy50eHQKQEAgLTI3OSw2ICsyNzksMTEgQEAKICUuMmcgMC4wMDAxMjMgLT4gMC4wMDAxMgogJS4yZyAwLjAwMDAxMjMgLT4gMS4yZS0wNQogCistLSBiYWQgY2FzZXMgZnJvbSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlOTk4MAorJS4xMmcgMzgyMTAuMCAtPiAzODIxMAorJS4xMmcgMzcyMTAuMCAtPiAzNzIxMAorJS4xMmcgMzYyMTAuMCAtPiAzNjIxMAorCiAtLSBhbHRlcm5hdGUgZyBmb3JtYXR0aW5nOiAgYWx3YXlzIGluY2x1ZGUgZGVjaW1hbCBwb2ludCBhbmQKIC0tIGV4YWN0bHkgPHByZWNpc2lvbj4gc2lnbmlmaWNhbnQgZGlnaXRzLgogJSMuMGcgMCAtPiAwLgpAQCAtMzE0LDQzICszMTksMzcgQEAKICUjLjVnIDIzNC41NiAtPiAyMzQuNTYKICUjLjZnIDIzNC41NiAtPiAyMzQuNTYwCiAKLS0tIGZvciByZXByIGZvcm1hdHRpbmcgc2VlIHRoZSBzZXBhcmF0ZSB0ZXN0X3Nob3J0X3JlcHIgdGVzdCBpbgotLS0gdGVzdF9mbG9hdC5weS4gIE5vdCBhbGwgcGxhdGZvcm1zIHVzZSBzaG9ydCByZXByIGZvciBmbG9hdHMuCi0KLS0tIHN0ciBmb3JtYXR0aW5nLiAgUmVzdWx0IGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsIHBvaW50IGFuZCBhdAorLS0gcmVwciBmb3JtYXR0aW5nLiAgUmVzdWx0IGFsd2F5cyBpbmNsdWRlcyBkZWNpbWFsIHBvaW50IGFuZCBhdAogLS0gbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIHRoZSBwb2ludCwgb3IgYW4gZXhwb25lbnQuCi0lcyAwIC0+IDAuMAotJXMgMSAtPiAxLjAKKyVyIDAgLT4gMC4wCislciAxIC0+IDEuMAogCi0lcyAwLjAxIC0+IDAuMDEKLSVzIDAuMDIgLT4gMC4wMgotJXMgMC4wMyAtPiAwLjAzCi0lcyAwLjA0IC0+IDAuMDQKLSVzIDAuMDUgLT4gMC4wNQorJXIgMC4wMSAtPiAwLjAxCislciAwLjAyIC0+IDAuMDIKKyVyIDAuMDMgLT4gMC4wMworJXIgMC4wNCAtPiAwLjA0CislciAwLjA1IC0+IDAuMDUKIAotLS0gc3RyIHRydW5jYXRlcyB0byAxMiBzaWduaWZpY2FudCBkaWdpdHMKLSVzIDEuMjM0MTIzNDEyMzQxIC0+IDEuMjM0MTIzNDEyMzQKLSVzIDEuMjM0MTIzNDEyMzQgLT4gMS4yMzQxMjM0MTIzNAotJXMgMS4yMzQxMjM0MTIzIC0+IDEuMjM0MTIzNDEyMwotCi0tLSB2YWx1ZXMgPj0gMWUxMSBnZXQgYW4gZXhwb25lbnQKLSVzIDEwIC0+IDEwLjAKLSVzIDEwMCAtPiAxMDAuMAotJXMgMWUxMCAtPiAxMDAwMDAwMDAwMC4wCi0lcyA5Ljk5OWUxMCAtPiA5OTk5MDAwMDAwMC4wCi0lcyA5OTk5OTk5OTk5OSAtPiA5OTk5OTk5OTk5OS4wCi0lcyA5OTk5OTk5OTk5OS45IC0+IDk5OTk5OTk5OTk5LjkKLSVzIDk5OTk5OTk5OTk5Ljk5IC0+IDFlKzExCi0lcyAxZTExIC0+IDFlKzExCi0lcyAxZTEyIC0+IDFlKzEyCistLSB2YWx1ZXMgPj0gMWUxNiBnZXQgYW4gZXhwb25lbnQKKyVyIDEwIC0+IDEwLjAKKyVyIDEwMCAtPiAxMDAuMAorJXIgMWUxNSAtPiAxMDAwMDAwMDAwMDAwMDAwLjAKKyVyIDkuOTk5ZTE1IC0+IDk5OTkwMDAwMDAwMDAwMDAuMAorJXIgOTk5OTk5OTk5OTk5OTk5OCAtPiA5OTk5OTk5OTk5OTk5OTk4LjAKKyVyIDk5OTk5OTk5OTk5OTk5OTkgLT4gMWUrMTYKKyVyIDFlMTYgLT4gMWUrMTYKKyVyIDFlMTcgLT4gMWUrMTcKIAogLS0gYXMgZG8gdmFsdWVzIDwgMWUtNAotJXMgMWUtMyAtPiAwLjAwMQotJXMgMS4wMDFlLTQgLT4gMC4wMDAxMDAxCi0lcyAxLjAwMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEKLSVzIDEuMDAwMDAwMDAwMDFlLTQgLT4gMC4wMDAxMDAwMDAwMDAwMDEKLSVzIDEuMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEwMDAwMDAwMDAxCi0lcyAxZS00IC0+IDAuMDAwMQotJXMgMC45OTk5OTk5OTk5OTllLTQgLT4gOS45OTk5OTk5OTk5OWUtMDUKLSVzIDAuOTk5ZS00IC0+IDkuOTllLTA1Ci0lcyAxZS01IC0+IDFlLTA1CislciAxZS0zIC0+IDAuMDAxCislciAxLjAwMWUtNCAtPiAwLjAwMDEwMDEKKyVyIDEuMDAwMDAwMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEKKyVyIDEuMDAwMDAwMDAwMDAwMDAxZS00IC0+IDAuMDAwMTAwMDAwMDAwMDAwMDAwMQorJXIgMS4wMDAwMDAwMDAwMWUtNCAtPiAwLjAwMDEwMDAwMDAwMDAwMQorJXIgMS4wMDAwMDAwMDAxZS00IC0+IDAuMDAwMTAwMDAwMDAwMDEKKyVyIDFlLTQgLT4gMC4wMDAxCislciAwLjk5OTk5OTk5OTk5OTk5OTk5ZS00IC0+IDAuMDAwMQorJXIgMC45OTk5OTk5OTk5OTk5OTk5ZS00IC0+IDkuOTk5OTk5OTk5OTk5OTk5ZS0wNQorJXIgMC45OTk5OTk5OTk5OTllLTQgLT4gOS45OTk5OTk5OTk5OWUtMDUKKyVyIDAuOTk5ZS00IC0+IDkuOTllLTA1CislciAxZS01IC0+IDFlLTA1CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9nZGJfc2FtcGxlLnB5IGIvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWIxM2ZiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZ2RiX3NhbXBsZS5weQpAQCAtMCwwICsxLDEyIEBACisjIFNhbXBsZSBzY3JpcHQgZm9yIHVzZSBieSB0ZXN0X2dkYi5weQorCitkZWYgZm9vKGEsIGIsIGMpOgorICAgIGJhcihhLCBiLCBjKQorCitkZWYgYmFyKGEsIGIsIGMpOgorICAgIGJheihhLCBiLCBjKQorCitkZWYgYmF6KCphcmdzKToKKyAgICBpZCg0MikKKworZm9vKDEsIDIsIDMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9pZWVlNzU0LnR4dCBiL0xpYi90ZXN0L2llZWU3NTQudHh0CmluZGV4IDVhNDFjOGYuLjg5YmIwYzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2llZWU3NTQudHh0CisrKyBiL0xpYi90ZXN0L2llZWU3NTQudHh0CkBAIC03Miw3ICs3Miw3IEBACiA+Pj4gTkFOID49IDAKIEZhbHNlCiAKLUFsbCBvcGVyYXRpb25zIGludm9sdmluZyBhIE5hTiByZXR1cm4gYSBOYU4gZXhjZXB0IGZvciB0aGUgcG93ZXIgb2YgKjAqIGFuZCAqMSouCitBbGwgb3BlcmF0aW9ucyBpbnZvbHZpbmcgYSBOYU4gcmV0dXJuIGEgTmFOIGV4Y2VwdCBmb3IgbmFuKiowIGFuZCAxKipuYW4uCiA+Pj4gMSArIE5BTgogbmFuCiA+Pj4gMSAqIE5BTgpAQCAtODEsOCArODEsMTAgQEAKIG5hbgogPj4+IDEgKiogTkFOCiAxLjAKKz4+PiBOQU4gKiogMAorMS4wCiA+Pj4gMCAqKiBOQU4KLTAuMAorbmFuCiA+Pj4gKDEuMCArIEZJLmVwc2lsb24pICogTkFOCiBuYW4KIApkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvX19pbml0X18ucHkgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIExpYi9qc29uL3Rlc3RzL19faW5pdF9fLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL19faW5pdF9fLnB5CmluZGV4IDFhMWUzZTYuLjQ5Nzc0NjggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3Rlc3RzL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L2pzb25fdGVzdHMvX19pbml0X18ucHkKQEAgLTEwLDcgKzEwLDcgQEAKICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihoZXJlKToKICAgICAgICAgaWYgZm4uc3RhcnRzd2l0aCgidGVzdCIpIGFuZCBmbi5lbmRzd2l0aCgiLnB5Iik6Ci0gICAgICAgICAgICBtb2RuYW1lID0gImpzb24udGVzdHMuIiArIGZuWzotM10KKyAgICAgICAgICAgIG1vZG5hbWUgPSAidGVzdC5qc29uX3Rlc3RzLiIgKyBmbls6LTNdCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCiAgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQogICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKSkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZGVjb2RlLnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2RlY29kZS5weQpzaW1pbGFyaXR5IGluZGV4IDY5JQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2RlY29kZS5weQppbmRleCBiZjY1ZTQ2Li4wN2RhZGZlIDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2RlY29kZS5weQorKysgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfZGVjb2RlLnB5CkBAIC0xLDEwICsxLDI1IEBACiBpbXBvcnQgZGVjaW1hbAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCiAKIGltcG9ydCBqc29uCitpbXBvcnQganNvbi5kZWNvZGVyCitpbXBvcnQganNvbi5zY2FubmVyCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAogCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHVzZV9weXRob25fc2Nhbm5lcigpOgorICAgIHB5X3NjYW5uZXIgPSBqc29uLnNjYW5uZXIucHlfbWFrZV9zY2FubmVyCisgICAgb2xkX3NjYW5uZXIgPSBqc29uLmRlY29kZXIubWFrZV9zY2FubmVyCisgICAganNvbi5kZWNvZGVyLm1ha2Vfc2Nhbm5lciA9IHB5X3NjYW5uZXIKKyAgICB0cnk6CisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAganNvbi5kZWNvZGVyLm1ha2Vfc2Nhbm5lciA9IG9sZF9zY2FubmVyCisKKwogY2xhc3MgVGVzdERlY29kZShUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKICAgICAgICAgcnZhbCA9IGpzb24ubG9hZHMoJzEuMScsIHBhcnNlX2Zsb2F0PWRlY2ltYWwuRGVjaW1hbCkKQEAgLTQ0LDMgKzU5LDE2IEBACiAgICAgICAgICMgZXhlcmNpc2UgdGhlIHVuY29tbW9uIGNhc2VzLiBUaGUgYXJyYXkgY2FzZXMgYXJlIGFscmVhZHkgY292ZXJlZC4KICAgICAgICAgcnZhbCA9IGpzb24ubG9hZHMoJ3sgICAia2V5IiAgICA6ICAgICJ2YWx1ZSIgICAgLCAgImsiOiJ2IiAgICB9JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydmFsLCB7ImtleSI6InZhbHVlIiwgImsiOiJ2In0pCisKKyAgICBkZWYgY2hlY2tfa2V5c19yZXVzZShzZWxmLCBzb3VyY2UsIGxvYWRzKToKKyAgICAgICAgcnZhbCA9IGxvYWRzKHNvdXJjZSkKKyAgICAgICAgKGEsIGIpLCAoYywgZCkgPSBzb3J0ZWQocnZhbFswXSksIHNvcnRlZChydmFsWzFdKQorICAgICAgICBzZWxmLmFzc2VydElzKGEsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYiwgZCkKKworICAgIGRlZiB0ZXN0X2tleXNfcmV1c2Uoc2VsZik6CisgICAgICAgIHMgPSAnW3siYV9rZXkiOiAxLCAiYl9ceGU5IjogMn0sIHsiYV9rZXkiOiAzLCAiYl9ceGU5IjogNH1dJworICAgICAgICBzZWxmLmNoZWNrX2tleXNfcmV1c2UocywganNvbi5sb2FkcykKKyAgICAgICAgIyBEaXNhYmxlZDogdGhlIHB1cmUgUHl0aG9uIHZlcnNpb24gb2YganNvbiBzaW1wbHkgZG9lc24ndCB3b3JrCisgICAgICAgIHdpdGggdXNlX3B5dGhvbl9zY2FubmVyKCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX2tleXNfcmV1c2UocywganNvbi5kZWNvZGVyLkpTT05EZWNvZGVyKCkuZGVjb2RlKQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9kZWZhdWx0LnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2RlZmF1bHQucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi9qc29uL3Rlc3RzL3Rlc3RfZGVmYXVsdC5weQpyZW5hbWUgdG8gTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2RlZmF1bHQucHkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZHVtcC5weSBiL0xpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9kdW1wLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2R1bXAucHkKcmVuYW1lIHRvIExpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9kdW1wLnB5CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2VuY29kZV9iYXNlc3RyaW5nX2FzY2lpLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkucHkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfZmFpbC5weSBiL0xpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9mYWlsLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2ZhaWwucHkKcmVuYW1lIHRvIExpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9mYWlsLnB5CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X2Zsb2F0LnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2Zsb2F0LnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2Zsb2F0LnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfZmxvYXQucHkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfaW5kZW50LnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2luZGVudC5weQpzaW1pbGFyaXR5IGluZGV4IDY1JQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X2luZGVudC5weQpyZW5hbWUgdG8gTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X2luZGVudC5weQppbmRleCBkNDVhYTg1Li42OTJhNDk0IDEwMDY0NAotLS0gYS9MaWIvanNvbi90ZXN0cy90ZXN0X2luZGVudC5weQorKysgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfaW5kZW50LnB5CkBAIC0xMSwzNSArMTEsMzkgQEAKIAogICAgICAgICBleHBlY3QgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAogICAgICAgICBbCi0gICAgICAgICAgWwotICAgICAgICAgICAgImJsb3JwaWUiCi0gICAgICAgICAgXSwKLSAgICAgICAgICBbCi0gICAgICAgICAgICAid2hvb3BzIgotICAgICAgICAgIF0sCi0gICAgICAgICAgW10sCi0gICAgICAgICAgImQtc2h0YWVvdSIsCi0gICAgICAgICAgImQtbnRoaW91aCIsCi0gICAgICAgICAgImktdmhiamtobnRoIiwKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAibmlmdHkiOiA4NwotICAgICAgICAgIH0sCi0gICAgICAgICAgewotICAgICAgICAgICAgImZpZWxkIjogInllcyIsCi0gICAgICAgICAgICAibW9yZWZpZWxkIjogZmFsc2UKLSAgICAgICAgICB9CisgICAgICAgIFx0WworICAgICAgICBcdFx0ImJsb3JwaWUiCisgICAgICAgIFx0XSwKKyAgICAgICAgXHRbCisgICAgICAgIFx0XHQid2hvb3BzIgorICAgICAgICBcdF0sCisgICAgICAgIFx0W10sCisgICAgICAgIFx0ImQtc2h0YWVvdSIsCisgICAgICAgIFx0ImQtbnRoaW91aCIsCisgICAgICAgIFx0ImktdmhiamtobnRoIiwKKyAgICAgICAgXHR7CisgICAgICAgIFx0XHQibmlmdHkiOiA4NworICAgICAgICBcdH0sCisgICAgICAgIFx0eworICAgICAgICBcdFx0ImZpZWxkIjogInllcyIsCisgICAgICAgIFx0XHQibW9yZWZpZWxkIjogZmFsc2UKKyAgICAgICAgXHR9CiAgICAgICAgIF0iIiIpCiAKIAogICAgICAgICBkMSA9IGpzb24uZHVtcHMoaCkKICAgICAgICAgZDIgPSBqc29uLmR1bXBzKGgsIGluZGVudD0yLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKKyAgICAgICAgZDMgPSBqc29uLmR1bXBzKGgsIGluZGVudD0nXHQnLCBzb3J0X2tleXM9VHJ1ZSwgc2VwYXJhdG9ycz0oJywnLCAnOiAnKSkKIAogICAgICAgICBoMSA9IGpzb24ubG9hZHMoZDEpCiAgICAgICAgIGgyID0ganNvbi5sb2FkcyhkMikKKyAgICAgICAgaDMgPSBqc29uLmxvYWRzKGQzKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEsIGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDIsIGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMywgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMiwgZXhwZWN0LmV4cGFuZHRhYnMoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDMsIGV4cGVjdCkKIAogICAgIGRlZiB0ZXN0X2luZGVudDAoc2VsZik6CiAgICAgICAgIGggPSB7MzogMX0KZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczEucHkgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfcGFzczEucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi9qc29uL3Rlc3RzL3Rlc3RfcGFzczEucHkKcmVuYW1lIHRvIExpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9wYXNzMS5weQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMi5weSBiL0xpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9wYXNzMi5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL2pzb24vdGVzdHMvdGVzdF9wYXNzMi5weQpyZW5hbWUgdG8gTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X3Bhc3MyLnB5CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X3Bhc3MzLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X3Bhc3MzLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfcGFzczMucHkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3RfcmVjdXJzaW9uLnB5IGIvTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X3JlY3Vyc2lvbi5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL2pzb24vdGVzdHMvdGVzdF9yZWN1cnNpb24ucHkKcmVuYW1lIHRvIExpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9yZWN1cnNpb24ucHkKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3Rlc3RzL3Rlc3Rfc2NhbnN0cmluZy5weSBiL0xpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9zY2Fuc3RyaW5nLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvanNvbi90ZXN0cy90ZXN0X3NjYW5zdHJpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9zY2Fuc3RyaW5nLnB5CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3NlcGFyYXRvcnMucHkgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3Rfc2VwYXJhdG9ycy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL2pzb24vdGVzdHMvdGVzdF9zZXBhcmF0b3JzLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3Rfc2VwYXJhdG9ycy5weQpkaWZmIC0tZ2l0IGEvTGliL2pzb24vdGVzdHMvdGVzdF9zcGVlZHVwcy5weSBiL0xpYi90ZXN0L2pzb25fdGVzdHMvdGVzdF9zcGVlZHVwcy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL2pzb24vdGVzdHMvdGVzdF9zcGVlZHVwcy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvanNvbl90ZXN0cy90ZXN0X3NwZWVkdXBzLnB5CmRpZmYgLS1naXQgYS9MaWIvanNvbi90ZXN0cy90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfdW5pY29kZS5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL2pzb24vdGVzdHMvdGVzdF91bmljb2RlLnB5CnJlbmFtZSB0byBMaWIvdGVzdC9qc29uX3Rlc3RzL3Rlc3RfdW5pY29kZS5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydC5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0LnBlbQppbmRleCAyZjQ2ZmNmLi42NDMxOGFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9rZXljZXJ0LnBlbQorKysgYi9MaWIvdGVzdC9rZXljZXJ0LnBlbQpAQCAtMSwzMiArMSwzMSBAQAotLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJQ1h3SUJBQUtCZ1FDOGRkcmhtK0x1dEJ2alljUWxuSDIxUFBJc2VKMUpWRzJITW1OMkNtWmsyWXVrTys5TAotb3BkSmhUdmJHZkVqMERRczFJRThNK2tUVXlPbXVLZlZyRk1Ld3RWZUNKcGhyQW5ob3o3VFlPdUxCU3F0N2xWSAotZmhpL1Z3b3ZFU0psYUJPcCtXTW5maGNkdVBFWUhZeC82Y25WYXBJa1puTHQzMHp1MnVtK0R6QTlqUUlEQVFBQgotQW9HQkFLMEZacGFLajZXbkpaTjBScWhoSytnZ3RCV3dCbmMwVS9vemdLejJqMXMzZnNTaFllaUd0VzZDSzVuVQotRDFkWjV3emhiR1RoSTdMaU9YRHZSdWNjOW43dlVnaTBhbHFQUS9QRm9kUHhBTi9lRVlrbVhRN1cyazd6d3NEQQotSVVLMEtVaGt0UWJMdThxRi9tOHFNODZiYTl5OS85WWtYdVFiWjNDT2w1YWhUWnJoQWtFQTMwMVAwOFJLdjNLTQotb1huR1UyVUhUdUoxTUFEMmhPclB4akQ0L3d4QS8zOUVXRzliWmN6Ykp5Z2dCNFJIdTBJM05PU0ZqQW0zSFFtMAotQU5PdTVRSzlvd0pCQU5nT2VMZk5OY0Y0cHArVWlrUkZxeGs1aFVMcVJBV3pWeFZyV2U4NUZsUG0wVlZtSGJiLwotbG9pZjdtcWpVOG8xalRkL0xNN1JEOWYydXNaeUUycHNhdzhDUVFDTkxoa3BYM0tPNWtLSm1TOU43Sk1aU2M0agotb29nNTh5ZVlPOEJCcUtLenB1ZzBMWHVRdWx0WXYySzR2ZWFJTzA0aUw5VkxlNXo5Uy9RMWphQ0hCQnVYQWtFQQotejhnakdvaTFBT3A2UEJCTFpOc25jQ3ZjVi8wYUMrMXNlNEh4VE5vMitkdUtTRG5icStsanFPTStFN29kVStOcQotZXd2SVdPRy8vZThmc3NkMG1xM0h5d0pCQUo4bC9jOEdWbXJwRlR4OHIvbloyUHl5anQzZEgxd2lkb29EWFlTVgotcTZHYmY0MUxsbzVzWUF0bXhkbmRUTEFTdUhLZWNhY1RnWlZoeTBGcnlacExLclU9Ci0tLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZHdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtRXdnZ0pkQWdFQUFvR0JBTnRiMCtZckt1eGV2R3BtCitMcmphVWhaU2d6NnpGQW11R0ZtS21VYmRqbWZ2OXpTbW1kc1FJa3NLKytqSzBCZTlMZVp5MjBqNmFoT2Z1VmEwCit1ZkVtUG9QN0Z5NGhYZWdLWlI5Y0NXY0llL0E2SDJ4V0YxSUlKTFJUTGFVOG9sL0k3VCt1bTVIRDVBd0F3TlBQCitVU05VMEVlZ212cCt4eFd1M05YMm0xVmVvdDg1QWdNQkFBRUNnWUEzWmRaNjczWDBvZXhGbHE3QUFtcnV0a0h0CitDTDdMdndycE9pYUJqaHlUeFRlU05XenZ0UUJrSVU4RE9JMGJJYXpBNFVyZUFGZmZ3dHZFdVBtb25EYjNGK0lxCitTTUF1NDJYY0d5VlpFbCtnSGxUUFU5WFJYN25UT1hWdCtNbFJSUnhMNnQ5R2tHZlVBWEkzWHhKRFhXM2MwdkJLCitVTDl4cUQ4Y09SWE9mRTA2clFKQkFQOG1FWDFFUmtSNjRQdHNvZTQyODF2alRsTmZJYnM3Tk1Qa1Vucm45Ti9ZCitCTGhqTklmUTNIRlpHOEJUTUxmWDdrQ1M5RDU5M0RXNXRWNFo5QlAvYzZjQ1FRRGNGekNjVkFyTmgySlN5d09RCitaZlRmUmJKZy9aNUx0OUZrbmd2MW1lZUdOUGdJTUxOOFNnNjc5cEFPT1dtemRNTzNWNzA2ck5QelNWTU1FN0U1CitvUElmQWtFQThwRGRkYXJQNXRDdlRUZ1VwbVRGYmFrbTBLb1RabTIrRnpIY25BNGpSaCtYTlRqVE92OThZNklrCitlTzVkMVpuS1hzZVd2a1puY1FneGZkbk1xcXBqNXdKQWNOcS9SVm5lMURiWWx3V2NoVDJTaTY1TVltbUo4dCtGCiswbWNzVUxxak9uRU13ZjVlK3B0cTVMendieXJIWllxNUZOazdvY3VmUHYvWlFyY1NTQytjRndKQkFLdk9KQnlTCit4NTZxeUdlWkxPUWxXUzJKUzNLSm81OVh1TEZHcWNiZ045T205eEZhNDFZYjROOU52cGxGaXZzdlpkdzNtMVEvCitTUElYUXVUOFJNUERWTlE9CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCiAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNwekNDQWhDZ0F3SUJBZ0lKQVArcVN0djFjSUdOTUEwR0NTcUdTSWIzRFFFQkJRVUFNSUdKTVFzd0NRWUQKLVZRUUdFd0pWVXpFUk1BOEdBMVVFQ0JNSVJHVnNZWGRoY21VeEV6QVJCZ05WQkFjVENsZHBiRzFwYm1kMGIyNHgKLUl6QWhCZ05WQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1Rd3dDZ1lEVlFRTEV3TlQKLVUwd3hIekFkQmdOVkJBTVRGbk52YldWdFlXTm9hVzVsTG5CNWRHaHZiaTV2Y21jd0hoY05NRGN3T0RJM01UWTEKLU5EVXdXaGNOTVRNd01qRTJNVFkxTkRVd1dqQ0JpVEVMTUFrR0ExVUVCaE1DVlZNeEVUQVBCZ05WQkFnVENFUmwKLWJHRjNZWEpsTVJNd0VRWURWUVFIRXdwWGFXeHRhVzVuZEc5dU1TTXdJUVlEVlFRS0V4cFFlWFJvYjI0Z1UyOW0KLWRIZGhjbVVnUm05MWJtUmhkR2x2YmpFTU1Bb0dBMVVFQ3hNRFUxTk1NUjh3SFFZRFZRUURFeFp6YjIxbGJXRmoKLWFHbHVaUzV3ZVhSb2IyNHViM0puTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FDOGRkcmgKLW0rTHV0QnZqWWNRbG5IMjFQUElzZUoxSlZHMkhNbU4yQ21aazJZdWtPKzlMb3BkSmhUdmJHZkVqMERRczFJRTgKLU0ra1RVeU9tdUtmVnJGTUt3dFZlQ0pwaHJBbmhvejdUWU91TEJTcXQ3bFZIZmhpL1Z3b3ZFU0psYUJPcCtXTW4KLWZoY2R1UEVZSFl4LzZjblZhcElrWm5MdDMwenUydW0rRHpBOWpRSURBUUFCb3hVd0V6QVJCZ2xnaGtnQmh2aEMKLUFRRUVCQU1DQmtBd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ1lFQUY0UTVCVnFtQ09MdjFuOGplL0p3OUs2NjlWWGIKLTA4aHlHelFoa2VtRUJZUWQ2ZnpROUEvMVp6SGtKS2IxUDZ5cmVPTFNFaDRLY3hZUHlyTFJDMWxsOG5yNU9sQ3gKLUNNaEtrVG5SNnFCc2ROVjBYdGRVMitOMjVocVcrTWE0WmVxc04vaWlKVkNHTk9aR252UXV2Q0FHV0Y4K0ovZi8KLWlIa0M2Z0dkQkpob2dzND0KK01JSUNWRENDQWIyZ0F3SUJBZ0lKQU5mSE9Ca1pyOEpPTUEwR0NTcUdTSWIzRFFFQkJRVUFNRjh4Q3pBSkJnTlYKK0JBWVRBbGhaTVJjd0ZRWURWUVFIRXc1RFlYTjBiR1VnUVc1MGFISmhlREVqTUNFR0ExVUVDaE1hVUhsMGFHOXUKK0lGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNHhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREFlRncweE1ERXcKK01EZ3lNekF4TlRaYUZ3MHlNREV3TURVeU16QXhOVFphTUY4eEN6QUpCZ05WQkFZVEFsaFpNUmN3RlFZRFZRUUgKK0V3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWsKK1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERDQm56QU5CZ2txaGtpRzl3MEJBUUVGQUFPQmpRQXcKK2dZa0NnWUVBMjF2VDVpc3E3RjY4YW1ZdXVOcFNGbEtEUHJNVUNhNFlXWXFaUnQyT1orLzNOS2FaMnhBaVN3cjcKKzZNclFGNzB0NW5MYlNQcHFFNSs1VnJTNThTWStnL3NYTGlGZDZBcGxIMXdKWndoNzhEb2ZiRllYVWdna3RGTXQKK3BUeWlYOGp0UDY2YmtjUGtEQURBMDg5UkkxVFFSNkNhK243SEZhN2MxZmFiVlY2aTN6a0NBd0VBQWFNWU1CWXcKK0ZBWURWUjBSQkEwd0M0SUpiRzlqWVd4b2IzTjBNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBSFBjdFFCRVE0d2QKK0JKNitKY3BJcmFvcExuOEJHaGJqTldqNDBtbVJxV0IvTkFXRjZNNW5lN0twR0F1N3RMZUc0aGIxekxhbGRLOEcKK2x4eTJHUFNSRjZMRlM0OGRwRWoySGJNdjJudnY2eHhhbERNSjkrRGljV2dBS1RRNmJjWDJqM0dVa0NSMGcvVDEKK0NSbE5CQUFsdmhLek83Q2xwZjlsMFlLQkVmcmFKQnlYCiAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0Mi5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0Mi5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhOWUwOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQyLnBlbQpAQCAtMCwwICsxLDMxIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkd0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Fd2dnSmRBZ0VBQW9HQkFKbnNKWlZycHBMK1c1STkKK3pHUXJyYXdXd0U1UUpwQks5bld3MTdtWHJaMDNSMWNEOUJhbUxHaXZWSVNiUGxSbEFWblpCRXloMUFUcHNCN2QKK0NVUStXSEV2QUxxdXZ4NCtZdzVsK2ZYZWlZUmpyTFJCWVp1Vnk4eU50WHpVM2lXY0dPYmNZUmtVZGlYZE95UDcKK3NMRjJZWkhSdlFacHpnREJLa3JyYWVRODF3MjFBZ01CQUFFQ2dZQkVtN24wN0ZNSFdsRSswa1Qwc1hOc0xZZnkKK1lFK1FLWm5KdzlXa2FETit6RkVFUEVMa2haVnQ1QmpzTXJhSnI2djJmSUVxRjBnR0dKUGtiZW5mZlZxMkI1ZEMKK2xXVU94dkpIdWZNSzRzTTNDcDZzL2dPcDNMUCtRa3pWbnZKU2ZBeVpVNmwrNFBHWDVwTGRVc1hZalB4Z3pqekwKK1MzNnRGNy8yVXYxV2VQeUxVUUpCQU1zUGhZelVYT1BSZ21iaGNKaXFpOUE5YzNHTzhrdlNEWVRDS3QzVk1ucXoKK0hCbjZNUTRWUWFzQ0QxRis3aldUSTBGVS8zdmR3OG5vbi9GajhoaFlxWmNDUVFEQ0RSZHZtWnFEaVpucE1xRHEKK0w2WlNyTFRWdE12WlhaYmd3Rm9yYUFEOXVIajUxVE1FNytlWVQ3RUcyWUNnSlRYSjRZdlJKRW5QTnlza3dkS3QKK3ZUU1RBa0VBdGFhTi92eWVtRUo4MkJJR1N0d09OTncwSUxzU3I1Y1o5dEJIenFpQS90aXBZK2UzNkhSRmlYaFAKK1FjVTl6WGx4eVdrREg4aXo5RFNBbUUyamJmb3F3d0pBTmxNSjY1RTU0M2NqSWxpdEdjS0xNbnZ0Q0NMY0twYjcKK3hTRzBYSkI2TG8xMU9LUEo2NmpwMGdjRlRTQ1kxTHgyQ1hWZCtnZkpyZndJMVBwNTYyK2Jod0pCQUo5SWZEUFUKK1I4T3BPOXYxU0dkOHgzM093bTd1WE9wQjlkNjMvVDcwQUQxUU9YaktVQzRlWFlidDBXV2ZXdW55L1JOUFJ1eWgKK3c3RFhTZlVGK2tQS29sVT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1hUQ0NBY2FnQXdJQkFnSUpBSU8zdXBBRzQ0NWZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1HSXhDekFKQmdOVgorQkFZVEFsaFpNUmN3RlFZRFZRUUhFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dQorSUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0eEZUQVRCZ05WQkFNVERHWmhhMlZvYjNOMGJtRnRaVEFlRncweAorTURFd01Ea3hOVEF4TURCYUZ3MHlNREV3TURZeE5UQXhNREJhTUdJeEN6QUpCZ05WQkFZVEFsaFpNUmN3RlFZRAorVlFRSEV3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadgorZFc1a1lYUnBiMjR4RlRBVEJnTlZCQU1UREdaaGEyVm9iM04wYm1GdFpUQ0JuekFOQmdrcWhraUc5dzBCQVFFRgorQUFPQmpRQXdnWWtDZ1lFQW1ld2xsV3Vta3Y1YmtqM01aQ3V0ckJiQVRsQW1rRXIyZGJEWHVaZXRuVGRIVndQMAorRnFZc2FLOVVoSnMrVkdVQldka0VUS0hVQk9td0h0MEpSRDVZY1M4QXVxNi9IajVqRG1YNTlkNkpoR09zdEVGaAorbTVYTHpJMjFmTlRlSlp3WTV0eGhHUlIySmQwN0kvdXdzWFpoa2RHOUJtbk9BTUVxU3V0cDVEelhEYlVDQXdFQQorQWFNYk1Ca3dGd1lEVlIwUkJCQXdEb0lNWm1GclpXaHZjM1J1WVcxbE1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQgorQUgraU1DbExMR1NhS1dnd1hzbWRWbzRGaFRaWkhvOFVwcnJ0ZzNOOUZ4RWVFNTBidHBEVlF5c2dSdDVpYXMzSworbStiTUU5emJLd3ZiVldENXpaZGp1czRwRGd6d0YvaUh5Y2NMOEp5WWh4T3ZTLzl6bXZBdEZYai9BUElJYlpGcAorSVQ3NWQ5Zjg4U2NJR0V0a25aUWVqbnJkaEI2NHRZa2kvRXFsdWl1S0JxS0QKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IDIyYzY5MDAuLmZmMzBkNDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtNCw3ICs0LDcgQEAKIAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWZyb20gX3RocmVhZCBpbXBvcnQgc3RhcnRfbmV3X3RocmVhZCwgZ2V0X2lkZW50Citmcm9tIF90aHJlYWQgaW1wb3J0IHN0YXJ0X25ld190aHJlYWQsIGdldF9pZGVudCwgVElNRU9VVF9NQVgKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB1bml0dGVzdAogCkBAIC02Miw2ICs2MiwxNCBAQAogICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogICAgICAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCisgICAgZGVmIGFzc2VydFRpbWVvdXQoc2VsZiwgYWN0dWFsLCBleHBlY3RlZCk6CisgICAgICAgICMgVGhlIHdhaXRpbmcgYW5kL29yIHRpbWUudGltZSgpIGNhbiBiZSBpbXByZWNpc2UsIHdoaWNoCisgICAgICAgICMgaXMgd2h5IGNvbXBhcmluZyB0byB0aGUgZXhwZWN0ZWQgdmFsdWUgd291bGQgc29tZXRpbWVzIGZhaWwKKyAgICAgICAgIyAoZXNwZWNpYWxseSB1bmRlciBXaW5kb3dzKS4KKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYWN0dWFsLCBleHBlY3RlZCAqIDAuNikKKyAgICAgICAgIyBUZXN0IG5vdGhpbmcgaW5zYW5lIGhhcHBlbmVkCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhhY3R1YWwsIGV4cGVjdGVkICogMTAuMCkKKwogCiBjbGFzcyBCYXNlTG9ja1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiCkBAIC0xNDksNiArMTU3LDMyIEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbGVuKHRocmVhZGluZy5lbnVtZXJhdGUoKSkpCiAKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgICMgQ2FuJ3Qgc2V0IHRpbWVvdXQgaWYgbm90IGJsb2NraW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2suYWNxdWlyZSwgMCwgMSkKKyAgICAgICAgIyBJbnZhbGlkIHRpbWVvdXQgdmFsdWVzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxvY2suYWNxdWlyZSwgdGltZW91dD0tMTAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsb2NrLmFjcXVpcmUsIHRpbWVvdXQ9MWUxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxvY2suYWNxdWlyZSwgdGltZW91dD1USU1FT1VUX01BWCArIDEpCisgICAgICAgICMgVElNRU9VVF9NQVggaXMgb2sKKyAgICAgICAgbG9jay5hY3F1aXJlKHRpbWVvdXQ9VElNRU9VVF9NQVgpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHQxID0gdGltZS50aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suYWNxdWlyZSh0aW1lb3V0PTUpKQorICAgICAgICB0MiA9IHRpbWUudGltZSgpCisgICAgICAgICMgSnVzdCBhIHNhbml0eSB0ZXN0IHRoYXQgaXQgZGlkbid0IGFjdHVhbGx5IHdhaXQgZm9yIHRoZSB0aW1lb3V0LgorICAgICAgICBzZWxmLmFzc2VydExlc3ModDIgLSB0MSwgNSkKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICB0MSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChsb2NrLmFjcXVpcmUodGltZW91dD0wLjUpKQorICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQodDIgLSB0MSkKKyAgICAgICAgQnVuY2goZiwgMSkud2FpdF9mb3JfZmluaXNoZWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdHNbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VGltZW91dChyZXN1bHRzWzFdLCAwLjUpCisKIAogY2xhc3MgTG9ja1Rlc3RzKEJhc2VMb2NrVGVzdHMpOgogICAgICIiIgpAQCAtMTg1LDYgKzIxOSwxNiBAQAogICAgICAgICBsb2NrLmFjcXVpcmUoKQogICAgICAgICBsb2NrLnJlbGVhc2UoKQogCisgICAgZGVmIHRlc3Rfc3RhdGVfYWZ0ZXJfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE2MTg6IGNoZWNrIHRoYXQgbG9jayBpcyBpbiBhIHByb3BlciBzdGF0ZSBhZnRlciBhCisgICAgICAgICMgKG5vbi16ZXJvKSB0aW1lb3V0LgorICAgICAgICBsb2NrID0gc2VsZi5sb2NrdHlwZSgpCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5hY3F1aXJlKHRpbWVvdXQ9MC4wMSkpCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2suYWNxdWlyZShibG9ja2luZz1GYWxzZSkpCisKIAogY2xhc3MgUkxvY2tUZXN0cyhCYXNlTG9ja1Rlc3RzKToKICAgICAiIiIKQEAgLTI5MCwxNCArMzM0LDE0IEBACiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoZXZ0LndhaXQoMC4wKSkKICAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHIgPSBldnQud2FpdCgwLjIpCisgICAgICAgICAgICByID0gZXZ0LndhaXQoMC41KQogICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKChyLCB0MiAtIHQxKSkKICAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbRmFsc2VdICogTikKICAgICAgICAgZm9yIHIsIGR0IGluIHJlc3VsdHMyOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0ID49IDAuMiwgZHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRpbWVvdXQoZHQsIDAuNSkKICAgICAgICAgIyBUaGUgZXZlbnQgaXMgc2V0CiAgICAgICAgIHJlc3VsdHMxID0gW10KICAgICAgICAgcmVzdWx0czIgPSBbXQpAQCAtMzQ3LDEzICszOTEsMTMgQEAKICAgICAgICAgcGhhc2VfbnVtID0gMAogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgY29uZC5hY3F1aXJlKCkKLSAgICAgICAgICAgIGNvbmQud2FpdCgpCisgICAgICAgICAgICByZXN1bHQgPSBjb25kLndhaXQoKQogICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKLSAgICAgICAgICAgIHJlc3VsdHMxLmFwcGVuZChwaGFzZV9udW0pCisgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoKHJlc3VsdCwgcGhhc2VfbnVtKSkKICAgICAgICAgICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgICAgICAgICBjb25kLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0ID0gY29uZC53YWl0KCkKICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCi0gICAgICAgICAgICByZXN1bHRzMi5hcHBlbmQocGhhc2VfbnVtKQorICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKChyZXN1bHQsIHBoYXNlX251bSkpCiAgICAgICAgIGIgPSBCdW5jaChmLCBOKQogICAgICAgICBiLndhaXRfZm9yX3N0YXJ0ZWQoKQogICAgICAgICBfd2FpdCgpCkBAIC0zNjYsNyArNDEwLDcgQEAKICAgICAgICAgY29uZC5yZWxlYXNlKCkKICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdHMxKSA8IDM6CiAgICAgICAgICAgICBfd2FpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsxXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsoVHJ1ZSwgMSldICogMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgW10pCiAgICAgICAgICMgTm90aWZ5IDUgdGhyZWFkczogdGhleSBtaWdodCBiZSBpbiB0aGVpciBmaXJzdCBvciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQpAQCAtMzc2LDggKzQyMCw4IEBACiAgICAgICAgIGNvbmQucmVsZWFzZSgpCiAgICAgICAgIHdoaWxlIGxlbihyZXN1bHRzMSkgKyBsZW4ocmVzdWx0czIpIDwgODoKICAgICAgICAgICAgIF93YWl0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWzFdICogMyArIFsyXSAqIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFsyXSAqIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsoVHJ1ZSwgMSldICogMyArIFsoVHJ1ZSwgMildICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMiwgWyhUcnVlLCAyKV0gKiAzKQogICAgICAgICAjIE5vdGlmeSBhbGwgdGhyZWFkczogdGhleSBhcmUgYWxsIGluIHRoZWlyIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5X2FsbCgpCkBAIC0zODYsOCArNDMwLDggQEAKICAgICAgICAgY29uZC5yZWxlYXNlKCkKICAgICAgICAgd2hpbGUgbGVuKHJlc3VsdHMyKSA8IDU6CiAgICAgICAgICAgICBfd2FpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czEsIFsxXSAqIDMgKyBbMl0gKiAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbMl0gKiAzICsgWzNdICogMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzICsgWyhUcnVlLDIpXSAqIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFsoVHJ1ZSwgMildICogMyArIFsoVHJ1ZSwgMyldICogMikKICAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCiAKICAgICBkZWYgdGVzdF9ub3RpZnkoc2VsZik6CkBAIC00MDMsMTQgKzQ0Nyw2MCBAQAogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgY29uZC5hY3F1aXJlKCkKICAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIGNvbmQud2FpdCgwLjIpCisgICAgICAgICAgICByZXN1bHQgPSBjb25kLndhaXQoMC41KQogICAgICAgICAgICAgdDIgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHQyIC0gdDEpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgodDIgLSB0MSwgcmVzdWx0KSkKICAgICAgICAgQnVuY2goZiwgTikud2FpdF9mb3JfZmluaXNoZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzKSwgNSkKLSAgICAgICAgZm9yIGR0IGluIHJlc3VsdHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZHQgPj0gMC4yLCBkdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0cyksIE4pCisgICAgICAgIGZvciBkdCwgcmVzdWx0IGluIHJlc3VsdHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRpbWVvdXQoZHQsIDAuNSkKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IGNvbmNlcHR1YWxseSAodGhhdCJzIHRoZSBjb25kaXRpb24gdmFyaWFibGUgcHJvdG9jb2wpCisgICAgICAgICAgICAjIGEgd2FpdCgpIG1heSBzdWNjZWVkIGV2ZW4gaWYgbm8gb25lIG5vdGlmaWVzIHVzIGFuZCBiZWZvcmUgYW55CisgICAgICAgICAgICAjIHRpbWVvdXQgb2NjdXJzLiAgU3B1cmlvdXMgd2FrZXVwcyBjYW4gb2NjdXIuCisgICAgICAgICAgICAjIFRoaXMgbWFrZXMgaXQgaGFyZCB0byB2ZXJpZnkgdGhlIHJlc3VsdCB2YWx1ZS4KKyAgICAgICAgICAgICMgSW4gcHJhY3RpY2UsIHRoaXMgaW1wbGVtZW50YXRpb24gaGFzIG5vIHNwdXJpb3VzIHdha2V1cHMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3dhaXRmb3Ioc2VsZik6CisgICAgICAgIGNvbmQgPSBzZWxmLmNvbmR0eXBlKCkKKyAgICAgICAgc3RhdGUgPSAwCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29uZC53YWl0X2ZvcihsYW1iZGEgOiBzdGF0ZT09NCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIDQpCisgICAgICAgIGIgPSBCdW5jaChmLCAxKQorICAgICAgICBiLndhaXRfZm9yX3N0YXJ0ZWQoKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgIHdpdGggY29uZDoKKyAgICAgICAgICAgICAgICBzdGF0ZSArPSAxCisgICAgICAgICAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBiLndhaXRfZm9yX2ZpbmlzaGVkKCkKKworICAgIGRlZiB0ZXN0X3dhaXRmb3JfdGltZW91dChzZWxmKToKKyAgICAgICAgY29uZCA9IHNlbGYuY29uZHR5cGUoKQorICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgc3VjY2VzcyA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICAgICAgZHQgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbmQud2FpdF9mb3IobGFtYmRhIDogc3RhdGU9PTQsIHRpbWVvdXQ9MC4xKQorICAgICAgICAgICAgICAgIGR0ID0gdGltZS50aW1lKCkgLSBkdAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VGltZW91dChkdCwgMC4xKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3MuYXBwZW5kKE5vbmUpCisgICAgICAgIGIgPSBCdW5jaChmLCAxKQorICAgICAgICBiLndhaXRfZm9yX3N0YXJ0ZWQoKQorICAgICAgICAjIE9ubHkgaW5jcmVtZW50IDMgdGltZXMsIHNvIHN0YXRlID09IDQgaXMgbmV2ZXIgcmVhY2hlZC4KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICB3aXRoIGNvbmQ6CisgICAgICAgICAgICAgICAgc3RhdGUgKz0gMQorICAgICAgICAgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN1Y2Nlc3MpLCAxKQogCiAKIGNsYXNzIEJhc2VTZW1hcGhvcmVUZXN0cyhCYXNlVGVzdENhc2UpOgpAQCAtNDkzLDYgKzU4MywxOSBAQAogICAgICAgICAjIG9yZGVyZWQuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJlc3VsdHMpLCBbRmFsc2VdICogNyArIFtUcnVlXSAqICAzICkKIAorICAgIGRlZiB0ZXN0X2FjcXVpcmVfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VtID0gc2VsZi5zZW10eXBlKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbS5hY3F1aXJlLCBGYWxzZSwgdGltZW91dD0xLjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0uYWNxdWlyZSh0aW1lb3V0PTAuMDA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5hY3F1aXJlKHRpbWVvdXQ9MC4wMDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5hY3F1aXJlKHRpbWVvdXQ9MC4wMDUpKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZW0uYWNxdWlyZSh0aW1lb3V0PTAuMDA1KSkKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmFjcXVpcmUodGltZW91dD0wLjUpKQorICAgICAgICBkdCA9IHRpbWUudGltZSgpIC0gdAorICAgICAgICBzZWxmLmFzc2VydFRpbWVvdXQoZHQsIDAuNSkKKwogICAgIGRlZiB0ZXN0X2RlZmF1bHRfdmFsdWUoc2VsZik6CiAgICAgICAgICMgVGhlIGRlZmF1bHQgaW5pdGlhbCB2YWx1ZSBpcyAxLgogICAgICAgICBzZW0gPSBzZWxmLnNlbXR5cGUoKQpAQCAtNTUwLDMgKzY1MywxOTYgQEAKICAgICAgICAgc2VtLmFjcXVpcmUoKQogICAgICAgICBzZW0ucmVsZWFzZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbS5yZWxlYXNlKQorCisKK2NsYXNzIEJhcnJpZXJUZXN0cyhCYXNlVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciBCYXJyaWVyIG9iamVjdHMuCisgICAgIiIiCisgICAgTiA9IDUKKyAgICBkZWZhdWx0VGltZW91dCA9IDIuMAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmJhcnJpZXIgPSBzZWxmLmJhcnJpZXJ0eXBlKHNlbGYuTiwgdGltZW91dD1zZWxmLmRlZmF1bHRUaW1lb3V0KQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5iYXJyaWVyLmFib3J0KCkKKworICAgIGRlZiBydW5fdGhyZWFkcyhzZWxmLCBmKToKKyAgICAgICAgYiA9IEJ1bmNoKGYsIHNlbGYuTi0xKQorICAgICAgICBmKCkKKyAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCisKKyAgICBkZWYgbXVsdGlwYXNzKHNlbGYsIHJlc3VsdHMsIG4pOgorICAgICAgICBtID0gc2VsZi5iYXJyaWVyLnBhcnRpZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBzZWxmLk4pCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgcmVzdWx0c1swXS5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHNbMV0pLCBpICogbSkKKyAgICAgICAgICAgIHNlbGYuYmFycmllci53YWl0KCkKKyAgICAgICAgICAgIHJlc3VsdHNbMV0uYXBwZW5kKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzWzBdKSwgKGkgKyAxKSAqIG0pCisgICAgICAgICAgICBzZWxmLmJhcnJpZXIud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5iYXJyaWVyLm5fd2FpdGluZywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmJhcnJpZXIuYnJva2VuKQorCisgICAgZGVmIHRlc3RfYmFycmllcihzZWxmLCBwYXNzZXM9MSk6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgYSBiYXJyaWVyIGlzIHBhc3NlZCBpbiBsb2Nrc3RlcAorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0cyA9IFtbXSxbXV0KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHNlbGYubXVsdGlwYXNzKHJlc3VsdHMsIHBhc3NlcykKKyAgICAgICAgc2VsZi5ydW5fdGhyZWFkcyhmKQorCisgICAgZGVmIHRlc3RfYmFycmllcl8xMChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCBhIGJhcnJpZXIgd29ya3MgZm9yIDEwIGNvbnNlY3V0aXZlIHJ1bnMKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLnRlc3RfYmFycmllcigxMCkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmV0dXJuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYmFycmllci53YWl0CisgICAgICAgICIiIgorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHIgPSBzZWxmLmJhcnJpZXIud2FpdCgpCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChyKQorCisgICAgICAgIHNlbGYucnVuX3RocmVhZHMoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmVzdWx0cyksIHN1bShyYW5nZShzZWxmLk4pKSkKKworICAgIGRlZiB0ZXN0X2FjdGlvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhlICdhY3Rpb24nIGNhbGxiYWNrCisgICAgICAgICIiIgorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZGVmIGFjdGlvbigpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgYmFycmllciA9IHNlbGYuYmFycmllcnR5cGUoc2VsZi5OLCBhY3Rpb24pCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBiYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0cyksIDEpCisKKyAgICAgICAgc2VsZi5ydW5fdGhyZWFkcyhmKQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgYW4gYWJvcnQgd2lsbCBwdXQgdGhlIGJhcnJpZXIgaW4gYSBicm9rZW4gc3RhdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBzZWxmLmJhcnJpZXIud2FpdCgpCisgICAgICAgICAgICAgICAgaWYgaSA9PSBzZWxmLk4vLzI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgICAgIHNlbGYuYmFycmllci53YWl0KCkKKyAgICAgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCB0aHJlYWRpbmcuQnJva2VuQmFycmllckVycm9yOgorICAgICAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmJhcnJpZXIuYWJvcnQoKQorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnJ1bl90aHJlYWRzKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMxKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0czIpLCBzZWxmLk4tMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuYmFycmllci5icm9rZW4pCisKKyAgICBkZWYgdGVzdF9yZXNldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCBhICdyZXNldCcgb24gYSBiYXJyaWVyIGZyZWVzIHRoZSB3YWl0aW5nIHRocmVhZHMKKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdHMxID0gW10KKyAgICAgICAgcmVzdWx0czIgPSBbXQorICAgICAgICByZXN1bHRzMyA9IFtdCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBpID0gc2VsZi5iYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgaWYgaSA9PSBzZWxmLk4vLzI6CisgICAgICAgICAgICAgICAgIyBXYWl0IHVudGlsIHRoZSBvdGhlciB0aHJlYWRzIGFyZSBhbGwgaW4gdGhlIGJhcnJpZXIuCisgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5iYXJyaWVyLm5fd2FpdGluZyA8IHNlbGYuTi0xOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQorICAgICAgICAgICAgICAgIHNlbGYuYmFycmllci5yZXNldCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5iYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgdGhyZWFkaW5nLkJyb2tlbkJhcnJpZXJFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0czIuYXBwZW5kKFRydWUpCisgICAgICAgICAgICAjIE5vdywgcGFzcyB0aGUgYmFycmllciBhZ2FpbgorICAgICAgICAgICAgc2VsZi5iYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0czMuYXBwZW5kKFRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fdGhyZWFkcyhmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMyKSwgc2VsZi5OLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMzKSwgc2VsZi5OKQorCisKKyAgICBkZWYgdGVzdF9hYm9ydF9hbmRfcmVzZXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUZXN0IHRoYXQgYSBiYXJyaWVyIGNhbiBiZSByZXNldCBhZnRlciBiZWluZyBicm9rZW4uCisgICAgICAgICIiIgorICAgICAgICByZXN1bHRzMSA9IFtdCisgICAgICAgIHJlc3VsdHMyID0gW10KKyAgICAgICAgcmVzdWx0czMgPSBbXQorICAgICAgICBiYXJyaWVyMiA9IHNlbGYuYmFycmllcnR5cGUoc2VsZi5OKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSBzZWxmLmJhcnJpZXIud2FpdCgpCisgICAgICAgICAgICAgICAgaWYgaSA9PSBzZWxmLk4vLzI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICAgICAgICAgIHNlbGYuYmFycmllci53YWl0KCkKKyAgICAgICAgICAgICAgICByZXN1bHRzMS5hcHBlbmQoVHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCB0aHJlYWRpbmcuQnJva2VuQmFycmllckVycm9yOgorICAgICAgICAgICAgICAgIHJlc3VsdHMyLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLmJhcnJpZXIuYWJvcnQoKQorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICMgU3luY2hyb25pemUgYW5kIHJlc2V0IHRoZSBiYXJyaWVyLiAgTXVzdCBzeW5jaHJvbml6ZSBmaXJzdCBzbworICAgICAgICAgICAgIyB0aGF0IGV2ZXJ5b25lIGhhcyBsZWZ0IGl0IHdoZW4gd2UgcmVzZXQsIGFuZCBhZnRlciBzbyB0aGF0IG5vCisgICAgICAgICAgICAjIG9uZSBlbnRlcnMgaXQgYmVmb3JlIHRoZSByZXNldC4KKyAgICAgICAgICAgIGlmIGJhcnJpZXIyLndhaXQoKSA9PSBzZWxmLk4vLzI6CisgICAgICAgICAgICAgICAgc2VsZi5iYXJyaWVyLnJlc2V0KCkKKyAgICAgICAgICAgIGJhcnJpZXIyLndhaXQoKQorICAgICAgICAgICAgc2VsZi5iYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0czMuYXBwZW5kKFRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fdGhyZWFkcyhmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHRzMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMyKSwgc2VsZi5OLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdHMzKSwgc2VsZi5OKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3Qgd2FpdCh0aW1lb3V0KQorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGkgPSBzZWxmLmJhcnJpZXIud2FpdCgpCisgICAgICAgICAgICBpZiBpID09IHNlbGYuTiAvLyAyOgorICAgICAgICAgICAgICAgICMgT25lIHRocmVhZCBpcyBsYXRlIQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQorICAgICAgICAgICAgIyBEZWZhdWx0IHRpbWVvdXQgaXMgMi4wLCBzbyB0aGlzIGlzIHNob3J0ZXIuCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0aHJlYWRpbmcuQnJva2VuQmFycmllckVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5iYXJyaWVyLndhaXQsIDAuNSkKKyAgICAgICAgc2VsZi5ydW5fdGhyZWFkcyhmKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF90aW1lb3V0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGUgYmFycmllcidzIGRlZmF1bHQgdGltZW91dAorICAgICAgICAiIiIKKyAgICAgICAgI2NyZWF0ZSBhIGJhcnJpZXIgd2l0aCBhIGxvdyBkZWZhdWx0IHRpbWVvdXQKKyAgICAgICAgYmFycmllciA9IHNlbGYuYmFycmllcnR5cGUoc2VsZi5OLCB0aW1lb3V0PTAuMSkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIGkgPSBiYXJyaWVyLndhaXQoKQorICAgICAgICAgICAgaWYgaSA9PSBzZWxmLk4gLy8gMjoKKyAgICAgICAgICAgICAgICAjIE9uZSB0aHJlYWQgaXMgbGF0ZXIgdGhhbiB0aGUgZGVmYXVsdCB0aW1lb3V0IG9mIDAuMXMuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0aHJlYWRpbmcuQnJva2VuQmFycmllckVycm9yLCBiYXJyaWVyLndhaXQpCisgICAgICAgIHNlbGYucnVuX3RocmVhZHMoZikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV90aHJlYWQoc2VsZik6CisgICAgICAgIGIgPSBzZWxmLmJhcnJpZXJ0eXBlKDEpCisgICAgICAgIGIud2FpdCgpCisgICAgICAgIGIud2FpdCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weSBiL0xpYi90ZXN0L21ha2Vfc3NsX2NlcnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDJlNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMCwwICsxLDY0IEBACisiIiJNYWtlIHRoZSBjdXN0b20gY2VydGlmaWNhdGUgYW5kIHByaXZhdGUga2V5IGZpbGVzIHVzZWQgYnkgdGVzdF9zc2wKK2FuZCBmcmllbmRzLiIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCisKK3JlcV90ZW1wbGF0ZSA9ICIiIgorICAgIFtyZXFdCisgICAgZGlzdGluZ3Vpc2hlZF9uYW1lICAgICA9IHJlcV9kaXN0aW5ndWlzaGVkX25hbWUKKyAgICB4NTA5X2V4dGVuc2lvbnMgICAgICAgID0gcmVxX3g1MDlfZXh0ZW5zaW9ucworICAgIHByb21wdCAgICAgICAgICAgICAgICAgPSBubworCisgICAgW3JlcV9kaXN0aW5ndWlzaGVkX25hbWVdCisgICAgQyAgICAgICAgICAgICAgICAgICAgICA9IFhZCisgICAgTCAgICAgICAgICAgICAgICAgICAgICA9IENhc3RsZSBBbnRocmF4CisgICAgTyAgICAgICAgICAgICAgICAgICAgICA9IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgICAgQ04gICAgICAgICAgICAgICAgICAgICA9IHtob3N0bmFtZX0KKworICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQorICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorICAgICIiIgorCitoZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisKK2RlZiBtYWtlX2NlcnRfa2V5KGhvc3RuYW1lKToKKyAgICB0ZW1wbmFtZXMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKDMpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICB0ZW1wbmFtZXMuYXBwZW5kKGYubmFtZSkKKyAgICByZXFfZmlsZSwgY2VydF9maWxlLCBrZXlfZmlsZSA9IHRlbXBuYW1lcworICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKHJlcV9maWxlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHJlcV90ZW1wbGF0ZS5mb3JtYXQoaG9zdG5hbWU9aG9zdG5hbWUpKQorICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1ub2RlcycsICcteDUwOScsCisgICAgICAgICAgICAgICAgJy1uZXdrZXknLCAncnNhOjEwMjQnLCAnLWtleW91dCcsIGtleV9maWxlLAorICAgICAgICAgICAgICAgICctb3V0JywgY2VydF9maWxlLCAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICBjaGVja19jYWxsKFsnb3BlbnNzbCddICsgYXJncykKKyAgICAgICAgd2l0aCBvcGVuKGNlcnRfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgY2VydCA9IGYucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihrZXlfZmlsZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAga2V5ID0gZi5yZWFkKCkKKyAgICAgICAgcmV0dXJuIGNlcnQsIGtleQorICAgIGZpbmFsbHk6CisgICAgICAgIGZvciBuYW1lIGluIHRlbXBuYW1lczoKKyAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgb3MuY2hkaXIoaGVyZSkKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdsb2NhbGhvc3QnKQorICAgIHdpdGggb3Blbignc3NsX2NlcnQucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGNlcnQpCisgICAgd2l0aCBvcGVuKCdzc2xfa2V5LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKyAgICAjIEZvciBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0ZXN0cworICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScpCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0Mi5wZW0nLCAndycpIGFzIGY6CisgICAgICAgIGYud3JpdGUoa2V5KQorICAgICAgICBmLndyaXRlKGNlcnQpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5IGIvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQppbmRleCBjMzRiZDU5Li5kMmI3YTU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKQEAgLTU2LDkgKzU2LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZCksIGxlbihzZWxmLnJlZmVyZW5jZSkpCiAgICAgICAgICNfX2NvbnRhaW5zX18KICAgICAgICAgZm9yIGsgaW4gc2VsZi5yZWZlcmVuY2U6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoayBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkKQogICAgICAgICBmb3IgayBpbiBzZWxmLm90aGVyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrIGluIGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGQpCiAgICAgICAgICNjbXAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQpCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIGtub3dua2V5LCBrbm93bnZhbHVlID0gbmV4dChpdGVyKHNlbGYub3RoZXIuaXRlbXMoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa2V5LCBrbm93bnZhbHVlKSwgdmFsdWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoa25vd25rZXksIGtub3dudmFsdWUpLCBrbm93bnZhbHVlKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtub3dua2V5IGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oa25vd25rZXksIGQpCiAKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciB3cml0ZSBvcGVyYXRpb25zIG9uIG1hcHBpbmcKQEAgLTExNSwxNiArMTE1LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrbm93bmtleV0sIGtub3dudmFsdWUpCiAgICAgICAgICNwb3AKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSksIGtub3dudmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa25vd25rZXkgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCBrbm93bmtleSkKICAgICAgICAgZGVmYXVsdCA9IDkwOQogICAgICAgICBkW2tub3dua2V5XSA9IGtub3dudmFsdWUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSwgZGVmYXVsdCksIGtub3dudmFsdWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa25vd25rZXkgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrbm93bmtleSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcChrbm93bmtleSwgZGVmYXVsdCksIGRlZmF1bHQpCiAgICAgICAgICNwb3BpdGVtCiAgICAgICAgIGtleSwgdmFsdWUgPSBkLnBvcGl0ZW0oKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleSBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGtleSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZSwgc2VsZi5yZWZlcmVuY2Vba2V5XSkKICAgICAgICAgcD1zZWxmLl9lbXB0eV9tYXBwaW5nKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHAucG9waXRlbSkKQEAgLTE0Miw4ICsxNDIsOCBAQAogICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkLmtleXMoKSksIFtdKQogICAgICAgICBkID0gc2VsZi5yZWZlcmVuY2UKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3Qoc2VsZi5pbm1hcHBpbmcua2V5cygpKVswXSBpbiBkLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3Qoc2VsZi5vdGhlci5rZXlzKCkpWzBdIG5vdCBpbiBkLmtleXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihsaXN0KHNlbGYuaW5tYXBwaW5nLmtleXMoKSlbMF0sIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGxpc3Qoc2VsZi5vdGhlci5rZXlzKCkpWzBdLCBkLmtleXMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkLmtleXMsIE5vbmUpCiAKICAgICBkZWYgdGVzdF92YWx1ZXMoc2VsZik6CkBAIC0zMjAsOSArMzIwLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQua2V5cygpKSwgW10pCiAgICAgICAgIGQgPSBzZWxmLl9mdWxsX21hcHBpbmcoeydhJzogMSwgJ2InOiAyfSkKICAgICAgICAgayA9IGQua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgaW4gaykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdiJyBpbiBrKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2MnIG5vdCBpbiBrKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgaykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYicsIGspCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2MnLCBrKQogCiAgICAgZGVmIHRlc3RfdmFsdWVzKHNlbGYpOgogICAgICAgICBCYXNpY1Rlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF92YWx1ZXMoc2VsZikKQEAgLTMzNywxMiArMzM3LDEzIEBACiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKICAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoJ2EnIGluIGQpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBkKQogICAgICAgICBkID0gc2VsZi5fZnVsbF9tYXBwaW5nKHsnYSc6IDEsICdiJzogMn0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdiJyBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2MnIG5vdCBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYicsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2MnLCBkKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5fX2NvbnRhaW5zX18pCiAKQEAgLTQzNCwxNSArNDM1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdGxpa2UoKS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKS5fX2NsYXNzX18gaXMgZGljdGxpa2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWN0bGlrZSgpLmZyb21rZXlzKCdhJykuX19jbGFzc19fIGlzIGRpY3RsaWtlKQotICAgICAgICAjIEZJWE1FOiB0aGUgZm9sbG93aW5nIHdvbid0IHdvcmsgd2l0aCBVc2VyRGljdCwgYmVjYXVzZSBpdCdzIGFuIG9sZCBzdHlsZSBjbGFzcwotICAgICAgICAjIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRpY3RsaWtlLmZyb21rZXlzKCdhJykpIGlzIGRpY3RsaWtlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkaWN0bGlrZS5mcm9ta2V5cygnYScpKSBpcyBkaWN0bGlrZSkKICAgICAgICAgY2xhc3MgbXlkaWN0KHNlbGYudHlwZTJ0ZXN0KToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkKICAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCi0gICAgICAgICMgRklYTUU6IHRoZSBmb2xsb3dpbmcgd29uJ3Qgd29yayB3aXRoIFVzZXJEaWN0LCBiZWNhdXNlIGl0J3MgYW4gb2xkIHN0eWxlIGNsYXNzCi0gICAgICAgICMgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodWQsIGNvbGxlY3Rpb25zLlVzZXJEaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHVkLCBjb2xsZWN0aW9ucy5Vc2VyRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaWN0LmZyb21rZXlzKQogCiAgICAgICAgIGNsYXNzIEV4YyhFeGNlcHRpb24pOiBwYXNzCkBAIC00NzIsNyArNDcxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNvcHkoKSwgezE6MSwgMjoyLCAzOjN9KQogICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3B5KCksIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGQuY29weSgpLCBkLl9fY2xhc3NfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLmNvcHkoKSwgZC5fX2NsYXNzX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3B5LCBOb25lKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgpAQCAtNTI4LDEzICs1MjcsNiBAQAogICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCiAgICAgICAgIGssIHYgPSAnYWJjJywgJ2RlZicKIAotICAgICAgICAjIHZlcmlmeSBsb25ncy9pbnRzIGdldCBzYW1lIHZhbHVlIHdoZW4ga2V5ID4gMzIgYml0cyAoZm9yIDY0LWJpdCBhcmNocykKLSAgICAgICAgIyBzZWUgU0YgYnVnICM2ODk2NTkKLSAgICAgICAgeCA9IDQ1MDM1OTk2MjczNzA0OTYKLSAgICAgICAgeSA9IDQ1MDM1OTk2MjczNzA0OTYKLSAgICAgICAgaCA9IHNlbGYuX2Z1bGxfbWFwcGluZyh7eDogJ2FueXRoaW5nJywgeTogJ3NvbWV0aGluZyBlbHNlJ30pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFt4XSwgaFt5XSkKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIHYpLCB2KQogICAgICAgICBkW2tdID0gdgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIDEpLCB2KQpAQCAtNTc3LDcgKzU2OSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkKICAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHVkLCBjb2xsZWN0aW9ucy5Vc2VyRGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1ZCwgY29sbGVjdGlvbnMuVXNlckRpY3QpCiAKICAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CiAgICAgICAgIFRlc3RNYXBwaW5nUHJvdG9jb2wudGVzdF9wb3Aoc2VsZikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dCBiL0xpYi90ZXN0L21hdGhfdGVzdGNhc2VzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTI0MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvbWF0aF90ZXN0Y2FzZXMudHh0CkBAIC0wLDAgKzEsNTE5IEBACistLSBUZXN0Y2FzZXMgZm9yIGZ1bmN0aW9ucyBpbiBtYXRoLgorLS0KKy0tIEVhY2ggbGluZSB0YWtlcyB0aGUgZm9ybToKKy0tCistLSA8dGVzdGlkPiA8ZnVuY3Rpb24+IDxpbnB1dF92YWx1ZT4gLT4gPG91dHB1dF92YWx1ZT4gPGZsYWdzPgorLS0KKy0tIHdoZXJlOgorLS0KKy0tICAgPHRlc3RpZD4gaXMgYSBzaG9ydCBuYW1lIGlkZW50aWZ5aW5nIHRoZSB0ZXN0LAorLS0KKy0tICAgPGZ1bmN0aW9uPiBpcyB0aGUgZnVuY3Rpb24gdG8gYmUgdGVzdGVkIChleHAsIGNvcywgYXNpbmgsIC4uLiksCistLQorLS0gICA8aW5wdXRfdmFsdWU+IGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGZsb2F0aW5nLXBvaW50IHZhbHVlCistLQorLS0gICA8b3V0cHV0X3ZhbHVlPiBpcyB0aGUgZXhwZWN0ZWQgKGlkZWFsKSBvdXRwdXQgdmFsdWUsIGFnYWluCistLSAgICAgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcuCistLQorLS0gICA8ZmxhZ3M+IGlzIGEgbGlzdCBvZiB0aGUgZmxvYXRpbmctcG9pbnQgZmxhZ3MgcmVxdWlyZWQgYnkgQzk5CistLQorLS0gVGhlIHBvc3NpYmxlIGZsYWdzIGFyZToKKy0tCistLSAgIGRpdmlkZS1ieS16ZXJvIDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYQorLS0gICAgIG1hdGhlbWF0aWNhbGx5IGluZmluaXRlIHJlc3VsdC4KKy0tCistLSAgIG92ZXJmbG93IDogcmFpc2VkIHdoZW4gYSBmaW5pdGUgaW5wdXQgZ2l2ZXMgYSBmaW5pdGUgcmVzdWx0IHRoYXQKKy0tICAgICBpcyB0b28gbGFyZ2UgdG8gZml0IGluIHRoZSB1c3VhbCByYW5nZSBvZiBhbiBJRUVFIDc1NCBkb3VibGUuCistLQorLS0gICBpbnZhbGlkIDogcmFpc2VkIGZvciBpbnZhbGlkIGlucHV0cyAoZS5nLiwgc3FydCgtMSkpCistLQorLS0gICBpZ25vcmUtc2lnbiA6IGluZGljYXRlcyB0aGF0IHRoZSBzaWduIG9mIHRoZSByZXN1bHQgaXMKKy0tICAgICB1bnNwZWNpZmllZDsgZS5nLiwgaWYgdGhlIHJlc3VsdCBpcyBnaXZlbiBhcyBpbmYsCistLSAgICAgdGhlbiBib3RoIC1pbmYgYW5kIGluZiBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgY29ycmVjdC4KKy0tCistLSBGbGFncyBtYXkgYXBwZWFyIGluIGFueSBvcmRlci4KKy0tCistLSBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnLS0nIChsaWtlIHRoaXMgb25lKSBzdGFydCBhIGNvbW1lbnQsIGFuZCBhcmUKKy0tIGlnbm9yZWQuICBCbGFuayBsaW5lcywgb3IgbGluZXMgY29udGFpbmluZyBvbmx5IHdoaXRlc3BhY2UsIGFyZSBhbHNvCistLSBpZ25vcmVkLgorCistLSBNYW55IG9mIHRoZSB2YWx1ZXMgYmVsb3cgd2VyZSBjb21wdXRlZCB3aXRoIHRoZSBoZWxwIG9mCistLSB2ZXJzaW9uIDIuNCBvZiB0aGUgTVBGUiBsaWJyYXJ5IGZvciBtdWx0aXBsZS1wcmVjaXNpb24KKy0tIGZsb2F0aW5nLXBvaW50IGNvbXB1dGF0aW9ucyB3aXRoIGNvcnJlY3Qgcm91bmRpbmcuICBBbGwgb3V0cHV0CistLSB2YWx1ZXMgaW4gdGhpcyBmaWxlIGFyZSAobW9kdWxvIHlldC10by1iZS1kaXNjb3ZlcmVkIGJ1Z3MpCistLSBjb3JyZWN0bHkgcm91bmRlZCwgcHJvdmlkZWQgdGhhdCBlYWNoIGlucHV0IGFuZCBvdXRwdXQgZGVjaW1hbAorLS0gZmxvYXRpbmctcG9pbnQgdmFsdWUgYmVsb3cgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZXByZXNlbnRhdGlvbiBvZgorLS0gdGhlIGNvcnJlc3BvbmRpbmcgbmVhcmVzdCBJRUVFIDc1NCBkb3VibGUtcHJlY2lzaW9uIHZhbHVlLiAgU2VlIHRoZQorLS0gTVBGUiBob21lcGFnZSBhdCBodHRwOi8vd3d3Lm1wZnIub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQorLS0gTVBGUiBwcm9qZWN0LgorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZjogZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmMDAwMCBlcmYgMC4wIC0+IDAuMAorZXJmMDAwMSBlcmYgLTAuMCAtPiAtMC4wCitlcmYwMDAyIGVyZiBpbmYgLT4gMS4wCitlcmYwMDAzIGVyZiAtaW5mIC0+IC0xLjAKK2VyZjAwMDQgZXJmIG5hbiAtPiBuYW4KKworLS0gdGlueSB2YWx1ZXMKK2VyZjAwMTAgZXJmIDFlLTMwOCAtPiAxLjEyODM3OTE2NzA5NTUxMjVlLTMwOAorZXJmMDAxMSBlcmYgNWUtMzI0IC0+IDQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0CitlcmYwMDEyIGVyZiAxZS0xMCAtPiAxLjEyODM3OTE2NzA5NTUxMjZlLTEwCisKKy0tIHNtYWxsIGludGVnZXJzCitlcmYwMDIwIGVyZiAxIC0+IDAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMjEgZXJmIDIgLT4gMC45OTUzMjIyNjUwMTg5NTI3MQorZXJmMDAyMiBlcmYgMyAtPiAwLjk5OTk3NzkwOTUwMzAwMTM2CitlcmYwMDIzIGVyZiA0IC0+IDAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMjQgZXJmIDUgLT4gMC45OTk5OTk5OTk5OTg0NjI1NgorZXJmMDAyNSBlcmYgNiAtPiAxLjAKKworZXJmMDAzMCBlcmYgLTEgLT4gLTAuODQyNzAwNzkyOTQ5NzE0ODkKK2VyZjAwMzEgZXJmIC0yIC0+IC0wLjk5NTMyMjI2NTAxODk1MjcxCitlcmYwMDMyIGVyZiAtMyAtPiAtMC45OTk5Nzc5MDk1MDMwMDEzNgorZXJmMDAzMyBlcmYgLTQgLT4gLTAuOTk5OTk5OTg0NTgyNzQyMDkKK2VyZjAwMzQgZXJmIC01IC0+IC0wLjk5OTk5OTk5OTk5ODQ2MjU2CitlcmYwMDM1IGVyZiAtNiAtPiAtMS4wCisKKy0tIGh1Z2UgdmFsdWVzIHNob3VsZCBhbGwgZ28gdG8gKy8tMSwgZGVwZW5kaW5nIG9uIHNpZ24KK2VyZjAwNDAgZXJmIC00MCAtPiAtMS4wCitlcmYwMDQxIGVyZiAxZTE2IC0+IDEuMAorZXJmMDA0MiBlcmYgLTFlMTUwIC0+IC0xLjAKK2VyZjAwNDMgZXJmIDEuN2UzMDggLT4gMS4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZjAxMDAgZXJmIDI2LjIgLT4gMS4wCitlcmYwMTAxIGVyZiAyNi40IC0+IDEuMAorZXJmMDEwMiBlcmYgMjYuNiAtPiAxLjAKK2VyZjAxMDMgZXJmIDI2LjggLT4gMS4wCitlcmYwMTA0IGVyZiAyNy4wIC0+IDEuMAorZXJmMDEwNSBlcmYgMjcuMiAtPiAxLjAKK2VyZjAxMDYgZXJmIDI3LjQgLT4gMS4wCitlcmYwMTA3IGVyZiAyNy42IC0+IDEuMAorCitlcmYwMTEwIGVyZiAtMjYuMiAtPiAtMS4wCitlcmYwMTExIGVyZiAtMjYuNCAtPiAtMS4wCitlcmYwMTEyIGVyZiAtMjYuNiAtPiAtMS4wCitlcmYwMTEzIGVyZiAtMjYuOCAtPiAtMS4wCitlcmYwMTE0IGVyZiAtMjcuMCAtPiAtMS4wCitlcmYwMTE1IGVyZiAtMjcuMiAtPiAtMS4wCitlcmYwMTE2IGVyZiAtMjcuNCAtPiAtMS4wCitlcmYwMTE3IGVyZiAtMjcuNiAtPiAtMS4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIGVyZmM6IGNvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZXJmYzAwMDAgZXJmYyAwLjAgLT4gMS4wCitlcmZjMDAwMSBlcmZjIC0wLjAgLT4gMS4wCitlcmZjMDAwMiBlcmZjIGluZiAtPiAwLjAKK2VyZmMwMDAzIGVyZmMgLWluZiAtPiAyLjAKK2VyZmMwMDA0IGVyZmMgbmFuIC0+IG5hbgorCistLSB0aW55IHZhbHVlcworZXJmYzAwMTAgZXJmYyAxZS0zMDggLT4gMS4wCitlcmZjMDAxMSBlcmZjIDVlLTMyNCAtPiAxLjAKK2VyZmMwMDEyIGVyZmMgMWUtMTAgLT4gMC45OTk5OTk5OTk4ODcxNjIwNAorCistLSBzbWFsbCBpbnRlZ2VycworZXJmYzAwMjAgZXJmYyAxIC0+IDAuMTU3Mjk5MjA3MDUwMjg1MTMKK2VyZmMwMDIxIGVyZmMgMiAtPiAwLjAwNDY3NzczNDk4MTA0NzI2NjIKK2VyZmMwMDIyIGVyZmMgMyAtPiAyLjIwOTA0OTY5OTg1ODU0NDFlLTA1CitlcmZjMDAyMyBlcmZjIDQgLT4gMS41NDE3MjU3OTAwMjgwMDJlLTA4CitlcmZjMDAyNCBlcmZjIDUgLT4gMS41Mzc0NTk3OTQ0MjgwMzQ5ZS0xMgorZXJmYzAwMjUgZXJmYyA2IC0+IDIuMTUxOTczNjcxMjQ5ODkxM2UtMTcKKworZXJmYzAwMzAgZXJmYyAtMSAtPiAxLjg0MjcwMDc5Mjk0OTcxNDgKK2VyZmMwMDMxIGVyZmMgLTIgLT4gMS45OTUzMjIyNjUwMTg5NTI4CitlcmZjMDAzMiBlcmZjIC0zIC0+IDEuOTk5OTc3OTA5NTAzMDAxNQorZXJmYzAwMzMgZXJmYyAtNCAtPiAxLjk5OTk5OTk4NDU4Mjc0MjEKK2VyZmMwMDM0IGVyZmMgLTUgLT4gMS45OTk5OTk5OTk5OTg0NjI2CitlcmZjMDAzNSBlcmZjIC02IC0+IDIuMAorCistLSBhcyB4IC0+IGluZmluaXR5LCBlcmZjKHgpIGJlaGF2ZXMgbGlrZSBleHAoLXgqeCkveC9zcXJ0KHBpKQorZXJmYzAwNDAgZXJmYyAyMCAtPiA1LjM5NTg2NTYxMTYwNzkwMTJlLTE3NgorZXJmYzAwNDEgZXJmYyAyNSAtPiA4LjMwMDE3MjU3MTE5NjUyMjhlLTI3NAorZXJmYzAwNDIgZXJmYyAyNyAtPiA1LjIzNzA0NjQzOTM1MjYyOTJlLTMxOQorZXJmYzAwNDMgZXJmYyAyOCAtPiAwLjAKKworLS0gaHVnZSB2YWx1ZXMKK2VyZmMwMDUwIGVyZmMgLTQwIC0+IDIuMAorZXJmYzAwNTEgZXJmYyAxZTE2IC0+IDAuMAorZXJmYzAwNTIgZXJmYyAtMWUxNTAgLT4gMi4wCitlcmZjMDA1MyBlcmZjIDEuN2UzMDggLT4gMC4wCisKKy0tIElzc3VlIDg5ODY6IGlucHV0cyB4IHdpdGggZXhwKC14KngpIG5lYXIgdGhlIHVuZGVyZmxvdyB0aHJlc2hvbGQKKy0tIGluY29ycmVjdGx5IHNpZ25hbGxlZCBvdmVyZmxvdyBvbiBzb21lIHBsYXRmb3Jtcy4KK2VyZmMwMTAwIGVyZmMgMjYuMiAtPiAxLjY0MzI1MDc5MjQzODk0NjFlLTMwMAorZXJmYzAxMDEgZXJmYyAyNi40IC0+IDQuNDAxNzc2ODU4ODAzNTQyNmUtMzA1CitlcmZjMDEwMiBlcmZjIDI2LjYgLT4gMS4wODg1MTI1ODg1NDQyMjY5ZS0zMDkKK2VyZmMwMTAzIGVyZmMgMjYuOCAtPiAyLjQ4NDk2MjE1NzE5NjY2MjllLTMxNAorZXJmYzAxMDQgZXJmYyAyNy4wIC0+IDUuMjM3MDQ2NDM5MzUyNjI5MmUtMzE5CitlcmZjMDEwNSBlcmZjIDI3LjIgLT4gOS44ODEzMTI5MTY4MjQ5MzA5ZS0zMjQKK2VyZmMwMTA2IGVyZmMgMjcuNCAtPiAwLjAKK2VyZmMwMTA3IGVyZmMgMjcuNiAtPiAwLjAKKworZXJmYzAxMTAgZXJmYyAtMjYuMiAtPiAyLjAKK2VyZmMwMTExIGVyZmMgLTI2LjQgLT4gMi4wCitlcmZjMDExMiBlcmZjIC0yNi42IC0+IDIuMAorZXJmYzAxMTMgZXJmYyAtMjYuOCAtPiAyLjAKK2VyZmMwMTE0IGVyZmMgLTI3LjAgLT4gMi4wCitlcmZjMDExNSBlcmZjIC0yNy4yIC0+IDIuMAorZXJmYzAxMTYgZXJmYyAtMjcuNCAtPiAyLjAKK2VyZmMwMTE3IGVyZmMgLTI3LjYgLT4gMi4wCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbGdhbW1hOiBsb2cgb2YgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdhbW1hIGZ1bmN0aW9uIC0tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2xnYW0wMDAwIGxnYW1tYSAwLjAgLT4gaW5mICAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAxIGxnYW1tYSAtMC4wIC0+IGluZiAgICAgZGl2aWRlLWJ5LXplcm8KK2xnYW0wMDAyIGxnYW1tYSBpbmYgLT4gaW5mCitsZ2FtMDAwMyBsZ2FtbWEgLWluZiAtPiBpbmYKK2xnYW0wMDA0IGxnYW1tYSBuYW4gLT4gbmFuCisKKy0tIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDAxMCBsZ2FtbWEgLTEgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMSBsZ2FtbWEgLTIgLT4gaW5mICAgICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMiBsZ2FtbWEgLTFlMTYgLT4gaW5mICAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxMyBsZ2FtbWEgLTFlMzAwIC0+IGluZiAgIGRpdmlkZS1ieS16ZXJvCitsZ2FtMDAxNCBsZ2FtbWEgLTEuNzllMzA4IC0+IGluZiBkaXZpZGUtYnktemVybworCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2xnYW0wMDIwIGxnYW1tYSAxIC0+IDAuMAorbGdhbTAwMjEgbGdhbW1hIDIgLT4gMC4wCitsZ2FtMDAyMiBsZ2FtbWEgMyAtPiAwLjY5MzE0NzE4MDU1OTk0NTI5CitsZ2FtMDAyMyBsZ2FtbWEgNCAtPiAxLjc5MTc1OTQ2OTIyODA1NQorbGdhbTAwMjQgbGdhbW1hIDUgLT4gMy4xNzgwNTM4MzAzNDc5NDU4CitsZ2FtMDAyNSBsZ2FtbWEgNiAtPiA0Ljc4NzQ5MTc0Mjc4MjA0NTgKKworLS0gaGFsZiBpbnRlZ2VycworbGdhbTAwMzAgbGdhbW1hIDAuNSAtPiAwLjU3MjM2NDk0MjkyNDcwMDA4CitsZ2FtMDAzMSBsZ2FtbWEgMS41IC0+IC0wLjEyMDc4MjIzNzYzNTI0NTIyCitsZ2FtMDAzMiBsZ2FtbWEgMi41IC0+IDAuMjg0NjgyODcwNDcyOTE5MTgKK2xnYW0wMDMzIGxnYW1tYSAzLjUgLT4gMS4yMDA5NzM2MDIzNDcwNzQzCitsZ2FtMDAzNCBsZ2FtbWEgLTAuNSAtPiAxLjI2NTUxMjEyMzQ4NDY0NTQKK2xnYW0wMDM1IGxnYW1tYSAtMS41IC0+IDAuODYwMDQ3MDE1Mzc2NDgwOTgKK2xnYW0wMDM2IGxnYW1tYSAtMi41IC0+IC0wLjA1NjI0MzcxNjQ5NzY3NDA1NAorbGdhbTAwMzcgbGdhbW1hIC0zLjUgLT4gLTEuMzA5MDA2Njg0OTkzMDQyCisKKy0tIHZhbHVlcyBuZWFyIDAKK2xnYW0wMDQwIGxnYW1tYSAwLjEgLT4gMi4yNTI3MTI2NTE3MzQyMDYKK2xnYW0wMDQxIGxnYW1tYSAwLjAxIC0+IDQuNTk5NDc5ODc4MDQyMDIxOQorbGdhbTAwNDIgbGdhbW1hIDFlLTggLT4gMTguNDIwNjgwNzM4MTgwMjA5CitsZ2FtMDA0MyBsZ2FtbWEgMWUtMTYgLT4gMzYuODQxMzYxNDg3OTA0NzM0CitsZ2FtMDA0NCBsZ2FtbWEgMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA0NSBsZ2FtbWEgMWUtMTYwIC0+IDM2OC40MTM2MTQ4NzkwNDczMgorbGdhbTAwNDYgbGdhbW1hIDFlLTMwOCAtPiA3MDkuMTk2MjA4NjQyMTY2MDgKK2xnYW0wMDQ3IGxnYW1tYSA1LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDQ4IGxnYW1tYSA1LjVlLTMwOSAtPiA3MDkuNzk0MDQ1NjQyOTIxNjcKK2xnYW0wMDQ5IGxnYW1tYSAxZS0zMDkgLT4gNzExLjQ5ODc5MzczNTE2MDEyCitsZ2FtMDA1MCBsZ2FtbWEgMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNTEgbGdhbW1hIDVlLTMyNCAtPiA3NDQuNDQwMDcxOTIxMzgxMjIKK2xnYW0wMDYwIGxnYW1tYSAtMC4xIC0+IDIuMzY4OTYxMzMyNzI4Nzg4NgorbGdhbTAwNjEgbGdhbW1hIC0wLjAxIC0+IDQuNjExMDI0OTkyNzUyODAxMworbGdhbTAwNjIgbGdhbW1hIC0xZS04IC0+IDE4LjQyMDY4MDc0OTcyNDUyMgorbGdhbTAwNjMgbGdhbW1hIC0xZS0xNiAtPiAzNi44NDEzNjE0ODc5MDQ3MzQKK2xnYW0wMDY0IGxnYW1tYSAtMWUtMzAgLT4gNjkuMDc3NTUyNzg5ODIxMzY4CitsZ2FtMDA2NSBsZ2FtbWEgLTFlLTE2MCAtPiAzNjguNDEzNjE0ODc5MDQ3MzIKK2xnYW0wMDY2IGxnYW1tYSAtMWUtMzA4IC0+IDcwOS4xOTYyMDg2NDIxNjYwOAorbGdhbTAwNjcgbGdhbW1hIC01LjZlLTMwOSAtPiA3MDkuNzc2MDI3MTM3NDE4OTYKK2xnYW0wMDY4IGxnYW1tYSAtNS41ZS0zMDkgLT4gNzA5Ljc5NDA0NTY0MjkyMTY3CitsZ2FtMDA2OSBsZ2FtbWEgLTFlLTMwOSAtPiA3MTEuNDk4NzkzNzM1MTYwMTIKK2xnYW0wMDcwIGxnYW1tYSAtMWUtMzIzIC0+IDc0My43NDY5MjQ3NDA4MjEzMworbGdhbTAwNzEgbGdhbW1hIC01ZS0zMjQgLT4gNzQ0LjQ0MDA3MTkyMTM4MTIyCisKKy0tIHZhbHVlcyBuZWFyIG5lZ2F0aXZlIGludGVnZXJzCitsZ2FtMDA4MCBsZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gMzYuNzM2ODAwNTY5Njc3MTAxCitsZ2FtMDA4MSBsZ2FtbWEgLTEuMDAwMDAwMDAwMDAwMDAwMiAtPiAzNi4wNDM2NTMzODkxMTcxNTQKK2xnYW0wMDgyIGxnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDM1LjM1MDUwNjIwODU1NzIxMworbGdhbTAwODMgbGdhbW1hIC0yLjAwMDAwMDAwMDAwMDAwMDQgLT4gMzQuNjU3MzU5MDI3OTk3MjY2CitsZ2FtMDA4NCBsZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtMzMxLjg1NDYwNTI0OTgwNjA3CitsZ2FtMDA4NSBsZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiAtMzMxLjg1NDYwNTI0OTgwNTk2CisKKy0tIGxhcmdlIGlucHV0cworbGdhbTAxMDAgbGdhbW1hIDE3MCAtPiA3MDEuNDM3MjYzODA4NzM3MDQKK2xnYW0wMTAxIGxnYW1tYSAxNzEgLT4gNzA2LjU3MzA2MjI0NTc4NzM2CitsZ2FtMDEwMiBsZ2FtbWEgMTcxLjYyNCAtPiA3MDkuNzgwNzc0NDM2Njk4OTUKK2xnYW0wMTAzIGxnYW1tYSAxNzEuNjI1IC0+IDcwOS43ODU5MTY4Mjk0ODM2NQorbGdhbTAxMDQgbGdhbW1hIDE3MiAtPiA3MTEuNzE0NzI1ODAyMjg5OTkKK2xnYW0wMTA1IGxnYW1tYSAyMDAwIC0+IDEzMTk4LjkyMzQ0ODA1NDI2NQorbGdhbTAxMDYgbGdhbW1hIDIuNTU5OTgzMzI3ODUxNjNlMzA1IC0+IDEuNzk3NjkzMTM0ODYyMzA5OWUrMzA4CitsZ2FtMDEwNyBsZ2FtbWEgMi41NTk5ODMzMjc4NTE2NGUzMDUgLT4gaW5mIG92ZXJmbG93CitsZ2FtMDEwOCBsZ2FtbWEgMS43ZTMwOCAtPiBpbmYgb3ZlcmZsb3cKKworLS0gaW5wdXRzIGZvciB3aGljaCBnYW1tYSh4KSBpcyB0aW55CitsZ2FtMDEyMCBsZ2FtbWEgLTEwMC41IC0+IC0zNjQuOTAwOTY4MzA5NDI3MzYKK2xnYW0wMTIxIGxnYW1tYSAtMTYwLjUgLT4gLTY1Ni44ODAwNTI2MTEyNjQzMgorbGdhbTAxMjIgbGdhbW1hIC0xNzAuNSAtPiAtNzA3Ljk5ODQzMzE0NTA3ODgyCitsZ2FtMDEyMyBsZ2FtbWEgLTE3MS41IC0+IC03MTMuMTQzMDE2NDExNjg0ODEKK2xnYW0wMTI0IGxnYW1tYSAtMTc2LjUgLT4gLTczOC45NTI0NzU5MDg0NjQ4NgorbGdhbTAxMjUgbGdhbW1hIC0xNzcuNSAtPiAtNzQ0LjEzMTQ0NjUxNzM4MDM3CitsZ2FtMDEyNiBsZ2FtbWEgLTE3OC41IC0+IC03NDkuMzE2MDM1MTE4NjAwMQorCitsZ2FtMDEzMCBsZ2FtbWEgLTEwMDAuNSAtPiAtNTkxNC40Mzc3MDExMTY4NTE3CitsZ2FtMDEzMSBsZ2FtbWEgLTMwMDAwLjUgLT4gLTI3OTI3OC42NjI5OTU5MTQ0CitsZ2FtMDEzMiBsZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAtMS41NzgyMjU4NDM0NDkyODgzZSsxNworCistLSByZXN1bHRzIGNsb3NlIHRvIDA6ICBwb3NpdGl2ZSBhcmd1bWVudCAuLi4KK2xnYW0wMTUwIGxnYW1tYSAwLjk5OTk5OTk5OTk5OTk5OTg5IC0+IDYuNDA4MzgxMjEzNDgwMDA3NWUtMTcKK2xnYW0wMTUxIGxnYW1tYSAxLjAwMDAwMDAwMDAwMDAwMDIgLT4gLTEuMjgxNjc2MjQyNjk2MDAwOGUtMTYKK2xnYW0wMTUyIGxnYW1tYSAxLjk5OTk5OTk5OTk5OTk5OTggLT4gLTkuMzg3Njk4MDY1NTQzMTE3MGUtMTcKK2xnYW0wMTUzIGxnYW1tYSAyLjAwMDAwMDAwMDAwMDAwMDQgLT4gMS44Nzc1Mzk2MTMxMDg2MjQ0ZS0xNgorCistLSAuLi4gYW5kIG5lZ2F0aXZlIGFyZ3VtZW50CitsZ2FtMDE2MCBsZ2FtbWEgLTIuNzQ3NjgyNjQ2NyAtPiAtNS4yNDc3NDA4MTQ3Njg5MTM2ZS0xMQorbGdhbTAxNjEgbGdhbW1hIC0yLjQ1NzAyNDczOCAtPiAzLjM0NjQ2Mzc1NDE5MTI5MzJlLTEwCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBnYW1tYTogR2FtbWEgZnVuY3Rpb24gLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistLSBzcGVjaWFsIHZhbHVlcworZ2FtMDAwMCBnYW1tYSAwLjAgLT4gaW5mICAgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMSBnYW1tYSAtMC4wIC0+IC1pbmYgICAgICBkaXZpZGUtYnktemVybworZ2FtMDAwMiBnYW1tYSBpbmYgLT4gaW5mCitnYW0wMDAzIGdhbW1hIC1pbmYgLT4gbmFuICAgICAgIGludmFsaWQKK2dhbTAwMDQgZ2FtbWEgbmFuIC0+IG5hbgorCistLSBuZWdhdGl2ZSBpbnRlZ2VycyBpbnB1dHMgYXJlIGludmFsaWQKK2dhbTAwMTAgZ2FtbWEgLTEgLT4gbmFuICAgICAgICAgaW52YWxpZAorZ2FtMDAxMSBnYW1tYSAtMiAtPiBuYW4gICAgICAgICBpbnZhbGlkCitnYW0wMDEyIGdhbW1hIC0xZTE2IC0+IG5hbiAgICAgIGludmFsaWQKK2dhbTAwMTMgZ2FtbWEgLTFlMzAwIC0+IG5hbiAgICAgaW52YWxpZAorCistLSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyBnaXZlIGZhY3RvcmlhbHMKK2dhbTAwMjAgZ2FtbWEgMSAtPiAxCitnYW0wMDIxIGdhbW1hIDIgLT4gMQorZ2FtMDAyMiBnYW1tYSAzIC0+IDIKK2dhbTAwMjMgZ2FtbWEgNCAtPiA2CitnYW0wMDI0IGdhbW1hIDUgLT4gMjQKK2dhbTAwMjUgZ2FtbWEgNiAtPiAxMjAKKworLS0gaGFsZiBpbnRlZ2VycworZ2FtMDAzMCBnYW1tYSAwLjUgLT4gMS43NzI0NTM4NTA5MDU1MTYxCitnYW0wMDMxIGdhbW1hIDEuNSAtPiAwLjg4NjIyNjkyNTQ1Mjc1ODA1CitnYW0wMDMyIGdhbW1hIDIuNSAtPiAxLjMyOTM0MDM4ODE3OTEzNzAKK2dhbTAwMzMgZ2FtbWEgMy41IC0+IDMuMzIzMzUwOTcwNDQ3ODQyNgorZ2FtMDAzNCBnYW1tYSAtMC41IC0+IC0zLjU0NDkwNzcwMTgxMTAzMjIKK2dhbTAwMzUgZ2FtbWEgLTEuNSAtPiAyLjM2MzI3MTgwMTIwNzM1NDgKK2dhbTAwMzYgZ2FtbWEgLTIuNSAtPiAtMC45NDUzMDg3MjA0ODI5NDE5MAorZ2FtMDAzNyBnYW1tYSAtMy41IC0+IDAuMjcwMDg4MjA1ODUyMjY5MTEKKworLS0gdmFsdWVzIG5lYXIgMAorZ2FtMDA0MCBnYW1tYSAwLjEgLT4gOS41MTM1MDc2OTg2Njg3MzA2CitnYW0wMDQxIGdhbW1hIDAuMDEgLT4gOTkuNDMyNTg1MTE5MTUwNjAyCitnYW0wMDQyIGdhbW1hIDFlLTggLT4gOTk5OTk5OTkuNDIyNzg0MzQzCitnYW0wMDQzIGdhbW1hIDFlLTE2IC0+IDEwMDAwMDAwMDAwMDAwMDAwCitnYW0wMDQ0IGdhbW1hIDFlLTMwIC0+IDkuOTk5OTk5OTk5OTk5OTk4OGUrMjkKK2dhbTAwNDUgZ2FtbWEgMWUtMTYwIC0+IDEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDQ2IGdhbW1hIDFlLTMwOCAtPiAxLjAwMDAwMDAwMDAwMDAwMDBlKzMwOAorZ2FtMDA0NyBnYW1tYSA1LjZlLTMwOSAtPiAxLjc4NTcxNDI4NTcxNDI4NDhlKzMwOAorZ2FtMDA0OCBnYW1tYSA1LjVlLTMwOSAtPiBpbmYgICBvdmVyZmxvdworZ2FtMDA0OSBnYW1tYSAxZS0zMDkgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MCBnYW1tYSAxZS0zMjMgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA1MSBnYW1tYSA1ZS0zMjQgLT4gaW5mICAgICBvdmVyZmxvdworZ2FtMDA2MCBnYW1tYSAtMC4xIC0+IC0xMC42ODYyODcwMjExOTMxOTMKK2dhbTAwNjEgZ2FtbWEgLTAuMDEgLT4gLTEwMC41ODcxOTc5NjQ0MTA3OAorZ2FtMDA2MiBnYW1tYSAtMWUtOCAtPiAtMTAwMDAwMDAwLjU3NzIxNTY3CitnYW0wMDYzIGdhbW1hIC0xZS0xNiAtPiAtMTAwMDAwMDAwMDAwMDAwMDAKK2dhbTAwNjQgZ2FtbWEgLTFlLTMwIC0+IC05Ljk5OTk5OTk5OTk5OTk5ODhlKzI5CitnYW0wMDY1IGdhbW1hIC0xZS0xNjAgLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMTYwCitnYW0wMDY2IGdhbW1hIC0xZS0zMDggLT4gLTEuMDAwMDAwMDAwMDAwMDAwMGUrMzA4CitnYW0wMDY3IGdhbW1hIC01LjZlLTMwOSAtPiAtMS43ODU3MTQyODU3MTQyODQ4ZSszMDgKK2dhbTAwNjggZ2FtbWEgLTUuNWUtMzA5IC0+IC1pbmYgb3ZlcmZsb3cKK2dhbTAwNjkgZ2FtbWEgLTFlLTMwOSAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzAgZ2FtbWEgLTFlLTMyMyAtPiAtaW5mICAgb3ZlcmZsb3cKK2dhbTAwNzEgZ2FtbWEgLTVlLTMyNCAtPiAtaW5mICAgb3ZlcmZsb3cKKworLS0gdmFsdWVzIG5lYXIgbmVnYXRpdmUgaW50ZWdlcnMKK2dhbTAwODAgZ2FtbWEgLTAuOTk5OTk5OTk5OTk5OTk5ODkgLT4gLTkwMDcxOTkyNTQ3NDA5OTIuMAorZ2FtMDA4MSBnYW1tYSAtMS4wMDAwMDAwMDAwMDAwMDAyIC0+IDQ1MDM1OTk2MjczNzA0OTUuNQorZ2FtMDA4MiBnYW1tYSAtMS45OTk5OTk5OTk5OTk5OTk4IC0+IDIyNTE3OTk4MTM2ODUyNDguNQorZ2FtMDA4MyBnYW1tYSAtMi4wMDAwMDAwMDAwMDAwMDA0IC0+IC0xMTI1ODk5OTA2ODQyNjIzLjUKK2dhbTAwODQgZ2FtbWEgLTEwMC4wMDAwMDAwMDAwMDAwMSAtPiAtNy41NDAwODMzMzQ4ODMxMDkwZS0xNDUKK2dhbTAwODUgZ2FtbWEgLTk5Ljk5OTk5OTk5OTk5OTk4NiAtPiA3LjU0MDA4MzMzNDg4NDA5NjJlLTE0NQorCistLSBsYXJnZSBpbnB1dHMKK2dhbTAxMDAgZ2FtbWEgMTcwIC0+IDQuMjY5MDY4MDA5MDA0NzA1MWUrMzA0CitnYW0wMTAxIGdhbW1hIDE3MSAtPiA3LjI1NzQxNTYxNTMwNzk5OTBlKzMwNgorZ2FtMDEwMiBnYW1tYSAxNzEuNjI0IC0+IDEuNzk0MjExNzU5OTI0ODEwNGUrMzA4CitnYW0wMTAzIGdhbW1hIDE3MS42MjUgLT4gaW5mICAgIG92ZXJmbG93CitnYW0wMTA0IGdhbW1hIDE3MiAtPiBpbmYgICAgICAgIG92ZXJmbG93CitnYW0wMTA1IGdhbW1hIDIwMDAgLT4gaW5mICAgICAgIG92ZXJmbG93CitnYW0wMTA2IGdhbW1hIDEuN2UzMDggLT4gaW5mICAgIG92ZXJmbG93CisKKy0tIGlucHV0cyBmb3Igd2hpY2ggZ2FtbWEoeCkgaXMgdGlueQorZ2FtMDEyMCBnYW1tYSAtMTAwLjUgLT4gLTMuMzUzNjkwODE5ODA3Njc4N2UtMTU5CitnYW0wMTIxIGdhbW1hIC0xNjAuNSAtPiAtNS4yNTU1NDY0NDcwMDc4MjkzZS0yODYKK2dhbTAxMjIgZ2FtbWEgLTE3MC41IC0+IC0zLjMxMjczOTUyMTUzODYwNzRlLTMwOAorZ2FtMDEyMyBnYW1tYSAtMTcxLjUgLT4gMS45MzE2MjY1NDMxNzExOTAyZS0zMTAKK2dhbTAxMjQgZ2FtbWEgLTE3Ni41IC0+IC0xLjE5NTYzODg2MjkzNTgxNjZlLTMyMQorZ2FtMDEyNSBnYW1tYSAtMTc3LjUgLT4gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQKK2dhbTAxMjYgZ2FtbWEgLTE3OC41IC0+IC0wLjAKK2dhbTAxMjcgZ2FtbWEgLTE3OS41IC0+IDAuMAorZ2FtMDEyOCBnYW1tYSAtMjAxLjAwMDEgLT4gMC4wCitnYW0wMTI5IGdhbW1hIC0yMDIuOTk5OSAtPiAtMC4wCitnYW0wMTMwIGdhbW1hIC0xMDAwLjUgLT4gLTAuMAorZ2FtMDEzMSBnYW1tYSAtMTAwMDAwMDAwMC4zIC0+IC0wLjAKK2dhbTAxMzIgZ2FtbWEgLTQ1MDM1OTk2MjczNzA0OTUuNSAtPiAwLjAKKworLS0gaW5wdXRzIHRoYXQgY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBzdGFuZGFyZCByZWZsZWN0aW9uIGZvcm11bGEsCistLSB0aGFua3MgdG8gbG9zcyBvZiBhY2N1cmFjeSBpbiAxLXgKK2dhbTAxNDAgZ2FtbWEgLTYzLjM0OTA3ODcyOTAyMjk4NSAtPiA0LjE3Nzc5NzE2Nzc3NjE4ODBlLTg4CitnYW0wMTQxIGdhbW1hIC0xMjcuNDUxMTc2MzI5NDMyOTUgLT4gMS4xODMxMTEwODk2MjM2ODEwZS0yMTQKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gbG9nMXA6IGxvZygxICsgeCksIHdpdGhvdXQgcHJlY2lzaW9uIGxvc3MgZm9yIHNtYWxsIHggLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIHNwZWNpYWwgdmFsdWVzCitsb2cxcDAwMDAgbG9nMXAgMC4wIC0+IDAuMAorbG9nMXAwMDAxIGxvZzFwIC0wLjAgLT4gLTAuMAorbG9nMXAwMDAyIGxvZzFwIGluZiAtPiBpbmYKK2xvZzFwMDAwMyBsb2cxcCAtaW5mIC0+IG5hbiAgICAgICAgICAgICBpbnZhbGlkCitsb2cxcDAwMDQgbG9nMXAgbmFuIC0+IG5hbgorCistLSBzaW5ndWxhcml0eSBhdCAtMS4wCitsb2cxcDAwMTAgbG9nMXAgLTEuMCAtPiAtaW5mICAgICAgICAgICAgZGl2aWRlLWJ5LXplcm8KK2xvZzFwMDAxMSBsb2cxcCAtMC45OTk5OTk5OTk5OTk5OTk5IC0+IC0zNi43MzY4MDA1Njk2NzcxMDEKKworLS0gZmluaXRlIHZhbHVlcyA8IDEuMCBhcmUgaW52YWxpZAorbG9nMXAwMDIwIGxvZzFwIC0xLjAwMDAwMDAwMDAwMDAwMDIgLT4gbmFuIGludmFsaWQKK2xvZzFwMDAyMSBsb2cxcCAtMS4xIC0+IG5hbiBpbnZhbGlkCitsb2cxcDAwMjIgbG9nMXAgLTIuMCAtPiBuYW4gaW52YWxpZAorbG9nMXAwMDIzIGxvZzFwIC0xZTMwMCAtPiBuYW4gaW52YWxpZAorCistLSB0aW55IHg6IGxvZzFwKHgpIH4geAorbG9nMXAwMTEwIGxvZzFwIDVlLTMyNCAtPiA1ZS0zMjQKK2xvZzFwMDExMSBsb2cxcCAxZS0zMjAgLT4gMWUtMzIwCitsb2cxcDAxMTIgbG9nMXAgMWUtMzAwIC0+IDFlLTMwMAorbG9nMXAwMTEzIGxvZzFwIDFlLTE1MCAtPiAxZS0xNTAKK2xvZzFwMDExNCBsb2cxcCAxZS0yMCAtPiAxZS0yMAorCitsb2cxcDAxMjAgbG9nMXAgLTVlLTMyNCAtPiAtNWUtMzI0Citsb2cxcDAxMjEgbG9nMXAgLTFlLTMyMCAtPiAtMWUtMzIwCitsb2cxcDAxMjIgbG9nMXAgLTFlLTMwMCAtPiAtMWUtMzAwCitsb2cxcDAxMjMgbG9nMXAgLTFlLTE1MCAtPiAtMWUtMTUwCitsb2cxcDAxMjQgbG9nMXAgLTFlLTIwIC0+IC0xZS0yMAorCistLSBzb21lIChtb3N0bHkpIHJhbmRvbSBzbWFsbCBhbmQgbW9kZXJhdGUtc2l6ZWQgdmFsdWVzCitsb2cxcDAyMDAgbG9nMXAgLTAuODkxNTY4ODk3ODIyNzc0ODIgLT4gLTIuMjIxNjQwMzEwNjc2Mjg2MworbG9nMXAwMjAxIGxvZzFwIC0wLjIzODU4NDk2MDQ3NzcwNDY0IC0+IC0wLjI3MjU3NjY4Mjc2OTgwMDU3Citsb2cxcDAyMDIgbG9nMXAgLTAuMDExNjQxNzI2MTkxMzA3NTE1IC0+IC0wLjAxMTcxMDAyMTY1NDQ5NTY1NworbG9nMXAwMjAzIGxvZzFwIC0wLjAwOTAxMjYzOTg1NzE2OTM4MTcgLT4gLTAuMDA5MDUzNDk5MzgyNTAwNzY1MAorbG9nMXAwMjA0IGxvZzFwIC0wLjAwMDIzNDQyODA1OTg1NzEyNzgxIC0+IC0wLjAwMDIzNDQ1NTU0MjQwOTk1NjkzCitsb2cxcDAyMDUgbG9nMXAgLTEuNTY3Mjg3MDk4MDkzNjM0OWUtNSAtPiAtMS41NjcyOTkzODAxNjYyMDQ2ZS01Citsb2cxcDAyMDYgbG9nMXAgLTcuOTY1MDAxMzI3NDgyNTI5NWUtNiAtPiAtNy45NjUwMzMwNDgyNzQwNDAxZS02Citsb2cxcDAyMDcgbG9nMXAgLTIuNTIwMjk0ODM0MzIyNzQxMGUtNyAtPiAtMi41MjAyOTUxNTE5MTcwOTcxZS03Citsb2cxcDAyMDggbG9nMXAgLTguMjQ0NjM3MjgyMDc0NTg1NWUtMTEgLT4gLTguMjQ0NjM3MjgyNDE0NDU1OWUtMTEKK2xvZzFwMDIwOSBsb2cxcCAtOC4xNjYzNjcwMDQ2NDkwNzg5ZS0xMiAtPiAtOC4xNjYzNjcwMDQ2ODI0MjMwZS0xMgorbG9nMXAwMjEwIGxvZzFwIDcuMDM1MTczNTA4NDY1NjI5MmUtMTggLT4gNy4wMzUxNzM1MDg0NjU2MjkyZS0xOAorbG9nMXAwMjExIGxvZzFwIDUuMjczMjE2MTkwNzM3NTIyNmUtMTIgLT4gNS4yNzMyMTYxOTA3MjM2MTg4ZS0xMgorbG9nMXAwMjEyIGxvZzFwIDEuMDAwMDAwMDAwMDAwMDAwMGUtMTAgLT4gOS45OTk5OTk5OTk1MDAwMDA3ZS0xMQorbG9nMXAwMjEzIGxvZzFwIDIuMTQwMTI3MzI2NjAwMDE5N2UtOSAtPiAyLjE0MDEyNzMyNDMwOTk0NzBlLTkKK2xvZzFwMDIxNCBsb2cxcCAxLjI2Njg5MTQ2NTM5Nzk1NjBlLTggLT4gMS4yNjY4OTE0NTczNzI4ODYxZS04Citsb2cxcDAyMTUgbG9nMXAgMS42MjUwMDA3ODE2Mjk5MDY5ZS02IC0+IDEuNjI0OTk5NDYxMzE3NTY3MmUtNgorbG9nMXAwMjE2IGxvZzFwIDguMzc0MDQ5NTY0NTgzOTM5OWUtNiAtPiA4LjM3NDAxNDUwMjQyNjYyNjllLTYKK2xvZzFwMDIxNyBsb2cxcCAzLjAwMDAwMDAwMDAwMDAwMDFlLTUgLT4gMi45OTk5NTUwMDA4OTk5Nzk5ZS01Citsb2cxcDAyMTggbG9nMXAgMC4wMDcwMDAwMDAwMDAwMDAwMDAxIC0+IDAuMDA2OTc1NjEzNzM2NDI1MjQyMworbG9nMXAwMjE5IGxvZzFwIDAuMDEzMDI2MjM1MzE1MDUzMDAyIC0+IDAuMDEyOTQyMTIzNTY0MDA4Nzg3Citsb2cxcDAyMjAgbG9nMXAgMC4wMTM0OTcxNjA3OTcyMzYxODQgLT4gMC4wMTM0MDY4ODU1MjE5MTUwMzgKK2xvZzFwMDIyMSBsb2cxcCAwLjAyNzYyNTU5OTA3ODEzNTI4NCAtPiAwLjAyNzI1MDg5NzQ2MzQ4MzA1NAorbG9nMXAwMjIyIGxvZzFwIDAuMTQxNzk2ODcyNDU1NDQ4NzAgLT4gMC4xMzI2MDMyMjU0MDkwODc4OQorCistLSBsYXJnZSB2YWx1ZXMKK2xvZzFwMDMwMCBsb2cxcCAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOCAtPiA3MDkuNzgyNzEyODkzMzgzOTcKK2xvZzFwMDMwMSBsb2cxcCAxLjAwMDAwMDAwMDAwMDAwMDFlKzMwMCAtPiA2OTAuNzc1NTI3ODk4MjEzNjgKK2xvZzFwMDMwMiBsb2cxcCAxLjAwMDAwMDAwMDAwMDAwMDFlKzcwIC0+IDE2MS4xODA5NTY1MDk1ODMyMQorbG9nMXAwMzAzIGxvZzFwIDEwMDAwMDAwMDAwLjAwMDAwMCAtPiAyMy4wMjU4NTA5MzAwNDA0NTUKKworLS0gb3RoZXIgdmFsdWVzIHRyYW5zZmVycmVkIGZyb20gdGVzdExvZzFwIGluIHRlc3RfbWF0aAorbG9nMXAwNDAwIGxvZzFwIC0wLjYzMjEyMDU1ODgyODU1NzY3IC0+IC0xLjAwMDAwMDAwMDAwMDAwMDAKK2xvZzFwMDQwMSBsb2cxcCAxLjcxODI4MTgyODQ1OTA0NTEgLT4gMS4wMDAwMDAwMDAwMDAwMDAwCitsb2cxcDA0MDIgbG9nMXAgMS4wMDAwMDAwMDAwMDAwMDAwIC0+IDAuNjkzMTQ3MTgwNTU5OTQ1MjkKK2xvZzFwMDQwMyBsb2cxcCAxLjIzNzk0MDAzOTI4NTM4MDNlKzI3IC0+IDYyLjM4MzI0NjI1MDM5NTA3NQorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBleHBtMTogZXhwKHgpIC0gMSwgd2l0aG91dCBwcmVjaXNpb24gbG9zcyBmb3Igc21hbGwgeCAtLQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gc3BlY2lhbCB2YWx1ZXMKK2V4cG0xMDAwMCBleHBtMSAwLjAgLT4gMC4wCitleHBtMTAwMDEgZXhwbTEgLTAuMCAtPiAtMC4wCitleHBtMTAwMDIgZXhwbTEgaW5mIC0+IGluZgorZXhwbTEwMDAzIGV4cG0xIC1pbmYgLT4gLTEuMAorZXhwbTEwMDA0IGV4cG0xIG5hbiAtPiBuYW4KKworLS0gZXhwbTEoeCkgfiB4IGZvciB0aW55IHgKK2V4cG0xMDAxMCBleHBtMSA1ZS0zMjQgLT4gNWUtMzI0CitleHBtMTAwMTEgZXhwbTEgMWUtMzIwIC0+IDFlLTMyMAorZXhwbTEwMDEyIGV4cG0xIDFlLTMwMCAtPiAxZS0zMDAKK2V4cG0xMDAxMyBleHBtMSAxZS0xNTAgLT4gMWUtMTUwCitleHBtMTAwMTQgZXhwbTEgMWUtMjAgLT4gMWUtMjAKKworZXhwbTEwMDIwIGV4cG0xIC01ZS0zMjQgLT4gLTVlLTMyNAorZXhwbTEwMDIxIGV4cG0xIC0xZS0zMjAgLT4gLTFlLTMyMAorZXhwbTEwMDIyIGV4cG0xIC0xZS0zMDAgLT4gLTFlLTMwMAorZXhwbTEwMDIzIGV4cG0xIC0xZS0xNTAgLT4gLTFlLTE1MAorZXhwbTEwMDI0IGV4cG0xIC0xZS0yMCAtPiAtMWUtMjAKKworLS0gbW9kZXJhdGUgc2l6ZWQgdmFsdWVzLCB3aGVyZSBkaXJlY3QgZXZhbHVhdGlvbiBydW5zIGludG8gdHJvdWJsZQorZXhwbTEwMTAwIGV4cG0xIDFlLTEwIC0+IDEuMDAwMDAwMDAwMDUwMDAwMGUtMTAKK2V4cG0xMDEwMSBleHBtMSAtOS45OTk5OTk5OTk5OTk5OTk1ZS0wOCAtPiAtOS45OTk5OTk1MDAwMDAwMTYzZS04CitleHBtMTAxMDIgZXhwbTEgMy4wMDAwMDAwMDAwMDAwMDAxZS0wNSAtPiAzLjAwMDA0NTAwMDQ1MDAwMzRlLTUKK2V4cG0xMDEwMyBleHBtMSAtMC4wMDcwMDAwMDAwMDAwMDAwMDAxIC0+IC0wLjAwNjk3NTU1NzA2Njc2NDg5NTEKK2V4cG0xMDEwNCBleHBtMSAtMC4wNzE0OTkyMDg3NDAwOTQ2MzMgLT4gLTAuMDY5MDAyOTg1NzQ0ODIwMjUwCitleHBtMTAxMDUgZXhwbTEgLTAuMDYzMjk2MDA0MTgwMTE2Nzk5IC0+IC0wLjA2MTMzNDQxNjM3MzYzMzAwOQorZXhwbTEwMTA2IGV4cG0xIDAuMDIzOTA5NTQwMzU1OTc3NTYgLT4gMC4wMjQxOTc2NjUxNDM4MTk5NDIKK2V4cG0xMDEwNyBleHBtMSAwLjA4NTYzNzM1MjY0OTA0NDkwMSAtPiAwLjA4OTQxMTE4NDU4MDM1Nzc2NworZXhwbTEwMTA4IGV4cG0xIDAuNTk2NjE3NDk0NzQxMTAwNiAtPiAwLjgxNTk2NTg4NTk2NTAxNDg1CitleHBtMTAxMDkgZXhwbTEgMC4zMDI0NzIwNjIxMjA3NTEzOSAtPiAwLjM1MzE5OTg3MDM1ODQ4Njc3CitleHBtMTAxMTAgZXhwbTEgMC43NDU3NDcyNzM3NTg4OTUxNiAtPiAxLjEwODAxNjExMTY3Mzc0NTkKK2V4cG0xMDExMSBleHBtMSAwLjk3NzY3NTEyOTI2NTU1NzExIC0+IDEuNjU4MjY4OTIwNzM3MjE4NQorZXhwbTEwMTEyIGV4cG0xIDAuODQ1MDE1NDU2Njc4NzcxMiAtPiAxLjMyODAxMzc5NzY1MzU4OTcKK2V4cG0xMDExMyBleHBtMSAtMC4xMzk3OTI2MDMyMzEyNTI2NCAtPiAtMC4xMzA0NjE0NDM4MTM5NjA2MAorZXhwbTEwMTE0IGV4cG0xIC0wLjUyODk5MzIyMDM5NjQzMjcxIC0+IC0wLjQxMDgwMjEzNjQzNjk1OTIzCitleHBtMTAxMTUgZXhwbTEgLTAuNzQwODMyNjE0Nzg5MDA2MzEgLT4gLTAuNTIzMjgzMTcxMjQ3OTcwOTcKK2V4cG0xMDExNiBleHBtMSAtMC45Mzg0Nzc2Njk4NDU0NjA1NSAtPiAtMC42MDg3NzcwNDcyNDA4NTk0NgorZXhwbTEwMTE3IGV4cG0xIDEwLjAgLT4gMjIwMjUuNDY1Nzk0ODA2NzE4CitleHBtMTAxMTggZXhwbTEgMjcuMCAtPiA1MzIwNDgyNDA2MDAuNzk4NjUKK2V4cG0xMDExOSBleHBtMSAxMjMgLT4gMi42MTk1MTczMTg3NDkwNjI2ZSs1MworZXhwbTEwMTIwIGV4cG0xIC0xMi4wIC0+IC0wLjk5OTk5Mzg1NTc4NzY0NjY2CitleHBtMTAxMjEgZXhwbTEgLTM1LjEwMDAwMDAwMDAwMDAwMSAtPiAtMC45OTk5OTk5OTk5OTk5OTk0NAorCistLSBleHRyZW1lIG5lZ2F0aXZlIHZhbHVlcworZXhwbTEwMjAxIGV4cG0xIC0zNy4wIC0+IC0wLjk5OTk5OTk5OTk5OTk5OTg5CitleHBtMTAyMDAgZXhwbTEgLTM4LjAgLT4gLTEuMAorZXhwbTEwMjEwIGV4cG0xIC03MTAuMCAtPiAtMS4wCistLSB0aGUgZm9ybXVsYSBleHBtMSh4KSA9IDIgKiBzaW5oKHgvMikgKiBleHAoeC8yKSBkb2Vzbid0IHdvcmsgc28KKy0tIHdlbGwgd2hlbiBleHAoeC8yKSBpcyBzdWJub3JtYWwgb3IgdW5kZXJmbG93cyB0byB6ZXJvOyBjaGVjayB3ZSdyZQorLS0gbm90IHVzaW5nIGl0IQorZXhwbTEwMjExIGV4cG0xIC0xNDIwLjAgLT4gLTEuMAorZXhwbTEwMjEyIGV4cG0xIC0xNDUwLjAgLT4gLTEuMAorZXhwbTEwMjEzIGV4cG0xIC0xNTAwLjAgLT4gLTEuMAorZXhwbTEwMjE0IGV4cG0xIC0xZTUwIC0+IC0xLjAKK2V4cG0xMDIxNSBleHBtMSAtMS43OWUzMDggLT4gLTEuMAorCistLSBleHRyZW1lIHBvc2l0aXZlIHZhbHVlcworZXhwbTEwMzAwIGV4cG0xIDMwMCAtPiAxLjk0MjQyNjM5NTI0MTI1NThlKzEzMAorZXhwbTEwMzAxIGV4cG0xIDcwMCAtPiAxLjAxNDIzMjA1NDczNTAwNDVlKzMwNAorLS0gdGhlIG5leHQgdGVzdCAoZXhwbTEwMzAyKSBpcyBkaXNhYmxlZCBiZWNhdXNlIGl0IGNhdXNlcyBmYWlsdXJlIG9uCistLSBPUyBYIDEwLjQvSW50ZWw6IGFwcGFyZW50bHkgYWxsIHZhbHVlcyBvdmVyIDcwOS43OCBwcm9kdWNlIGFuCistLSBvdmVyZmxvdyBvbiB0aGF0IHBsYXRmb3JtLiAgU2VlIGlzc3VlICM3NTc1LgorLS0gZXhwbTEwMzAyIGV4cG0xIDcwOS43ODI3MTI4OTMyODM5MyAtPiAxLjc5NzY5MzEzNDY4MjQyNDBlKzMwOAorZXhwbTEwMzAzIGV4cG0xIDcwOS43ODI3MTI4OTM0ODQwMiAtPiBpbmYgb3ZlcmZsb3cKK2V4cG0xMDMwNCBleHBtMSAxMDAwIC0+IGluZiBvdmVyZmxvdworZXhwbTEwMzA1IGV4cG0xIDFlNTAgLT4gaW5mIG92ZXJmbG93CitleHBtMTAzMDYgZXhwbTEgMS43OWUzMDggLT4gaW5mIG92ZXJmbG93CisKKy0tIHdlYWtlciB2ZXJzaW9uIG9mIGV4cG0xMDMwMgorZXhwbTEwMzA3IGV4cG0xIDcwOS41IC0+IDEuMzU0OTg2MzE5MzE0NjMyOGUrMzA4CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weSBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMzY5MzIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9tb2NrX3NvY2tldC5weQpAQCAtMCwwICsxLDE1NCBAQAorIiIiTW9jayBzb2NrZXQgbW9kdWxlIHVzZWQgYnkgdGhlIHNtdHBkIGFuZCBzbXRwbGliIHRlc3RzLgorIiIiCisKKyMgaW1wb3J0ZWQgZm9yIF9HTE9CQUxfREVGQVVMVF9USU1FT1VUCitpbXBvcnQgc29ja2V0IGFzIHNvY2tldF9tb2R1bGUKKworIyBNb2NrIHNvY2tldCBtb2R1bGUKK19kZWZhdWx0dGltZW91dCA9IE5vbmUKK19yZXBseV9kYXRhID0gTm9uZQorCisjIFRoaXMgaXMgdXNlZCB0byBxdWV1ZSB1cCBkYXRhIHRvIGJlIHJlYWQgdGhyb3VnaCBzb2NrZXQubWFrZWZpbGUsIHR5cGljYWxseQorIyAqYmVmb3JlKiB0aGUgc29ja2V0IG9iamVjdCBpcyBldmVuIGNyZWF0ZWQuIEl0IGlzIGludGVuZGVkIHRvIGhhbmRsZSBhIHNpbmdsZQorIyBsaW5lIHdoaWNoIHRoZSBzb2NrZXQgd2lsbCBmZWVkIG9uIHJlY3YoKSBvciBtYWtlZmlsZSgpLgorZGVmIHJlcGx5X3dpdGgobGluZSk6CisgICAgZ2xvYmFsIF9yZXBseV9kYXRhCisgICAgX3JlcGx5X2RhdGEgPSBsaW5lCisKKworY2xhc3MgTW9ja0ZpbGU6CisgICAgIiIiTW9jayBmaWxlIG9iamVjdCByZXR1cm5lZCBieSBNb2NrU29ja2V0Lm1ha2VmaWxlKCkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5wb3AoMCkgKyBiJ1xyXG4nCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgTW9ja1NvY2tldDoKKyAgICAiIiJNb2NrIHNvY2tldCBvYmplY3QgdXNlZCBieSBzbXRwZCBhbmQgc210cGxpYiB0ZXN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdsb2JhbCBfcmVwbHlfZGF0YQorICAgICAgICBzZWxmLm91dHB1dCA9IFtdCisgICAgICAgIHNlbGYubGluZXMgPSBbXQorICAgICAgICBpZiBfcmVwbHlfZGF0YToKKyAgICAgICAgICAgIHNlbGYubGluZXMuYXBwZW5kKF9yZXBseV9kYXRhKQorICAgICAgICAgICAgX3JlcGx5X2RhdGEgPSBOb25lCisgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi50aW1lb3V0ID0gTm9uZQorCisgICAgZGVmIHF1ZXVlX3JlY3Yoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYubGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICBkZWYgcmVjdihzZWxmLCBidWZzaXplLCBmbGFncz1Ob25lKToKKyAgICAgICAgZGF0YSA9IHNlbGYubGluZXMucG9wKDApICsgYidcclxuJworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIGRlZiBzZXR0aW1lb3V0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSBfZGVmYXVsdHRpbWVvdXQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKKworICAgIGRlZiBnZXR0aW1lb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi50aW1lb3V0CisKKyAgICBkZWYgc2V0c29ja29wdChzZWxmLCBsZXZlbCwgb3B0bmFtZSwgdmFsdWUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0c29ja29wdChzZWxmLCBsZXZlbCwgb3B0bmFtZSwgYnVmbGVuPU5vbmUpOgorICAgICAgICByZXR1cm4gMAorCisgICAgZGVmIGJpbmQoc2VsZiwgYWRkcmVzcyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhY2NlcHQoc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IE1vY2tTb2NrZXQoKQorICAgICAgICByZXR1cm4gc2VsZi5jb25uLCAnYycKKworICAgIGRlZiBnZXRzb2NrbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICgnMC4wLjAuMCcsIDApCisKKyAgICBkZWYgc2V0YmxvY2tpbmcoc2VsZiwgZmxhZyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBsaXN0ZW4oc2VsZiwgYmFja2xvZyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlPSdyJywgYnVmc2l6ZT0tMSk6CisgICAgICAgIGhhbmRsZSA9IE1vY2tGaWxlKHNlbGYubGluZXMpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBzZW5kYWxsKHNlbGYsIGJ1ZmZlciwgZmxhZ3M9Tm9uZSk6CisgICAgICAgIHNlbGYubGFzdCA9IGRhdGEKKyAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKGRhdGEpCisgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKworICAgIGRlZiBzZW5kKHNlbGYsIGRhdGEsIGZsYWdzPU5vbmUpOgorICAgICAgICBzZWxmLmxhc3QgPSBkYXRhCisgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChkYXRhKQorICAgICAgICByZXR1cm4gbGVuKGRhdGEpCisKKyAgICBkZWYgZ2V0cGVlcm5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAncGVlcicKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgcGFzcworCisKK2RlZiBzb2NrZXQoZmFtaWx5PU5vbmUsIHR5cGU9Tm9uZSwgcHJvdG89Tm9uZSk6CisgICAgcmV0dXJuIE1vY2tTb2NrZXQoKQorCisKK2RlZiBjcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzLCB0aW1lb3V0PXNvY2tldF9tb2R1bGUuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorICAgIHRyeToKKyAgICAgICAgaW50X3BvcnQgPSBpbnQoYWRkcmVzc1sxXSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmFpc2UgZXJyb3IKKyAgICBtcyA9IE1vY2tTb2NrZXQoKQorICAgIGlmIHRpbWVvdXQgaXMgc29ja2V0X21vZHVsZS5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVDoKKyAgICAgICAgdGltZW91dCA9IGdldGRlZmF1bHR0aW1lb3V0KCkKKyAgICBtcy5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgcmV0dXJuIG1zCisKKworZGVmIHNldGRlZmF1bHR0aW1lb3V0KHRpbWVvdXQpOgorICAgIGdsb2JhbCBfZGVmYXVsdHRpbWVvdXQKKyAgICBfZGVmYXVsdHRpbWVvdXQgPSB0aW1lb3V0CisKKworZGVmIGdldGRlZmF1bHR0aW1lb3V0KCk6CisgICAgcmV0dXJuIF9kZWZhdWx0dGltZW91dAorCisKK2RlZiBnZXRmcWRuKCk6CisgICAgcmV0dXJuICIiCisKKworZGVmIGdldGhvc3RuYW1lKCk6CisgICAgcGFzcworCisKK2RlZiBnZXRob3N0YnluYW1lKG5hbWUpOgorICAgIHJldHVybiAiIgorCisKK2NsYXNzIGdhaWVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIGVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKKyMgQ29uc3RhbnRzCitBRl9JTkVUID0gTm9uZQorU09DS19TVFJFQU0gPSBOb25lCitTT0xfU09DS0VUID0gTm9uZQorU09fUkVVU0VBRERSID0gTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CmluZGV4IDA2Nzg5Y2QuLmE4NDM0ODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTMwLDYgKzMwLDIxIEBACiAgICAgICAgICAgICBuICs9IDEKICAgICByZXR1cm4gbgogCisKK2NsYXNzIFVuc2Vla2FibGVJTyhpby5CeXRlc0lPKToKKyAgICBkZWYgcGVlayhzZWxmLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2VlayhzZWxmLCAqYXJncyk6CisgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisKKyAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworCiAjIFdlIGNhbid0IHZlcnkgd2VsbCB0ZXN0IHRoZSBleHRlbnNpb24gcmVnaXN0cnkgd2l0aG91dCBwdXR0aW5nIGtub3duIHN0dWZmCiAjIGluIGl0LCBidXQgd2UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIHJlc3RvcmUgaXRzIG9yaWdpbmFsIHN0YXRlLiAgQ29kZQogIyBzaG91bGQgZG8gdGhpczoKQEAgLTg0MSw4ICs4NTYsOCBAQAogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMSBmb3IgY29tcGFyaXNvbi4KICAgICAgICAgICAgIHMxID0gc2VsZi5kdW1wcyh4LCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9fbmFtZV9fLmVuY29kZSgidXRmLTgiKSBpbiBzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIk15TGlzdCIgaW4gczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKF9fbmFtZV9fLmVuY29kZSgidXRmLTgiKSwgczEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGIiTXlMaXN0IiwgczEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUob3Bjb2RlLCBzMSksIEZhbHNlKQogCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzMSkKQEAgLTg1MSw4ICs4NjYsOCBAQAogCiAgICAgICAgICAgICAjIER1bXAgdXNpbmcgcHJvdG9jb2wgMiBmb3IgdGVzdC4KICAgICAgICAgICAgIHMyID0gc2VsZi5kdW1wcyh4LCAyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9fbmFtZV9fLmVuY29kZSgidXRmLTgiKSBub3QgaW4gczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJNeUxpc3QiIG5vdCBpbiBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oX19uYW1lX18uZW5jb2RlKCJ1dGYtOCIpLCBzMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJNeUxpc3QiLCBzMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMyKSwgVHJ1ZSwgcmVwcihzMikpCiAKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMyKQpAQCAtOTAzLDcgKzkxOCw3IEBACiAgICAgICAgIHggPSBkaWN0LmZyb21rZXlzKHJhbmdlKG4pKQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBieXRlc190eXBlcykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQpAQCAtMTA2OCw2ICsxMDgzLDIwIEBACiAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoc2V0KFszXSksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVtcGVkLCBEQVRBNikKIAorICAgIGRlZiB0ZXN0X2xhcmdlX3BpY2tsZXMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgY29ycmVjdG5lc3Mgb2YgaW50ZXJuYWwgYnVmZmVyaW5nIHJvdXRpbmVzIHdoZW4gaGFuZGxpbmcKKyAgICAgICAgIyBsYXJnZSBkYXRhLgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgZGF0YSA9ICgxLCBtaW4sIGIneHknICogKDMwICogMTAyNCksIGxlbikKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvYWRlZCksIGxlbihkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZW1wdHlfYnl0ZXN0cmluZyhzZWxmKToKKyAgICAgICAgIyBpc3N1ZSAxMTI4NgorICAgICAgICBlbXB0eSA9IHNlbGYubG9hZHMoYidceDgwXHgwM1VceDAwcVx4MDAuJywgZW5jb2Rpbmc9J2tvaTgtcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW1wdHksICcnKQogCiAjIFRlc3QgY2xhc3NlcyBmb3IgcmVkdWNlX2V4CiAKQEAgLTExMTIsOSArMTE0MSw2IEBACiBjbGFzcyBNeUludChpbnQpOgogICAgIHNhbXBsZSA9IDEKIAotY2xhc3MgTXlMb25nKGludCk6Ci0gICAgc2FtcGxlID0gMQotCiBjbGFzcyBNeUZsb2F0KGZsb2F0KToKICAgICBzYW1wbGUgPSAxLjAKIApAQCAtMTEzNiw3ICsxMTYyLDcgQEAKIGNsYXNzIE15RGljdChkaWN0KToKICAgICBzYW1wbGUgPSB7ImEiOiAxLCAiYiI6IDJ9CiAKLW15Y2xhc3NlcyA9IFtNeUludCwgTXlMb25nLCBNeUZsb2F0LAorbXljbGFzc2VzID0gW015SW50LCBNeUZsb2F0LAogICAgICAgICAgICAgIE15Q29tcGxleCwKICAgICAgICAgICAgICBNeVN0ciwgTXlVbmljb2RlLAogICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0XQpAQCAtMTM2Nyw2ICsxMzkzLDMxIEBACiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGEyKQogCisgICAgZGVmIF9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhzZWxmLCBpb2NsYXNzKToKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGRhdGExID0gWyh4LCBzdHIoeCkpIGZvciB4IGluIHJhbmdlKDIwMDApXSArIFtiImFiY2RlIiwgbGVuXQorICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQorICAgICAgICAgICAgcGlja2xlciA9IHNlbGYucGlja2xlcl9jbGFzcyhmLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgIHBpY2tsZXIuZHVtcChkYXRhMSkKKyAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKKworICAgICAgICAgICAgTiA9IDUKKyAgICAgICAgICAgIGYgPSBpb2NsYXNzKHBpY2tsZWQgKiBOKQorICAgICAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgorICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQorICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcG9zICsgbGVuKHBpY2tsZWQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfdW5waWNrbGluZ3Nfc2Vla2FibGUoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX211bHRpcGxlX3VucGlja2xpbmdzKGlvLkJ5dGVzSU8pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV91bnBpY2tsaW5nc191bnNlZWthYmxlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhVbnNlZWthYmxlSU8pCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAjIFByaW50IHNvbWUgc3R1ZmYgdGhhdCBjYW4gYmUgdXNlZCB0byByZXdyaXRlIERBVEF7MCwxLDJ9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9wc3RhdHMucGNrIGIvTGliL3Rlc3QvcHN0YXRzLnBjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDhjY2I3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvcHN0YXRzLnBjawpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weXN0b25lLnB5IGIvTGliL3Rlc3QvcHlzdG9uZS5weQppbmRleCA2MTQ1NTFmLi5kN2YxZWM5IDEwMDc1NQotLS0gYS9MaWIvdGVzdC9weXN0b25lLnB5CisrKyBiL0xpYi90ZXN0L3B5c3RvbmUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKICJQWVNUT05FIiBCZW5jaG1hcmsgUHJvZ3JhbQpAQCAtNzIsNyArNzIsNyBAQAogQ2hhcjFHbG9iID0gJ1wwJwogQ2hhcjJHbG9iID0gJ1wwJwogQXJyYXkxR2xvYiA9IFswXSo1MQotQXJyYXkyR2xvYiA9IGxpc3QobWFwKGxhbWJkYSB4OiB4WzpdLCBbQXJyYXkxR2xvYl0qNTEpKQorQXJyYXkyR2xvYiA9IFt4WzpdIGZvciB4IGluIFtBcnJheTFHbG9iXSo1MV0KIFB0ckdsYiA9IE5vbmUKIFB0ckdsYk5leHQgPSBOb25lCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3JlX3Rlc3RzLnB5IGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKaW5kZXggZDMxNGUyMC4uNWQxNmUzZCAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvcmVfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvcmVfdGVzdHMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMgLSotIG1vZGU6IHB5dGhvbiAtKi0KIAogIyBSZSB0ZXN0IHN1aXRlIGFuZCBiZW5jaG1hcmsgc3VpdGUgdjEuNQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVncnRlc3QucHkgYi9MaWIvdGVzdC9yZWdydGVzdC5weQppbmRleCA5OGQ2OGJkLi5lMmUzNzY1IDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZWdydGVzdC5weQorKysgYi9MaWIvdGVzdC9yZWdydGVzdC5weQpAQCAtMSwxNCArMSwyMSBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotIiIiUmVncmVzc2lvbiB0ZXN0LgorIiIiCitVc2FnZToKIAotVGhpcyB3aWxsIGZpbmQgYWxsIG1vZHVsZXMgd2hvc2UgbmFtZSBpcyAidGVzdF8qIiBpbiB0aGUgdGVzdAotZGlyZWN0b3J5LCBhbmQgcnVuIHRoZW0uICBWYXJpb3VzIGNvbW1hbmQgbGluZSBvcHRpb25zIHByb3ZpZGUKLWFkZGl0aW9uYWwgZmFjaWxpdGllcy4KK3B5dGhvbiAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSBbdGVzdF9uYW1lMiAuLi5dXQorcHl0aG9uIHBhdGgvdG8vTGliL3Rlc3QvcmVncnRlc3QucHkgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiAKLUlmIG5vbi1vcHRpb24gYXJndW1lbnRzIGFyZSBwcmVzZW50LCB0aGV5IGFyZSBuYW1lcyBmb3IgdGVzdHMgdG8gcnVuLAotdW5sZXNzIC14IGlzIGdpdmVuLCBpbiB3aGljaCBjYXNlIHRoZXkgYXJlIG5hbWVzIGZvciB0ZXN0cyBub3QgdG8gcnVuLgotSWYgbm8gdGVzdCBuYW1lcyBhcmUgZ2l2ZW4sIGFsbCB0ZXN0cyBhcmUgcnVuLgorCitJZiBubyBhcmd1bWVudHMgb3Igb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGZpbmRzIGFsbCBmaWxlcyBtYXRjaGluZwordGhlIHBhdHRlcm4gInRlc3RfKiIgaW4gdGhlIExpYi90ZXN0IHN1YmRpcmVjdG9yeSBhbmQgcnVucwordGhlbSBpbiBhbHBoYWJldGljYWwgb3JkZXIgKGJ1dCBzZWUgLU0gYW5kIC11LCBiZWxvdywgZm9yIGV4Y2VwdGlvbnMpLgorCitGb3IgbW9yZSByaWdvcm91cyB0ZXN0aW5nLCBpdCBpcyB1c2VmdWwgdG8gdXNlIHRoZSBmb2xsb3dpbmcKK2NvbW1hbmQgbGluZToKKworcHl0aG9uIC1FIC1XZCAtbSB0ZXN0IFtvcHRpb25zXSBbdGVzdF9uYW1lMSAuLi5dCisKIAogT3B0aW9uczoKIApAQCAtMTgsNiArMjUsNyBAQAogCiAtdi8tLXZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKIC13Ly0tdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQorLVcvLS12ZXJib3NlMyAgIC0tIHJlLXJ1biBmYWlsZWQgdGVzdHMgaW4gdmVyYm9zZSBtb2RlIGltbWVkaWF0ZWx5CiAtZC8tLWRlYnVnICAgICAgLS0gcHJpbnQgdHJhY2ViYWNrIGZvciBmYWlsZWQgdGVzdHMKIC1xLy0tcXVpZXQgICAgICAtLSBubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwKIC1TLy0tc2xvdyAgICAgICAtLSBwcmludCB0aGUgc2xvd2VzdCAxMCB0ZXN0cwpAQCAtNDEsNiArNDksOCBAQAogLUwvLS1ydW5sZWFrcyAgIC0tIHJ1biB0aGUgbGVha3MoMSkgY29tbWFuZCBqdXN0IGJlZm9yZSBleGl0CiAtUi8tLWh1bnRybGVha3MgUlVOQ09VTlRTCiAgICAgICAgICAgICAgICAgLS0gc2VhcmNoIGZvciByZWZlcmVuY2UgbGVha3MgKG5lZWRzIGRlYnVnIGJ1aWxkLCB2LiBzbG93KQorLWovLS1tdWx0aXByb2Nlc3MgUFJPQ0VTU0VTCisgICAgICAgICAgICAgICAgLS0gcnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZQogLVQvLS1jb3ZlcmFnZSAgIC0tIHR1cm4gb24gY29kZSBjb3ZlcmFnZSB0cmFjaW5nIHVzaW5nIHRoZSB0cmFjZSBtb2R1bGUKIC1ELy0tY292ZXJkaXIgRElSRUNUT1JZCiAgICAgICAgICAgICAgICAgLS0gRGlyZWN0b3J5IHdoZXJlIGNvdmVyYWdlIGZpbGVzIGFyZSBwdXQKQEAgLTQ4LDYgKzU4LDcgQEAKIC10Ly0tdGhyZXNob2xkIFRIUkVTSE9MRAogICAgICAgICAgICAgICAgIC0tIGNhbGwgZ2Muc2V0X3RocmVzaG9sZChUSFJFU0hPTEQpCiAtbi8tLW5vd2luZG93cyAgLS0gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZSBib3hlcyBvbiBXaW5kb3dzCistRi8tLWZvcmV2ZXIgICAgLS0gcnVuIHRoZSBzcGVjaWZpZWQgdGVzdHMgaW4gYSBsb29wLCB1bnRpbCBhbiBlcnJvciBoYXBwZW5zCiAKIAogQWRkaXRpb25hbCBPcHRpb24gRGV0YWlsczoKQEAgLTU2LDE5ICs2NywxNiBAQAogaW50IHNlZWQgdmFsdWUgZm9yIHRoZSByYW5kb21pemVyOyB0aGlzIGlzIHVzZWZ1bCBmb3IgcmVwcm9kdWNpbmcgdHJvdWJsZXNvbWUKIHRlc3Qgb3JkZXJzLgogCi0tVCB0dXJucyBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgd2l0aCB0aGUgdHJhY2UgbW9kdWxlLgotCi0tRCBzcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0LgotCi0tTiBQdXQgY292ZXJhZ2UgZmlsZXMgYWxvbmdzaWRlIG1vZHVsZXMuCi0KLS1zIG1lYW5zIHRvIHJ1biBvbmx5IGEgc2luZ2xlIHRlc3QgYW5kIGV4aXQuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCi1kb2luZyBtZW1vcnkgYW5hbHlzaXMgb24gdGhlIFB5dGhvbiBpbnRlcnByZXRlciAod2hpY2ggdGVuZCB0byBjb25zdW1lCi10b28gbWFueSByZXNvdXJjZXMgdG8gcnVuIHRoZSBmdWxsIHJlZ3Jlc3Npb24gdGVzdCBub24tc3RvcCkuICBUaGUKLWZpbGUgL3RtcC9weW5leHR0ZXN0IGlzIHJlYWQgdG8gZmluZCB0aGUgbmV4dCB0ZXN0IHRvIHJ1bi4gIElmIHRoaXMKLWZpbGUgaXMgbWlzc2luZywgdGhlIGZpcnN0IHRlc3RfKi5weSBmaWxlIGluIHRlc3RkaXIgb3Igb24gdGhlIGNvbW1hbmQKLWxpbmUgaXMgdXNlZC4gIChhY3R1YWxseSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgaXMgdXNlZCBpbnN0ZWFkIG9mCi0vdG1wKS4KKy1zIE9uIHRoZSBmaXJzdCBpbnZvY2F0aW9uIG9mIHJlZ3J0ZXN0IHVzaW5nIC1zLCB0aGUgZmlyc3QgdGVzdCBmaWxlIGZvdW5kCitvciB0aGUgZmlyc3QgdGVzdCBmaWxlIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcnVuLCBhbmQgdGhlIG5hbWUgb2YKK3RoZSBuZXh0IHRlc3QgaXMgcmVjb3JkZWQgaW4gYSBmaWxlIG5hbWVkIHB5bmV4dHRlc3QuICBJZiBydW4gZnJvbSB0aGUKK1B5dGhvbiBidWlsZCBkaXJlY3RvcnksIHB5bmV4dHRlc3QgaXMgbG9jYXRlZCBpbiB0aGUgJ2J1aWxkJyBzdWJkaXJlY3RvcnksCitvdGhlcndpc2UgaXQgaXMgbG9jYXRlZCBpbiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkuICBPbiBzdWJzZXF1ZW50IHJ1bnMsCit0aGUgdGVzdCBpbiBweW5leHR0ZXN0IGlzIHJ1biwgYW5kIHRoZSBuZXh0IHRlc3QgaXMgd3JpdHRlbiB0byBweW5leHR0ZXN0LgorV2hlbiB0aGUgbGFzdCB0ZXN0IGhhcyBiZWVuIHJ1biwgcHluZXh0dGVzdCBpcyBkZWxldGVkLiAgSW4gdGhpcyB3YXkgaXQKK2lzIHBvc3NpYmxlIHRvIHNpbmdsZSBzdGVwIHRocm91Z2ggdGhlIHRlc3QgZmlsZXMuICBUaGlzIGlzIHVzZWZ1bCB3aGVuCitkb2luZyBtZW1vcnkgYW5hbHlzaXMgb24gdGhlIFB5dGhvbiBpbnRlcnByZXRlciwgd2hpY2ggcHJvY2VzcyB0ZW5kcyB0bworY29uc3VtZSB0b28gbWFueSByZXNvdXJjZXMgdG8gcnVuIHRoZSBmdWxsIHJlZ3Jlc3Npb24gdGVzdCBub24tc3RvcC4KIAogLVMgaXMgdXNlZCB0byBjb250aW51ZSBydW5uaW5nIHRlc3RzIGFmdGVyIGFuIGFib3J0ZWQgcnVuLiAgSXQgd2lsbAogbWFpbnRhaW4gdGhlIG9yZGVyIGEgc3RhbmRhcmQgcnVuIChpZSwgdGhpcyBhc3N1bWVzIC1yIGlzIG5vdCB1c2VkKS4KQEAgLTE0NSwzNiArMTUzLDQyIEBACiBvcHRpb24gJy11YWxsLC1ndWknLgogIiIiCiAKK2ltcG9ydCBidWlsdGlucwogaW1wb3J0IGdldG9wdAoraW1wb3J0IGpzb24KIGltcG9ydCBvcwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHJlCiBpbXBvcnQgaW8KIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBlcnJubwogaW1wb3J0IHRyYWNlYmFjawogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gaW5zcGVjdCBpbXBvcnQgaXNhYnN0cmFjdAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBsb2dnaW5nCiAKLSMgSSBzZWUgbm8gb3RoZXIgd2F5IHRvIHN1cHByZXNzIHRoZXNlIHdhcm5pbmdzOwotIyBwdXR0aW5nIHRoZW0gaW4gdGVzdF9ncmFtbWFyLnB5IGhhcyBubyBlZmZlY3Q6Ci13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImhleC9vY3QgY29uc3RhbnRzIiwgRnV0dXJlV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICIuKnRlc3QudGVzdF9ncmFtbWFyJCIpCi1pZiBzeXMubWF4c2l6ZSA+IDB4N2ZmZmZmZmY6Ci0gICAgIyBBbHNvIHN1cHByZXNzIHRoZW0gaW4gPHN0cmluZz4sIGJlY2F1c2UgZm9yIDY0LWJpdCBwbGF0Zm9ybXMsCi0gICAgIyB0aGF0J3Mgd2hlcmUgdGVzdF9ncmFtbWFyLnB5IGhpZGVzIHRoZW0uCi0gICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJoZXgvb2N0IGNvbnN0YW50cyIsIEZ1dHVyZVdhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdHJpbmc+IikKIAotIyBJZ25vcmUgSW1wb3J0V2FybmluZ3MgdGhhdCBvbmx5IG9jY3VyIGluIHRoZSBzb3VyY2UgdHJlZSwKLSMgKGJlY2F1c2Ugb2YgbW9kdWxlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgc291cmNlLWRpcmVjdG9yaWVzIGluIE1vZHVsZXMvKQotZm9yIG1vZCBpbiAoImN0eXBlcyIsICJnemlwIiwgInppcGZpbGUiLCAidGFyZmlsZSIsICJlbmNvZGluZ3MuemxpYl9jb2RlYyIsCi0gICAgICAgICAgICAidGVzdC50ZXN0X3ppcGltcG9ydCIsICJ0ZXN0LnRlc3RfemxpYiIsICJ0ZXN0LnRlc3RfemlwZmlsZSIsCi0gICAgICAgICAgICAidGVzdC50ZXN0X2NvZGVjcyIsICJ0ZXN0LnN0cmluZ190ZXN0cyIpOgotICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKG1vZHVsZT0iLiolcyQiICUgKG1vZCwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0iaWdub3JlIiwgY2F0ZWdvcnk9SW1wb3J0V2FybmluZykKKyMgU29tZSB0aW1lcyBfX3BhdGhfXyBhbmQgX19maWxlX18gYXJlIG5vdCBhYnNvbHV0ZSAoZS5nLiB3aGlsZSBydW5uaW5nIGZyb20KKyMgTGliLykgYW5kLCBpZiB3ZSBjaGFuZ2UgdGhlIENXRCB0byBydW4gdGhlIHRlc3RzIGluIGEgdGVtcG9yYXJ5IGRpciwgc29tZQorIyBpbXBvcnRzIG1pZ2h0IGZhaWwuICBUaGlzIGFmZmVjdHMgb25seSB0aGUgbW9kdWxlcyBpbXBvcnRlZCBiZWZvcmUgb3MuY2hkaXIoKS4KKyMgVGhlc2UgbW9kdWxlcyBhcmUgc2VhcmNoZWQgZmlyc3QgaW4gc3lzLnBhdGhbMF0gKHNvICcnIC0tIHRoZSBDV0QpIGFuZCBpZgorIyB0aGV5IGFyZSBmb3VuZCBpbiB0aGUgQ1dEIHRoZWlyIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyB3aWxsIGJlIHJlbGF0aXZlICh0aGlzCisjIGhhcHBlbnMgYmVmb3JlIHRoZSBjaGRpcikuICBBbGwgdGhlIG1vZHVsZXMgaW1wb3J0ZWQgYWZ0ZXIgdGhlIGNoZGlyLCBhcmUKKyMgbm90IGZvdW5kIGluIHRoZSBDV0QsIGFuZCBzaW5jZSB0aGUgb3RoZXIgcGF0aHMgaW4gc3lzLnBhdGhbMTpdIGFyZSBhYnNvbHV0ZQorIyAoc2l0ZS5weSBhYnNvbHV0aXplIHRoZW0pLCB0aGUgX19maWxlX18gYW5kIF9fcGF0aF9fIHdpbGwgYmUgYWJzb2x1dGUgdG9vLgorIyBUaGVyZWZvcmUgaXQgaXMgbmVjZXNzYXJ5IHRvIGFic29sdXRpemUgbWFudWFsbHkgdGhlIF9fZmlsZV9fIGFuZCBfX3BhdGhfXyBvZgorIyB0aGUgcGFja2FnZXMgdG8gcHJldmVudCBsYXRlciBpbXBvcnRzIHRvIGZhaWwgd2hlbiB0aGUgQ1dEIGlzIGRpZmZlcmVudC4KK2ZvciBtb2R1bGUgaW4gc3lzLm1vZHVsZXMudmFsdWVzKCk6CisgICAgaWYgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbb3MucGF0aC5hYnNwYXRoKHBhdGgpIGZvciBwYXRoIGluIG1vZHVsZS5fX3BhdGhfX10KKyAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fZmlsZV9fJyk6CisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IG9zLnBhdGguYWJzcGF0aChtb2R1bGUuX19maWxlX18pCisKIAogIyBNYWNPU1ggKGEuay5hLiBEYXJ3aW4pIGhhcyBhIGRlZmF1bHQgc3RhY2sgc2l6ZSB0aGF0IGlzIHRvbyBzbWFsbAogIyBmb3IgZGVlcGx5IHJlY3Vyc2l2ZSByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2Ugc2VlIHRoaXMgYXMgY3Jhc2hlcyBpbgpAQCAtMTkyLDExICsyMDYsMjAgQEAKICAgICAgICAgbmV3c29mdCA9IG1pbihoYXJkLCBtYXgoc29mdCwgMTAyNCoyMDQ4KSkKICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9TVEFDSywgKG5ld3NvZnQsIGhhcmQpKQogCisjIFRlc3QgcmVzdWx0IGNvbnN0YW50cy4KK1BBU1NFRCA9IDEKK0ZBSUxFRCA9IDAKK0VOVl9DSEFOR0VEID0gLTEKK1NLSVBQRUQgPSAtMgorUkVTT1VSQ0VfREVOSUVEID0gLTMKK0lOVEVSUlVQVEVEID0gLTQKKwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIFJFU09VUkNFX05BTUVTID0gKCdhdWRpbycsICdjdXJzZXMnLCAnbGFyZ2VmaWxlJywgJ25ldHdvcmsnLAogICAgICAgICAgICAgICAgICAgJ2RlY2ltYWwnLCAnY3B1JywgJ3N1YnByb2Nlc3MnLCAndXJsZmV0Y2gnLCAnZ3VpJykKIAorVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aCh0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkpCiAKIGRlZiB1c2FnZShtc2cpOgogICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQpAQCAtMjA0LDExICsyMjcsMTIgQEAKICAgICBzeXMuZXhpdCgyKQogCiAKLWRlZiBtYWluKHRlc3RzPU5vbmUsIHRlc3RkaXI9Tm9uZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSwgZ2VuZXJhdGU9RmFsc2UsCitkZWYgbWFpbih0ZXN0cz1Ob25lLCB0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCiAgICAgICAgICBleGNsdWRlPUZhbHNlLCBzaW5nbGU9RmFsc2UsIHJhbmRvbWl6ZT1GYWxzZSwgZnJvbWZpbGU9Tm9uZSwKICAgICAgICAgIGZpbmRsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLCB0cmFjZT1GYWxzZSwgY292ZXJkaXI9J2NvdmVyYWdlJywKICAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSwKLSAgICAgICAgIHJhbmRvbV9zZWVkPU5vbmUsIGhlYWRlcj1GYWxzZSk6CisgICAgICAgICByYW5kb21fc2VlZD1Ob25lLCB1c2VfbXA9Tm9uZSwgdmVyYm9zZTM9RmFsc2UsIGZvcmV2ZXI9RmFsc2UsCisgICAgICAgICBoZWFkZXI9RmFsc2UpOgogICAgICIiIkV4ZWN1dGUgYSB0ZXN0IHN1aXRlLgogCiAgICAgVGhpcyBhbHNvIHBhcnNlcyBjb21tYW5kLWxpbmUgb3B0aW9ucyBhbmQgbW9kaWZpZXMgaXRzIGJlaGF2aW9yCkBAIC0yMjUsNyArMjQ5LDcgQEAKICAgICBjb21tYW5kLWxpbmUgd2lsbCBiZSB1c2VkLiAgSWYgdGhhdCdzIGVtcHR5LCB0b28sIHRoZW4gYWxsICoucHkKICAgICBmaWxlcyBiZWdpbm5pbmcgd2l0aCB0ZXN0XyB3aWxsIGJlIHVzZWQuCiAKLSAgICBUaGUgb3RoZXIgZGVmYXVsdCBhcmd1bWVudHMgKHZlcmJvc2UsIHF1aWV0LCBnZW5lcmF0ZSwgZXhjbHVkZSwKKyAgICBUaGUgb3RoZXIgZGVmYXVsdCBhcmd1bWVudHMgKHZlcmJvc2UsIHF1aWV0LCBleGNsdWRlLAogICAgIHNpbmdsZSwgcmFuZG9taXplLCBmaW5kbGVha3MsIHVzZV9yZXNvdXJjZXMsIHRyYWNlLCBjb3ZlcmRpciwKICAgICBwcmludF9zbG93LCBhbmQgcmFuZG9tX3NlZWQpIGFsbG93IHByb2dyYW1tZXJzIGNhbGxpbmcgbWFpbigpCiAgICAgZGlyZWN0bHkgdG8gc2V0IHRoZSB2YWx1ZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBzZXQgYnkgZmxhZ3MKQEAgLTIzNiwxNCArMjYwLDEzIEBACiAKICAgICBzdXBwb3J0LnJlY29yZF9vcmlnaW5hbF9zdGRvdXQoc3lzLnN0ZG91dCkKICAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2h2Z3F4c1NyZjpsdTp0OlREOk5MUjp3TTpuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydoZWxwJywgJ3ZlcmJvc2UnLCAncXVpZXQnLCAnZXhjbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2luZ2xlJywgJ3Nsb3cnLCAncmFuZG9tJywgJ2Zyb21maWxlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaW5kbGVha3MnLCAndXNlPScsICd0aHJlc2hvbGQ9JywgJ3RyYWNlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcmRpcj0nLCAnbm9jb3ZlcmRpcicsICdydW5sZWFrcycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVudHJsZWFrcz0nLCAndmVyYm9zZTInLCAnbWVtbGltaXQ9JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWJ1ZycsICdzdGFydD0nLCAnbm93aW5kb3dzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyYW5kc2VlZD0nLCAnaGVhZGVyJ10pCisgICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ2h2cXhzU3JmOmx1OnQ6VEQ6TkxSOkZ3V006bmo6JywKKyAgICAgICAgICAgIFsnaGVscCcsICd2ZXJib3NlJywgJ3ZlcmJvc2UyJywgJ3ZlcmJvc2UzJywgJ3F1aWV0JywKKyAgICAgICAgICAgICAnZXhjbHVkZScsICdzaW5nbGUnLCAnc2xvdycsICdyYW5kb20nLCAnZnJvbWZpbGUnLCAnZmluZGxlYWtzJywKKyAgICAgICAgICAgICAndXNlPScsICd0aHJlc2hvbGQ9JywgJ3RyYWNlJywgJ2NvdmVyZGlyPScsICdub2NvdmVyZGlyJywKKyAgICAgICAgICAgICAncnVubGVha3MnLCAnaHVudHJsZWFrcz0nLCAnbWVtbGltaXQ9JywgJ3JhbmRzZWVkPScsCisgICAgICAgICAgICAgJ211bHRpcHJvY2Vzcz0nLCAnY292ZXJhZ2UnLCAnc2xhdmVhcmdzPScsICdmb3JldmVyJywgJ2RlYnVnJywKKyAgICAgICAgICAgICAnc3RhcnQ9JywgJ25vd2luZG93cycsICdoZWFkZXInXSkKICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKICAgICAgICAgdXNhZ2UobXNnKQogCkBAIC0yNjQsNiArMjg3LDggQEAKICAgICAgICAgICAgIHZlcmJvc2UyID0gVHJ1ZQogICAgICAgICBlbGlmIG8gaW4gKCctZCcsICctLWRlYnVnJyk6CiAgICAgICAgICAgICBkZWJ1ZyA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLVcnLCAnLS12ZXJib3NlMycpOgorICAgICAgICAgICAgdmVyYm9zZTMgPSBUcnVlCiAgICAgICAgIGVsaWYgbyBpbiAoJy1xJywgJy0tcXVpZXQnKToKICAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZTsKICAgICAgICAgICAgIHZlcmJvc2UgPSAwCkBAIC0zNDYsMzAgKzM3MSwzOSBAQAogICAgICAgICAgICAgICAgIGZvciBtIGluIFttc3ZjcnQuQ1JUX1dBUk4sIG1zdmNydC5DUlRfRVJST1IsIG1zdmNydC5DUlRfQVNTRVJUXToKICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUobSwgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCiAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCisgICAgICAgIGVsaWYgbyBpbiAoJy1GJywgJy0tZm9yZXZlcicpOgorICAgICAgICAgICAgZm9yZXZlciA9IFRydWUKKyAgICAgICAgZWxpZiBvIGluICgnLWonLCAnLS1tdWx0aXByb2Nlc3MnKToKKyAgICAgICAgICAgIHVzZV9tcCA9IGludChhKQogICAgICAgICBlbGlmIG8gPT0gJy0taGVhZGVyJzoKICAgICAgICAgICAgIGhlYWRlciA9IFRydWUKKyAgICAgICAgZWxpZiBvID09ICctLXNsYXZlYXJncyc6CisgICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKGEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IElOVEVSUlVQVEVELCBlLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICBwcmludCgpICAgIyBGb3JjZSBhIG5ld2xpbmUgKGp1c3QgaW4gY2FzZSkKKyAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkKKyAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgoIk5vIGhhbmRsZXIgZm9yIG9wdGlvbiB7fS4gIFBsZWFzZSByZXBvcnQgdGhpcyBhcyBhIGJ1ZyAiCi0gICAgICAgICAgICAgICAgICAiYXQgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4iKS5mb3JtYXQobyksIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAiYXQgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy4iKS5mb3JtYXQobyksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgaWYgZ2VuZXJhdGUgYW5kIHZlcmJvc2U6Ci0gICAgICAgIHVzYWdlKCItZyBhbmQgLXYgZG9uJ3QgZ28gdG9nZXRoZXIhIikKICAgICBpZiBzaW5nbGUgYW5kIGZyb21maWxlOgogICAgICAgICB1c2FnZSgiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgdXNlX21wIGFuZCB0cmFjZToKKyAgICAgICAgdXNhZ2UoIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIHVzZV9tcCBhbmQgZmluZGxlYWtzOgorICAgICAgICB1c2FnZSgiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCiAKICAgICBnb29kID0gW10KICAgICBiYWQgPSBbXQogICAgIHNraXBwZWQgPSBbXQogICAgIHJlc291cmNlX2RlbmllZHMgPSBbXQotCi0gICAgIyBGb3IgYSBwYXJ0aWFsIHJ1biwgd2UgZG8gbm90IG5lZWQgdG8gY2x1dHRlciB0aGUgb3V0cHV0LgotICAgIGlmIHZlcmJvc2Ugb3IgaGVhZGVyIG9yIG5vdCAocXVpZXQgb3Igc2luZ2xlIG9yIHRlc3RzIG9yIGFyZ3MpOgotICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCi0gICAgICAgIHByaW50KCI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCAqc3lzLnZlcnNpb24uc3BsaXQoKSkKLSAgICAgICAgcHJpbnQoIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKLSAgICAgICAgcHJpbnQoIj09ICAiLCBvcy5nZXRjd2QoKSkKLSAgICAgICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MpCisgICAgZW52aXJvbm1lbnRfY2hhbmdlZCA9IFtdCisgICAgaW50ZXJydXB0ZWQgPSBGYWxzZQogCiAgICAgaWYgZmluZGxlYWtzOgogICAgICAgICB0cnk6CkBAIC0zODUsMzAgKzQxOSwyOSBAQAogICAgICAgICAgICAgZm91bmRfZ2FyYmFnZSA9IFtdCiAKICAgICBpZiBzaW5nbGU6Ci0gICAgICAgIGZyb20gdGVtcGZpbGUgaW1wb3J0IGdldHRlbXBkaXIKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZ2V0dGVtcGRpcigpLCAncHluZXh0dGVzdCcpCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICdweW5leHR0ZXN0JykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgICAgICAgICBuZXh0ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RzID0gW25leHRdCisgICAgICAgICAgICBuZXh0X3Rlc3QgPSBmcC5yZWFkKCkuc3RyaXAoKQorICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF90ZXN0XQogICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGlmIGZyb21maWxlOgogICAgICAgICB0ZXN0cyA9IFtdCi0gICAgICAgIGZwID0gb3Blbihmcm9tZmlsZSkKKyAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihzdXBwb3J0LlNBVkVEQ1dELCBmcm9tZmlsZSkpCisgICAgICAgIGNvdW50X3BhdCA9IHJlLmNvbXBpbGUocidcW1xzKlxkKy9ccypcZCtcXScpCiAgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCiAgICAgICAgICAgICBndXRzID0gbGluZS5zcGxpdCgpICMgYXNzdW1pbmcgbm8gdGVzdCBoYXMgd2hpdGVzcGFjZSBpbiBpdHMgbmFtZQogICAgICAgICAgICAgaWYgZ3V0cyBhbmQgbm90IGd1dHNbMF0uc3RhcnRzd2l0aCgnIycpOgogICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQogICAgICAgICBmcC5jbG9zZSgpCiAKICAgICAjIFN0cmlwIC5weSBleHRlbnNpb25zLgotICAgIGlmIGFyZ3M6Ci0gICAgICAgIGFyZ3MgPSBsaXN0KG1hcChyZW1vdmVweSwgYXJncykpCi0gICAgaWYgdGVzdHM6Ci0gICAgICAgIHRlc3RzID0gbGlzdChtYXAocmVtb3ZlcHksIHRlc3RzKSkKKyAgICByZW1vdmVweShhcmdzKQorICAgIHJlbW92ZXB5KHRlc3RzKQogCiAgICAgc3RkdGVzdHMgPSBTVERURVNUU1s6XQogICAgIG5vdHRlc3RzID0gTk9UVEVTVFMuY29weSgpCkBAIC00MTgsOSArNDUxLDI0IEBACiAgICAgICAgICAgICAgICAgc3RkdGVzdHMucmVtb3ZlKGFyZykKICAgICAgICAgICAgIG5vdHRlc3RzLmFkZChhcmcpCiAgICAgICAgIGFyZ3MgPSBbXQotICAgIHRlc3RzID0gdGVzdHMgb3IgYXJncyBvciBmaW5kdGVzdHModGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQorCisgICAgIyBGb3IgYSBwYXJ0aWFsIHJ1biwgd2UgZG8gbm90IG5lZWQgdG8gY2x1dHRlciB0aGUgb3V0cHV0LgorICAgIGlmIHZlcmJvc2Ugb3IgaGVhZGVyIG9yIG5vdCAocXVpZXQgb3Igc2luZ2xlIG9yIHRlc3RzIG9yIGFyZ3MpOgorICAgICAgICAjIFByaW50IGJhc2ljIHBsYXRmb3JtIGluZm9ybWF0aW9uCisgICAgICAgIHByaW50KCI9PSIsIHBsYXRmb3JtLnB5dGhvbl9pbXBsZW1lbnRhdGlvbigpLCAqc3lzLnZlcnNpb24uc3BsaXQoKSkKKyAgICAgICAgcHJpbnQoIj09ICAiLCBwbGF0Zm9ybS5wbGF0Zm9ybShhbGlhc2VkPVRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICIlcy1lbmRpYW4iICUgc3lzLmJ5dGVvcmRlcikKKyAgICAgICAgcHJpbnQoIj09ICAiLCBvcy5nZXRjd2QoKSkKKyAgICAgICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MpCisKKyAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCisgICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBhcmdzIG9yIGFsbHRlc3RzCiAgICAgaWYgc2luZ2xlOgotICAgICAgICB0ZXN0cyA9IHRlc3RzWzoxXQorICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkWzoxXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0X3NpbmdsZV90ZXN0ID0gYWxsdGVzdHNbYWxsdGVzdHMuaW5kZXgoc2VsZWN0ZWRbMF0pKzFdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IE5vbmUKICAgICAjIFJlbW92ZSBhbGwgdGhlIHRlc3RzIHRoYXQgcHJlY2VkZSBzdGFydCBpZiBpdCdzIHNldC4KICAgICBpZiBzdGFydDoKICAgICAgICAgdHJ5OgpAQCAtNDMwLDczICs0NzgsMTg1IEBACiAgICAgaWYgcmFuZG9taXplOgogICAgICAgICByYW5kb20uc2VlZChyYW5kb21fc2VlZCkKICAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgcmFuZG9tX3NlZWQpCi0gICAgICAgIHJhbmRvbS5zaHVmZmxlKHRlc3RzKQorICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxlY3RlZCkKICAgICBpZiB0cmFjZToKICAgICAgICAgaW1wb3J0IHRyYWNlLCB0ZW1wZmlsZQogICAgICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBmaWxlLmdldHRlbXBkaXIoKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPUZhbHNlLCBjb3VudD1UcnVlKQorCiAgICAgdGVzdF90aW1lcyA9IFtdCiAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CiAgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gdXNlX3Jlc291cmNlcwogICAgIHNhdmVfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmtleXMoKQotICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICBpZiBub3QgcXVpZXQ6Ci0gICAgICAgICAgICBwcmludCh0ZXN0KQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIGlmIHRyYWNlOgotICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwotICAgICAgICAgICAgIyBpZiBvbiBhIGZhbHNlIHJldHVybiB2YWx1ZSBmcm9tIG1haW4uCi0gICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIGdlbmVyYXRlLCB2ZXJib3NlLCBxdWlldCwnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgICAgIHRlc3RfdGltZXMsIHRlc3RkaXIpJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIGdlbmVyYXRlLCB2ZXJib3NlLCBxdWlldCwgdGVzdF90aW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdGRpciwgaHVudHJsZWFrcykKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKLSAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBpZiBvayA+IDA6Ci0gICAgICAgICAgICAgICAgZ29vZC5hcHBlbmQodGVzdCkKLSAgICAgICAgICAgIGVsaWYgb2sgPT0gMDoKLSAgICAgICAgICAgICAgICBiYWQuYXBwZW5kKHRlc3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCi0gICAgICAgICAgICAgICAgaWYgb2sgPT0gLTI6Ci0gICAgICAgICAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCi0gICAgICAgIGlmIGZpbmRsZWFrczoKLSAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgaWYgZ2MuZ2FyYmFnZToKLSAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIHByaW50KCJ1bmNvbGxlY3RhYmxlIG9iamVjdChzKS4iKQotICAgICAgICAgICAgICAgICMgbW92ZSB0aGUgdW5jb2xsZWN0YWJsZSBvYmplY3RzIHNvbWV3aGVyZSBzbyB3ZSBkb24ndCBzZWUKLSAgICAgICAgICAgICAgICAjIHRoZW0gYWdhaW4KLSAgICAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlLmV4dGVuZChnYy5nYXJiYWdlKQotICAgICAgICAgICAgICAgIGRlbCBnYy5nYXJiYWdlWzpdCi0gICAgICAgICMgVW5sb2FkIHRoZSBuZXdseSBpbXBvcnRlZCBtb2R1bGVzIChiZXN0IGVmZm9ydCBmaW5hbGl6YXRpb24pCi0gICAgICAgIGZvciBtb2R1bGUgaW4gc3lzLm1vZHVsZXMua2V5cygpOgotICAgICAgICAgICAgaWYgbW9kdWxlIG5vdCBpbiBzYXZlX21vZHVsZXMgYW5kIG1vZHVsZS5zdGFydHN3aXRoKCJ0ZXN0LiIpOgotICAgICAgICAgICAgICAgIHN1cHBvcnQudW5sb2FkKG1vZHVsZSkKIAorICAgIGRlZiBhY2N1bXVsYXRlX3Jlc3VsdCh0ZXN0LCByZXN1bHQpOgorICAgICAgICBvaywgdGVzdF90aW1lID0gcmVzdWx0CisgICAgICAgIHRlc3RfdGltZXMuYXBwZW5kKCh0ZXN0X3RpbWUsIHRlc3QpKQorICAgICAgICBpZiBvayA9PSBQQVNTRUQ6CisgICAgICAgICAgICBnb29kLmFwcGVuZCh0ZXN0KQorICAgICAgICBlbGlmIG9rID09IEZBSUxFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgZWxpZiBvayA9PSBFTlZfQ0hBTkdFRDoKKyAgICAgICAgICAgIGJhZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIGVudmlyb25tZW50X2NoYW5nZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gU0tJUFBFRDoKKyAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCisgICAgICAgIGVsaWYgb2sgPT0gUkVTT1VSQ0VfREVOSUVEOgorICAgICAgICAgICAgc2tpcHBlZC5hcHBlbmQodGVzdCkKKyAgICAgICAgICAgIHJlc291cmNlX2RlbmllZHMuYXBwZW5kKHRlc3QpCisKKyAgICBpZiBmb3JldmVyOgorICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRlc3RzID0gdGVzdF9mb3JldmVyKCkKKyAgICAgICAgdGVzdF9jb3VudCA9ICcnCisgICAgICAgIHRlc3RfY291bnRfd2lkdGggPSAzCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMgPSBpdGVyKHNlbGVjdGVkKQorICAgICAgICB0ZXN0X2NvdW50ID0gJy97fScuZm9ybWF0KGxlbihzZWxlY3RlZCkpCisgICAgICAgIHRlc3RfY291bnRfd2lkdGggPSBsZW4odGVzdF9jb3VudCkgLSAxCisKKyAgICBpZiB1c2VfbXA6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcHJpbnQoIk11bHRpcHJvY2VzcyBvcHRpb24gcmVxdWlyZXMgdGhyZWFkIHN1cHBvcnQiKQorICAgICAgICAgICAgc3lzLmV4aXQoMikKKyAgICAgICAgZnJvbSBxdWV1ZSBpbXBvcnQgUXVldWUKKyAgICAgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQorICAgICAgICBkZWJ1Z19vdXRwdXRfcGF0ID0gcmUuY29tcGlsZShyIlxbXGQrIHJlZnNcXSQiKQorICAgICAgICBvdXRwdXQgPSBRdWV1ZSgpCisgICAgICAgIGRlZiB0ZXN0c19hbmRfYXJncygpOgorICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICAgICAgYXJnc190dXBsZSA9ICgKKyAgICAgICAgICAgICAgICAgICAgKHRlc3QsIHZlcmJvc2UsIHF1aWV0KSwKKyAgICAgICAgICAgICAgICAgICAgZGljdChodW50cmxlYWtzPWh1bnRybGVha3MsIHVzZV9yZXNvdXJjZXM9dXNlX3Jlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz1kZWJ1ZywgcmVydW5fZmFpbGVkPXZlcmJvc2UzKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICB5aWVsZCAodGVzdCwgYXJnc190dXBsZSkKKyAgICAgICAgcGVuZGluZyA9IHRlc3RzX2FuZF9hcmdzKCkKKyAgICAgICAgb3B0X2FyZ3MgPSBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCisgICAgICAgIGJhc2VfY21kID0gW3N5cy5leGVjdXRhYmxlXSArIG9wdF9hcmdzICsgWyctbScsICd0ZXN0LnJlZ3J0ZXN0J10KKyAgICAgICAgZGVmIHdvcmsoKToKKyAgICAgICAgICAgICMgQSB3b3JrZXIgdGhyZWFkLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QsIGFyZ3NfdHVwbGUgPSBuZXh0KHBlbmRpbmcpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgIyAtRSBpcyBuZWVkZWQgYnkgc29tZSB0ZXN0cywgZS5nLiB0ZXN0X2ltcG9ydAorICAgICAgICAgICAgICAgICAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoYXJnc190dXBsZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JykpCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgICAgICAgICAjIFN0cmlwIGxhc3QgcmVmY291bnQgb3V0cHV0IGxpbmUgaWYgaXQgZXhpc3RzLCBzaW5jZSBpdAorICAgICAgICAgICAgICAgICAgICAjIGNvbWVzIGZyb20gdGhlIHNodXRkb3duIG9mIHRoZSBpbnRlcnByZXRlciBpbiB0aGUgc3ViY29tbWFuZC4KKyAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gZGVidWdfb3V0cHV0X3BhdC5zdWIoIiIsIHN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBfLCByZXN1bHQgPSBzdGRvdXQuc3RyaXAoKS5ycGFydGl0aW9uKCJcbiIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBqc29uLmxvYWRzKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1dCgodGVzdCwgc3Rkb3V0LnJzdHJpcCgpLCBzdGRlcnIucnN0cmlwKCksIHJlc3VsdCkpCisgICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UodXNlX21wKV0KKyAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgorICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAgICAgICAgZmluaXNoZWQgPSAwCisgICAgICAgIHRlc3RfaW5kZXggPSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgdXNlX21wOgorICAgICAgICAgICAgICAgIHRlc3QsIHN0ZG91dCwgc3RkZXJyLCByZXN1bHQgPSBvdXRwdXQuZ2V0KCkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkICs9IDEKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJbezE6ezB9fXsyfV0gezN9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LCB0ZXN0KSkKKyAgICAgICAgICAgICAgICBpZiBzdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHN0ZG91dCkKKyAgICAgICAgICAgICAgICBpZiBzdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHByaW50KHN0ZGVyciwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBJTlRFUlJVUFRFRDoKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlc3VsdFsxXSA9PSAnS2V5Ym9hcmRJbnRlcnJ1cHQnCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0ICAgIyBXaGF0IGVsc2U/CisgICAgICAgICAgICAgICAgYWNjdW11bGF0ZV9yZXN1bHQodGVzdCwgcmVzdWx0KQorICAgICAgICAgICAgICAgIHRlc3RfaW5kZXggKz0gMQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBpbnRlcnJ1cHRlZCA9IFRydWUKKyAgICAgICAgICAgIHBlbmRpbmcuY2xvc2UoKQorICAgICAgICBmb3Igd29ya2VyIGluIHdvcmtlcnM6CisgICAgICAgICAgICB3b3JrZXIuam9pbigpCisgICAgZWxzZToKKyAgICAgICAgZm9yIHRlc3RfaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHRlc3RzLCAxKToKKyAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgICAgICBwcmludCgiW3sxOnswfX17Mn1dIHszfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICB0ZXN0X2NvdW50X3dpZHRoLCB0ZXN0X2luZGV4LCB0ZXN0X2NvdW50LCB0ZXN0KSkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGlmIHRyYWNlOgorICAgICAgICAgICAgICAgICMgSWYgd2UncmUgdHJhY2luZyBjb2RlIGNvdmVyYWdlLCB0aGVuIHdlIGRvbid0IGV4aXQgd2l0aCBzdGF0dXMKKyAgICAgICAgICAgICAgICAjIGlmIG9uIGEgZmFsc2UgcmV0dXJuIHZhbHVlIGZyb20gbWFpbi4KKyAgICAgICAgICAgICAgICB0cmFjZXIucnVuY3R4KCdydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0KScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzPWdsb2JhbHMoKSwgbG9jYWxzPXZhcnMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXJ1bl9mYWlsZWQ9dmVyYm9zZTMpCisgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgorICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgICAgICBwcmludCgidW5jb2xsZWN0YWJsZSBvYmplY3QocykuIikKKyAgICAgICAgICAgICAgICAgICAgIyBtb3ZlIHRoZSB1bmNvbGxlY3RhYmxlIG9iamVjdHMgc29tZXdoZXJlIHNvIHdlIGRvbid0IHNlZQorICAgICAgICAgICAgICAgICAgICAjIHRoZW0gYWdhaW4KKyAgICAgICAgICAgICAgICAgICAgZm91bmRfZ2FyYmFnZS5leHRlbmQoZ2MuZ2FyYmFnZSkKKyAgICAgICAgICAgICAgICAgICAgZGVsIGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgICAgICMgVW5sb2FkIHRoZSBuZXdseSBpbXBvcnRlZCBtb2R1bGVzIChiZXN0IGVmZm9ydCBmaW5hbGl6YXRpb24pCisgICAgICAgICAgICBmb3IgbW9kdWxlIGluIHN5cy5tb2R1bGVzLmtleXMoKToKKyAgICAgICAgICAgICAgICBpZiBtb2R1bGUgbm90IGluIHNhdmVfbW9kdWxlcyBhbmQgbW9kdWxlLnN0YXJ0c3dpdGgoInRlc3QuIik6CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQudW5sb2FkKG1vZHVsZSkKKworICAgIGlmIGludGVycnVwdGVkOgorICAgICAgICAjIHByaW50IGEgbmV3bGluZSBhZnRlciBeQworICAgICAgICBwcmludCgpCisgICAgICAgIHByaW50KCJUZXN0IHN1aXRlIGludGVycnVwdGVkIGJ5IHNpZ25hbCBTSUdJTlQuIikKKyAgICAgICAgb21pdHRlZCA9IHNldChzZWxlY3RlZCkgLSBzZXQoZ29vZCkgLSBzZXQoYmFkKSAtIHNldChza2lwcGVkKQorICAgICAgICBwcmludChjb3VudChsZW4ob21pdHRlZCksICJ0ZXN0IiksICJvbWl0dGVkOiIpCisgICAgICAgIHByaW50bGlzdChvbWl0dGVkKQogICAgIGlmIGdvb2QgYW5kIG5vdCBxdWlldDoKLSAgICAgICAgaWYgbm90IGJhZCBhbmQgbm90IHNraXBwZWQgYW5kIGxlbihnb29kKSA+IDE6CisgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CiAgICAgICAgICAgICBwcmludCgiQWxsIiwgZW5kPScgJykKICAgICAgICAgcHJpbnQoY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIikKLSAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgIHByaW50KCJDQVVUSU9OOiAgc3Rkb3V0IGlzbid0IGNvbXBhcmVkIGluIHZlcmJvc2UgbW9kZToiKQotICAgICAgICAgICAgcHJpbnQoImEgdGVzdCB0aGF0IHBhc3NlcyBpbiB2ZXJib3NlIG1vZGUgbWF5IGZhaWwgd2l0aG91dCBpdC4iKQogICAgIGlmIHByaW50X3Nsb3c6CiAgICAgICAgIHRlc3RfdGltZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIHByaW50KCIxMCBzbG93ZXN0IHRlc3RzOiIpCiAgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKICAgICAgICAgICAgIHByaW50KCIlczogJS4xZnMiICUgKHRlc3QsIHRpbWUpKQogICAgIGlmIGJhZDoKLSAgICAgICAgcHJpbnQoY291bnQobGVuKGJhZCksICJ0ZXN0IiksICJmYWlsZWQ6IikKLSAgICAgICAgcHJpbnRsaXN0KGJhZCkKKyAgICAgICAgYmFkID0gc29ydGVkKHNldChiYWQpIC0gc2V0KGVudmlyb25tZW50X2NoYW5nZWQpKQorICAgICAgICBpZiBiYWQ6CisgICAgICAgICAgICBwcmludChjb3VudChsZW4oYmFkKSwgInRlc3QiKSwgImZhaWxlZDoiKQorICAgICAgICAgICAgcHJpbnRsaXN0KGJhZCkKKyAgICAgICAgaWYgZW52aXJvbm1lbnRfY2hhbmdlZDoKKyAgICAgICAgICAgIHByaW50KCJ7fSBhbHRlcmVkIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQ6Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICBjb3VudChsZW4oZW52aXJvbm1lbnRfY2hhbmdlZCksICJ0ZXN0IikpKQorICAgICAgICAgICAgcHJpbnRsaXN0KGVudmlyb25tZW50X2NoYW5nZWQpCiAgICAgaWYgc2tpcHBlZCBhbmQgbm90IHF1aWV0OgogICAgICAgICBwcmludChjb3VudChsZW4oc2tpcHBlZCksICJ0ZXN0IiksICJza2lwcGVkOiIpCiAgICAgICAgIHByaW50bGlzdChza2lwcGVkKQpAQCAtNTIxLDkgKzY4MSw4IEBACiAgICAgICAgICAgICBwcmludCgiUmUtcnVubmluZyB0ZXN0ICVyIGluIHZlcmJvc2UgbW9kZSIgJSB0ZXN0KQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG9rID0gcnVudGVzdCh0ZXN0LCBnZW5lcmF0ZSwgVHJ1ZSwgcXVpZXQsIHRlc3RfdGltZXMsIHRlc3RkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1bnRybGVha3MsIGRlYnVnKQorICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZykKICAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgICAgICAjIHByaW50IGEgbmV3bGluZSBzZXBhcmF0ZSBmcm9tIHRoZSBeQwogICAgICAgICAgICAgICAgIHByaW50KCkKQEAgLTUzMiwxNiArNjkxLDkgQEAKICAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgaWYgc2luZ2xlOgotICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyh0ZXN0ZGlyLCBzdGR0ZXN0cywgbm90dGVzdHMpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhbGx0ZXN0cykpOgotICAgICAgICAgICAgaWYgdGVzdHNbMF0gPT0gYWxsdGVzdHNbaV06Ci0gICAgICAgICAgICAgICAgaWYgaSA9PSBsZW4oYWxsdGVzdHMpIC0gMToKLSAgICAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgICAgICAgICAgICAgICAgICBmcC53cml0ZShhbGx0ZXN0c1tpKzFdICsgJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKQEAgLTU1Miw3ICs3MDQsNyBAQAogICAgIGlmIHJ1bmxlYWtzOgogICAgICAgICBvcy5zeXN0ZW0oImxlYWtzICVkIiAlIG9zLmdldHBpZCgpKQogCi0gICAgc3lzLmV4aXQobGVuKGJhZCkgPiAwKQorICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKIAogCiBTVERURVNUUyA9IFsKQEAgLTU3NCwxNiArNzI2LDE1IEBACiAKIGRlZiBmaW5kdGVzdHModGVzdGRpcj1Ob25lLCBzdGR0ZXN0cz1TVERURVNUUywgbm90dGVzdHM9Tk9UVEVTVFMpOgogICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIGFwcGxpY2FibGUgdGVzdCBtb2R1bGVzLiIiIgotICAgIGlmIG5vdCB0ZXN0ZGlyOiB0ZXN0ZGlyID0gZmluZHRlc3RkaXIoKQorICAgIHRlc3RkaXIgPSBmaW5kdGVzdGRpcih0ZXN0ZGlyKQogICAgIG5hbWVzID0gb3MubGlzdGRpcih0ZXN0ZGlyKQogICAgIHRlc3RzID0gW10KKyAgICBvdGhlcnMgPSBzZXQoc3RkdGVzdHMpIHwgbm90dGVzdHMKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgaWYgbmFtZVs6NV0gPT0gInRlc3RfIiBhbmQgbmFtZVstMzpdID09ICIucHkiOgotICAgICAgICAgICAgbW9kbmFtZSA9IG5hbWVbOi0zXQotICAgICAgICAgICAgaWYgbW9kbmFtZSBub3QgaW4gc3RkdGVzdHMgYW5kIG1vZG5hbWUgbm90IGluIG5vdHRlc3RzOgotICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChtb2RuYW1lKQotICAgIHRlc3RzLnNvcnQoKQotICAgIHJldHVybiBzdGR0ZXN0cyArIHRlc3RzCisgICAgICAgIG1vZG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQobmFtZSkKKyAgICAgICAgaWYgbW9kbmFtZVs6NV0gPT0gInRlc3RfIiBhbmQgZXh0ID09ICIucHkiIGFuZCBtb2RuYW1lIG5vdCBpbiBvdGhlcnM6CisgICAgICAgICAgICB0ZXN0cy5hcHBlbmQobW9kbmFtZSkKKyAgICByZXR1cm4gc3RkdGVzdHMgKyBzb3J0ZWQodGVzdHMpCiAKIGRlZiByZXBsYWNlX3N0ZG91dCgpOgogICAgICIiIlNldCBzdGRvdXQgZW5jb2RlciBlcnJvciBoYW5kbGVyIHRvIGJhY2tzbGFzaHJlcGxhY2UgKGFzIHN0ZGVyciBlcnJvcgpAQCAtNTkxLDYzICs3NDIsMjM3IEBACiAgICAgaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICAjIFJlcGxhY2Ugc3lzLnN0ZG91dCBicmVha3MgdGhlIHN0ZG91dCBuZXdsaW5lcyBvbiBXaW5kb3dzOiBpc3N1ZSAjODUzMwogICAgICAgICByZXR1cm4KKworICAgIGltcG9ydCBhdGV4aXQKKwogICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKICAgICBzeXMuc3Rkb3V0ID0gb3BlbihzdGRvdXQuZmlsZW5vKCksICd3JywKICAgICAgICAgZW5jb2Rpbmc9c3Rkb3V0LmVuY29kaW5nLAotICAgICAgICBlcnJvcnM9ImJhY2tzbGFzaHJlcGxhY2UiKQorICAgICAgICBlcnJvcnM9ImJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICBjbG9zZWZkPUZhbHNlKQogCi1kZWYgcnVudGVzdCh0ZXN0LCBnZW5lcmF0ZSwgdmVyYm9zZSwgcXVpZXQsIHRlc3RfdGltZXMsCi0gICAgICAgICAgICB0ZXN0ZGlyPU5vbmUsIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlKToKKyAgICBkZWYgcmVzdG9yZV9zdGRvdXQoKToKKyAgICAgICAgc3lzLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKKyAgICBhdGV4aXQucmVnaXN0ZXIocmVzdG9yZV9zdGRvdXQpCisKK2RlZiBydW50ZXN0KHRlc3QsIHZlcmJvc2UsIHF1aWV0LAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIHVzZV9yZXNvdXJjZXM9Tm9uZSwKKyAgICAgICAgICAgIHJlcnVuX2ZhaWxlZD1GYWxzZSk6CiAgICAgIiIiUnVuIGEgc2luZ2xlIHRlc3QuCiAKICAgICB0ZXN0IC0tIHRoZSBuYW1lIG9mIHRoZSB0ZXN0CiAgICAgdmVyYm9zZSAtLSBpZiB0cnVlLCBwcmludCBtb3JlIG1lc3NhZ2VzCiAgICAgcXVpZXQgLS0gaWYgdHJ1ZSwgZG9uJ3QgcHJpbnQgJ3NraXBwZWQnIG1lc3NhZ2VzIChwcm9iYWJseSByZWR1bmRhbnQpCiAgICAgdGVzdF90aW1lcyAtLSBhIGxpc3Qgb2YgKHRpbWUsIHRlc3RfbmFtZSkgcGFpcnMKLSAgICB0ZXN0ZGlyIC0tIHRlc3QgZGlyZWN0b3J5CiAgICAgaHVudHJsZWFrcyAtLSBydW4gbXVsdGlwbGUgdGltZXMgdG8gdGVzdCBmb3IgbGVha3M7IHJlcXVpcmVzIGEgZGVidWcKICAgICAgICAgICAgICAgICAgIGJ1aWxkOyBhIHRyaXBsZSBjb3JyZXNwb25kaW5nIHRvIC1SJ3MgdGhyZWUgYXJndW1lbnRzCi0gICAgZGVidWcgLS0gaWYgdHJ1ZSwgcHJpbnQgdHJhY2ViYWNrcyBmb3IgZmFpbGVkIHRlc3RzIHJlZ2FyZGxlc3Mgb2YKLSAgICAgICAgICAgICB2ZXJib3NlIHNldHRpbmcKLSAgICBSZXR1cm46Ci0gICAgICAgIC0yICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKLSAgICAgICAgLTEgIHRlc3Qgc2tpcHBlZCBmb3Igc29tZSBvdGhlciByZWFzb24KLSAgICAgICAgIDAgIHRlc3QgZmFpbGVkCi0gICAgICAgICAxICB0ZXN0IHBhc3NlZAorICAgIHJlcnVuX2ZhaWxlZCAtLSBpZiB0cnVlLCByZS1ydW4gaW4gdmVyYm9zZSBtb2RlIHdoZW4gZmFpbGVkCisKKyAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgICAgICBJTlRFUlJVUFRFRCAgICAgIEtleWJvYXJkSW50ZXJydXB0IHdoZW4gcnVuIHVuZGVyIC1qCisgICAgICAgIFJFU09VUkNFX0RFTklFRCAgdGVzdCBza2lwcGVkIGJlY2F1c2UgcmVzb3VyY2UgZGVuaWVkCisgICAgICAgIFNLSVBQRUQgICAgICAgICAgdGVzdCBza2lwcGVkIGZvciBzb21lIG90aGVyIHJlYXNvbgorICAgICAgICBFTlZfQ0hBTkdFRCAgICAgIHRlc3QgZmFpbGVkIGJlY2F1c2UgaXQgY2hhbmdlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50CisgICAgICAgIEZBSUxFRCAgICAgICAgICAgdGVzdCBmYWlsZWQKKyAgICAgICAgUEFTU0VEICAgICAgICAgICB0ZXN0IHBhc3NlZAogICAgICIiIgogCisgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKKyAgICBpZiB1c2VfcmVzb3VyY2VzIGlzIG5vdCBOb25lOgorICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCiAgICAgdHJ5OgotICAgICAgICByZXR1cm4gcnVudGVzdF9pbm5lcih0ZXN0LCBnZW5lcmF0ZSwgdmVyYm9zZSwgcXVpZXQsIHRlc3RfdGltZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RkaXIsIGh1bnRybGVha3MpCisgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnKQorICAgICAgICBpZiByZXN1bHRbMF0gPT0gRkFJTEVEIGFuZCByZXJ1bl9mYWlsZWQ6CisgICAgICAgICAgICBjbGVhbnVwX3Rlc3RfZHJvcHBpbmdzKHRlc3QsIHZlcmJvc2UpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCB7fSBpbiB2ZXJib3NlIG1vZGUiLmZvcm1hdCh0ZXN0KSkKKyAgICAgICAgICAgIHJ1bnRlc3QodGVzdCwgVHJ1ZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnKQorICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKICAgICAgICAgY2xlYW51cF90ZXN0X2Ryb3BwaW5ncyh0ZXN0LCB2ZXJib3NlKQogCi1kZWYgcnVudGVzdF9pbm5lcih0ZXN0LCBnZW5lcmF0ZSwgdmVyYm9zZSwgcXVpZXQsIHRlc3RfdGltZXMsCi0gICAgICAgICAgICAgICAgICB0ZXN0ZGlyPU5vbmUsIGh1bnRybGVha3M9RmFsc2UsIGRlYnVnPUZhbHNlKToKLSAgICBzdXBwb3J0LnVubG9hZCh0ZXN0KQotICAgIGlmIG5vdCB0ZXN0ZGlyOgotICAgICAgICB0ZXN0ZGlyID0gZmluZHRlc3RkaXIoKQotICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgIGNmcCA9IE5vbmUKLSAgICBlbHNlOgotICAgICAgICBjZnAgPSBpby5TdHJpbmdJTygpICAjIFhYWCBTaG91bGQgdXNlIGlvLlN0cmluZ0lPKCkKKyMgVW5pdCB0ZXN0cyBhcmUgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCB1bmNoYW5nZWQKKyMgb25jZSB0aGV5IGNvbXBsZXRlLiAgQnV0IHNvbWV0aW1lcyB0ZXN0cyBoYXZlIGJ1Z3MsIGVzcGVjaWFsbHkgd2hlbgorIyB0ZXN0cyBmYWlsLCBhbmQgdGhlIGNoYW5nZXMgdG8gZW52aXJvbm1lbnQgZ28gb24gdG8gbWVzcyB1cCBvdGhlcgorIyB0ZXN0cy4gIFRoaXMgY2FuIGNhdXNlIGlzc3VlcyB3aXRoIGJ1aWxkYm90IHN0YWJpbGl0eSwgc2luY2UgdGVzdHMKKyMgYXJlIHJ1biBpbiByYW5kb20gb3JkZXIgYW5kIHNvIHByb2JsZW1zIG1heSBhcHBlYXIgdG8gY29tZSBhbmQgZ28uCisjIFRoZXJlIGFyZSBhIGZldyB0aGluZ3Mgd2UgY2FuIHNhdmUgYW5kIHJlc3RvcmUgdG8gbWl0aWdhdGUgdGhpcywgYW5kCisjIHRoZSBmb2xsb3dpbmcgY29udGV4dCBtYW5hZ2VyIGhhbmRsZXMgdGhpcyB0YXNrLgogCitjbGFzcyBzYXZlZF90ZXN0X2Vudmlyb25tZW50OgorICAgICIiIlNhdmUgYml0cyBvZiB0aGUgdGVzdCBlbnZpcm9ubWVudCBhbmQgcmVzdG9yZSB0aGVtIGF0IGJsb2NrIGV4aXQuCisKKyAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3RuYW1lLCB2ZXJib3NlLCBxdWlldCk6CisgICAgICAgICAgICAjc3R1ZmYKKworICAgIFVubGVzcyBxdWlldCBpcyBUcnVlLCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0byBzdGRlcnIgaWYgYW55IG9mCisgICAgdGhlIHNhdmVkIGl0ZW1zIHdhcyBjaGFuZ2VkIGJ5IHRoZSB0ZXN0LiAgVGhlIGF0dHJpYnV0ZSAnY2hhbmdlZCcKKyAgICBpcyBpbml0aWFsbHkgRmFsc2UsIGJ1dCBpcyBzZXQgdG8gVHJ1ZSBpZiBhIGNoYW5nZSBpcyBkZXRlY3RlZC4KKworICAgIElmIHZlcmJvc2UgaXMgbW9yZSB0aGFuIDEsIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHN0YXRlIG9mIGNoYW5nZWQKKyAgICBpdGVtcyBpcyBhbHNvIHByaW50ZWQuCisgICAgIiIiCisKKyAgICBjaGFuZ2VkID0gRmFsc2UKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0bmFtZSwgdmVyYm9zZT0wLCBxdWlldD1GYWxzZSk6CisgICAgICAgIHNlbGYudGVzdG5hbWUgPSB0ZXN0bmFtZQorICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgIHNlbGYucXVpZXQgPSBxdWlldAorCisgICAgIyBUbyBhZGQgdGhpbmdzIHRvIHNhdmUgYW5kIHJlc3RvcmUsIGFkZCBhIG5hbWUgWFhYIHRvIHRoZSByZXNvdXJjZXMgbGlzdAorICAgICMgYW5kIGFkZCBjb3JyZXNwb25kaW5nIGdldF9YWFgvcmVzdG9yZV9YWFggZnVuY3Rpb25zLiAgZ2V0X1hYWCBzaG91bGQKKyAgICAjIHJldHVybiB0aGUgdmFsdWUgdG8gYmUgc2F2ZWQgYW5kIGNvbXBhcmVkIGFnYWluc3QgYSBzZWNvbmQgY2FsbCB0byB0aGUKKyAgICAjIGdldCBmdW5jdGlvbiB3aGVuIHRlc3QgZXhlY3V0aW9uIGNvbXBsZXRlcy4gIHJlc3RvcmVfWFhYIHNob3VsZCBhY2NlcHQKKyAgICAjIHRoZSBzYXZlZCB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgcmVzb3VyY2UgdXNpbmcgaXQuICBJdCB3aWxsIGJlIGNhbGxlZCBpZgorICAgICMgYW5kIG9ubHkgaWYgYSBjaGFuZ2UgaW4gdGhlIHZhbHVlIGlzIGRldGVjdGVkLgorICAgICMKKyAgICAjIE5vdGU6IFhYWCB3aWxsIGhhdmUgYW55ICcuJyByZXBsYWNlZCB3aXRoICdfJyBjaGFyYWN0ZXJzIHdoZW4gZGV0ZXJtaW5pbmcKKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIG1ldGhvZCBuYW1lcy4KKworICAgIHJlc291cmNlcyA9ICgnc3lzLmFyZ3YnLCAnY3dkJywgJ3N5cy5zdGRpbicsICdzeXMuc3Rkb3V0JywgJ3N5cy5zdGRlcnInLAorICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdzeXMucGF0aF9ob29rcycsICdfX2ltcG9ydF9fJywKKyAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzLmZpbHRlcnMnLCAnYXN5bmNvcmUuc29ja2V0X21hcCcsCisgICAgICAgICAgICAgICAgICdsb2dnaW5nLl9oYW5kbGVycycsICdsb2dnaW5nLl9oYW5kbGVyTGlzdCcsCisgICAgICAgICAgICAgICAgICdzeXMud2Fybm9wdGlvbnMnKQorCisgICAgZGVmIGdldF9zeXNfYXJndihzZWxmKToKKyAgICAgICAgcmV0dXJuIGlkKHN5cy5hcmd2KSwgc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisgICAgZGVmIHJlc3RvcmVfc3lzX2FyZ3Yoc2VsZiwgc2F2ZWRfYXJndik6CisgICAgICAgIHN5cy5hcmd2ID0gc2F2ZWRfYXJndlsxXQorICAgICAgICBzeXMuYXJndls6XSA9IHNhdmVkX2FyZ3ZbMl0KKworICAgIGRlZiBnZXRfY3dkKHNlbGYpOgorICAgICAgICByZXR1cm4gb3MuZ2V0Y3dkKCkKKyAgICBkZWYgcmVzdG9yZV9jd2Qoc2VsZiwgc2F2ZWRfY3dkKToKKyAgICAgICAgb3MuY2hkaXIoc2F2ZWRfY3dkKQorCisgICAgZGVmIGdldF9zeXNfc3Rkb3V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZG91dAorICAgIGRlZiByZXN0b3JlX3N5c19zdGRvdXQoc2VsZiwgc2F2ZWRfc3Rkb3V0KToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNhdmVkX3N0ZG91dAorCisgICAgZGVmIGdldF9zeXNfc3RkZXJyKHNlbGYpOgorICAgICAgICByZXR1cm4gc3lzLnN0ZGVycgorICAgIGRlZiByZXN0b3JlX3N5c19zdGRlcnIoc2VsZiwgc2F2ZWRfc3RkZXJyKToKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNhdmVkX3N0ZGVycgorCisgICAgZGVmIGdldF9zeXNfc3RkaW4oc2VsZik6CisgICAgICAgIHJldHVybiBzeXMuc3RkaW4KKyAgICBkZWYgcmVzdG9yZV9zeXNfc3RkaW4oc2VsZiwgc2F2ZWRfc3RkaW4pOgorICAgICAgICBzeXMuc3RkaW4gPSBzYXZlZF9zdGRpbgorCisgICAgZGVmIGdldF9vc19lbnZpcm9uKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQob3MuZW52aXJvbiksIG9zLmVudmlyb24sIGRpY3Qob3MuZW52aXJvbikKKyAgICBkZWYgcmVzdG9yZV9vc19lbnZpcm9uKHNlbGYsIHNhdmVkX2Vudmlyb24pOgorICAgICAgICBvcy5lbnZpcm9uID0gc2F2ZWRfZW52aXJvblsxXQorICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKKyAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoc2F2ZWRfZW52aXJvblsyXSkKKworICAgIGRlZiBnZXRfc3lzX3BhdGgoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMucGF0aCksIHN5cy5wYXRoLCBzeXMucGF0aFs6XQorICAgIGRlZiByZXN0b3JlX3N5c19wYXRoKHNlbGYsIHNhdmVkX3BhdGgpOgorICAgICAgICBzeXMucGF0aCA9IHNhdmVkX3BhdGhbMV0KKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzYXZlZF9wYXRoWzJdCisKKyAgICBkZWYgZ2V0X3N5c19wYXRoX2hvb2tzKHNlbGYpOgorICAgICAgICByZXR1cm4gaWQoc3lzLnBhdGhfaG9va3MpLCBzeXMucGF0aF9ob29rcywgc3lzLnBhdGhfaG9va3NbOl0KKyAgICBkZWYgcmVzdG9yZV9zeXNfcGF0aF9ob29rcyhzZWxmLCBzYXZlZF9ob29rcyk6CisgICAgICAgIHN5cy5wYXRoX2hvb2tzID0gc2F2ZWRfaG9va3NbMV0KKyAgICAgICAgc3lzLnBhdGhfaG9va3NbOl0gPSBzYXZlZF9ob29rc1syXQorCisgICAgZGVmIGdldF9fX2ltcG9ydF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gYnVpbHRpbnMuX19pbXBvcnRfXworICAgIGRlZiByZXN0b3JlX19faW1wb3J0X18oc2VsZiwgaW1wb3J0Xyk6CisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBpbXBvcnRfCisKKyAgICBkZWYgZ2V0X3dhcm5pbmdzX2ZpbHRlcnMoc2VsZik6CisgICAgICAgIHJldHVybiBpZCh3YXJuaW5ncy5maWx0ZXJzKSwgd2FybmluZ3MuZmlsdGVycywgd2FybmluZ3MuZmlsdGVyc1s6XQorICAgIGRlZiByZXN0b3JlX3dhcm5pbmdzX2ZpbHRlcnMoc2VsZiwgc2F2ZWRfZmlsdGVycyk6CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcnMgPSBzYXZlZF9maWx0ZXJzWzFdCisgICAgICAgIHdhcm5pbmdzLmZpbHRlcnNbOl0gPSBzYXZlZF9maWx0ZXJzWzJdCisKKyAgICBkZWYgZ2V0X2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZik6CisgICAgICAgIGFzeW5jb3JlID0gc3lzLm1vZHVsZXMuZ2V0KCdhc3luY29yZScpCisgICAgICAgICMgWFhYIE1ha2luZyBhIGNvcHkga2VlcHMgb2JqZWN0cyBhbGl2ZSB1bnRpbCBfX2V4aXRfXyBnZXRzIGNhbGxlZC4KKyAgICAgICAgcmV0dXJuIGFzeW5jb3JlIGFuZCBhc3luY29yZS5zb2NrZXRfbWFwLmNvcHkoKSBvciB7fQorICAgIGRlZiByZXN0b3JlX2FzeW5jb3JlX3NvY2tldF9tYXAoc2VsZiwgc2F2ZWRfbWFwKToKKyAgICAgICAgYXN5bmNvcmUgPSBzeXMubW9kdWxlcy5nZXQoJ2FzeW5jb3JlJykKKyAgICAgICAgaWYgYXN5bmNvcmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoaWdub3JlX2FsbD1UcnVlKQorICAgICAgICAgICAgYXN5bmNvcmUuc29ja2V0X21hcC51cGRhdGUoc2F2ZWRfbWFwKQorCisgICAgZGVmIGdldF9sb2dnaW5nX19oYW5kbGVycyhzZWxmKToKKyAgICAgICAgIyBfaGFuZGxlcnMgaXMgYSBXZWFrVmFsdWVEaWN0aW9uYXJ5CisgICAgICAgIHJldHVybiBpZChsb2dnaW5nLl9oYW5kbGVycyksIGxvZ2dpbmcuX2hhbmRsZXJzLCBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKKyAgICBkZWYgcmVzdG9yZV9sb2dnaW5nX19oYW5kbGVycyhzZWxmLCBzYXZlZF9oYW5kbGVycyk6CisgICAgICAgICMgQ2FuJ3QgZWFzaWx5IHJldmVydCB0aGUgbG9nZ2luZyBzdGF0ZQorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X2xvZ2dpbmdfX2hhbmRsZXJMaXN0KHNlbGYpOgorICAgICAgICAjIF9oYW5kbGVyTGlzdCBpcyBhIGxpc3Qgb2Ygd2Vha3JlZnMgdG8gaGFuZGxlcnMKKyAgICAgICAgcmV0dXJuIGlkKGxvZ2dpbmcuX2hhbmRsZXJMaXN0KSwgbG9nZ2luZy5faGFuZGxlckxpc3QsIGxvZ2dpbmcuX2hhbmRsZXJMaXN0WzpdCisgICAgZGVmIHJlc3RvcmVfbG9nZ2luZ19faGFuZGxlckxpc3Qoc2VsZiwgc2F2ZWRfaGFuZGxlckxpc3QpOgorICAgICAgICAjIENhbid0IGVhc2lseSByZXZlcnQgdGhlIGxvZ2dpbmcgc3RhdGUKKyAgICAgICAgcGFzcworCisgICAgZGVmIGdldF9zeXNfd2Fybm9wdGlvbnMoc2VsZik6CisgICAgICAgIHJldHVybiBpZChzeXMud2Fybm9wdGlvbnMpLCBzeXMud2Fybm9wdGlvbnMsIHN5cy53YXJub3B0aW9uc1s6XQorICAgIGRlZiByZXN0b3JlX3N5c193YXJub3B0aW9ucyhzZWxmLCBzYXZlZF9vcHRpb25zKToKKyAgICAgICAgc3lzLndhcm5vcHRpb25zID0gc2F2ZWRfb3B0aW9uc1sxXQorICAgICAgICBzeXMud2Fybm9wdGlvbnNbOl0gPSBzYXZlZF9vcHRpb25zWzJdCisKKyAgICBkZWYgcmVzb3VyY2VfaW5mbyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXNvdXJjZXM6CisgICAgICAgICAgICBtZXRob2Rfc3VmZml4ID0gbmFtZS5yZXBsYWNlKCcuJywgJ18nKQorICAgICAgICAgICAgZ2V0X25hbWUgPSAnZ2V0XycgKyBtZXRob2Rfc3VmZml4CisgICAgICAgICAgICByZXN0b3JlX25hbWUgPSAncmVzdG9yZV8nICsgbWV0aG9kX3N1ZmZpeAorICAgICAgICAgICAgeWllbGQgbmFtZSwgZ2V0YXR0cihzZWxmLCBnZXRfbmFtZSksIGdldGF0dHIoc2VsZiwgcmVzdG9yZV9uYW1lKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlZF92YWx1ZXMgPSBkaWN0KChuYW1lLCBnZXQoKSkgZm9yIG5hbWUsIGdldCwgcmVzdG9yZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc2VsZi5yZXNvdXJjZV9pbmZvKCkpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CisgICAgICAgIHNhdmVkX3ZhbHVlcyA9IHNlbGYuc2F2ZWRfdmFsdWVzCisgICAgICAgIGRlbCBzZWxmLnNhdmVkX3ZhbHVlcworICAgICAgICBmb3IgbmFtZSwgZ2V0LCByZXN0b3JlIGluIHNlbGYucmVzb3VyY2VfaW5mbygpOgorICAgICAgICAgICAgY3VycmVudCA9IGdldCgpCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNhdmVkX3ZhbHVlcy5wb3AobmFtZSkKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIGNoYW5nZXMgdG8gdGhlIHJlc291cmNlJ3MgdmFsdWUKKyAgICAgICAgICAgIGlmIGN1cnJlbnQgIT0gb3JpZ2luYWw6CisgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJlc3RvcmUob3JpZ2luYWwpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYucXVpZXQ6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nIC0tIHt9IHdhcyBtb2RpZmllZCBieSB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNlbGYudGVzdG5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCIgIEJlZm9yZToge31cbiAgQWZ0ZXI6ICB7fSAiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwsIGN1cnJlbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LCBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSk6CisgICAgc3VwcG9ydC51bmxvYWQodGVzdCkKKyAgICBpZiB2ZXJib3NlOgorICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBjYXB0dXJlX3N0ZG91dCA9IGlvLlN0cmluZ0lPKCkKKworICAgIHRlc3RfdGltZSA9IDAuMAogICAgIHJlZmxlYWsgPSBGYWxzZSAgIyBUcnVlIGlmIHRoZSB0ZXN0IGxlYWtlZCByZWZlcmVuY2VzLgogICAgIHRyeToKLSAgICAgICAgc2F2ZV9zdGRvdXQgPSBzeXMuc3Rkb3V0Ci0gICAgICAgICMgU2F2ZSB2YXJpb3VzIHRoaW5ncyB0aGF0IHRlc3RzIG1heSBtZXNzIHVwIHNvIHdlIGNhbiByZXN0b3JlCi0gICAgICAgICMgdGhlbSBhZnRlcndhcmQuCi0gICAgICAgIHNhdmVfZW52aXJvbiA9IGRpY3Qob3MuZW52aXJvbikKLSAgICAgICAgc2F2ZV9hcmd2ID0gc3lzLmFyZ3ZbOl0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgY2ZwOgotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBjZnAKLSAgICAgICAgICAgICAgICBwcmludCh0ZXN0KSAgICAgICAgICAgICAgIyBPdXRwdXQgZmlsZSBzdGFydHMgd2l0aCB0ZXN0IG5hbWUKLSAgICAgICAgICAgIGlmIHRlc3Quc3RhcnRzd2l0aCgndGVzdC4nKToKLSAgICAgICAgICAgICAgICBhYnN0ZXN0ID0gdGVzdAotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEFsd2F5cyBpbXBvcnQgaXQgZnJvbSB0aGUgdGVzdCBwYWNrYWdlCi0gICAgICAgICAgICAgICAgYWJzdGVzdCA9ICd0ZXN0LicgKyB0ZXN0CisgICAgICAgIGlmIHRlc3Quc3RhcnRzd2l0aCgndGVzdC4nKToKKyAgICAgICAgICAgIGFic3Rlc3QgPSB0ZXN0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEFsd2F5cyBpbXBvcnQgaXQgZnJvbSB0aGUgdGVzdCBwYWNrYWdlCisgICAgICAgICAgICBhYnN0ZXN0ID0gJ3Rlc3QuJyArIHRlc3QKKyAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3QsIHZlcmJvc2UsIHF1aWV0KSBhcyBlbnZpcm9ubWVudDoKICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQogICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQogICAgICAgICAgICAgdGhlX21vZHVsZSA9IGdldGF0dHIodGhlX3BhY2thZ2UsIHRlc3QpCkBAIC02NTgsNjAgKzk4MywzNiBAQAogICAgICAgICAgICAgaWYgaW5kaXJlY3RfdGVzdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBpbmRpcmVjdF90ZXN0KCkKICAgICAgICAgICAgIGlmIGh1bnRybGVha3M6Ci0gICAgICAgICAgICAgICAgcmVmbGVhayA9IGRhc2hfUih0aGVfbW9kdWxlLCB0ZXN0LCBpbmRpcmVjdF90ZXN0LCBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgaW5kaXJlY3RfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcykKICAgICAgICAgICAgIHRlc3RfdGltZSA9IHRpbWUudGltZSgpIC0gc3RhcnRfdGltZQotICAgICAgICAgICAgdGVzdF90aW1lcy5hcHBlbmQoKHRlc3RfdGltZSwgdGVzdCkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKLSAgICAgICAgICAgICMgUmVzdG9yZSB3aGF0IHdlIHNhdmVkIGlmIG5lZWRlZCwgYnV0IGFsc28gY29tcGxhaW4gaWYgdGhlIHRlc3QKLSAgICAgICAgICAgICMgY2hhbmdlZCBpdCBzbyB0aGF0IHRoZSB0ZXN0IG1heSBldmVudHVhbGx5IGdldCBmaXhlZC4KLSAgICAgICAgICAgIGlmIG5vdCBvcy5lbnZpcm9uID09IHNhdmVfZW52aXJvbjoKLSAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBvcy5lbnZpcm9uIHdhcyBtb2RpZmllZCBieSIsIHRlc3QpCi0gICAgICAgICAgICAgICAgb3MuZW52aXJvbi5jbGVhcigpCi0gICAgICAgICAgICAgICAgb3MuZW52aXJvbi51cGRhdGUoc2F2ZV9lbnZpcm9uKQotICAgICAgICAgICAgaWYgbm90IHN5cy5hcmd2ID09IHNhdmVfYXJndjoKLSAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBhcmd2IHdhcyBtb2RpZmllZCBieSIsIHRlc3QpCi0gICAgICAgICAgICAgICAgc3lzLmFyZ3ZbOl0gPSBzYXZlX2FyZ3YKICAgICBleGNlcHQgc3VwcG9ydC5SZXNvdXJjZURlbmllZCBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKICAgICAgICAgICAgIHByaW50KHRlc3QsICJza2lwcGVkIC0tIiwgbXNnKQogICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJldHVybiAtMgorICAgICAgICByZXR1cm4gUkVTT1VSQ0VfREVOSUVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQgdW5pdHRlc3QuU2tpcFRlc3QgYXMgbXNnOgogICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICBwcmludCh0ZXN0LCAic2tpcHBlZCAtLSIsIG1zZykKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gLTEKKyAgICAgICAgcmV0dXJuIFNLSVBQRUQsIHRlc3RfdGltZQogICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgcmFpc2UKICAgICBleGNlcHQgc3VwcG9ydC5UZXN0RmFpbGVkIGFzIG1zZzoKICAgICAgICAgcHJpbnQoInRlc3QiLCB0ZXN0LCAiZmFpbGVkIC0tIiwgbXNnLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICByZXR1cm4gMAorICAgICAgICByZXR1cm4gRkFJTEVELCB0ZXN0X3RpbWUKICAgICBleGNlcHQ6Ci0gICAgICAgIHR5cGUsIHZhbHVlID0gc3lzLmV4Y19pbmZvKClbOjJdCi0gICAgICAgIHByaW50KCJ0ZXN0IiwgdGVzdCwgImNyYXNoZWQgLS0iLCBzdHIodHlwZSkgKyAiOiIsIHZhbHVlLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIG1zZyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjKCkKKyAgICAgICAgcHJpbnQoInRlc3QiLCB0ZXN0LCAiY3Jhc2hlZCAtLSIsIG1zZywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgaWYgdmVyYm9zZSBvciBkZWJ1ZzoKLSAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiBGQUlMRUQsIHRlc3RfdGltZQogICAgIGVsc2U6CiAgICAgICAgIGlmIHJlZmxlYWs6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBpZiBub3QgY2ZwOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgb3V0cHV0ID0gY2ZwLmdldHZhbHVlKCkKLSAgICAgICAgZXhwZWN0ZWQgPSB0ZXN0ICsgIlxuIgotICAgICAgICBpZiBvdXRwdXQgPT0gZXhwZWN0ZWQgb3IgaHVudHJsZWFrczoKLSAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHByaW50KCJ0ZXN0IiwgdGVzdCwgInByb2R1Y2VkIHVuZXhwZWN0ZWQgb3V0cHV0OiIpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXBvcnRkaWZmKGV4cGVjdGVkLCBvdXRwdXQpCi0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIEZBSUxFRCwgdGVzdF90aW1lCisgICAgICAgIGlmIGVudmlyb25tZW50LmNoYW5nZWQ6CisgICAgICAgICAgICByZXR1cm4gRU5WX0NIQU5HRUQsIHRlc3RfdGltZQorICAgICAgICByZXR1cm4gUEFTU0VELCB0ZXN0X3RpbWUKIAogZGVmIGNsZWFudXBfdGVzdF9kcm9wcGluZ3ModGVzdG5hbWUsIHZlcmJvc2UpOgogICAgIGltcG9ydCBzaHV0aWwKQEAgLTcxOSw2ICsxMDIwLDggQEAKICAgICBpbXBvcnQgZ2MKIAogICAgICMgRmlyc3Qga2lsbCBhbnkgZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byBvcGVuIGZpbGVzIGV0Yy4KKyAgICAjIFRoaXMgY2FuIGFsc28gaXNzdWUgc29tZSBSZXNvdXJjZVdhcm5pbmdzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSBnZXQKKyAgICAjIHRyaWdnZXJlZCBkdXJpbmcgdGhlIGZvbGxvd2luZyB0ZXN0IHJ1biwgYW5kIHBvc3NpYmx5IHByb2R1Y2UgZmFpbHVyZXMuCiAgICAgZ2MuY29sbGVjdCgpCiAKICAgICAjIFRyeSB0byBjbGVhbiB1cCBqdW5rIGNvbW1vbmx5IGxlZnQgYmVoaW5kLiAgV2hpbGUgdGVzdHMgc2hvdWxkbid0IGxlYXZlCkBAIC03NzAsNiArMTA3MywxMiBAQAogICAgIGZzID0gd2FybmluZ3MuZmlsdGVyc1s6XQogICAgIHBzID0gY29weXJlZy5kaXNwYXRjaF90YWJsZS5jb3B5KCkKICAgICBwaWMgPSBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jb3B5KCkKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCB6aXBpbXBvcnQKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHpkYyA9IE5vbmUgIyBSdW4gdW5tb2RpZmllZCBvbiBwbGF0Zm9ybXMgd2l0aG91dCB6aXBpbXBvcnQgc3VwcG9ydAorICAgIGVsc2U6CisgICAgICAgIHpkYyA9IHppcGltcG9ydC5femlwX2RpcmVjdG9yeV9jYWNoZS5jb3B5KCkKICAgICBhYmNzID0ge30KICAgICBmb3IgYWJjIGluIFtnZXRhdHRyKF9hYmNvbGwsIGEpIGZvciBhIGluIF9hYmNvbGwuX19hbGxfX106CiAgICAgICAgIGlmIG5vdCBpc2Fic3RyYWN0KGFiYyk6CkBAIC03ODcsMjkgKzEwOTYsMzMgQEAKIAogICAgIGRlbHRhcyA9IFtdCiAgICAgbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lID0gaHVudHJsZWFrcworICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZuYW1lKQogICAgIHJlcGNvdW50ID0gbndhcm11cCArIG50cmFja2VkCiAgICAgcHJpbnQoImJlZ2lubmluZyIsIHJlcGNvdW50LCAicmVwZXRpdGlvbnMiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgcHJpbnQoKCIxMjM0NTY3ODkwIioocmVwY291bnQvLzEwICsgMSkpWzpyZXBjb3VudF0sIGZpbGU9c3lzLnN0ZGVycikKLSAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgYWJjcykKKyAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQogICAgIGZvciBpIGluIHJhbmdlKHJlcGNvdW50KToKLSAgICAgICAgcmMgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCisgICAgICAgIHJjX2JlZm9yZSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgcnVuX3RoZV90ZXN0KCkKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgYWJjcykKKyAgICAgICAgZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKKyAgICAgICAgcmNfYWZ0ZXIgPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCiAgICAgICAgIGlmIGkgPj0gbndhcm11cDoKLSAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQoc3lzLmdldHRvdGFscmVmY291bnQoKSAtIHJjIC0gMikKKyAgICAgICAgICAgIGRlbHRhcy5hcHBlbmQocmNfYWZ0ZXIgLSByY19iZWZvcmUpCiAgICAgcHJpbnQoZmlsZT1zeXMuc3RkZXJyKQogICAgIGlmIGFueShkZWx0YXMpOgogICAgICAgICBtc2cgPSAnJXMgbGVha2VkICVzIHJlZmVyZW5jZXMsIHN1bT0lcycgJSAodGVzdCwgZGVsdGFzLCBzdW0oZGVsdGFzKSkKICAgICAgICAgcHJpbnQobXNnLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIHJlZnJlcCA9IG9wZW4oZm5hbWUsICJhIikKLSAgICAgICAgcHJpbnQobXNnLCBmaWxlPXJlZnJlcCkKLSAgICAgICAgcmVmcmVwLmNsb3NlKCkKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgImEiKSBhcyByZWZyZXA6CisgICAgICAgICAgICBwcmludChtc2csIGZpbGU9cmVmcmVwKQorICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKICAgICAgICAgcmV0dXJuIFRydWUKICAgICByZXR1cm4gRmFsc2UKIAotZGVmIGRhc2hfUl9jbGVhbnVwKGZzLCBwcywgcGljLCBhYmNzKToKK2RlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKToKICAgICBpbXBvcnQgZ2MsIGNvcHlyZWcKICAgICBpbXBvcnQgX3N0cnB0aW1lLCBsaW5lY2FjaGUKICAgICBpbXBvcnQgdXJsbGliLnBhcnNlLCB1cmxsaWIucmVxdWVzdCwgbWltZXR5cGVzLCBkb2N0ZXN0CkBAIC04MjgsNiArMTE0MSwxMyBAQAogICAgIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUudXBkYXRlKHBzKQogICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS51cGRhdGUocGljKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IHppcGltcG9ydAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcGFzcyAjIFJ1biB1bm1vZGlmaWVkIG9uIHBsYXRmb3JtcyB3aXRob3V0IHppcGltcG9ydCBzdXBwb3J0CisgICAgZWxzZToKKyAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLnVwZGF0ZSh6ZGMpCiAKICAgICAjIGNsZWFyIHR5cGUgY2FjaGUKICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQpAQCAtODQxLDYgKzExNjEsMTIgQEAKICAgICAgICAgICAgIG9iai5fYWJjX2NhY2hlLmNsZWFyKCkKICAgICAgICAgICAgIG9iai5fYWJjX25lZ2F0aXZlX2NhY2hlLmNsZWFyKCkKIAorICAgICMgRmx1c2ggc3RhbmRhcmQgb3V0cHV0LCBzbyB0aGF0IGJ1ZmZlcmVkIGRhdGEgaXMgc2VudCB0byB0aGUgT1MgYW5kCisgICAgIyBhc3NvY2lhdGVkIFB5dGhvbiBvYmplY3RzIGFyZSByZWNsYWltZWQuCisgICAgZm9yIHN0cmVhbSBpbiAoc3lzLnN0ZG91dCwgc3lzLnN0ZGVyciwgc3lzLl9fc3Rkb3V0X18sIHN5cy5fX3N0ZGVycl9fKToKKyAgICAgICAgaWYgc3RyZWFtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc3RyZWFtLmZsdXNoKCkKKwogICAgICMgQ2xlYXIgYXNzb3J0ZWQgbW9kdWxlIGNhY2hlcy4KICAgICBfcGF0aF9jcmVhdGVkLmNsZWFyKCkKICAgICByZS5wdXJnZSgpCkBAIC04NjEsNjAgKzExODcsMTYgQEAKICAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgogICAgICAgICBzW2k6aSsxXQogCi1kZWYgcmVwb3J0ZGlmZihleHBlY3RlZCwgb3V0cHV0KToKLSAgICBpbXBvcnQgZGlmZmxpYgotICAgIHByaW50KCIqIiAqIDcwKQotICAgIGEgPSBleHBlY3RlZC5zcGxpdGxpbmVzKDEpCi0gICAgYiA9IG91dHB1dC5zcGxpdGxpbmVzKDEpCi0gICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihhPWEsIGI9YikKLSAgICB0dXBsZXMgPSBzbS5nZXRfb3Bjb2RlcygpCitkZWYgZmluZHRlc3RkaXIocGF0aD1Ob25lKToKKyAgICByZXR1cm4gcGF0aCBvciBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpcgogCi0gICAgZGVmIHBhaXIoeDAsIHgxKToKLSAgICAgICAgIyB4MDp4MSBhcmUgMC1iYXNlZCBzbGljZSBpbmRpY2VzOyBjb252ZXJ0IHRvIDEtYmFzZWQgbGluZSBpbmRpY2VzLgotICAgICAgICB4MCArPSAxCi0gICAgICAgIGlmIHgwID49IHgxOgotICAgICAgICAgICAgcmV0dXJuICJsaW5lICIgKyBzdHIoeDApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gImxpbmVzICVkLSVkIiAlICh4MCwgeDEpCi0KLSAgICBmb3Igb3AsIGEwLCBhMSwgYjAsIGIxIGluIHR1cGxlczoKLSAgICAgICAgaWYgb3AgPT0gJ2VxdWFsJzoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBlbGlmIG9wID09ICdkZWxldGUnOgotICAgICAgICAgICAgcHJpbnQoIioqKiIsIHBhaXIoYTAsIGExKSwgIm9mIGV4cGVjdGVkIG91dHB1dCBtaXNzaW5nOiIpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBhW2EwOmExXToKLSAgICAgICAgICAgICAgICBwcmludCgiLSIsIGxpbmUsIGVuZD0nJykKLQotICAgICAgICBlbGlmIG9wID09ICdyZXBsYWNlJzoKLSAgICAgICAgICAgIHByaW50KCIqKiogbWlzbWF0Y2ggYmV0d2VlbiIsIHBhaXIoYTAsIGExKSwgIm9mIGV4cGVjdGVkIiwgXAotICAgICAgICAgICAgICAgICAgIm91dHB1dCBhbmQiLCBwYWlyKGIwLCBiMSksICJvZiBhY3R1YWwgb3V0cHV0OiIpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBkaWZmbGliLm5kaWZmKGFbYTA6YTFdLCBiW2IwOmIxXSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQobGluZSwgZW5kPScnKQotCi0gICAgICAgIGVsaWYgb3AgPT0gJ2luc2VydCc6Ci0gICAgICAgICAgICBwcmludCgiKioqIiwgcGFpcihiMCwgYjEpLCAib2YgYWN0dWFsIG91dHB1dCBkb2Vzbid0IGFwcGVhciIsIFwKLSAgICAgICAgICAgICAgICAgICJpbiBleHBlY3RlZCBvdXRwdXQgYWZ0ZXIgbGluZSIsIHN0cihhMSkrIjoiKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gYltiMDpiMV06Ci0gICAgICAgICAgICAgICAgcHJpbnQoIisiLCBsaW5lLCBlbmQ9JycpCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCJnZXRfb3Bjb2RlcygpIHJldHVybmVkIGJhZCB0dXBsZT8hPyEiLCAob3AsIGEwLCBhMSwgYjAsIGIxKSkKLQotICAgIHByaW50KCIqIiAqIDcwKQotCi1kZWYgZmluZHRlc3RkaXIoKToKLSAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgICBmaWxlID0gc3lzLmFyZ3ZbMF0KLSAgICBlbHNlOgotICAgICAgICBmaWxlID0gX19maWxlX18KLSAgICB0ZXN0ZGlyID0gb3MucGF0aC5kaXJuYW1lKGZpbGUpIG9yIG9zLmN1cmRpcgotICAgIHJldHVybiB0ZXN0ZGlyCi0KLWRlZiByZW1vdmVweShuYW1lKToKLSAgICBpZiBuYW1lLmVuZHN3aXRoKCIucHkiKToKLSAgICAgICAgbmFtZSA9IG5hbWVbOi0zXQotICAgIHJldHVybiBuYW1lCitkZWYgcmVtb3ZlcHkobmFtZXMpOgorICAgIGlmIG5vdCBuYW1lczoKKyAgICAgICAgcmV0dXJuCisgICAgZm9yIGlkeCwgbmFtZSBpbiBlbnVtZXJhdGUobmFtZXMpOgorICAgICAgICBiYXNlbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQorICAgICAgICBpZiBleHQgPT0gJy5weSc6CisgICAgICAgICAgICBuYW1lc1tpZHhdID0gYmFzZW5hbWUKIAogZGVmIGNvdW50KG4sIHdvcmQpOgogICAgIGlmIG4gPT0gMToKQEAgLTk4NywzNCArMTI2OSw2IEBACiAgICAgICAgIHRlc3Rfa3F1ZXVlCiAgICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKICAgICAgICAgIiIiLAotICAgJ21hYyc6Ci0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2F0ZXhpdAotICAgICAgICB0ZXN0X2J6MgotICAgICAgICB0ZXN0X2NyeXB0Ci0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZmNudGwKLSAgICAgICAgdGVzdF9mb3JrMQotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZ3JwCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9tbWFwCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICB0ZXN0X3BvcGVuCi0gICAgICAgIHRlc3RfcG9zaXgKLSAgICAgICAgdGVzdF9wdHkKLSAgICAgICAgdGVzdF9wd2QKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICB0ZXN0X3NpZ25hbAotICAgICAgICB0ZXN0X3N1bmRyeQotICAgICAgICB0ZXN0X3RhcmZpbGUKLSAgICAgICAgIiIiLAogICAgICd1bml4d2FyZTcnOgogICAgICAgICAiIiIKICAgICAgICAgdGVzdF9lcG9sbApAQCAtMTA2Myw2ICsxMzE3LDcgQEAKICAgICAgICAgdGVzdF9jdXJzZXMKICAgICAgICAgdGVzdF9lcG9sbAogICAgICAgICB0ZXN0X2RibV9nbnUKKyAgICAgICAgdGVzdF9nZGIKICAgICAgICAgdGVzdF9sYXJnZWZpbGUKICAgICAgICAgdGVzdF9sb2NhbGUKICAgICAgICAgdGVzdF9taW5pZG9tCkBAIC0xMDk3LDE5ICsxMzUyLDYgQEAKICAgICAgICAgdGVzdF96aXBmaWxlCiAgICAgICAgIHRlc3RfemxpYgogICAgICAgICAiIiIsCi0gICAgJ2F0aGVvcyc6Ci0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X21obGliCi0gICAgICAgIHRlc3RfbW1hcAotICAgICAgICB0ZXN0X3BvbGwKLSAgICAgICAgdGVzdF9yZXNvdXJjZQotICAgICAgICAiIiIsCiAgICAgJ2N5Z3dpbic6CiAgICAgICAgICIiIgogICAgICAgICB0ZXN0X2N1cnNlcwpAQCAtMTIzNywxNSArMTQ3OSwxNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CiAgICAgICAgICAgICAgICAgIyB0ZXN0X3NxbGl0ZSBpcyBvbmx5IHJlbGlhYmxlIG9uIFdpbmRvd3Mgd2hlcmUgdGhlIGxpYnJhcnkKICAgICAgICAgICAgICAgICAjIGlzIGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uCi0gICAgICAgICAgICAgICAgV0lOX09OTFkgPSBbInRlc3RfdW5pY29kZV9maWxlIiwgInRlc3Rfd2lucmVnIiwKKyAgICAgICAgICAgICAgICBXSU5fT05MWSA9IHsidGVzdF91bmljb2RlX2ZpbGUiLCAidGVzdF93aW5yZWciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dpbnNvdW5kIiwgInRlc3Rfc3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zcWxpdGUiLCAidGVzdF9tc2lsaWIiXQotICAgICAgICAgICAgICAgIGZvciBza2lwIGluIFdJTl9PTkxZOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZChza2lwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3NxbGl0ZSIsICJ0ZXN0X21zaWxpYiJ9CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZCB8PSBXSU5fT05MWQogCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3N1bm9zNSc6CiAgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfbmlzJykKIAorICAgICAgICAgICAgaWYgc3VwcG9ydC5weXRob25faXNfb3B0aW1pemVkKCk6CisgICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoInRlc3RfZ2RiIikKKwogICAgICAgICAgICAgc2VsZi52YWxpZCA9IFRydWUKIAogICAgIGRlZiBpc3ZhbGlkKHNlbGYpOgpAQCAtMTI2MSwxNyArMTUwNSw1NCBAQAogICAgICAgICBhc3NlcnQgc2VsZi5pc3ZhbGlkKCkKICAgICAgICAgcmV0dXJuIHNlbGYuZXhwZWN0ZWQKIAorZGVmIF9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChURU1QRElSKToKKyAgICAjIFdoZW4gdGVzdHMgYXJlIHJ1biBmcm9tIHRoZSBQeXRob24gYnVpbGQgZGlyZWN0b3J5LCBpdCBpcyBiZXN0IHByYWN0aWNlCisgICAgIyB0byBrZWVwIHRoZSB0ZXN0IGZpbGVzIGluIGEgc3ViZm9sZGVyLiAgSXQgZWFzZXMgdGhlIGNsZWFudXAgb2YgbGVmdG92ZXIKKyAgICAjIGZpbGVzIHVzaW5nIGNvbW1hbmQgIm1ha2UgZGlzdGNsZWFuIi4KKyAgICBpZiBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCk6CisgICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmpvaW4oc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKSwgJ2J1aWxkJykKKyAgICAgICAgVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChURU1QRElSKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ta2RpcihURU1QRElSKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Q6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICMgRGVmaW5lIGEgd3JpdGFibGUgdGVtcCBkaXIgdGhhdCB3aWxsIGJlIHVzZWQgYXMgY3dkIHdoaWxlIHJ1bm5pbmcKKyAgICAjIHRoZSB0ZXN0cy4gVGhlIG5hbWUgb2YgdGhlIGRpciBpbmNsdWRlcyB0aGUgcGlkIHRvIGFsbG93IHBhcmFsbGVsCisgICAgIyB0ZXN0aW5nIChzZWUgdGhlIC1qIG9wdGlvbikuCisgICAgVEVTVENXRCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorCisgICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQorICAgIHJldHVybiBURU1QRElSLCBURVNUQ1dECisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgIyBSZW1vdmUgcmVncnRlc3QucHkncyBvd24gZGlyZWN0b3J5IGZyb20gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4gIFRoaXMKLSAgICAjIHByZXZlbnRzIHJlbGF0aXZlIGltcG9ydHMgZnJvbSB3b3JraW5nLCBhbmQgcmVsYXRpdmUgaW1wb3J0cyB3aWxsIHNjcmV3Ci0gICAgIyB1cCB0aGUgdGVzdGluZyBmcmFtZXdvcmsuICBFLmcuIGlmIGJvdGggdGVzdC5zdXBwb3J0IGFuZAotICAgICMgc3VwcG9ydCBhcmUgaW1wb3J0ZWQsIHRoZXkgd2lsbCBub3QgY29udGFpbiB0aGUgc2FtZSBnbG9iYWxzLCBhbmQKLSAgICAjIG11Y2ggb2YgdGhlIHRlc3RpbmcgZnJhbWV3b3JrIHJlbGllcyBvbiB0aGUgZ2xvYmFscyBpbiB0aGUKLSAgICAjIHRlc3Quc3VwcG9ydCBtb2R1bGUuCisgICAgIyBSZW1vdmUgcmVncnRlc3QucHkncyBvd24gZGlyZWN0b3J5IGZyb20gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4gRGVzcGl0ZQorICAgICMgdGhlIGVsaW1pbmF0aW9uIG9mIGltcGxpY2l0IHJlbGF0aXZlIGltcG9ydHMsIHRoaXMgaXMgc3RpbGwgbmVlZGVkIHRvCisgICAgIyBlbnN1cmUgdGhhdCBzdWJtb2R1bGVzIG9mIHRoZSB0ZXN0IHBhY2thZ2UgZG8gbm90IGluYXBwcm9wcmlhdGVseSBhcHBlYXIKKyAgICAjIGFzIHRvcC1sZXZlbCBtb2R1bGVzIGV2ZW4gd2hlbiBwZW9wbGUgKG9yIGJ1aWxkYm90cyEpIGludm9rZSByZWdydGVzdC5weQorICAgICMgZGlyZWN0bHkgaW5zdGVhZCBvZiB1c2luZyB0aGUgLW0gc3dpdGNoCiAgICAgbXlkaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKSkKICAgICBpID0gbGVuKHN5cy5wYXRoKQogICAgIHdoaWxlIGkgPj0gMDoKICAgICAgICAgaSAtPSAxCiAgICAgICAgIGlmIG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLm5vcm1wYXRoKHN5cy5wYXRoW2ldKSkgPT0gbXlkaXI6CiAgICAgICAgICAgICBkZWwgc3lzLnBhdGhbaV0KLSAgICBtYWluKCkKKworICAgICMgZmluZHRlc3RkaXIoKSBnZXRzIHRoZSBkaXJuYW1lIG91dCBvZiBfX2ZpbGVfXywgc28gd2UgaGF2ZSB0byBtYWtlIGl0CisgICAgIyBhYnNvbHV0ZSBiZWZvcmUgY2hhbmdpbmcgdGhlIHdvcmtpbmcgZGlyZWN0b3J5LgorICAgICMgRm9yIGV4YW1wbGUgX19maWxlX18gbWF5IGJlIHJlbGF0aXZlIHdoZW4gcnVubmluZyB0cmFjZSBvciBwcm9maWxlLgorICAgICMgU2VlIGlzc3VlICM5MzIzLgorICAgIF9fZmlsZV9fID0gb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKQorCisgICAgIyBzYW5pdHkgY2hlY2sKKyAgICBhc3NlcnQgX19maWxlX18gPT0gb3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKQorCisgICAgVEVNUERJUiwgVEVTVENXRCA9IF9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChURU1QRElSKQorCisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCisgICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKKyAgICAjIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCisgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgorICAgICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CmluZGV4IDA2OTljZjYuLjM3MWMzM2QgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMTIsNyArMTIsOCBAQAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHppcGZpbGUKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHN0cmlwX3B5dGhvbl9zdGRlcnIKK2Zyb20gaW1wIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IG1ha2VfbGVnYWN5X3B5Yywgc3RyaXBfcHl0aG9uX3N0ZGVycgogCiAjIEV4ZWN1dGluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gYSBzdWJwcm9jZXNzCiBkZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgpAQCAtOTAsNiArOTEsMjcgQEAKICAgICBzY3JpcHRfZmlsZS5jbG9zZSgpCiAgICAgcmV0dXJuIHNjcmlwdF9uYW1lCiAKK2RlZiBtYWtlX3ppcF9zY3JpcHQoemlwX2RpciwgemlwX2Jhc2VuYW1lLCBzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXA9Tm9uZSk6CisgICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLmV4dHNlcCsnemlwJworICAgIHppcF9uYW1lID0gb3MucGF0aC5qb2luKHppcF9kaXIsIHppcF9maWxlbmFtZSkKKyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3cnKQorICAgIGlmIG5hbWVfaW5femlwIGlzIE5vbmU6CisgICAgICAgIHBhcnRzID0gc2NyaXB0X25hbWUuc3BsaXQob3Muc2VwKQorICAgICAgICBpZiBsZW4ocGFydHMpID49IDIgYW5kIHBhcnRzWy0yXSA9PSAnX19weWNhY2hlX18nOgorICAgICAgICAgICAgbGVnYWN5X3B5YyA9IG1ha2VfbGVnYWN5X3B5Yyhzb3VyY2VfZnJvbV9jYWNoZShzY3JpcHRfbmFtZSkpCisgICAgICAgICAgICBuYW1lX2luX3ppcCA9IG9zLnBhdGguYmFzZW5hbWUobGVnYWN5X3B5YykKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbGVnYWN5X3B5YworICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQorICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcCkKKyAgICB6aXBfZmlsZS5jbG9zZSgpCisgICAgI2lmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgorICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKKyAgICAjICAgIHByaW50ICdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUKKyAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKKyAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKKyAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgbmFtZV9pbl96aXApCisKIGRlZiBtYWtlX3BrZyhwa2dfZGlyLCBpbml0X3NvdXJjZT0nJyk6CiAgICAgb3MubWtkaXIocGtnX2RpcikKICAgICBtYWtlX3NjcmlwdChwa2dfZGlyLCAnX19pbml0X18nLCBpbml0X3NvdXJjZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NzbF9jZXJ0LnBlbSBiL0xpYi90ZXN0L3NzbF9jZXJ0LnBlbQppbmRleCA5ZDdhYzIzLi40N2E3ZDdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfY2VydC5wZW0KKysrIGIvTGliL3Rlc3Qvc3NsX2NlcnQucGVtCkBAIC0xLDE0ICsxLDE1IEBACiAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNMRENDQWRZQ0FRQXdEUVlKS29aSWh2Y05BUUVFQlFBd2dhQXhDekFKQmdOVkJBWVRBbEJVTVJNd0VRWUQKLVZRUUlFd3BSZFdWbGJuTnNZVzVrTVE4d0RRWURWUVFIRXdaTWFYTmliMkV4RnpBVkJnTlZCQW9URGs1bGRYSnYKLWJtbHZMQ0JNWkdFdU1SZ3dGZ1lEVlFRTEV3OUVaWE5sYm5admJIWnBiV1Z1ZEc4eEd6QVpCZ05WQkFNVEVtSnkKLWRYUjFjeTV1WlhWeWIyNXBieTV3ZERFYk1Ca0dDU3FHU0liM0RRRUpBUllNYzJGdGNHOUFhV3RwTG1acE1CNFgKLURUazJNRGt3TlRBek5ESTBNMW9YRFRrMk1UQXdOVEF6TkRJME0xb3dnYUF4Q3pBSkJnTlZCQVlUQWxCVU1STXcKLUVRWURWUVFJRXdwUmRXVmxibk5zWVc1a01ROHdEUVlEVlFRSEV3Wk1hWE5pYjJFeEZ6QVZCZ05WQkFvVERrNWwKLWRYSnZibWx2TENCTVpHRXVNUmd3RmdZRFZRUUxFdzlFWlhObGJuWnZiSFpwYldWdWRHOHhHekFaQmdOVkJBTVQKLUVtSnlkWFIxY3k1dVpYVnliMjVwYnk1d2RERWJNQmtHQ1NxR1NJYjNEUUVKQVJZTWMyRnRjRzlBYVd0cExtWnAKLU1Gd3dEUVlKS29aSWh2Y05BUUVCQlFBRFN3QXdTQUpCQUw3K2F0eTNTMWlCQS8reXhqeHY0cTFNVVRkMWtqTncKLUw0bFlLYnB6emxtQzViZWFRWGVRMlJtR01UWFUrbUR2dXFJdGpWSE9LM0R2UEs3bFRjU0dmdFVDQXdFQUFUQU4KLUJna3Foa2lHOXcwQkFRUUZBQU5CQUZxUEVLRmprNlQ2Q0tUSHZhUWVFQXNYMC84WUhQSHFILzlBbmhTanJ3dVgKLTlFQmMwbjZiVkdoTjdYYVhkNnNKN2R5bTlzYnNXeGIrcEpkdXJua3hqeDQ9CitNSUlDVkRDQ0FiMmdBd0lCQWdJSkFOZkhPQmtacjhKT01BMEdDU3FHU0liM0RRRUJCUVVBTUY4eEN6QUpCZ05WCitCQVlUQWxoWk1SY3dGUVlEVlFRSEV3NURZWE4wYkdVZ1FXNTBhSEpoZURFak1DRUdBMVVFQ2hNYVVIbDBhRzl1CitJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjR4RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERBZUZ3MHhNREV3CitNRGd5TXpBeE5UWmFGdzB5TURFd01EVXlNekF4TlRaYU1GOHhDekFKQmdOVkJBWVRBbGhaTVJjd0ZRWURWUVFICitFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrCitZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3CitnWWtDZ1lFQTIxdlQ1aXNxN0Y2OGFtWXV1TnBTRmxLRFByTVVDYTRZV1lxWlJ0Mk9aKy8zTkthWjJ4QWlTd3I3Cis2TXJRRjcwdDVuTGJTUHBxRTUrNVZyUzU4U1krZy9zWExpRmQ2QXBsSDF3Slp3aDc4RG9mYkZZWFVnZ2t0Rk10CitwVHlpWDhqdFA2NmJrY1BrREFEQTA4OVJJMVRRUjZDYStuN0hGYTdjMWZhYlZWNmkzemtDQXdFQUFhTVlNQll3CitGQVlEVlIwUkJBMHdDNElKYkc5allXeG9iM04wTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUhQY3RRQkVRNHdkCitCSjYrSmNwSXJhb3BMbjhCR2hiak5XajQwbW1ScVdCL05BV0Y2TTVuZTdLcEdBdTd0TGVHNGhiMXpMYWxkSzhHCitseHkyR1BTUkY2TEZTNDhkcEVqMkhiTXYybnZ2Nnh4YWxETUo5K0RpY1dnQUtUUTZiY1gyajNHVWtDUjBnL1QxCitDUmxOQkFBbHZoS3pPN0NscGY5bDBZS0JFZnJhSkJ5WAogLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX2tleS5wZW0gYi9MaWIvdGVzdC9zc2xfa2V5LnBlbQppbmRleCAyMzlhZDY2Li4zZmQzYmJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zc2xfa2V5LnBlbQorKysgYi9MaWIvdGVzdC9zc2xfa2V5LnBlbQpAQCAtMSw5ICsxLDE2IEBACi0tLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCi1NSUlCUEFJQkFBSkJBTDcrYXR5M1MxaUJBLyt5eGp4djRxMU1VVGQxa2pOd0w0bFlLYnB6emxtQzViZWFRWGVRCi0yUm1HTVRYVSttRHZ1cUl0alZIT0szRHZQSzdsVGNTR2Z0VUNBd0VBQVFKQkFMamtLK2pjMitpaWhJOThyaUVGCi1vdWRta056aVNSVFlqbndqeDhtQ29BalBXdmlCM2M3NDJlTzNGRzQvc29pMWpEOUE1YWxpaEVPWGZVemxvZW5yCi04SUVDSVFEM0I1KzBsKzY4QkEvNmQ3NmlVTnFBQVY4ZGpHVHp2eG5DeHljbnhQUXlkUUloQU1YdDR0clVJM25jCi1hK1U4WUwySFBGQTNnbWhCc1NJQ2JxMk9wdE9Dbk03aEFpRUE2WGkzSklRRUNvYjhZd2tSajI5RFUzLzRXWUQ3Ci1XTFBnc1Fwd28xR3VTcEVDSUNHc25XSDVvYWVEOXQ5amJGb1NmaEp2djBJWm14ZGNMcFJjcHNscGVXQkJBaUVBCi02LzVCOEowR0hkSnE4OUZId0VHL0gyZVZWVVl1NXkvYUQ2c2djbSswQXZnPQotLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU50YjArWXJLdXhldkdwbQorTHJqYVVoWlNnejZ6RkFtdUdGbUttVWJkam1mdjl6U21tZHNRSWtzSysrakswQmU5TGVaeTIwajZhaE9mdVZhMAordWZFbVBvUDdGeTRoWGVnS1pSOWNDV2NJZS9BNkgyeFdGMUlJSkxSVExhVThvbC9JN1QrdW01SEQ1QXdBd05QUAorVVNOVTBFZWdtdnAreHhXdTNOWDJtMVZlb3Q4NUFnTUJBQUVDZ1lBM1pkWjY3M1gwb2V4RmxxN0FBbXJ1dGtIdAorQ0w3THZ3cnBPaWFCamh5VHhUZVNOV3p2dFFCa0lVOERPSTBiSWF6QTRVcmVBRmZmd3R2RXVQbW9uRGIzRitJcQorU01BdTQyWGNHeVZaRWwrZ0hsVFBVOVhSWDduVE9YVnQrTWxSUlJ4TDZ0OUdrR2ZVQVhJM1h4SkRYVzNjMHZCSworVUw5eHFEOGNPUlhPZkUwNnJRSkJBUDhtRVgxRVJrUjY0UHRzb2U0MjgxdmpUbE5mSWJzN05NUGtVbnJuOU4vWQorQkxoak5JZlEzSEZaRzhCVE1MZlg3a0NTOUQ1OTNEVzV0VjRaOUJQL2M2Y0NRUURjRnpDY1ZBck5oMkpTeXdPUQorWmZUZlJiSmcvWjVMdDlGa25ndjFtZWVHTlBnSU1MTjhTZzY3OXBBT09XbXpkTU8zVjcwNnJOUHpTVk1NRTdFNQorb1BJZkFrRUE4cERkZGFyUDV0Q3ZUVGdVcG1URmJha20wS29UWm0yK0Z6SGNuQTRqUmgrWE5UalRPdjk4WTZJaworZU81ZDFabktYc2VXdmtabmNRZ3hmZG5NcXFwajV3SkFjTnEvUlZuZTFEYllsd1djaFQyU2k2NU1ZbW1KOHQrRgorMG1jc1VMcWpPbkVNd2Y1ZStwdHE1THp3YnlySFpZcTVGTms3b2N1ZlB2L1pRcmNTU0MrY0Z3SkJBS3ZPSkJ5UworeDU2cXlHZVpMT1FsV1MySlMzS0pvNTlYdUxGR3FjYmdOOU9tOXhGYTQxWWI0TjlOdnBsRml2c3ZaZHczbTFRLworU1BJWFF1VDhSTVBEVk5RPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkgYi9MaWIvdGVzdC9zc2xfc2VydmVycy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2MwNTQyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKQEAgLTAsMCArMSwxODkgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNzbAoraW1wb3J0IHBwcmludAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHVybGxpYi5wYXJzZQorIyBSZW5hbWUgSFRUUFNlcnZlciB0byBfSFRUUFNlcnZlciBzbyBhcyB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBIVFRQU1NlcnZlci4KK2Zyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IChIVFRQU2VydmVyIGFzIF9IVFRQU2VydmVyLAorICAgIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlciwgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcikKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Cit0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInRocmVhZGluZyIpCisKK2hlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisKK0hPU1QgPSBzdXBwb3J0LkhPU1QKK0NFUlRGSUxFID0gb3MucGF0aC5qb2luKGhlcmUsICdrZXljZXJ0LnBlbScpCisKKyMgVGhpcyBvbmUncyBiYXNlZCBvbiBIVFRQU2VydmVyLCB3aGljaCBpcyBiYXNlZCBvbiBTb2NrZXRTZXJ2ZXIKKworY2xhc3MgSFRUUFNTZXJ2ZXIoX0hUVFBTZXJ2ZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBoYW5kbGVyX2NsYXNzLCBjb250ZXh0KToKKyAgICAgICAgX0hUVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgc2VydmVyX2FkZHJlc3MsIGhhbmRsZXJfY2xhc3MpCisgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8JXMgJXM6JXM+JyAlCisgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9uYW1lLAorICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlcl9wb3J0KSkKKworICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGlzIHRvIHdyYXAgc29ja2V0IHdpdGggU1NMCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQorICAgICAgICAgICAgc3NsY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICAjIHNvY2tldCBlcnJvcnMgYXJlIHNpbGVuY2VkIGJ5IHRoZSBjYWxsZXIsIHByaW50IHRoZW0gaGVyZQorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkdvdCBhbiBlcnJvcjpcbiVzXG4iICUgZSkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzc2xjb25uLCBhZGRyCisKK2NsYXNzIFJvb3RlZEhUVFBSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgICMgbmVlZCB0byBvdmVycmlkZSB0cmFuc2xhdGVfcGF0aCB0byBnZXQgYSBrbm93biByb290LAorICAgICMgaW5zdGVhZCBvZiB1c2luZyBvcy5jdXJkaXIsIHNpbmNlIHRoZSB0ZXN0IGNvdWxkIGJlCisgICAgIyBydW4gZnJvbSBhbnl3aGVyZQorCisgICAgc2VydmVyX3ZlcnNpb24gPSAiVGVzdEhUVFBTLzEuMCIKKyAgICByb290ID0gaGVyZQorICAgICMgQXZvaWQgaGFuZ2luZyB3aGVuIGEgcmVxdWVzdCBnZXRzIGludGVycnVwdGVkIGJ5IHRoZSBjbGllbnQKKyAgICB0aW1lb3V0ID0gNQorCisgICAgZGVmIHRyYW5zbGF0ZV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICAiIiJUcmFuc2xhdGUgYSAvLXNlcGFyYXRlZCBQQVRIIHRvIHRoZSBsb2NhbCBmaWxlbmFtZSBzeW50YXguCisKKyAgICAgICAgQ29tcG9uZW50cyB0aGF0IG1lYW4gc3BlY2lhbCB0aGluZ3MgdG8gdGhlIGxvY2FsIGZpbGUgc3lzdGVtCisgICAgICAgIChlLmcuIGRyaXZlIG9yIGRpcmVjdG9yeSBuYW1lcykgYXJlIGlnbm9yZWQuICAoWFhYIFRoZXkgc2hvdWxkCisgICAgICAgIHByb2JhYmx5IGJlIGRpYWdub3NlZC4pCisKKyAgICAgICAgIiIiCisgICAgICAgICMgYWJhbmRvbiBxdWVyeSBwYXJhbWV0ZXJzCisgICAgICAgIHBhdGggPSB1cmxsaWIucGFyc2UudXJscGFyc2UocGF0aClbMl0KKyAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgodXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkpCisgICAgICAgIHdvcmRzID0gcGF0aC5zcGxpdCgnLycpCisgICAgICAgIHdvcmRzID0gZmlsdGVyKE5vbmUsIHdvcmRzKQorICAgICAgICBwYXRoID0gc2VsZi5yb290CisgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgorICAgICAgICAgICAgZHJpdmUsIHdvcmQgPSBvcy5wYXRoLnNwbGl0ZHJpdmUod29yZCkKKyAgICAgICAgICAgIGhlYWQsIHdvcmQgPSBvcy5wYXRoLnNwbGl0KHdvcmQpCisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHBhdGgsIHdvcmQpCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgICMgd2Ugb3ZlcnJpZGUgdGhpcyB0byBzdXBwcmVzcyBsb2dnaW5nIHVubGVzcyAidmVyYm9zZSIKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlciAoJXM6JWQgJXMpOlxuICAgWyVzXSAlc1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnNlcnZlci5zZXJ2ZXJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0LmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfZGF0ZV90aW1lX3N0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0JWFyZ3MpKQorCisKK2NsYXNzIFN0YXRzUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgIiIiRXhhbXBsZSBIVFRQIHJlcXVlc3QgaGFuZGxlciB3aGljaCByZXR1cm5zIFNTTCBzdGF0aXN0aWNzIG9uIEdFVAorICAgIHJlcXVlc3RzLgorICAgICIiIgorCisgICAgc2VydmVyX3ZlcnNpb24gPSAiU3RhdHNIVFRQUy8xLjAiCisKKyAgICBkZWYgZG9fR0VUKHNlbGYsIHNlbmRfYm9keT1UcnVlKToKKyAgICAgICAgIiIiU2VydmUgYSBHRVQgcmVxdWVzdC4iIiIKKyAgICAgICAgc29jayA9IHNlbGYucmZpbGUucmF3Ll9zb2NrCisgICAgICAgIGNvbnRleHQgPSBzb2NrLmNvbnRleHQKKyAgICAgICAgYm9keSA9IHBwcmludC5wZm9ybWF0KGNvbnRleHQuc2Vzc2lvbl9zdGF0cygpKQorICAgICAgICBib2R5ID0gYm9keS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LUxlbmd0aCIsIHN0cihsZW4oYm9keSkpKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgaWYgc2VuZF9ib2R5OgorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQorCisgICAgZGVmIGRvX0hFQUQoc2VsZik6CisgICAgICAgICIiIlNlcnZlIGEgSEVBRCByZXF1ZXN0LiIiIgorICAgICAgICBzZWxmLmRvX0dFVChzZW5kX2JvZHk9RmFsc2UpCisKKyAgICBkZWYgbG9nX3JlcXVlc3Qoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIubG9nX3JlcXVlc3Qoc2VsZiwgZm9ybWF0LCAqYXJncykKKworCitjbGFzcyBIVFRQU1NlcnZlclRocmVhZCh0aHJlYWRpbmcuVGhyZWFkKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250ZXh0LCBob3N0PUhPU1QsIGhhbmRsZXJfY2xhc3M9Tm9uZSk6CisgICAgICAgIHNlbGYuZmxhZyA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBIVFRQU1NlcnZlcigoaG9zdCwgMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9jbGFzcyBvciBSb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkKKyAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2ZXIuc2VydmVyX3BvcnQKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmRhZW1vbiA9IFRydWUKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyAlcz4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLnNlcnZlcikKKworICAgIGRlZiBzdGFydChzZWxmLCBmbGFnPU5vbmUpOgorICAgICAgICBzZWxmLmZsYWcgPSBmbGFnCisgICAgICAgIHRocmVhZGluZy5UaHJlYWQuc3RhcnQoc2VsZikKKworICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZmxhZzoKKyAgICAgICAgICAgIHNlbGYuZmxhZy5zZXQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZV9mb3JldmVyKDAuMDUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKKworCitkZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgY2VydGZpbGU9Q0VSVEZJTEUsIGhvc3Q9SE9TVCwgaGFuZGxlcl9jbGFzcz1Ob25lKToKKyAgICAjIHdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKKyAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSkKKyAgICBzZXJ2ZXIgPSBIVFRQU1NlcnZlclRocmVhZChjb250ZXh0LCBob3N0LCBoYW5kbGVyX2NsYXNzKQorICAgIGZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgIHNlcnZlci5zdGFydChmbGFnKQorICAgIGZsYWcud2FpdCgpCisgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc3RvcHBpbmcgSFRUUFMgc2VydmVyXG4nKQorICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ2pvaW5pbmcgSFRUUFMgdGhyZWFkXG4nKQorICAgICAgICBzZXJ2ZXIuam9pbigpCisgICAgY2FzZS5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgcmV0dXJuIHNlcnZlcgorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoCisgICAgICAgIGRlc2NyaXB0aW9uPSdSdW4gYSB0ZXN0IEhUVFBTIHNlcnZlci4gJworICAgICAgICAgICAgICAgICAgICAnQnkgZGVmYXVsdCwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIHNlcnZlZC4nKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1wJywgJy0tcG9ydCcsIHR5cGU9aW50LCBkZWZhdWx0PTQ0MzMsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwb3J0IHRvIGxpc3RlbiBvbiAoZGVmYXVsdDogJShkZWZhdWx0KXMpJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zZScsIGRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBoZWxwPSdiZSBsZXNzIHZlcmJvc2UnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc3RhdHMnLCBkZXN0PSd1c2Vfc3RhdHNfaGFuZGxlcicsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdhbHdheXMgcmV0dXJuIHN0YXRzIHBhZ2UnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBzdXBwb3J0LnZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBpZiBhcmdzLnVzZV9zdGF0c19oYW5kbGVyOgorICAgICAgICBoYW5kbGVyX2NsYXNzID0gU3RhdHNSZXF1ZXN0SGFuZGxlcgorICAgIGVsc2U6CisgICAgICAgIGhhbmRsZXJfY2xhc3MgPSBSb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIKKyAgICAgICAgaGFuZGxlcl9jbGFzcy5yb290ID0gb3MuZ2V0Y3dkKCkKKyAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorCisgICAgc2VydmVyID0gSFRUUFNTZXJ2ZXIoKCIiLCBhcmdzLnBvcnQpLCBoYW5kbGVyX2NsYXNzLCBjb250ZXh0KQorICAgIGlmIGFyZ3MudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkxpc3RlbmluZyBvbiBodHRwczovL2xvY2FsaG9zdDp7MC5wb3J0fSIuZm9ybWF0KGFyZ3MpKQorICAgIHNlcnZlci5zZXJ2ZV9mb3JldmVyKDAuMSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weSBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQppbmRleCAwOTYyMmRkLi5mY2EzOGMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CkBAIC0xNzIsNiArMTcyLDkgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnJywgJ2ZpbmQnLCAneHgnLCAxLCAxKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICcnLCAnZmluZCcsICd4eCcsIHN5cy5tYXhzaXplLCAwKQogCisgICAgICAgICMgaXNzdWUgNzQ1OAorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhYicsICdmaW5kJywgJ3h4eCcsIHN5cy5tYXhzaXplICsgMSwgMCkKKwogICAgICAgICAjIEZvciBhIHZhcmlldHkgb2YgY29tYmluYXRpb25zLAogICAgICAgICAjICAgIHZlcmlmeSB0aGF0IHN0ci5maW5kKCkgbWF0Y2hlcyBfX2NvbnRhaW5zX18KICAgICAgICAgIyAgICBhbmQgdGhhdCB0aGUgZm91bmQgc3Vic3RyaW5nIGlzIHJlYWxseSBhdCB0aGF0IGxvY2F0aW9uCkBAIC0xOTEsOCArMTk0LDcgQEAKICAgICAgICAgICAgICAgICBsb2MgPSBpLmZpbmQoaikKICAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCiAgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKLSAgICAgICAgICAgICAgICBpZiByMSAhPSByMjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyMSwgcjIpCiAgICAgICAgICAgICAgICAgaWYgbG9jICE9IC0xOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlbbG9jOmxvYytsZW4oaildLCBqKQogCkBAIC0yMTYsNiArMjE4LDMyIEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLCAncmZpbmQnKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3JmaW5kJywgNDIpCiAKKyAgICAgICAgIyBGb3IgYSB2YXJpZXR5IG9mIGNvbWJpbmF0aW9ucywKKyAgICAgICAgIyAgICB2ZXJpZnkgdGhhdCBzdHIucmZpbmQoKSBtYXRjaGVzIF9fY29udGFpbnNfXworICAgICAgICAjICAgIGFuZCB0aGF0IHRoZSBmb3VuZCBzdWJzdHJpbmcgaXMgcmVhbGx5IGF0IHRoYXQgbG9jYXRpb24KKyAgICAgICAgY2hhcnNldCA9IFsnJywgJ2EnLCAnYicsICdjJ10KKyAgICAgICAgZGlnaXRzID0gNQorICAgICAgICBiYXNlID0gbGVuKGNoYXJzZXQpCisgICAgICAgIHRlc3RzdHJpbmdzID0gc2V0KCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoYmFzZSAqKiBkaWdpdHMpOgorICAgICAgICAgICAgZW50cnkgPSBbXQorICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoZGlnaXRzKToKKyAgICAgICAgICAgICAgICBpLCBtID0gZGl2bW9kKGksIGJhc2UpCisgICAgICAgICAgICAgICAgZW50cnkuYXBwZW5kKGNoYXJzZXRbbV0pCisgICAgICAgICAgICB0ZXN0c3RyaW5ncy5hZGQoJycuam9pbihlbnRyeSkpCisgICAgICAgIHRlc3RzdHJpbmdzID0gW3NlbGYuZml4dHlwZSh0cykgZm9yIHRzIGluIHRlc3RzdHJpbmdzXQorICAgICAgICBmb3IgaSBpbiB0ZXN0c3RyaW5nczoKKyAgICAgICAgICAgIGZvciBqIGluIHRlc3RzdHJpbmdzOgorICAgICAgICAgICAgICAgIGxvYyA9IGkucmZpbmQoaikKKyAgICAgICAgICAgICAgICByMSA9IChsb2MgIT0gLTEpCisgICAgICAgICAgICAgICAgcjIgPSBqIGluIGkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKKyAgICAgICAgICAgICAgICBpZiBsb2MgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaVtsb2M6bG9jK2xlbihqKV0sIGopCisKKyAgICAgICAgIyBpc3N1ZSA3NDU4CisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2FiJywgJ3JmaW5kJywgJ3h4eCcsIHN5cy5tYXhzaXplICsgMSwgMCkKKwogICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2FiY2RlZmdoaWFiYycsICdpbmRleCcsICcnKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMywgJ2FiY2RlZmdoaWFiYycsICdpbmRleCcsICdkZWYnKQpAQCAtMTA3MSw3ICsxMDk5LDYgQEAKIAogICAgICAgICBsb25ndmFsdWUgPSBzeXMubWF4c2l6ZSArIDEwCiAgICAgICAgIHNsb25ndmFsdWUgPSBzdHIobG9uZ3ZhbHVlKQotICAgICAgICBpZiBzbG9uZ3ZhbHVlWy0xXSBpbiAoIkwiLCJsIik6IHNsb25ndmFsdWUgPSBzbG9uZ3ZhbHVlWzotMV0KICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgNDInLCAnJTNsZCcsICdfX21vZF9fJywgNDIpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnNDInLCAnJWQnLCAnX19tb2RfXycsIDQyLjApCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChzbG9uZ3ZhbHVlLCAnJWQnLCAnX19tb2RfXycsIGxvbmd2YWx1ZSkKQEAgLTEwODYsNyArMTExMyw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJyUoZm9vJywgJ19fbW9kX18nLCB7fSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzICUoYmFyKXMnLCAnX19tb2RfXycsICgnZm9vJywgNDIpKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVkJywgJ19fbW9kX18nLCAiNDIiKSAjIG5vdCBudW1lcmljCi0gICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWQnLCAnX19tb2RfXycsICg0MiswaikpICMgbm8gaW50L2xvbmcgY29udmVyc2lvbiBwcm92aWRlZAorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVkJywgJ19fbW9kX18nLCAoNDIrMGopKSAjIG5vIGludCBjb252ZXJzaW9uIHByb3ZpZGVkCiAKICAgICAgICAgIyBhcmd1bWVudCBuYW1lcyB3aXRoIHByb3Blcmx5IG5lc3RlZCBicmFja2V0cyBhcmUgc3VwcG9ydGVkCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYmFyJywgJyUoKGZvbykpcycsICdfX21vZF9fJywgeycoZm9vKSc6ICdiYXInfSkKQEAgLTExMDQsNyArMTEzMSw3IEBACiAgICAgICAgICAgICBmb3JtYXQgPSAnJSUuJWlmJyAlIHByZWMKICAgICAgICAgICAgIHZhbHVlID0gMC4wMQogICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoNjApOgotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKiAzLjE0MTU5MjY1NSAvIDMuMCAqIDEwLjAKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICogMy4xNDE1OTI2NTM1OSAvIDMuMCAqIDEwLjAKICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrY2FsbChmb3JtYXQsICJfX21vZF9fIiwgdmFsdWUpCiAKICAgICBkZWYgdGVzdF9pbnBsYWNlX3Jld3JpdGVzKHNlbGYpOgpAQCAtMTE5OCwxOSArMTIyNSwxOSBAQAogICAgICAgICAjIGlzc3VlIDExODI4CiAgICAgICAgIHMgPSAnaGVsbG8nCiAgICAgICAgIHggPSAneCcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ15maW5kXCgnLCBzLmZpbmQsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCByJ15maW5kXCgnLCBzLmZpbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidecmZpbmRcKCcsIHMucmZpbmQsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCByJ15yZmluZFwoJywgcy5yZmluZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ15pbmRleFwoJywgcy5pbmRleCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIHInXmluZGV4XCgnLCBzLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXnJpbmRleFwoJywgcy5yaW5kZXgsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCByJ15yaW5kZXhcKCcsIHMucmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXmNvdW50XCgnLCBzLmNvdW50LAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcideY291bnRcKCcsIHMuY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidec3RhcnRzd2l0aFwoJywgcy5zdGFydHN3aXRoLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidec3RhcnRzd2l0aFwoJywgcy5zdGFydHN3aXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXmVuZHN3aXRoXCgnLCBzLmVuZHN3aXRoLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcideZW5kc3dpdGhcKCcsIHMuZW5kc3dpdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjFlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKQEAgLTAsMCArMSwyNCBAQAorIiIiV2hlbiBjYWxsZWQgYXMgYSBzY3JpcHQsIHByaW50IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIG9wZW4KK2ZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworCit0cnk6CisgICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorZXhjZXB0OgorICAgIF9NQVhGRCA9IDI1NgorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGZkcyA9IFtdCisgICAgZm9yIGZkIGluIHJhbmdlKDAsIF9NQVhGRCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZmQpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVCQURGOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICByYWlzZQorICAgICAgICAjIElnbm9yZSBTb2xhcmlzIGRvb3IgZmlsZXMKKyAgICAgICAgaWYgc3Quc3RfbW9kZSAmIDB4RjAwMCAhPSAweGQwMDA6CisgICAgICAgICAgICBmZHMuYXBwZW5kKGZkKQorICAgIHByaW50KCcsJy5qb2luKG1hcChzdHIsIGZkcykpKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvaW5wdXRfcmVhZGVyLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvaW5wdXRfcmVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYzMxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9pbnB1dF9yZWFkZXIucHkKQEAgLTAsMCArMSw3IEBACisiIiJXaGVuIGNhbGxlZCBhcyBhIHNjcmlwdCwgY29uc3VtZXMgdGhlIGlucHV0IiIiCisKK2ltcG9ydCBzeXMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmb3IgbGluZSBpbiBzeXMuc3RkaW46CisgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3FjYXQucHkgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9xY2F0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNmY5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9xY2F0LnB5CkBAIC0wLDAgKzEsNyBAQAorIiIiV2hlbiByYW4gYXMgYSBzY3JpcHQsIHNpbXVsYXRlcyBjYXQgd2l0aCBubyBhcmd1bWVudHMuIiIiCisKK2ltcG9ydCBzeXMKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmb3IgbGluZSBpbiBzeXMuc3RkaW46CisgICAgICAgIHN5cy5zdGRvdXQud3JpdGUobGluZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3FncmVwLnB5IGIvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvcWdyZXAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5MDYzNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL3FncmVwLnB5CkBAIC0wLDAgKzEsMTAgQEAKKyIiIldoZW4gY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHNpbXVsYXRlZCBmZ3JlcCB3aXRoIGEgc2luZ2xlCithcmd1bWVudCBhbmQgbm8gb3B0aW9ucy4iIiIKKworaW1wb3J0IHN5cworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHBhdHRlcm4gPSBzeXMuYXJndlsxXQorICAgIGZvciBsaW5lIGluIHN5cy5zdGRpbjoKKyAgICAgICAgaWYgcGF0dGVybiBpbiBsaW5lOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShsaW5lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi90ZXN0L3N1cHBvcnQucHkKaW5kZXggYmVmNzE2MS4uYTllMWI3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VwcG9ydC5weQorKysgYi9MaWIvdGVzdC9zdXBwb3J0LnB5CkBAIC0xMCwyOSArMTAsNDEgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKIGltcG9ydCBvcwotaW1wb3J0IHJlCiBpbXBvcnQgcGxhdGZvcm0KIGltcG9ydCBzaHV0aWwKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBpbXAKK2ltcG9ydCB0aW1lCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworCit0cnk6CisgICAgaW1wb3J0IF90aHJlYWQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGhyZWFkID0gTm9uZQogCiBfX2FsbF9fID0gWwogICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwgImltcG9ydF9tb2R1bGUiLAogICAgICJ2ZXJib3NlIiwgInVzZV9yZXNvdXJjZXMiLCAibWF4X21lbXVzZSIsICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwKICAgICAiZ2V0X29yaWdpbmFsX3N0ZG91dCIsICJ1bmxvYWQiLCAidW5saW5rIiwgInJtdHJlZSIsICJmb3JnZXQiLAogICAgICJpc19yZXNvdXJjZV9lbmFibGVkIiwgInJlcXVpcmVzIiwgImZpbmRfdW51c2VkX3BvcnQiLCAiYmluZF9wb3J0IiwKLSAgICAiZmNtcCIsICJpc19qeXRob24iLCAiVEVTVEZOIiwgIkhPU1QiLCAiRlVaWiIsICJmaW5kZmlsZSIsICJ2ZXJpZnkiLAotICAgICJ2ZXJlcSIsICJzb3J0ZGljdCIsICJjaGVja19zeW50YXhfZXJyb3IiLCAib3Blbl91cmxyZXNvdXJjZSIsCisgICAgImZjbXAiLCAiaXNfanl0aG9uIiwgIlRFU1RGTiIsICJIT1NUIiwgIkZVWloiLCAiU0FWRURDV0QiLCAidGVtcF9jd2QiLAorICAgICJmaW5kZmlsZSIsICJzb3J0ZGljdCIsICJjaGVja19zeW50YXhfZXJyb3IiLCAib3Blbl91cmxyZXNvdXJjZSIsCiAgICAgImNoZWNrX3dhcm5pbmdzIiwgIkNsZWFuSW1wb3J0IiwgIkVudmlyb25tZW50VmFyR3VhcmQiLAogICAgICJUcmFuc2llbnRSZXNvdXJjZSIsICJjYXB0dXJlZF9vdXRwdXQiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKICAgICAidGltZV9vdXQiLCAic29ja2V0X3BlZXJfcmVzZXQiLCAiaW9lcnJvcl9wZWVyX3Jlc2V0IiwKLSAgICAicnVuX3dpdGhfbG9jYWxlIiwgInRyYW5zaWVudF9pbnRlcm5ldCIsCisgICAgInJ1bl93aXRoX2xvY2FsZSIsICd0ZW1wX3VtYXNrJywgInRyYW5zaWVudF9pbnRlcm5ldCIsCiAgICAgInNldF9tZW1saW1pdCIsICJiaWdtZW10ZXN0IiwgImJpZ2FkZHJzcGFjZXRlc3QiLCAiQmFzaWNUZXN0UnVubmVyIiwKICAgICAicnVuX3VuaXR0ZXN0IiwgInJ1bl9kb2N0ZXN0IiwgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsCiAgICAgInJlYXBfY2hpbGRyZW4iLCAiY3B5dGhvbl9vbmx5IiwgImNoZWNrX2ltcGxfZGV0YWlsIiwgImdldF9hdHRyaWJ1dGUiLAotICAgIF0KKyAgICAic3dhcF9pdGVtIiwgInN3YXBfYXR0ciIsICJyZXF1aXJlc19JRUVFXzc1NCIsCisgICAgIlRlc3RIYW5kbGVyIiwgIk1hdGNoZXIiLCAiY2FuX3N5bWxpbmsiLCAic2tpcF91bmxlc3Nfc3ltbGluayJdCisKIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJCYXNlIGNsYXNzIGZvciByZWdyZXNzaW9uIHRlc3QgZXhjZXB0aW9ucy4iIiIKQEAgLTE3NiwyNyArMTg4LDUwIEBACiBkZWYgdW5saW5rKGZpbGVuYW1lKToKICAgICB0cnk6CiAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgcGFzcworICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgorICAgICAgICAjIFRoZSBmaWxlbmFtZSBuZWVkIG5vdCBleGlzdC4KKyAgICAgICAgaWYgZXJyb3IuZXJybm8gbm90IGluIChlcnJuby5FTk9FTlQsIGVycm5vLkVOT1RESVIpOgorICAgICAgICAgICAgcmFpc2UKIAogZGVmIHJtdHJlZShwYXRoKToKICAgICB0cnk6CiAgICAgICAgIHNodXRpbC5ybXRyZWUocGF0aCkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgogICAgICAgICAjIFVuaXggcmV0dXJucyBFTk9FTlQsIFdpbmRvd3MgcmV0dXJucyBFU1JDSC4KLSAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRVNSQ0gpOgorICAgICAgICBpZiBlcnJvci5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRVNSQ0gpOgogICAgICAgICAgICAgcmFpc2UKIAorZGVmIG1ha2VfbGVnYWN5X3B5Yyhzb3VyY2UpOgorICAgICIiIk1vdmUgYSBQRVAgMzE0NyBweWMvcHlvIGZpbGUgdG8gaXRzIGxlZ2FjeSBweWMvcHlvIGxvY2F0aW9uLgorCisgICAgVGhlIGNob2ljZSBvZiAucHljIG9yIC5weW8gZXh0ZW5zaW9uIGlzIGRvbmUgYmFzZWQgb24gdGhlIF9fZGVidWdfXyBmbGFnCisgICAgdmFsdWUuCisKKyAgICA6cGFyYW0gc291cmNlOiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgc291cmNlIGZpbGUuICBUaGUgc291cmNlIGZpbGUKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byBleGlzdCwgaG93ZXZlciB0aGUgUEVQIDMxNDcgcHljIGZpbGUgbXVzdCBleGlzdC4KKyAgICA6cmV0dXJuOiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgbGVnYWN5IHB5YyBmaWxlLgorICAgICIiIgorICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICB1cF9vbmUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNvdXJjZSkpCisgICAgbGVnYWN5X3B5YyA9IG9zLnBhdGguam9pbih1cF9vbmUsIHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKSkKKyAgICBvcy5yZW5hbWUocHljX2ZpbGUsIGxlZ2FjeV9weWMpCisgICAgcmV0dXJuIGxlZ2FjeV9weWMKKwogZGVmIGZvcmdldChtb2RuYW1lKToKLSAgICAnJyciRm9yZ2V0IiBhIG1vZHVsZSB3YXMgZXZlciBpbXBvcnRlZCBieSByZW1vdmluZyBpdCBmcm9tIHN5cy5tb2R1bGVzIGFuZAotICAgIGRlbGV0aW5nIGFueSAucHljIGFuZCAucHlvIGZpbGVzLicnJworICAgICIiIidGb3JnZXQnIGEgbW9kdWxlIHdhcyBldmVyIGltcG9ydGVkLgorCisgICAgVGhpcyByZW1vdmVzIHRoZSBtb2R1bGUgZnJvbSBzeXMubW9kdWxlcyBhbmQgZGVsZXRlcyBhbnkgUEVQIDMxNDcgb3IKKyAgICBsZWdhY3kgLnB5YyBhbmQgLnB5byBmaWxlcy4KKyAgICAiIiIKICAgICB1bmxvYWQobW9kbmFtZSkKICAgICBmb3IgZGlybmFtZSBpbiBzeXMucGF0aDoKLSAgICAgICAgdW5saW5rKG9zLnBhdGguam9pbihkaXJuYW1lLCBtb2RuYW1lICsgJy5weWMnKSkKLSAgICAgICAgIyBEZWxldGluZyB0aGUgLnB5byBmaWxlIGNhbm5vdCBiZSB3aXRoaW4gdGhlICd0cnknIGZvciB0aGUgLnB5YyBzaW5jZQotICAgICAgICAjIHRoZSBjaGFuY2UgZXhpc3RzIHRoYXQgdGhlcmUgaXMgbm8gLnB5YyAoYW5kIHRodXMgdGhlICd0cnknIHN0YXRlbWVudAotICAgICAgICAjIGlzIGV4aXRlZCkgYnV0IHRoZXJlIGlzIGEgLnB5byBmaWxlLgotICAgICAgICB1bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIG1vZG5hbWUgKyAnLnB5bycpKQorICAgICAgICBzb3VyY2UgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbW9kbmFtZSArICcucHknKQorICAgICAgICAjIEl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZXkgZXhpc3Qgb3Igbm90LCB1bmxpbmsgYWxsIHBvc3NpYmxlCisgICAgICAgICMgY29tYmluYXRpb25zIG9mIFBFUCAzMTQ3IGFuZCBsZWdhY3kgcHljIGFuZCBweW8gZmlsZXMuCisgICAgICAgIHVubGluayhzb3VyY2UgKyAnYycpCisgICAgICAgIHVubGluayhzb3VyY2UgKyAnbycpCisgICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgdW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKIAogIyBPbiBzb21lIHBsYXRmb3Jtcywgc2hvdWxkIG5vdCBydW4gZ3VpIHRlc3QgZXZlbiBpZiBpdCBpcyBhbGxvd2VkCiAjIGluIGB1c2VfcmVzb3VyY2VzJy4KQEAgLTIzNyw3ICsyNzIsOSBAQAogICAgICIiIlJhaXNlIFJlc291cmNlRGVuaWVkIGlmIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KIAogICAgIElmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gdGhlbiBhdXRvbWF0aWNhbGx5IHJldHVybiBUcnVlLiAgVGhlCi0gICAgcG9zc2liaWxpdHkgb2YgRmFsc2UgYmVpbmcgcmV0dXJuZWQgb2NjdXJzIHdoZW4gcmVncnRlc3QucHkgaXMgZXhlY3V0aW5nLiIiIgorICAgIHBvc3NpYmlsaXR5IG9mIEZhbHNlIGJlaW5nIHJldHVybmVkIG9jY3VycyB3aGVuIHJlZ3J0ZXN0LnB5IGlzCisgICAgZXhlY3V0aW5nLgorICAgICIiIgogICAgIGlmIHJlc291cmNlID09ICdndWknIGFuZCBub3QgX2lzX2d1aV9hdmFpbGFibGUoKToKICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCB1c2UgdGhlICdndWknIHJlc291cmNlIikKICAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCkBAIC0zNjIsNiArMzk5LDExIEBACiAgICAgICAgIHJldHVybiAobGVuKHgpID4gbGVuKHkpKSAtIChsZW4oeCkgPCBsZW4oeSkpCiAgICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCiAKKyMgZGVjb3JhdG9yIGZvciBza2lwcGluZyB0ZXN0cyBvbiBub24tSUVFRSA3NTQgcGxhdGZvcm1zCityZXF1aXJlc19JRUVFXzc1NCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCisgICAgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAorICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorCiBpc19qeXRob24gPSBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnamF2YScpCiAKICMgRmlsZW5hbWUgdXNlZCBmb3IgdGVzdGluZwpAQCAtMzcxLDU3ICs0MTMsMTA2IEBACiBlbHNlOgogICAgIFRFU1RGTiA9ICdAdGVzdCcKIAotICAgICMgQXNzdW1pbmcgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpIT1zeXMuZ2V0ZGVmYXVsdGVuY29kaW5nKCkKLSAgICAjIFRFU1RGTl9VTklDT0RFIGlzIGEgZmlsZW5hbWUgdGhhdCBjYW4gYmUgZW5jb2RlZCB1c2luZyB0aGUKLSAgICAjIGZpbGUgc3lzdGVtIGVuY29kaW5nLCBidXQgKm5vdCogd2l0aCB0aGUgZGVmYXVsdCAoYXNjaWkpIGVuY29kaW5nCi0gICAgVEVTVEZOX1VOSUNPREUgPSAiQHRlc3QtXHhlMFx4ZjIiCi0gICAgVEVTVEZOX0VOQ09ESU5HID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCi0gICAgIyBURVNURk5fVU5FTkNPREFCTEUgaXMgYSBmaWxlbmFtZSB0aGF0IHNob3VsZCAqbm90KiBiZQotICAgICMgYWJsZSB0byBiZSBlbmNvZGVkIGJ5ICplaXRoZXIqIHRoZSBkZWZhdWx0IG9yIGZpbGVzeXN0ZW0gZW5jb2RpbmcuCi0gICAgIyBUaGlzIHRlc3QgcmVhbGx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gV2luZG93cyBOVCBwbGF0Zm9ybXMKLSAgICAjIHdoaWNoIGhhdmUgc3BlY2lhbCBVbmljb2RlIHN1cHBvcnQgaW4gcG9zaXhtb2R1bGUuCi0gICAgaWYgKG5vdCBoYXNhdHRyKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIikgb3IKLSAgICAgICAgICAgIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzNdIDwgMik6ICMgIDA9d2luMzJzIG9yIDE9OXgvTUUKLSAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gTm9uZQotICAgIGVsc2U6CisjIERpc2FtYmlndWF0ZSBURVNURk4gZm9yIHBhcmFsbGVsIHRlc3RpbmcsIHdoaWxlIGxldHRpbmcgaXQgcmVtYWluIGEgdmFsaWQKKyMgbW9kdWxlIG5hbWUuCitURVNURk4gPSAie31fe31fdG1wIi5mb3JtYXQoVEVTVEZOLCBvcy5nZXRwaWQoKSkKKworCisjIFRFU1RGTl9VTklDT0RFIGlzIGEgbm9uLWFzY2lpIGZpbGVuYW1lCitURVNURk5fVU5JQ09ERSA9IFRFU1RGTiArICItXHhlMFx4ZjJcdTAyNThcdTAxNDFcdTAxMWYiCitpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgIyBJbiBNYWMgT1MgWCdzIFZGUyBBUEkgZmlsZSBuYW1lcyBhcmUsIGJ5IGRlZmluaXRpb24sIGNhbm9uaWNhbGx5CisgICAgIyBkZWNvbXBvc2VkIFVuaWNvZGUsIGVuY29kZWQgdXNpbmcgVVRGLTguIFNlZSBRQTExNzM6CisgICAgIyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tYWMvbGlicmFyeS9xYS9xYTIwMDEvcWExMTczLmh0bWwKKyAgICBpbXBvcnQgdW5pY29kZWRhdGEKKyAgICBURVNURk5fVU5JQ09ERSA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgnTkZEJywgVEVTVEZOX1VOSUNPREUpCitURVNURk5fRU5DT0RJTkcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKKworIyBURVNURk5fVU5FTkNPREFCTEUgaXMgYSBmaWxlbmFtZSAoc3RyIHR5cGUpIHRoYXQgc2hvdWxkICpub3QqIGJlIGFibGUgdG8gYmUKKyMgZW5jb2RlZCBieSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAoaW4gc3RyaWN0IG1vZGUpLiBJdCBjYW4gYmUgTm9uZSBpZiB3ZQorIyBjYW5ub3QgZ2VuZXJhdGUgc3VjaCBmaWxlbmFtZS4KK1RFU1RGTl9VTkVOQ09EQUJMRSA9IE5vbmUKK2lmIG9zLm5hbWUgaW4gKCdudCcsICdjZScpOgorICAgICMgc2tpcCB3aW4zMnMgKDApIG9yIFdpbmRvd3MgOXgvTUUgKDEpCisgICAgaWYgc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkucGxhdGZvcm0gPj0gMjoKICAgICAgICAgIyBEaWZmZXJlbnQga2luZHMgb2YgY2hhcmFjdGVycyBmcm9tIHZhcmlvdXMgbGFuZ3VhZ2VzIHRvIG1pbmltaXplIHRoZQogICAgICAgICAjIHByb2JhYmlsaXR5IHRoYXQgdGhlIHdob2xlIG5hbWUgaXMgZW5jb2RhYmxlIHRvIE1CQ1MgKGlzc3VlICM5ODE5KQogICAgICAgICBURVNURk5fVU5FTkNPREFCTEUgPSBURVNURk4gKyAiLVx1NTE3MVx1MDE0MVx1MjY2MVx1MDM2M1x1REM4MCIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBYWFggLSBOb3RlIC0gc2hvdWxkIGJlIHVzaW5nIFRFU1RGTl9FTkNPRElORyBoZXJlIC0gYnV0IGZvcgotICAgICAgICAgICAgIyBXaW5kb3dzLCAibWJjcyIgY3VycmVudGx5IGFsd2F5cyBvcGVyYXRlcyBhcyBpZiBpbgotICAgICAgICAgICAgIyBlcnJvcnM9aWdub3JlJyBtb2RlIC0gaGVuY2Ugd2UgZ2V0ICc/JyBjaGFyYWN0ZXJzIHJhdGhlciB0aGFuCi0gICAgICAgICAgICAjIHRoZSBleGNlcHRpb24uICAnTGF0aW4xJyBvcGVyYXRlcyBhcyB3ZSBleHBlY3QgLSBpZSwgZmFpbHMuCi0gICAgICAgICAgICAjIFNlZSBbIDg1MDk5NyBdIG1iY3MgZW5jb2RpbmcgaWdub3JlcyBlcnJvcnMKLSAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRS5lbmNvZGUoIkxhdGluMSIpCisgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUuZW5jb2RlKFRFU1RGTl9FTkNPRElORykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCdXQVJOSU5HOiBUaGUgZmlsZW5hbWUgJXIgQ0FOIGJlIGVuY29kZWQgYnkgdGhlIGZpbGVzeXN0ZW0uICAnCisgICAgICAgICAgICBwcmludCgnV0FSTklORzogVGhlIGZpbGVuYW1lICVyIENBTiBiZSBlbmNvZGVkIGJ5IHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICglcykuICcKICAgICAgICAgICAgICAgICAgICdVbmljb2RlIGZpbGVuYW1lIHRlc3RzIG1heSBub3QgYmUgZWZmZWN0aXZlJwotICAgICAgICAgICAgICAgICAgJSBURVNURk5fVU5FTkNPREFCTEUpCi0KLWlmIG9zLnBhdGguaXNkaXIoVEVTVEZOKToKLSAgICAjIGEgdGVzdCBmYWlsZWQgKGVnLiB0ZXN0X29zKSB3aXRob3V0IHJlbW92aW5nIFRFU1RGTiBkaXJlY3RvcnkKLSAgICBzaHV0aWwucm10cmVlKFRFU1RGTikKLQotIyBNYWtlIHN1cmUgd2UgY2FuIHdyaXRlIHRvIFRFU1RGTiwgdHJ5IGluIC90bXAgaWYgd2UgY2FuJ3QKLWZwID0gTm9uZQotdHJ5OgotICAgIGZwID0gb3BlbihURVNURk4sICd3KycpCi1leGNlcHQgSU9FcnJvcjoKLSAgICBUTVBfVEVTVEZOID0gb3MucGF0aC5qb2luKCcvdG1wJywgVEVTVEZOKQorICAgICAgICAgICAgICAgICAgJSAoVEVTVEZOX1VORU5DT0RBQkxFLCBURVNURk5fRU5DT0RJTkcpKQorICAgICAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gTm9uZQorIyBNYWMgT1MgWCBkZW5pZXMgdW5lbmNvZGFibGUgZmlsZW5hbWVzIChpbnZhbGlkIHV0Zi04KQorZWxpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6CiAgICAgdHJ5OgotICAgICAgICBmcCA9IG9wZW4oVE1QX1RFU1RGTiwgJ3crJykKLSAgICAgICAgVEVTVEZOID0gVE1QX1RFU1RGTgotICAgICAgICBkZWwgVE1QX1RFU1RGTgotICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICBwcmludCgoJ1dBUk5JTkc6IHRlc3RzIHdpbGwgZmFpbCwgdW5hYmxlIHRvIHdyaXRlIHRvOiAlcyBvciAlcycgJQotICAgICAgICAgICAgICAgIChURVNURk4sIFRNUF9URVNURk4pKSkKLWlmIGZwIGlzIG5vdCBOb25lOgotICAgIGZwLmNsb3NlKCkKLSAgICB1bmxpbmsoVEVTVEZOKQotZGVsIGZwCisgICAgICAgICMgYXNjaWkgYW5kIHV0Zi04IGNhbm5vdCBlbmNvZGUgdGhlIGJ5dGUgMHhmZgorICAgICAgICBiJ1x4ZmYnLmRlY29kZShURVNURk5fRU5DT0RJTkcpCisgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgIyAweGZmIHdpbGwgYmUgZW5jb2RlZCB1c2luZyB0aGUgc3Vycm9nYXRlIGNoYXJhY3RlciB1K0RDRkYKKyAgICAgICAgVEVTVEZOX1VORU5DT0RBQkxFID0gVEVTVEZOIFwKKyAgICAgICAgICAgICsgYictXHhmZicuZGVjb2RlKFRFU1RGTl9FTkNPRElORywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgZWxzZToKKyAgICAgICAgIyBGaWxlIHN5c3RlbSBlbmNvZGluZyAoZWcuIElTTy04ODU5LSogZW5jb2RpbmdzKSBjYW4gZW5jb2RlCisgICAgICAgICMgdGhlIGJ5dGUgMHhmZi4gU2tpcCBzb21lIHVuaWNvZGUgZmlsZW5hbWUgdGVzdHMuCisgICAgICAgIHBhc3MKKworIyBTYXZlIHRoZSBpbml0aWFsIGN3ZAorU0FWRURDV0QgPSBvcy5nZXRjd2QoKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHRlbXBfY3dkKG5hbWU9J3RlbXBjd2QnLCBxdWlldD1GYWxzZSwgcGF0aD1Ob25lKToKKyAgICAiIiIKKyAgICBDb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcmlseSBjaGFuZ2VzIHRoZSBDV0QuCisKKyAgICBBbiBleGlzdGluZyBwYXRoIG1heSBiZSBwcm92aWRlZCBhcyAqcGF0aCosIGluIHdoaWNoIGNhc2UgdGhpcworICAgIGZ1bmN0aW9uIG1ha2VzIG5vIGNoYW5nZXMgdG8gdGhlIGZpbGUgc3lzdGVtLgorCisgICAgT3RoZXJ3aXNlLCB0aGUgbmV3IENXRCBpcyBjcmVhdGVkIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgaXQncworICAgIG5hbWVkICpuYW1lKi4gSWYgKnF1aWV0KiBpcyBGYWxzZSAoZGVmYXVsdCkgYW5kIGl0J3Mgbm90IHBvc3NpYmxlIHRvCisgICAgY3JlYXRlIG9yIGNoYW5nZSB0aGUgQ1dELCBhbiBlcnJvciBpcyByYWlzZWQuICBJZiBpdCdzIFRydWUsIG9ubHkgYQorICAgIHdhcm5pbmcgaXMgcmFpc2VkIGFuZCB0aGUgb3JpZ2luYWwgQ1dEIGlzIHVzZWQuCisgICAgIiIiCisgICAgc2F2ZWRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICBpc190ZW1wb3JhcnkgPSBGYWxzZQorICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgcGF0aCA9IG5hbWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgIGlzX3RlbXBvcmFyeSA9IFRydWUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ3Rlc3RzIG1heSBmYWlsLCB1bmFibGUgdG8gY3JlYXRlIHRlbXAgQ1dEICcgKyBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgc3RhY2tsZXZlbD0zKQorICAgIHRyeToKKyAgICAgICAgb3MuY2hkaXIocGF0aCkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgaWYgbm90IHF1aWV0OgorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgd2FybmluZ3Mud2FybigndGVzdHMgbWF5IGZhaWwsIHVuYWJsZSB0byBjaGFuZ2UgdGhlIENXRCB0byAnICsgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgc3RhY2tsZXZlbD0zKQorICAgIHRyeToKKyAgICAgICAgeWllbGQgb3MuZ2V0Y3dkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBvcy5jaGRpcihzYXZlZF9kaXIpCisgICAgICAgIGlmIGlzX3RlbXBvcmFyeToKKyAgICAgICAgICAgIHJtdHJlZShuYW1lKQorCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgdGVtcF91bWFzayh1bWFzayk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJpbHkgc2V0cyB0aGUgcHJvY2VzcyB1bWFzay4iIiIKKyAgICBvbGRtYXNrID0gb3MudW1hc2sodW1hc2spCisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLnVtYXNrKG9sZG1hc2spCisKIAogZGVmIGZpbmRmaWxlKGZpbGUsIGhlcmU9X19maWxlX18sIHN1YmRpcj1Ob25lKToKICAgICAiIiJUcnkgdG8gZmluZCBhIGZpbGUgb24gc3lzLnBhdGggYW5kIHRoZSB3b3JraW5nIGRpcmVjdG9yeS4gIElmIGl0IGlzIG5vdApAQCAtNDM4LDMwICs1MjksNiBAQAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmbik6IHJldHVybiBmbgogICAgIHJldHVybiBmaWxlCiAKLWRlZiB2ZXJpZnkoY29uZGl0aW9uLCByZWFzb249J3Rlc3QgZmFpbGVkJyk6Ci0gICAgIiIiVmVyaWZ5IHRoYXQgY29uZGl0aW9uIGlzIHRydWUuIElmIG5vdCwgcmFpc2UgVGVzdEZhaWxlZC4KLQotICAgICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCByZWFzb24gY2FuIGJlIGdpdmVuIHRvIHByb3ZpZGUKLSAgICAgICBhIGJldHRlciBlcnJvciB0ZXh0LgotICAgICIiIgotCi0gICAgaWYgbm90IGNvbmRpdGlvbjoKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZChyZWFzb24pCi0KLWRlZiB2ZXJlcShhLCBiKToKLSAgICAiIiJSYWlzZSBUZXN0RmFpbGVkIGlmIGEgPT0gYiBpcyBmYWxzZS4KLQotICAgIFRoaXMgaXMgYmV0dGVyIHRoYW4gdmVyaWZ5KGEgPT0gYikgYmVjYXVzZSwgaW4gY2FzZSBvZiBmYWlsdXJlLCB0aGUKLSAgICBlcnJvciBtZXNzYWdlIGluY29ycG9yYXRlcyByZXByKGEpIGFuZCByZXByKGIpIHNvIHlvdSBjYW4gc2VlIHRoZQotICAgIGlucHV0cy4KLQotICAgIE5vdGUgdGhhdCAibm90IChhID09IGIpIiBpc24ndCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyAiYSAhPSBiIjsgdGhlCi0gICAgZm9ybWVyIGlzIHRlc3RlZC4KLSAgICAiIiIKLQotICAgIGlmIG5vdCAoYSA9PSBiKToKLSAgICAgICAgcmFpc2UgVGVzdEZhaWxlZCgiJXIgPT0gJXIiICUgKGEsIGIpKQotCiBkZWYgc29ydGRpY3QoZGljdCk6CiAgICAgIkxpa2UgcmVwcihkaWN0KSwgYnV0IGluIHNvcnRlZCBvcmRlci4iCiAgICAgaXRlbXMgPSBzb3J0ZWQoZGljdC5pdGVtcygpKQpAQCAtNDg4LDQ3ICs1NTUsMTMxIEBACiBkZWYgb3Blbl91cmxyZXNvdXJjZSh1cmwsICphcmdzLCAqKmt3KToKICAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3QsIHVybGxpYi5wYXJzZQogCi0gICAgcmVxdWlyZXMoJ3VybGZldGNoJykKKyAgICBjaGVjayA9IGt3LnBvcCgnY2hlY2snLCBOb25lKQorCiAgICAgZmlsZW5hbWUgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJsKVsyXS5zcGxpdCgnLycpWy0xXSAjICcvJzogaXQncyBVUkwhCiAKLSAgICBmb3IgcGF0aCBpbiBbb3MucGF0aC5jdXJkaXIsIG9zLnBhdGgucGFyZGlyXToKLSAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgIHJldHVybiBvcGVuKGZuLCAqYXJncywgKiprdykKKyAgICBmbiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiZGF0YSIsIGZpbGVuYW1lKQorCisgICAgZGVmIGNoZWNrX3ZhbGlkX2ZpbGUoZm4pOgorICAgICAgICBmID0gb3BlbihmbiwgKmFyZ3MsICoqa3cpCisgICAgICAgIGlmIGNoZWNrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBlbGlmIGNoZWNrKGYpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICBmLmNsb3NlKCkKKworICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKKyAgICAgICAgZiA9IGNoZWNrX3ZhbGlkX2ZpbGUoZm4pCisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gZgorICAgICAgICB1bmxpbmsoZm4pCisKKyAgICAjIFZlcmlmeSB0aGUgcmVxdWlyZW1lbnQgYmVmb3JlIGRvd25sb2FkaW5nIHRoZSBmaWxlCisgICAgcmVxdWlyZXMoJ3VybGZldGNoJykKIAogICAgIHByaW50KCdcdGZldGNoaW5nICVzIC4uLicgJSB1cmwsIGZpbGU9Z2V0X29yaWdpbmFsX3N0ZG91dCgpKQogICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgdGltZW91dD0xNSkKICAgICB0cnk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgb3V0OgorICAgICAgICB3aXRoIG9wZW4oZm4sICJ3YiIpIGFzIG91dDoKICAgICAgICAgICAgIHMgPSBmLnJlYWQoKQogICAgICAgICAgICAgd2hpbGUgczoKICAgICAgICAgICAgICAgICBvdXQud3JpdGUocykKICAgICAgICAgICAgICAgICBzID0gZi5yZWFkKCkKICAgICBmaW5hbGx5OgogICAgICAgICBmLmNsb3NlKCkKLSAgICByZXR1cm4gb3BlbihmaWxlbmFtZSwgKmFyZ3MsICoqa3cpCisKKyAgICBmID0gY2hlY2tfdmFsaWRfZmlsZShmbikKKyAgICBpZiBmIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gZgorICAgIHJhaXNlIFRlc3RGYWlsZWQoJ2ludmFsaWQgcmVzb3VyY2UgIiVzIicgJSBmbikKKwogCiBjbGFzcyBXYXJuaW5nc1JlY29yZGVyKG9iamVjdCk6CiAgICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIHdhcm5pbmdzIGxpc3QgcmV0dXJuZWQgb24KICAgICAgICBlbnRyeSB0byB0aGUgd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKSBjb250ZXh0IG1hbmFnZXIuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdhcm5pbmdzX2xpc3QpOgotICAgICAgICBzZWxmLndhcm5pbmdzID0gd2FybmluZ3NfbGlzdAorICAgICAgICBzZWxmLl93YXJuaW5ncyA9IHdhcm5pbmdzX2xpc3QKKyAgICAgICAgc2VsZi5fbGFzdCA9IDAKIAogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKLSAgICAgICAgaWYgc2VsZi53YXJuaW5nczoKLSAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYud2FybmluZ3NbLTFdLCBhdHRyKQorICAgICAgICBpZiBsZW4oc2VsZi5fd2FybmluZ3MpID4gc2VsZi5fbGFzdDoKKyAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuX3dhcm5pbmdzWy0xXSwgYXR0cikKICAgICAgICAgZWxpZiBhdHRyIGluIHdhcm5pbmdzLldhcm5pbmdNZXNzYWdlLl9XQVJOSU5HX0RFVEFJTFM6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiJXIgaGFzIG5vIGF0dHJpYnV0ZSAlciIgJSAoc2VsZiwgYXR0cikpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgd2FybmluZ3Moc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl93YXJuaW5nc1tzZWxmLl9sYXN0Ol0KKwogICAgIGRlZiByZXNldChzZWxmKToKLSAgICAgICAgZGVsIHNlbGYud2FybmluZ3NbOl0KKyAgICAgICAgc2VsZi5fbGFzdCA9IGxlbihzZWxmLl93YXJuaW5ncykKKworCitkZWYgX2ZpbHRlcndhcm5pbmdzKGZpbHRlcnMsIHF1aWV0PUZhbHNlKToKKyAgICAiIiJDYXRjaCB0aGUgd2FybmluZ3MsIHRoZW4gY2hlY2sgaWYgYWxsIHRoZSBleHBlY3RlZAorICAgIHdhcm5pbmdzIGhhdmUgYmVlbiByYWlzZWQgYW5kIHJlLXJhaXNlIHVuZXhwZWN0ZWQgd2FybmluZ3MuCisgICAgSWYgJ3F1aWV0JyBpcyBUcnVlLCBvbmx5IHJlLXJhaXNlIHRoZSB1bmV4cGVjdGVkIHdhcm5pbmdzLgorICAgICIiIgorICAgICMgQ2xlYXIgdGhlIHdhcm5pbmcgcmVnaXN0cnkgb2YgdGhlIGNhbGxpbmcgbW9kdWxlCisgICAgIyBpbiBvcmRlciB0byByZS1yYWlzZSB0aGUgd2FybmluZ3MuCisgICAgZnJhbWUgPSBzeXMuX2dldGZyYW1lKDIpCisgICAgcmVnaXN0cnkgPSBmcmFtZS5mX2dsb2JhbHMuZ2V0KCdfX3dhcm5pbmdyZWdpc3RyeV9fJykKKyAgICBpZiByZWdpc3RyeToKKyAgICAgICAgcmVnaXN0cnkuY2xlYXIoKQorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CisgICAgICAgICMgU2V0IGZpbHRlciAiYWx3YXlzIiB0byByZWNvcmQgYWxsIHdhcm5pbmdzLiAgQmVjYXVzZQorICAgICAgICAjIHRlc3Rfd2FybmluZ3Mgc3dhcCB0aGUgbW9kdWxlLCB3ZSBuZWVkIHRvIGxvb2sgdXAgaW4KKyAgICAgICAgIyB0aGUgc3lzLm1vZHVsZXMgZGljdGlvbmFyeS4KKyAgICAgICAgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10uc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICB5aWVsZCBXYXJuaW5nc1JlY29yZGVyKHcpCisgICAgIyBGaWx0ZXIgdGhlIHJlY29yZGVkIHdhcm5pbmdzCisgICAgcmVyYWlzZSA9IGxpc3QodykKKyAgICBtaXNzaW5nID0gW10KKyAgICBmb3IgbXNnLCBjYXQgaW4gZmlsdGVyczoKKyAgICAgICAgc2VlbiA9IEZhbHNlCisgICAgICAgIGZvciB3IGluIHJlcmFpc2VbOl06CisgICAgICAgICAgICB3YXJuaW5nID0gdy5tZXNzYWdlCisgICAgICAgICAgICAjIEZpbHRlciBvdXQgdGhlIG1hdGNoaW5nIG1lc3NhZ2VzCisgICAgICAgICAgICBpZiAocmUubWF0Y2gobXNnLCBzdHIod2FybmluZyksIHJlLkkpIGFuZAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Mod2FybmluZy5fX2NsYXNzX18sIGNhdCkpOgorICAgICAgICAgICAgICAgIHNlZW4gPSBUcnVlCisgICAgICAgICAgICAgICAgcmVyYWlzZS5yZW1vdmUodykKKyAgICAgICAgaWYgbm90IHNlZW4gYW5kIG5vdCBxdWlldDoKKyAgICAgICAgICAgICMgVGhpcyBmaWx0ZXIgY2F1Z2h0IG5vdGhpbmcKKyAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKChtc2csIGNhdC5fX25hbWVfXykpCisgICAgaWYgcmVyYWlzZToKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInVuaGFuZGxlZCB3YXJuaW5nICVzIiAlIHJlcmFpc2VbMF0pCisgICAgaWYgbWlzc2luZzoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoImZpbHRlciAoJXIsICVzKSBkaWQgbm90IGNhdGNoIGFueSB3YXJuaW5nIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdbMF0pCisKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLWRlZiBjaGVja193YXJuaW5ncygpOgotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgIHlpZWxkIFdhcm5pbmdzUmVjb3JkZXIodykKK2RlZiBjaGVja193YXJuaW5ncygqZmlsdGVycywgKiprd2FyZ3MpOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzaWxlbmNlIHdhcm5pbmdzLgorCisgICAgQWNjZXB0IDItdHVwbGVzIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAoIm1lc3NhZ2UgcmVnZXhwIiwgV2FybmluZ0NhdGVnb3J5KQorCisgICAgT3B0aW9uYWwgYXJndW1lbnQ6CisgICAgIC0gaWYgJ3F1aWV0JyBpcyBUcnVlLCBpdCBkb2VzIG5vdCBmYWlsIGlmIGEgZmlsdGVyIGNhdGNoZXMgbm90aGluZworICAgICAgICAoZGVmYXVsdCBUcnVlIHdpdGhvdXQgYXJndW1lbnQsCisgICAgICAgICBkZWZhdWx0IEZhbHNlIGlmIHNvbWUgZmlsdGVycyBhcmUgZGVmaW5lZCkKKworICAgIFdpdGhvdXQgYXJndW1lbnQsIGl0IGRlZmF1bHRzIHRvOgorICAgICAgICBjaGVja193YXJuaW5ncygoIiIsIFdhcm5pbmcpLCBxdWlldD1UcnVlKQorICAgICIiIgorICAgIHF1aWV0ID0ga3dhcmdzLmdldCgncXVpZXQnKQorICAgIGlmIG5vdCBmaWx0ZXJzOgorICAgICAgICBmaWx0ZXJzID0gKCgiIiwgV2FybmluZyksKQorICAgICAgICAjIFByZXNlcnZlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKyAgICAgICAgaWYgcXVpZXQgaXMgTm9uZToKKyAgICAgICAgICAgIHF1aWV0ID0gVHJ1ZQorICAgIHJldHVybiBfZmlsdGVyd2FybmluZ3MoZmlsdGVycywgcXVpZXQpCiAKIAogY2xhc3MgQ2xlYW5JbXBvcnQob2JqZWN0KToKQEAgLTU0MCw3ICs2OTEsNyBAQAogICAgIFVzZSBsaWtlIHRoaXM6CiAKICAgICAgICAgd2l0aCBDbGVhbkltcG9ydCgiZm9vIik6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKCJmb28iKSAjIG5ldyByZWZlcmVuY2UKKyAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCJmb28iKSAjIG5ldyByZWZlcmVuY2UKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqbW9kdWxlX25hbWVzKToKQEAgLTYxMyw2ICs3NjQsMzIgQEAKICAgICAgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2Vudmlyb25ba10KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fZW52aXJvbltrXSA9IHYKKyAgICAgICAgb3MuZW52aXJvbiA9IHNlbGYuX2Vudmlyb24KKworCitjbGFzcyBEaXJzT25TeXNQYXRoKG9iamVjdCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHRlbXBvcmFyaWx5IGFkZCBkaXJlY3RvcmllcyB0byBzeXMucGF0aC4KKworICAgIFRoaXMgbWFrZXMgYSBjb3B5IG9mIHN5cy5wYXRoLCBhcHBlbmRzIGFueSBkaXJlY3RvcmllcyBnaXZlbgorICAgIGFzIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB0aGVuIHJldmVydHMgc3lzLnBhdGggdG8gdGhlIGNvcGllZAorICAgIHNldHRpbmdzIHdoZW4gdGhlIGNvbnRleHQgZW5kcy4KKworICAgIE5vdGUgdGhhdCAqYWxsKiBzeXMucGF0aCBtb2RpZmljYXRpb25zIGluIHRoZSBib2R5IG9mIHRoZQorICAgIGNvbnRleHQgbWFuYWdlciwgaW5jbHVkaW5nIHJlcGxhY2VtZW50IG9mIHRoZSBvYmplY3QsCisgICAgd2lsbCBiZSByZXZlcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqcGF0aHMpOgorICAgICAgICBzZWxmLm9yaWdpbmFsX3ZhbHVlID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vcmlnaW5hbF9vYmplY3QgPSBzeXMucGF0aAorICAgICAgICBzeXMucGF0aC5leHRlbmQocGF0aHMpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICppZ25vcmVfZXhjKToKKyAgICAgICAgc3lzLnBhdGggPSBzZWxmLm9yaWdpbmFsX29iamVjdAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYub3JpZ2luYWxfdmFsdWUKIAogCiBjbGFzcyBUcmFuc2llbnRSZXNvdXJjZShvYmplY3QpOgpAQCAtNjYyLDYgKzgzOSw4IEBACiAgICAgZGVmYXVsdF9nYWlfZXJybm9zID0gWwogICAgICAgICAoJ0VBSV9OT05BTUUnLCAtMiksCiAgICAgICAgICgnRUFJX05PREFUQScsIC01KSwKKyAgICAgICAgIyBFbmNvdW50ZXJlZCB3aGVuIHRyeWluZyB0byByZXNvbHZlIElQdjYtb25seSBob3N0bmFtZXMKKyAgICAgICAgKCdXU0FOT19EQVRBJywgMTEwMDQpLAogICAgIF0KIAogICAgIGRlbmllZCA9IFJlc291cmNlRGVuaWVkKCJSZXNvdXJjZSAnJXMnIGlzIG5vdCBhdmFpbGFibGUiICUgcmVzb3VyY2VfbmFtZSkKQEAgLTczMCw2ICs5MDksMTIgQEAKIGRlZiBjYXB0dXJlZF9zdGRvdXQoKToKICAgICByZXR1cm4gY2FwdHVyZWRfb3V0cHV0KCJzdGRvdXQiKQogCitkZWYgY2FwdHVyZWRfc3RkZXJyKCk6CisgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikKKworZGVmIGNhcHR1cmVkX3N0ZGluKCk6CisgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3RkaW4iKQorCiBkZWYgZ2NfY29sbGVjdCgpOgogICAgICIiIkZvcmNlIGFzIG1hbnkgb2JqZWN0cyBhcyBwb3NzaWJsZSB0byBiZSBjb2xsZWN0ZWQuCiAKQEAgLTc0MSwxMCArOTI2LDIyIEBACiAgICAgb2JqZWN0cyB0byBkaXNhcHBlYXIuCiAgICAgIiIiCiAgICAgZ2MuY29sbGVjdCgpCisgICAgaWYgaXNfanl0aG9uOgorICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICBnYy5jb2xsZWN0KCkKICAgICBnYy5jb2xsZWN0KCkKIAogCitkZWYgcHl0aG9uX2lzX29wdGltaXplZCgpOgorICAgICIiIkZpbmQgaWYgUHl0aG9uIHdhcyBidWlsdCB3aXRoIG9wdGltaXphdGlvbnMuIiIiCisgICAgY2ZsYWdzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdQWV9DRkxBR1MnKSBvciAnJworICAgIGZpbmFsX29wdCA9ICIiCisgICAgZm9yIG9wdCBpbiBjZmxhZ3Muc3BsaXQoKToKKyAgICAgICAgaWYgb3B0LnN0YXJ0c3dpdGgoJy1PJyk6CisgICAgICAgICAgICBmaW5hbF9vcHQgPSBvcHQKKyAgICByZXR1cm4gZmluYWxfb3B0IGFuZCBmaW5hbF9vcHQgIT0gJy1PMCcKKworCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgRGVjb3JhdG9yIGZvciBydW5uaW5nIGEgZnVuY3Rpb24gaW4gYSBkaWZmZXJlbnQgbG9jYWxlLCBjb3JyZWN0bHkgcmVzZXR0aW5nCiAjIGl0IGFmdGVyd2FyZHMuCkBAIC03OTUsNyArOTkyLDYgQEAKIE1BWF9QeV9zc2l6ZV90ID0gc3lzLm1heHNpemUKIAogZGVmIHNldF9tZW1saW1pdChsaW1pdCk6Ci0gICAgaW1wb3J0IHJlCiAgICAgZ2xvYmFsIG1heF9tZW11c2UKICAgICBnbG9iYWwgcmVhbF9tYXhfbWVtdXNlCiAgICAgc2l6ZXMgPSB7CkBAIC0xMDMzLDMxICsxMjI5LDUwIEBACiAgICAgICAgICAgICAgICAgIGlmIGsuc3RhcnRzd2l0aCgnZW5jb2RpbmdzLicpXQogICAgIHN5cy5tb2R1bGVzLmNsZWFyKCkKICAgICBzeXMubW9kdWxlcy51cGRhdGUoZW5jb2RpbmdzKQorICAgICMgWFhYOiBUaGlzIGtpbmQgb2YgcHJvYmxlbSBjYW4gYWZmZWN0IG1vcmUgdGhhbiBqdXN0IGVuY29kaW5ncy4gSW4gcGFydGljdWxhcgorICAgICMgZXh0ZW5zaW9uIG1vZHVsZXMgKHN1Y2ggYXMgX3NzbCkgZG9uJ3QgY29wZSB3aXRoIHJlbG9hZGluZyBwcm9wZXJseS4KKyAgICAjIFJlYWxseSwgdGVzdCBtb2R1bGVzIHNob3VsZCBiZSBjbGVhbmluZyBvdXQgdGhlIHRlc3Qgc3BlY2lmaWMgbW9kdWxlcyB0aGV5CisgICAgIyBrbm93IHRoZXkgYWRkZWQgKGFsYSB0ZXN0X3J1bnB5KSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIHRoaXMgZnVuY3Rpb24gKGFzCisgICAgIyB0ZXN0X2ltcG9ydGhvb2tzIGFuZCB0ZXN0X3BrZyBkbyBjdXJyZW50bHkpLgorICAgICMgSW1wbGljaXRseSBpbXBvcnRlZCAqcmVhbCogbW9kdWxlcyBzaG91bGQgYmUgbGVmdCBhbG9uZSAoc2VlIGlzc3VlIDEwNTU2KS4KICAgICBzeXMubW9kdWxlcy51cGRhdGUob2xkbW9kdWxlcykKIAogIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAjIFRocmVhZGluZyBzdXBwb3J0IHRvIHByZXZlbnQgcmVwb3J0aW5nIHJlZmxlYWtzIHdoZW4gcnVubmluZyByZWdydGVzdC5weSAtUgogCisjIE5PVEU6IHdlIHVzZSB0aHJlYWQuX2NvdW50KCkgcmF0aGVyIHRoYW4gdGhyZWFkaW5nLmVudW1lcmF0ZSgpIChvciB0aGUKKyMgbW9yYWwgZXF1aXZhbGVudCB0aGVyZW9mKSBiZWNhdXNlIGEgdGhyZWFkaW5nLlRocmVhZCBvYmplY3QgaXMgc3RpbGwgYWxpdmUKKyMgdW50aWwgaXRzIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgZXZlbiBhZnRlciBpdCBoYXMgYmVlbgorIyB1bnJlZ2lzdGVyZWQgZnJvbSB0aGUgdGhyZWFkaW5nIG1vZHVsZS4KKyMgdGhyZWFkLl9jb3VudCgpLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBnZXRzIGRlY3JlbWVudGVkICphZnRlciogdGhlCisjIF9fYm9vdHN0cmFwKCkgbWV0aG9kIGhhcyByZXR1cm5lZCwgd2hpY2ggZ2l2ZXMgdXMgcmVsaWFibGUgcmVmZXJlbmNlIGNvdW50cworIyBhdCB0aGUgZW5kIG9mIGEgdGVzdCBydW4uCisKIGRlZiB0aHJlYWRpbmdfc2V0dXAoKToKLSAgICBpbXBvcnQgdGhyZWFkaW5nCi0gICAgcmV0dXJuIGxlbih0aHJlYWRpbmcuX2FjdGl2ZSksIGxlbih0aHJlYWRpbmcuX2xpbWJvKQorICAgIGlmIF90aHJlYWQ6CisgICAgICAgIHJldHVybiBfdGhyZWFkLl9jb3VudCgpLAorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAxLAogCi1kZWYgdGhyZWFkaW5nX2NsZWFudXAobnVtX2FjdGl2ZSwgbnVtX2xpbWJvKToKLSAgICBpbXBvcnQgdGhyZWFkaW5nCi0gICAgaW1wb3J0IHRpbWUKLQorZGVmIHRocmVhZGluZ19jbGVhbnVwKG5iX3RocmVhZHMpOgorICAgIGlmIG5vdCBfdGhyZWFkOgorICAgICAgICByZXR1cm4KICAgICBfTUFYX0NPVU5UID0gMTAKLSAgICBjb3VudCA9IDAKLSAgICB3aGlsZSBsZW4odGhyZWFkaW5nLl9hY3RpdmUpICE9IG51bV9hY3RpdmUgYW5kIGNvdW50IDwgX01BWF9DT1VOVDoKLSAgICAgICAgY291bnQgKz0gMQorICAgIGZvciBjb3VudCBpbiByYW5nZShfTUFYX0NPVU5UKToKKyAgICAgICAgbiA9IF90aHJlYWQuX2NvdW50KCkKKyAgICAgICAgaWYgbiA9PSBuYl90aHJlYWRzOgorICAgICAgICAgICAgYnJlYWsKICAgICAgICAgdGltZS5zbGVlcCgwLjEpCi0KLSAgICBjb3VudCA9IDAKLSAgICB3aGlsZSBsZW4odGhyZWFkaW5nLl9saW1ibykgIT0gbnVtX2xpbWJvIGFuZCBjb3VudCA8IF9NQVhfQ09VTlQ6Ci0gICAgICAgIGNvdW50ICs9IDEKLSAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgIyBYWFggcHJpbnQgYSB3YXJuaW5nIGluIGNhc2Ugb2YgZmFpbHVyZT8KIAogZGVmIHJlYXBfdGhyZWFkcyhmdW5jKToKKyAgICAiIiJVc2UgdGhpcyBmdW5jdGlvbiB3aGVuIHRocmVhZHMgYXJlIGJlaW5nIHVzZWQuICBUaGlzIHdpbGwKKyAgICBlbnN1cmUgdGhhdCB0aGUgdGhyZWFkcyBhcmUgY2xlYW5lZCB1cCBldmVuIHdoZW4gdGhlIHRlc3QgZmFpbHMuCisgICAgSWYgdGhyZWFkaW5nIGlzIHVuYXZhaWxhYmxlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorICAgICIiIgorICAgIGlmIG5vdCBfdGhyZWFkOgorICAgICAgICByZXR1cm4gZnVuYworCiAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQogICAgIGRlZiBkZWNvcmF0b3IoKmFyZ3MpOgogICAgICAgICBrZXkgPSB0aHJlYWRpbmdfc2V0dXAoKQpAQCAtMTA4Nyw2ICsxMzAyLDYwIEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAorQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBzd2FwX2F0dHIob2JqLCBhdHRyLCBuZXdfdmFsKToKKyAgICAiIiJUZW1wb3Jhcnkgc3dhcCBvdXQgYW4gYXR0cmlidXRlIHdpdGggYSBuZXcgb2JqZWN0LgorCisgICAgVXNhZ2U6CisgICAgICAgIHdpdGggc3dhcF9hdHRyKG9iaiwgImF0dHIiLCA1KToKKyAgICAgICAgICAgIC4uLgorCisgICAgICAgIFRoaXMgd2lsbCBzZXQgb2JqLmF0dHIgdG8gNSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB3aXRoOiBibG9jaywKKyAgICAgICAgcmVzdG9yaW5nIHRoZSBvbGQgdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suIElmIGBhdHRyYCBkb2Vzbid0CisgICAgICAgIGV4aXN0IG9uIGBvYmpgLCBpdCB3aWxsIGJlIGNyZWF0ZWQgYW5kIHRoZW4gZGVsZXRlZCBhdCB0aGUgZW5kIG9mIHRoZQorICAgICAgICBibG9jay4KKyAgICAiIiIKKyAgICBpZiBoYXNhdHRyKG9iaiwgYXR0cik6CisgICAgICAgIHJlYWxfdmFsID0gZ2V0YXR0cihvYmosIGF0dHIpCisgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCBuZXdfdmFsKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIHJlYWxfdmFsKQorICAgIGVsc2U6CisgICAgICAgIHNldGF0dHIob2JqLCBhdHRyLCBuZXdfdmFsKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsYXR0cihvYmosIGF0dHIpCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgc3dhcF9pdGVtKG9iaiwgaXRlbSwgbmV3X3ZhbCk6CisgICAgIiIiVGVtcG9yYXJ5IHN3YXAgb3V0IGFuIGl0ZW0gd2l0aCBhIG5ldyBvYmplY3QuCisKKyAgICBVc2FnZToKKyAgICAgICAgd2l0aCBzd2FwX2l0ZW0ob2JqLCAiaXRlbSIsIDUpOgorICAgICAgICAgICAgLi4uCisKKyAgICAgICAgVGhpcyB3aWxsIHNldCBvYmpbIml0ZW0iXSB0byA1IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHdpdGg6IGJsb2NrLAorICAgICAgICByZXN0b3JpbmcgdGhlIG9sZCB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gSWYgYGl0ZW1gIGRvZXNuJ3QKKyAgICAgICAgZXhpc3Qgb24gYG9iamAsIGl0IHdpbGwgYmUgY3JlYXRlZCBhbmQgdGhlbiBkZWxldGVkIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgIGJsb2NrLgorICAgICIiIgorICAgIGlmIGl0ZW0gaW4gb2JqOgorICAgICAgICByZWFsX3ZhbCA9IG9ialtpdGVtXQorICAgICAgICBvYmpbaXRlbV0gPSBuZXdfdmFsCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvYmpbaXRlbV0gPSByZWFsX3ZhbAorICAgIGVsc2U6CisgICAgICAgIG9ialtpdGVtXSA9IG5ld192YWwKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBvYmpbaXRlbV0KKwogZGVmIHN0cmlwX3B5dGhvbl9zdGRlcnIoc3RkZXJyKToKICAgICAiIiJTdHJpcCB0aGUgc3RkZXJyIG9mIGEgUHl0aG9uIHByb2Nlc3MgZnJvbSBwb3RlbnRpYWwgZGVidWcgb3V0cHV0CiAgICAgZW1pdHRlZCBieSB0aGUgaW50ZXJwcmV0ZXIuCkBAIC0xMDk3LDYgKzEzNjYsMTEwIEBACiAgICAgc3RkZXJyID0gcmUuc3ViKGJyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAorZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgorICAgICIiIlJldHVybiBhIGxpc3Qgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyByZXByb2R1Y2luZyB0aGUgY3VycmVudAorICAgIHNldHRpbmdzIGluIHN5cy5mbGFncy4iIiIKKyAgICBmbGFnX29wdF9tYXAgPSB7CisgICAgICAgICdieXRlc193YXJuaW5nJzogJ2InLAorICAgICAgICAnZG9udF93cml0ZV9ieXRlY29kZSc6ICdCJywKKyAgICAgICAgJ2lnbm9yZV9lbnZpcm9ubWVudCc6ICdFJywKKyAgICAgICAgJ25vX3VzZXJfc2l0ZSc6ICdzJywKKyAgICAgICAgJ25vX3NpdGUnOiAnUycsCisgICAgICAgICdvcHRpbWl6ZSc6ICdPJywKKyAgICAgICAgJ3ZlcmJvc2UnOiAndicsCisgICAgfQorICAgIGFyZ3MgPSBbXQorICAgIGZvciBmbGFnLCBvcHQgaW4gZmxhZ19vcHRfbWFwLml0ZW1zKCk6CisgICAgICAgIHYgPSBnZXRhdHRyKHN5cy5mbGFncywgZmxhZykKKyAgICAgICAgaWYgdiA+IDA6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLScgKyBvcHQgKiB2KQorICAgIHJldHVybiBhcmdzCisKKyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgU3VwcG9ydCBmb3IgYXNzZXJ0aW9ucyBhYm91dCBsb2dnaW5nLgorIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0SGFuZGxlcihsb2dnaW5nLmhhbmRsZXJzLkJ1ZmZlcmluZ0hhbmRsZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXRjaGVyKToKKyAgICAgICAgIyBCdWZmZXJpbmdIYW5kbGVyIHRha2VzIGEgImNhcGFjaXR5IiBhcmd1bWVudAorICAgICAgICAjIHNvIGFzIHRvIGtub3cgd2hlbiB0byBmbHVzaC4gQXMgd2UncmUgb3ZlcnJpZGluZworICAgICAgICAjIHNob3VsZEZsdXNoIGFueXdheSwgd2UgY2FuIHNldCBhIGNhcGFjaXR5IG9mIHplcm8uCisgICAgICAgICMgWW91IGNhbiBjYWxsIGZsdXNoKCkgbWFudWFsbHkgdG8gY2xlYXIgb3V0IHRoZQorICAgICAgICAjIGJ1ZmZlci4KKyAgICAgICAgbG9nZ2luZy5oYW5kbGVycy5CdWZmZXJpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIDApCisgICAgICAgIHNlbGYubWF0Y2hlciA9IG1hdGNoZXIKKworICAgIGRlZiBzaG91bGRGbHVzaChzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICBzZWxmLmZvcm1hdChyZWNvcmQpCisgICAgICAgIHNlbGYuYnVmZmVyLmFwcGVuZChyZWNvcmQuX19kaWN0X18pCisKKyAgICBkZWYgbWF0Y2hlcyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBMb29rIGZvciBhIHNhdmVkIGRpY3Qgd2hvc2Uga2V5cy92YWx1ZXMgbWF0Y2ggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJlc3VsdCA9IEZhbHNlCisgICAgICAgIGZvciBkIGluIHNlbGYuYnVmZmVyOgorICAgICAgICAgICAgaWYgc2VsZi5tYXRjaGVyLm1hdGNoZXMoZCwgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIE1hdGNoZXIob2JqZWN0KToKKworICAgIF9wYXJ0aWFsX21hdGNoZXMgPSAoJ21zZycsICdtZXNzYWdlJykKKworICAgIGRlZiBtYXRjaGVzKHNlbGYsIGQsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyeSB0byBtYXRjaCBhIHNpbmdsZSBkaWN0IHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KKworICAgICAgICBLZXlzIHdob3NlIHZhbHVlcyBhcmUgc3RyaW5ncyBhbmQgd2hpY2ggYXJlIGluIHNlbGYuX3BhcnRpYWxfbWF0Y2hlcworICAgICAgICB3aWxsIGJlIGNoZWNrZWQgZm9yIHBhcnRpYWwgKGkuZS4gc3Vic3RyaW5nKSBtYXRjaGVzLiBZb3UgY2FuIGV4dGVuZAorICAgICAgICB0aGlzIHNjaGVtZSB0byAoZm9yIGV4YW1wbGUpIGRvIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZywgZXRjLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gVHJ1ZQorICAgICAgICBmb3IgayBpbiBrd2FyZ3M6CisgICAgICAgICAgICB2ID0ga3dhcmdzW2tdCisgICAgICAgICAgICBkdiA9IGQuZ2V0KGspCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5tYXRjaF92YWx1ZShrLCBkdiwgdik6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgbWF0Y2hfdmFsdWUoc2VsZiwgaywgZHYsIHYpOgorICAgICAgICAiIiIKKyAgICAgICAgVHJ5IHRvIG1hdGNoIGEgc2luZ2xlIHN0b3JlZCB2YWx1ZSAoZHYpIHdpdGggYSBzdXBwbGllZCB2YWx1ZSAodikuCisgICAgICAgICIiIgorICAgICAgICBpZiB0eXBlKHYpICE9IHR5cGUoZHYpOgorICAgICAgICAgICAgcmVzdWx0ID0gRmFsc2UKKyAgICAgICAgZWxpZiB0eXBlKGR2KSBpcyBub3Qgc3RyIG9yIGsgbm90IGluIHNlbGYuX3BhcnRpYWxfbWF0Y2hlczoKKyAgICAgICAgICAgIHJlc3VsdCA9ICh2ID09IGR2KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gZHYuZmluZCh2KSA+PSAwCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitfY2FuX3N5bWxpbmsgPSBOb25lCitkZWYgY2FuX3N5bWxpbmsoKToKKyAgICBnbG9iYWwgX2Nhbl9zeW1saW5rCisgICAgaWYgX2Nhbl9zeW1saW5rIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gX2Nhbl9zeW1saW5rCisgICAgdHJ5OgorICAgICAgICBvcy5zeW1saW5rKFRFU1RGTiwgVEVTVEZOICsgImNhbl9zeW1saW5rIikKKyAgICAgICAgY2FuID0gVHJ1ZQorICAgIGV4Y2VwdCAoT1NFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgIGNhbiA9IEZhbHNlCisgICAgX2Nhbl9zeW1saW5rID0gY2FuCisgICAgcmV0dXJuIGNhbgorCitkZWYgc2tpcF91bmxlc3Nfc3ltbGluayh0ZXN0KToKKyAgICAiIiJTa2lwIGRlY29yYXRvciBmb3IgdGVzdHMgdGhhdCByZXF1aXJlIGZ1bmN0aW9uYWwgc3ltbGluayIiIgorICAgIG9rID0gY2FuX3N5bWxpbmsoKQorICAgIG1zZyA9ICJSZXF1aXJlcyBmdW5jdGlvbmFsIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iCisgICAgcmV0dXJuIHRlc3QgaWYgb2sgZWxzZSB1bml0dGVzdC5za2lwKG1zZykodGVzdCkKKwogZGVmIHBhdGNoKHRlc3RfaW5zdGFuY2UsIG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpOgogICAgICIiIk92ZXJyaWRlICdvYmplY3RfdG9fcGF0Y2gnLidhdHRyX25hbWUnIHdpdGggJ25ld192YWx1ZScuCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3RfU2ltcGxlSFRUUFNlcnZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNhOWJkNi4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X1NpbXBsZUhUVFBTZXJ2ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0iIiIKLVRoZXNlIHRlc3RzIG9ubHkgY2hlY2sgdXJsIHBhcnNpbmcgZm9yIG5vdy4KLVdlIGRvbid0IHdhbnQgdG8gcmVxdWlyZSB0aGUgJ25ldHdvcmsnIHJlc291cmNlLgotIiIiCi0KLWltcG9ydCBvcywgdW5pdHRlc3QKLWZyb20gaHR0cC5zZXJ2ZXIgaW1wb3J0IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLQotY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBwYXNzCi0KLWNsYXNzIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAiIiIgVGVzdCB1cmwgcGFyc2luZyAiIiIKLSAgICBkZWYgc2V0VXAgKHNlbGYpOgotICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5nZXRjd2QoKQotICAgICAgICBzZWxmLnRyYW5zbGF0ZWQgPSBvcy5wYXRoLmpvaW4oc2VsZi50cmFuc2xhdGVkLCAnZmlsZW5hbWUnKQotICAgICAgICBzZWxmLmhhbmRsZXIgPSBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIgKCkKLQotICAgIGRlZiB0ZXN0X3F1ZXJ5QXJndW1lbnRzIChzZWxmKToKLSAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy9maWxlbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKLSAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy9maWxlbmFtZT9mb289YmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQotICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnL2ZpbGVuYW1lP2E9YiZzcGFtPWVnZ3Mjem90JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCAocGF0aCwgc2VsZi50cmFuc2xhdGVkKQotCi0gICAgZGVmIHRlc3Rfc3RhcnRXaXRoRG91YmxlU2xhc2ggKHNlbGYpOgotICAgICAgICBwYXRoID0gc2VsZi5oYW5kbGVyLnRyYW5zbGF0ZV9wYXRoICgnLy9maWxlbmFtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKLSAgICAgICAgcGF0aCA9IHNlbGYuaGFuZGxlci50cmFuc2xhdGVfcGF0aCAoJy8vZmlsZW5hbWU/Zm9vPWJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwgKHBhdGgsIHNlbGYudHJhbnNsYXRlZCkKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weSBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQppbmRleCAyMDBkYjVjLi42MDhlYzAxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CkBAIC0yLDcgKzIsNiBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKLWltcG9ydCB3YXJuaW5ncwogCiAKIGNsYXNzIE5vQWxsKFJ1bnRpbWVFcnJvcik6CkBAIC0xNiw5ICsxNSwxMCBAQAogCiAgICAgZGVmIGNoZWNrX2FsbChzZWxmLCBtb2RuYW1lKToKICAgICAgICAgbmFtZXMgPSB7fQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qIChtb2R1bGV8cGFja2FnZSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoCisgICAgICAgICAgICAoIi4qIChtb2R1bGV8cGFja2FnZSkiLCBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCIiLCBSZXNvdXJjZVdhcm5pbmcpLAorICAgICAgICAgICAgcXVpZXQ9VHJ1ZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZXhlYygiaW1wb3J0ICVzIiAlIG1vZG5hbWUsIG5hbWVzKQogICAgICAgICAgICAgZXhjZXB0OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5IGIvTGliL3Rlc3QvdGVzdF9fX2Z1dHVyZV9fLnB5CmluZGV4IGY0MWI4NzkuLjlhZTRjZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX19mdXR1cmVfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X19fZnV0dXJlX18ucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBfX2Z1dHVyZV9fCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkgYi9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKaW5kZXggMDI5NDJkMS4uM2ZhZGI1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weQpAQCAtMSw0ICsxLDQgQEAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGZyb20gX2xvY2FsZSBpbXBvcnQgKHNldGxvY2FsZSwgTENfQUxMLCBMQ19DVFlQRSwgTENfTlVNRVJJQywgbG9jYWxlY29udiwgRXJyb3IpCiB0cnk6CiAgICAgZnJvbSBfbG9jYWxlIGltcG9ydCAoUkFESVhDSEFSLCBUSE9VU0VQLCBubF9sYW5naW5mbykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKaW5kZXggM2FlZjRhMC4uZDg2Zjk3YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hYmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hYmMucHkKQEAgLTM0LDggKzM0LDQ2IEBACiAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiByZXR1cm4gc3VwZXIoKS5mb28KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZm9vLCAzKQogCisgICAgZGVmIHRlc3RfYWJzdHJhY3RjbGFzc21ldGhvZF9iYXNpY3Moc2VsZik6CisgICAgICAgIEBhYmMuYWJzdHJhY3RjbGFzc21ldGhvZAorICAgICAgICBkZWYgZm9vKGNscyk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZvby5fX2lzYWJzdHJhY3RtZXRob2RfXykKKyAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgIGRlZiBiYXIoY2xzKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoYmFyLCAiX19pc2Fic3RyYWN0bWV0aG9kX18iKSkKKworICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgICAgICAgICBAYWJjLmFic3RyYWN0Y2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIGNscy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMpCisgICAgICAgIGNsYXNzIEQoQyk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oY2xzKTogcmV0dXJuIHN1cGVyKCkuZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChELmZvbygpLCAnRCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLmZvbygpLCAnRCcpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdHN0YXRpY21ldGhvZF9iYXNpY3Moc2VsZik6CisgICAgICAgIEBhYmMuYWJzdHJhY3RzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGZvbygpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb28uX19pc2Fic3RyYWN0bWV0aG9kX18pCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGJhcigpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihiYXIsICJfX2lzYWJzdHJhY3RtZXRob2RfXyIpKQorCisgICAgICAgIGNsYXNzIEMobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICAgICAgICAgIEBhYmMuYWJzdHJhY3RzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmb28oKTogcmV0dXJuIDMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbygpOiByZXR1cm4gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEQuZm9vKCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRCgpLmZvbygpLCA0KQorCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfaW50ZWdyYXRpb24oc2VsZik6Ci0gICAgICAgIGZvciBhYnN0cmFjdHRoaW5nIGluIFthYmMuYWJzdHJhY3RtZXRob2QsIGFiYy5hYnN0cmFjdHByb3BlcnR5XToKKyAgICAgICAgZm9yIGFic3RyYWN0dGhpbmcgaW4gW2FiYy5hYnN0cmFjdG1ldGhvZCwgYWJjLmFic3RyYWN0cHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmMuYWJzdHJhY3RjbGFzc21ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFiYy5hYnN0cmFjdHN0YXRpY21ldGhvZF06CiAgICAgICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CiAgICAgICAgICAgICAgICAgQGFic3RyYWN0dGhpbmcKICAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOiBwYXNzICAjIGFic3RyYWN0CkBAIC04MSwyMCArMTE5LDIwIEBACiAgICAgICAgIGIgPSBCKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKEIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCBBKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCAoQSwpKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShiLCBBKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoYiwgKEEsKSkKICAgICAgICAgQS5yZWdpc3RlcihCKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhCLCBBKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQiwgKEEsKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShiLCBBKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2luc3RhbmNlKGIsIChBLCkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGIsIChBLCkpCiAgICAgICAgIGNsYXNzIEMoQik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoQywgQSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIChBLCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzaW5zdGFuY2UoYywgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShjLCAoQSwpKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCAoQSwpKQogCiAgICAgZGVmIHRlc3RfaXNpbnN0YW5jZV9pbnZhbGlkYXRpb24oc2VsZik6CiAgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKQEAgLTExMiwxNiArMTUwLDE2IEBACiAgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgQS5yZWdpc3RlcihpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSg0MiwgKEEsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKDQyLCAoQSwpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhpbnQsIChBLCkpKQogICAgICAgICBjbGFzcyBCKEEpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBCLnJlZ2lzdGVyKHN0cikKICAgICAgICAgY2xhc3MgQyhzdHIpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgiIiwgQSksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZSgiIiwgKEEsKSksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKCIiLCAoQSwpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIChBLCkpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDLCBBKSkKQEAgLTE0Nyw4ICsxODUsOCBAQAogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX25vbl9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsICJDYW4gb25seSByZWdpc3RlciBjbGFzc2VzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQS5yZWdpc3RlciwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJDYW4gb25seSByZWdpc3RlciBjbGFzc2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBLnJlZ2lzdGVyLCA0KQogCiAgICAgZGVmIHRlc3RfcmVnaXN0cmF0aW9uX3RyYW5zaXRpdmVuZXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CkBAIC0xODYsOCArMjI0LDggQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoTXlJbnQsIEEpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhNeUludCwgKEEsKSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKDQyLCBBKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoNDIsIChBLCkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoNDIsIEEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSg0MiwgKEEsKSkKIAogICAgIGRlZiB0ZXN0X2FsbF9uZXdfbWV0aG9kc19hcmVfY2FsbGVkKHNlbGYpOgogICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkgYi9MaWIvdGVzdC90ZXN0X2Fic3RyYWN0X251bWJlcnMucHkKaW5kZXggZDAxNjRjMC4uMmEzOTZjZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hYnN0cmFjdF9udW1iZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJzdHJhY3RfbnVtYmVycy5weQpAQCAtNCw3ICs0LDYgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIG51bWJlcnMgaW1wb3J0IENvbXBsZXgsIFJlYWwsIFJhdGlvbmFsLCBJbnRlZ3JhbAotZnJvbSBudW1iZXJzIGltcG9ydCBOdW1iZXIKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBjbGFzcyBUZXN0TnVtYmVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWNmZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQpAQCAtMCwwICsxLDQ2ODEgQEAKKyMgQXV0aG9yOiBTdGV2ZW4gSi4gQmV0aGFyZCA8c3RldmVuLmJldGhhcmRAZ21haWwuY29tPi4KKworaW1wb3J0IGNvZGVjcworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBhcmdwYXJzZQorCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2NsYXNzIFN0ZElPQnVmZmVyKFN0cmluZ0lPKToKKyAgICBwYXNzCisKK2NsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBhc3NlcnRFcXVhbChzZWxmLCBvYmoxLCBvYmoyKToKKyAgICAgICAgaWYgb2JqMSAhPSBvYmoyOgorICAgICAgICAgICAgcHJpbnQoJycpCisgICAgICAgICAgICBwcmludChyZXByKG9iajEpKQorICAgICAgICAgICAgcHJpbnQocmVwcihvYmoyKSkKKyAgICAgICAgICAgIHByaW50KG9iajEpCisgICAgICAgICAgICBwcmludChvYmoyKQorICAgICAgICBzdXBlcihUZXN0Q2FzZSwgc2VsZikuYXNzZXJ0RXF1YWwob2JqMSwgb2JqMikKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGUgdGVzdHMgYXNzdW1lIHRoYXQgbGluZSB3cmFwcGluZyBvY2N1cnMgYXQgODAgY29sdW1ucywgYnV0IHRoaXMKKyAgICAgICAgIyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgQ09MVU1OUyBlbnZpcm9ubWVudAorICAgICAgICAjIHZhcmlhYmxlLiAgVG8gZW5zdXJlIHRoYXQgdGhpcyBhc3N1bXB0aW9uIGlzIHRydWUsIHVuc2V0IENPTFVNTlMuCisgICAgICAgIGVudiA9IHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpCisgICAgICAgIGVudi51bnNldCgiQ09MVU1OUyIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChlbnYuX19leGl0X18pCisKKworY2xhc3MgVGVtcERpck1peGluKG9iamVjdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGVtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5vbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIoc2VsZi50ZW1wX2RpcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIsIFRydWUpCisKKyAgICBkZWYgY3JlYXRlX3JlYWRvbmx5X2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZW5hbWUpCisgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgsICd3JykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoZmlsZW5hbWUpCisgICAgICAgIG9zLmNobW9kKGZpbGVfcGF0aCwgc3RhdC5TX0lSRUFEKQorCitjbGFzcyBTaWcob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dhcmdzID0ga3dhcmdzCisKKworY2xhc3MgTlMob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3YXJncykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc29ydGVkX2l0ZW1zID0gc29ydGVkKHNlbGYuX19kaWN0X18uaXRlbXMoKSkKKyAgICAgICAga3dhcmdfc3RyID0gJywgJy5qb2luKFsnJXM9JXInICUgdHVwIGZvciB0dXAgaW4gc29ydGVkX2l0ZW1zXSkKKyAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGt3YXJnX3N0cikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gdmFycyhzZWxmKSA9PSB2YXJzKG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCisKKworY2xhc3MgQXJndW1lbnRQYXJzZXJFcnJvcihFeGNlcHRpb24pOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgZXJyb3JfY29kZT1Ob25lKToKKyAgICAgICAgRXhjZXB0aW9uLl9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3Rkb3V0CisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCisgICAgICAgIHNlbGYuZXJyb3JfY29kZSA9IGVycm9yX2NvZGUKKworCitkZWYgc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihwYXJzZV9hcmdzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICMgaWYgdGhpcyBpcyBiZWluZyBjYWxsZWQgcmVjdXJzaXZlbHkgYW5kIHN0ZGVyciBvciBzdGRvdXQgaXMgYWxyZWFkeSBiZWluZworICAgICMgcmVkaXJlY3RlZCwgc2ltcGx5IGNhbGwgdGhlIGZ1bmN0aW9uIGFuZCBsZXQgdGhlIGVuY2xvc2luZyBmdW5jdGlvbgorICAgICMgY2F0Y2ggdGhlIGV4Y2VwdGlvbgorICAgIGlmIGlzaW5zdGFuY2Uoc3lzLnN0ZGVyciwgU3RkSU9CdWZmZXIpIG9yIGlzaW5zdGFuY2Uoc3lzLnN0ZG91dCwgU3RkSU9CdWZmZXIpOgorICAgICAgICByZXR1cm4gcGFyc2VfYXJncygqYXJncywgKiprd2FyZ3MpCisKKyAgICAjIGlmIHRoaXMgaXMgbm90IGJlaW5nIGNhbGxlZCByZWN1cnNpdmVseSwgcmVkaXJlY3Qgc3RkZXJyIGFuZAorICAgICMgdXNlIGl0IGFzIHRoZSBBcmd1bWVudFBhcnNlckVycm9yIG1lc3NhZ2UKKyAgICBvbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIG9sZF9zdGRlcnIgPSBzeXMuc3RkZXJyCisgICAgc3lzLnN0ZG91dCA9IFN0ZElPQnVmZmVyKCkKKyAgICBzeXMuc3RkZXJyID0gU3RkSU9CdWZmZXIoKQorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VfYXJncygqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBmb3Iga2V5IGluIGxpc3QodmFycyhyZXN1bHQpKToKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwga2V5KSBpcyBzeXMuc3Rkb3V0OgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwga2V5LCBvbGRfc3Rkb3V0KQorICAgICAgICAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCBrZXkpIGlzIHN5cy5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIocmVzdWx0LCBrZXksIG9sZF9zdGRlcnIpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgY29kZSA9IHN5cy5leGNfaW5mbygpWzFdLmNvZGUKKyAgICAgICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQuZ2V0dmFsdWUoKQorICAgICAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICByYWlzZSBBcmd1bWVudFBhcnNlckVycm9yKCJTeXN0ZW1FeGl0Iiwgc3Rkb3V0LCBzdGRlcnIsIGNvZGUpCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IG9sZF9zdGRvdXQKKyAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKKworCitjbGFzcyBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcik6CisKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZV9hcmdzID0gc3VwZXIoRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIsIHNlbGYpLnBhcnNlX2FyZ3MKKyAgICAgICAgcmV0dXJuIHN0ZGVycl90b19wYXJzZXJfZXJyb3IocGFyc2VfYXJncywgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGV4aXQoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgZXhpdCA9IHN1cGVyKEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyLCBzZWxmKS5leGl0CisgICAgICAgIHJldHVybiBzdGRlcnJfdG9fcGFyc2VyX2Vycm9yKGV4aXQsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBlcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBlcnJvciA9IHN1cGVyKEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyLCBzZWxmKS5lcnJvcgorICAgICAgICByZXR1cm4gc3RkZXJyX3RvX3BhcnNlcl9lcnJvcihlcnJvciwgKmFyZ3MsICoqa3dhcmdzKQorCisKK2NsYXNzIFBhcnNlclRlc3Rlck1ldGFjbGFzcyh0eXBlKToKKyAgICAiIiJBZGRzIHBhcnNlciB0ZXN0cyB1c2luZyB0aGUgY2xhc3MgYXR0cmlidXRlcy4KKworICAgIENsYXNzZXMgb2YgdGhpcyB0eXBlIHNob3VsZCBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgLS0gYSBsaXN0IG9mIFNpZyBvYmplY3RzIHdoaWNoIHNwZWNpZnkKKyAgICAgICAgdGhlIHNpZ25hdHVyZXMgb2YgQXJndW1lbnQgb2JqZWN0cyB0byBiZSBjcmVhdGVkCisgICAgZmFpbHVyZXMgLS0gYSBsaXN0IG9mIGFyZ3MgbGlzdHMgdGhhdCBzaG91bGQgY2F1c2UgdGhlIHBhcnNlcgorICAgICAgICB0byBmYWlsCisgICAgc3VjY2Vzc2VzIC0tIGEgbGlzdCBvZiAoaW5pdGlhbF9hcmdzLCBvcHRpb25zLCByZW1haW5pbmdfYXJncykgdHVwbGVzCisgICAgICAgIHdoZXJlIGluaXRpYWxfYXJncyBzcGVjaWZpZXMgdGhlIHN0cmluZyBhcmdzIHRvIGJlIHBhcnNlZCwKKyAgICAgICAgb3B0aW9ucyBpcyBhIGRpY3QgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHZhcnMoKSBvZiB0aGUgb3B0aW9ucworICAgICAgICBwYXJzZWQgb3V0IG9mIGluaXRpYWxfYXJncywgYW5kIHJlbWFpbmluZ19hcmdzIHNob3VsZCBiZSBhbnkKKyAgICAgICAgcmVtYWluaW5nIHVucGFyc2VkIGFyZ3VtZW50cworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKGNscywgbmFtZSwgYmFzZXMsIGJvZHlkaWN0KToKKyAgICAgICAgaWYgbmFtZSA9PSAnUGFyc2VyVGVzdENhc2UnOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBkZWZhdWx0IHBhcnNlciBzaWduYXR1cmUgaXMgZW1wdHkKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoY2xzLCAncGFyc2VyX3NpZ25hdHVyZScpOgorICAgICAgICAgICAgY2xzLnBhcnNlcl9zaWduYXR1cmUgPSBTaWcoKQorICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICdwYXJzZXJfY2xhc3MnKToKKyAgICAgICAgICAgIGNscy5wYXJzZXJfY2xhc3MgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcgorCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgZnVuY3Rpb25zIGZvciBhZGRpbmcgb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIGRlZiBub19ncm91cHMocGFyc2VyLCBhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICIiIkFkZCBhbGwgYXJndW1lbnRzIGRpcmVjdGx5IHRvIHRoZSBwYXJzZXIiIiIKKyAgICAgICAgICAgIGZvciBzaWcgaW4gYXJndW1lbnRfc2lnbmF0dXJlczoKKyAgICAgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCpzaWcuYXJncywgKipzaWcua3dhcmdzKQorCisgICAgICAgIGRlZiBvbmVfZ3JvdXAocGFyc2VyLCBhcmd1bWVudF9zaWduYXR1cmVzKToKKyAgICAgICAgICAgICIiIkFkZCBhbGwgYXJndW1lbnRzIHVuZGVyIGEgc2luZ2xlIGdyb3VwIGluIHRoZSBwYXJzZXIiIiIKKyAgICAgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZm9vJykKKyAgICAgICAgICAgIGZvciBzaWcgaW4gYXJndW1lbnRfc2lnbmF0dXJlczoKKyAgICAgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoKnNpZy5hcmdzLCAqKnNpZy5rd2FyZ3MpCisKKyAgICAgICAgZGVmIG1hbnlfZ3JvdXBzKHBhcnNlciwgYXJndW1lbnRfc2lnbmF0dXJlcyk6CisgICAgICAgICAgICAiIiJBZGQgZWFjaCBhcmd1bWVudCBpbiBpdHMgb3duIGdyb3VwIHRvIHRoZSBwYXJzZXIiIiIKKyAgICAgICAgICAgIGZvciBpLCBzaWcgaW4gZW51bWVyYXRlKGFyZ3VtZW50X3NpZ25hdHVyZXMpOgorICAgICAgICAgICAgICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnZm9vOiVpJyAlIGkpCisgICAgICAgICAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCpzaWcuYXJncywgKipzaWcua3dhcmdzKQorCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBmdW5jdGlvbnMgZm9yIHBhcnNpbmcgYXJncworICAgICAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIGRlZiBsaXN0YXJncyhwYXJzZXIsIGFyZ3MpOgorICAgICAgICAgICAgIiIiUGFyc2UgdGhlIGFyZ3MgYnkgcGFzc2luZyBpbiBhIGxpc3QiIiIKKyAgICAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQorCisgICAgICAgIGRlZiBzeXNhcmdzKHBhcnNlciwgYXJncyk6CisgICAgICAgICAgICAiIiJQYXJzZSB0aGUgYXJncyBieSBkZWZhdWx0aW5nIHRvIHN5cy5hcmd2IiIiCisgICAgICAgICAgICBvbGRfc3lzX2FyZ3YgPSBzeXMuYXJndgorICAgICAgICAgICAgc3lzLmFyZ3YgPSBbb2xkX3N5c19hcmd2WzBdXSArIGFyZ3MKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMuYXJndiA9IG9sZF9zeXNfYXJndgorCisgICAgICAgICMgY2xhc3MgdGhhdCBob2xkcyB0aGUgY29tYmluYXRpb24gb2Ygb25lIG9wdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICMgYWRkaXRpb24gbWV0aG9kIGFuZCBvbmUgYXJnIHBhcnNpbmcgbWV0aG9kCisgICAgICAgIGNsYXNzIEFkZFRlc3RzKG9iamVjdCk6CisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0ZXJfY2xzLCBhZGRfYXJndW1lbnRzLCBwYXJzZV9hcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfYXJndW1lbnRzID0gYWRkX2FyZ3VtZW50cworICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2FyZ3MgPSBwYXJzZV9hcmdzCisKKyAgICAgICAgICAgICAgICBhZGRfYXJndW1lbnRzX25hbWUgPSBzZWxmLl9hZGRfYXJndW1lbnRzLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgcGFyc2VfYXJnc19uYW1lID0gc2VsZi5fcGFyc2VfYXJncy5fX25hbWVfXworICAgICAgICAgICAgICAgIGZvciB0ZXN0X2Z1bmMgaW4gW3NlbGYudGVzdF9mYWlsdXJlcywgc2VsZi50ZXN0X3N1Y2Nlc3Nlc106CisgICAgICAgICAgICAgICAgICAgIGZ1bmNfbmFtZSA9IHRlc3RfZnVuYy5fX25hbWVfXworICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGZ1bmNfbmFtZSwgYWRkX2FyZ3VtZW50c19uYW1lLCBwYXJzZV9hcmdzX25hbWUKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gJ18nLmpvaW4obmFtZXMpCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIHdyYXBwZXIoc2VsZiwgdGVzdF9mdW5jPXRlc3RfZnVuYyk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Z1bmMoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5fX25hbWVfXyA9IHRlc3RfbmFtZQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHRlc3Rlcl9jbHMsIHRlc3RfbmFtZSwgd3JhcHBlcikKKworICAgICAgICAgICAgZGVmIF9nZXRfcGFyc2VyKHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgYXJncyA9IHRlc3Rlci5wYXJzZXJfc2lnbmF0dXJlLmFyZ3MKKyAgICAgICAgICAgICAgICBrd2FyZ3MgPSB0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5rd2FyZ3MKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSB0ZXN0ZXIucGFyc2VyX2NsYXNzKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRfYXJndW1lbnRzKHBhcnNlciwgdGVzdGVyLmFyZ3VtZW50X3NpZ25hdHVyZXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgICAgICAgICBkZWYgdGVzdF9mYWlsdXJlcyhzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIodGVzdGVyKQorICAgICAgICAgICAgICAgIGZvciBhcmdzX3N0ciBpbiB0ZXN0ZXIuZmFpbHVyZXM6CisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzX3N0ci5zcGxpdCgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlcyA9IHRlc3Rlci5hc3NlcnRSYWlzZXMKKyAgICAgICAgICAgICAgICAgICAgcmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIHBhcnNlci5wYXJzZV9hcmdzLCBhcmdzKQorCisgICAgICAgICAgICBkZWYgdGVzdF9zdWNjZXNzZXMoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBmb3IgYXJncywgZXhwZWN0ZWRfbnMgaW4gdGVzdGVyLnN1Y2Nlc3NlczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmdzLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Muc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnMgPSBzZWxmLl9wYXJzZV9hcmdzKHBhcnNlciwgYXJncykKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVyLmFzc2VydEVxdWFsKGV4cGVjdGVkX25zLCByZXN1bHRfbnMpCisKKyAgICAgICAgIyBhZGQgdGVzdHMgZm9yIGVhY2ggY29tYmluYXRpb24gb2YgYW4gb3B0aW9uYWxzIGFkZGluZyBtZXRob2QKKyAgICAgICAgIyBhbmQgYW4gYXJnIHBhcnNpbmcgbWV0aG9kCisgICAgICAgIGZvciBhZGRfYXJndW1lbnRzIGluIFtub19ncm91cHMsIG9uZV9ncm91cCwgbWFueV9ncm91cHNdOgorICAgICAgICAgICAgZm9yIHBhcnNlX2FyZ3MgaW4gW2xpc3RhcmdzLCBzeXNhcmdzXToKKyAgICAgICAgICAgICAgICBBZGRUZXN0cyhjbHMsIGFkZF9hcmd1bWVudHMsIHBhcnNlX2FyZ3MpCisKK2Jhc2VzID0gVGVzdENhc2UsCitQYXJzZXJUZXN0Q2FzZSA9IFBhcnNlclRlc3Rlck1ldGFjbGFzcygnUGFyc2VyVGVzdENhc2UnLCBiYXNlcywge30pCisKKyMgPT09PT09PT09PT09PT09CisjIE9wdGlvbmFscyB0ZXN0cworIyA9PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBhIHNpbmdsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcpXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhJywgJy0tZm9vJywgJy14IC0tZm9vJywgJy14IC15J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYScsIE5TKHg9J2EnKSksCisgICAgICAgICgnLXhhJywgTlMoeD0nYScpKSwKKyAgICAgICAgKCcteCAtMScsIE5TKHg9Jy0xJykpLAorICAgICAgICAoJy14LTEnLCBOUyh4PSctMScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hDb21iaW5lZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgc2luZ2xlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy15eXknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgICAgICBTaWcoJy16JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy0tZm9vJywgJy14YScsICcteCAtLWZvbycsICcteCAteicsICcteiAteCcsCisgICAgICAgICAgICAgICAgJy15eCcsICcteXogYScsICcteXl5eCcsICcteXl5emEnLCAnLXh5emEnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PUZhbHNlLCB5eXk9Tm9uZSwgej1Ob25lKSksCisgICAgICAgICgnLXgnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PU5vbmUpKSwKKyAgICAgICAgKCctemEnLCBOUyh4PUZhbHNlLCB5eXk9Tm9uZSwgej0nYScpKSwKKyAgICAgICAgKCcteiBhJywgTlMoeD1GYWxzZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXh6YScsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXh6IGEnLCBOUyh4PVRydWUsIHl5eT1Ob25lLCB6PSdhJykpLAorICAgICAgICAoJy14IC16YScsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXggLXogYScsIE5TKHg9VHJ1ZSwgeXl5PU5vbmUsIHo9J2EnKSksCisgICAgICAgICgnLXknLCBOUyh4PUZhbHNlLCB5eXk9NDIsIHo9Tm9uZSkpLAorICAgICAgICAoJy15eXknLCBOUyh4PUZhbHNlLCB5eXk9NDIsIHo9Tm9uZSkpLAorICAgICAgICAoJy14IC15eXkgLXphJywgTlMoeD1UcnVlLCB5eXk9NDIsIHo9J2EnKSksCisgICAgICAgICgnLXggLXl5eSAteiBhJywgTlMoeD1UcnVlLCB5eXk9NDIsIHo9J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaW5nbGVEYXNoTG9uZyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgbXVsdGktY2hhcmFjdGVyIHNpbmdsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctZm9vJyldCisgICAgZmFpbHVyZXMgPSBbJy1mb28nLCAnYScsICctLWZvbycsICctZm9vIC0tZm9vJywgJy1mb28gLXknLCAnLWZvb2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmb289Tm9uZSkpLAorICAgICAgICAoJy1mb28gYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCctZm9vIC0xJywgTlMoZm9vPSctMScpKSwKKyAgICAgICAgKCctZm8gYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCctZiBhJywgTlMoZm9vPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzU2luZ2xlRGFzaFN1YnNldEFtYmlndW91cyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBPcHRpb25hbHMgd2hlcmUgb3B0aW9uIHN0cmluZ3MgYXJlIHN1YnNldHMgb2YgZWFjaCBvdGhlciIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy1mJyksIFNpZygnLWZvb2JhcicpLCBTaWcoJy1mb29yYWInKV0KKyAgICBmYWlsdXJlcyA9IFsnLWYnLCAnLWZvbycsICctZm8nLCAnLWZvbyBiJywgJy1mb29iJywgJy1mb29iYScsICctZm9vcmEnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPU5vbmUsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mIGEnLCBOUyhmPSdhJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZhJywgTlMoZj0nYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb2EnLCBOUyhmPSdvYScsIGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29hJywgTlMoZj0nb29hJywgZm9vYmFyPU5vbmUsIGZvb3JhYj1Ob25lKSksCisgICAgICAgICgnLWZvb2JhciBhJywgTlMoZj1Ob25lLCBmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yYWIgYScsIE5TKGY9Tm9uZSwgZm9vYmFyPU5vbmUsIGZvb3JhYj0nYScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURhc2hBbWJpZ3VvdXMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgT3B0aW9uYWxzIHRoYXQgcGFydGlhbGx5IG1hdGNoIGJ1dCBhcmUgbm90IHN1YnNldHMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctZm9vYmFyJyksIFNpZygnLWZvb3JhYicpXQorICAgIGZhaWx1cmVzID0gWyctZicsICctZiBhJywgJy1mYScsICctZm9hJywgJy1mb28nLCAnLWZvJywgJy1mb28gYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29iIGEnLCBOUyhmb29iYXI9J2EnLCBmb29yYWI9Tm9uZSkpLAorICAgICAgICAoJy1mb29yIGEnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgICAgICAoJy1mb29iYSBhJywgTlMoZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vcmEgYScsIE5TKGZvb2Jhcj1Ob25lLCBmb29yYWI9J2EnKSksCisgICAgICAgICgnLWZvb2JhciBhJywgTlMoZm9vYmFyPSdhJywgZm9vcmFiPU5vbmUpKSwKKyAgICAgICAgKCctZm9vcmFiIGEnLCBOUyhmb29iYXI9Tm9uZSwgZm9vcmFiPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTnVtZXJpYyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgc2hvcnQgb3B0IHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0xJywgZGVzdD0nb25lJyldCisgICAgZmFpbHVyZXMgPSBbJy0xJywgJ2EnLCAnLTEgLS1mb28nLCAnLTEgLXknLCAnLTEgLTEnLCAnLTEgLTInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhvbmU9Tm9uZSkpLAorICAgICAgICAoJy0xIGEnLCBOUyhvbmU9J2EnKSksCisgICAgICAgICgnLTFhJywgTlMob25lPSdhJykpLAorICAgICAgICAoJy0xLTInLCBOUyhvbmU9Jy0yJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzRG91YmxlRGFzaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIGEgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tZm9vJyldCisgICAgZmFpbHVyZXMgPSBbJy0tZm9vJywgJy1mJywgJy1mIGEnLCAnYScsICctLWZvbyAteCcsICctLWZvbyAtLWJhciddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lKSksCisgICAgICAgICgnLS1mb28gYScsIE5TKGZvbz0nYScpKSwKKyAgICAgICAgKCctLWZvbz1hJywgTlMoZm9vPSdhJykpLAorICAgICAgICAoJy0tZm9vIC0yLjUnLCBOUyhmb289Jy0yLjUnKSksCisgICAgICAgICgnLS1mb289LTIuNScsIE5TKGZvbz0nLTIuNScpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0RvdWJsZURhc2hQYXJ0aWFsTWF0Y2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHBhcnRpYWwgbWF0Y2hpbmcgd2l0aCBhIGRvdWJsZS1kYXNoIG9wdGlvbiBzdHJpbmciIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1iYWRnZXInLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCctLWJhdCcpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLS1iJywgJy0tYmEnLCAnLS1iPTInLCAnLS1iYT00JywgJy0tYmFkZ2UgNSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhZGdlcj1GYWxzZSwgYmF0PU5vbmUpKSwKKyAgICAgICAgKCctLWJhdCBYJywgTlMoYmFkZ2VyPUZhbHNlLCBiYXQ9J1gnKSksCisgICAgICAgICgnLS1iYWQnLCBOUyhiYWRnZXI9VHJ1ZSwgYmF0PU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGcnLCBOUyhiYWRnZXI9VHJ1ZSwgYmF0PU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGdlJywgTlMoYmFkZ2VyPVRydWUsIGJhdD1Ob25lKSksCisgICAgICAgICgnLS1iYWRnZXInLCBOUyhiYWRnZXI9VHJ1ZSwgYmF0PU5vbmUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0RvdWJsZURhc2hQcmVmaXhNYXRjaChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgd2hlbiBvbmUgZG91YmxlLWRhc2ggb3B0aW9uIHN0cmluZyBpcyBhIHByZWZpeCBvZiBhbm90aGVyIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnLS1iYScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLS1iJywgJy0tYmEnLCAnLS1iPTInLCAnLS1iYWRnZSA1J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYmFkZ2VyPUZhbHNlLCBiYT1Ob25lKSksCisgICAgICAgICgnLS1iYSBYJywgTlMoYmFkZ2VyPUZhbHNlLCBiYT0nWCcpKSwKKyAgICAgICAgKCctLWJhPVgnLCBOUyhiYWRnZXI9RmFsc2UsIGJhPSdYJykpLAorICAgICAgICAoJy0tYmFkJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICAgICAgKCctLWJhZGcnLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2UnLCBOUyhiYWRnZXI9VHJ1ZSwgYmE9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoYmFkZ2VyPVRydWUsIGJhPU5vbmUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc1NpbmdsZURvdWJsZURhc2goUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYW4gT3B0aW9uYWwgd2l0aCBzaW5nbGUtIGFuZCBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5ncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJy0tYmFyJyksCisgICAgICAgIFNpZygnLWJheicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctZmJhcicsICctZmJheicsICctYmF6ZicsICctYiBCJywgJ0InXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPUZhbHNlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYSBCJywgTlMoZj1GYWxzZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCctZiAtLWJhciBCJywgTlMoZj1UcnVlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy1mIC1iJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgICAgICgnLWJhIC1mJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBbHRlcm5hdGVQcmVmaXhDaGFycyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhbiBPcHRpb25hbCB3aXRoIG9wdGlvbiBzdHJpbmdzIHdpdGggY3VzdG9tIHByZWZpeGVzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByZWZpeF9jaGFycz0nKzovJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcrZicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJzo6YmFyJyksCisgICAgICAgIFNpZygnL2JheicsIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD00MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctLWJhcicsICctZmJhcicsICctYiBCJywgJ0InLCAnLWYnLCAnLS1iYXIgQicsICctYmF6JywgJy1oJywgJy0taGVscCcsICcraCcsICc6OmhlbHAnLCAnL2hlbHAnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhmPUZhbHNlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZicsIE5TKGY9VHJ1ZSwgYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgICAgICgnOjpiYSBCJywgTlMoZj1GYWxzZSwgYmFyPSdCJywgYmF6PU5vbmUpKSwKKyAgICAgICAgKCcrZiA6OmJhciBCJywgTlMoZj1UcnVlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIC9iJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgICAgICgnL2JhICtmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PTQyKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBbHRlcm5hdGVQcmVmaXhDaGFyc0FkZGVkSGVscChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiV2hlbiBgYC1gYCBub3QgaW4gcHJlZml4X2NoYXJzLCBkZWZhdWx0IG9wZXJhdG9ycyBjcmVhdGVkIGZvciBoZWxwCisgICAgICAgc2hvdWxkIHVzZSB0aGUgcHJlZml4X2NoYXJzIGluIHVzZSByYXRoZXIgdGhhbiAtIG9yIC0tCisgICAgICAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTk0NDQiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPScrOi8nLCBhZGRfaGVscD1UcnVlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnK2YnLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICAgICAgU2lnKCc6OmJhcicpLAorICAgICAgICBTaWcoJy9iYXonLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9NDIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS1iYXInLCAnLWZiYXInLCAnLWIgQicsICdCJywgJy1mJywgJy0tYmFyIEInLCAnLWJheiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGY9RmFsc2UsIGJhcj1Ob25lLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmJywgTlMoZj1UcnVlLCBiYXI9Tm9uZSwgYmF6PU5vbmUpKSwKKyAgICAgICAgKCc6OmJhIEInLCBOUyhmPUZhbHNlLCBiYXI9J0InLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJytmIDo6YmFyIEInLCBOUyhmPVRydWUsIGJhcj0nQicsIGJhej1Ob25lKSksCisgICAgICAgICgnK2YgL2InLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKSwKKyAgICAgICAgKCcvYmEgK2YnLCBOUyhmPVRydWUsIGJhcj1Ob25lLCBiYXo9NDIpKQorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWx0ZXJuYXRlUHJlZml4Q2hhcnNNdWx0aXBsZVNob3J0QXJncyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVmVyaWZ5IHRoYXQgT3B0aW9uYWxzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlaXIgZGVmaW5lZCBwcmVmaXhlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcmVmaXhfY2hhcnM9JystJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgICAgICBTaWcoJyt5JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgICAgIFNpZygnK3onLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy13JywKKyAgICAgICAgICAgICAgICAnLXh5eicsCisgICAgICAgICAgICAgICAgJyt4JywKKyAgICAgICAgICAgICAgICAnLXknLAorICAgICAgICAgICAgICAgICcreHl6JywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9RmFsc2UsIHk9RmFsc2UsIHo9RmFsc2UpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9VHJ1ZSwgeT1GYWxzZSwgej1GYWxzZSkpLAorICAgICAgICAoJyt5IC14JywgTlMoeD1UcnVlLCB5PVRydWUsIHo9RmFsc2UpKSwKKyAgICAgICAgKCcreXogLXgnLCBOUyh4PVRydWUsIHk9VHJ1ZSwgej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNTaG9ydExvbmcoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBjb21iaW5hdGlvbiBvZiBzaW5nbGUtIGFuZCBkb3VibGUtZGFzaCBvcHRpb24gc3RyaW5ncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctdicsICctLXZlcmJvc2UnLCAnLW4nLCAnLS1ub2lzeScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLS14IC0tdmVyYm9zZScsICctTicsICdhJywgJy12IHgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh2ZXJib3NlPUZhbHNlKSksCisgICAgICAgICgnLXYnLCBOUyh2ZXJib3NlPVRydWUpKSwKKyAgICAgICAgKCctLXZlcmJvc2UnLCBOUyh2ZXJib3NlPVRydWUpKSwKKyAgICAgICAgKCctbicsIE5TKHZlcmJvc2U9VHJ1ZSkpLAorICAgICAgICAoJy0tbm9pc3knLCBOUyh2ZXJib3NlPVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0Rlc3QoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHZhcmlvdXMgbWVhbnMgb2Ygc2V0dGluZyBkZXN0aW5hdGlvbiIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tZm9vLWJhcicpLCBTaWcoJy0tYmF6JywgZGVzdD0nemFiYmF6JyldCisgICAgZmFpbHVyZXMgPSBbJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCctLWZvby1iYXIgZicsIE5TKGZvb19iYXI9J2YnLCB6YWJiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IGcnLCBOUyhmb29fYmFyPU5vbmUsIHphYmJhej0nZycpKSwKKyAgICAgICAgKCctLWZvby1iYXIgaCAtLWJheiBpJywgTlMoZm9vX2Jhcj0naCcsIHphYmJhej0naScpKSwKKyAgICAgICAgKCctLWJheiBqIC0tZm9vLWJhciBrJywgTlMoZm9vX2Jhcj0naycsIHphYmJhej0naicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0RlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYSBkZWZhdWx0IGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JyksIFNpZygnLXknLCBkZWZhdWx0PTQyKV0KKyAgICBmYWlsdXJlcyA9IFsnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT00MikpLAorICAgICAgICAoJy14eCcsIE5TKHg9J3gnLCB5PTQyKSksCisgICAgICAgICgnLXl5JywgTlMoeD1Ob25lLCB5PSd5JykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3NEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBub3Qgc3BlY2lmeWluZyB0aGUgbnVtYmVyIG9mIGFyZ3MgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSkpLAorICAgICAgICAoJy14IGEnLCBOUyh4PSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzTmFyZ3MxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIHRoZSAxIGFyZyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXggYScsIE5TKHg9WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzMyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyB0aGUgMyBhcmdzIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgbmFyZ3M9MyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXgnLCAnLXggYScsICcteCBhIGInLCAnYSAteCcsICdhIC14IGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteCBhIGIgYycsIE5TKHg9WydhJywgJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc09wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBzcGVjaWZ5aW5nIGFuIE9wdGlvbmFsIGFyZyBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy14JywgbmFyZ3M9Jz8nLCBjb25zdD00MiksCisgICAgICAgIFNpZygnLXknLCBuYXJncz0nPycsIGRlZmF1bHQ9J3NwYW0nKSwKKyAgICAgICAgU2lnKCcteicsIG5hcmdzPSc/JywgdHlwZT1pbnQsIGNvbnN0PSc0MicsIGRlZmF1bHQ9Jzg0JyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTg0KSksCisgICAgICAgICgnLXcnLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCctdyAyJywgTlModz0nMicsIHg9Tm9uZSwgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCcteCcsIE5TKHc9Tm9uZSwgeD00MiwgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCcteCAyJywgTlModz1Ob25lLCB4PScyJywgeT0nc3BhbScsIHo9ODQpKSwKKyAgICAgICAgKCcteScsIE5TKHc9Tm9uZSwgeD1Ob25lLCB5PU5vbmUsIHo9ODQpKSwKKyAgICAgICAgKCcteSAyJywgTlModz1Ob25lLCB4PU5vbmUsIHk9JzInLCB6PTg0KSksCisgICAgICAgICgnLXonLCBOUyh3PU5vbmUsIHg9Tm9uZSwgeT0nc3BhbScsIHo9NDIpKSwKKyAgICAgICAgKCcteiAyJywgTlModz1Ob25lLCB4PU5vbmUsIHk9J3NwYW0nLCB6PTIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc05hcmdzWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBhcmdzIGZvciBhbiBPcHRpb25hbCB0aGF0IGFjY2VwdHMgemVybyBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbmFyZ3M9JyonKSwKKyAgICAgICAgU2lnKCcteScsIG5hcmdzPScqJywgZGVmYXVsdD0nc3BhbScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteCcsIE5TKHg9W10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYScsIE5TKHg9WydhJ10sIHk9J3NwYW0nKSksCisgICAgICAgICgnLXggYSBiJywgTlMoeD1bJ2EnLCAnYiddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy15JywgTlMoeD1Ob25lLCB5PVtdKSksCisgICAgICAgICgnLXkgYScsIE5TKHg9Tm9uZSwgeT1bJ2EnXSkpLAorICAgICAgICAoJy15IGEgYicsIE5TKHg9Tm9uZSwgeT1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNOYXJnc09uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBhcmdzIGZvciBhbiBPcHRpb25hbCB0aGF0IGFjY2VwdHMgb25lIG9yIG1vcmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKycpLAorICAgICAgICBTaWcoJy15JywgbmFyZ3M9JysnLCBkZWZhdWx0PSdzcGFtJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWydhJywgJy14JywgJy15JywgJ2EgLXgnLCAnYSAteSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEnLCBOUyh4PVsnYSddLCB5PSdzcGFtJykpLAorICAgICAgICAoJy14IGEgYicsIE5TKHg9WydhJywgJ2InXSwgeT0nc3BhbScpKSwKKyAgICAgICAgKCcteSBhJywgTlMoeD1Ob25lLCB5PVsnYSddKSksCisgICAgICAgICgnLXkgYSBiJywgTlMoeD1Ob25lLCB5PVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0Nob2ljZXMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgdGhlIGNob2ljZXMgZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1mJywgY2hvaWNlcz0nYWJjJyksCisgICAgICAgIFNpZygnLWcnLCB0eXBlPWludCwgY2hvaWNlcz1yYW5nZSg1KSldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLWYgZCcsICctZmFkJywgJy1nYScsICctZyA2J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZj1Ob25lLCBnPU5vbmUpKSwKKyAgICAgICAgKCctZiBhJywgTlMoZj0nYScsIGc9Tm9uZSkpLAorICAgICAgICAoJy1mIGMnLCBOUyhmPSdjJywgZz1Ob25lKSksCisgICAgICAgICgnLWcgMCcsIE5TKGY9Tm9uZSwgZz0wKSksCisgICAgICAgICgnLWcgMDMnLCBOUyhmPU5vbmUsIGc9MykpLAorICAgICAgICAoJy1mYiAtZzQnLCBOUyhmPSdiJywgZz00KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNSZXF1aXJlZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGFuIG9wdGlvbmFsIGFjdGlvbiB0aGF0IGlzIHJlcXVpcmVkIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1pbnQsIHJlcXVpcmVkPVRydWUpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcteCAxJywgTlMoeD0xKSksCisgICAgICAgICgnLXg0MicsIE5TKHg9NDIpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvblN0b3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgc3RvcmUgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy14JywgYWN0aW9uPSdzdG9yZScpXQorICAgIGZhaWx1cmVzID0gWydhJywgJ2EgLXgnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUpKSwKKyAgICAgICAgKCcteGZvbycsIE5TKHg9J2ZvbycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvblN0b3JlQ29uc3QoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZV9jb25zdCBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXknLCBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9b2JqZWN0KV0KKyAgICBmYWlsdXJlcyA9IFsnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHk9Tm9uZSkpLAorICAgICAgICAoJy15JywgTlMoeT1vYmplY3QpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvblN0b3JlRmFsc2UoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBzdG9yZV9mYWxzZSBhY3Rpb24gZm9yIGFuIE9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXonLCBhY3Rpb249J3N0b3JlX2ZhbHNlJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLXphJywgJy16IGEnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh6PVRydWUpKSwKKyAgICAgICAgKCcteicsIE5TKHo9RmFsc2UpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvblN0b3JlVHJ1ZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIHN0b3JlX3RydWUgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tYXBwbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWFwcGxlPWInLCAnLS1hcHBsZSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYXBwbGU9RmFsc2UpKSwKKyAgICAgICAgKCctLWFwcGxlJywgTlMoYXBwbGU9VHJ1ZSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kIGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCctLWJheicsIGFjdGlvbj0nYXBwZW5kJyldCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLS1iYXonLCAnYSAtLWJheicsICctLWJheiBhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyhiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IGEnLCBOUyhiYXo9WydhJ10pKSwKKyAgICAgICAgKCctLWJheiBhIC0tYmF6IGInLCBOUyhiYXo9WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0T3B0aW9uYWxzQWN0aW9uQXBwZW5kV2l0aERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmQgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJy0tYmF6JywgYWN0aW9uPSdhcHBlbmQnLCBkZWZhdWx0PVsnWCddKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctLWJheicsICdhIC0tYmF6JywgJy0tYmF6IGEgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGJhej1bJ1gnXSkpLAorICAgICAgICAoJy0tYmF6IGEnLCBOUyhiYXo9WydYJywgJ2EnXSkpLAorICAgICAgICAoJy0tYmF6IGEgLS1iYXogYicsIE5TKGJhej1bJ1gnLCAnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZENvbnN0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGUgYXBwZW5kX2NvbnN0IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLWInLCBhY3Rpb249J2FwcGVuZF9jb25zdCcsIGNvbnN0PUV4Y2VwdGlvbiksCisgICAgICAgIFNpZygnLWMnLCBhY3Rpb249J2FwcGVuZCcsIGRlc3Q9J2InKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJ2EnLCAnLWMnLCAnYSAtYycsICctYngnLCAnLWIgeCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGI9Tm9uZSkpLAorICAgICAgICAoJy1iJywgTlMoYj1bRXhjZXB0aW9uXSkpLAorICAgICAgICAoJy1iIC1jeCAtYiAtY3l6JywgTlMoYj1bRXhjZXB0aW9uLCAneCcsIEV4Y2VwdGlvbiwgJ3l6J10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbmFsc0FjdGlvbkFwcGVuZENvbnN0V2l0aERlZmF1bHQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoZSBhcHBlbmRfY29uc3QgYWN0aW9uIGZvciBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctYicsIGFjdGlvbj0nYXBwZW5kX2NvbnN0JywgY29uc3Q9RXhjZXB0aW9uLCBkZWZhdWx0PVsnWCddKSwKKyAgICAgICAgU2lnKCctYycsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0nYicpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICctYycsICdhIC1jJywgJy1ieCcsICctYiB4J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoYj1bJ1gnXSkpLAorICAgICAgICAoJy1iJywgTlMoYj1bJ1gnLCBFeGNlcHRpb25dKSksCisgICAgICAgICgnLWIgLWN4IC1iIC1jeXonLCBOUyhiPVsnWCcsIEV4Y2VwdGlvbiwgJ3gnLCBFeGNlcHRpb24sICd5eiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBY3Rpb25Db3VudChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhlIGNvdW50IGFjdGlvbiBmb3IgYW4gT3B0aW9uYWwiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCcteCcsIGFjdGlvbj0nY291bnQnKV0KKyAgICBmYWlsdXJlcyA9IFsnYScsICcteCBhJywgJy14IGInLCAnLXggYSAteCBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lKSksCisgICAgICAgICgnLXgnLCBOUyh4PTEpKSwKKyAgICBdCisKKworIyA9PT09PT09PT09PT09PT09CisjIFBvc2l0aW9uYWwgdGVzdHMKKyMgPT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgZG9lc24ndCBzcGVjaWZ5IG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCcsICdhIGInXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczEoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHRoYXQgc3BlY2lmaWVzIGFuIG5hcmdzIG9mIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0xKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289WydhJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3MyKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyBhbiBuYXJncyBvZiAyIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MildCisgICAgZmFpbHVyZXMgPSBbJycsICdhJywgJy14JywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYScsICdiJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyB1bmxpbWl0ZWQgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1bXSkpLAorICAgICAgICAoJ2EnLCBOUyhmb289WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc1plcm9Pck1vcmVEZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyB1bmxpbWl0ZWQgbmFyZ3MgYW5kIGEgZGVmYXVsdCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScqJywgZGVmYXVsdD0nYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJy14J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPSdiYXInKSksCisgICAgICAgICgnYScsIE5TKGZvbz1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB0aGF0IHNwZWNpZmllcyBvbmUgb3IgbW9yZSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScrJyldCisgICAgZmFpbHVyZXMgPSBbJycsICcteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289WydhJ10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBhbiBPcHRpb25hbCBQb3NpdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKV0KKyAgICBmYWlsdXJlcyA9IFsnLXgnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsRGVmYXVsdChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gT3B0aW9uYWwgUG9zaXRpb25hbCB3aXRoIGEgZGVmYXVsdCB2YWx1ZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPSc/JywgZGVmYXVsdD00MildCisgICAgZmFpbHVyZXMgPSBbJy14JywgJ2EgYiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz00MikpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxDb252ZXJ0ZWREZWZhdWx0KFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBhbiBPcHRpb25hbCBQb3NpdGlvbmFsIHdpdGggYSBkZWZhdWx0IHZhbHVlCisgICAgdGhhdCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gdGhlIGFwcHJvcHJpYXRlIHR5cGUuCisgICAgIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JywgdHlwZT1pbnQsIGRlZmF1bHQ9JzQyJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICdhIGInLCAnMSAyJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPTQyKSksCisgICAgICAgICgnMScsIE5TKGZvbz0xKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdHdvIFBvc2l0aW9uYWxzIHRoYXQgZG9uJ3Qgc3BlY2lmeSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLXgnLCAnYScsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBubyBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCAxIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMk5vbmUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBQb3NpdGlvbmFsIHdpdGggMiBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MiksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJywgJ2EgYicsICdhIGIgYyBkJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPSdjJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG5vIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIHVubGltaXRlZCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicsIG5hcmdzPScqJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9W10pKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj1bJ2InLCAnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBubyBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBvbmUgb3IgbW9yZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicsIG5hcmdzPScrJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVPcHRpb25hbChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBubyBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBhbiBPcHRpb25hbCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycpLCBTaWcoJ2JhcicsIG5hcmdzPSc/JyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhIGIgYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9Tm9uZSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj0nYicpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCB1bmxpbWl0ZWQgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggbm9uZSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScqJyksIFNpZygnYmFyJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289W10sIGJhcj0nYScpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj0nYicpKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT25lT3JNb3JlTm9uZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCBvbmUgb3IgbW9yZSBuYXJncyBmb2xsb3dlZCBieSBvbmUgd2l0aCBub25lIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9JysnKSwgU2lnKCdiYXInKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJ10sIGJhcj0nYicpKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9J2MnKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxOb25lKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIGFuIE9wdGlvbmFsIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG5vbmUiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycsIGRlZmF1bHQ9NDIpLCBTaWcoJ2JhcicpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPTQyLCBiYXI9J2EnKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPSdiJykpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnczJaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggdW5saW1pdGVkIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MiksIFNpZygnYmFyJywgbmFyZ3M9JyonKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVtdKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMk9uZU9yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCAyIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIG9uZSBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MiksIFNpZygnYmFyJywgbmFyZ3M9JysnKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzMk9wdGlvbmFsKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIDIgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIG9wdGlvbmFsIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9MiksIFNpZygnYmFyJywgbmFyZ3M9Jz8nKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiIGMgZCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9Tm9uZSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPVsnYScsICdiJ10sIGJhcj0nYycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NaZXJvT3JNb3JlMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIFBvc2l0aW9uYWwgd2l0aCB1bmxpbWl0ZWQgbmFyZ3MgZm9sbG93ZWQgYnkgb25lIHdpdGggMSIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ2ZvbycsIG5hcmdzPScqJyksIFNpZygnYmFyJywgbmFyZ3M9MSldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsIF0KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYScsIE5TKGZvbz1bXSwgYmFyPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPVsnYSddLCBiYXI9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz1bJ2EnLCAnYiddLCBiYXI9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NPbmVPck1vcmUxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIG9uZSBvciBtb3JlIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nKycpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgYicsIE5TKGZvbz1bJ2EnXSwgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289WydhJywgJ2InXSwgYmFyPVsnYyddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWwxKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgUG9zaXRpb25hbCB3aXRoIGFuIE9wdGlvbmFsIG5hcmdzIGZvbGxvd2VkIGJ5IG9uZSB3aXRoIDEiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpLCBTaWcoJ2JhcicsIG5hcmdzPTEpXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYSBiIGMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoZm9vPU5vbmUsIGJhcj1bJ2EnXSkpLAorICAgICAgICAoJ2EgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc05vbmVaZXJvT3JNb3JlMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aHJlZSBQb3NpdGlvbmFsczogbm8gbmFyZ3MsIHVubGltaXRlZCBuYXJncyBhbmQgMSBuYXJncyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdmb28nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKicpLAorICAgICAgICBTaWcoJ2JheicsIG5hcmdzPTEpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9W10sIGJhej1bJ2InXSkpLAorICAgICAgICAoJ2EgYiBjJywgTlMoZm9vPSdhJywgYmFyPVsnYiddLCBiYXo9WydjJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzTmFyZ3NOb25lT25lT3JNb3JlMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aHJlZSBQb3NpdGlvbmFsczogbm8gbmFyZ3MsIG9uZSBvciBtb3JlIG5hcmdzIGFuZCAxIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycpLAorICAgICAgICBTaWcoJ2JhcicsIG5hcmdzPScrJyksCisgICAgICAgIFNpZygnYmF6JywgbmFyZ3M9MSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycnLCAnLS1mb28nLCAnYScsICdiJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1bJ2MnXSkpLAorICAgICAgICAoJ2EgYiBjIGQnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSwgYmF6PVsnZCddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzTm9uZU9wdGlvbmFsMShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aHJlZSBQb3NpdGlvbmFsczogbm8gbmFyZ3MsIG9wdGlvbmFsIG5hcmcgYW5kIDEgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTAuNjI1KSwKKyAgICAgICAgU2lnKCdiYXonLCBuYXJncz0xKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbycsICdhJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPTAuNjI1LCBiYXo9WydiJ10pKSwKKyAgICAgICAgKCdhIGIgYycsIE5TKGZvbz0nYScsIGJhcj0nYicsIGJhej1bJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsT3B0aW9uYWwoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgdHdvIG9wdGlvbmFsIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ2ZvbycsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnYmFyJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PTQyKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy0tZm9vJywgJ2EgYiBjJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoZm9vPU5vbmUsIGJhcj00MikpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnLCBiYXI9NDIpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9J2InKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc05hcmdzT3B0aW9uYWxaZXJvT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIG5hcmcgZm9sbG93ZWQgYnkgdW5saW1pdGVkIG5hcmdzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnZm9vJywgbmFyZ3M9Jz8nKSwgU2lnKCdiYXInLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gWyctLWZvbyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz1Ob25lLCBiYXI9W10pKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPVtdKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNOYXJnc09wdGlvbmFsT25lT3JNb3JlKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGFuIE9wdGlvbmFsIG5hcmcgZm9sbG93ZWQgYnkgb25lIG9yIG1vcmUgbmFyZ3MiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdmb28nLCBuYXJncz0nPycpLCBTaWcoJ2JhcicsIG5hcmdzPScrJyldCisgICAgZmFpbHVyZXMgPSBbJycsICctLWZvbyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EnLCBOUyhmb289Tm9uZSwgYmFyPVsnYSddKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnYSBiIGMnLCBOUyhmb289J2EnLCBiYXI9WydiJywgJ2MnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0UG9zaXRpb25hbHNDaG9pY2VzU3RyaW5nKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgc2V0IG9mIHNpbmdsZS1jaGFyYWN0ZXIgY2hvaWNlcyIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtTaWcoJ3NwYW0nLCBjaG9pY2VzPXNldCgnYWJjZGVmZycpKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2gnLCAnNDInLCAnZWYnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhJywgTlMoc3BhbT0nYScpKSwKKyAgICAgICAgKCdnJywgTlMoc3BhbT0nZycpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzQ2hvaWNlc0ludChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHNldCBvZiBpbnRlZ2VyIGNob2ljZXMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbU2lnKCdzcGFtJywgdHlwZT1pbnQsIGNob2ljZXM9cmFuZ2UoMjApKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2gnLCAnNDInLCAnZWYnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCc0JywgTlMoc3BhbT00KSksCisgICAgICAgICgnMTUnLCBOUyhzcGFtPTE1KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQb3NpdGlvbmFsc0FjdGlvbkFwcGVuZChQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgJ2FwcGVuZCcgYWN0aW9uIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3NwYW0nLCBhY3Rpb249J2FwcGVuZCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBhY3Rpb249J2FwcGVuZCcsIG5hcmdzPTIpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy0tZm9vJywgJ2EnLCAnYSBiJywgJ2EgYiBjIGQnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIGIgYycsIE5TKHNwYW09WydhJywgWydiJywgJ2MnXV0pKSwKKyAgICBdCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBDb21iaW5lZCBvcHRpb25hbHMgYW5kIHBvc2l0aW9uYWxzIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE9wdGlvbmFsc051bWVyaWNBbmRQb3NpdGlvbmFscyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgbmVnYXRpdmUgbnVtYmVyIGFyZ3Mgd2hlbiBudW1lcmljIG9wdGlvbnMgYXJlIHByZXNlbnQiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygneCcsIG5hcmdzPSc/JyksCisgICAgICAgIFNpZygnLTQnLCBkZXN0PSd5JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctMicsICctMzE1J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PUZhbHNlKSksCisgICAgICAgICgnYScsIE5TKHg9J2EnLCB5PUZhbHNlKSksCisgICAgICAgICgnLTQnLCBOUyh4PU5vbmUsIHk9VHJ1ZSkpLAorICAgICAgICAoJy00IGEnLCBOUyh4PSdhJywgeT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RPcHRpb25hbHNBbG1vc3ROdW1lcmljQW5kUG9zaXRpb25hbHMoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG5lZ2F0aXZlIG51bWJlciBhcmdzIHdoZW4gYWxtb3N0IG51bWVyaWMgb3B0aW9ucyBhcmUgcHJlc2VudCIiIgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd4JywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCctazQnLCBkZXN0PSd5JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWyctazMnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctMicsIE5TKHg9Jy0yJywgeT1GYWxzZSkpLAorICAgICAgICAoJ2EnLCBOUyh4PSdhJywgeT1GYWxzZSkpLAorICAgICAgICAoJy1rNCcsIE5TKHg9Tm9uZSwgeT1UcnVlKSksCisgICAgICAgICgnLWs0IGEnLCBOUyh4PSdhJywgeT1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RFbXB0eUFuZFNwYWNlQ29udGFpbmluZ0FyZ3VtZW50cyhQYXJzZXJUZXN0Q2FzZSk6CisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJ3gnLCBuYXJncz0nPycpLAorICAgICAgICBTaWcoJy15JywgJy0teXl5JywgZGVzdD0neScpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKFsnJ10sIE5TKHg9JycsIHk9Tm9uZSkpLAorICAgICAgICAoWydhIGJhZGdlciddLCBOUyh4PSdhIGJhZGdlcicsIHk9Tm9uZSkpLAorICAgICAgICAoWyctYSBiYWRnZXInXSwgTlMoeD0nLWEgYmFkZ2VyJywgeT1Ob25lKSksCisgICAgICAgIChbJy15JywgJyddLCBOUyh4PU5vbmUsIHk9JycpKSwKKyAgICAgICAgKFsnLXknLCAnYSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSdhIGJhZGdlcicpKSwKKyAgICAgICAgKFsnLXknLCAnLWEgYmFkZ2VyJ10sIE5TKHg9Tm9uZSwgeT0nLWEgYmFkZ2VyJykpLAorICAgICAgICAoWyctLXl5eT1hIGJhZGdlciddLCBOUyh4PU5vbmUsIHk9J2EgYmFkZ2VyJykpLAorICAgICAgICAoWyctLXl5eT0tYSBiYWRnZXInXSwgTlMoeD1Ob25lLCB5PSctYSBiYWRnZXInKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RQcmVmaXhDaGFyYWN0ZXJPbmx5QXJndW1lbnRzKFBhcnNlclRlc3RDYXNlKToKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJlZml4X2NoYXJzPSctKycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctJywgZGVzdD0neCcsIG5hcmdzPSc/JywgY29uc3Q9J2JhZGdlcicpLAorICAgICAgICBTaWcoJysnLCBkZXN0PSd5JywgdHlwZT1pbnQsIGRlZmF1bHQ9NDIpLAorICAgICAgICBTaWcoJy0rLScsIGRlc3Q9J3onLCBhY3Rpb249J3N0b3JlX3RydWUnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy15JywgJysgLSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKHg9Tm9uZSwgeT00Miwgej1GYWxzZSkpLAorICAgICAgICAoJy0nLCBOUyh4PSdiYWRnZXInLCB5PTQyLCB6PUZhbHNlKSksCisgICAgICAgICgnLSBYJywgTlMoeD0nWCcsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICAgICAgKCcrIC0zJywgTlMoeD1Ob25lLCB5PS0zLCB6PUZhbHNlKSksCisgICAgICAgICgnLSstJywgTlMoeD1Ob25lLCB5PTQyLCB6PVRydWUpKSwKKyAgICAgICAgKCctID09PScsIE5TKHg9Jz09PScsIHk9NDIsIHo9RmFsc2UpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE5hcmdzWmVyb09yTW9yZShQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgc3BlY2lmeWluZyBhbiBhcmdzIGZvciBhbiBPcHRpb25hbCB0aGF0IGFjY2VwdHMgemVybyBvciBtb3JlIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLXgnLCBuYXJncz0nKicpLCBTaWcoJ3knLCBuYXJncz0nKicpXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PVtdKSksCisgICAgICAgICgnLXgnLCBOUyh4PVtdLCB5PVtdKSksCisgICAgICAgICgnLXggYScsIE5TKHg9WydhJ10sIHk9W10pKSwKKyAgICAgICAgKCcteCBhIC0tIGInLCBOUyh4PVsnYSddLCB5PVsnYiddKSksCisgICAgICAgICgnYScsIE5TKHg9Tm9uZSwgeT1bJ2EnXSkpLAorICAgICAgICAoJ2EgLXgnLCBOUyh4PVtdLCB5PVsnYSddKSksCisgICAgICAgICgnYSAteCBiJywgTlMoeD1bJ2InXSwgeT1bJ2EnXSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0TmFyZ3NSZW1haW5kZXIoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHNwZWNpZnlpbmcgYSBwb3NpdGlvbmFsIHdpdGggbmFyZ3M9UkVNQUlOREVSIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygneCcpLCBTaWcoJ3knLCBuYXJncz0nLi4uJyksIFNpZygnLXonKV0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy16JywgJy16IFonXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdYJywgTlMoeD0nWCcsIHk9W10sIHo9Tm9uZSkpLAorICAgICAgICAoJy16IFogWCcsIE5TKHg9J1gnLCB5PVtdLCB6PSdaJykpLAorICAgICAgICAoJ1ggQSBCIC16IFonLCBOUyh4PSdYJywgeT1bJ0EnLCAnQicsICcteicsICdaJ10sIHo9Tm9uZSkpLAorICAgICAgICAoJ1ggWSAtLWZvbycsIE5TKHg9J1gnLCB5PVsnWScsICctLWZvbyddLCB6PU5vbmUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdE9wdGlvbkxpa2UoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3RzIG9wdGlvbnMgdGhhdCBtYXkgb3IgbWF5IG5vdCBiZSBhcmd1bWVudHMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPWZsb2F0KSwKKyAgICAgICAgU2lnKCctMycsIHR5cGU9ZmxvYXQsIGRlc3Q9J3knKSwKKyAgICAgICAgU2lnKCd6JywgbmFyZ3M9JyonKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJy15Mi41JywgJy14YScsICcteCAtYScsCisgICAgICAgICAgICAgICAgJy14IC0zJywgJy14IC0zLjUnLCAnLTMgLTMuNScsCisgICAgICAgICAgICAgICAgJy14IC0yLjUnLCAnLXggLTIuNSBhJywgJy0zIC0uNScsCisgICAgICAgICAgICAgICAgJ2EgeCAtMScsICcteCAtMSBhJywgJy0zIC0xIGEnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcnLCBOUyh4PU5vbmUsIHk9Tm9uZSwgej1bXSkpLAorICAgICAgICAoJy14IDIuNScsIE5TKHg9Mi41LCB5PU5vbmUsIHo9W10pKSwKKyAgICAgICAgKCcteCAyLjUgYScsIE5TKHg9Mi41LCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCctMy41JywgTlMoeD1Ob25lLCB5PTAuNSwgej1bXSkpLAorICAgICAgICAoJy0zLS41JywgTlMoeD1Ob25lLCB5PS0wLjUsIHo9W10pKSwKKyAgICAgICAgKCctMyAuNScsIE5TKHg9Tm9uZSwgeT0wLjUsIHo9W10pKSwKKyAgICAgICAgKCdhIC0zLjUnLCBOUyh4PU5vbmUsIHk9MC41LCB6PVsnYSddKSksCisgICAgICAgICgnYScsIE5TKHg9Tm9uZSwgeT1Ob25lLCB6PVsnYSddKSksCisgICAgICAgICgnYSAteCAxJywgTlMoeD0xLjAsIHk9Tm9uZSwgej1bJ2EnXSkpLAorICAgICAgICAoJy14IDEgYScsIE5TKHg9MS4wLCB5PU5vbmUsIHo9WydhJ10pKSwKKyAgICAgICAgKCctMyAxIGEnLCBOUyh4PU5vbmUsIHk9MS4wLCB6PVsnYSddKSksCisgICAgXQorCisKK2NsYXNzIFRlc3REZWZhdWx0U3VwcHJlc3MoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYWN0aW9ucyB3aXRoIHN1cHByZXNzZWQgZGVmYXVsdHMiIiIKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKicsIGRlZmF1bHQ9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJy0tYmF6JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1hcmdwYXJzZS5TVVBQUkVTUyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKCkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnLS1iYXonLCBOUyhiYXo9VHJ1ZSkpLAorICAgICAgICAoJ2EgLS1iYXonLCBOUyhmb289J2EnLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJy0tYmF6IGEgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBhcnNlckRlZmF1bHRTdXBwcmVzcyhQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhY3Rpb25zIHdpdGggYSBwYXJzZXItbGV2ZWwgZGVmYXVsdCBvZiBTVVBQUkVTUyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhhcmd1bWVudF9kZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKicpLAorICAgICAgICBTaWcoJy0tYmF6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKCkpLAorICAgICAgICAoJ2EnLCBOUyhmb289J2EnKSksCisgICAgICAgICgnYSBiJywgTlMoZm9vPSdhJywgYmFyPVsnYiddKSksCisgICAgICAgICgnLS1iYXonLCBOUyhiYXo9VHJ1ZSkpLAorICAgICAgICAoJ2EgLS1iYXonLCBOUyhmb289J2EnLCBiYXo9VHJ1ZSkpLAorICAgICAgICAoJy0tYmF6IGEgYicsIE5TKGZvbz0nYScsIGJhcj1bJ2InXSwgYmF6PVRydWUpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdFBhcnNlckRlZmF1bHQ0MihQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhY3Rpb25zIHdpdGggYSBwYXJzZXItbGV2ZWwgZGVmYXVsdCBvZiA0MiIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhhcmd1bWVudF9kZWZhdWx0PTQyLCB2ZXJzaW9uPScxLjAnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnZm9vJywgbmFyZ3M9Jz8nKSwKKyAgICAgICAgU2lnKCdiYXInLCBuYXJncz0nKicpLAorICAgICAgICBTaWcoJy0tYmF6JywgYWN0aW9uPSdzdG9yZV90cnVlJyksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJycsIE5TKGZvbz00MiwgYmFyPTQyLCBiYXo9NDIpKSwKKyAgICAgICAgKCdhJywgTlMoZm9vPSdhJywgYmFyPTQyLCBiYXo9NDIpKSwKKyAgICAgICAgKCdhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej00MikpLAorICAgICAgICAoJy0tYmF6JywgTlMoZm9vPTQyLCBiYXI9NDIsIGJhej1UcnVlKSksCisgICAgICAgICgnYSAtLWJheicsIE5TKGZvbz0nYScsIGJhcj00MiwgYmF6PVRydWUpKSwKKyAgICAgICAgKCctLWJheiBhIGInLCBOUyhmb289J2EnLCBiYXI9WydiJ10sIGJhej1UcnVlKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RBcmd1bWVudHNGcm9tRmlsZShUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHJlYWRpbmcgYXJndW1lbnRzIGZyb20gYSBmaWxlIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFRlc3RBcmd1bWVudHNGcm9tRmlsZSwgc2VsZikuc2V0VXAoKQorICAgICAgICBmaWxlX3RleHRzID0gWworICAgICAgICAgICAgKCdoZWxsbycsICdoZWxsbyB3b3JsZCFcbicpLAorICAgICAgICAgICAgKCdyZWN1cnNpdmUnLCAnLWFcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BoZWxsbycpLAorICAgICAgICAgICAgKCdpbnZhbGlkJywgJ0Buby1zdWNoLXBhdGhcbicpLAorICAgICAgICBdCisgICAgICAgIGZvciBwYXRoLCB0ZXh0IGluIGZpbGVfdGV4dHM6CisgICAgICAgICAgICBmaWxlID0gb3BlbihwYXRoLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKHRleHQpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoZnJvbWZpbGVfcHJlZml4X2NoYXJzPSdAJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy1hJyksCisgICAgICAgIFNpZygneCcpLAorICAgICAgICBTaWcoJ3knLCBuYXJncz0nKycpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnJywgJy1iJywgJ1gnLCAnQGludmFsaWQnLCAnQG1pc3NpbmcnXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdYIFknLCBOUyhhPU5vbmUsIHg9J1gnLCB5PVsnWSddKSksCisgICAgICAgICgnWCAtYSBBIFkgWicsIE5TKGE9J0EnLCB4PSdYJywgeT1bJ1knLCAnWiddKSksCisgICAgICAgICgnQGhlbGxvIFgnLCBOUyhhPU5vbmUsIHg9J2hlbGxvIHdvcmxkIScsIHk9WydYJ10pKSwKKyAgICAgICAgKCdYIEBoZWxsbycsIE5TKGE9Tm9uZSwgeD0nWCcsIHk9WydoZWxsbyB3b3JsZCEnXSkpLAorICAgICAgICAoJy1hIEIgQHJlY3Vyc2l2ZSBZIFonLCBOUyhhPSdBJywgeD0naGVsbG8gd29ybGQhJywgeT1bJ1knLCAnWiddKSksCisgICAgICAgICgnWCBAcmVjdXJzaXZlIFogLWEgQicsIE5TKGE9J0InLCB4PSdYJywgeT1bJ2hlbGxvIHdvcmxkIScsICdaJ10pKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFyZ3VtZW50c0Zyb21GaWxlQ29udmVydGVyKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgcmVhZGluZyBhcmd1bWVudHMgZnJvbSBhIGZpbGUiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEFyZ3VtZW50c0Zyb21GaWxlQ29udmVydGVyLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZpbGVfdGV4dHMgPSBbCisgICAgICAgICAgICAoJ2hlbGxvJywgJ2hlbGxvIHdvcmxkIVxuJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHBhdGgsIHRleHQgaW4gZmlsZV90ZXh0czoKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICd3JykKKyAgICAgICAgICAgIGZpbGUud3JpdGUodGV4dCkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgY2xhc3MgRnJvbUZpbGVDb252ZXJ0ZXJBcmd1bWVudFBhcnNlcihFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcik6CisKKyAgICAgICAgZGVmIGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhzZWxmLCBhcmdfbGluZSk6CisgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ19saW5lLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGFyZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHlpZWxkIGFyZworICAgIHBhcnNlcl9jbGFzcyA9IEZyb21GaWxlQ29udmVydGVyQXJndW1lbnRQYXJzZXIKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKGZyb21maWxlX3ByZWZpeF9jaGFycz0nQCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCd5JywgbmFyZ3M9JysnKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdAaGVsbG8gWCcsIE5TKHk9WydoZWxsbycsICd3b3JsZCEnLCAnWCddKSksCisgICAgXQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09CisjIFR5cGUgY29udmVyc2lvbiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEZpbGVUeXBlUmVwcihUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9yKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicpIiwgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3diXzEoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgnd2InLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgnd2InLCAxKSIsIHJlcHIodHlwZSkpCisKKworY2xhc3MgUkZpbGUob2JqZWN0KToKKyAgICBzZWVuID0ge30KKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG90aGVyIGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSBzZWxmLnNlZW5bb3RoZXJdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi5zZWVuW290aGVyXSA9IG90aGVyLnJlYWQoKQorICAgICAgICAgICAgb3RoZXIuY2xvc2UoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0ZXh0LCBzdHIpOgorICAgICAgICAgICAgdGV4dCA9IHRleHQuZGVjb2RlKCdhc2NpaScpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZSA9PSB0ZXh0CisKKworY2xhc3MgVGVzdEZpbGVUeXBlUihUZW1wRGlyTWl4aW4sIFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBGaWxlVHlwZSBvcHRpb24vYXJndW1lbnQgdHlwZSBmb3IgcmVhZGluZyBmaWxlcyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0RmlsZVR5cGVSLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIGZvciBmaWxlX25hbWUgaW4gWydmb28nLCAnYmFyJ106CisgICAgICAgICAgICBmaWxlID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wX2RpciwgZmlsZV9uYW1lKSwgJ3cnKQorICAgICAgICAgICAgZmlsZS53cml0ZShmaWxlX25hbWUpCisgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgc2VsZi5jcmVhdGVfcmVhZG9ubHlfZmlsZSgncmVhZG9ubHknKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3InKSksCisgICAgXQorICAgIGZhaWx1cmVzID0gWycteCcsICcnLCAnbm9uLWV4aXN0ZW50LWZpbGUudHh0J10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnZm9vJywgTlMoeD1Ob25lLCBzcGFtPVJGaWxlKCdmb28nKSkpLAorICAgICAgICAoJy14IGZvbyBiYXInLCBOUyh4PVJGaWxlKCdmb28nKSwgc3BhbT1SRmlsZSgnYmFyJykpKSwKKyAgICAgICAgKCdiYXIgLXggZm9vJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnLXggLSAtJywgTlMoeD1zeXMuc3RkaW4sIHNwYW09c3lzLnN0ZGluKSksCisgICAgICAgICgncmVhZG9ubHknLCBOUyh4PU5vbmUsIHNwYW09UkZpbGUoJ3JlYWRvbmx5JykpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEZpbGVUeXBlUkIoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHJlYWRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlUkIsIHNlbGYpLnNldFVwKCkKKyAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBbJ2ZvbycsICdiYXInXToKKyAgICAgICAgICAgIGZpbGUgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLnRlbXBfZGlyLCBmaWxlX25hbWUpLCAndycpCisgICAgICAgICAgICBmaWxlLndyaXRlKGZpbGVfbmFtZSkKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3JiJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCdyYicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1SRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1SRmlsZSgnZm9vJyksIHNwYW09UkZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9UkZpbGUoJ2ZvbycpLCBzcGFtPVJGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZGluLCBzcGFtPXN5cy5zdGRpbikpLAorICAgIF0KKworCitjbGFzcyBXRmlsZShvYmplY3QpOgorICAgIHNlZW4gPSBzZXQoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgb3RoZXIgbm90IGluIHNlbGYuc2VlbjoKKyAgICAgICAgICAgIHRleHQgPSAnQ2hlY2sgdGhhdCBmaWxlIGlzIHdyaXRhYmxlLicKKyAgICAgICAgICAgIGlmICdiJyBpbiBvdGhlci5tb2RlOgorICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZSgnYXNjaWknKQorICAgICAgICAgICAgb3RoZXIud3JpdGUodGV4dCkKKyAgICAgICAgICAgIG90aGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2Vlbi5hZGQob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLm5hbWUgPT0gb3RoZXIubmFtZQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVcoVGVtcERpck1peGluLCBQYXJzZXJUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgRmlsZVR5cGUgb3B0aW9uL2FyZ3VtZW50IHR5cGUgZm9yIHdyaXRpbmcgZmlsZXMiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdEZpbGVUeXBlVywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLmNyZWF0ZV9yZWFkb25seV9maWxlKCdyZWFkb25seScpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICAgICAgU2lnKCdzcGFtJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJycsICdyZWFkb25seSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RGaWxlVHlwZVdCKFRlbXBEaXJNaXhpbiwgUGFyc2VyVGVzdENhc2UpOgorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJykpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPWFyZ3BhcnNlLkZpbGVUeXBlKCd3YicpKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbJy14JywgJyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2ZvbycsIE5TKHg9Tm9uZSwgc3BhbT1XRmlsZSgnZm9vJykpKSwKKyAgICAgICAgKCcteCBmb28gYmFyJywgTlMoeD1XRmlsZSgnZm9vJyksIHNwYW09V0ZpbGUoJ2JhcicpKSksCisgICAgICAgICgnYmFyIC14IGZvbycsIE5TKHg9V0ZpbGUoJ2ZvbycpLCBzcGFtPVdGaWxlKCdiYXInKSkpLAorICAgICAgICAoJy14IC0gLScsIE5TKHg9c3lzLnN0ZG91dCwgc3BhbT1zeXMuc3Rkb3V0KSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2FsbGFibGUoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3Qgc29tZSBjYWxsYWJsZXMgYXMgb3B0aW9uL2FyZ3VtZW50IHR5cGVzIiIiCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZWdncycsIHR5cGU9Y29tcGxleCksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9ZmxvYXQpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFsnYScsICc0MmonLCAnLS1lZ2dzIGEnLCAnLS1lZ2dzIDJpJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1lZ2dzPTQyIDQyJywgTlMoZWdncz00Miwgc3BhbT00Mi4wKSksCisgICAgICAgICgnLS1lZ2dzIDJqIC0tIC0xLjUnLCBOUyhlZ2dzPTJqLCBzcGFtPS0xLjUpKSwKKyAgICAgICAgKCcxMDI0LjY3NScsIE5TKGVnZ3M9Tm9uZSwgc3BhbT0xMDI0LjY3NSkpLAorICAgIF0KKworCitjbGFzcyBUZXN0VHlwZVVzZXJEZWZpbmVkKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIG9wdGlvbi9hcmd1bWVudCB0eXBlIiIiCisKKyAgICBjbGFzcyBNeVR5cGUoVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPU15VHlwZSksCisgICAgICAgIFNpZygnc3BhbScsIHR5cGU9TXlUeXBlKSwKKyAgICBdCisgICAgZmFpbHVyZXMgPSBbXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCdhIC14IGInLCBOUyh4PU15VHlwZSgnYicpLCBzcGFtPU15VHlwZSgnYScpKSksCisgICAgICAgICgnLXhmIGcnLCBOUyh4PU15VHlwZSgnZicpLCBzcGFtPU15VHlwZSgnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlQ2xhc3NpY0NsYXNzKFBhcnNlclRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgY2xhc3NpYyBjbGFzcyB0eXBlIiIiCisKKyAgICBjbGFzcyBDOgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiAodHlwZShzZWxmKSwgc2VsZi52YWx1ZSkgPT0gKHR5cGUob3RoZXIpLCBvdGhlci52YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCB0eXBlPUMpLAorICAgICAgICBTaWcoJ3NwYW0nLCB0eXBlPUMpLAorICAgIF0KKyAgICBmYWlsdXJlcyA9IFtdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJ2EgLXggYicsIE5TKHg9QygnYicpLCBzcGFtPUMoJ2EnKSkpLAorICAgICAgICAoJy14ZiBnJywgTlMoeD1DKCdmJyksIHNwYW09QygnZycpKSksCisgICAgXQorCisKK2NsYXNzIFRlc3RUeXBlUmVnaXN0cmF0aW9uKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGEgdXNlci1kZWZpbmVkIHR5cGUgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZXRfbXlfdHlwZShzdHJpbmcpOgorICAgICAgICAgICAgcmV0dXJuICdteV90eXBleyVzfScgJSBzdHJpbmcKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcigndHlwZScsICdteV90eXBlJywgZ2V0X215X3R5cGUpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgdHlwZT0nbXlfdHlwZScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCB0eXBlPSdteV90eXBlJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcxJy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyh4PU5vbmUsIHk9J215X3R5cGV7MX0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLXggMSA0Micuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoeD0nbXlfdHlwZXsxfScsIHk9J215X3R5cGV7NDJ9JykpCisKKworIyA9PT09PT09PT09PT0KKyMgQWN0aW9uIHRlc3RzCisjID09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWN0aW9uVXNlckRlZmluZWQoUGFyc2VyVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSB1c2VyLWRlZmluZWQgb3B0aW9uL2FyZ3VtZW50IGFjdGlvbiIiIgorCisgICAgY2xhc3MgT3B0aW9uYWxBY3Rpb24oYXJncGFyc2UuQWN0aW9uKToKKworICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgcGFyc2VyLCBuYW1lc3BhY2UsIHZhbHVlLCBvcHRpb25fc3RyaW5nPU5vbmUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24gYW5kIG9wdGlvbiBzdHJpbmcKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdzcGFtJywgJ2Rlc3Q6ICVzJyAlIHNlbGYuZGVzdAorICAgICAgICAgICAgICAgIGFzc2VydCBvcHRpb25fc3RyaW5nID09ICctcycsICdmbGFnOiAlcycgJSBvcHRpb25fc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIG9wdGlvbiBpcyBiZWZvcmUgYXJndW1lbnQsIGJhZGdlcj0yLCBhbmQgd2hlbgorICAgICAgICAgICAgICAgICMgb3B0aW9uIGlzIGFmdGVyIGFyZ3VtZW50LCBiYWRnZXI9PHdoYXRldmVyIHdhcyBzZXQ+CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMgPSBOUyhzcGFtPTAuMjUpCisgICAgICAgICAgICAgICAgaWYgdmFsdWUgaW4gWzAuMTI1LCAwLjYyNV06CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX25zLmJhZGdlciA9IDIKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyLjBdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5iYWRnZXIgPSA4NAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCd2YWx1ZTogJXMnICUgdmFsdWUpCisgICAgICAgICAgICAgICAgYXNzZXJ0IGV4cGVjdGVkX25zID09IG5hbWVzcGFjZSwgKCdleHBlY3RlZCAlcywgZ290ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9ucywgbmFtZXNwYWNlKSkKKyAgICAgICAgICAgIGV4Y2VwdCBBc3NlcnRpb25FcnJvcjoKKyAgICAgICAgICAgICAgICBlID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgICAgICByYWlzZSBBcmd1bWVudFBhcnNlckVycm9yKCdvcHRfYWN0aW9uIGZhaWxlZDogJXMnICUgZSkKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCAnc3BhbScsIHZhbHVlKQorCisgICAgY2xhc3MgUG9zaXRpb25hbEFjdGlvbihhcmdwYXJzZS5BY3Rpb24pOgorCisgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBwYXJzZXIsIG5hbWVzcGFjZSwgdmFsdWUsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IG9wdGlvbl9zdHJpbmcgaXMgTm9uZSwgKCdvcHRpb25fc3RyaW5nOiAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5nKQorICAgICAgICAgICAgICAgICMgY2hlY2sgZGVzdGluYXRpb24KKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5kZXN0ID09ICdiYWRnZXInLCAnZGVzdDogJXMnICUgc2VsZi5kZXN0CisgICAgICAgICAgICAgICAgIyB3aGVuIGFyZ3VtZW50IGlzIGJlZm9yZSBvcHRpb24sIHNwYW09MC4yNSwgYW5kIHdoZW4KKyAgICAgICAgICAgICAgICAjIG9wdGlvbiBpcyBhZnRlciBhcmd1bWVudCwgc3BhbT08d2hhdGV2ZXIgd2FzIHNldD4KKyAgICAgICAgICAgICAgICBleHBlY3RlZF9ucyA9IE5TKGJhZGdlcj0yKQorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIFs0MiwgODRdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC4yNQorICAgICAgICAgICAgICAgIGVsaWYgdmFsdWUgaW4gWzFdOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9ucy5zcGFtID0gMC42MjUKKyAgICAgICAgICAgICAgICBlbGlmIHZhbHVlIGluIFsyXToKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbnMuc3BhbSA9IDAuMTI1CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ3ZhbHVlOiAlcycgJSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfbnMgPT0gbmFtZXNwYWNlLCAoJ2V4cGVjdGVkICVzLCBnb3QgJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX25zLCBuYW1lc3BhY2UpKQorICAgICAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgICAgIGUgPSBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICAgICAgICAgIHJhaXNlIEFyZ3VtZW50UGFyc2VyRXJyb3IoJ2FyZ19hY3Rpb24gZmFpbGVkOiAlcycgJSBlKQorICAgICAgICAgICAgc2V0YXR0cihuYW1lc3BhY2UsICdiYWRnZXInLCB2YWx1ZSkKKworICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXMnLCBkZXN0PSdzcGFtJywgYWN0aW9uPU9wdGlvbmFsQWN0aW9uLAorICAgICAgICAgICAgdHlwZT1mbG9hdCwgZGVmYXVsdD0wLjI1KSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBhY3Rpb249UG9zaXRpb25hbEFjdGlvbiwKKyAgICAgICAgICAgIHR5cGU9aW50LCBuYXJncz0nPycsIGRlZmF1bHQ9MiksCisgICAgXQorICAgIGZhaWx1cmVzID0gW10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLXMwLjEyNScsIE5TKHNwYW09MC4xMjUsIGJhZGdlcj0yKSksCisgICAgICAgICgnNDInLCBOUyhzcGFtPTAuMjUsIGJhZGdlcj00MikpLAorICAgICAgICAoJy1zIDAuNjI1IDEnLCBOUyhzcGFtPTAuNjI1LCBiYWRnZXI9MSkpLAorICAgICAgICAoJzg0IC1zMicsIE5TKHNwYW09Mi4wLCBiYWRnZXI9ODQpKSwKKyAgICBdCisKKworY2xhc3MgVGVzdEFjdGlvblJlZ2lzdHJhdGlvbihUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBhIHVzZXItZGVmaW5lZCBhY3Rpb24gc3VwcGxpZWQgYnkgcmVnaXN0ZXJpbmcgaXQiIiIKKworICAgIGNsYXNzIE15QWN0aW9uKGFyZ3BhcnNlLkFjdGlvbik6CisKKyAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHBhcnNlciwgbmFtZXNwYWNlLCB2YWx1ZXMsIG9wdGlvbl9zdHJpbmc9Tm9uZSk6CisgICAgICAgICAgICBzZXRhdHRyKG5hbWVzcGFjZSwgc2VsZi5kZXN0LCAnZm9vWyVzXScgJSB2YWx1ZXMpCisKKyAgICBkZWYgdGVzdChzZWxmKToKKworICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWdpc3RlcignYWN0aW9uJywgJ215X2FjdGlvbicsIHNlbGYuTXlBY3Rpb24pCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhZGdlcicsIGFjdGlvbj0nbXlfYWN0aW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKFsnMSddKSwgTlMoYmFkZ2VyPSdmb29bMV0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncyhbJzQyJ10pLCBOUyhiYWRnZXI9J2Zvb1s0Ml0nKSkKKworCisjID09PT09PT09PT09PT09PT0KKyMgU3VicGFyc2VycyB0ZXN0cworIyA9PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBZGRTdWJwYXJzZXJzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBhZGRfc3VicGFyc2VycyBtZXRob2QiIiIKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCBzdWJwYXJzZXJfaGVscD1GYWxzZSwgcHJlZml4X2NoYXJzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGFsaWFzZXM9RmFsc2UpOgorICAgICAgICAjIGNyZWF0ZSBhIHBhcnNlciB3aXRoIGEgc3VicGFyc2VycyBhcmd1bWVudAorICAgICAgICBpZiBwcmVmaXhfY2hhcnM6CisgICAgICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgICAgICBwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J21haW4gZGVzY3JpcHRpb24nLCBwcmVmaXhfY2hhcnM9cHJlZml4X2NoYXJzKQorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICAgICBwcmVmaXhfY2hhcnNbMF0gKiAyICsgJ2ZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgIHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nbWFpbiBkZXNjcmlwdGlvbicpCisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAgICAgICAgICctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgICAgICdiYXInLCB0eXBlPWZsb2F0LCBoZWxwPSdiYXIgaGVscCcpCisKKyAgICAgICAgIyBjaGVjayB0aGF0IG9ubHkgb25lIHN1YnBhcnNlcnMgYXJndW1lbnQgY2FuIGJlIGFkZGVkCisgICAgICAgIHN1YnBhcnNlcnNfa3dhcmdzID0ge30KKyAgICAgICAgaWYgYWxpYXNlczoKKyAgICAgICAgICAgIHN1YnBhcnNlcnNfa3dhcmdzWydtZXRhdmFyJ10gPSAnQ09NTUFORCcKKyAgICAgICAgICAgIHN1YnBhcnNlcnNfa3dhcmdzWyd0aXRsZSddID0gJ2NvbW1hbmRzJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3VicGFyc2Vyc19rd2FyZ3NbJ2hlbHAnXSA9ICdjb21tYW5kIGhlbHAnCisgICAgICAgIHN1YnBhcnNlcnMgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKipzdWJwYXJzZXJzX2t3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlci5hZGRfc3VicGFyc2VycykKKworICAgICAgICAjIGFkZCBmaXJzdCBzdWItcGFyc2VyCisgICAgICAgIHBhcnNlcjFfa3dhcmdzID0gZGljdChkZXNjcmlwdGlvbj0nMSBkZXNjcmlwdGlvbicpCisgICAgICAgIGlmIHN1YnBhcnNlcl9oZWxwOgorICAgICAgICAgICAgcGFyc2VyMV9rd2FyZ3NbJ2hlbHAnXSA9ICcxIGhlbHAnCisgICAgICAgIGlmIGFsaWFzZXM6CisgICAgICAgICAgICBwYXJzZXIxX2t3YXJnc1snYWxpYXNlcyddID0gWycxYWxpYXMxJywgJzFhbGlhczInXQorICAgICAgICBwYXJzZXIxID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcxJywgKipwYXJzZXIxX2t3YXJncykKKyAgICAgICAgcGFyc2VyMS5hZGRfYXJndW1lbnQoJy13JywgdHlwZT1pbnQsIGhlbHA9J3cgaGVscCcpCisgICAgICAgIHBhcnNlcjEuYWRkX2FyZ3VtZW50KCd4JywgY2hvaWNlcz0nYWJjJywgaGVscD0neCBoZWxwJykKKworICAgICAgICAjIGFkZCBzZWNvbmQgc3ViLXBhcnNlcgorICAgICAgICBwYXJzZXIyX2t3YXJncyA9IGRpY3QoZGVzY3JpcHRpb249JzIgZGVzY3JpcHRpb24nKQorICAgICAgICBpZiBzdWJwYXJzZXJfaGVscDoKKyAgICAgICAgICAgIHBhcnNlcjJfa3dhcmdzWydoZWxwJ10gPSAnMiBoZWxwJworICAgICAgICBwYXJzZXIyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcyJywgKipwYXJzZXIyX2t3YXJncykKKyAgICAgICAgcGFyc2VyMi5hZGRfYXJndW1lbnQoJy15JywgY2hvaWNlcz0nMTIzJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgcGFyc2VyMi5hZGRfYXJndW1lbnQoJ3onLCB0eXBlPWNvbXBsZXgsIG5hcmdzPScqJywgaGVscD0neiBoZWxwJykKKworICAgICAgICAjIHJldHVybiB0aGUgbWFpbiBwYXJzZXIKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi5wYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKCkKKyAgICAgICAgc2VsZi5jb21tYW5kX2hlbHBfcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcihzdWJwYXJzZXJfaGVscD1UcnVlKQorCisgICAgZGVmIHRlc3RfcGFyc2VfYXJnc19mYWlsdXJlcyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBzb21lIGZhaWx1cmUgY2FzZXM6CisgICAgICAgIGZvciBhcmdzX3N0ciBpbiBbJycsICdhJywgJ2EgYScsICcwLjUgYScsICcwLjUgMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzAuNSAxIC15JywgJzAuNSAyIC13J106CisgICAgICAgICAgICBhcmdzID0gYXJnc19zdHIuc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYucGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9hcmdzKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHNvbWUgbm9uLWZhaWx1cmUgY2FzZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKCcwLjUgMSBiIC13IDcnLnNwbGl0KCkpLAorICAgICAgICAgICAgTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnMC4yNSAtLWZvbyAyIC15IDIgM2ogLS0gLTFqJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4yNSwgeT0nMicsIHo9WzNqLCAtMWpdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2VfYXJncygnLS1mb28gMC4xMjUgMSBjJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIE5TKGZvbz1UcnVlLCBiYXI9MC4xMjUsIHc9Tm9uZSwgeD0nYycpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wYXJzZV9rbm93bl9hcmdzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbXSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoJzAuNSAtcCAxIGIgLXcgNycuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctcCddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDEgYiAtdyA3IC1wJy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1wJ10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCcwLjUgMSBiIC1xIC1ycyAtdyA3Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgIChOUyhmb289RmFsc2UsIGJhcj0wLjUsIHc9NywgeD0nYicpLCBbJy1xJywgJy1ycyddKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5wYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IC1XIDEgYiAtWCBZIC13IDcgWicuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PTcsIHg9J2InKSwgWyctVycsICctWCcsICdZJywgJ1onXSksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKGRlc3Q9J2JhcicpCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICAgICBwYXJzZXIxLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyhmb289RmFsc2UsIGJhcj0nMScsIGJhej0nMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcxIDInLnNwbGl0KCkpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uCisKKyAgICAgICAgICAgIG1haW4gZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIGJhciAgICAgICAgIGJhciBoZWxwCisgICAgICAgICAgICAgIHsxLDJ9ICAgICAgIGNvbW1hbmQgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9oZWxwX2V4dHJhX3ByZWZpeF9jaGFycyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgLSBpcyBzdGlsbCB1c2VkIGZvciBoZWxwIGlmIGl0IGlzIGEgbm9uLWZpcnN0IHByZWZpeCBjaGFyCisgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIocHJlZml4X2NoYXJzPScrOi0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWy1oXSBbKytmb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsrK2Zvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgICsrZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisKKyAgICBkZWYgdGVzdF9oZWxwX2FsdGVybmF0ZV9wcmVmaXhfY2hhcnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IHNlbGYuX2dldF9wYXJzZXIocHJlZml4X2NoYXJzPScrOi8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfdXNhZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndXNhZ2U6IFBST0cgWytoXSBbKytmb29dIGJhciB7MSwyfSAuLi5cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmZvcm1hdF9oZWxwKCksIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbK2hdIFsrK2Zvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAraCwgKytoZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgICsrZm9vICAgICAgIGZvbyBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX2NvbW1hbmRfaGVscChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbW1hbmRfaGVscF9wYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29tbWFuZF9oZWxwX3BhcnNlci5mb3JtYXRfaGVscCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvb10gYmFyIHsxLDJ9IC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICBiYXIgaGVscAorICAgICAgICAgICAgICB7MSwyfSAgICAgICBjb21tYW5kIGhlbHAKKyAgICAgICAgICAgICAgICAxICAgICAgICAgMSBoZWxwCisgICAgICAgICAgICAgICAgMiAgICAgICAgIDIgaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28gICAgICAgZm9vIGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXJfdGl0bGVfaGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdtYWluIGRlc2NyaXB0aW9uJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdmb28gaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2Vycyh0aXRsZT0nc3ViY29tbWFuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdjb21tYW5kIGhlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2FkZGl0aW9uYWwgdGV4dCcpCisgICAgICAgIHBhcnNlcjEgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJzEnKQorICAgICAgICBwYXJzZXIyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X3VzYWdlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3VzYWdlOiBQUk9HIFstaF0gWy0tZm9vXSBiYXIgezEsMn0gLi4uXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoJycnXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciB7MSwyfSAuLi4KKworICAgICAgICAgICAgbWFpbiBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYmFyICAgICAgICAgYmFyIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC0tZm9vICAgICAgIGZvbyBoZWxwCisKKyAgICAgICAgICAgIHN1YmNvbW1hbmRzOgorICAgICAgICAgICAgICBjb21tYW5kIGhlbHAKKworICAgICAgICAgICAgICB7MSwyfSAgICAgICBhZGRpdGlvbmFsIHRleHQKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgX3Rlc3Rfc3VicGFyc2VyX2hlbHAoc2VsZiwgYXJnc19zdHIsIGV4cGVjdGVkX2hlbHApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5wYXJzZV9hcmdzKGFyZ3Nfc3RyLnNwbGl0KCkpCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgorICAgICAgICAgICAgZXJyID0gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgICAgIGlmIGVyci5zdGRvdXQgIT0gZXhwZWN0ZWRfaGVscDoKKyAgICAgICAgICAgICAgICBwcmludChyZXByKGV4cGVjdGVkX2hlbHApKQorICAgICAgICAgICAgICAgIHByaW50KHJlcHIoZXJyLnN0ZG91dCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5zdGRvdXQsIGV4cGVjdGVkX2hlbHApCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXIxX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc3VicGFyc2VyX2hlbHAoJzUuMCAxIC1oJywgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIGJhciAxIFstaF0gWy13IFddIHthLGIsY30KKworICAgICAgICAgICAgMSBkZXNjcmlwdGlvbgorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAge2EsYixjfSAgICAgeCBoZWxwCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtdyBXICAgICAgICB3IGhlbHAKKyAgICAgICAgICAgICcnJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXIyX2hlbHAoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc3VicGFyc2VyX2hlbHAoJzUuMCAyIC1oJywgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIGJhciAyIFstaF0gWy15IHsxLDIsM31dIFt6IFt6IC4uLl1dCisKKyAgICAgICAgICAgIDIgZGVzY3JpcHRpb24KKworICAgICAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIHogICAgICAgICAgIHogaGVscAorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXkgezEsMiwzfSAgeSBoZWxwCisgICAgICAgICAgICAnJycpKQorCisgICAgZGVmIHRlc3RfYWxpYXNfaW52b2NhdGlvbihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcihhbGlhc2VzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDFhbGlhczEgYicuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PU5vbmUsIHg9J2InKSwgW10pLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZXIucGFyc2Vfa25vd25fYXJncygnMC41IDFhbGlhczIgYicuc3BsaXQoKSksCisgICAgICAgICAgICAoTlMoZm9vPUZhbHNlLCBiYXI9MC41LCB3PU5vbmUsIHg9J2InKSwgW10pLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9lcnJvcl9hbGlhc19pbnZvY2F0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKGFsaWFzZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHBhcnNlci5wYXJzZV9hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAuNSAxYWxpYXMzIGInLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9hbGlhc19oZWxwKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKGFsaWFzZXM9VHJ1ZSwgc3VicGFyc2VyX2hlbHA9VHJ1ZSkKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5mb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb29dIGJhciBDT01NQU5EIC4uLgorCisgICAgICAgICAgICBtYWluIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICBiYXIgICAgICAgICAgICAgICAgICAgYmFyIGhlbHAKKworICAgICAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtLWZvbyAgICAgICAgICAgICAgICAgZm9vIGhlbHAKKworICAgICAgICAgICAgY29tbWFuZHM6CisgICAgICAgICAgICAgIENPTU1BTkQKKyAgICAgICAgICAgICAgICAxICgxYWxpYXMxLCAxYWxpYXMyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBoZWxwCisgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAyIGhlbHAKKyAgICAgICAgICAgICIiIikpCisKKyMgPT09PT09PT09PT09CisjIEdyb3VwcyB0ZXN0cworIyA9PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBvc2l0aW9uYWxzR3JvdXBzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IG9yZGVyIG9mIGdyb3VwIHBvc2l0aW9uYWxzIG1hdGNoZXMgY29uc3RydWN0aW9uIG9yZGVyIiIiCisKKyAgICBkZWYgdGVzdF9ub25ncm91cF9maXJzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmb28nKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2cnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JheicpCisgICAgICAgIGV4cGVjdGVkID0gTlMoZm9vPScxJywgYmFyPScyJywgYmF6PSczJykKKyAgICAgICAgcmVzdWx0ID0gcGFyc2VyLnBhcnNlX2FyZ3MoJzEgMiAzJy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyAgICBkZWYgdGVzdF9ncm91cF9maXJzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3h4eCcpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnZm9vJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnKQorICAgICAgICByZXN1bHQgPSBwYXJzZXIucGFyc2VfYXJncygnMSAyIDMnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkX2dyb3VwcyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ3h4eCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZvbycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFyJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmF6JykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCd5eXknKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ2ZyZWxsJykKKyAgICAgICAgZXhwZWN0ZWQgPSBOUyhmb289JzEnLCBiYXI9JzInLCBiYXo9JzMnLCBmcmVsbD0nNCcpCisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZV9hcmdzKCcxIDIgMyA0Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCByZXN1bHQpCisKKyMgPT09PT09PT09PT09PT09PT09PQorIyBQYXJlbnQgcGFyc2VyIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBhcmVudFBhcnNlcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRoYXQgcGFyc2VycyBjYW4gYmUgY3JlYXRlZCB3aXRoIHBhcmVudCBwYXJzZXJzIiIiCisKKyAgICBkZWYgYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYud3h5el9wYXJlbnQuYWRkX2FyZ3VtZW50KCctLXcnKQorICAgICAgICB4X2dyb3VwID0gc2VsZi53eHl6X3BhcmVudC5hZGRfYXJndW1lbnRfZ3JvdXAoJ3gnKQorICAgICAgICB4X2dyb3VwLmFkZF9hcmd1bWVudCgnLXknKQorICAgICAgICBzZWxmLnd4eXpfcGFyZW50LmFkZF9hcmd1bWVudCgneicpCisKKyAgICAgICAgc2VsZi5hYmNkX3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudCgnYScpCisgICAgICAgIHNlbGYuYWJjZF9wYXJlbnQuYWRkX2FyZ3VtZW50KCctYicpCisgICAgICAgIGNfZ3JvdXAgPSBzZWxmLmFiY2RfcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCgnYycpCisgICAgICAgIGNfZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWQnKQorCisgICAgICAgIHNlbGYud19wYXJlbnQgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSkKKyAgICAgICAgc2VsZi53X3BhcmVudC5hZGRfYXJndW1lbnQoJy0tdycpCisKKyAgICAgICAgc2VsZi56X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBzZWxmLnpfcGFyZW50LmFkZF9hcmd1bWVudCgneicpCisKKyAgICAgICAgIyBwYXJlbnRzIHdpdGggbXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwcworICAgICAgICBzZWxmLmFiX211dGV4X3BhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBncm91cCA9IHNlbGYuYWJfbXV0ZXhfcGFyZW50LmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisKKyAgICAgICAgc2VsZi5tYWluX3Byb2dyYW0gPSBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3BhcmVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bc2VsZi53eHl6X3BhcmVudF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy15IDEgMiAtLXcgMycuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlModz0nMycsIHk9JzEnLCB6PScyJykpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfcGFyZW50X211dGV4KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X211dGV4X2FiKHNlbGYuYWJfbXV0ZXhfcGFyZW50LnBhcnNlX2FyZ3MpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3NlbGYuYWJfbXV0ZXhfcGFyZW50XSkKKyAgICAgICAgc2VsZi5fdGVzdF9tdXRleF9hYihwYXJzZXIucGFyc2VfYXJncykKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9ncmFucGFyZW50X211dGV4KHNlbGYpOgorICAgICAgICBwYXJlbnRzID0gW3NlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihhZGRfaGVscD1GYWxzZSwgcGFyZW50cz1wYXJlbnRzKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPVtwYXJzZXJdKQorICAgICAgICBzZWxmLl90ZXN0X211dGV4X2FiKHBhcnNlci5wYXJzZV9hcmdzKQorCisgICAgZGVmIF90ZXN0X211dGV4X2FiKHNlbGYsIHBhcnNlX2FyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX2FyZ3MoW10pLCBOUyhhPUZhbHNlLCBiPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZV9hcmdzKFsnLWEnXSksIE5TKGE9VHJ1ZSwgYj1GYWxzZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VfYXJncyhbJy1iJ10pLCBOUyhhPUZhbHNlLCBiPVRydWUpKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYScsICctYiddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYicsICctYSddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYyddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYScsICctYyddKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VfYXJncywgWyctYicsICctYyddKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiY2RfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJy0tZCAxIC0tdyAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT0nMycsIGI9Tm9uZSwgZD0nMScsIHc9JzInLCB5PU5vbmUsIHo9JzQnKSkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYl9tdXRleF9wYXJlbnQsIHNlbGYud3h5el9wYXJlbnRdCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIucGFyc2VfYXJncygnLWEgLS13IDIgMycuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1UcnVlLCBiPUZhbHNlLCB3PScyJywgeT1Ob25lLCB6PSczJykpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnLWEgLS13IDIgMyAtYicuc3BsaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKAorICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MsICctYSAtYiAtLXcgMiAzJy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3RfY29uZmxpY3RpbmdfcGFyZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhcmdwYXJzZS5Bcmd1bWVudEVycm9yLAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCisgICAgICAgICAgICBwYXJlbnRzPVtzZWxmLndfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXJncGFyc2UuQXJndW1lbnRFcnJvciwKKyAgICAgICAgICAgIGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyLAorICAgICAgICAgICAgcGFyZW50cz1bc2VsZi5hYmNkX3BhcmVudCwgc2VsZi5hYl9tdXRleF9wYXJlbnRdKQorCisgICAgZGVmIHRlc3Rfc2FtZV9hcmd1bWVudF9uYW1lX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudHMgPSBbc2VsZi53eHl6X3BhcmVudCwgc2VsZi56X3BhcmVudF0KKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1wYXJlbnRzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCcxIDInLnNwbGl0KCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5TKHc9Tm9uZSwgeT1Ob25lLCB6PScyJykpCisKKyAgICBkZWYgdGVzdF9zdWJwYXJzZXJfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgYWJjZGVfcGFyc2VyID0gc3VicGFyc2Vycy5hZGRfcGFyc2VyKCdiYXInLCBwYXJlbnRzPVtzZWxmLmFiY2RfcGFyZW50XSkKKyAgICAgICAgYWJjZGVfcGFyc2VyLmFkZF9hcmd1bWVudCgnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJ2JhciAtYiAxIC0tZCAyIDMgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT0nMycsIGI9JzEnLCBkPScyJywgZT0nNCcpKQorCisgICAgZGVmIHRlc3Rfc3VicGFyc2VyX3BhcmVudHNfbXV0ZXgoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgIHBhcmVudHMgPSBbc2VsZi5hYl9tdXRleF9wYXJlbnRdCisgICAgICAgIGFiY19wYXJzZXIgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2ZvbycsIHBhcmVudHM9cGFyZW50cykKKyAgICAgICAgY19ncm91cCA9IGFiY19wYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdjX2dyb3VwJykKKyAgICAgICAgY19ncm91cC5hZGRfYXJndW1lbnQoJ2MnKQorICAgICAgICBwYXJlbnRzID0gW3NlbGYud3h5el9wYXJlbnQsIHNlbGYuYWJfbXV0ZXhfcGFyZW50XQorICAgICAgICB3eHl6YWJlX3BhcnNlciA9IHN1YnBhcnNlcnMuYWRkX3BhcnNlcignYmFyJywgcGFyZW50cz1wYXJlbnRzKQorICAgICAgICB3eHl6YWJlX3BhcnNlci5hZGRfYXJndW1lbnQoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5wYXJzZV9hcmdzKCdmb28gLWEgNCcuc3BsaXQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPSc0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLnBhcnNlX2FyZ3MoJ2JhciAtYiAgLS13IDIgMyA0Jy5zcGxpdCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOUyhhPUZhbHNlLCBiPVRydWUsIHc9JzInLCB5PU5vbmUsIHo9JzMnLCBlPSc0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnZm9vIC1hIC1iIDQnLnNwbGl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcigKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzLCAnYmFyIC1iIC1hIDQnLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRfaGVscChzZWxmKToKKyAgICAgICAgcGFyZW50cyA9IFtzZWxmLmFiY2RfcGFyZW50LCBzZWxmLnd4eXpfcGFyZW50XQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwYXJlbnRzPXBhcmVudHMpCisgICAgICAgIHBhcnNlcl9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fSBbLWhdIFstYiBCXSBbLS1kIERdIFstLXcgV10gWy15IFldIGEgegorCisgICAgICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgYQorICAgICAgICAgICAgICB6CisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAtYiBCCisgICAgICAgICAgICAgIC0tdyBXCisKKyAgICAgICAgICAgIGM6CisgICAgICAgICAgICAgIC0tZCBECisKKyAgICAgICAgICAgIHg6CisgICAgICAgICAgICAgIC15IFkKKyAgICAgICAgJycnLmZvcm1hdChzZWxmLm1haW5fcHJvZ3JhbSkpKQorCisgICAgZGVmIHRlc3RfZ3JvdXBzX3BhcmVudHMoc2VsZik6CisgICAgICAgIHBhcmVudCA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorICAgICAgICBnID0gcGFyZW50LmFkZF9hcmd1bWVudF9ncm91cCh0aXRsZT0nZycsIGRlc2NyaXB0aW9uPSdnZCcpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCctdycpCisgICAgICAgIGcuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgICAgIG0gPSBwYXJlbnQuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteScpCisgICAgICAgIG0uYWRkX2FyZ3VtZW50KCcteicpCisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHBhcmVudHM9W3BhcmVudF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsCisgICAgICAgICAgICBbJy15JywgJ1knLCAnLXonLCAnWiddKQorCisgICAgICAgIHBhcnNlcl9oZWxwID0gcGFyc2VyLmZvcm1hdF9oZWxwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJfaGVscCwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiB7fSBbLWhdIFstdyBXXSBbLXggWF0gWy15IFkgfCAteiBaXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLXkgWQorICAgICAgICAgICAgICAteiBaCisKKyAgICAgICAgICAgIGc6CisgICAgICAgICAgICAgIGdkCisKKyAgICAgICAgICAgICAgLXcgVworICAgICAgICAgICAgICAteCBYCisgICAgICAgICcnJy5mb3JtYXQoc2VsZi5tYWluX3Byb2dyYW0pKSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTXV0dWFsbHkgZXhjbHVzaXZlIGdyb3VwIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVHcm91cEVycm9ycyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICByYWlzZXMgPSBzZWxmLmFzc2VydFJhaXNlcworICAgICAgICByYWlzZXMoVHlwZUVycm9yLCBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCwgdGl0bGU9J2ZvbycpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FkZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgYWRkX2FyZ3VtZW50ID0gZ3JvdXAuYWRkX2FyZ3VtZW50CisgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICctLWZvbycsIHJlcXVpcmVkPVRydWUpCisgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBhZGRfYXJndW1lbnQsICdiYXInKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9JysnKQorICAgICAgICByYWlzZXMoVmFsdWVFcnJvciwgYWRkX2FyZ3VtZW50LCAnYmFyJywgbmFyZ3M9MSkKKyAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIGFkZF9hcmd1bWVudCwgJ2JhcicsIG5hcmdzPWFyZ3BhcnNlLlBBUlNFUikKKworICAgIGRlZiB0ZXN0X2hlbHAoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cDEgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cCgpCisgICAgICAgIGdyb3VwMS5hZGRfYXJndW1lbnQoJy0tZm9vJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgZ3JvdXAxLmFkZF9hcmd1bWVudCgnLS1iYXInLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZ3JvdXAyID0gcGFyc2VyLmFkZF9tdXR1YWxseV9leGNsdXNpdmVfZ3JvdXAoKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLXNvdXAnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBncm91cDIuYWRkX2FyZ3VtZW50KCctLW51dHMnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgZXhwZWN0ZWQgPSAnJydcCisgICAgICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyB8IC0tYmFyXSBbLS1zb3VwIHwgLS1udXRzXQorCisgICAgICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAgICAgLS1mb28KKyAgICAgICAgICAgICAgLS1iYXIKKyAgICAgICAgICAgICAgLS1zb3VwCisgICAgICAgICAgICAgIC0tbnV0cworICAgICAgICAgICAgICAnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkKSkKKworY2xhc3MgTUVNaXhpbihvYmplY3QpOgorCisgICAgZGVmIHRlc3RfZmFpbHVyZXNfd2hlbl9ub3RfcmVxdWlyZWQoc2VsZik6CisgICAgICAgIHBhcnNlX2FyZ3MgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9RmFsc2UpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHBhcnNlX2FyZ3MsIGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisKKyAgICBkZWYgdGVzdF9mYWlsdXJlc193aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLnBhcnNlX2FyZ3MKKyAgICAgICAgZXJyb3IgPSBBcmd1bWVudFBhcnNlckVycm9yCisgICAgICAgIGZvciBhcmdzX3N0cmluZyBpbiBzZWxmLmZhaWx1cmVzICsgWycnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCBwYXJzZV9hcmdzLCBhcmdzX3N0cmluZy5zcGxpdCgpKQorCisgICAgZGVmIHRlc3Rfc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBwYXJzZV9hcmdzID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5wYXJzZV9hcmdzCisgICAgICAgIHN1Y2Nlc3NlcyA9IHNlbGYuc3VjY2Vzc2VzICsgc2VsZi5zdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQKKyAgICAgICAgZm9yIGFyZ3Nfc3RyaW5nLCBleHBlY3RlZF9ucyBpbiBzdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF9zdWNjZXNzZXNfd2hlbl9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgcGFyc2VfYXJncyA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1UcnVlKS5wYXJzZV9hcmdzCisgICAgICAgIGZvciBhcmdzX3N0cmluZywgZXhwZWN0ZWRfbnMgaW4gc2VsZi5zdWNjZXNzZXM6CisgICAgICAgICAgICBhY3R1YWxfbnMgPSBwYXJzZV9hcmdzKGFyZ3Nfc3RyaW5nLnNwbGl0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbF9ucywgZXhwZWN0ZWRfbnMpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX25vdF9yZXF1aXJlZChzZWxmKToKKyAgICAgICAgZm9ybWF0X3VzYWdlID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPUZhbHNlKS5mb3JtYXRfdXNhZ2UKKyAgICAgICAgZXhwZWN0ZWRfdXNhZ2UgPSBzZWxmLnVzYWdlX3doZW5fbm90X3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF91c2FnZV93aGVuX3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfdXNhZ2UgPSBzZWxmLmdldF9wYXJzZXIocmVxdWlyZWQ9VHJ1ZSkuZm9ybWF0X3VzYWdlCisgICAgICAgIGV4cGVjdGVkX3VzYWdlID0gc2VsZi51c2FnZV93aGVuX3JlcXVpcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0X3VzYWdlKCksIHRleHR3cmFwLmRlZGVudChleHBlY3RlZF91c2FnZSkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fbm90X3JlcXVpcmVkKHNlbGYpOgorICAgICAgICBmb3JtYXRfaGVscCA9IHNlbGYuZ2V0X3BhcnNlcihyZXF1aXJlZD1GYWxzZSkuZm9ybWF0X2hlbHAKKyAgICAgICAgaGVscCA9IHNlbGYudXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKyAgICBkZWYgdGVzdF9oZWxwX3doZW5fcmVxdWlyZWQoc2VsZik6CisgICAgICAgIGZvcm1hdF9oZWxwID0gc2VsZi5nZXRfcGFyc2VyKHJlcXVpcmVkPVRydWUpLmZvcm1hdF9oZWxwCisgICAgICAgIGhlbHAgPSBzZWxmLnVzYWdlX3doZW5fcmVxdWlyZWQgKyBzZWxmLmhlbHAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXRfaGVscCgpLCB0ZXh0d3JhcC5kZWRlbnQoaGVscCkpCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJhcicsIGhlbHA9J2JhciBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWJheicsIG5hcmdzPSc/JywgY29uc3Q9J1onLCBoZWxwPSdiYXogaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWJhciBYIC0tYmF6IFknLCAnLS1iYXIgWCAtLWJheiddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmFyIFggLS1iYXIgWicsIE5TKGJhcj0nWicsIGJhej1Ob25lKSksCisgICAgICAgICgnLS1iYXogWScsIE5TKGJhcj1Ob25lLCBiYXo9J1knKSksCisgICAgICAgICgnLS1iYXonLCBOUyhiYXI9Tm9uZSwgYmF6PSdaJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IFtCQVpdXQorICAgICAgICAnJycKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdICgtLWJhciBCQVIgfCAtLWJheiBbQkFaXSkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWJhciBCQVIgICAgYmFyIGhlbHAKKyAgICAgICAgICAtLWJheiBbQkFaXSAgYmF6IGhlbHAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZyhNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZD1Ob25lKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFJPRycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tYWJjZGUnLCBoZWxwPSdhYmNkZSBoZWxwJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mZ2hpaicsIGhlbHA9J2ZnaGlqIGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy0ta2xtbm8nLCBoZWxwPSdrbG1ubyBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXBxcnN0JywgaGVscD0ncHFyc3QgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctLWtsbW5vIFggLS1wcXJzdCBZJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnLS1rbG1ubyBYJywgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9Tm9uZSwga2xtbm89J1gnLCBwcXJzdD1Ob25lKSksCisgICAgICAgICgnLS1hYmNkZSBZIC0ta2xtbm8gWCcsCisgICAgICAgICAgICBOUyhhYmNkZT0nWScsIGZnaGlqPU5vbmUsIGtsbW5vPSdYJywgcHFyc3Q9Tm9uZSkpLAorICAgICAgICAoJy0tcHFyc3QgWCcsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PSdYJykpLAorICAgICAgICAoJy0tcHFyc3QgWCAtLWZnaGlqIFknLAorICAgICAgICAgICAgTlMoYWJjZGU9Tm9uZSwgZmdoaWo9J1knLCBrbG1ubz1Ob25lLCBwcXJzdD0nWCcpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKGFiY2RlPU5vbmUsIGZnaGlqPU5vbmUsIGtsbW5vPU5vbmUsIHBxcnN0PU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICBbLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1RdCisgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICB1c2FnZTogUFJPRyBbLWhdIFstLWFiY2RlIEFCQ0RFXSBbLS1mZ2hpaiBGR0hJSl0KKyAgICAgICAgICAgICAgICAoLS1rbG1ubyBLTE1OTyB8IC0tcHFyc3QgUFFSU1QpCisgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgIC0tYWJjZGUgQUJDREUgIGFiY2RlIGhlbHAKKyAgICAgIC0tZmdoaWogRkdISUogIGZnaGlqIGhlbHAKKyAgICAgIC0ta2xtbm8gS0xNTk8gIGtsbW5vIGhlbHAKKyAgICAgIC0tcHFyc3QgUFFSU1QgIHBxcnN0IGhlbHAKKyAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVGaXJzdFN1cHByZXNzZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXknLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbJy14IFggLXknXQorICAgIHN1Y2Nlc3NlcyA9IFsKKyAgICAgICAgKCcteCBYJywgTlMoeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJy14IFggLXggWScsIE5TKHg9J1knLCB5PVRydWUpKSwKKyAgICAgICAgKCcteScsIE5TKHg9Tm9uZSwgeT1GYWxzZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoeD1Ob25lLCB5PVRydWUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXldCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLXkKKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVNYW55U3VwcHJlc3NlZChNRU1peGluLCBUZXN0Q2FzZSk6CisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCByZXF1aXJlZCk6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBhZGQgPSBncm91cC5hZGRfYXJndW1lbnQKKyAgICAgICAgYWRkKCctLXNwYW0nLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorICAgICAgICBhZGQoJy0tYmFkZ2VyJywgYWN0aW9uPSdzdG9yZV9mYWxzZScsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpCisgICAgICAgIGFkZCgnLS1ibGFkZGVyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLXNwYW0gLS1iYWRnZXInLAorICAgICAgICAnLS1iYWRnZXIgLS1ibGFkZGVyIEInLAorICAgICAgICAnLS1ibGFkZGVyIEIgLS1zcGFtJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tc3BhbScsIE5TKHNwYW09VHJ1ZSwgYmFkZ2VyPVRydWUsIGJsYWRkZXI9Tm9uZSkpLAorICAgICAgICAoJy0tYmFkZ2VyJywgTlMoc3BhbT1GYWxzZSwgYmFkZ2VyPUZhbHNlLCBibGFkZGVyPU5vbmUpKSwKKyAgICAgICAgKCctLWJsYWRkZXIgQicsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPSdCJykpLAorICAgICAgICAoJy0tc3BhbSAtLXNwYW0nLCBOUyhzcGFtPVRydWUsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisgICAgc3VjY2Vzc2VzX3doZW5fbm90X3JlcXVpcmVkID0gWworICAgICAgICAoJycsIE5TKHNwYW09RmFsc2UsIGJhZGdlcj1UcnVlLCBibGFkZGVyPU5vbmUpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX3JlcXVpcmVkID0gdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbEFuZFBvc2l0aW9uYWwoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0ZPTycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1zcGFtJywgaGVscD0nU1BBTScpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnYmFkZ2VyJywgbmFyZ3M9JyonLCBkZWZhdWx0PSdYJywgaGVscD0nQkFER0VSJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZmFpbHVyZXMgPSBbCisgICAgICAgICctLWZvbyAtLXNwYW0gUycsCisgICAgICAgICctLXNwYW0gUyBYJywKKyAgICAgICAgJ1ggLS1mb28nLAorICAgICAgICAnWCBZIFogLS1zcGFtIFMnLAorICAgICAgICAnLS1mb28gWCBZJywKKyAgICBdCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tZm9vJywgTlMoZm9vPVRydWUsIHNwYW09Tm9uZSwgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJy0tc3BhbSBTJywgTlMoZm9vPUZhbHNlLCBzcGFtPSdTJywgYmFkZ2VyPSdYJykpLAorICAgICAgICAoJ1gnLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCddKSksCisgICAgICAgICgnWCBZIFonLCBOUyhmb289RmFsc2UsIHNwYW09Tm9uZSwgYmFkZ2VyPVsnWCcsICdZJywgJ1onXSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoZm9vPUZhbHNlLCBzcGFtPU5vbmUsIGJhZGdlcj0nWCcpKSwKKyAgICBdCisKKyAgICB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gfCAtLXNwYW0gU1BBTSB8IGJhZGdlciBbYmFkZ2VyIC4uLl1dCisgICAgICAgICcnJworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gKC0tZm9vIHwgLS1zcGFtIFNQQU0gfCBiYWRnZXIgW2JhZGdlciAuLi5dKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGJhZGdlciAgICAgICBCQURHRVIKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyAgICAgICAgRk9PCisgICAgICAgICAgLS1zcGFtIFNQQU0gIFNQQU0KKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSd4IGhlbHAnKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1hJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2IgaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWyctYSAtYicsICctYiAtYycsICctYSAtYycsICctYSAtYiAtYyddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy1hJywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLWInLCBOUyhhPUZhbHNlLCBiPVRydWUsIGM9RmFsc2UsIHg9RmFsc2UsIHk9RmFsc2UpKSwKKyAgICAgICAgKCctYycsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9VHJ1ZSwgeD1GYWxzZSwgeT1GYWxzZSkpLAorICAgICAgICAoJy1hIC14JywgTlMoYT1UcnVlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteSAtYicsIE5TKGE9RmFsc2UsIGI9VHJ1ZSwgYz1GYWxzZSwgeD1GYWxzZSwgeT1UcnVlKSksCisgICAgICAgICgnLXggLXkgLWMnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPVRydWUsIHg9VHJ1ZSwgeT1UcnVlKSksCisgICAgXQorICAgIHN1Y2Nlc3Nlc193aGVuX25vdF9yZXF1aXJlZCA9IFsKKyAgICAgICAgKCcnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PUZhbHNlLCB5PUZhbHNlKSksCisgICAgICAgICgnLXgnLCBOUyhhPUZhbHNlLCBiPUZhbHNlLCBjPUZhbHNlLCB4PVRydWUsIHk9RmFsc2UpKSwKKyAgICAgICAgKCcteScsIE5TKGE9RmFsc2UsIGI9RmFsc2UsIGM9RmFsc2UsIHg9RmFsc2UsIHk9VHJ1ZSkpLAorICAgIF0KKworICAgIHVzYWdlX3doZW5fcmVxdWlyZWQgPSB1c2FnZV93aGVuX25vdF9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXhdIFstYV0gWy1iXSBbLXldIFstY10KKyAgICAgICAgJycnCisgICAgaGVscCA9ICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14ICAgICAgICAgIHggaGVscAorICAgICAgICAgIC1hICAgICAgICAgIGEgaGVscAorICAgICAgICAgIC1iICAgICAgICAgIGIgaGVscAorICAgICAgICAgIC15ICAgICAgICAgIHkgaGVscAorICAgICAgICAgIC1jICAgICAgICAgIGMgaGVscAorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVJbkdyb3VwKE1FTWl4aW4sIFRlc3RDYXNlKToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgdGl0bGVkX2dyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgKKyAgICAgICAgICAgIHRpdGxlPSdUaXRsZWQgZ3JvdXAnLCBkZXNjcmlwdGlvbj0nR3JvdXAgZGVzY3JpcHRpb24nKQorICAgICAgICBtdXRleF9ncm91cCA9IFwKKyAgICAgICAgICAgIHRpdGxlZF9ncm91cC5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmFyJywgaGVscD0nYmFyIGhlbHAnKQorICAgICAgICBtdXRleF9ncm91cC5hZGRfYXJndW1lbnQoJy0tYmF6JywgaGVscD0nYmF6IGhlbHAnKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKyAgICBmYWlsdXJlcyA9IFsnLS1iYXIgWCAtLWJheiBZJywgJy0tYmF6IFggLS1iYXIgWSddCisgICAgc3VjY2Vzc2VzID0gWworICAgICAgICAoJy0tYmFyIFgnLCBOUyhiYXI9J1gnLCBiYXo9Tm9uZSkpLAorICAgICAgICAoJy0tYmF6IFknLCBOUyhiYXI9Tm9uZSwgYmF6PSdZJykpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnJywgTlMoYmFyPU5vbmUsIGJhej1Ob25lKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9ub3RfcmVxdWlyZWQgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tYmFyIEJBUiB8IC0tYmF6IEJBWl0KKyAgICAgICAgJycnCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSAoLS1iYXIgQkFSIHwgLS1iYXogQkFaKQorICAgICAgICAnJycKKyAgICBoZWxwID0gJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisKKyAgICAgICAgVGl0bGVkIGdyb3VwOgorICAgICAgICAgIEdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAgIC0tYmF6IEJBWiAgIGJheiBoZWxwCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc0FuZFBvc2l0aW9uYWxzTWl4ZWQoTUVNaXhpbiwgVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9wYXJzZXIoc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgneCcsIGhlbHA9J3ggaGVscCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy15JywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0neSBoZWxwJykKKyAgICAgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX211dHVhbGx5X2V4Y2x1c2l2ZV9ncm91cChyZXF1aXJlZD1yZXF1aXJlZCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCdhJywgbmFyZ3M9Jz8nLCBoZWxwPSdhIGhlbHAnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy1iJywgYWN0aW9uPSdzdG9yZV90cnVlJywgaGVscD0nYiBoZWxwJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctYycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2MgaGVscCcpCisgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgIGZhaWx1cmVzID0gWydYIEEgLWInLCAnLWIgLWMnLCAnLWMgWCBBJ10KKyAgICBzdWNjZXNzZXMgPSBbCisgICAgICAgICgnWCBBJywgTlMoYT0nQScsIGI9RmFsc2UsIGM9RmFsc2UsIHg9J1gnLCB5PUZhbHNlKSksCisgICAgICAgICgnWCAtYicsIE5TKGE9Tm9uZSwgYj1UcnVlLCBjPUZhbHNlLCB4PSdYJywgeT1GYWxzZSkpLAorICAgICAgICAoJ1ggLWMnLCBOUyhhPU5vbmUsIGI9RmFsc2UsIGM9VHJ1ZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIEEgLXknLCBOUyhhPSdBJywgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgICAgICAoJ1ggLXkgLWInLCBOUyhhPU5vbmUsIGI9VHJ1ZSwgYz1GYWxzZSwgeD0nWCcsIHk9VHJ1ZSkpLAorICAgIF0KKyAgICBzdWNjZXNzZXNfd2hlbl9ub3RfcmVxdWlyZWQgPSBbCisgICAgICAgICgnWCcsIE5TKGE9Tm9uZSwgYj1GYWxzZSwgYz1GYWxzZSwgeD0nWCcsIHk9RmFsc2UpKSwKKyAgICAgICAgKCdYIC15JywgTlMoYT1Ob25lLCBiPUZhbHNlLCBjPUZhbHNlLCB4PSdYJywgeT1UcnVlKSksCisgICAgXQorCisgICAgdXNhZ2Vfd2hlbl9yZXF1aXJlZCA9IHVzYWdlX3doZW5fbm90X3JlcXVpcmVkID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteV0gWy1iXSBbLWNdIHggW2FdCisgICAgICAgICcnJworICAgIGhlbHAgPSAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgeCAgICAgICAgICAgeCBoZWxwCisgICAgICAgICAgYSAgICAgICAgICAgYSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteSAgICAgICAgICB5IGhlbHAKKyAgICAgICAgICAtYiAgICAgICAgICBiIGhlbHAKKyAgICAgICAgICAtYyAgICAgICAgICBjIGhlbHAKKyAgICAgICAgJycnCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBNdXR1YWxseSBleGNsdXNpdmUgZ3JvdXAgaW4gcGFyZW50IHBhcnNlciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIE1FUEJhc2Uob2JqZWN0KToKKworICAgIGRlZiBnZXRfcGFyc2VyKHNlbGYsIHJlcXVpcmVkPU5vbmUpOgorICAgICAgICBwYXJlbnQgPSBzdXBlcihNRVBCYXNlLCBzZWxmKS5nZXRfcGFyc2VyKHJlcXVpcmVkPXJlcXVpcmVkKQorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigKKyAgICAgICAgICAgIHByb2c9cGFyZW50LnByb2csIGFkZF9oZWxwPUZhbHNlLCBwYXJlbnRzPVtwYXJlbnRdKQorICAgICAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnNQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlR3JvdXBFcnJvcnMpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0TXV0dWFsbHlFeGNsdXNpdmVTaW1wbGVQYXJlbnQoCisgICAgTUVQQmFzZSwgVGVzdE11dHVhbGx5RXhjbHVzaXZlU2ltcGxlKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlTG9uZ1BhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVMb25nKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlRmlyc3RTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZUZpcnN0U3VwcHJlc3NlZCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU1hbnlTdXBwcmVzc2VkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxBbmRQb3NpdGlvbmFsUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsQW5kUG9zaXRpb25hbCk6CisgICAgcGFzcworCisKK2NsYXNzIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkUGFyZW50KAorICAgIE1FUEJhc2UsIFRlc3RNdXR1YWxseUV4Y2x1c2l2ZU9wdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdE11dHVhbGx5RXhjbHVzaXZlT3B0aW9uYWxzQW5kUG9zaXRpb25hbHNNaXhlZFBhcmVudCgKKyAgICBNRVBCYXNlLCBUZXN0TXV0dWFsbHlFeGNsdXNpdmVPcHRpb25hbHNBbmRQb3NpdGlvbmFsc01peGVkKToKKyAgICBwYXNzCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgU2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFNldERlZmF1bHRzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19ub19hcmdzKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh5PSdiYXInLCB6PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nZm9vJywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nYmF6JywgeT0nYmFyJywgej0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSwgTlMoeD0nYmF6JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicsIHo9MiksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKHg9J2JheicsIHo9MikpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3dpdGhfYXJncyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHg9J2ZvbycsIHk9J2JhcicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0neGZvb3gnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J3hmb294JywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10sIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9J2JheicsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdLCBOUyh4PSdiYXonKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoeD0nMScsIHk9J2JhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKCcteCAxJy5zcGxpdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PScxJywgeT0nYmFyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoJy14IDEnLnNwbGl0KCksIE5TKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHg9JzEnLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnLXggMScuc3BsaXQoKSwgTlMoeD0nYmF6JykpKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3N1YnBhcnNlcnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh4PSdmb28nKQorICAgICAgICBzdWJwYXJzZXJzID0gcGFyc2VyLmFkZF9zdWJwYXJzZXJzKCkKKyAgICAgICAgcGFyc2VyX2EgPSBzdWJwYXJzZXJzLmFkZF9wYXJzZXIoJ2EnKQorICAgICAgICBwYXJzZXJfYS5zZXRfZGVmYXVsdHMoeT0nYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nLCB5PSdiYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncygnYScuc3BsaXQoKSkpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfcGFyZW50cyhzZWxmKToKKyAgICAgICAgcGFyZW50ID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHBhcmVudC5zZXRfZGVmYXVsdHMoeD0nZm9vJykKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nKSwgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX3NhbWVfYXNfYWRkX2FyZ3VtZW50KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nVycsIHg9J1gnLCB5PSdZJywgej0nWicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13JykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBkZWZhdWx0PSdYWCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3onLCBuYXJncz0nPycsIGRlZmF1bHQ9J1paJykKKworICAgICAgICAjIGRlZmF1bHRzIHNldCBwcmV2aW91c2x5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlModz0nVycsIHg9J1hYJywgeT0nWScsIHo9J1paJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQorCisgICAgICAgICMgcmVzZXQgZGVmYXVsdHMKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1dXJywgeD0nWCcsIHk9J1lZJywgej0nWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0c19zYW1lX2FzX2FkZF9hcmd1bWVudF9ncm91cChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuc2V0X2RlZmF1bHRzKHc9J1cnLCB4PSdYJywgeT0nWScsIHo9J1onKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ2ZvbycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXcnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJy14JywgZGVmYXVsdD0nWFgnKQorICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoJ3knLCBuYXJncz0nPycpCisgICAgICAgIGdyb3VwLmFkZF9hcmd1bWVudCgneicsIG5hcmdzPSc/JywgZGVmYXVsdD0nWlonKQorCisKKyAgICAgICAgIyBkZWZhdWx0cyBzZXQgcHJldmlvdXNseQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKHc9J1cnLCB4PSdYWCcsIHk9J1knLCB6PSdaWicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFtdKSkKKworICAgICAgICAjIHJlc2V0IGRlZmF1bHRzCisgICAgICAgIHBhcnNlci5zZXRfZGVmYXVsdHModz0nV1cnLCB4PSdYJywgeT0nWVknLCB6PSdaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh3PSdXVycsIHg9J1gnLCB5PSdZWScsIHo9J1onKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhbXSkpCisKKyMgPT09PT09PT09PT09PT09PT0KKyMgR2V0IGRlZmF1bHQgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEdldERlZmF1bHQoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZ2V0X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBwYXJzZXIuZ2V0X2RlZmF1bHQoImZvbyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgcGFyc2VyLmdldF9kZWZhdWx0KCJiYXIiKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWJhciIsIHR5cGU9aW50LCBkZWZhdWx0PTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmb289ImJhZGdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImJhZGdlciIsIHBhcnNlci5nZXRfZGVmYXVsdCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIHBhcnNlci5nZXRfZGVmYXVsdCgiYmFyIikpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgTmFtZXNwYWNlICdjb250YWlucycgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE5hbWVzcGFjZUNvbnRhaW5zU2ltcGxlKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycgaW4gbnMsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIG5vdCBpbiBucywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIEZhbHNlKQorCisgICAgZGVmIHRlc3Rfbm9uX2VtcHR5KHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh4PTEsIHk9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneCcgaW4gbnMsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3gnIG5vdCBpbiBucywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3knIGluIG5zLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneHgnIGluIG5zLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgneicgaW4gbnMsIEZhbHNlKQorCisjID09PT09PT09PT09PT09PT09PT09PQorIyBIZWxwIGZvcm1hdHRpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RIZWxwRm9ybWF0dGluZ01ldGFjbGFzcyh0eXBlKToKKworICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBib2R5ZGljdCk6CisgICAgICAgIGlmIG5hbWUgPT0gJ0hlbHBUZXN0Q2FzZSc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBjbGFzcyBBZGRUZXN0cyhvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdF9jbGFzcywgZnVuY19zdWZmaXgsIHN0ZF9uYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmZ1bmNfc3VmZml4ID0gZnVuY19zdWZmaXgKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZF9uYW1lID0gc3RkX25hbWUKKworICAgICAgICAgICAgICAgIGZvciB0ZXN0X2Z1bmMgaW4gW3NlbGYudGVzdF9mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50ZXN0X3ByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVzdF9wcmludF9maWxlXToKKyAgICAgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0gJyVzXyVzJyAlICh0ZXN0X2Z1bmMuX19uYW1lX18sIGZ1bmNfc3VmZml4KQorCisgICAgICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3dyYXBwZXIoc2VsZiwgdGVzdF9mdW5jPXRlc3RfZnVuYyk6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2Z1bmMoc2VsZikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF93cmFwcGVyLl9fbmFtZV9fID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIHNldGF0dHIodGVzdF9jbGFzcywgdGVzdF9uYW1lLCB0ZXN0X3dyYXBwZXIpCisKKyAgICAgICAgICAgIGRlZiBfZ2V0X3BhcnNlcihzZWxmLCB0ZXN0ZXIpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAorICAgICAgICAgICAgICAgICAgICAqdGVzdGVyLnBhcnNlcl9zaWduYXR1cmUuYXJncywKKyAgICAgICAgICAgICAgICAgICAgKip0ZXN0ZXIucGFyc2VyX3NpZ25hdHVyZS5rd2FyZ3MpCisgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50X3NpZyBpbiBnZXRhdHRyKHRlc3RlciwgJ2FyZ3VtZW50X3NpZ25hdHVyZXMnLCBbXSk6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoKmFyZ3VtZW50X3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYXJndW1lbnRfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICBncm91cF9zaWdzID0gZ2V0YXR0cih0ZXN0ZXIsICdhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzJywgW10pCisgICAgICAgICAgICAgICAgZm9yIGdyb3VwX3NpZywgYXJndW1lbnRfc2lncyBpbiBncm91cF9zaWdzOgorICAgICAgICAgICAgICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoKmdyb3VwX3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipncm91cF9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRfc2lnIGluIGFyZ3VtZW50X3NpZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cC5hZGRfYXJndW1lbnQoKmFyZ3VtZW50X3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqYXJndW1lbnRfc2lnLmt3YXJncykKKyAgICAgICAgICAgICAgICBzdWJwYXJzZXJzX3NpZ3MgPSBnZXRhdHRyKHRlc3RlciwgJ3N1YnBhcnNlcnNfc2lnbmF0dXJlcycsIFtdKQorICAgICAgICAgICAgICAgIGlmIHN1YnBhcnNlcnNfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgc3VicGFyc2VycyA9IHBhcnNlci5hZGRfc3VicGFyc2VycygpCisgICAgICAgICAgICAgICAgICAgIGZvciBzdWJwYXJzZXJfc2lnIGluIHN1YnBhcnNlcnNfc2lnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnBhcnNlcnMuYWRkX3BhcnNlcigqc3VicGFyc2VyX3NpZy5hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnN1YnBhcnNlcl9zaWcua3dhcmdzKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZXIKKworICAgICAgICAgICAgZGVmIF90ZXN0KHNlbGYsIHRlc3RlciwgcGFyc2VyX3RleHQpOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3RleHQgPSBnZXRhdHRyKHRlc3Rlciwgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBleHBlY3RlZF90ZXh0ID0gdGV4dHdyYXAuZGVkZW50KGV4cGVjdGVkX3RleHQpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfdGV4dCAhPSBwYXJzZXJfdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihleHBlY3RlZF90ZXh0KSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihwYXJzZXJfdGV4dCkpCisgICAgICAgICAgICAgICAgICAgIGZvciBjaGFyMSwgY2hhcjIgaW4gemlwKGV4cGVjdGVkX3RleHQsIHBhcnNlcl90ZXh0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIxICE9IGNoYXIyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaXJzdCBkaWZmOiAlciAlcicgJSAoY2hhcjEsIGNoYXIyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRlc3Rlci5hc3NlcnRFcXVhbChleHBlY3RlZF90ZXh0LCBwYXJzZXJfdGV4dCkKKworICAgICAgICAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gZ2V0YXR0cihwYXJzZXIsICdmb3JtYXRfJXMnICUgc2VsZi5mdW5jX3N1ZmZpeCkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgZm9ybWF0KCkpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYsIHRlc3Rlcik6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCisgICAgICAgICAgICAgICAgcHJpbnRfID0gZ2V0YXR0cihwYXJzZXIsICdwcmludF8lcycgJSBzZWxmLmZ1bmNfc3VmZml4KQorICAgICAgICAgICAgICAgIG9sZF9zdHJlYW0gPSBnZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgU3RkSU9CdWZmZXIoKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHByaW50XygpCisgICAgICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gZ2V0YXR0cihzeXMsIHNlbGYuc3RkX25hbWUpLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHN5cywgc2VsZi5zdGRfbmFtZSwgb2xkX3N0cmVhbSkKKyAgICAgICAgICAgICAgICBzZWxmLl90ZXN0KHRlc3RlciwgcGFyc2VyX3RleHQpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X3ByaW50X2ZpbGUoc2VsZiwgdGVzdGVyKToKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKKyAgICAgICAgICAgICAgICBwcmludF8gPSBnZXRhdHRyKHBhcnNlciwgJ3ByaW50XyVzJyAlIHNlbGYuZnVuY19zdWZmaXgpCisgICAgICAgICAgICAgICAgc2ZpbGUgPSBTdGRJT0J1ZmZlcigpCisgICAgICAgICAgICAgICAgcHJpbnRfKHNmaWxlKQorICAgICAgICAgICAgICAgIHBhcnNlcl90ZXh0ID0gc2ZpbGUuZ2V0dmFsdWUoKQorICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3QodGVzdGVyLCBwYXJzZXJfdGV4dCkKKworICAgICAgICAjIGFkZCB0ZXN0cyBmb3Ige2Zvcm1hdCxwcmludH1fe3VzYWdlLGhlbHAsdmVyc2lvbn0KKyAgICAgICAgZm9yIGZ1bmNfc3VmZml4LCBzdGRfbmFtZSBpbiBbKCd1c2FnZScsICdzdGRvdXQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ3N0ZG91dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3ZlcnNpb24nLCAnc3RkZXJyJyldOgorICAgICAgICAgICAgQWRkVGVzdHMoY2xzLCBmdW5jX3N1ZmZpeCwgc3RkX25hbWUpCisKK2Jhc2VzID0gVGVzdENhc2UsCitIZWxwVGVzdENhc2UgPSBUZXN0SGVscEZvcm1hdHRpbmdNZXRhY2xhc3MoJ0hlbHBUZXN0Q2FzZScsIGJhc2VzLCB7fSkKKworCitjbGFzcyBUZXN0SGVscEJpZ2dlck9wdGlvbmFscyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIGZvbyBiYXIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIERFU0NSSVBUSU9OCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgZm9vICAgICAgICAgICAgRk9PIEhFTFAKKyAgICAgICAgICBiYXIgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICBYIEhFTFAKKyAgICAgICAgICAtLXkgWSAgICAgICAgICBZIEhFTFAKKworICAgICAgICBFUElMT0cKKyAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAwLjEKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBCaWdnZXJPcHRpb25hbEdyb3VwcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IGFyZ3VtZW50IGhlbHAgYWxpZ25zIHdoZW4gb3B0aW9ucyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0nREVTQ1JJUFRJT04nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPSdFUElMT0cnLCB2ZXJzaW9uPScwLjEnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBoZWxwPSdYIEhFTFAnKSwKKyAgICAgICAgU2lnKCctLXknLCBoZWxwPSdZIEhFTFAnKSwKKyAgICAgICAgU2lnKCdmb28nLCBoZWxwPSdGT08gSEVMUCcpLAorICAgICAgICBTaWcoJ2JhcicsIGhlbHA9J0JBUiBIRUxQJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ0dST1VQIFRJVExFJywgZGVzY3JpcHRpb249J0dST1VQIERFU0NSSVBUSU9OJyksIFsKKyAgICAgICAgICAgIFNpZygnYmF6JywgaGVscD0nQkFaIEhFTFAnKSwKKyAgICAgICAgICAgIFNpZygnLXonLCBuYXJncz0nKycsIGhlbHA9J1ogSEVMUCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdl0gWy14XSBbLS15IFldIFsteiBaIFtaIC4uLl1dIGZvbyBiYXIgYmF6CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBERVNDUklQVElPTgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGZvbyAgICAgICAgICAgIEZPTyBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgQkFSIEhFTFAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICAgLXggICAgICAgICAgICAgWCBIRUxQCisgICAgICAgICAgLS15IFkgICAgICAgICAgWSBIRUxQCisKKyAgICAgICAgR1JPVVAgVElUTEU6CisgICAgICAgICAgR1JPVVAgREVTQ1JJUFRJT04KKworICAgICAgICAgIGJheiAgICAgICAgICAgIEJBWiBIRUxQCisgICAgICAgICAgLXogWiBbWiAuLi5dICAgWiBIRUxQCisKKyAgICAgICAgRVBJTE9HCisgICAgJycnCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCisKK2NsYXNzIFRlc3RIZWxwQmlnZ2VyUG9zaXRpb25hbHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCBoZWxwIGFsaWducyB3aGVuIGFyZ3VtZW50cyBhcmUgbG9uZ2VyIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHVzYWdlPSdVU0FHRScsIGRlc2NyaXB0aW9uPSdERVNDUklQVElPTicpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J1ggSEVMUCcpLAorICAgICAgICBTaWcoJy0teScsIGhlbHA9J1kgSEVMUCcpLAorICAgICAgICBTaWcoJ2VraWVraWVraWZla2FuZycsIGhlbHA9J0VLSSBIRUxQJyksCisgICAgICAgIFNpZygnYmFyJywgaGVscD0nQkFSIEhFTFAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBVU0FHRQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgREVTQ1JJUFRJT04KKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBla2lla2lla2lmZWthbmcgIEVLSSBIRUxQCisgICAgICAgICAgYmFyICAgICAgICAgICAgICBCQVIgSEVMUAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCAgICAgICAgICAgICAgIFggSEVMUAorICAgICAgICAgIC0teSBZICAgICAgICAgICAgWSBIRUxQCisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZWZvcm1hdHRpbmcoSGVscFRlc3RDYXNlKToKKyAgICAiIiJNYWtlIHN1cmUgdGhhdCB0ZXh0IGFmdGVyIHNob3J0IG5hbWVzIHN0YXJ0cyBvbiB0aGUgZmlyc3QgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZygKKyAgICAgICAgcHJvZz0nUFJPRycsCisgICAgICAgIGRlc2NyaXB0aW9uPScgICBvZGRseSAgICBmb3JtYXR0ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ3RoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIG11bHRpcGxlICcKKyAgICAgICAgICAgICAgICAgICAgJ2xpbmVzIHdoZW4gd3JhcHBlZCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nb2RkbHlcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIGZvcm1hdHRlZCAteCBoZWxwJyksCisgICAgICAgIFNpZygneScsIG1ldGF2YXI9J3l5eScsIGhlbHA9J25vcm1hbCB5IGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBvZGRseSBmb3JtYXR0ZWQgZ3JvdXBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2NyaXB0aW9uJyksCisgICAgICAgICBbU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgIGhlbHA9JyBvZGRseSBcbicKKyAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVkICAgIC1hICBoZWxwICBcbicKKyAgICAgICAgICAgICAgICAgICAnICAgIGFnYWluLCBzbyBsb25nIHRoYXQgaXQgc2hvdWxkIGJlIHdyYXBwZWQgb3ZlciAnCisgICAgICAgICAgICAgICAgICAgJ211bHRpcGxlIGxpbmVzJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYXSBbLWFdIHl5eQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGRlc2NyaXB0aW9uIHRoYXQgaXMgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBnbyBvbnRvIFwKK211bHRpcGxlCisgICAgICAgIGxpbmVzIHdoZW4gd3JhcHBlZAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHl5eSAgICAgICAgIG5vcm1hbCB5IGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIG9kZGx5IGZvcm1hdHRlZCAteCBoZWxwCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgb2RkbHkgZm9ybWF0dGVkIGdyb3VwIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtYSAgICAgICAgICBvZGRseSBmb3JtYXR0ZWQgLWEgaGVscCBhZ2Fpbiwgc28gbG9uZyB0aGF0IGl0IHNob3VsZCBcCitiZSB3cmFwcGVkCisgICAgICAgICAgICAgICAgICAgICAgb3ZlciBtdWx0aXBsZSBsaW5lcworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFdyYXBwaW5nU2hvcnROYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgc2hvcnQgbmFtZXMgc3RhcnRzIG9uIHRoZSBmaXJzdCBsaW5lIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBkZXNjcmlwdGlvbj0gJ0RcbkQnICogMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1hYJywgaGVscD0nWEhIIEhYJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neXl5JywgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J0FISEggSEhBJyAqIDEwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhdIFstYV0geXl5CisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXkgICAgICAgICBZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFwKK1lIWUggWUhZSAorICAgICAgICAgICAgICAgICAgICAgIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYICAgICAgIFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBIWFhISCBcCitIWFhISCBIWFhISAorICAgICAgICAgICAgICAgICAgICAgIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYWEhIIEhYCisKKyAgICAgICAgQUxQSEFTOgorICAgICAgICAgIC1hICAgICAgICAgIEFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggSEhBQUhISCBISEFBSEhIIEhIQUFISEggXAorSEhBQUhISAorICAgICAgICAgICAgICAgICAgICAgIEhIQUFISEggSEhBQUhISCBISEEKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBXcmFwcGluZ0xvbmdOYW1lcyhIZWxwVGVzdENhc2UpOgorICAgICIiIk1ha2Ugc3VyZSB0aGF0IHRleHQgYWZ0ZXIgbG9uZyBuYW1lcyBzdGFydHMgb24gdGhlIG5leHQgbGluZSIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyh1c2FnZT0nVVNBR0UnLCBkZXNjcmlwdGlvbj0gJ0QgRCcgKiAzMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb249J1YgVicqMzApCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUsIGhlbHA9J1hIIFhIJyAqIDIwKSwKKyAgICAgICAgU2lnKCd5JywgbWV0YXZhcj0neScgKiAyNSwgaGVscD0nWUggWUgnICogMjApLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdBTFBIQVMnKSwgWworICAgICAgICAgICAgU2lnKCctYScsIG1ldGF2YXI9J0EnICogMjUsIGhlbHA9J0FIIEFIJyAqIDIwKSwKKyAgICAgICAgICAgIFNpZygneicsIG1ldGF2YXI9J3onICogMjUsIGhlbHA9J1pIIFpIJyAqIDIwKV0pLAorICAgIF0KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFVTQUdFCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBEIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIEREIFwKK0REIEREIERECisgICAgICAgIEREIEREIEREIEREIEQKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBcCitZSFlIIFlIWUgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUhZSCBZSFlIIFlIWUggWUgKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICAgICAgICAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAteCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBcCitYSFhIIFhIWEgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEhYSCBYSFhIIFhIWEggWEgKKworICAgICAgICBBTFBIQVM6CisgICAgICAgICAgLWEgQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggXAorQUhBSCBBSEFICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFIQUggQUhBSCBBSEFIIEFICisgICAgICAgICAgenp6enp6enp6enp6enp6enp6enp6enp6egorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggXAorWkhaSCBaSFpICisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpIWkggWkhaSCBaSFpIIFpICisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIFYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgVlYgXAorVlYgVlYgVlYKKyAgICAgICAgVlYgVlYgVlYgVlYgVgorICAgICAgICAnJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbmFyZ3M9JysnLCBoZWxwPSd3JyksCisgICAgICAgIFNpZygnLXgnLCBuYXJncz0nKicsIGhlbHA9J3gnKSwKKyAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJywgbmFyZ3M9MiksCisgICAgICAgIFNpZygnYycsIGhlbHA9J2MnLCBuYXJncz0nPycpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCdncm91cCcpLCBbCisgICAgICAgICAgICBTaWcoJy15JywgbmFyZ3M9Jz8nLCBoZWxwPSd5JyksCisgICAgICAgICAgICBTaWcoJy16JywgbmFyZ3M9MywgaGVscD0neicpLAorICAgICAgICAgICAgU2lnKCdkJywgaGVscD0nZCcsIG5hcmdzPScqJyksCisgICAgICAgICAgICBTaWcoJ2UnLCBoZWxwPSdlJywgbmFyZ3M9JysnKSwKKyAgICAgICAgXSkKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFcgW1cgLi4uXV0gWy14IFtYIFtYIC4uLl1dXSBbLXkgW1ldXSBbLXogWiBaIFpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBiIFtjXSBbZCBbZCAuLi5dXSBlIFtlIC4uLl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEgICAgICAgICAgICAgICBhCisgICAgICAgICAgYiAgICAgICAgICAgICAgIGIKKyAgICAgICAgICBjICAgICAgICAgICAgICAgYworCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcgW1cgLi4uXSAgICB3CisgICAgICAgICAgLXggW1ggW1ggLi4uXV0gIHgKKworICAgICAgICBncm91cDoKKyAgICAgICAgICAteSBbWV0gICAgICAgICAgeQorICAgICAgICAgIC16IFogWiBaICAgICAgICB6CisgICAgICAgICAgZCAgICAgICAgICAgICAgIGQKKyAgICAgICAgICBlICAgICAgICAgICAgICAgZQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE9ubHlVc2VyR3JvdXBzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBiYXNpYyB1c2FnZSBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygneHh4eCcpLCBbCisgICAgICAgICAgICBTaWcoJy14JywgaGVscD0neCcpLAorICAgICAgICAgICAgU2lnKCdhJywgaGVscD0nYScpLAorICAgICAgICBdKSwKKyAgICAgICAgKFNpZygneXl5eScpLCBbCisgICAgICAgICAgICBTaWcoJ2InLCBoZWxwPSdiJyksCisgICAgICAgICAgICBTaWcoJy15JywgaGVscD0neScpLAorICAgICAgICBdKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFsteCBYXSBbLXkgWV0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICB4eHh4OgorICAgICAgICAgIC14IFggIHgKKyAgICAgICAgICBhICAgICBhCisKKyAgICAgICAgeXl5eToKKyAgICAgICAgICBiICAgICBiCisgICAgICAgICAgLXkgWSAgeQorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2coSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmciIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUCcgKiA2MCkKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy13JywgbWV0YXZhcj0nVycpLAorICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcpLAorICAgICAgICBTaWcoJ2EnKSwKKyAgICAgICAgU2lnKCdiJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBbLWhdIFstdyBXXSBbLXggWF0gYSBiCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgVworICAgICAgICAgIC14IFgKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZUxvbmdQcm9nT3B0aW9uc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBvcHRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQJyAqIDYwKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUAorICAgICAgICAgICAgICAgWy1oXSBbLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV10gXAorWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdCisgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICBhIGIKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGEKKyAgICAgICAgICBiCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXcgV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXVworICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlTG9uZ1Byb2dQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwcm9nIGlzIGxvbmcgYW5kIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1AnICogNjAsIGFkZF9oZWxwPUZhbHNlKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQCisgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICAgICAgICBiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlT3B0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBtZXRhdmFyPSdXJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICAgICAgU2lnKCdhJyksCisgICAgICAgIFNpZygnYicpLAorICAgICAgICBTaWcoJ2MnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy13IFdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1ddIFwKK1steCBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXQorICAgICAgICAgICAgICAgICAgICBbLXkgWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWV0gXAorWy16IFpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpdCisgICAgICAgICAgICAgICAgICAgIGEgYiBjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhCisgICAgICAgICAgYgorICAgICAgICAgIGMKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdyBXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXCisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VQb3NpdGlvbmFsc1dyYXAoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHVzYWdlIG1lc3NhZ2VzIHdoZXJlIHRoZSBwb3NpdGlvbmFscyB3cmFwIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXgnKSwKKyAgICAgICAgU2lnKCcteScpLAorICAgICAgICBTaWcoJy16JyksCisgICAgICAgIFNpZygnYScgKiAyNSksCisgICAgICAgIFNpZygnYicgKiAyNSksCisgICAgICAgIFNpZygnYycgKiAyNSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFsteCBYXSBbLXkgWV0gWy16IFpdCisgICAgICAgICAgICAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAteCBYCisgICAgICAgICAgLXkgWQorICAgICAgICAgIC16IFoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBVc2FnZU9wdGlvbmFsc1Bvc2l0aW9uYWxzV3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlIG9wdGlvbmFscyBhbmQgcG9zaXRpb25hbHMgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy14JywgbWV0YXZhcj0nWCcgKiAyNSksCisgICAgICAgIFNpZygnLXknLCBtZXRhdmFyPSdZJyAqIDI1KSwKKyAgICAgICAgU2lnKCcteicsIG1ldGF2YXI9J1onICogMjUpLAorICAgICAgICBTaWcoJ2EnICogMjUpLAorICAgICAgICBTaWcoJ2InICogMjUpLAorICAgICAgICBTaWcoJ2MnICogMjUpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF0gXAorWy15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVldCisgICAgICAgICAgICAgICAgICAgIFsteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaXQorICAgICAgICAgICAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICAgICAgICAgICAgY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYworICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICAgIGJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAorICAgICAgICAgIC15IFlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVkKKyAgICAgICAgICAteiBaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVXNhZ2VPcHRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgb3B0aW9uYWxzIGFuZCB0aGV5IHdyYXAiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIG1ldGF2YXI9J1gnICogMjUpLAorICAgICAgICBTaWcoJy15JywgbWV0YXZhcj0nWScgKiAyNSksCisgICAgICAgIFNpZygnLXonLCBtZXRhdmFyPSdaJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhdIFwKK1steSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZXQorICAgICAgICAgICAgICAgICAgICBbLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWl0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC14IFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKKyAgICAgICAgICAteSBZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZCisgICAgICAgICAgLXogWlpaWlpaWlpaWlpaWlpaWlpaWlpaWlpaWgorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFVzYWdlUG9zaXRpb25hbHNPbmx5V3JhcChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXNhZ2UgbWVzc2FnZXMgd2hlcmUgdGhlcmUgYXJlIG9ubHkgcG9zaXRpb25hbHMgYW5kIHRoZXkgd3JhcCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdhJyAqIDI1KSwKKyAgICAgICAgU2lnKCdiJyAqIDI1KSwKKyAgICAgICAgU2lnKCdjJyAqIDI1KSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgICAgICAgICAgICBjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgICAgICAgICAgYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorICAgICAgICAgIGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBWYXJpYWJsZUV4cGFuc2lvbihIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB2YXJpYWJsZXMgYXJlIGV4cGFuZGVkIHByb3Blcmx5IGluIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCcteCcsIHR5cGU9aW50LAorICAgICAgICAgICAgaGVscD0neCAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKHR5cGUpcyAlJScpLAorICAgICAgICBTaWcoJy15JywgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGRlZmF1bHQ9NDIsIGNvbnN0PSdYWFgnLAorICAgICAgICAgICAgaGVscD0neSAlKHByb2cpcyAlKGRlZmF1bHQpcyAlKGNvbnN0KXMnKSwKKyAgICAgICAgU2lnKCctLWZvbycsIGNob2ljZXM9J2FiYycsCisgICAgICAgICAgICBoZWxwPSdmb28gJShwcm9nKXMgJShkZWZhdWx0KXMgJShjaG9pY2VzKXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGRlZmF1bHQ9J2JheicsIGNob2ljZXM9WzEsIDJdLCBtZXRhdmFyPSdCQkInLAorICAgICAgICAgICAgaGVscD0nYmFyICUocHJvZylzICUoZGVmYXVsdClzICUoZGVzdClzJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gJShwcm9nKXMgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCdiYWRnZXInLCBkZWZhdWx0PTAuNSwgaGVscD0nYmFkZ2VyICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFsKKyAgICAgICAgICAgIFNpZygnLWEnLCBoZWxwPSdhICUocHJvZylzICUoZGVmYXVsdClzJyksCisgICAgICAgICAgICBTaWcoJy1iJywgZGVmYXVsdD0tMSwgaGVscD0nYiAlKHByb2cpcyAlKGRlZmF1bHQpcycpLAorICAgICAgICBdKQorICAgIF0KKyAgICB1c2FnZSA9ICgnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFsteV0gWy0tZm9vIHthLGIsY31dIFstLWJhciBCQkJdIFstYSBBXSBbLWIgQl0KKyAgICAgICAgICAgICAgICAgICAgc3BhbSBiYWRnZXIKKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICAgICBzcGFtIFBST0cgTm9uZQorICAgICAgICAgIGJhZGdlciAgICAgICAgIGJhZGdlciBQUk9HIDAuNQorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXggWCAgICAgICAgICAgeCBQUk9HIE5vbmUgaW50ICUKKyAgICAgICAgICAteSAgICAgICAgICAgICB5IFBST0cgNDIgWFhYCisgICAgICAgICAgLS1mb28ge2EsYixjfSAgZm9vIFBST0cgTm9uZSBhLCBiLCBjCisgICAgICAgICAgLS1iYXIgQkJCICAgICAgYmFyIFBST0cgYmF6IGJhcgorCisgICAgICAgIGdyb3VwOgorICAgICAgICAgIC1hIEEgICAgICAgICAgIGEgUFJPRyBOb25lCisgICAgICAgICAgLWIgQiAgICAgICAgICAgYiBQUk9HIC0xCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwVmFyaWFibGVFeHBhbnNpb25Vc2FnZVN1cHBsaWVkKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgcHJvcGVybHkgd2hlbiB1c2FnZT0gaXMgcHJlc2VudCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgdXNhZ2U9JyUocHJvZylzIEZPTycpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRyBGT08KKyAgICAgICAgJycnKQorICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZhcmlhYmxlRXhwYW5zaW9uTm9Bcmd1bWVudHMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBwcm9wZXJseSB3aXRoIG5vIGFyZ3VtZW50cyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFtdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAoJycnXAorICAgICAgICB1c2FnZTogUFJPRworICAgICAgICAnJycpCisgICAgaGVscCA9IHVzYWdlCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBTdXBwcmVzc1VzYWdlKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IGl0ZW1zIGNhbiBiZSBzdXBwcmVzc2VkIGluIHVzYWdlIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCB1c2FnZT1hcmdwYXJzZS5TVVBQUkVTUykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIGhlbHAgPSAnJydcCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdXNhZ2UgPSAnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwU3VwcHJlc3NPcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9YXJncGFyc2UuU1VQUFJFU1MpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gIHNwYW0gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzT3B0aW9uYWxHcm91cChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBvcHRpb25hbCBncm91cHMgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAnKSwKKyAgICAgICAgU2lnKCdzcGFtJywgaGVscD0nc3BhbSBoZWxwJyksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbCisgICAgICAgIChTaWcoJ2dyb3VwJyksIFtTaWcoJy0tYmFyJywgaGVscD1hcmdwYXJzZS5TVVBQUkVTUyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICAgc3BhbSBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFN1cHByZXNzUG9zaXRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCBwb3NpdGlvbmFsIGFyZ3VtZW50cyBjYW4gYmUgc3VwcHJlc3NlZCBpbiBoZWxwIG1lc3NhZ2VzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSZXF1aXJlZE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHJlcXVpcmVkIG9wdGlvbnMgZG9uJ3QgbG9vayBvcHRpb25hbCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgcmVxdWlyZWQ9VHJ1ZSwgaGVscD0nZm9vIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gLS1mb28gRk9PCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCisKK2NsYXNzIFRlc3RIZWxwQWx0ZXJuYXRlUHJlZml4Q2hhcnMoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3B0aW9ucyBkaXNwbGF5IHdpdGggZGlmZmVyZW50IHByZWZpeCBjaGFyYWN0ZXJzIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLCBwcmVmaXhfY2hhcnM9J147JywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCdeXmZvbycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnO2InLCAnOztiYXInLCBoZWxwPSdiYXIgaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgW15eZm9vXSBbO2IgQkFSXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIF5eZm9vICAgICAgICAgICAgICBmb28gaGVscAorICAgICAgICAgIDtiIEJBUiwgOztiYXIgQkFSICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscE5vSGVscE9wdGlvbmFsKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLWhlbHAgYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy0tZm9vIEZPT10gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgc3BhbSAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLS1mb28gRk9PICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFZlcnNpb25PcHRpb25hbChIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3QgdGhhdCB0aGUgLS12ZXJzaW9uIGFyZ3VtZW50IGNhbiBiZSBzdXBwcmVzc2VkIGhlbHAgbWVzc2FnZXMiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcocHJvZz0nUFJPRycsIHZlcnNpb249JzEuMCcpCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLXZdIFstLWZvbyBGT09dIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLXYsIC0tdmVyc2lvbiAgc2hvdyBwcm9ncmFtJ3MgdmVyc2lvbiBudW1iZXIgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICAgICBmb28gaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycnXAorICAgICAgICAxLjAKKyAgICAgICAgJycnCisKKworY2xhc3MgVGVzdEhlbHBOb25lKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IG5vIGVycm9ycyBvY2N1ciBpZiBubyBoZWxwIGlzIHNwZWNpZmllZCIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJyksCisgICAgICAgIFNpZygnc3BhbScpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08KKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBUdXBsZU1ldGF2YXIoSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHNwZWNpZnlpbmcgbWV0YXZhciBhcyBhIHR1cGxlIiIiCisKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQorICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCisgICAgICAgIFNpZygnLXcnLCBoZWxwPSd3JywgbmFyZ3M9JysnLCBtZXRhdmFyPSgnVzEnLCAnVzInKSksCisgICAgICAgIFNpZygnLXgnLCBoZWxwPSd4JywgbmFyZ3M9JyonLCBtZXRhdmFyPSgnWDEnLCAnWDInKSksCisgICAgICAgIFNpZygnLXknLCBoZWxwPSd5JywgbmFyZ3M9MywgbWV0YXZhcj0oJ1kxJywgJ1kyJywgJ1kzJykpLAorICAgICAgICBTaWcoJy16JywgaGVscD0neicsIG5hcmdzPSc/JywgbWV0YXZhcj0oJ1oxJywgKSksCisgICAgXQorICAgIGFyZ3VtZW50X2dyb3VwX3NpZ25hdHVyZXMgPSBbXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstdyBXMSBbVzIgLi4uXV0gWy14IFtYMSBbWDIgLi4uXV1dIFsteSBZMSBZMiBZM10gXAorWy16IFtaMV1dCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC13IFcxIFtXMiAuLi5dICAgIHcKKyAgICAgICAgICAteCBbWDEgW1gyIC4uLl1dICB4CisgICAgICAgICAgLXkgWTEgWTIgWTMgICAgICAgeQorICAgICAgICAgIC16IFtaMV0gICAgICAgICAgIHoKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBSYXdUZXh0KEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3VGV4dEhlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdLZWVwIHRoZSBmb3JtYXR0aW5nXG4nCisgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuXG4nCisgICAgICAgICAgICAgICAgICAgICdcbicKKyAgICAgICAgICAgICAgICAgICAgJ2hlcmVcbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nICAgIGZvbyBoZWxwIHNob3VsZCBhbHNvXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICdhcHBlYXIgYXMgZ2l2ZW4gaGVyZScpLAorICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nICAgIFRoaXMgdGV4dFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHNob3VsZCBiZSBpbmRlbnRlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgZXhhY3RseSBsaWtlIGl0IGlzIGhlcmVcbicpLAorICAgICAgICAgW1NpZygnLS1iYXInLCBoZWxwPSdiYXIgaGVscCcpXSksCisgICAgXQorICAgIHVzYWdlID0gJycnXAorICAgICAgICB1c2FnZTogUFJPRyBbLWhdIFstLWZvbyBGT09dIFstLWJhciBCQVJdIHNwYW0KKyAgICAgICAgJycnCisgICAgaGVscCA9IHVzYWdlICsgJycnXAorCisgICAgICAgIEtlZXAgdGhlIGZvcm1hdHRpbmcKKyAgICAgICAgICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlbgorCisgICAgICAgIGhlcmUKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgICAgICBmb28gaGVscCBzaG91bGQgYWxzbworICAgICAgICAgICAgICAgICAgICAgIGFwcGVhciBhcyBnaXZlbiBoZXJlCisKKyAgICAgICAgdGl0bGU6CisgICAgICAgICAgICAgIFRoaXMgdGV4dAorICAgICAgICAgICAgc2hvdWxkIGJlIGluZGVudGVkCisgICAgICAgICAgICAgIGV4YWN0bHkgbGlrZSBpdCBpcyBoZXJlCisKKyAgICAgICAgICAtLWJhciBCQVIgICBiYXIgaGVscAorICAgICAgICAnJycKKyAgICB2ZXJzaW9uID0gJycKKworCitjbGFzcyBUZXN0SGVscFJhd0Rlc2NyaXB0aW9uKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgUmF3VGV4dEhlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLAorICAgICAgICBkZXNjcmlwdGlvbj0nS2VlcCB0aGUgZm9ybWF0dGluZ1xuJworICAgICAgICAgICAgICAgICAgICAnICAgIGV4YWN0bHkgYXMgaXQgaXMgd3JpdHRlblxuJworICAgICAgICAgICAgICAgICAgICAnXG4nCisgICAgICAgICAgICAgICAgICAgICdoZXJlXG4nKQorCisgICAgYXJndW1lbnRfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9JyAgZm9vIGhlbHAgc2hvdWxkIG5vdFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgIHJldGFpbiB0aGlzIG9kZCBmb3JtYXR0aW5nJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gWworICAgICAgICAoU2lnKCd0aXRsZScsIGRlc2NyaXB0aW9uPScgICAgVGhpcyB0ZXh0XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgc2hvdWxkIGJlIGluZGVudGVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZVxuJyksCisgICAgICAgICBbU2lnKCctLWJhcicsIGhlbHA9J2JhciBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyIEJBUl0gc3BhbQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgS2VlcCB0aGUgZm9ybWF0dGluZworICAgICAgICAgICAgZXhhY3RseSBhcyBpdCBpcyB3cml0dGVuCisKKyAgICAgICAgaGVyZQorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorCisgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAtaCwgLS1oZWxwICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgLS1mb28gRk9PICAgZm9vIGhlbHAgc2hvdWxkIG5vdCByZXRhaW4gdGhpcyBvZGQgZm9ybWF0dGluZworCisgICAgICAgIHRpdGxlOgorICAgICAgICAgICAgICBUaGlzIHRleHQKKyAgICAgICAgICAgIHNob3VsZCBiZSBpbmRlbnRlZAorICAgICAgICAgICAgICBleGFjdGx5IGxpa2UgaXQgaXMgaGVyZQorCisgICAgICAgICAgLS1iYXIgQkFSICAgYmFyIGhlbHAKKyAgICAgICAgJycnCisgICAgdmVyc2lvbiA9ICcnCisKKworY2xhc3MgVGVzdEhlbHBBcmd1bWVudERlZmF1bHRzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIiIiIKKworICAgIHBhcnNlcl9zaWduYXR1cmUgPSBTaWcoCisgICAgICAgIHByb2c9J1BST0cnLCBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnREZWZhdWx0c0hlbHBGb3JtYXR0ZXIsCisgICAgICAgIGRlc2NyaXB0aW9uPSdkZXNjcmlwdGlvbicpCisKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy0tZm9vJywgaGVscD0nZm9vIGhlbHAgLSBvaCBhbmQgYnkgdGhlIHdheSwgJShkZWZhdWx0KXMnKSwKKyAgICAgICAgU2lnKCctLWJhcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGhlbHA9J2JhciBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgICAgICBTaWcoJ2JhZGdlcicsIG5hcmdzPSc/JywgZGVmYXVsdD0nd29vZGVuJywgaGVscD0nYmFkZ2VyIGhlbHAnKSwKKyAgICBdCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFsKKyAgICAgICAgKFNpZygndGl0bGUnLCBkZXNjcmlwdGlvbj0nZGVzY3JpcHRpb24nKSwKKyAgICAgICAgIFtTaWcoJy0tYmF6JywgdHlwZT1pbnQsIGRlZmF1bHQ9NDIsIGhlbHA9J2JheiBoZWxwJyldKSwKKyAgICBdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy0tZm9vIEZPT10gWy0tYmFyXSBbLS1iYXogQkFaXSBzcGFtIFtiYWRnZXJdCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBkZXNjcmlwdGlvbgorCisgICAgICAgIHBvc2l0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIHNwYW0gICAgICAgIHNwYW0gaGVscAorICAgICAgICAgIGJhZGdlciAgICAgIGJhZGdlciBoZWxwIChkZWZhdWx0OiB3b29kZW4pCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtLWZvbyBGT08gICBmb28gaGVscCAtIG9oIGFuZCBieSB0aGUgd2F5LCBOb25lCisgICAgICAgICAgLS1iYXIgICAgICAgYmFyIGhlbHAgKGRlZmF1bHQ6IEZhbHNlKQorCisgICAgICAgIHRpdGxlOgorICAgICAgICAgIGRlc2NyaXB0aW9uCisKKyAgICAgICAgICAtLWJheiBCQVogICBiYXogaGVscCAoZGVmYXVsdDogNDIpCisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCitjbGFzcyBUZXN0SGVscFZlcnNpb25BY3Rpb24oSGVscFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoZSBkZWZhdWx0IGhlbHAgZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywgZGVzY3JpcHRpb249J2Rlc2NyaXB0aW9uJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gW1NpZygnLVYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nMy42JyldCisgICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy1WXQorICAgICAgICAnJycKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGVzY3JpcHRpb24KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC1WLCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworICAgIHZlcnNpb24gPSAnJworCitjbGFzcyBUZXN0SGVscFN1YnBhcnNlcnNPcmRlcmluZyhIZWxwVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3JkZXJpbmcgb2Ygc3ViY29tbWFuZHMgaW4gaGVscCBtYXRjaGVzIHRoZSBjb2RlIiIiCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSdkaXNwbGF5IHNvbWUgc3ViY29tbWFuZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbj0nMC4xJykKKworICAgIHN1YnBhcnNlcnNfc2lnbmF0dXJlcyA9IFtTaWcobmFtZT1uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiAoJ2EnLCAnYicsICdjJywgJ2QnLCAnZScpXQorCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSB7YSxiLGMsZCxlfSAuLi4KKyAgICAgICAgJycnCisKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGlzcGxheSBzb21lIHN1YmNvbW1hbmRzCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAge2EsYixjLGQsZX0KKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0CisgICAgICAgICcnJworCisgICAgdmVyc2lvbiA9ICcnJ1wKKyAgICAgICAgMC4xCisgICAgICAgICcnJworCitjbGFzcyBUZXN0SGVscFN1YnBhcnNlcnNXaXRoSGVscE9yZGVyaW5nKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBvcmRlcmluZyBvZiBzdWJjb21tYW5kcyBpbiBoZWxwIG1hdGNoZXMgdGhlIGNvZGUiIiIKKyAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb249J2Rpc3BsYXkgc29tZSBzdWJjb21tYW5kcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPScwLjEnKQorCisgICAgc3ViY29tbWFuZF9kYXRhID0gKCgnYScsICdhIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAnYiBzdWJjb21tYW5kIGhlbHAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgJ2Mgc3ViY29tbWFuZCBoZWxwJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnZCcsICdkIHN1YmNvbW1hbmQgaGVscCcpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ2UnLCAnZSBzdWJjb21tYW5kIGhlbHAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgc3VicGFyc2Vyc19zaWduYXR1cmVzID0gW1NpZyhuYW1lPW5hbWUsIGhlbHA9aGVscCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGhlbHAgaW4gc3ViY29tbWFuZF9kYXRhXQorCisgICAgdXNhZ2UgPSAnJydcCisgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSB7YSxiLGMsZCxlfSAuLi4KKyAgICAgICAgJycnCisKKyAgICBoZWxwID0gdXNhZ2UgKyAnJydcCisKKyAgICAgICAgZGlzcGxheSBzb21lIHN1YmNvbW1hbmRzCisKKyAgICAgICAgcG9zaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAge2EsYixjLGQsZX0KKyAgICAgICAgICAgIGEgICAgICAgICAgICBhIHN1YmNvbW1hbmQgaGVscAorICAgICAgICAgICAgYiAgICAgICAgICAgIGIgc3ViY29tbWFuZCBoZWxwCisgICAgICAgICAgICBjICAgICAgICAgICAgYyBzdWJjb21tYW5kIGhlbHAKKyAgICAgICAgICAgIGQgICAgICAgICAgICBkIHN1YmNvbW1hbmQgaGVscAorICAgICAgICAgICAgZSAgICAgICAgICAgIGUgc3ViY29tbWFuZCBoZWxwCisKKyAgICAgICAgb3B0aW9uYWwgYXJndW1lbnRzOgorICAgICAgICAgIC1oLCAtLWhlbHAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyAgICAgICAgICAtdiwgLS12ZXJzaW9uICBzaG93IHByb2dyYW0ncyB2ZXJzaW9uIG51bWJlciBhbmQgZXhpdAorICAgICAgICAnJycKKworICAgIHZlcnNpb24gPSAnJydcCisgICAgICAgIDAuMQorICAgICAgICAnJycKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgT3B0aW9uYWwvUG9zaXRpb25hbCBjb25zdHJ1Y3RvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJbnZhbGlkQXJndW1lbnRDb25zdHJ1Y3RvcnMoVGVzdENhc2UpOgorICAgICIiIlRlc3QgYSBidW5jaCBvZiBpbnZhbGlkIEFyZ3VtZW50IGNvbnN0cnVjdG9ycyIiIgorCisgICAgZGVmIGFzc2VydFR5cGVFcnJvcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGFyc2VyLmFkZF9hcmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFZhbHVlRXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYXJzZXIuYWRkX2FyZ3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2tleXdvcmRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBiYXI9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy15JywgY2FsbGJhY2s9J2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2FyZ3M9KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteScsIGNhbGxiYWNrX2t3YXJncz17fSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZGVzdGluYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCkKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ2FwcGVuZCcsICdzdG9yZSddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfb3B0aW9uX3N0cmluZ3Moc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS0nKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy0tLScpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCB0eXBlPSdpbnQnKQorICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy0tZm9vJywgdHlwZT0oaW50LCBmbG9hdCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2FjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIGFjdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCdmb28nLCBhY3Rpb249J2JheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignLS1mb28nLCBhY3Rpb249KCdzdG9yZScsICdhcHBlbmQnKSkKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCItLWZvbyIsIGFjdGlvbj0ic3RvcmUtdHJ1ZSIpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBleHBlY3RlZCA9ICd1bmtub3duIGFjdGlvbicKKyAgICAgICAgICAgIG1zZyA9ICdleHBlY3RlZCAlciwgZm91bmQgJXInICUgKGV4cGVjdGVkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkIGluIHN0cihlKSwgbXNnKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfZGVzdChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGRlc3Q9J2ZvbycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2JhcicsIGRlc3Q9J2JheicpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgZSA9IHN5cy5leGNfaW5mbygpWzFdCisgICAgICAgICAgICBleHBlY3RlZCA9ICdkZXN0IHN1cHBsaWVkIHR3aWNlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50JworICAgICAgICAgICAgbXNnID0gJ2V4cGVjdGVkICVyLCBmb3VuZCAlcicgJSAoZXhwZWN0ZWQsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gc3RyKGUpLCBtc2cpCisKKyAgICBkZWYgdGVzdF9ub19hcmd1bWVudF9hY3Rpb25zKHNlbGYpOgorICAgICAgICBmb3IgYWN0aW9uIGluIFsnc3RvcmVfY29uc3QnLCAnc3RvcmVfdHJ1ZScsICdzdG9yZV9mYWxzZScsCisgICAgICAgICAgICAgICAgICAgICAgICdhcHBlbmRfY29uc3QnLCAnY291bnQnXToKKyAgICAgICAgICAgIGZvciBhdHRycyBpbiBbZGljdCh0eXBlPWludCksIGRpY3QobmFyZ3M9JysnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdChjaG9pY2VzPSdhYicpXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignLXgnLCBhY3Rpb249YWN0aW9uLCAqKmF0dHJzKQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnRfbm9fY29uc3RfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBvcHRpb25zIHdpdGggemVybyBhcmd1bWVudHMKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlX3RydWUnLCAnc3RvcmVfZmFsc2UnLCAnY291bnQnXToKKworICAgICAgICAgICAgIyBjb25zdCBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgY29uc3Q9J2ZvbycsIGFjdGlvbj1hY3Rpb24pCisKKyAgICAgICAgICAgICMgbmFyZ3MgaXMgYWx3YXlzIGRpc2FsbG93ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCcteCcsIG5hcmdzPScqJywgYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X21vcmVfdGhhbl9vbmVfYXJndW1lbnRfYWN0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIGFjdGlvbiBpbiBbJ3N0b3JlJywgJ2FwcGVuZCddOgorCisgICAgICAgICAgICAjIG5hcmdzPTAgaXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRWYWx1ZUVycm9yKCcteCcsIG5hcmdzPTAsIGFjdGlvbj1hY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJ3NwYW0nLCBuYXJncz0wLCBhY3Rpb249YWN0aW9uKQorCisgICAgICAgICAgICAjIGNvbnN0IGlzIGRpc2FsbG93ZWQgd2l0aCBub24tb3B0aW9uYWwgYXJndW1lbnRzCisgICAgICAgICAgICBmb3IgbmFyZ3MgaW4gWzEsICcqJywgJysnXToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFZhbHVlRXJyb3IoJy14JywgY29uc3Q9J2ZvbycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPW5hcmdzLCBhY3Rpb249YWN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VmFsdWVFcnJvcignc3BhbScsIGNvbnN0PSdmb28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXJncz1uYXJncywgYWN0aW9uPWFjdGlvbikKKworICAgIGRlZiB0ZXN0X3JlcXVpcmVkX2NvbnN0X2FjdGlvbnMoc2VsZik6CisgICAgICAgIGZvciBhY3Rpb24gaW4gWydzdG9yZV9jb25zdCcsICdhcHBlbmRfY29uc3QnXToKKworICAgICAgICAgICAgIyBuYXJncyBpcyBhbHdheXMgZGlzYWxsb3dlZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJy14JywgbmFyZ3M9JysnLCBhY3Rpb249YWN0aW9uKQorCisgICAgZGVmIHRlc3RfcGFyc2Vyc19hY3Rpb25fbWlzc2luZ19wYXJhbXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZUVycm9yKCdjb21tYW5kJywgYWN0aW9uPSdwYXJzZXJzJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnLCBwcm9nPSdQUk9HJykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlRXJyb3IoJ2NvbW1hbmQnLCBhY3Rpb249J3BhcnNlcnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXJfY2xhc3M9YXJncGFyc2UuQXJndW1lbnRQYXJzZXIpCisKKyAgICBkZWYgdGVzdF9yZXF1aXJlZF9wb3NpdGlvbmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVFcnJvcignZm9vJywgcmVxdWlyZWQ9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3VzZXJfZGVmaW5lZF9hY3Rpb24oc2VsZik6CisKKyAgICAgICAgY2xhc3MgU3VjY2VzcyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEFjdGlvbihvYmplY3QpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25fc3RyaW5ncywKKyAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9RmFsc2UpOgorICAgICAgICAgICAgICAgIGlmIGRlc3QgPT0gJ3NwYW0nOgorICAgICAgICAgICAgICAgICAgICBpZiBjb25zdCBpcyBTdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBTdWNjZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN1Y2Nlc3MoKQorCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWNjZXNzLCBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnLS1zcGFtJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPUFjdGlvbiwgZGVmYXVsdD1TdWNjZXNzLCBjb25zdD1TdWNjZXNzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdWNjZXNzLCBwYXJzZXIuYWRkX2FyZ3VtZW50LCAnc3BhbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj1BY3Rpb24sIGRlZmF1bHQ9U3VjY2VzcywgY29uc3Q9U3VjY2VzcykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBBY3Rpb25zIHJldHVybmVkIGJ5IGFkZF9hcmd1bWVudAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QWN0aW9uc1JldHVybmVkKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Rlc3Qoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1mb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnZm9vJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1iYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAnYmFyJykKKyAgICAgICAgYWN0aW9uID0gcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCAnLXknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZXN0LCAneCcpCisKKyAgICBkZWYgdGVzdF9taXNjKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIGFjdGlvbiA9IHBhcnNlci5hZGRfYXJndW1lbnQoJy0tZm9vJywgbmFyZ3M9Jz8nLCBjb25zdD00MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTg0LCB0eXBlPWludCwgY2hvaWNlcz1bMSwgMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nRk9PJywgbWV0YXZhcj0nQkFSJywgZGVzdD0nYmF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24ubmFyZ3MsICc/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uY29uc3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5kZWZhdWx0LCA4NCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24udHlwZSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5jaG9pY2VzLCBbMSwgMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0aW9uLmhlbHAsICdGT08nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdGlvbi5tZXRhdmFyLCAnQkFSJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3Rpb24uZGVzdCwgJ2JheicpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudCBjb25mbGljdCBoYW5kbGluZyB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0Q29uZmxpY3RIYW5kbGluZyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9iYWRfdHlwZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXJncGFyc2UuQXJndW1lbnRQYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZsaWN0X2hhbmRsZXI9J2ZvbycpCisKKyAgICBkZWYgdGVzdF9jb25mbGljdF9lcnJvcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQsICcteCcpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQsICctLXNwYW0nKQorCisgICAgZGVmIHRlc3RfcmVzb2x2ZV9lcnJvcihzZWxmKToKKyAgICAgICAgZ2V0X3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyCisgICAgICAgIHBhcnNlciA9IGdldF9wYXJzZXIocHJvZz0nUFJPRycsIGNvbmZsaWN0X2hhbmRsZXI9J3Jlc29sdmUnKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy14JywgaGVscD0nT0xEIFgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteCcsIGhlbHA9J05FVyBYJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgICAgICAteCBYICAgICAgICBORVcgWAorICAgICAgICAgICAgJycnKSkKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBtZXRhdmFyPSdPTERfU1BBTScpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc3BhbScsIG1ldGF2YXI9J05FV19TUEFNJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZm9ybWF0X2hlbHAoKSwgdGV4dHdyYXAuZGVkZW50KCcnJ1wKKyAgICAgICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy14IFhdIFstLXNwYW0gTkVXX1NQQU1dCisKKyAgICAgICAgICAgIG9wdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgLWgsIC0taGVscCAgICAgICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0CisgICAgICAgICAgICAgIC14IFggICAgICAgICAgICAgTkVXIFgKKyAgICAgICAgICAgICAgLS1zcGFtIE5FV19TUEFNCisgICAgICAgICAgICAnJycpKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgSGVscCBhbmQgVmVyc2lvbiBvcHRpb24gdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE9wdGlvbmFsc0hlbHBWZXJzaW9uQWN0aW9ucyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgaGVscCBhbmQgdmVyc2lvbiBhY3Rpb25zIiIiCisKKyAgICBkZWYgX2dldF9lcnJvcihzZWxmLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IEFyZ3VtZW50UGFyc2VyRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc3lzLmV4Y19pbmZvKClbMV0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyZ3VtZW50UGFyc2VyRXJyb3IsIGZ1bmMsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBhc3NlcnRQcmludEhlbHBFeGl0KHNlbGYsIHBhcnNlciwgYXJnc19zdHIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VyLmZvcm1hdF9oZWxwKCksCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3Nfc3RyLnNwbGl0KCkpLnN0ZG91dCkKKworICAgIGRlZiBhc3NlcnRQcmludFZlcnNpb25FeGl0KHNlbGYsIHBhcnNlciwgYXJnc19zdHIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcGFyc2VyLmZvcm1hdF92ZXJzaW9uKCksCisgICAgICAgICAgICBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3Nfc3RyLnNwbGl0KCkpLnN0ZGVycikKKworICAgIGRlZiBhc3NlcnRBcmd1bWVudFBhcnNlckVycm9yKHNlbGYsIHBhcnNlciwgKmFyZ3MpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBwYXJzZXIucGFyc2VfYXJncywgYXJncykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHZlcnNpb249JzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fZm9ybWF0KHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUFAnLCB2ZXJzaW9uPSclKHByb2cpcyAzLjUnKQorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3RkZXJyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1BQUCAzLjVcbicsIG1zZykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9faGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UsIHZlcnNpb249JzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X3ZlcnNpb25fYWN0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdYWFgnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctVicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JyUocHJvZylzIDMuNycpCisgICAgICAgIG1zZyA9IHNlbGYuX2dldF9lcnJvcihwYXJzZXIucGFyc2VfYXJncywgWyctViddKS5zdGRlcnIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnWFhYIDMuN1xuJywgbXNnKQorCisgICAgZGVmIHRlc3Rfbm9faGVscChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIoYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLWhlbHAnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLXYnKQorICAgICAgICBzZWxmLmFzc2VydEFyZ3VtZW50UGFyc2VyRXJyb3IocGFyc2VyLCAnLS12ZXJzaW9uJykKKworICAgIGRlZiB0ZXN0X2FsdGVybmF0ZV9oZWxwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J2hlbHAnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCcteScsIGFjdGlvbj0ndmVyc2lvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRIZWxwRXhpdChwYXJzZXIsICcteCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UHJpbnRWZXJzaW9uRXhpdChwYXJzZXIsICcteScpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0QXJndW1lbnRQYXJzZXJFcnJvcihwYXJzZXIsICctLXZlcnNpb24nKQorCisgICAgZGVmIHRlc3RfaGVscF92ZXJzaW9uX2V4dHJhX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIodmVyc2lvbj0nMS4wJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXgnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCd5JykKKworICAgICAgICAjIHRyeSBhbGwgY29tYmluYXRpb25zIG9mIHZhbGlkIHByZWZpeGVzIGFuZCBzdWZmaXhlcworICAgICAgICB2YWxpZF9wcmVmaXhlcyA9IFsnJywgJy14JywgJ2ZvbycsICcteCBiYXInLCAnYmF6IC14J10KKyAgICAgICAgdmFsaWRfc3VmZml4ZXMgPSB2YWxpZF9wcmVmaXhlcyArIFsnLS1iYWQtb3B0aW9uJywgJ2ZvbyBiYXIgYmF6J10KKyAgICAgICAgZm9yIHByZWZpeCBpbiB2YWxpZF9wcmVmaXhlczoKKyAgICAgICAgICAgIGZvciBzdWZmaXggaW4gdmFsaWRfc3VmZml4ZXM6CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gJyVzICUlcyAlcycgJSAocHJlZml4LCBzdWZmaXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50SGVscEV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLWgnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludEhlbHBFeGl0KHBhcnNlciwgZm9ybWF0ICUgJy0taGVscCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFByaW50VmVyc2lvbkV4aXQocGFyc2VyLCBmb3JtYXQgJSAnLXYnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRQcmludFZlcnNpb25FeGl0KHBhcnNlciwgZm9ybWF0ICUgJy0tdmVyc2lvbicpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09CisjIHN0cigpIGFuZCByZXByKCkgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0U3RyaW5ncyhUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBzdHIoKSAgYW5kIHJlcHIoKSBvbiBPcHRpb25hbHMgYW5kIFBvc2l0aW9uYWxzIiIiCisKKyAgICBkZWYgYXNzZXJ0U3RyaW5nRXF1YWwoc2VsZiwgb2JqLCByZXN1bHRfc3RyaW5nKToKKyAgICAgICAgZm9yIGZ1bmMgaW4gW3N0ciwgcmVwcl06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMob2JqKSwgcmVzdWx0X3N0cmluZykKKworICAgIGRlZiB0ZXN0X29wdGlvbmFsKHNlbGYpOgorICAgICAgICBvcHRpb24gPSBhcmdwYXJzZS5BY3Rpb24oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1bJy0tZm9vJywgJy1hJywgJy1iJ10sCisgICAgICAgICAgICBkZXN0PSdiJywKKyAgICAgICAgICAgIHR5cGU9J2ludCcsCisgICAgICAgICAgICBuYXJncz0nKycsCisgICAgICAgICAgICBkZWZhdWx0PTQyLAorICAgICAgICAgICAgY2hvaWNlcz1bMSwgMiwgM10sCisgICAgICAgICAgICBoZWxwPSdIRUxQJywKKyAgICAgICAgICAgIG1ldGF2YXI9J01FVEFWQVInKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQWN0aW9uKG9wdGlvbl9zdHJpbmdzPVsnLS1mb28nLCAnLWEnLCAnLWInXSwgZGVzdD0nYicsICIKKyAgICAgICAgICAgICJuYXJncz0nKycsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9NDIsIHR5cGU9J2ludCcsICIKKyAgICAgICAgICAgICJjaG9pY2VzPVsxLCAyLCAzXSwgaGVscD0nSEVMUCcsIG1ldGF2YXI9J01FVEFWQVInKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwob3B0aW9uLCBzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgYXJndW1lbnQgPSBhcmdwYXJzZS5BY3Rpb24oCisgICAgICAgICAgICBvcHRpb25fc3RyaW5ncz1bXSwKKyAgICAgICAgICAgIGRlc3Q9J3gnLAorICAgICAgICAgICAgdHlwZT1mbG9hdCwKKyAgICAgICAgICAgIG5hcmdzPSc/JywKKyAgICAgICAgICAgIGRlZmF1bHQ9Mi41LAorICAgICAgICAgICAgY2hvaWNlcz1bMC41LCAxLjUsIDIuNV0sCisgICAgICAgICAgICBoZWxwPSdIIEhIIEgnLAorICAgICAgICAgICAgbWV0YXZhcj0nTVYgTVYgTVYnKQorICAgICAgICBzdHJpbmcgPSAoCisgICAgICAgICAgICAiQWN0aW9uKG9wdGlvbl9zdHJpbmdzPVtdLCBkZXN0PSd4JywgbmFyZ3M9Jz8nLCAiCisgICAgICAgICAgICAiY29uc3Q9Tm9uZSwgZGVmYXVsdD0yLjUsIHR5cGU9JXIsIGNob2ljZXM9WzAuNSwgMS41LCAyLjVdLCAiCisgICAgICAgICAgICAiaGVscD0nSCBISCBIJywgbWV0YXZhcj0nTVYgTVYgTVYnKSIgJSBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChhcmd1bWVudCwgc3RyaW5nKQorCisgICAgZGVmIHRlc3RfbmFtZXNwYWNlKHNlbGYpOgorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShmb289NDIsIGJhcj0nc3BhbScpCisgICAgICAgIHN0cmluZyA9ICJOYW1lc3BhY2UoYmFyPSdzcGFtJywgZm9vPTQyKSIKKyAgICAgICAgc2VsZi5hc3NlcnRTdHJpbmdFcXVhbChucywgc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJykKKyAgICAgICAgc3RyaW5nID0gKAorICAgICAgICAgICAgIkFyZ3VtZW50UGFyc2VyKHByb2c9J1BST0cnLCB1c2FnZT1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lLCAiCisgICAgICAgICAgICAidmVyc2lvbj1Ob25lLCBmb3JtYXR0ZXJfY2xhc3M9JXIsIGNvbmZsaWN0X2hhbmRsZXI9J2Vycm9yJywgIgorICAgICAgICAgICAgImFkZF9oZWxwPVRydWUpIiAlIGFyZ3BhcnNlLkhlbHBGb3JtYXR0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RyaW5nRXF1YWwocGFyc2VyLCBzdHJpbmcpCisKKyMgPT09PT09PT09PT09PT09CisjIE5hbWVzcGFjZSB0ZXN0cworIyA9PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdE5hbWVzcGFjZShUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgbnMgPSBhcmdwYXJzZS5OYW1lc3BhY2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgbnMsICd4JykKKworICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTQyLCBiPSdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5hLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5iLCAnc3BhbScpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgbnMxID0gYXJncGFyc2UuTmFtZXNwYWNlKGE9MSwgYj0yKQorICAgICAgICBuczIgPSBhcmdwYXJzZS5OYW1lc3BhY2UoYj0yLCBhPTEpCisgICAgICAgIG5zMyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTEpCisgICAgICAgIG5zNCA9IGFyZ3BhcnNlLk5hbWVzcGFjZShiPTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuczEsIG5zMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczEsIG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczEsIG5zNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczIsIG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChuczIsIG5zNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMSAhPSBuczMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczEgIT0gbnM0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMyICE9IG5zMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMiAhPSBuczQpCisKKworIyA9PT09PT09PT09PT09PT09PT09CisjIEZpbGUgZW5jb2RpbmcgdGVzdHMKKyMgPT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0RW5jb2RpbmcoVGVzdENhc2UpOgorCisgICAgZGVmIF90ZXN0X21vZHVsZV9lbmNvZGluZyhzZWxmLCBwYXRoKToKKyAgICAgICAgcGF0aCwgXyA9IG9zLnBhdGguc3BsaXRleHQocGF0aCkKKyAgICAgICAgcGF0aCArPSAiLnB5IgorICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHBhdGgsICdyJywgJ3V0ZjgnKSBhcyBmOgorICAgICAgICAgICAgZi5yZWFkKCkKKworICAgIGRlZiB0ZXN0X2FyZ3BhcnNlX21vZHVsZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2R1bGVfZW5jb2RpbmcoYXJncGFyc2UuX19maWxlX18pCisKKyAgICBkZWYgdGVzdF90ZXN0X2FyZ3BhcnNlX21vZHVsZV9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9tb2R1bGVfZW5jb2RpbmcoX19maWxlX18pCisKKyMgPT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudEVycm9yIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdEFyZ3VtZW50RXJyb3IoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfZXJyb3Ioc2VsZik6CisgICAgICAgIG1zZyA9ICJteSBlcnJvciBoZXJlIgorICAgICAgICBlcnJvciA9IGFyZ3BhcnNlLkFyZ3VtZW50RXJyb3IoTm9uZSwgbXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksIG1zZykKKworIyA9PT09PT09PT09PT09PT09PT09PT09PQorIyBBcmd1bWVudFR5cGVFcnJvciB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBUZXN0QXJndW1lbnRUeXBlRXJyb3IoVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYXJndW1lbnRfdHlwZV9lcnJvcihzZWxmKToKKworICAgICAgICBkZWYgc3BhbShzdHJpbmcpOgorICAgICAgICAgICAgcmFpc2UgYXJncGFyc2UuQXJndW1lbnRUeXBlRXJyb3IoJ3NwYW0hJykKKworICAgICAgICBwYXJzZXIgPSBFcnJvclJhaXNpbmdBcmd1bWVudFBhcnNlcihwcm9nPSdQUk9HJywgYWRkX2hlbHA9RmFsc2UpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ3gnLCB0eXBlPXNwYW0pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9hcmdzKFsnWFhYJ10pCisgICAgICAgIGV4Y2VwdCBBcmd1bWVudFBhcnNlckVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAndXNhZ2U6IFBST0cgeFxuUFJPRzogZXJyb3I6IGFyZ3VtZW50IHg6IHNwYW0hXG4nCisgICAgICAgICAgICBtc2cgPSBzeXMuZXhjX2luZm8oKVsxXS5zdGRlcnIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyMgPT09PT09PT09PT09PT09PT09PT09PQorIyBwYXJzZV9rbm93bl9hcmdzIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT0KKworY2xhc3MgVGVzdFBhcnNlS25vd25BcmdzKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X29wdGlvbmFscyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWZvbycpCisgICAgICAgIGFyZ3MsIGV4dHJhcyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKCctLWZvbyBGIC0tYmFyIC0tYmF6Jy5zcGxpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5TKGZvbz0nRicpLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnLS1iYXInLCAnLS1iYXonXSwgZXh0cmFzKQorCisgICAgZGVmIHRlc3RfbWl4ZWQoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCBuYXJncz0nPycsIGNvbnN0PTEsIHR5cGU9aW50KQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNwYW0nLCBhY3Rpb249J3N0b3JlX2ZhbHNlJykKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFkZ2VyJykKKworICAgICAgICBhcmd2ID0gWyJCIiwgIkMiLCAiLS1mb28iLCAiLXYiLCAiMyIsICI0Il0KKyAgICAgICAgYXJncywgZXh0cmFzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh2PTMsIHNwYW09VHJ1ZSwgYmFkZ2VyPSJCIiksIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyJDIiwgIi0tZm9vIiwgIjQiXSwgZXh0cmFzKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGFkZF9hcmd1bWVudCBtZXRhdmFyIHRlc3RzCisjID09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RBZGRBcmd1bWVudE1ldGF2YXIoVGVzdENhc2UpOgorCisgICAgRVhQRUNURURfTUVTU0FHRSA9ICJsZW5ndGggb2YgbWV0YXZhciB0dXBsZSBkb2VzIG5vdCBtYXRjaCBuYXJncyIKKworICAgIGRlZiBkb190ZXN0X25vX2V4Y2VwdGlvbihzZWxmLCBuYXJncywgbWV0YXZhcik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iLCBuYXJncz1uYXJncywgbWV0YXZhcj1tZXRhdmFyKQorCisgICAgZGVmIGRvX3Rlc3RfZXhjZXB0aW9uKHNlbGYsIG5hcmdzLCBtZXRhdmFyKToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgiLS1mb28iLCBuYXJncz1uYXJncywgbWV0YXZhcj1tZXRhdmFyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBzZWxmLkVYUEVDVEVEX01FU1NBR0UpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPU5vbmUKKworICAgIGRlZiB0ZXN0X25hcmdzX05vbmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19Ob25lX21ldGF2YXJfbGVuZ3RoMChzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz1Ob25lLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19Ob25lX21ldGF2YXJfbGVuZ3RoMShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz1Ob25lLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfTm9uZV9tZXRhdmFyX2xlbmd0aDMoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Tm9uZSwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPT8KKworICAgIGRlZiB0ZXN0X25hcmdzX29wdGlvbmFsX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vcHRpb25hbF9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9Ij8iLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vcHRpb25hbF9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ij8iLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3Nfb3B0aW9uYWxfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSI/IiwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPSoKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX3plcm9vcm1vcmVfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSIqIiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfemVyb29ybW9yZV9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSgiMSIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfemVyb29ybW9yZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IioiLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc196ZXJvb3Jtb3JlX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iKiIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0rCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX29uZW9ybW9yZV9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPXR1cGxlKCkpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgxKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX29uZW9ybW9yZV9tZXRhdmFyX2xlbmd0aDIoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9IisiLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19vbmVvcm1vcmVfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSIrIiwgbWV0YXZhcj0oIjEiLCAiMiIsICIzIikpCisKKyAgICAjIFVuaXQgdGVzdHMgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbWV0YXZhciB3aGVuIG5hcmdzPS4uLgorCisgICAgZGVmIHRlc3RfbmFyZ3NfcmVtYWluZGVyX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSIxIikKKworICAgIGRlZiB0ZXN0X25hcmdzX3JlbWFpbmRlcl9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ii4uLiIsIG1ldGF2YXI9dHVwbGUoKSkKKworICAgIGRlZiB0ZXN0X25hcmdzX3JlbWFpbmRlcl9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9Ii4uLiIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSgiMSIsICIyIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19yZW1haW5kZXJfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSIuLi4iLCBtZXRhdmFyPSgiMSIsICIyIiwgIjMiKSkKKworICAgICMgVW5pdCB0ZXN0cyBmb3IgZGlmZmVyZW50IHZhbHVlcyBvZiBtZXRhdmFyIHdoZW4gbmFyZ3M9QS4uLgorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj0iMSIpCisKKyAgICBkZWYgdGVzdF9uYXJnc19wYXJzZXJfbWV0YXZhcl9sZW5ndGgwKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMShzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X25vX2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9KCIxIikpCisKKyAgICBkZWYgdGVzdF9uYXJnc19wYXJzZXJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPSJBLi4uIiwgbWV0YXZhcj0oIjEiLCAiMiIpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfcGFyc2VyX21ldGF2YXJfbGVuZ3RoMyhzZWxmKToKKyAgICAgICAgc2VsZi5kb190ZXN0X2V4Y2VwdGlvbihuYXJncz0iQS4uLiIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0xCisKKyAgICBkZWYgdGVzdF9uYXJnc18xX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMV9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MSwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMV9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MSwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzFfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTEsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0yCisKKyAgICBkZWYgdGVzdF9uYXJnc18yX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMl9tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MiwgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfMl9tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MiwgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzJfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTIsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisgICAgIyBVbml0IHRlc3RzIGZvciBkaWZmZXJlbnQgdmFsdWVzIG9mIG1ldGF2YXIgd2hlbiBuYXJncz0zCisKKyAgICBkZWYgdGVzdF9uYXJnc18zX21ldGF2YXJfc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9IjEiKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfM19tZXRhdmFyX2xlbmd0aDAoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9leGNlcHRpb24obmFyZ3M9MywgbWV0YXZhcj10dXBsZSgpKQorCisgICAgZGVmIHRlc3RfbmFyZ3NfM19tZXRhdmFyX2xlbmd0aDEoc2VsZik6CisgICAgICAgIHNlbGYuZG9fdGVzdF9ub19leGNlcHRpb24obmFyZ3M9MywgbWV0YXZhcj0oIjEiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3RfZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9KCIxIiwgIjIiKSkKKworICAgIGRlZiB0ZXN0X25hcmdzXzNfbWV0YXZhcl9sZW5ndGgzKHNlbGYpOgorICAgICAgICBzZWxmLmRvX3Rlc3Rfbm9fZXhjZXB0aW9uKG5hcmdzPTMsIG1ldGF2YXI9KCIxIiwgIjIiLCAiMyIpKQorCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgZnJvbSBhcmdwYXJzZSBpbXBvcnQgKiB0ZXN0cworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2NsYXNzIFRlc3RJbXBvcnRTdGFyKFRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiBhcmdwYXJzZS5fX2FsbF9fOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoYXJncGFyc2UsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfYWxsX2V4cG9ydHNfZXZlcnl0aGluZ19idXRfbW9kdWxlcyhzZWxmKToKKyAgICAgICAgaXRlbXMgPSBbCisgICAgICAgICAgICBuYW1lCisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gdmFycyhhcmdwYXJzZSkuaXRlbXMoKQorICAgICAgICAgICAgaWYgbm90IChuYW1lLnN0YXJ0c3dpdGgoIl8iKSBvciBuYW1lID09ICduZ2V0dGV4dCcpCisgICAgICAgICAgICBpZiBub3QgaW5zcGVjdC5pc21vZHVsZSh2YWx1ZSkKKyAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdGVtcyksIHNvcnRlZChhcmdwYXJzZS5fX2FsbF9fKSkKKworZGVmIHRlc3RfbWFpbigpOgorICAgICMgc2lsZW5jZSB3YXJuaW5ncyBhYm91dCB2ZXJzaW9uIGFyZ3VtZW50IC0gdGhlc2UgYXJlIGV4cGVjdGVkCisgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKAorICAgICAgICAgICAgKCdUaGUgInZlcnNpb24iIGFyZ3VtZW50IHRvIEFyZ3VtZW50UGFyc2VyIGlzIGRlcHJlY2F0ZWQuJywKKyAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgKCdUaGUgKGZvcm1hdHxwcmludClfdmVyc2lvbiBtZXRob2QgaXMgZGVwcmVjYXRlZCcsCisgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgICMgUmVtb3ZlIGdsb2JhbCByZWZlcmVuY2VzIHRvIGF2b2lkIGxvb2tpbmcgbGlrZSB3ZSBoYXZlIHJlZmxlYWtzLgorICAgIFJGaWxlLnNlZW4gPSB7fQorICAgIFdGaWxlLnNlZW4gPSBzZXQoKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weSBiL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKaW5kZXggNjI5OTdkNy4uNTE5MGMzNSAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF9hcnJheS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CkBAIC0xLDIxICsxLDI4IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiVGVzdCB0aGUgYXJyYXltb2R1bGUuCiAgICBSb2dlciBFLiBNYXNzZQogIiIiCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5Ci1pbXBvcnQgYXJyYXksIGlvLCBtYXRoCi1mcm9tIHBpY2tsZSBpbXBvcnQgbG9hZHMsIGR1bXBzLCBISUdIRVNUX1BST1RPQ09MCitpbXBvcnQgd2Vha3JlZgoraW1wb3J0IHBpY2tsZQogaW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgaW8KK2ltcG9ydCBtYXRoCitpbXBvcnQgc3RydWN0CitpbXBvcnQgd2FybmluZ3MKKworaW1wb3J0IGFycmF5Citmcm9tIGFycmF5IGltcG9ydCBfYXJyYXlfcmVjb25zdHJ1Y3RvciBhcyBhcnJheV9yZWNvbnN0cnVjdG9yCisKIAogY2xhc3MgQXJyYXlTdWJjbGFzcyhhcnJheS5hcnJheSk6CiAgICAgcGFzcwogCiBjbGFzcyBBcnJheVN1YmNsYXNzV2l0aEt3YXJncyhhcnJheS5hcnJheSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVjb2RlLCBuZXdhcmc9Tm9uZSk6Ci0gICAgICAgIGFycmF5LmFycmF5Ll9faW5pdF9fKHNlbGYsIHR5cGVjb2RlKQorICAgICAgICBhcnJheS5hcnJheS5fX2luaXRfXyhzZWxmKQogCiB0ZXN0cyA9IFtdICMgbGlzdCB0byBhY2N1bXVsYXRlIGFsbCB0ZXN0cwogdHlwZWNvZGVzID0gInViQmhIaUlsTGZkIgpAQCAtMzAsNiArMzcsMTM3IEBACiAKIHRlc3RzLmFwcGVuZChCYWRDb25zdHJ1Y3RvclRlc3QpCiAKKyMgTWFjaGluZSBmb3JtYXQgY29kZXMuCisjCisjIFNlYXJjaCBmb3IgImVudW0gbWFjaGluZV9mb3JtYXRfY29kZSIgaW4gTW9kdWxlcy9hcnJheW1vZHVsZS5jIHRvIGdldCB0aGUKKyMgYXV0aG9yaXRhdGl2ZSB2YWx1ZXMuCitVTktOT1dOX0ZPUk1BVCA9IC0xCitVTlNJR05FRF9JTlQ4ID0gMAorU0lHTkVEX0lOVDggPSAxCitVTlNJR05FRF9JTlQxNl9MRSA9IDIKK1VOU0lHTkVEX0lOVDE2X0JFID0gMworU0lHTkVEX0lOVDE2X0xFID0gNAorU0lHTkVEX0lOVDE2X0JFID0gNQorVU5TSUdORURfSU5UMzJfTEUgPSA2CitVTlNJR05FRF9JTlQzMl9CRSA9IDcKK1NJR05FRF9JTlQzMl9MRSA9IDgKK1NJR05FRF9JTlQzMl9CRSA9IDkKK1VOU0lHTkVEX0lOVDY0X0xFID0gMTAKK1VOU0lHTkVEX0lOVDY0X0JFID0gMTEKK1NJR05FRF9JTlQ2NF9MRSA9IDEyCitTSUdORURfSU5UNjRfQkUgPSAxMworSUVFRV83NTRfRkxPQVRfTEUgPSAxNAorSUVFRV83NTRfRkxPQVRfQkUgPSAxNQorSUVFRV83NTRfRE9VQkxFX0xFID0gMTYKK0lFRUVfNzU0X0RPVUJMRV9CRSA9IDE3CitVVEYxNl9MRSA9IDE4CitVVEYxNl9CRSA9IDE5CitVVEYzMl9MRSA9IDIwCitVVEYzMl9CRSA9IDIxCisKK2NsYXNzIEFycmF5UmVjb25zdHJ1Y3RvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXlfcmVjb25zdHJ1Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsICJiIiwgMCwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGFycmF5X3JlY29uc3RydWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgImIiLCAwLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXJyYXlfcmVjb25zdHJ1Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXksICJiIiwgJycsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhcnJheV9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSwgImIiLCAwLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXJyYXlfcmVjb25zdHJ1Y3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuYXJyYXksICI/IiwgMCwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcnJheV9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSwgImIiLCBVTktOT1dOX0ZPUk1BVCwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcnJheV9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSwgImIiLCAyMiwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcnJheV9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSwgImQiLCAxNiwgYiJhIikKKworICAgIGRlZiB0ZXN0X251bWJlcnMoc2VsZik6CisgICAgICAgIHRlc3RjYXNlcyA9ICgKKyAgICAgICAgICAgIChbJ0InLCAnSCcsICdJJywgJ0wnXSwgVU5TSUdORURfSU5UOCwgJz1CQkJCJywKKyAgICAgICAgICAgICBbMHg4MCwgMHg3ZiwgMCwgMHhmZl0pLAorICAgICAgICAgICAgKFsnYicsICdoJywgJ2knLCAnbCddLCBTSUdORURfSU5UOCwgJz1iYmInLAorICAgICAgICAgICAgIFstMHg4MCwgMHg3ZiwgMF0pLAorICAgICAgICAgICAgKFsnSCcsICdJJywgJ0wnXSwgVU5TSUdORURfSU5UMTZfTEUsICc8SEhISCcsCisgICAgICAgICAgICAgWzB4ODAwMCwgMHg3ZmZmLCAwLCAweGZmZmZdKSwKKyAgICAgICAgICAgIChbJ0gnLCAnSScsICdMJ10sIFVOU0lHTkVEX0lOVDE2X0JFLCAnPkhISEgnLAorICAgICAgICAgICAgIFsweDgwMDAsIDB4N2ZmZiwgMCwgMHhmZmZmXSksCisgICAgICAgICAgICAoWydoJywgJ2knLCAnbCddLCBTSUdORURfSU5UMTZfTEUsICc8aGhoJywKKyAgICAgICAgICAgICBbLTB4ODAwMCwgMHg3ZmZmLCAwXSksCisgICAgICAgICAgICAoWydoJywgJ2knLCAnbCddLCBTSUdORURfSU5UMTZfQkUsICc+aGhoJywKKyAgICAgICAgICAgICBbLTB4ODAwMCwgMHg3ZmZmLCAwXSksCisgICAgICAgICAgICAoWydJJywgJ0wnXSwgVU5TSUdORURfSU5UMzJfTEUsICc8SUlJSScsCisgICAgICAgICAgICAgWzE8PDMxLCAoMTw8MzEpLTEsIDAsICgxPDwzMiktMV0pLAorICAgICAgICAgICAgKFsnSScsICdMJ10sIFVOU0lHTkVEX0lOVDMyX0JFLCAnPklJSUknLAorICAgICAgICAgICAgIFsxPDwzMSwgKDE8PDMxKS0xLCAwLCAoMTw8MzIpLTFdKSwKKyAgICAgICAgICAgIChbJ2knLCAnbCddLCBTSUdORURfSU5UMzJfTEUsICc8aWlpJywKKyAgICAgICAgICAgICBbLTE8PDMxLCAoMTw8MzEpLTEsIDBdKSwKKyAgICAgICAgICAgIChbJ2knLCAnbCddLCBTSUdORURfSU5UMzJfQkUsICc+aWlpJywKKyAgICAgICAgICAgICBbLTE8PDMxLCAoMTw8MzEpLTEsIDBdKSwKKyAgICAgICAgICAgIChbJ0wnXSwgVU5TSUdORURfSU5UNjRfTEUsICc8UVFRUScsCisgICAgICAgICAgICAgWzE8PDMxLCAoMTw8MzEpLTEsIDAsICgxPDwzMiktMV0pLAorICAgICAgICAgICAgKFsnTCddLCBVTlNJR05FRF9JTlQ2NF9CRSwgJz5RUVFRJywKKyAgICAgICAgICAgICBbMTw8MzEsICgxPDwzMSktMSwgMCwgKDE8PDMyKS0xXSksCisgICAgICAgICAgICAoWydsJ10sIFNJR05FRF9JTlQ2NF9MRSwgJzxxcXEnLAorICAgICAgICAgICAgIFstMTw8MzEsICgxPDwzMSktMSwgMF0pLAorICAgICAgICAgICAgKFsnbCddLCBTSUdORURfSU5UNjRfQkUsICc+cXFxJywKKyAgICAgICAgICAgICBbLTE8PDMxLCAoMTw8MzEpLTEsIDBdKSwKKyAgICAgICAgICAgICMgVGhlIGZvbGxvd2luZyB0ZXN0cyBmb3IgSU5UNjQgd2lsbCByYWlzZSBhbiBPdmVyZmxvd0Vycm9yCisgICAgICAgICAgICAjIHdoZW4gcnVuIG9uIGEgMzItYml0IG1hY2hpbmUuIFRoZSB0ZXN0cyBhcmUgc2ltcGx5IHNraXBwZWQKKyAgICAgICAgICAgICMgaW4gdGhhdCBjYXNlLgorICAgICAgICAgICAgKFsnTCddLCBVTlNJR05FRF9JTlQ2NF9MRSwgJzxRUVFRJywKKyAgICAgICAgICAgICBbMTw8NjMsICgxPDw2MyktMSwgMCwgKDE8PDY0KS0xXSksCisgICAgICAgICAgICAoWydMJ10sIFVOU0lHTkVEX0lOVDY0X0JFLCAnPlFRUVEnLAorICAgICAgICAgICAgIFsxPDw2MywgKDE8PDYzKS0xLCAwLCAoMTw8NjQpLTFdKSwKKyAgICAgICAgICAgIChbJ2wnXSwgU0lHTkVEX0lOVDY0X0xFLCAnPHFxcScsCisgICAgICAgICAgICAgWy0xPDw2MywgKDE8PDYzKS0xLCAwXSksCisgICAgICAgICAgICAoWydsJ10sIFNJR05FRF9JTlQ2NF9CRSwgJz5xcXEnLAorICAgICAgICAgICAgIFstMTw8NjMsICgxPDw2MyktMSwgMF0pLAorICAgICAgICAgICAgKFsnZiddLCBJRUVFXzc1NF9GTE9BVF9MRSwgJzxmZmZmJywKKyAgICAgICAgICAgICBbMTY3MTE5MzguMCwgZmxvYXQoJ2luZicpLCBmbG9hdCgnLWluZicpLCAtMC4wXSksCisgICAgICAgICAgICAoWydmJ10sIElFRUVfNzU0X0ZMT0FUX0JFLCAnPmZmZmYnLAorICAgICAgICAgICAgIFsxNjcxMTkzOC4wLCBmbG9hdCgnaW5mJyksIGZsb2F0KCctaW5mJyksIC0wLjBdKSwKKyAgICAgICAgICAgIChbJ2QnXSwgSUVFRV83NTRfRE9VQkxFX0xFLCAnPGRkZGQnLAorICAgICAgICAgICAgIFs5MDA2MTA0MDcxODMyNTgxLjAsIGZsb2F0KCdpbmYnKSwgZmxvYXQoJy1pbmYnKSwgLTAuMF0pLAorICAgICAgICAgICAgKFsnZCddLCBJRUVFXzc1NF9ET1VCTEVfQkUsICc+ZGRkZCcsCisgICAgICAgICAgICAgWzkwMDYxMDQwNzE4MzI1ODEuMCwgZmxvYXQoJ2luZicpLCBmbG9hdCgnLWluZicpLCAtMC4wXSkKKyAgICAgICAgKQorICAgICAgICBmb3IgdGVzdGNhc2UgaW4gdGVzdGNhc2VzOgorICAgICAgICAgICAgdmFsaWRfdHlwZWNvZGVzLCBtZm9ybWF0X2NvZGUsIHN0cnVjdF9mbXQsIHZhbHVlcyA9IHRlc3RjYXNlCisgICAgICAgICAgICBhcnJheXN0ciA9IHN0cnVjdC5wYWNrKHN0cnVjdF9mbXQsICp2YWx1ZXMpCisgICAgICAgICAgICBmb3IgdHlwZWNvZGUgaW4gdmFsaWRfdHlwZWNvZGVzOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHR5cGVjb2RlLCB2YWx1ZXMpCisgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIFNraXAgdGhpcyB0ZXN0IGNhc2UuCisgICAgICAgICAgICAgICAgYiA9IGFycmF5X3JlY29uc3RydWN0b3IoCisgICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5LCB0eXBlY29kZSwgbWZvcm1hdF9jb2RlLCBhcnJheXN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIsCisgICAgICAgICAgICAgICAgICAgIG1zZz0iezAhcn0gIT0gezEhcn07IHRlc3RjYXNlPXsyIXJ9Ii5mb3JtYXQoYSwgYiwgdGVzdGNhc2UpKQorCisgICAgZGVmIHRlc3RfdW5pY29kZShzZWxmKToKKyAgICAgICAgdGVzdHN0ciA9ICJCb25uZSBKb3Vyblx4ZTllIFxVMDAwMjAzMGFcVTAwMDIwMzQ3IgorICAgICAgICB0ZXN0Y2FzZXMgPSAoCisgICAgICAgICAgICAoVVRGMTZfTEUsICJVVEYtMTYtTEUiKSwKKyAgICAgICAgICAgIChVVEYxNl9CRSwgIlVURi0xNi1CRSIpLAorICAgICAgICAgICAgKFVURjMyX0xFLCAiVVRGLTMyLUxFIiksCisgICAgICAgICAgICAoVVRGMzJfQkUsICJVVEYtMzItQkUiKQorICAgICAgICApCisgICAgICAgIGZvciB0ZXN0Y2FzZSBpbiB0ZXN0Y2FzZXM6CisgICAgICAgICAgICBtZm9ybWF0X2NvZGUsIGVuY29kaW5nID0gdGVzdGNhc2UKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheSgndScsIHRlc3RzdHIpCisgICAgICAgICAgICBiID0gYXJyYXlfcmVjb25zdHJ1Y3RvcigKKyAgICAgICAgICAgICAgICBhcnJheS5hcnJheSwgJ3UnLCBtZm9ybWF0X2NvZGUsIHRlc3RzdHIuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYiwKKyAgICAgICAgICAgICAgICBtc2c9InswIXJ9ICE9IHsxIXJ9OyB0ZXN0Y2FzZT17MiFyfSIuZm9ybWF0KGEsIGIsIHRlc3RjYXNlKSkKKworCit0ZXN0cy5hcHBlbmQoQXJyYXlSZWNvbnN0cnVjdG9yVGVzdCkKKworCiBjbGFzcyBCYXNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBSZXF1aXJlZCBjbGFzcyBhdHRyaWJ1dGVzIChwcm92aWRlZCBieSBzdWJjbGFzc2VzCiAgICAgIyB0eXBlY29kZTogdGhlIHR5cGVjb2RlIHRvIHRlc3QKQEAgLTY0LDEwICsyMDIsMTAgQEAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLmJ1ZmZlcl9pbmZvLCA0MikKICAgICAgICAgYmkgPSBhLmJ1ZmZlcl9pbmZvKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYmksIHR1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpLCB0dXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmkpLCAyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiaVswXSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYmlbMV0sIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaVswXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmlbMV0sIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaVsxXSwgbGVuKGEpKQogCiAgICAgZGVmIHRlc3RfYnl0ZXN3YXAoc2VsZik6CkBAIC05NywzMSArMjM1LDM4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCiAKKyAgICBkZWYgdGVzdF9yZWR1Y2VfZXgoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZSgzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYS5fX3JlZHVjZV9leF9fKHByb3RvY29sKVswXSwgYXJyYXkuYXJyYXkpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZSgzLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGEuX19yZWR1Y2VfZXhfXyhwcm90b2NvbClbMF0sIGFycmF5X3JlY29uc3RydWN0b3IpCisKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6Ci0gICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKLSAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBiID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhLCBwcm90b2NvbCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKIAogICAgICAgICAgICAgYSA9IEFycmF5U3ViY2xhc3Moc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQogICAgICAgICAgICAgYS54ID0gMTAKLSAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBiID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhLCBwcm90b2NvbCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCBiLngpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCiAKICAgICBkZWYgdGVzdF9waWNrbGVfZm9yX2VtcHR5X2FycmF5KHNlbGYpOgotICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UoSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQotICAgICAgICAgICAgYiA9IGxvYWRzKGR1bXBzKGEsIHByb3RvY29sKSkKKyAgICAgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEsIHByb3RvY29sKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQogCiAgICAgICAgICAgICBhID0gQXJyYXlTdWJjbGFzcyhzZWxmLnR5cGVjb2RlKQogICAgICAgICAgICAgYS54ID0gMTAKLSAgICAgICAgICAgIGIgPSBsb2FkcyhkdW1wcyhhLCBwcm90b2NvbCkpCisgICAgICAgICAgICBiID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhLCBwcm90b2NvbCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS54LCBiLngpCkBAIC0xOTMsNiArMzM4LDI1IEBACiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCisgICAgZGVmIHRlc3RfZmlsZXdyaXRlKHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGEpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQorICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICdyYicpCisgICAgICAgICAgICBiLmZyb21maWxlKGYsIGxlbihzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgYi5mcm9tZmlsZShmLCBsZW4oc2VsZi5leGFtcGxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKICAgICBkZWYgdGVzdF90b2Zyb21saXN0KHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCiAgICAgICAgIGIgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQpAQCAtMjA0LDE1ICszNjgsNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQogCiAgICAgZGVmIHRlc3RfdG9mcm9tc3RyaW5nKHNlbGYpOgorICAgICAgICBuYl93YXJuaW5ncyA9IDQKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgcjoKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1yIih0b3xmcm9tKXN0cmluZ1woXCkgaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgMipzZWxmLmV4YW1wbGUpCisgICAgICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS50b3N0cmluZywgNDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbXN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tc3RyaW5nLCA0MikKKyAgICAgICAgICAgIGIuZnJvbXN0cmluZyhhLnRvc3RyaW5nKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBpZiBhLml0ZW1zaXplPjE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5mcm9tc3RyaW5nLCAieCIpCisgICAgICAgICAgICAgICAgbmJfd2FybmluZ3MgKz0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyKSwgbmJfd2FybmluZ3MpCisKKyAgICBkZWYgdGVzdF90b2Zyb21ieXRlcyhzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIDIqc2VsZi5leGFtcGxlKQogICAgICAgICBiID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnRvc3RyaW5nLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiLmZyb21zdHJpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYi5mcm9tc3RyaW5nLCA0MikKLSAgICAgICAgYi5mcm9tc3RyaW5nKGEudG9zdHJpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhLnRvYnl0ZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbWJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGIuZnJvbWJ5dGVzLCA0MikKKyAgICAgICAgYi5mcm9tYnl0ZXMoYS50b2J5dGVzKCkpCisgICAgICAgIGMgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBieXRlYXJyYXkoYS50b2J5dGVzKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYykKICAgICAgICAgaWYgYS5pdGVtc2l6ZT4xOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5mcm9tc3RyaW5nLCAieCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLmZyb21ieXRlcywgYiJ4IikKKworICAgIGRlZiB0ZXN0X2Zyb21hcnJheShzZWxmKToKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAyKnNlbGYuZXhhbXBsZSkKQEAgLTMyMCw2ICs1MDksMTIgQEAKICAgICAgICAgICAgIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUpCiAgICAgICAgICkKIAorICAgICAgICBhID0gNSAqIGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZVs6MV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBhLAorICAgICAgICAgICAgYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgW2FbMF1dICogNSkKKyAgICAgICAgKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYS5fX211bF9fLCAiYmFkIikKIAogICAgIGRlZiB0ZXN0X2ltdWwoc2VsZik6CkBAIC03MzUsOCArOTMwLDggQEAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKICAgICAgICAgbSA9IG1lbW9yeXZpZXcoYSkKICAgICAgICAgZXhwZWN0ZWQgPSBtLnRvYnl0ZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudG9zdHJpbmcoKSwgZXhwZWN0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS50b3N0cmluZygpWzBdLCBleHBlY3RlZFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnRvYnl0ZXMoKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS50b2J5dGVzKClbMF0sIGV4cGVjdGVkWzBdKQogICAgICAgICAjIFJlc2l6aW5nIGlzIGZvcmJpZGRlbiB3aGVuIHRoZXJlIGFyZSBidWZmZXIgZXhwb3J0cy4KICAgICAgICAgIyBGb3IgaXNzdWUgNDUwOSwgd2UgYWxzbyBjaGVjayBhZnRlciBlYWNoIGVycm9yIHRoYXQKICAgICAgICAgIyB0aGUgYXJyYXkgd2FzIG5vdCBtb2RpZmllZC4KQEAgLTc1MCw3ICs5NDUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0udG9ieXRlcygpLCBleHBlY3RlZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGEuZnJvbWxpc3QsIGEudG9saXN0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50b2J5dGVzKCksIGV4cGVjdGVkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgYS5mcm9tc3RyaW5nLCBhLnRvc3RyaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBhLmZyb21ieXRlcywgYS50b2J5dGVzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS50b2J5dGVzKCksIGV4cGVjdGVkKQogICAgICAgICBpZiBzZWxmLnR5cGVjb2RlID09ICd1JzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBhLmZyb211bmljb2RlLCBhLnRvdW5pY29kZSgpKQpAQCAtNzY4LDggKzk2Myw4IEBACiAKICAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgogICAgICAgICBzID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgc2VsZi5leGFtcGxlKQotICAgICAgICBwID0gcHJveHkocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnRvc3RyaW5nKCksIHMudG9zdHJpbmcoKSkKKyAgICAgICAgcCA9IHdlYWtyZWYucHJveHkocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnRvYnl0ZXMoKSwgcy50b2J5dGVzKCkpCiAgICAgICAgIHMgPSBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJlZmVyZW5jZUVycm9yLCBsZW4sIHApCiAKQEAgLTkyMyw2ICsxMTE4LDExIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGEsICJjb2xvciIsICJibHVlIikKIAorICAgIGRlZiB0ZXN0X2Zyb21ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGEgPSBhcnJheS5hcnJheSgnYicsIHJhbmdlKDEwKSkKKyAgICAgICAgYiA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKwogY2xhc3MgU2lnbmVkTnVtYmVyVGVzdChOdW1iZXJUZXN0KToKICAgICBleGFtcGxlID0gWy0xLCAwLCAxLCA0MiwgMHg3Zl0KICAgICBzbWFsbGVyZXhhbXBsZSA9IFstMSwgMCwgMSwgNDIsIDB4N2VdCkBAIC05NDcsNiArMTE0NywyMyBAQAogICAgICAgICB1cHBlciA9IGludChwb3coMiwgYS5pdGVtc2l6ZSAqIDgpKSAtIDEKICAgICAgICAgc2VsZi5jaGVja19vdmVyZmxvdyhsb3dlciwgdXBwZXIpCiAKKyAgICBkZWYgdGVzdF9ieXRlc19leHRlbmQoc2VsZik6CisgICAgICAgIHMgPSBieXRlcyhzZWxmLmV4YW1wbGUpCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5leHRlbmQocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUrc2VsZi5leGFtcGxlKQorICAgICAgICApCisKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKKyAgICAgICAgYS5leHRlbmQoYnl0ZWFycmF5KHJldmVyc2VkKHMpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGEsCisgICAgICAgICAgICBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUrc2VsZi5leGFtcGxlWzo6LTFdKQorICAgICAgICApCisKIAogY2xhc3MgQnl0ZVRlc3QoU2lnbmVkTnVtYmVyVGVzdCk6CiAgICAgdHlwZWNvZGUgPSAnYicKQEAgLTEwMDksNyArMTIyNiw3IEBACiAgICAgICAgICAgICAgICAgIyBPbiBhbHBoYXMgdHJlYXRpbmcgdGhlIGJ5dGUgc3dhcHBlZCBiaXQgcGF0dGVycyBhcwogICAgICAgICAgICAgICAgICMgZmxvYXRzL2RvdWJsZXMgcmVzdWx0cyBpbiBmbG9hdGluZyBwb2ludCBleGNlcHRpb25zCiAgICAgICAgICAgICAgICAgIyA9PiBjb21wYXJlIHRoZSA4Yml0IHN0cmluZyB2YWx1ZXMgaW5zdGVhZAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYS50b3N0cmluZygpLCBiLnRvc3RyaW5nKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhLnRvYnl0ZXMoKSwgYi50b2J5dGVzKCkpCiAgICAgICAgICAgICBiLmJ5dGVzd2FwKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5IGIvTGliL3Rlc3QvdGVzdF9hc2NpaV9mb3JtYXRkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWQ4NjA4Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfYXNjaWlfZm9ybWF0ZC5weQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSMgUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQgYW5kIG5vdCBjYWxsZWQgZnJvbSBhbnl3aGVyZSBpbgotIyAgUHl0aG9uIGl0c2VsZi4gU28gdGhpcyBtb2R1bGUgaXMgdGhlIG9ubHkgcGxhY2UgaXQgZ2V0cyB0ZXN0ZWQuCi0jIFRlc3QgdGhhdCBpdCB3b3JrcywgYW5kIHRlc3QgdGhhdCBpdCdzIGRlcHJlY2F0ZWQuCi0KLWltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIGNweXRob25fb25seSwgaW1wb3J0X21vZHVsZQotCi1pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQotCi1jbGFzcyBGb3JtYXREZXByZWNhdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIEBjcHl0aG9uX29ubHkKLSAgICBkZWYgdGVzdEZvcm1hdERlcHJlY2F0aW9uKHNlbGYpOgotICAgICAgICAjIGRlbGF5IGltcG9ydGluZyBjdHlwZXMgdW50aWwgd2Uga25vdyB3ZSdyZSBpbiBDUHl0aG9uCi0gICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCAocHl0aG9uYXBpLCBjcmVhdGVfc3RyaW5nX2J1ZmZlciwgc2l6ZW9mLCBieXJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2RvdWJsZSkKLSAgICAgICAgUHlPU19hc2NpaV9mb3JtYXRkID0gcHl0aG9uYXBpLlB5T1NfYXNjaWlfZm9ybWF0ZAotICAgICAgICBidWYgPSBjcmVhdGVfc3RyaW5nX2J1ZmZlcigxMDApCi0KLSAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnlyZWYoYnVmKSwgc2l6ZW9mKGJ1ZiksIGInJSsuMTBmJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjX2RvdWJsZSgxMC4wKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCBiJysxMC4wMDAwMDAwMDAwJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lm1lc3NhZ2UpLCAnUHlPU19hc2NpaV9mb3JtYXRkIGlzIGRlcHJlY2F0ZWQsICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAndXNlIFB5T1NfZG91YmxlX3RvX3N0cmluZyBpbnN0ZWFkJykKLQotY2xhc3MgRm9ybWF0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgZW5zdXJlIHRoYXQsIGZvciB0aGUgcmVzdHJpY3RlZCBzZXQgb2YgZm9ybWF0IGNvZGVzLAotICAgICMgJS1mb3JtYXR0aW5nIHJldHVybnMgdGhlIHNhbWUgdmFsdWVzIG9zIFB5T1NfYXNjaWlfZm9ybWF0ZAotICAgIEBjcHl0aG9uX29ubHkKLSAgICBkZWYgdGVzdEZvcm1hdChzZWxmKToKLSAgICAgICAgIyBkZWxheSBpbXBvcnRpbmcgY3R5cGVzIHVudGlsIHdlIGtub3cgd2UncmUgaW4gQ1B5dGhvbgotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgKHB5dGhvbmFwaSwgY3JlYXRlX3N0cmluZ19idWZmZXIsIHNpemVvZiwgYnlyZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY19kb3VibGUpCi0gICAgICAgIFB5T1NfYXNjaWlfZm9ybWF0ZCA9IHB5dGhvbmFwaS5QeU9TX2FzY2lpX2Zvcm1hdGQKLSAgICAgICAgYnVmID0gY3JlYXRlX3N0cmluZ19idWZmZXIoMTAwKQotCi0gICAgICAgIHRlc3RzID0gWwotICAgICAgICAgICAgKCclZicsIDEwMC4wKSwKLSAgICAgICAgICAgICgnJWcnLCAxMDAuMCksCi0gICAgICAgICAgICAoJyUjZycsIDEwMC4wKSwKLSAgICAgICAgICAgICgnJSMuMmcnLCAxMDAuMCksCi0gICAgICAgICAgICAoJyUjLjJnJywgMTIzLjQ1NjcpLAotICAgICAgICAgICAgKCclIy4yZycsIDEuMjM0NTY3ZTIwMCksCi0gICAgICAgICAgICAoJyVlJywgMS4yMzQ1NjdlMjAwKSwKLSAgICAgICAgICAgICgnJWUnLCAxLjIzNCksCi0gICAgICAgICAgICAoJyUrZScsIDEuMjM0KSwKLSAgICAgICAgICAgICgnJS1lJywgMS4yMzQpLAotICAgICAgICAgICAgXQotCi0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKToKLSAgICAgICAgICAgIGZvciBmb3JtYXQsIHZhbCBpbiB0ZXN0czoKLSAgICAgICAgICAgICAgICBQeU9TX2FzY2lpX2Zvcm1hdGQoYnlyZWYoYnVmKSwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKGZvcm1hdCwgJ2FzY2lpJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNfZG91YmxlKHZhbCkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsIGJ5dGVzKGZvcm1hdCAlIHZhbCwgJ2FzY2lpJykpCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChGb3JtYXREZXByZWNhdGlvblRlc3RzLCBGb3JtYXRUZXN0cykKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQppbmRleCBkZTE5YzhhLi5kYTA3MDYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtNjAsNiArNjAsMTAgQEAKICAgICAiYnJlYWsiLAogICAgICMgQ29udGludWUKICAgICAiY29udGludWUiLAorICAgICMgZm9yIHN0YXRlbWVudHMgd2l0aCBuYWtlZCB0dXBsZXMgKHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjcwNCkKKyAgICAiZm9yIGEsYiBpbiBjOiBwYXNzIiwKKyAgICAiWyhhLGIpIGZvciBhLGIgaW4gY10iLAorICAgICIoKGEsYikgZm9yIGEsYiBpbiBjKSIsCiBdCiAKICMgVGhlc2UgYXJlIGNvbXBpbGVkIHRocm91Z2ggInNpbmdsZSIKQEAgLTE0MCw2ICsxNDQsMTYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRvX3R1cGxlKGFzdF90cmVlKSwgbykKICAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRUcnVlb3JkZXIoYXN0X3RyZWUsICgwLCAwKSkKIAorICAgIGRlZiB0ZXN0X3NsaWNlKHNlbGYpOgorICAgICAgICBzbGMgPSBhc3QucGFyc2UoInhbOjpdIikuYm9keVswXS52YWx1ZS5zbGljZQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzbGMudXBwZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNsYy5sb3dlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2xjLnN0ZXApCisKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydChzZWxmKToKKyAgICAgICAgaW0gPSBhc3QucGFyc2UoImZyb20gLiBpbXBvcnQgeSIpLmJvZHlbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaW0ubW9kdWxlKQorCiAgICAgZGVmIHRlc3RfYmFzZV9jbGFzc2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhc3QuRm9yLCBhc3Quc3RtdCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKGFzdC5OYW1lLCBhc3QuZXhwcikpCkBAIC0xODYsMTIgKzIwMCw5IEBACiAgICAgZGVmIHRlc3RfaW52YWxpZF9zdW0oc2VsZik6CiAgICAgICAgIHBvcyA9IGRpY3QobGluZW5vPTIsIGNvbF9vZmZzZXQ9MykKICAgICAgICAgbSA9IGFzdC5Nb2R1bGUoW2FzdC5FeHByKGFzdC5leHByKCoqcG9zKSwgKipwb3MpXSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjb21waWxlKG0sICI8dGVzdD4iLCAiZXhlYyIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYnV0IGdvdCA8X2FzdC5leHByIiwgc3RyKGV4YykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIm5lZWRlZCBUeXBlRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEluKCJidXQgZ290IDxfYXN0LmV4cHIiLCBzdHIoY20uZXhjZXB0aW9uKSkKIAogCiBjbGFzcyBBU1RIZWxwZXJzX1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjg5LDEzICszMDAsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCdbMSwgMiwgM10nKSwgWzEsIDIsIDNdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJ3siZm9vIjogNDJ9JyksIHsiZm9vIjogNDJ9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJyhUcnVlLCBGYWxzZSwgTm9uZSknKSwgKFRydWUsIEZhbHNlLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCd7MSwgMiwgM30nKSwgezEsIDIsIDN9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJ2IiaGkiJyksIGIiaGkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3QubGl0ZXJhbF9ldmFsLCAnZm9vKCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJy02JyksIC02KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5saXRlcmFsX2V2YWwoJy02aiszJyksIDMtNmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMy4yNScpLCAzLjI1KQogCiAgICAgZGVmIHRlc3RfbGl0ZXJhbF9ldmFsX2lzc3VlNDkwNyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcyaicpLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3QubGl0ZXJhbF9ldmFsKCcxMCArIDJqJyksIDEwICsgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXN0LmxpdGVyYWxfZXZhbCgnMS41IC0gMmonKSwgMS41IC0gMmopCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGFzdC5saXRlcmFsX2V2YWwsICcyICsgKDMgKyA0aiknKQogCiAKIGRlZiB0ZXN0X21haW4oKToKQEAgLTMzNyw2ICszNTIsOSBAQAogKCdNb2R1bGUnLCBbKCdQYXNzJywgKDEsIDApKV0pLAogKCdNb2R1bGUnLCBbKCdCcmVhaycsICgxLCAwKSldKSwKICgnTW9kdWxlJywgWygnQ29udGludWUnLCAoMSwgMCkpXSksCisoJ01vZHVsZScsIFsoJ0ZvcicsICgxLCAwKSwgKCdUdXBsZScsICgxLCA0KSwgWygnTmFtZScsICgxLCA0KSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDYpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxMSksICdjJywgKCdMb2FkJywpKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10pXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnTGlzdENvbXAnLCAoMSwgMSksICgnVHVwbGUnLCAoMSwgMiksIFsoJ05hbWUnLCAoMSwgMiksICdhJywgKCdMb2FkJywpKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSldLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdUdXBsZScsICgxLCAxMSksIFsoJ05hbWUnLCAoMSwgMTEpLCAnYScsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTMpLCAnYicsICgnU3RvcmUnLCkpXSwgKCdTdG9yZScsKSksICgnTmFtZScsICgxLCAxOCksICdjJywgKCdMb2FkJywpKSwgW10pXSkpXSksCisoJ01vZHVsZScsIFsoJ0V4cHInLCAoMSwgMCksICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ1R1cGxlJywgKDEsIDIpLCBbKCdOYW1lJywgKDEsIDIpLCAnYScsICgnTG9hZCcsKSksICgnTmFtZScsICgxLCA0KSwgJ2InLCAoJ0xvYWQnLCkpXSwgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnVHVwbGUnLCAoMSwgMTEpLCBbKCdOYW1lJywgKDEsIDExKSwgJ2EnLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEzKSwgJ2InLCAoJ1N0b3JlJywpKV0sICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTgpLCAnYycsICgnTG9hZCcsKSksIFtdKV0pKV0pLAogXQogc2luZ2xlX3Jlc3VsdHMgPSBbCiAoJ0ludGVyYWN0aXZlJywgWygnRXhwcicsICgxLCAwKSwgKCdCaW5PcCcsICgxLCAwKSwgKCdOdW0nLCAoMSwgMCksIDEpLCAoJ0FkZCcsKSwgKCdOdW0nLCAoMSwgMiksIDIpKSldKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CmluZGV4IGY0OTcwMWYuLmM3OWZlNmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQpAQCAtNSw5OCArNSwxMDkgQEAKICMgSWYgdGhpcyBmYWlscywgdGhlIHRlc3Qgd2lsbCBiZSBza2lwcGVkLgogdGhyZWFkID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIAotaW1wb3J0IGFzeW5jb3JlLCBhc3luY2hhdCwgc29ja2V0LCB0aHJlYWRpbmcsIHRpbWUKK2ltcG9ydCBhc3luY29yZSwgYXN5bmNoYXQsIHNvY2tldCwgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogU0VSVkVSX1FVSVQgPSBiJ1FVSVRcbicKIAotY2xhc3MgZWNob19zZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6Ci0gICAgIyBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIGJhY2sgdG8gdGhlCi0gICAgIyBjbGllbnQgZWFjaCBzZW5kCi0gICAgY2h1bmtfc2l6ZSA9IDEKK2lmIHRocmVhZGluZzoKKyAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKKyAgICAgICAgIyBwYXJhbWV0ZXIgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYnl0ZXMgcGFzc2VkIGJhY2sgdG8gdGhlCisgICAgICAgICMgY2xpZW50IGVhY2ggc2VuZAorICAgICAgICBjaHVua19zaXplID0gMQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50KToKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmV2ZW50ID0gZXZlbnQKLSAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudCk6CisgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICBzZWxmLmV2ZW50ID0gZXZlbnQKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHNlbGYucG9ydCA9IHN1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgICAgICMgVGhpcyB3aWxsIGJlIHNldCBpZiB0aGUgY2xpZW50IHdhbnRzIHVzIHRvIHdhaXQgYmVmb3JlIGVjaG9pbmcgZGF0YQorICAgICAgICAgICAgIyBiYWNrLgorICAgICAgICAgICAgc2VsZi5zdGFydF9yZXNlbmRfZXZlbnQgPSBOb25lCiAKLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLnNvY2subGlzdGVuKDEpCi0gICAgICAgIHNlbGYuZXZlbnQuc2V0KCkKLSAgICAgICAgY29ubiwgY2xpZW50ID0gc2VsZi5zb2NrLmFjY2VwdCgpCi0gICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCi0gICAgICAgICMgY29sbGVjdCBkYXRhIHVudGlsIHF1aXQgbWVzc2FnZSBpcyBzZWVuCi0gICAgICAgIHdoaWxlIFNFUlZFUl9RVUlUIG5vdCBpbiBzZWxmLmJ1ZmZlcjoKLSAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoMSkKLSAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyICsgZGF0YQorICAgICAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrLmxpc3RlbigxKQorICAgICAgICAgICAgc2VsZi5ldmVudC5zZXQoKQorICAgICAgICAgICAgY29ubiwgY2xpZW50ID0gc2VsZi5zb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IGIiIgorICAgICAgICAgICAgIyBjb2xsZWN0IGRhdGEgdW50aWwgcXVpdCBtZXNzYWdlIGlzIHNlZW4KKyAgICAgICAgICAgIHdoaWxlIFNFUlZFUl9RVUlUIG5vdCBpbiBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlciArIGRhdGEKIAotICAgICAgICAjIHJlbW92ZSB0aGUgU0VSVkVSX1FVSVQgbWVzc2FnZQotICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyLnJlcGxhY2UoU0VSVkVSX1FVSVQsIGInJykKKyAgICAgICAgICAgICMgcmVtb3ZlIHRoZSBTRVJWRVJfUVVJVCBtZXNzYWdlCisgICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHNlbGYuYnVmZmVyLnJlcGxhY2UoU0VSVkVSX1FVSVQsIGInJykKIAotICAgICAgICAjIHJlLXNlbmQgZW50aXJlIHNldCBvZiBjb2xsZWN0ZWQgZGF0YQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwgc2luY2UKLSAgICAgICAgICAgICMgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNoYW5uZWwgd2hlbiBpdCdzIGRvbmUgc2VuZGluZwotICAgICAgICAgICAgd2hpbGUgc2VsZi5idWZmZXI6Ci0gICAgICAgICAgICAgICAgbiA9IGNvbm4uc2VuZChzZWxmLmJ1ZmZlcls6c2VsZi5jaHVua19zaXplXSkKLSAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQotICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gc2VsZi5idWZmZXJbbjpdCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50OgorICAgICAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50LndhaXQoKQogCi0gICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgIyByZS1zZW5kIGVudGlyZSBzZXQgb2YgY29sbGVjdGVkIGRhdGEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHRoaXMgbWF5IGZhaWwgb24gc29tZSB0ZXN0cywgc3VjaCBhcyB0ZXN0X2Nsb3NlX3doZW5fZG9uZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjaGFubmVsIHdoZW4gaXQncyBkb25lIHNlbmRpbmcKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxmLmJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvbm4uc2VuZChzZWxmLmJ1ZmZlcls6c2VsZi5jaHVua19zaXplXSkKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAwMSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBzZWxmLmJ1ZmZlcltuOl0KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCiAKLWNsYXNzIGVjaG9fY2xpZW50KGFzeW5jaGF0LmFzeW5jX2NoYXQpOgorICAgICAgICAgICAgY29ubi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlcm1pbmF0b3IsIHNlcnZlcl9wb3J0KToKLSAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLmNvbnRlbnRzID0gW10KLSAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuY29ubmVjdCgoSE9TVCwgc2VydmVyX3BvcnQpKQotICAgICAgICBzZWxmLnNldF90ZXJtaW5hdG9yKHRlcm1pbmF0b3IpCi0gICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCisgICAgY2xhc3MgZWNob19jbGllbnQoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CiAKLSAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlcm1pbmF0b3IsIHNlcnZlcl9wb3J0KToKKyAgICAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgIHNlbGYuY29udGVudHMgPSBbXQorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzZWxmLmNvbm5lY3QoKEhPU1QsIHNlcnZlcl9wb3J0KSkKKyAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IodGVybWluYXRvcikKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCiAKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgICMgc2VsZWN0LnBvbGwgcmV0dXJucyBhIHNlbGVjdC5QT0xMSFVQIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3RzCi0gICAgICAgICMgb24gZGFyd2luLCBzbyBqdXN0IGlnbm9yZSBpdAotICAgICAgICBkZWYgaGFuZGxlX2V4cHQoc2VsZik6Ci0gICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5idWZmZXIgKz0gZGF0YQorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgICAgICMgc2VsZWN0LnBvbGwgcmV0dXJucyBhIHNlbGVjdC5QT0xMSFVQIGF0IHRoZSBlbmQgb2YgdGhlIHRlc3RzCisgICAgICAgICAgICAgICAgIyBvbiBkYXJ3aW4sIHNvIGp1c3QgaWdub3JlIGl0CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgZm91bmRfdGVybWluYXRvcihzZWxmKToKLSAgICAgICAgc2VsZi5jb250ZW50cy5hcHBlbmQoc2VsZi5idWZmZXIpCi0gICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCisgICAgICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBzZWxmLmJ1ZmZlciArPSBkYXRhCisKKyAgICAgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CisgICAgICAgICAgICBzZWxmLmNvbnRlbnRzLmFwcGVuZChzZWxmLmJ1ZmZlcikKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYiIiCisKKyAgICBkZWYgc3RhcnRfZWNob19zZXJ2ZXIoKToKKyAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQorICAgICAgICBzID0gZWNob19zZXJ2ZXIoZXZlbnQpCisgICAgICAgIHMuc3RhcnQoKQorICAgICAgICBldmVudC53YWl0KCkKKyAgICAgICAgZXZlbnQuY2xlYXIoKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICMgR2l2ZSBzZXJ2ZXIgdGltZSB0byBzdGFydCBhY2NlcHRpbmcuCisgICAgICAgIHJldHVybiBzLCBldmVudAogCiAKLWRlZiBzdGFydF9lY2hvX3NlcnZlcigpOgotICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKLSAgICBzID0gZWNob19zZXJ2ZXIoZXZlbnQpCi0gICAgcy5zdGFydCgpCi0gICAgZXZlbnQud2FpdCgpCi0gICAgZXZlbnQuY2xlYXIoKQotICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KLSAgICByZXR1cm4gcywgZXZlbnQKLQotCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgVGVzdEFzeW5jaGF0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICB1c2Vwb2xsID0gRmFsc2UKIAogICAgIGRlZiBzZXRVcCAoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKIAogICAgIGRlZiB0ZWFyRG93biAoc2VsZik6Ci0gICAgICAgIHBhc3MKKyAgICAgICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiBsaW5lX3Rlcm1pbmF0b3JfY2hlY2soc2VsZiwgdGVybSwgc2VydmVyX2NodW5rKToKICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQpAQCAtMjAzLDExICsyMTQsMTggQEAKIAogICAgIGRlZiB0ZXN0X2Nsb3NlX3doZW5fZG9uZShzZWxmKToKICAgICAgICAgcywgZXZlbnQgPSBzdGFydF9lY2hvX3NlcnZlcigpCisgICAgICAgIHMuc3RhcnRfcmVzZW5kX2V2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgYyA9IGVjaG9fY2xpZW50KGInXG4nLCBzLnBvcnQpCiAgICAgICAgIGMucHVzaChiImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIikKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBjLmNsb3NlX3doZW5fZG9uZSgpCiAgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorCisgICAgICAgICMgT25seSBhbGxvdyB0aGUgc2VydmVyIHRvIHN0YXJ0IGVjaG9pbmcgZGF0YSBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIKKyAgICAgICAgIyB0aGUgY2xpZW50IGhhcyBjbG9zZWQgaXRzIGNvbm5lY3Rpb24uICBUaGlzIHByZXZlbnRzIGEgcmFjZSBjb25kaXRpb24KKyAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CisgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgorICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQogICAgICAgICBzLmpvaW4oKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQppbmRleCBmYzFkMTY2Li41M2M0OWE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKQEAgLTMsOSArMyw5IEBACiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgb3MKIGltcG9ydCBzb2NrZXQKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCitpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBlcnJubwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTEzLDYgKzEzLDExIEBACiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKKwogSE9TVCA9IHN1cHBvcnQuSE9TVAogCiBjbGFzcyBkdW1teXNvY2tldDoKQEAgLTExMyw2NSArMTE4LDY1IEBACiAgICAgIyBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tbGlzdC8yMDAxLU9jdG9iZXIvMTA5OTczLmh0bWwpCiAgICAgIyBUaGVzZSBjb25zdGFudHMgc2hvdWxkIGJlIHByZXNlbnQgYXMgbG9uZyBhcyBwb2xsIGlzIGF2YWlsYWJsZQogCi0gICAgaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6Ci0gICAgICAgIGRlZiB0ZXN0X3JlYWR3cml0ZShzZWxmKToKLSAgICAgICAgICAgICMgQ2hlY2sgdGhhdCBjb3JyZWN0IG1ldGhvZHMgYXJlIGNhbGxlZCBieSByZWFkd3JpdGUoKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpLCAnc2VsZWN0LnBvbGwgcmVxdWlyZWQnKQorICAgIGRlZiB0ZXN0X3JlYWR3cml0ZShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IGNvcnJlY3QgbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHJlYWR3cml0ZSgpCiAKLSAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSAoJ3JlYWQnLCAnZXhwdCcsICd3cml0ZScsICdjbG9zZWQnLCAnZXJyb3JfaGFuZGxlZCcpCisgICAgICAgIGF0dHJpYnV0ZXMgPSAoJ3JlYWQnLCAnZXhwdCcsICd3cml0ZScsICdjbG9zZWQnLCAnZXJyb3JfaGFuZGxlZCcpCiAKLSAgICAgICAgICAgIGV4cGVjdGVkID0gKAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTElOLCAncmVhZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTFBSSSwgJ2V4cHQnKSwKLSAgICAgICAgICAgICAgICAoc2VsZWN0LlBPTExPVVQsICd3cml0ZScpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTEVSUiwgJ2Nsb3NlZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTEhVUCwgJ2Nsb3NlZCcpLAotICAgICAgICAgICAgICAgIChzZWxlY3QuUE9MTE5WQUwsICdjbG9zZWQnKSwKLSAgICAgICAgICAgICAgICApCisgICAgICAgIGV4cGVjdGVkID0gKAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMSU4sICdyZWFkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExQUkksICdleHB0JyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExPVVQsICd3cml0ZScpLAorICAgICAgICAgICAgKHNlbGVjdC5QT0xMRVJSLCAnY2xvc2VkJyksCisgICAgICAgICAgICAoc2VsZWN0LlBPTExIVVAsICdjbG9zZWQnKSwKKyAgICAgICAgICAgIChzZWxlY3QuUE9MTE5WQUwsICdjbG9zZWQnKSwKKyAgICAgICAgICAgICkKIAotICAgICAgICAgICAgY2xhc3MgdGVzdG9iajoKLSAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUgPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IEZhbHNlCisgICAgICAgIGNsYXNzIHRlc3RvYmo6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5yZWFkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yX2hhbmRsZWQgPSBGYWxzZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkX2V2ZW50KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJlYWQgPSBUcnVlCisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5yZWFkID0gVHJ1ZQogCi0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGVfZXZlbnQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZXhwdF9ldmVudChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leHB0ID0gVHJ1ZQorICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0X2V2ZW50KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhwdCA9IFRydWUKIAotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JfaGFuZGxlZCA9IFRydWUKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcl9oYW5kbGVkID0gVHJ1ZQogCi0gICAgICAgICAgICBmb3IgZmxhZywgZXhwZWN0ZWRhdHRyIGluIGV4cGVjdGVkOgotICAgICAgICAgICAgICAgIHRvYmogPSB0ZXN0b2JqKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgZXhwZWN0ZWRhdHRyKSwgRmFsc2UpCi0gICAgICAgICAgICAgICAgYXN5bmNvcmUucmVhZHdyaXRlKHRvYmosIGZsYWcpCisgICAgICAgIGZvciBmbGFnLCBleHBlY3RlZGF0dHIgaW4gZXhwZWN0ZWQ6CisgICAgICAgICAgICB0b2JqID0gdGVzdG9iaigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIodG9iaiwgZXhwZWN0ZWRhdHRyKSwgRmFsc2UpCisgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodG9iaiwgZmxhZykKIAotICAgICAgICAgICAgICAgICMgT25seSB0aGUgYXR0cmlidXRlIG1vZGlmaWVkIGJ5IHRoZSByb3V0aW5lIHdlIGV4cGVjdCB0byBiZQotICAgICAgICAgICAgICAgICMgY2FsbGVkIHNob3VsZCBiZSBUcnVlLgotICAgICAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cih0b2JqLCBhdHRyKSwgYXR0cj09ZXhwZWN0ZWRhdHRyKQorICAgICAgICAgICAgIyBPbmx5IHRoZSBhdHRyaWJ1dGUgbW9kaWZpZWQgYnkgdGhlIHJvdXRpbmUgd2UgZXhwZWN0IHRvIGJlCisgICAgICAgICAgICAjIGNhbGxlZCBzaG91bGQgYmUgVHJ1ZS4KKyAgICAgICAgICAgIGZvciBhdHRyIGluIGF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHRvYmosIGF0dHIpLCBhdHRyPT1leHBlY3RlZGF0dHIpCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKLSAgICAgICAgICAgICAgICAjIGJ1YmJsZXMgYWxsIHRoZSB3YXkgdXAgdGhyb3VnaCBhc3luY29yZSByZWFkd3JpdGUgY2FsbAotICAgICAgICAgICAgICAgIHRyMSA9IGV4aXRpbmdkdW1teSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUucmVhZHdyaXRlLCB0cjEsIGZsYWcpCisgICAgICAgICAgICAjIGNoZWNrIHRoYXQgRXhpdE5vdyBleGNlcHRpb25zIGluIHRoZSBvYmplY3QgaGFuZGxlciBtZXRob2QKKyAgICAgICAgICAgICMgYnViYmxlcyBhbGwgdGhlIHdheSB1cCB0aHJvdWdoIGFzeW5jb3JlIHJlYWR3cml0ZSBjYWxsCisgICAgICAgICAgICB0cjEgPSBleGl0aW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNvcmUuRXhpdE5vdywgYXN5bmNvcmUucmVhZHdyaXRlLCB0cjEsIGZsYWcpCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gRXhpdE5vdyBpbiB0aGUgb2JqZWN0IGhhbmRsZXIKLSAgICAgICAgICAgICAgICAjIG1ldGhvZCBjYXVzZXMgdGhlIGhhbmRsZV9lcnJvciBtZXRob2QgdG8gZ2V0IGNhbGxlZAotICAgICAgICAgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIyLmVycm9yX2hhbmRsZWQsIEZhbHNlKQotICAgICAgICAgICAgICAgIGFzeW5jb3JlLnJlYWR3cml0ZSh0cjIsIGZsYWcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKKyAgICAgICAgICAgICMgY2hlY2sgdGhhdCBhbiBleGNlcHRpb24gb3RoZXIgdGhhbiBFeGl0Tm93IGluIHRoZSBvYmplY3QgaGFuZGxlcgorICAgICAgICAgICAgIyBtZXRob2QgY2F1c2VzIHRoZSBoYW5kbGVfZXJyb3IgbWV0aG9kIHRvIGdldCBjYWxsZWQKKyAgICAgICAgICAgIHRyMiA9IGNyYXNoaW5nZHVtbXkoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgRmFsc2UpCisgICAgICAgICAgICBhc3luY29yZS5yZWFkd3JpdGUodHIyLCBmbGFnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cjIuZXJyb3JfaGFuZGxlZCwgVHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2Nsb3NlYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlYWxsX2NoZWNrKEZhbHNlKQpAQCAtMjkxLDcgKzI5Niw2IEBACiAgICAgICAgICAgICBkLmhhbmRsZV9yZWFkKCkKICAgICAgICAgICAgIGQuaGFuZGxlX3dyaXRlKCkKICAgICAgICAgICAgIGQuaGFuZGxlX2Nvbm5lY3QoKQotICAgICAgICAgICAgZC5oYW5kbGVfYWNjZXB0KCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIApAQCAtMjk5LDIyICszMDMsMjUgQEAKICAgICAgICAgZXhwZWN0ZWQgPSBbJ3dhcm5pbmc6IHVuaGFuZGxlZCBpbmNvbWluZyBwcmlvcml0eSBldmVudCcsCiAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgcmVhZCBldmVudCcsCiAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgd3JpdGUgZXZlbnQnLAotICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIGNvbm5lY3QgZXZlbnQnLAotICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIGFjY2VwdCBldmVudCddCisgICAgICAgICAgICAgICAgICAgICd3YXJuaW5nOiB1bmhhbmRsZWQgY29ubmVjdCBldmVudCddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3RfaXNzdWVfODU5NChzZWxmKToKKyAgICAgICAgIyBYWFggLSB0aGlzIHRlc3QgaXMgc3VwcG9zZWQgdG8gYmUgcmVtb3ZlZCBpbiBuZXh0IG1ham9yIFB5dGhvbgorICAgICAgICAjIHZlcnNpb24KICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoc29ja2V0LnNvY2tldCgpKQogICAgICAgICAjIG1ha2Ugc3VyZSB0aGUgZXJyb3IgbWVzc2FnZSBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBzb2NrZXQKICAgICAgICAgIyBvYmplY3QgYnV0IHRoZSBkaXNwYXRjaGVyIGluc3RhbmNlIGluc3RlYWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZC5mb28KLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZGlzcGF0Y2hlciBpbnN0YW5jZScgaW4gc3RyKGVycikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKLSAgICAgICAgIyB0ZXN0IGNoZWFwIGluaGVyaXRhbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mYW1pbHksIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KEF0dHJpYnV0ZUVycm9yLCAnZGlzcGF0Y2hlciBpbnN0YW5jZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0ciwgZCwgJ2ZvbycpCisgICAgICAgICMgY2hlYXAgaW5oZXJpdGFuY2Ugd2l0aCB0aGUgdW5kZXJseWluZyBzb2NrZXQgaXMgc3VwcG9zZWQKKyAgICAgICAgIyB0byBzdGlsbCB3b3JrIGJ1dCBhIERlcHJlY2F0aW9uV2FybmluZyBpcyBleHBlY3RlZAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgZmFtaWx5ID0gZC5mYW1pbHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKSkKIAogICAgIGRlZiB0ZXN0X3N0cmVycm9yKHNlbGYpOgogICAgICAgICAjIHJlZmVycyB0byBidWcgIzg1NzMKQEAgLTMyMiw3ICszMjksNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnc3RyZXJyb3InKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBvcy5zdHJlcnJvcihlcnJuby5FUEVSTSkpCiAgICAgICAgIGVyciA9IGFzeW5jb3JlLl9zdHJlcnJvcigtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ1bmtub3duIGVycm9yIiBpbiBlcnIubG93ZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyciAhPSAiIikKIAogCiBjbGFzcyBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKGFzeW5jb3JlLmRpc3BhdGNoZXJfd2l0aF9zZW5kKToKQEAgLTM0MSw5OCArMzQ4LDQwMSBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgQHN1cHBvcnQucmVhcF90aHJlYWRzCiAgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKLSAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDMpCi0gICAgICAgIHNlbGYucG9ydCA9IHN1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaykKKyAgICAgICAgZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29jay5zZXR0aW1lb3V0KDMpCisgICAgICAgIHBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzb2NrKQogCiAgICAgICAgIGNhcCA9IEJ5dGVzSU8oKQotICAgICAgICBhcmdzID0gKHNlbGYuZXZ0LCBjYXAsIHNlbGYuc29jaykKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2FwdHVyZV9zZXJ2ZXIsIGFyZ3M9YXJncykuc3RhcnQoKQorICAgICAgICBhcmdzID0gKGV2dCwgY2FwLCBzb2NrKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2FwdHVyZV9zZXJ2ZXIsIGFyZ3M9YXJncykKKyAgICAgICAgdC5zdGFydCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgd2FpdCBhIGxpdHRsZSBsb25nZXIgZm9yIHRoZSBzZXJ2ZXIgdG8gaW5pdGlhbGl6ZSAoaXQgc29tZXRpbWVzCisgICAgICAgICAgICAjIHJlZnVzZXMgY29ubmVjdGlvbnMgb24gc2xvdyBtYWNoaW5lcyB3aXRob3V0IHRoaXMgd2FpdCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4yKQogCi0gICAgICAgICMgd2FpdCBhIGxpdHRsZSBsb25nZXIgZm9yIHRoZSBzZXJ2ZXIgdG8gaW5pdGlhbGl6ZSAoaXQgc29tZXRpbWVzCi0gICAgICAgICMgcmVmdXNlcyBjb25uZWN0aW9ucyBvbiBzbG93IG1hY2hpbmVzIHdpdGhvdXQgdGhpcyB3YWl0KQotICAgICAgICB0aW1lLnNsZWVwKDAuMikKKyAgICAgICAgICAgIGRhdGEgPSBiIlN1cHBvc2UgdGhlcmUgaXNuJ3QgYSAxNi10b24gd2VpZ2h0PyIKKyAgICAgICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKKyAgICAgICAgICAgIGQuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgZC5jb25uZWN0KChIT1NULCBwb3J0KSkKIAotICAgICAgICBkYXRhID0gYiJTdXBwb3NlIHRoZXJlIGlzbid0IGEgMTYtdG9uIHdlaWdodD8iCi0gICAgICAgIGQgPSBkaXNwYXRjaGVyd2l0aHNlbmRfbm9yZWFkKCkKLSAgICAgICAgZC5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGQuY29ubmVjdCgoSE9TVCwgc2VsZi5wb3J0KSkKKyAgICAgICAgICAgICMgZ2l2ZSB0aW1lIGZvciBzb2NrZXQgdG8gY29ubmVjdAorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAKLSAgICAgICAgIyBnaXZlIHRpbWUgZm9yIHNvY2tldCB0byBjb25uZWN0Ci0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgZC5zZW5kKGRhdGEpCisgICAgICAgICAgICBkLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGQuc2VuZChiJ1xuJykKIAotICAgICAgICBkLnNlbmQoZGF0YSkKLSAgICAgICAgZC5zZW5kKGRhdGEpCi0gICAgICAgIGQuc2VuZChiJ1xuJykKKyAgICAgICAgICAgIG4gPSAxMDAwCisgICAgICAgICAgICB3aGlsZSBkLm91dF9idWZmZXIgYW5kIG4gPiAwOgorICAgICAgICAgICAgICAgIGFzeW5jb3JlLnBvbGwoKQorICAgICAgICAgICAgICAgIG4gLT0gMQogCi0gICAgICAgIG4gPSAxMDAwCi0gICAgICAgIHdoaWxlIGQub3V0X2J1ZmZlciBhbmQgbiA+IDA6Ci0gICAgICAgICAgICBhc3luY29yZS5wb2xsKCkKLSAgICAgICAgICAgIG4gLT0gMQorICAgICAgICAgICAgZXZ0LndhaXQoKQogCi0gICAgICAgIHNlbGYuZXZ0LndhaXQoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQuam9pbigpCiAKIAogY2xhc3MgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbChEaXNwYXRjaGVyV2l0aFNlbmRUZXN0cyk6CiAgICAgdXNlcG9sbCA9IFRydWUKIAotaWYgaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfd3JhcHBlcicpOgotICAgIGNsYXNzIEZpbGVXcmFwcGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuZCA9IGIiSXQncyBub3QgZGVhZCwgaXQncyBzbGVlcGluZyEiCi0gICAgICAgICAgICBvcGVuKFRFU1RGTiwgJ3diJykud3JpdGUoc2VsZi5kKQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihhc3luY29yZSwgJ2ZpbGVfd3JhcHBlcicpLAorICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfd3JhcHBlciByZXF1aXJlZCcpCitjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kID0gYiJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgZmlsZToKKyAgICAgICAgICAgIGZpbGUud3JpdGUoc2VsZi5kKQogCi0gICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICB1bmxpbmsoVEVTVEZOKQogCi0gICAgICAgIGRlZiB0ZXN0X3JlY3Yoc2VsZik6Ci0gICAgICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKLSAgICAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCi0gICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICBkZWYgdGVzdF9yZWN2KHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgdyA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwody5mZCwgZmQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmlsZW5vKCksIGZkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlY3YoMTMpLCBiIkl0J3Mgbm90IGRlYWQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnJlYWQoNiksIGIiLCBpdCdzIikKLSAgICAgICAgICAgIHcuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdy5yZWFkLCAxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmQsIGZkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHcuZmlsZW5vKCksIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcucmVjdigxMyksIGIiSXQncyBub3QgZGVhZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5yZWFkKDYpLCBiIiwgaXQncyIpCisgICAgICAgIHcuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3LnJlYWQsIDEpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKLSAgICAgICAgICAgIGQxID0gYiJDb21lIGFnYWluPyIKLSAgICAgICAgICAgIGQyID0gYiJJIHdhbnQgdG8gYnV5IHNvbWUgY2hlZXNlLiIKLSAgICAgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCi0gICAgICAgICAgICB3ID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQotICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgZGVmIHRlc3Rfc2VuZChzZWxmKToKKyAgICAgICAgZDEgPSBiIkNvbWUgYWdhaW4/IgorICAgICAgICBkMiA9IGIiSSB3YW50IHRvIGJ1eSBzb21lIGNoZWVzZS4iCisgICAgICAgIGZkID0gb3Mub3BlbihURVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCisgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCisgICAgICAgIG9zLmNsb3NlKGZkKQogCi0gICAgICAgICAgICB3LndyaXRlKGQxKQotICAgICAgICAgICAgdy5zZW5kKGQyKQotICAgICAgICAgICAgdy5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW4oVEVTVEZOLCAncmInKS5yZWFkKCksIHNlbGYuZCArIGQxICsgZDIpCisgICAgICAgIHcud3JpdGUoZDEpCisgICAgICAgIHcuc2VuZChkMikKKyAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGUucmVhZCgpLCBzZWxmLmQgKyBkMSArIGQyKQogCi0gICAgICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoYXN5bmNvcmUsICdmaWxlX2Rpc3BhdGNoZXInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICBhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIgcmVxdWlyZWQnKQotICAgICAgICBkZWYgdGVzdF9kaXNwYXRjaGVyKHNlbGYpOgotICAgICAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCi0gICAgICAgICAgICBkYXRhID0gW10KLSAgICAgICAgICAgIGNsYXNzIEZpbGVEaXNwYXRjaGVyKGFzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlcik6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICBkYXRhLmFwcGVuZChzZWxmLnJlY3YoMjkpKQotICAgICAgICAgICAgcyA9IEZpbGVEaXNwYXRjaGVyKGZkKQotICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgdXNlX3BvbGw9VHJ1ZSwgY291bnQ9MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYiIiLmpvaW4oZGF0YSksIHNlbGYuZCkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV9kaXNwYXRjaGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciByZXF1aXJlZCcpCisgICAgZGVmIHRlc3RfZGlzcGF0Y2hlcihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGRhdGEgPSBbXQorICAgICAgICBjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAgICAgICAgIGRhdGEuYXBwZW5kKHNlbGYucmVjdigyOSkpCisgICAgICAgIHMgPSBGaWxlRGlzcGF0Y2hlcihmZCkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCB1c2VfcG9sbD1UcnVlLCBjb3VudD0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiIi5qb2luKGRhdGEpLCBzZWxmLmQpCisKKworY2xhc3MgQmFzZVRlc3RIYW5kbGVyKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2s9Tm9uZSk6CisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgc29jaykKKyAgICAgICAgc2VsZi5mbGFnID0gRmFsc2UKKworICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9hY2NlcHQgbm90IHN1cHBvc2VkIHRvIGJlIGNhbGxlZCIpCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oImhhbmRsZV9hY2NlcHRlZCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfY29ubmVjdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfZXhwdChzZWxmKToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJoYW5kbGVfZXhwdCBub3Qgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIikKKworICAgIGRlZiBoYW5kbGVfY2xvc2Uoc2VsZik6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiaGFuZGxlX2Nsb3NlIG5vdCBzdXBwb3NlZCB0byBiZSBjYWxsZWQiKQorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKworCitjbGFzcyBUQ1BTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CisgICAgIiIiQSBzZXJ2ZXIgd2hpY2ggbGlzdGVucyBvbiBhbiBhZGRyZXNzIGFuZCBkaXNwYXRjaGVzIHRoZQorICAgIGNvbm5lY3Rpb24gdG8gYSBoYW5kbGVyLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZXI9QmFzZVRlc3RIYW5kbGVyLCBob3N0PUhPU1QsIHBvcnQ9MCk6CisgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICBzZWxmLmJpbmQoKGhvc3QsIHBvcnQpKQorICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICBzZWxmLmhhbmRsZXIgPSBoYW5kbGVyCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIHNvY2ssIGFkZHIpOgorICAgICAgICBzZWxmLmhhbmRsZXIoc29jaykKKworICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKKworY2xhc3MgQmFzZUNsaWVudChCYXNlVGVzdEhhbmRsZXIpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBCYXNlVGVzdEhhbmRsZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuY29ubmVjdChhZGRyZXNzKQorCisgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgQmFzZVRlc3RBUEkodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBhc3luY29yZS5jbG9zZV9hbGwoKQorCisgICAgZGVmIGxvb3Bfd2FpdGluZ19mb3JfZmxhZyhzZWxmLCBpbnN0YW5jZSwgdGltZW91dD01KToKKyAgICAgICAgdGltZW91dCA9IGZsb2F0KHRpbWVvdXQpIC8gMTAwCisgICAgICAgIGNvdW50ID0gMTAwCisgICAgICAgIHdoaWxlIGFzeW5jb3JlLnNvY2tldF9tYXAgYW5kIGNvdW50ID4gMDoKKyAgICAgICAgICAgIGFzeW5jb3JlLmxvb3AodGltZW91dD0wLjAxLCBjb3VudD0xLCB1c2VfcG9sbD1zZWxmLnVzZV9wb2xsKQorICAgICAgICAgICAgaWYgaW5zdGFuY2UuZmxhZzoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGNvdW50IC09IDEKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCkKKyAgICAgICAgc2VsZi5mYWlsKCJmbGFnIG5vdCBzZXQiKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICMgbWFrZSBzdXJlIGhhbmRsZV9jb25uZWN0IGlzIGNhbGxlZCBvbiBjb25uZWN0KCkKKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfYWNjZXB0KCkgaXMgY2FsbGVkIHdoZW4gYSBjbGllbnQgY29ubmVjdHMKKworICAgICAgICBjbGFzcyBUZXN0TGlzdGVuZXIoQmFzZVRlc3RIYW5kbGVyKToKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmKQorICAgICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3NvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgICAgIHNlbGYuYmluZCgoSE9TVCwgMCkpCisgICAgICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFkZHJlc3MgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZsYWcgPSBUcnVlCisKKyAgICAgICAgc2VydmVyID0gVGVzdExpc3RlbmVyKCkKKyAgICAgICAgY2xpZW50ID0gQmFzZUNsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoc2VydmVyKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2FjY2VwdGVkKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfYWNjZXB0ZWQoKSBpcyBjYWxsZWQgd2hlbiBhIGNsaWVudCBjb25uZWN0cworCisgICAgICAgIGNsYXNzIFRlc3RMaXN0ZW5lcihCYXNlVGVzdEhhbmRsZXIpOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICAgICAgc2VsZi5iaW5kKChIT1NULCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmxpc3Rlbig1KQorICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0KHNlbGYpOgorICAgICAgICAgICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuaGFuZGxlX2FjY2VwdChzZWxmKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIHNvY2ssIGFkZHIpOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBzZXJ2ZXIgPSBUZXN0TGlzdGVuZXIoKQorICAgICAgICBjbGllbnQgPSBCYXNlQ2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhzZXJ2ZXIpCisKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZWFkKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfcmVhZCBpcyBjYWxsZWQgb24gZGF0YSByZWNlaXZlZAorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyKEJhc2VUZXN0SGFuZGxlcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY29ubik6CisgICAgICAgICAgICAgICAgQmFzZVRlc3RIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgICAgICAgICAgICAgc2VsZi5zZW5kKGIneCcgKiAxMDI0KQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBoYW5kbGVfd3JpdGUgaXMgY2FsbGVkCisKKyAgICAgICAgY2xhc3MgVGVzdENsaWVudChCYXNlQ2xpZW50KToKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IFRlc3RDbGllbnQoc2VydmVyLmFkZHJlc3MpCisgICAgICAgIHNlbGYubG9vcF93YWl0aW5nX2Zvcl9mbGFnKGNsaWVudCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9jbG9zZShzZWxmKToKKyAgICAgICAgIyBtYWtlIHN1cmUgaGFuZGxlX2Nsb3NlIGlzIGNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgICMgdGhlIGNvbm5lY3Rpb24KKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorCisgICAgICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICAgICAgIyBpbiBvcmRlciB0byBtYWtlIGhhbmRsZV9jbG9zZSBiZSBjYWxsZWQgd2UgYXJlIHN1cHBvc2VkCisgICAgICAgICAgICAgICAgIyB0byBtYWtlIGF0IGxlYXN0IG9uZSByZWN2KCkgY2FsbAorICAgICAgICAgICAgICAgIHNlbGYucmVjdigxMDI0KQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgICAgICBjbGFzcyBUZXN0SGFuZGxlcihCYXNlVGVzdEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgic3Vub3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICJPT0Igc3VwcG9ydCBpcyBicm9rZW4gb24gU29sYXJpcyIpCisgICAgZGVmIHRlc3RfaGFuZGxlX2V4cHQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIGhhbmRsZV9leHB0IGlzIGNhbGxlZCBvbiBPT0IgZGF0YSByZWNlaXZlZC4KKyAgICAgICAgIyBOb3RlOiB0aGlzIG1pZ2h0IGZhaWwgb24gc29tZSBwbGF0Zm9ybXMgYXMgT09CIGRhdGEgaXMKKyAgICAgICAgIyB0ZW51b3VzbHkgc3VwcG9ydGVkIGFuZCByYXJlbHkgdXNlZC4KKworICAgICAgICBjbGFzcyBUZXN0Q2xpZW50KEJhc2VDbGllbnQpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9leHB0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZmxhZyA9IFRydWUKKworICAgICAgICBjbGFzcyBUZXN0SGFuZGxlcihCYXNlVGVzdEhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgorICAgICAgICAgICAgICAgIEJhc2VUZXN0SGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmQoYnl0ZXMoY2hyKDI0NCksICdsYXRpbi0xJyksIHNvY2tldC5NU0dfT09CKQorCisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcihUZXN0SGFuZGxlcikKKyAgICAgICAgY2xpZW50ID0gVGVzdENsaWVudChzZXJ2ZXIuYWRkcmVzcykKKyAgICAgICAgc2VsZi5sb29wX3dhaXRpbmdfZm9yX2ZsYWcoY2xpZW50KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX2Vycm9yKHNlbGYpOgorCisgICAgICAgIGNsYXNzIFRlc3RDbGllbnQoQmFzZUNsaWVudCk6CisgICAgICAgICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgorICAgICAgICAgICAgICAgIDEuMCAvIDAKKyAgICAgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mbGFnID0gVHJ1ZQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKKworICAgICAgICBzZXJ2ZXIgPSBUQ1BTZXJ2ZXIoKQorICAgICAgICBjbGllbnQgPSBUZXN0Q2xpZW50KHNlcnZlci5hZGRyZXNzKQorICAgICAgICBzZWxmLmxvb3Bfd2FpdGluZ19mb3JfZmxhZyhjbGllbnQpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHNlcnZlciA9IFRDUFNlcnZlcigpCisgICAgICAgIGNsaWVudCA9IEJhc2VDbGllbnQoc2VydmVyLmFkZHJlc3MpCisKKyAgICAgICAgIyB3ZSBzdGFydCBkaXNjb25uZWN0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgIyB0aGlzIGNhbid0IGJlIHRha2VuIGZvciBncmFudGVkIGFjcm9zcyBhbGwgcGxhdGZvcm1zCisgICAgICAgICNzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIGV4ZWN1dGUgc29tZSBsb29wcyBzbyB0aGF0IGNsaWVudCBjb25uZWN0cyB0byBzZXJ2ZXIKKyAgICAgICAgYXN5bmNvcmUubG9vcCh0aW1lb3V0PTAuMDEsIHVzZV9wb2xsPXNlbGYudXNlX3BvbGwsIGNvdW50PTEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZXJ2ZXIuY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VydmVyLmFjY2VwdGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIGRpc2Nvbm5lY3QgdGhlIGNsaWVudAorICAgICAgICBjbGllbnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXJ2ZXIuYWNjZXB0aW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsaWVudC5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xpZW50LmFjY2VwdGluZykKKworICAgICAgICAjIHN0b3Agc2VydmluZworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcnZlci5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VydmVyLmFjY2VwdGluZykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zb2NrZXQoc2VsZik6CisgICAgICAgIHMgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKKyAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQuZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgU09DS19OT05CTE9DSyA9IGdldGF0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zb2NrZXQudHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNIHwgU09DS19OT05CTE9DSykKKworICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CisgICAgICAgIHMxID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCisgICAgICAgIHMxLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgczEuYmluZCgoSE9TVCwgMCkpCisgICAgICAgIHMxLmxpc3Rlbig1KQorICAgICAgICBwb3J0ID0gczEuc29ja2V0LmdldHNvY2tuYW1lKClbMV0KKworICAgICAgICBzMiA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQorICAgICAgICBzMi5jcmVhdGVfc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKEhPU1QsIHBvcnQpKQorCisgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCisgICAgICAgICAgICAjIHRvIGRvIHRoZSBzYW1lCisgICAgICAgICAgICBzID0gYXN5bmNvcmUuZGlzcGF0Y2hlcihzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgICAgICBzLnNvY2tldC5jbG9zZSgpCisgICAgICAgICAgICBzLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHMuc2V0X3JldXNlX2FkZHIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKworCitjbGFzcyBUZXN0QVBJX1VzZVNlbGVjdChCYXNlVGVzdEFQSSk6CisgICAgdXNlX3BvbGwgPSBGYWxzZQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKSwgJ3NlbGVjdC5wb2xsIHJlcXVpcmVkJykKK2NsYXNzIFRlc3RBUElfVXNlUG9sbChCYXNlVGVzdEFQSSk6CisgICAgdXNlX3BvbGwgPSBUcnVlCiAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW0hlbHBlckZ1bmN0aW9uVGVzdHMsIERpc3BhdGNoZXJUZXN0cywgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHMsCi0gICAgICAgICAgICAgRGlzcGF0Y2hlcldpdGhTZW5kVGVzdHNfVXNlUG9sbF0KLSAgICBpZiBoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV93cmFwcGVyJyk6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChGaWxlV3JhcHBlclRlc3QpCi0KKyAgICAgICAgICAgICBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsLCBUZXN0QVBJX1VzZVNlbGVjdCwKKyAgICAgICAgICAgICBUZXN0QVBJX1VzZVBvbGwsIEZpbGVXcmFwcGVyVGVzdF0KICAgICBydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQppbmRleCA4YTcxMDM2Li41MjAwYWY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQpAQCAtMjUsOCArMjUsOSBAQAogCiBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgICBzZWxmLnN0cmVhbSA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgc2VsZi5zYXZlX3N0ZG91dCwgc2VsZi5zYXZlX3N0ZGVyciA9IHN5cy5zdGRlcnIsIHN5cy5zdGRvdXQKICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIgPSBzZWxmLnN0cmVhbQogICAgICAgICBhdGV4aXQuX2NsZWFyKCkKIApAQCAtNjUsNiArNjYsMTQgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF0ZXhpdC5fcnVuX2V4aXRmdW5jcykKIAorICAgIGRlZiB0ZXN0X3JhaXNlX3Vubm9ybWFsaXplZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTA3NTY6IE1ha2Ugc3VyZSB0aGF0IGFuIHVubm9ybWFsaXplZCBleGNlcHRpb24gaXMKKyAgICAgICAgIyBoYW5kbGVkIHByb3Blcmx5CisgICAgICAgIGF0ZXhpdC5yZWdpc3RlcihsYW1iZGE6IDEgLyAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBhdGV4aXQuX3J1bl9leGl0ZnVuY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlplcm9EaXZpc2lvbkVycm9yIiwgc2VsZi5zdHJlYW0uZ2V0dmFsdWUoKSkKKwogICAgIGRlZiB0ZXN0X3N0cmVzcyhzZWxmKToKICAgICAgICAgYSA9IFswXQogICAgICAgICBkZWYgaW5jKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2F1Z2Fzc2lnbi5weSBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CmluZGV4IDYxMjY2NjcuLjlhNTljNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5CkBAIC04OCw3ICs4OCw3IEBACiAgICAgICAgIHkgPSB4CiAgICAgICAgIHggKz0gMTAKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh4LCBhdWdfdGVzdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgbm90IHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWwsIDExKQogCkBAIC0xMDMsNyArMTAzLDcgQEAKICAgICAgICAgeSA9IHgKICAgICAgICAgeCArPSAxMAogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIGF1Z190ZXN0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBhdWdfdGVzdDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIG5vdCB4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsLCAxMykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iYXNlNjQucHkgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQppbmRleCAzM2FhY2Q2Li45M2M2MjNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weQpAQCAtMTM4LDkgKzEzOCwyNSBAQAogICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoYicwMWEtYl9jZCcpLCBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlLCAiIikKIAotICAgIGRlZiB0ZXN0X2I2NGRlY29kZV9lcnJvcihzZWxmKToKKyAgICBkZWYgdGVzdF9iNjRkZWNvZGVfcGFkZGluZ19lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJhc2U2NC5iNjRkZWNvZGUsIGInYWJjJykKIAorICAgIGRlZiB0ZXN0X2I2NGRlY29kZV9pbnZhbGlkX2NoYXJzKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDE0NjYwNjU6IFRlc3Qgc29tZSBpbnZhbGlkIGNoYXJhY3RlcnMuCisgICAgICAgIHRlc3RzID0gKChiJyUzZD09JywgYidceGRkJyksCisgICAgICAgICAgICAgICAgIChiJyQzZD09JywgYidceGRkJyksCisgICAgICAgICAgICAgICAgIChiJ1s9PScsIGInJyksCisgICAgICAgICAgICAgICAgIChiJ1lXXTM9JywgYidhbScpLAorICAgICAgICAgICAgICAgICAoYicze2Q9PScsIGInXHhkZCcpLAorICAgICAgICAgICAgICAgICAoYiczZH09PScsIGInXHhkZCcpLAorICAgICAgICAgICAgICAgICAoYidAQCcsIGInJyksCisgICAgICAgICAgICAgICAgIChiJyEnLCBiJycpLAorICAgICAgICAgICAgICAgICAoYidZV0pqXG5ZV0k9JywgYidhYmNhYicpKQorICAgICAgICBmb3IgYnN0ciwgcmVzIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlNjQuYjY0ZGVjb2RlKGJzdHIpLCByZXMpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYjY0ZGVjb2RlKGJzdHIsIHZhbGlkYXRlPVRydWUpCisKICAgICBkZWYgdGVzdF9iMzJlbmNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInJyksIGInJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlnbWVtLnB5IGIvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKaW5kZXggYWVjMzc3OC4uYWM2YjEwOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaWdtZW0ucHkKQEAgLTUxOSwxMiArNTE5LDEyIEBACiAgICAgICAgIGVkZ2UgPSBfKCctJykgKiAoc2l6ZSAvLyAyKQogICAgICAgICBzID0gXygnJykuam9pbihbZWRnZSwgU1VCU1RSLCBlZGdlXSkKICAgICAgICAgZGVsIGVkZ2UKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFNVQlNUUiBpbiBzKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFNVQlNUUiAqIDIgaW4gcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF8oJy0nKSBpbiBzKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKF8oJ2EnKSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKFNVQlNUUiwgcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihTVUJTVFIgKiAyLCBzKQorICAgICAgICBzZWxmLmFzc2VydEluKF8oJy0nKSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihfKCdhJyksIHMpCiAgICAgICAgIHMgKz0gXygnYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfKCdhJykgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihfKCdhJyksIHMpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9MikKICAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYsIHNpemUpOgpAQCAtNjIyLDcgKzYyMiw3IEBACiAgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fNEcgLy8gNSwgbWVtdXNlPWNoYXJhY3Rlcl9zaXplICogKDYgKyAxKSkKICAgICBkZWYgdGVzdF91bmljb2RlX3JlcHJfb3ZlcmZsb3coc2VsZiwgc2l6ZSk6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSAiXHVBQUFBIipzaXplCisgICAgICAgICAgICBzID0gIlx1RENCQSIqc2l6ZQogICAgICAgICAgICAgciA9IHJlcHIocykKICAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgogICAgICAgICAgICAgcGFzcyAjIGFjY2VwdGFibGUgb24gMzItYml0CkBAIC02ODMsMjIgKzY4MywyNCBAQAogCiAgICAgQGJpZ21lbXRlc3QobWluc2l6ZT0yKiozMiAvIDUsIG1lbXVzZT1jaGFyYWN0ZXJfc2l6ZSAqIDcpCiAgICAgZGVmIHRlc3RfdW5pY29kZV9yZXByKHNlbGYsIHNpemUpOgotICAgICAgICBzID0gIlx1QUFBQSIgKiBzaXplCisgICAgICAgICMgVXNlIGFuIGFzc2lnbmVkLCBidXQgbm90IHByaW50YWJsZSBjb2RlIHBvaW50LgorICAgICAgICAjIEl0IGlzIGluIHRoZSByYW5nZSBvZiB0aGUgbG93IHN1cnJvZ2F0ZXMgXHVEQzAwLVx1REZGRi4KKyAgICAgICAgcyA9ICJcdURDQkEiICogc2l6ZQogICAgICAgICBmb3IgZiBpbiAocmVwciwgYXNjaWkpOgogICAgICAgICAgICAgciA9IGYocykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocikgPiBzaXplKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgociJcdWFhYWEnIiksIHJbLTEwOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoci5lbmRzd2l0aChyIlx1ZGNiYSciKSwgclstMTA6XSkKICAgICAgICAgICAgIGRlbCByCiAKICAgICAjIFRoZSBjaGFyYWN0ZXIgdGFrZXMgNCBieXRlcyBldmVuIGluIFVDUy0yIGJ1aWxkcyBiZWNhdXNlIGl0IHdpbGwKICAgICAjIGJlIGRlY29tcG9zZWQgaW50byBzdXJyb2dhdGVzLgogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9MioqMzIgLyA1LCBtZW11c2U9NCArIGNoYXJhY3Rlcl9zaXplICogOSkKICAgICBkZWYgdGVzdF91bmljb2RlX3JlcHJfd2lkZShzZWxmLCBzaXplKToKLSAgICAgICAgcyA9ICJcVTAwMDFBQUFBIiAqIHNpemUKKyAgICAgICAgcyA9ICJcVTAwMDFEQ0JBIiAqIHNpemUKICAgICAgICAgZm9yIGYgaW4gKHJlcHIsIGFzY2lpKToKICAgICAgICAgICAgIHIgPSBmKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKHIpID4gc2l6ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKHIiXFUwMDAxYWFhYSciKSwgclstMTI6XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLmVuZHN3aXRoKHIiXFUwMDAxZGNiYSciKSwgclstMTI6XSkKICAgICAgICAgICAgIGRlbCByCiAKIApAQCAtNzcyLDkgKzc3NCw5IEBACiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHQgPSAoMSwgMiwgMywgNCwgNSkgKiBzaXplCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBzaXplICogNSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDUgaW4gdCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMSwgMiwgMywgNCwgNSkgaW4gdCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgwIGluIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNSwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMiwgMywgNCwgNSksIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgdCkKIAogICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMTAsIG1lbXVzZT04KQogICAgIGRlZiB0ZXN0X2hhc2goc2VsZiwgc2l6ZSk6CkBAIC04MjMsNiArODI1LDcgQEAKIAogICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzFHIC0gMSwgbWVtdXNlPTkpCiAgICAgZGVmIHRlc3RfZnJvbV8yR19nZW5lcmF0b3Ioc2VsZiwgc2l6ZSk6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgbmVlZHMgbXVjaCBtb3JlIG1lbW9yeSB0aGFuIGFkdmVydGlzZWQsIHNlZSBpc3N1ZTU0MzgiKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0ID0gdHVwbGUocmFuZ2Uoc2l6ZSkpCiAgICAgICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKQEAgLTgzNiw2ICs4MzksNyBAQAogCiAgICAgQHByZWNpc2lvbmJpZ21lbXRlc3Qoc2l6ZT1fMUcgLSAyNSwgbWVtdXNlPTkpCiAgICAgZGVmIHRlc3RfZnJvbV9hbG1vc3RfMkdfZ2VuZXJhdG9yKHNlbGYsIHNpemUpOgorICAgICAgICBzZWxmLnNraXBUZXN0KCJ0ZXN0IG5lZWRzIG11Y2ggbW9yZSBtZW1vcnkgdGhhbiBhZHZlcnRpc2VkLCBzZWUgaXNzdWU1NDM4IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdCA9IHR1cGxlKHJhbmdlKHNpemUpKQogICAgICAgICAgICAgY291bnQgPSAwCkBAIC04NTYsMTEgKzg2MCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTU6XSwgJzAsIDApJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUpCiAKLSAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAzICsgMiwgbWVtdXNlPTggKyAzKQorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDMgKyAyLCBtZW11c2U9OCArIDMgKiBjaGFyYWN0ZXJfc2l6ZSkKICAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgogICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcHIoc2l6ZSkKIAotICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzKQorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzICogY2hhcmFjdGVyX3NpemUpCiAgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKICAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9yZXByKHNpemUpCiAKQEAgLTkyMSw5ICs5MjUsOSBAQAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYsIHNpemUpOgogICAgICAgICBsID0gWzEsIDIsIDMsIDQsIDVdICogc2l6ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgc2l6ZSAqIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg1IGluIGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoWzEsIDIsIDMsIDQsIDVdIGluIGwpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMCBpbiBsKQorICAgICAgICBzZWxmLmFzc2VydEluKDUsIGwpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oWzEsIDIsIDMsIDQsIDVdLCBsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIGwpCiAKICAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyArIDEwLCBtZW11c2U9OCkKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYsIHNpemUpOgpAQCAtMTAzMSwxMSArMTAzNSwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNbLTU6XSwgJzAsIDBdJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmNvdW50KCcwJyksIHNpemUpCiAKLSAgICBAYmlnbWVtdGVzdChtaW5zaXplPV8yRyAvLyAzICsgMiwgbWVtdXNlPTggKyAzKQorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHIC8vIDMgKyAyLCBtZW11c2U9OCArIDMgKiBjaGFyYWN0ZXJfc2l6ZSkKICAgICBkZWYgdGVzdF9yZXByX3NtYWxsKHNlbGYsIHNpemUpOgogICAgICAgICByZXR1cm4gc2VsZi5iYXNpY190ZXN0X3JlcHIoc2l6ZSkKIAotICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzKQorICAgIEBiaWdtZW10ZXN0KG1pbnNpemU9XzJHICsgMiwgbWVtdXNlPTggKyAzICogY2hhcmFjdGVyX3NpemUpCiAgICAgZGVmIHRlc3RfcmVwcl9sYXJnZShzZWxmLCBzaXplKToKICAgICAgICAgcmV0dXJuIHNlbGYuYmFzaWNfdGVzdF9yZXByKHNpemUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggYTM1ZWMwNS4uMWU5ZTg4OAotLS0gYS9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKQEAgLTMsMTQgKzMsMjcgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBhcnJheQorCisjIE5vdGU6ICIqX2hleCIgZnVuY3Rpb25zIGFyZSBhbGlhc2VzIGZvciAiKHVuKWhleGxpZnkiCitiMmFfZnVuY3Rpb25zID0gWydiMmFfYmFzZTY0JywgJ2IyYV9oZXgnLCAnYjJhX2hxeCcsICdiMmFfcXAnLCAnYjJhX3V1JywKKyAgICAgICAgICAgICAgICAgJ2hleGxpZnknLCAncmxlY29kZV9ocXgnXQorYTJiX2Z1bmN0aW9ucyA9IFsnYTJiX2Jhc2U2NCcsICdhMmJfaGV4JywgJ2EyYl9ocXgnLCAnYTJiX3FwJywgJ2EyYl91dScsCisgICAgICAgICAgICAgICAgICd1bmhleGxpZnknLCAncmxlZGVjb2RlX2hxeCddCithbGxfZnVuY3Rpb25zID0gYTJiX2Z1bmN0aW9ucyArIGIyYV9mdW5jdGlvbnMgKyBbJ2NyYzMyJywgJ2NyY19ocXgnXQorCiAKIGNsYXNzIEJpbkFTQ0lJVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICB0eXBlMnRlc3QgPSBieXRlcwogICAgICMgQ3JlYXRlIGJpbmFyeSB0ZXN0IGRhdGEKLSAgICBkYXRhID0gYiJUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nLlxyXG4iCisgICAgcmF3ZGF0YSA9IGIiVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cclxuIgogICAgICMgQmUgc2xvdyBzbyB3ZSBkb24ndCBkZXBlbmQgb24gb3RoZXIgbW9kdWxlcwotICAgIGRhdGEgKz0gYnl0ZXMocmFuZ2UoMjU2KSkKLSAgICBkYXRhICs9IGIiXHJcbkhlbGxvIHdvcmxkLlxuIgorICAgIHJhd2RhdGEgKz0gYnl0ZXMocmFuZ2UoMjU2KSkKKyAgICByYXdkYXRhICs9IGIiXHJcbkhlbGxvIHdvcmxkLlxuIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGEpCiAKICAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgogICAgICAgICAjIENoZWNrIG1vZHVsZSBleGNlcHRpb25zCkBAIC0xOSwzMiArMzIsNDcgQEAKIAogICAgIGRlZiB0ZXN0X2Z1bmN0aW9ucyhzZWxmKToKICAgICAgICAgIyBDaGVjayBwcmVzZW5jZSBvZiBhbGwgZnVuY3Rpb25zCi0gICAgICAgIGZ1bmNzID0gW10KLSAgICAgICAgZm9yIHN1ZmZpeCBpbiAiYmFzZTY0IiwgImhxeCIsICJ1dSIsICJoZXgiOgotICAgICAgICAgICAgcHJlZml4ZXMgPSBbImEyYl8iLCAiYjJhXyJdCi0gICAgICAgICAgICBpZiBzdWZmaXggPT0gImhxeCI6Ci0gICAgICAgICAgICAgICAgcHJlZml4ZXMuZXh0ZW5kKFsiY3JjXyIsICJybGVjb2RlXyIsICJybGVkZWNvZGVfIl0pCi0gICAgICAgICAgICBmb3IgcHJlZml4IGluIHByZWZpeGVzOgotICAgICAgICAgICAgICAgIG5hbWUgPSBwcmVmaXggKyBzdWZmaXgKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihnZXRhdHRyKGJpbmFzY2lpLCBuYW1lKSwgJ19fY2FsbF9fJykpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyKGJpbmFzY2lpLCBuYW1lKSkKLSAgICAgICAgZm9yIG5hbWUgaW4gKCJoZXhsaWZ5IiwgInVuaGV4bGlmeSIpOgorICAgICAgICBmb3IgbmFtZSBpbiBhbGxfZnVuY3Rpb25zOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZ2V0YXR0cihiaW5hc2NpaSwgbmFtZSksICdfX2NhbGxfXycpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyKGJpbmFzY2lpLCBuYW1lKSkKIAorICAgIGRlZiB0ZXN0X3JldHVybmVkX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIExpbWl0IHRvIHRoZSBtaW5pbXVtIG9mIGFsbCBsaW1pdHMgKGIyYV91dSkKKyAgICAgICAgTUFYX0FMTCA9IDQ1CisgICAgICAgIHJhdyA9IHNlbGYucmF3ZGF0YVs6TUFYX0FMTF0KKyAgICAgICAgZm9yIGZhLCBmYiBpbiB6aXAoYTJiX2Z1bmN0aW9ucywgYjJhX2Z1bmN0aW9ucyk6CisgICAgICAgICAgICBhMmIgPSBnZXRhdHRyKGJpbmFzY2lpLCBmYSkKKyAgICAgICAgICAgIGIyYSA9IGdldGF0dHIoYmluYXNjaWksIGZiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGEgPSBiMmEoc2VsZi50eXBlMnRlc3QocmF3KSkKKyAgICAgICAgICAgICAgICByZXMgPSBhMmIoc2VsZi50eXBlMnRlc3QoYSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInt9L3t9IGNvbnZlcnNpb24gcmFpc2VzIHshcn0iLmZvcm1hdChmYiwgZmEsIGVycikpCisgICAgICAgICAgICBpZiBmYiA9PSAnYjJhX2hxeCc6CisgICAgICAgICAgICAgICAgIyBiMmFfaHF4IHJldHVybnMgYSB0dXBsZQorICAgICAgICAgICAgICAgIHJlcywgXyA9IHJlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIHJhdywgInt9L3t9IGNvbnZlcnNpb246ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInshcn0gIT0geyFyfSIuZm9ybWF0KGZiLCBmYSwgcmVzLCByYXcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlcywgYnl0ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgYnl0ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MobWF4KGEpLCAxMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiaW5hc2NpaS5jcmNfaHF4KHJhdywgMCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGJpbmFzY2lpLmNyYzMyKHJhdyksIGludCkKKwogICAgIGRlZiB0ZXN0X2Jhc2U2NHZhbGlkKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzZTY0IHdpdGggdmFsaWQgZGF0YQogICAgICAgICBNQVhfQkFTRTY0ID0gNTcKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5kYXRhKSwgTUFYX0JBU0U2NCk6Ci0gICAgICAgICAgICBiID0gc2VsZi5kYXRhW2k6aStNQVhfQkFTRTY0XQorICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5yYXdkYXRhKSwgTUFYX0JBU0U2NCk6CisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfQkFTRTY0XSkKICAgICAgICAgICAgIGEgPSBiaW5hc2NpaS5iMmFfYmFzZTY0KGIpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoYSkKICAgICAgICAgcmVzID0gYnl0ZXMoKQogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGEpCiAgICAgICAgICAgICByZXMgKz0gYgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQogCiAgICAgZGVmIHRlc3RfYmFzZTY0aW52YWxpZChzZWxmKToKICAgICAgICAgIyBUZXN0IGJhc2U2NCB3aXRoIHJhbmRvbSBpbnZhbGlkIGNoYXJhY3RlcnMgc3ByaW5rbGVkIHRocm91Z2hvdXQKQEAgLTUyLDcgKzgwLDcgQEAKICAgICAgICAgTUFYX0JBU0U2NCA9IDU3CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuZGF0YSksIE1BWF9CQVNFNjQpOgotICAgICAgICAgICAgYiA9IHNlbGYuZGF0YVtpOmkrTUFYX0JBU0U2NF0KKyAgICAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzZWxmLnJhd2RhdGFbaTppK01BWF9CQVNFNjRdKQogICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoYikKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChhKQogCkBAIC03NCwyNiArMTAyLDI4IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzICsgbm9pc2UgKyBsaW5lCiAgICAgICAgIHJlcyA9IGJ5dGVhcnJheSgpCiAgICAgICAgIGZvciBsaW5lIGluIG1hcChhZGRub2lzZSwgbGluZXMpOgotICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQobGluZSkKKyAgICAgICAgICAgIGEgPSBzZWxmLnR5cGUydGVzdChsaW5lKQorICAgICAgICAgICAgYiA9IGJpbmFzY2lpLmEyYl9iYXNlNjQoYSkKICAgICAgICAgICAgIHJlcyArPSBiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCiAKICAgICAgICAgIyBUZXN0IGJhc2U2NCB3aXRoIGp1c3QgaW52YWxpZCBjaGFyYWN0ZXJzLCB3aGljaCBzaG91bGQgcmV0dXJuCiAgICAgICAgICMgZW1wdHkgc3RyaW5ncy4gVEJEOiBzaG91bGRuJ3QgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgPwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmEyYl9iYXNlNjQoZmlsbGVycyksIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfYmFzZTY0KHNlbGYudHlwZTJ0ZXN0KGZpbGxlcnMpKSwgYicnKQogCiAgICAgZGVmIHRlc3RfdXUoc2VsZik6CiAgICAgICAgIE1BWF9VVSA9IDQ1CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHNlbGYuZGF0YSksIE1BWF9VVSk6Ci0gICAgICAgICAgICBiID0gc2VsZi5kYXRhW2k6aStNQVhfVVVdCisgICAgICAgICAgICBiID0gc2VsZi50eXBlMnRlc3Qoc2VsZi5yYXdkYXRhW2k6aStNQVhfVVVdKQogICAgICAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV91dShiKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKGEpCiAgICAgICAgIHJlcyA9IGJ5dGVzKCkKICAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBiID0gYmluYXNjaWkuYTJiX3V1KGxpbmUpCisgICAgICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QobGluZSkKKyAgICAgICAgICAgIGIgPSBiaW5hc2NpaS5hMmJfdXUoYSkKICAgICAgICAgICAgIHJlcyArPSBiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLmRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBzZWxmLnJhd2RhdGEpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfdXUoYiJceDdmIiksIGIiXHgwMCIqMzEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3V1KGIiXHg4MCIpLCBiIlx4MDAiKjMyKQpAQCAtMTA3LDE5ICsxMzcsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfdXUoYid4JyksIGInIT4gICBcbicpCiAKICAgICBkZWYgdGVzdF9jcmMzMihzZWxmKToKLSAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoYiJUZXN0IHRoZSBDUkMtMzIgb2YiKQotICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmMzMihiIiB0aGlzIHN0cmluZy4iLCBjcmMpCisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KGIiVGVzdCB0aGUgQ1JDLTMyIG9mIikpCisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyYzMyKHNlbGYudHlwZTJ0ZXN0KGIiIHRoaXMgc3RyaW5nLiIpLCBjcmMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JjLCAxNTcxMjIwMzMwKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuY3JjMzIpCiAKLSAgICAjIFRoZSBocXggdGVzdCBpcyBpbiB0ZXN0X2JpbmhleC5weQorICAgIGRlZiB0ZXN0X2hxeChzZWxmKToKKyAgICAgICAgIyBQZXJmb3JtIGJpbmhleDQgc3R5bGUgUkxFLWNvbXByZXNzaW9uCisgICAgICAgICMgVGhlbiBjYWxjdWxhdGUgdGhlIGhleGJpbjQgYmluYXJ5LXRvLUFTQ0lJIHRyYW5zbGF0aW9uCisgICAgICAgIHJsZSA9IGJpbmFzY2lpLnJsZWNvZGVfaHF4KHNlbGYuZGF0YSkKKyAgICAgICAgYSA9IGJpbmFzY2lpLmIyYV9ocXgoc2VsZi50eXBlMnRlc3QocmxlKSkKKyAgICAgICAgYiwgXyA9IGJpbmFzY2lpLmEyYl9ocXgoc2VsZi50eXBlMnRlc3QoYSkpCisgICAgICAgIHJlcyA9IGJpbmFzY2lpLnJsZWRlY29kZV9ocXgoYikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgc2VsZi5yYXdkYXRhKQogCiAgICAgZGVmIHRlc3RfaGV4KHNlbGYpOgogICAgICAgICAjIHRlc3QgaGV4bGlmaWNhdGlvbgogICAgICAgICBzID0gYid7c1wwMDVcMDAwXDAwMFwwMDB3b3JsZGlcMDAyXDAwMFwwMDBcMDAwc1wwMDVcMDAwXDAwMFwwMDBoZWxsb2lcMDAxXDAwMFwwMDBcMDAwMCcKLSAgICAgICAgdCA9IGJpbmFzY2lpLmIyYV9oZXgocykKLSAgICAgICAgdSA9IGJpbmFzY2lpLmEyYl9oZXgodCkKKyAgICAgICAgdCA9IGJpbmFzY2lpLmIyYV9oZXgoc2VsZi50eXBlMnRlc3QocykpCisgICAgICAgIHUgPSBiaW5hc2NpaS5hMmJfaGV4KHNlbGYudHlwZTJ0ZXN0KHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmFzY2lpLkVycm9yLCBiaW5hc2NpaS5hMmJfaGV4LCB0WzotMV0gKyBiJ3EnKQpAQCAtMTI5LDcgKzE2Nyw3IEBACiAgICAgZGVmIHRlc3RfcXAoc2VsZik6CiAgICAgICAgICMgQSB0ZXN0IGZvciBTRiBidWcgNTM0MzQ3IChzZWdmYXVsdHMgd2l0aG91dCB0aGUgcHJvcGVyIGZpeCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgYmluYXNjaWkuYTJiX3FwKCIiLCAqKnsxOjF9KQorICAgICAgICAgICAgYmluYXNjaWkuYTJiX3FwKGIiIiwgKip7MToxfSkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTE0MSwxMiArMTc5LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKGIiPTAwXHJcbj0wMCIpLCBiIlx4MDBcclxuXHgwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBiaW5hc2NpaS5iMmFfcXAoYiJceGZmXHJcblx4ZmZcblx4ZmYiKSwKLSAgICAgICAgICAgIGIiPUZGXHJcbj1GRlxyXG49RkYiCi0gICAgICAgICkKKyAgICAgICAgICAgIGIiPUZGXHJcbj1GRlxyXG49RkYiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgYmluYXNjaWkuYjJhX3FwKGIiMCIqNzUrYiJceGZmXHJcblx4ZmZcclxuXHhmZiIpLAotICAgICAgICAgICAgYiIwIio3NStiIj1cclxuPUZGXHJcbj1GRlxyXG49RkYiCi0gICAgICAgICkKKyAgICAgICAgICAgIGIiMCIqNzUrYiI9XHJcbj1GRlxyXG49RkZcclxuPUZGIikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmIyYV9xcChiJ1wwXG4nKSwgYic9MDBcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYjJhX3FwKGInXDBcbicsIHF1b3RldGFicz1UcnVlKSwgYic9MDBcbicpCkBAIC0xNjAsMjcgKzE5Niw0NyBAQAogCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICAjIEEgdGVzdCBmb3IgU0YgYnVnICMxMDIyOTUzLiAgTWFrZSBzdXJlIFN5c3RlbUVycm9yIGlzIG5vdCByYWlzZWQuCi0gICAgICAgIGZvciBuIGluIFsnYjJhX3FwJywgJ2EyYl9oZXgnLCAnYjJhX2Jhc2U2NCcsICdhMmJfdXUnLCAnYTJiX3FwJywKLSAgICAgICAgICAgICAgICAgICdiMmFfaGV4JywgJ3VuaGV4bGlmeScsICdoZXhsaWZ5JywgJ2NyYzMyJywgJ2IyYV9ocXgnLAotICAgICAgICAgICAgICAgICAgJ2EyYl9ocXgnLCAnYTJiX2Jhc2U2NCcsICdybGVjb2RlX2hxeCcsICdiMmFfdXUnLAotICAgICAgICAgICAgICAgICAgJ3JsZWRlY29kZV9ocXgnXToKLSAgICAgICAgICAgIGYgPSBnZXRhdHRyKGJpbmFzY2lpLCBuKQorICAgICAgICBlbXB0eSA9IHNlbGYudHlwZTJ0ZXN0KGInJykKKyAgICAgICAgZm9yIGZ1bmMgaW4gYWxsX2Z1bmN0aW9uczoKKyAgICAgICAgICAgIGlmIGZ1bmMgPT0gJ2NyY19ocXgnOgorICAgICAgICAgICAgICAgICMgY3JjX2hxeCBuZWVkcyAyIGFyZ3VtZW50cworICAgICAgICAgICAgICAgIGJpbmFzY2lpLmNyY19ocXgoZW1wdHksIDApCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGYgPSBnZXRhdHRyKGJpbmFzY2lpLCBmdW5jKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYoYicnKQotICAgICAgICAgICAgZXhjZXB0IFN5c3RlbUVycm9yIGFzIGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzKGInJykgcmFpc2VzIFN5c3RlbUVycm9yOiAlcyIgJSAobiwgZXJyKSkKLSAgICAgICAgYmluYXNjaWkuY3JjX2hxeChiJycsIDApCisgICAgICAgICAgICAgICAgZihlbXB0eSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgie30oeyFyfSkgcmFpc2VzIHshcn0iLmZvcm1hdChmdW5jLCBlbXB0eSwgZXJyKSkKIAotICAgIGRlZiB0ZXN0X25vX2JpbmFyeV9zdHJpbmdzKHNlbGYpOgotICAgICAgICAjIGIyYV8gbXVzdCBub3QgYWNjZXB0IHN0cmluZ3MKLSAgICAgICAgZm9yIGYgaW4gKGJpbmFzY2lpLmIyYV91dSwgYmluYXNjaWkuYjJhX2Jhc2U2NCwKLSAgICAgICAgICAgICAgICAgIGJpbmFzY2lpLmIyYV9ocXgsIGJpbmFzY2lpLmIyYV9xcCwKLSAgICAgICAgICAgICAgICAgIGJpbmFzY2lpLmhleGxpZnksIGJpbmFzY2lpLnJsZWNvZGVfaHF4LAotICAgICAgICAgICAgICAgICAgYmluYXNjaWkuY3JjX2hxeCwgYmluYXNjaWkuY3JjMzIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAidGVzdCIpCisgICAgZGVmIHRlc3RfdW5pY29kZV9zdHJpbmdzKHNlbGYpOgorICAgICAgICAjIFVuaWNvZGUgc3RyaW5ncyBhcmUgbm90IGFjY2VwdGVkLgorICAgICAgICBmb3IgZnVuYyBpbiBhbGxfZnVuY3Rpb25zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihiaW5hc2NpaSwgZnVuYyksICJ0ZXN0IikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgne30oInRlc3QiKSByYWlzZXMgeyFyfScuZm9ybWF0KGZ1bmMsIGVycikpCisgICAgICAgICMgY3JjX2hxeCBuZWVkcyAyIGFyZ3VtZW50cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJpbmFzY2lpLmNyY19ocXgsICJ0ZXN0IiwgMCkKKworCitjbGFzcyBBcnJheUJpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIGRlZiB0eXBlMnRlc3Qoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBhcnJheS5hcnJheSgnQicsIGxpc3QocykpCisKKworY2xhc3MgQnl0ZWFycmF5QmluQVNDSUlUZXN0KEJpbkFTQ0lJVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisKKworY2xhc3MgTWVtb3J5dmlld0JpbkFTQ0lJVGVzdChCaW5BU0NJSVRlc3QpOgorICAgIHR5cGUydGVzdCA9IG1lbW9yeXZpZXcKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluQVNDSUlUZXN0KQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJpbkFTQ0lJVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlYXJyYXlCaW5BU0NJSVRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgTWVtb3J5dmlld0JpbkFTQ0lJVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaW5oZXgucHkgYi9MaWIvdGVzdC90ZXN0X2JpbmhleC5weQppbmRleCAwNmZkOThhLi5hODA3YmNhIDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2JpbmhleC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpbmhleC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGJpbmhleCBDIG1vZHVsZQogCiAgICBVc2VzIHRoZSBtZWNoYW5pc20gb2YgdGhlIHB5dGhvbiBiaW5oZXggbW9kdWxlCkBAIC0xNSwxMCArMTUsMTIgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuZm5hbWUxID0gc3VwcG9ydC5URVNURk4gKyAiMSIKICAgICAgICAgc2VsZi5mbmFtZTIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICBzZWxmLmZuYW1lMyA9IHN1cHBvcnQuVEVTVEZOICsgInZlcnlfbG9uZ19maWxlbmFtZV9fdmVyeV9sb25nX2ZpbGVuYW1lX192ZXJ5X2xvbmdfZmlsZW5hbWVfX3ZlcnlfbG9uZ19maWxlbmFtZV9fIgogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZuYW1lMSkKICAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5mbmFtZTIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuZm5hbWUzKQogCiAgICAgREFUQSA9IGInSmFjayBpcyBteSBoZXJvJwogCkBAIC0zNyw2ICszOSwxNSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBmaW5pc2gpCiAKKyAgICBkZWYgdGVzdF9iaW5oZXhfZXJyb3Jfb25fbG9uZ19maWxlbmFtZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSB0ZXN0Y2FzZSBmYWlscyBpZiBubyBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYSBmaWxlbmFtZSBwYXJhbWV0ZXIgcHJvdmlkZWQgdG8gYmluaGV4LmJpbmhleCgpCisgICAgICAgIGlzIHRvbyBsb25nLCBvciBpZiB0aGUgZXhjZXB0aW9uIHJhaXNlZCBpbiBiaW5oZXguYmluaGV4KCkgaXMgbm90IGFuIGluc3RhbmNlIG9mIGJpbmhleC5FcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGYzID0gb3BlbihzZWxmLmZuYW1lMywgJ3diJykKKyAgICAgICAgZjMuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGJpbmhleC5FcnJvciwgYmluaGV4LmJpbmhleCwgc2VsZi5mbmFtZTMsIHNlbGYuZm5hbWUyKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQmluSGV4VGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5IGIvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQppbmRleCA1MjNlY2JlLi44NDE3OTE2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKQEAgLTIsNiArMiw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIG9wZXJhdG9yIGltcG9ydCBlcSwgbmUsIGx0LCBndCwgbGUsIGdlCiAKIGRlZiBnY2QoYSwgYik6CiAgICAgIiIiR3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgdXNpbmcgRXVjbGlkJ3MgYWxnb3JpdGhtLiIiIgpAQCAtMTAsOCArMTEsOCBAQAogICAgIHJldHVybiBiCiAKIGRlZiBpc2ludCh4KToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGludCBvciBsb25nLiIiIgotICAgIHJldHVybiBpc2luc3RhbmNlKHgsIGludCkgb3IgaXNpbnN0YW5jZSh4LCBpbnQpCisgICAgIiIiVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBpbnQuIiIiCisgICAgcmV0dXJuIGlzaW5zdGFuY2UoeCwgaW50KQogCiBkZWYgaXNudW0oeCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiBhIGJ1aWx0LWluIG51bWVyaWMgdHlwZS4iIiIKQEAgLTI2LDE4ICsyNywxOCBAQAogCiBjbGFzcyBSYXQob2JqZWN0KToKIAotICAgICIiIlJhdGlvbmFsIG51bWJlciBpbXBsZW1lbnRlZCBhcyBhIG5vcm1hbGl6ZWQgcGFpciBvZiBsb25ncy4iIiIKKyAgICAiIiJSYXRpb25hbCBudW1iZXIgaW1wbGVtZW50ZWQgYXMgYSBub3JtYWxpemVkIHBhaXIgb2YgaW50cy4iIiIKIAogICAgIF9fc2xvdHNfXyA9IFsnX1JhdF9fbnVtJywgJ19SYXRfX2RlbiddCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbnVtPTAsIGRlbj0xKToKICAgICAgICAgIiIiQ29uc3RydWN0b3I6IFJhdChbbnVtWywgZGVuXV0pLgogCi0gICAgICAgIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBpbnRzIG9yIGxvbmdzLCBhbmQgZGVmYXVsdCB0byAoMCwgMSkuIiIiCisgICAgICAgIFRoZSBhcmd1bWVudHMgbXVzdCBiZSBpbnRzLCBhbmQgZGVmYXVsdCB0byAoMCwgMSkuIiIiCiAgICAgICAgIGlmIG5vdCBpc2ludChudW0pOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJSYXQgbnVtZXJhdG9yIG11c3QgYmUgaW50IG9yIGxvbmcgKCVyKSIgJSBudW0pCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlJhdCBudW1lcmF0b3IgbXVzdCBiZSBpbnQgKCVyKSIgJSBudW0pCiAgICAgICAgIGlmIG5vdCBpc2ludChkZW4pOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJSYXQgZGVub21pbmF0b3IgbXVzdCBiZSBpbnQgb3IgbG9uZyAoJXIpIiAlIGRlbikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiUmF0IGRlbm9taW5hdG9yIG11c3QgYmUgaW50ICglcikiICUgZGVuKQogICAgICAgICAjIEJ1dCB0aGUgemVybyBpcyBhbHdheXMgb24KICAgICAgICAgaWYgZGVuID09IDA6CiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigiemVybyBkZW5vbWluYXRvciIpCkBAIC0yMTksOSArMjIwLDYgQEAKICAgICAgICAgYSA9IFJhdCgxMCwgMTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5kZW4sIDMpCi0gICAgICAgIGEgPSBSYXQoMTAsIDE1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEubnVtLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQogICAgICAgICBhID0gUmF0KDEwLCAtMTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5udW0sIC0yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuZGVuLCAzKQpAQCAtMzA1LDkgKzMwMyw3OCBAQAogCiAgICAgIyBYWFggUmFuIG91dCBvZiBzdGVhbTsgVE8gRE86IGRpdm1vZCwgZGl2LCBmdXR1cmUgZGl2aXNpb24KIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJhdFRlc3RDYXNlKQogCitjbGFzcyBPcGVyYXRpb25Mb2dnZXI6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgY2xhc3NlcyB3aXRoIG9wZXJhdGlvbiBsb2dnaW5nLiIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2dnZXIpOgorICAgICAgICBzZWxmLmxvZ2dlciA9IGxvZ2dlcgorICAgIGRlZiBsb2dfb3BlcmF0aW9uKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5sb2dnZXIoKmFyZ3MpCisKK2RlZiBvcF9zZXF1ZW5jZShvcCwgKmNsYXNzZXMpOgorICAgICIiIlJldHVybiB0aGUgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyB0aGF0IHJlc3VsdHMgZnJvbSBhcHBseWluZworICAgIHRoZSBvcGVyYXRpb24gYG9wYCB0byBpbnN0YW5jZXMgb2YgdGhlIGdpdmVuIGNsYXNzZXMuIiIiCisgICAgbG9nID0gW10KKyAgICBpbnN0YW5jZXMgPSBbXQorICAgIGZvciBjIGluIGNsYXNzZXM6CisgICAgICAgIGluc3RhbmNlcy5hcHBlbmQoYyhsb2cuYXBwZW5kKSkKKworICAgIHRyeToKKyAgICAgICAgb3AoKmluc3RhbmNlcykKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBwYXNzCisgICAgcmV0dXJuIGxvZworCitjbGFzcyBBKE9wZXJhdGlvbkxvZ2dlcik6CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignQS5fX2VxX18nKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdBLl9fbGVfXycpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ0EuX19nZV9fJykKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK2NsYXNzIEIoT3BlcmF0aW9uTG9nZ2VyKToKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdCLl9fZXFfXycpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ0IuX19sZV9fJykKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignQi5fX2dlX18nKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworY2xhc3MgQyhCKToKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdDLl9fZXFfXycpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ0MuX19sZV9fJykKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignQy5fX2dlX18nKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworY2xhc3MgT3BlcmF0aW9uT3JkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY29tcGFyaXNvbl9vcmRlcnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UoZXEsIEEsIEEpLCBbJ0EuX19lcV9fJywgJ0EuX19lcV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UoZXEsIEEsIEIpLCBbJ0EuX19lcV9fJywgJ0IuX19lcV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UoZXEsIEIsIEEpLCBbJ0IuX19lcV9fJywgJ0EuX19lcV9fJ10pCisgICAgICAgICMgQyBpcyBhIHN1YmNsYXNzIG9mIEIsIHNvIEMuX19lcV9fIGlzIGNhbGxlZCBmaXJzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGVxLCBCLCBDKSwgWydDLl9fZXFfXycsICdCLl9fZXFfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wX3NlcXVlbmNlKGVxLCBDLCBCKSwgWydDLl9fZXFfXycsICdCLl9fZXFfXyddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEEsIEEpLCBbJ0EuX19sZV9fJywgJ0EuX19nZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEEsIEIpLCBbJ0EuX19sZV9fJywgJ0IuX19nZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEIsIEEpLCBbJ0IuX19sZV9fJywgJ0EuX19nZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEIsIEMpLCBbJ0MuX19nZV9fJywgJ0IuX19sZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEMsIEIpLCBbJ0MuX19sZV9fJywgJ0IuX19nZV9fJ10pCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChSYXRUZXN0Q2FzZSwgT3BlcmF0aW9uT3JkZXJUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ib29sLnB5IGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CmluZGV4IDNhNjhkZmMuLmIyOTY4NzAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKQEAgLTcsMTIgKzcsNiBAQAogCiBjbGFzcyBCb29sVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCi0KLSAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIG5vdCBiKQotCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsYXNzIEMoYm9vbCk6CkBAIC01MSw2ICs0NSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChUcnVlKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChpbnQoVHJ1ZSksIFRydWUpCiAKKyAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChGYWxzZSksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChmbG9hdChGYWxzZSksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KFRydWUpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZmxvYXQoVHJ1ZSksIFRydWUpCisKICAgICBkZWYgdGVzdF9tYXRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCtGYWxzZSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCgrRmFsc2UsIEZhbHNlKQpAQCAtMTc0LDggKzE3NCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaGFzYXR0cihbXSwgIndvYmJsZSIpLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2NhbGxhYmxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKGhhc2F0dHIobGVuLCAnX19jYWxsX18nKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhoYXNhdHRyKDEsICdfX2NhbGxfXycpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjYWxsYWJsZShsZW4pLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNhbGxhYmxlKDEpLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2lzaW5zdGFuY2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXNpbnN0YW5jZShUcnVlLCBib29sKSwgVHJ1ZSkKQEAgLTIyMSwxNSArMjIxLDE1IEBACiAKICAgICBkZWYgdGVzdF9ib29sZWFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUgJiAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGlzaW5zdGFuY2UoVHJ1ZSAmIDEsIGJvb2wpKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoVHJ1ZSAmIDEsIGJvb2wpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSAmIFRydWUsIFRydWUpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlIHwgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBpc2luc3RhbmNlKFRydWUgfCAxLCBib29sKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKFRydWUgfCAxLCBib29sKQogICAgICAgICBzZWxmLmFzc2VydElzKFRydWUgfCBUcnVlLCBUcnVlKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSBeIDEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShUcnVlIF4gMSwgYm9vbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShUcnVlIF4gMSwgYm9vbCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlIF4gVHJ1ZSwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9maWxlY2xvc2VkKHNlbGYpOgpAQCAtMjQxLDYgKzI0MSwxMiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQogCisgICAgZGVmIHRlc3RfdHlwZXMoc2VsZik6CisgICAgICAgICMgdHlwZXMgYXJlIGFsd2F5cyB0cnVlLgorICAgICAgICBmb3IgdCBpbiBbYm9vbCwgY29tcGxleCwgZGljdCwgZmxvYXQsIGludCwgbGlzdCwgb2JqZWN0LAorICAgICAgICAgICAgICAgICAgc2V0LCBzdHIsIHR1cGxlLCB0eXBlXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCh0KSwgVHJ1ZSkKKwogICAgIGRlZiB0ZXN0X29wZXJhdG9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgb3BlcmF0b3IKICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci50cnV0aCgwKSwgRmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKaW5kZXggNDIwYTE3Zi4uMTQ2OWUzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQpAQCAtMSwxNyArMSwxOCBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gYnVpbHQtaW4gZnVuY3Rpb25zCiAKIGltcG9ydCBwbGF0Zm9ybQotaW1wb3J0IHRlc3Quc3VwcG9ydCwgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmY21wLCBURVNURk4sIHVubGluaywgIHJ1bl91bml0dGVzdCwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX3dpdGhfbG9jYWxlCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KK2ltcG9ydCBhc3QKK2ltcG9ydCB0eXBlcworaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgcmFuZG9tCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmNtcCwgVEVTVEZOLCB1bmxpbmssICBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCiBmcm9tIG9wZXJhdG9yIGltcG9ydCBuZWcKIAotaW1wb3J0IHN5cywgd2FybmluZ3MsIHJhbmRvbSwgY29sbGVjdGlvbnMsIGlvLCBmcmFjdGlvbnMKLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiaGV4Li4vb2N0Li4gb2YgbmVnYXRpdmUgaW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIF9fbmFtZV9fKQotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgInVuaXR0ZXN0IikKLWltcG9ydCBidWlsdGlucwogCiBjbGFzcyBTcXVhcmVzOgogCkBAIC0xMjYsMTIgKzEyNywxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygwLjApLCAwLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKDMuMTQpLCAzLjE0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygtMy4xNCksIDMuMTQpCi0gICAgICAgICMgbG9uZwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicygwKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoMTIzNCksIDEyMzQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKC0xMjM0KSwgMTIzNCkKICAgICAgICAgIyBzdHIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhYnMsICdhJykKKyAgICAgICAgIyBib29sCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKFRydWUpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhGYWxzZSksIDApCisgICAgICAgICMgb3RoZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhYnMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWJzLCBOb25lKQorICAgICAgICBjbGFzcyBBYnNDbGFzcyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fYWJzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIC01CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKEFic0NsYXNzKCkpLCAtNSkKIAogICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGwoWzIsIDQsIDZdKSwgVHJ1ZSkKQEAgLTE2NCw3ICsxNzEsNiBAQAogICAgIGRlZiB0ZXN0X2FzY2lpKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKCcnKSwgJ1wnXCcnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKDApLCAnMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoMCksICcwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaSgoKSksICcoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoW10pLCAnW10nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKHt9KSwgJ3t9JykKQEAgLTIwMiwyMiArMjA4LDM5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIGludCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXgsIHN5cy5tYXhzaXplKzEpCiAKLSAgICAjIFhYWChubm9yd2l0eik6IFRoaXMgdGVzdCBjYXNlIGZvciBjYWxsYWJsZSBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZC4KICAgICBkZWYgdGVzdF9jYWxsYWJsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobGVuLCAnX19jYWxsX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGxlbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoImEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGNhbGxhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGxhbWJkYSB4LCB5OiB4ICsgeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoX19idWlsdGluc19fKSkKICAgICAgICAgZGVmIGYoKTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmLCAnX19jYWxsX18nKSkKLSAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGYpKQorCisgICAgICAgIGNsYXNzIEMxOgogICAgICAgICAgICAgZGVmIG1ldGgoc2VsZik6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoQywgJ19fY2FsbF9fJykpCi0gICAgICAgIHggPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoeC5tZXRoLCAnX19jYWxsX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKHgsICdfX2NhbGxfXycpKQotICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoQzEpKQorICAgICAgICBjID0gQzEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoYy5tZXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKworICAgICAgICAjIF9fY2FsbF9fIGlzIGxvb2tlZCB1cCBvbiB0aGUgY2xhc3MsIG5vdCB0aGUgaW5zdGFuY2UKKyAgICAgICAgYy5fX2NhbGxfXyA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYWJsZShjKSkKKyAgICAgICAgYy5fX2NhbGxfXyA9IGxhbWJkYSBzZWxmOiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoYykpCisgICAgICAgIGRlbCBjLl9fY2FsbF9fCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGFibGUoYykpCisKKyAgICAgICAgY2xhc3MgQzIob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKTogcGFzcwotICAgICAgICB5ID0gRCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHksICdfX2NhbGxfXycpKQotICAgICAgICB5KCkKKyAgICAgICAgYzIgPSBDMigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjMikpCisgICAgICAgIGMyLl9fY2FsbF9fID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FsbGFibGUoYzIpKQorICAgICAgICBjbGFzcyBDMyhDMik6IHBhc3MKKyAgICAgICAgYzMgPSBDMygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShjMykpCiAKICAgICBkZWYgdGVzdF9jaHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hyKDMyKSwgJyAnKQpAQCAtMjYzLDggKzI4NiwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBpbGUsIGNocigwKSwgJ2YnLCAnZXhlYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBpbGUsIHN0cignYSA9IDEnKSwgJ2YnLCAnYmFkJykKIAorICAgICAgICAjIHRlc3QgdGhlIG9wdGltaXplIGFyZ3VtZW50CisKKyAgICAgICAgY29kZXN0ciA9ICcnJ2RlZiBmKCk6CisgICAgICAgICIiImRvYyIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UKKyAgICAgICAgZXhjZXB0IEFzc2VydGlvbkVycm9yOgorICAgICAgICAgICAgcmV0dXJuIChUcnVlLCBmLl9fZG9jX18pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKEZhbHNlLCBmLl9fZG9jX18pCisgICAgICAgICcnJworICAgICAgICBkZWYgZigpOiAiIiJkb2MiIiIKKyAgICAgICAgdmFsdWVzID0gWygtMSwgX19kZWJ1Z19fLCBmLl9fZG9jX18pLAorICAgICAgICAgICAgICAgICAgKDAsIFRydWUsICdkb2MnKSwKKyAgICAgICAgICAgICAgICAgICgxLCBGYWxzZSwgJ2RvYycpLAorICAgICAgICAgICAgICAgICAgKDIsIEZhbHNlLCBOb25lKV0KKyAgICAgICAgZm9yIG9wdHZhbCwgZGVidWd2YWwsIGRvY3N0cmluZyBpbiB2YWx1ZXM6CisgICAgICAgICAgICAjIHRlc3QgYm90aCBkaXJlY3QgY29tcGlsYXRpb24gYW5kIGNvbXBpbGF0aW9uIHZpYSBBU1QKKyAgICAgICAgICAgIGNvZGVvYmpzID0gW10KKyAgICAgICAgICAgIGNvZGVvYmpzLmFwcGVuZChjb21waWxlKGNvZGVzdHIsICI8dGVzdD4iLCAiZXhlYyIsIG9wdGltaXplPW9wdHZhbCkpCisgICAgICAgICAgICB0cmVlID0gYXN0LnBhcnNlKGNvZGVzdHIpCisgICAgICAgICAgICBjb2Rlb2Jqcy5hcHBlbmQoY29tcGlsZSh0cmVlLCAiPHRlc3Q+IiwgImV4ZWMiLCBvcHRpbWl6ZT1vcHR2YWwpKQorICAgICAgICAgICAgZm9yIGNvZGUgaW4gY29kZW9ianM6CisgICAgICAgICAgICAgICAgbnMgPSB7fQorICAgICAgICAgICAgICAgIGV4ZWMoY29kZSwgbnMpCisgICAgICAgICAgICAgICAgcnYgPSBuc1snZiddKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ2LCAoZGVidWd2YWwsIGRvY3N0cmluZykpCisKICAgICBkZWYgdGVzdF9kZWxhdHRyKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIHN5cy5zcGFtID0gMQogICAgICAgICBkZWxhdHRyKHN5cywgJ3NwYW0nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRlbGF0dHIpCkBAIC0yNzUsMjIgKzMyNSwyMCBAQAogCiAgICAgICAgICMgZGlyKCkgLSBsb2NhbCBzY29wZQogICAgICAgICBsb2NhbF92YXIgPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbG9jYWxfdmFyJyBpbiBkaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbG9jYWxfdmFyJywgZGlyKCkpCiAKICAgICAgICAgIyBkaXIobW9kdWxlKQotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZXhpdCcgaW4gZGlyKHN5cykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2V4aXQnLCBkaXIoc3lzKSkKIAogICAgICAgICAjIGRpcihtb2R1bGVfd2l0aF9pbnZhbGlkX19kaWN0X18pCi0gICAgICAgIGltcG9ydCB0eXBlcwogICAgICAgICBjbGFzcyBGb28odHlwZXMuTW9kdWxlVHlwZSk6CiAgICAgICAgICAgICBfX2RpY3RfXyA9IDgKICAgICAgICAgZiA9IEZvbygiZm9vIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkaXIsIGYpCiAKICAgICAgICAgIyBkaXIodHlwZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJzdHJpcCIgaW4gZGlyKHN0cikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiX19tcm9fXyIgbm90IGluIGRpcihzdHIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJpcCIsIGRpcihzdHIpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJfX21yb19fIiwgZGlyKHN0cikpCiAKICAgICAgICAgIyBkaXIob2JqKQogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKQEAgLTI5OSwxMyArMzQ3LDEzIEBACiAgICAgICAgICAgICAgICAgc2VsZi55ID0gOAogICAgICAgICAgICAgICAgIHNlbGYueiA9IDkKICAgICAgICAgZiA9IEZvbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgieSIgaW4gZGlyKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ5IiwgZGlyKGYpKQogCiAgICAgICAgICMgZGlyKG9ial9ub19fZGljdF9fKQogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFtdCiAgICAgICAgIGYgPSBGb28oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9fcmVwcl9fIiBpbiBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fcmVwcl9fIiwgZGlyKGYpKQogCiAgICAgICAgICMgZGlyKG9ial9ub19fY2xhc3NfX3dpdGhfX2RpY3RfXykKICAgICAgICAgIyAoYW4gdWdseSB0cmljayB0byBjYXVzZSBnZXRhdHRyKGYsICJfX2NsYXNzX18iKSB0byBmYWlsKQpAQCAtMzE0LDggKzM2Miw4IEBACiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5iYXIgPSAid293IgogICAgICAgICBmID0gRm9vKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfX3JlcHJfXyIgbm90IGluIGRpcihmKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJiYXIiIGluIGRpcihmKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19yZXByX18iLCBkaXIoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGRpcihmKSkKIAogICAgICAgICAjIGRpcihvYmpfdXNpbmcgX19kaXJfXykKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CkBAIC0zNDQsMTggKzM5Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKDEyLCAtNyksICgtMiwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTIsIC03KSwgKDEsIC01KSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMiwgNyksICgxLCA1KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLTEyLCA3KSwgKC0yLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoMTIsIC03KSwgKC0yLCAtMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC0xMiwgLTcpLCAoMSwgLTUpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKDEyLCA3KSwgKDEsIDUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgtMTIsIDcpLCAoLTIsIDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdm1vZCgxMiwgLTcpLCAoLTIsIC0yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLTEyLCAtNyksICgxLCAtNSkpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZtb2QoLXN5cy5tYXhzaXplLTEsIC0xKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoc3lzLm1heHNpemUrMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKC1zeXMubWF4c2l6ZS0xLCAtMSksIChzeXMubWF4c2l6ZSsxLCAwKSkKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGZjbXAoZGl2bW9kKDMuMjUsIDEuMCksICgzLjAsIDAuMjUpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmY21wKGRpdm1vZCgtMy4yNSwgMS4wKSwgKC00LjAsIDAuNzUpKSkKQEAgLTQ2NSw5ICs1MDIsMTAgQEAKICAgICAgICAgZyA9IHt9CiAgICAgICAgIGwgPSB7fQogCi0gICAgICAgIGltcG9ydCB3YXJuaW5ncwotICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgImdsb2JhbCBzdGF0ZW1lbnQiLCBtb2R1bGU9IjxzdHJpbmc+IikKLSAgICAgICAgZXhlYygnZ2xvYmFsIGE7IGEgPSAxOyBiID0gMicsIGcsIGwpCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiZ2xvYmFsIHN0YXRlbWVudCIsCisgICAgICAgICAgICAgICAgICAgIG1vZHVsZT0iPHN0cmluZz4iKQorICAgICAgICAgICAgZXhlYygnZ2xvYmFsIGE7IGEgPSAxOyBiID0gMicsIGcsIGwpCiAgICAgICAgIGlmICdfX2J1aWx0aW5zX18nIGluIGc6CiAgICAgICAgICAgICBkZWwgZ1snX19idWlsdGluc19fJ10KICAgICAgICAgaWYgJ19fYnVpbHRpbnNfXycgaW4gbDoKQEAgLTUxMSw3ICs1NDksNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGZpbHRlcig0MiwgKDEsIDIpKSkKIAogICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoc3lzLCAnc3Rkb3V0JykgaXMgc3lzLnN0ZG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhdHRyLCBzeXMsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc3lzLCAxLCAiZm9vIikKQEAgLTUyMSwyMSArNTU4LDIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCAxLCAiXHVEQUQxXHVENTFFIikKIAogICAgIGRlZiB0ZXN0X2hhc2F0dHIoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLCAnc3Rkb3V0JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzYXR0ciwgc3lzLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2F0dHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGhhc2F0dHIoc3lzLCBjaHIoc3lzLm1heHVuaWNvZGUpKSkKIAotICAgICAgICAjIENoZWNrIHRoYXQgaGFzYXR0ciBhbGxvd3MgU3lzdGVtRXhpdCBhbmQgS2V5Ym9hcmRJbnRlcnJ1cHRzIGJ5CisgICAgICAgICMgQ2hlY2sgdGhhdCBoYXNhdHRyIHByb3BhZ2F0ZXMgYWxsIGV4Y2VwdGlvbnMgb3V0c2lkZSBvZgorICAgICAgICAjIEF0dHJpYnV0ZUVycm9yLgogICAgICAgICBjbGFzcyBBOgogICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHdoYXQpOgotICAgICAgICAgICAgICAgIHJhaXNlIEtleWJvYXJkSW50ZXJydXB0Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBoYXNhdHRyLCBBKCksICJiIikKKyAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQsIGhhc2F0dHIsIEEoKSwgImIiKQogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIHdoYXQpOgotICAgICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCwgaGFzYXR0ciwgQigpLCAiYiIpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBoYXNhdHRyLCBCKCksICJiIikKIAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIGhhc2goTm9uZSkKQEAgLTU1MiwxMCArNTg5LDYgQEAKICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gMioqMTAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFgoKSkpLCBpbnQpCi0gICAgICAgIGNsYXNzIFkob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMioqMTAwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShoYXNoKFkoKSkpLCBpbnQpCiAgICAgICAgIGNsYXNzIFooaW50KToKICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgpAQCAtNTYzLDE1ICs1OTYsMTIgQEAKIAogICAgIGRlZiB0ZXN0X2hleChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXgoMTYpLCAnMHgxMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGV4KDE2KSwgJzB4MTAnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgtMTYpLCAnLTB4MTAnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleCgtMTYpLCAnLTB4MTAnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhleCwge30pCiAKICAgICBkZWYgdGVzdF9pZChzZWxmKToKICAgICAgICAgaWQoTm9uZSkKICAgICAgICAgaWQoMSkKLSAgICAgICAgaWQoMSkKICAgICAgICAgaWQoMS4wKQogICAgICAgICBpZCgnc3BhbScpCiAgICAgICAgIGlkKCgwLDEsMiwzKSkKQEAgLTY0OCw2ICs2NzgsOCBAQAogICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN5cy5tYXhzaXplICsgMQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsZW4sIEh1Z2VMZW4oKSkKKyAgICAgICAgY2xhc3MgTm9MZW5NZXRob2Qob2JqZWN0KTogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgTm9MZW5NZXRob2QoKSkKIAogICAgIGRlZiB0ZXN0X21hcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTgxNCw4ICs4NDYsNiBAQAogCiAgICAgZGVmIHRlc3Rfb2N0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDApLCAnMG8xNDQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgxMDApLCAnMG8xNDQnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9jdCgtMTAwKSwgJy0wbzE0NCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2N0KC0xMDApLCAnLTBvMTQ0JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvY3QsICgpKQogCkBAIC04MjQsNyArODU0LDYgQEAKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcC53cml0ZSgnMSsxXG4nKQotICAgICAgICAgICAgZnAud3JpdGUoJzErMVxuJykKICAgICAgICAgICAgIGZwLndyaXRlKCdUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nJykKICAgICAgICAgICAgIGZwLndyaXRlKCcuXG4nKQogICAgICAgICAgICAgZnAud3JpdGUoJ0RlYXIgSm9oblxuJykKQEAgLTgzOCw3ICs4NjcsNiBAQAogICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAncicpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoNCksICcxKzFcbicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnMSsxXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnRGVhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDEwMCksICcgSm9oblxuJykKQEAgLTg5MSwyMSArOTE5LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMiksIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yLDMpLCAtOCkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwLDApLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygwLDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygxLDApLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygxLDEpLCAxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsMTApLCAxMDI0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLDIwKSwgMTAyNCoxMDI0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvdygyLDMwKSwgMTAyNCoxMDI0KjEwMjQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yLDEpLCAtMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3coLTIsMiksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KC0yLDMpLCAtOCkKLQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHBvdygwLiwwKSwgMS4pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KDAuLDEpLCAwLikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChwb3coMS4sMCksIDEuKQpAQCAtOTIxLDkgKzkzNCw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwyKSwgNC4pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocG93KC0yLiwzKSwgLTguKQogCi0gICAgICAgIGZvciB4IGluIDIsIDIsIDIuMDoKLSAgICAgICAgICAgIGZvciB5IGluIDEwLCAxMCwgMTAuMDoKLSAgICAgICAgICAgICAgICBmb3IgeiBpbiAxMDAwLCAxMDAwLCAxMDAwLjA6CisgICAgICAgIGZvciB4IGluIDIsIDIuMDoKKyAgICAgICAgICAgIGZvciB5IGluIDEwLCAxMC4wOgorICAgICAgICAgICAgICAgIGZvciB6IGluIDEwMDAsIDEwMDAuMDoKICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCBmbG9hdCkgb3IgXAogICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHksIGZsb2F0KSBvciBcCiAgICAgICAgICAgICAgICAgICAgICAgIGlzaW5zdGFuY2UoeiwgZmxvYXQpOgpAQCAtOTM2LDkzICs5NDksOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93LCAtMSwgLTIsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvdywgMSwgMiwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3csIC0xLCAtMiwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcG93LCAxLCAyLCAwKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG93KQogCi0gICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgzKSksIFswLCAxLCAyXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDEsIDUpKSwgWzEsIDIsIDMsIDRdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMCkpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKC0zKSksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMSwgMTAsIDMpKSwgWzEsIDQsIDddKQotICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDUsIC01LCAtMykpLCBbNSwgMiwgLTEsIC00XSkKLQotICAgICAgICAjaXNzdWUgNjMzNDogdGhlIGludGVybmFsIHN0b3JlZCByYW5nZSBsZW5ndGggd2FzIGJlaW5nCi0gICAgICAgICNjb21wdXRlZCBpbmNvcnJlY3RseSBpbiBzb21lIGNhc2VzIGludm9sdmluZyBsYXJnZSBhcmd1bWVudHMuCi0gICAgICAgIHggPSByYW5nZSgxMCoqMjAsIDEwKioyMCsxMCwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoeCkpLCA0KQotCi0gICAgICAgIHggPSByYW5nZSgxMCoqMjArMTAsIDEwKioyMCwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoeCkpLCAwKQotCi0gICAgICAgIHggPSByYW5nZSgxMCoqMjAsIDEwKioyMCsxMCwgLTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KHgpKSwgMCkKLQotICAgICAgICB4ID0gcmFuZ2UoMTAqKjIwKzEwLCAxMCoqMjAsIC0zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdCh4KSksIDQpCi0KLSAgICAgICAgIiIiIFhYWChubm9yd2l0eik6Ci0gICAgICAgICMgTm93IHRlc3QgcmFuZ2UoKSB3aXRoIGxvbmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgtMioqMTAwKSksIFtdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMCwgLTIqKjEwMCkpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDAsIDIqKjEwMCwgLTEpKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgwLCAyKioxMDAsIC0xKSksIFtdKQotCi0gICAgICAgIGEgPSBpbnQoMTAgKiBzeXMubWF4c2l6ZSkKLSAgICAgICAgYiA9IGludCgxMDAgKiBzeXMubWF4c2l6ZSkKLSAgICAgICAgYyA9IGludCg1MCAqIHN5cy5tYXhzaXplKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZShhLCBhKzIpKSwgW2EsIGErMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZShhKzIsIGEsIC0xKSksIFthKzIsIGErMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZShhKzQsIGEsIC0yKSksIFthKzQsIGErMl0pCi0KLSAgICAgICAgc2VxID0gbGlzdChyYW5nZShhLCBiLCBjKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBub3QgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQotCi0gICAgICAgIHNlcSA9IGxpc3QocmFuZ2UoYiwgYSwgLWMpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCi0KLSAgICAgICAgc2VxID0gbGlzdChyYW5nZSgtYSwgLWIsIC1jKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC1hIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC1iIG5vdCBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMSwgMiwgMywgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZ2UsIDEsIDIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmdlLCBhLCBhICsgMSwgaW50KDApKQotCi0gICAgICAgIGNsYXNzIGJhZHplcm8oaW50KToKLSAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgotICAgICAgICAgICAgX19uZV9fID0gX19sdF9fID0gX19ndF9fID0gX19sZV9fID0gX19nZV9fID0gX19lcV9fCi0KLSAgICAgICAgIyBYWFggVGhpcyB3b24ndCAoYnV0IHNob3VsZCEpIHJhaXNlIFJ1bnRpbWVFcnJvciBpZiBhIGlzIGFuIGludC4uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJhbmdlLCBhLCBhICsgMSwgYmFkemVybygxKSkKLSAgICAgICAgIiIiCi0KLSAgICAgICAgIyBSZWplY3QgZmxvYXRzIHdoZW4gaXQgd291bGQgcmVxdWlyZSBQeUxvbmdzIHRvIHJlcHJlc2VudC4KLSAgICAgICAgIyAoc21hbGxlciBmbG9hdHMgc3RpbGwgYWNjZXB0ZWQsIGJ1dCBkZXByZWNhdGVkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMWUxMDEsIDFlMTAxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsICJzcGFtIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgNDIsICJzcGFtIikKLQotICAgICAgICAjTkVBTCBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByYW5nZSwgLXN5cy5tYXhzaXplLCBzeXMubWF4c2l6ZSkKLSAgICAgICAgI05FQUwgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcmFuZ2UsIDAsIDIqc3lzLm1heHNpemUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGVuLCByYW5nZSgwLCBzeXMubWF4c2l6ZSoqMTApKQotCiAgICAgZGVmIHRlc3RfaW5wdXQoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVfdGVzdGZpbGUoKQogICAgICAgICBmcCA9IG9wZW4oVEVTVEZOLCAncicpCkBAIC0xMDMyLDcgKzk2MSw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBmcAogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IEJpdEJ1Y2tldCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0KCksICIxKzEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCgndGVzdGluZ1xuJyksICIxKzEiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnB1dCgndGVzdGluZ1xuJyksICdEZWFyIEpvaG4nKQogCkBAIC0xMDYzLDcgKzk5MSw2IEBACiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKCcnKSwgJ1wnXCcnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoMCksICcwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKDApLCAnMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigoKSksICcoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihbXSksICdbXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih7fSksICd7fScpCkBAIC0xMTk3LDYgKzExMjQsMTAgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1bSwgQmFkU2VxKCkpCiAKKyAgICAgICAgZW1wdHkgPSBbXQorICAgICAgICBzdW0oKFt4XSBmb3IgeCBpbiByYW5nZSgxMCkpLCBlbXB0eSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbXB0eSwgW10pCisKICAgICBkZWYgdGVzdF90eXBlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoJycpLCAgdHlwZSgnMTIzJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodHlwZSgnJyksIHR5cGUoKCkpKQpAQCAtMTIxNCwxNCArMTE0NSwxOSBAQAogICAgICAgICBiID0gMgogICAgICAgICByZXR1cm4gdmFycygpCiAKKyAgICBjbGFzcyBDX2dldF92YXJzKG9iamVjdCk6CisgICAgICAgIGRlZiBnZXREaWN0KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHsnYSc6Mn0KKyAgICAgICAgX19kaWN0X18gPSBwcm9wZXJ0eShmZ2V0PWdldERpY3QpCisKICAgICBkZWYgdGVzdF92YXJzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCh2YXJzKCkpLCBzZXQoZGlyKCkpKQotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhcnMoc3lzKSksIHNldChkaXIoc3lzKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfdmFyc19mMCgpLCB7fSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF92YXJzX2YyKCksIHsnYSc6IDEsICdiJzogMn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdmFycywgNDIsIDQyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHZhcnMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc2VsZi5DX2dldF92YXJzKCkpLCB7J2EnOjJ9KQogCiAgICAgZGVmIHRlc3RfemlwKHNlbGYpOgogICAgICAgICBhID0gKDEsIDIsIDMpCkBAIC0xMjY3LDYgKzEyMDMsMTE2IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxpc3QsIHppcChCYWRTZXEoKSwgQmFkU2VxKCkpKQogCisgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGJhc2ljIG1hY2hpbmVyeSBvZiB0aGUgZm9ybWF0KCkgYnVpbHRpbi4gIERvbid0IHRlc3QKKyAgICAgICAgIyAgdGhlIHNwZWNpZmljcyBvZiB0aGUgdmFyaW91cyBmb3JtYXR0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDMsICcnKSwgJzMnKQorCisgICAgICAgICMgUmV0dXJucyBzb21lIGNsYXNzZXMgdG8gdXNlIGZvciB2YXJpb3VzIHRlc3RzLiAgVGhlcmUncworICAgICAgICAjICBhbiBvbGQtc3R5bGUgdmVyc2lvbiwgYW5kIGEgbmV3LXN0eWxlIHZlcnNpb24KKyAgICAgICAgZGVmIGNsYXNzZXNfbmV3KCk6CisgICAgICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21BKEEpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgY2xhc3MgU2ltcGxlKG9iamVjdCk6IHBhc3MKKyAgICAgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU2ltcGxlKFNpbXBsZSk6CisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgICAgICAgICAgZGVmIF9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyKHNlbGYueCkgKyBmb3JtYXRfc3BlYworICAgICAgICAgICAgY2xhc3MgRGVyaXZlZEZyb21TaW1wbGUyKERlcml2ZWRGcm9tU2ltcGxlKTogcGFzcworICAgICAgICAgICAgcmV0dXJuIEEsIERlcml2ZWRGcm9tQSwgRGVyaXZlZEZyb21TaW1wbGUsIERlcml2ZWRGcm9tU2ltcGxlMgorCisgICAgICAgIGRlZiBjbGFzc190ZXN0KEEsIERlcml2ZWRGcm9tQSwgRGVyaXZlZEZyb21TaW1wbGUsIERlcml2ZWRGcm9tU2ltcGxlMik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChBKDMpLCAnc3BlYycpLCAnM3NwZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21BKDQpLCAnc3BlYycpLCAnNHNwZWMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21TaW1wbGUoNSksICdhYmMnKSwgJzVhYmMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoRGVyaXZlZEZyb21TaW1wbGUyKDEwKSwgJ2FiY2RlZicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTBhYmNkZWYnKQorCisgICAgICAgIGNsYXNzX3Rlc3QoKmNsYXNzZXNfbmV3KCkpCisKKyAgICAgICAgZGVmIGVtcHR5X2Zvcm1hdF9zcGVjKHZhbHVlKToKKyAgICAgICAgICAgICMgdGVzdCB0aGF0OgorICAgICAgICAgICAgIyAgZm9ybWF0KHgsICcnKSA9PSBzdHIoeCkKKyAgICAgICAgICAgICMgIGZvcm1hdCh4KSA9PSBzdHIoeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KHZhbHVlLCAiIiksIHN0cih2YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh2YWx1ZSksIHN0cih2YWx1ZSkpCisKKyAgICAgICAgIyBmb3IgYnVpbHRpbiB0eXBlcywgZm9ybWF0KHgsICIiKSA9PSBzdHIoeCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoMTcqKjEzKQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygxLjApCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKDMuMTQxNWUxMDQpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKC0zLjE0MTVlMTA0KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYygzLjE0MTVlLTEwNCkKKyAgICAgICAgZW1wdHlfZm9ybWF0X3NwZWMoLTMuMTQxNWUtMTA0KQorICAgICAgICBlbXB0eV9mb3JtYXRfc3BlYyhvYmplY3QpCisgICAgICAgIGVtcHR5X2Zvcm1hdF9zcGVjKE5vbmUpCisKKyAgICAgICAgIyBUeXBlRXJyb3IgYmVjYXVzZSBzZWxmLl9fZm9ybWF0X18gcmV0dXJucyB0aGUgd3JvbmcgdHlwZQorICAgICAgICBjbGFzcyBCYWRGb3JtYXRSZXN1bHQ6CisgICAgICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDEuMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZvcm1hdCwgQmFkRm9ybWF0UmVzdWx0KCksICIiKQorCisgICAgICAgICMgVHlwZUVycm9yIGJlY2F1c2UgZm9ybWF0X3NwZWMgaXMgbm90IHVuaWNvZGUgb3Igc3RyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBvYmplY3QoKSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmb3JtYXQsIG9iamVjdCgpLCBvYmplY3QoKSkKKworICAgICAgICAjIHRlc3RzIGZvciBvYmplY3QuX19mb3JtYXRfXyByZWFsbHkgYmVsb25nIGVsc2V3aGVyZSwgYnV0CisgICAgICAgICMgIHRoZXJlJ3Mgbm8gZ29vZCBwbGFjZSB0byBwdXQgdGhlbQorICAgICAgICB4ID0gb2JqZWN0KCkuX19mb3JtYXRfXygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHguc3RhcnRzd2l0aCgnPG9iamVjdCBvYmplY3QgYXQnKSkKKworICAgICAgICAjIGZpcnN0IGFyZ3VtZW50IHRvIG9iamVjdC5fX2Zvcm1hdF9fIG11c3QgYmUgc3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb2JqZWN0KCkuX19mb3JtYXRfXywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvYmplY3QoKS5fX2Zvcm1hdF9fLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvYmplY3QoKS5fX2Zvcm1hdF9fLCBOb25lKQorCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBJc3N1ZSAjNzk5NDogb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzCisgICAgICAgICMgIHBlbmRpbmcgZGVwcmVjYXRlZAorICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2Vfd2FybmluZyk6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIiwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBmb3JtYXQob2JqLCBmbXRfc3RyKQorICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlX3dhcm5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdbMF0ubWVzc2FnZSwgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJywgc3RyKHdbMF0ubWVzc2FnZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorCisgICAgICAgIGZtdF9zdHJzID0gWycnLCAncyddCisKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIGZtdF9zdHIpOgorICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQoJycsIGZtdF9zdHIpCisKKyAgICAgICAgZm9yIGZtdF9zdHIgaW4gZm10X3N0cnM6CisgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhBKCksIGZtdF9zdHIsIEZhbHNlKQorCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZvciBjbHMgaW4gW29iamVjdCwgQiwgQ106CisgICAgICAgICAgICBmb3IgZm10X3N0ciBpbiBmbXRfc3RyczoKKyAgICAgICAgICAgICAgICB0ZXN0X2RlcHJlY2F0ZWRfZm9ybWF0X3N0cmluZyhjbHMoKSwgZm10X3N0ciwgbGVuKGZtdF9zdHIpICE9IDApCisgICAgICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBjYW4gdGFrZSBhIHN1YmNsYXNzIG9mIHN0ciBhcyBhIGZvcm1hdCBzcGVjCisgICAgICAgIGNsYXNzIERlcml2ZWRGcm9tU3RyKHN0cik6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMCwgRGVyaXZlZEZyb21TdHIoJzEwJykpLCAnICAgICAgICAgMCcpCisKICAgICBkZWYgdGVzdF9iaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluKDApLCAnMGIwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW4oMSksICcwYjEnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKaW5kZXggYTFlMDhjYy4uNWVhYjhmNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CkBAIC05LDE1ICs5LDI4IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCBjb3B5Ci1pbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCB0ZXN0LnN0cmluZ190ZXN0cwogaW1wb3J0IHRlc3QuYnVmZmVyX3Rlc3RzCiAKKworaWYgc3lzLmZsYWdzLmJ5dGVzX3dhcm5pbmc6CisgICAgZGVmIGNoZWNrX2J5dGVzX3dhcm5pbmdzKGZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgIHJldHVybiB3cmFwcGVyCitlbHNlOgorICAgICMgbm8tb3AKKyAgICBkZWYgY2hlY2tfYnl0ZXNfd2FybmluZ3MoZnVuYyk6CisgICAgICAgIHJldHVybiBmdW5jCisKKwogY2xhc3MgSW5kZXhhYmxlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0wKToKICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCkBAIC0yNywxNyArNDAsMTggQEAKIAogY2xhc3MgQmFzZUJ5dGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2FybmluZ19maWx0ZXJzID0gd2FybmluZ3MuZmlsdGVyc1s6XQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy5maWx0ZXJzID0gc2VsZi53YXJuaW5nX2ZpbHRlcnMKLQogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGIpLCBzZWxmLnR5cGUydGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fY2xhc3NfXywgc2VsZi50eXBlMnRlc3QpCiAKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBhID0gc2VsZi50eXBlMnRlc3QoYiJhYmNkIikKKyAgICAgICAgZm9yIGNvcHlfbWV0aG9kIGluIChjb3B5LmNvcHksIGNvcHkuZGVlcGNvcHkpOgorICAgICAgICAgICAgYiA9IGNvcHlfbWV0aG9kKGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoYSksIHR5cGUoYikpCisKICAgICBkZWYgdGVzdF9lbXB0eV9zZXF1ZW5jZShzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDApCkBAIC0xMjAsMTQgKzEzNCwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIzIDwgIGIyKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIzIDw9IGIyKQogCisgICAgQGNoZWNrX2J5dGVzX3dhcm5pbmdzCiAgICAgZGVmIHRlc3RfY29tcGFyZV90b19zdHIoc2VsZik6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgQnl0ZXNXYXJuaW5nKQogICAgICAgICAjIEJ5dGUgY29tcGFyaXNvbnMgd2l0aCB1bmljb2RlIHNob3VsZCBhbHdheXMgZmFpbCEKLSAgICAgICAgIyBUZXN0IHRoaXMgZm9yIGFsbCBleHBlY3RlZCBieXRlIG9yZGVycyBhbmQgVW5pY29kZSBjaGFyYWN0ZXIgc2l6ZXMKKyAgICAgICAgIyBUZXN0IHRoaXMgZm9yIGFsbCBleHBlY3RlZCBieXRlIG9yZGVycyBhbmQgVW5pY29kZSBjaGFyYWN0ZXIKKyAgICAgICAgIyBzaXplcy4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlwwYVwwYlwwYyIpID09ICJhYmMiLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlwwXDBcMGFcMFwwXDBiXDBcMFwwYyIpID09ICJhYmMiLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIlwwXDBcMGFcMFwwXDBiXDBcMFwwYyIpID09ICJhYmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiYVwwYlwwY1wwIikgPT0gImFiYyIsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiYVwwXDBcMGJcMFwwXDBjXDBcMFwwIikgPT0gImFiYyIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiYVwwXDBcMGJcMFwwXDBjXDBcMFwwIikgPT0gImFiYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSA9PSBzdHIoKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoKSAhPSBzdHIoKSwgVHJ1ZSkKIApAQCAtMTg3LDYgKzIwNCw4IEBACiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChzYW1wbGUsICJsYXRpbjEiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIGIuZGVjb2RlLCAidXRmOCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5kZWNvZGUoInV0ZjgiLCAiaWdub3JlIiksICJIZWxsbyB3b3JsZFxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRlY29kZShlcnJvcnM9Imlnbm9yZSIsIGVuY29kaW5nPSJ1dGY4IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvIHdvcmxkXG4iKQogCiAgICAgZGVmIHRlc3RfZnJvbV9pbnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdCgwKQpAQCAtMjEzLDM1ICsyMzIsMzYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiICogMy4xNCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAzLjE0ICogYikKICAgICAgICAgICAgICMgWFhYIFNob3VsZG4ndCBieXRlcyBhbmQgYnl0ZWFycmF5IGFncmVlIG9uIHdoYXQgdG8gcmFpc2U/Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBiICogc3lzLm1heHNpemUpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvcikpOgorICAgICAgICAgICAgICAgIGMgPSBiICogc3lzLm1heHNpemUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yKSk6CisgICAgICAgICAgICAgICAgYiAqPSBzeXMubWF4c2l6ZQogCiAgICAgZGVmIHRlc3RfcmVwZWF0XzFjaGFyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIneCcpKjEwMCwgc2VsZi50eXBlMnRlc3QoW29yZCgneCcpXSoxMDApKQogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcmQoJ2EnKSBpbiBiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaW50KG9yZCgnYScpKSBpbiBiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIwMCBpbiBiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDIwMCBpbiBiKQorICAgICAgICBzZWxmLmFzc2VydEluKG9yZCgnYScpLCBiKQorICAgICAgICBzZWxmLmFzc2VydEluKGludChvcmQoJ2EnKSksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMjAwLCBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IDMwMCBpbiBiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IC0xIGluIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluIGIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBmbG9hdChvcmQoJ2EnKSkgaW4gYikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6ICJhIiBpbiBiKQogICAgICAgICBmb3IgZiBpbiBieXRlcywgYnl0ZWFycmF5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYoYiIiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYoYiJhIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmKGIiYiIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZihiImMiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYoYiJhYiIpIGluIGIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZihiImJjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmKGIiYWJjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZihiImFjIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZihiImQiKSBpbiBiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmKGIiZGFiIikgaW4gYikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZihiImFiZCIpIGluIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImEiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImIiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImMiKSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZihiImFiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYoYiJiYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmKGIiYWJjIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJhYyIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiZCIpLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmKGIiZGFiIiksIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGYoYiJhYmQiKSwgYikKIAogICAgIGRlZiB0ZXN0X2Zyb21oZXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QuZnJvbWhleCkKQEAgLTI2OSwxMyArMjg5LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChiIi4iKS5qb2luKFtiImFiIiwgYiJjZCJdKSwgYiJhYi5jZCIpCiAgICAgICAgICMgWFhYIG1vcmUuLi4KIAotICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgotICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidwYXJyb3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoJ3AnKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmluZGV4KCdycicpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuaW5kZXgoJ3QnKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiBiLmluZGV4KCd3JykpCi0KICAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuY291bnQoYidpJyksIDQpCkBAIC0yOTAsMTIgKzMwMyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLnN0YXJ0c3dpdGgoYiJoIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5zdGFydHN3aXRoKGIiaGVsbG93IikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5zdGFydHN3aXRoKGIiaGEiKSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBiLnN0YXJ0c3dpdGgoW2InaCddKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIGV4YyA9IHN0cihlcnIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ3N0YXJ0c3dpdGggdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCcpCisgICAgICAgIGV4YyA9IHN0cihjbS5leGNlcHRpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2J5dGVzJywgZXhjKQogICAgICAgICBzZWxmLmFzc2VydEluKCd0dXBsZScsIGV4YykKIApAQCAtMzA3LDEyICszMTcsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5lbmRzd2l0aChiIm8iKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiLmVuZHN3aXRoKGIid2hlbGxvIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5lbmRzd2l0aChiIm5vIikpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgYi5lbmRzd2l0aChbYidvJ10pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgZXhjID0gc3RyKGVycikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnZW5kc3dpdGggdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCcpCisgICAgICAgIGV4YyA9IHN0cihjbS5leGNlcHRpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2J5dGVzJywgZXhjKQogICAgICAgICBzZWxmLmFzc2VydEluKCd0dXBsZScsIGV4YykKIApAQCAtMzc3LDYgKzM4NCwxMCBAQAogICAgIGRlZiB0ZXN0X3NwbGl0X3N0cmluZ19lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdChiJ2EgYicpLnNwbGl0LCAnICcpCiAKKyAgICBkZWYgdGVzdF9zcGxpdF91bmljb2Rld2hpdGVzcGFjZShzZWxmKToKKyAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGIiXHgwOVx4MEFceDBCXHgwQ1x4MERceDFDXHgxRFx4MUVceDFGIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnNwbGl0KCksIFtiJ1x4MWNceDFkXHgxZVx4MWYnXSkKKwogICAgIGRlZiB0ZXN0X3JzcGxpdChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnNwbGl0KGInaScpLCBbYidtJywgYidzcycsIGInc3MnLCBiJ3BwJywgYicnXSkKQEAgLTQwMCwxOCArNDExLDE4IEBACiAKICAgICBkZWYgdGVzdF9yc3BsaXRfdW5pY29kZXdoaXRlc3BhY2Uoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiIlx4MDlceDBBXHgwQlx4MENceDBEXHgxQ1x4MURceDFFXHgxRiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5zcGxpdCgpLCBbYidceDFjXHgxZFx4MWVceDFmJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5yc3BsaXQoKSwgW2InXHgxY1x4MWRceDFlXHgxZiddKQogCiAgICAgZGVmIHRlc3RfcGFydGl0aW9uKHNlbGYpOgogICAgICAgICBiID0gc2VsZi50eXBlMnRlc3QoYidtaXNzaXNzaXBwaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5wYXJ0aXRpb24oYidzcycpLCAoYidtaScsIGInc3MnLCBiJ2lzc2lwcGknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYid3JyksIChiJycsIGInJywgYidtaXNzaXNzaXBwaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucGFydGl0aW9uKGIndycpLCAoYidtaXNzaXNzaXBwaScsIGInJywgYicnKSkKIAogICAgIGRlZiB0ZXN0X3JwYXJ0aXRpb24oc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidzcycpLCAoYidtaXNzaScsIGInc3MnLCBiJ2lwcGknKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnJwYXJ0aXRpb24oYidpJyksIChiJ21pc3Npc3NpcHAnLCBiJ2knLCBiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucnBhcnRpdGlvbihiJ3cnKSwgKGInJywgYicnLCBiJ21pc3Npc3NpcHBpJykpCiAKICAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CkBAIC01MjIsMTkgKzUzMywxOSBAQAogICAgICAgICAjIGlzc3VlIDExODI4CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ2hlbGxvJykKICAgICAgICAgeCA9IHNlbGYudHlwZTJ0ZXN0KGIneCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYmZpbmRcYicsIGIuZmluZCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIHInXGJmaW5kXGInLCBiLmZpbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFR5cGVFcnJvciwgcidcYnJmaW5kXGInLCBiLnJmaW5kLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidcYnJmaW5kXGInLCBiLnJmaW5kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJpbmRleFxiJywgYi5pbmRleCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIHInXGJpbmRleFxiJywgYi5pbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xicmluZGV4XGInLCBiLnJpbmRleCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIHInXGJyaW5kZXhcYicsIGIucmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LCBOb25lLCBOb25lLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChUeXBlRXJyb3IsIHInXGJjb3VudFxiJywgYi5jb3VudCwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIHInXGJjb3VudFxiJywgYi5jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xic3RhcnRzd2l0aFxiJywgYi5zdGFydHN3aXRoLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgcidcYnN0YXJ0c3dpdGhcYicsIGIuc3RhcnRzd2l0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCwgTm9uZSwgTm9uZSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoVHlwZUVycm9yLCByJ1xiZW5kc3dpdGhcYicsIGIuZW5kc3dpdGgsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCByJ1xiZW5kc3dpdGhcYicsIGIuZW5kc3dpdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsIE5vbmUsIE5vbmUsIE5vbmUpCiAKIApAQCAtNTU4LDYgKzU2OSwyNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnl0ZXMsIEEoKSkKIAorICAgICMgVGVzdCBQeUJ5dGVzX0Zyb21Gb3JtYXQoKQorICAgIGRlZiB0ZXN0X2Zyb21fZm9ybWF0KHNlbGYpOgorICAgICAgICB0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBjX2ludCwgY19jaGFyX3AKKyAgICAgICAgUHlCeXRlc19Gcm9tRm9ybWF0ID0gcHl0aG9uYXBpLlB5Qnl0ZXNfRnJvbUZvcm1hdAorICAgICAgICBQeUJ5dGVzX0Zyb21Gb3JtYXQucmVzdHlwZSA9IHB5X29iamVjdAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlCeXRlc19Gcm9tRm9ybWF0KGInZm9ybWF0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JtYXQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlCeXRlc19Gcm9tRm9ybWF0KGInJScpLCBiJyUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5Qnl0ZXNfRnJvbUZvcm1hdChiJyUlJyksIGInJScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlCeXRlc19Gcm9tRm9ybWF0KGInJSVzJyksIGInJXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5Qnl0ZXNfRnJvbUZvcm1hdChiJ1slJV0nKSwgYidbJV0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5Qnl0ZXNfRnJvbUZvcm1hdChiJyUlJWMnLCBjX2ludChvcmQoJ18nKSkpLCBiJyVfJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFB5Qnl0ZXNfRnJvbUZvcm1hdChiJ2M6JWMnLCBjX2ludCgyNTUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ2M6XHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlCeXRlc19Gcm9tRm9ybWF0KGInczolcycsIGNfY2hhcl9wKGInY3N0cicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6Y3N0cicpCisKIAogY2xhc3MgQnl0ZUFycmF5VGVzdChCYXNlQnl0ZXNUZXN0KToKICAgICB0eXBlMnRlc3QgPSBieXRlYXJyYXkKQEAgLTc5NSw3ICs4MjcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIucG9wKDApLCBvcmQoJ3cnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnBvcCgtMiksIG9yZCgncicpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCBsYW1iZGE6IGIucG9wKDEwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGFtYmRhOiBieXRlYXJyYXkoKS5wb3AoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBieXRlYXJyYXkoKS5wb3AoKSkKICAgICAgICAgIyB0ZXN0IGZvciBpc3N1ZSAjNjg0NgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVhcnJheShiJ1x4ZmYnKS5wb3AoKSwgMHhmZikKIApAQCAtODkwLDI3ICs5MjIsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGRlbHNsaWNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIG9yaWcpCiAKLSAgICBkZWYgdGVzdF9lbXB0eV9ieXRlYXJyYXkoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzc1NjE6IG9wZXJhdGlvbnMgb24gZW1wdHkgYnl0ZWFycmF5cyBjb3VsZCBjcmFzaCBpbiBtYW55Ci0gICAgICAgICMgc2l0dWF0aW9ucywgZHVlIHRvIGEgZnJhZ2lsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLSAgICAgICAgIyBQeUJ5dGVBcnJheV9BU19TVFJJTkcoKSBDIG1hY3JvLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsIGJ5dGVhcnJheShiJycpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIG9zLm1rZGlyLCBieXRlYXJyYXkoYicnKSkKLQogCiBjbGFzcyBBc3NvcnRlZEJ5dGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIwogICAgICMgVGVzdCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBieXRlcyBhbmQgYnl0ZWFycmF5CiAgICAgIwogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLndhcm5pbmdfZmlsdGVycyA9IHdhcm5pbmdzLmZpbHRlcnNbOl0KLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgd2FybmluZ3MuZmlsdGVycyA9IHNlbGYud2FybmluZ19maWx0ZXJzCi0KKyAgICBAY2hlY2tfYnl0ZXNfd2FybmluZ3MKICAgICBkZWYgdGVzdF9yZXByX3N0cihzZWxmKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCiAgICAgICAgIGZvciBmIGluIHN0ciwgcmVwcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihieXRlYXJyYXkoKSksICJieXRlYXJyYXkoYicnKSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYnl0ZWFycmF5KFswXSkpLCAiYnl0ZWFycmF5KGInXFx4MDAnKSIpCkBAIC05NTAsOSArOTY5LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhiImFiYyIpIDw9IGIiYWIiLCBGYWxzZSkKIAogICAgIGRlZiB0ZXN0X2RvYyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5dGVhcnJheS5fX2RvY19fICE9IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGJ5dGVhcnJheS5fX2RvY19fKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYnl0ZWFycmF5Ll9fZG9jX18uc3RhcnRzd2l0aCgiYnl0ZWFycmF5KCIpLCBieXRlYXJyYXkuX19kb2NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5dGVzLl9fZG9jX18gIT0gTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoYnl0ZXMuX19kb2NfXykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJ5dGVzLl9fZG9jX18uc3RhcnRzd2l0aCgiYnl0ZXMoIiksIGJ5dGVzLl9fZG9jX18pCiAKICAgICBkZWYgdGVzdF9mcm9tX2J5dGVhcnJheShzZWxmKToKQEAgLTk2MSw4ICs5ODAsOCBAQAogICAgICAgICBiID0gYnl0ZWFycmF5KGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBieXRlYXJyYXkoc2FtcGxlKSkKIAorICAgIEBjaGVja19ieXRlc193YXJuaW5ncwogICAgIGRlZiB0ZXN0X3RvX3N0cihzZWxmKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGInJyksICJiJyciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ3gnKSwgImIneCciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ1x4ODAnKSwgImInXFx4ODAnIikKQEAgLTEwMTQsMTQgKzEwMzMsMTggQEAKIAogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CiAgICAgICAgIGlmIHN5cy5mbGFncy5ieXRlc193YXJuaW5nOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIEJ5dGVzV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ5dGVzV2FybmluZywgb3BlcmF0b3IuZXEsIGInJywgJycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCeXRlc1dhcm5pbmcsIG9wZXJhdG9yLm5lLCBiJycsICcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnl0ZXNXYXJuaW5nLCBvcGVyYXRvci5lcSwgYnl0ZWFycmF5KGInJyksICcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnl0ZXNXYXJuaW5nLCBvcGVyYXRvci5uZSwgYnl0ZWFycmF5KGInJyksICcnKQorICAgICAgICAgICAgZGVmIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5zdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgQnl0ZXNXYXJuaW5nKSkKKyAgICAgICAgICAgIHdpdGggYnl0ZXNfd2FybmluZygpOgorICAgICAgICAgICAgICAgIGInJyA9PSAnJworICAgICAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAgICAgYicnICE9ICcnCisgICAgICAgICAgICB3aXRoIGJ5dGVzX3dhcm5pbmcoKToKKyAgICAgICAgICAgICAgICBieXRlYXJyYXkoYicnKSA9PSAnJworICAgICAgICAgICAgd2l0aCBieXRlc193YXJuaW5nKCk6CisgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInJykgIT0gJycKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgc2VsZi5za2lwVGVzdCgiQnl0ZXNXYXJuaW5nIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0OiB1c2UgLWJiIG9wdGlvbiIpCi0gICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJCeXRlc1dhcm5pbmcgaXMgbmVlZGVkIGZvciB0aGlzIHRlc3Q6IHVzZSAtYmIgb3B0aW9uIikKIAogICAgICMgT3B0aW1pemF0aW9uczoKICAgICAjIF9faXRlcl9fPyAob3B0aW1pemF0aW9uKQpAQCAtMTA1Myw3ICsxMDc2LDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhuYW1lKycgcmV0dXJuZWQgc2VsZiBvbiBhIG11dGFibGUgb2JqZWN0JykKLQorICAgICAgICBmb3IgZXhwciBpbiAoJ3ZhbC5zcGxpdCgpWzBdJywgJ3ZhbC5yc3BsaXQoKVswXScsCisgICAgICAgICAgICAgICAgICAgICAndmFsLnBhcnRpdGlvbihiIi4iKVswXScsICd2YWwucnBhcnRpdGlvbihiIi4iKVsyXScsCisgICAgICAgICAgICAgICAgICAgICAndmFsLnNwbGl0bGluZXMoKVswXScsICd2YWwucmVwbGFjZShiIiIsIGIiIiknKToKKyAgICAgICAgICAgIG5ld3ZhbCA9IGV2YWwoZXhwcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBuZXd2YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodmFsIGlzIG5vdCBuZXd2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcisnIHJldHVybmVkIHZhbCBvbiBhIG11dGFibGUgb2JqZWN0JykKIAogY2xhc3MgRml4ZWRTdHJpbmdUZXN0KHRlc3Quc3RyaW5nX3Rlc3RzLkJhc2VUZXN0KToKIApAQCAtMTA4MSwxNyArMTExMCwxNCBAQAogICAgIHR5cGUydGVzdCA9IGJ5dGVzCiAKIAotY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3MoYnl0ZWFycmF5KToKLSAgICBwYXNzCi0KLWNsYXNzIEJ5dGVBcnJheVN1YmNsYXNzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdWJjbGFzc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEJ5dGVBcnJheVN1YmNsYXNzLCBieXRlYXJyYXkpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShCeXRlQXJyYXlTdWJjbGFzcygpLCBieXRlYXJyYXkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLnN1YmNsYXNzMnRlc3QsIHNlbGYudHlwZTJ0ZXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuc3ViY2xhc3MydGVzdCgpLCBzZWxmLnR5cGUydGVzdCkKIAogICAgICAgICBhLCBiID0gYiJhYmNkIiwgYiJlZmdoIgotICAgICAgICBfYSwgX2IgPSBCeXRlQXJyYXlTdWJjbGFzcyhhKSwgQnl0ZUFycmF5U3ViY2xhc3MoYikKKyAgICAgICAgX2EsIF9iID0gc2VsZi5zdWJjbGFzczJ0ZXN0KGEpLCBzZWxmLnN1YmNsYXNzMnRlc3QoYikKIAogICAgICAgICAjIHRlc3QgY29tcGFyaXNvbiBvcGVyYXRvcnMgd2l0aCBzdWJjbGFzcyBpbnN0YW5jZXMKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9hID09IF9hKQpAQCAtMTExNCwxOSArMTE0MCwxOSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSBqb2luIHJldHVybnMgYSBORVcgb2JqZWN0IGZvciBzaW5nbGUgaXRlbSBzZXF1ZW5jZXMKICAgICAgICAgIyBpbnZvbHZpbmcgYSBzdWJjbGFzcy4KICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpdCBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KLSAgICAgICAgczEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQotICAgICAgICBzMiA9IGJ5dGVhcnJheSgpLmpvaW4oW3MxXSkKKyAgICAgICAgczEgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYiJhYmNkIikKKyAgICAgICAgczIgPSBzZWxmLnR5cGUydGVzdCgpLmpvaW4oW3MxXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMxIGlzIG5vdCBzMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoczIpIGlzIGJ5dGVhcnJheSwgdHlwZShzMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHMyKSBpcyBzZWxmLnR5cGUydGVzdCwgdHlwZShzMikpCiAKICAgICAgICAgIyBUZXN0IHJldmVyc2UsIGNhbGxpbmcgam9pbiBvbiBzdWJjbGFzcwogICAgICAgICBzMyA9IHMxLmpvaW4oW2IiYWJjZCJdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMykgaXMgYnl0ZWFycmF5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzMykgaXMgc2VsZi50eXBlMnRlc3QpCiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6Ci0gICAgICAgIGEgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImFiY2QiKQorICAgICAgICBhID0gc2VsZi5zdWJjbGFzczJ0ZXN0KGIiYWJjZCIpCiAgICAgICAgIGEueCA9IDEwCi0gICAgICAgIGEueSA9IEJ5dGVBcnJheVN1YmNsYXNzKGIiZWZnaCIpCisgICAgICAgIGEueSA9IHNlbGYuc3ViY2xhc3MydGVzdChiImVmZ2giKQogICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGIgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEsIHByb3RvKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYSksIGlkKGIpKQpAQCAtMTEzNyw5ICsxMTYzLDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhLnkpLCB0eXBlKGIueSkpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgotICAgICAgICBhID0gQnl0ZUFycmF5U3ViY2xhc3MoYiJhYmNkIikKKyAgICAgICAgYSA9IHNlbGYuc3ViY2xhc3MydGVzdChiImFiY2QiKQogICAgICAgICBhLnggPSAxMAotICAgICAgICBhLnkgPSBCeXRlQXJyYXlTdWJjbGFzcyhiImVmZ2giKQorICAgICAgICBhLnkgPSBzZWxmLnN1YmNsYXNzMnRlc3QoYiJlZmdoIikKICAgICAgICAgZm9yIGNvcHlfbWV0aG9kIGluIChjb3B5LmNvcHksIGNvcHkuZGVlcGNvcHkpOgogICAgICAgICAgICAgYiA9IGNvcHlfbWV0aG9kKGEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGEpLCBpZChiKSkKQEAgLTExNDksMjEgKzExNzUsMzggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhKSwgdHlwZShiKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShhLnkpLCB0eXBlKGIueSkpCiAKKworY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3MoYnl0ZWFycmF5KToKKyAgICBwYXNzCisKK2NsYXNzIEJ5dGVzU3ViY2xhc3MoYnl0ZXMpOgorICAgIHBhc3MKKworY2xhc3MgQnl0ZUFycmF5U3ViY2xhc3NUZXN0KFN1YmNsYXNzVGVzdCk6CisgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CisgICAgc3ViY2xhc3MydGVzdCA9IEJ5dGVBcnJheVN1YmNsYXNzCisKICAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRlKHNlbGYpOgogICAgICAgICBjbGFzcyBzdWJjbGFzcyhieXRlYXJyYXkpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5ld2FyZz0xLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgICAgICBkZWYgX19pbml0X18obWUsIG5ld2FyZz0xLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5fX2luaXRfXyhtZSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICB4ID0gc3ViY2xhc3MoNCwgYiJhYmNkIikKICAgICAgICAgeCA9IHN1YmNsYXNzKDQsIHNvdXJjZT1iImFiY2QiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGIiYWJjZCIpCiAgICAgICAgIHggPSBzdWJjbGFzcyhuZXdhcmc9NCwgc291cmNlPWIiYWJjZCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgYiJhYmNkIikKIAogCitjbGFzcyBCeXRlc1N1YmNsYXNzVGVzdChTdWJjbGFzc1Rlc3QpOgorICAgIHR5cGUydGVzdCA9IGJ5dGVzCisgICAgc3ViY2xhc3MydGVzdCA9IEJ5dGVzU3ViY2xhc3MKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgQnl0ZXNUZXN0LCBBc3NvcnRlZEJ5dGVzVGVzdCwgQnl0ZXNBc1N0cmluZ1Rlc3QsCi0gICAgICAgIEJ5dGVBcnJheVRlc3QsIEJ5dGVBcnJheUFzU3RyaW5nVGVzdCwgQnl0ZUFycmF5U3ViY2xhc3NUZXN0LAotICAgICAgICBCeXRlYXJyYXlQRVAzMTM3VGVzdCkKKyAgICAgICAgQnl0ZUFycmF5VGVzdCwgQnl0ZUFycmF5QXNTdHJpbmdUZXN0LCBCeXRlc1N1YmNsYXNzVGVzdCwKKyAgICAgICAgQnl0ZUFycmF5U3ViY2xhc3NUZXN0LCBCeXRlYXJyYXlQRVAzMTM3VGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iejIucHkgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQppbmRleCBmYmY4ZmZmLi5iZTM1NTgwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J6Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J6Mi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KIApAQCAtNywxMSArNywxNCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZworCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogIyBTa2lwIHRlc3RzIGlmIHRoZSBiejIgbW9kdWxlIGRvZXNuJ3QgZXhpc3QuCiBiejIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2J6MicpCi0KIGZyb20gYnoyIGltcG9ydCBCWjJGaWxlLCBCWjJDb21wcmVzc29yLCBCWjJEZWNvbXByZXNzb3IKIAogaGFzX2NtZGxpbmVfYnVuemlwMiA9IHN5cy5wbGF0Zm9ybSBub3QgaW4gKCJ3aW4zMiIsICJvczJlbXgiKQpAQCAtNTIsNzYgKzU1LDY4IEBACiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAogICAgIGRlZiBjcmVhdGVUZW1wRmlsZShzZWxmLCBjcmxmPTApOgotICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKQotICAgICAgICBpZiBjcmxmOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuREFUQV9DUkxGCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgaWYgY3JsZjoKKyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5EQVRBX0NSTEYKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuREFUQQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQogCiAgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWQsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQpCiAKICAgICBkZWYgdGVzdFJlYWQwKHNlbGYpOgogICAgICAgICAjIFRlc3QgQkJaMkZpbGUucmVhZCgwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5yZWFkLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgwKSwgYiIiKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZCwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDApLCBiIiIpCiAKICAgICBkZWYgdGVzdFJlYWRDaHVuazEwKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUucmVhZCgpIGluIGNodW5rcyBvZiAxMCBieXRlcyIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHRleHQgPSBiJycKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHN0ciA9IGJ6MmYucmVhZCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBzdHI6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHRleHQgKz0gc3RyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc2VsZi5URVhUKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICB0ZXh0ID0gYicnCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHN0ciA9IGJ6MmYucmVhZCgxMCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RyOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHRleHQgKz0gc3RyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0UmVhZDEwMChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWQoMTAwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKDEwMCksIHNlbGYuVEVYVFs6MTAwXSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoMTAwKSwgc2VsZi5URVhUWzoxMDBdKQogCiAgICAgZGVmIHRlc3RSZWFkTGluZShzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWRsaW5lKCkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmUsIE5vbmUpCi0gICAgICAgIHNpbyA9IEJ5dGVzSU8oc2VsZi5URVhUKQotICAgICAgICBmb3IgbGluZSBpbiBzaW8ucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmUoKSwgbGluZSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lLCBOb25lKQorICAgICAgICAgICAgc2lvID0gQnl0ZXNJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBmb3IgbGluZSBpbiBzaW8ucmVhZGxpbmVzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWRsaW5lKCksIGxpbmUpCiAKICAgICBkZWYgdGVzdFJlYWRMaW5lcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnJlYWRsaW5lcygpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLnJlYWRsaW5lcywgTm9uZSkKLSAgICAgICAgc2lvID0gQnl0ZXNJTyhzZWxmLlRFWFQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZXMoKSwgc2lvLnJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYucmVhZGxpbmVzLCBOb25lKQorICAgICAgICAgICAgc2lvID0gQnl0ZXNJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIHNpby5yZWFkbGluZXMoKSkKIAogICAgIGRlZiB0ZXN0SXRlcmF0b3Ioc2VsZik6CiAgICAgICAgICMgIlRlc3QgaXRlcihCWjJGaWxlKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNpbyA9IEJ5dGVzSU8oc2VsZi5URVhUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcihiejJmKSksIHNpby5yZWFkbGluZXMoKSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgc2lvID0gQnl0ZXNJTyhzZWxmLlRFWFQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXRlcihiejJmKSksIHNpby5yZWFkbGluZXMoKSkKIAogICAgIGRlZiB0ZXN0Q2xvc2VkSXRlcmF0b3JEZWFkbG9jayhzZWxmKToKICAgICAgICAgIyAiVGVzdCB0aGF0IGl0ZXJhdGlvbiBvbiBhIGNsb3NlZCBiejJmaWxlIHJlbGVhc2VzIHRoZSBsb2NrLiIKQEAgLTEzNiwxMDQgKzEzMSw5MSBAQAogCiAgICAgZGVmIHRlc3RXcml0ZShzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlKCkiCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLndyaXRlKQotICAgICAgICBiejJmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3IikgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi53cml0ZSkKKyAgICAgICAgICAgIGJ6MmYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RXcml0ZUNodW5rczEwKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUud3JpdGUoKSB3aXRoIGNodW5rcyBvZiAxMCBieXRlcyIKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBuID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCi0gICAgICAgICAgICBpZiBub3Qgc3RyOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBiejJmLndyaXRlKHN0cikKLSAgICAgICAgICAgIG4gKz0gMQotICAgICAgICBiejJmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgc3RyID0gc2VsZi5URVhUW24qMTA6KG4rMSkqMTBdCisgICAgICAgICAgICAgICAgaWYgbm90IHN0cjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBiejJmLndyaXRlKHN0cikKKyAgICAgICAgICAgICAgICBuICs9IDEKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSksIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0V3JpdGVMaW5lcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLndyaXRlbGluZXMoKSIKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJ6MmYud3JpdGVsaW5lcykKLSAgICAgICAgc2lvID0gQnl0ZXNJTyhzZWxmLlRFWFQpCi0gICAgICAgIGJ6MmYud3JpdGVsaW5lcyhzaW8ucmVhZGxpbmVzKCkpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiejJmLndyaXRlbGluZXMpCisgICAgICAgICAgICBzaW8gPSBCeXRlc0lPKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIGJ6MmYud3JpdGVsaW5lcyhzaW8ucmVhZGxpbmVzKCkpCiAgICAgICAgICMgcGF0Y2ggIzE1MzU1MDAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi53cml0ZWxpbmVzLCBbImEiXSkKLSAgICAgICAgZiA9IG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLCBzZWxmLlRFWFQpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKSwgc2VsZi5URVhUKQogCiAgICAgZGVmIHRlc3RXcml0ZU1ldGhvZHNPblJlYWRPbmx5RmlsZShzZWxmKToKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKQotICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGJ6MmY6CisgICAgICAgICAgICBiejJmLndyaXRlKGIiYWJjIikKIAotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lLCAiciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInIiKSBhcyBiejJmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYnoyZi53cml0ZSwgYiJhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGVsaW5lcywgW2IiYSJdKQogCiAgICAgZGVmIHRlc3RTZWVrRm9yd2FyZChzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoMTUwLCAwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5zZWVrKQotICAgICAgICBiejJmLnNlZWsoMTUwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbMTUwOl0pCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYnoyZi5zZWVrKQorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFsxNTA6XSkKIAogICAgIGRlZiB0ZXN0U2Vla0JhY2t3YXJkcyhzZWxmKToKICAgICAgICAgIyAiVGVzdCBCWjJGaWxlLnNlZWsoLTE1MCwgMSkiCiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQotICAgICAgICBiejJmID0gQloyRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBiejJmLnJlYWQoNTAwKQotICAgICAgICBiejJmLnNlZWsoLTE1MCwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzUwMC0xNTA6XSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgc2VsZi5URVhUWzUwMC0xNTA6XSkKIAogICAgIGRlZiB0ZXN0U2Vla0JhY2t3YXJkc0Zyb21FbmQoc2VsZik6CiAgICAgICAgICMgIlRlc3QgQloyRmlsZS5zZWVrKC0xNTAsIDIpIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFtsZW4oc2VsZi5URVhUKS0xNTA6XSkKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKC0xNTAsIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGVuKHNlbGYuVEVYVCktMTUwOl0pCiAKICAgICBkZWYgdGVzdFNlZWtQb3N0RW5kKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAwMDApIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIGIiIikKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi50ZWxsKCksIGxlbihzZWxmLlRFWFQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnJlYWQoKSwgYiIiKQogCiAgICAgZGVmIHRlc3RTZWVrUG9zdEVuZFR3aWNlKHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygxNTAwMDApIHR3aWNlIgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgbGVuKHNlbGYuVEVYVCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIGIiIikKLSAgICAgICAgYnoyZi5jbG9zZSgpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgYnoyZi5zZWVrKDE1MDAwMCkKKyAgICAgICAgICAgIGJ6MmYuc2VlaygxNTAwMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCBsZW4oc2VsZi5URVhUKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIGIiIikKIAogICAgIGRlZiB0ZXN0U2Vla1ByZVN0YXJ0KHNlbGYpOgogICAgICAgICAjICJUZXN0IEJaMkZpbGUuc2VlaygtMTUwLCAwKSIKICAgICAgICAgc2VsZi5jcmVhdGVUZW1wRmlsZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGJ6MmYuc2VlaygtMTUwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYudGVsbCgpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFQpCi0gICAgICAgIGJ6MmYuY2xvc2UoKQorICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiejJmLnRlbGwoKSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVCkKIAogICAgIGRlZiB0ZXN0T3BlbkRlbChzZWxmKToKICAgICAgICAgIyAiVGVzdCBvcGVuaW5nIGFuZCBkZWxldGluZyBhIGZpbGUgbWFueSB0aW1lcyIKQEAgLTI0OSwxNiArMjMxLDEzIEBACiAgICAgZGVmIHRlc3RCdWcxMTkxMDQzKHNlbGYpOgogICAgICAgICAjIHJlYWRsaW5lcygpIGZvciBmaWxlcyBjb250YWluaW5nIG5vIG5ld2xpbmUKICAgICAgICAgZGF0YSA9IGInQlpoOTFBWSZTWVx4ZDliXHg4OV1ceDAwXHgwMFx4MDBceDAzXHg4MFx4MDRceDAwXHgwMlx4MDBceDBjXHgwMCBceDAwIVx4OWFoM01ceDEzPF1ceGM5XHgxNFx4ZTFCQ2VceDhhJXQnCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpCi0gICAgICAgIGxpbmVzID0gYnoyZi5yZWFkbGluZXMoKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgorICAgICAgICAgICAgbGluZXMgPSBiejJmLnJlYWRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFtiJ1Rlc3QnXSkKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgeGxpbmVzID0gbGlzdChiejJmLnJlYWRsaW5lcygpKQotICAgICAgICBiejJmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgICAgICB4bGluZXMgPSBsaXN0KGJ6MmYucmVhZGxpbmVzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeGxpbmVzLCBbYidUZXN0J10pCiAKICAgICBkZWYgdGVzdENvbnRleHRQcm90b2NvbChzZWxmKToKQEAgLTI4MywxMiArMjYyLDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIjEvMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3RUaHJlYWRpbmcoc2VsZik6CiAgICAgICAgICMgVXNpbmcgYSBCWjJGaWxlIGZyb20gc2V2ZXJhbCB0aHJlYWRzIGRvZXNuJ3QgZGVhZGxvY2sgKGlzc3VlICM3MjA1KS4KICAgICAgICAgZGF0YSA9IGIiMSIgKiAyKioyMAogICAgICAgICBudGhyZWFkcyA9IDEwCi0gICAgICAgIGYgPSBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGRlZiBjb21wKCk6CiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CiAgICAgICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKQEAgLTI5NywyNyArMjc2LDE5IEBACiAgICAgICAgICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgogICAgICAgICAgICAgICAgIHQuam9pbigpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0TWl4ZWRJdGVyYXRpb25SZWFkcyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjODM5NzogbWl4ZWQgaXRlcmF0aW9uIGFuZCByZWFkcyBzaG91bGQgYmUgZm9yYmlkZGVuLgotICAgICAgICBmID0gYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICAjIFRoZSBpbnRlcm5hbCBidWZmZXIgc2l6ZSBpcyBoYXJkLXdpcmVkIHRvIDgxOTIgYnl0ZXMsIHdlIG11c3QKICAgICAgICAgICAgICMgd3JpdGUgb3V0IG1vcmUgdGhhbiB0aGF0IGZvciB0aGUgdGVzdCB0byBzdG9wIGhhbGYgdGhyb3VnaAogICAgICAgICAgICAgIyB0aGUgYnVmZmVyLgogICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQgKiAxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgogICAgICAgICAgICAgbmV4dChmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZi5yZWFkbGluZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYucmVhZGxpbmVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKIGNsYXNzIEJaMkNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdENvbXByZXNzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weSBiL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKaW5kZXggZjI5NjllMi4uNGJkNzU4YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CkBAIC0yLDkgKzIsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHRpbWUKIGltcG9ydCBsb2NhbGUKIAotCiByZXN1bHRfMjAwNF90ZXh0ID0gIiIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwNAogCkBAIC0yNjIsNyArMjYyLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBjYWxlbmRhci5Mb2NhbGVIVE1MQ2FsZW5kYXIobG9jYWxlPScnKS5mb3JtYXRtb250aG5hbWUoMjAxMCwgMTApCiAgICAgICAgIG5ld19vY3RvYmVyID0gY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0bW9udGhuYW1lKDIwMTAsIDEwLCAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob2xkX29jdG9iZXIsIG5ld19vY3RvYmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZF9vY3RvYmVyLCBuZXdfb2N0b2JlcikKIAogCiBjbGFzcyBNb250aENhbGVuZGFyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzk1LDYgKzM5NSwxMyBAQAogICAgICAgICAjIEEgMzEtZGF5IGRlY2VtYmVyIHN0YXJ0aW5nIG9uIGZyaWRheSAoMis3KzcrNys3KzEgZGF5cykKICAgICAgICAgc2VsZi5jaGVja193ZWVrcygxOTk1LCAxMiwgKDIsIDcsIDcsIDcsIDcsIDEpKQogCitjbGFzcyBUaW1lZ21UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgVElNRVNUQU1QUyA9IFswLCAxMCwgMTAwLCAxMDAwLCAxMDAwMCwgMTAwMDAwLCAxMDAwMDAwLAorICAgICAgICAgICAgICAgICAgMTIzNDU2Nzg5MCwgMTI2MjMwNDAwMCwgMTI3NTc4NTE1MyxdCisgICAgZGVmIHRlc3RfdGltZWdtKHNlbGYpOgorICAgICAgICBmb3Igc2VjcyBpbiBzZWxmLlRJTUVTVEFNUFM6CisgICAgICAgICAgICB0dXBsZSA9IHRpbWUuZ210aW1lKHNlY3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlY3MsIGNhbGVuZGFyLnRpbWVnbSh0dXBsZSkpCiAKIGNsYXNzIE1vbnRoUmFuZ2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfamFudWFyeShzZWxmKToKQEAgLTQ1MCw2ICs0NTcsNyBAQAogICAgICAgICBDYWxlbmRhclRlc3RDYXNlLAogICAgICAgICBNb25kYXlUZXN0Q2FzZSwKICAgICAgICAgU3VuZGF5VGVzdENhc2UsCisgICAgICAgIFRpbWVnbVRlc3RDYXNlLAogICAgICAgICBNb250aFJhbmdlVGVzdENhc2UsCiAgICAgICAgIExlYXBkYXlzVGVzdENhc2UsCiAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYXBpLnB5IGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CmluZGV4IDNmMWQ2M2MuLjMyN2FjNjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhcGkucHkKQEAgLTIsMTIgKzIsMTcgQEAKICMgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgX3Rlc3RjYXBpIGV4cG9ydHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAndGVzdF8nLgogCiBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgb3MKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGhyZWFkaW5nCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogaW1wb3J0IF90ZXN0Y2FwaQogCiAKQEAgLTMyLDcgKzM3LDI0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGZ1bmN0aW9uLmF0dHJpYnV0ZSwgInRlc3QiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgaW5zdC50ZXN0ZnVuY3Rpb24sICJhdHRyaWJ1dGUiLCAidGVzdCIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0X25vX0ZhdGFsRXJyb3JfaW5maW5pdGVfbG9vcChzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBfdGVzdGNhcGk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ190ZXN0Y2FwaS5jcmFzaF9ub19jdXJyZW50X3RocmVhZCgpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgIyBUaGlzIHVzZWQgdG8gY2F1c2UgYW4gaW5maW5pdGUgbG9vcC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIucnN0cmlwKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidGYXRhbCBQeXRob24gZXJyb3I6JworICAgICAgICAgICAgICAgICAgICAgICAgIGInIFB5VGhyZWFkU3RhdGVfR2V0OiBubyBjdXJyZW50IHRocmVhZCcpCiAKKyAgICBkZWYgdGVzdF9tZW1vcnl2aWV3X2Zyb21fTlVMTF9wb2ludGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfdGVzdGNhcGkubWFrZV9tZW1vcnl2aWV3X2Zyb21fTlVMTF9wb2ludGVyKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgVGVzdFBlbmRpbmdDYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgcGVuZGluZ2NhbGxzX3N1Ym1pdChzZWxmLCBsLCBuKToKQEAgLTEyMCw4ICsxNDIsMzggQEAKICAgICBkZWYgdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuYXJncGFyc2luZygiSGVsbG8iLCAiV29ybGQiKSwgMSkKIAorCitjbGFzcyBFbWJlZGRpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N1YmludGVycHMoc2VsZik6CisgICAgICAgICMgWFhYIG9ubHkgdGVzdGVkIHVuZGVyIFVuaXggY2hlY2tvdXRzCisgICAgICAgIGJhc2VwYXRoID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKSkKKyAgICAgICAgb2xkY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgZ2V0IGEgZmF0YWwgZXJyb3I6CisgICAgICAgICMgIlB5X0luaXRpYWxpemU6IFVuYWJsZSB0byBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZworICAgICAgICAjIExvb2t1cEVycm9yOiBubyBjb2RlYyBzZWFyY2ggZnVuY3Rpb25zIHJlZ2lzdGVyZWQ6IGNhbid0IGZpbmQgZW5jb2RpbmciCisgICAgICAgIG9zLmNoZGlyKGJhc2VwYXRoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGUgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICJNb2R1bGVzIiwgIl90ZXN0ZW1iZWQiKQorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgZG9lc24ndCBleGlzdCIgJSBleGUpCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbZXhlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgKG91dCwgZXJyKSA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiYWQgcmV0dXJuY29kZSAlZCwgc3RkZXJyIGlzICVyIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwLnJldHVybmNvZGUsIGVycikpCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgICAgIHByaW50KG91dC5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICAgICAgICAgIHByaW50KGVyci5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDQVBJVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDQVBJVGVzdCwgVGVzdFBlbmRpbmdDYWxscywgVGVzdDYwMTIsIEVtYmVkZGluZ1Rlc3QpCiAKICAgICBmb3IgbmFtZSBpbiBkaXIoX3Rlc3RjYXBpKToKICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgpAQCAtMTQ4LDIzICsyMDAsMTQgQEAKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZG4ndCBmaW5kIG1haW4gdGhyZWFkIGNvcnJlY3RseSBpbiB0aGUgbGlzdCIpCiAKLSAgICB0cnk6Ci0gICAgICAgIF90ZXN0Y2FwaS5fdGVzdF90aHJlYWRfc3RhdGUKLSAgICAgICAgaGF2ZV90aHJlYWRfc3RhdGUgPSBUcnVlCi0gICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICBoYXZlX3RocmVhZF9zdGF0ZSA9IEZhbHNlCi0KLSAgICBpZiBoYXZlX3RocmVhZF9zdGF0ZToKKyAgICBpZiB0aHJlYWRpbmc6CiAgICAgICAgIGltcG9ydCBfdGhyZWFkCiAgICAgICAgIGltcG9ydCB0aW1lCiAgICAgICAgIFRlc3RUaHJlYWRTdGF0ZSgpCi0gICAgICAgIGltcG9ydCB0aHJlYWRpbmcKICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PVRlc3RUaHJlYWRTdGF0ZSkKICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgIHQuam9pbigpCiAKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGVuZGluZ0NhbGxzLCBUZXN0NjAxMikKLQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NmZ3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CmluZGV4IDI5OTg3MGMuLjFkYjkyMTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2ZncGFyc2VyLnB5CkBAIC0xLDExICsxLDE2IEBACitpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBjb25maWdwYXJzZXIKIGltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgd2FybmluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGNsYXNzIFNvcnRlZERpY3QoY29sbGVjdGlvbnMuVXNlckRpY3QpOgorCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgogICAgICAgICByZXR1cm4gc29ydGVkKHNlbGYuZGF0YS5pdGVtcygpKQogCkBAIC0xNSw3MiArMjAsMjMwIEBACiAgICAgZGVmIHZhbHVlcyhzZWxmKToKICAgICAgICAgcmV0dXJuIFtpWzFdIGZvciBpIGluIHNlbGYuaXRlbXMoKV0KIAotICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6IHJldHVybiBpdGVyKHNlbGYuaXRlbXMoKSkKLSAgICBkZWYgaXRlcmtleXMoc2VsZik6IHJldHVybiBpdGVyKHNlbGYua2V5cygpKQotICAgIF9faXRlcl9fID0gaXRlcmtleXMKLSAgICBkZWYgaXRlcnZhbHVlcyhzZWxmKTogcmV0dXJuIGl0ZXIoc2VsZi52YWx1ZXMoKSkKKyAgICBkZWYgaXRlcml0ZW1zKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLml0ZW1zKCkpCiAKLWNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLmtleXMoKSkKKworICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihzZWxmLnZhbHVlcygpKQorCisgICAgX19pdGVyX18gPSBpdGVya2V5cworCisKK2NsYXNzIENmZ1BhcnNlclRlc3RDYXNlQ2xhc3ModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGFsbG93X25vX3ZhbHVlID0gRmFsc2UKKyAgICBkZWxpbWl0ZXJzID0gKCc9JywgJzonKQorICAgIGNvbW1lbnRfcHJlZml4ZXMgPSAoJzsnLCAnIycpCisgICAgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXMgPSAoJzsnLCAnIycpCisgICAgZW1wdHlfbGluZXNfaW5fdmFsdWVzID0gVHJ1ZQorICAgIGRpY3RfdHlwZSA9IGNvbmZpZ3BhcnNlci5fZGVmYXVsdF9kaWN0CisgICAgc3RyaWN0ID0gRmFsc2UKKyAgICBkZWZhdWx0X3NlY3Rpb24gPSBjb25maWdwYXJzZXIuREVGQVVMVFNFQ1QKKyAgICBpbnRlcnBvbGF0aW9uID0gY29uZmlncGFyc2VyLl9VTlNFVAorCiAgICAgZGVmIG5ld2NvbmZpZyhzZWxmLCBkZWZhdWx0cz1Ob25lKToKLSAgICAgICAgaWYgZGVmYXVsdHMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2YgPSBzZWxmLmNvbmZpZ19jbGFzcygpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmNmID0gc2VsZi5jb25maWdfY2xhc3MoZGVmYXVsdHMpCi0gICAgICAgIHJldHVybiBzZWxmLmNmCisgICAgICAgIGFyZ3VtZW50cyA9IGRpY3QoCisgICAgICAgICAgICBkZWZhdWx0cz1kZWZhdWx0cywKKyAgICAgICAgICAgIGFsbG93X25vX3ZhbHVlPXNlbGYuYWxsb3dfbm9fdmFsdWUsCisgICAgICAgICAgICBkZWxpbWl0ZXJzPXNlbGYuZGVsaW1pdGVycywKKyAgICAgICAgICAgIGNvbW1lbnRfcHJlZml4ZXM9c2VsZi5jb21tZW50X3ByZWZpeGVzLAorICAgICAgICAgICAgaW5saW5lX2NvbW1lbnRfcHJlZml4ZXM9c2VsZi5pbmxpbmVfY29tbWVudF9wcmVmaXhlcywKKyAgICAgICAgICAgIGVtcHR5X2xpbmVzX2luX3ZhbHVlcz1zZWxmLmVtcHR5X2xpbmVzX2luX3ZhbHVlcywKKyAgICAgICAgICAgIGRpY3RfdHlwZT1zZWxmLmRpY3RfdHlwZSwKKyAgICAgICAgICAgIHN0cmljdD1zZWxmLnN0cmljdCwKKyAgICAgICAgICAgIGRlZmF1bHRfc2VjdGlvbj1zZWxmLmRlZmF1bHRfc2VjdGlvbiwKKyAgICAgICAgICAgIGludGVycG9sYXRpb249c2VsZi5pbnRlcnBvbGF0aW9uLAorICAgICAgICApCisgICAgICAgIGluc3RhbmNlID0gc2VsZi5jb25maWdfY2xhc3MoKiphcmd1bWVudHMpCisgICAgICAgIHJldHVybiBpbnN0YW5jZQogCiAgICAgZGVmIGZyb21zdHJpbmcoc2VsZiwgc3RyaW5nLCBkZWZhdWx0cz1Ob25lKToKICAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZyhkZWZhdWx0cykKLSAgICAgICAgc2lvID0gaW8uU3RyaW5nSU8oc3RyaW5nKQotICAgICAgICBjZi5yZWFkZnAoc2lvKQorICAgICAgICBjZi5yZWFkX3N0cmluZyhzdHJpbmcpCiAgICAgICAgIHJldHVybiBjZgogCi0gICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6Ci0gICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAotICAgICAgICAgICAgIltGb28gQmFyXVxuIgotICAgICAgICAgICAgImZvbz1iYXJcbiIKLSAgICAgICAgICAgICJbU3BhY2V5IEJhcl1cbiIKLSAgICAgICAgICAgICJmb28gPSBiYXJcbiIKLSAgICAgICAgICAgICJbQ29tbWVudGVkIEJhcl1cbiIKLSAgICAgICAgICAgICJmb286IGJhciA7IGNvbW1lbnRcbiIKLSAgICAgICAgICAgICJbTG9uZyBMaW5lXVxuIgotICAgICAgICAgICAgImZvbzogdGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG4iCi0gICAgICAgICAgICAiICAgbGlrZXMgaXQuXG4iCi0gICAgICAgICAgICAiW1NlY3Rpb25cXHdpdGgkd2VpcmQlY2hhcmFjdGVyc1tcdF1cbiIKLSAgICAgICAgICAgICJbSW50ZXJuYXRpb25hbGl6ZWQgU3R1ZmZdXG4iCi0gICAgICAgICAgICAiZm9vW2JnXTogQnVsZ2FyaWFuXG4iCi0gICAgICAgICAgICAiZm9vPURlZmF1bHRcbiIKLSAgICAgICAgICAgICJmb29bZW5dPUVuZ2xpc2hcbiIKLSAgICAgICAgICAgICJmb29bZGVdPURldXRzY2hcbiIKLSAgICAgICAgICAgICJbU3BhY2VzXVxuIgotICAgICAgICAgICAgImtleSB3aXRoIHNwYWNlcyA6IHZhbHVlXG4iCi0gICAgICAgICAgICAiYW5vdGhlciB3aXRoIHNwYWNlcyA9IHNwbGF0IVxuIgotICAgICAgICAgICAgKQorY2xhc3MgQmFzaWNUZXN0Q2FzZShDZmdQYXJzZXJUZXN0Q2FzZUNsYXNzKToKKworICAgIGRlZiBiYXNpY190ZXN0KHNlbGYsIGNmKToKKyAgICAgICAgRSA9IFsnQ29tbWVudGVkIEJhcicsCisgICAgICAgICAgICAgJ0ZvbyBCYXInLAorICAgICAgICAgICAgICdJbnRlcm5hdGlvbmFsaXplZCBTdHVmZicsCisgICAgICAgICAgICAgJ0xvbmcgTGluZScsCisgICAgICAgICAgICAgJ1NlY3Rpb25cXHdpdGgkd2VpcmQlY2hhcmFjdGVyc1tcdCcsCisgICAgICAgICAgICAgJ1NwYWNlcycsCisgICAgICAgICAgICAgJ1NwYWNleSBCYXInLAorICAgICAgICAgICAgICdTcGFjZXkgQmFyIEZyb20gVGhlIEJlZ2lubmluZycsCisgICAgICAgICAgICAgJ1R5cGVzJywKKyAgICAgICAgICAgICBdCisKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIEUuYXBwZW5kKCdOb1ZhbHVlJykKKyAgICAgICAgRS5zb3J0KCkKKyAgICAgICAgRiA9IFsoJ2JheicsICdxd2UnKSwgKCdmb28nLCAnYmFyMycpXQorCisgICAgICAgICMgQVBJIGFjY2VzcwogICAgICAgICBMID0gY2Yuc2VjdGlvbnMoKQogICAgICAgICBMLnNvcnQoKQogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoTCwgW3InQ29tbWVudGVkIEJhcicsCi0gICAgICAgICAgICAgICByJ0ZvbyBCYXInLAotICAgICAgICAgICAgICAgcidJbnRlcm5hdGlvbmFsaXplZCBTdHVmZicsCi0gICAgICAgICAgICAgICByJ0xvbmcgTGluZScsCi0gICAgICAgICAgICAgICByJ1NlY3Rpb25cd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzWycgJ1x0JywKLSAgICAgICAgICAgICAgIHInU3BhY2VzJywKLSAgICAgICAgICAgICAgIHInU3BhY2V5IEJhcicsCi0gICAgICAgICAgICAgICBdKQorICAgICAgICBlcShMLCBFKQorICAgICAgICBMID0gY2YuaXRlbXMoJ1NwYWNleSBCYXIgRnJvbSBUaGUgQmVnaW5uaW5nJykKKyAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgZXEoTCwgRikKKworICAgICAgICAjIG1hcHBpbmcgYWNjZXNzCisgICAgICAgIEwgPSBbc2VjdGlvbiBmb3Igc2VjdGlvbiBpbiBjZl0KKyAgICAgICAgTC5zb3J0KCkKKyAgICAgICAgRS5hcHBlbmQoc2VsZi5kZWZhdWx0X3NlY3Rpb24pCisgICAgICAgIEUuc29ydCgpCisgICAgICAgIGVxKEwsIEUpCisgICAgICAgIEwgPSBjZlsnU3BhY2V5IEJhciBGcm9tIFRoZSBCZWdpbm5pbmcnXS5pdGVtcygpCisgICAgICAgIEwgPSBzb3J0ZWQobGlzdChMKSkKKyAgICAgICAgZXEoTCwgRikKKyAgICAgICAgTCA9IGNmLml0ZW1zKCkKKyAgICAgICAgTCA9IHNvcnRlZChsaXN0KEwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihMKSwgbGVuKEUpKQorICAgICAgICBmb3IgbmFtZSwgc2VjdGlvbiBpbiBMOgorICAgICAgICAgICAgZXEobmFtZSwgc2VjdGlvbi5uYW1lKQorICAgICAgICBlcShjZi5kZWZhdWx0cygpLCBjZltzZWxmLmRlZmF1bHRfc2VjdGlvbl0pCiAKICAgICAgICAgIyBUaGUgdXNlIG9mIHNwYWNlcyBpbiB0aGUgc2VjdGlvbiBuYW1lcyBzZXJ2ZXMgYXMgYQogICAgICAgICAjIHJlZ3Jlc3Npb24gdGVzdCBmb3IgU291cmNlRm9yZ2UgYnVnICM1ODMyNDg6CiAgICAgICAgICMgaHR0cDovL3d3dy5weXRob24ub3JnL3NmLzU4MzI0OAotICAgICAgICBlcShjZi5nZXQoJ0ZvbyBCYXInLCAnZm9vJyksICdiYXInKQotICAgICAgICBlcShjZi5nZXQoJ1NwYWNleSBCYXInLCAnZm9vJyksICdiYXInKQotICAgICAgICBlcShjZi5nZXQoJ0NvbW1lbnRlZCBCYXInLCAnZm9vJyksICdiYXInKQorCisgICAgICAgICMgQVBJIGFjY2VzcworICAgICAgICBlcShjZi5nZXQoJ0ZvbyBCYXInLCAnZm9vJyksICdiYXIxJykKKyAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXkgQmFyJywgJ2ZvbycpLCAnYmFyMicpCisgICAgICAgIGVxKGNmLmdldCgnU3BhY2V5IEJhciBGcm9tIFRoZSBCZWdpbm5pbmcnLCAnZm9vJyksICdiYXIzJykKKyAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXkgQmFyIEZyb20gVGhlIEJlZ2lubmluZycsICdiYXonKSwgJ3F3ZScpCisgICAgICAgIGVxKGNmLmdldCgnQ29tbWVudGVkIEJhcicsICdmb28nKSwgJ2JhcjQnKQorICAgICAgICBlcShjZi5nZXQoJ0NvbW1lbnRlZCBCYXInLCAnYmF6JyksICdxd2UnKQogICAgICAgICBlcShjZi5nZXQoJ1NwYWNlcycsICdrZXkgd2l0aCBzcGFjZXMnKSwgJ3ZhbHVlJykKICAgICAgICAgZXEoY2YuZ2V0KCdTcGFjZXMnLCAnYW5vdGhlciB3aXRoIHNwYWNlcycpLCAnc3BsYXQhJykKKyAgICAgICAgZXEoY2YuZ2V0aW50KCdUeXBlcycsICdpbnQnKSwgNDIpCisgICAgICAgIGVxKGNmLmdldCgnVHlwZXMnLCAnaW50JyksICI0MiIpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY2YuZ2V0ZmxvYXQoJ1R5cGVzJywgJ2Zsb2F0JyksIDAuNDQpCisgICAgICAgIGVxKGNmLmdldCgnVHlwZXMnLCAnZmxvYXQnKSwgIjAuNDQiKQorICAgICAgICBlcShjZi5nZXRib29sZWFuKCdUeXBlcycsICdib29sZWFuJyksIEZhbHNlKQorICAgICAgICBlcShjZi5nZXQoJ1R5cGVzJywgJzEyMycpLCAnc3RyYW5nZSBidXQgYWNjZXB0YWJsZScpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBlcShjZi5nZXQoJ05vVmFsdWUnLCAnb3B0aW9uLXdpdGhvdXQtdmFsdWUnKSwgTm9uZSkKIAotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdfX25hbWVfXycgaW4gY2Yub3B0aW9ucygiRm9vIEJhciIpLAotICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18gIm9wdGlvbiIgc2hvdWxkIG5vdCBiZSBleHBvc2VkIGJ5IHRoZSBBUEkhJykKKyAgICAgICAgIyB0ZXN0IHZhcnM9IGFuZCBmYWxsYmFjaz0KKyAgICAgICAgZXEoY2YuZ2V0KCdGb28gQmFyJywgJ2ZvbycsIGZhbGxiYWNrPSdiYXonKSwgJ2JhcjEnKQorICAgICAgICBlcShjZi5nZXQoJ0ZvbyBCYXInLCAnZm9vJywgdmFycz17J2Zvbyc6ICdiYXonfSksICdiYXonKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcik6CisgICAgICAgICAgICBjZi5nZXQoJ05vIFN1Y2ggRm9vIEJhcicsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob09wdGlvbkVycm9yKToKKyAgICAgICAgICAgIGNmLmdldCgnRm9vIEJhcicsICduby1zdWNoLWZvbycpCisgICAgICAgIGVxKGNmLmdldCgnTm8gU3VjaCBGb28gQmFyJywgJ2ZvbycsIGZhbGxiYWNrPSdiYXonKSwgJ2JheicpCisgICAgICAgIGVxKGNmLmdldCgnRm9vIEJhcicsICduby1zdWNoLWZvbycsIGZhbGxiYWNrPSdiYXonKSwgJ2JheicpCisgICAgICAgIGVxKGNmLmdldCgnU3BhY2V5IEJhcicsICdmb28nLCBmYWxsYmFjaz1Ob25lKSwgJ2JhcjInKQorICAgICAgICBlcShjZi5nZXQoJ05vIFN1Y2ggU3BhY2V5IEJhcicsICdmb28nLCBmYWxsYmFjaz1Ob25lKSwgTm9uZSkKKyAgICAgICAgZXEoY2YuZ2V0aW50KCdUeXBlcycsICdpbnQnLCBmYWxsYmFjaz0xOCksIDQyKQorICAgICAgICBlcShjZi5nZXRpbnQoJ1R5cGVzJywgJ25vLXN1Y2gtaW50JywgZmFsbGJhY2s9MTgpLCAxOCkKKyAgICAgICAgZXEoY2YuZ2V0aW50KCdUeXBlcycsICduby1zdWNoLWludCcsIGZhbGxiYWNrPSIxOCIpLCAiMTgiKSAjIHNpYyEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvcik6CisgICAgICAgICAgICBjZi5nZXRpbnQoJ1R5cGVzJywgJ25vLXN1Y2gtaW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjZi5nZXRmbG9hdCgnVHlwZXMnLCAnZmxvYXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPTAuMCksIDAuNDQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY2YuZ2V0ZmxvYXQoJ1R5cGVzJywgJ25vLXN1Y2gtZmxvYXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbGxiYWNrPTAuMCksIDAuMCkKKyAgICAgICAgZXEoY2YuZ2V0ZmxvYXQoJ1R5cGVzJywgJ25vLXN1Y2gtZmxvYXQnLCBmYWxsYmFjaz0iMC4wIiksICIwLjAiKSAjIHNpYyEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvcik6CisgICAgICAgICAgICBjZi5nZXRmbG9hdCgnVHlwZXMnLCAnbm8tc3VjaC1mbG9hdCcpCisgICAgICAgIGVxKGNmLmdldGJvb2xlYW4oJ1R5cGVzJywgJ2Jvb2xlYW4nLCBmYWxsYmFjaz1UcnVlKSwgRmFsc2UpCisgICAgICAgIGVxKGNmLmdldGJvb2xlYW4oJ1R5cGVzJywgJ25vLXN1Y2gtYm9vbGVhbicsIGZhbGxiYWNrPSJ5ZXMiKSwKKyAgICAgICAgICAgInllcyIpICMgc2ljIQorICAgICAgICBlcShjZi5nZXRib29sZWFuKCdUeXBlcycsICduby1zdWNoLWJvb2xlYW4nLCBmYWxsYmFjaz1UcnVlKSwgVHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvcik6CisgICAgICAgICAgICBjZi5nZXRib29sZWFuKCdUeXBlcycsICduby1zdWNoLWJvb2xlYW4nKQorICAgICAgICBlcShjZi5nZXRib29sZWFuKCdObyBTdWNoIFR5cGVzJywgJ2Jvb2xlYW4nLCBmYWxsYmFjaz1UcnVlKSwgVHJ1ZSkKKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGVxKGNmLmdldCgnTm9WYWx1ZScsICdvcHRpb24td2l0aG91dC12YWx1ZScsIGZhbGxiYWNrPUZhbHNlKSwgTm9uZSkKKyAgICAgICAgICAgIGVxKGNmLmdldCgnTm9WYWx1ZScsICduby1zdWNoLW9wdGlvbi13aXRob3V0LXZhbHVlJywKKyAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjaz1GYWxzZSksIEZhbHNlKQogCi0gICAgICAgICMgTWFrZSBzdXJlIHRoZSByaWdodCB0aGluZ3MgaGFwcGVuIGZvciByZW1vdmVfb3B0aW9uKCk7Ci0gICAgICAgICMgYWRkZWQgdG8gaW5jbHVkZSBjaGVjayBmb3IgU291cmNlRm9yZ2UgYnVnICMxMjMzMjQ6CisgICAgICAgICMgbWFwcGluZyBhY2Nlc3MKKyAgICAgICAgZXEoY2ZbJ0ZvbyBCYXInXVsnZm9vJ10sICdiYXIxJykKKyAgICAgICAgZXEoY2ZbJ1NwYWNleSBCYXInXVsnZm9vJ10sICdiYXIyJykKKyAgICAgICAgc2VjdGlvbiA9IGNmWydTcGFjZXkgQmFyIEZyb20gVGhlIEJlZ2lubmluZyddCisgICAgICAgIGVxKHNlY3Rpb24ubmFtZSwgJ1NwYWNleSBCYXIgRnJvbSBUaGUgQmVnaW5uaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWN0aW9uLnBhcnNlciwgY2YpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VjdGlvbi5uYW1lID0gJ05hbWUgaXMgcmVhZC1vbmx5JworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlY3Rpb24ucGFyc2VyID0gJ1BhcnNlciBpcyByZWFkLW9ubHknCisgICAgICAgIGVxKHNlY3Rpb25bJ2ZvbyddLCAnYmFyMycpCisgICAgICAgIGVxKHNlY3Rpb25bJ2JheiddLCAncXdlJykKKyAgICAgICAgZXEoY2ZbJ0NvbW1lbnRlZCBCYXInXVsnZm9vJ10sICdiYXI0JykKKyAgICAgICAgZXEoY2ZbJ0NvbW1lbnRlZCBCYXInXVsnYmF6J10sICdxd2UnKQorICAgICAgICBlcShjZlsnU3BhY2VzJ11bJ2tleSB3aXRoIHNwYWNlcyddLCAndmFsdWUnKQorICAgICAgICBlcShjZlsnU3BhY2VzJ11bJ2Fub3RoZXIgd2l0aCBzcGFjZXMnXSwgJ3NwbGF0IScpCisgICAgICAgIGVxKGNmWydMb25nIExpbmUnXVsnZm9vJ10sCisgICAgICAgICAgICd0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3Jcbmxpa2VzIGl0LicpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBlcShjZlsnTm9WYWx1ZSddWydvcHRpb24td2l0aG91dC12YWx1ZSddLCBOb25lKQorICAgICAgICAjIHRlc3QgdmFycz0gYW5kIGZhbGxiYWNrPQorICAgICAgICBlcShjZlsnRm9vIEJhciddLmdldCgnZm9vJywgJ2JheicpLCAnYmFyMScpCisgICAgICAgIGVxKGNmWydGb28gQmFyJ10uZ2V0KCdmb28nLCBmYWxsYmFjaz0nYmF6JyksICdiYXIxJykKKyAgICAgICAgZXEoY2ZbJ0ZvbyBCYXInXS5nZXQoJ2ZvbycsIHZhcnM9eydmb28nOiAnYmF6J30pLCAnYmF6JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBjZlsnTm8gU3VjaCBGb28gQmFyJ11bJ2ZvbyddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgY2ZbJ0ZvbyBCYXInXVsnbm8tc3VjaC1mb28nXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGNmWydObyBTdWNoIEZvbyBCYXInXS5nZXQoJ2ZvbycsIGZhbGxiYWNrPSdiYXonKQorICAgICAgICBlcShjZlsnRm9vIEJhciddLmdldCgnbm8tc3VjaC1mb28nLCAnYmF6JyksICdiYXonKQorICAgICAgICBlcShjZlsnRm9vIEJhciddLmdldCgnbm8tc3VjaC1mb28nLCBmYWxsYmFjaz0nYmF6JyksICdiYXonKQorICAgICAgICBlcShjZlsnRm9vIEJhciddLmdldCgnbm8tc3VjaC1mb28nKSwgTm9uZSkKKyAgICAgICAgZXEoY2ZbJ1NwYWNleSBCYXInXS5nZXQoJ2ZvbycsIE5vbmUpLCAnYmFyMicpCisgICAgICAgIGVxKGNmWydTcGFjZXkgQmFyJ10uZ2V0KCdmb28nLCBmYWxsYmFjaz1Ob25lKSwgJ2JhcjInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGNmWydObyBTdWNoIFNwYWNleSBCYXInXS5nZXQoJ2ZvbycsIE5vbmUpCisgICAgICAgIGVxKGNmWydUeXBlcyddLmdldGludCgnaW50JywgMTgpLCA0MikKKyAgICAgICAgZXEoY2ZbJ1R5cGVzJ10uZ2V0aW50KCdpbnQnLCBmYWxsYmFjaz0xOCksIDQyKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRpbnQoJ25vLXN1Y2gtaW50JywgMTgpLCAxOCkKKyAgICAgICAgZXEoY2ZbJ1R5cGVzJ10uZ2V0aW50KCduby1zdWNoLWludCcsIGZhbGxiYWNrPTE4KSwgMTgpCisgICAgICAgIGVxKGNmWydUeXBlcyddLmdldGludCgnbm8tc3VjaC1pbnQnLCAiMTgiKSwgIjE4IikgIyBzaWMhCisgICAgICAgIGVxKGNmWydUeXBlcyddLmdldGludCgnbm8tc3VjaC1pbnQnLCBmYWxsYmFjaz0iMTgiKSwgIjE4IikgIyBzaWMhCisgICAgICAgIGVxKGNmWydUeXBlcyddLmdldGludCgnbm8tc3VjaC1pbnQnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjZlsnVHlwZXMnXS5nZXRmbG9hdCgnZmxvYXQnLCAwLjApLCAwLjQ0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNmWydUeXBlcyddLmdldGZsb2F0KCdmbG9hdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9MC4wKSwgMC40NCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjZlsnVHlwZXMnXS5nZXRmbG9hdCgnbm8tc3VjaC1mbG9hdCcsIDAuMCksIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjZlsnVHlwZXMnXS5nZXRmbG9hdCgnbm8tc3VjaC1mbG9hdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9MC4wKSwgMC4wKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRmbG9hdCgnbm8tc3VjaC1mbG9hdCcsICIwLjAiKSwgIjAuMCIpICMgc2ljIQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRmbG9hdCgnbm8tc3VjaC1mbG9hdCcsIGZhbGxiYWNrPSIwLjAiKSwgIjAuMCIpICMgc2ljIQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRmbG9hdCgnbm8tc3VjaC1mbG9hdCcpLCBOb25lKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRib29sZWFuKCdib29sZWFuJywgVHJ1ZSksIEZhbHNlKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRib29sZWFuKCdib29sZWFuJywgZmFsbGJhY2s9VHJ1ZSksIEZhbHNlKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRib29sZWFuKCduby1zdWNoLWJvb2xlYW4nLCAieWVzIiksICJ5ZXMiKSAjIHNpYyEKKyAgICAgICAgZXEoY2ZbJ1R5cGVzJ10uZ2V0Ym9vbGVhbignbm8tc3VjaC1ib29sZWFuJywgZmFsbGJhY2s9InllcyIpLAorICAgICAgICAgICAieWVzIikgIyBzaWMhCisgICAgICAgIGVxKGNmWydUeXBlcyddLmdldGJvb2xlYW4oJ25vLXN1Y2gtYm9vbGVhbicsIFRydWUpLCBUcnVlKQorICAgICAgICBlcShjZlsnVHlwZXMnXS5nZXRib29sZWFuKCduby1zdWNoLWJvb2xlYW4nLCBmYWxsYmFjaz1UcnVlKSwgVHJ1ZSkKKyAgICAgICAgZXEoY2ZbJ1R5cGVzJ10uZ2V0Ym9vbGVhbignbm8tc3VjaC1ib29sZWFuJyksIE5vbmUpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBlcShjZlsnTm9WYWx1ZSddLmdldCgnb3B0aW9uLXdpdGhvdXQtdmFsdWUnLCBGYWxzZSksIE5vbmUpCisgICAgICAgICAgICBlcShjZlsnTm9WYWx1ZSddLmdldCgnb3B0aW9uLXdpdGhvdXQtdmFsdWUnLCBmYWxsYmFjaz1GYWxzZSksIE5vbmUpCisgICAgICAgICAgICBlcShjZlsnTm9WYWx1ZSddLmdldCgnbm8tc3VjaC1vcHRpb24td2l0aG91dC12YWx1ZScsIEZhbHNlKSwgRmFsc2UpCisgICAgICAgICAgICBlcShjZlsnTm9WYWx1ZSddLmdldCgnbm8tc3VjaC1vcHRpb24td2l0aG91dC12YWx1ZScsCisgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2s9RmFsc2UpLCBGYWxzZSkKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgcmlnaHQgdGhpbmdzIGhhcHBlbiBmb3IgcmVtb3ZlX3NlY3Rpb24oKSBhbmQKKyAgICAgICAgIyByZW1vdmVfb3B0aW9uKCk7IGFkZGVkIHRvIGluY2x1ZGUgY2hlY2sgZm9yIFNvdXJjZUZvcmdlIGJ1ZyAjMTIzMzI0LgorCisgICAgICAgIGNmW3NlbGYuZGVmYXVsdF9zZWN0aW9uXVsndGhpc192YWx1ZSddID0gJzEnCisgICAgICAgIGNmW3NlbGYuZGVmYXVsdF9zZWN0aW9uXVsndGhhdF92YWx1ZSddID0gJzInCisKKyAgICAgICAgIyBBUEkgYWNjZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5yZW1vdmVfc2VjdGlvbignU3BhY2VzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuaGFzX29wdGlvbignU3BhY2VzJywgJ2tleSB3aXRoIHNwYWNlcycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLnJlbW92ZV9zZWN0aW9uKCdTcGFjZXMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5yZW1vdmVfc2VjdGlvbihzZWxmLmRlZmF1bHRfc2VjdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5yZW1vdmVfb3B0aW9uKCdGb28gQmFyJywgJ2ZvbycpLAogICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZV9vcHRpb24oKSBmYWlsZWQgdG8gcmVwb3J0IGV4aXN0ZW5jZSBvZiBvcHRpb24iKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLmhhc19vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCkBAIC04OCwyNiArMjUxLDE5OSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLnJlbW92ZV9vcHRpb24oJ0ZvbyBCYXInLCAnZm9vJyksCiAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfb3B0aW9uKCkgZmFpbGVkIHRvIHJlcG9ydCBub24tZXhpc3RlbmNlIG9mIG9wdGlvbiIKICAgICAgICAgICAgICAgICAgICAgIiB0aGF0IHdhcyByZW1vdmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmhhc19vcHRpb24oJ0ZvbyBCYXInLCAndGhpc192YWx1ZScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLnJlbW92ZV9vcHRpb24oJ0ZvbyBCYXInLCAndGhpc192YWx1ZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YucmVtb3ZlX29wdGlvbihzZWxmLmRlZmF1bHRfc2VjdGlvbiwgJ3RoaXNfdmFsdWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfb3B0aW9uKCdGb28gQmFyJywgJ3RoaXNfdmFsdWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5yZW1vdmVfb3B0aW9uKHNlbGYuZGVmYXVsdF9zZWN0aW9uLCAndGhpc192YWx1ZScpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2YucmVtb3ZlX29wdGlvbiwgJ05vIFN1Y2ggU2VjdGlvbicsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBjZi5yZW1vdmVfb3B0aW9uKCdObyBTdWNoIFNlY3Rpb24nLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKCdObyBTdWNoIFNlY3Rpb24nLCkpCiAKICAgICAgICAgZXEoY2YuZ2V0KCdMb25nIExpbmUnLCAnZm9vJyksCiAgICAgICAgICAgICd0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3Jcbmxpa2VzIGl0LicpCiAKKyAgICAgICAgIyBtYXBwaW5nIGFjY2VzcworICAgICAgICBkZWwgY2ZbJ1R5cGVzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnVHlwZXMnIGluIGNmKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGRlbCBjZlsnVHlwZXMnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGNmW3NlbGYuZGVmYXVsdF9zZWN0aW9uXQorICAgICAgICBkZWwgY2ZbJ1NwYWNleSBCYXInXVsnZm9vJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZm9vJyBpbiBjZlsnU3BhY2V5IEJhciddKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGRlbCBjZlsnU3BhY2V5IEJhciddWydmb28nXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3RoYXRfdmFsdWUnIGluIGNmWydTcGFjZXkgQmFyJ10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZGVsIGNmWydTcGFjZXkgQmFyJ11bJ3RoYXRfdmFsdWUnXQorICAgICAgICBkZWwgY2Zbc2VsZi5kZWZhdWx0X3NlY3Rpb25dWyd0aGF0X3ZhbHVlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgndGhhdF92YWx1ZScgaW4gY2ZbJ1NwYWNleSBCYXInXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBkZWwgY2Zbc2VsZi5kZWZhdWx0X3NlY3Rpb25dWyd0aGF0X3ZhbHVlJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBkZWwgY2ZbJ05vIFN1Y2ggU2VjdGlvbiddWydmb28nXQorCisgICAgICAgICMgRG9uJ3QgYWRkIG5ldyBhc3NlcnRzIGJlbG93IGluIHRoaXMgbWV0aG9kIGFzIG1vc3Qgb2YgdGhlIG9wdGlvbnMKKyAgICAgICAgIyBhbmQgc2VjdGlvbnMgYXJlIG5vdyByZW1vdmVkLgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIGNvbmZpZ19zdHJpbmcgPSAiIiJcCitbRm9vIEJhcl0KK2Zvb3swWzBdfWJhcjEKK1tTcGFjZXkgQmFyXQorZm9vIHswWzBdfSBiYXIyCitbU3BhY2V5IEJhciBGcm9tIFRoZSBCZWdpbm5pbmddCisgIGZvbyB7MFswXX0gYmFyMworICBiYXogezBbMF19IHF3ZQorW0NvbW1lbnRlZCBCYXJdCitmb297MFsxXX0gYmFyNCB7MVsxXX0gY29tbWVudAorYmF6ezBbMF19cXdlIHsxWzBdfWFub3RoZXIgb25lCitbTG9uZyBMaW5lXQorZm9vezBbMV19IHRoaXMgbGluZSBpcyBtdWNoLCBtdWNoIGxvbmdlciB0aGFuIG15IGVkaXRvcgorICAgbGlrZXMgaXQuCitbU2VjdGlvblxcd2l0aCR3ZWlyZCVjaGFyYWN0ZXJzW1x0XQorW0ludGVybmF0aW9uYWxpemVkIFN0dWZmXQorZm9vW2JnXXswWzFdfSBCdWxnYXJpYW4KK2Zvb3swWzBdfURlZmF1bHQKK2Zvb1tlbl17MFswXX1FbmdsaXNoCitmb29bZGVdezBbMF19RGV1dHNjaAorW1NwYWNlc10KK2tleSB3aXRoIHNwYWNlcyB7MFsxXX0gdmFsdWUKK2Fub3RoZXIgd2l0aCBzcGFjZXMgezBbMF19IHNwbGF0IQorW1R5cGVzXQoraW50IHswWzFdfSA0MgorZmxvYXQgezBbMF19IDAuNDQKK2Jvb2xlYW4gezBbMF19IE5PCisxMjMgezBbMV19IHN0cmFuZ2UgYnV0IGFjY2VwdGFibGUKKyIiIi5mb3JtYXQoc2VsZi5kZWxpbWl0ZXJzLCBzZWxmLmNvbW1lbnRfcHJlZml4ZXMpCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBjb25maWdfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICAgICAiW05vVmFsdWVdXG4iCisgICAgICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCisgICAgICAgICAgICAgICAgKQorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZyhjb25maWdfc3RyaW5nKQorICAgICAgICBzZWxmLmJhc2ljX3Rlc3QoY2YpCisgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGNmLnJlYWRfc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgICAgIFtEdXBsaWNhdGUgT3B0aW9ucyBIZXJlXQorICAgICAgICAgICAgICAgICAgICBvcHRpb24gezBbMF19IHdpdGggYSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBvcHRpb24gezBbMV19IHdpdGggYW5vdGhlciB2YWx1ZQorICAgICAgICAgICAgICAgICIiIi5mb3JtYXQoc2VsZi5kZWxpbWl0ZXJzKSkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGNmLnJlYWRfc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgICAgIFtBbmQgTm93IEZvciBTb21ldGhpbmddCisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlbHkgZGlmZmVyZW50IHswWzBdfSBUcnVlCisgICAgICAgICAgICAgICAgICAgIFtBbmQgTm93IEZvciBTb21ldGhpbmddCisgICAgICAgICAgICAgICAgICAgIHRoZSBsYXJjaCB7MFsxXX0gMQorICAgICAgICAgICAgICAgICIiIi5mb3JtYXQoc2VsZi5kZWxpbWl0ZXJzKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZi5yZWFkX3N0cmluZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFtEdXBsaWNhdGUgT3B0aW9ucyBIZXJlXQorICAgICAgICAgICAgICAgIG9wdGlvbiB7MFswXX0gd2l0aCBhIHZhbHVlCisgICAgICAgICAgICAgICAgb3B0aW9uIHswWzFdfSB3aXRoIGFub3RoZXIgdmFsdWUKKyAgICAgICAgICAgICIiIi5mb3JtYXQoc2VsZi5kZWxpbWl0ZXJzKSkpCisKKyAgICAgICAgICAgIGNmLnJlYWRfc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgW0FuZCBOb3cgRm9yIFNvbWV0aGluZ10KKyAgICAgICAgICAgICAgICBjb21wbGV0ZWx5IGRpZmZlcmVudCB7MFswXX0gVHJ1ZQorICAgICAgICAgICAgICAgIFtBbmQgTm93IEZvciBTb21ldGhpbmddCisgICAgICAgICAgICAgICAgdGhlIGxhcmNoIHswWzFdfSAxCisgICAgICAgICAgICAiIiIuZm9ybWF0KHNlbGYuZGVsaW1pdGVycykpKQorCisgICAgZGVmIHRlc3RfYmFzaWNfZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBjb25maWcgPSB7CisgICAgICAgICAgICAiRm9vIEJhciI6IHsKKyAgICAgICAgICAgICAgICAiZm9vIjogImJhcjEiLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJTcGFjZXkgQmFyIjogeworICAgICAgICAgICAgICAgICJmb28iOiAiYmFyMiIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIlNwYWNleSBCYXIgRnJvbSBUaGUgQmVnaW5uaW5nIjogeworICAgICAgICAgICAgICAgICJmb28iOiAiYmFyMyIsCisgICAgICAgICAgICAgICAgImJheiI6ICJxd2UiLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJDb21tZW50ZWQgQmFyIjogeworICAgICAgICAgICAgICAgICJmb28iOiAiYmFyNCIsCisgICAgICAgICAgICAgICAgImJheiI6ICJxd2UiLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJMb25nIExpbmUiOiB7CisgICAgICAgICAgICAgICAgImZvbyI6ICJ0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3Jcbmxpa2VzICIKKyAgICAgICAgICAgICAgICAgICAgICAgIml0LiIsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgIlNlY3Rpb25cXHdpdGgkd2VpcmQlY2hhcmFjdGVyc1tcdCI6IHsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiSW50ZXJuYXRpb25hbGl6ZWQgU3R1ZmYiOiB7CisgICAgICAgICAgICAgICAgImZvb1tiZ10iOiAiQnVsZ2FyaWFuIiwKKyAgICAgICAgICAgICAgICAiZm9vIjogIkRlZmF1bHQiLAorICAgICAgICAgICAgICAgICJmb29bZW5dIjogIkVuZ2xpc2giLAorICAgICAgICAgICAgICAgICJmb29bZGVdIjogIkRldXRzY2giLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICJTcGFjZXMiOiB7CisgICAgICAgICAgICAgICAgImtleSB3aXRoIHNwYWNlcyI6ICJ2YWx1ZSIsCisgICAgICAgICAgICAgICAgImFub3RoZXIgd2l0aCBzcGFjZXMiOiAic3BsYXQhIiwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiVHlwZXMiOiB7CisgICAgICAgICAgICAgICAgImludCI6IDQyLAorICAgICAgICAgICAgICAgICJmbG9hdCI6IDAuNDQsCisgICAgICAgICAgICAgICAgImJvb2xlYW4iOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAxMjM6ICJzdHJhbmdlIGJ1dCBhY2NlcHRhYmxlIiwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0KKyAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGNvbmZpZy51cGRhdGUoeworICAgICAgICAgICAgICAgICJOb1ZhbHVlIjogeworICAgICAgICAgICAgICAgICAgICAib3B0aW9uLXdpdGhvdXQtdmFsdWUiOiBOb25lLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pCisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBjZi5yZWFkX2RpY3QoY29uZmlnKQorICAgICAgICBzZWxmLmJhc2ljX3Rlc3QoY2YpCisgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yKToKKyAgICAgICAgICAgICAgICBjZi5yZWFkX2RpY3QoeworICAgICAgICAgICAgICAgICAgICAnMSc6IHsna2V5JzogJ3ZhbHVlJ30sCisgICAgICAgICAgICAgICAgICAgIDE6IHsna2V5Mic6ICd2YWx1ZTInfSwKKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgICAgIGNmLnJlYWRfZGljdCh7CisgICAgICAgICAgICAgICAgICAgICJEdXBsaWNhdGUgT3B0aW9ucyBIZXJlIjogeworICAgICAgICAgICAgICAgICAgICAgICAgJ29wdGlvbic6ICd3aXRoIGEgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ09QVElPTic6ICd3aXRoIGFub3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZi5yZWFkX2RpY3QoeworICAgICAgICAgICAgICAgICdzZWN0aW9uJzogeydrZXknOiAndmFsdWUnfSwKKyAgICAgICAgICAgICAgICAnU0VDVElPTic6IHsna2V5Mic6ICd2YWx1ZTInfSwKKyAgICAgICAgICAgIH0pCisgICAgICAgICAgICBjZi5yZWFkX2RpY3QoeworICAgICAgICAgICAgICAgICJEdXBsaWNhdGUgT3B0aW9ucyBIZXJlIjogeworICAgICAgICAgICAgICAgICAgICAnb3B0aW9uJzogJ3dpdGggYSB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAgICdPUFRJT04nOiAnd2l0aCBhbm90aGVyIHZhbHVlJywKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSkKKwogICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkoc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQogICAgICAgICBjZi5hZGRfc2VjdGlvbigiQSIpCiAgICAgICAgIGNmLmFkZF9zZWN0aW9uKCJhIikKKyAgICAgICAgY2YuYWRkX3NlY3Rpb24oIkIiKQogICAgICAgICBMID0gY2Yuc2VjdGlvbnMoKQogICAgICAgICBMLnNvcnQoKQogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoTCwgWyJBIiwgImEiXSkKKyAgICAgICAgZXEoTCwgWyJBIiwgIkIiLCAiYSJdKQogICAgICAgICBjZi5zZXQoImEiLCAiQiIsICJ2YWx1ZSIpCiAgICAgICAgIGVxKGNmLm9wdGlvbnMoImEiKSwgWyJiIl0pCiAgICAgICAgIGVxKGNmLmdldCgiYSIsICJiIiksICJ2YWx1ZSIsCiAgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgb3B0aW9uIG5hbWVzIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgIyBzZWN0aW9uIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZQorICAgICAgICAgICAgY2Yuc2V0KCJiIiwgIkEiLCAidmFsdWUiKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2YuaGFzX29wdGlvbigiYSIsICJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2YuaGFzX29wdGlvbigiYiIsICJiIikpCiAgICAgICAgIGNmLnNldCgiQSIsICJBLUIiLCAiQS1CIHZhbHVlIikKICAgICAgICAgZm9yIG9wdCBpbiAoImEtYiIsICJBLWIiLCAiYS1CIiwgIkEtQiIpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKApAQCAtMTIwLDYyICs0NTYsMTI1IEBACiAKICAgICAgICAgIyBTRiBidWcgIzQzMjM2OToKICAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoCi0gICAgICAgICAgICAiW015U2VjdGlvbl1cbk9wdGlvbjogZmlyc3QgbGluZVxuXHRzZWNvbmQgbGluZVxuIikKKyAgICAgICAgICAgICJbTXlTZWN0aW9uXVxuT3B0aW9ue30gZmlyc3QgbGluZSAgIFxuXHRzZWNvbmQgbGluZSAgIFxuIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgc2VsZi5kZWxpbWl0ZXJzWzBdKSkKICAgICAgICAgZXEoY2Yub3B0aW9ucygiTXlTZWN0aW9uIiksIFsib3B0aW9uIl0pCiAgICAgICAgIGVxKGNmLmdldCgiTXlTZWN0aW9uIiwgIk9wdGlvbiIpLCAiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmUiKQogCiAgICAgICAgICMgU0YgYnVnICM1NjE4MjI6Ci0gICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdGlvbl1cbm5la2V5PW5ldmFsdWVcbiIsCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdGlvbl1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5la2V5e31uZXZhbHVlXG4iLmZvcm1hdChzZWxmLmRlbGltaXRlcnNbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz17ImtleSI6InZhbHVlIn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZi5oYXNfb3B0aW9uKCJzZWN0aW9uIiwgIktleSIpKQogCiAKKyAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5X21hcHBpbmdfYWNjZXNzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgY2ZbIkEiXSA9IHt9CisgICAgICAgIGNmWyJhIl0gPSB7IkIiOiAidmFsdWUifQorICAgICAgICBjZlsiQiJdID0ge30KKyAgICAgICAgTCA9IFtzZWN0aW9uIGZvciBzZWN0aW9uIGluIGNmXQorICAgICAgICBMLnNvcnQoKQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZWxlbV9lcSA9IHNlbGYuYXNzZXJ0Q291bnRFcXVhbAorICAgICAgICBlcShMLCBzb3J0ZWQoWyJBIiwgIkIiLCBzZWxmLmRlZmF1bHRfc2VjdGlvbiwgImEiXSkpCisgICAgICAgIGVxKGNmWyJhIl0ua2V5cygpLCB7ImIifSkKKyAgICAgICAgZXEoY2ZbImEiXVsiYiJdLCAidmFsdWUiLAorICAgICAgICAgICAiY291bGQgbm90IGxvY2F0ZSBvcHRpb24sIGV4cGVjdGluZyBjYXNlLWluc2Vuc2l0aXZlIG9wdGlvbiBuYW1lcyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgIyBzZWN0aW9uIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZQorICAgICAgICAgICAgY2ZbImIiXVsiQSJdID0gInZhbHVlIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoImIiIGluIGNmWyJhIl0pCisgICAgICAgIGNmWyJBIl1bIkEtQiJdID0gIkEtQiB2YWx1ZSIKKyAgICAgICAgZm9yIG9wdCBpbiAoImEtYiIsICJBLWIiLCAiYS1CIiwgIkEtQiIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIG9wdCBpbiBjZlsiQSJdLAorICAgICAgICAgICAgICAgICJoYXNfb3B0aW9uKCkgcmV0dXJuZWQgZmFsc2UgZm9yIG9wdGlvbiB3aGljaCBzaG91bGQgZXhpc3QiKQorICAgICAgICBlcShjZlsiQSJdLmtleXMoKSwgeyJhLWIifSkKKyAgICAgICAgZXEoY2ZbImEiXS5rZXlzKCksIHsiYiJ9KQorICAgICAgICBkZWwgY2ZbImEiXVsiQiJdCisgICAgICAgIGVsZW1fZXEoY2ZbImEiXS5rZXlzKCksIHt9KQorCisgICAgICAgICMgU0YgYnVnICM0MzIzNjk6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAorICAgICAgICAgICAgIltNeVNlY3Rpb25dXG5PcHRpb257fSBmaXJzdCBsaW5lICAgXG5cdHNlY29uZCBsaW5lICAgXG4iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICBzZWxmLmRlbGltaXRlcnNbMF0pKQorICAgICAgICBlcShjZlsiTXlTZWN0aW9uIl0ua2V5cygpLCB7Im9wdGlvbiJ9KQorICAgICAgICBlcShjZlsiTXlTZWN0aW9uIl1bIk9wdGlvbiJdLCAiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmUiKQorCisgICAgICAgICMgU0YgYnVnICM1NjE4MjI6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKCJbc2VjdGlvbl1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5la2V5e31uZXZhbHVlXG4iLmZvcm1hdChzZWxmLmRlbGltaXRlcnNbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz17ImtleSI6InZhbHVlIn0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiS2V5IiBpbiBjZlsic2VjdGlvbiJdKQorCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9jYXNlX3NlbnNpdGl2aXR5KHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKHsiZm9vIjogIkJhciJ9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY2YuZ2V0KCJERUZBVUxUIiwgIkZvbyIpLCAiQmFyIiwKKyAgICAgICAgICAgIGNmLmdldChzZWxmLmRlZmF1bHRfc2VjdGlvbiwgIkZvbyIpLCAiQmFyIiwKICAgICAgICAgICAgICJjb3VsZCBub3QgbG9jYXRlIG9wdGlvbiwgZXhwZWN0aW5nIGNhc2UtaW5zZW5zaXRpdmUgb3B0aW9uIG5hbWVzIikKICAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZyh7IkZvbyI6ICJCYXIifSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNmLmdldCgiREVGQVVMVCIsICJGb28iKSwgIkJhciIsCisgICAgICAgICAgICBjZi5nZXQoc2VsZi5kZWZhdWx0X3NlY3Rpb24sICJGb28iKSwgIkJhciIsCiAgICAgICAgICAgICAiY291bGQgbm90IGxvY2F0ZSBvcHRpb24sIGV4cGVjdGluZyBjYXNlLWluc2Vuc2l0aXZlIGRlZmF1bHRzIikKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2Vycm9ycyhzZWxmKToKLSAgICAgICAgc2VsZi5uZXdjb25maWcoKQotICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG4gIGV4dHJhLXNwYWNlczogc3BsYXRcbiIpCi0gICAgICAgIHNlbGYucGFyc2VfZXJyb3IoY29uZmlncGFyc2VyLlBhcnNpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbiAgZXh0cmEtc3BhY2VzPSBzcGxhdFxuIikKLSAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihjb25maWdwYXJzZXIuUGFyc2luZ0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxub3B0aW9uLXdpdGhvdXQtdmFsdWVcbiIpCi0gICAgICAgIHNlbGYucGFyc2VfZXJyb3IoY29uZmlncGFyc2VyLlBhcnNpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbjp2YWx1ZS13aXRob3V0LW9wdGlvbi1uYW1lXG4iKQotICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIltGb29dXG49dmFsdWUtd2l0aG91dC1vcHRpb24tbmFtZVxuIikKLSAgICAgICAgc2VsZi5wYXJzZV9lcnJvcihjb25maWdwYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gU2VjdGlvbiFcbiIpCisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQorICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKGNmLCBjb25maWdwYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ7fXZhbC13aXRob3V0LW9wdC1uYW1lXG4iLmZvcm1hdChzZWxmLmRlbGltaXRlcnNbMF0pKQorICAgICAgICBzZWxmLnBhcnNlX2Vycm9yKGNmLCBjb25maWdwYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbRm9vXVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ7fXZhbC13aXRob3V0LW9wdC1uYW1lXG4iLmZvcm1hdChzZWxmLmRlbGltaXRlcnNbMV0pKQorICAgICAgICBlID0gc2VsZi5wYXJzZV9lcnJvcihjZiwgY29uZmlncGFyc2VyLk1pc3NpbmdTZWN0aW9uSGVhZGVyRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyBTZWN0aW9uIVxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgnPD8/Pz4nLCAxLCAiTm8gU2VjdGlvbiFcbiIpKQorICAgICAgICBpZiBub3Qgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgIGUgPSBzZWxmLnBhcnNlX2Vycm9yKGNmLCBjb25maWdwYXJzZXIuUGFyc2luZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiW0Zvb11cbiAgd3JvbmctaW5kZW50XG4iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgnPD8/Pz4nLCkpCisgICAgICAgICAgICAjIHJlYWRfZmlsZSBvbiBhIHJlYWwgZmlsZQorICAgICAgICAgICAgdHJpY2t5ID0gc3VwcG9ydC5maW5kZmlsZSgiY2ZncGFyc2VyLjMiKQorICAgICAgICAgICAgaWYgc2VsZi5kZWxpbWl0ZXJzWzBdID09ICc9JzoKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICh0cmlja3ksKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJvciA9IGNvbmZpZ3BhcnNlci5NaXNzaW5nU2VjdGlvbkhlYWRlckVycm9yCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAodHJpY2t5LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICMgSU5JIHdpdGggYXMgbWFueSB0cmlja3kgcGFydHMgYXMgcG9zc2libGVcbicpCisgICAgICAgICAgICB3aXRoIG9wZW4odHJpY2t5LCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICAgICAgICAgIGUgPSBzZWxmLnBhcnNlX2Vycm9yKGNmLCBlcnJvciwgZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBleHBlY3RlZCkKIAotICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBleGMsIHNyYyk6Ci0gICAgICAgIHNpbyA9IGlvLlN0cmluZ0lPKHNyYykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBzZWxmLmNmLnJlYWRmcCwgc2lvKQorICAgIGRlZiBwYXJzZV9lcnJvcihzZWxmLCBjZiwgZXhjLCBzcmMpOgorICAgICAgICBpZiBoYXNhdHRyKHNyYywgJ3JlYWRsaW5lJyk6CisgICAgICAgICAgICBzaW8gPSBzcmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNpbyA9IGlvLlN0cmluZ0lPKHNyYykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGMpIGFzIGNtOgorICAgICAgICAgICAgY2YucmVhZF9maWxlKHNpbykKKyAgICAgICAgcmV0dXJuIGNtLmV4Y2VwdGlvbgogCiAgICAgZGVmIHRlc3RfcXVlcnlfZXJyb3JzKHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5zZWN0aW9ucygpLCBbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAibmV3IENvbmZpZ1BhcnNlciBzaG91bGQgaGF2ZSBubyBkZWZpbmVkIHNlY3Rpb25zIikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjZi5oYXNfc2VjdGlvbigiRm9vIiksCi0gICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGFja25vd2xlZGdlZCBzZWN0aW9ucyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yub3B0aW9ucywgIkZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yuc2V0LCAiZm9vIiwgImJhciIsICJ2YWx1ZSIpCi0gICAgICAgIHNlbGYuZ2V0X2Vycm9yKGNvbmZpZ3BhcnNlci5Ob1NlY3Rpb25FcnJvciwgImZvbyIsICJiYXIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICJuZXcgQ29uZmlnUGFyc2VyIHNob3VsZCBoYXZlIG5vIGFja25vd2xlZGdlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY3Rpb25zIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgY2Yub3B0aW9ucygiRm9vIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IpOgorICAgICAgICAgICAgY2Yuc2V0KCJmb28iLCAiYmFyIiwgInZhbHVlIikKKyAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKGNmLCBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IsICJmb28iLCAiYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgiZm9vIiwpKQogICAgICAgICBjZi5hZGRfc2VjdGlvbigiZm9vIikKLSAgICAgICAgc2VsZi5nZXRfZXJyb3IoY29uZmlncGFyc2VyLk5vT3B0aW9uRXJyb3IsICJmb28iLCAiYmFyIikKKyAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKGNmLCBjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvciwgImZvbyIsICJiYXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJiYXIiLCAiZm9vIikpCiAKLSAgICBkZWYgZ2V0X2Vycm9yKHNlbGYsIGV4Yywgc2VjdGlvbiwgb3B0aW9uKToKKyAgICBkZWYgZ2V0X2Vycm9yKHNlbGYsIGNmLCBleGMsIHNlY3Rpb24sIG9wdGlvbik6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuY2YuZ2V0KHNlY3Rpb24sIG9wdGlvbikKKyAgICAgICAgICAgIGNmLmdldChzZWN0aW9uLCBvcHRpb24pCiAgICAgICAgIGV4Y2VwdCBleGMgYXMgZToKICAgICAgICAgICAgIHJldHVybiBlCiAgICAgICAgIGVsc2U6CkBAIC0xODUsMjEgKzU4NCwyMSBAQAogICAgIGRlZiB0ZXN0X2Jvb2xlYW4oc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKAogICAgICAgICAgICAgIltCT09MVEVTVF1cbiIKLSAgICAgICAgICAgICJUMT0xXG4iCi0gICAgICAgICAgICAiVDI9VFJVRVxuIgotICAgICAgICAgICAgIlQzPVRydWVcbiIKLSAgICAgICAgICAgICJUND1vTlxuIgotICAgICAgICAgICAgIlQ1PXllc1xuIgotICAgICAgICAgICAgIkYxPTBcbiIKLSAgICAgICAgICAgICJGMj1GQUxTRVxuIgotICAgICAgICAgICAgIkYzPUZhbHNlXG4iCi0gICAgICAgICAgICAiRjQ9b0ZGXG4iCi0gICAgICAgICAgICAiRjU9bk9cbiIKLSAgICAgICAgICAgICJFMT0yXG4iCi0gICAgICAgICAgICAiRTI9Zm9vXG4iCi0gICAgICAgICAgICAiRTM9LTFcbiIKLSAgICAgICAgICAgICJFND0wLjFcbiIKLSAgICAgICAgICAgICJFNT1GQUxTRSBBTkQgTU9SRSIKKyAgICAgICAgICAgICJUMXtlcXVhbHN9MVxuIgorICAgICAgICAgICAgIlQye2VxdWFsc31UUlVFXG4iCisgICAgICAgICAgICAiVDN7ZXF1YWxzfVRydWVcbiIKKyAgICAgICAgICAgICJUNHtlcXVhbHN9b05cbiIKKyAgICAgICAgICAgICJUNXtlcXVhbHN9eWVzXG4iCisgICAgICAgICAgICAiRjF7ZXF1YWxzfTBcbiIKKyAgICAgICAgICAgICJGMntlcXVhbHN9RkFMU0VcbiIKKyAgICAgICAgICAgICJGM3tlcXVhbHN9RmFsc2VcbiIKKyAgICAgICAgICAgICJGNHtlcXVhbHN9b0ZGXG4iCisgICAgICAgICAgICAiRjV7ZXF1YWxzfW5PXG4iCisgICAgICAgICAgICAiRTF7ZXF1YWxzfTJcbiIKKyAgICAgICAgICAgICJFMntlcXVhbHN9Zm9vXG4iCisgICAgICAgICAgICAiRTN7ZXF1YWxzfS0xXG4iCisgICAgICAgICAgICAiRTR7ZXF1YWxzfTAuMVxuIgorICAgICAgICAgICAgIkU1e2VxdWFsc31GQUxTRSBBTkQgTU9SRSIuZm9ybWF0KGVxdWFscz1zZWxmLmRlbGltaXRlcnNbMF0pCiAgICAgICAgICAgICApCiAgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIDUpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNmLmdldGJvb2xlYW4oJ0JPT0xURVNUJywgJ3QlZCcgJSB4KSkKQEAgLTIxMCwzNSArNjA5LDkxIEBACiAgICAgZGVmIHRlc3Rfd2VpcmRfZXJyb3JzKHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKICAgICAgICAgY2YuYWRkX3NlY3Rpb24oIkZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5EdXBsaWNhdGVTZWN0aW9uRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uLCAiRm9vIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uKCJGb28iKQorICAgICAgICBlID0gY20uZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiU2VjdGlvbiAnRm9vJyBhbHJlYWR5IGV4aXN0cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoIkZvbyIsIE5vbmUsIE5vbmUpKQorCisgICAgICAgIGlmIHNlbGYuc3RyaWN0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBjZi5yZWFkX3N0cmluZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgICAgICBbRm9vXQorICAgICAgICAgICAgICAgICAgICB3aWxsIHRoaXMgYmUgYWRkZWR7ZXF1YWxzfVRydWUKKyAgICAgICAgICAgICAgICAgICAgW0Jhcl0KKyAgICAgICAgICAgICAgICAgICAgd2hhdCBhYm91dCB0aGlze2VxdWFsc31UcnVlCisgICAgICAgICAgICAgICAgICAgIFtGb29dCisgICAgICAgICAgICAgICAgICAgIG9vcHN7ZXF1YWxzfXRoaXMgd29uJ3QKKyAgICAgICAgICAgICAgICAiIiIuZm9ybWF0KGVxdWFscz1zZWxmLmRlbGltaXRlcnNbMF0pKSwgc291cmNlPSc8Zm9vLWJhcj4nKQorICAgICAgICAgICAgZSA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJXaGlsZSByZWFkaW5nIGZyb20gPGZvby1iYXI+IFtsaW5lICA1XTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWN0aW9uICdGb28nIGFscmVhZHkgZXhpc3RzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoIkZvbyIsICc8Zm9vLWJhcj4nLCA1KSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuRHVwbGljYXRlT3B0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGNmLnJlYWRfZGljdCh7J0Jhcic6IHsnb3B0JzogJ3ZhbCcsICdPUFQnOiAnaXMgcmVhbGx5IGBvcHRgJ319KQorICAgICAgICAgICAgZSA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJXaGlsZSByZWFkaW5nIGZyb20gPGRpY3Q+OiBvcHRpb24gJ29wdCcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBzZWN0aW9uICdCYXInIGFscmVhZHkgZXhpc3RzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoIkJhciIsICJvcHQiLCAiPGRpY3Q+IiwgTm9uZSkpCiAKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKLSAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoCisgICAgICAgIGNvbmZpZ19zdHJpbmcgPSAoCiAgICAgICAgICAgICAiW0xvbmcgTGluZV1cbiIKLSAgICAgICAgICAgICJmb286IHRoaXMgbGluZSBpcyBtdWNoLCBtdWNoIGxvbmdlciB0aGFuIG15IGVkaXRvclxuIgorICAgICAgICAgICAgImZvb3swWzBdfSB0aGlzIGxpbmUgaXMgbXVjaCwgbXVjaCBsb25nZXIgdGhhbiBteSBlZGl0b3JcbiIKICAgICAgICAgICAgICIgICBsaWtlcyBpdC5cbiIKLSAgICAgICAgICAgICJbREVGQVVMVF1cbiIKLSAgICAgICAgICAgICJmb286IGFub3RoZXIgdmVyeVxuIgotICAgICAgICAgICAgIiBsb25nIGxpbmUiCisgICAgICAgICAgICAiW3tkZWZhdWx0X3NlY3Rpb259XVxuIgorICAgICAgICAgICAgImZvb3swWzFdfSBhbm90aGVyIHZlcnlcbiIKKyAgICAgICAgICAgICIgbG9uZyBsaW5lXG4iCisgICAgICAgICAgICAiW0xvbmcgTGluZSAtIFdpdGggQ29tbWVudHMhXVxuIgorICAgICAgICAgICAgInRlc3QgezBbMV19IHdlICAgICAgICB7Y29tbWVudH0gY2FuXG4iCisgICAgICAgICAgICAiICAgICAgICAgICAgYWxzbyAgICAgIHtjb21tZW50fSBwbGFjZVxuIgorICAgICAgICAgICAgIiAgICAgICAgICAgIGNvbW1lbnRzICB7Y29tbWVudH0gaW5cbiIKKyAgICAgICAgICAgICIgICAgICAgICAgICBtdWx0aWxpbmUge2NvbW1lbnR9IHZhbHVlcyIKKyAgICAgICAgICAgICJcbiIuZm9ybWF0KHNlbGYuZGVsaW1pdGVycywgY29tbWVudD1zZWxmLmNvbW1lbnRfcHJlZml4ZXNbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NlY3Rpb249c2VsZi5kZWZhdWx0X3NlY3Rpb24pCiAgICAgICAgICAgICApCi0gICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgY2Yud3JpdGUob3V0cHV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgb3V0cHV0LmdldHZhbHVlKCksCi0gICAgICAgICAgICAiW0RFRkFVTFRdXG4iCi0gICAgICAgICAgICAiZm9vID0gYW5vdGhlciB2ZXJ5XG4iCi0gICAgICAgICAgICAiXHRsb25nIGxpbmVcbiIKLSAgICAgICAgICAgICJcbiIKLSAgICAgICAgICAgICJbTG9uZyBMaW5lXVxuIgotICAgICAgICAgICAgImZvbyA9IHRoaXMgbGluZSBpcyBtdWNoLCBtdWNoIGxvbmdlciB0aGFuIG15IGVkaXRvclxuIgotICAgICAgICAgICAgIlx0bGlrZXMgaXQuXG4iCi0gICAgICAgICAgICAiXG4iCisgICAgICAgIGlmIHNlbGYuYWxsb3dfbm9fdmFsdWU6CisgICAgICAgICAgICBjb25maWdfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICJbVmFsdWVsZXNzXVxuIgorICAgICAgICAgICAgIm9wdGlvbi13aXRob3V0LXZhbHVlXG4iCiAgICAgICAgICAgICApCiAKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoY29uZmlnX3N0cmluZykKKyAgICAgICAgZm9yIHNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzIGluIChUcnVlLCBGYWxzZSk6CisgICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICBjZi53cml0ZShvdXRwdXQsIHNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzPXNwYWNlX2Fyb3VuZF9kZWxpbWl0ZXJzKQorICAgICAgICAgICAgZGVsaW1pdGVyID0gc2VsZi5kZWxpbWl0ZXJzWzBdCisgICAgICAgICAgICBpZiBzcGFjZV9hcm91bmRfZGVsaW1pdGVyczoKKyAgICAgICAgICAgICAgICBkZWxpbWl0ZXIgPSAiIHt9ICIuZm9ybWF0KGRlbGltaXRlcikKKyAgICAgICAgICAgIGV4cGVjdF9zdHJpbmcgPSAoCisgICAgICAgICAgICAgICAgIlt7ZGVmYXVsdF9zZWN0aW9ufV1cbiIKKyAgICAgICAgICAgICAgICAiZm9ve2VxdWFsc31hbm90aGVyIHZlcnlcbiIKKyAgICAgICAgICAgICAgICAiXHRsb25nIGxpbmVcbiIKKyAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgIltMb25nIExpbmVdXG4iCisgICAgICAgICAgICAgICAgImZvb3tlcXVhbHN9dGhpcyBsaW5lIGlzIG11Y2gsIG11Y2ggbG9uZ2VyIHRoYW4gbXkgZWRpdG9yXG4iCisgICAgICAgICAgICAgICAgIlx0bGlrZXMgaXQuXG4iCisgICAgICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgICAgICJbTG9uZyBMaW5lIC0gV2l0aCBDb21tZW50cyFdXG4iCisgICAgICAgICAgICAgICAgInRlc3R7ZXF1YWxzfXdlXG4iCisgICAgICAgICAgICAgICAgIlx0YWxzb1xuIgorICAgICAgICAgICAgICAgICJcdGNvbW1lbnRzXG4iCisgICAgICAgICAgICAgICAgIlx0bXVsdGlsaW5lXG4iCisgICAgICAgICAgICAgICAgIlxuIi5mb3JtYXQoZXF1YWxzPWRlbGltaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NlY3Rpb249c2VsZi5kZWZhdWx0X3NlY3Rpb24pCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgaWYgc2VsZi5hbGxvd19ub192YWx1ZToKKyAgICAgICAgICAgICAgICBleHBlY3Rfc3RyaW5nICs9ICgKKyAgICAgICAgICAgICAgICAgICAgIltWYWx1ZWxlc3NdXG4iCisgICAgICAgICAgICAgICAgICAgICJvcHRpb24td2l0aG91dC12YWx1ZVxuIgorICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdF9zdHJpbmcpCisKICAgICBkZWYgdGVzdF9zZXRfc3RyaW5nX3R5cGVzKHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3RdXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xPWZvb1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbjF7ZXF9Zm9vXG4iLmZvcm1hdChlcT1zZWxmLmRlbGltaXRlcnNbMF0pKQogICAgICAgICAjIENoZWNrIHRoYXQgd2UgZG9uJ3QgZ2V0IGFuIGV4Y2VwdGlvbiB3aGVuIHNldHRpbmcgdmFsdWVzIGluCiAgICAgICAgICMgYW4gZXhpc3Rpbmcgc2VjdGlvbiB1c2luZyBzdHJpbmdzOgogICAgICAgICBjbGFzcyBteXN0cihzdHIpOgpAQCAtMjUxLDYgKzcwNiw5IEBACiAgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24yIiwgInNwbGF0IikKIAogICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuc19maWxlX2xpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZGVsaW1pdGVyc1swXSAhPSAnPSc6CisgICAgICAgICAgICAjIHNraXAgcmVhZGluZyB0aGUgZmlsZSBpZiB3ZSdyZSB1c2luZyBhbiBpbmNvbXBhdGlibGUgZm9ybWF0CisgICAgICAgICAgICByZXR1cm4KICAgICAgICAgZmlsZTEgPSBzdXBwb3J0LmZpbmRmaWxlKCJjZmdwYXJzZXIuMSIpCiAgICAgICAgICMgY2hlY2sgd2hlbiB3ZSBwYXNzIGEgbWl4IG9mIHJlYWRhYmxlIGFuZCBub24tcmVhZGFibGUgZmlsZXM6CiAgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQpAQCAtMjc1LDE0NiArNzMzLDEwNiBAQAogICAgIGRlZiBnZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmZyb21zdHJpbmcoCiAgICAgICAgICAgICAiW0Zvb11cbiIKLSAgICAgICAgICAgICJiYXI9c29tZXRoaW5nICUod2l0aDEpcyBpbnRlcnBvbGF0aW9uICgxIHN0ZXApXG4iCi0gICAgICAgICAgICAiYmFyOT1zb21ldGhpbmcgJSh3aXRoOSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoOSBzdGVwcylcbiIKLSAgICAgICAgICAgICJiYXIxMD1zb21ldGhpbmcgJSh3aXRoMTApcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKVxuIgotICAgICAgICAgICAgImJhcjExPXNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpXG4iCi0gICAgICAgICAgICAid2l0aDExPSUod2l0aDEwKXNcbiIKLSAgICAgICAgICAgICJ3aXRoMTA9JSh3aXRoOSlzXG4iCi0gICAgICAgICAgICAid2l0aDk9JSh3aXRoOClzXG4iCi0gICAgICAgICAgICAid2l0aDg9JShXaXRoNylzXG4iCi0gICAgICAgICAgICAid2l0aDc9JShXSVRINilzXG4iCi0gICAgICAgICAgICAid2l0aDY9JSh3aXRoNSlzXG4iCi0gICAgICAgICAgICAiV2l0aDU9JSh3aXRoNClzXG4iCi0gICAgICAgICAgICAiV0lUSDQ9JSh3aXRoMylzXG4iCi0gICAgICAgICAgICAid2l0aDM9JSh3aXRoMilzXG4iCi0gICAgICAgICAgICAid2l0aDI9JSh3aXRoMSlzXG4iCi0gICAgICAgICAgICAid2l0aDE9d2l0aFxuIgorICAgICAgICAgICAgImJhcntlcXVhbHN9c29tZXRoaW5nICUod2l0aDEpcyBpbnRlcnBvbGF0aW9uICgxIHN0ZXApXG4iCisgICAgICAgICAgICAiYmFyOXtlcXVhbHN9c29tZXRoaW5nICUod2l0aDkpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDkgc3RlcHMpXG4iCisgICAgICAgICAgICAiYmFyMTB7ZXF1YWxzfXNvbWV0aGluZyAlKHdpdGgxMClzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTAgc3RlcHMpXG4iCisgICAgICAgICAgICAiYmFyMTF7ZXF1YWxzfXNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpXG4iCisgICAgICAgICAgICAid2l0aDExe2VxdWFsc30lKHdpdGgxMClzXG4iCisgICAgICAgICAgICAid2l0aDEwe2VxdWFsc30lKHdpdGg5KXNcbiIKKyAgICAgICAgICAgICJ3aXRoOXtlcXVhbHN9JSh3aXRoOClzXG4iCisgICAgICAgICAgICAid2l0aDh7ZXF1YWxzfSUoV2l0aDcpc1xuIgorICAgICAgICAgICAgIndpdGg3e2VxdWFsc30lKFdJVEg2KXNcbiIKKyAgICAgICAgICAgICJ3aXRoNntlcXVhbHN9JSh3aXRoNSlzXG4iCisgICAgICAgICAgICAiV2l0aDV7ZXF1YWxzfSUod2l0aDQpc1xuIgorICAgICAgICAgICAgIldJVEg0e2VxdWFsc30lKHdpdGgzKXNcbiIKKyAgICAgICAgICAgICJ3aXRoM3tlcXVhbHN9JSh3aXRoMilzXG4iCisgICAgICAgICAgICAid2l0aDJ7ZXF1YWxzfSUod2l0aDEpc1xuIgorICAgICAgICAgICAgIndpdGgxe2VxdWFsc313aXRoXG4iCiAgICAgICAgICAgICAiXG4iCiAgICAgICAgICAgICAiW011dHVhbCBSZWN1cnNpb25dXG4iCi0gICAgICAgICAgICAiZm9vPSUoYmFyKXNcbiIKLSAgICAgICAgICAgICJiYXI9JShmb28pc1xuIgorICAgICAgICAgICAgImZvb3tlcXVhbHN9JShiYXIpc1xuIgorICAgICAgICAgICAgImJhcntlcXVhbHN9JShmb28pc1xuIgogICAgICAgICAgICAgIlxuIgogICAgICAgICAgICAgIltJbnRlcnBvbGF0aW9uIEVycm9yXVxuIgotICAgICAgICAgICAgIm5hbWU9JShyZWZlcmVuY2Upc1xuIiwKICAgICAgICAgICAgICMgbm8gZGVmaW5pdGlvbiBmb3IgJ3JlZmVyZW5jZScKLSAgICAgICAgICAgIGRlZmF1bHRzPXsiZ2V0bmFtZSI6ICIlKF9fbmFtZV9fKXMifSkKKyAgICAgICAgICAgICJuYW1le2VxdWFsc30lKHJlZmVyZW5jZSlzXG4iLmZvcm1hdChlcXVhbHM9c2VsZi5kZWxpbWl0ZXJzWzBdKSkKIAogICAgIGRlZiBjaGVja19pdGVtc19jb25maWcoc2VsZiwgZXhwZWN0ZWQpOgotICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygKLSAgICAgICAgICAgICJbc2VjdGlvbl1cbiIKLSAgICAgICAgICAgICJuYW1lID0gdmFsdWVcbiIKLSAgICAgICAgICAgICJrZXk6IHwlKG5hbWUpc3wgXG4iCi0gICAgICAgICAgICAiZ2V0ZGVmYXVsdDogfCUoZGVmYXVsdClzfFxuIgotICAgICAgICAgICAgImdldG5hbWU6IHwlKF9fbmFtZV9fKXN8IiwKLSAgICAgICAgICAgIGRlZmF1bHRzPXsiZGVmYXVsdCI6ICI8ZGVmYXVsdD4ifSkKLSAgICAgICAgTCA9IGxpc3QoY2YuaXRlbXMoInNlY3Rpb24iKSkKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIiIiCisgICAgICAgICAgICBbc2VjdGlvbl0KKyAgICAgICAgICAgIG5hbWUgezBbMF19ICUodmFsdWUpcworICAgICAgICAgICAga2V5ezBbMV19IHwlKG5hbWUpc3wKKyAgICAgICAgICAgIGdldGRlZmF1bHR7MFsxXX0gfCUoZGVmYXVsdClzfAorICAgICAgICAiIiIuZm9ybWF0KHNlbGYuZGVsaW1pdGVycyksIGRlZmF1bHRzPXsiZGVmYXVsdCI6ICI8ZGVmYXVsdD4ifSkKKyAgICAgICAgTCA9IGxpc3QoY2YuaXRlbXMoInNlY3Rpb24iLCB2YXJzPXsndmFsdWUnOiAndmFsdWUnfSkpCiAgICAgICAgIEwuc29ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCwgZXhwZWN0ZWQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLk5vU2VjdGlvbkVycm9yKToKKyAgICAgICAgICAgIGNmLml0ZW1zKCJubyBzdWNoIHNlY3Rpb24iKQogCiAKLWNsYXNzIENvbmZpZ1BhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6CitjbGFzcyBTdHJpY3RUZXN0Q2FzZShCYXNpY1Rlc3RDYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBjb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyCisgICAgc3RyaWN0ID0gVHJ1ZQorCisKK2NsYXNzIENvbmZpZ1BhcnNlclRlc3RDYXNlKEJhc2ljVGVzdENhc2UpOgogICAgIGNvbmZpZ19jbGFzcyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb24oc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiZ2V0bmFtZSIpLCAiRm9vIikKICAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyIiksICJzb21ldGhpbmcgd2l0aCBpbnRlcnBvbGF0aW9uICgxIHN0ZXApIikKICAgICAgICAgZXEoY2YuZ2V0KCJGb28iLCAiYmFyOSIpLAogICAgICAgICAgICAic29tZXRoaW5nIHdpdGggbG90cyBvZiBpbnRlcnBvbGF0aW9uICg5IHN0ZXBzKSIpCiAgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjEwIiksCiAgICAgICAgICAgICJzb21ldGhpbmcgd2l0aCBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKSIpCi0gICAgICAgIHNlbGYuZ2V0X2Vycm9yKGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvciwgIkZvbyIsICJiYXIxMSIpCisgICAgICAgIGUgPSBzZWxmLmdldF9lcnJvcihjZiwgY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yLCAiRm9vIiwgImJhcjExIikKKyAgICAgICAgaWYgc2VsZi5pbnRlcnBvbGF0aW9uID09IGNvbmZpZ3BhcnNlci5fVU5TRVQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCJiYXIxMSIsICJGb28iLCAiJSh3aXRoMSlzIikpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmludGVycG9sYXRpb24sIGNvbmZpZ3BhcnNlci5MZWdhY3lJbnRlcnBvbGF0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoImJhcjExIiwgIkZvbyIsCisgICAgICAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIikpCiAKICAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uX21pc3NpbmdfdmFsdWUoc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5nZXRfaW50ZXJwb2xhdGlvbl9jb25maWcoKQotICAgICAgICBlID0gc2VsZi5nZXRfZXJyb3IoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25FcnJvciwKKyAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKGNmLCBjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcnBvbGF0aW9uIEVycm9yIiwgIm5hbWUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUucmVmZXJlbmNlLCAicmVmZXJlbmNlIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnNlY3Rpb24sICJJbnRlcnBvbGF0aW9uIEVycm9yIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm9wdGlvbiwgIm5hbWUiKQorICAgICAgICBpZiBzZWxmLmludGVycG9sYXRpb24gPT0gY29uZmlncGFyc2VyLl9VTlNFVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoJ25hbWUnLCAnSW50ZXJwb2xhdGlvbiBFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJ3JlZmVyZW5jZScpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uoc2VsZi5pbnRlcnBvbGF0aW9uLCBjb25maWdwYXJzZXIuTGVnYWN5SW50ZXJwb2xhdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgKCduYW1lJywgJ0ludGVycG9sYXRpb24gRXJyb3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUocmVmZXJlbmNlKXMnLCAncmVmZXJlbmNlJykpCiAKICAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19pdGVtc19jb25maWcoWygnZGVmYXVsdCcsICc8ZGVmYXVsdD4nKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZ2V0ZGVmYXVsdCcsICd8PGRlZmF1bHQ+fCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdnZXRuYW1lJywgJ3xzZWN0aW9ufCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrZXknLCAnfHZhbHVlfCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCduYW1lJywgJ3ZhbHVlJyldKQotCi0gICAgZGVmIHRlc3Rfc2V0X25vbnN0cmluZ190eXBlcyhzZWxmKToKLSAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCi0gICAgICAgIGNmLmFkZF9zZWN0aW9uKCdub24tc3RyaW5nJykKLSAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2ludCcsIDEpCi0gICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdsaXN0JywgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAnJSgnXSkKLSAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2RpY3QnLCB7J3BpJzogMy4xNDE1OSwgJyUoJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUobGlzdCknOiAnJShsaXN0KSd9KQotICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnc3RyaW5nX3dpdGhfaW50ZXJwb2xhdGlvbicsICclKGxpc3QpcycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2ludCcsIHJhdz1UcnVlKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5nZXQsICdub24tc3RyaW5nJywgJ2ludCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2xpc3QnLCByYXc9VHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAnJSgnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5nZXQsICdub24tc3RyaW5nJywgJ2xpc3QnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdkaWN0JywgcmF3PVRydWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHsncGknOiAzLjE0MTU5LCAnJSgnOiAxLCAnJShsaXN0KSc6ICclKGxpc3QpJ30pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsICdkaWN0JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnc3RyaW5nX3dpdGhfaW50ZXJwb2xhdGlvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdz1UcnVlKSwgJyUobGlzdClzJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2YuZ2V0LCAnbm9uLXN0cmluZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdzdHJpbmdfd2l0aF9pbnRlcnBvbGF0aW9uJywgcmF3PUZhbHNlKQotCi0KLWNsYXNzIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlKFRlc3RDYXNlQmFzZSk6Ci0gICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcgotCi0gICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbihzZWxmKToKLSAgICAgICAgY2YgPSBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCi0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJnZXRuYW1lIiksICIlKF9fbmFtZV9fKXMiKQotICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXIiKSwKLSAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxKXMgaW50ZXJwb2xhdGlvbiAoMSBzdGVwKSIpCi0gICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjkiKSwKLSAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGg5KXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICg5IHN0ZXBzKSIpCi0gICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjEwIiksCi0gICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTApcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKSIpCi0gICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjExIiksCi0gICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTEpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKSIpCi0KLSAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja19pdGVtc19jb25maWcoWygnZGVmYXVsdCcsICc8ZGVmYXVsdD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZ2V0ZGVmYXVsdCcsICd8JShkZWZhdWx0KXN8JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2dldG5hbWUnLCAnfCUoX19uYW1lX18pc3wnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna2V5JywgJ3wlKG5hbWUpc3wnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbmFtZScsICd2YWx1ZScpXSkKLQotICAgIGRlZiB0ZXN0X3NldF9ub25zdHJpbmdfdHlwZXMoc2VsZik6Ci0gICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQotICAgICAgICBjZi5hZGRfc2VjdGlvbignbm9uLXN0cmluZycpCi0gICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdpbnQnLCAxKQotICAgICAgICBjZi5zZXQoJ25vbi1zdHJpbmcnLCAnbGlzdCcsIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxM10pCi0gICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdkaWN0JywgeydwaSc6IDMuMTQxNTl9KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdpbnQnKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnbGlzdCcpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxM10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2RpY3QnKSwgeydwaSc6IDMuMTQxNTl9KQotCi0KLWNsYXNzIFNhZmVDb25maWdQYXJzZXJUZXN0Q2FzZShDb25maWdQYXJzZXJUZXN0Q2FzZSk6Ci0gICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLlNhZmVDb25maWdQYXJzZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbmFtZScsICd2YWx1ZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd2YWx1ZScsICd2YWx1ZScpXSkKIAogICAgIGRlZiB0ZXN0X3NhZmVfaW50ZXJwb2xhdGlvbihzZWxmKToKICAgICAgICAgIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3NmLzUxMTczNwogICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3Rpb25dXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xPXh4eFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMj0lKG9wdGlvbjEpcy94eHhcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9rPSUob3B0aW9uMSlzLyUlc1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90X29rPSUob3B0aW9uMilzLyUlcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xe2VxfXh4eFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMntlcX0lKG9wdGlvbjEpcy94eHhcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9re2VxfSUob3B0aW9uMSlzLyUlc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90X29re2VxfSUob3B0aW9uMilzLyUlcyIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXE9c2VsZi5kZWxpbWl0ZXJzWzBdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoInNlY3Rpb24iLCAib2siKSwgInh4eC8lcyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJzZWN0aW9uIiwgIm5vdF9vayIpLCAieHh4L3h4eC8lcyIpCisgICAgICAgIGlmIHNlbGYuaW50ZXJwb2xhdGlvbiA9PSBjb25maWdwYXJzZXIuX1VOU0VUOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoInNlY3Rpb24iLCAibm90X29rIiksICJ4eHgveHh4LyVzIikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuaW50ZXJwb2xhdGlvbiwgY29uZmlncGFyc2VyLkxlZ2FjeUludGVycG9sYXRpb24pOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGNmLmdldCgic2VjdGlvbiIsICJub3Rfb2siKQogCiAgICAgZGVmIHRlc3Rfc2V0X21hbGZvcm1hdHRlZF9pbnRlcnBvbGF0aW9uKHNlbGYpOgogICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW3NlY3RdXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xPWZvb1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wdGlvbjF7ZXF9Zm9vXG4iLmZvcm1hdChlcT1zZWxmLmRlbGltaXRlcnNbMF0pKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdzZWN0JywgIm9wdGlvbjEiKSwgImZvbyIpCiAKQEAgLTQzMCw3ICs4NDgsNyBAQAogCiAgICAgZGVmIHRlc3Rfc2V0X25vbnN0cmluZ190eXBlcyhzZWxmKToKICAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0XVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMT1mb29cbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcHRpb24xe2VxfWZvb1xuIi5mb3JtYXQoZXE9c2VsZi5kZWxpbWl0ZXJzWzBdKSkKICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGdldCBhIFR5cGVFcnJvciB3aGVuIHNldHRpbmcgbm9uLXN0cmluZyB2YWx1ZXMKICAgICAgICAgIyBpbiBhbiBleGlzdGluZyBzZWN0aW9uOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMSIsIDEpCkBAIC00MzksMzAgKzg1Nyw0MzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjIiLCAxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLnNldCwgInNlY3QiLCAib3B0aW9uMiIsIDEuMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgIm9wdGlvbjIiLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjZi5zZXQsICJzZWN0IiwgMTIzLCAiaW52YWxpZCBvcHQgbmFtZSEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCAxMjMpCiAKLSAgICBkZWYgdGVzdF9hZGRfc2VjdGlvbl9kZWZhdWx0XzEoc2VsZik6CisgICAgZGVmIHRlc3RfYWRkX3NlY3Rpb25fZGVmYXVsdChzZWxmKToKICAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCAiZGVmYXVsdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNmLmFkZF9zZWN0aW9uLCBzZWxmLmRlZmF1bHRfc2VjdGlvbikKIAotICAgIGRlZiB0ZXN0X2FkZF9zZWN0aW9uX2RlZmF1bHRfMihzZWxmKToKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VOb0ludGVycG9sYXRpb24oQmFzaWNUZXN0Q2FzZSk6CisgICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIGludGVycG9sYXRpb24gPSBOb25lCisgICAgaW5pID0gdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICBbbnVtYmVyc10KKyAgICAgICAgb25lID0gMQorICAgICAgICB0d28gPSAlKG9uZSlzICogMgorICAgICAgICB0aHJlZSA9ICR7Y29tbW9uOm9uZX0gKiAzCisKKyAgICAgICAgW2hleGVuXQorICAgICAgICBzaXh0ZWVuID0gJHtudW1iZXJzOnR3b30gKiA4CisgICAgIiIiKS5zdHJpcCgpCisKKyAgICBkZWYgYXNzZXJ0TWF0Y2hlc0luaShzZWxmLCBjZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZbJ251bWJlcnMnXVsnb25lJ10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZlsnbnVtYmVycyddWyd0d28nXSwgJyUob25lKXMgKiAyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZlsnbnVtYmVycyddWyd0aHJlZSddLCAnJHtjb21tb246b25lfSAqIDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmWydoZXhlbiddWydzaXh0ZWVuJ10sICcke251bWJlcnM6dHdvfSAqIDgnKQorCisgICAgZGVmIHRlc3Rfbm9faW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoc2VsZi5pbmkpCisgICAgICAgIHNlbGYuYXNzZXJ0TWF0Y2hlc0luaShjZikKKworICAgIGRlZiB0ZXN0X2VtcHR5X2Nhc2Uoc2VsZik6CiAgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjZi5hZGRfc2VjdGlvbiwgIkRFRkFVTFQiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjZi5yZWFkX3N0cmluZygiIikpCisKKyAgICBkZWYgdGVzdF9ub25lX2FzX2RlZmF1bHRfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgQ3VzdG9tQ29uZmlnUGFyc2VyKGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIpOgorICAgICAgICAgICAgX0RFRkFVTFRfSU5URVJQT0xBVElPTiA9IE5vbmUKKworICAgICAgICBjZiA9IEN1c3RvbUNvbmZpZ1BhcnNlcigpCisgICAgICAgIGNmLnJlYWRfc3RyaW5nKHNlbGYuaW5pKQorICAgICAgICBzZWxmLmFzc2VydE1hdGNoZXNJbmkoY2YpCisKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VMZWdhY3lJbnRlcnBvbGF0aW9uKENvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyCisgICAgaW50ZXJwb2xhdGlvbiA9IGNvbmZpZ3BhcnNlci5MZWdhY3lJbnRlcnBvbGF0aW9uKCkKKworICAgIGRlZiB0ZXN0X3NldF9tYWxmb3JtYXR0ZWRfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcoIltzZWN0XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uMXtlcX1mb29cbiIuZm9ybWF0KGVxPXNlbGYuZGVsaW1pdGVyc1swXSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ3NlY3QnLCAib3B0aW9uMSIpLCAiZm9vIikKKworICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMSIsICIlZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ3NlY3QnLCAib3B0aW9uMSIpLCAiJWZvbyIpCisgICAgICAgIGNmLnNldCgic2VjdCIsICJvcHRpb24xIiwgImZvbyUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnc2VjdCcsICJvcHRpb24xIiksICJmb28lIikKKyAgICAgICAgY2Yuc2V0KCJzZWN0IiwgIm9wdGlvbjEiLCAiZiVvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdzZWN0JywgIm9wdGlvbjEiKSwgImYlb28iKQorCisgICAgICAgICMgYnVnICM1NzQxOiBkb3VibGUgcGVyY2VudHMgYXJlICpub3QqIG1hbGZvcm1lZAorICAgICAgICBjZi5zZXQoInNlY3QiLCAib3B0aW9uMiIsICJmb28lJWJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJzZWN0IiwgIm9wdGlvbjIiKSwgImZvbyUlYmFyIikKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VOb25TdGFuZGFyZERlbGltaXRlcnMoQ29uZmlnUGFyc2VyVGVzdENhc2UpOgorICAgIGRlbGltaXRlcnMgPSAoJzo9JywgJyQnKQorICAgIGNvbW1lbnRfcHJlZml4ZXMgPSAoJy8vJywgJyInKQorICAgIGlubGluZV9jb21tZW50X3ByZWZpeGVzID0gKCcvLycsICciJykKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VOb25TdGFuZGFyZERlZmF1bHRTZWN0aW9uKENvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBkZWZhdWx0X3NlY3Rpb24gPSAnZ2VuZXJhbCcKKworY2xhc3MgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIHdvbmRlcmZ1bF9zcGFtID0gKCJJJ20gaGF2aW5nIHNwYW0gc3BhbSBzcGFtIHNwYW0gIgorICAgICAgICAgICAgICAgICAgICAgICJzcGFtIHNwYW0gc3BhbSBiZWFrZWQgYmVhbnMgc3BhbSAiCisgICAgICAgICAgICAgICAgICAgICAgInNwYW0gc3BhbSBhbmQgc3BhbSEiKS5yZXBsYWNlKCcgJywgJ1x0XG4nKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHMgPSAnc2VjdGlvbnt9Jy5mb3JtYXQoaSkKKyAgICAgICAgICAgIGNmLmFkZF9zZWN0aW9uKHMpCisgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICAgICAgY2Yuc2V0KHMsICdsb3ZlbHlfc3BhbXt9Jy5mb3JtYXQoaiksIHNlbGYud29uZGVyZnVsX3NwYW0pCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgY2Yud3JpdGUoZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgb3MudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfZG9taW5hdGluZ19tdWx0aWxpbmVfdmFsdWVzKHNlbGYpOgorICAgICAgICAjIFdlJ3JlIHJlYWRpbmcgZnJvbSBmaWxlIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSBjaGFuZ2VkCisgICAgICAgICMgZHVyaW5nIHBlcmZvcm1hbmNlIHVwZGF0ZXMgaW4gUHl0aG9uIDMuMgorICAgICAgICBjZl9mcm9tX2ZpbGUgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIGNmX2Zyb21fZmlsZS5yZWFkX2ZpbGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZl9mcm9tX2ZpbGUuZ2V0KCdzZWN0aW9uOCcsICdsb3ZlbHlfc3BhbTQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLndvbmRlcmZ1bF9zcGFtLnJlcGxhY2UoJ1x0XG4nLCAnXG4nKSkKKworY2xhc3MgUmF3Q29uZmlnUGFyc2VyVGVzdENhc2UoQmFzaWNUZXN0Q2FzZSk6CisgICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcgorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmdldF9pbnRlcnBvbGF0aW9uX2NvbmZpZygpCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShjZi5nZXQoIkZvbyIsICJiYXIiKSwKKyAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxKXMgaW50ZXJwb2xhdGlvbiAoMSBzdGVwKSIpCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjkiKSwKKyAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGg5KXMgbG90cyBvZiBpbnRlcnBvbGF0aW9uICg5IHN0ZXBzKSIpCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjEwIiksCisgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTApcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDEwIHN0ZXBzKSIpCisgICAgICAgIGVxKGNmLmdldCgiRm9vIiwgImJhcjExIiksCisgICAgICAgICAgICJzb21ldGhpbmcgJSh3aXRoMTEpcyBsb3RzIG9mIGludGVycG9sYXRpb24gKDExIHN0ZXBzKSIpCisKKyAgICBkZWYgdGVzdF9pdGVtcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtc19jb25maWcoWygnZGVmYXVsdCcsICc8ZGVmYXVsdD4nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZ2V0ZGVmYXVsdCcsICd8JShkZWZhdWx0KXN8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2tleScsICd8JShuYW1lKXN8JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ25hbWUnLCAnJSh2YWx1ZSlzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3ZhbHVlJywgJ3ZhbHVlJyldKQorCisgICAgZGVmIHRlc3Rfc2V0X25vbnN0cmluZ190eXBlcyhzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGNmLmFkZF9zZWN0aW9uKCdub24tc3RyaW5nJykKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2ludCcsIDEpCisgICAgICAgIGNmLnNldCgnbm9uLXN0cmluZycsICdsaXN0JywgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzXSkKKyAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgJ2RpY3QnLCB7J3BpJzogMy4xNDE1OX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgJ2ludCcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbm9uLXN0cmluZycsICdsaXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoJ25vbi1zdHJpbmcnLCAnZGljdCcpLCB7J3BpJzogMy4xNDE1OX0pCisgICAgICAgIGNmLmFkZF9zZWN0aW9uKDEyMykKKyAgICAgICAgY2Yuc2V0KDEyMywgJ3RoaXMgaXMgc2ljaycsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KDEyMywgJ3RoaXMgaXMgc2ljaycpLCBUcnVlKQorICAgICAgICBpZiBjZi5fZGljdCBpcyBjb25maWdwYXJzZXIuX2RlZmF1bHRfZGljdDoKKyAgICAgICAgICAgICMgd291bGQgbm90IHdvcmsgZm9yIFNvcnRlZERpY3Q7IG9ubHkgY2hlY2tpbmcgZm9yIHRoZSBtb3N0IGNvbW1vbgorICAgICAgICAgICAgIyBkZWZhdWx0IGRpY3Rpb25hcnkgKE9yZGVyZWREaWN0KQorICAgICAgICAgICAgY2Yub3B0aW9ueGZvcm0gPSBsYW1iZGEgeDogeAorICAgICAgICAgICAgY2Yuc2V0KCdub24tc3RyaW5nJywgMSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdub24tc3RyaW5nJywgMSksIDEpCisKK2NsYXNzIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlTm9uU3RhbmRhcmREZWxpbWl0ZXJzKFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBkZWxpbWl0ZXJzID0gKCc6PScsICckJykKKyAgICBjb21tZW50X3ByZWZpeGVzID0gKCcvLycsICciJykKKyAgICBpbmxpbmVfY29tbWVudF9wcmVmaXhlcyA9ICgnLy8nLCAnIicpCisKK2NsYXNzIFJhd0NvbmZpZ1BhcnNlclRlc3RTYW1iYUNvbmYoQ2ZnUGFyc2VyVGVzdENhc2VDbGFzcyk6CisgICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcgorICAgIGNvbW1lbnRfcHJlZml4ZXMgPSAoJyMnLCAnOycsICctLS0tJykKKyAgICBpbmxpbmVfY29tbWVudF9wcmVmaXhlcyA9ICgnLy8nLCkKKyAgICBlbXB0eV9saW5lc19pbl92YWx1ZXMgPSBGYWxzZQorCisgICAgZGVmIHRlc3RfcmVhZGluZyhzZWxmKToKKyAgICAgICAgc21iY29uZiA9IHN1cHBvcnQuZmluZGZpbGUoImNmZ3BhcnNlci4yIikKKyAgICAgICAgIyBjaGVjayB3aGVuIHdlIHBhc3MgYSBtaXggb2YgcmVhZGFibGUgYW5kIG5vbi1yZWFkYWJsZSBmaWxlczoKKyAgICAgICAgY2YgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIHBhcnNlZF9maWxlcyA9IGNmLnJlYWQoW3NtYmNvbmYsICJub25leGlzdGVudC1maWxlIl0sIGVuY29kaW5nPSd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VkX2ZpbGVzLCBbc21iY29uZl0pCisgICAgICAgIHNlY3Rpb25zID0gWydnbG9iYWwnLCAnaG9tZXMnLCAncHJpbnRlcnMnLAorICAgICAgICAgICAgICAgICAgICAncHJpbnQkJywgJ3BkZi1nZW5lcmF0b3InLCAndG1wJywgJ0FndXN0aW4nXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLnNlY3Rpb25zKCksIHNlY3Rpb25zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgiZ2xvYmFsIiwgIndvcmtncm91cCIpLCAiTURLR1JPVVAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldGludCgiZ2xvYmFsIiwgIm1heCBsb2cgc2l6ZSIpLCA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5nZXQoImdsb2JhbCIsICJob3N0cyBhbGxvdyIpLCAiMTI3LiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCJ0bXAiLCAiZWNobyBjb21tYW5kIiksICJjYXQgJXM7IHJtICVzIikKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VFeHRlbmRlZEludGVycG9sYXRpb24oQmFzaWNUZXN0Q2FzZSk6CisgICAgY29uZmlnX2NsYXNzID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcgorICAgIGludGVycG9sYXRpb24gPSBjb25maWdwYXJzZXIuRXh0ZW5kZWRJbnRlcnBvbGF0aW9uKCkKKyAgICBkZWZhdWx0X3NlY3Rpb24gPSAnY29tbW9uJworICAgIHN0cmljdCA9IFRydWUKKworICAgIGRlZiBmcm9tc3RyaW5nKHNlbGYsIHN0cmluZywgZGVmYXVsdHM9Tm9uZSwgb3B0aW9ueGZvcm09Tm9uZSk6CisgICAgICAgIGNmID0gc2VsZi5uZXdjb25maWcoZGVmYXVsdHMpCisgICAgICAgIGlmIG9wdGlvbnhmb3JtOgorICAgICAgICAgICAgY2Yub3B0aW9ueGZvcm0gPSBvcHRpb254Zm9ybQorICAgICAgICBjZi5yZWFkX3N0cmluZyhzdHJpbmcpCisgICAgICAgIHJldHVybiBjZgorCisgICAgZGVmIHRlc3RfZXh0ZW5kZWRfaW50ZXJwb2xhdGlvbihzZWxmKToKKyAgICAgICAgY2YgPSBzZWxmLmZyb21zdHJpbmcodGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgW2NvbW1vbl0KKyAgICAgICAgICAgIGZhdm91cml0ZSBCZWF0bGUgPSBQYXVsCisgICAgICAgICAgICBmYXZvdXJpdGUgY29sb3IgPSBncmVlbgorCisgICAgICAgICAgICBbdG9tXQorICAgICAgICAgICAgZmF2b3VyaXRlIGJhbmQgPSAke2Zhdm91cml0ZSBjb2xvcn0gZGF5CisgICAgICAgICAgICBmYXZvdXJpdGUgcG9wZSA9IEpvaG4gJHtmYXZvdXJpdGUgQmVhdGxlfSBJSQorICAgICAgICAgICAgc2VxdWVsID0gJHtmYXZvdXJpdGUgcG9wZX1JCisKKyAgICAgICAgICAgIFthbWJ2XQorICAgICAgICAgICAgZmF2b3VyaXRlIEJlYXRsZSA9IEdlb3JnZQorICAgICAgICAgICAgc29uIG9mIEVkd2FyZCBWSUkgPSAke2Zhdm91cml0ZSBCZWF0bGV9IFYKKyAgICAgICAgICAgIHNvbiBvZiBHZW9yZ2UgViA9ICR7c29uIG9mIEVkd2FyZCBWSUl9SQorCisgICAgICAgICAgICBbc3RhbmxleV0KKyAgICAgICAgICAgIGZhdm91cml0ZSBCZWF0bGUgPSAke2FtYnY6ZmF2b3VyaXRlIEJlYXRsZX0KKyAgICAgICAgICAgIGZhdm91cml0ZSBwb3BlID0gJHt0b206ZmF2b3VyaXRlIHBvcGV9CisgICAgICAgICAgICBmYXZvdXJpdGUgY29sb3IgPSBibGFjaworICAgICAgICAgICAgZmF2b3VyaXRlIHN0YXRlIG9mIG1pbmQgPSBwYXJhbm9pZAorICAgICAgICAgICAgZmF2b3VyaXRlIG1vdmllID0gc295bGVudCAke2NvbW1vbjpmYXZvdXJpdGUgY29sb3J9CisgICAgICAgICAgICBmYXZvdXJpdGUgc29uZyA9ICR7ZmF2b3VyaXRlIGNvbG9yfSBzYWJiYXRoIC0gJHtmYXZvdXJpdGUgc3RhdGUgb2YgbWluZH0KKyAgICAgICAgIiIiKS5zdHJpcCgpKQorCisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorICAgICAgICBlcShjZlsnY29tbW9uJ11bJ2Zhdm91cml0ZSBCZWF0bGUnXSwgJ1BhdWwnKQorICAgICAgICBlcShjZlsnY29tbW9uJ11bJ2Zhdm91cml0ZSBjb2xvciddLCAnZ3JlZW4nKQorICAgICAgICBlcShjZlsndG9tJ11bJ2Zhdm91cml0ZSBCZWF0bGUnXSwgJ1BhdWwnKQorICAgICAgICBlcShjZlsndG9tJ11bJ2Zhdm91cml0ZSBjb2xvciddLCAnZ3JlZW4nKQorICAgICAgICBlcShjZlsndG9tJ11bJ2Zhdm91cml0ZSBiYW5kJ10sICdncmVlbiBkYXknKQorICAgICAgICBlcShjZlsndG9tJ11bJ2Zhdm91cml0ZSBwb3BlJ10sICdKb2huIFBhdWwgSUknKQorICAgICAgICBlcShjZlsndG9tJ11bJ3NlcXVlbCddLCAnSm9obiBQYXVsIElJSScpCisgICAgICAgIGVxKGNmWydhbWJ2J11bJ2Zhdm91cml0ZSBCZWF0bGUnXSwgJ0dlb3JnZScpCisgICAgICAgIGVxKGNmWydhbWJ2J11bJ2Zhdm91cml0ZSBjb2xvciddLCAnZ3JlZW4nKQorICAgICAgICBlcShjZlsnYW1ididdWydzb24gb2YgRWR3YXJkIFZJSSddLCAnR2VvcmdlIFYnKQorICAgICAgICBlcShjZlsnYW1ididdWydzb24gb2YgR2VvcmdlIFYnXSwgJ0dlb3JnZSBWSScpCisgICAgICAgIGVxKGNmWydzdGFubGV5J11bJ2Zhdm91cml0ZSBCZWF0bGUnXSwgJ0dlb3JnZScpCisgICAgICAgIGVxKGNmWydzdGFubGV5J11bJ2Zhdm91cml0ZSBjb2xvciddLCAnYmxhY2snKQorICAgICAgICBlcShjZlsnc3RhbmxleSddWydmYXZvdXJpdGUgc3RhdGUgb2YgbWluZCddLCAncGFyYW5vaWQnKQorICAgICAgICBlcShjZlsnc3RhbmxleSddWydmYXZvdXJpdGUgbW92aWUnXSwgJ3NveWxlbnQgZ3JlZW4nKQorICAgICAgICBlcShjZlsnc3RhbmxleSddWydmYXZvdXJpdGUgcG9wZSddLCAnSm9obiBQYXVsIElJJykKKyAgICAgICAgZXEoY2ZbJ3N0YW5sZXknXVsnZmF2b3VyaXRlIHNvbmcnXSwKKyAgICAgICAgICAgJ2JsYWNrIHNhYmJhdGggLSBwYXJhbm9pZCcpCisKKyAgICBkZWYgdGVzdF9lbmRsZXNzX2xvb3Aoc2VsZik6CisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgIFtvbmUgZm9yIHlvdV0KKyAgICAgICAgICAgIHBpbmcgPSAke29uZSBmb3IgbWU6cG9uZ30KKworICAgICAgICAgICAgW29uZSBmb3IgbWVdCisgICAgICAgICAgICBwb25nID0gJHtvbmUgZm9yIHlvdTpwaW5nfQorCisgICAgICAgICAgICBbc2VsZmlzaF0KKyAgICAgICAgICAgIG1lID0gJHttZX0KKyAgICAgICAgIiIiKS5zdHJpcCgpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25EZXB0aEVycm9yKToKKyAgICAgICAgICAgIGNmWydvbmUgZm9yIHlvdSddWydwaW5nJ10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3IpOgorICAgICAgICAgICAgY2ZbJ3NlbGZpc2gnXVsnbWUnXQorCisgICAgZGVmIHRlc3Rfc3RyYW5nZV9vcHRpb25zKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiIiIKKyAgICAgICAgICAgIFtkb2xsYXJzXQorICAgICAgICAgICAgJHZhciA9ICQkdmFsdWUKKyAgICAgICAgICAgICR2YXIyID0gJHskdmFyfQorICAgICAgICAgICAgJHtzaWNrfSA9IGNhbm5vdCBpbnRlcnBvbGF0ZSBtZQorCisgICAgICAgICAgICBbaW50ZXJwb2xhdGVkXQorICAgICAgICAgICAgJG90aGVyID0gJHtkb2xsYXJzOiR2YXJ9CisgICAgICAgICAgICAkdHJ5aW5nID0gJHtkb2xsYXJzOiR7c2lja319CisgICAgICAgICIiIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmWydkb2xsYXJzJ11bJyR2YXInXSwgJyR2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZbJ2ludGVycG9sYXRlZCddWyckb3RoZXInXSwgJyR2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2ZbJ2RvbGxhcnMnXVsnJHtzaWNrfSddLCAnY2Fubm90IGludGVycG9sYXRlIG1lJykKKyAgICAgICAgZXhjZXB0aW9uX2NsYXNzID0gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhleGNlcHRpb25fY2xhc3MpIGFzIGNtOgorICAgICAgICAgICAgY2ZbJ2ludGVycG9sYXRlZCddWyckdHJ5aW5nJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVmZXJlbmNlLCAnZG9sbGFyczoke3NpY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzJdLCAnfScpICNyYXd2YWwKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHlfYmFzaWMoc2VsZik6CisgICAgICAgIGluaSA9IHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgIFtjb21tb25dCisgICAgICAgICAgICBvcHRpb25sb3dlciA9IHZhbHVlCisgICAgICAgICAgICBPcHRpb25VcHBlciA9IFZhbHVlCisKKyAgICAgICAgICAgIFtDb21tb25dCisgICAgICAgICAgICBvcHRpb25sb3dlciA9IGEgYmV0dGVyICR7Y29tbW9uOm9wdGlvbmxvd2VyfQorICAgICAgICAgICAgT3B0aW9uVXBwZXIgPSBBIEJldHRlciAke2NvbW1vbjpPcHRpb25VcHBlcn0KKworICAgICAgICAgICAgW3JhbmRvbV0KKyAgICAgICAgICAgIGZvb2xvd2VyID0gJHtjb21tb246b3B0aW9ubG93ZXJ9IHJlZGVmaW5lZAorICAgICAgICAgICAgRm9vVXBwZXIgPSAke0NvbW1vbjpPcHRpb25VcHBlcn0gUmVkZWZpbmVkCisgICAgICAgICIiIikuc3RyaXAoKQorCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGluaSkKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKGNmWydjb21tb24nXVsnb3B0aW9ubG93ZXInXSwgJ3ZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ2NvbW1vbiddWydPcHRpb25VcHBlciddLCAnVmFsdWUnKQorICAgICAgICBlcShjZlsnQ29tbW9uJ11bJ29wdGlvbmxvd2VyJ10sICdhIGJldHRlciB2YWx1ZScpCisgICAgICAgIGVxKGNmWydDb21tb24nXVsnT3B0aW9uVXBwZXInXSwgJ0EgQmV0dGVyIFZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ3JhbmRvbSddWydmb29sb3dlciddLCAndmFsdWUgcmVkZWZpbmVkJykKKyAgICAgICAgZXEoY2ZbJ3JhbmRvbSddWydGb29VcHBlciddLCAnQSBCZXR0ZXIgVmFsdWUgUmVkZWZpbmVkJykKKworICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHlfY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBpbmkgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgICAgICBbY29tbW9uXQorICAgICAgICAgICAgb3B0aW9uID0gdmFsdWUKKyAgICAgICAgICAgIE9wdGlvbiA9IFZhbHVlCisKKyAgICAgICAgICAgIFtDb21tb25dCisgICAgICAgICAgICBvcHRpb24gPSBhIGJldHRlciAke2NvbW1vbjpvcHRpb259CisgICAgICAgICAgICBPcHRpb24gPSBBIEJldHRlciAke2NvbW1vbjpPcHRpb259CisKKyAgICAgICAgICAgIFtyYW5kb21dCisgICAgICAgICAgICBmb28gPSAke2NvbW1vbjpvcHRpb259IHJlZGVmaW5lZAorICAgICAgICAgICAgRm9vID0gJHtDb21tb246T3B0aW9ufSBSZWRlZmluZWQKKyAgICAgICAgIiIiKS5zdHJpcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkR1cGxpY2F0ZU9wdGlvbkVycm9yKToKKyAgICAgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGluaSkKKworICAgICAgICAjIHJhdyBvcHRpb25zCisgICAgICAgIGNmID0gc2VsZi5mcm9tc3RyaW5nKGluaSwgb3B0aW9ueGZvcm09bGFtYmRhIG9wdDogb3B0KQorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgZXEoY2ZbJ2NvbW1vbiddWydvcHRpb24nXSwgJ3ZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ2NvbW1vbiddWydPcHRpb24nXSwgJ1ZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ0NvbW1vbiddWydvcHRpb24nXSwgJ2EgYmV0dGVyIHZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ0NvbW1vbiddWydPcHRpb24nXSwgJ0EgQmV0dGVyIFZhbHVlJykKKyAgICAgICAgZXEoY2ZbJ3JhbmRvbSddWydmb28nXSwgJ3ZhbHVlIHJlZGVmaW5lZCcpCisgICAgICAgIGVxKGNmWydyYW5kb20nXVsnRm9vJ10sICdBIEJldHRlciBWYWx1ZSBSZWRlZmluZWQnKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXJyb3JzKHNlbGYpOgorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiIiIKKyAgICAgICAgICAgIFtpbnRlcnBvbGF0aW9uIGZhaWxdCisgICAgICAgICAgICBjYXNlMSA9ICR7d2hlcmUncyB0aGUgYnJhY2UKKyAgICAgICAgICAgIGNhc2UyID0gJHtkb2VzX25vdF9leGlzdH0KKyAgICAgICAgICAgIGNhc2UzID0gJHt3cm9uZ19zZWN0aW9uOndyb25nX3ZhbHVlfQorICAgICAgICAgICAgY2FzZTQgPSAke2k6bGlrZTpjb2xvbjpjaGFyYWN0ZXJzfQorICAgICAgICAgICAgY2FzZTUgPSAkMTAwIGZvciBGYWlsIE5vIDUhCisgICAgICAgICIiIikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IpOgorICAgICAgICAgICAgY2ZbJ2ludGVycG9sYXRpb24gZmFpbCddWydjYXNlMSddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgY2ZbJ2ludGVycG9sYXRpb24gZmFpbCddWydjYXNlMiddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IpOgorICAgICAgICAgICAgY2ZbJ2ludGVycG9sYXRpb24gZmFpbCddWydjYXNlMyddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoY29uZmlncGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvcik6CisgICAgICAgICAgICBjZlsnaW50ZXJwb2xhdGlvbiBmYWlsJ11bJ2Nhc2U0J10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvblN5bnRheEVycm9yKToKKyAgICAgICAgICAgIGNmWydpbnRlcnBvbGF0aW9uIGZhaWwnXVsnY2FzZTUnXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgY2ZbJ2ludGVycG9sYXRpb24gZmFpbCddWydjYXNlNiddID0gIkJMQUNLICRBQkJBVEgiCisKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VOb1ZhbHVlKENvbmZpZ1BhcnNlclRlc3RDYXNlKToKKyAgICBhbGxvd19ub192YWx1ZSA9IFRydWUKKworY2xhc3MgQ29uZmlnUGFyc2VyVGVzdENhc2VUcmlja3lGaWxlKENmZ1BhcnNlclRlc3RDYXNlQ2xhc3MpOgorICAgIGNvbmZpZ19jbGFzcyA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIKKyAgICBkZWxpbWl0ZXJzID0geyc9J30KKyAgICBjb21tZW50X3ByZWZpeGVzID0geycjJ30KKyAgICBhbGxvd19ub192YWx1ZSA9IFRydWUKKworICAgIGRlZiB0ZXN0X2NmZ3BhcnNlcl9kb3RfMyhzZWxmKToKKyAgICAgICAgdHJpY2t5ID0gc3VwcG9ydC5maW5kZmlsZSgiY2ZncGFyc2VyLjMiKQorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2YucmVhZCh0cmlja3ksIGVuY29kaW5nPSd1dGYtOCcpKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjZi5zZWN0aW9ucygpLCBbJ3N0cmFuZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29ycnVwdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5ZWFoLCBzZWN0aW9ucyBjYW4gYmUgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5kZW50ZWQgYXMgd2VsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbm90aGVyIG9uZSEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gdmFsdWVzIGhlcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJpY2t5IGludGVycG9sYXRpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbW9yZSBpbnRlcnBvbGF0aW9uJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0aW50KHNlbGYuZGVmYXVsdF9zZWN0aW9uLCAnZ28nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzPXsnaW50ZXJwb2xhdGUnOiAnLTEnfSksIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgIyBubyBpbnRlcnBvbGF0aW9uIHdpbGwgaGFwcGVuCisgICAgICAgICAgICBjZi5nZXRpbnQoc2VsZi5kZWZhdWx0X3NlY3Rpb24sICdnbycsIHJhdz1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgIHZhcnM9eydpbnRlcnBvbGF0ZSc6ICctMSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjZi5nZXQoJ3N0cmFuZ2UnLCAnb3RoZXInKS5zcGxpdCgnXG4nKSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNmLmdldCgnY29ycnVwdGlvbicsICd2YWx1ZScpLnNwbGl0KCdcbicpKSwgMTApCisgICAgICAgIGxvbmduYW1lID0gJ3llYWgsIHNlY3Rpb25zIGNhbiBiZSBpbmRlbnRlZCBhcyB3ZWxsJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNmLmdldGJvb2xlYW4obG9uZ25hbWUsICdhcmUgdGhleSBzdWJzZWN0aW9ucycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldChsb25nbmFtZSwgJ2xldHMgdXNlIHNvbWUgVW5pY29kZScpLCAn54mH5Luu5ZCNJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2YuaXRlbXMoJ2Fub3RoZXIgb25lIScpKSwgNSkgIyA0IGluIHNlY3Rpb24gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYGdvYCBmcm9tIERFRkFVTFQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcik6CisgICAgICAgICAgICBjZi5pdGVtcygnbm8gdmFsdWVzIGhlcmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgndHJpY2t5IGludGVycG9sYXRpb24nLCAnbGV0cycpLCAnZG8gdGhpcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCd0cmlja3kgaW50ZXJwb2xhdGlvbicsICdsZXRzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2YuZ2V0KCd0cmlja3kgaW50ZXJwb2xhdGlvbicsICdnbycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnbW9yZSBpbnRlcnBvbGF0aW9uJywgJ2xldHMnKSwgJ2dvIHNob3BwaW5nJykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmFpbHVyZShzZWxmKToKKyAgICAgICAgdHJpY2t5ID0gc3VwcG9ydC5maW5kZmlsZSgiY2ZncGFyc2VyLjMiKQorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgY2YucmVhZCh0cmlja3ksIGVuY29kaW5nPSdhc2NpaScpCisKKworY2xhc3MgSXNzdWU3MDA1VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3Qgb3V0cHV0IHdoZW4gTm9uZSBpcyBzZXQoKSBhcyBhIHZhbHVlIGFuZCBhbGxvd19ub192YWx1ZSA9PSBGYWxzZS4KKworICAgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU3MDA1CisKKyAgICAiIiIKKworICAgIGV4cGVjdGVkX291dHB1dCA9ICJbc2VjdGlvbl1cbm9wdGlvbiA9IE5vbmVcblxuIgorCisgICAgZGVmIHByZXBhcmUoc2VsZiwgY29uZmlnX2NsYXNzKToKKyAgICAgICAgIyBUaGlzIGlzIHRoZSBkZWZhdWx0LCBidXQgdGhhdCdzIHRoZSBwb2ludC4KKyAgICAgICAgY3AgPSBjb25maWdfY2xhc3MoYWxsb3dfbm9fdmFsdWU9RmFsc2UpCisgICAgICAgIGNwLmFkZF9zZWN0aW9uKCJzZWN0aW9uIikKKyAgICAgICAgY3Auc2V0KCJzZWN0aW9uIiwgIm9wdGlvbiIsIE5vbmUpCisgICAgICAgIHNpbyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgY3Aud3JpdGUoc2lvKQorICAgICAgICByZXR1cm4gc2lvLmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X25vbmVfYXNfdmFsdWVfc3RyaW5naWZpZWQoc2VsZik6CisgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcihhbGxvd19ub192YWx1ZT1GYWxzZSkKKyAgICAgICAgY3AuYWRkX3NlY3Rpb24oInNlY3Rpb24iKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjcC5zZXQoInNlY3Rpb24iLCAib3B0aW9uIiwgTm9uZSkKKworICAgIGRlZiB0ZXN0X25vbmVfYXNfdmFsdWVfc3RyaW5naWZpZWRfcmF3KHNlbGYpOgorICAgICAgICBvdXRwdXQgPSBzZWxmLnByZXBhcmUoY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIHNlbGYuZXhwZWN0ZWRfb3V0cHV0KQorCiAKIGNsYXNzIFNvcnRlZFRlc3RDYXNlKFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlKToKLSAgICBkZWYgbmV3Y29uZmlnKHNlbGYsIGRlZmF1bHRzPU5vbmUpOgotICAgICAgICBzZWxmLmNmID0gc2VsZi5jb25maWdfY2xhc3MoZGVmYXVsdHM9ZGVmYXVsdHMsIGRpY3RfdHlwZT1Tb3J0ZWREaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5jZgorICAgIGRpY3RfdHlwZSA9IFNvcnRlZERpY3QKIAogICAgIGRlZiB0ZXN0X3NvcnRlZChzZWxmKToKLSAgICAgICAgc2VsZi5mcm9tc3RyaW5nKCJbYl1cbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJvND0xXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAibzM9MlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIm8yPTNcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICJvMT00XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiW2FdXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAiaz12XG4iKQorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZygiW2JdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvND0xXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvMz0yXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvMj0zXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvMT00XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbYV1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIms9dlxuIikKICAgICAgICAgb3V0cHV0ID0gaW8uU3RyaW5nSU8oKQotICAgICAgICBzZWxmLmNmLndyaXRlKG91dHB1dCkKKyAgICAgICAgY2Yud3JpdGUob3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJbYV1cbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAiayA9IHZcblxuIgpAQCAtNDcyLDEzICsxMjk1LDIwNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJvMyA9IDJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAibzQgPSAxXG5cbiIpCiAKKworY2xhc3MgQ29tcGF0aWJsZVRlc3RDYXNlKENmZ1BhcnNlclRlc3RDYXNlQ2xhc3MpOgorICAgIGNvbmZpZ19jbGFzcyA9IGNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXIKKyAgICBjb21tZW50X3ByZWZpeGVzID0gJyM7JworICAgIGlubGluZV9jb21tZW50X3ByZWZpeGVzID0gJzsnCisKKyAgICBkZWYgdGVzdF9jb21tZW50X2hhbmRsaW5nKHNlbGYpOgorICAgICAgICBjb25maWdfc3RyaW5nID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgW0NvbW1lbnRlZCBCYXJdCisgICAgICAgIGJhej1xd2UgOyBhIGNvbW1lbnQKKyAgICAgICAgZm9vOiBiYXIgIyBub3QgYSBjb21tZW50IQorICAgICAgICAjIGJ1dCB0aGlzIGlzIGEgY29tbWVudAorICAgICAgICA7IGFub3RoZXIgY29tbWVudAorICAgICAgICBxdWlyazogdGhpcztpcyBub3QgYSBjb21tZW50CisgICAgICAgIDsgYSBzcGFjZSBtdXN0IHByZWNlZGUgYW4gaW5saW5lIGNvbW1lbnQKKyAgICAgICAgIiIiKQorICAgICAgICBjZiA9IHNlbGYuZnJvbXN0cmluZyhjb25maWdfc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnQ29tbWVudGVkIEJhcicsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYmFyICMgbm90IGEgY29tbWVudCEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNmLmdldCgnQ29tbWVudGVkIEJhcicsICdiYXonKSwgJ3F3ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2YuZ2V0KCdDb21tZW50ZWQgQmFyJywgJ3F1aXJrJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoaXM7aXMgbm90IGEgY29tbWVudCcpCisKK2NsYXNzIENvcHlUZXN0Q2FzZShCYXNpY1Rlc3RDYXNlKToKKyAgICBjb25maWdfY2xhc3MgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyCisKKyAgICBkZWYgZnJvbXN0cmluZyhzZWxmLCBzdHJpbmcsIGRlZmF1bHRzPU5vbmUpOgorICAgICAgICBjZiA9IHNlbGYubmV3Y29uZmlnKGRlZmF1bHRzKQorICAgICAgICBjZi5yZWFkX3N0cmluZyhzdHJpbmcpCisgICAgICAgIGNmX2NvcHkgPSBzZWxmLm5ld2NvbmZpZygpCisgICAgICAgIGNmX2NvcHkucmVhZF9kaWN0KGNmKQorICAgICAgICAjIHdlIGhhdmUgdG8gY2xlYW4gdXAgb3B0aW9uIGR1cGxpY2F0ZXMgdGhhdCBhcHBlYXJlZCBiZWNhdXNlIG9mCisgICAgICAgICMgdGhlIG1hZ2ljIERFRkFVTFRTRUNUIGJlaGF2aW91ci4KKyAgICAgICAgZm9yIHNlY3Rpb24gaW4gY2ZfY29weS52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHNlY3Rpb24ubmFtZSA9PSBzZWxmLmRlZmF1bHRfc2VjdGlvbjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIGRlZmF1bHQsIHZhbHVlIGluIGNmW3NlbGYuZGVmYXVsdF9zZWN0aW9uXS5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIHNlY3Rpb25bZGVmYXVsdF0gPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgICAgIGRlbCBzZWN0aW9uW2RlZmF1bHRdCisgICAgICAgIHJldHVybiBjZl9jb3B5CisKKworY2xhc3MgRmFrZUZpbGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBmaWxlX3BhdGggPSBzdXBwb3J0LmZpbmRmaWxlKCJjZmdwYXJzZXIuMSIpCisgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmxpbmVzID0gZi5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5saW5lcy5yZXZlcnNlKCkKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgbGVuKHNlbGYubGluZXMpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubGluZXMucG9wKCkKKyAgICAgICAgcmV0dXJuICcnCisKKworZGVmIHJlYWRsaW5lX2dlbmVyYXRvcihmKToKKyAgICAiIiJBcyBhZHZpc2VkIGluIERvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QuIiIiCisgICAgbGluZSA9IGYucmVhZGxpbmUoKQorICAgIHdoaWxlIGxpbmU6CisgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQorCisKK2NsYXNzIFJlYWRGaWxlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVfcGF0aCA9IHN1cHBvcnQuZmluZGZpbGUoImNmZ3BhcnNlci4xIikKKyAgICAgICAgcGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHdpdGggb3BlbihmaWxlX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBwYXJzZXIucmVhZF9maWxlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkZvbyBCYXIiLCBwYXJzZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIHBhcnNlclsiRm9vIEJhciJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlclsiRm9vIEJhciJdWyJmb28iXSwgIm5ld2JhciIpCisKKyAgICBkZWYgdGVzdF9pdGVyYWJsZShzZWxmKToKKyAgICAgICAgbGluZXMgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgIFtGb28gQmFyXQorICAgICAgICBmb289bmV3YmFyIiIiKS5zdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgIHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICBwYXJzZXIucmVhZF9maWxlKGxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJGb28gQmFyIiwgcGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBwYXJzZXJbIkZvbyBCYXIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJbIkZvbyBCYXIiXVsiZm9vIl0sICJuZXdiYXIiKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICAiIiJJc3N1ZSAjMTE2NzAuIiIiCisgICAgICAgIHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwYXJzZXIucmVhZF9maWxlKEZha2VGaWxlKCkpCisgICAgICAgIHBhcnNlci5yZWFkX2ZpbGUocmVhZGxpbmVfZ2VuZXJhdG9yKEZha2VGaWxlKCkpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJGb28gQmFyIiwgcGFyc2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBwYXJzZXJbIkZvbyBCYXIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJbIkZvbyBCYXIiXVsiZm9vIl0sICJuZXdiYXIiKQorCisKK2NsYXNzIENvdmVyYWdlT25lSHVuZHJlZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJDb3ZlcnMgZWRnZSBjYXNlcyBpbiB0aGUgY29kZWJhc2UuIiIiCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfb3B0aW9uX2Vycm9yKHNlbGYpOgorICAgICAgICBlcnJvciA9IGNvbmZpZ3BhcnNlci5EdXBsaWNhdGVPcHRpb25FcnJvcignc2VjdGlvbicsICdvcHRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yLnNlY3Rpb24sICdzZWN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvci5vcHRpb24sICdvcHRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yLnNvdXJjZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvci5saW5lbm8sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3IuYXJncywgKCdzZWN0aW9uJywgJ29wdGlvbicsIE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnJvciksICJPcHRpb24gJ29wdGlvbicgaW4gc2VjdGlvbiAnc2VjdGlvbicgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbHJlYWR5IGV4aXN0cyIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnBvbGF0aW9uX2RlcHRoX2Vycm9yKHNlbGYpOgorICAgICAgICBlcnJvciA9IGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uRGVwdGhFcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmF3dmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvci5hcmdzLCAoJ29wdGlvbicsICdzZWN0aW9uJywgJ3Jhd3ZhbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yLm9wdGlvbiwgJ29wdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3Iuc2VjdGlvbiwgJ3NlY3Rpb24nKQorCisgICAgZGVmIHRlc3RfcGFyc2luZ19lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiUmVxdWlyZWQgYXJndW1lbnQgYHNvdXJjZScgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdpdmVuLiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBjb25maWdwYXJzZXIuUGFyc2luZ0Vycm9yKHNvdXJjZT0nc291cmNlJywgZmlsZW5hbWU9J2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgIkNhbm5vdCBzcGVjaWZ5IGJvdGggYGZpbGVuYW1lJyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmQgYHNvdXJjZScuIFVzZSBgc291cmNlJy4iKQorICAgICAgICBlcnJvciA9IGNvbmZpZ3BhcnNlci5QYXJzaW5nRXJyb3IoZmlsZW5hbWU9J3NvdXJjZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3Iuc291cmNlLCAnc291cmNlJykKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvci5maWxlbmFtZSwgJ3NvdXJjZScpCisgICAgICAgICAgICBlcnJvci5maWxlbmFtZSA9ICdmaWxlbmFtZScKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3Iuc291cmNlLCAnZmlsZW5hbWUnKQorICAgICAgICBmb3Igd2FybmluZyBpbiB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhcm5pbmcuY2F0ZWdvcnkgaXMgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbl92YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKCkKKyAgICAgICAgcGFyc2VyLnJlYWRfc3RyaW5nKCIiIgorICAgICAgICAgICAgW3NlY3Rpb25dCisgICAgICAgICAgICBpbnZhbGlkX3BlcmNlbnQgPSAlCisgICAgICAgICAgICBpbnZhbGlkX3JlZmVyZW5jZSA9ICUoKCkKKyAgICAgICAgICAgIGludmFsaWRfdmFyaWFibGUgPSAlKGRvZXNfbm90X2V4aXN0KXMKKyAgICAgICAgIiIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uU3ludGF4RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcGFyc2VyWydzZWN0aW9uJ11bJ2ludmFsaWRfcGVyY2VudCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJScgbXVzdCBiZSBmb2xsb3dlZCBieSAnJScgb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJygnLCBmb3VuZDogJyUnIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvblN5bnRheEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHBhcnNlclsnc2VjdGlvbiddWydpbnZhbGlkX3JlZmVyZW5jZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICJiYWQgaW50ZXJwb2xhdGlvbiB2YXJpYWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2UgJyUoKCknIikKKworICAgIGRlZiB0ZXN0X3JlYWRmcF9kZXByZWNhdGlvbihzZWxmKToKKyAgICAgICAgc2lvID0gaW8uU3RyaW5nSU8oIiIiCisgICAgICAgIFtzZWN0aW9uXQorICAgICAgICBvcHRpb24gPSB2YWx1ZQorICAgICAgICAiIiIpCisgICAgICAgIHBhcnNlciA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBwYXJzZXIucmVhZGZwKHNpbywgZmlsZW5hbWU9J1N0cmluZ0lPJykKKyAgICAgICAgZm9yIHdhcm5pbmcgaW4gdzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YXJuaW5nLmNhdGVnb3J5IGlzIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyc2VyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXJbJ3NlY3Rpb24nXVsnb3B0aW9uJ10sICd2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9zYWZlY29uZmlncGFyc2VyX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBwYXJzZXIgPSBjb25maWdwYXJzZXIuU2FmZUNvbmZpZ1BhcnNlcigpCisgICAgICAgIGZvciB3YXJuaW5nIGluIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FybmluZy5jYXRlZ29yeSBpcyBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICBkZWYgdGVzdF9zZWN0aW9ucHJveHlfcmVwcihzZWxmKToKKyAgICAgICAgcGFyc2VyID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgIHBhcnNlci5yZWFkX3N0cmluZygiIiIKKyAgICAgICAgICAgIFtzZWN0aW9uXQorICAgICAgICAgICAga2V5ID0gdmFsdWUKKyAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocGFyc2VyWydzZWN0aW9uJ10pLCAnPFNlY3Rpb246IHNlY3Rpb24+JykKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBDb25maWdQYXJzZXJUZXN0Q2FzZSwKKyAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2VOb25TdGFuZGFyZERlbGltaXRlcnMsCisgICAgICAgIENvbmZpZ1BhcnNlclRlc3RDYXNlTm9WYWx1ZSwKKyAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2VFeHRlbmRlZEludGVycG9sYXRpb24sCisgICAgICAgIENvbmZpZ1BhcnNlclRlc3RDYXNlTGVnYWN5SW50ZXJwb2xhdGlvbiwKKyAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2VOb0ludGVycG9sYXRpb24sCisgICAgICAgIENvbmZpZ1BhcnNlclRlc3RDYXNlVHJpY2t5RmlsZSwKKyAgICAgICAgTXVsdGlsaW5lVmFsdWVzVGVzdENhc2UsCiAgICAgICAgIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlLAotICAgICAgICBTYWZlQ29uZmlnUGFyc2VyVGVzdENhc2UsCi0gICAgICAgIFNvcnRlZFRlc3RDYXNlCi0gICAgKQotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgICAgIFJhd0NvbmZpZ1BhcnNlclRlc3RDYXNlTm9uU3RhbmRhcmREZWxpbWl0ZXJzLAorICAgICAgICBSYXdDb25maWdQYXJzZXJUZXN0U2FtYmFDb25mLAorICAgICAgICBTb3J0ZWRUZXN0Q2FzZSwKKyAgICAgICAgSXNzdWU3MDA1VGVzdENhc2UsCisgICAgICAgIFN0cmljdFRlc3RDYXNlLAorICAgICAgICBDb21wYXRpYmxlVGVzdENhc2UsCisgICAgICAgIENvcHlUZXN0Q2FzZSwKKyAgICAgICAgQ29uZmlnUGFyc2VyVGVzdENhc2VOb25TdGFuZGFyZERlZmF1bHRTZWN0aW9uLAorICAgICAgICBSZWFkRmlsZVRlc3RDYXNlLAorICAgICAgICBDb3ZlcmFnZU9uZUh1bmRyZWRUZXN0Q2FzZSwKKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQppbmRleCAxNmM2MjA0Li5kNzQ1MTk5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NnaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQpAQCAtMSwxMSArMSwxMCBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfd2FybmluZ3MKIGltcG9ydCBjZ2kKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1mcm9tIHdhcm5pbmdzIGltcG9ydCBjYXRjaF93YXJuaW5ncywgZmlsdGVyd2FybmluZ3MKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPCiAKIGNsYXNzIEhhY2tlZFN5c01vZHVsZToKICAgICAjIFRoZSByZWdyZXNzaW9uIHRlc3Qgd2lsbCBoYXZlIHJlYWwgdmFsdWVzIGluIHN5cy5hcmd2LCB3aGljaApAQCAtMTUsMTEgKzE0LDYgQEAKIAogY2dpLnN5cyA9IEhhY2tlZFN5c01vZHVsZSgpCiAKLXRyeToKLSAgICBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi0KIGNsYXNzIENvbXBhcmFibGVFeGNlcHRpb246CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycik6CiAgICAgICAgIHNlbGYuZXJyID0gZXJyCkBAIC00Myw3ICszNyw3IEBACiAgICAgICAgIGVudlsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnCiAgICAgICAgIGVudlsnUVVFUllfU1RSSU5HJ10gPSBidWYKICAgICBlbGlmIG1ldGhvZCA9PSAiUE9TVCI6Ci0gICAgICAgIGZwID0gU3RyaW5nSU8oYnVmKQorICAgICAgICBmcCA9IEJ5dGVzSU8oYnVmLmVuY29kZSgnbGF0aW4tMScpKSAjIEZpZWxkU3RvcmFnZSBleHBlY3RzIGJ5dGVzCiAgICAgICAgIGVudlsnUkVRVUVTVF9NRVRIT0QnXSA9ICdQT1NUJwogICAgICAgICBlbnZbJ0NPTlRFTlRfVFlQRSddID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgZW52WydDT05URU5UX0xFTkdUSCddID0gc3RyKGxlbihidWYpKQpAQCAtMTExLDEzICsxMDUsMTQgQEAKICAgICByZXR1cm4gWyhwWzBdLCBwWzFdWzBdKSBmb3IgcCBpbiBsaXN0XQogCiBkZWYgZ2VuX3Jlc3VsdChkYXRhLCBlbnZpcm9uKToKLSAgICBmYWtlX3N0ZGluID0gU3RyaW5nSU8oZGF0YSkKKyAgICBlbmNvZGluZyA9ICdsYXRpbi0xJworICAgIGZha2Vfc3RkaW4gPSBCeXRlc0lPKGRhdGEuZW5jb2RlKGVuY29kaW5nKSkKICAgICBmYWtlX3N0ZGluLnNlZWsoMCkKLSAgICBmb3JtID0gY2dpLkZpZWxkU3RvcmFnZShmcD1mYWtlX3N0ZGluLCBlbnZpcm9uPWVudmlyb24pCisgICAgZm9ybSA9IGNnaS5GaWVsZFN0b3JhZ2UoZnA9ZmFrZV9zdGRpbiwgZW52aXJvbj1lbnZpcm9uLCBlbmNvZGluZz1lbmNvZGluZykKIAogICAgIHJlc3VsdCA9IHt9CiAgICAgZm9yIGssIHYgaW4gZGljdChmb3JtKS5pdGVtcygpOgotICAgICAgICByZXN1bHRba10gPSB0eXBlKHYpIGlzIGxpc3QgYW5kIGZvcm0uZ2V0bGlzdChrKSBvciB2LnZhbHVlCisgICAgICAgIHJlc3VsdFtrXSA9IGlzaW5zdGFuY2UodiwgbGlzdCkgYW5kIGZvcm0uZ2V0bGlzdChrKSBvciB2LnZhbHVlCiAKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTEyNywyMyArMTIyLDIzIEBACiAgICAgICAgIGZvciBvcmlnLCBleHBlY3QgaW4gcGFyc2Vfc3RyaWN0X3Rlc3RfY2FzZXM6CiAgICAgICAgICAgICAjIFRlc3QgYmFzaWMgcGFyc2luZwogICAgICAgICAgICAgZCA9IGRvX3Rlc3Qob3JpZywgIkdFVCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV4cGVjdCwgIkVycm9yIHBhcnNpbmcgJXMiICUgcmVwcihvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyBtZXRob2QgR0VUIiAlIHJlcHIob3JpZykpCiAgICAgICAgICAgICBkID0gZG9fdGVzdChvcmlnLCAiUE9TVCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGV4cGVjdCwgIkVycm9yIHBhcnNpbmcgJXMiICUgcmVwcihvcmlnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZXhwZWN0LCAiRXJyb3IgcGFyc2luZyAlcyBtZXRob2QgUE9TVCIgJSByZXByKG9yaWcpKQogCiAgICAgICAgICAgICBlbnYgPSB7J1FVRVJZX1NUUklORyc6IG9yaWd9CiAgICAgICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZW52aXJvbj1lbnYpCi0gICAgICAgICAgICBpZiB0eXBlKGV4cGVjdCkgPT0gdHlwZSh7fSk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdCwgZGljdCk6CiAgICAgICAgICAgICAgICAgIyB0ZXN0IGRpY3QgaW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXhwZWN0KSwgbGVuKGZzKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm0oZXhwZWN0LmtleXMoKSksIG5vcm0oZnMua2V5cygpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoZXhwZWN0LmtleXMoKSwgZnMua2V5cygpKQogICAgICAgICAgICAgICAgICMjc2VsZi5hc3NlcnRFcXVhbChub3JtKGV4cGVjdC52YWx1ZXMoKSksIG5vcm0oZnMudmFsdWVzKCkpKQogICAgICAgICAgICAgICAgICMjc2VsZi5hc3NlcnRFcXVhbChub3JtKGV4cGVjdC5pdGVtcygpKSwgbm9ybShmcy5pdGVtcygpKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKCJub25leGlzdGVudCBmaWVsZCIsICJkZWZhdWx0IiksICJkZWZhdWx0IikKICAgICAgICAgICAgICAgICAjIHRlc3QgaW5kaXZpZHVhbCBmaWVsZHMKICAgICAgICAgICAgICAgICBmb3Iga2V5IGluIGV4cGVjdC5rZXlzKCk6CiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdF92YWwgPSBleHBlY3Rba2V5XQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIGZzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgZnMpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihleHBlY3RfdmFsKSA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmdldHZhbHVlKGtleSksIGV4cGVjdF92YWwpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xNjAsNiArMTU1LDcgQEAKICAgICAgICAgICAgIGNnaS5sb2dmcCA9IE5vbmUKICAgICAgICAgICAgIGNnaS5sb2dmaWxlID0gIi9kZXYvbnVsbCIKICAgICAgICAgICAgIGNnaS5pbml0bG9nKCIlcyIsICJUZXN0aW5nIGxvZyAzIikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjZ2kubG9nZnAuY2xvc2UpCiAgICAgICAgICAgICBjZ2kubG9nKCJUZXN0aW5nIGxvZyA0IikKIAogICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9yZWFkbGluZShzZWxmKToKQEAgLTE4Niw1MCArMTgyLDUyIEBACiAgICAgICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbmFtZSwgYSkKICAgICAgICAgICAgICAgICByZXR1cm4gYQogCi0gICAgICAgIGYgPSBUZXN0UmVhZGxpbmVGaWxlKHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoIncrIikpCi0gICAgICAgIGYud3JpdGUoJ3gnICogMjU2ICogMTAyNCkKKyAgICAgICAgZiA9IFRlc3RSZWFkbGluZUZpbGUodGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgid2IrIikpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmLmNsb3NlKQorICAgICAgICBmLndyaXRlKGIneCcgKiAyNTYgKiAxMDI0KQogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BVVCd9CiAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcD1mLCBlbnZpcm9uPWVudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZzLmZpbGUuY2xvc2UpCiAgICAgICAgICMgaWYgd2UncmUgbm90IGNodW5raW5nIHByb3Blcmx5LCByZWFkbGluZSBpcyBvbmx5IGNhbGxlZCB0d2ljZQogICAgICAgICAjIChieSByZWFkX2JpbmFyeSk7IGlmIHdlIGFyZSBjaHVua2luZyBwcm9wZXJseSwgaXQgd2lsbCBiZSBjYWxsZWQgNSB0aW1lcwogICAgICAgICAjIGFzIGxvbmcgYXMgdGhlIGNodW5rc2l6ZSBpcyAxIDw8IDE2LgogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5udW1jYWxscyA+IDIpCisgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmllbGRzdG9yYWdlX211bHRpcGFydChzZWxmKToKICAgICAgICAgI1Rlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCi0gICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQT1NUJywgJ0NPTlRFTlRfVFlQRSc6J211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NCcsICdDT05URU5UX0xFTkdUSCc6JzU1OCd9Ci0gICAgICAgIHBvc3RkYXRhID0gIiIiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKLUNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iaWQiCi0KLTEyMzQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRpdGxlIgotCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0idGVzdC50eHQiCi1Db250ZW50LVR5cGU6IHRleHQvcGxhaW4KLQotVGVzdGluZyAxMjMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0Ci1Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InN1Ym1pdCIKLQotIEFkZFx4MjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0LS0KLSIiIgotICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZnA9U3RyaW5nSU8ocG9zdGRhdGEpLCBlbnZpcm9uPWVudikKKyAgICAgICAgZW52ID0geworICAgICAgICAgICAgJ1JFUVVFU1RfTUVUSE9EJzogJ1BPU1QnLAorICAgICAgICAgICAgJ0NPTlRFTlRfVFlQRSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT17fScuZm9ybWF0KEJPVU5EQVJZKSwKKyAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCc6ICc1NTgnfQorICAgICAgICBmcCA9IEJ5dGVzSU8oUE9TVERBVEEuZW5jb2RlKCdsYXRpbi0xJykpCisgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcCwgZW52aXJvbj1lbnYsIGVuY29kaW5nPSJsYXRpbi0xIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZnMubGlzdCksIDQpCiAgICAgICAgIGV4cGVjdCA9IFt7J25hbWUnOidpZCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonMTIzNCd9LAogICAgICAgICAgICAgICAgICAgeyduYW1lJzondGl0bGUnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6Jyd9LAotICAgICAgICAgICAgICAgICAgeyduYW1lJzonZmlsZScsICdmaWxlbmFtZSc6J3Rlc3QudHh0JywgJ3ZhbHVlJzonVGVzdGluZyAxMjMuJ30sCisgICAgICAgICAgICAgICAgICB7J25hbWUnOidmaWxlJywgJ2ZpbGVuYW1lJzondGVzdC50eHQnLCAndmFsdWUnOmInVGVzdGluZyAxMjMuXG4nfSwKICAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J3N1Ym1pdCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonIEFkZCAnfV0KICAgICAgICAgZm9yIHggaW4gcmFuZ2UobGVuKGZzLmxpc3QpKToKICAgICAgICAgICAgIGZvciBrLCBleHAgaW4gZXhwZWN0W3hdLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgZ290ID0gZ2V0YXR0cihmcy5saXN0W3hdLCBrKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHApCiAKKyAgICBkZWYgdGVzdF9maWVsZHN0b3JhZ2VfbXVsdGlwYXJ0X25vbl9hc2NpaShzZWxmKToKKyAgICAgICAgI1Rlc3QgYmFzaWMgRmllbGRTdG9yYWdlIG11bHRpcGFydCBwYXJzaW5nCisgICAgICAgIGVudiA9IHsnUkVRVUVTVF9NRVRIT0QnOidQT1NUJywKKyAgICAgICAgICAgICdDT05URU5UX1RZUEUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9e30nLmZvcm1hdChCT1VOREFSWSksCisgICAgICAgICAgICAnQ09OVEVOVF9MRU5HVEgnOic1NTgnfQorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gWydpc28tODg1OS0xJywndXRmLTgnXToKKyAgICAgICAgICAgIGZwID0gQnl0ZXNJTyhQT1NUREFUQV9OT05fQVNDSUkuZW5jb2RlKGVuY29kaW5nKSkKKyAgICAgICAgICAgIGZzID0gY2dpLkZpZWxkU3RvcmFnZShmcCwgZW52aXJvbj1lbnYsZW5jb2Rpbmc9ZW5jb2RpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmcy5saXN0KSwgMSkKKyAgICAgICAgICAgIGV4cGVjdCA9IFt7J25hbWUnOidpZCcsICdmaWxlbmFtZSc6Tm9uZSwgJ3ZhbHVlJzonXHhlN1x4ZjFceDgwJ31dCisgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZnMubGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciBrLCBleHAgaW4gZXhwZWN0W3hdLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IGdldGF0dHIoZnMubGlzdFt4XSwgaykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKKwogICAgIF9xc19yZXN1bHQgPSB7CiAgICAgICAgICdrZXkxJzogJ3ZhbHVlMScsCiAgICAgICAgICdrZXkyJzogWyd2YWx1ZTJ4JywgJ3ZhbHVlMnknXSwKQEAgLTI0OCw4ICsyNDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3FzX3Jlc3VsdCwgdikKIAogICAgIGRlZiB0ZXN0UVNBbmRGb3JtRGF0YShzZWxmKToKLSAgICAgICAgZGF0YSA9ICIiIgotLS0tMTIzCisgICAgICAgIGRhdGEgPSAiIiItLS0xMjMKIENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5MiIKIAogdmFsdWUyeQpAQCAtMjczLDggKzI3MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fcXNfcmVzdWx0LCB2KQogCiAgICAgZGVmIHRlc3RRU0FuZEZvcm1EYXRhRmlsZShzZWxmKToKLSAgICAgICAgZGF0YSA9ICIiIgotLS0tMTIzCisgICAgICAgIGRhdGEgPSAiIiItLS0xMjMKIENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ia2V5MiIKIAogdmFsdWUyeQpAQCAtMzAyLDI2ICsyOTgsMjIgQEAKICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBzZWxmLl9xc19yZXN1bHQuY29weSgpCiAgICAgICAgIHJlc3VsdC51cGRhdGUoewotICAgICAgICAgICAgJ3VwbG9hZCc6ICd0aGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmYWtlIGZpbGUnCisgICAgICAgICAgICAndXBsb2FkJzogYid0aGlzIGlzIHRoZSBjb250ZW50IG9mIHRoZSBmYWtlIGZpbGVcbicKICAgICAgICAgfSkKICAgICAgICAgdiA9IGdlbl9yZXN1bHQoZGF0YSwgZW52aXJvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHYpCiAKICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX3BhcnNlX3FzKHNlbGYpOgotICAgICAgICAjIHRoaXMgZnVuYyBpcyBtb3ZlZCB0byB1cmxwYXJzZSwgdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrCi0gICAgICAgIHdpdGggY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgICAgIGZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLAotICAgICAgICAgICAgICAgICdjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRlZCwgdXNlIHVybGxpYi5wYXJzZS5wYXJzZV9xcyBpbnN0ZWFkJywKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybGxpYi5wYXJzZSwgdGhpcyBpcyBqdXN0IGEgc2FuaXR5IGNoZWNrCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCdjZ2kucGFyc2VfcXMgaXMgZGVwcmVjYXRlZCwgdXNlIHVybGxpYi5wYXJzZS4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXJzZV9xcyBpbnN0ZWFkJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHsnYSc6IFsnQTEnXSwgJ0InOiBbJ0IzJ10sICdiJzogWydCMiddfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzKCdhPUExJmI9QjImQj1CMycpKQogCiAgICAgZGVmIHRlc3RfZGVwcmVjYXRlZF9wYXJzZV9xc2woc2VsZik6Ci0gICAgICAgICMgdGhpcyBmdW5jIGlzIG1vdmVkIHRvIHVybHBhcnNlLCB0aGlzIGlzIGp1c3QgYSBzYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBjYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgZmlsdGVyd2FybmluZ3MoJ2lnbm9yZScsCi0gICAgICAgICAgICAgICAgJ2NnaS5wYXJzZV9xc2wgaXMgZGVwcmVjYXRlZCwgdXNlIHVybGxpYi5wYXJzZS5wYXJzZV9xc2wgaW5zdGVhZCcsCi0gICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAjIHRoaXMgZnVuYyBpcyBtb3ZlZCB0byB1cmxsaWIucGFyc2UsIHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjaworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnY2dpLnBhcnNlX3FzbCBpcyBkZXByZWNhdGVkLCB1c2UgdXJsbGliLnBhcnNlLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnNlX3FzbCBpbnN0ZWFkJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsoJ2EnLCAnQTEnKSwgKCdiJywgJ0IyJyksICgnQicsICdCMycpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2dpLnBhcnNlX3FzbCgnYT1BMSZiPUIyJkI9QjMnKSkKIApAQCAtMzUxLDYgKzM0MywzNiBAQAogICAgICAgICAgICAgY2dpLnBhcnNlX2hlYWRlcignYXR0YWNobWVudDsgZmlsZW5hbWU9InN0cmFuZ2U7bmFtZSI7c2l6ZT0xMjM7JyksCiAgICAgICAgICAgICAoImF0dGFjaG1lbnQiLCB7ImZpbGVuYW1lIjogInN0cmFuZ2U7bmFtZSIsICJzaXplIjogIjEyMyJ9KSkKIAorQk9VTkRBUlkgPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0IgorCitQT1NUREFUQSA9ICIiIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tNzIxODM3MzczMzUwNzA1NTI2Njg4MTY0Njg0CitDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImlkIgorCisxMjM0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NAorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJ0aXRsZSIKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NAorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaWxlIjsgZmlsZW5hbWU9InRlc3QudHh0IgorQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKK1Rlc3RpbmcgMTIzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NAorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzdWJtaXQiCisKKyBBZGRceDIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTcyMTgzNzM3MzM1MDcwNTUyNjY4ODE2NDY4NC0tCisiIiIKKworUE9TVERBVEFfTk9OX0FTQ0lJID0gIiIiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKK0NvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0iaWQiCisKK1x4ZTdceGYxXHg4MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS03MjE4MzczNzMzNTA3MDU1MjY2ODgxNjQ2ODQKKyIiIgorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoQ2dpVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDJhYjVhNzguLjRlOTNiZTQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CkBAIC0xLDkgKzEsOSBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVxdWlyZXNfSUVFRV83NTQKIGZyb20gdGVzdC50ZXN0X21hdGggaW1wb3J0IHBhcnNlX3Rlc3RmaWxlLCB0ZXN0X2ZpbGUKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zLCBzeXMKIGltcG9ydCBjbWF0aCwgbWF0aAogZnJvbSBjbWF0aCBpbXBvcnQgcGhhc2UsIHBvbGFyLCByZWN0LCBwaQoraW1wb3J0IHN5c2NvbmZpZwogCiBJTkYgPSBmbG9hdCgnaW5mJykKIE5BTiA9IGZsb2F0KCduYW4nKQpAQCAtNDYsMzcgKzQ2LDYgQEAKICAgICAgICAgKElORiwgTkFOKQogICAgICAgICBdXQogCi1kZWYgYWxtb3N0RXF1YWxGKGEsIGIsIHJlbF9lcnI9MmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgotICAgICIiIkRldGVybWluZSB3aGV0aGVyIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBhIGFuZCBiIGFyZSBlcXVhbCB0byB3aXRoaW4KLSAgICBhIChzbWFsbCkgcm91bmRpbmcgZXJyb3IuICBUaGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHJlbF9lcnIgYW5kCi0gICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcwotICAgIHJlcHJlc2VudGVkIGJ5IGFuIElFRUUgNzU0IGRvdWJsZS4gIFRoZXkgYWxsb3cgYW4gZXJyb3Igb2YgYmV0d2VlbgotICAgIDkgYW5kIDE5IHVscHMuIiIiCi0KLSAgICAjIHNwZWNpYWwgdmFsdWVzIHRlc3RpbmcKLSAgICBpZiBtYXRoLmlzbmFuKGEpOgotICAgICAgICByZXR1cm4gbWF0aC5pc25hbihiKQotICAgIGlmIG1hdGguaXNpbmYoYSk6Ci0gICAgICAgIHJldHVybiBhID09IGIKLQotICAgICMgaWYgYm90aCBhIGFuZCBiIGFyZSB6ZXJvLCBjaGVjayB3aGV0aGVyIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaWduCi0gICAgIyAoaW4gdGhlb3J5IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBpdCB3b3VsZCBiZSBsZWdpdGltYXRlIGZvciBhCi0gICAgIyBhbmQgYiB0byBoYXZlIG9wcG9zaXRlIHNpZ25zOyBpbiBwcmFjdGljZSB0aGVzZSBoYXJkbHkgZXZlcgotICAgICMgb2NjdXIpLgotICAgIGlmIG5vdCBhIGFuZCBub3QgYjoKLSAgICAgICAgcmV0dXJuIG1hdGguY29weXNpZ24oMS4sIGEpID09IG1hdGguY29weXNpZ24oMS4sIGIpCi0KLSAgICAjIGlmIGEtYiBvdmVyZmxvd3MsIG9yIGIgaXMgaW5maW5pdGUsIHJldHVybiBGYWxzZS4gIEFnYWluLCBpbgotICAgICMgdGhlb3J5IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBhIGlzIHdpdGhpbiBhIGZldyB1bHBzIG9mIHRoZQotICAgICMgbWF4IHJlcHJlc2VudGFibGUgZmxvYXQsIGFuZCB0aGVuIGIgY291bGQgbGVnaXRpbWF0ZWx5IGJlCi0gICAgIyBpbmZpbml0ZS4gIEluIHByYWN0aWNlIHRoZXNlIGV4YW1wbGVzIGFyZSByYXJlLgotICAgIHRyeToKLSAgICAgICAgYWJzb2x1dGVfZXJyb3IgPSBhYnMoYi1hKQotICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICByZXR1cm4gRmFsc2UKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gYWJzb2x1dGVfZXJyb3IgPD0gbWF4KGFic19lcnIsIHJlbF9lcnIgKiBhYnMoYSkpCi0KIGNsYXNzIENNYXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgbGlzdCBvZiBhbGwgZnVuY3Rpb25zIGluIGNtYXRoCiAgICAgdGVzdF9mdW5jdGlvbnMgPSBbZ2V0YXR0cihjbWF0aCwgZm5hbWUpIGZvciBmbmFtZSBpbiBbCkBAIC05Myw0NyArNjIsOTYgQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF92YWx1ZXMuY2xvc2UoKQogCi0gICAgZGVmIHJBc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBhLCBiLCByZWxfZXJyID0gMmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgotICAgICAgICAiIiJDaGVjayB0aGF0IHR3byBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBhbG1vc3QgZXF1YWwuIiIiCisgICAgZGVmIGFzc2VydEZsb2F0SWRlbnRpY2FsKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBmbG9hdHMgeCBhbmQgeSBhcmUgaWRlbnRpY2FsLCBpbiB0aGUgc2Vuc2UgdGhhdDoKKyAgICAgICAgKDEpIGJvdGggeCBhbmQgeSBhcmUgbmFucywgb3IKKyAgICAgICAgKDIpIGJvdGggeCBhbmQgeSBhcmUgaW5maW5pdGllcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoMykgYm90aCB4IGFuZCB5IGFyZSB6ZXJvcywgd2l0aCB0aGUgc2FtZSBzaWduLCBvcgorICAgICAgICAoNCkgeCBhbmQgeSBhcmUgYm90aCBmaW5pdGUgYW5kIG5vbnplcm8sIGFuZCB4ID09IHkKKworICAgICAgICAiIiIKKyAgICAgICAgbXNnID0gJ2Zsb2F0cyB7IXJ9IGFuZCB7IXJ9IGFyZSBub3QgaWRlbnRpY2FsJworCisgICAgICAgIGlmIG1hdGguaXNuYW4oeCkgb3IgbWF0aC5pc25hbih5KToKKyAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oeCkgYW5kIG1hdGguaXNuYW4oeSk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVsaWYgeCA9PSB5OgorICAgICAgICAgICAgaWYgeCAhPSAwLjA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIGJvdGggemVybzsgY2hlY2sgdGhhdCBzaWducyBtYXRjaAorICAgICAgICAgICAgZWxpZiBtYXRoLmNvcHlzaWduKDEuMCwgeCkgPT0gbWF0aC5jb3B5c2lnbigxLjAsIHkpOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtc2cgKz0gJzogemVyb3MgaGF2ZSBkaWZmZXJlbnQgc2lnbnMnCisgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KHgsIHkpKQorCisgICAgZGVmIGFzc2VydENvbXBsZXhJZGVudGljYWwoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIkZhaWwgdW5sZXNzIGNvbXBsZXggbnVtYmVycyB4IGFuZCB5IGhhdmUgZXF1YWwgdmFsdWVzIGFuZCBzaWducy4KKworICAgICAgICBJbiBwYXJ0aWN1bGFyLCBpZiB4IGFuZCB5IGJvdGggaGF2ZSByZWFsIChvciBpbWFnaW5hcnkpIHBhcnQKKyAgICAgICAgemVybywgYnV0IHRoZSB6ZXJvcyBoYXZlIGRpZmZlcmVudCBzaWducywgdGhpcyB0ZXN0IHdpbGwgZmFpbC4KKworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRGbG9hdElkZW50aWNhbCh4LnJlYWwsIHkucmVhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRGbG9hdElkZW50aWNhbCh4LmltYWcsIHkuaW1hZykKKworICAgIGRlZiByQXNzZXJ0QWxtb3N0RXF1YWwoc2VsZiwgYSwgYiwgcmVsX2VyciA9IDJlLTE1LCBhYnNfZXJyID0gNWUtMzIzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgbm90IGFsbW9zdCBlcXVhbC4KKworICAgICAgICBEZXRlcm1pbmUgd2hldGhlciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgYSBhbmQgYiBhcmUgZXF1YWwgdG8gd2l0aGluCisgICAgICAgIGEgKHNtYWxsKSByb3VuZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcmVsX2VyciBhbmQKKyAgICAgICAgYWJzX2VyciBhcmUgY2hvc2VuIHRvIGJlIHN1aXRhYmxlIGZvciBwbGF0Zm9ybXMgd2hlcmUgYSBmbG9hdCBpcworICAgICAgICByZXByZXNlbnRlZCBieSBhbiBJRUVFIDc1NCBkb3VibGUuICBUaGV5IGFsbG93IGFuIGVycm9yIG9mIGJldHdlZW4KKyAgICAgICAgOSBhbmQgMTkgdWxwcy4KKyAgICAgICAgIiIiCiAKICAgICAgICAgIyBzcGVjaWFsIHZhbHVlcyB0ZXN0aW5nCiAgICAgICAgIGlmIG1hdGguaXNuYW4oYSk6CiAgICAgICAgICAgICBpZiBtYXRoLmlzbmFuKGIpOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5mYWlsKCIlcyBzaG91bGQgYmUgbmFuIiAlIHJlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwobXNnIG9yICd7IXJ9IHNob3VsZCBiZSBuYW4nLmZvcm1hdChiKSkKIAogICAgICAgICBpZiBtYXRoLmlzaW5mKGEpOgogICAgICAgICAgICAgaWYgYSA9PSBiOgogICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc2VsZi5mYWlsKCJmaW5pdGUgcmVzdWx0IHdoZXJlIGluZmluaXR5IGV4Y3BlY3RlZDogIgotICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAlcywgZ290ICVzIiAlIChyZXByKGEpLCByZXByKGIpKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cgb3IgJ2Zpbml0ZSByZXN1bHQgd2hlcmUgaW5maW5pdHkgZXhwZWN0ZWQ6ICcKKyAgICAgICAgICAgICAgICAgICAgICAnZXhwZWN0ZWQgeyFyfSwgZ290IHshcn0nLmZvcm1hdChhLCBiKSkKIAorICAgICAgICAjIGlmIGJvdGggYSBhbmQgYiBhcmUgemVybywgY2hlY2sgd2hldGhlciB0aGV5IGhhdmUgdGhlIHNhbWUgc2lnbgorICAgICAgICAjIChpbiB0aGVvcnkgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGl0IHdvdWxkIGJlIGxlZ2l0aW1hdGUgZm9yIGEKKyAgICAgICAgIyBhbmQgYiB0byBoYXZlIG9wcG9zaXRlIHNpZ25zOyBpbiBwcmFjdGljZSB0aGVzZSBoYXJkbHkgZXZlcgorICAgICAgICAjIG9jY3VyKS4KICAgICAgICAgaWYgbm90IGEgYW5kIG5vdCBiOgotICAgICAgICAgICAgaWYgbWF0aC5hdGFuMihhLCAtMS4pICE9IG1hdGguYXRhbjIoYiwgLTEuKToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInplcm8gaGFzIHdyb25nIHNpZ246IGV4cGVjdGVkICVzLCBnb3QgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcHIoYSksIHJlcHIoYikpKQorICAgICAgICAgICAgaWYgbWF0aC5jb3B5c2lnbigxLiwgYSkgIT0gbWF0aC5jb3B5c2lnbigxLiwgYik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZyBvciAnemVybyBoYXMgd3Jvbmcgc2lnbjogZXhwZWN0ZWQgeyFyfSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHshcn0nLmZvcm1hdChhLCBiKSkKIAotICAgICAgICAjIHRlc3QgcGFzc2VzIGlmIGVpdGhlciB0aGUgYWJzb2x1dGUgZXJyb3Igb3IgdGhlIHJlbGF0aXZlCi0gICAgICAgICMgZXJyb3IgaXMgc3VmZmljaWVudGx5IHNtYWxsLiAgVGhlIGRlZmF1bHRzIGFtb3VudCB0byBhbgotICAgICAgICAjIGVycm9yIG9mIGJldHdlZW4gOSB1bHBzIGFuZCAxOSB1bHBzIG9uIGFuIElFRUUtNzU0IGNvbXBsaWFudAotICAgICAgICAjIG1hY2hpbmUuCi0KKyAgICAgICAgIyBpZiBhLWIgb3ZlcmZsb3dzLCBvciBiIGlzIGluZmluaXRlLCByZXR1cm4gRmFsc2UuICBBZ2FpbiwgaW4KKyAgICAgICAgIyB0aGVvcnkgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGEgaXMgd2l0aGluIGEgZmV3IHVscHMgb2YgdGhlCisgICAgICAgICMgbWF4IHJlcHJlc2VudGFibGUgZmxvYXQsIGFuZCB0aGVuIGIgY291bGQgbGVnaXRpbWF0ZWx5IGJlCisgICAgICAgICMgaW5maW5pdGUuICBJbiBwcmFjdGljZSB0aGVzZSBleGFtcGxlcyBhcmUgcmFyZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgYWJzb2x1dGVfZXJyb3IgPSBhYnMoYi1hKQogICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGVzdCBwYXNzZXMgaWYgZWl0aGVyIHRoZSBhYnNvbHV0ZSBlcnJvciBvciB0aGUgcmVsYXRpdmUKKyAgICAgICAgICAgICMgZXJyb3IgaXMgc3VmZmljaWVudGx5IHNtYWxsLiAgVGhlIGRlZmF1bHRzIGFtb3VudCB0byBhbgorICAgICAgICAgICAgIyBlcnJvciBvZiBiZXR3ZWVuIDkgdWxwcyBhbmQgMTkgdWxwcyBvbiBhbiBJRUVFLTc1NCBjb21wbGlhbnQKKyAgICAgICAgICAgICMgbWFjaGluZS4KICAgICAgICAgICAgIGlmIGFic29sdXRlX2Vycm9yIDw9IG1heChhYnNfZXJyLCByZWxfZXJyICogYWJzKGEpKToKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5mYWlsKCIlcyBhbmQgJXMgYXJlIG5vdCBzdWZmaWNpZW50bHkgY2xvc2UiICUgKHJlcHIoYSksIHJlcHIoYikpKQorICAgICAgICBzZWxmLmZhaWwobXNnIG9yCisgICAgICAgICAgICAgICAgICAneyFyfSBhbmQgeyFyfSBhcmUgbm90IHN1ZmZpY2llbnRseSBjbG9zZScuZm9ybWF0KGEsIGIpKQogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBlX2V4cGVjdGVkID0gMi43MTgyODE4Mjg0NTkwNDUyMzUzNgogICAgICAgICBwaV9leHBlY3RlZCA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5waSwgcGlfZXhwZWN0ZWQsIHBsYWNlcz05LAotICAgICAgICAgICAgbXNnPSJjbWF0aC5waSBpcyAlczsgc2hvdWxkIGJlICVzIiAlIChjbWF0aC5waSwgcGlfZXhwZWN0ZWQpKQorICAgICAgICAgICAgbXNnPSJjbWF0aC5waSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGgucGksIHBpX2V4cGVjdGVkKSkKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChjbWF0aC5lLCBlX2V4cGVjdGVkLCBwbGFjZXM9OSwKLSAgICAgICAgICAgIG1zZz0iY21hdGguZSBpcyAlczsgc2hvdWxkIGJlICVzIiAlIChjbWF0aC5lLCBlX2V4cGVjdGVkKSkKKyAgICAgICAgICAgIG1zZz0iY21hdGguZSBpcyB7fTsgc2hvdWxkIGJlIHt9Ii5mb3JtYXQoY21hdGguZSwgZV9leHBlY3RlZCkpCiAKICAgICBkZWYgdGVzdF91c2VyX29iamVjdChzZWxmKToKICAgICAgICAgIyBUZXN0IGF1dG9tYXRpYyBjYWxsaW5nIG9mIF9fY29tcGxleF9fIGFuZCBfX2Zsb2F0X18gYnkgY21hdGgKQEAgLTI5NCwxMCArMzEyLDggQEAKICAgICAgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZyh2LCBiYXNlKSwgei5yZWFsKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMC4sIHouaW1hZykKIAorICAgIEByZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X3NwZWNpZmljX3ZhbHVlcyhzZWxmKToKLSAgICAgICAgaWYgbm90IGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKToKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgIGRlZiByZWN0X2NvbXBsZXgoeik6CiAgICAgICAgICAgICAiIiJXcmFwcGVkIHZlcnNpb24gb2YgcmVjdCB0aGF0IGFjY2VwdHMgYSBjb21wbGV4IG51bWJlciBpbnN0ZWFkIG9mCiAgICAgICAgICAgICB0d28gZmxvYXQgYXJndW1lbnRzLiIiIgpAQCAtMzIzLDggKzMzOSw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGVzdF9zdHIgPSAiJXM6ICVzKGNvbXBsZXgoJXIsICVyKSkiICUgKGlkLCBmbiwgYXIsIGFpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1ZhbHVlRXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICVzJyAlIHRlc3Rfc3RyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1ZhbHVlRXJyb3Igbm90IHJhaXNlZCBpbiB0ZXN0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9OiB7fShjb21wbGV4KHshcn0sIHshcn0pKScuZm9ybWF0KGlkLCBmbiwgYXIsIGFpKSkKIAogICAgICAgICAgICAgaWYgJ292ZXJmbG93JyBpbiBmbGFnczoKICAgICAgICAgICAgICAgICB0cnk6CkBAIC0zMzIsOCArMzQ4LDggQEAKICAgICAgICAgICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0ciA9ICIlczogJXMoY29tcGxleCglciwgJXIpKSIgJSAoaWQsIGZuLCBhciwgYWkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3dFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJXMnICUgdGVzdF9zdHIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnT3ZlcmZsb3dFcnJvciBub3QgcmFpc2VkIGluIHRlc3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAne306IHt9KGNvbXBsZXgoeyFyfSwgeyFyfSkpJy5mb3JtYXQoaWQsIGZuLCBhciwgYWkpKQogCiAgICAgICAgICAgICBhY3R1YWwgPSBmdW5jdGlvbihhcmcpCiAKQEAgLTM1MSwxNyArMzY3LDE5IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlYWxfYWJzX2VyciA9IDVlLTMyMwogCi0gICAgICAgICAgICBpZiBub3QgKGFsbW9zdEVxdWFsRihleHBlY3RlZC5yZWFsLCBhY3R1YWwucmVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnIgPSByZWFsX2Fic19lcnIpIGFuZAotICAgICAgICAgICAgICAgICAgICBhbG1vc3RFcXVhbEYoZXhwZWN0ZWQuaW1hZywgYWN0dWFsLmltYWcpKToKLSAgICAgICAgICAgICAgICBlcnJvcl9tZXNzYWdlID0gKAotICAgICAgICAgICAgICAgICAgICAiJXM6ICVzKGNvbXBsZXgoJXIsICVyKSlcbiIgJSAoaWQsIGZuLCBhciwgYWkpICsKLSAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkOiBjb21wbGV4KCVyLCAlcilcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkLnJlYWwsIGV4cGVjdGVkLmltYWcpICsKLSAgICAgICAgICAgICAgICAgICAgIlJlY2VpdmVkOiBjb21wbGV4KCVyLCAlcilcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFjdHVhbC5yZWFsLCBhY3R1YWwuaW1hZykgKwotICAgICAgICAgICAgICAgICAgICAiUmVjZWl2ZWQgdmFsdWUgaW5zdWZmaWNpZW50bHkgY2xvc2UgdG8gZXhwZWN0ZWQgdmFsdWUuIikKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoZXJyb3JfbWVzc2FnZSkKKyAgICAgICAgICAgIGVycm9yX21lc3NhZ2UgPSAoCisgICAgICAgICAgICAgICAgJ3t9OiB7fShjb21wbGV4KHshcn0sIHshcn0pKVxuJworICAgICAgICAgICAgICAgICdFeHBlY3RlZDogY29tcGxleCh7IXJ9LCB7IXJ9KVxuJworICAgICAgICAgICAgICAgICdSZWNlaXZlZDogY29tcGxleCh7IXJ9LCB7IXJ9KVxuJworICAgICAgICAgICAgICAgICdSZWNlaXZlZCB2YWx1ZSBpbnN1ZmZpY2llbnRseSBjbG9zZSB0byBleHBlY3RlZCB2YWx1ZS4nCisgICAgICAgICAgICAgICAgKS5mb3JtYXQoaWQsIGZuLCBhciwgYWksCisgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5yZWFsLCBleHBlY3RlZC5pbWFnLAorICAgICAgICAgICAgICAgICAgICAgYWN0dWFsLnJlYWwsIGFjdHVhbC5pbWFnKQorICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZXhwZWN0ZWQucmVhbCwgYWN0dWFsLnJlYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX2Vycj1yZWFsX2Fic19lcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm9yX21lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChleHBlY3RlZC5pbWFnLCBhY3R1YWwuaW1hZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyb3JfbWVzc2FnZSkKIAogICAgIGRlZiBhc3NlcnRDSVNFcXVhbChzZWxmLCBhLCBiKToKICAgICAgICAgZXBzID0gMUUtNwpAQCAtNDQwLDkgKzQ1OCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFicyhjb21wbGV4KElORiwgTkFOKSksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4oYWJzKGNvbXBsZXgoTkFOLCBOQU4pKSkpCiAKKworICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Fic19vdmVyZmxvd3Moc2VsZik6CiAgICAgICAgICMgcmVzdWx0IG92ZXJmbG93cwotICAgICAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBhYnMsIGNvbXBsZXgoMS40ZTMwOCwgMS40ZTMwOCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGFicywgY29tcGxleCgxLjRlMzA4LCAxLjRlMzA4KSkKIAogICAgIGRlZiBhc3NlcnRDRXF1YWwoc2VsZiwgYSwgYik6CiAgICAgICAgIGVwcyA9IDFFLTcKQEAgLTQ1Niw2ICs0NzYsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCBwaS8yKSwgKDAsIDEuKSkKICAgICAgICAgc2VsZi5hc3NlcnRDRXF1YWwocmVjdCgxLCAtcGkvMiksICgwLCAtMS4pKQogCisgICAgZGVmIHRlc3RfaXNmaW5pdGUoc2VsZik6CisgICAgICAgIHJlYWxfdmFscyA9IFtmbG9hdCgnLWluZicpLCAtMi4zLCAtMC4wLAorICAgICAgICAgICAgICAgICAgICAgMC4wLCAyLjMsIGZsb2F0KCdpbmYnKSwgZmxvYXQoJ25hbicpXQorICAgICAgICBmb3IgeCBpbiByZWFsX3ZhbHM6CisgICAgICAgICAgICBmb3IgeSBpbiByZWFsX3ZhbHM6CisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoeCwgeSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtYXRoLmlzZmluaXRlKHopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGguaXNmaW5pdGUoeCkgYW5kIG1hdGguaXNmaW5pdGUoeSkpCisKICAgICBkZWYgdGVzdF9pc25hbihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbWF0aC5pc25hbigxaikpCkBAIC00NzgsNiArNTA3LDMxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KE5BTiwgSU5GKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbWF0aC5pc2luZihjb21wbGV4KElORiwgTkFOKSkpCiAKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignVEFOSF9QUkVTRVJWRVNfWkVST19TSUdOJykgPT0gMCwKKyAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW0gdGFuaCgpIGZ1bmN0aW9uIGRvZXNuJ3QgY29weSB0aGUgc2lnbiIpCisgICAgZGVmIHRlc3RUYW5oU2lnbihzZWxmKToKKyAgICAgICAgZm9yIHogaW4gY29tcGxleF96ZXJvczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGxleElkZW50aWNhbChjbWF0aC50YW5oKHopLCB6KQorCisgICAgIyBUaGUgYWxnb3JpdGhtIHVzZWQgZm9yIGF0YW4gYW5kIGF0YW5oIG1ha2VzIHVzZSBvZiB0aGUgc3lzdGVtCisgICAgIyBsb2cxcCBmdW5jdGlvbjsgSWYgdGhhdCBzeXN0ZW0gZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHRoZSBzaWduCisgICAgIyBvZiB6ZXJvLCB0aGVuIGF0YW4gYW5kIGF0YW5oIHdpbGwgYWxzbyBoYXZlIGRpZmZpY3VsdGllcyB3aXRoCisgICAgIyB0aGUgc2lnbiBvZiBjb21wbGV4IHplcm9zLgorICAgIEByZXF1aXJlc19JRUVFXzc1NAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMT0cxUF9EUk9QU19aRVJPX1NJR04nKSwKKyAgICAgICAgICAgICAgICAgICAgICJzeXN0ZW0gbG9nMXAoKSBmdW5jdGlvbiBkb2Vzbid0IHByZXNlcnZlIHRoZSBzaWduIikKKyAgICBkZWYgdGVzdEF0YW5TaWduKHNlbGYpOgorICAgICAgICBmb3IgeiBpbiBjb21wbGV4X3plcm9zOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb21wbGV4SWRlbnRpY2FsKGNtYXRoLmF0YW4oeiksIHopCisKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTE9HMVBfRFJPUFNfWkVST19TSUdOJyksCisgICAgICAgICAgICAgICAgICAgICAic3lzdGVtIGxvZzFwKCkgZnVuY3Rpb24gZG9lc24ndCBwcmVzZXJ2ZSB0aGUgc2lnbiIpCisgICAgZGVmIHRlc3RBdGFuaFNpZ24oc2VsZik6CisgICAgICAgIGZvciB6IGluIGNvbXBsZXhfemVyb3M6CisgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBsZXhJZGVudGljYWwoY21hdGguYXRhbmgoeiksIHopCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChDTWF0aFRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQppbmRleCA3YTEzZDI3Li5hMTc5OWY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiCiBUZXN0IHNjcmlwdCBmb3IgdGhlICdjbWQnIG1vZHVsZQogT3JpZ2luYWwgYnkgTWljaGFlbCBTY2huZWlkZXIKQEAgLTcsMTAgKzcsMTAgQEAKIAogaW1wb3J0IGNtZAogaW1wb3J0IHN5cwotaW1wb3J0IHRyYWNlCiBpbXBvcnQgcmUKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGlvCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3Mgc2FtcGxlY21kY2xhc3MoY21kLkNtZCk6CiAgICAgIiIiCkBAIC02MSwxNSArNjEsMTcgQEAKICAgICA+Pj4gbXljbWQuY29tcGxldGVuYW1lcygiMTIiKQogICAgIFtdCiAgICAgPj4+IG15Y21kLmNvbXBsZXRlbmFtZXMoImhlbHAiKQotICAgIFsnaGVscCcsICdoZWxwJ10KKyAgICBbJ2hlbHAnXQogCiAgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIGNvbXBsZXRlX2hlbHAoKToKICAgICA+Pj4gbXljbWQuY29tcGxldGVfaGVscCgiYSIpCiAgICAgWydhZGQnXQogICAgID4+PiBteWNtZC5jb21wbGV0ZV9oZWxwKCJoZSIpCi0gICAgWydoZWxwJywgJ2hlbHAnXQorICAgIFsnaGVscCddCiAgICAgPj4+IG15Y21kLmNvbXBsZXRlX2hlbHAoIjEyIikKICAgICBbXQorICAgID4+PiBzb3J0ZWQobXljbWQuY29tcGxldGVfaGVscCgiIikpCisgICAgWydhZGQnLCAnZXhpdCcsICdoZWxwJywgJ3NoZWxsJ10KIAogICAgIFRlc3QgZm9yIHRoZSBmdW5jdGlvbiBkb19oZWxwKCk6CiAgICAgPj4+IG15Y21kLmRvX2hlbHAoInRlc3RldCIpCkBAIC04MiwxMSArODQsMTEgQEAKICAgICA8QkxBTktMSU5FPgogICAgIERvY3VtZW50ZWQgY29tbWFuZHMgKHR5cGUgaGVscCA8dG9waWM+KToKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgYWRkCisgICAgYWRkICBoZWxwCiAgICAgPEJMQU5LTElORT4KICAgICBVbmRvY3VtZW50ZWQgY29tbWFuZHM6CiAgICAgPT09PT09PT09PT09PT09PT09PT09PQotICAgIGV4aXQgIGhlbHAgIHNoZWxsCisgICAgZXhpdCAgc2hlbGwKICAgICA8QkxBTktMSU5FPgogCiAgICAgVGVzdCBmb3IgdGhlIGZ1bmN0aW9uIHByaW50X3RvcGljcygpOgpAQCAtMTIzLDExICsxMjUsMTEgQEAKICAgICA8QkxBTktMSU5FPgogICAgIERvY3VtZW50ZWQgY29tbWFuZHMgKHR5cGUgaGVscCA8dG9waWM+KToKICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgYWRkCisgICAgYWRkICBoZWxwCiAgICAgPEJMQU5LTElORT4KICAgICBVbmRvY3VtZW50ZWQgY29tbWFuZHM6CiAgICAgPT09PT09PT09PT09PT09PT09PT09PQotICAgIGV4aXQgIGhlbHAgIHNoZWxsCisgICAgZXhpdCAgc2hlbGwKICAgICA8QkxBTktMSU5FPgogICAgIGhlbHAgdGV4dCBmb3IgYWRkCiAgICAgSGVsbG8gZnJvbSBwb3N0bG9vcApAQCAtMTQ1LDcgKzE0Nyw3IEBACiAgICAgZGVmIGNvbXBsZXRlX2NvbW1hbmQoc2VsZik6CiAgICAgICAgIHByaW50KCJjb21wbGV0ZSBjb21tYW5kIikKIAotICAgIGRlZiBkb19zaGVsbChzZWxmKToKKyAgICBkZWYgZG9fc2hlbGwoc2VsZiwgcyk6CiAgICAgICAgIHBhc3MKIAogICAgIGRlZiBkb19hZGQoc2VsZiwgcyk6CkBAIC0xOTEsMTEgKzE5MywxMiBAQAogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfY21kCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2NtZAogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9jbWQsIHZlcmJvc2UpCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdEFsdGVybmF0ZUlucHV0KQogCiBkZWYgdGVzdF9jb3ZlcmFnZShjb3ZlcmRpcik6CisgICAgdHJhY2UgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RyYWNlJykKICAgICB0cmFjZXI9dHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLnByZWZpeCwgc3lzLmV4ZWNfcHJlZml4LF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQogICAgIHRyYWNlci5ydW4oJ3JlbG9hZChjbWQpO3Rlc3RfbWFpbigpJykKQEAgLTIwNiw1ICsyMDksNyBAQAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpZiAiLWMiIGluIHN5cy5hcmd2OgogICAgICAgICB0ZXN0X2NvdmVyYWdlKCcvdG1wL2NtZC5jb3ZlcicpCisgICAgZWxpZiAiLWkiIGluIHN5cy5hcmd2OgorICAgICAgICBzYW1wbGVjbWRjbGFzcygpLmNtZGxvb3AoKQogICAgIGVsc2U6CiAgICAgICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQppbmRleCBjNGI4YmU1Li5jNGUzYWRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKQEAgLTEsNTggKzEsMzEgQEAKICMgVGVzdHMgaW52b2NhdGlvbiBvZiB0aGUgaW50ZXJwcmV0ZXIgd2l0aCB2YXJpb3VzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLSMgQWxsIHRlc3RzIGFyZSBleGVjdXRlZCB3aXRoIGVudmlyb25tZW50IHZhcmlhYmxlcyBpZ25vcmVkCisjIE1vc3QgdGVzdHMgYXJlIGV4ZWN1dGVkIHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGVzIGlnbm9yZWQKICMgU2VlIHRlc3RfY21kX2xpbmVfc2NyaXB0LnB5IGZvciB0ZXN0aW5nIG9mIHNjcmlwdCBleGVjdXRpb24KIAotaW1wb3J0IG9zCiBpbXBvcnQgdGVzdC5zdXBwb3J0LCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiAKLWRlZiBfc3Bhd25fcHl0aG9uKCphcmdzKToKLSAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZV0KLSAgICAjIFdoZW4gdGVzdGluZyAtUywgd2UgbmVlZCBQWVRIT05QQVRIIHRvIHdvcmsgKHNlZSB0ZXN0X3NpdGVfZmxhZygpKQotICAgIGlmICctUycgbm90IGluIGFyZ3M6Ci0gICAgICAgIGNtZF9saW5lLmFwcGVuZCgnLUUnKQotICAgIGNtZF9saW5lLmV4dGVuZChhcmdzKQotICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQogCi1kZWYgX2tpbGxfcHl0aG9uKHApOgotICAgIHJldHVybiBfa2lsbF9weXRob25fYW5kX2V4aXRfY29kZShwKVswXQotCisjIFhYWCAobmNvZ2hsYW4pOiBNb3ZlIHRvIHNjcmlwdF9oZWxwZXIgYW5kIG1ha2UgY29uc2lzdGVudCB3aXRoIHJ1bl9weXRob24KIGRlZiBfa2lsbF9weXRob25fYW5kX2V4aXRfY29kZShwKToKLSAgICBwLnN0ZGluLmNsb3NlKCkKLSAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpCi0gICAgcC5zdGRvdXQuY2xvc2UoKQotICAgICMgdHJ5IHRvIGNsZWFudXAgdGhlIGNoaWxkIHNvIHdlIGRvbid0IGFwcGVhciB0byBsZWFrIHdoZW4gcnVubmluZwotICAgICMgd2l0aCByZWdydGVzdCAtUi4gIFRoaXMgc2hvdWxkIGJlIGEgbm8tb3Agb24gV2luZG93cy4KLSAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICBkYXRhID0ga2lsbF9weXRob24ocCkKICAgICByZXR1cm5jb2RlID0gcC53YWl0KCkKICAgICByZXR1cm4gZGF0YSwgcmV0dXJuY29kZQogCiBjbGFzcyBDbWRMaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHN0YXJ0X3B5dGhvbihzZWxmLCAqYXJncyk6Ci0gICAgICAgIHJldHVybiBzZWxmLnN0YXJ0X3B5dGhvbl9hbmRfZXhpdF9jb2RlKCphcmdzKVswXQotCi0gICAgZGVmIHN0YXJ0X3B5dGhvbl9hbmRfZXhpdF9jb2RlKHNlbGYsICphcmdzKToKLSAgICAgICAgcCA9IF9zcGF3bl9weXRob24oKmFyZ3MpCi0gICAgICAgIHJldHVybiBfa2lsbF9weXRob25fYW5kX2V4aXRfY29kZShwKQotCi0gICAgZGVmIGV4aXRfY29kZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLUUnXQotICAgICAgICBjbWRfbGluZS5leHRlbmQoYXJncykKLSAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICd3JykgYXMgZGV2bnVsbDoKLSAgICAgICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNhbGwoY21kX2xpbmUsIHN0ZG91dD1kZXZudWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0KICAgICBkZWYgdGVzdF9kaXJlY3RvcmllcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmV4aXRfY29kZSgnLicpLCAwKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYuZXhpdF9jb2RlKCc8IC4nKSwgMCkKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCcuJykKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCc8IC4nKQogCiAgICAgZGVmIHZlcmlmeV92YWxpZF9mbGFnKHNlbGYsIGNtZF9saW5lKToKLSAgICAgICAgZGF0YSA9IHNlbGYuc3RhcnRfcHl0aG9uKGNtZF9saW5lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSBiJycgb3IgZGF0YS5lbmRzd2l0aChiJ1xuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ1RyYWNlYmFjaycgbm90IGluIGRhdGEpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKmNtZF9saW5lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0ID09IGInJyBvciBvdXQuZW5kc3dpdGgoYidcbicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInVHJhY2ViYWNrJywgb3V0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInVHJhY2ViYWNrJywgZXJyKQogCiAgICAgZGVmIHRlc3Rfb3B0aW1pemUoc2VsZik6CiAgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1PJykKQEAgLTY1LDg0ICszOCwxNDcgQEAKICAgICAgICAgc2VsZi52ZXJpZnlfdmFsaWRfZmxhZygnLVF3YXJuYWxsJykKIAogICAgIGRlZiB0ZXN0X3NpdGVfZmxhZyhzZWxmKToKLSAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGJ1ZyAjNTg2NjgwIGJ5IGFkZGluZyB0aGUgZXh0ZW5zaW9uIGRpciB0byBQWVRIT05QQVRICi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KLSAgICAgICAgICAgIHMgPSAiLi9idWlsZC9saWIuJXMtJS4zcyIgJSAoZ2V0X3BsYXRmb3JtKCksIHN5cy52ZXJzaW9uKQotICAgICAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6Ci0gICAgICAgICAgICAgICAgcyArPSAnLXB5ZGVidWcnCi0gICAgICAgICAgICBwID0gb3MuZW52aXJvbi5nZXQoJ1BZVEhPTlBBVEgnLCAnJykKLSAgICAgICAgICAgIGlmIHA6Ci0gICAgICAgICAgICAgICAgcCArPSAnOicKLSAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IHAgKyBzCiAgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1TJykKIAogICAgIGRlZiB0ZXN0X3VzYWdlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoYid1c2FnZScgaW4gc2VsZi5zdGFydF9weXRob24oJy1oJykpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3VzYWdlJywgb3V0KQogCiAgICAgZGVmIHRlc3RfdmVyc2lvbihzZWxmKToKICAgICAgICAgdmVyc2lvbiA9ICgnUHl0aG9uICVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdKS5lbmNvZGUoImFzY2lpIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RhcnRfcHl0aG9uKCctVicpLnN0YXJ0c3dpdGgodmVyc2lvbikpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1WJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5zdGFydHN3aXRoKHZlcnNpb24pKQogCiAgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKICAgICAgICAgIyAtdiBjYXVzZXMgaW1wb3J0cyB0byB3cml0ZSB0byBzdGRlcnIuICBJZiB0aGUgd3JpdGUgdG8KICAgICAgICAgIyBzdGRlcnIgaXRzZWxmIGNhdXNlcyBhbiBpbXBvcnQgdG8gaGFwcGVuIChmb3IgdGhlIG91dHB1dAogICAgICAgICAjIGNvZGVjKSwgYSByZWN1cnNpb24gbG9vcCBjYW4gb2NjdXIuCi0gICAgICAgIGRhdGEsIHJjID0gc2VsZi5zdGFydF9weXRob25fYW5kX2V4aXRfY29kZSgnLXYnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYidzdGFjayBvdmVyZmxvdycgbm90IGluIGRhdGEpCi0gICAgICAgIGRhdGEsIHJjID0gc2VsZi5zdGFydF9weXRob25fYW5kX2V4aXRfY29kZSgnLXZ2JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInc3RhY2sgb3ZlcmZsb3cnIG5vdCBpbiBkYXRhKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctdicpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidzdGFjayBvdmVyZmxvdycsIGVycikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLXZ2JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3N0YWNrIG92ZXJmbG93JywgZXJyKQorCisgICAgZGVmIHRlc3RfeG9wdGlvbnMoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7fSkKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygKKyAgICAgICAgICAgICctWGEnLCAnLVhiPWMsZD1lJywgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5feG9wdGlvbnMpJykKKyAgICAgICAgb3B0cyA9IGV2YWwob3V0LnNwbGl0bGluZXMoKVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcHRzLCB7J2EnOiBUcnVlLCAnYic6ICdjLGQ9ZSd9KQogCiAgICAgZGVmIHRlc3RfcnVuX21vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGV4cGVjdGVkIG9wZXJhdGlvbiBvZiB0aGUgJy1tJyBzd2l0Y2gKICAgICAgICAgIyBTd2l0Y2ggbmVlZHMgYW4gYXJndW1lbnQKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmV4aXRfY29kZSgnLW0nKSwgMCkKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScpCiAgICAgICAgICMgQ2hlY2sgd2UgZ2V0IGFuIGVycm9yIGZvciBhIG5vbmV4aXN0ZW50IG1vZHVsZQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKAotICAgICAgICAgICAgc2VsZi5leGl0X2NvZGUoJy1tJywgJ2Zub3JkNDM1MjB4eXonKSwKLSAgICAgICAgICAgIDApCisgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAnZm5vcmQ0MzUyMHh5eicpCiAgICAgICAgICMgQ2hlY2sgdGhlIHJ1bnB5IG1vZHVsZSBhbHNvIGdpdmVzIGFuIGVycm9yIGZvcgogICAgICAgICAjIGEgbm9uZXhpc3RlbnQgbW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCi0gICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpLAotICAgICAgICAgICAgMCkKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICdydW5weScsICdmbm9yZDQzNTIweHl6JyksCiAgICAgICAgICMgQWxsIGdvb2QgaWYgbW9kdWxlIGlzIGxvY2F0ZWQgYW5kIHJ1biBzdWNjZXNzZnVsbHkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctbScsICd0aW1laXQnLCAnLW4nLCAnMScpLAotICAgICAgICAgICAgMCkKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGltZWl0JywgJy1uJywgJzEnKSwKIAogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYnVnMTc2NDQwNyhzZWxmKToKICAgICAgICAgIyAtbSBhbmQgLWkgbmVlZCB0byBwbGF5IHdlbGwgdG9nZXRoZXIKICAgICAgICAgIyBSdW5zIHRoZSB0aW1laXQgbW9kdWxlIGFuZCBjaGVja3MgdGhlIF9fbWFpbl9fCiAgICAgICAgICMgbmFtZXNwYWNlIGhhcyBiZWVuIHBvcHVsYXRlZCBhcHByb3ByaWF0ZWx5Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCctaScsICctbScsICd0aW1laXQnLCAnLW4nLCAnMScpCisgICAgICAgIHAgPSBzcGF3bl9weXRob24oJy1pJywgJy1tJywgJ3RpbWVpdCcsICctbicsICcxJykKICAgICAgICAgcC5zdGRpbi53cml0ZShiJ1RpbWVyXG4nKQogICAgICAgICBwLnN0ZGluLndyaXRlKGInZXhpdCgpXG4nKQotICAgICAgICBkYXRhID0gX2tpbGxfcHl0aG9uKHApCisgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5maW5kKGInMSBsb29wJykgIT0gLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmZpbmQoYidfX21haW5fXy5UaW1lcicpICE9IC0xKQogCiAgICAgZGVmIHRlc3RfcnVuX2NvZGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBleHBlY3RlZCBvcGVyYXRpb24gb2YgdGhlICctYycgc3dpdGNoCiAgICAgICAgICMgU3dpdGNoIG5lZWRzIGFuIGFyZ3VtZW50Ci0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5leGl0X2NvZGUoJy1jJyksIDApCisgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLWMnKQogICAgICAgICAjIENoZWNrIHdlIGdldCBhbiBlcnJvciBmb3IgYW4gdW5jYXVnaHQgZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoCi0gICAgICAgICAgICBzZWxmLmV4aXRfY29kZSgnLWMnLCAncmFpc2UgRXhjZXB0aW9uJyksCi0gICAgICAgICAgICAwKQorICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1jJywgJ3JhaXNlIEV4Y2VwdGlvbicpCiAgICAgICAgICMgQWxsIGdvb2QgaWYgZXhlY3V0aW9uIGlzIHN1Y2Nlc3NmdWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctYycsICdwYXNzJyksCi0gICAgICAgICAgICAwKQorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKCctYycsICdwYXNzJykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpID09ICdhc2NpaScsCisgICAgICAgICAgICAgICAgICAgICAnbmVlZCBhIGZpbGVzeXN0ZW0gZW5jb2RpbmcgZGlmZmVyZW50IHRoYW4gQVNDSUknKQorICAgIGRlZiB0ZXN0X25vbl9hc2NpaShzZWxmKToKICAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIG5vbi1hc2NpaSBkYXRhCi0gICAgICAgIGlmIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSAhPSAnYXNjaWknOgotICAgICAgICAgICAgY29tbWFuZCA9ICJhc3NlcnQob3JkKCdceGU5JykgPT0gMHhlOSkiCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIHNlbGYuZXhpdF9jb2RlKCctYycsIGNvbW1hbmQpLAotICAgICAgICAgICAgICAgIDApCisgICAgICAgIGlmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgcHJpbnQoJ2xvY2FsZSBlbmNvZGluZyA9ICVzLCBmaWxlc3lzdGVtIGVuY29kaW5nID0gJXMnCisgICAgICAgICAgICAgICAgICAlIChsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKSwgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKSkKKyAgICAgICAgY29tbWFuZCA9ICJhc3NlcnQob3JkKCdceGU5JykgPT0gMHhlOSkiCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29tbWFuZCkKKworICAgICMgT24gV2luZG93cywgcGFzcyBieXRlcyB0byBzdWJwcm9jZXNzIGRvZXNuJ3QgdGVzdCBob3cgUHl0aG9uIGRlY29kZXMgdGhlCisgICAgIyBjb21tYW5kIGxpbmUsIGJ1dCBob3cgc3VicHJvY2VzcyBkb2VzIGRlY29kZSBieXRlcyB0byB1bmljb2RlLiBQeXRob24KKyAgICAjIGRvZXNuJ3QgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYmVjYXVzZSBXaW5kb3dzIHByb3ZpZGVzIGRpcmVjdGx5IHRoZQorICAgICMgYXJndW1lbnRzIGFzIHVuaWNvZGUgKHVzaW5nIHdtYWluKCkgaW5zdGVhZCBvZiBtYWluKCkpLgorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAnV2luZG93cyBoYXMgYSBuYXRpdmUgdW5pY29kZSBBUEknKQorICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2NvZGUoc2VsZik6CisgICAgICAgIHVuZGVjb2RhYmxlID0gYiJceGZmIgorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICAjIFVzZSBDIGxvY2FsZSB0byBnZXQgYXNjaWkgZm9yIHRoZSBsb2NhbGUgZW5jb2RpbmcKKyAgICAgICAgZW52WydMQ19BTEwnXSA9ICdDJworICAgICAgICBjb2RlID0gKAorICAgICAgICAgICAgYidpbXBvcnQgbG9jYWxlOyAnCisgICAgICAgICAgICBiJ3ByaW50KGFzY2lpKCInICsgdW5kZWNvZGFibGUgKyBiJyIpLCAnCisgICAgICAgICAgICAgICAgYidsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKSknKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCisgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBpZiBwLnJldHVybmNvZGUgPT0gMToKKyAgICAgICAgICAgICMgX1B5X2NoYXIyd2NoYXIoKSBkZWNvZGVkIGInXHhmZicgYXMgJ1x1ZGNmZicgKGInXHhmZicgaXMgbm90CisgICAgICAgICAgICAjIGRlY29kYWJsZSBmcm9tIEFTQ0lJKSBhbmQgcnVuX2NvbW1hbmQoKSBmYWlsZWQgb24KKyAgICAgICAgICAgICMgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpLiBUaGlzIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgb24KKyAgICAgICAgICAgICMgTGludXguCisgICAgICAgICAgICBwYXR0ZXJuID0gYiJVbmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGZyb20gdGhlIGNvbW1hbmQgbGluZToiCisgICAgICAgIGVsaWYgcC5yZXR1cm5jb2RlID09IDA6CisgICAgICAgICAgICAjIF9QeV9jaGFyMndjaGFyKCkgZGVjb2RlZCBiJ1x4ZmYnIGFzICdceGZmJyBldmVuIGlmIHRoZSBsb2NhbGUgaXMKKyAgICAgICAgICAgICMgQyBhbmQgdGhlIGxvY2FsZSBlbmNvZGluZyBpcyBBU0NJSS4gSXQgb2NjdXJzIG9uIEZyZWVCU0QsIFNvbGFyaXMKKyAgICAgICAgICAgICMgYW5kIE1hYyBPUyBYLgorICAgICAgICAgICAgcGF0dGVybiA9IGIiJ1xceGZmJyAiCisgICAgICAgICAgICAjIFRoZSBvdXRwdXQgaXMgZm9sbG93ZWQgYnkgdGhlIGVuY29kaW5nIG5hbWUsIGFuIGFsaWFzIHRvIEFTQ0lJLgorICAgICAgICAgICAgIyBFeGFtcGxlczogIlVTLUFTQ0lJIiBvciAiNjQ2IiAoSVNPIDY0Niwgb24gU29sYXJpcykuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVW5rbm93biBleGl0IGNvZGU6ICVzLCBvdXRwdXQ9JWEiICUgKHAucmV0dXJuY29kZSwgc3Rkb3V0KSkKKyAgICAgICAgaWYgbm90IHN0ZG91dC5zdGFydHN3aXRoKHBhdHRlcm4pOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVhIGRvZXNuJ3Qgc3RhcnQgd2l0aCAlYSIgJSAoc3Rkb3V0LCBwYXR0ZXJuKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgJ3Rlc3Qgc3BlY2lmaWMgdG8gTWFjIE9TIFgnKQorICAgIGRlZiB0ZXN0X29zeF91dGY4KHNlbGYpOgorICAgICAgICBkZWYgY2hlY2tfb3V0cHV0KHRleHQpOgorICAgICAgICAgICAgZGVjb2RlZCA9IHRleHQuZGVjb2RlKCd1dGY4JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgICAgICBleHBlY3RlZCA9IGFzY2lpKGRlY29kZWQpLmVuY29kZSgnYXNjaWknKSArIGInXG4nCisKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICAjIEMgbG9jYWxlIGdpdmVzIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgYnV0IFB5dGhvbiB1c2VzIFVURi04CisgICAgICAgICAgICAjIHRvIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYCisgICAgICAgICAgICBlbnZbJ0xDX0FMTCddID0gJ0MnCisKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKAorICAgICAgICAgICAgICAgIChzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHByaW50KGFzY2lpKHN5cy5hcmd2WzFdKSkiLCB0ZXh0KSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGV4cGVjdGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDApCisKKyAgICAgICAgIyB0ZXN0IHZhbGlkIHV0Zi04CisgICAgICAgIHRleHQgPSAnZTpceGU5LCBldXJvOlx1MjBhYywgbm9uLWJtcDpcVTAwMTBmZmZmJy5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgY2hlY2tfb3V0cHV0KHRleHQpCisKKyAgICAgICAgIyB0ZXN0IGludmFsaWQgdXRmLTgKKyAgICAgICAgdGV4dCA9ICgKKyAgICAgICAgICAgIGInXHhmZicgICAgICAgICAjIGludmFsaWQgYnl0ZQorICAgICAgICAgICAgYidceGMzXHhhOScgICAgICMgdmFsaWQgdXRmLTggY2hhcmFjdGVyCisgICAgICAgICAgICBiJ1x4YzNceGZmJyAgICAgIyBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UKKyAgICAgICAgICAgIGInXHhlZFx4YTBceDgwJyAjIGxvbmUgc3Vycm9nYXRlIGNoYXJhY3RlciAoaW52YWxpZCkKKyAgICAgICAgKQorICAgICAgICBjaGVja19vdXRwdXQodGV4dCkKIAogICAgIGRlZiB0ZXN0X3VuYnVmZmVyZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICAjIFRlc3QgZXhwZWN0ZWQgb3BlcmF0aW9uIG9mIHRoZSAnLXUnIHN3aXRjaApAQCAtMTUwLDIxICsxODYsMjEgQEAKICAgICAgICAgICAgICMgQmluYXJ5IGlzIHVuYnVmZmVyZWQKICAgICAgICAgICAgIGNvZGUgPSAoImltcG9ydCBvcywgc3lzOyBzeXMuJXMuYnVmZmVyLndyaXRlKGIneCcpOyBvcy5fZXhpdCgwKSIKICAgICAgICAgICAgICAgICAlIHN0cmVhbSkKLSAgICAgICAgICAgIGRhdGEsIHJjID0gc2VsZi5zdGFydF9weXRob25fYW5kX2V4aXRfY29kZSgnLXUnLCAnLWMnLCBjb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy11JywgJy1jJywgY29kZSkKKyAgICAgICAgICAgIGRhdGEgPSBlcnIgaWYgc3RyZWFtID09ICdzdGRlcnInIGVsc2Ugb3V0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIneCcsICJiaW5hcnkgJXMgbm90IHVuYnVmZmVyZWQiICUgc3RyZWFtKQogICAgICAgICAgICAgIyBUZXh0IGlzIGxpbmUtYnVmZmVyZWQKICAgICAgICAgICAgIGNvZGUgPSAoImltcG9ydCBvcywgc3lzOyBzeXMuJXMud3JpdGUoJ3hcXG4nKTsgb3MuX2V4aXQoMCkiCiAgICAgICAgICAgICAgICAgJSBzdHJlYW0pCi0gICAgICAgICAgICBkYXRhLCByYyA9IHNlbGYuc3RhcnRfcHl0aG9uX2FuZF9leGl0X2NvZGUoJy11JywgJy1jJywgY29kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctdScsICctYycsIGNvZGUpCisgICAgICAgICAgICBkYXRhID0gZXJyIGlmIHN0cmVhbSA9PSAnc3RkZXJyJyBlbHNlIG91dAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLnN0cmlwKCksIGIneCcsCiAgICAgICAgICAgICAgICAgInRleHQgJXMgbm90IGxpbmUtYnVmZmVyZWQiICUgc3RyZWFtKQogCiAgICAgZGVmIHRlc3RfdW5idWZmZXJlZF9pbnB1dChzZWxmKToKICAgICAgICAgIyBzeXMuc3RkaW4gc3RpbGwgd29ya3Mgd2l0aCAnLXUnCiAgICAgICAgIGNvZGUgPSAoImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3lzLnN0ZGluLnJlYWQoMSkpIikKLSAgICAgICAgcCA9IF9zcGF3bl9weXRob24oJy11JywgJy1jJywgY29kZSkKKyAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLXUnLCAnLWMnLCBjb2RlKQogICAgICAgICBwLnN0ZGluLndyaXRlKGIneCcpCiAgICAgICAgIHAuc3RkaW4uZmx1c2goKQogICAgICAgICBkYXRhLCByYyA9IF9raWxsX3B5dGhvbl9hbmRfZXhpdF9jb2RlKHApCkBAIC0xNzIsMjMgKzIwOCw2MiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5zdGFydHN3aXRoKGIneCcpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfUFlUSE9OUEFUSChzZWxmKToKLSAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIHBhdGgxID0gIkFCQ0RFIiAqIDEwMAotICAgICAgICAgICAgcGF0aDIgPSAiRkdISUoiICogMTAwCi0gICAgICAgICAgICBlbnZbJ1BZVEhPTlBBVEgnXSA9IHBhdGgxICsgb3MucGF0aHNlcCArIHBhdGgyCisgICAgICAgIHBhdGgxID0gIkFCQ0RFIiAqIDEwMAorICAgICAgICBwYXRoMiA9ICJGR0hJSiIgKiAxMDAKKyAgICAgICAgcGF0aCA9IHBhdGgxICsgb3MucGF0aHNlcCArIHBhdGgyCiAKLSAgICAgICAgICAgIGNvZGUgPSAiIiIKLWltcG9ydCBzeXMKLXBhdGggPSAiOiIuam9pbihzeXMucGF0aCkKLXBhdGggPSBwYXRoLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpCi1zeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShwYXRoKSIiIgotICAgICAgICAgICAgY29kZSA9IGNvZGUuc3RyaXAoKS5zcGxpdGxpbmVzKCkKLSAgICAgICAgICAgIGNvZGUgPSAnOyAnLmpvaW4oY29kZSkKLSAgICAgICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCctUycsICctYycsIGNvZGUpCi0gICAgICAgICAgICBzdGRvdXQsIF8gPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXRoMS5lbmNvZGUoJ2FzY2lpJykgaW4gc3Rkb3V0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdGgyLmVuY29kZSgnYXNjaWknKSBpbiBzdGRvdXQpCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgcGF0aCA9ICI6Ii5qb2luKHN5cy5wYXRoKQorICAgICAgICAgICAgcGF0aCA9IHBhdGguZW5jb2RlKCJhc2NpaSIsICJiYWNrc2xhc2hyZXBsYWNlIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKHBhdGgpIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1TJywgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05QQVRIPXBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDEuZW5jb2RlKCdhc2NpaScpLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocGF0aDIuZW5jb2RlKCdhc2NpaScpLCBvdXQpCisKKyAgICBkZWYgdGVzdF9kaXNwbGF5aG9va191bmVuY29kYWJsZShzZWxmKToKKyAgICAgICAgZm9yIGVuY29kaW5nIGluICgnYXNjaWknLCAnbGF0aW4xJywgJ3V0ZjgnKToKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBlbnZbJ1BZVEhPTklPRU5DT0RJTkcnXSA9IGVuY29kaW5nCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctaSddLAorICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICAgICAgIyBub24tYXNjaWksIHN1cnJvZ2F0ZSwgbm9uLUJNUCBwcmludGFibGUsIG5vbi1CTVAgdW5wcmludGFibGUKKyAgICAgICAgICAgIHRleHQgPSAiYT1ceGU5IGI9XHVEQzgwIGM9XFUwMDAxMDAwMCBkPVxVMDAxMEZGRkYiCisgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGFzY2lpKHRleHQpLmVuY29kZSgnYXNjaWknKSArIGIiXG4iKQorICAgICAgICAgICAgcC5zdGRpbi53cml0ZShiJ2V4aXQoKVxuJykKKyAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQorICAgICAgICAgICAgZXNjYXBlZCA9IHJlcHIodGV4dCkuZW5jb2RlKGVuY29kaW5nLCAnYmFja3NsYXNocmVwbGFjZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVzY2FwZWQsIGRhdGEpCisKKyAgICBkZWYgY2hlY2tfaW5wdXQoc2VsZiwgY29kZSwgZXhwZWN0ZWQpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgid2IrIikgYXMgc3RkaW46CisgICAgICAgICAgICBzZXAgPSBvcy5saW5lc2VwLmVuY29kZSgnQVNDSUknKQorICAgICAgICAgICAgc3RkaW4ud3JpdGUoc2VwLmpvaW4oKGInYWJjJywgYidkZWYnKSkpCisgICAgICAgICAgICBzdGRpbi5mbHVzaCgpCisgICAgICAgICAgICBzdGRpbi5zZWVrKDApCisgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICAgICAgKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKSwKKyAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKKyAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9yZWFkbGluZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEyNzI6IGNoZWNrIHRoYXQgc3lzLnN0ZGluLnJlYWRsaW5lKCkgcmVwbGFjZXMgJ1xyXG4nIGJ5ICdcbicKKyAgICAgICAgIyBvbiBXaW5kb3dzIChzeXMuc3RkaW4gaXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlKQorICAgICAgICBzZWxmLmNoZWNrX2lucHV0KAorICAgICAgICAgICAgImltcG9ydCBzeXM7IHByaW50KHJlcHIoc3lzLnN0ZGluLnJlYWRsaW5lKCkpKSIsCisgICAgICAgICAgICBiIidhYmNcXG4nIikKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5faW5wdXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMjcyOiBjaGVjayB0aGF0IGlucHV0KCkgc3RyaXBzIG5ld2xpbmVzICgnXG4nIG9yICdcclxuJykKKyAgICAgICAgc2VsZi5jaGVja19pbnB1dCgKKyAgICAgICAgICAgICJwcmludChyZXByKGlucHV0KCkpKSIsCisgICAgICAgICAgICBiIidhYmMnIikKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtZF9saW5lX3NjcmlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CmluZGV4IGJjODdhMjIuLjkyMWM1ZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5CkBAIC0xLDM4ICsxLDE3IEBACi0jIFRlc3RzIGNvbW1hbmQgbGluZSBleGVjdXRpb24gb2Ygc2NyaXB0cworIyB0ZXN0cyBjb21tYW5kIGxpbmUgZXhlY3V0aW9uIG9mIHNjcmlwdHMKIAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCi1pbXBvcnQgc3lzCi1pbXBvcnQgdGVzdC5zdXBwb3J0Ci1pbXBvcnQgdGVtcGZpbGUKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgcHlfY29tcGlsZQotaW1wb3J0IGNvbnRleHRsaWIKLWltcG9ydCBzaHV0aWwKLWltcG9ydCB6aXBmaWxlCiAKLXZlcmJvc2UgPSB0ZXN0LnN1cHBvcnQudmVyYm9zZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgKAorICAgIG1ha2VfcGtnLCBtYWtlX3NjcmlwdCwgbWFrZV96aXBfcGtnLCBtYWtlX3ppcF9zY3JpcHQsCisgICAgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlLCB0ZW1wX2RpcikKIAotIyBYWFggbmNvZ2hsYW46IFNob3VsZCB3ZSBjb25zaWRlciBtb3ZpbmcgdGhlc2UgdG8gc3VwcG9ydD8KLWZyb20gdGVzdC50ZXN0X2NtZF9saW5lIGltcG9ydCBfc3Bhd25fcHl0aG9uLCBfa2lsbF9weXRob24KLQotZGVmIF9ydW5fcHl0aG9uKCphcmdzKToKLSAgICBpZiBfX2RlYnVnX186Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCphcmdzKQotICAgIGVsc2U6Ci0gICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKCctTycsICphcmdzKQotICAgIHN0ZG91dF9kYXRhID0gX2tpbGxfcHl0aG9uKHApCi0gICAgcmV0dXJuIHAud2FpdCgpLCBzdGRvdXRfZGF0YS5kZWNvZGUoKQotCi1AY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgotZGVmIHRlbXBfZGlyKCk6Ci0gICAgZGlybmFtZSA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgIGRpcm5hbWUgPSBvcy5wYXRoLnJlYWxwYXRoKGRpcm5hbWUpCi0gICAgdHJ5OgotICAgICAgICB5aWVsZCBkaXJuYW1lCi0gICAgZmluYWxseToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShkaXJuYW1lKQordmVyYm9zZSA9IHN1cHBvcnQudmVyYm9zZQogCiB0ZXN0X3NvdXJjZSA9ICIiIlwKICMgU2NyaXB0IG1heSBiZSBydW4gd2l0aCBvcHRpbWlzYXRpb24gZW5hYmxlZCwgc28gZG9uJ3QgcmVseSBvbiBhc3NlcnQKQEAgLTUxLDczICszMCwyNiBAQAogYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50JywgJ0xvd2VyIGxldmVsIHJlZmVyZW5jZSddKQogIyBDaGVjayBwb3B1bGF0aW9uIG9mIG1hZ2ljIHZhcmlhYmxlcwogYXNzZXJ0RXF1YWwoX19uYW1lX18sICdfX21haW5fXycpCi1wcmludCgnX19maWxlX189PSVyJyAlIF9fZmlsZV9fKQorcHJpbnQoJ19fZmlsZV9fPT0lYScgJSBfX2ZpbGVfXykKK2Fzc2VydEVxdWFsKF9fY2FjaGVkX18sIE5vbmUpCiBwcmludCgnX19wYWNrYWdlX189PSVyJyAlIF9fcGFja2FnZV9fKQogIyBDaGVjayB0aGUgc3lzIG1vZHVsZQogaW1wb3J0IHN5cwogYXNzZXJ0SWRlbnRpY2FsKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fKQotcHJpbnQoJ3N5cy5hcmd2WzBdPT0lcicgJSBzeXMuYXJndlswXSkKK3ByaW50KCdzeXMuYXJndlswXT09JWEnICUgc3lzLmFyZ3ZbMF0pCitwcmludCgnc3lzLnBhdGhbMF09PSVhJyAlIHN5cy5wYXRoWzBdKQorIyBDaGVjayB0aGUgd29ya2luZyBkaXJlY3RvcnkKK2ltcG9ydCBvcworcHJpbnQoJ2N3ZD09JWEnICUgb3MuZ2V0Y3dkKCkpCiAiIiIKIAogZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPXRlc3Rfc291cmNlKToKLSAgICBzY3JpcHRfZmlsZW5hbWUgPSBzY3JpcHRfYmFzZW5hbWUrb3MucGF0aC5leHRzZXArJ3B5JwotICAgIHNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsIHNjcmlwdF9maWxlbmFtZSkKLSAgICAjIFRoZSBzY3JpcHQgc2hvdWxkIGJlIGVuY29kZWQgdG8gVVRGLTgsIHRoZSBkZWZhdWx0IHN0cmluZyBlbmNvZGluZwotICAgIHNjcmlwdF9maWxlID0gb3BlbihzY3JpcHRfbmFtZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKQotICAgIHNjcmlwdF9maWxlLndyaXRlKHNvdXJjZSkKLSAgICBzY3JpcHRfZmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHNjcmlwdF9uYW1lCi0KLWRlZiBfY29tcGlsZV90ZXN0X3NjcmlwdChzY3JpcHRfbmFtZSk6Ci0gICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCi0gICAgaWYgX19kZWJ1Z19fOgotICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnYycKLSAgICBlbHNlOgotICAgICAgICBjb21waWxlZF9uYW1lID0gc2NyaXB0X25hbWUgKyAnbycKLSAgICByZXR1cm4gY29tcGlsZWRfbmFtZQotCi1kZWYgX21ha2VfdGVzdF96aXAoemlwX2RpciwgemlwX2Jhc2VuYW1lLCBzY3JpcHRfbmFtZSwgbmFtZV9pbl96aXA9Tm9uZSk6Ci0gICAgemlwX2ZpbGVuYW1lID0gemlwX2Jhc2VuYW1lK29zLnBhdGguZXh0c2VwKyJ6aXAiCi0gICAgemlwX25hbWUgPSBvcy5wYXRoLmpvaW4oemlwX2RpciwgemlwX2ZpbGVuYW1lKQotICAgIHppcF9maWxlID0gemlwZmlsZS5aaXBGaWxlKHppcF9uYW1lLCAndycpCi0gICAgaWYgbmFtZV9pbl96aXAgaXMgTm9uZToKLSAgICAgICAgbmFtZV9pbl96aXAgPSBvcy5wYXRoLmJhc2VuYW1lKHNjcmlwdF9uYW1lKQotICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBuYW1lX2luX3ppcCkKLSAgICB6aXBfZmlsZS5jbG9zZSgpCi0gICAgI2lmIHZlcmJvc2U6Ci0gICAgIyAgICB6aXBfZmlsZSA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ3InKQotICAgICMgICAgcHJpbnQoIkNvbnRlbnRzIG9mICVyOiIgJSB6aXBfbmFtZSkKLSAgICAjICAgIHppcF9maWxlLnByaW50ZGlyKCkKLSAgICAjICAgIHppcF9maWxlLmNsb3NlKCkKLSAgICByZXR1cm4gemlwX25hbWUsIG9zLnBhdGguam9pbih6aXBfbmFtZSwgbmFtZV9pbl96aXApCi0KLWRlZiBfbWFrZV90ZXN0X3BrZyhwa2dfZGlyKToKLSAgICBvcy5ta2Rpcihwa2dfZGlyKQotICAgIF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX2luaXRfXycsICcnKQorICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKIAogZGVmIF9tYWtlX3Rlc3RfemlwX3BrZyh6aXBfZGlyLCB6aXBfYmFzZW5hbWUsIHBrZ19uYW1lLCBzY3JpcHRfYmFzZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT10ZXN0X3NvdXJjZSwgZGVwdGg9MSk6Ci0gICAgaW5pdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoemlwX2RpciwgJ19faW5pdF9fJywgJycpCi0gICAgaW5pdF9iYXNlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoaW5pdF9uYW1lKQotICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoemlwX2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCi0gICAgcGtnX25hbWVzID0gW29zLnNlcC5qb2luKFtwa2dfbmFtZV0qaSkgZm9yIGkgaW4gcmFuZ2UoMSwgZGVwdGgrMSldCi0gICAgc2NyaXB0X25hbWVfaW5femlwID0gb3MucGF0aC5qb2luKHBrZ19uYW1lc1stMV0sIG9zLnBhdGguYmFzZW5hbWUoc2NyaXB0X25hbWUpKQotICAgIHppcF9maWxlbmFtZSA9IHppcF9iYXNlbmFtZStvcy5leHRzZXArJ3ppcCcKLSAgICB6aXBfbmFtZSA9IG9zLnBhdGguam9pbih6aXBfZGlyLCB6aXBfZmlsZW5hbWUpCi0gICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICd3JykKLSAgICBmb3IgbmFtZSBpbiBwa2dfbmFtZXM6Ci0gICAgICAgIGluaXRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4obmFtZSwgaW5pdF9iYXNlbmFtZSkKLSAgICAgICAgemlwX2ZpbGUud3JpdGUoaW5pdF9uYW1lLCBpbml0X25hbWVfaW5femlwKQotICAgIHppcF9maWxlLndyaXRlKHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZV9pbl96aXApCi0gICAgemlwX2ZpbGUuY2xvc2UoKQotICAgIG9zLnVubGluayhpbml0X25hbWUpCi0gICAgb3MudW5saW5rKHNjcmlwdF9uYW1lKQotICAgICNpZiB2ZXJib3NlOgotICAgICMgICAgemlwX2ZpbGUgPSB6aXBmaWxlLlppcEZpbGUoemlwX25hbWUsICdyJykKLSAgICAjICAgIHByaW50KCdDb250ZW50cyBvZiAlcjonICUgemlwX25hbWUpCi0gICAgIyAgICB6aXBfZmlsZS5wcmludGRpcigpCi0gICAgIyAgICB6aXBfZmlsZS5jbG9zZSgpCi0gICAgcmV0dXJuIHppcF9uYW1lLCBvcy5wYXRoLmpvaW4oemlwX25hbWUsIHNjcmlwdF9uYW1lX2luX3ppcCkKKyAgICByZXR1cm4gbWFrZV96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgZGVwdGgpCiAKICMgVGhlcmUncyBubyBlYXN5IHdheSB0byBwYXNzIHRoZSBzY3JpcHQgZGlyZWN0b3J5IGluIHRvIGdldAogIyAtbSB0byB3b3JrIChhdm9pZGluZyB0aGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiBtYWtpbmcKQEAgLTEzNSwxMzMgKzY3LDE1NCBAQAogICAgIGVsc2U6CiAgICAgICAgIHBhdGggPSByZXByKHBhdGgpCiAgICAgc291cmNlID0gbGF1bmNoX3NvdXJjZSAlIChwYXRoLCBtb2R1bGVfbmFtZSkKLSAgICByZXR1cm4gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpCisgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQogCiBjbGFzcyBDbWRMaW5lVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIF9jaGVja19zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsIGV4cGVjdGVkX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJndjAsIGV4cGVjdGVkX3BhY2thZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKmNtZF9saW5lX3N3aXRjaGVzKToKLSAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCi0gICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IF9ydW5fcHl0aG9uKCpydW5fYXJncykKLSAgICAgICAgaWYgdmVyYm9zZToKKyAgICBkZWYgX2NoZWNrX291dHB1dChzZWxmLCBzY3JpcHRfbmFtZSwgZXhpdF9jb2RlLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9maWxlLCBleHBlY3RlZF9hcmd2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGF0aDAsIGV4cGVjdGVkX3BhY2thZ2UpOgorICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgIHByaW50KCJPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjoiICUgc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBwcmludChkYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRfY29kZSwgMCkKLSAgICAgICAgcHJpbnRlZF9maWxlID0gJ19fZmlsZV9fPT0lcicgJSBleHBlY3RlZF9maWxlCi0gICAgICAgIHByaW50ZWRfYXJndjAgPSAnc3lzLmFyZ3ZbMF09PSVyJyAlIGV4cGVjdGVkX2FyZ3YwCisgICAgICAgIHByaW50ZWRfZmlsZSA9ICdfX2ZpbGVfXz09JWEnICUgZXhwZWN0ZWRfZmlsZQogICAgICAgICBwcmludGVkX3BhY2thZ2UgPSAnX19wYWNrYWdlX189PSVyJyAlIGV4cGVjdGVkX3BhY2thZ2UKLSAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgcHJpbnRlZF9hcmd2MCA9ICdzeXMuYXJndlswXT09JWEnICUgZXhwZWN0ZWRfYXJndjAKKyAgICAgICAgcHJpbnRlZF9wYXRoMCA9ICdzeXMucGF0aFswXT09JWEnICUgZXhwZWN0ZWRfcGF0aDAKKyAgICAgICAgcHJpbnRlZF9jd2QgPSAnY3dkPT0lYScgJSBvcy5nZXRjd2QoKQorICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgIHByaW50KCdFeHBlY3RlZCBvdXRwdXQ6JykKICAgICAgICAgICAgIHByaW50KHByaW50ZWRfZmlsZSkKICAgICAgICAgICAgIHByaW50KHByaW50ZWRfcGFja2FnZSkKICAgICAgICAgICAgIHByaW50KHByaW50ZWRfYXJndjApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcmludGVkX2ZpbGUgaW4gZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByaW50ZWRfcGFja2FnZSBpbiBkYXRhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocHJpbnRlZF9hcmd2MCBpbiBkYXRhKQorICAgICAgICAgICAgcHJpbnQocHJpbnRlZF9jd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHJpbnRlZF9maWxlLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwcmludGVkX3BhY2thZ2UuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfYXJndjAuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfcGF0aDAuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKHByaW50ZWRfY3dkLmVuY29kZSgndXRmLTgnKSwgZGF0YSkKKworICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYXRoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wYWNrYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbWRfbGluZV9zd2l0Y2hlcyk6CisgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CisgICAgICAgICAgICBjbWRfbGluZV9zd2l0Y2hlcyArPSAoJy0nICsgJ08nICogc3lzLmZsYWdzLm9wdGltaXplLCkKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzKQorICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQgKyBlcnIsIGV4cGVjdGVkX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGF0aDAsIGV4cGVjdGVkX3BhY2thZ2UpCiAKICAgICBkZWYgX2NoZWNrX2ltcG9ydF9lcnJvcihzZWxmLCBzY3JpcHRfbmFtZSwgZXhwZWN0ZWRfbXNnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjbWRfbGluZV9zd2l0Y2hlcyk6CiAgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKQotICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBfcnVuX3B5dGhvbigqcnVuX2FyZ3MpCi0gICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqcnVuX2FyZ3MpCisgICAgICAgIGlmIHZlcmJvc2UgPiAxOgogICAgICAgICAgICAgcHJpbnQoJ091dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOicgJSBzY3JpcHRfbmFtZSkKLSAgICAgICAgICAgIHByaW50KGRhdGEpCisgICAgICAgICAgICBwcmludChlcnIpCiAgICAgICAgICAgICBwcmludCgnRXhwZWN0ZWQgb3V0cHV0OiAlcicgJSBleHBlY3RlZF9tc2cpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZF9tc2cgaW4gZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZF9tc2cuZW5jb2RlKCd1dGYtOCcpLCBlcnIpCiAKICAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoY29tcGlsZWRfbmFtZSwgY29tcGlsZWRfbmFtZSwgY29tcGlsZWRfbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHB5Y19maWxlID0gc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWMoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQocHljX2ZpbGUsIHB5Y19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5Y19maWxlLCBzY3JpcHRfZGlyLCBOb25lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJykKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfbmFtZSwgc2NyaXB0X2RpciwgJycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X25hbWUsIHNjcmlwdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCiAKICAgICBkZWYgdGVzdF9kaXJlY3RvcnlfY29tcGlsZWQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCiAgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoc2NyaXB0X2RpciwgY29tcGlsZWRfbmFtZSwgc2NyaXB0X2RpciwgJycpCisgICAgICAgICAgICBweWNfZmlsZSA9IHN1cHBvcnQubWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsIHB5Y19maWxlLCBzY3JpcHRfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsICcnKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKLSAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXy5weScgaW4gJXIiICUgc2NyaXB0X2RpcgorICAgICAgICAgICAgbXNnID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc2NyaXB0X2RpcgogICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHNjcmlwdF9kaXIsIG1zZykKIAogICAgIGRlZiB0ZXN0X3ppcGZpbGUoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nKQotICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXAoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsIHJ1bl9uYW1lLCB6aXBfbmFtZSwgJycpCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsIHJ1bl9uYW1lLCB6aXBfbmFtZSwgemlwX25hbWUsICcnKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdfX21haW5fXycpCi0gICAgICAgICAgICBjb21waWxlZF9uYW1lID0gX2NvbXBpbGVfdGVzdF9zY3JpcHQoc2NyaXB0X25hbWUpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQotICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCBydW5fbmFtZSwgemlwX25hbWUsICcnKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIGNvbXBpbGVkX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsIHJ1bl9uYW1lLCB6aXBfbmFtZSwgemlwX25hbWUsICcnKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdub3RfbWFpbicpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKLSAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXy5weScgaW4gJXIiICUgemlwX25hbWUKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJjYW4ndCBmaW5kICdfX21haW5fXycgbW9kdWxlIGluICVyIiAlIHppcF9uYW1lCiAgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3IoemlwX25hbWUsIG1zZykKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKLSAgICAgICAgICAgIF9tYWtlX3Rlc3RfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnc2NyaXB0JykKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnNjcmlwdCcpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUsIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgc2NyaXB0X25hbWUsIHNjcmlwdF9uYW1lLCBzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2VfaW5femlwZmlsZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcpCiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgcnVuX25hbWUsIHJ1bl9uYW1lLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsIHppcF9uYW1lLCAndGVzdF9wa2cnKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2luX3N1YnBhY2thZ2VfaW5femlwZmlsZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcF9wa2coc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgJ3Rlc3RfcGtnJywgJ3NjcmlwdCcsIGRlcHRoPTIpCiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZy50ZXN0X3BrZy5zY3JpcHQnLCB6aXBfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgcnVuX25hbWUsIHJ1bl9uYW1lLCAndGVzdF9wa2cudGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBydW5fbmFtZSwgcnVuX25hbWUsIHppcF9uYW1lLCAndGVzdF9wa2cudGVzdF9wa2cnKQogCiAgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CiAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCi0gICAgICAgICAgICBfbWFrZV90ZXN0X3BrZyhwa2dfZGlyKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJykKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICd0ZXN0X3BrZycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsIHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCiAKICAgICBkZWYgdGVzdF9wYWNrYWdlX2NvbXBpbGVkKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKLSAgICAgICAgICAgIF9tYWtlX3Rlc3RfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnX19tYWluX18nKQotICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IF9jb21waWxlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHljX2ZpbGUgPSBzdXBwb3J0Lm1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSwgY29tcGlsZWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lLCBweWNfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweWNfZmlsZSwgc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2VfZXJyb3Ioc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQotICAgICAgICAgICAgX21ha2VfdGVzdF9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCiAgICAgICAgICAgICBtc2cgPSAoIid0ZXN0X3BrZycgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIgogICAgICAgICAgICAgICAgICAgICJiZSBkaXJlY3RseSBleGVjdXRlZCIpCiAgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCkBAIC0yNzAsMTkgKzIyMyw2MCBAQAogICAgIGRlZiB0ZXN0X3BhY2thZ2VfcmVjdXJzaW9uKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKLSAgICAgICAgICAgIF9tYWtlX3Rlc3RfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyKQogICAgICAgICAgICAgbWFpbl9kaXIgPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgJ19fbWFpbl9fJykKLSAgICAgICAgICAgIF9tYWtlX3Rlc3RfcGtnKG1haW5fZGlyKQorICAgICAgICAgICAgbWFrZV9wa2cobWFpbl9kaXIpCiAgICAgICAgICAgICBtc2cgPSAoIkNhbm5vdCB1c2UgcGFja2FnZSBhcyBfX21haW5fXyBtb2R1bGU7ICIKICAgICAgICAgICAgICAgICAgICAiJ3Rlc3RfcGtnJyBpcyBhIHBhY2thZ2UgYW5kIGNhbm5vdCAiCiAgICAgICAgICAgICAgICAgICAgImJlIGRpcmVjdGx5IGV4ZWN1dGVkIikKICAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX2ltcG9ydF9lcnJvcihsYXVuY2hfbmFtZSwgbXNnKQogCisgICAgZGVmIHRlc3RfaXNzdWU4MjAyKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBwYWNrYWdlIF9faW5pdF9fIG1vZHVsZXMgc2VlICItbSIgaW4gc3lzLmFyZ3YwIHdoaWxlCisgICAgICAgICMgc2VhcmNoaW5nIGZvciB0aGUgbW9kdWxlIHRvIGV4ZWN1dGUKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QocGF0aD1zY3JpcHRfZGlyKToKKyAgICAgICAgICAgICAgICBwa2dfZGlyID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsICd0ZXN0X3BrZycpCisgICAgICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpciwgImltcG9ydCBzeXM7IHByaW50KCdpbml0X2FyZ3YwPT0lcicgJSBzeXMuYXJndlswXSkiKQorICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ3NjcmlwdCcpCisgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGVzdF9wa2cuc2NyaXB0JykKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoZGF0YSkKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJpbml0X2FyZ3YwPT0lciIgJSAnLW0nCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZC5lbmNvZGUoJ3V0Zi04JyksIG91dCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJycsICd0ZXN0X3BrZycpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTgyMDJfZGFzaF9jX2ZpbGVfaWdub3JlZChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgYSAiLWMiIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CisgICAgICAgICMgZG9lcyBub3QgYWx0ZXIgdGhlIHZhbHVlIG9mIHN5cy5wYXRoWzBdCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHBhdGg9c2NyaXB0X2Rpcik6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKCItYyIsICJ3IikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiZGF0YSIpCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScpCisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICJzeXMucGF0aFswXT09JXIiICUgJycKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZC5lbmNvZGUoJ3V0Zi04JyksIG91dCkKKworICAgIGRlZiB0ZXN0X2lzc3VlODIwMl9kYXNoX21fZmlsZV9pZ25vcmVkKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhICItbSIgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKKyAgICAgICAgIyBkb2VzIG5vdCBhbHRlciB0aGUgdmFsdWUgb2Ygc3lzLnBhdGhbMF0KKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdvdGhlcicpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QocGF0aD1zY3JpcHRfZGlyKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1tIiwgInciKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKKyAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBzY3JpcHRfbmFtZSwgJycsICcnKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKLSAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ21kTGluZVRlc3QpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlLnB5CmluZGV4IGM4ZmEyYTEuLmUxYzdhNzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGUucHkKQEAgLTEwMiw2ICsxMDIsMTEgQEAKIAogIiIiCiAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBfdGVzdGNhcGkKKworCiBkZWYgY29uc3RzKHQpOgogICAgICIiIllpZWxkIGEgZG9jdGVzdC1zYWZlIHNlcXVlbmNlIG9mIG9iamVjdCByZXBycy4iIiIKICAgICBmb3IgZWx0IGluIHQ6CkBAIC0xMTgsMTEgKzEyMyw0NyBAQAogICAgICAgICBwcmludCgiJXM6ICVzIiAlIChhdHRyLCBnZXRhdHRyKGNvLCAiY29fIiArIGF0dHIpKSkKICAgICBwcmludCgiY29uc3RzOiIsIHR1cGxlKGNvbnN0cyhjby5jb19jb25zdHMpKSkKIAorCitjbGFzcyBDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9uZXdlbXB0eShzZWxmKToKKyAgICAgICAgY28gPSBfdGVzdGNhcGkuY29kZV9uZXdlbXB0eSgiZmlsZW5hbWUiLCAiZnVuY25hbWUiLCAxNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19maWxlbmFtZSwgImZpbGVuYW1lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjby5jb19uYW1lLCAiZnVuY25hbWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvLmNvX2ZpcnN0bGluZW5vLCAxNSkKKworCitjbGFzcyBDb2RlV2Vha1JlZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgY29kZSBvYmplY3QgaW4gYSBjbGVhbiBlbnZpcm9ubWVudCBzbyB0aGF0IHdlIGtub3cgd2UgaGF2ZQorICAgICAgICAjIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdCBsZWZ0LgorICAgICAgICBuYW1lc3BhY2UgPSB7fQorICAgICAgICBleGVjKCJkZWYgZigpOiBwYXNzIiwgZ2xvYmFscygpLCBuYW1lc3BhY2UpCisgICAgICAgIGYgPSBuYW1lc3BhY2VbImYiXQorICAgICAgICBkZWwgbmFtZXNwYWNlCisKKyAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQorICAgICAgICBkZWYgY2FsbGJhY2soY29kZSk6CisgICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKworICAgICAgICAjIGYgaXMgbm93IHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgZnVuY3Rpb24sIGFuZCB0aHJvdWdoIGl0LCB0aGUgY29kZQorICAgICAgICAjIG9iamVjdC4gIFdoaWxlIHdlIGhvbGQgaXQsIGNoZWNrIHRoYXQgd2UgY2FuIGNyZWF0ZSBhIHdlYWtyZWYgYW5kCisgICAgICAgICMgZGVyZWYgaXQuICBUaGVuIGRlbGV0ZSBpdCwgYW5kIGNoZWNrIHRoYXQgdGhlIGNhbGxiYWNrIGdldHMgY2FsbGVkIGFuZAorICAgICAgICAjIHRoZSByZWZlcmVuY2UgZGllcy4KKyAgICAgICAgY29kZXJlZiA9IHdlYWtyZWYucmVmKGYuX19jb2RlX18sIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChjb2RlcmVmKCkpKQorICAgICAgICBkZWwgZgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJvb2woY29kZXJlZigpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorCisKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX2RvY3Rlc3QKKyAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX2RvY3Rlc3QsIHJ1bl91bml0dGVzdAogICAgIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9jb2RlCiAgICAgcnVuX2RvY3Rlc3QodGVzdF9jb2RlLCB2ZXJib3NlKQorICAgIHJ1bl91bml0dGVzdChDb2RlVGVzdCwgQ29kZVdlYWtSZWZUZXN0KQogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19jbi5weQppbmRleCA3N2JhYzEzLi5hMmQ5NzE4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2NuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfY24ucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGVzdF9jb2RlY2VuY29kaW5nc19jbi5weQogIyAgIENvZGVjIGVuY29kaW5nIHRlc3RzIGZvciBQUkMgZW5jb2RpbmdzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19oay5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKaW5kZXggYjFkZWI3MS4uY2NkYzBiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19oay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2hrLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfY29kZWNlbmNvZGluZ3NfaGsucHkKICMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgSG9uZ0tvbmcgZW5jb2RpbmdzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfanAucHkKaW5kZXggZTJjZDdkNy4uZjU2YTM3MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19qcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2pwLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfY29kZWNlbmNvZGluZ3NfanAucHkKICMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgSmFwYW5lc2UgZW5jb2RpbmdzLgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkKaW5kZXggMzRmYWRlOS4uZGU0ZGE3ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc19rci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX2tyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfY29kZWNlbmNvZGluZ3Nfa3IucHkKICMgICBDb2RlYyBlbmNvZGluZyB0ZXN0cyBmb3IgUk9LIGVuY29kaW5ncy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfdHcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5CmluZGV4IDZiODQwZDMuLjEyZDNjOWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNlbmNvZGluZ3NfdHcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY2VuY29kaW5nc190dy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0ZXN0X2NvZGVjZW5jb2RpbmdzX3R3LnB5CiAjICAgQ29kZWMgZW5jb2RpbmcgdGVzdHMgZm9yIFJPQyBlbmNvZGluZ3MuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CmluZGV4IDM0YTkxMGQuLjA2MzkxOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfY29kZWNtYXBzX2NuLnB5CiAjICAgQ29kZWMgbWFwcGluZyB0ZXN0cyBmb3IgUFJDIGVuY29kaW5ncwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weQppbmRleCBkZGIxMjA4Li5iYmUxZjJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19oay5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0ZXN0X2NvZGVjbWFwc19oay5weQogIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIEhvbmdLb25nIGVuY29kaW5ncwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfanAucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQppbmRleCA3NWRiMDBjLi42NTJiZDgxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0ZXN0X2NvZGVjbWFwc19qcC5weQogIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIEphcGFuZXNlIGVuY29kaW5ncwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQppbmRleCAwZGE5ZDFjLi5kOTA5YzhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIwogIyB0ZXN0X2NvZGVjbWFwc19rci5weQogIyAgIENvZGVjIG1hcHBpbmcgdGVzdHMgZm9yIFJPSyBlbmNvZGluZ3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKaW5kZXggZTZkZjNhNy4uNmRiNTA5MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICMKICMgdGVzdF9jb2RlY21hcHNfdHcucHkKICMgICBDb2RlYyBtYXBwaW5nIHRlc3RzIGZvciBST0MgZW5jb2RpbmdzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CmluZGV4IDkzY2RmOTEuLmQ1NjBkN2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNzLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBkID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihlbmNvZGluZykoKQogICAgICAgICAgICAgcGFydDEgPSBkLmRlY29kZShzWzppXSkKICAgICAgICAgICAgIHN0YXRlID0gZC5nZXRzdGF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVsxXSwgaW50KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgaW50KQogICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb25kaXRpb24gc3RhdGVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgogICAgICAgICAgICAgIyBJbmNyZW1lbnRhbERlY29kZXIuZ2V0c3RhdGUoKSBob2xkcwogICAgICAgICAgICAgaWYgbm90IHN0YXRlWzFdOgpAQCAtNzIsNyArNzIsNiBAQAogICAgICAgICAjIGNoZWNrIHRoYXQgdGhlcmUncyBub3RoaW5nIGxlZnQgaW4gdGhlIGJ1ZmZlcnMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJlYWQoKSwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5ieXRlYnVmZmVyLCBiIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5jaGFyYnVmZmVyLCAiIikKIAogICAgICAgICAjIGRvIHRoZSBjaGVjayBhZ2FpbiwgdGhpcyB0aW1lIHVzaW5nIGEgaW5jcmVtZW50YWwgZGVjb2RlcgogICAgICAgICBkID0gY29kZWNzLmdldGluY3JlbWVudGFsZGVjb2RlcihzZWxmLmVuY29kaW5nKSgpCkBAIC01NDUsNiArNTQ0LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl8xNl9sZV9kZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXHhmZiIsICJzdHJpY3QiLCBUcnVlKQogCisgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJcVTAwMDEwMjAzIi5lbmNvZGUoc2VsZi5lbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAwXHhkOFx4MDNceGRlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDBceGQ4XHgwM1x4ZGUnLmRlY29kZShzZWxmLmVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXFUwMDAxMDIwMyIpCisKIGNsYXNzIFVURjE2QkVUZXN0KFJlYWRUZXN0KToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtYmUiCiAKQEAgLTU2Nyw2ICs1NzIsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzE2X2JlX2RlY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJceGZmIiwgInN0cmljdCIsIFRydWUpCiAKKyAgICBkZWYgdGVzdF9ub25ibXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlxVMDAwMTAyMDMiLmVuY29kZShzZWxmLmVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDhceDAwXHhkZVx4MDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInXHhkOFx4MDBceGRlXHgwMycuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJcVTAwMDEwMjAzIikKKwogY2xhc3MgVVRGOFRlc3QoUmVhZFRlc3QpOgogICAgIGVuY29kaW5nID0gInV0Zi04IgogCkBAIC02NTMsMTggKzY2NCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5yZWFkYnVmZmVyX2VuY29kZSwgNDIpCiAKLWNsYXNzIENoYXJCdWZmZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3N0cmluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlY3MuY2hhcmJ1ZmZlcl9lbmNvZGUoYiJzcGFtIiksIChiInNwYW0iLCA0KSkKLQotICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZShiIiIpLCAoYiIiLCAwKSkKLQotICAgIGRlZiB0ZXN0X2JhZF9hcmdzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MuY2hhcmJ1ZmZlcl9lbmNvZGUsIDQyKQotCiBjbGFzcyBVVEY4U2lnVGVzdChSZWFkVGVzdCk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgtc2lnIgogCkBAIC0xMjc2LDYgKzEyNzUsNyBAQAogICAgICJjcDQyNCIsCiAgICAgImNwNDM3IiwKICAgICAiY3A1MDAiLAorICAgICJjcDcyMCIsCiAgICAgImNwNzM3IiwKICAgICAiY3A3NzUiLAogICAgICJjcDg1MCIsCkBAIC0xMjgzLDYgKzEyODMsNyBAQAogICAgICJjcDg1NSIsCiAgICAgImNwODU2IiwKICAgICAiY3A4NTciLAorICAgICJjcDg1OCIsCiAgICAgImNwODYwIiwKICAgICAiY3A4NjEiLAogICAgICJjcDg2MiIsCkBAIC0xMzcxLDExICsxMzcyLDYgQEAKICAgICAiaWRuYSIsCiBdCiAKLSMgVGhlIGZvbGxvd2luZyBlbmNvZGluZ3Mgb25seSBzdXBwb3J0ICJzdHJpY3QiIG1vZGUKLW9ubHlfc3RyaWN0X21vZGUgPSBbCi0gICAgImlkbmEiLAotXQotCiBjbGFzcyBCYXNpY1VuaWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBNaXhJbkNoZWNrU3RhdGVIYW5kbGluZyk6CiAgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgogICAgICAgICBzID0gImFiYzEyMyIgIyBhbGwgY29kZWNzIHNob3VsZCBiZSBhYmxlIHRvIGVuY29kZSB0aGVzZQpAQCAtMTQ1MCw3ICsxNDQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiIuam9pbihjb2RlY3MuaXRlcmRlY29kZShjb2RlY3MuaXRlcmVuY29kZSgiIiwgZW5jb2RpbmcpLCBlbmNvZGluZykpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAiIikKIAotICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBvbmx5X3N0cmljdF9tb2RlOgorICAgICAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiAoImlkbmEiLCAibWJjcyIpOgogICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGluY3JlbWVudGFsIGRlY29kZXIvZW5jb2RlciB3aXRoIGVycm9ycyBhcmd1bWVudAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVyID0gY29kZWNzLmdldGluY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykoImlnbm9yZSIpCkBAIC0xNjc1LDYgKzE2NzEsNTQgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhICogMikKIAogCitieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzID0gWworICAgICJiYXNlNjRfY29kZWMiLAorICAgICJ1dV9jb2RlYyIsCisgICAgInF1b3ByaV9jb2RlYyIsCisgICAgImhleF9jb2RlYyIsCitdCit0cnk6CisgICAgaW1wb3J0IHpsaWIKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitlbHNlOgorICAgIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3MuYXBwZW5kKCJ6bGliX2NvZGVjIikKK3RyeToKKyAgICBpbXBvcnQgYnoyCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiYnoyX2NvZGVjIikKKworY2xhc3MgVHJhbnNmb3JtQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKKyAgICAgICAgYmlucHV0ID0gYnl0ZXMocmFuZ2UoMjU2KSkKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6CisgICAgICAgICAgICAjIGdlbmVyaWMgY29kZWNzIGludGVyZmFjZQorICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCisgICAgICAgICAgICAoaSwgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCisKKyAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgorICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKKyAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCisgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gWyd1dV9jb2RlYycsICd6bGliX2NvZGVjJ106CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCisgICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIFVURjMyVGVzdCwKQEAgLTE2ODgsNyArMTczMiw2IEBACiAgICAgICAgIFVURjdUZXN0LAogICAgICAgICBVVEYxNkV4VGVzdCwKICAgICAgICAgUmVhZEJ1ZmZlclRlc3QsCi0gICAgICAgIENoYXJCdWZmZXJUZXN0LAogICAgICAgICBSZWNvZGluZ1Rlc3QsCiAgICAgICAgIFB1bnljb2RlVGVzdCwKICAgICAgICAgVW5pY29kZUludGVybmFsVGVzdCwKQEAgLTE3MDMsNiArMTc0Niw3IEBACiAgICAgICAgIFR5cGVzVGVzdCwKICAgICAgICAgU3Vycm9nYXRlRXNjYXBlVGVzdCwKICAgICAgICAgQm9tVGVzdCwKKyAgICAgICAgVHJhbnNmb3JtQ29kZWNUZXN0LAogICAgICkKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVvcC5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZW9wLnB5CmluZGV4IGZmYmNkMzQuLmQwOTYyOTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZW9wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZW9wLnB5CkBAIC0yOTUsMTAgKzI5NSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY29tcGlsZV9jb21tYW5kKCJhID0gMVxuIiwgImFiYyIpLmNvX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUoImEgPSAxXG4iLCAiZGVmIiwgJ3NpbmdsZScpLmNvX2ZpbGVuYW1lKQogCi0gICAgZGVmIHRlc3Rfbm9fdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICBjb2RlID0gY29tcGlsZV9jb21tYW5kKCInXHJmb29cciciLCBzeW1ib2w9J2V2YWwnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdccmZvb1xyJykKLQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KENvZGVvcFRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQppbmRleCA5ZDM2OGM1Li5mOWRiMGI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGluZy5weQpAQCAtMSw2ICsxLDYgQEAKIAogaW1wb3J0IHRlc3Quc3VwcG9ydCwgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHVubGluaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rLCB1bmxvYWQKIGltcG9ydCBvcywgc3lzCiAKIGNsYXNzIENvZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTcsOSArMTcsOCBAQAogCiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCiAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCi0gICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgorICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQogCiAgICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6CkBAIC0zMCw5ICsyOSw4IEBACiAgICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKICAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCiAgICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKLSAgICAgICAgaWYgVEVTVEZOIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW1RFU1RGTl0KLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsICIuIikKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKICAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgogICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQogICAgICAgICB0cnk6CkBAIC00NSwyMSArNDMsMjAgQEAKICAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKyIucHkiKQotICAgICAgICAgICAgdW5saW5rKFRFU1RGTisiLnB5YyIpCi0gICAgICAgICAgICBzeXMucGF0aC5wb3AoMCkKKyAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSkKKyAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICJjIikKKyAgICAgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KIAogICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgogICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQogICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKSBhcyBjOgogICAgICAgICAgICAgY29tcGlsZShpbnB1dCwgIjxzdHJpbmc+IiwgImV4ZWMiKQotICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCi0gICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGUpLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgcmFpc2UiKQorICAgICAgICBleHBlY3RlZCA9ICInYXNjaWknIGNvZGVjIGNhbid0IGRlY29kZSBieXRlIDB4ZTIgaW4gcG9zaXRpb24gMTY6ICIgXAorICAgICAgICAgICAgICAgICAgICJvcmRpbmFsIG5vdCBpbiByYW5nZSgxMjgpIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5leGNlcHRpb24uYXJnc1swXS5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RpbmdUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKaW5kZXggM2Q2YWQwOS4uOWYwMzZlNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CkBAIC0zLDEzICszLDE0IEBACiBpbXBvcnQgdW5pdHRlc3QsIGRvY3Rlc3QsIG9wZXJhdG9yCiBpbXBvcnQgaW5zcGVjdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBDb3VudGVyLCBPcmRlcmVkRGljdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QsIF9jb3VudF9lbGVtZW50cwogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiBpbXBvcnQgcGlja2xlLCBjb3B5CiBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlLCBzaHVmZmxlCi1pbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBrZXl3b3JkCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IF9DaGFpbk1hcAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvcgogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2l6ZWQsIENvbnRhaW5lciwgQ2FsbGFibGUKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNldCwgTXV0YWJsZVNldApAQCAtMTcsNiArMTgsOTcgQEAKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IFNlcXVlbmNlLCBNdXRhYmxlU2VxdWVuY2UKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IEJ5dGVTdHJpbmcKIAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIF9DaGFpbk1hcCAoaGVscGVyIGNsYXNzIGZvciBjb25maWdwYXJzZXIpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBUZXN0Q2hhaW5NYXAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgorICAgICAgICBjID0gX0NoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIGQgPSBjLm5ld19jaGlsZCgpCisgICAgICAgIGRbJ2InXSA9IDIwCisgICAgICAgIGRbJ2MnXSA9IDMwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXBzLCBbeydiJzoyMCwgJ2MnOjMwfSwgeydhJzoxLCAnYic6Mn1dKSAgIyBjaGVjayBpbnRlcm5hbCBzdGF0ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgZGljdChhPTEsIGI9MjAsIGM9MzApLml0ZW1zKCkpICAgICMgY2hlY2sgaXRlbXMvaXRlci9nZXRpdGVtCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBsZW4KKyAgICAgICAgZm9yIGtleSBpbiAnYWJjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIGNvbnRhaW5zCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgZCkKKyAgICAgICAgZm9yIGssIHYgaW4gZGljdChhPTEsIGI9MjAsIGM9MzAsIHo9MTAwKS5pdGVtcygpOiAgICAgICAgICAgICAjIGNoZWNrIGdldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChrLCAxMDApLCB2KQorCisgICAgICAgIGRlbCBkWydiJ10gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bm1hc2sgYSB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgW3snYyc6MzB9LCB7J2EnOjEsICdiJzoyfV0pICAgICAgICAgICMgY2hlY2sgaW50ZXJuYWwgc3RhdGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLml0ZW1zKCksIGRpY3QoYT0xLCBiPTIsIGM9MzApLml0ZW1zKCkpICAgICAjIGNoZWNrIGl0ZW1zL2l0ZXIvZ2V0aXRlbQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgbGVuCisgICAgICAgIGZvciBrZXkgaW4gJ2FiYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjb250YWlucworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGQpCisgICAgICAgIGZvciBrLCB2IGluIGRpY3QoYT0xLCBiPTIsIGM9MzAsIHo9MTAwKS5pdGVtcygpOiAgICAgICAgICAgICAgIyBjaGVjayBnZXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoaywgMTAwKSwgdikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKGQpLCBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHJlcHIKKyAgICAgICAgICAgIHR5cGUoZCkuX19uYW1lX18gKyAiKHsnYyc6IDMwfSwgeydhJzogMSwgJ2InOiAyfSkiLAorICAgICAgICAgICAgdHlwZShkKS5fX25hbWVfXyArICIoeydjJzogMzB9LCB7J2InOiAyLCAnYSc6IDF9KSIKKyAgICAgICAgXSkKKworICAgICAgICBmb3IgZSBpbiBkLmNvcHkoKSwgY29weS5jb3B5KGQpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHNoYWxsb3cgY29waWVzCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgZS5tYXBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkLm1hcHNbMF0sIGUubWFwc1swXSkKKyAgICAgICAgICAgIGZvciBtMSwgbTIgaW4gemlwKGQubWFwc1sxOl0sIGUubWFwc1sxOl0pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobTEsIG0yKQorCisgICAgICAgIGZvciBlIGluIFtwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGQpKSwKKyAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkoZCksCisgICAgICAgICAgICAgICAgICBldmFsKHJlcHIoZCkpCisgICAgICAgICAgICAgICAgXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBkZWVwIGNvcGllcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIGUubWFwcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZCwgZSkKKyAgICAgICAgICAgIGZvciBtMSwgbTIgaW4gemlwKGQubWFwcywgZS5tYXBzKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG0xLCBtMiwgZSkKKworICAgICAgICBkID0gZC5uZXdfY2hpbGQoKQorICAgICAgICBkWydiJ10gPSA1CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5tYXBzLCBbeydiJzogNX0sIHsnYyc6MzB9LCB7J2EnOjEsICdiJzoyfV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wYXJlbnRzLm1hcHMsIFt7J2MnOjMwfSwgeydhJzoxLCAnYic6Mn1dKSAgICMgY2hlY2sgcGFyZW50cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2InXSwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmlyc3QgaW4gY2hhaW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBhcmVudHNbJ2InXSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb29rIGJleW9uZCBtYXBzWzBdCisKKyAgICBkZWYgdGVzdF9jb250cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9DaGFpbk1hcCgpLm1hcHMsIFt7fV0pICAgICAgICAgICAgICAgICAgIyBuby1hcmdzIC0tPiBvbmUgbmV3IGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfQ2hhaW5NYXAoezE6Mn0pLm1hcHMsIFt7MToyfV0pICAgICAgICAgICAgICAgICMgMSBhcmcgLS0+IGxpc3QKKworICAgIGRlZiB0ZXN0X21pc3Npbmcoc2VsZik6CisgICAgICAgIGNsYXNzIERlZmF1bHRDaGFpbk1hcChfQ2hhaW5NYXApOgorICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIDk5OQorICAgICAgICBkID0gRGVmYXVsdENoYWluTWFwKGRpY3QoYT0xLCBiPTIpLCBkaWN0KGI9MjAsIGM9MzApKQorICAgICAgICBmb3IgaywgdiBpbiBkaWN0KGE9MSwgYj0yLCBjPTMwLCBkPTk5OSkuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrXSwgdikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBfX2dldGl0ZW1fXyB3L21pc3NpbmcKKyAgICAgICAgZm9yIGssIHYgaW4gZGljdChhPTEsIGI9MiwgYz0zMCwgZD03NykuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoaywgNzcpLCB2KSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBnZXQoKSB3LyBtaXNzaW5nCisgICAgICAgIGZvciBrLCB2IGluIGRpY3QoYT1UcnVlLCBiPVRydWUsIGM9VHJ1ZSwgZD1GYWxzZSkuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoayBpbiBkLCB2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBfX2NvbnRhaW5zX18gdy9taXNzaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wb3AoJ2EnLCAxMDAxKSwgMSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcCgnYScsIDEwMDIpLCAxMDAyKSAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBwb3AoKSB3L21pc3NpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnBvcGl0ZW0oKSwgKCdiJywgMikpICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBwb3BpdGVtKCkgdy9taXNzaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgZC5wb3BpdGVtKCkKKworICAgIGRlZiB0ZXN0X2RpY3RfY29lcmNpb24oc2VsZik6CisgICAgICAgIGQgPSBfQ2hhaW5NYXAoZGljdChhPTEsIGI9MiksIGRpY3QoYj0yMCwgYz0zMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChkLml0ZW1zKCkpLCBkaWN0KGE9MSwgYj0yLCBjPTMwKSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIE5hbWVkIFR1cGxlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogVGVzdE5UID0gbmFtZWR0dXBsZSgnVGVzdE5UJywgJ3ggeSB6JykgICAgIyB0eXBlIHVzZWQgZm9yIHBpY2tsZSB0ZXN0cwogCiBjbGFzcyBUZXN0TmFtZWRUdXBsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yNCw3ICsxMTYsNiBAQAogICAgIGRlZiB0ZXN0X2ZhY3Rvcnkoc2VsZik6CiAgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX25hbWVfXywgJ1BvaW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2RvY19fLCAnUG9pbnQoeCwgeSknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBvaW50Ll9fc2xvdHNfXywgKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19tb2R1bGVfXywgX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUG9pbnQuX19nZXRpdGVtX18sIHR1cGxlLl9fZ2V0aXRlbV9fKQpAQCAtNDQsMTMgKzEzNSwxOSBAQAogICAgICAgICBuYW1lZHR1cGxlKCdfJywgJ2EgYiBjJykgICAgICAgICMgVGVzdCBsZWFkaW5nIHVuZGVyc2NvcmVzIGluIGEgdHlwZW5hbWUKIAogICAgICAgICBudCA9IG5hbWVkdHVwbGUoJ250JywgJ3RoZSBxdWljayBicm93biBmb3gnKSAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB1bmljb2RlIGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidSciIG5vdCBpbiByZXByKG50Ll9maWVsZHMpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ1JyIsIHJlcHIobnQuX2ZpZWxkcykpCiAgICAgICAgIG50ID0gbmFtZWR0dXBsZSgnbnQnLCAoJ3RoZScsICdxdWljaycpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdW5pY29kZSBpbnB1dAotICAgICAgICBzZWxmLmFzc2VydFRydWUoInUnIiBub3QgaW4gcmVwcihudC5fZmllbGRzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigidSciLCByZXByKG50Ll9maWVsZHMpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgUG9pbnQuX21ha2UsIFsxMV0pICAgICAgICAgICAgICAgICAgICAgIyBjYXRjaCB0b28gZmV3IGFyZ3MKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBQb2ludC5fbWFrZSwgWzExLCAyMiwgMzNdKSAgICAgICAgICAgICAjIGNhdGNoIHRvbyBtYW55IGFyZ3MKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2ZhY3RvcnlfZG9jX2F0dHIoc2VsZik6CisgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQb2ludC5fX2RvY19fLCAnUG9pbnQoeCwgeSknKQorCiAgICAgZGVmIHRlc3RfbmFtZV9maXhlcihzZWxmKToKICAgICAgICAgZm9yIHNwZWMsIHJlbmFtZWQgaW4gWwogICAgICAgICAgICAgWygnZWZnJywgJ2claGknKSwgICgnZWZnJywgJ18xJyldLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZmllbGQgd2l0aCBub24tYWxwaGEgY2hhcgpAQCAtNzUsOCArMTcyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoWFhYPTEsIHk9MiknLCBsb2NhbHMoKSkgICAjIHdyb25nIGtleXdvcmQgYXJndW1lbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAnUG9pbnQoeD0xKScsIGxvY2FscygpKSAgICAgICAgICAjIG1pc3Npbmcga2V5d29yZCBhcmd1bWVudAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocCksICdQb2ludCh4PTExLCB5PTIyKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnX19kaWN0X18nIG5vdCBpbiBkaXIocCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJpZnkgaW5zdGFuY2UgaGFzIG5vIGRpY3QKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdfX3dlYWtyZWZfXycgbm90IGluIGRpcihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX19kaWN0X18nLCBkaXIocCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZXJpZnkgaW5zdGFuY2UgaGFzIG5vIGRpY3QKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignX193ZWFrcmVmX18nLCBkaXIocCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUG9pbnQuX21ha2UoWzExLCAyMl0pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9tYWtlIGNsYXNzbWV0aG9kCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fZmllbGRzLCAoJ3gnLCAneScpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9maWVsZHMgYXR0cmlidXRlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fcmVwbGFjZSh4PTEpLCAoMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9yZXBsYWNlIG1ldGhvZApAQCAtMTAzLDcgKzIwMCw3IEBACiAgICAgICAgIFBvaW50ID0gbmFtZWR0dXBsZSgnUG9pbnQnLCAneCB5JykKICAgICAgICAgcCA9IFBvaW50KDExLCAyMikKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCB0dXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCAoMTEsIDIyKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1hdGNoZXMgYSByZWFsIHR1cGxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHVwbGUocCksICgxMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2VyY2FibGUgdG8gYSByZWFsIHR1cGxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwKSwgWzExLCAyMl0pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjb2VyY2FibGUgdG8gYSBsaXN0CkBAIC0yMTMsNiArMzEwLDIwIEBACiAgICAgICAgICMgdGVzdCBfX2dldG5ld2FyZ3NfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuX19nZXRuZXdhcmdzX18oKSwgdmFsdWVzKQogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHRlbXBsYXRlOgorICAgICAgICAgICAgQSA9IG5hbWVkdHVwbGUoJ0EnLCAneCcsIHZlcmJvc2U9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKEEoMSkpLCAnQSh4PTEpJykKKyAgICAgICAgIyByZXByIHNob3VsZCBzaG93IHRoZSBuYW1lIG9mIHRoZSBzdWJjbGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoQigxKSksICdCKHg9MSknKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQWJzdHJhY3QgQmFzZSBDbGFzc2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCiBjbGFzcyBBQkNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhzZWxmLCBhYmMsICpuYW1lcyk6CkBAIC0yMjksNiArMzQwLDE3IEBACiAgICAgICAgICAgICBDID0gdHlwZSgnQycsIChhYmMsKSwgc3R1YnMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEMsIG5hbWUpCiAKKyAgICBkZWYgdmFsaWRhdGVfaXNpbnN0YW5jZShzZWxmLCBhYmMsIG5hbWUpOgorICAgICAgICBzdHViID0gbGFtYmRhIHMsICphcmdzOiAwCisKKyAgICAgICAgQyA9IHR5cGUoJ0MnLCAob2JqZWN0LCksIHsnX19oYXNoX18nOiBOb25lfSkKKyAgICAgICAgc2V0YXR0cihDLCBuYW1lLCBzdHViKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoQygpLCBhYmMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKEMsIGFiYykpCisKKyAgICAgICAgQyA9IHR5cGUoJ0MnLCAob2JqZWN0LCksIHsnX19oYXNoX18nOiBOb25lfSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKEMoKSwgYWJjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoQywgYWJjKSkKIAogICAgIGRlZiB2YWxpZGF0ZV9jb21wYXJpc29uKHNlbGYsIGluc3RhbmNlKToKICAgICAgICAgb3BzID0gWydsdCcsICdndCcsICdsZScsICdnZScsICduZScsICdvcicsICdhbmQnLCAneG9yJywgJ3N1YiddCkBAIC0yNjcsNyArMzg5LDcgQEAKICAgICAgICAgIyBDaGVjayBzb21lIG5vbi1oYXNoYWJsZXMKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbYnl0ZWFycmF5KCksIGxpc3QoKSwgc2V0KCksIGRpY3QoKV0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoeCwgSGFzaGFibGUpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIEhhc2hhYmxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIEhhc2hhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgIyBDaGVjayBzb21lIGhhc2hhYmxlcwogICAgICAgICBzYW1wbGVzID0gW05vbmUsCkBAIC0yNzcsNyArMzk5LDcgQEAKICAgICAgICAgICAgICAgICAgICBpbnQsIGxpc3QsIG9iamVjdCwgdHlwZSwgYnl0ZXMoKQogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIEhhc2hhYmxlKSwgcmVwcih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBIYXNoYWJsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIEhhc2hhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBIYXNoYWJsZSkKICAgICAgICAgIyBDaGVjayBkaXJlY3Qgc3ViY2xhc3NpbmcKQEAgLTI4NywxMiArNDA5LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChIKCkpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoaW50LCBIKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKEhhc2hhYmxlLCAnX19oYXNoX18nKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoSGFzaGFibGUsICdfX2hhc2hfXycpCiAKICAgICBkZWYgdGVzdF9JdGVyYWJsZShzZWxmKToKICAgICAgICAgIyBDaGVjayBzb21lIG5vbi1pdGVyYWJsZXMKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgNDIsIDMuMTQsIDFqXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZSh4LCBJdGVyYWJsZSksIHJlcHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgSXRlcmFibGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICAjIENoZWNrIHNvbWUgaXRlcmFibGVzCiAgICAgICAgIHNhbXBsZXMgPSBbYnl0ZXMoKSwgc3RyKCksCkBAIC0zMDIsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgSXRlcmFibGUpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEl0ZXJhYmxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICAjIENoZWNrIGRpcmVjdCBzdWJjbGFzc2luZwogICAgICAgICBjbGFzcyBJKEl0ZXJhYmxlKToKQEAgLTMxMSwxMSArNDM0LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChJKCkpLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHN0ciwgSSkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhJdGVyYWJsZSwgJ19faXRlcl9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKEl0ZXJhYmxlLCAnX19pdGVyX18nKQogCiAgICAgZGVmIHRlc3RfSXRlcmF0b3Ioc2VsZik6CiAgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwgYiIiLCAiIiwgKCksIFtdLCB7fSwgc2V0KCldCiAgICAgICAgIGZvciB4IGluIG5vbl9zYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHgsIEl0ZXJhdG9yKSwgcmVwcih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZSh4LCBJdGVyYXRvcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBJdGVyYXRvciksIHJlcHIodHlwZSh4KSkpCiAgICAgICAgIHNhbXBsZXMgPSBbaXRlcihieXRlcygpKSwgaXRlcihzdHIoKSksCiAgICAgICAgICAgICAgICAgICAgaXRlcih0dXBsZSgpKSwgaXRlcihsaXN0KCkpLCBpdGVyKGRpY3QoKSksCkBAIC0zMjYsNyArNDUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgSXRlcmF0b3IpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIEl0ZXJhdG9yKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgSXRlcmF0b3IpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoSXRlcmF0b3IsICdfX25leHRfXycsICdfX2l0ZXJfXycpCiAKQEAgLTMzNSw3ICs0NTksNyBAQAogICAgICAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHlpZWxkIDEKICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShOZXh0T25seSgpLCBJdGVyYXRvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShOZXh0T25seSgpLCBJdGVyYXRvcikKIAogICAgIGRlZiB0ZXN0X1NpemVkKHNlbGYpOgogICAgICAgICBub25fc2FtcGxlcyA9IFtOb25lLCA0MiwgMy4xNCwgMWosCkBAIC0zNDMsMTYgKzQ2NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAoeCBmb3IgeCBpbiBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gbm9uX3NhbXBsZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoeCwgU2l6ZWQpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIFNpemVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHR5cGUoeCksIFNpemVkKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2FtcGxlcyA9IFtieXRlcygpLCBzdHIoKSwKICAgICAgICAgICAgICAgICAgICB0dXBsZSgpLCBsaXN0KCksIHNldCgpLCBmcm96ZW5zZXQoKSwgZGljdCgpLAogICAgICAgICAgICAgICAgICAgIGRpY3QoKS5rZXlzKCksIGRpY3QoKS5pdGVtcygpLCBkaWN0KCkudmFsdWVzKCksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgU2l6ZWQpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIFNpemVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3ModHlwZSh4KSwgU2l6ZWQpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2l6ZWQsICdfX2xlbl9fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKFNpemVkLCAnX19sZW5fXycpCiAKICAgICBkZWYgdGVzdF9Db250YWluZXIoc2VsZik6CiAgICAgICAgIG5vbl9zYW1wbGVzID0gW05vbmUsIDQyLCAzLjE0LCAxaiwKQEAgLTM2MCwxNiArNDg1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZSh4LCBDb250YWluZXIpLCByZXByKHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHgsIENvbnRhaW5lcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzYW1wbGVzID0gW2J5dGVzKCksIHN0cigpLAogICAgICAgICAgICAgICAgICAgIHR1cGxlKCksIGxpc3QoKSwgc2V0KCksIGZyb3plbnNldCgpLCBkaWN0KCksCiAgICAgICAgICAgICAgICAgICAgZGljdCgpLmtleXMoKSwgZGljdCgpLml0ZW1zKCksCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBzYW1wbGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgQ29udGFpbmVyKSwgcmVwcih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDb250YWluZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh0eXBlKHgpLCBDb250YWluZXIpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoQ29udGFpbmVyLCAnX19jb250YWluc19fJykKKyAgICAgICAgc2VsZi52YWxpZGF0ZV9pc2luc3RhbmNlKENvbnRhaW5lciwgJ19fY29udGFpbnNfXycpCiAKICAgICBkZWYgdGVzdF9DYWxsYWJsZShzZWxmKToKICAgICAgICAgbm9uX3NhbXBsZXMgPSBbTm9uZSwgNDIsIDMuMTQsIDFqLApAQCAtMzc4LDcgKzUwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICh4IGZvciB4IGluIFtdKSwKICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICBmb3IgeCBpbiBub25fc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZSh4LCBDYWxsYWJsZSksIHJlcHIoeCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoeCwgQ2FsbGFibGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3ModHlwZSh4KSwgQ2FsbGFibGUpLCByZXByKHR5cGUoeCkpKQogICAgICAgICBzYW1wbGVzID0gW2xhbWJkYTogTm9uZSwKICAgICAgICAgICAgICAgICAgICB0eXBlLCBpbnQsIG9iamVjdCwKQEAgLTM4Niw5ICs1MTIsMTAgQEAKICAgICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZCwgW10uYXBwZW5kLAogICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgZm9yIHggaW4gc2FtcGxlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIENhbGxhYmxlKSwgcmVwcih4KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDYWxsYWJsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHR5cGUoeCksIENhbGxhYmxlKSwgcmVwcih0eXBlKHgpKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKENhbGxhYmxlLCAnX19jYWxsX18nKQorICAgICAgICBzZWxmLnZhbGlkYXRlX2lzaW5zdGFuY2UoQ2FsbGFibGUsICdfX2NhbGxfXycpCiAKICAgICBkZWYgdGVzdF9kaXJlY3Rfc3ViY2xhc3Npbmcoc2VsZik6CiAgICAgICAgIGZvciBCIGluIEhhc2hhYmxlLCBJdGVyYWJsZSwgSXRlcmF0b3IsIFNpemVkLCBDb250YWluZXIsIENhbGxhYmxlOgpAQCAtNDMzLDcgKzU2MCw3IEBACiAKICAgICBkZWYgdGVzdF9TZXQoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW3NldCwgZnJvemVuc2V0XToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNhbXBsZSgpLCBTZXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBTZXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIFNldCkpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhTZXQsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycpCiAgICAgICAgIGNsYXNzIE15U2V0KFNldCk6CkBAIC00NjEsOSArNTg4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2goYSkgPT0gaGFzaChiKSkKIAogICAgIGRlZiB0ZXN0X011dGFibGVTZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNldCgpLCBNdXRhYmxlU2V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNldCgpLCBNdXRhYmxlU2V0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZXQsIE11dGFibGVTZXQpKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoZnJvemVuc2V0KCksIE11dGFibGVTZXQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZnJvemVuc2V0KCksIE11dGFibGVTZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhmcm96ZW5zZXQsIE11dGFibGVTZXQpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoTXV0YWJsZVNldCwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdhZGQnLCAnZGlzY2FyZCcpCkBAIC00NzYsNyArNjAzLDcgQEAKIAogICAgIGRlZiB0ZXN0X2lzc3VlXzQ5MjAoc2VsZik6CiAgICAgICAgICMgTXV0YWJsZVNldC5wb3AoKSBtZXRob2QgZGlkIG5vdCB3b3JrCi0gICAgICAgIGNsYXNzIE15U2V0KGNvbGxlY3Rpb25zLk11dGFibGVTZXQpOgorICAgICAgICBjbGFzcyBNeVNldChNdXRhYmxlU2V0KToKICAgICAgICAgICAgIF9fc2xvdHNfXz1bJ19fcyddCiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZixpdGVtcz1Ob25lKToKICAgICAgICAgICAgICAgICBpZiBpdGVtcyBpcyBOb25lOgpAQCAtNTE4LDExICs2NDUsMTEgQEAKIAogICAgIGRlZiB0ZXN0X01hcHBpbmcoc2VsZik6CiAgICAgICAgIGZvciBzYW1wbGUgaW4gW2RpY3RdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE1hcHBpbmcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBNYXBwaW5nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNYXBwaW5nKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE1hcHBpbmcsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCiAgICAgICAgICAgICAnX19nZXRpdGVtX18nKQotICAgICAgICBjbGFzcyBNeU1hcHBpbmcoY29sbGVjdGlvbnMuTWFwcGluZyk6CisgICAgICAgIGNsYXNzIE15TWFwcGluZyhNYXBwaW5nKToKICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CkBAIC01MzMsNyArNjYwLDcgQEAKIAogICAgIGRlZiB0ZXN0X011dGFibGVNYXBwaW5nKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFtkaWN0XToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlTWFwcGluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVNYXBwaW5nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlTWFwcGluZykpCiAgICAgICAgIHNlbGYudmFsaWRhdGVfYWJzdHJhY3RfbWV0aG9kcyhNdXRhYmxlTWFwcGluZywgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsICdfX2xlbl9fJywKICAgICAgICAgICAgICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycpCkBAIC01NDIsMTUgKzY2OSwxNSBAQAogICAgICAgICAjIFRlc3QgaXNzdWUgOTIxNAogICAgICAgICBteW1hcCA9IFVzZXJEaWN0KCkKICAgICAgICAgbXltYXBbJ3JlZCddID0gNQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShteW1hcC5rZXlzKCksIFNldCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG15bWFwLmtleXMoKSwgS2V5c1ZpZXcpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShteW1hcC5pdGVtcygpLCBTZXQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShteW1hcC5pdGVtcygpLCBJdGVtc1ZpZXcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXltYXAua2V5cygpLCBTZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShteW1hcC5rZXlzKCksIEtleXNWaWV3KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXltYXAuaXRlbXMoKSwgU2V0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXltYXAuaXRlbXMoKSwgSXRlbXNWaWV3KQogCiAgICAgICAgIG15bWFwID0gVXNlckRpY3QoKQogICAgICAgICBteW1hcFsncmVkJ10gPSA1CiAgICAgICAgIHogPSBteW1hcC5rZXlzKCkgfCB7J29yYW5nZSd9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh6KSwgc2V0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoeiwgc2V0KQogICAgICAgICBsaXN0KHopCiAgICAgICAgIG15bWFwWydibHVlJ10gPSA3ICAgICAgICAgICAgICAgIyBTaG91bGRuJ3QgYWZmZWN0ICd6JwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCh6KSwgWydvcmFuZ2UnLCAncmVkJ10pCkBAIC01NTgsMTYgKzY4NSwxNiBAQAogICAgICAgICBteW1hcCA9IFVzZXJEaWN0KCkKICAgICAgICAgbXltYXBbJ3JlZCddID0gNQogICAgICAgICB6ID0gbXltYXAuaXRlbXMoKSB8IHsoJ29yYW5nZScsIDMpfQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoeiksIHNldCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHosIHNldCkKICAgICAgICAgbGlzdCh6KQogICAgICAgICBteW1hcFsnYmx1ZSddID0gNyAgICAgICAgICAgICAgICMgU2hvdWxkbid0IGFmZmVjdCAneicKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoeiksIFsoJ29yYW5nZScsIDMpLCAoJ3JlZCcsIDUpXSkKIAogICAgIGRlZiB0ZXN0X1NlcXVlbmNlKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFt0dXBsZSwgbGlzdCwgYnl0ZXMsIHN0cl06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzYW1wbGUoKSwgU2VxdWVuY2UpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNhbXBsZSgpLCBTZXF1ZW5jZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgU2VxdWVuY2UpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShyYW5nZSgxMCksIFNlcXVlbmNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJhbmdlKDEwKSwgU2VxdWVuY2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHJhbmdlLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHN0ciwgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLnZhbGlkYXRlX2Fic3RyYWN0X21ldGhvZHMoU2VxdWVuY2UsICdfX2NvbnRhaW5zX18nLCAnX19pdGVyX18nLCAnX19sZW5fXycsCkBAIC01NzUsMzMgKzcwMiwzOCBAQAogCiAgICAgZGVmIHRlc3RfQnl0ZVN0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbYnl0ZXMsIGJ5dGVhcnJheV06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzYW1wbGUoKSwgQnl0ZVN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIEJ5dGVTdHJpbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzYW1wbGUsIEJ5dGVTdHJpbmcpKQogICAgICAgICBmb3Igc2FtcGxlIGluIFtzdHIsIGxpc3QsIHR1cGxlXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShzYW1wbGUoKSwgQnl0ZVN0cmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2FtcGxlKCksIEJ5dGVTdHJpbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3Moc2FtcGxlLCBCeXRlU3RyaW5nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKG1lbW9yeXZpZXcoYiIiKSwgQnl0ZVN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShtZW1vcnl2aWV3KGIiIiksIEJ5dGVTdHJpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNzdWJjbGFzcyhtZW1vcnl2aWV3LCBCeXRlU3RyaW5nKSkKIAogICAgIGRlZiB0ZXN0X011dGFibGVTZXF1ZW5jZShzZWxmKToKICAgICAgICAgZm9yIHNhbXBsZSBpbiBbdHVwbGUsIHN0ciwgYnl0ZXNdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKHNhbXBsZSgpLCBNdXRhYmxlU2VxdWVuY2UpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3Moc2FtcGxlLCBNdXRhYmxlU2VxdWVuY2UpKQogICAgICAgICBmb3Igc2FtcGxlIGluIFtsaXN0LCBieXRlYXJyYXldOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2FtcGxlKCksIE11dGFibGVTZXF1ZW5jZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNhbXBsZSwgTXV0YWJsZVNlcXVlbmNlKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc3N1YmNsYXNzKHN0ciwgTXV0YWJsZVNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKE11dGFibGVTZXF1ZW5jZSwgJ19fY29udGFpbnNfXycsICdfX2l0ZXJfXycsCiAgICAgICAgICAgICAnX19sZW5fXycsICdfX2dldGl0ZW1fXycsICdfX3NldGl0ZW1fXycsICdfX2RlbGl0ZW1fXycsICdpbnNlcnQnKQogCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgQ291bnRlcgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogY2xhc3MgVGVzdENvdW50ZXIodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWNzKHNlbGYpOgogICAgICAgICBjID0gQ291bnRlcignYWJjYWJhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKHsnYSc6MyAsICdiJzogMiwgJ2MnOiAxfSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPTMsIGI9MiwgYz0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYywgZGljdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGMsIE1hcHBpbmcpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGMsIE1hcHBpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKENvdW50ZXIsIGRpY3QpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhDb3VudGVyLCBNYXBwaW5nKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDMpCkBAIC02MzQsMTAgKzc2NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIGRpY3QoYT00LCBiPTAsIGQ9LTIsIGU9LTUsIGY9NCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihzb3J0ZWQoYy5lbGVtZW50cygpKSksICdhYWFhZmZmZicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3AoJ2YnKSwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnZicgaW4gYywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2YnLCBjKQogICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgICAgIGVsZW0sIGNudCA9IGMucG9waXRlbSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsZW0gaW4gYywgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGMpCiAgICAgICAgIGMuY2xlYXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMsIHt9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoYyksICdDb3VudGVyKCknKQpAQCAtNzAxLDYgKzgzMyw3IEBACiAgICAgICAgIGMgPSBDb3VudGVyKGE9MTAsIGI9LTIsIGM9MCkKICAgICAgICAgZm9yIGVsZW0gaW4gYzoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIGluIGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGMpCiAKICAgICBkZWYgdGVzdF9tdWx0aXNldF9vcGVyYXRpb25zKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0IGFkZGluZyBhIHplcm8gY291bnRlciB3aWxsIHN0cmlwIHplcm9zIGFuZCBuZWdhdGl2ZXMKQEAgLTc0MSw2ICs4NzQsMzQgQEAKICAgICAgICAgICAgICAgICBzZXRfcmVzdWx0ID0gc2V0b3Aoc2V0KHAuZWxlbWVudHMoKSksIHNldChxLmVsZW1lbnRzKCkpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnRlcl9yZXN1bHQsIGRpY3QuZnJvbWtleXMoc2V0X3Jlc3VsdCwgMSkpCiAKKyAgICBkZWYgdGVzdF9zdWJ0cmFjdChzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoYT0tNSwgYj0wLCBjPTUsIGQ9MTAsIGU9MTUsZz00MCkKKyAgICAgICAgYy5zdWJ0cmFjdChhPTEsIGI9MiwgYz0tMywgZD0xMCwgZT0yMCwgZj0zMCwgaD0tNTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYywgQ291bnRlcihhPS02LCBiPS0yLCBjPTgsIGQ9MCwgZT0tNSwgZj0tMzAsIGc9NDAsIGg9NTApKQorICAgICAgICBjID0gQ291bnRlcihhPS01LCBiPTAsIGM9NSwgZD0xMCwgZT0xNSxnPTQwKQorICAgICAgICBjLnN1YnRyYWN0KENvdW50ZXIoYT0xLCBiPTIsIGM9LTMsIGQ9MTAsIGU9MjAsIGY9MzAsIGg9LTUwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTYsIGI9LTIsIGM9OCwgZD0wLCBlPS01LCBmPS0zMCwgZz00MCwgaD01MCkpCisgICAgICAgIGMgPSBDb3VudGVyKCdhYWFiYmNkJykKKyAgICAgICAgYy5zdWJ0cmFjdCgnYWFhYWJiY2NlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTEsIGI9MCwgYz0tMSwgZD0xLCBlPS0xKSkKKworICAgIGRlZiB0ZXN0X2hlbHBlcl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgIyB0d28gcGF0aHMsIG9uZSBmb3IgcmVhbCBkaWN0cyBhbmQgb25lIGZvciBvdGhlciBtYXBwaW5ncworICAgICAgICBlbGVtcyA9IGxpc3QoJ2FicmFjYWRhYnJhJykKKworICAgICAgICBkID0gZGljdCgpCisgICAgICAgIF9jb3VudF9lbGVtZW50cyhkLCBlbGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7J2EnOiA1LCAncic6IDIsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDF9KQorCisgICAgICAgIG0gPSBPcmRlcmVkRGljdCgpCisgICAgICAgIF9jb3VudF9lbGVtZW50cyhtLCBlbGVtcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLAorICAgICAgICAgICAgIE9yZGVyZWREaWN0KFsoJ2EnLCA1KSwgKCdiJywgMiksICgncicsIDIpLCAoJ2MnLCAxKSwgKCdkJywgMSldKSkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIE9yZGVyZWREaWN0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBjbGFzcyBUZXN0T3JkZXJlZERpY3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC04MDIsNyArOTYzLDcgQEAKICAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCiAKICAgICBkZWYgdGVzdF9hYmMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKE9yZGVyZWREaWN0KCksIE11dGFibGVNYXBwaW5nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKE9yZGVyZWREaWN0KCksIE11dGFibGVNYXBwaW5nKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhPcmRlcmVkRGljdCwgTXV0YWJsZU1hcHBpbmcpKQogCiAgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CkBAIC04MTcsNyArOTc4LDcgQEAKICAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KICAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKICAgICAgICAgZGVsIG9kWydhJ10KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBub3QgaW4gb2QpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBvZCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CiAgICAgICAgICAgICBkZWwgb2RbJ2EnXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJzWzoyXSArIHBhaXJzWzM6XSkKQEAgLTk3NCw2ICsxMTM1LDI1IEBACiAgICAgICAgIG9kWydhJ10gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgWygnYicsIDIpLCAoJ2EnLCAxKV0pCiAKKyAgICBkZWYgdGVzdF9tb3ZlX3RvX2VuZChzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjZGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdhYmNkZScpKQorICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2FiZGVjJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiZGUnKSkKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQorICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QubW92ZV90b19lbmQoJ3gnKQorCisgICAgZGVmIHRlc3Rfc2l6ZW9mKHNlbGYpOgorICAgICAgICAjIFdpbXB5IHRlc3Q6IEp1c3QgdmVyaWZ5IHRoZSByZXBvcnRlZCBzaXplIGlzIGxhcmdlciB0aGFuIGEgcmVndWxhciBkaWN0CisgICAgICAgIGQgPSBkaWN0KGE9MSkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgqKmQpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0c2l6ZW9mKG9kKSwgc3lzLmdldHNpemVvZihkKSkKIAogICAgIGRlZiB0ZXN0X292ZXJyaWRlX3VwZGF0ZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCBzdWJjbGFzc2VzIGNhbiBvdmVycmlkZSB1cGRhdGUoKSB3aXRob3V0IGJyZWFraW5nIF9faW5pdF9fKCkKQEAgLTEwMDEsMTIgKzExODEsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKIAogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIFJ1biB0ZXN0cworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwogaW1wb3J0IGRvY3Rlc3QsIGNvbGxlY3Rpb25zCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBOYW1lZFR1cGxlRG9jcyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKG1vZHVsZT1jb2xsZWN0aW9ucykKICAgICB0ZXN0X2NsYXNzZXMgPSBbVGVzdE5hbWVkVHVwbGUsIE5hbWVkVHVwbGVEb2NzLCBUZXN0T25lVHJpY2tQb255QUJDcywKLSAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwgVGVzdENoYWluTWFwLAogICAgICAgICAgICAgICAgICAgICBUZXN0T3JkZXJlZERpY3QsIEdlbmVyYWxNYXBwaW5nVGVzdHMsIFN1YmNsYXNzTWFwcGluZ1Rlc3RzXQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChjb2xsZWN0aW9ucywgdmVyYm9zZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQppbmRleCA3NDlhNTUxLi41OGVmMjk3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CkBAIC01LDYgKzUsMTkgQEAKIAogY2xhc3MgVGVzdFNwZWNpZmljcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVzdF9ub19lbmRpbmdfbmV3bGluZShzZWxmKToKKyAgICAgICAgY29tcGlsZSgiaGkiLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJoaVxyIiwgIjx0ZXN0PiIsICJleGVjIikKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBjb21waWxlKCIiLCAiPHRlc3Q+IiwgImV4ZWMiKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfbmV3bGluZXMoc2VsZik6CisgICAgICAgIGNvbXBpbGUoIlxyXG4iLCAiPHRlc3Q+IiwgImV4ZWMiKQorICAgICAgICBjb21waWxlKCJcciIsICI8dGVzdD4iLCAiZXhlYyIpCisgICAgICAgIGNvbXBpbGUoImhpXHJcbnN0dWZmXHJcbmRlZiBmKCk6XG4gICAgcGFzc1xyIiwgIjx0ZXN0PiIsICJleGVjIikKKyAgICAgICAgY29tcGlsZSgidGhpc19pc1xycmVhbGx5X29sZF9tYWNccmRlZiBmKCk6XG4gICAgcGFzcyIsICI8dGVzdD4iLCAiZXhlYyIpCisKICAgICBkZWYgdGVzdF9kZWJ1Z19hc3NpZ25tZW50KHNlbGYpOgogICAgICAgICAjIGNhdGNoIGFzc2lnbm1lbnRzIHRvIF9fZGVidWdfXwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgJ19fZGVidWdfXyA9IDEnLCAnPycsICdzaW5nbGUnKQpAQCAtMTc5LDggKzE5Miw4IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIkhvdyBtYW55IGJpdHMgKmRvZXMqIHRoaXMgbWFjaGluZSBoYXZlPz8/IikKICAgICAgICAgIyBWZXJpZnkgdHJlYXRtZW50IG9mIGNvbnN0YW50IGZvbGRpbmcgb24gLShzeXMubWF4c2l6ZSsxKQogICAgICAgICAjIGkuZS4gLTIxNDc0ODM2NDggb24gMzIgYml0IHBsYXRmb3Jtcy4gIFNob3VsZCByZXR1cm4gaW50LCBub3QgbG9uZy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZXZhbCgiJXMiICUgKC1zeXMubWF4c2l6ZSAtIDEpKSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZXZhbCgiJXMiICUgKC1zeXMubWF4c2l6ZSAtIDIpKSwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWwoIiVzIiAlICgtc3lzLm1heHNpemUgLSAxKSksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV2YWwoIiVzIiAlICgtc3lzLm1heHNpemUgLSAyKSksIGludCkKIAogICAgIGlmIHN5cy5tYXhzaXplID09IDkyMjMzNzIwMzY4NTQ3NzU4MDc6CiAgICAgICAgIGRlZiB0ZXN0XzMyXzYzX2JpdF92YWx1ZXMoc2VsZik6CkBAIC0xOTUsNyArMjA4LDcgQEAKIAogICAgICAgICAgICAgZm9yIHZhcmlhYmxlIGluIHNlbGYudGVzdF8zMl82M19iaXRfdmFsdWVzLl9fY29kZV9fLmNvX2NvbnN0czoKICAgICAgICAgICAgICAgICBpZiB2YXJpYWJsZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFyaWFibGUsIGludCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YXJpYWJsZSwgaW50KQogCiAgICAgZGVmIHRlc3Rfc2VxdWVuY2VfdW5wYWNraW5nX2Vycm9yKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSBzZXF1ZW5jZSBwYWNraW5nL3VucGFja2luZyB3aXRoICJvciIuICBTRiBidWcgIzc1NzgxOApAQCAtMjEzLDYgKzIyNiwxMCBAQAogICAgICAgICAgICAgJyhhLCBOb25lKSA9IDAsIDAnLAogICAgICAgICAgICAgJ2ZvciBOb25lIGluIHJhbmdlKDEwKTogcGFzcycsCiAgICAgICAgICAgICAnZGVmIGYoTm9uZSk6IHBhc3MnLAorICAgICAgICAgICAgJ2ltcG9ydCBOb25lJywKKyAgICAgICAgICAgICdpbXBvcnQgeCBhcyBOb25lJywKKyAgICAgICAgICAgICdmcm9tIHggaW1wb3J0IE5vbmUnLAorICAgICAgICAgICAgJ2Zyb20geCBpbXBvcnQgeSBhcyBOb25lJwogICAgICAgICBdCiAgICAgICAgIGZvciBzdG10IGluIHN0bXRzOgogICAgICAgICAgICAgc3RtdCArPSAiXG4iCkBAIC0yNzUsNiArMjkyLDEwIEBACiAgICAgICAgIGYxLCBmMiA9IGYoKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGYxLl9fY29kZV9fKSwgaWQoZjIuX19jb2RlX18pKQogCisgICAgZGVmIHRlc3RfbGFtYmRhX2RvYyhzZWxmKToKKyAgICAgICAgbCA9IGxhbWJkYTogImZvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobC5fX2RvY19fKQorCiAjIyAgICAgZGVmIHRlc3RfdW5pY29kZV9lbmNvZGluZyhzZWxmKToKICMjICAgICAgICAgY29kZSA9ICIjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxucGFzc1xuIgogIyMgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgY29kZSwgInRtcCIsICJleGVjIikKQEAgLTMwMCw1NiArMzIxLDU2IEBACiAgICAgICAgIGRbMV0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMV0sIDIpCiAgICAgICAgIGRlbCBkWzFdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxLCBkKQogICAgICAgICAjIFR1cGxlIG9mIGluZGljZXMKICAgICAgICAgZFsxLCAxXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzEsIDFdLCAxKQogICAgICAgICBkWzEsIDFdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzEsIDFdLCAyKQogICAgICAgICBkZWwgZFsxLCAxXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxLCAxKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoMSwgMSksIGQpCiAgICAgICAgICMgU2ltcGxlIHNsaWNlCiAgICAgICAgIGRbMToyXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6Ml0sIDEpCiAgICAgICAgIGRbMToyXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxOjJdLCAyKQogICAgICAgICBkZWwgZFsxOjJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMSwgMikgaW4gZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2xpY2UoMSwgMiksIGQpCiAgICAgICAgICMgVHVwbGUgb2Ygc2ltcGxlIHNsaWNlcwogICAgICAgICBkWzE6MiwgMToyXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MiwgMToyXSwgMSkKICAgICAgICAgZFsxOjIsIDE6Ml0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyLCAxOjJdLCAyKQogICAgICAgICBkZWwgZFsxOjIsIDE6Ml0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2xpY2UoMSwgMiksIHNsaWNlKDEsIDIpKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiksIHNsaWNlKDEsIDIpKSwgZCkKICAgICAgICAgIyBFeHRlbmRlZCBzbGljZQogICAgICAgICBkWzE6MjozXSA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozXSwgMSkKICAgICAgICAgZFsxOjI6M10gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjNdLCAyKQogICAgICAgICBkZWwgZFsxOjI6M10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbGljZSgxLCAyLCAzKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihzbGljZSgxLCAyLCAzKSwgZCkKICAgICAgICAgIyBUdXBsZSBvZiBleHRlbmRlZCBzbGljZXMKICAgICAgICAgZFsxOjI6MywgMToyOjNdID0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMToyOjMsIDE6MjozXSwgMSkKICAgICAgICAgZFsxOjI6MywgMToyOjNdICs9IDEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzE6MjozLCAxOjI6M10sIDIpCiAgICAgICAgIGRlbCBkWzE6MjozLCAxOjI6M10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoc2xpY2UoMSwgMiwgMyksIHNsaWNlKDEsIDIsIDMpKSBpbiBkLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigoc2xpY2UoMSwgMiwgMyksIHNsaWNlKDEsIDIsIDMpKSwgZCkKICAgICAgICAgIyBFbGxpcHNpcwogICAgICAgICBkWy4uLl0gPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi5dLCAxKQogICAgICAgICBkWy4uLl0gKz0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uXSwgMikKICAgICAgICAgZGVsIGRbLi4uXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVsbGlwc2lzIGluIGQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKEVsbGlwc2lzLCBkKQogICAgICAgICAjIFR1cGxlIG9mIEVsbGlwc2VzCiAgICAgICAgIGRbLi4uLCAuLi5dID0gMQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbLi4uLCAuLi5dLCAxKQogICAgICAgICBkWy4uLiwgLi4uXSArPSAxCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsuLi4sIC4uLl0sIDIpCiAgICAgICAgIGRlbCBkWy4uLiwgLi4uXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChFbGxpcHNpcywgRWxsaXBzaXMpIGluIGQsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKChFbGxpcHNpcywgRWxsaXBzaXMpLCBkKQogCiAgICAgZGVmIHRlc3RfYW5ub3RhdGlvbl9saW1pdChzZWxmKToKICAgICAgICAgIyAxNiBiaXRzIGFyZSBhdmFpbGFibGUgZm9yICMgb2YgYW5ub3RhdGlvbnMsIGJ1dCBvbmx5IDggYml0cyBhcmUKQEAgLTM3MiwxMCArMzkzLDEwIEBACiAgICAgICAgICAgICAgICAgaW1wb3J0IF9fbWFuZ2xlZF9tb2QKICAgICAgICAgICAgICAgICBpbXBvcnQgX19wYWNrYWdlX18ubW9kdWxlCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfQV9fbWFuZ2xlZCIgaW4gQS5mLl9fY29kZV9fLmNvX3Zhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9fbm90X21hbmdsZWRfXyIgaW4gQS5mLl9fY29kZV9fLmNvX3Zhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9BX19tYW5nbGVkX21vZCIgaW4gQS5mLl9fY29kZV9fLmNvX3Zhcm5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9fcGFja2FnZV9fIiBpbiBBLmYuX19jb2RlX18uY29fdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9BX19tYW5nbGVkIiwgQS5mLl9fY29kZV9fLmNvX3Zhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJfX25vdF9tYW5nbGVkX18iLCBBLmYuX19jb2RlX18uY29fdmFybmFtZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9BX19tYW5nbGVkX21vZCIsIEEuZi5fX2NvZGVfXy5jb192YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBBLmYuX19jb2RlX18uY29fdmFybmFtZXMpCiAKICAgICBkZWYgdGVzdF9jb21waWxlX2FzdChzZWxmKToKICAgICAgICAgZm5hbWUgPSBfX2ZpbGVfXwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CmluZGV4IGZlMWRjZjcuLjI1MGQzMWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKQEAgLTUsMjIgKzUsMjkgQEAKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RydWN0Ci1pbXBvcnQgc3lzCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbwogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogY2xhc3MgQ29tcGlsZWFsbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gc2VsZi5zb3VyY2VfcGF0aCArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKQorICAgICAgICBzZWxmLmJjX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlX3BhdGgsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUoJ3ggPSAxMjNcbicpCisgICAgICAgIHNlbGYuc291cmNlX3BhdGgyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnX3Rlc3QyLnB5JykKKyAgICAgICAgc2VsZi5iY19wYXRoMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQorICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQorICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5zb3VyY2VfcGF0aDMgPSBvcy5wYXRoLmpvaW4oc2VsZi5zdWJkaXJlY3RvcnksICdfdGVzdDMucHknKQorICAgICAgICBzaHV0aWwuY29weWZpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5zb3VyY2VfcGF0aDMpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXJlY3RvcnkpCkBAIC01Niw5ICs2Myw1NCBAQAogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KICAgICAgICAgc2VsZi5yZWNyZWF0aW9uX2NoZWNrKGInXDBcMFwwXDAnKQogCisgICAgZGVmIHRlc3RfY29tcGlsZV9maWxlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbXBpbGluZyBhIHNpbmdsZSBmaWxlLCBhbmQgY29tcGxldGUgZGlyZWN0b3J5CisgICAgICAgIGZvciBmbiBpbiAoc2VsZi5iY19wYXRoLCBzZWxmLmJjX3BhdGgyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjb21waWxlYWxsLmNvbXBpbGVfZmlsZShzZWxmLnNvdXJjZV9wYXRoLCBmb3JjZT1GYWxzZSwgcXVpZXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3Qgb3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoMikpCisgICAgICAgIG9zLnVubGluayhzZWxmLmJjX3BhdGgpCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIGZvcmNlPUZhbHNlLCBxdWlldD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoc2VsZi5iY19wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlKHNlbGYuYmNfcGF0aDIpKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5iY19wYXRoKQorICAgICAgICBvcy51bmxpbmsoc2VsZi5iY19wYXRoMikKKworICAgIGRlZiB0ZXN0X25vX3B5Y2FjaGVfaW5fbm9uX3BhY2thZ2Uoc2VsZik6CisgICAgICAgICMgQnVnIDg1NjMgcmVwb3J0ZWQgdGhhdCBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBnb3QgY3JlYXRlZCBieQorICAgICAgICAjIGNvbXBpbGVfZmlsZSgpIGZvciBub24tLnB5IGZpbGVzLgorICAgICAgICBkYXRhX2RpciA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ2RhdGEnKQorICAgICAgICBkYXRhX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXIsICdmaWxlJykKKyAgICAgICAgb3MubWtkaXIoZGF0YV9kaXIpCisgICAgICAgICMgdG91Y2ggZGF0YS9maWxlCisgICAgICAgIHdpdGggb3BlbihkYXRhX2ZpbGUsICd3Jyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9maWxlKGRhdGFfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmpvaW4oZGF0YV9kaXIsICdfX3B5Y2FjaGVfXycpKSkKKworICAgIGRlZiB0ZXN0X29wdGltaXplKHNlbGYpOgorICAgICAgICAjIG1ha2Ugc3VyZSBjb21waWxpbmcgd2l0aCBkaWZmZXJlbnQgb3B0aW1pemF0aW9uIHNldHRpbmdzIHRoYW4gdGhlCisgICAgICAgICMgaW50ZXJwcmV0ZXIncyBjcmVhdGVzIHRoZSBjb3JyZWN0IGZpbGUgbmFtZXMKKyAgICAgICAgb3B0aW1pemUgPSAxIGlmIF9fZGVidWdfXyBlbHNlIDAKKyAgICAgICAgY29tcGlsZWFsbC5jb21waWxlX2RpcihzZWxmLmRpcmVjdG9yeSwgcXVpZXQ9VHJ1ZSwgb3B0aW1pemU9b3B0aW1pemUpCisgICAgICAgIGNhY2hlZCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKKyAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDIpKQorICAgICAgICBjYWNoZWQzID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMykpCisKIAogY2xhc3MgRW5jb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAnSXNzdWUgNjcxNjogY29tcGlsZWFsbCBzaG91bGQgZXNjYXBlIHNvdXJjZSBjb2RlIHdoZW4gcHJpbnRpbmcgZXJyb3JzIHRvIHN0ZG91dC4nCisgICAgIiIiSXNzdWUgNjcxNjogY29tcGlsZWFsbCBzaG91bGQgZXNjYXBlIHNvdXJjZSBjb2RlIHdoZW4gcHJpbnRpbmcgZXJyb3JzCisgICAgdG8gc3Rkb3V0LiIiIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmRpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQpAQCAtNzgsOSArMTMwLDIzMCBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9yaWdfc3Rkb3V0CiAKKworY2xhc3MgQ29tbWFuZExpbmVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBjb21waWxlYWxsJ3MgQ0xJLiIiIgorCisgICAgZGVmIGFzc2VydFJ1bk9LKHNlbGYsICphcmdzLCAqKmVudl92YXJzKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAorICAgICAgICAgICAgICAgICAgICAgICAgJy1TJywgJy1tJywgJ2NvbXBpbGVhbGwnLCAqYXJncywgKiplbnZfdmFycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGVycikKKyAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIGFzc2VydFJ1bk5vdE9LKHNlbGYsICphcmdzLCAqKmVudl92YXJzKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAnLVMnLCAnLW0nLCAnY29tcGlsZWFsbCcsICphcmdzLCAqKmVudl92YXJzKQorICAgICAgICByZXR1cm4gcmMsIG91dCwgZXJyCisKKyAgICBkZWYgYXNzZXJ0Q29tcGlsZWQoc2VsZiwgZm4pOgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZuKSkpCisKKyAgICBkZWYgYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZiwgZm4pOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5fY2xlYW51cCkKKyAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi5wa2dkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdmb28nKQorICAgICAgICBvcy5ta2RpcihzZWxmLnBrZ2RpcikKKyAgICAgICAgc2VsZi5wa2dkaXJfY2FjaGVkaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdfX3B5Y2FjaGVfXycpCisgICAgICAgICMgQ3JlYXRlIHRoZSBfX2luaXRfXy5weSBhbmQgYSBwYWNrYWdlIG1vZHVsZS4KKyAgICAgICAgc2VsZi5pbml0Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnX19pbml0X18nLCAnJykKKyAgICAgICAgc2VsZi5iYXJmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiYXInLCAnJykKKworICAgIGRlZiBfY2xlYW51cChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5ybXRyZWUoc2VsZi5kaXJlY3RvcnkpCisKKyAgICBkZWYgdGVzdF9ub19hcmdzX2NvbXBpbGVzX3BhdGgoc2VsZik6CisgICAgICAgICMgTm90ZSB0aGF0IC1sIGlzIGltcGxpZWQgZm9yIHRoZSBubyBhcmdzIGNhc2UuCisgICAgICAgIGJhemZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLmRpcmVjdG9yeSwgJ2JheicsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKFBZVEhPTlBBVEg9c2VsZi5kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoYmF6Zm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZi5pbml0Zm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoc2VsZi5iYXJmbikKKworICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgY29tcGlsZWFsbCdzIENMSSBpcyB0byBjcmVhdGUKKyAgICAjIFBFUCAzMTQ3IHB5Yy9weW8gZmlsZXMuCisgICAgZm9yIG5hbWUsIGV4dCwgc3dpdGNoIGluIFsKKyAgICAgICAgKCdub3JtYWwnLCAncHljJywgW10pLAorICAgICAgICAoJ29wdGltaXplJywgJ3B5bycsIFsnLU8nXSksCisgICAgICAgICgnZG91Ymxlb3B0aW1pemUnLCAncHlvJywgWyctT08nXSksCisgICAgXToKKyAgICAgICAgZGVmIGYoc2VsZiwgZXh0PWV4dCwgc3dpdGNoPXN3aXRjaCk6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soKihzd2l0Y2ggKworICAgICAgICAgICAgICAgIFsnLW0nLCAnY29tcGlsZWFsbCcsICctcScsIHNlbGYucGtnZGlyXSkpCisgICAgICAgICAgICAjIFZlcmlmeSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGNvbnRlbnRzLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucGtnZGlyX2NhY2hlZGlyKSkKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc29ydGVkKGJhc2UuZm9ybWF0KGltcC5nZXRfdGFnKCksIGV4dCkgZm9yIGJhc2UgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnX19pbml0X18ue30ue30nLCAnYmFyLnt9Lnt9JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvcy5saXN0ZGlyKHNlbGYucGtnZGlyX2NhY2hlZGlyKSksIGV4cGVjdGVkKQorICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIC5weWMgZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFtmbiBmb3IgZm4gaW4gb3MubGlzdGRpcihzZWxmLnBrZ2RpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKGV4dCldKQorICAgICAgICBsb2NhbHMoKVsndGVzdF9wZXAzMTQ3X3BhdGhzXycgKyBuYW1lXSA9IGYKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9wYXRocyhzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB3aXRoIHRoZSBwcm9wZXIgc3dpdGNoLCBjb21waWxlYWxsIGxlYXZlcyBsZWdhY3kKKyAgICAgICAgIyBweWMvcHlvIGZpbGVzLCBhbmQgbm8gX19weWNhY2hlX18gZGlyZWN0b3J5LgorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctYicsICctcScsIHNlbGYucGtnZGlyKQorICAgICAgICAjIFZlcmlmeSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGNvbnRlbnRzLgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYucGtnZGlyX2NhY2hlZGlyKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoWydfX2luaXRfXy5weScsICdfX2luaXRfXy5weWMnLCAnYmFyLnB5JywgJ2Jhci5weWMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQob3MubGlzdGRpcihzZWxmLnBrZ2RpcikpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX3J1bnMoc2VsZik6CisgICAgICAgICMgQnVnIDg1MjcgcmVwb3J0ZWQgdGhhdCBtdWx0aXBsZSBjYWxscyBwcm9kdWNlZCBlbXB0eQorICAgICAgICAjIF9fcHljYWNoZV9fL19fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsIHNlbGYucGtnZGlyKQorICAgICAgICAjIFZlcmlmeSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3J5IGNvbnRlbnRzLgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKQorICAgICAgICBjYWNoZWNhY2hlZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGtnZGlyX2NhY2hlZGlyLCAnX19weWNhY2hlX18nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGNhY2hlY2FjaGVkaXIpKQorICAgICAgICAjIENhbGwgY29tcGlsZWFsbCBhZ2Fpbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCBzZWxmLnBrZ2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucGtnZGlyX2NhY2hlZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhjYWNoZWNhY2hlZGlyKSkKKworICAgIGRlZiB0ZXN0X2ZvcmNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsIHNlbGYucGtnZGlyKQorICAgICAgICBweWNwYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuYmFyZm4pCisgICAgICAgICMgc2V0IGF0aW1lL210aW1lIGJhY2t3YXJkIHRvIGF2b2lkIGZpbGUgdGltZXN0YW1wIHJlc29sdXRpb24gaXNzdWVzCisgICAgICAgIG9zLnV0aW1lKHB5Y3BhdGgsICh0aW1lLnRpbWUoKS02MCwpKjIpCisgICAgICAgIG10aW1lID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQorICAgICAgICAjIHdpdGhvdXQgZm9yY2UsIG5vIHJlY29tcGlsYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCBzZWxmLnBrZ2RpcikKKyAgICAgICAgbXRpbWUyID0gb3Muc3RhdChweWNwYXRoKS5zdF9tdGltZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCBtdGltZTIpCisgICAgICAgICMgbm93IGZvcmNlIGl0LgorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctcScsICctZicsIHNlbGYucGtnZGlyKQorICAgICAgICBtdGltZTIgPSBvcy5zdGF0KHB5Y3BhdGgpLnN0X210aW1lCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobXRpbWUsIG10aW1lMikKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbl9jb250cm9sKHNlbGYpOgorICAgICAgICBzdWJwYWNrYWdlID0gb3MucGF0aC5qb2luKHNlbGYucGtnZGlyLCAnc3BhbScpCisgICAgICAgIG9zLm1rZGlyKHN1YnBhY2thZ2UpCisgICAgICAgIHN1YmluaXRmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc3VicGFja2FnZSwgJ19faW5pdF9fJywgJycpCisgICAgICAgIGhhbWZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzdWJwYWNrYWdlLCAnaGFtJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgJy1sJywgc2VsZi5wa2dkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoc3ViaW5pdGZuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihzdWJwYWNrYWdlLCAnX19weWNhY2hlX18nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc3ViaW5pdGZuKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGhhbWZuKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisgICAgICAgIG5vaXN5ID0gc2VsZi5hc3NlcnRSdW5PSyhzZWxmLnBrZ2RpcikKKyAgICAgICAgcXVpZXQgPSBzZWxmLmFzc2VydFJ1bk9LKCctcScsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGInJywgbm9pc3kpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBxdWlldCkKKworICAgIGRlZiB0ZXN0X3JlZ2V4cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLXgnLCAnYmEuKicsIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydE5vdENvbXBpbGVkKHNlbGYuYmFyZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc2VsZi5pbml0Zm4pCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9kaXJzKHNlbGYpOgorICAgICAgICBwa2dkaXIyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnZm9vMicpCisgICAgICAgIG9zLm1rZGlyKHBrZ2RpcjIpCisgICAgICAgIGluaXQyZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHBrZ2RpcjIsICdfX2luaXRfXycsICcnKQorICAgICAgICBiYXIyZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHBrZ2RpcjIsICdiYXIyJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1xJywgc2VsZi5wa2dkaXIsIHBrZ2RpcjIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc2VsZi5pbml0Zm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc2VsZi5iYXJmbikKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChpbml0MmZuKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGJhcjJmbikKKworICAgIGRlZiB0ZXN0X2RfdGFrZXNfZXhhY3RseV9vbmVfZGlyKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLmFzc2VydFJ1bk5vdE9LKCctZCcsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYictZCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuYXNzZXJ0UnVuTm90T0soJy1kJywgJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYictZCcpCisKKyAgICBkZWYgdGVzdF9kX2NvbXBpbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdjcnVuY2h5ZnJvZycsICdiYWQoc3ludGF4JykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5hc3NlcnRSdW5Ob3RPSygnLXEnLCAnLWQnLCAnZGluc2RhbGUnLCBzZWxmLnBrZ2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGInRmlsZSAiZGluc2RhbGUnKQorCisgICAgZGVmIHRlc3RfZF9ydW50aW1lX2Vycm9yKHNlbGYpOgorICAgICAgICBiYXpmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiYXonLCAncmFpc2UgRXhjZXB0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLWQnLCAnZGluc2RhbGUnLCBzZWxmLnBrZ2RpcikKKyAgICAgICAgZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmluZycsICdpbXBvcnQgYmF6JykKKyAgICAgICAgcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQorICAgICAgICBvcy5yZW5hbWUocHljLCBvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdiYXoucHljJykpCisgICAgICAgIG9zLnJlbW92ZShiYXpmbikKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLCBiJ0ZpbGUgImRpbnNkYWxlJykKKworICAgIGRlZiB0ZXN0X2luY2x1ZGVfYmFkX2ZpbGUoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuYXNzZXJ0UnVuTm90T0soCisgICAgICAgICAgICAnLWknLCBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdub3N1Y2hmaWxlJyksIHNlbGYucGtnZGlyKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgYidycm9yLipub3N1Y2hmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RSZWdleChlcnIsIGInVHJhY2ViYWNrJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGtnZGlyX2NhY2hlZGlyKSkpCisKKyAgICBkZWYgdGVzdF9pbmNsdWRlX2ZpbGVfd2l0aF9hcmcoc2VsZik6CisgICAgICAgIGYxID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YxJywgJycpCisgICAgICAgIGYyID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YyJywgJycpCisgICAgICAgIGYzID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YzJywgJycpCisgICAgICAgIGY0ID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2Y0JywgJycpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdsMScpLCAndycpIGFzIGwxOgorICAgICAgICAgICAgbDEud3JpdGUob3MucGF0aC5qb2luKHNlbGYucGtnZGlyLCAnZjEucHknKStvcy5saW5lc2VwKQorICAgICAgICAgICAgbDEud3JpdGUob3MucGF0aC5qb2luKHNlbGYucGtnZGlyLCAnZjIucHknKStvcy5saW5lc2VwKQorICAgICAgICBzZWxmLmFzc2VydFJ1bk9LKCctaScsIG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ2wxJyksIGY0KQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGYxKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGYyKQorICAgICAgICBzZWxmLmFzc2VydE5vdENvbXBpbGVkKGYzKQorICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGY0KQorCisgICAgZGVmIHRlc3RfaW5jbHVkZV9maWxlX25vX2FyZyhzZWxmKToKKyAgICAgICAgZjEgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnZjEnLCAnJykKKyAgICAgICAgZjIgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnZjInLCAnJykKKyAgICAgICAgZjMgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnZjMnLCAnJykKKyAgICAgICAgZjQgPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnZjQnLCAnJykKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ2wxJyksICd3JykgYXMgbDE6CisgICAgICAgICAgICBsMS53cml0ZShvcy5wYXRoLmpvaW4oc2VsZi5wa2dkaXIsICdmMi5weScpK29zLmxpbmVzZXApCisgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soJy1pJywgb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnbDEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChmMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChmMykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChmNCkKKworICAgIGRlZiB0ZXN0X2luY2x1ZGVfb25fc3RkaW4oc2VsZik6CisgICAgICAgIGYxID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YxJywgJycpCisgICAgICAgIGYyID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YyJywgJycpCisgICAgICAgIGYzID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2YzJywgJycpCisgICAgICAgIGY0ID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2Y0JywgJycpCisgICAgICAgIHAgPSBzY3JpcHRfaGVscGVyLnNwYXduX3B5dGhvbignLW0nLCAnY29tcGlsZWFsbCcsICctaScsICctJykKKyAgICAgICAgcC5zdGRpbi53cml0ZSgoZjMrb3MubGluZXNlcCkuZW5jb2RlKCdhc2NpaScpKQorICAgICAgICBzY3JpcHRfaGVscGVyLmtpbGxfcHl0aG9uKHApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90Q29tcGlsZWQoZjQpCisKKyAgICBkZWYgdGVzdF9jb21waWxlc19hc19tdWNoX2FzX3Bvc3NpYmxlKHNlbGYpOgorICAgICAgICBiaW5nZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmluZycsICdzeW50YXgoZXJyb3InKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLmFzc2VydFJ1bk5vdE9LKCdub3N1Y2hmaWxlJywgc2VsZi5pbml0Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZ2ZuLCBzZWxmLmJhcmZuKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgYidycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RDb21waWxlZChiaW5nZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc2VsZi5pbml0Zm4pCisgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoc2VsZi5iYXJmbikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJnX3Byb2R1Y2VzX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIG91dCA9IHNlbGYuYXNzZXJ0UnVuT0soJ2JhZGZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIiQ2FuJ3QgbGlzdCBiYWRmaWxlbmFtZSIpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KENvbXBpbGVhbGxUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGluZ1Rlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIENvbW1hbmRMaW5lVGVzdHMsCisgICAgICAgIENvbXBpbGVhbGxUZXN0cywKKyAgICAgICAgRW5jb2RpbmdUZXN0LAorICAgICAgICApCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weSBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQppbmRleCA1MTczNDk0Li42YjM0ZGRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CkBAIC0xLDggKzEsOSBAQAotaW1wb3J0IHVuaXR0ZXN0LCBvcworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRvbQogZnJvbSBtYXRoIGltcG9ydCBhdGFuMiwgaXNuYW4sIGNvcHlzaWduCitpbXBvcnQgb3BlcmF0b3IKIAogSU5GID0gZmxvYXQoImluZiIpCiBOQU4gPSBmbG9hdCgibmFuIikKQEAgLTY1LDkgKzY2LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZUFicyh4LnJlYWwsIHkucmVhbCwgZXBzKQogICAgICAgICBzZWxmLmFzc2VydENsb3NlQWJzKHguaW1hZywgeS5pbWFnLCBlcHMpCiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCi0KICAgICBkZWYgY2hlY2tfZGl2KHNlbGYsIHgsIHkpOgogICAgICAgICAiIiJDb21wdXRlIGNvbXBsZXggej14KnksIGFuZCBjaGVjayB0aGF0IHoveD09eSBhbmQgei95PT14LiIiIgogICAgICAgICB6ID0geCAqIHkKQEAgLTExMiwxNiArMTEwLDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleC5fX2Zsb29yZGl2X18sIDMrMGosIDArMGopCiAKICAgICBkZWYgdGVzdF9yaWNoY29tcGFyZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgY29tcGxleC5fX2VxX18sIDErMWosIDE8PDEwMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXguX19sdF9fKDErMWosIE5vbmUpLCBOb3RJbXBsZW1lbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXygxKzFqLCAxPDwxMDAwMCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19sdF9fKDErMWosIE5vbmUpLCBOb3RJbXBsZW1lbnRlZCkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXygxKzFqLCAxKzFqKSwgVHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXygxKzFqLCAyKzJqKSwgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX25lX18oMSsxaiwgMSsxaiksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19uZV9fKDErMWosIDIrMmopLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19sdF9fLCAxKzFqLCAyKzJqKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19sZV9fLCAxKzFqLCAyKzJqKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19ndF9fLCAxKzFqLCAyKzJqKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19nZV9fLCAxKzFqLCAyKzJqKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgZiA9IGkgLyAxMDAuMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXyhmKzBqLCBmKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX25lX18oZiswaiwgZiksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fZXFfXyhjb21wbGV4KGYsIGYpLCBmKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19uZV9fKGNvbXBsZXgoZiwgZiksIGYpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19sdF9fKDErMWosIDIrMmopLCBOb3RJbXBsZW1lbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fbGVfXygxKzFqLCAyKzJqKSwgTm90SW1wbGVtZW50ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29tcGxleC5fX2d0X18oMSsxaiwgMisyaiksIE5vdEltcGxlbWVudGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19nZV9fKDErMWosIDIrMmopLCBOb3RJbXBsZW1lbnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sdCwgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5sZSwgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5nZSwgMSsxaiwgMisyaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5lcSgxKzFqLCAxKzFqKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcGVyYXRvci5lcSgxKzFqLCAyKzJqKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3BlcmF0b3IubmUoMSsxaiwgMSsxaiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKG9wZXJhdG9yLm5lKDErMWosIDIrMmopLCBUcnVlKQorCisgICAgZGVmIHRlc3RfcmljaGNvbXBhcmVfYm91bmRhcmllcyhzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKG4sIGRlbHRhcywgaXNfZXF1YWwsIGltYWcgPSAwLjApOgorICAgICAgICAgICAgZm9yIGRlbHRhIGluIGRlbHRhczoKKyAgICAgICAgICAgICAgICBpID0gbiArIGRlbHRhCisgICAgICAgICAgICAgICAgeiA9IGNvbXBsZXgoaSwgaW1hZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGNvbXBsZXguX19lcV9fKHosIGkpLCBpc19lcXVhbChkZWx0YSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjb21wbGV4Ll9fbmVfXyh6LCBpKSwgbm90IGlzX2VxdWFsKGRlbHRhKSkKKyAgICAgICAgIyBGb3IgSUVFRS03NTQgZG91YmxlcyB0aGUgZm9sbG93aW5nIHNob3VsZCBob2xkOgorICAgICAgICAjICAgIHggaW4gWzIgKiogKDUyICsgaSksIDIgKiogKDUzICsgaSArIDEpXSAtPiB4IG1vZCAyICoqIGkgPT0gMAorICAgICAgICAjIHdoZXJlIHRoZSBpbnRlcnZhbCBpcyByZXByZXNlbnRhYmxlLCBvZiBjb3Vyc2UuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwKToKKyAgICAgICAgICAgIHBvdyA9IDUyICsgaQorICAgICAgICAgICAgbXVsdCA9IDIgKiogaQorICAgICAgICAgICAgY2hlY2soMiAqKiBwb3csIHJhbmdlKDEsIDEwMSksIGxhbWJkYSBkZWx0YTogZGVsdGEgJSBtdWx0ID09IDApCisgICAgICAgICAgICBjaGVjaygyICoqIHBvdywgcmFuZ2UoMSwgMTAxKSwgbGFtYmRhIGRlbHRhOiBGYWxzZSwgZmxvYXQoaSkpCisgICAgICAgIGNoZWNrKDIgKiogNTMsIHJhbmdlKC0xMDAsIDApLCBsYW1iZGEgZGVsdGE6IFRydWUpCiAKICAgICBkZWYgdGVzdF9tb2Qoc2VsZik6CiAgICAgICAgICMgJSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIG9uIGNvbXBsZXggbnVtYmVycwpAQCAtMTkxLDYgKzIyMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChOUygxKzEwaikpLCAxKzEwaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBPUyhOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUyhOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCB7fSkKIAogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjErMTBqIiksIDErMTBqKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMTApLCAxMCswaikKQEAgLTI4NCw3ICszMTQsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMSsyaikiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMSsoMmopIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIigxKzJqKTEyMyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxIio1MDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjFqKzIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMWUxZWoiKQpAQCAtMjk1LDYgKzMyNCwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiMS4xMS4xaiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbXBsZXgsICIxZTEuMWoiKQogCisgICAgICAgICMgY2hlY2sgdGhhdCBjb21wbGV4IGFjY2VwdHMgbG9uZyB1bmljb2RlIHN0cmluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGNvbXBsZXgoIjEiKjUwMCkpLCBjb21wbGV4KQorICAgICAgICAjIGNoZWNrIHdoaXRlc3BhY2UgcHJvY2Vzc2luZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXgoJ1xOe0VNIFNQQUNFfShcTntFTiBTUEFDRX0xKzFqICkgJyksIDErMWopCisKICAgICAgICAgY2xhc3MgRXZpbEV4YyhFeGNlcHRpb24pOgogICAgICAgICAgICAgcGFzcwogCkBAIC0zNDcsMjggKzM4MSw0OCBAQAogICAgICAgICBmb3IgbnVtIGluIG51bXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKChudW0ucmVhbCoqMiArIG51bS5pbWFnKioyKSAgKiogMC41LCBhYnMobnVtKSkKIAotICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigxKzZqKSwgJygxKzZqKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcigxLTZqKSwgJygxLTZqKScpCisgICAgZGVmIHRlc3RfcmVwcl9zdHIoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KHYsIGV4cGVjdGVkLCB0ZXN0X2ZuPXNlbGYuYXNzZXJ0RXF1YWwpOgorICAgICAgICAgICAgdGVzdF9mbihyZXByKHYpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHRlc3RfZm4oc3RyKHYpLCBleHBlY3RlZCkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlcHIoLSgxKzBqKSksICcoLTErLTBqKScpCisgICAgICAgIHRlc3QoMSs2aiwgJygxKzZqKScpCisgICAgICAgIHRlc3QoMS02aiwgJygxLTZqKScpCisKKyAgICAgICAgdGVzdCgtKDErMGopLCAnKC0xKy0waiknLCB0ZXN0X2ZuPXNlbGYuYXNzZXJ0Tm90RXF1YWwpCisKKyAgICAgICAgdGVzdChjb21wbGV4KDEuLCBJTkYpLCAiKDEraW5maikiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoMS4sIC1JTkYpLCAiKDEtaW5maikiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoSU5GLCAxKSwgIihpbmYrMWopIikKKyAgICAgICAgdGVzdChjb21wbGV4KC1JTkYsIElORiksICIoLWluZitpbmZqKSIpCisgICAgICAgIHRlc3QoY29tcGxleChOQU4sIDEpLCAiKG5hbisxaikiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoMSwgTkFOKSwgIigxK25hbmopIikKKyAgICAgICAgdGVzdChjb21wbGV4KE5BTiwgTkFOKSwgIihuYW4rbmFuaikiKQorCisgICAgICAgIHRlc3QoY29tcGxleCgwLCBJTkYpLCAiaW5maiIpCisgICAgICAgIHRlc3QoY29tcGxleCgwLCAtSU5GKSwgIi1pbmZqIikKKyAgICAgICAgdGVzdChjb21wbGV4KDAsIE5BTiksICJuYW5qIikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEtNmosY29tcGxleChyZXByKDEtNmopKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxKzZqLGNvbXBsZXgocmVwcigxKzZqKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTZqLGNvbXBsZXgocmVwcigtNmopKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg2aixjb21wbGV4KHJlcHIoNmopKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgxLiwgSU5GKSksICIoMStpbmZqKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEuLCAtSU5GKSksICIoMS1pbmZqKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KElORiwgMSkpLCAiKGluZisxaikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgtSU5GLCBJTkYpKSwgIigtaW5mK2luZmopIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoTkFOLCAxKSksICIobmFuKzFqKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihjb21wbGV4KDEsIE5BTikpLCAiKDErbmFuaikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleChOQU4sIE5BTikpLCAiKG5hbituYW5qKSIpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV96ZXJvX3JlcHJfc3RyKHNlbGYpOgorICAgICAgICBkZWYgdGVzdCh2LCBleHBlY3RlZCwgdGVzdF9mbj1zZWxmLmFzc2VydEVxdWFsKToKKyAgICAgICAgICAgIHRlc3RfZm4ocmVwcih2KSwgZXhwZWN0ZWQpCisgICAgICAgICAgICB0ZXN0X2ZuKHN0cih2KSwgZXhwZWN0ZWQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgSU5GKSksICJpbmZqIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNvbXBsZXgoMCwgLUlORikpLCAiLWluZmoiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoY29tcGxleCgwLCBOQU4pKSwgIm5hbmoiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoMC4sIDEuKSwgICAiMWoiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoLTAuLCAxLiksICAiKC0wKzFqKSIpCisgICAgICAgIHRlc3QoY29tcGxleCgwLiwgLTEuKSwgICItMWoiKQorICAgICAgICB0ZXN0KGNvbXBsZXgoLTAuLCAtMS4pLCAiKC0wLTFqKSIpCisKKyAgICAgICAgdGVzdChjb21wbGV4KDAuLCAwLiksICAgIjBqIikKKyAgICAgICAgdGVzdChjb21wbGV4KDAuLCAtMC4pLCAgIi0waiIpCisgICAgICAgIHRlc3QoY29tcGxleCgtMC4sIDAuKSwgICIoLTArMGopIikKKyAgICAgICAgdGVzdChjb21wbGV4KC0wLiwgLTAuKSwgIigtMC0waikiKQogCiAgICAgZGVmIHRlc3RfbmVnKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0oMSs2aiksIC0xLTZqKQpAQCAtMzg3LDEwICs0NDEsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgKGZvIGlzIG5vdCBOb25lKSBhbmQgKG5vdCBmby5jbG9zZWQpOgogICAgICAgICAgICAgICAgIGZvLmNsb3NlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZ2V0bmV3YXJncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSsyaikuX19nZXRuZXdhcmdzX18oKSwgKDEuMCwgMi4wKSkKQEAgLTQwMCw0MSArNDUxLDM2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgwLCBJTkYpLl9fZ2V0bmV3YXJnc19fKCksICgwLjAsIElORikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleChJTkYsIDApLl9fZ2V0bmV3YXJnc19fKCksIChJTkYsIDAuMCkpCiAKLSAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgIGRlZiB0ZXN0X3BsdXNfbWludXNfMGooc2VsZik6Ci0gICAgICAgICAgICAjIHRlc3QgdGhhdCAtMGogYW5kIDBqIGxpdGVyYWxzIGFyZSBub3QgaWRlbnRpZmllZAotICAgICAgICAgICAgejEsIHoyID0gMGosIC0wagotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGFuMih6MS5pbWFnLCAtMS4pLCBhdGFuMigwLiwgLTEuKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXRhbjIoejIuaW1hZywgLTEuKSwgYXRhbjIoLTAuLCAtMS4pKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfcGx1c19taW51c18waihzZWxmKToKKyAgICAgICAgIyB0ZXN0IHRoYXQgLTBqIGFuZCAwaiBsaXRlcmFscyBhcmUgbm90IGlkZW50aWZpZWQKKyAgICAgICAgejEsIHoyID0gMGosIC0wagorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0YW4yKHoxLmltYWcsIC0xLiksIGF0YW4yKDAuLCAtMS4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0YW4yKHoyLmltYWcsIC0xLiksIGF0YW4yKC0wLiwgLTEuKSkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X25lZ2F0ZWRfaW1hZ2luYXJ5X2xpdGVyYWwoc2VsZik6CiAgICAgICAgIHowID0gLTBqCiAgICAgICAgIHoxID0gLTdqCiAgICAgICAgIHoyID0gLTFlMTAwMGoKLSAgICAgICAgIyBUaGlzIGJlaGF2aW91ciBpcyBhY3R1YWxseSBpbmNvcnJlY3Q6IHRoZSByZWFsIHBhcnQgb2YgYSBuZWdhdGVkCi0gICAgICAgICMgaW1hZ2luYXJ5IGxpdGVyYWwgc2hvdWxkIGJlIC0wLjAsIG5vdCAwLjAuICBJdCdzIGZpeGVkIGluIFB5dGhvbiAzLjIuCi0gICAgICAgICMgSG93ZXZlciwgdGhlIGJlaGF2aW91ciBpcyBhbHJlYWR5IG91dCBpbiB0aGUgd2lsZCBpbiBQeXRob24gMi54IGFuZAotICAgICAgICAjIFB5dGhvbiA8PSAzLjEuMiwgYW5kIGl0IHdvdWxkIGJlIHRvbyBkaXNydXB0aXZlIHRvIGNoYW5nZSBpdCBpbiBhCi0gICAgICAgICMgYnVnZml4IHJlbGVhc2UsIHNvIHdlIGNhbGwgaXQgYSAnZmVhdHVyZScgb2YgUHl0aG9uIDMuMSwgYW5kIHRlc3QgdG8KLSAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgYmVoYXZpb3VyIHJlbWFpbnMgY29uc2lzdGVudCBhY3Jvc3MgMy4xLnggcmVsZWFzZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHowLnJlYWwsIDAuMCkKKyAgICAgICAgIyBOb3RlOiBJbiB2ZXJzaW9ucyBvZiBQeXRob24gPCAzLjIsIGEgbmVnYXRlZCBpbWFnaW5hcnkgbGl0ZXJhbAorICAgICAgICAjIGFjY2lkZW50YWxseSBlbmRlZCB1cCB3aXRoIHJlYWwgcGFydCAwLjAgaW5zdGVhZCBvZiAtMC4wLCB0aGFua3MgdG8gYQorICAgICAgICAjIG1vZGlmaWNhdGlvbiBkdXJpbmcgQ1NUIC0+IEFTVCB0cmFuc2xhdGlvbiAoc2VlIGlzc3VlICM5MDExKS4gIFRoYXQncworICAgICAgICAjIGZpeGVkIGluIFB5dGhvbiAzLjIuCisgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHowLnJlYWwsIC0wLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHowLmltYWcsIC0wLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RmxvYXRzQXJlSWRlbnRpY2FsKHoxLnJlYWwsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoejEucmVhbCwgLTAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoejEuaW1hZywgLTcuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRGbG9hdHNBcmVJZGVudGljYWwoejIucmVhbCwgMC4wKQorICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCh6Mi5yZWFsLCAtMC4wKQogICAgICAgICBzZWxmLmFzc2VydEZsb2F0c0FyZUlkZW50aWNhbCh6Mi5pbWFnLCAtSU5GKQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX0lFRUVfNzU0CiAgICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiMWU1MDAiKSwgY29tcGxleChJTkYsIDAuMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwaiIpLCBjb21wbGV4KDAuMCwgLUlORikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxleCgiLTFlNTAwKzEuOGUzMDhqIiksIGNvbXBsZXgoLUlORiwgSU5GKSkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X3JlcHJfcm91bmR0cmlwKHNlbGYpOgogICAgICAgICB2YWxzID0gWzAuMCwgMWUtNTAwLCAxZS0zMTUsIDFlLTIwMCwgMC4wMTIzLCAzLjE0MTUsIDFlNTAsIElORiwgTkFOXQogICAgICAgICB2YWxzICs9IFstdiBmb3IgdiBpbiB2YWxzXQpAQCAtNTI5LDggKzU3NSwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxLjVlMjErM2osICdeNDAsLjJmJyksICcgMSw1MDAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMy4wMGogJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS41ZTIxKzMwMDBqLCAnLC4yZicpLCAnMSw1MDAsMDAwLDAwMCwwMDAsMDAwLDAwMCwwMDAuMDArMywwMDAuMDBqJykKIAotICAgICAgICAjIGFsdGVybmF0ZSBpcyBpbnZhbGlkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrMC41aikuX19mb3JtYXRfXywgJyNmJykKKyAgICAgICAgIyBJc3N1ZSA3MDk0OiBBbHRlcm5hdGUgZm9ybWF0dGluZyAoc3BlY2lmaWVkIGJ5ICMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErMWosICcuMGUnKSwgJzFlKzAwKzFlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErMWosICcjLjBlJyksICcxLmUrMDArMS5lKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErMWosICcuMGYnKSwgJzErMWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxKzFqLCAnIy4wZicpLCAnMS4rMS5qJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMS4xKzEuMWosICdnJyksICcxLjErMS4xaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDEuMSsxLjFqLCAnI2cnKSwgJzEuMTAwMDArMS4xMDAwMGonKQorCisgICAgICAgICMgQWx0ZXJuYXRlIGRvZXNuJ3QgbWFrZSBhIGRpZmZlcmVuY2UgZm9yIHRoZXNlLCB0aGV5IGZvcm1hdCB0aGUgc2FtZSB3aXRoIG9yIHdpdGhvdXQgaXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMSsxaiwgJy4xZScpLCAgJzEuMGUrMDArMS4wZSswMGonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgxKzFqLCAnIy4xZScpLCAnMS4wZSswMCsxLjBlKzAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErMWosICcuMWYnKSwgICcxLjArMS4waicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KDErMWosICcjLjFmJyksICcxLjArMS4waicpCisKKyAgICAgICAgIyBNaXNjLiBvdGhlciBhbHRlcm5hdGUgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoKC0xLjUrMC41aiksICcjZicpLCAnLTEuNTAwMDAwKzAuNTAwMDAwaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCgtMS41KzAuNWopLCAnIy4wZicpLCAnLTIuKzAuaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCgtMS41KzAuNWopLCAnI2UnKSwgJy0xLjUwMDAwMGUrMDArNS4wMDAwMDBlLTAxaicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KCgtMS41KzAuNWopLCAnIy4wZScpLCAnLTIuZSswMCs1LmUtMDFqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoKC0xLjUrMC41aiksICcjZycpLCAnLTEuNTAwMDArMC41MDAwMDBqJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoKC0xLjUrMC41aiksICcuMGcnKSwgJy0yKzAuNWonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCgoLTEuNSswLjVqKSwgJyMuMGcnKSwgJy0yLiswLjVqJykKIAogICAgICAgICAjIHplcm8gcGFkZGluZyBpcyBpbnZhbGlkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgxLjUrMC41aikuX19mb3JtYXRfXywgJzAxMGYnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjYyYWY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkKQEAgLTAsMCArMSw2MTMgQEAKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKKworIyBTa2lwIHRlc3RzIGlmIF9tdWx0aXByb2Nlc3Npbmcgd2Fzbid0IGJ1aWx0LgordGVzdC5zdXBwb3J0LmltcG9ydF9tb2R1bGUoJ19tdWx0aXByb2Nlc3NpbmcnKQorIyBTa2lwIHRlc3RzIGlmIHNlbV9vcGVuIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KK3Rlc3Quc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnKQorIyBpbXBvcnQgdGhyZWFkaW5nIGFmdGVyIF9tdWx0aXByb2Nlc3NpbmcgdG8gcmFpc2UgYSBtb3JlIHJldmVsYW50IGVycm9yCisjIG1lc3NhZ2U6ICJObyBtb2R1bGUgbmFtZWQgX211bHRpcHJvY2Vzc2luZyIuIF9tdWx0aXByb2Nlc3NpbmcgaXMgbm90IGNvbXBpbGVkCisjIHdpdGhvdXQgdGhyZWFkIHN1cHBvcnQuCit0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKworaW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGNvbmN1cnJlbnQgaW1wb3J0IGZ1dHVyZXMKK2Zyb20gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlIGltcG9ydCAoCisgICAgUEVORElORywgUlVOTklORywgQ0FOQ0VMTEVELCBDQU5DRUxMRURfQU5EX05PVElGSUVELCBGSU5JU0hFRCwgRnV0dXJlKQoraW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcy5wcm9jZXNzCisKKworZGVmIGNyZWF0ZV9mdXR1cmUoc3RhdGU9UEVORElORywgZXhjZXB0aW9uPU5vbmUsIHJlc3VsdD1Ob25lKToKKyAgICBmID0gRnV0dXJlKCkKKyAgICBmLl9zdGF0ZSA9IHN0YXRlCisgICAgZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisgICAgZi5fcmVzdWx0ID0gcmVzdWx0CisgICAgcmV0dXJuIGYKKworCitQRU5ESU5HX0ZVVFVSRSA9IGNyZWF0ZV9mdXR1cmUoc3RhdGU9UEVORElORykKK1JVTk5JTkdfRlVUVVJFID0gY3JlYXRlX2Z1dHVyZShzdGF0ZT1SVU5OSU5HKQorQ0FOQ0VMTEVEX0ZVVFVSRSA9IGNyZWF0ZV9mdXR1cmUoc3RhdGU9Q0FOQ0VMTEVEKQorQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF9GVVRVUkUgPSBjcmVhdGVfZnV0dXJlKHN0YXRlPUNBTkNFTExFRF9BTkRfTk9USUZJRUQpCitFWENFUFRJT05fRlVUVVJFID0gY3JlYXRlX2Z1dHVyZShzdGF0ZT1GSU5JU0hFRCwgZXhjZXB0aW9uPUlPRXJyb3IoKSkKK1NVQ0NFU1NGVUxfRlVUVVJFID0gY3JlYXRlX2Z1dHVyZShzdGF0ZT1GSU5JU0hFRCwgcmVzdWx0PTQyKQorCisKK2RlZiBtdWwoeCwgeSk6CisgICAgcmV0dXJuIHggKiB5CisKKworZGVmIHNsZWVwX2FuZF9yYWlzZSh0KToKKyAgICB0aW1lLnNsZWVwKHQpCisgICAgcmFpc2UgRXhjZXB0aW9uKCd0aGlzIGlzIGFuIGV4Y2VwdGlvbicpCisKK2RlZiBzbGVlcF9hbmRfcHJpbnQodCwgbXNnKToKKyAgICB0aW1lLnNsZWVwKHQpCisgICAgcHJpbnQobXNnKQorICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisKK2NsYXNzIEV4ZWN1dG9yTWl4aW46CisgICAgd29ya2VyX2NvdW50ID0gNQorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnQxID0gdGltZS50aW1lKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5leGVjdXRvciA9IHNlbGYuZXhlY3V0b3JfdHlwZShtYXhfd29ya2Vycz1zZWxmLndvcmtlcl9jb3VudCkKKyAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3Qoc3RyKGUpKQorICAgICAgICBzZWxmLl9wcmltZV9leGVjdXRvcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc2h1dGRvd24od2FpdD1UcnVlKQorICAgICAgICBkdCA9IHRpbWUudGltZSgpIC0gc2VsZi50MQorICAgICAgICBpZiB0ZXN0LnN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCIlLjJmcyIgJSBkdCwgZW5kPScgJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGR0LCA2MCwgInN5bmNocm9uaXphdGlvbiBpc3N1ZTogdGVzdCBsYXN0ZWQgdG9vIGxvbmciKQorCisgICAgZGVmIF9wcmltZV9leGVjdXRvcihzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgZXhlY3V0b3IgaXMgcmVhZHkgdG8gZG8gd29yayBiZWZvcmUgcnVubmluZyB0aGUKKyAgICAgICAgIyB0ZXN0cy4gVGhpcyBzaG91bGQgcmVkdWNlIHRoZSBwcm9iYWJpbGl0eSBvZiB0aW1lb3V0cyBpbiB0aGUgdGVzdHMuCisgICAgICAgIGZ1dHVyZXMgPSBbc2VsZi5leGVjdXRvci5zdWJtaXQodGltZS5zbGVlcCwgMC4xKQorICAgICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKHNlbGYud29ya2VyX2NvdW50KV0KKworICAgICAgICBmb3IgZiBpbiBmdXR1cmVzOgorICAgICAgICAgICAgZi5yZXN1bHQoKQorCisKK2NsYXNzIFRocmVhZFBvb2xNaXhpbihFeGVjdXRvck1peGluKToKKyAgICBleGVjdXRvcl90eXBlID0gZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IKKworCitjbGFzcyBQcm9jZXNzUG9vbE1peGluKEV4ZWN1dG9yTWl4aW4pOgorICAgIGV4ZWN1dG9yX3R5cGUgPSBmdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IKKworCitjbGFzcyBFeGVjdXRvclNodXRkb3duVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcnVuX2FmdGVyX3NodXRkb3duKHNlbGYpOgorICAgICAgICBzZWxmLmV4ZWN1dG9yLnNodXRkb3duKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG93LCAyLCA1KQorCisgICAgZGVmIHRlc3RfaW50ZXJwcmV0ZXJfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGUgYXRleGl0IGhvb2sgZm9yIHNodXRkb3duIG9mIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCAiIiJpZiAxOgorICAgICAgICAgICAgZnJvbSBjb25jdXJyZW50LmZ1dHVyZXMgaW1wb3J0IHtleGVjdXRvcl90eXBlfQorICAgICAgICAgICAgZnJvbSB0aW1lIGltcG9ydCBzbGVlcAorICAgICAgICAgICAgZnJvbSB0ZXN0LnRlc3RfY29uY3VycmVudF9mdXR1cmVzIGltcG9ydCBzbGVlcF9hbmRfcHJpbnQKKyAgICAgICAgICAgIHQgPSB7ZXhlY3V0b3JfdHlwZX0oNSkKKyAgICAgICAgICAgIHQuc3VibWl0KHNsZWVwX2FuZF9wcmludCwgMS4wLCAiYXBwbGUiKQorICAgICAgICAgICAgIiIiLmZvcm1hdChleGVjdXRvcl90eXBlPXNlbGYuZXhlY3V0b3JfdHlwZS5fX25hbWVfXykpCisgICAgICAgICMgRXJyb3JzIGluIGF0ZXhpdCBob29rcyBkb24ndCBjaGFuZ2UgdGhlIHByb2Nlc3MgZXhpdCBjb2RlLCBjaGVjaworICAgICAgICAjIHN0ZGVyciBtYW51YWxseS4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIiYXBwbGUiKQorCisKK2NsYXNzIFRocmVhZFBvb2xTaHV0ZG93blRlc3QoVGhyZWFkUG9vbE1peGluLCBFeGVjdXRvclNodXRkb3duVGVzdCk6CisgICAgZGVmIF9wcmltZV9leGVjdXRvcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfdGhyZWFkc190ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgMjEsIDIpCisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgNiwgNykKKyAgICAgICAgc2VsZi5leGVjdXRvci5zdWJtaXQobXVsLCAzLCAxNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5leGVjdXRvci5fdGhyZWFkcyksIDMpCisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc2h1dGRvd24oKQorICAgICAgICBmb3IgdCBpbiBzZWxmLmV4ZWN1dG9yLl90aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgd2l0aCBmdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz01KSBhcyBlOgorICAgICAgICAgICAgZXhlY3V0b3IgPSBlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZS5tYXAoYWJzLCByYW5nZSgtNSwgNSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzUsIDQsIDMsIDIsIDEsIDAsIDEsIDIsIDMsIDRdKQorCisgICAgICAgIGZvciB0IGluIGV4ZWN1dG9yLl90aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2RlbF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgZXhlY3V0b3IgPSBmdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcihtYXhfd29ya2Vycz01KQorICAgICAgICBleGVjdXRvci5tYXAoYWJzLCByYW5nZSgtNSwgNSkpCisgICAgICAgIHRocmVhZHMgPSBleGVjdXRvci5fdGhyZWFkcworICAgICAgICBkZWwgZXhlY3V0b3IKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworCitjbGFzcyBQcm9jZXNzUG9vbFNodXRkb3duVGVzdChQcm9jZXNzUG9vbE1peGluLCBFeGVjdXRvclNodXRkb3duVGVzdCk6CisgICAgZGVmIF9wcmltZV9leGVjdXRvcihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcHJvY2Vzc2VzX3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5leGVjdXRvci5zdWJtaXQobXVsLCAyMSwgMikKKyAgICAgICAgc2VsZi5leGVjdXRvci5zdWJtaXQobXVsLCA2LCA3KQorICAgICAgICBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChtdWwsIDMsIDE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmV4ZWN1dG9yLl9wcm9jZXNzZXMpLCA1KQorICAgICAgICBwcm9jZXNzZXMgPSBzZWxmLmV4ZWN1dG9yLl9wcm9jZXNzZXMKKyAgICAgICAgc2VsZi5leGVjdXRvci5zaHV0ZG93bigpCisKKyAgICAgICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgorICAgICAgICAgICAgcC5qb2luKCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgd2l0aCBmdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IobWF4X3dvcmtlcnM9NSkgYXMgZToKKyAgICAgICAgICAgIHByb2Nlc3NlcyA9IGUuX3Byb2Nlc3NlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGUubWFwKGFicywgcmFuZ2UoLTUsIDUpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs1LCA0LCAzLCAyLCAxLCAwLCAxLCAyLCAzLCA0XSkKKworICAgICAgICBmb3IgcCBpbiBwcm9jZXNzZXM6CisgICAgICAgICAgICBwLmpvaW4oKQorCisgICAgZGVmIHRlc3RfZGVsX3NodXRkb3duKHNlbGYpOgorICAgICAgICBleGVjdXRvciA9IGZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcihtYXhfd29ya2Vycz01KQorICAgICAgICBsaXN0KGV4ZWN1dG9yLm1hcChhYnMsIHJhbmdlKC01LCA1KSkpCisgICAgICAgIHF1ZXVlX21hbmFnZW1lbnRfdGhyZWFkID0gZXhlY3V0b3IuX3F1ZXVlX21hbmFnZW1lbnRfdGhyZWFkCisgICAgICAgIHByb2Nlc3NlcyA9IGV4ZWN1dG9yLl9wcm9jZXNzZXMKKyAgICAgICAgZGVsIGV4ZWN1dG9yCisKKyAgICAgICAgcXVldWVfbWFuYWdlbWVudF90aHJlYWQuam9pbigpCisgICAgICAgIGZvciBwIGluIHByb2Nlc3NlczoKKyAgICAgICAgICAgIHAuam9pbigpCisKK2NsYXNzIFdhaXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZmlyc3RfY29tcGxldGVkKHNlbGYpOgorICAgICAgICBmdXR1cmUxID0gc2VsZi5leGVjdXRvci5zdWJtaXQobXVsLCAyMSwgMikKKyAgICAgICAgZnV0dXJlMiA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KHRpbWUuc2xlZXAsIDEuNSkKKworICAgICAgICBkb25lLCBub3RfZG9uZSA9IGZ1dHVyZXMud2FpdCgKKyAgICAgICAgICAgICAgICBbQ0FOQ0VMTEVEX0ZVVFVSRSwgZnV0dXJlMSwgZnV0dXJlMl0sCisgICAgICAgICAgICAgICAgIHJldHVybl93aGVuPWZ1dHVyZXMuRklSU1RfQ09NUExFVEVEKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtmdXR1cmUxXSksIGRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtDQU5DRUxMRURfRlVUVVJFLCBmdXR1cmUyXSksIG5vdF9kb25lKQorCisgICAgZGVmIHRlc3RfZmlyc3RfY29tcGxldGVkX3NvbWVfYWxyZWFkeV9jb21wbGV0ZWQoc2VsZik6CisgICAgICAgIGZ1dHVyZTEgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdCh0aW1lLnNsZWVwLCAxLjUpCisKKyAgICAgICAgZmluaXNoZWQsIHBlbmRpbmcgPSBmdXR1cmVzLndhaXQoCisgICAgICAgICAgICAgICAgIFtDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRSwgU1VDQ0VTU0ZVTF9GVVRVUkUsIGZ1dHVyZTFdLAorICAgICAgICAgICAgICAgICByZXR1cm5fd2hlbj1mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChbQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF9GVVRVUkUsIFNVQ0NFU1NGVUxfRlVUVVJFXSksCisgICAgICAgICAgICAgICAgZmluaXNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtmdXR1cmUxXSksIHBlbmRpbmcpCisKKyAgICBkZWYgdGVzdF9maXJzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGZ1dHVyZTEgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChtdWwsIDIsIDIxKQorICAgICAgICBmdXR1cmUyID0gc2VsZi5leGVjdXRvci5zdWJtaXQoc2xlZXBfYW5kX3JhaXNlLCAxLjUpCisgICAgICAgIGZ1dHVyZTMgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdCh0aW1lLnNsZWVwLCAzKQorCisgICAgICAgIGZpbmlzaGVkLCBwZW5kaW5nID0gZnV0dXJlcy53YWl0KAorICAgICAgICAgICAgICAgIFtmdXR1cmUxLCBmdXR1cmUyLCBmdXR1cmUzXSwKKyAgICAgICAgICAgICAgICByZXR1cm5fd2hlbj1mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbZnV0dXJlMSwgZnV0dXJlMl0pLCBmaW5pc2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoW2Z1dHVyZTNdKSwgcGVuZGluZykKKworICAgIGRlZiB0ZXN0X2ZpcnN0X2V4Y2VwdGlvbl9zb21lX2FscmVhZHlfY29tcGxldGUoc2VsZik6CisgICAgICAgIGZ1dHVyZTEgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChkaXZtb2QsIDIxLCAwKQorICAgICAgICBmdXR1cmUyID0gc2VsZi5leGVjdXRvci5zdWJtaXQodGltZS5zbGVlcCwgMS41KQorCisgICAgICAgIGZpbmlzaGVkLCBwZW5kaW5nID0gZnV0dXJlcy53YWl0KAorICAgICAgICAgICAgICAgIFtTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgQ0FOQ0VMTEVEX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF9GVVRVUkUsCisgICAgICAgICAgICAgICAgIGZ1dHVyZTEsIGZ1dHVyZTJdLAorICAgICAgICAgICAgICAgIHJldHVybl93aGVuPWZ1dHVyZXMuRklSU1RfRVhDRVBUSU9OKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlMV0pLCBmaW5pc2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoW0NBTkNFTExFRF9GVVRVUkUsIGZ1dHVyZTJdKSwgcGVuZGluZykKKworICAgIGRlZiB0ZXN0X2ZpcnN0X2V4Y2VwdGlvbl9vbmVfYWxyZWFkeV9mYWlsZWQoc2VsZik6CisgICAgICAgIGZ1dHVyZTEgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdCh0aW1lLnNsZWVwLCAyKQorCisgICAgICAgIGZpbmlzaGVkLCBwZW5kaW5nID0gZnV0dXJlcy53YWl0KAorICAgICAgICAgICAgICAgICBbRVhDRVBUSU9OX0ZVVFVSRSwgZnV0dXJlMV0sCisgICAgICAgICAgICAgICAgIHJldHVybl93aGVuPWZ1dHVyZXMuRklSU1RfRVhDRVBUSU9OKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtFWENFUFRJT05fRlVUVVJFXSksIGZpbmlzaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChbZnV0dXJlMV0pLCBwZW5kaW5nKQorCisgICAgZGVmIHRlc3RfYWxsX2NvbXBsZXRlZChzZWxmKToKKyAgICAgICAgZnV0dXJlMSA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KGRpdm1vZCwgMiwgMCkKKyAgICAgICAgZnV0dXJlMiA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgMiwgMjEpCisKKyAgICAgICAgZmluaXNoZWQsIHBlbmRpbmcgPSBmdXR1cmVzLndhaXQoCisgICAgICAgICAgICAgICAgW1NVQ0NFU1NGVUxfRlVUVVJFLAorICAgICAgICAgICAgICAgICBDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgZnV0dXJlMSwKKyAgICAgICAgICAgICAgICAgZnV0dXJlMl0sCisgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49ZnV0dXJlcy5BTExfQ09NUExFVEVEKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUyXSksIGZpbmlzaGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldCgpLCBwZW5kaW5nKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgZnV0dXJlMSA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgNiwgNykKKyAgICAgICAgZnV0dXJlMiA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KHRpbWUuc2xlZXAsIDMpCisKKyAgICAgICAgZmluaXNoZWQsIHBlbmRpbmcgPSBmdXR1cmVzLndhaXQoCisgICAgICAgICAgICAgICAgW0NBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLAorICAgICAgICAgICAgICAgICBFWENFUFRJT05fRlVUVVJFLAorICAgICAgICAgICAgICAgICBTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgZnV0dXJlMSwgZnV0dXJlMl0sCisgICAgICAgICAgICAgICAgdGltZW91dD0xLjUsCisgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49ZnV0dXJlcy5BTExfQ09NUExFVEVEKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9GVVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1dHVyZTFdKSwgZmluaXNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtmdXR1cmUyXSksIHBlbmRpbmcpCisKKworY2xhc3MgVGhyZWFkUG9vbFdhaXRUZXN0cyhUaHJlYWRQb29sTWl4aW4sIFdhaXRUZXN0cyk6CisgICAgcGFzcworCisKK2NsYXNzIFByb2Nlc3NQb29sV2FpdFRlc3RzKFByb2Nlc3NQb29sTWl4aW4sIFdhaXRUZXN0cyk6CisgICAgcGFzcworCisKK2NsYXNzIEFzQ29tcGxldGVkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVE9ETyhicmlhbkBzd2VldGFwcC5jb20pOiBTaG91bGQgaGF2ZSBhIHRlc3Qgd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQuCisgICAgZGVmIHRlc3Rfbm9fdGltZW91dChzZWxmKToKKyAgICAgICAgZnV0dXJlMSA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgMiwgMjEpCisgICAgICAgIGZ1dHVyZTIgPSBzZWxmLmV4ZWN1dG9yLnN1Ym1pdChtdWwsIDcsIDYpCisKKyAgICAgICAgY29tcGxldGVkID0gc2V0KGZ1dHVyZXMuYXNfY29tcGxldGVkKAorICAgICAgICAgICAgICAgIFtDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgU1VDQ0VTU0ZVTF9GVVRVUkUsCisgICAgICAgICAgICAgICAgIGZ1dHVyZTEsIGZ1dHVyZTJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoCisgICAgICAgICAgICAgICAgW0NBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLAorICAgICAgICAgICAgICAgICBFWENFUFRJT05fRlVUVVJFLAorICAgICAgICAgICAgICAgICBTVUNDRVNTRlVMX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgZnV0dXJlMSwgZnV0dXJlMl0pLAorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCkKKworICAgIGRlZiB0ZXN0X3plcm9fdGltZW91dChzZWxmKToKKyAgICAgICAgZnV0dXJlMSA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KHRpbWUuc2xlZXAsIDIpCisgICAgICAgIGNvbXBsZXRlZF9mdXR1cmVzID0gc2V0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZ1dHVyZSBpbiBmdXR1cmVzLmFzX2NvbXBsZXRlZCgKKyAgICAgICAgICAgICAgICAgICAgW0NBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLAorICAgICAgICAgICAgICAgICAgICAgRVhDRVBUSU9OX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NGVUxfRlVUVVJFLAorICAgICAgICAgICAgICAgICAgICAgZnV0dXJlMV0sCisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MCk6CisgICAgICAgICAgICAgICAgY29tcGxldGVkX2Z1dHVyZXMuYWRkKGZ1dHVyZSkKKyAgICAgICAgZXhjZXB0IGZ1dHVyZXMuVGltZW91dEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KFtDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ0VQVElPTl9GVVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTRlVMX0ZVVFVSRV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZF9mdXR1cmVzKQorCisKK2NsYXNzIFRocmVhZFBvb2xBc0NvbXBsZXRlZFRlc3RzKFRocmVhZFBvb2xNaXhpbiwgQXNDb21wbGV0ZWRUZXN0cyk6CisgICAgcGFzcworCisKK2NsYXNzIFByb2Nlc3NQb29sQXNDb21wbGV0ZWRUZXN0cyhQcm9jZXNzUG9vbE1peGluLCBBc0NvbXBsZXRlZFRlc3RzKToKKyAgICBwYXNzCisKKworY2xhc3MgRXhlY3V0b3JUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEV4ZWN1dG9yLnNodXRkb3duKCkgYW5kIGNvbnRleHQgbWFuYWdlciB1c2FnZSBpcyB0ZXN0ZWQgYnkKKyAgICAjIEV4ZWN1dG9yU2h1dGRvd25UZXN0LgorICAgIGRlZiB0ZXN0X3N1Ym1pdChzZWxmKToKKyAgICAgICAgZnV0dXJlID0gc2VsZi5leGVjdXRvci5zdWJtaXQocG93LCAyLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI1NiwgZnV0dXJlLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3Rfc3VibWl0X2tleXdvcmQoc2VsZik6CisgICAgICAgIGZ1dHVyZSA9IHNlbGYuZXhlY3V0b3Iuc3VibWl0KG11bCwgMiwgeT04KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDE2LCBmdXR1cmUucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgbGlzdChzZWxmLmV4ZWN1dG9yLm1hcChwb3csIHJhbmdlKDEwKSwgcmFuZ2UoMTApKSksCisgICAgICAgICAgICAgICAgbGlzdChtYXAocG93LCByYW5nZSgxMCksIHJhbmdlKDEwKSkpKQorCisgICAgZGVmIHRlc3RfbWFwX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgaSA9IHNlbGYuZXhlY3V0b3IubWFwKGRpdm1vZCwgWzEsIDEsIDEsIDFdLCBbMiwgMywgMCwgNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5fX25leHRfXygpLCAoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5fX25leHRfXygpLCAoMCwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBpLl9fbmV4dF9fKQorCisgICAgZGVmIHRlc3RfbWFwX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiBzZWxmLmV4ZWN1dG9yLm1hcCh0aW1lLnNsZWVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAsIDAsIDNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xLjUpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKGkpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnZXhwZWN0ZWQgVGltZW91dEVycm9yJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtOb25lLCBOb25lXSwgcmVzdWx0cykKKworCitjbGFzcyBUaHJlYWRQb29sRXhlY3V0b3JUZXN0KFRocmVhZFBvb2xNaXhpbiwgRXhlY3V0b3JUZXN0KToKKyAgICBwYXNzCisKKworY2xhc3MgUHJvY2Vzc1Bvb2xFeGVjdXRvclRlc3QoUHJvY2Vzc1Bvb2xNaXhpbiwgRXhlY3V0b3JUZXN0KToKKyAgICBwYXNzCisKKworY2xhc3MgRnV0dXJlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2RvbmVfY2FsbGJhY2tfd2l0aF9yZXN1bHQoc2VsZik6CisgICAgICAgIGNhbGxiYWNrX3Jlc3VsdCA9IE5vbmUKKyAgICAgICAgZGVmIGZuKGNhbGxiYWNrX2Z1dHVyZSk6CisgICAgICAgICAgICBub25sb2NhbCBjYWxsYmFja19yZXN1bHQKKyAgICAgICAgICAgIGNhbGxiYWNrX3Jlc3VsdCA9IGNhbGxiYWNrX2Z1dHVyZS5yZXN1bHQoKQorCisgICAgICAgIGYgPSBGdXR1cmUoKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGZuKQorICAgICAgICBmLnNldF9yZXN1bHQoNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBjYWxsYmFja19yZXN1bHQpCisKKyAgICBkZWYgdGVzdF9kb25lX2NhbGxiYWNrX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjYWxsYmFja19leGNlcHRpb24gPSBOb25lCisgICAgICAgIGRlZiBmbihjYWxsYmFja19mdXR1cmUpOgorICAgICAgICAgICAgbm9ubG9jYWwgY2FsbGJhY2tfZXhjZXB0aW9uCisgICAgICAgICAgICBjYWxsYmFja19leGNlcHRpb24gPSBjYWxsYmFja19mdXR1cmUuZXhjZXB0aW9uKCkKKworICAgICAgICBmID0gRnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhmbikKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKEV4Y2VwdGlvbigndGVzdCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndGVzdCcsKSwgY2FsbGJhY2tfZXhjZXB0aW9uLmFyZ3MpCisKKyAgICBkZWYgdGVzdF9kb25lX2NhbGxiYWNrX3dpdGhfY2FuY2VsKHNlbGYpOgorICAgICAgICB3YXNfY2FuY2VsbGVkID0gTm9uZQorICAgICAgICBkZWYgZm4oY2FsbGJhY2tfZnV0dXJlKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHdhc19jYW5jZWxsZWQKKyAgICAgICAgICAgIHdhc19jYW5jZWxsZWQgPSBjYWxsYmFja19mdXR1cmUuY2FuY2VsbGVkKCkKKworICAgICAgICBmID0gRnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhmbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YXNfY2FuY2VsbGVkKQorCisgICAgZGVmIHRlc3RfZG9uZV9jYWxsYmFja19yYWlzZXMoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVycjoKKyAgICAgICAgICAgIHJhaXNpbmdfd2FzX2NhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBmbl93YXNfY2FsbGVkID0gRmFsc2UKKworICAgICAgICAgICAgZGVmIHJhaXNpbmdfZm4oY2FsbGJhY2tfZnV0dXJlKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCByYWlzaW5nX3dhc19jYWxsZWQKKyAgICAgICAgICAgICAgICByYWlzaW5nX3dhc19jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdkb2ghJykKKworICAgICAgICAgICAgZGVmIGZuKGNhbGxiYWNrX2Z1dHVyZSk6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgZm5fd2FzX2NhbGxlZAorICAgICAgICAgICAgICAgIGZuX3dhc19jYWxsZWQgPSBUcnVlCisKKyAgICAgICAgICAgIGYgPSBGdXR1cmUoKQorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhyYWlzaW5nX2ZuKQorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhmbikKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJhaXNpbmdfd2FzX2NhbGxlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbl93YXNfY2FsbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRXhjZXB0aW9uOiBkb2ghJywgc3RkZXJyLmdldHZhbHVlKCkpCisKKyAgICBkZWYgdGVzdF9kb25lX2NhbGxiYWNrX2FscmVhZHlfc3VjY2Vzc2Z1bChzZWxmKToKKyAgICAgICAgY2FsbGJhY2tfcmVzdWx0ID0gTm9uZQorICAgICAgICBkZWYgZm4oY2FsbGJhY2tfZnV0dXJlKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhbGxiYWNrX3Jlc3VsdAorICAgICAgICAgICAgY2FsbGJhY2tfcmVzdWx0ID0gY2FsbGJhY2tfZnV0dXJlLnJlc3VsdCgpCisKKyAgICAgICAgZiA9IEZ1dHVyZSgpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg1KQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGZuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDUsIGNhbGxiYWNrX3Jlc3VsdCkKKworICAgIGRlZiB0ZXN0X2RvbmVfY2FsbGJhY2tfYWxyZWFkeV9mYWlsZWQoc2VsZik6CisgICAgICAgIGNhbGxiYWNrX2V4Y2VwdGlvbiA9IE5vbmUKKyAgICAgICAgZGVmIGZuKGNhbGxiYWNrX2Z1dHVyZSk6CisgICAgICAgICAgICBub25sb2NhbCBjYWxsYmFja19leGNlcHRpb24KKyAgICAgICAgICAgIGNhbGxiYWNrX2V4Y2VwdGlvbiA9IGNhbGxiYWNrX2Z1dHVyZS5leGNlcHRpb24oKQorCisgICAgICAgIGYgPSBGdXR1cmUoKQorICAgICAgICBmLnNldF9leGNlcHRpb24oRXhjZXB0aW9uKCd0ZXN0JykpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd0ZXN0JywpLCBjYWxsYmFja19leGNlcHRpb24uYXJncykKKworICAgIGRlZiB0ZXN0X2RvbmVfY2FsbGJhY2tfYWxyZWFkeV9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHdhc19jYW5jZWxsZWQgPSBOb25lCisgICAgICAgIGRlZiBmbihjYWxsYmFja19mdXR1cmUpOgorICAgICAgICAgICAgbm9ubG9jYWwgd2FzX2NhbmNlbGxlZAorICAgICAgICAgICAgd2FzX2NhbmNlbGxlZCA9IGNhbGxiYWNrX2Z1dHVyZS5jYW5jZWxsZWQoKQorCisgICAgICAgIGYgPSBGdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhmbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhc19jYW5jZWxsZWQpCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIoUEVORElOR19GVVRVUkUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8RnV0dXJlIGF0IDB4WzAtOWEtZl0rIHN0YXRlPXBlbmRpbmc+JykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKFJVTk5JTkdfRlVUVVJFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBhdCAweFswLTlhLWZdKyBzdGF0ZT1ydW5uaW5nPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihDQU5DRUxMRURfRlVUVVJFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBhdCAweFswLTlhLWZdKyBzdGF0ZT1jYW5jZWxsZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBhdCAweFswLTlhLWZdKyBzdGF0ZT1jYW5jZWxsZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleCgKKyAgICAgICAgICAgICAgICByZXByKEVYQ0VQVElPTl9GVVRVUkUpLAorICAgICAgICAgICAgICAgICc8RnV0dXJlIGF0IDB4WzAtOWEtZl0rIHN0YXRlPWZpbmlzaGVkIHJhaXNlZCBJT0Vycm9yPicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoCisgICAgICAgICAgICAgICAgcmVwcihTVUNDRVNTRlVMX0ZVVFVSRSksCisgICAgICAgICAgICAgICAgJzxGdXR1cmUgYXQgMHhbMC05YS1mXSsgc3RhdGU9ZmluaXNoZWQgcmV0dXJuZWQgaW50PicpCisKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZjEgPSBjcmVhdGVfZnV0dXJlKHN0YXRlPVBFTkRJTkcpCisgICAgICAgIGYyID0gY3JlYXRlX2Z1dHVyZShzdGF0ZT1SVU5OSU5HKQorICAgICAgICBmMyA9IGNyZWF0ZV9mdXR1cmUoc3RhdGU9Q0FOQ0VMTEVEKQorICAgICAgICBmNCA9IGNyZWF0ZV9mdXR1cmUoc3RhdGU9Q0FOQ0VMTEVEX0FORF9OT1RJRklFRCkKKyAgICAgICAgZjUgPSBjcmVhdGVfZnV0dXJlKHN0YXRlPUZJTklTSEVELCBleGNlcHRpb249SU9FcnJvcigpKQorICAgICAgICBmNiA9IGNyZWF0ZV9mdXR1cmUoc3RhdGU9RklOSVNIRUQsIHJlc3VsdD01KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMS5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMS5fc3RhdGUsIENBTkNFTExFRCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyLmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLl9zdGF0ZSwgUlVOTklORykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoZjMuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjMuX3N0YXRlLCBDQU5DRUxMRUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY0LmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY0Ll9zdGF0ZSwgQ0FOQ0VMTEVEX0FORF9OT1RJRklFRCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGY1LmNhbmNlbCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGY1Ll9zdGF0ZSwgRklOSVNIRUQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmNi5jYW5jZWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmNi5fc3RhdGUsIEZJTklTSEVEKQorCisgICAgZGVmIHRlc3RfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBFTkRJTkdfRlVUVVJFLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFJVTk5JTkdfRlVUVVJFLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQ0FOQ0VMTEVEX0ZVVFVSRS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEVYQ0VQVElPTl9GVVRVUkUuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoU1VDQ0VTU0ZVTF9GVVRVUkUuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9kb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFBFTkRJTkdfRlVUVVJFLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShSVU5OSU5HX0ZVVFVSRS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShDQU5DRUxMRURfRlVUVVJFLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEVYQ0VQVElPTl9GVVRVUkUuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoU1VDQ0VTU0ZVTF9GVVRVUkUuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcnVubmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQRU5ESU5HX0ZVVFVSRS5ydW5uaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSVU5OSU5HX0ZVVFVSRS5ydW5uaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ0FOQ0VMTEVEX0ZVVFVSRS5ydW5uaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQ0FOQ0VMTEVEX0FORF9OT1RJRklFRF9GVVRVUkUucnVubmluZygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEVYQ0VQVElPTl9GVVRVUkUucnVubmluZygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFNVQ0NFU1NGVUxfRlVUVVJFLnJ1bm5pbmcoKSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF93aXRoX3RpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuVGltZW91dEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQRU5ESU5HX0ZVVFVSRS5yZXN1bHQsIHRpbWVvdXQ9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJVTk5JTkdfRlVUVVJFLnJlc3VsdCwgdGltZW91dD0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5DRUxMRURfRlVUVVJFLnJlc3VsdCwgdGltZW91dD0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBDQU5DRUxMRURfQU5EX05PVElGSUVEX0ZVVFVSRS5yZXN1bHQsIHRpbWVvdXQ9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgRVhDRVBUSU9OX0ZVVFVSRS5yZXN1bHQsIHRpbWVvdXQ9MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTVUNDRVNTRlVMX0ZVVFVSRS5yZXN1bHQodGltZW91dD0wKSwgNDIpCisKKyAgICBkZWYgdGVzdF9yZXN1bHRfd2l0aF9zdWNjZXNzKHNlbGYpOgorICAgICAgICAjIFRPRE8oYnJpYW5Ac3dlZXRhcHAuY29tKTogVGhpcyB0ZXN0IGlzIHRpbWluZyBkZXBlbmRhbnQuCisgICAgICAgIGRlZiBub3RpZmljYXRpb24oKToKKyAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIGYxLnNldF9yZXN1bHQoNDIpCisKKyAgICAgICAgZjEgPSBjcmVhdGVfZnV0dXJlKHN0YXRlPVBFTkRJTkcpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ub3RpZmljYXRpb24pCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjEucmVzdWx0KHRpbWVvdXQ9NSksIDQyKQorCisgICAgZGVmIHRlc3RfcmVzdWx0X3dpdGhfY2FuY2VsKHNlbGYpOgorICAgICAgICAjIFRPRE8oYnJpYW5Ac3dlZXRhcHAuY29tKTogVGhpcyB0ZXN0IGlzIHRpbWluZyBkZXBlbmRhbnQuCisgICAgICAgIGRlZiBub3RpZmljYXRpb24oKToKKyAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIGYxLmNhbmNlbCgpCisKKyAgICAgICAgZjEgPSBjcmVhdGVfZnV0dXJlKHN0YXRlPVBFTkRJTkcpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ub3RpZmljYXRpb24pCisgICAgICAgIHQuc3RhcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsIGYxLnJlc3VsdCwgdGltZW91dD01KQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX3dpdGhfdGltZW91dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnV0dXJlcy5UaW1lb3V0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFBFTkRJTkdfRlVUVVJFLmV4Y2VwdGlvbiwgdGltZW91dD0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdXR1cmVzLlRpbWVvdXRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUlVOTklOR19GVVRVUkUuZXhjZXB0aW9uLCB0aW1lb3V0PTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENBTkNFTExFRF9GVVRVUkUuZXhjZXB0aW9uLCB0aW1lb3V0PTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENBTkNFTExFRF9BTkRfTk9USUZJRURfRlVUVVJFLmV4Y2VwdGlvbiwgdGltZW91dD0wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShFWENFUFRJT05fRlVUVVJFLmV4Y2VwdGlvbih0aW1lb3V0PTApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJT0Vycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTVUNDRVNTRlVMX0ZVVFVSRS5leGNlcHRpb24odGltZW91dD0wKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl93aXRoX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGRlZiBub3RpZmljYXRpb24oKToKKyAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGUgbWFpbiB0aHJlYWQgaXMgd2FpdGluZyBmb3IgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgICAgIHdpdGggZjEuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBmMS5fc3RhdGUgPSBGSU5JU0hFRAorICAgICAgICAgICAgICAgIGYxLl9leGNlcHRpb24gPSBJT0Vycm9yKCkKKyAgICAgICAgICAgICAgICBmMS5fY29uZGl0aW9uLm5vdGlmeV9hbGwoKQorCisgICAgICAgIGYxID0gY3JlYXRlX2Z1dHVyZShzdGF0ZT1QRU5ESU5HKQorICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bm90aWZpY2F0aW9uKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmMS5leGNlcHRpb24odGltZW91dD01KSwgSU9FcnJvcikpCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFByb2Nlc3NQb29sRXhlY3V0b3JUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkUG9vbEV4ZWN1dG9yVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NQb29sV2FpdFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkUG9vbFdhaXRUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NQb29sQXNDb21wbGV0ZWRUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZFBvb2xBc0NvbXBsZXRlZFRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnV0dXJlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9jZXNzUG9vbFNodXRkb3duVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZFBvb2xTaHV0ZG93blRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbnRhaW5zLnB5CmluZGV4IDYyMmRmZDQuLmE2NjdhMTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGFpbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb250YWlucy5weQpAQCAtMjAsMTkgKzIwLDE5IEBACiAgICAgICAgIGEgPSBiYXNlX3NldCgxKQogICAgICAgICBiID0gbXlzZXQoMSkKICAgICAgICAgYyA9IHNlcSgxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMSBpbiBiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMCBub3QgaW4gYikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEgaW4gYykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgbm90IGluIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCBiKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgYykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDEgaW4gYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDEgbm90IGluIGEpCiAKICAgICAgICAgIyB0ZXN0IGNoYXIgaW4gc3RyaW5nCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYycgaW4gJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZCcgbm90IGluICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2QnLCAnYWJjJykKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoJycgaW4gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnJyBpbiAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsICdhYmMnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBOb25lIGluICdhYmMnKQogCkBAIC00MCwxNSArNDAsMTUgQEAKICAgICAgICAgIyBhIGNvbGxlY3Rpb24gb2YgdGVzdHMgb24gYnVpbHRpbiBzZXF1ZW5jZSB0eXBlcwogICAgICAgICBhID0gcmFuZ2UoMTApCiAgICAgICAgIGZvciBpIGluIGE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSBpbiBhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMTYgbm90IGluIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDE2LCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIGEpCiAKICAgICAgICAgYSA9IHR1cGxlKGEpCiAgICAgICAgIGZvciBpIGluIGE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSBpbiBhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMTYgbm90IGluIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDE2LCBhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIGEpCiAKICAgICAgICAgY2xhc3MgRGV2aWFudDE6CiAgICAgICAgICAgICAiIiJCZWhhdmVzIHN0cmFuZ2VseSB3aGVuIGNvbXBhcmVkCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYUxpc3QucmVtb3ZlKDE0KQogICAgICAgICAgICAgICAgIHJldHVybiAwCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERldmlhbnQxKCkgbm90IGluIERldmlhbnQxLmFMaXN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKERldmlhbnQxKCksIERldmlhbnQxLmFMaXN0KQogCiAgICAgZGVmIHRlc3Rfbm9ucmVmbGV4aXZlKHNlbGYpOgogICAgICAgICAjIGNvbnRhaW5tZW50IGFuZCBlcXVhbGl0eSB0ZXN0cyBpbnZvbHZpbmcgZWxlbWVudHMgdGhhdCBhcmUKQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgZm9yIGNvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9yczoKICAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnN0cnVjdG9yKHZhbHVlcykKICAgICAgICAgICAgIGZvciBlbGVtIGluIGNvbnRhaW5lcjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBpbiBjb250YWluZXIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBjb250YWluZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGFpbmVyID09IGNvbnN0cnVjdG9yKHZhbHVlcykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGFpbmVyID09IGNvbnRhaW5lcikKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IDAxNWEwYzUuLmQ2YmI1YjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsMTUgKzEsMTUgQEAKICIiIlVuaXQgdGVzdHMgZm9yIGNvbnRleHRsaWIucHksIGFuZCBvdGhlciBjb250ZXh0IG1hbmFnZXJzLiIiIgogCi0KIGltcG9ydCBzeXMKLWltcG9ydCBvcwotaW1wb3J0IGRlY2ltYWwKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdGhyZWFkaW5nCiBmcm9tIGNvbnRleHRsaWIgaW1wb3J0ICogICMgVGVzdHMgX19hbGxfXwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1pbXBvcnQgd2FybmluZ3MKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQorCiAKIGNsYXNzIENvbnRleHRNYW5hZ2VyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNSwxNiArMzUsMTIgQEAKICAgICAgICAgICAgICAgICB5aWVsZCA0MgogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoOTk5KQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB3b29ob28oKSBhcyB4OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDQyKQogICAgICAgICAgICAgICAgIHN0YXRlLmFwcGVuZCh4KQogICAgICAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yKCkKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX25vX3JlcmFpc2Uoc2VsZik6CkBAIC04Niw3ICs4Miw3IEBACiAgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcig5OTkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCA0MiwgOTk5XSkKIAotICAgIGRlZiB0ZXN0X2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoc2VsZik6CisgICAgZGVmIF9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicyhzZWxmKToKICAgICAgICAgZGVmIGF0dHJpYnMoKiprdyk6CiAgICAgICAgICAgICBkZWYgZGVjb3JhdGUoZnVuYyk6CiAgICAgICAgICAgICAgICAgZm9yIGssdiBpbiBrdy5pdGVtcygpOgpAQCAtOTcsMTMyICs5MywxOSBAQAogICAgICAgICBAYXR0cmlicyhmb289J2JhcicpCiAgICAgICAgIGRlZiBiYXooc3BhbSk6CiAgICAgICAgICAgICAiIiJXaGVlISIiIgorICAgICAgICByZXR1cm4gYmF6CisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKHNlbGYpOgorICAgICAgICBiYXogPSBzZWxmLl9jcmVhdGVfY29udGV4dG1hbmFnZXJfYXR0cmlicygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6Ll9fbmFtZV9fLCdiYXonKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5mb28sICdiYXInKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKKyAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCi1jbGFzcyBOZXN0ZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAjIFhYWCBUaGlzIG5lZWRzIG1vcmUgd29yawotCi0gICAgZGVmIHRlc3RfbmVzdGVkKHNlbGYpOgotICAgICAgICBAY29udGV4dG1hbmFnZXIKLSAgICAgICAgZGVmIGEoKToKLSAgICAgICAgICAgIHlpZWxkIDEKLSAgICAgICAgQGNvbnRleHRtYW5hZ2VyCi0gICAgICAgIGRlZiBiKCk6Ci0gICAgICAgICAgICB5aWVsZCAyCi0gICAgICAgIEBjb250ZXh0bWFuYWdlcgotICAgICAgICBkZWYgYygpOgotICAgICAgICAgICAgeWllbGQgMwotICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSwgYygpKSBhcyAoeCwgeSwgeik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIDMpCi0KLSAgICBkZWYgdGVzdF9uZXN0ZWRfY2xlYW51cChzZWxmKToKLSAgICAgICAgc3RhdGUgPSBbXQotICAgICAgICBAY29udGV4dG1hbmFnZXIKLSAgICAgICAgZGVmIGEoKToKLSAgICAgICAgICAgIHN0YXRlLmFwcGVuZCgxKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHlpZWxkIDIKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDMpCi0gICAgICAgIEBjb250ZXh0bWFuYWdlcgotICAgICAgICBkZWYgYigpOgotICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgeWllbGQgNQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoNikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBiKCkpIGFzICh4LCB5KToKLSAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoeCkKLSAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoeSkKLSAgICAgICAgICAgICAgICAxLzAKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzEsIDQsIDIsIDUsIDYsIDNdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQotCi0gICAgZGVmIHRlc3RfbmVzdGVkX3JpZ2h0X2V4Y2VwdGlvbihzZWxmKToKLSAgICAgICAgc3RhdGUgPSBbXQotICAgICAgICBAY29udGV4dG1hbmFnZXIKLSAgICAgICAgZGVmIGEoKToKLSAgICAgICAgICAgIHlpZWxkIDEKLSAgICAgICAgY2xhc3MgYihvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMgotICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQotICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIG5lc3RlZChhKCksIGIoKSkgYXMgKHgsIHkpOgotICAgICAgICAgICAgICAgIDEvMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh4LCB5KSwgKDEsIDIpKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJSZXJhaXNlZCB3cm9uZyBleGNlcHRpb24iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQotCi0gICAgZGVmIHRlc3RfbmVzdGVkX2Jfc3dhbGxvd3Moc2VsZik6Ci0gICAgICAgIEBjb250ZXh0bWFuYWdlcgotICAgICAgICBkZWYgYSgpOgotICAgICAgICAgICAgeWllbGQKLSAgICAgICAgQGNvbnRleHRtYW5hZ2VyCi0gICAgICAgIGRlZiBiKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgeWllbGQKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAjIFN3YWxsb3cgdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBiKCkpOgotICAgICAgICAgICAgICAgIDEvMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkRpZG4ndCBzd2FsbG93IFplcm9EaXZpc2lvbkVycm9yIikKLQotICAgIGRlZiB0ZXN0X25lc3RlZF9icmVhayhzZWxmKToKLSAgICAgICAgQGNvbnRleHRtYW5hZ2VyCi0gICAgICAgIGRlZiBhKCk6Ci0gICAgICAgICAgICB5aWVsZAotICAgICAgICBzdGF0ZSA9IDAKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHN0YXRlICs9IDEKLSAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYSgpKToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc3RhdGUgKz0gMTAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgMSkKLQotICAgIGRlZiB0ZXN0X25lc3RlZF9jb250aW51ZShzZWxmKToKLSAgICAgICAgQGNvbnRleHRtYW5hZ2VyCi0gICAgICAgIGRlZiBhKCk6Ci0gICAgICAgICAgICB5aWVsZAotICAgICAgICBzdGF0ZSA9IDAKLSAgICAgICAgd2hpbGUgc3RhdGUgPCAzOgotICAgICAgICAgICAgc3RhdGUgKz0gMQotICAgICAgICAgICAgd2l0aCBuZXN0ZWQoYSgpLCBhKCkpOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBzdGF0ZSArPSAxMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCAzKQotCi0gICAgZGVmIHRlc3RfbmVzdGVkX3JldHVybihzZWxmKToKLSAgICAgICAgQGNvbnRleHRtYW5hZ2VyCi0gICAgICAgIGRlZiBhKCk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgeWllbGQKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGRlZiBmb28oKToKLSAgICAgICAgICAgIHdpdGggbmVzdGVkKGEoKSwgYSgpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgcmV0dXJuIDEwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIDEpCi0KIGNsYXNzIENsb3NpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICAjIFhYWCBUaGlzIG5lZWRzIG1vcmUgd29yawpAQCAtMjQ1LDE0ICsxMjgsMTEgQEAKICAgICAgICAgICAgICAgICBzdGF0ZS5hcHBlbmQoMSkKICAgICAgICAgeCA9IEMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBbXSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgIHdpdGggY2xvc2luZyh4KSBhcyB5OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKLSAgICAgICAgICAgICAgICAxLzAKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzFdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICAgICAgICAgIDEgLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxXSkKIAogY2xhc3MgRmlsZUNvbnRleHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTI2NSwyMSArMTQ1LDE2IEBACiAgICAgICAgICAgICAgICAgZi53cml0ZSgiQm9vaFxuIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgICAgIGYgPSBOb25lCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGZuLCAiciIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJCb29oXG4iKQotICAgICAgICAgICAgICAgICAgICAxLzAKLSAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKKyAgICAgICAgICAgICAgICAgICAgMSAvIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUodGZuKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRmbikKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIExvY2tDb250ZXh0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIGJvaWxlclBsYXRlKHNlbGYsIGxvY2ssIGxvY2tlZCk6CkBAIC0yODcsMTQgKzE2MiwxMSBAQAogICAgICAgICB3aXRoIGxvY2s6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobG9ja2VkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9ja2VkKCkpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CiAgICAgICAgICAgICB3aXRoIGxvY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2tlZCgpKQotICAgICAgICAgICAgICAgIDEvMAotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2tlZCgpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IiKQorICAgICAgICAgICAgICAgIDEgLyAwCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9ja2VkKCkpCiAKICAgICBkZWYgdGVzdFdpdGhMb2NrKHNlbGYpOgogICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkxvY2soKQpAQCAtMzMwLDExICsyMDIsMTcyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgc2VsZi5ib2lsZXJQbGF0ZShsb2NrLCBsb2NrZWQpCiAKKworY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgIGV4YyA9IE5vbmUKKyAgICBjYXRjaCA9IEZhbHNlCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHJldHVybiBzZWxmLmNhdGNoCisKKworY2xhc3MgVGVzdENvbnRleHREZWNvcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY29udGV4dGRlY29yYXRvcihzZWxmKToKKyAgICAgICAgY29udGV4dCA9IG15Y29udGV4dCgpCisgICAgICAgIHdpdGggY29udGV4dCBhcyByZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlc3VsdCwgY29udGV4dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb250ZXh0LnN0YXJ0ZWQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZXh0LmV4YywgKE5vbmUsIE5vbmUsIE5vbmUpKQorCisKKyAgICBkZWYgdGVzdF9jb250ZXh0ZGVjb3JhdG9yX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTmFtZUVycm9yLCAnZm9vJyk6CisgICAgICAgICAgICB3aXRoIGNvbnRleHQ6CisgICAgICAgICAgICAgICAgcmFpc2UgTmFtZUVycm9yKCdmb28nKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjb250ZXh0LmV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb250ZXh0LmV4Y1swXSwgTmFtZUVycm9yKQorCisgICAgICAgIGNvbnRleHQgPSBteWNvbnRleHQoKQorICAgICAgICBjb250ZXh0LmNhdGNoID0gVHJ1ZQorICAgICAgICB3aXRoIGNvbnRleHQ6CisgICAgICAgICAgICByYWlzZSBOYW1lRXJyb3IoJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGNvbnRleHQuZXhjKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbnRleHQuZXhjWzBdLCBOYW1lRXJyb3IpCisKKworICAgIGRlZiB0ZXN0X2RlY29yYXRvcihzZWxmKToKKyAgICAgICAgY29udGV4dCA9IG15Y29udGV4dCgpCisKKyAgICAgICAgQGNvbnRleHQKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbnRleHQuZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRleHQuc3RhcnRlZCkKKyAgICAgICAgdGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dC5leGMsIChOb25lLCBOb25lLCBOb25lKSkKKworCisgICAgZGVmIHRlc3RfZGVjb3JhdG9yX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKKworICAgICAgICBAY29udGV4dAorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29udGV4dC5leGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGV4dC5zdGFydGVkKQorICAgICAgICAgICAgcmFpc2UgTmFtZUVycm9yKCdmb28nKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChOYW1lRXJyb3IsICdmb28nKToKKyAgICAgICAgICAgIHRlc3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjb250ZXh0LmV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb250ZXh0LmV4Y1swXSwgTmFtZUVycm9yKQorCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0aW5nX21ldGhvZChzZWxmKToKKyAgICAgICAgY29udGV4dCA9IG15Y29udGV4dCgpCisKKyAgICAgICAgY2xhc3MgVGVzdChvYmplY3QpOgorCisgICAgICAgICAgICBAY29udGV4dAorICAgICAgICAgICAgZGVmIG1ldGhvZChzZWxmLCBhLCBiLCBjPU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgc2VsZi5jID0gYworCisgICAgICAgICMgdGhlc2UgdGVzdHMgYXJlIGZvciBhcmd1bWVudCBwYXNzaW5nIHdoZW4gdXNlZCBhcyBhIGRlY29yYXRvcgorICAgICAgICB0ZXN0ID0gVGVzdCgpCisgICAgICAgIHRlc3QubWV0aG9kKDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5hLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuYiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmMsIE5vbmUpCisKKyAgICAgICAgdGVzdCA9IFRlc3QoKQorICAgICAgICB0ZXN0Lm1ldGhvZCgnYScsICdiJywgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuYSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuYiwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuYywgJ2MnKQorCisgICAgICAgIHRlc3QgPSBUZXN0KCkKKyAgICAgICAgdGVzdC5tZXRob2QoYT0xLCBiPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5hLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuYiwgMikKKworCisgICAgZGVmIHRlc3RfdHlwb19lbnRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICAgICAgICAgZGVmIF9fdW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBteWNvbnRleHQoKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKworICAgIGRlZiB0ZXN0X3R5cG9fZXhpdChzZWxmKToKKyAgICAgICAgY2xhc3MgbXljb250ZXh0KENvbnRleHREZWNvcmF0b3IpOgorICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgX191eGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBteWNvbnRleHQoKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKworICAgIGRlZiB0ZXN0X2NvbnRleHRkZWNvcmF0b3JfYXNfbWl4aW4oc2VsZik6CisgICAgICAgIGNsYXNzIHNvbWVjb250ZXh0KG9iamVjdCk6CisgICAgICAgICAgICBzdGFydGVkID0gRmFsc2UKKyAgICAgICAgICAgIGV4YyA9IE5vbmUKKworICAgICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnN0YXJ0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGMpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhjID0gZXhjCisKKyAgICAgICAgY2xhc3MgbXljb250ZXh0KHNvbWVjb250ZXh0LCBDb250ZXh0RGVjb3JhdG9yKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjb250ZXh0ID0gbXljb250ZXh0KCkKKyAgICAgICAgQGNvbnRleHQKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbnRleHQuZXhjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbnRleHQuc3RhcnRlZCkKKyAgICAgICAgdGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGV4dC5leGMsIChOb25lLCBOb25lLCBOb25lKSkKKworCisgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfYXNfZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBzdGF0ZSA9IFtdCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgd29vaG9vKHkpOgorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHkpCisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKDk5OSkKKworICAgICAgICBAd29vaG9vKDEpCisgICAgICAgIGRlZiB0ZXN0KHgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0ZSwgWzFdKQorICAgICAgICAgICAgc3RhdGUuYXBwZW5kKHgpCisgICAgICAgIHRlc3QoJ3NvbWV0aGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGUsIFsxLCAnc29tZXRoaW5nJywgOTk5XSkKKworCiAjIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgdGhlIHRlc3QgYWN0dWFsbHkgcnVuIHVuZGVyIHJlZ3J0ZXN0LnB5IQogZGVmIHRlc3RfbWFpbigpOgotICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb3B5LnB5IGIvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CmluZGV4IGY0Y2E2YjMuLmE4NGMxMDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29weS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvcHkucHkKQEAgLTY0Nyw3ICs2NDcsNyBAQAogICAgICAgICB4LCB5ID0gQygpLCBDKCkKICAgICAgICAgIyBUaGUgdW5kZXJseWluZyBjb250YWluZXJzIGFyZSBkZWNvdXBsZWQKICAgICAgICAgdlt4XSA9IHkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh4IGluIHUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oeCwgdSkKIAogICAgIGRlZiB0ZXN0X2NvcHlfd2Vha2tleWRpY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX2NvcHlfd2Vha2RpY3Qod2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSkKQEAgLTY5Nyw2ICs2OTcsMTcgQEAKICAgICAgICAgZGVsIGQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDEpCiAKKyAgICBkZWYgdGVzdF9kZWVwY29weV9ib3VuZF9tZXRob2Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIG0oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBmID0gRm9vKCkKKyAgICAgICAgZi5iID0gZi5tCisgICAgICAgIGcgPSBjb3B5LmRlZXBjb3B5KGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5tLCBnLmIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnLmIuX19zZWxmX18gaXMgZykKKyAgICAgICAgZy5iKCkKKwogCiBkZWYgZ2xvYmFsX2Zvbyh4LCB5KTogcmV0dXJuIHgreQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvcHlyZWcucHkgYi9MaWIvdGVzdC90ZXN0X2NvcHlyZWcucHkKaW5kZXggYmIzNjUxZS4uYWJlMDc0OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb3B5cmVnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29weXJlZy5weQpAQCAtNTQsNyArNTQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeVttb2QsIGZ1bmNdID09IGNvZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnlbY29kZV0gPT0gKG1vZCwgZnVuYykpCiAgICAgICAgICAgICAjIFNob3VsZG4ndCBiZSBpbiB0aGUgY2FjaGUuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29kZSBub3QgaW4gY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjb2RlLCBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUpCiAgICAgICAgICAgICAjIFJlZHVuZGFudCByZWdpc3RyYXRpb24gc2hvdWxkIGJlIE9LLgogICAgICAgICAgICAgY29weXJlZy5hZGRfZXh0ZW5zaW9uKG1vZCwgZnVuYywgY29kZSkgICMgc2hvdWxkbid0IGJsb3cgdXAKICAgICAgICAgICAgICMgQ29uZmxpY3RpbmcgY29kZS4KQEAgLTgxLDcgKzgxLDcgQEAKICAgICAgICAgICAgIGUucmVzdG9yZSgpCiAKICAgICAgICAgIyBTaG91bGRuJ3QgYmUgdGhlcmUgYW55bW9yZS4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChtb2QsIGZ1bmMpIG5vdCBpbiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKG1vZCwgZnVuYyksIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSkKICAgICAgICAgIyBUaGUgY29kZSAqbWF5KiBiZSBpbiBjb3B5cmVnLl9leHRlbnNpb25fcmVnaXN0cnksIHRob3VnaCwgaWYKICAgICAgICAgIyB3ZSBoYXBwZW5lZCB0byBwaWNrIG9uIGEgcmVnaXN0ZXJlZCBjb2RlLiAgU28gZG9uJ3QgY2hlY2sgZm9yCiAgICAgICAgICMgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CmluZGV4IDQ1ODZiMzYuLmFlMTdjMmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQpAQCAtMTgsMTUgKzE4LDE2IEBACiAgICAgZGVmIHRlc3RfYmFkX2NvdW50ZXJfZHVyaW5nX2RlYWxsb2Moc2VsZik6CiAgICAgICAgIGltcG9ydCBfbHNwcm9mCiAgICAgICAgICMgTXVzdCB1c2UgYSBmaWxlIGFzIFN0cmluZ0lPIGRvZXNuJ3QgdHJpZ2dlciB0aGUgYnVnLgotICAgICAgICBzeXMuc3RkZXJyID0gb3BlbihURVNURk4sICd3JykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcihsYW1iZGE6IGludCkKLSAgICAgICAgICAgIG9iai5lbmFibGUoKQotICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcigxKQotICAgICAgICAgICAgb2JqLmRpc2FibGUoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN5cy5fX3N0ZGVycl9fCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGZpbGU6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gZmlsZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9iaiA9IF9sc3Byb2YuUHJvZmlsZXIobGFtYmRhOiBpbnQpCisgICAgICAgICAgICAgICAgb2JqLmVuYWJsZSgpCisgICAgICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcigxKQorICAgICAgICAgICAgICAgIG9iai5kaXNhYmxlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN5cy5fX3N0ZGVycl9fCisgICAgICAgIHVubGluayhURVNURk4pCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jcnlwdC5weSBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jc3YucHkgYi9MaWIvdGVzdC90ZXN0X2Nzdi5weQppbmRleCBkNTUzYTc4Li44Y2ExZTYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nzdi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Nzdi5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiAjIENvcHlyaWdodCAoQykgMjAwMSwyMDAyIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGNzdiBwYWNrYWdlIHVuaXQgdGVzdHMKIApAQCAtNDgzLDEwICs0ODIsMTAgQEAKICAgICBkZWYgdGVzdF9udWxsKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlckFzc2VydEVxdWFsKFtdLCAnJykKIAotICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICBkZWYgdGVzdF9zaW5nbGVfd3JpdGVyKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlckFzc2VydEVxdWFsKFtbJ2FiYyddXSwgJ2FiY1xyXG4nKQogCi0gICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgIGRlZiB0ZXN0X3NpbXBsZV93cml0ZXIoc2VsZik6CiAgICAgICAgIHNlbGYud3JpdGVyQXNzZXJ0RXF1YWwoW1sxLCAyLCAnYWJjJywgMywgNF1dLCAnMSwyLGFiYywzLDRcclxuJykKIAogICAgIGRlZiB0ZXN0X3F1b3RlcyhzZWxmKToKQEAgLTUxMSw2ICs1MTAsMTUgQEAKICAgICBkZWYgdGVzdF9yZWFkX2VzY2FwZV9maWVsZHNlcChzZWxmKToKICAgICAgICAgc2VsZi5yZWFkZXJBc3NlcnRFcXVhbCgnYWJjXFwsZGVmXHJcbicsIFtbJ2FiYyxkZWYnXV0pCiAKK2NsYXNzIFRlc3REaWFsZWN0VW5peChUZXN0Q3N2QmFzZSk6CisgICAgZGlhbGVjdCA9ICd1bml4JworCisgICAgZGVmIHRlc3Rfc2ltcGxlX3dyaXRlcihzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZXJBc3NlcnRFcXVhbChbWzEsICdhYmMgZGVmJywgJ2FiYyddXSwgJyIxIiwiYWJjIGRlZiIsImFiYyJcbicpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVhZGVyKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWRlckFzc2VydEVxdWFsKCciMSIsImFiYyBkZWYiLCJhYmMiXG4nLCBbWycxJywgJ2FiYyBkZWYnLCAnYWJjJ11dKQorCiBjbGFzcyBRdW90ZWRFc2NhcGVkRXhjZWwoY3N2LmV4Y2VsKToKICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTk5VTUVSSUMKICAgICBlc2NhcGVjaGFyID0gJ1xcJwpAQCAtNTMwLDggKzUzOCwxMiBAQAogICAgIGRlZiB0ZXN0X3dyaXRlX3NpbXBsZV9kaWN0KHNlbGYpOgogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKICAgICAgICAgICAgIHdyaXRlciA9IGNzdi5EaWN0V3JpdGVyKGZpbGVvYmosIGZpZWxkbmFtZXMgPSBbImYxIiwgImYyIiwgImYzIl0pCisgICAgICAgICAgICB3cml0ZXIud3JpdGVoZWFkZXIoKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZGxpbmUoKSwgImYxLGYyLGYzXHJcbiIpCiAgICAgICAgICAgICB3cml0ZXIud3JpdGVyb3coeyJmMSI6IDEwLCAiZjMiOiAiYWJjIn0pCiAgICAgICAgICAgICBmaWxlb2JqLnNlZWsoMCkKKyAgICAgICAgICAgIGZpbGVvYmoucmVhZGxpbmUoKSAjIGhlYWRlcgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgIjEwLCxhYmNcclxuIikKIAogICAgIGRlZiB0ZXN0X3dyaXRlX25vX2ZpZWxkcyhzZWxmKToKQEAgLTgwNiw3ICs4MTgsNyBAQAogICAgICAgICAjIGdpdmVuIHRoYXQgYWxsIHRocmVlIGxpbmVzIGluIHNhbXBsZTMgYXJlIGVxdWFsLAogICAgICAgICAjIEkgdGhpbmsgdGhhdCBhbnkgY2hhcmFjdGVyIGNvdWxkIGhhdmUgYmVlbiAnZ3Vlc3NlZCcgYXMgdGhlCiAgICAgICAgICMgZGVsaW1pdGVyLCBkZXBlbmRpbmcgb24gZGljdGlvbmFyeSBvcmRlcgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlhbGVjdC5kZWxpbWl0ZXIgaW4gc2VsZi5zYW1wbGUzKQorICAgICAgICBzZWxmLmFzc2VydEluKGRpYWxlY3QuZGVsaW1pdGVyLCBzZWxmLnNhbXBsZTMpCiAgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMywgZGVsaW1pdGVycz0iPywiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpYWxlY3QuZGVsaW1pdGVyLCAiPyIpCiAgICAgICAgIGRpYWxlY3QgPSBzbmlmZmVyLnNuaWZmKHNlbGYuc2FtcGxlMywgZGVsaW1pdGVycz0iLywiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfZGF0ZXRpbWUucHkKaW5kZXggZWExZTRkNS4uZGVkMmFhOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYXRldGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RhdGV0aW1lLnB5CkBAIC0xLDMzODUgKzEsNDIgQEAKLSIiIlRlc3QgZGF0ZS90aW1lIHR5cGUuCi0KLVNlZSBodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvZmRyYWtlL0RhdGVUaW1lV2lraS9UZXN0Q2FzZXMKLSIiIgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgcGlja2xlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlLCBydW5fdW5pdHRlc3QKK1RFU1RTID0gJ3Rlc3QuZGF0ZXRpbWV0ZXN0ZXInCisjIFhYWDogaW1wb3J0X2ZyZXNoX21vZHVsZSgpIGlzIHN1cHBvc2VkIHRvIGxlYXZlIHN5cy5tb2R1bGUgY2FjaGUgdW50b3VjaGVkLAorIyBYWFg6IGJ1dCBpdCBkb2VzIG5vdCwgc28gd2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlIGl0IG91cnNlbHZlcy4KK3NhdmVfc3lzX21vZHVsZXMgPSBzeXMubW9kdWxlcy5jb3B5KCkKK3RyeToKKyAgICBwdXJlX3Rlc3RzID0gaW1wb3J0X2ZyZXNoX21vZHVsZShURVNUUywgZnJlc2g9WydkYXRldGltZScsICdfc3RycHRpbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja2VkPVsnX2RhdGV0aW1lJ10pCisgICAgZmFzdF90ZXN0cyA9IGltcG9ydF9mcmVzaF9tb2R1bGUoVEVTVFMsIGZyZXNoPVsnZGF0ZXRpbWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19kYXRldGltZScsICdfc3RycHRpbWUnXSkKK2ZpbmFsbHk6CisgICAgc3lzLm1vZHVsZXMuY2xlYXIoKQorICAgIHN5cy5tb2R1bGVzLnVwZGF0ZShzYXZlX3N5c19tb2R1bGVzKQordGVzdF9tb2R1bGVzID0gW3B1cmVfdGVzdHMsIGZhc3RfdGVzdHNdCit0ZXN0X3N1ZmZpeGVzID0gWyJfUHVyZSIsICJfRmFzdCJdCiAKLWZyb20gb3BlcmF0b3IgaW1wb3J0IGx0LCBsZSwgZ3QsIGdlLCBlcSwgbmUKLQotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KLWZyb20gZGF0ZXRpbWUgaW1wb3J0IE1JTllFQVIsIE1BWFlFQVIKLWZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YQotZnJvbSBkYXRldGltZSBpbXBvcnQgdHppbmZvCi1mcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lCi1mcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRlLCBkYXRldGltZQotCi1waWNrbGVfY2hvaWNlcyA9IFsocGlja2xlLCBwaWNrbGUsIHByb3RvKSBmb3IgcHJvdG8gaW4gcmFuZ2UoMyldCi1hc3NlcnQgbGVuKHBpY2tsZV9jaG9pY2VzKSA9PSAzCi0KLSMgQW4gYXJiaXRyYXJ5IGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBvZiBub24tZGF0ZXRpbWUgdHlwZXMsIGZvciB0ZXN0aW5nCi0jIG1peGVkLXR5cGUgY29tcGFyaXNvbnMuCi1PVEhFUlNUVUZGID0gKDEwLCAxMCwgMzQuNSwgImFiYyIsIHt9LCBbXSwgKCkpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgbW9kdWxlIHRlc3RzCi0KLWNsYXNzIFRlc3RNb2R1bGUodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgotICAgICAgICBpbXBvcnQgZGF0ZXRpbWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZS5NSU5ZRUFSLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGV0aW1lLk1BWFlFQVIsIDk5OTkpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHR6aW5mbyB0ZXN0cwotCi1jbGFzcyBGaXhlZE9mZnNldCh0emluZm8pOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUsIGRzdG9mZnNldD00Mik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2Zmc2V0LCBpbnQpOgotICAgICAgICAgICAgb2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9b2Zmc2V0KQotICAgICAgICBpZiBpc2luc3RhbmNlKGRzdG9mZnNldCwgaW50KToKLSAgICAgICAgICAgIGRzdG9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPWRzdG9mZnNldCkKLSAgICAgICAgc2VsZi5fX29mZnNldCA9IG9mZnNldAotICAgICAgICBzZWxmLl9fbmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RzdG9mZnNldCA9IGRzdG9mZnNldAotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19uYW1lLmxvd2VyKCkKLSAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19vZmZzZXQKLSAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19uYW1lCi0gICAgZGVmIGRzdChzZWxmLCBkdCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9fZHN0b2Zmc2V0Ci0KLWNsYXNzIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KEZpeGVkT2Zmc2V0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb2Zmc2V0PU5vbmUsIG5hbWU9Tm9uZSwgZHN0b2Zmc2V0PU5vbmUpOgotICAgICAgICBGaXhlZE9mZnNldC5fX2luaXRfXyhzZWxmLCBvZmZzZXQsIG5hbWUsIGRzdG9mZnNldCkKLQotY2xhc3MgVGVzdFRaSW5mbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9ub25fYWJzdHJhY3RuZXNzKHNlbGYpOgotICAgICAgICAjIEluIG9yZGVyIHRvIGFsbG93IHN1YmNsYXNzZXMgdG8gZ2V0IHBpY2tsZWQsIHRoZSBDIGltcGxlbWVudGF0aW9uCi0gICAgICAgICMgd2Fzbid0IGFibGUgdG8gZ2V0IGF3YXkgd2l0aCBoYXZpbmcgX19pbml0X18gcmFpc2UKLSAgICAgICAgIyBOb3RJbXBsZW1lbnRlZEVycm9yLgotICAgICAgICB1c2VsZXNzID0gdHppbmZvKCkKLSAgICAgICAgZHQgPSBkYXRldGltZS5tYXgKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdXNlbGVzcy50em5hbWUsIGR0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB1c2VsZXNzLnV0Y29mZnNldCwgZHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHVzZWxlc3MuZHN0LCBkdCkKLQotICAgIGRlZiB0ZXN0X3N1YmNsYXNzX211c3Rfb3ZlcnJpZGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIE5vdEVub3VnaCh0emluZm8pOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fX29mZnNldCA9IG9mZnNldAotICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhOb3RFbm91Z2gsIHR6aW5mbykpCi0gICAgICAgIG5lID0gTm90RW5vdWdoKDMsICJOb3RCeUFMb25nU2hvdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG5lLCB0emluZm8pKQotCi0gICAgICAgIGR0ID0gZGF0ZXRpbWUubm93KCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmUudHpuYW1lLCBkdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmUudXRjb2Zmc2V0LCBkdCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbmUuZHN0LCBkdCkKLQotICAgIGRlZiB0ZXN0X25vcm1hbChzZWxmKToKLSAgICAgICAgZm8gPSBGaXhlZE9mZnNldCgzLCAiVGhyZWUiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmbywgdHppbmZvKSkKLSAgICAgICAgZm9yIGR0IGluIGRhdGV0aW1lLm5vdygpLCBOb25lOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby51dGNvZmZzZXQoZHQpLCB0aW1lZGVsdGEobWludXRlcz0zKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8udHpuYW1lKGR0KSwgIlRocmVlIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8uZHN0KGR0KSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmdfYmFzZShzZWxmKToKLSAgICAgICAgIyBUaGVyZSdzIG5vIHBvaW50IHRvIHBpY2tsaW5nIHR6aW5mbyBvYmplY3RzIG9uIHRoZWlyIG93biAodGhleQotICAgICAgICAjIGNhcnJ5IG5vIGRhdGEpLCBidXQgdGhleSBuZWVkIHRvIGJlIHBpY2tsYWJsZSBhbnl3YXkgZWxzZQotICAgICAgICAjIGNvbmNyZXRlIHN1YmNsYXNzZXMgY2FuJ3QgYmUgcGlja2xlZC4KLSAgICAgICAgb3JpZyA9IHR6aW5mby5fX25ld19fKHR6aW5mbykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUob3JpZykgaXMgdHppbmZvKQotICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKLSAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKLSAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkZXJpdmVkKSBpcyB0emluZm8pCi0KLSAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzcyhzZWxmKToKLSAgICAgICAgIyBNYWtlIHN1cmUgd2UgY2FuIHBpY2tsZS91bnBpY2tsZSBhbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzLgotICAgICAgICBvZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz0tMzAwKQotICAgICAgICBvcmlnID0gUGlja2xhYmxlRml4ZWRPZmZzZXQob2Zmc2V0LCAnY29va2llJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob3JpZywgdHppbmZvKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUob3JpZykgaXMgUGlja2xhYmxlRml4ZWRPZmZzZXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZy51dGNvZmZzZXQoTm9uZSksIG9mZnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLnR6bmFtZShOb25lKSwgJ2Nvb2tpZScpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGRlcml2ZWQsIHR6aW5mbykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkZXJpdmVkKSBpcyBQaWNrbGFibGVGaXhlZE9mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoTm9uZSksIG9mZnNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoTm9uZSksICdjb29raWUnKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBCYXNlIGNsYXNlIGZvciB0ZXN0aW5nIGEgcGFydGljdWxhciBhc3BlY3Qgb2YgdGltZWRlbHRhLCB0aW1lLCBkYXRlIGFuZAotIyBkYXRldGltZSBjb21wYXJpc29ucy4KLQotY2xhc3MgSGFybWxlc3NNaXhlZENvbXBhcmlzb246Ci0gICAgIyBUZXN0IHRoYXQgX19lcV9fIGFuZCBfX25lX18gZG9uJ3QgY29tcGxhaW4gZm9yIG1peGVkLXR5cGUgY29tcGFyaXNvbnMuCi0KLSAgICAjIFN1YmNsYXNzZXMgbXVzdCBkZWZpbmUgJ3RoZWNsYXNzJywgYW5kIHRoZWNsYXNzKDEsIDEsIDEpIG11c3QgYmUgYQotICAgICMgbGVnaXQgY29uc3RydWN0b3IuCi0KLSAgICBkZWYgdGVzdF9oYXJtbGVzc19taXhlZF9jb21wYXJpc29uKHNlbGYpOgotICAgICAgICBtZSA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSkKLQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1lID09ICgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWUgIT0gKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKCkgPT0gbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoKSAhPSBtZSkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWUgaW4gWzEsIDIwLCBbXSwgbWVdKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1lIG5vdCBpbiBbMSwgMjAsIFtdLCBtZV0pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFtdIGluIFttZSwgMSwgMjAsIFtdXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShbXSBub3QgaW4gW21lLCAxLCAyMCwgW11dKQotCi0gICAgZGVmIHRlc3RfaGFybWZ1bF9taXhlZF9jb21wYXJpc29uKHNlbGYpOgotICAgICAgICBtZSA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1lIDw9ICgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbWUgPiAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG1lID49ICgpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA8IG1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogKCkgPD0gbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiAoKSA+IG1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogKCkgPj0gbWUpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIHRpbWVkZWx0YSB0ZXN0cwotCi1jbGFzcyBUZXN0VGltZURlbHRhKEhhcm1sZXNzTWl4ZWRDb21wYXJpc29uLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICB0aGVjbGFzcyA9IHRpbWVkZWx0YQotCi0gICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICB0ZCA9IHRpbWVkZWx0YQotCi0gICAgICAgICMgQ2hlY2sga2V5d29yZCBhcmdzIHRvIGNvbnN0cnVjdG9yCi0gICAgICAgIGVxKHRkKCksIHRkKHdlZWtzPTAsIGRheXM9MCwgaG91cnM9MCwgbWludXRlcz0wLCBzZWNvbmRzPTAsCi0gICAgICAgICAgICAgICAgICAgIG1pbGxpc2Vjb25kcz0wLCBtaWNyb3NlY29uZHM9MCkpCi0gICAgICAgIGVxKHRkKDEpLCB0ZChkYXlzPTEpKQotICAgICAgICBlcSh0ZCgwLCAxKSwgdGQoc2Vjb25kcz0xKSkKLSAgICAgICAgZXEodGQoMCwgMCwgMSksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKLSAgICAgICAgZXEodGQod2Vla3M9MSksIHRkKGRheXM9NykpCi0gICAgICAgIGVxKHRkKGRheXM9MSksIHRkKGhvdXJzPTI0KSkKLSAgICAgICAgZXEodGQoaG91cnM9MSksIHRkKG1pbnV0ZXM9NjApKQotICAgICAgICBlcSh0ZChtaW51dGVzPTEpLCB0ZChzZWNvbmRzPTYwKSkKLSAgICAgICAgZXEodGQoc2Vjb25kcz0xKSwgdGQobWlsbGlzZWNvbmRzPTEwMDApKQotICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MSksIHRkKG1pY3Jvc2Vjb25kcz0xMDAwKSkKLQotICAgICAgICAjIENoZWNrIGZsb2F0IGFyZ3MgdG8gY29uc3RydWN0b3IKLSAgICAgICAgZXEodGQod2Vla3M9MS4wLzcpLCB0ZChkYXlzPTEpKQotICAgICAgICBlcSh0ZChkYXlzPTEuMC8yNCksIHRkKGhvdXJzPTEpKQotICAgICAgICBlcSh0ZChob3Vycz0xLjAvNjApLCB0ZChtaW51dGVzPTEpKQotICAgICAgICBlcSh0ZChtaW51dGVzPTEuMC82MCksIHRkKHNlY29uZHM9MSkpCi0gICAgICAgIGVxKHRkKHNlY29uZHM9MC4wMDEpLCB0ZChtaWxsaXNlY29uZHM9MSkpCi0gICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0wLjAwMSksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKLQotICAgIGRlZiB0ZXN0X2NvbXB1dGF0aW9ucyhzZWxmKToKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0gICAgICAgIHRkID0gdGltZWRlbHRhCi0KLSAgICAgICAgYSA9IHRkKDcpICMgT25lIHdlZWsKLSAgICAgICAgYiA9IHRkKDAsIDYwKSAjIE9uZSBtaW51dGUKLSAgICAgICAgYyA9IHRkKDAsIDAsIDEwMDApICMgT25lIG1pbGxpc2Vjb25kCi0gICAgICAgIGVxKGErYitjLCB0ZCg3LCA2MCwgMTAwMCkpCi0gICAgICAgIGVxKGEtYiwgdGQoNiwgMjQqMzYwMCAtIDYwKSkKLSAgICAgICAgZXEoYi5fX3JzdWJfXyhhKSwgdGQoNiwgMjQqMzYwMCAtIDYwKSkKLSAgICAgICAgZXEoLWEsIHRkKC03KSkKLSAgICAgICAgZXEoK2EsIHRkKDcpKQotICAgICAgICBlcSgtYiwgdGQoLTEsIDI0KjM2MDAgLSA2MCkpCi0gICAgICAgIGVxKC1jLCB0ZCgtMSwgMjQqMzYwMCAtIDEsIDk5OTAwMCkpCi0gICAgICAgIGVxKGFicyhhKSwgYSkKLSAgICAgICAgZXEoYWJzKC1hKSwgYSkKLSAgICAgICAgZXEodGQoNiwgMjQqMzYwMCksIGEpCi0gICAgICAgIGVxKHRkKDAsIDAsIDYwKjEwMDAwMDApLCBiKQotICAgICAgICBlcShhKjEwLCB0ZCg3MCkpCi0gICAgICAgIGVxKGEqMTAsIDEwKmEpCi0gICAgICAgIGVxKGEqMTAsIDEwKmEpCi0gICAgICAgIGVxKGIqMTAsIHRkKDAsIDYwMCkpCi0gICAgICAgIGVxKDEwKmIsIHRkKDAsIDYwMCkpCi0gICAgICAgIGVxKGIqMTAsIHRkKDAsIDYwMCkpCi0gICAgICAgIGVxKGMqMTAsIHRkKDAsIDAsIDEwMDAwKSkKLSAgICAgICAgZXEoMTAqYywgdGQoMCwgMCwgMTAwMDApKQotICAgICAgICBlcShjKjEwLCB0ZCgwLCAwLCAxMDAwMCkpCi0gICAgICAgIGVxKGEqLTEsIC1hKQotICAgICAgICBlcShiKi0yLCAtYi1iKQotICAgICAgICBlcShjKi0yLCAtYystYykKLSAgICAgICAgZXEoYiooNjAqMjQpLCAoYio2MCkqMjQpCi0gICAgICAgIGVxKGIqKDYwKjI0KSwgKDYwKmIpKjI0KQotICAgICAgICBlcShjKjEwMDAsIHRkKDAsIDEpKQotICAgICAgICBlcSgxMDAwKmMsIHRkKDAsIDEpKQotICAgICAgICBlcShhLy83LCB0ZCgxKSkKLSAgICAgICAgZXEoYi8vMTAsIHRkKDAsIDYpKQotICAgICAgICBlcShjLy8xMDAwLCB0ZCgwLCAwLCAxKSkKLSAgICAgICAgZXEoYS8vMTAsIHRkKDAsIDcqMjQqMzYwKSkKLSAgICAgICAgZXEoYS8vMzYwMDAwMCwgdGQoMCwgMCwgNyoyNCoxMDAwKSkKLQotICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfY29tcHV0YXRpb25zKHNlbGYpOgotICAgICAgICBhID0gdGltZWRlbHRhKDQyKQotCi0gICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCi0gICAgICAgIGZvciBpIGluIDEsIDEsIDEuMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCi0KLSAgICAgICAgIyBNdWwvZGl2IGJ5IGZsb2F0IGlzbid0IHN1cHBvcnRlZC4KLSAgICAgICAgeCA9IDIuMwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSp4KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeCphKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS94KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeC9hKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvLyB4KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogeCAvLyBhKQotCi0gICAgICAgICMgRGl2aXNpb24gb2YgaW50IGJ5IHRpbWVkZWx0YSBkb2Vzbid0IG1ha2Ugc2Vuc2UuCi0gICAgICAgICMgRGl2aXNpb24gYnkgemVybyBkb2Vzbid0IG1ha2Ugc2Vuc2UuCi0gICAgICAgIGZvciB6ZXJvIGluIDAsIDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogemVybyAvLyBhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGxhbWJkYTogYSAvLyB6ZXJvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAvICcnKQotCi0gICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgZGF5cywgc2Vjb25kcywgdXMgPSAxLCA3LCAzMQotICAgICAgICB0ZCA9IHRpbWVkZWx0YShkYXlzLCBzZWNvbmRzLCB1cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXlzLCBkYXlzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNlY29uZHMsIHNlY29uZHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQubWljcm9zZWNvbmRzLCB1cykKLQotICAgIGRlZiB0ZXN0X2NhcnJpZXMoc2VsZik6Ci0gICAgICAgIHQxID0gdGltZWRlbHRhKGRheXM9MTAwLAotICAgICAgICAgICAgICAgICAgICAgICB3ZWVrcz0tNywKLSAgICAgICAgICAgICAgICAgICAgICAgaG91cnM9LTI0KigxMDAtNDkpLAotICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVzPS0zLAotICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPTEyLAotICAgICAgICAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHM9KDMqNjAgLSAxMikgKiAxZTYgKyAxKQotICAgICAgICB0MiA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0KLSAgICBkZWYgdGVzdF9oYXNoX2VxdWFsaXR5KHNlbGYpOgotICAgICAgICB0MSA9IHRpbWVkZWx0YShkYXlzPTEwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgd2Vla3M9LTcsCi0gICAgICAgICAgICAgICAgICAgICAgIGhvdXJzPS0yNCooMTAwLTQ5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgbWludXRlcz0tMywKLSAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz0xMiwKLSAgICAgICAgICAgICAgICAgICAgICAgbWljcm9zZWNvbmRzPSgzKjYwIC0gMTIpICogMTAwMDAwMCkKLSAgICAgICAgdDIgPSB0aW1lZGVsdGEoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHQyKSkKLQotICAgICAgICB0MSArPSB0aW1lZGVsdGEod2Vla3M9NykKLSAgICAgICAgdDIgKz0gdGltZWRlbHRhKGRheXM9Nyo3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCi0KLSAgICAgICAgZCA9IHt0MTogMX0KLSAgICAgICAgZFt0Ml0gPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGQpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbdDFdLCAyKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSAxMiwgMzQsIDU2Ci0gICAgICAgIG9yaWcgPSB0aW1lZGVsdGEoKmFyZ3MpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLQotICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6Ci0gICAgICAgIHQxID0gdGltZWRlbHRhKDIsIDMsIDQpCi0gICAgICAgIHQyID0gdGltZWRlbHRhKDIsIDMsIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCi0KLSAgICAgICAgZm9yIGFyZ3MgaW4gKDMsIDMsIDMpLCAoMiwgNCwgNCksICgyLCAzLCA1KToKLSAgICAgICAgICAgIHQyID0gdGltZWRlbHRhKCphcmdzKSAgICMgdGhpcyBpcyBsYXJnZXIgdGhhbiB0MQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8PSB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+PSB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSAhPSB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiAhPSB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPT0gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyID09IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+PSB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPD0gdDEpCi0KLSAgICAgICAgZm9yIGJhZGFyZyBpbiBPVEhFUlNUVUZGOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSA9PSBiYWRhcmcsIEZhbHNlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSAhPSBiYWRhcmcsIFRydWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyA9PSB0MSwgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZGFyZyAhPSB0MSwgVHJ1ZSkKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDw9IGJhZGFyZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA8IGJhZGFyZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+IGJhZGFyZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA+PSBiYWRhcmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDw9IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA+PSB0MSkKLQotICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKLSAgICAgICAgdGQgPSB0aW1lZGVsdGEKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0KLSAgICAgICAgZXEoc3RyKHRkKDEpKSwgIjEgZGF5LCAwOjAwOjAwIikKLSAgICAgICAgZXEoc3RyKHRkKC0xKSksICItMSBkYXksIDA6MDA6MDAiKQotICAgICAgICBlcShzdHIodGQoMikpLCAiMiBkYXlzLCAwOjAwOjAwIikKLSAgICAgICAgZXEoc3RyKHRkKC0yKSksICItMiBkYXlzLCAwOjAwOjAwIikKLQotICAgICAgICBlcShzdHIodGQoaG91cnM9MTIsIG1pbnV0ZXM9NTgsIHNlY29uZHM9NTkpKSwgIjEyOjU4OjU5IikKLSAgICAgICAgZXEoc3RyKHRkKGhvdXJzPTIsIG1pbnV0ZXM9Mywgc2Vjb25kcz00KSksICIyOjAzOjA0IikKLSAgICAgICAgZXEoc3RyKHRkKHdlZWtzPS0zMCwgaG91cnM9MjMsIG1pbnV0ZXM9MTIsIHNlY29uZHM9MzQpKSwKLSAgICAgICAgICAgIi0yMTAgZGF5cywgMjM6MTI6MzQiKQotCi0gICAgICAgIGVxKHN0cih0ZChtaWxsaXNlY29uZHM9MSkpLCAiMDowMDowMC4wMDEwMDAiKQotICAgICAgICBlcShzdHIodGQobWljcm9zZWNvbmRzPTMpKSwgIjA6MDA6MDAuMDAwMDAzIikKLQotICAgICAgICBlcShzdHIodGQoZGF5cz05OTk5OTk5OTksIGhvdXJzPTIzLCBtaW51dGVzPTU5LCBzZWNvbmRzPTU5LAotICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcz05OTk5OTkpKSwKLSAgICAgICAgICAgIjk5OTk5OTk5OSBkYXlzLCAyMzo1OTo1OS45OTk5OTkiKQotCi0gICAgZGVmIHRlc3RfcmVwcihzZWxmKToKLSAgICAgICAgbmFtZSA9ICdkYXRldGltZS4nICsgc2VsZi50aGVjbGFzcy5fX25hbWVfXwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEpIiAlIG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDEwLCAyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEwLCAyKSIgJSBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygtMTAsIDIsIDQwMDAwMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICIlcygtMTAsIDIsIDQwMDAwMCkiICUgbmFtZSkKLQotICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKLSAgICAgICAgZm9yIHRkIGluICh0aW1lZGVsdGEoZGF5cz05OTk5OTk5OTksIGhvdXJzPTIzLCBtaW51dGVzPTU5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPTU5LCBtaWNyb3NlY29uZHM9OTk5OTk5KSwKLSAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoZGF5cz0tOTk5OTk5OTk5KSwKLSAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEoZGF5cz0tOTk5OTk5OTk5LCBzZWNvbmRzPTEpLAotICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShkYXlzPTEsIHNlY29uZHM9MiwgbWljcm9zZWNvbmRzPTMpKToKLQotICAgICAgICAgICAgIyBWZXJpZnkgdGQgLT4gc3RyaW5nIC0+IHRkIGlkZW50aXR5LgotICAgICAgICAgICAgcyA9IHJlcHIodGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCdkYXRldGltZS4nKSkKLSAgICAgICAgICAgIHMgPSBzWzk6XQotICAgICAgICAgICAgdGQyID0gZXZhbChzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZCwgdGQyKQotCi0gICAgICAgICAgICAjIFZlcmlmeSBpZGVudGl0eSB2aWEgcmVjb25zdHJ1Y3RpbmcgZnJvbSBwaWVjZXMuCi0gICAgICAgICAgICB0ZDIgPSB0aW1lZGVsdGEodGQuZGF5cywgdGQuc2Vjb25kcywgdGQubWljcm9zZWNvbmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZCwgdGQyKQotCi0gICAgZGVmIHRlc3RfcmVzb2x1dGlvbl9pbmZvKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aW1lZGVsdGEubWluLCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWVkZWx0YS5tYXggPiB0aW1lZGVsdGEubWluKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVkZWx0YS5taW4sIHRpbWVkZWx0YSgtOTk5OTk5OTk5KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEubWF4LCB0aW1lZGVsdGEoOTk5OTk5OTk5LCAyNCozNjAwLTEsIDFlNi0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lZGVsdGEucmVzb2x1dGlvbiwgdGltZWRlbHRhKDAsIDAsIDEpKQotCi0gICAgZGVmIHRlc3Rfb3ZlcmZsb3coc2VsZik6Ci0gICAgICAgIHRpbnkgPSB0aW1lZGVsdGEucmVzb2x1dGlvbgotCi0gICAgICAgIHRkID0gdGltZWRlbHRhLm1pbiArIHRpbnkKLSAgICAgICAgdGQgLT0gdGlueSAgIyBubyBwcm9ibGVtCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHRkLl9fc3ViX18sIHRpbnkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHRkLl9fYWRkX18sIC10aW55KQotCi0gICAgICAgIHRkID0gdGltZWRlbHRhLm1heCAtIHRpbnkKLSAgICAgICAgdGQgKz0gdGlueSAgIyBubyBwcm9ibGVtCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHRkLl9fYWRkX18sIHRpbnkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHRkLl9fc3ViX18sIC10aW55KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogLXRpbWVkZWx0YS5tYXgpCi0KLSAgICBkZWYgdGVzdF9taWNyb3NlY29uZF9yb3VuZGluZyhzZWxmKToKLSAgICAgICAgdGQgPSB0aW1lZGVsdGEKLSAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCi0KLSAgICAgICAgIyBTaW5nbGUtZmllbGQgcm91bmRpbmcuCi0gICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0wLjQvMTAwMCksIHRkKDApKSAgICAjIHJvdW5kcyB0byAwCi0gICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMC40LzEwMDApLCB0ZCgwKSkgICAgIyByb3VuZHMgdG8gMAotICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC42LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9MSkpCi0gICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMC42LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9LTEpKQotCi0gICAgICAgICMgUm91bmRpbmcgZHVlIHRvIGNvbnRyaWJ1dGlvbnMgZnJvbSBtb3JlIHRoYW4gb25lIGZpZWxkLgotICAgICAgICB1c19wZXJfaG91ciA9IDM2MDBlNgotICAgICAgICB1c19wZXJfZGF5ID0gdXNfcGVyX2hvdXIgKiAyNAotICAgICAgICBlcSh0ZChkYXlzPS40L3VzX3Blcl9kYXkpLCB0ZCgwKSkKLSAgICAgICAgZXEodGQoaG91cnM9LjIvdXNfcGVyX2hvdXIpLCB0ZCgwKSkKLSAgICAgICAgZXEodGQoZGF5cz0uNC91c19wZXJfZGF5LCBob3Vycz0uMi91c19wZXJfaG91ciksIHRkKG1pY3Jvc2Vjb25kcz0xKSkKLQotICAgICAgICBlcSh0ZChkYXlzPS0uNC91c19wZXJfZGF5KSwgdGQoMCkpCi0gICAgICAgIGVxKHRkKGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKDApKQotICAgICAgICBlcSh0ZChkYXlzPS0uNC91c19wZXJfZGF5LCBob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9LTEpKQotCi0gICAgZGVmIHRlc3RfbWFzc2l2ZV9ub3JtYWxpemF0aW9uKHNlbGYpOgotICAgICAgICB0ZCA9IHRpbWVkZWx0YShtaWNyb3NlY29uZHM9LTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRkLmRheXMsIHRkLnNlY29uZHMsIHRkLm1pY3Jvc2Vjb25kcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKC0xLCAyNCozNjAwLTEsIDk5OTk5OSkpCi0KLSAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhKDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhKDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhKDAsIDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0aW1lZGVsdGEoMCkpCi0KLSAgICBkZWYgdGVzdF9zdWJjbGFzc190aW1lZGVsdGEoc2VsZik6Ci0KLSAgICAgICAgY2xhc3MgVCh0aW1lZGVsdGEpOgotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGZyb21fdGQodGQpOgotICAgICAgICAgICAgICAgIHJldHVybiBUKHRkLmRheXMsIHRkLnNlY29uZHMsIHRkLm1pY3Jvc2Vjb25kcykKLQotICAgICAgICAgICAgZGVmIGFzX2hvdXJzKHNlbGYpOgotICAgICAgICAgICAgICAgIHN1bSA9IChzZWxmLmRheXMgKiAyNCArCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2Vjb25kcyAvIDM2MDAuMCArCi0gICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWljcm9zZWNvbmRzIC8gMzYwMGU2KQotICAgICAgICAgICAgICAgIHJldHVybiByb3VuZChzdW0pCi0KLSAgICAgICAgdDEgPSBUKGRheXM9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDEpIGlzIFQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuYXNfaG91cnMoKSwgMjQpCi0KLSAgICAgICAgdDIgPSBUKGRheXM9LTEsIHNlY29uZHM9LTM2MDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQyKSBpcyBUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLmFzX2hvdXJzKCksIC0yNSkKLQotICAgICAgICB0MyA9IHQxICsgdDIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodDMpIGlzIHRpbWVkZWx0YSkKLSAgICAgICAgdDQgPSBULmZyb21fdGQodDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQ0KSBpcyBUKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmRheXMsIHQ0LmRheXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuc2Vjb25kcywgdDQuc2Vjb25kcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My5taWNyb3NlY29uZHMsIHQ0Lm1pY3Jvc2Vjb25kcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDMpLCBzdHIodDQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ0LmFzX2hvdXJzKCksIC0xKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBkYXRlIHRlc3RzCi0KLWNsYXNzIFRlc3REYXRlT25seSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBUZXN0cyBoZXJlIHdvbid0IHBhc3MgaWYgYWxzbyBydW4gb24gZGF0ZXRpbWUgb2JqZWN0cywgc28gZG9uJ3QKLSAgICAjIHN1YmNsYXNzIHRoaXMgdG8gdGVzdCBkYXRldGltZXMgdG9vLgotCi0gICAgZGVmIHRlc3RfZGVsdGFfbm9uX2RheXNfaWdub3JlZChzZWxmKToKLSAgICAgICAgZHQgPSBkYXRlKDIwMDAsIDEsIDIpCi0gICAgICAgIGRlbHRhID0gdGltZWRlbHRhKGRheXM9MSwgaG91cnM9MiwgbWludXRlcz0zLCBzZWNvbmRzPTQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kcz01KQotICAgICAgICBkYXlzID0gdGltZWRlbHRhKGRlbHRhLmRheXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF5cywgdGltZWRlbHRhKDEpKQotCi0gICAgICAgIGR0MiA9IGR0ICsgZGVsdGEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0ICsgZGF5cykKLQotICAgICAgICBkdDIgPSBkZWx0YSArIGR0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCi0KLSAgICAgICAgZHQyID0gZHQgLSBkZWx0YQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgLSBkYXlzKQotCi0gICAgICAgIGRlbHRhID0gLWRlbHRhCi0gICAgICAgIGRheXMgPSB0aW1lZGVsdGEoZGVsdGEuZGF5cykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXlzLCB0aW1lZGVsdGEoLTIpKQotCi0gICAgICAgIGR0MiA9IGR0ICsgZGVsdGEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIsIGR0ICsgZGF5cykKLQotICAgICAgICBkdDIgPSBkZWx0YSArIGR0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLCBkdCArIGRheXMpCi0KLSAgICAgICAgZHQyID0gZHQgLSBkZWx0YQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiwgZHQgLSBkYXlzKQotCi1jbGFzcyBTdWJjbGFzc0RhdGUoZGF0ZSk6Ci0gICAgc3ViX3ZhciA9IDEKLQotY2xhc3MgVGVzdERhdGUoSGFybWxlc3NNaXhlZENvbXBhcmlzb24sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIFRlc3RzIGhlcmUgc2hvdWxkIHBhc3MgZm9yIGJvdGggZGF0ZXMgYW5kIGRhdGV0aW1lcywgZXhjZXB0IGZvciBhCi0gICAgIyBmZXcgdGVzdHMgdGhhdCBUZXN0RGF0ZVRpbWUgb3ZlcnJpZGVzLgotCi0gICAgdGhlY2xhc3MgPSBkYXRlCi0KLSAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC55ZWFyLCAyMDAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1vbnRoLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRheSwgMSkKLQotICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKLSAgICAgICAgZm9yIGR0IGluIChzZWxmLnRoZWNsYXNzKDEsIDIsIDMpLAotICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MudG9kYXkoKSk6Ci0gICAgICAgICAgICAjIFZlcmlmeSBkdCAtPiBzdHJpbmcgLT4gZGF0ZSBpZGVudGl0eS4KLSAgICAgICAgICAgIHMgPSByZXByKGR0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCi0gICAgICAgICAgICBzID0gc1s5Ol0KLSAgICAgICAgICAgIGR0MiA9IGV2YWwocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKLQotICAgICAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgotICAgICAgICAgICAgZHQyID0gc2VsZi50aGVjbGFzcyhkdC55ZWFyLCBkdC5tb250aCwgZHQuZGF5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZHQyKQotCi0gICAgZGVmIHRlc3Rfb3JkaW5hbF9jb252ZXJzaW9ucyhzZWxmKToKLSAgICAgICAgIyBDaGVjayBzb21lIGZpeGVkIHZhbHVlcy4KLSAgICAgICAgZm9yIHksIG0sIGQsIG4gaW4gWygxLCAxLCAxLCAxKSwgICAgICAjIGNhbGVuZGFyIG9yaWdpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDEyLCAzMSwgMzY1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgyLCAxLCAxLCAzNjYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmaXJzdCBleGFtcGxlIGZyb20gIkNhbGVuZHJpY2FsIENhbGN1bGF0aW9ucyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTQ1LCAxMSwgMTIsIDcxMDM0NyldOgotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoeSwgbSwgZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZC50b29yZGluYWwoKSkKLSAgICAgICAgICAgIGZyb21vcmQgPSBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGZyb21vcmQpCi0gICAgICAgICAgICBpZiBoYXNhdHRyKGZyb21vcmQsICJob3VyIik6Ci0gICAgICAgICAgICAjIGlmIHdlJ3JlIGNoZWNraW5nIHNvbWV0aGluZyBmYW5jaWVyIHRoYW4gYSBkYXRlLCB2ZXJpZnkKLSAgICAgICAgICAgICMgdGhlIGV4dHJhIGZpZWxkcyBoYXZlIGJlZW4gemVyb2VkIG91dAotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbW9yZC5ob3VyLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbW9yZC5taW51dGUsIDApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tb3JkLnNlY29uZCwgMCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyb21vcmQubWljcm9zZWNvbmQsIDApCi0KLSAgICAgICAgIyBDaGVjayBmaXJzdCBhbmQgbGFzdCBkYXlzIG9mIHllYXIgc3BvdHRpbHkgYWNyb3NzIHRoZSB3aG9sZQotICAgICAgICAjIHJhbmdlIG9mIHllYXJzIHN1cHBvcnRlZC4KLSAgICAgICAgZm9yIHllYXIgaW4gcmFuZ2UoTUlOWUVBUiwgTUFYWUVBUisxLCA3KToKLSAgICAgICAgICAgICMgVmVyaWZ5ICh5ZWFyLCAxLCAxKSAtPiBvcmRpbmFsIC0+IHksIG0sIGQgaXMgaWRlbnRpdHkuCi0gICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcyh5ZWFyLCAxLCAxKQotICAgICAgICAgICAgbiA9IGQudG9vcmRpbmFsKCkKLSAgICAgICAgICAgIGQyID0gc2VsZi50aGVjbGFzcy5mcm9tb3JkaW5hbChuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMikKLSAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgbW92aW5nIGJhY2sgYSBkYXkgZ2V0cyB0byB0aGUgZW5kIG9mIHllYXItMS4KLSAgICAgICAgICAgIGlmIHllYXIgPiAxOgotICAgICAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4tMSkKLSAgICAgICAgICAgICAgICBkMiA9IHNlbGYudGhlY2xhc3MoeWVhci0xLCAxMiwgMzEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkMikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLnRvb3JkaW5hbCgpLCBuLTEpCi0KLSAgICAgICAgIyBUZXN0IGV2ZXJ5IGRheSBpbiBhIGxlYXAteWVhciBhbmQgYSBub24tbGVhcCB5ZWFyLgotICAgICAgICBkaW0gPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KLSAgICAgICAgZm9yIHllYXIsIGlzbGVhcCBpbiAoMjAwMCwgVHJ1ZSksICgyMDAyLCBGYWxzZSk6Ci0gICAgICAgICAgICBuID0gc2VsZi50aGVjbGFzcyh5ZWFyLCAxLCAxKS50b29yZGluYWwoKQotICAgICAgICAgICAgZm9yIG1vbnRoLCBtYXhkYXkgaW4gemlwKHJhbmdlKDEsIDEzKSwgZGltKToKLSAgICAgICAgICAgICAgICBpZiBtb250aCA9PSAyIGFuZCBpc2xlYXA6Ci0gICAgICAgICAgICAgICAgICAgIG1heGRheSArPSAxCi0gICAgICAgICAgICAgICAgZm9yIGRheSBpbiByYW5nZSgxLCBtYXhkYXkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKHllYXIsIG1vbnRoLCBkYXkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC50b29yZGluYWwoKSwgbikKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzZWxmLnRoZWNsYXNzLmZyb21vcmRpbmFsKG4pKQotICAgICAgICAgICAgICAgICAgICBuICs9IDEKLQotICAgIGRlZiB0ZXN0X2V4dHJlbWVfb3JkaW5hbHMoc2VsZik6Ci0gICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzLm1pbgotICAgICAgICBhID0gc2VsZi50aGVjbGFzcyhhLnllYXIsIGEubW9udGgsIGEuZGF5KSAgIyBnZXQgcmlkIG9mIHRpbWUgcGFydHMKLSAgICAgICAgYW9yZCA9IGEudG9vcmRpbmFsKCkKLSAgICAgICAgYiA9IGEuZnJvbW9yZGluYWwoYW9yZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYS5mcm9tb3JkaW5hbChhb3JkIC0gMSkpCi0KLSAgICAgICAgYiA9IGEgKyB0aW1lZGVsdGEoZGF5cz0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIudG9vcmRpbmFsKCksIGFvcmQgKyAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwoYW9yZCArIDEpKQotCi0gICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzLm1heAotICAgICAgICBhID0gc2VsZi50aGVjbGFzcyhhLnllYXIsIGEubW9udGgsIGEuZGF5KSAgIyBnZXQgcmlkIG9mIHRpbWUgcGFydHMKLSAgICAgICAgYW9yZCA9IGEudG9vcmRpbmFsKCkKLSAgICAgICAgYiA9IGEuZnJvbW9yZGluYWwoYW9yZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYS5mcm9tb3JkaW5hbChhb3JkICsgMSkpCi0KLSAgICAgICAgYiA9IGEgLSB0aW1lZGVsdGEoZGF5cz0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIudG9vcmRpbmFsKCksIGFvcmQgLSAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIHNlbGYudGhlY2xhc3MuZnJvbW9yZGluYWwoYW9yZCAtIDEpKQotCi0gICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgIyBiYWQgeWVhcnMKLSAgICAgICAgc2VsZi50aGVjbGFzcyhNSU5ZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxLCAxKSAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUlOWUVBUi0xLCAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCBNQVhZRUFSKzEsIDEsIDEpCi0gICAgICAgICMgYmFkIG1vbnRocwotICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDEpICAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDEpICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMCwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMTMsIDEpCi0gICAgICAgICMgYmFkIGRheXMKLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDQsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYudGhlY2xhc3MoMjQwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMiwgMzApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDEsIDIsIDI5KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMTAwLCAyLCAyOSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMTkwMCwgMiwgMjkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEsIDMyKQotCi0gICAgZGVmIHRlc3RfaGFzaF9lcXVhbGl0eShzZWxmKToKLSAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxKQotICAgICAgICAjIHNhbWUgdGhpbmcKLSAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKLQotICAgICAgICBkaWMgPSB7ZDogMX0KLSAgICAgICAgZGljW2VdID0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCi0KLSAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxKQotICAgICAgICAjIHNhbWUgdGhpbmcKLSAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKLQotICAgICAgICBkaWMgPSB7ZDogMX0KLSAgICAgICAgZGljW2VdID0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCi0KLSAgICBkZWYgdGVzdF9jb21wdXRhdGlvbnMoc2VsZik6Ci0gICAgICAgIGEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDEsIDMxKQotICAgICAgICBiID0gc2VsZi50aGVjbGFzcygxOTU2LCAxLCAzMSkKLQotICAgICAgICBkaWZmID0gYS1iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5kYXlzLCA0NiozNjUgKyBsZW4ocmFuZ2UoMTk1NiwgMjAwMiwgNCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYuc2Vjb25kcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLm1pY3Jvc2Vjb25kcywgMCkKLQotICAgICAgICBkYXkgPSB0aW1lZGVsdGEoMSkKLSAgICAgICAgd2VlayA9IHRpbWVkZWx0YSg3KQotICAgICAgICBhID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF5ICsgYSwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gZGF5LCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1kYXkgKyBhLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDIsIDIzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAzLCAzLCAxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAxLCAzLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIHdlZWspIC0gYSwgd2VlaykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYSArIGRheSkgLSBhLCBkYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSB3ZWVrKSAtIGEsIC13ZWVrKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gZGF5KSAtIGEsIC1kYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhICsgd2VlayksIC13ZWVrKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIGRheSksIC1kYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gd2VlayksIHdlZWspCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gZGF5KSwgZGF5KQotCi0gICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCi0gICAgICAgIGZvciBpIGluIDEsIDEsIDEuMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCi0KLSAgICAgICAgIyBkZWx0YSAtIGRhdGUgaXMgc2Vuc2VsZXNzLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5IC0gYSkKLSAgICAgICAgIyBtaXhpbmcgZGF0ZSBhbmQgKGRlbHRhIG9yIGRhdGUpIHZpYSAqIG9yIC8vIGlzIHNlbnNlbGVzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5ICogYSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBkYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgLy8gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8gZGF5KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAqIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGEpCi0gICAgICAgICMgZGF0ZSArIGRhdGUgaXMgc2Vuc2VsZXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhICsgYSkKLQotICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgotICAgICAgICB0aW55ID0gc2VsZi50aGVjbGFzcy5yZXNvbHV0aW9uCi0KLSAgICAgICAgZm9yIGRlbHRhIGluIFt0aW55LCB0aW1lZGVsdGEoMSksIHRpbWVkZWx0YSgyKV06Ci0gICAgICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MubWluICsgZGVsdGEKLSAgICAgICAgICAgIGR0IC09IGRlbHRhICAjIG5vIHByb2JsZW0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fc3ViX18sIGRlbHRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZHQuX19hZGRfXywgLWRlbHRhKQotCi0gICAgICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MubWF4IC0gZGVsdGEKLSAgICAgICAgICAgIGR0ICs9IGRlbHRhICAjIG5vIHByb2JsZW0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGR0Ll9fYWRkX18sIGRlbHRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZHQuX19zdWJfXywgLWRlbHRhKQotCi0gICAgZGVmIHRlc3RfZnJvbXRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgaW1wb3J0IHRpbWUKLQotICAgICAgICAjIFRyeSBhbiBhcmJpdHJhcnkgZml4ZWQgdmFsdWUuCi0gICAgICAgIHllYXIsIG1vbnRoLCBkYXkgPSAxOTk5LCA5LCAxOQotICAgICAgICB0cyA9IHRpbWUubWt0aW1lKCh5ZWFyLCBtb250aCwgZGF5LCAwLCAwLCAwLCAwLCAwLCAtMSkpCi0gICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAodHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC55ZWFyLCB5ZWFyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubW9udGgsIG1vbnRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGF5LCBkYXkpCi0KLSAgICBkZWYgdGVzdF9pbnNhbmVfZnJvbXRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCi0gICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKLSAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKLSAgICAgICAgIyByZXN1bHRzISkuCi0gICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKLQotICAgIGRlZiB0ZXN0X3RvZGF5KHNlbGYpOgotICAgICAgICBpbXBvcnQgdGltZQotCi0gICAgICAgICMgV2UgY2xhaW0gdGhhdCB0b2RheSgpIGlzIGxpa2UgZnJvbXRpbWVzdGFtcCh0aW1lLnRpbWUoKSksIHNvCi0gICAgICAgICMgcHJvdmUgaXQuCi0gICAgICAgIGZvciBkdW1teSBpbiByYW5nZSgzKToKLSAgICAgICAgICAgIHRvZGF5ID0gc2VsZi50aGVjbGFzcy50b2RheSgpCi0gICAgICAgICAgICB0cyA9IHRpbWUudGltZSgpCi0gICAgICAgICAgICB0b2RheWFnYWluID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQotICAgICAgICAgICAgaWYgdG9kYXkgPT0gdG9kYXlhZ2FpbjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgIyBUaGVyZSBhcmUgc2V2ZXJhbCBsZWdpdCByZWFzb25zIHRoYXQgY291bGQgZmFpbDoKLSAgICAgICAgICAgICMgMS4gSXQgcmVjZW50bHkgYmVjYW1lIG1pZG5pZ2h0LCBiZXR3ZWVuIHRoZSB0b2RheSgpIGFuZCB0aGUKLSAgICAgICAgICAgICMgICAgdGltZSgpIGNhbGxzLgotICAgICAgICAgICAgIyAyLiBUaGUgcGxhdGZvcm0gdGltZSgpIGhhcyBzdWNoIGZpbmUgcmVzb2x1dGlvbiB0aGF0IHdlJ2xsCi0gICAgICAgICAgICAjICAgIG5ldmVyIGdldCB0aGUgc2FtZSB2YWx1ZSB0d2ljZS4KLSAgICAgICAgICAgICMgMy4gVGhlIHBsYXRmb3JtIHRpbWUoKSBoYXMgcG9vciByZXNvbHV0aW9uLCBhbmQgd2UganVzdAotICAgICAgICAgICAgIyAgICBoYXBwZW5lZCB0byBjYWxsIHRvZGF5KCkgcmlnaHQgYmVmb3JlIGEgcmVzb2x1dGlvbiBxdWFudHVtCi0gICAgICAgICAgICAjICAgIGJvdW5kYXJ5LgotICAgICAgICAgICAgIyA0LiBUaGUgc3lzdGVtIGNsb2NrIGdvdCBmaWRkbGVkIGJldHdlZW4gY2FsbHMuCi0gICAgICAgICAgICAjIEluIGFueSBjYXNlLCB3YWl0IGEgbGl0dGxlIHdoaWxlIGFuZCB0cnkgYWdhaW4uCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKLQotICAgICAgICAjIEl0IHdvcmtlZCBvciBpdCBkaWRuJ3QuICBJZiBpdCBkaWRuJ3QsIGFzc3VtZSBpdCdzIHJlYXNvbiAjMiwgYW5kCi0gICAgICAgICMgbGV0IHRoZSB0ZXN0IHBhc3MgaWYgdGhleSdyZSB3aXRoaW4gaGFsZiBhIHNlY29uZCBvZiBlYWNoIG90aGVyLgotICAgICAgICBzZWxmLmFzc2VydFRydWUodG9kYXkgPT0gdG9kYXlhZ2FpbiBvcgotICAgICAgICAgICAgICAgICAgICAgICAgYWJzKHRvZGF5YWdhaW4gLSB0b2RheSkgPCB0aW1lZGVsdGEoc2Vjb25kcz0wLjUpKQotCi0gICAgZGVmIHRlc3Rfd2Vla2RheShzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNyk6Ci0gICAgICAgICAgICAjIE1hcmNoIDQsIDIwMDIgaXMgYSBNb25kYXkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0K2kpLndlZWtkYXkoKSwgaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0K2kpLmlzb3dlZWtkYXkoKSwgaSsxKQotICAgICAgICAgICAgIyBKYW51YXJ5IDIsIDE5NTYgaXMgYSBNb25kYXkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpLndlZWtkYXkoKSwgaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpLmlzb3dlZWtkYXkoKSwgaSsxKQotCi0gICAgZGVmIHRlc3RfaXNvY2FsZW5kYXIoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgZXhhbXBsZXMgZnJvbQotICAgICAgICAjIGh0dHA6Ly93d3cucGh5cy51dS5ubC9+dmdlbnQvY2FsZW5kYXIvaXNvY2FsZW5kYXIuaHRtCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMywgMTIsIDIyK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMDMsIDUyLCBpKzEpKQotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMywgMTIsIDI5KSArIHRpbWVkZWx0YShpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA0LCAxLCBpKzEpKQotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwNCwgMSwgNStpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA0LCAyLCBpKzEpKQotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwOSwgMTIsIDIxK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvY2FsZW5kYXIoKSwgKDIwMDksIDUyLCBpKzEpKQotICAgICAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwOSwgMTIsIDI4KSArIHRpbWVkZWx0YShpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmlzb2NhbGVuZGFyKCksICgyMDA5LCA1MywgaSsxKSkKLSAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMTAsIDEsIDQraSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpLCAoMjAxMCwgMSwgaSsxKSkKLQotICAgIGRlZiB0ZXN0X2lzb19sb25nX3llYXJzKHNlbGYpOgotICAgICAgICAjIENhbGN1bGF0ZSBsb25nIElTTyB5ZWFycyBhbmQgY29tcGFyZSB0byB0YWJsZSBmcm9tCi0gICAgICAgICMgaHR0cDovL3d3dy5waHlzLnV1Lm5sL352Z2VudC9jYWxlbmRhci9pc29jYWxlbmRhci5odG0KLSAgICAgICAgSVNPX0xPTkdfWUVBUlNfVEFCTEUgPSAiIiIKLSAgICAgICAgICAgICAgNCAgIDMyICAgNjAgICA4OAotICAgICAgICAgICAgICA5ICAgMzcgICA2NSAgIDkzCi0gICAgICAgICAgICAgMTUgICA0MyAgIDcxICAgOTkKLSAgICAgICAgICAgICAyMCAgIDQ4ICAgNzYKLSAgICAgICAgICAgICAyNiAgIDU0ICAgODIKLQotICAgICAgICAgICAgMTA1ICAxMzMgIDE2MSAgMTg5Ci0gICAgICAgICAgICAxMTEgIDEzOSAgMTY3ICAxOTUKLSAgICAgICAgICAgIDExNiAgMTQ0ICAxNzIKLSAgICAgICAgICAgIDEyMiAgMTUwICAxNzgKLSAgICAgICAgICAgIDEyOCAgMTU2ICAxODQKLQotICAgICAgICAgICAgMjAxICAyMjkgIDI1NyAgMjg1Ci0gICAgICAgICAgICAyMDcgIDIzNSAgMjYzICAyOTEKLSAgICAgICAgICAgIDIxMiAgMjQwICAyNjggIDI5NgotICAgICAgICAgICAgMjE4ICAyNDYgIDI3NAotICAgICAgICAgICAgMjI0ICAyNTIgIDI4MAotCi0gICAgICAgICAgICAzMDMgIDMzMSAgMzU5ICAzODcKLSAgICAgICAgICAgIDMwOCAgMzM2ICAzNjQgIDM5MgotICAgICAgICAgICAgMzE0ICAzNDIgIDM3MCAgMzk4Ci0gICAgICAgICAgICAzMjAgIDM0OCAgMzc2Ci0gICAgICAgICAgICAzMjUgIDM1MyAgMzgxCi0gICAgICAgICIiIgotICAgICAgICBpc29fbG9uZ195ZWFycyA9IHNvcnRlZChtYXAoaW50LCBJU09fTE9OR19ZRUFSU19UQUJMRS5zcGxpdCgpKSkKLSAgICAgICAgTCA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDQwMCk6Ci0gICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygyMDAwK2ksIDEyLCAzMSkKLSAgICAgICAgICAgIGQxID0gc2VsZi50aGVjbGFzcygxNjAwK2ksIDEyLCAzMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29jYWxlbmRhcigpWzE6XSwgZDEuaXNvY2FsZW5kYXIoKVsxOl0pCi0gICAgICAgICAgICBpZiBkLmlzb2NhbGVuZGFyKClbMV0gPT0gNTM6Ci0gICAgICAgICAgICAgICAgTC5hcHBlbmQoaSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMLCBpc29fbG9uZ195ZWFycykKLQotICAgIGRlZiB0ZXN0X2lzb2Zvcm1hdChzZWxmKToKLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMiwgMywgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDAwMi0wMy0wMiIpCi0KLSAgICBkZWYgdGVzdF9jdGltZShzZWxmKToKLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksICJTYXQgTWFyICAyIDAwOjAwOjAwIDIwMDIiKQotCi0gICAgZGVmIHRlc3Rfc3RyZnRpbWUoc2VsZik6Ci0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDUsIDMsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgibTolbSBkOiVkIHk6JXkiKSwgIm06MDMgZDowMiB5OjA1IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIiKSwgIiIpICMgU0YgYnVnICM3NjEzMzcKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCd4JyoxMDAwKSwgJ3gnKjEwMDApICMgU0YgYnVnICMxNTU2Nzg0Ci0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LnN0cmZ0aW1lKSAjIG5lZWRzIGFuIGFyZwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuc3RyZnRpbWUsICJvbmUiLCAidHdvIikgIyB0b28gbWFueSBhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgNDIpICMgYXJnIHdyb25nIHR5cGUKLQotICAgICAgICAjIHRlc3QgdGhhdCB1bmljb2RlIGlucHV0IGlzIGFsbG93ZWQgKGlzc3VlIDI3ODIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiJW0iKSwgIjAzIikKLQotICAgICAgICAjIEEgbmFpdmUgb2JqZWN0IHJlcGxhY2VzICV6IGFuZCAlWiB3LyBlbXB0eSBzdHJpbmdzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIicleicgJyVaJyIpLCAiJycgJyciKQotCi0gICAgICAgICNtYWtlIHN1cmUgdGhhdCBpbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBoYW5kbGVkIGNvcnJlY3RseQotICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5zdHJmdGltZSwgIiVlIikKLSAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlIikKLSAgICAgICAgI3NlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuc3RyZnRpbWUsICIlIyIpCi0KLSAgICAgICAgI29oIHdlbGwsIHNvbWUgc3lzdGVtcyBqdXN0IGlnbm9yZSB0aG9zZSBpbnZhbGlkIG9uZXMuCi0gICAgICAgICNhdCBsZWFzdCwgZXhjZXJjaXNlIHRoZW0gdG8gbWFrZSBzdXJlIHRoYXQgbm8gY3Jhc2hlcwotICAgICAgICAjYXJlIGdlbmVyYXRlZAotICAgICAgICBmb3IgZiBpbiBbIiVlIiwgIiUiLCAiJSMiXToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0LnN0cmZ0aW1lKGYpCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgI2NoZWNrIHRoYXQgdGhpcyBzdGFuZGFyZCBleHRlbnNpb24gd29ya3MKLSAgICAgICAgdC5zdHJmdGltZSgiJWYiKQotCi0KLSAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6Ci0gICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDA3LCA5LCAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKLQotICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCi0gICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0EnCi0gICAgICAgIGEgPSBBKDIwMDcsIDksIDEwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXygnJyksICdBJykKLQotICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3Mgc3RyZnRpbWUgZ2V0cyBjYWxsZWQKLSAgICAgICAgY2xhc3MgQihzZWxmLnRoZWNsYXNzKToKLSAgICAgICAgICAgIGRlZiBzdHJmdGltZShzZWxmLCBmb3JtYXRfc3BlYyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdCJwotICAgICAgICBiID0gQigyMDA3LCA5LCAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIoZHQpKQotCi0gICAgICAgIGZvciBmbXQgaW4gWyJtOiVtIGQ6JWQgeToleSIsCi0gICAgICAgICAgICAgICAgICAgICJtOiVtIGQ6JWQgeToleSBIOiVIIE06JU0gUzolUyIsCi0gICAgICAgICAgICAgICAgICAgICIleiAlWiIsCi0gICAgICAgICAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Ll9fZm9ybWF0X18oZm10KSwgZHQuc3RyZnRpbWUoZm10KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuX19mb3JtYXRfXyhmbXQpLCAnQicpCi0KLSAgICBkZWYgdGVzdF9yZXNvbHV0aW9uX2luZm8oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MubWluLCBzZWxmLnRoZWNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5tYXgsIHNlbGYudGhlY2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLnJlc29sdXRpb24sIHRpbWVkZWx0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1heCA+IHNlbGYudGhlY2xhc3MubWluKQotCi0gICAgZGVmIHRlc3RfZXh0cmVtZV90aW1lZGVsdGEoc2VsZik6Ci0gICAgICAgIGJpZyA9IHNlbGYudGhlY2xhc3MubWF4IC0gc2VsZi50aGVjbGFzcy5taW4KLSAgICAgICAgIyAzNjUyMDU4IGRheXMsIDIzIGhvdXJzLCA1OSBtaW51dGVzLCA1OSBzZWNvbmRzLCA5OTk5OTkgbWljcm9zZWNvbmRzCi0gICAgICAgIG4gPSAoYmlnLmRheXMqMjQqMzYwMCArIGJpZy5zZWNvbmRzKSoxMDAwMDAwICsgYmlnLm1pY3Jvc2Vjb25kcwotICAgICAgICAjIG4gPT0gMzE1NTM3ODk3NTk5OTk5OTk5IH49IDIqKjU4LjEzCi0gICAgICAgIGp1c3Rhc2JpZyA9IHRpbWVkZWx0YSgwLCAwLCBuKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpZywganVzdGFzYmlnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhlY2xhc3MubWluICsgYmlnLCBzZWxmLnRoZWNsYXNzLm1heCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZWNsYXNzLm1heCAtIGJpZywgc2VsZi50aGVjbGFzcy5taW4pCi0KLSAgICBkZWYgdGVzdF90aW1ldHVwbGUoc2VsZik6Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDcpOgotICAgICAgICAgICAgIyBKYW51YXJ5IDIsIDE5NTYgaXMgYSBNb25kYXkgKDApCi0gICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygxOTU2LCAxLCAyK2kpCi0gICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTk1NiwgMSwgMitpLCAwLCAwLCAwLCBpLCAyK2ksIC0xKSkKLSAgICAgICAgICAgICMgRmVicnVhcnkgMSwgMTk1NiBpcyBhIFdlZG5lc2RheSAoMikKLSAgICAgICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDIsIDEraSkKLSAgICAgICAgICAgIHQgPSBkLnRpbWV0dXBsZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxOTU2LCAyLCAxK2ksIDAsIDAsIDAsICgyK2kpJTcsIDMyK2ksIC0xKSkKLSAgICAgICAgICAgICMgTWFyY2ggMSwgMTk1NiBpcyBhIFRodXJzZGF5ICgzKSwgYW5kIGlzIHRoZSAzMSsyOSsxID0gNjFzdCBkYXkKLSAgICAgICAgICAgICMgb2YgdGhlIHllYXIuCi0gICAgICAgICAgICBkID0gc2VsZi50aGVjbGFzcygxOTU2LCAzLCAxK2kpCi0gICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTk1NiwgMywgMStpLCAwLCAwLCAwLCAoMytpKSU3LCA2MStpLCAtMSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWVhciwgMTk1NikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9tb24sIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWRheSwgMStpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2hvdXIsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbWluLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3NlYywgMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV93ZGF5LCAoMytpKSU3KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3lkYXksIDYxK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faXNkc3QsIC0xKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSA2LCA3LCAyMwotICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKLSAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6Ci0gICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCi0gICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQotCi0gICAgZGVmIHRlc3RfY29tcGFyZShzZWxmKToKLSAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDQpCi0gICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAzLCA0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQotCi0gICAgICAgIGZvciBhcmdzIGluICgzLCAzLCAzKSwgKDIsIDQsIDQpLCAoMiwgMywgNSk6Ci0gICAgICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKLQotICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPCBiYWRhcmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPiBiYWRhcmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPj0gYmFkYXJnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGJhZGFyZyA8PSB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPCB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPiB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPj0gdDEpCi0KLSAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlKHNlbGYpOgotICAgICAgICBvdXIgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDQsIDUpCi0KLSAgICAgICAgIyBPdXIgY2xhc3MgY2FuIGJlIGNvbXBhcmVkIGZvciBlcXVhbGl0eSB0byBvdGhlciBjbGFzc2VzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3VyID09IDEsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgPT0gb3VyLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgIT0gMSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxICE9IG91ciwgVHJ1ZSkKLQotICAgICAgICAjIEJ1dCB0aGUgb3JkZXJpbmcgaXMgdW5kZWZpbmVkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBvdXIgPCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMSA8IG91cikKLQotICAgICAgICAjIFJlcGVhdCB0aG9zZSB0ZXN0cyB3aXRoIGEgZGlmZmVyZW50IGNsYXNzCi0KLSAgICAgICAgY2xhc3MgU29tZUNsYXNzOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRoZWlyID0gU29tZUNsYXNzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgPT0gdGhlaXIsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWlyID09IG91ciwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3VyICE9IHRoZWlyLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWlyICE9IG91ciwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG91ciA8IHRoZWlyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdGhlaXIgPCBvdXIpCi0KLSAgICAgICAgIyBIb3dldmVyLCBpZiB0aGUgb3RoZXIgY2xhc3MgZXhwbGljaXRseSBkZWZpbmVzIG9yZGVyaW5nCi0gICAgICAgICMgcmVsYXRpdmUgdG8gb3VyIGNsYXNzLCBpdCBpcyBhbGxvd2VkIHRvIGRvIHNvCi0KLSAgICAgICAgY2xhc3MgTGFyZ2VyVGhhbkFueXRoaW5nOgotICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgTGFyZ2VyVGhhbkFueXRoaW5nKQotICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uob3RoZXIsIExhcmdlclRoYW5Bbnl0aGluZykKLSAgICAgICAgICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZShvdGhlciwgTGFyZ2VyVGhhbkFueXRoaW5nKQotICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKG90aGVyLCBMYXJnZXJUaGFuQW55dGhpbmcpCi0gICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIHRoZWlyID0gTGFyZ2VyVGhhbkFueXRoaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgPT0gdGhlaXIsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWlyID09IG91ciwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3VyICE9IHRoZWlyLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZWlyICE9IG91ciwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXIgPCB0aGVpciwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVpciA8IG91ciwgRmFsc2UpCi0KLSAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgotICAgICAgICAjIEFsbCBkYXRlcyBhcmUgY29uc2lkZXJlZCB0cnVlLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGVjbGFzcy5taW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZWNsYXNzLm1heCkKLQotICAgIGRlZiB0ZXN0X3N0cmZ0aW1lX291dF9vZl9yYW5nZShzZWxmKToKLSAgICAgICAgIyBGb3IgbmFzdHkgdGVjaG5pY2FsIHJlYXNvbnMsIHdlIGNhbid0IGhhbmRsZSB5ZWFycyBiZWZvcmUgMTkwMC4KLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscygxOTAwLCAxLCAxKS5zdHJmdGltZSgiJVkiKSwgIjE5MDAiKQotICAgICAgICBmb3IgeSBpbiAxLCA0OSwgNTEsIDk5LCAxMDAsIDEwMDAsIDE4OTk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbHMoeSwgMSwgMSkuc3RyZnRpbWUsICIlWSIpCi0KLSAgICBkZWYgdGVzdF9yZXBsYWNlKHNlbGYpOgotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIGFyZ3MgPSBbMSwgMiwgM10KLSAgICAgICAgYmFzZSA9IGNscygqYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKLQotICAgICAgICBpID0gMAotICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoInllYXIiLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb250aCIsIDMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRheSIsIDQpKToKLSAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCi0gICAgICAgICAgICBuZXdhcmdzW2ldID0gbmV3dmFsCi0gICAgICAgICAgICBleHBlY3RlZCA9IGNscygqbmV3YXJncykKLSAgICAgICAgICAgIGdvdCA9IGJhc2UucmVwbGFjZSgqKntuYW1lOiBuZXd2YWx9KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQotICAgICAgICAgICAgaSArPSAxCi0KLSAgICAgICAgIyBPdXQgb2YgYm91bmRzLgotICAgICAgICBiYXNlID0gY2xzKDIwMDAsIDIsIDI5KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIHllYXI9MjAwMSkKLQotICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGUoc2VsZik6Ci0KLSAgICAgICAgY2xhc3MgQyhzZWxmLnRoZWNsYXNzKToKLSAgICAgICAgICAgIHRoZUFuc3dlciA9IDQyCi0KLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dzKToKLSAgICAgICAgICAgICAgICB0ZW1wID0ga3dzLmNvcHkoKQotICAgICAgICAgICAgICAgIGV4dHJhID0gdGVtcC5wb3AoJ2V4dHJhJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRoZWNsYXNzLl9fbmV3X18oY2xzLCAqYXJncywgKip0ZW1wKQotICAgICAgICAgICAgICAgIHJlc3VsdC5leHRyYSA9IGV4dHJhCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICAgICAgICBkZWYgbmV3bWV0aChzZWxmLCBzdGFydCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgc2VsZi55ZWFyICsgc2VsZi5tb250aAotCi0gICAgICAgIGFyZ3MgPSAyMDAzLCA0LCAxNAotCi0gICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCi0gICAgICAgIGR0MiA9IEMoKmFyZ3MsICoqeydleHRyYSc6IDd9KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLl9fY2xhc3NfXywgQykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIudGhlQW5zd2VyLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuZXh0cmEsIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQxLnRvb3JkaW5hbCgpLCBkdDIudG9vcmRpbmFsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLm5ld21ldGgoLTcpLCBkdDEueWVhciArIGR0MS5tb250aCAtIDcpCi0KLSAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzc19kYXRlKHNlbGYpOgotCi0gICAgICAgIGFyZ3MgPSA2LCA3LCAyMwotICAgICAgICBvcmlnID0gU3ViY2xhc3NEYXRlKCphcmdzKQotICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKLSAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKLSAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCi0KLSAgICBkZWYgdGVzdF9iYWNrZG9vcl9yZXNpc3RhbmNlKHNlbGYpOgotICAgICAgICAjIEZvciBmYXN0IHVucGlja2xpbmcsIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIGEgcGlja2xlIGJ5dGUgc3RyaW5nLgotICAgICAgICAjIFRoaXMgaXMgYSBsb3ctb3ZlcmhlYWQgYmFja2Rvb3IuICBBIHVzZXIgY2FuIChieSBpbnRlbnQgb3IKLSAgICAgICAgIyBtaXN0YWtlKSBwYXNzIGEgc3RyaW5nIGRpcmVjdGx5LCB3aGljaCAoaWYgaXQncyB0aGUgcmlnaHQgbGVuZ3RoKQotICAgICAgICAjIHdpbGwgZ2V0IHRyZWF0ZWQgbGlrZSBhIHBpY2tsZSwgYW5kIGJ5cGFzcyB0aGUgbm9ybWFsIHNhbml0eQotICAgICAgICAjIGNoZWNrcyBpbiB0aGUgY29uc3RydWN0b3IuICBUaGlzIGNhbiBjcmVhdGUgaW5zYW5lIG9iamVjdHMuCi0gICAgICAgICMgVGhlIGNvbnN0cnVjdG9yIGRvZXNuJ3Qgd2FudCB0byBidXJuIHRoZSB0aW1lIHRvIHZhbGlkYXRlIGFsbAotICAgICAgICAjIGZpZWxkcywgYnV0IGRvZXMgY2hlY2sgdGhlIG1vbnRoIGZpZWxkLiAgVGhpcyBzdG9wcywgZS5nLiwKLSAgICAgICAgIyBkYXRldGltZS5kYXRldGltZSgnMTk5NS0wMy0yNScpIGZyb20geWllbGRpbmcgYW4gaW5zYW5lIG9iamVjdC4KLSAgICAgICAgYmFzZSA9IGInMTk5NS0wMy0yNScKLSAgICAgICAgaWYgbm90IGlzc3ViY2xhc3Moc2VsZi50aGVjbGFzcywgZGF0ZXRpbWUpOgotICAgICAgICAgICAgYmFzZSA9IGJhc2VbOjRdCi0gICAgICAgIGZvciBtb250aF9ieXRlIGluIGInOScsIGInXDAnLCBiJ1xyJywgYidceGZmJzoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGVjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVs6Ml0gKyBtb250aF9ieXRlICsgYmFzZVszOl0pCi0gICAgICAgIGZvciBvcmRfYnl0ZSBpbiByYW5nZSgxLCAxMyk6Ci0gICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAgYmVjYXVzZSBvZiB0aGUgbW9udGggYnl0ZSBhbG9uZS4gIElmCi0gICAgICAgICAgICAjIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VzIHRvIGRvIG1vcmUtY2FyZWZ1bCBjaGVja2luZywgaXQgbWF5Ci0gICAgICAgICAgICAjIGJsb3cgdXAgYmVjYXVzZSBvdGhlciBmaWVsZHMgYXJlIGluc2FuZS4KLSAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoYmFzZVs6Ml0gKyBieXRlcyhbb3JkX2J5dGVdKSArIGJhc2VbMzpdKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBkYXRldGltZSB0ZXN0cwotCi1jbGFzcyBTdWJjbGFzc0RhdGV0aW1lKGRhdGV0aW1lKToKLSAgICBzdWJfdmFyID0gMQotCi1jbGFzcyBUZXN0RGF0ZVRpbWUoVGVzdERhdGUpOgotCi0gICAgdGhlY2xhc3MgPSBkYXRldGltZQotCi0gICAgZGVmIHRlc3RfYmFzaWNfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDEyLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnllYXIsIDIwMDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubW9udGgsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZGF5LCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmhvdXIsIDEyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pbnV0ZSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5zZWNvbmQsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWljcm9zZWNvbmQsIDApCi0KLSAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzX25vbnplcm8oc2VsZik6Ci0gICAgICAgICMgTWFrZSBzdXJlIGFsbCBhdHRyaWJ1dGVzIGFyZSBub24temVybyBzbyBidWdzIGluCi0gICAgICAgICMgYml0LXNoaWZ0aW5nIGFjY2VzcyBzaG93IHVwLgotICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTIsIDU5LCA1OSwgODAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC55ZWFyLCAyMDAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1vbnRoLCAzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRheSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5ob3VyLCAxMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taW51dGUsIDU5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnNlY29uZCwgNTkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQubWljcm9zZWNvbmQsIDgwMDApCi0KLSAgICBkZWYgdGVzdF9yb3VuZHRyaXAoc2VsZik6Ci0gICAgICAgIGZvciBkdCBpbiAoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0LCA1LCA2LCA3KSwKLSAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLm5vdygpKToKLSAgICAgICAgICAgICMgVmVyaWZ5IGR0IC0+IHN0cmluZyAtPiBkYXRldGltZSBpZGVudGl0eS4KLSAgICAgICAgICAgIHMgPSByZXByKGR0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgnZGF0ZXRpbWUuJykpCi0gICAgICAgICAgICBzID0gc1s5Ol0KLSAgICAgICAgICAgIGR0MiA9IGV2YWwocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGR0MikKLQotICAgICAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgotICAgICAgICAgICAgZHQyID0gc2VsZi50aGVjbGFzcyhkdC55ZWFyLCBkdC5tb250aCwgZHQuZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdC5ob3VyLCBkdC5taW51dGUsIGR0LnNlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQubWljcm9zZWNvbmQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBkdDIpCi0KLSAgICBkZWYgdGVzdF9pc29mb3JtYXQoc2VsZik6Ci0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDIsIDQsIDUsIDEsIDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAgICAiMDAwMi0wMy0wMlQwNDowNTowMS4wMDAxMjMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCdUJyksICIwMDAyLTAzLTAyVDA0OjA1OjAxLjAwMDEyMyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoJyAnKSwgIjAwMDItMDMtMDIgMDQ6MDU6MDEuMDAwMTIzIikKLSAgICAgICAgIyBzdHIgaXMgSVNPIGZvcm1hdCB3aXRoIHRoZSBzZXBhcmF0b3IgZm9yY2VkIHRvIGEgYmxhbmsuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQpLCAiMDAwMi0wMy0wMiAwNDowNTowMS4wMDAxMjMiKQotCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIsIDMsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgICAgIjAwMDItMDMtMDJUMDA6MDA6MDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCdUJyksICIwMDAyLTAzLTAyVDAwOjAwOjAwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgnICcpLCAiMDAwMi0wMy0wMiAwMDowMDowMCIpCi0gICAgICAgICMgc3RyIGlzIElTTyBmb3JtYXQgd2l0aCB0aGUgc2VwYXJhdG9yIGZvcmNlZCB0byBhIGJsYW5rLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0KSwgIjAwMDItMDMtMDIgMDA6MDA6MDAiKQotCi0gICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgotICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwNywgOSwgMTAsIDQsIDUsIDEsIDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKLQotICAgICAgICAjIGNoZWNrIHRoYXQgYSBkZXJpdmVkIGNsYXNzJ3MgX19zdHJfXygpIGdldHMgY2FsbGVkCi0gICAgICAgIGNsYXNzIEEoc2VsZi50aGVjbGFzcyk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0EnCi0gICAgICAgIGEgPSBBKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKCcnKSwgJ0EnKQotCi0gICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBzdHJmdGltZSBnZXRzIGNhbGxlZAotICAgICAgICBjbGFzcyBCKHNlbGYudGhlY2xhc3MpOgotICAgICAgICAgICAgZGVmIHN0cmZ0aW1lKHNlbGYsIGZvcm1hdF9zcGVjKToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0InCi0gICAgICAgIGIgPSBCKDIwMDcsIDksIDEwLCA0LCA1LCAxLCAxMjMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKCcnKSwgc3RyKGR0KSkKLQotICAgICAgICBmb3IgZm10IGluIFsibTolbSBkOiVkIHk6JXkiLAotICAgICAgICAgICAgICAgICAgICAibTolbSBkOiVkIHk6JXkgSDolSCBNOiVNIFM6JVMiLAotICAgICAgICAgICAgICAgICAgICAiJXogJVoiLAotICAgICAgICAgICAgICAgICAgICBdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5fX2Zvcm1hdF9fKGZtdCksIGR0LnN0cmZ0aW1lKGZtdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19mb3JtYXRfXyhmbXQpLCBkdC5zdHJmdGltZShmbXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oZm10KSwgJ0InKQotCi0gICAgZGVmIHRlc3RfbW9yZV9jdGltZShzZWxmKToKLSAgICAgICAgIyBUZXN0IGZpZWxkcyB0aGF0IFRlc3REYXRlIGRvZXNuJ3QgdG91Y2guCi0gICAgICAgIGltcG9ydCB0aW1lCi0KLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTgsIDMsIDUsIDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksICJTYXQgTWFyICAyIDE4OjAzOjA1IDIwMDIiKQotICAgICAgICAjIE9vcHMhICBUaGUgbmV4dCBsaW5lIGZhaWxzIG9uIFdpbjJLIHVuZGVyIE1TVkMgNiwgc28gaXQncyBjb21tZW50ZWQKLSAgICAgICAgIyBvdXQuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHQuY3RpbWUoKSBwcm9kdWNlcyAiIDIiIGZvciB0aGUgZGF5LAotICAgICAgICAjIGJ1dCBwbGF0Zm9ybSBjdGltZSgpIHByb2R1Y2VzICIwMiIgZm9yIHRoZSBkYXkuICBBY2NvcmRpbmcgdG8KLSAgICAgICAgIyBDOTksIHQuY3RpbWUoKSBpcyBjb3JyZWN0IGhlcmUuCi0gICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksIHRpbWUuY3RpbWUodGltZS5ta3RpbWUodC50aW1ldHVwbGUoKSkpKQotCi0gICAgICAgICMgU28gdGVzdCBhIGNhc2Ugd2hlcmUgdGhhdCBkaWZmZXJlbmNlIGRvZXNuJ3QgbWF0dGVyLgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyMiwgMTgsIDMsIDUsIDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmN0aW1lKCksIHRpbWUuY3RpbWUodGltZS5ta3RpbWUodC50aW1ldHVwbGUoKSkpKQotCi0gICAgZGVmIHRlc3RfdHpfaW5kZXBlbmRlbnRfY29tcGFyaW5nKHNlbGYpOgotICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDEsIDksIDAsIDApCi0gICAgICAgIGR0MiA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTAsIDAsIDApCi0gICAgICAgIGR0MyA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgOSwgMCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEsIGR0MykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR0MiA+IGR0MykKLQotICAgICAgICAjIE1ha2Ugc3VyZSBjb21wYXJpc29uIGRvZXNuJ3QgZm9yZ2V0IG1pY3Jvc2Vjb25kcywgYW5kIGlzbid0IGRvbmUKLSAgICAgICAgIyB2aWEgY29tcGFyaW5nIGEgZmxvYXQgdGltZXN0YW1wIChhbiBJRUVFIGRvdWJsZSBkb2Vzbid0IGhhdmUgZW5vdWdoCi0gICAgICAgICMgcHJlY2lzaW9uIHRvIHNwYW4gbWljcm9zZWNvbmQgcmVzb2x1dGlvbiBhY3Jvc3MgeWVhcnMgMSB0aHJ1IDk5OTksCi0gICAgICAgICMgc28gY29tcGFyaW5nIHZpYSB0aW1lc3RhbXAgbmVjZXNzYXJpbHkgY2FsbHMgc29tZSBkaXN0aW5jdCB2YWx1ZXMKLSAgICAgICAgIyBlcXVhbCkuCi0gICAgICAgIGR0MSA9IHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDU5LCA5OTk5OTgpCi0gICAgICAgIHVzID0gdGltZWRlbHRhKG1pY3Jvc2Vjb25kcz0xKQotICAgICAgICBkdDIgPSBkdDEgKyB1cwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MiAtIGR0MSwgdXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdDEgPCBkdDIpCi0KLSAgICBkZWYgdGVzdF9zdHJmdGltZV93aXRoX2JhZF90em5hbWVfcmVwbGFjZShzZWxmKToKLSAgICAgICAgIyB2ZXJpZnkgb2sgaWYgdHppbmZvLnR6bmFtZSgpLnJlcGxhY2UoKSByZXR1cm5zIGEgbm9uLXN0cmluZwotICAgICAgICBjbGFzcyBNeVR6SW5mbyhGaXhlZE9mZnNldCk6Ci0gICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KToKLSAgICAgICAgICAgICAgICBjbGFzcyBNeVN0cihzdHIpOgotICAgICAgICAgICAgICAgICAgICBkZWYgcmVwbGFjZShzZWxmLCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgIHJldHVybiBNeVN0cignbmFtZScpCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDUsIDMsIDIsIDAsIDAsIDAsIDAsIE15VHpJbmZvKDMsICduYW1lJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgJyVaJykKLQotICAgIGRlZiB0ZXN0X2JhZF9jb25zdHJ1Y3Rvcl9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgICMgYmFkIHllYXJzCi0gICAgICAgIHNlbGYudGhlY2xhc3MoTUlOWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYudGhlY2xhc3MoTUFYWUVBUiwgMSwgMSkgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIE1JTllFQVItMSwgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgTUFYWUVBUisxLCAxLCAxKQotICAgICAgICAjIGJhZCBtb250aHMKLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAxKSAgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAxKSAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDAsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDEzLCAxKQotICAgICAgICAjIGJhZCBkYXlzCi0gICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMiwgMjkpICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDA0LCAyLCAyOSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDI0MDAsIDIsIDI5KSAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIwMDAsIDIsIDMwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAxLCAyLCAyOSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjEwMCwgMiwgMjkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDE5MDAsIDIsIDI5KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMikKLSAgICAgICAgIyBiYWQgaG91cnMKLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMCkgICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMpICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjQpCi0gICAgICAgICMgYmFkIG1pbnV0ZXMKLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDApICAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIDYwKQotICAgICAgICAjIGJhZCBzZWNvbmRzCi0gICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMCwgMSwgMzEsIDIzLCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi50aGVjbGFzcygyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMDAwLCAxLCAzMSwgMjMsIDU5LCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjAwMCwgMSwgMzEsIDIzLCA1OSwgNjApCi0gICAgICAgICMgYmFkIG1pY3Jvc2Vjb25kcwotICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LCAwKSAgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIwMDAsIDEsIDMxLCAyMywgNTksIDU5LCA5OTk5OTkpICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMjAwMCwgMSwgMzEsIDIzLCA1OSwgNTksIC0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAyMDAwLCAxLCAzMSwgMjMsIDU5LCA1OSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwMCkKLQotICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIwMDAsIDEyLCAzMSwgMjMsIDMwLCAxNykKLSAgICAgICAgZSA9IHNlbGYudGhlY2xhc3MoMjAwMCwgMTIsIDMxLCAyMywgMzAsIDE3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChkKSwgaGFzaChlKSkKLQotICAgICAgICBkaWMgPSB7ZDogMX0KLSAgICAgICAgZGljW2VdID0gMgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tkXSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZV0sIDIpCi0KLSAgICAgICAgZCA9IHNlbGYudGhlY2xhc3MoMjAwMSwgIDEsICAxLCAgMCwgIDUsIDE3KQotICAgICAgICBlID0gc2VsZi50aGVjbGFzcygyMDAxLCAgMSwgIDEsICAwLCAgNSwgMTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQotCi0gICAgICAgIGRpYyA9IHtkOiAxfQotICAgICAgICBkaWNbZV0gPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKLQotICAgIGRlZiB0ZXN0X2NvbXB1dGF0aW9ucyhzZWxmKToKLSAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMSwgMzEpCi0gICAgICAgIGIgPSBzZWxmLnRoZWNsYXNzKDE5NTYsIDEsIDMxKQotICAgICAgICBkaWZmID0gYS1iCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZi5kYXlzLCA0NiozNjUgKyBsZW4ocmFuZ2UoMTk1NiwgMjAwMiwgNCkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYuc2Vjb25kcywgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLm1pY3Jvc2Vjb25kcywgMCkKLSAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTcsIDYpCi0gICAgICAgIG1pbGxpc2VjID0gdGltZWRlbHRhKDAsIDAsIDEwMDApCi0gICAgICAgIGhvdXIgPSB0aW1lZGVsdGEoMCwgMzYwMCkKLSAgICAgICAgZGF5ID0gdGltZWRlbHRhKDEpCi0gICAgICAgIHdlZWsgPSB0aW1lZGVsdGEoNykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgaG91ciwgc2VsZi50aGVjbGFzcygyMDAyLCAzLCAyLCAxOCwgNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG91ciArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTgsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyAxMCpob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDMsIDMsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBob3VyLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDIsIDE2LCA2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtaG91ciArIGEsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMiwgMTYsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBob3VyLCBhICsgLWhvdXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIDIwKmhvdXIsIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMjEsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMywgMTcsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSBkYXksIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMSwgMTcsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyB3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDksIDE3LCA2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gd2Vlaywgc2VsZi50aGVjbGFzcygyMDAyLCAyLCAyMywgMTcsIDYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgKyA1Mip3ZWVrLCBzZWxmLnRoZWNsYXNzKDIwMDMsIDMsIDEsIDE3LCA2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gNTIqd2Vlaywgc2VsZi50aGVjbGFzcygyMDAxLCAzLCAzLCAxNywgNikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyB3ZWVrKSAtIGEsIHdlZWspCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgKyBkYXkpIC0gYSwgZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgaG91cikgLSBhLCBob3VyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhICsgbWlsbGlzZWMpIC0gYSwgbWlsbGlzZWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSB3ZWVrKSAtIGEsIC13ZWVrKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gZGF5KSAtIGEsIC1kYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEgLSBob3VyKSAtIGEsIC1ob3VyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhIC0gbWlsbGlzZWMpIC0gYSwgLW1pbGxpc2VjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIHdlZWspLCAtd2VlaykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyBkYXkpLCAtZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAoYSArIGhvdXIpLCAtaG91cikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgKyBtaWxsaXNlYyksIC1taWxsaXNlYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSB3ZWVrKSwgd2VlaykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhIC0gKGEgLSBkYXkpLCBkYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gaG91ciksIGhvdXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSAtIChhIC0gbWlsbGlzZWMpLCBtaWxsaXNlYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGhlY2xhc3MoMjAwMiwgMywgMTAsIDE4LCA2LCAwLCAxMDAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhICsgKHdlZWsgKyBkYXkgKyBob3VyICsgbWlsbGlzZWMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKGEgKyB3ZWVrKSArIGRheSkgKyBob3VyKSArIG1pbGxpc2VjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcygyMDAyLCAyLCAyMiwgMTYsIDUsIDU5LCA5OTkwMDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEgLSAod2VlayArIGRheSArIGhvdXIgKyBtaWxsaXNlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCgoYSAtIHdlZWspIC0gZGF5KSAtIGhvdXIpIC0gbWlsbGlzZWMpCi0gICAgICAgICMgQWRkL3N1YiBpbnRzLCBsb25ncywgZmxvYXRzIHNob3VsZCBiZSBpbGxlZ2FsCi0gICAgICAgIGZvciBpIGluIDEsIDEsIDEuMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhK2kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYS1pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGkrYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBpLWEpCi0KLSAgICAgICAgIyBkZWx0YSAtIGRhdGV0aW1lIGlzIHNlbnNlbGVzcy4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGRheSAtIGEpCi0gICAgICAgICMgbWl4aW5nIGRhdGV0aW1lIGFuZCAoZGVsdGEgb3IgZGF0ZXRpbWUpIHZpYSAqIG9yIC8vIGlzIHNlbnNlbGVzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGF5ICogYSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKiBkYXkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBkYXkgLy8gYSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgLy8gZGF5KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYSAqIGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhIC8vIGEpCi0gICAgICAgICMgZGF0ZXRpbWUgKyBkYXRldGltZSBpcyBzZW5zZWxlc3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGEgKyBhKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGFyZ3MgPSA2LCA3LCAyMywgMjAsIDU5LCAxLCA2NCoqMgotICAgICAgICBvcmlnID0gc2VsZi50aGVjbGFzcygqYXJncykKLSAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6Ci0gICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCi0gICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQotCi0gICAgZGVmIHRlc3RfbW9yZV9waWNrbGluZyhzZWxmKToKLSAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMywgMiwgNywgMTYsIDQ4LCAzNywgNDQ0MTE2KQotICAgICAgICBzID0gcGlja2xlLmR1bXBzKGEpCi0gICAgICAgIGIgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnllYXIsIDIwMDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5tb250aCwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRheSwgNykKLQotICAgIGRlZiB0ZXN0X3BpY2tsaW5nX3N1YmNsYXNzX2RhdGV0aW1lKHNlbGYpOgotICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKLSAgICAgICAgb3JpZyA9IFN1YmNsYXNzRGF0ZXRpbWUoKmFyZ3MpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLQotICAgIGRlZiB0ZXN0X21vcmVfY29tcGFyZShzZWxmKToKLSAgICAgICAgIyBUaGUgdGVzdF9jb21wYXJlKCkgaW5oZXJpdGVkIGZyb20gVGVzdERhdGUgY292ZXJzIHRoZSBlcnJvciBjYXNlcy4KLSAgICAgICAgIyBXZSBqdXN0IHdhbnQgdG8gdGVzdCBsZXhpY29ncmFwaGljIG9yZGVyaW5nIG9uIHRoZSBtZW1iZXJzIGRhdGV0aW1lCi0gICAgICAgICMgaGFzIHRoYXQgZGF0ZSBsYWNrcy4KLSAgICAgICAgYXJncyA9IFsyMDAwLCAxMSwgMjksIDIwLCA1OCwgMTYsIDk5OTk5OF0KLSAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+PSB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSAhPSB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA8IHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGFyZ3MpKToKLSAgICAgICAgICAgIG5ld2FyZ3MgPSBhcmdzWzpdCi0gICAgICAgICAgICBuZXdhcmdzW2ldID0gYXJnc1tpXSArIDEKLSAgICAgICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygqbmV3YXJncykgICAjIHRoaXMgaXMgbGFyZ2VyIHRoYW4gdDEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA8IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID4gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPD0gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPj0gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgIT0gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgIT0gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID09IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA9PSB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPiB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPCB0MSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPj0gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDw9IHQxKQotCi0KLSAgICAjIEEgaGVscGVyIGZvciB0aW1lc3RhbXAgY29uc3RydWN0b3IgdGVzdHMuCi0gICAgZGVmIHZlcmlmeV9maWVsZF9lcXVhbGl0eShzZWxmLCBleHBlY3RlZCwgZ290KToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV95ZWFyLCBnb3QueWVhcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tb24sIGdvdC5tb250aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9tZGF5LCBnb3QuZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX2hvdXIsIGdvdC5ob3VyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLnRtX21pbiwgZ290Lm1pbnV0ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZC50bV9zZWMsIGdvdC5zZWNvbmQpCi0KLSAgICBkZWYgdGVzdF9mcm9tdGltZXN0YW1wKHNlbGYpOgotICAgICAgICBpbXBvcnQgdGltZQotCi0gICAgICAgIHRzID0gdGltZS50aW1lKCkKLSAgICAgICAgZXhwZWN0ZWQgPSB0aW1lLmxvY2FsdGltZSh0cykKLSAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKHRzKQotICAgICAgICBzZWxmLnZlcmlmeV9maWVsZF9lcXVhbGl0eShleHBlY3RlZCwgZ290KQotCi0gICAgZGVmIHRlc3RfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgaW1wb3J0IHRpbWUKLQotICAgICAgICB0cyA9IHRpbWUudGltZSgpCi0gICAgICAgIGV4cGVjdGVkID0gdGltZS5nbXRpbWUodHMpCi0gICAgICAgIGdvdCA9IHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCh0cykKLSAgICAgICAgc2VsZi52ZXJpZnlfZmllbGRfZXF1YWxpdHkoZXhwZWN0ZWQsIGdvdCkKLQotICAgIGRlZiB0ZXN0X21pY3Jvc2Vjb25kX3JvdW5kaW5nKHNlbGYpOgotICAgICAgICAjIFRlc3Qgd2hldGhlciBmcm9tdGltZXN0YW1wICJyb3VuZHMgdXAiIGZsb2F0cyB0aGF0IGFyZSBsZXNzCi0gICAgICAgICMgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGFuIGludGVnZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDAuOTk5OTk5OSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wKDEpKQotCi0gICAgZGVmIHRlc3RfaW5zYW5lX2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgICMgSXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgcGxhdGZvcm0gbWFwcyB0aW1lX3QgdG8gZG91YmxlLAotICAgICAgICAjIGFuZCB0aGF0IHRoaXMgdGVzdCB3aWxsIGZhaWwgdGhlcmUuICBUaGlzIHRlc3Qgc2hvdWxkCi0gICAgICAgICMgZXhlbXB0IHN1Y2ggcGxhdGZvcm1zIChwcm92aWRlZCB0aGV5IHJldHVybiByZWFzb25hYmxlCi0gICAgICAgICMgcmVzdWx0cyEpLgotICAgICAgICBmb3IgaW5zYW5lIGluIC0xZTIwMCwgMWUyMDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNhbmUpCi0KLSAgICBkZWYgdGVzdF9pbnNhbmVfdXRjZnJvbXRpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBJdCdzIHBvc3NpYmxlIHRoYXQgc29tZSBwbGF0Zm9ybSBtYXBzIHRpbWVfdCB0byBkb3VibGUsCi0gICAgICAgICMgYW5kIHRoYXQgdGhpcyB0ZXN0IHdpbGwgZmFpbCB0aGVyZS4gIFRoaXMgdGVzdCBzaG91bGQKLSAgICAgICAgIyBleGVtcHQgc3VjaCBwbGF0Zm9ybXMgKHByb3ZpZGVkIHRoZXkgcmV0dXJuIHJlYXNvbmFibGUKLSAgICAgICAgIyByZXN1bHRzISkuCi0gICAgICAgIGZvciBpbnNhbmUgaW4gLTFlMjAwLCAxZTIwMDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MudXRjZnJvbXRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2FuZSkKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBkb2Vzbid0IGFjY2VwdCBuZWdhdGl2ZSB0aW1lc3RhbXBzIikKLSAgICBkZWYgdGVzdF9uZWdhdGl2ZV9mbG9hdF9mcm9tdGltZXN0YW1wKHNlbGYpOgotICAgICAgICAjIFRoZSByZXN1bHQgaXMgdHotZGVwZW5kZW50OyBhdCBsZWFzdCB0ZXN0IHRoYXQgdGhpcyBkb2Vzbid0Ci0gICAgICAgICMgZmFpbCAobGlrZSBpdCBkaWQgYmVmb3JlIGJ1ZyAxNjQ2NzI4IHdhcyBmaXhlZCkuCi0gICAgICAgIHNlbGYudGhlY2xhc3MuZnJvbXRpbWVzdGFtcCgtMS4wNSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIGRvZXNuJ3QgYWNjZXB0IG5lZ2F0aXZlIHRpbWVzdGFtcHMiKQotICAgIGRlZiB0ZXN0X25lZ2F0aXZlX2Zsb2F0X3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAoLTEuMDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgc2VsZi50aGVjbGFzcygxOTY5LCAxMiwgMzEsIDIzLCA1OSwgNTgsIDk1MDAwMCkpCi0KLSAgICBkZWYgdGVzdF91dGNub3coc2VsZik6Ci0gICAgICAgIGltcG9ydCB0aW1lCi0KLSAgICAgICAgIyBDYWxsIGl0IGEgc3VjY2VzcyBpZiB1dGNub3coKSBhbmQgdXRjZnJvbXRpbWVzdGFtcCgpIGFyZSB3aXRoaW4KLSAgICAgICAgIyBhIHNlY29uZCBvZiBlYWNoIG90aGVyLgotICAgICAgICB0b2xlcmFuY2UgPSB0aW1lZGVsdGEoc2Vjb25kcz0xKQotICAgICAgICBmb3IgZHVtbXkgaW4gcmFuZ2UoMyk6Ci0gICAgICAgICAgICBmcm9tX25vdyA9IHNlbGYudGhlY2xhc3MudXRjbm93KCkKLSAgICAgICAgICAgIGZyb21fdGltZXN0YW1wID0gc2VsZi50aGVjbGFzcy51dGNmcm9tdGltZXN0YW1wKHRpbWUudGltZSgpKQotICAgICAgICAgICAgaWYgYWJzKGZyb21fdGltZXN0YW1wIC0gZnJvbV9ub3cpIDw9IHRvbGVyYW5jZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgIyBFbHNlIHRyeSBhZ2FpbiBhIGZldyB0aW1lcy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFicyhmcm9tX3RpbWVzdGFtcCAtIGZyb21fbm93KSA8PSB0b2xlcmFuY2UpCi0KLSAgICBkZWYgdGVzdF9zdHJwdGltZShzZWxmKToKLSAgICAgICAgaW1wb3J0IF9zdHJwdGltZQotCi0gICAgICAgIHN0cmluZyA9ICcyMDA0LTEyLTAxIDEzOjAyOjQ3LjE5NycKLSAgICAgICAgZm9ybWF0ID0gJyVZLSVtLSVkICVIOiVNOiVTLiVmJwotICAgICAgICByZXN1bHQsIGZyYWMgPSBfc3RycHRpbWUuX3N0cnB0aW1lKHN0cmluZywgZm9ybWF0KQotICAgICAgICBleHBlY3RlZCA9IHNlbGYudGhlY2xhc3MoKihyZXN1bHRbMDo2XSsoZnJhYywpKSkKLSAgICAgICAgZ290ID0gc2VsZi50aGVjbGFzcy5zdHJwdGltZShzdHJpbmcsIGZvcm1hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQotCi0gICAgZGVmIHRlc3RfbW9yZV90aW1ldHVwbGUoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0cyBmaWVsZHMgYmV5b25kIHRob3NlIHRlc3RlZCBieSB0aGUgVGVzdERhdGUudGVzdF90aW1ldHVwbGUuCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudGltZXR1cGxlKCksICgyMDA0LCAxMiwgMzEsIDYsIDIyLCAzMywgNCwgMzY2LCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50aW1ldHVwbGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodC55ZWFyLCB0Lm1vbnRoLCB0LmRheSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHQud2Vla2RheSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICB0LnRvb3JkaW5hbCgpIC0gZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgLTEpKQotICAgICAgICB0dCA9IHQudGltZXR1cGxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV95ZWFyLCB0LnllYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fbW9uLCB0Lm1vbnRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX21kYXksIHQuZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX2hvdXIsIHQuaG91cikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9taW4sIHQubWludXRlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0LnRtX3NlYywgdC5zZWNvbmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1fd2RheSwgdC53ZWVrZGF5KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHQudG1feWRheSwgdC50b29yZGluYWwoKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSh0LnllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dC50bV9pc2RzdCwgLTEpCi0KLSAgICBkZWYgdGVzdF9tb3JlX3N0cmZ0aW1lKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdHMgZmllbGRzIGJleW9uZCB0aG9zZSB0ZXN0ZWQgYnkgdGhlIFRlc3REYXRlLnRlc3Rfc3RyZnRpbWUuCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDIwMDQsIDEyLCAzMSwgNiwgMjIsIDMzLCA0NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnN0cmZ0aW1lKCIlbSAlZCAleSAlZiAlUyAlTSAlSCAlaiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEyIDMxIDA0IDAwMDA0NyAzMyAyMiAwNiAzNjYiKQotCi0gICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKLSAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDIwMDIsIDMsIDQsIDE4LCA0NSwgMywgMTIzNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXRlKCksIGRhdGUoMjAwMiwgMywgNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQudGltZSgpLCB0aW1lKDE4LCA0NSwgMywgMTIzNCkpCi0KLSAgICBkZWYgdGVzdF9jb21iaW5lKHNlbGYpOgotICAgICAgICBkID0gZGF0ZSgyMDAyLCAzLCA0KQotICAgICAgICB0ID0gdGltZSgxOCwgNDUsIDMsIDEyMzQpCi0gICAgICAgIGV4cGVjdGVkID0gc2VsZi50aGVjbGFzcygyMDAyLCAzLCA0LCAxOCwgNDUsIDMsIDEyMzQpCi0gICAgICAgIGNvbWJpbmUgPSBzZWxmLnRoZWNsYXNzLmNvbWJpbmUKLSAgICAgICAgZHQgPSBjb21iaW5lKGQsIHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIGV4cGVjdGVkKQotCi0gICAgICAgIGR0ID0gY29tYmluZSh0aW1lPXQsIGRhdGU9ZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBkdC5kYXRlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgZHQudGltZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCBjb21iaW5lKGR0LmRhdGUoKSwgZHQudGltZSgpKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmUpICMgbmVlZCBhbiBhcmcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkKSAjIG5lZWQgdHdvIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCB0LCBkKSAjIGFyZ3MgcmV2ZXJzZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCBkLCB0LCAxKSAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5lLCAiZGF0ZSIsICJ0aW1lIikgIyB3cm9uZyB0eXBlcwotCi0gICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDQsIDUsIDYsIDddCi0gICAgICAgIGJhc2UgPSBjbHMoKmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZSwgYmFzZS5yZXBsYWNlKCkpCi0KLSAgICAgICAgaSA9IDAKLSAgICAgICAgZm9yIG5hbWUsIG5ld3ZhbCBpbiAoKCJ5ZWFyIiwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibW9udGgiLCAzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJkYXkiLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJob3VyIiwgNSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWludXRlIiwgNiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2Vjb25kIiwgNyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibWljcm9zZWNvbmQiLCA4KSk6Ci0gICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQotICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAotICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCi0gICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLSAgICAgICAgICAgIGkgKz0gMQotCi0gICAgICAgICMgT3V0IG9mIGJvdW5kcy4KLSAgICAgICAgYmFzZSA9IGNscygyMDAwLCAyLCAyOSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCB5ZWFyPTIwMDEpCi0KLSAgICBkZWYgdGVzdF9hc3RpbWV6b25lKHNlbGYpOgotICAgICAgICAjIFByZXR0eSBib3JpbmchICBUaGUgVFogdGVzdCBpcyBtb3JlIGludGVyZXN0aW5nIGhlcmUuICBhc3RpbWV6b25lKCkKLSAgICAgICAgIyBzaW1wbHkgY2FuJ3QgYmUgYXBwbGllZCB0byBhIG5haXZlIG9iamVjdC4KLSAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzLm5vdygpCi0gICAgICAgIGYgPSBGaXhlZE9mZnNldCg0NCwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSkgIyBub3QgZW5vdWdoIGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmLCBmKSAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBkdC5hc3RpbWV6b25lLCBkdCkgIyBhcmcgd3JvbmcgdHlwZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmKSAjIG5haXZlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGR0LmFzdGltZXpvbmUsIHR6PWYpICAjIG5haXZlCi0KLSAgICAgICAgY2xhc3MgQm9ndXModHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQotICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEoMCkKLSAgICAgICAgYm9nID0gQm9ndXMoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBib2cpICAgIyBuYWl2ZQotCi0gICAgICAgIGNsYXNzIEFsc29Cb2d1cyh0emluZm8pOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiB0aW1lZGVsdGEoMCkKLSAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQotICAgICAgICBhbHNvYm9nID0gQWxzb0JvZ3VzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgYWxzb2JvZykgIyBhbHNvIG5haXZlCi0KLSAgICBkZWYgdGVzdF9zdWJjbGFzc19kYXRldGltZShzZWxmKToKLQotICAgICAgICBjbGFzcyBDKHNlbGYudGhlY2xhc3MpOgotICAgICAgICAgICAgdGhlQW5zd2VyID0gNDIKLQotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd3MpOgotICAgICAgICAgICAgICAgIHRlbXAgPSBrd3MuY29weSgpCi0gICAgICAgICAgICAgICAgZXh0cmEgPSB0ZW1wLnBvcCgnZXh0cmEnKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYudGhlY2xhc3MuX19uZXdfXyhjbHMsICphcmdzLCAqKnRlbXApCi0gICAgICAgICAgICAgICAgcmVzdWx0LmV4dHJhID0gZXh0cmEKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAgICAgICAgIGRlZiBuZXdtZXRoKHNlbGYsIHN0YXJ0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQgKyBzZWxmLnllYXIgKyBzZWxmLm1vbnRoICsgc2VsZi5zZWNvbmQKLQotICAgICAgICBhcmdzID0gMjAwMywgNCwgMTQsIDEyLCAxMywgNDEKLQotICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS50b29yZGluYWwoKSwgZHQyLnRvb3JkaW5hbCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLnllYXIgKyBkdDEubW9udGggKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHQxLnNlY29uZCAtIDcpCi0KLWNsYXNzIFN1YmNsYXNzVGltZSh0aW1lKToKLSAgICBzdWJfdmFyID0gMQotCi1jbGFzcyBUZXN0VGltZShIYXJtbGVzc01peGVkQ29tcGFyaXNvbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgdGhlY2xhc3MgPSB0aW1lCi0KLSAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmhvdXIsIDEyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCi0KLSAgICBkZWYgdGVzdF9iYXNpY19hdHRyaWJ1dGVzX25vbnplcm8oc2VsZik6Ci0gICAgICAgICMgTWFrZSBzdXJlIGFsbCBhdHRyaWJ1dGVzIGFyZSBub24temVybyBzbyBidWdzIGluCi0gICAgICAgICMgYml0LXNoaWZ0aW5nIGFjY2VzcyBzaG93IHVwLgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxMiwgNTksIDU5LCA4MDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaG91ciwgMTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taW51dGUsIDU5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCA1OSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA4MDAwKQotCi0gICAgZGVmIHRlc3Rfcm91bmR0cmlwKHNlbGYpOgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQotCi0gICAgICAgICMgVmVyaWZ5IHQgLT4gc3RyaW5nIC0+IHRpbWUgaWRlbnRpdHkuCi0gICAgICAgIHMgPSByZXByKHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoJ2RhdGV0aW1lLicpKQotICAgICAgICBzID0gc1s5Ol0KLSAgICAgICAgdDIgPSBldmFsKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdDIpCi0KLSAgICAgICAgIyBWZXJpZnkgaWRlbnRpdHkgdmlhIHJlY29uc3RydWN0aW5nIGZyb20gcGllY2VzLgotICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3ModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm1pY3Jvc2Vjb25kKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsIHQyKQotCi0gICAgZGVmIHRlc3RfY29tcGFyaW5nKHNlbGYpOgotICAgICAgICBhcmdzID0gWzEsIDIsIDMsIDRdCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKLSAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPj0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgIT0gdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDEgPCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA+IHQyKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihhcmdzKSk6Ci0gICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQotICAgICAgICAgICAgbmV3YXJnc1tpXSA9IGFyZ3NbaV0gKyAxCi0gICAgICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoKm5ld2FyZ3MpICAgIyB0aGlzIGlzIGxhcmdlciB0aGFuIHQxCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiA+IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDw9IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyID49IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyICE9IHQxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MSA9PSB0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgdDIgPT0gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID4gdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQyIDwgdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQxID49IHQyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0MiA8PSB0MSkKLQotICAgICAgICBmb3IgYmFkYXJnIGluIE9USEVSU1RVRkY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxID09IGJhZGFyZywgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxICE9IGJhZGFyZywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnID09IHQxLCBGYWxzZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFkYXJnICE9IHQxLCBUcnVlKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPD0gYmFkYXJnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxIDwgYmFkYXJnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID4gYmFkYXJnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID49IGJhZGFyZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBiYWRhcmcgPD0gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnIDwgdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID4gdDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYmFkYXJnID49IHQxKQotCi0gICAgZGVmIHRlc3RfYmFkX2NvbnN0cnVjdG9yX2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgIyBiYWQgaG91cnMKLSAgICAgICAgc2VsZi50aGVjbGFzcygwLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIC0xLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyNCwgMCkKLSAgICAgICAgIyBiYWQgbWludXRlcwotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCAwKSAgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA2MCkKLSAgICAgICAgIyBiYWQgc2Vjb25kcwotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgMCkgICAgIyBubyBleGNlcHRpb24KLSAgICAgICAgc2VsZi50aGVjbGFzcygyMywgNTksIDU5KSAgICMgbm8gZXhjZXB0aW9uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudGhlY2xhc3MsIDIzLCA1OSwgNjApCi0gICAgICAgICMgYmFkIG1pY3Jvc2Vjb25kcwotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDApICAgICAgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLnRoZWNsYXNzKDIzLCA1OSwgNTksIDk5OTk5OSkgICAjIG5vIGV4Y2VwdGlvbgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnRoZWNsYXNzLCAyMywgNTksIDU5LCAtMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50aGVjbGFzcywgMjMsIDU5LCA1OSwgMTAwMDAwMCkKLQotICAgIGRlZiB0ZXN0X2hhc2hfZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCi0gICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDIzLCAzMCwgMTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGQpLCBoYXNoKGUpKQotCi0gICAgICAgIGRpYyA9IHtkOiAxfQotICAgICAgICBkaWNbZV0gPSAyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2RdLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY1tlXSwgMikKLQotICAgICAgICBkID0gc2VsZi50aGVjbGFzcygwLCAgNSwgMTcpCi0gICAgICAgIGUgPSBzZWxmLnRoZWNsYXNzKDAsICA1LCAxNykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goZCksIGhhc2goZSkpCi0KLSAgICAgICAgZGljID0ge2Q6IDF9Ci0gICAgICAgIGRpY1tlXSA9IDIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWNbZF0sIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljW2VdLCAyKQotCi0gICAgZGVmIHRlc3RfaXNvZm9ybWF0KHNlbGYpOgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyg0LCA1LCAxLCAxMjMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgIjA0OjA1OjAxLjAwMDEyMyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5pc29mb3JtYXQoKSwgc3RyKHQpKQotCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKLQotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwMDEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKLQotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDEwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCi0KLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAxMDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKLQotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDEwMDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKLQotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhtaWNyb3NlY29uZD0xMDAwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDEwMDAwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lmlzb2Zvcm1hdCgpLCBzdHIodCkpCi0KLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MobWljcm9zZWNvbmQ9MTAwMDAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksICIwMDowMDowMC4xMDAwMDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuaXNvZm9ybWF0KCksIHN0cih0KSkKLQotICAgIGRlZiB0ZXN0XzE2NTM3MzYoc2VsZik6Ci0gICAgICAgICMgdmVyaWZ5IGl0IGRvZXNuJ3QgYWNjZXB0IGV4dHJhIGtleXdvcmQgYXJndW1lbnRzCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKHNlY29uZD0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuaXNvZm9ybWF0LCBmb289MykKLQotICAgIGRlZiB0ZXN0X3N0cmZ0aW1lKHNlbGYpOgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoJyVIICVNICVTICVmJyksICIwMSAwMiAwMyAwMDAwMDQiKQotICAgICAgICAjIEEgbmFpdmUgb2JqZWN0IHJlcGxhY2VzICV6IGFuZCAlWiB3aXRoIGVtcHR5IHN0cmluZ3MuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zdHJmdGltZSgiJyV6JyAnJVonIiksICInJyAnJyIpCi0KLSAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6Ci0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKCcnKSwgc3RyKHQpKQotCi0gICAgICAgICMgY2hlY2sgdGhhdCBhIGRlcml2ZWQgY2xhc3MncyBfX3N0cl9fKCkgZ2V0cyBjYWxsZWQKLSAgICAgICAgY2xhc3MgQShzZWxmLnRoZWNsYXNzKToKLSAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAnQScKLSAgICAgICAgYSA9IEEoMSwgMiwgMywgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLl9fZm9ybWF0X18oJycpLCAnQScpCi0KLSAgICAgICAgIyBjaGVjayB0aGF0IGEgZGVyaXZlZCBjbGFzcydzIHN0cmZ0aW1lIGdldHMgY2FsbGVkCi0gICAgICAgIGNsYXNzIEIoc2VsZi50aGVjbGFzcyk6Ci0gICAgICAgICAgICBkZWYgc3RyZnRpbWUoc2VsZiwgZm9ybWF0X3NwZWMpOgotICAgICAgICAgICAgICAgIHJldHVybiAnQicKLSAgICAgICAgYiA9IEIoMSwgMiwgMywgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLl9fZm9ybWF0X18oJycpLCBzdHIodCkpCi0KLSAgICAgICAgZm9yIGZtdCBpbiBbJyVIICVNICVTJywKLSAgICAgICAgICAgICAgICAgICAgXToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5fX2Zvcm1hdF9fKGZtdCksIHQuc3RyZnRpbWUoZm10KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5fX2Zvcm1hdF9fKGZtdCksICdCJykKLQotICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksICIwMTowMjowMy4wMDAwMDQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksICIxMDowMjowMy4wMDQwMDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDAsIDIsIDMsIDQwMDAwMCkpLCAiMDA6MDI6MDMuNDAwMDAwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLCAiMTI6MDI6MDMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzZWxmLnRoZWNsYXNzKDIzLCAxNSwgMCwgMCkpLCAiMjM6MTU6MDAiKQotCi0gICAgZGVmIHRlc3RfcmVwcihzZWxmKToKLSAgICAgICAgbmFtZSA9ICdkYXRldGltZS4nICsgc2VsZi50aGVjbGFzcy5fX25hbWVfXwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxLCAyLCAzLCA0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEsIDIsIDMsIDQpIiAlIG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzZWxmLnRoZWNsYXNzKDEwLCAyLCAzLCA0MDAwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDEwLCAyLCAzLCA0MDAwKSIgJSBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygwLCAyLCAzLCA0MDAwMDApKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoMCwgMiwgMywgNDAwMDAwKSIgJSBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoc2VsZi50aGVjbGFzcygxMiwgMiwgMywgMCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICIlcygxMiwgMiwgMykiICUgbmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlbGYudGhlY2xhc3MoMjMsIDE1LCAwLCAwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzKDIzLCAxNSkiICUgbmFtZSkKLQotICAgIGRlZiB0ZXN0X3Jlc29sdXRpb25faW5mbyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi50aGVjbGFzcy5taW4sIHNlbGYudGhlY2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLnRoZWNsYXNzLm1heCwgc2VsZi50aGVjbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYudGhlY2xhc3MucmVzb2x1dGlvbiwgdGltZWRlbHRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhlY2xhc3MubWF4ID4gc2VsZi50aGVjbGFzcy5taW4pCi0KLSAgICBkZWYgdGVzdF9waWNrbGluZyhzZWxmKToKLSAgICAgICAgYXJncyA9IDIwLCA1OSwgMTYsIDY0KioyCi0gICAgICAgIG9yaWcgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKLSAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKLSAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCi0KLSAgICBkZWYgdGVzdF9waWNrbGluZ19zdWJjbGFzc190aW1lKHNlbGYpOgotICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKLSAgICAgICAgb3JpZyA9IFN1YmNsYXNzVGltZSgqYXJncykKLSAgICAgICAgZm9yIHBpY2tsZXIsIHVucGlja2xlciwgcHJvdG8gaW4gcGlja2xlX2Nob2ljZXM6Ci0gICAgICAgICAgICBncmVlbiA9IHBpY2tsZXIuZHVtcHMob3JpZywgcHJvdG8pCi0gICAgICAgICAgICBkZXJpdmVkID0gdW5waWNrbGVyLmxvYWRzKGdyZWVuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmlnLCBkZXJpdmVkKQotCi0gICAgZGVmIHRlc3RfYm9vbChzZWxmKToKLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xzKDAsIDAsIDAsIDEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNscygwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjbHMoKSkKLQotICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6Ci0gICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKLSAgICAgICAgYXJncyA9IFsxLCAyLCAzLCA0XQotICAgICAgICBiYXNlID0gY2xzKCphcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UsIGJhc2UucmVwbGFjZSgpKQotCi0gICAgICAgIGkgPSAwCi0gICAgICAgIGZvciBuYW1lLCBuZXd2YWwgaW4gKCgiaG91ciIsIDUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pbnV0ZSIsIDYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInNlY29uZCIsIDcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm1pY3Jvc2Vjb25kIiwgOCkpOgotICAgICAgICAgICAgbmV3YXJncyA9IGFyZ3NbOl0KLSAgICAgICAgICAgIG5ld2FyZ3NbaV0gPSBuZXd2YWwKLSAgICAgICAgICAgIGV4cGVjdGVkID0gY2xzKCpuZXdhcmdzKQotICAgICAgICAgICAgZ290ID0gYmFzZS5yZXBsYWNlKCoqe25hbWU6IG5ld3ZhbH0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCi0gICAgICAgICAgICBpICs9IDEKLQotICAgICAgICAjIE91dCBvZiBib3VuZHMuCi0gICAgICAgIGJhc2UgPSBjbHMoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBob3VyPTI0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pbnV0ZT0tMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBzZWNvbmQ9MTAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pY3Jvc2Vjb25kPTEwMDAwMDApCi0KLSAgICBkZWYgdGVzdF9zdWJjbGFzc190aW1lKHNlbGYpOgotCi0gICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6Ci0gICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgotCi0gICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6Ci0gICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKLSAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgotICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYuaG91ciArIHNlbGYuc2Vjb25kCi0KLSAgICAgICAgYXJncyA9IDQsIDUsIDYKLQotICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS5pc29mb3JtYXQoKSwgZHQyLmlzb2Zvcm1hdCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEuc2Vjb25kIC0gNykKLQotICAgIGRlZiB0ZXN0X2JhY2tkb29yX3Jlc2lzdGFuY2Uoc2VsZik6Ci0gICAgICAgICMgc2VlIFRlc3REYXRlLnRlc3RfYmFja2Rvb3JfcmVzaXN0YW5jZSgpLgotICAgICAgICBiYXNlID0gJzI6NTkuMCcKLSAgICAgICAgZm9yIGhvdXJfYnl0ZSBpbiAnICcsICc5JywgY2hyKDI0KSwgJ1x4ZmYnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnRoZWNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyX2J5dGUgKyBiYXNlWzE6XSkKLQotIyBBIG1peGluIGZvciBjbGFzc2VzIHdpdGggYSB0emluZm89IGFyZ3VtZW50LiAgU3ViY2xhc3NlcyBtdXN0IGRlZmluZQotIyB0aGVjbGFzcyBhcyBhIGNsYXNzIGF0cmlidXRlLCBhbmQgdGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPXdoYXRldmVyKQotIyBtdXN0IGJlIGxlZ2l0ICh3aGljaCBpcyB0cnVlIGZvciB0aW1lIGFuZCBkYXRldGltZSkuCi1jbGFzcyBUWkluZm9CYXNlOgotCi0gICAgZGVmIHRlc3RfYXJndW1lbnRfcGFzc2luZyhzZWxmKToKLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotICAgICAgICAjIEEgZGF0ZXRpbWUgcGFzc2VzIGl0c2VsZiBvbiwgYSB0aW1lIHBhc3NlcyBOb25lLgotICAgICAgICBjbGFzcyBpbnRyb3NwZWN0aXZlKHR6aW5mbyk6Ci0gICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogICAgcmV0dXJuIGR0IGFuZCAicmVhbCIgb3IgIm5vbmUiCi0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXMgPSBkdCBhbmQgNDIgb3IgLTQyKQotICAgICAgICAgICAgZHN0ID0gdXRjb2Zmc2V0Ci0KLSAgICAgICAgb2JqID0gY2xzKDEsIDIsIDMsIHR6aW5mbz1pbnRyb3NwZWN0aXZlKCkpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBjbHMgaXMgdGltZSBhbmQgIm5vbmUiIG9yICJyZWFsIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai50em5hbWUoKSwgZXhwZWN0ZWQpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oY2xzIGlzIHRpbWUgYW5kIC00MiBvciA0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnV0Y29mZnNldCgpLCBleHBlY3RlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZHN0KCksIGV4cGVjdGVkKQotCi0gICAgZGVmIHRlc3RfYmFkX3R6aW5mb19jbGFzc2VzKHNlbGYpOgotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2xzLCAxLCAxLCAxLCB0emluZm89MTIpCi0KLSAgICAgICAgY2xhc3MgTmljZVRyeShvYmplY3QpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcGFzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNscywgMSwgMSwgMSwgdHppbmZvPU5pY2VUcnkpCi0KLSAgICAgICAgY2xhc3MgQmV0dGVyVHJ5KHR6aW5mbyk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiBwYXNzCi0gICAgICAgIGIgPSBCZXR0ZXJUcnkoKQotICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1iKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodC50emluZm8gaXMgYikKLQotICAgIGRlZiB0ZXN0X3V0Y19vZmZzZXRfb3V0X29mX2JvdW5kcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRWRneSh0emluZm8pOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9mZnNldCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgPSB0aW1lZGVsdGEobWludXRlcz1vZmZzZXQpCi0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vZmZzZXQKLQotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIGZvciBvZmZzZXQsIGxlZ2l0IGluICgoLTE0NDAsIEZhbHNlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtMTQzOSwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQzOSwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTQ0MCwgRmFsc2UpKToKLSAgICAgICAgICAgIGlmIGNscyBpcyB0aW1lOgotICAgICAgICAgICAgICAgIHQgPSBjbHMoMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKLSAgICAgICAgICAgIGVsaWYgY2xzIGlzIGRhdGV0aW1lOgotICAgICAgICAgICAgICAgIHQgPSBjbHMoNiwgNiwgNiwgMSwgMiwgMywgdHppbmZvPUVkZ3kob2Zmc2V0KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IDAsICJpbXBvc3NpYmxlIgotICAgICAgICAgICAgaWYgbGVnaXQ6Ci0gICAgICAgICAgICAgICAgYW9mcyA9IGFicyhvZmZzZXQpCi0gICAgICAgICAgICAgICAgaCwgbSA9IGRpdm1vZChhb2ZzLCA2MCkKLSAgICAgICAgICAgICAgICB0YWcgPSAiJWMlMDJkOiUwMmQiICUgKG9mZnNldCA8IDAgYW5kICctJyBvciAnKycsIGgsIG0pCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0LCBkYXRldGltZSk6Ci0gICAgICAgICAgICAgICAgICAgIHQgPSB0LnRpbWV0eigpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodCksICIwMTowMjowMyIgKyB0YWcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ciwgdCkKLQotICAgIGRlZiB0ZXN0X3R6aW5mb19jbGFzc2VzKHNlbGYpOgotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIGNsYXNzIEMxKHR6aW5mbyk6Ci0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KTogcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQotICAgICAgICAgICAgZGVmIHR6bmFtZShzZWxmLCBkdCk6IHJldHVybiBOb25lCi0gICAgICAgIGZvciB0IGluIChjbHMoMSwgMSwgMSksCi0gICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPU5vbmUpLAotICAgICAgICAgICAgICAgICAgY2xzKDEsIDEsIDEsIHR6aW5mbz1DMSgpKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC51dGNvZmZzZXQoKSBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZHN0KCkgaXMgTm9uZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6bmFtZSgpIGlzIE5vbmUpCi0KLSAgICAgICAgY2xhc3MgQzModHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9LTE0MzkpCi0gICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTE0MzkpCi0gICAgICAgICAgICBkZWYgdHpuYW1lKHNlbGYsIGR0KTogcmV0dXJuICJhbmFtZSIKLSAgICAgICAgdCA9IGNscygxLCAxLCAxLCB0emluZm89QzMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMTQzOSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MTQzOSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50em5hbWUoKSwgImFuYW1lIikKLQotICAgICAgICAjIFdyb25nIHR5cGVzLgotICAgICAgICBjbGFzcyBDNCh0emluZm8pOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiAiYW5hbWUiCi0gICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIDcKLSAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gMAotICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNCgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudXRjb2Zmc2V0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQuZHN0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQudHpuYW1lKQotCi0gICAgICAgICMgT2Zmc2V0IG91dCBvZiByYW5nZS4KLSAgICAgICAgY2xhc3MgQzYodHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPS0yNCkKLSAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKGhvdXJzPTI0KQotICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNigpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCi0KLSAgICAgICAgIyBOb3QgYSB3aG9sZSBudW1iZXIgb2YgbWludXRlcy4KLSAgICAgICAgY2xhc3MgQzcodHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gdGltZWRlbHRhKHNlY29uZHM9NjEpCi0gICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9LTgxKQotICAgICAgICB0ID0gY2xzKDEsIDEsIDEsIHR6aW5mbz1DNygpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LnV0Y29mZnNldCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5kc3QpCi0KLSAgICBkZWYgdGVzdF9hd2FyZV9jb21wYXJlKHNlbGYpOgotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0KLSAgICAgICAgIyBFbnN1cmUgdGhhdCB1dGNvZmZzZXQoKSBnZXRzIGlnbm9yZWQgaWYgdGhlIGNvbXBhcmFuZHMgaGF2ZQotICAgICAgICAjIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIuCi0gICAgICAgIGNsYXNzIE9wZXJhbmREZXBlbmRlbnRPZmZzZXQodHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgdCk6Ci0gICAgICAgICAgICAgICAgaWYgdC5taW51dGUgPCAxMDoKLSAgICAgICAgICAgICAgICAgICAgIyBkMCBhbmQgZDEgZXF1YWwgYWZ0ZXIgYWRqdXN0bWVudAotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKG1pbnV0ZXM9dC5taW51dGUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBkMiBvZmYgaW4gdGhlIHdlZWRzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz01OSkKLQotICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQotICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKLSAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCi0gICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKLSAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKLSAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6Ci0gICAgICAgICAgICAgICAgZm9yIG9wIGluIGx0LCBsZSwgZ3QsIGdlLCBlcSwgbmU6Ci0gICAgICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gb3AoeC5taW51dGUsIHkubWludXRlKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgIyBIb3dldmVyLCBpZiB0aGV5J3JlIGRpZmZlcmVudCBtZW1iZXJzLCB1Y3RvZmZzZXQgaXMgbm90IGlnbm9yZWQuCi0gICAgICAgICMgTm90ZSB0aGF0IGEgdGltZSBjYW4ndCBhY3R1YWxseSBoYXZlIGFuIG9wZXJhbmQtZGVwZWRlbnQgb2Zmc2V0LAotICAgICAgICAjIHRob3VnaCAoYW5kIHRpbWUudXRjb2Zmc2V0KCkgcGFzc2VzIE5vbmUgdG8gdHppbmZvLnV0Y29mZnNldCgpKSwKLSAgICAgICAgIyBzbyBza2lwIHRoaXMgdGVzdCBmb3IgdGltZS4KLSAgICAgICAgaWYgY2xzIGlzIG5vdCB0aW1lOgotICAgICAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCi0gICAgICAgICAgICBkMSA9IGJhc2UucmVwbGFjZShtaW51dGU9OSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKLSAgICAgICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSwgdHppbmZvPU9wZXJhbmREZXBlbmRlbnRPZmZzZXQoKSkKLSAgICAgICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6Ci0gICAgICAgICAgICAgICAgZm9yIHkgaW4gZDAsIGQxLCBkMjoKLSAgICAgICAgICAgICAgICAgICAgZ290ID0gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgotICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAwCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gLTEKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCB5IGlzIGQyCi0gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0KLSMgVGVzdGluZyB0aW1lIG9iamVjdHMgd2l0aCBhIG5vbi1Ob25lIHR6aW5mby4KLWNsYXNzIFRlc3RUaW1lVFooVGVzdFRpbWUsIFRaSW5mb0Jhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICB0aGVjbGFzcyA9IHRpbWUKLQotICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ob3VyLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWludXRlLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnR6aW5mbyBpcyBOb25lKQotCi0gICAgZGVmIHRlc3Rfem9uZXMoc2VsZik6Ci0gICAgICAgIGVzdCA9IEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiLCAxKQotICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAiVVRDIiwgLTIpCi0gICAgICAgIG1ldCA9IEZpeGVkT2Zmc2V0KDYwLCAiTUVUIiwgMykKLSAgICAgICAgdDEgPSB0aW1lKCA3LCA0NywgdHppbmZvPWVzdCkKLSAgICAgICAgdDIgPSB0aW1lKDEyLCA0NywgdHppbmZvPXV0YykKLSAgICAgICAgdDMgPSB0aW1lKDEzLCA0NywgdHppbmZvPW1ldCkKLSAgICAgICAgdDQgPSB0aW1lKG1pY3Jvc2Vjb25kPTQwKQotICAgICAgICB0NSA9IHRpbWUobWljcm9zZWNvbmQ9NDAsIHR6aW5mbz11dGMpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50emluZm8sIGVzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50emluZm8sIHV0YykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My50emluZm8sIG1ldCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LnR6aW5mbyBpcyBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1LnR6aW5mbywgdXRjKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPS0zMDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0wKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0My51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NjApKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudXRjb2Zmc2V0KCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS51dGNvZmZzZXQsICJubyBhcmdzIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAiRVNUIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi50em5hbWUoKSwgIlVUQyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudHpuYW1lKCksICJNRVQiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDQudHpuYW1lKCkgaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0MS50em5hbWUsICJubyBhcmdzIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5kc3QoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLmRzdCgpLCB0aW1lZGVsdGEobWludXRlcz0zKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQ0LmRzdCgpIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdDEuZHN0LCAibm8gYXJncyIpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDIpLCBoYXNoKHQzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIsIHQzKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPT0gdDUpICMgbWl4ZWQgdHotYXdhcmUgJiBuYWl2ZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDQgPCB0NSkgIyBtaXhlZCB0ei1hd2FyZSAmIG5haXZlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0NSA8IHQ0KSAjIG1peGVkIHR6LWF3YXJlICYgbmFpdmUKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MSksICIwNzo0NzowMC0wNTowMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgIjEyOjQ3OjAwKzAwOjAwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDMpLCAiMTM6NDc6MDArMDE6MDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NCksICIwMDowMDowMC4wMDAwNDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0NSksICIwMDowMDowMC4wMDAwNDArMDA6MDAiKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEuaXNvZm9ybWF0KCksICIwNzo0NzowMC0wNTowMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuaXNvZm9ybWF0KCksICIxMjo0NzowMCswMDowMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMuaXNvZm9ybWF0KCksICIxMzo0NzowMCswMTowMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDQuaXNvZm9ybWF0KCksICIwMDowMDowMC4wMDAwNDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQ1Lmlzb2Zvcm1hdCgpLCAiMDA6MDA6MDAuMDAwMDQwKzAwOjAwIikKLQotICAgICAgICBkID0gJ2RhdGV0aW1lLnRpbWUnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MSksIGQgKyAiKDcsIDQ3LCB0emluZm89ZXN0KSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MiksIGQgKyAiKDEyLCA0NywgdHppbmZvPXV0YykiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDMpLCBkICsgIigxMywgNDcsIHR6aW5mbz1tZXQpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ0KSwgZCArICIoMCwgMCwgMCwgNDApIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQ1KSwgZCArICIoMCwgMCwgMCwgNDAsIHR6aW5mbz11dGMpIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnN0cmZ0aW1lKCIlSDolTTolUyAlJVo9JVogJSV6PSV6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA3OjQ3OjAwICVaPUVTVCAlej0tMDUwMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuc3RyZnRpbWUoIiVIOiVNOiVTICVaICV6IiksICIxMjo0NzowMCBVVEMgKzAwMDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnN0cmZ0aW1lKCIlSDolTTolUyAlWiAleiIpLCAiMTM6NDc6MDAgTUVUICswMTAwIikKLQotICAgICAgICB5dWNrID0gRml4ZWRPZmZzZXQoLTE0MzksICIleiAlWiAlJXolJVoiKQotICAgICAgICB0MSA9IHRpbWUoMjMsIDU5LCB0emluZm89eXVjaykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS5zdHJmdGltZSgiJUg6JU0gJSVaPSclWicgJSV6PScleiciKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjM6NTkgJVo9JyV6ICVaICUleiUlWicgJXo9Jy0yMzU5JyIpCi0KLSAgICAgICAgIyBDaGVjayB0aGF0IGFuIGludmFsaWQgdHpuYW1lIHJlc3VsdCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgICAgICBjbGFzcyBCYWR0em5hbWUodHppbmZvKToKLSAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOiByZXR1cm4gNDIKLSAgICAgICAgdCA9IHRpbWUoMiwgMywgNCwgdHppbmZvPUJhZHR6bmFtZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc3RyZnRpbWUoIiVIOiVNOiVTIiksICIwMjowMzowNCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdC5zdHJmdGltZSwgIiVaIikKLQotICAgIGRlZiB0ZXN0X2hhc2hfZWRnZV9jYXNlcyhzZWxmKToKLSAgICAgICAgIyBPZmZzZXRzIHRoYXQgb3ZlcmZsb3cgYSBiYXNpYyB0aW1lLgotICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMCwgMSwgMiwgMywgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKLSAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDAsIDAsIDIsIDMsIHR6aW5mbz1GaXhlZE9mZnNldCgxNDM4LCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQotCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygyMywgNTgsIDYsIDEwMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0xMDAwLCAiIikpCi0gICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyMywgNDgsIDYsIDEwMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0xMDEwLCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDIpKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgICMgVHJ5IG9uZSB3aXRob3V0IGEgdHppbmZvLgotICAgICAgICBhcmdzID0gMjAsIDU5LCAxNiwgNjQqKjIKLSAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLQotICAgICAgICAjIFRyeSBvbmUgd2l0aCBhIHR6aW5mby4KLSAgICAgICAgdGluZm8gPSBQaWNrbGFibGVGaXhlZE9mZnNldCgtMzAwLCAnY29va2llJykKLSAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoNSwgNiwgNywgdHppbmZvPXRpbmZvKQotICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKLSAgICAgICAgICAgIGdyZWVuID0gcGlja2xlci5kdW1wcyhvcmlnLCBwcm90bykKLSAgICAgICAgICAgIGRlcml2ZWQgPSB1bnBpY2tsZXIubG9hZHMoZ3JlZW4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWcsIGRlcml2ZWQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkZXJpdmVkLnR6aW5mbywgUGlja2xhYmxlRml4ZWRPZmZzZXQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC50em5hbWUoKSwgJ2Nvb2tpZScpCi0KLSAgICBkZWYgdGVzdF9tb3JlX2Jvb2woc2VsZik6Ci0gICAgICAgICMgVGVzdCBjYXNlcyB3aXRoIG5vbi1Ob25lIHR6aW5mby4KLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotCi0gICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KC0zMDAsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCi0KLSAgICAgICAgdCA9IGNscyg1LCB0emluZm89Rml4ZWRPZmZzZXQoLTMwMCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodCkKLQotICAgICAgICB0ID0gY2xzKDUsIHR6aW5mbz1GaXhlZE9mZnNldCgzMDAsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCB0KQotCi0gICAgICAgIHQgPSBjbHMoMjMsIDU5LCB0emluZm89Rml4ZWRPZmZzZXQoMjMqNjAgKyA1OSwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQpCi0KLSAgICAgICAgIyBNb3N0bHkgZW5zdXJpbmcgdGhpcyBkb2Vzbid0IG92ZXJmbG93IGludGVybmFsbHkuCi0gICAgICAgIHQgPSBjbHMoMCwgdHppbmZvPUZpeGVkT2Zmc2V0KDIzKjYwICsgNTksICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQpCi0KLSAgICAgICAgIyBCdXQgdGhpcyBzaG91bGQgeWllbGQgYSB2YWx1ZSBlcnJvciAtLSB0aGUgdXRjb2Zmc2V0IGlzIGJvZ3VzLgotICAgICAgICB0ID0gY2xzKDAsIHR6aW5mbz1GaXhlZE9mZnNldCgyNCo2MCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IGJvb2wodCkpCi0KLSAgICAgICAgIyBMaWtld2lzZS4KLSAgICAgICAgdCA9IGNscygwLCB0emluZm89Rml4ZWRPZmZzZXQoLTI0KjYwLCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogYm9vbCh0KSkKLQotICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6Ci0gICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKLSAgICAgICAgejEwMCA9IEZpeGVkT2Zmc2V0KDEwMCwgIisxMDAiKQotICAgICAgICB6bTIwMCA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShtaW51dGVzPS0yMDApLCAiLTIwMCIpCi0gICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgejEwMF0KLSAgICAgICAgYmFzZSA9IGNscygqYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKLQotICAgICAgICBpID0gMAotICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoImhvdXIiLCA1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInR6aW5mbyIsIHptMjAwKSk6Ci0gICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQotICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAotICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCi0gICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLSAgICAgICAgICAgIGkgKz0gMQotCi0gICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKLSAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCi0KLSAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCi0gICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKLQotICAgICAgICAjIE91dCBvZiBib3VuZHMuCi0gICAgICAgIGJhc2UgPSBjbHMoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBob3VyPTI0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pbnV0ZT0tMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZS5yZXBsYWNlLCBzZWNvbmQ9MTAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlLnJlcGxhY2UsIG1pY3Jvc2Vjb25kPTEwMDAwMDApCi0KLSAgICBkZWYgdGVzdF9taXhlZF9jb21wYXJlKHNlbGYpOgotICAgICAgICB0MSA9IHRpbWUoMSwgMiwgMykKLSAgICAgICAgdDIgPSB0aW1lKDEsIDIsIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KE5vbmUsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0gICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCi0KLSAgICAgICAgIyBJbiB0aW1lIHcvIGlkZW50aWNhbCB0emluZm8gb2JqZWN0cywgdXRjb2Zmc2V0IGlzIGlnbm9yZWQuCi0gICAgICAgIGNsYXNzIFZhcmllcyh0emluZm8pOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gdGltZWRlbHRhKG1pbnV0ZXM9MjIpCi0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIHQpOgotICAgICAgICAgICAgICAgIHNlbGYub2Zmc2V0ICs9IHRpbWVkZWx0YShtaW51dGVzPTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYub2Zmc2V0Ci0KLSAgICAgICAgdiA9IFZhcmllcygpCi0gICAgICAgIHQxID0gdDIucmVwbGFjZSh0emluZm89dikKLSAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz12KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTI0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0KLSAgICAgICAgIyBCdXQgaWYgdGhleSdyZSBub3QgaWRlbnRpY2FsLCBpdCBpc24ndCBpZ25vcmVkLgotICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPVZhcmllcygpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikgICMgdDEncyBvZmZzZXQgY291bnRlciBzdGlsbCBnb2luZyB1cAotCi0gICAgZGVmIHRlc3Rfc3ViY2xhc3NfdGltZXR6KHNlbGYpOgotCi0gICAgICAgIGNsYXNzIEMoc2VsZi50aGVjbGFzcyk6Ci0gICAgICAgICAgICB0aGVBbnN3ZXIgPSA0MgotCi0gICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3cyk6Ci0gICAgICAgICAgICAgICAgdGVtcCA9IGt3cy5jb3B5KCkKLSAgICAgICAgICAgICAgICBleHRyYSA9IHRlbXAucG9wKCdleHRyYScpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50aGVjbGFzcy5fX25ld19fKGNscywgKmFyZ3MsICoqdGVtcCkKLSAgICAgICAgICAgICAgICByZXN1bHQuZXh0cmEgPSBleHRyYQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgICAgICAgZGVmIG5ld21ldGgoc2VsZiwgc3RhcnQpOgotICAgICAgICAgICAgICAgIHJldHVybiBzdGFydCArIHNlbGYuaG91ciArIHNlbGYuc2Vjb25kCi0KLSAgICAgICAgYXJncyA9IDQsIDUsIDYsIDUwMCwgRml4ZWRPZmZzZXQoLTMwMCwgIkVTVCIsIDEpCi0KLSAgICAgICAgZHQxID0gc2VsZi50aGVjbGFzcygqYXJncykKLSAgICAgICAgZHQyID0gQygqYXJncywgKip7J2V4dHJhJzogN30pCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIuX19jbGFzc19fLCBDKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi50aGVBbnN3ZXIsIDQyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5leHRyYSwgNykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDEudXRjb2Zmc2V0KCksIGR0Mi51dGNvZmZzZXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdDIubmV3bWV0aCgtNyksIGR0MS5ob3VyICsgZHQxLnNlY29uZCAtIDcpCi0KLQotIyBUZXN0aW5nIGRhdGV0aW1lIG9iamVjdHMgd2l0aCBhIG5vbi1Ob25lIHR6aW5mby4KLQotY2xhc3MgVGVzdERhdGVUaW1lVFooVGVzdERhdGVUaW1lLCBUWkluZm9CYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgdGhlY2xhc3MgPSBkYXRldGltZQotCi0gICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKLSAgICAgICAgZHQgPSBzZWxmLnRoZWNsYXNzKDEsIDIsIDMsIDQsIDUsIDYsIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQueWVhciwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5tb250aCwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kYXksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuaG91ciwgNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5taW51dGUsIDUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuc2Vjb25kLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Lm1pY3Jvc2Vjb25kLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LnR6aW5mbywgTm9uZSkKLQotICAgIGRlZiB0ZXN0X2V2ZW5fbW9yZV9jb21wYXJlKHNlbGYpOgotICAgICAgICAjIFRoZSB0ZXN0X2NvbXBhcmUoKSBhbmQgdGVzdF9tb3JlX2NvbXBhcmUoKSBpbmhlcml0ZWQgZnJvbSBUZXN0RGF0ZQotICAgICAgICAjIGFuZCBUZXN0RGF0ZVRpbWUgY292ZXJlZCBub24tdHppbmZvIGNhc2VzLgotCi0gICAgICAgICMgU21hbGxlc3QgcG9zc2libGUgYWZ0ZXIgVVRDIGFkanVzdG1lbnQuCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxLCAxLCB0emluZm89Rml4ZWRPZmZzZXQoMTQzOSwgIiIpKQotICAgICAgICAjIExhcmdlc3QgcG9zc2libGUgYWZ0ZXIgVVRDIGFkanVzdG1lbnQuCi0gICAgICAgIHQyID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQzOSwgIiIpKQotCi0gICAgICAgICMgTWFrZSBzdXJlIHRob3NlIGNvbXBhcmUgY29ycmVjdGx5LCBhbmQgdy9vIG92ZXJmbG93LgotICAgICAgICBzZWxmLmFzc2VydFRydWUodDEgPCB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxICE9IHQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodDIgPiB0MSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdDIpCi0KLSAgICAgICAgIyBFcXVhbCBhZmVyIGFkanVzdG1lbnQuCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSkKLSAgICAgICAgdDIgPSBzZWxmLnRoZWNsYXNzKDIsIDEsIDEsIDMsIDEzLCB0emluZm89Rml4ZWRPZmZzZXQoMyo2MCsxMysyLCAiIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotCi0gICAgICAgICMgQ2hhbmdlIHQxIG5vdCB0byBzdWJ0cmFjdCBhIG1pbnV0ZSwgYW5kIHQxIHNob3VsZCBiZSBsYXJnZXIuCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDAsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCi0KLSAgICAgICAgIyBDaGFuZ2UgdDEgdG8gc3VidHJhY3QgMiBtaW51dGVzLCBhbmQgdDEgc2hvdWxkIGJlIHNtYWxsZXIuCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDIsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpCi0KLSAgICAgICAgIyBCYWNrIHRvIHRoZSBvcmlnaW5hbCB0MSwgYnV0IG1ha2Ugc2Vjb25kcyByZXNvbHZlIGl0LgotICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMSwgMTIsIDMxLCAyMywgNTksIHR6aW5mbz1GaXhlZE9mZnNldCgxLCAiIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQ9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxID4gdDIpCi0KLSAgICAgICAgIyBMaWtld2lzZSwgYnV0IG1ha2UgbWljcm9zZWNvbmRzIHJlc29sdmUgaXQuCi0gICAgICAgIHQxID0gc2VsZi50aGVjbGFzcygxLCAxMiwgMzEsIDIzLCA1OSwgdHppbmZvPUZpeGVkT2Zmc2V0KDEsICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3Jvc2Vjb25kPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MSA+IHQyKQotCi0gICAgICAgICMgTWFrZSB0MiBuYWl2ZSBhbmQgaXQgc2hvdWxkIGZhaWwuCi0gICAgICAgIHQyID0gc2VsZi50aGVjbGFzcy5taW4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MikKLQotICAgICAgICAjIEl0J3MgYWxzbyBuYWl2ZSBpZiBpdCBoYXMgdHppbmZvIGJ1dCB0emluZm8udXRjb2Zmc2V0KCkgaXMgTm9uZS4KLSAgICAgICAgY2xhc3MgTmFpdmUodHppbmZvKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOiByZXR1cm4gTm9uZQotICAgICAgICB0MiA9IHNlbGYudGhlY2xhc3MoNSwgNiwgNywgdHppbmZvPU5haXZlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiB0MSA9PSB0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdDIpCi0KLSAgICAgICAgIyBPVE9ILCBpdCdzIE9LIHRvIGNvbXBhcmUgdHdvIG9mIHRoZXNlIG1peGluZyB0aGUgdHdvIHdheXMgb2YgYmVpbmcKLSAgICAgICAgIyBuYWl2ZS4KLSAgICAgICAgdDEgPSBzZWxmLnRoZWNsYXNzKDUsIDYsIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotCi0gICAgICAgICMgVHJ5IGEgYm9ndXMgdWN0b2Zmc2V0LgotICAgICAgICBjbGFzcyBCb2d1cyh0emluZm8pOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTE0NDApICMgb3V0IG9mIGJvdW5kcwotICAgICAgICB0MSA9IHNlbGYudGhlY2xhc3MoMiwgMiwgMiwgdHppbmZvPUJvZ3VzKCkpCi0gICAgICAgIHQyID0gc2VsZi50aGVjbGFzcygyLCAyLCAyLCB0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsYW1iZGE6IHQxID09IHQyKQotCi0gICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgICMgVHJ5IG9uZSB3aXRob3V0IGEgdHppbmZvLgotICAgICAgICBhcmdzID0gNiwgNywgMjMsIDIwLCA1OSwgMSwgNjQqKjIKLSAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLQotICAgICAgICAjIFRyeSBvbmUgd2l0aCBhIHR6aW5mby4KLSAgICAgICAgdGluZm8gPSBQaWNrbGFibGVGaXhlZE9mZnNldCgtMzAwLCAnY29va2llJykKLSAgICAgICAgb3JpZyA9IHNlbGYudGhlY2xhc3MoKmFyZ3MsICoqeyd0emluZm8nOiB0aW5mb30pCi0gICAgICAgIGRlcml2ZWQgPSBzZWxmLnRoZWNsYXNzKDEsIDEsIDEsIHR6aW5mbz1GaXhlZE9mZnNldCgwLCAiIiwgMCkpCi0gICAgICAgIGZvciBwaWNrbGVyLCB1bnBpY2tsZXIsIHByb3RvIGluIHBpY2tsZV9jaG9pY2VzOgotICAgICAgICAgICAgZ3JlZW4gPSBwaWNrbGVyLmR1bXBzKG9yaWcsIHByb3RvKQotICAgICAgICAgICAgZGVyaXZlZCA9IHVucGlja2xlci5sb2FkcyhncmVlbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZywgZGVyaXZlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGRlcml2ZWQudHppbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpY2tsYWJsZUZpeGVkT2Zmc2V0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVyaXZlZC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9LTMwMCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudHpuYW1lKCksICdjb29raWUnKQotCi0gICAgZGVmIHRlc3RfZXh0cmVtZV9oYXNoZXMoc2VsZik6Ci0gICAgICAgICMgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGhhc2ggdGhlc2UgdmlhIHN1YnRyYWN0aW5nIHRoZSBvZmZzZXQKLSAgICAgICAgIyB0aGVuIGhhc2hpbmcgYSBkYXRldGltZSBvYmplY3QsIE92ZXJmbG93RXJyb3IgcmVzdWx0cy4gIFRoZQotICAgICAgICAjIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiB1c2VkIHRvIGJsb3cgdXAgaGVyZS4KLSAgICAgICAgdCA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICIiKSkKLSAgICAgICAgaGFzaCh0KQotICAgICAgICB0ID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvPUZpeGVkT2Zmc2V0KC0xNDM5LCAiIikpCi0gICAgICAgIGhhc2godCkKLQotICAgICAgICAjIE9UT0gsIGFuIE9PQiBvZmZzZXQgc2hvdWxkIGJsb3cgdXAuCi0gICAgICAgIHQgPSBzZWxmLnRoZWNsYXNzKDUsIDUsIDUsIHR6aW5mbz1GaXhlZE9mZnNldCgtMTQ0MCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBoYXNoLCB0KQotCi0gICAgZGVmIHRlc3Rfem9uZXMoc2VsZik6Ci0gICAgICAgIGVzdCA9IEZpeGVkT2Zmc2V0KC0zMDAsICJFU1QiKQotICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAiVVRDIikKLSAgICAgICAgbWV0ID0gRml4ZWRPZmZzZXQoNjAsICJNRVQiKQotICAgICAgICB0MSA9IGRhdGV0aW1lKDIwMDIsIDMsIDE5LCAgNywgNDcsIHR6aW5mbz1lc3QpCi0gICAgICAgIHQyID0gZGF0ZXRpbWUoMjAwMiwgMywgMTksIDEyLCA0NywgdHppbmZvPXV0YykKLSAgICAgICAgdDMgPSBkYXRldGltZSgyMDAyLCAzLCAxOSwgMTMsIDQ3LCB0emluZm89bWV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6aW5mbywgZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnR6aW5mbywgdXRjKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6aW5mbywgbWV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0tMzAwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDMudXRjb2Zmc2V0KCksIHRpbWVkZWx0YShtaW51dGVzPTYwKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS50em5hbWUoKSwgIkVTVCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIudHpuYW1lKCksICJVVEMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQzLnR6bmFtZSgpLCAiTUVUIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHQxKSwgaGFzaCh0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCh0MSksIGhhc2godDMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDIpLCBoYXNoKHQzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLCB0MykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodDEpLCAiMjAwMi0wMy0xOSAwNzo0NzowMC0wNTowMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHQyKSwgIjIwMDItMDMtMTkgMTI6NDc6MDArMDA6MDAiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0MyksICIyMDAyLTAzLTE5IDEzOjQ3OjAwKzAxOjAwIikKLSAgICAgICAgZCA9ICdkYXRldGltZS5kYXRldGltZSgyMDAyLCAzLCAxOSwgJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodDEpLCBkICsgIjcsIDQ3LCB0emluZm89ZXN0KSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MiksIGQgKyAiMTIsIDQ3LCB0emluZm89dXRjKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0MyksIGQgKyAiMTMsIDQ3LCB0emluZm89bWV0KSIpCi0KLSAgICBkZWYgdGVzdF9jb21iaW5lKHNlbGYpOgotICAgICAgICBtZXQgPSBGaXhlZE9mZnNldCg2MCwgIk1FVCIpCi0gICAgICAgIGQgPSBkYXRlKDIwMDIsIDMsIDQpCi0gICAgICAgIHR6ID0gdGltZSgxOCwgNDUsIDMsIDEyMzQsIHR6aW5mbz1tZXQpCi0gICAgICAgIGR0ID0gZGF0ZXRpbWUuY29tYmluZShkLCB0eikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdCwgZGF0ZXRpbWUoMjAwMiwgMywgNCwgMTgsIDQ1LCAzLCAxMjM0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbz1tZXQpKQotCi0gICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKLSAgICAgICAgbWV0ID0gRml4ZWRPZmZzZXQoNjAsICJNRVQiKQotICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3MoMjAwMiwgMywgNCwgMTgsIDQ1LCAzLCAxMjM0LCB0emluZm89bWV0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmRhdGUoKSwgZGF0ZSgyMDAyLCAzLCA0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50aW1lKCksIHRpbWUoMTgsIDQ1LCAzLCAxMjM0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC50aW1ldHooKSwgdGltZSgxOCwgNDUsIDMsIDEyMzQsIHR6aW5mbz1tZXQpKQotCi0gICAgZGVmIHRlc3RfdHpfYXdhcmVfYXJpdGhtZXRpYyhzZWxmKToKLSAgICAgICAgaW1wb3J0IHJhbmRvbQotCi0gICAgICAgIG5vdyA9IHNlbGYudGhlY2xhc3Mubm93KCkKLSAgICAgICAgdHo1NSA9IEZpeGVkT2Zmc2V0KC0zMzAsICJ3ZXN0IDU6MzAiKQotICAgICAgICB0aW1lYXdhcmUgPSBub3cudGltZSgpLnJlcGxhY2UodHppbmZvPXR6NTUpCi0gICAgICAgIG5vd2F3YXJlID0gc2VsZi50aGVjbGFzcy5jb21iaW5lKG5vdy5kYXRlKCksIHRpbWVhd2FyZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlLnR6aW5mbyBpcyB0ejU1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLnRpbWV0eigpLCB0aW1lYXdhcmUpCi0KLSAgICAgICAgIyBDYW4ndCBtaXggYXdhcmUgYW5kIG5vbi1hd2FyZS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vdyAtIG5vd2F3YXJlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93YXdhcmUgLSBub3cpCi0KLSAgICAgICAgIyBBbmQgYWRkaW5nIGRhdGV0aW1lJ3MgZG9lc24ndCBtYWtlIHNlbnNlLCBhd2FyZSBvciBub3QuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBub3cgKyBub3dhd2FyZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IG5vd2F3YXJlICsgbm93KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogbm93YXdhcmUgKyBub3dhd2FyZSkKLQotICAgICAgICAjIFN1YnRyYWN0aW5nIHNob3VsZCB5aWVsZCAwLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdyAtIG5vdywgdGltZWRlbHRhKDApKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlIC0gbm93YXdhcmUsIHRpbWVkZWx0YSgwKSkKLQotICAgICAgICAjIEFkZGluZyBhIGRlbHRhIHNob3VsZCBwcmVzZXJ2ZSB0emluZm8uCi0gICAgICAgIGRlbHRhID0gdGltZWRlbHRhKHdlZWtzPTEsIG1pbnV0ZXM9MTIsIG1pY3Jvc2Vjb25kcz01Njc4KQotICAgICAgICBub3dhd2FyZXBsdXMgPSBub3dhd2FyZSArIGRlbHRhCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3dhd2FyZS50emluZm8gaXMgdHo1NSkKLSAgICAgICAgbm93YXdhcmVwbHVzMiA9IGRlbHRhICsgbm93YXdhcmUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlcGx1czIudHppbmZvIGlzIHR6NTUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmVwbHVzLCBub3dhd2FyZXBsdXMyKQotCi0gICAgICAgICMgdGhhdCAtIGRlbHRhIHNob3VsZCBiZSB3aGF0IHdlIHN0YXJ0ZWQgd2l0aCwgYW5kIHRoYXQgLSB3aGF0IHdlCi0gICAgICAgICMgc3RhcnRlZCB3aXRoIHNob3VsZCBiZSBkZWx0YS4KLSAgICAgICAgZGlmZiA9IG5vd2F3YXJlcGx1cyAtIGRlbHRhCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaWZmLnR6aW5mbyBpcyB0ejU1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vd2F3YXJlLCBkaWZmKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogZGVsdGEgLSBub3dhd2FyZXBsdXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm93YXdhcmVwbHVzIC0gbm93YXdhcmUsIGRlbHRhKQotCi0gICAgICAgICMgTWFrZSB1cCBhIHJhbmRvbSB0aW1lem9uZS4KLSAgICAgICAgdHpyID0gRml4ZWRPZmZzZXQocmFuZG9tLnJhbmRyYW5nZSgtMTQzOSwgMTQ0MCksICJyYW5kb210aW1lem9uZSIpCi0gICAgICAgICMgQXR0YWNoIGl0IHRvIG5vd2F3YXJlcGx1cy4KLSAgICAgICAgbm93YXdhcmVwbHVzID0gbm93YXdhcmVwbHVzLnJlcGxhY2UodHppbmZvPXR6cikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vd2F3YXJlcGx1cy50emluZm8gaXMgdHpyKQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlmZmVyZW5jZSB0YWtlcyB0aGUgdGltZXpvbmUgYWRqdXN0bWVudHMgaW50byBhY2NvdW50LgotICAgICAgICBnb3QgPSBub3dhd2FyZSAtIG5vd2F3YXJlcGx1cwotICAgICAgICAjIEV4cGVjdGVkOiAgKG5vd2F3YXJlIGJhc2UgLSBub3dhd2FyZSBvZmZzZXQpIC0KLSAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZXBsdXMgYmFzZSAtIG5vd2F3YXJlcGx1cyBvZmZzZXQpID0KLSAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZSBiYXNlIC0gbm93YXdhcmVwbHVzIGJhc2UpICsKLSAgICAgICAgIyAgICAgICAgICAgIChub3dhd2FyZXBsdXMgb2Zmc2V0IC0gbm93YXdhcmUgb2Zmc2V0KSA9Ci0gICAgICAgICMgICAgICAgICAgICAtZGVsdGEgKyBub3dhd2FyZXBsdXMgb2Zmc2V0IC0gbm93YXdhcmUgb2Zmc2V0Ci0gICAgICAgIGV4cGVjdGVkID0gbm93YXdhcmVwbHVzLnV0Y29mZnNldCgpIC0gbm93YXdhcmUudXRjb2Zmc2V0KCkgLSBkZWx0YQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgIyBUcnkgbWF4IHBvc3NpYmxlIGRpZmZlcmVuY2UuCi0gICAgICAgIG1pbiA9IHNlbGYudGhlY2xhc3MoMSwgMSwgMSwgdHppbmZvPUZpeGVkT2Zmc2V0KDE0MzksICJtaW4iKSkKLSAgICAgICAgbWF4ID0gc2VsZi50aGVjbGFzcyhNQVhZRUFSLCAxMiwgMzEsIDIzLCA1OSwgNTksIDk5OTk5OSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89Rml4ZWRPZmZzZXQoLTE0MzksICJtYXgiKSkKLSAgICAgICAgbWF4ZGlmZiA9IG1heCAtIG1pbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heGRpZmYsIHNlbGYudGhlY2xhc3MubWF4IC0gc2VsZi50aGVjbGFzcy5taW4gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaW51dGVzPTIqMTQzOSkpCi0KLSAgICBkZWYgdGVzdF90emluZm9fbm93KHNlbGYpOgotICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy5ub3cKLSAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCi0gICAgICAgIGJhc2UgPSBtZXRoKCkKLSAgICAgICAgIyBUcnkgd2l0aCBhbmQgd2l0aG91dCBuYW1pbmcgdGhlIGtleXdvcmQuCi0gICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCi0gICAgICAgIGFub3RoZXIgPSBtZXRoKG9mZjQyKQotICAgICAgICBhZ2FpbiA9IG1ldGgodHo9b2ZmNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQotICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIDE2KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHR6aW5mbz0xNikKLSAgICAgICAgIyBCYWQga2V5d29yZCBuYW1lLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRpbmZvPW9mZjQyKQotICAgICAgICAjIFRvbyBtYW55IGFyZ3MuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgb2ZmNDIsIG9mZjQyKQotCi0gICAgICAgICMgV2UgZG9uJ3Qga25vdyB3aGljaCB0aW1lIHpvbmUgd2UncmUgaW4sIGFuZCBkb24ndCBoYXZlIGEgdHppbmZvCi0gICAgICAgICMgY2xhc3MgdG8gcmVwcmVzZW50IGl0LCBzbyBzZWVpbmcgd2hldGhlciBhIHR6IGFyZ3VtZW50IGFjdHVhbGx5Ci0gICAgICAgICMgZG9lcyBhIGNvbnZlcnNpb24gaXMgdHJpY2t5LgotICAgICAgICB3ZWlyZHR6ID0gRml4ZWRPZmZzZXQodGltZWRlbHRhKGhvdXJzPTE1LCBtaW51dGVzPTU4KSwgIndlaXJkdHoiLCAwKQotICAgICAgICB1dGMgPSBGaXhlZE9mZnNldCgwLCAidXRjIiwgMCkKLSAgICAgICAgZm9yIGR1bW15IGluIHJhbmdlKDMpOgotICAgICAgICAgICAgbm93ID0gZGF0ZXRpbWUubm93KHdlaXJkdHopCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm93LnR6aW5mbyBpcyB3ZWlyZHR6KQotICAgICAgICAgICAgdXRjbm93ID0gZGF0ZXRpbWUudXRjbm93KCkucmVwbGFjZSh0emluZm89dXRjKQotICAgICAgICAgICAgbm93MiA9IHV0Y25vdy5hc3RpbWV6b25lKHdlaXJkdHopCi0gICAgICAgICAgICBpZiBhYnMobm93IC0gbm93MikgPCB0aW1lZGVsdGEoc2Vjb25kcz0zMCk6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICMgRWxzZSB0aGUgY29kZSBpcyBicm9rZW4sIG9yIG1vcmUgdGhhbiAzMCBzZWNvbmRzIHBhc3NlZCBiZXR3ZWVuCi0gICAgICAgICAgICAjIGNhbGxzOyBhc3N1bWluZyB0aGUgbGF0dGVyLCBqdXN0IHRyeSBhZ2Fpbi4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgVGhyZWUgc3RyaWtlcyBhbmQgd2UncmUgb3V0LgotICAgICAgICAgICAgc2VsZi5mYWlsKCJ1dGNub3coKSwgbm93KHR6KSwgb3IgYXN0aW1lem9uZSgpIG1heSBiZSBicm9rZW4iKQotCi0gICAgZGVmIHRlc3RfdHppbmZvX2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgIGltcG9ydCB0aW1lCi0gICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLmZyb210aW1lc3RhbXAKLSAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQotICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KLSAgICAgICAgYmFzZSA9IG1ldGgodHMpCi0gICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkLgotICAgICAgICBvZmY0MiA9IEZpeGVkT2Zmc2V0KDQyLCAiNDIiKQotICAgICAgICBhbm90aGVyID0gbWV0aCh0cywgb2ZmNDIpCi0gICAgICAgIGFnYWluID0gbWV0aCh0cywgdHo9b2ZmNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbm90aGVyLnR6aW5mbyBpcyBhZ2Fpbi50emluZm8pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5vdGhlci51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9NDIpKQotICAgICAgICAjIEJhZCBhcmd1bWVudCB3aXRoIGFuZCB3L28gbmFtaW5nIHRoZSBrZXl3b3JkLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1ldGgsIHRzLCAxNikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgdHppbmZvPTE2KQotICAgICAgICAjIEJhZCBrZXl3b3JkIG5hbWUuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHRpbmZvPW9mZjQyKQotICAgICAgICAjIFRvbyBtYW55IGFyZ3MuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIG9mZjQyLCBvZmY0MikKLSAgICAgICAgIyBUb28gZmV3IGFyZ3MuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCkKLQotICAgICAgICAjIFRyeSB0byBtYWtlIHN1cmUgdHo9IGFjdHVhbGx5IGRvZXMgc29tZSBjb252ZXJzaW9uLgotICAgICAgICB0aW1lc3RhbXAgPSAxMDAwMDAwMDAwCi0gICAgICAgIHV0Y2RhdGV0aW1lID0gZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXApCi0gICAgICAgICMgSW4gUE9TSVggKGVwb2NoIDE5NzApLCB0aGF0J3MgMjAwMS0wOS0wOSAwMTo0Njo0MCBVVEMsIGdpdmUgb3IgdGFrZS4KLSAgICAgICAgIyBCdXQgb24gc29tZSBmbGF2b3Igb2YgTWFjLCBpdCdzIG5vd2hlcmUgbmVhciB0aGF0LiAgU28gd2UgY2FuJ3QgaGF2ZQotICAgICAgICAjIGFueSBpZGVhIGhlcmUgd2hhdCB0aW1lIHRoYXQgYWN0dWFsbHkgaXMsIHdlIGNhbiBvbmx5IHRlc3QgdGhhdAotICAgICAgICAjIHJlbGF0aXZlIGNoYW5nZXMgbWF0Y2guCi0gICAgICAgIHV0Y29mZnNldCA9IHRpbWVkZWx0YShob3Vycz0tMTUsIG1pbnV0ZXM9MzkpICMgYXJiaXRyYXJ5LCBidXQgbm90IHplcm8KLSAgICAgICAgdHogPSBGaXhlZE9mZnNldCh1dGNvZmZzZXQsICJ0eiIsIDApCi0gICAgICAgIGV4cGVjdGVkID0gdXRjZGF0ZXRpbWUgKyB1dGNvZmZzZXQKLSAgICAgICAgZ290ID0gZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lc3RhbXAsIHR6KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QucmVwbGFjZSh0emluZm89Tm9uZSkpCi0KLSAgICBkZWYgdGVzdF90emluZm9fdXRjbm93KHNlbGYpOgotICAgICAgICBtZXRoID0gc2VsZi50aGVjbGFzcy51dGNub3cKLSAgICAgICAgIyBFbnN1cmUgaXQgZG9lc24ndCByZXF1aXJlIHR6aW5mbyAoaS5lLiwgdGhhdCB0aGlzIGRvZXNuJ3QgYmxvdyB1cCkuCi0gICAgICAgIGJhc2UgPSBtZXRoKCkKLSAgICAgICAgIyBUcnkgd2l0aCBhbmQgd2l0aG91dCBuYW1pbmcgdGhlIGtleXdvcmQ7IGZvciB3aGF0ZXZlciByZWFzb24sCi0gICAgICAgICMgdXRjbm93KCkgZG9lc24ndCBhY2NlcHQgYSB0emluZm8gYXJndW1lbnQuCi0gICAgICAgIG9mZjQyID0gRml4ZWRPZmZzZXQoNDIsICI0MiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgb2ZmNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHppbmZvPW9mZjQyKQotCi0gICAgZGVmIHRlc3RfdHppbmZvX3V0Y2Zyb210aW1lc3RhbXAoc2VsZik6Ci0gICAgICAgIGltcG9ydCB0aW1lCi0gICAgICAgIG1ldGggPSBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXAKLSAgICAgICAgdHMgPSB0aW1lLnRpbWUoKQotICAgICAgICAjIEVuc3VyZSBpdCBkb2Vzbid0IHJlcXVpcmUgdHppbmZvIChpLmUuLCB0aGF0IHRoaXMgZG9lc24ndCBibG93IHVwKS4KLSAgICAgICAgYmFzZSA9IG1ldGgodHMpCi0gICAgICAgICMgVHJ5IHdpdGggYW5kIHdpdGhvdXQgbmFtaW5nIHRoZSBrZXl3b3JkOyBmb3Igd2hhdGV2ZXIgcmVhc29uLAotICAgICAgICAjIHV0Y2Zyb210aW1lc3RhbXAoKSBkb2Vzbid0IGFjY2VwdCBhIHR6aW5mbyBhcmd1bWVudC4KLSAgICAgICAgb2ZmNDIgPSBGaXhlZE9mZnNldCg0MiwgIjQyIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZXRoLCB0cywgb2ZmNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWV0aCwgdHMsIHR6aW5mbz1vZmY0MikKLQotICAgIGRlZiB0ZXN0X3R6aW5mb190aW1ldHVwbGUoc2VsZik6Ci0gICAgICAgICMgVGVzdERhdGVUaW1lIHRlc3RlZCBtb3N0IG9mIHRoaXMuICBkYXRldGltZSBhZGRzIGEgdHdpc3QgdG8gdGhlCi0gICAgICAgICMgRFNUIGZsYWcuCi0gICAgICAgIGNsYXNzIERTVCh0emluZm8pOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRzdHZhbHVlKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRzdHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgICAgICBkc3R2YWx1ZSA9IHRpbWVkZWx0YShtaW51dGVzPWRzdHZhbHVlKQotICAgICAgICAgICAgICAgIHNlbGYuZHN0dmFsdWUgPSBkc3R2YWx1ZQotICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0dmFsdWUKLQotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgIGZvciBkc3R2YWx1ZSwgZmxhZyBpbiAoLTMzLCAxKSwgKDMzLCAxKSwgKDAsIDApLCAoTm9uZSwgLTEpOgotICAgICAgICAgICAgZCA9IGNscygxLCAxLCAxLCAxMCwgMjAsIDMwLCA0MCwgdHppbmZvPURTVChkc3R2YWx1ZSkpCi0gICAgICAgICAgICB0ID0gZC50aW1ldHVwbGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX3llYXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1fbW9uKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0LnRtX21kYXkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCB0LnRtX2hvdXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIwLCB0LnRtX21pbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMzAsIHQudG1fc2VjKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0LnRtX3dkYXkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHQudG1feWRheSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxhZywgdC50bV9pc2RzdCkKLQotICAgICAgICAjIGRzdCgpIHJldHVybnMgd3JvbmcgdHlwZS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjbHMoMSwgMSwgMSwgdHppbmZvPURTVCgieCIpKS50aW1ldHVwbGUpCi0KLSAgICAgICAgIyBkc3QoKSBhdCB0aGUgZWRnZS4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscygxLDEsMSwgdHppbmZvPURTVCgtMTQzOSkpLnRpbWV0dXBsZSgpLnRtX2lzZHN0LCAxKQotCi0gICAgICAgICMgZHN0KCkgb3V0IG9mIHJhbmdlLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjbHMoMSwxLDEsIHR6aW5mbz1EU1QoMTQ0MCkpLnRpbWV0dXBsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY2xzKDEsMSwxLCB0emluZm89RFNUKC0xNDQwKSkudGltZXR1cGxlKQotCi0gICAgZGVmIHRlc3RfdXRjdGltZXR1cGxlKHNlbGYpOgotICAgICAgICBjbGFzcyBEU1QodHppbmZvKToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkc3R2YWx1ZT0wKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRzdHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgICAgICAgICBkc3R2YWx1ZSA9IHRpbWVkZWx0YShtaW51dGVzPWRzdHZhbHVlKQotICAgICAgICAgICAgICAgIHNlbGYuZHN0dmFsdWUgPSBkc3R2YWx1ZQotICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZHN0dmFsdWUKLQotICAgICAgICBjbHMgPSBzZWxmLnRoZWNsYXNzCi0gICAgICAgICMgVGhpcyBjYW4ndCB3b3JrOiAgRFNUIGRpZG4ndCBpbXBsZW1lbnQgdXRjb2Zmc2V0LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMoMSwgMSwgMSwgdHppbmZvPURTVCgwKSkudXRjb2Zmc2V0KQotCi0gICAgICAgIGNsYXNzIFVPRlMoRFNUKToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1b2ZzLCBkb2ZzPU5vbmUpOgotICAgICAgICAgICAgICAgIERTVC5fX2luaXRfXyhzZWxmLCBkb2ZzKQotICAgICAgICAgICAgICAgIHNlbGYudW9mcyA9IHRpbWVkZWx0YShtaW51dGVzPXVvZnMpCi0gICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi51b2ZzCi0KLSAgICAgICAgIyBFbnN1cmUgdG1faXNkc3QgaXMgMCByZWdhcmRsZXNzIG9mIHdoYXQgZHN0KCkgc2F5czogIERTVCBpcyBuZXZlcgotICAgICAgICAjIGluIGVmZmVjdCBmb3IgYSBVVEMgdGltZS4KLSAgICAgICAgZm9yIGRzdHZhbHVlIGluIC0zMywgMzMsIDAsIE5vbmU6Ci0gICAgICAgICAgICBkID0gY2xzKDEsIDIsIDMsIDEwLCAyMCwgMzAsIDQwLCB0emluZm89VU9GUygtNTMsIGRzdHZhbHVlKSkKLSAgICAgICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQueWVhciwgdC50bV95ZWFyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1vbnRoLCB0LnRtX21vbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5kYXksIHQudG1fbWRheSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTEsIHQudG1faG91cikgIyAyMG1tICsgNTNtbSA9IDFobiArIDEzbW0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMTMsIHQudG1fbWluKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNlY29uZCwgdC50bV9zZWMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQud2Vla2RheSgpLCB0LnRtX3dkYXkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQudG9vcmRpbmFsKCkgLSBkYXRlKDEsIDEsIDEpLnRvb3JkaW5hbCgpICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC50bV95ZGF5KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0LnRtX2lzZHN0KQotICAgICAgICAjIEZvciBuYWl2ZSBkYXRldGltZSwgdXRjdGltZXR1cGxlID09IHRpbWV0dXBsZSBleGNlcHQgZm9yIGlzZHN0Ci0gICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDApCi0gICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6LTFdLCBkLnRpbWV0dXBsZSgpWzotMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKLSAgICAgICAgIyBTYW1lIGlmIHV0Y29mZnNldCBpcyBOb25lCi0gICAgICAgIGNsYXNzIE5PRlMoRFNUKToKLSAgICAgICAgICAgIGRlZiB1dGNvZmZzZXQoc2VsZiwgZHQpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1OT0ZTKCkpCi0gICAgICAgIHQgPSBkLnV0Y3RpbWV0dXBsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFs6LTFdLCBkLnRpbWV0dXBsZSgpWzotMV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgdC50bV9pc2RzdCkKLSAgICAgICAgIyBDaGVjayB0aGF0IGJhZCB0emluZm8gaXMgZGV0ZWN0ZWQKLSAgICAgICAgY2xhc3MgQk9GUyhEU1QpOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFU1QiCi0gICAgICAgIGQgPSBjbHMoMSwgMiwgMywgMTAsIDIwLCAzMCwgNDAsIHR6aW5mbz1CT0ZTKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC51dGN0aW1ldHVwbGUpCi0KLSAgICAgICAgIyBBdCB0aGUgZWRnZXMsIFVUQyBhZGp1c3RtZW50IGNhbiBub3JtYWxpemUgaW50byB5ZWFycyBvdXQtb2YtcmFuZ2UKLSAgICAgICAgIyBmb3IgYSBkYXRldGltZSBvYmplY3QuICBFbnN1cmUgdGhhdCBhIGNvcnJlY3QgdGltZXR1cGxlIGlzCi0gICAgICAgICMgY3JlYXRlZCBhbnl3YXkuCi0gICAgICAgIHRpbnkgPSBjbHMoTUlOWUVBUiwgMSwgMSwgMCwgMCwgMzcsIHR6aW5mbz1VT0ZTKDE0MzkpKQotICAgICAgICAjIFRoYXQgZ29lcyBiYWNrIDEgbWludXRlIGxlc3MgdGhhbiBhIGZ1bGwgZGF5LgotICAgICAgICB0ID0gdGlueS51dGN0aW1ldHVwbGUoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWVhciwgTUlOWUVBUi0xKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1fbW9uLCAxMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21kYXksIDMxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1faG91ciwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21pbiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3NlYywgMzcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV95ZGF5LCAzNjYpICAgICMgInllYXIgMCIgaXMgYSBsZWFwIHllYXIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2lzZHN0LCAwKQotCi0gICAgICAgIGh1Z2UgPSBjbHMoTUFYWUVBUiwgMTIsIDMxLCAyMywgNTksIDM3LCA5OTk5OTksIHR6aW5mbz1VT0ZTKC0xNDM5KSkKLSAgICAgICAgIyBUaGF0IGdvZXMgZm9yd2FyZCAxIG1pbnV0ZSBsZXNzIHRoYW4gYSBmdWxsIGRheS4KLSAgICAgICAgdCA9IGh1Z2UudXRjdGltZXR1cGxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX3llYXIsIE1BWFlFQVIrMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21vbiwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21kYXksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9ob3VyLCAyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX21pbiwgNTgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC50bV9zZWMsIDM3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudG1feWRheSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnRtX2lzZHN0LCAwKQotCi0gICAgZGVmIHRlc3RfdHppbmZvX2lzb2Zvcm1hdChzZWxmKToKLSAgICAgICAgemVybyA9IEZpeGVkT2Zmc2V0KDAsICIrMDA6MDAiKQotICAgICAgICBwbHVzID0gRml4ZWRPZmZzZXQoMjIwLCAiKzAzOjQwIikKLSAgICAgICAgbWludXMgPSBGaXhlZE9mZnNldCgtMjMxLCAiLTAzOjUxIikKLSAgICAgICAgdW5rbm93biA9IEZpeGVkT2Zmc2V0KE5vbmUsICIiKQotCi0gICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKLSAgICAgICAgZGF0ZXN0ciA9ICcwMDAxLTAyLTAzJwotICAgICAgICBmb3Igb2ZzIGluIE5vbmUsIHplcm8sIHBsdXMsIG1pbnVzLCB1bmtub3duOgotICAgICAgICAgICAgZm9yIHVzIGluIDAsIDk4NzAwMToKLSAgICAgICAgICAgICAgICBkID0gY2xzKDEsIDIsIDMsIDQsIDUsIDU5LCB1cywgdHppbmZvPW9mcykKLSAgICAgICAgICAgICAgICB0aW1lc3RyID0gJzA0OjA1OjU5JyArICh1cyBhbmQgJy45ODcwMDEnIG9yICcnKQotICAgICAgICAgICAgICAgIG9mc3N0ciA9IG9mcyBpcyBub3QgTm9uZSBhbmQgZC50em5hbWUoKSBvciAnJwotICAgICAgICAgICAgICAgIHRhaWxzdHIgPSB0aW1lc3RyICsgb2Zzc3RyCi0gICAgICAgICAgICAgICAgaXNvID0gZC5pc29mb3JtYXQoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNvLCBkYXRlc3RyICsgJ1QnICsgdGFpbHN0cikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbywgZC5pc29mb3JtYXQoJ1QnKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNvZm9ybWF0KCdrJyksIGRhdGVzdHIgKyAnaycgKyB0YWlsc3RyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc29mb3JtYXQoJ1x1MTIzNCcpLCBkYXRlc3RyICsgJ1x1MTIzNCcgKyB0YWlsc3RyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGQpLCBkYXRlc3RyICsgJyAnICsgdGFpbHN0cikKLQotICAgIGRlZiB0ZXN0X3JlcGxhY2Uoc2VsZik6Ci0gICAgICAgIGNscyA9IHNlbGYudGhlY2xhc3MKLSAgICAgICAgejEwMCA9IEZpeGVkT2Zmc2V0KDEwMCwgIisxMDAiKQotICAgICAgICB6bTIwMCA9IEZpeGVkT2Zmc2V0KHRpbWVkZWx0YShtaW51dGVzPS0yMDApLCAiLTIwMCIpCi0gICAgICAgIGFyZ3MgPSBbMSwgMiwgMywgNCwgNSwgNiwgNywgejEwMF0KLSAgICAgICAgYmFzZSA9IGNscygqYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlLnJlcGxhY2UoKSkKLQotICAgICAgICBpID0gMAotICAgICAgICBmb3IgbmFtZSwgbmV3dmFsIGluICgoInllYXIiLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtb250aCIsIDMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImRheSIsIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhvdXIiLCA1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaW51dGUiLCA2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzZWNvbmQiLCA3KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtaWNyb3NlY29uZCIsIDgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInR6aW5mbyIsIHptMjAwKSk6Ci0gICAgICAgICAgICBuZXdhcmdzID0gYXJnc1s6XQotICAgICAgICAgICAgbmV3YXJnc1tpXSA9IG5ld3ZhbAotICAgICAgICAgICAgZXhwZWN0ZWQgPSBjbHMoKm5ld2FyZ3MpCi0gICAgICAgICAgICBnb3QgPSBiYXNlLnJlcGxhY2UoKip7bmFtZTogbmV3dmFsfSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLSAgICAgICAgICAgIGkgKz0gMQotCi0gICAgICAgICMgRW5zdXJlIHdlIGNhbiBnZXQgcmlkIG9mIGEgdHppbmZvLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UudHpuYW1lKCksICIrMTAwIikKLSAgICAgICAgYmFzZTIgPSBiYXNlLnJlcGxhY2UodHppbmZvPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlMi50emluZm8gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UyLnR6bmFtZSgpIGlzIE5vbmUpCi0KLSAgICAgICAgIyBFbnN1cmUgd2UgY2FuIGFkZCBvbmUuCi0gICAgICAgIGJhc2UzID0gYmFzZTIucmVwbGFjZSh0emluZm89ejEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBiYXNlMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UudHppbmZvIGlzIGJhc2UzLnR6aW5mbykKLQotICAgICAgICAjIE91dCBvZiBib3VuZHMuCi0gICAgICAgIGJhc2UgPSBjbHMoMjAwMCwgMiwgMjkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2UucmVwbGFjZSwgeWVhcj0yMDAxKQotCi0gICAgZGVmIHRlc3RfbW9yZV9hc3RpbWV6b25lKHNlbGYpOgotICAgICAgICAjIFRoZSBpbmhlcml0ZWQgdGVzdF9hc3RpbWV6b25lIGNvdmVyZWQgc29tZSB0cml2aWFsIGFuZCBlcnJvciBjYXNlcy4KLSAgICAgICAgZm5vbmUgPSBGaXhlZE9mZnNldChOb25lLCAiTm9uZSIpCi0gICAgICAgIGY0NG0gPSBGaXhlZE9mZnNldCg0NCwgIjQ0IikKLSAgICAgICAgZm01aCA9IEZpeGVkT2Zmc2V0KC10aW1lZGVsdGEoaG91cnM9NSksICJtMzAwIikKLQotICAgICAgICBkdCA9IHNlbGYudGhlY2xhc3Mubm93KHR6PWY0NG0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkdC50emluZm8gaXMgZjQ0bSkKLSAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBkZWdlbmVyYXRlIHR6aW5mbyByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkdC5hc3RpbWV6b25lLCBmbm9uZSkKLSAgICAgICAgIyBEaXR0byB3aXRoIE5vbmUgdHouCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZHQuYXN0aW1lem9uZSwgTm9uZSkKLSAgICAgICAgIyBSZXBsYWNpbmcgd2l0aCBzYW1lIHR6aW5mbyBtYWtlcyBubyBjaGFuZ2UuCi0gICAgICAgIHggPSBkdC5hc3RpbWV6b25lKGR0LnR6aW5mbykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHgudHppbmZvIGlzIGY0NG0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5kYXRlKCksIGR0LmRhdGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnRpbWUoKSwgZHQudGltZSgpKQotCi0gICAgICAgICMgUmVwbGFjaW5nIHdpdGggZGlmZmVyZW50IHR6aW5mbyBkb2VzIGFkanVzdC4KLSAgICAgICAgZ290ID0gZHQuYXN0aW1lem9uZShmbTVoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZ290LnR6aW5mbyBpcyBmbTVoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC51dGNvZmZzZXQoKSwgdGltZWRlbHRhKGhvdXJzPS01KSkKLSAgICAgICAgZXhwZWN0ZWQgPSBkdCAtIGR0LnV0Y29mZnNldCgpICAjIGluIGVmZmVjdCwgY29udmVydCB0byBVVEMKLSAgICAgICAgZXhwZWN0ZWQgKz0gZm01aC51dGNvZmZzZXQoZHQpICAjIGFuZCBmcm9tIHRoZXJlIHRvIGxvY2FsIHRpbWUKLSAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5yZXBsYWNlKHR6aW5mbz1mbTVoKSAjIGFuZCBhdHRhY2ggbmV3IHR6aW5mbwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdC5kYXRlKCksIGV4cGVjdGVkLmRhdGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QudGltZSgpLCBleHBlY3RlZC50aW1lKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LnRpbWV0eigpLCBleHBlY3RlZC50aW1ldHooKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdvdC50emluZm8gaXMgZXhwZWN0ZWQudHppbmZvKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdF9hd2FyZV9zdWJ0cmFjdChzZWxmKToKLSAgICAgICAgY2xzID0gc2VsZi50aGVjbGFzcwotCi0gICAgICAgICMgRW5zdXJlIHRoYXQgdXRjb2Zmc2V0KCkgaXMgaWdub3JlZCB3aGVuIHRoZSBvcGVyYW5kcyBoYXZlIHRoZQotICAgICAgICAjIHNhbWUgdHppbmZvIG1lbWJlci4KLSAgICAgICAgY2xhc3MgT3BlcmFuZERlcGVuZGVudE9mZnNldCh0emluZm8pOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKLSAgICAgICAgICAgICAgICBpZiB0Lm1pbnV0ZSA8IDEwOgotICAgICAgICAgICAgICAgICAgICAjIGQwIGFuZCBkMSBlcXVhbCBhZnRlciBhZGp1c3RtZW50Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aW1lZGVsdGEobWludXRlcz10Lm1pbnV0ZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIGQyIG9mZiBpbiB0aGUgd2VlZHMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YShtaW51dGVzPTU5KQotCi0gICAgICAgIGJhc2UgPSBjbHMoOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQotICAgICAgICBkMCA9IGJhc2UucmVwbGFjZShtaW51dGU9MykKLSAgICAgICAgZDEgPSBiYXNlLnJlcGxhY2UobWludXRlPTkpCi0gICAgICAgIGQyID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT0xMSkKLSAgICAgICAgZm9yIHggaW4gZDAsIGQxLCBkMjoKLSAgICAgICAgICAgIGZvciB5IGluIGQwLCBkMSwgZDI6Ci0gICAgICAgICAgICAgICAgZ290ID0geCAtIHkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YShtaW51dGVzPXgubWludXRlIC0geS5taW51dGUpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgICAgICMgT1RPSCwgaWYgdGhlIHR6aW5mbyBtZW1iZXJzIGFyZSBkaXN0aW5jdCwgdXRjb2Zmc2V0cyBhcmVuJ3QKLSAgICAgICAgIyBpZ25vcmVkLgotICAgICAgICBiYXNlID0gY2xzKDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCkKLSAgICAgICAgZDAgPSBiYXNlLnJlcGxhY2UobWludXRlPTMsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCi0gICAgICAgIGQxID0gYmFzZS5yZXBsYWNlKG1pbnV0ZT05LCB0emluZm89T3BlcmFuZERlcGVuZGVudE9mZnNldCgpKQotICAgICAgICBkMiA9IGJhc2UucmVwbGFjZShtaW51dGU9MTEsIHR6aW5mbz1PcGVyYW5kRGVwZW5kZW50T2Zmc2V0KCkpCi0gICAgICAgIGZvciB4IGluIGQwLCBkMSwgZDI6Ci0gICAgICAgICAgICBmb3IgeSBpbiBkMCwgZDEsIGQyOgotICAgICAgICAgICAgICAgIGdvdCA9IHggLSB5Ci0gICAgICAgICAgICAgICAgaWYgKHggaXMgZDAgb3IgeCBpcyBkMSkgYW5kICh5IGlzIGQwIG9yIHkgaXMgZDEpOgotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQotICAgICAgICAgICAgICAgIGVsaWYgeCBpcyB5IGlzIGQyOgotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHRpbWVkZWx0YSgwKQotICAgICAgICAgICAgICAgIGVsaWYgeCBpcyBkMjoKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0oMTEtNTkpLTApCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHkgaXMgZDIKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB0aW1lZGVsdGEobWludXRlcz0wLSgxMS01OSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyZShzZWxmKToKLSAgICAgICAgdDEgPSBkYXRldGltZSgxLCAyLCAzLCA0LCA1LCA2LCA3KQotICAgICAgICB0MiA9IGRhdGV0aW1lKDEsIDIsIDMsIDQsIDUsIDYsIDcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotICAgICAgICB0MiA9IHQyLnJlcGxhY2UodHppbmZvPUZpeGVkT2Zmc2V0KE5vbmUsICIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MSwgdDIpCi0gICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89Rml4ZWRPZmZzZXQoMCwgIiIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogdDEgPT0gdDIpCi0KLSAgICAgICAgIyBJbiBkYXRldGltZSB3LyBpZGVudGljYWwgdHppbmZvIG9iamVjdHMsIHV0Y29mZnNldCBpcyBpZ25vcmVkLgotICAgICAgICBjbGFzcyBWYXJpZXModHppbmZvKToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCA9IHRpbWVkZWx0YShtaW51dGVzPTIyKQotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCB0KToKLSAgICAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSB0aW1lZGVsdGEobWludXRlcz0xKQotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9mZnNldAotCi0gICAgICAgIHYgPSBWYXJpZXMoKQotICAgICAgICB0MSA9IHQyLnJlcGxhY2UodHppbmZvPXYpCi0gICAgICAgIHQyID0gdDIucmVwbGFjZSh0emluZm89dikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MS51dGNvZmZzZXQoKSwgdGltZWRlbHRhKG1pbnV0ZXM9MjMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyLnV0Y29mZnNldCgpLCB0aW1lZGVsdGEobWludXRlcz0yNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDEsIHQyKQotCi0gICAgICAgICMgQnV0IGlmIHRoZXkncmUgbm90IGlkZW50aWNhbCwgaXQgaXNuJ3QgaWdub3JlZC4KLSAgICAgICAgdDIgPSB0Mi5yZXBsYWNlKHR6aW5mbz1WYXJpZXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxIDwgdDIpICAjIHQxJ3Mgb2Zmc2V0IGNvdW50ZXIgc3RpbGwgZ29pbmcgdXAKLQotICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2RhdGV0aW1ldHooc2VsZik6Ci0KLSAgICAgICAgY2xhc3MgQyhzZWxmLnRoZWNsYXNzKToKLSAgICAgICAgICAgIHRoZUFuc3dlciA9IDQyCi0KLSAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dzKToKLSAgICAgICAgICAgICAgICB0ZW1wID0ga3dzLmNvcHkoKQotICAgICAgICAgICAgICAgIGV4dHJhID0gdGVtcC5wb3AoJ2V4dHJhJykKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnRoZWNsYXNzLl9fbmV3X18oY2xzLCAqYXJncywgKip0ZW1wKQotICAgICAgICAgICAgICAgIHJlc3VsdC5leHRyYSA9IGV4dHJhCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICAgICAgICBkZWYgbmV3bWV0aChzZWxmLCBzdGFydCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0ICsgc2VsZi5ob3VyICsgc2VsZi55ZWFyCi0KLSAgICAgICAgYXJncyA9IDIwMDIsIDEyLCAzMSwgNCwgNSwgNiwgNTAwLCBGaXhlZE9mZnNldCgtMzAwLCAiRVNUIiwgMSkKLQotICAgICAgICBkdDEgPSBzZWxmLnRoZWNsYXNzKCphcmdzKQotICAgICAgICBkdDIgPSBDKCphcmdzLCAqKnsnZXh0cmEnOiA3fSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5fX2NsYXNzX18sIEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLnRoZUFuc3dlciwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQyLmV4dHJhLCA3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0MS51dGNvZmZzZXQoKSwgZHQyLnV0Y29mZnNldCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0Mi5uZXdtZXRoKC03KSwgZHQxLmhvdXIgKyBkdDEueWVhciAtIDcpCi0KLSMgUGFpbiB0byBzZXQgdXAgRFNULWF3YXJlIHR6aW5mbyBjbGFzc2VzLgotCi1kZWYgZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKGR0KToKLSAgICBkYXlzX3RvX2dvID0gNiAtIGR0LndlZWtkYXkoKQotICAgIGlmIGRheXNfdG9fZ286Ci0gICAgICAgIGR0ICs9IHRpbWVkZWx0YShkYXlzX3RvX2dvKQotICAgIHJldHVybiBkdAotCi1aRVJPID0gdGltZWRlbHRhKDApCi1IT1VSID0gdGltZWRlbHRhKGhvdXJzPTEpCi1EQVkgPSB0aW1lZGVsdGEoZGF5cz0xKQotIyBJbiB0aGUgVVMsIERTVCBzdGFydHMgYXQgMmFtIChzdGFuZGFyZCB0aW1lKSBvbiB0aGUgZmlyc3QgU3VuZGF5IGluIEFwcmlsLgotRFNUU1RBUlQgPSBkYXRldGltZSgxLCA0LCAxLCAyKQotIyBhbmQgZW5kcyBhdCAyYW0gKERTVCB0aW1lOyAxYW0gc3RhbmRhcmQgdGltZSkgb24gdGhlIGxhc3QgU3VuZGF5IG9mIE9jdCwKLSMgd2hpY2ggaXMgdGhlIGZpcnN0IFN1bmRheSBvbiBvciBhZnRlciBPY3QgMjUuICBCZWNhdXNlIHdlIHZpZXcgMTpNTSBhcwotIyBiZWluZyBzdGFuZGFyZCB0aW1lIG9uIHRoYXQgZGF5LCB0aGVyZSBpcyBubyBzcGVsbGluZyBpbiBsb2NhbCB0aW1lIG9mCi0jIHRoZSBsYXN0IGhvdXIgb2YgRFNUICh0aGF0J3MgMTpNTSBEU1QsIGJ1dCAxOk1NIGlzIHRha2VuIGFzIHN0YW5kYXJkIHRpbWUpLgotRFNURU5EID0gZGF0ZXRpbWUoMSwgMTAsIDI1LCAxKQotCi1jbGFzcyBVU1RpbWVab25lKHR6aW5mbyk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG91cnMsIHJlcHJuYW1lLCBzdGRuYW1lLCBkc3RuYW1lKToKLSAgICAgICAgc2VsZi5zdGRvZmZzZXQgPSB0aW1lZGVsdGEoaG91cnM9aG91cnMpCi0gICAgICAgIHNlbGYucmVwcm5hbWUgPSByZXBybmFtZQotICAgICAgICBzZWxmLnN0ZG5hbWUgPSBzdGRuYW1lCi0gICAgICAgIHNlbGYuZHN0bmFtZSA9IGRzdG5hbWUKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmVwcm5hbWUKLQotICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgotICAgICAgICBpZiBzZWxmLmRzdChkdCk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5kc3RuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zdGRuYW1lCi0KLSAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuc3Rkb2Zmc2V0ICsgc2VsZi5kc3QoZHQpCi0KLSAgICBkZWYgZHN0KHNlbGYsIGR0KToKLSAgICAgICAgaWYgZHQgaXMgTm9uZSBvciBkdC50emluZm8gaXMgTm9uZToKLSAgICAgICAgICAgICMgQW4gZXhjZXB0aW9uIGluc3RlYWQgbWF5IGJlIHNlbnNpYmxlIGhlcmUsIGluIG9uZSBvciBtb3JlIG9mCi0gICAgICAgICAgICAjIHRoZSBjYXNlcy4KLSAgICAgICAgICAgIHJldHVybiBaRVJPCi0gICAgICAgIGFzc2VydCBkdC50emluZm8gaXMgc2VsZgotCi0gICAgICAgICMgRmluZCBmaXJzdCBTdW5kYXkgaW4gQXByaWwuCi0gICAgICAgIHN0YXJ0ID0gZmlyc3Rfc3VuZGF5X29uX29yX2FmdGVyKERTVFNUQVJULnJlcGxhY2UoeWVhcj1kdC55ZWFyKSkKLSAgICAgICAgYXNzZXJ0IHN0YXJ0LndlZWtkYXkoKSA9PSA2IGFuZCBzdGFydC5tb250aCA9PSA0IGFuZCBzdGFydC5kYXkgPD0gNwotCi0gICAgICAgICMgRmluZCBsYXN0IFN1bmRheSBpbiBPY3RvYmVyLgotICAgICAgICBlbmQgPSBmaXJzdF9zdW5kYXlfb25fb3JfYWZ0ZXIoRFNURU5ELnJlcGxhY2UoeWVhcj1kdC55ZWFyKSkKLSAgICAgICAgYXNzZXJ0IGVuZC53ZWVrZGF5KCkgPT0gNiBhbmQgZW5kLm1vbnRoID09IDEwIGFuZCBlbmQuZGF5ID49IDI1Ci0KLSAgICAgICAgIyBDYW4ndCBjb21wYXJlIG5haXZlIHRvIGF3YXJlIG9iamVjdHMsIHNvIHN0cmlwIHRoZSB0aW1lem9uZSBmcm9tCi0gICAgICAgICMgZHQgZmlyc3QuCi0gICAgICAgIGlmIHN0YXJ0IDw9IGR0LnJlcGxhY2UodHppbmZvPU5vbmUpIDwgZW5kOgotICAgICAgICAgICAgcmV0dXJuIEhPVVIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBaRVJPCi0KLUVhc3Rlcm4gID0gVVNUaW1lWm9uZSgtNSwgIkVhc3Rlcm4iLCAgIkVTVCIsICJFRFQiKQotQ2VudHJhbCAgPSBVU1RpbWVab25lKC02LCAiQ2VudHJhbCIsICAiQ1NUIiwgIkNEVCIpCi1Nb3VudGFpbiA9IFVTVGltZVpvbmUoLTcsICJNb3VudGFpbiIsICJNU1QiLCAiTURUIikKLVBhY2lmaWMgID0gVVNUaW1lWm9uZSgtOCwgIlBhY2lmaWMiLCAgIlBTVCIsICJQRFQiKQotdXRjX3JlYWwgPSBGaXhlZE9mZnNldCgwLCAiVVRDIiwgMCkKLSMgRm9yIGJldHRlciB0ZXN0IGNvdmVyYWdlLCB3ZSB3YW50IGFub3RoZXIgZmxhdm9yIG9mIFVUQyB0aGF0J3Mgd2VzdCBvZgotIyB0aGUgRWFzdGVybiBhbmQgUGFjaWZpYyB0aW1lem9uZXMuCi11dGNfZmFrZSA9IEZpeGVkT2Zmc2V0KC0xMio2MCwgIlVUQ2Zha2UiLCAwKQotCi1jbGFzcyBUZXN0VGltZXpvbmVDb252ZXJzaW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBUaGUgRFNUIHN3aXRjaCB0aW1lcyBmb3IgMjAwMiwgaW4gc3RkIHRpbWUuCi0gICAgZHN0b24gPSBkYXRldGltZSgyMDAyLCA0LCA3LCAyKQotICAgIGRzdG9mZiA9IGRhdGV0aW1lKDIwMDIsIDEwLCAyNywgMSkKLQotICAgIHRoZWNsYXNzID0gZGF0ZXRpbWUKLQotICAgICMgQ2hlY2sgYSB0aW1lIHRoYXQncyBpbnNpZGUgRFNULgotICAgIGRlZiBjaGVja2luc2lkZShzZWxmLCBkdCwgdHosIHV0YywgZHN0b24sIGRzdG9mZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuZHN0KCksIEhPVVIpCi0KLSAgICAgICAgIyBDb252ZXJzaW9uIHRvIG91ciBvd24gdGltZXpvbmUgaXMgYWx3YXlzIGFuIGlkZW50aXR5LgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LmFzdGltZXpvbmUodHopLCBkdCkKLQotICAgICAgICBhc3V0YyA9IGR0LmFzdGltZXpvbmUodXRjKQotICAgICAgICB0aGVyZV9hbmRfYmFjayA9IGFzdXRjLmFzdGltZXpvbmUodHopCi0KLSAgICAgICAgIyBDb252ZXJzaW9uIHRvIFVUQyBhbmQgYmFjayBpc24ndCBhbHdheXMgYW4gaWRlbnRpdHkgaGVyZSwKLSAgICAgICAgIyBiZWNhdXNlIHRoZXJlIGFyZSByZWR1bmRhbnQgc3BlbGxpbmdzIChpbiBsb2NhbCB0aW1lKSBvZgotICAgICAgICAjIFVUQyB0aW1lIHdoZW4gRFNUIGJlZ2luczogIHRoZSBjbG9jayBqdW1wcyBmcm9tIDE6NTk6NTkKLSAgICAgICAgIyB0byAzOjAwOjAwLCBhbmQgYSBsb2NhbCB0aW1lIG9mIDI6TU06U1MgZG9lc24ndCByZWFsbHkKLSAgICAgICAgIyBtYWtlIHNlbnNlIHRoZW4uICBUaGUgY2xhc3NlcyBhYm92ZSB0cmVhdCAyOk1NOlNTIGFzCi0gICAgICAgICMgZGF5bGlnaHQgdGltZSB0aGVuIChpdCdzICJhZnRlciAyYW0iKSwgcmVhbGx5IGFuIGFsaWFzCi0gICAgICAgICMgZm9yIDE6TU06U1Mgc3RhbmRhcmQgdGltZS4gIFRoZSBsYXR0ZXIgZm9ybSBpcyB3aGF0Ci0gICAgICAgICMgY29udmVyc2lvbiBiYWNrIGZyb20gVVRDIHByb2R1Y2VzLgotICAgICAgICBpZiBkdC5kYXRlKCkgPT0gZHN0b24uZGF0ZSgpIGFuZCBkdC5ob3VyID09IDI6Ci0gICAgICAgICAgICAjIFdlJ3JlIGluIHRoZSByZWR1bmRhbnQgaG91ciwgYW5kIGNvbWluZyBiYWNrIGZyb20KLSAgICAgICAgICAgICMgVVRDIGdpdmVzIHRoZSAxOk1NOlNTIHN0YW5kYXJkLXRpbWUgc3BlbGxpbmcuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZXJlX2FuZF9iYWNrICsgSE9VUiwgZHQpCi0gICAgICAgICAgICAjIEFsdGhvdWdoIGR1cmluZyB3YXMgY29uc2lkZXJlZCB0byBiZSBpbiBkYXlsaWdodAotICAgICAgICAgICAgIyB0aW1lLCB0aGVyZV9hbmRfYmFjayBpcyBub3QuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRoZXJlX2FuZF9iYWNrLmRzdCgpLCBaRVJPKQotICAgICAgICAgICAgIyBUaGV5J3JlIHRoZSBzYW1lIHRpbWVzIGluIFVUQy4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhlcmVfYW5kX2JhY2suYXN0aW1lem9uZSh1dGMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdC5hc3RpbWV6b25lKHV0YykpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFdlJ3JlIG5vdCBpbiB0aGUgcmVkdW5kYW50IGhvdXIuCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR0LCB0aGVyZV9hbmRfYmFjaykKLQotICAgICAgICAjIEJlY2F1c2Ugd2UgaGF2ZSBhIHJlZHVuZGFudCBzcGVsbGluZyB3aGVuIERTVCBiZWdpbnMsIHRoZXJlIGlzCi0gICAgICAgICMgKHVuZm9ydHVuYXRlbHkpIGFuIGhvdXIgd2hlbiBEU1QgZW5kcyB0aGF0IGNhbid0IGJlIHNwZWxsZWQgYXQgYWxsIGluCi0gICAgICAgICMgbG9jYWwgdGltZS4gIFdoZW4gRFNUIGVuZHMsIHRoZSBjbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwCi0gICAgICAgICMgYWdhaW4uICBUaGUgaG91ciAxOk1NIERTVCBoYXMgbm8gc3BlbGxpbmcgdGhlbjogIDE6TU0gaXMgdGFrZW4gdG8gYmUKLSAgICAgICAgIyBzdGFuZGFyZCB0aW1lLiAgMTpNTSBEU1QgPT0gMDpNTSBFU1QsIGJ1dCAwOk1NIGlzIHRha2VuIHRvIGJlCi0gICAgICAgICMgZGF5bGlnaHQgdGltZS4gIFRoZSBob3VyIDE6TU0gZGF5bGlnaHQgPT0gMDpNTSBzdGFuZGFyZCBjYW4ndCBiZQotICAgICAgICAjIGV4cHJlc3NlZCBpbiBsb2NhbCB0aW1lLiAgTmV2ZXJ0aGVsZXNzLCB3ZSB3YW50IGNvbnZlcnNpb24gYmFjawotICAgICAgICAjIGZyb20gVVRDIHRvIG1pbWljIHRoZSBsb2NhbCBjbG9jaydzICJyZXBlYXQgYW4gaG91ciIgYmVoYXZpb3IuCi0gICAgICAgIG5leHRob3VyX3V0YyA9IGFzdXRjICsgSE9VUgotICAgICAgICBuZXh0aG91cl90eiA9IG5leHRob3VyX3V0Yy5hc3RpbWV6b25lKHR6KQotICAgICAgICBpZiBkdC5kYXRlKCkgPT0gZHN0b2ZmLmRhdGUoKSBhbmQgZHQuaG91ciA9PSAwOgotICAgICAgICAgICAgIyBXZSdyZSBpbiB0aGUgaG91ciBiZWZvcmUgdGhlIGxhc3QgRFNUIGhvdXIuICBUaGUgbGFzdCBEU1QgaG91cgotICAgICAgICAgICAgIyBpcyBpbmVmZmFibGUuICBXZSB3YW50IHRoZSBjb252ZXJzaW9uIGJhY2sgdG8gcmVwZWF0IDE6TU0uCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHRob3VyX3R6LCBkdC5yZXBsYWNlKGhvdXI9MSkpCi0gICAgICAgICAgICBuZXh0aG91cl91dGMgKz0gSE9VUgotICAgICAgICAgICAgbmV4dGhvdXJfdHogPSBuZXh0aG91cl91dGMuYXN0aW1lem9uZSh0eikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dGhvdXJfdHosIGR0LnJlcGxhY2UoaG91cj0xKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dGhvdXJfdHogLSBkdCwgSE9VUikKLQotICAgICMgQ2hlY2sgYSB0aW1lIHRoYXQncyBvdXRzaWRlIERTVC4KLSAgICBkZWYgY2hlY2tvdXRzaWRlKHNlbGYsIGR0LCB0eiwgdXRjKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdC5kc3QoKSwgWkVSTykKLQotICAgICAgICAjIENvbnZlcnNpb24gdG8gb3VyIG93biB0aW1lem9uZSBpcyBhbHdheXMgYW4gaWRlbnRpdHkuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQuYXN0aW1lem9uZSh0eiksIGR0KQotCi0gICAgICAgICMgQ29udmVydGluZyB0byBVVEMgYW5kIGJhY2sgaXMgYW4gaWRlbnRpdHkgdG9vLgotICAgICAgICBhc3V0YyA9IGR0LmFzdGltZXpvbmUodXRjKQotICAgICAgICB0aGVyZV9hbmRfYmFjayA9IGFzdXRjLmFzdGltZXpvbmUodHopCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHQsIHRoZXJlX2FuZF9iYWNrKQotCi0gICAgZGVmIGNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKHNlbGYsIHR6LCB1dGMpOgotICAgICAgICBkc3RvbiA9IHNlbGYuZHN0b24ucmVwbGFjZSh0emluZm89dHopCi0gICAgICAgICMgQmVjYXVzZSAxOk1NIG9uIHRoZSBkYXkgRFNUIGVuZHMgaXMgdGFrZW4gYXMgYmVpbmcgc3RhbmRhcmQgdGltZSwKLSAgICAgICAgIyB0aGVyZSBpcyBubyBzcGVsbGluZyBpbiB0eiBmb3IgdGhlIGxhc3QgaG91ciBvZiBkYXlsaWdodCB0aW1lLgotICAgICAgICAjIEZvciBwdXJwb3NlcyBvZiB0aGUgdGVzdCwgdGhlIGxhc3QgaG91ciBvZiBEU1QgaXMgMDpNTSwgd2hpY2ggaXMKLSAgICAgICAgIyB0YWtlbiBhcyBiZWluZyBkYXlsaWdodCB0aW1lIChhbmQgMTpNTSBpcyB0YWtlbiBhcyBiZWluZyBzdGFuZGFyZAotICAgICAgICAjIHRpbWUpLgotICAgICAgICBkc3RvZmYgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKHR6aW5mbz10eikKLSAgICAgICAgZm9yIGRlbHRhIGluICh0aW1lZGVsdGEod2Vla3M9MTMpLAotICAgICAgICAgICAgICAgICAgICAgIERBWSwKLSAgICAgICAgICAgICAgICAgICAgICBIT1VSLAotICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaW51dGVzPTEpLAotICAgICAgICAgICAgICAgICAgICAgIHRpbWVkZWx0YShtaWNyb3NlY29uZHM9MSkpOgotCi0gICAgICAgICAgICBzZWxmLmNoZWNraW5zaWRlKGRzdG9uLCB0eiwgdXRjLCBkc3RvbiwgZHN0b2ZmKQotICAgICAgICAgICAgZm9yIGR1cmluZyBpbiBkc3RvbiArIGRlbHRhLCBkc3RvZmYgLSBkZWx0YToKLSAgICAgICAgICAgICAgICBzZWxmLmNoZWNraW5zaWRlKGR1cmluZywgdHosIHV0YywgZHN0b24sIGRzdG9mZikKLQotICAgICAgICAgICAgc2VsZi5jaGVja291dHNpZGUoZHN0b2ZmLCB0eiwgdXRjKQotICAgICAgICAgICAgZm9yIG91dHNpZGUgaW4gZHN0b24gLSBkZWx0YSwgZHN0b2ZmICsgZGVsdGE6Ci0gICAgICAgICAgICAgICAgc2VsZi5jaGVja291dHNpZGUob3V0c2lkZSwgdHosIHV0YykKLQotICAgIGRlZiB0ZXN0X2Vhc3koc2VsZik6Ci0gICAgICAgICMgRGVzcGl0ZSB0aGUgbmFtZSBvZiB0aGlzIHRlc3QsIHRoZSBlbmRjYXNlcyBhcmUgZXhjcnVjaWF0aW5nLgotICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIHV0Y19yZWFsKQotICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKFBhY2lmaWMsIHV0Y19yZWFsKQotICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKEVhc3Rlcm4sIHV0Y19mYWtlKQotICAgICAgICBzZWxmLmNvbnZlcnRfYmV0d2Vlbl90el9hbmRfdXRjKFBhY2lmaWMsIHV0Y19mYWtlKQotICAgICAgICAjIFRoZSBuZXh0IGlzIHJlYWxseSBkYW5jaW5nIG5lYXIgdGhlIGVkZ2UuICBJdCB3b3JrcyBiZWNhdXNlCi0gICAgICAgICMgUGFjaWZpYyBhbmQgRWFzdGVybiBhcmUgZmFyIGVub3VnaCBhcGFydCB0aGF0IHRoZWlyICJwcm9ibGVtCi0gICAgICAgICMgaG91cnMiIGRvbid0IG92ZXJsYXAuCi0gICAgICAgIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgUGFjaWZpYykKLSAgICAgICAgc2VsZi5jb252ZXJ0X2JldHdlZW5fdHpfYW5kX3V0YyhQYWNpZmljLCBFYXN0ZXJuKQotICAgICAgICAjIE9UT0gsIHRoZXNlIGZhaWwhICBEb24ndCBlbmFibGUgdGhlbS4gIFRoZSBkaWZmaWN1bHR5IGlzIHRoYXQKLSAgICAgICAgIyB0aGUgZWRnZSBjYXNlIHRlc3RzIGFzc3VtZSB0aGF0IGV2ZXJ5IGhvdXIgaXMgcmVwcmVzZW50YWJsZSBpbgotICAgICAgICAjIHRoZSAidXRjIiBjbGFzcy4gIFRoaXMgaXMgYWx3YXlzIHRydWUgZm9yIGEgZml4ZWQtb2Zmc2V0IHR6aW5mbwotICAgICAgICAjIGNsYXNzIChsa2UgdXRjX3JlYWwgYW5kIHV0Y19mYWtlKSwgYnV0IG5vdCBmb3IgRWFzdGVybiBvciBDZW50cmFsLgotICAgICAgICAjIEZvciB0aGVzZSBhZGphY2VudCBEU1QtYXdhcmUgdGltZSB6b25lcywgdGhlIHJhbmdlIG9mIHRpbWUgb2Zmc2V0cwotICAgICAgICAjIHRlc3RlZCBlbmRzIHVwIGNyZWF0aW5nIGhvdXJzIGluIHRoZSBvbmUgdGhhdCBhcmVuJ3QgcmVwcmVzZW50YWJsZQotICAgICAgICAjIGluIHRoZSBvdGhlci4gIEZvciB0aGUgc2FtZSByZWFzb24sIHdlIHdvdWxkIHNlZSBmYWlsdXJlcyBpbiB0aGUKLSAgICAgICAgIyBFYXN0ZXJuIHZzIFBhY2lmaWMgdGVzdHMgdG9vIGlmIHdlIGFkZGVkIDMqSE9VUiB0byB0aGUgbGlzdCBvZgotICAgICAgICAjIG9mZnNldCBkZWx0YXMgaW4gY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoKS4KLSAgICAgICAgIwotICAgICAgICAjIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoRWFzdGVybiwgQ2VudHJhbCkgICMgY2FuJ3Qgd29yawotICAgICAgICAjIHNlbGYuY29udmVydF9iZXR3ZWVuX3R6X2FuZF91dGMoQ2VudHJhbCwgRWFzdGVybikgICMgY2FuJ3Qgd29yawotCi0gICAgZGVmIHRlc3RfdHJpY2t5KHNlbGYpOgotICAgICAgICAjIDIyOjAwIG9uIGRheSBiZWZvcmUgZGF5bGlnaHQgc3RhcnRzLgotICAgICAgICBmb3VyYmFjayA9IHNlbGYuZHN0b24gLSB0aW1lZGVsdGEoaG91cnM9NCkKLSAgICAgICAgbmluZXdlc3QgPSBGaXhlZE9mZnNldCgtOSo2MCwgIi0wOTAwIiwgMCkKLSAgICAgICAgZm91cmJhY2sgPSBmb3VyYmFjay5yZXBsYWNlKHR6aW5mbz1uaW5ld2VzdCkKLSAgICAgICAgIyAyMjowMC0wOTAwIGlzIDc6MDAgVVRDID09IDI6MDAgRVNUID09IDM6MDAgRFNULiAgU2luY2UgaXQncyAiYWZ0ZXIKLSAgICAgICAgIyAyIiwgd2Ugc2hvdWxkIGdldCB0aGUgMyBzcGVsbGluZy4KLSAgICAgICAgIyBJZiB3ZSBwbHVnIDIyOjAwIHRoZSBkYXkgYmVmb3JlIGludG8gRWFzdGVybiwgaXQgImxvb2tzIGxpa2Ugc3RkCi0gICAgICAgICMgdGltZSIsIHNvIGl0cyBvZmZzZXQgaXMgcmV0dXJuZWQgYXMgLTUsIGFuZCAtNSAtIC05ID0gNC4gIEFkZGluZyA0Ci0gICAgICAgICMgdG8gMjI6MDAgbGFuZHMgb24gMjowMCwgd2hpY2ggbWFrZXMgbm8gc2Vuc2UgaW4gbG9jYWwgdGltZSAodGhlCi0gICAgICAgICMgbG9jYWwgY2xvY2sganVtcHMgZnJvbSAxIHRvIDMpLiAgVGhlIHBvaW50IGhlcmUgaXMgdG8gbWFrZSBzdXJlIHdlCi0gICAgICAgICMgZ2V0IHRoZSAzIHNwZWxsaW5nLgotICAgICAgICBleHBlY3RlZCA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTMpCi0gICAgICAgIGdvdCA9IGZvdXJiYWNrLmFzdGltZXpvbmUoRWFzdGVybikucmVwbGFjZSh0emluZm89Tm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQotCi0gICAgICAgICMgU2ltaWxhciwgYnV0IG1hcCB0byA2OjAwIFVUQyA9PSAxOjAwIEVTVCA9PSAyOjAwIERTVC4gIEluIHRoYXQKLSAgICAgICAgIyBjYXNlIHdlIHdhbnQgdGhlIDE6MDAgc3BlbGxpbmcuCi0gICAgICAgIHNpeHV0YyA9IHNlbGYuZHN0b24ucmVwbGFjZShob3VyPTYsIHR6aW5mbz11dGNfcmVhbCkKLSAgICAgICAgIyBOb3cgNjowMCAibG9va3MgbGlrZSBkYXlsaWdodCIsIHNvIHRoZSBvZmZzZXQgd3J0IEVhc3Rlcm4gaXMgLTQsCi0gICAgICAgICMgYW5kIGFkZGluZyAtNC0wID09IC00IGdpdmVzIHRoZSAyOjAwIHNwZWxsaW5nLiAgV2Ugd2FudCB0aGUgMTowMCBFU1QKLSAgICAgICAgIyBzcGVsbGluZy4KLSAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmRzdG9uLnJlcGxhY2UoaG91cj0xKQotICAgICAgICBnb3QgPSBzaXh1dGMuYXN0aW1lem9uZShFYXN0ZXJuKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCi0KLSAgICAgICAgIyBOb3cgb24gdGhlIGRheSBEU1QgZW5kcywgd2Ugd2FudCAicmVwZWF0IGFuIGhvdXIiIGJlaGF2aW9yLgotICAgICAgICAjICBVVEMgIDQ6TU0gIDU6TU0gIDY6TU0gIDc6TU0gIGNoZWNraW5nIHRoZXNlCi0gICAgICAgICMgIEVTVCAyMzpNTSAgMDpNTSAgMTpNTSAgMjpNTQotICAgICAgICAjICBFRFQgIDA6TU0gIDE6TU0gIDI6TU0gIDM6TU0KLSAgICAgICAgIyB3YWxsICAwOk1NICAxOk1NICAxOk1NICAyOk1NICBhZ2FpbnN0IHRoZXNlCi0gICAgICAgIGZvciB1dGMgaW4gdXRjX3JlYWwsIHV0Y19mYWtlOgotICAgICAgICAgICAgZm9yIHR6IGluIEVhc3Rlcm4sIFBhY2lmaWM6Ci0gICAgICAgICAgICAgICAgZmlyc3Rfc3RkX2hvdXIgPSBzZWxmLmRzdG9mZiAtIHRpbWVkZWx0YShob3Vycz0yKSAjIDIzOk1NCi0gICAgICAgICAgICAgICAgIyBDb252ZXJ0IHRoYXQgdG8gVVRDLgotICAgICAgICAgICAgICAgIGZpcnN0X3N0ZF9ob3VyIC09IHR6LnV0Y29mZnNldChOb25lKQotICAgICAgICAgICAgICAgICMgQWRqdXN0IGZvciBwb3NzaWJseSBmYWtlIFVUQy4KLSAgICAgICAgICAgICAgICBhc3V0YyA9IGZpcnN0X3N0ZF9ob3VyICsgdXRjLnV0Y29mZnNldChOb25lKQotICAgICAgICAgICAgICAgICMgRmlyc3QgVVRDIGhvdXIgdG8gY29udmVydDsgdGhpcyBpcyA0OjAwIHdoZW4gdXRjPXV0Y19yZWFsICYKLSAgICAgICAgICAgICAgICAjIHR6PUVhc3Rlcm4uCi0gICAgICAgICAgICAgICAgYXN1dGNiYXNlID0gYXN1dGMucmVwbGFjZSh0emluZm89dXRjKQotICAgICAgICAgICAgICAgIGZvciB0emhvdXIgaW4gKDAsIDEsIDEsIDIpOgotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZGJhc2UgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKGhvdXI9dHpob3VyKQotICAgICAgICAgICAgICAgICAgICBmb3IgbWludXRlIGluIDAsIDMwLCA1OToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRiYXNlLnJlcGxhY2UobWludXRlPW1pbnV0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzdXRjID0gYXN1dGNiYXNlLnJlcGxhY2UobWludXRlPW1pbnV0ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzdHogPSBhc3V0Yy5hc3RpbWV6b25lKHR6KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc3R6LnJlcGxhY2UodHppbmZvPU5vbmUpLCBleHBlY3RlZCkKLSAgICAgICAgICAgICAgICAgICAgYXN1dGNiYXNlICs9IEhPVVIKLQotCi0gICAgZGVmIHRlc3RfYm9ndXNfZHN0KHNlbGYpOgotICAgICAgICBjbGFzcyBvayh0emluZm8pOgotICAgICAgICAgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkdCk6IHJldHVybiBIT1VSCi0gICAgICAgICAgICBkZWYgZHN0KHNlbGYsIGR0KTogcmV0dXJuIEhPVVIKLQotICAgICAgICBub3cgPSBzZWxmLnRoZWNsYXNzLm5vdygpLnJlcGxhY2UodHppbmZvPXV0Y19yZWFsKQotICAgICAgICAjIERvZXNuJ3QgYmxvdyB1cC4KLSAgICAgICAgbm93LmFzdGltZXpvbmUob2soKSkKLQotICAgICAgICAjIERvZXMgYmxvdyB1cC4KLSAgICAgICAgY2xhc3Mgbm90b2sob2spOgotICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6IHJldHVybiBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5vdy5hc3RpbWV6b25lLCBub3RvaygpKQotCi0gICAgICAgICMgU29tZXRpbWVzIGJsb3cgdXAuIEluIHRoZSBmb2xsb3dpbmcsIHR6aW5mby5kc3QoKQotICAgICAgICAjIGltcGxlbWVudGF0aW9uIG1heSByZXR1cm4gTm9uZSBvciBub3QgTm9uZWRlcGVuZGluZyBvbgotICAgICAgICAjIHdoZXRoZXIgRFNUIGlzIGFzc3VtZWQgdG8gYmUgaW4gZWZmZWN0LiAgSW4gdGhpcyBzaXR1YXRpb24sCi0gICAgICAgICMgYSBWYWx1ZUVycm9yIHNob3VsZCBiZSByYWlzZWQgYnkgYXN0aW1lem9uZSgpLgotICAgICAgICBjbGFzcyB0cmlja3lfbm90b2sob2spOgotICAgICAgICAgICAgZGVmIGRzdChzZWxmLCBkdCk6Ci0gICAgICAgICAgICAgICAgaWYgZHQueWVhciA9PSAyMDAwOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxMCpIT1VSCi0gICAgICAgIGR0ID0gc2VsZi50aGVjbGFzcygyMDAxLCAxLCAxKS5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZHQuYXN0aW1lem9uZSwgdHJpY2t5X25vdG9rKCkpCi0KLSAgICBkZWYgdGVzdF9mcm9tdXRjKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEVhc3Rlcm4uZnJvbXV0YykgICAjIG5vdCBlbm91Z2ggYXJncwotICAgICAgICBub3cgPSBkYXRldGltZS51dGNub3coKS5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRWFzdGVybi5mcm9tdXRjLCBub3cpICMgd3JvbmcgdHppbmZvCi0gICAgICAgIG5vdyA9IG5vdy5yZXBsYWNlKHR6aW5mbz1FYXN0ZXJuKSAgICMgaW5zZXJ0IGNvcnJlY3QgdHppbmZvCi0gICAgICAgIGVub3cgPSBFYXN0ZXJuLmZyb211dGMobm93KSAgICAgICAgICMgZG9lc24ndCBibG93IHVwCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5vdy50emluZm8sIEVhc3Rlcm4pICMgaGFzIHJpZ2h0IHR6aW5mbyBtZW1iZXIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBFYXN0ZXJuLmZyb211dGMsIG5vdywgbm93KSAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBFYXN0ZXJuLmZyb211dGMsIGRhdGUudG9kYXkoKSkgIyB3cm9uZyB0eXBlCi0KLSAgICAgICAgIyBBbHdheXMgY29udmVydHMgVVRDIHRvIHN0YW5kYXJkIHRpbWUuCi0gICAgICAgIGNsYXNzIEZhdXhVU1RpbWVab25lKFVTVGltZVpvbmUpOgotICAgICAgICAgICAgZGVmIGZyb211dGMoc2VsZiwgZHQpOgotICAgICAgICAgICAgICAgIHJldHVybiBkdCArIHNlbGYuc3Rkb2Zmc2V0Ci0gICAgICAgIEZFYXN0ZXJuICA9IEZhdXhVU1RpbWVab25lKC01LCAiRkVhc3Rlcm4iLCAgIkZFU1QiLCAiRkVEVCIpCi0KLSAgICAgICAgIyAgVVRDICA0Ok1NICA1Ok1NICA2Ok1NICA3Ok1NICA4Ok1NICA5Ok1NCi0gICAgICAgICMgIEVTVCAyMzpNTSAgMDpNTSAgMTpNTSAgMjpNTSAgMzpNTSAgNDpNTQotICAgICAgICAjICBFRFQgIDA6TU0gIDE6TU0gIDI6TU0gIDM6TU0gIDQ6TU0gIDU6TU0KLQotICAgICAgICAjIENoZWNrIGFyb3VuZCBEU1Qgc3RhcnQuCi0gICAgICAgIHN0YXJ0ID0gc2VsZi5kc3Rvbi5yZXBsYWNlKGhvdXI9NCwgdHppbmZvPUVhc3Rlcm4pCi0gICAgICAgIGZzdGFydCA9IHN0YXJ0LnJlcGxhY2UodHppbmZvPUZFYXN0ZXJuKQotICAgICAgICBmb3Igd2FsbCBpbiAyMywgMCwgMSwgMywgNCwgNToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc3RhcnQucmVwbGFjZShob3VyPXdhbGwpCi0gICAgICAgICAgICBpZiB3YWxsID09IDIzOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkIC09IHRpbWVkZWx0YShkYXlzPTEpCi0gICAgICAgICAgICBnb3QgPSBFYXN0ZXJuLmZyb211dGMoc3RhcnQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCi0KLSAgICAgICAgICAgIGV4cGVjdGVkID0gZnN0YXJ0ICsgRkVhc3Rlcm4uc3Rkb2Zmc2V0Ci0gICAgICAgICAgICBnb3QgPSBGRWFzdGVybi5mcm9tdXRjKGZzdGFydCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLQotICAgICAgICAgICAgIyBFbnN1cmUgYXN0aW1lem9uZSgpIGNhbGxzIGZyb211dGMoKSB0b28uCi0gICAgICAgICAgICBnb3QgPSBmc3RhcnQucmVwbGFjZSh0emluZm89dXRjX3JlYWwpLmFzdGltZXpvbmUoRkVhc3Rlcm4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBnb3QpCi0KLSAgICAgICAgICAgIHN0YXJ0ICs9IEhPVVIKLSAgICAgICAgICAgIGZzdGFydCArPSBIT1VSCi0KLSAgICAgICAgIyBDaGVjayBhcm91bmQgRFNUIGVuZC4KLSAgICAgICAgc3RhcnQgPSBzZWxmLmRzdG9mZi5yZXBsYWNlKGhvdXI9NCwgdHppbmZvPUVhc3Rlcm4pCi0gICAgICAgIGZzdGFydCA9IHN0YXJ0LnJlcGxhY2UodHppbmZvPUZFYXN0ZXJuKQotICAgICAgICBmb3Igd2FsbCBpbiAwLCAxLCAxLCAyLCAzLCA0OgotICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdGFydC5yZXBsYWNlKGhvdXI9d2FsbCkKLSAgICAgICAgICAgIGdvdCA9IEVhc3Rlcm4uZnJvbXV0YyhzdGFydCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLQotICAgICAgICAgICAgZXhwZWN0ZWQgPSBmc3RhcnQgKyBGRWFzdGVybi5zdGRvZmZzZXQKLSAgICAgICAgICAgIGdvdCA9IEZFYXN0ZXJuLmZyb211dGMoZnN0YXJ0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQotCi0gICAgICAgICAgICAjIEVuc3VyZSBhc3RpbWV6b25lKCkgY2FsbHMgZnJvbXV0YygpIHRvby4KLSAgICAgICAgICAgIGdvdCA9IGZzdGFydC5yZXBsYWNlKHR6aW5mbz11dGNfcmVhbCkuYXN0aW1lem9uZShGRWFzdGVybikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKLQotICAgICAgICAgICAgc3RhcnQgKz0gSE9VUgotICAgICAgICAgICAgZnN0YXJ0ICs9IEhPVVIKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBvZGRiYWxscwotCi1jbGFzcyBPZGRiYWxscyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9idWdfMTAyODMwNihzZWxmKToKLSAgICAgICAgIyBUcnlpbmcgdG8gY29tcGFyZSBhIGRhdGUgdG8gYSBkYXRldGltZSBzaG91bGQgYWN0IGxpa2UgYSBtaXhlZC0KLSAgICAgICAgIyB0eXBlIGNvbXBhcmlzb24sIGRlc3BpdGUgdGhhdCBkYXRldGltZSBpcyBhIHN1YmNsYXNzIG9mIGRhdGUuCi0gICAgICAgIGFzX2RhdGUgPSBkYXRlLnRvZGF5KCkKLSAgICAgICAgYXNfZGF0ZXRpbWUgPSBkYXRldGltZS5jb21iaW5lKGFzX2RhdGUsIHRpbWUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzX2RhdGUgIT0gYXNfZGF0ZXRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc19kYXRldGltZSAhPSBhc19kYXRlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGFzX2RhdGUgPT0gYXNfZGF0ZXRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYXNfZGF0ZXRpbWUgPT0gYXNfZGF0ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPCBhc19kYXRldGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lIDwgYXNfZGF0ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGUgPD0gYXNfZGF0ZXRpbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBhc19kYXRldGltZSA8PSBhc19kYXRlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA+IGFzX2RhdGV0aW1lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZXRpbWUgPiBhc19kYXRlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogYXNfZGF0ZSA+PSBhc19kYXRldGltZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGFzX2RhdGV0aW1lID49IGFzX2RhdGUpCi0KLSAgICAgICAgIyBOZXZlcnRoZWxzcywgY29tcGFyaXNvbiBzaG91bGQgd29yayB3aXRoIHRoZSBiYXNlLWNsYXNzIChkYXRlKQotICAgICAgICAjIHByb2plY3Rpb24gaWYgdXNlIG9mIGEgZGF0ZSBtZXRob2QgaXMgZm9yY2VkLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGUuX19lcV9fKGFzX2RhdGV0aW1lKSwgVHJ1ZSkKLSAgICAgICAgZGlmZmVyZW50X2RheSA9IChhc19kYXRlLmRheSArIDEpICUgMjAgKyAxCi0gICAgICAgIGFzX2RpZmZlcmVudCA9IGFzX2RhdGV0aW1lLnJlcGxhY2UoZGF5PSBkaWZmZXJlbnRfZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGUuX19lcV9fKGFzX2RpZmZlcmVudCksIEZhbHNlKQotCi0gICAgICAgICMgQW5kIGRhdGUgc2hvdWxkIGNvbXBhcmUgd2l0aCBvdGhlciBzdWJjbGFzc2VzIG9mIGRhdGUuICBJZiBhCi0gICAgICAgICMgc3ViY2xhc3Mgd2FudHMgdG8gc3RvcCB0aGlzLCBpdCdzIHVwIHRvIHRoZSBzdWJjbGFzcyB0byBkbyBzby4KLSAgICAgICAgZGF0ZV9zYyA9IFN1YmNsYXNzRGF0ZShhc19kYXRlLnllYXIsIGFzX2RhdGUubW9udGgsIGFzX2RhdGUuZGF5KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGUsIGRhdGVfc2MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZV9zYywgYXNfZGF0ZSkKLQotICAgICAgICAjIERpdHRvIGZvciBkYXRldGltZXMuCi0gICAgICAgIGRhdGV0aW1lX3NjID0gU3ViY2xhc3NEYXRldGltZShhc19kYXRldGltZS55ZWFyLCBhc19kYXRldGltZS5tb250aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzX2RhdGUuZGF5LCAwLCAwLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzX2RhdGV0aW1lLCBkYXRldGltZV9zYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZV9zYywgYXNfZGF0ZXRpbWUpCitmb3IgbW9kdWxlLCBzdWZmaXggaW4gemlwKHRlc3RfbW9kdWxlcywgdGVzdF9zdWZmaXhlcyk6CisgICAgZm9yIG5hbWUsIGNscyBpbiBtb2R1bGUuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjbHMsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKGNscywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgbmFtZSArPSBzdWZmaXgKKyAgICAgICAgICAgIGNscy5fX25hbWVfXyA9IG5hbWUKKyAgICAgICAgICAgIGdsb2JhbHMoKVtuYW1lXSA9IGNscworICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYsIG1vZHVsZT1tb2R1bGUsIHNldHVwPWNscy5zZXRVcCk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2F2ZV9zeXNfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmNvcHkoKQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW1RFU1RTXSA9IG1vZHVsZQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkYXRldGltZSddID0gbW9kdWxlLmRhdGV0aW1lX21vZHVsZQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfc3RycHRpbWUnXSA9IG1vZHVsZS5fc3RycHRpbWUKKyAgICAgICAgICAgICAgICBzZXR1cChzZWxmKQorICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYsIHRlYXJkb3duPWNscy50ZWFyRG93bik6CisgICAgICAgICAgICAgICAgdGVhcmRvd24oc2VsZikKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlcy5jbGVhcigpCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXMudXBkYXRlKHNlbGYuX3NhdmVfc3lzX21vZHVsZXMpCisgICAgICAgICAgICBjbHMuc2V0VXAgPSBzZXRVcAorICAgICAgICAgICAgY2xzLnRlYXJEb3duID0gdGVhckRvd24KIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorICAgIHJ1bl91bml0dGVzdChfX25hbWVfXykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibS5weQppbmRleCBjZTQ4Y2ZkLi4yNmQ0YzE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGRibS5vcGVuIGZ1bmN0aW9uIGJhc2VkIG9uIHRlc3RkdW1iZGJtLnB5IiIiCiAKIGltcG9ydCBvcwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIHNlbGYuaW5pdF9kYigpCiAgICAgICAgIGYgPSBkYm0ub3BlbihfZm5hbWUsICdyJykKICAgICAgICAga2V5ID0gImEiLmVuY29kZSgiYXNjaWkiKQotICAgICAgICBhc3NlcnQoa2V5IGluIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBmKQogICAgICAgICBhc3NlcnQoZltrZXldID09IGIiUHl0aG9uOiIpCiAgICAgICAgIGYuY2xvc2UoKQogCkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2RibS5kdW1iJzoKICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgd2hpY2hkYiBjYW4ndCBzdXBwb3J0IGRibS5kdW1iCi0gICAgICAgICAgICB0ZXN0LnN1cHBvcnQudW5saW5rKF9mbmFtZSkKKyAgICAgICAgICAgIGRlbGV0ZV9maWxlcygpCiAgICAgICAgICAgICBmID0gbW9kdWxlLm9wZW4oX2ZuYW1lLCAnYycpCiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgZGJtLndoaWNoZGIoX2ZuYW1lKSkKQEAgLTEzOSw3ICsxMzksNyBAQAogICAgICAgICAgICAgZiA9IG1vZHVsZS5vcGVuKF9mbmFtZSwgJ3cnKQogICAgICAgICAgICAgZltiIjEiXSA9IGIiMSIKICAgICAgICAgICAgICMgYW5kIHRlc3QgdGhhdCB3ZSBjYW4gZmluZCBpdAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiMSIgaW4gZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiIxIiwgZikKICAgICAgICAgICAgICMgYW5kIHJlYWQgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmW2IiMSJdID09IGIiMSIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKQEAgLTE2Miw5ICsxNjIsOSBAQAogICAgICAgICAgICAgc2VsZi5kW2tdID0gdgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzZWxmLmQua2V5cygpKSwgc29ydGVkKGsgZm9yIChrLCB2KSBpbiBhKSkKICAgICAgICAgZm9yIGssIHYgaW4gYToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIHNlbGYuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgc2VsZi5kKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRba10sIHYpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ3h4eCcgbm90IGluIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ3h4eCcsIHNlbGYuZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5kW2IneHh4J10pCiAgICAgICAgIHNlbGYuZC5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CmluZGV4IDk1NmVlYzYuLjZiOTgxYzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAiIiJUZXN0IHNjcmlwdCBmb3IgdGhlIGR1bWJkYm0gbW9kdWxlCiAgICBPcmlnaW5hbCBieSBSb2dlciBFLiBNYXNzZQogIiIiCkBAIC05Myw3ICs5Myw3IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQogICAgICAgICBmW2InMSddID0gYidoZWxsbycKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInMScgaW4gZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJzEnLCBmKQogICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3dyaXRlX3JlYWQoc2VsZik6CkBAIC0xMTgsNyArMTE4LDcgQEAKICAgICAgICAgZlsnMSddID0gJ2EnCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ3InKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1x1MDBmYycgaW4gZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignXHUwMGZjJywgZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmWydcdTAwZmMnLmVuY29kZSgndXRmLTgnKV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGljdFsnXHUwMGZjJy5lbmNvZGUoJ3V0Zi04JyldKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbYicxJ10sIGInYScpCkBAIC0xMzIsMTIgKzEzMiwxNCBAQAogICAgICAgICBmLmNsb3NlKCkKIAogICAgICAgICAjIE1hbmdsZSB0aGUgZmlsZSBieSBjaGFuZ2luZyB0aGUgbGluZSBzZXBhcmF0b3IgdG8gV2luZG93cyBvciBVbml4Ci0gICAgICAgIGRhdGEgPSBpby5vcGVuKF9mbmFtZSArICcuZGlyJywgJ3JiJykucmVhZCgpCisgICAgICAgIHdpdGggaW8ub3BlbihfZm5hbWUgKyAnLmRpcicsICdyYicpIGFzIGZpbGU6CisgICAgICAgICAgICBkYXRhID0gZmlsZS5yZWFkKCkKICAgICAgICAgaWYgb3MubGluZXNlcCA9PSAnXG4nOgogICAgICAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZShiJ1xuJywgYidcclxuJykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoYidcclxuJywgYidcbicpCi0gICAgICAgIGlvLm9wZW4oX2ZuYW1lICsgJy5kaXInLCAnd2InKS53cml0ZShkYXRhKQorICAgICAgICB3aXRoIGlvLm9wZW4oX2ZuYW1lICsgJy5kaXInLCAnd2InKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZShkYXRhKQogCiAgICAgICAgIGYgPSBkdW1iZGJtLm9wZW4oX2ZuYW1lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZbYicxJ10sIGInaGVsbG8nKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CmluZGV4IDIxNzNiOTIuLmNlOTZjZTQgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKQEAgLTI0LDE0ICsyNCwxOCBAQAogICAgICAgICBzZWxmLmdbYidieXRlcyddID0gYidkYXRhJwogICAgICAgICBrZXlfc2V0ID0gc2V0KHNlbGYuZy5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5X3NldCwgc2V0KFtiJ2EnLCBiJ2J5dGVzJywgYicxMjM0NTY3ODkxMCddKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInYScgaW4gc2VsZi5nKQorICAgICAgICBzZWxmLmFzc2VydEluKGInYScsIHNlbGYuZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdbYidieXRlcyddLCBiJ2RhdGEnKQogICAgICAgICBrZXkgPSBzZWxmLmcuZmlyc3RrZXkoKQogICAgICAgICB3aGlsZSBrZXk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIGtleV9zZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGtleSwga2V5X3NldCkKICAgICAgICAgICAgIGtleV9zZXQucmVtb3ZlKGtleSkKICAgICAgICAgICAgIGtleSA9IHNlbGYuZy5uZXh0a2V5KGtleSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogc2VsZi5nWyd4eHgnXSkKKyAgICAgICAgIyBnZXQoKSBhbmQgc2V0ZGVmYXVsdCgpIHdvcmsgYXMgaW4gdGhlIGRpY3QgaW50ZXJmYWNlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nLmdldChiJ3h4eCcsIGInZm9vJyksIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmcuc2V0ZGVmYXVsdChiJ3h4eCcsIGInZm9vJyksIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdbYid4eHgnXSwgYidmb28nKQogCiAgICAgZGVmIHRlc3RfZXJyb3JfY29uZGl0aW9ucyhzZWxmKToKICAgICAgICAgIyBUcnkgdG8gb3BlbiBhIG5vbi1leGlzdGVudCBkYXRhYmFzZS4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CmluZGV4IDE0MWQ0YjMuLjAwZGNiZDIgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQpAQCAtMjQsNyArMjQsNyBAQAogICAgICAgICBzZWxmLmRbYidieXRlcyddID0gYidkYXRhJwogICAgICAgICBzZWxmLmRbJzEyMzQ1Njc4OTEwJ10gPSAnMDE5MjM3NDEwOTgyMzQwOTEyODQwMTk4MjQyJwogICAgICAgICBzZWxmLmQua2V5cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiJ2EnIGluIHNlbGYuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ2EnLCBzZWxmLmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kW2InYnl0ZXMnXSwgYidkYXRhJykKICAgICAgICAgc2VsZi5kLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5IGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CmluZGV4IGVjMzgxZTQuLmU0NmNkOTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKQEAgLTI0LDE0ICsyNCwxNyBAQAogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudC4KICIiIgogCi1pbXBvcnQgZ2xvYgogaW1wb3J0IG1hdGgKIGltcG9ydCBvcywgc3lzCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHBpY2tsZSwgY29weQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGRlY2ltYWwgaW1wb3J0ICoKIGltcG9ydCBudW1iZXJzCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBydW5fZG9jdGVzdCwgaXNfcmVzb3VyY2VfZW5hYmxlZAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0LCBpc19yZXNvdXJjZV9lbmFibGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc19JRUVFXzc1NCkKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja193YXJuaW5ncwogaW1wb3J0IHJhbmRvbQogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTQwMiw3ICs0MDUsNyBAQAogICAgIGRlZiBjaGFuZ2VfbWF4X2V4cG9uZW50KHNlbGYsIGV4cCk6CiAgICAgICAgIHNlbGYuY29udGV4dC5FbWF4ID0gZXhwCiAgICAgZGVmIGNoYW5nZV9jbGFtcChzZWxmLCBjbGFtcCk6Ci0gICAgICAgIHNlbGYuY29udGV4dC5fY2xhbXAgPSBjbGFtcAorICAgICAgICBzZWxmLmNvbnRleHQuY2xhbXAgPSBjbGFtcAogCiAKIApAQCAtNDkzLDYgKzQ5NiwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDEwLCA0LCA5LCAxKSwgMikgKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBEZWNpbWFsLCAoMSwgKDQsIDMsIDQsICdhJywgMSksIDIpICkKIAorICAgIGRlZiB0ZXN0X2V4cGxpY2l0X2Zyb21fYm9vbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMCkpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKERlY2ltYWwoMSkpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoRmFsc2UpLCBEZWNpbWFsKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoVHJ1ZSksIERlY2ltYWwoMSkpCisKICAgICBkZWYgdGVzdF9leHBsaWNpdF9mcm9tX0RlY2ltYWwoc2VsZik6CiAKICAgICAgICAgI3Bvc2l0aXZlCkBAIC01MTksNiArNTI4LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAnMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQogCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfZXhwbGljaXRfZnJvbV9mbG9hdChzZWxmKToKKyAgICAgICAgciA9IERlY2ltYWwoMC4xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUociksIERlY2ltYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHIpLAorICAgICAgICAgICAgICAgICcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnbmFuJykpLmlzX3FuYW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKERlY2ltYWwoZmxvYXQoJ2luZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbChmbG9hdCgnLWluZicpKS5pc19pbmZpbml0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCduYW4nKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihEZWNpbWFsKCdOYU4nKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKERlY2ltYWwoZmxvYXQoJ2luZicpKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKERlY2ltYWwoJ0luZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctaW5mJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLUluZmluaXR5JykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihEZWNpbWFsKGZsb2F0KCctMC4wJykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHIoRGVjaW1hbCgnLTAnKSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIwMCk6CisgICAgICAgICAgICB4ID0gcmFuZG9tLmV4cG92YXJpYXRlKDAuMDEpICogKHJhbmRvbS5yYW5kb20oKSAqIDIuMCAtIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgZmxvYXQoRGVjaW1hbCh4KSkpICMgcm91bmR0cmlwCisKICAgICBkZWYgdGVzdF9leHBsaWNpdF9jb250ZXh0X2NyZWF0ZV9kZWNpbWFsKHNlbGYpOgogCiAgICAgICAgIG5jID0gY29weS5jb3B5KGdldGNvbnRleHQoKSkKQEAgLTUzNSw3ICs1NjUsNyBAQAogCiAgICAgICAgICMgZnJvbSBpbnQKICAgICAgICAgZCA9IG5jLmNyZWF0ZV9kZWNpbWFsKDQ1NikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZCwgRGVjaW1hbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkLCBEZWNpbWFsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5jLmNyZWF0ZV9kZWNpbWFsKDQ1Njc4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBuYy5jcmVhdGVfZGVjaW1hbCgnNDU3RSsyJykpCiAKQEAgLTczMiw2ICs3NjIsNyBAQAogICAgICAgICAgICAgKCcnLCAnMS4wMCcsICcxLjAwJyksCiAKICAgICAgICAgICAgICMgdGVzdCBhbGlnbm1lbnQgYW5kIHBhZGRpbmcKKyAgICAgICAgICAgICgnNicsICcxMjMnLCAnICAgMTIzJyksCiAgICAgICAgICAgICAoJzw2JywgJzEyMycsICcxMjMgICAnKSwKICAgICAgICAgICAgICgnPjYnLCAnMTIzJywgJyAgIDEyMycpLAogICAgICAgICAgICAgKCdeNicsICcxMjMnLCAnIDEyMyAgJyksCkBAIC03NjEsNyArNzkyLDcgQEAKICAgICAgICAgICAgICgnLCcsICctMTIzNDU2NycsICctMSwyMzQsNTY3JyksCiAgICAgICAgICAgICAoJywnLCAnLTEyMzQ1NicsICctMTIzLDQ1NicpLAogICAgICAgICAgICAgKCc3LCcsICcxMjM0NTYnLCAnMTIzLDQ1NicpLAotICAgICAgICAgICAgKCc4LCcsICcxMjM0NTYnLCAnMTIzLDQ1NiAnKSwKKyAgICAgICAgICAgICgnOCwnLCAnMTIzNDU2JywgJyAxMjMsNDU2JyksCiAgICAgICAgICAgICAoJzA4LCcsICcxMjM0NTYnLCAnMCwxMjMsNDU2JyksICMgc3BlY2lhbCBjYXNlOiBleHRyYSAwIG5lZWRlZAogICAgICAgICAgICAgKCcrMDgsJywgJzEyMzQ1NicsICcrMTIzLDQ1NicpLCAjIGJ1dCBub3QgaWYgdGhlcmUncyBhIHNpZ24KICAgICAgICAgICAgICgnIDA4LCcsICcxMjM0NTYnLCAnIDEyMyw0NTYnKSwKQEAgLTc4Myw2ICs4MTQsMTggQEAKIAogICAgICAgICAgICAgIyBpc3N1ZSA2ODUwCiAgICAgICAgICAgICAoJ2E9LTcuMCcsICcwLjEyMzQ1JywgJ2FhYWEwLjEnKSwKKworICAgICAgICAgICAgIyBJc3N1ZSA3MDk0OiBBbHRlcm5hdGUgZm9ybWF0dGluZyAoc3BlY2lmaWVkIGJ5ICMpCisgICAgICAgICAgICAoJy4wZScsICcxLjAnLCAnMWUrMCcpLAorICAgICAgICAgICAgKCcjLjBlJywgJzEuMCcsICcxLmUrMCcpLAorICAgICAgICAgICAgKCcuMGYnLCAnMS4wJywgJzEnKSwKKyAgICAgICAgICAgICgnIy4wZicsICcxLjAnLCAnMS4nKSwKKyAgICAgICAgICAgICgnZycsICcxLjEnLCAnMS4xJyksCisgICAgICAgICAgICAoJyNnJywgJzEuMScsICcxLjEnKSwKKyAgICAgICAgICAgICgnLjBnJywgJzEnLCAnMScpLAorICAgICAgICAgICAgKCcjLjBnJywgJzEnLCAnMS4nKSwKKyAgICAgICAgICAgICgnLjAlJywgJzEuMCcsICcxMDAlJyksCisgICAgICAgICAgICAoJyMuMCUnLCAnMS4wJywgJzEwMC4lJyksCiAgICAgICAgICAgICBdCiAgICAgICAgIGZvciBmbXQsIGQsIHJlc3VsdCBpbiB0ZXN0X3ZhbHVlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlY2ltYWwoZCksIGZtdCksIHJlc3VsdCkKQEAgLTEwODQsMTggKzExMjcsNjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMoRGVjaW1hbCg0NSkpLCBhYnMoRGVjaW1hbCgtNDUpKSkgICMgYWJzCiAKICAgICBkZWYgdGVzdF9uYW5fY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgICMgY29tcGFyaXNvbnMgaW52b2x2aW5nIHNpZ25hbGluZyBuYW5zIHNpZ25hbCBJbnZhbGlkT3BlcmF0aW9uCisKKyAgICAgICAgIyBvcmRlciBjb21wYXJpc29ucyAoPCwgPD0sID4sID49KSBpbnZvbHZpbmcgb25seSBxdWlldCBuYW5zCisgICAgICAgICMgYWxzbyBzaWduYWwgSW52YWxpZE9wZXJhdGlvbgorCisgICAgICAgICMgZXF1YWxpdHkgY29tcGFyaXNvbnMgKD09LCAhPSkgaW52b2x2aW5nIG9ubHkgcXVpZXQgbmFucworICAgICAgICAjIGRvbid0IHNpZ25hbCwgYnV0IHJldHVybiBGYWxzZSBvciBUcnVlIHJlc3BlY3RpdmVseS4KKwogICAgICAgICBuID0gRGVjaW1hbCgnTmFOJykKICAgICAgICAgcyA9IERlY2ltYWwoJ3NOYU4nKQogICAgICAgICBpID0gRGVjaW1hbCgnSW5mJykKICAgICAgICAgZiA9IERlY2ltYWwoJzInKQotICAgICAgICBmb3IgeCwgeSBpbiBbKG4sIG4pLCAobiwgaSksIChpLCBuKSwgKG4sIGYpLCAoZiwgbiksCi0gICAgICAgICAgICAgICAgICAgICAocywgbiksIChuLCBzKSwgKHMsIGkpLCAoaSwgcyksIChzLCBmKSwgKGYsIHMpLCAocywgcyldOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0geSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgKHggPT0geSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICh4IDwgeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICh4IDw9IHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoeCA+IHkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCAoeCA+PSB5KSkKKworICAgICAgICBxbmFuX3BhaXJzID0gKG4sIG4pLCAobiwgaSksIChpLCBuKSwgKG4sIGYpLCAoZiwgbikKKyAgICAgICAgc25hbl9wYWlycyA9IChzLCBuKSwgKG4sIHMpLCAocywgaSksIChpLCBzKSwgKHMsIGYpLCAoZiwgcyksIChzLCBzKQorICAgICAgICBvcmRlcl9vcHMgPSBvcGVyYXRvci5sdCwgb3BlcmF0b3IubGUsIG9wZXJhdG9yLmd0LCBvcGVyYXRvci5nZQorICAgICAgICBlcXVhbGl0eV9vcHMgPSBvcGVyYXRvci5lcSwgb3BlcmF0b3IubmUKKworICAgICAgICAjIHJlc3VsdHMgd2hlbiBJbnZhbGlkT3BlcmF0aW9uIGlzIG5vdCB0cmFwcGVkCisgICAgICAgIGZvciB4LCB5IGluIHFuYW5fcGFpcnMgKyBzbmFuX3BhaXJzOgorICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wcyArIGVxdWFsaXR5X29wczoKKyAgICAgICAgICAgICAgICBnb3QgPSBvcCh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHswIXJ9IGZvciBvcGVyYXRvci57MX0oezIhcn0sIHszIXJ9KTsgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCB7NCFyfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICMgcmVwZWF0IHRoZSBhYm92ZSwgYnV0IHRoaXMgdGltZSB0cmFwIHRoZSBJbnZhbGlkT3BlcmF0aW9uCisgICAgICAgIHdpdGggbG9jYWxjb250ZXh0KCkgYXMgY3R4OgorICAgICAgICAgICAgY3R4LnRyYXBzW0ludmFsaWRPcGVyYXRpb25dID0gMQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBxbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIGdvdCA9IG9wKHgsIHkpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gVHJ1ZSBpZiBvcCBpcyBvcGVyYXRvci5uZSBlbHNlIEZhbHNlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhwZWN0ZWQsIGdvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgezAhcn0gZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0b3IuezF9KHsyIXJ9LCB7MyFyfSk7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IHs0IXJ9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQsIG9wLl9fbmFtZV9fLCB4LCB5LCBnb3QpKQorCisgICAgICAgICAgICBmb3IgeCwgeSBpbiBzbmFuX3BhaXJzOgorICAgICAgICAgICAgICAgIGZvciBvcCBpbiBlcXVhbGl0eV9vcHM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEludmFsaWRPcGVyYXRpb24sIG9wZXJhdG9yLmVxLCB4LCB5KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbnZhbGlkT3BlcmF0aW9uLCBvcGVyYXRvci5uZSwgeCwgeSkKKworICAgICAgICAgICAgZm9yIHgsIHkgaW4gcW5hbl9wYWlycyArIHNuYW5fcGFpcnM6CisgICAgICAgICAgICAgICAgZm9yIG9wIGluIG9yZGVyX29wczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW52YWxpZE9wZXJhdGlvbiwgb3AsIHgsIHkpCisKKyAgICBkZWYgdGVzdF9jb3B5X3NpZ24oc2VsZik6CisgICAgICAgIGQgPSBEZWNpbWFsKDEpLmNvcHlfc2lnbihEZWNpbWFsKC0yKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKERlY2ltYWwoMSkuY29weV9zaWduKC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBEZWNpbWFsKDEpLmNvcHlfc2lnbiwgJy0yJykKIAogIyBUaGUgZm9sbG93aW5nIGFyZSB0d28gZnVuY3Rpb25zIHVzZWQgdG8gdGVzdCB0aHJlYWRpbmcgaW4gdGhlIG5leHQgY2xhc3MKIApAQCAtMTE2OCwxOCArMTI1NSwxOCBAQAogICAgICAgICBkYyA9IERlY2ltYWwoJzQ1JykKIAogICAgICAgICAjdHdvIERlY2ltYWxzCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYyA+IGRhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGMgPj0gZGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYSA8IGRjKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGEgPD0gZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYywgZGEpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGRjLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGRhLCBkYykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIGRjKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhLCBkYikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhICE9IGRjKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGEgPD0gZGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYSA+PSBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGRhLCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGEsIGRiKQogCiAgICAgICAgICNhIERlY2ltYWwgYW5kIGFuIGludAotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGMgPiAyMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIzIDwgZGMpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkYywgMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygyMywgZGMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGMsIDQ1KQogCiAgICAgICAgICNhIERlY2ltYWwgYW5kIHVuY29tcGFyYWJsZQpAQCAtMTE5NSw2ICsxMjgyLDIzIEBACiAgICAgICAgIGEuc29ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKIAorICAgIGRlZiB0ZXN0X2RlY2ltYWxfZmxvYXRfY29tcGFyaXNvbihzZWxmKToKKyAgICAgICAgZGEgPSBEZWNpbWFsKCcwLjI1JykKKyAgICAgICAgZGIgPSBEZWNpbWFsKCczLjAnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZGEsIDMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGRiLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChkYiwgMC4yNSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYSwgMS41KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhLCAwLjI1KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMy4wLCBkYSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKDAuMjUsIGRiKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgwLjI1LCBkYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLjAsIGRiKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKDAuMSwgRGVjaW1hbCgnMC4xJykpCisKICAgICBkZWYgdGVzdF9jb3B5X2FuZF9kZWVwY29weV9tZXRob2RzKHNlbGYpOgogICAgICAgICBkID0gRGVjaW1hbCgnNDMuMjQnKQogICAgICAgICBjID0gY29weS5jb3B5KGQpCkBAIC0xMjAzLDE1ICsxMzA3LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoZGMpLCBpZChkKSkKIAogICAgIGRlZiB0ZXN0X2hhc2hfbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgaGFzaGl0KGQpOgorICAgICAgICAgICAgYSA9IGhhc2goZCkKKyAgICAgICAgICAgIGIgPSBkLl9faGFzaF9fKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIHJldHVybiBhCisKICAgICAgICAgI2p1c3QgdGhhdCBpdCdzIGhhc2hhYmxlCi0gICAgICAgIGhhc2goRGVjaW1hbCgyMykpCisgICAgICAgIGhhc2hpdChEZWNpbWFsKDIzKSkKKyAgICAgICAgaGFzaGl0KERlY2ltYWwoJ0luZmluaXR5JykpCisgICAgICAgIGhhc2hpdChEZWNpbWFsKCctSW5maW5pdHknKSkKKyAgICAgICAgaGFzaGl0KERlY2ltYWwoJ25hbjEyMycpKQorICAgICAgICBoYXNoaXQoRGVjaW1hbCgnLU5hTicpKQogCiAgICAgICAgIHRlc3RfdmFsdWVzID0gW0RlY2ltYWwoc2lnbiooMioqbSArIG4pKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbSBpbiBbMCwgMTQsIDE1LCAxNiwgMTcsIDMwLCAzMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLCAzMywgNjIsIDYzLCA2NCwgNjUsIDY2XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsIDMzLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2XQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgtMTAsIDEwKQogICAgICAgICAgICAgICAgICAgICAgICBmb3Igc2lnbiBpbiBbLTEsIDFdXQogICAgICAgICB0ZXN0X3ZhbHVlcy5leHRlbmQoWworICAgICAgICAgICAgICAgIERlY2ltYWwoIi0xIiksICMgPT0+IC0yCiAgICAgICAgICAgICAgICAgRGVjaW1hbCgiLTAiKSwgIyB6ZXJvcwogICAgICAgICAgICAgICAgIERlY2ltYWwoIjAuMDAiKSwKICAgICAgICAgICAgICAgICBEZWNpbWFsKCItMC4wMDAiKSwKQEAgLTEyMzUsMTMgKzEzNTAsMjIgQEAKIAogICAgICAgICAjIGNoZWNrIHRoYXQgaGFzaChkKSA9PSBoYXNoKGludChkKSkgZm9yIGludGVncmFsIHZhbHVlcwogICAgICAgICBmb3IgdmFsdWUgaW4gdGVzdF92YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godmFsdWUpLCBoYXNoKGludCh2YWx1ZSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoaXQodmFsdWUpLCBoYXNoaXQoaW50KHZhbHVlKSkpCiAKICAgICAgICAgI3RoZSBzYW1lIGhhc2ggdGhhdCB0byBhbiBpbnQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKERlY2ltYWwoMjMpKSwgaGFzaCgyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgRGVjaW1hbCgnTmFOJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoKERlY2ltYWwoJ0luZicpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2goRGVjaW1hbCgnLUluZicpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoaXQoRGVjaW1hbCgyMykpLCBoYXNoaXQoMjMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhc2gsIERlY2ltYWwoJ3NOYU4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2hpdChEZWNpbWFsKCdJbmYnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNoaXQoRGVjaW1hbCgnLUluZicpKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGhhc2hlcyBvZiBhIERlY2ltYWwgZmxvYXQgbWF0Y2ggd2hlbiB0aGV5CisgICAgICAgICMgcmVwcmVzZW50IGV4YWN0bHkgdGhlIHNhbWUgdmFsdWVzCisgICAgICAgIHRlc3Rfc3RyaW5ncyA9IFsnaW5mJywgJy1JbmYnLCAnMC4wJywgJy0uMGUxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICczNC4wJywgJzIuNScsICcxMTIzOTAuNjI1JywgJy0wLjUxNTYyNSddCisgICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIGYgPSBmbG9hdChzKQorICAgICAgICAgICAgZCA9IERlY2ltYWwocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaGl0KGYpLCBoYXNoaXQoZCkpCiAKICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaGFzaCBkb2Vzbid0IGRlcGVuZCBvbiB0aGUKICAgICAgICAgIyBjdXJyZW50IGNvbnRleHQgKGlzc3VlICMxNzU3KQpAQCAtMTI1MCwxMSArMTM3NCwxMSBAQAogICAgICAgICB4ID0gRGVjaW1hbCgiMTIzNDU2Nzg5LjEiKQogCiAgICAgICAgIGMucHJlYyA9IDYKLSAgICAgICAgaDEgPSBoYXNoKHgpCisgICAgICAgIGgxID0gaGFzaGl0KHgpCiAgICAgICAgIGMucHJlYyA9IDEwCi0gICAgICAgIGgyID0gaGFzaCh4KQorICAgICAgICBoMiA9IGhhc2hpdCh4KQogICAgICAgICBjLnByZWMgPSAxNgotICAgICAgICBoMyA9IGhhc2goeCkKKyAgICAgICAgaDMgPSBoYXNoaXQoeCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgxLCBoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoMSwgaDMpCkBAIC0xMjY4LDE2ICsxMzkyLDE2IEBACiAgICAgICAgIGwyID0gMjgKIAogICAgICAgICAjYmV0d2VlbiBEZWNpbWFscwotICAgICAgICBzZWxmLmFzc2VydFRydWUobWluKGQxLGQyKSBpcyBkMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1pbihkMixkMSkgaXMgZDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXgoZDEsZDIpIGlzIGQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWF4KGQyLGQxKSBpcyBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDEsZDIpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtaW4oZDIsZDEpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDEsZDIpLCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtYXgoZDIsZDEpLCBkMikKIAogICAgICAgICAjYmV0d2VlbiBEZWNpbWFsIGFuZCBsb25nCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtaW4oZDEsbDIpIGlzIGQxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWluKGwyLGQxKSBpcyBkMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1heChsMSxkMikgaXMgZDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXgoZDIsbDEpIGlzIGQyKQorICAgICAgICBzZWxmLmFzc2VydElzKG1pbihkMSxsMiksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1pbihsMixkMSksIGQxKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChsMSxkMiksIGQyKQorICAgICAgICBzZWxmLmFzc2VydElzKG1heChkMixsMSksIGQyKQogCiAgICAgZGVmIHRlc3RfYXNfbm9uemVybyhzZWxmKToKICAgICAgICAgI2FzIGZhbHNlCkBAIC0xMjkzLDcgKzE0MTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZCksICJEZWNpbWFsKCcxNS4zMicpIikgICAjIHJlcHIKIAogICAgIGRlZiB0ZXN0X3RvbnVtX21ldGhvZHMoc2VsZik6Ci0gICAgICAgICNUZXN0IGZsb2F0LCBpbnQgYW5kIGxvbmcgbWV0aG9kcy4KKyAgICAgICAgI1Rlc3QgZmxvYXQgYW5kIGludCBtZXRob2RzLgogCiAgICAgICAgIGQxID0gRGVjaW1hbCgnNjYnKQogICAgICAgICBkMiA9IERlY2ltYWwoJzE1LjMyJykKQEAgLTEzMDIsMTAgKzE0MjYsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChkMSksIDY2KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChkMiksIDE1KQogCi0gICAgICAgICNsb25nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGQxKSwgNjYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGQyKSwgMTUpCi0KICAgICAgICAgI2Zsb2F0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoZDEpLCA2NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChkMiksIDE1LjMyKQpAQCAtMTUzOCwxMCArMTY1OCwxMCBAQAogICAgICAgICBkMSA9IE15RGVjaW1hbCgxKQogICAgICAgICBkMiA9IE15RGVjaW1hbCgyKQogICAgICAgICBkID0gZDEgKyBkMgotICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShkKSBpcyBEZWNpbWFsKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZCksIERlY2ltYWwpCiAKICAgICAgICAgZCA9IGQxLm1heChkMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZCkgaXMgRGVjaW1hbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGQpLCBEZWNpbWFsKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfY29udGV4dChzZWxmKToKICAgICAgICAgIyBDaGVjayByZXN1bHRzIHdoZW4gY29udGV4dCBnaXZlbiBpbXBsaWNpdGx5LiAgKElzc3VlIDI0NzgpCkBAIC0xNjAxLDkgKzE3MjEsOSBAQAogCiAgICAgZGVmIHRlc3RfYWJjKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLk51bWJlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNzdWJjbGFzcyhEZWNpbWFsLCBudW1iZXJzLlJlYWwpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLk51bWJlcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaXNpbnN0YW5jZShEZWNpbWFsKDApLCBudW1iZXJzLlJlYWwpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzc3ViY2xhc3MoRGVjaW1hbCwgbnVtYmVycy5SZWFsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuTnVtYmVyKQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoRGVjaW1hbCgwKSwgbnVtYmVycy5SZWFsKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogICAgICAgICBkID0gRGVjaW1hbCgnLTMuMTQxNTkwMDAwJykKQEAgLTE2OTYsOCArMTgxNiw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLCB2MikKIAogICAgIGRlZiB0ZXN0X2VxdWFsaXR5X3dpdGhfb3RoZXJfdHlwZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShEZWNpbWFsKDEwKSBpbiBbJ2EnLCAxLjAsIERlY2ltYWwoMTApLCAoMSwyKSwge31dKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoRGVjaW1hbCgxMCkgbm90IGluIFsnYScsIDEuMCwgKDEsMiksIHt9XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihEZWNpbWFsKDEwKSwgWydhJywgMS4wLCBEZWNpbWFsKDEwKSwgKDEsMiksIHt9XSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihEZWNpbWFsKDEwKSwgWydhJywgMS4wLCAoMSwyKSwge31dKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKICAgICAgICAgIyBBbGwgY29waWVzIHNob3VsZCBiZSBkZWVwCkBAIC0xNzA3LDYgKzE4MjcsNDU4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoYy5mbGFncyksIGlkKGQuZmxhZ3MpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGMudHJhcHMpLCBpZChkLnRyYXBzKSkKIAorICAgIGRlZiB0ZXN0X19jbGFtcChzZWxmKToKKyAgICAgICAgIyBJbiBQeXRob24gMy4yLCB0aGUgcHJpdmF0ZSBhdHRyaWJ1dGUgYF9jbGFtcGAgd2FzIG1hZGUKKyAgICAgICAgIyBwdWJsaWMgKGlzc3VlIDg1NDApLCB3aXRoIHRoZSBvbGQgYF9jbGFtcGAgYmVjb21pbmcgYQorICAgICAgICAjIHByb3BlcnR5IHdyYXBwaW5nIGBjbGFtcGAuICBGb3IgdGhlIGR1cmF0aW9uIG9mIFB5dGhvbiAzLjIKKyAgICAgICAgIyBvbmx5LCB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBnZXR0YWJsZS9zZXR0YWJsZSB2aWEgYm90aAorICAgICAgICAjIGBjbGFtcGAgYW5kIGBfY2xhbXBgOyBpbiBQeXRob24gMy4zLCBgX2NsYW1wYCBzaG91bGQgYmUKKyAgICAgICAgIyByZW1vdmVkLgorICAgICAgICBjID0gQ29udGV4dChjbGFtcCA9IDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jbGFtcCwgMCkKKworICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBjLl9jbGFtcCA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNsYW1wLCAxKQorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgiIiwgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuX2NsYW1wLCAxKQorICAgICAgICBjLmNsYW1wID0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY2xhbXAsIDApCisgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCIiLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5fY2xhbXAsIDApCisKKyAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuYWJzKERlY2ltYWwoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYWJzKC0xKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmFicywgJy0xJykKKworICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5hZGQoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFkZCgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFkZChEZWNpbWFsKDEpLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmFkZCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmFkZCwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuYWRkLCAxLCAnMScpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmUoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmUoMSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZSgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmUsICcxJywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmUsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfc2lnbmFsKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoMSksIERlY2ltYWwoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3NpZ25hbCgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfc2lnbmFsKERlY2ltYWwoMSksIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV9zaWduYWwoMSwgRGVjaW1hbCgxKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3NpZ25hbCwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV9zaWduYWwsIDEsICcxJykKKworICAgIGRlZiB0ZXN0X2NvbXBhcmVfdG90YWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZV90b3RhbChEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbCgxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWwoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbCwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29tcGFyZV90b3RhbCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b3RhbF9tYWcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29tcGFyZV90b3RhbF9tYWcoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbXBhcmVfdG90YWxfbWFnKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29tcGFyZV90b3RhbF9tYWcoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb21wYXJlX3RvdGFsX21hZygxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmNvbXBhcmVfdG90YWxfbWFnLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb21wYXJlX3RvdGFsX21hZywgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfY29weV9hYnMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9hYnMoRGVjaW1hbCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X2FicygtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X2FicywgJy0xJykKKworICAgIGRlZiB0ZXN0X2NvcHlfZGVjaW1hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X2RlY2ltYWwoRGVjaW1hbCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X2RlY2ltYWwoLTEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuY29weV9kZWNpbWFsLCAnLTEnKQorCisgICAgZGVmIHRlc3RfY29weV9uZWdhdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuY29weV9uZWdhdGUoRGVjaW1hbCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X25lZ2F0ZSgtMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X25lZ2F0ZSwgJy0xJykKKworICAgIGRlZiB0ZXN0X2NvcHlfc2lnbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5jb3B5X3NpZ24oRGVjaW1hbCgxKSwgRGVjaW1hbCgtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb3B5X3NpZ24oMSwgLTIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29weV9zaWduKERlY2ltYWwoMSksIC0yKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvcHlfc2lnbigxLCBEZWNpbWFsKC0yKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X3NpZ24sICcxJywgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5jb3B5X3NpZ24sIDEsICctMicpCisKKyAgICBkZWYgdGVzdF9kaXZpZGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZGl2aWRlKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGUoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGUoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGUoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZpZGUsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdmlkZSwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfZGl2aWRlX2ludChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5kaXZpZGVfaW50KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZpZGVfaW50KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZGl2aWRlX2ludChEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmRpdmlkZV9pbnQoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZpZGVfaW50LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZpZGVfaW50LCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9kaXZtb2Qoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZGl2bW9kKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZtb2QoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZtb2QoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5kaXZtb2QoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5kaXZtb2QsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmRpdm1vZCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfZXhwKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmV4cChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4cCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5leHAsICcxMCcpCisKKyAgICBkZWYgdGVzdF9mbWEoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuZm1hKERlY2ltYWwoMiksIERlY2ltYWwoMyksIERlY2ltYWwoNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbWEoMiwgMywgNCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbWEoRGVjaW1hbCgyKSwgMywgNCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbWEoMiwgRGVjaW1hbCgzKSwgNCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbWEoMiwgMywgRGVjaW1hbCg0KSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbWEoRGVjaW1hbCgyKSwgRGVjaW1hbCgzKSwgNCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5mbWEsICcyJywgMywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmZtYSwgMiwgJzMnLCA0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuZm1hLCAyLCAzLCAnNCcpCisKKyAgICBkZWYgdGVzdF9pc19maW5pdGUoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfZmluaXRlKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfZmluaXRlKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX2Zpbml0ZSwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX2luZmluaXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX2luZmluaXRlKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfaW5maW5pdGUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfaW5maW5pdGUsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19uYW4oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfbmFuKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfbmFuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX25hbiwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX25vcm1hbChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19ub3JtYWwoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19ub3JtYWwoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfbm9ybWFsLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfcW5hbihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5pc19xbmFuKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfcW5hbigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19xbmFuLCAnMTAnKQorCisgICAgZGVmIHRlc3RfaXNfc2lnbmVkKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3NpZ25lZChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3NpZ25lZCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5pc19zaWduZWQsICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19zbmFuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmlzX3NuYW4oRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5pc19zbmFuKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3NuYW4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9pc19zdWJub3JtYWwoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfc3Vibm9ybWFsKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuaXNfc3Vibm9ybWFsKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmlzX3N1Ym5vcm1hbCwgJzEwJykKKworICAgIGRlZiB0ZXN0X2lzX3plcm8oc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuaXNfemVybyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmlzX3plcm8oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuaXNfemVybywgJzEwJykKKworICAgIGRlZiB0ZXN0X2xuKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLmxuKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG4oMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG4sICcxMCcpCisKKyAgICBkZWYgdGVzdF9sb2cxMChzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2cxMChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZzEwKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZzEwLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG9nYihzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5sb2diKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9nYigxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2diLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbG9naWNhbF9hbmQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9naWNhbF9hbmQoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfYW5kKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9hbmQoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX2FuZCgxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfYW5kLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX2FuZCwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfbG9naWNhbF9pbnZlcnQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9naWNhbF9pbnZlcnQoRGVjaW1hbCgxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfaW52ZXJ0KDEwMDApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9pbnZlcnQsICcxMDAwJykKKworICAgIGRlZiB0ZXN0X2xvZ2ljYWxfb3Ioc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9naWNhbF9vcihEZWNpbWFsKDEpLCBEZWNpbWFsKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF9vcigxLCAxKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfb3IoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX29yKDEsIERlY2ltYWwoMSkpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9vciwgJzEnLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubG9naWNhbF9vciwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfbG9naWNhbF94b3Ioc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubG9naWNhbF94b3IoRGVjaW1hbCgxKSwgRGVjaW1hbCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmxvZ2ljYWxfeG9yKDEsIDEpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubG9naWNhbF94b3IoRGVjaW1hbCgxKSwgMSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5sb2dpY2FsX3hvcigxLCBEZWNpbWFsKDEpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLmxvZ2ljYWxfeG9yLCAnMScsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5sb2dpY2FsX3hvciwgMSwgJzEnKQorCisgICAgZGVmIHRlc3RfbWF4KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1heChEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4KDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWF4LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tYXgsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21heF9tYWcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWF4X21hZyhEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWF4X21hZygxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1heF9tYWcoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tYXhfbWFnKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWF4X21hZywgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWF4X21hZywgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWluKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm1pbihEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWluLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW4sIDEsICcyJykKKworICAgIGRlZiB0ZXN0X21pbl9tYWcoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWluX21hZyhEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubWluX21hZygxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm1pbl9tYWcoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW5fbWFnKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWluX21hZywgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubWluX21hZywgMSwgJzInKQorCisgICAgZGVmIHRlc3RfbWludXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubWludXMoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5taW51cygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5taW51cywgJzEwJykKKworICAgIGRlZiB0ZXN0X211bHRpcGx5KHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm11bHRpcGx5KERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5tdWx0aXBseSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm11bHRpcGx5KERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubXVsdGlwbHkoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5tdWx0aXBseSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubXVsdGlwbHksIDEsICcyJykKKworICAgIGRlZiB0ZXN0X25leHRfbWludXMoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubmV4dF9taW51cyhEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfbWludXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF9taW51cywgJzEwJykKKworICAgIGRlZiB0ZXN0X25leHRfcGx1cyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5uZXh0X3BsdXMoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3BsdXMoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMubmV4dF9wbHVzLCAnMTAnKQorCisgICAgZGVmIHRlc3RfbmV4dF90b3dhcmQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMubmV4dF90b3dhcmQoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5leHRfdG93YXJkKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubmV4dF90b3dhcmQoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5uZXh0X3Rvd2FyZCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLm5leHRfdG93YXJkLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5uZXh0X3Rvd2FyZCwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfbm9ybWFsaXplKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLm5vcm1hbGl6ZShEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5vcm1hbGl6ZSgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5ub3JtYWxpemUsICcxMCcpCisKKyAgICBkZWYgdGVzdF9udW1iZXJfY2xhc3Moc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm51bWJlcl9jbGFzcygxMjMpLCBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKDEyMykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMubnVtYmVyX2NsYXNzKDApLCBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm51bWJlcl9jbGFzcygtNDUpLCBjLm51bWJlcl9jbGFzcyhEZWNpbWFsKC00NSkpKQorCisgICAgZGVmIHRlc3RfcG93ZXIoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucG93ZXIoRGVjaW1hbCgxKSwgRGVjaW1hbCg0KSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKDEsIDQsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoRGVjaW1hbCgxKSwgNCwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wb3dlcigxLCBEZWNpbWFsKDQpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnBvd2VyKDEsIDQsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucG93ZXIoRGVjaW1hbCgxKSwgRGVjaW1hbCg0KSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5wb3dlciwgJzEnLCA0LCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucG93ZXIsIDEsICc0JywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBvd2VyLCAxLCA0LCAnMicpCisKKyAgICBkZWYgdGVzdF9wbHVzKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnBsdXMoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wbHVzKDEwKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnBsdXMsICcxMCcpCisKKyAgICBkZWYgdGVzdF9xdWFudGl6ZShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5xdWFudGl6ZShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucXVhbnRpemUoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5xdWFudGl6ZShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnF1YW50aXplKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucXVhbnRpemUsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnF1YW50aXplLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9yZW1haW5kZXIoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucmVtYWluZGVyKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXIoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXIoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXIoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXIsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlciwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfcmVtYWluZGVyX25lYXIoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMucmVtYWluZGVyX25lYXIoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJlbWFpbmRlcl9uZWFyKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucmVtYWluZGVyX25lYXIoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yZW1haW5kZXJfbmVhcigxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnJlbWFpbmRlcl9uZWFyLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yZW1haW5kZXJfbmVhciwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfcm90YXRlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnJvdGF0ZShEZWNpbWFsKDEpLCBEZWNpbWFsKDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucm90YXRlKDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucm90YXRlKERlY2ltYWwoMSksIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucm90YXRlKDEsIERlY2ltYWwoMikpLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucm90YXRlLCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5yb3RhdGUsIDEsICcyJykKKworICAgIGRlZiB0ZXN0X3NxcnQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc3FydChEZWNpbWFsKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNxcnQoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc3FydCwgJzEwJykKKworICAgIGRlZiB0ZXN0X3NhbWVfcXVhbnR1bShzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy5zYW1lX3F1YW50dW0oRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNhbWVfcXVhbnR1bSgxLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNhbWVfcXVhbnR1bShEZWNpbWFsKDEpLCAyKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNhbWVfcXVhbnR1bSgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNhbWVfcXVhbnR1bSwgJzEnLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMuc2FtZV9xdWFudHVtLCAxLCAnMicpCisKKyAgICBkZWYgdGVzdF9zY2FsZWIoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc2NhbGViKERlY2ltYWwoMSksIERlY2ltYWwoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zY2FsZWIoMSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zY2FsZWIoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zY2FsZWIoMSwgRGVjaW1hbCgyKSksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zY2FsZWIsICcxJywgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNjYWxlYiwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc2hpZnQoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc2hpZnQoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNoaWZ0KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2hpZnQoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zaGlmdCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnNoaWZ0LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zaGlmdCwgMSwgJzInKQorCisgICAgZGVmIHRlc3Rfc3VidHJhY3Qoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMuc3VidHJhY3QoRGVjaW1hbCgxKSwgRGVjaW1hbCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnN1YnRyYWN0KDEsIDIpLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc3VidHJhY3QoRGVjaW1hbCgxKSwgMiksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5zdWJ0cmFjdCgxLCBEZWNpbWFsKDIpKSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnN1YnRyYWN0LCAnMScsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy5zdWJ0cmFjdCwgMSwgJzInKQorCisgICAgZGVmIHRlc3RfdG9fZW5nX3N0cmluZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19lbmdfc3RyaW5nKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudG9fZW5nX3N0cmluZygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy50b19lbmdfc3RyaW5nLCAnMTAnKQorCisgICAgZGVmIHRlc3RfdG9fc2NpX3N0cmluZyhzZWxmKToKKyAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICBkID0gYy50b19zY2lfc3RyaW5nKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudG9fc2NpX3N0cmluZygxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy50b19zY2lfc3RyaW5nLCAnMTAnKQorCisgICAgZGVmIHRlc3RfdG9faW50ZWdyYWxfZXhhY3Qoc2VsZik6CisgICAgICAgIGMgPSBDb250ZXh0KCkKKyAgICAgICAgZCA9IGMudG9faW50ZWdyYWxfZXhhY3QoRGVjaW1hbCgxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy50b19pbnRlZ3JhbF9leGFjdCgxMCksIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYy50b19pbnRlZ3JhbF9leGFjdCwgJzEwJykKKworICAgIGRlZiB0ZXN0X3RvX2ludGVncmFsX3ZhbHVlKHNlbGYpOgorICAgICAgICBjID0gQ29udGV4dCgpCisgICAgICAgIGQgPSBjLnRvX2ludGVncmFsX3ZhbHVlKERlY2ltYWwoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMudG9faW50ZWdyYWxfdmFsdWUoMTApLCBkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMudG9faW50ZWdyYWxfdmFsdWUsICcxMCcpCisKIGNsYXNzIFdpdGhTdGF0ZW1lbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIENhbid0IGRvIHRoZXNlIGFzIGRvY3N0cmluZ3MgdW50aWwgUHl0aG9uIDIuNgogICAgICMgYXMgZG9jdGVzdCBjYW4ndCBoYW5kbGUgX19mdXR1cmVfXyBzdGF0ZW1lbnRzCkBAIC0xNzE3LDkgKzIyODksOSBAQAogICAgICAgICB3aXRoIGxvY2FsY29udGV4dCgpIGFzIGVudGVyX2N0eDoKICAgICAgICAgICAgIHNldF9jdHggPSBnZXRjb250ZXh0KCkKICAgICAgICAgZmluYWxfY3R4ID0gZ2V0Y29udGV4dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcmlnX2N0eCBpcyBmaW5hbF9jdHgsICdkaWQgbm90IHJlc3RvcmUgY29udGV4dCBjb3JyZWN0bHknKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3JpZ19jdHggaXMgbm90IHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2V0X2N0eCBpcyBlbnRlcl9jdHgsICdfX2VudGVyX18gcmV0dXJuZWQgd3JvbmcgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19jdHgsIGZpbmFsX2N0eCwgJ2RpZCBub3QgcmVzdG9yZSBjb250ZXh0IGNvcnJlY3RseScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob3JpZ19jdHgsIHNldF9jdHgsICdkaWQgbm90IGNvcHkgdGhlIGNvbnRleHQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHNldF9jdHgsIGVudGVyX2N0eCwgJ19fZW50ZXJfXyByZXR1cm5lZCB3cm9uZyBjb250ZXh0JykKIAogICAgIGRlZiB0ZXN0X2xvY2FsY29udGV4dGFyZyhzZWxmKToKICAgICAgICAgIyBVc2UgYSBjb3B5IG9mIHRoZSBzdXBwbGllZCBjb250ZXh0IGluIHRoZSBibG9jawpAQCAtMTcyOCwxMCArMjMwMCwxMCBAQAogICAgICAgICB3aXRoIGxvY2FsY29udGV4dChuZXdfY3R4KSBhcyBlbnRlcl9jdHg6CiAgICAgICAgICAgICBzZXRfY3R4ID0gZ2V0Y29udGV4dCgpCiAgICAgICAgIGZpbmFsX2N0eCA9IGdldGNvbnRleHQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3JpZ19jdHggaXMgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldF9jdHgucHJlYyA9PSBuZXdfY3R4LnByZWMsICdkaWQgbm90IHNldCBjb3JyZWN0IGNvbnRleHQnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3X2N0eCBpcyBub3Qgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZXRfY3R4IGlzIGVudGVyX2N0eCwgJ19fZW50ZXJfXyByZXR1cm5lZCB3cm9uZyBjb250ZXh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX2N0eCwgZmluYWxfY3R4LCAnZGlkIG5vdCByZXN0b3JlIGNvbnRleHQgY29ycmVjdGx5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfY3R4LnByZWMsIG5ld19jdHgucHJlYywgJ2RpZCBub3Qgc2V0IGNvcnJlY3QgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobmV3X2N0eCwgc2V0X2N0eCwgJ2RpZCBub3QgY29weSB0aGUgY29udGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2V0X2N0eCwgZW50ZXJfY3R4LCAnX19lbnRlcl9fIHJldHVybmVkIHdyb25nIGNvbnRleHQnKQogCiBjbGFzcyBDb250ZXh0RmxhZ3ModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2ZsYWdzX2lycmVsZXZhbnQoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9kZWZhdWx0ZGljdC5weQppbmRleCBlNWE5YmQ1Li5kYTI2MDhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlZmF1bHRkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVmYXVsdGRpY3QucHkKQEAgLTMyLDE0ICszMiwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJmb28iXSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsiYmFyIl0sIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbNDJdLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmb28iIGluIGQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImZvbyIgaW4gZDIua2V5cygpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImJhciIgaW4gZDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiYmFyIiBpbiBkMi5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSg0MiBpbiBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDQyIGluIGQyLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEyIG5vdCBpbiBkMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEyIG5vdCBpbiBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImJhciIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJiYXIiLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNDIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydEluKDQyLCBkMi5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTIsIGQyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEyLCBkMi5rZXlzKCkpCiAgICAgICAgIGQyLmRlZmF1bHRfZmFjdG9yeSA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMi5kZWZhdWx0X2ZhY3RvcnksIE5vbmUpCiAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CmluZGV4IDY3ZTQxZDYuLjBkY2FkZWIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9ydCBwaWNrbGUKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgcmFuZG9tCi1pbXBvcnQgb3MKIAogQklHID0gMTAwMDAwCiAKQEAgLTExNSw2ICsxMTQsMzkgQEAKICAgICAgICAgICAgIGQgPSBkZXF1ZSgnYWJjJykKICAgICAgICAgICAgIGQubWF4bGVuID0gMTAKIAorICAgIGRlZiB0ZXN0X2NvdW50KHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJycsICdhYnJhY2FkYWJyYScsICdzaW1zYWxhYmltJyo1MDArJ2FiYycpOgorICAgICAgICAgICAgcyA9IGxpc3QocykKKyAgICAgICAgICAgIGQgPSBkZXF1ZShzKQorICAgICAgICAgICAgZm9yIGxldHRlciBpbiAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5jb3VudChsZXR0ZXIpLCBkLmNvdW50KGxldHRlciksIChzLCBkLCBsZXR0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuY291bnQpICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC5jb3VudCwgMSwgMikgIyB0b28gbWFueSBhcmdzCisgICAgICAgIGNsYXNzIEJhZENvbXBhcmU6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByYWlzZSBBcml0aG1ldGljRXJyb3IKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCBCYWRDb21wYXJlKCksIDNdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBcml0aG1ldGljRXJyb3IsIGQuY291bnQsIDIpCisgICAgICAgIGQgPSBkZXF1ZShbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFyaXRobWV0aWNFcnJvciwgZC5jb3VudCwgQmFkQ29tcGFyZSgpKQorICAgICAgICBjbGFzcyBNdXRhdGluZ0NvbXBhcmU6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmQucG9wKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBtID0gTXV0YXRpbmdDb21wYXJlKCkKKyAgICAgICAgZCA9IGRlcXVlKFsxLCAyLCAzLCBtLCA0LCA1XSkKKyAgICAgICAgbS5kID0gZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGQuY291bnQsIDMpCisKKyAgICAgICAgIyB0ZXN0IGlzc3VlMTEwMDQKKyAgICAgICAgIyBibG9jayBhZHZhbmNlIGZhaWxlZCBhZnRlciByb3RhdGlvbiBhbGlnbmVkIGVsZW1lbnRzIG9uIHJpZ2h0IHNpZGUgb2YgYmxvY2sKKyAgICAgICAgZCA9IGRlcXVlKFtOb25lXSoxNikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGQpKToKKyAgICAgICAgICAgIGQucm90YXRlKC0xKQorICAgICAgICBkLnJvdGF0ZSgxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY291bnQoMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb3VudChOb25lKSwgMTYpCisKICAgICBkZWYgdGVzdF9jb21wYXJpc29ucyhzZWxmKToKICAgICAgICAgZCA9IGRlcXVlKCd4YWJjJyk7IGQucG9wbGVmdCgpCiAgICAgICAgIGZvciBlIGluIFtkLCBkZXF1ZSgnYWJjJyksIGRlcXVlKCdhYicpLCBkZXF1ZSgpLCBsaXN0KGQpXToKQEAgLTE5OSwxMSArMjMxLDIzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgbi1pKQogICAgICAgICAgICAgaiA9IHJhbmRvbS5yYW5kcmFuZ2UoLWxlbihkKSwgbGVuKGQpKQogICAgICAgICAgICAgdmFsID0gZFtqXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIGQpCiAgICAgICAgICAgICBkZWwgZFtqXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBub3QgaW4gZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odmFsLCBkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMCkKIAorICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6CisgICAgICAgIG4gPSA1MDAgICAgICAgICAjIE8obioqMikgdGVzdCwgZG9uJ3QgbWFrZSB0aGlzIHRvbyBiaWcKKyAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UobildCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgorICAgICAgICAgICAgZCA9IGRlcXVlKGRhdGFbOmldKQorICAgICAgICAgICAgciA9IGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QocmV2ZXJzZWQoZGF0YVs6aV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMociwgTm9uZSkKKyAgICAgICAgICAgIGQucmV2ZXJzZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGRhdGFbOmldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQucmV2ZXJzZSwgMSkgICAgICAgICAgIyBBcml0eSBpcyB6ZXJvCisKICAgICBkZWYgdGVzdF9yb3RhdGUoc2VsZik6CiAgICAgICAgIHMgPSB0dXBsZSgnYWJjZGUnKQogICAgICAgICBuID0gbGVuKHMpCkBAIC0zMTYsNyArMzYwLDcgQEAKICAgICAgICAgZSA9IGV2YWwocmVwcihkKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQogICAgICAgICBkLmFwcGVuZChkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4uLicgaW4gcmVwcihkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignLi4uJywgcmVwcihkKSkKIAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkID0gZGVxdWUocmFuZ2UoMjAwKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkgYi9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CmluZGV4IGFhZmU0MjguLjY2MzgxMTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQpAQCAtMSw4ICsxLDggQEAKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCitpbXBvcnQgbWF0aAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIAogZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0yNDgsMTAgKzI0OCw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vdEltcGxlbWVudGVkIHNob3VsZCBoYXZlIGNhdXNlZCBUeXBlRXJyb3IiKQogCi0gICAgZGVmIHRlc3RfbG9uZ3Moc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBsb25nIG9wZXJhdGlvbnMuLi4KLSAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMCwgMykKLQogICAgIGRlZiB0ZXN0X2Zsb2F0cyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGZsb2F0IG9wZXJhdGlvbnMuLi4KICAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMC4wLCAzLjApCkBAIC0yNTksNyArMjU1LDcgQEAKICAgICBkZWYgdGVzdF9jb21wbGV4ZXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBjb21wbGV4IG9wZXJhdGlvbnMuLi4KICAgICAgICAgc2VsZi5udW1iZXJfb3BlcmF0b3JzKDEwMC4waiwgMy4waiwgc2tpcD1bJ2x0JywgJ2xlJywgJ2d0JywgJ2dlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludCcsICdsb25nJywgJ2Zsb2F0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludCcsICdmbG9hdCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXZtb2QnLCAnbW9kJ10pCiAKICAgICAgICAgY2xhc3MgTnVtYmVyKGNvbXBsZXgpOgpAQCAtMzkzLDExICszODksMTEgQEAKICAgICBkZWYgdGVzdF9weXRob25fZGljdHMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBQeXRob24gc3ViY2xhc3Mgb2YgZGljdC4uLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhkaWN0LCBkaWN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoe30sIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoe30sIGRpY3QpCiAgICAgICAgIGQgPSBkaWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7fSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuX19jbGFzc19fIGlzIGRpY3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGQsIGRpY3QpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKICAgICAgICAgY2xhc3MgQyhkaWN0KToKICAgICAgICAgICAgIHN0YXRlID0gLTEKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmX2xvY2FsLCAqYSwgKiprdyk6CkBAIC00MTAsNyArNDA2LDcgQEAKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldChrZXksIDApCiAgICAgICAgICAgICBkZWYgX19zZXRpdGVtX18oc2VsZl9sb2NhbCwga2V5LCB2YWx1ZSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoa2V5LCB0eXBlKDApKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoa2V5LCB0eXBlKDApKQogICAgICAgICAgICAgICAgIGRpY3QuX19zZXRpdGVtX18oc2VsZl9sb2NhbCwga2V5LCB2YWx1ZSkKICAgICAgICAgICAgIGRlZiBzZXRzdGF0ZShzZWxmLCBzdGF0ZSk6CiAgICAgICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IHN0YXRlCkBAIC01MDksNyArNTA1LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gNDIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm5hbWUsICdDJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmJhc2VzLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdzcGFtJyBpbiBDLmRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW0nLCBDLmRpY3QpCiAgICAgICAgIGMgPSBDKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnNwYW0oKSwgNDIpCiAKQEAgLTYzMyw3ICs2MjksNiBAQAogICAgIGRlZiB0ZXN0X21vZHVsZV9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgUHl0aG9uIHN1YmNsYXNzIG9mIG1vZHVsZS4uLgogICAgICAgICBsb2cgPSBbXQotICAgICAgICBpbXBvcnQgdHlwZXMsIHN5cwogICAgICAgICBNVCA9IHR5cGUoc3lzKQogICAgICAgICBjbGFzcyBNTShNVCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CkBAIC0xMDE1LDcgKzEwMTAsNiBAQAogICAgICAgICAjIFRlc3QgY3ljbGljYWwgbGVha3MgW1NGIGJ1ZyA1MTk2MjFdCiAgICAgICAgIGNsYXNzIEYob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYScsICdiJ10KLSAgICAgICAgbG9nID0gW10KICAgICAgICAgcyA9IEYoKQogICAgICAgICBzLmEgPSBbQ291bnRlZCgpLCBzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvdW50ZWQuY291bnRlciwgMSkKQEAgLTEwMjQsMTEgKzEwMTgsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVkLmNvdW50ZXIsIDApCiAKICAgICAgICAgIyBUZXN0IGxvb2t1cCBsZWFrcyBbU0YgYnVnIDU3MjU2N10KLSAgICAgICAgaW1wb3J0IHN5cyxnYworICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgaWYgaGFzYXR0cihnYywgJ2dldF9vYmplY3RzJyk6CiAgICAgICAgICAgICBjbGFzcyBHKG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGcgPSBHKCkKICAgICAgICAgICAgIG9yaWdfb2JqZWN0cyA9IGxlbihnYy5nZXRfb2JqZWN0cygpKQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgpAQCAtMTEwNCw3ICsxMDk4LDcgQEAKICAgICAgICAgTXlBQkMucmVnaXN0ZXIoVW5yZWxhdGVkKQogCiAgICAgICAgIHUgPSBVbnJlbGF0ZWQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh1LCBNeUFCQykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1LCBNeUFCQykKIAogICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIE15QUJDLmEuX19zZXRfXywgdSwgMykKQEAgLTExNzIsMTUgKzExNjYsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEkoMykqMiwgNikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJKDMpKkkoMiksIDYpCiAKLSAgICAgICAgIyBUZXN0IGhhbmRsaW5nIG9mIGxvbmcqc2VxIGFuZCBzZXEqbG9uZwotICAgICAgICBjbGFzcyBMKGludCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiKkwoMiksICJhYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTCgyKSoiYSIsICJhYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMipMKDMpLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEwoMykqMiwgNikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMKDMpKkwoMiksIDYpCi0KICAgICAgICAgIyBUZXN0IGNvbXBhcmlzb24gb2YgY2xhc3NlcyB3aXRoIGR5bmFtaWMgbWV0YWNsYXNzZXMKICAgICAgICAgY2xhc3MgZHluYW1pY21ldGFjbGFzcyh0eXBlKToKICAgICAgICAgICAgIHBhc3MKQEAgLTE1NjAsNiArMTU0NSw4IEBACiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgZGVmIHplcm8oc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBkZWYgY29tcGxleF9udW0oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gMWoKICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCiAgICAgICAgIGRlZiByZXR1cm5fdHJ1ZShzZWxmLCB0aGluZz1Ob25lKToKQEAgLTE1NzUsNiArMTU2Miw5IEBACiAgICAgICAgIGRlZiBzb21lX251bWJlcihzZWxmXywga2V5KToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCAiaGkiKQogICAgICAgICAgICAgcmV0dXJuIDQKKyAgICAgICAgZGVmIHN3YWxsb3coKmFyZ3MpOiBwYXNzCisgICAgICAgIGRlZiBmb3JtYXRfaW1wbChzZWxmLCBzcGVjKToKKyAgICAgICAgICAgIHJldHVybiAiaGVsbG8iCiAKICAgICAgICAgIyBJdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgZXZlcnkgc3BlY2lhbCBtZXRob2QgdGVzdGVkIGhlcmUsIGJ1dCBJJ20KICAgICAgICAgIyBvbmx5IGxpc3RpbmcgdGhlIG9uZXMgSSBjYW4gcmVtZW1iZXIgb3V0c2lkZSBvZiB0eXBlb2JqZWN0LmMsIHNpbmNlIGl0CkBAIC0xNTkwLDExICsxNTgwLDEzIEBACiAgICAgICAgICAgICAgc2V0KCgiX19jbGFzc19fIiwpKSwge30pLAogICAgICAgICAgICAgKCJfX3N1YmNsYXNzY2hlY2tfXyIsIGRvX2lzc3ViY2xhc3MsIHJldHVybl90cnVlLAogICAgICAgICAgICAgIHNldCgoIl9fYmFzZXNfXyIsKSksIHt9KSwKLSAgICAgICAgICAgICMgVGhlc2UgdHdvIGZhaWwgYmVjYXVzZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIExPQURfQVRUUiB0byBsb29rCi0gICAgICAgICAgICAjIHRoZW0gdXAuICBXZSdkIGhhdmUgdG8gYWRkIGEgbmV3IG9wY29kZSB0byBmaXggdGhpcywgYW5kIGl0J3MKLSAgICAgICAgICAgICMgcHJvYmFibHkgbm90IHdvcnRoIGl0LgotICAgICAgICAgICAgIyAoIl9fZW50ZXJfXyIsIHJ1bl9jb250ZXh0LCBpZGVuKSwKLSAgICAgICAgICAgICMgKCJfX2V4aXRfXyIsIHJ1bl9jb250ZXh0LCBpZGVuKSwKKyAgICAgICAgICAgICgiX19lbnRlcl9fIiwgcnVuX2NvbnRleHQsIGlkZW4sIHNldCgpLCB7Il9fZXhpdF9fIiA6IHN3YWxsb3d9KSwKKyAgICAgICAgICAgICgiX19leGl0X18iLCBydW5fY29udGV4dCwgc3dhbGxvdywgc2V0KCksIHsiX19lbnRlcl9fIiA6IGlkZW59KSwKKyAgICAgICAgICAgICgiX19jb21wbGV4X18iLCBjb21wbGV4LCBjb21wbGV4X251bSwgc2V0KCksIHt9KSwKKyAgICAgICAgICAgICgiX19mb3JtYXRfXyIsIGZvcm1hdCwgZm9ybWF0X2ltcGwsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fZmxvb3JfXyIsIG1hdGguZmxvb3IsIHplcm8sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fdHJ1bmNfXyIsIG1hdGgudHJ1bmMsIHplcm8sIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fY2VpbF9fIiwgbWF0aC5jZWlsLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGNsYXNzIENoZWNrZXIob2JqZWN0KToKQEAgLTE2NjgsMTAgKzE2NjAsMTAgQEAKICAgICAgICAgIyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIHRlc3QgaXMgcnVuIHN0YW5kYWxvbmUgb3IgZnJvbSBhIGZyYW1ld29yay4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihjMSkuZmluZCgnQyBvYmplY3QgYXQgJykgPj0gMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYzEpLCByZXByKGMxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0xIG5vdCBpbiBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgYzEpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpIGluIGMxKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEwIGluIGMxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBjMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgYzEpCiAgICAgICAgICMgVGVzdCB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgZHluYW1pYyBjbGFzc2VzCiAgICAgICAgIGNsYXNzIEQob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKQEAgLTE2OTEsMTAgKzE2ODMsMTAgQEAKICAgICAgICAgIyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGlzIHRlc3QgaXMgcnVuIHN0YW5kYWxvbmUgb3IgZnJvbSBhIGZyYW1ld29yay4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihkMSkuZmluZCgnRCBvYmplY3QgYXQgJykgPj0gMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZDEpLCByZXByKGQxKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC0xIG5vdCBpbiBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgZDEpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpIGluIGQxKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKDEwIGluIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgZDEpCiAgICAgICAgICMgVGVzdCBvdmVycmlkZGVuIGJlaGF2aW9yCiAgICAgICAgIGNsYXNzIFByb3h5KG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0xNzM4LDEwICsxNzMwLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAwKSwgIlByb3h5OjAiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocDApLCAiUHJveHkoMCkiKQogICAgICAgICBwMTAgPSBQcm94eShyYW5nZSgxMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoLTEgaW4gcDEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC0xLCBwMTApCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpIGluIHAxMCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgxMCBpbiBwMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGksIHAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgcDEwKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZnMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyB3ZWFrIHJlZmVyZW5jZXMuLi4KQEAgLTE3OTgsMTMgKzE3OTAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGEsICJ4IikpCiAKICAgICAgICAgcmF3ID0gQy5fX2RpY3RfX1sneCddCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHJhdywgcHJvcGVydHkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmF3LCBwcm9wZXJ0eSkKIAogICAgICAgICBhdHRycyA9IGRpcihyYXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiX19kb2NfXyIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZmdldCIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZnNldCIgaW4gYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZmRlbCIgaW4gYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fZG9jX18iLCBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZmdldCIsIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmc2V0IiwgYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZkZWwiLCBhdHRycykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5fX2RvY19fLCAiSSdtIHRoZSB4IHByb3BlcnR5LiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuZmdldCBpcyBDLl9fZGljdF9fWydnZXR4J10pCkBAIC0xODM0LDYgKzE4MjYsOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvciBmcm9tIGJhZCBwcm9wZXJ0eSIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0aWVzX2RvY19hdHRyaWIoc2VsZik6CiAgICAgICAgIGNsYXNzIEUob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBnZXR0ZXIoc2VsZik6CiAgICAgICAgICAgICAgICAgImdldHRlciBtZXRob2QiCkBAIC0xODQ2LDYgKzE4NDEsNyBAQAogICAgICAgICAgICAgcHJvcDIgPSBwcm9wZXJ0eShmc2V0PXNldHRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvcDIuX19kb2NfXywgTm9uZSkKIAorICAgIGRlZiB0ZXN0X3Rlc3RjYXBpX25vX3NlZ2ZhdWx0KHNlbGYpOgogICAgICAgICAjIHRoaXMgc2VnZmF1bHRlZCBpbiAyLjViMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCkBAIC0yMDI5LDEyICsyMDI1LDEyIEBACiAKICAgICAgICAgYyA9IEMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihjKSksIGNzdHVmZikKLSAgICAgICAgIyMgc2VsZi5hc3NlcnRUcnVlKCdfX3NlbGZfXycgaW4gZGlyKEMuQ21ldGhvZCkpCisgICAgICAgICMjIHNlbGYuYXNzZXJ0SW4oJ19fc2VsZl9fJywgZGlyKEMuQ21ldGhvZCkpCiAKICAgICAgICAgYy5jZGF0YSA9IDIKICAgICAgICAgYy5jbWV0aG9kID0gbGFtYmRhIHNlbGY6IDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnRlcmVzdGluZyhkaXIoYykpLCBjc3R1ZmYgKyBbJ2NkYXRhJywgJ2NtZXRob2QnXSkKLSAgICAgICAgIyMgc2VsZi5hc3NlcnRUcnVlKCdfX3NlbGZfXycgaW4gZGlyKGMuQ21ldGhvZCkpCisgICAgICAgICMjIHNlbGYuYXNzZXJ0SW4oJ19fc2VsZl9fJywgZGlyKGMuQ21ldGhvZCkpCiAKICAgICAgICAgY2xhc3MgQShDKToKICAgICAgICAgICAgIEFkYXRhID0gMQpAQCAtMjA0MiwxNiArMjAzOCwxNSBAQAogCiAgICAgICAgIGFzdHVmZiA9IFsnQWRhdGEnLCAnQW1ldGhvZCddICsgY3N0dWZmCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKEEpKSwgYXN0dWZmKQotICAgICAgICAjIyBzZWxmLmFzc2VydFRydWUoJ19fc2VsZl9fJyBpbiBkaXIoQS5BbWV0aG9kKSkKKyAgICAgICAgIyMgc2VsZi5hc3NlcnRJbignX19zZWxmX18nLCBkaXIoQS5BbWV0aG9kKSkKICAgICAgICAgYSA9IEEoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludGVyZXN0aW5nKGRpcihhKSksIGFzdHVmZikKICAgICAgICAgYS5hZGF0YSA9IDQyCiAgICAgICAgIGEuYW1ldGhvZCA9IGxhbWJkYSBzZWxmOiAzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50ZXJlc3RpbmcoZGlyKGEpKSwgYXN0dWZmICsgWydhZGF0YScsICdhbWV0aG9kJ10pCi0gICAgICAgICMjIHNlbGYuYXNzZXJ0VHJ1ZSgnX19zZWxmX18nIGluIGRpcihhLkFtZXRob2QpKQorICAgICAgICAjIyBzZWxmLmFzc2VydEluKCdfX3NlbGZfXycsIGRpcihhLkFtZXRob2QpKQogCiAgICAgICAgICMgVHJ5IGEgbW9kdWxlIHN1YmNsYXNzLgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGNsYXNzIE0odHlwZShzeXMpKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgbWluc3RhbmNlID0gTSgibSIpCkBAIC0yMjQzLDEwICsyMjM4LDcgQEAKICAgICAgICAgY2xhc3Mgb2N0bG9uZyhpbnQpOgogICAgICAgICAgICAgX19zbG90c19fID0gW10KICAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHMgPSBvY3Qoc2VsZikKLSAgICAgICAgICAgICAgICBpZiBzWy0xXSA9PSAnTCc6Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBzWzotMV0KLSAgICAgICAgICAgICAgICByZXR1cm4gcworICAgICAgICAgICAgICAgIHJldHVybiBvY3Qoc2VsZikKICAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc3VwZXIob2N0bG9uZywgc2VsZikuX19hZGRfXyhvdGhlcikpCiAgICAgICAgICAgICBfX3JhZGRfXyA9IF9fYWRkX18KQEAgLTI2MDMsNyArMjU5NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtjaXN0cignb25lJyldLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbY2lzdHIoJ3RXbycpXSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2Npc3RyKCdUSHJFRScpXSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNpc3RyKCdPTmUnKSBpbiBkKQorICAgICAgICBzZWxmLmFzc2VydEluKGNpc3RyKCdPTmUnKSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldChjaXN0cigndGhyRUUnKSksIDMpCiAKICAgICBkZWYgdGVzdF9jbGFzc2ljX2NvbXBhcmlzb25zKHNlbGYpOgpAQCAtMzIyMiw3ICszMjE0LDYgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZC5mb28gc2hvdWxkIGJlIHVuZGVmaW5lZCBub3ciKQogCiAgICAgICAgICMgVGVzdCBhIG5hc3R5IGJ1ZyBpbiByZWN1cnNlX2Rvd25fc3ViY2xhc3NlcygpCi0gICAgICAgIGltcG9ydCBnYwogICAgICAgICBjbGFzcyBBKG9iamVjdCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNsYXNzIEIoQSk6CkBAIC0zNDI3LDEwICszNDE4LDEwIEBACiAgICAgICAgIGQgPSBEKE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIE5vbmUpCiAgICAgICAgIGQgPSBDKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShkLCBEKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIEQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDEpCiAgICAgICAgIGQgPSBEKDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXNpbnN0YW5jZShkLCBEKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIEQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb28sIDEpCiAKICAgICBkZWYgdGVzdF9pbXVsX2J1ZyhzZWxmKToKQEAgLTM5MjIsMjkgKzM5MTMsMjkgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEMoKQogICAgICAgICBwYSA9IFByb3h5KGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGEsIEMpKSAgIyBCYXNlbGluZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwYSwgQykpICMgVGVzdAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKICAgICAgICAgIyBUZXN0IHdpdGggYSBjbGFzc2ljIHN1YmNsYXNzCiAgICAgICAgIGNsYXNzIEQoQyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGEgPSBEKCkKICAgICAgICAgcGEgPSBQcm94eShhKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhLCBDKSkgICMgQmFzZWxpbmUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocGEsIEMpKSAjIFRlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGEsIEMpICAjIEJhc2VsaW5lCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYSwgQykgIyBUZXN0CiAgICAgICAgICMgVGVzdCB3aXRoIGEgbmV3LXN0eWxlIGNsYXNzCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEMoKQogICAgICAgICBwYSA9IFByb3h5KGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGEsIEMpKSAgIyBCYXNlbGluZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwYSwgQykpICMgVGVzdAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKICAgICAgICAgIyBUZXN0IHdpdGggYSBuZXctc3R5bGUgc3ViY2xhc3MKICAgICAgICAgY2xhc3MgRChDKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEQoKQogICAgICAgICBwYSA9IFByb3h5KGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGEsIEMpKSAgIyBCYXNlbGluZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwYSwgQykpICMgVGVzdAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYSwgQykgICMgQmFzZWxpbmUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBhLCBDKSAjIFRlc3QKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3N1cGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgc3VwZXIoKSBmb3IgYSBwcm94eSBvYmplY3QuLi4KQEAgLTQwMTIsNyArNDAwMyw3IEBACiAKICAgICBkZWYgdGVzdF9maWxlX2ZhdWx0KHNlbGYpOgogICAgICAgICAjIFRlc3Rpbmcgc3lzLnN0ZG91dCBpcyBjaGFuZ2VkIGluIGdldGF0dHIuLi4KLSAgICAgICAgaW1wb3J0IHN5cworICAgICAgICB0ZXN0X3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgY2xhc3MgU3Rkb3V0R3VhcmQ6CiAgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5fX3N0ZG91dF9fCkBAIC00MDIyLDYgKzQwMTMsOCBAQAogICAgICAgICAgICAgcHJpbnQoIk9vcHMhIikKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSB0ZXN0X3N0ZG91dAogCiAgICAgZGVmIHRlc3RfdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgdmljaW91c19kZXNjcmlwdG9yX25vbnNlbnNlLi4uCkBAIC00MTAwLDggKzQwOTMsNiBAQAogICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIE5vdEltcGxlbWVudGVkLi4uCiAgICAgICAgICMgYWxsIGJpbmFyeSBtZXRob2RzIHNob3VsZCBiZSBhYmxlIHRvIHJldHVybiBhIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgaW1wb3J0IHR5cGVzCiAgICAgICAgIGltcG9ydCBvcGVyYXRvcgogCiAgICAgICAgIGRlZiBzcGVjaWFsbWV0aG9kKHNlbGYsIG90aGVyKToKQEAgLTQxODQsNiArNDE3NSwxNSBAQAogICAgICAgICB4LmEgPSA0MgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYSwgNDIpCiAKKyAgICAgICAgIyBBbHNvIGNoZWNrIHR5cGVfZ2V0YXR0cm8gZm9yIGNvcnJlY3RuZXNzLgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YQorICAgICAgICBYLmEgPSA0MgorICAgICAgICBNZXRhLmEgPSBEZXNjcigiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC5hLCA0MikKKwogICAgIGRlZiB0ZXN0X2dldGF0dHJfaG9va3Moc2VsZik6CiAgICAgICAgICMgaXNzdWUgNDIzMAogCkBAIC00MjYwLDIwICs0MjYwLDI2IEBACiAgICAgICAgIHNlbGYuQyA9IEMKIAogICAgIGRlZiB0ZXN0X2l0ZXJfa2V5cyhzZWxmKToKLSAgICAgICAgIyBUZXN0aW5nIGRpY3QtcHJveHkgaXRlcmtleXMuLi4KLSAgICAgICAga2V5cyA9IFsga2V5IGZvciBrZXkgaW4gc2VsZi5DLl9fZGljdF9fLmtleXMoKSBdCisgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGtleXMuLi4KKyAgICAgICAgaXQgPSBzZWxmLkMuX19kaWN0X18ua2V5cygpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShpdCwgbGlzdCkKKyAgICAgICAga2V5cyA9IGxpc3QoaXQpCiAgICAgICAgIGtleXMuc29ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWydfX2RpY3RfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLAogICAgICAgICAgICAgJ19fd2Vha3JlZl9fJywgJ21ldGgnXSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJfdmFsdWVzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgZGljdC1wcm94eSBpdGVydmFsdWVzLi4uCi0gICAgICAgIHZhbHVlcyA9IFsgdmFsdWVzIGZvciB2YWx1ZXMgaW4gc2VsZi5DLl9fZGljdF9fLnZhbHVlcygpIF0KKyAgICAgICAgIyBUZXN0aW5nIGRpY3QtcHJveHkgdmFsdWVzLi4uCisgICAgICAgIGl0ID0gc2VsZi5DLl9fZGljdF9fLnZhbHVlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShpdCwgbGlzdCkKKyAgICAgICAgdmFsdWVzID0gbGlzdChpdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odmFsdWVzKSwgNSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJfaXRlbXMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBkaWN0LXByb3h5IGl0ZXJpdGVtcy4uLgotICAgICAgICBrZXlzID0gWyBrZXkgZm9yIChrZXksIHZhbHVlKSBpbiBzZWxmLkMuX19kaWN0X18uaXRlbXMoKSBdCisgICAgICAgIGl0ID0gc2VsZi5DLl9fZGljdF9fLml0ZW1zKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGl0LCBsaXN0KQorICAgICAgICBrZXlzID0gW2l0ZW1bMF0gZm9yIGl0ZW0gaW4gaXRdCiAgICAgICAgIGtleXMuc29ydCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgWydfX2RpY3RfXycsICdfX2RvY19fJywgJ19fbW9kdWxlX18nLAogICAgICAgICAgICAgJ19fd2Vha3JlZl9fJywgJ21ldGgnXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdC5weSBiL0xpYi90ZXN0L3Rlc3RfZGljdC5weQppbmRleCBkMWIxMDM3Li4xNTA3ZTQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CkBAIC0xLDQxICsxLDUwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi1pbXBvcnQgc3lzLCBjb2xsZWN0aW9ucywgcmFuZG9tLCBzdHJpbmcKK2ltcG9ydCBjb2xsZWN0aW9ucywgcmFuZG9tLCBzdHJpbmcKIGltcG9ydCBnYywgd2Vha3JlZgogCiAKIGNsYXNzIERpY3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X2ludmFsaWRfa2V5d29yZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGNsYXNzIEN1c3RvbShkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIGludmFsaWQgaW4gezEgOiAyfSwgQ3VzdG9tKHsxIDogMn0pOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGRpY3QoKippbnZhbGlkKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHt9LnVwZGF0ZSgqKmludmFsaWQpCisKICAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKICAgICAgICAgIyBjYWxsaW5nIGJ1aWx0LWluIHR5cGVzIHdpdGhvdXQgYXJndW1lbnQgbXVzdCByZXR1cm4gZW1wdHkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KCksIHt9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGljdCgpIGlzIG5vdCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkaWN0KCksIHt9KQogCiAgICAgZGVmIHRlc3RfbGl0ZXJhbF9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgIyBjaGVjayBsaXRlcmFsIGNvbnN0cnVjdG9yIGZvciBkaWZmZXJlbnQgc2l6ZWQgZGljdHMgKHRvIGV4ZXJjaXNlIHRoZSBCVUlMRF9NQVAgb3BhcmcKKyAgICAgICAgIyBjaGVjayBsaXRlcmFsIGNvbnN0cnVjdG9yIGZvciBkaWZmZXJlbnQgc2l6ZWQgZGljdHMKKyAgICAgICAgIyAodG8gZXhlcmNpc2UgdGhlIEJVSUxEX01BUCBvcGFyZykuCiAgICAgICAgIGZvciBuIGluICgwLCAxLCA2LCAyNTYsIDQwMCk6Ci0gICAgICAgICAgICBpdGVtcyA9IFsoJycuam9pbihbcmFuZG9tLmNob2ljZShzdHJpbmcuYXNjaWlfbGV0dGVycykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZSg4KV0pLAotICAgICAgICAgICAgICAgICAgICAgIGkpCisgICAgICAgICAgICBpdGVtcyA9IFsoJycuam9pbihyYW5kb20uc2FtcGxlKHN0cmluZy5hc2NpaV9sZXR0ZXJzLCA4KSksIGkpCiAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShuKV0KICAgICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKGl0ZW1zKQotICAgICAgICAgICAgZGljdGxpdGVyYWwgPSAneycgKyAnLCAnLmpvaW4oJyVyOiAlZCcgJSBpdGVtIGZvciBpdGVtIGluIGl0ZW1zKSArICd9JworICAgICAgICAgICAgZm9ybWF0dGVkX2l0ZW1zID0gKCd7IXJ9OiB7OmR9Jy5mb3JtYXQoaywgdikgZm9yIGssIHYgaW4gaXRlbXMpCisgICAgICAgICAgICBkaWN0bGl0ZXJhbCA9ICd7JyArICcsICcuam9pbihmb3JtYXR0ZWRfaXRlbXMpICsgJ30nCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZGljdGxpdGVyYWwpLCBkaWN0KGl0ZW1zKSkKIAogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qge30pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobm90IHt9LCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoezE6IDJ9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbCh7fSkgaXMgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib29sKHsxOiAyfSkgaXMgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhib29sKHt9KSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYm9vbCh7MTogMn0pLCBUcnVlKQogCiAgICAgZGVmIHRlc3Rfa2V5cyhzZWxmKToKICAgICAgICAgZCA9IHt9CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGQua2V5cygpKSwgc2V0KCkpCiAgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CiAgICAgICAgIGsgPSBkLmtleXMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQua2V5cywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGRpY3QoYT0xKS5rZXlzKCkpLCAiZGljdF9rZXlzKFsnYSddKSIpCiAKQEAgLTU4LDEyICs2NywxMyBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgIGQgPSB7fQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90ICgnYScgaW4gZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdhJyBpbiBkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBkKQogICAgICAgICBkID0geydhJzogMSwgJ2InOiAyfQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdjJyBub3QgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2InLCBkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdjJywgZCkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQuX19jb250YWluc19fKQogCkBAIC0xOTcsNyArMjA3LDcgQEAKICAgICBkZWYgdGVzdF9mcm9ta2V5cyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0LmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQogICAgICAgICBkID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdChkLmZyb21rZXlzKCdhYmMnKSBpcyBkKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkLmZyb21rZXlzKCdhYmMnKSwgZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmZyb21rZXlzKCdhYmMnKSwgeydhJzpOb25lLCAnYic6Tm9uZSwgJ2MnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZnJvbWtleXMoKDQsNSksMCksIHs0OjAsIDU6MH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mcm9ta2V5cyhbXSksIHt9KQpAQCAtMjA4LDE0ICsyMTgsMTQgQEAKICAgICAgICAgY2xhc3MgZGljdGxpa2UoZGljdCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0bGlrZS5mcm9ta2V5cygnYScpLCB7J2EnOk5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgeydhJzpOb25lfSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoZGljdGxpa2UuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSkgaXMgZGljdGxpa2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkaWN0bGlrZS5mcm9ta2V5cygnYScpLCBkaWN0bGlrZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRpY3RsaWtlKCkuZnJvbWtleXMoJ2EnKSwgZGljdGxpa2UpCiAgICAgICAgIGNsYXNzIG15ZGljdChkaWN0KToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkKICAgICAgICAgdWQgPSBteWRpY3QuZnJvbWtleXMoJ2FiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1ZCwgeydhJzpOb25lLCAnYic6Tm9uZX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHVkLCBjb2xsZWN0aW9ucy5Vc2VyRGljdCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1ZCwgY29sbGVjdGlvbnMuVXNlckRpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGljdC5mcm9ta2V5cykKIAogICAgICAgICBjbGFzcyBFeGMoRXhjZXB0aW9uKTogcGFzcwpAQCAtMjUyLDEwICsyNjIsMTAgQEAKIAogICAgIGRlZiB0ZXN0X2dldChzZWxmKToKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQotICAgICAgICBkID0geydhJyA6IDEsICdiJyA6IDJ9Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLmdldCgnYycpIGlzIE5vbmUpCisgICAgICAgIGQgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5nZXQoJ2MnKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmdldCgnYycsIDMpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZ2V0KCdhJyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoJ2EnLCAzKSwgMSkKQEAgLTI2NSw5ICsyNzUsOSBAQAogICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CiAgICAgICAgICMgZGljdC5zZXRkZWZhdWx0KCkKICAgICAgICAgZCA9IHt9Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkLnNldGRlZmF1bHQoJ2tleTAnKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGQuc2V0ZGVmYXVsdCgna2V5MCcpLCBOb25lKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleTAnLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQuc2V0ZGVmYXVsdCgna2V5MCcpIGlzIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZC5zZXRkZWZhdWx0KCdrZXkwJyksIE5vbmUpCiAgICAgICAgIGQuc2V0ZGVmYXVsdCgna2V5JywgW10pLmFwcGVuZCgzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2tleSddWzBdLCAzKQogICAgICAgICBkLnNldGRlZmF1bHQoJ2tleScsIFtdKS5hcHBlbmQoNCkKQEAgLTMwOSw5ICszMTksOSBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhLCBpbnQoa2EpKQogICAgICAgICAgICAgICAgICAgICBrYiwgdmIgPSB0YiA9IGIucG9waXRlbSgpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmIsIGludChrYikpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QoY29weW1vZGUgPCAwIGFuZCB0YSAhPSB0YikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBhKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb3B5bW9kZSA8IDAgYW5kIHRhICE9IHRiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGIpCiAKICAgICAgICAgZCA9IHt9CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCkBAIC0zMjgsMTMgKzMzOCw2IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9wLCBrKQogCi0gICAgICAgICMgdmVyaWZ5IGxvbmdzL2ludHMgZ2V0IHNhbWUgdmFsdWUgd2hlbiBrZXkgPiAzMiBiaXRzIChmb3IgNjQtYml0IGFyY2hzKQotICAgICAgICAjIHNlZSBTRiBidWcgIzY4OTY1OQotICAgICAgICB4ID0gNDUwMzU5OTYyNzM3MDQ5NgotICAgICAgICB5ID0gNDUwMzU5OTYyNzM3MDQ5NgotICAgICAgICBoID0ge3g6ICdhbnl0aGluZycsIHk6ICdzb21ldGhpbmcgZWxzZSd9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaFt4XSwgaFt5XSkKLQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIHYpLCB2KQogICAgICAgICBkW2tdID0gdgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucG9wKGssIDEpLCB2KQpAQCAtMzU3LDE1ICszNjAsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCBkLnBvcCwgeCkKIAogICAgIGRlZiB0ZXN0X211dGF0aW5naXRlcmF0aW9uKHNlbGYpOgorICAgICAgICAjIGNoYW5naW5nIGRpY3Qgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCiAgICAgICAgIGQgPSB7fQogICAgICAgICBkWzFdID0gMQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKICAgICAgICAgICAgIGZvciBpIGluIGQ6CiAgICAgICAgICAgICAgICAgZFtpKzFdID0gMQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJjaGFuZ2luZyBkaWN0IHNpemUgZHVyaW5nIGl0ZXJhdGlvbiBkb2Vzbid0IHJhaXNlIEVycm9yIikKIAogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIGQgPSB7fQpAQCAtMzk5LDEyICszOTksOSBAQAogCiAgICAgICAgIGQxID0ge0JhZENtcCgpOiAxfQogICAgICAgICBkMiA9IHsxOiAxfQotICAgICAgICB0cnk6CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGMpOgogICAgICAgICAgICAgZDEgPT0gZDIKLSAgICAgICAgZXhjZXB0IEV4YzoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiPCBkaWRuJ3QgcmFpc2UgRXhjIikKIAogICAgIGRlZiB0ZXN0X2tleXNfY29udGFpbmVkKHNlbGYpOgogICAgICAgICBzZWxmLmhlbHBlcl9rZXlzX2NvbnRhaW5lZChsYW1iZGEgeDogeC5rZXlzKCkpCkBAIC00NTgsMTUgKzQ1NSwyMyBAQAogICAgICAgICBjbGFzcyBDOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisKICAgICAgICAgZDEgPSB7MTogQygpfQogICAgICAgICBkMiA9IHsxOiBDKCl9Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGFtYmRhOiBkMS5pdGVtcygpID09IGQyLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGFtYmRhOiBkMS5pdGVtcygpICE9IGQyLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGFtYmRhOiBkMS5pdGVtcygpIDw9IGQyLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGFtYmRhOiBkMS5pdGVtcygpID49IGQyLml0ZW1zKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGQxLml0ZW1zKCkgPT0gZDIuaXRlbXMoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkMS5pdGVtcygpICE9IGQyLml0ZW1zKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZDEuaXRlbXMoKSA8PSBkMi5pdGVtcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGQxLml0ZW1zKCkgPj0gZDIuaXRlbXMoKQorCiAgICAgICAgIGQzID0gezE6IEMoKSwgMjogQygpfQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGxhbWJkYTogZDIuaXRlbXMoKSA8IGQzLml0ZW1zKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGFtYmRhOiBkMy5pdGVtcygpID4gZDIuaXRlbXMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZDIuaXRlbXMoKSA8IGQzLml0ZW1zKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZDMuaXRlbXMoKSA+IGQyLml0ZW1zKCkKIAogICAgIGRlZiB0ZXN0X2RpY3R2aWV3X3NldF9vcGVyYXRpb25zX29uX2tleXMoc2VsZik6CiAgICAgICAgIGsxID0gezE6MSwgMjoyfS5rZXlzKCkKQEAgLTUxMiw4ICs1MTcsOCBAQAogCiAgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgZGljdCBkb2Vzbid0IGhhdmUgYSBfX21pc3NpbmdfXyBtZXRob2QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKGRpY3QsICJfX21pc3NpbmdfXyIpLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNhdHRyKHt9LCAiX19taXNzaW5nX18iKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihkaWN0LCAiX19taXNzaW5nX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHt9LCAiX19taXNzaW5nX18iKSkKICAgICAgICAgIyBUZXN0IHNldmVyYWwgY2FzZXM6CiAgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCiAgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCkBAIC01MjUsNDkgKzUzMCw0MCBAQAogICAgICAgICBkID0gRCh7MTogMiwgMzogNH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxXSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzNdLCA0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMiBub3QgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgbm90IGluIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZC5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsyXSwgNDIpCisKICAgICAgICAgY2xhc3MgRShkaWN0KToKICAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihrZXkpCiAgICAgICAgIGUgPSBFKCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcikgYXMgYzoKICAgICAgICAgICAgIGVbNDJdCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuYXJncywgKDQyLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImVbNDJdIGRpZG4ndCByYWlzZSBSdW50aW1lRXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICg0MiwpKQorCiAgICAgICAgIGNsYXNzIEYoZGljdCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgICAgICAgICAgIyBBbiBpbnN0YW5jZSB2YXJpYWJsZSBfX21pc3NpbmdfXyBzaG91bGQgaGF2ZSBubyBlZmZlY3QKICAgICAgICAgICAgICAgICBzZWxmLl9fbWlzc2luZ19fID0gbGFtYmRhIGtleTogTm9uZQogICAgICAgICBmID0gRigpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKICAgICAgICAgICAgIGZbNDJdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZls0Ml0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKKwogICAgICAgICBjbGFzcyBHKGRpY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBnID0gRygpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgYzoKICAgICAgICAgICAgIGdbNDJdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5hcmdzLCAoNDIsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiZ1s0Ml0gZGlkbid0IHJhaXNlIEtleUVycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5hcmdzLCAoNDIsKSkKIAogICAgIGRlZiB0ZXN0X3R1cGxlX2tleWVycm9yKHNlbGYpOgogICAgICAgICAjIFNGICMxNTc2NjU3CiAgICAgICAgIGQgPSB7fQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBkWygxLCldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsICgoMSwpLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIm1pc3NpbmcgS2V5RXJyb3IiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZXhjZXB0aW9uLmFyZ3MsICgoMSwpLCkpCiAKICAgICBkZWYgdGVzdF9iYWRfa2V5KHNlbGYpOgogICAgICAgICAjIERpY3Rpb25hcnkgbG9va3VwcyBzaG91bGQgZmFpbCBpZiBfX2VxX18oKSByYWlzZXMgYW4gZXhjZXB0aW9uLgpAQCAtNTk0LDEyICs1OTAsOCBAQAogICAgICAgICAgICAgICAgICAgICAgJ2Quc2V0ZGVmYXVsdCh4MiwgNDIpJywKICAgICAgICAgICAgICAgICAgICAgICdkLnBvcCh4MiknLAogICAgICAgICAgICAgICAgICAgICAgJ2QudXBkYXRlKHt4MjogMn0pJ106Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEN1c3RvbUV4Y2VwdGlvbik6CiAgICAgICAgICAgICAgICAgZXhlYyhzdG10LCBsb2NhbHMoKSkKLSAgICAgICAgICAgIGV4Y2VwdCBDdXN0b21FeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlN0YXRlbWVudCAlciBkaWRuJ3QgcmFpc2UgZXhjZXB0aW9uIiAlIHN0bXQpCiAKICAgICBkZWYgdGVzdF9yZXNpemUxKHNlbGYpOgogICAgICAgICAjIERpY3QgcmVzaXppbmcgYnVnLCBmb3VuZCBieSBKYWNrIEphbnNlbiBpbiAyLjIgQ1ZTIGRldmVsb3BtZW50LgpAQCAtNjQyLDExICs2MzQsOSBAQAogICAgIGRlZiB0ZXN0X2VtcHR5X3ByZXNpemVkX2RpY3RfaW5fZnJlZWxpc3Qoc2VsZik6CiAgICAgICAgICMgQnVnICMzNTM3OiBpZiBhbiBlbXB0eSBidXQgcHJlc2l6ZWQgZGljdCB3aXRoIGEgc2l6ZSBsYXJnZXIKICAgICAgICAgIyB0aGFuIDcgd2FzIGluIHRoZSBmcmVlbGlzdCwgaXQgdHJpZ2dlcmVkIGFuIGFzc2VydGlvbiBmYWlsdXJlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGQgPSB7J2EnOiAxLzAsICAnYic6IE5vbmUsICdjJzogTm9uZSwgJ2QnOiBOb25lLCAnZSc6IE5vbmUsCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgZCA9IHsnYSc6IDEgLy8gMCwgJ2InOiBOb25lLCAnYyc6IE5vbmUsICdkJzogTm9uZSwgJ2UnOiBOb25lLAogICAgICAgICAgICAgICAgICAnZic6IE5vbmUsICdnJzogTm9uZSwgJ2gnOiBOb25lfQotICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgICAgIGQgPSB7fQogCiAgICAgZGVmIHRlc3RfY29udGFpbmVyX2l0ZXJhdG9yKHNlbGYpOgpAQCAtNjYzLDcgKzY1Myw3IEBACiAgICAgICAgICAgICBvYmoueCA9IGl0ZXIob2JqLnYpCiAgICAgICAgICAgICBkZWwgb2JqLCBjb250YWluZXIKICAgICAgICAgICAgIGdjLmNvbGxlY3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlZigpIGlzIE5vbmUsICJDeWNsZSB3YXMgbm90IGNvbGxlY3RlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlZigpLCBOb25lLCAiQ3ljbGUgd2FzIG5vdCBjb2xsZWN0ZWQiKQogCiAgICAgZGVmIF9ub3RfdHJhY2tlZChzZWxmLCB0KToKICAgICAgICAgIyBOZXN0ZWQgY29udGFpbmVycyBjYW4gdGFrZSBzZXZlcmFsIGNvbGxlY3Rpb25zIHRvIHVudHJhY2sKQEAgLTY3Nyw2ICs2NjcsNyBAQAogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQodCksIHQpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90cmFja19saXRlcmFscyhzZWxmKToKICAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkaWN0IGxpdGVyYWxzCiAgICAgICAgIHgsIHksIHosIHcgPSAxLjUsICJhIiwgKDEsIE5vbmUpLCBbXQpAQCAtNjk0LDYgKzY4NSw3IEBACiAgICAgICAgIHNlbGYuX3RyYWNrZWQoezE6IHt9fSkKICAgICAgICAgc2VsZi5fdHJhY2tlZCh7MTogc2V0KCl9KQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdHJhY2tfZHluYW1pYyhzZWxmKToKICAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiBkeW5hbWljYWxseS1jcmVhdGVkIGRpY3RzCiAgICAgICAgIGNsYXNzIE15T2JqZWN0KG9iamVjdCk6CkBAIC03NTcsNiArNzQ5LDcgQEAKICAgICAgICAgZC51cGRhdGUoWyh4LCB5KSwgKHosIHcpXSkKICAgICAgICAgc2VsZi5fdHJhY2tlZChkKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CiAgICAgICAgICMgRGljdCBzdWJ0eXBlcyBhcmUgYWx3YXlzIHRyYWNrZWQKICAgICAgICAgY2xhc3MgTXlEaWN0KGRpY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQppbmRleCA0ZmVlNzU1Li40YzA0MDc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3R2aWV3cy5weQpAQCAtMjQsMTAgKzI0LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgezEsICJiIn0pCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5cywgezF9KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleXMsIDQyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMSBpbiBrZXlzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImEiIGluIGtleXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgxMCBub3QgaW4ga2V5cykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJaIiBub3QgaW4ga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCBrZXlzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJhIiwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwga2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiWiIsIGtleXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5rZXlzKCksIGQua2V5cygpKQogICAgICAgICBlID0gezE6IDExLCAiYSI6ICJkZWYifQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQua2V5cygpLCBlLmtleXMoKSkKQEAgLTQ0LDEzICs0NCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCB7KDEsIDEwKSwgKCJhIiwgImRlZiIpfSkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpdGVtcywgeygxLCAxMCl9KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGl0ZW1zLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgxLCAxMCkgaW4gaXRlbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoImEiLCAiQUJDIikgaW4gaXRlbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMSwgMTEpIG5vdCBpbiBpdGVtcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDEgbm90IGluIGl0ZW1zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCkgbm90IGluIGl0ZW1zKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKDEsKSBub3QgaW4gaXRlbXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMSwgMiwgMykgbm90IGluIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEluKCgxLCAxMCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydEluKCgiYSIsICJBQkMiKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKDEsIDExKSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgaXRlbXMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oKCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCksIGl0ZW1zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgxLCAyLCAzKSwgaXRlbXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pdGVtcygpLCBkLml0ZW1zKCkpCiAgICAgICAgIGUgPSBkLmNvcHkoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXRlbXMoKSwgZS5pdGVtcygpKQpAQCAtNjksNiArNjksMTE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHZhbHVlcyksIHsxMCwgIkFCQyJ9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZXMpLCAyKQogCisgICAgZGVmIHRlc3RfZGljdF9yZXByKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVwcihkKSwgc3RyKQorICAgICAgICByID0gcmVwcihkLml0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X2l0ZW1zKFsoJ2EnLCAnQUJDJyksICgxLCAxMCldKSIgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIHIgPT0gImRpY3RfaXRlbXMoWygxLCAxMCksICgnYScsICdBQkMnKV0pIikKKyAgICAgICAgciA9IHJlcHIoZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X2tleXMoWydhJywgMV0pIiBvcgorICAgICAgICAgICAgICAgICAgICAgICAgciA9PSAiZGljdF9rZXlzKFsxLCAnYSddKSIpCisgICAgICAgIHIgPSByZXByKGQudmFsdWVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyID09ICJkaWN0X3ZhbHVlcyhbJ0FCQycsIDEwXSkiIG9yCisgICAgICAgICAgICAgICAgICAgICAgICByID09ICJkaWN0X3ZhbHVlcyhbMTAsICdBQkMnXSkiKQorCisgICAgZGVmIHRlc3Rfa2V5c19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydiJzogMywgJ2MnOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgJiBkMS5rZXlzKCksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpICYgZDIua2V5cygpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgJiBkMy5rZXlzKCksIHNldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSAmIHNldChkMS5rZXlzKCkpLCB7J2EnLCAnYid9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSAmIHNldChkMi5rZXlzKCkpLCB7J2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgJiBzZXQoZDMua2V5cygpKSwgc2V0KCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgfCBkMS5rZXlzKCksIHsnYScsICdiJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIHwgZDIua2V5cygpLCB7J2EnLCAnYicsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIHwgZDMua2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgfCBzZXQoZDEua2V5cygpKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgfCBzZXQoZDIua2V5cygpKSwgeydhJywgJ2InLCAnYyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSB8IHNldChkMy5rZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsnYScsICdiJywgJ2QnLCAnZSd9KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIF4gZDEua2V5cygpLCBzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiBkMi5rZXlzKCksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIF4gZDMua2V5cygpLCB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiBzZXQoZDEua2V5cygpKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIF4gc2V0KGQyLmtleXMoKSksIHsnYScsICdjJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIF4gc2V0KGQzLmtleXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkMS5rZXlzKCkuaXNkaXNqb2ludChkMS5rZXlzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQxLmtleXMoKS5pc2Rpc2pvaW50KGQyLmtleXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZDEua2V5cygpLmlzZGlzam9pbnQobGlzdChkMi5rZXlzKCkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkMS5rZXlzKCkuaXNkaXNqb2ludChzZXQoZDIua2V5cygpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5rZXlzKCkuaXNkaXNqb2ludCh7J3gnLCAneScsICd6J30pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDEua2V5cygpLmlzZGlzam9pbnQoWyd4JywgJ3knLCAneiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmtleXMoKS5pc2Rpc2pvaW50KHNldChbJ3gnLCAneScsICd6J10pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmtleXMoKS5pc2Rpc2pvaW50KHNldChbJ3gnLCAneSddKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5rZXlzKCkuaXNkaXNqb2ludChbJ3gnLCAneSddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmtleXMoKS5pc2Rpc2pvaW50KHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLmtleXMoKS5pc2Rpc2pvaW50KGQzLmtleXMoKSkpCisKKyAgICAgICAgZGUgPSB7fQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGUua2V5cygpLmlzZGlzam9pbnQoc2V0KCkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGUua2V5cygpLmlzZGlzam9pbnQoW10pKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGUua2V5cygpLmlzZGlzam9pbnQoZGUua2V5cygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlLmtleXMoKS5pc2Rpc2pvaW50KFsxXSkpCisKKyAgICBkZWYgdGVzdF9pdGVtc19zZXRfb3BlcmF0aW9ucyhzZWxmKToKKyAgICAgICAgZDEgPSB7J2EnOiAxLCAnYic6IDJ9CisgICAgICAgIGQyID0geydhJzogMiwgJ2InOiAyfQorICAgICAgICBkMyA9IHsnZCc6IDQsICdlJzogNX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGQxLml0ZW1zKCkgJiBkMS5pdGVtcygpLCB7KCdhJywgMSksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpICYgZDIuaXRlbXMoKSwgeygnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpICYgZDMuaXRlbXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSAmIHNldChkMS5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpICYgc2V0KGQyLml0ZW1zKCkpLCB7KCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLml0ZW1zKCkgJiBzZXQoZDMuaXRlbXMoKSksIHNldCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSB8IGQxLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSB8IGQyLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKSwgKCdiJywgMil9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLml0ZW1zKCkgfCBkMy5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSB8IHNldChkMS5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7KCdhJywgMSksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpIHwgc2V0KGQyLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdhJywgMiksICgnYicsIDIpfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpIHwgc2V0KGQzLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHsoJ2EnLCAxKSwgKCdiJywgMiksICgnZCcsIDQpLCAoJ2UnLCA1KX0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5pdGVtcygpIF4gZDEuaXRlbXMoKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSBeIGQyLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2EnLCAyKX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEuaXRlbXMoKSBeIGQzLml0ZW1zKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeygnYScsIDEpLCAoJ2InLCAyKSwgKCdkJywgNCksICgnZScsIDUpfSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQxLml0ZW1zKCkuaXNkaXNqb2ludChkMS5pdGVtcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkMS5pdGVtcygpLmlzZGlzam9pbnQoZDIuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZDEuaXRlbXMoKS5pc2Rpc2pvaW50KGxpc3QoZDIuaXRlbXMoKSkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQxLml0ZW1zKCkuaXNkaXNqb2ludChzZXQoZDIuaXRlbXMoKSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZDEuaXRlbXMoKS5pc2Rpc2pvaW50KHsneCcsICd5JywgJ3onfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5pdGVtcygpLmlzZGlzam9pbnQoWyd4JywgJ3knLCAneiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLml0ZW1zKCkuaXNkaXNqb2ludChzZXQoWyd4JywgJ3knLCAneiddKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5pdGVtcygpLmlzZGlzam9pbnQoc2V0KFsneCcsICd5J10pKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxLml0ZW1zKCkuaXNkaXNqb2ludCh7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMS5pdGVtcygpLmlzZGlzam9pbnQoZDMuaXRlbXMoKSkpCisKKyAgICAgICAgZGUgPSB7fQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGUuaXRlbXMoKS5pc2Rpc2pvaW50KHNldCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRlLml0ZW1zKCkuaXNkaXNqb2ludChbXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZS5pdGVtcygpLmlzZGlzam9pbnQoZGUuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZS5pdGVtcygpLmlzZGlzam9pbnQoWzFdKSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFNldFRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQppbmRleCBkYzJhYmU4Li4zMjU0NDlhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CkBAIC00LDggKzQsNjQgQEAKIGltcG9ydCBkb2N0ZXN0CiBpbXBvcnQgc3lzCiAKLWNsYXNzIFRlc3RTRmJ1Z3ModW5pdHRlc3QuVGVzdENhc2UpOgogCitjbGFzcyBUZXN0V2l0aEFzY2lpKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9vbmVfaW5zZXJ0KHNlbGYpOgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsICdiJyAqIDEwMCwgJ2EnICsgJ2InICogMTAwKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAuOTk1LCBwbGFjZXM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHNtLmdldF9vcGNvZGVzKCkpLAorICAgICAgICAgICAgWyAgICgnaW5zZXJ0JywgMCwgMCwgMCwgMSksCisgICAgICAgICAgICAgICAgKCdlcXVhbCcsIDAsIDEwMCwgMSwgMTAxKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc20uYnBvcHVsYXIsIHNldCgpKQorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKE5vbmUsICdiJyAqIDEwMCwgJ2InICogNTAgKyAnYScgKyAnYicgKiA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NSwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2VxdWFsJywgMCwgNTAsIDAsIDUwKSwKKyAgICAgICAgICAgICAgICAoJ2luc2VydCcsIDUwLCA1MCwgNTAsIDUxKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgNTAsIDEwMCwgNTEsIDEwMSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtLmJwb3B1bGFyLCBzZXQoKSkKKworICAgIGRlZiB0ZXN0X29uZV9kZWxldGUoc2VsZik6CisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgJ2EnICogNDAgKyAnYycgKyAnYicgKiA0MCwgJ2EnICogNDAgKyAnYicgKiA0MCkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzbS5yYXRpbygpLCAwLjk5NCwgcGxhY2VzPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzbS5nZXRfb3Bjb2RlcygpKSwKKyAgICAgICAgICAgIFsgICAoJ2VxdWFsJywgMCwgNDAsIDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2RlbGV0ZScsIDQwLCA0MSwgNDAsIDQwKSwKKyAgICAgICAgICAgICAgICAoJ2VxdWFsJywgNDEsIDgxLCA0MCwgODApXSkKKworICAgIGRlZiB0ZXN0X2JqdW5rKHNlbGYpOgorICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKGlzanVuaz1sYW1iZGEgeDogeCA9PSAnICcsCisgICAgICAgICAgICAgICAgYT0nYScgKiA0MCArICdiJyAqIDQwLCBiPSdhJyAqIDQ0ICsgJ2InICogNDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc20uYmp1bmssIHNldCgpKQorCisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoaXNqdW5rPWxhbWJkYSB4OiB4ID09ICcgJywKKyAgICAgICAgICAgICAgICBhPSdhJyAqIDQwICsgJ2InICogNDAsIGI9J2EnICogNDQgKyAnYicgKiA0MCArICcgJyAqIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtLmJqdW5rLCB7JyAnfSkKKworICAgICAgICBzbSA9IGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyKGlzanVuaz1sYW1iZGEgeDogeCBpbiBbJyAnLCAnYiddLAorICAgICAgICAgICAgICAgIGE9J2EnICogNDAgKyAnYicgKiA0MCwgYj0nYScgKiA0NCArICdiJyAqIDQwICsgJyAnICogMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc20uYmp1bmssIHsnICcsICdiJ30pCisKKworY2xhc3MgVGVzdEF1dG9qdW5rKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIGF1dG9qdW5rIHBhcmFtZXRlciBhZGRlZCBpbiAyLjciIiIKKyAgICBkZWYgdGVzdF9vbmVfaW5zZXJ0X2hvbW9nZW5vdXNfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgQnkgZGVmYXVsdCBhdXRvanVuaz1UcnVlIGFuZCB0aGUgaGV1cmlzdGljIGtpY2tzIGluIGZvciBhIHNlcXVlbmNlCisgICAgICAgICMgb2YgbGVuZ3RoIDIwMCsKKyAgICAgICAgc2VxMSA9ICdiJyAqIDIwMAorICAgICAgICBzZXEyID0gJ2EnICsgJ2InICogMjAwCisKKyAgICAgICAgc20gPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBzZXExLCBzZXEyKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHNtLnJhdGlvKCksIDAsIHBsYWNlcz0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNtLmJwb3B1bGFyLCB7J2InfSkKKworICAgICAgICAjIE5vdyB0dXJuIHRoZSBoZXVyaXN0aWMgb2ZmCisgICAgICAgIHNtID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgc2VxMSwgc2VxMiwgYXV0b2p1bms9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc20ucmF0aW8oKSwgMC45OTc1LCBwbGFjZXM9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbS5icG9wdWxhciwgc2V0KCkpCisKKworY2xhc3MgVGVzdFNGYnVncyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmF0aW9fZm9yX251bGxfc2VxbihzZWxmKToKICAgICAgICAgIyBDaGVjayBjbGVhcmluZyBvZiBTRiBidWcgNzYzMDIzCiAgICAgICAgIHMgPSBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlcihOb25lLCBbXSwgW10pCkBAIC0yMjUsNyArMjgxLDkgQEAKIGRlZiB0ZXN0X21haW4oKToKICAgICBkaWZmbGliLkh0bWxEaWZmLl9kZWZhdWx0X3ByZWZpeCA9IDAKICAgICBEb2N0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKGRpZmZsaWIpCi0gICAgcnVuX3VuaXR0ZXN0KFRlc3RTRnBhdGNoZXMsIFRlc3RTRmJ1Z3MsIERvY3Rlc3RzLCBUZXN0T3V0cHV0Rm9ybWF0KQorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFdpdGhBc2NpaSwgVGVzdEF1dG9qdW5rLCBUZXN0U0ZwYXRjaGVzLCBUZXN0U0ZidWdzLAorICAgICAgICBUZXN0T3V0cHV0Rm9ybWF0LCBEb2N0ZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaXMucHkgYi9MaWIvdGVzdC90ZXN0X2Rpcy5weQppbmRleCBkODJkYzVhLi43YTYxNDkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rpcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Rpcy5weQpAQCAtMSw2ICsxLDYgQEAKICMgTWluaW1hbCB0ZXN0cyBmb3IgZGlzIG1vZHVsZQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjYXB0dXJlZF9zdGRvdXQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogaW1wb3J0IGRpcwpAQCAtMTksOCArMTksOCBAQAogCiAgJS00ZCAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAgICAgMTMgUkVUVVJOX1ZBTFVFCi0iIiIlKF9mLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMSwKLSAgICAgX2YuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAyKQorIiIiICUgKF9mLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgICBfZi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDIpCiAKIAogZGVmIGJ1ZzcwODkwMSgpOgpAQCAtNDMsOSArNDMsOSBAQAogICAgICAgICA+PiAgIDI1IFBPUF9CTE9DSwogICAgICAgICA+PiAgIDI2IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQogICAgICAgICAgICAgIDI5IFJFVFVSTl9WQUxVRQotIiIiJShidWc3MDg5MDEuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAotICAgICBidWc3MDg5MDEuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAyLAotICAgICBidWc3MDg5MDEuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAzKQorIiIiICUgKGJ1ZzcwODkwMS5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDEsCisgICAgICAgYnVnNzA4OTAxLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMiwKKyAgICAgICBidWc3MDg5MDEuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAzKQogCiAKIGRlZiBidWcxMzMzOTgyKHg9W10pOgpAQCAtNzQsOSArNzQsOSBAQAogCiAgJS00ZCAgICAgICAgNDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKE5vbmUpCiAgICAgICAgICAgICAgNDMgUkVUVVJOX1ZBTFVFCi0iIiIlKGJ1ZzEzMzM5ODIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAotICAgICBidWcxMzMzOTgyLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vICsgMiwKLSAgICAgYnVnMTMzMzk4Mi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDMpCisiIiIgJSAoYnVnMTMzMzk4Mi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDEsCisgICAgICAgYnVnMTMzMzk4Mi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDIsCisgICAgICAgYnVnMTMzMzk4Mi5fX2NvZGVfXy5jb19maXJzdGxpbmVubyArIDMpCiAKIF9CSUdfTElORU5PX0ZPUk1BVCA9ICIiIlwKICUzZCAgICAgICAgICAgMCBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoc3BhbSkKQEAgLTk2LDYgKzk2LDQ2IEBACiAKICIiIgogCitleHByX3N0ciA9ICJ4ICsgMSIKKworZGlzX2V4cHJfc3RyID0gIiIiXAorICAxICAgICAgICAgICAwIExPQURfTkFNRSAgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAwICgxKQorICAgICAgICAgICAgICA2IEJJTkFSWV9BREQKKyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUKKyIiIgorCitzaW1wbGVfc3RtdF9zdHIgPSAieCA9IHggKyAxIgorCitkaXNfc2ltcGxlX3N0bXRfc3RyID0gIiIiXAorICAxICAgICAgICAgICAwIExPQURfTkFNRSAgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgICAzIExPQURfQ09OU1QgICAgICAgICAgICAgICAwICgxKQorICAgICAgICAgICAgICA2IEJJTkFSWV9BREQKKyAgICAgICAgICAgICAgNyBTVE9SRV9OQU1FICAgICAgICAgICAgICAgMCAoeCkKKyAgICAgICAgICAgICAxMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoTm9uZSkKKyAgICAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKKyIiIgorCitjb21wb3VuZF9zdG10X3N0ciA9ICIiIlwKK3ggPSAwCit3aGlsZSAxOgorICAgIHggKz0gMSIiIgorIyBUcmFpbGluZyBuZXdsaW5lIGhhcyBiZWVuIGRlbGliZXJhdGVseSBvbWl0dGVkCisKK2Rpc19jb21wb3VuZF9zdG10X3N0ciA9ICIiIlwKKyAgMSAgICAgICAgICAgMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAgICAgMyBTVE9SRV9OQU1FICAgICAgICAgICAgICAgMCAoeCkKKworICAyICAgICAgICAgICA2IFNFVFVQX0xPT1AgICAgICAgICAgICAgIDEzICh0byAyMikKKworICAzICAgICA+PiAgICA5IExPQURfTkFNRSAgICAgICAgICAgICAgICAwICh4KQorICAgICAgICAgICAgIDEyIExPQURfQ09OU1QgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgICAgIDE1IElOUExBQ0VfQURECisgICAgICAgICAgICAgMTYgU1RPUkVfTkFNRSAgICAgICAgICAgICAgIDAgKHgpCisgICAgICAgICAgICAgMTkgSlVNUF9BQlNPTFVURSAgICAgICAgICAgIDkKKyAgICAgICAgPj4gICAyMiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoTm9uZSkKKyAgICAgICAgICAgICAyNSBSRVRVUk5fVkFMVUUKKyIiIgogCiBjbGFzcyBEaXNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIGRvX2Rpc2Fzc2VtYmx5X3Rlc3Qoc2VsZiwgZnVuYywgZXhwZWN0ZWQpOgpAQCAtMTE4LDggKzE1OCw4IEBACiAKICAgICBkZWYgdGVzdF9vcG1hcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BtYXBbIlNUT1BfQ09ERSJdLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiTE9BRF9DT05TVCJdIGluIGRpcy5oYXNjb25zdCwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BtYXBbIlNUT1JFX05BTUUiXSBpbiBkaXMuaGFzbmFtZSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihkaXMub3BtYXBbIkxPQURfQ09OU1QiXSwgZGlzLmhhc2NvbnN0KQorICAgICAgICBzZWxmLmFzc2VydEluKGRpcy5vcG1hcFsiU1RPUkVfTkFNRSJdLCBkaXMuaGFzbmFtZSkKIAogICAgIGRlZiB0ZXN0X29wbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMub3BuYW1lW2Rpcy5vcG1hcFsiTE9BRF9GQVNUIl1dLCAiTE9BRF9GQVNUIikKQEAgLTE2Niw4ICsyMDYsMTY1IEBACiAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgZGlzX21vZHVsZQogICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoZGlzX21vZHVsZSwgZGlzX21vZHVsZV9leHBlY3RlZF9yZXN1bHRzKQogCisgICAgZGVmIHRlc3RfZGlzYXNzZW1ibGVfc3RyKHNlbGYpOgorICAgICAgICBzZWxmLmRvX2Rpc2Fzc2VtYmx5X3Rlc3QoZXhwcl9zdHIsIGRpc19leHByX3N0cikKKyAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KHNpbXBsZV9zdG10X3N0ciwgZGlzX3NpbXBsZV9zdG10X3N0cikKKyAgICAgICAgc2VsZi5kb19kaXNhc3NlbWJseV90ZXN0KGNvbXBvdW5kX3N0bXRfc3RyLCBkaXNfY29tcG91bmRfc3RtdF9zdHIpCisKK2NvZGVfaW5mb19jb2RlX2luZm8gPSAiIiJcCitOYW1lOiAgICAgICAgICAgICAgY29kZV9pbmZvCitGaWxlbmFtZTogICAgICAgICAgKC4qKQorQXJndW1lbnQgY291bnQ6ICAgIDEKK0t3LW9ubHkgYXJndW1lbnRzOiAwCitOdW1iZXIgb2YgbG9jYWxzOiAgMQorU3RhY2sgc2l6ZTogICAgICAgIDQKK0ZsYWdzOiAgICAgICAgICAgICBPUFRJTUlaRUQsIE5FV0xPQ0FMUywgTk9GUkVFCitDb25zdGFudHM6CisgICAwOiAlcgorICAgMTogJ19fZnVuY19fJworICAgMjogJ19fY29kZV9fJworICAgMzogJzxjb2RlX2luZm8+JworICAgNDogJ2NvX2NvZGUnCisgICA1OiAiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJSVzIG9iamVjdHMiCislc05hbWVzOgorICAgMDogaGFzYXR0cgorICAgMTogX19mdW5jX18KKyAgIDI6IF9fY29kZV9fCisgICAzOiBpc2luc3RhbmNlCisgICA0OiBzdHIKKyAgIDU6IF90cnlfY29tcGlsZQorICAgNjogX2Zvcm1hdF9jb2RlX2luZm8KKyAgIDc6IFR5cGVFcnJvcgorICAgODogdHlwZQorICAgOTogX19uYW1lX18KK1ZhcmlhYmxlIG5hbWVzOgorICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCAnICAgNjogTm9uZVxuJykKKyAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCAnJykpCisKK0BzdGF0aWNtZXRob2QKK2RlZiB0cmlja3koeCwgeSwgej1UcnVlLCAqYXJncywgYywgZCwgZT1bXSwgKiprd2RzKToKKyAgICBkZWYgZihjPWMpOgorICAgICAgICBwcmludCh4LCB5LCB6LCBjLCBkLCBlLCBmKQorICAgIHlpZWxkIHgsIHksIHosIGMsIGQsIGUsIGYKKworY29kZV9pbmZvX3RyaWNreSA9ICIiIlwKK05hbWU6ICAgICAgICAgICAgICB0cmlja3kKK0ZpbGVuYW1lOiAgICAgICAgICAoLiopCitBcmd1bWVudCBjb3VudDogICAgMworS3ctb25seSBhcmd1bWVudHM6IDMKK051bWJlciBvZiBsb2NhbHM6ICA4CitTdGFjayBzaXplOiAgICAgICAgNworRmxhZ3M6ICAgICAgICAgICAgIE9QVElNSVpFRCwgTkVXTE9DQUxTLCBWQVJBUkdTLCBWQVJLRVlXT1JEUywgR0VORVJBVE9SCitDb25zdGFudHM6CisgICAwOiBOb25lCisgICAxOiA8Y29kZSBvYmplY3QgZiBhdCAoLiopLCBmaWxlICIoLiopIiwgbGluZSAoLiopPgorVmFyaWFibGUgbmFtZXM6CisgICAwOiB4CisgICAxOiB5CisgICAyOiB6CisgICAzOiBjCisgICA0OiBkCisgICA1OiBlCisgICA2OiBhcmdzCisgICA3OiBrd2RzCitDZWxsIHZhcmlhYmxlczoKKyAgIDA6IGUKKyAgIDE6IGQKKyAgIDI6IGYKKyAgIDM6IHkKKyAgIDQ6IHgKKyAgIDU6IHoiIiIKKworY29fdHJpY2t5X25lc3RlZF9mID0gdHJpY2t5Ll9fZnVuY19fLl9fY29kZV9fLmNvX2NvbnN0c1sxXQorCitjb2RlX2luZm9fdHJpY2t5X25lc3RlZF9mID0gIiIiXAorTmFtZTogICAgICAgICAgICAgIGYKK0ZpbGVuYW1lOiAgICAgICAgICAoLiopCitBcmd1bWVudCBjb3VudDogICAgMQorS3ctb25seSBhcmd1bWVudHM6IDAKK051bWJlciBvZiBsb2NhbHM6ICAxCitTdGFjayBzaXplOiAgICAgICAgOAorRmxhZ3M6ICAgICAgICAgICAgIE9QVElNSVpFRCwgTkVXTE9DQUxTLCBORVNURUQKK0NvbnN0YW50czoKKyAgIDA6IE5vbmUKK05hbWVzOgorICAgMDogcHJpbnQKK1ZhcmlhYmxlIG5hbWVzOgorICAgMDogYworRnJlZSB2YXJpYWJsZXM6CisgICAwOiBlCisgICAxOiBkCisgICAyOiBmCisgICAzOiB5CisgICA0OiB4CisgICA1OiB6IiIiCisKK2NvZGVfaW5mb19leHByX3N0ciA9ICIiIlwKK05hbWU6ICAgICAgICAgICAgICA8bW9kdWxlPgorRmlsZW5hbWU6ICAgICAgICAgIDxjb2RlX2luZm8+CitBcmd1bWVudCBjb3VudDogICAgMAorS3ctb25seSBhcmd1bWVudHM6IDAKK051bWJlciBvZiBsb2NhbHM6ICAwCitTdGFjayBzaXplOiAgICAgICAgMgorRmxhZ3M6ICAgICAgICAgICAgIE5PRlJFRQorQ29uc3RhbnRzOgorICAgMDogMQorTmFtZXM6CisgICAwOiB4IiIiCisKK2NvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIgPSAiIiJcCitOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KK0ZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorQXJndW1lbnQgY291bnQ6ICAgIDAKK0t3LW9ubHkgYXJndW1lbnRzOiAwCitOdW1iZXIgb2YgbG9jYWxzOiAgMAorU3RhY2sgc2l6ZTogICAgICAgIDIKK0ZsYWdzOiAgICAgICAgICAgICBOT0ZSRUUKK0NvbnN0YW50czoKKyAgIDA6IDEKKyAgIDE6IE5vbmUKK05hbWVzOgorICAgMDogeCIiIgorCitjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIgPSAiIiJcCitOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KK0ZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorQXJndW1lbnQgY291bnQ6ICAgIDAKK0t3LW9ubHkgYXJndW1lbnRzOiAwCitOdW1iZXIgb2YgbG9jYWxzOiAgMAorU3RhY2sgc2l6ZTogICAgICAgIDIKK0ZsYWdzOiAgICAgICAgICAgICBOT0ZSRUUKK0NvbnN0YW50czoKKyAgIDA6IDAKKyAgIDE6IDEKKyAgIDI6IE5vbmUKK05hbWVzOgorICAgMDogeCIiIgorCitjbGFzcyBDb2RlSW5mb1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB0ZXN0X3BhaXJzID0gWworICAgICAgKGRpcy5jb2RlX2luZm8sIGNvZGVfaW5mb19jb2RlX2luZm8pLAorICAgICAgKHRyaWNreSwgY29kZV9pbmZvX3RyaWNreSksCisgICAgICAoY29fdHJpY2t5X25lc3RlZF9mLCBjb2RlX2luZm9fdHJpY2t5X25lc3RlZF9mKSwKKyAgICAgIChleHByX3N0ciwgY29kZV9pbmZvX2V4cHJfc3RyKSwKKyAgICAgIChzaW1wbGVfc3RtdF9zdHIsIGNvZGVfaW5mb19zaW1wbGVfc3RtdF9zdHIpLAorICAgICAgKGNvbXBvdW5kX3N0bXRfc3RyLCBjb2RlX2luZm9fY29tcG91bmRfc3RtdF9zdHIpLAorICAgIF0KKworICAgIGRlZiB0ZXN0X2NvZGVfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gMTAwMAorICAgICAgICBmb3IgeCwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0X3BhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChkaXMuY29kZV9pbmZvKHgpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3Nob3dfY29kZShzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gMTAwMAorICAgICAgICBmb3IgeCwgZXhwZWN0ZWQgaW4gc2VsZi50ZXN0X3BhaXJzOgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgZGlzLnNob3dfY29kZSh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQrIlxuIikKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChEaXNUZXN0cykKKyAgICBydW5fdW5pdHRlc3QoRGlzVGVzdHMsIENvZGVJbmZvVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGlzdHV0aWxzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaXN0dXRpbHMucHkKaW5kZXggOTRlNTliYy4uZDYxM2FiZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaXN0dXRpbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaXN0dXRpbHMucHkKQEAgLTExLDYgKzExLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoZGlzdHV0aWxzLnRlc3RzLnRlc3Rfc3VpdGUoKSkKKyAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQppbmRleCBkZTg1NzU4Li4xMzgzNmJhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CkBAIC00LDcgKzQsOCBAQAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBkb2N0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBvcworCiAKICMgTk9URTogVGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCB0ZXN0cyByZWxhdGluZyB0byBpbnRlcmFjdGlvbiB3aXRoCiAjICAgICAgIHppcGltcG9ydCBpbiB0aGUgdGVzdF96aXBpbXBvcnRfc3VwcG9ydCB0ZXN0IG1vZHVsZS4KQEAgLTM3Miw3ICszNzMsNyBAQAogICAgID4+PiB0ZXN0cyA9IGZpbmRlci5maW5kKHNhbXBsZV9mdW5jKQogCiAgICAgPj4+IHByaW50KHRlc3RzKSAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICBbPERvY1Rlc3Qgc2FtcGxlX2Z1bmMgZnJvbSAuLi46MTYgKDEgZXhhbXBsZSk+XQorICAgIFs8RG9jVGVzdCBzYW1wbGVfZnVuYyBmcm9tIC4uLjoxNyAoMSBleGFtcGxlKT5dCiAKIFRoZSBleGFjdCBuYW1lIGRlcGVuZHMgb24gaG93IHRlc3RfZG9jdGVzdCB3YXMgaW52b2tlZCwgc28gYWxsb3cgZm9yCiBsZWFkaW5nIHBhdGggY29tcG9uZW50cy4KQEAgLTQ5OCw2ICs0OTksOCBAQAogd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBmb3IgaXQgb25jZToKIAogICAgID4+PiBmcm9tIHRlc3QgaW1wb3J0IGRvY3Rlc3RfYWxpYXNlcworICAgID4+PiBhc3NlcnQgZG9jdGVzdF9hbGlhc2VzLlR3b05hbWVzLmYKKyAgICA+Pj4gYXNzZXJ0IGRvY3Rlc3RfYWxpYXNlcy5Ud29OYW1lcy5nCiAgICAgPj4+IHRlc3RzID0gZXhjbF9lbXB0eV9maW5kZXIuZmluZChkb2N0ZXN0X2FsaWFzZXMpCiAgICAgPj4+IHByaW50KGxlbih0ZXN0cykpCiAgICAgMgpAQCAtODYyLDYgKzg2NSw3NyBAQAogICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQogCitJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBhbHNvIGlnbm9yZXMgZGlmZmVyZW5jZSBpbiBleGNlcHRpb24gZm9ybWF0dGluZworYmV0d2VlbiBQeXRob24gdmVyc2lvbnMuIEZvciBleGFtcGxlLCBpbiBQeXRob24gMi54LCB0aGUgbW9kdWxlIHBhdGggb2YKK3RoZSBleGNlcHRpb24gaXMgbm90IGluIHRoZSBvdXRwdXQsIGJ1dCB0aGlzIHdpbGwgZmFpbCB1bmRlciBQeXRob24gMzoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHAuY2xpZW50IGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpCisgICAgLi4uICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uICAgICBIVFRQRXhjZXB0aW9uOiBtZXNzYWdlCisgICAgLi4uICAgICAnJycKKyAgICA+Pj4gdGVzdCA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoZilbMF0KKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpLnJ1bih0ZXN0KQorICAgIC4uLiAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlIC4uLiwgbGluZSA0LCBpbiBmCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgIHJhaXNlIEhUVFBFeGNlcHRpb24oJ21lc3NhZ2UnKQorICAgIEV4cGVjdGVkOgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBHb3Q6CisgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgLi4uCisgICAgICAgIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MSwgYXR0ZW1wdGVkPTIpCisKK0J1dCBpbiBQeXRob24gMyB0aGUgbW9kdWxlIHBhdGggaXMgaW5jbHVkZWQsIGFuZCB0aGVyZWZvcmUgYSB0ZXN0IG11c3QgbG9vaworbGlrZSB0aGUgZm9sbG93aW5nIHRlc3QgdG8gc3VjY2VlZCBpbiBQeXRob24gMy4gQnV0IHRoYXQgdGVzdCB3aWxsIGZhaWwgdW5kZXIKK1B5dGhvbiAyLgorCisgICAgPj4+IGRlZiBmKHgpOgorICAgIC4uLiAgICAgcicnJworICAgIC4uLiAgICAgPj4+IGZyb20gaHR0cC5jbGllbnQgaW1wb3J0IEhUVFBFeGNlcHRpb24KKyAgICAuLi4gICAgID4+PiByYWlzZSBIVFRQRXhjZXB0aW9uKCdtZXNzYWdlJykKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIGh0dHAuY2xpZW50LkhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitIb3dldmVyLCB3aXRoIElHTk9SRV9FWENFUFRJT05fREVUQUlMLCB0aGUgbW9kdWxlIG5hbWUgb2YgdGhlIGV4Y2VwdGlvbgorKG9yIGl0cyB1bmV4cGVjdGVkIGFic2VuY2UpIHdpbGwgYmUgaWdub3JlZDoKKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHAuY2xpZW50IGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIEhUVFBFeGNlcHRpb246IG1lc3NhZ2UKKyAgICAuLi4gICAgICcnJworICAgID4+PiB0ZXN0ID0gZG9jdGVzdC5Eb2NUZXN0RmluZGVyKCkuZmluZChmKVswXQorICAgID4+PiBkb2N0ZXN0LkRvY1Rlc3RSdW5uZXIodmVyYm9zZT1GYWxzZSkucnVuKHRlc3QpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0yKQorCitUaGUgbW9kdWxlIHBhdGggd2lsbCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQsIHNvIHR3byBkaWZmZXJlbnQgbW9kdWxlIHBhdGhzIHdpbGwKK3N0aWxsIHBhc3MgaWYgSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwgaXMgZ2l2ZW4uIFRoaXMgaXMgaW50ZW50aW9uYWwsIHNvIGl0IGNhbgorYmUgdXNlZCB3aGVuIGV4Y2VwdGlvbnMgaGF2ZSBjaGFuZ2VkIG1vZHVsZS4KKworICAgID4+PiBkZWYgZih4KToKKyAgICAuLi4gICAgIHInJycKKyAgICAuLi4gICAgID4+PiBmcm9tIGh0dHAuY2xpZW50IGltcG9ydCBIVFRQRXhjZXB0aW9uCisgICAgLi4uICAgICA+Pj4gcmFpc2UgSFRUUEV4Y2VwdGlvbignbWVzc2FnZScpICNkb2N0ZXN0OiArSUdOT1JFX0VYQ0VQVElPTl9ERVRBSUwKKyAgICAuLi4gICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4gICAgIGZvby5iYXIuSFRUUEV4Y2VwdGlvbjogbWVzc2FnZQorICAgIC4uLiAgICAgJycnCisgICAgPj4+IHRlc3QgPSBkb2N0ZXN0LkRvY1Rlc3RGaW5kZXIoKS5maW5kKGYpWzBdCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKS5ydW4odGVzdCkKKyAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCisKIEJ1dCBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBkb2VzIG5vdCBhbGxvdyBhIG1pc21hdGNoIGluIHRoZSBleGNlcHRpb24gdHlwZToKIAogICAgID4+PiBkZWYgZih4KToKQEAgLTE2MjQsMTAgKzE2OTgsMTMgQEAKIAogICAgICAgPj4+IGRvYyA9ICcnJwogICAgICAgLi4uID4+PiB4ID0gNDIKKyAgICAgIC4uLiA+Pj4gcmFpc2UgRXhjZXB0aW9uKCdjbMOpJykKKyAgICAgIC4uLiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4gRXhjZXB0aW9uOiBjbMOpCiAgICAgICAuLi4gPj4+IGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKQogICAgICAgLi4uICcnJwogICAgICAgPj4+IHBhcnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCi0gICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIHt9LCAiZm9vIiwgImZvby5weSIsIDApCisgICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIHt9LCAiZm9vLWJhckBiYXoiLCAiZm9vLWJhckBiYXoucHkiLCAwKQogICAgICAgPj4+IHJ1bm5lciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKQogCiAgICAgVG8gZGVtb25zdHJhdGUgdGhpcywgd2UnbGwgY3JlYXRlIGEgZmFrZSBzdGFuZGFyZCBpbnB1dCB0aGF0CkBAIC0xNjQzLDEyICsxNzIwLDEyIEBACiAgICAgICA+Pj4gdHJ5OiBydW5uZXIucnVuKHRlc3QpCiAgICAgICAuLi4gZmluYWxseTogc3lzLnN0ZGluID0gcmVhbF9zdGRpbgogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgICAgPiA8ZG9jdGVzdCBmb28tYmFyQGJhelsyXT4oMSk8bW9kdWxlPigpLT5Ob25lCiAgICAgICAtPiBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgIChQZGIpIHByaW50KHgpCiAgICAgICA0MgogICAgICAgKFBkYikgY29udGludWUKLSAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MikKKyAgICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MykKIAogICAgICAgWW91IGNhbiBhbHNvIHB1dCBwZGIuc2V0X3RyYWNlIGluIGEgZnVuY3Rpb24gY2FsbGVkIGZyb20gYSB0ZXN0OgogCkBAIC0xNjYwLDcgKzE3MzcsNyBAQAogICAgICAgLi4uID4+PiB4PTEKICAgICAgIC4uLiA+Pj4gY2FsbHNfc2V0X3RyYWNlKCkKICAgICAgIC4uLiAnJycKLSAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vIiwgImZvby5weSIsIDApCisgICAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIGdsb2JhbHMoKSwgImZvby1iYXJAYmF6IiwgImZvby1iYXJAYmF6LnB5IiwgMCkKICAgICAgID4+PiByZWFsX3N0ZGluID0gc3lzLnN0ZGluCiAgICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCiAgICAgICAuLi4gICAgJ3ByaW50KHkpJywgICMgcHJpbnQgZGF0YSBkZWZpbmVkIGluIHRoZSBmdW5jdGlvbgpAQCAtMTY3OSw3ICsxNzU2LDcgQEAKICAgICAgIChQZGIpIHByaW50KHkpCiAgICAgICAyCiAgICAgICAoUGRiKSB1cAotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDEpPG1vZHVsZT4oKQorICAgICAgPiA8ZG9jdGVzdCBmb28tYmFyQGJhelsxXT4oMSk8bW9kdWxlPigpCiAgICAgICAtPiBjYWxsc19zZXRfdHJhY2UoKQogICAgICAgKFBkYikgcHJpbnQoeCkKICAgICAgIDEKQEAgLTE2OTcsNyArMTc3NCw3IEBACiAgICAgICAuLi4gLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKCkKICAgICAgIC4uLiA+Pj4gZigzKQogICAgICAgLi4uICcnJwotICAgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28iLCAiZm9vLnB5IiwgMCkKKyAgICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vLWJhckBiYXoiLCAiZm9vLWJhckBiYXoucHkiLCAwKQogICAgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KICAgICAgID4+PiBzeXMuc3RkaW4gPSBfRmFrZUlucHV0KFsKICAgICAgIC4uLiAgICAnbGlzdCcsICAgICAjIGxpc3Qgc291cmNlIGZyb20gZXhhbXBsZSAyCkBAIC0xNzExLDcgKzE3ODgsNyBAQAogICAgICAgLi4uIGZpbmFsbHk6IHN5cy5zdGRpbiA9IHJlYWxfc3RkaW4KICAgICAgIC4uLiAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMV0+KDMpZygpLT5Ob25lCisgICAgICA+IDxkb2N0ZXN0IGZvby1iYXJAYmF6WzFdPigzKWcoKS0+Tm9uZQogICAgICAgLT4gaW1wb3J0IHBkYjsgcGRiLnNldF90cmFjZSgpCiAgICAgICAoUGRiKSBsaXN0CiAgICAgICAgIDEgICAgIGRlZiBnKHgpOgpAQCAtMTcyMCw3ICsxNzk3LDcgQEAKICAgICAgIFtFT0ZdCiAgICAgICAoUGRiKSBuZXh0CiAgICAgICAtLVJldHVybi0tCi0gICAgICA+IDxkb2N0ZXN0IGZvb1swXT4oMilmKCktPk5vbmUKKyAgICAgID4gPGRvY3Rlc3QgZm9vLWJhckBiYXpbMF0+KDIpZigpLT5Ob25lCiAgICAgICAtPiBnKHgqMikKICAgICAgIChQZGIpIGxpc3QKICAgICAgICAgMSAgICAgZGVmIGYoeCk6CkBAIC0xNzI4LDE0ICsxODA1LDE0IEBACiAgICAgICBbRU9GXQogICAgICAgKFBkYikgbmV4dAogICAgICAgLS1SZXR1cm4tLQotICAgICAgPiA8ZG9jdGVzdCBmb29bMl0+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgICAgPiA8ZG9jdGVzdCBmb28tYmFyQGJhelsyXT4oMSk8bW9kdWxlPigpLT5Ob25lCiAgICAgICAtPiBmKDMpCiAgICAgICAoUGRiKSBsaXN0CiAgICAgICAgIDEgIC0+IGYoMykKICAgICAgIFtFT0ZdCiAgICAgICAoUGRiKSBjb250aW51ZQogICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgRmlsZSAiZm9vLnB5IiwgbGluZSA3LCBpbiBmb28KKyAgICAgIEZpbGUgImZvby1iYXJAYmF6LnB5IiwgbGluZSA3LCBpbiBmb28tYmFyQGJhegogICAgICAgRmFpbGVkIGV4YW1wbGU6CiAgICAgICAgICAgZigzKQogICAgICAgRXhwZWN0ZWQgbm90aGluZwpAQCAtMTc2OSw3ICsxODQ2LDcgQEAKICAgICAuLi4gJycnCiAgICAgPj4+IHBhcnNlciA9IGRvY3Rlc3QuRG9jVGVzdFBhcnNlcigpCiAgICAgPj4+IHJ1bm5lciA9IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlKQotICAgID4+PiB0ZXN0ID0gcGFyc2VyLmdldF9kb2N0ZXN0KGRvYywgZ2xvYmFscygpLCAiZm9vIiwgImZvby5weSIsIDApCisgICAgPj4+IHRlc3QgPSBwYXJzZXIuZ2V0X2RvY3Rlc3QoZG9jLCBnbG9iYWxzKCksICJmb28tYmFyQGJheiIsICJmb28tYmFyQGJhei5weSIsIDApCiAgICAgPj4+IHJlYWxfc3RkaW4gPSBzeXMuc3RkaW4KICAgICA+Pj4gc3lzLnN0ZGluID0gX0Zha2VJbnB1dChbCiAgICAgLi4uICAgICdwcmludCh5KScsICAjIHByaW50IGRhdGEgZGVmaW5lZCBpbiB0aGUgZnVuY3Rpb24KQEAgLTE4MjIsMTAgKzE4OTksMTAgQEAKICAgICAoUGRiKSBwcmludCh5KQogICAgIDEKICAgICAoUGRiKSB1cAotICAgID4gPGRvY3Rlc3QgZm9vWzFdPigxKTxtb2R1bGU+KCkKKyAgICA+IDxkb2N0ZXN0IGZvby1iYXJAYmF6WzFdPigxKTxtb2R1bGU+KCkKICAgICAtPiBjYWxsc19zZXRfdHJhY2UoKQogICAgIChQZGIpIHByaW50KGZvbykKLSAgICAqKiogTmFtZUVycm9yOiBOYW1lRXJyb3IoIm5hbWUgJ2ZvbycgaXMgbm90IGRlZmluZWQiLCkKKyAgICAqKiogTmFtZUVycm9yOiBuYW1lICdmb28nIGlzIG5vdCBkZWZpbmVkCiAgICAgKFBkYikgY29udGludWUKICAgICBUZXN0UmVzdWx0cyhmYWlsZWQ9MCwgYXR0ZW1wdGVkPTIpCiAiIiIKQEAgLTE4NDAsMTkgKzE5MTcsMTkgQEAKICAgICAgICAgID4+PiBpbXBvcnQgdGVzdC5zYW1wbGVfZG9jdGVzdAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUodGVzdC5zYW1wbGVfZG9jdGVzdCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgogCiAgICAgICAgV2UgY2FuIGFsc28gc3VwcGx5IHRoZSBtb2R1bGUgYnkgbmFtZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTQ+CiAKICAgICAgICBXZSBjYW4gdXNlIHRoZSBjdXJyZW50IG1vZHVsZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gdGVzdC5zYW1wbGVfZG9jdGVzdC50ZXN0X3N1aXRlKCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9ND4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz00PgogCiAgICAgICAgV2UgY2FuIHN1cHBseSBnbG9iYWwgdmFyaWFibGVzLiAgSWYgd2UgcGFzcyBnbG9icywgdGhleSB3aWxsIGJlCiAgICAgICAgdXNlZCBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUgZ2xvYmFscy4gIEhlcmUgd2UnbGwgcGFzcyBhbiBlbXB0eQpAQCAtMTg2MCw3ICsxOTM3LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NUZXN0U3VpdGUoJ3Rlc3Quc2FtcGxlX2RvY3Rlc3QnLCBnbG9icz17fSkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgogCiAgICAgICAgQWx0ZXJuYXRpdmVseSwgd2UgY2FuIHByb3ZpZGUgZXh0cmEgZ2xvYmFscy4gIEhlcmUgd2UnbGwgbWFrZSBhbgogICAgICAgIGVycm9yIGdvIGF3YXkgYnkgcHJvdmlkaW5nIGFuIGV4dHJhIGdsb2JhbCB2YXJpYWJsZToKQEAgLTE4NjgsNyArMTk0NSw3IEBACiAgICAgICAgICA+Pj4gc3VpdGUgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgndGVzdC5zYW1wbGVfZG9jdGVzdCcsCiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWdsb2JzPXsneSc6IDF9KQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CiAKICAgICAgICBZb3UgY2FuIHBhc3Mgb3B0aW9uIGZsYWdzLiAgSGVyZSB3ZSdsbCBjYXVzZSBhbiBleHRyYSBlcnJvcgogICAgICAgIGJ5IGRpc2FibGluZyB0aGUgYmxhbmstbGluZSBmZWF0dXJlOgpAQCAtMTg3Niw3ICsxOTUzLDcgQEAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25mbGFncz1kb2N0ZXN0LkRPTlRfQUNDRVBUX0JMQU5LTElORSkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9NT4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz01PgogCiAgICAgICAgWW91IGNhbiBzdXBwbHkgc2V0VXAgYW5kIHRlYXJEb3duIGZ1bmN0aW9uczoKIApAQCAtMTg5Myw3ICsxOTcwLDcgQEAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0JywKICAgICAgICAgIC4uLiAgICAgIHNldFVwPXNldFVwLCB0ZWFyRG93bj10ZWFyRG93bikKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49OSBlcnJvcnM9MCBmYWlsdXJlcz0zPgogCiAgICAgICAgQnV0IHRoZSB0ZWFyRG93biByZXN0b3JlcyBzYW5pdHk6CiAKQEAgLTE5MTEsNyArMTk4OCw3IEBACiAKICAgICAgICAgID4+PiBzdWl0ZSA9IGRvY3Rlc3QuRG9jVGVzdFN1aXRlKCd0ZXN0LnNhbXBsZV9kb2N0ZXN0Jywgc2V0VXA9c2V0VXApCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj05IGVycm9ycz0wIGZhaWx1cmVzPTM+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTkgZXJyb3JzPTAgZmFpbHVyZXM9Mz4KIAogICAgICAgIEhlcmUsIHdlIGRpZG4ndCBuZWVkIHRvIHVzZSBhIHRlYXJEb3duIGZ1bmN0aW9uIGJlY2F1c2Ugd2UKICAgICAgICBtb2RpZmllZCB0aGUgdGVzdCBnbG9iYWxzLCB3aGljaCBhcmUgYSBjb3B5IG9mIHRoZQpAQCAtMTkzMCw3ICsyMDA3LDcgQEAKICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2RvY3Rlc3QyLnR4dCcsCiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CiAKICAgICAgICBUaGUgdGVzdCBmaWxlcyBhcmUgbG9va2VkIGZvciBpbiB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCiAgICAgICAgY2FsbGluZyBtb2R1bGUuICBBIHBhY2thZ2Uga2V5d29yZCBhcmd1bWVudCBjYW4gYmUgcHJvdmlkZWQgdG8KQEAgLTE5NDIsNyArMjAxOSw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZT0ndGVzdCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KIAogICAgICAgIFN1cHBvcnQgZm9yIHVzaW5nIGEgcGFja2FnZSdzIF9fbG9hZGVyX18uZ2V0X2RhdGEoKSBpcyBhbHNvCiAgICAgICAgcHJvdmlkZWQuCkBAIC0xOTYxLDE0ICsyMDM4LDE0IEBACiAgICAgICAgICAuLi4gZmluYWxseToKICAgICAgICAgIC4uLiAgICAgaWYgYWRkZWRfbG9hZGVyOgogICAgICAgICAgLi4uICAgICAgICAgZGVsIHRlc3QuX19sb2FkZXJfXwotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgogCiAgICAgICAgJy8nIHNob3VsZCBiZSB1c2VkIGFzIGEgcGF0aCBzZXBhcmF0b3IuICBJdCB3aWxsIGJlIGNvbnZlcnRlZAogICAgICAgIHRvIGEgbmF0aXZlIHNlcGFyYXRvciBhdCBydW4gdGltZToKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJy4uL3Rlc3QvdGVzdF9kb2N0ZXN0LnR4dCcpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MT4KIAogICAgICAgIElmIERvY0ZpbGVTdWl0ZSBpcyB1c2VkIGZyb20gYW4gaW50ZXJhY3RpdmUgc2Vzc2lvbiwgdGhlbiBmaWxlcwogICAgICAgIGFyZSByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IG9mIHN5cy5hcmd2WzBdOgpAQCAtMTk5Myw3ICsyMDcwLDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUodGVzdF9maWxlLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0xIGVycm9ycz0wIGZhaWx1cmVzPTE+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MT4KIAogICAgICAgIEl0IGlzIGFuIGVycm9yIHRvIHNwZWNpZnkgYHBhY2thZ2VgIHdoZW4gYG1vZHVsZV9yZWxhdGl2ZT1GYWxzZWA6CiAKQEAgLTIwMDksNyArMjA4Niw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnM9eydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTE+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9MT4KIAogICAgICAgIEluIHRoaXMgY2FzZSwgd2Ugc3VwcGxpZWQgYSBtaXNzaW5nIGZhdm9yaXRlIGNvbG9yLiBZb3UgY2FuCiAgICAgICAgcHJvdmlkZSBkb2N0ZXN0IG9wdGlvbnM6CkBAIC0yMDIwLDcgKzIwOTcsNyBAQAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWRvY3Rlc3QuRE9OVF9BQ0NFUFRfQkxBTktMSU5FLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnM9eydmYXZvcml0ZV9jb2xvcic6ICdibHVlJ30pCiAgICAgICAgICA+Pj4gc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKLSAgICAgICAgIDx1bml0dGVzdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTI+CisgICAgICAgICA8dW5pdHRlc3QucmVzdWx0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KIAogICAgICAgIEFuZCwgeW91IGNhbiBwcm92aWRlIHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnM6CiAKQEAgLTIwMzksNyArMjExNiw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VXA9c2V0VXAsIHRlYXJEb3duPXRlYXJEb3duKQogICAgICAgICAgPj4+IHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCi0gICAgICAgICA8dW5pdHRlc3QuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0xPgorICAgICAgICAgPHVuaXR0ZXN0LnJlc3VsdC5UZXN0UmVzdWx0IHJ1bj0zIGVycm9ycz0wIGZhaWx1cmVzPTE+CiAKICAgICAgICBCdXQgdGhlIHRlYXJEb3duIHJlc3RvcmVzIHNhbml0eToKIApAQCAtMjA1OCw3ICsyMTM1LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdC50eHQnLCBzZXRVcD1zZXRVcCkKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0wPgogCiAgICAgICAgSGVyZSwgd2UgZGlkbid0IG5lZWQgdG8gdXNlIGEgdGVhckRvd24gZnVuY3Rpb24gYmVjYXVzZSB3ZQogICAgICAgIG1vZGlmaWVkIHRoZSB0ZXN0IGdsb2JhbHMuICBUaGUgdGVzdCBnbG9iYWxzIGFyZQpAQCAtMjA3MCw3ICsyMTQ3LDcgQEAKIAogICAgICAgICAgPj4+IHN1aXRlID0gZG9jdGVzdC5Eb2NGaWxlU3VpdGUoJ3Rlc3RfZG9jdGVzdDMudHh0JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTEgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MSBlcnJvcnM9MCBmYWlsdXJlcz0wPgogCiAgICAgICAgSWYgdGhlIHRlc3RzIGNvbnRhaW4gbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIHdlIGhhdmUgdG8gc3BlY2lmeSB3aGljaAogICAgICAgIGVuY29kaW5nIHRoZSBmaWxlIGlzIGVuY29kZWQgd2l0aC4gV2UgZG8gc28gYnkgdXNpbmcgdGhlIGBlbmNvZGluZ2AKQEAgLTIwODEsNyArMjE1OCw3IEBACiAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF9kb2N0ZXN0NC50eHQnLAogICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9J3V0Zi04JykKICAgICAgICAgID4+PiBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQotICAgICAgICAgPHVuaXR0ZXN0LlRlc3RSZXN1bHQgcnVuPTMgZXJyb3JzPTAgZmFpbHVyZXM9Mj4KKyAgICAgICAgIDx1bml0dGVzdC5yZXN1bHQuVGVzdFJlc3VsdCBydW49MyBlcnJvcnM9MCBmYWlsdXJlcz0yPgogCiAgICAgICAgIiIiCiAKQEAgLTIzNTcsNiArMjQzNCwzOSBAQAogICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MCkKICIiIgogCit0cnk6CisgICAgb3MuZnNlbmNvZGUoImZvby1iw6RyQGJhei5weSIpCitleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICMgU2tpcCB0aGUgdGVzdDogdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgaXMgdW5hYmxlIHRvIGVuY29kZSB0aGUgZmlsZW5hbWUKKyAgICBwYXNzCitlbHNlOgorICAgIGRlZiB0ZXN0X3VuaWNvZGUoKTogIiIiCitDaGVjayBkb2N0ZXN0IHdpdGggYSBub24tYXNjaWkgZmlsZW5hbWU6CisKKyAgICA+Pj4gZG9jID0gJycnCisgICAgLi4uID4+PiByYWlzZSBFeGNlcHRpb24oJ2Nsw6knKQorICAgIC4uLiAnJycKKyAgICAuLi4KKyAgICA+Pj4gcGFyc2VyID0gZG9jdGVzdC5Eb2NUZXN0UGFyc2VyKCkKKyAgICA+Pj4gdGVzdCA9IHBhcnNlci5nZXRfZG9jdGVzdChkb2MsIHt9LCAiZm9vLWLDpHJAYmF6IiwgImZvby1iw6RyQGJhei5weSIsIDApCisgICAgPj4+IHRlc3QKKyAgICA8RG9jVGVzdCBmb28tYsOkckBiYXogZnJvbSBmb28tYsOkckBiYXoucHk6MCAoMSBleGFtcGxlKT4KKyAgICA+Pj4gcnVubmVyID0gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UpCisgICAgPj4+IHJ1bm5lci5ydW4odGVzdCkgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiZm9vLWLDpHJAYmF6LnB5IiwgbGluZSAyLCBpbiBmb28tYsOkckBiYXoKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdjbMOpJykKKyAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgICAgRmlsZSAuLi4KKyAgICAgICAgICAgIGNvbXBpbGVmbGFncywgMSksIHRlc3QuZ2xvYnMpCisgICAgICAgICAgRmlsZSAiPGRvY3Rlc3QgZm9vLWLDpHJAYmF6WzBdPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignY2zDqScpCisgICAgICAgIEV4Y2VwdGlvbjogY2zDqQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKKyAgICAiIiIKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTWFpbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMjM2OCw4ICsyNDc4LDEwIEBACiAgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2RvY3Rlc3QKICAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfZG9jdGVzdCwgdmVyYm9zaXR5PVRydWUpCiAKLWltcG9ydCB0cmFjZSwgc3lzLCByZSwgaW8KK2ltcG9ydCBzeXMsIHJlLCBpbworCiBkZWYgdGVzdF9jb3ZlcmFnZShjb3ZlcmRpcik6CisgICAgdHJhY2UgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RyYWNlJykKICAgICB0cmFjZXIgPSB0cmFjZS5UcmFjZShpZ25vcmVkaXJzPVtzeXMucHJlZml4LCBzeXMuZXhlY19wcmVmaXgsXSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZT0wLCBjb3VudD0xKQogICAgIHRyYWNlci5ydW4oJ3Rlc3RfbWFpbigpJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QyLnB5CmluZGV4IDg2MzM0ZDcuLjM0N2ExNDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdDIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0Mi5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiAiIiJBIG1vZHVsZSB0byB0ZXN0IHdoZXRoZXIgZG9jdGVzdCByZWNvZ25pemVzIHNvbWUgMi4yIGZlYXR1cmVzLAogbGlrZSBzdGF0aWMgYW5kIGNsYXNzIG1ldGhvZHMuCiAKQEAgLTEyLDcgKzExLDExIEBACiAKICIiIgogCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraWYgc3lzLmZsYWdzLm9wdGltaXplID49IDI6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCB0ZXN0IGRvY3N0cmluZ3Mgd2l0aCAtTzIiKQogCiBjbGFzcyBDKG9iamVjdCk6CiAgICAgIiIiQ2xhc3MgQy4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZG9jeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkKaW5kZXggN2JmZmE0OC4uNjBhNjlkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkKQEAgLTEsMTIgKzEsMjggQEAKIGZyb20geG1scnBjLnNlcnZlciBpbXBvcnQgRG9jWE1MUlBDU2VydmVyCiBpbXBvcnQgaHR0cC5jbGllbnQKK2ltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotaW1wb3J0IHRocmVhZGluZwordGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogaW1wb3J0IHRpbWUKK2ltcG9ydCBzb2NrZXQKIGltcG9ydCB1bml0dGVzdAogCiBQT1JUID0gTm9uZQogCitkZWYgbWFrZV9yZXF1ZXN0X2FuZF9za2lwSWYoY29uZGl0aW9uLCByZWFzb24pOgorICAgICMgSWYgd2Ugc2tpcCB0aGUgdGVzdCwgd2UgaGF2ZSB0byBtYWtlIGEgcmVxdWVzdCBiZWNhdXNlIHRoZQorICAgICMgdGhlIHNlcnZlciBjcmVhdGVkIGluIHNldFVwIGJsb2NrcyBleHBlY3Rpbmcgb25lIHRvIGNvbWUgaW4uCisgICAgaWYgbm90IGNvbmRpdGlvbjoKKyAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCisgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnJlcXVlc3QoIkdFVCIsICIvIikKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHJlYXNvbikKKyAgICAgICAgcmV0dXJuIG1ha2VfcmVxdWVzdF9hbmRfc2tpcAorICAgIHJldHVybiBkZWNvcmF0b3IKKworCiBkZWYgc2VydmVyKGV2dCwgbnVtcmVxdWVzdHMpOgogICAgIHNlcnYgPSBEb2NYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwgbG9nUmVxdWVzdHM9RmFsc2UpCiAKQEAgLTE4LDggKzM0LDggQEAKICAgICAgICAgc2Vydi5zZXRfc2VydmVyX3RpdGxlKCJEb2NYTUxSUENTZXJ2ZXIgVGVzdCBEb2N1bWVudGF0aW9uIikKICAgICAgICAgc2Vydi5zZXRfc2VydmVyX25hbWUoIkRvY1hNTFJQQ1NlcnZlciBUZXN0IERvY3MiKQogICAgICAgICBzZXJ2LnNldF9zZXJ2ZXJfZG9jdW1lbnRhdGlvbigKLSIiIlRoaXMgaXMgYW4gWE1MLVJQQyBzZXJ2ZXIncyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHNlcnZlciBjYW4gYmUgdXNlZCBieQotUE9TVGluZyB0byAvUlBDMi4gVHJ5IHNlbGYuYWRkLCB0b28uIiIiKQorICAgICAgICAgICAgIlRoaXMgaXMgYW4gWE1MLVJQQyBzZXJ2ZXIncyBkb2N1bWVudGF0aW9uLCBidXQgdGhlIHNlcnZlciAiCisgICAgICAgICAgICAiY2FuIGJlIHVzZWQgYnkgUE9TVGluZyB0byAvUlBDMi4gVHJ5IHNlbGYuYWRkLCB0b28uIikKIAogICAgICAgICAjIENyZWF0ZSBhbmQgcmVnaXN0ZXIgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCiAgICAgICAgIGNsYXNzIFRlc3RDbGFzcyhvYmplY3QpOgpAQCAtNTMsNiArNjksNyBAQAogCiBjbGFzcyBEb2NYTUxSUENIVFRQR0VUU2VydmVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgICAgICMgRW5hYmxlIHNlcnZlciBmZWVkYmFjawogICAgICAgICBEb2NYTUxSUENTZXJ2ZXIuX3NlbmRfdHJhY2ViYWNrX2hlYWRlciA9IFRydWUKIApAQCAtNzQsNiArOTEsNyBAQAogCiAgICAgICAgICMgRGlzYWJsZSBzZXJ2ZXIgZmVlZGJhY2sKICAgICAgICAgRG9jWE1MUlBDU2VydmVyLl9zZW5kX3RyYWNlYmFja19oZWFkZXIgPSBGYWxzZQorICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIHRlc3RfdmFsaWRfZ2V0X3Jlc3BvbnNlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCkBAIC0xMDQsMzUgKzEyMiw2NSBAQAogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKLWIiIiI8ZGw+PGR0PjxhIG5hbWU9Ii0mbHQ7bGFtYmRhJmd0OyI+PHN0cm9uZz4mbHQ7bGFtYmRhJmd0Ozwvc3Ryb25nPjwvYT4oeCwgeSk8L2R0PjwvZGw+IiIiCi0gICAgICAgICAgICBpbiByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGInPGRsPjxkdD48YSBuYW1lPSItJmx0O2xhbWJkYSZndDsiPjxzdHJvbmc+JworICAgICAgICAgICAgICAgICAgICAgICBiJyZsdDtsYW1iZGEmZ3Q7PC9zdHJvbmc+PC9hPih4LCB5KTwvZHQ+PC9kbD4nKSwKKyAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCiAKKyAgICBAbWFrZV9yZXF1ZXN0X2FuZF9za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X2F1dG9saW5raW5nKHNlbGYpOgotICAgICAgICAiIiJUZXN0IHRoYXQgdGhlIHNlcnZlciBjb3JyZWN0bHkgYXV0b21hdGljYWxseSB3cmFwcyByZWZlcmVuY2VzIHRvIFBFUFMKLSAgICAgICAgYW5kIFJGQ3Mgd2l0aCBsaW5rcywgYW5kIHRoYXQgaXQgbGlua2lmaWVzIHRleHQgc3RhcnRpbmcgd2l0aCBodHRwIG9yCi0gICAgICAgIGZ0cCBwcm90b2NvbCBwcmVmaXhlcy4KKyAgICAgICAgIiIiVGVzdCB0aGF0IHRoZSBzZXJ2ZXIgY29ycmVjdGx5IGF1dG9tYXRpY2FsbHkgd3JhcHMgcmVmZXJlbmNlcyB0bworICAgICAgICBQRVBTIGFuZCBSRkNzIHdpdGggbGlua3MsIGFuZCB0aGF0IGl0IGxpbmtpZmllcyB0ZXh0IHN0YXJ0aW5nIHdpdGgKKyAgICAgICAgaHR0cCBvciBmdHAgcHJvdG9jb2wgcHJlZml4ZXMuCiAKICAgICAgICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSAiYWRkIiBtZXRob2QgY29udGFpbnMgdGhlIHRlc3QgbWF0ZXJpYWwuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKS5yZWFkKCkKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoICMgVGhpcyBpcyB1Z2x5IC4uLiBob3cgY2FuIGl0IGJlIG1hZGUgYmV0dGVyPwotYiIiIjxkbD48ZHQ+PGEgbmFtZT0iLWFkZCI+PHN0cm9uZz5hZGQ8L3N0cm9uZz48L2E+KHgsIHkpPC9kdD48ZGQ+PHR0PkFkZCZuYnNwO3R3byZuYnNwO2luc3RhbmNlcyZuYnNwO3RvZ2V0aGVyLiZuYnNwO1RoaXMmbmJzcDtmb2xsb3dzJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMDA4LyI+UEVQMDA4PC9hPiwmbmJzcDtidXQmbmJzcDtoYXMmbmJzcDtub3RoaW5nPGJyPlxudG8mbmJzcDtkbyZuYnNwO3dpdGgmbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmMxOTUyLnR4dCI+UkZDMTk1MjwvYT4uJm5ic3A7Q2FzZSZuYnNwO3Nob3VsZCZuYnNwO21hdHRlcjombmJzcDtwRXAwMDgmbmJzcDthbmQmbmJzcDtyRkMxOTUyLiZuYnNwOyZuYnNwO1RoaW5nczxicj5cbnRoYXQmbmJzcDtzdGFydCZuYnNwO3dpdGgmbmJzcDtodHRwJm5ic3A7YW5kJm5ic3A7ZnRwJm5ic3A7c2hvdWxkJm5ic3A7YmUmbmJzcDthdXRvLWxpbmtlZCwmbmJzcDt0b286PGJyPlxuPGEgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20iPmh0dHA6Ly9nb29nbGUuY29tPC9hPi48L3R0PjwvZGQ+PC9kbD4iIiIKLSAgICAgICAgICBpbiByZXNwb25zZSwgcmVzcG9uc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oCisgICAgICAgICAgICAoYic8ZGw+PGR0PjxhIG5hbWU9Ii1hZGQiPjxzdHJvbmc+YWRkPC9zdHJvbmc+PC9hPih4LCB5KTwvZHQ+PGRkPicKKyAgICAgICAgICAgICBiJzx0dD5BZGQmbmJzcDt0d28mbmJzcDtpbnN0YW5jZXMmbmJzcDt0b2dldGhlci4mbmJzcDtUaGlzJm5ic3A7JworICAgICAgICAgICAgIGInZm9sbG93cyZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDAwOC8iPicKKyAgICAgICAgICAgICBiJ1BFUDAwODwvYT4sJm5ic3A7YnV0Jm5ic3A7aGFzJm5ic3A7bm90aGluZzxicj5cbnRvJm5ic3A7ZG8mbmJzcDsnCisgICAgICAgICAgICAgYid3aXRoJm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTk1Mi50eHQiPicKKyAgICAgICAgICAgICBiJ1JGQzE5NTI8L2E+LiZuYnNwO0Nhc2UmbmJzcDtzaG91bGQmbmJzcDttYXR0ZXI6Jm5ic3A7cEVwMDA4Jm5ic3A7JworICAgICAgICAgICAgIGInYW5kJm5ic3A7ckZDMTk1Mi4mbmJzcDsmbmJzcDtUaGluZ3M8YnI+XG50aGF0Jm5ic3A7c3RhcnQmbmJzcDsnCisgICAgICAgICAgICAgYid3aXRoJm5ic3A7aHR0cCZuYnNwO2FuZCZuYnNwO2Z0cCZuYnNwO3Nob3VsZCZuYnNwO2JlJm5ic3A7JworICAgICAgICAgICAgIGInYXV0by1saW5rZWQsJm5ic3A7dG9vOjxicj5cbjxhIGhyZWY9Imh0dHA6Ly9nb29nbGUuY29tIj4nCisgICAgICAgICAgICAgYidodHRwOi8vZ29vZ2xlLmNvbTwvYT4uPC90dD48L2RkPjwvZGw+JyksIHJlc3BvbnNlKQogCisgICAgQG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9zeXN0ZW1fbWV0aG9kcyhzZWxmKToKICAgICAgICAgIiIiVGVzdCB0aGUgcHJlY2Vuc2Ugb2YgdGhyZWUgY29uc2VjdXRpdmUgc3lzdGVtLiogbWV0aG9kcy4KIAotICAgICAgICBUaGlzIGFsc28gdGVzdHMgdGhlaXIgdXNlIG9mIHBhcmFtZXRlciB0eXBlIHJlY29nbml0aW9uIGFuZCB0aGUgc3lzdGVtcwotICAgICAgICByZWxhdGVkIHRvIHRoYXQgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBhbHNvIHRlc3RzIHRoZWlyIHVzZSBvZiBwYXJhbWV0ZXIgdHlwZSByZWNvZ25pdGlvbiBhbmQgdGhlCisgICAgICAgIHN5c3RlbXMgcmVsYXRlZCB0byB0aGF0IHByb2Nlc3MuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKS5yZWFkKCkKIAotICAgICAgICBzZWxmLmFzc2VydFRydWUoCi1iIiIiPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZEhlbHAiPjxzdHJvbmc+c3lzdGVtLm1ldGhvZEhlbHA8L3N0cm9uZz48L2E+KG1ldGhvZF9uYW1lKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5tZXRob2RIZWxwIj5zeXN0ZW0ubWV0aG9kSGVscDwvYT4oXCdhZGRcJykmbmJzcDs9Jmd0OyZuYnNwOyJBZGRzJm5ic3A7dHdvJm5ic3A7aW50ZWdlcnMmbmJzcDt0b2dldGhlciI8YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJm5ic3A7YSZuYnNwO3N0cmluZyZuYnNwO2NvbnRhaW5pbmcmbmJzcDtkb2N1bWVudGF0aW9uJm5ic3A7Zm9yJm5ic3A7dGhlJm5ic3A7c3BlY2lmaWVkJm5ic3A7bWV0aG9kLjwvdHQ+PC9kZD48L2RsPlxuPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSI+PHN0cm9uZz5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9zdHJvbmc+PC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9hPihcJ2FkZFwnKSZuYnNwOz0mZ3Q7Jm5ic3A7W2RvdWJsZSwmbmJzcDtpbnQsJm5ic3A7aW50XTxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7bGlzdCZuYnNwO2Rlc2NyaWJpbmcmbmJzcDt0aGUmbmJzcDtzaWduYXR1cmUmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO21ldGhvZC4mbmJzcDtJbiZuYnNwO3RoZTxicj5cbmFib3ZlJm5ic3A7ZXhhbXBsZSwmbmJzcDt0aGUmbmJzcDthZGQmbmJzcDttZXRob2QmbmJzcDt0YWtlcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJm5ic3A7YXMmbmJzcDthcmd1bWVudHM8YnI+XG5hbmQmbmJzcDtyZXR1cm5zJm5ic3A7YSZuYnNwO2RvdWJsZSZuYnNwO3Jlc3VsdC48YnI+XG4mbmJzcDs8YnI+XG5UaGlzJm5ic3A7c2VydmVyJm5ic3A7ZG9lcyZuYnNwO05PVCZuYnNwO3N1cHBvcnQmbmJzcDtzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlLjwvdHQ+PC9kZD48L2RsPlxuPGRsPjxkdD48YSBuYW1lPSItdGVzdF9tZXRob2QiPjxzdHJvbmc+dGVzdF9tZXRob2Q8L3N0cm9uZz48L2E+KGFyZyk8L2R0PjxkZD48dHQ+VGVzdCZuYnNwO21ldGhvZFwncyZuYnNwO2RvY3MuJm5ic3A7VGhpcyZuYnNwO21ldGhvZCZuYnNwO3RydWx5Jm5ic3A7ZG9lcyZuYnNwO3ZlcnkmbmJzcDtsaXR0bGUuPC90dD48L2RkPjwvZGw+IiIiIGluIHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgKGInPGRsPjxkdD48YSBuYW1lPSItc3lzdGVtLm1ldGhvZEhlbHAiPjxzdHJvbmc+c3lzdGVtLm1ldGhvZEhlbHAnCisgICAgICAgICAgICAgYic8L3N0cm9uZz48L2E+KG1ldGhvZF9uYW1lKTwvZHQ+PGRkPjx0dD48YSBocmVmPSIjLXN5c3RlbS5tZXRob2QnCisgICAgICAgICAgICAgYidIZWxwIj5zeXN0ZW0ubWV0aG9kSGVscDwvYT4oXCdhZGRcJykmbmJzcDs9Jmd0OyZuYnNwOyJBZGRzJm5ic3A7JworICAgICAgICAgICAgIGIndHdvJm5ic3A7aW50ZWdlcnMmbmJzcDt0b2dldGhlciI8YnI+XG4mbmJzcDs8YnI+XG5SZXR1cm5zJm5ic3A7YScKKyAgICAgICAgICAgICBiJyZuYnNwO3N0cmluZyZuYnNwO2NvbnRhaW5pbmcmbmJzcDtkb2N1bWVudGF0aW9uJm5ic3A7Zm9yJm5ic3A7JworICAgICAgICAgICAgIGIndGhlJm5ic3A7c3BlY2lmaWVkJm5ic3A7bWV0aG9kLjwvdHQ+PC9kZD48L2RsPlxuPGRsPjxkdD48YSBuYW1lJworICAgICAgICAgICAgIGInPSItc3lzdGVtLm1ldGhvZFNpZ25hdHVyZSI+PHN0cm9uZz5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9zdHJvbmc+JworICAgICAgICAgICAgIGInPC9hPihtZXRob2RfbmFtZSk8L2R0PjxkZD48dHQ+PGEgaHJlZj0iIy1zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlIj4nCisgICAgICAgICAgICAgYidzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlPC9hPihcJ2FkZFwnKSZuYnNwOz0mZ3Q7Jm5ic3A7W2RvdWJsZSwmbmJzcDsnCisgICAgICAgICAgICAgYidpbnQsJm5ic3A7aW50XTxicj5cbiZuYnNwOzxicj5cblJldHVybnMmbmJzcDthJm5ic3A7bGlzdCZuYnNwOycKKyAgICAgICAgICAgICBiJ2Rlc2NyaWJpbmcmbmJzcDt0aGUmbmJzcDtzaWduYXR1cmUmbmJzcDtvZiZuYnNwO3RoZSZuYnNwO21ldGhvZC4nCisgICAgICAgICAgICAgYicmbmJzcDtJbiZuYnNwO3RoZTxicj5cbmFib3ZlJm5ic3A7ZXhhbXBsZSwmbmJzcDt0aGUmbmJzcDthZGQmbmJzcDsnCisgICAgICAgICAgICAgYidtZXRob2QmbmJzcDt0YWtlcyZuYnNwO3R3byZuYnNwO2ludGVnZXJzJm5ic3A7YXMmbmJzcDthcmd1bWVudHMnCisgICAgICAgICAgICAgYic8YnI+XG5hbmQmbmJzcDtyZXR1cm5zJm5ic3A7YSZuYnNwO2RvdWJsZSZuYnNwO3Jlc3VsdC48YnI+XG4mbmJzcDsnCisgICAgICAgICAgICAgYic8YnI+XG5UaGlzJm5ic3A7c2VydmVyJm5ic3A7ZG9lcyZuYnNwO05PVCZuYnNwO3N1cHBvcnQmbmJzcDtzeXN0ZW0nCisgICAgICAgICAgICAgYicubWV0aG9kU2lnbmF0dXJlLjwvdHQ+PC9kZD48L2RsPlxuPGRsPjxkdD48YSBuYW1lPSItdGVzdF9tZXRob2QiPicKKyAgICAgICAgICAgICBiJzxzdHJvbmc+dGVzdF9tZXRob2Q8L3N0cm9uZz48L2E+KGFyZyk8L2R0PjxkZD48dHQ+VGVzdCZuYnNwOycKKyAgICAgICAgICAgICBiJ21ldGhvZFwncyZuYnNwO2RvY3MuJm5ic3A7VGhpcyZuYnNwO21ldGhvZCZuYnNwO3RydWx5Jm5ic3A7ZG9lcycKKyAgICAgICAgICAgICBiJyZuYnNwO3ZlcnkmbmJzcDtsaXR0bGUuPC90dD48L2RkPjwvZGw+JyksIHJlc3BvbnNlKQogCiAgICAgZGVmIHRlc3RfYXV0b2xpbmtfZG90dGVkX21ldGhvZHMoc2VsZik6CiAgICAgICAgICIiIlRlc3QgdGhhdCBzZWxmZG90IHZhbHVlcyBhcmUgbWFkZSBzdHJvbmcgYXV0b21hdGljYWxseSBpbiB0aGUKQEAgLTE0MCw4ICsxODgsOCBAQAogICAgICAgICBzZWxmLmNsaWVudC5yZXF1ZXN0KCJHRVQiLCAiLyIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5jbGllbnQuZ2V0cmVzcG9uc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiIiIiVHJ5Jm5ic3A7c2VsZi48c3Ryb25nPmFkZDwvc3Ryb25nPiwmbmJzcDt0b28uIiIiIGluCi0gICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiIiIlRyeSZuYnNwO3NlbGYuPHN0cm9uZz5hZGQ8L3N0cm9uZz4sJm5ic3A7dG9vLiIiIiwKKyAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZWFkKCkpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChEb2NYTUxSUENIVFRQR0VUU2VydmVyKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kdW1teV90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weQppbmRleCAyNDBiNjFhLi5jNjEwNzhkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2R1bW15X3RocmVhZC5weQpAQCAtOTIsMTYgKzkyLDE2IEBACiAKICAgICBkZWYgdGVzdF9pZGVudChzZWxmKToKICAgICAgICAgI1Rlc3Qgc2FuaXR5IG9mIF90aHJlYWQuZ2V0X2lkZW50KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLmdldF9pZGVudCgpIHJldHVybmVkIGEgbm9uLWludGVnZXIiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoX3RocmVhZC5nZXRfaWRlbnQoKSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuZ2V0X2lkZW50KCkgcmV0dXJuZWQgYSBub24taW50ZWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfdGhyZWFkLmdldF9pZGVudCgpICE9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX3RocmVhZC5nZXRfaWRlbnQoKSByZXR1cm5lZCAwIikKIAogICAgIGRlZiB0ZXN0X0xvY2tUeXBlKHNlbGYpOgogICAgICAgICAjTWFrZSBzdXJlIF90aHJlYWQuTG9ja1R5cGUgaXMgdGhlIHNhbWUgdHlwZSBhcyBfdGhyZWFkLmFsbG9jYXRlX2xvY2tlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCksIF90aHJlYWQuTG9ja1R5cGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIl90aHJlYWQuTG9ja1R5cGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIHdoYXQgaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSwgX3RocmVhZC5Mb2NrVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfdGhyZWFkLkxvY2tUeXBlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiB3aGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyByZXR1cm5lZCBieSBfdGhyZWFkLmFsbG9jYXRlX2xvY2soKSIpCiAKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHRfbWFpbihzZWxmKToKICAgICAgICAgI0NhbGxpbmcgc3RhcnRfbmV3X3RocmVhZCB3aXRoIGEgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyBpbnRlcnJ1cHRfbWFpbgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9keW5hbWljLnB5IGIvTGliL3Rlc3QvdGVzdF9keW5hbWljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYjdiMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWMucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMgVGVzdCB0aGUgbW9zdCBkeW5hbWljIGNvcm5lciBjYXNlcyBvZiBQeXRob24ncyBydW50aW1lIHNlbWFudGljcy4KKworaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHN3YXBfaXRlbSwgc3dhcF9hdHRyCisKKworY2xhc3MgUmViaW5kQnVpbHRpbnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IGFsbCB0aGUgd2F5cyB0aGF0IHdlIGNhbiBjaGFuZ2Uvc2hhZG93IGdsb2JhbHMvYnVpbHRpbnMuIiIiCisKKyAgICBkZWYgY29uZmlndXJlX2Z1bmMoc2VsZiwgZnVuYywgKmFyZ3MpOgorICAgICAgICAiIiJQZXJmb3JtIFRlc3RDYXNlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb24gYSBmdW5jdGlvbiBiZWZvcmUgdGVzdGluZy4KKworICAgICAgICBCeSBkZWZhdWx0LCB0aGlzIGRvZXMgbm90aGluZy4gRXhhbXBsZSB1c2FnZTogc3Bpbm5pbmcgYSBmdW5jdGlvbiBzbworICAgICAgICB0aGF0IGEgSklUIHdpbGwgb3B0aW1pemUgaXQuIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJyaWRlIHRoaXMgYXMgbmVlZGVkLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbiB0byBjb25maWd1cmUuCisgICAgICAgICAgICAqYXJnczogYW55IGFyZ3VtZW50cyB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gZnVuYywgaWYgY2FsbGluZyBpdC4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgTm90aGluZy4gV29yayB3aWxsIGJlIHBlcmZvcm1lZCBvbiBmdW5jIGluLXBsYWNlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfZ2xvYmFsc19zaGFkb3dfYnVpbHRpbnMoc2VsZik6CisgICAgICAgICMgTW9kaWZ5IGdsb2JhbHMoKSB0byBzaGFkb3cgYW4gZW50cnkgaW4gYnVpbHRpbnMuCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBsZW4oWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmNvbmZpZ3VyZV9mdW5jKGZvbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAzKQorICAgICAgICB3aXRoIHN3YXBfaXRlbShnbG9iYWxzKCksICJsZW4iLCBsYW1iZGEgeDogNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCA3KQorCisgICAgZGVmIHRlc3RfbW9kaWZ5X2J1aWx0aW5zKHNlbGYpOgorICAgICAgICAjIE1vZGlmeSB0aGUgYnVpbHRpbnMgbW9kdWxlIGRpcmVjdGx5LgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gbGVuKFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5jb25maWd1cmVfZnVuYyhmb28pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgMykKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIoYnVpbHRpbnMsICJsZW4iLCBsYW1iZGEgeDogNyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCA3KQorCisgICAgZGVmIHRlc3RfbW9kaWZ5X2J1aWx0aW5zX3doaWxlX2dlbmVyYXRvcl9hY3RpdmUoc2VsZik6CisgICAgICAgICMgTW9kaWZ5IHRoZSBidWlsdGlucyBvdXQgZnJvbSB1bmRlciBhIGxpdmUgZ2VuZXJhdG9yLgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICB4ID0gcmFuZ2UoMykKKyAgICAgICAgICAgIHlpZWxkIGxlbih4KQorICAgICAgICAgICAgeWllbGQgbGVuKHgpCisgICAgICAgIHNlbGYuY29uZmlndXJlX2Z1bmMoZm9vKQorCisgICAgICAgIGcgPSBmb28oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksIDMpCisgICAgICAgIHdpdGggc3dhcF9hdHRyKGJ1aWx0aW5zLCAibGVuIiwgbGFtYmRhIHg6IDcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCA3KQorCisgICAgZGVmIHRlc3RfbW9kaWZ5X2J1aWx0aW5zX2Zyb21fbGVhZl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCBtb2RpZmljYXRpb25zIG1hZGUgYnkgbGVhZiBmdW5jdGlvbnMgcGVyY29sYXRlIHVwIHRoZQorICAgICAgICAjIGNhbGxzdGFjay4KKyAgICAgICAgd2l0aCBzd2FwX2F0dHIoYnVpbHRpbnMsICJsZW4iLCBsZW4pOgorICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIGJ1aWx0aW5zLmxlbiA9IGxhbWJkYSB4OiA0CisKKyAgICAgICAgICAgIGRlZiBmb28obW9kaWZpZXIpOgorICAgICAgICAgICAgICAgIGwgPSBbXQorICAgICAgICAgICAgICAgIGwuYXBwZW5kKGxlbihyYW5nZSg3KSkpCisgICAgICAgICAgICAgICAgbW9kaWZpZXIoKQorICAgICAgICAgICAgICAgIGwuYXBwZW5kKGxlbihyYW5nZSg3KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGwKKyAgICAgICAgICAgIHNlbGYuY29uZmlndXJlX2Z1bmMoZm9vLCBsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKGJhciksIFs3LCA0XSkKKworICAgIGRlZiB0ZXN0X2Nhbm5vdF9jaGFuZ2VfZ2xvYmFsc19vcl9idWlsdGluc193aXRoX2V2YWwoc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBsZW4oWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmNvbmZpZ3VyZV9mdW5jKGZvbykKKworICAgICAgICAjIE5vdGUgdGhhdCB0aGlzICpkb2Vzbid0KiBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgbGVuKCkgc2VlbiBieSBmb28oKS4KKyAgICAgICAgYnVpbHRpbnNfZGljdCA9IHsibGVuIjogbGFtYmRhIHg6IDd9CisgICAgICAgIGdsb2JhbHNfZGljdCA9IHsiZm9vIjogZm9vLCAiX19idWlsdGluc19fIjogYnVpbHRpbnNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZW4iOiBsYW1iZGEgeDogOH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCJmb28oKSIsIGdsb2JhbHNfZGljdCksIDMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKCJmb28oKSIsIHsiZm9vIjogZm9vfSksIDMpCisKKyAgICBkZWYgdGVzdF9jYW5ub3RfY2hhbmdlX2dsb2JhbHNfb3JfYnVpbHRpbnNfd2l0aF9leGVjKHNlbGYpOgorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICByZXR1cm4gbGVuKFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5jb25maWd1cmVfZnVuYyhmb28pCisKKyAgICAgICAgZ2xvYmFsc19kaWN0ID0geyJmb28iOiBmb299CisgICAgICAgIGV4ZWMoInggPSBmb28oKSIsIGdsb2JhbHNfZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzX2RpY3RbIngiXSwgMykKKworICAgICAgICAjIE5vdGUgdGhhdCB0aGlzICpkb2Vzbid0KiBjaGFuZ2UgdGhlIGRlZmluaXRpb24gb2YgbGVuKCkgc2VlbiBieSBmb28oKS4KKyAgICAgICAgYnVpbHRpbnNfZGljdCA9IHsibGVuIjogbGFtYmRhIHg6IDd9CisgICAgICAgIGdsb2JhbHNfZGljdCA9IHsiZm9vIjogZm9vLCAiX19idWlsdGluc19fIjogYnVpbHRpbnNfZGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJsZW4iOiBsYW1iZGEgeDogOH0KKworICAgICAgICBleGVjKCJ4ID0gZm9vKCkiLCBnbG9iYWxzX2RpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsc19kaWN0WyJ4Il0sIDMpCisKKyAgICBkZWYgdGVzdF9jYW5ub3RfcmVwbGFjZV9idWlsdGluc19kaWN0X3doaWxlX2FjdGl2ZShzZWxmKToKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgeCA9IHJhbmdlKDMpCisgICAgICAgICAgICB5aWVsZCBsZW4oeCkKKyAgICAgICAgICAgIHlpZWxkIGxlbih4KQorICAgICAgICBzZWxmLmNvbmZpZ3VyZV9mdW5jKGZvbykKKworICAgICAgICBnID0gZm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAzKQorICAgICAgICB3aXRoIHN3YXBfaXRlbShnbG9iYWxzKCksICJfX2J1aWx0aW5zX18iLCB7ImxlbiI6IGxhbWJkYSB4OiA3fSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksIDMpCisKKyAgICBkZWYgdGVzdF9jYW5ub3RfcmVwbGFjZV9idWlsdGluc19kaWN0X2JldHdlZW5fY2FsbHMoc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHJldHVybiBsZW4oWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmNvbmZpZ3VyZV9mdW5jKGZvbykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAzKQorICAgICAgICB3aXRoIHN3YXBfaXRlbShnbG9iYWxzKCksICJfX2J1aWx0aW5zX18iLCB7ImxlbiI6IGxhbWJkYSB4OiA3fSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbygpLCAzKQorCisgICAgZGVmIHRlc3RfZXZhbF9naXZlc19sYW1iZGFfY3VzdG9tX2dsb2JhbHMoc2VsZik6CisgICAgICAgIGdsb2JhbHNfZGljdCA9IHsibGVuIjogbGFtYmRhIHg6IDd9CisgICAgICAgIGZvbyA9IGV2YWwoImxhbWJkYTogbGVuKFtdKSIsIGdsb2JhbHNfZGljdCkKKyAgICAgICAgc2VsZi5jb25maWd1cmVfZnVuYyhmb28pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgNykKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFJlYmluZEJ1aWx0aW5zVGVzdHMpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwucHkKaW5kZXggZjBhMThlNy4uNWVlYmJhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsLnB5CkBAIC0zLDEwICszLDEyIEBACiAKICMgVGhlIHNwZWNpZmljIHRlc3RzIG5vdyBsaXZlIGluIExpYi9lbWFpbC90ZXN0CiBmcm9tIGVtYWlsLnRlc3QudGVzdF9lbWFpbCBpbXBvcnQgc3VpdGUKK2Zyb20gZW1haWwudGVzdC50ZXN0X2VtYWlsX2NvZGVjcyBpbXBvcnQgc3VpdGUgYXMgY29kZWNzX3N1aXRlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KHN1aXRlKCkpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoY29kZWNzX3N1aXRlKCkpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKaW5kZXggNGRjOWExMi4uMDk1ODIwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtZXJhdGUucHkKQEAgLTEwMyw2ICsxMDMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZW51bSwgJ2FiYycsICdhJykgIyB3cm9uZyB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5lbnVtLCAnYWJjJywgMiwgMykgIyB0b28gbWFueSBhcmd1bWVudHMKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3R1cGxlX3JldXNlKHNlbGYpOgogICAgICAgICAjIFRlc3RzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCB3aGVyZSB0dXBsZSBpcyByZXVzZWQKICAgICAgICAgIyB3aGVuZXZlciBub3RoaW5nIGVsc2UgaG9sZHMgYSByZWZlcmVuY2UgdG8gaXQKQEAgLTE0NSw2ICsxNDYsNyBAQAogICAgICAgICB4ID0gcmFuZ2UoMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJldmVyc2VkKHgpKSwgdHlwZShpdGVyKHgpKSkKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKICAgICAgICAgIyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IGFuIGludGVyZmFjZSByZXF1aXJlbWVudAogICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KQEAgLTE5OCw2ICsyMDAsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vbi1jYWxsYWJsZSBfX3JldmVyc2VkX18gZGlkbid0IHJhaXNlISIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIHN5cy5nZXRyZWZjb3VudChyKSkKIAorICAgIGRlZiB0ZXN0X29iam1ldGhvZHMoc2VsZik6CisgICAgICAgICMgT2JqZWN0cyBtdXN0IGhhdmUgX19sZW5fXygpIGFuZCBfX2dldGl0ZW1fXygpIGltcGxlbWVudGVkLgorICAgICAgICBjbGFzcyBOb0xlbihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYpOiByZXR1cm4gMQorICAgICAgICBubCA9IE5vTGVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgbmwpCisKKyAgICAgICAgY2xhc3MgTm9HZXRJdGVtKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKTogcmV0dXJuIDIKKyAgICAgICAgbmdpID0gTm9HZXRJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZXZlcnNlZCwgbmdpKQorCiAKIGNsYXNzIEVudW1lcmF0ZVN0YXJ0VGVzdENhc2UoRW51bWVyYXRlVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VvZi5weSBiL0xpYi90ZXN0L3Rlc3RfZW9mLnB5CmluZGV4IDRlMzc1NjAuLmZiNGFjOWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW9mLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW9mLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiInRlc3Qgc2NyaXB0IGZvciBhIGZldyBuZXcgaW52YWxpZCB0b2tlbiBjYXRjaGVzIiIiCiAKIGltcG9ydCB1bml0dGVzdApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weSBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKaW5kZXggMTRhYzJkNS4uMjc1ZTU5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CkBAIC0yMSwxMiArMjEsMTAgQEAKICIiIgogVGVzdHMgZm9yIGVwb2xsIHdyYXBwZXIuCiAiIiIKLWltcG9ydCBvcwogaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCiBpbXBvcnQgdGltZQogaW1wb3J0IHNlbGVjdAotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5IGIvTGliL3Rlc3QvdGVzdF9lcnJuby5weQppbmRleCA4MGVkY2M2Li5mNDE0YTg3IDEwMDc1NQotLS0gYS9MaWIvdGVzdC90ZXN0X2Vycm5vLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXJybm8ucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiVGVzdCB0aGUgZXJybm8gbW9kdWxlCiAgICBSb2dlciBFLiBNYXNzZQogIiIiCkBAIC0yMCw3ICsyMCw4IEBACiAgICAgZGVmIHRlc3RfdXNpbmdfZXJyb3Jjb2RlKHNlbGYpOgogICAgICAgICAjIEV2ZXJ5IGtleSB2YWx1ZSBpbiBlcnJuby5lcnJvcmNvZGUgc2hvdWxkIGJlIG9uIHRoZSBtb2R1bGUuCiAgICAgICAgIGZvciB2YWx1ZSBpbiBlcnJuby5lcnJvcmNvZGUudmFsdWVzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihlcnJubywgdmFsdWUpLCAnbm8gJXMgYXR0ciBpbiBlcnJubycgJSB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVycm5vLCB2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vICVzIGF0dHIgaW4gZXJybm8nICUgdmFsdWUpCiAKIAogY2xhc3MgRXJyb3Jjb2RlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjgsOCArMjksOCBAQAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfaW5fZXJyb3Jjb2RlKHNlbGYpOgogICAgICAgICBmb3IgYXR0cmlidXRlIGluIGVycm5vLl9fZGljdF9fLmtleXMoKToKICAgICAgICAgICAgIGlmIGF0dHJpYnV0ZS5pc3VwcGVyKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoZXJybm8sIGF0dHJpYnV0ZSkgaW4gZXJybm8uZXJyb3Jjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gJXMgYXR0ciBpbiBlcnJuby5lcnJvcmNvZGUnICUgYXR0cmlidXRlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZ2V0YXR0cihlcnJubywgYXR0cmlidXRlKSwgZXJybm8uZXJyb3Jjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vICVzIGF0dHIgaW4gZXJybm8uZXJyb3Jjb2RlJyAlIGF0dHJpYnV0ZSkKIAogCiBkZWYgdGVzdF9tYWluKCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKaW5kZXggNWIzNjE4Ni4uNzZmNDI0OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCB3ZWFrcmVmCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCB1bmxpbmssIHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBnY19jb2xsZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICBnY19jb2xsZWN0LCBjcHl0aG9uX29ubHkpCiAKICMgWFhYIFRoaXMgaXMgbm90IHJlYWxseSBlbm91Z2gsIGVhY2ggKm9wZXJhdGlvbiogc2hvdWxkIGJlIHRlc3RlZCEKIApAQCAtMTM3LDYgKzEzNyw3IEBACiAgICAgICAgIGNrbXNnKHMsICInY29udGludWUnIG5vdCBwcm9wZXJseSBpbiBsb29wIikKICAgICAgICAgY2ttc2coImNvbnRpbnVlXG4iLCAiJ2NvbnRpbnVlJyBub3QgcHJvcGVybHkgaW4gbG9vcCIpCiAKKyAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RTZXR0aW5nRXhjZXB0aW9uKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBzZXR0aW5nIGFuIGV4Y2VwdGlvbiBhdCB0aGUgQyBsZXZlbCB3b3JrcyBldmVuIGlmIHRoZQogICAgICAgICAjIGV4Y2VwdGlvbiBvYmplY3QgY2FuJ3QgYmUgY29uc3RydWN0ZWQuCkBAIC0zMTksMjUgKzMyMCwyNSBAQAogICAgICAgICAgICAgdGIgPSBzeXMuZXhjX2luZm8oKVsyXQogCiAgICAgICAgIGUgPSBCYXNlRXhjZXB0aW9uKCkud2l0aF90cmFjZWJhY2sodGIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUsIEJhc2VFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgQmFzZUV4Y2VwdGlvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLl9fdHJhY2ViYWNrX18sIHRiKQogCiAgICAgICAgIGUgPSBJbmRleEVycm9yKDUpLndpdGhfdHJhY2ViYWNrKHRiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLCBJbmRleEVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUsIEluZGV4RXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5fX3RyYWNlYmFja19fLCB0YikKIAogICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpLndpdGhfdHJhY2ViYWNrKHRiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLCBNeUV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBNeUV4Y2VwdGlvbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLl9fdHJhY2ViYWNrX18sIHRiKQogCiAgICAgZGVmIHRlc3RJbnZhbGlkVHJhY2ViYWNrKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBFeGNlcHRpb24oKS5fX3RyYWNlYmFja19fID0gNQogICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIl9fdHJhY2ViYWNrX18gbXVzdCBiZSBhIHRyYWNlYmFjayIgaW4gc3RyKGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX190cmFjZWJhY2tfXyBtdXN0IGJlIGEgdHJhY2ViYWNrIiwgc3RyKGUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKIApAQCAtNDEzLDcgKzQxNCw3IEBACiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlKQogICAgICAgICAgICAgZGVsIGUKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZScgaW4gbG9jYWxzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2UnLCBsb2NhbHMoKSkKIAogICAgIGRlZiB0ZXN0RXhjZXB0aW9uQ2xlYW51cFN0YXRlKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBleGNlcHRpb24gc3RhdGUgaXMgY2xlYW5lZCB1cCBhcyBzb29uIGFzIHRoZSBleGNlcHQKQEAgLTUyNCw2ICs1MjUsMTcgQEAKICAgICAgICAgb2JqID0gd3IoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqIGlzIE5vbmUsICIlcyIgJSBvYmopCiAKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fdGFyZ2V0X2luX25lc3RlZF9zY29wZShzZWxmKToKKyAgICAgICAgIyBpc3N1ZSA0NjE3OiBUaGlzIHVzZWQgdG8gcmFpc2UgYSBTeW50YXhFcnJvcgorICAgICAgICAjICJjYW4gbm90IGRlbGV0ZSB2YXJpYWJsZSAnZScgcmVmZXJlbmNlZCBpbiBuZXN0ZWQgc2NvcGUiCisgICAgICAgIGRlZiBwcmludF9lcnJvcigpOgorICAgICAgICAgICAgZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb21ldGhpbmcKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcHJpbnRfZXJyb3IoKQorICAgICAgICAgICAgIyBpbXBsaWNpdCAiZGVsIGUiIGhlcmUKKwogICAgIGRlZiB0ZXN0X2dlbmVyYXRvcl9sZWFraW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBnZW5lcmF0b3IgZXhjZXB0aW9uIHN0YXRlIGRvZXNuJ3QgbGVhayBpbnRvIHRoZSBjYWxsaW5nCiAgICAgICAgICMgZnJhbWUKQEAgLTY0Nyw3ICs2NTksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKQogICAgICAgICBlLCB2LCB0YiA9IGcoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2LCBSdW50aW1lRXJyb3IpLCB0eXBlKHYpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIGV4Y2VlZGVkIiBpbiBzdHIodiksIHN0cih2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibWF4aW11bSByZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiLCBzdHIodikpCiAKIAogICAgIGRlZiB0ZXN0X01lbW9yeUVycm9yKHNlbGYpOgpAQCAtNjY4LDYgKzY4MCw0NiBAQAogICAgICAgICB0YjIgPSByYWlzZU1lbUVycm9yKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YjEsIHRiMikKIAorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9leGNlcHRpb25fd2l0aF9kb2Moc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgZG9jMiA9ICJUaGlzIGlzIGEgdGVzdCBkb2NzdHJpbmcuIgorICAgICAgICBkb2M0ID0gIlRoaXMgaXMgYW5vdGhlciB0ZXN0IGRvY3N0cmluZy4iCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXJyb3IsIF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yMSIpCisKKyAgICAgICAgIyB0ZXN0IGJhc2ljIHVzYWdlIG9mIFB5RXJyX05ld0V4Y2VwdGlvbgorICAgICAgICBlcnJvcjEgPSBfdGVzdGNhcGkubWFrZV9leGNlcHRpb25fd2l0aF9kb2MoIl90ZXN0Y2FwaS5lcnJvcjEiKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXJyb3IxKSwgdHlwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3IxLCBFeGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShlcnJvcjEuX19kb2NfXykKKworICAgICAgICAjIHRlc3Qgd2l0aCBnaXZlbiBkb2NzdHJpbmcKKyAgICAgICAgZXJyb3IyID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3IyIiwgZG9jMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJvcjIuX19kb2NfXywgZG9jMikKKworICAgICAgICAjIHRlc3Qgd2l0aCBleHBsaWNpdCBiYXNlICh3aXRob3V0IGRvY3N0cmluZykKKyAgICAgICAgZXJyb3IzID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3IzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U9ZXJyb3IyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjMsIGVycm9yMikpCisKKyAgICAgICAgIyB0ZXN0IHdpdGggZXhwbGljaXQgYmFzZSB0dXBsZQorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVycm9yNCA9IF90ZXN0Y2FwaS5tYWtlX2V4Y2VwdGlvbl93aXRoX2RvYygiX3Rlc3RjYXBpLmVycm9yNCIsIGRvYzQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IzLCBDKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoZXJyb3I0LCBlcnJvcjMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjQsIEMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycm9yNC5fX2RvY19fLCBkb2M0KQorCisgICAgICAgICMgdGVzdCB3aXRoIGV4cGxpY2l0IGRpY3Rpb25hcnkKKyAgICAgICAgZXJyb3I1ID0gX3Rlc3RjYXBpLm1ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKCJfdGVzdGNhcGkuZXJyb3I1IiwgIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjQsIHsnYSc6IDF9KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhlcnJvcjUsIGVycm9yNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I1LmEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3I1Ll9fZG9jX18sICIiKQorCiAgICAgZGVmIHRlc3RfbWVtb3J5X2Vycm9yX2NsZWFudXAoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzU0Mzc6IHByZWFsbG9jYXRlZCBNZW1vcnlFcnJvciBpbnN0YW5jZXMgc2hvdWxkIG5vdCBrZWVwCiAgICAgICAgICMgdHJhY2ViYWNrIG9iamVjdHMgYWxpdmUuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2V4dGNhbGwucHkKaW5kZXggY2U5YWM1ZS4uMWY3ZjYzMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leHRjYWxsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXh0Y2FsbC5weQpAQCAtMSwzICsxLDQgQEAKKwogIiIiRG9jdGVzdCBmb3IgbWV0aG9kL2Z1bmN0aW9uIGNhbGxzLgogCiBXZSdyZSBnb2luZyB0aGUgdXNlIHRoZXNlIHR5cGVzIGZvciBleHRyYSB0ZXN0aW5nCkBAIC02NSwxNyArNjYsMTcgQEAKICAgICA+Pj4gZygpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBnKCkgdGFrZXMgYXQgbGVhc3QgMSBwb3NpdGlvbmFsIGFyZ3VtZW50ICgwIGdpdmVuKQorICAgIFR5cGVFcnJvcjogZygpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCiAKICAgICA+Pj4gZygqKCkpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBnKCkgdGFrZXMgYXQgbGVhc3QgMSBwb3NpdGlvbmFsIGFyZ3VtZW50ICgwIGdpdmVuKQorICAgIFR5cGVFcnJvcjogZygpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCiAKICAgICA+Pj4gZygqKCksICoqe30pCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVHlwZUVycm9yOiBnKCkgdGFrZXMgYXQgbGVhc3QgMSBwb3NpdGlvbmFsIGFyZ3VtZW50ICgwIGdpdmVuKQorICAgIFR5cGVFcnJvcjogZygpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pCiAKICAgICA+Pj4gZygxKQogICAgIDEgKCkge30KQEAgLTI2MSwxMyArMjYyLDM3IEBACiAgICAgLi4uICAgICBwcmludChhLGIpCiAgICAgPj4+IGYoKip4KQogICAgIDEgMgorCitBIG9ic2N1cmUgbWVzc2FnZToKKworICAgID4+PiBkZWYgZihhLCBiKToKKyAgICAuLi4gICAgcGFzcworICAgID4+PiBmKGI9MSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAuLi4KKyAgICBUeXBlRXJyb3I6IGYoKSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzICgxIGdpdmVuKQorCitUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgaW4gaW5jbHVkZXMga2V5d29yZHM6CisKKyAgICA+Pj4gZGVmIGYoYSk6CisgICAgLi4uICAgIHBhc3MKKyAgICA+Pj4gZig2LCBhPTQsICooMSwgMiwgMykpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAxIHBvc2l0aW9uYWwgYXJndW1lbnQgKDUgZ2l2ZW4pCisgICAgPj4+IGRlZiBmKGEsICosIGt3KToKKyAgICAuLi4gICAgcGFzcworICAgID4+PiBmKDYsIDQsIGt3PTQpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgLi4uCisgICAgVHlwZUVycm9yOiBmKCkgdGFrZXMgZXhhY3RseSAxIHBvc2l0aW9uYWwgYXJndW1lbnQgKDMgZ2l2ZW4pCiAiIiIKIAoraW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfZXh0Y2FsbCAjIHNlbGYgaW1wb3J0Ci0gICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X2V4dGNhbGwsIFRydWUpCisgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChzeXMubW9kdWxlc1tfX25hbWVfX10sIFRydWUpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggM2MxOGYxZC4uZThlZWFhYQotLS0gYS9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKQEAgLTE2LDE1ICsxNiwxMiBAQAogIyBUT0RPIC0gV3JpdGUgdGVzdHMgZm9yIGZsb2NrKCkgYW5kIGxvY2tmKCkuCiAKIGRlZiBnZXRfbG9ja2RhdGEoKToKLSAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYXRoZW9zJyk6Ci0gICAgICAgIHN0YXJ0X2xlbiA9ICJxcSIKKyAgICB0cnk6CisgICAgICAgIG9zLk9fTEFSR0VGSUxFCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBzdGFydF9sZW4gPSAibGwiCiAgICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuT19MQVJHRUZJTEUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3RhcnRfbGVuID0gImxsIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3RhcnRfbGVuID0gInFxIgorICAgICAgICBzdGFydF9sZW4gPSAicXEiCiAKICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCduZXRic2QxJywgJ25ldGJzZDInLCAnbmV0YnNkMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAnRGFyd2luMS4yJywgJ2RhcndpbicsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKaW5kZXggMzBjNmVkMS4uYmIwZGE3OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQpAQCAtNyw3ICs3LDcgQEAKIGltcG9ydCBpbwogaW1wb3J0IF9weWlvIGFzIHB5aW8KIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZmluZGZpbGUsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0CiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyTGlzdAogCiBjbGFzcyBBdXRvRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICAgICAgYSA9IGFycmF5KCdiJywgYid4JyoxMCkKICAgICAgICAgc2VsZi5mID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykKICAgICAgICAgbiA9IHNlbGYuZi5yZWFkaW50byhhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTInLCBhLnRvc3RyaW5nKClbOm5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTInLCBhLnRvYnl0ZXMoKVs6bl0pCiAKICAgICBkZWYgdGVzdFJlYWRpbnRvX3RleHQoc2VsZik6CiAgICAgICAgICMgdmVyaWZ5IHJlYWRpbnRvIHJlZnVzZXMgdGV4dCBmaWxlcwpAQCAtMTA2LDggKzEwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgKCd3cml0ZWxpbmVzJywgKFtdLCkpLAogICAgICAgICAgICAgICAgICAgICgnX19pdGVyX18nLCAoKSksCiAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ2F0aGVvcycpOgotICAgICAgICAgICAgbWV0aG9kcy5hcHBlbmQoKCd0cnVuY2F0ZScsICgpKSkKKyAgICAgICAgbWV0aG9kcy5hcHBlbmQoKCd0cnVuY2F0ZScsICgpKSkKIAogICAgICAgICAjIF9fZXhpdF9fIHNob3VsZCBjbG9zZSB0aGUgZmlsZQogICAgICAgICBzZWxmLmYuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKQEAgLTE2Nyw3ICsxNjYsNyBAQAogICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSAhPSAwOgogICAgICAgICAgICAgICAgIHMgPSBzdHIobXNnKQotICAgICAgICAgICAgICAgIGlmIHMuZmluZChURVNURk4pICE9IC0xIG9yIHMuZmluZChiYWRfbW9kZSkgPT0gLTE6CisgICAgICAgICAgICAgICAgaWYgVEVTVEZOIGluIHMgb3IgYmFkX21vZGUgbm90IGluIHM6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiYmFkIGVycm9yIG1lc3NhZ2UgZm9yIGludmFsaWQgbW9kZTogJXMiICUgcykKICAgICAgICAgICAgICMgaWYgbXNnLmFyZ3NbMF0gPT0gMCwgd2UncmUgcHJvYmFibHkgb24gV2luZG93cyB3aGVyZSB0aGVyZSBtYXkgYmUKICAgICAgICAgICAgICMgbm8gb2J2aW91cyB3YXkgdG8gZGlzY292ZXIgd2h5IG9wZW4oKSBmYWlsZWQuCkBAIC0yODIsNyArMjgxLDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBzdXBwb3NlZGx5IGVtcHR5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdGlvbi1idWZmZXIgZmFpbGVkIGFueXdheSIpCi0gICAgICAgICAgICBsaW5lID0gYnVmLnRvc3RyaW5nKCkKKyAgICAgICAgICAgIGxpbmUgPSBidWYudG9ieXRlcygpCiAgICAgICAgICAgICBpZiBsaW5lICE9IHRlc3RsaW5lOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgicmVhZGludG8oKSBhZnRlciBuZXh0KCkgd2l0aCBlbXB0eSBidWZmZXIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkLiBHb3QgJXIsIGV4cGVjdGVkICVyIiAlIChsaW5lLCB0ZXN0bGluZSkpCkBAIC0zMDQsNiArMzAzLDggQEAKICAgICAgICAgICAgIGlmIGxpbmVzICE9IHRlc3RsaW5lczoKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInJlYWRsaW5lcygpIGFmdGVyIG5leHQoKSB3aXRoIGVtcHR5IGJ1ZmZlciAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQuIEdvdCAlciwgZXhwZWN0ZWQgJXIiICUgKGxpbmUsIHRlc3RsaW5lKSkKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCiAgICAgICAgICAgICAjIFJlYWRpbmcgYWZ0ZXIgaXRlcmF0aW9uIGhpdCBFT0Ygc2hvdWxkbid0IGh1cnQgZWl0aGVyCiAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKFRFU1RGTiwgJ3JiJykKICAgICAgICAgICAgIHRyeToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQppbmRleCBjNzFhMjdhLi45YjU3MjVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CkBAIC0xLDUgKzEsNSBAQAogCi1pbXBvcnQgb3MsIGZpbGVjbXAsIHNodXRpbCwgdGVtcGZpbGUsIHNodXRpbAoraW1wb3J0IG9zLCBmaWxlY21wLCBzaHV0aWwsIHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpbnB1dC5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CmluZGV4IGFhZTE2ZWEuLmYzMTI4ODIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5CkBAIC0yMzEsNiArMjMxLDMwIEBACiAjIyAgICAgICAgIGZpbmFsbHk6CiAjIyAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiQVxuQlxuQyJdKQorICAgICAgICAgICAgdDIgPSB3cml0ZVRtcCgyLCBbIkRcbkVcbkYiXSkKKyAgICAgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPSh0MSwgdDIpKSBhcyBmaToKKyAgICAgICAgICAgICAgICBsaW5lcyA9IGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCBbIkFcbiIsICJCXG4iLCAiQyIsICJEXG4iLCAiRVxuIiwgIkYiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuZmlsZWxpbmVubygpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5saW5lbm8oKSwgNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuX2ZpbGVzLCAoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEsIHQyKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0MSA9IHdyaXRlVG1wKDEsIFsiIl0pCisgICAgICAgICAgICB3aXRoIEZpbGVJbnB1dChmaWxlcz10MSkgYXMgZmk6CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuX2ZpbGVzLCAoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChCdWZmZXJTaXplc1Rlc3RzLCBGaWxlSW5wdXRUZXN0cykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlaW8ucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQppbmRleCAyYThlMDVkLi4xMDMzNjVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weQpAQCAtOCw5ICs4LDcgQEAKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VfYmFkX2ZkKQotZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckxpc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGNoZWNrX3dhcm5pbmdzLCBydW5fdW5pdHRlc3QsIG1ha2VfYmFkX2ZkCiAKIGZyb20gX2lvIGltcG9ydCBGaWxlSU8gYXMgX0ZpbGVJTwogCkBAIC0xMDgsOCArMTA2LDYgQEAKICAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2lzYXR0eScsICdyZWFkJywgJ3JlYWRpbnRvJywKICAgICAgICAgICAgICAgICAgICAnc2VlaycsICd0ZWxsJywgJ3RydW5jYXRlJywgJ3dyaXRlJywgJ3NlZWthYmxlJywKICAgICAgICAgICAgICAgICAgICAncmVhZGFibGUnLCAnd3JpdGFibGUnXQotICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYXRoZW9zJyk6Ci0gICAgICAgICAgICBtZXRob2RzLnJlbW92ZSgndHJ1bmNhdGUnKQogCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmYuY2xvc2VkKQpAQCAtMzI0LDcgKzMyMCw3IEBACiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIG1zZzoKICAgICAgICAgICAgIGlmIG1zZy5hcmdzWzBdICE9IDA6CiAgICAgICAgICAgICAgICAgcyA9IHN0cihtc2cpCi0gICAgICAgICAgICAgICAgaWYgcy5maW5kKFRFU1RGTikgIT0gLTEgb3Igcy5maW5kKGJhZF9tb2RlKSA9PSAtMToKKyAgICAgICAgICAgICAgICBpZiBURVNURk4gaW4gcyBvciBiYWRfbW9kZSBub3QgaW4gczoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYWQgZXJyb3IgbWVzc2FnZSBmb3IgaW52YWxpZCBtb2RlOiAlcyIgJSBzKQogICAgICAgICAgICAgIyBpZiBtc2cuYXJnc1swXSA9PSAwLCB3ZSdyZSBwcm9iYWJseSBvbiBXaW5kb3dzIHdoZXJlIHRoZXJlIG1heSBiZQogICAgICAgICAgICAgIyBubyBvYnZpb3VzIHdheSB0byBkaXNjb3ZlciB3aHkgb3BlbigpIGZhaWxlZC4KQEAgLTM5NSw3ICszOTEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9GaWxlSU8sICIxIiwgMCwgMCkKIAogICAgIGRlZiB0ZXN0V2FybmluZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKHF1aWV0PVRydWUpIGFzIHc6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2FybmluZ3MsIFtdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfRmlsZUlPLCBbXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5IGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQppbmRleCAyYjI1MGRmLi4xOTY4YjhhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKQEAgLTcsNyArNyw2IEBACiBmcm9tIG1hdGggaW1wb3J0IGlzaW5mLCBpc25hbiwgY29weXNpZ24sIGxkZXhwCiBpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCByYW5kb20sIGZyYWN0aW9ucwotaW1wb3J0IHJlCiAKIElORiA9IGZsb2F0KCJpbmYiKQogTkFOID0gZmxvYXQoIm5hbiIpCkBAIC0xNyw4MyArMTYsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIF9fZ2V0Zm9ybWF0X18iKQogcmVxdWlyZXNfc2V0Zm9ybWF0ID0gdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZsb2F0LCAiX19zZXRmb3JtYXRfXyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgX19zZXRmb3JtYXRfXyIpCi0jIGRlY29yYXRvciBmb3Igc2tpcHBpbmcgdGVzdHMgb24gbm9uLUlFRUUgNzU0IHBsYXRmb3JtcwotcmVxdWlyZXNfSUVFRV83NTQgPSB1bml0dGVzdC5za2lwVW5sZXNzKGhhdmVfZ2V0Zm9ybWF0IGFuZAotICAgIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKIAogI2xvY2F0ZSBmaWxlIHdpdGggZmxvYXQgZm9ybWF0IHRlc3QgdmFsdWVzCiB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCiBmb3JtYXRfdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdmb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0JykKIAotZmluaXRlX2RlY2ltYWxfcGFyc2VyID0gcmUuY29tcGlsZShyIiIiICAgICMgQSBudW1lcmljIHN0cmluZyBjb25zaXN0cyBvZjoKLSAgICAoP1A8c2lnbj5bLStdKT8gICAgICAgICAgIyBhbiBvcHRpb25hbCBzaWduLCBmb2xsb3dlZCBieQotICAgICg/PVxkfFwuXGQpICAgICAgICAgICAgICAjIGEgbnVtYmVyIHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0Ci0gICAgKD9QPGludD5cZCopICAgICAgICAgICAgICMgaGF2aW5nIGEgKHBvc3NpYmx5IGVtcHR5KSBpbnRlZ2VyIHBhcnQKLSAgICAoPzpcLig/UDxmcmFjPlxkKikpPyAgICAgIyBmb2xsb3dlZCBieSBhbiBvcHRpb25hbCBmcmFjdGlvbmFsIHBhcnQKLSAgICAoPzpFKD9QPGV4cD5bLStdP1xkKykpPyAgIyBhbmQgYW4gb3B0aW9uYWwgZXhwb25lbnQKLSAgICBcWgotIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSB8IHJlLlVOSUNPREUpLm1hdGNoCi0KLSMgUHVyZSBQeXRob24gdmVyc2lvbiBvZiBjb3JyZWN0bHkgcm91bmRlZCBzdHJpbmctPmZsb2F0IGNvbnZlcnNpb24uCi0jIEF2b2lkcyBhbnkgdXNlIG9mIGZsb2F0aW5nLXBvaW50IGJ5IHJldHVybmluZyB0aGUgcmVzdWx0IGFzIGEgaGV4IHN0cmluZy4KLWRlZiBzdHJ0b2QocywgbWFudF9kaWc9NTMsIG1pbl9leHAgPSAtMTAyMSwgbWF4X2V4cCA9IDEwMjQpOgotICAgICIiIkNvbnZlcnQgYSBmaW5pdGUgZGVjaW1hbCBzdHJpbmcgdG8gYSBoZXggc3RyaW5nIHJlcHJlc2VudGluZyBhbgotICAgIElFRUUgNzU0IGJpbmFyeTY0IGZsb2F0LiAgUmV0dXJuICdpbmYnIG9yICctaW5mJyBvbiBvdmVyZmxvdy4KLSAgICBUaGlzIGZ1bmN0aW9uIG1ha2VzIG5vIHVzZSBvZiBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIGF0IGFueQotICAgIHN0YWdlLiIiIgotCi0gICAgIyBwYXJzZSBzdHJpbmcgaW50byBhIHBhaXIgb2YgaW50ZWdlcnMgJ2EnIGFuZCAnYicgc3VjaCB0aGF0Ci0gICAgIyBhYnMoZGVjaW1hbCB2YWx1ZSkgPSBhL2IsIGFuZCBhIGJvb2xlYW4gJ25lZ2F0aXZlJy4KLSAgICBtID0gZmluaXRlX2RlY2ltYWxfcGFyc2VyKHMpCi0gICAgaWYgbSBpcyBOb25lOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIG51bWVyaWMgc3RyaW5nJykKLSAgICBmcmFjdGlvbiA9IG0uZ3JvdXAoJ2ZyYWMnKSBvciAnJwotICAgIGludHBhcnQgPSBpbnQobS5ncm91cCgnaW50JykgKyBmcmFjdGlvbikKLSAgICBleHAgPSBpbnQobS5ncm91cCgnZXhwJykgb3IgJzAnKSAtIGxlbihmcmFjdGlvbikKLSAgICBuZWdhdGl2ZSA9IG0uZ3JvdXAoJ3NpZ24nKSA9PSAnLScKLSAgICBhLCBiID0gaW50cGFydCoxMCoqbWF4KGV4cCwgMCksIDEwKiptYXgoMCwgLWV4cCkKLQotICAgICMgcXVpY2sgcmV0dXJuIGZvciB6ZXJvcwotICAgIGlmIG5vdCBhOgotICAgICAgICByZXR1cm4gJy0weDAuMHArMCcgaWYgbmVnYXRpdmUgZWxzZSAnMHgwLjBwKzAnCi0KLSAgICAjIGNvbXB1dGUgZXhwb25lbnQgZSBmb3IgcmVzdWx0OyBtYXkgYmUgb25lIHRvbyBzbWFsbCBpbiB0aGUgY2FzZQotICAgICMgdGhhdCB0aGUgcm91bmRlZCB2YWx1ZSBvZiBhL2IgbGllcyBpbiBhIGRpZmZlcmVudCBiaW5hZGUgZnJvbSBhL2IKLSAgICBkID0gYS5iaXRfbGVuZ3RoKCkgLSBiLmJpdF9sZW5ndGgoKQotICAgIGQgKz0gKGEgPj4gZCBpZiBkID49IDAgZWxzZSBhIDw8IC1kKSA+PSBiCi0gICAgZSA9IG1heChkLCBtaW5fZXhwKSAtIG1hbnRfZGlnCi0KLSAgICAjIGFwcHJveGltYXRlIGEvYiBieSBudW1iZXIgb2YgdGhlIGZvcm0gcSAqIDIqKmU7IGFkanVzdCBlIGlmIG5lY2Vzc2FyeQotICAgIGEsIGIgPSBhIDw8IG1heCgtZSwgMCksIGIgPDwgbWF4KGUsIDApCi0gICAgcSwgciA9IGRpdm1vZChhLCBiKQotICAgIGlmIDIqciA+IGIgb3IgMipyID09IGIgYW5kIHEgJiAxOgotICAgICAgICBxICs9IDEKLSAgICAgICAgaWYgcS5iaXRfbGVuZ3RoKCkgPT0gbWFudF9kaWcrMToKLSAgICAgICAgICAgIHEgLy89IDIKLSAgICAgICAgICAgIGUgKz0gMQotCi0gICAgIyBkb3VibGUgY2hlY2sgdGhhdCAocSwgZSkgaGFzIHRoZSByaWdodCBmb3JtCi0gICAgYXNzZXJ0IHEuYml0X2xlbmd0aCgpIDw9IG1hbnRfZGlnIGFuZCBlID49IG1pbl9leHAgLSBtYW50X2RpZwotICAgIGFzc2VydCBxLmJpdF9sZW5ndGgoKSA9PSBtYW50X2RpZyBvciBlID09IG1pbl9leHAgLSBtYW50X2RpZwotCi0gICAgIyBjaGVjayBmb3Igb3ZlcmZsb3cgYW5kIHVuZGVyZmxvdwotICAgIGlmIGUgKyBxLmJpdF9sZW5ndGgoKSA+IG1heF9leHA6Ci0gICAgICAgIHJldHVybiAnLWluZicgaWYgbmVnYXRpdmUgZWxzZSAnaW5mJwotICAgIGlmIG5vdCBxOgotICAgICAgICByZXR1cm4gJy0weDAuMHArMCcgaWYgbmVnYXRpdmUgZWxzZSAnMHgwLjBwKzAnCi0KLSAgICAjIGZvciBoZXggcmVwcmVzZW50YXRpb24sIHNoaWZ0IHNvICMgYml0cyBhZnRlciBwb2ludCBpcyBhIG11bHRpcGxlIG9mIDQKLSAgICBoZXhkaWdzID0gMSArIChtYW50X2RpZy0yKS8vNAotICAgIHNoaWZ0ID0gMyAtIChtYW50X2RpZy0yKSU0Ci0gICAgcSwgZSA9IHEgPDwgc2hpZnQsIGUgLSBzaGlmdAotICAgIHJldHVybiAne30weHs6eH0uezowe314fXB7OitkfScuZm9ybWF0KAotICAgICAgICAnLScgaWYgbmVnYXRpdmUgZWxzZSAnJywKLSAgICAgICAgcSAvLyAxNioqaGV4ZGlncywKLSAgICAgICAgcSAlIDE2KipoZXhkaWdzLAotICAgICAgICBoZXhkaWdzLAotICAgICAgICBlICsgNCpoZXhkaWdzKQotCiBjbGFzcyBHZW5lcmFsRmxvYXRDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTExMiwxMSArMzksMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIrLmluZiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiLS4iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KGIiICBcdTA2NjMuXHUwNjYxXHUwNjY0ICAiLmRlY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykpLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgYiItIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbG9hdCwge30pCisgICAgICAgICMgTG9uZSBzdXJyb2dhdGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBmbG9hdCwgJ1x1RDhGMCcpCisgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICItMS43ZDI5IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIzRC0xNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgXHUwNjYzLlx1MDY2MVx1MDY2NCAgIiksIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIlxOe0VNIFNQQUNFfTMuMTRcTntFTiBTUEFDRX0iKSwgMy4xNCkKICAgICAgICAgIyBleHRyYSBsb25nIHN0cmluZ3Mgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0KICAgICAgICAgZmxvYXQoYicuJyArIGInMScqMTAwMCkKICAgICAgICAgZmxvYXQoJy4nICsgJzEnKjEwMDApCiAKKyAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgorICAgICAgICB0ZXN0bGlzdCA9ICgnXHhiZCcsICcxMjNceGJkJywgJyAgMTIzIDQ1NiAgJykKKyAgICAgICAgZm9yIHMgaW4gdGVzdGxpc3Q6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmxvYXQocykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzLnN0cmlwKCksIGUuYXJnc1swXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBpbnQoJXIpIHRvIHJhaXNlIGEgVmFsdWVFcnJvciIsIHMpCisKKwogICAgIEBzdXBwb3J0LnJ1bl93aXRoX2xvY2FsZSgnTENfTlVNRVJJQycsICdmcl9GUicsICdkZV9ERScpCiAgICAgZGVmIHRlc3RfZmxvYXRfd2l0aF9jb21tYShzZWxmKToKICAgICAgICAgIyBzZXQgbG9jYWxlIHRvIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgdXNlICcuJyBmb3IgdGhlIGRlY2ltYWwgcG9pbnQKQEAgLTIxOCwxMiArMTY0LDEyIEBACiAgICAgZGVmIHRlc3RfZmxvYXRfY29udGFpbm1lbnQoc2VsZik6CiAgICAgICAgIGZsb2F0cyA9IChJTkYsIC1JTkYsIDAuMCwgMS4wLCBOQU4pCiAgICAgICAgIGZvciBmIGluIGZsb2F0czoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmIGluIFtmXSwgIiclcicgbm90IGluIFtdIiAlIGYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZiBpbiAoZiwpLCAiJyVyJyBub3QgaW4gKCkiICUgZikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmIGluIHtmfSwgIiclcicgbm90IGluIHNldCgpIiAlIGYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZiBpbiB7ZjogTm9uZX0sICInJXInIG5vdCBpbiB7fSIgJSBmKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmLCBbZl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYsIChmLCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGYsIHtmfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZiwge2Y6IE5vbmV9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbZl0uY291bnQoZiksIDEsICJbXS5jb3VudCgnJXInKSAhPSAxIiAlIGYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZiBpbiBmbG9hdHMsICInJXInIG5vdCBpbiBjb250YWluZXIiICUgZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZiwgZmxvYXRzKQogCiAgICAgICAgIGZvciBmIGluIGZsb2F0czoKICAgICAgICAgICAgICMgbm9uaWRlbnRpY2FsIGNvbnRhaW5lcnMsIHNhbWUgdHlwZSwgc2FtZSBjb250ZW50cwpAQCAtMjQ2LDcgKzE5Miw3IEBACiAgICAgICAgICMgZGlzdGluZ3Vpc2hlcyAtMC4wIGFuZCAwLjAuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGEsIGNvcHlzaWduKDEuMCwgYSkpLCAoYiwgY29weXNpZ24oMS4wLCBiKSkpCiAKLSAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X2Zsb2F0X21vZChzZWxmKToKICAgICAgICAgIyBDaGVjayBiZWhhdmlvdXIgb2YgJSBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KICAgICAgICAgIyBJbiBwYXJ0aWN1bGFyLCBjaGVjayBzaWducyBvZiB6ZXJvcy4KQEAgLTI2Niw3ICsyMTIsMjA5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDFlLTEwMCwgLTEuMCksIC0xLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24obW9kKDEuMCwgLTEuMCksIC0wLjApCiAKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAorICAgIGRlZiB0ZXN0X2Zsb2F0X3BvdyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGJ1aWx0aW4gcG93IGFuZCAqKiBvcGVyYXRvciBmb3IgSUVFRSA3NTQgc3BlY2lhbCBjYXNlcy4KKyAgICAgICAgIyBTcGVjaWFsIGNhc2VzIHRha2VuIGZyb20gc2VjdGlvbiBGLjkuNC40IG9mIHRoZSBDOTkgc3BlY2lmaWNhdGlvbgogCisgICAgICAgIGZvciBwb3dfb3AgaW4gcG93LCBvcGVyYXRvci5wb3c6CisgICAgICAgICAgICAjIHgqKk5BTiBpcyBOQU4gZm9yIGFueSB4IGV4Y2VwdCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC1JTkYsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoLTEuMCwgTkFOKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKC0wLjUsIE5BTikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcCgtMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMC41LCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoMi4wLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoSU5GLCBOQU4pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCBOQU4pKSkKKworICAgICAgICAgICAgIyBOQU4qKnkgaXMgTkFOIGZvciBhbnkgeSBleGNlcHQgKy0wCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLUlORikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIC0yLjApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihwb3dfb3AoTkFOLCAtMS4wKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4ocG93X29wKE5BTiwgLTAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDAuNSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDEuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIDIuMCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHBvd19vcChOQU4sIElORikpKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBhIG5lZ2F0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMS4wKQorCisgICAgICAgICAgICAjICgrLTApKip5IHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvciBmb3IgeSBmaW5pdGUgYW5kIG5lZ2F0aXZlCisgICAgICAgICAgICAjIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBwb3dfb3AsIC0wLjAsIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgcG93X29wLCAtMC4wLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHBvd19vcCwgMC4wLCAtMC41KQorCisgICAgICAgICAgICAjICgrLTApKip5IGlzICstMCBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAxLjApLCAtMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAxLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKCstMCkqKnkgaXMgMCBmb3IgeSBmaW5pdGUgYW5kIHBvc2l0aXZlIGJ1dCBub3QgYW4gb2RkIGludGVnZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDAuNSksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0wLjAsIDIuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC4wLCAyLjApLCAwLjApCisKKyAgICAgICAgICAgICMgKC0xKSoqKy1pbmYgaXMgMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLUlORiksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIElORiksIDEuMCkKKworICAgICAgICAgICAgIyAxKip5IGlzIDEgZm9yIGFueSB5LCBldmVuIGlmIHkgaXMgYW4gaW5maW5pdHkgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC1JTkYpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0yLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0xLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjUpLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgMC41KSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgxLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgSU5GKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCBOQU4pLCAxLjApCisKKyAgICAgICAgICAgICMgeCoqKy0wIGlzIDEgZm9yIGFueSB4LCBldmVuIGlmIHggaXMgYSB6ZXJvLCBpbmZpbml0eSwgb3IgbmFuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoTkFOLCAwLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKE5BTiwgLTAuMCksIDEuMCkKKworICAgICAgICAgICAgIyB4Kip5IGRlZmVycyB0byBjb21wbGV4IHBvdyBmb3IgZmluaXRlIG5lZ2F0aXZlIHggYW5kCisgICAgICAgICAgICAjIG5vbi1pbnRlZ3JhbCB5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHBvd19vcCgtMi4wLCAtMC41KSksIGNvbXBsZXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocG93X29wKC0yLjAsIDAuNSkpLCBjb21wbGV4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHBvd19vcCgtMS4wLCAtMC41KSksIGNvbXBsZXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocG93X29wKC0xLjAsIDAuNSkpLCBjb21wbGV4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHBvd19vcCgtMC41LCAtMC41KSksIGNvbXBsZXgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocG93X29wKC0wLjUsIDAuNSkpLCBjb21wbGV4KQorCisgICAgICAgICAgICAjIHgqKi1JTkYgaXMgSU5GIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAtSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuMCwgLUlORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgLUlORiksIElORikKKworICAgICAgICAgICAgIyB4KiotSU5GIGlzIDAgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIC1JTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAtSU5GKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAtSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyAwIGZvciBhYnMoeCkgPCAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC4wLCBJTkYpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjAsIElORiksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgSU5GKSwgMC4wKQorCisgICAgICAgICAgICAjIHgqKklORiBpcyBJTkYgZm9yIGFicyh4KSA+IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC1JTkYsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIElORiksIElORikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgSU5GKSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCBJTkYpLCBJTkYpCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIC0wLjAgZm9yIHkgYSBuZWdhdGl2ZSBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTEuMCksIC0wLjApCisKKyAgICAgICAgICAgICMgKC1JTkYpKip5IGlzIDAuMCBmb3IgeSBuZWdhdGl2ZSBidXQgbm90IGFuIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAtMC41KSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgLTIuMCksIDAuMCkKKworICAgICAgICAgICAgIyAoLUlORikqKnkgaXMgLUlORiBmb3IgeSBhIHBvc2l0aXZlIG9kZCBpbnRlZ2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtSU5GLCAxLjApLCAtSU5GKQorCisgICAgICAgICAgICAjICgtSU5GKSoqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUgYnV0IG5vdCBhbiBvZGQgaW50ZWdlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLUlORiwgMi4wKSwgSU5GKQorCisgICAgICAgICAgICAjIElORioqeSBpcyBJTkYgZm9yIHkgcG9zaXRpdmUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKElORiwgMC41KSwgSU5GKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoSU5GLCAxLjApLCBJTkYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIDIuMCksIElORikKKworICAgICAgICAgICAgIyBJTkYqKnkgaXMgMC4wIGZvciB5IG5lZ2F0aXZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0yLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0xLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcChJTkYsIC0wLjUpLCAwLjApCisKKyAgICAgICAgICAgICMgYmFzaWMgY2hlY2tzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBzcGVjaWFsIGNhc2VzIGFib3ZlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAtMi4wKSwgMC4yNSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIC0xLjApLCAtMC41KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0yLjAsIDEuMCksIC0yLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMi4wLCAyLjApLCA0LjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMi4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgLTEuMCksIC0xLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMS4wLCAtMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMC4wKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTEuMCwgMS4wKSwgLTEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDIuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgLTIuMCksIDAuMjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0xLjApLCAwLjUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0wLjApLCAxLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIDAuMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDIuMCwgMS4wKSwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMi4wLCAyLjApLCA0LjApCisKKyAgICAgICAgICAgICMgMSAqKiBsYXJnZSBhbmQgLTEgKiogbGFyZ2U7IHNvbWUgbGlibXMgYXBwYXJlbnRseQorICAgICAgICAgICAgIyBoYXZlIHByb2JsZW1zIHdpdGggdGhlc2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDEuMCwgLTFlMTAwKSwgMS4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMS4wLCAxZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIC0xZTEwMCksIDEuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKC0xLjAsIDFlMTAwKSwgMS4wKQorCisgICAgICAgICAgICAjIGNoZWNrIHNpZ24gZm9yIHJlc3VsdHMgdGhhdCB1bmRlcmZsb3cgdG8gMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIwMDAuMCksIDAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShwb3dfb3AoLTIuMCwgLTIwMDAuNSkpLCBjb21wbGV4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTIuMCwgLTIwMDEuMCksIC0wLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0yMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0yMDAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgyLjAsIC0yMDAxLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgtMC41LCAyMDAwLjApLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocG93X29wKC0wLjUsIDIwMDAuNSkpLCBjb21wbGV4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoLTAuNSwgMjAwMS4wKSwgLTAuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxBbmRFcXVhbFNpZ24ocG93X29wKDAuNSwgMjAwMC4wKSwgMC4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEFuZEVxdWFsU2lnbihwb3dfb3AoMC41LCAyMDAwLjUpLCAwLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsQW5kRXF1YWxTaWduKHBvd19vcCgwLjUsIDIwMDEuMCksIDAuMCkKKworICAgICAgICAgICAgIyBjaGVjayB3ZSBkb24ndCByYWlzZSBhbiBleGNlcHRpb24gZm9yIHN1Ym5vcm1hbCByZXN1bHRzLAorICAgICAgICAgICAgIyBhbmQgdmFsaWRhdGUgc2lnbnMuICBUZXN0cyBjdXJyZW50bHkgZGlzYWJsZWQsIHNpbmNlCisgICAgICAgICAgICAjIHRoZXkgZmFpbCBvbiBzeXN0ZW1zIHdoZXJlIGEgc3Vibm9ybWFsIHJlc3VsdCBmcm9tIHBvdworICAgICAgICAgICAgIyBpcyBmbHVzaGVkIHRvIHplcm8gKGUuZy4gRGViaWFuL2lhNjQuKQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ4KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKC0wLjUsIDEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMC41LCAxMDQ3KSA8IDFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wID4gcG93X29wKC0wLjUsIDEwNDcpID4gLTFlLTMxNSkKKyAgICAgICAgICAgICNzZWxmLmFzc2VydFRydWUoMC4wIDwgcG93X29wKDIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoLTIuMCwgLTEwNDgpIDwgMWUtMzE1KQorICAgICAgICAgICAgI3NlbGYuYXNzZXJ0VHJ1ZSgwLjAgPCBwb3dfb3AoMi4wLCAtMTA0NykgPCAxZS0zMTUpCisgICAgICAgICAgICAjc2VsZi5hc3NlcnRUcnVlKDAuMCA+IHBvd19vcCgtMi4wLCAtMTA0NykgPiAtMWUtMzE1KQorCisKK0ByZXF1aXJlc19zZXRmb3JtYXQKIGNsYXNzIEZvcm1hdEZ1bmN0aW9uc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTI3OCwxMCArNDI2LDEwIEBACiAgICAgICAgIGZsb2F0Ll9fc2V0Zm9ybWF0X18oJ2Zsb2F0Jywgc2VsZi5zYXZlX2Zvcm1hdHNbJ2Zsb2F0J10pCiAKICAgICBkZWYgdGVzdF9nZXRmb3JtYXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbG9hdC5fX2dldGZvcm1hdF9fKCdkb3VibGUnKSBpbgotICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmxvYXQuX19nZXRmb3JtYXRfXygnZmxvYXQnKSBpbgotICAgICAgICAgICAgICAgICAgICAgWyd1bmtub3duJywgJ0lFRUUsIGJpZy1lbmRpYW4nLCAnSUVFRSwgbGl0dGxlLWVuZGlhbiddKQorICAgICAgICBzZWxmLmFzc2VydEluKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oJ2RvdWJsZScpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmbG9hdC5fX2dldGZvcm1hdF9fKCdmbG9hdCcpLAorICAgICAgICAgICAgICAgICAgICAgIFsndW5rbm93bicsICdJRUVFLCBiaWctZW5kaWFuJywgJ0lFRUUsIGxpdHRsZS1lbmRpYW4nXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQuX19nZXRmb3JtYXRfXywgJ2NoaWNrZW4nKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0Ll9fZ2V0Zm9ybWF0X18sIDEpCiAKQEAgLTMxNyw2ICs0NjUsNyBAQAogIyBvbiBub24tSUVFRSBwbGF0Zm9ybXMsIGF0dGVtcHRpbmcgdG8gdW5wYWNrIGEgYml0IHBhdHRlcm4KICMgcmVwcmVzZW50aW5nIGFuIGluZmluaXR5IG9yIGEgTmFOIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24uCiAKK0ByZXF1aXJlc19zZXRmb3JtYXQKIGNsYXNzIFVua25vd25Gb3JtYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfZm9ybWF0cyA9IHsnZG91YmxlJzpmbG9hdC5fX2dldGZvcm1hdF9fKCdkb3VibGUnKSwKQEAgLTM0OSwzNyArNDk4LDI1IEBACiAjIGxldCdzIGFsc28gdHJ5IHRvIGd1YXJhbnRlZSB0aGF0IC0wLjAgYW5kIDAuMCBkb24ndCBnZXQgY29uZnVzZWQuCiAKIGNsYXNzIElFRUVGb3JtYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdF9kb3VibGVfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgotICAgICAgICAgICAgZm9yIGZtdCwgZGF0YSBpbiBbKCc+ZCcsIEJFX0RPVUJMRV9JTkYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc+ZCcsIEJFX0RPVUJMRV9OQU4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9JTkYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9OQU4pXToKLSAgICAgICAgICAgICAgICBzdHJ1Y3QudW5wYWNrKGZtdCwgZGF0YSkKIAotICAgIGlmIGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImZsb2F0Iikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdF9mbG9hdF9zcGVjaWFsc19kb191bnBhY2soc2VsZik6Ci0gICAgICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5mJywgQkVfRkxPQVRfSU5GKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmYnLCBCRV9GTE9BVF9OQU4pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX0lORiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxmJywgTEVfRkxPQVRfTkFOKV06Ci0gICAgICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9kb3VibGVfc3BlY2lhbHNfZG9fdW5wYWNrKHNlbGYpOgorICAgICAgICBmb3IgZm10LCBkYXRhIGluIFsoJz5kJywgQkVfRE9VQkxFX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPmQnLCBCRV9ET1VCTEVfTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZCcsIExFX0RPVUJMRV9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzxkJywgTEVfRE9VQkxFX05BTildOgorICAgICAgICAgICAgc3RydWN0LnVucGFjayhmbXQsIGRhdGEpCiAKLSAgICBpZiBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgIGRlZiB0ZXN0X25lZ2F0aXZlX3plcm8oc2VsZik6Ci0gICAgICAgICAgICBpbXBvcnQgbWF0aAotICAgICAgICAgICAgZGVmIHBvc19wb3MoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gMC4wLCBtYXRoLmF0YW4yKDAuMCwgLTEpCi0gICAgICAgICAgICBkZWYgcG9zX25lZygpOgotICAgICAgICAgICAgICAgIHJldHVybiAwLjAsIG1hdGguYXRhbjIoLTAuMCwgLTEpCi0gICAgICAgICAgICBkZWYgbmVnX3BvcygpOgotICAgICAgICAgICAgICAgIHJldHVybiAtMC4wLCBtYXRoLmF0YW4yKDAuMCwgLTEpCi0gICAgICAgICAgICBkZWYgbmVnX25lZygpOgotICAgICAgICAgICAgICAgIHJldHVybiAtMC4wLCBtYXRoLmF0YW4yKC0wLjAsIC0xKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NfcG9zKCksIG5lZ19wb3MoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zX25lZygpLCBuZWdfbmVnKCkpCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9mbG9hdF9zcGVjaWFsc19kb191bnBhY2soc2VsZik6CisgICAgICAgIGZvciBmbXQsIGRhdGEgaW4gWygnPmYnLCBCRV9GTE9BVF9JTkYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJz5mJywgQkVfRkxPQVRfTkFOKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCc8ZicsIExFX0ZMT0FUX0lORiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnPGYnLCBMRV9GTE9BVF9OQU4pXToKKyAgICAgICAgICAgIHN0cnVjdC51bnBhY2soZm10LCBkYXRhKQogCiBjbGFzcyBGb3JtYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKICAgICBkZWYgdGVzdF9mb3JtYXQoc2VsZik6CiAgICAgICAgICMgdGhlc2Ugc2hvdWxkIGJlIHJld3JpdHRlbiB0byB1c2UgYm90aCBmb3JtYXQoeCwgc3BlYykgYW5kCiAgICAgICAgICMgeC5fX2Zvcm1hdF9fKHNwZWMpCkBAIC00MzMsOCArNTcwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoSU5GLCAnZicpLCAnaW5mJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoSU5GLCAnRicpLCAnSU5GJykKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X2Zvcm1hdF90ZXN0ZmlsZShzZWxmKToKICAgICAgICAgd2l0aCBvcGVuKGZvcm1hdF90ZXN0ZmlsZSkgYXMgdGVzdGZpbGU6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZmlsZToKQEAgLTUxNCwxMCArNjUwLDEzIEBACiAgICAgICAgICAgICBuZWdzID0gJy0nK3MKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgcmVwcihmbG9hdChzKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5lZ3MsIHJlcHIoZmxvYXQobmVncykpKQorICAgICAgICAgICAgIyBTaW5jZSBQeXRob24gMy4yLCByZXByIGFuZCBzdHIgYXJlIGlkZW50aWNhbAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGZsb2F0KHMpKSwgc3RyKGZsb2F0KHMpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmbG9hdChuZWdzKSksIHN0cihmbG9hdChuZWdzKSkpCiAKK0BzdXBwb3J0LnJlcXVpcmVzX0lFRUVfNzU0CiBjbGFzcyBSb3VuZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCisKICAgICBkZWYgdGVzdF9pbmZfbmFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByb3VuZCwgSU5GKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCByb3VuZCwgLUlORikKQEAgLTUyNyw4ICs2NjYsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCBOQU4sICJjZWNpIG4nZXN0IHBhcyB1biBpbnRlZ2VyIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByb3VuZCwgLTAuMCwgMWopCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgSUVFRSA3NTQgZG91YmxlcyIpCiAgICAgZGVmIHRlc3RfbGFyZ2VfbihzZWxmKToKICAgICAgICAgZm9yIG4gaW4gWzMyNCwgMzI1LCA0MDAsIDIqKjMxLTEsIDIqKjMxLCAyKiozMiwgMioqMTAwXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMTIzLjQ1NiwgbiksIDEyMy40NTYpCkBAIC01NDEsOCArNjc4LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3VuZCgxZTE1MCwgMzA5KSwgMWUxNTApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMS40ZS0zMTUsIDMxNSksIDFlLTMxNSkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKICAgICBkZWYgdGVzdF9zbWFsbF9uKHNlbGYpOgogICAgICAgICBmb3IgbiBpbiBbLTMwOCwgLTMwOSwgLTQwMCwgMS0yKiozMSwgLTIqKjMxLCAtMioqMzEtMSwgLTIqKjEwMF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDEyMy40NTYsIG4pLCAwLjApCkBAIC01NTAsOCArNjg1LDYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm91bmQoMWUzMDAsIG4pLCAwLjApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKDFlLTMyMCwgbiksIDAuMCkKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKICAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcm91bmQsIDEuNmUzMDgsIC0zMDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHJvdW5kLCAtMS43ZTMwOCwgLTMwOCkKQEAgLTU5OSw2ICs3MzIsMzUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoZm9ybWF0KHgsICcuMmYnKSksIHJvdW5kKHgsIDIpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChmb3JtYXQoeCwgJy4zZicpKSwgcm91bmQoeCwgMykpCiAKKyAgICBkZWYgdGVzdF9mb3JtYXRfc3BlY2lhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3JtYXR0aW5nIG9mIG5hbnMgYW5kIGluZnMuCisKKyAgICAgICAgZGVmIHRlc3QoZm10LCB2YWx1ZSwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgIyBUZXN0IHdpdGggYm90aCAlIGFuZCBmb3JtYXQoKS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10ICUgdmFsdWUsIGV4cGVjdGVkLCBmbXQpCisgICAgICAgICAgICBmbXQgPSBmbXRbMTpdICMgc3RyaXAgb2ZmIHRoZSAlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdCh2YWx1ZSwgZm10KSwgZXhwZWN0ZWQsIGZtdCkKKworICAgICAgICBmb3IgZm10IGluIFsnJWUnLCAnJWYnLCAnJWcnLCAnJS4wZScsICclLjZmJywgJyUuMjBnJywKKyAgICAgICAgICAgICAgICAgICAgJyUjZScsICclI2YnLCAnJSNnJywgJyUjLjIwZScsICclIy4xNWYnLCAnJSMuM2cnXToKKyAgICAgICAgICAgIHBmbXQgPSAnJSsnICsgZm10WzE6XQorICAgICAgICAgICAgc2ZtdCA9ICclICcgKyBmbXRbMTpdCisgICAgICAgICAgICB0ZXN0KGZtdCwgSU5GLCAnaW5mJykKKyAgICAgICAgICAgIHRlc3QoZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KGZtdCwgTkFOLCAnbmFuJykKKyAgICAgICAgICAgIHRlc3QoZm10LCAtTkFOLCAnbmFuJykKKyAgICAgICAgICAgICMgV2hlbiBhc2tpbmcgZm9yIGEgc2lnbiwgaXQncyBhbHdheXMgcHJvdmlkZWQuIG5hbnMgYXJlCisgICAgICAgICAgICAjICBhbHdheXMgcG9zaXRpdmUuCisgICAgICAgICAgICB0ZXN0KHBmbXQsIElORiwgJytpbmYnKQorICAgICAgICAgICAgdGVzdChwZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KHBmbXQsIE5BTiwgJytuYW4nKQorICAgICAgICAgICAgdGVzdChwZm10LCAtTkFOLCAnK25hbicpCisgICAgICAgICAgICAjIFdoZW4gdXNpbmcgJyAnIGZvciBhIHNpZ24gY29kZSwgb25seSBpbmZzIGNhbiBiZSBuZWdhdGl2ZS4KKyAgICAgICAgICAgICMgIE90aGVycyBoYXZlIGEgc3BhY2UuCisgICAgICAgICAgICB0ZXN0KHNmbXQsIElORiwgJyBpbmYnKQorICAgICAgICAgICAgdGVzdChzZm10LCAtSU5GLCAnLWluZicpCisgICAgICAgICAgICB0ZXN0KHNmbXQsIE5BTiwgJyBuYW4nKQorICAgICAgICAgICAgdGVzdChzZm10LCAtTkFOLCAnIG5hbicpCiAKIAogIyBCZWdpbm5pbmcgd2l0aCBQeXRob24gMi42IGZsb2F0IGhhcyBjcm9zcyBwbGF0Zm9ybSBjb21wYXRpYmxlCkBAIC0xMTIyLDM4ICsxMjg0LDYgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5pZGVudGljYWwoeCwgZnJvbUhleCh0b0hleCh4KSkpCiAKLWNsYXNzIFN0cnRvZFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY2hlY2tfc3RyaW5nKHNlbGYsIHMpOgotICAgICAgICBleHBlY3RlZCA9IHN0cnRvZChzKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcyA9IGZsb2F0KHMpCi0gICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgZ290ID0gJy1pbmYnIGlmIHNbMF0gPT0gJy0nIGVsc2UgJ2luZicKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdvdCA9IGZzLmhleCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiSW5jb3JyZWN0bHkgcm91bmRlZCBzdHItPmZsb2F0IGNvbnZlcnNpb24gZm9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAie306IGV4cGVjdGVkIHt9LCBnb3Qge30iLmZvcm1hdChzLCBleHBlY3RlZCwgZ290KSkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3lzLCAnZmxvYXRfcmVwcl9zdHlsZScsICcnKSA9PSAnc2hvcnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKLSAgICBkZWYgdGVzdF9idWc3NjMyKHNlbGYpOgotICAgICAgICAjIGNoZWNrIGEgZmV3IHBhcnRpY3VsYXIgdmFsdWVzIHRoYXQgZ2F2ZSBpbmNvcnJlY3RseSByb3VuZGVkCi0gICAgICAgICMgcmVzdWx0cyB3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIGR0b2EuYwotICAgICAgICB0ZXN0X3N0cmluZ3MgPSBbCi0gICAgICAgICAgICAnOTQzOTM0MzExOTMxODA2OTY5NDI4NDE4MzcwODUwMzM2NDc5MTMyMjQxNDg1Mzk4NTRlLTM1OCcsCi0gICAgICAgICAgICAnMTI1Nzk4MTYwNDkwMDgzMDU1NDY5NzQzOTE3Njg5OTYzNjk0NjQ5NjMwMjQ2NjMxMDRlLTM1NycsCi0gICAgICAgICAgICAnMTc0ODk2Mjg1NjUyMDIxMTcyNjMxNDUzNjc1OTYwMjgzODkzNDg5MjI5ODE4NTcwMTNlLTM1NycsCi0gICAgICAgICAgICAnMTg0ODczOTg3ODU5OTE5OTQ2MzQxODI5MTY2Mzg1NDI2ODA3NTk2MTM1OTA0ODIyNzNlLTM1NycsCi0gICAgICAgICAgICAnMzIwMDI4NjQyMDA1ODEwMzMxMzQzNTg3MjQ2NzUxOTgwNDQ1Mjc0NjkzNjY3NzM5MjhlLTM1OCcsCi0gICAgICAgICAgICAnNzM2MDgyNzg5OTg5NjY5NjkzNDU4MjQ2NTM1MDAxMzY3ODc4NzY0MzYwMDU5NTc5NTNlLTM1OCcsCi0gICAgICAgICAgICAnNjQ3NzQ0Nzg4MzY0MTcyOTk0OTE3MTg0MzUyMzQ2MTEyOTkzMzYyODgwODIxMzYwNTRlLTM1OCcsCi0gICAgICAgICAgICAnMTM3MDQ5NDAxMzQxMjY1NzQ1MzQ4Nzg2NDE4NzY5NDc5ODA4Nzg4MjQ2ODg0NTExNjllLTM1NycsCi0gICAgICAgICAgICAnNDY2OTc0NDU3NzQwNDcwNjA5NjA2MjQ0OTc5NjQ0MjU0MTY2MTA0ODA1MjQ3NjA0NzFlLTM1OCcsCi0gICAgICAgICAgICBdCi0gICAgICAgIGZvciBzIGluIHRlc3Rfc3RyaW5nczoKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RyaW5nKHMpCi0KIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KApAQCAtMTE2Niw3ICsxMjk2LDYgQEAKICAgICAgICAgUm91bmRUZXN0Q2FzZSwKICAgICAgICAgSW5mTmFuVGVzdCwKICAgICAgICAgSGV4RmxvYXRUZXN0Q2FzZSwKLSAgICAgICAgU3RydG9kVGVzdENhc2UsCiAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weSBiL0xpYi90ZXN0L3Rlc3RfZm5tYXRjaC5weQppbmRleCBiZGU0ZWU4Li40ODI4MzVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZubWF0Y2gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbm1hdGNoLnB5CkBAIC0zLDE0ICszLDEwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gsIGZubWF0Y2hjYXNlLCBfTUFYQ0FDSEUsIF9jYWNoZSwgX2NhY2hlYiwgX3B1cmdlCi0KK2Zyb20gZm5tYXRjaCBpbXBvcnQgZm5tYXRjaCwgZm5tYXRjaGNhc2UsIHRyYW5zbGF0ZSwgZmlsdGVyCiAKIGNsYXNzIEZubWF0Y2hUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIF9wdXJnZSgpCi0KICAgICBkZWYgY2hlY2tfbWF0Y2goc2VsZiwgZmlsZW5hbWUsIHBhdHRlcm4sIHNob3VsZF9tYXRjaD0xLCBmbj1mbm1hdGNoKToKICAgICAgICAgaWYgc2hvdWxkX21hdGNoOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZuKGZpbGVuYW1lLCBwYXR0ZXJuKSwKQEAgLTY0LDI0ICs2MCwyOSBAQAogICAgICAgICBzZWxmLmNoZWNrX21hdGNoKGIndGVzdFx4ZmYnLCBiJ3RlKlx4ZmYnKQogICAgICAgICBzZWxmLmNoZWNrX21hdGNoKGInZm9vXG5iYXInLCBiJ2ZvbyonKQogCi0gICAgZGVmIHRlc3RfY2FjaGVfY2xlYXJpbmcoc2VsZik6Ci0gICAgICAgICMgY2hlY2sgdGhhdCBjYWNoZXMgZG8gbm90IGdyb3cgdG9vIGxhcmdlCi0gICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTc4NDYKK2NsYXNzIFRyYW5zbGF0ZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgICAgICAjIHN0cmluZyBwYXR0ZXJuIGNhY2hlCi0gICAgICAgIGZvciBpIGluIHJhbmdlKF9NQVhDQUNIRSArIDEpOgotICAgICAgICAgICAgZm5tYXRjaCgnZm9vJywgJz8nICogaSkKKyAgICBkZWYgdGVzdF90cmFuc2xhdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNsYXRlKCcqJyksICcuKlxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zbGF0ZSgnPycpLCAnLlxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zbGF0ZSgnYT9iKicpLCAnYS5iLipcWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc2xhdGUoJ1thYmNdJyksICdbYWJjXVxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zbGF0ZSgnW11dJyksICdbXV1cWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc2xhdGUoJ1sheF0nKSwgJ1teeF1cWig/bXMpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc2xhdGUoJ1teeF0nKSwgJ1tcXF54XVxaKD9tcyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zbGF0ZSgnW3gnKSwgJ1xcW3hcWig/bXMpJykKIAotICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChsZW4oX2NhY2hlKSwgX01BWENBQ0hFKQogCi0gICAgICAgICMgYnl0ZXMgcGF0dGVybiBjYWNoZQotICAgICAgICBmb3IgaSBpbiByYW5nZShfTUFYQ0FDSEUgKyAxKToKLSAgICAgICAgICAgIGZubWF0Y2goYidmb28nLCBiJz8nICogaSkKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKF9jYWNoZWIpLCBfTUFYQ0FDSEUpCitjbGFzcyBGaWx0ZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsdGVyKFsnYScsICdiJ10sICdhJyksIFsnYSddKQogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGbm1hdGNoVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRm5tYXRjaFRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZVRlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlclRlc3RDYXNlKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQppbmRleCA4OGY5ZmU5Li44MTkyYzM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKQEAgLTEsMjEgKzEsMjEgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBlcnJubwogaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHRocmVhZGluZwogCiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbiwgZ2V0X2F0dHJpYnV0ZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIHJlYXBfY2hpbGRyZW4sIGdldF9hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9tb2R1bGUsIHZlcmJvc2UpCisKK3RocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKICMgU2tpcCB0ZXN0IGlmIGZvcmsgZG9lcyBub3QgZXhpc3QuCiBnZXRfYXR0cmlidXRlKG9zLCAnZm9yaycpCiAKLQogY2xhc3MgRm9ya1Rlc3QoRm9ya1dhaXQpOgogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKQEAgLTI5LDcgKzI5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGlkLCBjcGlkKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCwgImNhdXNlID0gJWQsIGV4aXQgPSAlZCIgJSAoc3RhdHVzJjB4ZmYsIHN0YXR1cz4+OCkpCiAKLSAgICBkZWYgdGVzdF9pbXBvcnRfbG9ja19mb3JrKHNlbGYpOgorICAgIGRlZiB0ZXN0X3RocmVhZGVkX2ltcG9ydF9sb2NrX2Zvcmsoc2VsZik6CisgICAgICAgICIiIkNoZWNrIGZvcmsoKSBpbiBtYWluIHRocmVhZCB3b3JrcyB3aGlsZSBhIHN1YnRocmVhZCBpcyBkb2luZyBhbiBpbXBvcnQiIiIKICAgICAgICAgaW1wb3J0X3N0YXJ0ZWQgPSB0aHJlYWRpbmcuRXZlbnQoKQogICAgICAgICBmYWtlX21vZHVsZV9uYW1lID0gImZha2UgdGVzdCBtb2R1bGUiCiAgICAgICAgIHBhcnRpYWxfbW9kdWxlID0gInBhcnRpYWwiCkBAIC00NiwxMSArNDcsMTYgQEAKICAgICAgICAgaW1wb3J0X3N0YXJ0ZWQud2FpdCgpCiAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQogICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFB5T1NfQmVmb3JlRm9yayBzaG91bGQgaGF2ZSB3YWl0ZWQgZm9yIHRoZSBpbXBvcnQgdG8gY29tcGxldGUKKyAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcsIHNvIHRoZSBjaGlsZCBjYW4gcmVjcmVhdGUgdGhlIGltcG9ydCBsb2NrCisgICAgICAgICAgICAjIGNvcnJlY3RseSwgYnV0IGFsc28gd29uJ3Qgc2VlIGEgcGFydGlhbGx5IGluaXRpYWxpc2VkIG1vZHVsZQogICAgICAgICAgICAgaWYgbm90IHBpZDoKICAgICAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmYWtlX21vZHVsZV9uYW1lKQogICAgICAgICAgICAgICAgIGlmIG0gPT0gY29tcGxldGVfbW9kdWxlOgogICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIkNoaWxkIGVuY291bnRlcmVkIHBhcnRpYWwgbW9kdWxlIikKICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdC5qb2luKCkKQEAgLTY0LDYgKzcwLDM5IEBACiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKKworICAgIGRlZiB0ZXN0X25lc3RlZF9pbXBvcnRfbG9ja19mb3JrKHNlbGYpOgorICAgICAgICAiIiJDaGVjayBmb3JrKCkgaW4gbWFpbiB0aHJlYWQgd29ya3Mgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzIGRvaW5nIGFuIGltcG9ydCIiIgorICAgICAgICAjIElzc3VlIDk1NzM6IHRoaXMgdXNlZCB0byB0cmlnZ2VyIFJ1bnRpbWVFcnJvciBpbiB0aGUgY2hpbGQgcHJvY2VzcworICAgICAgICBkZWYgZm9ya193aXRoX2ltcG9ydF9sb2NrKGxldmVsKToKKyAgICAgICAgICAgIHJlbGVhc2UgPSAwCisgICAgICAgICAgICBpbl9jaGlsZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZXZlbCk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgKz0gMQorICAgICAgICAgICAgICAgICAgICBwaWQgPSBvcy5mb3JrKCkKKyAgICAgICAgICAgICAgICAgICAgaW5fY2hpbGQgPSBub3QgcGlkCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UocmVsZWFzZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBpbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgaW5fY2hpbGQ6CisgICAgICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlJ1bnRpbWVFcnJvciBpbiBjaGlsZCIpCisgICAgICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGlmIGluX2NoaWxkOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBzZWxmLndhaXRfaW1wbChwaWQpCisKKyAgICAgICAgIyBDaGVjayB0aGlzIHdvcmtzIHdpdGggdmFyaW91cyBsZXZlbHMgb2YgbmVzdGVkCisgICAgICAgICMgaW1wb3J0IGluIHRoZSBtYWluIHRocmVhZAorICAgICAgICBmb3IgbGV2ZWwgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBmb3JrX3dpdGhfaW1wb3J0X2xvY2sobGV2ZWwpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChGb3JrVGVzdCkKICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKaW5kZXggMDU0YmFmNi4uN2ZhOTUwZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKQEAgLTEwLDEwICsxMCw3IEBACiAjIHRoZXkgY3Jhc2ggcHl0aG9uKQogIyB0ZXN0IG9uIHVuaWNvZGUgc3RyaW5ncyBhcyB3ZWxsCiAKLW92ZXJmbG93b2sgPSAxCi1vdmVyZmxvd3JlcXVpcmVkID0gMAotCi1kZWYgdGVzdGZvcm1hdChmb3JtYXRzdHIsIGFyZ3MsIG91dHB1dD1Ob25lLCBsaW1pdD1Ob25lKToKK2RlZiB0ZXN0Zm9ybWF0KGZvcm1hdHN0ciwgYXJncywgb3V0cHV0PU5vbmUsIGxpbWl0PU5vbmUsIG92ZXJmbG93b2s9RmFsc2UpOgogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIGlmIG91dHB1dDoKICAgICAgICAgICAgIHByaW50KCIlciAlJSAlciA9PyAlciAuLi4iICVcCkBAIC0yOCwxNSArMjUsOSBAQAogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ292ZXJmbG93ICh0aGlzIGlzIGZpbmUpJykKICAgICBlbHNlOgotICAgICAgICBpZiBvdmVyZmxvd3JlcXVpcmVkOgorICAgICAgICBpZiBvdXRwdXQgYW5kIGxpbWl0IGlzIE5vbmUgYW5kIHJlc3VsdCAhPSBvdXRwdXQ6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50KCdubycpCi0gICAgICAgICAgICBwcmludCgib3ZlcmZsb3cgZXhwZWN0ZWQgb24gJXIgJSUgJXIiICUgKGZvcm1hdHN0ciwgYXJncykpCi0gICAgICAgIGVsaWYgb3V0cHV0IGFuZCBsaW1pdCBpcyBOb25lIGFuZCByZXN1bHQgIT0gb3V0cHV0OgotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnbm8nKQotICAgICAgICAgICAgI3ByaW50KCIlciAlJSAlciA9PSAlciAhPSAlciIgJVwKLSAgICAgICAgICAgICMgICAgKGZvcm1hdHN0ciwgYXJncywgcmVzdWx0LCBvdXRwdXQpKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIiVyICUlICVyID09ICVyICE9ICVyIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXRzdHIsIGFyZ3MsIHJlc3VsdCwgb3V0cHV0KSkKICAgICAgICAgIyB3aGVuICdsaW1pdCcgaXMgc3BlY2lmaWVkLCBpdCBkZXRlcm1pbmVzIGhvdyBtYW55IGNoYXJhY3RlcnMKQEAgLTU4LDEwICs0OSwxOCBAQAogY2xhc3MgRm9ybWF0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgogICAgICAgICB0ZXN0Zm9ybWF0KCIlLjFkIiwgKDEsKSwgIjEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlLipkIiwgKHN5cy5tYXhzaXplLDEpKSAgIyBleHBlY3Qgb3ZlcmZsb3cKLSAgICAgICAgdGVzdGZvcm1hdCgiJS4xMDBkIiwgKDEsKSwgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4xMTd4IiwgKDEsKSwgJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxJykKLSAgICAgICAgdGVzdGZvcm1hdCgiJSMuMTE4eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnKQorICAgICAgICB0ZXN0Zm9ybWF0KCIlLipkIiwgKHN5cy5tYXhzaXplLDEpLCBvdmVyZmxvd29rPVRydWUpICAjIGV4cGVjdCBvdmVyZmxvdworICAgICAgICB0ZXN0Zm9ybWF0KCIlLjEwMGQiLCAoMSwpLCAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnCisgICAgICAgICAgICAgICAgICcwMDAwMDAwMScsIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGZvcm1hdCgiJSMuMTE3eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMScsCisgICAgICAgICAgICAgICAgIG92ZXJmbG93b2s9VHJ1ZSkKKyAgICAgICAgdGVzdGZvcm1hdCgiJSMuMTE4eCIsICgxLCksICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgICAgICAgICAgICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLAorICAgICAgICAgICAgICAgICBvdmVyZmxvd29rPVRydWUpCiAKICAgICAgICAgdGVzdGZvcm1hdCgiJWYiLCAoMS4wLCksICIxLjAwMDAwMCIpCiAgICAgICAgICMgdGhlc2UgYXJlIHRyeWluZyB0byB0ZXN0IHRoZSBsaW1pdHMgb2YgdGhlIGludGVybmFsIG1hZ2ljLW51bWJlci1sZW5ndGgKQEAgLTcyLDE1ICs3MSwxNSBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4qZyIsICgxMTAsIC0xLmUrMTAwLzMuKSkKICAgICAgICAgIyB0ZXN0IHNvbWUgcmlkaWN1bG91c2x5IGxhcmdlIHByZWNpc2lvbiwgZXhwZWN0IG92ZXJmbG93CiAgICAgICAgIHRlc3Rmb3JtYXQoJyUxMi4qZicsICgxMjM0NTYsIDEuMCkpCisKICAgICAgICAgIyBjaGVjayBmb3IgaW50ZXJuYWwgb3ZlcmZsb3cgdmFsaWRhdGlvbiBvbiBsZW5ndGggb2YgcHJlY2lzaW9uCi0gICAgICAgIG92ZXJmbG93cmVxdWlyZWQgPSAxCisgICAgICAgICMgdGhlc2UgdGVzdHMgc2hvdWxkIG5vIGxvbmdlciBjYXVzZSBvdmVyZmxvdyBpbiBQeXRob24KKyAgICAgICAgIyAyLjcvMy4xIGFuZCBsYXRlci4KICAgICAgICAgdGVzdGZvcm1hdCgiJSMuKmciLCAoMTEwLCAtMS5lKzEwMC8zLikpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjLipHIiwgKDExMCwgLTEuZSsxMDAvMy4pKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlIy4qZiIsICgxMTAsIC0xLmUrMTAwLzMuKSkKICAgICAgICAgdGVzdGZvcm1hdCgiJSMuKkYiLCAoMTEwLCAtMS5lKzEwMC8zLikpCi0gICAgICAgIG92ZXJmbG93cmVxdWlyZWQgPSAwCiAgICAgICAgICMgRm9ybWF0dGluZyBvZiBpbnRlZ2Vycy4gT3ZlcmZsb3cgaXMgbm90IG9rCi0gICAgICAgIG92ZXJmbG93b2sgPSAwCiAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgMTAsICJhIikKICAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAxMDAwMDAwMDAwMDAsICIxNzQ4NzZlODAwIikKICAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCAxMCwgIjEyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJhY3Rpb25zLnB5IGIvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKaW5kZXggMTdmZGI3Zi4uMjZlMTMyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkKQEAgLTEsNyArMSw3IEBACiAiIiJUZXN0cyBmb3IgTGliL2ZyYWN0aW9ucy5weS4iIiIKIAogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZXF1aXJlc19JRUVFXzc1NAogaW1wb3J0IG1hdGgKIGltcG9ydCBudW1iZXJzCiBpbXBvcnQgb3BlcmF0b3IKQEAgLTEzMCwxMyArMTMwLDMzIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKFplcm9EaXZpc2lvbkVycm9yLCAiRnJhY3Rpb24oMTIsIDApIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEYsIDEyLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDEuNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCAxLjUgKyAzaikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsICIzLzIiLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDMsIDBqKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIDMsIDFqKQogCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RJbml0RnJvbUZsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAyKSwgX2NvbXBvbmVudHMoRigyLjUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksIF9jb21wb25lbnRzKEYoLTAuMCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgzNjAyODc5NzAxODk2Mzk3LCAzNjAyODc5NzAxODk2Mzk2OCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRigwLjEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnbmFuJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCctaW5mJykpCisKKyAgICBkZWYgdGVzdEluaXRGcm9tRGVjaW1hbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTEsIDEwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJzEuMScpKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDcsIDIwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCczLjVlLTInKSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKERlY2ltYWwoJy4wMDBlMjAnKSkpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIERlY2ltYWwoJ3NuYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCctaW5mJykpCiAKICAgICBkZWYgdGVzdEZyb21TdHJpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDUsIDEpLCBfY29tcG9uZW50cyhGKCI1IikpKQpAQCAtMjE2LDEwICsyMzYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsIDEpLCBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMTAuMCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtNSwgMiksIF9jb21wb25lbnRzKEYuZnJvbV9mbG9hdCgtMi41KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDk5OTk5OTk5OTk5OTk5OTkxNjExMzkyLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDFlMjMpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMWUyMykpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KDEwKioyMyksIGZsb2F0KEYuZnJvbV9mbG9hdCgxZTIzKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDExMjU4OTk5MDY4NDI2MjQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGLmZyb21fZmxvYXQoMy4yKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRi5mcm9tX2Zsb2F0KDMuMikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMuMiwgZmxvYXQoRi5mcm9tX2Zsb2F0KDMuMikpKQogCiAgICAgICAgIGluZiA9IDFlMTAwMApAQCAtMzcwLDEyICszOTAsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFscygxLjAgKyAwaiwgKDEuMCArIDBqKSAqKiBGKDEsIDEwKSkKIAogICAgIGRlZiB0ZXN0TWl4aW5nV2l0aERlY2ltYWwoc2VsZik6Ci0gICAgICAgICMgRGVjaW1hbCByZWZ1c2VzIG1peGVkIGNvbXBhcmlzb25zLgorICAgICAgICAjIERlY2ltYWwgcmVmdXNlcyBtaXhlZCBhcml0aG1ldGljIChidXQgbm90IG1peGVkIGNvbXBhcmlzb25zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCiAgICAgICAgICAgICBUeXBlRXJyb3IsCiAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlKHMpIGZvciArOiAnRnJhY3Rpb24nIGFuZCAnRGVjaW1hbCciLAogICAgICAgICAgICAgb3BlcmF0b3IuYWRkLCBGKDMsMTEpLCBEZWNpbWFsKCczLjE0MTU5MjYnKSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChGKDUsIDIpLCBEZWNpbWFsKCcyLjUnKSkKIAogICAgIGRlZiB0ZXN0Q29tcGFyaXNvbnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEsIDIpIDwgRigyLCAzKSkKQEAgLTQ3OSw4ICs0OTgsMjEgQEAKIAogICAgIGRlZiB0ZXN0QmlnQ29tcGxleENvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEYoMTAqKjIzKSA9PSBjb21wbGV4KDEwKioyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGKDEwKioyMykgPiBjb21wbGV4KDEwKioyMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoRigxMCoqMjMpIDw9IGNvbXBsZXgoMTAqKjIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgRigxMCoqMjMpLCBjb21wbGV4KDEwKioyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubGUsIEYoMTAqKjIzKSwgY29tcGxleCgxMCoqMjMpKQorCisgICAgICAgIHggPSBGKDMsIDgpCisgICAgICAgIHogPSBjb21wbGV4KDAuMzc1LCAwLjApCisgICAgICAgIHcgPSBjb21wbGV4KDAuMzc1LCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4ID09IHopCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoeCAhPSB6KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHggPT0gdykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggIT0gdykKKyAgICAgICAgZm9yIG9wIGluIG9wZXJhdG9yLmx0LCBvcGVyYXRvci5sZSwgb3BlcmF0b3IuZ3QsIG9wZXJhdG9yLmdlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgeCwgeikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHosIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wLCB4LCB3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgdywgeCkKIAogICAgIGRlZiB0ZXN0TWl4ZWRFcXVhbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNSA9PSBGKDEsIDIpKQpAQCAtNDk5LDkgKzUzMSw5IEBACiAgICAgZGVmIHRlc3RTdHJpbmdpZmljYXRpb24oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZyYWN0aW9uKDcsIDMpIiwgcmVwcihGKDcsIDMpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oNjI4MzE4NTMwNywgMjAwMDAwMDAwMCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoJzMuMTQxNTkyNjUzNScpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoJzMuMTQxNTkyNjUzNScpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRnJhY3Rpb24oLTEsIDEwMDAwMDAwMDAwMDAwMDAwMDAwMCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKEYoMSwgLTEwKioyMCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoRigxLCAtMTAqKjIwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjcvMyIsIHN0cihGKDcsIDMpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNyIsIHN0cihGKDcsIDEpKSkKIApAQCAtNTA5LDYgKzU0MSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaCgyLjUpLCBoYXNoKEYoNSwgMikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goMTAqKjUwKSwgaGFzaChGKDEwKio1MCkpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2goZmxvYXQoMTAqKjIzKSksIGhhc2goRigxMCoqMjMpKSkKKyAgICAgICAgIyBDaGVjayB0aGF0IF9faGFzaF9fIHByb2R1Y2VzIHRoZSBzYW1lIHZhbHVlIGFzIGhhc2goKSwgZm9yCisgICAgICAgICMgY29uc2lzdGVuY3kgd2l0aCBpbnQgYW5kIERlY2ltYWwuICAoU2VlIGlzc3VlICMxMDM1Ni4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChGKC0xKSksIEYoLTEpLl9faGFzaF9fKCkpCiAKICAgICBkZWYgdGVzdEFwcHJveGltYXRlUGkoc2VsZik6CiAgICAgICAgICMgQWxnb3JpdGhtIGJvcnJvd2VkIGZyb20KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5IGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKaW5kZXggZDA3MjE0NS4uMDcxMzFhZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mcm96ZW4ucHkKQEAgLTIsNyArMiw3IEBACiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzLCBvcworaW1wb3J0IHN5cwogCiBjbGFzcyBGcm96ZW5UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZnJvemVuKHNlbGYpOgpAQCAtMTEsNyArMTEsNyBAQAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX2hlbGxvX18uaW5pdGlhbGl6ZWQsIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcihfX2hlbGxvX18pKSwgNiwgZGlyKF9faGVsbG9fXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcihfX2hlbGxvX18pKSwgNywgZGlyKF9faGVsbG9fXykpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18KQEAgLTE5LDkgKzE5LDkgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18gZmFpbGVkOiIgKyBzdHIoeCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5pbml0aWFsaXplZCwgVHJ1ZSkKICAgICAgICAgaWYgbm90ICJfX3BoZWxsb19fLnNwYW0iIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlyKF9fcGhlbGxvX18pKSwgNywgZGlyKF9fcGhlbGxvX18pKQotICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlyKF9fcGhlbGxvX18pKSwgOCwgZGlyKF9fcGhlbGxvX18pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlyKF9fcGhlbGxvX18pKSwgOSwgZGlyKF9fcGhlbGxvX18pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uX19wYXRoX18sIFtfX3BoZWxsb19fLl9fbmFtZV9fXSkKIAogICAgICAgICB0cnk6CkBAIC0yOSw4ICsyOSw4IEBACiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgogICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5zcGFtIGZhaWxlZDoiICsgc3RyKHgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlyKF9fcGhlbGxvX18uc3BhbSkpLCA2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXIoX19waGVsbG9fXykpLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXIoX19waGVsbG9fXy5zcGFtKSksIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpcihfX3BoZWxsb19fKSksIDkpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCkBAIC0zOSwxMyArMzksMTIgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCiAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAibWFjIjogICMgT24gdGhlIE1hYyB0aGlzIGltcG9ydCBkb2VzIHN1Y2NlZWQuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLmZvbyBzaG91bGQgaGF2ZSBmYWlsZWQiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fLmZvbworICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgX19waGVsbG9fXy5mb28gc2hvdWxkIGhhdmUgZmFpbGVkIikKIAogICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19faGVsbG9fXyddCiAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snX19waGVsbG9fXyddCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z0cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CmluZGV4IGZhMTA3OWYuLjlkMmVhYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5CkBAIC0xLDE3ICsxLDI1IEBACiAiIiJUZXN0IHNjcmlwdCBmb3IgZnRwbGliIG1vZHVsZS4iIiIKIAotIyBNb2RpZmllZCBieSBHaWFtcGFvbG8gUm9kb2xhJyB0byB0ZXN0IEZUUCBjbGFzcyBhbmQgSVB2NiBlbnZpcm9ubWVudAorIyBNb2RpZmllZCBieSBHaWFtcGFvbG8gUm9kb2xhJyB0byB0ZXN0IEZUUCBjbGFzcywgSVB2NiBhbmQgVExTCisjIGVudmlyb25tZW50CiAKIGltcG9ydCBmdHBsaWIKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBhc3luY29yZQogaW1wb3J0IGFzeW5jaGF0CiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgaW8KK2ltcG9ydCBlcnJubworaW1wb3J0IG9zCitpbXBvcnQgdGltZQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCiAKIGZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIT1NUCit0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiAKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCiAjIFJFVFIsIExJU1QgYW5kIE5MU1QgY29tbWFuZHMgYXJlIGlzc3VlZApAQCAtMjEsNiArMjksNyBAQAogCiAKIGNsYXNzIER1bW15RFRQSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKKyAgICBkdHBfY29ubl9jbG9zZWQgPSBGYWxzZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcyk6CiAgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubikKQEAgLTMxLDE1ICs0MCwyNSBAQAogICAgICAgICBzZWxmLmJhc2VjbGFzcy5sYXN0X3JlY2VpdmVkX2RhdGEgKz0gc2VsZi5yZWN2KDEwMjQpLmRlY29kZSgnYXNjaWknKQogCiAgICAgZGVmIGhhbmRsZV9jbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5iYXNlY2xhc3MucHVzaCgnMjI2IHRyYW5zZmVyIGNvbXBsZXRlJykKLSAgICAgICAgc2VsZi5jbG9zZSgpCisgICAgICAgICMgWFhYOiB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG1hbnkgdGltZXMgaW4gYSByb3cgZm9yIGEgc2luZ2xlCisgICAgICAgICMgY29ubmVjdGlvbiwgaW5jbHVkaW5nIGluIGNsZWFyLXRleHQgKG5vbi1UTFMpIG1vZGUuCisgICAgICAgICMgKGJlaGF2aW91ciB3aXRuZXNzZWQgd2l0aCB0ZXN0X2RhdGFfY29ubmVjdGlvbikKKyAgICAgICAgaWYgbm90IHNlbGYuZHRwX2Nvbm5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5iYXNlY2xhc3MucHVzaCgnMjI2IHRyYW5zZmVyIGNvbXBsZXRlJykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5kdHBfY29ubl9jbG9zZWQgPSBUcnVlCiAKICAgICBkZWYgcHVzaChzZWxmLCB3aGF0KToKICAgICAgICAgc3VwZXIoRHVtbXlEVFBIYW5kbGVyLCBzZWxmKS5wdXNoKHdoYXQuZW5jb2RlKCdhc2NpaScpKQogCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmKToKKyAgICAgICAgcmFpc2UKKwogCiBjbGFzcyBEdW1teUZUUEhhbmRsZXIoYXN5bmNoYXQuYXN5bmNfY2hhdCk6CiAKKyAgICBkdHBfaGFuZGxlciA9IER1bW15RFRQSGFuZGxlcgorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKQEAgLTQ4LDYgKzY3LDcgQEAKICAgICAgICAgc2VsZi5sYXN0X3JlY2VpdmVkX2NtZCA9IE5vbmUKICAgICAgICAgc2VsZi5sYXN0X3JlY2VpdmVkX2RhdGEgPSAnJwogICAgICAgICBzZWxmLm5leHRfcmVzcG9uc2UgPSAnJworICAgICAgICBzZWxmLnJlc3QgPSBOb25lCiAgICAgICAgIHNlbGYucHVzaCgnMjIwIHdlbGNvbWUnKQogCiAgICAgZGVmIGNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLCBkYXRhKToKQEAgLTgzLDQxICsxMDMsNDQgQEAKICAgICAgICAgaXAgPSAnJWQuJWQuJWQuJWQnICV0dXBsZShhZGRyWzo0XSkKICAgICAgICAgcG9ydCA9IChhZGRyWzRdICogMjU2KSArIGFkZHJbNV0KICAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTEwKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIAogICAgIGRlZiBjbWRfcGFzdihzZWxmLCBhcmcpOgotICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCi0gICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKLSAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCi0gICAgICAgIGlwID0gaXAucmVwbGFjZSgnLicsICcsJyk7IHAxID0gcG9ydCAvIDI1NjsgcDIgPSBwb3J0ICUgMjU2Ci0gICAgICAgIHNlbGYucHVzaCgnMjI3IGVudGVyaW5nIHBhc3NpdmUgbW9kZSAoJXMsJWQsJWQpJyAlKGlwLCBwMSwgcDIpKQotICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKKyAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCisgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCisgICAgICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpOyBwMSA9IHBvcnQgLyAyNTY7IHAyID0gcG9ydCAlIDI1NgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCisgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKGNvbm4sIGJhc2VjbGFzcz1zZWxmKQogCiAgICAgZGVmIGNtZF9lcHJ0KHNlbGYsIGFyZyk6CiAgICAgICAgIGFmLCBpcCwgcG9ydCA9IGFyZy5zcGxpdChhcmdbMF0pWzE6LTFdCiAgICAgICAgIHBvcnQgPSBpbnQocG9ydCkKICAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PTEwKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIAogICAgIGRlZiBjbWRfZXBzdihzZWxmLCBhcmcpOgotICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYpCi0gICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCi0gICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKLSAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICBzZWxmLnB1c2goJzIyOSBlbnRlcmluZyBleHRlbmRlZCBwYXNzaXZlIG1vZGUgKHx8fCVkfCknICVwb3J0KQotICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQotICAgICAgICBzZWxmLmR0cCA9IER1bW15RFRQSGFuZGxlcihjb25uLCBiYXNlY2xhc3M9c2VsZikKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikgYXMgc29jazoKKyAgICAgICAgICAgIHNvY2suYmluZCgoc2VsZi5zb2NrZXQuZ2V0c29ja25hbWUoKVswXSwgMCkpCisgICAgICAgICAgICBzb2NrLmxpc3Rlbig1KQorICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KDEwKQorICAgICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjkgZW50ZXJpbmcgZXh0ZW5kZWQgcGFzc2l2ZSBtb2RlICh8fHwlZHwpJyAlcG9ydCkKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBzZWxmLmR0cCA9IHNlbGYuZHRwX2hhbmRsZXIoY29ubiwgYmFzZWNsYXNzPXNlbGYpCiAKICAgICBkZWYgY21kX2VjaG8oc2VsZiwgYXJnKToKICAgICAgICAgIyBzZW5kcyBiYWNrIHRoZSByZWNlaXZlZCBzdHJpbmcgKHVzZWQgYnkgdGhlIHRlc3Qgc3VpdGUpCiAgICAgICAgIHNlbGYucHVzaChhcmcpCiAKKyAgICBkZWYgY21kX25vb3Aoc2VsZiwgYXJnKToKKyAgICAgICAgc2VsZi5wdXNoKCcyMDAgbm9vcCBvaycpCisKICAgICBkZWYgY21kX3VzZXIoc2VsZiwgYXJnKToKICAgICAgICAgc2VsZi5wdXNoKCczMzEgdXNlcm5hbWUgb2snKQogCkBAIC0xNjEsMTAgKzE4NCwxOSBAQAogICAgIGRlZiBjbWRfc3RvcihzZWxmLCBhcmcpOgogICAgICAgICBzZWxmLnB1c2goJzEyNSBzdG9yIG9rJykKIAorICAgIGRlZiBjbWRfcmVzdChzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnJlc3QgPSBhcmcKKyAgICAgICAgc2VsZi5wdXNoKCczNTAgcmVzdCBvaycpCisKICAgICBkZWYgY21kX3JldHIoc2VsZiwgYXJnKToKICAgICAgICAgc2VsZi5wdXNoKCcxMjUgcmV0ciBvaycpCi0gICAgICAgIHNlbGYuZHRwLnB1c2goUkVUUl9EQVRBKQorICAgICAgICBpZiBzZWxmLnJlc3QgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvZmZzZXQgPSBpbnQoc2VsZi5yZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gMAorICAgICAgICBzZWxmLmR0cC5wdXNoKFJFVFJfREFUQVtvZmZzZXQ6XSkKICAgICAgICAgc2VsZi5kdHAuY2xvc2Vfd2hlbl9kb25lKCkKKyAgICAgICAgc2VsZi5yZXN0ID0gTm9uZQogCiAgICAgZGVmIGNtZF9saXN0KHNlbGYsIGFyZyk6CiAgICAgICAgIHNlbGYucHVzaCgnMTI1IGxpc3Qgb2snKQpAQCAtMTkwLDYgKzIyMiw3IEBACiAgICAgICAgIHNlbGYuYWN0aXZlID0gRmFsc2UKICAgICAgICAgc2VsZi5hY3RpdmVfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzoyXQorICAgICAgICBzZWxmLmhhbmRsZXJfaW5zdGFuY2UgPSBOb25lCiAKICAgICBkZWYgc3RhcnQoc2VsZik6CiAgICAgICAgIGFzc2VydCBub3Qgc2VsZi5hY3RpdmUKQEAgLTIxMSwxMCArMjQ0LDggQEAKICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQogICAgICAgICBzZWxmLmpvaW4oKQogCi0gICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6Ci0gICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmFjY2VwdCgpCi0gICAgICAgIHNlbGYuaGFuZGxlciA9IHNlbGYuaGFuZGxlcihjb25uKQotICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgorICAgICAgICBzZWxmLmhhbmRsZXJfaW5zdGFuY2UgPSBzZWxmLmhhbmRsZXIoY29ubikKIAogICAgIGRlZiBoYW5kbGVfY29ubmVjdChzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZSgpCkBAIC0yMjcsNiArMjU4LDE1NCBAQAogICAgICAgICByYWlzZQogCiAKK2lmIHNzbCBpcyBub3QgTm9uZToKKworICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisKKyAgICBjbGFzcyBTU0xDb25uZWN0aW9uKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorICAgICAgICAiIiJBbiBhc3luY29yZS5kaXNwYXRjaGVyIHN1YmNsYXNzIHN1cHBvcnRpbmcgVExTL1NTTC4iIiIKKworICAgICAgICBfc3NsX2FjY2VwdGluZyA9IEZhbHNlCisgICAgICAgIF9zc2xfY2xvc2luZyA9IEZhbHNlCisKKyAgICAgICAgZGVmIHNlY3VyZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICBzb2NrZXQgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIHN1cHByZXNzX3JhZ2dlZF9lb2ZzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLCBzZXJ2ZXJfc2lkZT1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBzZWxmLnNldF9zb2NrZXQoc29ja2V0KQorICAgICAgICAgICAgc2VsZi5fc3NsX2FjY2VwdGluZyA9IFRydWUKKworICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgX2RvX3NzbF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgICAgIHNlbGYuX3NzbF9jbG9zaW5nID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0ID0gc2VsZi5zb2NrZXQudW53cmFwKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAjIEFueSAic29ja2V0IGVycm9yIiBjb3JyZXNwb25kcyB0byBhIFNTTF9FUlJPUl9TWVNDQUxMIHJldHVybgorICAgICAgICAgICAgICAgICMgZnJvbSBPcGVuU1NMJ3MgU1NMX3NodXRkb3duKCksIGNvcnJlc3BvbmRpbmcgdG8gYQorICAgICAgICAgICAgICAgICMgY2xvc2VkIHNvY2tldCBjb25kaXRpb24uIFNlZSBhbHNvOgorICAgICAgICAgICAgICAgICMgaHR0cDovL3d3dy5tYWlsLWFyY2hpdmUuY29tL29wZW5zc2wtdXNlcnNAb3BlbnNzbC5vcmcvbXNnNjA3MTAuaHRtbAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHNlbGYuX3NzbF9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLmNsb3NlKCkKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWRfZXZlbnQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9zc2xfY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5oYW5kbGVfcmVhZF9ldmVudCgpCisKKyAgICAgICAgZGVmIGhhbmRsZV93cml0ZV9ldmVudChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3NzbF9hY2NlcHRpbmc6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbGlmIHNlbGYuX3NzbF9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9zaHV0ZG93bigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLmhhbmRsZV93cml0ZV9ldmVudCgpCisKKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLnNlbmQoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX0VPRiwgc3NsLlNTTF9FUlJPUl9aRVJPX1JFVFVSTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBkZWYgcmVjdihzZWxmLCBidWZmZXJfc2l6ZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFNTTENvbm5lY3Rpb24sIHNlbGYpLnJlY3YoYnVmZmVyX3NpemUpCisgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5TU0xfRVJST1JfV0FOVF9XUklURSk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiJycKKyAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoc3NsLlNTTF9FUlJPUl9FT0YsIHNzbC5TU0xfRVJST1JfWkVST19SRVRVUk4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiJycKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIGlmIChpc2luc3RhbmNlKHNlbGYuc29ja2V0LCBzc2wuU1NMU29ja2V0KSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5fc3Nsb2JqIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICBzZWxmLl9kb19zc2xfc2h1dGRvd24oKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzdXBlcihTU0xDb25uZWN0aW9uLCBzZWxmKS5jbG9zZSgpCisKKworICAgIGNsYXNzIER1bW15VExTX0RUUEhhbmRsZXIoU1NMQ29ubmVjdGlvbiwgRHVtbXlEVFBIYW5kbGVyKToKKyAgICAgICAgIiIiQSBEdW1teURUUEhhbmRsZXIgc3ViY2xhc3Mgc3VwcG9ydGluZyBUTFMvU1NMLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uLCBiYXNlY2xhc3MpOgorICAgICAgICAgICAgRHVtbXlEVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGNvbm4sIGJhc2VjbGFzcykKKyAgICAgICAgICAgIGlmIHNlbGYuYmFzZWNsYXNzLnNlY3VyZV9kYXRhX2NoYW5uZWw6CisgICAgICAgICAgICAgICAgc2VsZi5zZWN1cmVfY29ubmVjdGlvbigpCisKKworICAgIGNsYXNzIER1bW15VExTX0ZUUEhhbmRsZXIoU1NMQ29ubmVjdGlvbiwgRHVtbXlGVFBIYW5kbGVyKToKKyAgICAgICAgIiIiQSBEdW1teUZUUEhhbmRsZXIgc3ViY2xhc3Mgc3VwcG9ydGluZyBUTFMvU1NMLiIiIgorCisgICAgICAgIGR0cF9oYW5kbGVyID0gRHVtbXlUTFNfRFRQSGFuZGxlcgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25uKToKKyAgICAgICAgICAgIER1bW15RlRQSGFuZGxlci5fX2luaXRfXyhzZWxmLCBjb25uKQorICAgICAgICAgICAgc2VsZi5zZWN1cmVfZGF0YV9jaGFubmVsID0gRmFsc2UKKworICAgICAgICBkZWYgY21kX2F1dGgoc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY2hhbm5lbC4iIiIKKyAgICAgICAgICAgIHNlbGYucHVzaCgnMjM0IEFVVEggVExTIHN1Y2Nlc3NmdWwnKQorICAgICAgICAgICAgc2VsZi5zZWN1cmVfY29ubmVjdGlvbigpCisKKyAgICAgICAgZGVmIGNtZF9wYnN6KHNlbGYsIGxpbmUpOgorICAgICAgICAgICAgIiIiTmVnb3RpYXRlIHNpemUgb2YgYnVmZmVyIGZvciBzZWN1cmUgZGF0YSB0cmFuc2Zlci4KKyAgICAgICAgICAgIEZvciBUTFMvU1NMIHRoZSBvbmx5IHZhbGlkIHZhbHVlIGZvciB0aGUgcGFyYW1ldGVyIGlzICcwJy4KKyAgICAgICAgICAgIEFueSBvdGhlciB2YWx1ZSBpcyBhY2NlcHRlZCBidXQgaWdub3JlZC4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgc2VsZi5wdXNoKCcyMDAgUEJTWj0wIHN1Y2Nlc3NmdWwuJykKKworICAgICAgICBkZWYgY21kX3Byb3Qoc2VsZiwgbGluZSk6CisgICAgICAgICAgICAiIiJTZXR1cCB1bi9zZWN1cmUgZGF0YSBjaGFubmVsLiIiIgorICAgICAgICAgICAgYXJnID0gbGluZS51cHBlcigpCisgICAgICAgICAgICBpZiBhcmcgPT0gJ0MnOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjAwIFByb3RlY3Rpb24gc2V0IHRvIENsZWFyJykKKyAgICAgICAgICAgICAgICBzZWxmLnNlY3VyZV9kYXRhX2NoYW5uZWwgPSBGYWxzZQorICAgICAgICAgICAgZWxpZiBhcmcgPT0gJ1AnOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnMjAwIFByb3RlY3Rpb24gc2V0IHRvIFByaXZhdGUnKQorICAgICAgICAgICAgICAgIHNlbGYuc2VjdXJlX2RhdGFfY2hhbm5lbCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoKCI1MDIgVW5yZWNvZ25pemVkIFBST1QgdHlwZSAodXNlIEMgb3IgUCkuIikKKworCisgICAgY2xhc3MgRHVtbXlUTFNfRlRQU2VydmVyKER1bW15RlRQU2VydmVyKToKKyAgICAgICAgaGFuZGxlciA9IER1bW15VExTX0ZUUEhhbmRsZXIKKworCiBjbGFzcyBUZXN0RlRQQ2xhc3MoVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjg1LDEyICs0NjQsMTIgQEAKIAogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5jbGllbnQucmVuYW1lKCdhJywgJ2InKQotICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyLm5leHRfcmVzcG9uc2UgPSAnMjAwJworICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLm5leHRfcmVzcG9uc2UgPSAnMjAwJwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcmVwbHksIHNlbGYuY2xpZW50LnJlbmFtZSwgJ2EnLCAnYicpCiAKICAgICBkZWYgdGVzdF9kZWxldGUoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpZW50LmRlbGV0ZSgnZm9vJykKLSAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlci5uZXh0X3Jlc3BvbnNlID0gJzE5OScKKyAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzE5OScKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZnRwbGliLmVycm9yX3JlcGx5LCBzZWxmLmNsaWVudC5kZWxldGUsICdmb28nKQogCiAgICAgZGVmIHRlc3Rfc2l6ZShzZWxmKToKQEAgLTMxOSw2ICs0OTgsMTcgQEAKICAgICAgICAgc2VsZi5jbGllbnQucmV0cmJpbmFyeSgncmV0cicsIGNhbGxiYWNrKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4ocmVjZWl2ZWQpLCBSRVRSX0RBVEEpCiAKKyAgICBkZWYgdGVzdF9yZXRyYmluYXJ5X3Jlc3Qoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjayhkYXRhKToKKyAgICAgICAgICAgIHJlY2VpdmVkLmFwcGVuZChkYXRhLmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgZm9yIHJlc3QgaW4gKDAsIDEwLCAyMCk6CisgICAgICAgICAgICByZWNlaXZlZCA9IFtdCisgICAgICAgICAgICBzZWxmLmNsaWVudC5yZXRyYmluYXJ5KCdyZXRyJywgY2FsbGJhY2ssIHJlc3Q9cmVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihyZWNlaXZlZCksIFJFVFJfREFUQVtyZXN0Ol0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0ncmVzdCB0ZXN0IGNhc2UgJWQgJWQgJWQnICUgKHJlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbignJy5qb2luKHJlY2VpdmVkKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihSRVRSX0RBVEFbcmVzdDpdKSkpCisKICAgICBkZWYgdGVzdF9yZXRybGluZXMoc2VsZik6CiAgICAgICAgIHJlY2VpdmVkID0gW10KICAgICAgICAgc2VsZi5jbGllbnQucmV0cmxpbmVzKCdyZXRyJywgcmVjZWl2ZWQuYXBwZW5kKQpAQCAtMzI3LDE3ICs1MTcsMjQgQEAKICAgICBkZWYgdGVzdF9zdG9yYmluYXJ5KHNlbGYpOgogICAgICAgICBmID0gaW8uQnl0ZXNJTyhSRVRSX0RBVEEuZW5jb2RlKCdhc2NpaScpKQogICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfZGF0YSwgUkVUUl9EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXJfaW5zdGFuY2UubGFzdF9yZWNlaXZlZF9kYXRhLCBSRVRSX0RBVEEpCiAgICAgICAgICMgdGVzdCBuZXcgY2FsbGJhY2sgYXJnCiAgICAgICAgIGZsYWcgPSBbXQogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgc2VsZi5jbGllbnQuc3RvcmJpbmFyeSgnc3RvcicsIGYsIGNhbGxiYWNrPWxhbWJkYSB4OiBmbGFnLmFwcGVuZChOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZsYWcpCiAKKyAgICBkZWYgdGVzdF9zdG9yYmluYXJ5X3Jlc3Qoc2VsZik6CisgICAgICAgIGYgPSBpby5CeXRlc0lPKFJFVFJfREFUQS5yZXBsYWNlKCdcclxuJywgJ1xuJykuZW5jb2RlKCdhc2NpaScpKQorICAgICAgICBmb3IgciBpbiAoMzAsICczMCcpOgorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBzZWxmLmNsaWVudC5zdG9yYmluYXJ5KCdzdG9yJywgZiwgcmVzdD1yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLnJlc3QsIHN0cihyKSkKKwogICAgIGRlZiB0ZXN0X3N0b3JsaW5lcyhzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oUkVUUl9EQVRBLnJlcGxhY2UoJ1xyXG4nLCAnXG4nKS5lbmNvZGUoJ2FzY2lpJykpCiAgICAgICAgIHNlbGYuY2xpZW50LnN0b3JsaW5lcygnc3RvcicsIGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2RhdGEsIFJFVFJfREFUQSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfZGF0YSwgUkVUUl9EQVRBKQogICAgICAgICAjIHRlc3QgbmV3IGNhbGxiYWNrIGFyZwogICAgICAgICBmbGFnID0gW10KICAgICAgICAgZi5zZWVrKDApCkBAIC0zNTQsMTYgKzU1MSw3NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4obCksIExJU1RfREFUQS5yZXBsYWNlKCdcclxuJywgJycpKQogCiAgICAgZGVmIHRlc3RfbWFrZXBvcnQoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xpZW50Lm1ha2Vwb3J0KCkKLSAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHJ0IGhhcyBub3QgYmVlbiB1c2VkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlci5sYXN0X3JlY2VpdmVkX2NtZCwgJ3BvcnQnKQorICAgICAgICB3aXRoIHNlbGYuY2xpZW50Lm1ha2Vwb3J0KCk6CisgICAgICAgICAgICAjIElQdjQgaXMgaW4gdXNlLCBqdXN0IG1ha2Ugc3VyZSBzZW5kX2VwcnQgaGFzIG5vdCBiZWVuIHVzZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvcnQnKQogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCiAgICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgICMgSVB2NCBpcyBpbiB1c2UsIGp1c3QgbWFrZSBzdXJlIHNlbmRfZXBzdiBoYXMgbm90IGJlZW4gdXNlZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9jbWQsICdwYXN2JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAncGFzdicpCisKKyAgICBkZWYgdGVzdF93aXRoX3N0YXRlbWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgZGVmIGlzX2NsaWVudF9jb25uZWN0ZWQoKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2xpZW50LnNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKKyAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgICMgYmFzZSB0ZXN0CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PTEwKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX2NsaWVudF9jb25uZWN0ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLCAncXVpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQorCisgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jaworICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0xMCkgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXJfaW5zdGFuY2UubGFzdF9yZWNlaXZlZF9jbWQsICdxdWl0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc19jbGllbnRfY29ubmVjdGVkKCkpCisKKyAgICAgICAgIyBmb3JjZSBhIHdyb25nIHJlc3BvbnNlIGNvZGUgdG8gYmUgc2VudCBvbiBRVUlUOiBlcnJvcl9wZXJtCisgICAgICAgICMgaXMgZXhwZWN0ZWQgYW5kIHRoZSBjb25uZWN0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIGNsb3NlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0xMCkgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LnNlbmRjbWQoJ25vb3AnKQorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmhhbmRsZXJfaW5zdGFuY2UubmV4dF9yZXNwb25zZSA9ICc1NTAgZXJyb3Igb24gcXVpdCcKKyAgICAgICAgZXhjZXB0IGZ0cGxpYi5lcnJvcl9wZXJtIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICc1NTAgZXJyb3Igb24gcXVpdCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKyAgICAgICAgIyBuZWVkZWQgdG8gZ2l2ZSB0aGUgdGhyZWFkZWQgc2VydmVyIHNvbWUgdGltZSB0byBzZXQgdGhlIGF0dHJpYnV0ZQorICAgICAgICAjIHdoaWNoIG90aGVyd2lzZSB3b3VsZCBzdGlsbCBiZSA9PSAnbm9vcCcKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3F1aXQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX2NsaWVudF9jb25uZWN0ZWQoKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlMjU3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ0cGxpYi5wYXJzZTI1NygnMjU3ICIvZm9vL2JhciInKSwgJy9mb28vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHBsaWIucGFyc2UyNTcoJzI1NyAiL2Zvby9iYXIiIGNyZWF0ZWQnKSwgJy9mb28vYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHBsaWIucGFyc2UyNTcoJzI1NyAiIicpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHBsaWIucGFyc2UyNTcoJzI1NyAiIiBjcmVhdGVkJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5wYXJzZTI1NywgJzI1MCAiL2Zvby9iYXIiJykKKyAgICAgICAgIyBUaGUgMjU3IHJlc3BvbnNlIGlzIHN1cHBvc2VkIHRvIGluY2x1ZGUgdGhlIGRpcmVjdG9yeQorICAgICAgICAjIG5hbWUgYW5kIGluIGNhc2UgaXQgY29udGFpbnMgZW1iZWRkZWQgZG91YmxlLXF1b3RlcworICAgICAgICAjIHRoZXkgbXVzdCBiZSBkb3VibGVkIChzZWUgUkZDLTk1OSwgY2hhcHRlciA3LCBhcHBlbmRpeCAyKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdHBsaWIucGFyc2UyNTcoJzI1NyAiL2Zvby9iIiJhciInKSwgJy9mb28vYiJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwbGliLnBhcnNlMjU3KCcyNTcgIi9mb28vYiIiYXIiIGNyZWF0ZWQnKSwgJy9mb28vYiJhcicpCiAKIAogY2xhc3MgVGVzdElQdjZFbnZpcm9ubWVudChUZXN0Q2FzZSk6CkBAIC0zODIsMTQgKzYzNywxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LmFmLCBzb2NrZXQuQUZfSU5FVDYpCiAKICAgICBkZWYgdGVzdF9tYWtlcG9ydChzZWxmKToKLSAgICAgICAgc2VsZi5jbGllbnQubWFrZXBvcnQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLmhhbmRsZXIubGFzdF9yZWNlaXZlZF9jbWQsICdlcHJ0JykKKyAgICAgICAgd2l0aCBzZWxmLmNsaWVudC5tYWtlcG9ydCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyX2luc3RhbmNlLmxhc3RfcmVjZWl2ZWRfY21kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXBydCcpCiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKICAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQogICAgICAgICBjb25uLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5oYW5kbGVyLmxhc3RfcmVjZWl2ZWRfY21kLCAnZXBzdicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCiAgICAgZGVmIHRlc3RfdHJhbnNmZXIoc2VsZik6CiAgICAgICAgIGRlZiByZXRyKCk6CkBAIC00MDQsNiArNjYwLDEwMCBAQAogICAgICAgICByZXRyKCkKIAogCitjbGFzcyBUZXN0VExTX0ZUUENsYXNzTWl4aW4oVGVzdEZUUENsYXNzKToKKyAgICAiIiJSZXBlYXQgVGVzdEZUUENsYXNzIHRlc3RzIHN0YXJ0aW5nIHRoZSBUTFMgbGF5ZXIgZm9yIGJvdGggY29udHJvbAorICAgIGFuZCBkYXRhIGNvbm5lY3Rpb25zIGZpcnN0LgorICAgICIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgICMgZW5hYmxlIFRMUworICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKworCitjbGFzcyBUZXN0VExTX0ZUUENsYXNzKFRlc3RDYXNlKToKKyAgICAiIiJTcGVjaWZpYyBUTFNfRlRQIGNsYXNzIHRlc3RzLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCisgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTEwKQorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9jb250cm9sX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisKKyAgICBkZWYgdGVzdF9kYXRhX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgY2xlYXIgdGV4dAorICAgICAgICB3aXRoIHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykgYXMgc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgICAgICMgc2VjdXJlZCwgYWZ0ZXIgUFJPVCBQCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQudm9pZHJlc3AoKSwgIjIyNiB0cmFuc2ZlciBjb21wbGV0ZSIpCisKKyAgICAgICAgIyBQUk9UIEMgaXMgaXNzdWVkLCB0aGUgY29ubmVjdGlvbiBtdXN0IGJlIGluIGNsZWFydGV4dCBhZ2FpbgorICAgICAgICBzZWxmLmNsaWVudC5wcm90X2MoKQorICAgICAgICB3aXRoIHNlbGYuY2xpZW50LnRyYW5zZmVyY21kKCdsaXN0JykgYXMgc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpZW50LnZvaWRyZXNwKCksICIyMjYgdHJhbnNmZXIgY29tcGxldGUiKQorCisgICAgZGVmIHRlc3RfbG9naW4oc2VsZik6CisgICAgICAgICMgbG9naW4oKSBpcyBzdXBwb3NlZCB0byBpbXBsaWNpdGx5IHNlY3VyZSB0aGUgY29udHJvbCBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICBzZWxmLmNsaWVudC5sb2dpbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICAjIG1ha2Ugc3VyZSB0aGF0IEFVVEggVExTIGRvZXNuJ3QgZ2V0IGlzc3VlZCBhZ2FpbgorICAgICAgICBzZWxmLmNsaWVudC5sb2dpbigpCisKKyAgICBkZWYgdGVzdF9hdXRoX2lzc3VlZF90d2ljZShzZWxmKToKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCisKKyAgICBkZWYgdGVzdF9hdXRoX3NzbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5jbGllbnQuc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjMKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5jbGllbnQuYXV0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnNzbF92ZXJzaW9uID0gc3NsLlBST1RPQ09MX1RMU3YxCisKKyAgICBkZWYgdGVzdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdHBsaWIuRlRQX1RMUywga2V5ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ0cGxpYi5GVFBfVExTLCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ0cGxpYi5GVFBfVExTLCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyhjb250ZXh0PWN0eCwgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKKyAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5jbGllbnQuc29jay5jb250ZXh0LCBjdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmNsaWVudC5zb2NrLCBzc2wuU1NMU29ja2V0KQorCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLmNvbnRleHQsIGN0eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzb2NrLCBzc2wuU1NMU29ja2V0KQorCisKIGNsYXNzIFRlc3RUaW1lb3V0cyhUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00MTksNiArNzY5LDcgQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCiAKICAgICBkZWYgc2VydmVyKHNlbGYsIGV2dCwgc2Vydik6CiAgICAgICAgICMgVGhpcyBtZXRob2Qgc2V0cyB0aGUgZXZ0IDMgdGltZXM6CkBAIC01MDUsNiArODU2LDEwIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0ZXN0cy5hcHBlbmQoVGVzdElQdjZFbnZpcm9ubWVudCkKKworICAgIGlmIHNzbCBpcyBub3QgTm9uZToKKyAgICAgICAgdGVzdHMuZXh0ZW5kKFtUZXN0VExTX0ZUUENsYXNzTWl4aW4sIFRlc3RUTFNfRlRQQ2xhc3NdKQorCiAgICAgdGhyZWFkX2luZm8gPSBzdXBwb3J0LnRocmVhZGluZ19zZXR1cCgpCiAgICAgdHJ5OgogICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGQxZDAzYTMuLjRkMTkzNjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC0zNSwxMSArMzUsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2Rpcl9pbmNsdWRlc19jb3JyZWN0X2F0dHJzKHNlbGYpOgogICAgICAgICBzZWxmLmIua25vd25fYXR0ciA9IDcKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdrbm93bl9hdHRyJyBpbiBkaXIoc2VsZi5iKSwKKyAgICAgICAgc2VsZi5hc3NlcnRJbigna25vd25fYXR0cicsIGRpcihzZWxmLmIpLAogICAgICAgICAgICAgInNldCBhdHRyaWJ1dGVzIG5vdCBpbiBkaXIgbGlzdGluZyBvZiBtZXRob2QiKQogICAgICAgICAjIFRlc3Qgb24gdW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Qgb2YgbWV0aG9kCiAgICAgICAgIHNlbGYuRi5hLmtub3duX2F0dHIgPSA3Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgna25vd25fYXR0cicgaW4gZGlyKHNlbGYuZmkuYSksICJzZXQgYXR0cmlidXRlIG9uIGZ1bmN0aW9uICIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigna25vd25fYXR0cicsIGRpcihzZWxmLmZpLmEpLCAic2V0IGF0dHJpYnV0ZSBvbiBmdW5jdGlvbiAiCiAgICAgICAgICAgICAgICAgICAgICAiaW1wbGVtZW50YXRpb25zLCBzaG91bGQgc2hvdyB1cCBpbiBuZXh0IGRpciIpCiAKICAgICBkZWYgdGVzdF9kdXBsaWNhdGVfZnVuY3Rpb25fZXF1YWxpdHkoc2VsZik6CkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGEgPSAxMgogICAgICAgICBkZWYgZigpOiBwcmludChhKQogICAgICAgICBjID0gZi5fX2Nsb3N1cmVfXwotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCB0dXBsZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAgICAgICAgICMgZG9uJ3QgaGF2ZSBhIHR5cGUgb2JqZWN0IGhhbmR5CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXS5fX2NsYXNzX18uX19uYW1lX18sICJjZWxsIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnVuY3Rvb2xzLnB5IGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKaW5kZXggZDIwYmFmZS4uNzNhNzdkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsOCArMSwxMCBAQAogaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIGltcG9ydCBwaWNrbGUKK2Zyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKIAogQHN0YXRpY21ldGhvZAogZGVmIFB5dGhvblBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgpAQCAtNDQsOSArNDYsMTcgQEAKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgd3JpdGFibGUKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi50aGV0eXBlLCB0eXBlKToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdmdW5jJywgbWFwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdhcmdzJywgKDEsIDIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorCisgICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoaGV4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKQEAgLTEyMiwxNSArMTMyLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmKSwgMSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNlbGYudGhldHlwZShmLCB5PTApLCAxKQogCi0gICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShoZXgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBwLl9fZGljdF9fCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ3BhcnRpYWwgb2JqZWN0IGFsbG93ZWQgX19kaWN0X18gdG8gYmUgZGVsZXRlZCcpCi0KICAgICBkZWYgdGVzdF93ZWFrcmVmKHNlbGYpOgogICAgICAgICBmID0gc2VsZi50aGV0eXBlKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCkBAIC0xNDUsNiArMTQ2LDMyIEBACiAgICAgICAgIGpvaW4gPSBzZWxmLnRoZXR5cGUoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBhcmdzID0gKG9iamVjdCgpLCBvYmplY3QoKSkKKyAgICAgICAgYXJnc19yZXByID0gJywgJy5qb2luKHJlcHIoYSkgZm9yIGEgaW4gYXJncykKKyAgICAgICAga3dhcmdzID0geydhJzogb2JqZWN0KCksICdiJzogb2JqZWN0KCl9CisgICAgICAgIGt3YXJnc19yZXByID0gJywgJy5qb2luKCIlcz0lciIgJSAoaywgdikgZm9yIGssIHYgaW4ga3dhcmdzLml0ZW1zKCkpCisgICAgICAgIGlmIHNlbGYudGhldHlwZSBpcyBmdW5jdG9vbHMucGFydGlhbDoKKyAgICAgICAgICAgIG5hbWUgPSAnZnVuY3Rvb2xzLnBhcnRpYWwnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gc2VsZi50aGV0eXBlLl9fbmFtZV9fCisKKyAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCisKKyAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorCisgICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGt3YXJnc19yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorCisgICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9LCB7fSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByLCBrd2FyZ3NfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcihmKSkKKwogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYudGhldHlwZShzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQpAQCAtMTYyLDYgKzE4OSw5IEBACiAKICAgICB0aGV0eXBlID0gUHl0aG9uUGFydGlhbAogCisgICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaGFzbid0IGEgbmljZSByZXByCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKTogcGFzcworCiAgICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgcGlja2xhYmxlCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOiBwYXNzCiAKQEAgLTE4MCw3ICsyMTAsNyBAQAogICAgICAgICAgICAgZm9yIGtleSBpbiB3cmFwcGVkX2F0dHI6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWRfYXR0cltrZXldIGlzIHdyYXBwZXJfYXR0cltrZXldKQogCi0gICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgZGVmIGYoYTonVGhpcyBpcyBhIG5ldyBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwpAQCAtMTg4LDEzICsyMTgsMjMgQEAKICAgICAgICAgZGVmIHdyYXBwZXIoYjonVGhpcyBpcyB0aGUgcHJpb3IgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXIsIGYKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlKHNlbGYpOgorICAgICAgICB3cmFwcGVyLCBmID0gc2VsZi5fZGVmYXVsdF91cGRhdGUoKQogICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZXIod3JhcHBlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cmFwcGVyLl9fd3JhcHBlZF9fLCBmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19uYW1lX18sICdmJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sICdUaGlzIGlzIGEgdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5hdHRyLCAnVGhpcyBpcyBhbHNvIGEgdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2Fubm90YXRpb25zX19bJ2EnXSwgJ1RoaXMgaXMgYSBuZXcgYW5ub3RhdGlvbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2InLCB3cmFwcGVyLl9fYW5ub3RhdGlvbnNfXykKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RlZmF1bHRfdXBkYXRlX2RvYyhzZWxmKToKKyAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLl9fZG9jX18sICdUaGlzIGlzIGEgdGVzdCcpCisKICAgICBkZWYgdGVzdF9ub191cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgpAQCAtMjI2LDYgKzI2NiwyOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5kaWN0X2F0dHIsIGYuZGljdF9hdHRyKQogCisgICAgZGVmIHRlc3RfbWlzc2luZ19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3cmFwcGVyLmRpY3RfYXR0ciA9IHt9CisgICAgICAgIGFzc2lnbiA9ICgnYXR0cicsKQorICAgICAgICB1cGRhdGUgPSAoJ2RpY3RfYXR0cicsKQorICAgICAgICAjIE1pc3NpbmcgYXR0cmlidXRlcyBvbiB3cmFwcGVkIG9iamVjdCBhcmUgaWdub3JlZAorICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZiwgYXNzaWduLCB1cGRhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2F0dHInLCB3cmFwcGVyLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuZGljdF9hdHRyLCB7fSkKKyAgICAgICAgIyBXcmFwcGVyIG11c3QgaGF2ZSBleHBlY3RlZCBhdHRyaWJ1dGVzIGZvciB1cGRhdGluZworICAgICAgICBkZWwgd3JhcHBlci5kaWN0X2F0dHIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIod3JhcHBlciwgZiwgYXNzaWduLCB1cGRhdGUpCisgICAgICAgIHdyYXBwZXIuZGljdF9hdHRyID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmLCBhc3NpZ24sIHVwZGF0ZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X2J1aWx0aW5fdXBkYXRlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTU3NjI0MQogICAgICAgICBkZWYgd3JhcHBlcigpOgpAQCAtMjM3LDcgKzI5OSw3IEBACiAKIGNsYXNzIFRlc3RXcmFwcyhUZXN0VXBkYXRlV3JhcHBlcik6CiAKLSAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKKyAgICBkZWYgX2RlZmF1bHRfdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKQEAgLTI0NiwxMCArMzA4LDE5IEBACiAgICAgICAgIGRlZiB3cmFwcGVyKCk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlcih3cmFwcGVyLCBmKQorICAgICAgICByZXR1cm4gd3JhcHBlcgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF91cGRhdGUoc2VsZik6CisgICAgICAgIHdyYXBwZXIgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19kb2NfXywgJ1RoaXMgaXMgYSB0ZXN0JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKIAorICAgIEB1bml0dGVzdC5za2lwSWYobm90IHN5cy5mbGFncy5vcHRpbWl6ZSA8PSAxLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZV9kb2Moc2VsZik6CisgICAgICAgIHdyYXBwZXIgPSBzZWxmLl9kZWZhdWx0X3VwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX2RvY19fLCAnVGhpcyBpcyBhIHRlc3QnKQorCiAgICAgZGVmIHRlc3Rfbm9fdXBkYXRlKHNlbGYpOgogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKQEAgLTM2MywxOCArNDM0LDIzNSBAQAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogM30KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoYWRkLCBkKSwgIiIuam9pbihkLmtleXMoKSkpCiAKK2NsYXNzIFRlc3RDbXBUb0tleSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY21wX3RvX2tleShzZWxmKToKKyAgICAgICAgZGVmIG15Y21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIHkgLSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbNCwgMywgMiwgMSwgMF0pCiAKKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBkZWYgbXljbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4geSAtIHgKKyAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApCisgICAgICAgIGsgPSBrZXkoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaChrKSkKIAorY2xhc3MgVGVzdFRvdGFsT3JkZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbHQoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA8IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2xlKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfZ3Qoc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA+IG90aGVyLnZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2dlKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDEpIDwgQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPiBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA8PSBBKDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgyKSA+PSBBKDIpKQorCisgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbm9fb3ZlcndyaXRlKHNlbGYpOgorICAgICAgICAjIG5ldyBtZXRob2RzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCisgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgY2xhc3MgQShpbnQpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoQSgxKSA8IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID4gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMSkgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKworICAgIGRlZiB0ZXN0X25vX29wZXJhdGlvbnNfZGVmaW5lZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfYnVnXzEwMDQyKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIFRlc3RUTzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgVGVzdFRPKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBUZXN0VE8oOCkgPD0gKCkKKworY2xhc3MgVGVzdExSVSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9scnUoc2VsZik6CisgICAgICAgIGRlZiBvcmlnKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIDMqeCt5CisgICAgICAgIGYgPSBmdW5jdG9vbHMubHJ1X2NhY2hlKG1heHNpemU9MjApKG9yaWcpCisgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heHNpemUsIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpdHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzc2VzLCAwKQorCisgICAgICAgIGRvbWFpbiA9IHJhbmdlKDUpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgeCwgeSA9IGNob2ljZShkb21haW4pLCBjaG9pY2UoZG9tYWluKQorICAgICAgICAgICAgYWN0dWFsID0gZih4LCB5KQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBvcmlnKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGl0cyA+IG1pc3NlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaXRzICsgbWlzc2VzLCAxMDAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzaXplLCAyMCkKKworICAgICAgICBmLmNhY2hlX2NsZWFyKCkgICAjIHRlc3QgY2xlYXJpbmcKKyAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGl0cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaXNzZXMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnNpemUsIDApCisgICAgICAgIGYoeCwgeSkKKyAgICAgICAgaGl0cywgbWlzc2VzLCBtYXhzaXplLCBjdXJyc2l6ZSA9IGYuY2FjaGVfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGl0cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaXNzZXMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycnNpemUsIDEpCisKKyAgICAgICAgIyBUZXN0IGJ5cGFzc2luZyB0aGUgY2FjaGUKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmLl9fd3JhcHBlZF9fLCBvcmlnKQorICAgICAgICBmLl9fd3JhcHBlZF9fKHgsIHkpCisgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpdHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzc2VzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzaXplLCAxKQorCisgICAgICAgICMgdGVzdCBzaXplIHplcm8gKHdoaWNoIG1lYW5zICJuZXZlci1jYWNoZSIpCisgICAgICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKDApCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBub25sb2NhbCBmX2NudAorICAgICAgICAgICAgZl9jbnQgKz0gMQorICAgICAgICAgICAgcmV0dXJuIDIwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jYWNoZV9pbmZvKCkubWF4c2l6ZSwgMCkKKyAgICAgICAgZl9jbnQgPSAwCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZfY250LCA1KQorICAgICAgICBoaXRzLCBtaXNzZXMsIG1heHNpemUsIGN1cnJzaXplID0gZi5jYWNoZV9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoaXRzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pc3NlcywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgMCkKKworICAgICAgICAjIHRlc3Qgc2l6ZSBvbmUKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoMSkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZfY250CisgICAgICAgICAgICBmX2NudCArPSAxCisgICAgICAgICAgICByZXR1cm4gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmNhY2hlX2luZm8oKS5tYXhzaXplLCAxKQorICAgICAgICBmX2NudCA9IDAKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZl9jbnQsIDEpCisgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpdHMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWlzc2VzLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1cnJzaXplLCAxKQorCisgICAgICAgICMgdGVzdCBzaXplIHR3bworICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZSgyKQorICAgICAgICBkZWYgZih4KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZfY250CisgICAgICAgICAgICBmX2NudCArPSAxCisgICAgICAgICAgICByZXR1cm4geCoxMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2FjaGVfaW5mbygpLm1heHNpemUsIDIpCisgICAgICAgIGZfY250ID0gMAorICAgICAgICBmb3IgeCBpbiA3LCA5LCA3LCA5LCA3LCA5LCA4LCA4LCA4LCA5LCA5LCA5LCA4LCA4LCA4LCA3OgorICAgICAgICAgICAgIyAgICAqICAqICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoeCksIHgqMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZl9jbnQsIDQpCisgICAgICAgIGhpdHMsIG1pc3NlcywgbWF4c2l6ZSwgY3VycnNpemUgPSBmLmNhY2hlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhpdHMsIDEyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pc3NlcywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyc2l6ZSwgMikKKworICAgIGRlZiB0ZXN0X2xydV93aXRoX21heHNpemVfbm9uZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT1Ob25lKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobi0xKSArIGZpYihuLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2ZpYihuKSBmb3IgbiBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0yOCwgbWlzc2VzPTE2LCBtYXhzaXplPU5vbmUsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0wKSkKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGltcG9ydCBzeXMKICAgICB0ZXN0X2NsYXNzZXMgPSAoCiAgICAgICAgIFRlc3RQYXJ0aWFsLAogICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAogICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKICAgICAgICAgVGVzdFVwZGF0ZVdyYXBwZXIsCisgICAgICAgIFRlc3RUb3RhbE9yZGVyaW5nLAogICAgICAgICBUZXN0V3JhcHMsCi0gICAgICAgIFRlc3RSZWR1Y2UKKyAgICAgICAgVGVzdFJlZHVjZSwKKyAgICAgICAgVGVzdExSVSwKICAgICApCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQppbmRleCAxY2VkZTcwLi5jNjY4OWExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Z1dHVyZS5weQpAQCAtMTA5LDcgKzEwOSw3IEBACiAgICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFsc19leGVjKHNlbGYpOgogICAgICAgICBzY29wZSA9IHt9CiAgICAgICAgIGV4ZWMoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsczsgeCA9ICcnIiwge30sIHNjb3BlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzY29wZVsieCJdLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NvcGVbIngiXSwgc3RyKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNS5weSBiL0xpYi90ZXN0L3Rlc3RfZnV0dXJlNS5weQppbmRleCA1N2NiZTlmLi45Y2EzYTM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Z1dHVyZTUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmU1LnB5CkBAIC05LDcgKzksNyBAQAogY2xhc3MgVGVzdE11bHRpcGxlRmVhdHVyZXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9saXRlcmFscyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoIiIsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgiIiwgc3RyKQogCiAgICAgZGVmIHRlc3RfcHJpbnRfZnVuY3Rpb24oc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHM6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCA5Nzg4MjkxLi4xMDBjNzY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNSArMSw1IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIHN0cmlwX3B5dGhvbl9zdGRlcnIKIGltcG9ydCBzeXMKIGltcG9ydCBnYwogaW1wb3J0IHdlYWtyZWYKQEAgLTQ3Nyw2ICs0NzcsNTMgQEAKICAgICAgICAgICAgICMgd291bGQgYmUgZGFtYWdlZCwgd2l0aCBhbiBlbXB0eSBfX2RpY3RfXy4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKIAorICAgIGRlZiB0ZXN0X2dhcmJhZ2VfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI8WCAlJXI+IiAlJSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB4ID0gWCgnZmlyc3QnKQorICAgICAgICAgICAgeC54ID0geAorICAgICAgICAgICAgeC55ID0gWCgnc2Vjb25kJykKKyAgICAgICAgICAgIGRlbCB4CisgICAgICAgICAgICBnYy5zZXRfZGVidWcoJXMpCisgICAgICAgICIiIgorICAgICAgICBkZWYgcnVuX2NvbW1hbmQoY29kZSk6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItV2QiLCAiLWMiLCBjb2RlXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5zdHJpcCgpLCBiIiIpCisgICAgICAgICAgICByZXR1cm4gc3RyaXBfcHl0aG9uX3N0ZGVycihzdGRlcnIpCisKKyAgICAgICAgc3RkZXJyID0gcnVuX2NvbW1hbmQoY29kZSAlICIwIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiIlJlc291cmNlV2FybmluZzogZ2M6IDIgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgICBiInNodXRkb3duOyB1c2UiLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiI8WCAnZmlyc3QnPiIsIHN0ZGVycikKKyAgICAgICAgIyBXaXRoIERFQlVHX1VOQ09MTEVDVEFCTEUsIHRoZSBnYXJiYWdlIGxpc3QgZ2V0cyBwcmludGVkCisgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfVU5DT0xMRUNUQUJMRSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJSZXNvdXJjZVdhcm5pbmc6IGdjOiAyIHVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCAiCisgICAgICAgICAgICAgICAgICAgICAgYiJzaHV0ZG93biIsIHN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgKGIiWzxYICdmaXJzdCc+LCA8WCAnc2Vjb25kJz5dIiBpbiBzdGRlcnIpIG9yCisgICAgICAgICAgICAoYiJbPFggJ3NlY29uZCc+LCA8WCAnZmlyc3QnPl0iIGluIHN0ZGVyciksIHN0ZGVycikKKyAgICAgICAgIyBXaXRoIERFQlVHX1NBVkVBTEwsIG5vIGFkZGl0aW9uYWwgbWVzc2FnZSBzaG91bGQgZ2V0IHByaW50ZWQKKyAgICAgICAgIyAoYmVjYXVzZSBnYy5nYXJiYWdlIGFsc28gY29udGFpbnMgbm9ybWFsbHkgcmVjbGFpbWFibGUgY3ljbGljCisgICAgICAgICMgcmVmZXJlbmNlcywgYW5kIGl0cyBlbGVtZW50cyBnZXQgcHJpbnRlZCBhdCBydW50aW1lIGFueXdheSkuCisgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCisKKwogY2xhc3MgR0NUb2dnbGluZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGdjLmVuYWJsZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dkYi5weSBiL0xpYi90ZXN0L3Rlc3RfZ2RiLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YjQ0ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtMCwwICsxLDY4MSBAQAorIyBWZXJpZnkgdGhhdCBnZGIgY2FuIHByZXR0eS1wcmludCB0aGUgdmFyaW91cyBQeU9iamVjdCogdHlwZXMKKyMKKyMgVGhlIGNvZGUgZm9yIHRlc3RpbmcgZ2RiIHdhcyBhZGFwdGVkIGZyb20gc2ltaWxhciB3b3JrIGluIFVubGFkZW4gU3dhbGxvdydzCisjIExpYi90ZXN0L3Rlc3Rfaml0X2dkYi5weQorCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGxvY2FsZQorCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZSwgcHl0aG9uX2lzX29wdGltaXplZAorCit0cnk6CisgICAgZ2RiX3ZlcnNpb24sIF8gPSBzdWJwcm9jZXNzLlBvcGVuKFsiZ2RiIiwgIi0tdmVyc2lvbiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpCitleGNlcHQgT1NFcnJvcjoKKyAgICAjIFRoaXMgaXMgd2hhdCAibm8gZ2RiIiBsb29rcyBsaWtlLiAgVGhlcmUgbWF5LCBob3dldmVyLCBiZSBvdGhlcgorICAgICMgZXJyb3JzIHRoYXQgbWFuaWZlc3QgdGhpcyB3YXkgdG9vLgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJDb3VsZG4ndCBmaW5kIGdkYiBvbiB0aGUgcGF0aCIpCitnZGJfdmVyc2lvbl9udW1iZXIgPSByZS5zZWFyY2goYiJeR05VIGdkYiBbXlxkXSooXGQrKVwuIiwgZ2RiX3ZlcnNpb24pCitpZiBpbnQoZ2RiX3ZlcnNpb25fbnVtYmVyLmdyb3VwKDEpKSA8IDc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImdkYiB2ZXJzaW9ucyBiZWZvcmUgNy4wIGRpZG4ndCBzdXBwb3J0IHB5dGhvbiBlbWJlZGRpbmciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBTYXc6XG4iICsgZ2RiX3ZlcnNpb24uZGVjb2RlKCdhc2NpaScsICdyZXBsYWNlJykpCisKKyMgVmVyaWZ5IHRoYXQgImdkYiIgd2FzIGJ1aWx0IHdpdGggdGhlIGVtYmVkZGVkIHB5dGhvbiBzdXBwb3J0IGVuYWJsZWQ6CitjbWQgPSAiLS1ldmFsLWNvbW1hbmQ9cHl0aG9uIGltcG9ydCBzeXM7IHByaW50IHN5cy52ZXJzaW9uX2luZm8iCitwID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItLWJhdGNoIiwgY21kXSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCitnZGJweV92ZXJzaW9uLCBfID0gcC5jb21tdW5pY2F0ZSgpCitpZiBnZGJweV92ZXJzaW9uID09IGInJzoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIG5vdCBidWlsdCB3aXRoIGVtYmVkZGVkIHB5dGhvbiBzdXBwb3J0IikKKworZGVmIGdkYl9oYXNfZnJhbWVfc2VsZWN0KCk6CisgICAgIyBEb2VzIHRoaXMgYnVpbGQgb2YgZ2RiIGhhdmUgZ2RiLkZyYW1lLnNlbGVjdCA/CisgICAgY21kID0gIi0tZXZhbC1jb21tYW5kPXB5dGhvbiBwcmludChkaXIoZ2RiLkZyYW1lKSkiCisgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS1iYXRjaCIsIGNtZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICBzdGRvdXQsIF8gPSBwLmNvbW11bmljYXRlKCkKKyAgICBtID0gcmUubWF0Y2goYnInLipcWyguKilcXS4qJywgc3Rkb3V0KQorICAgIGlmIG5vdCBtOgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiVW5hYmxlIHRvIHBhcnNlIG91dHB1dCBmcm9tIGdkYi5GcmFtZS5zZWxlY3QgdGVzdCIpCisgICAgZ2RiX2ZyYW1lX2RpciA9IG0uZ3JvdXAoMSkuc3BsaXQoYicsICcpCisgICAgcmV0dXJuIGIiJ3NlbGVjdCciIGluIGdkYl9mcmFtZV9kaXIKKworSEFTX1BZVVBfUFlET1dOID0gZ2RiX2hhc19mcmFtZV9zZWxlY3QoKQorCitCUkVBS1BPSU5UX0ZOPSdidWlsdGluX2lkJworCitjbGFzcyBEZWJ1Z2dlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3QgdGhhdCB0aGUgZGVidWdnZXIgY2FuIGRlYnVnIFB5dGhvbi4iIiIKKworICAgIGRlZiBydW5fZ2RiKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUnVucyBnZGIgd2l0aCB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIGJ5ICphcmdzLgorCisgICAgICAgIFJldHVybnMgaXRzIHN0ZG91dCwgc3RkZXJyCisgICAgICAgICIiIgorICAgICAgICBvdXQsIGVyciA9IHN1YnByb2Nlc3MuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgKS5jb21tdW5pY2F0ZSgpCisgICAgICAgIHJldHVybiBvdXQuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJyksIGVyci5kZWNvZGUoJ3V0Zi04JywgJ3JlcGxhY2UnKQorCisgICAgZGVmIGdldF9zdGFja190cmFjZShzZWxmLCBzb3VyY2U9Tm9uZSwgc2NyaXB0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50PUJSRUFLUE9JTlRfRk4sCisgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgJycnCisgICAgICAgIFJ1biAncHl0aG9uIC1jIFNPVVJDRScgdW5kZXIgZ2RiIHdpdGggYSBicmVha3BvaW50LgorCisgICAgICAgIFN1cHBvcnQgaW5qZWN0aW5nIGNvbW1hbmRzIGFmdGVyIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQKKworICAgICAgICBSZXR1cm5zIHRoZSBzdGRvdXQgZnJvbSBnZGIKKworICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ6IGlmIHByb3ZpZGVkLCBhIGxpc3Qgb2Ygc3RyaW5nczogZ2RiIGNvbW1hbmRzCisgICAgICAgICcnJworICAgICAgICAjIFdlIHVzZSAic2V0IGJyZWFrcG9pbnQgcGVuZGluZyB5ZXMiIHRvIGF2b2lkIGJsb2NraW5nIHdpdGggYToKKyAgICAgICAgIyAgIEZ1bmN0aW9uICJmb28iIG5vdCBkZWZpbmVkLgorICAgICAgICAjICAgTWFrZSBicmVha3BvaW50IHBlbmRpbmcgb24gZnV0dXJlIHNoYXJlZCBsaWJyYXJ5IGxvYWQ/ICh5IG9yIFtuXSkKKyAgICAgICAgIyBlcnJvciwgd2hpY2ggdHlwaWNhbGx5IGhhcHBlbnMgcHl0aG9uIGlzIGR5bmFtaWNhbGx5IGxpbmtlZCAodGhlCisgICAgICAgICMgYnJlYWtwb2ludHMgb2YgaW50ZXJlc3QgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSBzaGFyZWQgbGlicmFyeSkKKyAgICAgICAgIyBXaGVuIHRoaXMgaGFwcGVucywgd2Ugc3RpbGwgZ2V0OgorICAgICAgICAjICAgRnVuY3Rpb24gInRleHRpb3dyYXBwZXJfd3JpdGUiIG5vdCBkZWZpbmVkLgorICAgICAgICAjIGVtaXR0ZWQgdG8gc3RkZXJyIGVhY2ggdGltZSwgYWxhcy4KKworICAgICAgICAjIEluaXRpYWxseSBJIGhhZCAiLS1ldmFsLWNvbW1hbmQ9Y29udGludWUiIGhlcmUsIGJ1dCByZW1vdmVkIGl0IHRvCisgICAgICAgICMgYXZvaWQgcmVwZWF0ZWQgcHJpbnQgYnJlYWtwb2ludHMgd2hlbiB0cmF2ZXJzaW5nIGhpZXJhcmNoaWNhbCBkYXRhCisgICAgICAgICMgc3RydWN0dXJlcworCisgICAgICAgICMgR2VuZXJhdGUgYSBsaXN0IG9mIGNvbW1hbmRzIGluIGdkYidzIGxhbmd1YWdlOgorICAgICAgICBjb21tYW5kcyA9IFsnc2V0IGJyZWFrcG9pbnQgcGVuZGluZyB5ZXMnLAorICAgICAgICAgICAgICAgICAgICAnYnJlYWsgJXMnICUgYnJlYWtwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgJ3J1biddCisgICAgICAgIGlmIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludDoKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IGNtZHNfYWZ0ZXJfYnJlYWtwb2ludAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29tbWFuZHMgKz0gWydiYWNrdHJhY2UnXQorCisgICAgICAgICMgcHJpbnQgY29tbWFuZHMKKworICAgICAgICAjIFVzZSAiY29tbWFuZHMiIHRvIGdlbmVyYXRlIHRoZSBhcmd1bWVudHMgd2l0aCB3aGljaCB0byBpbnZva2UgImdkYiI6CisgICAgICAgIGFyZ3MgPSBbImdkYiIsICItLWJhdGNoIl0KKyAgICAgICAgYXJncyArPSBbJy0tZXZhbC1jb21tYW5kPSVzJyAlIGNtZCBmb3IgY21kIGluIGNvbW1hbmRzXQorICAgICAgICBhcmdzICs9IFsiLS1hcmdzIiwKKyAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGVdCisKKyAgICAgICAgaWYgbm90IGltcG9ydF9zaXRlOgorICAgICAgICAgICAgIyAtUyBzdXBwcmVzc2VzIHRoZSBkZWZhdWx0ICdpbXBvcnQgc2l0ZScKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItUyJdCisKKyAgICAgICAgaWYgc291cmNlOgorICAgICAgICAgICAgYXJncyArPSBbIi1jIiwgc291cmNlXQorICAgICAgICBlbGlmIHNjcmlwdDoKKyAgICAgICAgICAgIGFyZ3MgKz0gW3NjcmlwdF0KKworICAgICAgICAjIHByaW50IGFyZ3MKKyAgICAgICAgIyBwcmludCAnICcuam9pbihhcmdzKQorCisgICAgICAgICMgVXNlICJhcmdzIiB0byBpbnZva2UgZ2RiLCBjYXB0dXJpbmcgc3Rkb3V0LCBzdGRlcnI6CisgICAgICAgIG91dCwgZXJyID0gc2VsZi5ydW5fZ2RiKCphcmdzKQorCisgICAgICAgICMgSWdub3JlIHNvbWUgbm9pc2Ugb24gc3RkZXJyIGR1ZSB0byB0aGUgcGVuZGluZyBicmVha3BvaW50OgorICAgICAgICBlcnIgPSBlcnIucmVwbGFjZSgnRnVuY3Rpb24gIiVzIiBub3QgZGVmaW5lZC5cbicgJSBicmVha3BvaW50LCAnJykKKyAgICAgICAgIyBJZ25vcmUgc29tZSBvdGhlciBub2lzZSBvbiBzdGRlcnIgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4NjAwKQorICAgICAgICBlcnIgPSBlcnIucmVwbGFjZSgid2FybmluZzogVW5hYmxlIHRvIGZpbmQgbGlidGhyZWFkX2RiIG1hdGNoaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIGluZmVyaW9yJ3MgdGhyZWFkIGxpYnJhcnksIHRocmVhZCBkZWJ1Z2dpbmcgd2lsbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBub3QgYmUgYXZhaWxhYmxlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCisgICAgICAgIGVyciA9IGVyci5yZXBsYWNlKCJ3YXJuaW5nOiBDYW5ub3QgaW5pdGlhbGl6ZSB0aHJlYWQgZGVidWdnaW5nIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiIGxpYnJhcnk6IERlYnVnZ2VyIHNlcnZpY2UgZmFpbGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJykKKworICAgICAgICAjIEVuc3VyZSBubyB1bmV4cGVjdGVkIGVycm9yIG1lc3NhZ2VzOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgJycpCisKKyAgICAgICAgcmV0dXJuIG91dAorCisgICAgZGVmIGdldF9nZGJfcmVwcihzZWxmLCBzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9zaXRlPUZhbHNlKToKKyAgICAgICAgIyBHaXZlbiBhbiBpbnB1dCBweXRob24gc291cmNlIHJlcHJlc2VudGF0aW9uIG9mIGRhdGEsCisgICAgICAgICMgcnVuICJweXRob24gLWMnaWQoREFUQSknIiB1bmRlciBnZGIgd2l0aCBhIGJyZWFrcG9pbnQgb24KKyAgICAgICAgIyBidWlsdGluX2lkIGFuZCBzY3JhcGUgb3V0IGdkYidzIHJlcHJlc2VudGF0aW9uIG9mIHRoZSAib3AiCisgICAgICAgICMgcGFyYW1ldGVyLCBhbmQgdmVyaWZ5IHRoYXQgdGhlIGdkYiBkaXNwbGF5cyB0aGUgc2FtZSBzdHJpbmcKKyAgICAgICAgIworICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBnZGIgZGlzcGxheXMgdGhlIGV4cGVjdGVkIHN0cmluZworICAgICAgICAjCisgICAgICAgICMgRm9yIGEgbmVzdGVkIHN0cnVjdHVyZSwgdGhlIGZpcnN0IHRpbWUgd2UgaGl0IHRoZSBicmVha3BvaW50IHdpbGwKKyAgICAgICAgIyBnaXZlIHVzIHRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlCisgICAgICAgIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9zdGFja190cmFjZShzb3VyY2UsIGJyZWFrcG9pbnQ9QlJFQUtQT0lOVF9GTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1jbWRzX2FmdGVyX2JyZWFrcG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc2l0ZT1pbXBvcnRfc2l0ZSkKKyAgICAgICAgIyBnZGIgY2FuIGluc2VydCBhZGRpdGlvbmFsICdcbicgYW5kIHNwYWNlIGNoYXJhY3RlcnMgaW4gdmFyaW91cyBwbGFjZXMKKyAgICAgICAgIyBpbiBpdHMgb3V0cHV0LCBkZXBlbmRpbmcgb24gdGhlIHdpZHRoIG9mIHRoZSB0ZXJtaW5hbCBpdCdzIGNvbm5lY3RlZAorICAgICAgICAjIHRvICh1c2luZyBpdHMgIndyYXBfaGVyZSIgZnVuY3Rpb24pCisgICAgICAgIG0gPSByZS5tYXRjaCgnLiojMFxzK2J1aWx0aW5faWRccytcKHNlbGZcPS4qLFxzK3Y9XHMqKC4qPylcKVxzK2F0XHMrUHl0aG9uL2JsdGlubW9kdWxlLmMuKicsCisgICAgICAgICAgICAgICAgICAgICBnZGJfb3V0cHV0LCByZS5ET1RBTEwpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIGdkYiBvdXRwdXQ6ICVyXG4lcycgJSAoZ2RiX291dHB1dCwgZ2RiX291dHB1dCkpCisgICAgICAgIHJldHVybiBtLmdyb3VwKDEpLCBnZGJfb3V0cHV0CisKKyAgICBkZWYgYXNzZXJ0RW5kc1dpdGgoc2VsZiwgYWN0dWFsLCBleHBfZW5kKToKKyAgICAgICAgJycnRW5zdXJlIHRoYXQgdGhlIGdpdmVuICJhY3R1YWwiIHN0cmluZyBlbmRzIHdpdGggImV4cF9lbmQiJycnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhY3R1YWwuZW5kc3dpdGgoZXhwX2VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9JyVyIGRpZCBub3QgZW5kIHdpdGggJXInICUgKGFjdHVhbCwgZXhwX2VuZCkpCisKKyAgICBkZWYgYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhzZWxmLCBhY3R1YWwsIHBhdHRlcm4pOgorICAgICAgICBtID0gcmUubWF0Y2gocGF0dGVybiwgYWN0dWFsLCByZS5ET1RBTEwpCisgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgc2VsZi5mYWlsKG1zZz0nJXIgZGlkIG5vdCBtYXRjaCAlcicgJSAoYWN0dWFsLCBwYXR0ZXJuKSkKKworICAgIGRlZiBnZXRfc2FtcGxlX3NjcmlwdChzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbmRmaWxlKCdnZGJfc2FtcGxlLnB5JykKKworY2xhc3MgUHJldHR5UHJpbnRUZXN0cyhEZWJ1Z2dlclRlc3RzKToKKyAgICBkZWYgdGVzdF9nZXR0aW5nX2JhY2t0cmFjZShzZWxmKToKKyAgICAgICAgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKCdpZCg0MiknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQlJFQUtQT0lOVF9GTiBpbiBnZGJfb3V0cHV0KQorCisgICAgZGVmIGFzc2VydEdkYlJlcHIoc2VsZiwgdmFsLCBleHBfcmVwcj1Ob25lLCBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Tm9uZSk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgZ2RiJ3MgcmVuZGVyaW5nIG9mIHRoZSB2YWx1ZSBpbiBhIGRlYnVnZ2VkIHByb2Nlc3MKKyAgICAgICAgIyBtYXRjaGVzIHJlcHIodmFsdWUpIGluIHRoaXMgcHJvY2VzczoKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignaWQoJyArIGFzY2lpKHZhbCkgKyAnKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50KQorICAgICAgICBpZiBub3QgZXhwX3JlcHI6CisgICAgICAgICAgICBleHBfcmVwciA9IHJlcHIodmFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCBleHBfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJyVyIGRpZCBub3QgZXF1YWwgZXhwZWN0ZWQgJXI7IGZ1bGwgb3V0cHV0IHdhczpcbiVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAlIChnZGJfcmVwciwgZXhwX3JlcHIsIGdkYl9vdXRwdXQpKSkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHZhcmlvdXMgImludCIvbG9uZyB2YWx1ZXMnCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcig0MikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDApCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtNykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKDEwMDAwMDAwMDAwMDApCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcigtMTAwMDAwMDAwMDAwMDAwMCkKKworICAgIGRlZiB0ZXN0X3NpbmdsZXRvbnMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBUcnVlLCBGYWxzZSBhbmQgTm9uZScKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKE5vbmUpCisKKyAgICBkZWYgdGVzdF9kaWN0cyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGRpY3Rpb25hcmllcycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHt9KQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInLCAnZG91Z2xhcyc6NDJ9KQorCisgICAgZGVmIHRlc3RfbGlzdHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBsaXN0cycKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKFtdKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIobGlzdChyYW5nZSg1KSkpCisKKyAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKKyAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGJ5dGVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoYicnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoYidBbmQgbm93IGZvciBzb21ldGhpbmcgaG9wZWZ1bGx5IHRoZSBzYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGInc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMIGhlcmUgXDAgYW5kIHRoZW4gc29tZSBtb3JlIHRleHQnKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoYid0aGlzIGlzIGEgdGFiOlx0JworICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcyBpcyBhIHNsYXNoLU46XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzIGlzIGEgc2xhc2gtUjpccicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoYid0aGlzIGlzIGJ5dGUgMjU1Olx4ZmYgYW5kIGJ5dGUgMTI4Olx4ODAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihieXRlcyhbYiBmb3IgYiBpbiByYW5nZSgyNTUpXSkpCisKKyAgICBkZWYgdGVzdF9zdHJpbmdzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdW5pY29kZSBzdHJpbmdzJworICAgICAgICBlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgICAgICAgIGRlZiBjaGVja19yZXByKHRleHQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRleHQuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHByaW50YWJsZSA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHRleHQsIGFzY2lpKHRleHQpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodGV4dCkKKworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignQW5kIG5vdyBmb3Igc29tZXRoaW5nIGhvcGVmdWxseSB0aGUgc2FtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcignc3RyaW5nIHdpdGggZW1iZWRkZWQgTlVMIGhlcmUgXDAgYW5kIHRoZW4gc29tZSBtb3JlIHRleHQnKQorCisgICAgICAgICMgVGVzdCBwcmludGluZyBhIHNpbmdsZSBjaGFyYWN0ZXI6CisgICAgICAgICMgICAgVSsyNjIwIFNLVUxMIEFORCBDUk9TU0JPTkVTCisgICAgICAgIGNoZWNrX3JlcHIoJ1x1MjYyMCcpCisKKyAgICAgICAgIyBUZXN0IHByaW50aW5nIGEgSmFwYW5lc2UgdW5pY29kZSBzdHJpbmcKKyAgICAgICAgIyAoSSBiZWxpZXZlIHRoaXMgcmVhZHMgIm1vamliYWtlIiwgdXNpbmcgMyBjaGFyYWN0ZXJzIGZyb20gdGhlIENKSworICAgICAgICAjIFVuaWZpZWQgSWRlb2dyYXBocyBhcmVhLCBmb2xsb3dlZCBieSBVKzMwNTEgSElSQUdBTkEgTEVUVEVSIEtFKQorICAgICAgICBjaGVja19yZXByKCdcdTY1ODdcdTViNTdcdTUzMTZcdTMwNTEnKQorCisgICAgICAgICMgVGVzdCBhIGNoYXJhY3RlciBvdXRzaWRlIHRoZSBCTVA6CisgICAgICAgICMgICAgVSsxRDEyMSBNVVNJQ0FMIFNZTUJPTCBDIENMRUYKKyAgICAgICAgIyBUaGlzIGlzOgorICAgICAgICAjIFVURi04OiAweEYwIDB4OUQgMHg4NCAweEExCisgICAgICAgICMgVVRGLTE2OiAweEQ4MzQgMHhERDIxCisgICAgICAgIGNoZWNrX3JlcHIoY2hyKDB4MUQxMjEpKQorCisgICAgZGVmIHRlc3RfdHVwbGVzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgdHVwbGVzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIodHVwbGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgxLCksICcoMSwpJykKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKCgnZm9vJywgJ2JhcicsICdiYXonKSkKKworICAgIGRlZiB0ZXN0X3NldHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBzZXRzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWydhJywgJ2InXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHdlIGhhbmRsZSBzZXRzIGNvbnRhaW5pbmcgdGhlICJkdW1teSIga2V5IHZhbHVlLAorICAgICAgICAjIHdoaWNoIGhhcHBlbnMgb24gZGVsZXRpb246CisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJycncyA9IHNldChbJ2EnLCdiJ10pCitzLnBvcCgpCitpZChzKScnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgInsnYid9IikKKworICAgIGRlZiB0ZXN0X2Zyb3plbnNldHMoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzJworICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWzQsIDUsIDZdKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhIFJ1bnRpbWVFcnJvcgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJwordHJ5OgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiSSBhbSBhbiBlcnJvciIpCitleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgaWQoZSkKKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUnVudGltZUVycm9yKCdJIGFtIGFuIGVycm9yJywpIikKKworCisgICAgICAgICMgVGVzdCBkaXZpc2lvbiBieSB6ZXJvOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJwordHJ5OgorICAgIGEgPSAxIC8gMAorZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgaWQoZSkKKycnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWmVyb0RpdmlzaW9uRXJyb3IoJ2RpdmlzaW9uIGJ5IHplcm8nLCkiKQorCisgICAgZGVmIHRlc3RfbW9kZXJuX2NsYXNzKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgbmV3LXN0eWxlIGNsYXNzIGluc3RhbmNlcycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2ludCA9IDQyCitpZChmb28pJycnKQorICAgICAgICBtID0gcmUubWF0Y2gocic8Rm9vXChhbl9pbnQ9NDJcKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywgZ2RiX3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIG5ldy1zdHlsZSBjbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZ19saXN0KHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgYW4gaW5zdGFuY2Ugb2YgYSBsaXN0IHN1YmNsYXNzJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKGxpc3QpOgorICAgIHBhc3MKK2ZvbyA9IEZvbygpCitmb28gKz0gWzEsIDIsIDNdCitmb28uYW5faW50ID0gNDIKK2lkKGZvbyknJycpCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxGb29cKGFuX2ludD00MlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nVW5leHBlY3RlZCBuZXctc3R5bGUgY2xhc3MgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NpbmdfdHVwbGUoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlIHByZXR0eS1wcmludGluZyBvZiBhbiBpbnN0YW5jZSBvZiBhIHR1cGxlIHN1YmNsYXNzJworICAgICAgICAjIFRoaXMgc2hvdWxkIGV4ZXJjaXNlIHRoZSBuZWdhdGl2ZSB0cF9kaWN0b2Zmc2V0IGNvZGUgaW4gdGhlCisgICAgICAgICMgbmV3LXN0eWxlIGNsYXNzIHN1cHBvcnQKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbyh0dXBsZSk6CisgICAgcGFzcworZm9vID0gRm9vKCgxLCAyLCAzKSkKK2Zvby5hbl9pbnQgPSA0MgoraWQoZm9vKScnJykKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInPEZvb1woYW5faW50PTQyXCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPicsIGdkYl9yZXByKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdVbmV4cGVjdGVkIG5ldy1zdHlsZSBjbGFzcyByZW5kZXJpbmcgJXInICUgZ2RiX3JlcHIpCisKKyAgICBkZWYgYXNzZXJ0U2FuZShzZWxmLCBzb3VyY2UsIGNvcnJ1cHRpb24sIGV4cHJlcHI9Tm9uZSk6CisgICAgICAgICcnJ1J1biBQeXRob24gdW5kZXIgZ2RiLCBjb3JydXB0aW5nIHZhcmlhYmxlcyBpbiB0aGUgaW5mZXJpb3IgcHJvY2VzcworICAgICAgICBpbW1lZGlhdGVseSBiZWZvcmUgdGFraW5nIGEgYmFja3RyYWNlLgorCisgICAgICAgIFZlcmlmeSB0aGF0IHRoZSB2YXJpYWJsZSdzIHJlcHJlc2VudGF0aW9uIGlzIHRoZSBleHBlY3RlZCBmYWlsc2FmZQorICAgICAgICByZXByZXNlbnRhdGlvbicnJworICAgICAgICBpZiBjb3JydXB0aW9uOgorICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVtjb3JydXB0aW9uLCAnYmFja3RyYWNlJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ2JhY2t0cmFjZSddCisKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcihzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9Y21kc19hZnRlcl9icmVha3BvaW50KQorICAgICAgICBpZiBleHByZXByOgorICAgICAgICAgICAgaWYgZ2RiX3JlcHIgPT0gZXhwcmVwcjoKKyAgICAgICAgICAgICAgICAjIGdkYiBtYW5hZ2VkIHRvIHByaW50IHRoZSB2YWx1ZSBpbiBzcGl0ZSBvZiB0aGUgY29ycnVwdGlvbjsKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXMgZ29vZCAoc2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MzMwKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgTWF0Y2ggYW55dGhpbmcgZm9yIHRoZSB0eXBlIG5hbWU7IDB4REVBREJFRUYgY291bGQgcG9pbnQgdG8KKyAgICAgICAgIyBzb21ldGhpbmcgYXJiaXRyYXJ5IChzZWUgIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MzMwKQorICAgICAgICBwYXR0ZXJuID0gJzwuKiBhdCByZW1vdGUgMHhbMC05YS1mXSs+JworCisgICAgICAgIG0gPSByZS5tYXRjaChwYXR0ZXJuLCBnZGJfcmVwcikKKyAgICAgICAgaWYgbm90IG06CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfTlVMTF9wdHIoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIE5VTEwgUHlPYmplY3QqIGlzIGhhbmRsZWQgZ3JhY2VmdWxseScKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSAoCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignaWQoNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3NldCB2YXJpYWJsZSB2PTAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja3RyYWNlJ10pCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZGJfcmVwciwgJzB4MCcpCisKKyAgICBkZWYgdGVzdF9OVUxMX29iX3R5cGUoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCBhIFB5T2JqZWN0KiB3aXRoIE5VTEwgb2JfdHlwZSBpcyBoYW5kbGVkIGdyYWNlZnVsbHknCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgnaWQoNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgdi0+b2JfdHlwZT0wJykKKworICAgIGRlZiB0ZXN0X2NvcnJ1cHRfb2JfdHlwZShzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggYSBjb3JydXB0IG9iX3R5cGUgaXMgaGFuZGxlZCBncmFjZWZ1bGx5JworICAgICAgICBzZWxmLmFzc2VydFNhbmUoJ2lkKDQyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAnc2V0IHYtPm9iX3R5cGU9MHhERUFEQkVFRicsCisgICAgICAgICAgICAgICAgICAgICAgICBleHByZXByPSc0MicpCisKKyAgICBkZWYgdGVzdF9jb3JydXB0X3RwX2ZsYWdzKHNlbGYpOgorICAgICAgICAnRW5zdXJlIHRoYXQgYSBQeU9iamVjdCogd2l0aCBhIHR5cGUgd2l0aCBjb3JydXB0IHRwX2ZsYWdzIGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgnaWQoNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgdi0+b2JfdHlwZS0+dHBfZmxhZ3M9MHgwJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlcHI9JzQyJykKKworICAgIGRlZiB0ZXN0X2NvcnJ1cHRfdHBfbmFtZShzZWxmKToKKyAgICAgICAgJ0Vuc3VyZSB0aGF0IGEgUHlPYmplY3QqIHdpdGggYSB0eXBlIHdpdGggY29ycnVwdCB0cF9uYW1lIGlzIGhhbmRsZWQnCisgICAgICAgIHNlbGYuYXNzZXJ0U2FuZSgnaWQoNDIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzZXQgdi0+b2JfdHlwZS0+dHBfbmFtZT0weERFQURCRUVGJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlcHI9JzQyJykKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5zX2hlbHAoc2VsZik6CisgICAgICAgICdFbnN1cmUgdGhhdCB0aGUgbmV3LXN0eWxlIGNsYXNzIF9IZWxwZXIgaW4gc2l0ZS5weSBjYW4gYmUgaGFuZGxlZCcKKyAgICAgICAgIyAodGhpcyB3YXMgdGhlIGlzc3VlIGNhdXNpbmcgdHJhY2ViYWNrcyBpbgorICAgICAgICAjICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODAzMiNtc2cxMDA1MzcgKQorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdpZChfX2J1aWx0aW5zX18uaGVscCknLCBpbXBvcnRfc2l0ZT1UcnVlKQorCisgICAgICAgIG0gPSByZS5tYXRjaChyJzxfSGVscGVyIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLCBnZGJfcmVwcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0sCisgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J1VuZXhwZWN0ZWQgcmVuZGVyaW5nICVyJyAlIGdkYl9yZXByKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX2xpc3Qoc2VsZik6CisgICAgICAgICcnJ0Vuc3VyZSB0aGF0IGEgcmVmZXJlbmNlIGxvb3AgaW52b2x2aW5nIGEgbGlzdCBkb2Vzbid0IGxlYWQgcHJveHl2YWwKKyAgICAgICAgaW50byBhbiBpbmZpbml0ZSBsb29wOicnJworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCJhID0gWzMsIDQsIDVdIDsgYS5hcHBlbmQoYSkgOyBpZChhKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICdbMywgNCwgNSwgWy4uLl1dJykKKworICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCJhID0gWzMsIDQsIDVdIDsgYiA9IFthXSA7IGEuYXBwZW5kKGIpIDsgaWQoYSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAnWzMsIDQsIDUsIFtbLi4uXV1dJykKKworICAgIGRlZiB0ZXN0X3NlbGZyZWZlcmVudGlhbF9kaWN0KHNlbGYpOgorICAgICAgICAnJydFbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSBsb29wIGludm9sdmluZyBhIGRpY3QgZG9lc24ndCBsZWFkIHByb3h5dmFsCisgICAgICAgIGludG8gYW4gaW5maW5pdGUgbG9vcDonJycKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcigiYSA9IHt9IDsgYiA9IHsnYmFyJzphfSA7IGFbJ2ZvbyddID0gYiA7IGlkKGEpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdkYl9yZXByLCAieydmb28nOiB7J2Jhcic6IHsuLi59fX0iKQorCisgICAgZGVmIHRlc3Rfc2VsZnJlZmVyZW50aWFsX29sZF9zdHlsZV9pbnN0YW5jZShzZWxmKToKKyAgICAgICAgZ2RiX3JlcHIsIGdkYl9vdXRwdXQgPSBcCisgICAgICAgICAgICBzZWxmLmdldF9nZGJfcmVwcignJycKK2NsYXNzIEZvbzoKKyAgICBwYXNzCitmb28gPSBGb28oKQorZm9vLmFuX2F0dHIgPSBmb28KK2lkKGZvbyknJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPEZvb1woYW5fYXR0cj08XC5cLlwuPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF9zZWxmcmVmZXJlbnRpYWxfbmV3X3N0eWxlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IFwKKyAgICAgICAgICAgIHNlbGYuZ2V0X2dkYl9yZXByKCcnJworY2xhc3MgRm9vKG9iamVjdCk6CisgICAgcGFzcworZm9vID0gRm9vKCkKK2Zvby5hbl9hdHRyID0gZm9vCitpZChmb28pJycnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxGb29cKGFuX2F0dHI9PFwuXC5cLj5cKSBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gXAorICAgICAgICAgICAgc2VsZi5nZXRfZ2RiX3JlcHIoJycnCitjbGFzcyBGb28ob2JqZWN0KToKKyAgICBwYXNzCithID0gRm9vKCkKK2IgPSBGb28oKQorYS5hbl9hdHRyID0gYgorYi5hbl9hdHRyID0gYQoraWQoYSknJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgnPEZvb1woYW5fYXR0cj08Rm9vXChhbl9hdHRyPTxcLlwuXC4+XCkgYXQgcmVtb3RlIDB4WzAtOWEtZl0rPlwpIGF0IHJlbW90ZSAweFswLTlhLWZdKz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3JlcHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgZ2RiIHJlcHJlc2VudGF0aW9uOiAlclxuJXMnICUgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnZGJfcmVwciwgZ2RiX291dHB1dCkpCisKKyAgICBkZWYgdGVzdF90cnVuY2F0aW9uKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdmVyeSBsb25nIG91dHB1dCBpcyB0cnVuY2F0ZWQnCisgICAgICAgIGdkYl9yZXByLCBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfZ2RiX3JlcHIoJ2lkKGxpc3QocmFuZ2UoMTAwMCkpKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDg3LCA4OCwgODksIDkwLCA5MSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICI5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LCAxMjksIDEzMCwgMTMxLCAxMzIsIDEzMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE1NCwgMTU1LCAxNTYsIDE1NywgMTU4LCAxNTksIDE2MCwgMTYxLCAxNjIsIDE2MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxNjQsIDE2NSwgMTY2LCAxNjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAxNzMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjE4NCwgMTg1LCAxODYsIDE4NywgMTg4LCAxODksIDE5MCwgMTkxLCAxOTIsIDE5MywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIjIxNCwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIyMCwgMjIxLCAyMjIsIDIyMywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICIyMjQsIDIyNSwgMjI2Li4uKHRydW5jYXRlZCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihnZGJfcmVwciksCisgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNCArIGxlbignLi4uKHRydW5jYXRlZCknKSkKKworICAgIGRlZiB0ZXN0X2J1aWx0aW5fbWV0aG9kKHNlbGYpOgorICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCdpbXBvcnQgc3lzOyBpZChzeXMuc3Rkb3V0LnJlYWRsaW5lcyknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goJzxidWlsdC1pbiBtZXRob2QgcmVhZGxpbmVzIG9mIF9pby5UZXh0SU9XcmFwcGVyIG9iamVjdCBhdCByZW1vdGUgMHhbMC05YS1mXSs+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYl9yZXByKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdVbmV4cGVjdGVkIGdkYiByZXByZXNlbnRhdGlvbjogJXJcbiVzJyAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2RiX3JlcHIsIGdkYl9vdXRwdXQpKQorCisgICAgZGVmIHRlc3RfZnJhbWVzKHNlbGYpOgorICAgICAgICBnZGJfb3V0cHV0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2UoJycnCitkZWYgZm9vKGEsIGIsIGMpOgorICAgIHBhc3MKKworZm9vKDMsIDQsIDUpCitpZChmb28uX19jb2RlX18pJycnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludD0nYnVpbHRpbl9pZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydwcmludCAoUHlGcmFtZU9iamVjdCopKCgoUHlDb2RlT2JqZWN0Kil2KS0+Y29fem9tYmllZnJhbWUpJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCcuKlxzK1wkMSA9XHMrRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIDxzdHJpbmc+LCBsaW5lIDMsIGluIGZvbyBcKFwpXHMrLionLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX291dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlLkRPVEFMTCksCisgICAgICAgICAgICAgICAgICAgICAgICAnVW5leHBlY3RlZCBnZGIgcmVwcmVzZW50YXRpb246ICVyXG4lcycgJSAoZ2RiX291dHB1dCwgZ2RiX291dHB1dCkpCisKK2NsYXNzIFB5TGlzdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiBhc3NlcnRMaXN0aW5nKHNlbGYsIGV4cGVjdGVkLCBhY3R1YWwpOgorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9iYXNpY19jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS1saXN0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktbGlzdCddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgNSAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA2ICAgIGRlZiBiYXIoYSwgYiwgYyk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgNyAgICAgICAgYmF6KGEsIGIsIGMpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgOCAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICA5ICAgIGRlZiBiYXooKmFyZ3MpOlxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyA+MTAgICAgICAgIGlkKDQyKVxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTEgICAgXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAxMiAgICBmb28oMSwgMiwgMylcbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidCkKKworICAgIGRlZiB0ZXN0X29uZV9hYnNfYXJnKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoZSAicHktbGlzdCIgY29tbWFuZCB3aXRoIG9uZSBhYnNvbHV0ZSBhcmd1bWVudCcKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgOSddKQorCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdGluZygnICAgOSAgICBkZWYgYmF6KCphcmdzKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgPjEwICAgICAgICBpZCg0MilcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIDExICAgIFxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgMTIgICAgZm9vKDEsIDIsIDMpXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKKyAgICBkZWYgdGVzdF90d29fYWJzX2FyZ3Moc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhlICJweS1saXN0IiBjb21tYW5kIHdpdGggdHdvIGFic29sdXRlIGFyZ3VtZW50cycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxpc3QgMSwzJ10pCisKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0aW5nKCcgICAxICAgICMgU2FtcGxlIHNjcmlwdCBmb3IgdXNlIGJ5IHRlc3RfZ2RiLnB5XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgMiAgICBcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAzICAgIGRlZiBmb28oYSwgYiwgYyk6XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYnQpCisKK2NsYXNzIFN0YWNrTmF2aWdhdGlvblRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfcHl1cF9jb21tYW5kKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IHRoYXQgdGhlICJweS11cCIgY29tbWFuZCB3b3JrcycKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorJCcnJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfZG93bl9hdF9ib3R0b20oc2VsZik6CisgICAgICAgICdWZXJpZnkgaGFuZGxpbmcgb2YgInB5LWRvd24iIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktZG93biddKQorICAgICAgICBzZWxmLmFzc2VydEVuZHNXaXRoKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZmluZCBhIG5ld2VyIHB5dGhvbiBmcmFtZVxuJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfdXBfYXRfdG9wKHNlbGYpOgorICAgICAgICAnVmVyaWZ5IGhhbmRsaW5nIG9mICJweS11cCIgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2snCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCddICogNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFbmRzV2l0aChidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGZpbmQgYW4gb2xkZXIgcHl0aG9uIGZyYW1lXG4nKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF91cF90aGVuX2Rvd24oc2VsZik6CisgICAgICAgICdWZXJpZnkgInB5LXVwIiBmb2xsb3dlZCBieSAicHktZG93biInCisgICAgICAgIGJ0ID0gc2VsZi5nZXRfc3RhY2tfdHJhY2Uoc2NyaXB0PXNlbGYuZ2V0X3NhbXBsZV9zY3JpcHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzX2FmdGVyX2JyZWFrcG9pbnQ9WydweS11cCcsICdweS1kb3duJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInJydeLioKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSA3LCBpbiBiYXIgXChhPTEsIGI9MiwgYz0zXCkKKyAgICBiYXpcKGEsIGIsIGNcKQorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDEwLCBpbiBiYXogXChhcmdzPVwoMSwgMiwgM1wpXCkKKyAgICBpZFwoNDJcKQorJCcnJykKKworY2xhc3MgUHlCdFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LWJ0IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktYnQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRNdWx0aWxpbmVNYXRjaGVzKGJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicnJ14uKgorI1swLTldKyBGcmFtZSAweFswLTlhLWZdKywgZm9yIGZpbGUgLipnZGJfc2FtcGxlLnB5LCBsaW5lIDcsIGluIGJhciBcKGE9MSwgYj0yLCBjPTNcKQorICAgIGJhelwoYSwgYiwgY1wpCisjWzAtOV0rIEZyYW1lIDB4WzAtOWEtZl0rLCBmb3IgZmlsZSAuKmdkYl9zYW1wbGUucHksIGxpbmUgNCwgaW4gZm9vIFwoYT0xLCBiPTIsIGM9M1wpCisgICAgYmFyXChhLCBiLCBjXCkKKyNbMC05XSsgRnJhbWUgMHhbMC05YS1mXSssIGZvciBmaWxlIC4qZ2RiX3NhbXBsZS5weSwgbGluZSAxMiwgaW4gPG1vZHVsZT4gXChcKQorZm9vXCgxLCAyLCAzXCkKKycnJykKKworY2xhc3MgUHlQcmludFRlc3RzKERlYnVnZ2VyVGVzdHMpOgorICAgIGRlZiB0ZXN0X2Jhc2ljX2NvbW1hbmQoc2VsZik6CisgICAgICAgICdWZXJpZnkgdGhhdCB0aGUgInB5LXByaW50IiBjb21tYW5kIHdvcmtzJworICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktcHJpbnQgYXJncyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5sb2NhbCAnYXJncycgPSBcKDEsIDIsIDNcKVxuLioiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFTX1BZVVBfUFlET1dOLCAidGVzdCByZXF1aXJlcyBweS11cC9weS1kb3duIGNvbW1hbmRzIikKKyAgICBkZWYgdGVzdF9wcmludF9hZnRlcl91cChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXVwJywgJ3B5LXByaW50IGMnLCAncHktcHJpbnQgYicsICdweS1wcmludCBhJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmxvY2FsICdjJyA9IDNcbmxvY2FsICdiJyA9IDJcbmxvY2FsICdhJyA9IDFcbi4qIikKKworICAgIGRlZiB0ZXN0X3ByaW50aW5nX2dsb2JhbChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXByaW50IF9fbmFtZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmdsb2JhbCAnX19uYW1lX18nID0gJ19fbWFpbl9fJ1xuLioiKQorCisgICAgZGVmIHRlc3RfcHJpbnRpbmdfYnVpbHRpbihzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LXByaW50IGxlbiddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5idWlsdGluICdsZW4nID0gPGJ1aWx0LWluIG1ldGhvZCBsZW4gb2YgbW9kdWxlIG9iamVjdCBhdCByZW1vdGUgMHhbMC05YS1mXSs+XG4uKiIpCisKK2NsYXNzIFB5TG9jYWxzVGVzdHMoRGVidWdnZXJUZXN0cyk6CisgICAgZGVmIHRlc3RfYmFzaWNfY29tbWFuZChzZWxmKToKKyAgICAgICAgYnQgPSBzZWxmLmdldF9zdGFja190cmFjZShzY3JpcHQ9c2VsZi5nZXRfc2FtcGxlX3NjcmlwdCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHNfYWZ0ZXJfYnJlYWtwb2ludD1bJ3B5LWxvY2FscyddKQorICAgICAgICBzZWxmLmFzc2VydE11bHRpbGluZU1hdGNoZXMoYnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIi4qXG5hcmdzID0gXCgxLCAyLCAzXClcbi4qIikKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19QWVVQX1BZRE9XTiwgInRlc3QgcmVxdWlyZXMgcHktdXAvcHktZG93biBjb21tYW5kcyIpCisgICAgZGVmIHRlc3RfbG9jYWxzX2FmdGVyX3VwKHNlbGYpOgorICAgICAgICBidCA9IHNlbGYuZ2V0X3N0YWNrX3RyYWNlKHNjcmlwdD1zZWxmLmdldF9zYW1wbGVfc2NyaXB0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kc19hZnRlcl9icmVha3BvaW50PVsncHktdXAnLCAncHktbG9jYWxzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlsaW5lTWF0Y2hlcyhidCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKKworZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHB5dGhvbl9pc19vcHRpbWl6ZWQoKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zIikKKyAgICBydW5fdW5pdHRlc3QoUHJldHR5UHJpbnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlMaXN0VGVzdHMsCisgICAgICAgICAgICAgICAgIFN0YWNrTmF2aWdhdGlvblRlc3RzLAorICAgICAgICAgICAgICAgICBQeUJ0VGVzdHMsCisgICAgICAgICAgICAgICAgIFB5UHJpbnRUZXN0cywKKyAgICAgICAgICAgICAgICAgUHlMb2NhbHNUZXN0cworICAgICAgICAgICAgICAgICApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQppbmRleCA4NDAyOGU4Li4zZWMyMDliIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CkBAIC00NTgsMzAgKzQ1OCwzMCBAQAogLi4uICAgICBlbHNlOgogLi4uICAgICAgICAgYnJlYWsKICBBLT5BIEItPkIgQy0+QyBELT5EIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+SSBKLT5KIEstPksgTC0+TCBNLT5NCi1tZXJnZWQgSSBpbnRvIEEKLSBBLT5BIEItPkIgQy0+QyBELT5EIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPksgTC0+TCBNLT5NCi1tZXJnZWQgRCBpbnRvIEMKLSBBLT5BIEItPkIgQy0+QyBELT5DIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPksgTC0+TCBNLT5NCi1tZXJnZWQgSyBpbnRvIEgKLSBBLT5BIEItPkIgQy0+QyBELT5DIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPkggTC0+TCBNLT5NCi1tZXJnZWQgTCBpbnRvIEEKLSBBLT5BIEItPkIgQy0+QyBELT5DIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPkggTC0+QSBNLT5NCi1tZXJnZWQgRSBpbnRvIEEKLSBBLT5BIEItPkIgQy0+QyBELT5DIEUtPkEgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPkggTC0+QSBNLT5NCi1tZXJnZWQgQiBpbnRvIEcKLSBBLT5BIEItPkcgQy0+QyBELT5DIEUtPkEgRi0+RiBHLT5HIEgtPkggSS0+QSBKLT5KIEstPkggTC0+QSBNLT5NCittZXJnZWQgSyBpbnRvIEIKKyBBLT5BIEItPkIgQy0+QyBELT5EIEUtPkUgRi0+RiBHLT5HIEgtPkggSS0+SSBKLT5KIEstPkIgTC0+TCBNLT5NCiBtZXJnZWQgQSBpbnRvIEYKLSBBLT5GIEItPkcgQy0+QyBELT5DIEUtPkYgRi0+RiBHLT5HIEgtPkggSS0+RiBKLT5KIEstPkggTC0+RiBNLT5NCi1tZXJnZWQgSCBpbnRvIEcKLSBBLT5GIEItPkcgQy0+QyBELT5DIEUtPkYgRi0+RiBHLT5HIEgtPkcgSS0+RiBKLT5KIEstPkcgTC0+RiBNLT5NCi1tZXJnZWQgRiBpbnRvIEoKLSBBLT5KIEItPkcgQy0+QyBELT5DIEUtPkogRi0+SiBHLT5HIEgtPkcgSS0+SiBKLT5KIEstPkcgTC0+SiBNLT5NCisgQS0+RiBCLT5CIEMtPkMgRC0+RCBFLT5FIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5CIEwtPkwgTS0+TQorbWVyZ2VkIEUgaW50byBGCisgQS0+RiBCLT5CIEMtPkMgRC0+RCBFLT5GIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5CIEwtPkwgTS0+TQorbWVyZ2VkIEQgaW50byBDCisgQS0+RiBCLT5CIEMtPkMgRC0+QyBFLT5GIEYtPkYgRy0+RyBILT5IIEktPkkgSi0+SiBLLT5CIEwtPkwgTS0+TQogbWVyZ2VkIE0gaW50byBDCi0gQS0+SiBCLT5HIEMtPkMgRC0+QyBFLT5KIEYtPkogRy0+RyBILT5HIEktPkogSi0+SiBLLT5HIEwtPkogTS0+QwotbWVyZ2VkIEogaW50byBHCi0gQS0+RyBCLT5HIEMtPkMgRC0+QyBFLT5HIEYtPkcgRy0+RyBILT5HIEktPkcgSi0+RyBLLT5HIEwtPkcgTS0+QwotbWVyZ2VkIEMgaW50byBHCi0gQS0+RyBCLT5HIEMtPkcgRC0+RyBFLT5HIEYtPkcgRy0+RyBILT5HIEktPkcgSi0+RyBLLT5HIEwtPkcgTS0+RworIEEtPkYgQi0+QiBDLT5DIEQtPkMgRS0+RiBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkogSy0+QiBMLT5MIE0tPkMKK21lcmdlZCBKIGludG8gQgorIEEtPkYgQi0+QiBDLT5DIEQtPkMgRS0+RiBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkIgSy0+QiBMLT5MIE0tPkMKK21lcmdlZCBCIGludG8gQworIEEtPkYgQi0+QyBDLT5DIEQtPkMgRS0+RiBGLT5GIEctPkcgSC0+SCBJLT5JIEotPkMgSy0+QyBMLT5MIE0tPkMKK21lcmdlZCBGIGludG8gRworIEEtPkcgQi0+QyBDLT5DIEQtPkMgRS0+RyBGLT5HIEctPkcgSC0+SCBJLT5JIEotPkMgSy0+QyBMLT5MIE0tPkMKK21lcmdlZCBMIGludG8gQworIEEtPkcgQi0+QyBDLT5DIEQtPkMgRS0+RyBGLT5HIEctPkcgSC0+SCBJLT5JIEotPkMgSy0+QyBMLT5DIE0tPkMKK21lcmdlZCBHIGludG8gSQorIEEtPkkgQi0+QyBDLT5DIEQtPkMgRS0+SSBGLT5JIEctPkkgSC0+SCBJLT5JIEotPkMgSy0+QyBMLT5DIE0tPkMKK21lcmdlZCBJIGludG8gSAorIEEtPkggQi0+QyBDLT5DIEQtPkMgRS0+SCBGLT5IIEctPkggSC0+SCBJLT5IIEotPkMgSy0+QyBMLT5DIE0tPkMKK21lcmdlZCBDIGludG8gSAorIEEtPkggQi0+SCBDLT5IIEQtPkggRS0+SCBGLT5IIEctPkggSC0+SCBJLT5IIEotPkggSy0+SCBMLT5IIE0tPkgKIAogIiIiCiAjIEVtYWNzIHR1cmQgJwpAQCAtOTYwLDExICs5NjAsMTEgQEAKICMgaXRlcmF0b3JzIGhhdmUgc2lkZS1lZmZlY3RzLCBzbyB0aGF0IHdoaWNoIHZhbHVlcyAqY2FuKiBiZSBnZW5lcmF0ZWQgYXQKICMgZWFjaCBzbG90IGRlcGVuZCBvbiB0aGUgdmFsdWVzIGl0ZXJhdGVkIGF0IHByZXZpb3VzIHNsb3RzLgogCi1kZWYgY29uam9pbihncyk6CitkZWYgc2ltcGxlX2NvbmpvaW4oZ3MpOgogCiAgICAgdmFsdWVzID0gW05vbmVdICogbGVuKGdzKQogCi0gICAgZGVmIGdlbihpLCB2YWx1ZXM9dmFsdWVzKToKKyAgICBkZWYgZ2VuKGkpOgogICAgICAgICBpZiBpID49IGxlbihncyk6CiAgICAgICAgICAgICB5aWVsZCB2YWx1ZXMKICAgICAgICAgZWxzZToKQEAgLTk4OSw3ICs5ODksNyBAQAogICAgICMgRG8gb25lIGxvb3AgbmVzdCBhdCB0aW1lIHJlY3Vyc2l2ZWx5LCB1bnRpbCB0aGUgIyBvZiBsb29wIG5lc3RzCiAgICAgIyByZW1haW5pbmcgaXMgZGl2aXNpYmxlIGJ5IDMuCiAKLSAgICBkZWYgZ2VuKGksIHZhbHVlcz12YWx1ZXMpOgorICAgIGRlZiBnZW4oaSk6CiAgICAgICAgIGlmIGkgPj0gbjoKICAgICAgICAgICAgIHlpZWxkIHZhbHVlcwogCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogICAgICMgcmVtYWluLiAgRG9uJ3QgY2FsbCBkaXJlY3RseTogIHRoaXMgaXMgYW4gaW50ZXJuYWwgb3B0aW1pemF0aW9uIGZvcgogICAgICMgZ2VuJ3MgdXNlLgogCi0gICAgZGVmIF9nZW4zKGksIHZhbHVlcz12YWx1ZXMpOgorICAgIGRlZiBfZ2VuMyhpKToKICAgICAgICAgYXNzZXJ0IGkgPCBuIGFuZCAobi1pKSAlIDMgPT0gMAogICAgICAgICBpcDEsIGlwMiwgaXAzID0gaSsxLCBpKzIsIGkrMwogICAgICAgICBnLCBnMSwgZzIgPSBnc1tpIDogaXAzXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKaW5kZXggMDg5NDc3Yy4uNTA2MzhhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CkBAIC0xLDQxICsxLDExMiBAQAorIiIiCitUZXN0cyBjb21tb24gdG8gZ2VuZXJpY3BhdGgsIG1hY3BhdGgsIG50cGF0aCBhbmQgcG9zaXhwYXRoCisiIiIKKwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBvcwogaW1wb3J0IGdlbmVyaWNwYXRoCitpbXBvcnQgc3lzCiAKLWNsYXNzIEFsbENvbW1vblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIGFzc2VydElzKHNlbGYsIGEsIGIpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoYSBpcyBiKQorZGVmIHNhZmVfcm1kaXIoZGlybmFtZSk6CisgICAgdHJ5OgorICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBwYXNzCisKKworY2xhc3MgR2VuZXJpY1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBnZW5lcmljcGF0aAorICAgIGNvbW1vbl9hdHRyaWJ1dGVzID0gWydjb21tb25wcmVmaXgnLCAnZ2V0c2l6ZScsICdnZXRhdGltZScsICdnZXRjdGltZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldG10aW1lJywgJ2V4aXN0cycsICdpc2RpcicsICdpc2ZpbGUnXQorICAgIGF0dHJpYnV0ZXMgPSBbXQorCisgICAgZGVmIHRlc3Rfbm9fYXJndW1lbnQoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIHNlbGYuY29tbW9uX2F0dHJpYnV0ZXMgKyBzZWxmLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgZ2V0YXR0cihzZWxmLnBhdGhtb2R1bGUsIGF0dHIpKCkKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWwoInt9Lnt9KCkgZGlkIG5vdCByYWlzZSBhIFR5cGVFcnJvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnBhdGhtb2R1bGUuX19uYW1lX18sIGF0dHIpKQogCiAgICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgorICAgICAgICBjb21tb25wcmVmaXggPSBzZWxmLnBhdGhtb2R1bGUuY29tbW9ucHJlZml4CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoW10pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFtdKSwKICAgICAgICAgICAgICIiCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGdlbmVyaWNwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2Vuc29uL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAogICAgICAgICAgICAgIi9ob21lL3N3ZW4iCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGdlbmVyaWNwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW4vc3BhbSIsICIvaG9tZS9zd2VuL2VnZ3MiXSksCisgICAgICAgICAgICBjb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9lZ2dzIl0pLAogICAgICAgICAgICAgIi9ob21lL3N3ZW4vIgogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBnZW5lcmljcGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiL2hvbWUvc3dlbi9zcGFtIiwgIi9ob21lL3N3ZW4vc3BhbSJdKSwKICAgICAgICAgICAgICIvaG9tZS9zd2VuL3NwYW0iCiAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNvbW1vbnByZWZpeChbImhvbWU6c3dlbnNvbjpzcGFtIiwgImhvbWU6c3dlbjpzcGFtIl0pLAorICAgICAgICAgICAgImhvbWU6c3dlbiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46ZWdncyJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOiIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46c3BhbSJdKSwKKyAgICAgICAgICAgICI6aG9tZTpzd2VuOnNwYW0iCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFtiIi9ob21lL3N3ZW5zb24vc3BhbSIsIGIiL2hvbWUvc3dlbi9zcGFtIl0pLAorICAgICAgICAgICAgYiIvaG9tZS9zd2VuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoW2IiL2hvbWUvc3dlbi9zcGFtIiwgYiIvaG9tZS9zd2VuL2VnZ3MiXSksCisgICAgICAgICAgICBiIi9ob21lL3N3ZW4vIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoW2IiL2hvbWUvc3dlbi9zcGFtIiwgYiIvaG9tZS9zd2VuL3NwYW0iXSksCisgICAgICAgICAgICBiIi9ob21lL3N3ZW4vc3BhbSIKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY29tbW9ucHJlZml4KFtiImhvbWU6c3dlbnNvbjpzcGFtIiwgYiJob21lOnN3ZW46c3BhbSJdKSwKKyAgICAgICAgICAgIGIiaG9tZTpzd2VuIgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoW2IiOmhvbWU6c3dlbjpzcGFtIiwgYiI6aG9tZTpzd2VuOmVnZ3MiXSksCisgICAgICAgICAgICBiIjpob21lOnN3ZW46IgorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjb21tb25wcmVmaXgoW2IiOmhvbWU6c3dlbjpzcGFtIiwgYiI6aG9tZTpzd2VuOnNwYW0iXSksCisgICAgICAgICAgICBiIjpob21lOnN3ZW46c3BhbSIKKyAgICAgICAgKQorCisgICAgICAgIHRlc3RsaXN0ID0gWycnLCAnYWJjJywgJ1hiY2QnLCAnWGInLCAnWFknLCAnYWJjZCcsCisgICAgICAgICAgICAgICAgICAgICdhWGMnLCAnYWJkJywgJ2FiJywgJ2FYJywgJ2FiY1gnXQorICAgICAgICBmb3IgczEgaW4gdGVzdGxpc3Q6CisgICAgICAgICAgICBmb3IgczIgaW4gdGVzdGxpc3Q6CisgICAgICAgICAgICAgICAgcCA9IGNvbW1vbnByZWZpeChbczEsIHMyXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEuc3RhcnRzd2l0aChwKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczIuc3RhcnRzd2l0aChwKSkKKyAgICAgICAgICAgICAgICBpZiBzMSAhPSBzMjoKKyAgICAgICAgICAgICAgICAgICAgbiA9IGxlbihwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMxW246bisxXSwgczJbbjpuKzFdKQogCiAgICAgZGVmIHRlc3RfZ2V0c2l6ZShzZWxmKToKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbmVyaWNwYXRoLmdldHNpemUoc3VwcG9ydC5URVNURk4pLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhdGhtb2R1bGUuZ2V0c2l6ZShzdXBwb3J0LlRFU1RGTiksIDMpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBpZiBub3QgZi5jbG9zZWQ6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBvcy5yZW1vdmUoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6CiAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQpAQCAtNTEsMTM0ICsxMjIsMTg3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGIiZm9vYmFyIikKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoCi0gICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguZ2V0Y3RpbWUoc3VwcG9ydC5URVNURk4pLAotICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLmdldG10aW1lKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYucGF0aG1vZHVsZS5nZXRjdGltZShzdXBwb3J0LlRFU1RGTiksCisgICAgICAgICAgICAgICAgc2VsZi5wYXRobW9kdWxlLmdldG10aW1lKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9leGlzdHMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguZXhpc3RzKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmV4aXN0cyhzdXBwb3J0LlRFU1RGTiksIEZhbHNlKQogICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShiImZvbyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguZXhpc3RzKHN1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmV4aXN0cyhzdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXRobW9kdWxlID09IGdlbmVyaWNwYXRoOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmxleGlzdHMoc3VwcG9ydC5URVNURk4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdlbmVyaWNwYXRoLmV4aXN0cykKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfaXNkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2VuZXJpY3BhdGguaXNkaXIoc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNkaXIoc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2RpcihzdXBwb3J0LlRFU1RGTiksIEZhbHNlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXRobW9kdWxlLmlzZGlyKHN1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKICAgICAgICAgICAgIG9zLnJtZGlyKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnJtZGlyKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdlbmVyaWNwYXRoLmlzZGlyKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzYWZlX3JtZGlyKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfaXNmaWxlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZShzdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUoc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZShzdXBwb3J0LlRFU1RGTiksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGF0aG1vZHVsZS5pc2ZpbGUoc3VwcG9ydC5URVNURk4pLCBUcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGdlbmVyaWNwYXRoLmlzZmlsZShzdXBwb3J0LlRFU1RGTiksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhdGhtb2R1bGUuaXNmaWxlKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCiAgICAgICAgICAgICBvcy5ybWRpcihzdXBwb3J0LlRFU1RGTikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy5ybWRpcihzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5pc2RpcikKIAotICAgICAgICBkZWYgdGVzdF9zYW1lZmlsZShzZWxmKToKLSAgICAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgICAgICAgICAgICAgIGdlbmVyaWNwYXRoLnNhbWVmaWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICBUcnVlCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCBkb2Vzbid0IHJldHVybiByZXNvbmFibGUKLSAgICAgICAgICAgICAgICAjIGlub2RlIGluZm9ybWF0aW9uIGFuZCB0aHVzLCB0aGF0IHNhbWVmaWxlKCkgZG9lc24ndCB3b3JrCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKLSAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOICsgIjEiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguc2FtZWZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAgICBUcnVlCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOICsgIjIiKQotICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKLSAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiImJhciIpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY3BhdGguc2FtZWZpbGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgICAgICBGYWxzZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOICsgIjEiKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOICsgIjIiKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcworIyBGb2xsb3dpbmcgVGVzdENhc2UgaXMgbm90IHN1cHBvc2VkIHRvIGJlIHJ1biBmcm9tIHRlc3RfZ2VuZXJpY3BhdGguCisjIEl0IGlzIGluaGVyaXRlZCBieSBvdGhlciB0ZXN0IG1vZHVsZXMgKG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKS4KIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZW5lcmljcGF0aC5zYW1lZmlsZSkKK2NsYXNzIENvbW1vblRlc3QoR2VuZXJpY1Rlc3QpOgorICAgICMgVGhlIHBhdGggbW9kdWxlIHRvIGJlIHRlc3RlZAorICAgIHBhdGhtb2R1bGUgPSBOb25lCisgICAgY29tbW9uX2F0dHJpYnV0ZXMgPSBHZW5lcmljVGVzdC5jb21tb25fYXR0cmlidXRlcyArIFsKKyAgICAgICAgIyBQcm9wZXJ0aWVzCisgICAgICAgICdjdXJkaXInLCAncGFyZGlyJywgJ2V4dHNlcCcsICdzZXAnLAorICAgICAgICAncGF0aHNlcCcsICdkZWZwYXRoJywgJ2FsdHNlcCcsICdkZXZudWxsJywKKyAgICAgICAgIyBNZXRob2RzCisgICAgICAgICdub3JtY2FzZScsICdzcGxpdGRyaXZlJywgJ2V4cGFuZHZhcnMnLCAnbm9ybXBhdGgnLCAnYWJzcGF0aCcsCisgICAgICAgICdqb2luJywgJ3NwbGl0JywgJ3NwbGl0ZXh0JywgJ2lzYWJzJywgJ2Jhc2VuYW1lJywgJ2Rpcm5hbWUnLAorICAgICAgICAnbGV4aXN0cycsICdpc2xpbmsnLCAnaXNtb3VudCcsICdleHBhbmR1c2VyJywgJ25vcm1wYXRoJywgJ3JlYWxwYXRoJywKKyAgICBdCisKKyAgICBkZWYgdGVzdF9ub3JtY2FzZShzZWxmKToKKyAgICAgICAgbm9ybWNhc2UgPSBzZWxmLnBhdGhtb2R1bGUubm9ybWNhc2UKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vcm1jYXNlKCkgaXMgaWRlbXBvdGVudAorICAgICAgICBmb3IgcCBpbiBbIkZvTy8uL0JhUiIsIGIiRm9PLy4vQmFSIl06CisgICAgICAgICAgICBwID0gbm9ybWNhc2UocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgbm9ybWNhc2UocCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtY2FzZSgnJyksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm1jYXNlKGInJyksIGInJykKKworICAgICAgICAjIGNoZWNrIHRoYXQgbm9ybWNhc2UgcmFpc2VzIGEgVHlwZUVycm9yIGZvciBpbnZhbGlkIHR5cGVzCisgICAgICAgIGZvciBwYXRoIGluIChOb25lLCBUcnVlLCAwLCAyLjUsIFtdLCBieXRlYXJyYXkoYicnKSwgeydvJywnbyd9KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbm9ybWNhc2UsIHBhdGgpCisKKyAgICBkZWYgdGVzdF9zcGxpdGRyaXZlKHNlbGYpOgorICAgICAgICAjIHNwbGl0ZHJpdmUgZm9yIG5vbi1OVCBwYXRocworICAgICAgICBzcGxpdGRyaXZlID0gc2VsZi5wYXRobW9kdWxlLnNwbGl0ZHJpdmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCIvZm9vL2JhciIpLCAoIiIsICIvZm9vL2JhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoImZvbzpiYXIiKSwgKCIiLCAiZm9vOmJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoIjpmb286YmFyIiksICgiIiwgIjpmb286YmFyIikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKGIiL2Zvby9iYXIiKSwgKGIiIiwgYiIvZm9vL2JhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoYiJmb286YmFyIiksIChiIiIsIGIiZm9vOmJhciIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZHJpdmUoYiI6Zm9vOmJhciIpLCAoYiIiLCBiIjpmb286YmFyIikpCisKKyAgICBkZWYgdGVzdF9leHBhbmR2YXJzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnBhdGhtb2R1bGUuX19uYW1lX18gPT0gJ21hY3BhdGgnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbWFjcGF0aC5leHBhbmR2YXJzIGlzIGEgc3R1YicpCisgICAgICAgIGV4cGFuZHZhcnMgPSBzZWxmLnBhdGhtb2R1bGUuZXhwYW5kdmFycworICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudi5jbGVhcigpCisgICAgICAgICAgICBlbnZbImZvbyJdID0gImJhciIKKyAgICAgICAgICAgIGVudlsie2ZvbyJdID0gImJhejEiCisgICAgICAgICAgICBlbnZbIntmb299Il0gPSAiYmF6MiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiZm9vIiksICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkZm9vIGJhciIpLCAiYmFyIGJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJFtmb29dYmFyIiksICIkW2Zvb11iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkYmFyIGJhciIpLCAiJGJhciBiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIkP2JhciIpLCAiJD9iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKCIke2Zvb31iYXIiKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRmb299YmFyIiksICJiYXJ9YmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHtmb28iKSwgIiR7Zm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJHt7Zm9vfX0iKSwgImJhejF9IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycygiJGZvbyRmb28iKSwgImJhcmJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoIiRiYXIkYmFyIiksICIkYmFyJGJhciIpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycyhiImZvbyIpLCBiImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoYiIkZm9vIGJhciIpLCBiImJhciBiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKGIiJHtmb299YmFyIiksIGIiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycyhiIiRbZm9vXWJhciIpLCBiIiRbZm9vXWJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoYiIkYmFyIGJhciIpLCBiIiRiYXIgYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycyhiIiQ/YmFyIiksIGIiJD9iYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKGIiJHtmb299YmFyIiksIGIiYmFyYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycyhiIiRmb299YmFyIiksIGIiYmFyfWJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGFuZHZhcnMoYiIke2ZvbyIpLCBiIiR7Zm9vIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwYW5kdmFycyhiIiR7e2Zvb319IiksIGIiYmF6MX0iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKGIiJGZvbyRmb28iKSwgYiJiYXJiYXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhbmR2YXJzKGIiJGJhciRiYXIiKSwgYiIkYmFyJGJhciIpCisKKyAgICBkZWYgdGVzdF9hYnNwYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28iLCBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmb28iLCBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aChiImZvbyIpKQorCisgICAgICAgICMgQWJzcGF0aCByZXR1cm5zIGJ5dGVzIHdoZW4gdGhlIGFyZyBpcyBieXRlcworICAgICAgICBmb3IgcGF0aCBpbiAoYicnLCBiJ2ZvbycsIGInZlx4ZjJceGYyJywgYicvZm9vJywgYidDOlxcJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5wYXRobW9kdWxlLmFic3BhdGgocGF0aCksIGJ5dGVzKQorCisgICAgZGVmIHRlc3RfcmVhbHBhdGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbyIsIHNlbGYucGF0aG1vZHVsZS5yZWFscGF0aCgiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJmb28iLCBzZWxmLnBhdGhtb2R1bGUucmVhbHBhdGgoYiJmb28iKSkKKworICAgIGRlZiB0ZXN0X25vcm1wYXRoX2lzc3VlNTgyNyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgbm9ybXBhdGggcHJlc2VydmVzIHVuaWNvZGUKKyAgICAgICAgZm9yIHBhdGggaW4gKCcnLCAnLicsICcvJywgJ1xcJywgJy8vL2Zvby8uLy9iYXIvLycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGF0aG1vZHVsZS5ub3JtcGF0aChwYXRoKSwgc3RyKQorCisgICAgZGVmIHRlc3RfYWJzcGF0aF9pc3N1ZTM0MjYoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhYnNwYXRoIHJldHVybnMgdW5pY29kZSB3aGVuIHRoZSBhcmcgaXMgdW5pY29kZQorICAgICAgICAjIHdpdGggYm90aCBBU0NJSSBhbmQgbm9uLUFTQ0lJIGN3ZHMuCisgICAgICAgIGFic3BhdGggPSBzZWxmLnBhdGhtb2R1bGUuYWJzcGF0aAorICAgICAgICBmb3IgcGF0aCBpbiAoJycsICdmdXUnLCAnZlx4ZjlceGY5JywgJy9mdXUnLCAnVTpcXCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFic3BhdGgocGF0aCksIHN0cikKKworICAgICAgICB1bmljd2QgPSAnXHhlN3dceGYwJworICAgICAgICB0cnk6CisgICAgICAgICAgICBmc2VuY29kaW5nID0gc3VwcG9ydC5URVNURk5fRU5DT0RJTkcgb3IgImFzY2lpIgorICAgICAgICAgICAgdW5pY3dkLmVuY29kZShmc2VuY29kaW5nKQorICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBVbmljb2RlRW5jb2RlRXJyb3IpOgorICAgICAgICAgICAgIyBGUyBlbmNvZGluZyBpcyBwcm9iYWJseSBBU0NJSQorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHVuaWN3ZCk6CisgICAgICAgICAgICAgICAgZm9yIHBhdGggaW4gKCcnLCAnZnV1JywgJ2ZceGY5XHhmOScsICcvZnV1JywgJ1U6XFwnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFic3BhdGgocGF0aCksIHN0cikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLAorICAgICAgICAiTWFjIE9TIFggZGVuaWVzIHRoZSBjcmVhdGlvbiBvZiBhIGRpcmVjdG9yeSB3aXRoIGFuIGludmFsaWQgdXRmOCBuYW1lIikKKyAgICBkZWYgdGVzdF9ub25hc2NpaV9hYnNwYXRoKHNlbGYpOgorICAgICAgICAjIFRlc3Qgbm9uLUFTQ0lJLCBub24tVVRGOCBieXRlcyBpbiB0aGUgcGF0aC4KKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKGInXHhlN3dceGYwJyk6CisgICAgICAgICAgICBzZWxmLnRlc3RfYWJzcGF0aCgpCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFsbENvbW1vblRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJpY1Rlc3QpCisKIAogaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IDFlODhhMzQuLjNkOWMwNmEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMiwxNiArMiw2IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX2tleXdvcmRzCiAKLWltcG9ydCB3YXJuaW5ncwotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSIuKmludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGU9X19uYW1lX18pCi13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9Ii4qaW50ZWdlciBhcmd1bWVudCBleHBlY3RlZCwgZ290IGZsb2F0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZT0idW5pdHRlc3QiKQotCiAiIiIKID4gSG93IGFib3V0IHRoZSBmb2xsb3dpbmcgY291bnRlcnByb3Bvc2FsLiBUaGlzIGFsc28gY2hhbmdlcyBzb21lIG9mCiA+IHRoZSBvdGhlciBmb3JtYXQgY29kZXMgdG8gYmUgYSBsaXR0bGUgbW9yZSByZWd1bGFyLgpAQCAtNDgsMTcgKzM4LDE0IEBACiBWRVJZX0xBUkdFID0gMHhGRjAwMDAxMjEyMTIxMjEyMTIxMjEyNDIKIAogZnJvbSBfdGVzdGNhcGkgaW1wb3J0IFVDSEFSX01BWCwgVVNIUlRfTUFYLCBVSU5UX01BWCwgVUxPTkdfTUFYLCBJTlRfTUFYLCBcCi0gICAgIElOVF9NSU4sIExPTkdfTUlOLCBMT05HX01BWCwgUFlfU1NJWkVfVF9NSU4sIFBZX1NTSVpFX1RfTUFYCisgICAgIElOVF9NSU4sIExPTkdfTUlOLCBMT05HX01BWCwgUFlfU1NJWkVfVF9NSU4sIFBZX1NTSVpFX1RfTUFYLCBcCisgICAgIFNIUlRfTUlOLCBTSFJUX01BWAogCiAjIGZha2UsIHRoZXkgYXJlIG5vdCBkZWZpbmVkIGluIFB5dGhvbidzIGhlYWRlciBmaWxlcwogTExPTkdfTUFYID0gMioqNjMtMQogTExPTkdfTUlOID0gLTIqKjYzCiBVTExPTkdfTUFYID0gMioqNjQtMQogCi1jbGFzcyBMb25nOgotICAgIGRlZiBfX2ludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gOTkKLQogY2xhc3MgSW50OgogICAgIGRlZiBfX2ludF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gOTkKQEAgLTY4LDcgKzU1LDYgQEAKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfYgogICAgICAgICAjIGIgcmV0dXJucyAndW5zaWduZWQgY2hhcicsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nICgwIC4uLiBVQ0hBUl9NQVgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19iLCAzLjE0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoTG9uZygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19iKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIC0xKQpAQCAtNzcsMzEgKzYzLDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfYiwgVUNIQVJfTUFYICsgMSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2IoNDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2IoNDIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2IsIFZFUllfTEFSR0UpCiAKICAgICBkZWYgdGVzdF9CKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19CCiAgICAgICAgICMgQiByZXR1cm5zICd1bnNpZ25lZCBjaGFyJywgbm8gcmFuZ2UgY2hlY2tpbmcKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0IsIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfQihMb25nKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0IoSW50KCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVDSEFSX01BWCwgZ2V0YXJnc19CKC0xKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoVUNIQVJfTUFYKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoVUNIQVJfTUFYKzEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfQig0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfQig0MikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYICYgVkVSWV9MQVJHRSwgZ2V0YXJnc19CKFZFUllfTEFSR0UpKQogCiAgICAgZGVmIHRlc3RfSChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSAogICAgICAgICAjIEggcmV0dXJucyAndW5zaWduZWQgc2hvcnQnLCBubyByYW5nZSBjaGVja2luZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSCwgMy4xNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19IKExvbmcoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChJbnQoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVU0hSVF9NQVgsIGdldGFyZ3NfSCgtMSkpCkBAIC0xMTAsNyArOTEsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSChVU0hSVF9NQVgrMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19IKDQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19IKDQyKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZFUllfTEFSR0UgJiBVU0hSVF9NQVgsIGdldGFyZ3NfSChWRVJZX0xBUkdFKSkKIApAQCAtMTE4LDcgKzk4LDYgQEAKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfSQogICAgICAgICAjIEkgcmV0dXJucyAndW5zaWduZWQgaW50Jywgbm8gcmFuZ2UgY2hlY2tpbmcKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ksIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSShMb25nKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUlOVF9NQVgsIGdldGFyZ3NfSSgtMSkpCkBAIC0xMjcsNyArMTA2LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0koVUlOVF9NQVgrMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19JKDQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19JKDQyKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFZFUllfTEFSR0UgJiBVSU5UX01BWCwgZ2V0YXJnc19JKFZFUllfTEFSR0UpKQogCkBAIC0xMzYsNyArMTE0LDYgQEAKICAgICAgICAgIyBrIHJldHVybnMgJ3Vuc2lnbmVkIGxvbmcnLCBubyByYW5nZSBjaGVja2luZwogICAgICAgICAjIGl0IGRvZXMgbm90IGFjY2VwdCBmbG9hdCwgb3IgaW5zdGFuY2VzIHdpdGggX19pbnRfXwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaywgMy4xNCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ssIExvbmcoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ssIEludCgpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUxPTkdfTUFYLCBnZXRhcmdzX2soLTEpKQpAQCAtMTQ1LDE2ICsxMjIsMjggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2soVUxPTkdfTUFYKzEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfayg0MikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxPTkdfTUFYLCBnZXRhcmdzX2soVkVSWV9MQVJHRSkpCiAKIGNsYXNzIFNpZ25lZF9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfaAorICAgICAgICAjIGggcmV0dXJucyAnc2hvcnQnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoU0hSVF9NSU4gLi4uIFNIUlRfTUFYKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaCwgMy4xNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19oKEludCgpKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFNIUlRfTUlOLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU0hSVF9NSU4sIGdldGFyZ3NfaChTSFJUX01JTikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoU0hSVF9NQVgsIGdldGFyZ3NfaChTSFJUX01BWCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaCwgU0hSVF9NQVgrMSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBnZXRhcmdzX2goNDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2gsIFZFUllfTEFSR0UpCisKICAgICBkZWYgdGVzdF9pKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19pCiAgICAgICAgICMgaSByZXR1cm5zICdpbnQnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZyAoSU5UX01JTiAuLi4gSU5UX01BWCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2ksIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShMb25nKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2koSW50KCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfaSwgSU5UX01JTi0xKQpAQCAtMTYzLDE0ICsxNTIsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBJTlRfTUFYKzEpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19pKDQyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0MiwgZ2V0YXJnc19pKDQyKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19pLCBWRVJZX0xBUkdFKQogCiAgICAgZGVmIHRlc3RfbChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfbAogICAgICAgICAjIGwgcmV0dXJucyAnbG9uZycsIGFuZCBkb2VzIHJhbmdlIGNoZWNraW5nIChMT05HX01JTiAuLi4gTE9OR19NQVgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19sLCAzLjE0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woTG9uZygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19sKEludCgpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2wsIExPTkdfTUlOLTEpCkBAIC0xNzksNyArMTY2LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01BWCsxKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfbCg0MikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbCwgVkVSWV9MQVJHRSkKIAogICAgIGRlZiB0ZXN0X24oc2VsZik6CkBAIC0xODcsNyArMTczLDYgQEAKICAgICAgICAgIyBuIHJldHVybnMgJ1B5X3NzaXplX3QnLCBhbmQgZG9lcyByYW5nZSBjaGVja2luZwogICAgICAgICAjIChQWV9TU0laRV9UX01JTiAuLi4gUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19uLCAzLjE0KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfbiwgTG9uZygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfbiwgSW50KCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01JTi0xKQpAQCAtMTk2LDE3ICsxODEsMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19uLCBQWV9TU0laRV9UX01BWCsxKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3Nfbig0MikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCiBjbGFzcyBMb25nTG9uZ19UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfTChzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfTAotICAgICAgICAjIEwgcmV0dXJucyAnbG9uZyBsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExMT05HX01JTiAuLi4gTExPTkdfTUFYKQorICAgICAgICAjIEwgcmV0dXJucyAnbG9uZyBsb25nJywgYW5kIGRvZXMgcmFuZ2UgY2hlY2tpbmcgKExMT05HX01JTgorICAgICAgICAjIC4uLiBMTE9OR19NQVgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19MLCAzLjE0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfTCwgIkhlbGxvIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBnZXRhcmdzX0woMy4xNCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfTChMb25nKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgTExPTkdfTUlOLTEpCkBAIC0yMTUsMjEgKzE5OSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX0wsIExMT05HX01BWCsxKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfTCg0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfTCg0MikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfTCwgVkVSWV9MQVJHRSkKIAogICAgIGRlZiB0ZXN0X0soc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0sKICAgICAgICAgIyBLIHJldHVybiAndW5zaWduZWQgbG9uZyBsb25nJywgbm8gcmFuZ2UgY2hlY2tpbmcKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ssIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBMb25nKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19LLCBJbnQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVTExPTkdfTUFYLCBnZXRhcmdzX0soVUxMT05HX01BWCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19LKDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSyhVTExPTkdfTUFYKzEpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGdldGFyZ3NfSyg0MikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChWRVJZX0xBUkdFICYgVUxMT05HX01BWCwgZ2V0YXJnc19LKFZFUllfTEFSR0UpKQogCkBAIC0yNTYsMjQgKzIzNywyOCBAQAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwgMywgKDQsKDUsNikpLCAoNyw4LDkpLCAxMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTApCiAgICAgICAgICAgICApCisKICAgICBkZWYgdGVzdF9taXhlZF9hcmdzKHNlbGYpOgogICAgICAgICAjIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJncwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcygoMSwyKSwgMywgKDQsKDUsNikpLCBhcmc0PSg3LDgsOSksIGFyZzU9MTApLAogICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQogICAgICAgICAgICAgKQorCiAgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmdzKHNlbGYpOgogICAgICAgICAjIGFsbCBrZXl3b3JkcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgZ2V0YXJnc19rZXl3b3JkcyhhcmcxPSgxLDIpLCBhcmcyPTMsIGFyZzM9KDQsKDUsNikpLCBhcmc0PSg3LDgsOSksIGFyZzU9MTApLAogICAgICAgICAgICAgKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwKQogICAgICAgICAgICAgKQorCiAgICAgZGVmIHRlc3Rfb3B0aW9uYWxfYXJncyhzZWxmKToKICAgICAgICAgIyBtaXNzaW5nIG9wdGlvbmFsIGtleXdvcmQgYXJncywgc2tpcHBpbmcgdHVwbGVzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKGFyZzE9KDEsMiksIGFyZzI9MywgYXJnNT0xMCksCiAgICAgICAgICAgICAoMSwgMiwgMywgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMTApCiAgICAgICAgICAgICApCisKICAgICBkZWYgdGVzdF9yZXF1aXJlZF9hcmdzKHNlbGYpOgogICAgICAgICAjIHJlcXVpcmVkIGFyZyBtaXNzaW5nCiAgICAgICAgIHRyeToKQEAgLTI4Miw2ICsyNjcsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIlJlcXVpcmVkIGFyZ3VtZW50ICdhcmcyJyAocG9zIDIpIG5vdCBmb3VuZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ1R5cGVFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCcpCisKICAgICBkZWYgdGVzdF90b29fbWFueV9hcmdzKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLDMsKDQsKDUsNikpLCg3LDgsOSksMTAsMTExKQpAQCAtMjg5LDYgKzI3NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAiZnVuY3Rpb24gdGFrZXMgYXQgbW9zdCA1IGFyZ3VtZW50cyAoNiBnaXZlbikiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdUeXBlRXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByYWlzZWQnKQorCiAgICAgZGVmIHRlc3RfaW52YWxpZF9rZXl3b3JkKHNlbGYpOgogICAgICAgICAjIGV4dHJhbmVvdXMga2V5d29yZCBhcmcKICAgICAgICAgdHJ5OgpAQCAtMjk4LDggKzI4NSwxNTYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgnVHlwZUVycm9yIHNob3VsZCBoYXZlIGJlZW4gcmFpc2VkJykKIAorICAgIGRlZiB0ZXN0X3N1cnJvZ2F0ZV9rZXl3b3JkKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBnZXRhcmdzX2tleXdvcmRzKCgxLDIpLCAzLCAoNCwoNSw2KSksICg3LDgsOSksICoqeydcdURDODAnOiAxMH0pCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIidcdWRjODAnIGlzIGFuIGludmFsaWQga2V5d29yZCBhcmd1bWVudCBmb3IgdGhpcyBmdW5jdGlvbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ1R5cGVFcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCcpCisKK2NsYXNzIEJ5dGVzX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19zCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfcywgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3MsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfcywgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3MsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zX3N0YXIoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3Nfc3RhcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19zdGFyKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIoYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpLCBiJ2J5dGVhcnJheScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19zX3N0YXIobWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSksIGInbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX3N0YXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zX2hhc2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3NfaGFzaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfc19oYXNoKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19zX2hhc2gsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfc19oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfc19oYXNoLCBOb25lKQorCisgICAgZGVmIHRlc3RfeihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfegorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfeignYWJjXHhlOScpLCBiJ2FiY1x4YzNceGE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3osICdudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeiwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc196LCBieXRlYXJyYXkoYidieXRlYXJyYXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3osIG1lbW9yeXZpZXcoYidtZW1vcnl2aWV3JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGdldGFyZ3NfeihOb25lKSkKKworICAgIGRlZiB0ZXN0X3pfc3RhcihzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3Nfel9zdGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X3N0YXIoJ2FiY1x4ZTknKSwgYidhYmNceGMzXHhhOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X3N0YXIoJ251bDpcMCcpLCBiJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc196X3N0YXIoYidieXRlcycpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfc3RhcihieXRlYXJyYXkoYidieXRlYXJyYXknKSksIGInYnl0ZWFycmF5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3pfc3RhcihtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKSwgYidtZW1vcnl2aWV3JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc196X3N0YXIoTm9uZSkpCisKKyAgICBkZWYgdGVzdF96X2hhc2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3pfaGFzaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9oYXNoKCdhYmNceGU5JyksIGInYWJjXHhjM1x4YTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9oYXNoKCdudWw6XDAnKSwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3Nfel9oYXNoKGInYnl0ZXMnKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc196X2hhc2gsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfel9oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX3pfaGFzaChOb25lKSkKKworICAgIGRlZiB0ZXN0X3koc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3kKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksICdhYmNceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3koYidieXRlcycpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksIGInbnVsOlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeSwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3ksIE5vbmUpCisKKyAgICBkZWYgdGVzdF95X3N0YXIoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3lfc3RhcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeV9zdGFyLCAnYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc195X3N0YXIoYidieXRlcycpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3lfc3RhcihiJ251bDpcMCcpLCBiJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc195X3N0YXIoYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpLCBiJ2J5dGVhcnJheScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc195X3N0YXIobWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSksIGInbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc195X3N0YXIsIE5vbmUpCisKKyAgICBkZWYgdGVzdF95X2hhc2goc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX3lfaGFzaAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeV9oYXNoLCAnYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc195X2hhc2goYidieXRlcycpLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3lfaGFzaChiJ251bDpcMCcpLCBiJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc195X2hhc2gsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeV9oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfeV9oYXNoLCBOb25lKQorCisgICAgZGVmIHRlc3Rfd19zdGFyKHNlbGYpOgorICAgICAgICAjIGdldGFyZ3Nfd19zdGFyKCkgbW9kaWZpZXMgZmlyc3QgYW5kIGxhc3QgYnl0ZQorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc193X3N0YXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3dfc3RhciwgJ2FiY1x4ZTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfd19zdGFyLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3dfc3RhciwgYidudWw6XDAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3Nfd19zdGFyLCBtZW1vcnl2aWV3KGInYnl0ZXMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3dfc3RhcihieXRlYXJyYXkoYidieXRlYXJyYXknKSksIGInW3l0ZWFycmFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX3dfc3RhcihtZW1vcnl2aWV3KGJ5dGVhcnJheShiJ21lbW9yeXZpZXcnKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInW2Vtb3J5dmllXScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc193X3N0YXIsIE5vbmUpCisKKworY2xhc3MgVW5pY29kZV9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdShzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfdQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfdSgnYWJjXHhlOScpLCAnYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc191LCAnbnVsOlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3UsIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdSwgYnl0ZWFycmF5KGInYnl0ZWFycmF5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc191LCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3VfaGFzaChzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IGdldGFyZ3NfdV9oYXNoCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc191X2hhc2goJ2FiY1x4ZTknKSwgJ2FiY1x4ZTknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGFyZ3NfdV9oYXNoKCdudWw6XDAnKSwgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc191X2hhc2gsIGInYnl0ZXMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfdV9oYXNoLCBieXRlYXJyYXkoYidieXRlYXJyYXknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3VfaGFzaCwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX3VfaGFzaCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X1ooc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX1oKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX1ooJ2FiY1x4ZTknKSwgJ2FiY1x4ZTknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWiwgJ251bDpcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19aLCBiJ2J5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1osIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWiwgbWVtb3J5dmlldyhiJ21lbW9yeXZpZXcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aKE5vbmUpKQorCisgICAgZGVmIHRlc3RfWl9oYXNoKHNlbGYpOgorICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19aX2hhc2gKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhcmdzX1pfaGFzaCgnYWJjXHhlOScpLCAnYWJjXHhlOScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXJnc19aX2hhc2goJ251bDpcMCcpLCAnbnVsOlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX1pfaGFzaCwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19aX2hhc2gsIGJ5dGVhcnJheShiJ2J5dGVhcnJheScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfWl9oYXNoLCBtZW1vcnl2aWV3KGInbWVtb3J5dmlldycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZXRhcmdzX1pfaGFzaChOb25lKSkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbU2lnbmVkX1Rlc3RDYXNlLCBVbnNpZ25lZF9UZXN0Q2FzZSwgVHVwbGVfVGVzdENhc2UsIEtleXdvcmRzX1Rlc3RDYXNlXQorICAgIHRlc3RzID0gWworICAgICAgICBTaWduZWRfVGVzdENhc2UsCisgICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAorICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKKyAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCisgICAgICAgIEJ5dGVzX1Rlc3RDYXNlLAorICAgICAgICBVbmljb2RlX1Rlc3RDYXNlLAorICAgIF0KICAgICB0cnk6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wsIGdldGFyZ3NfSwogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0b3B0LnB5IGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKaW5kZXggMGY0N2ZjYi4uZmE1NzAxZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRvcHQucHkKQEAgLTUsNyArNSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IGdldG9wdAotaW1wb3J0IG9zCiAKIHNlbnRpbmVsID0gb2JqZWN0KCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5IGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CmluZGV4IGY5MmQzMDQuLjE1NjBhNmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKQEAgLTEsNSArMSw1IEBACiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBza2lwX3VubGVzc19zeW1saW5rLCBjYW5fc3ltbGluawogaW1wb3J0IGdsb2IKIGltcG9ydCBvcwogaW1wb3J0IHNodXRpbApAQCAtMjUsNyArMjUsNyBAQAogICAgICAgICBzZWxmLm1rdGVtcCgnWlpaJykKICAgICAgICAgc2VsZi5ta3RlbXAoJ2EnLCAnYmNkJywgJ0VGJykKICAgICAgICAgc2VsZi5ta3RlbXAoJ2EnLCAnYmNkJywgJ2VmZycsICdoYScpCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICdzeW1saW5rJyk6CisgICAgICAgIGlmIGNhbl9zeW1saW5rKCk6CiAgICAgICAgICAgICBvcy5zeW1saW5rKHNlbGYubm9ybSgnYnJva2VuJyksIHNlbGYubm9ybSgnc3ltMScpKQogICAgICAgICAgICAgb3Muc3ltbGluayhzZWxmLm5vcm0oJ2Jyb2tlbicpLCBzZWxmLm5vcm0oJ3N5bTInKSkKIApAQCAtOTYsMTQgKzk2LDE0IEBACiAgICAgICAgIHJlcyA9IGdsb2IuZ2xvYihzZWxmLnRlbXBkaXIgKyAnKicgKyBvcy5zZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlcyksIDEpCiAgICAgICAgICMgZWl0aGVyIG9mIHRoZXNlIHJlc3VsdHMgYXJlIHJlYXNvbmFibGUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc1swXSBpbiBbc2VsZi50ZW1wZGlyLCBzZWxmLnRlbXBkaXIgKyBvcy5zZXBdKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlc1swXSwgW3NlbGYudGVtcGRpciwgc2VsZi50ZW1wZGlyICsgb3Muc2VwXSkKIAorICAgIEBza2lwX3VubGVzc19zeW1saW5rCiAgICAgZGVmIHRlc3RfZ2xvYl9icm9rZW5fc3ltbGlua3Moc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIob3MsICdzeW1saW5rJyk6Ci0gICAgICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0U2VxdWVuY2VzRXF1YWxfbm9vcmRlcgotICAgICAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0qJyksIFtzZWxmLm5vcm0oJ3N5bTEnKSwgc2VsZi5ub3JtKCdzeW0yJyldKQotICAgICAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0xJyksIFtzZWxmLm5vcm0oJ3N5bTEnKV0pCi0gICAgICAgICAgICBlcShzZWxmLmdsb2IoJ3N5bTInKSwgW3NlbGYubm9ybSgnc3ltMicpXSkKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydFNlcXVlbmNlc0VxdWFsX25vb3JkZXIKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0qJyksIFtzZWxmLm5vcm0oJ3N5bTEnKSwgc2VsZi5ub3JtKCdzeW0yJyldKQorICAgICAgICBlcShzZWxmLmdsb2IoJ3N5bTEnKSwgW3NlbGYubm9ybSgnc3ltMScpXSkKKyAgICAgICAgZXEoc2VsZi5nbG9iKCdzeW0yJyksIFtzZWxmLm5vcm0oJ3N5bTInKV0pCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nbG9iYWwucHkgYi9MaWIvdGVzdC90ZXN0X2dsb2JhbC5weQppbmRleCA4MjNmMmM1Li4zN2VjNjcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dsb2JhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dsb2JhbC5weQpAQCAtMSwxMyArMSwyMSBAQAogIiIiVmVyaWZ5IHRoYXQgd2FybmluZ3MgYXJlIGlzc3VlZCBmb3IgZ2xvYmFsIHN0YXRlbWVudHMgZm9sbG93aW5nIHVzZS4iIiIKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2hlY2tfc3ludGF4X2Vycm9yCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19zeW50YXhfZXJyb3IsIGNoZWNrX3dhcm5pbmdzCiBpbXBvcnQgdW5pdHRlc3QKLQogaW1wb3J0IHdhcm5pbmdzCi13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBtb2R1bGU9Ijx0ZXN0IHN0cmluZz4iKQorCiAKIGNsYXNzIEdsb2JhbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IGNoZWNrX3dhcm5pbmdzKCkKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlci5fX2VudGVyX18oKQorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiZXJyb3IiLCBtb2R1bGU9Ijx0ZXN0IHN0cmluZz4iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLl93YXJuaW5nc19tYW5hZ2VyLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisKKwogICAgIGRlZiB0ZXN0MShzZWxmKToKICAgICAgICAgcHJvZ190ZXh0XzEgPSAiIiJcCiBkZWYgd3JvbmcxKCk6CkBAIC00NSw3ICs1Myw5IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChHbG9iYWxUZXN0cykKKyAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJlcnJvciIsIG1vZHVsZT0iPHRlc3Qgc3RyaW5nPiIpCisgICAgICAgIHJ1bl91bml0dGVzdChHbG9iYWxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5IGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CmluZGV4IGRmMjI0ZmQuLjMyOWIyNTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKQEAgLTEsMTkgKzEsMTMgQEAKICMgUHl0aG9uIHRlc3Qgc2V0IC0tIHBhcnQgMSwgZ3JhbW1hci4KICMgVGhpcyBqdXN0IHRlc3RzIHdoZXRoZXIgdGhlIHBhcnNlciBhY2NlcHRzIHRoZW0gYWxsLgogCi0jIE5PVEU6IFdoZW4geW91IHJ1biB0aGlzIHRlc3QgYXMgYSBzY3JpcHQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCB5b3UKLSMgZ2V0IHdhcm5pbmdzIGFib3V0IGNlcnRhaW4gaGV4L29jdCBjb25zdGFudHMuICBTaW5jZSB0aG9zZSBhcmUKLSMgaXNzdWVkIGJ5IHRoZSBwYXJzZXIsIHlvdSBjYW4ndCBzdXBwcmVzcyB0aGVtIGJ5IGFkZGluZyBhCi0jIGZpbHRlcndhcm5pbmdzKCkgY2FsbCB0byB0aGlzIG1vZHVsZS4gIFRoZXJlZm9yZSwgdG8gc2h1dCB1cCB0aGUKLSMgcmVncmVzc2lvbiB0ZXN0LCB0aGUgZmlsdGVyd2FybmluZ3MoKSBjYWxsIGhhcyBiZWVuIGFkZGVkIHRvCi0jIHJlZ3J0ZXN0LnB5LgotCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjaGVja19zeW50YXhfZXJyb3IKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN5cwogIyB0ZXN0aW5nIGltcG9ydCAqCiBmcm9tIHN5cyBpbXBvcnQgKgogCisKIGNsYXNzIFRva2VuVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RCYWNrc2xhc2goc2VsZik6CkBAIC0zMDcsMTIgKzMwMSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLCB7J2InOiAxLCAnYyc6IDJ9KQogICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCwgZTozPTQsIGY9NSwgKmc6Nik6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAxLCAnYyc6IDIsICdlJzogMywgJ2cnOiA2fSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeydiJzogMSwgJ2MnOiAyLCAnZSc6IDMsICdnJzogNn0pCiAgICAgICAgIGRlZiBmKGEsIGI6MSwgYzoyLCBkLCBlOjM9NCwgZj01LCAqZzo2LCBoOjcsIGk9OCwgajo5PTEwLAogICAgICAgICAgICAgICAqKms6MTEpIC0+IDEyOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydiJzogMSwgJ2MnOiAyLCAnZSc6IDMsICdnJzogNiwgJ2gnOiA3LCAnaic6IDksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdrJzogMTEsICdyZXR1cm4nOiAxMn0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IDEsICdjJzogMiwgJ2UnOiAzLCAnZyc6IDYsICdoJzogNywgJ2onOiA5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2snOiAxMSwgJ3JldHVybic6IDEyfSkKICAgICAgICAgIyBDaGVjayBmb3IgU0YgQnVnICMxNjk3MjQ4IC0gbWl4aW5nIGRlY29yYXRvcnMgYW5kIGEgcmV0dXJuIGFubm90YXRpb24KICAgICAgICAgZGVmIG51bGwoeCk6IHJldHVybiB4CiAgICAgICAgIEBudWxsCkBAIC05MTUsNiArOTA5LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDYgLyAyIGlmIDEgZWxzZSAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNiA8IDQgaWYgMCBlbHNlIDIpLCAyKQogCisgICAgZGVmIHRlc3RfcGFyZW5fZXZhbHVhdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNiAvLyAoNCAvLyAyKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTYgLy8gNCkgLy8gMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxNiAvLyA0IC8vIDIsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGYWxzZSBpcyAoMiBpcyAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoRmFsc2UgaXMgMikgaXMgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGYWxzZSBpcyAyIGlzIDMpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChUb2tlblRlc3RzLCBHcmFtbWFyVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dycC5weSBiL0xpYi90ZXN0L3Rlc3RfZ3JwLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggOGFjYzk3Yy4uMDRhOGFmNgotLS0gYS9MaWIvdGVzdC90ZXN0X2dycC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dycC5weQpAQCAtMTIsMTMgKzEyLDEzIEBACiAgICAgICAgICMgYXR0cmlidXRlcyBwcm9taXNlZCBieSB0aGUgZG9jcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih2YWx1ZSksIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMF0sIHZhbHVlLmdyX25hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZhbHVlLmdyX25hbWUsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWx1ZS5ncl9uYW1lLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMV0sIHZhbHVlLmdyX3Bhc3N3ZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUuZ3JfcGFzc3dkLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfcGFzc3dkLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbMl0sIHZhbHVlLmdyX2dpZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUuZ3JfZ2lkLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmFsdWUuZ3JfZ2lkLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVbM10sIHZhbHVlLmdyX21lbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmFsdWUuZ3JfbWVtLCBsaXN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbHVlLmdyX21lbSwgbGlzdCkKIAogICAgIGRlZiB0ZXN0X3ZhbHVlcyhzZWxmKToKICAgICAgICAgZW50cmllcyA9IGdycC5nZXRncmFsbCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkgYi9MaWIvdGVzdC90ZXN0X2d6aXAucHkKaW5kZXggYjk5MjM4NC4uMmIwYWMzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9nemlwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQpAQCAtMSwxMyArMSwxMyBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIlRlc3Qgc2NyaXB0IGZvciB0aGUgZ3ppcCBtb2R1bGUuCiAiIiIKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBvcwotaW1wb3J0IGd6aXAKK2ltcG9ydCBpbwogaW1wb3J0IHN0cnVjdAotCitnemlwID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdnemlwJykKIAogZGF0YTEgPSBiIiIiICBpbnQgbGVuZ3RoPURFRkFVTFRBTExPQywgZXJyID0gWl9PSzsKICAgUHlPYmplY3QgKlJldFZhbDsKQEAgLTIyLDYgKzIyLDE3IEBACiAiIiIKIAogCitjbGFzcyBVbnNlZWthYmxlSU8oaW8uQnl0ZXNJTyk6CisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisgICAgZGVmIHNlZWsoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYWlzZSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCisKIGNsYXNzIFRlc3RHemlwKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKQEAgLTMzLDE0ICs0NCwxNSBAQAogCiAKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgOyBmLndyaXRlKGRhdGExICogNTApCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQogCi0gICAgICAgICMgVHJ5IGZsdXNoIGFuZCBmaWxlbm8uCi0gICAgICAgIGYuZmx1c2goKQotICAgICAgICBmLmZpbGVubygpCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICdmc3luYycpOgotICAgICAgICAgICAgb3MuZnN5bmMoZi5maWxlbm8oKSkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAjIFRyeSBmbHVzaCBhbmQgZmlsZW5vLgorICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICBmLmZpbGVubygpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAnZnN5bmMnKToKKyAgICAgICAgICAgICAgICBvcy5mc3luYyhmLmZpbGVubygpKQorICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IG11bHRpcGxlIGNsb3NlKCkgY2FsbHMuCiAgICAgICAgIGYuY2xvc2UoKQpAQCAtNDgsNyArNjAsOCBAQAogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IHJlYWRpbmcuCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgOyBkID0gZi5yZWFkKCkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyJykgYXMgZjoKKyAgICAgICAgICAgIGQgPSBmLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGRhdGExKjUwKQogCiAgICAgZGVmIHRlc3RfaW9fb25fY2xvc2VkX29iamVjdChzZWxmKToKQEAgLTc2LDE3MyArODksMTc0IEBACiAgICAgZGVmIHRlc3RfYXBwZW5kKHNlbGYpOgogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICAjIEFwcGVuZCB0byB0aGUgcHJldmlvdXMgZmlsZQotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnYWInKSA7IGYud3JpdGUoZGF0YTIgKiAxNSkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdhYicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEyICogMTUpCiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgOyBkID0gZi5yZWFkKCkgOyBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCAoZGF0YTEqNTApICsgKGRhdGEyKjE1KSkKIAogICAgIGRlZiB0ZXN0X21hbnlfYXBwZW5kKHNlbGYpOgogICAgICAgICAjIEJ1ZyAjMTA3NDI2MSB3YXMgdHJpZ2dlcmVkIHdoZW4gcmVhZGluZyBhIGZpbGUgdGhhdCBjb250YWluZWQKICAgICAgICAgIyBtYW55LCBtYW55IG1lbWJlcnMuICBDcmVhdGUgc3VjaCBhIGZpbGUgYW5kIHZlcmlmeSB0aGF0IHJlYWRpbmcgaXQKICAgICAgICAgIyB3b3Jrcy4KLSAgICAgICAgZiA9IGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAnd2InLCA5KQotICAgICAgICBmLndyaXRlKGInYScpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAyMDApOgotICAgICAgICAgICAgZiA9IGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiLCA5KSAjIGFwcGVuZAorICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAnd2InLCA5KSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZShiJ2EnKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDIwMCk6CisgICAgICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiLCA5KSBhcyBmOiAjIGFwcGVuZAorICAgICAgICAgICAgICAgIGYud3JpdGUoYidhJykKIAogICAgICAgICAjIFRyeSByZWFkaW5nIHRoZSBmaWxlCi0gICAgICAgIHpnZmlsZSA9IGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKQotICAgICAgICBjb250ZW50cyA9IGIiIgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgenR4dCA9IHpnZmlsZS5yZWFkKDgxOTIpCi0gICAgICAgICAgICBjb250ZW50cyArPSB6dHh0Ci0gICAgICAgICAgICBpZiBub3QgenR4dDogYnJlYWsKLSAgICAgICAgemdmaWxlLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgemdmaWxlOgorICAgICAgICAgICAgY29udGVudHMgPSBiIiIKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgenR4dCA9IHpnZmlsZS5yZWFkKDgxOTIpCisgICAgICAgICAgICAgICAgY29udGVudHMgKz0genR4dAorICAgICAgICAgICAgICAgIGlmIG5vdCB6dHh0OiBicmVhawogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnRlbnRzLCBiJ2EnKjIwMSkKIAorICAgIGRlZiB0ZXN0X2J1ZmZlcmVkX3JlYWRlcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzQ3MTogYSBHemlwRmlsZSBjYW4gYmUgd3JhcHBlZCBpbiBhIEJ1ZmZlcmVkUmVhZGVyIGZvcgorICAgICAgICAjIHBlcmZvcm1hbmNlLgorICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQorCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBpby5CdWZmZXJlZFJlYWRlcihmKSBhcyByOgorICAgICAgICAgICAgICAgIGxpbmVzID0gW2xpbmUgZm9yIGxpbmUgaW4gcl0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzLCA1MCAqIGRhdGExLnNwbGl0bGluZXMoVHJ1ZSkpCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgLnJlYWRsaW5lKCkgd2l0aCB2YXJ5aW5nIGxpbmUgbGVuZ3RocwogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIGxpbmVfbGVuZ3RoID0gMAotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgTCA9IGYucmVhZGxpbmUobGluZV9sZW5ndGgpCi0gICAgICAgICAgICBpZiBub3QgTCBhbmQgbGluZV9sZW5ndGggIT0gMDogYnJlYWsKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oTCkgPD0gbGluZV9sZW5ndGgpCi0gICAgICAgICAgICBsaW5lX2xlbmd0aCA9IChsaW5lX2xlbmd0aCArIDEpICUgNTAKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgbGluZV9sZW5ndGggPSAwCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lKGxpbmVfbGVuZ3RoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBMIGFuZCBsaW5lX2xlbmd0aCAhPSAwOiBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4oTCkgPD0gbGluZV9sZW5ndGgpCisgICAgICAgICAgICAgICAgbGluZV9sZW5ndGggPSAobGluZV9sZW5ndGggKyAxKSAlIDUwCiAKICAgICBkZWYgdGVzdF9yZWFkbGluZXMoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IC5yZWFkbGluZXMoKQogCi0gICAgICAgIGYgPSBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpCi0gICAgICAgIEwgPSBmLnJlYWRsaW5lcygpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygpCiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3JiJykKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygxNTApCi0gICAgICAgICAgICBpZiBMID09IFtdOiBicmVhawotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIEwgPSBmLnJlYWRsaW5lcygxNTApCisgICAgICAgICAgICAgICAgaWYgTCA9PSBbXTogYnJlYWsKIAogICAgIGRlZiB0ZXN0X3NlZWtfcmVhZChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKICAgICAgICAgIyBUcnkgc2VlaywgcmVhZCB0ZXN0CiAKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIG9sZHBvcyA9IGYudGVsbCgpCi0gICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmUxOiBicmVhawotICAgICAgICAgICAgbmV3cG9zID0gZi50ZWxsKCkKLSAgICAgICAgICAgIGYuc2VlayhvbGRwb3MpICAjIG5lZ2F0aXZlIHNlZWsKLSAgICAgICAgICAgIGlmIGxlbihsaW5lMSk+MTA6Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gMTAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYW1vdW50ID0gbGVuKGxpbmUxKQotICAgICAgICAgICAgbGluZTIgPSBmLnJlYWQoYW1vdW50KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMVs6YW1vdW50XSwgbGluZTIpCi0gICAgICAgICAgICBmLnNlZWsobmV3cG9zKSAgIyBwb3NpdGl2ZSBzZWVrCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgb2xkcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lMTogYnJlYWsKKyAgICAgICAgICAgICAgICBuZXdwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgICAgIGYuc2VlayhvbGRwb3MpICAjIG5lZ2F0aXZlIHNlZWsKKyAgICAgICAgICAgICAgICBpZiBsZW4obGluZTEpPjEwOgorICAgICAgICAgICAgICAgICAgICBhbW91bnQgPSAxMAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFtb3VudCA9IGxlbihsaW5lMSkKKyAgICAgICAgICAgICAgICBsaW5lMiA9IGYucmVhZChhbW91bnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMVs6YW1vdW50XSwgbGluZTIpCisgICAgICAgICAgICAgICAgZi5zZWVrKG5ld3BvcykgICMgcG9zaXRpdmUgc2VlawogCiAgICAgZGVmIHRlc3Rfc2Vla193aGVuY2Uoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IHNlZWsod2hlbmNlPTEpLCByZWFkIHRlc3QKIAotICAgICAgICBmID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBmLnJlYWQoMTApCi0gICAgICAgIGYuc2VlaygxMCwgd2hlbmNlPTEpCi0gICAgICAgIHkgPSBmLnJlYWQoMTApCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIGYucmVhZCgxMCkKKyAgICAgICAgICAgIGYuc2VlaygxMCwgd2hlbmNlPTEpCisgICAgICAgICAgICB5ID0gZi5yZWFkKDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksIGRhdGExWzIwOjMwXSkKIAogICAgIGRlZiB0ZXN0X3NlZWtfd3JpdGUoc2VsZik6CiAgICAgICAgICMgVHJ5IHNlZWssIHdyaXRlIHRlc3QKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnKQotICAgICAgICBmb3IgcG9zIGluIHJhbmdlKDAsIDI1NiwgMTYpOgotICAgICAgICAgICAgZi5zZWVrKHBvcykKLSAgICAgICAgICAgIGYud3JpdGUoYidHWlxuJykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycpIGFzIGY6CisgICAgICAgICAgICBmb3IgcG9zIGluIHJhbmdlKDAsIDI1NiwgMTYpOgorICAgICAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICAgICAgZi53cml0ZShiJ0daXG4nKQogCiAgICAgZGVmIHRlc3RfbW9kZShzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKLSAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubXlmaWxlb2JqLm1vZGUsICdyYicpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm15ZmlsZW9iai5tb2RlLCAncmInKQogCiAgICAgZGVmIHRlc3RfMTY0NzQ4NChzZWxmKToKICAgICAgICAgZm9yIG1vZGUgaW4gKCd3YicsICdyYicpOgotICAgICAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGYsICJuYW1lIikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgc2VsZi5maWxlbmFtZSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZiwgIm5hbWUiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgc2VsZi5maWxlbmFtZSkKKworICAgIGRlZiB0ZXN0X3BhZGRlZGZpbGVfZ2V0YXR0cihzZWxmKToKKyAgICAgICAgc2VsZi50ZXN0X3dyaXRlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihmLmZpbGVvYmosICJuYW1lIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmlsZW9iai5uYW1lLCBzZWxmLmZpbGVuYW1lKQogCiAgICAgZGVmIHRlc3RfbXRpbWUoc2VsZik6CiAgICAgICAgIG10aW1lID0gMTIzNDU2Nzg5Ci0gICAgICAgIGZXcml0ZSA9IGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKQotICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCi0gICAgICAgIGZXcml0ZS5jbG9zZSgpCi0gICAgICAgIGZSZWFkID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKQotICAgICAgICBkYXRhUmVhZCA9IGZSZWFkLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFSZWFkLCBkYXRhMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZlJlYWQsICdtdGltZScpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZSZWFkLm10aW1lLCBtdGltZSkKLSAgICAgICAgZlJlYWQuY2xvc2UoKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3cnLCBtdGltZSA9IG10aW1lKSBhcyBmV3JpdGU6CisgICAgICAgICAgICBmV3JpdGUud3JpdGUoZGF0YTEpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBmUmVhZDoKKyAgICAgICAgICAgIGRhdGFSZWFkID0gZlJlYWQucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGFSZWFkLCBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZSZWFkLCAnbXRpbWUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlJlYWQubXRpbWUsIG10aW1lKQogCiAgICAgZGVmIHRlc3RfbWV0YWRhdGEoc2VsZik6CiAgICAgICAgIG10aW1lID0gMTIzNDU2Nzg5CiAKLSAgICAgICAgZldyaXRlID0gZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycsIG10aW1lID0gbXRpbWUpCi0gICAgICAgIGZXcml0ZS53cml0ZShkYXRhMSkKLSAgICAgICAgZldyaXRlLmNsb3NlKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd3JywgbXRpbWUgPSBtdGltZSkgYXMgZldyaXRlOgorICAgICAgICAgICAgZldyaXRlLndyaXRlKGRhdGExKQogCi0gICAgICAgIGZSZWFkID0gb3BlbihzZWxmLmZpbGVuYW1lLCAncmInKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgJ3JiJykgYXMgZlJlYWQ6CisgICAgICAgICAgICAjIHNlZSBSRkMgMTk1MjogaHR0cDovL3d3dy5mYXFzLm9yZy9yZmNzL3JmYzE5NTIuaHRtbAogCi0gICAgICAgICMgc2VlIFJGQyAxOTUyOiBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMTk1Mi5odG1sCisgICAgICAgICAgICBpZEJ5dGVzID0gZlJlYWQucmVhZCgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZEJ5dGVzLCBiJ1x4MWZceDhiJykgIyBnemlwIElECiAKLSAgICAgICAgaWRCeXRlcyA9IGZSZWFkLnJlYWQoMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZEJ5dGVzLCBiJ1x4MWZceDhiJykgIyBnemlwIElECisgICAgICAgICAgICBjbUJ5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtQnl0ZSwgYidceDA4JykgIyBkZWZsYXRlCiAKLSAgICAgICAgY21CeXRlID0gZlJlYWQucmVhZCgxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtQnl0ZSwgYidceDA4JykgIyBkZWZsYXRlCisgICAgICAgICAgICBmbGFnc0J5dGUgPSBmUmVhZC5yZWFkKDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsYWdzQnl0ZSwgYidceDA4JykgIyBvbmx5IHRoZSBGTkFNRSBmbGFnIGlzIHNldAogCi0gICAgICAgIGZsYWdzQnl0ZSA9IGZSZWFkLnJlYWQoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnc0J5dGUsIGInXHgwOCcpICMgb25seSB0aGUgRk5BTUUgZmxhZyBpcyBzZXQKKyAgICAgICAgICAgIG10aW1lQnl0ZXMgPSBmUmVhZC5yZWFkKDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lQnl0ZXMsIHN0cnVjdC5wYWNrKCc8aScsIG10aW1lKSkgIyBsaXR0bGUtZW5kaWFuCiAKLSAgICAgICAgbXRpbWVCeXRlcyA9IGZSZWFkLnJlYWQoNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBtdGltZSkpICMgbGl0dGxlLWVuZGlhbgorICAgICAgICAgICAgeGZsQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeGZsQnl0ZSwgYidceDAyJykgIyBtYXhpbXVtIGNvbXByZXNzaW9uCiAKLSAgICAgICAgeGZsQnl0ZSA9IGZSZWFkLnJlYWQoMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4ZmxCeXRlLCBiJ1x4MDInKSAjIG1heGltdW0gY29tcHJlc3Npb24KKyAgICAgICAgICAgIG9zQnl0ZSA9IGZSZWFkLnJlYWQoMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3NCeXRlLCBiJ1x4ZmYnKSAjIE9TICJ1bmtub3duIiAoT1MtaW5kZXBlbmRlbnQpCiAKLSAgICAgICAgb3NCeXRlID0gZlJlYWQucmVhZCgxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zQnl0ZSwgYidceGZmJykgIyBPUyAidW5rbm93biIgKE9TLWluZGVwZW5kZW50KQorICAgICAgICAgICAgIyBTaW5jZSB0aGUgRk5BTUUgZmxhZyBpcyBzZXQsIHRoZSB6ZXJvLXRlcm1pbmF0ZWQgZmlsZW5hbWUgZm9sbG93cy4KKyAgICAgICAgICAgICMgUkZDIDE5NTIgc3BlY2lmaWVzIHRoYXQgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgaW5wdXQgZmlsZSwgaWYgYW55LgorICAgICAgICAgICAgIyBIb3dldmVyLCB0aGUgZ3ppcCBtb2R1bGUgZGVmYXVsdHMgdG8gc3RvcmluZyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0CisgICAgICAgICAgICAjIGZpbGUgaW4gdGhpcyBmaWVsZC4KKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5maWxlbmFtZS5lbmNvZGUoJ0xhdGluLTEnKSArIGInXHgwMCcKKyAgICAgICAgICAgIG5hbWVCeXRlcyA9IGZSZWFkLnJlYWQobGVuKGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZUJ5dGVzLCBleHBlY3RlZCkKIAotICAgICAgICAjIFNpbmNlIHRoZSBGTkFNRSBmbGFnIGlzIHNldCwgdGhlIHplcm8tdGVybWluYXRlZCBmaWxlbmFtZSBmb2xsb3dzLgotICAgICAgICAjIFJGQyAxOTUyIHNwZWNpZmllcyB0aGF0IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGlucHV0IGZpbGUsIGlmIGFueS4KLSAgICAgICAgIyBIb3dldmVyLCB0aGUgZ3ppcCBtb2R1bGUgZGVmYXVsdHMgdG8gc3RvcmluZyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0Ci0gICAgICAgICMgZmlsZSBpbiB0aGlzIGZpZWxkLgotICAgICAgICBleHBlY3RlZCA9IHNlbGYuZmlsZW5hbWUuZW5jb2RlKCdMYXRpbi0xJykgKyBiJ1x4MDAnCi0gICAgICAgIG5hbWVCeXRlcyA9IGZSZWFkLnJlYWQobGVuKGV4cGVjdGVkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lQnl0ZXMsIGV4cGVjdGVkKQorICAgICAgICAgICAgIyBTaW5jZSBubyBvdGhlciBmbGFncyB3ZXJlIHNldCwgdGhlIGhlYWRlciBlbmRzIGhlcmUuCisgICAgICAgICAgICAjIFJhdGhlciB0aGFuIHByb2Nlc3MgdGhlIGNvbXByZXNzZWQgZGF0YSwgbGV0J3Mgc2VlayB0byB0aGUgdHJhaWxlci4KKyAgICAgICAgICAgIGZSZWFkLnNlZWsob3Muc3RhdChzZWxmLmZpbGVuYW1lKS5zdF9zaXplIC0gOCkKIAotICAgICAgICAjIFNpbmNlIG5vIG90aGVyIGZsYWdzIHdlcmUgc2V0LCB0aGUgaGVhZGVyIGVuZHMgaGVyZS4KLSAgICAgICAgIyBSYXRoZXIgdGhhbiBwcm9jZXNzIHRoZSBjb21wcmVzc2VkIGRhdGEsIGxldCdzIHNlZWsgdG8gdGhlIHRyYWlsZXIuCi0gICAgICAgIGZSZWFkLnNlZWsob3Muc3RhdChzZWxmLmZpbGVuYW1lKS5zdF9zaXplIC0gOCkKKyAgICAgICAgICAgIGNyYzMyQnl0ZXMgPSBmUmVhZC5yZWFkKDQpICMgQ1JDMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgW2RhdGExXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmMzMkJ5dGVzLCBiJ1x4YWZceGQ3ZFx4ODMnKQogCi0gICAgICAgIGNyYzMyQnl0ZXMgPSBmUmVhZC5yZWFkKDQpICMgQ1JDMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgW2RhdGExXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyYzMyQnl0ZXMsIGInXHhhZlx4ZDdkXHg4MycpCi0KLSAgICAgICAgaXNpemVCeXRlcyA9IGZSZWFkLnJlYWQoNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2l6ZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBsZW4oZGF0YTEpKSkKLQotICAgICAgICBmUmVhZC5jbG9zZSgpCisgICAgICAgICAgICBpc2l6ZUJ5dGVzID0gZlJlYWQucmVhZCg0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpc2l6ZUJ5dGVzLCBzdHJ1Y3QucGFjaygnPGknLCBsZW4oZGF0YTEpKSkKIAogICAgIGRlZiB0ZXN0X3dpdGhfb3BlbihzZWxmKToKICAgICAgICAgIyBHemlwRmlsZSBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sCkBAIC0yNjUsNiArMjc5LDcwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIjEvMCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKIAorICAgIGRlZiB0ZXN0X3plcm9fcGFkZGVkX2ZpbGUoc2VsZik6CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhMSAqIDUwKQorCisgICAgICAgICMgUGFkIHRoZSBmaWxlIHdpdGggemVyb2VzCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiIlx4MDAiICogNTApCisKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBkID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZGF0YTEgKiA1MCwgIkluY29ycmVjdCBkYXRhIGluIGZpbGUiKQorCisgICAgZGVmIHRlc3Rfbm9uX3NlZWthYmxlX2ZpbGUoc2VsZik6CisgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExICogNTAKKyAgICAgICAgYnVmID0gVW5zZWVrYWJsZUlPKCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9YnVmLCBtb2RlPSJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKKyAgICAgICAgY29tcHJlc3NlZCA9IGJ1Zi5nZXR2YWx1ZSgpCisgICAgICAgIGJ1ZiA9IFVuc2Vla2FibGVJTyhjb21wcmVzc2VkKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1idWYsIG1vZGU9InJiIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHVuY29tcHJlc3NlZCkKKworICAgIGRlZiB0ZXN0X3BlZWsoc2VsZik6CisgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExICogMjAwCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCisKKyAgICAgICAgZGVmIHNpemVzKCk6CisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIGZvciBuIGluIHJhbmdlKDUsIDUwLCAxMCk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIG4KKworICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGYubWF4X3JlYWRfY2h1bmsgPSAzMworICAgICAgICAgICAgbnJlYWQgPSAwCisgICAgICAgICAgICBmb3IgbiBpbiBzaXplcygpOgorICAgICAgICAgICAgICAgIHMgPSBmLnBlZWsobikKKyAgICAgICAgICAgICAgICBpZiBzID09IGInJzoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4ocykpLCBzKQorICAgICAgICAgICAgICAgIG5yZWFkICs9IGxlbihzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoMTAwKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucmVhZCwgbGVuKHVuY29tcHJlc3NlZCkpCisKKyAgICAjIFRlc3RpbmcgY29tcHJlc3MvZGVjb21wcmVzcyBzaG9ydGN1dCBmdW5jdGlvbnMKKworICAgIGRlZiB0ZXN0X2NvbXByZXNzKHNlbGYpOgorICAgICAgICBmb3IgZGF0YSBpbiBbZGF0YTEsIGRhdGEyXToKKyAgICAgICAgICAgIGZvciBhcmdzIGluIFsoKSwgKDEsKSwgKDYsKSwgKDksKV06CisgICAgICAgICAgICAgICAgZGF0YWMgPSBnemlwLmNvbXByZXNzKGRhdGEsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkYXRhYyksIGJ5dGVzKQorICAgICAgICAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShmaWxlb2JqPWlvLkJ5dGVzSU8oZGF0YWMpLCBtb2RlPSJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGRhdGEpCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzKHNlbGYpOgorICAgICAgICBmb3IgZGF0YSBpbiAoZGF0YTEsIGRhdGEyKToKKyAgICAgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKGZpbGVvYmo9YnVmLCBtb2RlPSJ3YiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnemlwLmRlY29tcHJlc3MoYnVmLmdldHZhbHVlKCkpLCBkYXRhKQorICAgICAgICAgICAgIyBSb3VuZHRyaXAgd2l0aCBjb21wcmVzcworICAgICAgICAgICAgZGF0YWMgPSBnemlwLmNvbXByZXNzKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGd6aXAuZGVjb21wcmVzcyhkYXRhYyksIGRhdGEpCisKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0R3ppcCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5IGIvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CmluZGV4IDU2OWU1ZTAuLmZlYTEwMjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKQEAgLTkxLDExICs5MSwxMSBAQAogICAgICAgICBvYmplY3RzID0gKHNlbGYuZGVmYXVsdF9leHBlY3RlZCArCiAgICAgICAgICAgICAgICAgICAgc2VsZi5maXhlZF9leHBlY3RlZCkKICAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLCBIYXNoYWJsZSksIHJlcHIob2JqKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQogCiAgICAgZGVmIHRlc3Rfbm90X2hhc2hhYmxlKHNlbGYpOgogICAgICAgICBmb3Igb2JqIGluIHNlbGYuZXJyb3JfZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2Uob2JqLCBIYXNoYWJsZSksIHJlcHIob2JqKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShvYmosIEhhc2hhYmxlKQogCiAKICMgSXNzdWUgIzQ3MDE6IENoZWNrIHRoYXQgc29tZSBidWlsdGluIHR5cGVzIGFyZSBjb3JyZWN0bHkgaGFzaGFibGUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQppbmRleCBkY2EyM2NmLi5mZTMxNmZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CkBAIC02LDE2ICs2LDIzIEBACiAjICBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKK2ltcG9ydCBhcnJheQogaW1wb3J0IGhhc2hsaWIKLWZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgc3lzCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBfNEcsIHByZWNpc2lvbmJpZ21lbXRlc3QKIAorIyBXZXJlIHdlIGNvbXBpbGVkIC0td2l0aC1weWRlYnVnIG9yIHdpdGggI2RlZmluZSBQeV9ERUJVRz8KK0NPTVBJTEVEX1dJVEhfUFlERUJVRyA9IGhhc2F0dHIoc3lzLCAnZ2V0dG90YWxyZWZjb3VudCcpCisKKwogZGVmIGhleHN0cihzKToKICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBieXRlcyksIHJlcHIocykKICAgICBoID0gIjAxMjM0NTY3ODlhYmNkZWYiCkBAIC0zMCw2ICszNyw3OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMjI0JywgJ1NIQTIyNCcsICdzaGEyNTYnLCAnU0hBMjU2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NoYTM4NCcsICdTSEEzODQnLCAnc2hhNTEyJywgJ1NIQTUxMicgKQogCisgICAgX3dhcm5fb25fZXh0ZW5zaW9uX2ltcG9ydCA9IENPTVBJTEVEX1dJVEhfUFlERUJVRworCisgICAgZGVmIF9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgIiIiSW1wb3J0IGEgbW9kdWxlIGFuZCByZXR1cm4gYSByZWZlcmVuY2UgdG8gaXQgb3IgTm9uZSBvbiBmYWlsdXJlLiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGVjKCdpbXBvcnQgJyttb2R1bGVfbmFtZSkKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5fd2Fybl9vbl9leHRlbnNpb25faW1wb3J0OgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oJ0RpZCBhIEMgZXh0ZW5zaW9uIGZhaWwgdG8gY29tcGlsZT8gJXMnICUgZXJyb3IpCisgICAgICAgIHJldHVybiBsb2NhbHMoKS5nZXQobW9kdWxlX25hbWUpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgYWxnb3JpdGhtcyA9IHNldCgpCisgICAgICAgIGZvciBhbGdvcml0aG0gaW4gc2VsZi5zdXBwb3J0ZWRfaGFzaF9uYW1lczoKKyAgICAgICAgICAgIGFsZ29yaXRobXMuYWRkKGFsZ29yaXRobS5sb3dlcigpKQorICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0ID0ge30KKyAgICAgICAgZm9yIGFsZ29yaXRobSBpbiBhbGdvcml0aG1zOgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFthbGdvcml0aG1dID0gc2V0KCkKKworICAgICAgICAjIEZvciBlYWNoIGFsZ29yaXRobSwgdGVzdCB0aGUgZGlyZWN0IGNvbnN0cnVjdG9yIGFuZCB0aGUgdXNlCisgICAgICAgICMgb2YgaGFzaGxpYi5uZXcgZ2l2ZW4gdGhlIGFsZ29yaXRobSBuYW1lLgorICAgICAgICBmb3IgYWxnb3JpdGhtLCBjb25zdHJ1Y3RvcnMgaW4gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdC5pdGVtcygpOgorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChnZXRhdHRyKGhhc2hsaWIsIGFsZ29yaXRobSkpCisgICAgICAgICAgICBkZWYgX3Rlc3RfYWxnb3JpdGhtX3ZpYV9oYXNobGliX25ldyhkYXRhPU5vbmUsIF9hbGc9YWxnb3JpdGhtKToKKyAgICAgICAgICAgICAgICBpZiBkYXRhIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnKQorICAgICAgICAgICAgICAgIHJldHVybiBoYXNobGliLm5ldyhfYWxnLCBkYXRhKQorICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChfdGVzdF9hbGdvcml0aG1fdmlhX2hhc2hsaWJfbmV3KQorCisgICAgICAgIF9oYXNobGliID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX2hhc2hsaWInKQorICAgICAgICBpZiBfaGFzaGxpYjoKKyAgICAgICAgICAgICMgVGhlc2UgdHdvIGFsZ29yaXRobXMgc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IHdoZW4gdGhpcyBtb2R1bGUKKyAgICAgICAgICAgICMgaXMgY29tcGlsZWQuICBJZiBub3QsIHNvbWV0aGluZyB3YXMgY29tcGlsZWQgd3JvbmcuCisgICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykKKyAgICAgICAgICAgIGFzc2VydCBoYXNhdHRyKF9oYXNobGliLCAnb3BlbnNzbF9zaGExJykKKyAgICAgICAgICAgIGZvciBhbGdvcml0aG0sIGNvbnN0cnVjdG9ycyBpbiBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgY29uc3RydWN0b3IgPSBnZXRhdHRyKF9oYXNobGliLCAnb3BlbnNzbF8nK2FsZ29yaXRobSwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBjb25zdHJ1Y3RvcjoKKyAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3RvcikKKworICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCisgICAgICAgIGlmIF9tZDU6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5tZDUpCisgICAgICAgIF9zaGExID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTEnKQorICAgICAgICBpZiBfc2hhMToKKyAgICAgICAgICAgIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbJ3NoYTEnXS5hZGQoX3NoYTEuc2hhMSkKKyAgICAgICAgX3NoYTI1NiA9IHNlbGYuX2NvbmRpdGlvbmFsX2ltcG9ydF9tb2R1bGUoJ19zaGEyNTYnKQorICAgICAgICBpZiBfc2hhMjU2OgorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjI0J10uYWRkKF9zaGEyNTYuc2hhMjI0KQorICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMjU2J10uYWRkKF9zaGEyNTYuc2hhMjU2KQorICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCisgICAgICAgIGlmIF9zaGE1MTI6CisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisKKyAgICAgICAgc3VwZXIoSGFzaExpYlRlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgdGVzdF9oYXNoX2FycmF5KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoImIiLCByYW5nZSgxMCkpCisgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QudmFsdWVzKCkKKyAgICAgICAgZm9yIGNvbnMgaW4gaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUoY29uc3RydWN0b3JzKToKKyAgICAgICAgICAgIGMgPSBjb25zKGEpCisgICAgICAgICAgICBjLmhleGRpZ2VzdCgpCisKKyAgICBkZWYgdGVzdF9hbGdvcml0aG1zX2d1YXJhbnRlZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaGxpYi5hbGdvcml0aG1zX2d1YXJhbnRlZWQsCisgICAgICAgICAgICBzZXQoX2FsZ28gZm9yIF9hbGdvIGluIHNlbGYuc3VwcG9ydGVkX2hhc2hfbmFtZXMKKyAgICAgICAgICAgICAgICAgIGlmIF9hbGdvLmlzbG93ZXIoKSkpCisKKyAgICBkZWYgdGVzdF9hbGdvcml0aG1zX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNldChoYXNobGliLmFsZ29yaXRobXNfZ3VhcmFudGVlZCkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWJzZXQoaGFzaGxpYi5hbGdvcml0aG1zX2F2YWlsYWJsZSkpCisKICAgICBkZWYgdGVzdF91bmtub3duX2hhc2goc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhhc2hsaWIubmV3KCdzcGFtIHNwYW0gc3BhbSBzcGFtIHNwYW0nKQpAQCAtNjEsMTcgKzE0MSwyMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5kaWdlc3QoKSwgbTIuZGlnZXN0KCkpCiAKICAgICBkZWYgY2hlY2soc2VsZiwgbmFtZSwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgIyB0ZXN0IHRoZSBkaXJlY3QgY29uc3RydWN0b3JzCi0gICAgICAgIGNvbXB1dGVkID0gZ2V0YXR0cihoYXNobGliLCBuYW1lKShkYXRhKS5oZXhkaWdlc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXB1dGVkLCBkaWdlc3QpCi0gICAgICAgICMgdGVzdCB0aGUgZ2VuZXJhbCBuZXcoKSBpbnRlcmZhY2UKLSAgICAgICAgY29tcHV0ZWQgPSBoYXNobGliLm5ldyhuYW1lLCBkYXRhKS5oZXhkaWdlc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXB1dGVkLCBkaWdlc3QpCisgICAgICAgIGNvbnN0cnVjdG9ycyA9IHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3RbbmFtZV0KKyAgICAgICAgIyAyIGlzIGZvciBoYXNobGliLm5hbWUoLi4uKSBhbmQgaGFzaGxpYi5uZXcobmFtZSwgLi4uKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChsZW4oY29uc3RydWN0b3JzKSwgMikKKyAgICAgICAgZm9yIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGNvbXB1dGVkID0gaGFzaF9vYmplY3RfY29uc3RydWN0b3IoZGF0YSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkLCBkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICJIYXNoIGFsZ29yaXRobSAlcyBjb25zdHJ1Y3RlZCB1c2luZyAlcyByZXR1cm5lZCBoZXhkaWdlc3QiCisgICAgICAgICAgICAgICAgICAgICIgJXIgZm9yICVkIGJ5dGUgaW5wdXQgZGF0YSB0aGF0IHNob3VsZCBoYXZlIGhhc2hlZCB0byAlci4iCisgICAgICAgICAgICAgICAgICAgICUgKG5hbWUsIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlZCwgbGVuKGRhdGEpLCBkaWdlc3QpKQogCiAgICAgZGVmIGNoZWNrX25vX3VuaWNvZGUoc2VsZiwgYWxnb3JpdGhtX25hbWUpOgogICAgICAgICAjIFVuaWNvZGUgb2JqZWN0cyBhcmUgbm90IGFsbG93ZWQgYXMgaW5wdXQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0cihoYXNobGliLCBhbGdvcml0aG1fbmFtZSksICdzcGFtJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNobGliLm5ldywgYWxnb3JpdGhtX25hbWUsICdzcGFtJykKKyAgICAgICAgY29uc3RydWN0b3JzID0gc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFthbGdvcml0aG1fbmFtZV0KKyAgICAgICAgZm9yIGhhc2hfb2JqZWN0X2NvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaF9vYmplY3RfY29uc3RydWN0b3IsICdzcGFtJykKIAogICAgIGRlZiB0ZXN0X25vX3VuaWNvZGUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfbm9fdW5pY29kZSgnbWQ1JykKQEAgLTIyOSwxMCArMzE1LDkgQEAKICAgICAgICAgbSA9IGhhc2hsaWIubWQ1KGIneCcgKiBnaWxfbWluc2l6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmhleGRpZ2VzdCgpLCAnY2ZiNzY3ZjIyNWQ1ODQ2OWM1ZGUzNjMyYTg4MDM5NTgnKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBAc3VwcG9ydC5yZWFwX3RocmVhZHMKICAgICBkZWYgdGVzdF90aHJlYWRlZF9oYXNoaW5nKHNlbGYpOgotICAgICAgICBpZiBub3QgdGhyZWFkaW5nOgotICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ05vIHRocmVhZGluZyBtb2R1bGUuJykKLQogICAgICAgICAjIFVwZGF0aW5nIHRoZSBzYW1lIGhhc2ggb2JqZWN0IGZyb20gc2V2ZXJhbCB0aHJlYWRzIGF0IG9uY2UKICAgICAgICAgIyB1c2luZyBkYXRhIGNodW5rIHNpemVzIGNvbnRhaW5pbmcgdGhlIHNhbWUgYnl0ZSBzZXF1ZW5jZXMuCiAgICAgICAgICMKQEAgLTI2Nyw3ICszNTIsNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfaGFzaCwgaGFzaGVyLmhleGRpZ2VzdCgpKQogCi1Ac3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChIYXNoTGliVGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkgYi9MaWIvdGVzdC90ZXN0X2hlYXBxLnB5CmluZGV4IDVlM2IwZWUuLmI0MTQ1OGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaGVhcHEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9oZWFwcS5weQpAQCAtMjExLDEyICsyMTEsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhzb3J0KGRhdGEsIExUKSwgdGFyZ2V0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRhdGEsIExFKQogCi0gICAgIyBBcyBhbiBlYXJseSBhZG9wdGVyLCB3ZSBzYW5pdHkgY2hlY2sgdGhlCi0gICAgIyB0ZXN0LnN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSB1dGlsaXR5IGZ1bmN0aW9uCi0gICAgZGVmIHRlc3RfYWNjZWxlcmF0ZWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMubW9kdWxlc1snaGVhcHEnXSBpcyBzZWxmLm1vZHVsZSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKHNlbGYubW9kdWxlLmhlYXBpZnksICdfX2NvZGVfXycpKQotCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMzE5LDE2ICszMTMsMTYgQEAKIAogICAgIGRlZiB0ZXN0X25vbl9zZXF1ZW5jZShzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3ApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAxMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwgZiwgMTApCiAgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsCiAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMTAsIDEwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCBmLCAxMCwgMTApCiAKICAgICBkZWYgdGVzdF9sZW5fb25seShzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3ApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBMZW5Pbmx5KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIExlbk9ubHkoKSkKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBwdXNoLCBzZWxmLm1vZHVsZS5oZWFwcmVwbGFjZSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIExlbk9ubHkoKSwgMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIExlbk9ubHkoKSwgMTApCiAgICAgICAgIGZvciBmIGluIChzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMiwgTGVuT25seSgpKQogCkBAIC0zNTMsNyArMzQ3LDcgQEAKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLmhlYXBpZnksIHNlbGYubW9kdWxlLmhlYXBwb3AsCiAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5oZWFwcHVzaCwgc2VsZi5tb2R1bGUuaGVhcHJlcGxhY2UsCiAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS5ubGFyZ2VzdCwgc2VsZi5tb2R1bGUubnNtYWxsZXN0KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgMTApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIGYsIDEwKQogCiAgICAgZGVmIHRlc3RfaXRlcmFibGVfYXJncyhzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKHNlbGYubW9kdWxlLm5sYXJnZXN0LCBzZWxmLm1vZHVsZS5uc21hbGxlc3QpOgpAQCAtMzcwLDggKzM2NCw2IEBACiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIGZyb20gdHlwZXMgaW1wb3J0IEJ1aWx0aW5GdW5jdGlvblR5cGUKLQogICAgIHRlc3RfY2xhc3NlcyA9IFtUZXN0SGVhcFB5dGhvbiwgVGVzdEhlYXBDLCBUZXN0RXJyb3JIYW5kbGluZ10KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2htYWMucHkgYi9MaWIvdGVzdC90ZXN0X2htYWMucHkKaW5kZXggZmI3OGViYS4uNGRlMDYyMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9obWFjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQpAQCAtMjEzLDE5ICsyMTMsMTMgQEAKIAogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgUnVudGltZVdhcm5pbmcpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nKToKICAgICAgICAgICAgICAgICBobWFjLkhNQUMoYidhJywgYidiJywgZGlnZXN0bW9kPU1vY2tDcmF6eUhhc2gpCi0gICAgICAgICAgICBleGNlcHQgUnVudGltZVdhcm5pbmc6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIHdhcm5pbmcgYWJvdXQgbWlzc2luZyBibG9ja19zaXplJykKIAogICAgICAgICAgICAgTW9ja0NyYXp5SGFzaC5ibG9ja19zaXplID0gMQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lV2FybmluZyk6CiAgICAgICAgICAgICAgICAgaG1hYy5ITUFDKGInYScsIGInYicsIGRpZ2VzdG1vZD1Nb2NrQ3JhenlIYXNoKQotICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVXYXJuaW5nOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdFeHBlY3RlZCB3YXJuaW5nIGFib3V0IHNtYWxsIGJsb2NrX3NpemUnKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGRhYzU4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CkBAIC0wLDAgKzEsMjQgQEAKKyIiIgorVGVzdHMgZm9yIHRoZSBodG1sIG1vZHVsZSBmdW5jdGlvbnMuCisiIiIKKworaW1wb3J0IGh0bWwKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCisKK2NsYXNzIEh0bWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaHRtbC5lc2NhcGUoJ1wnPHNjcmlwdD4iJmZvbzsiPC9zY3JpcHQ+XCcnKSwKKyAgICAgICAgICAgICcmI3gyNzsmbHQ7c2NyaXB0Jmd0OyZxdW90OyZhbXA7Zm9vOyZxdW90OyZsdDsvc2NyaXB0Jmd0OyYjeDI3OycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBodG1sLmVzY2FwZSgnXCc8c2NyaXB0PiImZm9vOyI8L3NjcmlwdD5cJycsIEZhbHNlKSwKKyAgICAgICAgICAgICdcJyZsdDtzY3JpcHQmZ3Q7IiZhbXA7Zm9vOyImbHQ7L3NjcmlwdCZndDtcJycpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChIdG1sVGVzdHMpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDY2MWQ0MWQuLjYzN2FiMDEKLS0tIGEvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQpAQCAtOCwxMCArOCwxMCBAQAogCiBjbGFzcyBFdmVudENvbGxlY3RvcihodG1sLnBhcnNlci5IVE1MUGFyc2VyKToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgogICAgICAgICBzZWxmLmV2ZW50cyA9IFtdCiAgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5ldmVudHMuYXBwZW5kCi0gICAgICAgIGh0bWwucGFyc2VyLkhUTUxQYXJzZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgaHRtbC5wYXJzZXIuSFRNTFBhcnNlci5fX2luaXRfXyhzZWxmLCAqYXJncywgKiprdykKIAogICAgIGRlZiBnZXRfZXZlbnRzKHNlbGYpOgogICAgICAgICAjIE5vcm1hbGl6ZSB0aGUgbGlzdCBvZiBldmVudHMgc28gdGhhdCBidWZmZXIgYXJ0ZWZhY3RzIGRvbid0CkBAIC03Miw4ICs3MiwxMCBAQAogCiBjbGFzcyBUZXN0Q2FzZUJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIF9ydW5fY2hlY2soc2VsZiwgc291cmNlLCBleHBlY3RlZF9ldmVudHMsIGNvbGxlY3Rvcj1FdmVudENvbGxlY3Rvcik6Ci0gICAgICAgIHBhcnNlciA9IGNvbGxlY3RvcigpCisgICAgZGVmIF9ydW5fY2hlY2soc2VsZiwgc291cmNlLCBleHBlY3RlZF9ldmVudHMsIGNvbGxlY3Rvcj1Ob25lKToKKyAgICAgICAgaWYgY29sbGVjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBjb2xsZWN0b3IgPSBFdmVudENvbGxlY3RvcigpCisgICAgICAgIHBhcnNlciA9IGNvbGxlY3RvcgogICAgICAgICBmb3IgcyBpbiBzb3VyY2U6CiAgICAgICAgICAgICBwYXJzZXIuZmVlZChzKQogICAgICAgICBwYXJzZXIuY2xvc2UoKQpAQCAtODQsNyArODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJcblJlY2VpdmVkOlxuIiArIHBwcmludC5wZm9ybWF0KGV2ZW50cykpCiAKICAgICBkZWYgX3J1bl9jaGVja19leHRyYShzZWxmLCBzb3VyY2UsIGV2ZW50cyk6Ci0gICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywgRXZlbnRDb2xsZWN0b3JFeHRyYSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLCBFdmVudENvbGxlY3RvckV4dHJhKCkpCiAKICAgICBkZWYgX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CiAgICAgICAgIGRlZiBwYXJzZShzb3VyY2U9c291cmNlKToKQEAgLTIxNSw2ICsyMTcsMjMgQEAKICAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImhyZWYiLCAibWFpbHRvOnh5ekBleGFtcGxlLmNvbSIpXSksCiAgICAgICAgICAgICBdKQogCisgICAgZGVmIHRlc3RfYXR0cl9ub25hc2NpaShzZWxmKToKKyAgICAgICAgIyBzZWUgaXNzdWUgNzMxMQorICAgICAgICBzZWxmLl9ydW5fY2hlY2soIjxpbWcgc3JjPS9mb28vYmFyLnBuZyBhbHQ9XHU0ZTJkXHU2NTg3PiIsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiaW1nIiwgWygic3JjIiwgIi9mb28vYmFyLnBuZyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJhbHQiLCAiXHU0ZTJkXHU2NTg3IildKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiPGEgdGl0bGU9J1x1MzBjNlx1MzBiOVx1MzBjOCcgIgorICAgICAgICAgICAgICAgICAgICAgICAgImhyZWY9J1x1MzBjNlx1MzBiOVx1MzBjOC5odG1sJz4iLCBbCisgICAgICAgICAgICAoInN0YXJ0dGFnIiwgImEiLCBbKCJ0aXRsZSIsICJcdTMwYzZcdTMwYjlcdTMwYzgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImhyZWYiLCAiXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwiKV0pLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8YSB0aXRsZT0iXHUzMGM2XHUzMGI5XHUzMGM4IiAnCisgICAgICAgICAgICAgICAgICAgICAgICAnaHJlZj0iXHUzMGM2XHUzMGI5XHUzMGM4Lmh0bWwiPicsIFsKKyAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoInRpdGxlIiwgIlx1MzBjNlx1MzBiOVx1MzBjOCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaHJlZiIsICJcdTMwYzZcdTMwYjlcdTMwYzguaHRtbCIpXSksCisgICAgICAgICAgICBdKQorCiAgICAgZGVmIHRlc3RfYXR0cl9lbnRpdHlfcmVwbGFjZW1lbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygiIiI8YSBiPScmYW1wOyZndDsmbHQ7JnF1b3Q7JmFwb3M7Jz4iIiIsIFsKICAgICAgICAgICAgICgic3RhcnR0YWciLCAiYSIsIFsoImIiLCAiJj48XCInIildKSwKQEAgLTMxOSw2ICszMzgsNDEgQEAKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8aHRtbCBmb289JyZldXJvOyZhbXA7JiM5NzsmI3g2MTsmdW5zdXBwb3J0ZWQ7Jz4iLCBbCiAgICAgICAgICAgICAgICAgKCJzdGFydHRhZyIsICJodG1sIiwgWygiZm9vIiwgIlx1MjBBQyZhYSZ1bnN1cHBvcnRlZDsiKV0pCiAgICAgICAgICAgICAgICAgXSkKKworCitjbGFzcyBIVE1MUGFyc2VyVG9sZXJhbnRUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbGxlY3RvciA9IEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3RvbGVyYW50X3BhcnNpbmcoc2VsZik6CisgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGh0bWwgPGh0bWw+dGU+Pnh0JmE8PGJjPC9hPjwvaHRtbD5cbicKKyAgICAgICAgICAgICAgICAgICAgICAgICc8aW1nIHNyYz0iVVJMPjwvL2ltZz48L2h0bWw8L2h0bWw+JywgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnPGh0bWwgJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnaHRtbCcsIFtdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdkYXRhJywgJ3RlPj54dCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2VudGl0eXJlZicsICdhJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICc8PGJjJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZW5kdGFnJywgJ2EnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnXG48aW1nIHNyYz0iVVJMPjwvL2ltZz48L2h0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnaHRtbCcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RvciA9IHNlbGYuY29sbGVjdG9yKQorCisgICAgZGVmIHRlc3RfY29tbWFfYmV0d2Vlbl9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxmb3JtIGFjdGlvbj0iL3h4eC5waHA/YT0xJmFtcDtiPTImYW1wIiwgJworICAgICAgICAgICAgICAgICAgICAgICAgJ21ldGhvZD0icG9zdCI+JywgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnZm9ybScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2FjdGlvbicsICcveHh4LnBocD9hPTEmYj0yJmFtcCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdtZXRob2QnLCAncG9zdCcpXSldLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yID0gc2VsZi5jb2xsZWN0b3IpCisKKyAgICBkZWYgdGVzdF93ZWlyZF9jaGFyc19pbl91bnF1b3RlZF9hdHRyaWJ1dGVfdmFsdWVzKHNlbGYpOgorICAgICAgICBzZWxmLl9ydW5fY2hlY2soJzxmb3JtIGFjdGlvbj1ib2d1c3wmIygpdmFsdWU+JywgWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnZm9ybScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2FjdGlvbicsICdib2d1c3wmIygpdmFsdWUnKV0pXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RvciA9IHNlbGYuY29sbGVjdG9yKQorCiAgICAgZGVmIHRlc3RfdW5lc2NhcGVfZnVuY3Rpb24oc2VsZik6CiAgICAgICAgIHAgPSBodG1sLnBhcnNlci5IVE1MUGFyc2VyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVuZXNjYXBlKCcmI2JhZDsnKSwnJiNiYWQ7JykKQEAgLTMyNiw3ICszODAsNyBAQAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChIVE1MUGFyc2VyVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSFRNTFBhcnNlclRlc3RDYXNlLCBIVE1MUGFyc2VyVG9sZXJhbnRUZXN0Q2FzZSkKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVqYXIucHkKaW5kZXggM2U4NWY2Mi4uNzEyYTRhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llamFyLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgIGJ6ID0gdGltZTJpc296KDUwMDAwMCkKICAgICAgICAgZm9yIHRleHQgaW4gKGF6LCBieik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKHIiXlxkezR9LVxkXGQtXGRcZCBcZFxkOlxkXGQ6XGRcZFokIiwgdGV4dCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImJhZCB0aW1lMmlzb3ogZm9ybWF0OiAlcyAlcyIgJSAoYXosIGJ6KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHRpbWUyaXNveiBmb3JtYXQ6ICVzICVzIiAlIChheiwgYnopKQogCiAgICAgZGVmIHRlc3RfaHR0cDJ0aW1lKHNlbGYpOgogICAgICAgICBkZWYgcGFyc2VfZGF0ZSh0ZXh0KToKQEAgLTEwMCw2ICsxMDAsNyBAQAogCiAKIGNsYXNzIEhlYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKwogICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnMoc2VsZik6CiAgICAgICAgICMgcXVvdGVzIHNob3VsZCBiZSBzdHJpcHBlZAogICAgICAgICBleHBlY3RlZCA9IFtbKCdmb28nLCAnYmFyJyksICgnZXhwaXJlcycsIDIyMDkwNjk0MTIpLCAoJ3ZlcnNpb24nLCAnMCcpXV0KQEAgLTEwOSw2ICsxMTAsMTYgQEAKICAgICAgICAgICAgIF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKIAorICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfdmVyc2lvbihzZWxmKToKKworICAgICAgICAjIHF1b3RlcyBzaG91bGQgYmUgc3RyaXBwZWQKKyAgICAgICAgZXhwZWN0ZWQgPSBbWygnZm9vJywgJ2JhcicpLCAoJ3ZlcnNpb24nLCAnMScpXV0KKyAgICAgICAgZm9yIGhkciBpbiBbCisgICAgICAgICAgICAnZm9vPWJhcjsgdmVyc2lvbj0iMSInLAorICAgICAgICAgICAgJ2Zvbz1iYXI7IFZlcnNpb249IjEiJywKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoW2hkcl0pLCBleHBlY3RlZCkKKwogICAgIGRlZiB0ZXN0X3BhcnNlX25zX2hlYWRlcnNfc3BlY2lhbF9uYW1lcyhzZWxmKToKICAgICAgICAgIyBuYW1lcyBzdWNoIGFzICdleHBpcmVzJyBhcmUgbm90IHNwZWNpYWwgaW4gZmlyc3QgbmFtZT12YWx1ZSBwYWlyCiAgICAgICAgICMgb2YgU2V0LUNvb2tpZTogaGVhZGVyCkBAIC0yNTIsMTEgKzI2MywxMSBAQAogICAgICAgICAjIEludmFsaWQgY29udGVudHMgb2YgY29va2llcyBmaWxlIChlZy4gYmFkIG1hZ2ljIHN0cmluZykKICAgICAgICAgIyBjYXVzZXMgYSBMb2FkRXJyb3IuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgICAgICBmLndyaXRlKCJvb3BzXG4iKQotICAgICAgICAgICAgZm9yIGNvb2tpZWphcl9jbGFzcyBpbiBMV1BDb29raWVKYXIsIE1vemlsbGFDb29raWVKYXI6Ci0gICAgICAgICAgICAgICAgYyA9IGNvb2tpZWphcl9jbGFzcygpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTG9hZEVycm9yLCBjLmxvYWQsIGZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgib29wc1xuIikKKyAgICAgICAgICAgICAgICBmb3IgY29va2llamFyX2NsYXNzIGluIExXUENvb2tpZUphciwgTW96aWxsYUNvb2tpZUphcjoKKyAgICAgICAgICAgICAgICAgICAgYyA9IGNvb2tpZWphcl9jbGFzcygpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKExvYWRFcnJvciwgYy5sb2FkLCBmaWxlbmFtZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGZpbGVuYW1lKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6IHBhc3MKQEAgLTQ0NCw4ICs0NTUsOCBAQAogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAndmVyc2lvbj1lZ2dzOyBzcGFtPWVnZ3MnKQogCiAgICAgICAgIGNvb2tpZXMgPSBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXVsiLyJdCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZXhwaXJlcycgaW4gY29va2llcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd2ZXJzaW9uJyBpbiBjb29raWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCdleHBpcmVzJywgY29va2llcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndmVyc2lvbicsIGNvb2tpZXMpCiAKICAgICBkZWYgdGVzdF9leHBpcmVzKHNlbGYpOgogICAgICAgICAjIGlmIGV4cGlyZXMgaXMgaW4gZnV0dXJlLCBrZWVwIGNvb2tpZS4uLgpAQCAtNDYwLDcgKzQ3MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdykKICAgICAgICAgaCA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vd3d3LmFjbWUuY29tLyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NwYW09ImJhciInIGluIGggYW5kICJmb28iIG5vdCBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzcGFtPSJiYXIiJywgaCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZm9vIiwgaCkKIAogICAgICAgICAjIG1heC1hZ2UgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGV4cGlyZXMsIGFuZCB6ZXJvIG1heC1hZ2UgaXMgcmVxdWVzdCB0bwogICAgICAgICAjIGRlbGV0ZSBib3RoIG5ldyBjb29raWUgYW5kIGFueSBvbGQgbWF0Y2hpbmcgY29va2llCkBAIC00ODEsNyArNDkzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAgICAgICAgIGMuY2xlYXJfc2Vzc2lvbl9jb29raWVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnc3BhbT0iYmFyIicgaW4gaCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignc3BhbT0iYmFyIicsIGgpCiAKICAgICAgICAgIyBYWFggUkZDIDI5NjUgZXhwaXJ5IHJ1bGVzIChzb21lIGFwcGx5IHRvIFYwIHRvbykKIApAQCAtNDkxLDM5ICs1MDMsMzkgQEAKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIjsgVmVyc2lvbj0iMSInKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIi8iIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKHBvbCkKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLAogICAgICAgICAgICAgICAgICAgICAgICdlZ2dzPSJiYXIiOyBWZXJzaW9uPSIxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiL2JsYWgvIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiL2JsYWgvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaC9yaHViYXJiLyIsCiAgICAgICAgICAgICAgICAgICAgICAgJ2VnZ3M9ImJhciI7IFZlcnNpb249IjEiJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCIvYmxhaC9yaHViYXJiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi9ibGFoL3JodWJhcmIvIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICAgICAgIyBOZXRzY2FwZQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS8iLCAnc3BhbT0iYmFyIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiLyIgaW4gYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIi8iLCBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKIAogICAgICAgICBjID0gQ29va2llSmFyKCkKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb20vYmxhaCIsICdlZ2dzPSJiYXIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCIvIiBpbiBjLl9jb29raWVzWyJ3d3cuYWNtZS5jb20iXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiLyIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIiLCAnZWdncz0iYmFyIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiL2JsYWgiIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvYmxhaCIsIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIoKQogICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9ibGFoL3JodWJhcmIvIiwgJ2VnZ3M9ImJhciInKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIi9ibGFoL3JodWJhcmIiIGluIGMuX2Nvb2tpZXNbInd3dy5hY21lLmNvbSJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCIvYmxhaC9yaHViYXJiIiwgYy5fY29va2llc1sid3d3LmFjbWUuY29tIl0pCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3BhdGhfd2l0aF9xdWVyeShzZWxmKToKICAgICAgICAgY2ogPSBDb29raWVKYXIoKQpAQCAtNTY2LDcgKzU3OCw3IEBACiAgICAgICAgICAgICAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yaGV1bS9yaGFwb250aWN1bTsiCiAgICAgICAgICAgICAiZm9vPWJhcjtzaW5nPXNvbmc/YXBwbGVzPXBlYXJzJnNwYW09ZWdncyNuaSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxdWVzdF9wYXRoKHJlcSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIvcmhldW0vcmhhcG9udGljdW07Zm9vPWJhcjtzaW5nPXNvbmciKQorICAgICAgICAgICAgICAgICAgICAgICAgICIvcmhldW0vcmhhcG9udGljdW07Zm9vPWJhcjtzaW5nPXNvbmciKQogICAgICAgICAjIHdpdGhvdXQgcGFyYW1ldGVycwogICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KAogICAgICAgICAgICAgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcmhldW0vcmhhcG9udGljdW0/IgpAQCAtODg5LDIxICs5MDEsMjEgQEAKICAgICAgICAgdXJsID0gImh0dHA6Ly9mb28uYmFyLmNvbS8iCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgdXJsLCAic3BhbT1lZ2dzOyBWZXJzaW9uPTEiKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiRG9tYWluIiBub3QgaW4gaCwKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRG9tYWluIiwgaCwKICAgICAgICAgICAgICAgICAgICAgICJhYnNlbnQgZG9tYWluIHJldHVybmVkIHdpdGggZG9tYWluIHByZXNlbnQiKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgRG9tYWluPS5iYXIuY29tJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJyREb21haW49Ii5iYXIuY29tIicgaW4gaCwgImRvbWFpbiBub3QgcmV0dXJuZWQiKQorICAgICAgICBzZWxmLmFzc2VydEluKCckRG9tYWluPSIuYmFyLmNvbSInLCBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICAjIG5vdGUgbWlzc2luZyBpbml0aWFsIGRvdCBpbiBEb21haW4KICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgRG9tYWluPWJhci5jb20nKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnJERvbWFpbj0iYmFyLmNvbSInIGluIGgsICJkb21haW4gbm90IHJldHVybmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJERvbWFpbj0iYmFyLmNvbSInLCBoLCAiZG9tYWluIG5vdCByZXR1cm5lZCIpCiAKICAgICBkZWYgdGVzdF9wYXRoX21pcnJvcihzZWxmKToKICAgICAgICAgcG9sID0gRGVmYXVsdENvb2tpZVBvbGljeShyZmMyOTY1PVRydWUpCkBAIC05MTIsMTQgKzkyNCwxMyBAQAogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJQYXRoIiBub3QgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJhYnNlbnQgcGF0aCByZXR1cm5lZCB3aXRoIHBhdGggcHJlc2VudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBhdGgiLCBoLCAiYWJzZW50IHBhdGggcmV0dXJuZWQgd2l0aCBwYXRoIHByZXNlbnQiKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICdzcGFtPWVnZ3M7IFZlcnNpb249MTsgUGF0aD0vJykKICAgICAgICAgaCA9IGludGVyYWN0XzI5NjUoYywgdXJsKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJyRQYXRoPSIvIicgaW4gaCwgInBhdGggbm90IHJldHVybmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBhdGg9Ii8iJywgaCwgInBhdGggbm90IHJldHVybmVkIikKIAogICAgIGRlZiB0ZXN0X3BvcnRfbWlycm9yKHNlbGYpOgogICAgICAgICBwb2wgPSBEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkKQEAgLTkyOCw4ICs5MzksNyBAQAogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKICAgICAgICAgaW50ZXJhY3RfMjk2NShjLCB1cmwsICJzcGFtPWVnZ3M7IFZlcnNpb249MSIpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJQb3J0IiBub3QgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJhYnNlbnQgcG9ydCByZXR1cm5lZCB3aXRoIHBvcnQgcHJlc2VudCIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlBvcnQiLCBoLCAiYWJzZW50IHBvcnQgcmV0dXJuZWQgd2l0aCBwb3J0IHByZXNlbnQiKQogCiAgICAgICAgIGMgPSBDb29raWVKYXIocG9sKQogICAgICAgICB1cmwgPSAiaHR0cDovL2Zvby5iYXIuY29tLyIKQEAgLTk0MiwxNiArOTUyLDE2IEBACiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCInKQogICAgICAgICBoID0gaW50ZXJhY3RfMjk2NShjLCB1cmwpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnJFBvcnQ9IjgwIicgaW4gaCwKLSAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggc2luZ2xlIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIHNpbmdsZSB2YWx1ZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJyRQb3J0PSI4MCInLCBoLAorICAgICAgICAgICAgICAgICAgICAgICJwb3J0IHdpdGggc2luZ2xlIHZhbHVlIG5vdCByZXR1cm5lZCB3aXRoIHNpbmdsZSB2YWx1ZSIpCiAKICAgICAgICAgYyA9IENvb2tpZUphcihwb2wpCiAgICAgICAgIHVybCA9ICJodHRwOi8vZm9vLmJhci5jb20vIgogICAgICAgICBpbnRlcmFjdF8yOTY1KGMsIHVybCwgJ3NwYW09ZWdnczsgVmVyc2lvbj0xOyBQb3J0PSI4MCw4MDgwIicpCiAgICAgICAgIGggPSBpbnRlcmFjdF8yOTY1KGMsIHVybCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCckUG9ydD0iODAsODA4MCInIGluIGgsCi0gICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG11bHRpcGxlIHZhbHVlcyBub3QgcmV0dXJuZWQgd2l0aCBtdWx0aXBsZSAiCi0gICAgICAgICAgICAgICAgICAgICAidmFsdWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJFBvcnQ9IjgwLDgwODAiJywgaCwKKyAgICAgICAgICAgICAgICAgICAgICAicG9ydCB3aXRoIG11bHRpcGxlIHZhbHVlcyBub3QgcmV0dXJuZWQgd2l0aCBtdWx0aXBsZSAiCisgICAgICAgICAgICAgICAgICAgICAgInZhbHVlcyIpCiAKICAgICBkZWYgdGVzdF9ub19yZXR1cm5fY29tbWVudChzZWxmKToKICAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjU9VHJ1ZSkpCkBAIC0xMDMzLDYgKzEwNDMsOCBAQAogICAgICAgICAgICAgWyJTZXQtQ29va2llMjogYT1mb287IHBhdGg9LzsgVmVyc2lvbj0xOyBkb21haW4iXSwKICAgICAgICAgICAgICMgYmFkIG1heC1hZ2UKICAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogYj1mb287IG1heC1hZ2U9b29wcyJdLAorICAgICAgICAgICAgIyBiYWQgdmVyc2lvbgorICAgICAgICAgICAgWyJTZXQtQ29va2llOiBiPWZvbzsgdmVyc2lvbj1zcGFtIl0sCiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgYyA9IGNvb2tpZWphcl9mcm9tX2Nvb2tpZV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgICAgICAgICAjIHRoZXNlIGJhZCBjb29raWVzIHNob3VsZG4ndCBiZSBzZXQKQEAgLTExMTYsOCArMTEyOCw4IEBACiAgICAgICAgIGMuYWRkX2Nvb2tpZV9oZWFkZXIocmVxKQogCiAgICAgICAgIGggPSByZXEuZ2V0X2hlYWRlcigiQ29va2llIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQogCiAgICAgICAgIGhlYWRlcnMuYXBwZW5kKCdTZXQtQ29va2llOiBTSElQUElORz1GRURFWDsgcGF0aD0vZm9vJykKICAgICAgICAgcmVzID0gRmFrZVJlc3BvbnNlKGhlYWRlcnMsICJodHRwOi8vd3d3LmFjbWUuY29tIikKQEAgLTExMjcsMTcgKzExMzksMTcgQEAKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKICAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoIlBBUlRfTlVNQkVSPVJPQ0tFVF9MQVVOQ0hFUl8wMDAxIiBpbiBoIGFuZAotICAgICAgICAgICAgICAgICAgICAgIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiIGluIGggYW5kCi0gICAgICAgICAgICAgICAgICAgICAiU0hJUFBJTkc9RkVERVgiIG5vdCBpbiBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkNVU1RPTUVSPVdJTEVfRV9DT1lPVEUiLCBoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJTSElQUElORz1GRURFWCIsIGgpCiAKICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5hY21lLmNvbS9mb28vIikKICAgICAgICAgYy5hZGRfY29va2llX2hlYWRlcihyZXEpCiAKICAgICAgICAgaCA9IHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCJQQVJUX05VTUJFUj1ST0NLRVRfTEFVTkNIRVJfMDAwMSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAiQ1VTVE9NRVI9V0lMRV9FX0NPWU9URSIgaW4gaCBhbmQKLSAgICAgICAgICAgICAgICAgICAgICBoLnN0YXJ0c3dpdGgoIlNISVBQSU5HPUZFREVYOyIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUEFSVF9OVU1CRVI9Uk9DS0VUX0xBVU5DSEVSXzAwMDEiLCBoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJDVVNUT01FUj1XSUxFX0VfQ09ZT1RFIiwgaCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguc3RhcnRzd2l0aCgiU0hJUFBJTkc9RkVERVg7IikpCiAKICAgICBkZWYgdGVzdF9uZXRzY2FwZV9leGFtcGxlXzIoc2VsZik6CiAgICAgICAgICMgU2Vjb25kIEV4YW1wbGUgdHJhbnNhY3Rpb24gc2VxdWVuY2U6CkBAIC0xMzU1LDggKzEzNjcsOCBAQAogICAgICAgICAjIHRoZSBzZXJ2ZXIuCiAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9hY21lL3BhcnRzLyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiUm9ja2V0X0xhdW5jaGVyXzAwMDEiIGluIGNvb2tpZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICJSaWRpbmdfUm9ja2V0XzAwMjMiIG5vdCBpbiBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIlJvY2tldF9MYXVuY2hlcl8wMDAxIiwgY29va2llKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJSaWRpbmdfUm9ja2V0XzAwMjMiLCBjb29raWUpCiAKICAgICBkZWYgdGVzdF9yZWplY3Rpb24oc2VsZik6CiAgICAgICAgICMgVGVzdCByZWplY3Rpb24gb2YgU2V0LUNvb2tpZTIgcmVzcG9uc2VzIGJhc2VkIG9uIGRvbWFpbiwgcGF0aCwgcG9ydC4KQEAgLTE0NjEsNyArMTQ3Myw4IEBACiAgICAgICAgICAgICBjLCAiaHR0cDovL3d3dy5hY21lLmNvbS9mb28lMmYlMjUvPDwlMGFuZXdcMzQ1L1wzNDZcMzcwXDM0NSIsCiAgICAgICAgICAgICAnYmFyPWJhejsgcGF0aD0iL2Zvby8iOyB2ZXJzaW9uPTEnKTsKICAgICAgICAgdmVyc2lvbl9yZSA9IHJlLmNvbXBpbGUocideXCR2ZXJzaW9uPVwiPzFcIj8nLCByZS5JKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImZvbz1iYXIiIGluIGNvb2tpZSBhbmQgdmVyc2lvbl9yZS5zZWFyY2goY29va2llKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vPWJhciIsIGNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZlcnNpb25fcmUuc2VhcmNoKGNvb2tpZSkpCiAKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NSgKICAgICAgICAgICAgIGMsICJodHRwOi8vd3d3LmFjbWUuY29tL2Zvby8lMjUvPDwlMGFuZXdcMzQ1L1wzNDZcMzcwXDM0NSIpCkBAIC0xNTA1LDExICsxNTE4LDExIEBACiAKICAgICAgICAgbmV3X2MgPSBzYXZlX2FuZF9yZXN0b3JlKGMsIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19jKSwgNikgICMgbm9uZSBkaXNjYXJkZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciIGluIHJlcHIobmV3X2MpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJuYW1lPSdmb28xJywgdmFsdWU9J2JhciciLCByZXByKG5ld19jKSkKIAogICAgICAgICBuZXdfYyA9IHNhdmVfYW5kX3Jlc3RvcmUoYywgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5ld19jKSwgNCkgICMgMiBvZiB0aGVtIGRpc2NhcmRlZCBvbiBzYXZlCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiBpbiByZXByKG5ld19jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigibmFtZT0nZm9vMScsIHZhbHVlPSdiYXInIiwgcmVwcihuZXdfYykpCiAKICAgICBkZWYgdGVzdF9uZXRzY2FwZV9taXNjKHNlbGYpOgogICAgICAgICAjIFNvbWUgYWRkaXRpb25hbCBOZXRzY2FwZSBjb29raWVzIHRlc3RzLgpAQCAtMTUzMSw5ICsxNTQ0LDggQEAKIAogICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vZm9vLmJhci5hY21lLmNvbS9mb28iKQogICAgICAgICBjLmFkZF9jb29raWVfaGVhZGVyKHJlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAotICAgICAgICAgICAgIlBBUlRfTlVNQkVSPTMsNCIgaW4gcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpIGFuZAotICAgICAgICAgICAgIkN1c3RvbWVyPVdJTEVfRV9DT1lPVEUiIGluIHJlcS5nZXRfaGVhZGVyKCJDb29raWUiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiUEFSVF9OVU1CRVI9Myw0IiwgcmVxLmdldF9oZWFkZXIoIkNvb2tpZSIpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJDdXN0b21lcj1XSUxFX0VfQ09ZT1RFIixyZXEuZ2V0X2hlYWRlcigiQ29va2llIikpCiAKICAgICBkZWYgdGVzdF9pbnRyYW5ldF9kb21haW5zXzI5NjUoc2VsZik6CiAgICAgICAgICMgVGVzdCBoYW5kbGluZyBvZiBsb2NhbCBpbnRyYW5ldCBob3N0bmFtZXMgd2l0aG91dCBhIGRvdC4KQEAgLTE1NDIsMTEgKzE1NTQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAiZm9vMT1iYXI7IFBPUlQ7IERpc2NhcmQ7IFZlcnNpb249MTsiKQogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF8yOTY1KGMsICJodHRwOi8vZXhhbXBsZS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28yPWJhcjsgZG9tYWluPSIubG9jYWwiOyBWZXJzaW9uPTEnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImZvbzE9YmFyIiBpbiBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImZvbzE9YmFyIiwgY29va2llKQogCiAgICAgICAgIGludGVyYWN0XzI5NjUoYywgImh0dHA6Ly9leGFtcGxlLyIsICdmb28zPWJhcjsgVmVyc2lvbj0xJykKICAgICAgICAgY29va2llID0gaW50ZXJhY3RfMjk2NShjLCAiaHR0cDovL2V4YW1wbGUvIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmb28yPWJhciIgaW4gY29va2llIGFuZCBsZW4oYykgPT0gMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiZm9vMj1iYXIiLCBjb29raWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGMpLCAzKQogCiAgICAgZGVmIHRlc3RfaW50cmFuZXRfZG9tYWluc19ucyhzZWxmKToKICAgICAgICAgYyA9IENvb2tpZUphcihEZWZhdWx0Q29va2llUG9saWN5KHJmYzI5NjUgPSBGYWxzZSkpCkBAIC0xNTU0LDEwICsxNTY3LDEwIEBACiAgICAgICAgIGNvb2tpZSA9IGludGVyYWN0X25ldHNjYXBlKGMsICJodHRwOi8vZXhhbXBsZS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vMj1iYXI7IGRvbWFpbj0ubG9jYWwnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmb28xPWJhciIgaW4gY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28xPWJhciIsIGNvb2tpZSkKIAogICAgICAgICBjb29raWUgPSBpbnRlcmFjdF9uZXRzY2FwZShjLCAiaHR0cDovL2V4YW1wbGUvIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJmb28yPWJhciIgaW4gY29va2llKQorICAgICAgICBzZWxmLmFzc2VydEluKCJmb28yPWJhciIsIGNvb2tpZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDIpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9wYXRoKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZXMucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQppbmRleCBjYzIyNWNkLi5mOWE5OGM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llcy5weQpAQCAtMSwzNSArMSwzOSBAQAogIyBTaW1wbGUgdGVzdCBzdWl0ZSBmb3IgaHR0cC9jb29raWVzLnB5CiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHJ1bl9kb2N0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBydW5fZG9jdGVzdCwgY2hlY2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogZnJvbSBodHRwIGltcG9ydCBjb29raWVzCiAKIGltcG9ydCB3YXJuaW5ncwotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiLiogY2xhc3MgaXMgaW5zZWN1cmUuKiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCiAKIGNsYXNzIENvb2tpZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IGNoZWNrX3dhcm5pbmdzKCkKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlci5fX2VudGVyX18oKQorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgIi4qIGNsYXNzIGlzIGluc2VjdXJlLioiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKwogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBjYXNlcyA9IFsKLSAgICAgICAgICAgIHsgJ2RhdGEnOiAnY2hpcHM9YWhveTsgdmllbm5hPWZpbmdlcicsCi0gICAgICAgICAgICAgICdkaWN0JzogeydjaGlwcyc6J2Fob3knLCAndmllbm5hJzonZmluZ2VyJ30sCi0gICAgICAgICAgICAgICdyZXByJzogIjxTaW1wbGVDb29raWU6IGNoaXBzPSdhaG95JyB2aWVubmE9J2Zpbmdlcic+IiwKLSAgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBjaGlwcz1haG95XG5TZXQtQ29va2llOiB2aWVubmE9ZmluZ2VyJywKLSAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7J2RhdGEnOiAnY2hpcHM9YWhveTsgdmllbm5hPWZpbmdlcicsCisgICAgICAgICAgICAgJ2RpY3QnOiB7J2NoaXBzJzonYWhveScsICd2aWVubmEnOidmaW5nZXInfSwKKyAgICAgICAgICAgICAncmVwcic6ICI8U2ltcGxlQ29va2llOiBjaGlwcz0nYWhveScgdmllbm5hPSdmaW5nZXInPiIsCisgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBjaGlwcz1haG95XG5TZXQtQ29va2llOiB2aWVubmE9ZmluZ2VyJ30sCiAKLSAgICAgICAgICAgIHsgJ2RhdGEnOiAna2VlYmxlcj0iRT1tYzI7IEw9XFwiTG92ZXNcXCI7IGZ1ZGdlPVxcMDEyOyInLAotICAgICAgICAgICAgICAnZGljdCc6IHsna2VlYmxlcicgOiAnRT1tYzI7IEw9IkxvdmVzIjsgZnVkZ2U9XDAxMjsnfSwKLSAgICAgICAgICAgICAgJ3JlcHInOiAnJyc8U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMjsgTD0iTG92ZXMiOyBmdWRnZT1cXG47Jz4nJycsCi0gICAgICAgICAgICAgICdvdXRwdXQnOiAnU2V0LUNvb2tpZToga2VlYmxlcj0iRT1tYzI7IEw9XFwiTG92ZXNcXCI7IGZ1ZGdlPVxcMDEyOyInLAotICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsnZGF0YSc6ICdrZWVibGVyPSJFPW1jMjsgTD1cXCJMb3Zlc1xcIjsgZnVkZ2U9XFwwMTI7IicsCisgICAgICAgICAgICAgJ2RpY3QnOiB7J2tlZWJsZXInIDogJ0U9bWMyOyBMPSJMb3ZlcyI7IGZ1ZGdlPVwwMTI7J30sCisgICAgICAgICAgICAgJ3JlcHInOiAnJyc8U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMjsgTD0iTG92ZXMiOyBmdWRnZT1cXG47Jz4nJycsCisgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBrZWVibGVyPSJFPW1jMjsgTD1cXCJMb3Zlc1xcIjsgZnVkZ2U9XFwwMTI7Iid9LAogCiAgICAgICAgICAgICAjIENoZWNrIGlsbGVnYWwgY29va2llcyB0aGF0IGhhdmUgYW4gJz0nIGNoYXIgaW4gYW4gdW5xdW90ZWQgdmFsdWUKLSAgICAgICAgICAgIHsgJ2RhdGEnOiAna2VlYmxlcj1FPW1jMicsCi0gICAgICAgICAgICAgICdkaWN0JzogeydrZWVibGVyJyA6ICdFPW1jMid9LAotICAgICAgICAgICAgICAncmVwcic6ICI8U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMic+IiwKLSAgICAgICAgICAgICAgJ291dHB1dCc6ICdTZXQtQ29va2llOiBrZWVibGVyPUU9bWMyJywKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsnZGF0YSc6ICdrZWVibGVyPUU9bWMyJywKKyAgICAgICAgICAgICAnZGljdCc6IHsna2VlYmxlcicgOiAnRT1tYzInfSwKKyAgICAgICAgICAgICAncmVwcic6ICI8U2ltcGxlQ29va2llOiBrZWVibGVyPSdFPW1jMic+IiwKKyAgICAgICAgICAgICAnb3V0cHV0JzogJ1NldC1Db29raWU6IGtlZWJsZXI9RT1tYzInfSwKICAgICAgICAgXQogCiAgICAgICAgIGZvciBjYXNlIGluIGNhc2VzOgpAQCAtMTExLDggKzExNSw3MiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3ZlcnNpb24nXSwgJzEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENbJ0N1c3RvbWVyJ11bJ3BhdGgnXSwgJy9hY21lJykKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KFsncGF0aCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnU2V0LUNvb2tpZTogQ3VzdG9tZXI9IldJTEVfRV9DT1lPVEUiOyBQYXRoPS9hY21lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLmpzX291dHB1dCgpLCByIiIiCisgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgPCEtLSBiZWdpbiBoaWRpbmcKKyAgICAgICAgZG9jdW1lbnQuY29va2llID0gIkN1c3RvbWVyPVwiV0lMRV9FX0NPWU9URVwiOyBQYXRoPS9hY21lOyBWZXJzaW9uPTEiOworICAgICAgICAvLyBlbmQgaGlkaW5nIC0tPgorICAgICAgICA8L3NjcmlwdD4KKyAgICAgICAgIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuanNfb3V0cHV0KFsncGF0aCddKSwgciIiIgorICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIDwhLS0gYmVnaW4gaGlkaW5nCisgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJDdXN0b21lcj1cIldJTEVfRV9DT1lPVEVcIjsgUGF0aD0vYWNtZSI7CisgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAiIiIpCisKK2NsYXNzIE1vcnNlbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIE1vcnNlbCBvYmplY3QuIiIiCisKKyAgICBkZWYgdGVzdF9yZXNlcnZlZF9rZXlzKHNlbGYpOgorICAgICAgICBNID0gY29va2llcy5Nb3JzZWwoKQorICAgICAgICAjIHRlc3RzIHZhbGlkIGFuZCBpbnZhbGlkIHJlc2VydmVkIGtleXMgZm9yIE1vcnNlbHMKKyAgICAgICAgZm9yIGkgaW4gTS5fcmVzZXJ2ZWQ6CisgICAgICAgICAgICAjIFRlc3QgdGhhdCBhbGwgdmFsaWQga2V5cyBhcmUgcmVwb3J0ZWQgYXMgcmVzZXJ2ZWQgYW5kIHNldCB0aGVtCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoTS5pc1Jlc2VydmVkS2V5KGkpKQorICAgICAgICAgICAgTVtpXSA9ICclc192YWx1ZScgJSBpCisgICAgICAgIGZvciBpIGluIE0uX3Jlc2VydmVkOgorICAgICAgICAgICAgIyBUZXN0IHRoYXQgdmFsaWQga2V5IHZhbHVlcyBjb21lIG91dCBmaW5lCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1baV0sICclc192YWx1ZScgJSBpKQorICAgICAgICBmb3IgaSBpbiAidGhlIGhvbHkgaGFuZCBncmVuYWRlIi5zcGxpdCgpOgorICAgICAgICAgICAgIyBUZXN0IHRoYXQgaW52YWxpZCBrZXlzIHJhaXNlIENvb2tpZUVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjb29raWVzLkNvb2tpZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTS5fX3NldGl0ZW1fXywgaSwgJyVzX3ZhbHVlJyAlIGkpCisKKyAgICBkZWYgdGVzdF9zZXR0ZXIoc2VsZik6CisgICAgICAgIE0gPSBjb29raWVzLk1vcnNlbCgpCisgICAgICAgICMgdGVzdHMgdGhlIC5zZXQgbWV0aG9kIHRvIHNldCBrZXlzIGFuZCB0aGVpciB2YWx1ZXMKKyAgICAgICAgZm9yIGkgaW4gTS5fcmVzZXJ2ZWQ6CisgICAgICAgICAgICAjIE1ha2VzIHN1cmUgdGhhdCBhbGwgcmVzZXJ2ZWQga2V5cyBjYW4ndCBiZSBzZXQgdGhpcyB3YXkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNvb2tpZXMuQ29va2llRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNLnNldCwgaSwgJyVzX3ZhbHVlJyAlIGksICclc192YWx1ZScgJSBpKQorICAgICAgICBmb3IgaSBpbiAidGhvdSBjYXN0IF90aGUtICFob2x5ISBeaGFuZHwgKypncmVuYWRlfiIuc3BsaXQoKToKKyAgICAgICAgICAgICMgVHJ5IHR5cGljYWwgdXNlIGNhc2UuIFNldHRpbmcgZGVjZW50IHZhbHVlcy4KKyAgICAgICAgICAgICMgQ2hlY2sgb3V0cHV0IGFuZCBqc19vdXRwdXQuCisgICAgICAgICAgICBNWydwYXRoJ10gPSAnL2ZvbycgIyBUcnkgYSByZXNlcnZlZCBrZXkgYXMgd2VsbAorICAgICAgICAgICAgTS5zZXQoaSwgIiVzX3ZhbCIgJSBpLCAiJXNfY29kZWRfdmFsIiAlIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIE0ub3V0cHV0KCksCisgICAgICAgICAgICAgICAgIlNldC1Db29raWU6ICVzPSVzOyBQYXRoPS9mb28iICUgKGksICIlc19jb2RlZF92YWwiICUgaSkpCisgICAgICAgICAgICBleHBlY3RlZF9qc19vdXRwdXQgPSAiIiIKKyAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tIGJlZ2luIGhpZGluZworICAgICAgICBkb2N1bWVudC5jb29raWUgPSAiJXM9JXM7IFBhdGg9L2ZvbyI7CisgICAgICAgIC8vIGVuZCBoaWRpbmcgLS0+CisgICAgICAgIDwvc2NyaXB0PgorICAgICAgICAiIiIgJSAoaSwgIiVzX2NvZGVkX3ZhbCIgJSBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNLmpzX291dHB1dCgpLCBleHBlY3RlZF9qc19vdXRwdXQpCisgICAgICAgIGZvciBpIGluIFsiZm9vIGJhciIsICJmb29AYmFyIl06CisgICAgICAgICAgICAjIFRyeSBzb21lIGlsbGVnYWwgY2hhcmFjdGVycworICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY29va2llcy5Db29raWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE0uc2V0LCBpLCAnJXNfdmFsdWUnICUgaSwgJyVzX3ZhbHVlJyAlIGkpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChDb29raWVUZXN0cykKKyAgICBydW5fdW5pdHRlc3QoQ29va2llVGVzdHMsIE1vcnNlbFRlc3RzKQogICAgIHJ1bl9kb2N0ZXN0KGNvb2tpZXMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKaW5kZXggNDM5ODVhNi4uODkwYjFiOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQpAQCAtMSwxMyArMSwyMyBAQAogaW1wb3J0IGVycm5vCiBmcm9tIGh0dHAgaW1wb3J0IGNsaWVudAogaW1wb3J0IGlvCitpbXBvcnQgb3MKIGltcG9ydCBhcnJheQogaW1wb3J0IHNvY2tldAogCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQoraW1wb3J0IHVuaXR0ZXN0CitUZXN0Q2FzZSA9IHVuaXR0ZXN0LlRlc3RDYXNlCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCitoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdsb2NhbGhvc3QnCitDRVJUX2xvY2FsaG9zdCA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydC5wZW0nKQorIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdmYWtlaG9zdG5hbWUnCitDRVJUX2Zha2Vob3N0bmFtZSA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydDIucGVtJykKKyMgUm9vdCBjZXJ0IGZpbGUgKENBKSBmb3Igc3ZuLnB5dGhvbi5vcmcncyBjZXJ0CitDQUNFUlRfc3ZuX3B5dGhvbl9vcmcgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2h0dHBzX3N2bl9weXRob25fb3JnX3Jvb3QucGVtJykKKwogSE9TVCA9IHN1cHBvcnQuSE9TVAogCiBjbGFzcyBGYWtlU29ja2V0OgpAQCAtMTMyLDYgKzE0MiwxMCBAQAogICAgICAgICByZXNwID0gY2xpZW50LkhUVFBSZXNwb25zZShzb2NrKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjbGllbnQuQmFkU3RhdHVzTGluZSwgcmVzcC5iZWdpbikKIAorICAgIGRlZiB0ZXN0X2JhZF9zdGF0dXNfcmVwcihzZWxmKToKKyAgICAgICAgZXhjID0gY2xpZW50LkJhZFN0YXR1c0xpbmUoJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihleGMpLCAnJydCYWRTdGF0dXNMaW5lKCJcJ1wnIiwpJycnKQorCiAgICAgZGVmIHRlc3RfcGFydGlhbF9yZWFkcyhzZWxmKToKICAgICAgICAgIyBpZiB3ZSBoYXZlIGEgbGVuZ2h0LCB0aGUgc3lzdGVtIGtub3dzIHdoZW4gdG8gY2xvc2UgaXRzZWxmCiAgICAgICAgICMgc2FtZSBiZWhhdmlvdXIgdGhhbiB3aGVuIHdlIHJlYWQgdGhlIHdob2xlIHRoaW5nIHdpdGggcmVhZCgpCkBAIC0xOTQsMTMgKzIwOCwxMyBAQAogICAgICAgICBleHBlY3RlZCA9IChiJ0dFVCAvZm9vIEhUVFAvMS4xXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcbicKICAgICAgICAgICAgICAgICAgICAgYidBY2NlcHQtRW5jb2Rpbmc6IGlkZW50aXR5XHJcbkNvbnRlbnQtTGVuZ3RoOicpCiAKLSAgICAgICAgYm9keSA9IG9wZW4oX19maWxlX18sICdyYicpCi0gICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKLSAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKLSAgICAgICAgY29ubi5zb2NrID0gc29jawotICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvZm9vJywgYm9keSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSwgJyVyICE9ICVyJyAlCi0gICAgICAgICAgICAgICAgKHNvY2suZGF0YVs6bGVuKGV4cGVjdGVkKV0sIGV4cGVjdGVkKSkKKyAgICAgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAncmInKSBhcyBib2R5OgorICAgICAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nLCBib2R5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSwgJyVyICE9ICVyJyAlCisgICAgICAgICAgICAgICAgICAgIChzb2NrLmRhdGFbOmxlbihleHBlY3RlZCldLCBleHBlY3RlZCkpCiAKICAgICBkZWYgdGVzdF9zZW5kKHNlbGYpOgogICAgICAgICBleHBlY3RlZCA9IGIndGhpcyBpcyBhIHRlc3QgdGhpcyBpcyBvbmx5IGEgdGVzdCcKQEAgLTIxNiw2ICsyMzAsMjIgQEAKICAgICAgICAgY29ubi5zZW5kKGlvLkJ5dGVzSU8oZXhwZWN0ZWQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkLCBzb2NrLmRhdGEpCiAKKyAgICBkZWYgdGVzdF9zZW5kX2l0ZXIoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYidHRVQgL2ZvbyBIVFRQLzEuMVxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG4nIFwKKyAgICAgICAgICAgICAgICAgICBiJ0FjY2VwdC1FbmNvZGluZzogaWRlbnRpdHlcclxuQ29udGVudC1MZW5ndGg6IDExXHJcbicgXAorICAgICAgICAgICAgICAgICAgIGInXHJcbm9uZXR3b3RocmVlJworCisgICAgICAgIGRlZiBib2R5KCk6CisgICAgICAgICAgICB5aWVsZCBiIm9uZSIKKyAgICAgICAgICAgIHlpZWxkIGIidHdvIgorICAgICAgICAgICAgeWllbGQgYiJ0aHJlZSIKKworICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KCIiKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy9mb28nLCBib2R5KCksIHsnQ29udGVudC1MZW5ndGgnOiAnMTEnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmRhdGEsIGV4cGVjdGVkKQorCiAgICAgZGVmIHRlc3RfY2h1bmtlZChzZWxmKToKICAgICAgICAgY2h1bmtlZF9zdGFydCA9ICgKICAgICAgICAgICAgICdIVFRQLzEuMSAyMDAgT0tcclxuJwpAQCAtMzA2LDcgKzMzNiw2IEBACiAgICAgIyBUZXN0IGxpbmVzIG92ZXJmbG93aW5nIHRoZSBtYXggbGluZSBzaXplIChfTUFYTElORSBpbiBodHRwLmNsaWVudCkKIAogICAgIGRlZiB0ZXN0X292ZXJmbG93aW5nX3N0YXR1c19saW5lKHNlbGYpOgotICAgICAgICBzZWxmLnNraXBUZXN0KCJkaXNhYmxlZCBmb3IgSFRUUCAwLjkgc3VwcG9ydCIpCiAgICAgICAgIGJvZHkgPSAiSFRUUC8xLjEgMjAwIE9rIiArICJrIiAqIDY1NTM2ICsgIlxyXG4iCiAgICAgICAgIHJlc3AgPSBjbGllbnQuSFRUUFJlc3BvbnNlKEZha2VTb2NrZXQoYm9keSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChjbGllbnQuTGluZVRvb0xvbmcsIGNsaWVudC5CYWRTdGF0dXNMaW5lKSwgcmVzcC5iZWdpbikKQEAgLTMzNSw2ICszNjQsMzggQEAKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LnJlc3BvbnNlc1tjbGllbnQuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCiAKKworY2xhc3MgU291cmNlQWRkcmVzc1Rlc3QoVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNlcnYpCisgICAgICAgIHNlbGYuc291cmNlX3BvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQorICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDUpCisgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jb25uOgorICAgICAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IE5vbmUKKyAgICAgICAgc2VsZi5zZXJ2LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ID0gTm9uZQorCisgICAgZGVmIHRlc3RIVFRQQ29ubmVjdGlvblNvdXJjZUFkZHJlc3Moc2VsZik6CisgICAgICAgIHNlbGYuY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbihIT1NULCBzZWxmLnBvcnQsCisgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9KCcnLCBzZWxmLnNvdXJjZV9wb3J0KSkKKyAgICAgICAgc2VsZi5jb25uLmNvbm5lY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5zb2NrLmdldHNvY2tuYW1lKClbMV0sIHNlbGYuc291cmNlX3BvcnQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGNsaWVudCwgJ0hUVFBTQ29ubmVjdGlvbicpLAorICAgICAgICAgICAgICAgICAgICAgJ2h0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbiBub3QgZGVmaW5lZCcpCisgICAgZGVmIHRlc3RIVFRQU0Nvbm5lY3Rpb25Tb3VyY2VBZGRyZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4gPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKEhPU1QsIHNlbGYucG9ydCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICAjIFdlIGRvbid0IHRlc3QgYW55dGhpbmcgaGVyZSBvdGhlciB0aGUgY29uc3RydWN0b3Igbm90IGJhcmZpbmcgYXMKKyAgICAgICAgIyB0aGlzIGNvZGUgZG9lc24ndCBkZWFsIHdpdGggc2V0dGluZyB1cCBhbiBhY3RpdmUgcnVubmluZyBTU0wgc2VydmVyCisgICAgICAgICMgZm9yIGFuIHNzbF93cmFwcGVkIGNvbm5lY3QoKSB0byBhY3R1YWxseSByZXR1cm4gZnJvbS4KKworCiBjbGFzcyBUaW1lb3V0VGVzdChUZXN0Q2FzZSk6CiAgICAgUE9SVCA9IE5vbmUKIApAQCAtMzgwLDE0ICs0NDEsOTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwQ29ubi5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAgICAgICAgIGh0dHBDb25uLmNsb3NlKCkKIAotY2xhc3MgSFRUUFNUaW1lb3V0VGVzdChUZXN0Q2FzZSk6Ci0jIFhYWCBIZXJlIHNob3VsZCBiZSB0ZXN0cyBmb3IgSFRUUFMsIHRoZXJlIGlzbid0IGFueSByaWdodCBub3chCisKK2NsYXNzIEhUVFBTVGVzdChUZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGNsaWVudCwgJ0hUVFBTQ29ubmVjdGlvbicpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnc3NsIHN1cHBvcnQgcmVxdWlyZWQnKQorCisgICAgZGVmIG1ha2Vfc2VydmVyKHNlbGYsIGNlcnRmaWxlKToKKyAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgorICAgICAgICByZXR1cm4gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICAjIHNpbXBsZSB0ZXN0IHRvIGNoZWNrIGl0J3Mgc3RvcmluZyBpdAotICAgICAgICBpZiBoYXNhdHRyKGNsaWVudCwgJ0hUVFBTQ29ubmVjdGlvbicpOgotICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oSE9TVCwgVGltZW91dFRlc3QuUE9SVCwgdGltZW91dD0zMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC50aW1lb3V0LCAzMCkKKyAgICAgICAgIyBzaW1wbGUgdGVzdCB0byBjaGVjayBpdCdzIHN0b3JpbmcgdGhlIHRpbWVvdXQKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oSE9TVCwgVGltZW91dFRlc3QuUE9SVCwgdGltZW91dD0zMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRpbWVvdXQsIDMwKQorCisgICAgZGVmIF9jaGVja19zdm5fcHl0aG9uX29yZyhzZWxmLCByZXNwKToKKyAgICAgICAgIyBKdXN0IGEgc2ltcGxlIGNoZWNrIHRoYXQgZXZlcnl0aGluZyB3ZW50IGZpbmUKKyAgICAgICAgc2VydmVyX3N0cmluZyA9IHJlc3AuZ2V0aGVhZGVyKCdzZXJ2ZXInKQorICAgICAgICBzZWxmLmFzc2VydEluKCdBcGFjaGUnLCBzZXJ2ZXJfc3RyaW5nKQorCisgICAgZGVmIHRlc3RfbmV0d29ya2VkKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3M6IG5vIGNlcnQgdmVyaWZpY2F0aW9uIGlzIGRvbmUKKyAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3N2bi5weXRob24ub3JnJyk6CisgICAgICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignc3ZuLnB5dGhvbi5vcmcnLCA0NDMpCisgICAgICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgICAgIHJlc3AgPSBoLmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3N2bl9weXRob25fb3JnKHJlc3ApCisKKyAgICBkZWYgdGVzdF9uZXR3b3JrZWRfZ29vZF9jZXJ0KHNlbGYpOgorICAgICAgICAjIFdlIGZlZWQgYSBDQSBjZXJ0IHRoYXQgdmFsaWRhdGVzIHRoZSBzZXJ2ZXIncyBjZXJ0CisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3N2bi5weXRob24ub3JnJyk6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUNFUlRfc3ZuX3B5dGhvbl9vcmcpCisgICAgICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignc3ZuLnB5dGhvbi5vcmcnLCA0NDMsIGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc3ZuX3B5dGhvbl9vcmcocmVzcCkKKworICAgIGRlZiB0ZXN0X25ldHdvcmtlZF9iYWRfY2VydChzZWxmKToKKyAgICAgICAgIyBXZSBmZWVkIGEgIkNBIiBjZXJ0IHRoYXQgaXMgdW5yZWxhdGVkIHRvIHRoZSBzZXJ2ZXIncyBjZXJ0CisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3N2bi5weXRob24ub3JnJyk6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzdm4ucHl0aG9uLm9yZycsIDQ0MywgY29udGV4dD1jb250ZXh0KQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpOgorICAgICAgICAgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy8nKQorCisgICAgZGVmIHRlc3RfbG9jYWxfZ29vZF9ob3N0bmFtZShzZWxmKToKKyAgICAgICAgIyBUaGUgKHZhbGlkKSBjZXJ0IHZhbGlkYXRlcyB0aGUgSFRUUCBob3N0bmFtZQorICAgICAgICBpbXBvcnQgc3NsCisgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKKyAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVF9sb2NhbGhvc3QpCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIGgucmVxdWVzdCgnR0VUJywgJy9ub25leGlzdGVudCcpCisgICAgICAgIHJlc3AgPSBoLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLnN0YXR1cywgNDA0KQorCisgICAgZGVmIHRlc3RfbG9jYWxfYmFkX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICAjIFRoZSAodmFsaWQpIGNlcnQgZG9lc24ndCB2YWxpZGF0ZSB0aGUgSFRUUCBob3N0bmFtZQorICAgICAgICBpbXBvcnQgc3NsCisgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKKyAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVF9mYWtlaG9zdG5hbWUpCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJUX2Zha2Vob3N0bmFtZSkKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgICMgU2FtZSB3aXRoIGV4cGxpY2l0IGNoZWNrX2hvc3RuYW1lPVRydWUKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgICMgV2l0aCBjaGVja19ob3N0bmFtZT1GYWxzZSwgdGhlIG1pc21hdGNoaW5nIGlzIGlnbm9yZWQKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPUZhbHNlKQorICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvbm9uZXhpc3RlbnQnKQorICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5zdGF0dXMsIDQwNCkKKwogCiBjbGFzcyBSZXF1ZXN0Qm9keVRlc3QoVGVzdENhc2UpOgogICAgICIiIlRlc3QgY2FzZXMgd2hlcmUgYSByZXF1ZXN0IGluY2x1ZGVzIGEgbWVzc2FnZSBib2R5LiIiIgpAQCAtNDE2LDcgKzU2MCw3IEBACiAgICAgICAgIHNlbGYuY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsICJib2R5IikKICAgICAgICAgbWVzc2FnZSwgZiA9IHNlbGYuZ2V0X2hlYWRlcnNfYW5kX2ZwKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9wbGFpbiIsIG1lc3NhZ2UuZ2V0X2NvbnRlbnRfdHlwZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIG1lc3NhZ2UuZ2V0X2NoYXJzZXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWVzc2FnZS5nZXRfY2hhcnNldCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI0IiwgbWVzc2FnZS5nZXQoImNvbnRlbnQtbGVuZ3RoIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidib2R5JywgZi5yZWFkKCkpCiAKQEAgLTQyNCw3ICs1NjgsNyBAQAogICAgICAgICBzZWxmLmNvbm4ucmVxdWVzdCgiUFVUIiwgIi91cmwiLCAiYm9keVx4YzEiKQogICAgICAgICBtZXNzYWdlLCBmID0gc2VsZi5nZXRfaGVhZGVyc19hbmRfZnAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L3BsYWluIiwgbWVzc2FnZS5nZXRfY29udGVudF90eXBlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbWVzc2FnZS5nZXRfY2hhcnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZXNzYWdlLmdldF9jaGFyc2V0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjUiLCBtZXNzYWdlLmdldCgiY29udGVudC1sZW5ndGgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2JvZHlceGMxJywgZi5yZWFkKCkpCiAKQEAgLTQzMiwzMyArNTc2LDMxIEBACiAgICAgICAgIHNlbGYuY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsIGIiYm9keVx4YzEiKQogICAgICAgICBtZXNzYWdlLCBmID0gc2VsZi5nZXRfaGVhZGVyc19hbmRfZnAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L3BsYWluIiwgbWVzc2FnZS5nZXRfY29udGVudF90eXBlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgbWVzc2FnZS5nZXRfY2hhcnNldCgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZXNzYWdlLmdldF9jaGFyc2V0KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjUiLCBtZXNzYWdlLmdldCgiY29udGVudC1sZW5ndGgiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2JvZHlceGMxJywgZi5yZWFkKCkpCiAKICAgICBkZWYgdGVzdF9maWxlX2JvZHkoc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpCi0gICAgICAgIGYud3JpdGUoImJvZHkiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuY29ubi5yZXF1ZXN0KCJQVVQiLCAiL3VybCIsIGYpCi0gICAgICAgIG1lc3NhZ2UsIGYgPSBzZWxmLmdldF9oZWFkZXJzX2FuZF9mcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInRleHQvcGxhaW4iLCBtZXNzYWdlLmdldF9jb250ZW50X3R5cGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBtZXNzYWdlLmdldF9jaGFyc2V0KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjQiLCBtZXNzYWdlLmdldCgiY29udGVudC1sZW5ndGgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2JvZHknLCBmLnJlYWQoKSkKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCJib2R5IikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgZikKKyAgICAgICAgICAgIG1lc3NhZ2UsIGYgPSBzZWxmLmdldF9oZWFkZXJzX2FuZF9mcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L3BsYWluIiwgbWVzc2FnZS5nZXRfY29udGVudF90eXBlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZXNzYWdlLmdldF9jaGFyc2V0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI0IiwgbWVzc2FnZS5nZXQoImNvbnRlbnQtbGVuZ3RoIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYm9keScsIGYucmVhZCgpKQogCiAgICAgZGVmIHRlc3RfYmluYXJ5X2ZpbGVfYm9keShzZWxmKToKLSAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGYud3JpdGUoYiJib2R5XHhjMSIpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikKLSAgICAgICAgc2VsZi5jb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgZikKLSAgICAgICAgbWVzc2FnZSwgZiA9IHNlbGYuZ2V0X2hlYWRlcnNfYW5kX2ZwKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9wbGFpbiIsIG1lc3NhZ2UuZ2V0X2NvbnRlbnRfdHlwZSgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIG1lc3NhZ2UuZ2V0X2NoYXJzZXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNSIsIG1lc3NhZ2UuZ2V0KCJjb250ZW50LWxlbmd0aCIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYm9keVx4YzEnLCBmLnJlYWQoKSkKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiImJvZHlceGMxIikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jb25uLnJlcXVlc3QoIlBVVCIsICIvdXJsIiwgZikKKyAgICAgICAgICAgIG1lc3NhZ2UsIGYgPSBzZWxmLmdldF9oZWFkZXJzX2FuZF9mcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ0ZXh0L3BsYWluIiwgbWVzc2FnZS5nZXRfY29udGVudF90eXBlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtZXNzYWdlLmdldF9jaGFyc2V0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI1IiwgbWVzc2FnZS5nZXQoImNvbnRlbnQtbGVuZ3RoIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYm9keVx4YzEnLCBmLnJlYWQoKSkKIAogCiBjbGFzcyBIVFRQUmVzcG9uc2VUZXN0KFRlc3RDYXNlKToKQEAgLTQ5OCw3ICs2NDAsOCBAQAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSGVhZGVyVGVzdHMsIE9mZmxpbmVUZXN0LCBCYXNpY1Rlc3QsIFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGltZW91dFRlc3QsIFJlcXVlc3RCb2R5VGVzdCwgSFRUUFJlc3BvbnNlVGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1Rlc3QsIFJlcXVlc3RCb2R5VGVzdCwgU291cmNlQWRkcmVzc1Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFJlc3BvbnNlVGVzdCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggMjgyNTY5Ny4uMzllYmMyNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC0xNiwxMiArMTYsMTEgQEAKIGltcG9ydCB1cmxsaWIucGFyc2UKIGltcG9ydCBodHRwLmNsaWVudAogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGhyZWFkaW5nCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiAKIGltcG9ydCB1bml0dGVzdAotCi1mcm9tIGlvIGltcG9ydCBCeXRlc0lPCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK3RocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAogY2xhc3MgTm9Mb2dSZXF1ZXN0SGFuZGxlcjoKICAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgKmFyZ3MpOgpAQCAtMzIsMjEgKzMxLDYgQEAKICAgICAgICAgcmV0dXJuICcnCiAKIAotY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBGYWxzZQotICAgICAgICBzZWxmLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjEiCi0KLSAgICBkZWYgZG9fR0VUKHNlbGYpOgotICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCi0gICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQotICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKLSAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQotCi0gICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgICBwYXNzCi0KIGNsYXNzIFRlc3RTZXJ2ZXJUaHJlYWQodGhyZWFkaW5nLlRocmVhZCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3Rfb2JqZWN0LCByZXF1ZXN0X2hhbmRsZXIpOgogICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLl9faW5pdF9fKHNlbGYpCkBAIC01NCw4ICszOCw4IEBACiAgICAgICAgIHNlbGYudGVzdF9vYmplY3QgPSB0ZXN0X29iamVjdAogCiAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBIVFRQU2VydmVyKCgnJywgMCksIHNlbGYucmVxdWVzdF9oYW5kbGVyKQotICAgICAgICBzZWxmLnRlc3Rfb2JqZWN0LlBPUlQgPSBzZWxmLnNlcnZlci5zb2NrZXQuZ2V0c29ja25hbWUoKVsxXQorICAgICAgICBzZWxmLnNlcnZlciA9IEhUVFBTZXJ2ZXIoKCdsb2NhbGhvc3QnLCAwKSwgc2VsZi5yZXF1ZXN0X2hhbmRsZXIpCisgICAgICAgIHNlbGYudGVzdF9vYmplY3QuSE9TVCwgc2VsZi50ZXN0X29iamVjdC5QT1JUID0gc2VsZi5zZXJ2ZXIuc29ja2V0LmdldHNvY2tuYW1lKCkKICAgICAgICAgc2VsZi50ZXN0X29iamVjdC5zZXJ2ZXJfc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLnRlc3Rfb2JqZWN0ID0gTm9uZQogICAgICAgICB0cnk6CkBAIC02OSw2ICs1Myw4IEBACiAKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLl90aHJlYWRzID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQorICAgICAgICBvcy5lbnZpcm9uID0gc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkKICAgICAgICAgc2VsZi5zZXJ2ZXJfc3RhcnRlZCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIHNlbGYudGhyZWFkID0gVGVzdFNlcnZlclRocmVhZChzZWxmLCBzZWxmLnJlcXVlc3RfaGFuZGxlcikKICAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQpAQCAtNzYsODEgKzYyLDE0IEBACiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYudGhyZWFkLnN0b3AoKQorICAgICAgICBvcy5lbnZpcm9uLl9fZXhpdF9fKCkKKyAgICAgICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiByZXF1ZXN0KHNlbGYsIHVyaSwgbWV0aG9kPSdHRVQnLCBib2R5PU5vbmUsIGhlYWRlcnM9e30pOgotICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VsZi5QT1JUKQorICAgICAgICBzZWxmLmNvbm5lY3Rpb24gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihzZWxmLkhPU1QsIHNlbGYuUE9SVCkKICAgICAgICAgc2VsZi5jb25uZWN0aW9uLnJlcXVlc3QobWV0aG9kLCB1cmksIGJvZHksIGhlYWRlcnMpCiAgICAgICAgIHJldHVybiBzZWxmLmNvbm5lY3Rpb24uZ2V0cmVzcG9uc2UoKQogCi1jbGFzcyBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEJhc2VIVFRQU2VydmVyLiIiIgotCi0gICAgSFRUUFJlc3BvbnNlTWF0Y2ggPSByZS5jb21waWxlKGInSFRUUC8xLlswLTldKyAyMDAgT0snKQotCi0gICAgZGVmIHNldFVwIChzZWxmKToKLSAgICAgICAgc2VsZi5oYW5kbGVyID0gU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKCkKLQotICAgIGRlZiBzZW5kX3R5cGljYWxfcmVxdWVzdChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgaW5wdXQgPSBCeXRlc0lPKG1lc3NhZ2UpCi0gICAgICAgIG91dHB1dCA9IEJ5dGVzSU8oKQotICAgICAgICBzZWxmLmhhbmRsZXIucmZpbGUgPSBpbnB1dAotICAgICAgICBzZWxmLmhhbmRsZXIud2ZpbGUgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCgpCi0gICAgICAgIG91dHB1dC5zZWVrKDApCi0gICAgICAgIHJldHVybiBvdXRwdXQucmVhZGxpbmVzKCkKLQotICAgIGRlZiB2ZXJpZnlfZ2V0X2NhbGxlZChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQotCi0gICAgZGVmIHZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHNlbGYsIGhlYWRlcnMpOgotICAgICAgICBmb3IgZmllbGROYW1lIGluIGInU2VydmVyOiAnLCBiJ0RhdGU6ICcsIGInQ29udGVudC1UeXBlOiAnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0oaC5zdGFydHN3aXRoKGZpZWxkTmFtZSkgZm9yIGggaW4gaGVhZGVycyksIDEpCi0KLSAgICBkZWYgdmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKLSAgICAgICAgbWF0Y2ggPSBzZWxmLkhUVFBSZXNwb25zZU1hdGNoLnNlYXJjaChyZXNwb25zZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGNoIGlzIG5vdCBOb25lKQotCi0gICAgZGVmIHRlc3RfaHR0cF8xXzEoc2VsZik6Ci0gICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgLyBIVFRQLzEuMVxyXG5cclxuJykKLSAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQotICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKLSAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKLQotICAgIGRlZiB0ZXN0X2h0dHBfMV8wKHNlbGYpOgotICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCi0gICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKLSAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCi0gICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sIGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCi0KLSAgICBkZWYgdGVzdF9odHRwXzBfOShzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMC45XHJcblxyXG4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKLSAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCi0KLSAgICBkZWYgdGVzdF93aXRoX2NvbnRpbnVlXzFfMChzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMS4wXHJcbkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcblxyXG4nKQotICAgICAgICBzZWxmLnZlcmlmeV9odHRwX3NlcnZlcl9yZXNwb25zZShyZXN1bHRbMF0pCi0gICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQotICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQotCi0gICAgZGVmIHRlc3RfcmVxdWVzdF9sZW5ndGgoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzEwNzE0OiBodWdlIHJlcXVlc3QgbGluZXMgYXJlIGRpc2NhcmRlZCwgdG8gYXZvaWQgRGVuaWFsCi0gICAgICAgICMgb2YgU2VydmljZSBhdHRhY2tzLgotICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUICcgKyBiJ3gnICogNjU1MzcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQxNCBSZXF1ZXN0LVVSSSBUb28gTG9uZ1xyXG4nKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQotCi0gICAgZGVmIHRlc3RfaGVhZGVyX2xlbmd0aChzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAjNjc5MTogc2FtZSBmb3IgaGVhZGVycwotICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KAotICAgICAgICAgICAgYidHRVQgLyBIVFRQLzEuMVxyXG5YLUZvbzogYmFyJyArIGIncicgKiA2NTUzNyArIGInXHJcblxyXG4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSA0MDAgTGluZSB0b28gbG9uZ1xyXG4nKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQotCiAKIGNsYXNzIEJhc2VIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC0xNzgsOSArOTcsMTcgQEAKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKQogICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAKKyAgICAgICAgZGVmIGRvX0xBVElOT05FSEVBREVSKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDk5OSkKKyAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ1gtU3BlY2lhbCcsICdEw6RuZ2Vyb3VzIE1pbmQnKQorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgICAgIGJvZHkgPSBzZWxmLmhlYWRlcnNbJ3gtc3BlY2lhbC1pbmNvbWluZyddLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShib2R5KQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKLSAgICAgICAgc2VsZi5jb24gPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VsZi5QT1JUKQorICAgICAgICBzZWxmLmNvbiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKHNlbGYuSE9TVCwgc2VsZi5QT1JUKQogICAgICAgICBzZWxmLmNvbi5jb25uZWN0KCkKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmQoc2VsZik6CkBAIC0yNjMsNiArMTkwLDcgQEAKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXRoZWFkZXIoJ0Nvbm5lY3Rpb24nKSwgJ2tlZXAtYWxpdmUnKQogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdURVNUJywgJy8nKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jb24uY2xvc2UpCiAKICAgICBkZWYgdGVzdF9pbnRlcm5hbF9rZXlfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuY29uLnJlcXVlc3QoJ0tFWUVSUk9SJywgJy8nKQpAQCAtMjc0LDYgKzIwMiwxNCBAQAogICAgICAgICByZXMgPSBzZWxmLmNvbi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnN0YXR1cywgOTk5KQogCisgICAgZGVmIHRlc3RfbGF0aW4xX2hlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jb24ucmVxdWVzdCgnTEFUSU5PTkVIRUFERVInLCAnLycsIGhlYWRlcnM9eworICAgICAgICAgICAgJ1gtU3BlY2lhbC1JbmNvbWluZyc6ICAgICAgICfDhHJnZXIgbWl0IFVuaWNvZGUnCisgICAgICAgIH0pCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdYLVNwZWNpYWwnKSwgJ0TDpG5nZXJvdXMgTWluZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJ8OEcmdlciBtaXQgVW5pY29kZScuZW5jb2RlKCd1dGYtOCcpKQorCiAKIGNsYXNzIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogICAgIGNsYXNzIHJlcXVlc3RfaGFuZGxlcihOb0xvZ1JlcXVlc3RIYW5kbGVyLCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgpAQCAtMjg3LDkgKzIyMyw4IEBACiAgICAgICAgIHNlbGYuZGF0YSA9IGInV2UgYXJlIHRoZSBrbmlnaHRzIHdobyBzYXkgTmkhJwogICAgICAgICBzZWxmLnRlbXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKGRpcj1iYXNldGVtcGRpcikKICAgICAgICAgc2VsZi50ZW1wZGlyX25hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYudGVtcGRpcikKLSAgICAgICAgdGVtcCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3QnKSwgJ3diJykKLSAgICAgICAgdGVtcC53cml0ZShzZWxmLmRhdGEpCi0gICAgICAgIHRlbXAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgJ3Rlc3QnKSwgJ3diJykgYXMgdGVtcDoKKyAgICAgICAgICAgIHRlbXAud3JpdGUoc2VsZi5kYXRhKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0zMDUsNyArMjQwLDcgQEAKICAgICAgICAgYm9keSA9IHJlc3BvbnNlLnJlYWQoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcG9uc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2Uuc3RhdHVzLCBzdGF0dXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwb25zZS5yZWFzb24gIT0gTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVzcG9uc2UucmVhc29uKQogICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBib2R5KQogCkBAIC0zMjEsMTUgKzI1NiwxNSBAQAogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJyArICdUaGlzRG9lc05vdEV4aXN0JyArICcvJykKICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgNDA0KQotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyX25hbWUsICdpbmRleC5odG1sJyksICd3JykKLSAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nICsgc2VsZi50ZW1wZGlyX25hbWUgKyAnLycpCi0gICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKLSAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgIyBjaG1vZCB3b24ndCB3b3JrIGFzIGV4cGVjdGVkIG9uIFdpbmRvd3MgcGxhdGZvcm1zCi0gICAgICAgICAgICBvcy5jaG1vZChzZWxmLnRlbXBkaXIsIDApCi0gICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDQwNCkKLSAgICAgICAgICAgIG9zLmNobW9kKHNlbGYudGVtcGRpciwgMG83NTUpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyX25hbWUsICdpbmRleC5odG1sJyksICd3JykgYXMgZjoKKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJyArIHNlbGYudGVtcGRpcl9uYW1lICsgJy8nKQorICAgICAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQorICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgorICAgICAgICAgICAgICAgICMgY2htb2Qgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBvbiBXaW5kb3dzIHBsYXRmb3JtcworICAgICAgICAgICAgICAgIG9zLmNobW9kKHNlbGYudGVtcGRpciwgMCkKKyAgICAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdChzZWxmLnRlbXBkaXJfbmFtZSArICcvJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA0MDQpCisgICAgICAgICAgICAgICAgb3MuY2htb2Qoc2VsZi50ZW1wZGlyLCAwbzc1NSkKIAogICAgIGRlZiB0ZXN0X2hlYWQoc2VsZik6CiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KApAQCAtMzY2LDggKzMwMSw4IEBACiBwcmludCgpCiAKIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKLXByaW50KCIlJXMsICUlcywgJSVzIiAlJSAoZm9ybS5nZXRmaXJzdCgic3BhbSIpLCBmb3JtLmdldGZpcnN0KCJlZ2dzIiksXAotICAgICAgICAgICAgICBmb3JtLmdldGZpcnN0KCJiYWNvbiIpKSkKK3ByaW50KCIlJXMsICUlcywgJSVzIiAlJSAoZm9ybS5nZXRmaXJzdCgic3BhbSIpLCBmb3JtLmdldGZpcnN0KCJlZ2dzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0Zmlyc3QoImJhY29uIikpKQogIiIiCiAKIGNsYXNzIENHSUhUVFBTZXJ2ZXJUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgpAQCAtMzc2LDI5ICszMTEsNDEgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3RDYXNlLnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYuY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgc2VsZi5wYXJlbnRfZGlyID0gdGVtcGZpbGUubWtkdGVtcCgpCiAgICAgICAgIHNlbGYuY2dpX2RpciA9IG9zLnBhdGguam9pbihzZWxmLnBhcmVudF9kaXIsICdjZ2ktYmluJykKICAgICAgICAgb3MubWtkaXIoc2VsZi5jZ2lfZGlyKQorICAgICAgICBzZWxmLmZpbGUxX3BhdGggPSBOb25lCisgICAgICAgIHNlbGYuZmlsZTJfcGF0aCA9IE5vbmUKIAogICAgICAgICAjIFRoZSBzaGViYW5nIGxpbmUgc2hvdWxkIGJlIHB1cmUgQVNDSUk6IHVzZSBzeW1saW5rIGlmIHBvc3NpYmxlLgogICAgICAgICAjIFNlZSBpc3N1ZSAjNzY2OC4KLSAgICAgICAgaWYgaGFzYXR0cihvcywgJ3N5bWxpbmsnKToKKyAgICAgICAgaWYgc3VwcG9ydC5jYW5fc3ltbGluaygpOgogICAgICAgICAgICAgc2VsZi5weXRob25leGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5wYXJlbnRfZGlyLCAncHl0aG9uJykKICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3lzLmV4ZWN1dGFibGUsIHNlbGYucHl0aG9uZXhlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5weXRob25leGUgPSBzeXMuZXhlY3V0YWJsZQogCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgVGhlIHB5dGhvbiBleGVjdXRhYmxlIHBhdGggaXMgd3JpdHRlbiBhcyB0aGUgZmlyc3QgbGluZSBvZiB0aGUKKyAgICAgICAgICAgICMgQ0dJIFB5dGhvbiBzY3JpcHQuIFRoZSBlbmNvZGluZyBjb29raWUgY2Fubm90IGJlIHVzZWQsIGFuZCBzbyB0aGUKKyAgICAgICAgICAgICMgcGF0aCBzaG91bGQgYmUgZW5jb2RhYmxlIHRvIHRoZSBkZWZhdWx0IHNjcmlwdCBlbmNvZGluZyAodXRmLTgpCisgICAgICAgICAgICBzZWxmLnB5dGhvbmV4ZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYudGVhckRvd24oKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiUHl0aG9uIGV4ZWN1dGFibGUgcGF0aCBpcyBub3QgZW5jb2RhYmxlIHRvIHV0Zi04IikKKwogICAgICAgICBzZWxmLmZpbGUxX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5jZ2lfZGlyLCAnZmlsZTEucHknKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlMV9wYXRoLCAndycpIGFzIGZpbGUxOgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlMV9wYXRoLCAndycsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGZpbGUxOgogICAgICAgICAgICAgZmlsZTEud3JpdGUoY2dpX2ZpbGUxICUgc2VsZi5weXRob25leGUpCiAgICAgICAgIG9zLmNobW9kKHNlbGYuZmlsZTFfcGF0aCwgMG83NzcpCiAKICAgICAgICAgc2VsZi5maWxlMl9wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuY2dpX2RpciwgJ2ZpbGUyLnB5JykKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZTJfcGF0aCwgJ3cnKSBhcyBmaWxlMjoKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZTJfcGF0aCwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmaWxlMjoKICAgICAgICAgICAgIGZpbGUyLndyaXRlKGNnaV9maWxlMiAlIHNlbGYucHl0aG9uZXhlKQogICAgICAgICBvcy5jaG1vZChzZWxmLmZpbGUyX3BhdGgsIDBvNzc3KQogCi0gICAgICAgIHNlbGYuY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoc2VsZi5wYXJlbnRfZGlyKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtNDA2LDggKzM1MywxMCBAQAogICAgICAgICAgICAgb3MuY2hkaXIoc2VsZi5jd2QpCiAgICAgICAgICAgICBpZiBzZWxmLnB5dGhvbmV4ZSAhPSBzeXMuZXhlY3V0YWJsZToKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5weXRob25leGUpCi0gICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlMV9wYXRoKQotICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZTJfcGF0aCkKKyAgICAgICAgICAgIGlmIHNlbGYuZmlsZTFfcGF0aDoKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlMV9wYXRoKQorICAgICAgICAgICAgaWYgc2VsZi5maWxlMl9wYXRoOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGUyX3BhdGgpCiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmNnaV9kaXIpCiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLnBhcmVudF9kaXIpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NDksMTMgKzM5OCwxMyBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBhY3R1YWwgPSBzZXJ2ZXIuX3VybF9jb2xsYXBzZV9wYXRoX3NwbGl0KHBhdGgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdwYXRoID0gJXJcbkdvdDogICAgJXJcbldhbnRlZDogJXInICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCwgYWN0dWFsLCBleHBlY3RlZCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J3BhdGggPSAlclxuR290OiAgICAlclxuV2FudGVkOiAlcicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGgsIGFjdHVhbCwgZXhwZWN0ZWQpKQogCiAgICAgZGVmIHRlc3RfaGVhZGVyc19hbmRfY29udGVudChzZWxmKToKICAgICAgICAgcmVzID0gc2VsZi5yZXF1ZXN0KCcvY2dpLWJpbi9maWxlMS5weScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLCBcCi0gICAgICAgICAgICAgKHJlcy5yZWFkKCksIHJlcy5nZXRoZWFkZXIoJ0NvbnRlbnQtdHlwZScpLCByZXMuc3RhdHVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidIZWxsbyBXb3JsZFxuJywgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQogCiAgICAgZGVmIHRlc3RfcG9zdChzZWxmKToKICAgICAgICAgcGFyYW1zID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSgKQEAgLTQ3NCw4ICs0MjMsOCBAQAogICAgICAgICBoZWFkZXJzID0ge2InQXV0aG9yaXphdGlvbicgOiBiJ0Jhc2ljICcgKwogICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iNjRlbmNvZGUoYid1c2VybmFtZTpwYXNzJyl9CiAgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTEucHknLCAnR0VUJywgaGVhZGVycz1oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChiJ0hlbGxvIFdvcmxkXG4nLCAndGV4dC9odG1sJywgMjAwKSwgXAotICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGInSGVsbG8gV29ybGRcbicsICd0ZXh0L2h0bWwnLCAyMDApLAorICAgICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCiAKICAgICBkZWYgdGVzdF9ub19sZWFkaW5nX3NsYXNoKHNlbGYpOgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMjU0CkBAIC00OTIsNiArNDQxLDE2MSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmVudmlyb25bJ1NFUlZFUl9TT0ZUV0FSRSddLCBzaWduYXR1cmUpCiAKIAorY2xhc3MgU29ja2V0bGVzc1JlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnByb3RvY29sX3ZlcnNpb24gPSAiSFRUUC8xLjEiCisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLmdldF9jYWxsZWQgPSBUcnVlCisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L2h0bWwnKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKyAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKK2NsYXNzIFJlamVjdGluZ1NvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcihTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIpOgorICAgIGRlZiBoYW5kbGVfZXhwZWN0XzEwMChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQxNykKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK2NsYXNzIEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgQmFzZUhUVFBTZXJ2ZXIuCisKKyAgICAgICBUZXN0IHRoZSBzdXBwb3J0IGZvciB0aGUgRXhwZWN0IDEwMC1jb250aW51ZSBoZWFkZXIuCisgICAgICAgIiIiCisKKyAgICBIVFRQUmVzcG9uc2VNYXRjaCA9IHJlLmNvbXBpbGUoYidIVFRQLzEuWzAtOV0rIDIwMCBPSycpCisKKyAgICBkZWYgc2V0VXAgKHNlbGYpOgorICAgICAgICBzZWxmLmhhbmRsZXIgPSBTb2NrZXRsZXNzUmVxdWVzdEhhbmRsZXIoKQorCisgICAgZGVmIHNlbmRfdHlwaWNhbF9yZXF1ZXN0KHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBpbnB1dCA9IEJ5dGVzSU8obWVzc2FnZSkKKyAgICAgICAgb3V0cHV0ID0gQnl0ZXNJTygpCisgICAgICAgIHNlbGYuaGFuZGxlci5yZmlsZSA9IGlucHV0CisgICAgICAgIHNlbGYuaGFuZGxlci53ZmlsZSA9IG91dHB1dAorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0KCkKKyAgICAgICAgb3V0cHV0LnNlZWsoMCkKKyAgICAgICAgcmV0dXJuIG91dHB1dC5yZWFkbGluZXMoKQorCisgICAgZGVmIHZlcmlmeV9nZXRfY2FsbGVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5oYW5kbGVyLmdldF9jYWxsZWQpCisKKyAgICBkZWYgdmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMoc2VsZiwgaGVhZGVycyk6CisgICAgICAgIGZvciBmaWVsZE5hbWUgaW4gYidTZXJ2ZXI6ICcsIGInRGF0ZTogJywgYidDb250ZW50LVR5cGU6ICc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1bShoLnN0YXJ0c3dpdGgoZmllbGROYW1lKSBmb3IgaCBpbiBoZWFkZXJzKSwgMSkKKworICAgIGRlZiB2ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICBtYXRjaCA9IHNlbGYuSFRUUFJlc3BvbnNlTWF0Y2guc2VhcmNoKHJlc3BvbnNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0Y2ggaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGVzdF9odHRwXzFfMShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMS4xXHJcblxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9odHRwX3NlcnZlcl9yZXNwb25zZShyZXN1bHRbMF0pCisgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfaHR0cF8xXzAoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgc2VsZi52ZXJpZnlfaHR0cF9zZXJ2ZXJfcmVzcG9uc2UocmVzdWx0WzBdKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKworICAgIGRlZiB0ZXN0X2h0dHBfMF85KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUIC8gSFRUUC8wLjlcclxuXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKworICAgIGRlZiB0ZXN0X3dpdGhfY29udGludWVfMV8wKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUIC8gSFRUUC8xLjBcclxuRXhwZWN0OiAxMDAtY29udGludWVcclxuXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2h0dHBfc2VydmVyX3Jlc3BvbnNlKHJlc3VsdFswXSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCisgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sIGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisKKyAgICBkZWYgdGVzdF93aXRoX2NvbnRpbnVlXzFfMShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMS4xXHJcbkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcblxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSAxMDAgQ29udGludWVcclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMV0sIGInSFRUUC8xLjEgMjAwIE9LXHJcbicpCisgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzI6LTFdKQorICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2J1ZmZlcmluZyhzZWxmKToKKworICAgICAgICBkZWYgX3JlYWRBbmRSZXNlZWsoZik6CisgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgIGlucHV0ID0gQnl0ZXNJTyhiJ0dFVCAvIEhUVFAvMS4xXHJcblxyXG4nKQorICAgICAgICBvdXRwdXQgPSBCeXRlc0lPKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJmaWxlID0gaW5wdXQKKyAgICAgICAgc2VsZi5oYW5kbGVyLndmaWxlID0gb3V0cHV0CisgICAgICAgIHNlbGYuaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24gPSAnSFRUUC8xLjEnCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNlbmRfaGVhZGVyKCdGb28nLCAnZm9vJykKKyAgICAgICAgc2VsZi5oYW5kbGVyLnNlbmRfaGVhZGVyKCdiYXInLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcmVhZEFuZFJlc2VlayhvdXRwdXQpLCBiJycpCisgICAgICAgIHNlbGYuaGFuZGxlci5lbmRfaGVhZGVycygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3JlYWRBbmRSZXNlZWsob3V0cHV0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZvbzogZm9vXHJcbmJhcjogYmFyXHJcblxyXG4nKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX3VuYnVmZmVyZWRfd2hlbl9jb250aW51ZShzZWxmKToKKworICAgICAgICBkZWYgX3JlYWRBbmRSZXNlZWsoZik6CisgICAgICAgICAgICBwb3MgPSBmLnRlbGwoKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGYuc2Vlayhwb3MpCisgICAgICAgICAgICByZXR1cm4gZGF0YQorCisgICAgICAgIGlucHV0ID0gQnl0ZXNJTyhiJ0dFVCAvIEhUVFAvMS4xXHJcbkV4cGVjdDogMTAwLWNvbnRpbnVlXHJcblxyXG4nKQorICAgICAgICBvdXRwdXQgPSBCeXRlc0lPKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnJmaWxlID0gaW5wdXQKKyAgICAgICAgc2VsZi5oYW5kbGVyLndmaWxlID0gb3V0cHV0CisgICAgICAgIHNlbGYuaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24gPSAnSFRUUC8xLjEnCisKKyAgICAgICAgc2VsZi5oYW5kbGVyLmhhbmRsZV9vbmVfcmVxdWVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoX3JlYWRBbmRSZXNlZWsob3V0cHV0KSwgYicnKQorICAgICAgICByZXN1bHQgPSBfcmVhZEFuZFJlc2VlayhvdXRwdXQpLnNwbGl0KGInXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDEwMCBDb250aW51ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzFdLCBiJ0hUVFAvMS4xIDIwMCBPSycpCisKKyAgICBkZWYgdGVzdF93aXRoX2NvbnRpbnVlX3JlamVjdGVkKHNlbGYpOgorICAgICAgICB1c3VhbF9oYW5kbGVyID0gc2VsZi5oYW5kbGVyICAgICAgICAjIFNhdmUgdG8gYXZvaWQgYnJlYWtpbmcgYW55IHN1YnNlcXVlbnQgdGVzdHMuCisgICAgICAgIHNlbGYuaGFuZGxlciA9IFJlamVjdGluZ1NvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcigpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgLyBIVFRQLzEuMVxyXG5FeHBlY3Q6IDEwMC1jb250aW51ZVxyXG5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sIGInSFRUUC8xLjEgNDE3IEV4cGVjdGF0aW9uIEZhaWxlZFxyXG4nKQorICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKKyAgICAgICAgIyBUaGUgZXhwZWN0IGhhbmRsZXIgc2hvdWxkIHNob3J0IGNpcmN1aXQgdGhlIHVzdWFsIGdldCBtZXRob2QgYnkKKyAgICAgICAgIyByZXR1cm5pbmcgZmFsc2UgaGVyZSwgc28gZ2V0X2NhbGxlZCBzaG91bGQgYmUgZmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmhhbmRsZXIuZ2V0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ociA9PSBiJ0Nvbm5lY3Rpb246IGNsb3NlXHJcbicgZm9yIHIgaW4gcmVzdWx0WzE6LTFdKSwgMSkKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gdXN1YWxfaGFuZGxlciAgICAgICAgIyBSZXN0b3JlIHRvIGF2b2lkIGJyZWFraW5nIGFueSBzdWJzZXF1ZW50IHRlc3RzLgorCisgICAgZGVmIHRlc3RfcmVxdWVzdF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEwNzE0OiBodWdlIHJlcXVlc3QgbGluZXMgYXJlIGRpc2NhcmRlZCwgdG8gYXZvaWQgRGVuaWFsCisgICAgICAgICMgb2YgU2VydmljZSBhdHRhY2tzLgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUICcgKyBiJ3gnICogNjU1MzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBiJ0hUVFAvMS4xIDQxNCBSZXF1ZXN0LVVSSSBUb28gTG9uZ1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCisgICAgZGVmIHRlc3RfaGVhZGVyX2xlbmd0aChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNjc5MTogc2FtZSBmb3IgaGVhZGVycworICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KAorICAgICAgICAgICAgYidHRVQgLyBIVFRQLzEuMVxyXG5YLUZvbzogYmFyJyArIGIncicgKiA2NTUzNyArIGInXHJcblxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgYidIVFRQLzEuMSA0MDAgTGluZSB0b28gbG9uZ1xyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuaGFuZGxlci5nZXRfY2FsbGVkKQorCiBjbGFzcyBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiIFRlc3QgdXJsIHBhcnNpbmcgIiIiCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNTE1LDE0ICs2MTksMTUgQEAKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CisgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICB0cnk6Ci0gICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEJhc2VIVFRQUmVxdWVzdEhhbmRsZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhc2VIVFRQU2VydmVyVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbXBsZUhUVFBTZXJ2ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dJSFRUUFNlcnZlclRlc3RDYXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UsCisgICAgICAgICAgICBCYXNlSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgQ0dJSFRUUFNlcnZlclRlc3RDYXNlLAorICAgICAgICAgICAgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UsCisgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICBvcy5jaGRpcihjd2QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQppbmRleCA2MTE2YzhiLi44MDM0MDAwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CkBAIC03LDEwICs3LDcgQEAKIGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIGltcG9ydCBpbWFwbGliCiBpbXBvcnQgb3MucGF0aAotaW1wb3J0IHNlbGVjdAotaW1wb3J0IHNvY2tldAogaW1wb3J0IHNvY2tldHNlcnZlcgotaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBjYWxlbmRhcgogCkBAIC03Niw3ICs3Myw3IEBACiAgICAgdGltZW91dCA9IDEKIAogICAgIGRlZiBfc2VuZChzZWxmLCBtZXNzYWdlKToKLSAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIlNFTlQ6IiwgbWVzc2FnZS5zdHJpcCgpKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiU0VOVDogJXIiICUgbWVzc2FnZS5zdHJpcCgpKQogICAgICAgICBzZWxmLndmaWxlLndyaXRlKG1lc3NhZ2UpCiAKICAgICBkZWYgaGFuZGxlKHNlbGYpOgpAQCAtMTAwLDcgKzk3LDcgQEAKICAgICAgICAgICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKGInXHJcbicpOgogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgnR09UOicsIGxpbmUuc3RyaXAoKSkKKyAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCdHT1Q6ICVyJyAlIGxpbmUuc3RyaXAoKSkKICAgICAgICAgICAgIHNwbGl0bGluZSA9IGxpbmUuc3BsaXQoKQogICAgICAgICAgICAgdGFnID0gc3BsaXRsaW5lWzBdLmRlY29kZSgnQVNDSUknKQogICAgICAgICAgICAgY21kID0gc3BsaXRsaW5lWzFdLmRlY29kZSgnQVNDSUknKQpAQCAtMTUxLDYgKzE0OCw3IEBACiAgICAgZGVmIHJlYXBfc2VydmVyKHNlbGYsIHNlcnZlciwgdGhyZWFkKToKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIndhaXRpbmcgZm9yIHNlcnZlciIpCiAgICAgICAgIHNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHNlcnZlci5zZXJ2ZXJfY2xvc2UoKQogICAgICAgICB0aHJlYWQuam9pbigpCiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJkb25lIikKIApAQCAtMjIxLDIwICsyMTksMzggQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLnNlcnZlci5sb2dvdXQoKQorICAgICAgICAgICAgd2l0aCB0cmFuc2llbnRfaW50ZXJuZXQoc2VsZi5ob3N0KToKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5sb2dvdXQoKQogCiAgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0xPR0lORElTQUJMRUQnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKLQotICAgIGRlZiB0ZXN0X2Fub25sb2dpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdBVVRIPUFOT05ZTU9VUycgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQotICAgICAgICBycyA9IHNlbGYuc2VydmVyLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdPSycpCisgICAgICAgIHdpdGggdHJhbnNpZW50X2ludGVybmV0KHNlbGYuaG9zdCk6CisgICAgICAgICAgICBmb3IgY2FwIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2FwLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0xPR0lORElTQUJMRUQnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnQVVUSD1BTk9OWU1PVVMnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKKyAgICAgICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9naW4oc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdPSycpCiAKICAgICBkZWYgdGVzdF9sb2dvdXQoc2VsZik6Ci0gICAgICAgIHJzID0gc2VsZi5zZXJ2ZXIubG9nb3V0KCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnNbMF0sICdCWUUnKQorICAgICAgICB3aXRoIHRyYW5zaWVudF9pbnRlcm5ldChzZWxmLmhvc3QpOgorICAgICAgICAgICAgcnMgPSBzZWxmLnNlcnZlci5sb2dvdXQoKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJzWzBdLCAnQllFJykKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wsICJTU0wgbm90IGF2YWlsYWJsZSIpCitjbGFzcyBSZW1vdGVJTUFQX1NUQVJUVExTVGVzdChSZW1vdGVJTUFQVGVzdCk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICB3aXRoIHRyYW5zaWVudF9pbnRlcm5ldChzZWxmLmhvc3QpOgorICAgICAgICAgICAgcnMgPSBzZWxmLnNlcnZlci5zdGFydHRscygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJzWzBdLCAnT0snKQorCisgICAgZGVmIHRlc3RfbG9naW5jYXBhKHNlbGYpOgorICAgICAgICBmb3IgY2FwIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjYXAsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnTE9HSU5ESVNBQkxFRCcgaW4gc2VsZi5zZXJ2ZXIuY2FwYWJpbGl0aWVzKQogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHNzbCwgIlNTTCBub3QgYXZhaWxhYmxlIikKQEAgLTI0Myw2ICsyNTksOCBAQAogICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKIAogICAgIGRlZiB0ZXN0X2xvZ2luY2FwYShzZWxmKToKKyAgICAgICAgZm9yIGNhcCBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2FwLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ0xPR0lORElTQUJMRUQnIGluIHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdBVVRIPVBMQUlOJyBpbiBzZWxmLnNlcnZlci5jYXBhYmlsaXRpZXMpCiAKQEAgLTI1OSw3ICsyNzcsNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlcyEiKQogICAgICAgICB0ZXN0cy5leHRlbmQoWwogICAgICAgICAgICAgVGhyZWFkZWROZXR3b3JrZWRUZXN0cywgVGhyZWFkZWROZXR3b3JrZWRUZXN0c1NTTCwKLSAgICAgICAgICAgIFJlbW90ZUlNQVBUZXN0LCBSZW1vdGVJTUFQX1NTTFRlc3QsCisgICAgICAgICAgICBSZW1vdGVJTUFQVGVzdCwgUmVtb3RlSU1BUF9TU0xUZXN0LCBSZW1vdGVJTUFQX1NUQVJUVExTVGVzdCwKICAgICAgICAgXSkKIAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKaW5kZXggMTY3MWU0OC4uNTUxYWQxYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXAucHkKQEAgLTEsMTAgKzEsMTEgQEAKIGltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0KK2ltcG9ydCBpbXBvcnRsaWIKIAogY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNDEsMjYgKzQyLDQwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJ1bnRpbWVFcnJvciIpCiAKIGNsYXNzIEltcG9ydFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIG1vZCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0ZXN0LmVuY29kZWRfbW9kdWxlcycpCisgICAgICAgIHNlbGYudGVzdF9zdHJpbmdzID0gbW9kLnRlc3Rfc3RyaW5ncworICAgICAgICBzZWxmLnRlc3RfcGF0aCA9IG1vZC5fX3BhdGhfXworCisgICAgZGVmIHRlc3RfaW1wb3J0X2VuY29kZWRfbW9kdWxlKHNlbGYpOgorICAgICAgICBmb3IgbW9kbmFtZSwgZW5jb2RpbmcsIHRlc3RzdHIgaW4gc2VsZi50ZXN0X3N0cmluZ3M6CisgICAgICAgICAgICBtb2QgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgndGVzdC5lbmNvZGVkX21vZHVsZXMuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZHVsZV8nICsgbW9kbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdHN0ciwgbW9kLnRlc3QpCiAKICAgICBkZWYgdGVzdF9maW5kX21vZHVsZV9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgZmQgPSBpbXAuZmluZF9tb2R1bGUoImhlYXBxIilbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZC5lbmNvZGluZywgImlzby04ODU5LTEiKQorICAgICAgICBmb3IgbW9kLCBlbmNvZGluZywgXyBpbiBzZWxmLnRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIHdpdGggaW1wLmZpbmRfbW9kdWxlKCdtb2R1bGVfJyArIG1vZCwgc2VsZi50ZXN0X3BhdGgpWzBdIGFzIGZkOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmQuZW5jb2RpbmcsIGVuY29kaW5nKQogCiAgICAgZGVmIHRlc3RfaXNzdWUxMjY3KHNlbGYpOgotICAgICAgICBmcCwgZmlsZW5hbWUsIGluZm8gID0gaW1wLmZpbmRfbW9kdWxlKCJweWRvYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZnAsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZW5jb2RpbmcsICJpc28tODg1OS0xIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC50ZWxsKCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgJyMhL3Vzci9iaW4vZW52IHB5dGhvblxuJykKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBmb3IgbW9kLCBlbmNvZGluZywgXyBpbiBzZWxmLnRlc3Rfc3RyaW5nczoKKyAgICAgICAgICAgIGZwLCBmaWxlbmFtZSwgaW5mbyAgPSBpbXAuZmluZF9tb2R1bGUoJ21vZHVsZV8nICsgbW9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3RfcGF0aCkKKyAgICAgICAgICAgIHdpdGggZnA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmcCwgTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmVuY29kaW5nLCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnRlbGwoKSwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksICcjIHRlc3QgJXMgZW5jb2RpbmdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgZW5jb2RpbmcpCiAKICAgICAgICAgZnAsIGZpbGVuYW1lLCBpbmZvID0gaW1wLmZpbmRfbW9kdWxlKCJ0b2tlbml6ZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZnAsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAuZW5jb2RpbmcsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAudGVsbCgpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyIiIlRva2VuaXphdGlvbiBoZWxwIGZvciBQeXRob24gcHJvZ3JhbXMuXG4nKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZwLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgInV0Zi04IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAudGVsbCgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIiIiVG9rZW5pemF0aW9uIGhlbHAgZm9yIFB5dGhvbiBwcm9ncmFtcy5cbicpCiAKICAgICBkZWYgdGVzdF9pc3N1ZTM1OTQoc2VsZik6CiAgICAgICAgIHRlbXBfbW9kX25hbWUgPSAndGVzdF9pbXBfaGVscGVyJwpAQCAtODYsNyArMTAxLDYgQEAKIAogICAgICAgICAjIHRoZSByZXR1cm4gZW5jb2RpbmcgY291bGQgYmUgdXBwZXJjYXNlIG9yIE5vbmUKICAgICAgICAgZnNfZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKLSAgICAgICAgZnNfZW5jb2RpbmcgPSBmc19lbmNvZGluZy5sb3dlcigpIGlmIGZzX2VuY29kaW5nIGVsc2UgJ2FzY2lpJwogCiAgICAgICAgICMgY292ZXJzIHV0Zi04IGFuZCBXaW5kb3dzIEFOU0kgY29kZSBwYWdlcwogICAgICAgICAjIG9uZSBub24tc3BhY2Ugc3ltYm9sIGZyb20gZXZlcnkgcGFnZQpAQCAtMTI2LDIwICsxNDAsMjEgQEAKICAgICAgICAgICAgIHdpdGggb3Blbih0ZW1wX21vZF9uYW1lICsgJy5weScsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKCdhID0gMVxuJykKICAgICAgICAgICAgIGZpbGUsIGZpbGVuYW1lLCBpbmZvID0gaW1wLmZpbmRfbW9kdWxlKHRlbXBfbW9kX25hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmaWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVuYW1lWzotM10uZW5kc3dpdGgodGVtcF9tb2RfbmFtZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMF0sICcucHknKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAnVScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMl0sIGltcC5QWV9TT1VSQ0UpCisgICAgICAgICAgICB3aXRoIGZpbGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZW5hbWVbOi0zXS5lbmRzd2l0aCh0ZW1wX21vZF9uYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bMF0sICcucHknKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sxXSwgJ1UnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1syXSwgaW1wLlBZX1NPVVJDRSkKIAotICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKHRlbXBfbW9kX25hbWUsIGZpbGUsIGZpbGVuYW1lLCBpbmZvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYSwgMSkKLSAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgICAgIG1vZCA9IGltcC5sb2FkX21vZHVsZSh0ZW1wX21vZF9uYW1lLCBmaWxlLCBmaWxlbmFtZSwgaW5mbykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5hLCAxKQogCiAgICAgICAgICAgICBtb2QgPSBpbXAubG9hZF9zb3VyY2UodGVtcF9tb2RfbmFtZSwgdGVtcF9tb2RfbmFtZSArICcucHknKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYSwgMSkKIAotICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfY29tcGlsZWQodGVtcF9tb2RfbmFtZSwgdGVtcF9tb2RfbmFtZSArICcucHljJykKKyAgICAgICAgICAgIG1vZCA9IGltcC5sb2FkX2NvbXBpbGVkKAorICAgICAgICAgICAgICAgIHRlbXBfbW9kX25hbWUsIGltcC5jYWNoZV9mcm9tX3NvdXJjZSh0ZW1wX21vZF9uYW1lICsgJy5weScpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QuYSwgMSkKIAogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRlc3RfcGFja2FnZV9uYW1lKToKQEAgLTE1NSwyMCArMTcwLDE3OSBAQAogICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGluaXRfZmlsZV9uYW1lICsgZXh0KQogICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGVzdF9wYWNrYWdlX25hbWUpCiAKKyAgICBkZWYgdGVzdF9pc3N1ZTkzMTkoc2VsZik6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbXAuZmluZF9tb2R1bGUsICJiYWRzeW50YXhfcGVwMzEyMCIsIFtwYXRoXSkKIAotICAgIGRlZiB0ZXN0X3JlbG9hZChzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgaW1wLnJlbG9hZChtYXJzaGFsKQotICAgICAgICBpbXBvcnQgc3RyaW5nCi0gICAgICAgIGltcC5yZWxvYWQoc3RyaW5nKQotICAgICAgICAjIyBpbXBvcnQgc3lzCi0gICAgICAgICMjIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCByZWxvYWQsIHN5cykKKworY2xhc3MgUmVsb2FkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIiIiVmVyeSBiYXNpYyB0ZXN0cyB0byBtYWtlIHN1cmUgdGhhdCBpbXAucmVsb2FkKCkgb3BlcmF0ZXMganVzdCBsaWtlCisgICAgcmVsb2FkKCkuIiIiCisKKyAgICBkZWYgdGVzdF9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgWFhYIChuY29naGxhbik6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHRlc3Quc3VwcG9ydC5DbGVhbkltcG9ydAorICAgICAgICAjIGhlcmUsIGJ1dCB0aGF0IGJyZWFrcyBiZWNhdXNlIHRoZSBvcyBtb2R1bGUgcmVnaXN0ZXJzIHNvbWUKKyAgICAgICAgIyBoYW5kbGVycyBpbiBjb3B5X3JlZyBvbiBpbXBvcnQuIFNpbmNlIENsZWFuSW1wb3J0IGRvZXNuJ3QKKyAgICAgICAgIyByZXZlcnQgdGhhdCByZWdpc3RyYXRpb24sIHRoZSBtb2R1bGUgaXMgbGVmdCBpbiBhIGJyb2tlbgorICAgICAgICAjIHN0YXRlIGFmdGVyIHJldmVyc2lvbi4gUmVpbml0aWFsaXNpbmcgdGhlIG1vZHVsZSBjb250ZW50cworICAgICAgICAjIGFuZCBqdXN0IHJldmVydGluZyBvcy5lbnZpcm9uIHRvIGl0cyBwcmV2aW91cyBzdGF0ZSBpcyBhbiBPSworICAgICAgICAjIHdvcmthcm91bmQKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wLnJlbG9hZChvcykKKworICAgIGRlZiB0ZXN0X2V4dGVuc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCd0aW1lJyk6CisgICAgICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICAgICAgaW1wLnJlbG9hZCh0aW1lKQorCisgICAgZGVmIHRlc3RfYnVpbHRpbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LkNsZWFuSW1wb3J0KCdtYXJzaGFsJyk6CisgICAgICAgICAgICBpbXBvcnQgbWFyc2hhbAorICAgICAgICAgICAgaW1wLnJlbG9hZChtYXJzaGFsKQorCisKK2NsYXNzIFBFUDMxNDdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgb2YgUEVQIDMxNDcuIiIiCisKKyAgICB0YWcgPSBpbXAuZ2V0X3RhZygpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZShzZWxmKToKKyAgICAgICAgIyBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIFBFUCAzMTQ3CisgICAgICAgICMgZGVmaW5lZCAucHljIGZpbGUgKGkuZS4gdW5kZXIgX19weWNhY2hlX18pLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaW1wLmNhY2hlX2Zyb21fc291cmNlKCcvZm9vL2Jhci9iYXovcXV4LnB5JywgVHJ1ZSksCisgICAgICAgICAgICAnL2Zvby9iYXIvYmF6L19fcHljYWNoZV9fL3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9vcHRpbWl6ZWQoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHkgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyBQRVAgMzE0NworICAgICAgICAjIGRlZmluZWQgLnB5byBmaWxlIChpLmUuIHVuZGVyIF9fcHljYWNoZV9fKS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6L3F1eC5weScsIEZhbHNlKSwKKyAgICAgICAgICAgICcvZm9vL2Jhci9iYXovX19weWNhY2hlX18vcXV4Lnt9LnB5bycuZm9ybWF0KHNlbGYudGFnKSkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnNlcC5qb2luKCgnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vLnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkpKQorCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Vfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgICMgV2hlbiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgaXQgY2FuIGJlIGFueSB0cnVlLWlzaCBvciBmYWxzZS1pc2gKKyAgICAgICAgIyB2YWx1ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnL2Zvby9iYXIvYmF6LnB5JywgW10pLAorICAgICAgICAgICAgJy9mb28vYmFyL19fcHljYWNoZV9fL2Jhei57fS5weW8nLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoJy9mb28vYmFyL2Jhei5weScsIFsxN10pLAorICAgICAgICAgICAgJy9mb28vYmFyL19fcHljYWNoZV9fL2Jhei57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgICMgSG93ZXZlciBpZiB0aGUgYm9vbC1pc2huZXNzIGNhbid0IGJlIGRldGVybWluZWQsIHRoZSBleGNlcHRpb24KKyAgICAgICAgIyBwcm9wYWdhdGVzLgorICAgICAgICBjbGFzcyBCZWFyaXNoOgorICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOiByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBpbXAuY2FjaGVfZnJvbV9zb3VyY2UsICcvZm9vL2Jhci9iYXoucHknLCBCZWFyaXNoKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG9zLmFsdHNlcCBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgbWVhbmluZ2Z1bCBvbmx5IHdoZXJlIG9zLmFsdHNlcCBpcyBkZWZpbmVkJykKKyAgICBkZWYgdGVzdF9hbHRzZXBfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2luZG93cyBwYXRoIGFuZCBQRVAgMzE0Ny4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnXFxmb29cXGJhclxcYmF6XFxxdXgucHknLCBUcnVlKSwKKyAgICAgICAgICAgICdcXGZvb1xcYmFyXFxiYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5hbHRzZXAgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVyZSBvcy5hbHRzZXAgaXMgZGVmaW5lZCcpCisgICAgZGVmIHRlc3RfYWx0c2VwX2FuZF9zZXBfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2luZG93cyBwYXRoIGFuZCBQRVAgMzE0NyB3aGVyZSBhbHRzZXAgaXMgcmlnaHQgb2Ygc2VwLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgaW1wLmNhY2hlX2Zyb21fc291cmNlKCdcXGZvb1xcYmFyL2JhelxccXV4LnB5JywgVHJ1ZSksCisgICAgICAgICAgICAnXFxmb29cXGJhci9iYXpcXF9fcHljYWNoZV9fXFxxdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5hbHRzZXAgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVyZSBvcy5hbHRzZXAgaXMgZGVmaW5lZCcpCisgICAgZGVmIHRlc3Rfc2VwX2FsdHNlcF9hbmRfc2VwX2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIFdpbmRvd3MgcGF0aCBhbmQgUEVQIDMxNDcgd2hlcmUgc2VwIGlzIHJpZ2h0IG9mIGFsdHNlcC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnXFxmb29cXGJhclxcYmF6L3F1eC5weScsIFRydWUpLAorICAgICAgICAgICAgJ1xcZm9vXFxiYXJcXGJhei9fX3B5Y2FjaGVfXy9xdXgue30ucHljJy5mb3JtYXQoc2VsZi50YWcpKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGUoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSBQRVAgMzE0NyBkZWZpbmVkIC5weWMgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvCisgICAgICAgICMgaXRzIHNvdXJjZS4gIFRoaXMgdGVzdHMgdGhlIGdvb2QgcGF0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXAuc291cmNlX2Zyb21fY2FjaGUoCisgICAgICAgICAgICAnL2Zvby9iYXIvYmF6L19fcHljYWNoZV9fL3F1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpLAorICAgICAgICAgICAgJy9mb28vYmFyL2Jhei9xdXgucHknKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfYmFkX3BhdGgoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgcGF0aCB0byBhIHB5YyBmaWxlIGlzIG5vdCBpbiBQRVAgMzE0NyBmb3JtYXQsIGEgVmFsdWVFcnJvcgorICAgICAgICAjIGlzIHJhaXNlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBpbXAuc291cmNlX2Zyb21fY2FjaGUsICcvZm9vL2Jhci9iYXpxdXgucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX3NsYXNoKHNlbGYpOgorICAgICAgICAjIE5vIHNsYXNoZXMgYXQgYWxsIGluIHBhdGggLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIGltcC5zb3VyY2VfZnJvbV9jYWNoZSwgJ2Zvby5jcHl0aG9uLTMyLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fZmV3X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIGZldyBkb3RzIGluIGZpbmFsIHBhdGggY29tcG9uZW50IC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBpbXAuc291cmNlX2Zyb21fY2FjaGUsICdfX3B5Y2FjaGVfXy9mb28ucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX3Rvb19tYW55X2RvdHMoc2VsZik6CisgICAgICAgICMgVG9vIG1hbnkgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgaW1wLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJ19fcHljYWNoZV9fL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fX3B5Y2FjaGVfXyhzZWxmKToKKyAgICAgICAgIyBBbm90aGVyIHByb2JsZW0gd2l0aCB0aGUgcGF0aCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgaW1wLnNvdXJjZV9mcm9tX2NhY2hlLAorICAgICAgICAgICAgJy9mb28vYmFyL2Zvby5jcHl0aG9uLTMyLmZvby5weWMnKQorCisgICAgZGVmIHRlc3RfcGFja2FnZV9fX2ZpbGVfXyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSBwYWNrYWdlJ3MgX19maWxlX18gcG9pbnRzIHRvIHRoZSByaWdodCBzb3VyY2UgZGlyZWN0b3J5LgorICAgICAgICBvcy5ta2RpcigncGVwMzE0NycpCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBpZiBzeXMucGF0aFswXSA9PSBvcy5jdXJkaXI6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKCdwZXAzMTQ3JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgICMgVG91Y2ggdGhlIF9faW5pdF9fLnB5IGZpbGUuCisgICAgICAgIHdpdGggb3BlbigncGVwMzE0Ny9fX2luaXRfXy5weScsICd3Jyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3JykKKyAgICAgICAgIyBFbnN1cmUgd2UgbG9hZCB0aGUgcHljIGZpbGUuCisgICAgICAgIHN1cHBvcnQuZm9yZ2V0KCdwZXAzMTQ3JykKKyAgICAgICAgbSA9IF9faW1wb3J0X18oJ3BlcDMxNDcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19maWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc2VwLmpvaW4oKCcuJywgJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSkpCisKKworY2xhc3MgTnVsbEltcG9ydGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEB1bml0dGVzdC5za2lwSWYoc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICJOZWVkIGFuIHVuZGVjb2RlYWJsZSBmaWxlbmFtZSIpCisgICAgZGVmIHRlc3RfdW5lbmNvZGVhYmxlKHNlbGYpOgorICAgICAgICBuYW1lID0gc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUKKyAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIGltcC5OdWxsSW1wb3J0ZXIsIG5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihuYW1lKQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFsKICAgICAgICAgSW1wb3J0VGVzdHMsCi0gICAgXQorICAgICAgICBQRVAzMTQ3VGVzdHMsCisgICAgICAgIFJlbG9hZFRlc3RzLAorICAgICAgICBOdWxsSW1wb3J0ZXJUZXN0cywKKyAgICAgICAgXQogICAgIHRyeToKICAgICAgICAgaW1wb3J0IF90aHJlYWQKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CmluZGV4IDZmOTM1YzcuLjk1YTVmNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5CkBAIC0xLDMgKzEsNCBAQAoraW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgaW1wCiBmcm9tIGltcG9ydGxpYi50ZXN0LmltcG9ydF8gaW1wb3J0IHRlc3RfcmVsYXRpdmVfaW1wb3J0cwogZnJvbSBpbXBvcnRsaWIudGVzdC5pbXBvcnRfIGltcG9ydCB1dGlsIGFzIGltcG9ydGxpYl91dGlsCkBAIC04LDEyICs5LDEyIEBACiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCB0ZXh0d3JhcAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAotICAgIEVudmlyb25tZW50VmFyR3VhcmQsIFRFU1RGTiwgZm9yZ2V0LCBpc19qeXRob24sCi0gICAgcm10cmVlLCBydW5fdW5pdHRlc3QsIHVubGluaywgdW5sb2FkKQorICAgIEVudmlyb25tZW50VmFyR3VhcmQsIFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIGZvcmdldCwgaXNfanl0aG9uLAorICAgIG1ha2VfbGVnYWN5X3B5Yywgcm10cmVlLCBydW5fdW5pdHRlc3QsIHN3YXBfYXR0ciwgc3dhcF9pdGVtLCB0ZW1wX3VtYXNrLAorICAgIHVubGluaywgdW5sb2FkKQogZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCiAKIApAQCAtMjksNiArMzAsOSBAQAogCiBjbGFzcyBJbXBvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVubG9hZChURVNURk4pCiAKQEAgLTM3LDEyICs0MSw4IEBACiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKICAgICAgICAgIyBCcmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhhdCBpbXBvcnQgaXMgY2FzZS1zZW5zaXRpdmU6ICBpZiB3ZSBnb3QKICAgICAgICAgIyB0aGlzIGZhciwgd2Uga25vdyBmb3Igc3VyZSB0aGF0ICJyYW5kb20iIGV4aXN0cy4KLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIGltcG9ydCBSQW5Eb00KLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgb2YgUkFuRG9NIHNob3VsZCBoYXZlIGZhaWxlZCAoY2FzZSBtaXNtYXRjaCkiKQogCiAgICAgZGVmIHRlc3RfZG91YmxlX2NvbnN0KHNlbGYpOgogICAgICAgICAjIEFub3RoZXIgYnJpZWYgZGlncmVzc2lvbiB0byB0ZXN0IHRoZSBhY2N1cmFjeSBvZiBtYW5pZmVzdCBmbG9hdApAQCAtOTksMzEgKzk5LDI5IEBACiAgICAgZGVmIHRlc3RfZXhlY3V0ZV9iaXRfbm90X2NvcGllZChzZWxmKToKICAgICAgICAgIyBJc3N1ZSA2MDcwOiB1bmRlciBwb3NpeCAucHljIGZpbGVzIGdvdCB0aGVpciBleGVjdXRlIGJpdCBzZXQgaWYKICAgICAgICAgIyB0aGUgLnB5IGZpbGUgaGFkIHRoZSBleGVjdXRlIGJpdCBzZXQsIGJ1dCB0aGV5IGFyZW4ndCBleGVjdXRhYmxlLgotICAgICAgICBvbGRtYXNrID0gb3MudW1hc2soMG8wMjIpCi0gICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZuYW1lID0gVEVTVEZOICsgb3MuZXh0c2VwICsgInB5IgotICAgICAgICAgICAgZiA9IG9wZW4oZm5hbWUsICd3JykuY2xvc2UoKQotICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIChzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEggfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVhVU1IgfCBzdGF0LlNfSVhHUlAgfCBzdGF0LlNfSVhPVEgpKQotICAgICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgICAgICBmbiA9IGZuYW1lICsgJ2MnCi0gICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgotICAgICAgICAgICAgICAgIGZuID0gZm5hbWUgKyAnbycKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOiByYWlzZSBUZXN0RmFpbGVkKCJfX2ltcG9ydF9fIGRpZCAiCi0gICAgICAgICAgICAgICAgICAgICJub3QgcmVzdWx0IGluIGNyZWF0aW9uIG9mIGVpdGhlciBhIC5weWMgb3IgLnB5byBmaWxlIikKLSAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocy5zdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSVVNSIHwgc3RhdC5TX0lSR1JQIHwgc3RhdC5TX0lST1RIKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MudW1hc2sob2xkbWFzaykKLSAgICAgICAgICAgIHJlbW92ZV9maWxlcyhURVNURk4pCi0gICAgICAgICAgICBpZiBURVNURk4gaW4gc3lzLm1vZHVsZXM6IGRlbCBzeXMubW9kdWxlc1tURVNURk5dCi0gICAgICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgd2l0aCB0ZW1wX3VtYXNrKDBvMDIyKToKKyAgICAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm5hbWUgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCisgICAgICAgICAgICAgICAgb3BlbihmbmFtZSwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICAgICAgb3MuY2htb2QoZm5hbWUsIChzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVJHUlAgfCBzdGF0LlNfSVJPVEggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lYVVNSIHwgc3RhdC5TX0lYR1JQIHwgc3RhdC5TX0lYT1RIKSkKKyAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgICAgICAgICBmbiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVpdGhlciBhIC5weWMgb3IgLnB5byBmaWxlIikKKyAgICAgICAgICAgICAgICAgICAgcyA9IG9zLnN0YXQoZm4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSU1PREUocy5zdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICAgICAgcmVtb3ZlX2ZpbGVzKFRFU1RGTikKKyAgICAgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfaW1wX21vZHVsZShzZWxmKToKICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgaW1wIG1vZHVsZSBjYW4gY29ycmVjdGx5IGxvYWQgYW5kIGZpbmQgLnB5IGZpbGVzCi0gICAgICAgIGltcG9ydCBpbXAsIG9zCiAgICAgICAgICMgWFhYIChuY29naGxhbik6IEl0IHdvdWxkIGJlIG5pY2UgdG8gdXNlIHN1cHBvcnQuQ2xlYW5JbXBvcnQKICAgICAgICAgIyBoZXJlLCBidXQgdGhhdCBicmVha3MgYmVjYXVzZSB0aGUgb3MgbW9kdWxlIHJlZ2lzdGVycyBzb21lCiAgICAgICAgICMgaGFuZGxlcnMgaW4gY29weV9yZWcgb24gaW1wb3J0LiBTaW5jZSBDbGVhbkltcG9ydCBkb2Vzbid0CkBAIC0xMzUsNiArMTMzLDcgQEAKICAgICAgICAgb3JpZ19nZXRlbnYgPSBvcy5nZXRlbnYKICAgICAgICAgd2l0aCBFbnZpcm9ubWVudFZhckd1YXJkKCk6CiAgICAgICAgICAgICB4ID0gaW1wLmZpbmRfbW9kdWxlKCJvcyIpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoeFswXS5jbG9zZSkKICAgICAgICAgICAgIG5ld19vcyA9IGltcC5sb2FkX21vZHVsZSgib3MiLCAqeCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MsIG5ld19vcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3JpZ19wYXRoLCBuZXdfb3MucGF0aCkKQEAgLTE1Myw2ICsxNTIsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgQ29tcGlsZSAmIHJlbW92ZSAucHkgZmlsZTsgd2Ugb25seSBuZWVkIC5weWMgKG9yIC5weW8pLgorICAgICAgICAgICAgIyBCeXRlY29kZSBtdXN0IGJlIHJlbG9jYXRlZCBmcm9tIHRoZSBQRVAgMzE0NyBieXRlY29kZS1vbmx5IGxvY2F0aW9uLgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVuYW1lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQpAQCAtMTYxLDYgKzE2MSw3IEBACiAgICAgICAgIHN5cy5wYXRoLmFwcGVuZCgnJykKIAogICAgICAgICB0cnk6CisgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMoZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaC4KICAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlKQogICAgICAgICBmaW5hbGx5OgpAQCAtMTk5LDEzICsyMDAsNiBAQAogICAgICAgICBpbXBvcnQgdGVzdC5zdXBwb3J0IGFzIHkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgaXMgdGVzdC5zdXBwb3J0LCB5Ll9fbmFtZV9fKQogCi0gICAgZGVmIHRlc3RfaW1wb3J0X2luaXRsZXNzX2RpcmVjdG9yeV93YXJuaW5nKHNlbGYpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICAjIEp1c3QgYSByYW5kb20gbm9uLXBhY2thZ2UgZGlyZWN0b3J5IHdlIGFsd2F5cyBleHBlY3QgdG8gYmUKLSAgICAgICAgICAgICMgc29tZXdoZXJlIGluIHN5cy5wYXRoLi4uCi0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgSW1wb3J0V2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydFdhcm5pbmcsIF9faW1wb3J0X18sICJzaXRlLXBhY2thZ2VzIikKLQogICAgIGRlZiB0ZXN0X2ZhaWxpbmdfcmVsb2FkKHNlbGYpOgogICAgICAgICAjIEEgZmFpbGluZyByZWxvYWQgc2hvdWxkIGxlYXZlIHRoZSBtb2R1bGUgb2JqZWN0IGluIHN5cy5tb2R1bGVzLgogICAgICAgICBzb3VyY2UgPSBURVNURk4gKyBvcy5leHRzZXAgKyAicHkiCkBAIC0yNTYsNiArMjUwLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2QuX19maWxlX18uZW5kc3dpdGgoJy5weScpKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNvdXJjZSkKICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tURVNURk5dCisgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMoc291cmNlKQogICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhURVNURk4pCiAgICAgICAgICAgICBiYXNlLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KG1vZC5fX2ZpbGVfXykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0LCAoJy5weWMnLCAnLnB5bycpKQpAQCAtMjc2LDE1ICsyNzEsMjMgQEAKICAgICAgICAgaW1wb3J0IHRlc3Quc3VwcG9ydCBhcyB5CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeSwgdGVzdC5zdXBwb3J0LCB5Ll9fbmFtZV9fKQogCisgICAgZGVmIHRlc3RfaW1wb3J0X2luaXRsZXNzX2RpcmVjdG9yeV93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgSW1wb3J0V2FybmluZykpOgorICAgICAgICAgICAgIyBKdXN0IGEgcmFuZG9tIG5vbi1wYWNrYWdlIGRpcmVjdG9yeSB3ZSBhbHdheXMgZXhwZWN0IHRvIGJlCisgICAgICAgICAgICAjIHNvbWV3aGVyZSBpbiBzeXMucGF0aC4uLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sICJzaXRlLXBhY2thZ2VzIikKKwogICAgIGRlZiB0ZXN0X2ltcG9ydF9ieV9maWxlbmFtZShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCisgICAgICAgIGVuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGguZW5jb2RlKGVuY29kaW5nKQorICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgncGF0aCBpcyBub3QgZW5jb2RhYmxlIHRvIHt9Jy5mb3JtYXQoZW5jb2RpbmcpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjOgogICAgICAgICAgICAgX19pbXBvcnRfXyhwYXRoKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSW1wb3J0IGJ5IGZpbGVuYW1lIGlzIG5vdCBzdXBwb3J0ZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyci5hcmdzWzBdKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbXBvcnQgYnkgcGF0aCBkaWRuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiSW1wb3J0IGJ5IGZpbGVuYW1lIGlzIG5vdCBzdXBwb3J0ZWQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjLmV4Y2VwdGlvbi5hcmdzWzBdKQogCiAgICAgZGVmIHRlc3RfaW1wb3J0X2luX2RlbF9kb2VzX25vdF9jcmFzaChzZWxmKToKICAgICAgICAgIyBJc3N1ZSA0MjM2CkBAIC0zMTUsNyArMzE4LDcgQEAKICIiIgogICAgIGRpcl9uYW1lID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oZGlyX25hbWUsIG1vZHVsZV9uYW1lKSArIG9zLmV4dHNlcCArICJweSIKLSAgICBjb21waWxlZF9uYW1lID0gZmlsZV9uYW1lICsgKCJjIiBpZiBfX2RlYnVnX18gZWxzZSAibyIpCisgICAgY29tcGlsZWRfbmFtZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX25hbWUpCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc3lzX3BhdGggPSBzeXMucGF0aFs6XQpAQCAtMzYyLDggKzM2NSw5IEBACiAgICAgICAgIHRhcmdldCA9ICJhbm90aGVyX21vZHVsZS5weSIKICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuZmlsZV9uYW1lLCBkZmlsZT10YXJnZXQpCiAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVfbmFtZSkKKyAgICAgICAgcHljX2ZpbGUgPSBtYWtlX2xlZ2FjeV9weWMoc2VsZi5maWxlX25hbWUpCiAgICAgICAgIG1vZCA9IHNlbGYuaW1wb3J0X21vZHVsZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLm1vZHVsZV9maWxlbmFtZSwgc2VsZi5jb21waWxlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5tb2R1bGVfZmlsZW5hbWUsIHB5Y19maWxlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5jb2RlX2ZpbGVuYW1lLCB0YXJnZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLmZ1bmNfZmlsZW5hbWUsIHRhcmdldCkKIApAQCAtNDgxLDYgKzQ4NSwxNTggQEAKICAgICAgICAgICAgICAgICAgICAgICAiaW1wbGljaXQgYWJzb2x1dGUgaW1wb3J0IikKIAogCitjbGFzcyBPdmVycmlkaW5nSW1wb3J0QnVpbHRpblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9vdmVycmlkZV9idWlsdGluKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBvdmVycmlkaW5nIGJ1aWx0aW5zLl9faW1wb3J0X18gY2FuIGJ5cGFzcyBzeXMubW9kdWxlcy4KKyAgICAgICAgaW1wb3J0IG9zCisKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICByZXR1cm4gb3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgb3MpICAjIFF1aWNrIHNhbml0eSBjaGVjay4KKworICAgICAgICB3aXRoIHN3YXBfYXR0cihidWlsdGlucywgIl9faW1wb3J0X18iLCBsYW1iZGEgKng6IDUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28oKSwgNSkKKworICAgICAgICAjIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gd2Ugc2hhZG93IF9faW1wb3J0X18gaW4gZ2xvYmFscygpOyB0aGlzCisgICAgICAgICMgY3VycmVudGx5IGRvZXMgbm90IGltcGFjdCB0aGUgaW1wb3J0IHByb2Nlc3MsIGJ1dCBpZiB0aGlzIGNoYW5nZXMsCisgICAgICAgICMgb3RoZXIgY29kZSB3aWxsIG5lZWQgdG8gY2hhbmdlLCBzbyBrZWVwIHRoaXMgdGVzdCBhcyBhIHRyaXB3aXJlLgorICAgICAgICB3aXRoIHN3YXBfaXRlbShnbG9iYWxzKCksICJfX2ltcG9ydF9fIiwgbGFtYmRhICp4OiA1KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vKCksIG9zKQorCisKK2NsYXNzIFB5Y2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoZSB2YXJpb3VzIFBFUCAzMTQ3IHJlbGF0ZWQgYmVoYXZpb3JzLgorCisgICAgdGFnID0gaW1wLmdldF90YWcoKQorCisgICAgZGVmIF9jbGVhbihzZWxmKToKKyAgICAgICAgZm9yZ2V0KFRFU1RGTikKKyAgICAgICAgcm10cmVlKCdfX3B5Y2FjaGVfXycpCisgICAgICAgIHVubGluayhzZWxmLnNvdXJjZSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb3VyY2UgPSBURVNURk4gKyAnLnB5JworICAgICAgICBzZWxmLl9jbGVhbigpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgIHByaW50KCcjIFRoaXMgaXMgYSB0ZXN0IGZpbGUgd3JpdHRlbiBieSB0ZXN0X2ltcG9ydC5weScsIGZpbGU9ZnApCisgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGFzc2VydCBzeXMucGF0aFswXSA9PSBvcy5jdXJkaXIsICdVbmV4cGVjdGVkIHN5cy5wYXRoWzBdJworICAgICAgICBkZWwgc3lzLnBhdGhbMF0KKyAgICAgICAgc2VsZi5fY2xlYW4oKQorCisgICAgZGVmIHRlc3RfaW1wb3J0X3B5Y19wYXRoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKCdfX3B5Y2FjaGVfXycpKQorICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKCdfX3B5Y2FjaGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMob3MucGF0aC5qb2luKAorICAgICAgICAgICAgJ19fcHljYWNoZV9fJywgJ3t9Lnt9LnB5e30nLmZvcm1hdCgKKyAgICAgICAgICAgIFRFU1RGTiwgc2VsZi50YWcsIF9fZGVidWdfXyBhbmQgJ2MnIG9yICdvJykpKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBtZWFuaW5nZnVsIG9ubHkgb24gcG9zaXggc3lzdGVtcyIpCisgICAgZGVmIHRlc3RfdW53cml0YWJsZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICMgV2hlbiB0aGUgdW1hc2sgY2F1c2VzIHRoZSBuZXcgX19weWNhY2hlX18gZGlyZWN0b3J5IHRvIGJlCisgICAgICAgICMgdW53cml0YWJsZSwgdGhlIGltcG9ydCBzdGlsbCBzdWNjZWVkcyBidXQgbm8gLnB5YyBmaWxlIGlzIHdyaXR0ZW4uCisgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzIyMik6CisgICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKCdfX3B5Y2FjaGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICdfX3B5Y2FjaGVfXycsICd7fS57fS5weWMnLmZvcm1hdChURVNURk4sIHNlbGYudGFnKSkpKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19zb3VyY2Uoc2VsZik6CisgICAgICAgICMgV2l0aCBQRVAgMzE0NyBjYWNoZSBsYXlvdXQsIHJlbW92aW5nIHRoZSBzb3VyY2UgYnV0IGxlYXZpbmcgdGhlIHB5YworICAgICAgICAjIGZpbGUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgaW1wb3J0LgorICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhweWNfZmlsZSkpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLnNvdXJjZSkKKyAgICAgICAgZm9yZ2V0KFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIFRFU1RGTikKKworICAgIGRlZiB0ZXN0X21pc3Npbmdfc291cmNlX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBMaWtlIHRlc3RfbWlzc2luZ19zb3VyY2UoKSBleGNlcHQgdGhhdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwKKyAgICAgICAgIyB3aGVuIHRoZSBweWMgZmlsZSBsaXZlcyB3aGVyZSB0aGUgcHkgZmlsZSB3b3VsZCBoYXZlIGJlZW4gKGFuZCBuYW1lZAorICAgICAgICAjIHdpdGhvdXQgdGhlIHRhZyksIGl0IGlzIGltcG9ydGFibGUuICBUaGUgX19maWxlX18gb2YgdGhlIGltcG9ydGVkCisgICAgICAgICMgbW9kdWxlIGlzIHRoZSBweWMgbG9jYXRpb24uCisgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICAjIHB5Y19maWxlIGdldHMgcmVtb3ZlZCBpbiBfY2xlYW4oKSB2aWEgdGVhckRvd24oKS4KKyAgICAgICAgcHljX2ZpbGUgPSBtYWtlX2xlZ2FjeV9weWMoc2VsZi5zb3VyY2UpCisgICAgICAgIG9zLnJlbW92ZShzZWxmLnNvdXJjZSkKKyAgICAgICAgdW5sb2FkKFRFU1RGTikKKyAgICAgICAgbSA9IF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19maWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgb3MucGF0aC5yZWxwYXRoKHB5Y19maWxlKSkpCisKKyAgICBkZWYgdGVzdF9fX2NhY2hlZF9fKHNlbGYpOgorICAgICAgICAjIE1vZHVsZXMgbm93IGFsc28gaGF2ZSBhbiBfX2NhY2hlZF9fIHRoYXQgcG9pbnRzIHRvIHRoZSBweWMgZmlsZS4KKyAgICAgICAgbSA9IF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShURVNURk4gKyAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIHB5Y19maWxlKSkKKworICAgIGRlZiB0ZXN0X19fY2FjaGVkX19fbGVnYWN5X3B5YyhzZWxmKToKKyAgICAgICAgIyBMaWtlIHRlc3RfX19jYWNoZWRfXygpIGV4Y2VwdCB0aGF0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LAorICAgICAgICAjIHdoZW4gdGhlIHB5YyBmaWxlIGxpdmVzIHdoZXJlIHRoZSBweSBmaWxlIHdvdWxkIGhhdmUgYmVlbiAoYW5kIG5hbWVkCisgICAgICAgICMgd2l0aG91dCB0aGUgdGFnKSwgaXQgaXMgaW1wb3J0YWJsZS4gIFRoZSBfX2NhY2hlZF9fIG9mIHRoZSBpbXBvcnRlZAorICAgICAgICAjIG1vZHVsZSBpcyB0aGUgcHljIGxvY2F0aW9uLgorICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgIyBweWNfZmlsZSBnZXRzIHJlbW92ZWQgaW4gX2NsZWFuKCkgdmlhIHRlYXJEb3duKCkuCisgICAgICAgIHB5Y19maWxlID0gbWFrZV9sZWdhY3lfcHljKHNlbGYuc291cmNlKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5zb3VyY2UpCisgICAgICAgIHVubG9hZChURVNURk4pCisgICAgICAgIG0gPSBfX2ltcG9ydF9fKFRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgb3MucGF0aC5yZWxwYXRoKHB5Y19maWxlKSkpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX19fY2FjaGVkX18oc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X19fY2FjaGVkX18gYnV0IGZvciBwYWNrYWdlcy4KKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIHJtdHJlZSgncGVwMzE0NycpCisgICAgICAgIG9zLm1rZGlyKCdwZXAzMTQ3JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgICMgVG91Y2ggdGhlIF9faW5pdF9fLnB5CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnX19pbml0X18ucHknKSwgJ3cnKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSwgJ3cnKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdW5sb2FkKCdwZXAzMTQ3LmZvbycpCisgICAgICAgIHVubG9hZCgncGVwMzE0NycpCisgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCisgICAgICAgIGluaXRfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBpbml0X3B5YykpCisgICAgICAgIGZvb19weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tb2R1bGVzWydwZXAzMTQ3LmZvbyddLl9fY2FjaGVkX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgZm9vX3B5YykpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX19fY2FjaGVkX19fZnJvbV9weWMoc2VsZik6CisgICAgICAgICMgTGlrZSB0ZXN0X19fY2FjaGVkX18gYnV0IGVuc3VyaW5nIF9fY2FjaGVkX18gd2hlbiBpbXBvcnRlZCBmcm9tIGEKKyAgICAgICAgIyBQRVAgMzE0NyBweWMgZmlsZS4KKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIHJtdHJlZSgncGVwMzE0NycpCisgICAgICAgIG9zLm1rZGlyKCdwZXAzMTQ3JykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIHVubG9hZCgncGVwMzE0Ny5mb28nKQorICAgICAgICB1bmxvYWQoJ3BlcDMxNDcnKQorICAgICAgICAjIFRvdWNoIHRoZSBfX2luaXRfXy5weQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JyksICd3Jyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ3BlcDMxNDcnLCAnZm9vLnB5JyksICd3Jyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCisgICAgICAgIHVubG9hZCgncGVwMzE0Ny5mb28nKQorICAgICAgICB1bmxvYWQoJ3BlcDMxNDcnKQorICAgICAgICBtID0gX19pbXBvcnRfXygncGVwMzE0Ny5mb28nKQorICAgICAgICBpbml0X3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgIG9zLnBhdGguam9pbigncGVwMzE0NycsICdfX2luaXRfXy5weScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uX19jYWNoZWRfXywgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgaW5pdF9weWMpKQorICAgICAgICBmb29fcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG9zLnBhdGguam9pbigncGVwMzE0NycsICdmb28ucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMubW9kdWxlc1sncGVwMzE0Ny5mb28nXS5fX2NhY2hlZF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIGZvb19weWMpKQorCisKIGNsYXNzIFJlbGF0aXZlSW1wb3J0RnJvbUltcG9ydGxpYlRlc3RzKHRlc3RfcmVsYXRpdmVfaW1wb3J0cy5SZWxhdGl2ZUltcG9ydHMpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNDkyLDggKzY0OCw5IEBACiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgotICAgIHJ1bl91bml0dGVzdChJbXBvcnRUZXN0cywKKyAgICBydW5fdW5pdHRlc3QoSW1wb3J0VGVzdHMsIFB5Y2FjaGVUZXN0cywKICAgICAgICAgICAgICAgICAgUHljUmV3cml0aW5nVGVzdHMsIFBhdGhzVGVzdHMsIFJlbGF0aXZlSW1wb3J0VGVzdHMsCisgICAgICAgICAgICAgICAgIE92ZXJyaWRpbmdJbXBvcnRCdWlsdGluVGVzdHMsCiAgICAgICAgICAgICAgICAgIFJlbGF0aXZlSW1wb3J0RnJvbUltcG9ydGxpYlRlc3RzKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CmluZGV4IDFkYTMwYjcuLmVjNjczMGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0aG9va3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpAQCAtMjIxLDE1ICsyMjEsOSBAQAogCiAgICAgZGVmIHRlc3RCbG9ja2VyKHNlbGYpOgogICAgICAgICBtbmFtZSA9ICJleGNlcHRpb25zIiAgIyBhbiBhcmJpdHJhcnkgaGFybWxlc3MgYnVpbHRpbiBtb2R1bGUKLSAgICAgICAgaWYgbW5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW5hbWVdCisgICAgICAgIHN1cHBvcnQudW5sb2FkKG1uYW1lKQogICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChJbXBvcnRCbG9ja2VyKG1uYW1lKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX19pbXBvcnRfXyhtbmFtZSkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCInJXMnIHdhcyBub3Qgc3VwcG9zZWQgdG8gYmUgaW1wb3J0YWJsZSIgJSBtbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IsIF9faW1wb3J0X18sIG1uYW1lKQogCiAgICAgZGVmIHRlc3RJbXBXcmFwcGVyKHNlbGYpOgogICAgICAgICBpID0gSW1wV3JhcHBlcigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5CmluZGV4IGNkMTNlMzIuLjZlZDA1ODUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliLnB5CkBAIC0xLDkgKzEsNCBAQAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotaW1wb3J0IGltcG9ydGxpYi50ZXN0Ci0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChpbXBvcnRsaWIudGVzdC50ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdCcpKQorZnJvbSBpbXBvcnRsaWIudGVzdC5fX21haW5fXyBpbXBvcnQgdGVzdF9tYWluCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkgYi9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CmluZGV4IGFlOTA1YzIuLjdhOTRhZjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbmRleC5weQpAQCAtMiwxMyArMiw4IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBvcGVyYXRvcgogbWF4c2l6ZSA9IHN1cHBvcnQuTUFYX1B5X3NzaXplX3QKLW1pbnNpemUgPSAtbWF4c2l6ZS0xCiAKLWNsYXNzIG9sZHN0eWxlOgotICAgIGRlZiBfX2luZGV4X18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmluZAotCi1jbGFzcyBuZXdzdHlsZShvYmplY3QpOgorY2xhc3MgbmV3c3R5bGU6CiAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuaW5kCiAKQEAgLTE2LDEzICsxMSw5IEBACiAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYKIAotY2xhc3MgVHJhcExvbmcoaW50KToKLSAgICBkZWYgX19pbmRleF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZgotCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5vID0gb2xkc3R5bGUoKQorICAgICAgICBzZWxmLm8gPSBuZXdzdHlsZSgpCiAgICAgICAgIHNlbGYubiA9IG5ld3N0eWxlKCkKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgpAQCAtNDgsMTMgKzM5LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLTcgLl9faW5kZXhfXygpLCAtNykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm8uX19pbmRleF9fKCksIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uLl9faW5kZXhfXygpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUuX19pbmRleF9fKCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UuX19pbmRleF9fKCksIDApCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICByID0gbGlzdChyYW5nZSgxMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocltUcmFwSW50KDUpOlRyYXBJbnQoMTApXSwgcls1OjEwXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyW1RyYXBMb25nKDUpOlRyYXBMb25nKDEwKV0sIHJbNToxMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoVHJhcEludCgpKS5pbmRpY2VzKDApLCAoMCwwLDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKFRyYXBMb25nKDApKS5pbmRpY2VzKDApLCAoMCwwLDEpKQogCiAgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuby5pbmQgPSAnZHVtYicKQEAgLTY5LDkgKzYwLDkgQEAKICAgICAjIFRoaXMgdGVzdCBjYXNlIGlzbid0IHJ1biBkaXJlY3RseS4gSXQganVzdCBkZWZpbmVzIGNvbW1vbiB0ZXN0cwogICAgICMgdG8gdGhlIGRpZmZlcmVudCBzZXF1ZW5jZSB0eXBlcyBiZWxvdwogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5vID0gb2xkc3R5bGUoKQorICAgICAgICBzZWxmLm8gPSBuZXdzdHlsZSgpCiAgICAgICAgIHNlbGYubiA9IG5ld3N0eWxlKCkKLSAgICAgICAgc2VsZi5vMiA9IG9sZHN0eWxlKCkKKyAgICAgICAgc2VsZi5vMiA9IG5ld3N0eWxlKCkKICAgICAgICAgc2VsZi5uMiA9IG5ld3N0eWxlKCkKIAogICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgpAQCAtODgsNiArNzksMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm86c2VsZi5vMl0sIHNlbGYuc2VxWzE6M10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uOnNlbGYubjJdLCBzZWxmLnNlcVsyOjRdKQogCisgICAgZGVmIHRlc3Rfc2xpY2VfYnVnNzUzMihzZWxmKToKKyAgICAgICAgc2VxbGVuID0gbGVuKHNlbGYuc2VxKQorICAgICAgICBzZWxmLm8uaW5kID0gaW50KHNlcWxlbiAqIDEuNSkKKyAgICAgICAgc2VsZi5uLmluZCA9IHNlcWxlbiArIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVtzZWxmLm86XSwgc2VsZi5zZXFbMDowXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5vXSwgc2VsZi5zZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uOl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbOnNlbGYubl0sIHNlbGYuc2VxKQorICAgICAgICBzZWxmLm8yLmluZCA9IC1zZXFsZW4gLSAyCisgICAgICAgIHNlbGYubjIuaW5kID0gLWludChzZXFsZW4gKiAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5vMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5vMl0sIHNlbGYuc2VxWzA6MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbc2VsZi5uMjpdLCBzZWxmLnNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcVs6c2VsZi5uMl0sIHNlbGYuc2VxWzA6MF0pCisKICAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CiAgICAgICAgIHNlbGYuby5pbmQgPSAzCiAgICAgICAgIHNlbGYubi5pbmQgPSAyCkBAIC0xMDgsNyArMTE0LDYgQEAKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbVHJhcEludCgpXSwgc2VsZi5zZXFbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXFbVHJhcExvbmcoKV0sIHNlbGYuc2VxWzBdKQogCiAgICAgZGVmIHRlc3RfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuby5pbmQgPSAnZHVtYicKQEAgLTE1MSwxOCArMTU2LDU2IEBACiAKICAgICAgICAgbHN0ID0gWzUsIDYsIDcsIDgsIDksIDExXQogICAgICAgICBsMiA9IGxzdC5fX2ltdWxfXyhzZWxmLm4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsMiBpcyBsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobDIsIGxzdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFs1LCA2LCA3LCA4LCA5LCAxMV0gKiAzKQogCiAKK2NsYXNzIE5ld1NlcToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZSk6CisgICAgICAgIHNlbGYuX2xpc3QgPSBsaXN0KGl0ZXJhYmxlKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcihzZWxmLl9saXN0KQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9saXN0ID09IG90aGVyCisKKyAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9saXN0KQorCisgICAgZGVmIF9fbXVsX18oc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzZWxmLl9saXN0Km4pCisgICAgX19ybXVsX18gPSBfX211bF9fCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGlzdFtpbmRleF0KKworCiBjbGFzcyBUdXBsZVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKICAgICBzZXEgPSAoMCwxMCwyMCwzMCw0MCw1MCkKIAorY2xhc3MgQnl0ZUFycmF5VGVzdENhc2UoU2VxVGVzdENhc2UpOgorICAgIHNlcSA9IGJ5dGVhcnJheShiInRoaXMgaXMgYSB0ZXN0IikKKworY2xhc3MgQnl0ZXNUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gYiJ0aGlzIGlzIGEgdGVzdCIKKwogY2xhc3MgU3RyaW5nVGVzdENhc2UoU2VxVGVzdENhc2UpOgogICAgIHNlcSA9ICJ0aGlzIGlzIGEgdGVzdCIKIAotY2xhc3MgVW5pY29kZVRlc3RDYXNlKFNlcVRlc3RDYXNlKToKLSAgICBzZXEgPSAidGhpcyBpcyBhIHRlc3QiCitjbGFzcyBOZXdTZXFUZXN0Q2FzZShTZXFUZXN0Q2FzZSk6CisgICAgc2VxID0gTmV3U2VxKCgwLDEwLDIwLDMwLDQwLDUwKSkKKworCisKK2NsYXNzIFJhbmdlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmFuZ2Uoc2VsZik6CisgICAgICAgIG4gPSBuZXdzdHlsZSgpCisgICAgICAgIG4uaW5kID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEsIDIwKVtuXSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLCAyMCkuX19nZXRpdGVtX18obiksIDYpCiAKIAogY2xhc3MgT3ZlcmZsb3dUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNzYsOSArMjE5LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5lZy5fX2luZGV4X18oKSwgc2VsZi5uZWcpCiAKICAgICBkZWYgdGVzdF9nZXRpdGVtKHNlbGYpOgotICAgICAgICBjbGFzcyBHZXRJdGVtKG9iamVjdCk6CisgICAgICAgIGNsYXNzIEdldEl0ZW06CiAgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3lzLm1heHNpemUKKyAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJfX2xlbl9fIHNob3VsZCBub3QgYmUgaW52b2tlZCIKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgogICAgICAgICAgICAgICAgIHJldHVybiBrZXkKICAgICAgICAgeCA9IEdldEl0ZW0oKQpAQCAtMTg2LDYgKzIyOSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtzZWxmLm5lZ10sIHNlbGYubmVnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3NdLmluZGljZXMobWF4c2l6ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIG1heHNpemUsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbc2VsZi5uZWc6c2VsZi5wb3M6MV0uaW5kaWNlcyhtYXhzaXplKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbWF4c2l6ZSwgMSkpCiAKICAgICBkZWYgdGVzdF9zZXF1ZW5jZV9yZXBlYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxhbWJkYTogImEiICogc2VsZi5wb3MpCkBAIC0xOTcsOCArMjQyLDExIEBACiAgICAgICAgIEJhc2VUZXN0Q2FzZSwKICAgICAgICAgTGlzdFRlc3RDYXNlLAogICAgICAgICBUdXBsZVRlc3RDYXNlLAorICAgICAgICBCeXRlc1Rlc3RDYXNlLAorICAgICAgICBCeXRlQXJyYXlUZXN0Q2FzZSwKICAgICAgICAgU3RyaW5nVGVzdENhc2UsCi0gICAgICAgIFVuaWNvZGVUZXN0Q2FzZSwKKyAgICAgICAgTmV3U2VxVGVzdENhc2UsCisgICAgICAgIFJhbmdlVGVzdENhc2UsCiAgICAgICAgIE92ZXJmbG93VGVzdENhc2UsCiAgICAgKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkgYi9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKaW5kZXggMzRlMGE5YS4uZjVkZmYxZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCByZQogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTUsOSArNiwxMSBAQAogaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAogZnJvbSBvcy5wYXRoIGltcG9ydCBub3JtY2FzZQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgRGlyc09uU3lzUGF0aAogCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgpAQCAtMTE4LDggKzEyMSw4IEBACiAgICAgICAgIHggPSBDKCkKICAgICAgICAgeC5hID0gNDIKICAgICAgICAgbWVtYmVycyA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluIG1lbWJlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYicgbm90IGluIG1lbWJlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCBtZW1iZXJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdiJywgbWVtYmVycykKIAogICAgIGRlZiB0ZXN0X2lzYWJzdHJhY3Qoc2VsZik6CiAgICAgICAgIGZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZApAQCAtMTkzLDEyICsxOTYsMTIgQEAKIAogY2xhc3MgR2V0U291cmNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBTdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUuCi0gICAgZm9kZGVyRmlsZSA9IE5vbmUKKyAgICBmb2RkZXJNb2R1bGUgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQogCi0gICAgICAgIHdpdGggb3BlbihpbnNwZWN0LmdldHNvdXJjZWZpbGUoc2VsZi5mb2RkZXJGaWxlKSkgYXMgZnA6CisgICAgICAgIHdpdGggb3BlbihpbnNwZWN0LmdldHNvdXJjZWZpbGUoc2VsZi5mb2RkZXJNb2R1bGUpKSBhcyBmcDoKICAgICAgICAgICAgIHNlbGYuc291cmNlID0gZnAucmVhZCgpCiAKICAgICBkZWYgc291cmNlcmFuZ2Uoc2VsZiwgdG9wLCBib3R0b20pOgpAQCAtMjEwLDcgKzIxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2VyYW5nZSh0b3AsIGJvdHRvbSkpCiAKIGNsYXNzIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZShHZXRTb3VyY2VCYXNlKToKLSAgICBmb2RkZXJGaWxlID0gbW9kCisgICAgZm9kZGVyTW9kdWxlID0gbW9kCiAKICAgICBkZWYgdGVzdF9nZXRjbGFzc2VzKHNlbGYpOgogICAgICAgICBjbGFzc2VzID0gaW5zcGVjdC5nZXRtZW1iZXJzKG1vZCwgaW5zcGVjdC5pc2NsYXNzKQpAQCAtMjM3LDYgKzI0MCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb25zLCBbKCdlZ2dzJywgbW9kLmVnZ3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnc3BhbScsIG1vZC5zcGFtKV0pCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9nZXRkb2Moc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRkb2MobW9kKSwgJ0EgbW9kdWxlIGRvY3N0cmluZy4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZG9jKG1vZC5TdHVwaWRHaXQpLApAQCAtMjk0LDcgKzI5OSw3IEBACiAgICAgICAgIGluc3BlY3QuZ2V0bW9kdWxlKGNvbXBpbGUoJ2E9MTAnLCcnLCdzaW5nbGUnKSkKIAogY2xhc3MgVGVzdERlY29yYXRvcnMoR2V0U291cmNlQmFzZSk6Ci0gICAgZm9kZGVyRmlsZSA9IG1vZDIKKyAgICBmb2RkZXJNb2R1bGUgPSBtb2QyCiAKICAgICBkZWYgdGVzdF93cmFwcGVkX2RlY29yYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLndyYXBwZWQsIDE0LCAxNykKQEAgLTMwMyw3ICszMDgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIuZ29uZSwgOSwgMTApCiAKIGNsYXNzIFRlc3RPbmVsaW5lcnMoR2V0U291cmNlQmFzZSk6Ci0gICAgZm9kZGVyRmlsZSA9IG1vZDIKKyAgICBmb2RkZXJNb2R1bGUgPSBtb2QyCiAgICAgZGVmIHRlc3Rfb25lbGluZV9sYW1iZGEoc2VsZik6CiAgICAgICAgICMgVGVzdCBpbnNwZWN0LmdldHNvdXJjZSB3aXRoIGEgb25lLWxpbmUgbGFtYmRhIGZ1bmN0aW9uLgogICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIub2xsLCAyNSwgMjUpCkBAIC0zNDUsNyArMzUwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLmFub255bW91cywgNTUsIDU1KQogCiBjbGFzcyBUZXN0QnVnZ3lDYXNlcyhHZXRTb3VyY2VCYXNlKToKLSAgICBmb2RkZXJGaWxlID0gbW9kMgorICAgIGZvZGRlck1vZHVsZSA9IG1vZDIKIAogICAgIGRlZiB0ZXN0X3dpdGhfY29tbWVudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChtb2QyLndpdGhfY29tbWVudCwgNTgsIDU5KQpAQCAtMzg1LDYgKzM5MCwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZmluZHNvdXJjZShjbyksIChsaW5lcywwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldHNvdXJjZShjbyksIGxpbmVzWzBdKQogCitjbGFzcyBUZXN0Tm9FT0woR2V0U291cmNlQmFzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYudGVtcGRpciA9IFRFU1RGTiArICdfZGlyJworICAgICAgICBvcy5ta2RpcihzZWxmLnRlbXBkaXIpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi50ZW1wZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnNwZWN0X2ZvZGRlcjMlc3B5JyAlIG9zLmV4dHNlcCksICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoImNsYXNzIFg6XG4gICAgcGFzcyAjIE5vIEVPTCIpCisgICAgICAgIHdpdGggRGlyc09uU3lzUGF0aChzZWxmLnRlbXBkaXIpOgorICAgICAgICAgICAgaW1wb3J0IGluc3BlY3RfZm9kZGVyMyBhcyBtb2QzCisgICAgICAgIHNlbGYuZm9kZGVyTW9kdWxlID0gbW9kMworICAgICAgICBHZXRTb3VyY2VCYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRlbXBkaXIpCisKKyAgICBkZWYgdGVzdF9jbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRTb3VyY2VFcXVhbChzZWxmLmZvZGRlck1vZHVsZS5YLCAxLCAyKQorCiAjIEhlbHBlciBmb3IgdGVzdGluZyBjbGFzc2lmeV9jbGFzc19hdHRycy4KIGRlZiBhdHRyc193b19vYmpzKGNscyk6CiAgICAgcmV0dXJuIFt0WzozXSBmb3IgdCBpbiBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKGNscyldCkBAIC00ODYsMjUgKzUwOSwyNSBAQAogICAgICAgICAgICAgZGF0YWJsb2IgPSAnMScKIAogICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoQSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdjJywgJ2NsYXNzIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnbScsICdtZXRob2QnLCBBKSBpbiBhdHRycywKLSAgICAgICAgICAgICdtaXNzaW5nIHBsYWluIG1ldGhvZDogJXInICUgYXR0cnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBBKSwgYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICAgJ21pc3NpbmcgcGxhaW4gbWV0aG9kOiAlcicgJSBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEEpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQogCiAgICAgICAgIGNsYXNzIEIoQSk6CiAKICAgICAgICAgICAgIGRlZiBtKHNlbGYpOiBwYXNzCiAKICAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnYycsICdjbGFzcyBtZXRob2QnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgY2xhc3MgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ20nLCAnbWV0aG9kJywgQikgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBCKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKIAogCiAgICAgICAgIGNsYXNzIEMoQSk6CkBAIC01MTMsMjkgKzUzNiw1MTggQEAKICAgICAgICAgICAgIGRlZiBjKHNlbGYpOiBwYXNzCiAKICAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ3MnLCAnc3RhdGljIG1ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnYycsICdtZXRob2QnLCBDKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgncCcsICdwcm9wZXJ0eScsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ20nLCAnbWV0aG9kJywgQykgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ20xJywgJ21ldGhvZCcsIEEpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdkYXRhYmxvYicsICdkYXRhJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnbWV0aG9kJywgQyksIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnbScsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtMScsICdtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdkYXRhYmxvYicsICdkYXRhJywgQSksIGF0dHJzLCAnbWlzc2luZyBkYXRhJykKIAogICAgICAgICBjbGFzcyBEKEIsIEMpOgogCiAgICAgICAgICAgICBkZWYgbTEoc2VsZik6IHBhc3MKIAogICAgICAgICBhdHRycyA9IGF0dHJzX3dvX29ianMoRCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdjJywgJ21ldGhvZCcsIEMpIGluIGF0dHJzLCAnbWlzc2luZyBwbGFpbiBtZXRob2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoKCdwJywgJ3Byb3BlcnR5JywgQSkgaW4gYXR0cnMsICdtaXNzaW5nIHByb3BlcnR5JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnbScsICdtZXRob2QnLCBCKSBpbiBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgnbTEnLCAnbWV0aG9kJywgRCkgaW4gYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSBpbiBhdHRycywgJ21pc3NpbmcgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdzJywgJ3N0YXRpYyBtZXRob2QnLCBBKSwgYXR0cnMsICdtaXNzaW5nIHN0YXRpYyBtZXRob2QnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnYycsICdtZXRob2QnLCBDKSwgYXR0cnMsICdtaXNzaW5nIHBsYWluIG1ldGhvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdwJywgJ3Byb3BlcnR5JywgQSksIGF0dHJzLCAnbWlzc2luZyBwcm9wZXJ0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdtJywgJ21ldGhvZCcsIEIpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ20xJywgJ21ldGhvZCcsIEQpLCBhdHRycywgJ21pc3NpbmcgcGxhaW4gbWV0aG9kJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2RhdGFibG9iJywgJ2RhdGEnLCBBKSwgYXR0cnMsICdtaXNzaW5nIGRhdGEnKQorCitjbGFzcyBUZXN0R2V0Y2FsbGFyZ3NGdW5jdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydEVxdWFsQ2FsbEFyZ3Moc2VsZiwgZnVuYywgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHIxID0gZXZhbCgnZnVuYyglcyknICUgY2FsbF9wYXJhbXNfc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICByMiA9IGV2YWwoJ2luc3BlY3QuZ2V0Y2FsbGFyZ3MoZnVuYywgJXMpJyAlIGNhbGxfcGFyYW1zX3N0cmluZywgTm9uZSwKKyAgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocjEsIHIyKQorCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1fc3RyaW5nLCBsb2NzPU5vbmUpOgorICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBmdW5jPWZ1bmMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV2YWwoJ2Z1bmMoJXMpJyAlIGNhbGxfcGFyYW1fc3RyaW5nLCBOb25lLCBsb2NzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBleDEgPSBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4Y2VwdGlvbiBub3QgcmFpc2VkJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXZhbCgnaW5zcGVjdC5nZXRjYWxsYXJncyhmdW5jLCAlcyknICUgY2FsbF9wYXJhbV9zdHJpbmcsIE5vbmUsCisgICAgICAgICAgICAgICAgIGxvY3MpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIGV4MiA9IGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRXhjZXB0aW9uIG5vdCByYWlzZWQnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXgxKSwgdHlwZShleDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleDEpLCBzdHIoZXgyKSkKKyAgICAgICAgZGVsIGV4MSwgZXgyCisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBpdHMgbG9jYWxzKCkiIiIKKyAgICAgICAgY29kZSA9ICJsYW1iZGEgJXM6IGxvY2FscygpIgorICAgICAgICByZXR1cm4gZXZhbChjb2RlICUgc2lnbmF0dXJlKQorCisgICAgZGVmIHRlc3RfcGxhaW4oc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgYT0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCBiPTMnKQorICAgICAgICAjIGV4cGFuZCAqaXRlcmFibGUgLyAqKm1hcHBpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKDIsKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlsyXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLCAzKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKlsyLCAzXScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKip7ImEiOjJ9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdiPTMsICoqeyJhIjoyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgKip7ImIiOjN9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqKnsiYiI6MywgImEiOjJ9JykKKyAgICAgICAgIyBleHBhbmQgVXNlckxpc3QgLyBVc2VyRGljdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJypjb2xsZWN0aW9ucy5Vc2VyTGlzdChbMl0pJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcqY29sbGVjdGlvbnMuVXNlckxpc3QoWzIsIDNdKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTIpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAqKmNvbGxlY3Rpb25zLlVzZXJEaWN0KGI9MyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTMpJykKKworICAgIGRlZiB0ZXN0X3ZhcmFyZ3Moc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xLCAqYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKigyLDMsNCknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsICpbMyw0XScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgKmNvbGxlY3Rpb25zLlVzZXJMaXN0KFs0XSknKQorCisgICAgZGVmIHRlc3RfdmFya3coc2VsZik6CisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xLCAqKmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2E9MicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYj0zLCBjPTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MywgYT0yLCBjPTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9NCwgKip7ImEiOjIsICJiIjozfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYz00LCAqKnsiYiI6M30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKip7ImEiOjMsICJjIjo0fScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTIsIGI9MywgYz00KScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgYz00LCAqKmNvbGxlY3Rpb25zLlVzZXJEaWN0KGI9MyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2I9MiwgKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTMsIGM9NCknKQorCisgICAgZGVmIHRlc3RfdmFya3dfb25seShzZWxmKToKKyAgICAgICAgIyBpc3N1ZTExMjU2OgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJyoqYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2E9MSwgYj0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTMsICoqeyJhIjogMSwgImIiOiAyfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTEsIGI9MiknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9MywgKipjb2xsZWN0aW9ucy5Vc2VyRGljdChhPTEsIGI9MiknKQorCisgICAgZGVmIHRlc3Rfa2V5d29yZF9vbmx5KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2E9MywgKiwgYywgZD0yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdjPTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9MywgYT0zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICdhPTIsIGM9NCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnNCwgYz00JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJ2E9MycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJ2Q9NCcpCisKKyAgICAgICAgZiA9IHNlbGYubWFrZUNhbGxhYmxlKCcqLCBjLCBkPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2M9MycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnYz0zLCBkPTQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJ2Q9NCwgYz0zJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX2ZlYXR1cmVzKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5tYWtlQ2FsbGFibGUoJ2EsIGI9MiwgKmYsICoqZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgMywgeD04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCB4PTgsICpbKDQsWzUsNl0pLCA3XScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAnMiwgeD04LCAqWzMsICg0LFs1LDZdKSwgN10sIHk9OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAneD04LCAqWzIsIDMsICg0LFs1LDZdKV0sIHk9OScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxDYWxsQXJncyhmLCAneD04LCAqY29sbGVjdGlvbnMuVXNlckxpc3QoJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1syLCAzLCAoNCxbNSw2XSldKSwgKip7InkiOjksICJ6IjoxMH0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIHg9OCwgKmNvbGxlY3Rpb25zLlVzZXJMaXN0KFszLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKDQsWzUsNl0pXSksICoqY29sbGVjdGlvbnMuVXNlckRpY3QoJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3k9OSwgej0xMCknKQorCisgICAgICAgIGYgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0yLCAqZiwgeCwgeT05OSwgKipnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCAzLCB4PTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsQ2FsbEFyZ3MoZiwgJzIsIDMsIHg9OCwgKlsoNCxbNSw2XSksIDddJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCB4PTgsICpbMywgKDQsWzUsNl0pLCA3XSwgeT05LCB6PTEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICd4PTgsICpbMiwgMywgKDQsWzUsNl0pXSwgeT05LCB6PTEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICd4PTgsICpjb2xsZWN0aW9ucy5Vc2VyTGlzdCgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWzIsIDMsICg0LFs1LDZdKV0pLCBxPTAsICoqeyJ5Ijo5LCAieiI6MTB9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbENhbGxBcmdzKGYsICcyLCB4PTgsICpjb2xsZWN0aW9ucy5Vc2VyTGlzdChbMywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyg0LFs1LDZdKV0pLCBxPTAsICoqY29sbGVjdGlvbnMuVXNlckRpY3QoJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3k9OSwgej0xMCknKQorCisgICAgZGVmIHRlc3RfZXJyb3JzKHNlbGYpOgorICAgICAgICBmMCA9IHNlbGYubWFrZUNhbGxhYmxlKCcnKQorICAgICAgICBmMSA9IHNlbGYubWFrZUNhbGxhYmxlKCdhLCBiJykKKyAgICAgICAgZjIgPSBzZWxmLm1ha2VDYWxsYWJsZSgnYSwgYj0xJykKKyAgICAgICAgIyBmMCB0YWtlcyBubyBhcmd1bWVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYwLCAneD0xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMCwgJzEseD0xJykKKyAgICAgICAgIyBmMSB0YWtlcyBleGFjdGx5IDIgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjEsICdhPTInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYxLCAnYj0zJykKKyAgICAgICAgIyBmMiB0YWtlcyBhdCBsZWFzdCAxIGFyZ3VtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjIsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYyLCAnYj0zJykKKyAgICAgICAgZm9yIGYgaW4gZjEsIGYyOgorICAgICAgICAgICAgIyBmMS9mMiB0YWtlcyBleGFjdGx5L2F0IG1vc3QgMiBhcmd1bWVudHMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgMiwgMywgYT0xJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIDMsIDQsIGM9NScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCA0LCBhPTEsIGM9NScpCisgICAgICAgICAgICAjIGYgZ290IGFuIHVuZXhwZWN0ZWQga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnYz0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzIsIGM9MycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcyLCAzLCBjPTQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMiwgYz00LCBiPTMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnKip7dSJcdTAzYzBcdTAzYjkiOiA0fScpCisgICAgICAgICAgICAjIGYgZ290IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCBhcmd1bWVudAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmLCAnMSwgYT0yJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZiwgJzEsICoqeyJhIjoyfScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCAyLCBiPTMnKQorICAgICAgICAgICAgIyBYWFg6IFB5dGhvbiBpbmNvbnNpc3RlbmN5CisgICAgICAgICAgICAjIC0gZm9yIGZ1bmN0aW9ucyBhbmQgYm91bmQgbWV0aG9kczogdW5leHBlY3RlZCBrZXl3b3JkICdjJworICAgICAgICAgICAgIyAtIGZvciB1bmJvdW5kIG1ldGhvZHM6IG11bHRpcGxlIHZhbHVlcyBmb3Iga2V5d29yZCAnYScKKyAgICAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYsICcxLCBjPTMsIGE9MicpCisgICAgICAgICMgaXNzdWUxMTI1NjoKKyAgICAgICAgZjMgPSBzZWxmLm1ha2VDYWxsYWJsZSgnKipjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMywgJzEsIDInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMiwgYT0xLCBiPTInKQorICAgICAgICBmNCA9IHNlbGYubWFrZUNhbGxhYmxlKCcqLCBhLCBiPTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsRXhjZXB0aW9uKGYzLCAnMSwgMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjMsICcxLCAyLCBhPTEsIGI9MicpCisKK2NsYXNzIFRlc3RHZXRjYWxsYXJnc01ldGhvZHMoVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuY2xzID0gRm9vCisgICAgICAgIHNlbGYuaW5zdCA9IEZvbygpCisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIGFzc2VydCAnc2VsZicgbm90IGluIHNpZ25hdHVyZQorICAgICAgICBtayA9IHN1cGVyKFRlc3RHZXRjYWxsYXJnc01ldGhvZHMsIHNlbGYpLm1ha2VDYWxsYWJsZQorICAgICAgICBzZWxmLmNscy5tZXRob2QgPSBtaygnc2VsZiwgJyArIHNpZ25hdHVyZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuaW5zdC5tZXRob2QKKworY2xhc3MgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMoVGVzdEdldGNhbGxhcmdzTWV0aG9kcyk6CisKKyAgICBkZWYgbWFrZUNhbGxhYmxlKHNlbGYsIHNpZ25hdHVyZSk6CisgICAgICAgIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5tYWtlQ2FsbGFibGUoc2lnbmF0dXJlKQorICAgICAgICByZXR1cm4gc2VsZi5jbHMubWV0aG9kCisKKyAgICBkZWYgYXNzZXJ0RXF1YWxDYWxsQXJncyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIHJldHVybiBzdXBlcihUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgc2VsZikuYXNzZXJ0RXF1YWxDYWxsQXJncygKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIGFzc2VydEVxdWFsRXhjZXB0aW9uKHNlbGYsIGZ1bmMsIGNhbGxfcGFyYW1zX3N0cmluZywgbG9jcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKFRlc3RHZXRjYWxsYXJnc1VuYm91bmRNZXRob2RzLCBzZWxmKS5hc3NlcnRFcXVhbEV4Y2VwdGlvbigKKyAgICAgICAgICAgICpzZWxmLl9nZXRBc3NlcnRFcXVhbFBhcmFtcyhmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3MpKQorCisgICAgZGVmIF9nZXRBc3NlcnRFcXVhbFBhcmFtcyhzZWxmLCBmdW5jLCBjYWxsX3BhcmFtc19zdHJpbmcsIGxvY3M9Tm9uZSk6CisgICAgICAgIGFzc2VydCAnaW5zdCcgbm90IGluIGNhbGxfcGFyYW1zX3N0cmluZworICAgICAgICBsb2NzID0gZGljdChsb2NzIG9yIHt9LCBpbnN0PXNlbGYuaW5zdCkKKyAgICAgICAgcmV0dXJuIChmdW5jLCAnaW5zdCwnICsgY2FsbF9wYXJhbXNfc3RyaW5nLCBsb2NzKQorCisKK2NsYXNzIFRlc3RHZXRhdHRyU3RhdGljKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgorICAgICAgICAgICAgeCA9IG9iamVjdCgpCisKKyAgICAgICAgdGhpbmcgPSBUaGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyh0aGluZywgJ3gnKSwgVGhpbmcueCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKHRoaW5nLCAneCcsIE5vbmUpLCBUaGluZy54KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWModGhpbmcsICd5JykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWModGhpbmcsICd5JywgMyksIDMpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICB4ID0gb2JqZWN0KCkKKyAgICAgICAgY2xhc3MgT3RoZXJUaGluZyhUaGluZyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc29tZXRoaW5nID0gT3RoZXJUaGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhzb21ldGhpbmcsICd4JyksIFRoaW5nLngpCisKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9hdHRyKHNlbGYpOgorICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QpOgorICAgICAgICAgICAgeCA9IDIKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSB4CisgICAgICAgIHRoaW5nID0gVGhpbmcoMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKHRoaW5nLCAneCcpLCAzKQorICAgICAgICBkZWwgdGhpbmcueAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWModGhpbmcsICd4JyksIDIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIHgoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkknbSBwcmV0ZW5kaW5nIG5vdCB0byBleGlzdCIpCisgICAgICAgIHRoaW5nID0gVGhpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWModGhpbmcsICd4JyksIFRoaW5nLngpCisKKyAgICBkZWYgdGVzdF9kZXNjcmlwdG9yX3JhaXNlc19BdHRyaWJ1dGVFcnJvcihzZWxmKToKKyAgICAgICAgY2xhc3MgZGVzY3JpcHRvcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0X18oKl8pOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJJJ20gcHJldGVuZGluZyBub3QgdG8gZXhpc3QiKQorICAgICAgICBkZXNjID0gZGVzY3JpcHRvcigpCisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICB4ID0gZGVzYworICAgICAgICB0aGluZyA9IFRoaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKHRoaW5nLCAneCcpLCBkZXNjKQorCisgICAgZGVmIHRlc3RfY2xhc3NBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICB4ID0gb2JqZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLngpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfY2xhc3NhdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICB4ID0gb2JqZWN0KCkKKyAgICAgICAgY2xhc3MgT3RoZXJUaGluZyhUaGluZyk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKE90aGVyVGhpbmcsICd4JyksIFRoaW5nLngpCisKKyAgICBkZWYgdGVzdF9zbG90cyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKKyAgICAgICAgICAgIHkgPSAnYmFyJworICAgICAgICAgICAgX19zbG90c19fID0gWyd4J10KKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnggPSAnZm9vJworICAgICAgICB0aGluZyA9IFRoaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKHRoaW5nLCAneCcpLCBUaGluZy54KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWModGhpbmcsICd5JyksICdiYXInKQorCisgICAgICAgIGRlbCB0aGluZy54CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyh0aGluZywgJ3gnKSwgVGhpbmcueCkKKworICAgIGRlZiB0ZXN0X21ldGFjbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgbWV0YSh0eXBlKToKKyAgICAgICAgICAgIGF0dHIgPSAnZm9vJworICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QsIG1ldGFjbGFzcz1tZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAnYXR0cicpLCAnZm9vJykKKworICAgICAgICBjbGFzcyBzdWIobWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE90aGVyVGhpbmcob2JqZWN0LCBtZXRhY2xhc3M9c3ViKToKKyAgICAgICAgICAgIHggPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhPdGhlclRoaW5nLCAnYXR0cicpLCAnZm9vJykKKworICAgICAgICBjbGFzcyBPdGhlck90aGVyVGhpbmcoT3RoZXJUaGluZyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgdGhpcyB0ZXN0IGlzIG9kZCwgYnV0IGl0IHdhcyBhZGRlZCBhcyBpdCBleHBvc2VkIGEgYnVnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhPdGhlck90aGVyVGhpbmcsICd4JyksIDMpCisKKyAgICBkZWYgdGVzdF9ub19kaWN0X25vX3Nsb3RzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoMSwgJ2ZvbycsIE5vbmUpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoJ2ZvbycsICdsb3dlcicpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9fZGljdF9ub19zbG90c19pbnN0YW5jZV9tZW1iZXIoc2VsZik6CisgICAgICAgICMgcmV0dXJucyBkZXNjcmlwdG9yCisgICAgICAgIHdpdGggb3BlbihfX2ZpbGVfXykgYXMgaGFuZGxlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKGhhbmRsZSwgJ25hbWUnKSwgdHlwZShoYW5kbGUpLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbmhlcml0ZWRfc2xvdHMoc2VsZik6CisgICAgICAgICMgcmV0dXJucyBkZXNjcmlwdG9yCisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3gnXQorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYueCA9ICdmb28nCisKKyAgICAgICAgY2xhc3MgT3RoZXJUaGluZyhUaGluZyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgaXQgd291bGQgYmUgbmljZSBpZiB0aGlzIHdvcmtlZC4uLgorICAgICAgICAjIHdlIGdldCB0aGUgZGVzY3JpcHRvciBpbnN0ZWFkIG9mIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKE90aGVyVGhpbmcoKSwgJ3gnKSwgVGhpbmcueCkKKworICAgIGRlZiB0ZXN0X2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGNsYXNzIGRlc2NyaXB0b3Iob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDMKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBkID0gZGVzY3JpcHRvcigpCisKKyAgICAgICAgZm9vID0gRm9vKCkKKworICAgICAgICAjIGZvciBhIG5vbiBkYXRhIGRlc2NyaXB0b3Igd2UgcmV0dXJuIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUKKyAgICAgICAgZm9vLl9fZGljdF9fWydkJ10gPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhmb28sICdkJyksIDEpCisKKyAgICAgICAgIyBpZiB0aGUgZGVzY3JpcHRvciBpcyBhIGRhdGEtZGVzY2lwdG9yIHdlIHNob3VsZCByZXR1cm4gdGhlCisgICAgICAgICMgZGVzY3JpcHRvcgorICAgICAgICBkZXNjcmlwdG9yLl9fc2V0X18gPSBsYW1iZGEgcywgaSwgdjogTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoZm9vLCAnZCcpLCBGb28uX19kaWN0X19bJ2QnXSkKKworCisgICAgZGVmIHRlc3RfbWV0YWNsYXNzX3dpdGhfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgY2xhc3MgZGVzY3JpcHRvcihvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICBjbGFzcyBtZXRhKHR5cGUpOgorICAgICAgICAgICAgZCA9IGRlc2NyaXB0b3IoKQorICAgICAgICBjbGFzcyBUaGluZyhvYmplY3QsIG1ldGFjbGFzcz1tZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKFRoaW5nLCAnZCcpLCBtZXRhLl9fZGljdF9fWydkJ10pCisKKworICAgIGRlZiB0ZXN0X2NsYXNzX2FzX3Byb3BlcnR5KHNlbGYpOgorICAgICAgICBjbGFzcyBCYXNlKG9iamVjdCk6CisgICAgICAgICAgICBmb28gPSAzCisKKyAgICAgICAgY2xhc3MgU29tZXRoaW5nKEJhc2UpOgorICAgICAgICAgICAgZXhlY3V0ZWQgPSBGYWxzZQorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19jbGFzc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXhlY3V0ZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdAorCisgICAgICAgIGluc3RhbmNlID0gU29tZXRoaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKGluc3RhbmNlLCAnZm9vJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdGFuY2UuZXhlY3V0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhTb21ldGhpbmcsICdmb28nKSwgMykKKworICAgIGRlZiB0ZXN0X21yb19hc19wcm9wZXJ0eShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbXJvX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIChvYmplY3QsKQorCisgICAgICAgIGNsYXNzIEJhc2Uob2JqZWN0KToKKyAgICAgICAgICAgIGZvbyA9IDMKKworICAgICAgICBjbGFzcyBTb21ldGhpbmcoQmFzZSwgbWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhTb21ldGhpbmcoKSwgJ2ZvbycpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoU29tZXRoaW5nLCAnZm9vJyksIDMpCisKKyAgICBkZWYgdGVzdF9kaWN0X2FzX3Byb3BlcnR5KHNlbGYpOgorICAgICAgICB0ZXN0ID0gc2VsZgorICAgICAgICB0ZXN0LmNhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgY2xhc3MgRm9vKGRpY3QpOgorICAgICAgICAgICAgYSA9IDMKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fZGljdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHRlc3QuY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgIGZvbyA9IEZvbygpCisgICAgICAgIGZvby5hID0gNAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoZm9vLCAnYScpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX29iamVjdF9kaWN0KHNlbGYpOgorICAgICAgICB0ZXN0ID0gc2VsZgorICAgICAgICB0ZXN0LmNhbGxlZCA9IEZhbHNlCisKKyAgICAgICAgY2xhc3MgQ3VzdG9tKGRpY3QpOgorICAgICAgICAgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgdGVzdC5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgc3VwZXIoKS5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgYSA9IDMKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgZm9vLl9fZGljdF9fID0gQ3VzdG9tKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LmdldGF0dHJfc3RhdGljKGZvbywgJ2EnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ZXN0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X21ldGFjbGFzc19kaWN0X2FzX3Byb3BlcnR5KHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19kaWN0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5leGVjdXRlZCA9IFRydWUKKworICAgICAgICBjbGFzcyBUaGluZyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBleGVjdXRlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNwYW0gPSA0MgorCisgICAgICAgIGluc3RhbmNlID0gVGhpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoaW5zdGFuY2UsICJzcGFtIiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRoaW5nLmV4ZWN1dGVkKQorCitjbGFzcyBUZXN0R2V0R2VuZXJhdG9yU3RhdGUodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkZWYgbnVtYmVyX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgZm9yIG51bWJlciBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICB5aWVsZCBudW1iZXIKKyAgICAgICAgc2VsZi5nZW5lcmF0b3IgPSBudW1iZXJfZ2VuZXJhdG9yKCkKKworICAgIGRlZiBfZ2VuZXJhdG9yc3RhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBpbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRlKHNlbGYuZ2VuZXJhdG9yKQorCisgICAgZGVmIHRlc3RfY3JlYXRlZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZW5lcmF0b3JzdGF0ZSgpLCBpbnNwZWN0LkdFTl9DUkVBVEVEKQorCisgICAgZGVmIHRlc3Rfc3VzcGVuZGVkKHNlbGYpOgorICAgICAgICBuZXh0KHNlbGYuZ2VuZXJhdG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dlbmVyYXRvcnN0YXRlKCksIGluc3BlY3QuR0VOX1NVU1BFTkRFRCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlZF9hZnRlcl9leGhhdXN0aW9uKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiBzZWxmLmdlbmVyYXRvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZW5lcmF0b3JzdGF0ZSgpLCBpbnNwZWN0LkdFTl9DTE9TRUQpCisKKyAgICBkZWYgdGVzdF9jbG9zZWRfYWZ0ZXJfaW1tZWRpYXRlX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5nZW5lcmF0b3IudGhyb3coUnVudGltZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dlbmVyYXRvcnN0YXRlKCksIGluc3BlY3QuR0VOX0NMT1NFRCkKKworICAgIGRlZiB0ZXN0X3J1bm5pbmcoc2VsZik6CisgICAgICAgICMgQXMgbWVudGlvbmVkIG9uIGlzc3VlICMxMDIyMCwgY2hlY2tpbmcgZm9yIHRoZSBSVU5OSU5HIHN0YXRlIG9ubHkKKyAgICAgICAgIyBtYWtlcyBzZW5zZSBpbnNpZGUgdGhlIGdlbmVyYXRvciBpdHNlbGYuCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBnZW5lcmF0b3IgY2hlY2tzIGZvciB0aGlzIGJ5IHVzaW5nIHRoZSBjbG9zdXJlJ3MKKyAgICAgICAgIyByZWZlcmVuY2UgdG8gc2VsZiBhbmQgdGhlIGdlbmVyYXRvciBzdGF0ZSBjaGVja2luZyBoZWxwZXIgbWV0aG9kCisgICAgICAgIGRlZiBydW5uaW5nX2NoZWNrX2dlbmVyYXRvcigpOgorICAgICAgICAgICAgZm9yIG51bWJlciBpbiByYW5nZSg1KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dlbmVyYXRvcnN0YXRlKCksIGluc3BlY3QuR0VOX1JVTk5JTkcpCisgICAgICAgICAgICAgICAgeWllbGQgbnVtYmVyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZW5lcmF0b3JzdGF0ZSgpLCBpbnNwZWN0LkdFTl9SVU5OSU5HKQorICAgICAgICBzZWxmLmdlbmVyYXRvciA9IHJ1bm5pbmdfY2hlY2tfZ2VuZXJhdG9yKCkKKyAgICAgICAgIyBSdW5uaW5nIHVwIHRvIHRoZSBmaXJzdCB5aWVsZAorICAgICAgICBuZXh0KHNlbGYuZ2VuZXJhdG9yKQorICAgICAgICAjIFJ1bm5pbmcgYWZ0ZXIgdGhlIGZpcnN0IHlpZWxkCisgICAgICAgIG5leHQoc2VsZi5nZW5lcmF0b3IpCisKKyAgICBkZWYgdGVzdF9lYXN5X2RlYnVnZ2luZyhzZWxmKToKKyAgICAgICAgIyByZXByKCkgYW5kIHN0cigpIG9mIGEgZ2VuZXJhdG9yIHN0YXRlIHNob3VsZCBjb250YWluIHRoZSBzdGF0ZSBuYW1lCisgICAgICAgIG5hbWVzID0gJ0dFTl9DUkVBVEVEIEdFTl9SVU5OSU5HIEdFTl9TVVNQRU5ERUQgR0VOX0NMT1NFRCcuc3BsaXQoKQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHN0YXRlID0gZ2V0YXR0cihpbnNwZWN0LCBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCByZXByKHN0YXRlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc3RyKHN0YXRlKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3REZWNvcmF0b3JzLCBUZXN0UmV0cmlldmluZ1NvdXJjZUNvZGUsIFRlc3RPbmVsaW5lcnMsCi0gICAgICAgICAgICAgICAgIFRlc3RCdWdneUNhc2VzLAotICAgICAgICAgICAgICAgICBUZXN0SW50ZXJwcmV0ZXJTdGFjaywgVGVzdENsYXNzZXNBbmRGdW5jdGlvbnMsIFRlc3RQcmVkaWNhdGVzKQorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdERlY29yYXRvcnMsIFRlc3RSZXRyaWV2aW5nU291cmNlQ29kZSwgVGVzdE9uZWxpbmVycywgVGVzdEJ1Z2d5Q2FzZXMsCisgICAgICAgIFRlc3RJbnRlcnByZXRlclN0YWNrLCBUZXN0Q2xhc3Nlc0FuZEZ1bmN0aW9ucywgVGVzdFByZWRpY2F0ZXMsCisgICAgICAgIFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucywgVGVzdEdldGNhbGxhcmdzTWV0aG9kcywKKyAgICAgICAgVGVzdEdldGNhbGxhcmdzVW5ib3VuZE1ldGhvZHMsIFRlc3RHZXRhdHRyU3RhdGljLCBUZXN0R2V0R2VuZXJhdG9yU3RhdGUsCisgICAgICAgIFRlc3ROb0VPTAorICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbnQucHkgYi9MaWIvdGVzdC90ZXN0X2ludC5weQppbmRleCBmN2QyMzE4Li40MzdlMzIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ludC5weQpAQCAtMjAsNyArMjAsOCBAQAogICAgICAgICAoJyAgMVwwMiAgJywgVmFsdWVFcnJvciksCiAgICAgICAgICgnJywgVmFsdWVFcnJvciksCiAgICAgICAgICgnICcsIFZhbHVlRXJyb3IpLAotICAgICAgICAoJyAgXHRcdCAgJywgVmFsdWVFcnJvcikKKyAgICAgICAgKCcgIFx0XHQgICcsIFZhbHVlRXJyb3IpLAorICAgICAgICAoIlx1MDIwMCIsIFZhbHVlRXJyb3IpCiBdCiAKIGNsYXNzIEludFRlc3RDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNCw2ICszNSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjkpLCAtMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMy41KSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoLTMuNSksIC0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgiLTMiKSwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCIgLTMgIiksIC0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgiXE57RU0gU1BBQ0V9LTNcTntFTiBTUEFDRX0iKSwgLTMpCiAgICAgICAgICMgRGlmZmVyZW50IGJhc2U6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCIxMCIsMTYpLCAxNikKICAgICAgICAgIyBUZXN0IGNvbnZlcnNpb24gZnJvbSBzdHJpbmdzIGFuZCB2YXJpb3VzIGFub21hbGllcwpAQCAtNTIsMTUgKzU2LDE1IEBACiAgICAgICAgIHMgPSByZXByKC0xLXN5cy5tYXhzaXplKQogICAgICAgICB4ID0gaW50KHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCsxLCAtc3lzLm1heHNpemUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIGludCkpCi0gICAgICAgICMgc2hvdWxkIHJldHVybiBsb25nCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBpbnQpCisgICAgICAgICMgc2hvdWxkIHJldHVybiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc1sxOl0pLCBzeXMubWF4c2l6ZSsxKQogCi0gICAgICAgICMgc2hvdWxkIHJldHVybiBsb25nCisgICAgICAgICMgc2hvdWxkIHJldHVybiBpbnQKICAgICAgICAgeCA9IGludCgxZTEwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGludCkKICAgICAgICAgeCA9IGludCgtMWUxMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHgsIGludCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBpbnQpCiAKIAogICAgICAgICAjIFNGIGJ1ZyA0MzQxODY6ICAweDgwMDAwMDAwLzIgIT0gMHg4MDAwMDAwMD4+MS4KQEAgLTc4LDcgKzgyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzXHgwMCAyNDUnLCAyMCkKIAogICAgICAgICB4ID0gaW50KCcxJyAqIDYwMCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeCwgaW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGludCkKKwogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCAxLCAxMikKIApAQCAtMzAwLDYgKzMwNSwxNiBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3Igd2l0aCAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiYXNlLCB0cnVuY19yZXN1bHRfYmFzZSksKSkKIAorICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIHRlc3RsaXN0ID0gKCdceGJkJywgJzEyM1x4YmQnLCAnICAxMjMgNDU2ICAnKQorICAgICAgICBmb3IgcyBpbiB0ZXN0bGlzdDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpbnQocykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzLnN0cmlwKCksIGUuYXJnc1swXSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBpbnQoJXIpIHRvIHJhaXNlIGEgVmFsdWVFcnJvciIsIHMpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoSW50VGVzdENhc2VzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvLnB5IGIvTGliL3Rlc3QvdGVzdF9pby5weQppbmRleCA1ZjYyNDk0Li5iNjY1YTZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKQEAgLTIzLDIyICsyMywyNSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBhcnJheQotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgd2FybmluZ3MKIGltcG9ydCB3ZWFrcmVmCi1pbXBvcnQgZ2MKIGltcG9ydCBhYmMKIGltcG9ydCBzaWduYWwKIGltcG9ydCBlcnJubwotZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCBjeWNsZSwgY291bnQKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHBpY2tsZQorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGN5Y2xlLCBjb3VudAogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgaW8gICMgQyBpbXBsZW1lbnRhdGlvbiBvZiBpbwogaW1wb3J0IF9weWlvIGFzIHB5aW8gIyBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgaW8KK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiAKIGRlZiBfZGVmYXVsdF9jaHVua19zaXplKCk6CkBAIC0xODksNiArMTkyLDIzIEBACiAgICAgcGFzcwogCiAKK2NsYXNzIE1vY2tVbnNlZWthYmxlSU86CisgICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBzZWVrKHNlbGYsICphcmdzKToKKyAgICAgICAgcmFpc2Ugc2VsZi5VbnN1cHBvcnRlZE9wZXJhdGlvbigibm90IHNlZWthYmxlIikKKworICAgIGRlZiB0ZWxsKHNlbGYsICphcmdzKToKKyAgICAgICAgcmFpc2Ugc2VsZi5VbnN1cHBvcnRlZE9wZXJhdGlvbigibm90IHNlZWthYmxlIikKKworY2xhc3MgQ01vY2tVbnNlZWthYmxlSU8oTW9ja1Vuc2Vla2FibGVJTywgaW8uQnl0ZXNJTyk6CisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgorCitjbGFzcyBQeU1vY2tVbnNlZWthYmxlSU8oTW9ja1Vuc2Vla2FibGVJTywgcHlpby5CeXRlc0lPKToKKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworCiBjbGFzcyBNb2NrTm9uQmxvY2tXcml0ZXJJTzoKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTMxNCwxNiArMzM0LDI2IEBACiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX29wZXJhdGlvbnMoc2VsZik6CiAgICAgICAgICMgVHJ5IHdyaXRpbmcgb24gYSBmaWxlIG9wZW5lZCBpbiByZWFkIG1vZGUgYW5kIHZpY2UtdmVyc2EuCisgICAgICAgIGV4YyA9IHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24KICAgICAgICAgZm9yIG1vZGUgaW4gKCJ3IiwgIndiIik6CiAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgbW9kZSkgYXMgZnA6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAucmVhZCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC5yZWFkbGluZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGZwLnJlYWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC5yZWFkbGluZSkKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKSBhcyBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgZnAucmVhZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgZnAucmVhZGxpbmUpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGZwLndyaXRlLCBiImJsYWgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC53cml0ZWxpbmVzLCBbYiJibGFoXG4iXSkKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZnAud3JpdGUsIGIiYmxhaCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZWxpbmVzLCBbYiJibGFoXG4iXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YywgZnAud3JpdGUsIGIiYmxhaCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGZwLndyaXRlbGluZXMsIFtiImJsYWhcbiJdKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiKSBhcyBmcDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGZwLndyaXRlLCAiYmxhaCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmcC53cml0ZWxpbmVzLCBbImJsYWhcbiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC53cml0ZSwgImJsYWgiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXhjLCBmcC53cml0ZWxpbmVzLCBbImJsYWhcbiJdKQorICAgICAgICAgICAgIyBOb24temVybyBzZWVraW5nIGZyb20gY3VycmVudCBvciBlbmQgcG9zCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGZwLnNlZWssIDEsIHNlbGYuU0VFS19DVVIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhleGMsIGZwLnNlZWssIC0xLCBzZWxmLlNFRUtfRU5EKQogCiAgICAgZGVmIHRlc3RfcmF3X2ZpbGVfaW8oc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgZjoKQEAgLTQzMiwxMyArNDYyLDE0IEBACiAgICAgICAgICAgICBkZWYgZmx1c2goc2VsZik6CiAgICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgzKQogICAgICAgICAgICAgICAgIHN1cGVyKCkuZmx1c2goKQotICAgICAgICBmID0gTXlGaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGYud3JpdGUoYiJ4eHgiKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgWzEsIDIsIDNdKQotICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIieHh4IikKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gTXlGaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICBmLndyaXRlKGIieHh4IikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFsxLCAyLCAzXSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIieHh4IikKIAogICAgIGRlZiBfY2hlY2tfYmFzZV9kZXN0cnVjdG9yKHNlbGYsIGJhc2UpOgogICAgICAgICByZWNvcmQgPSBbXQpAQCAtNDkwLDcgKzUyMSw3IEBACiAKICAgICBkZWYgdGVzdF9hcnJheV93cml0ZXMoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheSgnaScsIHJhbmdlKDEwKSkKLSAgICAgICAgbiA9IGxlbihhLnRvc3RyaW5nKCkpCisgICAgICAgIG4gPSBsZW4oYS50b2J5dGVzKCkpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCAwKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndyaXRlKGEpLCBuKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKQEAgLTUyNSwxMiArNTU2LDEzIEBACiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0aW9uKHNlbGYpOgogICAgICAgICAjIEZpbGVJTyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQsIGFuZCBjb2xsZWN0aW5nIHRoZW0gZmx1c2hlcwogICAgICAgICAjIGFsbCBkYXRhIHRvIGRpc2suCi0gICAgICAgIGYgPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgZi53cml0ZShiImFiY3h4eCIpCi0gICAgICAgIGYuZiA9IGYKLSAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQotICAgICAgICBkZWwgZgotICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIGYgPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIndiIikKKyAgICAgICAgICAgIGYud3JpdGUoYiJhYmN4eHgiKQorICAgICAgICAgICAgZi5mID0gZgorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihmKQorICAgICAgICAgICAgZGVsIGYKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjeHh4IikKQEAgLTY5Myw2ICs3MjUsMTEgQEAKICAgICAgICAgYi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGIuZmx1c2gpCiAKKyAgICBkZWYgdGVzdF91bnNlZWthYmxlKHNlbGYpOgorICAgICAgICBidWZpbyA9IHNlbGYudHAoc2VsZi5Nb2NrVW5zZWVrYWJsZUlPKGIiQSIgKiAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIGJ1ZmlvLnNlZWssIDApCisKICAgICBkZWYgdGVzdF9yZWFkb25seV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGJ1ZiA9IHNlbGYudHAocmF3KQpAQCAtODEwLDYgKzg0Nyw3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiImFiY2RlZmciLCBidWZpby5yZWFkKCkpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogICAgIEBzdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCdjcHUnKQogICAgIGRlZiB0ZXN0X3RocmVhZHMoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTEwNzgsNiArMTExNiw3IEBACiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiLCBidWZmZXJpbmc9MCkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjIikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgQHN1cHBvcnQucmVxdWlyZXNfcmVzb3VyY2UoJ2NwdScpCiAgICAgZGVmIHRlc3RfdGhyZWFkcyhzZWxmKToKICAgICAgICAgdHJ5OgpAQCAtMTEzNiwxNCArMTE3NSw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLndyaXRlLCBiImFiY2RlZiIpCiAKICAgICBkZWYgdGVzdF9tYXhfYnVmZmVyX3NpemVfZGVwcmVjYXRpb24oc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgc2VsZi50cChzZWxmLk1vY2tSYXdJTygpLCA4LCAxMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAxKQotICAgICAgICAgICAgd2FybmluZyA9IHcud2FybmluZ3NbMF0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YXJuaW5nLmNhdGVnb3J5IGlzIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHdhcm5pbmcubWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhfYnVmZmVyX3NpemUgaXMgZGVwcmVjYXRlZCIpCiAKIAogY2xhc3MgQ0J1ZmZlcmVkV3JpdGVyVGVzdChCdWZmZXJlZFdyaXRlclRlc3QpOgpAQCAtMTE5OSwxNCArMTIzMyw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIHBhaXIuZGV0YWNoKQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfbWF4X2J1ZmZlcl9zaXplX2RlcHJlY2F0aW9uKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIm1heF9idWZmZXJfc2l6ZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgIHNlbGYudHAoc2VsZi5Nb2NrUmF3SU8oKSwgc2VsZi5Nb2NrUmF3SU8oKSwgOCwgMTIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMSkKLSAgICAgICAgICAgIHdhcm5pbmcgPSB3Lndhcm5pbmdzWzBdCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod2FybmluZy5jYXRlZ29yeSBpcyBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3YXJuaW5nLm1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4X2J1ZmZlcl9zaXplIGlzIGRlcHJlY2F0ZWQiKQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3RfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGNsYXNzIE5vdFJlYWRhYmxlKE1vY2tSYXdJTyk6CkBAIC0xNDczLDYgKzE1MDIsOSBAQAogICAgICAgICBCdWZmZXJlZFJlYWRlclRlc3QudGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpCiAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyVGVzdC50ZXN0X21pc2JlaGF2ZWRfaW8oc2VsZikKIAorICAgICMgWW91IGNhbid0IGNvbnN0cnVjdCBhIEJ1ZmZlcmVkUmFuZG9tIG92ZXIgYSBub24tc2Vla2FibGUgc3RyZWFtLgorICAgIHRlc3RfdW5zZWVrYWJsZSA9IE5vbmUKKwogY2xhc3MgQ0J1ZmZlcmVkUmFuZG9tVGVzdChCdWZmZXJlZFJhbmRvbVRlc3QpOgogICAgIHRwID0gaW8uQnVmZmVyZWRSYW5kb20KIApAQCAtMTY4NSw5ICsxNzE3LDEyIEBACiAgICAgICAgIHJhdy5uYW1lID0gImR1bW15IgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIjwlcy5UZXh0SU9XcmFwcGVyIG5hbWU9J2R1bW15JyBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQorICAgICAgICB0Lm1vZGUgPSAiciIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPSdkdW1teScgbW9kZT0ncicgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKICAgICAgICAgcmF3Lm5hbWUgPSBiImR1bW15IgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIjwlcy5UZXh0SU9XcmFwcGVyIG5hbWU9YidkdW1teScgZW5jb2Rpbmc9J3V0Zi04Jz4iICUgbW9kbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPCVzLlRleHRJT1dyYXBwZXIgbmFtZT1iJ2R1bW15JyBtb2RlPSdyJyBlbmNvZGluZz0ndXRmLTgnPiIgJSBtb2RuYW1lKQogCiAgICAgZGVmIHRlc3RfbGluZV9idWZmZXJpbmcoc2VsZik6CiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oKQpAQCAtMTk2MSwyNiArMTk5NiwyNCBAQAogICAgICAgICB1X3N1ZmZpeCA9ICJcdTg4ODhcbiIKICAgICAgICAgc3VmZml4ID0gYnl0ZXModV9zdWZmaXguZW5jb2RlKCJ1dGYtOCIpKQogICAgICAgICBsaW5lID0gcHJlZml4ICsgc3VmZml4Ci0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGYud3JpdGUobGluZSoyKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICBzID0gZi5yZWFkKHByZWZpeF9zaXplKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHN0cihwcmVmaXgsICJhc2NpaSIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwcmVmaXhfc2l6ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksIHVfc3VmZml4KQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUobGluZSoyKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgorICAgICAgICAgICAgcyA9IGYucmVhZChwcmVmaXhfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc3RyKHByZWZpeCwgImFzY2lpIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYudGVsbCgpLCBwcmVmaXhfc2l6ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCB1X3N1ZmZpeCkKIAogICAgIGRlZiB0ZXN0X3NlZWtpbmdfdG9vKHNlbGYpOgogICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgYSBzcGVjaWZpYyBidWcKICAgICAgICAgZGF0YSA9IGInXHhlMFx4YmZceGJmXG4nCi0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyIiwgZW5jb2Rpbmc9InV0Zi04IikKLSAgICAgICAgZi5fQ0hVTktfU0laRSAgIyBKdXN0IHRlc3QgdGhhdCBpdCBleGlzdHMKLSAgICAgICAgZi5fQ0hVTktfU0laRSA9IDIKLSAgICAgICAgZi5yZWFkbGluZSgpCi0gICAgICAgIGYudGVsbCgpCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInIiLCBlbmNvZGluZz0idXRmLTgiKSBhcyBmOgorICAgICAgICAgICAgZi5fQ0hVTktfU0laRSAgIyBKdXN0IHRlc3QgdGhhdCBpdCBleGlzdHMKKyAgICAgICAgICAgIGYuX0NIVU5LX1NJWkUgPSAyCisgICAgICAgICAgICBmLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIGYudGVsbCgpCiAKICAgICBkZWYgdGVzdF9zZWVrX2FuZF90ZWxsKHNlbGYpOgogICAgICAgICAjVGVzdCBzZWVrL3RlbGwgdXNpbmcgdGhlIFN0YXRlZnVsSW5jcmVtZW50YWxEZWNvZGVyLgpAQCAtMjE4MSw3ICsyMjE0LDcgQEAKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3IiwgZXJyb3JzPSJyZXBsYWNlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lcnJvcnMsICJyZXBsYWNlIikKIAotCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF90aHJlYWRzX3dyaXRlKHNlbGYpOgogICAgICAgICAjIElzc3VlNjc1MDogY29uY3VycmVudCB3cml0ZXMgY291bGQgZHVwbGljYXRlIGRhdGEKICAgICAgICAgZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQpAQCAtMjIxNyw2ICsyMjUwLDExIEBACiAgICAgICAgIHR4dC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR4dC5mbHVzaCkKIAorICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGUoc2VsZik6CisgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLk1vY2tVbnNlZWthYmxlSU8oc2VsZi50ZXN0ZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuVW5zdXBwb3J0ZWRPcGVyYXRpb24sIHR4dC50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLlVuc3VwcG9ydGVkT3BlcmF0aW9uLCB0eHQuc2VlaywgMCkKKwogICAgIGRlZiB0ZXN0X3JlYWRvbmx5X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCiAgICAgICAgIGJ1ZiA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQpAQCAtMjQ3NCwyNyArMjUxMiwyNyBAQAogCiAgICAgZGVmIHRlc3RfYWJjcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSB2aXNpYmxlIGJhc2UgY2xhc3NlcyBhcmUgQUJDcy4KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5JT0Jhc2UsIGFiYy5BQkNNZXRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5SYXdJT0Jhc2UsIGFiYy5BQkNNZXRhKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5CdWZmZXJlZElPQmFzZSwgYWJjLkFCQ01ldGEpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLlRleHRJT0Jhc2UsIGFiYy5BQkNNZXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuSU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuUmF3SU9CYXNlLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuQnVmZmVyZWRJT0Jhc2UsIGFiYy5BQkNNZXRhKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5UZXh0SU9CYXNlLCBhYmMuQUJDTWV0YSkKIAogICAgIGRlZiBfY2hlY2tfYWJjX2luaGVyaXRhbmNlKHNlbGYsIGFiY21vZHVsZSk6CiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoZiwgYWJjbW9kdWxlLkJ1ZmZlcmVkSU9CYXNlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLklPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuVGV4dElPQmFzZSkKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGYsIGFiY21vZHVsZS5CdWZmZXJlZElPQmFzZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuSU9CYXNlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuUmF3SU9CYXNlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNpbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFiY21vZHVsZS5JT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShmLCBhYmNtb2R1bGUuQnVmZmVyZWRJT0Jhc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYWJjbW9kdWxlLlRleHRJT0Jhc2UpCiAKICAgICBkZWYgdGVzdF9hYmNfaW5oZXJpdGFuY2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBpbXBsZW1lbnRhdGlvbnMgaW5oZXJpdCBmcm9tIHRoZWlyIHJlc3BlY3RpdmUgQUJDcwpAQCAtMjUwNSw2ICsyNTQzLDYzIEBACiAgICAgICAgICMgYmFzZWxpbmUgImlvIiBtb2R1bGUuCiAgICAgICAgIHNlbGYuX2NoZWNrX2FiY19pbmhlcml0YW5jZShpbykKIAorICAgIGRlZiBfY2hlY2tfd2Fybl9vbl9kZWFsbG9jKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGYgPSBvcGVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgciA9IHJlcHIoZikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFJlc291cmNlV2FybmluZykgYXMgY206CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyLCBzdHIoY20ud2FybmluZy5hcmdzWzBdKSkKKworICAgIGRlZiB0ZXN0X3dhcm5fb25fZGVhbGxvYyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jKHN1cHBvcnQuVEVTVEZOLCAid2IiLCBidWZmZXJpbmc9MCkKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jKHN1cHBvcnQuVEVTVEZOLCAid2IiKQorICAgICAgICBzZWxmLl9jaGVja193YXJuX29uX2RlYWxsb2Moc3VwcG9ydC5URVNURk4sICJ3IikKKworICAgIGRlZiBfY2hlY2tfd2Fybl9vbl9kZWFsbG9jX2ZkKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGRlZiBjbGVhbnVwX2ZkcygpOgorICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cF9mZHMpCisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmRzICs9IHIsIHcKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jKHIsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgIyBXaGVuIHVzaW5nIGNsb3NlZmQ9RmFsc2UsIHRoZXJlJ3Mgbm8gd2FybmluZworICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkcyArPSByLCB3CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHJlY29yZGVkOgorICAgICAgICAgICAgb3BlbihyLCAqYXJncywgY2xvc2VmZD1GYWxzZSwgKiprd2FyZ3MpCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZGVkLCBbXSkKKworICAgIGRlZiB0ZXN0X3dhcm5fb25fZGVhbGxvY19mZChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jX2ZkKCJyYiIsIGJ1ZmZlcmluZz0wKQorICAgICAgICBzZWxmLl9jaGVja193YXJuX29uX2RlYWxsb2NfZmQoInJiIikKKyAgICAgICAgc2VsZi5fY2hlY2tfd2Fybl9vbl9kZWFsbG9jX2ZkKCJyIikKKworCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgICMgUGlja2xpbmcgZmlsZSBvYmplY3RzIGlzIGZvcmJpZGRlbgorICAgICAgICBmb3Iga3dhcmdzIGluIFsKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidyJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJ3YiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAiciJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiJ9LAorICAgICAgICAgICAgICAgIHsibW9kZSI6ICJyYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidysifSwKKyAgICAgICAgICAgICAgICB7Im1vZGUiOiAidytiIn0sCisgICAgICAgICAgICAgICAgeyJtb2RlIjogIncrYiIsICJidWZmZXJpbmciOiAwfSwKKyAgICAgICAgICAgIF06CisgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgKiprd2FyZ3MpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGlja2xlLmR1bXBzLCBmLCBwcm90b2NvbCkKKwogY2xhc3MgQ01pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CiAgICAgaW8gPSBpbwogCkBAIC0yNTI3LDcgKzI2MjIsOCBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIGNoZWNrX2ludGVycnVwdGVkX3dyaXRlKHNlbGYsIGl0ZW0sIGJ5dGVzLCAqKmZkb3Blbl9rd2FyZ3MpOgogICAgICAgICAiIiJDaGVjayB0aGF0IGEgcGFydGlhbCB3cml0ZSwgd2hlbiBpdCBnZXRzIGludGVycnVwdGVkLCBwcm9wZXJseQotICAgICAgICBpbnZva2VzIHRoZSBzaWduYWwgaGFuZGxlci4iIiIKKyAgICAgICAgaW52b2tlcyB0aGUgc2lnbmFsIGhhbmRsZXIsIGFuZCBidWJibGVzIHVwIHRoZSBleGNlcHRpb24gcmFpc2VkCisgICAgICAgIGluIHRoZSBsYXR0ZXIuIiIiCiAgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCiAgICAgICAgIGRlZiBfcmVhZCgpOgogICAgICAgICAgICAgcyA9IG9zLnJlYWQociwgMSkKQEAgLTI1MzUsNiArMjYzMSw3IEBACiAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKICAgICAgICAgdC5kYWVtb24gPSBUcnVlCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgZmRvcGVuX2t3YXJnc1siY2xvc2VmZCJdID0gRmFsc2UKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKICAgICAgICAgICAgIHQuc3RhcnQoKQpAQCAtMjU5Miw2ICsyNjg5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHdpby5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBidWZmZXIgZG9lc24ndCBmaWxsIHVwIGFuZCBibG9jayBmdXJ0aGVyIHdyaXRlcwogICAgICAgICAgICAgICAgICAgICBvcy5yZWFkKHIsIGxlbihkYXRhKSAqIDEwMCkKKyAgICAgICAgICAgIGV4YyA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cihleGMpLnN0YXJ0c3dpdGgoInJlZW50cmFudCBjYWxsIiksIHN0cihleGMpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgd2lvLmNsb3NlKCkKICAgICAgICAgICAgIG9zLmNsb3NlKHIpCkBAIC0yNjAyLDYgKzI3MDIsOTggQEAKICAgICBkZWYgdGVzdF9yZWVudHJhbnRfd3JpdGVfdGV4dChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfd3JpdGUoInh5IiwgbW9kZT0idyIsIGVuY29kaW5nPSJhc2NpaSIpCiAKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShzZWxmLCBkZWNvZGUsICoqZmRvcGVuX2t3YXJncyk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYSBidWZmZXJlZCByZWFkLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgIGRlZiBhbGFybV9oYW5kbGVyKHNpZywgZnJhbWUpOgorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJiYXIiKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybV9oYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByaW8gPSBzZWxmLmlvLm9wZW4ociwgKipmZG9wZW5fa3dhcmdzKQorICAgICAgICAgICAgb3Mud3JpdGUodywgYiJmb28iKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAjIEV4cGVjdGVkIGJlaGF2aW91cjoKKyAgICAgICAgICAgICMgLSBmaXJzdCByYXcgcmVhZCgpIHJldHVybnMgcGFydGlhbCBiImZvbyIKKyAgICAgICAgICAgICMgLSBzZWNvbmQgcmF3IHJlYWQoKSByZXR1cm5zIEVJTlRSCisgICAgICAgICAgICAjIC0gdGhpcmQgcmF3IHJlYWQoKSByZXR1cm5zIGIiYmFyIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGUocmlvLnJlYWQoNikpLCAiZm9vYmFyIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJpby5jbG9zZSgpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICAgICAgb3MuY2xvc2UocikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X2J1ZmZlcmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3JlYWRfcmV0cnkobGFtYmRhIHg6IHguZGVjb2RlKCdsYXRpbjEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InJiIikKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF9yZWFkX3JldHJ5X3RleHQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfcmVhZF9yZXRyeShsYW1iZGEgeDogeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU9InIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKKyAgICBkZWYgY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGVfcmV0cnkoc2VsZiwgaXRlbSwgKipmZG9wZW5fa3dhcmdzKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGJ1ZmZlcmVkIHdyaXRlLCB3aGVuIGl0IGdldHMgaW50ZXJydXB0ZWQgKGVpdGhlcgorICAgICAgICByZXR1cm5pbmcgYSBwYXJ0aWFsIHJlc3VsdCBvciBFSU5UUiksIHByb3Blcmx5IGludm9rZXMgdGhlIHNpZ25hbAorICAgICAgICBoYW5kbGVyIGFuZCByZXRyaWVzIGlmIHRoZSBsYXR0ZXIgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LiIiIgorICAgICAgICBzZWxlY3QgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNlbGVjdCIpCisgICAgICAgICMgQSBxdWFudGl0eSB0aGF0IGV4Y2VlZHMgdGhlIGJ1ZmZlciBzaXplIG9mIGFuIGFub255bW91cyBwaXBlJ3MKKyAgICAgICAgIyB3cml0ZSBlbmQuCisgICAgICAgIE4gPSAxMDI0ICogMTAyNAorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZkb3Blbl9rd2FyZ3NbImNsb3NlZmQiXSA9IEZhbHNlCisgICAgICAgICMgV2UgbmVlZCBhIHNlcGFyYXRlIHRocmVhZCB0byByZWFkIGZyb20gdGhlIHBpcGUgYW5kIGFsbG93IHRoZQorICAgICAgICAjIHdyaXRlKCkgdG8gZmluaXNoLiAgVGhpcyB0aHJlYWQgaXMgc3RhcnRlZCBhZnRlciB0aGUgU0lHQUxSTSBpcworICAgICAgICAjIHJlY2VpdmVkIChmb3JjaW5nIGEgZmlyc3QgRUlOVFIgaW4gd3JpdGUoKSkuCisgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCisgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgZGVmIF9yZWFkKCk6CisgICAgICAgICAgICB3aGlsZSBub3Qgd3JpdGVfZmluaXNoZWQ6CisgICAgICAgICAgICAgICAgd2hpbGUgciBpbiBzZWxlY3Quc2VsZWN0KFtyXSwgW10sIFtdLCAxLjApWzBdOgorICAgICAgICAgICAgICAgICAgICBzID0gb3MucmVhZChyLCAxMDI0KQorICAgICAgICAgICAgICAgICAgICByZWFkX3Jlc3VsdHMuYXBwZW5kKHMpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIGRlZiBhbGFybTEoc2lnLCBmcmFtZSk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTIpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgZGVmIGFsYXJtMihzaWcsIGZyYW1lKToKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBhbGFybTEpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpbyA9IHNlbGYuaW8ub3Blbih3LCAqKmZkb3Blbl9rd2FyZ3MpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgICMgRXhwZWN0ZWQgYmVoYXZpb3VyOgorICAgICAgICAgICAgIyAtIGZpcnN0IHJhdyB3cml0ZSgpIGlzIHBhcnRpYWwgKGJlY2F1c2Ugb2YgdGhlIGxpbWl0ZWQgcGlwZSBidWZmZXIKKyAgICAgICAgICAgICMgICBhbmQgdGhlIGZpcnN0IGFsYXJtKQorICAgICAgICAgICAgIyAtIHNlY29uZCByYXcgd3JpdGUoKSByZXR1cm5zIEVJTlRSIChiZWNhdXNlIG9mIHRoZSBzZWNvbmQgYWxhcm0pCisgICAgICAgICAgICAjIC0gc3Vic2VxdWVudCB3cml0ZSgpcyBhcmUgc3VjY2Vzc2Z1bCAoZWl0aGVyIHBhcnRpYWwgb3IgY29tcGxldGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIHdpby53cml0ZShpdGVtICogTikpCisgICAgICAgICAgICB3aW8uZmx1c2goKQorICAgICAgICAgICAgd3JpdGVfZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOLCBzdW0obGVuKHgpIGZvciB4IGluIHJlYWRfcmVzdWx0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB3cml0ZV9maW5pc2hlZCA9IFRydWUKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBvcy5jbG9zZShyKQorICAgICAgICAgICAgIyBUaGlzIGlzIGRlbGliZXJhdGUuIElmIHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAjIGJlZm9yZSBjbG9zaW5nIHdpbywgd2lvIHdvdWxkIHRyeSB0byBmbHVzaCBpdHMgaW50ZXJuYWwKKyAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgY291bGQgYmxvY2sgKGluIGNhc2Ugb2YgZmFpbHVyZSkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQkFERjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiB0ZXN0X2ludGVycnVwdGVyZF93cml0ZV9yZXRyeV9idWZmZXJlZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeShiIngiLCBtb2RlPSJ3YiIpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlcmRfd3JpdGVfcmV0cnlfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pbnRlcnJ1cHRlZF93cml0ZV9yZXRyeSgieCIsIG1vZGU9InciLCBlbmNvZGluZz0ibGF0aW4xIikKKwogCiBjbGFzcyBDU2lnbmFsc1Rlc3QoU2lnbmFsc1Rlc3QpOgogICAgIGlvID0gaW8KQEAgLTI2MzEsNyArMjgyMyw3IEBACiAgICAgIyBQdXQgdGhlIG5hbWVzcGFjZXMgb2YgdGhlIElPIG1vZHVsZSB3ZSBhcmUgdGVzdGluZyBhbmQgc29tZSB1c2VmdWwgbW9jawogICAgICMgY2xhc3NlcyBpbiB0aGUgX19kaWN0X18gb2YgZWFjaCB0ZXN0LgogICAgIG1vY2tzID0gKE1vY2tSYXdJTywgTWlzYmVoYXZlZFJhd0lPLCBNb2NrRmlsZUlPLCBDbG9zZUZhaWx1cmVJTywKLSAgICAgICAgICAgICBNb2NrTm9uQmxvY2tXcml0ZXJJTywgTW9ja1Jhd0lPV2l0aG91dFJlYWQpCisgICAgICAgICAgICAgTW9ja05vbkJsb2NrV3JpdGVySU8sIE1vY2tVbnNlZWthYmxlSU8sIE1vY2tSYXdJT1dpdGhvdXRSZWFkKQogICAgIGFsbF9tZW1iZXJzID0gaW8uX19hbGxfXyArIFsiSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlciJdCiAgICAgY19pb19ucyA9IHtuYW1lIDogZ2V0YXR0cihpbywgbmFtZSkgZm9yIG5hbWUgaW4gYWxsX21lbWJlcnN9CiAgICAgcHlfaW9fbnMgPSB7bmFtZSA6IGdldGF0dHIocHlpbywgbmFtZSkgZm9yIG5hbWUgaW4gYWxsX21lbWJlcnN9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5IGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQppbmRleCAyNmMwZDA1Li5kNGQ1YTIyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKQEAgLTMwLDEwICszMCwxMCBAQAogICAgICAgICAjIElmIHRoaXMgcHJvY2VzcyBoYXMgYmVlbiBwdXQgaW50byB0aGUgYmFja2dyb3VuZCwgVElPQ0dQR1JQIHJldHVybnMKICAgICAgICAgIyB0aGUgc2Vzc2lvbiBJRCBpbnN0ZWFkIG9mIHRoZSBwcm9jZXNzIGdyb3VwIGlkLgogICAgICAgICBpZHMgPSAob3MuZ2V0cGdycCgpLCBvcy5nZXRzaWQoMCkpCi0gICAgICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInIiKQotICAgICAgICByID0gZmNudGwuaW9jdGwodHR5LCB0ZXJtaW9zLlRJT0NHUEdSUCwgIiAgICAiKQotICAgICAgICBycGdycCA9IHN0cnVjdC51bnBhY2soImkiLCByKVswXQotICAgICAgICBzZWxmLmFzc2VydFRydWUocnBncnAgaW4gaWRzLCAiJXMgbm90IGluICVzIiAlIChycGdycCwgaWRzKSkKKyAgICAgICAgd2l0aCBvcGVuKCIvZGV2L3R0eSIsICJyIikgYXMgdHR5OgorICAgICAgICAgICAgciA9IGZjbnRsLmlvY3RsKHR0eSwgdGVybWlvcy5USU9DR1BHUlAsICIgICAgIikKKyAgICAgICAgICAgIHJwZ3JwID0gc3RydWN0LnVucGFjaygiaSIsIHIpWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCiAKICAgICBkZWYgX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oc2VsZiwgbmJ5dGVzPU5vbmUpOgogICAgICAgICBidWYgPSBhcnJheS5hcnJheSgnaScpCkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgICAgICByID0gZmNudGwuaW9jdGwodHR5LCB0ZXJtaW9zLlRJT0NHUEdSUCwgYnVmLCAxKQogICAgICAgICBycGdycCA9IGJ1ZlswXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShycGdycCBpbiBpZHMsICIlcyBub3QgaW4gJXMiICUgKHJwZ3JwLCBpZHMpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJwZ3JwLCBpZHMpCiAKICAgICBkZWYgdGVzdF9pb2N0bF9tdXRhdGUoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX2lvY3RsX211dGF0ZV9sZW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pc2luc3RhbmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9pc2luc3RhbmNlLnB5CmluZGV4IDk0ODJlNzUuLmRjMmQwNzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXNpbnN0YW5jZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lzaW5zdGFuY2UucHkKQEAgLTgxLDYgKzgxLDIwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpc2luc3RhbmNlLCBJKCksIEMoKSkKIAorICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBtYXNrIG5vbiBBdHRyaWJ1dGVFcnJvcnMKKyAgICAjIHNlZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1NzQyMTcKKyAgICBkZWYgdGVzdF9pc2luc3RhbmNlX2RvbnRfbWFza19ub25fYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgZ2V0Y2xhc3Moc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgICAgICBfX2NsYXNzX18gPSBwcm9wZXJ0eShnZXRjbGFzcykKKworICAgICAgICBjID0gQygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgaXNpbnN0YW5jZSwgYywgYm9vbCkKKworICAgICAgICAjIHRlc3QgYW5vdGhlciBjb2RlIHBhdGgKKyAgICAgICAgY2xhc3MgRDogcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGlzaW5zdGFuY2UsIGMsIEQpCiAKIAwKICMgVGhlc2UgdGVzdHMgYXJlIHNpbWlsYXIgdG8gYWJvdmUsIGJ1dCB0aWNrbGUgY2VydGFpbiBjb2RlIHBhdGhzIGluCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKaW5kZXggYTgyNjU5OC4uZTQyNDMwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlci5weQpAQCAtMSw3ICsxLDcgQEAKICMgVGVzdCBpdGVyYXRvcnMuCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmsKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLCBjcHl0aG9uX29ubHkKIAogIyBUZXN0IHJlc3VsdCBvZiB0cmlwbGUgbG9vcCAodG9vIGJpZyB0byBpbmxpbmUpCiBUUklQTEVUUyA9IFsoMCwgMCwgMCksICgwLCAwLCAxKSwgKDAsIDAsIDIpLApAQCAtNTQyLDIzICs1NDIsMjMgQEAKICAgICBkZWYgdGVzdF9pbl9hbmRfbm90X2luKHNlbGYpOgogICAgICAgICBmb3Igc2M1IGluIEl0ZXJhdGluZ1NlcXVlbmNlQ2xhc3MoNSksIFNlcXVlbmNlQ2xhc3MoNSk6CiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaSBpbiBzYzUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCBzYzUpCiAgICAgICAgICAgICBmb3IgaSBpbiAiYWJjIiwgLTEsIDUsIDQyLjQyLCAoMywgNCksIFtdLCB7MTogMX0sIDMtMTJqLCBzYzU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGkgbm90IGluIHNjNSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGksIHNjNSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogMyBpbiAxMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IDMgbm90IGluIG1hcCkKIAogICAgICAgICBkID0geyJvbmUiOiAxLCAidHdvIjogMiwgInRocmVlIjogMywgMWo6IDJqfQogICAgICAgICBmb3IgayBpbiBkOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGsgaW4gZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIG5vdCBpbiBkLnZhbHVlcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBkLnZhbHVlcygpKQogICAgICAgICBmb3IgdiBpbiBkLnZhbHVlcygpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaW4gZC52YWx1ZXMoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IG5vdCBpbiBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBkLnZhbHVlcygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih2LCBkKQogICAgICAgICBmb3IgaywgdiBpbiBkLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKGssIHYpIGluIGQuaXRlbXMoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgodiwgaykgbm90IGluIGQuaXRlbXMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGssIHYpLCBkLml0ZW1zKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCh2LCBrKSwgZC5pdGVtcygpKQogCiAgICAgICAgIGYgPSBvcGVuKFRFU1RGTiwgInciKQogICAgICAgICB0cnk6CkBAIC01NjksOSArNTY5LDkgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGNodW5rIGluICJhYmMiOgogICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaHVuayBub3QgaW4gZikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGNodW5rLCBmKQogICAgICAgICAgICAgICAgIGYuc2VlaygwLCAwKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoY2h1bmsgKyAiXG4iKSBpbiBmKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKGNodW5rICsgIlxuIiksIGYpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHRyeToKQEAgLTc2MSw4ICs3NjEsOSBAQAogICAgICAgICAoYSwgYiksIChjLCkgPSBJdGVyYXRpbmdTZXF1ZW5jZUNsYXNzKDIpLCB7NDI6IDI0fQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhLCBiLCBjKSwgKDAsIDEsIDQyKSkKIAotICAgICAgICAjIFRlc3QgcmVmZXJlbmNlIGNvdW50IGJlaGF2aW9yCiAKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcmVmX2NvdW50aW5nX2JlaGF2aW9yKHNlbGYpOgogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBjb3VudCA9IDAKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CmluZGV4IDljZTU0ZDAuLjhjZGM1OTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC01Niw2ICs1NiwyNCBAQAogICAgIHJldHVybiBwcm9kKHJhbmdlKDEsIG4rMSkpCiAKIGNsYXNzIFRlc3RCYXNpY09wcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9hY2N1bXVsYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWNjdW11bGF0ZShyYW5nZSgxMCkpKSwgICAgICAgICAgICAgICAjIG9uZSBwb3NpdGlvbmFsIGFyZworICAgICAgICAgICAgICAgICAgICAgICAgICBbMCwgMSwgMywgNiwgMTAsIDE1LCAyMSwgMjgsIDM2LCA0NV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY2N1bXVsYXRlKGl0ZXJhYmxlPXJhbmdlKDEwKSkpLCAgICAgICMga3cgYXJnCisgICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxLCAzLCA2LCAxMCwgMTUsIDIxLCAyOCwgMzYsIDQ1XSkKKyAgICAgICAgZm9yIHR5cCBpbiBpbnQsIGNvbXBsZXgsIERlY2ltYWwsIEZyYWN0aW9uOiAgICAgICAgICAgICAgICAgIyBtdWx0aXBsZSB0eXBlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KGFjY3VtdWxhdGUobWFwKHR5cCwgcmFuZ2UoMTApKSkpLAorICAgICAgICAgICAgICAgIGxpc3QobWFwKHR5cCwgWzAsIDEsIDMsIDYsIDEwLCAxNSwgMjEsIDI4LCAzNiwgNDVdKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY2N1bXVsYXRlKCdhYmMnKSksIFsnYScsICdhYicsICdhYmMnXSkgICAjIHdvcmtzIHdpdGggbm9uLW51bWVyaWMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjY3VtdWxhdGUoW10pKSwgW10pICAgICAgICAgICAgICAgICAgIyBlbXB0eSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWNjdW11bGF0ZShbN10pKSwgWzddKSAgICAgICAgICAgICAgICAjIGl0ZXJhYmxlIG9mIGxlbmd0aCBvbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhY2N1bXVsYXRlLCByYW5nZSgxMCksIDUpICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWNjdW11bGF0ZSkgICAgICAgICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWNjdW11bGF0ZSwgeD1yYW5nZSgxMCkpICAgICAgICMgdW5leHBlY3RlZCBrd2QgYXJnCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGlzdCwgYWNjdW11bGF0ZShbMSwgW11dKSkgICAgICMgYXJncyB0aGF0IGRvbid0IGFkZAorCiAgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CiAKICAgICAgICAgZGVmIGNoYWluMigqaXRlcmFibGVzKToKQEAgLTkzNyw2ICs5NTUsOSBAQAogCiBjbGFzcyBUZXN0RXhhbXBsZXModW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfYWNjdW1sYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkpLCBbMSwgMywgNiwgMTAsIDE1XSkKKwogICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLmpvaW4oY2hhaW4oJ0FCQycsICdERUYnKSksICdBQkNERUYnKQogCkBAIC0xMDI0LDYgKzEwNDUsMTAgQEAKICAgICAgICAgbmV4dChpdGVyYXRvcikKICAgICAgICAgZGVsIGNvbnRhaW5lciwgaXRlcmF0b3IKIAorICAgIGRlZiB0ZXN0X2FjY3VtdWxhdGUoc2VsZik6CisgICAgICAgIGEgPSBbXQorICAgICAgICBzZWxmLm1ha2VjeWNsZShhY2N1bXVsYXRlKFsxLDIsYSwzXSksIGEpCisKICAgICBkZWYgdGVzdF9jaGFpbihzZWxmKToKICAgICAgICAgYSA9IFtdCiAgICAgICAgIHNlbGYubWFrZWN5Y2xlKGNoYWluKGEpLCBhKQpAQCAtMTE5Myw2ICsxMjE4LDE3IEBACiAKIGNsYXNzIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X2FjY3VtdWxhdGUoc2VsZik6CisgICAgICAgIHMgPSBbMSwyLDMsNCw1XQorICAgICAgICByID0gWzEsMyw2LDEwLDE1XQorICAgICAgICBuID0gbGVuKHMpCisgICAgICAgIGZvciBnIGluIChHLCBJLCBJZywgTCwgUik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYWNjdW11bGF0ZShnKHMpKSksIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY2N1bXVsYXRlKFMocykpKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYWNjdW11bGF0ZSwgWChzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhY2N1bXVsYXRlLCBOKHMpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgbGlzdCwgYWNjdW11bGF0ZShFKHMpKSkKKwogICAgIGRlZiB0ZXN0X2NoYWluKHNlbGYpOgogICAgICAgICBmb3IgcyBpbiAoIjEyMyIsICIiLCByYW5nZSgxMDAwKSwgKCdkbycsIDEuMiksIHJhbmdlKDIwMDAsMjIwMCw1KSk6CiAgICAgICAgICAgICBmb3IgZyBpbiAoRywgSSwgSWcsIFMsIEwsIFIpOgpAQCAtMTQxNSw3ICsxNDUxLDcgQEAKICAgICAgICAgICAgICAgICBTdWJjbGFzcyhuZXdhcmc9MSkKICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IHR5cGUgZXJyb3JzIGJlY2F1c2Ugb2Ygd3JvbmcgYXJndW1lbnQgY291bnQKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCJkb2VzIG5vdCB0YWtlIGtleXdvcmQgYXJndW1lbnRzIiBpbiBlcnIuYXJnc1swXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJkb2VzIG5vdCB0YWtlIGtleXdvcmQgYXJndW1lbnRzIiwgZXJyLmFyZ3NbMF0pCiAKIAogbGlicmVmdGVzdCA9ICIiIiBEb2N0ZXN0IGZvciBleGFtcGxlcyBpbiB0aGUgbGlicmFyeSByZWZlcmVuY2U6IGxpYml0ZXJ0b29scy50ZXgKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi5weQppbmRleCBhNGI2ZTdhLi40MWZmODk3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uLnB5CkBAIC01LDEyICs1LDEyIEBACiBiZSBydW4uCiAiIiIKIAotaW1wb3J0IGpzb24udGVzdHMKK2Zyb20gdGVzdCBpbXBvcnQganNvbl90ZXN0cwogaW1wb3J0IHRlc3Quc3VwcG9ydAogCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KGpzb24udGVzdHMudGVzdF9zdWl0ZSgpKQorICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoanNvbl90ZXN0cy50ZXN0X3N1aXRlKCkpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CmluZGV4IGUxMGRmY2UuLmQ3Zjc1NDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJVbml0IHRlc3RzIGZvciB0aGUga2V5d29yZCBvbmx5IGFyZ3VtZW50IHNwZWNpZmllZCBpbiBQRVAgMzEwMi4iIiIKIApAQCAtNzMsNiArNzMsMTQgQEAKICAgICAgICAgZnVuZGVmMyArPSAibGFzdGFyZyk6XG4gIHBhc3NcbiIKICAgICAgICAgY29tcGlsZShmdW5kZWYzLCAiPHRlc3Q+IiwgInNpbmdsZSIpCiAKKyAgICBkZWYgdGVzdFRvb01hbnlQb3NpdGlvbmFsRXJyb3JNZXNzYWdlKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiPU5vbmUsICosIGM9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBleGM6CisgICAgICAgICAgICBmKDEsIDIsIDMpCisgICAgICAgIGV4cGVjdGVkID0gImYoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCBhcmd1bWVudHMgKDMgZ2l2ZW4pIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihleGMuZXhjZXB0aW9uKSwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdFN5bnRheEVycm9yRm9yRnVuY3Rpb25DYWxsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1N5bnRheEVycm9yKCJmKHAsIGs9MSwgcDIpIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNTeW50YXhFcnJvcigiZihwLCBrMT01MCwgKigxLDIpLCBrMT0xMDApIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfa3F1ZXVlLnB5IGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKaW5kZXggYTkwZjEyYy4uOWNiMGE4NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkKQEAgLTcxLDYgKzcxLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKIAorICAgICAgICBiaWdudW0gPSBzeXMubWF4c2l6ZSAqIDIgKyAxCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudChiaWdudW0sIDEsIDIsIDMsIHN5cy5tYXhzaXplLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5maWx0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIHN5cy5tYXhzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LnVkYXRhLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKwogICAgIGRlZiB0ZXN0X3F1ZXVlX2V2ZW50KHNlbGYpOgogICAgICAgICBzZXJ2ZXJTb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKICAgICAgICAgc2VydmVyU29ja2V0LmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5IGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKaW5kZXggOGUyMjVkNS4uZmNjMzkwYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKQEAgLTEyLDcgKzEyLDcgQEAKIFRFU1RTID0gJ2Nqa2VuY29kaW5nc190ZXN0IGluc3BlY3RfZm9kZGVyIGluc3BlY3RfZm9kZGVyMiBtYXBwaW5nX3Rlc3RzJwogVEVTVFMgPSBURVNUUy5zcGxpdCgpCiBURVNUX1BBVEggPSBvcy5wYXRoLmRpcm5hbWUoc3VwcG9ydC5fX2ZpbGVfXykKLU1PRFVMRVMgPSAibGluZWNhY2hlIHVuaXR0ZXN0Ii5zcGxpdCgpCitNT0RVTEVTID0gImxpbmVjYWNoZSBhYmMiLnNwbGl0KCkKIE1PRFVMRV9QQVRIID0gb3MucGF0aC5kaXJuYW1lKEZJTEVOQU1FKQogCiBTT1VSQ0VfMSA9ICcnJwpAQCAtNTUsMTQgKzU1LDE2IEBACiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBsaW5lcyBjb3JyZXNwb25kIHRvIHRob3NlIGZyb20gZmlsZSBpdGVyYXRpb24KICAgICAgICAgZm9yIGVudHJ5IGluIFRFU1RTOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVTVF9QQVRILCBlbnRyeSkgKyAnLnB5JwotICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShvcGVuKGZpbGVuYW1lKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIGZvciBpbmRleCwgbGluZSBpbiBlbnVtZXJhdGUoZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgZ2V0bGluZShmaWxlbmFtZSwgaW5kZXggKyAxKSkKIAogICAgICAgICAjIENoZWNrIG1vZHVsZSBsb2FkaW5nCiAgICAgICAgIGZvciBlbnRyeSBpbiBNT0RVTEVTOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oTU9EVUxFX1BBVEgsIGVudHJ5KSArICcucHknCi0gICAgICAgICAgICBmb3IgaW5kZXgsIGxpbmUgaW4gZW51bWVyYXRlKG9wZW4oZmlsZW5hbWUpKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoZmlsZW5hbWUsIGluZGV4ICsgMSkpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZpbGU6CisgICAgICAgICAgICAgICAgZm9yIGluZGV4LCBsaW5lIGluIGVudW1lcmF0ZShmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBnZXRsaW5lKGZpbGVuYW1lLCBpbmRleCArIDEpKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCBib2d1cyBkYXRhIGlzbid0IHJldHVybmVkIChpc3N1ZSAjMTMwOTU2NykKICAgICAgICAgZW1wdHkgPSBsaW5lY2FjaGUuZ2V0bGluZXMoJ2EvYi9jL19faW5pdF9fLnB5JykKQEAgLTk5LDYgKzEwMSw3IEBACiAgICAgICAgIHdpdGggb3Blbihzb3VyY2VfbmFtZSwgJ3cnKSBhcyBzb3VyY2U6CiAgICAgICAgICAgICBzb3VyY2Uud3JpdGUoU09VUkNFXzEpCiAgICAgICAgIGdldGxpbmUoc291cmNlX25hbWUsIDEpCisKICAgICAgICAgIyBLZWVwIGEgY29weSBvZiB0aGUgb2xkIGNvbnRlbnRzCiAgICAgICAgIHNvdXJjZV9saXN0ID0gW10KICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9uYW1lKSBhcyBzb3VyY2U6CkBAIC0xMjMsNyArMTI2LDYgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCiAgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCiAKLQogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KExpbmVDYWNoZVRlc3RzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKaW5kZXggOWIzNjM1MC4uNjYyM2EwZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgMjAwMS0yMDEwIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDExIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTgsNyArMTgsNyBAQAogCiAiIiJUZXN0IGhhcm5lc3MgZm9yIHRoZSBsb2dnaW5nIG1vZHVsZS4gUnVuIGFsbCB0ZXN0cy4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICIiIgogCiBpbXBvcnQgbG9nZ2luZwpAQCAtMjYsMjcgKzI2LDMwIEBACiBpbXBvcnQgbG9nZ2luZy5jb25maWcKIAogaW1wb3J0IGNvZGVjcwotaW1wb3J0IGNvcHkKK2ltcG9ydCBkYXRldGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IGlvCiBpbXBvcnQgZ2MKK2ltcG9ydCBqc29uCiBpbXBvcnQgb3MKK2ltcG9ydCBxdWV1ZQogaW1wb3J0IHJlCiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc29ja2V0CiBmcm9tIHNvY2tldHNlcnZlciBpbXBvcnQgVGhyZWFkaW5nVENQU2VydmVyLCBTdHJlYW1SZXF1ZXN0SGFuZGxlcgotaW1wb3J0IHN0cmluZwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0LCBydW5fd2l0aF9sb2NhbGUsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRlc3RIYW5kbGVyLCBNYXRjaGVyCiBpbXBvcnQgdGV4dHdyYXAKLWltcG9ydCB0aHJlYWRpbmcKLWltcG9ydCB0aW1lCi1pbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIAogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjUsMTEgKzY4LDIxIEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IGxvZ2dlcl9kaWN0LmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9sb2dnZXJzID0gc2F2ZWRfbG9nZ2VycyA9IGxvZ2dlcl9kaWN0LmNvcHkoKQogICAgICAgICAgICAgc2VsZi5zYXZlZF9sZXZlbF9uYW1lcyA9IGxvZ2dpbmcuX2xldmVsTmFtZXMuY29weSgpCisgICAgICAgICAgICBzZWxmLmxvZ2dlcl9zdGF0ZXMgPSBsb2dnZXJfc3RhdGVzID0ge30KKyAgICAgICAgICAgIGZvciBuYW1lIGluIHNhdmVkX2xvZ2dlcnM6CisgICAgICAgICAgICAgICAgbG9nZ2VyX3N0YXRlc1tuYW1lXSA9IGdldGF0dHIoc2F2ZWRfbG9nZ2Vyc1tuYW1lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZWQnLCBOb25lKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgbG9nZ2luZy5fcmVsZWFzZUxvY2soKQogCisgICAgICAgICMgU2V0IHR3byB1bnVzZWQgbG9nZ2Vyczogb25lIG5vbi1BU0NJSSBhbmQgb25lIFVuaWNvZGUuCisgICAgICAgICMgVGhpcyBpcyB0byB0ZXN0IGNvcnJlY3Qgb3BlcmF0aW9uIHdoZW4gc29ydGluZyBleGlzdGluZworICAgICAgICAjIGxvZ2dlcnMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gY29kZS4gU2VlIGlzc3VlIDgyMDEuCisgICAgICAgIHNlbGYubG9nZ2VyMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJceGFiXHhkN1x4YmIiKQorICAgICAgICBzZWxmLmxvZ2dlcjIgPSBsb2dnaW5nLmdldExvZ2dlcigiXHUwMTNmXHUwMGQ2XHUwMDQ3IikKKwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoIiIpCiAgICAgICAgIHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCA9IHNlbGYucm9vdF9sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQogCkBAIC03OCwxMyArOTEsMjUgQEAKICAgICAgICAgc2VsZi5yb290X2hkbHIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5zdHJlYW0pCiAgICAgICAgIHNlbGYucm9vdF9mb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihzZWxmLmxvZ19mb3JtYXQpCiAgICAgICAgIHNlbGYucm9vdF9oZGxyLnNldEZvcm1hdHRlcihzZWxmLnJvb3RfZm9ybWF0dGVyKQorICAgICAgICBpZiBzZWxmLmxvZ2dlcjEuaGFzSGFuZGxlcnMoKToKKyAgICAgICAgICAgIGhsaXN0ID0gc2VsZi5sb2dnZXIxLmhhbmRsZXJzICsgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVycworICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1VuZXhwZWN0ZWQgaGFuZGxlcnM6ICVzJyAlIGhsaXN0KQorICAgICAgICBpZiBzZWxmLmxvZ2dlcjIuaGFzSGFuZGxlcnMoKToKKyAgICAgICAgICAgIGhsaXN0ID0gc2VsZi5sb2dnZXIyLmhhbmRsZXJzICsgc2VsZi5yb290X2xvZ2dlci5oYW5kbGVycworICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1VuZXhwZWN0ZWQgaGFuZGxlcnM6ICVzJyAlIGhsaXN0KQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5yb290X2hkbHIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvZ2dlcjEuaGFzSGFuZGxlcnMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9nZ2VyMi5oYXNIYW5kbGVycygpKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZW1vdmUgb3VyIGxvZ2dpbmcgc3RyZWFtLCBhbmQgcmVzdG9yZSB0aGUgb3JpZ2luYWwgbG9nZ2luZwogICAgICAgICBsZXZlbC4iIiIKICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2hkbHIpCisgICAgICAgIHdoaWxlIHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBoID0gc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXQorICAgICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCisgICAgICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLm9yaWdpbmFsX2xvZ2dpbmdfbGV2ZWwpCiAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgdHJ5OgpAQCAtOTYsNiArMTIxLDEwIEBACiAgICAgICAgICAgICBsb2dnZXJEaWN0ID0gbG9nZ2luZy5nZXRMb2dnZXIoKS5tYW5hZ2VyLmxvZ2dlckRpY3QKICAgICAgICAgICAgIGxvZ2dlckRpY3QuY2xlYXIoKQogICAgICAgICAgICAgbG9nZ2VyRGljdC51cGRhdGUoc2VsZi5zYXZlZF9sb2dnZXJzKQorICAgICAgICAgICAgbG9nZ2VyX3N0YXRlcyA9IHNlbGYubG9nZ2VyX3N0YXRlcworICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5sb2dnZXJfc3RhdGVzOgorICAgICAgICAgICAgICAgIGlmIGxvZ2dlcl9zdGF0ZXNbbmFtZV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2Vyc1tuYW1lXS5kaXNhYmxlZCA9IGxvZ2dlcl9zdGF0ZXNbbmFtZV0KICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIApAQCAtMTExLDcgKzE0MCw4IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICMgU3RyaW5nSU8uU3RyaW5nSU8gbGFja3MgYSByZXNldCgpIG1ldGhvZC4KICAgICAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWN0dWFsX2xpbmVzKSwgbGVuKGV4cGVjdGVkX3ZhbHVlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICclcyB2cy4gJXMnICUgKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKICAgICAgICAgICAgIG1hdGNoID0gcGF0LnNlYXJjaChhY3R1YWwpCiAgICAgICAgICAgICBpZiBub3QgbWF0Y2g6CkBAIC0xMzgsNyArMTY4LDcgQEAKIAogICAgICAgICBFUlIgPSBsb2dnaW5nLmdldExvZ2dlcigiRVJSIikKICAgICAgICAgRVJSLnNldExldmVsKGxvZ2dpbmcuRVJST1IpCi0gICAgICAgIElORiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJJTkYiKQorICAgICAgICBJTkYgPSBsb2dnaW5nLkxvZ2dlckFkYXB0ZXIobG9nZ2luZy5nZXRMb2dnZXIoIklORiIpLCB7fSkKICAgICAgICAgSU5GLnNldExldmVsKGxvZ2dpbmcuSU5GTykKICAgICAgICAgREVCID0gbG9nZ2luZy5nZXRMb2dnZXIoIkRFQiIpCiAgICAgICAgIERFQi5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQpAQCAtMjkyLDYgKzMyMiwzNSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaGFuZGxlci5yZW1vdmVGaWx0ZXIoZmlsdGVyXykKIAorICAgIGRlZiB0ZXN0X2NhbGxhYmxlX2ZpbHRlcihzZWxmKToKKyAgICAgICAgIyBPbmx5IG1lc3NhZ2VzIHNhdGlzZnlpbmcgdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBwYXNzIHRocm91Z2ggdGhlCisgICAgICAgICMgIGZpbHRlci4KKworICAgICAgICBkZWYgZmlsdGVyZnVuYyhyZWNvcmQpOgorICAgICAgICAgICAgcGFydHMgPSByZWNvcmQubmFtZS5zcGxpdCgnLicpCisgICAgICAgICAgICBwcmVmaXggPSAnLicuam9pbihwYXJ0c1s6Ml0pCisgICAgICAgICAgICByZXR1cm4gcHJlZml4ID09ICdzcGFtLmVnZ3MnCisKKyAgICAgICAgaGFuZGxlciA9IHNlbGYucm9vdF9sb2dnZXIuaGFuZGxlcnNbMF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaGFuZGxlci5hZGRGaWx0ZXIoZmlsdGVyZnVuYykKKyAgICAgICAgICAgIHNwYW0gPSBsb2dnaW5nLmdldExvZ2dlcigic3BhbSIpCisgICAgICAgICAgICBzcGFtX2VnZ3MgPSBsb2dnaW5nLmdldExvZ2dlcigic3BhbS5lZ2dzIikKKyAgICAgICAgICAgIHNwYW1fZWdnc19maXNoID0gbG9nZ2luZy5nZXRMb2dnZXIoInNwYW0uZWdncy5maXNoIikKKyAgICAgICAgICAgIHNwYW1fYmFrZWRiZWFucyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJzcGFtLmJha2VkYmVhbnMiKQorCisgICAgICAgICAgICBzcGFtLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNwYW1fZWdncy5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpICAjIEdvb2QuCisgICAgICAgICAgICBzcGFtX2VnZ3NfZmlzaC5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpICAjIEdvb2QuCisgICAgICAgICAgICBzcGFtX2Jha2VkYmVhbnMuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnc3BhbS5lZ2dzJywgJ0lORk8nLCAnMicpLAorICAgICAgICAgICAgICAgICgnc3BhbS5lZ2dzLmZpc2gnLCAnSU5GTycsICczJyksCisgICAgICAgICAgICBdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaGFuZGxlci5yZW1vdmVGaWx0ZXIoZmlsdGVyZnVuYykKKwogCiAjCiAjICAgRmlyc3QsIHdlIGRlZmluZSBvdXIgbGV2ZWxzLiBUaGVyZSBjYW4gYmUgYXMgbWFueSBhcyB5b3Ugd2FudCAtIHRoZSBvbmx5CkBAIC0zNTUsNyArNDE0LDcgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgZm9yIGssIHYgaW4gbGlzdChteV9sb2dnaW5nX2xldmVscy5pdGVtcygpKToKKyAgICAgICAgZm9yIGssIHYgaW4gbXlfbG9nZ2luZ19sZXZlbHMuaXRlbXMoKToKICAgICAgICAgICAgIGxvZ2dpbmcuYWRkTGV2ZWxOYW1lKGssIHYpCiAKICAgICBkZWYgbG9nX2F0X2FsbF9sZXZlbHMoc2VsZiwgbG9nZ2VyKToKQEAgLTcwMiwxNCArNzYxLDggQEAKICAgICAiIiIKIAogICAgIGRlZiBhcHBseV9jb25maWcoc2VsZiwgY29uZik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZuID0gdGVtcGZpbGUubWt0ZW1wKCIuaW5pIikKLSAgICAgICAgICAgIGYgPSBvcGVuKGZuLCAidyIpCi0gICAgICAgICAgICBmLndyaXRlKHRleHR3cmFwLmRlZGVudChjb25mKSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhmbikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKHRleHR3cmFwLmRlZGVudChjb25mKSkKKyAgICAgICAgbG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZyhmaWxlKQogCiAgICAgZGVmIHRlc3RfY29uZmlnMF9vayhzZWxmKToKICAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgZmlsZSB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCkBAIC04NzYsNiArOTI5LDcgQEAKICAgICAgICAgc2VsZi5zZXJ2ZXJfY2xvc2UoKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBTb2NrZXRIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBTb2NrZXRIYW5kbGVyIG9iamVjdHMuIiIiCkBAIC05NDQsNyArOTk4LDcgQEAKICAgICAgICAgIyBUcmlnZ2VyIGN5Y2xlIGJyZWFraW5nLgogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgZGVhZCA9IFtdCi0gICAgICAgIGZvciAoaWRfLCByZXByXyksIHJlZiBpbiBsaXN0KHNlbGYuX3N1cnZpdm9ycy5pdGVtcygpKToKKyAgICAgICAgZm9yIChpZF8sIHJlcHJfKSwgcmVmIGluIHNlbGYuX3N1cnZpdm9ycy5pdGVtcygpOgogICAgICAgICAgICAgaWYgcmVmKCkgaXMgTm9uZToKICAgICAgICAgICAgICAgICBkZWFkLmFwcGVuZChyZXByXykKICAgICAgICAgaWYgZGVhZDoKQEAgLTk3OSwxMSArMTAzMywxMiBAQAogICAgIGRlZiB0ZXN0X2VuY29kaW5nX3BsYWluX2ZpbGUoc2VsZik6CiAgICAgICAgICMgSW4gUHl0aG9uIDIueCwgYSBwbGFpbiBmaWxlIG9iamVjdCBpcyB0cmVhdGVkIGFzIGhhdmluZyBubyBlbmNvZGluZy4KICAgICAgICAgbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoInRlc3QiKQotICAgICAgICBmbiA9IHRlbXBmaWxlLm1rdGVtcCgiLmxvZyIpCisgICAgICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAoIi5sb2ciLCAidGVzdF9sb2dnaW5nLTEtIikKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgICMgdGhlIG5vbi1hc2NpaSBkYXRhIHdlIHdyaXRlIHRvIHRoZSBsb2cuCiAgICAgICAgIGRhdGEgPSAiZm9vXHg4MCIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaGFuZGxlciA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoZm4sIGVuY29kaW5nPSJ1dGY4IikKKyAgICAgICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGZuLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICAgICAgbG9nLmFkZEhhbmRsZXIoaGFuZGxlcikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIHdyaXRlIG5vbi1hc2NpaSBkYXRhIHRvIHRoZSBsb2cuCkBAIC05OTIsNyArMTA0Nyw3IEBACiAgICAgICAgICAgICAgICAgbG9nLnJlbW92ZUhhbmRsZXIoaGFuZGxlcikKICAgICAgICAgICAgICAgICBoYW5kbGVyLmNsb3NlKCkKICAgICAgICAgICAgICMgY2hlY2sgd2Ugd3JvdGUgZXhhY3RseSB0aG9zZSBieXRlcywgaWdub3JpbmcgdHJhaWxpbmcgXG4gZXRjCi0gICAgICAgICAgICBmID0gb3BlbihmbiwgZW5jb2Rpbmc9InV0ZjgiKQorICAgICAgICAgICAgZiA9IG9wZW4oZm4sIGVuY29kaW5nPSJ1dGYtOCIpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKS5yc3RyaXAoKSwgZGF0YSkKICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC0xMDUxLDE1ICsxMTA2LDEyMzkgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgbG9nZ2luZy5jYXB0dXJlV2FybmluZ3MoRmFsc2UpCiAKKworZGVmIGZvcm1hdEZ1bmMoZm9ybWF0LCBkYXRlZm10PU5vbmUpOgorICAgIHJldHVybiBsb2dnaW5nLkZvcm1hdHRlcihmb3JtYXQsIGRhdGVmbXQpCisKK2RlZiBoYW5kbGVyRnVuYygpOgorICAgIHJldHVybiBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorCitjbGFzcyBDdXN0b21IYW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgcGFzcworCitjbGFzcyBDb25maWdEaWN0VGVzdChCYXNlVGVzdCk6CisKKyAgICAiIiJSZWFkaW5nIGxvZ2dpbmcgY29uZmlnIGZyb20gYSBkaWN0aW9uYXJ5LiIiIgorCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihbXHddKykgXCtcKyAoW1x3XSspJCIKKworICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCisgICAgY29uZmlnMCA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzEgYWRkcyBhIGxpdHRsZSB0byB0aGUgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KKyAgICBjb25maWcxID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnMWEgbW92ZXMgdGhlIGhhbmRsZXIgdG8gdGhlIHJvb3QuIFVzZWQgd2l0aCBjb25maWc4YQorICAgIGNvbmZpZzFhID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWcyIGhhcyBhIHN1YnRsZSBjb25maWd1cmF0aW9uIGVycm9yIHRoYXQgc2hvdWxkIGJlIHJlcG9ydGVkCisgICAgY29uZmlnMiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZGJvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzEgYnV0IHdpdGggYSBtaXNzcGVsdCBsZXZlbCBvbiBhIGhhbmRsZXIKKyAgICBjb25maWcyYSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTlRPU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgbWlzc3BlbHQgbGV2ZWwgb24gYSBsb2dnZXIKKyAgICBjb25maWcyYiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXUkFOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzMgaGFzIGEgbGVzcyBzdWJ0bGUgY29uZmlndXJhdGlvbiBlcnJvcgorICAgIGNvbmZpZzMgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJyA6ICdsb2dnaW5nLlN0cmVhbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ21pc3NwZWxsZWRfbmFtZScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgY29uZmlnNCBzcGVjaWZpZXMgYSBjdXN0b20gZm9ybWF0dGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgIGNvbmZpZzQgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBfX25hbWVfXyArICcuRXhjZXB0aW9uRm9ybWF0dGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKworICAgICMgQXMgY29uZmlnNCBidXQgdXNpbmcgYW4gYWN0dWFsIGNhbGxhYmxlIHJhdGhlciB0aGFuIGEgc3RyaW5nCisgICAgY29uZmlnNGEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICcoKScgOiBFeGNlcHRpb25Gb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2Zvcm0yJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogX19uYW1lX18gKyAnLmZvcm1hdEZ1bmMnLAorICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXM6JShuYW1lKXM6JShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdmb3JtMycgOiB7CisgICAgICAgICAgICAgICAgJygpJyA6IGZvcm1hdEZ1bmMsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpczolKG5hbWUpczolKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2hhbmQyJyA6IHsKKyAgICAgICAgICAgICAgICAnKCknIDogaGFuZGxlckZ1bmMsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzUgc3BlY2lmaWVzIGEgY3VzdG9tIGhhbmRsZXIgY2xhc3MgdG8gYmUgbG9hZGVkCisgICAgY29uZmlnNSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogX19uYW1lX18gKyAnLkN1c3RvbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc2IHNwZWNpZmllcyBhIGN1c3RvbSBoYW5kbGVyIGNsYXNzIHRvIGJlIGxvYWRlZAorICAgICMgYnV0IGhhcyBiYWQgYXJndW1lbnRzCisgICAgY29uZmlnNiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogX19uYW1lX18gKyAnLkN1c3RvbUhhbmRsZXInLAorICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInIDogJ2Zvcm0xJywKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgICAgICAgICAgJ3N0cmVhbScgIDogJ2V4dDovL3N5cy5zdGRvdXQnLAorICAgICAgICAgICAgICAgICc5JyA6ICdpbnZhbGlkIHBhcmFtZXRlciBuYW1lJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgICNjb25maWcgNyBkb2VzIG5vdCBkZWZpbmUgY29tcGlsZXIucGFyc2VyIGJ1dCBkZWZpbmVzIGNvbXBpbGVyLmxleGVyCisgICAgI3NvIGNvbXBpbGVyLnBhcnNlciBzaG91bGQgYmUgZGlzYWJsZWQgYWZ0ZXIgYXBwbHlpbmcgaXQKKyAgICBjb25maWc3ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5sZXhlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgIyBjb25maWc4IGRlZmluZXMgYm90aCBjb21waWxlciBhbmQgY29tcGlsZXIubGV4ZXIKKyAgICAjIHNvIGNvbXBpbGVyLnBhcnNlciBzaG91bGQgbm90IGJlIGRpc2FibGVkIChzaW5jZQorICAgICMgY29tcGlsZXIgaXMgZGVmaW5lZCkKKyAgICBjb25maWc4ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnMnIDogRmFsc2UsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnY29tcGlsZXIubGV4ZXInIDogeworICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjIGNvbmZpZzhhIGRpc2FibGVzIGV4aXN0aW5nIGxvZ2dlcnMKKyAgICBjb25maWc4YSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJyA6IFRydWUsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAnY29tcGlsZXIubGV4ZXInIDogeworICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ3Jvb3QnIDogeworICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdXQVJOSU5HJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ05PVFNFVCcsCisgICAgICAgIH0sCisgICAgfQorCisgICAgY29uZmlnOWEgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2luY3JlbWVudGFsJyA6IFRydWUsCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0lORk8nLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICBjb25maWc5YiA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnaW5jcmVtZW50YWwnIDogVHJ1ZSwKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdJTkZPJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnSU5GTycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgIH0KKworICAgICNBcyBjb25maWcxIGJ1dCB3aXRoIGEgZmlsdGVyIGFkZGVkCisgICAgY29uZmlnMTAgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMSwKKyAgICAgICAgJ2Zvcm1hdHRlcnMnOiB7CisgICAgICAgICAgICAnZm9ybTEnIDogeworICAgICAgICAgICAgICAgICdmb3JtYXQnIDogJyUobGV2ZWxuYW1lKXMgKysgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKKyAgICAgICAgJ2ZpbHRlcnMnIDogeworICAgICAgICAgICAgJ2ZpbHQxJyA6IHsKKyAgICAgICAgICAgICAgICAnbmFtZScgOiAnY29tcGlsZXIucGFyc2VyJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnZmlsdGVycycgOiBbJ2ZpbHQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnbG9nZ2VycycgOiB7CisgICAgICAgICAgICAnY29tcGlsZXIucGFyc2VyJyA6IHsKKyAgICAgICAgICAgICAgICAnbGV2ZWwnIDogJ0RFQlVHJywKKyAgICAgICAgICAgICAgICAnZmlsdGVycycgOiBbJ2ZpbHQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgfSwKKyAgICB9CisKKyAgICAjQXMgY29uZmlnMSBidXQgdXNpbmcgY2ZnOi8vIHJlZmVyZW5jZXMKKyAgICBjb25maWcxMSA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzExIGJ1dCBtaXNzaW5nIHRoZSB2ZXJzaW9uIGtleQorICAgIGNvbmZpZzEyID0geworICAgICAgICAndHJ1ZV9mb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVyX2NvbmZpZ3MnOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdmb3JtYXR0ZXJzJyA6ICdjZmc6Ly90cnVlX2Zvcm1hdHRlcnMnLAorICAgICAgICAnaGFuZGxlcnMnIDogeworICAgICAgICAgICAgJ2hhbmQxJyA6ICdjZmc6Ly9oYW5kbGVyX2NvbmZpZ3NbaGFuZDFdJywKKyAgICAgICAgfSwKKyAgICAgICAgJ2xvZ2dlcnMnIDogeworICAgICAgICAgICAgJ2NvbXBpbGVyLnBhcnNlcicgOiB7CisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdERUJVRycsCisgICAgICAgICAgICAgICAgJ2hhbmRsZXJzJyA6IFsnaGFuZDEnXSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgIH0sCisgICAgfQorCisgICAgI0FzIGNvbmZpZzExIGJ1dCB1c2luZyBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uCisgICAgY29uZmlnMTMgPSB7CisgICAgICAgICd2ZXJzaW9uJzogMiwKKyAgICAgICAgJ3RydWVfZm9ybWF0dGVycyc6IHsKKyAgICAgICAgICAgICdmb3JtMScgOiB7CisgICAgICAgICAgICAgICAgJ2Zvcm1hdCcgOiAnJShsZXZlbG5hbWUpcyArKyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcl9jb25maWdzJzogeworICAgICAgICAgICAgJ2hhbmQxJyA6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnIDogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcicgOiAnZm9ybTEnLAorICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnTk9UU0VUJywKKyAgICAgICAgICAgICAgICAnc3RyZWFtJyAgOiAnZXh0Oi8vc3lzLnN0ZG91dCcsCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAnZm9ybWF0dGVycycgOiAnY2ZnOi8vdHJ1ZV9mb3JtYXR0ZXJzJywKKyAgICAgICAgJ2hhbmRsZXJzJyA6IHsKKyAgICAgICAgICAgICdoYW5kMScgOiAnY2ZnOi8vaGFuZGxlcl9jb25maWdzW2hhbmQxXScsCisgICAgICAgIH0sCisgICAgICAgICdsb2dnZXJzJyA6IHsKKyAgICAgICAgICAgICdjb21waWxlci5wYXJzZXInIDogeworICAgICAgICAgICAgICAgICdsZXZlbCcgOiAnREVCVUcnLAorICAgICAgICAgICAgICAgICdoYW5kbGVycycgOiBbJ2hhbmQxJ10sCisgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICAncm9vdCcgOiB7CisgICAgICAgICAgICAnbGV2ZWwnIDogJ1dBUk5JTkcnLAorICAgICAgICB9LAorICAgIH0KKworICAgIGRlZiBhcHBseV9jb25maWcoc2VsZiwgY29uZik6CisgICAgICAgIGxvZ2dpbmcuY29uZmlnLmRpY3RDb25maWcoY29uZikKKworICAgIGRlZiB0ZXN0X2NvbmZpZzBfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKKyAgICAgICAgIyBBIGNvbmZpZyBkZWZpbmluZyBhIHN1Yi1wYXJzZXIgYXMgd2VsbC4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhjb25maWcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWcyX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIHdoaWNoIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZXR0aW5ncy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcyKQorCisgICAgZGVmIHRlc3RfY29uZmlnMmFfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzJhKQorCisgICAgZGVmIHRlc3RfY29uZmlnMmJfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBBIHNpbXBsZSBjb25maWcgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzJiKQorCisgICAgZGVmIHRlc3RfY29uZmlnM19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIEEgc2ltcGxlIGNvbmZpZyB3aGljaCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgc2VsZi5hcHBseV9jb25maWcsIHNlbGYuY29uZmlnMykKKworICAgIGRlZiB0ZXN0X2NvbmZpZzRfb2soc2VsZik6CisgICAgICAgICMgQSBjb25maWcgc3BlY2lmeWluZyBhIGN1c3RvbSBmb3JtYXR0ZXIgY2xhc3MuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc0KQorICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigianVzdCB0ZXN0aW5nIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWc0YV9vayhzZWxmKToKKyAgICAgICAgIyBBIGNvbmZpZyBzcGVjaWZ5aW5nIGEgY3VzdG9tIGZvcm1hdHRlciBjbGFzcy4KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzRhKQorICAgICAgICAgICAgI2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigianVzdCB0ZXN0aW5nIikKKyAgICAgICAgICAgIHN5cy5zdGRvdXQuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgICAgICAiRVJST1I6cm9vdDpqdXN0IHRlc3RpbmdcbkdvdCBhIFtSdW50aW1lRXJyb3JdXG4iKQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5CisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWc1X29rKHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RfY29uZmlnMV9vayhjb25maWc9c2VsZi5jb25maWc1KQorCisgICAgZGVmIHRlc3RfY29uZmlnNl9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzYpCisKKyAgICBkZWYgdGVzdF9jb25maWc3X29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYuY29uZmlnMSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzcpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIucGFyc2VyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2dnZXIuZGlzYWJsZWQpCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigiY29tcGlsZXIubGV4ZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworICAgICNTYW1lIGFzIHRlc3RfY29uZmlnXzdfb2sgYnV0IGRvbid0IGRpc2FibGUgb2xkIGxvZ2dlcnMuCisgICAgZGVmIHRlc3RfY29uZmlnXzhfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEFsbCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc4KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnSU5GTycsICczJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICAgICAgKCdJTkZPJywgJzUnKSwKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzYnKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKKyAgICBkZWYgdGVzdF9jb25maWdfOGFfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxYSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBTZWUgaXNzdWUgIzExNDI0LiBjb21waWxlci1oeXBoZW5hdGVkIHNvcnRzCisgICAgICAgICAgICAjIGJldHdlZW4gY29tcGlsZXIgYW5kIGNvbXBpbGVyLnh5eiBhbmQgdGhpcworICAgICAgICAgICAgIyB3YXMgcHJldmVudGluZyBjb21waWxlci54eXogZnJvbSBiZWluZyBpbmNsdWRlZAorICAgICAgICAgICAgIyBpbiB0aGUgY2hpbGQgbG9nZ2VycyBvZiBjb21waWxlciBiZWNhdXNlIG9mIGFuCisgICAgICAgICAgICAjIG92ZXJ6ZWFsb3VzIGxvb3AgdGVybWluYXRpb24gY29uZGl0aW9uLgorICAgICAgICAgICAgaHlwaGVuYXRlZCA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdjb21waWxlci1oeXBoZW5hdGVkJykKKyAgICAgICAgICAgICMgQWxsIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgaHlwaGVuYXRlZC5jcml0aWNhbChzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgICAgICgnQ1JJVElDQUwnLCAnMycpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzhhKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvZ2dlci5kaXNhYmxlZCkKKyAgICAgICAgICAgICMgQm90aCB3aWxsIG91dHB1dCBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBsb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5sZXhlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICAjIFdpbGwgbm90IGFwcGVhcgorICAgICAgICAgICAgaHlwaGVuYXRlZC5jcml0aWNhbChzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnNCcpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnNScpLAorICAgICAgICAgICAgICAgICgnSU5GTycsICc2JyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc3JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdKQorCisgICAgZGVmIHRlc3RfY29uZmlnXzlfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc5KQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjTm90aGluZyB3aWxsIGJlIG91dHB1dCBzaW5jZSBib3RoIGhhbmRsZXIgYW5kIGxvZ2dlciBhcmUgc2V0IHRvIFdBUk5JTkcKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzlhKQorICAgICAgICAgICAgI05vdGhpbmcgd2lsbCBiZSBvdXRwdXQgc2luY2UgYm90aCBoYW5kbGVyIGlzIHN0aWxsIHNldCB0byBXQVJOSU5HCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFtdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWc5YikKKyAgICAgICAgICAgICNNZXNzYWdlIHNob3VsZCBub3cgYmUgb3V0cHV0CisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMycpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ18xMF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmNvbmZpZzEwKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyLmxleGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlci5jb2RlZ2VuIikKKyAgICAgICAgICAgICNPdXRwdXQsIGFzIG5vdCBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnV0FSTklORycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfY29uZmlnMTFfb2soc2VsZik6CisgICAgICAgIHNlbGYudGVzdF9jb25maWcxX29rKHNlbGYuY29uZmlnMTEpCisKKyAgICBkZWYgdGVzdF9jb25maWcxMl9mYWlsdXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEyKQorCisgICAgZGVmIHRlc3RfY29uZmlnMTNfZmFpbHVyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLCBzZWxmLmFwcGx5X2NvbmZpZywgc2VsZi5jb25maWcxMykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ2xpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrJykKKyAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQpOgorICAgICAgICB0ZXh0ID0gdGV4dC5lbmNvZGUoInV0Zi04IikKKyAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQorICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICB0LnJlYWR5LndhaXQoKQorICAgICAgICAjIE5vdyBnZXQgdGhlIHBvcnQgYWxsb2NhdGVkCisgICAgICAgIHBvcnQgPSB0LnBvcnQKKyAgICAgICAgdC5yZWFkeS5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMi4wKQorICAgICAgICAgICAgc29jay5jb25uZWN0KCgnbG9jYWxob3N0JywgcG9ydCkpCisKKyAgICAgICAgICAgIHNsZW4gPSBzdHJ1Y3QucGFjaygnPkwnLCBsZW4odGV4dCkpCisgICAgICAgICAgICBzID0gc2xlbiArIHRleHQKKyAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKKyAgICAgICAgICAgIGxlZnQgPSBsZW4ocykKKyAgICAgICAgICAgIHdoaWxlIGxlZnQgPiAwOgorICAgICAgICAgICAgICAgIHNlbnQgPSBzb2NrLnNlbmQoc1tzZW50c29mYXI6XSkKKyAgICAgICAgICAgICAgICBzZW50c29mYXIgKz0gc2VudAorICAgICAgICAgICAgICAgIGxlZnQgLT0gc2VudAorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LnJlYWR5LndhaXQoMi4wKQorICAgICAgICAgICAgbG9nZ2luZy5jb25maWcuc3RvcExpc3RlbmluZygpCisgICAgICAgICAgICB0LmpvaW4oMi4wKQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xMF9vayhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcihqc29uLmR1bXBzKHNlbGYuY29uZmlnMTApKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2NvbXBpbGVyLmxleGVyJykKKyAgICAgICAgICAgICNOb3Qgb3V0cHV0LCBiZWNhdXNlIGZpbHRlcmVkCisgICAgICAgICAgICBsb2dnZXIud2FybmluZyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlci5jb2RlZ2VuIikKKyAgICAgICAgICAgICNPdXRwdXQsIGFzIG5vdCBmaWx0ZXJlZAorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgICAgICgnV0FSTklORycsICcxJyksCisgICAgICAgICAgICAgICAgKCdFUlJPUicsICc0JyksCisgICAgICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorCisgICAgZGVmIHRlc3RfbGlzdGVuX2NvbmZpZ18xX29rKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRleHR3cmFwLmRlZGVudChDb25maWdGaWxlVGVzdC5jb25maWcxKSkKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICAgICAgXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKKworCitjbGFzcyBNYW5hZ2VyVGVzdChCYXNlVGVzdCk6CisgICAgZGVmIHRlc3RfbWFuYWdlcl9sb2dnZXJjbGFzcyhzZWxmKToKKyAgICAgICAgbG9nZ2VkID0gW10KKworICAgICAgICBjbGFzcyBNeUxvZ2dlcihsb2dnaW5nLkxvZ2dlcik6CisgICAgICAgICAgICBkZWYgX2xvZyhzZWxmLCBsZXZlbCwgbXNnLCBhcmdzLCBleGNfaW5mbz1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgICAgICAgICBsb2dnZWQuYXBwZW5kKG1zZykKKworICAgICAgICBtYW4gPSBsb2dnaW5nLk1hbmFnZXIoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYW4uc2V0TG9nZ2VyQ2xhc3MsIGludCkKKyAgICAgICAgbWFuLnNldExvZ2dlckNsYXNzKE15TG9nZ2VyKQorICAgICAgICBsb2dnZXIgPSBtYW4uZ2V0TG9nZ2VyKCd0ZXN0JykKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3Nob3VsZCBhcHBlYXIgaW4gbG9nZ2VkJykKKyAgICAgICAgbG9nZ2luZy53YXJuaW5nKCdzaG91bGQgbm90IGFwcGVhciBpbiBsb2dnZWQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2VkLCBbJ3Nob3VsZCBhcHBlYXIgaW4gbG9nZ2VkJ10pCisKKworY2xhc3MgQ2hpbGRMb2dnZXJUZXN0KEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9jaGlsZF9sb2dnZXJzKHNlbGYpOgorICAgICAgICByID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBsMSA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdhYmMnKQorICAgICAgICBsMiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdkZWYuZ2hpJykKKyAgICAgICAgYzEgPSByLmdldENoaWxkKCd4eXonKQorICAgICAgICBjMiA9IHIuZ2V0Q2hpbGQoJ3V2dy54eXonKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzEgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3h5eicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKKyAgICAgICAgYzEgPSBsMS5nZXRDaGlsZCgnZGVmJykKKyAgICAgICAgYzIgPSBjMS5nZXRDaGlsZCgnZ2hpJykKKyAgICAgICAgYzMgPSBsMS5nZXRDaGlsZCgnZGVmLmdoaScpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBjMykKKworCitjbGFzcyBEZXJpdmVkTG9nUmVjb3JkKGxvZ2dpbmcuTG9nUmVjb3JkKToKKyAgICBwYXNzCisKK2NsYXNzIExvZ1JlY29yZEZhY3RvcnlUZXN0KEJhc2VUZXN0KToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgQ2hlY2tpbmdGaWx0ZXIobG9nZ2luZy5GaWx0ZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNscyk6CisgICAgICAgICAgICAgICAgc2VsZi5jbHMgPSBjbHMKKworICAgICAgICAgICAgZGVmIGZpbHRlcihzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgICAgIHQgPSB0eXBlKHJlY29yZCkKKyAgICAgICAgICAgICAgICBpZiB0IGlzIG5vdCBzZWxmLmNsczoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ1VuZXhwZWN0ZWQgTG9nUmVjb3JkIHR5cGUgJXMsIGV4cGVjdGVkICVzJyAlICh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xzKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5maWx0ZXIgPSBDaGVja2luZ0ZpbHRlcihEZXJpdmVkTG9nUmVjb3JkKQorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEZpbHRlcihzZWxmLmZpbHRlcikKKyAgICAgICAgc2VsZi5vcmlnX2ZhY3RvcnkgPSBsb2dnaW5nLmdldExvZ1JlY29yZEZhY3RvcnkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUZpbHRlcihzZWxmLmZpbHRlcikKKyAgICAgICAgQmFzZVRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgbG9nZ2luZy5zZXRMb2dSZWNvcmRGYWN0b3J5KHNlbGYub3JpZ19mYWN0b3J5KQorCisgICAgZGVmIHRlc3RfbG9ncmVjb3JkX2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucm9vdF9sb2dnZXIud2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgbG9nZ2luZy5zZXRMb2dSZWNvcmRGYWN0b3J5KERlcml2ZWRMb2dSZWNvcmQpCisgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXJyb3Ioc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgKCdyb290JywgJ0VSUk9SJywgJzInKSwKKyAgICAgICAgXSkKKworCitjbGFzcyBRdWV1ZUhhbmRsZXJUZXN0KEJhc2VUZXN0KToKKyAgICAjIERvIG5vdCBib3RoZXIgd2l0aCBhIGxvZ2dlciBuYW1lIGdyb3VwLgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFtcd10rKTogKFtcZF0rKSQiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCisgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZS5RdWV1ZSgtMSkKKyAgICAgICAgc2VsZi5xdWVfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuUXVldWVIYW5kbGVyKHNlbGYucXVldWUpCisgICAgICAgIHNlbGYucXVlX2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdxdWUnKQorICAgICAgICBzZWxmLnF1ZV9sb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5xdWVfbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgc2VsZi5xdWVfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5xdWVfaGRscikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5xdWVfaGRsci5jbG9zZSgpCisgICAgICAgIEJhc2VUZXN0LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgdGVzdF9xdWV1ZV9oYW5kbGVyKHNlbGYpOgorICAgICAgICBzZWxmLnF1ZV9sb2dnZXIuZGVidWcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocXVldWUuRW1wdHksIHNlbGYucXVldWUuZ2V0X25vd2FpdCkKKyAgICAgICAgc2VsZi5xdWVfbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocXVldWUuRW1wdHksIHNlbGYucXVldWUuZ2V0X25vd2FpdCkKKyAgICAgICAgbXNnID0gc2VsZi5uZXh0X21lc3NhZ2UoKQorICAgICAgICBzZWxmLnF1ZV9sb2dnZXIud2FybmluZyhtc2cpCisgICAgICAgIGRhdGEgPSBzZWxmLnF1ZXVlLmdldF9ub3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkYXRhLCBsb2dnaW5nLkxvZ1JlY29yZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YS5uYW1lLCBzZWxmLnF1ZV9sb2dnZXIubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoZGF0YS5tc2csIGRhdGEuYXJncyksIChtc2csIE5vbmUpKQorCisgICAgZGVmIHRlc3RfcXVldWVfbGlzdGVuZXIoc2VsZik6CisgICAgICAgIGhhbmRsZXIgPSBUZXN0SGFuZGxlcihNYXRjaGVyKCkpCisgICAgICAgIGxpc3RlbmVyID0gbG9nZ2luZy5oYW5kbGVycy5RdWV1ZUxpc3RlbmVyKHNlbGYucXVldWUsIGhhbmRsZXIpCisgICAgICAgIGxpc3RlbmVyLnN0YXJ0KCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5xdWVfbG9nZ2VyLndhcm5pbmcoc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIHNlbGYucXVlX2xvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5xdWVfbG9nZ2VyLmNyaXRpY2FsKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsaXN0ZW5lci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhbmRsZXIubWF0Y2hlcyhsZXZlbG5vPWxvZ2dpbmcuV0FSTklORywgbWVzc2FnZT0nMScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5FUlJPUiwgbWVzc2FnZT0nMicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlci5tYXRjaGVzKGxldmVsbm89bG9nZ2luZy5DUklUSUNBTCwgbWVzc2FnZT0nMycpKQorCisKK2NsYXNzIEZvcm1hdHRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jb21tb24gPSB7CisgICAgICAgICAgICAnbmFtZSc6ICdmb3JtYXR0ZXIudGVzdCcsCisgICAgICAgICAgICAnbGV2ZWwnOiBsb2dnaW5nLkRFQlVHLAorICAgICAgICAgICAgJ3BhdGhuYW1lJzogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ2R1bW15LmV4dCcpLAorICAgICAgICAgICAgJ2xpbmVubyc6IDQyLAorICAgICAgICAgICAgJ2V4Y19pbmZvJzogTm9uZSwKKyAgICAgICAgICAgICdmdW5jJzogTm9uZSwKKyAgICAgICAgICAgICdtc2cnOiAnTWVzc2FnZSB3aXRoICVkICVzJywKKyAgICAgICAgICAgICdhcmdzJzogKDIsICdwbGFjZWhvbGRlcnMnKSwKKyAgICAgICAgfQorICAgICAgICBzZWxmLnZhcmlhbnRzID0geworICAgICAgICB9CisKKyAgICBkZWYgZ2V0X3JlY29yZChzZWxmLCBuYW1lPU5vbmUpOgorICAgICAgICByZXN1bHQgPSBkaWN0KHNlbGYuY29tbW9uKQorICAgICAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzdWx0LnVwZGF0ZShzZWxmLnZhcmlhbnRzW25hbWVdKQorICAgICAgICByZXR1cm4gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3BlcmNlbnQoc2VsZik6CisgICAgICAgICMgVGVzdCAlLWZvcm1hdHRpbmcKKyAgICAgICAgciA9IHNlbGYuZ2V0X3JlY29yZCgpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJHslKG1lc3NhZ2Upc30nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZm9ybWF0KHIpLCAnJHtNZXNzYWdlIHdpdGggMiBwbGFjZWhvbGRlcnN9JykKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKHJhbmRvbSlzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGYuZm9ybWF0LCByKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYudXNlc1RpbWUoKSkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCclKGFzY3RpbWUpcycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnVzZXNUaW1lKCkpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJShhc2N0aW1lKS0xNXMnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi51c2VzVGltZSgpKQorICAgICAgICBmID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJ2FzY3RpbWUnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYudXNlc1RpbWUoKSkKKworICAgIGRlZiB0ZXN0X2JyYWNlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHt9LWZvcm1hdHRpbmcKKyAgICAgICAgciA9IHNlbGYuZ2V0X3JlY29yZCgpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJCV7bWVzc2FnZX0lJCcsIHN0eWxlPSd7JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZvcm1hdChyKSwgJyQlTWVzc2FnZSB3aXRoIDIgcGxhY2Vob2xkZXJzJSQnKQorICAgICAgICBmID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJ3tyYW5kb219Jywgc3R5bGU9J3snKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZi5mb3JtYXQsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi51c2VzVGltZSgpKQorICAgICAgICBmID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJ3thc2N0aW1lfScsIHN0eWxlPSd7JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYudXNlc1RpbWUoKSkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCd7YXNjdGltZSFzOjE1fScsIHN0eWxlPSd7JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYudXNlc1RpbWUoKSkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCd7YXNjdGltZToxNX0nLCBzdHlsZT0neycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnVzZXNUaW1lKCkpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignYXNjdGltZScsIHN0eWxlPSd7JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLnVzZXNUaW1lKCkpCisKKyAgICBkZWYgdGVzdF9kb2xsYXJzKHNlbGYpOgorICAgICAgICAjIFRlc3QgJC1mb3JtYXR0aW5nCisgICAgICAgIHIgPSBzZWxmLmdldF9yZWNvcmQoKQorICAgICAgICBmID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyRtZXNzYWdlJywgc3R5bGU9JyQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZm9ybWF0KHIpLCAnTWVzc2FnZSB3aXRoIDIgcGxhY2Vob2xkZXJzJykKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCckJCUke21lc3NhZ2V9JSQkJywgc3R5bGU9JyQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZm9ybWF0KHIpLCAnJCVNZXNzYWdlIHdpdGggMiBwbGFjZWhvbGRlcnMlJCcpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJHtyYW5kb219Jywgc3R5bGU9JyQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZi5mb3JtYXQsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi51c2VzVGltZSgpKQorICAgICAgICBmID0gbG9nZ2luZy5Gb3JtYXR0ZXIoJyR7YXNjdGltZX0nLCBzdHlsZT0nJCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnVzZXNUaW1lKCkpCisgICAgICAgIGYgPSBsb2dnaW5nLkZvcm1hdHRlcignJHthc2N0aW1lJywgc3R5bGU9JyQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYudXNlc1RpbWUoKSkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCckYXNjdGltZScsIHN0eWxlPSckJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYudXNlc1RpbWUoKSkKKyAgICAgICAgZiA9IGxvZ2dpbmcuRm9ybWF0dGVyKCdhc2N0aW1lJywgc3R5bGU9JyQnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYudXNlc1RpbWUoKSkKKworY2xhc3MgTGFzdFJlc29ydFRlc3QoQmFzZVRlc3QpOgorICAgIGRlZiB0ZXN0X2xhc3RfcmVzb3J0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGxhc3QgcmVzb3J0IGhhbmRsZXIKKyAgICAgICAgcm9vdCA9IHNlbGYucm9vdF9sb2dnZXIKKyAgICAgICAgcm9vdC5yZW1vdmVIYW5kbGVyKHNlbGYucm9vdF9oZGxyKQorICAgICAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICBvbGRfbGFzdHJlc29ydCA9IGxvZ2dpbmcubGFzdFJlc29ydAorICAgICAgICBvbGRfcmFpc2VfZXhjZXB0aW9ucyA9IGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzaW8gPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICByb290Lndhcm5pbmcoJ1RoaXMgaXMgeW91ciBmaW5hbCBjaGFuY2UhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICdUaGlzIGlzIHlvdXIgZmluYWwgY2hhbmNlIVxuJykKKyAgICAgICAgICAgICNObyBoYW5kbGVycyBhbmQgbm8gbGFzdCByZXNvcnQsIHNvICdObyBoYW5kbGVycycgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2luZy5sYXN0UmVzb3J0ID0gTm9uZQorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNpbyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHJvb3Qud2FybmluZygnVGhpcyBpcyB5b3VyIGZpbmFsIGNoYW5jZSEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgJ05vIGhhbmRsZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgInJvb3QiXG4nKQorICAgICAgICAgICAgIyAnTm8gaGFuZGxlcnMnIG1lc3NhZ2Ugb25seSBwcmludGVkIG9uY2UKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzaW8gPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICByb290Lndhcm5pbmcoJ1RoaXMgaXMgeW91ciBmaW5hbCBjaGFuY2UhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lvLmdldHZhbHVlKCksICcnKQorICAgICAgICAgICAgcm9vdC5tYW5hZ2VyLmVtaXR0ZWROb0hhbmRsZXJXYXJuaW5nID0gRmFsc2UKKyAgICAgICAgICAgICNJZiByYWlzZUV4Y2VwdGlvbnMgaXMgRmFsc2UsIG5vIG1lc3NhZ2UgaXMgcHJpbnRlZAorICAgICAgICAgICAgbG9nZ2luZy5yYWlzZUV4Y2VwdGlvbnMgPSBGYWxzZQorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHNpbyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHJvb3Qud2FybmluZygnVGhpcyBpcyB5b3VyIGZpbmFsIGNoYW5jZSEnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaW8uZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gb2xkX3N0ZGVycgorICAgICAgICAgICAgcm9vdC5hZGRIYW5kbGVyKHNlbGYucm9vdF9oZGxyKQorICAgICAgICAgICAgbG9nZ2luZy5sYXN0UmVzb3J0ID0gb2xkX2xhc3RyZXNvcnQKKyAgICAgICAgICAgIGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zID0gb2xkX3JhaXNlX2V4Y2VwdGlvbnMKKworCitjbGFzcyBCYXNlRmlsZVRlc3QoQmFzZVRlc3QpOgorICAgICJCYXNlIGNsYXNzIGZvciBoYW5kbGVyIHRlc3RzIHRoYXQgd3JpdGUgbG9nIGZpbGVzIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBCYXNlVGVzdC5zZXRVcChzZWxmKQorICAgICAgICBmZCwgc2VsZi5mbiA9IHRlbXBmaWxlLm1rc3RlbXAoIi5sb2ciLCAidGVzdF9sb2dnaW5nLTItIikKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHNlbGYucm1maWxlcyA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZvciBmbiBpbiBzZWxmLnJtZmlsZXM6CisgICAgICAgICAgICBvcy51bmxpbmsoZm4pCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZm4pOgorICAgICAgICAgICAgb3MudW5saW5rKHNlbGYuZm4pCisgICAgICAgIEJhc2VUZXN0LnRlYXJEb3duKHNlbGYpCisKKyAgICBkZWYgYXNzZXJ0TG9nRmlsZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICJBc3NlcnQgYSBsb2cgZmlsZSBpcyB0aGVyZSBhbmQgcmVnaXN0ZXIgaXQgZm9yIGRlbGV0aW9uIgorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZmlsZW5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJMb2cgZmlsZSAlciBkb2VzIG5vdCBleGlzdCIpCisgICAgICAgIHNlbGYucm1maWxlcy5hcHBlbmQoZmlsZW5hbWUpCisKKworY2xhc3MgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QoQmFzZUZpbGVUZXN0KToKKyAgICBkZWYgbmV4dF9yZWMoc2VsZik6CisgICAgICAgIHJldHVybiBsb2dnaW5nLkxvZ1JlY29yZCgnbicsIGxvZ2dpbmcuREVCVUcsICdwJywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmV4dF9tZXNzYWdlKCksIE5vbmUsIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zaG91bGRfbm90X3JvbGxvdmVyKHNlbGYpOgorICAgICAgICAjIElmIG1heGJ5dGVzIGlzIHplcm8gcm9sbG92ZXIgbmV2ZXIgb2NjdXJzCisgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyKHNlbGYuZm4sIG1heEJ5dGVzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocmguc2hvdWxkUm9sbG92ZXIoTm9uZSkpCisgICAgICAgIHJoLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9yb2xsb3ZlcihzZWxmKToKKyAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIoc2VsZi5mbiwgbWF4Qnl0ZXM9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJoLnNob3VsZFJvbGxvdmVyKHNlbGYubmV4dF9yZWMoKSkpCisgICAgICAgIHJoLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2ZpbGVfY3JlYXRlZChzZWxmKToKKyAgICAgICAgIyBjaGVja3MgdGhhdCB0aGUgZmlsZSBpcyBjcmVhdGVkIGFuZCBhc3N1bWVzIGl0IHdhcyBjcmVhdGVkCisgICAgICAgICMgYnkgdXMKKyAgICAgICAgcmggPSBsb2dnaW5nLmhhbmRsZXJzLlJvdGF0aW5nRmlsZUhhbmRsZXIoc2VsZi5mbikKKyAgICAgICAgcmguZW1pdChzZWxmLm5leHRfcmVjKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0TG9nRmlsZShzZWxmLmZuKQorICAgICAgICByaC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yb2xsb3Zlcl9maWxlbmFtZXMoc2VsZik6CisgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5Sb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgc2VsZi5mbiwgYmFja3VwQ291bnQ9MiwgbWF4Qnl0ZXM9MSkKKyAgICAgICAgcmguZW1pdChzZWxmLm5leHRfcmVjKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0TG9nRmlsZShzZWxmLmZuKQorICAgICAgICByaC5lbWl0KHNlbGYubmV4dF9yZWMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMb2dGaWxlKHNlbGYuZm4gKyAiLjEiKQorICAgICAgICByaC5lbWl0KHNlbGYubmV4dF9yZWMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMb2dGaWxlKHNlbGYuZm4gKyAiLjIiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuZm4gKyAiLjMiKSkKKyAgICAgICAgcmguY2xvc2UoKQorCitjbGFzcyBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0KEJhc2VGaWxlVGVzdCk6CisgICAgIyB0ZXN0IG1ldGhvZHMgYWRkZWQgYmVsb3cKKyAgICBwYXNzCisKK2RlZiBzZWNzKCoqa3cpOgorICAgIHJldHVybiBkYXRldGltZS50aW1lZGVsdGEoKiprdykgLy8gZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MSkKKworZm9yIHdoZW4sIGV4cCBpbiAoKCdTJywgMSksCisgICAgICAgICAgICAgICAgICAoJ00nLCA2MCksCisgICAgICAgICAgICAgICAgICAoJ0gnLCA2MCAqIDYwKSwKKyAgICAgICAgICAgICAgICAgICgnRCcsIDYwICogNjAgKiAyNCksCisgICAgICAgICAgICAgICAgICAoJ01JRE5JR0hUJywgNjAgKiA2MCAqIDI0KSwKKyAgICAgICAgICAgICAgICAgICMgY3VycmVudCB0aW1lIChlcG9jaCBzdGFydCkgaXMgYSBUaHVyc2RheSwgVzAgbWVhbnMgTW9uZGF5CisgICAgICAgICAgICAgICAgICAoJ1cwJywgc2VjcyhkYXlzPTQsIGhvdXJzPTI0KSksCisgICAgICAgICAgICAgICAgICk6CisgICAgZGVmIHRlc3RfY29tcHV0ZV9yb2xsb3ZlcihzZWxmLCB3aGVuPXdoZW4sIGV4cD1leHApOgorICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgc2VsZi5mbiwgd2hlbj13aGVuLCBpbnRlcnZhbD0xLCBiYWNrdXBDb3VudD0wLCB1dGM9VHJ1ZSkKKyAgICAgICAgY3VycmVudFRpbWUgPSAwLjAKKyAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lKQorICAgICAgICBpZiBleHAgIT0gYWN0dWFsOgorICAgICAgICAgICAgIyBGYWlsdXJlcyBvY2N1ciBvbiBzb21lIHN5c3RlbXMgZm9yIE1JRE5JR0hUIGFuZCBXMC4KKyAgICAgICAgICAgICMgUHJpbnQgZGV0YWlsZWQgY2FsY3VsYXRpb24gZm9yIE1JRE5JR0hUIHNvIHdlIGNhbiB0cnkgdG8gc2VlCisgICAgICAgICAgICAjIHdoYXQncyBnb2luZyBvbgorICAgICAgICAgICAgaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGlmIHdoZW4gPT0gJ01JRE5JR0hUJzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHJoLnV0YzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0aW1lLmdtdGltZShjdXJyZW50VGltZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0aW1lLmxvY2FsdGltZShjdXJyZW50VGltZSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudEhvdXIgPSB0WzNdCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSB0WzRdCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZWNvbmQgPSB0WzVdCisgICAgICAgICAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgbWlkbmlnaHQKKyAgICAgICAgICAgICAgICAgICAgciA9IGxvZ2dpbmcuaGFuZGxlcnMuX01JRE5JR0hUIC0gKChjdXJyZW50SG91ciAqIDYwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWludXRlKSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50VGltZSArIHIKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ3Q6ICVzICglcyknICUgKHQsIHJoLnV0YyksIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2N1cnJlbnRIb3VyOiAlcycgJSBjdXJyZW50SG91ciwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnY3VycmVudE1pbnV0ZTogJXMnICUgY3VycmVudE1pbnV0ZSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnY3VycmVudFNlY29uZDogJXMnICUgY3VycmVudFNlY29uZCwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBwcmludCgncjogJXMnICUgciwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBwcmludCgncmVzdWx0OiAlcycgJSByZXN1bHQsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZXhjZXB0aW9uIGluIGRpYWdub3N0aWMgY29kZTogJXMnICUgc3lzLmV4Y19pbmZvKClbMV0sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHAsIGFjdHVhbCkKKyAgICAgICAgcmguY2xvc2UoKQorICAgIHNldGF0dHIoVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwgInRlc3RfY29tcHV0ZV9yb2xsb3Zlcl8lcyIgJSB3aGVuLCB0ZXN0X2NvbXB1dGVfcm9sbG92ZXIpCisKICMgU2V0IHRoZSBsb2NhbGUgdG8gdGhlIHBsYXRmb3JtLWRlcGVuZGVudCBkZWZhdWx0LiAgSSBoYXZlIG5vIGlkZWEKICMgd2h5IHRoZSB0ZXN0IGRvZXMgdGhpcywgYnV0IGluIGFueSBjYXNlIHdlIHNhdmUgdGhlIGN1cnJlbnQgbG9jYWxlCiAjIGZpcnN0IGFuZCByZXN0b3JlIGl0IGF0IHRoZSBlbmQuCiBAcnVuX3dpdGhfbG9jYWxlKCdMQ19BTEwnLCAnJykKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoQnVpbHRpbkxldmVsc1Rlc3QsIEJhc2ljRmlsdGVyVGVzdCwKLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tTGV2ZWxzQW5kRmlsdGVyc1Rlc3QsIE1lbW9yeUhhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICAgICBDb25maWdGaWxlVGVzdCwgU29ja2V0SGFuZGxlclRlc3QsIE1lbW9yeVRlc3QsCi0gICAgICAgICAgICAgICAgICAgIEVuY29kaW5nVGVzdCwgV2FybmluZ3NUZXN0KQorICAgICAgICAgICAgICAgICBDdXN0b21MZXZlbHNBbmRGaWx0ZXJzVGVzdCwgTWVtb3J5SGFuZGxlclRlc3QsCisgICAgICAgICAgICAgICAgIENvbmZpZ0ZpbGVUZXN0LCBTb2NrZXRIYW5kbGVyVGVzdCwgTWVtb3J5VGVzdCwKKyAgICAgICAgICAgICAgICAgRW5jb2RpbmdUZXN0LCBXYXJuaW5nc1Rlc3QsIENvbmZpZ0RpY3RUZXN0LCBNYW5hZ2VyVGVzdCwKKyAgICAgICAgICAgICAgICAgRm9ybWF0dGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgTG9nUmVjb3JkRmFjdG9yeVRlc3QsIENoaWxkTG9nZ2VyVGVzdCwgUXVldWVIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsCisgICAgICAgICAgICAgICAgIExhc3RSZXNvcnRUZXN0LAorICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0CisgICAgICAgICAgICAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkgYi9MaWIvdGVzdC90ZXN0X2xvbmcucHkKaW5kZXggOWMyYmFjNy4uMDQwNjZlYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb25nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQpAQCAtMSw5ICsxLDExIEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCiBpbXBvcnQgc3lzCiAKIGltcG9ydCByYW5kb20KIGltcG9ydCBtYXRoCitpbXBvcnQgYXJyYXkKIAogIyBVc2VkIGZvciBsYXp5IGZvcm1hdHRpbmcgb2YgZmFpbHVyZSBtZXNzYWdlcwogY2xhc3MgRnJtKG9iamVjdCk6CkBAIC0zNSwyNSArMzcsNDEgQEAKICMgYWRkIGNvbXBsZW1lbnRzICYgbmVnYXRpb25zCiBzcGVjaWFsICs9IFt+eCBmb3IgeCBpbiBzcGVjaWFsXSArIFsteCBmb3IgeCBpbiBzcGVjaWFsXQogCi1MID0gWwotICAgICAgICAoJzAnLCAwKSwKLSAgICAgICAgKCcxJywgMSksCi0gICAgICAgICgnOScsIDkpLAotICAgICAgICAoJzEwJywgMTApLAotICAgICAgICAoJzk5JywgOTkpLAotICAgICAgICAoJzEwMCcsIDEwMCksCi0gICAgICAgICgnMzE0JywgMzE0KSwKLSAgICAgICAgKCcgMzE0JywgMzE0KSwKLSAgICAgICAgKCczMTQgJywgMzE0KSwKLSAgICAgICAgKCcgIFx0XHQgIDMxNCAgXHRcdCAgJywgMzE0KSwKLSAgICAgICAgKHJlcHIoc3lzLm1heHNpemUpLCBzeXMubWF4c2l6ZSksCi0gICAgICAgICgnICAxeCcsIFZhbHVlRXJyb3IpLAotICAgICAgICAoJyAgMSAgJywgMSksCi0gICAgICAgICgnICAxXDAyICAnLCBWYWx1ZUVycm9yKSwKLSAgICAgICAgKCcnLCBWYWx1ZUVycm9yKSwKLSAgICAgICAgKCcgJywgVmFsdWVFcnJvciksCi0gICAgICAgICgnICBcdFx0ICAnLCBWYWx1ZUVycm9yKQotXQorREJMX01BWCA9IHN5cy5mbG9hdF9pbmZvLm1heAorREJMX01BWF9FWFAgPSBzeXMuZmxvYXRfaW5mby5tYXhfZXhwCitEQkxfTUlOX0VYUCA9IHN5cy5mbG9hdF9pbmZvLm1pbl9leHAKK0RCTF9NQU5UX0RJRyA9IHN5cy5mbG9hdF9pbmZvLm1hbnRfZGlnCitEQkxfTUlOX09WRVJGTE9XID0gMioqREJMX01BWF9FWFAgLSAyKiooREJMX01BWF9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxKQorCisjIHB1cmUgUHl0aG9uIHZlcnNpb24gb2YgY29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbgorZGVmIHRydWVkaXYoYSwgYik6CisgICAgIiIiQ29ycmVjdGx5LXJvdW5kZWQgdHJ1ZSBkaXZpc2lvbiBmb3IgaW50ZWdlcnMuIiIiCisgICAgbmVnYXRpdmUgPSBhXmIgPCAwCisgICAgYSwgYiA9IGFicyhhKSwgYWJzKGIpCisKKyAgICAjIGV4Y2VwdGlvbnM6ICBkaXZpc2lvbiBieSB6ZXJvLCBvdmVyZmxvdworICAgIGlmIG5vdCBiOgorICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcigiZGl2aXNpb24gYnkgemVybyIpCisgICAgaWYgYSA+PSBEQkxfTUlOX09WRVJGTE9XICogYjoKKyAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigiaW50L2ludCB0b28gbGFyZ2UgdG8gcmVwcmVzZW50IGFzIGEgZmxvYXQiKQorCisgICAjIGZpbmQgaW50ZWdlciBkIHNhdGlzZnlpbmcgMioqKGQgLSAxKSA8PSBhL2IgPCAyKipkCisgICAgZCA9IGEuYml0X2xlbmd0aCgpIC0gYi5iaXRfbGVuZ3RoKCkKKyAgICBpZiBkID49IDAgYW5kIGEgPj0gMioqZCAqIGIgb3IgZCA8IDAgYW5kIGEgKiAyKiotZCA+PSBiOgorICAgICAgICBkICs9IDEKKworICAgICMgY29tcHV0ZSAyKiotZXhwICogYSAvIGIgZm9yIHN1aXRhYmxlIGV4cAorICAgIGV4cCA9IG1heChkLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcKKyAgICBhLCBiID0gYSA8PCBtYXgoLWV4cCwgMCksIGIgPDwgbWF4KGV4cCwgMCkKKyAgICBxLCByID0gZGl2bW9kKGEsIGIpCisKKyAgICAjIHJvdW5kLWhhbGYtdG8tZXZlbjogZnJhY3Rpb25hbCBwYXJ0IGlzIHIvYiwgd2hpY2ggaXMgPiAwLjUgaWZmCisgICAgIyAyKnIgPiBiLCBhbmQgPT0gMC41IGlmZiAyKnIgPT0gYi4KKyAgICBpZiAyKnIgPiBiIG9yIDIqciA9PSBiIGFuZCBxICUgMiA9PSAxOgorICAgICAgICBxICs9IDEKKworICAgIHJlc3VsdCA9IG1hdGgubGRleHAocSwgZXhwKQorICAgIHJldHVybiAtcmVzdWx0IGlmIG5lZ2F0aXZlIGVsc2UgcmVzdWx0CiAKIAogY2xhc3MgTG9uZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjU0LDcgKzI3Miw3IEBACiAgICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyBvciBbMF0KICAgICAgICAgcmV0dXJuICctJ1s6c2lnbl0gKyBcCiAgICAgICAgICAgICAgICB7MjogJzBiJywgODogJzBvJywgMTA6ICcnLCAxNjogJzB4J31bYmFzZV0gKyBcCi0gICAgICAgICAgICAgICAiIi5qb2luKG1hcChsYW1iZGEgaTogIjAxMjM0NTY3ODlhYmNkZWYiW2ldLCBkaWdpdHMpKQorICAgICAgICAgICAgICAgIiIuam9pbigiMDEyMzQ1Njc4OWFiY2RlZiJbaV0gZm9yIGkgaW4gZGlnaXRzKQogCiAgICAgZGVmIGNoZWNrX2Zvcm1hdF8xKHNlbGYsIHgpOgogICAgICAgICBmb3IgYmFzZSwgbWFwcGVyIGluICg4LCBvY3QpLCAoMTAsIHJlcHIpLCAoMTYsIGhleCk6CkBAIC0yNjMsNyArMjgxLDcgQEAKICAgICAgICAgICAgIG1zZyA9IEZybSgiJXMgcmV0dXJuZWQgJXIgYnV0IGV4cGVjdGVkICVyIGZvciAlciIsCiAgICAgICAgICAgICAgICAgbWFwcGVyLl9fbmFtZV9fLCBnb3QsIGV4cGVjdGVkLCB4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkLCBtc2cpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChnb3QsIDApLCB4LCBGcm0oJ2xvbmcoIiVzIiwgMCkgIT0gJXInLCBnb3QsIHgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZ290LCAwKSwgeCwgRnJtKCdpbnQoIiVzIiwgMCkgIT0gJXInLCBnb3QsIHgpKQogICAgICAgICAjIHN0cigpIGhhcyB0byBiZSBjaGVja2VkIGEgbGl0dGxlIGRpZmZlcmVudGx5IHNpbmNlIHRoZXJlJ3Mgbm8KICAgICAgICAgIyB0cmFpbGluZyAiTCIKICAgICAgICAgZ290ID0gc3RyKHgpCkBAIC0yODEsMjUgKzI5OSwxMiBAQAogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZm9ybWF0XzEoeCkKIAogICAgIGRlZiB0ZXN0X2xvbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMxNCksIDMxNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMy4xNCksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMxNCksIDMxNCkKLSAgICAgICAgIyBDaGVjayB0aGF0IGNvbnZlcnNpb24gZnJvbSBmbG9hdCB0cnVuY2F0ZXMgdG93YXJkcyB6ZXJvCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjE0KSwgLTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KDMuOSksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KC0zLjkpLCAtMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoMy41KSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoLTMuNSksIC0zKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgiLTMiKSwgLTMpCi0gICAgICAgICMgRGlmZmVyZW50IGJhc2U6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCIxMCIsMTYpLCAxNikKLSAgICAgICAgIyBDaGVjayBjb252ZXJzaW9ucyBmcm9tIHN0cmluZyAoc2FtZSB0ZXN0IHNldCBhcyBmb3IgaW50KCksIGFuZCB0aGVuIHNvbWUpCisgICAgICAgICMgQ2hlY2sgY29udmVyc2lvbnMgZnJvbSBzdHJpbmcKICAgICAgICAgTEwgPSBbCiAgICAgICAgICAgICAgICAgKCcxJyArICcwJyoyMCwgMTAqKjIwKSwKICAgICAgICAgICAgICAgICAoJzEnICsgJzAnKjEwMCwgMTAqKjEwMCkKICAgICAgICAgXQotICAgICAgICBMMiA9IExbOl0KLSAgICAgICAgZm9yIHMsIHYgaW4gTDIgKyBMTDoKKyAgICAgICAgZm9yIHMsIHYgaW4gTEw6CiAgICAgICAgICAgICBmb3Igc2lnbiBpbiAiIiwgIisiLCAiLSI6CiAgICAgICAgICAgICAgICAgZm9yIHByZWZpeCBpbiAiIiwgIiAiLCAiXHQiLCAiICBcdFx0ICAiOgogICAgICAgICAgICAgICAgICAgICBzcyA9IHByZWZpeCArIHNpZ24gKyBzCkBAIC0zMDcsMTIgKzMxMiwxMCBAQAogICAgICAgICAgICAgICAgICAgICBpZiBzaWduID09ICItIiBhbmQgdiBpcyBub3QgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHZ2ID0gLXYKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc3MpLCBpbnQodnYpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoc3MpLCB2dikKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzXDAnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICc1MycsIDQwKQogICAgICAgICAjIHRyYWlsaW5nIEwgc2hvdWxkIG5vIGxvbmdlciBiZSBhY2NlcHRlZC4uLgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQsICcxMjNMJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMTIzbCcpCkBAIC0zMjMsODcgKzMyNiw2IEBACiAgICAgICAgICMgLi4uIGJ1dCBpdCdzIGp1c3QgYSBub3JtYWwgZGlnaXQgaWYgYmFzZSA+PSAyMgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMUwnLCAyMiksIDQzKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCAxLCAxMikKLQotICAgICAgICAjIFNGIHBhdGNoICMxNjM4ODc5OiBlbWJlZGRlZCBOVUxzIHdlcmUgbm90IGRldGVjdGVkIHdpdGgKLSAgICAgICAgIyBleHBsaWNpdCBiYXNlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1wwJywgMTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzEyM1x4MDAgMjQ1JywgMjApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDIwMDIwMjIyMDEyMjExMTEyMTEnLCAzKSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMDAwMDAwMDAwJywgNCksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczMjI0NDAwMjQyMzE0MScsIDUpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTU1MDEwNDAxNTUwNCcsIDYpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMjExMzAxNDIyMzU0JywgNyksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0MDAwMDAwMDAwMCcsIDgpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTIwNjg2NTc0NTQnLCA5KSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQyOTQ5NjcyOTYnLCAxMCksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxOTA0NDQwNTU0JywgMTEpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnOWJhNDYxNTk0JywgMTIpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNTM1YTc5ODg5JywgMTMpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMmNhNWI3NDY0JywgMTQpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMWEyMGRjZDgxJywgMTUpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAwMDAwMDAwJywgMTYpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYTdmZmRhOTEnLCAxNyksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc3MDRoZTdnNCcsIDE4KSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzRmNWFmZjY2JywgMTkpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMzcyM2FpNGcnLCAyMCksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyODFkNTVpNCcsIDIxKSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzFmajhiMTg0JywgMjIpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTYwNms3aWMnLCAyMyksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdtYjk5NGFnJywgMjQpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnaGVrMm1nbCcsIDI1KSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2RuY2hibm0nLCAyNiksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdiMjhqcGRtJywgMjcpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnOHBmZ2loNCcsIDI4KSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzc2YmVpZ2cnLCAyOSksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc1cW1jcHFnJywgMzApLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNHEwanRvNCcsIDMxKSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzQwMDAwMDAnLCAzMiksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCczYW9rcTk0JywgMzMpLCA0Mjk0OTY3Mjk2KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMnFoeGpsaScsIDM0KSwgNDI5NDk2NzI5NikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJicjQ1cWInLCAzNSksIDQyOTQ5NjcyOTYpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxejE0MXo0JywgMzYpLCA0Mjk0OTY3Mjk2KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEnLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAyMDAyMDIyMjAxMjIxMTExMjEyJywgMyksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDAwMDAwMDAwMDAwMDAwMScsIDQpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMzIyNDQwMDI0MjMxNDInLCA1KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE1NTAxMDQwMTU1MDUnLCA2KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzIxMTMwMTQyMjM1NScsIDcpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNDAwMDAwMDAwMDEnLCA4KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEyMDY4NjU3NDU1JywgOSksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0Mjk0OTY3Mjk3JywgMTApLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTkwNDQ0MDU1NScsIDExKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzliYTQ2MTU5NScsIDEyKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzUzNWE3OTg4YScsIDEzKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJjYTViNzQ2NScsIDE0KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzFhMjBkY2Q4MicsIDE1KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMDAwMDAwMScsIDE2KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2E3ZmZkYTkyJywgMTcpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNzA0aGU3ZzUnLCAxOCksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0ZjVhZmY2NycsIDE5KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzM3MjNhaTRoJywgMjApLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMjgxZDU1aTUnLCAyMSksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxZmo4YjE4NScsIDIyKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzE2MDZrN2lkJywgMjMpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnbWI5OTRhaCcsIDI0KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJ2hlazJtZ20nLCAyNSksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCdkbmNoYm5uJywgMjYpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnYjI4anBkbicsIDI3KSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzhwZmdpaDUnLCAyOCksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc3NmJlaWdoJywgMjkpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnNXFtY3BxaCcsIDMwKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzRxMGp0bzUnLCAzMSksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCc0MDAwMDAxJywgMzIpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnM2Fva3E5NScsIDMzKSwgNDI5NDk2NzI5NykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzJxaHhqbGonLCAzNCksIDQyOTQ5NjcyOTcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcyYnI0NXFjJywgMzUpLCA0Mjk0OTY3Mjk3KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMXoxNDF6NScsIDM2KSwgNDI5NDk2NzI5NykKLQogICAgICAgICAjIHRlc3RzIHdpdGggYmFzZSAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwMDAnLCAwKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzBvMTIzJywgMCksIDgzKQpAQCAtNDE5LDIyOCArMzQxLDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzA4JywgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnLTAxMjM5NScsIDApCiAKKyAgICAgICAgIyBpbnZhbGlkIGJhc2VzCisgICAgICAgIGludmFsaWRfYmFzZXMgPSBbLTkwOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMioqMzEtMSwgMioqMzEsIC0yKiozMSwgLTIqKjMxLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDIqKjYzLTEsIDIqKjYzLCAtMioqNjMsIC0yKio2My0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAyKioxMDAsIC0yKioxMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgZm9yIGJhc2UgaW4gaW52YWxpZF9iYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzQyJywgYmFzZSkKKworCiAgICAgZGVmIHRlc3RfY29udmVyc2lvbihzZWxmKToKLSAgICAgICAgIyBUZXN0IF9faW50X18oKQotICAgICAgICBjbGFzcyBDbGFzc2ljTWlzc2luZ01ldGhvZHM6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBDbGFzc2ljTWlzc2luZ01ldGhvZHMoKSkKIAotICAgICAgICBjbGFzcyBNaXNzaW5nTWV0aG9kcyhvYmplY3QpOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludCwgTWlzc2luZ01ldGhvZHMoKSkKLQotICAgICAgICBjbGFzcyBGb28wOgotICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgIGNsYXNzIEp1c3RMb25nOgorICAgICAgICAgICAgIyB0ZXN0IHRoYXQgX19sb25nX18gbm8gbG9uZ2VyIHVzZWQgaW4gMy54CisgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBKdXN0TG9uZygpKQogCi0gICAgICAgIGNsYXNzIEZvbzEob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgorICAgICAgICBjbGFzcyBMb25nVHJ1bmM6CisgICAgICAgICAgICAjIF9fbG9uZ19fIHNob3VsZCBiZSBpZ25vcmVkIGluIDMueAorICAgICAgICAgICAgZGVmIF9fbG9uZ19fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMTcyOQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChMb25nVHJ1bmMoKSksIDE3MjkpCiAKLSAgICAgICAgY2xhc3MgRm9vMihpbnQpOgotICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDQyCi0KLSAgICAgICAgY2xhc3MgRm9vMyhpbnQpOgotICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICBjbGFzcyBGb280KGludCk6Ci0gICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gNDIKLQotICAgICAgICBjbGFzcyBGb281KGludCk6Ci0gICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gNDIuCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMCgpKSwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KEZvbzEoKSksIDQyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChGb28yKCkpLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vMygpKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoRm9vNCgpKSwgNDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBGb281KCkpCi0KLSAgICAgICAgY2xhc3MgQ2xhc3NpYzoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZm9yIGJhc2UgaW4gKG9iamVjdCwgQ2xhc3NpYyk6Ci0gICAgICAgICAgICBjbGFzcyBJbnRPdmVycmlkZXNUcnVuYyhiYXNlKToKLSAgICAgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCi0gICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xMgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoSW50T3ZlcnJpZGVzVHJ1bmMoKSksIDQyKQotCi0gICAgICAgICAgICBjbGFzcyBKdXN0VHJ1bmMoYmFzZSk6Ci0gICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChKdXN0VHJ1bmMoKSksIDQyKQotCi0gICAgICAgICAgICBjbGFzcyBKdXN0TG9uZyhiYXNlKToKLSAgICAgICAgICAgICAgICAjIHRlc3QgdGhhdCBfX2xvbmdfXyBubyBsb25nZXIgdXNlZCBpbiAzLngKLSAgICAgICAgICAgICAgICBkZWYgX19sb25nX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIEp1c3RMb25nKCkpCi0KLSAgICAgICAgICAgIGNsYXNzIExvbmdUcnVuYyhiYXNlKToKLSAgICAgICAgICAgICAgICAjIF9fbG9uZ19fIHNob3VsZCBiZSBpZ25vcmVkIGluIDMueAotICAgICAgICAgICAgICAgIGRlZiBfX2xvbmdfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCi0gICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE3MjkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KExvbmdUcnVuYygpKSwgMTcyOSkKLQotICAgICAgICAgICAgZm9yIHRydW5jX3Jlc3VsdF9iYXNlIGluIChvYmplY3QsIENsYXNzaWMpOgotICAgICAgICAgICAgICAgIGNsYXNzIEludGVncmFsKHRydW5jX3Jlc3VsdF9iYXNlKToKLSAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKLQotICAgICAgICAgICAgICAgIGNsYXNzIFRydW5jUmV0dXJuc05vbkxvbmcoYmFzZSk6Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBfX3RydW5jX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZWdyYWwoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KFRydW5jUmV0dXJuc05vbkxvbmcoKSksIDQyKQotCi0gICAgICAgICAgICAgICAgY2xhc3MgTm9uSW50ZWdyYWwodHJ1bmNfcmVzdWx0X2Jhc2UpOgotICAgICAgICAgICAgICAgICAgICBkZWYgX190cnVuY19fKHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGF0IHdlIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCi0KLSAgICAgICAgICAgICAgICBjbGFzcyBUcnVuY1JldHVybnNOb25JbnRlZ3JhbChiYXNlKToKLSAgICAgICAgICAgICAgICAgICAgZGVmIF9fdHJ1bmNfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25JbnRlZ3JhbCgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbnQoVHJ1bmNSZXR1cm5zTm9uSW50ZWdyYWwoKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3RydW5jX18gcmV0dXJuZWQgbm9uLUludGVncmFsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHR5cGUgTm9uSW50ZWdyYWwpIikKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3Igd2l0aCAlcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChiYXNlLCB0cnVuY19yZXN1bHRfYmFzZSksKSkKLQotICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6Ci0KLSAgICAgICAgIyBjaGVjayB0aGUgZXh0cmVtZXMgaW4gaW50PC0+bG9uZyBjb252ZXJzaW9uCi0gICAgICAgIGh1Z2Vwb3MgPSBzeXMubWF4c2l6ZQotICAgICAgICBodWdlbmVnID0gLWh1Z2Vwb3MgLSAxCi0gICAgICAgIGh1Z2Vwb3NfYXNsb25nID0gaW50KGh1Z2Vwb3MpCi0gICAgICAgIGh1Z2VuZWdfYXNsb25nID0gaW50KGh1Z2VuZWcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZXBvcywgaHVnZXBvc19hc2xvbmcsICJsb25nKHN5cy5tYXhzaXplKSAhPSBzeXMubWF4c2l6ZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaHVnZW5lZywgaHVnZW5lZ19hc2xvbmcsCi0gICAgICAgICAgICAibG9uZygtc3lzLm1heHNpemUtMSkgIT0gLXN5cy5tYXhzaXplLTEiKQotCi0gICAgICAgICMgbG9uZyAtPiBpbnQgc2hvdWxkIG5vdCBmYWlsIGZvciBodWdlcG9zX2FzbG9uZyBvciBodWdlbmVnX2FzbG9uZwotICAgICAgICB4ID0gaW50KGh1Z2Vwb3NfYXNsb25nKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIGh1Z2Vwb3MsCi0gICAgICAgICAgICAgICAgICAiY29udmVydGluZyBzeXMubWF4c2l6ZSB0byBsb25nIGFuZCBiYWNrIHRvIGludCBmYWlscyIpCi0gICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4c2l6ZSkpIG92ZXJmbG93ZWQhIikKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFRlc3RGYWlsZWQoImludChsb25nKHN5cy5tYXhzaXplKSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgaW50IikKLSAgICAgICAgeCA9IGludChodWdlbmVnX2FzbG9uZykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCBodWdlbmVnLAotICAgICAgICAgICAgICAgICAgImNvbnZlcnRpbmcgLXN5cy5tYXhzaXplLTEgdG8gbG9uZyBhbmQgYmFjayB0byBpbnQgZmFpbHMiKQotICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW50KGxvbmcoLXN5cy5tYXhzaXplLTEpKSBvdmVyZmxvd2VkISIpCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHgsIGludCk6Ci0gICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJpbnQobG9uZygtc3lzLm1heHNpemUtMSkpIHNob3VsZCBoYXZlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybmVkIGludCIpCi0gICAgICAgICMgYnV0IGxvbmcgLT4gaW50IHNob3VsZCBvdmVyZmxvdyBmb3IgaHVnZXBvcysxIGFuZCBodWdlbmVnLTEKLSAgICAgICAgeCA9IGh1Z2Vwb3NfYXNsb25nICsgMQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB5ID0gaW50KHgpCi0gICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJpbnQobG9uZyhzeXMubWF4c2l6ZSkgKyAxKSBtdXN0bid0IG92ZXJmbG93IikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoeSwgaW50KSwKLSAgICAgICAgICAgICJpbnQobG9uZyhzeXMubWF4c2l6ZSkgKyAxKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBsb25nIikKLQotICAgICAgICB4ID0gaHVnZW5lZ19hc2xvbmcgLSAxCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHkgPSBpbnQoeCkKLSAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImludChsb25nKC1zeXMubWF4c2l6ZS0xKSAtIDEpIG11c3RuJ3Qgb3ZlcmZsb3ciKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh5LCBpbnQpLAotICAgICAgICAgICAgICAgImludChsb25nKC1zeXMubWF4c2l6ZS0xKSAtIDEpIHNob3VsZCBoYXZlIHJldHVybmVkIGxvbmciKQotCi0gICAgICAgIGNsYXNzIGxvbmcyKGludCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIHggPSBsb25nMigxPDwxMDApCi0gICAgICAgIHkgPSBpbnQoeCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUoeSkgaXMgaW50LAotICAgICAgICAgICAgIm92ZXJmbG93aW5nIGludCBjb252ZXJzaW9uIG11c3QgcmV0dXJuIGxvbmcgbm90IGxvbmcgc3VidHlwZSIpCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdGVzdHMgb2YgYXV0byBpbnQtPmxvbmcgY29udmVyc2lvbgotCi0gICAgZGVmIHRlc3RfYXV0b19vdmVyZmxvdyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hdGgsIHN5cwotCi0gICAgICAgIHNwZWNpYWwgPSBbMCwgMSwgMiwgMywgc3lzLm1heHNpemUtMSwgc3lzLm1heHNpemUsIHN5cy5tYXhzaXplKzFdCi0gICAgICAgIHNxcnQgPSBpbnQobWF0aC5zcXJ0KHN5cy5tYXhzaXplKSkKLSAgICAgICAgc3BlY2lhbC5leHRlbmQoW3NxcnQtMSwgc3FydCwgc3FydCsxXSkKLSAgICAgICAgc3BlY2lhbC5leHRlbmQoWy1pIGZvciBpIGluIHNwZWNpYWxdKQotCi0gICAgICAgIGRlZiBjaGVja2l0KCphcmdzKToKLSAgICAgICAgICAgICMgSGVhdnkgdXNlIG9mIG5lc3RlZCBzY29wZXMgaGVyZSEKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICBGcm0oImZvciAlciBleHBlY3RlZCAlciBnb3QgJXIiLCBhcmdzLCBleHBlY3RlZCwgZ290KSkKLQotICAgICAgICBmb3IgeCBpbiBzcGVjaWFsOgotICAgICAgICAgICAgbG9uZ3ggPSBpbnQoeCkKLQotICAgICAgICAgICAgZXhwZWN0ZWQgPSAtbG9uZ3gKLSAgICAgICAgICAgIGdvdCA9IC14Ci0gICAgICAgICAgICBjaGVja2l0KCctJywgeCkKLQotICAgICAgICAgICAgZm9yIHkgaW4gc3BlY2lhbDoKLSAgICAgICAgICAgICAgICBsb25neSA9IGludCh5KQotCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCArIGxvbmd5Ci0gICAgICAgICAgICAgICAgZ290ID0geCArIHkKLSAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcrJywgeSkKLQotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggLSBsb25neQotICAgICAgICAgICAgICAgIGdvdCA9IHggLSB5Ci0gICAgICAgICAgICAgICAgY2hlY2tpdCh4LCAnLScsIHkpCi0KLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4ICogbG9uZ3kKLSAgICAgICAgICAgICAgICBnb3QgPSB4ICogeQotICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJyonLCB5KQotCi0gICAgICAgICAgICAgICAgaWYgeToKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsb25neCAvIGxvbmd5Ci0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHggLyB5Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJy8nLCB5KQotCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gbG9uZ3ggLy8gbG9uZ3kKLSAgICAgICAgICAgICAgICAgICAgZ290ID0geCAvLyB5Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJy8vJywgeSkKLQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGRpdm1vZChsb25neCwgbG9uZ3kpCi0gICAgICAgICAgICAgICAgICAgIGdvdCA9IGRpdm1vZChsb25neCwgbG9uZ3kpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNraXQoeCwgJ2Rpdm1vZCcsIHkpCi0KLSAgICAgICAgICAgICAgICBpZiBhYnMoeSkgPCA1IGFuZCBub3QgKHggPT0gMCBhbmQgeSA8IDApOgotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGxvbmd4ICoqIGxvbmd5Ci0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHggKiogeQotICAgICAgICAgICAgICAgICAgICBjaGVja2l0KHgsICcqKicsIHkpCi0KLSAgICAgICAgICAgICAgICAgICAgZm9yIHogaW4gc3BlY2lhbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHogIT0gMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeSA+PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHBvdyhsb25neCwgbG9uZ3ksIGludCh6KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290ID0gcG93KHgsIHksIHopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNraXQoJ3BvdycsIHgsIHksICclJywgeikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvdyxsb25neCwgbG9uZ3ksIGludCh6KSkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGZsb2F0Ll9fZ2V0Zm9ybWF0X18oImRvdWJsZSIpLnN0YXJ0c3dpdGgoIklFRUUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCByZXF1aXJlcyBJRUVFIDc1NCBkb3VibGVzIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19JRUVFXzc1NAogICAgIGRlZiB0ZXN0X2Zsb2F0X2NvbnZlcnNpb24oc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgREJMX01BWCA9IHN5cy5mbG9hdF9pbmZvLm1heAotICAgICAgICBEQkxfTUFYX0VYUCA9IHN5cy5mbG9hdF9pbmZvLm1heF9leHAKLSAgICAgICAgREJMX01BTlRfRElHID0gc3lzLmZsb2F0X2luZm8ubWFudF9kaWcKIAogICAgICAgICBleGFjdF92YWx1ZXMgPSBbMCwgMSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAyKio1My0zLApAQCAtNjk0LDggKzQyMiw2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChmbG9hdCh4KSksIHkpCiAKICAgICBkZWYgdGVzdF9mbG9hdF9vdmVyZmxvdyhzZWxmKToKLSAgICAgICAgaW1wb3J0IG1hdGgKLQogICAgICAgICBmb3IgeCBpbiAtMi4wLCAtMS4wLCAwLjAsIDEuMCwgMi4wOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChpbnQoeCkpLCB4KQogCkBAIC03MjEsMTQgKzQ0NywxMiBAQAogCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBldmFsLCB0ZXN0LCBuYW1lc3BhY2UpCiAKLSAgICAgICAgICAgICMgWFhYIFBlcmhhcHMgZmxvYXQoc2h1Z2UpIGNhbiByYWlzZSBPdmVyZmxvd0Vycm9yIG9uIHNvbWUgYm94PwotICAgICAgICAgICAgIyBUaGUgY29tcGFyaXNvbiBzaG91bGQgbm90LgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmbG9hdChzaHVnZSksIGludChzaHVnZSksCi0gICAgICAgICAgICAgICAgImZsb2F0KHNodWdlKSBzaG91bGQgbm90IGVxdWFsIGludChzaHVnZSkiKQorICAgICAgICAjIFhYWCBQZXJoYXBzIGZsb2F0KHNodWdlKSBjYW4gcmFpc2UgT3ZlcmZsb3dFcnJvciBvbiBzb21lIGJveD8KKyAgICAgICAgIyBUaGUgY29tcGFyaXNvbiBzaG91bGQgbm90LgorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZsb2F0KHNodWdlKSwgaW50KHNodWdlKSwKKyAgICAgICAgICAgICJmbG9hdChzaHVnZSkgc2hvdWxkIG5vdCBlcXVhbCBpbnQoc2h1Z2UpIikKIAogICAgIGRlZiB0ZXN0X2xvZ3Moc2VsZik6Ci0gICAgICAgIGltcG9ydCBtYXRoCi0KICAgICAgICAgTE9HMTBFID0gbWF0aC5sb2cxMChtYXRoLmUpCiAKICAgICAgICAgZm9yIGV4cCBpbiBsaXN0KHJhbmdlKDEwKSkgKyBbMTAwLCAxMDAwLCAxMDAwMF06CkBAIC03NDgsNyArNDcyLDYgQEAKIAogICAgIGRlZiB0ZXN0X21peGVkX2NvbXBhcmVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgaW1wb3J0IG1hdGgKIAogICAgICAgICAjIFdlJ3JlIG1vc3RseSBjb25jZXJuZWQgd2l0aCB0aGF0IG1peGluZyBmbG9hdHMgYW5kIGxvbmdzIGRvZXMgdGhlCiAgICAgICAgICMgcmlnaHQgc3R1ZmYsIGV2ZW4gd2hlbiBsb25ncyBhcmUgdG9vIGxhcmdlIHRvIGZpdCBpbiBhIGZsb2F0LgpAQCAtNzk0LDcgKzUxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZCA9IGQKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGZsb2F0KG4pIC8gZmxvYXQoZCkgPT0gdmFsdWUKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IGRlYWwgd2l0aCAlciIgJSB2YWwpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FuJ3QgZGVhbCB3aXRoICVyIiAlIHZhbHVlKQogCiAgICAgICAgICAgICBkZWYgX2NtcF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUmF0KToKQEAgLTgyMSw3ICs1NDQsNyBAQAogICAgICAgICAgICAgY2FzZXMuZXh0ZW5kKFt0IC0gMS4wLCB0IC0gMC4zLCB0LCB0ICsgMC4zLCB0ICsgMS4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQodC0xKSwgaW50KHQpLCBpbnQodCsxKV0pCiAgICAgICAgIGNhc2VzLmV4dGVuZChbMCwgMSwgMiwgc3lzLm1heHNpemUsIGZsb2F0KHN5cy5tYXhzaXplKV0pCi0gICAgICAgICMgMUw8PDIwMDAwIHNob3VsZCBleGNlZWQgYWxsIGRvdWJsZSBmb3JtYXRzLiAgbG9uZygxZTIwMCkgaXMgdG8KKyAgICAgICAgIyAxIDw8IDIwMDAwIHNob3VsZCBleGNlZWQgYWxsIGRvdWJsZSBmb3JtYXRzLiAgaW50KDFlMjAwKSBpcyB0bwogICAgICAgICAjIGNoZWNrIHRoYXQgd2UgZ2V0IGVxdWFsaXR5IHdpdGggMWUyMDAgYWJvdmUuCiAgICAgICAgIHQgPSBpbnQoMWUyMDApCiAgICAgICAgIGNhc2VzLmV4dGVuZChbMCwgMSwgMiwgMSA8PCAyMDAwMCwgdC0xLCB0LCB0KzFdKQpAQCAtOTQ1LDYgKzY2OCwxMjcgQEAKICAgICAgICAgZm9yIHplcm8gaW4gWyJodWdlIC8gMCIsICJtaHVnZSAvIDAiXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBldmFsLCB6ZXJvLCBuYW1lc3BhY2UpCiAKKyAgICBkZWYgY2hlY2tfdHJ1ZWRpdihzZWxmLCBhLCBiLCBza2lwX3NtYWxsPVRydWUpOgorICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgcmVzdWx0IG9mIGEvYiBpcyBjb3JyZWN0bHkgcm91bmRlZCwgYnkKKyAgICAgICAgY29tcGFyaW5nIGl0IHdpdGggYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBjb3JyZWN0bHkKKyAgICAgICAgcm91bmRlZCBkaXZpc2lvbi4gIGIgc2hvdWxkIGJlIG5vbnplcm8uIiIiCisKKyAgICAgICAgIyBza2lwIGNoZWNrIGZvciBzbWFsbCBhIGFuZCBiOiBpbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50CisgICAgICAgICMgaW1wbGVtZW50YXRpb24gY29udmVydHMgdGhlIGFyZ3VtZW50cyB0byBmbG9hdCBkaXJlY3RseSBhbmQKKyAgICAgICAgIyB0aGVuIGFwcGxpZXMgYSBmbG9hdCBkaXZpc2lvbi4gIFRoaXMgY2FuIGdpdmUgZG91Ymx5LXJvdW5kZWQKKyAgICAgICAgIyByZXN1bHRzIG9uIHg4Ny11c2luZyBtYWNoaW5lcyAocGFydGljdWxhcmx5IDMyLWJpdCBMaW51eCkuCisgICAgICAgIGlmIHNraXBfc21hbGwgYW5kIG1heChhYnMoYSksIGFicyhiKSkgPCAyKipEQkxfTUFOVF9ESUc6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHVzZSByZXByIHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gLTAuMCBhbmQgMC4wCisgICAgICAgICAgICBleHBlY3RlZCA9IHJlcHIodHJ1ZWRpdihhLCBiKSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICdvdmVyZmxvdycKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGdvdCA9IHJlcHIoYSAvIGIpCisgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgZ290ID0gJ292ZXJmbG93JworICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBnb3QgPSAnemVyb2RpdmlzaW9uJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCwgIkluY29ycmVjdGx5IHJvdW5kZWQgZGl2aXNpb24ge30ve306ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30sIGdvdCB7fSIuZm9ybWF0KGEsIGIsIGV4cGVjdGVkLCBnb3QpKQorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdF9jb3JyZWN0bHlfcm91bmRlZF90cnVlX2RpdmlzaW9uKHNlbGYpOgorICAgICAgICAjIG1vcmUgc3RyaW5nZW50IHRlc3RzIHRoYW4gdGhvc2UgYWJvdmUsIGNoZWNraW5nIHRoYXQgdGhlCisgICAgICAgICMgcmVzdWx0IG9mIHRydWUgZGl2aXNpb24gb2YgaW50cyBpcyBhbHdheXMgY29ycmVjdGx5IHJvdW5kZWQuCisgICAgICAgICMgVGhpcyB0ZXN0IHNob3VsZCBwcm9iYWJseSBiZSBjb25zaWRlcmVkIENQeXRob24tc3BlY2lmaWMuCisKKyAgICAgICAgIyBFeGVyY2lzZSBhbGwgdGhlIGNvZGUgcGF0aHMgbm90IGludm9sdmluZyBHYi1zaXplZCBpbnRzLgorICAgICAgICAjIC4uLiBkaXZpc2lvbnMgaW52b2x2aW5nIHplcm8KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMywgMCkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC00NTYsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigwLCAzKQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMCwgLTMpCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigwLCAwKQorICAgICAgICAjIC4uLiBvdmVyZmxvdyBvciB1bmRlcmZsb3cgYnkgbGFyZ2UgbWFyZ2luCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig2NzEgKiAxMjM0NSAqIDIqKkRCTF9NQVhfRVhQLCAxMjM0NSkKKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEyMzQ1LCAzNDU2NzggKiAyKiooREJMX01BTlRfRElHIC0gREJMX01JTl9FWFApKQorICAgICAgICAjIC4uLiBhIG11Y2ggbGFyZ2VyIG9yIHNtYWxsZXIgdGhhbiBiCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMjM0NSoyKioxMDAsIDk4NzY1KQorICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMTIzNDUqMioqMzAsIDk4NzY1KjcqKjgxKQorICAgICAgICAjIC4uLiBhIC8gYiBuZWFyIGEgYm91bmRhcnk6IG9uZSBvZiAxLCAyKipEQkxfTUFOVF9ESUcsIDIqKkRCTF9NSU5fRVhQLAorICAgICAgICAjICAgICAgICAgICAgICAgICAyKipEQkxfTUFYX0VYUCwgMioqKERCTF9NSU5fRVhQLURCTF9NQU5UX0RJRykKKyAgICAgICAgYmFzZXMgPSAoMCwgREJMX01BTlRfRElHLCBEQkxfTUlOX0VYUCwKKyAgICAgICAgICAgICAgICAgREJMX01BWF9FWFAsIERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHKQorICAgICAgICBmb3IgYmFzZSBpbiBiYXNlczoKKyAgICAgICAgICAgIGZvciBleHAgaW4gcmFuZ2UoYmFzZSAtIDE1LCBiYXNlICsgMTUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig3NTMxMioyKiptYXgoZXhwLCAwKSwgNjkxODcqMioqbWF4KC1leHAsIDApKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdig2OTE4NyoyKiptYXgoZXhwLCAwKSwgNzUzMTIqMioqbWF4KC1leHAsIDApKQorCisgICAgICAgICMgb3ZlcmZsb3cgY29ybmVyIGNhc2UKKyAgICAgICAgZm9yIG0gaW4gWzEsIDIsIDcsIDE3LCAxMjM0NSwgNyoqMTAwLAorICAgICAgICAgICAgICAgICAgLTEsIC0yLCAtNSwgLTIzLCAtNjc4OTEsIC00MSoqNTBdOgorICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTEwLCAxMCk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG0qREJMX01JTl9PVkVSRkxPVyArIG4sIG0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KG0qREJMX01JTl9PVkVSRkxPVyArIG4sIC1tKQorCisgICAgICAgICMgY2hlY2sgZGV0ZWN0aW9uIG9mIGluZXhhY3RuZXNzIGluIHNoaWZ0aW5nIHN0YWdlCisgICAgICAgIGZvciBuIGluIHJhbmdlKDI1MCk6CisgICAgICAgICAgICAjICgyKipEQkxfTUFOVF9ESUcrMSkvKDIqKkRCTF9NQU5UX0RJRykgbGllcyBoYWxmd2F5CisgICAgICAgICAgICAjIGJldHdlZW4gdHdvIHJlcHJlc2VudGFibGUgZmxvYXRzLCBhbmQgd291bGQgdXN1YWxseSBiZQorICAgICAgICAgICAgIyByb3VuZGVkIGRvd24gdW5kZXIgcm91bmQtaGFsZi10by1ldmVuLiAgVGhlIHRpbmllc3Qgb2YKKyAgICAgICAgICAgICMgYWRkaXRpb25zIHRvIHRoZSBudW1lcmF0b3Igc2hvdWxkIGNhdXNlIGl0IHRvIGJlIHJvdW5kZWQKKyAgICAgICAgICAgICMgdXAgaW5zdGVhZC4KKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigoMioqREJMX01BTlRfRElHICsgMSkqMTIzNDUqMioqMjAwICsgMioqbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDIqKkRCTF9NQU5UX0RJRyoxMjM0NSkKKworICAgICAgICAjIDEvMjczMSBpcyBvbmUgb2YgdGhlIHNtYWxsZXN0IGRpdmlzaW9uIGNhc2VzIHRoYXQncyBzdWJqZWN0CisgICAgICAgICMgdG8gZG91YmxlIHJvdW5kaW5nIG9uIElFRUUgNzU0IG1hY2hpbmVzIHdvcmtpbmcgaW50ZXJuYWxseSB3aXRoCisgICAgICAgICMgNjQtYml0IHByZWNpc2lvbi4gIE9uIHN1Y2ggbWFjaGluZXMsIHRoZSBuZXh0IGNoZWNrIHdvdWxkIGZhaWwsCisgICAgICAgICMgd2VyZSBpdCBub3QgZXhwbGljaXRseSBza2lwcGVkIGluIGNoZWNrX3RydWVkaXYuCisgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxLCAyNzMxKQorCisgICAgICAgICMgYSBwYXJ0aWN1bGFybHkgYmFkIGNhc2UgZm9yIHRoZSBvbGQgYWxnb3JpdGhtOiAgZ2l2ZXMgYW4KKyAgICAgICAgIyBlcnJvciBvZiBjbG9zZSB0byAzLjUgdWxwcy4KKyAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDI5NTE0NzkzMTM3MjU4MjI3MzAyMywgMjk1MTQ3OTMyMjY1MTE2MzAzMzYwKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdigxMCoqKGkrMSksIDEwKippKQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KDEwKippLCAxMCoqKGkrMSkpCisKKyAgICAgICAgIyB0ZXN0IHJvdW5kLWhhbGYtdG8tZXZlbiBiZWhhdmlvdXIsIG5vcm1hbCByZXN1bHQKKyAgICAgICAgZm9yIG0gaW4gWzEsIDIsIDQsIDcsIDgsIDE2LCAxNywgMzIsIDEyMzQ1LCA3KioxMDAsCisgICAgICAgICAgICAgICAgICAtMSwgLTIsIC01LCAtMjMsIC02Nzg5MSwgLTQxKio1MF06CisgICAgICAgICAgICBmb3IgbiBpbiByYW5nZSgtMTAsIDEwKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoMioqREJMX01BTlRfRElHKm0gKyBuLCBtKQorCisgICAgICAgICMgdGVzdCByb3VuZC1oYWxmLXRvLWV2ZW4sIHN1Ym5vcm1hbCByZXN1bHQKKyAgICAgICAgZm9yIG4gaW4gcmFuZ2UoLTIwLCAyMCk6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYobiwgMioqMTA3NikKKworICAgICAgICAjIGxhcmdlaXNoIHJhbmRvbSBkaXZpc2lvbnM6IGEvYiB3aGVyZSB8YXwgPD0gfGJ8IDw9CisgICAgICAgICMgMip8YXw7IHxhbnN8IGlzIGJldHdlZW4gMC41IGFuZCAxLjAsIHNvIGVycm9yIHNob3VsZAorICAgICAgICAjIGFsd2F5cyBiZSBib3VuZGVkIGJ5IDIqKi01NCB3aXRoIGVxdWFsaXR5IHBvc3NpYmxlIG9ubHkKKyAgICAgICAgIyBpZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHE9YW5zKjIqKjUzIGlzIHplcm8uCisgICAgICAgIGZvciBNIGluIFsxMCoqMTAsIDEwKioxMDAsIDEwKioxMDAwXToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgICAgIGEgPSByYW5kb20ucmFuZHJhbmdlKDEsIE0pCisgICAgICAgICAgICAgICAgYiA9IHJhbmRvbS5yYW5kcmFuZ2UoYSwgMiphKzEpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KGEsIGIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC1hLCBiKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdihhLCAtYikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RydWVkaXYoLWEsIC1iKQorCisgICAgICAgICMgYW5kIHNvbWUgKGdlbnVpbmVseSkgcmFuZG9tIHRlc3RzCisgICAgICAgIGZvciBfIGluIHJhbmdlKDEwMDAwKToKKyAgICAgICAgICAgIGFfYml0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMCkKKyAgICAgICAgICAgIGJfYml0cyA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwMCkKKyAgICAgICAgICAgIHggPSByYW5kb20ucmFuZHJhbmdlKDIqKmFfYml0cykKKyAgICAgICAgICAgIHkgPSByYW5kb20ucmFuZHJhbmdlKDEsIDIqKmJfYml0cykKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJ1ZWRpdih4LCB5KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KHgsIC15KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC14LCB5KQorICAgICAgICAgICAgc2VsZi5jaGVja190cnVlZGl2KC14LCAteSkKIAogICAgIGRlZiB0ZXN0X3NtYWxsX2ludHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKC01LCAyNTcpOgpAQCAtMTA3Miw2ICs5MTYsMjM3IEBACiAgICAgICAgIGZvciBlIGluIGJhZF9leHBvbmVudHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJvdW5kLCAzLCBlKQogCisgICAgZGVmIHRlc3RfdG9fYnl0ZXMoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayh0ZXN0cywgYnl0ZW9yZGVyLCBzaWduZWQ9RmFsc2UpOgorICAgICAgICAgICAgZm9yIHRlc3QsIGV4cGVjdGVkIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC50b19ieXRlcyhsZW4oZXhwZWN0ZWQpLCBieXRlb3JkZXIsIHNpZ25lZD1zaWduZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBjb252ZXJ0IHswfSB3aXRoIGJ5dGVvcmRlcj17MX0gYW5kIHNpZ25lZD17Mn0iCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHRlc3QsIGJ5dGVvcmRlciwgc2lnbmVkKSkgZnJvbSBlcnIKKworICAgICAgICAjIENvbnZlcnQgaW50ZWdlcnMgdG8gc2lnbmVkIGJpZy1lbmRpYW4gYnl0ZSBhcnJheXMuCisgICAgICAgIHRlc3RzMSA9IHsKKyAgICAgICAgICAgIDA6IGInXHgwMCcsCisgICAgICAgICAgICAxOiBiJ1x4MDEnLAorICAgICAgICAgICAgLTE6IGInXHhmZicsCisgICAgICAgICAgICAtMTI3OiBiJ1x4ODEnLAorICAgICAgICAgICAgLTEyODogYidceDgwJywKKyAgICAgICAgICAgIC0xMjk6IGInXHhmZlx4N2YnLAorICAgICAgICAgICAgMTI3OiBiJ1x4N2YnLAorICAgICAgICAgICAgMTI5OiBiJ1x4MDBceDgxJywKKyAgICAgICAgICAgIC0yNTU6IGInXHhmZlx4MDEnLAorICAgICAgICAgICAgLTI1NjogYidceGZmXHgwMCcsCisgICAgICAgICAgICAyNTU6IGInXHgwMFx4ZmYnLAorICAgICAgICAgICAgMjU2OiBiJ1x4MDFceDAwJywKKyAgICAgICAgICAgIDMyNzY3OiBiJ1x4N2ZceGZmJywKKyAgICAgICAgICAgIC0zMjc2ODogYidceGZmXHg4MFx4MDAnLAorICAgICAgICAgICAgNjU1MzU6IGInXHgwMFx4ZmZceGZmJywKKyAgICAgICAgICAgIC02NTUzNjogYidceGZmXHgwMFx4MDAnLAorICAgICAgICAgICAgLTgzODg2MDg6IGInXHg4MFx4MDBceDAwJworICAgICAgICB9CisgICAgICAgIGNoZWNrKHRlc3RzMSwgJ2JpZycsIHNpZ25lZD1UcnVlKQorCisgICAgICAgICMgQ29udmVydCBpbnRlZ2VycyB0byBzaWduZWQgbGl0dGxlLWVuZGlhbiBieXRlIGFycmF5cy4KKyAgICAgICAgdGVzdHMyID0geworICAgICAgICAgICAgMDogYidceDAwJywKKyAgICAgICAgICAgIDE6IGInXHgwMScsCisgICAgICAgICAgICAtMTogYidceGZmJywKKyAgICAgICAgICAgIC0xMjc6IGInXHg4MScsCisgICAgICAgICAgICAtMTI4OiBiJ1x4ODAnLAorICAgICAgICAgICAgLTEyOTogYidceDdmXHhmZicsCisgICAgICAgICAgICAxMjc6IGInXHg3ZicsCisgICAgICAgICAgICAxMjk6IGInXHg4MVx4MDAnLAorICAgICAgICAgICAgLTI1NTogYidceDAxXHhmZicsCisgICAgICAgICAgICAtMjU2OiBiJ1x4MDBceGZmJywKKyAgICAgICAgICAgIDI1NTogYidceGZmXHgwMCcsCisgICAgICAgICAgICAyNTY6IGInXHgwMFx4MDEnLAorICAgICAgICAgICAgMzI3Njc6IGInXHhmZlx4N2YnLAorICAgICAgICAgICAgLTMyNzY4OiBiJ1x4MDBceDgwJywKKyAgICAgICAgICAgIDY1NTM1OiBiJ1x4ZmZceGZmXHgwMCcsCisgICAgICAgICAgICAtNjU1MzY6IGInXHgwMFx4MDBceGZmJywKKyAgICAgICAgICAgIC04Mzg4NjA4OiBiJ1x4MDBceDAwXHg4MCcKKyAgICAgICAgfQorICAgICAgICBjaGVjayh0ZXN0czIsICdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKKworICAgICAgICAjIENvbnZlcnQgaW50ZWdlcnMgdG8gdW5zaWduZWQgYmlnLWVuZGlhbiBieXRlIGFycmF5cy4KKyAgICAgICAgdGVzdHMzID0geworICAgICAgICAgICAgMDogYidceDAwJywKKyAgICAgICAgICAgIDE6IGInXHgwMScsCisgICAgICAgICAgICAxMjc6IGInXHg3ZicsCisgICAgICAgICAgICAxMjg6IGInXHg4MCcsCisgICAgICAgICAgICAyNTU6IGInXHhmZicsCisgICAgICAgICAgICAyNTY6IGInXHgwMVx4MDAnLAorICAgICAgICAgICAgMzI3Njc6IGInXHg3Zlx4ZmYnLAorICAgICAgICAgICAgMzI3Njg6IGInXHg4MFx4MDAnLAorICAgICAgICAgICAgNjU1MzU6IGInXHhmZlx4ZmYnLAorICAgICAgICAgICAgNjU1MzY6IGInXHgwMVx4MDBceDAwJworICAgICAgICB9CisgICAgICAgIGNoZWNrKHRlc3RzMywgJ2JpZycsIHNpZ25lZD1GYWxzZSkKKworICAgICAgICAjIENvbnZlcnQgaW50ZWdlcnMgdG8gdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBieXRlIGFycmF5cy4KKyAgICAgICAgdGVzdHM0ID0geworICAgICAgICAgICAgMDogYidceDAwJywKKyAgICAgICAgICAgIDE6IGInXHgwMScsCisgICAgICAgICAgICAxMjc6IGInXHg3ZicsCisgICAgICAgICAgICAxMjg6IGInXHg4MCcsCisgICAgICAgICAgICAyNTU6IGInXHhmZicsCisgICAgICAgICAgICAyNTY6IGInXHgwMFx4MDEnLAorICAgICAgICAgICAgMzI3Njc6IGInXHhmZlx4N2YnLAorICAgICAgICAgICAgMzI3Njg6IGInXHgwMFx4ODAnLAorICAgICAgICAgICAgNjU1MzU6IGInXHhmZlx4ZmYnLAorICAgICAgICAgICAgNjU1MzY6IGInXHgwMFx4MDBceDAxJworICAgICAgICB9CisgICAgICAgIGNoZWNrKHRlc3RzNCwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2JpZycsIHNpZ25lZD1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdiaWcnLCBzaWduZWQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKDI1NikudG9fYnl0ZXMsIDEsICdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgtMSkudG9fYnl0ZXMsIDIsICdiaWcnLCBzaWduZWQ9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwKS50b19ieXRlcygwLCAnYmlnJyksIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMSkudG9fYnl0ZXMoNSwgJ2JpZycpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkudG9fYnl0ZXMoNSwgJ2JpZycpLCBiJ1x4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEpLnRvX2J5dGVzKDUsICdiaWcnLCBzaWduZWQ9VHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhmZlx4ZmZceGZmXHhmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgxKS50b19ieXRlcywgMCwgJ2JpZycpCisKKyAgICBkZWYgdGVzdF9mcm9tX2J5dGVzKHNlbGYpOgorICAgICAgICBkZWYgY2hlY2sodGVzdHMsIGJ5dGVvcmRlciwgc2lnbmVkPUZhbHNlKToKKyAgICAgICAgICAgIGZvciB0ZXN0LCBleHBlY3RlZCBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGludC5mcm9tX2J5dGVzKHRlc3QsIGJ5dGVvcmRlciwgc2lnbmVkPXNpZ25lZCksCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGNvbnZlcnQgezB9IHdpdGggYnl0ZW9yZGVyPXsxIXJ9IGFuZCBzaWduZWQ9ezJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0ZXN0LCBieXRlb3JkZXIsIHNpZ25lZCkpIGZyb20gZXJyCisKKyAgICAgICAgIyBDb252ZXJ0IHNpZ25lZCBiaWctZW5kaWFuIGJ5dGUgYXJyYXlzIHRvIGludGVnZXJzLgorICAgICAgICB0ZXN0czEgPSB7CisgICAgICAgICAgICBiJyc6IDAsCisgICAgICAgICAgICBiJ1x4MDAnOiAwLAorICAgICAgICAgICAgYidceDAwXHgwMCc6IDAsCisgICAgICAgICAgICBiJ1x4MDEnOiAxLAorICAgICAgICAgICAgYidceDAwXHgwMSc6IDEsCisgICAgICAgICAgICBiJ1x4ZmYnOiAtMSwKKyAgICAgICAgICAgIGInXHhmZlx4ZmYnOiAtMSwKKyAgICAgICAgICAgIGInXHg4MSc6IC0xMjcsCisgICAgICAgICAgICBiJ1x4ODAnOiAtMTI4LAorICAgICAgICAgICAgYidceGZmXHg3Zic6IC0xMjksCisgICAgICAgICAgICBiJ1x4N2YnOiAxMjcsCisgICAgICAgICAgICBiJ1x4MDBceDgxJzogMTI5LAorICAgICAgICAgICAgYidceGZmXHgwMSc6IC0yNTUsCisgICAgICAgICAgICBiJ1x4ZmZceDAwJzogLTI1NiwKKyAgICAgICAgICAgIGInXHgwMFx4ZmYnOiAyNTUsCisgICAgICAgICAgICBiJ1x4MDFceDAwJzogMjU2LAorICAgICAgICAgICAgYidceDdmXHhmZic6IDMyNzY3LAorICAgICAgICAgICAgYidceDgwXHgwMCc6IC0zMjc2OCwKKyAgICAgICAgICAgIGInXHgwMFx4ZmZceGZmJzogNjU1MzUsCisgICAgICAgICAgICBiJ1x4ZmZceDAwXHgwMCc6IC02NTUzNiwKKyAgICAgICAgICAgIGInXHg4MFx4MDBceDAwJzogLTgzODg2MDgKKyAgICAgICAgfQorICAgICAgICBjaGVjayh0ZXN0czEsICdiaWcnLCBzaWduZWQ9VHJ1ZSkKKworICAgICAgICAjIENvbnZlcnQgc2lnbmVkIGxpdHRsZS1lbmRpYW4gYnl0ZSBhcnJheXMgdG8gaW50ZWdlcnMuCisgICAgICAgIHRlc3RzMiA9IHsKKyAgICAgICAgICAgIGInJzogMCwKKyAgICAgICAgICAgIGInXHgwMCc6IDAsCisgICAgICAgICAgICBiJ1x4MDBceDAwJzogMCwKKyAgICAgICAgICAgIGInXHgwMSc6IDEsCisgICAgICAgICAgICBiJ1x4MDBceDAxJzogMjU2LAorICAgICAgICAgICAgYidceGZmJzogLTEsCisgICAgICAgICAgICBiJ1x4ZmZceGZmJzogLTEsCisgICAgICAgICAgICBiJ1x4ODEnOiAtMTI3LAorICAgICAgICAgICAgYidceDgwJzogLTEyOCwKKyAgICAgICAgICAgIGInXHg3Zlx4ZmYnOiAtMTI5LAorICAgICAgICAgICAgYidceDdmJzogMTI3LAorICAgICAgICAgICAgYidceDgxXHgwMCc6IDEyOSwKKyAgICAgICAgICAgIGInXHgwMVx4ZmYnOiAtMjU1LAorICAgICAgICAgICAgYidceDAwXHhmZic6IC0yNTYsCisgICAgICAgICAgICBiJ1x4ZmZceDAwJzogMjU1LAorICAgICAgICAgICAgYidceDAwXHgwMSc6IDI1NiwKKyAgICAgICAgICAgIGInXHhmZlx4N2YnOiAzMjc2NywKKyAgICAgICAgICAgIGInXHgwMFx4ODAnOiAtMzI3NjgsCisgICAgICAgICAgICBiJ1x4ZmZceGZmXHgwMCc6IDY1NTM1LAorICAgICAgICAgICAgYidceDAwXHgwMFx4ZmYnOiAtNjU1MzYsCisgICAgICAgICAgICBiJ1x4MDBceDAwXHg4MCc6IC04Mzg4NjA4CisgICAgICAgIH0KKyAgICAgICAgY2hlY2sodGVzdHMyLCAnbGl0dGxlJywgc2lnbmVkPVRydWUpCisKKyAgICAgICAgIyBDb252ZXJ0IHVuc2lnbmVkIGJpZy1lbmRpYW4gYnl0ZSBhcnJheXMgdG8gaW50ZWdlcnMuCisgICAgICAgIHRlc3RzMyA9IHsKKyAgICAgICAgICAgIGInJzogMCwKKyAgICAgICAgICAgIGInXHgwMCc6IDAsCisgICAgICAgICAgICBiJ1x4MDEnOiAxLAorICAgICAgICAgICAgYidceDdmJzogMTI3LAorICAgICAgICAgICAgYidceDgwJzogMTI4LAorICAgICAgICAgICAgYidceGZmJzogMjU1LAorICAgICAgICAgICAgYidceDAxXHgwMCc6IDI1NiwKKyAgICAgICAgICAgIGInXHg3Zlx4ZmYnOiAzMjc2NywKKyAgICAgICAgICAgIGInXHg4MFx4MDAnOiAzMjc2OCwKKyAgICAgICAgICAgIGInXHhmZlx4ZmYnOiA2NTUzNSwKKyAgICAgICAgICAgIGInXHgwMVx4MDBceDAwJzogNjU1MzYsCisgICAgICAgIH0KKyAgICAgICAgY2hlY2sodGVzdHMzLCAnYmlnJywgc2lnbmVkPUZhbHNlKQorCisgICAgICAgICMgQ29udmVydCBpbnRlZ2VycyB0byB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGJ5dGUgYXJyYXlzLgorICAgICAgICB0ZXN0czQgPSB7CisgICAgICAgICAgICBiJyc6IDAsCisgICAgICAgICAgICBiJ1x4MDAnOiAwLAorICAgICAgICAgICAgYidceDAxJzogMSwKKyAgICAgICAgICAgIGInXHg3Zic6IDEyNywKKyAgICAgICAgICAgIGInXHg4MCc6IDEyOCwKKyAgICAgICAgICAgIGInXHhmZic6IDI1NSwKKyAgICAgICAgICAgIGInXHgwMFx4MDEnOiAyNTYsCisgICAgICAgICAgICBiJ1x4ZmZceDdmJzogMzI3NjcsCisgICAgICAgICAgICBiJ1x4MDBceDgwJzogMzI3NjgsCisgICAgICAgICAgICBiJ1x4ZmZceGZmJzogNjU1MzUsCisgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMSc6IDY1NTM2LAorICAgICAgICB9CisgICAgICAgIGNoZWNrKHRlc3RzNCwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKKworICAgICAgICBjbGFzcyBteWludChpbnQpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG15aW50LmZyb21fYnl0ZXMoYidceDAwJywgJ2JpZycpKSBpcyBteWludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteWludC5mcm9tX2J5dGVzKGInXHgwMScsICdiaWcnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgdHlwZShteWludC5mcm9tX2J5dGVzKGInXHgwMCcsICdiaWcnLCBzaWduZWQ9RmFsc2UpKSBpcyBteWludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteWludC5mcm9tX2J5dGVzKGInXHgwMScsICdiaWcnLCBzaWduZWQ9RmFsc2UpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShteWludC5mcm9tX2J5dGVzKGInXHgwMCcsICdsaXR0bGUnKSkgaXMgbXlpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlpbnQuZnJvbV9ieXRlcyhiJ1x4MDEnLCAnbGl0dGxlJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKG15aW50LmZyb21fYnl0ZXMoCisgICAgICAgICAgICBiJ1x4MDAnLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKSkgaXMgbXlpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlpbnQuZnJvbV9ieXRlcyhiJ1x4MDEnLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGludC5mcm9tX2J5dGVzKFsyNTUsIDAsIDBdLCAnYmlnJywgc2lnbmVkPVRydWUpLCAtNjU1MzYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBpbnQuZnJvbV9ieXRlcygoMjU1LCAwLCAwKSwgJ2JpZycsIHNpZ25lZD1UcnVlKSwgLTY1NTM2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludC5mcm9tX2J5dGVzKAorICAgICAgICAgICAgYnl0ZWFycmF5KGInXHhmZlx4MDBceDAwJyksICdiaWcnLCBzaWduZWQ9VHJ1ZSksIC02NTUzNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQuZnJvbV9ieXRlcygKKyAgICAgICAgICAgIGJ5dGVhcnJheShiJ1x4ZmZceDAwXHgwMCcpLCAnYmlnJywgc2lnbmVkPVRydWUpLCAtNjU1MzYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50LmZyb21fYnl0ZXMoCisgICAgICAgICAgICBhcnJheS5hcnJheSgnQicsIGInXHhmZlx4MDBceDAwJyksICdiaWcnLCBzaWduZWQ9VHJ1ZSksIC02NTUzNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQuZnJvbV9ieXRlcygKKyAgICAgICAgICAgIG1lbW9yeXZpZXcoYidceGZmXHgwMFx4MDAnKSwgJ2JpZycsIHNpZ25lZD1UcnVlKSwgLTY1NTM2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQuZnJvbV9ieXRlcywgWzI1Nl0sICdiaWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBpbnQuZnJvbV9ieXRlcywgWzBdLCAnYmlnXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludC5mcm9tX2J5dGVzLCBbMF0sICdsaXR0bGVceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQuZnJvbV9ieXRlcywgIiIsICdiaWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludC5mcm9tX2J5dGVzLCAiXHgwMCIsICdiaWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGludC5mcm9tX2J5dGVzLCAwLCAnYmlnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQuZnJvbV9ieXRlcywgMCwgJ2JpZycsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbXlpbnQuZnJvbV9ieXRlcywgIiIsICdiaWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG15aW50LmZyb21fYnl0ZXMsICJceDAwIiwgJ2JpZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbXlpbnQuZnJvbV9ieXRlcywgMCwgJ2JpZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LmZyb21fYnl0ZXMsIDAsICdiaWcnLCBUcnVlKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQppbmRleCBiNTE1N2JmLi5kNzMyZTE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CkBAIC0xLDUgKzEsNSBAQAogaW1wb3J0IG1hY3BhdGgKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0yNiw0MiArMjYsMjUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2FicyhiIjpmb286YmFyIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNhYnMoYiI6Zm9vOmJhcjoiKSkKIAotCi0gICAgZGVmIHRlc3RfY29tbW9ucHJlZml4KHNlbGYpOgotICAgICAgICBjb21tb25wcmVmaXggPSBtYWNwYXRoLmNvbW1vbnByZWZpeAotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tbW9ucHJlZml4KFsiaG9tZTpzd2Vuc29uOnNwYW0iLCAiaG9tZTpzd2VuOnNwYW0iXSkKLSAgICAgICAgICAgICAgICAgICAgID09ICJob21lOnN3ZW4iKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tbW9ucHJlZml4KFsiOmhvbWU6c3dlbjpzcGFtIiwgIjpob21lOnN3ZW46ZWdncyJdKQotICAgICAgICAgICAgICAgICAgICAgPT0gIjpob21lOnN3ZW46IikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbW1vbnByZWZpeChbIjpob21lOnN3ZW46c3BhbSIsICI6aG9tZTpzd2VuOnNwYW0iXSkKLSAgICAgICAgICAgICAgICAgICAgID09ICI6aG9tZTpzd2VuOnNwYW0iKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21tb25wcmVmaXgoW2IiaG9tZTpzd2Vuc29uOnNwYW0iLCBiImhvbWU6c3dlbjpzcGFtIl0pCi0gICAgICAgICAgICAgICAgICAgICA9PSBiImhvbWU6c3dlbiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb21tb25wcmVmaXgoW2IiOmhvbWU6c3dlbjpzcGFtIiwgYiI6aG9tZTpzd2VuOmVnZ3MiXSkKLSAgICAgICAgICAgICAgICAgICAgID09IGIiOmhvbWU6c3dlbjoiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoY29tbW9ucHJlZml4KFtiIjpob21lOnN3ZW46c3BhbSIsIGIiOmhvbWU6c3dlbjpzcGFtIl0pCi0gICAgICAgICAgICAgICAgICAgICA9PSBiIjpob21lOnN3ZW46c3BhbSIpCi0KICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc3BsaXQgPSBtYWNwYXRoLnNwbGl0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoImZvbzpiYXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJ2ZvbzonLCAnYmFyJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICgnZm9vOicsICdiYXInKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgiY29ua3k6bW91bnRwb2ludDpmb286YmFyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCdjb25reTptb3VudHBvaW50OmZvbycsICdiYXInKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjb25reTptb3VudHBvaW50OmZvbycsICdiYXInKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6IiksICgnJywgJycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCI6Y29ua3k6bW91bnRwb2ludDoiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJzpjb25reTptb3VudHBvaW50JywgJycpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoJzpjb25reTptb3VudHBvaW50JywgJycpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXQoYiJmb286YmFyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInZm9vOicsIGInYmFyJykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIChiJ2ZvbzonLCBiJ2JhcicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGIiY29ua3k6bW91bnRwb2ludDpmb286YmFyIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGInY29ua3k6bW91bnRwb2ludDpmb28nLCBiJ2JhcicpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoYidjb25reTptb3VudHBvaW50OmZvbycsIGInYmFyJykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdChiIjoiKSwgKGInJywgYicnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdChiIjpjb25reTptb3VudHBvaW50OiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJzpjb25reTptb3VudHBvaW50JywgYicnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGInOmNvbmt5Om1vdW50cG9pbnQnLCBiJycpKQogCiAgICAgZGVmIHRlc3Rfam9pbihzZWxmKToKICAgICAgICAgam9pbiA9IG1hY3BhdGguam9pbgpAQCAtNzcsMTQgKzYwLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYTpiJywgYic6YycpLCBiJ2E6YjpjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInOmInLCBiJzpjJyksIGInOmE6YjpjJykKIAotICAgIGRlZiB0ZXN0X3NwbGl0ZHJpdmUoc2VsZik6Ci0gICAgICAgIHNwbGl0ZHJpdmUgPSBtYWNwYXRoLnNwbGl0ZHJpdmUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCJmb286YmFyIiksICgnJywgJ2ZvbzpiYXInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRyaXZlKCI6Zm9vOmJhciIpLCAoJycsICc6Zm9vOmJhcicpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZShiImZvbzpiYXIiKSwgKGInJywgYidmb286YmFyJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkcml2ZShiIjpmb286YmFyIiksIChiJycsIGInOmZvbzpiYXInKSkKLQogICAgIGRlZiB0ZXN0X3NwbGl0ZXh0KHNlbGYpOgogICAgICAgICBzcGxpdGV4dCA9IG1hY3BhdGguc3BsaXRleHQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGV4dCgiOmZvby5leHQiKSwgKCc6Zm9vJywgJy5leHQnKSkKQEAgLTEzOSw4ICsxMTQsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChub3JtcGF0aChiImE6IiksIGIiYToiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm1wYXRoKGIiYTpiOiIpLCBiImE6YiIpCiAKKworY2xhc3MgTWFjQ29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QpOgorICAgIHBhdGhtb2R1bGUgPSBtYWNwYXRoCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1hY1BhdGhUZXN0Q2FzZSkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChNYWNQYXRoVGVzdENhc2UsIE1hY0NvbW1vblRlc3QpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQppbmRleCBkZDEzYzcyLi40NWFiY2M4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC03LDggKzcsMTAgQEAKIGltcG9ydCBlbWFpbC5tZXNzYWdlCiBpbXBvcnQgcmUKIGltcG9ydCBpbworaW1wb3J0IHRlbXBmaWxlCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgbWFpbGJveAogaW1wb3J0IGdsb2IKIHRyeToKQEAgLTIxLDE2ICsyMywxNiBAQAogCiAgICAgZGVmIF9jaGVja19zYW1wbGUoc2VsZiwgbXNnKToKICAgICAgICAgIyBJbnNwZWN0IGEgbWFpbGJveC5NZXNzYWdlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1wbGUgbWVzc2FnZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgZW1haWwubWVzc2FnZS5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBtYWlsYm94Lk1lc3NhZ2UpCiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIF9zYW1wbGVfaGVhZGVycy5pdGVtcygpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWx1ZSwgbXNnLmdldF9hbGwoa2V5KSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy5pc19tdWx0aXBhcnQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obXNnLmdldF9wYXlsb2FkKCkpLCBsZW4oX3NhbXBsZV9wYXlsb2FkcykpCiAgICAgICAgIGZvciBpLCBwYXlsb2FkIGluIGVudW1lcmF0ZShfc2FtcGxlX3BheWxvYWRzKToKICAgICAgICAgICAgIHBhcnQgPSBtc2cuZ2V0X3BheWxvYWQoaSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHBhcnQsIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UocGFydCwgbWFpbGJveC5NZXNzYWdlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXJ0LCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UocGFydCwgbWFpbGJveC5NZXNzYWdlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksIHBheWxvYWQpCiAKICAgICBkZWYgX2RlbGV0ZV9yZWN1cnNpdmVseShzZWxmLCB0YXJnZXQpOgpAQCAtNDgsNiArNTAsOCBAQAogCiBjbGFzcyBUZXN0TWFpbGJveChUZXN0QmFzZSk6CiAKKyAgICBtYXhEaWZmID0gTm9uZQorCiAgICAgX2ZhY3RvcnkgPSBOb25lICAgICAjIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyB0byByZXVzZSB0ZXN0cwogICAgIF90ZW1wbGF0ZSA9ICdGcm9tOiBmb29cblxuJXMnCiAKQEAgLTY5LDE0ICs3MywxMjQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMikKICAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKF9zYW1wbGVfbWVzc2FnZSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQotICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKGlvLlN0cmluZ0lPKF9zYW1wbGVfbWVzc2FnZSkpKQorICAgICAgICBrZXlzLmFwcGVuZChzZWxmLl9ib3guYWRkKGlvLkJ5dGVzSU8oX2J5dGVzX3NhbXBsZV9tZXNzYWdlKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuX2JveCksIDQpCiAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoX3NhbXBsZV9tZXNzYWdlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgNSkKKyAgICAgICAga2V5cy5hcHBlbmQoc2VsZi5fYm94LmFkZChfYnl0ZXNfc2FtcGxlX21lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGtleXMuYXBwZW5kKHNlbGYuX2JveC5hZGQoCisgICAgICAgICAgICAgICAgaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKF9ieXRlc19zYW1wbGVfbWVzc2FnZSkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgNykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXlzWzBdKSwgc2VsZi5fdGVtcGxhdGUgJSAwKQotICAgICAgICBmb3IgaSBpbiAoMSwgMiwgMywgNCk6CisgICAgICAgIGZvciBpIGluICgxLCAyLCAzLCA0LCA1LCA2KToKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3hba2V5c1tpXV0pCiAKKyAgICBfbm9uYXNjaWlfbXNnID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIEZyb206IGZvbworICAgICAgICAgICAgU3ViamVjdDogRmFsaW5hcHTDoXIgaMOhemhvenN6w6FsbMOtdMOhc3NhbC4gTcOhciByZW5kZWx0w6lsPworCisgICAgICAgICAgICAwCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9hZGRfaW52YWxpZF84Yml0X2J5dGVzX2hlYWRlcihzZWxmKToKKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChzZWxmLl9ub25hc2NpaV9tc2cuZW5jb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2J5dGVzKGtleSksCisgICAgICAgICAgICBzZWxmLl9ub25hc2NpaV9tc2cuZW5jb2RlKCdsYXRpbjEnKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbm9uYXNjaWlfaGVhZGVyX2FzX3N0cmluZyhzZWxmKToKKyAgICAgICAgc3ViaiA9IHNlbGYuX25vbmFzY2lpX21zZy5zcGxpdGxpbmVzKClbMV0KKyAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChzdWJqLmVuY29kZSgnbGF0aW4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwKKyAgICAgICAgICAgICdTdWJqZWN0OiA9P3Vua25vd24tOGJpdD9iP1JtRnNhVzVoY0hUaGNpQm80WHBvYjNwemV1RnNiTzEwNFhOeicKKyAgICAgICAgICAgICdZV3d1SUUzaGNpQnlaVzVrWld4MDZXdy8/PVxuXG4nKQorCisgICAgZGVmIHRlc3RfYWRkX25vbmFzY2lpX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgIkFTQ0lJLW9ubHkiKToKKyAgICAgICAgICAgIHNlbGYuX2JveC5hZGQoc2VsZi5fbm9uYXNjaWlfbXNnKQorICAgICAgICBzZWxmLl9ib3guZmx1c2goKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAwKQorICAgICAgICBzZWxmLmFzc2VydE1haWxib3hFbXB0eSgpCisKKyAgICBkZWYgdGVzdF9hZGRfdGhhdF9yYWlzZXNfbGVhdmVzX21haWxib3hfZW1wdHkoc2VsZik6CisgICAgICAgICMgWFhYIFRoaXMgdGVzdCB3aWxsIHN0YXJ0IGZhaWxpbmcgd2hlbiBNZXNzYWdlIGxlYXJucyB0byBoYW5kbGUKKyAgICAgICAgIyBub24tQVNDSUkgc3RyaW5nIGhlYWRlcnMsIGFuZCBhIGRpZmZlcmVudCBpbnRlcm5hbCBmYWlsdXJlIHdpbGwKKyAgICAgICAgIyBuZWVkIHRvIGJlIGZvdW5kIG9yIG1hbnVmYWN0dXJlZC4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2JveC5hZGQoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZygiRnJvbTogQWxwaMO2c28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRNYWlsYm94RW1wdHkoKQorCisgICAgX25vbl9sYXRpbl9iaW5fbXNnID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgRnJvbTogZm9vQGJhci5jb20KKyAgICAgICAgVG86IGLDoXoKKyAgICAgICAgU3ViamVjdDogTWFpbnRlbmFudCBqZSB2b3VzIHByw6lzZW50ZSBtb24gY29sbMOoZ3VlLCBsZSBwb3VmIGPDqWzDqGJyZQorICAgICAgICBcdEplYW4gZGUgQmFkZGllCisgICAgICAgIE1pbWUtVmVyc2lvbjogMS4wCisgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICDQlNCwLCDQvtC90Lgg0LvQtdGC0Y/Rgi4KKyAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2FkZF84Yml0X2JvZHkoc2VsZik6CisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoc2VsZi5fbm9uX2xhdGluX2Jpbl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9ieXRlcyhrZXkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vbl9sYXRpbl9iaW5fbXNnKQorICAgICAgICB3aXRoIHNlbGYuX2JveC5nZXRfZmlsZShrZXkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ub25fbGF0aW5fYmluX21zZy5yZXBsYWNlKGInXG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5saW5lc2VwLmVuY29kZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3hba2V5XS5nZXRfcGF5bG9hZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgItCU0LAsINC+0L3QuCDQu9C10YLRj9GCLlxuIikKKworICAgIGRlZiB0ZXN0X2FkZF9iaW5hcnlfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCd3YisnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShfYnl0ZXNfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoZikKKyAgICAgICAgIyBTZWUgaXNzdWUgMTEwNjIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5fYm94LCBtYWlsYm94LkJhYnlsKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9ieXRlcyhrZXkpLnNwbGl0KGInXG4nKSwKKyAgICAgICAgICAgICAgICBfYnl0ZXNfc2FtcGxlX21lc3NhZ2Uuc3BsaXQoYidcbicpKQorCisgICAgZGVmIHRlc3RfYWRkX2JpbmFyeV9ub25hc2NpaV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoJ3diKycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKHNlbGYuX25vbl9sYXRpbl9iaW5fbXNnKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKGYpCisgICAgICAgICMgU2VlIGlzc3VlIDExMDYyCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuX2JveCwgbWFpbGJveC5CYWJ5bCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfYnl0ZXMoa2V5KS5zcGxpdChiJ1xuJyksCisgICAgICAgICAgICAgICAgc2VsZi5fbm9uX2xhdGluX2Jpbl9tc2cuc3BsaXQoYidcbicpKQorCisgICAgZGVmIHRlc3RfYWRkX3RleHRfZmlsZV93YXJucyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCd3KycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChmKQorICAgICAgICAjIFNlZSBpc3N1ZSAxMTA2MgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLl9ib3gsIG1haWxib3guQmFieWwpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2J5dGVzKGtleSkuc3BsaXQoYidcbicpLAorICAgICAgICAgICAgICAgIF9ieXRlc19zYW1wbGVfbWVzc2FnZS5zcGxpdChiJ1xuJykpCisKKyAgICBkZWYgdGVzdF9hZGRfU3RyaW5nSU9fd2FybnMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAga2V5ID0gc2VsZi5fYm94LmFkZChpby5TdHJpbmdJTyhzZWxmLl90ZW1wbGF0ZSAlICIwIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5KSwgc2VsZi5fdGVtcGxhdGUgJSAiMCIpCisKKyAgICBkZWYgdGVzdF9hZGRfbm9uYXNjaWlfU3RyaW5nSU9fcmFpc2VzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiQVNDSUktb25seSIpOgorICAgICAgICAgICAgICAgIHNlbGYuX2JveC5hZGQoaW8uU3RyaW5nSU8oc2VsZi5fbm9uYXNjaWlfbXNnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5fYm94KSwgMCkKKyAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRNYWlsYm94RW1wdHkoKQorCiAgICAgZGVmIHRlc3RfcmVtb3ZlKHNlbGYpOgogICAgICAgICAjIFJlbW92ZSBtZXNzYWdlcyB1c2luZyByZW1vdmUoKQogICAgICAgICBzZWxmLl90ZXN0X3JlbW92ZV9vcl9kZWxpdGVtKHNlbGYuX2JveC5yZW1vdmUpCkBAIC0xNDksMjcgKzI2MywzOCBAQAogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cwLCBtYWlsYm94Lk1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnMCwgbWFpbGJveC5NZXNzYWdlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzBbJ2Zyb20nXSwgJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnMC5nZXRfcGF5bG9hZCgpLCAnMCcpCiAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShzZWxmLl9ib3guZ2V0X21lc3NhZ2Uoa2V5MSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfYnl0ZXMoc2VsZik6CisgICAgICAgICMgR2V0IGJ5dGVzIHJlcHJlc2VudGF0aW9ucyBvZiBtZXNzYWdlcworICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCisgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X2J5dGVzKGtleTApLAorICAgICAgICAgICAgKHNlbGYuX3RlbXBsYXRlICUgMCkuZW5jb2RlKCdhc2NpaScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfYnl0ZXMoa2V5MSksIF9ieXRlc19zYW1wbGVfbWVzc2FnZSkKKwogICAgIGRlZiB0ZXN0X2dldF9zdHJpbmcoc2VsZik6CiAgICAgICAgICMgR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgbWVzc2FnZXMKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQoc2VsZi5fdGVtcGxhdGUgJSAwKQogICAgICAgICBrZXkxID0gc2VsZi5fYm94LmFkZChfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94LmdldF9zdHJpbmcoa2V5MCksIHNlbGYuX3RlbXBsYXRlICUgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9ib3guZ2V0X3N0cmluZyhrZXkxKSwgX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleTEpLnNwbGl0KCdcbicpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZS5zcGxpdCgnXG4nKSkKIAogICAgIGRlZiB0ZXN0X2dldF9maWxlKHNlbGYpOgogICAgICAgICAjIEdldCBmaWxlIHJlcHJlc2VudGF0aW9ucyBvZiBtZXNzYWdlcwogICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChzZWxmLl90ZW1wbGF0ZSAlIDApCiAgICAgICAgIGtleTEgPSBzZWxmLl9ib3guYWRkKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgZGF0YTAgPSBzZWxmLl9ib3guZ2V0X2ZpbGUoa2V5MCkucmVhZCgpCi0gICAgICAgIGRhdGExID0gc2VsZi5fYm94LmdldF9maWxlKGtleTEpLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEwLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCisgICAgICAgIHdpdGggc2VsZi5fYm94LmdldF9maWxlKGtleTApIGFzIGZpbGU6CisgICAgICAgICAgICBkYXRhMCA9IGZpbGUucmVhZCgpCisgICAgICAgIHdpdGggc2VsZi5fYm94LmdldF9maWxlKGtleTEpIGFzIGZpbGU6CisgICAgICAgICAgICBkYXRhMSA9IGZpbGUucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTAuZGVjb2RlKCdhc2NpaScpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVtcGxhdGUgJSAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEuZGVjb2RlKCdhc2NpaScpLnJlcGxhY2Uob3MubGluZXNlcCwgJ1xuJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlKQogCiAgICAgZGVmIHRlc3RfaXRlcmtleXMoc2VsZik6CkBAIC00MDMsMTEgKzUyOCwxMiBAQAogICAgIGRlZiB0ZXN0X2R1bXBfbWVzc2FnZShzZWxmKToKICAgICAgICAgIyBXcml0ZSBtZXNzYWdlIHJlcHJlc2VudGF0aW9ucyB0byBkaXNrCiAgICAgICAgIGZvciBpbnB1dCBpbiAoZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhfc2FtcGxlX21lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgIF9zYW1wbGVfbWVzc2FnZSwgaW8uU3RyaW5nSU8oX3NhbXBsZV9tZXNzYWdlKSk6Ci0gICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICAgICAgICAgICAgX3NhbXBsZV9tZXNzYWdlLCBpby5CeXRlc0lPKF9ieXRlc19zYW1wbGVfbWVzc2FnZSkpOgorICAgICAgICAgICAgb3V0cHV0ID0gaW8uQnl0ZXNJTygpCiAgICAgICAgICAgICBzZWxmLl9ib3guX2R1bXBfbWVzc2FnZShpbnB1dCwgb3V0cHV0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQuZ2V0dmFsdWUoKSwgX3NhbXBsZV9tZXNzYWdlKQotICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgIF9ieXRlc19zYW1wbGVfbWVzc2FnZS5yZXBsYWNlKGInXG4nLCBvcy5saW5lc2VwLmVuY29kZSgpKSkKKyAgICAgICAgb3V0cHV0ID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBzZWxmLl9ib3guX2R1bXBfbWVzc2FnZShOb25lLCBvdXRwdXQpKQogCkBAIC00MzcsNiArNTYzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guX19nZXRpdGVtX18oJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXRfbWVzc2FnZSgnJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmdldF9zdHJpbmcoJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXRfYnl0ZXMoJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXRfZmlsZSgnJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogJycgaW4gYm94KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2NvbnRhaW5zX18oJycpKQpAQCAtNDYwLDYgKzU4Nyw5IEBACiAgICAgICAgIGlmIG9zLm5hbWUgaW4gKCdudCcsICdvczInKSBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CiAgICAgICAgICAgICBzZWxmLl9ib3guY29sb24gPSAnIScKIAorICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcpKSwgW10pCisKICAgICBkZWYgdGVzdF9hZGRfTU0oc2VsZik6CiAgICAgICAgICMgQWRkIGEgTWFpbGRpck1lc3NhZ2UgaW5zdGFuY2UKICAgICAgICAgbXNnID0gbWFpbGJveC5NYWlsZGlyTWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCkBAIC00NzYsNyArNjA2LDcgQEAKICAgICAgICAgbXNnLnNldF9mbGFncygnUkYnKQogICAgICAgICBrZXkgPSBzZWxmLl9ib3guYWRkKG1zZykKICAgICAgICAgbXNnX3JldHVybmVkID0gc2VsZi5fYm94LmdldF9tZXNzYWdlKGtleSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnX3JldHVybmVkLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZ19yZXR1cm5lZCwgbWFpbGJveC5NYWlsZGlyTWVzc2FnZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X3N1YmRpcigpLCAnY3VyJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dfcmV0dXJuZWQuZ2V0X2ZsYWdzKCksICdGUicpCiAKQEAgLTUxNiw3ICs2NDYsNyBAQAogICAgICAgICBib3ggPSBtYWlsYm94Lk1haWxkaXIoc2VsZi5fcGF0aCwgZmFjdG9yeT1GYWtlTWVzc2FnZSkKICAgICAgICAgYm94LmNvbG9uID0gc2VsZi5fYm94LmNvbG9uCiAgICAgICAgIG1zZzIgPSBib3guZ2V0X21lc3NhZ2Uoa2V5KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2cyLCBGYWtlTWVzc2FnZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cyLCBGYWtlTWVzc2FnZSkKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfbmV3KHNlbGYpOgogICAgICAgICAjIEluaXRpYWxpemUgYSBub24tZXhpc3RlbnQgbWFpbGJveApAQCAtNTg2LDEyICs3MTYsMTAgQEAKICAgICAgICAgIyBSZW1vdmUgb2xkIGZpbGVzIGZyb20gJ3RtcCcKICAgICAgICAgZm9vX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsICdmb28nKQogICAgICAgICBiYXJfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAndG1wJywgJ2JhcicpCi0gICAgICAgIGYgPSBvcGVuKGZvb19wYXRoLCAndycpCi0gICAgICAgIGYud3JpdGUoIkAiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oYmFyX3BhdGgsICd3JykKLSAgICAgICAgZi53cml0ZSgiQCIpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oZm9vX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQorICAgICAgICB3aXRoIG9wZW4oYmFyX3BhdGgsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIkAiKQogICAgICAgICBzZWxmLl9ib3guY2xlYW4oKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm9vX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoYmFyX3BhdGgpKQpAQCAtNjQwLDkgKzc2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIb3N0IG5hbWUgbWlzbWF0Y2g6ICclcycgc2hvdWxkIGJlICclcyciICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3Vwc1s0XSwgaG9zdG5hbWUpKQogICAgICAgICAgICAgcHJldmlvdXNfZ3JvdXBzID0gZ3JvdXBzCi0gICAgICAgICAgICB0bXBfZmlsZS53cml0ZShfc2FtcGxlX21lc3NhZ2UpCisgICAgICAgICAgICB0bXBfZmlsZS53cml0ZShfYnl0ZXNfc2FtcGxlX21lc3NhZ2UpCiAgICAgICAgICAgICB0bXBfZmlsZS5zZWVrKDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtcF9maWxlLnJlYWQoKSwgX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bXBfZmlsZS5yZWFkKCksIF9ieXRlc19zYW1wbGVfbWVzc2FnZSkKICAgICAgICAgICAgIHRtcF9maWxlLmNsb3NlKCkKICAgICAgICAgZmlsZV9jb3VudCA9IGxlbihvcy5saXN0ZGlyKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCAidG1wIikpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfY291bnQsIHJlcGV0aXRpb25zLApAQCAtNzc5LDE3ICs5MDcsMjggQEAKIGNsYXNzIF9UZXN0TWJveE1NREYoVGVzdE1haWxib3gpOgogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKICAgICAgICAgc2VsZi5fZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYuX3BhdGgpCiAgICAgICAgIGZvciBsb2NrX3JlbW5hbnQgaW4gZ2xvYi5nbG9iKHNlbGYuX3BhdGggKyAnLionKToKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGxvY2tfcmVtbmFudCkKIAorICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbXSkKKwogICAgIGRlZiB0ZXN0X2FkZF9mcm9tX3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBZGQgYSBzdHJpbmcgc3RhcnRpbmcgd2l0aCAnRnJvbSAnIHRvIHRoZSBtYWlsYm94CiAgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoJ0Zyb20gZm9vQGJhciBibGFoXG5Gcm9tOiBmb29cblxuMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94W2tleV0uZ2V0X2Zyb20oKSwgJ2Zvb0BiYXIgYmxhaCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fYm94W2tleV0uZ2V0X3BheWxvYWQoKSwgJzAnKQogCisgICAgZGVmIHRlc3RfYWRkX2Zyb21fYnl0ZXMoc2VsZik6CisgICAgICAgICMgQWRkIGEgYnl0ZSBzdHJpbmcgc3RhcnRpbmcgd2l0aCAnRnJvbSAnIHRvIHRoZSBtYWlsYm94CisgICAgICAgIGtleSA9IHNlbGYuX2JveC5hZGQoYidGcm9tIGZvb0BiYXIgYmxhaFxuRnJvbTogZm9vXG5cbjAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveFtrZXldLmdldF9mcm9tKCksICdmb29AYmFyIGJsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2JveFtrZXldLmdldF9wYXlsb2FkKCksICcwJykKKwogICAgIGRlZiB0ZXN0X2FkZF9tYm94X29yX21tZGZfbWVzc2FnZShzZWxmKToKICAgICAgICAgIyBBZGQgYW4gbWJveE1lc3NhZ2Ugb3IgTU1ERk1lc3NhZ2UKICAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5tYm94TWVzc2FnZSwgbWFpbGJveC5NTURGTWVzc2FnZSk6CkBAIC04MjAsNyArOTU5LDggQEAKICAgICAgICAgc2VsZi5fYm94Ll9maWxlLnNlZWsoMCkKICAgICAgICAgY29udGVudHMgPSBzZWxmLl9ib3guX2ZpbGUucmVhZCgpCiAgICAgICAgIHNlbGYuX2JveC5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIG9wZW4oc2VsZi5fcGF0aCwgJ3InLCBuZXdsaW5lPScnKS5yZWFkKCkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50cywgZi5yZWFkKCkpCiAgICAgICAgIHNlbGYuX2JveCA9IHNlbGYuX2ZhY3Rvcnkoc2VsZi5fcGF0aCkKIAogICAgIGRlZiB0ZXN0X2xvY2tfY29uZmxpY3Qoc2VsZik6CkBAIC04OTksNiArMTAzOSw5IEBACiAKICAgICBfZmFjdG9yeSA9IGxhbWJkYSBzZWxmLCBwYXRoLCBmYWN0b3J5PU5vbmU6IG1haWxib3guTUgocGF0aCwgZmFjdG9yeSkKIAorICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcihzZWxmLl9wYXRoKSwgWycubWhfc2VxdWVuY2VzJ10pCisKICAgICBkZWYgdGVzdF9saXN0X2ZvbGRlcnMoc2VsZik6CiAgICAgICAgICMgTGlzdCBmb2xkZXJzCiAgICAgICAgIHNlbGYuX2JveC5hZGRfZm9sZGVyKCdvbmUnKQpAQCAtOTcyLDYgKzExMTUsMTMgQEAKICAgICAgICAga2V5MCA9IHNlbGYuX2JveC5hZGQobXNnMCkKICAgICAgICAgcmVmbXNnMCA9IHNlbGYuX2JveC5nZXRfbWVzc2FnZShrZXkwKQogCisgICAgZGVmIHRlc3RfaXNzdWU3NjI3KHNlbGYpOgorICAgICAgICBtc2cwID0gbWFpbGJveC5NSE1lc3NhZ2Uoc2VsZi5fdGVtcGxhdGUgJSAwKQorICAgICAgICBrZXkwID0gc2VsZi5fYm94LmFkZChtc2cwKQorICAgICAgICBzZWxmLl9ib3gubG9jaygpCisgICAgICAgIHNlbGYuX2JveC5yZW1vdmUoa2V5MCkKKyAgICAgICAgc2VsZi5fYm94LnVubG9jaygpCisKICAgICBkZWYgdGVzdF9wYWNrKHNlbGYpOgogICAgICAgICAjIFBhY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBtYWlsYm94CiAgICAgICAgIG1zZzAgPSBtYWlsYm94Lk1ITWVzc2FnZShzZWxmLl90ZW1wbGF0ZSAlIDApCkBAIC0xMDI0LDcgKzExNzQsMTIgQEAKIAogICAgIF9mYWN0b3J5ID0gbGFtYmRhIHNlbGYsIHBhdGgsIGZhY3Rvcnk9Tm9uZTogbWFpbGJveC5CYWJ5bChwYXRoLCBmYWN0b3J5KQogCisgICAgZGVmIGFzc2VydE1haWxib3hFbXB0eShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIFtdKQorCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKICAgICAgICAgc2VsZi5fZGVsZXRlX3JlY3Vyc2l2ZWx5KHNlbGYuX3BhdGgpCiAgICAgICAgIGZvciBsb2NrX3JlbW5hbnQgaW4gZ2xvYi5nbG9iKHNlbGYuX3BhdGggKyAnLionKToKQEAgLTEwNzQsMjEgKzEyMjksMjkgQEAKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF9maWxlKHNlbGYpOgogICAgICAgICAjIEluaXRpYWxpemUgYmFzZWQgb24gY29udGVudHMgb2YgZmlsZQotICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAndysnKQotICAgICAgICBmLndyaXRlKF9zYW1wbGVfbWVzc2FnZSkKLSAgICAgICAgZi5zZWVrKDApCi0gICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKLSAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQotICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX3BhdGgsICd3KycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKF9zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgbXNnID0gc2VsZi5fZmFjdG9yeShmKQorICAgICAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZykKKworICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF9iaW5hcnlfZmlsZShzZWxmKToKKyAgICAgICAgIyBJbml0aWFsaXplIGJhc2VkIG9uIGNvbnRlbnRzIG9mIGJpbmFyeSBmaWxlCisgICAgICAgIHdpdGggb3BlbihzZWxmLl9wYXRoLCAnd2IrJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoX2J5dGVzX3NhbXBsZV9tZXNzYWdlKQorICAgICAgICAgICAgZi5zZWVrKDApCisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KGYpCisgICAgICAgICAgICBzZWxmLl9wb3N0X2luaXRpYWxpemVfaG9vayhtc2cpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zYW1wbGUobXNnKQogCiAgICAgZGVmIHRlc3RfaW5pdGlhbGl6ZV93aXRoX25vdGhpbmcoc2VsZik6CiAgICAgICAgICMgSW5pdGlhbGl6ZSB3aXRob3V0IGFyZ3VtZW50cwogICAgICAgICBtc2cgPSBzZWxmLl9mYWN0b3J5KCkKICAgICAgICAgc2VsZi5fcG9zdF9pbml0aWFsaXplX2hvb2sobXNnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShtc2csIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1zZywgbWFpbGJveC5NZXNzYWdlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UobXNnLCBzZWxmLl9mYWN0b3J5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZywgZW1haWwubWVzc2FnZS5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobXNnLCBtYWlsYm94Lk1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2csIHNlbGYuX2ZhY3RvcnkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmtleXMoKSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobXNnLmlzX211bHRpcGFydCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZy5nZXRfcGF5bG9hZCgpLCBOb25lKQpAQCAtMTM1OCw2ICsxNTIxLDE0IEBACiAgICAgICAgICAgICBtc2dfcGxhaW4gPSBtYWlsYm94Lk1lc3NhZ2UobXNnKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2FtcGxlKG1zZ19wbGFpbikKIAorICAgIGRlZiB0ZXN0X3hfZnJvbV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBDb252ZXJ0IGFsbCBmb3JtYXRzIHRvIE1lc3NhZ2UKKyAgICAgICAgZm9yIGNsYXNzXyBpbiAobWFpbGJveC5NZXNzYWdlLCBtYWlsYm94Lk1haWxkaXJNZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICBtYWlsYm94Lm1ib3hNZXNzYWdlLCBtYWlsYm94Lk1ITWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgbWFpbGJveC5CYWJ5bE1lc3NhZ2UsIG1haWxib3guTU1ERk1lc3NhZ2UpOgorICAgICAgICAgICAgbXNnID0gY2xhc3NfKF9ieXRlc19zYW1wbGVfbWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NhbXBsZShtc2cpCisKICAgICBkZWYgdGVzdF94X3RvX2ludmFsaWQoc2VsZik6CiAgICAgICAgICMgQ29udmVydCBhbGwgZm9ybWF0cyB0byBhbiBpbnZhbGlkIGZvcm1hdAogICAgICAgICBmb3IgY2xhc3NfIGluIChtYWlsYm94Lk1lc3NhZ2UsIG1haWxib3guTWFpbGRpck1lc3NhZ2UsCkBAIC0xODA0LDE4ICsxOTc1LDE2IEBACiAgICAgICAgIGZpbGVuYW1lID0gIi4iLmpvaW4oKHN0cih0KSwgc3RyKHBpZCksICJteWhvc3RuYW1lIiwgIm15ZG9tYWluIikpCiAgICAgICAgIHRtcG5hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCAidG1wIiwgZmlsZW5hbWUpCiAgICAgICAgIG5ld25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5fZGlyLCBkaXIsIGZpbGVuYW1lKQotICAgICAgICBmcCA9IG9wZW4odG1wbmFtZSwgInciKQotICAgICAgICBzZWxmLl9tc2dmaWxlcy5hcHBlbmQodG1wbmFtZSkKLSAgICAgICAgaWYgbWJveDoKLSAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQotICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKHRtcG5hbWUpCisgICAgICAgICAgICBpZiBtYm94OgorICAgICAgICAgICAgICAgIGZwLndyaXRlKEZST01fKQorICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKICAgICAgICAgICAgIG9zLmxpbmsodG1wbmFtZSwgbmV3bmFtZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihuZXduYW1lLCAidyIpCi0gICAgICAgICAgICBmcC53cml0ZShEVU1NWV9NRVNTQUdFKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5ld25hbWUsICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoRFVNTVlfTUVTU0FHRSkKICAgICAgICAgc2VsZi5fbXNnZmlsZXMuYXBwZW5kKG5ld25hbWUpCiAgICAgICAgIHJldHVybiB0bXBuYW1lCiAKQEAgLTE5MDUsNiArMjA3NCw4IEBACiAtLU5NdU16OW50MDV3ODBkNCstLQogIiIiCiAKK19ieXRlc19zYW1wbGVfbWVzc2FnZSA9IF9zYW1wbGVfbWVzc2FnZS5lbmNvZGUoJ2FzY2lpJykKKwogX3NhbXBsZV9oZWFkZXJzID0gewogICAgICJSZXR1cm4tUGF0aCI6Ijxna2pAZ3JlZ29yeWtqb2huc29uLmNvbT4iLAogICAgICJYLU9yaWdpbmFsLVRvIjoiZ2tqK3BlcnNvbkBsb2NhbGhvc3QiLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5IGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CmluZGV4IDVlMWNkZDUuLjgxY2Y1OTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgbWFyc2hhbApAQCAtMTEsMTYgKzExLDEwIEBACiAgICAgICAgIG5ldyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzYW1wbGUsICpleHRyYSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlLCBuZXcpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgICAgIG1hcnNoYWwuZHVtcChzYW1wbGUsIGYsICpleHRyYSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikKLSAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgICAgICBuZXcgPSBtYXJzaGFsLmxvYWQoZikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNhbXBsZSwgbmV3KQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21hdGgucHkgYi9MaWIvdGVzdC90ZXN0X21hdGgucHkKaW5kZXggOWE4N2Q1ZC4uZGRkYzg4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWF0aC5weQpAQCAtMSwxMiArMSwxNCBAQAogIyBQeXRob24gdGVzdCBzZXQgLS0gbWF0aCBtb2R1bGUKICMgWFhYWCBTaG91bGQgbm90IGRvIHRlc3RzIGFyb3VuZCB6ZXJvIG9ubHkKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdmVyYm9zZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgdmVyYm9zZSwgcmVxdWlyZXNfSUVFRV83NTQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG1hdGgKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHJhbmRvbQoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5c2NvbmZpZwogCiBlcHMgPSAxRS0wNQogTkFOID0gZmxvYXQoJ25hbicpCkBAIC0yNCw4ICsyNiwxMzAgQEAKIGVsc2U6CiAgICAgZmlsZSA9IF9fZmlsZV9fCiB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShmaWxlKSBvciBvcy5jdXJkaXIKK21hdGhfdGVzdGNhc2VzID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnbWF0aF90ZXN0Y2FzZXMudHh0JykKIHRlc3RfZmlsZSA9IG9zLnBhdGguam9pbih0ZXN0X2RpciwgJ2NtYXRoX3Rlc3RjYXNlcy50eHQnKQogCitkZWYgdG9fdWxwcyh4KToKKyAgICAiIiJDb252ZXJ0IGEgbm9uLU5hTiBmbG9hdCB4IHRvIGFuIGludGVnZXIsIGluIHN1Y2ggYSB3YXkgdGhhdAorICAgIGFkamFjZW50IGZsb2F0cyBhcmUgY29udmVydGVkIHRvIGFkamFjZW50IGludGVnZXJzLiAgVGhlbgorICAgIGFicyh1bHBzKHgpIC0gdWxwcyh5KSkgZ2l2ZXMgdGhlIGRpZmZlcmVuY2UgaW4gdWxwcyBiZXR3ZWVuIHR3bworICAgIGZsb2F0cy4KKworICAgIFRoZSByZXN1bHRzIGZyb20gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgbWFrZSBzZW5zZSBvbiBwbGF0Zm9ybXMKKyAgICB3aGVyZSBDIGRvdWJsZXMgYXJlIHJlcHJlc2VudGVkIGluIElFRUUgNzU0IGJpbmFyeTY0IGZvcm1hdC4KKworICAgICIiIgorICAgIG4gPSBzdHJ1Y3QudW5wYWNrKCc8cScsIHN0cnVjdC5wYWNrKCc8ZCcsIHgpKVswXQorICAgIGlmIG4gPCAwOgorICAgICAgICBuID0gfihuKzIqKjYzKQorICAgIHJldHVybiBuCisKK2RlZiB1bHBzX2NoZWNrKGV4cGVjdGVkLCBnb3QsIHVscHM9MjApOgorICAgICIiIkdpdmVuIG5vbi1OYU4gZmxvYXRzIGBleHBlY3RlZGAgYW5kIGBnb3RgLAorICAgIGNoZWNrIHRoYXQgdGhleSdyZSBlcXVhbCB0byB3aXRoaW4gdGhlIGdpdmVuIG51bWJlciBvZiB1bHBzLgorCisgICAgUmV0dXJucyBOb25lIG9uIHN1Y2Nlc3MgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugb24gZmFpbHVyZS4iIiIKKworICAgIHVscHNfZXJyb3IgPSB0b191bHBzKGdvdCkgLSB0b191bHBzKGV4cGVjdGVkKQorICAgIGlmIGFicyh1bHBzX2Vycm9yKSA8PSB1bHBzOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAiZXJyb3IgPSB7fSB1bHBzOyBwZXJtaXR0ZWQgZXJyb3IgPSB7fSB1bHBzIi5mb3JtYXQodWxwc19lcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVscHMpCisKKyMgSGVyZSdzIGEgcHVyZSBQeXRob24gdmVyc2lvbiBvZiB0aGUgbWF0aC5mYWN0b3JpYWwgYWxnb3JpdGhtLCBmb3IKKyMgZG9jdW1lbnRhdGlvbiBhbmQgY29tcGFyaXNvbiBwdXJwb3Nlcy4KKyMKKyMgRm9ybXVsYToKKyMKKyMgICBmYWN0b3JpYWwobikgPSBmYWN0b3JpYWxfb2RkX3BhcnQobikgPDwgKG4gLSBjb3VudF9zZXRfYml0cyhuKSkKKyMKKyMgd2hlcmUKKyMKKyMgICBmYWN0b3JpYWxfb2RkX3BhcnQobikgPSBwcm9kdWN0X3tpID49IDB9IHByb2R1Y3RfezAgPCBqIDw9IG4gPj4gaTsgaiBvZGR9IGoKKyMKKyMgVGhlIG91dGVyIHByb2R1Y3QgYWJvdmUgaXMgYW4gaW5maW5pdGUgcHJvZHVjdCwgYnV0IG9uY2UgaSA+PSBuLmJpdF9sZW5ndGgsCisjIChuID4+IGkpIDwgMSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdGVybSBvZiB0aGUgcHJvZHVjdCBpcyBlbXB0eS4gIFNvIG9ubHkgdGhlCisjIGZpbml0ZWx5IG1hbnkgdGVybXMgZm9yIDAgPD0gaSA8IG4uYml0X2xlbmd0aCgpIGNvbnRyaWJ1dGUgYW55dGhpbmcuCisjCisjIFdlIGl0ZXJhdGUgZG93bndhcmRzIGZyb20gaSA9PSBuLmJpdF9sZW5ndGgoKSAtIDEgdG8gaSA9PSAwLiAgVGhlIGlubmVyCisjIHByb2R1Y3QgaW4gdGhlIGZvcm11bGEgYWJvdmUgc3RhcnRzIGF0IDEgZm9yIGkgPT0gbi5iaXRfbGVuZ3RoKCk7IGZvciBlYWNoIGkKKyMgPCBuLmJpdF9sZW5ndGgoKSB3ZSBnZXQgdGhlIGlubmVyIHByb2R1Y3QgZm9yIGkgZnJvbSB0aGF0IGZvciBpICsgMSBieQorIyBtdWx0aXBseWluZyBieSBhbGwgaiBpbiB7biA+PiBpKzEgPCBqIDw9IG4gPj4gaTsgaiBvZGR9LiAgSW4gUHl0aG9uIHRlcm1zLAorIyB0aGlzIHNldCBpcyByYW5nZSgobiA+PiBpKzEpICsgMSB8IDEsIChuID4+IGkpICsgMSB8IDEsIDIpLgorCitkZWYgY291bnRfc2V0X2JpdHMobik6CisgICAgIiIiTnVtYmVyIG9mICcxJyBiaXRzIGluIGJpbmFyeSBleHBhbnNpb24gb2YgYSBub25ubmVnYXRpdmUgaW50ZWdlci4iIiIKKyAgICByZXR1cm4gMSArIGNvdW50X3NldF9iaXRzKG4gJiBuIC0gMSkgaWYgbiBlbHNlIDAKKworZGVmIHBhcnRpYWxfcHJvZHVjdChzdGFydCwgc3RvcCk6CisgICAgIiIiUHJvZHVjdCBvZiBpbnRlZ2VycyBpbiByYW5nZShzdGFydCwgc3RvcCwgMiksIGNvbXB1dGVkIHJlY3Vyc2l2ZWx5LgorICAgIHN0YXJ0IGFuZCBzdG9wIHNob3VsZCBib3RoIGJlIG9kZCwgd2l0aCBzdGFydCA8PSBzdG9wLgorCisgICAgIiIiCisgICAgbnVtZmFjdG9ycyA9IChzdG9wIC0gc3RhcnQpID4+IDEKKyAgICBpZiBub3QgbnVtZmFjdG9yczoKKyAgICAgICAgcmV0dXJuIDEKKyAgICBlbGlmIG51bWZhY3RvcnMgPT0gMToKKyAgICAgICAgcmV0dXJuIHN0YXJ0CisgICAgZWxzZToKKyAgICAgICAgbWlkID0gKHN0YXJ0ICsgbnVtZmFjdG9ycykgfCAxCisgICAgICAgIHJldHVybiBwYXJ0aWFsX3Byb2R1Y3Qoc3RhcnQsIG1pZCkgKiBwYXJ0aWFsX3Byb2R1Y3QobWlkLCBzdG9wKQorCitkZWYgcHlfZmFjdG9yaWFsKG4pOgorICAgICIiIkZhY3RvcmlhbCBvZiBub25uZWdhdGl2ZSBpbnRlZ2VyIG4sIHZpYSAiQmluYXJ5IFNwbGl0IEZhY3RvcmlhbCBGb3JtdWxhIgorICAgIGRlc2NyaWJlZCBhdCBodHRwOi8vd3d3Lmx1c2NobnkuZGUvbWF0aC9mYWN0b3JpYWwvYmluYXJ5c3BsaXRmYWN0Lmh0bWwKKworICAgICIiIgorICAgIGlubmVyID0gb3V0ZXIgPSAxCisgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2Uobi5iaXRfbGVuZ3RoKCkpKToKKyAgICAgICAgaW5uZXIgKj0gcGFydGlhbF9wcm9kdWN0KChuID4+IGkgKyAxKSArIDEgfCAxLCAobiA+PiBpKSArIDEgfCAxKQorICAgICAgICBvdXRlciAqPSBpbm5lcgorICAgIHJldHVybiBvdXRlciA8PCAobiAtIGNvdW50X3NldF9iaXRzKG4pKQorCitkZWYgYWNjX2NoZWNrKGV4cGVjdGVkLCBnb3QsIHJlbF9lcnI9MmUtMTUsIGFic19lcnIgPSA1ZS0zMjMpOgorICAgICIiIkRldGVybWluZSB3aGV0aGVyIG5vbi1OYU4gZmxvYXRzIGEgYW5kIGIgYXJlIGVxdWFsIHRvIHdpdGhpbiBhCisgICAgKHNtYWxsKSByb3VuZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgcmVsX2VyciBhbmQKKyAgICBhYnNfZXJyIGFyZSBjaG9zZW4gdG8gYmUgc3VpdGFibGUgZm9yIHBsYXRmb3JtcyB3aGVyZSBhIGZsb2F0IGlzCisgICAgcmVwcmVzZW50ZWQgYnkgYW4gSUVFRSA3NTQgZG91YmxlLiAgVGhleSBhbGxvdyBhbiBlcnJvciBvZiBiZXR3ZWVuCisgICAgOSBhbmQgMTkgdWxwcy4iIiIKKworICAgICMgbmVlZCB0byBzcGVjaWFsIGNhc2UgaW5maW5pdGllcywgc2luY2UgaW5mIC0gaW5mIGdpdmVzIG5hbgorICAgIGlmIG1hdGguaXNpbmYoZXhwZWN0ZWQpIGFuZCBnb3QgPT0gZXhwZWN0ZWQ6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBlcnJvciA9IGdvdCAtIGV4cGVjdGVkCisKKyAgICBwZXJtaXR0ZWRfZXJyb3IgPSBtYXgoYWJzX2VyciwgcmVsX2VyciAqIGFicyhleHBlY3RlZCkpCisgICAgaWYgYWJzKGVycm9yKSA8IHBlcm1pdHRlZF9lcnJvcjoKKyAgICAgICAgcmV0dXJuIE5vbmUKKyAgICByZXR1cm4gImVycm9yID0ge307IHBlcm1pdHRlZCBlcnJvciA9IHt9Ii5mb3JtYXQoZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pdHRlZF9lcnJvcikKKworZGVmIHBhcnNlX210ZXN0ZmlsZShmbmFtZSk6CisgICAgIiIiUGFyc2UgYSBmaWxlIHdpdGggdGVzdCB2YWx1ZXMKKworICAgIC0tIHN0YXJ0cyBhIGNvbW1lbnQKKyAgICBibGFuayBsaW5lcywgb3IgbGluZXMgY29udGFpbmluZyBvbmx5IGEgY29tbWVudCwgYXJlIGlnbm9yZWQKKyAgICBvdGhlciBsaW5lcyBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgZm9ybQorICAgICAgaWQgZm4gYXJnIC0+IGV4cGVjdGVkIFtmbGFnXSoKKworICAgICIiIgorICAgIHdpdGggb3BlbihmbmFtZSkgYXMgZnA6CisgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgIyBzdHJpcCBjb21tZW50cywgYW5kIHNraXAgYmxhbmsgbGluZXMKKyAgICAgICAgICAgIGlmICctLScgaW4gbGluZToKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6bGluZS5pbmRleCgnLS0nKV0KKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgbGhzLCByaHMgPSBsaW5lLnNwbGl0KCctPicpCisgICAgICAgICAgICBpZCwgZm4sIGFyZyA9IGxocy5zcGxpdCgpCisgICAgICAgICAgICByaHNfcGllY2VzID0gcmhzLnNwbGl0KCkKKyAgICAgICAgICAgIGV4cCA9IHJoc19waWVjZXNbMF0KKyAgICAgICAgICAgIGZsYWdzID0gcmhzX3BpZWNlc1sxOl0KKworICAgICAgICAgICAgeWllbGQgKGlkLCBmbiwgZmxvYXQoYXJnKSwgZmxvYXQoZXhwKSwgZmxhZ3MpCisKIGRlZiBwYXJzZV90ZXN0ZmlsZShmbmFtZSk6CiAgICAgIiIiUGFyc2UgYSBmaWxlIHdpdGggdGVzdCB2YWx1ZXMKIApAQCAtMjA5LDM5ICszMzMsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmNlaWwsIHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jZWlsLCB0LCAwKQogCi0gICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICBkZWYgdGVzdENvcHlzaWduKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEsIDQyKSwgMS4wKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDAuLCA0MiksIDAuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTQyKSwgLTEuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigzLCAwLiksIDMuMCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbig0LiwgLTAuKSwgLTQuMCkKKyAgICBAcmVxdWlyZXNfSUVFRV83NTQKKyAgICBkZWYgdGVzdENvcHlzaWduKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMSwgNDIpLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigwLiwgNDIpLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTQyKSwgLTEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDMsIDAuKSwgMy4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oNC4sIC0wLiksIC00LjApCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC5jb3B5c2lnbikKLSAgICAgICAgICAgICMgY29weXNpZ24gc2hvdWxkIGxldCB1cyBkaXN0aW5ndWlzaCBzaWducyBvZiB6ZXJvcwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAwLiksIDEuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCAtMC4pLCAtMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCAwLiksIElORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIC0wLiksIE5JTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgMC4pLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgLTAuKSwgTklORikKLSAgICAgICAgICAgICMgYW5kIG9mIGluZmluaXRpZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgSU5GKSwgMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIE5JTkYpLCAtMS4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCBJTkYpLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCBOSU5GKSwgTklORikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCBJTkYpLCBJTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgTklORiksIE5JTkYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgMS4pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBJTkYpKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBOSU5GKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmNvcHlzaWduKE5BTiwgTkFOKSkpCi0gICAgICAgICAgICAjIGNvcHlzaWduKElORiwgTkFOKSBtYXkgYmUgSU5GIG9yIGl0IG1heSBiZSBOSU5GLCBzaW5jZQotICAgICAgICAgICAgIyB3ZSBkb24ndCBrbm93IHdoZXRoZXIgdGhlIHNpZ24gYml0IG9mIE5BTiBpcyBzZXQgb24gYW55Ci0gICAgICAgICAgICAjIGdpdmVuIHBsYXRmb3JtLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYobWF0aC5jb3B5c2lnbihJTkYsIE5BTikpKQotICAgICAgICAgICAgIyBzaW1pbGFybHksIGNvcHlzaWduKDIuLCBOQU4pIGNvdWxkIGJlIDIuIG9yIC0yLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYnMobWF0aC5jb3B5c2lnbigyLiwgTkFOKSksIDIuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29weXNpZ24pCisgICAgICAgICMgY29weXNpZ24gc2hvdWxkIGxldCB1cyBkaXN0aW5ndWlzaCBzaWducyBvZiB6ZXJvcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIDAuKSwgMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbigxLiwgLTAuKSwgLTEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oSU5GLCAwLiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgLTAuKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKE5JTkYsIDAuKSwgSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oTklORiwgLTAuKSwgTklORikKKyAgICAgICAgIyBhbmQgb2YgaW5maW5pdGllcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIElORiksIDEuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguY29weXNpZ24oMS4sIE5JTkYpLCAtMS4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihJTkYsIElORiksIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKElORiwgTklORiksIE5JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCBJTkYpLCBJTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5jb3B5c2lnbihOSU5GLCBOSU5GKSwgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIDEuKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGguY29weXNpZ24oTkFOLCBJTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIE5JTkYpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5jb3B5c2lnbihOQU4sIE5BTikpKQorICAgICAgICAjIGNvcHlzaWduKElORiwgTkFOKSBtYXkgYmUgSU5GIG9yIGl0IG1heSBiZSBOSU5GLCBzaW5jZQorICAgICAgICAjIHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgc2lnbiBiaXQgb2YgTkFOIGlzIHNldCBvbiBhbnkKKyAgICAgICAgIyBnaXZlbiBwbGF0Zm9ybS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYobWF0aC5jb3B5c2lnbihJTkYsIE5BTikpKQorICAgICAgICAjIHNpbWlsYXJseSwgY29weXNpZ24oMi4sIE5BTikgY291bGQgYmUgMi4gb3IgLTIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWJzKG1hdGguY29weXNpZ24oMi4sIE5BTikpLCAyLikKIAogICAgIGRlZiB0ZXN0Q29zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguY29zKQpAQCAtMjg3LDE4ICs0MTEsMTkgQEAKICAgICAgICAgc2VsZi5mdGVzdCgnZmFicygxKScsIG1hdGguZmFicygxKSwgMSkKIAogICAgIGRlZiB0ZXN0RmFjdG9yaWFsKHNlbGYpOgotICAgICAgICBkZWYgZmFjdChuKToKLSAgICAgICAgICAgIHJlc3VsdCA9IDEKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGludChuKSsxKToKLSAgICAgICAgICAgICAgICByZXN1bHQgKj0gaQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICB2YWx1ZXMgPSBsaXN0KHJhbmdlKDEwKSkgKyBbNTAsIDEwMCwgNTAwXQotICAgICAgICByYW5kb20uc2h1ZmZsZSh2YWx1ZXMpCi0gICAgICAgIGZvciB4IGluIHZhbHVlczoKLSAgICAgICAgICAgIGZvciBjYXN0IGluIChpbnQsIGZsb2F0KToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZmFjdG9yaWFsKGNhc3QoeCkpLCBmYWN0KHgpLCAoeCwgZmFjdCh4KSwgbWF0aC5mYWN0b3JpYWwoeCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZmFjdG9yaWFsKDApLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGguZmFjdG9yaWFsKDAuMCksIDEpCisgICAgICAgIHRvdGFsID0gMQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDAwKToKKyAgICAgICAgICAgIHRvdGFsICo9IGkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC5mYWN0b3JpYWwoaSksIHRvdGFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZhY3RvcmlhbChmbG9hdChpKSksIHRvdGFsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZhY3RvcmlhbChpKSwgcHlfZmFjdG9yaWFsKGkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGguZmFjdG9yaWFsLCAtMS4wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmZhY3RvcmlhbCwgbWF0aC5waSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbWF0aC5mYWN0b3JpYWwsIHN5cy5tYXhzaXplKzEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG1hdGguZmFjdG9yaWFsLCAxMGUxMDApCiAKICAgICBkZWYgdGVzdEZsb29yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGguZmxvb3IpCkBAIC0zNzAsOCArNDk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmZyZXhwKE5JTkYpWzBdLCBOSU5GKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmZyZXhwKE5BTilbMF0pKQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0IHJlcXVpcmVzIElFRUUgNzU0IGRvdWJsZXMiKQorICAgIEByZXF1aXJlc19JRUVFXzc1NAogICAgIEB1bml0dGVzdC5za2lwSWYoSEFWRV9ET1VCTEVfUk9VTkRJTkcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZzdW0gaXMgbm90IGV4YWN0IG9uIG1hY2hpbmVzIHdpdGggZG91YmxlIHJvdW5kaW5nIikKICAgICBkZWYgdGVzdEZzdW0oc2VsZik6CkBAIC01MTMsMjEgKzYzNywxNyBAQAogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMzIsMiknLCBtYXRoLmxvZygzMiwyKSwgNSkKICAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKio0MCwgMTApJywgbWF0aC5sb2coMTAqKjQwLCAxMCksIDQwKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2coMTAqKjQwLCAxMCoqMjApJywgbWF0aC5sb2coMTAqKjQwLCAxMCoqMjApLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nKDEwKioxMDAwKScsIG1hdGgubG9nKDEwKioxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAyMzAyLjU4NTA5Mjk5NDA0NTcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hdGgubG9nLCAtMS41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZywgLTEwKioxMDAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZywgTklORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmxvZyhJTkYpLCBJTkYpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKG1hdGgubG9nKE5BTikpKQogCiAgICAgZGVmIHRlc3RMb2cxcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLmxvZzFwKQotICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgxL2UgLTEpJywgbWF0aC5sb2cxcCgxL21hdGguZS0xKSwgLTEpCi0gICAgICAgIHNlbGYuZnRlc3QoJ2xvZzFwKDApJywgbWF0aC5sb2cxcCgwKSwgMCkKLSAgICAgICAgc2VsZi5mdGVzdCgnbG9nMXAoZS0xKScsIG1hdGgubG9nMXAobWF0aC5lLTEpLCAxKQotICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxcCgxKScsIG1hdGgubG9nMXAoMSksIG1hdGgubG9nKDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nMXAoSU5GKSwgSU5GKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzFwLCBOSU5GKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihtYXRoLmxvZzFwKE5BTikpKQogICAgICAgICBuPSAyKio5MAotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKG1hdGgubG9nMXAobiksIDYyLjM4MzI0NjI1MDM5NTA3NSkKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChtYXRoLmxvZzFwKG4pLCBtYXRoLmxvZzFwKGZsb2F0KG4pKSkKIAogICAgIGRlZiB0ZXN0TG9nMTAoc2VsZik6CkBAIC01MzUsOCArNjU1LDExIEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDAuMSknLCBtYXRoLmxvZzEwKDAuMSksIC0xKQogICAgICAgICBzZWxmLmZ0ZXN0KCdsb2cxMCgxKScsIG1hdGgubG9nMTAoMSksIDApCiAgICAgICAgIHNlbGYuZnRlc3QoJ2xvZzEwKDEwKScsIG1hdGgubG9nMTAoMTApLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKKyAgICAgICAgc2VsZi5mdGVzdCgnbG9nMTAoMTAqKjEwMDApJywgbWF0aC5sb2cxMCgxMCoqMTAwMCksIDEwMDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxMCwgLTEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF0aC5sb2cxMCwgLTEwKioxMDAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXRoLmxvZzEwLCBOSU5GKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgubG9nKElORiksIElORikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC5sb2cxMChOQU4pKSkKIAogICAgIGRlZiB0ZXN0TW9kZihzZWxmKToKQEAgLTc2NCwxMSArODg3LDE1IEBACiAgICAgICAgIHNlbGYuZnRlc3QoJ3RhbmgoaW5mKScsIG1hdGgudGFuaChJTkYpLCAxKQogICAgICAgICBzZWxmLmZ0ZXN0KCd0YW5oKC1pbmYpJywgbWF0aC50YW5oKE5JTkYpLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4obWF0aC50YW5oKE5BTikpKQorCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1RBTkhfUFJFU0VSVkVTX1pFUk9fU0lHTicpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAic3lzdGVtIHRhbmgoKSBmdW5jdGlvbiBkb2Vzbid0IGNvcHkgdGhlIHNpZ24iKQorICAgIGRlZiB0ZXN0VGFuaFNpZ24oc2VsZik6CiAgICAgICAgICMgY2hlY2sgdGhhdCB0YW5oKC0wLikgPT0gLTAuIG9uIElFRUUgNzU0IHN5c3RlbXMKLSAgICAgICAgaWYgZmxvYXQuX19nZXRmb3JtYXRfXygiZG91YmxlIikuc3RhcnRzd2l0aCgiSUVFRSIpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLnRhbmgoLTAuKSwgLTAuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBtYXRoLnRhbmgoLTAuKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGguY29weXNpZ24oMS4sIC0wLikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF0aC50YW5oKC0wLiksIC0wLikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXRoLmNvcHlzaWduKDEuLCBtYXRoLnRhbmgoLTAuKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aC5jb3B5c2lnbigxLiwgLTAuKSkKIAogICAgIGRlZiB0ZXN0X3RydW5jKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGgudHJ1bmMoMSksIDEpCkBAIC03OTUsMTIgKzkyMiwxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1hdGgudHJ1bmMsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWF0aC50cnVuYywgVGVzdE5vVHJ1bmMoKSkKIAotICAgICAgICAjIFhYWCBEb2Vzbid0IHdvcmsgYmVjYXVzZSB0aGUgbWV0aG9kIGlzIGxvb2tlZCB1cCBvbgotICAgICAgICAjICAgICB0aGUgdHlwZSBvbmx5LgotICAgICAgICAjdCA9IFRlc3ROb1RydW5jKCkKLSAgICAgICAgI3QuX190cnVuY19fID0gbGFtYmRhICphcmdzOiBhcmdzCi0gICAgICAgICNzZWxmLmFzc2VydEVxdWFsKCgpLCBtYXRoLnRydW5jKHQpKQotICAgICAgICAjc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXRoLnRydW5jLCB0LCAwKQorICAgIGRlZiB0ZXN0SXNmaW5pdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzZmluaXRlKDAuMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzZmluaXRlKC0wLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2Zpbml0ZSgxLjApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc2Zpbml0ZSgtMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtYXRoLmlzZmluaXRlKGZsb2F0KCJuYW4iKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWF0aC5pc2Zpbml0ZShmbG9hdCgiaW5mIikpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1hdGguaXNmaW5pdGUoZmxvYXQoIi1pbmYiKSkpCiAKICAgICBkZWYgdGVzdElzbmFuKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihmbG9hdCgibmFuIikpKQpAQCAtODU2LDkgKzk4NSw4IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic3FydCgtMSkgZGlkbid0IHJhaXNlIFZhbHVlRXJyb3IiKQogCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CiAgICAgZGVmIHRlc3RfdGVzdGZpbGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBmbG9hdC5fX2dldGZvcm1hdF9fKCJkb3VibGUiKS5zdGFydHN3aXRoKCJJRUVFIik6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZm9yIGlkLCBmbiwgYXIsIGFpLCBlciwgZWksIGZsYWdzIGluIHBhcnNlX3Rlc3RmaWxlKHRlc3RfZmlsZSk6CiAgICAgICAgICAgICAjIFNraXAgaWYgZWl0aGVyIHRoZSBpbnB1dCBvciByZXN1bHQgaXMgY29tcGxleCwgb3IgaWYKICAgICAgICAgICAgICMgZmxhZ3MgaXMgbm9uZW1wdHkKQEAgLTg4MCw2ICsxMDA4LDY4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1lc3NhZ2UpCiAgICAgICAgICAgICBzZWxmLmZ0ZXN0KCIlczolcyglcikiICUgKGlkLCBmbiwgYXIpLCByZXN1bHQsIGVyKQogCisgICAgQHJlcXVpcmVzX0lFRUVfNzU0CisgICAgZGVmIHRlc3RfbXRlc3RmaWxlKHNlbGYpOgorICAgICAgICBBTExPV0VEX0VSUk9SID0gMjAgICMgcGVybWl0dGVkIGVycm9yLCBpbiB1bHBzCisgICAgICAgIGZhaWxfZm10ID0gInt9Ont9KHshcn0pOiBleHBlY3RlZCB7IXJ9LCBnb3QgeyFyfSIKKworICAgICAgICBmYWlsdXJlcyA9IFtdCisgICAgICAgIGZvciBpZCwgZm4sIGFyZywgZXhwZWN0ZWQsIGZsYWdzIGluIHBhcnNlX210ZXN0ZmlsZShtYXRoX3Rlc3RjYXNlcyk6CisgICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihtYXRoLCBmbikKKworICAgICAgICAgICAgaWYgJ2ludmFsaWQnIGluIGZsYWdzIG9yICdkaXZpZGUtYnktemVybycgaW4gZmxhZ3M6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAnVmFsdWVFcnJvcicKKyAgICAgICAgICAgIGVsaWYgJ292ZXJmbG93JyBpbiBmbGFnczoKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICdPdmVyZmxvd0Vycm9yJworCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZ290ID0gZnVuYyhhcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBnb3QgPSAnVmFsdWVFcnJvcicKKyAgICAgICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgorICAgICAgICAgICAgICAgIGdvdCA9ICdPdmVyZmxvd0Vycm9yJworCisgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gTm9uZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShnb3QsIGZsb2F0KSBhbmQgaXNpbnN0YW5jZShleHBlY3RlZCwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGlmIG1hdGguaXNuYW4oZXhwZWN0ZWQpIGFuZCBtYXRoLmlzbmFuKGdvdCk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbm90IG1hdGguaXNuYW4oZXhwZWN0ZWQpIGFuZCBub3QgbWF0aC5pc25hbihnb3QpOgorICAgICAgICAgICAgICAgICAgICBpZiBmbiA9PSAnbGdhbW1hJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgd2UgdXNlIGEgd2Vha2VyIGFjY3VyYWN5IHRlc3QgZm9yIGxnYW1tYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbGdhbW1hIG9ubHkgYWNoaWV2ZXMgYW4gYWJzb2x1dGUgZXJyb3Igb2YKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSBmZXcgbXVsdGlwbGVzIG9mIHRoZSBtYWNoaW5lIGFjY3VyYWN5LCBpbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBnZW5lcmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgYWNjdXJhY3lfZmFpbHVyZSA9IGFjY19jaGVjayhleHBlY3RlZCwgZ290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxfZXJyID0gNWUtMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19lcnIgPSA1ZS0xNSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBmbiA9PSAnZXJmYyc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGVyZmMgaGFzIGxlc3MtdGhhbi1pZGVhbCBhY2N1cmFjeSBmb3IgbGFyZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYXJndW1lbnRzICh4IH4gMjUgb3Igc28pLCBtYWlubHkgZHVlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgIyBlcnJvciBpbnZvbHZlZCBpbiBjb21wdXRpbmcgZXhwKC14KngpLgorICAgICAgICAgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICAgICAgICAgIyBYWFggV291bGQgYmUgYmV0dGVyIHRvIHdlYWtlbiB0aGlzIHRlc3Qgb25seQorICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3IgbGFyZ2UgeCwgaW5zdGVhZCBvZiBmb3IgYWxsIHguCisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gdWxwc19jaGVjayhleHBlY3RlZCwgZ290LCAyMDAwKQorCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBhY2N1cmFjeV9mYWlsdXJlID0gdWxwc19jaGVjayhleHBlY3RlZCwgZ290LCAyMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWNjdXJhY3lfZmFpbHVyZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShnb3QsIHN0cikgYW5kIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIHN0cik6CisgICAgICAgICAgICAgICAgaWYgZ290ID09IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBmYWlsX21zZyA9IGZhaWxfZm10LmZvcm1hdChpZCwgZm4sIGFyZywgZXhwZWN0ZWQsIGdvdCkKKyAgICAgICAgICAgIGlmIGFjY3VyYWN5X2ZhaWx1cmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZmFpbF9tc2cgKz0gJyAoe30pJy5mb3JtYXQoYWNjdXJhY3lfZmFpbHVyZSkKKyAgICAgICAgICAgIGZhaWx1cmVzLmFwcGVuZChmYWlsX21zZykKKworICAgICAgICBpZiBmYWlsdXJlczoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnRmFpbHVyZXMgaW4gdGVzdF9tdGVzdGZpbGU6XG4gICcgKworICAgICAgICAgICAgICAgICAgICAgICdcbiAgJy5qb2luKGZhaWx1cmVzKSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgZnJvbSBkb2N0ZXN0IGltcG9ydCBEb2NGaWxlU3VpdGUKICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5IGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQppbmRleCBiNDU4NDVkLi40OWNhNDRmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKQEAgLTgsNyArOCw3IEBACiAKIGltcG9ydCBpbwogaW1wb3J0IF9weWlvIGFzIHB5aW8KLWltcG9ydCBzeXMKK2ltcG9ydCBwaWNrbGUKIAogY2xhc3MgTWVtb3J5U2Vla1Rlc3RNaXhpbjoKIApAQCAtMzQ3LDggKzM0Nyw2OCBAQAogICAgICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoKQogICAgICAgICAgICAgbWVtaW8uZm9vID0gMQogCisgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6CisgICAgICAgIGJ1ZiA9IHNlbGYuYnVmdHlwZSgiMTIzNDU2Nzg5MCIpCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKKyAgICAgICAgbWVtaW8uZm9vID0gNDIKKyAgICAgICAgbWVtaW8uc2VlaygyKQogCi1jbGFzcyBQeUJ5dGVzSU9UZXN0KE1lbW9yeVRlc3RNaXhpbiwgTWVtb3J5U2Vla1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBjbGFzcyBQaWNrbGVUZXN0TWVtSU8oc2VsZi5pb2NsYXNzKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhtZSwgaW5pdHZhbHVlLCBmb28pOgorICAgICAgICAgICAgICAgIHNlbGYuaW9jbGFzcy5fX2luaXRfXyhtZSwgaW5pdHZhbHVlKQorICAgICAgICAgICAgICAgIG1lLmZvbyA9IGZvbworICAgICAgICAgICAgIyBfX2dldG5ld2FyZ3NfXyBpcyB1bmRlZmluZWQgb24gcHVycG9zZS4gVGhpcyBjaGVja3MgdGhhdCBQRVAgMzA3CisgICAgICAgICAgICAjIGlzIHVzZWQgdG8gcHJvdmlkZSBwaWNrbGluZyBzdXBwb3J0LgorCisgICAgICAgICMgUGlja2xlIGV4cGVjdHMgdGhlIGNsYXNzIHRvIGJlIG9uIHRoZSBtb2R1bGUgbGV2ZWwuIEhlcmUgd2UgdXNlIGEKKyAgICAgICAgIyBsaXR0bGUgaGFjayB0byBhbGxvdyB0aGUgUGlja2xlVGVzdE1lbUlPIGNsYXNzIHRvIGRlcml2ZSBmcm9tCisgICAgICAgICMgc2VsZi5pb2NsYXNzIHdpdGhvdXQgaGF2aW5nIHRvIGRlZmluZSBhbGwgY29tYmluYXRpb25zIGV4cGxpY3RseSBvbgorICAgICAgICAjIHRoZSBtb2R1bGUtbGV2ZWwuCisgICAgICAgIGltcG9ydCBfX21haW5fXworICAgICAgICBQaWNrbGVUZXN0TWVtSU8uX19tb2R1bGVfXyA9ICdfX21haW5fXycKKyAgICAgICAgX19tYWluX18uUGlja2xlVGVzdE1lbUlPID0gUGlja2xlVGVzdE1lbUlPCisgICAgICAgIHN1Ym1lbWlvID0gUGlja2xlVGVzdE1lbUlPKGJ1ZiwgODApCisgICAgICAgIHN1Ym1lbWlvLnNlZWsoMikKKworICAgICAgICAjIFdlIG9ubHkgc3VwcG9ydCBwaWNrbGUgcHJvdG9jb2wgMiBhbmQgb253YXJkIHNpbmNlIHdlIHVzZSBleHRlbmRlZAorICAgICAgICAjIF9fcmVkdWNlX18gQVBJIG9mIFBFUCAzMDcgdG8gcHJvdmlkZSBwaWNrbGluZyBzdXBwb3J0LgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpOgorICAgICAgICAgICAgZm9yIG9iaiBpbiAobWVtaW8sIHN1Ym1lbWlvKToKKyAgICAgICAgICAgICAgICBvYmoyID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvYmosIHByb3RvY29sPXByb3RvKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5nZXR2YWx1ZSgpLCBvYmoyLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19jbGFzc19fLCBvYmoyLl9fY2xhc3NfXykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5mb28sIG9iajIuZm9vKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLnRlbGwoKSwgb2JqMi50ZWxsKCkpCisgICAgICAgICAgICAgICAgb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwaWNrbGUuZHVtcHMsIG9iaiwgcHJvdG8pCisgICAgICAgIGRlbCBfX21haW5fXy5QaWNrbGVUZXN0TWVtSU8KKworCitjbGFzcyBCeXRlc0lPTWl4aW46CisKKyAgICBkZWYgdGVzdF9nZXRidWZmZXIoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGIiMTIzNDU2Nzg5MCIpCisgICAgICAgIGJ1ZiA9IG1lbWlvLmdldGJ1ZmZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYnVmKSwgYiIxMjM0NTY3ODkwIikKKyAgICAgICAgbWVtaW8uc2Vlayg1KQorICAgICAgICBidWYgPSBtZW1pby5nZXRidWZmZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKGJ1ZiksIGIiMTIzNDU2Nzg5MCIpCisgICAgICAgICMgVHJ5aW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgQnl0ZXNJTyB3aGlsZSBhIGJ1ZmZlciBpcyBleHBvcnRlZAorICAgICAgICAjIHJhaXNlcyBhIEJ1ZmZlckVycm9yLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtaW8ud3JpdGUsIGIneCcgKiAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBtZW1pby50cnVuY2F0ZSkKKyAgICAgICAgIyBNdXRhdGluZyB0aGUgYnVmZmVyIHVwZGF0ZXMgdGhlIEJ5dGVzSU8KKyAgICAgICAgYnVmWzM6Nl0gPSBiImFiYyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhidWYpLCBiIjEyM2FiYzc4OTAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLmdldHZhbHVlKCksIGIiMTIzYWJjNzg5MCIpCisgICAgICAgICMgQWZ0ZXIgdGhlIGJ1ZmZlciBnZXRzIHJlbGVhc2VkLCB3ZSBjYW4gcmVzaXplIHRoZSBCeXRlc0lPIGFnYWluCisgICAgICAgIGRlbCBidWYKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgbWVtaW8udHJ1bmNhdGUoKQorCisKK2NsYXNzIFB5Qnl0ZXNJT1Rlc3QoTWVtb3J5VGVzdE1peGluLCBNZW1vcnlTZWVrVGVzdE1peGluLAorICAgICAgICAgICAgICAgICAgICBCeXRlc0lPTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gcHlpby5VbnN1cHBvcnRlZE9wZXJhdGlvbgogCkBAIC0zODksNyArNDQ5LDcgQEAKICAgICAgICAgYSA9IGFycmF5LmFycmF5KCdiJywgYiJoZWxsbyB3b3JsZCIpCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKGJ1ZikKICAgICAgICAgbWVtaW8ucmVhZGludG8oYSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnRvc3RyaW5nKCksIGIiMTIzNDU2Nzg5MGQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudG9ieXRlcygpLCBiIjEyMzQ1Njc4OTBkIikKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5yZWFkaW50bywgYikKICAgICAgICAgbWVtaW8gPSBzZWxmLmlvY2xhc3MoYiIxMjMiKQpAQCAtNDM1LDEzICs0OTUsOCBAQAogICAgICAgICBzZWxmLmlvY2xhc3MoaW5pdGlhbF9ieXRlcz1idWYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5pb2NsYXNzLCBidWYsIGZvbz1Ob25lKQogCi1jbGFzcyBQeVN0cmluZ0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBidWZ0eXBlID0gc3RyCi0gICAgaW9jbGFzcyA9IHB5aW8uU3RyaW5nSU8KLSAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KLSAgICBFT0YgPSAiIgogCi0gICAgIyBUZXh0SU8tc3BlY2lmaWMgYmVoYXZpb3VyLgorY2xhc3MgVGV4dElPVGVzdE1peGluOgogCiAgICAgZGVmIHRlc3RfbmV3bGluZXNfcHJvcGVydHkoc2VsZik6CiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKG5ld2xpbmU9Tm9uZSkKQEAgLTUyMyw3ICs1NzgsNiBAQAogICAgIGRlZiB0ZXN0X25ld2xpbmVfY3Ioc2VsZik6CiAgICAgICAgICMgbmV3bGluZT0iXHIiCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSJcciIpCi0gICAgICAgIG1lbWlvLnNlZWsoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5yZWFkKCksICJhXHJiXHJccmNccmQiKQogICAgICAgICBtZW1pby5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxyIiwgImJcciIsICJcciIsICJjXHIiLCAiZCJdKQpAQCAtNTMxLDcgKzU4NSw2IEBACiAgICAgZGVmIHRlc3RfbmV3bGluZV9jcmxmKHNlbGYpOgogICAgICAgICAjIG5ld2xpbmU9IlxyXG4iCiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCJhXG5iXHJcbmNccmQiLCBuZXdsaW5lPSJcclxuIikKLSAgICAgICAgbWVtaW8uc2VlaygwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWlvLnJlYWQoKSwgImFcclxuYlxyXHJcbmNccmQiKQogICAgICAgICBtZW1pby5zZWVrKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtZW1pbyksIFsiYVxyXG4iLCAiYlxyXHJcbiIsICJjXHJkIl0pCkBAIC01NDksMTAgKzYwMiw1OSBAQAogICAgICAgICAgICAgc2VsZi5pb2NsYXNzKG5ld2xpbmU9bmV3bGluZSkKIAogCitjbGFzcyBQeVN0cmluZ0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sCisgICAgICAgICAgICAgICAgICAgICBUZXh0SU9UZXN0TWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBidWZ0eXBlID0gc3RyCisgICAgaW9jbGFzcyA9IHB5aW8uU3RyaW5nSU8KKyAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IHB5aW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgICBFT0YgPSAiIgorCisKK2NsYXNzIFB5U3RyaW5nSU9QaWNrbGVUZXN0KFRleHRJT1Rlc3RNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgaWYgcGlja2xlIHJlc3RvcmVzIHByb3Blcmx5IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiBTdHJpbmdJTy4KKyAgICAiIiIKKyAgICBidWZ0eXBlID0gc3RyCisgICAgVW5zdXBwb3J0ZWRPcGVyYXRpb24gPSBweWlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCisgICAgRU9GID0gIiIKKworICAgIGNsYXNzIGlvY2xhc3MocHlpby5TdHJpbmdJTyk6CisgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHB5aW8uU3RyaW5nSU8oKmFyZ3MsICoqa3dhcmdzKSkpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworCisKIGNsYXNzIENCeXRlc0lPVGVzdChQeUJ5dGVzSU9UZXN0KToKICAgICBpb2NsYXNzID0gaW8uQnl0ZXNJTwogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIAorICAgIGRlZiB0ZXN0X2dldHN0YXRlKHNlbGYpOgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIHN0YXRlID0gbWVtaW8uX19nZXRzdGF0ZV9fKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3RhdGUpLCAzKQorICAgICAgICBieXRlYXJyYXkoc3RhdGVbMF0pICMgQ2hlY2sgaWYgc3RhdGVbMF0gc3VwcG9ydHMgdGhlIGJ1ZmZlciBpbnRlcmZhY2UuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsxXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVsyXSwgZGljdCkgb3Igc3RhdGVbMl0gaXMgTm9uZSkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX2dldHN0YXRlX18pCisKKyAgICBkZWYgdGVzdF9zZXRzdGF0ZShzZWxmKToKKyAgICAgICAgIyBUaGlzIGNoZWNrcyB3aGV0aGVyIF9fc2V0c3RhdGVfXyBkb2VzIHByb3BlciBpbnB1dCB2YWxpZGF0aW9uLgorICAgICAgICBtZW1pbyA9IHNlbGYuaW9jbGFzcygpCisgICAgICAgIG1lbWlvLl9fc2V0c3RhdGVfXygoYiJubyBlcnJvciIsIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGJ5dGVhcnJheShiIm5vIGVycm9yIiksIDAsIE5vbmUpKQorICAgICAgICBtZW1pby5fX3NldHN0YXRlX18oKGIibm8gZXJyb3IiLCAwLCB7J3NwYW0nOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgLTEsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCJ1bmljb2RlIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAwLjAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKGIiIiwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiJsZW4tdGVzdCIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sIDApCisgICAgICAgIG1lbWlvLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiJjbG9zZWQiLCAwLCBOb25lKSkKKworCiBjbGFzcyBDU3RyaW5nSU9UZXN0KFB5U3RyaW5nSU9UZXN0KToKICAgICBpb2NsYXNzID0gaW8uU3RyaW5nSU8KICAgICBVbnN1cHBvcnRlZE9wZXJhdGlvbiA9IGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCkBAIC01NzEsOSArNjczLDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8udGVsbCgpLCBsZW4oYnVmKSAqIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtaW8uZ2V0dmFsdWUoKSwgYnVmICsgYnVmKQogCisgICAgZGVmIHRlc3RfZ2V0c3RhdGUoc2VsZik6CisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgc3RhdGUgPSBtZW1pby5fX2dldHN0YXRlX18oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0ZSksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVswXSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMV0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0YXRlWzNdLCBkaWN0KSBvciBzdGF0ZVszXSBpcyBOb25lKQorICAgICAgICBtZW1pby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1lbWlvLl9fZ2V0c3RhdGVfXykKKworICAgIGRlZiB0ZXN0X3NldHN0YXRlKHNlbGYpOgorICAgICAgICAjIFRoaXMgY2hlY2tzIHdoZXRoZXIgX19zZXRzdGF0ZV9fIGRvZXMgcHJvcGVyIGlucHV0IHZhbGlkYXRpb24uCisgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKCgibm8gZXJyb3IiLCAiXG4iLCAwLCBOb25lKSkKKyAgICAgICAgbWVtaW8uX19zZXRzdGF0ZV9fKCgibm8gZXJyb3IiLCAiIiwgMCwgeydzcGFtJzogM30pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiIiwgImYiLCAwLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAtMSwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoYiIiLCAiIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsIGIiIiwgMCwgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoIiIsICIiLCAwLjAsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgKCIiLCAiIiwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fLCAoImxlbi10ZXN0IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbWVtaW8uX19zZXRzdGF0ZV9fKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1lbWlvLl9fc2V0c3RhdGVfXywgMCkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX3NldHN0YXRlX18sICgiY2xvc2VkIiwgIiIsIDAsIE5vbmUpKQorCisKK2NsYXNzIENTdHJpbmdJT1BpY2tsZVRlc3QoUHlTdHJpbmdJT1BpY2tsZVRlc3QpOgorICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KKworICAgIGNsYXNzIGlvY2xhc3MoaW8uU3RyaW5nSU8pOgorICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhpby5TdHJpbmdJTygqYXJncywgKiprd2FyZ3MpKSkKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBwYXNzCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW1B5Qnl0ZXNJT1Rlc3QsIFB5U3RyaW5nSU9UZXN0LCBDQnl0ZXNJT1Rlc3QsIENTdHJpbmdJT1Rlc3RdCisgICAgdGVzdHMgPSBbUHlCeXRlc0lPVGVzdCwgUHlTdHJpbmdJT1Rlc3QsIENCeXRlc0lPVGVzdCwgQ1N0cmluZ0lPVGVzdCwKKyAgICAgICAgICAgICBQeVN0cmluZ0lPUGlja2xlVGVzdCwgQ1N0cmluZ0lPUGlja2xlVGVzdF0KICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKaW5kZXggNTJmYTNhOS4uMGJmZGRkOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICBvbGRyZWZjb3VudCA9IHN5cy5nZXRyZWZjb3VudChiKQogICAgICAgICBtID0gc2VsZi5fdmlldyhiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMF0sIGl0ZW0oYiJhIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG1bMF0sIGJ5dGVzKSwgdHlwZShtWzBdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1bMF0sIGJ5dGVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bNV0sIGl0ZW0oYiJmIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstMV0sIGl0ZW0oYiJmIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVstNl0sIGl0ZW0oYiJhIikpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgIGV4cGVjdGVkID0gYiIiLmpvaW4oCiAgICAgICAgICAgICAgICAgc2VsZi5nZXRpdGVtX3R5cGUoYnl0ZXMoW2NdKSkgZm9yIGMgaW4gYiJhYmNkZWYiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBleHBlY3RlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGIsIGJ5dGVzKSwgdHlwZShiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLCBieXRlcykKIAogICAgIGRlZiB0ZXN0X3RvbGlzdChzZWxmKToKICAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgpAQCAtMjI2LDYgKzIyNiw1MiBAQAogICAgICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cigpKQogCisgICAgZGVmIF9jaGVja19yZWxlYXNlZChzZWxmLCBtLCB0cCk6CisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAicmVsZWFzZWQiKQorICAgICAgICB3aXRoIGNoZWNrOiBieXRlcyhtKQorICAgICAgICB3aXRoIGNoZWNrOiBtLnRvYnl0ZXMoKQorICAgICAgICB3aXRoIGNoZWNrOiBtLnRvbGlzdCgpCisgICAgICAgIHdpdGggY2hlY2s6IG1bMF0KKyAgICAgICAgd2l0aCBjaGVjazogbVswXSA9IGIneCcKKyAgICAgICAgd2l0aCBjaGVjazogbGVuKG0pCisgICAgICAgIHdpdGggY2hlY2s6IG0uZm9ybWF0CisgICAgICAgIHdpdGggY2hlY2s6IG0uaXRlbXNpemUKKyAgICAgICAgd2l0aCBjaGVjazogbS5uZGltCisgICAgICAgIHdpdGggY2hlY2s6IG0ucmVhZG9ubHkKKyAgICAgICAgd2l0aCBjaGVjazogbS5zaGFwZQorICAgICAgICB3aXRoIGNoZWNrOiBtLnN0cmlkZXMKKyAgICAgICAgd2l0aCBjaGVjazoKKyAgICAgICAgICAgIHdpdGggbToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICMgc3RyKCkgYW5kIHJlcHIoKSBzdGlsbCBmdW5jdGlvbgorICAgICAgICBzZWxmLmFzc2VydEluKCJyZWxlYXNlZCBtZW1vcnkiLCBzdHIobSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInJlbGVhc2VkIG1lbW9yeSIsIHJlcHIobSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChtLCBtZW1vcnl2aWV3KHRwKHNlbGYuX3NvdXJjZSkpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG0sIHRwKHNlbGYuX3NvdXJjZSkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0bWFuYWdlcihzZWxmKToKKyAgICAgICAgZm9yIHRwIGluIHNlbGYuX3R5cGVzOgorICAgICAgICAgICAgYiA9IHRwKHNlbGYuX3NvdXJjZSkKKyAgICAgICAgICAgIG0gPSBzZWxmLl92aWV3KGIpCisgICAgICAgICAgICB3aXRoIG0gYXMgY206CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhjbSwgbSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlbGVhc2VkKG0sIHRwKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgICMgQ2FuIHJlbGVhc2UgZXhwbGljaXRseSBpbnNpZGUgdGhlIGNvbnRleHQgbWFuYWdlcgorICAgICAgICAgICAgd2l0aCBtOgorICAgICAgICAgICAgICAgIG0ucmVsZWFzZSgpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlKHNlbGYpOgorICAgICAgICBmb3IgdHAgaW4gc2VsZi5fdHlwZXM6CisgICAgICAgICAgICBiID0gdHAoc2VsZi5fc291cmNlKQorICAgICAgICAgICAgbSA9IHNlbGYuX3ZpZXcoYikKKyAgICAgICAgICAgIG0ucmVsZWFzZSgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWxlYXNlZChtLCB0cCkKKyAgICAgICAgICAgICMgQ2FuIGJlIGNhbGxlZCBhIHNlY29uZCB0aW1lIChpdCdzIGEgbm8tb3ApCisgICAgICAgICAgICBtLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVsZWFzZWQobSwgdHApCisKICAgICBkZWYgdGVzdF93cml0YWJsZV9yZWFkb25seShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTA0NTE6IG1lbW9yeXZpZXcgaW5jb3JyZWN0bHkgZXhwb3NlcyBhIHJlYWRvbmx5CiAgICAgICAgICMgYnVmZmVyIGFzIHdyaXRhYmxlIGNhdXNpbmcgYSBzZWdmYXVsdCBpZiB1c2luZyBtbWFwCkBAIC0yNTEsNyArMjk3LDcgQEAKIGNsYXNzIEJhc2VBcnJheU1lbW9yeVRlc3RzKEFic3RyYWN0TWVtb3J5VGVzdHMpOgogICAgIHJvX3R5cGUgPSBOb25lCiAgICAgcndfdHlwZSA9IGxhbWJkYSBzZWxmLCBiOiBhcnJheS5hcnJheSgnaScsIGxpc3QoYikpCi0gICAgZ2V0aXRlbV90eXBlID0gbGFtYmRhIHNlbGYsIGI6IGFycmF5LmFycmF5KCdpJywgbGlzdChiKSkudG9zdHJpbmcoKQorICAgIGdldGl0ZW1fdHlwZSA9IGxhbWJkYSBzZWxmLCBiOiBhcnJheS5hcnJheSgnaScsIGxpc3QoYikpLnRvYnl0ZXMoKQogICAgIGl0ZW1zaXplID0gYXJyYXkuYXJyYXkoJ2knKS5pdGVtc2l6ZQogICAgIGZvcm1hdCA9ICdpJwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbWV0eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CmluZGV4IDc5MThkZTYuLjJjYWE3YWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWltZXR5cGVzLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IG1pbWV0eXBlcwogaW1wb3J0IGlvCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTYyLDggKzYzLDMyIEBACiAgICAgICAgIGVxKGFsbCwgW10pCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpLCAiV2luZG93cyBvbmx5IikKK2NsYXNzIFdpbjMyTWltZVR5cGVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBlbnN1cmUgYWxsIGVudHJpZXMgYWN0dWFsbHkgY29tZSBmcm9tIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5CisgICAgICAgIHNlbGYub3JpZ2luYWxfdHlwZXNfbWFwID0gbWltZXR5cGVzLnR5cGVzX21hcC5jb3B5KCkKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC5jbGVhcigpCisgICAgICAgIG1pbWV0eXBlcy5pbml0KCkKKyAgICAgICAgc2VsZi5kYiA9IG1pbWV0eXBlcy5NaW1lVHlwZXMoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIHJlc3RvcmUgZGVmYXVsdCBzZXR0aW5ncworICAgICAgICBtaW1ldHlwZXMudHlwZXNfbWFwLmNsZWFyKCkKKyAgICAgICAgbWltZXR5cGVzLnR5cGVzX21hcC51cGRhdGUoc2VsZi5vcmlnaW5hbF90eXBlc19tYXApCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV9wYXJzaW5nKHNlbGYpOgorICAgICAgICAjIHRoZSBvcmlnaW5hbCwgbWluaW11bSBjb250ZW50cyBvZiB0aGUgTUlNRSBkYXRhYmFzZSBpbiB0aGUKKyAgICAgICAgIyBXaW5kb3dzIHJlZ2lzdHJ5IGlzIHVuZG9jdW1lbnRlZCBBRkFJSy4KKyAgICAgICAgIyBVc2UgZmlsZSB0eXBlcyB0aGF0IHNob3VsZCAqYWx3YXlzKiBleGlzdDoKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGVxKHNlbGYuZGIuZ3Vlc3NfdHlwZSgiZm9vLnR4dCIpLCAoInRleHQvcGxhaW4iLCBOb25lKSkKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWltZVR5cGVzVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTWltZVR5cGVzVGVzdENhc2UsCisgICAgICAgIFdpbjMyTWltZVR5cGVzVGVzdENhc2UKKyAgICAgICAgKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKaW5kZXggYzU4ZDE3ZC4uNGMyYjM0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtMSw5ICsxLDcgQEAKICMgdGVzdCBmb3IgeG1sLmRvbS5taW5pZG9tCiAKLWltcG9ydCBvcwotaW1wb3J0IHN5cwogaW1wb3J0IHBpY2tsZQotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgZmluZGZpbGUKIGltcG9ydCB1bml0dGVzdAogCiBpbXBvcnQgeG1sLmRvbQpAQCAtMTQsMTIgKzEyLDggQEAKIGZyb20geG1sLmRvbS5taW5pZG9tIGltcG9ydCBnZXRET01JbXBsZW1lbnRhdGlvbgogCiAKLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgYmFzZSA9IHN5cy5hcmd2WzBdCi1lbHNlOgotICAgIGJhc2UgPSBfX2ZpbGVfXwotdHN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoYmFzZSksICJ0ZXN0LnhtbCIpCi1kZWwgYmFzZQordHN0ZmlsZSA9IGZpbmRmaWxlKCJ0ZXN0LnhtbCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQorCiAKICMgVGhlIHRlc3RzIG9mIERvY3VtZW50VHlwZSBpbXBvcnRpbmcgdXNlIHRoZXNlIGhlbHBlcnMgdG8gY29uc3RydWN0CiAjIHRoZSBkb2N1bWVudHMgdG8gd29yayB3aXRoLCBzaW5jZSBub3QgYWxsIERPTSBidWlsZGVycyBhY3R1YWxseQpAQCAtNzksOSArNzMsMTAgQEAKICAgICAgICAgc2VsZi5jb25maXJtKHQgPT0gcywgImxvb2tpbmcgZm9yICVzLCBmb3VuZCAlcyIgJSAocmVwcihzKSwgcmVwcih0KSkpCiAKICAgICBkZWYgdGVzdFBhcnNlRnJvbUZpbGUoc2VsZik6Ci0gICAgICAgIGRvbSA9IHBhcnNlKG9wZW4odHN0ZmlsZSkpCi0gICAgICAgIGRvbS51bmxpbmsoKQotICAgICAgICBzZWxmLmNvbmZpcm0oaXNpbnN0YW5jZShkb20sIERvY3VtZW50KSkKKyAgICAgICAgd2l0aCBvcGVuKHRzdGZpbGUpIGFzIGZpbGU6CisgICAgICAgICAgICBkb20gPSBwYXJzZShmaWxlKQorICAgICAgICAgICAgZG9tLnVubGluaygpCisgICAgICAgICAgICBzZWxmLmNvbmZpcm0oaXNpbnN0YW5jZShkb20sIERvY3VtZW50KSkKIAogICAgIGRlZiB0ZXN0R2V0RWxlbWVudHNCeVRhZ05hbWUoc2VsZik6CiAgICAgICAgIGRvbSA9IHBhcnNlKHRzdGZpbGUpCkBAIC0yMzQsNyArMjI5LDE0IEBACiAKICAgICBkZWYgdGVzdFVubGluayhzZWxmKToKICAgICAgICAgZG9tID0gcGFyc2UodHN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRvbS5jaGlsZE5vZGVzKQogICAgICAgICBkb20udW5saW5rKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkb20uY2hpbGROb2RlcykKKworICAgIGRlZiB0ZXN0Q29udGV4dChzZWxmKToKKyAgICAgICAgd2l0aCBwYXJzZSh0c3RmaWxlKSBhcyBkb206CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9tLmNoaWxkTm9kZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZG9tLmNoaWxkTm9kZXMpCiAKICAgICBkZWYgdGVzdEVsZW1lbnQoc2VsZik6CiAgICAgICAgIGRvbSA9IERvY3VtZW50KCkKQEAgLTQzOCw3ICs0NDAsNyBAQAogICAgICAgICBzdHJpbmcxID0gcmVwcihlbCkKICAgICAgICAgc3RyaW5nMiA9IHN0cihlbCkKICAgICAgICAgc2VsZi5jb25maXJtKHN0cmluZzEgPT0gc3RyaW5nMikKLSAgICAgICAgc2VsZi5jb25maXJtKHN0cmluZzEuZmluZCgic2xhc2g6YWJjIikgIT0gLTEpCisgICAgICAgIHNlbGYuY29uZmlybSgic2xhc2g6YWJjIiBpbiBzdHJpbmcxKQogICAgICAgICBkb20udW5saW5rKCkKIAogICAgIGRlZiB0ZXN0QXR0cmlidXRlUmVwcihzZWxmKToKQEAgLTk1MCwxMiArOTUyLDIwIEBACiAgICAgICAgIGRvYy51bmxpbmsoKQogCiAKKyAgICBkZWYgdGVzdEJ1ZzA3Nzc4ODQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8bz50ZXh0PC9vPiIpCisgICAgICAgIHRleHQgPSBkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0Lm5vZGVUeXBlLCBOb2RlLlRFWFRfTk9ERSkKKyAgICAgICAgIyBTaG91bGQgcnVuIHF1aWV0bHksIGRvaW5nIG5vdGhpbmcuCisgICAgICAgIHRleHQubm9ybWFsaXplKCkKKyAgICAgICAgZG9jLnVubGluaygpCisKICAgICBkZWYgdGVzdEJ1ZzE0MzM2OTQoc2VsZik6CiAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8bz48aS8+dDwvbz4iKQogICAgICAgICBub2RlID0gZG9jLmRvY3VtZW50RWxlbWVudAogICAgICAgICBub2RlLmNoaWxkTm9kZXNbMV0ubm9kZVZhbHVlID0gIiIKICAgICAgICAgbm9kZS5ub3JtYWxpemUoKQotICAgICAgICBzZWxmLmNvbmZpcm0obm9kZS5jaGlsZE5vZGVzWy0xXS5uZXh0U2libGluZyA9PSBOb25lLAorICAgICAgICBzZWxmLmNvbmZpcm0obm9kZS5jaGlsZE5vZGVzWy0xXS5uZXh0U2libGluZyBpcyBOb25lLAogICAgICAgICAgICAgICAgICAgICAgIkZpbmFsIGNoaWxkJ3MgLm5leHRTaWJsaW5nIHNob3VsZCBiZSBOb25lIikKIAogICAgIGRlZiB0ZXN0U2libGluZ3Moc2VsZik6CkBAIC0xNDU1LDEyICsxNDY1LDEzIEBACiAgICAgICAgICAgICAgICAgc2VsZi5jb25maXJtKGxlbihuMS5lbnRpdGllcykgPT0gbGVuKG4yLmVudGl0aWVzKQogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGxlbihuMS5ub3RhdGlvbnMpID09IGxlbihuMi5ub3RhdGlvbnMpKQogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5ub3RhdGlvbnMpKToKKyAgICAgICAgICAgICAgICAgICAgIyBYWFggdGhpcyBsb29wIGJvZHkgZG9lc24ndCBzZWVtIHRvIGJlIGV4ZWN1dGVkPwogICAgICAgICAgICAgICAgICAgICBubzEgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQogICAgICAgICAgICAgICAgICAgICBubzIgPSBuMS5ub3RhdGlvbnMuaXRlbShpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0obm8xLm5hbWUgPT0gbm8yLm5hbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbm8xLnB1YmxpY0lkID09IG5vMi5wdWJsaWNJZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubzEuc3lzdGVtSWQgPT0gbm8yLnN5c3RlbUlkKQotICAgICAgICAgICAgICAgICAgICBzdGF0Y2suYXBwZW5kKChubzEsIG5vMikpCisgICAgICAgICAgICAgICAgICAgIHN0YWNrLmFwcGVuZCgobm8xLCBubzIpKQogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihuMS5lbnRpdGllcykpOgogICAgICAgICAgICAgICAgICAgICBlMSA9IG4xLmVudGl0aWVzLml0ZW0oaSkKICAgICAgICAgICAgICAgICAgICAgZTIgPSBuMi5lbnRpdGllcy5pdGVtKGkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggN2M1MTA4NS4uZTYyYTA0NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMSw2ICsxLDEwIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUsIHVubGluaywgcmVxdWlyZXMKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IG9zLCByZSwgaXRlcnRvb2xzLCBzb2NrZXQsIHN5cworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBpdGVydG9vbHMKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKIAogIyBTa2lwIHRlc3QgaWYgd2UgY2FuJ3QgaW1wb3J0IG1tYXAuCiBtbWFwID0gaW1wb3J0X21vZHVsZSgnbW1hcCcpCkBAIC0xMTYsMTI2ICsxMjAsMTE5IEBACiAgICAgZGVmIHRlc3RfYWNjZXNzX3BhcmFtZXRlcihzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAiYWNjZXNzIiBrZXl3b3JkIHBhcmFtZXRlcgogICAgICAgICBtYXBzaXplID0gMTAKLSAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKGIiYSIqbWFwc2l6ZSkKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicmIiKQotICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIGInYScqbWFwc2l6ZSwgIlJlYWRvbmx5IG1lbW9yeSBtYXAgZGF0YSBpbmNvcnJlY3QuIikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShiImEiKm1hcHNpemUpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBiJ2EnKm1hcHNpemUsICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgaW5jb3JyZWN0LiIpCiAKLSAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgc2xpY2UgYXNzaWduZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbVs6XSA9IGInYicqbWFwc2l6ZQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorICAgICAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgc2xpY2UgYXNzaWduZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtWzpdID0gYidiJyptYXBzaXplCisgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQogCi0gICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIGl0ZW0gYXNzaWduZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbVswXSA9IGInYicKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKKyAgICAgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIGl0ZW0gYXNzaWduZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtWzBdID0gYidiJworICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKIAotICAgICAgICAjIEVuc3VyaW5nIHRoYXQgcmVhZG9ubHkgbW1hcCBjYW4ndCBiZSB3cml0ZSgpIHRvCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG0uc2VlaygwLDApCi0gICAgICAgICAgICBtLndyaXRlKGInYWJjJykKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKKyAgICAgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHdyaXRlKCkgdG8KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLnNlZWsoMCwwKQorICAgICAgICAgICAgICAgIG0ud3JpdGUoYidhYmMnKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiQWJsZSB0byB3cml0ZSB0byByZWFkb25seSBtZW1vcnkgbWFwIikKIAotICAgICAgICAjIEVuc3VyaW5nIHRoYXQgcmVhZG9ubHkgbW1hcCBjYW4ndCBiZSB3cml0ZV9ieXRlKCkgdG8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbS5zZWVrKDAsMCkKLSAgICAgICAgICAgIG0ud3JpdGVfYnl0ZShiJ2QnKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJBYmxlIHRvIHdyaXRlIHRvIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorICAgICAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgd3JpdGVfYnl0ZSgpIHRvCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbS5zZWVrKDAsMCkKKyAgICAgICAgICAgICAgICBtLndyaXRlX2J5dGUoYidkJykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gd3JpdGUgdG8gcmVhZG9ubHkgbWVtb3J5IG1hcCIpCiAKLSAgICAgICAgIyBFbnN1cmluZyB0aGF0IHJlYWRvbmx5IG1tYXAgY2FuJ3QgYmUgcmVzaXplZAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtLnJlc2l6ZSgyKm1hcHNpemUpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FcnJvcjogICAjIHJlc2l6ZSBpcyBub3QgdW5pdmVyc2FsbHkgc3VwcG9ydGVkCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gcmVzaXplIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZGVsIG0sIGYKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpLCBiJ2EnKm1hcHNpemUsCi0gICAgICAgICAgICAgICAiUmVhZG9ubHkgbWVtb3J5IG1hcCBkYXRhIGZpbGUgd2FzIG1vZGlmaWVkIikKKyAgICAgICAgICAgICMgRW5zdXJpbmcgdGhhdCByZWFkb25seSBtbWFwIGNhbid0IGJlIHJlc2l6ZWQKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtLnJlc2l6ZSgyKm1hcHNpemUpCisgICAgICAgICAgICBleGNlcHQgU3lzdGVtRXJyb3I6ICAgIyByZXNpemUgaXMgbm90IHVuaXZlcnNhbGx5IHN1cHBvcnRlZAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkFibGUgdG8gcmVzaXplIHJlYWRvbmx5IG1lbW9yeSBtYXAiKQorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInJiIikgYXMgZnA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkKCksIGInYScqbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFkb25seSBtZW1vcnkgbWFwIGRhdGEgZmlsZSB3YXMgbW9kaWZpZWQiKQogCiAgICAgICAgICMgT3BlbmluZyBtbWFwIHdpdGggc2l6ZSB0b28gYmlnCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplKzEpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgIyB3ZSBkbyBub3QgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBXaW5kb3dzCi0gICAgICAgICAgICAjIENBVVRJT046ICBUaGlzIGFsc28gY2hhbmdlcyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSBvbiBkaXNrLCBhbmQKLSAgICAgICAgICAgICMgbGF0ZXIgdGVzdHMgYXNzdW1lIHRoYXQgdGhlIGxlbmd0aCBoYXNuJ3QgY2hhbmdlZC4gIFdlIG5lZWQgdG8KLSAgICAgICAgICAgICMgcmVwYWlyIHRoYXQuCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyK2IiKSBhcyBmOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSsxKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBkbyBub3QgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgIyBDQVVUSU9OOiAgVGhpcyBhbHNvIGNoYW5nZXMgdGhlIHNpemUgb2YgdGhlIGZpbGUgb24gZGlzaywgYW5kCisgICAgICAgICAgICAgICAgIyBsYXRlciB0ZXN0cyBhc3N1bWUgdGhhdCB0aGUgbGVuZ3RoIGhhc24ndCBjaGFuZ2VkLiAgV2UgbmVlZCB0bworICAgICAgICAgICAgICAgICMgcmVwYWlyIHRoYXQuCisgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk9wZW5pbmcgbW1hcCB3aXRoIHNpemUrMSBzaG91bGQgd29yayBvbiBXaW5kb3dzLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgd2UgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBVbml4LCBidXQgbm90IG9uIFdpbmRvd3MKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk9wZW5pbmcgbW1hcCB3aXRoIHNpemUrMSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvci4iKQorICAgICAgICAgICAgICAgIG0uY2xvc2UoKQogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiT3BlbmluZyBtbWFwIHdpdGggc2l6ZSsxIHNob3VsZCB3b3JrIG9uIFdpbmRvd3MuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgd2UgZXhwZWN0IGEgVmFsdWVFcnJvciBvbiBVbml4LCBidXQgbm90IG9uIFdpbmRvd3MKLSAgICAgICAgICAgIGlmIG5vdCBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPcGVuaW5nIG1tYXAgd2l0aCBzaXplKzEgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IuIikKLSAgICAgICAgICAgIG0uY2xvc2UoKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgIyBSZXBhaXIgZGFtYWdlIGZyb20gdGhlIHJlc2l6aW5nIHRlc3QuCi0gICAgICAgICAgICBmID0gb3BlbihURVNURk4sICdyK2InKQotICAgICAgICAgICAgZi50cnVuY2F0ZShtYXBzaXplKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgIyBSZXBhaXIgZGFtYWdlIGZyb20gdGhlIHJlc2l6aW5nIHRlc3QuCisgICAgICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3IrYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGYudHJ1bmNhdGUobWFwc2l6ZSkKIAogICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfV1JJVEUKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKLSAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCi0gICAgICAgICMgTW9kaWZ5aW5nIHdyaXRlLXRocm91Z2ggbWVtb3J5IG1hcAotICAgICAgICBtWzpdID0gYidjJyptYXBzaXplCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVs6XSwgYidjJyptYXBzaXplLAotICAgICAgICAgICAgICAgIldyaXRlLXRocm91Z2ggbWVtb3J5IG1hcCBtZW1vcnkgbm90IHVwZGF0ZWQgcHJvcGVybHkuIikKLSAgICAgICAgbS5mbHVzaCgpCi0gICAgICAgIG0uY2xvc2UoKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAncmInKQotICAgICAgICBzdHVmZiA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicitiIikgYXMgZjoKKyAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgYWNjZXNzPW1tYXAuQUNDRVNTX1dSSVRFKQorICAgICAgICAgICAgIyBNb2RpZnlpbmcgd3JpdGUtdGhyb3VnaCBtZW1vcnkgbWFwCisgICAgICAgICAgICBtWzpdID0gYidjJyptYXBzaXplCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIGInYycqbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAiV3JpdGUtdGhyb3VnaCBtZW1vcnkgbWFwIG1lbW9yeSBub3QgdXBkYXRlZCBwcm9wZXJseS4iKQorICAgICAgICAgICAgbS5mbHVzaCgpCisgICAgICAgICAgICBtLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHN0dWZmID0gZi5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHVmZiwgYidjJyptYXBzaXplLAogICAgICAgICAgICAgICAgIldyaXRlLXRocm91Z2ggbWVtb3J5IG1hcCBkYXRhIGZpbGUgbm90IHVwZGF0ZWQgcHJvcGVybHkuIikKIAogICAgICAgICAjIE9wZW5pbmcgbW1hcCB3aXRoIGFjY2Vzcz1BQ0NFU1NfQ09QWQotICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQotICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG1hcHNpemUsIGFjY2Vzcz1tbWFwLkFDQ0VTU19DT1BZKQotICAgICAgICAjIE1vZGlmeWluZyBjb3B5LW9uLXdyaXRlIG1lbW9yeSBtYXAKLSAgICAgICAgbVs6XSA9IGInZCcqbWFwc2l6ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bOl0sIGInZCcgKiBtYXBzaXplLAotICAgICAgICAgICAgICAgIkNvcHktb24td3JpdGUgbWVtb3J5IG1hcCBkYXRhIG5vdCB3cml0dGVuIGNvcnJlY3RseS4iKQotICAgICAgICBtLmZsdXNoKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVuKFRFU1RGTiwgInJiIikucmVhZCgpLCBiJ2MnKm1hcHNpemUsCi0gICAgICAgICAgICAgICAiQ29weS1vbi13cml0ZSB0ZXN0IGRhdGEgZmlsZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLiIpCi0gICAgICAgICMgRW5zdXJpbmcgY29weS1vbi13cml0ZSBtYXBzIGNhbm5vdCBiZSByZXNpemVkCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5yZXNpemUsIDIqbWFwc2l6ZSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGRlbCBtLCBmCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyK2IiKSBhcyBmOgorICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfQ09QWSkKKyAgICAgICAgICAgICMgTW9kaWZ5aW5nIGNvcHktb24td3JpdGUgbWVtb3J5IG1hcAorICAgICAgICAgICAgbVs6XSA9IGInZCcqbWFwc2l6ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWzpdLCBiJ2QnICogbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvcHktb24td3JpdGUgbWVtb3J5IG1hcCBkYXRhIG5vdCB3cml0dGVuIGNvcnJlY3RseS4iKQorICAgICAgICAgICAgbS5mbHVzaCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoKSwgYidjJyptYXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvcHktb24td3JpdGUgdGVzdCBkYXRhIGZpbGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZC4iKQorICAgICAgICAgICAgIyBFbnN1cmluZyBjb3B5LW9uLXdyaXRlIG1hcHMgY2Fubm90IGJlIHJlc2l6ZWQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbS5yZXNpemUsIDIqbWFwc2l6ZSkKKyAgICAgICAgICAgIG0uY2xvc2UoKQogCiAgICAgICAgICMgRW5zdXJpbmcgaW52YWxpZCBhY2Nlc3MgcGFyYW1ldGVyIHJhaXNlcyBleGNlcHRpb24KLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW1hcC5tbWFwLCBmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9NCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyK2IiKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW1hcC5tbWFwLCBmLmZpbGVubygpLCBtYXBzaXplLCBhY2Nlc3M9NCkKIAogICAgICAgICBpZiBvcy5uYW1lID09ICJwb3NpeCI6CiAgICAgICAgICAgICAjIFRyeSBpbmNvbXBhdGlibGUgZmxhZ3MsIHByb3QgYW5kIGFjY2VzcyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAicitiIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPW1tYXAuTUFQX1BSSVZBVEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90PW1tYXAuUFJPVF9SRUFELCBhY2Nlc3M9bW1hcC5BQ0NFU1NfV1JJVEUpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyK2IiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1tYXAubW1hcCwgZi5maWxlbm8oKSwgbWFwc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1tbWFwLk1BUF9QUklWQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Q9bW1hcC5QUk9UX1JFQUQsIGFjY2Vzcz1tbWFwLkFDQ0VTU19XUklURSkKIAogICAgICAgICAgICAgIyBUcnkgd3JpdGluZyB3aXRoIFBST1RfRVhFQyBhbmQgd2l0aG91dCBQUk9UX1dSSVRFCiAgICAgICAgICAgICBwcm90ID0gbW1hcC5QUk9UX1JFQUQgfCBnZXRhdHRyKG1tYXAsICdQUk9UX0VYRUMnLCAwKQpAQCAtMjUyLDE0ICsyNDksMTMgQEAKICAgICBkZWYgdGVzdF90b3VnaGVyX2ZpbmQoc2VsZik6CiAgICAgICAgICMgRG8gYSB0b3VnaGVyIC5maW5kKCkgdGVzdC4gIFNGIGJ1ZyA1MTU5NDMgcG9pbnRlZCBvdXQgdGhhdCwgaW4gMi4yLAogICAgICAgICAjIHNlYXJjaGluZyBmb3IgZGF0YSB3aXRoIGVtYmVkZGVkIFwwIGJ5dGVzIGRpZG4ndCB3b3JrLgotICAgICAgICBmID0gb3BlbihURVNURk4sICd3YisnKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2IrJykgYXMgZjoKIAotICAgICAgICBkYXRhID0gYidhYWJhYWNceDAwZGVlZlx4MDBceDAwYWFceDAwJwotICAgICAgICBuID0gbGVuKGRhdGEpCi0gICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBkYXRhID0gYidhYWJhYWNceDAwZGVlZlx4MDBceDAwYWFceDAwJworICAgICAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICAgICAgZi53cml0ZShkYXRhKQorICAgICAgICAgICAgZi5mbHVzaCgpCisgICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIG4pCiAKICAgICAgICAgZm9yIHN0YXJ0IGluIHJhbmdlKG4rMSk6CiAgICAgICAgICAgICBmb3IgZmluaXNoIGluIHJhbmdlKHN0YXJ0LCBuKzEpOgpAQCAtMzQzLDExICszMzksOCBAQAogICAgICAgICAgICAgZi53cml0ZSgoNjU1MzYgKiAyKSAqIGInbScpICMgQXJiaXRyYXJ5IGNoYXJhY3RlcgogCiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBtZiA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9NjU1MzYsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgb2Zmc2V0PTY1NTM2LCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkgYXMgbWY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbWYuX19nZXRpdGVtX18sIDgwMDAwKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBtZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9sZW5ndGhfMF9sYXJnZV9vZmZzZXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzEwOTU5OiB0ZXN0IG1hcHBpbmcgb2YgYSBmaWxlIGJ5IHBhc3NpbmcgMCBmb3IKQEAgLTUzMiw3ICs1MjUsOCBAQAogICAgICAgICBpZiBub3QgaGFzYXR0cihtbWFwLCAnUFJPVF9SRUFEJyk6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbWFwc2l6ZSA9IDEwCi0gICAgICAgIG9wZW4oVEVTVEZOLCAid2IiKS53cml0ZShiImEiKm1hcHNpemUpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYiJhIiptYXBzaXplKQogICAgICAgICBmID0gb3BlbihURVNURk4sICJyYiIpCiAgICAgICAgIG0gPSBtbWFwLm1tYXAoZi5maWxlbm8oKSwgbWFwc2l6ZSwgcHJvdD1tbWFwLlBST1RfUkVBRCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtLndyaXRlLCAiZm9vIikKQEAgLTU0MCwxMSArNTM0LDEyIEBACiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobW1hcC5lcnJvciwgRW52aXJvbm1lbnRFcnJvcikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibW1hcC5lcnJvciIgaW4gc3RyKG1tYXAuZXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJtbWFwLmVycm9yIiwgc3RyKG1tYXAuZXJyb3IpKQogCiAgICAgZGVmIHRlc3RfaW9fbWV0aG9kcyhzZWxmKToKICAgICAgICAgZGF0YSA9IGIiMDEyMzQ1Njc4OSIKLSAgICAgICAgb3BlbihURVNURk4sICJ3YiIpLndyaXRlKGIieCIqbGVuKGRhdGEpKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGIieCIqbGVuKGRhdGEpKQogICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQogICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIGxlbihkYXRhKSkKICAgICAgICAgZi5jbG9zZSgpCkBAIC02MTksNyArNjE0LDggQEAKICAgICAgICAgICAgIG0uY2xvc2UoKQogCiAgICAgICAgICAgICAjIFNob3VsZCBub3QgY3Jhc2ggKElzc3VlIDUzODUpCi0gICAgICAgICAgICBvcGVuKFRFU1RGTiwgIndiIikud3JpdGUoYiJ4IioxMCkKKyAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKGIieCIqMTApCiAgICAgICAgICAgICBmID0gb3BlbihURVNURk4sICJyK2IiKQogICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwKQogICAgICAgICAgICAgZi5jbG9zZSgpCkBAIC02NDQsNiArNjQwLDE5IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgSU9FcnJvciBnZXRzIHBhc3NlZCB0aHJvdWdoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uKSBhcyBleGM6CisgICAgICAgICAgICB3aXRoIG1tYXAubW1hcCgtMSwgMTApIGFzIG06CisgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgSU9FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCiBjbGFzcyBMYXJnZU1tYXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTY3NiwxMSArNjg1LDggQEAKICAgICAgICAgICAgIGYud3JpdGUoYiIgIikKIAogICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgotICAgICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwLCBvZmZzZXQ9MHgxNDAwMDAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMCwgb2Zmc2V0PTB4MTQwMDAwMDAwLCBhY2Nlc3M9bW1hcC5BQ0NFU1NfUkVBRCkgYXMgbToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bMHhGRkZGRkZGXSwgMzIpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG0uY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfZmlsZXNpemUoc2VsZik6CiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybVs6M10gPT0gJ3dpbicgb3Igc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgpAQCAtNjkyLDExICs2OTgsOCBAQAogICAgICAgICAgICAgZi53cml0ZShiIiAiKQogCiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6Ci0gICAgICAgICAgICBtID0gbW1hcC5tbWFwKGYuZmlsZW5vKCksIDB4MTAwMDAsIGFjY2Vzcz1tbWFwLkFDQ0VTU19SRUFEKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBtbWFwLm1tYXAoZi5maWxlbm8oKSwgMHgxMDAwMCwgYWNjZXNzPW1tYXAuQUNDRVNTX1JFQUQpIGFzIG06CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnNpemUoKSwgMHgxODAwMDAwMDApCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG0uY2xvc2UoKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CmluZGV4IGYzYzhjNjEuLmZlNzcyZTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQpAQCAtMSwxMSArMSwxMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfbXVsdGlieXRlY29kZWMucHkKICMgICBVbml0IHRlc3QgZm9yIG11bHRpYnl0ZWNvZGVjIGl0c2VsZgogIwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdCBpbXBvcnQgdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QsIGlvLCBjb2RlY3MsIHN5cywgb3MKIGltcG9ydCBfbXVsdGlieXRlY29kZWMKQEAgLTI0Miw3ICsyNDEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlzbzIwMjJqcDIuZGVjb2RlKCdpc28yMDIyLWpwLTInKSwgdW5pKQogCiAgICAgZGVmIHRlc3RfaXNvMjAyMl9qcF9nMChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiJ1x4MGUnIGluICdcTntTT0ZUIEhZUEhFTn0nLmVuY29kZSgnaXNvLTIwMjItanAtMicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInXHgwZScsICdcTntTT0ZUIEhZUEhFTn0nLmVuY29kZSgnaXNvLTIwMjItanAtMicpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKCdpc28tMjAyMi1qcC0yMDA0JywgJ2lzby0yMDIyLWpwLTMnKToKICAgICAgICAgICAgIGUgPSAnXHUzNDA2Jy5lbmNvZGUoZW5jb2RpbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFueSh4ID4gMHg4MCBmb3IgeCBpbiBlKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQppbmRleCBkMjhjNjUzLi5lZDE1Y2UxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIHRlc3RfbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQogIyAgIENvbW1vbiBVbml0dGVzdCBSb3V0aW5lcyBmb3IgQ0pLIGNvZGVjcwpAQCAtNiw2ICs2LDcgQEAKIAogaW1wb3J0IHN5cywgY29kZWNzCiBpbXBvcnQgdW5pdHRlc3QsIHJlCitmcm9tIGh0dHAuY2xpZW50IGltcG9ydCBIVFRQRXhjZXB0aW9uCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KIApAQCAtMjc4LDcgKzI3OSw3IEBACiAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLl9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkuY2xvc2UoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBIVFRQRXhjZXB0aW9uKToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCByZXRyaWV2ZSAiK3NlbGYubWFwZmlsZXVybCkKIAogICAgIGRlZiBvcGVuX21hcHBpbmdfZmlsZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKaW5kZXggM2U0NjdkNS4uMjYxNDY4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTEsMTEgKzEsMTAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjCiAjIFVuaXQgdGVzdHMgZm9yIHRoZSBtdWx0aXByb2Nlc3NpbmcgcGFja2FnZQogIwogCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCBxdWV1ZSBhcyBweXF1ZXVlCiBpbXBvcnQgdGltZQogaW1wb3J0IGlvCkBAIC0yNSw2ICsyNCwxMCBAQAogX211bHRpcHJvY2Vzc2luZyA9IHRlc3Quc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfbXVsdGlwcm9jZXNzaW5nJykKICMgU2tpcCB0ZXN0cyBpZiBzZW1fb3BlbiBpbXBsZW1lbnRhdGlvbiBpcyBicm9rZW4uCiB0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJykKKyMgaW1wb3J0IHRocmVhZGluZyBhZnRlciBfbXVsdGlwcm9jZXNzaW5nIHRvIHJhaXNlIGEgbW9yZSByZXZlbGFudCBlcnJvcgorIyBtZXNzYWdlOiAiTm8gbW9kdWxlIG5hbWVkIF9tdWx0aXByb2Nlc3NpbmciLiBfbXVsdGlwcm9jZXNzaW5nIGlzIG5vdCBjb21waWxlZAorIyB3aXRob3V0IHRocmVhZCBzdXBwb3J0LgoraW1wb3J0IHRocmVhZGluZwogCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15CiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KQEAgLTUyLDcgKzU1LDcgQEAKICMKIAogTE9HX0xFVkVMID0gdXRpbC5TVUJXQVJOSU5HCi0jTE9HX0xFVkVMID0gbG9nZ2luZy5XQVJOSU5HCisjTE9HX0xFVkVMID0gbG9nZ2luZy5ERUJVRwogCiBERUxUQSA9IDAuMQogQ0hFQ0tfVElNSU5HUyA9IEZhbHNlICAgICAjIG1ha2luZyB0cnVlIG1ha2VzIHRlc3RzIHRha2UgYSBsb3QgbG9uZ2VyCkBAIC0xNTYsNyArMTU5LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoY3VycmVudC5pc19hbGl2ZSgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGN1cnJlbnQuZGFlbW9uKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihhdXRoa2V5KSA+IDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5pZGVudCwgb3MuZ2V0cGlkKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VycmVudC5leGl0Y29kZSwgTm9uZSkKQEAgLTE4Nyw3ICsxOTAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmF1dGhrZXksIGN1cnJlbnQuYXV0aGtleSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIEZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZGFlbW9uLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKSBpcyBsaXN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZXhpdGNvZGUsIE5vbmUpCiAKQEAgLTE5NSw3ICsxOTgsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGFyZ3NbMTpdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEuZ2V0KCksIGt3YXJncykKQEAgLTIwOCw3ICsyMTEsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3Rlcm1pbmF0ZShjbHMpOgpAQCAtMjIzLDcgKzIyNiw3IEBACiAgICAgICAgIHAuc3RhcnQoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5pc19hbGl2ZSgpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5leGl0Y29kZSwgTm9uZSkKIAogICAgICAgICBwLnRlcm1pbmF0ZSgpCkBAIC0yMzMsNyArMjM2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaXNfYWxpdmUoKSwgRmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIG5vdCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAKICAgICAgICAgcC5qb2luKCkKIApAQCAtMjUyLDEzICsyNTUsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpLCBsaXN0KQogCiAgICAgICAgIHAgPSBzZWxmLlByb2Nlc3ModGFyZ2V0PXRpbWUuc2xlZXAsIGFyZ3M9KERFTFRBLCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIG5vdCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHAsIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCiAKICAgICAgICAgcC5zdGFydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwIGluIHNlbGYuYWN0aXZlX2NoaWxkcmVuKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocCwgc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKIAogICAgICAgICBwLmpvaW4oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW4oKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwLCBzZWxmLmFjdGl2ZV9jaGlsZHJlbigpKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6CkBAIC03NTQsNyArNzU3LDEzIEBACiAgICAgICAgIGNvbmQucmVsZWFzZSgpCiAKICAgICAgICAgIyBjaGVjayB0aGV5IGhhdmUgYWxsIHdva2VuCi0gICAgICAgIHRpbWUuc2xlZXAoREVMVEEpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBnZXRfdmFsdWUod29rZW4pID09IDY6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcChERUxUQSkKICAgICAgICAgc2VsZi5hc3NlcnRSZXR1cm5zSWZJbXBsZW1lbnRlZCg2LCBnZXRfdmFsdWUsIHdva2VuKQogCiAgICAgICAgICMgY2hlY2sgc3RhdGUgaXMgbm90IG11Y2tlZCB1cApAQCAtNzY2LDcgKzc3NSw3IEBACiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIHJlcyA9IHdhaXQoVElNRU9VVDEpCiAgICAgICAgIGNvbmQucmVsZWFzZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgRmFsc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VGltaW5nQWxtb3N0RXF1YWwod2FpdC5lbGFwc2VkLCBUSU1FT1VUMSkKIAogCkBAIC0xMDI2LDYgKzEwMzUsNyBAQAogZGVmIHNxcih4LCB3YWl0PTAuMCk6CiAgICAgdGltZS5zbGVlcCh3YWl0KQogICAgIHJldHVybiB4KngKKwogY2xhc3MgX1Rlc3RQb29sKEJhc2VUZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9hcHBseShzZWxmKToKQEAgLTExMDAsNyArMTExMCw4NiBAQAogICAgICAgICBzZWxmLnBvb2wudGVybWluYXRlKCkKICAgICAgICAgam9pbiA9IFRpbWluZ1dyYXBwZXIoc2VsZi5wb29sLmpvaW4pCiAgICAgICAgIGpvaW4oKQotICAgICAgICBzZWxmLmFzc2VydExlc3Moam9pbi5lbGFwc2VkLCAwLjIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhqb2luLmVsYXBzZWQsIDAuNSkKKworZGVmIHJhaXNpbmcoKToKKyAgICByYWlzZSBLZXlFcnJvcigia2V5IikKKworZGVmIHVucGlja2xlYWJsZV9yZXN1bHQoKToKKyAgICByZXR1cm4gbGFtYmRhOiA0MgorCitjbGFzcyBfVGVzdFBvb2xXb3JrZXJFcnJvcnMoQmFzZVRlc3RDYXNlKToKKyAgICBBTExPV0VEX1RZUEVTID0gKCdwcm9jZXNzZXMnLCApCisKKyAgICBkZWYgdGVzdF9hc3luY19lcnJvcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCisKKyAgICAgICAgc2NyYXRjaHBhZCA9IFtOb25lXQorICAgICAgICBkZWYgZXJyYmFjayhleGMpOgorICAgICAgICAgICAgc2NyYXRjaHBhZFswXSA9IGV4YworCisgICAgICAgIHJlcyA9IHAuYXBwbHlfYXN5bmMocmFpc2luZywgZXJyb3JfY2FsbGJhY2s9ZXJyYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHJlcy5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY3JhdGNocGFkWzBdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NyYXRjaHBhZFswXSwgS2V5RXJyb3IpCisKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKKyAgICBkZWYgdGVzdF91bnBpY2tsZWFibGVfcmVzdWx0KHNlbGYpOgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5wb29sIGltcG9ydCBNYXliZUVuY29kaW5nRXJyb3IKKyAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCisKKyAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBwb29sIHByb2Nlc3NlcyBiZWNhdXNlIG9mIGVuY29kaW5nIGVycm9ycy4KKyAgICAgICAgZm9yIGl0ZXJhdGlvbiBpbiByYW5nZSgyMCk6CisKKyAgICAgICAgICAgIHNjcmF0Y2hwYWQgPSBbTm9uZV0KKyAgICAgICAgICAgIGRlZiBlcnJiYWNrKGV4Yyk6CisgICAgICAgICAgICAgICAgc2NyYXRjaHBhZFswXSA9IGV4YworCisgICAgICAgICAgICByZXMgPSBwLmFwcGx5X2FzeW5jKHVucGlja2xlYWJsZV9yZXN1bHQsIGVycm9yX2NhbGxiYWNrPWVycmJhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNYXliZUVuY29kaW5nRXJyb3IsIHJlcy5nZXQpCisgICAgICAgICAgICB3cmFwcGVkID0gc2NyYXRjaHBhZFswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyYXBwZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NyYXRjaHBhZFswXSwgTWF5YmVFbmNvZGluZ0Vycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUod3JhcHBlZC5leGMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh3cmFwcGVkLnZhbHVlKQorCisgICAgICAgIHAuY2xvc2UoKQorICAgICAgICBwLmpvaW4oKQorCitjbGFzcyBfVGVzdFBvb2xXb3JrZXJMaWZldGltZShCYXNlVGVzdENhc2UpOgorICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsICkKKworICAgIGRlZiB0ZXN0X3Bvb2xfd29ya2VyX2xpZmV0aW1lKHNlbGYpOgorICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMywgbWF4dGFza3NwZXJjaGlsZD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4ocC5fcG9vbCkpCisgICAgICAgIG9yaWd3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgUnVuIG1hbnkgdGFza3Mgc28gZWFjaCB3b3JrZXIgZ2V0cyByZXBsYWNlZCAoaG9wZWZ1bGx5KQorICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHAuYXBwbHlfYXN5bmMoc3FyLCAoaSwgKSkpCisgICAgICAgICMgRmV0Y2ggdGhlIHJlc3VsdHMgYW5kIHZlcmlmeSB3ZSBnb3QgdGhlIHJpZ2h0IGFuc3dlcnMsCisgICAgICAgICMgYWxzbyBlbnN1cmluZyBhbGwgdGhlIHRhc2tzIGhhdmUgY29tcGxldGVkLgorICAgICAgICBmb3IgKGosIHJlcykgaW4gZW51bWVyYXRlKHJlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0KCksIHNxcihqKSkKKyAgICAgICAgIyBSZWZpbGwgdGhlIHBvb2wKKyAgICAgICAgcC5fcmVwb3B1bGF0ZV9wb29sKCkKKyAgICAgICAgIyBXYWl0IHVudGlsIGFsbCB3b3JrZXJzIGFyZSBhbGl2ZQorICAgICAgICAjIChjb3VudGRvd24gKiBERUxUQSA9IDUgc2Vjb25kcyBtYXggc3RhcnR1cCBwcm9jZXNzIHRpbWUpCisgICAgICAgIGNvdW50ZG93biA9IDUwCisgICAgICAgIHdoaWxlIGNvdW50ZG93biBhbmQgbm90IGFsbCh3LmlzX2FsaXZlKCkgZm9yIHcgaW4gcC5fcG9vbCk6CisgICAgICAgICAgICBjb3VudGRvd24gLT0gMQorICAgICAgICAgICAgdGltZS5zbGVlcChERUxUQSkKKyAgICAgICAgZmluYWx3b3JrZXJwaWRzID0gW3cucGlkIGZvciB3IGluIHAuX3Bvb2xdCisgICAgICAgICMgQWxsIHBpZHMgc2hvdWxkIGJlIGFzc2lnbmVkLiAgU2VlIGlzc3VlICM3ODA1LgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIG9yaWd3b3JrZXJwaWRzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKE5vbmUsIGZpbmFsd29ya2VycGlkcykKKyAgICAgICAgIyBGaW5hbGx5LCBjaGVjayB0aGF0IHRoZSB3b3JrZXIgcGlkcyBoYXZlIGNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3J0ZWQob3JpZ3dvcmtlcnBpZHMpLCBzb3J0ZWQoZmluYWx3b3JrZXJwaWRzKSkKKyAgICAgICAgcC5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisKICMKICMgVGVzdCB0aGF0IG1hbmFnZXIgaGFzIGV4cGVjdGVkIG51bWJlciBvZiBzaGFyZWQgb2JqZWN0cyBsZWZ0CiAjCkBAIC0xNzg2LDYgKzE4NzUsMjYgQEAKICAgICAgICAgcm9vdF9sb2dnZXIuc2V0TGV2ZWwocm9vdF9sZXZlbCkKICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsPUxPR19MRVZFTCkKIAorCisjIGNsYXNzIF9UZXN0TG9nZ2luZ1Byb2Nlc3NOYW1lKEJhc2VUZXN0Q2FzZSk6CisjCisjICAgICBkZWYgaGFuZGxlKHNlbGYsIHJlY29yZCk6CisjICAgICAgICAgYXNzZXJ0IHJlY29yZC5wcm9jZXNzTmFtZSA9PSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkubmFtZQorIyAgICAgICAgIHNlbGYuX19oYW5kbGVkID0gVHJ1ZQorIworIyAgICAgZGVmIHRlc3RfbG9nZ2luZyhzZWxmKToKKyMgICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5IYW5kbGVyKCkKKyMgICAgICAgICBoYW5kbGVyLmhhbmRsZSA9IHNlbGYuaGFuZGxlCisjICAgICAgICAgc2VsZi5fX2hhbmRsZWQgPSBGYWxzZQorIyAgICAgICAgICMgQnlwYXNzIGdldExvZ2dlcigpIGFuZCBzaWRlLWVmZmVjdHMKKyMgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlckNsYXNzKCkoCisjICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnRlc3QuVGVzdExvZ2dpbmdQcm9jZXNzTmFtZScpCisjICAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyMgICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gRmFsc2UKKyMKKyMgICAgICAgICBsb2dnZXIud2FybignZm9vJykKKyMgICAgICAgICBhc3NlcnQgc2VsZi5fX2hhbmRsZWQKKwogIwogIyBUZXN0IHRvIHZlcmlmeSBoYW5kbGUgdmVyaWZpY2F0aW9uLCBzZWUgaXNzdWUgMzMyMQogIwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9uaXMucHkgYi9MaWIvdGVzdC90ZXN0X25pcy5weQppbmRleCAxZmI1NDM0Li44MzBjMjRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25pcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X25pcy5weQpAQCAtMSw1ICsxLDYgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCiAKICMgU2tpcCB0ZXN0IGlmIG5pcyBtb2R1bGUgZG9lcyBub3QgZXhpc3QuCiBuaXMgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ25pcycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkgYi9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM4N2Y2MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQpAQCAtMCwwICsxLDEyNDMgQEAKK2ltcG9ydCBpbworaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgdGV4dHdyYXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBjb2xsZWN0aW9ucworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIG5udHBsaWIgaW1wb3J0IE5OVFAsIEdyb3VwSW5mbywgX2hhdmVfc3NsCitpbXBvcnQgbm50cGxpYgoraWYgX2hhdmVfc3NsOgorICAgIGltcG9ydCBzc2wKKworVElNRU9VVCA9IDMwCisKKyMgVE9ETzoKKyMgLSB0ZXN0IHRoZSBgZmlsZWAgYXJnIHRvIG1vcmUgY29tbWFuZHMKKyMgLSB0ZXN0IGVycm9yIGNvbmRpdGlvbnMKKyMgLSB0ZXN0IGF1dGggYW5kIGB1c2VuZXRyY2AKKworCitjbGFzcyBOZXR3b3JrZWROTlRQVGVzdHNNaXhpbjoKKworICAgIGRlZiB0ZXN0X3dlbGNvbWUoc2VsZik6CisgICAgICAgIHdlbGNvbWUgPSBzZWxmLnNlcnZlci5nZXR3ZWxjb21lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIsIHR5cGUod2VsY29tZSkpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuc2VydmVyLmhlbHAoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIxMDAgIiksIHJlc3ApCisgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIsIHR5cGUobGluZSkpCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICByZXNwLCBncm91cHMgPSBzZWxmLnNlcnZlci5saXN0KCkKKyAgICAgICAgaWYgbGVuKGdyb3VwcykgPiAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHcm91cEluZm8sIHR5cGUoZ3JvdXBzWzBdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyLCB0eXBlKGdyb3Vwc1swXS5ncm91cCkpCisKKyAgICBkZWYgdGVzdF9saXN0X2FjdGl2ZShzZWxmKToKKyAgICAgICAgcmVzcCwgZ3JvdXBzID0gc2VsZi5zZXJ2ZXIubGlzdChzZWxmLkdST1VQX1BBVCkKKyAgICAgICAgaWYgbGVuKGdyb3VwcykgPiAwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChHcm91cEluZm8sIHR5cGUoZ3JvdXBzWzBdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyLCB0eXBlKGdyb3Vwc1swXS5ncm91cCkpCisKKyAgICBkZWYgdGVzdF91bmtub3duX2NvbW1hbmQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobm50cGxpYi5OTlRQUGVybWFuZW50RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuX3Nob3J0Y21kKCJYWVpaWSIpCisgICAgICAgIHJlc3AgPSBjbS5leGNlcHRpb24ucmVzcG9uc2UKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3Auc3RhcnRzd2l0aCgiNTAwICIpLCByZXNwKQorCisgICAgZGVmIHRlc3RfbmV3Z3JvdXBzKHNlbGYpOgorICAgICAgICAjIGdtYW5lIGdldHMgYSBjb25zdGFudCBpbmZsdXggb2YgbmV3IGdyb3Vwcy4gIEluIG9yZGVyIG5vdCB0byBzdHJlc3MKKyAgICAgICAgIyB0aGUgc2VydmVyIHRvbyBtdWNoLCB3ZSBjaG9vc2UgYSByZWNlbnQgZGF0ZSBpbiB0aGUgcGFzdC4KKyAgICAgICAgZHQgPSBkYXRldGltZS5kYXRlLnRvZGF5KCkgLSBkYXRldGltZS50aW1lZGVsdGEoZGF5cz03KQorICAgICAgICByZXNwLCBncm91cHMgPSBzZWxmLnNlcnZlci5uZXdncm91cHMoZHQpCisgICAgICAgIGlmIGxlbihncm91cHMpID4gMDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShncm91cHNbMF0sIEdyb3VwSW5mbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShncm91cHNbMF0uZ3JvdXAsIHN0cikKKworICAgIGRlZiB0ZXN0X2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX2Rlc2MoZGVzYyk6CisgICAgICAgICAgICAjIFNhbml0eSBjaGVja3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXNjLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuR1JPVVBfTkFNRSwgZGVzYykKKyAgICAgICAgZGVzYyA9IHNlbGYuc2VydmVyLmRlc2NyaXB0aW9uKHNlbGYuR1JPVVBfTkFNRSkKKyAgICAgICAgX2NoZWNrX2Rlc2MoZGVzYykKKyAgICAgICAgIyBBbm90aGVyIHNhbml0eSBjaGVjaworICAgICAgICBzZWxmLmFzc2VydEluKCJQeXRob24iLCBkZXNjKQorICAgICAgICAjIFdpdGggYSBwYXR0ZXJuCisgICAgICAgIGRlc2MgPSBzZWxmLnNlcnZlci5kZXNjcmlwdGlvbihzZWxmLkdST1VQX1BBVCkKKyAgICAgICAgX2NoZWNrX2Rlc2MoZGVzYykKKyAgICAgICAgIyBTaG91bGRuJ3QgZXhpc3QKKyAgICAgICAgZGVzYyA9IHNlbGYuc2VydmVyLmRlc2NyaXB0aW9uKCJ6ay5icnJ0dC5iYXoiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2MsICcnKQorCisgICAgZGVmIHRlc3RfZGVzY3JpcHRpb25zKHNlbGYpOgorICAgICAgICByZXNwLCBkZXNjcyA9IHNlbGYuc2VydmVyLmRlc2NyaXB0aW9ucyhzZWxmLkdST1VQX1BBVCkKKyAgICAgICAgIyAyMTUgZm9yIExJU1QgTkVXU0dST1VQUywgMjgyIGZvciBYR1RJVExFCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHJlc3Auc3RhcnRzd2l0aCgiMjE1ICIpIG9yIHJlc3Auc3RhcnRzd2l0aCgiMjgyICIpLCByZXNwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVzY3MsIGRpY3QpCisgICAgICAgIGRlc2MgPSBkZXNjc1tzZWxmLkdST1VQX05BTUVdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzYywgc2VsZi5zZXJ2ZXIuZGVzY3JpcHRpb24oc2VsZi5HUk9VUF9OQU1FKSkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBzZWxmLnNlcnZlci5ncm91cChzZWxmLkdST1VQX05BTUUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgbGVuKHJlc3VsdCkpCisgICAgICAgIHJlc3AsIGNvdW50LCBmaXJzdCwgbGFzdCwgZ3JvdXAgPSByZXN1bHQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncm91cCwgc2VsZi5HUk9VUF9OQU1FKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY291bnQsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpcnN0LCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsYXN0LCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGZpcnN0LCBsYXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIyMTEgIiksIHJlc3ApCisKKyAgICBkZWYgdGVzdF9kYXRlKHNlbGYpOgorICAgICAgICByZXNwLCBkYXRlID0gc2VsZi5zZXJ2ZXIuZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkYXRlLCBkYXRldGltZS5kYXRldGltZSkKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGF0ZS55ZWFyLCAxOTk1KQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChkYXRlLnllYXIsIDIwMzApCisKKyAgICBkZWYgX2NoZWNrX2FydF9kaWN0KHNlbGYsIGFydF9kaWN0KToKKyAgICAgICAgIyBTb21lIHNhbml0eSBjaGVja3MgZm9yIGEgZmllbGQgZGljdGlvbmFyeSByZXR1cm5lZCBieSBPVkVSIC8gWE9WRVIKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFydF9kaWN0LCBkaWN0KQorICAgICAgICAjIE5OVFAgaGFzIDcgbWFuZGF0b3J5IGZpZWxkcworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChhcnRfZGljdC5rZXlzKCksCisgICAgICAgICAgICB7InN1YmplY3QiLCAiZnJvbSIsICJkYXRlIiwgIm1lc3NhZ2UtaWQiLAorICAgICAgICAgICAgICJyZWZlcmVuY2VzIiwgIjpieXRlcyIsICI6bGluZXMifQorICAgICAgICAgICAgKQorICAgICAgICBmb3IgdiBpbiBhcnRfZGljdC52YWx1ZXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LCAoc3RyLCB0eXBlKE5vbmUpKSkKKworICAgIGRlZiB0ZXN0X3hvdmVyKHNlbGYpOgorICAgICAgICByZXNwLCBjb3VudCwgZmlyc3QsIGxhc3QsIG5hbWUgPSBzZWxmLnNlcnZlci5ncm91cChzZWxmLkdST1VQX05BTUUpCisgICAgICAgIHJlc3AsIGxpbmVzID0gc2VsZi5zZXJ2ZXIueG92ZXIobGFzdCAtIDUsIGxhc3QpCisgICAgICAgIGlmIGxlbihsaW5lcykgPT0gMDoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5vIGFydGljbGVzIHJldHJpZXZlZCIpCisgICAgICAgICMgVGhlICdsYXN0JyBhcnRpY2xlIGlzIG5vdCBuZWNlc3NhcmlseSBwYXJ0IG9mIHRoZSBvdXRwdXQgKGNhbmNlbGxlZD8pCisgICAgICAgIGFydF9udW0sIGFydF9kaWN0ID0gbGluZXNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYXJ0X251bSwgbGFzdCAtIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGFydF9udW0sIGxhc3QpCisgICAgICAgIHNlbGYuX2NoZWNrX2FydF9kaWN0KGFydF9kaWN0KQorCisgICAgZGVmIHRlc3Rfb3ZlcihzZWxmKToKKyAgICAgICAgcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gc2VsZi5zZXJ2ZXIuZ3JvdXAoc2VsZi5HUk9VUF9OQU1FKQorICAgICAgICBzdGFydCA9IGxhc3QgLSAxMAorICAgICAgICAjIFRoZSAic3RhcnQtIiBhcnRpY2xlIHJhbmdlIGZvcm0KKyAgICAgICAgcmVzcCwgbGluZXMgPSBzZWxmLnNlcnZlci5vdmVyKChzdGFydCwgTm9uZSkpCisgICAgICAgIGFydF9udW0sIGFydF9kaWN0ID0gbGluZXNbMF0KKyAgICAgICAgc2VsZi5fY2hlY2tfYXJ0X2RpY3QoYXJ0X2RpY3QpCisgICAgICAgICMgVGhlICJzdGFydC1lbmQiIGFydGljbGUgcmFuZ2UgZm9ybQorICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuc2VydmVyLm92ZXIoKHN0YXJ0LCBsYXN0KSkKKyAgICAgICAgYXJ0X251bSwgYXJ0X2RpY3QgPSBsaW5lc1stMV0KKyAgICAgICAgIyBUaGUgJ2xhc3QnIGFydGljbGUgaXMgbm90IG5lY2Vzc2FyaWx5IHBhcnQgb2YgdGhlIG91dHB1dCAoY2FuY2VsbGVkPykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYXJ0X251bSwgc3RhcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGFydF9udW0sIGxhc3QpCisgICAgICAgIHNlbGYuX2NoZWNrX2FydF9kaWN0KGFydF9kaWN0KQorICAgICAgICAjIFhYWCBUaGUgIm1lc3NhZ2VfaWQiIGZvcm0gaXMgdW5zdXBwb3J0ZWQgYnkgZ21hbmUKKyAgICAgICAgIyA1MDMgT3ZlcnZpZXcgYnkgbWVzc2FnZS1JRCB1bnN1cHBvcnRlZAorCisgICAgZGVmIHRlc3RfeGhkcihzZWxmKToKKyAgICAgICAgcmVzcCwgY291bnQsIGZpcnN0LCBsYXN0LCBuYW1lID0gc2VsZi5zZXJ2ZXIuZ3JvdXAoc2VsZi5HUk9VUF9OQU1FKQorICAgICAgICByZXNwLCBsaW5lcyA9IHNlbGYuc2VydmVyLnhoZHIoJ3N1YmplY3QnLCBsYXN0KQorICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyLCB0eXBlKGxpbmVbMV0pKQorCisgICAgZGVmIGNoZWNrX2FydGljbGVfcmVzcChzZWxmLCByZXNwLCBhcnRpY2xlLCBhcnRfbnVtPU5vbmUpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJ0aWNsZSwgbm50cGxpYi5BcnRpY2xlSW5mbykKKyAgICAgICAgaWYgYXJ0X251bSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0aWNsZS5udW1iZXIsIGFydF9udW0pCisgICAgICAgIGZvciBsaW5lIGluIGFydGljbGUubGluZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobGluZSwgYnl0ZXMpCisgICAgICAgICMgWFhYIHRoaXMgY291bGQgZXhjZXB0aW9uYWxseSBoYXBwZW4uLi4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhcnRpY2xlLmxpbmVzWy0xXSwgKGIiLiIsIGIiLlxuIiwgYiIuXHJcbiIpKQorCisgICAgZGVmIHRlc3RfYXJ0aWNsZV9oZWFkX2JvZHkoc2VsZik6CisgICAgICAgIHJlc3AsIGNvdW50LCBmaXJzdCwgbGFzdCwgbmFtZSA9IHNlbGYuc2VydmVyLmdyb3VwKHNlbGYuR1JPVVBfTkFNRSkKKyAgICAgICAgIyBUcnkgdG8gZmluZCBhbiBhdmFpbGFibGUgYXJ0aWNsZQorICAgICAgICBmb3IgYXJ0X251bSBpbiAobGFzdCwgZmlyc3QsIGxhc3QgLSAxKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXNwLCBoZWFkID0gc2VsZi5zZXJ2ZXIuaGVhZChhcnRfbnVtKQorICAgICAgICAgICAgZXhjZXB0IG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgbm90IGUucmVzcG9uc2Uuc3RhcnRzd2l0aCgiNDIzICIpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgICMgIjQyMyBObyBzdWNoIGFydGljbGUiID0+IGNob29zZSBhbm90aGVyIG9uZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGQgbm90IGZpbmQgYSBzdWl0YWJsZSBhcnRpY2xlIG51bWJlciIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLnN0YXJ0c3dpdGgoIjIyMSAiKSwgcmVzcCkKKyAgICAgICAgc2VsZi5jaGVja19hcnRpY2xlX3Jlc3AocmVzcCwgaGVhZCwgYXJ0X251bSkKKyAgICAgICAgcmVzcCwgYm9keSA9IHNlbGYuc2VydmVyLmJvZHkoYXJ0X251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3Auc3RhcnRzd2l0aCgiMjIyICIpLCByZXNwKQorICAgICAgICBzZWxmLmNoZWNrX2FydGljbGVfcmVzcChyZXNwLCBib2R5LCBhcnRfbnVtKQorICAgICAgICByZXNwLCBhcnRpY2xlID0gc2VsZi5zZXJ2ZXIuYXJ0aWNsZShhcnRfbnVtKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIyMjAgIiksIHJlc3ApCisgICAgICAgIHNlbGYuY2hlY2tfYXJ0aWNsZV9yZXNwKHJlc3AsIGFydGljbGUsIGFydF9udW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0aWNsZS5saW5lcywgaGVhZC5saW5lcyArIFtiJyddICsgYm9keS5saW5lcykKKworICAgIGRlZiB0ZXN0X2NhcGFiaWxpdGllcyhzZWxmKToKKyAgICAgICAgIyBUaGUgc2VydmVyIHVuZGVyIHRlc3QgaW1wbGVtZW50cyBOTlRQIHZlcnNpb24gMiBhbmQgaGFzIGEKKyAgICAgICAgIyBjb3VwbGUgb2Ygd2VsbC1rbm93biBjYXBhYmlsaXRpZXMuIEp1c3Qgc2FuaXR5IGNoZWNrIHRoYXQgd2UKKyAgICAgICAgIyBnb3QgdGhlbS4KKyAgICAgICAgZGVmIF9jaGVja19jYXBzKGNhcHMpOgorICAgICAgICAgICAgY2Fwc19saXN0ID0gY2Fwc1snTElTVCddCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2Fwc19saXN0LCAobGlzdCwgdHVwbGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignT1ZFUlZJRVcuRk1UJywgY2Fwc19saXN0KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzZWxmLnNlcnZlci5ubnRwX3ZlcnNpb24sIDIpCisgICAgICAgIF9jaGVja19jYXBzKHNlbGYuc2VydmVyLmdldGNhcGFiaWxpdGllcygpKQorICAgICAgICAjIFRoaXMgcmUtZW1pdHMgdGhlIGNvbW1hbmQKKyAgICAgICAgcmVzcCwgY2FwcyA9IHNlbGYuc2VydmVyLmNhcGFiaWxpdGllcygpCisgICAgICAgIF9jaGVja19jYXBzKGNhcHMpCisKKyAgICBpZiBfaGF2ZV9zc2w6CisgICAgICAgIGRlZiB0ZXN0X3N0YXJ0dGxzKHNlbGYpOgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuc2VydmVyLmZpbGUKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLnNlcnZlci5zb2NrCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnR0bHMoKQorICAgICAgICAgICAgZXhjZXB0IG5udHBsaWIuTk5UUFBlcm1hbmVudEVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNUQVJUVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyLiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgc29ja2V0IGFuZCBpbnRlcm5hbCBwc2V1ZG8tZmlsZSByZWFsbHkgd2VyZQorICAgICAgICAgICAgICAgICMgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZpbGUsIHNlbGYuc2VydmVyLmZpbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb2NrLCBzZWxmLnNlcnZlci5zb2NrKQorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgbmV3IHNvY2tldCByZWFsbHkgaXMgYW4gU1NMIG9uZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLnNlcnZlci5zb2NrLCBzc2wuU1NMU29ja2V0KQorICAgICAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0cnlpbmcgc3RhcnR0bHMgd2hlbiBpdCdzIGFscmVhZHkgYWN0aXZlIGZhaWxzLgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuc2VydmVyLnN0YXJ0dGxzKQorCisgICAgZGVmIHRlc3RfemxvZ2luKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBtdXN0IGJlIHRoZSBwZW51bHRpbWF0ZSBiZWNhdXNlIGZ1cnRoZXIgY29tbWFuZHMgd2lsbCBiZQorICAgICAgICAjIHJlZnVzZWQuCisgICAgICAgIGJhZHVzZXIgPSAibm90YXJlYWx1c2VyIgorICAgICAgICBiYWRwdyA9ICJub3RhcmVhbHBhc3N3b3JkIgorICAgICAgICAjIENoZWNrIHRoYXQgYm9ndXMgY3JlZGVudGlhbHMgY2F1c2UgZmFpbHVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhubnRwbGliLk5OVFBFcnJvciwgc2VsZi5zZXJ2ZXIubG9naW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9YmFkdXNlciwgcGFzc3dvcmQ9YmFkcHcsIHVzZW5ldHJjPUZhbHNlKQorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgdGhhdCBjb3JyZWN0IGNyZWRlbnRpYWxzIHN1Y2NlZWQsIGJ1dCB0aGF0CisgICAgICAgICMgd291bGQgcmVxdWlyZSB2YWxpZCBkZXRhaWxzIGZvciBzb21lIHNlcnZlciBzb21ld2hlcmUgdG8gYmUgaW4gdGhlCisgICAgICAgICMgdGVzdCBzdWl0ZSwgSSB0aGluay4gR21hbmUgaXMgYW5vbnltb3VzLCBhdCBsZWFzdCBhcyB1c2VkIGZvciB0aGUKKyAgICAgICAgIyBvdGhlciB0ZXN0cy4KKworICAgIGRlZiB0ZXN0X3p6cXVpdChzZWxmKToKKyAgICAgICAgIyBUaGlzIHRlc3QgbXVzdCBiZSBjYWxsZWQgbGFzdCwgaGVuY2UgdGhlIG5hbWUKKyAgICAgICAgY2xzID0gdHlwZShzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnNlcnZlci5xdWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNscy5zZXJ2ZXIgPSBOb25lCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgd3JhcF9tZXRob2RzKGNscyk6CisgICAgICAgICMgV3JhcCBhbGwgbWV0aG9kcyBpbiBhIHRyYW5zaWVudF9pbnRlcm5ldCgpIGV4Y2VwdGlvbiBjYXRjaGVyCisgICAgICAgICMgWFhYIHB1dCBhIGdlbmVyaWMgdmVyc2lvbiBpbiB0ZXN0LnN1cHBvcnQ/CisgICAgICAgIGRlZiB3cmFwX21ldGgobWV0aCk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1ldGgpCisgICAgICAgICAgICBkZWYgd3JhcHBlZChzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYuTk5UUF9IT1NUKToKKyAgICAgICAgICAgICAgICAgICAgbWV0aChzZWxmKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZWQKKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKGNscyk6CisgICAgICAgICAgICBpZiBub3QgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihjbHMsIG5hbWUpCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShtZXRoLCBjb2xsZWN0aW9ucy5DYWxsYWJsZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgTmVlZCB0byB1c2UgYSBjbG9zdXJlIHNvIHRoYXQgbWV0aCByZW1haW5zIGJvdW5kIHRvIGl0cyBjdXJyZW50CisgICAgICAgICAgICAjIHZhbHVlCisgICAgICAgICAgICBzZXRhdHRyKGNscywgbmFtZSwgd3JhcF9tZXRoKG1ldGgpKQorCitOZXR3b3JrZWROTlRQVGVzdHNNaXhpbi53cmFwX21ldGhvZHMoKQorCisKK2NsYXNzIE5ldHdvcmtlZE5OVFBUZXN0cyhOZXR3b3JrZWROTlRQVGVzdHNNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhpcyBzZXJ2ZXIgc3VwcG9ydHMgU1RBUlRUTFMgKGdtYW5lIGRvZXNuJ3QpCisgICAgTk5UUF9IT1NUID0gJ25ld3MudHJpZ29mYWNpbGUuY29tJworICAgIEdST1VQX05BTUUgPSAnZnIuY29tcC5sYW5nLnB5dGhvbicKKyAgICBHUk9VUF9QQVQgPSAnZnIuY29tcC5sYW5nLionCisKKyAgICBOTlRQX0NMQVNTID0gTk5UUAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoY2xzLk5OVFBfSE9TVCk6CisgICAgICAgICAgICBjbHMuc2VydmVyID0gY2xzLk5OVFBfQ0xBU1MoY2xzLk5OVFBfSE9TVCwgdGltZW91dD1USU1FT1VULCB1c2VuZXRyYz1GYWxzZSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGlmIGNscy5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbHMuc2VydmVyLnF1aXQoKQorCisKK2lmIF9oYXZlX3NzbDoKKyAgICBjbGFzcyBOZXR3b3JrZWROTlRQX1NTTFRlc3RzKE5ldHdvcmtlZE5OVFBUZXN0cyk6CisKKyAgICAgICAgIyBUZWNobmljYWwgbGltaXRzIGZvciB0aGlzIHB1YmxpYyBOTlRQIHNlcnZlciAoc2VlIGh0dHA6Ly93d3cuYWlvZS5vcmcpOgorICAgICAgICAjICJPbmx5IHR3byBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHBlciBJUCBhZGRyZXNzIGFyZSBhbGxvd2VkIGFuZAorICAgICAgICAjIDQwMCBjb25uZWN0aW9ucyBwZXIgZGF5IGFyZSBhY2NlcHRlZCBmcm9tIGVhY2ggSVAgYWRkcmVzcy4iCisKKyAgICAgICAgTk5UUF9IT1NUID0gJ25udHAuYWlvZS5vcmcnCisgICAgICAgIEdST1VQX05BTUUgPSAnY29tcC5sYW5nLnB5dGhvbicKKyAgICAgICAgR1JPVVBfUEFUID0gJ2NvbXAubGFuZy4qJworCisgICAgICAgIE5OVFBfQ0xBU1MgPSBubnRwbGliLk5OVFBfU1NMCisKKyAgICAgICAgIyBEaXNhYmxlZCBhcyBpdCBwcm9kdWNlcyB0b28gbXVjaCBkYXRhCisgICAgICAgIHRlc3RfbGlzdCA9IE5vbmUKKworICAgICAgICAjIERpc2FibGVkIGFzIHRoZSBjb25uZWN0aW9uIHdpbGwgYWxyZWFkeSBiZSBlbmNyeXB0ZWQuCisgICAgICAgIHRlc3Rfc3RhcnR0bHMgPSBOb25lCisKKworIworIyBOb24tbmV0d29ya2VkIHRlc3RzIHVzaW5nIGEgbG9jYWwgc2VydmVyIChvciBzb21ldGhpbmcgbW9ja2luZyBpdCkuCisjCisKK2NsYXNzIF9OTlRQU2VydmVySU8oaW8uUmF3SU9CYXNlKToKKyAgICAiIiJBIHJhdyBJTyBvYmplY3QgYWxsb3dpbmcgTk5UUCBjb21tYW5kcyB0byBiZSByZWNlaXZlZCBhbmQgcHJvY2Vzc2VkCisgICAgYnkgYSBoYW5kbGVyLiAgVGhlIGhhbmRsZXIgY2FuIHB1c2ggcmVzcG9uc2VzIHdoaWNoIGNhbiB0aGVuIGJlIHJlYWQKKyAgICBmcm9tIHRoZSBJTyBvYmplY3QuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlcik6CisgICAgICAgIGlvLlJhd0lPQmFzZS5fX2luaXRfXyhzZWxmKQorICAgICAgICAjIFRoZSBjaGFubmVsIGZyb20gdGhlIGNsaWVudAorICAgICAgICBzZWxmLmMycyA9IGlvLkJ5dGVzSU8oKQorICAgICAgICAjIFRoZSBjaGFubmVsIHRvIHRoZSBjbGllbnQKKyAgICAgICAgc2VsZi5zMmMgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgorICAgICAgICBzZWxmLmhhbmRsZXIuc3RhcnQoc2VsZi5jMnMucmVhZGxpbmUsIHNlbGYucHVzaF9kYXRhKQorCisgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHB1c2hfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiUHVzaCAoYnVmZmVyKSBzb21lIGRhdGEgdG8gc2VuZCB0byB0aGUgY2xpZW50LiIiIgorICAgICAgICBwb3MgPSBzZWxmLnMyYy50ZWxsKCkKKyAgICAgICAgc2VsZi5zMmMuc2VlaygwLCAyKQorICAgICAgICBzZWxmLnMyYy53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnMyYy5zZWVrKHBvcykKKworICAgIGRlZiB3cml0ZShzZWxmLCBiKToKKyAgICAgICAgIiIiVGhlIGNsaWVudCBzZW5kcyB1cyBzb21lIGRhdGEiIiIKKyAgICAgICAgcG9zID0gc2VsZi5jMnMudGVsbCgpCisgICAgICAgIHNlbGYuYzJzLndyaXRlKGIpCisgICAgICAgIHNlbGYuYzJzLnNlZWsocG9zKQorICAgICAgICBzZWxmLmhhbmRsZXIucHJvY2Vzc19wZW5kaW5nKCkKKyAgICAgICAgcmV0dXJuIGxlbihiKQorCisgICAgZGVmIHJlYWRpbnRvKHNlbGYsIGJ1Zik6CisgICAgICAgICIiIlRoZSBjbGllbnQgd2FudHMgdG8gcmVhZCBhIHJlc3BvbnNlIiIiCisgICAgICAgIHNlbGYuaGFuZGxlci5wcm9jZXNzX3BlbmRpbmcoKQorICAgICAgICBiID0gc2VsZi5zMmMucmVhZChsZW4oYnVmKSkKKyAgICAgICAgbiA9IGxlbihiKQorICAgICAgICBidWZbOm5dID0gYgorICAgICAgICByZXR1cm4gbgorCisKK2NsYXNzIE1vY2tlZE5OVFBUZXN0c01peGluOgorICAgICMgT3ZlcnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzCisgICAgaGFuZGxlcl9jbGFzcyA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYubWFrZV9zZXJ2ZXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKyAgICAgICAgZGVsIHNlbGYuc2VydmVyCisKKyAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5oYW5kbGVyID0gc2VsZi5oYW5kbGVyX2NsYXNzKCkKKyAgICAgICAgc2VsZi5zaW8gPSBfTk5UUFNlcnZlcklPKHNlbGYuaGFuZGxlcikKKyAgICAgICAgIyBVc2luZyBCdWZmZXJlZFJXUGFpciBpbnN0ZWFkIG9mIEJ1ZmZlcmVkUmFuZG9tIGVuc3VyZXMgdGhlIGZpbGUKKyAgICAgICAgIyBpc24ndCBzZWVrYWJsZS4KKyAgICAgICAgZmlsZSA9IGlvLkJ1ZmZlcmVkUldQYWlyKHNlbGYuc2lvLCBzZWxmLnNpbykKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBubnRwbGliLl9OTlRQQmFzZShmaWxlLCAndGVzdC5zZXJ2ZXInLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBzZWxmLnNlcnZlcgorCisKK2NsYXNzIE5OVFB2MUhhbmRsZXI6CisgICAgIiIiQSBoYW5kbGVyIGZvciBSRkMgOTc3IiIiCisKKyAgICB3ZWxjb21lID0gIjIwMCBOTlRQIG1vY2sgc2VydmVyIgorCisgICAgZGVmIHN0YXJ0KHNlbGYsIHJlYWRsaW5lLCBwdXNoX2RhdGEpOgorICAgICAgICBzZWxmLmluX2JvZHkgPSBGYWxzZQorICAgICAgICBzZWxmLmFsbG93X3Bvc3RpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX3JlYWRsaW5lID0gcmVhZGxpbmUKKyAgICAgICAgc2VsZi5fcHVzaF9kYXRhID0gcHVzaF9kYXRhCisgICAgICAgICMgT3VyIHdlbGNvbWUKKyAgICAgICAgc2VsZi5oYW5kbGVfd2VsY29tZSgpCisKKyAgICBkZWYgX2RlY29kZShzZWxmLCBkYXRhKToKKyAgICAgICAgcmV0dXJuIHN0cihkYXRhLCAidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIikKKworICAgIGRlZiBwcm9jZXNzX3BlbmRpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaW5fYm9keToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuX3JlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc2VsZi5ib2R5LmFwcGVuZChsaW5lKQorICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gYiIuXHJcbiI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWV0aCwgdG9rZW5zID0gc2VsZi5ib2R5X2NhbGxiYWNrCisgICAgICAgICAgICAgICAgbWV0aCgqdG9rZW5zLCBib2R5PXNlbGYuYm9keSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5ib2R5X2NhbGxiYWNrID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuYm9keSA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2JvZHkgPSBGYWxzZQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuX2RlY29kZShzZWxmLl9yZWFkbGluZSgpKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aCgiXHJcbiIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxpbmUgZG9lc24ndCBlbmQgd2l0aCBcXHJcXG46IHshcn0iLmZvcm1hdChsaW5lKSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMl0KKyAgICAgICAgICAgIGNtZCwgKnRva2VucyA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgI21ldGggPSBnZXRhdHRyKHNlbGYuaGFuZGxlciwgImhhbmRsZV8iICsgY21kLnVwcGVyKCksIE5vbmUpCisgICAgICAgICAgICBtZXRoID0gZ2V0YXR0cihzZWxmLCAiaGFuZGxlXyIgKyBjbWQudXBwZXIoKSwgTm9uZSkKKyAgICAgICAgICAgIGlmIG1ldGggaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV91bmtub3duKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtZXRoKCp0b2tlbnMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjb21tYW5kIGZhaWxlZDogeyFyfSIuZm9ybWF0KGxpbmUpKSBmcm9tIGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmluX2JvZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvZHlfY2FsbGJhY2sgPSBtZXRoLCB0b2tlbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYm9keSA9IFtdCisKKyAgICBkZWYgZXhwZWN0X2JvZHkoc2VsZik6CisgICAgICAgICIiIkZsYWcgdGhhdCB0aGUgY2xpZW50IGlzIGV4cGVjdGVkIHRvIHBvc3QgYSByZXF1ZXN0IGJvZHkiIiIKKyAgICAgICAgc2VsZi5pbl9ib2R5ID0gVHJ1ZQorCisgICAgZGVmIHB1c2hfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgIiIiUHVzaCBzb21lIGJpbmFyeSBkYXRhIiIiCisgICAgICAgIHNlbGYuX3B1c2hfZGF0YShkYXRhKQorCisgICAgZGVmIHB1c2hfbGl0KHNlbGYsIGxpdCk6CisgICAgICAgICIiIlB1c2ggYSBzdHJpbmcgbGl0ZXJhbCIiIgorICAgICAgICBsaXQgPSB0ZXh0d3JhcC5kZWRlbnQobGl0KQorICAgICAgICBsaXQgPSAiXHJcbiIuam9pbihsaXQuc3BsaXRsaW5lcygpKSArICJcclxuIgorICAgICAgICBsaXQgPSBsaXQuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYucHVzaF9kYXRhKGxpdCkKKworICAgIGRlZiBoYW5kbGVfdW5rbm93bihzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiNTAwIFdoYXQ/IikKKworICAgIGRlZiBoYW5kbGVfd2VsY29tZShzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdChzZWxmLndlbGNvbWUpCisKKyAgICBkZWYgaGFuZGxlX1FVSVQoc2VsZik6CisgICAgICAgIHNlbGYucHVzaF9saXQoIjIwNSBCeWUhIikKKworICAgIGRlZiBoYW5kbGVfREFURShzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiMTExIDIwMTAwOTE0MDAxMTU1IikKKworICAgIGRlZiBoYW5kbGVfR1JPVVAoc2VsZiwgZ3JvdXApOgorICAgICAgICBpZiBncm91cCA9PSAiZnIuY29tcC5sYW5nLnB5dGhvbiI6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMTEgNDg2IDc2MSAxMjY1IGZyLmNvbXAubGFuZy5weXRob24iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiNDExIE5vIHN1Y2ggZ3JvdXAge30iLmZvcm1hdChncm91cCkpCisKKyAgICBkZWYgaGFuZGxlX0hFTFAoc2VsZik6CisgICAgICAgIHNlbGYucHVzaF9saXQoIiIiXAorICAgICAgICAgICAgMTAwIExlZ2FsIGNvbW1hbmRzCisgICAgICAgICAgICAgIGF1dGhpbmZvIHVzZXIgTmFtZXxwYXNzIFBhc3N3b3JkfGdlbmVyaWMgPHByb2c+IDxhcmdzPgorICAgICAgICAgICAgICBkYXRlCisgICAgICAgICAgICAgIGhlbHAKKyAgICAgICAgICAgIFJlcG9ydCBwcm9ibGVtcyB0byA8cm9vdEBleGFtcGxlLm9yZz4KKyAgICAgICAgICAgIC4iIiIpCisKKyAgICBkZWYgaGFuZGxlX1NUQVQoc2VsZiwgbWVzc2FnZV9zcGVjPU5vbmUpOgorICAgICAgICBpZiBtZXNzYWdlX3NwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIjQxMiBObyBuZXdzZ3JvdXAgc2VsZWN0ZWQiKQorICAgICAgICBlbGlmIG1lc3NhZ2Vfc3BlYyA9PSAiMzAwMDIzNCI6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMjMgMzAwMDIzNCA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgZWxpZiBtZXNzYWdlX3NwZWMgPT0gIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIzIDAgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCI0MzAgTm8gU3VjaCBBcnRpY2xlIEZvdW5kIikKKworICAgIGRlZiBoYW5kbGVfTkVYVChzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIzIDMwMDAyMzcgPDY2ODkyOUBleGFtcGxlLm9yZz4gcmV0cmlldmVkIikKKworICAgIGRlZiBoYW5kbGVfTEFTVChzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIzIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiByZXRyaWV2ZWQiKQorCisgICAgZGVmIGhhbmRsZV9MSVNUKHNlbGYsIGFjdGlvbj1Ob25lLCBwYXJhbT1Ob25lKToKKyAgICAgICAgaWYgYWN0aW9uIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAyMTUgTmV3c2dyb3VwcyBpbiBmb3JtICJncm91cCBoaWdoIGxvdyBmbGFncyIuCisgICAgICAgICAgICAgICAgY29tcC5sYW5nLnB5dGhvbiAwMDAwMDUyMzQwIDAwMDAwMDI4MjggeQorICAgICAgICAgICAgICAgIGNvbXAubGFuZy5weXRob24uYW5ub3VuY2UgMDAwMDAwMTE1MyAwMDAwMDAwOTkzIG0KKyAgICAgICAgICAgICAgICBmcmVlLml0LmNvbXAubGFuZy5weXRob24gMDAwMDAwMDAwMiAwMDAwMDAwMDAyIHkKKyAgICAgICAgICAgICAgICBmci5jb21wLmxhbmcucHl0aG9uIDAwMDAwMDEyNTQgMDAwMDAwMDc2MCB5CisgICAgICAgICAgICAgICAgZnJlZS5pdC5jb21wLmxhbmcucHl0aG9uLmxlYXJuZXIgMDAwMDAwMDAwMCAwMDAwMDAwMDAxIHkKKyAgICAgICAgICAgICAgICB0dy5iYnMuY29tcC5sYW5nLnB5dGhvbiAwMDAwMDAwMzA0IDAwMDAwMDAzMDQgeQorICAgICAgICAgICAgICAgIC4iIiIpCisgICAgICAgIGVsaWYgYWN0aW9uID09ICJBQ1RJVkUiOgorICAgICAgICAgICAgaWYgcGFyYW0gPT0gIipkaXN0dXRpbHMqIjoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgMjE1IE5ld3Nncm91cHMgaW4gZm9ybSAiZ3JvdXAgaGlnaCBsb3cgZmxhZ3MiCisgICAgICAgICAgICAgICAgICAgIGdtYW5lLmNvbXAucHl0aG9uLmRpc3R1dGlscy5kZXZlbCAwMDAwMDE0MTA0IDAwMDAwMDAwMDEgbQorICAgICAgICAgICAgICAgICAgICBnbWFuZS5jb21wLnB5dGhvbi5kaXN0dXRpbHMuY3ZzIDAwMDAwMDAwMDAgMDAwMDAwMDAwMSBtCisgICAgICAgICAgICAgICAgICAgIC4iIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIiIiXAorICAgICAgICAgICAgICAgICAgICAyMTUgTmV3c2dyb3VwcyBpbiBmb3JtICJncm91cCBoaWdoIGxvdyBmbGFncyIKKyAgICAgICAgICAgICAgICAgICAgLiIiIikKKyAgICAgICAgZWxpZiBhY3Rpb24gPT0gIk9WRVJWSUVXLkZNVCI6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAyMTUgT3JkZXIgb2YgZmllbGRzIGluIG92ZXJ2aWV3IGRhdGFiYXNlLgorICAgICAgICAgICAgICAgIFN1YmplY3Q6CisgICAgICAgICAgICAgICAgRnJvbToKKyAgICAgICAgICAgICAgICBEYXRlOgorICAgICAgICAgICAgICAgIE1lc3NhZ2UtSUQ6CisgICAgICAgICAgICAgICAgUmVmZXJlbmNlczoKKyAgICAgICAgICAgICAgICBCeXRlczoKKyAgICAgICAgICAgICAgICBMaW5lczoKKyAgICAgICAgICAgICAgICBYcmVmOmZ1bGwKKyAgICAgICAgICAgICAgICAuIiIiKQorICAgICAgICBlbGlmIGFjdGlvbiA9PSAiTkVXU0dST1VQUyI6CisgICAgICAgICAgICBhc3NlcnQgcGFyYW0gaXMgbm90IE5vbmUKKyAgICAgICAgICAgIGlmIHBhcmFtID09ICJjb21wLmxhbmcucHl0aG9uIjoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgMjE1IERlc2NyaXB0aW9ucyBpbiBmb3JtICJncm91cCBkZXNjcmlwdGlvbiIuCisgICAgICAgICAgICAgICAgICAgIGNvbXAubGFuZy5weXRob25cdFRoZSBQeXRob24gY29tcHV0ZXIgbGFuZ3VhZ2UuCisgICAgICAgICAgICAgICAgICAgIC4iIiIpCisgICAgICAgICAgICBlbGlmIHBhcmFtID09ICJjb21wLmxhbmcucHl0aG9uKiI6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiIiJcCisgICAgICAgICAgICAgICAgICAgIDIxNSBEZXNjcmlwdGlvbnMgaW4gZm9ybSAiZ3JvdXAgZGVzY3JpcHRpb24iLgorICAgICAgICAgICAgICAgICAgICBjb21wLmxhbmcucHl0aG9uLmFubm91bmNlXHRBbm5vdW5jZW1lbnRzIGFib3V0IHRoZSBQeXRob24gbGFuZ3VhZ2UuIChNb2RlcmF0ZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbXAubGFuZy5weXRob25cdFRoZSBQeXRob24gY29tcHV0ZXIgbGFuZ3VhZ2UuCisgICAgICAgICAgICAgICAgICAgIC4iIiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIiIiXAorICAgICAgICAgICAgICAgICAgICAyMTUgRGVzY3JpcHRpb25zIGluIGZvcm0gImdyb3VwIGRlc2NyaXB0aW9uIi4KKyAgICAgICAgICAgICAgICAgICAgLiIiIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoJzUwMSBVbmtub3duIExJU1Qga2V5d29yZCcpCisKKyAgICBkZWYgaGFuZGxlX05FV05FV1Moc2VsZiwgZ3JvdXAsIGRhdGVfc3RyLCB0aW1lX3N0cik6CisgICAgICAgICMgV2UgaGFyZCBjb2RlIGRpZmZlcmVudCByZXR1cm4gbWVzc2FnZXMgZGVwZW5kaW5nIG9uIHBhc3NlZAorICAgICAgICAjIGFyZ3VtZW50IGFuZCBkYXRlIHN5bnRheC4KKyAgICAgICAgaWYgKGdyb3VwID09ICJjb21wLmxhbmcucHl0aG9uIiBhbmQgZGF0ZV9zdHIgPT0gIjIwMTAwOTEzIgorICAgICAgICAgICAgYW5kIHRpbWVfc3RyID09ICIwODIwMDQiKToKKyAgICAgICAgICAgICMgRGF0ZSB3YXMgcGFzc2VkIGluIFJGQyAzOTc3IGZvcm1hdCAoTk5UUCAidjIiKQorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiIiJcCisgICAgICAgICAgICAgICAgMjMwIGxpc3Qgb2YgbmV3c2FydGljbGVzIChOTlRQIHYyKSBjcmVhdGVkIGFmdGVyIE1vbiBTZXAgMTMgMDg6MjA6MDQgMjAxMCBmb2xsb3dzCisgICAgICAgICAgICAgICAgPGE0OTI5YTQwLTYzMjgtNDkxYS1hYWFmLWNiNzllZDczMDlhMkBxMmcyMDAwdmJrLmdvb2dsZWdyb3Vwcy5jb20+CisgICAgICAgICAgICAgICAgPGYzMGMwNDE5LWY1NDktNDIxOC04NDhmLWQ3ZDAxMzFkYTkzMUB5M2cyMDAwdmJtLmdvb2dsZWdyb3Vwcy5jb20+CisgICAgICAgICAgICAgICAgLiIiIikKKyAgICAgICAgZWxpZiAoZ3JvdXAgPT0gImNvbXAubGFuZy5weXRob24iIGFuZCBkYXRlX3N0ciA9PSAiMTAwOTEzIgorICAgICAgICAgICAgYW5kIHRpbWVfc3RyID09ICIwODIwMDQiKToKKyAgICAgICAgICAgICMgRGF0ZSB3YXMgcGFzc2VkIGluIFJGQyA5NzcgZm9ybWF0IChOTlRQICJ2MSIpCisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAyMzAgbGlzdCBvZiBuZXdzYXJ0aWNsZXMgKE5OVFAgdjEpIGNyZWF0ZWQgYWZ0ZXIgTW9uIFNlcCAxMyAwODoyMDowNCAyMDEwIGZvbGxvd3MKKyAgICAgICAgICAgICAgICA8YTQ5MjlhNDAtNjMyOC00OTFhLWFhYWYtY2I3OWVkNzMwOWEyQHEyZzIwMDB2YmsuZ29vZ2xlZ3JvdXBzLmNvbT4KKyAgICAgICAgICAgICAgICA8ZjMwYzA0MTktZjU0OS00MjE4LTg0OGYtZDdkMDEzMWRhOTMxQHkzZzIwMDB2Ym0uZ29vZ2xlZ3JvdXBzLmNvbT4KKyAgICAgICAgICAgICAgICAuIiIiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiIiJcCisgICAgICAgICAgICAgICAgMjMwIEFuIGVtcHR5IGxpc3Qgb2YgbmV3c2FydGljbGVzIGZvbGxvd3MKKyAgICAgICAgICAgICAgICAuIiIiKQorICAgICAgICAjIChOb3RlIGZvciBleHBlcmltZW50czogbWFueSBzZXJ2ZXJzIGRpc2FibGUgTkVXTkVXUy4KKyAgICAgICAgIyAgQXMgb2YgdGhpcyB3cml0aW5nLCBzaWNpbmZvMy5lcGZsLmNoIGRvZXNuJ3QuKQorCisgICAgZGVmIGhhbmRsZV9YT1ZFUihzZWxmLCBtZXNzYWdlX3NwZWMpOgorICAgICAgICBpZiBtZXNzYWdlX3NwZWMgPT0gIjU3LTU5IjoKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoCisgICAgICAgICAgICAgICAgIjIyNCBPdmVydmlldyBpbmZvcm1hdGlvbiBmb3IgNTctNTggZm9sbG93c1xuIgorICAgICAgICAgICAgICAgICI1N1x0UmU6IEFOTjogTmV3IFBsb25lIGJvb2sgd2l0aCBzdHJvbmcgUHl0aG9uIChhbmQgWm9wZSkgdGhlbWVzIHRocm91Z2hvdXQiCisgICAgICAgICAgICAgICAgICAgICJcdERvdWcgSGVsbG1hbm4gPGRvdWcuaGVsbG1hbm4tUmU1SlFFZVFxZThBdnh0aXVNd3gzd0BwdWJsaWMuZ21hbmUub3JnPiIKKyAgICAgICAgICAgICAgICAgICAgIlx0U2F0LCAxOSBKdW4gMjAxMCAxODowNDowOCAtMDQwMCIKKyAgICAgICAgICAgICAgICAgICAgIlx0PDRGRDA1RjA1LUY5OEItNDREQy04MTExLUM2MDA5QzkyNUYwQ0BnbWFpbC5jb20+IgorICAgICAgICAgICAgICAgICAgICAiXHQ8aHZhbGY3JG9ydCQxQGRvdWdoLmdtYW5lLm9yZz5cdDcxMDNcdDE2IgorICAgICAgICAgICAgICAgICAgICAiXHRYcmVmOiBuZXdzLmdtYW5lLm9yZyBnbWFuZS5jb21wLnB5dGhvbi5hdXRob3JzOjU3IgorICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgIjU4XHRMb29raW5nIGZvciBhIGZldyBnb29kIGJsb2dnZXJzIgorICAgICAgICAgICAgICAgICAgICAiXHREb3VnIEhlbGxtYW5uIDxkb3VnLmhlbGxtYW5uLVJlNUpRRWVRcWU4QXZ4dGl1TXd4M3dAcHVibGljLmdtYW5lLm9yZz4iCisgICAgICAgICAgICAgICAgICAgICJcdFRodSwgMjIgSnVsIDIwMTAgMDk6MTQ6MTQgLTA0MDAiCisgICAgICAgICAgICAgICAgICAgICJcdDxBMjk4NjNGQS1GMzg4LTQwQzMtQUEyNS0wRkQwNkIwOUI1QkZAZ21haWwuY29tPiIKKyAgICAgICAgICAgICAgICAgICAgIlx0XHQ2NjgzXHQxNiIKKyAgICAgICAgICAgICAgICAgICAgIlx0IgorICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgIyBBbiBVVEYtOCBvdmVydmlldyBsaW5lIGZyb20gZnIuY29tcC5sYW5nLnB5dGhvbgorICAgICAgICAgICAgICAgICI1OVx0UmU6IE1lc3NhZ2UgZCdlcnJldXIgaW5jb21wcsOpaGVuc2libGUgKHBhciBtb2kpIgorICAgICAgICAgICAgICAgICAgICAiXHRFcmljIEJydW5lbCA8ZXJpYy5icnVuZWxAcHJhZ21hZGV2Lm5vc3BhbS5jb20+IgorICAgICAgICAgICAgICAgICAgICAiXHRXZWQsIDE1IFNlcCAyMDEwIDE4OjA5OjE1ICswMjAwIgorICAgICAgICAgICAgICAgICAgICAiXHQ8ZXJpYy5icnVuZWwtMkI4QjU2LjE4MDkxNTE1MDkyMDEwQG5ld3Mud2FuYWRvby5mcj4iCisgICAgICAgICAgICAgICAgICAgICJcdDw0YzkwZWM4NyQwJDMyNDI1JGJhNGFjZWYzQHJlYWRlci5uZXdzLm9yYW5nZS5mcj5cdDE2NDFcdDI3IgorICAgICAgICAgICAgICAgICAgICAiXHRYcmVmOiBzYXJpYS5uZXJpbS5uZXQgZnIuY29tcC5sYW5nLnB5dGhvbjoxMjY1IgorICAgICAgICAgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAgICAgIi5cbiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIiIlwKKyAgICAgICAgICAgICAgICAyMjQgTm8gYXJ0aWNsZXMKKyAgICAgICAgICAgICAgICAuIiIiKQorCisgICAgZGVmIGhhbmRsZV9QT1NUKHNlbGYsICosIGJvZHk9Tm9uZSk6CisgICAgICAgIGlmIGJvZHkgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuYWxsb3dfcG9zdGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIzNDAgSW5wdXQgYXJ0aWNsZTsgZW5kIHdpdGggPENSLUxGPi48Q1ItTEY+IikKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ib2R5KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiNDQwIFBvc3Rpbmcgbm90IHBlcm1pdHRlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5hbGxvd19wb3N0aW5nCisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyNDAgQXJ0aWNsZSByZWNlaXZlZCBPSyIpCisgICAgICAgICAgICBzZWxmLnBvc3RlZF9ib2R5ID0gYm9keQorCisgICAgZGVmIGhhbmRsZV9JSEFWRShzZWxmLCBtZXNzYWdlX2lkLCAqLCBib2R5PU5vbmUpOgorICAgICAgICBpZiBib2R5IGlzIE5vbmU6CisgICAgICAgICAgICBpZiAoc2VsZi5hbGxvd19wb3N0aW5nIGFuZAorICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQgPT0gIjxpLmFtLmFuLmFydGljbGUueW91LndpbGwud2FudEBleGFtcGxlLmNvbT4iKToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIzMzUgU2VuZCBpdDsgZW5kIHdpdGggPENSLUxGPi48Q1ItTEY+IikKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdF9ib2R5KCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiNDM1IEFydGljbGUgbm90IHdhbnRlZCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5hbGxvd19wb3N0aW5nCisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMzUgQXJ0aWNsZSB0cmFuc2ZlcnJlZCBPSyIpCisgICAgICAgICAgICBzZWxmLnBvc3RlZF9ib2R5ID0gYm9keQorCisgICAgc2FtcGxlX2hlYWQgPSAiIiJcCisgICAgICAgIEZyb206ICJEZW1vIFVzZXIiIDxub2JvZHlAZXhhbXBsZS5uZXQ+CisgICAgICAgIFN1YmplY3Q6IEkgYW0ganVzdCBhIHRlc3QgYXJ0aWNsZQorICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTg7IGZvcm1hdD1mbG93ZWQKKyAgICAgICAgTWVzc2FnZS1JRDogPGkuYW0uYW4uYXJ0aWNsZS55b3Uud2lsbC53YW50QGV4YW1wbGUuY29tPiIiIgorCisgICAgc2FtcGxlX2JvZHkgPSAiIiJcCisgICAgICAgIFRoaXMgaXMganVzdCBhIHRlc3QgYXJ0aWNsZS4KKyAgICAgICAgLi5IZXJlIGlzIGEgZG90LXN0YXJ0aW5nIGxpbmUuCisKKyAgICAgICAgLS0gU2lnbmVkIGJ5IEFuZHJceGU5LiIiIgorCisgICAgc2FtcGxlX2FydGljbGUgPSBzYW1wbGVfaGVhZCArICJcblxuIiArIHNhbXBsZV9ib2R5CisKKyAgICBkZWYgaGFuZGxlX0FSVElDTEUoc2VsZiwgbWVzc2FnZV9zcGVjPU5vbmUpOgorICAgICAgICBpZiBtZXNzYWdlX3NwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIjIyMCAzMDAwMjM3IDw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBlbGlmIG1lc3NhZ2Vfc3BlYyA9PSAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiI6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMjAgMCA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgZWxpZiBtZXNzYWdlX3NwZWMgPT0gIjMwMDAyMzQiOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIwIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCI0MzAgTm8gU3VjaCBBcnRpY2xlIEZvdW5kIikKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLnB1c2hfbGl0KHNlbGYuc2FtcGxlX2FydGljbGUpCisgICAgICAgIHNlbGYucHVzaF9saXQoIi4iKQorCisgICAgZGVmIGhhbmRsZV9IRUFEKHNlbGYsIG1lc3NhZ2Vfc3BlYz1Ob25lKToKKyAgICAgICAgaWYgbWVzc2FnZV9zcGVjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMjEgMzAwMDIzNyA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgZWxpZiBtZXNzYWdlX3NwZWMgPT0gIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIxIDAgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGVsaWYgbWVzc2FnZV9zcGVjID09ICIzMDAwMjM0IjoKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIjIyMSAzMDAwMjM0IDw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiNDMwIE5vIFN1Y2ggQXJ0aWNsZSBGb3VuZCIpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5wdXNoX2xpdChzZWxmLnNhbXBsZV9oZWFkKQorICAgICAgICBzZWxmLnB1c2hfbGl0KCIuIikKKworICAgIGRlZiBoYW5kbGVfQk9EWShzZWxmLCBtZXNzYWdlX3NwZWM9Tm9uZSk6CisgICAgICAgIGlmIG1lc3NhZ2Vfc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5wdXNoX2xpdCgiMjIyIDMwMDAyMzcgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGVsaWYgbWVzc2FnZV9zcGVjID09ICI8NDUyMjM0MjNAZXhhbXBsZS5jb20+IjoKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIjIyMiAwIDw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBlbGlmIG1lc3NhZ2Vfc3BlYyA9PSAiMzAwMDIzNCI6CisgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KCIyMjIgMzAwMDIzNCA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYucHVzaF9saXQoIjQzMCBObyBTdWNoIEFydGljbGUgRm91bmQiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYucHVzaF9saXQoc2VsZi5zYW1wbGVfYm9keSkKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiLiIpCisKKworY2xhc3MgTk5UUHYySGFuZGxlcihOTlRQdjFIYW5kbGVyKToKKyAgICAiIiJBIGhhbmRsZXIgZm9yIFJGQyAzOTc3IChOTlRQICJ2MiIpIiIiCisKKyAgICBkZWYgaGFuZGxlX0NBUEFCSUxJVElFUyhzZWxmKToKKyAgICAgICAgc2VsZi5wdXNoX2xpdCgiIiJcCisgICAgICAgICAgICAxMDEgQ2FwYWJpbGl0eSBsaXN0OgorICAgICAgICAgICAgVkVSU0lPTiAyIDMKKyAgICAgICAgICAgIElNUExFTUVOVEFUSU9OIElOTiAyLjUuMQorICAgICAgICAgICAgQVVUSElORk8gVVNFUgorICAgICAgICAgICAgSERSCisgICAgICAgICAgICBMSVNUIEFDVElWRSBBQ1RJVkUuVElNRVMgRElTVFJJQi5QQVRTIEhFQURFUlMgTkVXU0dST1VQUyBPVkVSVklFVy5GTVQKKyAgICAgICAgICAgIE9WRVIKKyAgICAgICAgICAgIFBPU1QKKyAgICAgICAgICAgIFJFQURFUgorICAgICAgICAgICAgLiIiIikKKworICAgIGRlZiBoYW5kbGVfT1ZFUihzZWxmLCBtZXNzYWdlX3NwZWM9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9YT1ZFUihtZXNzYWdlX3NwZWMpCisKKworY2xhc3MgTk5UUHYxdjJUZXN0c01peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKworICAgIGRlZiB0ZXN0X3dlbGNvbWUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIud2VsY29tZSwgc2VsZi5oYW5kbGVyLndlbGNvbWUpCisKKyAgICBkZWYgdGVzdF9kYXRlKHNlbGYpOgorICAgICAgICByZXNwLCBkYXRlID0gc2VsZi5zZXJ2ZXIuZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgIjExMSAyMDEwMDkxNDAwMTE1NSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgOSwgMTQsIDAsIDExLCA1NSkpCisKKyAgICBkZWYgdGVzdF9xdWl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc2lvLmNsb3NlZCkKKyAgICAgICAgcmVzcCA9IHNlbGYuc2VydmVyLnF1aXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMDUgQnllISIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNpby5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICByZXNwLCBoZWxwID0gc2VsZi5zZXJ2ZXIuaGVscCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgIjEwMCBMZWdhbCBjb21tYW5kcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVscCwgWworICAgICAgICAgICAgJyAgYXV0aGluZm8gdXNlciBOYW1lfHBhc3MgUGFzc3dvcmR8Z2VuZXJpYyA8cHJvZz4gPGFyZ3M+JywKKyAgICAgICAgICAgICcgIGRhdGUnLAorICAgICAgICAgICAgJyAgaGVscCcsCisgICAgICAgICAgICAnUmVwb3J0IHByb2JsZW1zIHRvIDxyb290QGV4YW1wbGUub3JnPicsCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9saXN0KHNlbGYpOgorICAgICAgICByZXNwLCBncm91cHMgPSBzZWxmLnNlcnZlci5saXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZ3JvdXBzKSwgNikKKyAgICAgICAgZyA9IGdyb3Vwc1sxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcsCisgICAgICAgICAgICBHcm91cEluZm8oImNvbXAubGFuZy5weXRob24uYW5ub3VuY2UiLCAiMDAwMDAwMTE1MyIsCisgICAgICAgICAgICAgICAgICAgICAgIjAwMDAwMDA5OTMiLCAibSIpKQorICAgICAgICByZXNwLCBncm91cHMgPSBzZWxmLnNlcnZlci5saXN0KCIqZGlzdHV0aWxzKiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdyb3VwcyksIDIpCisgICAgICAgIGcgPSBncm91cHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLAorICAgICAgICAgICAgR3JvdXBJbmZvKCJnbWFuZS5jb21wLnB5dGhvbi5kaXN0dXRpbHMuZGV2ZWwiLCAiMDAwMDAxNDEwNCIsCisgICAgICAgICAgICAgICAgICAgICAgIjAwMDAwMDAwMDEiLCAibSIpKQorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgcmVzcCwgYXJ0X251bSwgbWVzc2FnZV9pZCA9IHNlbGYuc2VydmVyLnN0YXQoMzAwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIzIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgMzAwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHJlc3AsIGFydF9udW0sIG1lc3NhZ2VfaWQgPSBzZWxmLnNlcnZlci5zdGF0KCI8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIzIDAgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhdCgiPG5vbi5leGlzdGVudC5pZD4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZXNwb25zZSwgIjQzMCBObyBTdWNoIEFydGljbGUgRm91bmQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZXNwb25zZSwgIjQxMiBObyBuZXdzZ3JvdXAgc2VsZWN0ZWQiKQorCisgICAgZGVmIHRlc3RfbmV4dChzZWxmKToKKyAgICAgICAgcmVzcCwgYXJ0X251bSwgbWVzc2FnZV9pZCA9IHNlbGYuc2VydmVyLm5leHQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMjMgMzAwMDIzNyA8NjY4OTI5QGV4YW1wbGUub3JnPiByZXRyaWV2ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw2Njg5MjlAZXhhbXBsZS5vcmc+IikKKworICAgIGRlZiB0ZXN0X2xhc3Qoc2VsZik6CisgICAgICAgIHJlc3AsIGFydF9udW0sIG1lc3NhZ2VfaWQgPSBzZWxmLnNlcnZlci5sYXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIzIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiByZXRyaWV2ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorCisgICAgZGVmIHRlc3RfZGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIGRlc2MgPSBzZWxmLnNlcnZlci5kZXNjcmlwdGlvbigiY29tcC5sYW5nLnB5dGhvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzYywgIlRoZSBQeXRob24gY29tcHV0ZXIgbGFuZ3VhZ2UuIikKKyAgICAgICAgZGVzYyA9IHNlbGYuc2VydmVyLmRlc2NyaXB0aW9uKCJjb21wLmxhbmcucHl0aG9ueCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzYywgIiIpCisKKyAgICBkZWYgdGVzdF9kZXNjcmlwdGlvbnMoc2VsZik6CisgICAgICAgIHJlc3AsIGdyb3VwcyA9IHNlbGYuc2VydmVyLmRlc2NyaXB0aW9ucygiY29tcC5sYW5nLnB5dGhvbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgJzIxNSBEZXNjcmlwdGlvbnMgaW4gZm9ybSAiZ3JvdXAgZGVzY3JpcHRpb24iLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JvdXBzLCB7CisgICAgICAgICAgICAiY29tcC5sYW5nLnB5dGhvbiI6ICJUaGUgUHl0aG9uIGNvbXB1dGVyIGxhbmd1YWdlLiIsCisgICAgICAgICAgICB9KQorICAgICAgICByZXNwLCBncm91cHMgPSBzZWxmLnNlcnZlci5kZXNjcmlwdGlvbnMoImNvbXAubGFuZy5weXRob24qIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncm91cHMsIHsKKyAgICAgICAgICAgICJjb21wLmxhbmcucHl0aG9uIjogIlRoZSBQeXRob24gY29tcHV0ZXIgbGFuZ3VhZ2UuIiwKKyAgICAgICAgICAgICJjb21wLmxhbmcucHl0aG9uLmFubm91bmNlIjogIkFubm91bmNlbWVudHMgYWJvdXQgdGhlIFB5dGhvbiBsYW5ndWFnZS4gKE1vZGVyYXRlZCkiLAorICAgICAgICAgICAgfSkKKyAgICAgICAgcmVzcCwgZ3JvdXBzID0gc2VsZi5zZXJ2ZXIuZGVzY3JpcHRpb25zKCJjb21wLmxhbmcucHl0aG9ueCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JvdXBzLCB7fSkKKworICAgIGRlZiB0ZXN0X2dyb3VwKHNlbGYpOgorICAgICAgICByZXNwLCBjb3VudCwgZmlyc3QsIGxhc3QsIGdyb3VwID0gc2VsZi5zZXJ2ZXIuZ3JvdXAoImZyLmNvbXAubGFuZy5weXRob24iKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzcC5zdGFydHN3aXRoKCIyMTEgIiksIHJlc3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlyc3QsIDc2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYXN0LCAxMjY1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA0ODYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JvdXAsICJmci5jb21wLmxhbmcucHl0aG9uIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhubnRwbGliLk5OVFBUZW1wb3JhcnlFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLnNlcnZlci5ncm91cCgiY29tcC5sYW5nLnB5dGhvbi5kZXZlbCIpCisgICAgICAgIGV4YyA9IGNtLmV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhjLnJlc3BvbnNlLnN0YXJ0c3dpdGgoIjQxMSBObyBzdWNoIGdyb3VwIiksCisgICAgICAgICAgICAgICAgICAgICAgICBleGMucmVzcG9uc2UpCisKKyAgICBkZWYgdGVzdF9uZXduZXdzKHNlbGYpOgorICAgICAgICAjIE5FV05FV1MgY29tcC5sYW5nLnB5dGhvbiBbMjBdMTAwOTEzIDA4MjAwNAorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDksIDEzLCA4LCAyMCwgNCkKKyAgICAgICAgcmVzcCwgaWRzID0gc2VsZi5zZXJ2ZXIubmV3bmV3cygiY29tcC5sYW5nLnB5dGhvbiIsIGR0KQorICAgICAgICBleHBlY3RlZCA9ICgKKyAgICAgICAgICAgICIyMzAgbGlzdCBvZiBuZXdzYXJ0aWNsZXMgKE5OVFAgdnswfSkgIgorICAgICAgICAgICAgImNyZWF0ZWQgYWZ0ZXIgTW9uIFNlcCAxMyAwODoyMDowNCAyMDEwIGZvbGxvd3MiCisgICAgICAgICAgICApLmZvcm1hdChzZWxmLm5udHBfdmVyc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZHMsIFsKKyAgICAgICAgICAgICI8YTQ5MjlhNDAtNjMyOC00OTFhLWFhYWYtY2I3OWVkNzMwOWEyQHEyZzIwMDB2YmsuZ29vZ2xlZ3JvdXBzLmNvbT4iLAorICAgICAgICAgICAgIjxmMzBjMDQxOS1mNTQ5LTQyMTgtODQ4Zi1kN2QwMTMxZGE5MzFAeTNnMjAwMHZibS5nb29nbGVncm91cHMuY29tPiIsCisgICAgICAgICAgICBdKQorICAgICAgICAjIE5FV05FV1MgZnIuY29tcC5sYW5nLnB5dGhvbiBbMjBdMTAwOTEzIDA4MjAwNAorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lKDIwMTAsIDksIDEzLCA4LCAyMCwgNCkKKyAgICAgICAgcmVzcCwgaWRzID0gc2VsZi5zZXJ2ZXIubmV3bmV3cygiZnIuY29tcC5sYW5nLnB5dGhvbiIsIGR0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMzAgQW4gZW1wdHkgbGlzdCBvZiBuZXdzYXJ0aWNsZXMgZm9sbG93cyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWRzLCBbXSkKKworICAgIGRlZiBfY2hlY2tfYXJ0aWNsZV9ib2R5KHNlbGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWy0xXS5kZWNvZGUoJ3V0ZjgnKSwgIi0tIFNpZ25lZCBieSBBbmRyw6kuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1stMl0sIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1stM10sIGIiLkhlcmUgaXMgYSBkb3Qtc3RhcnRpbmcgbGluZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWy00XSwgYiJUaGlzIGlzIGp1c3QgYSB0ZXN0IGFydGljbGUuIikKKworICAgIGRlZiBfY2hlY2tfYXJ0aWNsZV9oZWFkKHNlbGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzBdLCBiJ0Zyb206ICJEZW1vIFVzZXIiIDxub2JvZHlAZXhhbXBsZS5uZXQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1szXSwgYiJNZXNzYWdlLUlEOiA8aS5hbS5hbi5hcnRpY2xlLnlvdS53aWxsLndhbnRAZXhhbXBsZS5jb20+IikKKworICAgIGRlZiBfY2hlY2tfYXJ0aWNsZV9kYXRhKHNlbGYsIGxpbmVzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA5KQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2hlYWQobGluZXNbOjRdKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2JvZHkobGluZXNbLTQ6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1s0XSwgYiIiKQorCisgICAgZGVmIHRlc3RfYXJ0aWNsZShzZWxmKToKKyAgICAgICAgIyBBUlRJQ0xFCisgICAgICAgIHJlc3AsIGluZm8gPSBzZWxmLnNlcnZlci5hcnRpY2xlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIwIDMwMDAyMzcgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzID0gaW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2RhdGEobGluZXMpCisgICAgICAgICMgQVJUSUNMRSBudW0KKyAgICAgICAgcmVzcCwgaW5mbyA9IHNlbGYuc2VydmVyLmFydGljbGUoMzAwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIwIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzID0gaW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2RhdGEobGluZXMpCisgICAgICAgICMgQVJUSUNMRSBpZAorICAgICAgICByZXNwLCBpbmZvID0gc2VsZi5zZXJ2ZXIuYXJ0aWNsZSgiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgIjIyMCAwIDw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBhcnRfbnVtLCBtZXNzYWdlX2lkLCBsaW5lcyA9IGluZm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnRfbnVtLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2VfaWQsICI8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5fY2hlY2tfYXJ0aWNsZV9kYXRhKGxpbmVzKQorICAgICAgICAjIE5vbi1leGlzdGVudCBpZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmFydGljbGUoIjxub24tZXhpc3RlbnRAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVzcG9uc2UsICI0MzAgTm8gU3VjaCBBcnRpY2xlIEZvdW5kIikKKworICAgIGRlZiB0ZXN0X2FydGljbGVfZmlsZShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgImZpbGUiIGFyZ3VtZW50CisgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgcmVzcCwgaW5mbyA9IHNlbGYuc2VydmVyLmFydGljbGUoZmlsZT1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMjAgMzAwMDIzNyA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgYXJ0X251bSwgbWVzc2FnZV9pZCwgbGluZXMgPSBpbmZvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgMzAwMDIzNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFtdKQorICAgICAgICBkYXRhID0gZi5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLnN0YXJ0c3dpdGgoCisgICAgICAgICAgICBiJ0Zyb206ICJEZW1vIFVzZXIiIDxub2JvZHlAZXhhbXBsZS5uZXQ+XHJcbicKKyAgICAgICAgICAgIGInU3ViamVjdDogSSBhbSBqdXN0IGEgdGVzdCBhcnRpY2xlXHJcbicKKyAgICAgICAgICAgICksIGFzY2lpKGRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aCgKKyAgICAgICAgICAgIGInVGhpcyBpcyBqdXN0IGEgdGVzdCBhcnRpY2xlLlxyXG4nCisgICAgICAgICAgICBiJy5IZXJlIGlzIGEgZG90LXN0YXJ0aW5nIGxpbmUuXHJcbicKKyAgICAgICAgICAgIGInXHJcbicKKyAgICAgICAgICAgIGInLS0gU2lnbmVkIGJ5IEFuZHJceGMzXHhhOS5cclxuJworICAgICAgICAgICAgKSwgYXNjaWkoZGF0YSkpCisKKyAgICBkZWYgdGVzdF9oZWFkKHNlbGYpOgorICAgICAgICAjIEhFQUQKKyAgICAgICAgcmVzcCwgaW5mbyA9IHNlbGYuc2VydmVyLmhlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMjEgMzAwMDIzNyA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgYXJ0X251bSwgbWVzc2FnZV9pZCwgbGluZXMgPSBpbmZvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgMzAwMDIzNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2FydGljbGVfaGVhZChsaW5lcykKKyAgICAgICAgIyBIRUFEIG51bQorICAgICAgICByZXNwLCBpbmZvID0gc2VsZi5zZXJ2ZXIuaGVhZCgzMDAwMjM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsICIyMjEgMzAwMDIzNCA8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgYXJ0X251bSwgbWVzc2FnZV9pZCwgbGluZXMgPSBpbmZvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgMzAwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlX2lkLCAiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuX2NoZWNrX2FydGljbGVfaGVhZChsaW5lcykKKyAgICAgICAgIyBIRUFEIGlkCisgICAgICAgIHJlc3AsIGluZm8gPSBzZWxmLnNlcnZlci5oZWFkKCI8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIxIDAgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzID0gaW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2hlYWQobGluZXMpCisgICAgICAgICMgTm9uLWV4aXN0ZW50IGlkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGVhZCgiPG5vbi1leGlzdGVudEBleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZXNwb25zZSwgIjQzMCBObyBTdWNoIEFydGljbGUgRm91bmQiKQorCisgICAgZGVmIHRlc3RfYm9keShzZWxmKToKKyAgICAgICAgIyBCT0RZCisgICAgICAgIHJlc3AsIGluZm8gPSBzZWxmLnNlcnZlci5ib2R5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIyIDMwMDAyMzcgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzID0gaW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2JvZHkobGluZXMpCisgICAgICAgICMgQk9EWSBudW0KKyAgICAgICAgcmVzcCwgaW5mbyA9IHNlbGYuc2VydmVyLmJvZHkoMzAwMDIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCAiMjIyIDMwMDAyMzQgPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIGFydF9udW0sIG1lc3NhZ2VfaWQsIGxpbmVzID0gaW5mbworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZV9pZCwgIjw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLl9jaGVja19hcnRpY2xlX2JvZHkobGluZXMpCisgICAgICAgICMgQk9EWSBpZAorICAgICAgICByZXNwLCBpbmZvID0gc2VsZi5zZXJ2ZXIuYm9keSgiPDQ1MjIzNDIzQGV4YW1wbGUuY29tPiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgIjIyMiAwIDw0NTIyMzQyM0BleGFtcGxlLmNvbT4iKQorICAgICAgICBhcnRfbnVtLCBtZXNzYWdlX2lkLCBsaW5lcyA9IGluZm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnRfbnVtLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2VfaWQsICI8NDUyMjM0MjNAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5fY2hlY2tfYXJ0aWNsZV9ib2R5KGxpbmVzKQorICAgICAgICAjIE5vbi1leGlzdGVudCBpZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmJvZHkoIjxub24tZXhpc3RlbnRAZXhhbXBsZS5jb20+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVzcG9uc2UsICI0MzAgTm8gU3VjaCBBcnRpY2xlIEZvdW5kIikKKworICAgIGRlZiBjaGVja19vdmVyX3hvdmVyX3Jlc3Aoc2VsZiwgcmVzcCwgb3ZlcnZpZXdzKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3Auc3RhcnRzd2l0aCgiMjI0ICIpLCByZXNwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdmVydmlld3MpLCAzKQorICAgICAgICBhcnRfbnVtLCBvdmVyID0gb3ZlcnZpZXdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJ0X251bSwgNTcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3ZlciwgeworICAgICAgICAgICAgImZyb20iOiAiRG91ZyBIZWxsbWFubiA8ZG91Zy5oZWxsbWFubi1SZTVKUUVlUXFlOEF2eHRpdU13eDN3QHB1YmxpYy5nbWFuZS5vcmc+IiwKKyAgICAgICAgICAgICJzdWJqZWN0IjogIlJlOiBBTk46IE5ldyBQbG9uZSBib29rIHdpdGggc3Ryb25nIFB5dGhvbiAoYW5kIFpvcGUpIHRoZW1lcyB0aHJvdWdob3V0IiwKKyAgICAgICAgICAgICJkYXRlIjogIlNhdCwgMTkgSnVuIDIwMTAgMTg6MDQ6MDggLTA0MDAiLAorICAgICAgICAgICAgIm1lc3NhZ2UtaWQiOiAiPDRGRDA1RjA1LUY5OEItNDREQy04MTExLUM2MDA5QzkyNUYwQ0BnbWFpbC5jb20+IiwKKyAgICAgICAgICAgICJyZWZlcmVuY2VzIjogIjxodmFsZjckb3J0JDFAZG91Z2guZ21hbmUub3JnPiIsCisgICAgICAgICAgICAiOmJ5dGVzIjogIjcxMDMiLAorICAgICAgICAgICAgIjpsaW5lcyI6ICIxNiIsCisgICAgICAgICAgICAieHJlZiI6ICJuZXdzLmdtYW5lLm9yZyBnbWFuZS5jb21wLnB5dGhvbi5hdXRob3JzOjU3IgorICAgICAgICAgICAgfSkKKyAgICAgICAgYXJ0X251bSwgb3ZlciA9IG92ZXJ2aWV3c1sxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92ZXJbInhyZWYiXSwgTm9uZSkKKyAgICAgICAgYXJ0X251bSwgb3ZlciA9IG92ZXJ2aWV3c1syXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92ZXJbInN1YmplY3QiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmU6IE1lc3NhZ2UgZCdlcnJldXIgaW5jb21wcsOpaGVuc2libGUgKHBhciBtb2kpIikKKworICAgIGRlZiB0ZXN0X3hvdmVyKHNlbGYpOgorICAgICAgICByZXNwLCBvdmVydmlld3MgPSBzZWxmLnNlcnZlci54b3Zlcig1NywgNTkpCisgICAgICAgIHNlbGYuY2hlY2tfb3Zlcl94b3Zlcl9yZXNwKHJlc3AsIG92ZXJ2aWV3cykKKworICAgIGRlZiB0ZXN0X292ZXIoc2VsZik6CisgICAgICAgICMgSW4gTk5UUCAidjEiLCB0aGlzIHdpbGwgZmFsbGJhY2sgb24gWE9WRVIKKyAgICAgICAgcmVzcCwgb3ZlcnZpZXdzID0gc2VsZi5zZXJ2ZXIub3ZlcigoNTcsIDU5KSkKKyAgICAgICAgc2VsZi5jaGVja19vdmVyX3hvdmVyX3Jlc3AocmVzcCwgb3ZlcnZpZXdzKQorCisgICAgc2FtcGxlX3Bvc3QgPSAoCisgICAgICAgIGInRnJvbTogIkRlbW8gVXNlciIgPG5vYm9keUBleGFtcGxlLm5ldD5cclxuJworICAgICAgICBiJ1N1YmplY3Q6IEkgYW0ganVzdCBhIHRlc3QgYXJ0aWNsZVxyXG4nCisgICAgICAgIGInQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04OyBmb3JtYXQ9Zmxvd2VkXHJcbicKKyAgICAgICAgYidNZXNzYWdlLUlEOiA8aS5hbS5hbi5hcnRpY2xlLnlvdS53aWxsLndhbnRAZXhhbXBsZS5jb20+XHJcbicKKyAgICAgICAgYidcclxuJworICAgICAgICBiJ1RoaXMgaXMganVzdCBhIHRlc3QgYXJ0aWNsZS5cclxuJworICAgICAgICBiJy5IZXJlIGlzIGEgZG90LXN0YXJ0aW5nIGxpbmUuXHJcbicKKyAgICAgICAgYidcclxuJworICAgICAgICBiJy0tIFNpZ25lZCBieSBBbmRyXHhjM1x4YTkuXHJcbicKKyAgICApCisKKyAgICBkZWYgX2NoZWNrX3Bvc3RlZF9ib2R5KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoZSByYXcgYm9keSBhcyByZWNlaXZlZCBieSB0aGUgc2VydmVyCisgICAgICAgIGxpbmVzID0gc2VsZi5oYW5kbGVyLnBvc3RlZF9ib2R5CisgICAgICAgICMgT25lIGFkZGl0aW9uYWwgbGluZSBmb3IgdGhlICIuIiB0ZXJtaW5hdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbLTFdLCBiJy5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1stMl0sIGInLS0gU2lnbmVkIGJ5IEFuZHJceGMzXHhhOS5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lc1stM10sIGInXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXNbLTRdLCBiJy4uSGVyZSBpcyBhIGRvdC1zdGFydGluZyBsaW5lLlxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzBdLCBiJ0Zyb206ICJEZW1vIFVzZXIiIDxub2JvZHlAZXhhbXBsZS5uZXQ+XHJcbicpCisKKyAgICBkZWYgX2NoZWNrX3Bvc3RfaWhhdmVfc3ViKHNlbGYsIGZ1bmMsICphcmdzLCBmaWxlX2ZhY3RvcnkpOgorICAgICAgICAjIEZpcnN0IHRoZSBwcmVwYXJlZCBwb3N0IHdpdGggQ1JMRiBlbmRpbmdzCisgICAgICAgIHBvc3QgPSBzZWxmLnNhbXBsZV9wb3N0CisgICAgICAgIGZ1bmNfYXJncyA9IGFyZ3MgKyAoZmlsZV9mYWN0b3J5KHBvc3QpLCkKKyAgICAgICAgc2VsZi5oYW5kbGVyLnBvc3RlZF9ib2R5ID0gTm9uZQorICAgICAgICByZXNwID0gZnVuYygqZnVuY19hcmdzKQorICAgICAgICBzZWxmLl9jaGVja19wb3N0ZWRfYm9keSgpCisgICAgICAgICMgVGhlbiB0aGUgc2FtZSBwb3N0IHdpdGggIm5vcm1hbCIgbGluZSBlbmRpbmdzIC0gdGhleSBzaG91bGQgYmUKKyAgICAgICAgIyBjb252ZXJ0ZWQgYnkgTk5UUC5wb3N0IGFuZCBOTlRQLmloYXZlLgorICAgICAgICBwb3N0ID0gc2VsZi5zYW1wbGVfcG9zdC5yZXBsYWNlKGIiXHJcbiIsIGIiXG4iKQorICAgICAgICBmdW5jX2FyZ3MgPSBhcmdzICsgKGZpbGVfZmFjdG9yeShwb3N0KSwpCisgICAgICAgIHNlbGYuaGFuZGxlci5wb3N0ZWRfYm9keSA9IE5vbmUKKyAgICAgICAgcmVzcCA9IGZ1bmMoKmZ1bmNfYXJncykKKyAgICAgICAgc2VsZi5fY2hlY2tfcG9zdGVkX2JvZHkoKQorICAgICAgICByZXR1cm4gcmVzcAorCisgICAgZGVmIGNoZWNrX3Bvc3RfaWhhdmUoc2VsZiwgZnVuYywgc3VjY2Vzc19yZXNwLCAqYXJncyk6CisgICAgICAgICMgV2l0aCBhIGJ5dGVzIG9iamVjdAorICAgICAgICByZXNwID0gc2VsZi5fY2hlY2tfcG9zdF9paGF2ZV9zdWIoZnVuYywgKmFyZ3MsIGZpbGVfZmFjdG9yeT1ieXRlcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBzdWNjZXNzX3Jlc3ApCisgICAgICAgICMgV2l0aCBhIGJ5dGVhcnJheSBvYmplY3QKKyAgICAgICAgcmVzcCA9IHNlbGYuX2NoZWNrX3Bvc3RfaWhhdmVfc3ViKGZ1bmMsICphcmdzLCBmaWxlX2ZhY3Rvcnk9Ynl0ZWFycmF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIHN1Y2Nlc3NfcmVzcCkKKyAgICAgICAgIyBXaXRoIGEgZmlsZSBvYmplY3QKKyAgICAgICAgcmVzcCA9IHNlbGYuX2NoZWNrX3Bvc3RfaWhhdmVfc3ViKGZ1bmMsICphcmdzLCBmaWxlX2ZhY3Rvcnk9aW8uQnl0ZXNJTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBzdWNjZXNzX3Jlc3ApCisgICAgICAgICMgV2l0aCBhbiBpdGVyYWJsZSBvZiB0ZXJtaW5hdGVkIGxpbmVzCisgICAgICAgIGRlZiBpdGVybGluZXMoYik6CisgICAgICAgICAgICByZXR1cm4gaXRlcihiLnNwbGl0bGluZXMoVHJ1ZSkpCisgICAgICAgIHJlc3AgPSBzZWxmLl9jaGVja19wb3N0X2loYXZlX3N1YihmdW5jLCAqYXJncywgZmlsZV9mYWN0b3J5PWl0ZXJsaW5lcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLCBzdWNjZXNzX3Jlc3ApCisgICAgICAgICMgV2l0aCBhbiBpdGVyYWJsZSBvZiBub24tdGVybWluYXRlZCBsaW5lcworICAgICAgICBkZWYgaXRlcmxpbmVzKGIpOgorICAgICAgICAgICAgcmV0dXJuIGl0ZXIoYi5zcGxpdGxpbmVzKEZhbHNlKSkKKyAgICAgICAgcmVzcCA9IHNlbGYuX2NoZWNrX3Bvc3RfaWhhdmVfc3ViKGZ1bmMsICphcmdzLCBmaWxlX2ZhY3Rvcnk9aXRlcmxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIHN1Y2Nlc3NfcmVzcCkKKworICAgIGRlZiB0ZXN0X3Bvc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcG9zdF9paGF2ZShzZWxmLnNlcnZlci5wb3N0LCAiMjQwIEFydGljbGUgcmVjZWl2ZWQgT0siKQorICAgICAgICBzZWxmLmhhbmRsZXIuYWxsb3dfcG9zdGluZyA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9zdChzZWxmLnNhbXBsZV9wb3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiNDQwIFBvc3Rpbmcgbm90IHBlcm1pdHRlZCIpCisKKyAgICBkZWYgdGVzdF9paGF2ZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19wb3N0X2loYXZlKHNlbGYuc2VydmVyLmloYXZlLCAiMjM1IEFydGljbGUgdHJhbnNmZXJyZWQgT0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxpLmFtLmFuLmFydGljbGUueW91LndpbGwud2FudEBleGFtcGxlLmNvbT4iKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKG5udHBsaWIuTk5UUFRlbXBvcmFyeUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYuc2VydmVyLmloYXZlKCI8YW5vdGhlci5tZXNzYWdlLmlkPiIsIHNlbGYuc2FtcGxlX3Bvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICI0MzUgQXJ0aWNsZSBub3Qgd2FudGVkIikKKworCitjbGFzcyBOTlRQdjFUZXN0cyhOTlRQdjF2MlRlc3RzTWl4aW4sIE1vY2tlZE5OVFBUZXN0c01peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgYW4gTk5UUCB2MSBzZXJ2ZXIgKG5vIGNhcGFiaWxpdGllcykuIiIiCisKKyAgICBubnRwX3ZlcnNpb24gPSAxCisgICAgaGFuZGxlcl9jbGFzcyA9IE5OVFB2MUhhbmRsZXIKKworICAgIGRlZiB0ZXN0X2NhcHMoc2VsZik6CisgICAgICAgIGNhcHMgPSBzZWxmLnNlcnZlci5nZXRjYXBhYmlsaXRpZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhcHMsIHt9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLm5udHBfdmVyc2lvbiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5ubnRwX2ltcGxlbWVudGF0aW9uLCBOb25lKQorCisKK2NsYXNzIE5OVFB2MlRlc3RzKE5OVFB2MXYyVGVzdHNNaXhpbiwgTW9ja2VkTk5UUFRlc3RzTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyBhbiBOTlRQIHYyIHNlcnZlciAod2l0aCBjYXBhYmlsaXRpZXMpLiIiIgorCisgICAgbm50cF92ZXJzaW9uID0gMgorICAgIGhhbmRsZXJfY2xhc3MgPSBOTlRQdjJIYW5kbGVyCisKKyAgICBkZWYgdGVzdF9jYXBzKHNlbGYpOgorICAgICAgICBjYXBzID0gc2VsZi5zZXJ2ZXIuZ2V0Y2FwYWJpbGl0aWVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXBzLCB7CisgICAgICAgICAgICAnVkVSU0lPTic6IFsnMicsICczJ10sCisgICAgICAgICAgICAnSU1QTEVNRU5UQVRJT04nOiBbJ0lOTicsICcyLjUuMSddLAorICAgICAgICAgICAgJ0FVVEhJTkZPJzogWydVU0VSJ10sCisgICAgICAgICAgICAnSERSJzogW10sCisgICAgICAgICAgICAnTElTVCc6IFsnQUNUSVZFJywgJ0FDVElWRS5USU1FUycsICdESVNUUklCLlBBVFMnLAorICAgICAgICAgICAgICAgICAgICAgJ0hFQURFUlMnLCAnTkVXU0dST1VQUycsICdPVkVSVklFVy5GTVQnXSwKKyAgICAgICAgICAgICdPVkVSJzogW10sCisgICAgICAgICAgICAnUE9TVCc6IFtdLAorICAgICAgICAgICAgJ1JFQURFUic6IFtdLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5ubnRwX3ZlcnNpb24sIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIubm50cF9pbXBsZW1lbnRhdGlvbiwgJ0lOTiAyLjUuMScpCisKKworY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2RlY29kZV9oZWFkZXIoc2VsZik6CisgICAgICAgIGRlZiBnaXZlcyhhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm50cGxpYi5kZWNvZGVfaGVhZGVyKGEpLCBiKQorICAgICAgICBnaXZlcygiIiAsICIiKQorICAgICAgICBnaXZlcygiYSBwbGFpbiBoZWFkZXIiLCAiYSBwbGFpbiBoZWFkZXIiKQorICAgICAgICBnaXZlcygiIHdpdGggZXh0cmEgIHNwYWNlcyAiLCAiIHdpdGggZXh0cmEgIHNwYWNlcyAiKQorICAgICAgICBnaXZlcygiPT9JU08tODg1OS0xNT9RP0Q9RTlidXRlcl9lbl9QeXRob24/PSIsICJEw6lidXRlciBlbiBQeXRob24iKQorICAgICAgICBnaXZlcygiPT91dGYtOD9xP1JlPTNBXz01QnNxbGl0ZT01RF9wcm9ibD1DMz1BOG1lX2F2ZWNfT1JERVJfQllfc3VyX2Rlc19jaGE/PSIKKyAgICAgICAgICAgICAgIiA9P3V0Zi04P3E/PUMzPUFFbmVzX2RlX2NhcmFjdD1DMz1BOHJlc19hY2NlbnR1PUMzPUE5ZXM/PSIsCisgICAgICAgICAgICAgICJSZTogW3NxbGl0ZV0gcHJvYmzDqG1lIGF2ZWMgT1JERVIgQlkgc3VyIGRlcyBjaGHDrm5lcyBkZSBjYXJhY3TDqHJlcyBhY2NlbnR1w6llcyIpCisgICAgICAgIGdpdmVzKCJSZTogPT9VVEYtOD9CP2NISnZZbXpEcUcxbElHUmxJRzFoZEhKcFkyVT0/PSIsCisgICAgICAgICAgICAgICJSZTogcHJvYmzDqG1lIGRlIG1hdHJpY2UiKQorICAgICAgICAjIEEgbmF0aXZlbHkgdXRmLTggaGVhZGVyIChmb3VuZCBpbiB0aGUgcmVhbCB3b3JsZCEpCisgICAgICAgIGdpdmVzKCJSZTogTWVzc2FnZSBkJ2VycmV1ciBpbmNvbXByw6loZW5zaWJsZSAocGFyIG1vaSkiLAorICAgICAgICAgICAgICAiUmU6IE1lc3NhZ2UgZCdlcnJldXIgaW5jb21wcsOpaGVuc2libGUgKHBhciBtb2kpIikKKworICAgIGRlZiB0ZXN0X3BhcnNlX292ZXJ2aWV3X2ZtdChzZWxmKToKKyAgICAgICAgIyBUaGUgbWluaW1hbCAoZGVmYXVsdCkgcmVzcG9uc2UKKyAgICAgICAgbGluZXMgPSBbIlN1YmplY3Q6IiwgIkZyb206IiwgIkRhdGU6IiwgIk1lc3NhZ2UtSUQ6IiwKKyAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZXM6IiwgIjpieXRlcyIsICI6bGluZXMiXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5udHBsaWIuX3BhcnNlX292ZXJ2aWV3X2ZtdChsaW5lcyksCisgICAgICAgICAgICBbInN1YmplY3QiLCAiZnJvbSIsICJkYXRlIiwgIm1lc3NhZ2UtaWQiLCAicmVmZXJlbmNlcyIsCisgICAgICAgICAgICAgIjpieXRlcyIsICI6bGluZXMiXSkKKyAgICAgICAgIyBUaGUgbWluaW1hbCByZXNwb25zZSB1c2luZyBhbHRlcm5hdGl2ZSBuYW1lcworICAgICAgICBsaW5lcyA9IFsiU3ViamVjdDoiLCAiRnJvbToiLCAiRGF0ZToiLCAiTWVzc2FnZS1JRDoiLAorICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlczoiLCAiQnl0ZXM6IiwgIkxpbmVzOiJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm50cGxpYi5fcGFyc2Vfb3ZlcnZpZXdfZm10KGxpbmVzKSwKKyAgICAgICAgICAgIFsic3ViamVjdCIsICJmcm9tIiwgImRhdGUiLCAibWVzc2FnZS1pZCIsICJyZWZlcmVuY2VzIiwKKyAgICAgICAgICAgICAiOmJ5dGVzIiwgIjpsaW5lcyJdKQorICAgICAgICAjIFZhcmlhdGlvbnMgaW4gY2FzaW5nCisgICAgICAgIGxpbmVzID0gWyJzdWJqZWN0OiIsICJGUk9NOiIsICJEYVRlOiIsICJtZXNzYWdlLUlEOiIsCisgICAgICAgICAgICAgICAgICJSZWZlcmVuY2VzOiIsICJCWVRFUzoiLCAiTGluZXM6Il0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl9wYXJzZV9vdmVydmlld19mbXQobGluZXMpLAorICAgICAgICAgICAgWyJzdWJqZWN0IiwgImZyb20iLCAiZGF0ZSIsICJtZXNzYWdlLWlkIiwgInJlZmVyZW5jZXMiLAorICAgICAgICAgICAgICI6Ynl0ZXMiLCAiOmxpbmVzIl0pCisgICAgICAgICMgRmlyc3QgZXhhbXBsZSBmcm9tIFJGQyAzOTc3CisgICAgICAgIGxpbmVzID0gWyJTdWJqZWN0OiIsICJGcm9tOiIsICJEYXRlOiIsICJNZXNzYWdlLUlEOiIsCisgICAgICAgICAgICAgICAgICJSZWZlcmVuY2VzOiIsICI6Ynl0ZXMiLCAiOmxpbmVzIiwgIlhyZWY6ZnVsbCIsCisgICAgICAgICAgICAgICAgICJEaXN0cmlidXRpb246ZnVsbCJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm50cGxpYi5fcGFyc2Vfb3ZlcnZpZXdfZm10KGxpbmVzKSwKKyAgICAgICAgICAgIFsic3ViamVjdCIsICJmcm9tIiwgImRhdGUiLCAibWVzc2FnZS1pZCIsICJyZWZlcmVuY2VzIiwKKyAgICAgICAgICAgICAiOmJ5dGVzIiwgIjpsaW5lcyIsICJ4cmVmIiwgImRpc3RyaWJ1dGlvbiJdKQorICAgICAgICAjIFNlY29uZCBleGFtcGxlIGZyb20gUkZDIDM5NzcKKyAgICAgICAgbGluZXMgPSBbIlN1YmplY3Q6IiwgIkZyb206IiwgIkRhdGU6IiwgIk1lc3NhZ2UtSUQ6IiwKKyAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZXM6IiwgIkJ5dGVzOiIsICJMaW5lczoiLCAiWHJlZjpGVUxMIiwKKyAgICAgICAgICAgICAgICAgIkRpc3RyaWJ1dGlvbjpGVUxMIl0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl9wYXJzZV9vdmVydmlld19mbXQobGluZXMpLAorICAgICAgICAgICAgWyJzdWJqZWN0IiwgImZyb20iLCAiZGF0ZSIsICJtZXNzYWdlLWlkIiwgInJlZmVyZW5jZXMiLAorICAgICAgICAgICAgICI6Ynl0ZXMiLCAiOmxpbmVzIiwgInhyZWYiLCAiZGlzdHJpYnV0aW9uIl0pCisgICAgICAgICMgQSBjbGFzc2ljIHJlc3BvbnNlIGZyb20gSU5OCisgICAgICAgIGxpbmVzID0gWyJTdWJqZWN0OiIsICJGcm9tOiIsICJEYXRlOiIsICJNZXNzYWdlLUlEOiIsCisgICAgICAgICAgICAgICAgICJSZWZlcmVuY2VzOiIsICJCeXRlczoiLCAiTGluZXM6IiwgIlhyZWY6ZnVsbCJdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm50cGxpYi5fcGFyc2Vfb3ZlcnZpZXdfZm10KGxpbmVzKSwKKyAgICAgICAgICAgIFsic3ViamVjdCIsICJmcm9tIiwgImRhdGUiLCAibWVzc2FnZS1pZCIsICJyZWZlcmVuY2VzIiwKKyAgICAgICAgICAgICAiOmJ5dGVzIiwgIjpsaW5lcyIsICJ4cmVmIl0pCisKKyAgICBkZWYgdGVzdF9wYXJzZV9vdmVydmlldyhzZWxmKToKKyAgICAgICAgZm10ID0gbm50cGxpYi5fREVGQVVMVF9PVkVSVklFV19GTVQgKyBbInhyZWYiXQorICAgICAgICAjIEZpcnN0IGV4YW1wbGUgZnJvbSBSRkMgMzk3NworICAgICAgICBsaW5lcyA9IFsKKyAgICAgICAgICAgICczMDAwMjM0XHRJIGFtIGp1c3QgYSB0ZXN0IGFydGljbGVcdCJEZW1vIFVzZXIiICcKKyAgICAgICAgICAgICc8bm9ib2R5QGV4YW1wbGUuY29tPlx0NiBPY3QgMTk5OCAwNDozODo0MCAtMDUwMFx0JworICAgICAgICAgICAgJzw0NTIyMzQyM0BleGFtcGxlLmNvbT5cdDw0NTQ1NEBleGFtcGxlLm5ldD5cdDEyMzRcdCcKKyAgICAgICAgICAgICcxN1x0WHJlZjogbmV3cy5leGFtcGxlLmNvbSBtaXNjLnRlc3Q6MzAwMDM2MycsCisgICAgICAgIF0KKyAgICAgICAgb3ZlcnZpZXcgPSBubnRwbGliLl9wYXJzZV9vdmVydmlldyhsaW5lcywgZm10KQorICAgICAgICAoYXJ0X251bSwgZmllbGRzKSwgPSBvdmVydmlldworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFydF9udW0sIDMwMDAyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmllbGRzLCB7CisgICAgICAgICAgICAnc3ViamVjdCc6ICdJIGFtIGp1c3QgYSB0ZXN0IGFydGljbGUnLAorICAgICAgICAgICAgJ2Zyb20nOiAnIkRlbW8gVXNlciIgPG5vYm9keUBleGFtcGxlLmNvbT4nLAorICAgICAgICAgICAgJ2RhdGUnOiAnNiBPY3QgMTk5OCAwNDozODo0MCAtMDUwMCcsCisgICAgICAgICAgICAnbWVzc2FnZS1pZCc6ICc8NDUyMjM0MjNAZXhhbXBsZS5jb20+JywKKyAgICAgICAgICAgICdyZWZlcmVuY2VzJzogJzw0NTQ1NEBleGFtcGxlLm5ldD4nLAorICAgICAgICAgICAgJzpieXRlcyc6ICcxMjM0JywKKyAgICAgICAgICAgICc6bGluZXMnOiAnMTcnLAorICAgICAgICAgICAgJ3hyZWYnOiAnbmV3cy5leGFtcGxlLmNvbSBtaXNjLnRlc3Q6MzAwMDM2MycsCisgICAgICAgIH0pCisgICAgICAgICMgU2Vjb25kIGV4YW1wbGU7IGhlcmUgdGhlICJYcmVmIiBmaWVsZCBpcyB0b3RhbGx5IGFic2VudCAoaW5jbHVkaW5nCisgICAgICAgICMgdGhlIGhlYWRlciBuYW1lKSBhbmQgY29tZXMgb3V0IGFzIE5vbmUKKyAgICAgICAgbGluZXMgPSBbCisgICAgICAgICAgICAnMzAwMDIzNFx0SSBhbSBqdXN0IGEgdGVzdCBhcnRpY2xlXHQiRGVtbyBVc2VyIiAnCisgICAgICAgICAgICAnPG5vYm9keUBleGFtcGxlLmNvbT5cdDYgT2N0IDE5OTggMDQ6Mzg6NDAgLTA1MDBcdCcKKyAgICAgICAgICAgICc8NDUyMjM0MjNAZXhhbXBsZS5jb20+XHQ8NDU0NTRAZXhhbXBsZS5uZXQ+XHQxMjM0XHQnCisgICAgICAgICAgICAnMTdcdFx0JywKKyAgICAgICAgXQorICAgICAgICBvdmVydmlldyA9IG5udHBsaWIuX3BhcnNlX292ZXJ2aWV3KGxpbmVzLCBmbXQpCisgICAgICAgIChhcnRfbnVtLCBmaWVsZHMpLCA9IG92ZXJ2aWV3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmllbGRzWyd4cmVmJ10sIE5vbmUpCisgICAgICAgICMgVGhpcmQgZXhhbXBsZTsgdGhlICJYcmVmIiBpcyBhbiBlbXB0eSBzdHJpbmcsIHdoaWxlICJyZWZlcmVuY2VzIgorICAgICAgICAjIGlzIGEgc2luZ2xlIHNwYWNlLgorICAgICAgICBsaW5lcyA9IFsKKyAgICAgICAgICAgICczMDAwMjM0XHRJIGFtIGp1c3QgYSB0ZXN0IGFydGljbGVcdCJEZW1vIFVzZXIiICcKKyAgICAgICAgICAgICc8bm9ib2R5QGV4YW1wbGUuY29tPlx0NiBPY3QgMTk5OCAwNDozODo0MCAtMDUwMFx0JworICAgICAgICAgICAgJzw0NTIyMzQyM0BleGFtcGxlLmNvbT5cdCBcdDEyMzRcdCcKKyAgICAgICAgICAgICcxN1x0WHJlZjogXHQnLAorICAgICAgICBdCisgICAgICAgIG92ZXJ2aWV3ID0gbm50cGxpYi5fcGFyc2Vfb3ZlcnZpZXcobGluZXMsIGZtdCkKKyAgICAgICAgKGFydF9udW0sIGZpZWxkcyksID0gb3ZlcnZpZXcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWVsZHNbJ3JlZmVyZW5jZXMnXSwgJyAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpZWxkc1sneHJlZiddLCAnJykKKworICAgIGRlZiB0ZXN0X3BhcnNlX2RhdGV0aW1lKHNlbGYpOgorICAgICAgICBkZWYgZ2l2ZXMoYSwgYiwgKmMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl9wYXJzZV9kYXRldGltZShhLCBiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZGF0ZXRpbWUoKmMpKQorICAgICAgICAjIE91dHB1dCBvZiBEQVRFIGNvbW1hbmQKKyAgICAgICAgZ2l2ZXMoIjE5OTkwNjIzMTM1NjI0IiwgTm9uZSwgMTk5OSwgNiwgMjMsIDEzLCA1NiwgMjQpCisgICAgICAgICMgVmFyaWF0aW9ucworICAgICAgICBnaXZlcygiMTk5OTA2MjMiLCAiMTM1NjI0IiwgMTk5OSwgNiwgMjMsIDEzLCA1NiwgMjQpCisgICAgICAgIGdpdmVzKCI5OTA2MjMiLCAiMTM1NjI0IiwgMTk5OSwgNiwgMjMsIDEzLCA1NiwgMjQpCisgICAgICAgIGdpdmVzKCIwOTA2MjMiLCAiMTM1NjI0IiwgMjAwOSwgNiwgMjMsIDEzLCA1NiwgMjQpCisKKyAgICBkZWYgdGVzdF91bnBhcnNlX2RhdGV0aW1lKHNlbGYpOgorICAgICAgICAjIFRlc3Qgbm9uLWxlZ2FjeSBtb2RlCisgICAgICAgICMgMSkgd2l0aCBhIGRhdGV0aW1lCisgICAgICAgIGRlZiBnaXZlcyh5LCBNLCBkLCBoLCBtLCBzLCBkYXRlX3N0ciwgdGltZV9zdHIpOgorICAgICAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSh5LCBNLCBkLCBoLCBtLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl91bnBhcnNlX2RhdGV0aW1lKGR0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5udHBsaWIuX3VucGFyc2VfZGF0ZXRpbWUoZHQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgIGdpdmVzKDE5OTksIDYsIDIzLCAxMywgNTYsIDI0LCAiMTk5OTA2MjMiLCAiMTM1NjI0IikKKyAgICAgICAgZ2l2ZXMoMjAwMCwgNiwgMjMsIDEzLCA1NiwgMjQsICIyMDAwMDYyMyIsICIxMzU2MjQiKQorICAgICAgICBnaXZlcygyMDEwLCA2LCA1LCAxLCAyLCAzLCAiMjAxMDA2MDUiLCAiMDEwMjAzIikKKyAgICAgICAgIyAyKSB3aXRoIGEgZGF0ZQorICAgICAgICBkZWYgZ2l2ZXMoeSwgTSwgZCwgZGF0ZV9zdHIsIHRpbWVfc3RyKToKKyAgICAgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZSh5LCBNLCBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl91bnBhcnNlX2RhdGV0aW1lKGR0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5udHBsaWIuX3VucGFyc2VfZGF0ZXRpbWUoZHQsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgIGdpdmVzKDE5OTksIDYsIDIzLCAiMTk5OTA2MjMiLCAiMDAwMDAwIikKKyAgICAgICAgZ2l2ZXMoMjAwMCwgNiwgMjMsICIyMDAwMDYyMyIsICIwMDAwMDAiKQorICAgICAgICBnaXZlcygyMDEwLCA2LCA1LCAiMjAxMDA2MDUiLCAiMDAwMDAwIikKKworICAgIGRlZiB0ZXN0X3VucGFyc2VfZGF0ZXRpbWVfbGVnYWN5KHNlbGYpOgorICAgICAgICAjIFRlc3QgbGVnYWN5IG1vZGUgKFJGQyA5NzcpCisgICAgICAgICMgMSkgd2l0aCBhIGRhdGV0aW1lCisgICAgICAgIGRlZiBnaXZlcyh5LCBNLCBkLCBoLCBtLCBzLCBkYXRlX3N0ciwgdGltZV9zdHIpOgorICAgICAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZSh5LCBNLCBkLCBoLCBtLCBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl91bnBhcnNlX2RhdGV0aW1lKGR0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgIGdpdmVzKDE5OTksIDYsIDIzLCAxMywgNTYsIDI0LCAiOTkwNjIzIiwgIjEzNTYyNCIpCisgICAgICAgIGdpdmVzKDIwMDAsIDYsIDIzLCAxMywgNTYsIDI0LCAiMDAwNjIzIiwgIjEzNTYyNCIpCisgICAgICAgIGdpdmVzKDIwMTAsIDYsIDUsIDEsIDIsIDMsICIxMDA2MDUiLCAiMDEwMjAzIikKKyAgICAgICAgIyAyKSB3aXRoIGEgZGF0ZQorICAgICAgICBkZWYgZ2l2ZXMoeSwgTSwgZCwgZGF0ZV9zdHIsIHRpbWVfc3RyKToKKyAgICAgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZSh5LCBNLCBkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChubnRwbGliLl91bnBhcnNlX2RhdGV0aW1lKGR0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVfc3RyLCB0aW1lX3N0cikpCisgICAgICAgIGdpdmVzKDE5OTksIDYsIDIzLCAiOTkwNjIzIiwgIjAwMDAwMCIpCisgICAgICAgIGdpdmVzKDIwMDAsIDYsIDIzLCAiMDAwNjIzIiwgIjAwMDAwMCIpCisgICAgICAgIGdpdmVzKDIwMTAsIDYsIDUsICIxMDA2MDUiLCAiMDAwMDAwIikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdHMgPSBbTWlzY1Rlc3RzLCBOTlRQdjFUZXN0cywgTk5UUHYyVGVzdHMsIE5ldHdvcmtlZE5OVFBUZXN0c10KKyAgICBpZiBfaGF2ZV9zc2w6CisgICAgICAgIHRlc3RzLmFwcGVuZChOZXR3b3JrZWROTlRQX1NTTFRlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0cykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggYjY3NDM3MS4uZTNlMjU2MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIG9wZW5fdXJscmVzb3VyY2UKIGltcG9ydCB1bml0dGVzdAogCitmcm9tIGh0dHAuY2xpZW50IGltcG9ydCBIVFRQRXhjZXB0aW9uCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGZyb20gdW5pY29kZWRhdGEgaW1wb3J0IG5vcm1hbGl6ZSwgdW5pZGF0YV92ZXJzaW9uCkBAIC04LDEyICs5LDkgQEAKIFRFU1REQVRBRklMRSA9ICJOb3JtYWxpemF0aW9uVGVzdC50eHQiCiBURVNUREFUQVVSTCA9ICJodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8iICsgdW5pZGF0YV92ZXJzaW9uICsgIi91Y2QvIiArIFRFU1REQVRBRklMRQogCi1pZiBvcy5wYXRoLmV4aXN0cyhURVNUREFUQUZJTEUpOgotICAgIGYgPSBvcGVuKFRFU1REQVRBRklMRSwgZW5jb2Rpbmc9J3V0Zi04JykKLSAgICBsID0gZi5yZWFkbGluZSgpCi0gICAgZi5jbG9zZSgpCi0gICAgaWYgbm90IHVuaWRhdGFfdmVyc2lvbiBpbiBsOgotICAgICAgICBvcy51bmxpbmsoVEVTVERBVEFGSUxFKQorZGVmIGNoZWNrX3ZlcnNpb24odGVzdGZpbGUpOgorICAgIGhkciA9IHRlc3RmaWxlLnJlYWRsaW5lKCkKKyAgICByZXR1cm4gdW5pZGF0YV92ZXJzaW9uIGluIGhkcgogCiBjbGFzcyBSYW5nZUVycm9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMzksMTMgKzM3LDE2IEBACiAKIGNsYXNzIE5vcm1hbGl6YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgorICAgICAgICBwYXJ0ID0gTm9uZQogICAgICAgICBwYXJ0MV9kYXRhID0ge30KICAgICAgICAgIyBIaXQgdGhlIGV4Y2VwdGlvbiBlYXJseQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIHRlc3RkYXRhID0gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgZW5jb2Rpbmc9InV0Zi04IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjaz1jaGVja192ZXJzaW9uKQorICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIgKyBURVNUREFUQVVSTCkKLSAgICAgICAgZm9yIGxpbmUgaW4gb3Blbl91cmxyZXNvdXJjZShURVNUREFUQVVSTCwgZW5jb2Rpbmc9InV0Zi04Iik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0ZGF0YS5jbG9zZSkKKyAgICAgICAgZm9yIGxpbmUgaW4gdGVzdGRhdGE6CiAgICAgICAgICAgICBpZiAnIycgaW4gbGluZToKICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgnIycpWzBdCiAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weSBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CmluZGV4IDNkMTg1MjcuLjY0NjQ5NTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbnRwYXRoLnB5CkBAIC0xLDcgKzEsOSBAQAogaW1wb3J0IG50cGF0aAogaW1wb3J0IG9zCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgVGVzdEZhaWxlZAotaW1wb3J0IHRlc3Quc3VwcG9ydCBhcyBzdXBwb3J0CitpbXBvcnQgc3lzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVGVzdEZhaWxlZAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCB0ZXN0X2dlbmVyaWNwYXRoCitmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAogCkBAIC0yMzgsOSArMjQwLDI3IEBACiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoIi9hL2IiLCAiL2EvYiIpJywgJy4nKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJjOi9mb28iLCAiQzovRk9PIiknLCAnLicpCiAKKyAgICBkZWYgdGVzdF9zYW1lb3BlbmZpbGUoc2VsZik6CisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHRmMSwgVGVtcG9yYXJ5RmlsZSgpIGFzIHRmMjoKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSBzYW1lIGZpbGUgaXMgcmVhbGx5IHRoZSBzYW1lCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLnNhbWVvcGVuZmlsZSh0ZjEuZmlsZW5vKCksIHRmMS5maWxlbm8oKSkpCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSBkaWZmZXJlbnQgZmlsZXMgYXJlIHJlYWxseSBkaWZmZXJlbnQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobnRwYXRoLnNhbWVvcGVuZmlsZSh0ZjEuZmlsZW5vKCksIHRmMi5maWxlbm8oKSkpCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSBpbnZhbGlkIHZhbHVlcyBkb24ndCBjYXVzZSBpc3N1ZXMgb24gd2luMzIKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgICMgSW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzIHNob3VsZG4ndCBkaXNwbGF5IGFzc2VydAorICAgICAgICAgICAgICAgICAgICAjIGRpYWxvZ3MgKCM0ODA0KQorICAgICAgICAgICAgICAgICAgICBudHBhdGguc2FtZW9wZW5maWxlKC0xLCAtMSkKKworCitjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0KToKKyAgICBwYXRobW9kdWxlID0gbnRwYXRoCisgICAgYXR0cmlidXRlcyA9IFsncmVscGF0aCcsICdzcGxpdHVuYyddCisKIAogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3ROdHBhdGgpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdE50cGF0aCwgTnRDb21tb25UZXN0KQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X251bWVyaWNfdG93ZXIucHkgYi9MaWIvdGVzdC90ZXN0X251bWVyaWNfdG93ZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVmM2Q0YwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfbnVtZXJpY190b3dlci5weQpAQCAtMCwwICsxLDIwNiBAQAorIyB0ZXN0IGludGVyYWN0aW9ucyBiZXR3ZWVuIGludCwgZmxvYXQsIERlY2ltYWwgYW5kIEZyYWN0aW9uCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJhbmRvbQoraW1wb3J0IG1hdGgKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcGVyYXRvcgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKworIyBDb25zdGFudHMgcmVsYXRlZCB0byB0aGUgaGFzaCBpbXBsZW1lbnRhdGlvbjsgIGhhc2goeCkgaXMgYmFzZWQKKyMgb24gdGhlIHJlZHVjdGlvbiBvZiB4IG1vZHVsbyB0aGUgcHJpbWUgX1B5SEFTSF9NT0RVTFVTLgorX1B5SEFTSF9NT0RVTFVTID0gc3lzLmhhc2hfaW5mby5tb2R1bHVzCitfUHlIQVNIX0lORiA9IHN5cy5oYXNoX2luZm8uaW5mCisKK2NsYXNzIEhhc2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2tfZXF1YWxfaGFzaChzZWxmLCB4LCB5KToKKyAgICAgICAgIyBjaGVjayBib3RoIHRoYXQgeCBhbmQgeSBhcmUgZXF1YWwgYW5kIHRoYXQgdGhlaXIgaGFzaGVzIGFyZSBlcXVhbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goeCksIGhhc2goeSksCisgICAgICAgICAgICAgICAgICAgICAgICAgImdvdCBkaWZmZXJlbnQgaGFzaGVzIGZvciB7IXJ9IGFuZCB7IXJ9Ii5mb3JtYXQoeCwgeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKworICAgIGRlZiB0ZXN0X2Jvb2xzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goRmFsc2UsIDApCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChUcnVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcnMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBlcXVhbCB2YWx1ZXMgaGFzaCBlcXVhbAorCisgICAgICAgICMgZXhhY3QgaW50ZWdlcnMKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoLTEwMDAsIDEwMDApOgorICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKGksIGZsb2F0KGkpKQorICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKGksIEQoaSkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goaSwgRihpKSkKKworICAgICAgICAjIHRoZSBjdXJyZW50IGhhc2ggaXMgYmFzZWQgb24gcmVkdWN0aW9uIG1vZHVsbyAyKipuLTEgZm9yIHNvbWUKKyAgICAgICAgIyBuLCBzbyBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gbnVtYmVycyBvZiB0aGUgZm9ybSAyKipuIGFuZCAyKipuLTEuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBuID0gMioqaSAtIDEKKyAgICAgICAgICAgIGlmIG4gPT0gaW50KGZsb2F0KG4pKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2gobiwgZmxvYXQobikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKC1uLCAtZmxvYXQobikpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2gobiwgRChuKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChuLCBGKG4pKQorICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKC1uLCBEKC1uKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaCgtbiwgRigtbikpCisKKyAgICAgICAgICAgIG4gPSAyKippCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2gobiwgZmxvYXQobikpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goLW4sIC1mbG9hdChuKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChuLCBEKG4pKQorICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKG4sIEYobikpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goLW4sIEQoLW4pKQorICAgICAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKC1uLCBGKC1uKSkKKworICAgICAgICAjIHJhbmRvbSB2YWx1ZXMgb2YgdmFyaW91cyBzaXplcworICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIGUgPSByYW5kb20ucmFuZHJhbmdlKDMwMCkKKyAgICAgICAgICAgIG4gPSByYW5kb20ucmFuZHJhbmdlKC0xMCoqZSwgMTAqKmUpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2gobiwgRChuKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChuLCBGKG4pKQorICAgICAgICAgICAgaWYgbiA9PSBpbnQoZmxvYXQobikpOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChuLCBmbG9hdChuKSkKKworICAgIGRlZiB0ZXN0X2JpbmFyeV9mbG9hdHMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBmbG9hdHMgaGFzaCBlcXVhbCB0byBjb3JyZXNwb25kaW5nIEZyYWN0aW9ucyBhbmQgRGVjaW1hbHMKKworICAgICAgICAjIGZsb2F0cyB0aGF0IGFyZSBkaXN0aW5jdCBidXQgbnVtZXJpY2FsbHkgZXF1YWwgc2hvdWxkIGhhc2ggdGhlIHNhbWUKKyAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKDAuMCwgLTAuMCkKKworICAgICAgICAjIHplcm9zCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaCgwLjAsIEQoMCkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaCgtMC4wLCBEKDApKQorICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goLTAuMCwgRCgnLTAuMCcpKQorICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goMC4wLCBGKDApKQorCisgICAgICAgICMgaW5maW5pdGllcyBhbmQgbmFucworICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goZmxvYXQoJ2luZicpLCBEKCdpbmYnKSkKKyAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKGZsb2F0KCctaW5mJyksIEQoJy1pbmYnKSkKKworICAgICAgICBmb3IgXyBpbiByYW5nZSgxMDAwKToKKyAgICAgICAgICAgIHggPSByYW5kb20ucmFuZG9tKCkgKiBtYXRoLmV4cChyYW5kb20ucmFuZG9tKCkqMjAwLjAgLSAxMDAuMCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaCh4LCBELmZyb21fZmxvYXQoeCkpCisgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goeCwgRi5mcm9tX2Zsb2F0KHgpKQorCisgICAgZGVmIHRlc3RfY29tcGxleChzZWxmKToKKyAgICAgICAgIyBjb21wbGV4IG51bWJlcnMgd2l0aCB6ZXJvIGltYWdpbmFyeSBwYXJ0IHNob3VsZCBoYXNoIGVxdWFsIHRvCisgICAgICAgICMgdGhlIGNvcnJlc3BvbmRpbmcgZmxvYXQKKworICAgICAgICB0ZXN0X3ZhbHVlcyA9IFswLjAsIC0wLjAsIDEuMCwgLTEuMCwgMC40MDYyNSwgLTUxMzYuNSwKKyAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQoJ2luZicpLCBmbG9hdCgnLWluZicpXQorCisgICAgICAgIGZvciB6ZXJvIGluIC0wLjAsIDAuMDoKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2godmFsdWUsIGNvbXBsZXgodmFsdWUsIHplcm8pKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCBEZWNpbWFsIGluc3RhbmNlcyB0aGF0IGhhdmUgZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucworICAgICAgICAjIGJ1dCBlcXVhbCB2YWx1ZXMgZ2l2ZSB0aGUgc2FtZSBoYXNoCisgICAgICAgIHplcm9zID0gWycwJywgJy0wJywgJzAuMCcsICctMC4wZTEwJywgJzAwMGUtMTAnXQorICAgICAgICBmb3IgemVybyBpbiB6ZXJvczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKHplcm8pLCBEKDApKQorCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCcxLjAwJyksIEQoMSkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCcxLjAwMDAwJyksIEQoMSkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCctMS4wMCcpLCBEKC0xKSkKKyAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKEQoJy0xLjAwMDAwJyksIEQoLTEpKQorICAgICAgICBzZWxmLmNoZWNrX2VxdWFsX2hhc2goRCgnMTIzZTInKSwgRCgxMjMwMCkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCcxMjMwZTEnKSwgRCgxMjMwMCkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCcxMjMwMCcpLCBEKDEyMzAwKSkKKyAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKEQoJzEyMzAwLjAnKSwgRCgxMjMwMCkpCisgICAgICAgIHNlbGYuY2hlY2tfZXF1YWxfaGFzaChEKCcxMjMwMC4wMCcpLCBEKDEyMzAwKSkKKyAgICAgICAgc2VsZi5jaGVja19lcXVhbF9oYXNoKEQoJzEyMzAwLjAwMCcpLCBEKDEyMzAwKSkKKworICAgIGRlZiB0ZXN0X2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBjaGVjayBzcGVjaWFsIGNhc2UgZm9yIGZyYWN0aW9ucyB3aGVyZSBlaXRoZXIgdGhlIG51bWVyYXRvcgorICAgICAgICAjIG9yIHRoZSBkZW5vbWluYXRvciBpcyBhIG11bHRpcGxlIG9mIF9QeUhBU0hfTU9EVUxVUworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goRigxLCBfUHlIQVNIX01PRFVMVVMpKSwgX1B5SEFTSF9JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChGKC0xLCAzKl9QeUhBU0hfTU9EVUxVUykpLCAtX1B5SEFTSF9JTkYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChGKDcqX1B5SEFTSF9NT0RVTFVTLCAxKSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzaChGKC1fUHlIQVNIX01PRFVMVVMsIDEpKSwgMCkKKworICAgIGRlZiB0ZXN0X2hhc2hfbm9ybWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBhIGJ1ZyBlbmNvdW50ZXJlZCB3aGlsZSBjaGFuZ2luZyBsb25nX2hhc2guCisgICAgICAgICMKKyAgICAgICAgIyBHaXZlbiBvYmplY3RzIHggYW5kIHksIGl0IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgeSdzCisgICAgICAgICMgX19oYXNoX18gbWV0aG9kIHRvIHJldHVybiBoYXNoKHgpIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICMgaGFzaCh4KSA9PSBoYXNoKHkpLiAgQnV0IGhhc2goeCkgaXMgbm90IGV4YWN0bHkgZXF1YWwgdG8gdGhlCisgICAgICAgICMgcmVzdWx0IG9mIHguX19oYXNoX18oKTogdGhlcmUncyBzb21lIGludGVybmFsIG5vcm1hbGl6YXRpb24KKyAgICAgICAgIyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzdWx0IGZpdHMgaW4gYSBDIGxvbmcsIGFuZCBpcyBub3QKKyAgICAgICAgIyBlcXVhbCB0byB0aGUgaW52YWxpZCBoYXNoIHZhbHVlIC0xLiAgVGhpcyBpbnRlcm5hbAorICAgICAgICAjIG5vcm1hbGl6YXRpb24gbXVzdCB0aGVyZWZvcmUgbm90IGNoYW5nZSB0aGUgcmVzdWx0IG9mCisgICAgICAgICMgaGFzaCh4KSBmb3IgYW55IHguCisKKyAgICAgICAgY2xhc3MgSGFsaWJ1dFByb3h5OgorICAgICAgICAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBoYXNoKCdoYWxpYnV0JykKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA9PSAnaGFsaWJ1dCcKKworICAgICAgICB4ID0geydoYWxpYnV0JywgSGFsaWJ1dFByb3h5KCl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorCitjbGFzcyBDb21wYXJpc29uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWl4ZWRfY29tcGFyaXNvbnMoc2VsZik6CisKKyAgICAgICAgIyBvcmRlcmVkIGxpc3Qgb2YgZGlzdGluY3QgdGVzdCB2YWx1ZXMgb2YgdmFyaW91cyB0eXBlczoKKyAgICAgICAgIyBpbnQsIGZsb2F0LCBGcmFjdGlvbiwgRGVjaW1hbAorICAgICAgICB0ZXN0X3ZhbHVlcyA9IFsKKyAgICAgICAgICAgIGZsb2F0KCctaW5mJyksCisgICAgICAgICAgICBEKCctMWU5OTk5OTk5OTknKSwKKyAgICAgICAgICAgIC0xZTMwOCwKKyAgICAgICAgICAgIEYoLTIyLCA3KSwKKyAgICAgICAgICAgIC0zLjE0LAorICAgICAgICAgICAgLTIsCisgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAxZS0zMjAsCisgICAgICAgICAgICBUcnVlLAorICAgICAgICAgICAgRignMS4yJyksCisgICAgICAgICAgICBEKCcxLjMnKSwKKyAgICAgICAgICAgIGZsb2F0KCcxLjQnKSwKKyAgICAgICAgICAgIEYoMjc1ODA3LCAxOTUwMjUpLAorICAgICAgICAgICAgRCgnMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQnKSwKKyAgICAgICAgICAgIEYoMTE0MjQzLCA4MDc4MiksCisgICAgICAgICAgICBGKDQ3MzU5NjU2OSwgODQ2MTUpLAorICAgICAgICAgICAgN2UyMDAsCisgICAgICAgICAgICBEKCdpbmZpbml0eScpLAorICAgICAgICAgICAgXQorICAgICAgICBmb3IgaSwgZmlyc3QgaW4gZW51bWVyYXRlKHRlc3RfdmFsdWVzKToKKyAgICAgICAgICAgIGZvciBzZWNvbmQgaW4gdGVzdF92YWx1ZXNbaSsxOl06CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGZpcnN0LCBzZWNvbmQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc2Vjb25kLCBmaXJzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzZWNvbmQsIGZpcnN0KQorCisgICAgZGVmIHRlc3RfY29tcGxleChzZWxmKToKKyAgICAgICAgIyBjb21wYXJpc29ucyB3aXRoIGNvbXBsZXggYXJlIHNwZWNpYWw6ICBlcXVhbGl0eSBhbmQgaW5lcXVhbGl0eQorICAgICAgICAjIGNvbXBhcmlzb25zIHNob3VsZCBhbHdheXMgc3VjY2VlZCwgYnV0IG9yZGVyIGNvbXBhcmlzb25zIHNob3VsZAorICAgICAgICAjIHJhaXNlIFR5cGVFcnJvci4KKyAgICAgICAgeiA9IDEuMCArIDBqCisgICAgICAgIHcgPSAtMy4xNCArIDIuN2oKKworICAgICAgICBmb3IgdiBpbiAxLCAxLjAsIEYoMSksIEQoMSksIGNvbXBsZXgoMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHosIHYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsIHopCisKKyAgICAgICAgZm9yIHYgaW4gMiwgMi4wLCBGKDIpLCBEKDIpLCBjb21wbGV4KDIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh6LCB2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCB6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh3LCB2KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh2LCB3KQorCisgICAgICAgIGZvciB2IGluICgxLCAxLjAsIEYoMSksIEQoMSksIGNvbXBsZXgoMSksCisgICAgICAgICAgICAgICAgICAyLCAyLjAsIEYoMiksIEQoMiksIGNvbXBsZXgoMiksIHcpOgorICAgICAgICAgICAgZm9yIG9wIGluIG9wZXJhdG9yLmxlLCBvcGVyYXRvci5sdCwgb3BlcmF0b3IuZ2UsIG9wZXJhdG9yLmd0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3AsIHosIHYpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcCwgdiwgeikKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KEhhc2hUZXN0LCBDb21wYXJpc29uVGVzdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9vcGNvZGVzLnB5CmluZGV4IDk3MDdlODQuLmY1MTBiYWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3Bjb2Rlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wY29kZXMucHkKQEAgLTYwLDcgKzYwLDcgQEAKIAogICAgICAgICB0cnk6ICByYWlzZSBEQ2xhc3MoYSkKICAgICAgICAgZXhjZXB0IERDbGFzcyBhcyB2OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodiwgRENsYXNzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LCBEQ2xhc3MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIGV4Y2VwdGlvbiIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CmluZGV4IDUzMWY1NmUuLmZhNjA4YjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQpAQCAtMjc1LDggKzI3NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgJ2FydGh1cicpCiAgICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKCdyYW5rJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYsIGEpCi0gICAgICAgIGYgPSBvcGVyYXRvci5hdHRyZ2V0dGVyKDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hdHRyZ2V0dGVyLCAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmF0dHJnZXR0ZXIpCiAKICAgICAgICAgIyBtdWx0aXBsZSBnZXRzCkBAIC0yODUsNyArMjg0LDcgQEAKICAgICAgICAgcmVjb3JkLnkgPSAnWScKICAgICAgICAgcmVjb3JkLnogPSAnWicKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5hdHRyZ2V0dGVyKCd4JywneicsJ3knKShyZWNvcmQpLCAoJ1gnLCAnWicsICdZJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlcigneCcsICgpLCAneScpLCByZWNvcmQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYXR0cmdldHRlciwgKCd4JywgKCksICd5JykpCiAKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgpAQCAtMzA0LDYgKzMwMywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksICgnYXJ0aHVyJywgJ3Rob21hcycpKQogICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcignbmFtZScsICdjaGlsZC5uYW1lJywgJ2NoaWxkLmNoaWxkLm5hbWUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZiwgYSkKKyAgICAgICAgZiA9IG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ2NoaWxkLicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBmLCBhKQorICAgICAgICBmID0gb3BlcmF0b3IuYXR0cmdldHRlcignLmNoaWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGYsIGEpCiAKICAgICAgICAgYS5jaGlsZC5jaGlsZCA9IEEoKQogICAgICAgICBhLmNoaWxkLmNoaWxkLm5hbWUgPSAnam9obnNvbicKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CmluZGV4IDRhZDRjMGYuLjdiOTU2MTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQpAQCAtMSw1ICsxLDMgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0KICMKICMgVGVzdCBzdWl0ZSBmb3IgT3B0aWsuICBTdXBwbGllZCBieSBKb2hhbm5lcyBHaWpzYmVycwogIyAodGFyYWRpbm9Ac29mdGhvbWUubmV0KSAtLSB0cmFuc2xhdGVkIGZyb20gdGhlIG9yaWdpbmFsIE9wdGlrCkBAIC0xOCw5ICsxNiw5IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbiwgT3B0aW9uLCBJbmRlbnRlZEhlbHBGb3JtYXR0ZXIsIFwKLSAgICAgVGl0bGVkSGVscEZvcm1hdHRlciwgT3B0aW9uUGFyc2VyLCBPcHRpb25Db250YWluZXIsIE9wdGlvbkdyb3VwLCBcCi0gICAgIFNVUFBSRVNTX0hFTFAsIFNVUFBSRVNTX1VTQUdFLCBPcHRpb25FcnJvciwgT3B0aW9uQ29uZmxpY3RFcnJvciwgXAorZnJvbSBvcHRwYXJzZSBpbXBvcnQgbWFrZV9vcHRpb24sIE9wdGlvbiwgXAorICAgICBUaXRsZWRIZWxwRm9ybWF0dGVyLCBPcHRpb25QYXJzZXIsIE9wdGlvbkdyb3VwLCBcCisgICAgIFNVUFBSRVNTX1VTQUdFLCBPcHRpb25FcnJvciwgT3B0aW9uQ29uZmxpY3RFcnJvciwgXAogICAgICBCYWRPcHRpb25FcnJvciwgT3B0aW9uVmFsdWVFcnJvciwgVmFsdWVzCiBmcm9tIG9wdHBhcnNlIGltcG9ydCBfbWF0Y2hfYWJicmV2CiBmcm9tIG9wdHBhcnNlIGltcG9ydCBfcGFyc2VfbnVtCkBAIC0zMzgsNyArMzM2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2dldF9vcHRpb24oc2VsZik6CiAgICAgICAgIG9wdDEgPSBzZWxmLnBhcnNlci5nZXRfb3B0aW9uKCItdiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9wdDEsIE9wdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHQxLCBPcHRpb24pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0MS5fc2hvcnRfb3B0cywgWyItdiIsICItbiJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuX2xvbmdfb3B0cywgWyItLXZlcmJvc2UiLCAiLS1ub2lzeSJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdDEuYWN0aW9uLCAic3RvcmVfdHJ1ZSIpCkBAIC00NDMsNyArNDQxLDcgQEAKICAgICAgICAgICAgIHJldHVybiBpbnQodmFsdWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlWzotMV0pICogX3RpbWVfdW5pdHNbdmFsdWVbLTFdXQotICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIEluZGV4RXJyb3I6CisgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBJbmRleEVycm9yKToKICAgICAgICAgcmFpc2UgT3B0aW9uVmFsdWVFcnJvcigKICAgICAgICAgICAgICdvcHRpb24gJXM6IGludmFsaWQgZHVyYXRpb246ICVyJyAlIChvcHQsIHZhbHVlKSkKIApAQCAtMTIyOSw3ICsxMjI3LDYgQEAKIAogICAgIGRlZiB2YXJpYWJsZV9hcmdzKHNlbGYsIG9wdGlvbiwgb3B0LCB2YWx1ZSwgcGFyc2VyKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbHVlIGlzIE5vbmUpCi0gICAgICAgIGRvbmUgPSAwCiAgICAgICAgIHZhbHVlID0gW10KICAgICAgICAgcmFyZ3MgPSBwYXJzZXIucmFyZ3MKICAgICAgICAgd2hpbGUgcmFyZ3M6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zLnB5IGIvTGliL3Rlc3QvdGVzdF9vcy5weQppbmRleCBjYmYwYzE2Li41NmJlMzc1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3MucHkKQEAgLTcsOCArNywxNCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgdGltZQogaW1wb3J0IHNodXRpbAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG1tYXAKK2ltcG9ydCB1dWlkCiAKICMgRGV0ZWN0IHdoZXRoZXIgd2UncmUgb24gYSBMaW51eCBzeXN0ZW0gdGhhdCB1c2VzIHRoZSAobm93IG91dGRhdGVkCiAjIGFuZCB1bm1haW50YWluZWQpIGxpbnV4dGhyZWFkcyB0aHJlYWRpbmcgbGlicmFyeS4gIFRoZXJlJ3MgYW4gaXNzdWUKQEAgLTU0LDYgKzYwLDcgQEAKICAgICAgICAgb3MuY2xvc2VyYW5nZShmaXJzdCwgZmlyc3QgKyAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy53cml0ZSwgZmlyc3QsIGIiYSIpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CiAgICAgICAgIHBhdGggPSBzdXBwb3J0LlRFU1RGTgogICAgICAgICBvbGQgPSBzeXMuZ2V0cmVmY291bnQocGF0aCkKQEAgLTgzLDYgKzkwLDI1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvYmoucmVhZCgpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICBbYiJiYWNvbiIsIGIiZWdncyIsIGIic3BhbSJdKQogCisgICAgZGVmIHdyaXRlX3dpbmRvd3NfY29uc29sZShzZWxmLCAqYXJncyk6CisgICAgICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoYXJncywKKyAgICAgICAgICAgICMgdXNlIGEgbmV3IGNvbnNvbGUgdG8gbm90IGZsb29kIHRoZSB0ZXN0IG91dHB1dAorICAgICAgICAgICAgY3JlYXRpb25mbGFncz1zdWJwcm9jZXNzLkNSRUFURV9ORVdfQ09OU09MRSwKKyAgICAgICAgICAgICMgdXNlIGEgc2hlbGwgdG8gaGlkZSB0aGUgY29uc29sZSB3aW5kb3cgKFNXX0hJREUpCisgICAgICAgICAgICBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldGNvZGUsIDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byB0aGUgV2luZG93cyBjb25zb2xlJykKKyAgICBkZWYgdGVzdF93cml0ZV93aW5kb3dzX2NvbnNvbGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzk1OiB0aGUgV2luZG93cyBjb25zb2xlIHJldHVybnMgYW4gZXJyb3IgKDEyOiBub3QgZW5vdWdoCisgICAgICAgICMgc3BhY2UgZXJyb3IpIG9uIHdyaXRpbmcgaW50byBzdGRvdXQgaWYgc3Rkb3V0IG1vZGUgaXMgYmluYXJ5IGFuZCB0aGUKKyAgICAgICAgIyBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywgZGVwZW5kaW5nIG9uIGhlYXAKKyAgICAgICAgIyB1c2FnZSkuCisgICAgICAgIGNvZGUgPSAicHJpbnQoJ3gnICogMTAwMDAwKSIKKyAgICAgICAgc2VsZi53cml0ZV93aW5kb3dzX2NvbnNvbGUoc3lzLmV4ZWN1dGFibGUsICItYyIsIGNvZGUpCisgICAgICAgIHNlbGYud3JpdGVfd2luZG93c19jb25zb2xlKHN5cy5leGVjdXRhYmxlLCAiLXUiLCAiLWMiLCBjb2RlKQorCiAKIGNsYXNzIFRlbXBvcmFyeUZpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTY1LDcgKzE5MSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzID09ICJmb29iYXIiKQogCiAgICAgZGVmIHRlc3RfdG1wbmFtKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAidG1wbmFtIik6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJ0bXBuYW0iLCBSdW50aW1lV2FybmluZywKQEAgLTIxNSwxOSArMjQwLDE3IEBACiAgICAgICAgIG9zLnVubGluayhzZWxmLmZuYW1lKQogICAgICAgICBvcy5ybWRpcihzdXBwb3J0LlRFU1RGTikKIAotICAgIGRlZiB0ZXN0X3N0YXRfYXR0cmlidXRlcyhzZWxmKToKKyAgICBkZWYgY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKHNlbGYsIGZuYW1lKToKICAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICJzdGF0Iik6CiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICBpbXBvcnQgc3RhdAotICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIHJlc3VsdCA9IG9zLnN0YXQoZm5hbWUpCiAKICAgICAgICAgIyBNYWtlIHN1cmUgZGlyZWN0IGFjY2VzcyB3b3JrcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFtzdGF0LlNUX1NJWkVdLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zdF9zaXplLCAzKQogCi0gICAgICAgIGltcG9ydCBzeXMKLQogICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgdGhlIGF0dHJpYnV0ZXMgYXJlIHRoZXJlCiAgICAgICAgIG1lbWJlcnMgPSBkaXIocmVzdWx0KQogICAgICAgICBmb3IgbmFtZSBpbiBkaXIoc3RhdCk6CkBAIC0yMzgsOCArMjYxLDggQEAKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBkZWYgdHJ1bmMoeCk6IHJldHVybiB4CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cnVuYyhnZXRhdHRyKHJlc3VsdCwgYXR0cikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2dldGF0dHIoc3RhdCwgbmFtZSldKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhdHRyIGluIG1lbWJlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2dldGF0dHIoc3RhdCwgbmFtZSldKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYXR0ciwgbWVtYmVycykKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHRbMjAwXQpAQCAtMjc5LDYgKzMwMiwxNSBAQAogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3Rfc3RhdF9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YXRfYXR0cmlidXRlcyhzZWxmLmZuYW1lKQorCisgICAgZGVmIHRlc3Rfc3RhdF9hdHRyaWJ1dGVzX2J5dGVzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmbmFtZSA9IHNlbGYuZm5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNhbm5vdCBlbmNvZGUgJWEgZm9yIHRoZSBmaWxlc3lzdGVtIiAlIHNlbGYuZm5hbWUpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKGZuYW1lKQogCiAgICAgZGVmIHRlc3Rfc3RhdHZmc19hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICBpZiBub3QgaGFzYXR0cihvcywgInN0YXR2ZnMiKToKQEAgLTM3NCwxMiArNDA2LDE3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuX19zYXZlID0gZGljdChvcy5lbnZpcm9uKQorICAgICAgICBpZiBvcy5zdXBwb3J0c19ieXRlc19lbnZpcm9uOgorICAgICAgICAgICAgc2VsZi5fX3NhdmViID0gZGljdChvcy5lbnZpcm9uYikKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc2VsZi5fcmVmZXJlbmNlKCkuaXRlbXMoKToKICAgICAgICAgICAgIG9zLmVudmlyb25ba2V5XSA9IHZhbHVlCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIG9zLmVudmlyb24uY2xlYXIoKQogICAgICAgICBvcy5lbnZpcm9uLnVwZGF0ZShzZWxmLl9fc2F2ZSkKKyAgICAgICAgaWYgb3Muc3VwcG9ydHNfYnl0ZXNfZW52aXJvbjoKKyAgICAgICAgICAgIG9zLmVudmlyb25iLmNsZWFyKCkKKyAgICAgICAgICAgIG9zLmVudmlyb25iLnVwZGF0ZShzZWxmLl9fc2F2ZWIpCiAKICAgICBkZWYgX3JlZmVyZW5jZShzZWxmKToKICAgICAgICAgcmV0dXJuIHsiS0VZMSI6IlZBTFVFMSIsICJLRVkyIjoiVkFMVUUyIiwgIktFWTMiOiJWQUxVRTMifQpAQCAtNDIyLDkgKzQ1OSw3MyBAQAogICAgIGRlZiB0ZXN0X19fcmVwcl9fKHNlbGYpOgogICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSByZXByKCkgb2Ygb3MuZW52aXJvbiBsb29rcyBsaWtlIGVudmlyb24oey4uLn0pLiIiIgogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGVudi5kYXRhLCBkaWN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGVudiksICdlbnZpcm9uKHshcn0pJy5mb3JtYXQoZW52LmRhdGEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZW52KSwgJ2Vudmlyb24oe3t7fX19KScuZm9ybWF0KCcsICcuam9pbigKKyAgICAgICAgICAgICd7IXJ9OiB7IXJ9Jy5mb3JtYXQoa2V5LCB2YWx1ZSkKKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVudi5pdGVtcygpKSkpCiAKKyAgICBkZWYgdGVzdF9nZXRfZXhlY19wYXRoKHNlbGYpOgorICAgICAgICBkZWZwYXRoX2xpc3QgPSBvcy5kZWZwYXRoLnNwbGl0KG9zLnBhdGhzZXApCisgICAgICAgIHRlc3RfcGF0aCA9IFsnL21vbnR5JywgJy9weXRob24nLCAnJywgJy9mbHlpbmcvY2lyY3VzJ10KKyAgICAgICAgdGVzdF9lbnYgPSB7J1BBVEgnOiBvcy5wYXRoc2VwLmpvaW4odGVzdF9wYXRoKX0KKworICAgICAgICBzYXZlZF9lbnZpcm9uID0gb3MuZW52aXJvbgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5lbnZpcm9uID0gZGljdCh0ZXN0X2VudikKKyAgICAgICAgICAgICMgVGVzdCB0aGF0IGRlZmF1bHRpbmcgdG8gb3MuZW52aXJvbiB3b3Jrcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCh0ZXN0X3BhdGgsIG9zLmdldF9leGVjX3BhdGgoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCh0ZXN0X3BhdGgsIG9zLmdldF9leGVjX3BhdGgoZW52PU5vbmUpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuZW52aXJvbiA9IHNhdmVkX2Vudmlyb24KKworICAgICAgICAjIE5vIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKGRlZnBhdGhfbGlzdCwgb3MuZ2V0X2V4ZWNfcGF0aCh7fSkpCisgICAgICAgICMgRW1wdHkgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoKCcnLCksIG9zLmdldF9leGVjX3BhdGgoeydQQVRIJzonJ30pKQorICAgICAgICAjIFN1cHBsaWVkIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHRlc3RfcGF0aCwgb3MuZ2V0X2V4ZWNfcGF0aCh0ZXN0X2VudikpCisKKyAgICAgICAgaWYgb3Muc3VwcG9ydHNfYnl0ZXNfZW52aXJvbjoKKyAgICAgICAgICAgICMgZW52IGNhbm5vdCBjb250YWluICdQQVRIJyBhbmQgYidQQVRIJyBrZXlzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBpZ25vcmUgQnl0ZXNXYXJuaW5nIHdhcm5pbmcKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKToKKyAgICAgICAgICAgICAgICAgICAgbWl4ZWRfZW52ID0geydQQVRIJzogJzEnLCBiJ1BBVEgnOiBiJzInfQorICAgICAgICAgICAgZXhjZXB0IEJ5dGVzV2FybmluZzoKKyAgICAgICAgICAgICAgICAjIG1peGVkX2VudiBjYW5ub3QgYmUgY3JlYXRlZCB3aXRoIHB5dGhvbiAtYmIKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLmdldF9leGVjX3BhdGgsIG1peGVkX2VudikKKworICAgICAgICAgICAgIyBieXRlcyBrZXkgYW5kL29yIHZhbHVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwob3MuZ2V0X2V4ZWNfcGF0aCh7YidQQVRIJzogYidhYmMnfSksCisgICAgICAgICAgICAgICAgWydhYmMnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChvcy5nZXRfZXhlY19wYXRoKHtiJ1BBVEgnOiAnYWJjJ30pLAorICAgICAgICAgICAgICAgIFsnYWJjJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwob3MuZ2V0X2V4ZWNfcGF0aCh7J1BBVEgnOiBiJ2FiYyd9KSwKKyAgICAgICAgICAgICAgICBbJ2FiYyddKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3Muc3VwcG9ydHNfYnl0ZXNfZW52aXJvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3MuZW52aXJvbmIgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQorICAgIGRlZiB0ZXN0X2Vudmlyb25iKHNlbGYpOgorICAgICAgICAjIG9zLmVudmlyb24gLT4gb3MuZW52aXJvbmIKKyAgICAgICAgdmFsdWUgPSAnZXVyb1x1MjBhYycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWVfYnl0ZXMgPSB2YWx1ZS5lbmNvZGUoc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBtc2cgPSAiVSsyMEFDIGNoYXJhY3RlciBpcyBub3QgZW5jb2RhYmxlIHRvICVzIiAlICgKKyAgICAgICAgICAgICAgICBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCksKQorICAgICAgICAgICAgc2VsZi5za2lwVGVzdChtc2cpCisgICAgICAgIG9zLmVudmlyb25bJ3VuaWNvZGUnXSA9IHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZW52aXJvblsndW5pY29kZSddLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5lbnZpcm9uYltiJ3VuaWNvZGUnXSwgdmFsdWVfYnl0ZXMpCisKKyAgICAgICAgIyBvcy5lbnZpcm9uYiAtPiBvcy5lbnZpcm9uCisgICAgICAgIHZhbHVlID0gYidceGZmJworICAgICAgICBvcy5lbnZpcm9uYltiJ2J5dGVzJ10gPSB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmVudmlyb25iW2InYnl0ZXMnXSwgdmFsdWUpCisgICAgICAgIHZhbHVlX3N0ciA9IHZhbHVlLmRlY29kZShzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCksICdzdXJyb2dhdGVlc2NhcGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmVudmlyb25bJ2J5dGVzJ10sIHZhbHVlX3N0cikKIAogY2xhc3MgV2Fsa1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyBmb3Igb3Mud2FsaygpLiIiIgpAQCAtNDY0LDcgKzU2NSw3IEBACiAgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAidyIpCiAgICAgICAgICAgICBmLndyaXRlKCJJJ20gIiArIHBhdGggKyAiIGFuZCBwcm91ZCBvZiBpdC4gIEJsYW1lIHRlc3Rfb3MuXG4iKQogICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5hYnNwYXRoKHQyX3BhdGgpLCBsaW5rX3BhdGgpCiAgICAgICAgICAgICBzdWIyX3RyZWUgPSAoc3ViMl9wYXRoLCBbImxpbmsiXSwgWyJ0bXAzIl0pCiAgICAgICAgIGVsc2U6CkBAIC01MDgsNyArNjA5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbZmxpcHBlZCArIDFdLCAoc3ViMV9wYXRoLCBbIlNVQjExIl0sIFsidG1wMiJdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMiAtIDIgKiBmbGlwcGVkXSwgc3ViMl90cmVlKQogCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6CisgICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKICAgICAgICAgICAgICMgV2FsaywgZm9sbG93aW5nIHN5bWxpbmtzLgogICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod2Fsa19wYXRoLCBmb2xsb3dsaW5rcz1UcnVlKToKICAgICAgICAgICAgICAgICBpZiByb290ID09IGxpbmtfcGF0aDoKQEAgLTU1Myw2ICs2NTQsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlyNScsICdkaXI2JykKICAgICAgICAgb3MubWFrZWRpcnMocGF0aCkKIAorICAgIGRlZiB0ZXN0X2V4aXN0X29rX2V4aXN0aW5nX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ2RpcjEnKQorICAgICAgICBtb2RlID0gMG83NzcKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwbzAyMikKKyAgICAgICAgb3MubWFrZWRpcnMocGF0aCwgbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIHBhdGgsIG1vZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLm1ha2VkaXJzLCBwYXRoLCBtb2RlLCBleGlzdF9vaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIHBhdGgsIDBvNzc2LCBleGlzdF9vaz1UcnVlKQorICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCBtb2RlPW1vZGUsIGV4aXN0X29rPVRydWUpCisgICAgICAgIG9zLnVtYXNrKG9sZF9tYXNrKQorCisgICAgZGVmIHRlc3RfZXhpc3Rfb2tfZXhpc3RpbmdfcmVndWxhcl9maWxlKHNlbGYpOgorICAgICAgICBiYXNlID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ2RpcjEnKQorICAgICAgICBmID0gb3BlbihwYXRoLCAndycpCisgICAgICAgIGYud3JpdGUoJ2FiYycpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5tYWtlZGlycywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWFrZWRpcnMsIHBhdGgsIGV4aXN0X29rPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5tYWtlZGlycywgcGF0aCwgZXhpc3Rfb2s9VHJ1ZSkKKyAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdkaXIxJywgJ2RpcjInLCAnZGlyMycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcjQnLCAnZGlyNScsICdkaXI2JykKQEAgLTU4Myw2ICs3MDYsMzkgQEAKICAgICAgICAgZXhjZXB0IE5vdEltcGxlbWVudGVkRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgX2V4ZWN2cGVfbW9ja3VwKGRlZnBhdGg9Tm9uZSk6CisgICAgIiIiCisgICAgU3R1YnMgb3V0IGV4ZWN2IGFuZCBleGVjdmUgZnVuY3Rpb25zIHdoZW4gdXNlZCBhcyBjb250ZXh0IG1hbmFnZXIuCisgICAgUmVjb3JkcyBleGVjIGNhbGxzLiBUaGUgbW9jayBleGVjdiBhbmQgZXhlY3ZlIGZ1bmN0aW9ucyBhbHdheXMgcmFpc2UgYW4KKyAgICBleGNlcHRpb24gYXMgdGhleSB3b3VsZCBub3JtYWxseSBuZXZlciByZXR1cm4uCisgICAgIiIiCisgICAgIyBBIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgKGZ1bmN0aW9uIG5hbWUsIGZpcnN0IGFyZywgYXJncykKKyAgICAjIG9mIGNhbGxzIHRvIGV4ZWN2IG9yIGV4ZWN2ZSB0aGF0IGhhdmUgYmVlbiBtYWRlLgorICAgIGNhbGxzID0gW10KKworICAgIGRlZiBtb2NrX2V4ZWN2KG5hbWUsICphcmdzKToKKyAgICAgICAgY2FsbHMuYXBwZW5kKCgnZXhlY3YnLCBuYW1lLCBhcmdzKSkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJleGVjdiBjYWxsZWQiKQorCisgICAgZGVmIG1vY2tfZXhlY3ZlKG5hbWUsICphcmdzKToKKyAgICAgICAgY2FsbHMuYXBwZW5kKCgnZXhlY3ZlJywgbmFtZSwgYXJncykpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRU5PVERJUiwgImV4ZWN2ZSBjYWxsZWQiKQorCisgICAgdHJ5OgorICAgICAgICBvcmlnX2V4ZWN2ID0gb3MuZXhlY3YKKyAgICAgICAgb3JpZ19leGVjdmUgPSBvcy5leGVjdmUKKyAgICAgICAgb3JpZ19kZWZwYXRoID0gb3MuZGVmcGF0aAorICAgICAgICBvcy5leGVjdiA9IG1vY2tfZXhlY3YKKyAgICAgICAgb3MuZXhlY3ZlID0gbW9ja19leGVjdmUKKyAgICAgICAgaWYgZGVmcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG9zLmRlZnBhdGggPSBkZWZwYXRoCisgICAgICAgIHlpZWxkIGNhbGxzCisgICAgZmluYWxseToKKyAgICAgICAgb3MuZXhlY3YgPSBvcmlnX2V4ZWN2CisgICAgICAgIG9zLmV4ZWN2ZSA9IG9yaWdfZXhlY3ZlCisgICAgICAgIG9zLmRlZnBhdGggPSBvcmlnX2RlZnBhdGgKKwogY2xhc3MgRXhlY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBAdW5pdHRlc3Quc2tpcElmKFVTSU5HX0xJTlVYVEhSRUFEUywKICAgICAgICAgICAgICAgICAgICAgICJhdm9pZCB0cmlnZ2VyaW5nIGEgbGludXh0aHJlYWRzIGJ1Zzogc2VlIGlzc3VlICM0OTcwIikKQEAgLTU5MywxMyArNzQ5LDYwIEBACiAgICAgZGVmIHRlc3RfZXhlY3ZwZV93aXRoX2JhZF9hcmdsaXN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcy5leGVjdnBlLCAnbm90ZXBhZCcsIFtdLCBOb25lKQogCi1jbGFzcyBBcmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3RfYnl0ZWFycmF5KHNlbGYpOgotICAgICAgICAjIElzc3VlICM3NTYxOiBwb3NpeCBtb2R1bGUgZGlkbid0IHJlbGVhc2UgYnl0ZWFycmF5IGV4cG9ydHMgcHJvcGVybHkuCi0gICAgICAgIGIgPSBieXRlYXJyYXkob3Muc2VwLmVuY29kZSgnYXNjaWknKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MubWtkaXIsIGIpCi0gICAgICAgICMgQ2hlY2sgb2JqZWN0IGlzIHN0aWxsIHJlc2l6YWJsZS4KLSAgICAgICAgYls6XSA9IGInJworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdfZXhlY3ZwZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJObyBpbnRlcm5hbCBvcy5fZXhlY3ZwZSBmdW5jdGlvbiB0byB0ZXN0LiIpCisgICAgZGVmIF90ZXN0X2ludGVybmFsX2V4ZWN2cGUoc2VsZiwgdGVzdF90eXBlKToKKyAgICAgICAgcHJvZ3JhbV9wYXRoID0gb3Muc2VwICsgJ2Fic29sdXRlcGF0aCcKKyAgICAgICAgaWYgdGVzdF90eXBlIGlzIGJ5dGVzOgorICAgICAgICAgICAgcHJvZ3JhbSA9IGInZXhlY3V0YWJsZScKKyAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKG9zLmZzZW5jb2RlKHByb2dyYW1fcGF0aCksIHByb2dyYW0pCisgICAgICAgICAgICBuYXRpdmVfZnVsbHBhdGggPSBmdWxscGF0aAorICAgICAgICAgICAgYXJndW1lbnRzID0gW2IncHJvZ25hbWUnLCAnYXJnMScsICdhcmcyJ10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByb2dyYW0gPSAnZXhlY3V0YWJsZScKKyAgICAgICAgICAgIGFyZ3VtZW50cyA9IFsncHJvZ25hbWUnLCAnYXJnMScsICdhcmcyJ10KKyAgICAgICAgICAgIGZ1bGxwYXRoID0gb3MucGF0aC5qb2luKHByb2dyYW1fcGF0aCwgcHJvZ3JhbSkKKyAgICAgICAgICAgIGlmIG9zLm5hbWUgIT0gIm50IjoKKyAgICAgICAgICAgICAgICBuYXRpdmVfZnVsbHBhdGggPSBvcy5mc2VuY29kZShmdWxscGF0aCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmF0aXZlX2Z1bGxwYXRoID0gZnVsbHBhdGgKKyAgICAgICAgZW52ID0geydzcGFtJzogJ2JlYW5zJ30KKworICAgICAgICAjIHRlc3Qgb3MuX2V4ZWN2cGUoKSB3aXRoIGFuIGFic29sdXRlIHBhdGgKKyAgICAgICAgd2l0aCBfZXhlY3ZwZV9tb2NrdXAoKSBhcyBjYWxsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICBvcy5fZXhlY3ZwZSwgZnVsbHBhdGgsIGFyZ3VtZW50cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNhbGxzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHNbMF0sICgnZXhlY3YnLCBmdWxscGF0aCwgKGFyZ3VtZW50cywpKSkKKworICAgICAgICAjIHRlc3Qgb3MuX2V4ZWN2cGUoKSB3aXRoIGEgcmVsYXRpdmUgcGF0aDoKKyAgICAgICAgIyBvcy5nZXRfZXhlY19wYXRoKCkgcmV0dXJucyBkZWZwYXRoCisgICAgICAgIHdpdGggX2V4ZWN2cGVfbW9ja3VwKGRlZnBhdGg9cHJvZ3JhbV9wYXRoKSBhcyBjYWxsczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCisgICAgICAgICAgICAgICAgb3MuX2V4ZWN2cGUsIHByb2dyYW0sIGFyZ3VtZW50cywgZW52PWVudikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNhbGxzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChjYWxsc1swXSwKKyAgICAgICAgICAgICAgICAoJ2V4ZWN2ZScsIG5hdGl2ZV9mdWxscGF0aCwgKGFyZ3VtZW50cywgZW52KSkpCisKKyAgICAgICAgIyB0ZXN0IG9zLl9leGVjdnBlKCkgd2l0aCBhIHJlbGF0aXZlIHBhdGg6CisgICAgICAgICMgb3MuZ2V0X2V4ZWNfcGF0aCgpIHJlYWRzIHRoZSAnUEFUSCcgdmFyaWFibGUKKyAgICAgICAgd2l0aCBfZXhlY3ZwZV9tb2NrdXAoKSBhcyBjYWxsczoKKyAgICAgICAgICAgIGVudl9wYXRoID0gZW52LmNvcHkoKQorICAgICAgICAgICAgaWYgdGVzdF90eXBlIGlzIGJ5dGVzOgorICAgICAgICAgICAgICAgIGVudl9wYXRoW2InUEFUSCddID0gcHJvZ3JhbV9wYXRoCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudl9wYXRoWydQQVRIJ10gPSBwcm9ncmFtX3BhdGgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCisgICAgICAgICAgICAgICAgb3MuX2V4ZWN2cGUsIHByb2dyYW0sIGFyZ3VtZW50cywgZW52PWVudl9wYXRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY2FsbHMpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKGNhbGxzWzBdLAorICAgICAgICAgICAgICAgICgnZXhlY3ZlJywgbmF0aXZlX2Z1bGxwYXRoLCAoYXJndW1lbnRzLCBlbnZfcGF0aCkpKQorCisgICAgZGVmIHRlc3RfaW50ZXJuYWxfZXhlY3ZwZV9zdHIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfaW50ZXJuYWxfZXhlY3ZwZShzdHIpCisgICAgICAgIGlmIG9zLm5hbWUgIT0gIm50IjoKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RfaW50ZXJuYWxfZXhlY3ZwZShieXRlcykKKwogCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKQEAgLTcwMyw2ICs5MDYsNDIgQEAKICAgICAgICAgaWYgaGFzYXR0cihvcywgIndyaXRlIik6CiAgICAgICAgICAgICBzZWxmLmNoZWNrKG9zLndyaXRlLCBiIiAiKQogCisKK2NsYXNzIExpbmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUxID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5maWxlMiA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiArICIyIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIGZpbGUgaW4gKHNlbGYuZmlsZTEsIHNlbGYuZmlsZTIpOgorICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZSk6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZpbGUpCisKKyAgICBkZWYgX3Rlc3RfbGluayhzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgICAgICB3aXRoIG9wZW4oZmlsZTEsICJ3IikgYXMgZjE6CisgICAgICAgICAgICBmMS53cml0ZSgidGVzdCIpCisKKyAgICAgICAgb3MubGluayhmaWxlMSwgZmlsZTIpCisgICAgICAgIHdpdGggb3BlbihmaWxlMSwgInIiKSBhcyBmMSwgb3BlbihmaWxlMiwgInIiKSBhcyBmMjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLnNhbWVvcGVuZmlsZShmMS5maWxlbm8oKSwgZjIuZmlsZW5vKCkpKQorCisgICAgZGVmIHRlc3RfbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rKHNlbGYuZmlsZTEsIHNlbGYuZmlsZTIpCisKKyAgICBkZWYgdGVzdF9saW5rX2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmsoYnl0ZXMoc2VsZi5maWxlMSwgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKHNlbGYuZmlsZTIsIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX25hbWUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmZzZW5jb2RlKCJceGYxIikKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJVbmFibGUgdG8gZW5jb2RlIGZvciB0aGlzIHBsYXRmb3JtLiIpCisKKyAgICAgICAgc2VsZi5maWxlMSArPSAiXHhmMSIKKyAgICAgICAgc2VsZi5maWxlMiA9IHNlbGYuZmlsZTEgKyAiMiIKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rKHNlbGYuZmlsZTEsIHNlbGYuZmlsZTIpCisKIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgogICAgIGNsYXNzIFdpbjMyRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBhc3MKQEAgLTc0Miw3ICs5ODEsNiBAQAogICAgICAgICAgICAgZGVmIHRlc3Rfc2V0cmV1aWRfbmVnMShzZWxmKToKICAgICAgICAgICAgICAgICAjIE5lZWRzIHRvIGFjY2VwdCAtMS4gIFdlIHJ1biB0aGlzIGluIGEgc3VicHJvY2VzcyB0byBhdm9pZAogICAgICAgICAgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KLSAgICAgICAgICAgICAgICBpbXBvcnQgc3VicHJvY2VzcwogICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbCiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJldWlkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQpAQCAtNzU3LDM0ICs5OTUsNTEgQEAKICAgICAgICAgICAgIGRlZiB0ZXN0X3NldHJlZ2lkX25lZzEoc2VsZik6CiAgICAgICAgICAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKICAgICAgICAgICAgICAgICAjIGFsdGVyaW5nIHRoZSB0ZXN0IHJ1bm5lcidzIHByb2Nlc3Mgc3RhdGUgKGlzc3VlODA0NSkuCi0gICAgICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWwogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZWdpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nLCAidGVzdHMgZG9uJ3QgYXBwbHkgdG8gT1MgWCIpCiAgICAgY2xhc3MgUGVwMzgzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBmaWxlbmFtZXMgPSBbYidmb29ceGY2YmFyJywgJ2Zvb1x4ZjZiYXInLmVuY29kZSgidXRmLTgiKV0KLQogICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmZzZW5jb2RpbmcgPSBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKLSAgICAgICAgICAgIHN5cy5zZXRmaWxlc3lzdGVtZW5jb2RpbmcoInV0Zi04IikKLSAgICAgICAgICAgIHNlbGYuZGlyID0gc3VwcG9ydC5URVNURk4KLSAgICAgICAgICAgIHNlbGYuYmRpciA9IHNlbGYuZGlyLmVuY29kZSgidXRmLTgiLCAic3Vycm9nYXRlZXNjYXBlIikKKyAgICAgICAgICAgIGlmIHN1cHBvcnQuVEVTVEZOX1VORU5DT0RBQkxFOgorICAgICAgICAgICAgICAgIHNlbGYuZGlyID0gc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5kaXIgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICAgICAgc2VsZi5iZGlyID0gb3MuZnNlbmNvZGUoc2VsZi5kaXIpCisKKyAgICAgICAgICAgIGJ5dGVzZm4gPSBbXQorICAgICAgICAgICAgZGVmIGFkZF9maWxlbmFtZShmbik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmbiA9IG9zLmZzZW5jb2RlKGZuKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGJ5dGVzZm4uYXBwZW5kKGZuKQorICAgICAgICAgICAgYWRkX2ZpbGVuYW1lKHN1cHBvcnQuVEVTVEZOX1VOSUNPREUpCisgICAgICAgICAgICBpZiBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRToKKyAgICAgICAgICAgICAgICBhZGRfZmlsZW5hbWUoc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUpCisgICAgICAgICAgICBpZiBub3QgYnl0ZXNmbjoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjb3VsZG4ndCBjcmVhdGUgYW55IG5vbi1hc2NpaSBmaWxlbmFtZSIpCisKKyAgICAgICAgICAgIHNlbGYudW5pY29kZWZuID0gc2V0KCkKICAgICAgICAgICAgIG9zLm1rZGlyKHNlbGYuZGlyKQotICAgICAgICAgICAgc2VsZi51bmljb2RlZm4gPSBbXQotICAgICAgICAgICAgZm9yIGZuIGluIHNlbGYuZmlsZW5hbWVzOgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmJkaXIsIGZuKSwgInciKQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYudW5pY29kZWZuLmFwcGVuZChmbi5kZWNvZGUoInV0Zi04IiwgInN1cnJvZ2F0ZWVzY2FwZSIpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBmbiBpbiBieXRlc2ZuOgorICAgICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5iZGlyLCBmbiksICJ3IikKKyAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIGZuID0gb3MuZnNkZWNvZGUoZm4pCisgICAgICAgICAgICAgICAgICAgIGlmIGZuIGluIHNlbGYudW5pY29kZWZuOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZHVwbGljYXRlIGZpbGVuYW1lIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51bmljb2RlZm4uYWRkKGZuKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5kaXIpCisgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyKQotICAgICAgICAgICAgc3lzLnNldGZpbGVzeXN0ZW1lbmNvZGluZyhzZWxmLmZzZW5jb2RpbmcpCiAKICAgICAgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2V0KHNlbGYudW5pY29kZWZuKQotICAgICAgICAgICAgZm91bmQgPSBzZXQob3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikpCisgICAgICAgICAgICBleHBlY3RlZCA9IHNlbGYudW5pY29kZWZuCisgICAgICAgICAgICBmb3VuZCA9IHNldChvcy5saXN0ZGlyKHNlbGYuZGlyKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIGV4cGVjdGVkKQogCiAgICAgICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CkBAIC04MDEsOSArMTA1NiwyMzIgQEAKICAgICBjbGFzcyBQZXAzODNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIHBhc3MKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCitjbGFzcyBXaW4zMktpbGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIF9raWxsKHNlbGYsIHNpZyk6CisgICAgICAgICMgU3RhcnQgc3lzLmV4ZWN1dGFibGUgYXMgYSBzdWJwcm9jZXNzIGFuZCBjb21tdW5pY2F0ZSBmcm9tIHRoZQorICAgICAgICAjIHN1YnByb2Nlc3MgdG8gdGhlIHBhcmVudCB0aGF0IHRoZSBpbnRlcnByZXRlciBpcyByZWFkeS4gV2hlbiBpdAorICAgICAgICAjIGJlY29tZXMgcmVhZHksIHNlbmQgKnNpZyogdmlhIG9zLmtpbGwgdG8gdGhlIHN1YnByb2Nlc3MgYW5kIGNoZWNrCisgICAgICAgICMgdGhhdCB0aGUgcmV0dXJuIGNvZGUgaXMgZXF1YWwgdG8gKnNpZyouCisgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIGltcG9ydCBtc3ZjcnQKKworICAgICAgICAjIFNpbmNlIHdlIGNhbid0IGFjY2VzcyB0aGUgY29udGVudHMgb2YgdGhlIHByb2Nlc3MnIHN0ZG91dCB1bnRpbCB0aGUKKyAgICAgICAgIyBwcm9jZXNzIGhhcyBleGl0ZWQsIHVzZSBQZWVrTmFtZWRQaXBlIHRvIHNlZSB3aGF0J3MgaW5zaWRlIHN0ZG91dAorICAgICAgICAjIHdpdGhvdXQgd2FpdGluZy4gVGhpcyBpcyBkb25lIHNvIHdlIGNhbiB0ZWxsIHRoYXQgdGhlIGludGVycHJldGVyCisgICAgICAgICMgaXMgc3RhcnRlZCBhbmQgcnVubmluZyBhdCBhIHBvaW50IHdoZXJlIGl0IGNvdWxkIGhhbmRsZSBhIHNpZ25hbC4KKyAgICAgICAgUGVla05hbWVkUGlwZSA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIuUGVla05hbWVkUGlwZQorICAgICAgICBQZWVrTmFtZWRQaXBlLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisgICAgICAgIFBlZWtOYW1lZFBpcGUuYXJndHlwZXMgPSAod2ludHlwZXMuSEFORExFLCAjIFBpcGUgaGFuZGxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIoY3R5cGVzLmNfY2hhciksICMgc3Rkb3V0IGJ1ZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbnR5cGVzLkRXT1JELCAjIEJ1ZmZlciBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R5cGVzLlBPSU5URVIod2ludHlwZXMuRFdPUkQpLCAjIGJ5dGVzIHJlYWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCksICMgYnl0ZXMgYXZhaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHlwZXMuUE9JTlRFUih3aW50eXBlcy5EV09SRCkpICMgYnl0ZXMgbGVmdAorICAgICAgICBtc2cgPSAicnVubmluZyIKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJ3t9Jyk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQuZmx1c2goKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQoKSIuZm9ybWF0KG1zZyldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvYy5zdGRpbi5jbG9zZSkKKworICAgICAgICBjb3VudCwgbWF4ID0gMCwgMTAwCisgICAgICAgIHdoaWxlIGNvdW50IDwgbWF4IGFuZCBwcm9jLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAgICAgIyBDcmVhdGUgYSBzdHJpbmcgYnVmZmVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2Ygc3Rkb3V0IGZyb20gdGhlIHBpcGUKKyAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihsZW4obXNnKSkKKyAgICAgICAgICAgICMgT2J0YWluIHRoZSB0ZXh0IGN1cnJlbnRseSBpbiBwcm9jLnN0ZG91dAorICAgICAgICAgICAgIyBCeXRlcyByZWFkL2F2YWlsL2xlZnQgYXJlIGxlZnQgYXMgTlVMTCBhbmQgdW51c2VkCisgICAgICAgICAgICByc2x0ID0gUGVla05hbWVkUGlwZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShwcm9jLnN0ZG91dC5maWxlbm8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGN0eXBlcy5zaXplb2YoYnVmKSwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnNsdCwgMCwgIlBlZWtOYW1lZFBpcGUgZmFpbGVkIikKKyAgICAgICAgICAgIGlmIGJ1Zi52YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYnVmLnZhbHVlLmRlY29kZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRGlkIG5vdCByZWNlaXZlIGNvbW11bmljYXRpb24gZnJvbSB0aGUgc3VicHJvY2VzcyIpCisKKyAgICAgICAgb3Mua2lsbChwcm9jLnBpZCwgc2lnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Mud2FpdCgpLCBzaWcpCisKKyAgICBkZWYgdGVzdF9raWxsX3NpZ3Rlcm0oc2VsZik6CisgICAgICAgICMgU0lHVEVSTSBkb2Vzbid0IG1lYW4gYW55dGhpbmcgc3BlY2lhbCwgYnV0IG1ha2Ugc3VyZSBpdCB3b3JrcworICAgICAgICBzZWxmLl9raWxsKHNpZ25hbC5TSUdURVJNKQorCisgICAgZGVmIHRlc3Rfa2lsbF9pbnQoc2VsZik6CisgICAgICAgICMgb3Mua2lsbCBvbiBXaW5kb3dzIGNhbiB0YWtlIGFuIGludCB3aGljaCBnZXRzIHNldCBhcyB0aGUgZXhpdCBjb2RlCisgICAgICAgIHNlbGYuX2tpbGwoMTAwKQorCisgICAgZGVmIF9raWxsX3dpdGhfZXZlbnQoc2VsZiwgZXZlbnQsIG5hbWUpOgorICAgICAgICB0YWduYW1lID0gInRlc3Rfb3NfJXMiICUgdXVpZC51dWlkMSgpCisgICAgICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEsIHRhZ25hbWUpCisgICAgICAgIG1bMF0gPSAwCisgICAgICAgICMgUnVuIGEgc2NyaXB0IHdoaWNoIGhhcyBjb25zb2xlIGNvbnRyb2wgaGFuZGxpbmcgZW5hYmxlZC4KKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2luX2NvbnNvbGVfaGFuZGxlci5weSIpLCB0YWduYW1lXSwKKyAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPXN1YnByb2Nlc3MuQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQKQorICAgICAgICAjIExldCB0aGUgaW50ZXJwcmV0ZXIgc3RhcnR1cCBiZWZvcmUgd2Ugc2VuZCBzaWduYWxzLiBTZWUgIzMxMzcuCisgICAgICAgIGNvdW50LCBtYXggPSAwLCAxMDAKKyAgICAgICAgd2hpbGUgY291bnQgPCBtYXggYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBtWzBdID09IDE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICAgICAgY291bnQgKz0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIHNpZ25hbCBpdC4KKyAgICAgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlN1YnByb2Nlc3MgZGlkbid0IGZpbmlzaCBpbml0aWFsaXphdGlvbiIpCisgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIGV2ZW50KQorICAgICAgICAjIHByb2Muc2VuZF9zaWduYWwoZXZlbnQpIGNvdWxkIGFsc28gYmUgZG9uZSBoZXJlLgorICAgICAgICAjIEFsbG93IHRpbWUgZm9yIHRoZSBzaWduYWwgdG8gYmUgcGFzc2VkIGFuZCB0aGUgcHJvY2VzcyB0byBleGl0LgorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgaWYgbm90IHByb2MucG9sbCgpOgorICAgICAgICAgICAgIyBGb3JjZWZ1bGx5IGtpbGwgdGhlIHByb2Nlc3MgaWYgd2Ugd2VyZW4ndCBhYmxlIHRvIHNpZ25hbCBpdC4KKyAgICAgICAgICAgIG9zLmtpbGwocHJvYy5waWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgICAgICBzZWxmLmZhaWwoInN1YnByb2Nlc3MgZGlkIG5vdCBzdG9wIG9uIHt9Ii5mb3JtYXQobmFtZSkpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgic3VicHJvY2Vzc2VzIGFyZW4ndCBpbmhlcml0aW5nIENUUkwrQyBwcm9wZXJ0eSIpCisgICAgZGVmIHRlc3RfQ1RSTF9DX0VWRU5UKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgaW1wb3J0IGN0eXBlcworCisgICAgICAgICMgTWFrZSBhIE5VTEwgdmFsdWUgYnkgY3JlYXRpbmcgYSBwb2ludGVyIHdpdGggbm8gYXJndW1lbnQuCisgICAgICAgIE5VTEwgPSBjdHlwZXMuUE9JTlRFUihjdHlwZXMuY19pbnQpKCkKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMi5TZXRDb25zb2xlQ3RybEhhbmRsZXIKKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKGN0eXBlcy5QT0lOVEVSKGN0eXBlcy5jX2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW50eXBlcy5CT09MKQorICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKKworICAgICAgICAjIENhbGxpbmcgdGhpcyB3aXRoIE5VTEwgYW5kIEZBTFNFIGNhdXNlcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvCisgICAgICAgICMgaGFuZGxlIENUUkwrQywgcmF0aGVyIHRoYW4gaWdub3JlIGl0LiBUaGlzIHByb3BlcnR5IGlzIGluaGVyaXRlZAorICAgICAgICAjIGJ5IHN1YnByb2Nlc3Nlcy4KKyAgICAgICAgU2V0Q29uc29sZUN0cmxIYW5kbGVyKE5VTEwsIDApCisKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0NfRVZFTlQsICJDVFJMX0NfRVZFTlQiKQorCisgICAgZGVmIHRlc3RfQ1RSTF9CUkVBS19FVkVOVChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF93aXRoX2V2ZW50KHNpZ25hbC5DVFJMX0JSRUFLX0VWRU5ULCAiQ1RSTF9CUkVBS19FVkVOVCIpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCitAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCitjbGFzcyBXaW4zMlN5bWxpbmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmlsZWxpbmsgPSAnZmlsZWxpbmt0ZXN0JworICAgIGZpbGVsaW5rX3RhcmdldCA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICBkaXJsaW5rID0gJ2Rpcmxpbmt0ZXN0JworICAgIGRpcmxpbmtfdGFyZ2V0ID0gb3MucGF0aC5kaXJuYW1lKGZpbGVsaW5rX3RhcmdldCkKKyAgICBtaXNzaW5nX2xpbmsgPSAnbWlzc2luZyBsaW5rJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoc2VsZi5kaXJsaW5rX3RhcmdldCkKKyAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZWxpbmtfdGFyZ2V0KQorICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZGlybGluaykKKyAgICAgICAgYXNzZXJ0IG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVsaW5rKQorICAgICAgICBhc3NlcnQgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYubWlzc2luZ19saW5rKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVsaW5rKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGVsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmRpcmxpbmspOgorICAgICAgICAgICAgb3Mucm1kaXIoc2VsZi5kaXJsaW5rKQorICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMoc2VsZi5taXNzaW5nX2xpbmspOgorICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYubWlzc2luZ19saW5rKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2xpbmsoc2VsZik6CisgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5kaXJsaW5rX3RhcmdldCwgc2VsZi5kaXJsaW5rKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5kaXJsaW5rKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIoc2VsZi5kaXJsaW5rKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNsaW5rKHNlbGYuZGlybGluaykpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdChzZWxmLmRpcmxpbmssIHNlbGYuZGlybGlua190YXJnZXQpCisKKyAgICBkZWYgdGVzdF9maWxlX2xpbmsoc2VsZik6CisgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5maWxlbGlua190YXJnZXQsIHNlbGYuZmlsZWxpbmspCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVsaW5rKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHNlbGYuZmlsZWxpbmspKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsoc2VsZi5maWxlbGluaykpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdChzZWxmLmZpbGVsaW5rLCBzZWxmLmZpbGVsaW5rX3RhcmdldCkKKworICAgIGRlZiBfY3JlYXRlX21pc3NpbmdfZGlyX2xpbmsoc2VsZik6CisgICAgICAgICdDcmVhdGUgYSAiZGlyZWN0b3J5IiBsaW5rIHRvIGEgbm9uLWV4aXN0ZW50IHRhcmdldCcKKyAgICAgICAgbGlua25hbWUgPSBzZWxmLm1pc3NpbmdfbGluaworICAgICAgICBpZiBvcy5wYXRoLmxleGlzdHMobGlua25hbWUpOgorICAgICAgICAgICAgb3MucmVtb3ZlKGxpbmtuYW1lKQorICAgICAgICB0YXJnZXQgPSByJ2M6XFx0YXJnZXQgZG9lcyBub3QgZXhpc3QuMjlyM2M3NDAnCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5leGlzdHModGFyZ2V0KQorICAgICAgICB0YXJnZXRfaXNfZGlyID0gVHJ1ZQorICAgICAgICBvcy5zeW1saW5rKHRhcmdldCwgbGlua25hbWUsIHRhcmdldF9pc19kaXIpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfZGlyZWN0b3J5X2xpbmtfdG9fbWlzc2luZ190YXJnZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2NyZWF0ZV9taXNzaW5nX2Rpcl9saW5rKCkKKyAgICAgICAgIyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFVuaXgsIG9zLnJlbW92ZSB3aWxsIGNoZWNrIHRoZQorICAgICAgICAjICBkaXJlY3Rvcnkgc3RhdHVzIGFuZCBjYWxsIFJlbW92ZURpcmVjdG9yeSBpZiB0aGUgc3ltbGluaworICAgICAgICAjICB3YXMgY3JlYXRlZCB3aXRoIHRhcmdldF9pc19kaXI9PVRydWUuCisgICAgICAgIG9zLnJlbW92ZShzZWxmLm1pc3NpbmdfbGluaykKKworICAgIEB1bml0dGVzdC5za2lwKCJjdXJyZW50bHkgZmFpbHM7IGNvbnNpZGVyIGZvciBpbXByb3ZlbWVudCIpCisgICAgZGVmIHRlc3RfaXNkaXJfb25fZGlyZWN0b3J5X2xpbmtfdG9fbWlzc2luZ190YXJnZXQoc2VsZik6CisgICAgICAgIHNlbGYuX2NyZWF0ZV9taXNzaW5nX2Rpcl9saW5rKCkKKyAgICAgICAgIyBjb25zaWRlciBoYXZpbmcgaXNkaXIgcmV0dXJuIHRydWUgZm9yIGRpcmVjdG9yeSBsaW5rcworICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihzZWxmLm1pc3NpbmdfbGluaykpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgiY3VycmVudGx5IGZhaWxzOyBjb25zaWRlciBmb3IgaW1wcm92ZW1lbnQiKQorICAgIGRlZiB0ZXN0X3JtZGlyX29uX2RpcmVjdG9yeV9saW5rX3RvX21pc3NpbmdfdGFyZ2V0KHNlbGYpOgorICAgICAgICBzZWxmLl9jcmVhdGVfbWlzc2luZ19kaXJfbGluaygpCisgICAgICAgICMgY29uc2lkZXIgYWxsb3dpbmcgcm1kaXIgdG8gcmVtb3ZlIGRpcmVjdG9yeSBsaW5rcworICAgICAgICBvcy5ybWRpcihzZWxmLm1pc3NpbmdfbGluaykKKworICAgIGRlZiBjaGVja19zdGF0KHNlbGYsIGxpbmssIHRhcmdldCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChsaW5rKSwgb3Muc3RhdCh0YXJnZXQpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9zLmxzdGF0KGxpbmspLCBvcy5zdGF0KGxpbmspKQorCisKK2NsYXNzIEZTRW5jb2RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9wKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmZzZW5jb2RlKGInYWJjXHhmZicpLCBiJ2FiY1x4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmZzZGVjb2RlKCdhYmNcdTAxNDEnKSwgJ2FiY1x1MDE0MScpCisKKyAgICBkZWYgdGVzdF9pZGVudGl0eShzZWxmKToKKyAgICAgICAgIyBhc3NlcnQgZnNkZWNvZGUoZnNlbmNvZGUoeCkpID09IHgKKyAgICAgICAgZm9yIGZuIGluICgndW5pY29kZVx1MDE0MScsICdsYXRpblx4ZTknLCAnYXNjaWknKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBieXRlc2ZuID0gb3MuZnNlbmNvZGUoZm4pCisgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmZzZGVjb2RlKGJ5dGVzZm4pLCBmbikKKworCitjbGFzcyBQaWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2dldHBwaWQnKSwgInRlc3QgbmVlZHMgb3MuZ2V0cHBpZCIpCisgICAgZGVmIHRlc3RfZ2V0cHBpZChzZWxmKToKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBvczsgcHJpbnQob3MuZ2V0cHBpZCgpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIF8gPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBXZSBhcmUgdGhlIHBhcmVudCBvZiBvdXIgc3VicHJvY2VzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChzdGRvdXQpLCBvcy5nZXRwaWQoKSkKKworCisjIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhpcyBUZXN0Q2FzZSBjYXVzZWQgYXQgbGVhc3QgdHdvIGRpZmZlcmVudCBlcnJvcnMgb24KKyMgKm5peCBidWlsZGJvdHMuIFRlbXBvcmFyaWx5IHNraXAgdGhpcyB0byBsZXQgdGhlIGJ1aWxkYm90cyBtb3ZlIGFsb25nLgorQHVuaXR0ZXN0LnNraXAoIlNraXAgZHVlIHRvIHBsYXRmb3JtL2Vudmlyb25tZW50IGRpZmZlcmVuY2VzIG9uICpOSVggYnVpbGRib3RzIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdnZXRsb2dpbicpLCAidGVzdCBuZWVkcyBvcy5nZXRsb2dpbiIpCitjbGFzcyBMb2dpblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRsb2dpbihzZWxmKToKKyAgICAgICAgdXNlcl9uYW1lID0gb3MuZ2V0bG9naW4oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbih1c2VyX25hbWUpLCAwKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgQXJnVGVzdHMsCiAgICAgICAgIEZpbGVUZXN0cywKICAgICAgICAgU3RhdEF0dHJpYnV0ZVRlc3RzLAogICAgICAgICBFbnZpcm9uVGVzdHMsCkBAIC04MTUsNyArMTI5MywxMyBAQAogICAgICAgICBXaW4zMkVycm9yVGVzdHMsCiAgICAgICAgIFRlc3RJbnZhbGlkRkQsCiAgICAgICAgIFBvc2l4VWlkR2lkVGVzdHMsCi0gICAgICAgIFBlcDM4M1Rlc3RzCisgICAgICAgIFBlcDM4M1Rlc3RzLAorICAgICAgICBXaW4zMktpbGxUZXN0cywKKyAgICAgICAgV2luMzJTeW1saW5rVGVzdHMsCisgICAgICAgIEZTRW5jb2RpbmdUZXN0cywKKyAgICAgICAgUGlkVGVzdHMsCisgICAgICAgIExvZ2luVGVzdHMsCisgICAgICAgIExpbmtUZXN0cywKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQppbmRleCA1ZGVhNjQwLi45Y2I4OWQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTE2MiwxMSArMTYyLDEzIEBACiAgICAgZGVmIHRlc3RfbWl4ZXJfbWV0aG9kcyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjODEzOTogb3NzYXVkaW9kZXYgZGlkbid0IGluaXRpYWxpemUgaXRzIHR5cGVzIHByb3Blcmx5LAogICAgICAgICAjIHRoZXJlZm9yZSBzb21lIG1ldGhvZHMgd2VyZSB1bmF2YWlsYWJsZS4KLSAgICAgICAgbWl4ZXIgPSBvc3NhdWRpb2Rldi5vcGVubWl4ZXIoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3NzYXVkaW9kZXYub3Blbm1peGVyKCkgYXMgbWl4ZXI6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChtaXhlci5maWxlbm8oKSwgMCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG1peGVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIHdpdGggb3NzYXVkaW9kZXYub3BlbigndycpIGFzIGRzcDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRzcC5jbG9zZWQpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wYXJzZXIucHkgYi9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQppbmRleCA5YWI0MTcxLi4wMjBhY2Q1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BhcnNlci5weQpAQCAtMSw1ICsxLDQgQEAKIGltcG9ydCBwYXJzZXIKLWltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgb3BlcmF0b3IKQEAgLTM0LDcgKzMzLDcgQEAKICAgICAgICAgY29kZSA9IHN1aXRlLmNvbXBpbGUoKQogICAgICAgICBzY29wZSA9IHt9CiAgICAgICAgIGV4ZWMoY29kZSwge30sIHNjb3BlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzY29wZVsieCJdLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2NvcGVbIngiXSwgc3RyKQogCiAgICAgZGVmIGNoZWNrX3N1aXRlKHNlbGYsIHMpOgogICAgICAgICBzZWxmLnJvdW5kdHJpcChwYXJzZXIuc3VpdGUsIHMpCkBAIC0yMjcsNyArMjI2LDcgQEAKICAgICBkZWYgdGVzdF9wb3NpdGlvbihzZWxmKToKICAgICAgICAgIyBBbiBhYnNvbHV0ZWx5IG1pbmltYWwgdGVzdCBvZiBwb3NpdGlvbiBpbmZvcm1hdGlvbi4gIEJldHRlcgogICAgICAgICAjIHRlc3RzIHdvdWxkIGJlIGEgYmlnIHByb2plY3QuCi0gICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4gICAgcmV0dXJuIHggKyAxXG4iCisgICAgICAgIGNvZGUgPSAiZGVmIGYoeCk6XG4gICAgcmV0dXJuIHggKyAxIgogICAgICAgICBzdDEgPSBwYXJzZXIuc3VpdGUoY29kZSkKICAgICAgICAgc3QyID0gc3QxLnRvdHVwbGUobGluZV9pbmZvPTEsIGNvbF9pbmZvPTEpCiAKQEAgLTI2MSw2ICsyNjAsMTIgQEAKICAgICAgICAgICAgICgwLCAnJywgMiwgLTEpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbHMpCiAKKyAgICBkZWYgdGVzdF9leHRlbmRlZF91bnBhY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIiphID0geSIpCisgICAgICAgIHNlbGYuY2hlY2tfc3VpdGUoIngsICpiLCA9IG0iKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJbKmEsICpiXSA9IHkiKQorICAgICAgICBzZWxmLmNoZWNrX3N1aXRlKCJmb3IgWyp4LCBiXSBpbiB4OiBwYXNzIikKKwogCiAjCiAjICBTZWNvbmQsIHdlIHRha2UgKmludmFsaWQqIHRyZWVzIGFuZCBtYWtlIHN1cmUgd2UgZ2V0IFBhcnNlckVycm9yCkBAIC01MTIsNiArNTE3LDE2IEBACiAgICAgICAgIHN0ID0gcGFyc2VyLnN1aXRlKCdhID0gIlxcdTEiJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHBhcnNlci5jb21waWxlc3QsIHN0KQogCisgICAgZGVmIHRlc3RfaXNzdWVfOTAxMShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA5MDExOiBjb21waWxhdGlvbiBvZiBhbiB1bmFyeSBtaW51cyBleHByZXNzaW9uIGNoYW5nZWQKKyAgICAgICAgIyB0aGUgbWVhbmluZyBvZiB0aGUgU1QsIHNvIHRoYXQgYSBzZWNvbmQgY29tcGlsYXRpb24gcHJvZHVjZWQKKyAgICAgICAgIyBpbmNvcnJlY3QgcmVzdWx0cy4KKyAgICAgICAgc3QgPSBwYXJzZXIuZXhwcignLTMnKQorICAgICAgICBjb2RlMSA9IHBhcnNlci5jb21waWxlc3Qoc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlMSksIC0zKQorICAgICAgICBjb2RlMiA9IHBhcnNlci5jb21waWxlc3Qoc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlMiksIC0zKQorCiBjbGFzcyBQYXJzZXJTdGFja0xpbWl0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiInRyeSB0byBwdXNoIHRoZSBwYXJzZXIgdG8vb3ZlciBpdHMgbGltaXRzLgogICAgIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTg4MSBmb3IgYSBkaXNjdXNzaW9uCkBAIC01MjksNiArNTQ0LDcgQEAKICAgICAgICAgZSA9IHNlbGYuX25lc3RlZF9leHByZXNzaW9uKDEwMCkKICAgICAgICAgcHJpbnQoIkV4cGVjdGluZyAnc19wdXNoOiBwYXJzZXIgc3RhY2sgb3ZlcmZsb3cnIGluIG5leHQgbGluZSIsCiAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBwYXJzZXIuZXhwciwgZSkKIAogY2xhc3MgU1RPYmplY3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BkYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CmluZGV4IDI1ODkxNDEuLmQ4NjFkZjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGRiLnB5CkBAIC0xLDExICsxLDEwIEBACi0jIEEgdGVzdCBzdWl0ZSBmb3IgcGRiOyBhdCB0aGUgbW9tZW50LCB0aGlzIG9ubHkgdmFsaWRhdGVzIHNraXBwaW5nIG9mCi0jIHNwZWNpZmllZCB0ZXN0IG1vZHVsZXMgKFJGRSAjNTE0MikuCisjIEEgdGVzdCBzdWl0ZSBmb3IgcGRiOyBub3QgdmVyeSBjb21wcmVoZW5zaXZlIGF0IHRoZSBtb21lbnQuCiAKIGltcG9ydCBpbXAKLWltcG9ydCBvcworaW1wb3J0IHBkYgogaW1wb3J0IHN5cwotaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3VicHJvY2VzcwogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKICMgVGhpcyBsaXR0bGUgaGVscGVyIGNsYXNzIGlzIGVzc2VudGlhbCBmb3IgdGVzdGluZyBwZGIgdW5kZXIgZG9jdGVzdC4KQEAgLTMwLDcgKzI5LDcgQEAKICAgICAiIiJUaGlzIHRlc3RzIHRoZSBjdXN0b20gZGlzcGxheWhvb2sgZm9yIHBkYi4KIAogICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbihmb28sIGJhcik6Ci0gICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKICAgICAuLi4gICAgIHBhc3MKIAogICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbCkBAIC01NCwxMSArNTMsMTIyIEBACiAgICAgKFBkYikgY29udGludWUKICAgICAiIiIKIAorCitkZWYgdGVzdF9wZGJfYmFzaWNfY29tbWFuZHMoKToKKyAgICAiIiJUZXN0IHRoZSBiYXNpYyBjb21tYW5kcyBvZiBwZGIuCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb25fMihmb28sIGJhcj0nZGVmYXVsdCcpOgorICAgIC4uLiAgICAgcHJpbnQoZm9vKQorICAgIC4uLiAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgLi4uICAgICAgICAgcHJpbnQoaSkKKyAgICAuLi4gICAgIHByaW50KGJhcikKKyAgICAuLi4gICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAuLi4gICAgICAgICBuZXZlcl9leGVjdXRlZAorICAgIC4uLiAgICAgcHJpbnQoJ2FmdGVyIGZvcicpCisgICAgLi4uICAgICBwcmludCgnLi4uJykKKyAgICAuLi4gICAgIHJldHVybiBmb28udXBwZXIoKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICByZXQgPSB0ZXN0X2Z1bmN0aW9uXzIoJ2JheicpCisgICAgLi4uICAgICBwcmludChyZXQpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWyAgIyBkb2N0ZXN0OiArRUxMSVBTSVMsICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgJ3N0ZXAnLCAgICAgICAjIGVudGVyaW5nIHRoZSBmdW5jdGlvbiBjYWxsCisgICAgLi4uICAgICAnYXJncycsICAgICAgICMgZGlzcGxheSBmdW5jdGlvbiBhcmdzCisgICAgLi4uICAgICAnbGlzdCcsICAgICAgICMgbGlzdCBmdW5jdGlvbiBzb3VyY2UKKyAgICAuLi4gICAgICdidCcsICAgICAgICAgIyBkaXNwbGF5IGJhY2t0cmFjZQorICAgIC4uLiAgICAgJ3VwJywgICAgICAgICAjIHN0ZXAgdXAgdG8gdGVzdF9mdW5jdGlvbigpCisgICAgLi4uICAgICAnZG93bicsICAgICAgICMgc3RlcCBkb3duIHRvIHRlc3RfZnVuY3Rpb25fMigpIGFnYWluCisgICAgLi4uICAgICAnbmV4dCcsICAgICAgICMgc3RlcHBpbmcgdG8gcHJpbnQoZm9vKQorICAgIC4uLiAgICAgJ25leHQnLCAgICAgICAjIHN0ZXBwaW5nIHRvIHRoZSBmb3IgbG9vcAorICAgIC4uLiAgICAgJ3N0ZXAnLCAgICAgICAjIHN0ZXBwaW5nIGludG8gdGhlIGZvciBsb29wCisgICAgLi4uICAgICAndW50aWwnLCAgICAgICMgY29udGludWluZyB1bnRpbCBvdXQgb2YgdGhlIGZvciBsb29wCisgICAgLi4uICAgICAnbmV4dCcsICAgICAgICMgZXhlY3V0aW5nIHRoZSBwcmludChiYXIpCisgICAgLi4uICAgICAnanVtcCA4JywgICAgICMganVtcCBvdmVyIHNlY29uZCBmb3IgbG9vcAorICAgIC4uLiAgICAgJ3JldHVybicsICAgICAjIHJldHVybiBvdXQgb2YgZnVuY3Rpb24KKyAgICAuLi4gICAgICdyZXR2YWwnLCAgICAgIyBkaXNwbGF5IHJldHVybiB2YWx1ZQorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9iYXNpY19jb21tYW5kc1sxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiByZXQgPSB0ZXN0X2Z1bmN0aW9uXzIoJ2JheicpCisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Jhc2ljX2NvbW1hbmRzWzBdPigxKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4gZGVmIHRlc3RfZnVuY3Rpb25fMihmb28sIGJhcj0nZGVmYXVsdCcpOgorICAgIChQZGIpIGFyZ3MKKyAgICBmb28gPSAnYmF6JworICAgIGJhciA9ICdkZWZhdWx0JworICAgIChQZGIpIGxpc3QKKyAgICAgIDEgIC0+ICAgICBkZWYgdGVzdF9mdW5jdGlvbl8yKGZvbywgYmFyPSdkZWZhdWx0Jyk6CisgICAgICAyICAgICAgICAgICAgIHByaW50KGZvbykKKyAgICAgIDMgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICA0ICAgICAgICAgICAgICAgICBwcmludChpKQorICAgICAgNSAgICAgICAgICAgICBwcmludChiYXIpCisgICAgICA2ICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgIDcgICAgICAgICAgICAgICAgIG5ldmVyX2V4ZWN1dGVkCisgICAgICA4ICAgICAgICAgICAgIHByaW50KCdhZnRlciBmb3InKQorICAgICAgOSAgICAgICAgICAgICBwcmludCgnLi4uJykKKyAgICAgMTAgICAgICAgICAgICAgcmV0dXJuIGZvby51cHBlcigpCisgICAgW0VPRl0KKyAgICAoUGRiKSBidAorICAgIC4uLgorICAgICAgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9iYXNpY19jb21tYW5kc1syXT4oMTgpPG1vZHVsZT4oKQorICAgIC0+IHRlc3RfZnVuY3Rpb24oKQorICAgICAgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9iYXNpY19jb21tYW5kc1sxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiByZXQgPSB0ZXN0X2Z1bmN0aW9uXzIoJ2JheicpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Jhc2ljX2NvbW1hbmRzWzBdPigxKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4gZGVmIHRlc3RfZnVuY3Rpb25fMihmb28sIGJhcj0nZGVmYXVsdCcpOgorICAgIChQZGIpIHVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Jhc2ljX2NvbW1hbmRzWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHJldCA9IHRlc3RfZnVuY3Rpb25fMignYmF6JykKKyAgICAoUGRiKSBkb3duCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Jhc2ljX2NvbW1hbmRzWzBdPigxKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4gZGVmIHRlc3RfZnVuY3Rpb25fMihmb28sIGJhcj0nZGVmYXVsdCcpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYmFzaWNfY29tbWFuZHNbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiBwcmludChmb28pCisgICAgKFBkYikgbmV4dAorICAgIGJhegorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9iYXNpY19jb21tYW5kc1swXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IGZvciBpIGluIHJhbmdlKDUpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYmFzaWNfY29tbWFuZHNbMF0+KDQpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiBwcmludChpKQorICAgIChQZGIpIHVudGlsCisgICAgMAorICAgIDEKKyAgICAyCisgICAgMworICAgIDQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYmFzaWNfY29tbWFuZHNbMF0+KDUpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiBwcmludChiYXIpCisgICAgKFBkYikgbmV4dAorICAgIGRlZmF1bHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYmFzaWNfY29tbWFuZHNbMF0+KDYpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgKFBkYikganVtcCA4CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2Jhc2ljX2NvbW1hbmRzWzBdPig4KXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4gcHJpbnQoJ2FmdGVyIGZvcicpCisgICAgKFBkYikgcmV0dXJuCisgICAgYWZ0ZXIgZm9yCisgICAgLi4uCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9iYXNpY19jb21tYW5kc1swXT4oMTApdGVzdF9mdW5jdGlvbl8yKCktPidCQVonCisgICAgLT4gcmV0dXJuIGZvby51cHBlcigpCisgICAgKFBkYikgcmV0dmFsCisgICAgJ0JBWicKKyAgICAoUGRiKSBjb250aW51ZQorICAgIEJBWgorICAgICIiIgorCisKIGRlZiB0ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzKCk6CiAgICAgIiIiVGVzdCBiYXNpYyBjb21tYW5kcyByZWxhdGVkIHRvIGJyZWFrcG9pbnRzLgogCiAgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6Ci0gICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKCkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKICAgICAuLi4gICAgIHByaW50KDEpCiAgICAgLi4uICAgICBwcmludCgyKQogICAgIC4uLiAgICAgcHJpbnQoMykKQEAgLTEwNiw5ICsyMTYsMTEgQEAKICAgICAoUGRiKSBicmVhayAzCiAgICAgQnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwogICAgIChQZGIpIGRpc2FibGUgMQorICAgIERpc2FibGVkIGJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKICAgICAoUGRiKSBpZ25vcmUgMSAxMAogICAgIFdpbGwgaWdub3JlIG5leHQgMTAgY3Jvc3NpbmdzIG9mIGJyZWFrcG9pbnQgMS4KICAgICAoUGRiKSBjb25kaXRpb24gMSAxIDwgMgorICAgIE5ldyBjb25kaXRpb24gc2V0IGZvciBicmVha3BvaW50IDEuCiAgICAgKFBkYikgYnJlYWsgNAogICAgIEJyZWFrcG9pbnQgMiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgICAoUGRiKSBicmVhayA0CkBAIC0xMjEsNyArMjMzLDcgQEAKICAgICAyICAgYnJlYWtwb2ludCAgIGtlZXAgeWVzICAgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPjo0CiAgICAgMyAgIGJyZWFrcG9pbnQgICBrZWVwIHllcyAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAogICAgIChQZGIpIGNsZWFyIDMKLSAgICBEZWxldGVkIGJyZWFrcG9pbnQgMworICAgIERlbGV0ZWQgYnJlYWtwb2ludCAzIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NAogICAgIChQZGIpIGJyZWFrCiAgICAgTnVtIFR5cGUgICAgICAgICBEaXNwIEVuYiAgIFdoZXJlCiAgICAgMSAgIGJyZWFrcG9pbnQgICBrZWVwIG5vICAgIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwpAQCAtMTMxLDggKzI0Myw5IEBACiAgICAgKFBkYikgY29uZGl0aW9uIDEKICAgICBCcmVha3BvaW50IDEgaXMgbm93IHVuY29uZGl0aW9uYWwuCiAgICAgKFBkYikgZW5hYmxlIDEKKyAgICBFbmFibGVkIGJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKICAgICAoUGRiKSBjbGVhciAxCi0gICAgRGVsZXRlZCBicmVha3BvaW50IDEKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMSBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjMKICAgICAoUGRiKSBjb21tYW5kcyAyCiAgICAgKGNvbSkgcHJpbnQgNDIKICAgICAoY29tKSBlbmQKQEAgLTE0MywxMSArMjU2LDEyIEBACiAgICAgLT4gcHJpbnQoMikKICAgICAoUGRiKSBjbGVhcgogICAgIENsZWFyIGFsbCBicmVha3M/IHkKKyAgICBEZWxldGVkIGJyZWFrcG9pbnQgMiBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjQKICAgICAoUGRiKSB0YnJlYWsgNQogICAgIEJyZWFrcG9pbnQgNCBhdCA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX2JyZWFrcG9pbnRfY29tbWFuZHNbMF0+OjUKICAgICAoUGRiKSBjb250aW51ZQogICAgIDIKLSAgICBEZWxldGVkIGJyZWFrcG9pbnQgNAorICAgIERlbGV0ZWQgYnJlYWtwb2ludCA0IGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46NQogICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig1KXRlc3RfZnVuY3Rpb24oKQogICAgIC0+IHByaW50KDMpCiAgICAgKFBkYikgYnJlYWsKQEAgLTE1NiwxMiArMjcwLDE3NyBAQAogICAgIDQKICAgICAiIiIKIAorCitkZWYgZG9fbm90aGluZygpOgorICAgIHBhc3MKKworZGVmIGRvX3NvbWV0aGluZygpOgorICAgIHByaW50KDQyKQorCitkZWYgdGVzdF9saXN0X2NvbW1hbmRzKCk6CisgICAgIiIiVGVzdCB0aGUgbGlzdCBhbmQgc291cmNlIGNvbW1hbmRzIG9mIHBkYi4KKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbl8yKGZvbyk6CisgICAgLi4uICAgICBpbXBvcnQgdGVzdC50ZXN0X3BkYgorICAgIC4uLiAgICAgdGVzdC50ZXN0X3BkYi5kb19ub3RoaW5nKCkKKyAgICAuLi4gICAgICdzb21lLi4uJworICAgIC4uLiAgICAgJ21vcmUuLi4nCisgICAgLi4uICAgICAnY29kZS4uLicKKyAgICAuLi4gICAgICd0by4uLicKKyAgICAuLi4gICAgICdtYWtlLi4uJworICAgIC4uLiAgICAgJ2EuLi4nCisgICAgLi4uICAgICAnbG9uZy4uLicKKyAgICAuLi4gICAgICdsaXN0aW5nLi4uJworICAgIC4uLiAgICAgJ3VzZWZ1bC4uLicKKyAgICAuLi4gICAgICcuLi4nCisgICAgLi4uICAgICAnLi4uJworICAgIC4uLiAgICAgcmV0dXJuIGZvbworCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICByZXQgPSB0ZXN0X2Z1bmN0aW9uXzIoJ2JheicpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWyAgIyBkb2N0ZXN0OiArRUxMSVBTSVMsICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgJ2xpc3QnLCAgICAgICMgbGlzdCBmaXJzdCBmdW5jdGlvbgorICAgIC4uLiAgICAgJ3N0ZXAnLCAgICAgICMgc3RlcCBpbnRvIHNlY29uZCBmdW5jdGlvbgorICAgIC4uLiAgICAgJ2xpc3QnLCAgICAgICMgbGlzdCBzZWNvbmQgZnVuY3Rpb24KKyAgICAuLi4gICAgICdsaXN0JywgICAgICAjIGNvbnRpbnVlIGxpc3RpbmcgdG8gRU9GCisgICAgLi4uICAgICAnbGlzdCAxLDMnLCAgIyBsaXN0IHNwZWNpZmljIGxpbmVzCisgICAgLi4uICAgICAnbGlzdCB4JywgICAgIyBpbnZhbGlkIGFyZ3VtZW50CisgICAgLi4uICAgICAnbmV4dCcsICAgICAgIyBzdGVwIHRvIGltcG9ydAorICAgIC4uLiAgICAgJ25leHQnLCAgICAgICMgc3RlcCBvdmVyIGltcG9ydAorICAgIC4uLiAgICAgJ3N0ZXAnLCAgICAgICMgc3RlcCBpbnRvIGRvX25vdGhpbmcKKyAgICAuLi4gICAgICdsb25nbGlzdCcsICAjIGxpc3QgYWxsIGxpbmVzCisgICAgLi4uICAgICAnc291cmNlIGRvX3NvbWV0aGluZycsICAjIGxpc3QgYWxsIGxpbmVzIG9mIGZ1bmN0aW9uCisgICAgLi4uICAgICAnc291cmNlIGZvb3h4eCcsICAgICAgICAjIHNvbWV0aGluZyB0aGF0IGRvZXNuJ3QgZXhpdAorICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gXSk6CisgICAgLi4uICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X2xpc3RfY29tbWFuZHNbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gcmV0ID0gdGVzdF9mdW5jdGlvbl8yKCdiYXonKQorICAgIChQZGIpIGxpc3QKKyAgICAgIDEgICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgICAgMiAgICAgICAgICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgICAzICAtPiAgICAgICAgIHJldCA9IHRlc3RfZnVuY3Rpb25fMignYmF6JykKKyAgICBbRU9GXQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X2xpc3RfY29tbWFuZHNbMF0+KDEpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiBkZWYgdGVzdF9mdW5jdGlvbl8yKGZvbyk6CisgICAgKFBkYikgbGlzdAorICAgICAgMSAgLT4gICAgIGRlZiB0ZXN0X2Z1bmN0aW9uXzIoZm9vKToKKyAgICAgIDIgICAgICAgICAgICAgaW1wb3J0IHRlc3QudGVzdF9wZGIKKyAgICAgIDMgICAgICAgICAgICAgdGVzdC50ZXN0X3BkYi5kb19ub3RoaW5nKCkKKyAgICAgIDQgICAgICAgICAgICAgJ3NvbWUuLi4nCisgICAgICA1ICAgICAgICAgICAgICdtb3JlLi4uJworICAgICAgNiAgICAgICAgICAgICAnY29kZS4uLicKKyAgICAgIDcgICAgICAgICAgICAgJ3RvLi4uJworICAgICAgOCAgICAgICAgICAgICAnbWFrZS4uLicKKyAgICAgIDkgICAgICAgICAgICAgJ2EuLi4nCisgICAgIDEwICAgICAgICAgICAgICdsb25nLi4uJworICAgICAxMSAgICAgICAgICAgICAnbGlzdGluZy4uLicKKyAgICAoUGRiKSBsaXN0CisgICAgIDEyICAgICAgICAgICAgICd1c2VmdWwuLi4nCisgICAgIDEzICAgICAgICAgICAgICcuLi4nCisgICAgIDE0ICAgICAgICAgICAgICcuLi4nCisgICAgIDE1ICAgICAgICAgICAgIHJldHVybiBmb28KKyAgICBbRU9GXQorICAgIChQZGIpIGxpc3QgMSwzCisgICAgICAxICAtPiAgICAgZGVmIHRlc3RfZnVuY3Rpb25fMihmb28pOgorICAgICAgMiAgICAgICAgICAgICBpbXBvcnQgdGVzdC50ZXN0X3BkYgorICAgICAgMyAgICAgICAgICAgICB0ZXN0LnRlc3RfcGRiLmRvX25vdGhpbmcoKQorICAgIChQZGIpIGxpc3QgeAorICAgICoqKiAuLi4KKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbGlzdF9jb21tYW5kc1swXT4oMil0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IGltcG9ydCB0ZXN0LnRlc3RfcGRiCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X2xpc3RfY29tbWFuZHNbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB0ZXN0LnRlc3RfcGRiLmRvX25vdGhpbmcoKQorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gLi4udGVzdF9wZGIucHkoLi4uKWRvX25vdGhpbmcoKQorICAgIC0+IGRlZiBkb19ub3RoaW5nKCk6CisgICAgKFBkYikgbG9uZ2xpc3QKKyAgICAuLi4gIC0+ICAgICBkZWYgZG9fbm90aGluZygpOgorICAgIC4uLiAgICAgICAgICAgICBwYXNzCisgICAgKFBkYikgc291cmNlIGRvX3NvbWV0aGluZworICAgIC4uLiAgICAgICAgIGRlZiBkb19zb21ldGhpbmcoKToKKyAgICAuLi4gICAgICAgICAgICAgcHJpbnQoNDIpCisgICAgKFBkYikgc291cmNlIGZvb3h4eAorICAgICoqKiAuLi4KKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKK2RlZiB0ZXN0X3Bvc3RfbW9ydGVtKCk6CisgICAgIiIiVGVzdCBwb3N0IG1vcnRlbSB0cmFjZWJhY2sgZGVidWdnaW5nLgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uXzIoKToKKyAgICAuLi4gICAgIHRyeToKKyAgICAuLi4gICAgICAgICAxLzAKKyAgICAuLi4gICAgIGZpbmFsbHk6CisgICAgLi4uICAgICAgICAgcHJpbnQoJ0V4Y2VwdGlvbiEnKQorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgcHJpbnQoJ05vdCByZWFjaGVkLicpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWyAgIyBkb2N0ZXN0OiArRUxMSVBTSVMsICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIC4uLiAgICAgJ25leHQnLCAgICAgICMgc3RlcCBvdmVyIGV4Y2VwdGlvbi1yYWlzaW5nIGNhbGwKKyAgICAuLi4gICAgICdidCcsICAgICAgICAjIGdldCBhIGJhY2t0cmFjZQorICAgIC4uLiAgICAgJ2xpc3QnLCAgICAgICMgbGlzdCBjb2RlIG9mIHRlc3RfZnVuY3Rpb24oKQorICAgIC4uLiAgICAgJ2Rvd24nLCAgICAgICMgc3RlcCBpbnRvIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICAnbGlzdCcsICAgICAgIyBsaXN0IGNvZGUgb2YgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgICdjb250aW51ZScsCisgICAgLi4uIF0pOgorICAgIC4uLiAgICB0cnk6CisgICAgLi4uICAgICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICAuLi4gICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgIC4uLiAgICAgICAgcHJpbnQoJ0NvcnJlY3RseSByZXJhaXNlZC4nKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3Bvc3RfbW9ydGVtWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgbmV4dAorICAgIEV4Y2VwdGlvbiEKKyAgICBaZXJvRGl2aXNpb25FcnJvcjogZGl2aXNpb24gYnkgemVybworICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3Bvc3RfbW9ydGVtWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgYnQKKyAgICAuLi4KKyAgICAgIDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wb3N0X21vcnRlbVsyXT4oMTApPG1vZHVsZT4oKQorICAgIC0+IHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3Bvc3RfbW9ydGVtWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgICA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcG9zdF9tb3J0ZW1bMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiAxLzAKKyAgICAoUGRiKSBsaXN0CisgICAgICAxICAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAgIDIgICAgICAgICAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgICAgMyAgLT4gICAgICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgICAgNCAgICAgICAgICAgICBwcmludCgnTm90IHJlYWNoZWQuJykKKyAgICBbRU9GXQorICAgIChQZGIpIGRvd24KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wb3N0X21vcnRlbVswXT4oMyl0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC0+IDEvMAorICAgIChQZGIpIGxpc3QKKyAgICAgIDEgICAgICAgICBkZWYgdGVzdF9mdW5jdGlvbl8yKCk6CisgICAgICAyICAgICAgICAgICAgIHRyeToKKyAgICAgIDMgID4+ICAgICAgICAgICAgIDEvMAorICAgICAgNCAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgNSAgLT4gICAgICAgICAgICAgcHJpbnQoJ0V4Y2VwdGlvbiEnKQorICAgIFtFT0ZdCisgICAgKFBkYikgY29udGludWUKKyAgICBDb3JyZWN0bHkgcmVyYWlzZWQuCisgICAgIiIiCisKKwogZGVmIHRlc3RfcGRiX3NraXBfbW9kdWxlcygpOgogICAgICIiIlRoaXMgaWxsdXN0cmF0ZXMgdGhlIHNpbXBsZSBjYXNlIG9mIG1vZHVsZSBza2lwcGluZy4KIAogICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKICAgICAuLi4gICAgIGltcG9ydCBzdHJpbmcKLSAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ3N0cmkqJ10pLnNldF90cmFjZSgpCisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9WydzdHJpKiddLCBub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQogICAgIC4uLiAgICAgc3RyaW5nLmNhcHdvcmRzKCdGT08nKQogCiAgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKQEAgLTE5MCw3ICs0NjksNyBAQAogICAgID4+PiBkZWYgc2tpcF9tb2R1bGUoKToKICAgICAuLi4gICAgIGRlZiBjYWxsYmFjaygpOgogICAgIC4uLiAgICAgICAgIHJldHVybiBOb25lCi0gICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9Wydtb2R1bGVfdG9fc2tpcConXSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bJ21vZHVsZV90b19za2lwKiddLCBub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQogICAgIC4uLiAgICAgbW9kLmZvb19wb255KGNhbGxiYWNrKQogCiAgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsKQEAgLTIzMSw3ICs1MTAsNyBAQAogICAgICIiIlRlc3QgdGhhdCAiY29udGludWUiIGFuZCAibmV4dCIgd29yayBwcm9wZXJseSBpbiBib3R0b20gZnJhbWUgKGlzc3VlICM1Mjk0KS4KIAogICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgotICAgIC4uLiAgICAgaW1wb3J0IHBkYiwgc3lzOyBpbnN0ID0gcGRiLlBkYigpCisgICAgLi4uICAgICBpbXBvcnQgcGRiLCBzeXM7IGluc3QgPSBwZGIuUGRiKG5vc2lnaW50PVRydWUpCiAgICAgLi4uICAgICBpbnN0LnNldF90cmFjZSgpCiAgICAgLi4uICAgICBpbnN0LmJvdGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpICAjIGhhY2tlcnkgdG8gZ2V0IHRoZSByaWdodCBib3RmcmFtZQogICAgIC4uLiAgICAgcHJpbnQoMSkKQEAgLTIzOSwxNSArNTE4LDcgQEAKICAgICAuLi4gICAgIHByaW50KDMpCiAgICAgLi4uICAgICBwcmludCg0KQogCi0gICAgRmlyc3QsIG5lZWQgdG8gY2xlYXIgYmRiIHN0YXRlIHRoYXQgbWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gcHJldmlvdXMgdGVzdHMuCi0gICAgT3RoZXJ3aXNlLCB0aGUgbmV3IGJyZWFrcG9pbnRzIG1pZ2h0IGdldCBhc3NpZ25lZCBkaWZmZXJlbnQgbnVtYmVycy4KLQotICAgID4+PiBmcm9tIGJkYiBpbXBvcnQgQnJlYWtwb2ludAotICAgID4+PiBCcmVha3BvaW50Lm5leHQgPSAxCi0gICAgPj4+IEJyZWFrcG9pbnQuYnBsaXN0ID0ge30KLSAgICA+Pj4gQnJlYWtwb2ludC5icGJ5bnVtYmVyID0gW05vbmVdCi0KLSAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgIC4uLiAgICAgJ25leHQnLAogICAgIC4uLiAgICAgJ2JyZWFrIDcnLAogICAgIC4uLiAgICAgJ2NvbnRpbnVlJywKQEAgLTI2Miw3ICs1MzMsNyBAQAogICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKICAgICAtPiBwcmludCgxKQogICAgIChQZGIpIGJyZWFrIDcKLSAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9jb250aW51ZV9pbl9ib3R0b21mcmFtZVswXT46NworICAgIEJyZWFrcG9pbnQgLi4uIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfY29udGludWVfaW5fYm90dG9tZnJhbWVbMF0+OjcKICAgICAoUGRiKSBjb250aW51ZQogICAgIDEKICAgICAyCkBAIC0yNzcsMTAgKzU0OCw3NiBAQAogICAgICIiIgogCiAKK2RlZiBwZGJfaW52b2tlKG1ldGhvZCwgYXJnKToKKyAgICAiIiJSdW4gcGRiLm1ldGhvZChhcmcpLiIiIgorICAgIGltcG9ydCBwZGIKKyAgICBnZXRhdHRyKHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSksIG1ldGhvZCkoYXJnKQorCisKK2RlZiB0ZXN0X3BkYl9ydW5fd2l0aF9pbmNvcnJlY3RfYXJndW1lbnQoKToKKyAgICAiIiJUZXN0aW5nIHJ1biBhbmQgcnVuZXZhbCB3aXRoIGluY29ycmVjdCBmaXJzdCBhcmd1bWVudC4KKworICAgID4+PiBwdGkgPSBQZGJUZXN0SW5wdXQoWydjb250aW51ZScsXSkKKyAgICA+Pj4gd2l0aCBwdGk6CisgICAgLi4uICAgICBwZGJfaW52b2tlKCdydW4nLCBsYW1iZGEgeDogeCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVHlwZUVycm9yOiBleGVjKCkgYXJnIDEgbXVzdCBiZSBhIHN0cmluZywgYnl0ZXMgb3IgY29kZSBvYmplY3QKKworICAgID4+PiB3aXRoIHB0aToKKyAgICAuLi4gICAgIHBkYl9pbnZva2UoJ3J1bmV2YWwnLCBsYW1iZGEgeDogeCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVHlwZUVycm9yOiBldmFsKCkgYXJnIDEgbXVzdCBiZSBhIHN0cmluZywgYnl0ZXMgb3IgY29kZSBvYmplY3QKKyAgICAiIiIKKworCitkZWYgdGVzdF9wZGJfcnVuX3dpdGhfY29kZV9vYmplY3QoKToKKyAgICAiIiJUZXN0aW5nIHJ1biBhbmQgcnVuZXZhbCB3aXRoIGNvZGUgb2JqZWN0IGFzIGEgZmlyc3QgYXJndW1lbnQuCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywneCcsICdjb250aW51ZSddKTogICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgLi4uICAgICBwZGJfaW52b2tlKCdydW4nLCBjb21waWxlKCd4PTEnLCAnPHN0cmluZz4nLCAnZXhlYycpKQorICAgID4gPHN0cmluZz4oMSk8bW9kdWxlPigpLi4uCisgICAgKFBkYikgc3RlcAorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxzdHJpbmc+KDEpPG1vZHVsZT4oKS0+Tm9uZQorICAgIChQZGIpIHgKKyAgICAxCisgICAgKFBkYikgY29udGludWUKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3gnLCAnY29udGludWUnXSk6CisgICAgLi4uICAgICB4PTAKKyAgICAuLi4gICAgIHBkYl9pbnZva2UoJ3J1bmV2YWwnLCBjb21waWxlKCd4KzEnLCAnPHN0cmluZz4nLCAnZXZhbCcpKQorICAgID4gPHN0cmluZz4oMSk8bW9kdWxlPigpLT5Ob25lCisgICAgKFBkYikgeAorICAgIDEKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCisKK2NsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKKyAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidwcmludCgidGVzdGluZyBteSBwZGIiKVxyXG4nKQorICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwZGInLCBzdXBwb3J0LlRFU1RGTl0KKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHByb2Muc3Rkb3V0LmNsb3NlKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoYidxdWl0XG4nKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInU3ludGF4RXJyb3InLCBzdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkdvdCBhIHN5bnRheCBlcnJvciBydW5uaW5nIHRlc3Qgc2NyaXB0IHVuZGVyIFBEQiIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfcGRiCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3BkYiwgdmVyYm9zaXR5PVRydWUpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUGRiVGVzdENhc2UpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKaW5kZXggZDFkNTg3NC4uNTM3MTlkMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZWVwaG9sZXIucHkKQEAgLTEsNCArMSw1IEBACiBpbXBvcnQgZGlzCitpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTI1LDkgKzI2LDkgQEAKICAgICAgICAgICAgICAgICBkZWwgeAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZSh1bm90KQogICAgICAgICBmb3IgZWxlbSBpbiAoJ1VOQVJZX05PVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ1BPUF9KVU1QX0lGX1RSVUUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKIAogICAgIGRlZiB0ZXN0X2VsaW1faW52ZXJzaW9uX29mX2lzX29yX2luKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0zNyw3ICszOCw3IEBACiAgICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJyhpbiknLCksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCiAKICAgICBkZWYgdGVzdF9nbG9iYWxfYXNfY29uc3RhbnQoc2VsZik6CiAgICAgICAgICMgTE9BRF9HTE9CQUwgTm9uZS9UcnVlL0ZhbHNlICAtLT4gIExPQURfQ09OU1QgTm9uZS9UcnVlL0ZhbHNlCkBAIC01NCwxNCArNTUsMTQgQEAKICAgICAgICAgZm9yIGZ1bmMsIG5hbWUgaW4gKChmLCAnTm9uZScpLCAoZywgJ1RydWUnKSwgKGgsICdGYWxzZScpKToKICAgICAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGZ1bmMpCiAgICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfR0xPQkFMJywpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIG5vdCBpbiBhc20pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCiAgICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnKCcrbmFtZSsnKScpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIGluIGFzbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKICAgICAgICAgZGVmIGYoKToKICAgICAgICAgICAgICdBZGRpbmcgYSBkb2NzdHJpbmcgbWFkZSB0aGlzIHRlc3QgZmFpbCBpbiBQeTIuNS4wJwogICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdMT0FEX0NPTlNUJyBpbiBkaXNhc3NlbWJsZShmKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdMT0FEX0dMT0JBTCcgbm90IGluIGRpc2Fzc2VtYmxlKGYpKQorICAgICAgICBzZWxmLmFzc2VydEluKCdMT0FEX0NPTlNUJywgZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfR0xPQkFMJywgZGlzYXNzZW1ibGUoZikpCiAKICAgICBkZWYgdGVzdF93aGlsZV9vbmUoc2VsZik6CiAgICAgICAgICMgU2tpcCBvdmVyOiAgTE9BRF9DT05TVCB0cnVlY29uc3QgIFBPUF9KVU1QX0lGX0ZBTFNFIHh4CkBAIC03MSw5ICs3Miw5IEBACiAgICAgICAgICAgICByZXR1cm4gbGlzdAogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQogICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIG5vdCBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIGFzbSkKICAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0FCU09MVVRFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCiAKICAgICBkZWYgdGVzdF9wYWNrX3VucGFjayhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtODIsOSArODMsOSBAQAogICAgICAgICAgICAgKCdhLCBiLCBjID0gYSwgYiwgYycsICdST1RfVEhSRUUnLCksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdCVUlMRF9UVVBMRScgbm90IGluIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVU5QQUNLX1RVUExFJyBub3QgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ1VOUEFDS19UVVBMRScsIGFzbSkKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdHVwbGVzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKApAQCAtOTUsOCArOTYsOCBAQAogICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICcoKCgxLCAyKSwgMywgNCkpJyksCiAgICAgICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdCVUlMRF9UVVBMRScgbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCiAKICAgICAgICAgIyBCdWcgMTA1MzgxOTogIFR1cGxlIG9mIGNvbnN0YW50cyBtaXNpZGVudGlmaWVkIHdoZW4gcHJlc2VudGVkIHdpdGg6CiAgICAgICAgICMgLiAuIC4gb3Bjb2RlX3dpdGhfYXJnIDEwMCAgIHVuYXJ5X29wY29kZSAgIEJVSUxEX1RVUExFIDEgIC4gLiAuCkBAIC0xMTUsNiArMTE2LDU0IEBACiAgICAgICAgICAgICAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwKICAgICAgICAgICAgIF0sKQogCisgICAgZGVmIHRlc3RfZm9sZGluZ19vZl9saXN0c19vZl9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX0xJU1Qgc2hvdWxkIGJlIGZvbGRlZCB0byBhIHR1cGxlOgorICAgICAgICAgICAgKCdhIGluIFsxLDIsM10nLCAnKDEsIDIsIDMpJyksCisgICAgICAgICAgICAoJ2Egbm90IGluIFsiYSIsImIiLCJjIl0nLCAiKCgnYScsICdiJywgJ2MnKSkiKSwKKyAgICAgICAgICAgICgnYSBpbiBbTm9uZSwgMSwgTm9uZV0nLCAnKChOb25lLCAxLCBOb25lKSknKSwKKyAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAnKCgoMSwgMiksIDMsIDQpKScpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfTElTVCcsIGFzbSkKKworICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2Zfc2V0c19vZl9jb25zdGFudHMoc2VsZik6CisgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKKyAgICAgICAgICAgICMgaW4vbm90IGluIGNvbnN0YW50cyB3aXRoIEJVSUxEX1NFVCBzaG91bGQgYmUgZm9sZGVkIHRvIGEgZnJvemVuc2V0OgorICAgICAgICAgICAgKCdhIGluIHsxLDIsM30nLCBmcm96ZW5zZXQoezEsIDIsIDN9KSksCisgICAgICAgICAgICAoJ2Egbm90IGluIHsiYSIsImIiLCJjIn0nLCBmcm96ZW5zZXQoeydhJywgJ2MnLCAnYid9KSksCisgICAgICAgICAgICAoJ2EgaW4ge05vbmUsIDEsIE5vbmV9JywgZnJvemVuc2V0KHsxLCBOb25lfSkpLAorICAgICAgICAgICAgKCdhIG5vdCBpbiB7KDEsIDIpLCAzLCA0fScsIGZyb3plbnNldCh7KDEsIDIpLCAzLCA0fSkpLAorICAgICAgICAgICAgKCdhIGluIHsxLCAyLCAzLCAzLCAyLCAxfScsIGZyb3plbnNldCh7MSwgMiwgM30pKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9TRVQnLCBhc20pCisKKyAgICAgICAgICAgICMgVmVyaWZ5IHRoYXQgdGhlIGZyb3plbnNldCAnZWxlbScgaXMgaW4gdGhlIGRpc2Fzc2VtYmx5CisgICAgICAgICAgICAjIFRoZSBvcmRlcmluZyBvZiB0aGUgZWxlbWVudHMgaW4gcmVwciggZnJvemVuc2V0ICkgaXNuJ3QKKyAgICAgICAgICAgICMgZ3VhcmFudGVlZCwgc28gd2UganVtcCB0aHJvdWdoIHNvbWUgaG9vcHMgdG8gZW5zdXJlIHRoYXQgd2UgaGF2ZQorICAgICAgICAgICAgIyB0aGUgZnJvemVuc2V0IHdlIGV4cGVjdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Zyb3plbnNldCcsIGFzbSkKKyAgICAgICAgICAgICMgRXh0cmFjdCB0aGUgZnJvemVuc2V0IGxpdGVyYWwgZnJvbSB0aGUgZGlzYXNzZW1ibHk6CisgICAgICAgICAgICBtID0gcmUubWF0Y2gocicuKihmcm96ZW5zZXRcKHsuKn1cKSkuKicsIGFzbSwgcmUuRE9UQUxMKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwobS5ncm91cCgxKSksIGVsZW0pCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgYWN0dWFsbHkgd29ya3M6CisgICAgICAgIGRlZiBmKGEpOgorICAgICAgICAgICAgcmV0dXJuIGEgaW4gezEsIDIsIDN9CisKKyAgICAgICAgZGVmIGcoYSk6CisgICAgICAgICAgICByZXR1cm4gYSBub3QgaW4gezEsIDIsIDN9CisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZig0KSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGcoMykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnKDQpKQorCisKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2Jpbm9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKICAgICAgICAgICAgICgnYSA9IDIrMys0JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZApAQCAtMTM0LDE3ICsxODMsMTcgQEAKICAgICAgICAgICAgICgnYSA9IDEzIHwgNycsICcoMTUpJyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgogICAgICAgICAgICAgKToKICAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIGluIGFzbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdCSU5BUllfJyBub3QgaW4gYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20sIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV8nLCBhc20pCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAogICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPTIrImIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcoMiknIGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCIoJ2InKSIgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCcoMiknLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIignYicpIiwgYXNtKQogCiAgICAgICAgICMgVmVyaWZ5IHRoYXQgbGFyZ2Ugc2VxdWVuY2VzIGRvIG5vdCByZXN1bHQgZnJvbSBmb2xkaW5nCiAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUoJ2E9IngiKjEwMDAnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJygxMDAwKScgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydEluKCcoMTAwMCknLCBhc20pCiAKICAgICBkZWYgdGVzdF9iaW5hcnlfc3Vic2NyX29uX3VuaWNvZGUoc2VsZik6CiAgICAgICAgICMgdmFsaWQgY29kZSBnZXQgb3B0aW1pemVkCkBAIC0xNjgsMTAgKzIxNywxMSBAQAogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCiAgICAgICAgICAgICAoJy0wLjUnLCAnKC0wLjUpJyksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQogICAgICAgICAgICAgKCd+LTInLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CisgICAgICAgICAgICAoJysxJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQogICAgICAgICApOgogICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW0gaW4gYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1VOQVJZXycgbm90IGluIGFzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20pCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0xNzksMTYgKzIyOSwxNiBAQAogICAgICAgICAgICAgKCd+ImFiYyInLCAiKCdhYmMnKSIpLCAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0CiAgICAgICAgICk6CiAgICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBpbiBhc20sIGFzbSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnVU5BUllfJyBpbiBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSwgYXNtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignVU5BUllfJywgYXNtKQogCiAgICAgZGVmIHRlc3RfZWxpbV9leHRyYV9yZXR1cm4oc2VsZik6CiAgICAgICAgICMgUkVUVVJOIExPQURfQ09OU1QgTm9uZSBSRVRVUk4gIC0tPiAgUkVUVVJOCiAgICAgICAgIGRlZiBmKHgpOgogICAgICAgICAgICAgcmV0dXJuIHgKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdMT0FEX0NPTlNUJyBub3QgaW4gYXNtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJyhOb25lKScgbm90IGluIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTE9BRF9DT05TVCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignKE5vbmUpJywgYXNtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF90b19yZXR1cm4oc2VsZik6CkBAIC0xOTYsOCArMjQ2LDggQEAKICAgICAgICAgZGVmIGYoY29uZCwgdHJ1ZV92YWx1ZSwgZmFsc2VfdmFsdWUpOgogICAgICAgICAgICAgcmV0dXJuIHRydWVfdmFsdWUgaWYgY29uZCBlbHNlIGZhbHNlX3ZhbHVlCiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSlVNUF9GT1JXQVJEJyBub3QgaW4gYXNtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0pVTVBfQUJTT0xVVEUnIG5vdCBpbiBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfYWZ0ZXJfcmV0dXJuMShzZWxmKToKQEAgLTIxMiw4ICsyNjIsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiA1CiAgICAgICAgICAgICByZXR1cm4gNgogICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0pVTVBfRk9SV0FSRCcgbm90IGluIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdKVU1QX0FCU09MVVRFJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfQUJTT0xVVEUnLCBhc20pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCA2KQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CkBAIC0yMjIsNyArMjcyLDcgQEAKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgY29uZDE6IHJldHVybiA0CiAgICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnSlVNUF9GT1JXQVJEJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCiAgICAgICAgICMgVGhlcmUgc2hvdWxkIGJlIG9uZSBqdW1wIGZvciB0aGUgd2hpbGUgbG9vcC4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnSlVNUF9BQlNPTFVURScpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgMikKQEAgLTIzMywxMyArMjgzLDI1IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGcKICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdCSU5BUllfQUREJyBub3QgaW4gYXNtKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfQUREJywgYXNtKQorCitjbGFzcyBUZXN0QnVnbGV0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9idWdfMTE1MTAoc2VsZik6CisgICAgICAgICMgZm9sZGVkIGNvbnN0YW50IHNldCBvcHRpbWl6YXRpb24gd2FzIGNvbW1pbmdsZWQgd2l0aCB0aGUgdHVwbGUKKyAgICAgICAgIyB1bnBhY2tpbmcgb3B0aW1pemF0aW9uIHdoaWNoIHdvdWxkIGZhaWwgaWYgdGhlIHNldCBoYWQgZHVwbGljYXRlCisgICAgICAgICMgZWxlbWVudHMgc28gdGhhdCB0aGUgc2V0IGxlbmd0aCB3YXMgdW5leHBlY3RlZAorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgeCwgeSA9IHsxLCAxfQorICAgICAgICAgICAgcmV0dXJuIHgsIHkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGYoKQogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBpbXBvcnQgc3lzCiAgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci0gICAgdGVzdF9jbGFzc2VzID0gKFRlc3RUcmFuZm9ybXMsKQorICAgIHRlc3RfY2xhc3NlcyA9IChUZXN0VHJhbmZvcm1zLCBUZXN0QnVnbGV0cykKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQogCiAgICAgIyB2ZXJpZnkgcmVmZXJlbmNlIGNvdW50aW5nCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CmluZGV4IGMxNTlhZjkuLjU5OGQ5ODAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbXBpbGUoYiIjIGNvZGluZzogY3A5MzJcbnByaW50ICdceDk0XHg0ZSciLCAiZHVtbXkiLCAiZXhlYyIpCiAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyB2OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0JyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGV4dCwgInByaW50ICdcdTVlNzQnXG4iKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCAxMTAzOWFjLi42ZDg5MWU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtMSwyMiArMSw1OCBAQAogIyBUZXN0IHRoZSBVbmljb2RlIHZlcnNpb25zIG9mIG5vcm1hbCBmaWxlIGZ1bmN0aW9ucwogIyBvcGVuLCBvcy5vcGVuLCBvcy5zdGF0LiBvcy5saXN0ZGlyLCBvcy5yZW5hbWUsIG9zLnJlbW92ZSwgb3MubWtkaXIsIG9zLmNoZGlyLCBvcy5ybWRpcgogaW1wb3J0IHN5cywgb3MsIHVuaXR0ZXN0Citmcm9tIHVuaWNvZGVkYXRhIGltcG9ydCBub3JtYWxpemUKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6Ci0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInRlc3Qgd29ya3Mgb25seSBvbiBOVCsiKQogCiBmaWxlbmFtZXMgPSBbCi0gICAgJ2FiYycsCi0gICAgJ2FzY2lpJywKLSAgICAnR3JceGZjXHhkZi1Hb3R0JywKLSAgICAnXHUwMzkzXHUwM2I1XHUwM2I5XHUwM2FjLVx1MDNjM1x1MDNiMVx1MDNjMicsCi0gICAgJ1x1MDQxN1x1MDQzNFx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQ0M1x1MDQzOVx1MDQ0Mlx1MDQzNScsCi0gICAgJ1x1MzA2Ylx1MzA3ZFx1MzA5MycsCi0gICAgJ1x1MDVkNFx1MDVlOVx1MDVlN1x1MDVlNlx1MDVlNVx1MDVlMScsCi0gICAgJ1x1NjZlOFx1NjZlOVx1NjZlYicsCi0gICAgJ1x1NjZlOFx1MDVlOVx1MzA5M1x1MDQzNFx1MDM5M1x4ZGYnLAorICAgICcxX2FiYycsCisgICAgJzJfYXNjaWknLAorICAgICczX0dyXHhmY1x4ZGYtR290dCcsCisgICAgJzRfXHUwMzkzXHUwM2I1XHUwM2I5XHUwM2FjLVx1MDNjM1x1MDNiMVx1MDNjMicsCisgICAgJzVfXHUwNDE3XHUwNDM0XHUwNDQwXHUwNDMwXHUwNDMyXHUwNDQxXHUwNDQyXHUwNDMyXHUwNDQzXHUwNDM5XHUwNDQyXHUwNDM1JywKKyAgICAnNl9cdTMwNmJcdTMwN2RcdTMwOTMnLAorICAgICc3X1x1MDVkNFx1MDVlOVx1MDVlN1x1MDVlNlx1MDVlNVx1MDVlMScsCisgICAgJzhfXHU2NmU4XHU2NmU5XHU2NmViJywKKyAgICAnOV9cdTY2ZThcdTA1ZTlcdTMwOTNcdTA0MzRcdTAzOTNceGRmJywKKyAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBmbiwgTkZDKGZuKSBhbmQgTkZLQyhmbikgYWxsIGRpZmZlcmVudHMKKyAgICAnMTBfXHUxZmVlXHUxZmZkJywKICAgICBdCiAKKyMgTWFjIE9TIFggZGVjb21wb3NlcyBVbmljb2RlIG5hbWVzLCB1c2luZyBOb3JtYWwgRm9ybSBELgorIyBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9tYWMvbGlicmFyeS9xYS9xYTIwMDEvcWExMTczLmh0bWwKKyMgIkhvd2V2ZXIsIG1vc3Qgdm9sdW1lIGZvcm1hdHMgZG8gbm90IGZvbGxvdyB0aGUgZXhhY3Qgc3BlY2lmaWNhdGlvbiBmb3IKKyMgdGhlc2Ugbm9ybWFsIGZvcm1zLiAgRm9yIGV4YW1wbGUsIEhGUyBQbHVzIHVzZXMgYSB2YXJpYW50IG9mIE5vcm1hbCBGb3JtIEQKKyMgaW4gd2hpY2ggVSsyMDAwIHRocm91Z2ggVSsyRkZGLCBVK0Y5MDAgdGhyb3VnaCBVK0ZBRkYsIGFuZCBVKzJGODAwIHRocm91Z2gKKyMgVSsyRkFGRiBhcmUgbm90IGRlY29tcG9zZWQuIgoraWYgc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nOgorICAgIGZpbGVuYW1lcy5leHRlbmQoWworICAgICAgICAjIFNwZWNpZmljIGNvZGUgcG9pbnRzOiBORkMoZm4pLCBORkQoZm4pLCBORktDKGZuKSBhbmQgTkZLRChmbikgYWxsIGRpZmZlcmVudHMKKyAgICAgICAgJzExX1x1MDM4NVx1MDNkM1x1MDNkNCcsCisgICAgICAgICcxMl9cdTAwYThcdTAzMDFcdTAzZDJcdTAzMDFcdTAzZDJcdTAzMDgnLCAjID09IE5GRCgnXHUwMzg1XHUwM2QzXHUwM2Q0JykKKyAgICAgICAgJzEzX1x1MDAyMFx1MDMwOFx1MDMwMVx1MDM4ZVx1MDNhYicsICAgICAgICMgPT0gTkZLQygnXHUwMzg1XHUwM2QzXHUwM2Q0JykKKyAgICAgICAgJzE0X1x1MWU5Ylx1MWZjMVx1MWZjZFx1MWZjZVx1MWZjZlx1MWZkZFx1MWZkZVx1MWZkZlx1MWZlZCcsCisKKyAgICAgICAgIyBTcGVjaWZpYyBjb2RlIHBvaW50czogZm4sIE5GQyhmbikgYW5kIE5GS0MoZm4pIGFsbCBkaWZmZXJlbnRzCisgICAgICAgICcxNV9cdTFmZWVcdTFmZmRcdWZhZDEnLAorICAgICAgICAnMTZfXHUyMDAwXHUyMDAwXHUyMDAwQScsCisgICAgICAgICcxN19cdTIwMDFcdTIwMDFcdTIwMDFBJywKKyAgICAgICAgJzE4X1x1MjAwM1x1MjAwM1x1MjAwM0EnLCAgIyA9PSBORkMoJ1x1MjAwMVx1MjAwMVx1MjAwMUEnKQorICAgICAgICAnMTlfXHUwMDIwXHUwMDIwXHUwMDIwQScsICAjICdcdTAwMjAnID09ICcgJyA9PSBORktDKCdcdTIwMDAnKSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICBORktDKCdcdTIwMDEnKSA9PSBORktDKCdcdTIwMDMnKQorXSkKKworCisjIElzIGl0IFVuaWNvZGUtZnJpZW5kbHk/CitpZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKKyAgICBmc2VuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgdHJ5OgorICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICBuYW1lLmVuY29kZShmc2VuY29kaW5nKQorICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvbmx5IE5UKyBhbmQgc3lzdGVtcyB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGUtZnJpZW5kbHkgZmlsZXN5c3RlbSBlbmNvZGluZyIpCisKKwogIyBEZXN0cm95IGRpcmVjdG9yeSBkaXJuYW1lIGFuZCBhbGwgZmlsZXMgdW5kZXIgaXQsIHRvIG9uZSBsZXZlbC4KIGRlZiBkZWx0cmVlKGRpcm5hbWUpOgogICAgICMgRG9uJ3QgaGlkZSBsZWdpdGltYXRlIGVycm9yczogIGlmIG9uZSBvZiB0aGVzZSBzdWNrZXJzIGV4aXN0cywgaXQncwpAQCAtMjcsMzUgKzYzLDQ1IEBACiAgICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIGZuYW1lKSkKICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAorCiBjbGFzcyBVbmljb2RlRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBmaWxlcyA9IFtvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sIGYpIGZvciBmIGluIGZpbGVuYW1lc10KKyAgICBmaWxlcyA9IHNldChmaWxlbmFtZXMpCisgICAgbm9ybWFsX2Zvcm0gPSBOb25lCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmlsZXMgPSBzZXQoKQogICAgICAgICBmb3IgbmFtZSBpbiBzZWxmLmZpbGVzOgotICAgICAgICAgICAgZiA9IG9wZW4obmFtZSwgJ3diJykKLSAgICAgICAgICAgIGYud3JpdGUoKG5hbWUrJ1xuJykuZW5jb2RlKCJ1dGYtOCIpKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBzZWxmLm5vcm0obmFtZSkpCisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKChuYW1lKydcbicpLmVuY29kZSgidXRmLTgiKSkKICAgICAgICAgICAgIG9zLnN0YXQobmFtZSkKKyAgICAgICAgICAgIGZpbGVzLmFkZChuYW1lKQorICAgICAgICBzZWxmLmZpbGVzID0gZmlsZXMKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZGVsdHJlZShzdXBwb3J0LlRFU1RGTikKIAorICAgIGRlZiBub3JtKHNlbGYsIHMpOgorICAgICAgICBpZiBzZWxmLm5vcm1hbF9mb3JtOgorICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZShzZWxmLm5vcm1hbF9mb3JtLCBzKQorICAgICAgICByZXR1cm4gcworCiAgICAgZGVmIF9hcHBseV9mYWlsdXJlKHNlbGYsIGZuLCBmaWxlbmFtZSwgZXhwZWN0ZWRfZXhjZXB0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICBjaGVja19mbl9pbl9leGNlcHRpb24gPSBUcnVlKToKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGVjdGVkX2V4Y2VwdGlvbikgYXMgYzoKICAgICAgICAgICAgIGZuKGZpbGVuYW1lKQotICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKCJFeHBlY3RlZCB0byBmYWlsIGNhbGxpbmcgJyVzKCVyKSciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSkpCi0gICAgICAgIGV4Y2VwdCBleHBlY3RlZF9leGNlcHRpb24gYXMgZGV0YWlsczoKLSAgICAgICAgICAgIGlmIGNoZWNrX2ZuX2luX2V4Y2VwdGlvbiBhbmQgZGV0YWlscy5maWxlbmFtZSAhPSBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkZ1bmN0aW9uICclcyglcikgZmFpbGVkIHdpdGggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBmaWxlbmFtZSBpbiB0aGUgZXhjZXB0aW9uOiAlciIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMuZmlsZW5hbWUpKQorICAgICAgICBleGNfZmlsZW5hbWUgPSBjLmV4Y2VwdGlvbi5maWxlbmFtZQorICAgICAgICAjIHRoZSAiZmlsZW5hbWUiIGV4Y2VwdGlvbiBhdHRyaWJ1dGUgbWF5IGJlIGVuY29kZWQKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGNfZmlsZW5hbWUsIGJ5dGVzKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkKKyAgICAgICAgaWYgY2hlY2tfZm5faW5fZXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfZmlsZW5hbWUsIGZpbGVuYW1lLCAiRnVuY3Rpb24gJyVzKCVhKSBmYWlsZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBiYWQgZmlsZW5hbWUgaW4gdGhlIGV4Y2VwdGlvbjogJWEiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZuLl9fbmFtZV9fLCBmaWxlbmFtZSwgZXhjX2ZpbGVuYW1lKSkKIAogICAgIGRlZiB0ZXN0X2ZhaWx1cmVzKHNlbGYpOgogICAgICAgICAjIFBhc3Mgbm9uLWV4aXN0aW5nIFVuaWNvZGUgZmlsZW5hbWVzIGFsbCBvdmVyIHRoZSBwbGFjZS4KQEAgLTc2LDM5ICsxMjIsODcgQEAKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgb3Muc3RhdChuYW1lKQogCisgICAgIyBTa2lwIHRoZSB0ZXN0IG9uIGRhcndpbiwgYmVjYXVzZSBkYXJ3aW4gZG9lcyBub3JtYWxpemUgdGhlIGZpbGVuYW1lIHRvCisgICAgIyBORkQgKGEgdmFyaWFudCBvZiBVbmljb2RlIE5GRCBmb3JtKS4gTm9ybWFsaXplIHRoZSBmaWxlbmFtZSB0byBORkMsIE5GS0MsCisgICAgIyBORktEIGluIFB5dGhvbiBpcyB1c2VsZXNzLCBiZWNhdXNlIGRhcndpbiB3aWxsIG5vcm1hbGl6ZSBpdCBsYXRlciBhbmQgc28KKyAgICAjIG9wZW4oKSwgb3Muc3RhdCgpLCBldGMuIGRvbid0IHJhaXNlIGFueSBleGNlcHRpb24uCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICdpcnJldmVsYW50IHRlc3Qgb24gTWFjIE9TIFgnKQorICAgIGRlZiB0ZXN0X25vcm1hbGl6ZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBzZXQoc2VsZi5maWxlcykKKyAgICAgICAgb3RoZXJzID0gc2V0KCkKKyAgICAgICAgZm9yIG5mIGluIHNldChbJ05GQycsICdORkQnLCAnTkZLQycsICdORktEJ10pOgorICAgICAgICAgICAgb3RoZXJzIHw9IHNldChub3JtYWxpemUobmYsIGZpbGUpIGZvciBmaWxlIGluIGZpbGVzKQorICAgICAgICBvdGhlcnMgLT0gZmlsZXMKKyAgICAgICAgZm9yIG5hbWUgaW4gb3RoZXJzOgorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcGVuLCBuYW1lLCBJT0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5zdGF0LCBuYW1lLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5fYXBwbHlfZmFpbHVyZShvcy5jaGRpciwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgIHNlbGYuX2FwcGx5X2ZhaWx1cmUob3Mucm1kaXIsIG5hbWUsIE9TRXJyb3IpCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLnJlbW92ZSwgbmFtZSwgT1NFcnJvcikKKyAgICAgICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lLCBzbyBkb250IGNoZWNrCisgICAgICAgICAgICBzZWxmLl9hcHBseV9mYWlsdXJlKG9zLmxpc3RkaXIsIG5hbWUsIE9TRXJyb3IsIEZhbHNlKQorCisgICAgIyBTa2lwIHRoZSB0ZXN0IG9uIGRhcndpbiwgYmVjYXVzZSBkYXJ3aW4gdXNlcyBhIG5vcm1hbGl6YXRpb24gZGlmZmVyZW50CisgICAgIyB0aGFuIFB5dGhvbiBORkQgbm9ybWFsaXphdGlvbjogZmlsZW5hbWVzIGFyZSBkaWZmZXJlbnQgZXZlbiBpZiB3ZSB1c2UKKyAgICAjIFB5dGhvbiBORkQgbm9ybWFsaXphdGlvbi4KKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJywgJ2lycmV2ZWxhbnQgdGVzdCBvbiBNYWMgT1MgWCcpCiAgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKLSAgICAgICAgZjEgPSBvcy5saXN0ZGlyKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICBmMiA9IG9zLmxpc3RkaXIoc3RyKHN1cHBvcnQuVEVTVEZOLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpKSkKLSAgICAgICAgc2YyID0gc2V0KCJcXCIuam9pbigoc3RyKHN1cHBvcnQuVEVTVEZOKSwgZikpCi0gICAgICAgICAgICAgICAgICBmb3IgZiBpbiBmMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZjEpLCBsZW4oc2VsZi5maWxlcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YyLCBzZXQoc2VsZi5maWxlcykpCisgICAgICAgIHNmMCA9IHNldChzZWxmLmZpbGVzKQorICAgICAgICBmMSA9IG9zLmxpc3RkaXIoc3VwcG9ydC5URVNURk4uZW5jb2RlKHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSkpCisgICAgICAgIGYyID0gb3MubGlzdGRpcihzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2YyID0gc2V0KG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZikgZm9yIGYgaW4gZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2YwLCBzZjIsICIlYSAhPSAlYSIgJSAoc2YwLCBzZjIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmMSksIGxlbihmMikpCiAKICAgICBkZWYgdGVzdF9yZW5hbWUoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6Ci0gICAgICAgICAgICBvcy5yZW5hbWUobmFtZSwidG1wIikKLSAgICAgICAgICAgIG9zLnJlbmFtZSgidG1wIixuYW1lKQorICAgICAgICAgICAgb3MucmVuYW1lKG5hbWUsICJ0bXAiKQorICAgICAgICAgICAgb3MucmVuYW1lKCJ0bXAiLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgotICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCdHclx4ZmNceGRmLVx1NjZlOFx1NjZlOVx1NjZlYicpCisgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdHclx4ZmNceGRmLVx1NjZlOFx1NjZlOVx1NjZlYicpCiAgICAgICAgIGZpbGVuYW1lID0gJ1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJwogICAgICAgICBvbGR3ZCA9IG9zLmdldGN3ZCgpCiAgICAgICAgIG9zLm1rZGlyKGRpcm5hbWUpCiAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAnd2InKQotICAgICAgICBmLndyaXRlKChmaWxlbmFtZSArICdcbicpLmVuY29kZSgidXRmLTgiKSkKLSAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIG9zLmFjY2VzcyhmaWxlbmFtZSxvcy5SX09LKQotICAgICAgICBvcy5yZW1vdmUoZmlsZW5hbWUpCi0gICAgICAgIG9zLmNoZGlyKG9sZHdkKQotICAgICAgICBvcy5ybWRpcihkaXJuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCisgICAgICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZHdkKQorICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKworCitjbGFzcyBVbmljb2RlTkZDRmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GQycKKworCitjbGFzcyBVbmljb2RlTkZERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GRCcKKworCitjbGFzcyBVbmljb2RlTkZLQ0ZpbGVUZXN0cyhVbmljb2RlRmlsZVRlc3RzKToKKyAgICBub3JtYWxfZm9ybSA9ICdORktDJworCisKK2NsYXNzIFVuaWNvZGVORktERmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgorICAgIG5vcm1hbF9mb3JtID0gJ05GS0QnCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKLSAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVW5pY29kZUZpbGVUZXN0cykKKyAgICAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICBVbmljb2RlRmlsZVRlc3RzLAorICAgICAgICAgICAgVW5pY29kZU5GQ0ZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORkRGaWxlVGVzdHMsCisgICAgICAgICAgICBVbmljb2RlTkZLQ0ZpbGVUZXN0cywKKyAgICAgICAgICAgIFVuaWNvZGVORktERmlsZVRlc3RzLAorICAgICAgICApCiAgICAgZmluYWxseToKICAgICAgICAgZGVsdHJlZShzdXBwb3J0LlRFU1RGTikKIAorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CmluZGV4IGNlOWI2NjMuLjExOWM3ZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CkBAIC00Miw2ICs0MiwxOSBAQAogICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJCQnKQogICAgICAgICBlcShzLnN1YnN0aXR1dGUoZGljdCh3aG89J3RpbScsIHdoYXQ9J2hhbScpKSwgJ3RpbSBsaWtlcyAkJykKIAorICAgIGRlZiB0ZXN0X2ludmFsaWQoc2VsZik6CisgICAgICAgIGNsYXNzIE15UGF0dGVybihUZW1wbGF0ZSk6CisgICAgICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgKD86CisgICAgICAgICAgICAoP1A8aW52YWxpZD4pICAgICAgICAgICAgfAorICAgICAgICAgICAgKD9QPGVzY2FwZWQ+JShkZWxpbSlzKSAgIHwKKyAgICAgICAgICAgIEAoP1A8bmFtZWQ+JShpZClzKSAgICAgICB8CisgICAgICAgICAgICBAeyg/UDxicmFjZWQ+JShpZClzKX0gICAgCisgICAgICAgICAgICApCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcyA9IE15UGF0dGVybignJCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCgpKSAKKwogICAgIGRlZiB0ZXN0X3BlcmNlbnRzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgcyA9IFRlbXBsYXRlKCclKGZvbylzICRmb28gJHtmb299JykKQEAgLTg2LDEzICs5OSw2IEBACiAgICAgICAgIHMgPSBUZW1wbGF0ZSgnJHdobyBsaWtlcyAkMTAwJykKICAgICAgICAgcmFpc2VzKFZhbHVlRXJyb3IsIHMuc3Vic3RpdHV0ZSwgZGljdCh3aG89J3RpbScpKQogCi0gICAgZGVmIHRlc3RfZGVsaW1pdGVyX292ZXJyaWRlKHNlbGYpOgotICAgICAgICBjbGFzcyBQaWVEZWxpbXMoVGVtcGxhdGUpOgotICAgICAgICAgICAgZGVsaW1pdGVyID0gJ0AnCi0gICAgICAgIHMgPSBQaWVEZWxpbXMoJ0B3aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEB7d2hhdH0gd29ydGggJDEwMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQotCiAgICAgZGVmIHRlc3RfaWRwYXR0ZXJuX292ZXJyaWRlKHNlbGYpOgogICAgICAgICBjbGFzcyBQYXRoUGF0dGVybihUZW1wbGF0ZSk6CiAgICAgICAgICAgICBpZHBhdHRlcm4gPSByJ1tfYS16XVsuX2EtejAtOV0qJwpAQCAtMTMyLDYgKzEzOCw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIHt9KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLnNhZmVfc3Vic3RpdHV0ZSwge30pCiAKKyAgICBkZWYgdGVzdF9icmFjZWRfb3ZlcnJpZGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15VGVtcGxhdGUoVGVtcGxhdGUpOgorICAgICAgICAgICAgcGF0dGVybiA9IHIiIiIKKyAgICAgICAgICAgIFwkKD86CisgICAgICAgICAgICAgICg/UDxlc2NhcGVkPiQpICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAoP1A8bmFtZWQ+W19hLXpdW19hLXowLTldKikgICAgICAgIHwKKyAgICAgICAgICAgICAgQEAoP1A8YnJhY2VkPltfYS16XVtfYS16MC05XSopQEAgICB8CisgICAgICAgICAgICAgICg/UDxpbnZhbGlkPikgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICApCisgICAgICAgICAgICIiIgorCisgICAgICAgIHRtcGwgPSAnUHlDb24gaW4gJEBAbG9jYXRpb25AQCcKKyAgICAgICAgdCA9IE15VGVtcGxhdGUodG1wbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHQuc3Vic3RpdHV0ZSwge30pCisgICAgICAgIHZhbCA9IHQuc3Vic3RpdHV0ZSh7J2xvY2F0aW9uJzogJ0NsZXZlbGFuZCd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgJ1B5Q29uIGluIENsZXZlbGFuZCcpCisKKyAgICBkZWYgdGVzdF9icmFjZWRfb3ZlcnJpZGVfc2FmZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlUZW1wbGF0ZShUZW1wbGF0ZSk6CisgICAgICAgICAgICBwYXR0ZXJuID0gciIiIgorICAgICAgICAgICAgXCQoPzoKKyAgICAgICAgICAgICAgKD9QPGVzY2FwZWQ+JCkgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICg/UDxuYW1lZD5bX2Etel1bX2EtejAtOV0qKSAgICAgICAgfAorICAgICAgICAgICAgICBAQCg/UDxicmFjZWQ+W19hLXpdW19hLXowLTldKilAQCAgIHwKKyAgICAgICAgICAgICAgKD9QPGludmFsaWQ+KSAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICkKKyAgICAgICAgICAgIiIiCisKKyAgICAgICAgdG1wbCA9ICdQeUNvbiBpbiAkQEBsb2NhdGlvbkBAJworICAgICAgICB0ID0gTXlUZW1wbGF0ZSh0bXBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2FmZV9zdWJzdGl0dXRlKCksIHRtcGwpCisgICAgICAgIHZhbCA9IHQuc2FmZV9zdWJzdGl0dXRlKHsnbG9jYXRpb24nOiAnQ2xldmVsYW5kJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCAnUHlDb24gaW4gQ2xldmVsYW5kJykKKwogICAgIGRlZiB0ZXN0X3VuaWNvZGVfdmFsdWVzKHNlbGYpOgogICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHdoYXQnKQogICAgICAgICBkID0gZGljdCh3aG89J3RceGZmbScsIHdoYXQ9J2ZceGZlXGZlZCcpCkBAIC0xODMsNiArMjIzLDEyIEBACiAgICAgICAgIHJhaXNlcyhWYWx1ZUVycm9yLCBzLnN1YnN0aXR1dGUsIGRpY3QoZ2lmdD0nYnVkJywgd2hvPSd5b3UnKSkKICAgICAgICAgZXEocy5zYWZlX3N1YnN0aXR1dGUoKSwgJ3RoaXMgJmdpZnQgaXMgZm9yICZ7d2hvfSAmJykKIAorICAgICAgICBjbGFzcyBQaWVEZWxpbXMoVGVtcGxhdGUpOgorICAgICAgICAgICAgZGVsaW1pdGVyID0gJ0AnCisgICAgICAgIHMgPSBQaWVEZWxpbXMoJ0B3aG8gbGlrZXMgdG8gZWF0IGEgYmFnIG9mIEB7d2hhdH0gd29ydGggJDEwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzEyMC5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMzEyMC5weQppbmRleCA4NWRhMDQ4Li4wOWZlZGYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDMxMjAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzMTIwLnB5CkBAIC0xOSw3ICsxOSw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCB0ZXN0LmJhZHN5bnRheF9wZXAzMTIwCiAgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKG1zZykuZmluZCgiTm9uLVVURi04IGNvZGUgc3RhcnRpbmcgd2l0aCIpID49IDApCisgICAgICAgICAgICBtc2cgPSBzdHIobXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdVVEYtOCcgaW4gbXNnIG9yICd1dGY4JyBpbiBtc2cpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxMzEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxMzEucHkKaW5kZXggM2QwOWFkMS4uOWQ1ZjIxNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTMxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzEzMS5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CmluZGV4IGI5NjQ1ZDUuLjU1OGNkYjUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzUyLnB5CkBAIC0zOCw4ICszOCw4IEBACiAgICAgICAgICAgICAgICAgbGFzdF9leGMgPSBnZXRhdHRyKGJ1aWx0aW5zLCBzdXBlcmNsYXNzX25hbWUpCiAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJiYXNlIGNsYXNzICVzIG5vdCBhIGJ1aWx0LWluIiAlIHN1cGVyY2xhc3NfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdXBlcmNsYXNzX25hbWUgaW4gZXhjX3NldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgbm90IGZvdW5kJyAlIHN1cGVyY2xhc3NfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3VwZXJjbGFzc19uYW1lLCBleGNfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAnJXMgbm90IGZvdW5kJyAlIHN1cGVyY2xhc3NfbmFtZSkKICAgICAgICAgICAgIGV4Y19zZXQuZGlzY2FyZChzdXBlcmNsYXNzX25hbWUpCiAgICAgICAgICAgICBzdXBlcmNsYXNzZXMgPSBbXSAgIyBMb29wIHdpbGwgaW5zZXJ0IGJhc2UgZXhjZXB0aW9uCiAgICAgICAgICAgICBsYXN0X2RlcHRoID0gMApAQCAtNzMsNyArNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmlmeV9pbnN0YW5jZV9pbnRlcmZhY2UoZXhjKCkpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleGNfbmFtZSBpbiBleGNfc2V0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhjX25hbWUsIGV4Y19zZXQpCiAgICAgICAgICAgICAgICAgZXhjX3NldC5kaXNjYXJkKGV4Y19uYW1lKQogICAgICAgICAgICAgICAgIGxhc3RfZXhjID0gZXhjCiAgICAgICAgICAgICAgICAgbGFzdF9kZXB0aCA9IGRlcHRoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BpY2tsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5CmluZGV4IGJiNjgxYmYuLmEzODc4ZmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5CkBAIC0zMSwxMiArMzEsMjQgQEAKICAgICAgICAgZi5zZWVrKDApCiAgICAgICAgIHJldHVybiBieXRlcyhmLnJlYWQoKSkKIAotICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgIGRlZiBsb2FkcyhzZWxmLCBidWYsICoqa3dkcyk6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKGJ1ZikKLSAgICAgICAgdSA9IHNlbGYudW5waWNrbGVyKGYpCisgICAgICAgIHUgPSBzZWxmLnVucGlja2xlcihmLCAqKmt3ZHMpCiAgICAgICAgIHJldHVybiB1LmxvYWQoKQogCiAKK2NsYXNzIEluTWVtb3J5UGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cyk6CisKKyAgICBwaWNrbGVyID0gcGlja2xlLl9QaWNrbGVyCisgICAgdW5waWNrbGVyID0gcGlja2xlLl9VbnBpY2tsZXIKKworICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvPU5vbmUpOgorICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG8pCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZiwgKiprd2RzKQorCisKIGNsYXNzIFB5UGVyc1BpY2tsZXJUZXN0cyhBYnN0cmFjdFBlcnNpc3RlbnRQaWNrbGVyVGVzdHMpOgogCiAgICAgcGlja2xlciA9IHBpY2tsZS5fUGlja2xlcgpAQCAtNTIsMTIgKzY0LDEyIEBACiAgICAgICAgIGYuc2VlaygwKQogICAgICAgICByZXR1cm4gZi5yZWFkKCkKIAotICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgorICAgIGRlZiBsb2FkcyhzZWxmLCBidWYsICoqa3dkcyk6CiAgICAgICAgIGNsYXNzIFBlcnNVbnBpY2tsZXIoc2VsZi51bnBpY2tsZXIpOgogICAgICAgICAgICAgZGVmIHBlcnNpc3RlbnRfbG9hZChzdWJzZWxmLCBvYmopOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBlcnNpc3RlbnRfbG9hZChvYmopCiAgICAgICAgIGYgPSBpby5CeXRlc0lPKGJ1ZikKLSAgICAgICAgdSA9IFBlcnNVbnBpY2tsZXIoZikKKyAgICAgICAgdSA9IFBlcnNVbnBpY2tsZXIoZiwgKiprd2RzKQogICAgICAgICByZXR1cm4gdS5sb2FkKCkKIAogCkBAIC05NSw3ICsxMDcsOCBAQAogICAgICAgICB0ZXN0cy5leHRlbmQoW0NQaWNrbGVyVGVzdHMsIENQZXJzUGlja2xlclRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgIENEdW1wUGlja2xlX0xvYWRQaWNrbGUsIER1bXBQaWNrbGVfQ0xvYWRQaWNrbGUsCiAgICAgICAgICAgICAgICAgICAgICAgUHlQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgQ1BpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0c10pCisgICAgICAgICAgICAgICAgICAgICAgQ1BpY2tsZXJVbnBpY2tsZXJPYmplY3RUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICBJbk1lbW9yeVBpY2tsZVRlc3RzXSkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5CmluZGV4IDgyM2IwYzIuLmQzN2FjMjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtOSw4ICs5LDggQEAKICAgICBkZWYgZHVtcHMoc2VsZiwgYXJnLCBwcm90bz1Ob25lKToKICAgICAgICAgcmV0dXJuIHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZS5kdW1wcyhhcmcsIHByb3RvKSkKIAotICAgIGRlZiBsb2FkcyhzZWxmLCBidWYpOgotICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZikKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGJ1ZiwgKiprd2RzKQogCiAgICAgIyBUZXN0IHJlbGllcyBvbiBwcmVjaXNlIG91dHB1dCBvZiBkdW1wcygpCiAgICAgdGVzdF9waWNrbGVfdG9fMnggPSBOb25lCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9waXBlcy5weQppbmRleCBiODE2YTNiLi5mMmI1OGQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BpcGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGlwZXMucHkKQEAgLTIsNyArMiw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzdHJpbmcKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgdW5saW5rLCByZWFwX2NoaWxkcmVuCiAKIGlmIG9zLm5hbWUgIT0gJ3Bvc2l4JzoKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgncGlwZXMgbW9kdWxlIG9ubHkgd29ya3Mgb24gcG9zaXgnKQpAQCAtNDAsNyArNDAsMTEgQEAKICAgICAgICAgICAgIGYud3JpdGUoJ2hlbGxvIHdvcmxkICMyJykKICAgICAgICAgdCA9IHBpcGVzLlRlbXBsYXRlKCkKICAgICAgICAgdC5hcHBlbmQoc19jb21tYW5kICsgJyA8ICRJTicsIHBpcGVzLkZJTEVJTl9TVERPVVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5vcGVuKFRFU1RGTiwgJ3InKS5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCisgICAgICAgIGYgPSB0Lm9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdIRUxMTyBXT1JMRCAjMicpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTEoc2VsZik6CiAgICAgICAgICMgY29weSB0aHJvdWdoIGVtcHR5IHBpcGUKQEAgLTYwLDcgKzY0LDExIEBACiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoZCkKICAgICAgICAgdD1waXBlcy5UZW1wbGF0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5vcGVuKFRFU1RGTiwgJ3InKS5yZWFkKCksIGQpCisgICAgICAgIGYgPSB0Lm9wZW4oVEVTVEZOLCAncicpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0RW1wdHlQaXBlbGluZTMoc2VsZik6CiAgICAgICAgICMgd3JpdGUgdGhyb3VnaCBlbXB0eSBwaXBlCkBAIC0xOTYsNiArMjA0LDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHJ1bl91bml0dGVzdChTaW1wbGVQaXBlVGVzdHMpCisgICAgcmVhcF9jaGlsZHJlbigpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5IGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKaW5kZXggNGI0OGMwNC4uYTRkZGIxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2cucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2cucHkKQEAgLTUzLDcgKzUzLDggQEAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNwYXRoCiAgICAgICAgIHN1cHBvcnQubW9kdWxlc19jbGVhbnVwKCpzZWxmLm1vZHVsZXNfYmVmb3JlKQotICAgICAgICBjbGVhbm91dChzZWxmLnJvb3QpCisgICAgICAgIGlmIHNlbGYucm9vdDogIyBPbmx5IGNsZWFuIGlmIHRoZSB0ZXN0IHdhcyBhY3R1YWxseSBydW4KKyAgICAgICAgICAgIGNsZWFub3V0KHNlbGYucm9vdCkKIAogICAgICAgICAjIGRlbGV0ZSBhbGwgbW9kdWxlcyBjb25jZXJuaW5nIHRoZSB0ZXN0ZWQgaGllcmFyY2h5CiAgICAgICAgIGlmIHNlbGYucGtnbmFtZToKQEAgLTEwMyw5ICsxMDQsNiBAQAogICAgICAgICBdCiAgICAgICAgIHNlbGYubWtoaWVyKGhpZXIpCiAKLSAgICAgICAgaW1wb3J0IHQyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIuX19kb2NfXywgImRvYyBmb3IgdDIiKQotCiAgICAgICAgIGltcG9ydCB0Mi5zdWIKICAgICAgICAgaW1wb3J0IHQyLnN1Yi5zdWJzdWIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Mi5fX25hbWVfXywgInQyIikKQEAgLTE5OCwxNCArMTk2LDE0IEBACiAKICAgICAgICAgaW1wb3J0IHQ1CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnZm9vJywgJ3N0cmluZycsICd0NSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuZm9vKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZyddKQorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ3N0cmluZyddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDUuc3RyaW5nKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywnX19wYWNrYWdlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BhbSddKQorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ3NwYW0nXSkKIAogICAgIGRlZiB0ZXN0XzYoc2VsZik6CiAgICAgICAgIGhpZXIgPSBbCkBAIC0yMjAsMTMgKzIxOCwxMyBAQAogCiAgICAgICAgIGltcG9ydCB0NgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIodDYpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXyddKQogICAgICAgICBzID0gIiIiCiAgICAgICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgICAgIGZyb20gdDYgaW1wb3J0ICoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fYWxsX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ2VnZ3MnLCAnaGFtJywgJ3NlbGYnLCAnc3BhbScsICd0NiddKQpAQCAtMjU0LDE4ICsyNTIsMTggQEAKICAgICAgICAgdDcsIHN1Yiwgc3Vic3ViID0gTm9uZSwgTm9uZSwgTm9uZQogICAgICAgICBpbXBvcnQgdDcgYXMgdGFzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0YXMpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnBhcikpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX25hbWVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0NykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCiAgICAgICAgIGZyb20gdDcuc3ViIGltcG9ydCBzdWJzdWIgYXMgc3Vic3Vic3ViCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcihzdWJzdWJzdWIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19uYW1lX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbmFtZV9fJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nLCAnc3BhbSddKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQ3KQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YikKQEAgLTI3Niw2ICsyNzQsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3Vic3ViKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfOChzZWxmKToKKyAgICAgICAgaGllciA9IFsKKyAgICAgICAgICAgICAgICAoInQ4IiwgTm9uZSksCisgICAgICAgICAgICAgICAgKCJ0OCBfX2luaXRfXyIrb3MuZXh0c2VwKyJweSIsICInZG9jIGZvciB0OCciKSwKKyAgICAgICAgICAgICAgIF0KKyAgICAgICAgc2VsZi5ta2hpZXIoaGllcikKKworICAgICAgICBpbXBvcnQgdDgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0OC5fX2RvY19fLCAiZG9jIGZvciB0OCIpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKaW5kZXggODAzYWEyYi4uYzM3ZTkzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTEsNSArMSwxMiBAQAotaW1wb3J0IG9zLCBzeXMsIHN0cmluZywgcmFuZG9tLCB0ZW1wZmlsZSwgdW5pdHRlc3QKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cmluZworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdW5pdHRlc3QKIAorZnJvbSBpbXAgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGNsYXNzIFRlc3RJbXBvcnQodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjYsMjIgKzMzLDE3IEBACiAgICAgICAgIHNlbGYubW9kdWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlX2RpciwgJ2Zvby5weScpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoc2VsZi5wYWNrYWdlX2Rpcik6Ci0gICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHNlbGYucGFja2FnZV9kaXIsIGZpbGUpKQotICAgICAgICBvcy5ybWRpcihzZWxmLnBhY2thZ2VfZGlyKQotICAgICAgICBvcy5ybWRpcihzZWxmLnRlc3RfZGlyKQorICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVzdF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3lzLnBhdGguY291bnQoc2VsZi50ZXN0X2RpciksIDApCiAgICAgICAgIHN5cy5wYXRoLnJlbW92ZShzZWxmLnRlc3RfZGlyKQogICAgICAgICBzZWxmLnJlbW92ZV9tb2R1bGVzKCkKIAogICAgIGRlZiByZXdyaXRlX2ZpbGUoc2VsZiwgY29udGVudHMpOgotICAgICAgICBmb3IgZXh0ZW5zaW9uIGluICJjbyI6Ci0gICAgICAgICAgICBjb21waWxlZF9wYXRoID0gc2VsZi5tb2R1bGVfcGF0aCArIGV4dGVuc2lvbgotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoY29tcGlsZWRfcGF0aCk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGNvbXBpbGVkX3BhdGgpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYubW9kdWxlX3BhdGgsICd3JykKLSAgICAgICAgZi53cml0ZShjb250ZW50cykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGNvbXBpbGVkX3BhdGggPSBjYWNoZV9mcm9tX3NvdXJjZShzZWxmLm1vZHVsZV9wYXRoKQorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhjb21waWxlZF9wYXRoKToKKyAgICAgICAgICAgIG9zLnJlbW92ZShjb21waWxlZF9wYXRoKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5tb2R1bGVfcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShjb250ZW50cykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2VfaW1wb3J0X19zZW1hbnRpY3Moc2VsZik6CiAKQEAgLTUxLDkgKzUzLDkgQEAKICAgICAgICAgc2VsZi5yZXdyaXRlX2ZpbGUoJ2ZvcicpCiAgICAgICAgIHRyeTogX19pbXBvcnRfXyhzZWxmLm1vZHVsZV9uYW1lKQogICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogcmFpc2UgUnVudGltZUVycm9yKCdGYWlsZWQgdG8gaW5kdWNlIFN5bnRheEVycm9yJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubW9kdWxlX25hbWUgbm90IGluIHN5cy5tb2R1bGVzIGFuZAotICAgICAgICAgICAgICAgICAgICAgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbc2VsZi5wYWNrYWdlX25hbWVdLCAnZm9vJykpCisgICAgICAgIGVsc2U6IHJhaXNlIFJ1bnRpbWVFcnJvcignRmFpbGVkIHRvIGluZHVjZSBTeW50YXhFcnJvcicpICMgc2VsZi5mYWlsKCk/CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5tb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzeXMubW9kdWxlc1tzZWxmLnBhY2thZ2VfbmFtZV0sICdmb28nKSkKIAogICAgICAgICAjIC4uLm1ha2UgdXAgYSB2YXJpYWJsZSBuYW1lIHRoYXQgaXNuJ3QgYm91bmQgaW4gX19idWlsdGluc19fCiAgICAgICAgIHZhciA9ICdhJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weSBiL0xpYi90ZXN0L3Rlc3RfcGxhdGZvcm0ucHkKaW5kZXggMmY2ODhhNC4uZWMxMzRhMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGF0Zm9ybS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsYXRmb3JtLnB5CkBAIC0xMCwyMCArMTAsMjYgQEAKICAgICBkZWYgdGVzdF9hcmNoaXRlY3R1cmUoc2VsZik6CiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLmFyY2hpdGVjdHVyZSgpCiAKLSAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgotICAgICAgICBkZWYgdGVzdF9hcmNoaXRlY3R1cmVfdmlhX3N5bWxpbmsoc2VsZik6ICMgaXNzdWUzNzYyCi0gICAgICAgICAgICBkZWYgZ2V0KHB5dGhvbik6Ci0gICAgICAgICAgICAgICAgY21kID0gW3B5dGhvbiwgJy1jJywKLSAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0uYXJjaGl0ZWN0dXJlKCkpJ10KLSAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHAuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgcmVhbCA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBsaW5rID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgb3Muc3ltbGluayhyZWFsLCBsaW5rKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0KHJlYWwpLCBnZXQobGluaykpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShsaW5rKQorICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9hcmNoaXRlY3R1cmVfdmlhX3N5bWxpbmsoc2VsZik6ICMgaXNzdWUzNzYyCisgICAgICAgICMgT24gV2luZG93cywgdGhlIEVYRSBuZWVkcyB0byBrbm93IHdoZXJlIHB5dGhvblhZLmRsbCBpcyBhdCBzbyB3ZSBoYXZlCisgICAgICAgICMgdG8gYWRkIHRoZSBkaXJlY3RvcnkgdG8gdGhlIHBhdGguCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgb3MuZW52aXJvblsiUGF0aCJdID0gInt9O3t9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHN5cy5leGVjdXRhYmxlKSwgb3MuZW52aXJvblsiUGF0aCJdKQorCisgICAgICAgIGRlZiBnZXQocHl0aG9uKToKKyAgICAgICAgICAgIGNtZCA9IFtweXRob24sICctYycsCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0uYXJjaGl0ZWN0dXJlKCkpJ10KKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgICAgIHJldHVybiBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVhbCA9IG9zLnBhdGgucmVhbHBhdGgoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGxpbmsgPSBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pCisgICAgICAgIG9zLnN5bWxpbmsocmVhbCwgbGluaykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXQocmVhbCksIGdldChsaW5rKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShsaW5rKQogCiAgICAgZGVmIHRlc3RfcGxhdGZvcm0oc2VsZik6CiAgICAgICAgIGZvciBhbGlhc2VkIGluIChGYWxzZSwgVHJ1ZSk6CkBAIC0xMzEsNiArMTM3LDI3IEBACiAgICAgICAgIHJlcyA9IHBsYXRmb3JtLnVuYW1lKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFueShyZXMpKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLCAid2luZG93cyBvbmx5IHRlc3QiKQorICAgIGRlZiB0ZXN0X3VuYW1lX3dpbjMyX0FSQ0hJVEVXNjQzMihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA3ODYwOiBtYWtlIHN1cmUgd2UgZ2V0IGFyY2hpdGVjdHVyZSBmcm9tIHRoZSBjb3JyZWN0IHZhcmlhYmxlCisgICAgICAgICMgb24gNjQgYml0IFdpbmRvd3M6IGlmIFBST0NFU1NPUl9BUkNISVRFVzY0MzIgZXhpc3RzIHdlIHNob3VsZCBiZQorICAgICAgICAjIHVzaW5nIGl0LCBwZXIKKyAgICAgICAgIyBodHRwOi8vYmxvZ3MubXNkbi5jb20vZGF2aWQud2FuZy9hcmNoaXZlLzIwMDYvMDMvMjYvSE9XVE8tRGV0ZWN0LVByb2Nlc3MtQml0bmVzcy5hc3B4CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52aXJvbjoKKyAgICAgICAgICAgICAgICBpZiAnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMicgaW4gZW52aXJvbjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFVzY0MzInXQorICAgICAgICAgICAgICAgIGVudmlyb25bJ1BST0NFU1NPUl9BUkNISVRFQ1RVUkUnXSA9ICdmb28nCisgICAgICAgICAgICAgICAgcGxhdGZvcm0uX3VuYW1lX2NhY2hlID0gTm9uZQorICAgICAgICAgICAgICAgIHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwgbWFjaGluZSwgcHJvY2Vzc29yID0gcGxhdGZvcm0udW5hbWUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjaGluZSwgJ2ZvbycpCisgICAgICAgICAgICAgICAgZW52aXJvblsnUFJPQ0VTU09SX0FSQ0hJVEVXNjQzMiddID0gJ2JhcicKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5fdW5hbWVfY2FjaGUgPSBOb25lCisgICAgICAgICAgICAgICAgc3lzdGVtLCBub2RlLCByZWxlYXNlLCB2ZXJzaW9uLCBtYWNoaW5lLCBwcm9jZXNzb3IgPSBwbGF0Zm9ybS51bmFtZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYWNoaW5lLCAnYmFyJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHBsYXRmb3JtLl91bmFtZV9jYWNoZSA9IE5vbmUKKwogICAgIGRlZiB0ZXN0X2phdmFfdmVyKHNlbGYpOgogICAgICAgICByZXMgPSBwbGF0Zm9ybS5qYXZhX3ZlcigpCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnamF2YSc6CkBAIC0xOTgsOCArMjI1LDEwIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc3lzLmV4ZWN1dGFibGUpIGFuZCBcCiAgICAgICAgICAgIG9zLnBhdGguZXhpc3RzKHN5cy5leGVjdXRhYmxlKycuZXhlJyk6CiAgICAgICAgICAgICAjIEN5Z3dpbiBob3Jyb3IKLSAgICAgICAgICAgIGV4ZWN1dGFibGUgPSBleGVjdXRhYmxlICsgJy5leGUnCi0gICAgICAgIHJlcyA9IHBsYXRmb3JtLmxpYmNfdmVyKHN5cy5leGVjdXRhYmxlKQorICAgICAgICAgICAgZXhlY3V0YWJsZSA9IHN5cy5leGVjdXRhYmxlICsgJy5leGUnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVjdXRhYmxlID0gc3lzLmV4ZWN1dGFibGUKKyAgICAgICAgcmVzID0gcGxhdGZvcm0ubGliY192ZXIoZXhlY3V0YWJsZSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX3JlbGVhc2VfZmlsZShzZWxmKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKaW5kZXggYjlhNDZiNy4uZGZhNDcyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CkBAIC05LDcgKzksNyBAQAogCiAjIFRoaXMgdGVzdCBkYXRhIHdhcyBnZW5lcmF0ZWQgdGhyb3VnaCBDb2NvYSdzIE5TRGljdGlvbmFyeSBjbGFzcwogVEVTVERBVEEgPSBiIiIiPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgXAorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiBcCiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+CiA8cGxpc3QgdmVyc2lvbj0iMS4wIj4KIDxkaWN0PgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3Blbi5weSBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKaW5kZXggMjRmYjg0Ni4uYWNjZjE4NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIkJhc2ljIHRlc3RzIGZvciBvcy5wb3BlbigpCiAKICAgUGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgcGxhdGZvcm1zIHRoYXQgZmFrZSBwb3Blbi4KQEAgLTIyLDcgKzIyLDggQEAKICAgICBkZWYgX2RvX3Rlc3RfY29tbWFuZGxpbmUoc2VsZiwgY21kbGluZSwgZXhwZWN0ZWQpOgogICAgICAgICBjbWQgPSAnJXMgLWMgImltcG9ydCBzeXM7IHByaW50KHN5cy5hcmd2KSIgJXMnCiAgICAgICAgIGNtZCA9IGNtZCAlIChweXRob24sIGNtZGxpbmUpCi0gICAgICAgIGRhdGEgPSBvcy5wb3BlbihjbWQpLnJlYWQoKQorICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZCkgYXMgcDoKKyAgICAgICAgICAgIGRhdGEgPSBwLnJlYWQoKQogICAgICAgICBnb3QgPSBldmFsKGRhdGEpWzE6XSAjIHN0cmlwIG9mZiBhcmd2WzBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQppbmRleCA1NjU5Yjc4Li44MWFmNTY5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvcGxpYi5weQpAQCAtNCw3ICs0LDYgQEAKICMgYSByZWFsIHRlc3Qgc3VpdGUKIAogaW1wb3J0IHBvcGxpYgotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IGFzeW5jb3JlCiBpbXBvcnQgYXN5bmNoYXQKIGltcG9ydCBzb2NrZXQKQEAgLTE0LDYgKzEzLDcgQEAKIAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKK3RocmVhZGluZyA9IHRlc3Rfc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFBPUlQgPSAwCkBAIC0xMjIsNiArMTIyLDcgQEAKICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQogICAgICAgICBzZWxmLmFjdGl2ZV9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgICAgICBzZWxmLmhvc3QsIHNlbGYucG9ydCA9IHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbOjJdCisgICAgICAgIHNlbGYuaGFuZGxlcl9pbnN0YW5jZSA9IE5vbmUKIAogICAgIGRlZiBzdGFydChzZWxmKToKICAgICAgICAgYXNzZXJ0IG5vdCBzZWxmLmFjdGl2ZQpAQCAtMTQzLDEwICsxNDQsOCBAQAogICAgICAgICBzZWxmLmFjdGl2ZSA9IEZhbHNlCiAgICAgICAgIHNlbGYuam9pbigpCiAKLSAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKLSAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKLSAgICAgICAgc2VsZi5oYW5kbGVyID0gc2VsZi5oYW5kbGVyKGNvbm4pCi0gICAgICAgIHNlbGYuY2xvc2UoKQorICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CisgICAgICAgIHNlbGYuaGFuZGxlcl9pbnN0YW5jZSA9IHNlbGYuaGFuZGxlcihjb25uKQogCiAgICAgZGVmIGhhbmRsZV9jb25uZWN0KHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTI4NSw3ICsyODQsMjQgQEAKICAgICAgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDNfU1NMKHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICAgICAgZGVmIHRlc3RfX2FsbF9fKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdQT1AzX1NTTCcgaW4gcG9wbGliLl9fYWxsX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdQT1AzX1NTTCcsIHBvcGxpYi5fX2FsbF9fKQorCisgICAgICAgIGRlZiB0ZXN0X2NvbnRleHQoc2VsZik6CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvcGxpYi5QT1AzX1NTTCwgc2VsZi5zZXJ2ZXIuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvcGxpYi5QT1AzX1NTTCwgc2VsZi5zZXJ2ZXIuaG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCisKKyAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICAgICAgc2VsZi5jbGllbnQgPSBwb3BsaWIuUE9QM19TU0woc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYuY2xpZW50LnNvY2suY29udGV4dCwgY3R4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2xpZW50Lm5vb3AoKS5zdGFydHN3aXRoKGInK09LJykpCiAKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CmluZGV4IDUxY2MyM2MuLjQ1YjNhZmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQpAQCAtNSwxNiArNSwxNiBAQAogIyBTa2lwIHRoZXNlIHRlc3RzIGlmIHRoZXJlIGlzIG5vIHBvc2l4IG1vZHVsZS4KIHBvc2l4ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdwb3NpeCcpCiAKK2ltcG9ydCBlcnJubwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBvcwogaW1wb3J0IHB3ZAogaW1wb3J0IHNodXRpbAoraW1wb3J0IHN0YXQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiAKLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAnLiogcG90ZW50aWFsIHNlY3VyaXR5IHJpc2sgLionLAotICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCiAKIGNsYXNzIFBvc2l4VGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjIsOSArMjIsMTQgQEAKICAgICAgICAgIyBjcmVhdGUgZW1wdHkgZmlsZQogICAgICAgICBmcCA9IG9wZW4oc3VwcG9ydC5URVNURk4sICd3KycpCiAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQorICAgICAgICBzZWxmLl93YXJuaW5nc19tYW5hZ2VyLl9fZW50ZXJfXygpCisgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCAnLiogcG90ZW50aWFsIHNlY3VyaXR5IHJpc2sgLionLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0Tm9BcmdGdW5jdGlvbnMoc2VsZik6CiAgICAgICAgICMgdGVzdCBwb3NpeCBmdW5jdGlvbnMgd2hpY2ggdGFrZSBubyBhcmd1bWVudHMgYW5kIGhhdmUKQEAgLTQxLDYgKzQ2LDY5IEBACiAgICAgICAgICAgICAgICAgcG9zaXhfZnVuYygpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeF9mdW5jLCAxKQogCisgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2dldHJlc3VpZCcpOgorICAgICAgICBkZWYgdGVzdF9nZXRyZXN1aWQoc2VsZik6CisgICAgICAgICAgICB1c2VyX2lkcyA9IHBvc2l4LmdldHJlc3VpZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1c2VyX2lkcyksIDMpCisgICAgICAgICAgICBmb3IgdmFsIGluIHVzZXJfaWRzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHZhbCwgMCkKKworICAgIGlmIGhhc2F0dHIocG9zaXgsICdnZXRyZXNnaWQnKToKKyAgICAgICAgZGVmIHRlc3RfZ2V0cmVzZ2lkKHNlbGYpOgorICAgICAgICAgICAgZ3JvdXBfaWRzID0gcG9zaXguZ2V0cmVzZ2lkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGdyb3VwX2lkcyksIDMpCisgICAgICAgICAgICBmb3IgdmFsIGluIGdyb3VwX2lkczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCh2YWwsIDApCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0cmVzdWlkJyk6CisgICAgICAgIGRlZiB0ZXN0X3NldHJlc3VpZChzZWxmKToKKyAgICAgICAgICAgIGN1cnJlbnRfdXNlcl9pZHMgPSBwb3NpeC5nZXRyZXN1aWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9zaXguc2V0cmVzdWlkKCpjdXJyZW50X3VzZXJfaWRzKSkKKyAgICAgICAgICAgICMgLTEgbWVhbnMgZG9uJ3QgY2hhbmdlIHRoYXQgdmFsdWUuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwb3NpeC5zZXRyZXN1aWQoLTEsIC0xLCAtMSkpCisKKyAgICAgICAgZGVmIHRlc3Rfc2V0cmVzdWlkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgICAgICMgRG9uJ3QgZG8gdGhpcyB0ZXN0IGlmIHNvbWVvbmUgaXMgc2lsbHkgZW5vdWdoIHRvIHJ1biB1cyBhcyByb290LgorICAgICAgICAgICAgY3VycmVudF91c2VyX2lkcyA9IHBvc2l4LmdldHJlc3VpZCgpCisgICAgICAgICAgICBpZiAwIG5vdCBpbiBjdXJyZW50X3VzZXJfaWRzOgorICAgICAgICAgICAgICAgIG5ld191c2VyX2lkcyA9IChjdXJyZW50X3VzZXJfaWRzWzBdKzEsIC0xLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwb3NpeC5zZXRyZXN1aWQsICpuZXdfdXNlcl9pZHMpCisKKyAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc2V0cmVzZ2lkJyk6CisgICAgICAgIGRlZiB0ZXN0X3NldHJlc2dpZChzZWxmKToKKyAgICAgICAgICAgIGN1cnJlbnRfZ3JvdXBfaWRzID0gcG9zaXguZ2V0cmVzZ2lkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc2dpZCgqY3VycmVudF9ncm91cF9pZHMpKQorICAgICAgICAgICAgIyAtMSBtZWFucyBkb24ndCBjaGFuZ2UgdGhhdCB2YWx1ZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvc2l4LnNldHJlc2dpZCgtMSwgLTEsIC0xKSkKKworICAgICAgICBkZWYgdGVzdF9zZXRyZXNnaWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAgICAgIyBEb24ndCBkbyB0aGlzIHRlc3QgaWYgc29tZW9uZSBpcyBzaWxseSBlbm91Z2ggdG8gcnVuIHVzIGFzIHJvb3QuCisgICAgICAgICAgICBjdXJyZW50X2dyb3VwX2lkcyA9IHBvc2l4LmdldHJlc2dpZCgpCisgICAgICAgICAgICBpZiAwIG5vdCBpbiBjdXJyZW50X2dyb3VwX2lkczoKKyAgICAgICAgICAgICAgICBuZXdfZ3JvdXBfaWRzID0gKGN1cnJlbnRfZ3JvdXBfaWRzWzBdKzEsIC0xLCAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwb3NpeC5zZXRyZXNnaWQsICpuZXdfZ3JvdXBfaWRzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2luaXRncm91cHMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdCBuZWVkcyBvcy5pbml0Z3JvdXBzKCkiKQorICAgIGRlZiB0ZXN0X2luaXRncm91cHMoc2VsZik6CisgICAgICAgICMgSXQgdGFrZXMgYSBzdHJpbmcgYW5kIGFuIGludGVnZXI7IGNoZWNrIHRoYXQgaXQgcmFpc2VzIGEgVHlwZUVycm9yCisgICAgICAgICMgZm9yIG90aGVyIGFyZ3VtZW50IGxpc3RzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4LmluaXRncm91cHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXguaW5pdGdyb3VwcywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzLCAzLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5pbml0Z3JvdXBzLCAiZm9vIiwgMywgb2JqZWN0KCkpCisKKyAgICAgICAgIyBJZiBhIG5vbi1wcml2aWxlZ2VkIHVzZXIgaW52b2tlcyBpdCwgaXQgc2hvdWxkIGZhaWwgd2l0aCBPU0Vycm9yCisgICAgICAgICMgRVBFUk0uCisgICAgICAgIGlmIG9zLmdldHVpZCgpICE9IDA6CisgICAgICAgICAgICBuYW1lID0gcHdkLmdldHB3dWlkKHBvc2l4LmdldHVpZCgpKS5wd19uYW1lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9zaXguaW5pdGdyb3VwcyhuYW1lLCAxMykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FUEVSTSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yIHRvIGJlIHJhaXNlZCBieSBpbml0Z3JvdXBzIikKKwogICAgIGRlZiB0ZXN0X3N0YXR2ZnMoc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdzdGF0dmZzJyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXguc3RhdHZmcyhvcy5jdXJkaXIpKQpAQCAtNjksNyArMTM3LDcgQEAKICAgICAgICAgICAgIGZwID0gb3BlbihzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IHBvc2l4LmR1cChmcC5maWxlbm8oKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmZCwgaW50KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmQsIGludCkKICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQpAQCAtMTMyLDYgKzIwMCwyOCBAQAogICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnc3RhdCcpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4LnN0YXQoc3VwcG9ydC5URVNURk4pKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ21rZmlmbycpLCAiZG9uJ3QgaGF2ZSBta2ZpZm8oKSIpCisgICAgZGVmIHRlc3RfbWtmaWZvKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgcG9zaXgubWtmaWZvKHN1cHBvcnQuVEVTVEZOLCBzdGF0LlNfSVJVU1IgfCBzdGF0LlNfSVdVU1IpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0LlNfSVNGSUZPKHBvc2l4LnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X21vZGUpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ21rbm9kJykgYW5kIGhhc2F0dHIoc3RhdCwgJ1NfSUZJRk8nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZG9uJ3QgaGF2ZSBta25vZCgpL1NfSUZJRk8iKQorICAgIGRlZiB0ZXN0X21rbm9kKHNlbGYpOgorICAgICAgICAjIFRlc3QgdXNpbmcgbWtub2QoKSB0byBjcmVhdGUgYSBGSUZPICh0aGUgb25seSB1c2Ugc3BlY2lmaWVkCisgICAgICAgICMgYnkgUE9TSVgpLgorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgbW9kZSA9IHN0YXQuU19JRklGTyB8IHN0YXQuU19JUlVTUiB8IHN0YXQuU19JV1VTUgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwb3NpeC5ta25vZChzdXBwb3J0LlRFU1RGTiwgbW9kZSwgMCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgU29tZSBvbGQgc3lzdGVtcyBkb24ndCBhbGxvdyB1bnByaXZpbGVnZWQgdXNlcnMgdG8gdXNlCisgICAgICAgICAgICAjIG1rbm9kKCksIG9yIG9ubHkgc3VwcG9ydCBjcmVhdGluZyBkZXZpY2Ugbm9kZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUuZXJybm8sIChlcnJuby5FUEVSTSwgZXJybm8uRUlOVkFMKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0LlNfSVNGSUZPKHBvc2l4LnN0YXQoc3VwcG9ydC5URVNURk4pLnN0X21vZGUpKQorCiAgICAgZGVmIF90ZXN0X2FsbF9jaG93bl9jb21tb24oc2VsZiwgY2hvd25fZnVuYywgZmlyc3RfcGFyYW0pOgogICAgICAgICAiIiJDb21tb24gY29kZSBmb3IgY2hvd24sIGZjaG93biBhbmQgbGNob3duIHRlc3RzLiIiIgogICAgICAgICBpZiBvcy5nZXR1aWQoKSA9PSAwOgpAQCAtMTg2LDkgKzI3NiwxNCBAQAogICAgICAgICAgICAgcG9zaXguY2hkaXIob3MuY3VyZGlyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgcG9zaXguY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQogCi0gICAgZGVmIHRlc3RfbHNkaXIoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICdsc2RpcicpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1cHBvcnQuVEVTVEZOIGluIHBvc2l4LmxzZGlyKG9zLmN1cmRpcikpCisgICAgZGVmIHRlc3RfbGlzdGRpcihzZWxmKToKKyAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2xpc3RkaXInKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdXBwb3J0LlRFU1RGTiBpbiBwb3NpeC5saXN0ZGlyKG9zLmN1cmRpcikpCisKKyAgICBkZWYgdGVzdF9saXN0ZGlyX2RlZmF1bHQoc2VsZik6CisgICAgICAgICMgV2hlbiBsaXN0ZGlyIGlzIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50LCBpdCdzIHRoZSBzYW1lIGFzIGxpc3RkaXIob3MuY3VyZGlyKQorICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnbGlzdGRpcicpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1cHBvcnQuVEVTVEZOIGluIHBvc2l4Lmxpc3RkaXIoKSkKIAogICAgIGRlZiB0ZXN0X2FjY2VzcyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2FjY2VzcycpOgpAQCAtMTk3LDcgKzI5Miw3IEBACiAgICAgZGVmIHRlc3RfdW1hc2soc2VsZik6CiAgICAgICAgIGlmIGhhc2F0dHIocG9zaXgsICd1bWFzaycpOgogICAgICAgICAgICAgb2xkX21hc2sgPSBwb3NpeC51bWFzaygwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2xkX21hc2ssIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2xkX21hc2ssIGludCkKICAgICAgICAgICAgIHBvc2l4LnVtYXNrKG9sZF9tYXNrKQogCiAgICAgZGVmIHRlc3Rfc3RyZXJyb3Ioc2VsZik6CkBAIC0yMzMsOSArMzI4LDEzIEBACiAgICAgICAgICAgICAgICAgcG9zaXgubGNoZmxhZ3Moc3VwcG9ydC5URVNURk4sIHN0LnN0X2ZsYWdzKQogCiAgICAgZGVmIHRlc3RfZW52aXJvbihzZWxmKToKKyAgICAgICAgaWYgb3MubmFtZSA9PSAibnQiOgorICAgICAgICAgICAgaXRlbV90eXBlID0gc3RyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpdGVtX3R5cGUgPSBieXRlcwogICAgICAgICBmb3IgaywgdiBpbiBwb3NpeC5lbnZpcm9uLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoayksIHN0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGspLCBpdGVtX3R5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodiksIGl0ZW1fdHlwZSkKIAogICAgIGRlZiB0ZXN0X2dldGN3ZF9sb25nX3BhdGhuYW1lcyhzZWxmKToKICAgICAgICAgaWYgaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQppbmRleCAxNDE0NmRiLi5iYjQ1NTljIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4cGF0aC5weQpAQCAtMSwxNCArMSwzMSBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCwgdGVzdF9nZW5lcmljcGF0aAogCi1pbXBvcnQgcG9zaXhwYXRoLCBvcwotZnJvbSBwb3NpeHBhdGggaW1wb3J0IHJlYWxwYXRoLCBhYnNwYXRoLCBqb2luLCBkaXJuYW1lLCBiYXNlbmFtZSwgcmVscGF0aAoraW1wb3J0IHBvc2l4cGF0aAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitmcm9tIHBvc2l4cGF0aCBpbXBvcnQgcmVhbHBhdGgsIGFic3BhdGgsIGRpcm5hbWUsIGJhc2VuYW1lCisKK3RyeToKKyAgICBpbXBvcnQgcG9zaXgKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwb3NpeCA9IE5vbmUKIAogIyBBbiBhYnNvbHV0ZSBwYXRoIHRvIGEgdGVtcG9yYXJ5IGZpbGVuYW1lIGZvciB0ZXN0aW5nLiBXZSBjYW4ndCByZWx5IG9uIFRFU1RGTgogIyBiZWluZyBhbiBhYnNvbHV0ZSBwYXRoLCBzbyB3ZSBuZWVkIHRoaXMuCiAKIEFCU1RGTiA9IGFic3BhdGgoc3VwcG9ydC5URVNURk4pCiAKK2RlZiBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2godGVzdCk6CisgICAgIiIiCisgICAgT24gV2luZG93cywgcG9zaXhwYXRoLmFic3BhdGggc3RpbGwgcmV0dXJucyBwYXRocyB3aXRoIGJhY2tzbGFzaGVzCisgICAgaW5zdGVhZCBvZiBwb3NpeCBmb3J3YXJkIHNsYXNoZXMuIElmIHRoaXMgaXMgdGhlIGNhc2UsIHNldmVyYWwgdGVzdHMKKyAgICBmYWlsLCBzbyBza2lwIHRoZW0uCisgICAgIiIiCisgICAgZm91bmRfYmFja3NsYXNoID0gJ1xcJyBpbiBBQlNURk4KKyAgICBtc2cgPSAiQUJTVEZOIGlzIG5vdCBhIHBvc2l4IHBhdGggLSB0ZXN0cyBmYWlsIgorICAgIHJldHVybiBbdGVzdCwgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpXVtmb3VuZF9iYWNrc2xhc2hdCisKIGRlZiBzYWZlX3JtZGlyKGRpcm5hbWUpOgogICAgIHRyeToKICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKQEAgLTI1LDE5ICs0Miw2IEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTiArIHN1ZmZpeCkKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4gKyBzdWZmaXgpCiAKLSAgICBkZWYgYXNzZXJ0SXMoc2VsZiwgYSwgYik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGlzIGIpCi0KLSAgICBkZWYgdGVzdF9ub3JtY2FzZShzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IG5vcm1jYXNlKCkgaXMgaWRlbXBvdGVudAotICAgICAgICBwID0gIkZvTy8uL0JhUiIKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBwb3NpeHBhdGgubm9ybWNhc2UocCkpCi0KLSAgICAgICAgcCA9IGIiRm9PLy4vQmFSIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHBvc2l4cGF0aC5ub3JtY2FzZShwKSkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5ub3JtY2FzZSkKLQogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmpvaW4oIi9mb28iLCAiYmFyIiwgIi9iYXIiLCAiYmF6IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIi9iYXIvYmF6IikKQEAgLTUyLDE2ICs1Niw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmpvaW4oYiIvZm9vLyIsIGIiYmFyLyIsIGIiYmF6LyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2Zvby9iYXIvYmF6LyIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguam9pbiwgYiJieXRlcyIsICJzdHIiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5qb2luLCAic3RyIiwgYiJieXRlcyIpCiAKLSAgICBkZWYgdGVzdF9zcGxpdGRyaXZlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGRyaXZlKCIvZm9vL2JhciIpLCAoIiIsICIvZm9vL2JhciIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGRyaXZlKGIiL2Zvby9iYXIiKSwgKGIiIiwgYiIvZm9vL2JhciIpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNwbGl0ZHJpdmUpCi0KICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi8iKSwgKCIvIiwgIiIpKQpAQCAtNzUsOCArNzIsNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdChiIi8vLy9mb28iKSwgKGIiLy8vLyIsIGIiZm9vIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLnNwbGl0KGIiLy9mb28vL2JhciIpLCAoYiIvL2ZvbyIsIGIiYmFyIikpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc3BsaXQpCi0KICAgICBkZWYgc3BsaXRleHRUZXN0KHNlbGYsIHBhdGgsIGZpbGVuYW1lLCBleHQpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dChwYXRoKSwgKGZpbGVuYW1lLCBleHQpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5zcGxpdGV4dCgiLyIgKyBwYXRoKSwgKCIvIiArIGZpbGVuYW1lLCBleHQpKQpAQCAtMTE4LDcgKzExMyw2IEBACiAgICAgICAgIHNlbGYuc3BsaXRleHRUZXN0KCIuLiIsICIuLiIsICIiKQogICAgICAgICBzZWxmLnNwbGl0ZXh0VGVzdCgiLi4uLi4uLi4iLCAiLi4uLi4uLi4iLCAiIikKICAgICAgICAgc2VsZi5zcGxpdGV4dFRlc3QoIiIsICIiLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguc3BsaXRleHQpCiAKICAgICBkZWYgdGVzdF9pc2FicyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNhYnMoIiIpLCBGYWxzZSkKQEAgLTEzMyw4ICsxMjcsNiBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2FicyhiIi9mb28vYmFyIiksIFRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzYWJzKGIiZm9vL2JhciIpLCBGYWxzZSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5pc2FicykKLQogICAgIGRlZiB0ZXN0X2Jhc2VuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5iYXNlbmFtZSgiL2Zvby9iYXIiKSwgImJhciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKCIvIiksICIiKQpAQCAtMTQ4LDggKzE0MCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKGIiLy8vL2ZvbyIpLCBiImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmJhc2VuYW1lKGIiLy9mb28vL2JhciIpLCBiImJhciIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguYmFzZW5hbWUpCi0KICAgICBkZWYgdGVzdF9kaXJuYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5kaXJuYW1lKCIvZm9vL2JhciIpLCAiL2ZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmRpcm5hbWUoIi8iKSwgIi8iKQpAQCAtMTYzLDg4ICsxNTMsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZShiIi8vLy9mb28iKSwgYiIvLy8vIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZGlybmFtZShiIi8vZm9vLy9iYXIiKSwgYiIvL2ZvbyIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguZGlybmFtZSkKLQotICAgIGRlZiB0ZXN0X2NvbW1vbnByZWZpeChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoW10pLAotICAgICAgICAgICAgIiIKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW5zb24vc3BhbSIsICIvaG9tZS9zd2VuL3NwYW0iXSksCi0gICAgICAgICAgICAiL2hvbWUvc3dlbiIKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbIi9ob21lL3N3ZW4vc3BhbSIsICIvaG9tZS9zd2VuL2VnZ3MiXSksCi0gICAgICAgICAgICAiL2hvbWUvc3dlbi8iCi0gICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHBvc2l4cGF0aC5jb21tb25wcmVmaXgoWyIvaG9tZS9zd2VuL3NwYW0iLCAiL2hvbWUvc3dlbi9zcGFtIl0pLAotICAgICAgICAgICAgIi9ob21lL3N3ZW4vc3BhbSIKLSAgICAgICAgKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwb3NpeHBhdGguY29tbW9ucHJlZml4KFtiIi9ob21lL3N3ZW5zb24vc3BhbSIsIGIiL2hvbWUvc3dlbi9zcGFtIl0pLAotICAgICAgICAgICAgYiIvaG9tZS9zd2VuIgotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBwb3NpeHBhdGguY29tbW9ucHJlZml4KFtiIi9ob21lL3N3ZW4vc3BhbSIsIGIiL2hvbWUvc3dlbi9lZ2dzIl0pLAotICAgICAgICAgICAgYiIvaG9tZS9zd2VuLyIKLSAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbYiIvaG9tZS9zd2VuL3NwYW0iLCBiIi9ob21lL3N3ZW4vc3BhbSJdKSwKLSAgICAgICAgICAgIGIiL2hvbWUvc3dlbi9zcGFtIgotICAgICAgICApCi0KLSAgICAgICAgdGVzdGxpc3QgPSBbJycsICdhYmMnLCAnWGJjZCcsICdYYicsICdYWScsICdhYmNkJywgJ2FYYycsICdhYmQnLCAnYWInLCAnYVgnLCAnYWJjWCddCi0gICAgICAgIGZvciBzMSBpbiB0ZXN0bGlzdDoKLSAgICAgICAgICAgIGZvciBzMiBpbiB0ZXN0bGlzdDoKLSAgICAgICAgICAgICAgICBwID0gcG9zaXhwYXRoLmNvbW1vbnByZWZpeChbczEsIHMyXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczEuc3RhcnRzd2l0aChwKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoczIuc3RhcnRzd2l0aChwKSkKLSAgICAgICAgICAgICAgICBpZiBzMSAhPSBzMjoKLSAgICAgICAgICAgICAgICAgICAgbiA9IGxlbihwKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHMxW246bisxXSwgczJbbjpuKzFdKQotCi0gICAgZGVmIHRlc3RfZ2V0c2l6ZShzZWxmKToKLSAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5nZXRzaXplKHN1cHBvcnQuVEVTVEZOKSwgMykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlZDoKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiB0ZXN0X3RpbWUoc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKGIiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJhYiIpCi0gICAgICAgICAgICBmLndyaXRlKGIiYmFyIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpCi0gICAgICAgICAgICBkID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBiImZvb2JhciIpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKAotICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5nZXRjdGltZShzdXBwb3J0LlRFU1RGTiksCi0gICAgICAgICAgICAgICAgcG9zaXhwYXRoLmdldG10aW1lKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2VkOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCiAgICAgZGVmIHRlc3RfaXNsaW5rKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsoc3VwcG9ydC5URVNURk4gKyAiMSIpLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGgubGV4aXN0cyhzdXBwb3J0LlRFU1RGTiArICIyIiksIEZhbHNlKQogICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiArICIxIiwgIndiIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShiImZvbyIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbGluayhzdXBwb3J0LlRFU1RGTiArICIxIiksIEZhbHNlKQotICAgICAgICAgICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKKyAgICAgICAgICAgIGlmIHN1cHBvcnQuY2FuX3N5bWxpbmsoKToKICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHN1cHBvcnQuVEVTVEZOICsgIjEiLCBzdXBwb3J0LlRFU1RGTiArICIyIikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2xpbmsoc3VwcG9ydC5URVNURk4gKyAiMiIpLCBUcnVlKQogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzdXBwb3J0LlRFU1RGTiArICIxIikKQEAgLTI1NSwxNDQgKzE3MiwxMDMgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNsaW5rKQotCi0gICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5leGlzdHMoc3VwcG9ydC5URVNURk4pLCBGYWxzZSkKLSAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoYiJmb28iKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5leGlzdHMoc3VwcG9ydC5URVNURk4pLCBUcnVlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGgubGV4aXN0cyhzdXBwb3J0LlRFU1RGTiksIFRydWUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBub3QgZi5jbG9zZSgpOgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmV4aXN0cykKLQotICAgIGRlZiB0ZXN0X2lzZGlyKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc2RpcihzdXBwb3J0LlRFU1RGTiksIEZhbHNlKQotICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZShiImZvbyIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCi0gICAgICAgICAgICBvcy5yZW1vdmUoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICAgICBvcy5ta2RpcihzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKLSAgICAgICAgICAgIG9zLnJtZGlyKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5pc2RpcikKLQotICAgIGRlZiB0ZXN0X2lzZmlsZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCi0gICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKGIiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHN1cHBvcnQuVEVTVEZOKSwgVHJ1ZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIG9zLm1rZGlyKHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNmaWxlKHN1cHBvcnQuVEVTVEZOKSwgRmFsc2UpCi0gICAgICAgICAgICBvcy5ybWRpcihzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGguaXNkaXIpCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY3JlYXRlX2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInZm9vJykKIAogICAgIGRlZiB0ZXN0X3NhbWVmaWxlKHNlbGYpOgotICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiArICIxIiwgIndiIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZi53cml0ZShiImZvbyIpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgICAgICAgICAgcG9zaXhwYXRoLnNhbWVmaWxlKAotICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTiArICIxIiwKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIFRydWUKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgaGF2ZSBsaW5rcywgYXNzdW1lIHRoYXQgb3Muc3RhdCBkb2Vzbid0IHJldHVybiByZXNvbmFibGUKLSAgICAgICAgICAgICMgaW5vZGUgaW5mb3JtYXRpb24gYW5kIHRodXMsIHRoYXQgc2FtZWZpbGUoKSBkb2Vzbid0IHdvcmsKLSAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6Ci0gICAgICAgICAgICAgICAgb3Muc3ltbGluaygKLSAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoCi0gICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5zYW1lZmlsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOICsgIjEiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMiIKLSAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgVHJ1ZQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc3VwcG9ydC5URVNURk4gKyAiMiIpCi0gICAgICAgICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4gKyAiMiIsICJ3YiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZShiImJhciIpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLnNhbWVmaWxlKAotICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5URVNURk4gKyAiMSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICBGYWxzZQotICAgICAgICAgICAgICAgICkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KKyAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVmaWxlKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZigKKyAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAorICAgICAgICAicG9zaXhwYXRoLnNhbWVmaWxlIGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rcyhzZWxmKToKKyAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorCisgICAgICAgIG9zLnN5bWxpbmsodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZWZpbGUodGVzdF9mbjEsIHRlc3RfZm4yKSkKKworCiAgICAgZGVmIHRlc3Rfc2FtZXN0YXQoc2VsZik6Ci0gICAgICAgIGYgPSBvcGVuKHN1cHBvcnQuVEVTVEZOICsgIjEiLCAid2IiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmLndyaXRlKGIiZm9vIikKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcygKLSAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZXN0YXQoCi0gICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoc3VwcG9ydC5URVNURk4gKyAiMSIpLAotICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOICsgIjEiKQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgVHJ1ZQotICAgICAgICAgICAgKQotICAgICAgICAgICAgIyBJZiB3ZSBkb24ndCBoYXZlIGxpbmtzLCBhc3N1bWUgdGhhdCBvcy5zdGF0KCkgZG9lc24ndCByZXR1cm4gcmVzb25hYmxlCi0gICAgICAgICAgICAjIGlub2RlIGluZm9ybWF0aW9uIGFuZCB0aHVzLCB0aGF0IHNhbWVmaWxlKCkgZG9lc24ndCB3b3JrCi0gICAgICAgICAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoc3VwcG9ydC5URVNURk4gKyAiMSIsIHN1cHBvcnQuVEVTVEZOICsgIjIiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLnNhbWVzdGF0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoc3VwcG9ydC5URVNURk4gKyAiMSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoc3VwcG9ydC5URVNURk4gKyAiMiIpCi0gICAgICAgICAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZQotICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzdXBwb3J0LlRFU1RGTiArICIyIikKLSAgICAgICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiArICIyIiwgIndiIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKGIiYmFyIikKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKAotICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguc2FtZXN0YXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOICsgIjEiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQoc3VwcG9ydC5URVNURk4gKyAiMiIpCi0gICAgICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgICAgIEZhbHNlCi0gICAgICAgICAgICAgICAgKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IGYuY2xvc2UoKToKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4pCisgICAgICAgIHRlc3RfZm5zID0gW3Rlc3RfZm5dKjIKKyAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoCisgICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKKyAgICAgICAgInBvc2l4cGF0aC5zYW1lc3RhdCBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGlua3Moc2VsZik6CisgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKKyAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICBvcy5zeW1saW5rKCp0ZXN0X2ZucykKKyAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4yKQorICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwb3NpeHBhdGguc2FtZXN0YXQoKnN0YXRzKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lc3RhdCkKIAogICAgIGRlZiB0ZXN0X2lzbW91bnQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbW91bnQoIi8iKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudChiIi8iKSwgVHJ1ZSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5pc21vdW50KQorICAgIGRlZiB0ZXN0X2lzbW91bnRfbm9uX2V4aXN0ZW50KHNlbGYpOgorICAgICAgICAjIE5vbi1leGlzdGVudCBtb3VudHBvaW50LgorICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KEFCU1RGTiksIEZhbHNlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBvc2l4cGF0aC5pc21vdW50KEFCU1RGTiksIEZhbHNlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmNhbl9zeW1saW5rKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3QgcmVxdWlyZXMgc3ltbGluayBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9pc21vdW50X3N5bWxpbmtzKHNlbGYpOgorICAgICAgICAjIFN5bWxpbmtzIGFyZSBuZXZlciBtb3VudHBvaW50cy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Muc3ltbGluaygiLyIsIEFCU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9zaXhwYXRoLmlzbW91bnQoQUJTVEZOKSwgRmFsc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy51bmxpbmsoQUJTVEZOKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihwb3NpeCBpcyBOb25lLCAiVGVzdCByZXF1aXJlcyBwb3NpeCBtb2R1bGUiKQorICAgIGRlZiB0ZXN0X2lzbW91bnRfZGlmZmVyZW50X2RldmljZShzZWxmKToKKyAgICAgICAgIyBTaW11bGF0ZSB0aGUgcGF0aCBiZWluZyBvbiBhIGRpZmZlcmVudCBkZXZpY2UgZnJvbSBpdHMgcGFyZW50IGJ5CisgICAgICAgICMgbW9ja2luZyBvdXQgc3RfZGV2LgorICAgICAgICBzYXZlX2xzdGF0ID0gb3MubHN0YXQKKyAgICAgICAgZGVmIGZha2VfbHN0YXQocGF0aCk6CisgICAgICAgICAgICBzdF9pbm8gPSAwCisgICAgICAgICAgICBzdF9kZXYgPSAwCisgICAgICAgICAgICBpZiBwYXRoID09IEFCU1RGTjoKKyAgICAgICAgICAgICAgICBzdF9kZXYgPSAxCisgICAgICAgICAgICAgICAgc3RfaW5vID0gMQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4LnN0YXRfcmVzdWx0KCgwLCBzdF9pbm8sIHN0X2RldiwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmxzdGF0ID0gZmFrZV9sc3RhdAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudChBQlNURk4pLCBUcnVlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MubHN0YXQgPSBzYXZlX2xzdGF0CiAKICAgICBkZWYgdGVzdF9leHBhbmR1c2VyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJmb28iKSwgImZvbyIpCkBAIC00MDIsOCArMjc4LDggQEAKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4vIiksIHN0cikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcihiIn4vIiksIGJ5dGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcigifi8iKSwgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKGIifi8iKSwgYnl0ZXMpCiAgICAgICAgICAgICAjIGlmIGhvbWUgZGlyZWN0b3J5ID09IHJvb3QgZGlyZWN0b3J5LCB0aGlzIHRlc3QgbWFrZXMgbm8gc2Vuc2UKICAgICAgICAgICAgIGlmIHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+IikgIT0gJy8nOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC00MTQsNDkgKzI5MCwxOCBAQAogICAgICAgICAgICAgICAgICAgICBwb3NpeHBhdGguZXhwYW5kdXNlcihiIn4iKSArIGIiLyIsCiAgICAgICAgICAgICAgICAgICAgIHBvc2l4cGF0aC5leHBhbmR1c2VyKGIifi8iKQogICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+cm9vdC8iKSwgc3RyKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHBvc2l4cGF0aC5leHBhbmR1c2VyKCJ+Zm9vLyIpLCBzdHIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoYiJ+cm9vdC8iKSwgYnl0ZXMpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoYiJ+Zm9vLyIpLCBieXRlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn5yb290LyIpLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn5mb28vIiksIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcihiIn5yb290LyIpLCBieXRlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb3NpeHBhdGguZXhwYW5kdXNlcihiIn5mb28vIiksIGJ5dGVzKQogCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9ICcvJwogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi8iKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmV4cGFuZHVzZXIpCi0KLSAgICBkZWYgdGVzdF9leHBhbmR2YXJzKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKLSAgICAgICAgICAgIGVudi5jbGVhcigpCi0gICAgICAgICAgICBlbnZbImZvbyJdID0gImJhciIKLSAgICAgICAgICAgIGVudlsie2ZvbyJdID0gImJhejEiCi0gICAgICAgICAgICBlbnZbIntmb299Il0gPSAiYmF6MiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoImZvbyIpLCAiZm9vIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRmb28gYmFyIiksICJiYXIgYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7Zm9vfWJhciIpLCAiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRbZm9vXWJhciIpLCAiJFtmb29dYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRiYXIgYmFyIiksICIkYmFyIGJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkP2JhciIpLCAiJD9iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJHtmb299YmFyIiksICJiYXJiYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJGZvb31iYXIiKSwgImJhcn1iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycygiJHtmb28iKSwgIiR7Zm9vIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiR7e2Zvb319IiksICJiYXoxfSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKCIkZm9vJGZvbyIpLCAiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoIiRiYXIkYmFyIiksICIkYmFyJGJhciIpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoYiJmb28iKSwgYiJmb28iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycyhiIiRmb28gYmFyIiksIGIiYmFyIGJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKGIiJHtmb299YmFyIiksIGIiYmFyYmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoYiIkW2Zvb11iYXIiKSwgYiIkW2Zvb11iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycyhiIiRiYXIgYmFyIiksIGIiJGJhciBiYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycyhiIiQ/YmFyIiksIGIiJD9iYXIiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguZXhwYW5kdmFycyhiIiR7Zm9vfWJhciIpLCBiImJhcmJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKGIiJGZvb31iYXIiKSwgYiJiYXJ9YmFyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoYiIke2ZvbyIpLCBiIiR7Zm9vIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoYiIke3tmb299fSIpLCBiImJhejF9IikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHZhcnMoYiIkZm9vJGZvbyIpLCBiImJhcmJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5leHBhbmR2YXJzKGIiJGJhciRiYXIiKSwgYiIkYmFyJGJhciIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5leHBhbmR2YXJzKQorICAgICAgICAgICAgICAgICMgZXhwYW5kdXNlciBzaG91bGQgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBwYXNzd29yZCBkYXRhYmFzZQorICAgICAgICAgICAgICAgIGRlbCBlbnZbJ0hPTUUnXQorICAgICAgICAgICAgICAgIGhvbWUgPSBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpLnB3X2RpcgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXhwYXRoLmV4cGFuZHVzZXIoIn4iKSwgaG9tZSkKIAogICAgIGRlZiB0ZXN0X25vcm1wYXRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5ub3JtcGF0aCgiIiksICIuIikKQEAgLTQ3OCwxMTUgKzMyMywxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGgubm9ybXBhdGgoYiIvLy8uLi8vLi9mb28vLi8vYmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvZm9vL2JhciIpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeHBhdGgubm9ybXBhdGgpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfYmFzaWMoc2VsZik6CisgICAgICAgICMgQmFzaWMgb3BlcmF0aW9uLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTisiMSIsIEFCU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKSwgQUJTVEZOKyIxIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTikKIAotICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiZm9vIiBpbiBwb3NpeHBhdGguYWJzcGF0aCgiZm9vIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImZvbyIgaW4gcG9zaXhwYXRoLmFic3BhdGgoYiJmb28iKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQorICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKKyAgICBkZWYgdGVzdF9yZWFscGF0aF9yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3Muc3ltbGluayhwb3NpeHBhdGgucmVscGF0aChBQlNURk4rIjEiKSwgQUJTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4pLCBBQlNURk4rIjEiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLmFic3BhdGgpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfc3ltbGlua19sb29wcyhzZWxmKToKKyAgICAgICAgIyBCdWcgIzkzMDAyNCwgcmV0dXJuIHRoZSBwYXRoIHVuY2hhbmdlZCBpZiB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZQorICAgICAgICAjIHN5bWxpbmsgbG9vcC4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOLCBBQlNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiksIEFCU1RGTikKIAotICAgIGRlZiB0ZXN0X3JlYWxwYXRoKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoImZvbyIgaW4gcmVhbHBhdGgoImZvbyIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJmb28iIGluIHJlYWxwYXRoKGIiZm9vIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnJlYWxwYXRoKQorICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIjEiLCBBQlNURk4rIjIiKQorICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4rIjIiLCBBQlNURk4rIjEiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rIjEiKSwgQUJTVEZOKyIxIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKyIyIiksIEFCU1RGTisiMiIpCiAKLSAgICBpZiBoYXNhdHRyKG9zLCAic3ltbGluayIpOgotICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9iYXNpYyhzZWxmKToKLSAgICAgICAgICAgICMgQmFzaWMgb3BlcmF0aW9uLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOKyIxIiwgQUJTVEZOKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOKSwgQUJTVEZOKyIxIikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKQorICAgICAgICAgICAgIyBUZXN0IHVzaW5nIHJlbGF0aXZlIHBhdGggYXMgd2VsbC4KKyAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSksIEFCU1RGTikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKyIxIikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTisiMiIpCiAKLSAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfc3ltbGlua19sb29wcyhzZWxmKToKLSAgICAgICAgICAgICMgQnVnICM5MzAwMjQsIHJldHVybiB0aGUgcGF0aCB1bmNoYW5nZWQgaWYgd2UgZ2V0IGludG8gYW4gaW5maW5pdGUKLSAgICAgICAgICAgICMgc3ltbGluayBsb29wLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCi0gICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4sIEFCU1RGTikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiksIEFCU1RGTikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAic3ltbGluayIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHN5bWxpbmsgaW1wbGVtZW50YXRpb24iKQorICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKKyAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXNvbHZlX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgV2UgYWxzbyBuZWVkIHRvIHJlc29sdmUgYW55IHN5bWxpbmtzIGluIHRoZSBwYXJlbnRzIG9mIGEgcmVsYXRpdmUKKyAgICAgICAgIyBwYXRoIHBhc3NlZCB0byByZWFscGF0aC4gRS5nLjogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcworICAgICAgICAjIC91c3IvZG9jIHdpdGggJ2RvYycgYmVpbmcgYSBzeW1saW5rIHRvIC91c3Ivc2hhcmUvZG9jLiBXZSBjYWxsCisgICAgICAgICMgcmVhbHBhdGgoImEiKS4gVGhpcyBzaG91bGQgcmV0dXJuIC91c3Ivc2hhcmUvZG9jL2EvLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi95IikKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi95IiwgQUJTVEZOICsgIi9rIikKIAotICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOKyIxIiwgQUJTVEZOKyIyIikKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTisiMiIsIEFCU1RGTisiMSIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rIjEiKSwgQUJTVEZOKyIxIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTisiMiIpLCBBQlNURk4rIjIiKQorICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoImEiKSwgQUJTVEZOICsgIi95L2EiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4gKyAiL3kiKQorICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCiAKLSAgICAgICAgICAgICAgICAjIFRlc3QgdXNpbmcgcmVsYXRpdmUgcGF0aCBhcyB3ZWxsLgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2VuYW1lKEFCU1RGTikpLCBBQlNURk4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQotICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTikKLSAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4rIjEiKQotICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTisiMiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfcmVzb2x2ZV9iZWZvcmVfbm9ybWFsaXppbmcoc2VsZik6CisgICAgICAgICMgQnVnICM5OTA2Njk6IFN5bWJvbGljIGxpbmtzIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgd2UKKyAgICAgICAgIyBub3JtYWxpemUgdGhlIHBhdGguIEUuZy46IGlmIHdlIGhhdmUgZGlyZWN0b3JpZXMgJ2EnLCAnaycgYW5kICd5JworICAgICAgICAjIGluIHRoZSBmb2xsb3dpbmcgaGllcmFyY2h5OgorICAgICAgICAjIGEvay95CisgICAgICAgICMKKyAgICAgICAgIyBhbmQgYSBzeW1ib2xpYyBsaW5rICdsaW5rLXknIHBvaW50aW5nIHRvICd5JyBpbiBkaXJlY3RvcnkgJ2EnLAorICAgICAgICAjIHRoZW4gcmVhbHBhdGgoImxpbmsteS8uLiIpIHNob3VsZCByZXR1cm4gJ2snLCBub3QgJ2EnLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQorICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQorICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvay95IikKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi9rL3kiLCBBQlNURk4gKyAiL2xpbmsteSIpCiAKLSAgICAgICAgZGVmIHRlc3RfcmVhbHBhdGhfcmVzb2x2ZV9wYXJlbnRzKHNlbGYpOgotICAgICAgICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gcmVzb2x2ZSBhbnkgc3ltbGlua3MgaW4gdGhlIHBhcmVudHMgb2YgYSByZWxhdGl2ZQotICAgICAgICAgICAgIyBwYXRoIHBhc3NlZCB0byByZWFscGF0aC4gRS5nLjogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBpcwotICAgICAgICAgICAgIyAvdXNyL2RvYyB3aXRoICdkb2MnIGJlaW5nIGEgc3ltbGluayB0byAvdXNyL3NoYXJlL2RvYy4gV2UgY2FsbAotICAgICAgICAgICAgIyByZWFscGF0aCgiYSIpLiBUaGlzIHNob3VsZCByZXR1cm4gL3Vzci9zaGFyZS9kb2MvYS8uCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKLSAgICAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCi0gICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi95IikKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiArICIveSIsIEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAjIEFic29sdXRlIHBhdGguCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICIvbGluay15Ly4uIiksIEFCU1RGTiArICIvayIpCisgICAgICAgICAgICAjIFJlbGF0aXZlIHBhdGguCisgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKEFCU1RGTikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2VuYW1lKEFCU1RGTikgKyAiL2xpbmsteS8uLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNURk4gKyAiL2siKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2xpbmsteSIpCisgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvay95IikKKyAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKKyAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQogCi0gICAgICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOICsgIi9rIikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCJhIiksIEFCU1RGTiArICIveS9hIikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCi0gICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgIi9rIikKLSAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIveSIpCi0gICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKKyAgICBAc2tpcF9pZl9BQlNURk5fY29udGFpbnNfYmFja3NsYXNoCisgICAgZGVmIHRlc3RfcmVhbHBhdGhfcmVzb2x2ZV9maXJzdChzZWxmKToKKyAgICAgICAgIyBCdWcgIzEyMTM4OTQ6IFRoZSBmaXJzdCBjb21wb25lbnQgb2YgdGhlIHBhdGgsIGlmIG5vdCBhYnNvbHV0ZSwKKyAgICAgICAgIyBtdXN0IGJlIHJlc29sdmVkIHRvby4KIAotICAgICAgICBkZWYgdGVzdF9yZWFscGF0aF9yZXNvbHZlX2JlZm9yZV9ub3JtYWxpemluZyhzZWxmKToKLSAgICAgICAgICAgICMgQnVnICM5OTA2Njk6IFN5bWJvbGljIGxpbmtzIHNob3VsZCBiZSByZXNvbHZlZCBiZWZvcmUgd2UKLSAgICAgICAgICAgICMgbm9ybWFsaXplIHRoZSBwYXRoLiBFLmcuOiBpZiB3ZSBoYXZlIGRpcmVjdG9yaWVzICdhJywgJ2snIGFuZCAneScKLSAgICAgICAgICAgICMgaW4gdGhlIGZvbGxvd2luZyBoaWVyYXJjaHk6Ci0gICAgICAgICAgICAjIGEvay95Ci0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIGFuZCBhIHN5bWJvbGljIGxpbmsgJ2xpbmsteScgcG9pbnRpbmcgdG8gJ3knIGluIGRpcmVjdG9yeSAnYScsCi0gICAgICAgICAgICAjIHRoZW4gcmVhbHBhdGgoImxpbmsteS8uLiIpIHNob3VsZCByZXR1cm4gJ2snLCBub3QgJ2EnLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCi0gICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQotICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvayIpCi0gICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rL3kiKQotICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi9rL3kiLCBBQlNURk4gKyAiL2xpbmsteSIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCisgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCisgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4sIEFCU1RGTiArICJsaW5rIikKKyAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKIAotICAgICAgICAgICAgICAgICMgQWJzb2x1dGUgcGF0aC4KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICIvbGluay15Ly4uIiksIEFCU1RGTiArICIvayIpCi0gICAgICAgICAgICAgICAgIyBSZWxhdGl2ZSBwYXRoLgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2VuYW1lKEFCU1RGTikgKyAiL2xpbmsteS8uLiIpLCBBQlNURk4gKyAiL2siKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKLSAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2xpbmsteSIpCi0gICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4gKyAiL2sveSIpCi0gICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4gKyAiL2siKQotICAgICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQotCi0gICAgICAgIGRlZiB0ZXN0X3JlYWxwYXRoX3Jlc29sdmVfZmlyc3Qoc2VsZik6Ci0gICAgICAgICAgICAjIEJ1ZyAjMTIxMzg5NDogVGhlIGZpcnN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aCwgaWYgbm90IGFic29sdXRlLAotICAgICAgICAgICAgIyBtdXN0IGJlIHJlc29sdmVkIHRvby4KLQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCi0gICAgICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQotICAgICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvayIpCi0gICAgICAgICAgICAgICAgb3Muc3ltbGluayhBQlNURk4sIEFCU1RGTiArICJsaW5rIikKLSAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKEFCU1RGTikpCi0KLSAgICAgICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZSArICJsaW5rIiksIEFCU1RGTikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2UgKyAibGluay9rIiksIEFCU1RGTiArICIvayIpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9wYXRoKQotICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTiArICJsaW5rIikKLSAgICAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvayIpCi0gICAgICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCisgICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsiKSwgQUJTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsvayIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAibGluayIpCisgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvayIpCisgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKIAogICAgIGRlZiB0ZXN0X3JlbHBhdGgoc2VsZik6CiAgICAgICAgIChyZWFsX2dldGN3ZCwgb3MuZ2V0Y3dkKSA9IChvcy5nZXRjd2QsIGxhbWJkYTogciIvaG9tZS91c2VyL2JhciIpCkBAIC02NDQsOCArNTAxLDIwIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5nZXRjd2RiID0gcmVhbF9nZXRjd2RiCiAKKyAgICBkZWYgdGVzdF9zYW1lb3BlbmZpbGUoc2VsZik6CisgICAgICAgIGZuYW1lID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAid2IiKSBhcyBhLCBvcGVuKGZuYW1lLCAid2IiKSBhcyBiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lb3BlbmZpbGUoYS5maWxlbm8oKSwgYi5maWxlbm8oKSkpCisKKworY2xhc3MgUG9zaXhDb21tb25UZXN0KHRlc3RfZ2VuZXJpY3BhdGguQ29tbW9uVGVzdCk6CisgICAgcGF0aG1vZHVsZSA9IHBvc2l4cGF0aAorICAgIGF0dHJpYnV0ZXMgPSBbJ3JlbHBhdGgnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywgJ3NhbWVzdGF0J10KKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUG9zaXhQYXRoVGVzdCkKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQb3NpeFBhdGhUZXN0LCBQb3NpeENvbW1vblRlc3QpCisKIAogaWYgX19uYW1lX189PSJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5IGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKaW5kZXggYWQzYTE5My4uNGU1M2NkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcHJpbnQucHkKQEAgLTMsNiArMyw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZXN0LnRlc3Rfc2V0CiBpbXBvcnQgcmFuZG9tCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBpdGVydG9vbHMKIAogIyBsaXN0LCB0dXBsZSBhbmQgZGljdCBzdWJjbGFzc2VzIHRoYXQgZG8gb3IgZG9uJ3Qgb3ZlcndyaXRlIF9fcmVwcl9fCiBjbGFzcyBsaXN0MihsaXN0KToKQEAgLTE5NSw2ICsxOTcsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh7Inh5XHRhYlxuIjogKDMsKSwgNTogW1tdXSwgKCk6IHt9fSksCiAgICAgICAgICAgICByIns1OiBbW11dLCAneHlcdGFiXG4nOiAoMywpLCAoKToge319IikKIAorICAgIGRlZiB0ZXN0X29yZGVyZWRfZGljdChzZWxmKToKKyAgICAgICAgd29yZHMgPSAndGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciBhIGxhenkgZG9nJy5zcGxpdCgpCisgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCh6aXAod29yZHMsIGl0ZXJ0b29scy5jb3VudCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkKSwKKyIiIlwKK3sndGhlJzogMCwKKyAncXVpY2snOiAxLAorICdicm93bic6IDIsCisgJ2ZveCc6IDMsCisgJ2p1bXBlZCc6IDQsCisgJ292ZXInOiA1LAorICdhJzogNiwKKyAnbGF6eSc6IDcsCisgJ2RvZyc6IDh9IiIiKQogICAgIGRlZiB0ZXN0X3N1YmNsYXNzaW5nKHNlbGYpOgogICAgICAgICBvID0geyduYW1lcyB3aXRoIHNwYWNlcyc6ICdzaG91bGQgYmUgcHJlc2VudGVkIHVzaW5nIHJlcHIoKScsCiAgICAgICAgICAgICAgJ290aGVycy5zaG91bGQubm90LmJlJzogJ2xpa2UudGhpcyd9CkBAIC0yMDMsNyArMjE5LDI5IEBACiAgb3RoZXJzLnNob3VsZC5ub3QuYmU6IGxpa2UudGhpc30iIiIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEb3R0ZWRQcmV0dHlQcmludGVyKCkucGZvcm1hdChvKSwgZXhwKQogCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9zZXRfcmVwcnMoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGNyZWF0ZXMgYSBjb21wbGV4IGFycmFuZ2VtZW50IG9mIGZyb3plbnNldHMgYW5kCisgICAgICAgICMgY29tcGFyZXMgdGhlIHByZXR0eS1wcmludGVkIHJlcHIgYWdhaW5zdCBhIHN0cmluZyBoYXJkLWNvZGVkIGluCisgICAgICAgICMgdGhlIHRlc3QuICBUaGUgaGFyZC1jb2RlZCByZXByIGRlcGVuZHMgb24gdGhlIHNvcnQgb3JkZXIgb2YKKyAgICAgICAgIyBmcm96ZW5zZXRzLgorICAgICAgICAjCisgICAgICAgICMgSG93ZXZlciwgYXMgdGhlIGRvY3MgcG9pbnQgb3V0OiAiU2luY2Ugc2V0cyBvbmx5IGRlZmluZQorICAgICAgICAjIHBhcnRpYWwgb3JkZXJpbmcgKHN1YnNldCByZWxhdGlvbnNoaXBzKSwgdGhlIG91dHB1dCBvZiB0aGUKKyAgICAgICAgIyBsaXN0LnNvcnQoKSBtZXRob2QgaXMgdW5kZWZpbmVkIGZvciBsaXN0cyBvZiBzZXRzLiIKKyAgICAgICAgIworICAgICAgICAjIEluIGEgbnV0c2hlbGwsIHRoZSB0ZXN0IGFzc3VtZXMgZnJvemVuc2V0KHswfSkgd2lsbCBhbHdheXMKKyAgICAgICAgIyBzb3J0IGJlZm9yZSBmcm96ZW5zZXQoezF9KSwgYnV0OgorICAgICAgICAjCisgICAgICAgICMgPj4+IGZyb3plbnNldCh7MH0pIDwgZnJvemVuc2V0KHsxfSkKKyAgICAgICAgIyBGYWxzZQorICAgICAgICAjID4+PiBmcm96ZW5zZXQoezF9KSA8IGZyb3plbnNldCh7MH0pCisgICAgICAgICMgRmFsc2UKKyAgICAgICAgIworICAgICAgICAjIENvbnNlcXVlbnRseSwgdGhpcyB0ZXN0IGlzIGZyYWdpbGUgYW5kCisgICAgICAgICMgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50LiAgU21hbGwgY2hhbmdlcyB0byBQeXRob24ncyBzb3J0CisgICAgICAgICMgYWxnb3JpdGhtIGNhdXNlIHRoZSB0ZXN0IHRvIGZhaWwgd2hlbiBpdCBzaG91bGQgcGFzcy4KKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNldCgpKSwgJ3NldCgpJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzZXQocmFuZ2UoMykpKSwgJ3swLCAxLCAyfScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZnJvemVuc2V0KCkpLCAnZnJvemVuc2V0KCknKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKaW5kZXggYjFhY2U0ZC4uOGQzN2JiYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcmludC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CkBAIC04LDcgKzgsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotaW1wb3J0IHN5cwogdHJ5OgogICAgICMgMy54CiAgICAgZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDI0M2EzMjIuLmNkN2VjNTgKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQpAQCAtMSw2ICsxLDUgQEAKICIiIlRlc3Qgc3VpdGUgZm9yIHRoZSBwcm9maWxlIG1vZHVsZS4iIiIKIAotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgcHN0YXRzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTcyLDcgKzcxLDcgQEAKICAgICAgICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHByb2YsIHN0cmVhbT1zKQogICAgICAgICAgICAgc3RhdHMucHJpbnRfc3RhdHMoKQogICAgICAgICAgICAgcmVzID0gcy5nZXR2YWx1ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0IGluIHJlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IG1heDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKaW5kZXggZDk0NjlkOS4uY2M2YTg3MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CkBAIC0xLDYgKzEsNyBAQAogIyBUZXN0IGNhc2UgZm9yIHByb3BlcnR5CiAjIG1vcmUgdGVzdHMgYXJlIGluIHRlc3RfZGVzY3IKIAoraW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKQEAgLTkxLDcgKzkyLDYgQEAKICAgICAgICAgYmFzZS5zcGFtID0gMjAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQogCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgogICAgICAgICAjIHNlZSAjMTYyMApAQCAtOTksMTQgKzk5LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLnNwYW0uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCiAgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKICAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCiAgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5zcGFtLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgogICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCkBAIC0xMjYsMTYgKzEzOSw2IEBACiAKIGNsYXNzIFByb3BlcnR5U3ViY2xhc3NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICBkZWYgdGVzdF9kb2NzdHJpbmdfY29weShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6Ci0gICAgICAgICAgICBAUHJvcGVydHlTdWIKLSAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgotICAgICAgICAgICAgICAgICIiInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIiIgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBGb28uc3BhbS5fX2RvY19fLAotICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBwcm9wZXJ0eSBzdWJjbGFzcyIpCi0KICAgICBkZWYgdGVzdF9zbG90c19kb2NzdHJpbmdfY29weV9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgpAQCAtMTQ4LDYgKzE1MSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJBdHRyaWJ1dGVFcnJvciBub3QgcmFpc2VkIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIGRlZiB0ZXN0X2RvY3N0cmluZ19jb3B5KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgIEBQcm9wZXJ0eVN1YgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5zcGFtLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplIDw9IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3Byb3BlcnR5X3NldHRlcl9jb3BpZXNfZ2V0dGVyX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6IHNlbGYuX3NwYW0gPSAxCkBAIC0xNzksNiArMTk2LDggQEAKICAgICAgICAgICAgIEZvb1N1Yi5zcGFtLl9fZG9jX18sCiAgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIHByb3BlcnR5IHN1YmNsYXNzIikKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplIDw9IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQogICAgIGRlZiB0ZXN0X3Byb3BlcnR5X25ld19nZXR0ZXJfbmV3X2RvY3N0cmluZyhzZWxmKToKIAogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHN0YXRzLnB5IGIvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKaW5kZXggN2MyODQ2NS4uOWViZWViYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wc3RhdHMucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBwc3RhdHMKIAogCkBAIC04LDggKzksOCBAQAogICAgICIiIlRlc3RzIGZvciBwc3RhdHMuYWRkX2NhbGxlcnMgaGVscGVyLiIiIgogCiAgICAgZGVmIHRlc3RfY29tYmluZV9yZXN1bHRzKHNlbGYpOgotICAgICAgICAiIiJwc3RhdHMuYWRkX2NhbGxlcnMgc2hvdWxkIGNvbWJpbmUgdGhlIGNhbGwgcmVzdWx0cyBvZiBib3RoIHRhcmdldAotICAgICAgICBhbmQgc291cmNlIGJ5IGFkZGluZyB0aGUgY2FsbCB0aW1lLiBTZWUgaXNzdWUxMjY5LiIiIgorICAgICAgICAjIHBzdGF0cy5hZGRfY2FsbGVycyBzaG91bGQgY29tYmluZSB0aGUgY2FsbCByZXN1bHRzIG9mIGJvdGggdGFyZ2V0CisgICAgICAgICMgYW5kIHNvdXJjZSBieSBhZGRpbmcgdGhlIGNhbGwgdGltZS4gU2VlIGlzc3VlMTI2OS4KICAgICAgICAgIyBuZXcgZm9ybWF0OiB1c2VkIGJ5IHRoZSBjUHJvZmlsZSBtb2R1bGUKICAgICAgICAgdGFyZ2V0ID0geyJhIjogKDEsIDIsIDMsIDQpfQogICAgICAgICBzb3VyY2UgPSB7ImEiOiAoMSwgMiwgMywgNCksICJiIjogKDUsIDYsIDcsIDgpfQpAQCAtMjIsOSArMjMsMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdfY2FsbGVycywgeydhJzogMiwgJ2InOiA1fSkKIAogCitjbGFzcyBTdGF0c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN0YXRzX2ZpbGUgPSBzdXBwb3J0LmZpbmRmaWxlKCdwc3RhdHMucGNrJykKKyAgICAgICAgc2VsZi5zdGF0cyA9IHBzdGF0cy5TdGF0cyhzdGF0c19maWxlKQorCisgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBTdHJpbmdJTygpCisgICAgICAgIHN0YXRzID0gcHN0YXRzLlN0YXRzKHN0cmVhbT1zdHJlYW0pCisgICAgICAgIHN0YXRzLmFkZChzZWxmLnN0YXRzLCBzZWxmLnN0YXRzKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgQWRkQ2FsbGVyc1Rlc3RDYXNlCisgICAgICAgIEFkZENhbGxlcnNUZXN0Q2FzZSwKKyAgICAgICAgU3RhdHNUZXN0Q2FzZSwKICAgICApCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wd2QucHkgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQppbmRleCA0MDY1NzhhLi5hZTFjOGZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B3ZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B3ZC5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTEzLDE5ICsxNCwxOSBAQAogICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZSksIDcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbMF0sIGUucHdfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUucHdfbmFtZSwgc3RyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X25hbWUsIHN0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVsxXSwgZS5wd19wYXNzd2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLnB3X3Bhc3N3ZCwgc3RyKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLnB3X3Bhc3N3ZCwgc3RyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzJdLCBlLnB3X3VpZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUucHdfdWlkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfdWlkLCBpbnQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbM10sIGUucHdfZ2lkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZS5wd19naWQsIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19naWQsIGludCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZVs0XSwgZS5wd19nZWNvcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUucHdfZ2Vjb3MsIHN0cikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5wd19nZWNvcywgc3RyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWzVdLCBlLnB3X2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUucHdfZGlyLCBzdHIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfZGlyLCBzdHIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVbNl0sIGUucHdfc2hlbGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLnB3X3NoZWxsLCBzdHIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUucHdfc2hlbGwsIHN0cikKIAogICAgICAgICAgICAgIyBUaGUgZm9sbG93aW5nIHdvbid0IHdvcmssIGJlY2F1c2Ugb2YgZHVwbGljYXRlIGVudHJpZXMKICAgICAgICAgICAgICMgZm9yIG9uZSB1aWQKQEAgLTQzLDggKzQ0LDggQEAKICAgICAgICAgZm9yIGUgaW4gZW50cmllczoKICAgICAgICAgICAgIGlmIG5vdCBlWzBdIG9yIGVbMF0gPT0gJysnOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlICMgc2tpcCBOSVMgZW50cmllcyBldGMuCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHdkLmdldHB3bmFtKGUucHdfbmFtZSkgaW4gZW50cmllc2J5bmFtZVtlLnB3X25hbWVdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB3ZC5nZXRwd3VpZChlLnB3X3VpZCkgaW4gZW50cmllc2J5dWlkW2UucHdfdWlkXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHdkLmdldHB3bmFtKGUucHdfbmFtZSksIGVudHJpZXNieW5hbWVbZS5wd19uYW1lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocHdkLmdldHB3dWlkKGUucHdfdWlkKSwgZW50cmllc2J5dWlkW2UucHdfdWlkXSkKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwd2QuZ2V0cHd1aWQpCkBAIC04MywxMSArODQsMTMgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcHdkLmdldHB3bmFtLCBmYWtlbmFtZSkKIAotICAgICAgICAjIENob29zZSBhIG5vbi1leGlzdGVudCB1aWQuCi0gICAgICAgIGZha2V1aWQgPSA0MTI3Ci0gICAgICAgIHdoaWxlIGZha2V1aWQgaW4gYnl1aWRzOgotICAgICAgICAgICAgZmFrZXVpZCA9IChmYWtldWlkICogMykgJSAweDEwMDAwCi0KKyAgICAgICAgIyBJbiBzb21lIGNhc2VzLCBieXVpZHMgaXNuJ3QgYSBjb21wbGV0ZSBsaXN0IG9mIGFsbCB1c2VycyBpbiB0aGUKKyAgICAgICAgIyBzeXN0ZW0sIHNvIGlmIHdlIHRyeSB0byBwaWNrIGEgdmFsdWUgbm90IGluIGJ5dWlkcyAodmlhIGEgcGVydHVyYmluZworICAgICAgICAjIGxvb3AsIHNheSksIHB3ZC5nZXRwd3VpZCgpIG1pZ2h0IHN0aWxsIGJlIGFibGUgdG8gZmluZCBkYXRhIGZvciB0aGF0CisgICAgICAgICMgdWlkLiBVc2luZyBzeXMubWF4aW50IG1heSBwcm92b2tlIHRoZSBzYW1lIHByb2JsZW1zLCBidXQgaG9wZWZ1bGx5CisgICAgICAgICMgaXQgd2lsbCBiZSBhIG1vcmUgcmVwZWF0YWJsZSBmYWlsdXJlLgorICAgICAgICBmYWtldWlkID0gc3lzLm1heHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmYWtldWlkLCBieXVpZHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBwd2QuZ2V0cHd1aWQsIGZha2V1aWQpCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHljbGJyLnB5IGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKaW5kZXggNWI2ZmNiMC4uMzA4MmIyOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkKQEAgLTQwLDcgKzQwLDcgQEAKICAgICAgICAgaWYga2V5IGluIGlnbm9yZTogcmV0dXJuCiAgICAgICAgIGlmIGtleSBub3QgaW4gb2JqOgogICAgICAgICAgICAgcHJpbnQoIioqKiIsa2V5LCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrZXkgaW4gb2JqLCAiJXIgaW4gJXIiICUgKGtleSwgb2JqKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIG9iaikKIAogICAgIGRlZiBhc3NlcnRFcXVhbHNPcklnbm9yZWQoc2VsZiwgYSwgYiwgaWdub3JlKToKICAgICAgICAgJycnIHN1Y2NlZWQgaWZmIGEgPT0gYiBvciBhIGluIGlnbm9yZSBvciBiIGluIGlnbm9yZSAnJycKQEAgLTg0LDEyICs4NCwxMiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRIYXNhdHRyKG1vZHVsZSwgbmFtZSwgaWdub3JlKQogICAgICAgICAgICAgcHlfaXRlbSA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgcHljbGJyLkZ1bmN0aW9uKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShweV9pdGVtLCAoRnVuY3Rpb25UeXBlLCBCdWlsdGluRnVuY3Rpb25UeXBlKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5X2l0ZW0sIChGdW5jdGlvblR5cGUsIEJ1aWx0aW5GdW5jdGlvblR5cGUpKQogICAgICAgICAgICAgICAgIGlmIHB5X2l0ZW0uX19tb2R1bGVfXyAhPSBtb2R1bGVOYW1lOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAgICMgc2tpcCBmdW5jdGlvbnMgdGhhdCBjYW1lIGZyb20gc29tZXdoZXJlIGVsc2UKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5X2l0ZW0uX19tb2R1bGVfXywgdmFsdWUubW9kdWxlKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShweV9pdGVtLCB0eXBlKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlfaXRlbSwgdHlwZSkKICAgICAgICAgICAgICAgICBpZiBweV9pdGVtLl9fbW9kdWxlX18gIT0gbW9kdWxlTmFtZToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUgICAjIHNraXAgY2xhc3NlcyB0aGF0IGNhbWUgZnJvbSBzb21ld2hlcmUgZWxzZQogCkBAIC0xNDEsNyArMTQxLDggQEAKICAgICBkZWYgdGVzdF9lYXN5KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdweWNsYnInKQogICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdhc3QnKQotICAgICAgICBzZWxmLmNoZWNrTW9kdWxlKCdkb2N0ZXN0JywgaWdub3JlPSgiVGVzdFJlc3VsdHMiLCAiX1Nwb29mT3V0IikpCisgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJUZXN0UmVzdWx0cyIsICJfU3Bvb2ZPdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiKSkKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZGlmZmxpYicsIGlnbm9yZT0oIk1hdGNoIiwpKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9ycyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CmluZGV4IGZhNDliYjguLmJjZGRmZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWRvYy5weQpAQCAtMSwyMiArMSwzMCBAQAotaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAoraW1wb3J0IHN5cwogaW1wb3J0IGRpZmZsaWIKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgcmUKLWltcG9ydCBweWRvYwogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBweWRvYwogaW1wb3J0IGtleXdvcmQKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IHhtbC5ldHJlZQoraW1wb3J0IHRleHR3cmFwCitmcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgZm9yZ2V0LCBybXRyZWUsIEVudmlyb25tZW50VmFyR3VhcmQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGZvcmdldCwgcm10cmVlLCBFbnZpcm9ubWVudFZhckd1YXJkLCBcCisgICAgIHJlYXBfY2hpbGRyZW4sIGNhcHR1cmVkX291dHB1dCwgY2FwdHVyZWRfc3Rkb3V0CiAKIGZyb20gdGVzdCBpbXBvcnQgcHlkb2NfbW9kCiAKLWV4cGVjdGVkX3RleHRfcGF0dGVybiA9IFwKLSIiIgorIyBKdXN0IGluIGNhc2Ugc3lzLm1vZHVsZXNbInRlc3QiXSBoYXMgdGhlIG9wdGlvbmFsIGF0dHJpYnV0ZSBfX2xvYWRlcl9fLgoraWYgaGFzYXR0cihweWRvY19tb2QsICJfX2xvYWRlcl9fIik6CisgICAgZGVsIHB5ZG9jX21vZC5fX2xvYWRlcl9fCisKK2V4cGVjdGVkX3RleHRfcGF0dGVybiA9ICIiIgogTkFNRQogICAgIHRlc3QucHlkb2NfbW9kIC0gVGhpcyBpcyBhIHRlc3QgbW9kdWxlIGZvciB0ZXN0X3B5ZG9jCiAlcwpAQCAtODEsOCArODksNyBAQAogICAgICVzCiAiIiIuc3RyaXAoKQogCi1leHBlY3RlZF9odG1sX3BhdHRlcm4gPSBcCi0iIiIKK2V4cGVjdGVkX2h0bWxfcGF0dGVybiA9ICIiIgogPHRhYmxlIHdpZHRoPSIxMDAlJSIgY2VsbHNwYWNpbmc9MCBjZWxscGFkZGluZz0yIGJvcmRlcj0wIHN1bW1hcnk9ImhlYWRpbmciPgogPHRyIGJnY29sb3I9IiM3Nzk5ZWUiPgogPHRkIHZhbGlnbj1ib3R0b20+Jm5ic3A7PGJyPgpAQCAtMTc4LDcgKzE4NSw3IEBACiBceDIwXHgyMFx4MjBceDIwCiA8dHI+PHRkIGJnY29sb3I9IiM3Nzk5ZWUiPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3R0PjwvdGQ+PHRkPiZuYnNwOzwvdGQ+CiA8dGQgd2lkdGg9IjEwMCUlIj5Ob2JvZHk8L3RkPjwvdHI+PC90YWJsZT4KLSIiIi5zdHJpcCgpCisiIiIuc3RyaXAoKSAjICcgPC0gZW1hY3MgdHVyZAogCiAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1pc3NpbmcgbW9kdWxlCkBAIC0xOTMsOCArMjAwLDExIEBACiAgICAgb3V0cHV0IG9mIHB5ZG9jLgogICAgICIiIgogICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZSwgcHlkb2MuX19maWxlX18sICIgIi5qb2luKGFyZ3MpLCBtb2R1bGVfbmFtZV0KLSAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0LnJlYWQoKQotICAgIHJldHVybiBvdXRwdXQuc3RyaXAoKQorICAgIHRyeToKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KKyAgICAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpCisgICAgZmluYWxseToKKyAgICAgICAgcmVhcF9jaGlsZHJlbigpCiAKIGRlZiBnZXRfcHlkb2NfaHRtbChtb2R1bGUpOgogICAgICJSZXR1cm5zIHB5ZG9jIGdlbmVyYXRlZCBvdXRwdXQgYXMgaHRtbCIKQEAgLTIxNCwyMiArMjI0LDMyIEBACiAKICAgICBvdXRwdXQgPSBkb2MuZG9jbW9kdWxlKG1vZHVsZSkKIAotICAgICMgY2xlYW51cCB0aGUgZXh0cmEgdGV4dCBmb3JtYXR0aW5nIHRoYXQgcHlkb2MgcHJlZm9ybXMKKyAgICAjIGNsZWFuIHVwIHRoZSBleHRyYSB0ZXh0IGZvcm1hdHRpbmcgdGhhdCBweWRvYyBwZXJmb3JtcwogICAgIHBhdHQgPSByZS5jb21waWxlKCdcYi4nKQogICAgIG91dHB1dCA9IHBhdHQuc3ViKCcnLCBvdXRwdXQpCiAgICAgcmV0dXJuIG91dHB1dC5zdHJpcCgpLCBsb2MKIAogZGVmIHByaW50X2RpZmZzKHRleHQxLCB0ZXh0Mik6CiAgICAgIlByaW50cyB1bmlmaWVkIGRpZmZzIGZvciB0d28gdGV4dHMiCisgICAgIyBYWFggbm93IG9ic29sZXRlLCB1c2UgdW5pdHRlc3QgYnVpbHQtaW4gc3VwcG9ydAogICAgIGxpbmVzMSA9IHRleHQxLnNwbGl0bGluZXMoVHJ1ZSkKICAgICBsaW5lczIgPSB0ZXh0Mi5zcGxpdGxpbmVzKFRydWUpCiAgICAgZGlmZnMgPSBkaWZmbGliLnVuaWZpZWRfZGlmZihsaW5lczEsIGxpbmVzMiwgbj0wLCBmcm9tZmlsZT0nZXhwZWN0ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9maWxlPSdnb3QnKQogICAgIHByaW50KCdcbicgKyAnJy5qb2luKGRpZmZzKSkKIAorZGVmIGdldF9odG1sX3RpdGxlKHRleHQpOgorICAgICMgQml0IG9mIGhhY2ssIGJ1dCBnb29kIGVub3VnaCBmb3IgdGVzdCBwdXJwb3NlcworICAgIGhlYWRlciwgXywgXyA9IHRleHQucGFydGl0aW9uKCI8L2hlYWQ+IikKKyAgICBfLCBfLCB0aXRsZSA9IGhlYWRlci5wYXJ0aXRpb24oIjx0aXRsZT4iKQorICAgIHRpdGxlLCBfLCBfID0gdGl0bGUucGFydGl0aW9uKCI8L3RpdGxlPiIpCisgICAgcmV0dXJuIHRpdGxlCiAKLWNsYXNzIFB5RG9jRG9jVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKK2NsYXNzIFB5ZG9jRG9jVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF9odG1sX2RvYyhzZWxmKToKICAgICAgICAgcmVzdWx0LCBkb2NfbG9jID0gZ2V0X3B5ZG9jX2h0bWwocHlkb2NfbW9kKQogICAgICAgICBtb2RfZmlsZSA9IGluc3BlY3QuZ2V0YWJzZmlsZShweWRvY19tb2QpCkBAIC0yNDMsNiArMjYzLDggQEAKICAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX2h0bWwsIHJlc3VsdCkKICAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdF90ZXh0X2RvYyhzZWxmKToKICAgICAgICAgcmVzdWx0LCBkb2NfbG9jID0gZ2V0X3B5ZG9jX3RleHQocHlkb2NfbW9kKQogICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfdGV4dF9wYXR0ZXJuICUgXApAQCAtMjcyLDcgKzI5NCw4IEBACiAgICAgICAgICAgICAoJ2lfYW1fbm90X2hlcmUnLCAnaV9hbV9ub3RfaGVyZScpLAogICAgICAgICAgICAgKCd0ZXN0LmlfYW1fbm90X2hlcmVfZWl0aGVyJywgJ2lfYW1fbm90X2hlcmVfZWl0aGVyJyksCiAgICAgICAgICAgICAoJ3Rlc3QuaV9hbV9ub3RfaGVyZS5uZWl0aGVyX2FtX2knLCAnaV9hbV9ub3RfaGVyZS5uZWl0aGVyX2FtX2knKSwKLSAgICAgICAgICAgICgnaV9hbV9ub3RfaGVyZS57fScuZm9ybWF0KG1vZG5hbWUpLCAnaV9hbV9ub3RfaGVyZS57fScuZm9ybWF0KG1vZG5hbWUpKSwKKyAgICAgICAgICAgICgnaV9hbV9ub3RfaGVyZS57fScuZm9ybWF0KG1vZG5hbWUpLAorICAgICAgICAgICAgICdpX2FtX25vdF9oZXJlLnt9Jy5mb3JtYXQobW9kbmFtZSkpLAogICAgICAgICAgICAgKCd0ZXN0Lnt9Jy5mb3JtYXQobW9kbmFtZSksIG1vZG5hbWUpLAogICAgICAgICAgICAgKQogCkBAIC0yODksOSArMzEyLDggQEAKICAgICAgICAgICAgIGZ1bGxtb2RuYW1lID0gb3MucGF0aC5qb2luKFRFU1RGTiwgbW9kbmFtZSkKICAgICAgICAgICAgIHNvdXJjZWZuID0gZnVsbG1vZG5hbWUgKyBvcy5leHRzZXAgKyAicHkiCiAgICAgICAgICAgICBmb3IgaW1wb3J0c3RyaW5nLCBleHBlY3RlZGlubXNnIGluIHRlc3RwYWlyczoKLSAgICAgICAgICAgICAgICBmID0gb3Blbihzb3VyY2VmbiwgJ3cnKQotICAgICAgICAgICAgICAgIGYud3JpdGUoImltcG9ydCB7fVxuIi5mb3JtYXQoaW1wb3J0c3RyaW5nKSkKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlZm4sICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHt9XG4iLmZvcm1hdChpbXBvcnRzdHJpbmcpKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVuX3B5ZG9jKG1vZG5hbWUpLmRlY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC0zMTgsNiArMzQwLDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBpZCgiPHR5cGUgJ2V4Y2VwdGlvbnMuRXhjZXB0aW9uJz4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiPHR5cGUgJ2V4Y2VwdGlvbnMuRXhjZXB0aW9uJz4iKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZScpCisgICAgZGVmIHRlc3RfaGVscF9vdXRwdXRfcmVkaXJlY3Qoc2VsZik6CisgICAgICAgICMgaXNzdWUgOTQwMjg2LCBpZiBvdXRwdXQgaXMgc2V0IGluIEhlbHBlciwgdGhlbiBhbGwgb3V0cHV0IGZyb20KKyAgICAgICAgIyBIZWxwZXIuaGVscCBzaG91bGQgYmUgcmVkaXJlY3RlZAorICAgICAgICBvbGRfcGF0dGVybiA9IGV4cGVjdGVkX3RleHRfcGF0dGVybgorICAgICAgICBnZXRwYWdlcl9vbGQgPSBweWRvYy5nZXRwYWdlcgorICAgICAgICBnZXRwYWdlcl9uZXcgPSBsYW1iZGE6IChsYW1iZGEgeDogeCkKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorCisgICAgICAgIGJ1ZiA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1idWYpCisgICAgICAgIHVudXNlZCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHB5ZG9jX21vZCkKKyAgICAgICAgbW9kdWxlID0gInRlc3QucHlkb2NfbW9kIgorICAgICAgICBoZWxwX2hlYWRlciA9ICIiIgorICAgICAgICBIZWxwIG9uIG1vZHVsZSB0ZXN0LnB5ZG9jX21vZCBpbiB0ZXN0OgorCisgICAgICAgICIiIi5sc3RyaXAoKQorICAgICAgICBoZWxwX2hlYWRlciA9IHRleHR3cmFwLmRlZGVudChoZWxwX2hlYWRlcikKKyAgICAgICAgZXhwZWN0ZWRfaGVscF9wYXR0ZXJuID0gaGVscF9oZWFkZXIgKyBleHBlY3RlZF90ZXh0X3BhdHRlcm4KKworICAgICAgICBweWRvYy5nZXRwYWdlciA9IGdldHBhZ2VyX25ldworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgnc3Rkb3V0JykgYXMgb3V0cHV0LCBcCisgICAgICAgICAgICAgICAgIGNhcHR1cmVkX291dHB1dCgnc3RkZXJyJykgYXMgZXJyOgorICAgICAgICAgICAgICAgIGhlbHBlci5oZWxwKG1vZHVsZSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBidWYuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX2hlbHBfcGF0dGVybiAlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvY19sb2MsIGluc3BlY3QuZ2V0YWJzZmlsZShweWRvY19tb2QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIG91dHB1dC5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGVyci5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWRfdGV4dCwgcmVzdWx0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcHlkb2MuZ2V0cGFnZXIgPSBnZXRwYWdlcl9vbGQKKworICAgIGRlZiB0ZXN0X25hbWVkdHVwbGVfcHVibGljX3VuZGVyc2NvcmUoc2VsZik6CisgICAgICAgIE5UID0gbmFtZWR0dXBsZSgnTlQnLCBbJ2FiYycsICdkZWYnXSwgcmVuYW1lPVRydWUpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgaGVscF9pbzoKKyAgICAgICAgICAgIGhlbHAoTlQpCisgICAgICAgIGhlbHB0ZXh0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ18xJywgaGVscHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19yZXBsYWNlJywgaGVscHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19hc2RpY3QnLCBoZWxwdGV4dCkKKwogCiBjbGFzcyBUZXN0RGVzY3JpcHRpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzI1LDI0ICszOTEsNzkgQEAKICAgICAgICAgIyBDaGVjayB0aGF0IHB5ZG9jZm9kZGVyIG1vZHVsZSBjYW4gYmUgZGVzY3JpYmVkCiAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgcHlkb2Nmb2RkZXIKICAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhweWRvY2ZvZGRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJweWRvY2ZvZGRlciIgaW4gZG9jKQotCi0gICAgZGVmIHRlc3RfY2xhc3NpY19jbGFzcyhzZWxmKToKLSAgICAgICAgY2xhc3MgQzogIkNsYXNzaWMgY2xhc3MiCi0gICAgICAgIGMgPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5kZXNjcmliZShDKSwgJ2NsYXNzIEMnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKGMpLCAnQycpCi0gICAgICAgIGV4cGVjdGVkID0gJ0MgaW4gbW9kdWxlICVzJyAlIF9fbmFtZV9fCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBweWRvYy5yZW5kZXJfZG9jKGMpKQorICAgICAgICBzZWxmLmFzc2VydEluKCJweWRvY2ZvZGRlciIsIGRvYykKIAogICAgIGRlZiB0ZXN0X2NsYXNzKHNlbGYpOgotICAgICAgICBjbGFzcyBDKG9iamVjdCk6ICJOZXctc3R5bGUgY2xhc3MiCisgICAgICAgIGNsYXNzIEM6ICJOZXctc3R5bGUgY2xhc3MiCiAgICAgICAgIGMgPSBDKCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5ZG9jLmRlc2NyaWJlKEMpLCAnY2xhc3MgQycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHlkb2MuZGVzY3JpYmUoYyksICdDJykKICAgICAgICAgZXhwZWN0ZWQgPSAnQyBpbiBtb2R1bGUgJXMgb2JqZWN0JyAlIF9fbmFtZV9fCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShleHBlY3RlZCBpbiBweWRvYy5yZW5kZXJfZG9jKGMpKQorICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBweWRvYy5yZW5kZXJfZG9jKGMpKQorCisKK2NsYXNzIFB5ZG9jU2VydmVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHB5ZG9jLl9zdGFydF9zZXJ2ZXIiIiIKKworICAgIGRlZiB0ZXN0X3NlcnZlcihzZWxmKToKKworICAgICAgICAjIE1pbmltYWwgdGVzdCB0aGF0IHN0YXJ0cyB0aGUgc2VydmVyLCB0aGVuIHN0b3BzIGl0LgorICAgICAgICBkZWYgbXlfdXJsX2hhbmRsZXIodXJsLCBjb250ZW50X3R5cGUpOgorICAgICAgICAgICAgdGV4dCA9ICd0aGUgVVJMIHNlbnQgd2FzOiAoJXMsICVzKScgJSAodXJsLCBjb250ZW50X3R5cGUpCisgICAgICAgICAgICByZXR1cm4gdGV4dAorCisgICAgICAgIHNlcnZlcnRocmVhZCA9IHB5ZG9jLl9zdGFydF9zZXJ2ZXIobXlfdXJsX2hhbmRsZXIsIHBvcnQ9MCkKKyAgICAgICAgc3RhcnR0aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgdGltZW91dCA9IDEgICNzZWNvbmRzCisKKyAgICAgICAgd2hpbGUgc2VydmVydGhyZWFkLnNlcnZpbmc6CisgICAgICAgICAgICB0aW1lLnNsZWVwKC4wMSkKKyAgICAgICAgICAgIGlmIHNlcnZlcnRocmVhZC5zZXJ2aW5nIGFuZCB0aW1lLnRpbWUoKSAtIHN0YXJ0dGltZSA+IHRpbWVvdXQ6CisgICAgICAgICAgICAgICAgc2VydmVydGhyZWFkLnN0b3AoKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXJ0aHJlYWQuZXJyb3IsIE5vbmUpCisKKworY2xhc3MgUHlkb2NVcmxIYW5kbGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIHB5ZG9jLl91cmxfaGFuZGxlciIiIgorCisgICAgZGVmIHRlc3RfY29udGVudF90eXBlX2VycihzZWxmKToKKyAgICAgICAgZiA9IHB5ZG9jLl91cmxfaGFuZGxlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICdBJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgJ0InLCAnZm9vYmFyJykKKworICAgIGRlZiB0ZXN0X3VybF9yZXF1ZXN0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciB0aGUgY29ycmVjdCB0aXRsZSBpbiB0aGUgaHRtbCBwYWdlcyByZXR1cm5lZC4KKyAgICAgICAgIyBUaGlzIHRlc3RzIHRoZSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIFVSTCBoYW5kbGVyIHdpdGhvdXQKKyAgICAgICAgIyBnZXR0aW5nIHRvbyBwaWNreSBhYm91dCB0aGUgZXhhY3QgaHRtbC4KKyAgICAgICAgcmVxdWVzdHMgPSBbCisgICAgICAgICAgICAoIiIsICJQeWRvYzogSW5kZXggb2YgTW9kdWxlcyIpLAorICAgICAgICAgICAgKCJnZXQ/a2V5PSIsICJQeWRvYzogSW5kZXggb2YgTW9kdWxlcyIpLAorICAgICAgICAgICAgKCJpbmRleCIsICJQeWRvYzogSW5kZXggb2YgTW9kdWxlcyIpLAorICAgICAgICAgICAgKCJ0b3BpY3MiLCAiUHlkb2M6IFRvcGljcyIpLAorICAgICAgICAgICAgKCJrZXl3b3JkcyIsICJQeWRvYzogS2V5d29yZHMiKSwKKyAgICAgICAgICAgICgicHlkb2MiLCAiUHlkb2M6IG1vZHVsZSBweWRvYyIpLAorICAgICAgICAgICAgKCJnZXQ/a2V5PXB5ZG9jIiwgIlB5ZG9jOiBtb2R1bGUgcHlkb2MiKSwKKyAgICAgICAgICAgICgic2VhcmNoP2tleT1weWRvYyIsICJQeWRvYzogU2VhcmNoIFJlc3VsdHMiKSwKKyAgICAgICAgICAgICgidG9waWM/a2V5PWRlZiIsICJQeWRvYzogS0VZV09SRCBkZWYiKSwKKyAgICAgICAgICAgICgidG9waWM/a2V5PVNUUklOR1MiLCAiUHlkb2M6IFRPUElDIFNUUklOR1MiKSwKKyAgICAgICAgICAgICgiZm9vYmFyIiwgIlB5ZG9jOiBFcnJvciAtIGZvb2JhciIpLAorICAgICAgICAgICAgKCJnZXRmaWxlP2tleT1mb29iYXIiLCAiUHlkb2M6IEVycm9yIC0gZ2V0ZmlsZT9rZXk9Zm9vYmFyIiksCisgICAgICAgICAgICBdCisKKyAgICAgICAgZm9yIHVybCwgdGl0bGUgaW4gcmVxdWVzdHM6CisgICAgICAgICAgICB0ZXh0ID0gcHlkb2MuX3VybF9oYW5kbGVyKHVybCwgInRleHQvaHRtbCIpCisgICAgICAgICAgICByZXN1bHQgPSBnZXRfaHRtbF90aXRsZSh0ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHRpdGxlKQorCisgICAgICAgIHBhdGggPSBzdHJpbmcuX19maWxlX18KKyAgICAgICAgdGl0bGUgPSAiUHlkb2M6IGdldGZpbGUgIiArIHBhdGgKKyAgICAgICAgdXJsID0gImdldGZpbGU/a2V5PSIgKyBwYXRoCisgICAgICAgIHRleHQgPSBweWRvYy5fdXJsX2hhbmRsZXIodXJsLCAidGV4dC9odG1sIikKKyAgICAgICAgcmVzdWx0ID0gZ2V0X2h0bWxfdGl0bGUodGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHRpdGxlKQogCiAKIGNsYXNzIFRlc3RIZWxwZXIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzUxLDcgKzQ3MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlZChrZXl3b3JkLmt3bGlzdCkpCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5RG9jRG9jVGVzdCwgVGVzdERlc2NyaXB0aW9ucywgVGVzdEhlbHBlcikKKyAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFB5ZG9jRG9jVGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3REZXNjcmlwdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1VybEhhbmRsZXJUZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEhlbHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CmluZGV4IDEzM2MwMmIuLjI3ZWVjYjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKQEAgLTIsMTEgKzIsMTAgQEAKICMgaGFuZGxlciwgYXJlIG9ic2N1cmUgYW5kIHVuaGVscGZ1bC4KIAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKLWltcG9ydCBweWV4cGF0CiBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAorZnJvbSB4bWwucGFyc2Vycy5leHBhdCBpbXBvcnQgZXJyb3JzCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBzb3J0ZGljdCwgcnVuX3VuaXR0ZXN0CiAKQEAgLTM4LDYgKzM3LDcgQEAKIDwhLS0gY29tbWVudCBkYXRhIC0tPgogPCFET0NUWVBFIHF1b3RhdGlvbnMgU1lTVEVNICJxdW90YXRpb25zLmR0ZCIgWwogPCFFTEVNRU5UIHJvb3QgQU5ZPgorPCFBVFRMSVNUIHJvb3QgYXR0cjEgQ0RBVEEgI1JFUVVJUkVEIGF0dHIyIENEQVRBICNJTVBMSUVEPgogPCFOT1RBVElPTiBub3RhdGlvbiBTWVNURU0gIm5vdGF0aW9uLmpwZWciPgogPCFFTlRJVFkgYWNpcmMgIiYjMjI2OyI+CiA8IUVOVElUWSBleHRlcm5hbF9lbnRpdHkgU1lTVEVNICJlbnRpdHkuZmlsZSI+CkBAIC01MSw2ICs1MSw3IEBACiA8L215bnM6c3ViZWxlbWVudD4KIDxzdWIyPjwhW0NEQVRBW2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb25dXT48L3N1YjI+CiAmZXh0ZXJuYWxfZW50aXR5OworJnNraXBwZWRfZW50aXR5OwogPC9yb290PgogJycnCiAKQEAgLTk5LDcgKzEwMCw3IEBACiAgICAgICAgICAgICBlbnRpdHlOYW1lLCBiYXNlLCBzeXN0ZW1JZCwgcHVibGljSWQsIG5vdGF0aW9uTmFtZSA9IGFyZ3MKICAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnVW5wYXJzZWQgZW50aXR5IGRlY2w6ICVzJyAlKGFyZ3MsKSkKIAotICAgICAgICBkZWYgTm90U3RhbmRhbG9uZUhhbmRsZXIoc2VsZiwgdXNlckRhdGEpOgorICAgICAgICBkZWYgTm90U3RhbmRhbG9uZUhhbmRsZXIoc2VsZik6CiAgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoJ05vdCBzdGFuZGFsb25lJykKICAgICAgICAgICAgIHJldHVybiAxCiAKQEAgLTEwOCw2ICsxMDksMzQgQEAKICAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgnRXh0ZXJuYWwgZW50aXR5IHJlZjogJXMnICUoYXJnc1sxOl0sKSkKICAgICAgICAgICAgIHJldHVybiAxCiAKKyAgICAgICAgZGVmIFN0YXJ0RG9jdHlwZURlY2xIYW5kbGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgoJ1N0YXJ0IGRvY3R5cGUnLCBhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgZGVmIEVuZERvY3R5cGVEZWNsSGFuZGxlcihzZWxmKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgiRW5kIGRvY3R5cGUiKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBkZWYgRW50aXR5RGVjbEhhbmRsZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCgnRW50aXR5IGRlY2xhcmF0aW9uJywgYXJncykpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGRlZiBYbWxEZWNsSGFuZGxlcihzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoKCdYTUwgZGVjbGFyYXRpb24nLCBhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgZGVmIEVsZW1lbnREZWNsSGFuZGxlcihzZWxmLCAqYXJncyk6CisgICAgICAgICAgICBzZWxmLm91dC5hcHBlbmQoKCdFbGVtZW50IGRlY2xhcmF0aW9uJywgYXJncykpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIGRlZiBBdHRsaXN0RGVjbEhhbmRsZXIoc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgc2VsZi5vdXQuYXBwZW5kKCgnQXR0cmlidXRlIGxpc3QgZGVjbGFyYXRpb24nLCBhcmdzKSkKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgZGVmIFNraXBwZWRFbnRpdHlIYW5kbGVyKHNlbGYsICphcmdzKToKKyAgICAgICAgICAgIHNlbGYub3V0LmFwcGVuZCgoIlNraXBwZWQgZW50aXR5IiwgYXJncykpCisgICAgICAgICAgICByZXR1cm4gMQorCiAgICAgICAgIGRlZiBEZWZhdWx0SGFuZGxlcihzZWxmLCB1c2VyRGF0YSk6CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTExNSw2MSArMTQ0LDg2IEBACiAgICAgICAgICAgICBwYXNzCiAKICAgICBoYW5kbGVyX25hbWVzID0gWwotICAgICAgICAnU3RhcnRFbGVtZW50SGFuZGxlcicsICdFbmRFbGVtZW50SGFuZGxlcicsCi0gICAgICAgICdDaGFyYWN0ZXJEYXRhSGFuZGxlcicsICdQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyJywKLSAgICAgICAgJ1VucGFyc2VkRW50aXR5RGVjbEhhbmRsZXInLCAnTm90YXRpb25EZWNsSGFuZGxlcicsCi0gICAgICAgICdTdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyJywgJ0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyJywKLSAgICAgICAgJ0NvbW1lbnRIYW5kbGVyJywgJ1N0YXJ0Q2RhdGFTZWN0aW9uSGFuZGxlcicsCi0gICAgICAgICdFbmRDZGF0YVNlY3Rpb25IYW5kbGVyJywKLSAgICAgICAgJ0RlZmF1bHRIYW5kbGVyJywgJ0RlZmF1bHRIYW5kbGVyRXhwYW5kJywKLSAgICAgICAgIydOb3RTdGFuZGFsb25lSGFuZGxlcicsCi0gICAgICAgICdFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXInCisgICAgICAgICdTdGFydEVsZW1lbnRIYW5kbGVyJywgJ0VuZEVsZW1lbnRIYW5kbGVyJywgJ0NoYXJhY3RlckRhdGFIYW5kbGVyJywKKyAgICAgICAgJ1Byb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXInLCAnVW5wYXJzZWRFbnRpdHlEZWNsSGFuZGxlcicsCisgICAgICAgICdOb3RhdGlvbkRlY2xIYW5kbGVyJywgJ1N0YXJ0TmFtZXNwYWNlRGVjbEhhbmRsZXInLAorICAgICAgICAnRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXInLCAnQ29tbWVudEhhbmRsZXInLAorICAgICAgICAnU3RhcnRDZGF0YVNlY3Rpb25IYW5kbGVyJywgJ0VuZENkYXRhU2VjdGlvbkhhbmRsZXInLCAnRGVmYXVsdEhhbmRsZXInLAorICAgICAgICAnRGVmYXVsdEhhbmRsZXJFeHBhbmQnLCAnTm90U3RhbmRhbG9uZUhhbmRsZXInLAorICAgICAgICAnRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyJywgJ1N0YXJ0RG9jdHlwZURlY2xIYW5kbGVyJywKKyAgICAgICAgJ0VuZERvY3R5cGVEZWNsSGFuZGxlcicsICdFbnRpdHlEZWNsSGFuZGxlcicsICdYbWxEZWNsSGFuZGxlcicsCisgICAgICAgICdFbGVtZW50RGVjbEhhbmRsZXInLCAnQXR0bGlzdERlY2xIYW5kbGVyJywgJ1NraXBwZWRFbnRpdHlIYW5kbGVyJywKICAgICAgICAgXQogCi0gICAgZGVmIF92ZXJpZnlfcGFyc2Vfb3V0cHV0KHNlbGYsIG9wKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFswXSwgJ1BJOiBcJ3htbC1zdHlsZXNoZWV0XCcgXCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMV0sICJDb21tZW50OiAnIGNvbW1lbnQgZGF0YSAnIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsyXSwgIk5vdGF0aW9uIGRlY2xhcmVkOiAoJ25vdGF0aW9uJywgTm9uZSwgJ25vdGF0aW9uLmpwZWcnLCBOb25lKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbM10sICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKCd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCAnZW50aXR5LmZpbGUnLCBOb25lLCAnbm90YXRpb24nKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNF0sICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXHUxZjQwJ30iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzVdLCAiTlMgZGVjbDogJ215bnMnICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbNl0sICJTdGFydCBlbGVtZW50OiAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSFzdWJlbGVtZW50JyB7fSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogJ0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbOF0sICJFbmQgZWxlbWVudDogJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy9uYW1lc3BhY2Uhc3ViZWxlbWVudCciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wWzldLCAiRW5kIG9mIE5TIGRlY2w6ICdteW5zJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTBdLCAiU3RhcnQgZWxlbWVudDogJ3N1YjInIHt9IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMV0sICdTdGFydCBvZiBDREFUQSBzZWN0aW9uJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxMl0sICJDaGFyYWN0ZXIgZGF0YTogJ2NvbnRlbnRzIG9mIENEQVRBIHNlY3Rpb24nIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxM10sICdFbmQgb2YgQ0RBVEEgc2VjdGlvbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTRdLCAiRW5kIGVsZW1lbnQ6ICdzdWIyJyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BbMTVdLCAiRXh0ZXJuYWwgZW50aXR5IHJlZjogKE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcFsxNl0sICJFbmQgZWxlbWVudDogJ3Jvb3QnIikKKyAgICBkZWYgX2hvb2t1cF9jYWxsYmFja3Moc2VsZiwgcGFyc2VyLCBoYW5kbGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCBlYWNoIG9mIHRoZSBjYWxsYmFja3MgZGVmaW5lZCBvbiBoYW5kbGVyIGFuZCBuYW1lZCBpbgorICAgICAgICBzZWxmLmhhbmRsZXJfbmFtZXMgb24gdGhlIGdpdmVuIHBhcnNlci4KKyAgICAgICAgIiIiCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuaGFuZGxlcl9uYW1lczoKKyAgICAgICAgICAgIHNldGF0dHIocGFyc2VyLCBuYW1lLCBnZXRhdHRyKGhhbmRsZXIsIG5hbWUpKQogCisgICAgZGVmIF92ZXJpZnlfcGFyc2Vfb3V0cHV0KHNlbGYsIG9wZXJhdGlvbnMpOgorICAgICAgICBleHBlY3RlZF9vcGVyYXRpb25zID0gWworICAgICAgICAgICAgKCdYTUwgZGVjbGFyYXRpb24nLCAoJzEuMCcsICdpc28tODg1OS0xJywgMCkpLAorICAgICAgICAgICAgJ1BJOiBcJ3htbC1zdHlsZXNoZWV0XCcgXCdocmVmPSJzdHlsZXNoZWV0LmNzcyJcJycsCisgICAgICAgICAgICAiQ29tbWVudDogJyBjb21tZW50IGRhdGEgJyIsCisgICAgICAgICAgICAiTm90IHN0YW5kYWxvbmUiLAorICAgICAgICAgICAgKCJTdGFydCBkb2N0eXBlIiwgKCdxdW90YXRpb25zJywgJ3F1b3RhdGlvbnMuZHRkJywgTm9uZSwgMSkpLAorICAgICAgICAgICAgKCdFbGVtZW50IGRlY2xhcmF0aW9uJywgKCdyb290JywgKDIsIDAsIE5vbmUsICgpKSkpLAorICAgICAgICAgICAgKCdBdHRyaWJ1dGUgbGlzdCBkZWNsYXJhdGlvbicsICgncm9vdCcsICdhdHRyMScsICdDREFUQScsIE5vbmUsCisgICAgICAgICAgICAgICAgMSkpLAorICAgICAgICAgICAgKCdBdHRyaWJ1dGUgbGlzdCBkZWNsYXJhdGlvbicsICgncm9vdCcsICdhdHRyMicsICdDREFUQScsIE5vbmUsCisgICAgICAgICAgICAgICAgMCkpLAorICAgICAgICAgICAgIk5vdGF0aW9uIGRlY2xhcmVkOiAoJ25vdGF0aW9uJywgTm9uZSwgJ25vdGF0aW9uLmpwZWcnLCBOb25lKSIsCisgICAgICAgICAgICAoJ0VudGl0eSBkZWNsYXJhdGlvbicsICgnYWNpcmMnLCAwLCAnXHhlMicsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgICgnRW50aXR5IGRlY2xhcmF0aW9uJywgKCdleHRlcm5hbF9lbnRpdHknLCAwLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICdlbnRpdHkuZmlsZScsIE5vbmUsIE5vbmUpKSwKKyAgICAgICAgICAgICJVbnBhcnNlZCBlbnRpdHkgZGVjbDogKCd1bnBhcnNlZF9lbnRpdHknLCBOb25lLCAnZW50aXR5LmZpbGUnLCBOb25lLCAnbm90YXRpb24nKSIsCisgICAgICAgICAgICAiTm90IHN0YW5kYWxvbmUiLAorICAgICAgICAgICAgIkVuZCBkb2N0eXBlIiwKKyAgICAgICAgICAgICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXHUxZjQwJ30iLAorICAgICAgICAgICAgIk5TIGRlY2w6ICdteW5zJyAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciLAorICAgICAgICAgICAgIlN0YXJ0IGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IiwKKyAgICAgICAgICAgICJDaGFyYWN0ZXIgZGF0YTogJ0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIsCisgICAgICAgICAgICAiRW5kIGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIiwKKyAgICAgICAgICAgICJFbmQgb2YgTlMgZGVjbDogJ215bnMnIiwKKyAgICAgICAgICAgICJTdGFydCBlbGVtZW50OiAnc3ViMicge30iLAorICAgICAgICAgICAgJ1N0YXJ0IG9mIENEQVRBIHNlY3Rpb24nLAorICAgICAgICAgICAgIkNoYXJhY3RlciBkYXRhOiAnY29udGVudHMgb2YgQ0RBVEEgc2VjdGlvbiciLAorICAgICAgICAgICAgJ0VuZCBvZiBDREFUQSBzZWN0aW9uJywKKyAgICAgICAgICAgICJFbmQgZWxlbWVudDogJ3N1YjInIiwKKyAgICAgICAgICAgICJFeHRlcm5hbCBlbnRpdHkgcmVmOiAoTm9uZSwgJ2VudGl0eS5maWxlJywgTm9uZSkiLAorICAgICAgICAgICAgKCdTa2lwcGVkIGVudGl0eScsICgnc2tpcHBlZF9lbnRpdHknLCAwKSksCisgICAgICAgICAgICAiRW5kIGVsZW1lbnQ6ICdyb290JyIsCisgICAgICAgIF0KKyAgICAgICAgZm9yIG9wZXJhdGlvbiwgZXhwZWN0ZWRfb3BlcmF0aW9uIGluIHppcChvcGVyYXRpb25zLCBleHBlY3RlZF9vcGVyYXRpb25zKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0aW9uLCBleHBlY3RlZF9vcGVyYXRpb24pCiAKICAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgogICAgICAgICAjIFRyeSB0aGUgcGFyc2UgYWdhaW4sIHRoaXMgdGltZSBwcm9kdWNpbmcgVW5pY29kZSBvdXRwdXQKICAgICAgICAgb3V0ID0gc2VsZi5PdXRwdXR0ZXIoKQogICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nIScpCi0gICAgICAgIGZvciBuYW1lIGluIHNlbGYuaGFuZGxlcl9uYW1lczoKLSAgICAgICAgICAgIHNldGF0dHIocGFyc2VyLCBuYW1lLCBnZXRhdHRyKG91dCwgbmFtZSkpCisgICAgICAgIHNlbGYuX2hvb2t1cF9jYWxsYmFja3MocGFyc2VyLCBvdXQpCiAKICAgICAgICAgcGFyc2VyLlBhcnNlKGRhdGEsIDEpCiAKLSAgICAgICAgb3AgPSBvdXQub3V0Ci0gICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3ApCisgICAgICAgIG9wZXJhdGlvbnMgPSBvdXQub3V0CisgICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3BlcmF0aW9ucykKKyAgICAgICAgIyBJc3N1ZSAjNjY5Ny4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIHBhcnNlciwgJ1x1RDgwMCcpCiAKICAgICBkZWYgdGVzdF9wYXJzZV9maWxlKHNlbGYpOgogICAgICAgICAjIFRyeSBwYXJzaW5nIGEgZmlsZQogICAgICAgICBvdXQgPSBzZWxmLk91dHB1dHRlcigpCiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPSchJykKLSAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5oYW5kbGVyX25hbWVzOgotICAgICAgICAgICAgc2V0YXR0cihwYXJzZXIsIG5hbWUsIGdldGF0dHIob3V0LCBuYW1lKSkKKyAgICAgICAgc2VsZi5faG9va3VwX2NhbGxiYWNrcyhwYXJzZXIsIG91dCkKICAgICAgICAgZmlsZSA9IEJ5dGVzSU8oZGF0YSkKIAogICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZpbGUpCiAKLSAgICAgICAgb3AgPSBvdXQub3V0Ci0gICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3ApCisgICAgICAgIG9wZXJhdGlvbnMgPSBvdXQub3V0CisgICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3BlcmF0aW9ucykKIAogY2xhc3MgTmFtZXNwYWNlU2VwYXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbGVnYWwoc2VsZik6CkBAIC0xODUsNyArMjM5LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLAotICAgICAgICAgICAgICAgICdQYXJzZXJDcmVhdGUoKSBhcmd1bWVudCAyIG11c3QgYmUgc3RyaW5nIG9yIE5vbmUsIG5vdCBpbnQnKQorICAgICAgICAgICAgICAgICdQYXJzZXJDcmVhdGUoKSBhcmd1bWVudCAyIG11c3QgYmUgc3RyIG9yIE5vbmUsIG5vdCBpbnQnKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGV4cGF0LlBhcnNlckNyZWF0ZShuYW1lc3BhY2Vfc2VwYXJhdG9yPSd0b28gbG9uZycpCkBAIC0yMjIsNiArMjc2LDI1IEBACiAgICAgICAgICAgICAjIEwgc2hvdWxkIGhhdmUgdGhlIHNhbWUgc3RyaW5nIHJlcGVhdGVkIG92ZXIgYW5kIG92ZXIuCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFnIGlzIGVudHJ5KQogCisgICAgZGVmIHRlc3RfaXNzdWU5NDAyKHNlbGYpOgorICAgICAgICAjIGNyZWF0ZSBhbiBFeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSB3aXRoIGJ1ZmZlciB0ZXh0CisgICAgICAgIGNsYXNzIEV4dGVybmFsT3V0cHV0dGVyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnNlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlcl9yZXN1bHQgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIoc2VsZiwgY29udGV4dCwgYmFzZSwgc3lzSWQsIHB1YklkKToKKyAgICAgICAgICAgICAgICBleHRlcm5hbF9wYXJzZXIgPSBzZWxmLnBhcnNlci5FeHRlcm5hbEVudGl0eVBhcnNlckNyZWF0ZSgiIikKKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlcl9yZXN1bHQgPSBleHRlcm5hbF9wYXJzZXIuUGFyc2UoIiIsIDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUobmFtZXNwYWNlX3NlcGFyYXRvcj0nIScpCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgb3V0ID0gRXh0ZXJuYWxPdXRwdXR0ZXIocGFyc2VyKQorICAgICAgICBwYXJzZXIuRXh0ZXJuYWxFbnRpdHlSZWZIYW5kbGVyID0gb3V0LkV4dGVybmFsRW50aXR5UmVmSGFuZGxlcgorICAgICAgICBwYXJzZXIuUGFyc2UoZGF0YSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQucGFyc2VyX3Jlc3VsdCwgMSkKKwogCiBjbGFzcyBCdWZmZXJUZXh0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtNTEwLDcgKzU4Myw3IEBACiAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwyLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubiwgNCkKIAotY2xhc3MgTWFsZm9ybWVkSW5wdXRUZXh0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIE1hbGZvcm1lZElucHV0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3QxKHNlbGYpOgogICAgICAgICB4bWwgPSAiXDBcclxuIgogICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQpAQCAtNTI5LDYgKzYwMiw2NSBAQAogICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICdYTUwgZGVjbGFyYXRpb24gbm90IHdlbGwtZm9ybWVkOiBsaW5lIDEsIGNvbHVtbiAxNCcpCiAKK2NsYXNzIEVycm9yTWVzc2FnZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2NvZGVzKHNlbGYpOgorICAgICAgICAjIHZlcmlmeSBtYXBwaW5nIG9mIGVycm9ycy5jb2RlcyBhbmQgZXJyb3JzLm1lc3NhZ2VzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JzLlhNTF9FUlJPUl9TWU5UQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLm1lc3NhZ2VzW2Vycm9ycy5jb2Rlc1tlcnJvcnMuWE1MX0VSUk9SX1NZTlRBWF1dKQorCisgICAgZGVmIHRlc3RfZXhwYXRlcnJvcihzZWxmKToKKyAgICAgICAgeG1sID0gJzwnCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZSh4bWwsIFRydWUpCisgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBleGNlcHQgZXhwYXQuRXhwYXRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5jb2Rlc1tlcnJvcnMuWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOXSkKKworCitjbGFzcyBGb3JlaWduRFREVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciB0aGUgVXNlRm9yZWlnbkRURCBtZXRob2Qgb2YgZXhwYXQgcGFyc2VyIG9iamVjdHMuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdXNlX2ZvcmVpZ25fZHRkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgSWYgVXNlRm9yZWlnbkRURCBpcyBwYXNzZWQgVHJ1ZSBhbmQgYSBkb2N1bWVudCB3aXRob3V0IGFuIGV4dGVybmFsCisgICAgICAgIGVudGl0eSByZWZlcmVuY2UgaXMgcGFyc2VkLCBFeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgaXMgZmlyc3QgY2FsbGVkCisgICAgICAgIHdpdGggTm9uZSBmb3IgdGhlIHB1YmxpYyBhbmQgc3lzdGVtIGlkcy4KKyAgICAgICAgIiIiCisgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzID0gW10KKyAgICAgICAgZGVmIHJlc29sdmVfZW50aXR5KGNvbnRleHQsIGJhc2UsIHN5c3RlbV9pZCwgcHVibGljX2lkKToKKyAgICAgICAgICAgIGhhbmRsZXJfY2FsbF9hcmdzLmFwcGVuZCgocHVibGljX2lkLCBzeXN0ZW1faWQpKQorICAgICAgICAgICAgcmV0dXJuIDEKKworICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBwYXJzZXIuVXNlRm9yZWlnbkRURChUcnVlKQorICAgICAgICBwYXJzZXIuU2V0UGFyYW1FbnRpdHlQYXJzaW5nKGV4cGF0LlhNTF9QQVJBTV9FTlRJVFlfUEFSU0lOR19BTFdBWVMpCisgICAgICAgIHBhcnNlci5FeHRlcm5hbEVudGl0eVJlZkhhbmRsZXIgPSByZXNvbHZlX2VudGl0eQorICAgICAgICBwYXJzZXIuUGFyc2UoIjw/eG1sIHZlcnNpb249JzEuMCc/PjxlbGVtZW50Lz4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZXJfY2FsbF9hcmdzLCBbKE5vbmUsIE5vbmUpXSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV91c2VfZm9yZWlnbl9kdGQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJZiBVc2VGb3JlaWduRFREIGlzIHBhc3NlZCBUcnVlIGFuZCBhIGRvY3VtZW50IHdpdGggYW4gZXh0ZXJuYWwKKyAgICAgICAgZW50aXR5IHJlZmVyZW5jZSBpcyBwYXJzZWQsIEV4dGVybmFsRW50aXR5UmVmSGFuZGxlciBpcyBjYWxsZWQgd2l0aAorICAgICAgICB0aGUgcHVibGljIGFuZCBzeXN0ZW0gaWRzIGZyb20gdGhlIGRvY3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MgPSBbXQorICAgICAgICBkZWYgcmVzb2x2ZV9lbnRpdHkoY29udGV4dCwgYmFzZSwgc3lzdGVtX2lkLCBwdWJsaWNfaWQpOgorICAgICAgICAgICAgaGFuZGxlcl9jYWxsX2FyZ3MuYXBwZW5kKChwdWJsaWNfaWQsIHN5c3RlbV9pZCkpCisgICAgICAgICAgICByZXR1cm4gMQorCisgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCisgICAgICAgIHBhcnNlci5Vc2VGb3JlaWduRFREKFRydWUpCisgICAgICAgIHBhcnNlci5TZXRQYXJhbUVudGl0eVBhcnNpbmcoZXhwYXQuWE1MX1BBUkFNX0VOVElUWV9QQVJTSU5HX0FMV0FZUykKKyAgICAgICAgcGFyc2VyLkV4dGVybmFsRW50aXR5UmVmSGFuZGxlciA9IHJlc29sdmVfZW50aXR5CisgICAgICAgIHBhcnNlci5QYXJzZSgKKyAgICAgICAgICAgICI8P3htbCB2ZXJzaW9uPScxLjAnPz48IURPQ1RZUEUgZm9vIFBVQkxJQyAnYmFyJyAnYmF6Jz48ZWxlbWVudC8+IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGVyX2NhbGxfYXJncywgWygiYmFyIiwgImJheiIpXSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFNldEF0dHJpYnV0ZVRlc3QsCiAgICAgICAgICAgICAgICAgIFBhcnNlVGVzdCwKQEAgLTUzOSw3ICs2NzEsOSBAQAogICAgICAgICAgICAgICAgICBQb3NpdGlvblRlc3QsCiAgICAgICAgICAgICAgICAgIHNmMTI5NjQzM1Rlc3QsCiAgICAgICAgICAgICAgICAgIENoYXJkYXRhQnVmZmVyVGVzdCwKLSAgICAgICAgICAgICAgICAgTWFsZm9ybWVkSW5wdXRUZXh0KQorICAgICAgICAgICAgICAgICBNYWxmb3JtZWRJbnB1dFRlc3QsCisgICAgICAgICAgICAgICAgIEVycm9yTWVzc2FnZVRlc3QsCisgICAgICAgICAgICAgICAgIEZvcmVpZ25EVERUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weSBiL0xpYi90ZXN0L3Rlc3RfcXVldWUucHkKaW5kZXggYzY1ODI3ZC4uODI4N2E1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdWV1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3F1ZXVlLnB5CkBAIC0xLDExICsxLDEwIEBACiAjIFNvbWUgc2ltcGxlIHF1ZXVlIG1vZHVsZSB0ZXN0cywgcGx1cyBzb21lIGZhaWx1cmUgY29uZGl0aW9ucwogIyB0byBlbnN1cmUgdGhlIFF1ZXVlIGxvY2tzIHJlbWFpbiBzdGFibGUuCiBpbXBvcnQgcXVldWUKLWltcG9ydCBzeXMKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAordGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBRVUVVRV9TSVpFID0gNQogCkBAIC05MSw2ICs5MCw4IEBACiAgICAgZGVmIHNpbXBsZV9xdWV1ZV90ZXN0KHNlbGYsIHEpOgogICAgICAgICBpZiBxLnFzaXplKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGFuIGVtcHR5IHF1ZXVlIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShxLmZ1bGwoKSkKICAgICAgICAgIyBJIGd1ZXNzIHdlIGJldHRlciBjaGVjayB0aGluZ3MgYWN0dWFsbHkgcXVldWUgY29ycmVjdGx5IGEgbGl0dGxlIDopCiAgICAgICAgIHEucHV0KDExMSkKICAgICAgICAgcS5wdXQoMzMzKQpAQCAtMTA5LDYgKzExMCw4IEBACiAgICAgICAgIGZ1bGwgPSAzICogMiAqIFFVRVVFX1NJWkUKICAgICAgICAgcS5wdXQobGFzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHFmdWxsKHEpLCAiUXVldWUgc2hvdWxkIGJlIGZ1bGwiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZnVsbCgpKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBxLnB1dChmdWxsLCBibG9jaz0wKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgYXBwZWFyIHRvIGJsb2NrIHdpdGggYSBmdWxsIHF1ZXVlIikKQEAgLTE5NCw2ICsxOTcsMzcgQEAKICAgICAgICAgc2VsZi5zaW1wbGVfcXVldWVfdGVzdChxKQogICAgICAgICBzZWxmLnNpbXBsZV9xdWV1ZV90ZXN0KHEpCiAKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV90aW1lb3V0X3JhaXNlc19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBzZWxmLnR5cGUydGVzdChRVUVVRV9TSVpFKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcS5wdXQoMSwgdGltZW91dD0tMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHEuZ2V0KDEsIHRpbWVvdXQ9LTEpCisKKyAgICBkZWYgdGVzdF9ub3dhaXQoc2VsZik6CisgICAgICAgIHEgPSBzZWxmLnR5cGUydGVzdChRVUVVRV9TSVpFKQorICAgICAgICBmb3IgaSBpbiByYW5nZShRVUVVRV9TSVpFKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlLkZ1bGwpOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoUVVFVUVfU0laRSk6CisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlLkVtcHR5KToKKyAgICAgICAgICAgIHEuZ2V0X25vd2FpdCgpCisKKyAgICBkZWYgdGVzdF9zaHJpbmtpbmdfcXVldWUoc2VsZik6CisgICAgICAgICMgaXNzdWUgMTAxMTAKKyAgICAgICAgcSA9IHNlbGYudHlwZTJ0ZXN0KDMpCisgICAgICAgIHEucHV0KDEpCisgICAgICAgIHEucHV0KDIpCisgICAgICAgIHEucHV0KDMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMocXVldWUuRnVsbCk6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLnFzaXplKCksIDMpCisgICAgICAgIHEubWF4c2l6ZSA9IDIgICAgICAgICAgICAgICAgICAgICAgICMgc2hyaW5rIHRoZSBxdWV1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHF1ZXVlLkZ1bGwpOgorICAgICAgICAgICAgcS5wdXRfbm93YWl0KDQpCiAKIGNsYXNzIFF1ZXVlVGVzdChCYXNlUXVldWVUZXN0KToKICAgICB0eXBlMnRlc3QgPSBxdWV1ZS5RdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkgYi9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQppbmRleCAyYzUyYTNjLi41ODNmZDQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3F1b3ByaS5weQpAQCAtMTc4LDYgKzE3OCw3IEBACiAgICAgICAgIChwLCBlKSA9IHNlbGYuU1RSSU5HU1stMV0KICAgICAgICAgcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLW1xdW9wcmkiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocHJvY2Vzcy5zdGRvdXQuY2xvc2UpCiAgICAgICAgIGNvdXQsIGNlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHApCiAgICAgICAgICMgT24gV2luZG93cywgUHl0aG9uIHdpbGwgb3V0cHV0IHRoZSByZXN1bHQgdG8gc3Rkb3V0IHVzaW5nCiAgICAgICAgICMgQ1JMRiwgYXMgdGhlIG1vZGUgb2Ygc3Rkb3V0IGlzIHRleHQgbW9kZS4gVG8gY29tcGFyZSB0aGlzCkBAIC0xOTMsNiArMTk0LDcgQEAKICAgICAgICAgKHAsIGUpID0gc2VsZi5TVFJJTkdTWy0xXQogICAgICAgICBwcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItbXF1b3ByaSIsICItZCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm9jZXNzLnN0ZG91dC5jbG9zZSkKICAgICAgICAgY291dCwgY2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoZSkKICAgICAgICAgY291dCA9IGNvdXQuZGVjb2RlKCdsYXRpbi0xJykKICAgICAgICAgcCA9IHAuZGVjb2RlKCdsYXRpbi0xJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFpc2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhaXNlLnB5CmluZGV4IGZmNDgwMGIuLmQxMjBkYzEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFpc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYWlzZS5weQpAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIk5vIGFjdGl2ZSBleGNlcHRpb24iIGluIHN0cihlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIk5vIGFjdGl2ZSBleGNlcHRpb24iLCBzdHIoZSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQogCkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvciBmcm9tIDUKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJleGNlcHRpb24gY2F1c2UiIGluIHN0cihlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImV4Y2VwdGlvbiBjYXVzZSIsIHN0cihlKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHJhaXNlZCIpCiAKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yIGZyb20gS2V5RXJyb3IKICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUuX19jYXVzZV9fLCBLZXlFcnJvcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5fX2NhdXNlX18sIEtleUVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKIApAQCAtMTY2LDcgKzE2Niw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoKQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZS5fX3RyYWNlYmFja19fLCB0eXBlcy5UcmFjZWJhY2tUeXBlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLl9fdHJhY2ViYWNrX18sIHR5cGVzLlRyYWNlYmFja1R5cGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5fX2NvbnRleHRfXywgY29udGV4dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUuX19jb250ZXh0X18sIGNvbnRleHQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuX19jb250ZXh0X18sIGNvbnRleHQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQogCkBAIC0yMTYsNyArMjE2LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUuX19jb250ZXh0X18sIGNvbnRleHQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLl9fY29udGV4dF9fLCBjb250ZXh0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLl9fY29udGV4dF9fLCBjb250ZXh0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKIApAQCAtMjI3LDcgKzIyNyw3IEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZS5fX2NvbnRleHRfXywgWmVyb0RpdmlzaW9uRXJyb3IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuX19jb250ZXh0X18sIFplcm9EaXZpc2lvbkVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKIApAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgeHl6enkKICAgICAgICAgZXhjZXB0IE5hbWVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZS5fX2NvbnRleHRfXywgWmVyb0RpdmlzaW9uRXJyb3IpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuX19jb250ZXh0X18sIFplcm9EaXZpc2lvbkVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJObyBleGNlcHRpb24gcmFpc2VkIikKIApAQCAtMjYwLDcgKzI2MCw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGUuX19jb250ZXh0X18sIFplcm9EaXZpc2lvbkVycm9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLl9fY29udGV4dF9fLCBaZXJvRGl2aXNpb25FcnJvcikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiTm8gZXhjZXB0aW9uIHJhaXNlZCIpCiAKQEAgLTI3NCw3ICsyNzQsNyBAQAogICAgICAgICAgICAgd2l0aCBDb250ZXh0TWFuYWdlcigpOgogICAgICAgICAgICAgICAgIDEvMAogICAgICAgICBleGNlcHQgTmFtZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLl9fY29udGV4dF9fLCBaZXJvRGl2aXNpb25FcnJvcikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5fX2NvbnRleHRfXywgWmVyb0RpdmlzaW9uRXJyb3IpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiByYWlzZWQiKQogCkBAIC0zMjAsNyArMzIwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVsIGcKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLl9fY29udGV4dF9fLCBWYWx1ZUVycm9yKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZS5fX2NvbnRleHRfXywgVmFsdWVFcnJvcikKIAogICAgICAgICBmKCkKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5fX2NvbnRleHRfXywgTm9uZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShlLl9fY29udGV4dF9fLCBBdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuX19jb250ZXh0X18sIEF0dHJpYnV0ZUVycm9yKQogCiAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpOgogICAgICAgICAgICAgZigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weSBiL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5CmluZGV4IGRmMDdiNzYuLjc3NmQwYzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmFuZG9tLnB5CkBAIC0xLDExICsxLDExIEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCi1mcm9tIG1hdGggaW1wb3J0IGxvZywgZXhwLCBzcXJ0LCBwaSwgZnN1bSwgc2luCitmcm9tIG1hdGggaW1wb3J0IGxvZywgZXhwLCBwaSwgZnN1bSwgc2luCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogY2xhc3MgVGVzdEJhc2ljT3BzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTM5LDkgKzM5LDE2IEBACiAgICAgICAgICAgICBzZWxmLmdlbi5zZWVkKGFyZykKICAgICAgICAgZm9yIGFyZyBpbiBbbGlzdChyYW5nZSgzKSksIGRpY3Qob25lPTEpXToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgYXJnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNlZWQsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCiAKKyAgICBkZWYgdGVzdF9jaG9pY2Uoc2VsZik6CisgICAgICAgIGNob2ljZSA9IHNlbGYuZ2VuLmNob2ljZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgY2hvaWNlKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNob2ljZShbNTBdKSwgNTApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY2hvaWNlKFsyNSwgNzVdKSwgWzI1LCA3NV0pCisKICAgICBkZWYgdGVzdF9zYW1wbGUoc2VsZik6CiAgICAgICAgICMgRm9yIHRoZSBlbnRpcmUgYWxsb3dhYmxlIHJhbmdlIG9mIDAgPD0gayA8PSBOLCB2YWxpZGF0ZSB0aGF0CiAgICAgICAgICMgdGhlIHNhbXBsZSBpcyBvZiB0aGUgY29ycmVjdCBsZW5ndGggYW5kIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGl0ZW1zCkBAIC0xMjEsNyArMTI4LDE1IEBACiAgICAgICAgICAgICBmID0gb3BlbihzdXBwb3J0LmZpbmRmaWxlKGZpbGUpLCJyYiIpCiAgICAgICAgICAgICByID0gcGlja2xlLmxvYWQoZikKICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJhbmRyYW5nZSgxMDAwKSwgdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChyLnJhbmRvbSgpKjEwMDApLCB2YWx1ZSkKKworICAgIGRlZiB0ZXN0X2J1Z185MDI1KHNlbGYpOgorICAgICAgICAjIEhhZCBwcm9ibGVtIHdpdGggYW4gdW5ldmVuIGRpc3RyaWJ1dGlvbiBpbiBpbnQobipyYW5kb20oKSkKKyAgICAgICAgIyBWZXJpZnkgdGhlIGZpeCBieSBjaGVja2luZyB0aGF0IGRpc3RyaWJ1dGlvbnMgZmFsbCB3aXRoaW4gZXhwZWN0YXRpb25zLgorICAgICAgICBuID0gMTAwMDAwCisgICAgICAgIHJhbmRyYW5nZSA9IHNlbGYuZ2VuLnJhbmRyYW5nZQorICAgICAgICBrID0gc3VtKHJhbmRyYW5nZSg2NzU1Mzk5NDQxMDU1NzQ0KSAlIDMgPT0gMiBmb3IgaSBpbiByYW5nZShuKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuMzAgPCBrL24gPCAuMzcsIChrL24pKQogCiBjbGFzcyBTeXN0ZW1SYW5kb21fVGVzdEJhc2ljT3BzKFRlc3RCYXNpY09wcyk6CiAgICAgZ2VuID0gcmFuZG9tLlN5c3RlbVJhbmRvbSgpCkBAIC0yMTEsNyArMjI2LDcgQEAKIAogICAgICAgICAgICAgbiArPSBuIC0gMSAgICAgICMgY2hlY2sgMSBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KICAgICAgICAgICAgIGsgPSBpbnQoMS4wMDAwMSArIF9sb2cobiwgMikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoayBpbiBbbnVtYml0cywgbnVtYml0cysxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgW251bWJpdHMsIG51bWJpdHMrMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0yKSkKIAogICAgICAgICAgICAgbiAtPSBuID4+IDE1ICAgICAjIGNoZWNrIGEgbGl0dGxlIGZhcnRoZXIgYmVsb3cgdGhlIG5leHQgcG93ZXIgb2YgdHdvCkBAIC0yMjMsNiArMjM4LDE3IEBACiBjbGFzcyBNZXJzZW5uZVR3aXN0ZXJfVGVzdEJhc2ljT3BzKFRlc3RCYXNpY09wcyk6CiAgICAgZ2VuID0gcmFuZG9tLlJhbmRvbSgpCiAKKyAgICBkZWYgdGVzdF9ndWFyYW50ZWVkX3N0YWJsZShzZWxmKToKKyAgICAgICAgIyBUaGVzZSBzZXF1ZW5jZXMgYXJlIGd1YXJhbnRlZWQgdG8gc3RheSB0aGUgc2FtZSBhY3Jvc3MgdmVyc2lvbnMgb2YgcHl0aG9uCisgICAgICAgIHNlbGYuZ2VuLnNlZWQoMzQ1NjE0NywgdmVyc2lvbj0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtzZWxmLmdlbi5yYW5kb20oKS5oZXgoKSBmb3IgaSBpbiByYW5nZSg0KV0sCisgICAgICAgICAgICBbJzB4MS5hYzM2MjMwMGQ5MGQycC0xJywgJzB4MS45ZDE2Zjc0MzY1MDA1cC0xJywKKyAgICAgICAgICAgICAnMHgxLjFlYmI0MzUyZTRjNGRwLTEnLCAnMHgxLjFhNzQyMmFiZjljMTFwLTEnXSkKKyAgICAgICAgc2VsZi5nZW4uc2VlZCgidGhlIHF1aWNrIGJyb3duIGZveCIsIHZlcnNpb249MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbc2VsZi5nZW4ucmFuZG9tKCkuaGV4KCkgZm9yIGkgaW4gcmFuZ2UoNCldLAorICAgICAgICAgICAgWycweDEuMTIzOWRkZmIxMWI3Y3AtMycsICcweDEuYjNjYmI1YzUxYjEyMHAtNCcsCisgICAgICAgICAgICAgJzB4MS44YzRmNTUxMTZiNjBmcC0xJywgJzB4MS42M2ViNTI1MTc0YTI3cC0xJ10pCisKICAgICBkZWYgdGVzdF9zZXRzdGF0ZV9maXJzdF9hcmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMSwgTm9uZSwgTm9uZSkpCiAKQEAgLTM2Nyw3ICszOTMsNyBAQAogCiAgICAgICAgICAgICBuICs9IG4gLSAxICAgICAgIyBjaGVjayAxIGJlbG93IHRoZSBuZXh0IHBvd2VyIG9mIHR3bwogICAgICAgICAgICAgayA9IGludCgxLjAwMDAxICsgX2xvZyhuLCAyKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIFtudW1iaXRzLCBudW1iaXRzKzFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBbbnVtYml0cywgbnVtYml0cysxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgyKiprID4gbiA+IDIqKihrLTIpKQogCiAgICAgICAgICAgICBuIC09IG4gPj4gMTUgICAgICMgY2hlY2sgYSBsaXR0bGUgZmFydGhlciBiZWxvdyB0aGUgbmV4dCBwb3dlciBvZiB0d28KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CmluZGV4IGMwODJmZDEuLmVkZTA3OTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQpAQCAtNSwxMCArNSw2IEBACiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgaXRlcnRvb2xzCiAKLWltcG9ydCB3YXJuaW5ncwotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICJpbnRlZ2VyIGFyZ3VtZW50IGV4cGVjdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgInVuaXR0ZXN0IikKLQogIyBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMgKDMgYXJncyBvbmx5KSwgZm9yIGNvbXBhcmlzb24KIGRlZiBweXJhbmdlKHN0YXJ0LCBzdG9wLCBzdGVwKToKICAgICBpZiAoc3RhcnQgLSBzdG9wKSAvLyBzdGVwIDwgMDoKQEAgLTYzLDE4ICs1OSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoYSs0LCBhLCAtMikpLCBbYSs0LCBhKzJdKQogCiAgICAgICAgIHNlcSA9IGxpc3QocmFuZ2UoYSwgYiwgYykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIGluIHNlcSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiwgc2VxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQogCiAgICAgICAgIHNlcSA9IGxpc3QocmFuZ2UoYiwgYSwgLWMpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYiBpbiBzZXEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGEsIHNlcSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VxKSwgMikKIAogICAgICAgICBzZXEgPSBsaXN0KHJhbmdlKC1hLCAtYiwgLWMpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoLWEgaW4gc2VxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoLWIgbm90IGluIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSkKQEAgLTk0LDYgKzkwLDI1MCBAQAogICAgICAgICByID0gcmFuZ2UoLXN5cy5tYXhzaXplLCBzeXMubWF4c2l6ZSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ociksIHN5cy5tYXhzaXplKQogCisgICAgZGVmIHRlc3RfbGFyZ2Vfb3BlcmFuZHMoc2VsZik6CisgICAgICAgIHggPSByYW5nZSgxMCoqMjAsIDEwKioyMCsxMCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoeCkpLCA0KQorCisgICAgICAgIHggPSByYW5nZSgxMCoqMjArMTAsIDEwKioyMCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoeCkpLCAwKQorCisgICAgICAgIHggPSByYW5nZSgxMCoqMjAsIDEwKioyMCsxMCwgLTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KHgpKSwgMCkKKworICAgICAgICB4ID0gcmFuZ2UoMTAqKjIwKzEwLCAxMCoqMjAsIC0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGlzdCh4KSksIDQpCisKKyAgICAgICAgIyBOb3cgdGVzdCByYW5nZSgpIHdpdGggbG9uZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKC0yKioxMDApKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgwLCAtMioqMTAwKSksIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmFuZ2UoMCwgMioqMTAwLCAtMSkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKDAsIDIqKjEwMCwgLTEpKSwgW10pCisKKyAgICAgICAgYSA9IGludCgxMCAqIHN5cy5tYXhzaXplKQorICAgICAgICBiID0gaW50KDEwMCAqIHN5cy5tYXhzaXplKQorICAgICAgICBjID0gaW50KDUwICogc3lzLm1heHNpemUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKGEsIGErMikpLCBbYSwgYSsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKGErMiwgYSwgLTEpKSwgW2ErMiwgYSsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJhbmdlKGErNCwgYSwgLTIpKSwgW2ErNCwgYSsyXSkKKworICAgICAgICBzZXEgPSBsaXN0KHJhbmdlKGEsIGIsIGMpKQorICAgICAgICBzZWxmLmFzc2VydEluKGEsIHNlcSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxWzBdLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcVstMV0sIGErYykKKworICAgICAgICBzZXEgPSBsaXN0KHJhbmdlKGIsIGEsIC1jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcVswXSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXFbLTFdLCBiLWMpCisKKyAgICAgICAgc2VxID0gbGlzdChyYW5nZSgtYSwgLWIsIC1jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtYSwgc2VxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC1iLCBzZXEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VxWzBdLCAtYSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXFbLTFdLCAtYS1jKQorCisgICAgZGVmIHRlc3RfbGFyZ2VfcmFuZ2Uoc2VsZik6CisgICAgICAgICMgQ2hlY2sgbG9uZyByYW5nZXMgKGxlbiA+IHN5cy5tYXhzaXplKQorICAgICAgICAjIGxlbigpIGlzIGV4cGVjdGVkIHRvIGZhaWwgZHVlIHRvIGxpbWl0YXRpb25zIG9mIHRoZSBfX2xlbl9fIHByb3RvY29sCisgICAgICAgIGRlZiBfcmFuZ2VfbGVuKHgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbih4KQorICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICAgICAgc3RlcCA9IHhbMV0gLSB4WzBdCisgICAgICAgICAgICAgICAgbGVuZ3RoID0gMSArICgoeFstMV0gLSB4WzBdKSAvLyBzdGVwKQorICAgICAgICAgICAgcmV0dXJuIGxlbmd0aAorICAgICAgICBhID0gLXN5cy5tYXhzaXplCisgICAgICAgIGIgPSBzeXMubWF4c2l6ZQorICAgICAgICBleHBlY3RlZF9sZW4gPSBiIC0gYQorICAgICAgICB4ID0gcmFuZ2UoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhLCB4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxlbiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcmFuZ2VfbGVuKHgpLCBleHBlY3RlZF9sZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgYSkKKyAgICAgICAgaWR4ID0gc3lzLm1heHNpemUrMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbaWR4XSwgYStpZHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtpZHg6aWR4KzFdWzBdLCBhK2lkeCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHhbLWV4cGVjdGVkX2xlbi0xXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgeFtleHBlY3RlZF9sZW5dCisKKyAgICAgICAgYSA9IDAKKyAgICAgICAgYiA9IDIgKiBzeXMubWF4c2l6ZQorICAgICAgICBleHBlY3RlZF9sZW4gPSBiIC0gYQorICAgICAgICB4ID0gcmFuZ2UoYSwgYikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihhLCB4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGIsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGxlbiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcmFuZ2VfbGVuKHgpLCBleHBlY3RlZF9sZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFswXSwgYSkKKyAgICAgICAgaWR4ID0gc3lzLm1heHNpemUrMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbaWR4XSwgYStpZHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtpZHg6aWR4KzFdWzBdLCBhK2lkeCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHhbLWV4cGVjdGVkX2xlbi0xXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgeFtleHBlY3RlZF9sZW5dCisKKyAgICAgICAgYSA9IDAKKyAgICAgICAgYiA9IHN5cy5tYXhzaXplKioxMAorICAgICAgICBjID0gMipzeXMubWF4c2l6ZQorICAgICAgICBleHBlY3RlZF9sZW4gPSAxICsgKGIgLSBhKSAvLyBjCisgICAgICAgIHggPSByYW5nZShhLCBiLCBjKQorICAgICAgICBzZWxmLmFzc2VydEluKGEsIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgbGVuLCB4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9yYW5nZV9sZW4oeCksIGV4cGVjdGVkX2xlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzBdLCBhKQorICAgICAgICBpZHggPSBzeXMubWF4c2l6ZSsxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtpZHhdLCBhKyhpZHgqYykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFtpZHg6aWR4KzFdWzBdLCBhKyhpZHgqYykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICB4Wy1leHBlY3RlZF9sZW4tMV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHhbZXhwZWN0ZWRfbGVuXQorCisgICAgICAgIGEgPSBzeXMubWF4c2l6ZSoqMTAKKyAgICAgICAgYiA9IDAKKyAgICAgICAgYyA9IC0yKnN5cy5tYXhzaXplCisgICAgICAgIGV4cGVjdGVkX2xlbiA9IDEgKyAoYiAtIGEpIC8vIGMKKyAgICAgICAgeCA9IHJhbmdlKGEsIGIsIGMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgeCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiLCB4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBsZW4sIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3JhbmdlX2xlbih4KSwgZXhwZWN0ZWRfbGVuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbMF0sIGEpCisgICAgICAgIGlkeCA9IHN5cy5tYXhzaXplKzEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W2lkeF0sIGErKGlkeCpjKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4W2lkeDppZHgrMV1bMF0sIGErKGlkeCpjKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHhbLWV4cGVjdGVkX2xlbi0xXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgeFtleHBlY3RlZF9sZW5dCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2ludm9jYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDEsIDIsIDMsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmdlLCAxLCAyLCAwKQorICAgICAgICBhID0gaW50KDEwICogc3lzLm1heHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJhbmdlLCBhLCBhICsgMSwgaW50KDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxLiwgMS4sIDEuKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAxZTEwMCwgMWUxMDEsIDFlMTAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAic3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDQyLCAic3BhbSIpCisgICAgICAgICMgRXhlcmNpc2UgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgYmFkIGFyZ3VtZW50cywgdG8gY2hlY2sKKyAgICAgICAgIyByZWZjb3VudGluZyBsb2dpYworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMCwgMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLCAwLjAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAsIDAuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIDAuMCwgMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHJhbmdlLCAwLjAsIDAuMCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgMC4wLCAwLjAsIDEuMCkKKworICAgIGRlZiB0ZXN0X2luZGV4KHNlbGYpOgorICAgICAgICB1ID0gcmFuZ2UoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmluZGV4KDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuaW5kZXgoMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHUuaW5kZXgsIDIpCisKKyAgICAgICAgdSA9IHJhbmdlKC0yLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuY291bnQoMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5pbmRleCgwKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB1LmluZGV4KQorCisgICAgICAgIGNsYXNzIEJhZEV4YyhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEJhZENtcDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIG90aGVyID09IDI6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEJhZEV4YygpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgYSA9IHJhbmdlKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhZEV4YywgYS5pbmRleCwgQmFkQ21wKCkpCisKKyAgICAgICAgYSA9IHJhbmdlKC0yLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuaW5kZXgoMCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMSwgMTAsIDMpLmluZGV4KDQpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEsIC0xMCwgLTMpLmluZGV4KC01KSwgMikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKioyMCkuaW5kZXgoMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTAqKjIwKS5pbmRleCgxMCoqMjAgLSAxKSwgMTAqKjIwIC0gMSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5nZSgxLCAyKioxMDAsIDIpLmluZGV4LCAyKio4NykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLCAyKioxMDAsIDIpLmluZGV4KDIqKjg3KzEpLCAyKio4NikKKworICAgICAgICBjbGFzcyBBbHdheXNFcXVhbChvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgYWx3YXlzX2VxdWFsID0gQWx3YXlzRXF1YWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKS5pbmRleChhbHdheXNfZXF1YWwpLCAwKQorCisgICAgZGVmIHRlc3RfdXNlcl9pbmRleF9tZXRob2Qoc2VsZik6CisgICAgICAgIGJpZ251bSA9IDIqc3lzLm1heHNpemUKKyAgICAgICAgc21hbGxudW0gPSA0MgorCisgICAgICAgICMgVXNlci1kZWZpbmVkIGNsYXNzIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZAorICAgICAgICBjbGFzcyBJOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG4pOgorICAgICAgICAgICAgICAgIHNlbGYubiA9IGludChuKQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZShJKGJpZ251bSksIEkoYmlnbnVtICsgMSkpKSwgW2JpZ251bV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZShJKHNtYWxsbnVtKSwgSShzbWFsbG51bSArIDEpKSksIFtzbWFsbG51bV0pCisKKyAgICAgICAgIyBVc2VyLWRlZmluZWQgY2xhc3Mgd2l0aCBhIGZhaWxpbmcgX19pbmRleF9fIG1ldGhvZAorICAgICAgICBjbGFzcyBJWDoKKyAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgcmFuZ2UsIElYKCkpCisKKyAgICAgICAgIyBVc2VyLWRlZmluZWQgY2xhc3Mgd2l0aCBhbiBpbnZhbGlkIF9faW5kZXhfXyBtZXRob2QKKyAgICAgICAgY2xhc3MgSU46CisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAibm90IGEgbnVtYmVyIgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZ2UsIElOKCkpCisKKyAgICBkZWYgdGVzdF9jb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgzKS5jb3VudCgtMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMykuY291bnQoMCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMykuY291bnQoMSksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMykuY291bnQoMiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMykuY291bnQoMyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyYW5nZSgzKS5jb3VudCgtMSkpLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyYW5nZSgzKS5jb3VudCgxKSksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxMCoqMjApLmNvdW50KDEpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhbmdlKDEwKioyMCkuY291bnQoMTAqKjIwKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgzKS5pbmRleCgxKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLCAyKioxMDAsIDIpLmNvdW50KDIqKjg3KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYW5nZSgxLCAyKioxMDAsIDIpLmNvdW50KDIqKjg3KzEpLCAxKQorCisgICAgICAgIGNsYXNzIEFsd2F5c0VxdWFsKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBhbHdheXNfZXF1YWwgPSBBbHdheXNFcXVhbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTApLmNvdW50KGFsd2F5c19lcXVhbCksIDEwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJhbmdlKHN5cy5tYXhzaXplLCBzeXMubWF4c2l6ZSsxMCkpLCAxMCkKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyYW5nZSgxKSksICdyYW5nZSgwLCAxKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyYW5nZSgxLCAyKSksICdyYW5nZSgxLCAyKScpCkBAIC0xMTUsNiArMzU1LDYyIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHJhbmdlKFtdLCAxLCAtMSkKIAorICAgIGRlZiB0ZXN0X3R5cGVzKHNlbGYpOgorICAgICAgICAjIE5vbi1pbnRlZ2VyIG9iamVjdHMgKmVxdWFsKiB0byBhbnkgb2YgdGhlIHJhbmdlJ3MgaXRlbXMgYXJlIHN1cHBvc2VkCisgICAgICAgICMgdG8gYmUgY29udGFpbmVkIGluIHRoZSByYW5nZS4KKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLjAsIHJhbmdlKDMpKQorICAgICAgICBzZWxmLmFzc2VydEluKFRydWUsIHJhbmdlKDMpKQorICAgICAgICBzZWxmLmFzc2VydEluKDErMGosIHJhbmdlKDMpKQorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6IHJldHVybiBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oQzEoKSwgcmFuZ2UoMykpCisKKyAgICAgICAgIyBPYmplY3RzIGFyZSBuZXZlciBjb2VyY2VkIGludG8gb3RoZXIgdHlwZXMgZm9yIGNvbXBhcmlzb24uCisgICAgICAgIGNsYXNzIEMyOgorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6IHJldHVybiAxCisgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOiByZXR1cm4gMQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKEMyKCksIHJhbmdlKDMpKQorICAgICAgICAjIC4uZXhjZXB0IGlmIGV4cGxpY2l0bHkgdG9sZCBzby4KKyAgICAgICAgc2VsZi5hc3NlcnRJbihpbnQoQzIoKSksIHJhbmdlKDMpKQorCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgcmFuZ2UuX19jb250YWluc19fIG9wdGltaXphdGlvbiBpcyBvbmx5CisgICAgICAgICMgdXNlZCBmb3IgaW50cywgbm90IGZvciBpbnN0YW5jZXMgb2Ygc3ViY2xhc3NlcyBvZiBpbnQuCisgICAgICAgIGNsYXNzIEMzKGludCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRJbihDMygxMSksIHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihDMygxMSksIGxpc3QocmFuZ2UoMTApKSkKKworICAgIGRlZiB0ZXN0X3N0cmlkZWRfbGltaXRzKHNlbGYpOgorICAgICAgICByID0gcmFuZ2UoMCwgMTAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydEluKDAsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigyLCByKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDk5LCByKQorICAgICAgICBzZWxmLmFzc2VydEluKDEwMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMDEsIHIpCisKKyAgICAgICAgciA9IHJhbmdlKDAsIC0yMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigtMTksIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTIwLCByKQorCisgICAgICAgIHIgPSByYW5nZSgwLCAtMjAsIC0yKQorICAgICAgICBzZWxmLmFzc2VydEluKC0xOCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMTksIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTIwLCByKQorCisgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CisgICAgICAgIHIgPSByYW5nZSgwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgcikKKworICAgICAgICByID0gcmFuZ2UoMCwgLTEwKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMSwgcikKKwogICAgIGRlZiB0ZXN0X3JhbmdlX2l0ZXJhdG9ycyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSAnZmFzdCcgaXRlcmF0b3JzLCB0aGF0IHVzZSBhIHJhbmdlaXRlcm9iamVjdCBpbnRlcm5hbGx5LgogICAgICAgICAjIHNlZSBpc3N1ZSA3Mjk4CkBAIC0xMzksNiArNDM1LDc5IEBACiAgICAgICAgICAgICB0ZXN0X2lkID0gInJldmVyc2VkKHJhbmdlKHt9LCB7fSwge30pKSIuZm9ybWF0KHN0YXJ0LCBlbmQsIHN0ZXApCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9pdGVyYXRvcnNfZXF1YWwoaXRlcjEsIGl0ZXIyLCB0ZXN0X2lkLCBsaW1pdD0xMDApCiAKKyAgICBkZWYgdGVzdF9zbGljZShzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrKHN0YXJ0LCBzdG9wLCBzdGVwPU5vbmUpOgorICAgICAgICAgICAgaSA9IHNsaWNlKHN0YXJ0LCBzdG9wLCBzdGVwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJbaV0pLCBsaXN0KHIpW2ldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocltpXSksIGxlbihsaXN0KHIpW2ldKSkKKyAgICAgICAgZm9yIHIgaW4gW3JhbmdlKDEwKSwKKyAgICAgICAgICAgICAgICAgIHJhbmdlKDApLAorICAgICAgICAgICAgICAgICAgcmFuZ2UoMSwgOSwgMyksCisgICAgICAgICAgICAgICAgICByYW5nZSg4LCAwLCAtMyksCisgICAgICAgICAgICAgICAgICByYW5nZShzeXMubWF4c2l6ZSsxLCBzeXMubWF4c2l6ZSsxMCksCisgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgY2hlY2soMCwgMikKKyAgICAgICAgICAgIGNoZWNrKDAsIDIwKQorICAgICAgICAgICAgY2hlY2soMSwgMikKKyAgICAgICAgICAgIGNoZWNrKDIwLCAzMCkKKyAgICAgICAgICAgIGNoZWNrKC0zMCwgLTIwKQorICAgICAgICAgICAgY2hlY2soLTEsIDEwMCwgMikKKyAgICAgICAgICAgIGNoZWNrKDAsIC0xKQorICAgICAgICAgICAgY2hlY2soLTEsIC0zLCAtMSkKKworICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgorICAgICAgICByID0gcmFuZ2UoMTApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCByKQorICAgICAgICBzZWxmLmFzc2VydEluKDUuMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbig1LjEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIiIsIHIpCisgICAgICAgIHIgPSByYW5nZSg5LCAtMSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCByKQorICAgICAgICBzZWxmLmFzc2VydEluKDUuMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbig1LjEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oLTEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMTAsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIiIsIHIpCisgICAgICAgIHIgPSByYW5nZSgwLCAxMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigwLCByKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oNS4wLCByKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDUuMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiIiwgcikKKyAgICAgICAgciA9IHJhbmdlKDksIC0xLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigwLCByKQorICAgICAgICBzZWxmLmFzc2VydEluKDEsIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oNS4wLCByKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDUuMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigtMSwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigxMCwgcikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiIiwgcikKKworICAgIGRlZiB0ZXN0X3JldmVyc2VfaXRlcmF0aW9uKHNlbGYpOgorICAgICAgICBmb3IgciBpbiBbcmFuZ2UoMTApLAorICAgICAgICAgICAgICAgICAgcmFuZ2UoMCksCisgICAgICAgICAgICAgICAgICByYW5nZSgxLCA5LCAzKSwKKyAgICAgICAgICAgICAgICAgIHJhbmdlKDgsIDAsIC0zKSwKKyAgICAgICAgICAgICAgICAgIHJhbmdlKHN5cy5tYXhzaXplKzEsIHN5cy5tYXhzaXplKzEwKSwKKyAgICAgICAgICAgICAgICAgIF06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocmV2ZXJzZWQocikpLCBsaXN0KHIpWzo6LTFdKQorCisgICAgZGVmIHRlc3RfaXNzdWUxMTg0NShzZWxmKToKKyAgICAgICAgciA9IHJhbmdlKCpzbGljZSgxLCAxOCwgMikuaW5kaWNlcygyMCkpCisgICAgICAgIHZhbHVlcyA9IHtOb25lLCAwLCAxLCAtMSwgMiwgLTIsIDUsIC01LCAxOSwgLTE5LAorICAgICAgICAgICAgICAgICAgMjAsIC0yMCwgMjEsIC0yMSwgMzAsIC0zMCwgOTksIC05OX0KKyAgICAgICAgZm9yIGkgaW4gdmFsdWVzOgorICAgICAgICAgICAgZm9yIGogaW4gdmFsdWVzOgorICAgICAgICAgICAgICAgIGZvciBrIGluIHZhbHVlcyAtIHswfToKKyAgICAgICAgICAgICAgICAgICAgcltpOmo6a10KKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChSYW5nZVRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CmluZGV4IDVhZDQ0ZGQuLmZlOGJjMzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZS5weQpAQCAtMSw3ICsxLDYgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QKIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgdHJhY2ViYWNrCkBAIC02MzksNiArNjM4LDI3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdGVyKS5zcGFuKCksICg0LCA0KSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXRlcikKIAorICAgIGRlZiB0ZXN0X2J1Z182NTYxKHNlbGYpOgorICAgICAgICAjICdcZCcgc2hvdWxkIG1hdGNoIGNoYXJhY3RlcnMgaW4gVW5pY29kZSBjYXRlZ29yeSAnTmQnCisgICAgICAgICMgKE51bWJlciwgRGVjaW1hbCBEaWdpdCksIGJ1dCBub3QgdGhvc2UgaW4gJ05sJyAoTnVtYmVyLAorICAgICAgICAjIExldHRlcikgb3IgJ05vJyAoTnVtYmVyLCBPdGhlcikuCisgICAgICAgIGRlY2ltYWxfZGlnaXRzID0gWworICAgICAgICAgICAgJ1x1MDAzNycsICMgJ1xOe0RJR0lUIFNFVkVOfScsIGNhdGVnb3J5ICdOZCcKKyAgICAgICAgICAgICdcdTBlNTgnLCAjICdcTntUSEFJIERJR0lUIFNJWH0nLCBjYXRlZ29yeSAnTmQnCisgICAgICAgICAgICAnXHVmZjEwJywgIyAnXE57RlVMTFdJRFRIIERJR0lUIFpFUk99JywgY2F0ZWdvcnkgJ05kJworICAgICAgICAgICAgXQorICAgICAgICBmb3IgeCBpbiBkZWNpbWFsX2RpZ2l0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ15cZCQnLCB4KS5ncm91cCgwKSwgeCkKKworICAgICAgICBub3RfZGVjaW1hbF9kaWdpdHMgPSBbCisgICAgICAgICAgICAnXHUyMTY1JywgIyAnXE57Uk9NQU4gTlVNRVJBTCBTSVh9JywgY2F0ZWdvcnkgJ05sJworICAgICAgICAgICAgJ1x1MzAzOScsICMgJ1xOe0hBTkdaSE9VIE5VTUVSQUwgVFdFTlRZfScsIGNhdGVnb3J5ICdObCcKKyAgICAgICAgICAgICdcdTIwODInLCAjICdcTntTVUJTQ1JJUFQgVFdPfScsIGNhdGVnb3J5ICdObycKKyAgICAgICAgICAgICdcdTMyYjQnLCAjICdcTntDSVJDTEVEIE5VTUJFUiBUSElSVFkgTklORX0nLCBjYXRlZ29yeSAnTm8nCisgICAgICAgICAgICBdCisgICAgICAgIGZvciB4IGluIG5vdF9kZWNpbWFsX2RpZ2l0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeXGQkJywgeCkpCisKICAgICBkZWYgdGVzdF9lbXB0eV9hcnJheShzZWxmKToKICAgICAgICAgIyBTRiBidWYgMTY0NzU0MQogICAgICAgICBpbXBvcnQgYXJyYXkKQEAgLTc2MSw3ICs3ODEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIF9zcmUuY29tcGlsZSwge30sIDAsIFtdKQogCiBkZWYgcnVuX3JlX3Rlc3RzKCk6Ci0gICAgZnJvbSB0ZXN0LnJlX3Rlc3RzIGltcG9ydCBiZW5jaG1hcmtzLCB0ZXN0cywgU1VDQ0VFRCwgRkFJTCwgU1lOVEFYX0VSUk9SCisgICAgZnJvbSB0ZXN0LnJlX3Rlc3RzIGltcG9ydCB0ZXN0cywgU1VDQ0VFRCwgRkFJTCwgU1lOVEFYX0VSUk9SCiAgICAgaWYgdmVyYm9zZToKICAgICAgICAgcHJpbnQoJ1J1bm5pbmcgcmVfdGVzdHMgdGVzdCBzdWl0ZScpCiAgICAgZWxzZToKQEAgLTg4Nyw2ICs5MDcsNyBAQAogICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIHVuaWNvZGUtc2Vuc2l0aXZlIG1hdGNoJywgdCkKIAorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCiAgICAgcnVuX3JlX3Rlc3RzKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODNkZDMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0wLDAgKzEsNDcgQEAKKyIiIgorVmVyeSBtaW5pbWFsIHVuaXR0ZXN0cyBmb3IgcGFydHMgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworVGhlc2UgdGVzdHMgd2VyZSBhZGRlZCB0byBjaGVjayB0aGF0IHRoZSBsaWJlZGl0IGVtdWxhdGlvbiBvbiBPU1ggYW5kCit0aGUgInJlYWwiIHJlYWRsaW5lIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGZvciBoaXN0b3J5IG1hbmlwdWxhdGlvbi4gVGhhdCdzCit3aHkgdGhlIHRlc3RzIGNvdmVyIG9ubHkgYSBzbWFsbCBzdWJzZXQgb2YgdGhlIGludGVyZmFjZS4KKyIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCisKKyMgU2tpcCB0ZXN0cyBpZiB0aGVyZSBpcyBubyByZWFkbGluZSBtb2R1bGUKK3JlYWRsaW5lID0gaW1wb3J0X21vZHVsZSgncmVhZGxpbmUnKQorCitjbGFzcyBUZXN0SGlzdG9yeU1hbmlwdWxhdGlvbiAodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihyZWFkbGluZSwgJ2NsZWFyX2hpc3RvcnknKSwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgaGlzdG9yeSB1cGRhdGUgdGVzdCBjYW5ub3QgYmUgcnVuIGJlY2F1c2UgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICJjbGVhcl9oaXN0b3J5IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLiIpCisgICAgZGVmIHRlc3RIaXN0b3J5VXBkYXRlcyhzZWxmKToKKyAgICAgICAgcmVhZGxpbmUuY2xlYXJfaGlzdG9yeSgpCisKKyAgICAgICAgcmVhZGxpbmUuYWRkX2hpc3RvcnkoImZpcnN0IGxpbmUiKQorICAgICAgICByZWFkbGluZS5hZGRfaGlzdG9yeSgic2Vjb25kIGxpbmUiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgwKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpLCAiZmlyc3QgbGluZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgyKSwgInNlY29uZCBsaW5lIikKKworICAgICAgICByZWFkbGluZS5yZXBsYWNlX2hpc3RvcnlfaXRlbSgwLCAicmVwbGFjZWQgbGluZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgwKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkbGluZS5nZXRfaGlzdG9yeV9pdGVtKDEpLCAicmVwbGFjZWQgbGluZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgyKSwgInNlY29uZCBsaW5lIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDIpCisKKyAgICAgICAgcmVhZGxpbmUucmVtb3ZlX2hpc3RvcnlfaXRlbSgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9oaXN0b3J5X2l0ZW0oMCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGxpbmUuZ2V0X2hpc3RvcnlfaXRlbSgxKSwgInNlY29uZCBsaW5lIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDEpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0SGlzdG9yeU1hbmlwdWxhdGlvbikKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CmluZGV4IGNlNmVjYjYuLmIwZGM0ZDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKQEAgLTExLDYgKzExLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVwciBhcyByICMgRG9uJ3Qgc2hhZG93IGJ1aWx0aW4gcmVwcgogZnJvbSByZXBybGliIGltcG9ydCBSZXByCitmcm9tIHJlcHJsaWIgaW1wb3J0IHJlY3Vyc2l2ZV9yZXByCiAKIAogZGVmIG5lc3RlZFR1cGxlKG5lc3RpbmcpOgpAQCAtMTI1LDcgKzEyNiw3IEBACiAgICAgICAgIHMgPSByKENsYXNzV2l0aEZhaWxpbmdSZXByKQogICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCI8Y2xhc3MgIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCI+IikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmZpbmQoIi4uLiIpIGluIFsxMiwgMTNdKQorICAgICAgICBzZWxmLmFzc2VydEluKHMuZmluZCgiLi4uIiksIFsxMiwgMTNdKQogCiAgICAgZGVmIHRlc3RfbGFtYmRhKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihsYW1iZGEgeDogeCkuc3RhcnRzd2l0aCgKQEAgLTMwMSwxMSArMzAyLDM4IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBSZXByLnJlcHJfaW5zdGFuY2UiKQogCitjbGFzcyBNeUNvbnRhaW5lcjoKKyAgICAnSGVscGVyIGNsYXNzIGZvciBUZXN0UmVjdXJzaXZlUmVwcicKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWVzKToKKyAgICAgICAgc2VsZi52YWx1ZXMgPSBsaXN0KHZhbHVlcykKKyAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZXMuYXBwZW5kKHZhbHVlKQorICAgIEByZWN1cnNpdmVfcmVwcigpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwnICsgJywgJy5qb2luKG1hcChzdHIsIHNlbGYudmFsdWVzKSkgKyAnPicKKworY2xhc3MgTXlDb250YWluZXIyKE15Q29udGFpbmVyKToKKyAgICBAcmVjdXJzaXZlX3JlcHIoJysrKycpCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwnICsgJywgJy5qb2luKG1hcChzdHIsIHNlbGYudmFsdWVzKSkgKyAnPicKKworY2xhc3MgVGVzdFJlY3Vyc2l2ZVJlcHIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9yZXByKHNlbGYpOgorICAgICAgICBtID0gTXlDb250YWluZXIobGlzdCgnYWJjZGUnKSkKKyAgICAgICAgbS5hcHBlbmQobSkKKyAgICAgICAgbS5hcHBlbmQoJ3gnKQorICAgICAgICBtLmFwcGVuZChtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICc8YSwgYiwgYywgZCwgZSwgLi4uLCB4LCAuLi4+JykKKyAgICAgICAgbSA9IE15Q29udGFpbmVyMihsaXN0KCdhYmNkZScpKQorICAgICAgICBtLmFwcGVuZChtKQorICAgICAgICBtLmFwcGVuZCgneCcpCisgICAgICAgIG0uYXBwZW5kKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgJzxhLCBiLCBjLCBkLCBlLCArKyssIHgsICsrKz4nKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFJlcHJUZXN0cykKLSAgICBpZiBvcy5uYW1lICE9ICdtYWMnOgotICAgICAgICBydW5fdW5pdHRlc3QoTG9uZ1JlcHJUZXN0KQorICAgIHJ1bl91bml0dGVzdChMb25nUmVwclRlc3QpCisgICAgcnVuX3VuaXR0ZXN0KFRlc3RSZWN1cnNpdmVSZXByKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCA0NTQ2MzQ5Li4zYzliNjIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEwMiw2ICsxMDIsMTAgQEAKICAgICAgICAgICAgIHVzYWdlYm90aCA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfQk9USCkKICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHVzYWdlX3RocmVhZCA9IHJlc291cmNlLmdldHJ1c2FnZShyZXNvdXJjZS5SVVNBR0VfVEhSRUFEKQorICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJlc291cmNlVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weSBiL0xpYi90ZXN0L3Rlc3RfcmljaGNtcC5weQppbmRleCBhNzg4YzYwLi5mOGYzNzE3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JpY2hjbXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yaWNoY21wLnB5CkBAIC0xOTIsMTIgKzE5MiwxMiBAQAogCiAgICAgZGVmIHRlc3RfbWlzYmVoYXZpbihzZWxmKToKICAgICAgICAgY2xhc3MgTWlzYjoKLSAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOiByZXR1cm4gMAotICAgICAgICAgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6IHJldHVybiAwCi0gICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTogcmV0dXJuIDAKLSAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOiByYWlzZSBUZXN0RmFpbGVkKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQotICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6IHJhaXNlIFRlc3RGYWlsZWQoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCi0gICAgICAgICAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKTogcmFpc2UgVGVzdEZhaWxlZCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKKyAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZl8sIG90aGVyKTogcmV0dXJuIDAKKyAgICAgICAgICAgIGRlZiBfX2xlX18oc2VsZl8sIG90aGVyKTogc2VsZi5mYWlsKCJUaGlzIHNob3VsZG4ndCBoYXBwZW4iKQorICAgICAgICAgICAgZGVmIF9fZ2VfXyhzZWxmXywgb3RoZXIpOiBzZWxmLmZhaWwoIlRoaXMgc2hvdWxkbid0IGhhcHBlbiIpCisgICAgICAgICAgICBkZWYgX19uZV9fKHNlbGZfLCBvdGhlcik6IHNlbGYuZmFpbCgiVGhpcyBzaG91bGRuJ3QgaGFwcGVuIikKICAgICAgICAgYSA9IE1pc2IoKQogICAgICAgICBiID0gTWlzYigpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYTxiLCAwKQpAQCAtMjc5LDkgKzI3OSw2IEBACiAKIGNsYXNzIExpc3RUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIGRlZiBhc3NlcnRJcyhzZWxmLCBhLCBiKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKLQogICAgIGRlZiB0ZXN0X2NvdmVyYWdlKHNlbGYpOgogICAgICAgICAjIGV4ZXJjaXNlIGFsbCBjb21wYXJpc29ucyBmb3IgbGlzdHMKICAgICAgICAgeCA9IFs0Ml0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDQzMTQxZTUuLmFkM2FiMzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtMywxMCArMywxNSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cworaW1wb3J0IHJlCiBpbXBvcnQgdGVtcGZpbGUKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBydW5fdW5pdHRlc3QsIGZvcmdldAotZnJvbSBydW5weSBpbXBvcnQgX3J1bl9jb2RlLCBfcnVuX21vZHVsZV9jb2RlLCBydW5fbW9kdWxlCitpbXBvcnQgcHlfY29tcGlsZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZvcmdldCwgbWFrZV9sZWdhY3lfcHljLCBydW5fdW5pdHRlc3QsIHVubG9hZCwgdmVyYm9zZQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICgKKyAgICBtYWtlX3BrZywgbWFrZV9zY3JpcHQsIG1ha2VfemlwX3BrZywgbWFrZV96aXBfc2NyaXB0LCB0ZW1wX2RpcikKIAorCitmcm9tIHJ1bnB5IGltcG9ydCBfcnVuX2NvZGUsIF9ydW5fbW9kdWxlX2NvZGUsIHJ1bl9tb2R1bGUsIHJ1bl9wYXRoCiAjIE5vdGU6IFRoaXMgbW9kdWxlIGNhbid0IHNhZmVseSB0ZXN0IF9ydW5fbW9kdWxlX2FzX21haW4gYXMgaXQKICMgcnVucyBpdHMgdGVzdHMgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzcywgd2hpY2ggd291bGQgbWVzcyB3aXRoIHRoZQogIyByZWFsIF9fbWFpbl9fIG1vZHVsZSAodXN1YWxseSB0ZXN0LnJlZ3J0ZXN0KQpAQCAtMTUsNiArMjAsNyBAQAogIyBTZXQgdXAgdGhlIHRlc3QgY29kZSBhbmQgZXhwZWN0ZWQgcmVzdWx0cwogCiBjbGFzcyBSdW5Nb2R1bGVDb2RlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkuX3J1bl9jb2RlIGFuZCBydW5weS5fcnVuX21vZHVsZV9jb2RlIiIiCiAKICAgICBleHBlY3RlZF9yZXN1bHQgPSBbIlRvcCBsZXZlbCBhc3NpZ25tZW50IiwgIkxvd2VyIGxldmVsIHJlZmVyZW5jZSJdCiAgICAgdGVzdF9zb3VyY2UgPSAoCkBAIC0zNywxNCArNDMsMTUgQEAKICAgICBkZWYgdGVzdF9ydW5fY29kZShzZWxmKToKICAgICAgICAgc2F2ZWRfYXJndjAgPSBzeXMuYXJndlswXQogICAgICAgICBkID0gX3J1bl9jb2RlKHNlbGYudGVzdF9zb3VyY2UsIHt9KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZFsicmVzdWx0Il0gPT0gc2VsZi5leHBlY3RlZF9yZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkWyJfX25hbWVfXyJdIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkWyJfX2ZpbGVfXyJdIGlzIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkWyJfX2xvYWRlcl9fIl0gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRbIl9fcGFja2FnZV9fIl0gaXMgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRbInJ1bl9hcmd2MCJdIGlzIHNhdmVkX2FyZ3YwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoInJ1bl9uYW1lIiBub3QgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5hcmd2WzBdIGlzIHNhdmVkX2FyZ3YwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbInJlc3VsdCJdLCBzZWxmLmV4cGVjdGVkX3Jlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX25hbWVfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fZmlsZV9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZFsiX19jYWNoZWRfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbIl9fbG9hZGVyX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkWyJfX3BhY2thZ2VfXyJdLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGRbInJ1bl9hcmd2MCJdLCBzYXZlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigicnVuX25hbWUiLCBkKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5hcmd2WzBdLCBzYXZlZF9hcmd2MCkKIAogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfY29kZShzZWxmKToKICAgICAgICAgaW5pdGlhbCA9IG9iamVjdCgpCkBAIC02MCwyMiArNjcsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoInJlc3VsdCIgbm90IGluIGQxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbImluaXRpYWwiXSBpcyBpbml0aWFsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJyZXN1bHQiLCBkMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiaW5pdGlhbCJdLCBpbml0aWFsKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyWyJyZXN1bHQiXSwgc2VsZi5leHBlY3RlZF9yZXN1bHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDJbIm5lc3RlZCJdWyJ4Il0sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsiX19uYW1lX18iXSBpcyBuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX25hbWVfXyJdLCBuYW1lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsibW9kdWxlX2luX3N5c19tb2R1bGVzIl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsiX19maWxlX18iXSBpcyBmaWxlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZDJbInJ1bl9hcmd2MCJdIGlzIGZpbGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsiX19sb2FkZXJfXyJdIGlzIGxvYWRlcikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJfX3BhY2thZ2VfXyJdIGlzIHBhY2thZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXMuYXJndlswXSBpcyBzYXZlZF9hcmd2MCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgbm90IGluIHN5cy5tb2R1bGVzKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX2ZpbGVfXyJdLCBmaWxlKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX2NhY2hlZF9fIl0sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZDJbInJ1bl9hcmd2MCJdLCBmaWxlKQorICAgICAgICBzZWxmLmFzc2VydElzKGQyWyJfX2xvYWRlcl9fIl0sIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhkMlsiX19wYWNrYWdlX18iXSwgcGFja2FnZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuYXJndlswXSwgc2F2ZWRfYXJndjApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc3lzLm1vZHVsZXMpCiAKIAogY2xhc3MgUnVuTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0cyBmb3IgcnVucHkucnVuX21vZHVsZSIiIgogCiAgICAgZGVmIGV4cGVjdF9pbXBvcnRfZXJyb3Ioc2VsZiwgbW9kX25hbWUpOgogICAgICAgICB0cnk6CkBAIC05NCw4ICsxMDMsOCBAQAogICAgICAgICBzZWxmLmV4cGVjdF9pbXBvcnRfZXJyb3IoImEuYmVlIikKICAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCIuaG93YXJkIikKICAgICAgICAgc2VsZi5leHBlY3RfaW1wb3J0X2Vycm9yKCIuLmVhdGVuIikKLSAgICAgICAgIyBQYWNrYWdlCi0gICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigibG9nZ2luZyIpCisgICAgICAgICMgUGFja2FnZSB3aXRob3V0IF9fbWFpbl9fLnB5CisgICAgICAgIHNlbGYuZXhwZWN0X2ltcG9ydF9lcnJvcigibXVsdGlwcm9jZXNzaW5nIikKIAogICAgIGRlZiB0ZXN0X2xpYnJhcnlfbW9kdWxlKHNlbGYpOgogICAgICAgICBydW5fbW9kdWxlKCJydW5weSIpCkBAIC0xMDcsOSArMTE2LDkgQEAKICAgICAgICAgcGtnX2ZpbGUuY2xvc2UoKQogICAgICAgICByZXR1cm4gcGtnX2ZuYW1lCiAKLSAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgpOgorICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCwgbW9kX2Jhc2U9InJ1bnB5X3Rlc3QiKToKICAgICAgICAgcGtnX25hbWUgPSAiX19ydW5weV9wa2dfXyIKLSAgICAgICAgdGVzdF9mbmFtZSA9ICJydW5weV90ZXN0LnB5IgorICAgICAgICB0ZXN0X2ZuYW1lID0gbW9kX2Jhc2Urb3MuZXh0c2VwKyJweSIKICAgICAgICAgcGtnX2RpciA9IHN1Yl9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIiAgUGFja2FnZSB0cmVlIGluOiIsIHN1Yl9kaXIpCiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBwa2dfZGlyKQpAQCAtMTI0LDcgKzEzMyw3IEBACiAgICAgICAgIG1vZF9maWxlLndyaXRlKHNvdXJjZSkKICAgICAgICAgbW9kX2ZpbGUuY2xvc2UoKQogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiICBDcmVhdGVkOiIsIG1vZF9mbmFtZSkKLSAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArICJydW5weV90ZXN0IgorICAgICAgICBtb2RfbmFtZSA9IChwa2dfbmFtZSsiLiIpKmRlcHRoICsgbW9kX2Jhc2UKICAgICAgICAgcmV0dXJuIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUKIAogICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CkBAIC0xNTksMjAgKzE2OCw0NiBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZSkKICAgICAgICAgICAgIGQxID0gcnVuX21vZHVsZShtb2RfbmFtZSkgIyBSZWFkIGZyb20gc291cmNlCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIngiIGluIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMVsieCJdLCAxKQogICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgogICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCisgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMobW9kX2ZuYW1lKQorICAgICAgICAgICAgdW5sb2FkKG1vZF9uYW1lKSAgIyBJbiBjYXNlIGxvYWRlciBjYWNoZXMgcGF0aHMKICAgICAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJSdW5uaW5nIGZyb20gY29tcGlsZWQ6IiwgbW9kX25hbWUpCiAgICAgICAgICAgICBkMiA9IHJ1bl9tb2R1bGUobW9kX25hbWUpICMgUmVhZCBmcm9tIGJ5dGVjb2RlCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIngiIGluIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMlsieCJdLCAxKQogICAgICAgICAgICAgZGVsIGQyICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCiAgICAgICAgIGlmIHZlcmJvc2U6IHByaW50KCJNb2R1bGUgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5IikKIAorICAgIGRlZiBfY2hlY2tfcGFja2FnZShzZWxmLCBkZXB0aCk6CisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZygieD0xXG4iLCBkZXB0aCwgIl9fbWFpbl9fIikpCisgICAgICAgIHBrZ19uYW1lLCBfLCBfID0gbW9kX25hbWUucnBhcnRpdGlvbigiLiIpCisgICAgICAgIGZvcmdldChtb2RfbmFtZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIlJ1bm5pbmcgZnJvbSBzb3VyY2U6IiwgcGtnX25hbWUpCisgICAgICAgICAgICBkMSA9IHJ1bl9tb2R1bGUocGtnX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIGRlbCBkMSAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBvcy5yZW1vdmUobW9kX2ZuYW1lKQorICAgICAgICAgICAgbWFrZV9sZWdhY3lfcHljKG1vZF9mbmFtZSkKKyAgICAgICAgICAgIHVubG9hZChtb2RfbmFtZSkgICMgSW4gY2FzZSBsb2FkZXIgY2FjaGVzIHBhdGhzCisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiUnVubmluZyBmcm9tIGNvbXBpbGVkOiIsIHBrZ19uYW1lKQorICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKHBrZ19uYW1lKSAjIFJlYWQgZnJvbSBieXRlY29kZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigieCIsIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQyWyJ4Il0gPT0gMSkKKyAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIHBrZ19uYW1lKQorICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiUGFja2FnZSBleGVjdXRlZCBzdWNjZXNzZnVsbHkiKQorCiAgICAgZGVmIF9hZGRfcmVsYXRpdmVfbW9kdWxlcyhzZWxmLCBiYXNlX2Rpciwgc291cmNlLCBkZXB0aCk6CiAgICAgICAgIGlmIGRlcHRoIDw9IDE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJSZWxhdGl2ZSBtb2R1bGUgdGVzdCBuZWVkcyBkZXB0aCA+IDEiKQpAQCAtMjExLDE5ICsyNDYsMjEgQEAKICAgICAgICAgICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiUnVubmluZyBmcm9tIHNvdXJjZToiLCBtb2RfbmFtZSkKICAgICAgICAgICAgIGQxID0gcnVuX21vZHVsZShtb2RfbmFtZSwgcnVuX25hbWU9cnVuX25hbWUpICMgUmVhZCBmcm9tIHNvdXJjZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfX3BhY2thZ2VfXyIgaW4gZDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX3BhY2thZ2VfXyIsIGQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQxWyJfX3BhY2thZ2VfXyJdID09IHBrZ19uYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJzaWJsaW5nIiBpbiBkMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgibmVwaGV3IiBpbiBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInNpYmxpbmciLCBkMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5lcGhldyIsIGQxKQogICAgICAgICAgICAgZGVsIGQxICMgRW5zdXJlIF9fbG9hZGVyX18gZW50cnkgZG9lc24ndCBrZWVwIGZpbGUgb3BlbgogICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgIG9zLnJlbW92ZShtb2RfZm5hbWUpCisgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMobW9kX2ZuYW1lKQorICAgICAgICAgICAgdW5sb2FkKG1vZF9uYW1lKSAgIyBJbiBjYXNlIHRoZSBsb2FkZXIgY2FjaGVzIHBhdGhzCiAgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiUnVubmluZyBmcm9tIGNvbXBpbGVkOiIsIG1vZF9uYW1lKQogICAgICAgICAgICAgZDIgPSBydW5fbW9kdWxlKG1vZF9uYW1lLCBydW5fbmFtZT1ydW5fbmFtZSkgIyBSZWFkIGZyb20gYnl0ZWNvZGUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiX19wYWNrYWdlX18iIGluIGQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiX19wYWNrYWdlX18iLCBkMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkMlsiX19wYWNrYWdlX18iXSA9PSBwa2dfbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgic2libGluZyIgaW4gZDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIm5lcGhldyIgaW4gZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzaWJsaW5nIiwgZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJuZXBoZXciLCBkMikKICAgICAgICAgICAgIGRlbCBkMiAjIEVuc3VyZSBfX2xvYWRlcl9fIGVudHJ5IGRvZXNuJ3Qga2VlcCBmaWxlIG9wZW4KICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYuX2RlbF9wa2cocGtnX2RpciwgZGVwdGgsIG1vZF9uYW1lKQpAQCAtMjM0LDYgKzI3MSwxMSBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCkKIAorICAgIGRlZiB0ZXN0X3J1bl9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCkKKwogICAgIGRlZiB0ZXN0X2V4cGxpY2l0X3JlbGF0aXZlX2ltcG9ydChzZWxmKToKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDIsIDUpOgogICAgICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIlRlc3RpbmcgcmVsYXRpdmUgaW1wb3J0cyBhdCBkZXB0aDoiLCBkZXB0aCkKQEAgLTI0NSw5ICsyODcsMTMyIEBACiAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWxhdGl2ZV9pbXBvcnRzKGRlcHRoLCAiX19tYWluX18iKQogCiAKK2NsYXNzIFJ1blBhdGhUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgorICAgICMgQmFzZWQgb24gY29ycmVzcG9uZGluZyB0ZXN0cyBpbiB0ZXN0X2NtZF9saW5lX3NjcmlwdAorCisgICAgdGVzdF9zb3VyY2UgPSAiIiJcCisjIFNjcmlwdCBtYXkgYmUgcnVuIHdpdGggb3B0aW1pc2F0aW9uIGVuYWJsZWQsIHNvIGRvbid0IHJlbHkgb24gYXNzZXJ0CisjIHN0YXRlbWVudHMgYmVpbmcgZXhlY3V0ZWQKK2RlZiBhc3NlcnRFcXVhbChsaHMsIHJocyk6CisgICAgaWYgbGhzICE9IHJoczoKKyAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJyVyICE9ICVyJyAlIChsaHMsIHJocykpCitkZWYgYXNzZXJ0SXMobGhzLCByaHMpOgorICAgIGlmIGxocyBpcyBub3QgcmhzOgorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignJXIgaXMgbm90ICVyJyAlIChsaHMsIHJocykpCisjIENoZWNrIGJhc2ljIGNvZGUgZXhlY3V0aW9uCityZXN1bHQgPSBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50J10KK2RlZiBmKCk6CisgICAgcmVzdWx0LmFwcGVuZCgnTG93ZXIgbGV2ZWwgcmVmZXJlbmNlJykKK2YoKQorYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ1RvcCBsZXZlbCBhc3NpZ25tZW50JywgJ0xvd2VyIGxldmVsIHJlZmVyZW5jZSddKQorIyBDaGVjayB0aGUgc3lzIG1vZHVsZQoraW1wb3J0IHN5cworYXNzZXJ0SXMoZ2xvYmFscygpLCBzeXMubW9kdWxlc1tfX25hbWVfX10uX19kaWN0X18pCithcmd2MCA9IHN5cy5hcmd2WzBdCisiIiIKKworICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZT1Ob25lKToKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICBzb3VyY2UgPSBzZWxmLnRlc3Rfc291cmNlCisgICAgICAgIHJldHVybiBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKworICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwLCBleHBlY3RlZF9wYWNrYWdlKToKKyAgICAgICAgcmVzdWx0ID0gcnVuX3BhdGgoc2NyaXB0X25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJfX25hbWVfXyJdLCBleHBlY3RlZF9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsiX19maWxlX18iXSwgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fY2FjaGVkX18iXSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYXJndjAiLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WyJhcmd2MCJdLCBleHBlY3RlZF9hcmd2MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbIl9fcGFja2FnZV9fIl0sIGV4cGVjdGVkX3BhY2thZ2UpCisKKyAgICBkZWYgX2NoZWNrX2ltcG9ydF9lcnJvcihzZWxmLCBzY3JpcHRfbmFtZSwgbXNnKToKKyAgICAgICAgbXNnID0gcmUuZXNjYXBlKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgbXNnLCBydW5fcGF0aCwgc2NyaXB0X25hbWUpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnc2NyaXB0JworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBOb25lKQorCisgICAgZGVmIHRlc3Rfc2NyaXB0X2NvbXBpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChjb21waWxlZF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGNvbXBpbGVkX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZWRfbmFtZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsICcnKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2NvbXBpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJworICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQorICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgbGVnYWN5X3B5YyA9IG1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGxlZ2FjeV9weWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpciwgJycpCisKKyAgICBkZWYgdGVzdF9kaXJlY3RvcnlfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnbm90X21haW4nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSBzY3JpcHRfZGlyCisgICAgICAgICAgICBzZWxmLl9jaGVja19pbXBvcnRfZXJyb3Ioc2NyaXB0X2RpciwgbXNnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdCh6aXBfbmFtZSwgIjxydW5fcGF0aD4iLCBmbmFtZSwgemlwX25hbWUsICcnKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBtb2RfbmFtZSA9ICdfX21haW5fXycKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lLCAnJykKKworICAgIGRlZiB0ZXN0X3ppcGZpbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnbm90X21haW4nCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCisgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCisgICAgICAgICAgICBtc2cgPSAiY2FuJ3QgZmluZCAnX19tYWluX18nIG1vZHVsZSBpbiAlciIgJSB6aXBfbmFtZQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaW1wb3J0X2Vycm9yKHppcF9uYW1lLCBtc2cpCisKKyAgICBkZWYgdGVzdF9tYWluX3JlY3Vyc2lvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXIsIHRlbXBfZGlyKCkgYXMgZHVtbXlfZGlyOgorICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCisgICAgICAgICAgICBzb3VyY2UgPSAoImltcG9ydCBydW5weVxuIgorICAgICAgICAgICAgICAgICAgICAgICJydW5weS5ydW5fcGF0aCglcilcbiIpICUgZHVtbXlfZGlyCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUsIHNvdXJjZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIG1zZyA9ICJyZWN1cnNpb24gZGVwdGggZXhjZWVkZWQiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnLCBydW5fcGF0aCwgemlwX25hbWUpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJ1bk1vZHVsZUNvZGVUZXN0KQotICAgIHJ1bl91bml0dGVzdChSdW5Nb2R1bGVUZXN0KQorICAgIHJ1bl91bml0dGVzdCgKKyAgICAgICAgICAgICAgICAgUnVuTW9kdWxlQ29kZVRlc3QsCisgICAgICAgICAgICAgICAgIFJ1bk1vZHVsZVRlc3QsCisgICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0CisgICAgICAgICAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zYXgucHkgYi9MaWIvdGVzdC90ZXN0X3NheC5weQppbmRleCA2YzkxNDdhLi4wZjZhMWNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NheC5weQpAQCAtMTYsNyArMTYsMTQgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgb3MKKworVEVTVF9YTUxGSUxFID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCitURVNUX1hNTEZJTEVfT1VUID0gZmluZGZpbGUoInRlc3QueG1sLm91dCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQordHJ5OgorICAgIFRFU1RfWE1MRklMRS5lbmNvZGUoInV0ZjgiKQorICAgIFRFU1RfWE1MRklMRV9PVVQuZW5jb2RlKCJ1dGY4IikKK2V4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVuYW1lIGlzIG5vdCBlbmNvZGFibGUgdG8gdXRmOCIpCiAKIG5zX3VyaSA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmcveG1sLW5zL3NheHRlc3QvIgogCkBAIC0zMSw3ICszOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoImF0dHIiIGluIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJhdHRyIiwgYXR0cnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhdHRycy5rZXlzKCkpLCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoImF0dHJzIiksIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRycyIsIDI1KSwgMjUpCkBAIC00OCw3ICs1NSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0TmFtZXMoKSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVzKCksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKG5zX3VyaSwgImF0dHIiKSBpbiBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigobnNfdXJpLCAiYXR0ciIpLCBhdHRycykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGF0dHJzLmtleXMoKSksIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAyNSkKQEAgLTYwLDcgKzY3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXROYW1lcygpLCBbImF0dHIiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgWyJhdHRyIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJhdHRyIiBpbiBhdHRycykKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiYXR0ciIsIGF0dHJzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYXR0cnMua2V5cygpKSwgWyJhdHRyIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KCJhdHRyIiksICJ2YWwiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgiYXR0ciIsIDI1KSwgInZhbCIpCkBAIC0xNDAsNyArMTQ3LDcgQEAKIAogICAgIGRlZiB0ZXN0X3NpbmdsZV9kb3VibGVfcXVvdGVhdHRyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1b3RlYXR0cigiSW5jbHVkZXMgJ3NpbmdsZScgYW5kIFwiZG91YmxlXCIgcXVvdGVzIiksCi0gICAgICAgICAgICAgICAgICAgICJcIkluY2x1ZGVzICdzaW5nbGUnIGFuZCAmcXVvdDtkb3VibGUmcXVvdDsgcXVvdGVzXCIiKQorICAgICAgICAgICAgICAgICAgICAgICAgICJcIkluY2x1ZGVzICdzaW5nbGUnIGFuZCAmcXVvdDtkb3VibGUmcXVvdDsgcXVvdGVzXCIiKQogCiAgICAgIyA9PT09PSBtYWtlX3BhcnNlcgogICAgIGRlZiB0ZXN0X21ha2VfcGFyc2VyKHNlbGYpOgpAQCAtMTY0LDYgKzE3MSwxNiBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHN0YXJ0ICsgIjxkb2M+PC9kb2M+IikKIAorICAgIGRlZiB0ZXN0X3htbGdlbl9iYXNpY19lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0LCBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQorICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnQoImRvYyIsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudCgiZG9jIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jLz4iKQorCiAgICAgZGVmIHRlc3RfeG1sZ2VuX2NvbnRlbnQoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKICAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKQEAgLTE3Niw2ICsxOTMsMTggQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPmh1aGVpPC9kb2M+IikKIAorICAgIGRlZiB0ZXN0X3htbGdlbl9jb250ZW50X2VtcHR5KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQsIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50KCJkb2MiLCB7fSkKKyAgICAgICAgZ2VuLmNoYXJhY3RlcnMoImh1aGVpIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz5odWhlaTwvZG9jPiIpCisKICAgICBkZWYgdGVzdF94bWxnZW5fcGkoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKICAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKQEAgLTIzMyw2ICsyNjIsMTggQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArICI8ZG9jPiA8L2RvYz4iKQogCisgICAgZGVmIHRlc3RfeG1sZ2VuX2lnbm9yYWJsZV9lbXB0eShzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQorICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0LCBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQorCisgICAgICAgIGdlbi5zdGFydERvY3VtZW50KCkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudCgiZG9jIiwge30pCisgICAgICAgIGdlbi5pZ25vcmFibGVXaGl0ZXNwYWNlKCIgIikKKyAgICAgICAgZ2VuLmVuZEVsZW1lbnQoImRvYyIpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQgKyAiPGRvYz4gPC9kb2M+IikKKwogICAgIGRlZiB0ZXN0X3htbGdlbl9ucyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gU3RyaW5nSU8oKQogICAgICAgICBnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQpAQCAtMjUxLDYgKzI5MiwyNCBAQAogICAgICAgICAgICAoJzxuczE6ZG9jIHhtbG5zOm5zMT0iJXMiPjx1ZG9jPjwvdWRvYz48L25zMTpkb2M+JyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zX3VyaSkpCiAKKyAgICBkZWYgdGVzdF94bWxnZW5fbnNfZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCwgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoIm5zMSIsIG5zX3VyaSkKKyAgICAgICAgZ2VuLnN0YXJ0RWxlbWVudE5TKChuc191cmksICJkb2MiKSwgIm5zMTpkb2MiLCB7fSkKKyAgICAgICAgIyBhZGQgYW4gdW5xdWFsaWZpZWQgbmFtZQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKE5vbmUsICJ1ZG9jIiksIE5vbmUsIHt9KQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKChOb25lLCAidWRvYyIpLCBOb25lKQorICAgICAgICBnZW4uZW5kRWxlbWVudE5TKChuc191cmksICJkb2MiKSwgIm5zMTpkb2MiKQorICAgICAgICBnZW4uZW5kUHJlZml4TWFwcGluZygibnMxIikKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCArIFwKKyAgICAgICAgICAgKCc8bnMxOmRvYyB4bWxuczpuczE9IiVzIj48dWRvYy8+PC9uczE6ZG9jPicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc191cmkpKQorCiAgICAgZGVmIHRlc3RfMTQ2MzAyNl8xKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCiAgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCkBAIC0yNjIsNiArMzIxLDE3IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQrJzxhIGI9ImMiPjwvYT4nKQogCisgICAgZGVmIHRlc3RfMTQ2MzAyNl8xX2VtcHR5KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQsIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCisKKyAgICAgICAgZ2VuLnN0YXJ0RG9jdW1lbnQoKQorICAgICAgICBnZW4uc3RhcnRFbGVtZW50TlMoKE5vbmUsICdhJyksICdhJywgeyhOb25lLCAnYicpOidjJ30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKE5vbmUsICdhJyksICdhJykKKyAgICAgICAgZ2VuLmVuZERvY3VtZW50KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgYj0iYyIvPicpCisKICAgICBkZWYgdGVzdF8xNDYzMDI2XzIoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKICAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKQEAgLTI3NSw2ICszNDUsMTkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCBzdGFydCsnPGEgeG1sbnM9InF1eCI+PC9hPicpCiAKKyAgICBkZWYgdGVzdF8xNDYzMDI2XzJfZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCwgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoTm9uZSwgJ3F1eCcpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ3F1eCcsICdhJyksICdhJywge30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdxdXgnLCAnYScpLCAnYScpCisgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKE5vbmUpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgc3RhcnQrJzxhIHhtbG5zPSJxdXgiLz4nKQorCiAgICAgZGVmIHRlc3RfMTQ2MzAyNl8zKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCiAgICAgICAgIGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCkBAIC0yODksNiArMzcyLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksCiAgICAgICAgICAgICBzdGFydCsnPG15OmEgeG1sbnM6bXk9InF1eCIgYj0iYyI+PC9teTphPicpCiAKKyAgICBkZWYgdGVzdF8xNDYzMDI2XzNfZW1wdHkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IFN0cmluZ0lPKCkKKyAgICAgICAgZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCwgc2hvcnRfZW1wdHlfZWxlbWVudHM9VHJ1ZSkKKworICAgICAgICBnZW4uc3RhcnREb2N1bWVudCgpCisgICAgICAgIGdlbi5zdGFydFByZWZpeE1hcHBpbmcoJ215JywgJ3F1eCcpCisgICAgICAgIGdlbi5zdGFydEVsZW1lbnROUygoJ3F1eCcsICdhJyksICdhJywgeyhOb25lLCAnYicpOidjJ30pCisgICAgICAgIGdlbi5lbmRFbGVtZW50TlMoKCdxdXgnLCAnYScpLCAnYScpCisgICAgICAgIGdlbi5lbmRQcmVmaXhNYXBwaW5nKCdteScpCisgICAgICAgIGdlbi5lbmREb2N1bWVudCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwKKyAgICAgICAgICAgIHN0YXJ0Kyc8bXk6YSB4bWxuczpteT0icXV4IiBiPSJjIi8+JykKKwogICAgIGRlZiB0ZXN0XzUwMjdfMShzZWxmKToKICAgICAgICAgIyBUaGUgeG1sIHByZWZpeCAoYXMgaW4geG1sOmxhbmcgYmVsb3cpIGlzIHJlc2VydmVkIGFuZCBib3VuZCBieQogICAgICAgICAjIGRlZmluaXRpb24gdG8gaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlLiAgWE1MR2VuZXJhdG9yIGhhZApAQCAtMzY2LDcgKzQ2Myw4IEBACiAjCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi14bWxfdGVzdF9vdXQgPSBvcGVuKGZpbmRmaWxlKCJ0ZXN0LnhtbC5vdXQiKSkucmVhZCgpCit3aXRoIG9wZW4oVEVTVF9YTUxGSUxFX09VVCkgYXMgZjoKKyAgICB4bWxfdGVzdF9vdXQgPSBmLnJlYWQoKQogCiBjbGFzcyBFeHBhdFJlYWRlclRlc3QoWG1sVGVzdEJhc2UpOgogCkBAIC0zNzgsNyArNDc2LDggQEAKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQotICAgICAgICBwYXJzZXIucGFyc2Uob3BlbihmaW5kZmlsZSgidGVzdC54bWwiKSkpCisgICAgICAgIHdpdGggb3BlbihURVNUX1hNTEZJTEUpIGFzIGY6CisgICAgICAgICAgICBwYXJzZXIucGFyc2UoZikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKQEAgLTQ5MSw3ICs1OTAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGF0dHJzLmdldFFOYW1lcygpID09IFtdIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnMuZ2V0UU5hbWVzKCkgPT0gWyJuczphdHRyIl0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhdHRycyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobnNfdXJpLCAiYXR0ciIpIGluIGF0dHJzKQorICAgICAgICBzZWxmLmFzc2VydEluKChuc191cmksICJhdHRyIiksIGF0dHJzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldCgobnNfdXJpLCAiYXR0ciIpKSwgInZhbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIiksIDI1KSwgInZhbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhdHRycy5pdGVtcygpKSwgWygobnNfdXJpLCAiYXR0ciIpLCAidmFsIildKQpAQCAtNTA3LDcgKzYwNiw3IEBACiAgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCiAKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKLSAgICAgICAgcGFyc2VyLnBhcnNlKGZpbmRmaWxlKCJ0ZXN0LnhtbCIpKQorICAgICAgICBwYXJzZXIucGFyc2UoVEVTVF9YTUxGSUxFKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKIApAQCAtNTE3LDcgKzYxNiw3IEBACiAgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCiAKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKLSAgICAgICAgcGFyc2VyLnBhcnNlKElucHV0U291cmNlKGZpbmRmaWxlKCJ0ZXN0LnhtbCIpKSkKKyAgICAgICAgcGFyc2VyLnBhcnNlKElucHV0U291cmNlKFRFU1RfWE1MRklMRSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQogCkBAIC01MjgsOCArNjI3LDkgQEAKIAogICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQogICAgICAgICBpbnBzcmMgPSBJbnB1dFNvdXJjZSgpCi0gICAgICAgIGlucHNyYy5zZXRCeXRlU3RyZWFtKG9wZW4oZmluZGZpbGUoInRlc3QueG1sIikpKQotICAgICAgICBwYXJzZXIucGFyc2UoaW5wc3JjKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFKSBhcyBmOgorICAgICAgICAgICAgaW5wc3JjLnNldEJ5dGVTdHJlYW0oZikKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZShpbnBzcmMpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQogCkBAIC01ODksOSArNjg5LDkgQEAKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKICAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCiAgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCi0gICAgICAgIHBhcnNlci5wYXJzZShmaW5kZmlsZSgidGVzdC54bWwiKSkKKyAgICAgICAgcGFyc2VyLnBhcnNlKFRFU1RfWE1MRklMRSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRTeXN0ZW1JZCgpLCBmaW5kZmlsZSgidGVzdC54bWwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0U3lzdGVtSWQoKSwgVEVTVF9YTUxGSUxFKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5nZXRQdWJsaWNJZCgpLCBOb25lKQogCiAKQEAgLTY4MSw3ICs3ODEsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJzLmdldE5hbWVzKCksIFsobnNfdXJpLCAiYXR0ciIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXRRTmFtZXMoKSwgWyJuczphdHRyIl0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGF0dHJzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChuc191cmksICJhdHRyIikgaW4gYXR0cnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKG5zX3VyaSwgImF0dHIiKSwgYXR0cnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhdHRycy5rZXlzKCkpLCBbKG5zX3VyaSwgImF0dHIiKV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0KChuc191cmksICJhdHRyIikpLCAidmFsIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdHRycy5nZXQoKG5zX3VyaSwgImF0dHIiKSwgMjUpLCAidmFsIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZmQyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CkBAIC0wLDAgKzEsODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCitpbXBvcnQgc2NoZWQKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2VudGVyKHNlbGYpOgorICAgICAgICBsID0gW10KKyAgICAgICAgZnVuID0gbGFtYmRhIHg6IGwuYXBwZW5kKHgpCisgICAgICAgIHNjaGVkdWxlciA9IHNjaGVkLnNjaGVkdWxlcih0aW1lLnRpbWUsIHRpbWUuc2xlZXApCisgICAgICAgIGZvciB4IGluIFswLjA1LCAwLjA0LCAwLjAzLCAwLjAyLCAwLjAxXToKKyAgICAgICAgICAgIHogPSBzY2hlZHVsZXIuZW50ZXIoeCwgMSwgZnVuLCAoeCwpKQorICAgICAgICBzY2hlZHVsZXIucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsLCBbMC4wMSwgMC4wMiwgMC4wMywgMC4wNCwgMC4wNV0pCisKKyAgICBkZWYgdGVzdF9lbnRlcmFicyhzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZ1biA9IGxhbWJkYSB4OiBsLmFwcGVuZCh4KQorICAgICAgICBzY2hlZHVsZXIgPSBzY2hlZC5zY2hlZHVsZXIodGltZS50aW1lLCB0aW1lLnNsZWVwKQorICAgICAgICBmb3IgeCBpbiBbMC4wNSwgMC4wNCwgMC4wMywgMC4wMiwgMC4wMV06CisgICAgICAgICAgICB6ID0gc2NoZWR1bGVyLmVudGVyYWJzKHgsIDEsIGZ1biwgKHgsKSkKKyAgICAgICAgc2NoZWR1bGVyLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgWzAuMDEsIDAuMDIsIDAuMDMsIDAuMDQsIDAuMDVdKQorCisgICAgZGVmIHRlc3RfcHJpb3JpdHkoc2VsZik6CisgICAgICAgIGwgPSBbXQorICAgICAgICBmdW4gPSBsYW1iZGEgeDogbC5hcHBlbmQoeCkKKyAgICAgICAgc2NoZWR1bGVyID0gc2NoZWQuc2NoZWR1bGVyKHRpbWUudGltZSwgdGltZS5zbGVlcCkKKyAgICAgICAgZm9yIHByaW9yaXR5IGluIFsxLCAyLCAzLCA0LCA1XToKKyAgICAgICAgICAgIHogPSBzY2hlZHVsZXIuZW50ZXIoMC4wMSwgcHJpb3JpdHksIGZ1biwgKHByaW9yaXR5LCkpCisgICAgICAgIHNjaGVkdWxlci5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFsxLCAyLCAzLCA0LCA1XSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGZ1biA9IGxhbWJkYSB4OiBsLmFwcGVuZCh4KQorICAgICAgICBzY2hlZHVsZXIgPSBzY2hlZC5zY2hlZHVsZXIodGltZS50aW1lLCB0aW1lLnNsZWVwKQorICAgICAgICBldmVudDEgPSBzY2hlZHVsZXIuZW50ZXIoMC4wMSwgMSwgZnVuLCAoMC4wMSwpKQorICAgICAgICBldmVudDIgPSBzY2hlZHVsZXIuZW50ZXIoMC4wMiwgMSwgZnVuLCAoMC4wMiwpKQorICAgICAgICBldmVudDMgPSBzY2hlZHVsZXIuZW50ZXIoMC4wMywgMSwgZnVuLCAoMC4wMywpKQorICAgICAgICBldmVudDQgPSBzY2hlZHVsZXIuZW50ZXIoMC4wNCwgMSwgZnVuLCAoMC4wNCwpKQorICAgICAgICBldmVudDUgPSBzY2hlZHVsZXIuZW50ZXIoMC4wNSwgMSwgZnVuLCAoMC4wNSwpKQorICAgICAgICBzY2hlZHVsZXIuY2FuY2VsKGV2ZW50MSkKKyAgICAgICAgc2NoZWR1bGVyLmNhbmNlbChldmVudDUpCisgICAgICAgIHNjaGVkdWxlci5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFswLjAyLCAwLjAzLCAwLjA0XSkKKworICAgIGRlZiB0ZXN0X2VtcHR5KHNlbGYpOgorICAgICAgICBsID0gW10KKyAgICAgICAgZnVuID0gbGFtYmRhIHg6IGwuYXBwZW5kKHgpCisgICAgICAgIHNjaGVkdWxlciA9IHNjaGVkLnNjaGVkdWxlcih0aW1lLnRpbWUsIHRpbWUuc2xlZXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY2hlZHVsZXIuZW1wdHkoKSkKKyAgICAgICAgZm9yIHggaW4gWzAuMDUsIDAuMDQsIDAuMDMsIDAuMDIsIDAuMDFdOgorICAgICAgICAgICAgeiA9IHNjaGVkdWxlci5lbnRlcmFicyh4LCAxLCBmdW4sICh4LCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NoZWR1bGVyLmVtcHR5KCkpCisgICAgICAgIHNjaGVkdWxlci5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NoZWR1bGVyLmVtcHR5KCkpCisKKyAgICBkZWYgdGVzdF9xdWV1ZShzZWxmKToKKyAgICAgICAgbCA9IFtdCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIGZ1biA9IGxhbWJkYSB4OiBsLmFwcGVuZCh4KQorICAgICAgICBzY2hlZHVsZXIgPSBzY2hlZC5zY2hlZHVsZXIodGltZS50aW1lLCB0aW1lLnNsZWVwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaGVkdWxlci5fcXVldWUsIFtdKQorICAgICAgICBmb3IgeCBpbiBbMC4wNSwgMC4wNCwgMC4wMywgMC4wMiwgMC4wMV06CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKHNjaGVkdWxlci5lbnRlcmFicyh4LCAxLCBmdW4sICh4LCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjaGVkdWxlci5fcXVldWUuc29ydCgpLCBldmVudHMuc29ydCgpKQorICAgICAgICBzY2hlZHVsZXIucnVuKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2hlZHVsZXIuX3F1ZXVlLCBbXSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CmluZGV4IGZiOTdmMWIuLmZiYzg3YWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zY29wZS5weQpAQCAtMSw5ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3N5bnRheF9lcnJvciwgcnVuX3VuaXR0ZXN0CiAKLWltcG9ydCB3YXJuaW5ncwotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIHIiaW1wb3J0IFwqIiwgU3ludGF4V2FybmluZywgIjx0ZXN0IHN0cmluZz4iKQotd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsIHIiaW1wb3J0IFwqIiwgU3ludGF4V2FybmluZywgIjxzdHJpbmc+IikKIAogY2xhc3MgU2NvcGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE5NSw0NCArMTkyLDM3IEBACiAKICAgICBkZWYgdGVzdFVub3B0aW1pemVkTmFtZXNwYWNlcyhzZWxmKToKIAotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAotZGVmIHVub3B0aW1pemVkX2NsYXNoMShzdHJpcCk6Ci0gICAgZGVmIGYocyk6Ci0gICAgICAgIGZyb20gc3lzIGltcG9ydCAqCi0gICAgICAgIHJldHVybiBnZXRyZWZjb3VudChzKSAjIGFtYmlndWl0eTogZnJlZSBvciBsb2NhbAotICAgIHJldHVybiBmCi0iIiIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJpZiAxOgorICAgICAgICAgICAgZGVmIHVub3B0aW1pemVkX2NsYXNoMShzdHJpcCk6CisgICAgICAgICAgICAgICAgZGVmIGYocyk6CisgICAgICAgICAgICAgICAgICAgIGZyb20gc3lzIGltcG9ydCAqCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRyZWZjb3VudChzKSAjIGFtYmlndWl0eTogZnJlZSBvciBsb2NhbAorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICAiIiIpCiAKLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKLWRlZiB1bm9wdGltaXplZF9jbGFzaDIoKToKLSAgICBmcm9tIHN5cyBpbXBvcnQgKgotICAgIGRlZiBmKHMpOgotICAgICAgICByZXR1cm4gZ2V0cmVmY291bnQocykgIyBhbWJpZ3VpdHk6IGdsb2JhbCBvciBsb2NhbAotICAgIHJldHVybiBmCi0iIiIpCisgICAgICAgIGNoZWNrX3N5bnRheF9lcnJvcihzZWxmLCAiIiJpZiAxOgorICAgICAgICAgICAgZGVmIHVub3B0aW1pemVkX2NsYXNoMigpOgorICAgICAgICAgICAgICAgIGZyb20gc3lzIGltcG9ydCAqCisgICAgICAgICAgICAgICAgZGVmIGYocyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRyZWZjb3VudChzKSAjIGFtYmlndWl0eTogZ2xvYmFsIG9yIGxvY2FsCisgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgICIiIikKIAotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAotZGVmIHVub3B0aW1pemVkX2NsYXNoMigpOgotICAgIGZyb20gc3lzIGltcG9ydCAqCi0gICAgZGVmIGcoKToKLSAgICAgICAgZGVmIGYocyk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0cmVmY291bnQocykgIyBhbWJpZ3VpdHk6IGdsb2JhbCBvciBsb2NhbAotICAgICAgICByZXR1cm4gZgotIiIiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiaWYgMToKKyAgICAgICAgICAgIGRlZiB1bm9wdGltaXplZF9jbGFzaDIoKToKKyAgICAgICAgICAgICAgICBmcm9tIHN5cyBpbXBvcnQgKgorICAgICAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBmKHMpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHJlZmNvdW50KHMpICMgYW1iaWd1aXR5OiBnbG9iYWwgb3IgbG9jYWwKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgICAgICIiIikKIAotICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiXAotZGVmIGYoeCk6Ci0gICAgZGVmIGcoKToKLSAgICAgICAgcmV0dXJuIHgKLSAgICBkZWwgeCAjIGNhbid0IGRlbCBuYW1lCi0iIiIpCi0KLSAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICIiIlwKLWRlZiBmKCk6Ci0gICAgZGVmIGcoKToKLSAgICAgICAgZnJvbSBzeXMgaW1wb3J0ICoKLSAgICAgICAgcmV0dXJuIGdldHJlZmNvdW50ICMgZ2xvYmFsIG9yIGxvY2FsPwotIiIiKQorICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgIiIiaWYgMToKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBzeXMgaW1wb3J0ICoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHJlZmNvdW50ICMgZ2xvYmFsIG9yIGxvY2FsPworICAgICAgICAgICAgIiIiKQogCiAgICAgZGVmIHRlc3RMYW1iZGFzKHNlbGYpOgogCkBAIC0yNzUsMTggKzI2NSw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmJvdW5kTG9jYWxFcnJvciwgZXJyb3JJbk91dGVyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IsIGVycm9ySW5Jbm5lcikKIAorICAgIGRlZiB0ZXN0VW5ib3VuZExvY2FsX0FmdGVyRGVsKHNlbGYpOgorICAgICAgICAjICM0NjE3OiBJdCBpcyBub3cgbGVnYWwgdG8gZGVsZXRlIGEgY2VsbCB2YXJpYWJsZS4KKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBtdXN0IG9idmlvdXNseSBjb21waWxlLAorICAgICAgICAjIGFuZCBnaXZlIHRoZSBjb3JyZWN0IGVycm9yIHdoZW4gYWNjZXNzaW5nIHRoZSBkZWxldGVkIG5hbWUuCisgICAgICAgIGRlZiBlcnJvckluT3V0ZXIoKToKKyAgICAgICAgICAgIHkgPSAxCisgICAgICAgICAgICBkZWwgeQorICAgICAgICAgICAgcHJpbnQoeSkKKyAgICAgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgICAgIHJldHVybiB5CisKKyAgICAgICAgZGVmIGVycm9ySW5Jbm5lcigpOgorICAgICAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHkKKyAgICAgICAgICAgIHkgPSAxCisgICAgICAgICAgICBkZWwgeQorICAgICAgICAgICAgaW5uZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuYm91bmRMb2NhbEVycm9yLCBlcnJvckluT3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvciwgZXJyb3JJbklubmVyKQorCisgICAgZGVmIHRlc3RVbmJvdW5kTG9jYWxfQXVnQXNzaWduKHNlbGYpOgogICAgICAgICAjIHRlc3QgZm9yIGJ1ZyAjMTUwMTkzNDogaW5jb3JyZWN0IExPQUQvU1RPUkVfR0xPQkFMIGdlbmVyYXRpb24KLSAgICAgICAgZXhlYygiIiIKLWdsb2JhbF94ID0gMQotZGVmIGYoKToKLSAgICBnbG9iYWxfeCArPSAxCi10cnk6Ci0gICAgZigpCi1leGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBmYWlsKCdzY29wZSBvZiBnbG9iYWxfeCBub3QgY29ycmVjdGx5IGRldGVybWluZWQnKQotIiIiLCB7J2ZhaWwnOiBzZWxmLmZhaWx9KQorICAgICAgICBleGVjKCIiImlmIDE6CisgICAgICAgICAgICBnbG9iYWxfeCA9IDEKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgZ2xvYmFsX3ggKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgZXhjZXB0IFVuYm91bmRMb2NhbEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgnc2NvcGUgb2YgZ2xvYmFsX3ggbm90IGNvcnJlY3RseSBkZXRlcm1pbmVkJykKKyAgICAgICAgICAgICIiIiwgeydmYWlsJzogc2VsZi5mYWlsfSkKIAogICAgIGRlZiB0ZXN0Q29tcGxleERlZmluaXRpb25zKHNlbGYpOgogCkBAIC0zMDUsODggKzMxNyw4OCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ha2VSZXR1cm5lcjIoYT0xMSkoKVsnYSddLCAxMSkKIAogICAgIGRlZiB0ZXN0U2NvcGVPZkdsb2JhbFN0bXQoc2VsZik6Ci0jIEV4YW1wbGVzIHBvc3RlZCBieSBTYW11ZWxlIFBlZHJvbmkgdG8gcHl0aG9uLWRldiBvbiAzLzEvMjAwMQorICAgICAgICAjIEV4YW1wbGVzIHBvc3RlZCBieSBTYW11ZWxlIFBlZHJvbmkgdG8gcHl0aG9uLWRldiBvbiAzLzEvMjAwMQogCi0gICAgICAgIGV4ZWMoIiIiXAotIyBJCi14ID0gNwotZGVmIGYoKToKLSAgICB4ID0gMQotICAgIGRlZiBnKCk6Ci0gICAgICAgIGdsb2JhbCB4Ci0gICAgICAgIGRlZiBpKCk6Ci0gICAgICAgICAgICBkZWYgaCgpOgotICAgICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgICAgICByZXR1cm4gaCgpCi0gICAgICAgIHJldHVybiBpKCkKLSAgICByZXR1cm4gZygpCi1zZWxmLmFzc2VydEVxdWFsKGYoKSwgNykKLXNlbGYuYXNzZXJ0RXF1YWwoeCwgNykKKyAgICAgICAgZXhlYygiIiJpZiAxOgorICAgICAgICAgICAgIyBJCisgICAgICAgICAgICB4ID0gNworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICB4ID0gMQorICAgICAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgICAgIGdsb2JhbCB4CisgICAgICAgICAgICAgICAgICAgIGRlZiBpKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgNykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNykKIAotIyBJSQoteCA9IDcKLWRlZiBmKCk6Ci0gICAgeCA9IDEKLSAgICBkZWYgZygpOgotICAgICAgICB4ID0gMgotICAgICAgICBkZWYgaSgpOgotICAgICAgICAgICAgZGVmIGgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICAgICAgcmV0dXJuIGgoKQotICAgICAgICByZXR1cm4gaSgpCi0gICAgcmV0dXJuIGcoKQotc2VsZi5hc3NlcnRFcXVhbChmKCksIDIpCi1zZWxmLmFzc2VydEVxdWFsKHgsIDcpCisgICAgICAgICAgICAjIElJCisgICAgICAgICAgICB4ID0gNworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICB4ID0gMQorICAgICAgICAgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICAgICAgICAgIHggPSAyCisgICAgICAgICAgICAgICAgICAgIGRlZiBpKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaCgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNykKIAotIyBJSUkKLXggPSA3Ci1kZWYgZigpOgotICAgIHggPSAxCi0gICAgZGVmIGcoKToKLSAgICAgICAgZ2xvYmFsIHgKLSAgICAgICAgeCA9IDIKLSAgICAgICAgZGVmIGkoKToKLSAgICAgICAgICAgIGRlZiBoKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHgKLSAgICAgICAgICAgIHJldHVybiBoKCkKLSAgICAgICAgcmV0dXJuIGkoKQotICAgIHJldHVybiBnKCkKLXNlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQotc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQorICAgICAgICAgICAgIyBJSUkKKyAgICAgICAgICAgIHggPSA3CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHggPSAxCisgICAgICAgICAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgICAgICAgICAgICAgeCA9IDIKKyAgICAgICAgICAgICAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoKQorICAgICAgICAgICAgICAgIHJldHVybiBnKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQogCi0jIElWCi14ID0gNwotZGVmIGYoKToKLSAgICB4ID0gMwotICAgIGRlZiBnKCk6Ci0gICAgICAgIGdsb2JhbCB4Ci0gICAgICAgIHggPSAyCi0gICAgICAgIGRlZiBpKCk6Ci0gICAgICAgICAgICBkZWYgaCgpOgotICAgICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgICAgICByZXR1cm4gaCgpCi0gICAgICAgIHJldHVybiBpKCkKLSAgICByZXR1cm4gZygpCi1zZWxmLmFzc2VydEVxdWFsKGYoKSwgMikKLXNlbGYuYXNzZXJ0RXF1YWwoeCwgMikKKyAgICAgICAgICAgICMgSVYKKyAgICAgICAgICAgIHggPSA3CisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIHggPSAzCisgICAgICAgICAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIHgKKyAgICAgICAgICAgICAgICAgICAgeCA9IDIKKyAgICAgICAgICAgICAgICAgICAgZGVmIGkoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoKCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkoKQorICAgICAgICAgICAgICAgIHJldHVybiBnKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAyKQogCi0jIFhYWCB3aGF0IGFib3V0IGdsb2JhbCBzdGF0ZW1lbnRzIGluIGNsYXNzIGJsb2Nrcz8KLSMgZG8gdGhleSBhZmZlY3QgbWV0aG9kcz8KKyAgICAgICAgICAgICMgWFhYIHdoYXQgYWJvdXQgZ2xvYmFsIHN0YXRlbWVudHMgaW4gY2xhc3MgYmxvY2tzPworICAgICAgICAgICAgIyBkbyB0aGV5IGFmZmVjdCBtZXRob2RzPwogCi14ID0gMTIKLWNsYXNzIEdsb2JhbDoKLSAgICBnbG9iYWwgeAotICAgIHggPSAxMwotICAgIGRlZiBzZXQoc2VsZiwgdmFsKToKLSAgICAgICAgeCA9IHZhbAotICAgIGRlZiBnZXQoc2VsZik6Ci0gICAgICAgIHJldHVybiB4CisgICAgICAgICAgICB4ID0gMTIKKyAgICAgICAgICAgIGNsYXNzIEdsb2JhbDoKKyAgICAgICAgICAgICAgICBnbG9iYWwgeAorICAgICAgICAgICAgICAgIHggPSAxMworICAgICAgICAgICAgICAgIGRlZiBzZXQoc2VsZiwgdmFsKToKKyAgICAgICAgICAgICAgICAgICAgeCA9IHZhbAorICAgICAgICAgICAgICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4CiAKLWcgPSBHbG9iYWwoKQotc2VsZi5hc3NlcnRFcXVhbChnLmdldCgpLCAxMykKLWcuc2V0KDE1KQotc2VsZi5hc3NlcnRFcXVhbChnLmdldCgpLCAxMykKLSIiIikKKyAgICAgICAgICAgIGcgPSBHbG9iYWwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLmdldCgpLCAxMykKKyAgICAgICAgICAgIGcuc2V0KDE1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLmdldCgpLCAxMykKKyAgICAgICAgICAgICIiIikKIAogICAgIGRlZiB0ZXN0TGVha3Moc2VsZik6CiAKQEAgLTQxMiwyOCArNDI0LDI4IEBACiAKICAgICBkZWYgdGVzdENsYXNzQW5kR2xvYmFsKHNlbGYpOgogCi0gICAgICAgIGV4ZWMoIiIiXAotZGVmIHRlc3QoeCk6Ci0gICAgY2xhc3MgRm9vOgotICAgICAgICBnbG9iYWwgeAotICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgeSk6Ci0gICAgICAgICAgICByZXR1cm4geCArIHkKLSAgICByZXR1cm4gRm9vKCkKKyAgICAgICAgZXhlYygiIiJpZiAxOgorICAgICAgICAgICAgZGVmIHRlc3QoeCk6CisgICAgICAgICAgICAgICAgY2xhc3MgRm9vOgorICAgICAgICAgICAgICAgICAgICBnbG9iYWwgeAorICAgICAgICAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgeSk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCArIHkKKyAgICAgICAgICAgICAgICByZXR1cm4gRm9vKCkKIAoteCA9IDAKLXNlbGYuYXNzZXJ0RXF1YWwodGVzdCg2KSgyKSwgOCkKLXggPSAtMQotc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KDMpKDIpLCA1KQorICAgICAgICAgICAgeCA9IDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdCg2KSgyKSwgOCkKKyAgICAgICAgICAgIHggPSAtMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0KDMpKDIpLCA1KQogCi1sb29rZWRfdXBfYnlfbG9hZF9uYW1lID0gRmFsc2UKLWNsYXNzIFg6Ci0gICAgIyBJbXBsaWNpdCBnbG9iYWxzIGluc2lkZSBjbGFzc2VzIGFyZSBiZSBsb29rZWQgdXAgYnkgTE9BRF9OQU1FLCBub3QKLSAgICAjIExPQURfR0xPQkFMLgotICAgIGxvY2FscygpWydsb29rZWRfdXBfYnlfbG9hZF9uYW1lJ10gPSBUcnVlCi0gICAgcGFzc2VkID0gbG9va2VkX3VwX2J5X2xvYWRfbmFtZQorICAgICAgICAgICAgbG9va2VkX3VwX2J5X2xvYWRfbmFtZSA9IEZhbHNlCisgICAgICAgICAgICBjbGFzcyBYOgorICAgICAgICAgICAgICAgICMgSW1wbGljaXQgZ2xvYmFscyBpbnNpZGUgY2xhc3NlcyBhcmUgYmUgbG9va2VkIHVwIGJ5IExPQURfTkFNRSwgbm90CisgICAgICAgICAgICAgICAgIyBMT0FEX0dMT0JBTC4KKyAgICAgICAgICAgICAgICBsb2NhbHMoKVsnbG9va2VkX3VwX2J5X2xvYWRfbmFtZSddID0gVHJ1ZQorICAgICAgICAgICAgICAgIHBhc3NlZCA9IGxvb2tlZF91cF9ieV9sb2FkX25hbWUKIAotc2VsZi5hc3NlcnRUcnVlKFgucGFzc2VkKQotIiIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFgucGFzc2VkKQorICAgICAgICAgICAgIiIiKQogCiAgICAgZGVmIHRlc3RMb2NhbHNGdW5jdGlvbihzZWxmKToKIApAQCAtNDQ3LDcgKzQ1OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gZwogCiAgICAgICAgIGQgPSBmKDIpKDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaCcgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignaCcsIGQpCiAgICAgICAgIGRlbCBkWydoJ10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCB7J3gnOiAyLCAneSc6IDcsICd3JzogNn0pCiAKQEAgLTQ4MSw4ICs0OTMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIEMKIAogICAgICAgICB2YXJuYW1lcyA9IGYoMSkuegotICAgICAgICBzZWxmLmFzc2VydFRydWUoIngiIG5vdCBpbiB2YXJuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ5IiBpbiB2YXJuYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigieCIsIHZhcm5hbWVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ5IiwgdmFybmFtZXMpCiAKICAgICBkZWYgdGVzdExvY2Fsc0NsYXNzX1dpdGhUcmFjZShzZWxmKToKICAgICAgICAgIyBJc3N1ZTIzNzI4OiBhZnRlciB0aGUgdHJhY2UgZnVuY3Rpb24gcmV0dXJucywgdGhlIGxvY2FscygpCkBAIC02MjksMjIgKzY0MSwyMiBAQAogICAgICAgICAjIGZ1bmN0aW9uIHRvIG90aGVyIG5lc3RlZCBmdW5jdGlvbnMgaW4gdGhlIHNhbWUgYmxvY2suCiAgICAgICAgICMgVGhpcyB0ZXN0IHZlcmlmaWVzIHRoYXQgYSBnbG9iYWwgc3RhdGVtZW50IGluIHRoZSBmaXJzdAogICAgICAgICAjIGZ1bmN0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgc2Vjb25kIGZ1bmN0aW9uLgotICAgICAgICBDT0RFID0gIiIiZGVmIGYoKToKLSAgICB5ID0gMQotICAgIGRlZiBnKCk6Ci0gICAgICAgIGdsb2JhbCB5Ci0gICAgICAgIHJldHVybiB5Ci0gICAgZGVmIGgoKToKLSAgICAgICAgcmV0dXJuIHkgKyAxCi0gICAgcmV0dXJuIGcsIGgKLXkgPSA5Ci1nLCBoID0gZigpCi1yZXN1bHQ5ID0gZygpCi1yZXN1bHQyID0gaCgpCi0iIiIKICAgICAgICAgbG9jYWxfbnMgPSB7fQogICAgICAgICBnbG9iYWxfbnMgPSB7fQotICAgICAgICBleGVjKENPREUsIGxvY2FsX25zLCBnbG9iYWxfbnMpCisgICAgICAgIGV4ZWMoIiIiaWYgMToKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgeSA9IDEKKyAgICAgICAgICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgICAgICAgICBnbG9iYWwgeQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geQorICAgICAgICAgICAgICAgIGRlZiBoKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB5ICsgMQorICAgICAgICAgICAgICAgIHJldHVybiBnLCBoCisgICAgICAgICAgICB5ID0gOQorICAgICAgICAgICAgZywgaCA9IGYoKQorICAgICAgICAgICAgcmVzdWx0OSA9IGcoKQorICAgICAgICAgICAgcmVzdWx0MiA9IGgoKQorICAgICAgICAgICAgIiIiLCBsb2NhbF9ucywgZ2xvYmFsX25zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGdsb2JhbF9uc1sicmVzdWx0MiJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDksIGdsb2JhbF9uc1sicmVzdWx0OSJdKQogCkBAIC02NjAsNyArNjcyLDcgQEAKIAogICAgICAgICBjID0gZigwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZ2V0KCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgieCIgbm90IGluIGMuX19jbGFzc19fLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJ4IiwgYy5fX2NsYXNzX18uX19kaWN0X18pCiAKIAogICAgIGRlZiB0ZXN0Tm9uTG9jYWxHZW5lcmF0b3Ioc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IDg4MTNjNmUuLmZlOTJmNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC00LDcgKzQsNyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKLUB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtWzozXSBpbiAoJ3dpbicsICdtYWMnLCAnb3MyJywgJ3Jpc2NvcycpLAorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicsICdyaXNjb3MnKSwKICAgICAgICAgICAgICAgICAgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIikKIGNsYXNzIFNlbGVjdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zZXQucHkgYi9MaWIvdGVzdC90ZXN0X3NldC5weQppbmRleCA5OWQ1YzcwLi4wN2JmZTA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NldC5weQpAQCAtNSw3ICs1LDYgQEAKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IGNvcHkKIGltcG9ydCBwaWNrbGUKLWltcG9ydCBvcwogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZSwgc2h1ZmZsZQogaW1wb3J0IHN5cwogaW1wb3J0IHdhcm5pbmdzCkBAIC02Niw3ICs2NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMgaW4gc2VsZi5zLCBjIGluIHNlbGYuZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuX19jb250YWluc19fLCBbW11dKQogICAgICAgICBzID0gc2VsZi50aGV0eXBlKFtmcm96ZW5zZXQoc2VsZi5sZXR0ZXJzKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnRoZXR5cGUoc2VsZi5sZXR0ZXJzKSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYudGhldHlwZShzZWxmLmxldHRlcnMpLCBzKQogCiAgICAgZGVmIHRlc3RfdW5pb24oc2VsZik6CiAgICAgICAgIHUgPSBzZWxmLnMudW5pb24oc2VsZi5vdGhlcndvcmQpCkBAIC0yNzAsNyArMjY5LDcgQEAKICAgICAgICAgcz1IKCkKICAgICAgICAgZj1zZXQoKQogICAgICAgICBmLmFkZChzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocyBpbiBmKQorICAgICAgICBzZWxmLmFzc2VydEluKHMsIGYpCiAgICAgICAgIGYucmVtb3ZlKHMpCiAgICAgICAgIGYuYWRkKHMpCiAgICAgICAgIGYuZGlzY2FyZChzKQpAQCAtMzgwLDcgKzM3OSw3IEBACiAKICAgICBkZWYgdGVzdF9hZGQoc2VsZik6CiAgICAgICAgIHNlbGYucy5hZGQoJ1EnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1EnIGluIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignUScsIHNlbGYucykKICAgICAgICAgZHVwID0gc2VsZi5zLmNvcHkoKQogICAgICAgICBzZWxmLnMuYWRkKCdRJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCkKQEAgLTM4OCwxMyArMzg3LDEzIEBACiAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CiAgICAgICAgIHNlbGYucy5yZW1vdmUoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCAnUScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCiAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhldHlwZShzZWxmLndvcmQpIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHMucmVtb3ZlKHNlbGYudGhldHlwZShzZWxmLndvcmQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50aGV0eXBlKHNlbGYud29yZCkgbm90IGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucmVtb3ZlLCBzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKIAogICAgIGRlZiB0ZXN0X3JlbW92ZV9rZXllcnJvcl91bnBhY2tpbmcoc2VsZik6CkBAIC00MjEsMjYgKzQyMCwyNiBAQAogCiAgICAgZGVmIHRlc3RfZGlzY2FyZChzZWxmKToKICAgICAgICAgc2VsZi5zLmRpc2NhcmQoJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiBzZWxmLnMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCBzZWxmLnMpCiAgICAgICAgIHNlbGYucy5kaXNjYXJkKCdRJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlzY2FyZCwgW10pCiAgICAgICAgIHMgPSBzZWxmLnRoZXR5cGUoW2Zyb3plbnNldChzZWxmLndvcmQpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhldHlwZShzZWxmLndvcmQpIGluIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi50aGV0eXBlKHNlbGYud29yZCksIHMpCiAgICAgICAgIHMuZGlzY2FyZChzZWxmLnRoZXR5cGUoc2VsZi53b3JkKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudGhldHlwZShzZWxmLndvcmQpIG5vdCBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYudGhldHlwZShzZWxmLndvcmQpLCBzKQogICAgICAgICBzLmRpc2NhcmQoc2VsZi50aGV0eXBlKHNlbGYud29yZCkpCiAKICAgICBkZWYgdGVzdF9wb3Aoc2VsZik6CiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLnMpKToKICAgICAgICAgICAgIGVsZW0gPSBzZWxmLnMucG9wKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGVsZW0sIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5wb3ApCiAKICAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CiAgICAgICAgIHJldHZhbCA9IHNlbGYucy51cGRhdGUoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMudXBkYXRlLCBjaGVja19wYXNzX3RocnUoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudXBkYXRlLCBbW11dKQogICAgICAgICBmb3IgcCwgcSBpbiAoKCdjZGMnLCAnYWJjZCcpLCAoJ2VmZ2ZlJywgJ2FiY2VmZycpLCAoJ2NjYicsICdhYmMnKSwgKCdlZicsICdhYmNlZicpKToKQEAgLTQ1OCwxNiArNDU3LDE2IEBACiAgICAgZGVmIHRlc3RfaW9yKHNlbGYpOgogICAgICAgICBzZWxmLnMgfD0gc2V0KHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAKICAgICBkZWYgdGVzdF9pbnRlcnNlY3Rpb25fdXBkYXRlKHNlbGYpOgogICAgICAgICByZXR2YWwgPSBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmLm90aGVyd29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYub3RoZXJ3b3JkIGFuZCBjIGluIHNlbGYud29yZDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFBhc3NUaHJ1LCBzZWxmLnMuaW50ZXJzZWN0aW9uX3VwZGF0ZSwgY2hlY2tfcGFzc190aHJ1KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIFtbXV0pCiAgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdjJyksICgnZWZnZmUnLCAnJyksICgnY2NiJywgJ2JjJyksICgnZWYnLCAnJykpOgpAQCAtNDg1LDE4ICs0ODQsMTggQEAKICAgICAgICAgc2VsZi5zICY9IHNldChzZWxmLm90aGVyd29yZCkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYud29yZCArIHNlbGYub3RoZXJ3b3JkKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5vdGhlcndvcmQgYW5kIGMgaW4gc2VsZi53b3JkOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X2RpZmZlcmVuY2VfdXBkYXRlKHNlbGYpOgogICAgICAgICByZXR2YWwgPSBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgYyBpbiBzZWxmLndvcmQgYW5kIGMgbm90IGluIHNlbGYub3RoZXJ3b3JkOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5kaWZmZXJlbmNlX3VwZGF0ZSwgY2hlY2tfcGFzc190aHJ1KCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlLCBbW11dKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCkBAIC01MjIsMTggKzUyMSwxOCBAQAogICAgICAgICBzZWxmLnMgLT0gc2V0KHNlbGYub3RoZXJ3b3JkKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi53b3JkICsgc2VsZi5vdGhlcndvcmQpOgogICAgICAgICAgICAgaWYgYyBpbiBzZWxmLndvcmQgYW5kIGMgbm90IGluIHNlbGYub3RoZXJ3b3JkOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLm90aGVyd29yZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiAoYyBpbiBzZWxmLndvcmQpIF4gKGMgaW4gc2VsZi5vdGhlcndvcmQpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUGFzc1RocnUsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIGNoZWNrX3Bhc3NfdGhydSgpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCiAgICAgICAgIGZvciBwLCBxIGluICgoJ2NkYycsICdhYmQnKSwgKCdlZmdmZScsICdhYmNlZmcnKSwgKCdjY2InLCAnYScpLCAoJ2VmJywgJ2FiY2VmJykpOgpAQCAtNTQ2LDkgKzU0NSw5IEBACiAgICAgICAgIHNlbGYucyBePSBzZXQoc2VsZi5vdGhlcndvcmQpCiAgICAgICAgIGZvciBjIGluIChzZWxmLndvcmQgKyBzZWxmLm90aGVyd29yZCk6CiAgICAgICAgICAgICBpZiAoYyBpbiBzZWxmLndvcmQpIF4gKGMgaW4gc2VsZi5vdGhlcndvcmQpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Vfb25fc2VsZihzZWxmKToKICAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKQEAgLTYwOCw3ICs2MDcsNyBAQAogICAgICMgQyBBUEkgdGVzdCBvbmx5IGF2YWlsYWJsZSBpbiBhIGRlYnVnIGJ1aWxkCiAgICAgaWYgaGFzYXR0cihzZXQsICJ0ZXN0X2NfYXBpIik6CiAgICAgICAgIGRlZiB0ZXN0X2NfYXBpKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoJ2FiYycpLnRlc3RfY19hcGkoKSwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KCkudGVzdF9jX2FwaSgpLCBUcnVlKQogCiBjbGFzcyBTZXRTdWJjbGFzcyhzZXQpOgogICAgIHBhc3MKQEAgLTgxNSw3ICs4MTQsNyBAQAogCiAgICAgZGVmIHRlc3RfaXRlcmF0aW9uKHNlbGYpOgogICAgICAgICBmb3IgdiBpbiBzZWxmLnNldDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGluIHNlbGYudmFsdWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2LCBzZWxmLnZhbHVlcykKICAgICAgICAgc2V0aXRlciA9IGl0ZXIoc2VsZi5zZXQpCiAgICAgICAgICMgbm90ZTogX19sZW5ndGhfaGludF9fIGlzIGFuIGludGVybmFsIHVuZG9jdW1lbnRlZCBBUEksCiAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwpAQCAtODUwLDEwICs4NDksMTAgQEAKICAgICAgICAgc2VsZi5yZXByICAgPSAiezN9IgogCiAgICAgZGVmIHRlc3RfaW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgzIGluIHNlbGYuc2V0KQorICAgICAgICBzZWxmLmFzc2VydEluKDMsIHNlbGYuc2V0KQogCiAgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoMiBub3QgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtODY3LDEwICs4NjYsMTAgQEAKICAgICAgICAgc2VsZi5yZXByICAgPSAieygwLCAnemVybycpfSIKIAogICAgIGRlZiB0ZXN0X2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoKDAsICJ6ZXJvIikgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKDAsICJ6ZXJvIiksIHNlbGYuc2V0KQogCiAgICAgZGVmIHRlc3Rfbm90X2luKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoOSBub3QgaW4gc2VsZi5zZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oOSwgc2VsZi5zZXQpCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtOTA5LDcgKzkwOCw4IEBACiAKIGNsYXNzIFRlc3RCYXNpY09wc01peGVkU3RyaW5nQnl0ZXMoVGVzdEJhc2ljT3BzKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2FybmluZ19maWx0ZXJzID0gd2FybmluZ3MuZmlsdGVyc1s6XQorICAgICAgICBzZWxmLl93YXJuaW5nX2ZpbHRlcnMgPSBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkKKyAgICAgICAgc2VsZi5fd2FybmluZ19maWx0ZXJzLl9fZW50ZXJfXygpCiAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgQnl0ZXNXYXJuaW5nKQogICAgICAgICBzZWxmLmNhc2UgICA9ICJzdHJpbmcgYW5kIGJ5dGVzIHNldCIKICAgICAgICAgc2VsZi52YWx1ZXMgPSBbImEiLCAiYiIsIGIiYSIsIGIiYiJdCkBAIC05MTksNyArOTE5LDcgQEAKICAgICAgICAgc2VsZi5yZXByICAgPSAieydhJywgYidhJywgJ2InLCBiJ2InfSIKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgd2FybmluZ3MuZmlsdGVycyA9IHNlbGYud2FybmluZ19maWx0ZXJzCisgICAgICAgIHNlbGYuX3dhcm5pbmdfZmlsdGVycy5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQogCiAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTExODcsNyArMTE4Nyw3IEBACiAgICAgICAgICAgICBwb3BwZWRbc2VsZi5zZXQucG9wKCldID0gTm9uZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3BwZWQpLCBsZW4oc2VsZi52YWx1ZXMpKQogICAgICAgICBmb3IgdiBpbiBzZWxmLnZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGluIHBvcHBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odiwgcG9wcGVkKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlX2VtcHR5X3R1cGxlKHNlbGYpOgogICAgICAgICBzZWxmLnNldC51cGRhdGUoKCkpCkBAIC0xNzk0LDcgKzE3OTQsNyBAQAogICAgICAgICAgICAgZWRnZSA9IHZlcnRleCAgICAgICAgICAgICAgICAgICAgICAgIyBDdWJvY3RhaGVkcm9uIHZlcnRpY2VzIGFyZSBlZGdlcyBpbiBDdWJlCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlZGdlKSwgMikgICAgICAjIFR3byBjdWJlIHZlcnRpY2VzIGRlZmluZSBhbiBlZGdlCiAgICAgICAgICAgICBmb3IgY3ViZXZlcnQgaW4gZWRnZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY3ViZXZlcnQgaW4gZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGN1YmV2ZXJ0LCBnKQogCiAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKaW5kZXggMDY2MjA4YS4uM2U3M2Y1MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKQEAgLTEyMiw2ICsxMjIsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZDEpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkMiksIDEpCiAKKyAgICBkZWYgdGVzdF9rZXllbmNvZGluZyhzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGtleSA9ICdQw4PCtnAnCisgICAgICAgICMgdGhlIGRlZmF1bHQga2V5ZW5jb2RpbmcgaXMgdXRmLTgKKyAgICAgICAgc2hlbHZlLlNoZWxmKGQpW2tleV0gPSBbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbihrZXkuZW5jb2RlKCd1dGYtOCcpLCBkKQorICAgICAgICAjIGJ1dCBhIGRpZmZlcmVudCBvbmUgY2FuIGJlIGdpdmVuCisgICAgICAgIHNoZWx2ZS5TaGVsZihkLCBrZXllbmNvZGluZz0nbGF0aW4xJylba2V5XSA9IFsxXQorICAgICAgICBzZWxmLmFzc2VydEluKGtleS5lbmNvZGUoJ2xhdGluMScpLCBkKQorICAgICAgICAjIHdpdGggYWxsIGNvbnNlcXVlbmNlcworICAgICAgICBzID0gc2hlbHZlLlNoZWxmKGQsIGtleWVuY29kaW5nPSdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgcy5fX3NldGl0ZW1fXywga2V5LCBbMV0pCisKICAgICBkZWYgdGVzdF93cml0ZWJhY2tfYWxzb193cml0ZXNfaW1tZWRpYXRlbHkoc2VsZik6CiAgICAgICAgICMgSXNzdWUgNTc1NAogICAgICAgICBkID0ge30KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKaW5kZXggYmVjZDkxYy4uNTI1MmQ0ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaHV0aWwucHkKQEAgLTcsMTEgKzcsOTggQEAKIGltcG9ydCBzdGF0CiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCitpbXBvcnQgZnVuY3Rvb2xzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KK2Zyb20gb3MucGF0aCBpbXBvcnQgc3BsaXRkcml2ZQorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZSwgc3Bhd24KK2Zyb20gc2h1dGlsIGltcG9ydCAoX21ha2VfdGFyYmFsbCwgX21ha2VfemlwZmlsZSwgbWFrZV9hcmNoaXZlLAorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgZ2V0X2FyY2hpdmVfZm9ybWF0cywgRXJyb3IsIHVucGFja19hcmNoaXZlLAorICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCBSZWdpc3RyeUVycm9yLAorICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQsIGdldF91bnBhY2tfZm9ybWF0cykKK2ltcG9ydCB0YXJmaWxlCitpbXBvcnQgd2FybmluZ3MKKworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjaGVja193YXJuaW5ncywgY2FwdHVyZWRfc3Rkb3V0CisKK3RyeToKKyAgICBpbXBvcnQgYnoyCisgICAgQloyX1NVUFBPUlRFRCA9IFRydWUKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBCWjJfU1VQUE9SVEVEID0gRmFsc2UKKwogVEVTVEZOMiA9IFRFU1RGTiArICIyIgogCit0cnk6CisgICAgaW1wb3J0IGdycAorICAgIGltcG9ydCBwd2QKKyAgICBVSURfR0lEX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVUlEX0dJRF9TVVBQT1JUID0gRmFsc2UKKwordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKwordHJ5OgorICAgIGltcG9ydCB6aXBmaWxlCisgICAgWklQX1NVUFBPUlQgPSBUcnVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgWklQX1NVUFBPUlQgPSBmaW5kX2V4ZWN1dGFibGUoJ3ppcCcpCisKK2RlZiBfZmFrZV9yZW5hbWUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAjIFByZXRlbmQgdGhlIGRlc3RpbmF0aW9uIHBhdGggaXMgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbS4KKyAgICByYWlzZSBPU0Vycm9yKCkKKworZGVmIG1vY2tfcmVuYW1lKGZ1bmMpOgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYykKKyAgICBkZWYgd3JhcCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBidWlsdGluX3JlbmFtZSA9IG9zLnJlbmFtZQorICAgICAgICAgICAgb3MucmVuYW1lID0gX2Zha2VfcmVuYW1lCisgICAgICAgICAgICByZXR1cm4gZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW5hbWUgPSBidWlsdGluX3JlbmFtZQorICAgIHJldHVybiB3cmFwCisKIGNsYXNzIFRlc3RTaHV0aWwodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0U2h1dGlsLCBzZWxmKS5zZXRVcCgpCisgICAgICAgIHNlbGYudGVtcGRpcnMgPSBbXQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBlcihUZXN0U2h1dGlsLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgIHdoaWxlIHNlbGYudGVtcGRpcnM6CisgICAgICAgICAgICBkID0gc2VsZi50ZW1wZGlycy5wb3AoKQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkLCBvcy5uYW1lIGluICgnbnQnLCAnY3lnd2luJykpCisKKyAgICBkZWYgd3JpdGVfZmlsZShzZWxmLCBwYXRoLCBjb250ZW50PSd4eHgnKToKKyAgICAgICAgIiIiV3JpdGVzIGEgZmlsZSBpbiB0aGUgZ2l2ZW4gcGF0aC4KKworCisgICAgICAgIHBhdGggY2FuIGJlIGEgc3RyaW5nIG9yIGEgc2VxdWVuY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKHBhdGgsIChsaXN0LCB0dXBsZSkpOgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigqcGF0aCkKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3cnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmLndyaXRlKGNvbnRlbnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBta2R0ZW1wKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSBjbGVhbmVkIHVwLgorCisgICAgICAgIFJldHVybnMgdGhlIHBhdGggb2YgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisgICAgICAgIGQgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi50ZW1wZGlycy5hcHBlbmQoZCkKKyAgICAgICAgcmV0dXJuIGQKKwogICAgIGRlZiB0ZXN0X3JtdHJlZV9lcnJvcnMoc2VsZik6CiAgICAgICAgICMgZmlsZW5hbWUgaXMgZ3VhcmFudGVlZCBub3QgdG8gZXhpc3QKICAgICAgICAgZmlsZW5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQpAQCAtNzgsMTEgKzE2NSwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzaHV0aWwucm10cmVlLCBwYXRoKQogICAgICAgICBvcy5yZW1vdmUocGF0aCkKIAorICAgIGRlZiBfd3JpdGVfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKKyAgICAgICAgZiA9IG9wZW4ocGF0aCwgInciKQorICAgICAgICBmLndyaXRlKGRhdGEpCisgICAgICAgIGYuY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfY29weXRyZWVfc2ltcGxlKHNlbGYpOgotICAgICAgICBkZWYgd3JpdGVfZGF0YShwYXRoLCBkYXRhKToKLSAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICJ3IikKLSAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgICAgIGRlZiByZWFkX2RhdGEocGF0aCk6CiAgICAgICAgICAgICBmID0gb3BlbihwYXRoKQpAQCAtOTIsMTEgKzE4MCw5IEBACiAKICAgICAgICAgc3JjX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQogICAgICAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uJykKLQotICAgICAgICB3cml0ZV9kYXRhKG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdC50eHQnKSwgJzEyMycpCi0KKyAgICAgICAgc2VsZi5fd3JpdGVfZGF0YShvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3QudHh0JyksICcxMjMnKQogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJykpCi0gICAgICAgIHdyaXRlX2RhdGEob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKKyAgICAgICAgc2VsZi5fd3JpdGVfZGF0YShvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJywgJ3Rlc3QudHh0JyksICc0NTYnKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyKQpAQCAtMTI1LDExICsyMTEsNiBAQAogCiAgICAgZGVmIHRlc3RfY29weXRyZWVfd2l0aF9leGNsdWRlKHNlbGYpOgogCi0gICAgICAgIGRlZiB3cml0ZV9kYXRhKHBhdGgsIGRhdGEpOgotICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgInciKQotICAgICAgICAgICAgZi53cml0ZShkYXRhKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0KICAgICAgICAgZGVmIHJlYWRfZGF0YShwYXRoKToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgpCiAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKQEAgLTE0MiwxNiArMjIzLDE4IEBACiAgICAgICAgIHNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZHN0X2RpciA9IGpvaW4odGVtcGZpbGUubWtkdGVtcCgpLCAnZGVzdGluYXRpb24nKQotICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0LnR4dCcpLCAnMTIzJykKLSAgICAgICAgICAgIHdyaXRlX2RhdGEoam9pbihzcmNfZGlyLCAndGVzdC50bXAnKSwgJzEyMycpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3QudHh0JyksICcxMjMnKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0LnRtcCcpLCAnMTIzJykKICAgICAgICAgICAgIG9zLm1rZGlyKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJykpCi0gICAgICAgICAgICB3cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyJywgJ3Rlc3QudHh0JyksICc0NTYnKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcicsICd0ZXN0LnR4dCcpLCAnNDU2JykKICAgICAgICAgICAgIG9zLm1rZGlyKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicpKQotICAgICAgICAgICAgd3JpdGVfZGF0YShqb2luKHNyY19kaXIsICd0ZXN0X2RpcjInLCAndGVzdC50eHQnKSwgJzQ1NicpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICd0ZXN0LnR4dCcpLCAnNDU2JykKICAgICAgICAgICAgIG9zLm1rZGlyKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXInKSkKICAgICAgICAgICAgIG9zLm1rZGlyKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXIyJykpCi0gICAgICAgICAgICB3cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXInLCAndGVzdC50eHQnKSwgJzQ1NicpCi0gICAgICAgICAgICB3cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXIyJywgJ3Rlc3QucHknKSwgJzQ1NicpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXInLCAndGVzdC50eHQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQ1NicpCisgICAgICAgICAgICBzZWxmLl93cml0ZV9kYXRhKGpvaW4oc3JjX2RpciwgJ3Rlc3RfZGlyMicsICdzdWJkaXIyJywgJ3Rlc3QucHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzQ1NicpCiAKIAogICAgICAgICAgICAgIyB0ZXN0aW5nIGdsb2ItbGlrZSBwYXR0ZXJucwpAQCAtMjA0LDQ4ICsyODcsNTggQEAKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc3JjX2RpcikKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5kaXJuYW1lKGRzdF9kaXIpKQogCi0gICAgaWYgaGFzYXR0cihvcywgInN5bWxpbmsiKToKLSAgICAgICAgZGVmIHRlc3RfZG9udF9jb3B5X2ZpbGVfb250b19saW5rX3RvX2l0c2VsZihzZWxmKToKLSAgICAgICAgICAgICMgYnVnIDg1MTEyMy4KLSAgICAgICAgICAgIG9zLm1rZGlyKFRFU1RGTikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnbGluaycpLCAncmVxdWlyZXMgb3MubGluaycpCisgICAgZGVmIHRlc3RfZG9udF9jb3B5X2ZpbGVfb250b19saW5rX3RvX2l0c2VsZihzZWxmKToKKyAgICAgICAgIyBUZW1wb3JhcmlseSBkaXNhYmxlIHRlc3Qgb24gV2luZG93cy4KKyAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICMgYnVnIDg1MTEyMy4KKyAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnY2hlZXNlJykKKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3Nob3AnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnY2hlZGRhcicpCisgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKKyAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X2RvbnRfY29weV9maWxlX29udG9fc3ltbGlua190b19pdHNlbGYoc2VsZik6CisgICAgICAgICMgYnVnIDg1MTEyMy4KKyAgICAgICAgb3MubWtkaXIoVEVTVEZOKQorICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4oVEVTVEZOLCAnY2hlZXNlJykKKyAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3Nob3AnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgnY2hlZGRhcicpCisgICAgICAgICAgICAjIFVzaW5nIGBzcmNgIGhlcmUgd291bGQgbWVhbiB3ZSBlbmQgdXAgd2l0aCBhIHN5bWxpbmsgcG9pbnRpbmcKKyAgICAgICAgICAgICMgdG8gVEVTVEZOL1RFU1RGTi9jaGVlc2UsIHdoaWxlIGl0IHNob3VsZCBwb2ludCBhdAorICAgICAgICAgICAgIyBURVNURk4vY2hlZXNlLgorICAgICAgICAgICAgb3Muc3ltbGluaygnY2hlZXNlJywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICdjaGVkZGFyJykKKyAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3JtdHJlZV9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIGJ1ZyAxNjY5LgorICAgICAgICBvcy5ta2RpcihURVNURk4pCisgICAgICAgIHRyeToKICAgICAgICAgICAgIHNyYyA9IG9zLnBhdGguam9pbihURVNURk4sICdjaGVlc2UnKQogICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3Nob3AnKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGYgPSBvcGVuKHNyYywgJ3cnKQotICAgICAgICAgICAgICAgIGYud3JpdGUoJ2NoZWRkYXInKQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotCi0gICAgICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCi0gICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNyYywgJ3InKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKLQotICAgICAgICAgICAgICAgICMgVXNpbmcgYHNyY2AgaGVyZSB3b3VsZCBtZWFuIHdlIGVuZCB1cCB3aXRoIGEgc3ltbGluayBwb2ludGluZwotICAgICAgICAgICAgICAgICMgdG8gVEVTVEZOL1RFU1RGTi9jaGVlc2UsIHdoaWxlIGl0IHNob3VsZCBwb2ludCBhdAotICAgICAgICAgICAgICAgICMgVEVTVEZOL2NoZWVzZS4KLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKCdjaGVlc2UnLCBkc3QpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQotICAgICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBkZWYgdGVzdF9ybXRyZWVfb25fc3ltbGluayhzZWxmKToKLSAgICAgICAgICAgICMgYnVnIDE2NjkuCi0gICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3JjID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ2NoZWVzZScpCi0gICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3Nob3AnKQotICAgICAgICAgICAgICAgIG9zLm1rZGlyKHNyYykKLSAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNodXRpbC5ybXRyZWUsIGRzdCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4sIGlnbm9yZV9lcnJvcnM9VHJ1ZSkKKyAgICAgICAgICAgIG9zLm1rZGlyKHNyYykKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzaHV0aWwucm10cmVlLCBkc3QpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQogCiAgICAgaWYgaGFzYXR0cihvcywgIm1rZmlmbyIpOgogICAgICAgICAjIElzc3VlICMzMDAyOiBjb3B5ZmlsZSBhbmQgY29weXRyZWUgYmxvY2sgaW5kZWZpbml0ZWx5IG9uIG5hbWVkIHBpcGVzCkBAIC0yNTksNiArMzUyLDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKIAorICAgICAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCiAgICAgICAgIGRlZiB0ZXN0X2NvcHl0cmVlX25hbWVkX3BpcGUoc2VsZik6CiAgICAgICAgICAgICBvcy5ta2RpcihURVNURk4pCiAgICAgICAgICAgICB0cnk6CkBAIC0yNzksNiArMzczLDM2NyBAQAogICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yLCBpZ25vcmVfZXJyb3JzPVRydWUpCiAKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV9zcGVjaWFsX2Z1bmMoc2VsZik6CisKKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGRzdF9kaXIgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdkZXN0aW5hdGlvbicpCisgICAgICAgIHNlbGYuX3dyaXRlX2RhdGEob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0LnR4dCcpLCAnMTIzJykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicpKQorICAgICAgICBzZWxmLl93cml0ZV9kYXRhKG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdF9kaXInLCAndGVzdC50eHQnKSwgJzQ1NicpCisKKyAgICAgICAgY29waWVkID0gW10KKyAgICAgICAgZGVmIF9jb3B5KHNyYywgZHN0KToKKyAgICAgICAgICAgIGNvcGllZC5hcHBlbmQoKHNyYywgZHN0KSkKKworICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpciwgY29weV9mdW5jdGlvbj1fY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY29waWVkKSwgMikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV9kYW5nbGluZ19zeW1saW5rcyhzZWxmKToKKworICAgICAgICAjIGEgZGFuZ2xpbmcgc3ltbGluayByYWlzZXMgYW4gZXJyb3IgYXQgdGhlIGVuZAorICAgICAgICBzcmNfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uJykKKyAgICAgICAgb3Muc3ltbGluaygnSURPTlRFWElTVCcsIG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdC50eHQnKSkKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNyY19kaXIsICd0ZXN0X2RpcicpKQorICAgICAgICBzZWxmLl93cml0ZV9kYXRhKG9zLnBhdGguam9pbihzcmNfZGlyLCAndGVzdF9kaXInLCAndGVzdC50eHQnKSwgJzQ1NicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVycm9yLCBzaHV0aWwuY29weXRyZWUsIHNyY19kaXIsIGRzdF9kaXIpCisKKyAgICAgICAgIyBhIGRhbmdsaW5nIHN5bWxpbmsgaXMgaWdub3JlZCB3aXRoIHRoZSBwcm9wZXIgZmxhZworICAgICAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnZGVzdGluYXRpb24yJykKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIsIGlnbm9yZV9kYW5nbGluZ19zeW1saW5rcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCd0ZXN0LnR4dCcsIG9zLmxpc3RkaXIoZHN0X2RpcikpCisKKyAgICAgICAgIyBhIGRhbmdsaW5nIHN5bWxpbmsgaXMgY29waWVkIGlmIHN5bWxpbmtzPVRydWUKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uMycpCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBzeW1saW5rcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEluKCd0ZXN0LnR4dCcsIG9zLmxpc3RkaXIoZHN0X2RpcikpCisKKyAgICBkZWYgX2NvcHlfZmlsZShzZWxmLCBtZXRob2QpOgorICAgICAgICBmbmFtZSA9ICd0ZXN0LnR4dCcKKyAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFt0bXBkaXIsIGZuYW1lXSkKKyAgICAgICAgZmlsZTEgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCBmbmFtZSkKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG1ldGhvZChmaWxlMSwgdG1wZGlyMikKKyAgICAgICAgZmlsZTIgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgZm5hbWUpCisgICAgICAgIHJldHVybiAoZmlsZTEsIGZpbGUyKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2NobW9kJyksICdyZXF1aXJlcyBvcy5jaG1vZCcpCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgY29waWVkIGZpbGUgZXhpc3RzIGFuZCBoYXMgdGhlIHNhbWUgbW9kZSBiaXRzLgorICAgICAgICBmaWxlMSwgZmlsZTIgPSBzZWxmLl9jb3B5X2ZpbGUoc2h1dGlsLmNvcHkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChmaWxlMSkuc3RfbW9kZSwgb3Muc3RhdChmaWxlMikuc3RfbW9kZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG1vZCcpLCAncmVxdWlyZXMgb3MuY2htb2QnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdjaG1vZCcpLCAncmVxdWlyZXMgb3MudXRpbWUnKQorICAgIGRlZiB0ZXN0X2NvcHkyKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSBjb3BpZWQgZmlsZSBleGlzdHMgYW5kIGhhcyB0aGUgc2FtZSBtb2RlIGFuZAorICAgICAgICAjIG1vZGlmaWNhdGlvbiB0aW1lIGJpdHMuCisgICAgICAgIGZpbGUxLCBmaWxlMiA9IHNlbGYuX2NvcHlfZmlsZShzaHV0aWwuY29weTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmaWxlMikpCisgICAgICAgIGZpbGUxX3N0YXQgPSBvcy5zdGF0KGZpbGUxKQorICAgICAgICBmaWxlMl9zdGF0ID0gb3Muc3RhdChmaWxlMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlMV9zdGF0LnN0X21vZGUsIGZpbGUyX3N0YXQuc3RfbW9kZSkKKyAgICAgICAgZm9yIGF0dHIgaW4gJ3N0X2F0aW1lJywgJ3N0X210aW1lJzoKKyAgICAgICAgICAgICMgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBtYXkgYmUgdHJ1bmNhdGVkIGluIHRoZSBuZXcgZmlsZS4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGdldGF0dHIoZmlsZTFfc3RhdCwgYXR0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKGZpbGUyX3N0YXQsIGF0dHIpICsgMSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ2NoZmxhZ3MnKSBhbmQgaGFzYXR0cihmaWxlMV9zdGF0LCAnc3RfZmxhZ3MnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihmaWxlMV9zdGF0LCAnc3RfZmxhZ3MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihmaWxlMl9zdGF0LCAnc3RfZmxhZ3MnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9tYWtlX3RhcmJhbGwoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUxJ10sICd4eHgnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW3RtcGRpciwgJ2ZpbGUyJ10sICd4eHgnKQorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4odG1wZGlyLCAnc3ViJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnc3ViJywgJ2ZpbGUzJ10sICd4eHgnKQorCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICAjIGZvcmNlIHNodXRpbCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeQorICAgICAgICBvcy5ybWRpcih0bXBkaXIyKQorICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKworICAgICAgICAjIHdvcmtpbmcgd2l0aCByZWxhdGl2ZSBwYXRocyB0byBhdm9pZCB0YXIgd2FybmluZ3MKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJywgY29tcHJlc3M9Tm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgZGVmIF90YXJpbmZvKHNlbGYsIHBhdGgpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4ocGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZXMgPSB0YXIuZ2V0bmFtZXMoKQorICAgICAgICAgICAgbmFtZXMuc29ydCgpCisgICAgICAgICAgICByZXR1cm4gdHVwbGUobmFtZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQorCisgICAgZGVmIF9jcmVhdGVfZmlsZXMoc2VsZik6CisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgorICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBkaXN0ID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpc3QnKQorICAgICAgICBvcy5ta2RpcihkaXN0KQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUoW2Rpc3QsICdmaWxlMSddLCAneHh4JykKKyAgICAgICAgc2VsZi53cml0ZV9maWxlKFtkaXN0LCAnZmlsZTInXSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViJykpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbZGlzdCwgJ3N1YicsICdmaWxlMyddLCAneHh4JykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKGRpc3QsICdzdWIyJykpCisgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQorICAgICAgICByZXR1cm4gdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGFuZCBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdGFyIGNvbW1hbmQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF90YXJmaWxlX3ZzX3RhcihzZWxmKToKKyAgICAgICAgdG1wZGlyLCB0bXBkaXIyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKHRtcGRpcikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX21ha2VfdGFyYmFsbChiYXNlX25hbWUsICdkaXN0JykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgICAgICMgbm93IGNyZWF0ZSBhbm90aGVyIHRhcmJhbGwgdXNpbmcgYHRhcmAKKyAgICAgICAgdGFyYmFsbDIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZTIudGFyLmd6JykKKyAgICAgICAgdGFyX2NtZCA9IFsndGFyJywgJy1jZicsICdhcmNoaXZlMi50YXInLCAnZGlzdCddCisgICAgICAgIGd6aXBfY21kID0gWydnemlwJywgJy1mOScsICdhcmNoaXZlMi50YXInXQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6CisgICAgICAgICAgICAgICAgc3Bhd24odGFyX2NtZCkKKyAgICAgICAgICAgICAgICBzcGF3bihnemlwX2NtZCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwyKSkKKyAgICAgICAgIyBsZXQncyBjb21wYXJlIGJvdGggdGFyYmFsbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHRhcmJhbGwpLCBzZWxmLl90YXJpbmZvKHRhcmJhbGwyKSkKKworICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKworICAgICAgICAjIG5vdyBmb3IgYSBkcnlfcnVuCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsIGRyeV9ydW49VHJ1ZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQorICAgIGRlZiB0ZXN0X21ha2VfemlwZmlsZShzZWxmKToKKyAgICAgICAgIyBjcmVhdGluZyBzb21ldGhpbmcgdG8gdGFyCisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTEnXSwgJ3h4eCcpCisgICAgICAgIHNlbGYud3JpdGVfZmlsZShbdG1wZGlyLCAnZmlsZTInXSwgJ3h4eCcpCisKKyAgICAgICAgdG1wZGlyMiA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgICMgZm9yY2Ugc2h1dGlsIHRvIGNyZWF0ZSB0aGUgZGlyZWN0b3J5CisgICAgICAgIG9zLnJtZGlyKHRtcGRpcjIpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCisgICAgICAgIF9tYWtlX3ppcGZpbGUoYmFzZV9uYW1lLCB0bXBkaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnppcCcKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorCisKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmUoc2VsZik6CisgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhcmNoaXZlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWFrZV9hcmNoaXZlLCBiYXNlX25hbWUsICd4eHgnKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9vd25lcl9ncm91cChzZWxmKToKKyAgICAgICAgIyB0ZXN0aW5nIG1ha2VfYXJjaGl2ZSB3aXRoIG93bmVyIGFuZCBncm91cCwgd2l0aCB2YXJpb3VzIGNvbWJpbmF0aW9ucworICAgICAgICAjIHRoaXMgd29ya3MgZXZlbiBpZiB0aGVyZSdzIG5vdCBnaWQvdWlkIHN1cHBvcnQKKyAgICAgICAgaWYgVUlEX0dJRF9TVVBQT1JUOgorICAgICAgICAgICAgZ3JvdXAgPSBncnAuZ2V0Z3JnaWQoMClbMF0KKyAgICAgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBncm91cCA9IG93bmVyID0gJ3Jvb3QnCisKKyAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyLCBvd25lcj1vd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKworICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9J2tqaGtqaGtqZycsIGdyb3VwPSdvaWhvaG9oJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHpsaWIsICJSZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6CisgICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIG93bmVyID0gcHdkLmdldHB3dWlkKDApWzBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyY2hpdmVfbmFtZSA9IF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhhcmNoaXZlX25hbWUpKQorCisgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lbWJlci5naWQsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X21ha2VfYXJjaGl2ZV9jd2Qoc2VsZik6CisgICAgICAgIGN1cnJlbnRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgZGVmIF9icmVha3MoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgICAgICByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCgneHh4JywgX2JyZWFrcywgW10sICd4eHggZmlsZScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtYWtlX2FyY2hpdmUoJ3h4eCcsICd4eHgnLCByb290X2Rpcj1zZWxmLm1rZHRlbXAoKSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRjd2QoKSwgY3VycmVudF9kaXIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoc2VsZik6CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCwgJ3h4eCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCBsYW1iZGE6IHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsoMSwgMiksICgxLCAyLCAzKV0pCisKKyAgICAgICAgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQoJ3h4eCcsIGxhbWJkYTogeCwgWygxLCAyKV0sICd4eHggZmlsZScpCisgICAgICAgIGZvcm1hdHMgPSBbbmFtZSBmb3IgbmFtZSwgcGFyYW1zIGluIGdldF9hcmNoaXZlX2Zvcm1hdHMoKV0KKyAgICAgICAgc2VsZi5hc3NlcnRJbigneHh4JywgZm9ybWF0cykKKworICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQorICAgICAgICBmb3JtYXRzID0gW25hbWUgZm9yIG5hbWUsIHBhcmFtcyBpbiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCldCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIGZvcm1hdHMpCisKKyAgICBkZWYgX2NvbXBhcmVfZGlycyhzZWxmLCBkaXIxLCBkaXIyKToKKyAgICAgICAgIyBjaGVjayB0aGF0IGRpcjEgYW5kIGRpcjIgYXJlIGVxdWl2YWxlbnQsCisgICAgICAgICMgcmV0dXJuIHRoZSBkaWZmCisgICAgICAgIGRpZmYgPSBbXQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXIxKToKKyAgICAgICAgICAgIGZvciBmaWxlXyBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGVfKQorICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKGRpcjIsIG9zLnBhdGguc3BsaXQocGF0aClbLTFdKQorICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGRpZmYuYXBwZW5kKGZpbGVfKQorICAgICAgICByZXR1cm4gZGlmZgorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoemxpYiwgIlJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3VucGFja19hcmNoaXZlKHNlbGYpOgorICAgICAgICBmb3JtYXRzID0gWyd0YXInLCAnZ3p0YXInLCAnemlwJ10KKyAgICAgICAgaWYgQloyX1NVUFBPUlRFRDoKKyAgICAgICAgICAgIGZvcm1hdHMuYXBwZW5kKCdienRhcicpCisKKyAgICAgICAgZm9yIGZvcm1hdCBpbiBmb3JtYXRzOgorICAgICAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgICAgIGZpbGVuYW1lID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2RpciwgYmFzZV9kaXIpCisKKyAgICAgICAgICAgICMgbGV0J3MgdHJ5IHRvIHVucGFjayBpdCBub3cKKyAgICAgICAgICAgIHVucGFja19hcmNoaXZlKGZpbGVuYW1lLCB0bXBkaXIyKQorICAgICAgICAgICAgZGlmZiA9IHNlbGYuX2NvbXBhcmVfZGlycyh0bXBkaXIsIHRtcGRpcjIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFtdKQorCisgICAgICAgICAgICAjIGFuZCBhZ2FpbiwgdGhpcyB0aW1lIHdpdGggdGhlIGZvcm1hdCBzcGVjaWZpZWQKKyAgICAgICAgICAgIHRtcGRpcjMgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICAgICAgdW5wYWNrX2FyY2hpdmUoZmlsZW5hbWUsIHRtcGRpcjMsIGZvcm1hdD1mb3JtYXQpCisgICAgICAgICAgICBkaWZmID0gc2VsZi5fY29tcGFyZV9kaXJzKHRtcGRpciwgdG1wZGlyMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5SZWFkRXJyb3IsIHVucGFja19hcmNoaXZlLCBURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHVucGFja19hcmNoaXZlLCBURVNURk4sIGZvcm1hdD0neHh4JykKKworICAgIGRlZiB0ZXN0X3VucGFja19yZWdpc3Rlcnkoc2VsZik6CisKKyAgICAgICAgZm9ybWF0cyA9IGdldF91bnBhY2tfZm9ybWF0cygpCisKKyAgICAgICAgZGVmIF9ib28oZmlsZW5hbWUsIGV4dHJhY3RfZGlyLCBleHRyYSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlbmFtZSwgJ3N0dWZmLmJvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4dHJhY3RfZGlyLCAneHgnKQorCisgICAgICAgIHJlZ2lzdGVyX3VucGFja19mb3JtYXQoJ0JvbycsIFsnLmJvbycsICcuYjInXSwgX2JvbywgWygnZXh0cmEnLCAxKV0pCisgICAgICAgIHVucGFja19hcmNoaXZlKCdzdHVmZi5ib28nLCAneHgnKQorCisgICAgICAgICMgdHJ5aW5nIHRvIHJlZ2lzdGVyIGEgLmJvbyB1bnBhY2tlciBhZ2FpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWdpc3RyeUVycm9yLCByZWdpc3Rlcl91bnBhY2tfZm9ybWF0LCAnQm9vMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsnLmJvbyddLCBfYm9vKQorCisgICAgICAgICMgc2hvdWxkIHdvcmsgbm93CisgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCgnQm9vJykKKyAgICAgICAgcmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCgnQm9vMicsIFsnLmJvbyddLCBfYm9vKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnQm9vMicsIFsnLmJvbyddLCAnJyksIGdldF91bnBhY2tfZm9ybWF0cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgnQm9vJywgWycuYm9vJ10sICcnKSwgZ2V0X3VucGFja19mb3JtYXRzKCkpCisKKyAgICAgICAgIyBsZXQncyBsZWF2ZSBhIGNsZWFuIHN0YXRlCisgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCgnQm9vMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3VucGFja19mb3JtYXRzKCksIGZvcm1hdHMpCisKIAogY2xhc3MgVGVzdE1vdmUodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0yODgsMjAgKzc0MywxMSBAQAogICAgICAgICBzZWxmLmRzdF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zcmNfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnNyY19kaXIsIGZpbGVuYW1lKQogICAgICAgICBzZWxmLmRzdF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuZHN0X2RpciwgZmlsZW5hbWUpCi0gICAgICAgICMgVHJ5IHRvIGNyZWF0ZSBhIGRpciBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIGhvcGluZyB0aGF0IGl0IGlzCi0gICAgICAgICMgbm90IGxvY2F0ZWQgb24gdGhlIHNhbWUgZmlsZXN5c3RlbSBhcyB0aGUgc3lzdGVtIHRtcCBkaXIuCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZGlyX290aGVyX2ZzID0gdGVtcGZpbGUubWtkdGVtcCgKLSAgICAgICAgICAgICAgICBkaXI9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKLSAgICAgICAgICAgIHNlbGYuZmlsZV9vdGhlcl9mcyA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9vdGhlcl9mcywKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmRpcl9vdGhlcl9mcyA9IE5vbmUKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc3JjX2ZpbGUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIic3BhbSIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGZvciBkIGluIChzZWxmLnNyY19kaXIsIHNlbGYuZHN0X2Rpciwgc2VsZi5kaXJfb3RoZXJfZnMpOgorICAgICAgICBmb3IgZCBpbiAoc2VsZi5zcmNfZGlyLCBzZWxmLmRzdF9kaXIpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGlmIGQ6CiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKQEAgLTMzMCwyMSArNzc2LDE1IEBACiAgICAgICAgICMgTW92ZSBhIGZpbGUgaW5zaWRlIGFuIGV4aXN0aW5nIGRpciBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtLgogICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2ZpbGUoc2VsZi5zcmNfZmlsZSwgc2VsZi5kc3RfZGlyLCBzZWxmLmRzdF9maWxlKQogCisgICAgQG1vY2tfcmVuYW1lCiAgICAgZGVmIHRlc3RfbW92ZV9maWxlX290aGVyX2ZzKHNlbGYpOgogICAgICAgICAjIE1vdmUgYSBmaWxlIHRvIGFuIGV4aXN0aW5nIGRpciBvbiBhbm90aGVyIGZpbGVzeXN0ZW0uCi0gICAgICAgIGlmIG5vdCBzZWxmLmRpcl9vdGhlcl9mczoKLSAgICAgICAgICAgICMgc2tpcAotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZmlsZShzZWxmLnNyY19maWxlLCBzZWxmLmZpbGVfb3RoZXJfZnMsCi0gICAgICAgICAgICBzZWxmLmZpbGVfb3RoZXJfZnMpCisgICAgICAgIHNlbGYudGVzdF9tb3ZlX2ZpbGUoKQogCisgICAgQG1vY2tfcmVuYW1lCiAgICAgZGVmIHRlc3RfbW92ZV9maWxlX3RvX2Rpcl9vdGhlcl9mcyhzZWxmKToKICAgICAgICAgIyBNb3ZlIGEgZmlsZSB0byBhbm90aGVyIGxvY2F0aW9uIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KLSAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgotICAgICAgICAgICAgIyBza2lwCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9maWxlKHNlbGYuc3JjX2ZpbGUsIHNlbGYuZGlyX290aGVyX2ZzLAotICAgICAgICAgICAgc2VsZi5maWxlX290aGVyX2ZzKQorICAgICAgICBzZWxmLnRlc3RfbW92ZV9maWxlX3RvX2RpcigpCiAKICAgICBkZWYgdGVzdF9tb3ZlX2RpcihzZWxmKToKICAgICAgICAgIyBNb3ZlIGEgZGlyIHRvIGFub3RoZXIgbG9jYXRpb24gb24gdGhlIHNhbWUgZmlsZXN5c3RlbS4KQEAgLTM1NywzMiArNzk3LDIwIEBACiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgQG1vY2tfcmVuYW1lCiAgICAgZGVmIHRlc3RfbW92ZV9kaXJfb3RoZXJfZnMoc2VsZik6CiAgICAgICAgICMgTW92ZSBhIGRpciB0byBhbm90aGVyIGxvY2F0aW9uIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KLSAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgotICAgICAgICAgICAgIyBza2lwCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZHN0X2RpciA9IHRlbXBmaWxlLm1rdGVtcChkaXI9c2VsZi5kaXJfb3RoZXJfZnMpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vdmVfZGlyKHNlbGYuc3JjX2RpciwgZHN0X2RpciwgZHN0X2RpcikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKGRzdF9kaXIpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLnRlc3RfbW92ZV9kaXIoKQogCiAgICAgZGVmIHRlc3RfbW92ZV9kaXJfdG9fZGlyKHNlbGYpOgogICAgICAgICAjIE1vdmUgYSBkaXIgaW5zaWRlIGFuIGV4aXN0aW5nIGRpciBvbiB0aGUgc2FtZSBmaWxlc3lzdGVtLgogICAgICAgICBzZWxmLl9jaGVja19tb3ZlX2RpcihzZWxmLnNyY19kaXIsIHNlbGYuZHN0X2RpciwKICAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRzdF9kaXIsIG9zLnBhdGguYmFzZW5hbWUoc2VsZi5zcmNfZGlyKSkpCiAKKyAgICBAbW9ja19yZW5hbWUKICAgICBkZWYgdGVzdF9tb3ZlX2Rpcl90b19kaXJfb3RoZXJfZnMoc2VsZik6CiAgICAgICAgICMgTW92ZSBhIGRpciBpbnNpZGUgYW4gZXhpc3RpbmcgZGlyIG9uIGFub3RoZXIgZmlsZXN5c3RlbS4KLSAgICAgICAgaWYgbm90IHNlbGYuZGlyX290aGVyX2ZzOgotICAgICAgICAgICAgIyBza2lwCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fY2hlY2tfbW92ZV9kaXIoc2VsZi5zcmNfZGlyLCBzZWxmLmRpcl9vdGhlcl9mcywKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihzZWxmLmRpcl9vdGhlcl9mcywgb3MucGF0aC5iYXNlbmFtZShzZWxmLnNyY19kaXIpKSkKKyAgICAgICAgc2VsZi50ZXN0X21vdmVfZGlyX3RvX2RpcigpCiAKICAgICBkZWYgdGVzdF9leGlzdGluZ19maWxlX2luc2lkZV9kZXN0X2RpcihzZWxmKToKICAgICAgICAgIyBBIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGluc2lkZSB0aGUgZGVzdGluYXRpb24gZGlyIGFscmVhZHkgZXhpc3RzLgpAQCAtNDE5LDYgKzg0Nyw3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTiwgaWdub3JlX2Vycm9ycz1UcnVlKQogCisKIGNsYXNzIFRlc3RDb3B5RmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBfZGVsZXRlID0gRmFsc2UKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQppbmRleCA2MjMxYTZiLi44MTY4ZDdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NpdGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CkBAIC02LDEzICs2LDE2IEBACiAiIiIKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgVEVTVEZOLCBFbnZpcm9ubWVudFZhckd1YXJkCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfb3V0cHV0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHJlCiBpbXBvcnQgZW5jb2RpbmdzCiBpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5c2NvbmZpZworZnJvbSBjb3B5IGltcG9ydCBjb3B5CisKICMgTmVlZCB0byBtYWtlIHN1cmUgdG8gbm90IGltcG9ydCAnc2l0ZScgaWYgc29tZW9uZSBzcGVjaWZpZWQgYGAtU2BgIGF0IHRoZQogIyBjb21tYW5kLWxpbmUuICBEZXRlY3QgdGhpcyBieSBqdXN0IG1ha2luZyBzdXJlICdzaXRlJyBoYXMgbm90IGJlZW4gaW1wb3J0ZWQKICMgYWxyZWFkeS4KQEAgLTI4LDE5ICszMSwyMyBAQAogCiBjbGFzcyBIZWxwZXJGdW5jdGlvbnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgZm9yIGhlbHBlciBmdW5jdGlvbnMuCi0KLSAgICBUaGUgc2V0dGluZyBvZiB0aGUgZW5jb2RpbmcgKHNldCB1c2luZyBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nKSB1c2VkIGJ5Ci0gICAgdGhlIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHRlc3RlZC4KLQogICAgICIiIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTYXZlIGEgY29weSBvZiBzeXMucGF0aCIiIgogICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5vbGRfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNlbGYub2xkX3NpdGUgPSBzaXRlLlVTRVJfU0lURQorICAgICAgICBzZWxmLm9sZF9wcmVmaXhlcyA9IHNpdGUuUFJFRklYRVMKKyAgICAgICAgc2VsZi5vbGRfdmFycyA9IGNvcHkoc3lzY29uZmlnLl9DT05GSUdfVkFSUykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgIiIiUmVzdG9yZSBzeXMucGF0aCIiIgotICAgICAgICBzeXMucGF0aCA9IHNlbGYuc3lzX3BhdGgKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5vbGRfYmFzZQorICAgICAgICBzaXRlLlVTRVJfU0lURSA9IHNlbGYub2xkX3NpdGUKKyAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IHNlbGYub2xkX3ByZWZpeGVzCisgICAgICAgIHN5c2NvbmZpZy5fQ09ORklHX1ZBUlMgPSBzZWxmLm9sZF92YXJzCiAKICAgICBkZWYgdGVzdF9tYWtlcGF0aChzZWxmKToKICAgICAgICAgIyBUZXN0IG1ha2VwYXRoKCkgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciBpdHMgZmlyc3QgcmV0dXJuIHZhbHVlCkBAIC01OSwxNiArNjYsMTYgQEAKICAgICAgICAgZGlyX3NldCA9IHNpdGUuX2luaXRfcGF0aGluZm8oKQogICAgICAgICBmb3IgZW50cnkgaW4gW3NpdGUubWFrZXBhdGgocGF0aClbMV0gZm9yIHBhdGggaW4gc3lzLnBhdGgKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggYW5kIG9zLnBhdGguaXNkaXIocGF0aCldOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVudHJ5IGluIGRpcl9zZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGZyb20gc3lzLnBhdGggbm90IGZvdW5kIGluIHNldCByZXR1cm5lZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IF9pbml0X3BhdGhpbmZvKCk6ICVzIiAlIChlbnRyeSwgZGlyX3NldCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGVudHJ5LCBkaXJfc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgZnJvbSBzeXMucGF0aCBub3QgZm91bmQgaW4gc2V0IHJldHVybmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5IF9pbml0X3BhdGhpbmZvKCk6ICVzIiAlIChlbnRyeSwgZGlyX3NldCkpCiAKICAgICBkZWYgcHRoX2ZpbGVfdGVzdHMoc2VsZiwgcHRoX2ZpbGUpOgogICAgICAgICAiIiJDb250YWluIGNvbW1vbiBjb2RlIGZvciB0ZXN0aW5nIHJlc3VsdHMgb2YgcmVhZGluZyBhIC5wdGggZmlsZSIiIgotICAgICAgICBzZWxmLmFzc2VydFRydWUocHRoX2ZpbGUuaW1wb3J0ZWQgaW4gc3lzLm1vZHVsZXMsCi0gICAgICAgICAgICAgICAgIiVzIG5vdCBpbiBzeXMucGF0aCIgJSBwdGhfZmlsZS5pbXBvcnRlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpdGUubWFrZXBhdGgocHRoX2ZpbGUuZ29vZF9kaXJfcGF0aClbMF0gaW4gc3lzLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMocHRoX2ZpbGUuYmFkX2Rpcl9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwdGhfZmlsZS5pbXBvcnRlZCwgc3lzLm1vZHVsZXMsCisgICAgICAgICAgICAgICAgICAgICAgIiVzIG5vdCBpbiBzeXMubW9kdWxlcyIgJSBwdGhfZmlsZS5pbXBvcnRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaXRlLm1ha2VwYXRoKHB0aF9maWxlLmdvb2RfZGlyX3BhdGgpWzBdLCBzeXMucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhwdGhfZmlsZS5iYWRfZGlyX3BhdGgpKQogCiAgICAgZGVmIHRlc3RfYWRkcGFja2FnZShzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgYWRkcGFja2FnZSgpIGltcG9ydHMgaWYgdGhlIGxpbmUgc3RhcnRzIHdpdGggJ2ltcG9ydCcsCkBAIC05OSw0MyArMTA2LDQzIEBACiAgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX3N5bnRheChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxMDY0MgogICAgICAgICBwdGhfZGlyLCBwdGhfZm4gPSBzZWxmLm1ha2VfcHRoKCJpbXBvcnQgYmFkKXN5bnRheFxuIikKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyX291dDoKICAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQotICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAxIikKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnJfb3V0LmdldHZhbHVlKCksICJsaW5lIDEiKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCiAgICAgICAgICMgWFhYOiB0aGUgcHJldmlvdXMgdHdvIHNob3VsZCBiZSBpbmRlcGVuZGVudCBjaGVja3Mgc28gdGhhdCB0aGUKICAgICAgICAgIyBvcmRlciBkb2Vzbid0IG1hdHRlci4gIFRoZSBuZXh0IHRocmVlIGNvdWxkIGJlIGEgc2luZ2xlIGNoZWNrCiAgICAgICAgICMgYnV0IG15IHJlZ2V4IGZvbyBpc24ndCBnb29kIGVub3VnaCB0byB3cml0ZSBpdC4KLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksIHInaW1wb3J0IGJhZFwpc3ludGF4JykKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1N5bnRheEVycm9yJykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwgcidpbXBvcnQgYmFkXClzeW50YXgnKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1N5bnRheEVycm9yJykKIAogICAgIGRlZiB0ZXN0X2FkZHBhY2thZ2VfaW1wb3J0X2JhZF9leGVjKHNlbGYpOgogICAgICAgICAjIElzc3VlIDEwNjQyCiAgICAgICAgIHB0aF9kaXIsIHB0aF9mbiA9IHNlbGYubWFrZV9wdGgoInJhbmRvbXBhdGhcbmltcG9ydCBub3N1Y2htb2R1bGVcbiIpCi0gICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBlcnJfb3V0OgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycl9vdXQ6CiAgICAgICAgICAgICBzaXRlLmFkZHBhY2thZ2UocHRoX2RpciwgcHRoX2ZuLCBzZXQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgImxpbmUgMiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnJfb3V0LmdldHZhbHVlKCksCiAgICAgICAgICAgICByZS5lc2NhcGUob3MucGF0aC5qb2luKHB0aF9kaXIsIHB0aF9mbikpKQogICAgICAgICAjIFhYWDogZGl0dG8gcHJldmlvdXMgWFhYIGNvbW1lbnQuCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUcmFjZWJhY2snKQotICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAnSW1wb3J0RXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyX291dC5nZXR2YWx1ZSgpLCAnSW1wb3J0RXJyb3InKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbmRvd3MgZG9lcyBub3QgcmFpc2UgYW4gIgogICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBmb3IgZmlsZSBwYXRocyBjb250YWluaW5nIG51bGwgY2hhcmFjdGVycyIpCiAgICAgZGVmIHRlc3RfYWRkcGFja2FnZV9pbXBvcnRfYmFkX3B0aF9maWxlKHNlbGYpOgogICAgICAgICAjIElzc3VlIDUyNTgKICAgICAgICAgcHRoX2RpciwgcHRoX2ZuID0gc2VsZi5tYWtlX3B0aCgiYWJjXHgwMGRlZlxuIikKLSAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIGVycl9vdXQ6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyX291dDoKICAgICAgICAgICAgIHNpdGUuYWRkcGFja2FnZShwdGhfZGlyLCBwdGhfZm4sIHNldCgpKQotICAgICAgICBzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMoZXJyX291dC5nZXR2YWx1ZSgpLCAibGluZSAxIikKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnJfb3V0LmdldHZhbHVlKCksICJsaW5lIDEiKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgIHJlLmVzY2FwZShvcy5wYXRoLmpvaW4ocHRoX2RpciwgcHRoX2ZuKSkpCiAgICAgICAgICMgWFhYOiBkaXR0byBwcmV2aW91cyBYWFggY29tbWVudC4KLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcyhlcnJfb3V0LmdldHZhbHVlKCksICdUeXBlRXJyb3InKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVycl9vdXQuZ2V0dmFsdWUoKSwgJ1RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyX291dC5nZXR2YWx1ZSgpLCAnVHlwZUVycm9yJykKIAogICAgIGRlZiB0ZXN0X2FkZHNpdGVkaXIoc2VsZik6CiAgICAgICAgICMgU2FtZSB0ZXN0cyBmb3IgdGVzdF9hZGRwYWNrYWdlIHNpbmNlIGFkZHNpdGVkaXIoKSBlc3NlbnRpYWxseSBqdXN0CkBAIC0xNTIsNyArMTU5LDcgQEAKIAogICAgIGRlZiB0ZXN0X3Nfb3B0aW9uKHNlbGYpOgogICAgICAgICB1c2Vyc2l0ZSA9IHNpdGUuVVNFUl9TSVRFCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1c2Vyc2l0ZSBpbiBzeXMucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1c2Vyc2l0ZSwgc3lzLnBhdGgpCiAKICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLWMnLApAQCAtMTgwLDYgKzE4Nyw2MiBAQAogICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMSkKIAorICAgIGRlZiB0ZXN0X2dldHVzZXJiYXNlKHNlbGYpOgorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IE5vbmUKKyAgICAgICAgdXNlcl9iYXNlID0gc2l0ZS5nZXR1c2VyYmFzZSgpCisKKyAgICAgICAgIyB0aGUgY2FsbCBzZXRzIHNpdGUuVVNFUl9CQVNFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX0JBU0UsIHVzZXJfYmFzZSkKKworICAgICAgICAjIGxldCdzIHNldCBQWVRIT05VU0VSQkFTRSBhbmQgc2VlIGlmIGl0IHVzZXMgaXQKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBOb25lCisgICAgICAgIGltcG9ydCBzeXNjb25maWcKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IE5vbmUKKworICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZpcm9uOgorICAgICAgICAgICAgZW52aXJvblsnUFlUSE9OVVNFUkJBU0UnXSA9ICd4b3hvJworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNpdGUuZ2V0dXNlcmJhc2UoKS5zdGFydHN3aXRoKCd4b3hvJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZS5nZXR1c2VyYmFzZSgpKQorCisgICAgZGVmIHRlc3RfZ2V0dXNlcnNpdGVwYWNrYWdlcyhzZWxmKToKKyAgICAgICAgc2l0ZS5VU0VSX1NJVEUgPSBOb25lCisgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gTm9uZQorICAgICAgICB1c2VyX3NpdGUgPSBzaXRlLmdldHVzZXJzaXRlcGFja2FnZXMoKQorCisgICAgICAgICMgdGhlIGNhbGwgc2V0cyBVU0VSX0JBU0UgKmFuZCogVVNFUl9TSVRFCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l0ZS5VU0VSX1NJVEUsIHVzZXJfc2l0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVzZXJfc2l0ZS5zdGFydHN3aXRoKHNpdGUuVVNFUl9CQVNFKSwgdXNlcl9zaXRlKQorCisgICAgZGVmIHRlc3RfZ2V0c2l0ZXBhY2thZ2VzKHNlbGYpOgorICAgICAgICBzaXRlLlBSRUZJWEVTID0gWyd4b3hvJ10KKyAgICAgICAgZGlycyA9IHNpdGUuZ2V0c2l0ZXBhY2thZ2VzKCkKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdvczJlbXgnLCAncmlzY29zJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaXJzKSwgMSkKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdMaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sIHdhbnRlZCkKKyAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3B5dGhvbicgKyBzeXMudmVyc2lvbls6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnbGliJywgJ3NpdGUtcHl0aG9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlyc1sxXSwgd2FudGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMF0sICd4b3hvJykKKyAgICAgICAgICAgIHdhbnRlZCA9IG9zLnBhdGguam9pbigneG94bycsICdsaWInLCAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMV0sIHdhbnRlZCkKKworICAgICAgICAjIGxldCdzIHRyeSB0aGUgc3BlY2lmaWMgQXBwbGUgbG9jYXRpb24KKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgorICAgICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsnUHl0aG9uLmZyYW1ld29yayddCisgICAgICAgICAgICBkaXJzID0gc2l0ZS5nZXRzaXRlcGFja2FnZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDMpCisgICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJy9MaWJyYXJ5JywgJ1B5dGhvbicsIHN5cy52ZXJzaW9uWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnNbMl0sIHdhbnRlZCkKIAogY2xhc3MgUHRoRmlsZShvYmplY3QpOgogICAgICIiIkhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgdGVzdGluZyBvZiAucHRoIGZpbGVzIiIiCkBAIC0yNDUsMjEgKzMwOCw0NSBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICAiIiJSZXN0b3JlIHN5cy5wYXRoIiIiCi0gICAgICAgIHN5cy5wYXRoID0gc2VsZi5zeXNfcGF0aAorICAgICAgICBzeXMucGF0aFs6XSA9IHNlbGYuc3lzX3BhdGgKIAotICAgIGRlZiB0ZXN0X2Fic19fZmlsZV9fKHNlbGYpOgotICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgaW1wb3J0ZWQgbW9kdWxlcyBoYXZlIHRoZWlyIF9fZmlsZV9fIGF0dHJpYnV0ZQotICAgICAgICAjIGFzIGFuIGFic29sdXRlIHBhdGguCi0gICAgICAgICMgSGFuZGxlZCBieSBhYnNfX2ZpbGVfXygpCi0gICAgICAgIHNpdGUuYWJzX19maWxlX18oKQotICAgICAgICBmb3IgbW9kdWxlIGluIChzeXMsIG9zLCBidWlsdGlucyk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMobW9kdWxlLl9fZmlsZV9fKSwgcmVwcihtb2R1bGUpKQotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICMgV2UgY291bGQgdHJ5IGV2ZXJ5dGhpbmcgaW4gc3lzLm1vZHVsZXM7IGhvd2V2ZXIsIHdoZW4gcmVncnRlc3QucHkKLSAgICAgICAgIyBydW5zIHNvbWV0aGluZyBsaWtlIHRlc3RfZnJvemVuIGJlZm9yZSB0ZXN0X3NpdGUsIHRoZW4gd2Ugd2lsbAotICAgICAgICAjIGJlIHRlc3RpbmcgdGhpbmdzIGxvYWRlZCAqYWZ0ZXIqIHRlc3Rfc2l0ZSBkaWQgcGF0aCBub3JtYWxpemF0aW9uCisgICAgZGVmIHRlc3RfYWJzX3BhdGhzKHNlbGYpOgorICAgICAgICAjIE1ha2Ugc3VyZSBhbGwgaW1wb3J0ZWQgbW9kdWxlcyBoYXZlIHRoZWlyIF9fZmlsZV9fIGFuZCBfX2NhY2hlZF9fCisgICAgICAgICMgYXR0cmlidXRlcyBhcyBhYnNvbHV0ZSBwYXRocy4gIEFycmFuZ2luZyB0byBwdXQgdGhlIExpYiBkaXJlY3Rvcnkgb24KKyAgICAgICAgIyBQWVRIT05QQVRIIHdvdWxkIGNhdXNlIHRoZSBvcyBtb2R1bGUgdG8gaGF2ZSBhIHJlbGF0aXZlIHBhdGggZm9yCisgICAgICAgICMgX19maWxlX18gaWYgYWJzX3BhdGhzKCkgZG9lcyBub3QgZ2V0IHJ1bi4gIHN5cyBhbmQgYnVpbHRpbnMgKHRoZQorICAgICAgICAjIG9ubHkgb3RoZXIgbW9kdWxlcyBpbXBvcnRlZCBiZWZvcmUgc2l0ZS5weSBydW5zKSBkbyBub3QgaGF2ZQorICAgICAgICAjIF9fZmlsZV9fIG9yIF9fY2FjaGVkX18gYmVjYXVzZSB0aGV5IGFyZSBidWlsdC1pbi4KKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5yZWxwYXRoKG9zLnBhdGguZGlybmFtZShvcy5fX2ZpbGVfXykpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gcGFyZW50CisgICAgICAgIGNvZGUgPSAoJ2ltcG9ydCBvcywgc3lzJywKKyAgICAgICAgICAgICMgdXNlIEFTQ0lJIHRvIGF2b2lkIGxvY2FsZSBpc3N1ZXMgd2l0aCBub24tQVNDSUkgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICdvc19maWxlID0gb3MuX19maWxlX18uZW5jb2RlKCJhc2NpaSIsICJiYWNrc2xhc2hyZXBsYWNlIiknLAorICAgICAgICAgICAgcidzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShvc19maWxlICsgYiJcbiIpJywKKyAgICAgICAgICAgICdvc19jYWNoZWQgPSBvcy5fX2NhY2hlZF9fLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpJywKKyAgICAgICAgICAgIHInc3lzLnN0ZG91dC5idWZmZXIud3JpdGUob3NfY2FjaGVkICsgYiJcbiIpJykKKyAgICAgICAgY29tbWFuZCA9ICdcbicuam9pbihjb2RlKQorICAgICAgICAjIEZpcnN0LCBwcm92ZSB0aGF0IHdpdGggLVMgKG5vICdpbXBvcnQgc2l0ZScpLCB0aGUgcGF0aHMgYXJlCisgICAgICAgICMgcmVsYXRpdmUuCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1TJywgJy1jJywgY29tbWFuZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvYy5jb21tdW5pY2F0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIDApCisgICAgICAgIG9zX19maWxlX18sIG9zX19jYWNoZWRfXyA9IHN0ZG91dC5zcGxpdGxpbmVzKClbOjJdCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5pc2Ficyhvc19fZmlsZV9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzYWJzKG9zX19jYWNoZWRfXykpCisgICAgICAgICMgTm93LCB3aXRoICdpbXBvcnQgc2l0ZScsIGl0IHdvcmtzLgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvbW1hbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgMCkKKyAgICAgICAgb3NfX2ZpbGVfXywgb3NfX2NhY2hlZF9fID0gc3Rkb3V0LnNwbGl0bGluZXMoKVs6Ml0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNhYnMob3NfX2ZpbGVfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzYWJzKG9zX19jYWNoZWRfXykpCiAKICAgICBkZWYgdGVzdF9ub19kdXBsaWNhdGVfcGF0aHMoc2VsZik6CiAgICAgICAgICMgTm8gZHVwbGljYXRlIHBhdGhzIHNob3VsZCBleGlzdCBpbiBzeXMucGF0aApAQCAtMjY3LDcgKzM1NCw3IEBACiAgICAgICAgIHNpdGUucmVtb3ZlZHVwcGF0aHMoKQogICAgICAgICBzZWVuX3BhdGhzID0gc2V0KCkKICAgICAgICAgZm9yIHBhdGggaW4gc3lzLnBhdGg6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocGF0aCBub3QgaW4gc2Vlbl9wYXRocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ocGF0aCwgc2Vlbl9wYXRocykKICAgICAgICAgICAgIHNlZW5fcGF0aHMuYWRkKHBhdGgpCiAKICAgICBkZWYgdGVzdF9hZGRfYnVpbGRfZGlyKHNlbGYpOgpAQCAtMzAwLDEwICszODcsNiBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZGlkIG5vdCBhbGlhcyBtYmNzIikKIAotICAgIGRlZiB0ZXN0X3NldGRlZmF1bHRlbmNvZGluZ19yZW1vdmVkKHNlbGYpOgotICAgICAgICAjIE1ha2Ugc3VyZSBzeXMuc2V0ZGVmYXVsdGVuY29kaW5nIGlzIGdvbmUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKHN5cywgInNldGRlZmF1bHRlbmNvZGluZyIpKQotCiAgICAgZGVmIHRlc3Rfc2l0ZWN1c3RvbWl6ZV9leGVjdXRlZChzZWxmKToKICAgICAgICAgIyBJZiBzaXRlY3VzdG9taXplIGlzIGF2YWlsYWJsZSwgaXQgc2hvdWxkIGhhdmUgYmVlbiBpbXBvcnRlZC4KICAgICAgICAgaWYgInNpdGVjdXN0b21pemUiIG5vdCBpbiBzeXMubW9kdWxlczoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cGQucHkgYi9MaWIvdGVzdC90ZXN0X3NtdHBkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Q2NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBkLnB5CkBAIC0wLDAgKzEsMjg5IEBACitmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBtb2NrX3NvY2tldAoraW1wb3J0IHNvY2tldAoraW1wb3J0IGlvCitpbXBvcnQgc210cGQKK2ltcG9ydCBhc3luY29yZQorCisKK2NsYXNzIER1bW15U2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbGFkZHIsIHJlbW90ZWFkZHIpOgorICAgICAgICBzbXRwZC5TTVRQU2VydmVyLl9faW5pdF9fKHNlbGYsIGxvY2FsYWRkciwgcmVtb3RlYWRkcikKKyAgICAgICAgc2VsZi5tZXNzYWdlcyA9IFtdCisKKyAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKKyAgICAgICAgc2VsZi5tZXNzYWdlcy5hcHBlbmQoKHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKSkKKyAgICAgICAgaWYgZGF0YSA9PSAncmV0dXJuIHN0YXR1cyc6CisgICAgICAgICAgICByZXR1cm4gJzI1MCBPa2lzaCcKKworCitjbGFzcyBEdW1teURpc3BhdGNoZXJCcm9rZW4oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgQnJva2VuRHVtbXlTZXJ2ZXIoRHVtbXlTZXJ2ZXIpOgorICAgIGRlZiBsaXN0ZW4oc2VsZiwgbnVtKToKKyAgICAgICAgcmFpc2UgRHVtbXlEaXNwYXRjaGVyQnJva2VuKCkKKworCitjbGFzcyBTTVRQRFNlcnZlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc210cGQuc29ja2V0ID0gYXN5bmNvcmUuc29ja2V0ID0gbW9ja19zb2NrZXQKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfbWVzc2FnZV91bmltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBzZXJ2ZXIgPSBzbXRwZC5TTVRQU2VydmVyKCdhJywgJ2InKQorICAgICAgICBjb25uLCBhZGRyID0gc2VydmVyLmFjY2VwdCgpCisgICAgICAgIGNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIpCisKKyAgICAgICAgZGVmIHdyaXRlX2xpbmUobGluZSk6CisgICAgICAgICAgICBjaGFubmVsLnNvY2tldC5xdWV1ZV9yZWN2KGxpbmUpCisgICAgICAgICAgICBjaGFubmVsLmhhbmRsZV9yZWFkKCkKKworICAgICAgICB3cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHdyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHdyaXRlX2xpbmUoYidEQVRBJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgd3JpdGVfbGluZSwgYidzcGFtXHJcbi5cclxuJykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisKKworY2xhc3MgU01UUERDaGFubmVsVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzbXRwZC5zb2NrZXQgPSBhc3luY29yZS5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBzZWxmLmRlYnVnID0gc210cGQuREVCVUdTVFJFQU0gPSBpby5TdHJpbmdJTygpCisgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlTZXJ2ZXIoJ2EnLCAnYicpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnZlci5hY2NlcHQoKQorICAgICAgICBzZWxmLmNoYW5uZWwgPSBzbXRwZC5TTVRQQ2hhbm5lbChzZWxmLnNlcnZlciwgY29ubiwgYWRkcikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgYXN5bmNvcmUuY2xvc2VfYWxsKCkKKyAgICAgICAgYXN5bmNvcmUuc29ja2V0ID0gc210cGQuc29ja2V0ID0gc29ja2V0CisKKyAgICBkZWYgd3JpdGVfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgc2VsZi5jaGFubmVsLnNvY2tldC5xdWV1ZV9yZWN2KGxpbmUpCisgICAgICAgIHNlbGYuY2hhbm5lbC5oYW5kbGVfcmVhZCgpCisKKyAgICBkZWYgdGVzdF9icm9rZW5fY29ubmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRHVtbXlEaXNwYXRjaGVyQnJva2VuLCBCcm9rZW5EdW1teVNlcnZlciwgJ2EnLCAnYicpCisKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfYWNjZXB0KHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5oYW5kbGVfYWNjZXB0KCkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgYic1MDAgRXJyb3I6IGJhZCBzeW50YXhcclxuJykKKworICAgIGRlZiB0ZXN0X0VITE9fbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidFSExPIHRlc3QuZXhhbXBsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGInNTAyIEVycm9yOiBjb21tYW5kICJFSExPIiBub3QgaW1wbGVtZW50ZWRcclxuJykKKworICAgIGRlZiB0ZXN0X0hFTE8oc2VsZik6CisgICAgICAgIG5hbWUgPSBzbXRwZC5zb2NrZXQuZ2V0ZnFkbigpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gdGVzdC5leGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzI1MCB7fVxyXG4nLmZvcm1hdChuYW1lKS5lbmNvZGUoJ2FzY2lpJykpCisKKyAgICBkZWYgdGVzdF9IRUxPX2JhZF9zeW50YXgoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzUwMSBTeW50YXg6IEhFTE8gaG9zdG5hbWVcclxuJykKKworICAgIGRlZiB0ZXN0X0hFTE9fZHVwbGljYXRlKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidIRUxPIHRlc3QuZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8gdGVzdC5leGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgYic1MDMgRHVwbGljYXRlIEhFTE8vRUhMT1xyXG4nKQorCisgICAgZGVmIHRlc3RfTk9PUChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTk9PUCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPa1xyXG4nKQorCisgICAgZGVmIHRlc3RfTk9PUF9iYWRfc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidOT09QIGhpJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgYic1MDEgU3ludGF4OiBOT09QXHJcbicpCisKKyAgICBkZWYgdGVzdF9RVUlUKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidRVUlUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjIxIEJ5ZVxyXG4nKQorCisgICAgZGVmIHRlc3RfUVVJVF9hcmdfaWdub3JlZChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInUVVJVCBieWUgYnllJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjIxIEJ5ZVxyXG4nKQorCisgICAgZGVmIHRlc3RfYmFkX3N0YXRlKHNlbGYpOgorICAgICAgICBzZWxmLmNoYW5uZWwuc210cF9zdGF0ZSA9ICdCQUQgU1RBVEUnCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0hFTE8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzQ1MSBJbnRlcm5hbCBjb25mdXNpb25cclxuJykKKworICAgIGRlZiB0ZXN0X2NvbW1hbmRfdG9vX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgZnJvbSAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGInYScgKiBzZWxmLmNoYW5uZWwuY29tbWFuZF9zaXplX2xpbWl0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgIGInQGV4YW1wbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzUwMCBFcnJvcjogbGluZSB0b28gbG9uZ1xyXG4nKQorCisgICAgZGVmIHRlc3RfZGF0YV90b29fbG9uZyhzZWxmKToKKyAgICAgICAgIyBTbWFsbCBoYWNrLiBTZXR0aW5nIGxpbWl0IHRvIDJLIG9jdGV0cyBoZXJlIHdpbGwgc2F2ZSB1cyBzb21lIHRpbWUuCisgICAgICAgIHNlbGYuY2hhbm5lbC5kYXRhX3NpemVfbGltaXQgPSAyMDQ4CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidBJyAqIHNlbGYuY2hhbm5lbC5kYXRhX3NpemVfbGltaXQgKworICAgICAgICAgICAgICAgICAgICAgICAgYidBXHJcbi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJzU1MiBFcnJvcjogVG9vIG11Y2ggbWFpbCBkYXRhXHJcbicpCisKKyAgICBkZWYgdGVzdF9uZWVkX01BSUwoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgdG86c3BhbUBleGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzUwMyBFcnJvcjogbmVlZCBNQUlMIGNvbW1hbmRcclxuJykKKworICAgIGRlZiB0ZXN0X01BSUxfc3ludGF4KHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIGZyb20gZWdnc0BleGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzUwMSBTeW50YXg6IE1BSUwgRlJPTTo8YWRkcmVzcz5cclxuJykKKworICAgIGRlZiB0ZXN0X01BSUxfbWlzc2luZ19mcm9tKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIGZyb206JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzUwMSBTeW50YXg6IE1BSUwgRlJPTTo8YWRkcmVzcz5cclxuJykKKworICAgIGRlZiB0ZXN0X01BSUxfY2hldnJvbnMoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgZnJvbTo8ZWdnc0BleGFtcGxlPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPa1xyXG4nKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX01BSUwoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgZnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIGZyb206c3BhbUBleGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzUwMyBFcnJvcjogbmVzdGVkIE1BSUwgY29tbWFuZFxyXG4nKQorCisgICAgZGVmIHRlc3RfbmVlZF9SQ1BUKHNlbGYpOgorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIEZyb206ZWdnc0BleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInREFUQScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LAorICAgICAgICAgICAgYic1MDMgRXJyb3I6IG5lZWQgUkNQVCBjb21tYW5kXHJcbicpCisKKyAgICBkZWYgdGVzdF9SQ1BUX3N5bnRheChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgdG8gZWdnc0BleGFtcGxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzUwMSBTeW50YXg6IFJDUFQgVE86IDxhZGRyZXNzPlxyXG4nKQorCisgICAgZGVmIHRlc3RfZGF0YV9kaWFsb2coc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwgYicyNTAgT2tcclxuJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInUkNQVCBUbzpzcGFtQGV4YW1wbGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwgYicyNTAgT2tcclxuJykKKworICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidEQVRBJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsCisgICAgICAgICAgICBiJzM1NCBFbmQgZGF0YSB3aXRoIDxDUj48TEY+LjxDUj48TEY+XHJcbicpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ2RhdGFcclxubW9yZVxyXG4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNoYW5uZWwuc29ja2V0Lmxhc3QsIGInMjUwIE9rXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIubWVzc2FnZXMsCisgICAgICAgICAgICBbKCdwZWVyJywgJ2VnZ3NAZXhhbXBsZScsIFsnc3BhbUBleGFtcGxlJ10sICdkYXRhXG5tb3JlJyldKQorCisgICAgZGVmIHRlc3RfREFUQV9zeW50YXgoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEgc3BhbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzUwMSBTeW50YXg6IERBVEFcclxuJykKKworICAgIGRlZiB0ZXN0X2RhdGFfdHJhbnNwYXJlbmN5X3NlY3Rpb25fNF81XzIoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYicuLlxyXG4uXHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnJlY2VpdmVkX2RhdGEsICcuJykKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX1JDUFQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ01BSUwgRnJvbTplZ2dzQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOnNwYW1AZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgVG86aGFtQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidEQVRBJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInZGF0YVxyXG4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcnZlci5tZXNzYWdlcywKKyAgICAgICAgICAgIFsoJ3BlZXInLCAnZWdnc0BleGFtcGxlJywgWydzcGFtQGV4YW1wbGUnLCdoYW1AZXhhbXBsZSddLCAnZGF0YScpXSkKKworICAgIGRlZiB0ZXN0X21hbnVhbF9zdGF0dXMoc2VsZik6CisgICAgICAgICMgY2hlY2tzIHRoYXQgdGhlIENoYW5uZWwgaXMgYWJsZSB0byByZXR1cm4gYSBjdXN0b20gc3RhdHVzIG1lc3NhZ2UKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgVG86c3BhbUBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInREFUQScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ3JldHVybiBzdGF0dXNcclxuLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPa2lzaFxyXG4nKQorCisgICAgZGVmIHRlc3RfUlNFVChzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInTUFJTCBGcm9tOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JDUFQgVG86c3BhbUBleGFtcGxlJykKKyAgICAgICAgc2VsZi53cml0ZV9saW5lKGInUlNFVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jaGFubmVsLnNvY2tldC5sYXN0LCBiJzI1MCBPa1xyXG4nKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidNQUlMIEZyb206Zm9vQGV4YW1wbGUnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidSQ1BUIFRvOmVnZ3NAZXhhbXBsZScpCisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ0RBVEEnKQorICAgICAgICBzZWxmLndyaXRlX2xpbmUoYidkYXRhXHJcbi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2VydmVyLm1lc3NhZ2VzLAorICAgICAgICAgICAgWygncGVlcicsICdmb29AZXhhbXBsZScsIFsnZWdnc0BleGFtcGxlJ10sICdkYXRhJyldKQorCisgICAgZGVmIHRlc3RfUlNFVF9zeW50YXgoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfbGluZShiJ1JTRVQgaGknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2hhbm5lbC5zb2NrZXQubGFzdCwgYic1MDEgU3ludGF4OiBSU0VUXHJcbicpCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfZGVwcmVjYXRpb25zKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzcGFtID0gc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fc2VydmVyCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX3NlcnZlciA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzcGFtID0gc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fbGluZQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19saW5lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNwYW0gPSBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19zdGF0ZQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19zdGF0ZSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzcGFtID0gc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fZ3JlZXRpbmcKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fZ3JlZXRpbmcgPSAnc3BhbScKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc3BhbSA9IHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX21haWxmcm9tCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX21haWxmcm9tID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNwYW0gPSBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19yY3B0dG9zCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX3JjcHR0b3MgPSAnc3BhbScKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc3BhbSA9IHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX2RhdGEKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fZGF0YSA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzcGFtID0gc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fZnFkbgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19mcWRuID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNwYW0gPSBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19wZWVyCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX3BlZXIgPSAnc3BhbScKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc3BhbSA9IHNlbGYuY2hhbm5lbC5fU01UUENoYW5uZWxfX2Nvbm4KKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fY29ubiA9ICdzcGFtJworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzcGFtID0gc2VsZi5jaGFubmVsLl9TTVRQQ2hhbm5lbF9fYWRkcgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmNoYW5uZWwuX1NNVFBDaGFubmVsX19hZGRyID0gJ3NwYW0nCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChTTVRQRFNlcnZlclRlc3QsIFNNVFBEQ2hhbm5lbFRlc3QpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQppbmRleCA3MjdlZjgzLi40NjUxZjM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CkBAIC0xLDE2ICsxLDIyIEBACiBpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBlbWFpbC5taW1lLnRleHQKIGltcG9ydCBlbWFpbC51dGlscwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHNtdHBkCiBpbXBvcnQgc210cGxpYgogaW1wb3J0IGlvCitpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgc2VsZWN0CiAKLWZyb20gdW5pdHRlc3QgaW1wb3J0IFRlc3RDYXNlCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBtb2NrX3NvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHRocmVhZGluZworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRocmVhZGluZyA9IE5vbmUKIAogSE9TVCA9IHN1cHBvcnQuSE9TVAogCkBAIC00NCw0OCArNTAsNTUgQEAKICAgICAgICAgc2Vydi5jbG9zZSgpCiAgICAgICAgIGV2dC5zZXQoKQogCi1jbGFzcyBHZW5lcmFsVGVzdHMoVGVzdENhc2UpOgorY2xhc3MgR2VuZXJhbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDE1KQotICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCi0gICAgICAgIHNlcnZhcmdzID0gKHNlbGYuZXZ0LCBiIjIyMCBIb2xhIG11bmRvXG4iLCBzZWxmLnNvY2spCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlcnZlciwgYXJncz1zZXJ2YXJncykuc3RhcnQoKQotICAgICAgICBzZWxmLmV2dC53YWl0KCkKLSAgICAgICAgc2VsZi5ldnQuY2xlYXIoKQorICAgICAgICBzbXRwbGliLnNvY2tldCA9IG1vY2tfc29ja2V0CisgICAgICAgIHNlbGYucG9ydCA9IDI1CiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuZXZ0LndhaXQoKQorICAgICAgICBzbXRwbGliLnNvY2tldCA9IHNvY2tldAorCisgICAgIyBUaGlzIG1ldGhvZCBpcyBubyBsb25nZXIgdXNlZCBidXQgaXMgcmV0YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksCisgICAgIyBzbyB0ZXN0IHRvIG1ha2Ugc3VyZSBpdCBzdGlsbCB3b3Jrcy4KKyAgICBkZWYgdGVzdFF1b3RlRGF0YShzZWxmKToKKyAgICAgICAgdGVzdHN0ciAgPSAiYWJjXG4uamtsXHJmb29cclxuLi5ibHVlIgorICAgICAgICBleHBlY3RlZCA9ICJhYmNcclxuLi5qa2xcclxuZm9vXHJcbi4uLmJsdWUiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHNtdHBsaWIucXVvdGVkYXRhKHRlc3RzdHIpKQogCiAgICAgZGVmIHRlc3RCYXNpYzEoc2VsZik6CisgICAgICAgIG1vY2tfc29ja2V0LnJlcGx5X3dpdGgoYiIyMjAgSG9sYSBtdW5kbyIpCiAgICAgICAgICMgY29ubmVjdHMKICAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RCYXNpYzIoc2VsZik6CisgICAgICAgIG1vY2tfc29ja2V0LnJlcGx5X3dpdGgoYiIyMjAgSG9sYSBtdW5kbyIpCiAgICAgICAgICMgY29ubmVjdHMsIGluY2x1ZGUgcG9ydCBpbiBob3N0IG5hbWUKICAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUCgiJXM6JXMiICUgKEhPU1QsIHNlbGYucG9ydCkpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RMb2NhbEhvc3ROYW1lKHNlbGYpOgorICAgICAgICBtb2NrX3NvY2tldC5yZXBseV93aXRoKGIiMjIwIEhvbGEgbXVuZG8iKQogICAgICAgICAjIGNoZWNrIHRoYXQgc3VwcGxpZWQgbG9jYWxfaG9zdG5hbWUgaXMgdXNlZAogICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9InRlc3Rob3N0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvY2FsX2hvc3RuYW1lLCAidGVzdGhvc3QiKQogICAgICAgICBzbXRwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0VGltZW91dERlZmF1bHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrZXQuZ2V0ZGVmYXVsdHRpbWVvdXQoKSBpcyBOb25lKQotICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoMzApCisgICAgICAgIG1vY2tfc29ja2V0LnJlcGx5X3dpdGgoYiIyMjAgSG9sYSBtdW5kbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX3NvY2tldC5nZXRkZWZhdWx0dGltZW91dCgpIGlzIE5vbmUpCisgICAgICAgIG1vY2tfc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCksIDMwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dChOb25lKQorICAgICAgICAgICAgbW9ja19zb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKICAgICAgICAgc210cC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdFRpbWVvdXROb25lKHNlbGYpOgorICAgICAgICBtb2NrX3NvY2tldC5yZXBseV93aXRoKGIiMjIwIEhvbGEgbXVuZG8iKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogICAgICAgICB0cnk6CkBAIC05Niw2ICsxMDksNyBAQAogICAgICAgICBzbXRwLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0VGltZW91dFZhbHVlKHNlbGYpOgorICAgICAgICBtb2NrX3NvY2tldC5yZXBseV93aXRoKGIiMjIwIEhvbGEgbXVuZG8iKQogICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgdGltZW91dD0zMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvY2suZ2V0dGltZW91dCgpLCAzMCkKICAgICAgICAgc210cC5jbG9zZSgpCkBAIC0xNDIsMzQgKzE1Niw1MCBAQAogIyB0ZXN0IHNlcnZlciB0aW1lcyBvdXQsIGNhdXNpbmcgdGhlIHRlc3QgdG8gZmFpbC4KIAogIyBUZXN0IGJlaGF2aW9yIG9mIHNtdHBkLkRlYnVnZ2luZ1NlcnZlcgotY2xhc3MgRGVidWdnaW5nU2VydmVyVGVzdHMoVGVzdENhc2UpOgorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIERlYnVnZ2luZ1NlcnZlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIG1heERpZmYgPSBOb25lCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucmVhbF9nZXRmcWRuID0gc29ja2V0LmdldGZxZG4KKyAgICAgICAgc29ja2V0LmdldGZxZG4gPSBtb2NrX3NvY2tldC5nZXRmcWRuCiAgICAgICAgICMgdGVtcG9yYXJpbHkgcmVwbGFjZSBzeXMuc3Rkb3V0IHRvIGNhcHR1cmUgRGVidWdnaW5nU2VydmVyIG91dHB1dAogICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYub3V0cHV0ID0gaW8uU3RyaW5nSU8oKQogICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vdXRwdXQKIAorICAgICAgICBzZWxmLl90aHJlYWRzID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgIyBDYXB0dXJlIFNNVFBDaGFubmVsIGRlYnVnIG91dHB1dAorICAgICAgICBzZWxmLm9sZF9ERUJVR1NUUkVBTSA9IHNtdHBkLkRFQlVHU1RSRUFNCisgICAgICAgIHNtdHBkLkRFQlVHU1RSRUFNID0gaW8uU3RyaW5nSU8oKQogICAgICAgICAjIFBpY2sgYSByYW5kb20gdW51c2VkIHBvcnQgYnkgcGFzc2luZyAwIGZvciB0aGUgcG9ydCBudW1iZXIKICAgICAgICAgc2VsZi5zZXJ2ID0gc210cGQuRGVidWdnaW5nU2VydmVyKChIT1NULCAwKSwgKCdub3doZXJlJywgLTEpKQogICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQogCiAgICAgICAgICMgd2FpdCB1bnRpbCBzZXJ2ZXIgdGhyZWFkIGhhcyBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyCiAgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCiAgICAgICAgIHNlbGYuc2Vydl9ldnQuY2xlYXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzb2NrZXQuZ2V0ZnFkbiA9IHNlbGYucmVhbF9nZXRmcWRuCiAgICAgICAgICMgaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IGlzIGZpbmlzaGVkCiAgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQogICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKICAgICAgICAgIyByZXN0b3JlIHN5cy5zdGRvdXQKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dAorICAgICAgICAjIHJlc3RvcmUgREVCVUdTVFJFQU0KKyAgICAgICAgc210cGQuREVCVUdTVFJFQU0uY2xvc2UoKQorICAgICAgICBzbXRwZC5ERUJVR1NUUkVBTSA9IHNlbGYub2xkX0RFQlVHU1RSRUFNCiAKICAgICBkZWYgdGVzdEJhc2ljKHNlbGYpOgogICAgICAgICAjIGNvbm5lY3QKQEAgLTIzNCw4ICsyNjQsMTAzIEBACiAgICAgICAgIG1leHBlY3QgPSAnJXMlc1xuJXMnICUgKE1TR19CRUdJTiwgbSwgTVNHX0VORCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm91dHB1dC5nZXR2YWx1ZSgpLCBtZXhwZWN0KQogCisgICAgZGVmIHRlc3RTZW5kQmluYXJ5KHNlbGYpOgorICAgICAgICBtID0gYidBIHRlc3QgbWVzc2FnZScKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTMpCisgICAgICAgIHNtdHAuc2VuZG1haWwoJ0pvaG4nLCAnU2FsbHknLCBtKQorICAgICAgICAjIFhYWCAoc2VlIGNvbW1lbnQgaW4gdGVzdFNlbmQpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc210cC5xdWl0KCkKIAotY2xhc3MgTm9uQ29ubmVjdGluZ1Rlc3RzKFRlc3RDYXNlKToKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0LmZsdXNoKCkKKyAgICAgICAgbWV4cGVjdCA9ICclcyVzXG4lcycgJSAoTVNHX0JFR0lOLCBtLmRlY29kZSgnYXNjaWknKSwgTVNHX0VORCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm91dHB1dC5nZXR2YWx1ZSgpLCBtZXhwZWN0KQorCisgICAgZGVmIHRlc3RTZW5kTWVzc2FnZShzZWxmKToKKyAgICAgICAgbSA9IGVtYWlsLm1pbWUudGV4dC5NSU1FVGV4dCgnQSB0ZXN0IG1lc3NhZ2UnKQorICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc210cC5zZW5kX21lc3NhZ2UobSwgZnJvbV9hZGRyPSdKb2huJywgdG9fYWRkcnM9J1NhbGx5JykKKyAgICAgICAgIyBYWFggKHNlZSBjb21tZW50IGluIHRlc3RTZW5kKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0LmZsdXNoKCkKKyAgICAgICAgIyBBZGQgdGhlIFgtUGVlciBoZWFkZXIgdGhhdCBEZWJ1Z2dpbmdTZXJ2ZXIgYWRkcworICAgICAgICAjIFhYWDogSSdtIG5vdCBzdXJlIGhhcmRjb2RpbmcgdGhpcyBJUCB3aWxsIHdvcmsgb24gbGludXgtdnNlcnZlci4KKyAgICAgICAgbVsnWC1QZWVyJ10gPSAnMTI3LjAuMC4xJworICAgICAgICBtZXhwZWN0ID0gJyVzJXNcbiVzJyAlIChNU0dfQkVHSU4sIG0uYXNfc3RyaW5nKCksIE1TR19FTkQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vdXRwdXQuZ2V0dmFsdWUoKSwgbWV4cGVjdCkKKworICAgIGRlZiB0ZXN0U2VuZE1lc3NhZ2VXaXRoQWRkcmVzc2VzKHNlbGYpOgorICAgICAgICBtID0gZW1haWwubWltZS50ZXh0Lk1JTUVUZXh0KCdBIHRlc3QgbWVzc2FnZScpCisgICAgICAgIG1bJ0Zyb20nXSA9ICdmb29AYmFyLmNvbScKKyAgICAgICAgbVsnVG8nXSA9ICdKb2huJworICAgICAgICBtWydDQyddID0gJ1NhbGx5LCBGcmVkJworICAgICAgICBtWydCY2MnXSA9ICdKb2huIFJvb3QgPHJvb3RAbG9jYWxob3N0PiwgIkRpbnNkYWxlIiA8d2FycGVkQHNpbGx5LndhbGtzLmNvbT4nCisgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0zKQorICAgICAgICBzbXRwLnNlbmRfbWVzc2FnZShtKQorICAgICAgICAjIFhYWCAoc2VlIGNvbW1lbnQgaW4gdGVzdFNlbmQpCisgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc210cC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudF9ldnQuc2V0KCkKKyAgICAgICAgc2VsZi5zZXJ2X2V2dC53YWl0KCkKKyAgICAgICAgc2VsZi5vdXRwdXQuZmx1c2goKQorICAgICAgICAjIEFkZCB0aGUgWC1QZWVyIGhlYWRlciB0aGF0IERlYnVnZ2luZ1NlcnZlciBhZGRzCisgICAgICAgICMgWFhYOiBJJ20gbm90IHN1cmUgaGFyZGNvZGluZyB0aGlzIElQIHdpbGwgd29yayBvbiBsaW51eC12c2VydmVyLgorICAgICAgICBtWydYLVBlZXInXSA9ICcxMjcuMC4wLjEnCisgICAgICAgICMgVGhlIEJjYyBoZWFkZXIgaXMgZGVsZXRlZCBiZWZvcmUgc2VyaWFsaXphdGlvbi4KKyAgICAgICAgZGVsIG1bJ0JjYyddCisgICAgICAgIG1leHBlY3QgPSAnJXMlc1xuJXMnICUgKE1TR19CRUdJTiwgbS5hc19zdHJpbmcoKSwgTVNHX0VORCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm91dHB1dC5nZXR2YWx1ZSgpLCBtZXhwZWN0KQorICAgICAgICBkZWJ1Z291dCA9IHNtdHBkLkRFQlVHU1RSRUFNLmdldHZhbHVlKCkKKyAgICAgICAgc2VuZGVyID0gcmUuY29tcGlsZSgiXnNlbmRlcjogZm9vQGJhci5jb20kIiwgcmUuTVVMVElMSU5FKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGRlYnVnb3V0LCBzZW5kZXIpCisgICAgICAgIGZvciBhZGRyIGluICgnSm9obicsICdTYWxseScsICdGcmVkJywgJ3Jvb3RAbG9jYWxob3N0JywKKyAgICAgICAgICAgICAgICAgICAgICd3YXJwZWRAc2lsbHkud2Fsa3MuY29tJyk6CisgICAgICAgICAgICB0b19hZGRyID0gcmUuY29tcGlsZShyIl5yZWNpcHM6IC4qJ3t9Jy4qJCIuZm9ybWF0KGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUuTVVMVElMSU5FKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChkZWJ1Z291dCwgdG9fYWRkcikKKworICAgIGRlZiB0ZXN0U2VuZE1lc3NhZ2VXaXRoU29tZUFkZHJlc3NlcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgbm90aGluZyBicmVha3MgaWYgbm90IGFsbCBvZiB0aGUgdGhyZWUgJ3RvJyBoZWFkZXJzIGV4aXN0CisgICAgICAgIG0gPSBlbWFpbC5taW1lLnRleHQuTUlNRVRleHQoJ0EgdGVzdCBtZXNzYWdlJykKKyAgICAgICAgbVsnRnJvbSddID0gJ2Zvb0BiYXIuY29tJworICAgICAgICBtWydUbyddID0gJ0pvaG4sIERpbnNkYWxlJworICAgICAgICBzbXRwID0gc210cGxpYi5TTVRQKEhPU1QsIHNlbGYucG9ydCwgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsIHRpbWVvdXQ9MykKKyAgICAgICAgc210cC5zZW5kX21lc3NhZ2UobSkKKyAgICAgICAgIyBYWFggKHNlZSBjb21tZW50IGluIHRlc3RTZW5kKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgIHNtdHAucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnRfZXZ0LnNldCgpCisgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCisgICAgICAgIHNlbGYub3V0cHV0LmZsdXNoKCkKKyAgICAgICAgIyBBZGQgdGhlIFgtUGVlciBoZWFkZXIgdGhhdCBEZWJ1Z2dpbmdTZXJ2ZXIgYWRkcworICAgICAgICAjIFhYWDogSSdtIG5vdCBzdXJlIGhhcmRjb2RpbmcgdGhpcyBJUCB3aWxsIHdvcmsgb24gbGludXgtdnNlcnZlci4KKyAgICAgICAgbVsnWC1QZWVyJ10gPSAnMTI3LjAuMC4xJworICAgICAgICBtZXhwZWN0ID0gJyVzJXNcbiVzJyAlIChNU0dfQkVHSU4sIG0uYXNfc3RyaW5nKCksIE1TR19FTkQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vdXRwdXQuZ2V0dmFsdWUoKSwgbWV4cGVjdCkKKyAgICAgICAgZGVidWdvdXQgPSBzbXRwZC5ERUJVR1NUUkVBTS5nZXR2YWx1ZSgpCisgICAgICAgIHNlbmRlciA9IHJlLmNvbXBpbGUoIl5zZW5kZXI6IGZvb0BiYXIuY29tJCIsIHJlLk1VTFRJTElORSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChkZWJ1Z291dCwgc2VuZGVyKQorICAgICAgICBmb3IgYWRkciBpbiAoJ0pvaG4nLCAnRGluc2RhbGUnKToKKyAgICAgICAgICAgIHRvX2FkZHIgPSByZS5jb21waWxlKHIiXnJlY2lwczogLione30nLiokIi5mb3JtYXQoYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5NVUxUSUxJTkUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGRlYnVnb3V0LCB0b19hZGRyKQorCisKK2NsYXNzIE5vbkNvbm5lY3RpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNtdHBsaWIuc29ja2V0ID0gbW9ja19zb2NrZXQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc210cGxpYi5zb2NrZXQgPSBzb2NrZXQKIAogICAgIGRlZiB0ZXN0Tm90Q29ubmVjdGVkKHNlbGYpOgogICAgICAgICAjIFRlc3QgdmFyaW91cyBvcGVyYXRpb25zIG9uIGFuIHVuY29ubmVjdGVkIFNNVFAgb2JqZWN0IHRoYXQKQEAgLTI0OSwzMSArMzc0LDI2IEBACiAKICAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgogICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhtb2NrX3NvY2tldC5lcnJvciwgc210cGxpYi5TTVRQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibG9jYWxob3N0IiwgImJvZ3VzIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2NhbGhvc3Q6Ym9ndXMiKQogCiAKICMgdGVzdCByZXNwb25zZSBvZiBjbGllbnQgdG8gYSBub24tc3VjY2Vzc2Z1bCBIRUxPIG1lc3NhZ2UKLWNsYXNzIEJhZEhFTE9TZXJ2ZXJUZXN0cyhUZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorY2xhc3MgQmFkSEVMT1NlcnZlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc210cGxpYi5zb2NrZXQgPSBtb2NrX3NvY2tldAorICAgICAgICBtb2NrX3NvY2tldC5yZXBseV93aXRoKGIiMTk5IG5vIGhlbGxvIGZvciB5b3UhIikKICAgICAgICAgc2VsZi5vbGRfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLm91dHB1dCA9IGlvLlN0cmluZ0lPKCkKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub3V0cHV0Ci0KLSAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KDE1KQotICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNvY2spCi0gICAgICAgIHNlcnZhcmdzID0gKHNlbGYuZXZ0LCBiIjE5OSBubyBoZWxsbyBmb3IgeW91IVxuIiwgc2VsZi5zb2NrKQotICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZXJ2ZXIsIGFyZ3M9c2VydmFyZ3MpLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5ldnQud2FpdCgpCi0gICAgICAgIHNlbGYuZXZ0LmNsZWFyKCkKKyAgICAgICAgc2VsZi5wb3J0ID0gMjUKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5ldnQud2FpdCgpCisgICAgICAgIHNtdHBsaWIuc29ja2V0ID0gc29ja2V0CiAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLm9sZF9zdGRvdXQKIAogICAgIGRlZiB0ZXN0RmFpbGluZ0hFTE8oc2VsZik6CkBAIC0zNTUsNiArNDc1LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTUwIE5vIGFjY2VzcyBmb3IgeW91IScpCiAKKyAgICBkZWYgaGFuZGxlX2Vycm9yKHNlbGYpOgorICAgICAgICByYWlzZQorCiAKIGNsYXNzIFNpbVNNVFBTZXJ2ZXIoc210cGQuU01UUFNlcnZlcik6CiAKQEAgLTM2Miw4ICs0ODUsNyBAQAogICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcyA9IFtdCiAgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCiAKLSAgICBkZWYgaGFuZGxlX2FjY2VwdChzZWxmKToKLSAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuYWNjZXB0KCkKKyAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIGNvbm4sIGFkZHIpOgogICAgICAgICBzZWxmLl9TTVRQY2hhbm5lbCA9IFNpbVNNVFBDaGFubmVsKHNlbGYuX2V4dHJhX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGNvbm4sIGFkZHIpCiAKQEAgLTM3MywxMiArNDk1LDE5IEBACiAgICAgZGVmIGFkZF9mZWF0dXJlKHNlbGYsIGZlYXR1cmUpOgogICAgICAgICBzZWxmLl9leHRyYV9mZWF0dXJlcy5hcHBlbmQoZmVhdHVyZSkKIAorICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHJhaXNlCisKIAogIyBUZXN0IHZhcmlvdXMgU01UUCAmIEVTTVRQIGNvbW1hbmRzL2JlaGF2aW9ycyB0aGF0IHJlcXVpcmUgYSBzaW11bGF0ZWQgc2VydmVyCiAjIChpLmUuLCBzb21ldGhpbmcgd2l0aCBtb3JlIGZlYXR1cmVzIHRoYW4gRGVidWdnaW5nU2VydmVyKQotY2xhc3MgU01UUFNpbVRlc3RzKFRlc3RDYXNlKToKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBTTVRQU2ltVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnJlYWxfZ2V0ZnFkbiA9IHNvY2tldC5nZXRmcWRuCisgICAgICAgIHNvY2tldC5nZXRmcWRuID0gbW9ja19zb2NrZXQuZ2V0ZnFkbgorICAgICAgICBzZWxmLl90aHJlYWRzID0gc3VwcG9ydC50aHJlYWRpbmdfc2V0dXAoKQogICAgICAgICBzZWxmLnNlcnZfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgc2VsZi5jbGllbnRfZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgIyBQaWNrIGEgcmFuZG9tIHVudXNlZCBwb3J0IGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHBvcnQgbnVtYmVyCkBAIC0zODYsMTcgKzUxNSwyMSBAQAogICAgICAgICAjIEtlZXAgYSBub3RlIG9mIHdoYXQgcG9ydCB3YXMgYXNzaWduZWQKICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgIHNlcnZfYXJncyA9IChzZWxmLnNlcnYsIHNlbGYuc2Vydl9ldnQsIHNlbGYuY2xpZW50X2V2dCkKLSAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZGVidWdnaW5nX3NlcnZlciwgYXJncz1zZXJ2X2FyZ3MpLnN0YXJ0KCkKKyAgICAgICAgc2VsZi50aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1kZWJ1Z2dpbmdfc2VydmVyLCBhcmdzPXNlcnZfYXJncykKKyAgICAgICAgc2VsZi50aHJlYWQuc3RhcnQoKQogCiAgICAgICAgICMgd2FpdCB1bnRpbCBzZXJ2ZXIgdGhyZWFkIGhhcyBhc3NpZ25lZCBhIHBvcnQgbnVtYmVyCiAgICAgICAgIHNlbGYuc2Vydl9ldnQud2FpdCgpCiAgICAgICAgIHNlbGYuc2Vydl9ldnQuY2xlYXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzb2NrZXQuZ2V0ZnFkbiA9IHNlbGYucmVhbF9nZXRmcWRuCiAgICAgICAgICMgaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50IGlzIGZpbmlzaGVkCiAgICAgICAgIHNlbGYuY2xpZW50X2V2dC5zZXQoKQogICAgICAgICAjIHdhaXQgZm9yIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQogICAgICAgICBzZWxmLnNlcnZfZXZ0LndhaXQoKQorICAgICAgICBzZWxmLnRocmVhZC5qb2luKCkKKyAgICAgICAgc3VwcG9ydC50aHJlYWRpbmdfY2xlYW51cCgqc2VsZi5fdGhyZWFkcykKIAogICAgIGRlZiB0ZXN0QmFzaWMoc2VsZik6CiAgICAgICAgICMgc21va2UgdGVzdApAQCAtNDYwLDYgKzU5Myw3IEBACiAKICAgICAgICAgZXhwZWN0ZWRfYXV0aF9vayA9ICgyMzUsIGIncGxhaW4gYXV0aCBvaycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc210cC5sb2dpbihzaW1fYXV0aFswXSwgc2ltX2F1dGhbMV0pLCBleHBlY3RlZF9hdXRoX29rKQorICAgICAgICBzbXRwLmNsb3NlKCkKIAogICAgICMgU2ltU01UUENoYW5uZWwgZG9lc24ndCBmdWxseSBzdXBwb3J0IExPR0lOIG9yIENSQU0tTUQ1IGF1dGggYmVjYXVzZSB0aGV5CiAgICAgIyByZXF1aXJlIGEgc3luY2hyb25vdXMgcmVhZCB0byBvYnRhaW4gdGhlIGNyZWRlbnRpYWxzLi4uc28gaW5zdGVhZCBzbXRwZApAQCAtNDc0LDggKzYwOCw4IEBACiAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoSE9TVCwgc2VsZi5wb3J0LCBsb2NhbF9ob3N0bmFtZT0nbG9jYWxob3N0JywgdGltZW91dD0xNSkKICAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKICAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgc2ltX2F1dGhfbG9naW5fcGFzc3dvcmQgbm90IGluIHN0cihlcnIpOgotICAgICAgICAgICAgICAgIHJhaXNlICJleHBlY3RlZCBlbmNvZGVkIHBhc3N3b3JkIG5vdCBmb3VuZCBpbiBlcnJvciBtZXNzYWdlIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9sb2dpbl9wYXNzd29yZCwgc3RyKGVycikpCisgICAgICAgIHNtdHAuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RBVVRIX0NSQU1fTUQ1KHNlbGYpOgogICAgICAgICBzZWxmLnNlcnYuYWRkX2ZlYXR1cmUoIkFVVEggQ1JBTS1NRDUiKQpAQCAtNDgzLDggKzYxNyw4IEBACiAKICAgICAgICAgdHJ5OiBzbXRwLmxvZ2luKHNpbV9hdXRoWzBdLCBzaW1fYXV0aFsxXSkKICAgICAgICAgZXhjZXB0IHNtdHBsaWIuU01UUEF1dGhlbnRpY2F0aW9uRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgc2ltX2F1dGhfY3JlZGVudGlhbHNbJ2NyYW0tbWQ1J10gbm90IGluIHN0cihlcnIpOgotICAgICAgICAgICAgICAgIHJhaXNlICJleHBlY3RlZCBlbmNvZGVkIGNyZWRlbnRpYWxzIG5vdCBmb3VuZCBpbiBlcnJvciBtZXNzYWdlIgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9jcmVkZW50aWFsc1snY3JhbS1tZDUnXSwgc3RyKGVycikpCisgICAgICAgIHNtdHAuY2xvc2UoKQogCiAgICAgI1RPRE86IGFkZCB0ZXN0cyBmb3IgY29ycmVjdCBBVVRIIG1ldGhvZCBmYWxsYmFjayBub3cgdGhhdCB0aGUKICAgICAjdGVzdCBpbmZyYXN0cnVjdHVyZSBjYW4gc3VwcG9ydCBpdC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQppbmRleCA2NjM0ZGY3Li5mMGYxZWRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IDY3YzU0MTMuLmU3NDU1MDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC0xLDIzICsxLDI3IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IGVycm5vCitpbXBvcnQgaW8KIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKLWltcG9ydCBfdGhyZWFkIGFzIHRocmVhZAotaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBxdWV1ZQogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgYXJyYXkKK2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IGNvbnRleHRsaWIKIGZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKIGltcG9ydCBzaWduYWwKIGltcG9ydCBtYXRoCit0cnk6CisgICAgaW1wb3J0IGZjbnRsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZmNudGwgPSBGYWxzZQogCiBkZWYgdHJ5X2FkZHJlc3MoaG9zdCwgcG9ydD0wLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpOgogICAgICIiIlRyeSB0byBiaW5kIGEgc29ja2V0IG9uIHRoZSBnaXZlbiBob3N0OnBvcnQgYW5kIHJldHVybiBUcnVlCkBAIC0zMSwxMCArMzUsMjUgQEAKICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCiAKK2RlZiBsaW51eF92ZXJzaW9uKCk6CisgICAgdHJ5OgorICAgICAgICAjIHBsYXRmb3JtLnJlbGVhc2UoKSBpcyBzb21ldGhpbmcgbGlrZSAnMi42LjMzLjctZGVza3RvcC0ybW5iJworICAgICAgICB2ZXJzaW9uX3N0cmluZyA9IHBsYXRmb3JtLnJlbGVhc2UoKS5zcGxpdCgnLScpWzBdCisgICAgICAgIHJldHVybiB0dXBsZShtYXAoaW50LCB2ZXJzaW9uX3N0cmluZy5zcGxpdCgnLicpKSkKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgcmV0dXJuIDAsIDAsIDAKKwogSE9TVCA9IHN1cHBvcnQuSE9TVAogTVNHID0gJ01pY2hhZWwgR2lsZml4IHdhcyBoZXJlXHUxMjM0XHJcbicuZW5jb2RlKCd1dGY4JykgIyMgdGVzdCB1bmljb2RlIHN0cmluZyBhbmQgY2FycmlhZ2UgcmV0dXJuCiBTVVBQT1JUU19JUFY2ID0gc29ja2V0Lmhhc19pcHY2IGFuZCB0cnlfYWRkcmVzcygnOjoxJywgZmFtaWx5PXNvY2tldC5BRl9JTkVUNikKIAordHJ5OgorICAgIGltcG9ydCBfdGhyZWFkIGFzIHRocmVhZAorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWQgPSBOb25lCisgICAgdGhyZWFkaW5nID0gTm9uZQorCiBjbGFzcyBTb2NrZXRUQ1BUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTEzMiw4ICsxNTEsOCBAQAogICAgICAgICBzZWxmLmRvbmUud2FpdCgpCiAKICAgICAgICAgaWYgc2VsZi5xdWV1ZS5xc2l6ZSgpOgotICAgICAgICAgICAgbXNnID0gc2VsZi5xdWV1ZS5nZXQoKQotICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKKyAgICAgICAgICAgIGV4YyA9IHNlbGYucXVldWUuZ2V0KCkKKyAgICAgICAgICAgIHJhaXNlIGV4YwogCiAgICAgZGVmIGNsaWVudFJ1bihzZWxmLCB0ZXN0X2Z1bmMpOgogICAgICAgICBzZWxmLnNlcnZlcl9yZWFkeS53YWl0KCkKQEAgLTE0Myw5ICsxNjIsMTAgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidGVzdF9mdW5jIG11c3QgYmUgYSBjYWxsYWJsZSBmdW5jdGlvbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RfZnVuYygpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgc3RyZXJyb3I6Ci0gICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChzdHJlcnJvcikKLSAgICAgICAgc2VsZi5jbGllbnRUZWFyRG93bigpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dChlKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5jbGllbnRUZWFyRG93bigpCiAKICAgICBkZWYgY2xpZW50U2V0VXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImNsaWVudFNldFVwIG11c3QgYmUgaW1wbGVtZW50ZWQuIikKQEAgLTI0NCw2ICsyNjQsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHMpLnN0YXJ0c3dpdGgoIjxzb2NrZXQuc29ja2V0IG9iamVjdCIpKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKQEAgLTUxNyw2ICs1MzgsNyBAQAogICAgICAgICAjIFRlc3RpbmcgZ2V0c29ja25hbWUoKQogICAgICAgICBwb3J0ID0gc2VsZi5fZ2V0X3VudXNlZF9wb3J0KCkKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHNvY2suYmluZCgoIjAuMC4wLjAiLCBwb3J0KSkKICAgICAgICAgbmFtZSA9IHNvY2suZ2V0c29ja25hbWUoKQogICAgICAgICAjIFhYWChubm9yd2l0eik6IGh0dHA6Ly90aW55dXJsLmNvbS9vczVqeiBzZWVtcyB0byBpbmRpY2F0ZQpAQCAtNTI3LDE5ICs1NDksMjEgQEAKICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZVswXSBpbiAoIjAuMC4wLjAiLCBteV9pcF9hZGRyKSwgJyVzIGludmFsaWQnICUgbmFtZVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lWzBdLCAoIjAuMC4wLjAiLCBteV9pcF9hZGRyKSwgJyVzIGludmFsaWQnICUgbmFtZVswXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lWzFdLCBwb3J0KQogCiAgICAgZGVmIHRlc3RHZXRTb2NrT3B0KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgZ2V0c29ja29wdCgpCiAgICAgICAgICMgV2Uga25vdyBhIHNvY2tldCBzaG91bGQgc3RhcnQgd2l0aG91dCByZXVzZT09MAogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKICAgICAgICAgcmV1c2UgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV1c2UgIT0gMCwgImluaXRpYWwgbW9kZSBpcyByZXVzZSIpCiAKICAgICBkZWYgdGVzdFNldFNvY2tPcHQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBzZXRzb2Nrb3B0KCkKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKICAgICAgICAgcmV1c2UgPSBzb2NrLmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmV1c2UgPT0gMCwgImZhaWxlZCB0byBzZXQgcmV1c2UgbW9kZSIpCkBAIC01NzIsMTMgKzU5NiwxNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc29jay5jbG9zZSgpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICJudCIsICJXaW5kb3dzIHNwZWNpZmljIikKICAgICBkZWYgdGVzdF9zb2NrX2lvY3RsKHNlbGYpOgotICAgICAgICBpZiBvcy5uYW1lICE9ICJudCI6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LnNvY2tldCwgJ2lvY3RsJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1NJT19SQ1ZBTEwnKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnUkNWQUxMX09OJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNvY2tldCwgJ1JDVkFMTF9PRkYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc29ja2V0LCAnU0lPX0tFRVBBTElWRV9WQUxTJykpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMuaW9jdGwsIC0xLCBOb25lKQorICAgICAgICBzLmlvY3RsKHNvY2tldC5TSU9fS0VFUEFMSVZFX1ZBTFMsICgxLCAxMDAsIDEwMCkpCiAKICAgICBkZWYgdGVzdEdldGFkZHJpbmZvKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC02MTcsNyArNjQ1LDQ2IEBACiAgICAgICAgICMgdXN1YWxseSBkbyB0aGlzCiAgICAgICAgIHNvY2tldC5nZXRhZGRyaW5mbyhOb25lLCAwLCBzb2NrZXQuQUZfVU5TUEVDLCBzb2NrZXQuU09DS19TVFJFQU0sIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuQUlfUEFTU0lWRSkKKyAgICAgICAgIyB0ZXN0IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIGEgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKKyAgICAgICAgYiA9IHNvY2tldC5nZXRhZGRyaW5mbyhob3N0PUhPU1QsIHBvcnQ9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICBhID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIHNvY2tldC5BRl9JTkVUKQorICAgICAgICBiID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICBhID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgYiA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICBhID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIDAsIDAsIHNvY2tldC5TT0xfVENQKQorICAgICAgICBiID0gc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIE5vbmUsIHByb3RvPXNvY2tldC5TT0xfVENQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgIGEgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgMCwgMCwgc29ja2V0LkFJX1BBU1NJVkUpCisgICAgICAgIGIgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgYSA9IHNvY2tldC5nZXRhZGRyaW5mbyhOb25lLCAwLCBzb2NrZXQuQUZfVU5TUEVDLCBzb2NrZXQuU09DS19TVFJFQU0sIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LkFJX1BBU1NJVkUpCisgICAgICAgIGIgPSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdD1Ob25lLCBwb3J0PTAsIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPXNvY2tldC5BSV9QQVNTSVZFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICMgSXNzdWUgIzY2OTcuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc29ja2V0LmdldGFkZHJpbmZvLCAnbG9jYWxob3N0JywgJ1x1RDgwMCcpCiAKKyAgICBkZWYgdGVzdF9nZXRuYW1laW5mbyhzZWxmKToKKyAgICAgICAgIyBvbmx5IElQIGFkZHJlc3NlcyBhcmUgYWxsb3dlZAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywgKCdtYWlsLnB5dGhvbi5vcmcnLDApLCAwKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmsgaXMgbm90IGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2lkbmEoc2VsZik6CisgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICAjIHRoZXNlIHNob3VsZCBhbGwgYmUgc3VjY2Vzc2Z1bAorICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSgn0LjRgdC/0YvRgtCw0L3QuNC1LnB5dGhvbi5vcmcnKQorICAgICAgICBzb2NrZXQuZ2V0aG9zdGJ5bmFtZV9leCgn0LjRgdC/0YvRgtCw0L3QuNC1LnB5dGhvbi5vcmcnKQorICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oJ9C40YHQv9GL0YLQsNC90LjQtS5weXRob24ub3JnJywwLHNvY2tldC5BRl9VTlNQRUMsc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAjIHRoaXMgbWF5IG5vdCB3b3JrIGlmIHRoZSBmb3J3YXJkIGxvb2t1cCBjaG9zZXMgdGhlIElQdjYgYWRkcmVzcywgYXMgdGhhdCBkb2Vzbid0CisgICAgICAgICMgaGF2ZSBhIHJldmVyc2UgZW50cnkgeWV0CisgICAgICAgICMgc29ja2V0LmdldGhvc3RieWFkZHIoJ9C40YHQv9GL0YLQsNC90LjQtS5weXRob24ub3JnJykKIAogICAgIGRlZiBjaGVja19zZW5kYWxsX2ludGVycnVwdGVkKHNlbGYsIHdpdGhfdGltZW91dCk6CiAgICAgICAgICMgc29ja2V0cGFpcigpIGlzIG5vdCBzdHJpY2x5IHJlcXVpcmVkLCBidXQgaXQgbWFrZXMgdGhpbmdzIGVhc2llci4KQEAgLTY1NCw3ICs3MjEsMzEgQEAKICAgICBkZWYgdGVzdF9zZW5kYWxsX2ludGVycnVwdGVkX3dpdGhfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19zZW5kYWxsX2ludGVycnVwdGVkKFRydWUpCiAKKyAgICBkZWYgdGVzdF9kZWFsbG9jX3dhcm4oc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHIgPSByZXByKHNvY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhSZXNvdXJjZVdhcm5pbmcpIGFzIGNtOgorICAgICAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ociwgc3RyKGNtLndhcm5pbmcuYXJnc1swXSkpCisgICAgICAgICMgQW4gb3BlbiBzb2NrZXQgZmlsZSBvYmplY3QgZ2V0cyBkZXJlZmVyZW5jZWQgYWZ0ZXIgdGhlIHNvY2tldAorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBmID0gc29jay5tYWtlZmlsZSgncmInKQorICAgICAgICByID0gcmVwcihzb2NrKQorICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUmVzb3VyY2VXYXJuaW5nKToKKyAgICAgICAgICAgIGYgPSBOb25lCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogCisgICAgZGVmIHRlc3RfbmFtZV9jbG9zZWRfc29ja2V0aW8oc2VsZik6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzb2NrOgorICAgICAgICAgICAgZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCisgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZnApLCAiPF9pby5CdWZmZXJlZFJlYWRlciBuYW1lPS0xPiIpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljVENQVGVzdChTb2NrZXRDb25uZWN0ZWRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC03MTIsMTAgKzgwMywxMCBAQAogCiAgICAgZGVmIHRlc3RGcm9tRmQoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBmcm9tZmQoKQotICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICJmcm9tZmQiKToKLSAgICAgICAgICAgIHJldHVybiAjIE9uIFdpbmRvd3MsIHRoaXMgZG9lc24ndCBleGlzdAogICAgICAgICBmZCA9IHNlbGYuY2xpX2Nvbm4uZmlsZW5vKCkKICAgICAgICAgc29jayA9IHNvY2tldC5mcm9tZmQoZmQsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc29jaywgc29ja2V0LnNvY2tldCkKICAgICAgICAgbXNnID0gc29jay5yZWN2KDEwMjQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAKQEAgLTcyNSw2ICs4MTYsNyBAQAogICAgIGRlZiB0ZXN0RHVwKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgZHVwKCkKICAgICAgICAgc29jayA9IHNlbGYuY2xpX2Nvbm4uZHVwKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIG1zZyA9IHNvY2sucmVjdigxMDI0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCkBAIC03NDQsNiArODM2LDI1IEBACiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoTVNHKQogICAgICAgICBzZWxmLnNlcnZfY29ubi5zaHV0ZG93bigyKQogCisgICAgZGVmIHRlc3REZXRhY2goc2VsZik6CisgICAgICAgICMgVGVzdGluZyBkZXRhY2goKQorICAgICAgICBmaWxlbm8gPSBzZWxmLmNsaV9jb25uLmZpbGVubygpCisgICAgICAgIGYgPSBzZWxmLmNsaV9jb25uLmRldGFjaCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZiwgZmlsZW5vKQorICAgICAgICAjIGNsaV9jb25uIGNhbm5vdCBiZSB1c2VkIGFueW1vcmUuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCisgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQorICAgICAgICAjIC4uLmJ1dCB3ZSBjYW4gY3JlYXRlIGFub3RoZXIgc29ja2V0IHVzaW5nIHRoZSAoc3RpbGwgb3BlbikKKyAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSwgZmlsZW5vPWYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzb2NrLmNsb3NlKQorICAgICAgICBtc2cgPSBzb2NrLnJlY3YoMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIGRlZiBfdGVzdERldGFjaChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X2Nvbm4uc2VuZChNU0cpCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBCYXNpY1VEUFRlc3QoVGhyZWFkZWRVRFBTb2NrZXRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC03NzIsNiArODgzLDcgQEAKICAgICBkZWYgX3Rlc3RSZWN2RnJvbU5lZ2F0aXZlKHNlbGYpOgogICAgICAgICBzZWxmLmNsaS5zZW5kdG8oTVNHLCAwLCAoSE9TVCwgc2VsZi5wb3J0KSkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIFRDUENsb3NlclRlc3QoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKIAogICAgIGRlZiB0ZXN0Q2xvc2Uoc2VsZik6CkBAIC03OTEsMTEgKzkwMywyNyBAQAogICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQogICAgICAgICB0aW1lLnNsZWVwKDEuMCkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljU29ja2V0UGFpclRlc3QoU29ja2V0UGFpclRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKICAgICAgICAgU29ja2V0UGFpclRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQogCisgICAgZGVmIF9jaGVja19kZWZhdWx0cyhzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNvY2ssIHNvY2tldC5zb2NrZXQpCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmZhbWlseSwgc29ja2V0LkFGX1VOSVgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suZmFtaWx5LCBzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQorCisgICAgZGVmIF90ZXN0RGVmYXVsdHMoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2RlZmF1bHRzKHNlbGYuY2xpKQorCisgICAgZGVmIHRlc3REZWZhdWx0cyhzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfZGVmYXVsdHMoc2VsZi5zZXJ2KQorCiAgICAgZGVmIHRlc3RSZWN2KHNlbGYpOgogICAgICAgICBtc2cgPSBzZWxmLnNlcnYucmVjdigxMDI0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQpAQCAtODEwLDYgKzkzOCw3IEBACiAgICAgICAgIG1zZyA9IHNlbGYuY2xpLnJlY3YoMTAyNCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIE5vbkJsb2NraW5nVENQVGVzdHMoVGhyZWFkZWRUQ1BTb2NrZXRUZXN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXRob2ROYW1lPSdydW5UZXN0Jyk6CkBAIC04MjksNiArOTU4LDQ3IEBACiAgICAgZGVmIF90ZXN0U2V0QmxvY2tpbmcoc2VsZik6CiAgICAgICAgIHBhc3MKIAorICAgIGlmIGhhc2F0dHIoc29ja2V0LCAiU09DS19OT05CTE9DSyIpOgorICAgICAgICBkZWYgdGVzdEluaXROb25CbG9ja2luZyhzZWxmKToKKyAgICAgICAgICAgIHYgPSBsaW51eF92ZXJzaW9uKCkKKyAgICAgICAgICAgIGlmIHYgPCAoMiwgNiwgMjgpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkxpbnV4IGtlcm5lbCAyLjYuMjggb3IgaGlnaGVyIHJlcXVpcmVkLCBub3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlICIuIi5qb2luKG1hcChzdHIsIHYpKSkKKyAgICAgICAgICAgICMgcmVpbml0IHNlcnZlciBzb2NrZXQKKyAgICAgICAgICAgIHNlbGYuc2Vydi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLnNlcnYgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfTk9OQkxPQ0spCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzdXBwb3J0LmJpbmRfcG9ydChzZWxmLnNlcnYpCisgICAgICAgICAgICBzZWxmLnNlcnYubGlzdGVuKDEpCisgICAgICAgICAgICAjIGFjdHVhbCB0ZXN0aW5nCisgICAgICAgICAgICBzdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVuZCA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKKworICAgICAgICBkZWYgX3Rlc3RJbml0Tm9uQmxvY2tpbmcoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEluaGVyaXRGbGFncyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzk5NTogd2hlbiBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgbGlzdGVuaW5nIHNvY2tldCB3aXRoIGEKKyAgICAgICAgIyB0aW1lb3V0LCB0aGUgcmVzdWx0aW5nIHNvY2tldCBzaG91bGQgbm90IGJlIG5vbi1ibG9ja2luZy4KKyAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoMTApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBjb25uLnJlY3YobGVuKE1TRykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2Vydi5zZXR0aW1lb3V0KE5vbmUpCisKKyAgICBkZWYgX3Rlc3RJbmhlcml0RmxhZ3Moc2VsZik6CisgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBzZWxmLmNsaS5jb25uZWN0KChIT1NULCBzZWxmLnBvcnQpKQorICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgc2VsZi5jbGkuc2VuZChNU0cpCisKICAgICBkZWYgdGVzdEFjY2VwdChzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG5vbi1ibG9ja2luZyBhY2NlcHQKICAgICAgICAgc2VsZi5zZXJ2LnNldGJsb2NraW5nKDApCkBAIC04NDEsNiArMTAxMSw3IEBACiAgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZdLCBbXSwgW10pCiAgICAgICAgIGlmIHNlbGYuc2VydiBpbiByZWFkOgogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBhY2NlcHQgYWZ0ZXIgc2VsZWN0LiIpCiAKQEAgLTg1MSw2ICsxMDIyLDcgQEAKICAgICBkZWYgdGVzdENvbm5lY3Qoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBub24tYmxvY2tpbmcgY29ubmVjdAogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uY2xvc2UoKQogCiAgICAgZGVmIF90ZXN0Q29ubmVjdChzZWxmKToKICAgICAgICAgc2VsZi5jbGkuc2V0dGltZW91dCgxMCkKQEAgLTg2OSw2ICsxMDQxLDcgQEAKICAgICAgICAgcmVhZCwgd3JpdGUsIGVyciA9IHNlbGVjdC5zZWxlY3QoW2Nvbm5dLCBbXSwgW10pCiAgICAgICAgIGlmIGNvbm4gaW4gcmVhZDoKICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdihsZW4oTVNHKSkKKyAgICAgICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgZHVyaW5nIHNlbGVjdCBjYWxsIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQuIikKQEAgLTg3OCw2ICsxMDUxLDcgQEAKICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIHNlbGYuY2xpLnNlbmQoTVNHKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgRmlsZU9iamVjdENsYXNzVGVzdENhc2UoU29ja2V0Q29ubmVjdGVkVGVzdCk6CiAgICAgIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIG9iamVjdCByZXR1cm5lZCBieSBzb2NrZXQubWFrZWZpbGUoKQogCkBAIC05MDQsNiArMTA3OCw4IEBACiAgICAgICAgIFNvY2tldENvbm5lY3RlZFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmV2dDEsIHNlbGYuZXZ0Miwgc2VsZi5zZXJ2X2ZpbmlzaGVkLCBzZWxmLmNsaV9maW5pc2hlZCA9IFsKKyAgICAgICAgICAgIHRocmVhZGluZy5FdmVudCgpIGZvciBpIGluIHJhbmdlKDQpXQogICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0LnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYucmVhZF9maWxlID0gc2VsZi5jbGlfY29ubi5tYWtlZmlsZSgKICAgICAgICAgICAgIHNlbGYucmVhZF9tb2RlLCBzZWxmLmJ1ZnNpemUsCkBAIC05MTIsNiArMTA4OCw3IEBACiAgICAgICAgICAgICBuZXdsaW5lID0gc2VsZi5uZXdsaW5lKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZfZmluaXNoZWQuc2V0KCkKICAgICAgICAgc2VsZi5yZWFkX2ZpbGUuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5yZWFkX2ZpbGUuY2xvc2VkKQogICAgICAgICBzZWxmLnJlYWRfZmlsZSA9IE5vbmUKQEAgLTkyNiwxMSArMTEwMywyOSBAQAogICAgICAgICAgICAgbmV3bGluZSA9IHNlbGYubmV3bGluZSkKIAogICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jbGlfZmluaXNoZWQuc2V0KCkKICAgICAgICAgc2VsZi53cml0ZV9maWxlLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYud3JpdGVfZmlsZS5jbG9zZWQpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZSA9IE5vbmUKICAgICAgICAgU29ja2V0Q29ubmVjdGVkVGVzdC5jbGllbnRUZWFyRG93bihzZWxmKQogCisgICAgZGVmIHRlc3RSZWFkQWZ0ZXJUaW1lb3V0KHNlbGYpOgorICAgICAgICAjIElzc3VlICM3MzIyOiBBIGZpbGUgb2JqZWN0IG11c3QgZGlzYWxsb3cgZnVydGhlciByZWFkcworICAgICAgICAjIGFmdGVyIGEgdGltZW91dCBoYXMgb2NjdXJyZWQuCisgICAgICAgIHNlbGYuY2xpX2Nvbm4uc2V0dGltZW91dCgxKQorICAgICAgICBzZWxmLnJlYWRfZmlsZS5yZWFkKDMpCisgICAgICAgICMgRmlyc3QgcmVhZCByYWlzZXMgYSB0aW1lb3V0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnJlYWRfZmlsZS5yZWFkLCAxKQorICAgICAgICAjIFNlY29uZCByZWFkIGlzIGRpc2FsbG93ZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjdHg6CisgICAgICAgICAgICBzZWxmLnJlYWRfZmlsZS5yZWFkKDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNhbm5vdCByZWFkIGZyb20gdGltZWQgb3V0IG9iamVjdCIsIHN0cihjdHguZXhjZXB0aW9uKSkKKworICAgIGRlZiBfdGVzdFJlYWRBZnRlclRpbWVvdXQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfZmlsZS53cml0ZShzZWxmLndyaXRlX21zZ1swOjNdKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUuZmx1c2goKQorICAgICAgICBzZWxmLnNlcnZfZmluaXNoZWQud2FpdCgpCisKICAgICBkZWYgdGVzdFNtYWxsUmVhZChzZWxmKToKICAgICAgICAgIyBQZXJmb3JtaW5nIHNtYWxsIGZpbGUgcmVhZCB0ZXN0CiAgICAgICAgIGZpcnN0X3NlZyA9IHNlbGYucmVhZF9maWxlLnJlYWQobGVuKHNlbGYucmVhZF9tc2cpLTMpCkBAIC0xMDIwLDYgKzEyMTUsMTE3IEBACiAgICAgICAgIHBhc3MKIAogCitjbGFzcyBGaWxlT2JqZWN0SW50ZXJydXB0ZWRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSBmaWxlIG9iamVjdCBjb3JyZWN0bHkgaGFuZGxlcyBFSU5UUiBpbnRlcm5hbGx5LiIiIgorCisgICAgY2xhc3MgTW9ja1NvY2tldChvYmplY3QpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjdl9mdW5jcz0oKSk6CisgICAgICAgICAgICAjIEEgZ2VuZXJhdG9yIHRoYXQgcmV0dXJucyBjYWxsYWJsZXMgdGhhdCB3ZSdsbCBjYWxsIGZvciBlYWNoCisgICAgICAgICAgICAjIGNhbGwgdG8gcmVjdigpLgorICAgICAgICAgICAgc2VsZi5fcmVjdl9zdGVwID0gaXRlcihyZWN2X2Z1bmNzKQorCisgICAgICAgIGRlZiByZWN2X2ludG8oc2VsZiwgYnVmZmVyKToKKyAgICAgICAgICAgIGRhdGEgPSBuZXh0KHNlbGYuX3JlY3Zfc3RlcCkoKQorICAgICAgICAgICAgYXNzZXJ0IGxlbihidWZmZXIpID49IGxlbihkYXRhKQorICAgICAgICAgICAgYnVmZmVyWzpsZW4oZGF0YSldID0gZGF0YQorICAgICAgICAgICAgcmV0dXJuIGxlbihkYXRhKQorCisgICAgICAgIGRlZiBfZGVjcmVmX3NvY2tldGlvcyhzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgX3RleHRpb3dyYXBfZm9yX3Rlc3Qoc2VsZiwgYnVmZmVyaW5nPS0xKToKKyAgICAgICAgICAgIHJhdyA9IHNvY2tldC5Tb2NrZXRJTyhzZWxmLCAiciIpCisgICAgICAgICAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyA9IGlvLkRFRkFVTFRfQlVGRkVSX1NJWkUKKyAgICAgICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiByYXcKKyAgICAgICAgICAgIGJ1ZmZlciA9IGlvLkJ1ZmZlcmVkUmVhZGVyKHJhdywgYnVmZmVyaW5nKQorICAgICAgICAgICAgdGV4dCA9IGlvLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBOb25lLCBOb25lKQorICAgICAgICAgICAgdGV4dC5tb2RlID0gInJiIgorICAgICAgICAgICAgcmV0dXJuIHRleHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX3JhaXNlX2VpbnRyKCk6CisgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FSU5UUikKKworICAgIGRlZiBfdGV4dGlvd3JhcF9tb2NrX3NvY2tldChzZWxmLCBtb2NrLCBidWZmZXJpbmc9LTEpOgorICAgICAgICByYXcgPSBzb2NrZXQuU29ja2V0SU8obW9jaywgInIiKQorICAgICAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICAgICAgYnVmZmVyaW5nID0gaW8uREVGQVVMVF9CVUZGRVJfU0laRQorICAgICAgICBpZiBidWZmZXJpbmcgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiByYXcKKyAgICAgICAgYnVmZmVyID0gaW8uQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJpbmcpCisgICAgICAgIHRleHQgPSBpby5UZXh0SU9XcmFwcGVyKGJ1ZmZlciwgTm9uZSwgTm9uZSkKKyAgICAgICAgdGV4dC5tb2RlID0gInJiIgorICAgICAgICByZXR1cm4gdGV4dAorCisgICAgZGVmIF90ZXN0X3JlYWRsaW5lKHNlbGYsIHNpemU9LTEsIGJ1ZmZlcmluZz0tMSk6CisgICAgICAgIG1vY2tfc29jayA9IHNlbGYuTW9ja1NvY2tldChyZWN2X2Z1bmNzPVsKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbkFuZCB0aGUgc2VjIiwKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIm9uZCBsaW5lIGlzIGhlcmVcbiIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogYiIiLAorICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiIiwgICMgWFhYKGdwcyk6IGlvIGxpYnJhcnkgZG9lcyBhbiBleHRyYSBFT0YgcmVhZAorICAgICAgICAgICAgXSkKKyAgICAgICAgZm8gPSBtb2NrX3NvY2suX3RleHRpb3dyYXBfZm9yX3Rlc3QoYnVmZmVyaW5nPWJ1ZmZlcmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmby5yZWFkbGluZShzaXplKSwgIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksICJBbmQgdGhlIHNlY29uZCBsaW5lIGlzIGhlcmVcbiIpCisKKyAgICBkZWYgX3Rlc3RfcmVhZChzZWxmLCBzaXplPS0xLCBidWZmZXJpbmc9LTEpOgorICAgICAgICBtb2NrX3NvY2sgPSBzZWxmLk1vY2tTb2NrZXQocmVjdl9mdW5jcz1bCisgICAgICAgICAgICAgICAgbGFtYmRhIDogYiJUaGlzIGlzIHRoZSBmaXJzdCBsaW5lXG5BbmQgdGhlIHNlYyIsCisgICAgICAgICAgICAgICAgc2VsZi5fcmFpc2VfZWludHIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogYiJvbmQgbGluZSBpcyBoZXJlXG4iLAorICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiIiwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiBiIiIsICAjIFhYWChncHMpOiBpbyBsaWJyYXJ5IGRvZXMgYW4gZXh0cmEgRU9GIHJlYWQKKyAgICAgICAgICAgIF0pCisgICAgICAgIGV4cGVjdGluZyA9IChiIlRoaXMgaXMgdGhlIGZpcnN0IGxpbmVcbiIKKyAgICAgICAgICAgICAgICAgICAgIGIiQW5kIHRoZSBzZWNvbmQgbGluZSBpcyBoZXJlXG4iKQorICAgICAgICBmbyA9IG1vY2tfc29jay5fdGV4dGlvd3JhcF9mb3JfdGVzdChidWZmZXJpbmc9YnVmZmVyaW5nKQorICAgICAgICBpZiBidWZmZXJpbmcgPT0gMDoKKyAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSAnJworICAgICAgICAgICAgZXhwZWN0aW5nID0gZXhwZWN0aW5nLmRlY29kZSgndXRmOCcpCisgICAgICAgIHdoaWxlIGxlbihkYXRhKSAhPSBsZW4oZXhwZWN0aW5nKToKKyAgICAgICAgICAgIHBhcnQgPSBmby5yZWFkKHNpemUpCisgICAgICAgICAgICBpZiBub3QgcGFydDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZGF0YSArPSBwYXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0aW5nKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkbGluZSgpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmUoc2l6ZT0xMDApCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZCgpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZChzaXplPTEwMCkKKworICAgIGRlZiB0ZXN0X3dpdGhfMWtfYnVmZmVyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKGJ1ZmZlcmluZz0xMDI0KQorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lKHNpemU9MTAwLCBidWZmZXJpbmc9MTAyNCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKGJ1ZmZlcmluZz0xMDI0KQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDAsIGJ1ZmZlcmluZz0xMDI0KQorCisgICAgZGVmIF90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcihzZWxmLCBzaXplPS0xKToKKyAgICAgICAgbW9ja19zb2NrID0gc2VsZi5Nb2NrU29ja2V0KHJlY3ZfZnVuY3M9WworICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiYSIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogYiJcbiIsCisgICAgICAgICAgICAgICAgbGFtYmRhIDogYiJCIiwKKyAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZV9laW50ciwKKyAgICAgICAgICAgICAgICBsYW1iZGEgOiBiImIiLAorICAgICAgICAgICAgICAgIGxhbWJkYSA6IGIiIiwKKyAgICAgICAgICAgIF0pCisgICAgICAgIGZvID0gbW9ja19zb2NrLl90ZXh0aW93cmFwX2Zvcl90ZXN0KGJ1ZmZlcmluZz0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvLnJlYWRsaW5lKHNpemUpLCBiImFcbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm8ucmVhZGxpbmUoc2l6ZSksIGIiQmIiKQorCisgICAgZGVmIHRlc3Rfbm9fYnVmZmVyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlYWRsaW5lX25vX2J1ZmZlcigpCisgICAgICAgIHNlbGYuX3Rlc3RfcmVhZGxpbmVfbm9fYnVmZmVyKHNpemU9NCkKKyAgICAgICAgc2VsZi5fdGVzdF9yZWFkKGJ1ZmZlcmluZz0wKQorICAgICAgICBzZWxmLl90ZXN0X3JlYWQoc2l6ZT0xMDAsIGJ1ZmZlcmluZz0wKQorCisKIGNsYXNzIFVuYnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CiAKICAgICAiIiJSZXBlYXQgdGhlIHRlc3RzIGZyb20gRmlsZU9iamVjdENsYXNzVGVzdENhc2Ugd2l0aCBidWZzaXplPT0wLgpAQCAtMTA2Nyw2ICsxMzczLDY2IEBACiAgICAgZGVmIF90ZXN0TWFrZWZpbGVDbG9zZVNvY2tldERlc3Ryb3koc2VsZik6CiAgICAgICAgIHBhc3MKIAorICAgICMgTm9uLWJsb2NraW5nIG9wcworICAgICMgTk9URTogdG8gc2V0IGByZWFkX2ZpbGVgIGFzIG5vbi1ibG9ja2luZywgd2UgbXVzdCBjYWxsCisgICAgIyBgY2xpX2Nvbm4uc2V0YmxvY2tpbmdgIGFuZCB2aWNlLXZlcnNhIChzZWUgc2V0VXAgLyBjbGllbnRTZXRVcCkuCisKKyAgICBkZWYgdGVzdFNtYWxsUmVhZE5vbkJsb2NraW5nKHNlbGYpOgorICAgICAgICBzZWxmLmNsaV9jb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVhZF9maWxlLnJlYWRpbnRvKGJ5dGVhcnJheSgxMCkpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVhZF9maWxlLnJlYWQobGVuKHNlbGYucmVhZF9tc2cpIC0gMyksIE5vbmUpCisgICAgICAgIHNlbGYuZXZ0MS5zZXQoKQorICAgICAgICBzZWxmLmV2dDIud2FpdCgxLjApCisgICAgICAgIGZpcnN0X3NlZyA9IHNlbGYucmVhZF9maWxlLnJlYWQobGVuKHNlbGYucmVhZF9tc2cpIC0gMykKKyAgICAgICAgaWYgZmlyc3Rfc2VnIGlzIE5vbmU6CisgICAgICAgICAgICAjIERhdGEgbm90IGFycml2ZWQgKGNhbiBoYXBwZW4gdW5kZXIgV2luZG93cyksIHdhaXQgYSBiaXQKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgZmlyc3Rfc2VnID0gc2VsZi5yZWFkX2ZpbGUucmVhZChsZW4oc2VsZi5yZWFkX21zZykgLSAzKQorICAgICAgICBidWYgPSBieXRlYXJyYXkoMTApCisgICAgICAgIG4gPSBzZWxmLnJlYWRfZmlsZS5yZWFkaW50byhidWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMykKKyAgICAgICAgbXNnID0gZmlyc3Rfc2VnICsgYnVmWzpuXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgc2VsZi5yZWFkX21zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlYWRfZmlsZS5yZWFkaW50byhieXRlYXJyYXkoMTYpKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlYWRfZmlsZS5yZWFkKDEpLCBOb25lKQorCisgICAgZGVmIF90ZXN0U21hbGxSZWFkTm9uQmxvY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuZXZ0MS53YWl0KDEuMCkKKyAgICAgICAgc2VsZi53cml0ZV9maWxlLndyaXRlKHNlbGYud3JpdGVfbXNnKQorICAgICAgICBzZWxmLndyaXRlX2ZpbGUuZmx1c2goKQorICAgICAgICBzZWxmLmV2dDIuc2V0KCkKKyAgICAgICAgIyBBdm9pZCBjbG9kaW5nIHRoZSBzb2NrZXQgYmVmb3JlIHRoZSBzZXJ2ZXIgdGVzdCBoYXMgZmluaXNoZWQsCisgICAgICAgICMgb3RoZXJ3aXNlIHN5c3RlbSByZWN2KCkgd2lsbCByZXR1cm4gMCBpbnN0ZWFkIG9mIEVXT1VMREJMT0NLLgorICAgICAgICBzZWxmLnNlcnZfZmluaXNoZWQud2FpdCg1LjApCisKKyAgICBkZWYgdGVzdFdyaXRlTm9uQmxvY2tpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2xpX2ZpbmlzaGVkLndhaXQoNS4wKQorICAgICAgICAjIFRoZSBjbGllbnQgdGhyZWFkIGNhbid0IHNraXAgZGlyZWN0bHkgLSB0aGUgU2tpcFRlc3QgZXhjZXB0aW9uCisgICAgICAgICMgd291bGQgYXBwZWFyIGFzIGEgZmFpbHVyZS4KKyAgICAgICAgaWYgc2VsZi5zZXJ2X3NraXBwZWQ6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KHNlbGYuc2Vydl9za2lwcGVkKQorCisgICAgZGVmIF90ZXN0V3JpdGVOb25CbG9ja2luZyhzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2X3NraXBwZWQgPSBOb25lCisgICAgICAgIHNlbGYuc2Vydl9jb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAjIFRyeSB0byBzYXR1cmF0ZSB0aGUgc29ja2V0IGJ1ZmZlciBwaXBlIHdpdGggcmVwZWF0ZWQgbGFyZ2Ugd3JpdGVzLgorICAgICAgICBCSUcgPSBiIngiICogKDEwMjQgKiogMikKKyAgICAgICAgTElNSVQgPSAxMAorICAgICAgICAjIFRoZSBmaXJzdCB3cml0ZSgpIHN1Y2NlZWRzIHNpbmNlIGEgY2h1bmsgb2YgZGF0YSBjYW4gYmUgYnVmZmVyZWQKKyAgICAgICAgbiA9IHNlbGYud3JpdGVfZmlsZS53cml0ZShCSUcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihuLCAwKQorICAgICAgICBmb3IgaSBpbiByYW5nZShMSU1JVCk6CisgICAgICAgICAgICBuID0gc2VsZi53cml0ZV9maWxlLndyaXRlKEJJRykKKyAgICAgICAgICAgIGlmIG4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFN1Y2NlZWRlZAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobiwgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgTGV0IHVzIGtub3cgdGhhdCB0aGlzIHRlc3QgZGlkbid0IG1hbmFnZSB0byBlc3RhYmxpc2gKKyAgICAgICAgICAgICMgdGhlIGV4cGVjdGVkIGNvbmRpdGlvbnMuIFRoaXMgaXMgbm90IGEgZmFpbHVyZSBpbiBpdHNlbGYgYnV0LAorICAgICAgICAgICAgIyBpZiBpdCBoYXBwZW5zIHJlcGVhdGVkbHksIHRoZSB0ZXN0IHNob3VsZCBiZSBmaXhlZC4KKyAgICAgICAgICAgIHNlbGYuc2Vydl9za2lwcGVkID0gImZhaWxlZCB0byBzYXR1cmF0ZSB0aGUgc29ja2V0IGJ1ZmZlciIKKwogCiBjbGFzcyBMaW5lQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZShGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSk6CiAKQEAgLTExNDAsMjMgKzE1MDYsMTggQEAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKICAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICB0cnk6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGkuY2xvc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKICAgICAgICAgICAgIGNsaS5jb25uZWN0KChIT1NULCBwb3J0KSkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5lcnJubywgZXJybm8uRUNPTk5SRUZVU0VEKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJzb2NrZXQuZXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCiAKICAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjOTc5MjogZXJyb3JzIHJhaXNlZCBieSBjcmVhdGVfY29ubmVjdGlvbigpIHNob3VsZCBoYXZlCiAgICAgICAgICMgYSBwcm9wZXIgZXJybm8gYXR0cmlidXRlLgogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CiAgICAgICAgICAgICBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHBvcnQpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInNvY2tldC5lcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVDT05OUkVGVVNFRCkKIAogICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3RpbWVvdXQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzk3OTI6IGNyZWF0ZV9jb25uZWN0aW9uKCkgc2hvdWxkIG5vdCByZWNhc3QgdGltZW91dCBlcnJvcnMKQEAgLTExNjYsNiArMTUyNyw3IEBACiAgICAgICAgICAgICAgICAgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCAxMjM0KSkKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdChTb2NrZXRUQ1BUZXN0LCBUaHJlYWRhYmxlVGVzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgpAQCAtMTE3Myw3ICsxNTM1LDcgQEAKICAgICAgICAgVGhyZWFkYWJsZVRlc3QuX19pbml0X18oc2VsZikKIAogICAgIGRlZiBjbGllbnRTZXRVcChzZWxmKToKLSAgICAgICAgcGFzcworICAgICAgICBzZWxmLnNvdXJjZV9wb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKIAogICAgIGRlZiBjbGllbnRUZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQpAQCAtMTE4MiwxMiArMTU0NCwyMyBAQAogCiAgICAgZGVmIF9qdXN0QWNjZXB0KHNlbGYpOgogICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIGNvbm4uY2xvc2UoKQogCiAgICAgdGVzdEZhbWlseSA9IF9qdXN0QWNjZXB0CiAgICAgZGVmIF90ZXN0RmFtaWx5KHNlbGYpOgogICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0zMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmZhbWlseSwgMikKIAorICAgIHRlc3RTb3VyY2VBZGRyZXNzID0gX2p1c3RBY2NlcHQKKyAgICBkZWYgX3Rlc3RTb3VyY2VBZGRyZXNzKHNlbGYpOgorICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD0zMCwKKyAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz0oJycsIHNlbGYuc291cmNlX3BvcnQpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0c29ja25hbWUoKVsxXSwgc2VsZi5zb3VyY2VfcG9ydCkKKyAgICAgICAgIyBUaGUgcG9ydCBudW1iZXIgYmVpbmcgdXNlZCBpcyBzdWZmaWNpZW50IHRvIHNob3cgdGhhdCB0aGUgYmluZCgpCisgICAgICAgICMgY2FsbCBoYXBwZW5lZC4KKwogICAgIHRlc3RUaW1lb3V0RGVmYXVsdCA9IF9qdXN0QWNjZXB0CiAgICAgZGVmIF90ZXN0VGltZW91dERlZmF1bHQoc2VsZik6CiAgICAgICAgICMgcGFzc2luZyBubyBleHBsaWNpdCB0aW1lb3V0IHVzZXMgc29ja2V0J3MgZ2xvYmFsIGRlZmF1bHQKQEAgLTExOTUsNiArMTU2OCw3IEBACiAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCg0MikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKEhPU1QsIHNlbGYucG9ydCkpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5jbGkuY2xvc2UpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNsaS5nZXR0aW1lb3V0KCksIDQyKQpAQCAtMTIwNiw2ICsxNTgwLDcgQEAKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDMwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNsaSA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgc2VsZi5wb3J0KSwgdGltZW91dD1Ob25lKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGkuZ2V0dGltZW91dCgpLCBOb25lKQpAQCAtMTIxOCw4ICsxNTkzLDEwIEBACiAgICAgdGVzdFRpbWVvdXRWYWx1ZU5vbmFtZWQgPSBfanVzdEFjY2VwdAogICAgIGRlZiBfdGVzdFRpbWVvdXRWYWx1ZU5vbmFtZWQoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChIT1NULCBzZWxmLnBvcnQpLCAzMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuY2xpLmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2xpLmdldHRpbWVvdXQoKSwgMzApCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBOZXR3b3JrQ29ubmVjdGlvbkJlaGF2aW91clRlc3QoU29ja2V0VENQVGVzdCwgVGhyZWFkYWJsZVRlc3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKQEAgLTEyMzYsNiArMTYxMyw3IEBACiAKICAgICBkZWYgdGVzdEluc2lkZVRpbWVvdXQoc2VsZik6CiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvbm4uY2xvc2UpCiAgICAgICAgIHRpbWUuc2xlZXAoMykKICAgICAgICAgY29ubi5zZW5kKGIiZG9uZSEiKQogICAgIHRlc3RPdXRzaWRlVGltZW91dCA9IHRlc3RJbnNpZGVUaW1lb3V0CkBAIC0xMzQ0LDI3ICsxNzIyLDI4IEBACiAKICAgICBkZWYgdGVzdExpbnV4QWJzdHJhY3ROYW1lc3BhY2Uoc2VsZik6CiAgICAgICAgIGFkZHJlc3MgPSBiIlx4MDBweXRob24tdGVzdC1oZWxsb1x4MDBceGZmIgotICAgICAgICBzMSA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgczEuYmluZChhZGRyZXNzKQotICAgICAgICBzMS5saXN0ZW4oMSkKLSAgICAgICAgczIgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHMyLmNvbm5lY3QoczEuZ2V0c29ja25hbWUoKSkKLSAgICAgICAgczEuYWNjZXB0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMS5nZXRzb2NrbmFtZSgpLCBhZGRyZXNzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLmdldHBlZXJuYW1lKCksIGFkZHJlc3MpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzMToKKyAgICAgICAgICAgIHMxLmJpbmQoYWRkcmVzcykKKyAgICAgICAgICAgIHMxLmxpc3RlbigxKQorICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHMyOgorICAgICAgICAgICAgICAgIHMyLmNvbm5lY3QoczEuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgICAgICAgICB3aXRoIHMxLmFjY2VwdCgpWzBdIGFzIHMzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLmdldHNvY2tuYW1lKCksIGFkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczIuZ2V0cGVlcm5hbWUoKSwgYWRkcmVzcykKIAogICAgIGRlZiB0ZXN0TWF4TmFtZShzZWxmKToKICAgICAgICAgYWRkcmVzcyA9IGIiXHgwMCIgKyBiImgiICogKHNlbGYuVU5JWF9QQVRIX01BWCAtIDEpCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHMuYmluZChhZGRyZXNzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0c29ja25hbWUoKSwgYWRkcmVzcykKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBzLmJpbmQoYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXRzb2NrbmFtZSgpLCBhZGRyZXNzKQogCiAgICAgZGVmIHRlc3ROYW1lT3ZlcmZsb3coc2VsZik6CiAgICAgICAgIGFkZHJlc3MgPSAiXHgwMCIgKyAiaCIgKiBzZWxmLlVOSVhfUEFUSF9NQVgKLSAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzLmJpbmQsIGFkZHJlc3MpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzLmJpbmQsIGFkZHJlc3MpCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJ1ZmZlcklPVGVzdChTb2NrZXRDb25uZWN0ZWRUZXN0KToKICAgICAiIiIKICAgICBUZXN0IHRoZSBidWZmZXIgdmVyc2lvbnMgb2Ygc29ja2V0LnJlY3YoKSBhbmQgc29ja2V0LnNlbmQoKS4KQEAgLTEzNzIsMjggKzE3NTEsNjQgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgogICAgICAgICBTb2NrZXRDb25uZWN0ZWRUZXN0Ll9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9bWV0aG9kTmFtZSkKIAotICAgIGRlZiB0ZXN0UmVjdkludG8oc2VsZik6CisgICAgZGVmIHRlc3RSZWN2SW50b0FycmF5KHNlbGYpOgogICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKICAgICAgICAgbmJ5dGVzID0gc2VsZi5jbGlfY29ubi5yZWN2X2ludG8oYnVmKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCiAgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCiAKLSAgICBkZWYgX3Rlc3RSZWN2SW50byhzZWxmKToKKyAgICBkZWYgX3Rlc3RSZWN2SW50b0FycmF5KHNlbGYpOgogICAgICAgICBidWYgPSBieXRlcyhNU0cpCiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoYnVmKQogCi0gICAgZGVmIHRlc3RSZWN2RnJvbUludG8oc2VsZik6CisgICAgZGVmIHRlc3RSZWN2SW50b0J5dGVhcnJheShzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcyA9IHNlbGYuY2xpX2Nvbm4ucmVjdl9pbnRvKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQorICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQorCisgICAgX3Rlc3RSZWN2SW50b0J5dGVhcnJheSA9IF90ZXN0UmVjdkludG9BcnJheQorCisgICAgZGVmIHRlc3RSZWN2SW50b01lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMgPSBzZWxmLmNsaV9jb25uLnJlY3ZfaW50byhtZW1vcnl2aWV3KGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkludG9NZW1vcnl2aWV3ID0gX3Rlc3RSZWN2SW50b0FycmF5CisKKyAgICBkZWYgdGVzdFJlY3ZGcm9tSW50b0FycmF5KHNlbGYpOgogICAgICAgICBidWYgPSBieXRlYXJyYXkoMTAyNCkKICAgICAgICAgbmJ5dGVzLCBhZGRyID0gc2VsZi5jbGlfY29ubi5yZWN2ZnJvbV9pbnRvKGJ1ZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYnl0ZXMsIGxlbihNU0cpKQogICAgICAgICBtc2cgPSBidWZbOmxlbihNU0cpXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgTVNHKQogCi0gICAgZGVmIF90ZXN0UmVjdkZyb21JbnRvKHNlbGYpOgorICAgIGRlZiBfdGVzdFJlY3ZGcm9tSW50b0FycmF5KHNlbGYpOgogICAgICAgICBidWYgPSBieXRlcyhNU0cpCiAgICAgICAgIHNlbGYuc2Vydl9jb25uLnNlbmQoYnVmKQogCisgICAgZGVmIHRlc3RSZWN2RnJvbUludG9CeXRlYXJyYXkoc2VsZik6CisgICAgICAgIGJ1ZiA9IGJ5dGVhcnJheSgxMDI0KQorICAgICAgICBuYnl0ZXMsIGFkZHIgPSBzZWxmLmNsaV9jb25uLnJlY3Zmcm9tX2ludG8oYnVmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ieXRlcywgbGVuKE1TRykpCisgICAgICAgIG1zZyA9IGJ1Zls6bGVuKE1TRyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBNU0cpCisKKyAgICBfdGVzdFJlY3ZGcm9tSW50b0J5dGVhcnJheSA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKworICAgIGRlZiB0ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgYnVmID0gYnl0ZWFycmF5KDEwMjQpCisgICAgICAgIG5ieXRlcywgYWRkciA9IHNlbGYuY2xpX2Nvbm4ucmVjdmZyb21faW50byhtZW1vcnl2aWV3KGJ1ZikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmJ5dGVzLCBsZW4oTVNHKSkKKyAgICAgICAgbXNnID0gYnVmWzpsZW4oTVNHKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIE1TRykKKworICAgIF90ZXN0UmVjdkZyb21JbnRvTWVtb3J5dmlldyA9IF90ZXN0UmVjdkZyb21JbnRvQXJyYXkKKwogCiBUSVBDX1NUWVBFID0gMjAwMAogVElQQ19MT1dFUiA9IDIwMApAQCAtMTQ3MywxNSArMTg4OCwxMjIgQEAKICAgICAgICAgc2VsZi5jbGkuY2xvc2UoKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZCwgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBDb250ZXh0TWFuYWdlcnNUZXN0KFRocmVhZGVkVENQU29ja2V0VGVzdCk6CisKKyAgICBkZWYgX3Rlc3RTb2NrZXRDbGFzcyhzZWxmKToKKyAgICAgICAgIyBiYXNlIHRlc3QKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5fY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5fY2xvc2VkKQorICAgICAgICAjIGNsb3NlIGluc2lkZSB3aXRoIGJsb2NrCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKKyAgICAgICAgIyBleGNlcHRpb24gaW5zaWRlIHdpdGggYmxvY2sKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLl9jbG9zZWQpCisKKyAgICBkZWYgdGVzdENyZWF0ZUNvbm5lY3Rpb25CYXNlKHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjb25uLmNsb3NlKQorICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMjQpCisgICAgICAgIGNvbm4uc2VuZGFsbChkYXRhKQorCisgICAgZGVmIF90ZXN0Q3JlYXRlQ29ubmVjdGlvbkJhc2Uoc2VsZik6CisgICAgICAgIGFkZHJlc3MgPSBzZWxmLnNlcnYuZ2V0c29ja25hbWUoKQorICAgICAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihhZGRyZXNzKSBhcyBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLl9jbG9zZWQpCisgICAgICAgICAgICBzb2NrLnNlbmRhbGwoYidmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnJlY3YoMTAyNCksIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKKworICAgIGRlZiB0ZXN0Q3JlYXRlQ29ubmVjdGlvbkNsb3NlKHNlbGYpOgorICAgICAgICBjb25uLCBhZGRyID0gc2VsZi5zZXJ2LmFjY2VwdCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjb25uLmNsb3NlKQorICAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMjQpCisgICAgICAgIGNvbm4uc2VuZGFsbChkYXRhKQorCisgICAgZGVmIF90ZXN0Q3JlYXRlQ29ubmVjdGlvbkNsb3NlKHNlbGYpOgorICAgICAgICBhZGRyZXNzID0gc2VsZi5zZXJ2LmdldHNvY2tuYW1lKCkKKyAgICAgICAgd2l0aCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcykgYXMgc29jazoKKyAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5fY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2suc2VuZGFsbCwgYidmb28nKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiU09DS19DTE9FWEVDIiksCisgICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKGZjbnRsLCAibW9kdWxlIGZjbnRsIG5vdCBhdmFpbGFibGUiKQorY2xhc3MgQ2xvZXhlY0NvbnN0YW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfU09DS19DTE9FWEVDKHNlbGYpOgorICAgICAgICB2ID0gbGludXhfdmVyc2lvbigpCisgICAgICAgIGlmIHYgPCAoMiwgNiwgMjgpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiTGludXgga2VybmVsIDIuNi4yOCBvciBoaWdoZXIgcmVxdWlyZWQsIG5vdCAlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJSAiLiIuam9pbihtYXAoc3RyLCB2KSkpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy50eXBlICYgc29ja2V0LlNPQ0tfQ0xPRVhFQykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChzLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX05PTkJMT0NLIiksCisgICAgICAgICAgICAgICAgICAgICAiU09DS19OT05CTE9DSyBub3QgZGVmaW5lZCIpCitjbGFzcyBOb25ibG9ja0NvbnN0YW50VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNoZWNrTm9uYmxvY2soc2VsZiwgcywgbm9uYmxvY2s9VHJ1ZSwgdGltZW91dD0wLjApOgorICAgICAgICBpZiBub25ibG9jazoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnR5cGUgJiBzb2NrZXQuU09DS19OT05CTE9DSykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR0aW1lb3V0KCksIHRpbWVvdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMudHlwZSAmIHNvY2tldC5TT0NLX05PTkJMT0NLKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHRpbWVvdXQoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X1NPQ0tfTk9OQkxPQ0soc2VsZik6CisgICAgICAgIHYgPSBsaW51eF92ZXJzaW9uKCkKKyAgICAgICAgaWYgdiA8ICgyLCA2LCAyOCk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJMaW51eCBrZXJuZWwgMi42LjI4IG9yIGhpZ2hlciByZXF1aXJlZCwgbm90ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAlICIuIi5qb2luKG1hcChzdHIsIHYpKSkKKyAgICAgICAgIyBhIGxvdCBvZiBpdCBzZWVtcyBzaWxseSBhbmQgcmVkdW5kYW50LCBidXQgSSB3YW50ZWQgdG8gdGVzdCB0aGF0CisgICAgICAgICMgY2hhbmdpbmcgYmFjayBhbmQgZm9ydGggd29ya2VkIG9rCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX05PTkJMT0NLKSBhcyBzOgorICAgICAgICAgICAgc2VsZi5jaGVja05vbmJsb2NrKHMpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKDEpCisgICAgICAgICAgICBzZWxmLmNoZWNrTm9uYmxvY2socywgRmFsc2UpCisgICAgICAgICAgICBzLnNldGJsb2NraW5nKDApCisgICAgICAgICAgICBzZWxmLmNoZWNrTm9uYmxvY2socykKKyAgICAgICAgICAgIHMuc2V0dGltZW91dChOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja05vbmJsb2NrKHMsIEZhbHNlKQorICAgICAgICAgICAgcy5zZXR0aW1lb3V0KDIuMCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tOb25ibG9jayhzLCB0aW1lb3V0PTIuMCkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoMSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tOb25ibG9jayhzLCBGYWxzZSkKKyAgICAgICAgIyBkZWZhdWx0dGltZW91dAorICAgICAgICB0ID0gc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDAuMCkKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tOb25ibG9jayhzKQorICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoTm9uZSkKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tOb25ibG9jayhzLCBGYWxzZSkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KDIuMCkKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tOb25ibG9jayhzLCB0aW1lb3V0PTIuMCkKKyAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmNoZWNrTm9uYmxvY2socywgRmFsc2UpCisgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCh0KQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0cyA9IFtHZW5lcmFsTW9kdWxlVGVzdHMsIEJhc2ljVENQVGVzdCwgVENQQ2xvc2VyVGVzdCwgVENQVGltZW91dFRlc3QsCi0gICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbnMsIEJ1ZmZlcklPVGVzdCwgQmFzaWNUQ1BUZXN0Ml0KLSAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ21hYyc6Ci0gICAgICAgIHRlc3RzLmV4dGVuZChbIEJhc2ljVURQVGVzdCwgVURQVGltZW91dFRlc3QgXSkKKyAgICAgICAgICAgICBUZXN0RXhjZXB0aW9ucywgQnVmZmVySU9UZXN0LCBCYXNpY1RDUFRlc3QyLCBCYXNpY1VEUFRlc3QsIFVEUFRpbWVvdXRUZXN0IF0KIAogICAgIHRlc3RzLmV4dGVuZChbCiAgICAgICAgIE5vbkJsb2NraW5nVENQVGVzdHMsCiAgICAgICAgIEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLAorICAgICAgICBGaWxlT2JqZWN0SW50ZXJydXB0ZWRUZXN0Q2FzZSwKICAgICAgICAgVW5idWZmZXJlZEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLAogICAgICAgICBMaW5lQnVmZmVyZWRGaWxlT2JqZWN0Q2xhc3NUZXN0Q2FzZSwKICAgICAgICAgU21hbGxCdWZmZXJlZEZpbGVPYmplY3RDbGFzc1Rlc3RDYXNlLApAQCAtMTQ5MSw2ICsyMDEzLDkgQEAKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25Ob1NlcnZlciwKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25BdHRyaWJ1dGVzVGVzdCwKICAgICAgICAgTmV0d29ya0Nvbm5lY3Rpb25CZWhhdmlvdXJUZXN0LAorICAgICAgICBDb250ZXh0TWFuYWdlcnNUZXN0LAorICAgICAgICBDbG9leGVjQ29uc3RhbnRUZXN0LAorICAgICAgICBOb25ibG9ja0NvbnN0YW50VGVzdAogICAgIF0pCiAgICAgaWYgaGFzYXR0cihzb2NrZXQsICJzb2NrZXRwYWlyIik6CiAgICAgICAgIHRlc3RzLmFwcGVuZChCYXNpY1NvY2tldFBhaXJUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zb2NrZXRzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQppbmRleCBhMDk4ZWRkLi5kNGMzNjIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weQpAQCAtMywyMSArMywyMSBAQAogIiIiCiAKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgZXJybm8KIGltcG9ydCBpbXAKIGltcG9ydCBvcwogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNpZ25hbAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc29ja2V0c2VydmVyCiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZWFwX2NoaWxkcmVuLCB2ZXJib3NlCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOIGFzIFRFU1RfRklMRQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgdmVyYm9zZQordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCiAKIHRlc3Quc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAKQEAgLTEyMyw2ICsxMjMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlci5zZXJ2ZXJfYWRkcmVzcywgc2VydmVyLnNvY2tldC5nZXRzb2NrbmFtZSgpKQogICAgICAgICByZXR1cm4gc2VydmVyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIEByZWFwX3RocmVhZHMKICAgICBkZWYgcnVuX3NlcnZlcihzZWxmLCBzdnJjbHMsIGhkbHJiYXNlLCB0ZXN0ZnVuYyk6CiAgICAgICAgIHNlcnZlciA9IHNlbGYubWFrZV9zZXJ2ZXIoc2VsZi5waWNrYWRkcihzdnJjbHMuYWRkcmVzc19mYW1pbHkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2cmNscywgaGRscmJhc2UpCkBAIC0xNDksNiArMTUxLDcgQEAKICAgICAgICAgaWYgdmVyYm9zZTogcHJpbnQoIndhaXRpbmcgZm9yIHNlcnZlciIpCiAgICAgICAgIHNlcnZlci5zaHV0ZG93bigpCiAgICAgICAgIHQuam9pbigpCisgICAgICAgIHNlcnZlci5zZXJ2ZXJfY2xvc2UoKQogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiZG9uZSIpCiAKICAgICBkZWYgc3RyZWFtX2V4YW1pbmUoc2VsZiwgcHJvdG8sIGFkZHIpOgpAQCAtMjQ0LDYgKzI0Nyw3IEBACiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0c2VydmVyLkRhdGFncmFtUmVxdWVzdEhhbmRsZXIsCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZ3JhbV9leGFtaW5lKQogCisgICAgQHJlYXBfdGhyZWFkcwogICAgIGRlZiB0ZXN0X3NodXRkb3duKHNlbGYpOgogICAgICAgICAjIElzc3VlICMyMzAyOiBzaHV0ZG93bigpIHNob3VsZCBhbHdheXMgc3VjY2VlZCBpbiBtYWtpbmcgYW4KICAgICAgICAgIyBvdGhlciB0aHJlYWQgbGVhdmUgc2VydmVfZm9yZXZlcigpLgpAQCAtMjY3LDYgKzI3MSw3IEBACiAgICAgICAgICAgICBzLnNodXRkb3duKCkKICAgICAgICAgZm9yIHQsIHMgaW4gdGhyZWFkczoKICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICBzLnNlcnZlcl9jbG9zZSgpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zcWxpdGUucHkgYi9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQppbmRleCBlYzZmNjM0Li4xMDg2MzMwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NxbGl0ZS5weQpAQCAtMSwxNyArMSwyMyBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitpbXBvcnQgdGVzdC5zdXBwb3J0CiAKICMgU2tpcCB0ZXN0IGlmIF9zcWxpdGUzIG1vZHVsZSBub3QgaW5zdGFsbGVkCi1pbXBvcnRfbW9kdWxlKCdfc3FsaXRlMycpCit0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3NxbGl0ZTMnKQogCitpbXBvcnQgc3FsaXRlMwogZnJvbSBzcWxpdGUzLnRlc3QgaW1wb3J0IChkYmFwaSwgdHlwZXMsIHVzZXJmdW5jdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnksIHRyYW5zYWN0aW9ucywgaG9va3MsIHJlZ3Jlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXApCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoZGJhcGkuc3VpdGUoKSwgdHlwZXMuc3VpdGUoKSwgdXNlcmZ1bmN0aW9ucy5zdWl0ZSgpLAotICAgICAgICAgICAgICAgICBmYWN0b3J5LnN1aXRlKCksIHRyYW5zYWN0aW9ucy5zdWl0ZSgpLAotICAgICAgICAgICAgICAgICBob29rcy5zdWl0ZSgpLCByZWdyZXNzaW9uLnN1aXRlKCksIGR1bXAuc3VpdGUoKSkKKyAgICBpZiB0ZXN0LnN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoInRlc3Rfc3FsaXRlOiB0ZXN0aW5nIHdpdGggdmVyc2lvbiIsCisgICAgICAgICAgICAgICJ7IXJ9LCBzcWxpdGVfdmVyc2lvbiB7IXJ9Ii5mb3JtYXQoc3FsaXRlMy52ZXJzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbGl0ZTMuc3FsaXRlX3ZlcnNpb24pKQorICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoZGJhcGkuc3VpdGUoKSwgdHlwZXMuc3VpdGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyZnVuY3Rpb25zLnN1aXRlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS5zdWl0ZSgpLCB0cmFuc2FjdGlvbnMuc3VpdGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob29rcy5zdWl0ZSgpLCByZWdyZXNzaW9uLnN1aXRlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcC5zdWl0ZSgpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NzbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CmluZGV4IGJiMzg4OTAuLjE2NGI2YzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5CkBAIC01LDM5ICs1LDgxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzZWxlY3QKLWltcG9ydCBlcnJubwotaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0aW1lCiBpbXBvcnQgZ2MKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCiBpbXBvcnQgcHByaW50Ci1pbXBvcnQgdXJsbGliLnBhcnNlLCB1cmxsaWIucmVxdWVzdAotaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdXJsbGliLnJlcXVlc3QKIGltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBhc3luY29yZQogaW1wb3J0IHdlYWtyZWYKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IGZ1bmN0b29scwogCi1mcm9tIGh0dHAuc2VydmVyIGltcG9ydCBIVFRQU2VydmVyLCBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIKK3NzbCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic3NsIikKIAotIyBPcHRpb25hbGx5IHRlc3QgU1NMIHN1cHBvcnQsIGlmIHdlIGhhdmUgaXQgaW4gdGhlIHRlc3RlZCBwbGF0Zm9ybQotc2tpcF9leHBlY3RlZCA9IEZhbHNlCi10cnk6Ci0gICAgaW1wb3J0IHNzbAotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHNraXBfZXhwZWN0ZWQgPSBUcnVlCitQUk9UT0NPTFMgPSBbCisgICAgc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjMsCisgICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCitdCiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKLUNFUlRGSUxFID0gTm9uZQotU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUID0gTm9uZQorCitkYXRhX2ZpbGUgPSBsYW1iZGEgbmFtZTogb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksIG5hbWUpCisKKyMgVGhlIGN1c3RvbSBrZXkgYW5kIGNlcnRpZmljYXRlIGZpbGVzIHVzZWQgaW4gdGVzdF9zc2wgYXJlIGdlbmVyYXRlZAorIyB1c2luZyBMaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weS4KKyMgT3RoZXIgY2VydGlmaWNhdGVzIGFyZSBzaW1wbHkgZmV0Y2hlZCBmcm9tIHRoZSBJbnRlcm5ldCBzZXJ2ZXJzIHRoZXkKKyMgYXJlIG1lYW50IHRvIGF1dGhlbnRpY2F0ZS4KKworQ0VSVEZJTEUgPSBkYXRhX2ZpbGUoImtleWNlcnQucGVtIikKK0JZVEVTX0NFUlRGSUxFID0gb3MuZnNlbmNvZGUoQ0VSVEZJTEUpCitPTkxZQ0VSVCA9IGRhdGFfZmlsZSgic3NsX2NlcnQucGVtIikKK09OTFlLRVkgPSBkYXRhX2ZpbGUoInNzbF9rZXkucGVtIikKK0JZVEVTX09OTFlDRVJUID0gb3MuZnNlbmNvZGUoT05MWUNFUlQpCitCWVRFU19PTkxZS0VZID0gb3MuZnNlbmNvZGUoT05MWUtFWSkKK0NBUEFUSCA9IGRhdGFfZmlsZSgiY2FwYXRoIikKK0JZVEVTX0NBUEFUSCA9IG9zLmZzZW5jb2RlKENBUEFUSCkKKworU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUID0gZGF0YV9maWxlKCJodHRwc19zdm5fcHl0aG9uX29yZ19yb290LnBlbSIpCisKK0VNUFRZQ0VSVCA9IGRhdGFfZmlsZSgibnVsbGNlcnQucGVtIikKK0JBRENFUlQgPSBkYXRhX2ZpbGUoImJhZGNlcnQucGVtIikKK1dST05HQ0VSVCA9IGRhdGFfZmlsZSgiWFhYbm9uZXhpc3RpbmcucGVtIikKK0JBREtFWSA9IGRhdGFfZmlsZSgiYmFka2V5LnBlbSIpCisKIAogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShwcmVmaXggKyBleGNfZm9ybWF0KQogCitkZWYgY2FuX2NsZWFyX29wdGlvbnMoKToKKyAgICAjIDAuOS44bSBvciBoaWdoZXIKKyAgICByZXR1cm4gc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPID49ICgwLCA5LCA4LCAxMywgMTUpCiAKLWNsYXNzIEJhc2ljVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorZGVmIG5vX3NzbHYyX2ltcGxpZXNfc3NsdjNfaGVsbG8oKToKKyAgICAjIDAuOS43aCBvciBoaWdoZXIKKyAgICByZXR1cm4gc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPID49ICgwLCA5LCA3LCA4LCAxNSkKKworCisjIElzc3VlICM5NDE1OiBVYnVudHUgaGlqYWNrcyB0aGVpciBPcGVuU1NMIGFuZCBmb3JjZWZ1bGx5IGRpc2FibGVzIFNTTHYyCitkZWYgc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbChmdW5jKToKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgZGVmIGYoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyKQorICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yOgorICAgICAgICAgICAgaWYgKHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA9PSAoMCwgOSwgOCwgMTUsIDE1KSBhbmQKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKSA9PSAoJ2RlYmlhbicsICdzcXVlZXplL3NpZCcsICcnKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlBhdGNoZWQgVWJ1bnR1IE9wZW5TU0wgYnJlYWtzIGJlaGF2aW91ciIpCisgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gZgorCisKK2NsYXNzIEJhc2ljU29ja2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjIKQEAgLTQ3LDYgKzg5LDcgQEAKICAgICAgICAgc3NsLkNFUlRfTk9ORQogICAgICAgICBzc2wuQ0VSVF9PUFRJT05BTAogICAgICAgICBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzZWxmLmFzc2VydEluKHNzbC5IQVNfU05JLCB7VHJ1ZSwgRmFsc2V9KQogCiAgICAgZGVmIHRlc3RfcmFuZG9tKHNlbGYpOgogICAgICAgICB2ID0gc3NsLlJBTkRfc3RhdHVzKCkKQEAgLTY2LDcgKzEwOSw3IEBACiAgICAgICAgICMgbm90ZSB0aGF0IHRoaXMgdXNlcyBhbiAndW5vZmZpY2lhbCcgZnVuY3Rpb24gaW4gX3NzbC5jLAogICAgICAgICAjIHByb3ZpZGVkIHNvbGVseSBmb3IgdGhpcyB0ZXN0LCB0byBleGVyY2lzZSB0aGUgY2VydGlmaWNhdGUKICAgICAgICAgIyBwYXJzaW5nIGNvZGUKLSAgICAgICAgcCA9IHNzbC5fc3NsLl90ZXN0X2RlY29kZV9jZXJ0KENFUlRGSUxFLCBGYWxzZSkKKyAgICAgICAgcCA9IHNzbC5fc3NsLl90ZXN0X2RlY29kZV9jZXJ0KENFUlRGSUxFKQogICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIgKyBwcHJpbnQucGZvcm1hdChwKSArICJcbiIpCiAKQEAgLTgyLDYgKzEyNSwzMyBAQAogICAgICAgICBpZiBub3QgcDIuZW5kc3dpdGgoJ1xuJyArIHNzbC5QRU1fRk9PVEVSICsgJ1xuJyk6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRFUi10by1QRU0gZGlkbid0IGluY2x1ZGUgY29ycmVjdCBmb290ZXI6XG4lclxuIiAlIHAyKQogCisgICAgZGVmIHRlc3Rfb3BlbnNzbF92ZXJzaW9uKHNlbGYpOgorICAgICAgICBuID0gc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVIKKyAgICAgICAgdCA9IHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTworICAgICAgICBzID0gc3NsLk9QRU5TU0xfVkVSU0lPTgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodCwgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzLCBzdHIpCisgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzIGZvbGxvdworICAgICAgICAjID49IDAuOQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuLCAweDkwMDAwMCkKKyAgICAgICAgIyA8IDIuMAorICAgICAgICBzZWxmLmFzc2VydExlc3MobiwgMHgyMDAwMDAwMCkKKyAgICAgICAgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXMgPSB0CisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1ham9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1pbm9yLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobWlub3IsIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZml4LCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoZml4LCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBhdGNoLCAwKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChwYXRjaCwgMjYpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc3RhdHVzLCAxNSkKKyAgICAgICAgIyBWZXJzaW9uIHN0cmluZyBhcyByZXR1cm5lZCBieSBPcGVuU1NMLCB0aGUgZm9ybWF0IG1pZ2h0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJPcGVuU1NMIHs6ZH0uezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yLCBmaXgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzLCB0KSkKKwogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3JlZmN5Y2xlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3OTQzOiBhbiBTU0wgb2JqZWN0IGRvZXNuJ3QgY3JlYXRlIHJlZmVyZW5jZSBjeWNsZXMgd2l0aApAQCAtMTEzLDYgKzE4MywyNDQgQEAKICAgICAgICAgICAgIHNzID0gc3NsLndyYXBfc29ja2V0KHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWVvdXQsIHNzLmdldHRpbWVvdXQoKSkKIAorICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0LCBzb2NrLCBrZXlmaWxlPUNFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlIG9wZXJhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0LCBzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGZpbGUgbXVzdCBiZSBzcGVjaWZpZWQgZm9yIHNlcnZlci1zaWRlIG9wZXJhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0LCBzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT0iIikKKyAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlLCBjZXJ0ZmlsZT1DRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiY2FuJ3QgY29ubmVjdCBpbiBzZXJ2ZXItc2lkZSBtb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0LCAoSE9TVCwgODA4MCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1DRVJURklMRSwga2V5ZmlsZT1XUk9OR0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHNzbC53cmFwX3NvY2tldChzb2NrLCBjZXJ0ZmlsZT1XUk9OR0NFUlQsIGtleWZpbGU9V1JPTkdDRVJUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorCisgICAgZGVmIHRlc3RfbWF0Y2hfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIGRlZiBvayhjZXJ0LCBob3N0bmFtZSk6CisgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUoY2VydCwgaG9zdG5hbWUpCisgICAgICAgIGRlZiBmYWlsKGNlcnQsIGhvc3RuYW1lKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lLCBjZXJ0LCBob3N0bmFtZSkKKworICAgICAgICBjZXJ0ID0geydzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnZXhhbXBsZS5jb20nKSwpLCl9CisgICAgICAgIG9rKGNlcnQsICdleGFtcGxlLmNvbScpCisgICAgICAgIG9rKGNlcnQsICdFeEFtcGxlLmNPbScpCisgICAgICAgIGZhaWwoY2VydCwgJ3d3dy5leGFtcGxlLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJy5leGFtcGxlLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJ2V4YW1wbGUub3JnJykKKyAgICAgICAgZmFpbChjZXJ0LCAnZXhhbXBsZVhjb20nKQorCisgICAgICAgIGNlcnQgPSB7J3N1YmplY3QnOiAoKCgnY29tbW9uTmFtZScsICcqLmEuY29tJyksKSwpfQorICAgICAgICBvayhjZXJ0LCAnZm9vLmEuY29tJykKKyAgICAgICAgZmFpbChjZXJ0LCAnYmFyLmZvby5hLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJ2EuY29tJykKKyAgICAgICAgZmFpbChjZXJ0LCAnWGEuY29tJykKKyAgICAgICAgZmFpbChjZXJ0LCAnLmEuY29tJykKKworICAgICAgICBjZXJ0ID0geydzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnYS4qLmNvbScpLCksKX0KKyAgICAgICAgb2soY2VydCwgJ2EuZm9vLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJ2EuLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJ2EuY29tJykKKworICAgICAgICBjZXJ0ID0geydzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnZiouY29tJyksKSwpfQorICAgICAgICBvayhjZXJ0LCAnZm9vLmNvbScpCisgICAgICAgIG9rKGNlcnQsICdmLmNvbScpCisgICAgICAgIGZhaWwoY2VydCwgJ2Jhci5jb20nKQorICAgICAgICBmYWlsKGNlcnQsICdmb28uYS5jb20nKQorICAgICAgICBmYWlsKGNlcnQsICdiYXIuZm9vLmNvbScpCisKKyAgICAgICAgIyBTbGlnaHRseSBmYWtlIHJlYWwtd29ybGQgZXhhbXBsZQorICAgICAgICBjZXJ0ID0geydub3RBZnRlcic6ICdKdW4gMjYgMjE6NDE6NDYgMjAxMSBHTVQnLAorICAgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ2NvbW1vbk5hbWUnLCAnbGludXhmcnoub3JnJyksKSwpLAorICAgICAgICAgICAgICAgICdzdWJqZWN0QWx0TmFtZSc6ICgoJ0ROUycsICdsaW51eGZyLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdsaW51eGZyLmNvbScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JykpfQorICAgICAgICBvayhjZXJ0LCAnbGludXhmci5vcmcnKQorICAgICAgICBvayhjZXJ0LCAnbGludXhmci5jb20nKQorICAgICAgICAjIE5vdCBhICJETlMiIGVudHJ5CisgICAgICAgIGZhaWwoY2VydCwgJzx1bnN1cHBvcnRlZD4nKQorICAgICAgICAjIFdoZW4gdGhlcmUgaXMgYSBzdWJqZWN0QWx0TmFtZSwgY29tbW9uTmFtZSBpc24ndCB1c2VkCisgICAgICAgIGZhaWwoY2VydCwgJ2xpbnV4ZnJ6Lm9yZycpCisKKyAgICAgICAgIyBBIHByaXN0aW5lIHJlYWwtd29ybGQgZXhhbXBsZQorICAgICAgICBjZXJ0ID0geydub3RBZnRlcic6ICdEZWMgMTggMjM6NTk6NTkgMjAxMSBHTVQnLAorICAgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdzdGF0ZU9yUHJvdmluY2VOYW1lJywgJ0NhbGlmb3JuaWEnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2xvY2FsaXR5TmFtZScsICdNb3VudGFpbiBWaWV3JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ0dvb2dsZSBJbmMnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnbWFpbC5nb29nbGUuY29tJyksKSl9CisgICAgICAgIG9rKGNlcnQsICdtYWlsLmdvb2dsZS5jb20nKQorICAgICAgICBmYWlsKGNlcnQsICdnbWFpbC5jb20nKQorICAgICAgICAjIE9ubHkgY29tbW9uTmFtZSBpcyBjb25zaWRlcmVkCisgICAgICAgIGZhaWwoY2VydCwgJ0NhbGlmb3JuaWEnKQorCisgICAgICAgICMgTmVpdGhlciBjb21tb25OYW1lIG5vciBzdWJqZWN0QWx0TmFtZQorICAgICAgICBjZXJ0ID0geydub3RBZnRlcic6ICdEZWMgMTggMjM6NTk6NTkgMjAxMSBHTVQnLAorICAgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdzdGF0ZU9yUHJvdmluY2VOYW1lJywgJ0NhbGlmb3JuaWEnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2xvY2FsaXR5TmFtZScsICdNb3VudGFpbiBWaWV3JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ0dvb2dsZSBJbmMnKSwpKX0KKyAgICAgICAgZmFpbChjZXJ0LCAnbWFpbC5nb29nbGUuY29tJykKKworICAgICAgICAjIEVtcHR5IGNlcnQgLyBubyBjZXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5tYXRjaF9ob3N0bmFtZSwgTm9uZSwgJ2V4YW1wbGUuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLm1hdGNoX2hvc3RuYW1lLCB7fSwgJ2V4YW1wbGUuY29tJykKKworICAgIGRlZiB0ZXN0X3NlcnZlcl9zaWRlKHNlbGYpOgorICAgICAgICAjIHNlcnZlcl9ob3N0bmFtZSBkb2Vzbid0IHdvcmsgZm9yIHNlcnZlciBzb2NrZXRzCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHgud3JhcF9zb2NrZXQsIHNvY2ssIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9InNvbWUuaG9zdG5hbWUiKQorCitjbGFzcyBDb250ZXh0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3RvcihzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjMpCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuU1NMQ29udGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgNDIpCisKKyAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgIGRlZiB0ZXN0X3Byb3RvY29sKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gUFJPVE9DT0xTOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5wcm90b2NvbCwgcHJvdG8pCisKKyAgICBkZWYgdGVzdF9jaXBoZXJzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKKyAgICAgICAgY3R4LnNldF9jaXBoZXJzKCJERUZBVUxUIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIk5vIGNpcGhlciBjYW4gYmUgc2VsZWN0ZWQiKToKKyAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiXiQ6LDs/Kidkb3JvdGh5eCIpCisKKyAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAorICAgIGRlZiB0ZXN0X29wdGlvbnMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgIyBPUF9BTEwgaXMgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuT1BfQUxMLCBjdHgub3B0aW9ucykKKyAgICAgICAgY3R4Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLk9QX0FMTCB8IHNzbC5PUF9OT19TU0x2MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHgub3B0aW9ucykKKyAgICAgICAgY3R4Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLk9QX0FMTCB8IHNzbC5PUF9OT19TU0x2MiB8IHNzbC5PUF9OT19TU0x2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICBjdHgub3B0aW9ucykKKyAgICAgICAgaWYgY2FuX2NsZWFyX29wdGlvbnMoKToKKyAgICAgICAgICAgIGN0eC5vcHRpb25zID0gKGN0eC5vcHRpb25zICYgfnNzbC5PUF9OT19TU0x2MikgfCBzc2wuT1BfTk9fVExTdjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLk9QX0FMTCB8IHNzbC5PUF9OT19UTFN2MSB8IHNzbC5PUF9OT19TU0x2MywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMpCisgICAgICAgICAgICBjdHgub3B0aW9ucyA9IDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgY3R4Lm9wdGlvbnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zID0gMAorCisgICAgZGVmIHRlc3RfdmVyaWZ5KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICMgRGVmYXVsdCB2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfT1BUSU9OQUwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X21vZGUsIHNzbC5DRVJUX05PTkUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IDQyCisKKyAgICBkZWYgdGVzdF9sb2FkX2NlcnRfY2hhaW4oc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgIyBDb21iaW5lZCBrZXkgYW5kIGNlcnQgaW4gYSBzaW5nbGUgZmlsZQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFLCBrZXlmaWxlPUNFUlRGSUxFKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2NlcnRfY2hhaW4sIGtleWZpbGU9Q0VSVEZJTEUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKFdST05HQ0VSVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQkFEQ0VSVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oRU1QVFlDRVJUKQorICAgICAgICAjIFNlcGFyYXRlIGtleSBhbmQgY2VydAorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oT05MWUNFUlQsIE9OTFlLRVkpCisgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGU9T05MWUNFUlQsIGtleWZpbGU9T05MWUtFWSkKKyAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZT1CWVRFU19PTkxZQ0VSVCwga2V5ZmlsZT1CWVRFU19PTkxZS0VZKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAiUEVNIGxpYiIpOgorICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihPTkxZQ0VSVCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oT05MWUtFWSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGU9T05MWUtFWSwga2V5ZmlsZT1PTkxZQ0VSVCkKKyAgICAgICAgIyBNaXNtYXRjaGluZyBrZXkgYW5kIGNlcnQKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAia2V5IHZhbHVlcyBtaXNtYXRjaCIpOgorICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihTVk5fUFlUSE9OX09SR19ST09UX0NFUlQsIE9OTFlLRVkpCisKKyAgICBkZWYgdGVzdF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9Q0VSVEZJTEUsIGNhcGF0aD1Ob25lKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKEJZVEVTX0NFUlRGSUxFKQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1CWVRFU19DRVJURklMRSwgY2FwYXRoPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhXUk9OR0NFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FTk9FTlQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJQRU0gbGliIik6CisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKEJBRENFUlQpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUsIENBUEFUSCkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSwgY2FwYXRoPUJZVEVTX0NBUEFUSCkKKworICAgICAgICAjIElzc3VlICMxMDk4OTogY3Jhc2ggaWYgdGhlIHNlY29uZCBhcmd1bWVudCB0eXBlIGlzIGludmFsaWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBUcnVlKQorCisgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICBkZWYgdGVzdF9zZXNzaW9uX3N0YXRzKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gUFJPVE9DT0xTOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQocHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5zZXNzaW9uX3N0YXRzKCksIHsKKyAgICAgICAgICAgICAgICAnbnVtYmVyJzogMCwKKyAgICAgICAgICAgICAgICAnY29ubmVjdCc6IDAsCisgICAgICAgICAgICAgICAgJ2Nvbm5lY3RfZ29vZCc6IDAsCisgICAgICAgICAgICAgICAgJ2Nvbm5lY3RfcmVuZWdvdGlhdGUnOiAwLAorICAgICAgICAgICAgICAgICdhY2NlcHQnOiAwLAorICAgICAgICAgICAgICAgICdhY2NlcHRfZ29vZCc6IDAsCisgICAgICAgICAgICAgICAgJ2FjY2VwdF9yZW5lZ290aWF0ZSc6IDAsCisgICAgICAgICAgICAgICAgJ2hpdHMnOiAwLAorICAgICAgICAgICAgICAgICdtaXNzZXMnOiAwLAorICAgICAgICAgICAgICAgICd0aW1lb3V0cyc6IDAsCisgICAgICAgICAgICAgICAgJ2NhY2hlX2Z1bGwnOiAwLAorICAgICAgICAgICAgfSkKKworICAgIGRlZiB0ZXN0X3NldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyhzZWxmKToKKyAgICAgICAgIyBUaGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyB0byB0ZXN0IHRoYXQgaXQgYWN0cyBhcyBleHBlY3RlZCwKKyAgICAgICAgIyBzbyBqdXN0IGNoZWNrIGl0IGRvZXNuJ3QgY3Jhc2ggb3IgcmFpc2UgYW4gZXhjZXB0aW9uLgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCiAKIGNsYXNzIE5ldHdvcmtlZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTIwLDIxICs0MjgsMTggQEAKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FKQotICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICAgICAgYyA9IHMuZ2V0cGVlcmNlcnQoKQotICAgICAgICAgICAgaWYgYzoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlBlZXIgY2VydCAlcyBzaG91bGRuJ3QgYmUgaGVyZSEiKQotICAgICAgICAgICAgcy5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe30sIHMuZ2V0cGVlcmNlcnQoKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKICAgICAgICAgICAgICMgdGhpcyBzaG91bGQgZmFpbCBiZWNhdXNlIHdlIGhhdmUgbm8gdmVyaWZpY2F0aW9uIGNlcnRzCiAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQotICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0LCAoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHMuY2xvc2UoKQogCiAgICAgICAgICAgICAjIHRoaXMgc2hvdWxkIHN1Y2NlZWQgYmVjYXVzZSB3ZSBzcGVjaWZ5IHRoZSByb290IGNlcnQKICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCkBAIC0xNDIsNiArNDQ3LDExNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9leChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEzMjY6IGNoZWNrIGNvbm5lY3RfZXgoKSBpbXBsZW1lbnRhdGlvbgorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgorICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX1JFUVVJUkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1TVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzLmNvbm5lY3RfZXgoKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfbm9uX2Jsb2NraW5nX2Nvbm5lY3RfZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMzI2OiBub24tYmxvY2tpbmcgY29ubmVjdF9leCgpIHNob3VsZCBhbGxvdyBoYW5kc2hha2UKKyAgICAgICAgIyB0byBwcm9jZWVkIGFmdGVyIHRoZSBzb2NrZXQgZ2V0cyByZWFkeS4KKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9U1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb19oYW5kc2hha2Vfb25fY29ubmVjdD1GYWxzZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgIHJjID0gcy5jb25uZWN0X2V4KCgnc3ZuLnB5dGhvbi5vcmcnLCA0NDMpKQorICAgICAgICAgICAgICAgICMgRVdPVUxEQkxPQ0sgdW5kZXIgV2luZG93cywgRUlOUFJPR1JFU1MgZWxzZXdoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyYywgKDAsIGVycm5vLkVJTlBST0dSRVNTLCBlcnJuby5FV09VTERCTE9DSykpCisgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBjb25uZWN0IHRvIGZpbmlzaAorICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAjIE5vbi1ibG9ja2luZyBoYW5kc2hha2UKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzLmRvX2hhbmRzaGFrZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW3NdLCBbXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZXJyLmFyZ3NbMF0gPT0gc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzXSwgW10sIDUuMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAjIFNTTCBlc3RhYmxpc2hlZAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF93aXRoX2NvbnRleHQoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInN2bi5weXRob24ub3JnIik6CisgICAgICAgICAgICAjIFNhbWUgYXMgdGVzdF9jb25uZWN0LCBidXQgd2l0aCBhIHNlcGFyYXRlbHkgY3JlYXRlZCBjb250ZXh0CisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHt9LCBzLmdldHBlZXJjZXJ0KCkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgIyBTYW1lIHdpdGggYSBzZXJ2ZXIgaG9zdG5hbWUKKyAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ic3ZuLnB5dGhvbi5vcmciKQorICAgICAgICAgICAgaWYgc3NsLkhBU19TTkk6CisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzLmNvbm5lY3QsICgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBmYWlsIGJlY2F1c2Ugd2UgaGF2ZSBubyB2ZXJpZmljYXRpb24gY2VydHMKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBzID0gY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJjZXJ0aWZpY2F0ZSB2ZXJpZnkgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCwgKCJzdm4ucHl0aG9uLm9yZyIsIDQ0MykpCisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGQgc3VjY2VlZCBiZWNhdXNlIHdlIHNwZWNpZnkgdGhlIHJvb3QgY2VydAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTVk5fUFlUSE9OX09SR19ST09UX0NFUlQpCisgICAgICAgICAgICBzID0gY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgc2VydmVyIGNlcnRpZmljYXRlcyB1c2luZyB0aGUgYGNhcGF0aGAgYXJndW1lbnQKKyAgICAgICAgIyBOT1RFOiB0aGUgc3ViamVjdCBoYXNoaW5nIGFsZ29yaXRobSBoYXMgYmVlbiBjaGFuZ2VkIGJldHdlZW4KKyAgICAgICAgIyBPcGVuU1NMIDAuOS44biBhbmQgMS4wLjAsIGFzIGEgcmVzdWx0IHRoZSBjYXBhdGggZGlyZWN0b3J5IG11c3QKKyAgICAgICAgIyBjb250YWluIGJvdGggdmVyc2lvbnMgb2YgZWFjaCBjZXJ0aWZpY2F0ZSAoc2FtZSBjb250ZW50LCBkaWZmZXJlbnQKKyAgICAgICAgIyBmaWxlbmFtZSkgZm9yIHRoaXMgdGVzdCB0byBiZSBwb3J0YWJsZSBhY3Jvc3MgT3BlblNTTCByZWxlYXNlcy4KKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgic3ZuLnB5dGhvbi5vcmciKToKKyAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYXBhdGg9Q0FQQVRIKQorICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkKKyAgICAgICAgICAgIHMuY29ubmVjdCgoInN2bi5weXRob24ub3JnIiwgNDQzKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgIyBTYW1lIHdpdGggYSBieXRlcyBgY2FwYXRoYCBhcmd1bWVudAorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhcGF0aD1CWVRFU19DQVBBVEgpCisgICAgICAgICAgICBzID0gY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICAgICAgcy5jb25uZWN0KCgic3ZuLnB5dGhvbi5vcmciLCA0NDMpKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKQEAgLTE2MSwxMiArNTc0LDkgQEAKICAgICAgICAgICAgICMgQ2xvc2luZyB0aGUgU1NMIHNvY2tldCBzaG91bGQgY2xvc2UgdGhlIGZkIHRvbwogICAgICAgICAgICAgc3MuY2xvc2UoKQogICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAgICAgb3MucmVhZChmZCwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJPU0Vycm9yIHdhc24ndCByYWlzZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUJBREYpCiAKICAgICBkZWYgdGVzdF9ub25fYmxvY2tpbmdfaGFuZHNoYWtlKHNlbGYpOgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzdm4ucHl0aG9uLm9yZyIpOgpAQCAtMjE0LDE5ICs2MjQsMzAgQEAKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblZlcmlmaWVkIGNlcnRpZmljYXRlIGZvciBzdm4ucHl0aG9uLm9yZzo0NDMgaXNcbiVzXG4iICUgcGVtKQogCi0gICAgIyBUZXN0IGRpc2FibGVkOiBPUEVOU1NMX1ZFUlNJT04qIG5vdCBhdmFpbGFibGUgaW4gUHl0aG9uIDMuMQorICAgIGRlZiB0ZXN0X2NpcGhlcnMoc2VsZik6CisgICAgICAgIHJlbW90ZSA9ICgic3ZuLnB5dGhvbi5vcmciLCA0NDMpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQocmVtb3RlWzBdKToKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLCBjaXBoZXJzPSJBTEwiKQorICAgICAgICAgICAgcy5jb25uZWN0KHJlbW90ZSkKKyAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9OT05FLCBjaXBoZXJzPSJERUZBVUxUIikKKyAgICAgICAgICAgIHMuY29ubmVjdChyZW1vdGUpCisgICAgICAgICAgICAjIEVycm9yIGNoZWNraW5nIGNhbiBoYXBwZW4gYXQgaW5zdGFudGlhdGlvbiBvciB3aGVuIGNvbm5lY3RpbmcKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzc2wuU1NMRXJyb3IsICJObyBjaXBoZXIgY2FuIGJlIHNlbGVjdGVkIik6CisgICAgICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNzbC5DRVJUX05PTkUsIGNpcGhlcnM9Il4kOiw7PyonZG9yb3RoeXgiKQorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QocmVtb3RlKQorCiAgICAgZGVmIHRlc3RfYWxnb3JpdGhtcyhzZWxmKToKLSAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgidGVzdF9hbGdvcml0aG1zIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBpdCBmYWlscyBvbiBzb21lIG9sZCBPcGVuU1NMIHZlcnNpb25zIikKLSAgICAgICAgcmV0dXJuCiAgICAgICAgICMgSXNzdWUgIzg0ODQ6IGFsbCBhbGdvcml0aG1zIHNob3VsZCBiZSBhdmFpbGFibGUgd2hlbiB2ZXJpZnlpbmcgYQogICAgICAgICAjIGNlcnRpZmljYXRlLgogICAgICAgICAjIFNIQTI1NiB3YXMgYWRkZWQgaW4gT3BlblNTTCAwLjkuOAogICAgICAgICBpZiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPCAoMCwgOSwgOCwgMCwgMTUpOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiU0hBMjU2IG5vdCBhdmFpbGFibGUgb24gJXIiICUgc3NsLk9QRU5TU0xfVkVSU0lPTikKLSAgICAgICAgIyBOT1RFOiBodHRwczovL3NoYTI1Ni50YnMtaW50ZXJuZXQuY29tIGlzIGFub3RoZXIgcG9zc2libGUgdGVzdCBob3N0Ci0gICAgICAgIHJlbW90ZSA9ICgic2hhMi5oYm9lY2suZGUiLCA0NDMpCisgICAgICAgICMgaHR0cHM6Ly9zaGEyLmhib2Vjay5kZS8gd2FzIHVzZWQgdW50aWwgMjAxMS0wMS0wOCAobm8gcm91dGUgdG8gaG9zdCkKKyAgICAgICAgcmVtb3RlID0gKCJzaGEyNTYudGJzLWludGVybmV0LmNvbSIsIDQ0MykKICAgICAgICAgc2hhMjU2X2NlcnQgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgInNoYTI1Ni5wZW0iKQogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCJzaGEyNTYudGJzLWludGVybmV0LmNvbSIpOgogICAgICAgICAgICAgcyA9IHNzbC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKQEAgLTI1MCw2ICs2NzEsOCBAQAogZWxzZToKICAgICBfaGF2ZV90aHJlYWRzID0gVHJ1ZQogCisgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgorCiAgICAgY2xhc3MgVGhyZWFkZWRFY2hvU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCiAgICAgICAgIGNsYXNzIENvbm5lY3Rpb25IYW5kbGVyKHRocmVhZGluZy5UaHJlYWQpOgpAQCAtMjcwLDExICs2OTMsOCBAQAogCiAgICAgICAgICAgICBkZWYgd3JhcF9jb25uKHNlbGYpOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zc2xjb25uID0gc3NsLndyYXBfc29ja2V0KHNlbGYuc29jaywgc2VydmVyX3NpZGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPXNlbGYuc2VydmVyLmNlcnRpZmljYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zZXJ2ZXIucHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1zZWxmLnNlcnZlci5jYWNlcnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPXNlbGYuc2VydmVyLmNlcnRyZXFzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbm4gPSBzZWxmLnNlcnZlci5jb250ZXh0LndyYXBfc29ja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLCBzZXJ2ZXJfc2lkZT1UcnVlKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgWFhYIFZhcmlvdXMgZXJyb3JzIGNhbiBoYXZlIGhhcHBlbmVkIGhlcmUsIGZvciBleGFtcGxlCiAgICAgICAgICAgICAgICAgICAgICMgYSBtaXNtYXRjaGluZyBwcm90b2NvbCB2ZXJzaW9uLCBhbiBpbnZhbGlkIGNlcnRpZmljYXRlLApAQCAtMjg2LDcgKzcwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jZXJ0cmVxcyA9PSBzc2wuQ0VSVF9SRVFVSVJFRDoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIuY29udGV4dC52ZXJpZnlfbW9kZSA9PSBzc2wuQ0VSVF9SRVFVSVJFRDoKICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzZWxmLnNzbGNvbm4uZ2V0cGVlcmNlcnQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlIGFuZCBzZWxmLnNlcnZlci5jaGF0dHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsaWVudCBjZXJ0IGlzICIgKyBwcHJpbnQucGZvcm1hdChjZXJ0KSArICJcbiIpCkBAIC0zNjYsMTcgKzc4NiwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBoYXJuZXNzLCB3ZSB3YW50IHRvIHN0b3AgdGhlIHNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRpZmljYXRlLCBzc2xfdmVyc2lvbj1Ob25lLAorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY2VydGlmaWNhdGU9Tm9uZSwgc3NsX3ZlcnNpb249Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgIGNlcnRyZXFzPU5vbmUsIGNhY2VydHM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzdGFydHRsc19zZXJ2ZXI9RmFsc2UpOgotICAgICAgICAgICAgaWYgc3NsX3ZlcnNpb24gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9UTFN2MQotICAgICAgICAgICAgaWYgY2VydHJlcXMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBjZXJ0cmVxcyA9IHNzbC5DRVJUX05PTkUKLSAgICAgICAgICAgIHNlbGYuY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZQotICAgICAgICAgICAgc2VsZi5wcm90b2NvbCA9IHNzbF92ZXJzaW9uCi0gICAgICAgICAgICBzZWxmLmNlcnRyZXFzID0gY2VydHJlcXMKLSAgICAgICAgICAgIHNlbGYuY2FjZXJ0cyA9IGNhY2VydHMKKyAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1UcnVlLCBjb25uZWN0aW9uY2hhdHR5PUZhbHNlLCBzdGFydHRsc19zZXJ2ZXI9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICBjaXBoZXJzPU5vbmUsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICAgICBpZiBjb250ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsX3ZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzc2xfdmVyc2lvbiBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC52ZXJpZnlfbW9kZSA9IChjZXJ0cmVxcyBpZiBjZXJ0cmVxcyBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHNzbC5DRVJUX05PTkUpCisgICAgICAgICAgICAgICAgaWYgY2FjZXJ0czoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWNlcnRzKQorICAgICAgICAgICAgICAgIGlmIGNlcnRpZmljYXRlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRpZmljYXRlKQorICAgICAgICAgICAgICAgIGlmIGNpcGhlcnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQogICAgICAgICAgICAgc2VsZi5jaGF0dHkgPSBjaGF0dHkKICAgICAgICAgICAgIHNlbGYuY29ubmVjdGlvbmNoYXR0eSA9IGNvbm5lY3Rpb25jaGF0dHkKICAgICAgICAgICAgIHNlbGYuc3RhcnR0bHNfc2VydmVyID0gc3RhcnR0bHNfc2VydmVyCkBAIC00MTUsOTggKzg0Miw2IEBACiAgICAgICAgIGRlZiBzdG9wKHNlbGYpOgogICAgICAgICAgICAgc2VsZi5hY3RpdmUgPSBGYWxzZQogCi0gICAgY2xhc3MgT3VySFRUUFNTZXJ2ZXIodGhyZWFkaW5nLlRocmVhZCk6Ci0KLSAgICAgICAgIyBUaGlzIG9uZSdzIGJhc2VkIG9uIEhUVFBTZXJ2ZXIsIHdoaWNoIGlzIGJhc2VkIG9uIFNvY2tldFNlcnZlcgotCi0gICAgICAgIGNsYXNzIEhUVFBTU2VydmVyKEhUVFBTZXJ2ZXIpOgotCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyX2FkZHJlc3MsIFJlcXVlc3RIYW5kbGVyQ2xhc3MsIGNlcnRmaWxlKToKLSAgICAgICAgICAgICAgICBIVFRQU2VydmVyLl9faW5pdF9fKHNlbGYsIHNlcnZlcl9hZGRyZXNzLCBSZXF1ZXN0SGFuZGxlckNsYXNzKQotICAgICAgICAgICAgICAgICMgd2UgYXNzdW1lIHRoZSBjZXJ0ZmlsZSBjb250YWlucyBib3RoIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZQotICAgICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQotICAgICAgICAgICAgICAgIHNlbGYuYWxsb3dfcmV1c2VfYWRkcmVzcyA9IFRydWUKLQotICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgnPCVzICVzOiVzPicgJQotICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfcG9ydCkpCi0KLSAgICAgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKLSAgICAgICAgICAgICAgICAjIG92ZXJyaWRlIHRoaXMgdG8gd3JhcCBzb2NrZXQgd2l0aCBTU0wKLSAgICAgICAgICAgICAgICBzb2NrLCBhZGRyID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKLSAgICAgICAgICAgICAgICBzc2xjb25uID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1zZWxmLmNlcnRmaWxlKQotICAgICAgICAgICAgICAgIHJldHVybiBzc2xjb25uLCBhZGRyCi0KLSAgICAgICAgY2xhc3MgUm9vdGVkSFRUUFJlcXVlc3RIYW5kbGVyKFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcik6Ci0gICAgICAgICAgICAjIG5lZWQgdG8gb3ZlcnJpZGUgdHJhbnNsYXRlX3BhdGggdG8gZ2V0IGEga25vd24gcm9vdCwKLSAgICAgICAgICAgICMgaW5zdGVhZCBvZiB1c2luZyBvcy5jdXJkaXIsIHNpbmNlIHRoZSB0ZXN0IGNvdWxkIGJlCi0gICAgICAgICAgICAjIHJ1biBmcm9tIGFueXdoZXJlCi0KLSAgICAgICAgICAgIHNlcnZlcl92ZXJzaW9uID0gIlRlc3RIVFRQUy8xLjAiCi0KLSAgICAgICAgICAgIHJvb3QgPSBOb25lCi0KLSAgICAgICAgICAgIGRlZiB0cmFuc2xhdGVfcGF0aChzZWxmLCBwYXRoKToKLSAgICAgICAgICAgICAgICAiIiJUcmFuc2xhdGUgYSAvLXNlcGFyYXRlZCBQQVRIIHRvIHRoZSBsb2NhbCBmaWxlbmFtZSBzeW50YXguCi0KLSAgICAgICAgICAgICAgICBDb21wb25lbnRzIHRoYXQgbWVhbiBzcGVjaWFsIHRoaW5ncyB0byB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0KLSAgICAgICAgICAgICAgICAoZS5nLiBkcml2ZSBvciBkaXJlY3RvcnkgbmFtZXMpIGFyZSBpZ25vcmVkLiAgKFhYWCBUaGV5IHNob3VsZAotICAgICAgICAgICAgICAgIHByb2JhYmx5IGJlIGRpYWdub3NlZC4pCi0KLSAgICAgICAgICAgICAgICAiIiIKLSAgICAgICAgICAgICAgICAjIGFiYW5kb24gcXVlcnkgcGFyYW1ldGVycwotICAgICAgICAgICAgICAgIHBhdGggPSB1cmxsaWIucGFyc2UudXJscGFyc2UocGF0aClbMl0KLSAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aCh1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoKSkKLSAgICAgICAgICAgICAgICB3b3JkcyA9IHBhdGguc3BsaXQoJy8nKQotICAgICAgICAgICAgICAgIHdvcmRzID0gZmlsdGVyKE5vbmUsIHdvcmRzKQotICAgICAgICAgICAgICAgIHBhdGggPSBzZWxmLnJvb3QKLSAgICAgICAgICAgICAgICBmb3Igd29yZCBpbiB3b3JkczoKLSAgICAgICAgICAgICAgICAgICAgZHJpdmUsIHdvcmQgPSBvcy5wYXRoLnNwbGl0ZHJpdmUod29yZCkKLSAgICAgICAgICAgICAgICAgICAgaGVhZCwgd29yZCA9IG9zLnBhdGguc3BsaXQod29yZCkKLSAgICAgICAgICAgICAgICAgICAgaWYgd29yZCBpbiBzZWxmLnJvb3Q6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgd29yZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0aAotCi0gICAgICAgICAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6Ci0gICAgICAgICAgICAgICAgIyB3ZSBvdmVycmlkZSB0aGlzIHRvIHN1cHByZXNzIGxvZ2dpbmcgdW5sZXNzICJ2ZXJib3NlIgotCi0gICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgc2VydmVyICglczolZCAlcyk6XG4gICBbJXNdICVzXG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5zZXJ2ZXIuc2VydmVyX2FkZHJlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlcl9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlcXVlc3QuY2lwaGVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nX2RhdGVfdGltZV9zdHJpbmcoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0JWFyZ3MpKQotCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNlcnRmaWxlKToKLSAgICAgICAgICAgIHNlbGYuZmxhZyA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuUm9vdGVkSFRUUFJlcXVlc3RIYW5kbGVyLnJvb3QgPSBvcy5wYXRoLnNwbGl0KENFUlRGSUxFKVswXQotICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLkhUVFBTU2VydmVyKAotICAgICAgICAgICAgICAgIChIT1NULCAwKSwgc2VsZi5Sb290ZWRIVFRQUmVxdWVzdEhhbmRsZXIsIGNlcnRmaWxlKQotICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5zZXJ2ZXIuc2VydmVyX3BvcnQKLSAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgICAgIHNlbGYuZGFlbW9uID0gVHJ1ZQotCi0gICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICI8JXMgJXM+IiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5zZXJ2ZXIpCi0KLSAgICAgICAgZGVmIHN0YXJ0KHNlbGYsIGZsYWc9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLmZsYWcgPSBmbGFnCi0gICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkLnN0YXJ0KHNlbGYpCi0KLSAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYuZmxhZzoKLSAgICAgICAgICAgICAgICBzZWxmLmZsYWcuc2V0KCkKLSAgICAgICAgICAgIHNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2ZXIoMC4wNSkKLQotICAgICAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuc2VydmVyLnNodXRkb3duKCkKLQotCiAgICAgY2xhc3MgQXN5bmNvcmVFY2hvU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCiAgICAgICAgICMgdGhpcyBvbmUncyBiYXNlZCBvbiBhc3luY29yZS5kaXNwYXRjaGVyCkBAIC01NzIsOCArOTA3LDcgQEAKICAgICAgICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNvY2spCiAgICAgICAgICAgICAgICAgc2VsZi5saXN0ZW4oNSkKIAotICAgICAgICAgICAgZGVmIGhhbmRsZV9hY2NlcHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgc29ja19vYmosIGFkZHIgPSBzZWxmLmFjY2VwdCgpCisgICAgICAgICAgICBkZWYgaGFuZGxlX2FjY2VwdGVkKHNlbGYsIHNvY2tfb2JqLCBhZGRyKToKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBzZXJ2ZXI6ICBuZXcgY29ubmVjdGlvbiBmcm9tICVzOiVzXG4iICVhZGRyKQogICAgICAgICAgICAgICAgIHNlbGYuQ29ubmVjdGlvbkhhbmRsZXIoc29ja19vYmosIHNlbGYuY2VydGZpbGUpCkBAIC02MjYsMzMgKzk2MCwzNSBAQAogICAgICAgICAjIHRyeSB0byBjb25uZWN0CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c3NsLlBST1RPQ09MX1RMU3YxKQotICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgICAgIHMgPSBzc2wud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQogICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5TU0xFcnJvciBpcyAlc1xuIiAlIHguYXJnc1sxXSkKICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuc29ja2V0LmVycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICBpZiB4LmVycm5vICE9IGVycm5vLkVOT0VOVDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxJT0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCiAgICAgICAgICAgICBzZXJ2ZXIuam9pbigpCiAKLSAgICBkZWYgc2VydmVyX3BhcmFtc190ZXN0KGNlcnRmaWxlLCBwcm90b2NvbCwgY2VydHJlcXMsIGNhY2VydHNmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2NlcnRmaWxlLCBjbGllbnRfcHJvdG9jb2w9Tm9uZSwgaW5kYXRhPWIiRk9PXG4iLAorICAgIGRlZiBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LCBpbmRhdGE9YiJGT09cbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBMYXVuY2ggYSBzZXJ2ZXIsIGNvbm5lY3QgYSBjbGllbnQgdG8gaXQgYW5kIHRyeSB2YXJpb3VzIHJlYWRzCiAgICAgICAgIGFuZCB3cml0ZXMuCiAgICAgICAgICIiIgotICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY2VydGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0cmVxcz1jZXJ0cmVxcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjZXJ0cz1jYWNlcnRzZmlsZSwKKyAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9Y2hhdHR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbmNoYXR0eT1GYWxzZSkKICAgICAgICAgZmxhZyA9IHRocmVhZGluZy5FdmVudCgpCkBAIC02NjAsMzAgKzk5NiwyNCBAQAogICAgICAgICAjIHdhaXQgZm9yIGl0IHRvIHN0YXJ0CiAgICAgICAgIGZsYWcud2FpdCgpCiAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKLSAgICAgICAgaWYgY2xpZW50X3Byb3RvY29sIGlzIE5vbmU6Ci0gICAgICAgICAgICBjbGllbnRfcHJvdG9jb2wgPSBwcm90b2NvbAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2xpZW50X2NlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz1jYWNlcnRzZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRyZXFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1jbGllbnRfcHJvdG9jb2wpCisgICAgICAgICAgICBzID0gY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQogICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCi0gICAgICAgICAgICBhcmcgPSBpbmRhdGEKLSAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6Ci0gICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgIiBjbGllbnQ6ICBzZW5kaW5nICVyLi4uXG4iICUgaW5kYXRhKQotICAgICAgICAgICAgcy53cml0ZShhcmcpCi0gICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKLSAgICAgICAgICAgIGlmIGNvbm5lY3Rpb25jaGF0dHk6Ci0gICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgcmVhZCAlclxuIiAlIG91dGRhdGEpCi0gICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKLSAgICAgICAgICAgICAgICAgICAgImJhZCBkYXRhIDw8JXI+PiAoJWQpIHJlY2VpdmVkOyBleHBlY3RlZCA8PCVyPj4gKCVkKVxuIgotICAgICAgICAgICAgICAgICAgICAlIChvdXRkYXRhWzoyMF0sIGxlbihvdXRkYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW5kYXRhWzoyMF0ubG93ZXIoKSwgbGVuKGluZGF0YSkpKQorICAgICAgICAgICAgZm9yIGFyZyBpbiBbaW5kYXRhLCBieXRlYXJyYXkoaW5kYXRhKSwgbWVtb3J5dmlldyhpbmRhdGEpXToKKyAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgY2xpZW50OiAgc2VuZGluZyAlci4uLlxuIiAlIGluZGF0YSkKKyAgICAgICAgICAgICAgICBzLndyaXRlKGFyZykKKyAgICAgICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKKyAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgcmVhZCAlclxuIiAlIG91dGRhdGEpCisgICAgICAgICAgICAgICAgaWYgb3V0ZGF0YSAhPSBpbmRhdGEubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIGRhdGEgPDwlcj4+ICglZCkgcmVjZWl2ZWQ7IGV4cGVjdGVkIDw8JXI+PiAoJWQpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAlIChvdXRkYXRhWzoyMF0sIGxlbihvdXRkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGF0YVs6MjBdLmxvd2VyKCksIGxlbihpbmRhdGEpKSkKICAgICAgICAgICAgIHMud3JpdGUoYiJvdmVyXG4iKQogICAgICAgICAgICAgaWYgY29ubmVjdGlvbmNoYXR0eToKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CkBAIC02OTMsMTAgKzEwMjMsOCBAQAogICAgICAgICAgICAgc2VydmVyLnN0b3AoKQogICAgICAgICAgICAgc2VydmVyLmpvaW4oKQogCi0gICAgZGVmIHRyeV9wcm90b2NvbF9jb21ibyhzZXJ2ZXJfcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rfc3VjY2VzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRzcmVxcz1Ob25lKToKKyAgICBkZWYgdHJ5X3Byb3RvY29sX2NvbWJvKHNlcnZlcl9wcm90b2NvbCwgY2xpZW50X3Byb3RvY29sLCBleHBlY3Rfc3VjY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRzcmVxcz1Ob25lLCBzZXJ2ZXJfb3B0aW9ucz0wLCBjbGllbnRfb3B0aW9ucz0wKToKICAgICAgICAgaWYgY2VydHNyZXFzIGlzIE5vbmU6CiAgICAgICAgICAgICBjZXJ0c3JlcXMgPSBzc2wuQ0VSVF9OT05FCiAgICAgICAgIGNlcnR0eXBlID0gewpAQCAtNzEwLDExICsxMDM4LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzc2wuZ2V0X3Byb3RvY29sX25hbWUoY2xpZW50X3Byb3RvY29sKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5nZXRfcHJvdG9jb2xfbmFtZShzZXJ2ZXJfcHJvdG9jb2wpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHR5cGUpKQorICAgICAgICBjbGllbnRfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KGNsaWVudF9wcm90b2NvbCkKKyAgICAgICAgY2xpZW50X2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBjbGllbnRfb3B0aW9ucworICAgICAgICBzZXJ2ZXJfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNlcnZlcl9wcm90b2NvbCkKKyAgICAgICAgc2VydmVyX2NvbnRleHQub3B0aW9ucyA9IHNzbC5PUF9BTEwgfCBzZXJ2ZXJfb3B0aW9ucworICAgICAgICBmb3IgY3R4IGluIChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQpOgorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gY2VydHNyZXFzCisgICAgICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMsIG90aGVyd2lzZSBhbiBTU0x2MjMgY2xpZW50CisgICAgICAgICAgICAjIHdpbGwgc2VuZCBhbiBTU0x2MyBoZWxsbyAocmF0aGVyIHRoYW4gU1NMdjIpIHN0YXJ0aW5nIGZyb20KKyAgICAgICAgICAgICMgT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KKyAgICAgICAgICAgIGN0eC5zZXRfY2lwaGVycygiQUxMIikKKyAgICAgICAgICAgIGN0eC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoQ0VSVEZJTEUsIHNlcnZlcl9wcm90b2NvbCwgY2VydHNyZXFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENFUlRGSUxFLCBDRVJURklMRSwgY2xpZW50X3Byb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQorICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpCiAgICAgICAgICMgUHJvdG9jb2wgbWlzbWF0Y2ggY2FuIHJlc3VsdCBpbiBlaXRoZXIgYW4gU1NMRXJyb3IsIG9yIGEKICAgICAgICAgIyAiQ29ubmVjdGlvbiByZXNldCBieSBwZWVyIiBlcnJvci4KICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvcjoKQEAgLTczMywzNCArMTA3MSwzMiBAQAogCiAgICAgY2xhc3MgVGhyZWFkZWRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICAgICAgZGVmIHRlc3RfZWNobyhzZWxmKToKICAgICAgICAgICAgICIiIkJhc2ljIHRlc3Qgb2YgYW4gU1NMIGNsaWVudCBjb25uZWN0aW5nIHRvIGEgc2VydmVyIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQotICAgICAgICAgICAgc2VydmVyX3BhcmFtc190ZXN0KENFUlRGSUxFLCBzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5DRVJUX05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVEZJTEUsIENFUlRGSUxFLCBzc2wuUFJPVE9DT0xfVExTdjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHByb3RvY29sKQorICAgICAgICAgICAgICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFKQorICAgICAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChjb250ZXh0LCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwgY29ubmVjdGlvbmNoYXR0eT1UcnVlKQogCiAgICAgICAgIGRlZiB0ZXN0X2dldHBlZXJjZXJ0KHNlbGYpOgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKLSAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoQ0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHJlcXM9c3NsLkNFUlRfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHM9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKQorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRGSUxFKQorICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCiAgICAgICAgICAgICBmbGFnID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgICAgIHNlcnZlci5zdGFydChmbGFnKQogICAgICAgICAgICAgIyB3YWl0IGZvciBpdCB0byBzdGFydAogICAgICAgICAgICAgZmxhZy53YWl0KCkKICAgICAgICAgICAgICMgdHJ5IHRvIGNvbm5lY3QKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzID0gc3NsLndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPUNFUlRGSUxFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FfY2VydHM9Q0VSVEZJTEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgIHMgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQpAQCAtNzc2LDYgKzExMTIsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKAogICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgb3IgaW52YWxpZCAnb3JnYW5pemF0aW9uTmFtZScgZmllbGQgaW4gY2VydGlmaWNhdGUgc3ViamVjdDsgIgogICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nLiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignbm90QmVmb3JlJywgY2VydCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdub3RBZnRlcicsIGNlcnQpCisgICAgICAgICAgICAgICAgYmVmb3JlID0gc3NsLmNlcnRfdGltZV90b19zZWNvbmRzKGNlcnRbJ25vdEJlZm9yZSddKQorICAgICAgICAgICAgICAgIGFmdGVyID0gc3NsLmNlcnRfdGltZV90b19zZWNvbmRzKGNlcnRbJ25vdEFmdGVyJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGJlZm9yZSwgYWZ0ZXIpCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKQEAgLTgxNSwyMSArMTE1NiwyMiBAQAogICAgICAgICAgICAgZGVmIGxpc3RlbmVyKCk6CiAgICAgICAgICAgICAgICAgcy5saXN0ZW4oNSkKICAgICAgICAgICAgICAgICBsaXN0ZW5lcl9yZWFkeS5zZXQoKQotICAgICAgICAgICAgICAgIHMuYWNjZXB0KCkKKyAgICAgICAgICAgICAgICBuZXdzb2NrLCBhZGRyID0gcy5hY2NlcHQoKQorICAgICAgICAgICAgICAgIG5ld3NvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUuc2V0KCkKIAogICAgICAgICAgICAgZGVmIGNvbm5lY3RvcigpOgogICAgICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5LndhaXQoKQotICAgICAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgICAgICBjLmNvbm5lY3QoKEhPU1QsIHBvcnQpKQotICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzc2xfc29jayA9IHNzbC53cmFwX3NvY2tldChjKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb25uZWN0aW5nIHRvIGNsb3NlZCBTU0wgc29ja2V0IHNob3VsZCBoYXZlIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgYzoKKyAgICAgICAgICAgICAgICAgICAgYy5jb25uZWN0KChIT1NULCBwb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJfZ29uZS53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoYykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Nvbm5lY3RpbmcgdG8gY2xvc2VkIFNTTCBzb2NrZXQgc2hvdWxkIGhhdmUgZmFpbGVkJykKIAogICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWxpc3RlbmVyKQogICAgICAgICAgICAgdC5zdGFydCgpCkBAIC04MzgsMjUgKzExODAsMzIgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdC5qb2luKCkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MihzZWxmKToKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYW4gU1NMdjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxudGVzdF9wcm90b2NvbF9zc2x2MiBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGl0IGZhaWxzIG9uIE9wZW5TU0wgMS4wLjArIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgIyBTU0x2MjMgY2xpZW50IHdpdGggc3BlY2lmaWMgU1NMIG9wdGlvbnMKKyAgICAgICAgICAgIGlmIG5vX3NzbHYyX2ltcGxpZXNfc3NsdjNfaGVsbG8oKToKKyAgICAgICAgICAgICAgICAjIE5vIFNTTHYyID0+IGNsaWVudCB3aWxsIHVzZSBhbiBTU0x2MyBoZWxsbyBvbiByZWNlbnQgT3BlblNTTHMKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1NTTHYyKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjMpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MSkKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MjMoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHRvIGFuIFNTTHYyMyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3NzbHYyMyBkaXNhYmxlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIGl0IGZhaWxzIG9uIE9wZW5TU0wgMS4wLjArIikKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyLCBUcnVlKQogICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKQEAgLTg3NywyNSArMTIyNiwzNyBAQAogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAKKyAgICAgICAgICAgICMgU2VydmVyIHdpdGggc3BlY2lmaWMgU1NMIG9wdGlvbnMKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zPXNzbC5PUF9OT19TU0x2MykKKyAgICAgICAgICAgICMgV2lsbCBjaG9vc2UgVExTdjEKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zPXNzbC5PUF9OT19TU0x2MiB8IHNzbC5PUF9OT19TU0x2MykKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9vcHRpb25zPXNzbC5PUF9OT19UTFN2MSkKKworCisgICAgICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgICAgIGRlZiB0ZXN0X3Byb3RvY29sX3NzbHYzKHNlbGYpOgogICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhbiBTU0x2MyBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3NzbHYzIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gT3BlblNTTCAxLjAuMCsiKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIEZhbHNlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYzLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgaWYgbm9fc3NsdjJfaW1wbGllc19zc2x2M19oZWxsbygpOgorICAgICAgICAgICAgICAgICMgTm8gU1NMdjIgPT4gY2xpZW50IHdpbGwgdXNlIGFuIFNTTHYzIGhlbGxvIG9uIHJlY2VudCBPcGVuU1NMcworICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2MikKIAorICAgICAgICBAc2tpcF9pZl9icm9rZW5fdWJ1bnR1X3NzbAogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MShzZWxmKToKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYSBUTFN2MSBzZXJ2ZXIgd2l0aCB2YXJpb3VzIGNsaWVudCBvcHRpb25zIiIiCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG50ZXN0X3Byb3RvY29sX3Rsc3YxIGRpc2FibGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXMgaXQgZmFpbHMgb24gT3BlblNTTCAxLjAuMCsiKQotICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9UTFN2MSwgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCkBAIC05NzEsMjIgKzEzMzIsMTggQEAKIAogICAgICAgICBkZWYgdGVzdF9zb2NrZXRzZXJ2ZXIoc2VsZik6CiAgICAgICAgICAgICAiIiJVc2luZyBhIFNvY2tldFNlcnZlciB0byBjcmVhdGUgYW5kIG1hbmFnZSBTU0wgY29ubmVjdGlvbnMuIiIiCi0gICAgICAgICAgICBzZXJ2ZXIgPSBPdXJIVFRQU1NlcnZlcihDRVJURklMRSkKLSAgICAgICAgICAgIGZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICAgICAgc2VydmVyLnN0YXJ0KGZsYWcpCi0gICAgICAgICAgICAjIHdhaXQgZm9yIGl0IHRvIHN0YXJ0Ci0gICAgICAgICAgICBmbGFnLndhaXQoKQorICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgQ0VSVEZJTEUpCiAgICAgICAgICAgICAjIHRyeSB0byBjb25uZWN0CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgd2l0aCBvcGVuKENFUlRGSUxFLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIGQxID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGQyID0gJycKKyAgICAgICAgICAgICMgbm93IGZldGNoIHRoZSBzYW1lIGRhdGEgZnJvbSB0aGUgSFRUUFMgc2VydmVyCisgICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly8lczolZC8lcycgJSAoCisgICAgICAgICAgICAgICAgSE9TVCwgc2VydmVyLnBvcnQsIG9zLnBhdGguc3BsaXQoQ0VSVEZJTEUpWzFdKQorICAgICAgICAgICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQotICAgICAgICAgICAgICAgIHdpdGggb3BlbihDRVJURklMRSwgJ3JiJykgYXMgZjoKLSAgICAgICAgICAgICAgICAgICAgZDEgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgIGQyID0gJycKLSAgICAgICAgICAgICAgICAjIG5vdyBmZXRjaCB0aGUgc2FtZSBkYXRhIGZyb20gdGhlIEhUVFBTIHNlcnZlcgotICAgICAgICAgICAgICAgIHVybCA9ICdodHRwczovLyVzOiVkLyVzJyAlICgKLSAgICAgICAgICAgICAgICAgICAgSE9TVCwgc2VydmVyLnBvcnQsIG9zLnBhdGguc3BsaXQoQ0VSVEZJTEUpWzFdKQotICAgICAgICAgICAgICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCkKICAgICAgICAgICAgICAgICBkbGVuID0gZi5pbmZvKCkuZ2V0KCJjb250ZW50LWxlbmd0aCIpCiAgICAgICAgICAgICAgICAgaWYgZGxlbiBhbmQgKGludChkbGVuKSA+IDApOgogICAgICAgICAgICAgICAgICAgICBkMiA9IGYucmVhZChpbnQoZGxlbikpCkBAIC05OTQsMTUgKzEzNTEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGNsaWVudDogcmVhZCAlZCBieXRlcyBmcm9tIHJlbW90ZSBzZXJ2ZXIgJyVzJ1xuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxlbihkMiksIHNlcnZlcikpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMSwgZDIpCiAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnc3RvcHBpbmcgc2VydmVyXG4nKQotICAgICAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKLSAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJ2pvaW5pbmcgdGhyZWFkXG4nKQotICAgICAgICAgICAgICAgIHNlcnZlci5qb2luKCkKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEsIGQyKQogCiAgICAgICAgIGRlZiB0ZXN0X2FzeW5jb3JlX3NlcnZlcihzZWxmKToKICAgICAgICAgICAgICIiIkNoZWNrIHRoZSBleGFtcGxlIGFzeW5jb3JlIGludGVncmF0aW9uLiIiIgpAQCAtMTAzNyw5ICsxMzg4LDE3IEBACiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIgY2xpZW50OiAgY2xvc2luZyBjb25uZWN0aW9uLlxuIikKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIiBjbGllbnQ6ICBjb25uZWN0aW9uIGNsb3NlZC5cbiIpCiAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IHN0b3BwaW5nIHNlcnZlci5cbiIpCiAgICAgICAgICAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IGpvaW5pbmcgc2VydmVyIHRocmVhZC5cbiIpCiAgICAgICAgICAgICAgICAgc2VydmVyLmpvaW4oKQorICAgICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIGNsZWFudXA6IHN1Y2Nlc3NmdWxseSBqb2luZWQuXG4iKQogCiAgICAgICAgIGRlZiB0ZXN0X3JlY3Zfc2VuZChzZWxmKToKICAgICAgICAgICAgICIiIlRlc3QgcmVjdigpLCBzZW5kKCkgYW5kIGZyaWVuZHMuIiIiCkBAIC0xMDk2LDcgKzE0NTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9tZXRoKGluZGF0YSwgKmFyZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRkYXRhID0gcy5yZWFkKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG91dGRhdGEgIT0gaW5kYXRhLmxvd2VyKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaWxlIHNlbmRpbmcgd2l0aCA8PHtuYW1lOnN9Pj4gYmFkIGRhdGEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDx7b3V0ZGF0YTpyfT4+ICh7bm91dDpkfSkgcmVjZWl2ZWQ7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIDw8e2luZGF0YTpyfT4+ICh7bmluOmR9KVxuIi5mb3JtYXQoCkBAIC0xMTA3LDEyICsxNDY2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBzZW5kIHdpdGggbWV0aG9kIDw8e25hbWU6c30+PjsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdG8gc3VjY2VlZC5cbiIuZm9ybWF0KG5hbWU9bWV0aF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIoZSkuc3RhcnRzd2l0aChtZXRoX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDx7bmFtZTpzfT4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6IHtleHA6c31cbiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1tZXRoX25hbWUsIGV4cD1lCkBAIC0xMTI1LDcgKzE0ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcy5zZW5kKGluZGF0YSkKICAgICAgICAgICAgICAgICAgICAgICAgIG91dGRhdGEgPSByZWN2X21ldGgoKmFyZ3MpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvdXRkYXRhICE9IGluZGF0YS5sb3dlcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGlsZSByZWNlaXZpbmcgd2l0aCA8PHtuYW1lOnN9Pj4gYmFkIGRhdGEgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPDx7b3V0ZGF0YTpyfT4+ICh7bm91dDpkfSkgcmVjZWl2ZWQ7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIDw8e2luZGF0YTpyfT4+ICh7bmluOmR9KVxuIi5mb3JtYXQoCkBAIC0xMTM2LDEyICsxNDk1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0X3N1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byByZWNlaXZlIHdpdGggbWV0aG9kIDw8e25hbWU6c30+PjsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdG8gc3VjY2VlZC5cbiIuZm9ybWF0KG5hbWU9bWV0aF9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdHIoZSkuc3RhcnRzd2l0aChtZXRoX25hbWUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNZXRob2QgPDx7bmFtZTpzfT4+IGZhaWxlZCB3aXRoIHVuZXhwZWN0ZWQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uIG1lc3NhZ2U6IHtleHA6c31cbiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1tZXRoX25hbWUsIGV4cD1lCkBAIC0xMTc0LDYgKzE1MzMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBMZXQgdGhlIHNvY2tldCBoYW5nIGFyb3VuZCByYXRoZXIgdGhhbiBoYXZpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICMgaXQgY2xvc2VkIGJ5IGdhcmJhZ2UgY29sbGVjdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5zLmFwcGVuZChzZXJ2ZXIuYWNjZXB0KClbMF0pCisgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gY29ubnM6CisgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQogCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmUpCiAgICAgICAgICAgICB0LnN0YXJ0KCkKQEAgLTExODUsOCArMTU0Niw4IEBACiAgICAgICAgICAgICAgICAgICAgIGMuc2V0dGltZW91dCgwLjIpCiAgICAgICAgICAgICAgICAgICAgIGMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCiAgICAgICAgICAgICAgICAgICAgICMgV2lsbCBhdHRlbXB0IGhhbmRzaGFrZSBhbmQgdGltZSBvdXQKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoc3NsLlNTTEVycm9yLCAidGltZWQgb3V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLndyYXBfc29ja2V0LCBjKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNvY2tldC50aW1lb3V0LCAidGltZWQgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQsIGMpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgYy5jbG9zZSgpCiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMTE5NCw4ICsxNTU1LDggQEAKICAgICAgICAgICAgICAgICAgICAgYyA9IHNzbC53cmFwX3NvY2tldChjKQogICAgICAgICAgICAgICAgICAgICBjLnNldHRpbWVvdXQoMC4yKQogICAgICAgICAgICAgICAgICAgICAjIFdpbGwgYXR0ZW1wdCBoYW5kc2hha2UgYW5kIHRpbWUgb3V0Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKHNzbC5TU0xFcnJvciwgInRpbWVkIG91dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuY29ubmVjdCwgKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNvY2tldC50aW1lb3V0LCAidGltZWQgb3V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmNvbm5lY3QsIChob3N0LCBwb3J0KSkKICAgICAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgICAgICBjLmNsb3NlKCkKICAgICAgICAgICAgIGZpbmFsbHk6CkBAIC0xMjA1LDIxICsxNTY2LDMyIEBACiAKIAogZGVmIHRlc3RfbWFpbih2ZXJib3NlPUZhbHNlKToKLSAgICBpZiBza2lwX2V4cGVjdGVkOgotICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gU1NMIHN1cHBvcnQiKQorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcGxhdHMgPSB7CisgICAgICAgICAgICAnTGludXgnOiBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24sCisgICAgICAgICAgICAnTWFjJzogcGxhdGZvcm0ubWFjX3ZlciwKKyAgICAgICAgICAgICdXaW5kb3dzJzogcGxhdGZvcm0ud2luMzJfdmVyLAorICAgICAgICB9CisgICAgICAgIGZvciBuYW1lLCBmdW5jIGluIHBsYXRzLml0ZW1zKCk6CisgICAgICAgICAgICBwbGF0ID0gZnVuYygpCisgICAgICAgICAgICBpZiBwbGF0IGFuZCBwbGF0WzBdOgorICAgICAgICAgICAgICAgIHBsYXQgPSAnJXMgJXInICUgKG5hbWUsIHBsYXQpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBsYXQgPSByZXByKHBsYXRmb3JtLnBsYXRmb3JtKCkpCisgICAgICAgIHByaW50KCJ0ZXN0X3NzbDogdGVzdGluZyB3aXRoICVyICVyIiAlCisgICAgICAgICAgICAoc3NsLk9QRU5TU0xfVkVSU0lPTiwgc3NsLk9QRU5TU0xfVkVSU0lPTl9JTkZPKSkKKyAgICAgICAgcHJpbnQoIiAgICAgICAgICB1bmRlciAlcyIgJSBwbGF0KQorICAgICAgICBwcmludCgiICAgICAgICAgIEhBU19TTkkgPSAlciIgJSBzc2wuSEFTX1NOSSkKIAotICAgIGdsb2JhbCBDRVJURklMRSwgU1ZOX1BZVEhPTl9PUkdfUk9PVF9DRVJUCi0gICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleWNlcnQucGVtIikKLSAgICBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLAotICAgICAgICAiaHR0cHNfc3ZuX3B5dGhvbl9vcmdfcm9vdC5wZW0iKQorICAgIGZvciBmaWxlbmFtZSBpbiBbCisgICAgICAgIENFUlRGSUxFLCBTVk5fUFlUSE9OX09SR19ST09UX0NFUlQsIEJZVEVTX0NFUlRGSUxFLAorICAgICAgICBPTkxZQ0VSVCwgT05MWUtFWSwgQllURVNfT05MWUNFUlQsIEJZVEVTX09OTFlLRVksCisgICAgICAgIEJBRENFUlQsIEJBREtFWSwgRU1QVFlDRVJUXToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVyIiAlIGZpbGVuYW1lKQogCi0gICAgaWYgKG5vdCBvcy5wYXRoLmV4aXN0cyhDRVJURklMRSkgb3IKLSAgICAgICAgbm90IG9zLnBhdGguZXhpc3RzKFNWTl9QWVRIT05fT1JHX1JPT1RfQ0VSVCkpOgotICAgICAgICByYWlzZSBzdXBwb3J0LlRlc3RGYWlsZWQoIkNhbid0IHJlYWQgY2VydGlmaWNhdGUgZmlsZXMhIikKLQotICAgIHRlc3RzID0gW0Jhc2ljVGVzdHNdCisgICAgdGVzdHMgPSBbQ29udGV4dFRlc3RzLCBCYXNpY1NvY2tldFRlc3RzXQogCiAgICAgaWYgc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJyk6CiAgICAgICAgIHRlc3RzLmFwcGVuZChOZXR3b3JrZWRUZXN0cykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggNWI5NGJiZS4uMTQwNTdlYgotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTQsNyArNCw2IEBACiAKIGltcG9ydCBjYWxlbmRhcgogaW1wb3J0IHN5cwotaW1wb3J0IG9zCiBpbXBvcnQgcmUKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKaW5kZXggZjQ2YmU2My4uYTM1MmVlMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkKQEAgLTExMiw2ICsxMTIsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm10LmZvcm1hdCwgInswfSIsIDEwLCAyMCwgaT0xMDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZtdC5mb3JtYXQsICJ7aX0iLCAxMCwgMjAsIGk9MTAwKQogCisgICAgZGVmIHRlc3RfdmZvcm1hdF9hc3NlcnQoc2VsZik6CisgICAgICAgIGNscyA9IHN0cmluZy5Gb3JtYXR0ZXIoKQorICAgICAgICBrd2FyZ3MgPSB7CisgICAgICAgICAgICAiaSI6IDEwMAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNscy5fdmZvcm1hdCwKKyAgICAgICAgICAgICAgICBjbHMuZm9ybWF0LCAiezB9Iiwga3dhcmdzLCBzZXQoKSwgLTIpCisKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2ZpZWxkKHNlbGYpOgorICAgICAgICBjbHMgPSBzdHJpbmcuRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbHMuZm9ybWF0KCJ7MCFzfSIsICdmb28nKSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNscy5mb3JtYXQsICJ7MCFofSIsICdmb28nKQorCisgICAgZGVmIHRlc3RfZ2V0X2ZpZWxkKHNlbGYpOgorICAgICAgICBjbHMgPSBzdHJpbmcuRm9ybWF0dGVyKCkKKyAgICAgICAgY2xhc3MgTXlDbGFzczoKKyAgICAgICAgICAgIG5hbWUgPSAnbHVtYmVyamFjaycKKyAgICAgICAgeCA9IE15Q2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscy5mb3JtYXQoInswLm5hbWV9IiwgeCksICdsdW1iZXJqYWNrJykKKworICAgICAgICBsb29rdXAgPSBbImVnZ3MiLCAiYW5kIiwgInNwYW0iXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscy5mb3JtYXQoInswWzJdfSIsIGxvb2t1cCksICdzcGFtJykKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoTW9kdWxlVGVzdCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKaW5kZXggZjE1MDU0Ni4uODljMDhlZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CkBAIC0zNiw4ICszNiw4IEBACiAgICAgICAgICIiIgogICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKGRpcmVjdGl2ZSwgc2VsZi50aW1lX3R1cGxlKS5sb3dlcigpCiAgICAgICAgIGNvbXBhcmlzb24gPSB0ZXN0aW5nW3NlbGYudGltZV90dXBsZVt0dXBsZV9wb3NpdGlvbl1dCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdHJmdGltZV9vdXRwdXQgaW4gdGVzdGluZywgIiVzOiBub3QgZm91bmQgaW4gdHVwbGUiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyZnRpbWVfb3V0cHV0LCB0ZXN0aW5nLAorICAgICAgICAgICAgICAgICAgICAgICIlczogbm90IGZvdW5kIGluIHR1cGxlIiAlIGVycm9yX21zZykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbXBhcmlzb24gPT0gc3RyZnRpbWVfb3V0cHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBwb3NpdGlvbiB3aXRoaW4gdHVwbGUgaW5jb3JyZWN0OyAlcyAhPSAlcyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yX21zZywgY29tcGFyaXNvbiwgc3RyZnRpbWVfb3V0cHV0KSkKQEAgLTYxLDggKzYxLDggQEAKICAgICBkZWYgdGVzdF9hbV9wbShzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgQU0vUE0gcmVwcmVzZW50YXRpb24gZG9uZSBwcm9wZXJseQogICAgICAgICBzdHJmdGltZV9vdXRwdXQgPSB0aW1lLnN0cmZ0aW1lKCIlcCIsIHNlbGYudGltZV90dXBsZSkubG93ZXIoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZnRpbWVfb3V0cHV0IGluIHNlbGYuTFRfaW5zLmFtX3BtLAotICAgICAgICAgICAgICAgICAgICAgICAgIkFNL1BNIHJlcHJlc2VudGF0aW9uIG5vdCBpbiB0dXBsZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyZnRpbWVfb3V0cHV0LCBzZWxmLkxUX2lucy5hbV9wbSwKKyAgICAgICAgICAgICAgICAgICAgICAiQU0vUE0gcmVwcmVzZW50YXRpb24gbm90IGluIHR1cGxlIikKICAgICAgICAgaWYgc2VsZi50aW1lX3R1cGxlWzNdIDwgMTI6IHBvc2l0aW9uID0gMAogICAgICAgICBlbHNlOiBwb3NpdGlvbiA9IDEKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0cmZ0aW1lX291dHB1dCA9PSBzZWxmLkxUX2lucy5hbV9wbVtwb3NpdGlvbl0sCkBAIC03Miw3ICs3Miw3IEBACiAgICAgICAgICMgTWFrZSBzdXJlIHRpbWV6b25lIGlzIGNvcnJlY3QKICAgICAgICAgdGltZXpvbmUgPSB0aW1lLnN0cmZ0aW1lKCIlWiIsIHNlbGYudGltZV90dXBsZSkubG93ZXIoKQogICAgICAgICBpZiB0aW1lem9uZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVswXSBvciBcCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZXpvbmUgaW4gc2VsZi5MVF9pbnMudGltZXpvbmVbMF0gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lem9uZSBpbiBzZWxmLkxUX2lucy50aW1lem9uZVsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltZXpvbmUgJXMgbm90IGZvdW5kIGluICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRpbWV6b25lLCBzZWxmLkxUX2lucy50aW1lem9uZSkpCkBAIC0xMzMsOSArMTMzLDkgQEAKICAgICAgICAgIyBNYWtlIHN1cmUgYW55IGNoYXJhY3RlcnMgaW4gdGhlIGZvcm1hdCBzdHJpbmcgdGhhdCBtaWdodCBiZSB0YWtlbiBhcwogICAgICAgICAjIHJlZ2V4IHN5bnRheCBpcyBlc2NhcGVkLgogICAgICAgICBwYXR0ZXJuX3N0cmluZyA9IHNlbGYudGltZV9yZS5wYXR0ZXJuKCJcZCsiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUociJcXGRcKyIgaW4gcGF0dGVybl9zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXMgZG9lcyBub3QgaGF2ZSByZSBjaGFyYWN0ZXJzIGVzY2FwZWQgcHJvcGVybHkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5fc3RyaW5nKQorICAgICAgICBzZWxmLmFzc2VydEluKHIiXFxkXCsiLCBwYXR0ZXJuX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAiJXMgZG9lcyBub3QgaGF2ZSByZSBjaGFyYWN0ZXJzIGVzY2FwZWQgcHJvcGVybHkiICUKKyAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuX3N0cmluZykKIAogICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBjb21waWxlZCByZWdleCBpcyBjb3JyZWN0CkBAIC0yOTgsOSArMjk4LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJwX291dHB1dC50bV9pc2RzdCwgMCkKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoIkdNVCIsICIlWiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RycF9vdXRwdXQudG1faXNkc3QsIDApCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAibWFjIjoKLSAgICAgICAgICAgICMgVGltZXpvbmVzIGRvbid0IHJlYWxseSB3b3JrIG9uIE1hY09TOQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRpbWVfdHVwbGUgPSB0aW1lLmxvY2FsdGltZSgpCiAgICAgICAgIHN0cmZfb3V0cHV0ID0gdGltZS5zdHJmdGltZSgiJVoiKSAgI1VUQyBkb2VzIG5vdCBoYXZlIGEgdGltZXpvbmUKICAgICAgICAgc3RycF9vdXRwdXQgPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUoc3RyZl9vdXRwdXQsICIlWiIpCkBAIC0zMTcsOCArMzE0LDYgQEAKICAgICBkZWYgdGVzdF9iYWRfdGltZXpvbmUoc2VsZik6CiAgICAgICAgICMgRXhwbGljaXRseSB0ZXN0IHBvc3NpYmlsaXR5IG9mIGJhZCB0aW1lem9uZTsKICAgICAgICAgIyB3aGVuIHRpbWUudHpuYW1lWzBdID09IHRpbWUudHpuYW1lWzFdIGFuZCB0aW1lLmRheWxpZ2h0Ci0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAibWFjIjoKLSAgICAgICAgICAgIHJldHVybiAjTWFjT1M5IGhhcyBzZXZlcmVseSBicm9rZW4gdGltZXpvbmUgc3VwcG9ydC4KICAgICAgICAgdHpfbmFtZSA9IHRpbWUudHpuYW1lWzBdCiAgICAgICAgIGlmIHR6X25hbWUudXBwZXIoKSBpbiAoIlVUQyIsICJHTVQiKToKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQppbmRleCBlMzk1NThhLi43YTQyYTg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMiwxMiArMiwxNSBAQAogIyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAyLjcgYW5kIDMuMS4KIAogaW1wb3J0IHJhbmRvbQotaW1wb3J0IHN0cnVjdAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIAoraWYgZ2V0YXR0cihzeXMsICdmbG9hdF9yZXByX3N0eWxlJywgJycpICE9ICdzaG9ydCc6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ2NvcnJlY3RseS1yb3VuZGVkIHN0cmluZy0+ZmxvYXQgY29udmVyc2lvbnMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtJykKKwogIyBDb3JyZWN0bHkgcm91bmRlZCBzdHIgLT4gZmxvYXQgaW4gcHVyZSBQeXRob24sIGZvciBjb21wYXJpc29uLgogCiBzdHJ0b2RfcGFyc2VyID0gcmUuY29tcGlsZShyIiIiICAgICMgQSBudW1lcmljIHN0cmluZyBjb25zaXN0cyBvZjoKQEAgLTE5LDYgKzIyLDggQEAKICAgICBcWgogIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkubWF0Y2gKIAorIyBQdXJlIFB5dGhvbiB2ZXJzaW9uIG9mIGNvcnJlY3RseSByb3VuZGVkIHN0cmluZy0+ZmxvYXQgY29udmVyc2lvbi4KKyMgQXZvaWRzIGFueSB1c2Ugb2YgZmxvYXRpbmctcG9pbnQgYnkgcmV0dXJuaW5nIHRoZSByZXN1bHQgYXMgYSBoZXggc3RyaW5nLgogZGVmIHN0cnRvZChzLCBtYW50X2RpZz01MywgbWluX2V4cCA9IC0xMDIxLCBtYXhfZXhwID0gMTAyNCk6CiAgICAgIiIiQ29udmVydCBhIGZpbml0ZSBkZWNpbWFsIHN0cmluZyB0byBhIGhleCBzdHJpbmcgcmVwcmVzZW50aW5nIGFuCiAgICAgSUVFRSA3NTQgYmluYXJ5NjQgZmxvYXQuICBSZXR1cm4gJ2luZicgb3IgJy1pbmYnIG9uIG92ZXJmbG93LgpAQCAtNzgsOCArODMsNiBAQAogCiBURVNUX1NJWkUgPSAxMAogCi1AdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRhdHRyKHN5cywgJ2Zsb2F0X3JlcHJfc3R5bGUnLCAnJykgPT0gJ3Nob3J0JywKLSAgICAgICAgICAgICAgICAgICAgICJhcHBsaWVzIG9ubHkgd2hlbiB1c2luZyBzaG9ydCBmbG9hdCByZXByIHN0eWxlIikKIGNsYXNzIFN0cnRvZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgY2hlY2tfc3RydG9kKHNlbGYsIHMpOgogICAgICAgICAiIiJDb21wYXJlIHRoZSByZXN1bHQgb2YgUHl0aG9uJ3MgYnVpbHRpbiBjb3JyZWN0bHkgcm91bmRlZApAQCAtMjU3LDYgKzI2MCwxMCBAQAogICAgICAgICAgICAgJzE4NDg3Mzk4Nzg1OTkxOTk0NjM0MTgyOTE2NjM4NTQyNjgwNzU5NjEzNTkwNDgyMjczZS0zNTcnLAogICAgICAgICAgICAgJzMyMDAyODY0MjAwNTgxMDMzMTM0MzU4NzI0Njc1MTk4MDQ0NTI3NDY5MzY2NzczOTI4ZS0zNTgnLAogICAgICAgICAgICAgJzk0MzkzNDMxMTkzMTgwNjk2OTQyODQxODM3MDg1MDMzNjQ3OTEzMjI0MTQ4NTM5ODU0ZS0zNTgnLAorICAgICAgICAgICAgJzczNjA4Mjc4OTk4OTY2OTY5MzQ1ODI0NjUzNTAwMTM2Nzg3ODc2NDM2MDA1OTU3OTUzZS0zNTgnLAorICAgICAgICAgICAgJzY0Nzc0NDc4ODM2NDE3Mjk5NDkxNzE4NDM1MjM0NjExMjk5MzM2Mjg4MDgyMTM2MDU0ZS0zNTgnLAorICAgICAgICAgICAgJzEzNzA0OTQwMTM0MTI2NTc0NTM0ODc4NjQxODc2OTQ3OTgwODc4ODI0Njg4NDUxMTY5ZS0zNTcnLAorICAgICAgICAgICAgJzQ2Njk3NDQ1Nzc0MDQ3MDYwOTYwNjI0NDk3OTY0NDI1NDE2NjEwNDgwNTI0NzYwNDcxZS0zNTgnLAogICAgICAgICAgICAgIyBmYWlsaW5nIGNhc2UgZm9yIGJ1ZyBpbnRyb2R1Y2VkIGJ5IE1FVEQgaW4gcjc3NDUxIChhdHRlbXB0ZWQKICAgICAgICAgICAgICMgZml4IGZvciBpc3N1ZSA3NjMyLCBidWcgMiksIGFuZCBmaXhlZCBpbiByNzc0ODIuCiAgICAgICAgICAgICAnMjg2MzkwOTcxNzgyNjE3NjMxNzg0ODk3NTkxMDczMjEzOTI3NDUxMDg0OTE4MjUzMDNlLTMxMScsCkBAIC0zODAsNiArMzg3LDEzIEBACiAgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0NDg4ODQ4NzY4NzQyMTcyOTc4ODE4NDE2NTk1NDU4OTg0Mzc1ZS01NCcsCiAgICAgICAgICAgICAnOTk5OTk5OTk5OTk5OTk5OTQ0NDg4ODQ4NzY4NzQyMTcyOTc4ODE4NDE2NTk1NDU4OTg0Mzc0OTk5OTk5OWUtNTQnLAogICAgICAgICAgICAgJzk5OTk5OTk5OTk5OTk5OTk0NDQ4ODg0ODc2ODc0MjE3Mjk3ODgxODQxNjU5NTQ1ODk4NDM3NTAwMDAwMDFlLTU0JywKKyAgICAgICAgICAgICMgVmFsdWUgZm91bmQgYnkgUmljayBSZWdhbiB0aGF0IGdpdmVzIGEgcmVzdWx0IG9mIDIqKi05NjgKKyAgICAgICAgICAgICMgdW5kZXIgR2F5J3MgZHRvYS5jIChhcyBvZiBOb3YgMDQsIDIwMTApOyAgc2luY2UgZml4ZWQuCisgICAgICAgICAgICAjIChGaXhlZCBzb21lIHRpbWUgYWdvIGluIFB5dGhvbidzIGR0b2EuYy4pCisgICAgICAgICAgICAnMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwJyAjLi4uCisgICAgICAgICAgICAnMDAwMDAwMDAwNTc2MTI5MTEzNDIzNzg1NDI5OTcxNjkwNDIxMTkxMjE0MDM0MjM1NDM1JyAjLi4uCisgICAgICAgICAgICAnMDg3MTQ3NzYzMTc4MTQ5NzYyOTU2ODY4OTkxNjkyMjg5ODY5OTQxMjQ2NjU4MDczMTk0JyAjLi4uCisgICAgICAgICAgICAnNTE5ODIyMzc5Nzg4ODIwMzk4OTcxNDM4NDA3ODk3OTQ5MjE4NzUnLAogICAgICAgICAgICAgXQogICAgICAgICBmb3IgcyBpbiB0ZXN0X3N0cmluZ3M6CiAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0cnRvZChzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCA5ZWQzMjIwLi4yY2NhYWQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtOCw2ICs4LDE4IEBACiBJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKIElTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCiAKK2ludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScKK2J5dGVvcmRlcnMgPSAnJywgJ0AnLCAnPScsICc8JywgJz4nLCAnIScKKworIyBOYXRpdmUgJ3EnIHBhY2tpbmcgaXNuJ3QgYXZhaWxhYmxlIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoZSBDCisjIGxvbmcgbG9uZyB0eXBlLgordHJ5OgorICAgIHN0cnVjdC5wYWNrKCdxJywgNSkKK2V4Y2VwdCBzdHJ1Y3QuZXJyb3I6CisgICAgSEFWRV9MT05HX0xPTkcgPSBGYWxzZQorZWxzZToKKyAgICBIQVZFX0xPTkdfTE9ORyA9IFRydWUKKwogZGVmIHN0cmluZ19yZXZlcnNlKHMpOgogICAgIHJldHVybiBzWzo6LTFdCiAKQEAgLTM1LDggKzQ3LDggQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaWlpJywgMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJ2knLCAzLCAzLCAzKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnaScsICdmb28nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnUCcsICdmb28nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFjaywgJ2knLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwgc3RydWN0LnBhY2ssICdQJywgJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnVucGFjaywgJ2QnLCBiJ2ZsYXAnKQogICAgICAgICBzID0gc3RydWN0LnBhY2soJ2lpJywgMSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrLCAnaWlpJywgcykKQEAgLTcwLDE0OCArODIsMTM5IEBACiAgICAgICAgICMgVGVzdCBzb21lIG9mIHRoZSBuZXcgZmVhdHVyZXMgaW4gZGV0YWlsCiAgICAgICAgICMgKGZvcm1hdCwgYXJndW1lbnQsIGJpZy1lbmRpYW4gcmVzdWx0LCBsaXR0bGUtZW5kaWFuIHJlc3VsdCwgYXN5bW1ldHJpYykKICAgICAgICAgdGVzdHMgPSBbCi0gICAgICAgICAgICAoJ2MnLCAnYScsICdhJywgJ2EnLCAwKSwKLSAgICAgICAgICAgICgneGMnLCAnYScsICdcMGEnLCAnXDBhJywgMCksCi0gICAgICAgICAgICAoJ2N4JywgJ2EnLCAnYVwwJywgJ2FcMCcsIDApLAotICAgICAgICAgICAgKCdzJywgJ2EnLCAnYScsICdhJywgMCksCi0gICAgICAgICAgICAoJzBzJywgJ2hlbGxvd29ybGQnLCAnJywgJycsIDEpLAotICAgICAgICAgICAgKCcxcycsICdoZWxsb3dvcmxkJywgJ2gnLCAnaCcsIDEpLAotICAgICAgICAgICAgKCc5cycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybCcsICdoZWxsb3dvcmwnLCAxKSwKLSAgICAgICAgICAgICgnMTBzJywgJ2hlbGxvd29ybGQnLCAnaGVsbG93b3JsZCcsICdoZWxsb3dvcmxkJywgMCksCi0gICAgICAgICAgICAoJzExcycsICdoZWxsb3dvcmxkJywgJ2hlbGxvd29ybGRcMCcsICdoZWxsb3dvcmxkXDAnLCAxKSwKLSAgICAgICAgICAgICgnMjBzJywgJ2hlbGxvd29ybGQnLCAnaGVsbG93b3JsZCcrMTAqJ1wwJywgJ2hlbGxvd29ybGQnKzEwKidcMCcsIDEpLAotICAgICAgICAgICAgKCdiJywgNywgJ1w3JywgJ1w3JywgMCksCi0gICAgICAgICAgICAoJ2InLCAtNywgJ1wzNzEnLCAnXDM3MScsIDApLAotICAgICAgICAgICAgKCdCJywgNywgJ1w3JywgJ1w3JywgMCksCi0gICAgICAgICAgICAoJ0InLCAyNDksICdcMzcxJywgJ1wzNzEnLCAwKSwKLSAgICAgICAgICAgICgnaCcsIDcwMCwgJ1wwMDJcMjc0JywgJ1wyNzRcMDAyJywgMCksCi0gICAgICAgICAgICAoJ2gnLCAtNzAwLCAnXDM3NUQnLCAnRFwzNzUnLCAwKSwKLSAgICAgICAgICAgICgnSCcsIDcwMCwgJ1wwMDJcMjc0JywgJ1wyNzRcMDAyJywgMCksCi0gICAgICAgICAgICAoJ0gnLCAweDEwMDAwLTcwMCwgJ1wzNzVEJywgJ0RcMzc1JywgMCksCi0gICAgICAgICAgICAoJ2knLCA3MDAwMDAwMCwgJ1wwMDQsXDAzNVwyMDAnLCAnXDIwMFwwMzUsXDAwNCcsIDApLAotICAgICAgICAgICAgKCdpJywgLTcwMDAwMDAwLCAnXDM3M1wzMjNcMzQyXDIwMCcsICdcMjAwXDM0MlwzMjNcMzczJywgMCksCi0gICAgICAgICAgICAoJ0knLCA3MDAwMDAwMCwgJ1wwMDQsXDAzNVwyMDAnLCAnXDIwMFwwMzUsXDAwNCcsIDApLAotICAgICAgICAgICAgKCdJJywgMHgxMDAwMDAwMDAtNzAwMDAwMDAsICdcMzczXDMyM1wzNDJcMjAwJywgJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKLSAgICAgICAgICAgICgnbCcsIDcwMDAwMDAwLCAnXDAwNCxcMDM1XDIwMCcsICdcMjAwXDAzNSxcMDA0JywgMCksCi0gICAgICAgICAgICAoJ2wnLCAtNzAwMDAwMDAsICdcMzczXDMyM1wzNDJcMjAwJywgJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKLSAgICAgICAgICAgICgnTCcsIDcwMDAwMDAwLCAnXDAwNCxcMDM1XDIwMCcsICdcMjAwXDAzNSxcMDA0JywgMCksCi0gICAgICAgICAgICAoJ0wnLCAweDEwMDAwMDAwMC03MDAwMDAwMCwgJ1wzNzNcMzIzXDM0MlwyMDAnLCAnXDIwMFwzNDJcMzIzXDM3MycsIDApLAotICAgICAgICAgICAgKCdmJywgMi4wLCAnQFwwMDBcMDAwXDAwMCcsICdcMDAwXDAwMFwwMDBAJywgMCksCi0gICAgICAgICAgICAoJ2QnLCAyLjAsICdAXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICdcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwQCcsIDApLAotICAgICAgICAgICAgKCdmJywgLTIuMCwgJ1wzMDBcMDAwXDAwMFwwMDAnLCAnXDAwMFwwMDBcMDAwXDMwMCcsIDApLAotICAgICAgICAgICAgKCdkJywgLTIuMCwgJ1wzMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwJywKLSAgICAgICAgICAgICAgICAgICAgICAgJ1wwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMzAwJywgMCksCi0gICAgICAgICAgICAgICAgKCc/JywgMCwgJ1wwJywgJ1wwJywgMCksCi0gICAgICAgICAgICAgICAgKCc/JywgMywgJ1wxJywgJ1wxJywgMSksCi0gICAgICAgICAgICAgICAgKCc/JywgVHJ1ZSwgJ1wxJywgJ1wxJywgMCksCi0gICAgICAgICAgICAgICAgKCc/JywgW10sICdcMCcsICdcMCcsIDEpLAotICAgICAgICAgICAgICAgICgnPycsICgxLCksICdcMScsICdcMScsIDEpLAorICAgICAgICAgICAgKCdjJywgYidhJywgYidhJywgYidhJywgMCksCisgICAgICAgICAgICAoJ3hjJywgYidhJywgYidcMGEnLCBiJ1wwYScsIDApLAorICAgICAgICAgICAgKCdjeCcsIGInYScsIGInYVwwJywgYidhXDAnLCAwKSwKKyAgICAgICAgICAgICgncycsIGInYScsIGInYScsIGInYScsIDApLAorICAgICAgICAgICAgKCcwcycsIGInaGVsbG93b3JsZCcsIGInJywgYicnLCAxKSwKKyAgICAgICAgICAgICgnMXMnLCBiJ2hlbGxvd29ybGQnLCBiJ2gnLCBiJ2gnLCAxKSwKKyAgICAgICAgICAgICgnOXMnLCBiJ2hlbGxvd29ybGQnLCBiJ2hlbGxvd29ybCcsIGInaGVsbG93b3JsJywgMSksCisgICAgICAgICAgICAoJzEwcycsIGInaGVsbG93b3JsZCcsIGInaGVsbG93b3JsZCcsIGInaGVsbG93b3JsZCcsIDApLAorICAgICAgICAgICAgKCcxMXMnLCBiJ2hlbGxvd29ybGQnLCBiJ2hlbGxvd29ybGRcMCcsIGInaGVsbG93b3JsZFwwJywgMSksCisgICAgICAgICAgICAoJzIwcycsIGInaGVsbG93b3JsZCcsIGInaGVsbG93b3JsZCcrMTAqYidcMCcsIGInaGVsbG93b3JsZCcrMTAqYidcMCcsIDEpLAorICAgICAgICAgICAgKCdiJywgNywgYidcNycsIGInXDcnLCAwKSwKKyAgICAgICAgICAgICgnYicsIC03LCBiJ1wzNzEnLCBiJ1wzNzEnLCAwKSwKKyAgICAgICAgICAgICgnQicsIDcsIGInXDcnLCBiJ1w3JywgMCksCisgICAgICAgICAgICAoJ0InLCAyNDksIGInXDM3MScsIGInXDM3MScsIDApLAorICAgICAgICAgICAgKCdoJywgNzAwLCBiJ1wwMDJcMjc0JywgYidcMjc0XDAwMicsIDApLAorICAgICAgICAgICAgKCdoJywgLTcwMCwgYidcMzc1RCcsIGInRFwzNzUnLCAwKSwKKyAgICAgICAgICAgICgnSCcsIDcwMCwgYidcMDAyXDI3NCcsIGInXDI3NFwwMDInLCAwKSwKKyAgICAgICAgICAgICgnSCcsIDB4MTAwMDAtNzAwLCBiJ1wzNzVEJywgYidEXDM3NScsIDApLAorICAgICAgICAgICAgKCdpJywgNzAwMDAwMDAsIGInXDAwNCxcMDM1XDIwMCcsIGInXDIwMFwwMzUsXDAwNCcsIDApLAorICAgICAgICAgICAgKCdpJywgLTcwMDAwMDAwLCBiJ1wzNzNcMzIzXDM0MlwyMDAnLCBiJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKKyAgICAgICAgICAgICgnSScsIDcwMDAwMDAwLCBiJ1wwMDQsXDAzNVwyMDAnLCBiJ1wyMDBcMDM1LFwwMDQnLCAwKSwKKyAgICAgICAgICAgICgnSScsIDB4MTAwMDAwMDAwLTcwMDAwMDAwLCBiJ1wzNzNcMzIzXDM0MlwyMDAnLCBiJ1wyMDBcMzQyXDMyM1wzNzMnLCAwKSwKKyAgICAgICAgICAgICgnbCcsIDcwMDAwMDAwLCBiJ1wwMDQsXDAzNVwyMDAnLCBiJ1wyMDBcMDM1LFwwMDQnLCAwKSwKKyAgICAgICAgICAgICgnbCcsIC03MDAwMDAwMCwgYidcMzczXDMyM1wzNDJcMjAwJywgYidcMjAwXDM0MlwzMjNcMzczJywgMCksCisgICAgICAgICAgICAoJ0wnLCA3MDAwMDAwMCwgYidcMDA0LFwwMzVcMjAwJywgYidcMjAwXDAzNSxcMDA0JywgMCksCisgICAgICAgICAgICAoJ0wnLCAweDEwMDAwMDAwMC03MDAwMDAwMCwgYidcMzczXDMyM1wzNDJcMjAwJywgYidcMjAwXDM0MlwzMjNcMzczJywgMCksCisgICAgICAgICAgICAoJ2YnLCAyLjAsIGInQFwwMDBcMDAwXDAwMCcsIGInXDAwMFwwMDBcMDAwQCcsIDApLAorICAgICAgICAgICAgKCdkJywgMi4wLCBiJ0BcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgYidcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwQCcsIDApLAorICAgICAgICAgICAgKCdmJywgLTIuMCwgYidcMzAwXDAwMFwwMDBcMDAwJywgYidcMDAwXDAwMFwwMDBcMzAwJywgMCksCisgICAgICAgICAgICAoJ2QnLCAtMi4wLCBiJ1wzMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGInXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwzMDAnLCAwKSwKKyAgICAgICAgICAgICgnPycsIDAsIGInXDAnLCBiJ1wwJywgMCksCisgICAgICAgICAgICAoJz8nLCAzLCBiJ1wxJywgYidcMScsIDEpLAorICAgICAgICAgICAgKCc/JywgVHJ1ZSwgYidcMScsIGInXDEnLCAwKSwKKyAgICAgICAgICAgICgnPycsIFtdLCBiJ1wwJywgYidcMCcsIDEpLAorICAgICAgICAgICAgKCc/JywgKDEsKSwgYidcMScsIGInXDEnLCAxKSwKICAgICAgICAgXQogCiAgICAgICAgIGZvciBmbXQsIGFyZywgYmlnLCBsaWwsIGFzeSBpbiB0ZXN0czoKLSAgICAgICAgICAgIGJpZyA9IGJ5dGVzKGJpZywgImxhdGluLTEiKQotICAgICAgICAgICAgbGlsID0gYnl0ZXMobGlsLCAibGF0aW4tMSIpCiAgICAgICAgICAgICBmb3IgKHhmbXQsIGV4cCkgaW4gWygnPicrZm10LCBiaWcpLCAoJyEnK2ZtdCwgYmlnKSwgKCc8JytmbXQsIGxpbCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnPScrZm10LCBJU0JJR0VORElBTiBhbmQgYmlnIG9yIGxpbCldOgogICAgICAgICAgICAgICAgIHJlcyA9IHN0cnVjdC5wYWNrKHhmbXQsIGFyZykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgZXhwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RydWN0LmNhbGNzaXplKHhmbXQpLCBsZW4ocmVzKSkKICAgICAgICAgICAgICAgICByZXYgPSBzdHJ1Y3QudW5wYWNrKHhmbXQsIHJlcylbMF0KLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGFyZywgc3RyKToKLSAgICAgICAgICAgICAgICAgICAgIyBTdHJpbmdzIGFyZSByZXR1cm5lZCBhcyBieXRlcyBzaW5jZSB5b3UgY2FuJ3Qga25vdyB0aGUKLSAgICAgICAgICAgICAgICAgICAgIyBlbmNvZGluZyBvZiB0aGUgc3RyaW5nIHdoZW4gcGFja2VkLgotICAgICAgICAgICAgICAgICAgICBhcmcgPSBieXRlcyhhcmcsICdsYXRpbjEnKQogICAgICAgICAgICAgICAgIGlmIHJldiAhPSBhcmc6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3kpCiAKLSAgICBkZWYgdGVzdF9uYXRpdmVfcVEoc2VsZik6Ci0gICAgICAgICMgY2FuJ3QgcGFjayAtMSBhcyB1bnNpZ25lZCByZWdhcmRsZXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIE92ZXJmbG93RXJyb3IpLCBzdHJ1Y3QucGFjaywgIlEiLCAtMSkKLSAgICAgICAgIyBjYW4ndCBwYWNrIHN0cmluZyBhcyAncScgcmVnYXJkbGVzcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAicSIsICJhIikKLSAgICAgICAgIyBkaXR0bywgYnV0ICdRJwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAiUSIsICJhIikKKyAgICBkZWYgdGVzdF9jYWxjc2l6ZShzZWxmKToKKyAgICAgICAgZXhwZWN0ZWRfc2l6ZSA9IHsKKyAgICAgICAgICAgICdiJzogMSwgJ0InOiAxLAorICAgICAgICAgICAgJ2gnOiAyLCAnSCc6IDIsCisgICAgICAgICAgICAnaSc6IDQsICdJJzogNCwKKyAgICAgICAgICAgICdsJzogNCwgJ0wnOiA0LAorICAgICAgICAgICAgJ3EnOiA4LCAnUSc6IDgsCisgICAgICAgICAgICB9CiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3RydWN0LnBhY2soInEiLCA1KQotICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgotICAgICAgICAgICAgIyBkb2VzIG5vdCBoYXZlIG5hdGl2ZSBxL1EKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ieXRlcyA9IHN0cnVjdC5jYWxjc2l6ZSgncScpCi0gICAgICAgICAgICAjIFRoZSBleHBlY3RlZCB2YWx1ZXMgaGVyZSBhcmUgaW4gYmlnLWVuZGlhbiBmb3JtYXQsIHByaW1hcmlseQotICAgICAgICAgICAgIyBiZWNhdXNlIEknbSBvbiBhIGxpdHRsZS1lbmRpYW4gbWFjaGluZSBhbmQgc28gdGhpcyBpcyB0aGUKLSAgICAgICAgICAgICMgY2xlYXJlc3Qgd2F5IChmb3IgbWUpIHRvIGZvcmNlIHRoZSBjb2RlIHRvIGdldCBleGVyY2lzZWQuCi0gICAgICAgICAgICBmb3IgZm9ybWF0LCBpbnB1dCwgZXhwZWN0ZWQgaW4gKAotICAgICAgICAgICAgICAgICAgICAoJ3EnLCAtMSwgJ1x4ZmYnICogbmJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgMCwgJ1x4MDAnICogbmJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdRJywgMCwgJ1x4MDAnICogbmJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgKCdxJywgMSwgJ1x4MDAnICogKG5ieXRlcy0xKSArICdceDAxJyksCi0gICAgICAgICAgICAgICAgICAgICgnUScsICgxIDw8ICg4Km5ieXRlcykpLTEsICdceGZmJyAqIG5ieXRlcyksCi0gICAgICAgICAgICAgICAgICAgICgncScsICgxIDw8ICg4Km5ieXRlcy0xKSktMSwgJ1x4N2YnICsgJ1x4ZmYnICogKG5ieXRlcyAtIDEpKSk6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBieXRlcyhleHBlY3RlZCwgImxhdGluLTEiKQotICAgICAgICAgICAgICAgIGdvdCA9IHN0cnVjdC5wYWNrKGZvcm1hdCwgaW5wdXQpCi0gICAgICAgICAgICAgICAgbmF0aXZlX2V4cGVjdGVkID0gYmlnZW5kaWFuX3RvX25hdGl2ZShleHBlY3RlZCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgbmF0aXZlX2V4cGVjdGVkKQotICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHN0cnVjdC51bnBhY2soZm9ybWF0LCBnb3QpWzBdCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRyaWV2ZWQsIGlucHV0KQorICAgICAgICAjIHN0YW5kYXJkIGludGVnZXIgc2l6ZXMKKyAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgIGZvciBieXRlb3JkZXIgaW4gJz0nLCAnPCcsICc+JywgJyEnOgorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlcitjb2RlCisgICAgICAgICAgICAgICAgc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShmb3JtYXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBleHBlY3RlZF9zaXplW2NvZGVdKQogCi0gICAgZGVmIHRlc3Rfc3RhbmRhcmRfaW50ZWdlcnMoc2VsZik6Ci0gICAgICAgICMgU3RhbmRhcmQgaW50ZWdlciB0ZXN0cyAoYkJoSGlJbExxUSkuCisgICAgICAgICMgbmF0aXZlIGludGVnZXIgc2l6ZXMKKyAgICAgICAgbmF0aXZlX3BhaXJzID0gJ2JCJywgJ2hIJywgJ2lJJywgJ2xMJworICAgICAgICBpZiBIQVZFX0xPTkdfTE9ORzoKKyAgICAgICAgICAgIG5hdGl2ZV9wYWlycyArPSAncVEnLAorICAgICAgICBmb3IgZm9ybWF0X3BhaXIgaW4gbmF0aXZlX3BhaXJzOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiAnJywgJ0AnOgorICAgICAgICAgICAgICAgIHNpZ25lZF9zaXplID0gc3RydWN0LmNhbGNzaXplKGJ5dGVvcmRlciArIGZvcm1hdF9wYWlyWzBdKQorICAgICAgICAgICAgICAgIHVuc2lnbmVkX3NpemUgPSBzdHJ1Y3QuY2FsY3NpemUoYnl0ZW9yZGVyICsgZm9ybWF0X3BhaXJbMV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduZWRfc2l6ZSwgdW5zaWduZWRfc2l6ZSkKKworICAgICAgICAjIGJvdW5kcyBmb3IgbmF0aXZlIGludGVnZXIgc2l6ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2InKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMiwgc3RydWN0LmNhbGNzaXplKCdoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDQsIHN0cnVjdC5jYWxjc2l6ZSgnbCcpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzdHJ1Y3QuY2FsY3NpemUoJ2gnKSwgc3RydWN0LmNhbGNzaXplKCdpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnaScpLCBzdHJ1Y3QuY2FsY3NpemUoJ2wnKSkKKyAgICAgICAgaWYgSEFWRV9MT05HX0xPTkc6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCg4LCBzdHJ1Y3QuY2FsY3NpemUoJ3EnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0cnVjdC5jYWxjc2l6ZSgnbCcpLCBzdHJ1Y3QuY2FsY3NpemUoJ3EnKSkKKworICAgIGRlZiB0ZXN0X2ludGVnZXJzKHNlbGYpOgorICAgICAgICAjIEludGVnZXIgdGVzdHMgKGJCaEhpSWxMcVEpLgogICAgICAgICBpbXBvcnQgYmluYXNjaWkKIAogICAgICAgICBjbGFzcyBJbnRUZXN0ZXIodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9ybWF0cGFpciwgYnl0ZXNpemUpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdCk6CiAgICAgICAgICAgICAgICAgc3VwZXIoSW50VGVzdGVyLCBzZWxmKS5fX2luaXRfXyhtZXRob2ROYW1lPSd0ZXN0X29uZScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZm9ybWF0cGFpciksIDIpCi0gICAgICAgICAgICAgICAgc2VsZi5mb3JtYXRwYWlyID0gZm9ybWF0cGFpcgotICAgICAgICAgICAgICAgIGZvciBkaXJlY3Rpb24gaW4gIjw+IT0iOgotICAgICAgICAgICAgICAgICAgICBmb3IgY29kZSBpbiBmb3JtYXRwYWlyOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gZGlyZWN0aW9uICsgY29kZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KSwgYnl0ZXNpemUpCi0gICAgICAgICAgICAgICAgc2VsZi5ieXRlc2l6ZSA9IGJ5dGVzaXplCi0gICAgICAgICAgICAgICAgc2VsZi5iaXRzaXplID0gYnl0ZXNpemUgKiA4Ci0gICAgICAgICAgICAgICAgc2VsZi5zaWduZWRfY29kZSwgc2VsZi51bnNpZ25lZF9jb2RlID0gZm9ybWF0cGFpcgotICAgICAgICAgICAgICAgIHNlbGYudW5zaWduZWRfbWluID0gMAotICAgICAgICAgICAgICAgIHNlbGYudW5zaWduZWRfbWF4ID0gMioqc2VsZi5iaXRzaXplIC0gMQotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmVkX21pbiA9IC0oMioqKHNlbGYuYml0c2l6ZS0xKSkKLSAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZF9tYXggPSAyKiooc2VsZi5iaXRzaXplLTEpIC0gMQorICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0ID0gZm9ybWF0CisgICAgICAgICAgICAgICAgc2VsZi5jb2RlID0gZm9ybWF0Wy0xXQorICAgICAgICAgICAgICAgIHNlbGYuYnl0ZW9yZGVyID0gZm9ybWF0WzotMV0KKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5ieXRlb3JkZXIgaW4gYnl0ZW9yZGVyczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIHBhY2tpbmcgYnl0ZW9yZGVyOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnl0ZW9yZGVyKQorICAgICAgICAgICAgICAgIHNlbGYuYnl0ZXNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoZm9ybWF0KQorICAgICAgICAgICAgICAgIHNlbGYuYml0c2l6ZSA9IHNlbGYuYnl0ZXNpemUgKiA4CisgICAgICAgICAgICAgICAgaWYgc2VsZi5jb2RlIGluIHR1cGxlKCdiaGlscScpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNpZ25lZCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5taW5fdmFsdWUgPSAtKDIqKihzZWxmLmJpdHNpemUtMSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubWF4X3ZhbHVlID0gMioqKHNlbGYuYml0c2l6ZS0xKSAtIDEKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuY29kZSBpbiB0dXBsZSgnQkhJTFEnKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduZWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbl92YWx1ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXhfdmFsdWUgPSAyKipzZWxmLmJpdHNpemUgLSAxCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5yZWNvZ25pemVkIGZvcm1hdCBjb2RlOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29kZSkKIAogICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYsIHgsIHBhY2s9c3RydWN0LnBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5wYWNrPXN0cnVjdC51bnBhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5oZXhsaWZ5PWJpbmFzY2lpLnVuaGV4bGlmeSk6Ci0gICAgICAgICAgICAgICAgIyBUcnkgc2lnbmVkLgotICAgICAgICAgICAgICAgIGNvZGUgPSBzZWxmLnNpZ25lZF9jb2RlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zaWduZWRfbWluIDw9IHggPD0gc2VsZi5zaWduZWRfbWF4OgotICAgICAgICAgICAgICAgICAgICAjIFRyeSBiaWctZW5kaWFuLgorCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gc2VsZi5mb3JtYXQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLm1pbl92YWx1ZSA8PSB4IDw9IHNlbGYubWF4X3ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHgKLSAgICAgICAgICAgICAgICAgICAgaWYgeCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuc2lnbmVkIGFuZCB4IDwgMDoKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDEgPDwgc2VsZi5iaXRzaXplCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgPiAwKQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGhleChleHBlY3RlZClbMjpdICMgY2hvcCAiMHgiCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGV4cGVjdGVkLCAwKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICcleCcgJSBleHBlY3RlZAogICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0ZWQpICYgMToKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gIjAiICsgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBleHBlY3RlZC5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB1bmhleGxpZnkoZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gYiJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKyBleHBlY3RlZAotCi0gICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiPiIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBVbnBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkID0gdW5wYWNrKGZvcm1hdCwgZ290KVswXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHJldHJpZXZlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIEFkZGluZyBhbnkgYnl0ZSBzaG91bGQgY2F1c2UgYSAidG9vIGJpZyIgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucGFjaywgZm9ybWF0LCBiJ1x4MDEnICsgZ290KQotCi0gICAgICAgICAgICAgICAgICAgICMgVHJ5IGxpdHRsZS1lbmRpYW4uCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9ICI8IiArIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzdHJpbmdfcmV2ZXJzZShleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoYiJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuYnl0ZW9yZGVyID09ICc8JyBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ieXRlb3JkZXIgaW4gKCcnLCAnQCcsICc9JykgYW5kIG5vdCBJU0JJR0VORElBTik6CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHN0cmluZ19yZXZlcnNlKGV4cGVjdGVkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihleHBlY3RlZCksIHNlbGYuYnl0ZXNpemUpCiAKICAgICAgICAgICAgICAgICAgICAgIyBQYWNrIHdvcms/CiAgICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQpAQCAtMjIyLDU4ICsyMjUsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCiAKICAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2ssIGZvcm1hdCwgYidceDAxJyArIGdvdCkKLQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLCB1bnBhY2ssIGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxJyArIGdvdCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAjIHggaXMgb3V0IG9mIHJhbmdlIC0tIHZlcmlmeSBwYWNrIHJlYWxpemVzIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcGFjaywgIj4iICsgY29kZSwgeCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBwYWNrLCAiPCIgKyBjb2RlLCB4KQotCi0gICAgICAgICAgICAgICAgIyBNdWNoIHRoZSBzYW1lIGZvciB1bnNpZ25lZC4KLSAgICAgICAgICAgICAgICBjb2RlID0gc2VsZi51bnNpZ25lZF9jb2RlCi0gICAgICAgICAgICAgICAgaWYgc2VsZi51bnNpZ25lZF9taW4gPD0geCA8PSBzZWxmLnVuc2lnbmVkX21heDoKLSAgICAgICAgICAgICAgICAgICAgIyBUcnkgYmlnLWVuZGlhbi4KLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gIj4iICsgY29kZQotICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHgKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBoZXgoZXhwZWN0ZWQpWzI6XSAjIGNob3AgIjB4IgotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZXhwZWN0ZWQpICYgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gIjAiICsgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB1bmhleGxpZnkoZXhwZWN0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gYiJceDAwIiAqIChzZWxmLmJ5dGVzaXplIC0gbGVuKGV4cGVjdGVkKSkgKyBleHBlY3RlZAotCi0gICAgICAgICAgICAgICAgICAgICMgUGFjayB3b3JrPwotICAgICAgICAgICAgICAgICAgICBnb3QgPSBwYWNrKGZvcm1hdCwgeCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQotCi0gICAgICAgICAgICAgICAgICAgICMgVW5wYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIHJldHJpZXZlZCA9IHVucGFjayhmb3JtYXQsIGdvdClbMF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCByZXRyaWV2ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBBZGRpbmcgYW55IGJ5dGUgc2hvdWxkIGNhdXNlIGEgInRvbyBiaWciIGVycm9yLgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBUeXBlRXJyb3IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBhY2ssIGZvcm1hdCwgYidceDAxJyArIGdvdCkKLQotICAgICAgICAgICAgICAgICAgICAjIFRyeSBsaXR0bGUtZW5kaWFuLgotICAgICAgICAgICAgICAgICAgICBmb3JtYXQgPSAiPCIgKyBjb2RlCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gc3RyaW5nX3JldmVyc2UoZXhwZWN0ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBQYWNrIHdvcms/Ci0gICAgICAgICAgICAgICAgICAgIGdvdCA9IHBhY2soZm9ybWF0LCB4KQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCi0KLSAgICAgICAgICAgICAgICAgICAgIyBVbnBhY2sgd29yaz8KLSAgICAgICAgICAgICAgICAgICAgcmV0cmlldmVkID0gdW5wYWNrKGZvcm1hdCwgZ290KVswXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHJldHJpZXZlZCkKLQotICAgICAgICAgICAgICAgICAgICAjIEFkZGluZyBhbnkgYnl0ZSBzaG91bGQgY2F1c2UgYSAidG9vIGJpZyIgZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIFR5cGVFcnJvciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucGFjaywgZm9ybWF0LCBiJ1x4MDEnICsgZ290KQotCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyB4IGlzIG91dCBvZiByYW5nZSAtLSB2ZXJpZnkgcGFjayByZWFsaXplcyB0aGF0LgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHBhY2ssICI+IiArIGNvZGUsIHgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcGFjaywgIjwiICsgY29kZSwgeCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIFZhbHVlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2ssIGZvcm1hdCwgeCkKIAogICAgICAgICAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgICAgICAgICBmcm9tIHJhbmRvbSBpbXBvcnQgcmFuZHJhbmdlCkBAIC0yOTAsNDcgKzI0Nyw5NSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gKHZhbCA8PCA4KSB8IHJhbmRyYW5nZSgyNTYpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsKQogCi0gICAgICAgICAgICAgICAgIyBUcnkgYWxsIHRob3NlLCBhbmQgdGhlaXIgbmVnYXRpb25zLCBhbmQgKy0xIGZyb20gdGhlbS4gIE5vdGUKLSAgICAgICAgICAgICAgICAjIHRoYXQgdGhpcyB0ZXN0cyBhbGwgcG93ZXItb2YtMiBib3VuZGFyaWVzIGluIHJhbmdlLCBhbmQgYSBmZXcgb3V0Ci0gICAgICAgICAgICAgICAgIyBvZiByYW5nZSwgcGx1cyArLSgyKipuICstIDEpLgorICAgICAgICAgICAgICAgICMgVmFsdWVzIGFic29yYmVkIGZyb20gb3RoZXIgdGVzdHMKKyAgICAgICAgICAgICAgICB2YWx1ZXMuZXh0ZW5kKFszMDAsIDcwMDAwMCwgc3lzLm1heHNpemUqNF0pCisKKyAgICAgICAgICAgICAgICAjIFRyeSBhbGwgdGhvc2UsIGFuZCB0aGVpciBuZWdhdGlvbnMsIGFuZCArLTEgZnJvbQorICAgICAgICAgICAgICAgICMgdGhlbS4gIE5vdGUgdGhhdCB0aGlzIHRlc3RzIGFsbCBwb3dlci1vZi0yCisgICAgICAgICAgICAgICAgIyBib3VuZGFyaWVzIGluIHJhbmdlLCBhbmQgYSBmZXcgb3V0IG9mIHJhbmdlLCBwbHVzCisgICAgICAgICAgICAgICAgIyArLSgyKipuICstIDEpLgogICAgICAgICAgICAgICAgIGZvciBiYXNlIGluIHZhbHVlczoKICAgICAgICAgICAgICAgICAgICAgZm9yIHZhbCBpbiAtYmFzZSwgYmFzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpbmNyIGluIC0xLCAwLCAxOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB2YWwgKyBpbmNyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gaW50KHgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRlc3Rfb25lKHgpCiAKICAgICAgICAgICAgICAgICAjIFNvbWUgZXJyb3IgY2FzZXMuCi0gICAgICAgICAgICAgICAgZm9yIGRpcmVjdGlvbiBpbiAiPD4iOgotICAgICAgICAgICAgICAgICAgICBmb3IgY29kZSBpbiBzZWxmLmZvcm1hdHBhaXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYmFkb2JqZWN0IGluICJhIHN0cmluZyIsIDMrNDJqLCByYW5kcmFuZ2UsIC0xNzI5LjA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrLCBkaXJlY3Rpb24gKyBjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZG9iamVjdCkKKyAgICAgICAgICAgICAgICBjbGFzcyBOb3RBbkludDoKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKIAotICAgICAgICBmb3IgYXJncyBpbiBbKCJiQiIsIDEpLAotICAgICAgICAgICAgICAgICAgICAgKCJoSCIsIDIpLAotICAgICAgICAgICAgICAgICAgICAgKCJpSSIsIDQpLAotICAgICAgICAgICAgICAgICAgICAgKCJsTCIsIDQpLAotICAgICAgICAgICAgICAgICAgICAgKCJxUSIsIDgpXToKLSAgICAgICAgICAgIHQgPSBJbnRUZXN0ZXIoKmFyZ3MpCi0gICAgICAgICAgICB0LnJ1bigpCisgICAgICAgICAgICAgICAgIyBPYmplY3RzIHdpdGggYW4gJ19faW5kZXhfXycgbWV0aG9kIHNob3VsZCBiZSBhbGxvd2VkCisgICAgICAgICAgICAgICAgIyB0byBwYWNrIGFzIGludGVnZXJzLiAgVGhhdCBpcyBhc3N1bWluZyB0aGUgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgICAjICdfX2luZGV4X18nIG1ldGhvZCByZXR1cm5zIGFuZCAnaW50JyBvciAnbG9uZycuCisgICAgICAgICAgICAgICAgY2xhc3MgSW5kZXhhYmxlKG9iamVjdCk6CisgICAgICAgICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZQorCisgICAgICAgICAgICAgICAgIyBJZiB0aGUgJ19faW5kZXhfXycgbWV0aG9kIHJhaXNlcyBhIHR5cGUgZXJyb3IsIHRoZW4KKyAgICAgICAgICAgICAgICAjICdfX2ludF9fJyBzaG91bGQgYmUgdXNlZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZy4KKyAgICAgICAgICAgICAgICBjbGFzcyBCYWRJbmRleChvYmplY3QpOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19pbmRleF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICAgICAgICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHN0cmluZyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZHJhbmdlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMrNDJqKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2ssIHNlbGYuZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdEFuSW50KCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgc3RydWN0LmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFkSW5kZXgoKSkKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGxlZ2l0aW1hdGUgdmFsdWVzIGZyb20gJ19faW5kZXhfXycuCisgICAgICAgICAgICAgICAgZm9yIG9iaiBpbiAoSW5kZXhhYmxlKDApLCBJbmRleGFibGUoMTApLCBJbmRleGFibGUoMTcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4YWJsZSg0MiksIEluZGV4YWJsZSgxMDApLCBJbmRleGFibGUoMTI3KSk6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKGZvcm1hdCwgb2JqKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImludGVnZXIgY29kZSBwYWNrIGZhaWxlZCBvbiBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoICdfX2luZGV4X18nIG1ldGhvZCIpCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGZvciBib2d1cyB2YWx1ZXMgZnJvbSAnX19pbmRleF9fJy4KKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIChJbmRleGFibGUoYidhJyksIEluZGV4YWJsZSgnYicpLCBJbmRleGFibGUoTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXhhYmxlKHsnYSc6IDF9KSwgSW5kZXhhYmxlKFsxLCAyLCAzXSkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaywgc2VsZi5mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaikKKworICAgICAgICBmb3IgY29kZSBpbiBpbnRlZ2VyX2NvZGVzOgorICAgICAgICAgICAgZm9yIGJ5dGVvcmRlciBpbiBieXRlb3JkZXJzOgorICAgICAgICAgICAgICAgIGlmIChieXRlb3JkZXIgaW4gKCcnLCAnQCcpIGFuZCBjb2RlIGluICgncScsICdRJykgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBIQVZFX0xPTkdfTE9ORyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZm9ybWF0ID0gYnl0ZW9yZGVyK2NvZGUKKyAgICAgICAgICAgICAgICB0ID0gSW50VGVzdGVyKGZvcm1hdCkKKyAgICAgICAgICAgICAgICB0LnJ1bigpCiAKICAgICBkZWYgdGVzdF9wX2NvZGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBwICgiUGFzY2FsIHN0cmluZyIpIGNvZGUuCiAgICAgICAgIGZvciBjb2RlLCBpbnB1dCwgZXhwZWN0ZWQsIGV4cGVjdGVkYmFjayBpbiBbCi0gICAgICAgICAgICAgICAgKCdwJywnYWJjJywgJ1x4MDAnLCBiJycpLAotICAgICAgICAgICAgICAgICgnMXAnLCAnYWJjJywgJ1x4MDAnLCBiJycpLAotICAgICAgICAgICAgICAgICgnMnAnLCAnYWJjJywgJ1x4MDFhJywgYidhJyksCi0gICAgICAgICAgICAgICAgKCczcCcsICdhYmMnLCAnXHgwMmFiJywgYidhYicpLAotICAgICAgICAgICAgICAgICgnNHAnLCAnYWJjJywgJ1x4MDNhYmMnLCBiJ2FiYycpLAotICAgICAgICAgICAgICAgICgnNXAnLCAnYWJjJywgJ1x4MDNhYmNceDAwJywgYidhYmMnKSwKLSAgICAgICAgICAgICAgICAoJzZwJywgJ2FiYycsICdceDAzYWJjXHgwMFx4MDAnLCBiJ2FiYycpLAotICAgICAgICAgICAgICAgICgnMTAwMHAnLCAneCcqMTAwMCwgJ1x4ZmYnICsgJ3gnKjk5OSwgYid4JyoyNTUpXToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gYnl0ZXMoZXhwZWN0ZWQsICJsYXRpbi0xIikKKyAgICAgICAgICAgICAgICAoJ3AnLCAgYidhYmMnLCBiJ1x4MDAnLCAgICAgICAgICAgIGInJyksCisgICAgICAgICAgICAgICAgKCcxcCcsIGInYWJjJywgYidceDAwJywgICAgICAgICAgICBiJycpLAorICAgICAgICAgICAgICAgICgnMnAnLCBiJ2FiYycsIGInXHgwMWEnLCAgICAgICAgICAgYidhJyksCisgICAgICAgICAgICAgICAgKCczcCcsIGInYWJjJywgYidceDAyYWInLCAgICAgICAgICBiJ2FiJyksCisgICAgICAgICAgICAgICAgKCc0cCcsIGInYWJjJywgYidceDAzYWJjJywgICAgICAgICBiJ2FiYycpLAorICAgICAgICAgICAgICAgICgnNXAnLCBiJ2FiYycsIGInXHgwM2FiY1x4MDAnLCAgICAgYidhYmMnKSwKKyAgICAgICAgICAgICAgICAoJzZwJywgYidhYmMnLCBiJ1x4MDNhYmNceDAwXHgwMCcsIGInYWJjJyksCisgICAgICAgICAgICAgICAgKCcxMDAwcCcsIGIneCcqMTAwMCwgYidceGZmJyArIGIneCcqOTk5LCBiJ3gnKjI1NSldOgogICAgICAgICAgICAgZ290ID0gc3RydWN0LnBhY2soY29kZSwgaW5wdXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAoZ290LCkgPSBzdHJ1Y3QudW5wYWNrKGNvZGUsIGdvdCkKQEAgLTM3MSw0OCArMzc2LDI5IEBACiAgICAgICAgIGJpZyA9IG1hdGgubGRleHAoYmlnLCAxMjcgLSAyNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc3RydWN0LnBhY2ssICI+ZiIsIGJpZykKIAotICAgIGRlZiB0ZXN0XzEyMjkzODAoc2VsZik6Ci0gICAgICAgICMgU0YgYnVnIDEyMjkzODAuIE5vIHN0cnVjdC5wYWNrIGV4Y2VwdGlvbiBmb3Igc29tZSBvdXQgb2YKLSAgICAgICAgIyByYW5nZSBpbnRlZ2VycwotICAgICAgICBmb3IgZW5kaWFuIGluICgnJywgJz4nLCAnPCcpOgotICAgICAgICAgICAgZm9yIGZtdCBpbiAoJ0InLCAnSCcsICdJJywgJ0wnKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBPdmVyZmxvd0Vycm9yKSwgc3RydWN0LnBhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kaWFuICsgZm10LCAtMSkKLQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHN0cnVjdC5lcnJvciwgT3ZlcmZsb3dFcnJvciksIHN0cnVjdC5wYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kaWFuICsgJ0InLCAzMDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBPdmVyZmxvd0Vycm9yKSwgc3RydWN0LnBhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRpYW4gKyAnSCcsIDcwMDAwKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoc3RydWN0LmVycm9yLCBPdmVyZmxvd0Vycm9yKSwgc3RydWN0LnBhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRpYW4gKyAnSScsIHN5cy5tYXhzaXplICogNCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChzdHJ1Y3QuZXJyb3IsIE92ZXJmbG93RXJyb3IpLCBzdHJ1Y3QucGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZGlhbiArICdMJywgc3lzLm1heHNpemUgKiA0KQotCiAgICAgZGVmIHRlc3RfMTUzMDU1OShzZWxmKToKLSAgICAgICAgZm9yIGVuZGlhbiBpbiAoJycsICc+JywgJzwnKToKLSAgICAgICAgICAgIGZvciBmbXQgaW4gKCdCJywgJ0gnLCAnSScsICdMJywgJ1EnLCAnYicsICdoJywgJ2knLCAnbCcsICdxJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgZW5kaWFuICsgZm10LCAxLjApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgZW5kaWFuICsgZm10LCAxLjUpCisgICAgICAgIGZvciBieXRlb3JkZXIgaW4gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnOgorICAgICAgICAgICAgZm9yIGNvZGUgaW4gaW50ZWdlcl9jb2RlczoKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZW9yZGVyIGluICgnJywgJ0AnKSBhbmQgY29kZSBpbiAoJ3EnLCAnUScpIGFuZAorICAgICAgICAgICAgICAgICAgICBub3QgSEFWRV9MT05HX0xPTkcpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGZvcm1hdCA9IGJ5dGVvcmRlciArIGNvZGUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCBmb3JtYXQsIDEuMCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCBmb3JtYXQsIDEuNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJ1AnLCAxLjApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgc3RydWN0LnBhY2ssICdQJywgMS41KQogCi0KICAgICBkZWYgdGVzdF91bnBhY2tfZnJvbShzZWxmKToKICAgICAgICAgdGVzdF9zdHJpbmcgPSBiJ2FiY2QwMTIzNCcKICAgICAgICAgZm10ID0gJzRzJwogICAgICAgICBzID0gc3RydWN0LlN0cnVjdChmbXQpCiAgICAgICAgIGZvciBjbHMgaW4gKGJ5dGVzLCBieXRlYXJyYXkpOgogICAgICAgICAgICAgZGF0YSA9IGNscyh0ZXN0X3N0cmluZykKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6Ci0gICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IGJ5dGVzKGRhdGEsICdsYXRpbjEnKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gZGF0YQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEpLCAoYidhYmNkJywpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEsIDIpLCAoYidjZDAxJywpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEsIDQpLCAoYicwMTIzJywpKQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLnVucGFja19mcm9tKGRhdGEsIGkpLCAoYnl0ZXNfZGF0YVtpOmkrNF0sKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMudW5wYWNrX2Zyb20oZGF0YSwgaSksIChkYXRhW2k6aSs0XSwpKQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNiwgbGVuKHRlc3Rfc3RyaW5nKSArIDEpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0cnVjdC5lcnJvciwgcy51bnBhY2tfZnJvbSwgZGF0YSwgaSkKICAgICAgICAgZm9yIGNscyBpbiAoYnl0ZXMsIGJ5dGVhcnJheSk6CkBAIC00MzMsMTIgKzQxOSwxMiBAQAogCiAgICAgICAgICMgVGVzdCB3aXRob3V0IG9mZnNldAogICAgICAgICBzLnBhY2tfaW50byh3cml0YWJsZV9idWYsIDAsIHRlc3Rfc3RyaW5nKQotICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpXQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b2J5dGVzKClbOmxlbih0ZXN0X3N0cmluZyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbV9idWYsIHRlc3Rfc3RyaW5nKQogCiAgICAgICAgICMgVGVzdCB3aXRoIG9mZnNldC4KICAgICAgICAgcy5wYWNrX2ludG8od3JpdGFibGVfYnVmLCAxMCwgdGVzdF9zdHJpbmcpCi0gICAgICAgIGZyb21fYnVmID0gd3JpdGFibGVfYnVmLnRvc3RyaW5nKClbOmxlbih0ZXN0X3N0cmluZykrMTBdCisgICAgICAgIGZyb21fYnVmID0gd3JpdGFibGVfYnVmLnRvYnl0ZXMoKVs6bGVuKHRlc3Rfc3RyaW5nKSsxMF0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcm9tX2J1ZiwgdGVzdF9zdHJpbmdbOjEwXSArIHRlc3Rfc3RyaW5nKQogCiAgICAgICAgICMgR28gYmV5b25kIGJvdW5kYXJpZXMuCkBAIC00NTAsNyArNDM2LDggQEAKIAogICAgICAgICAjIFRlc3QgYm9ndXMgb2Zmc2V0IChpc3N1ZSAzNjk0KQogICAgICAgICBzYiA9IHNtYWxsX2J1ZgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0cnVjdC5wYWNrX2ludG8sIGInMScsIHNiLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBzdHJ1Y3QuZXJyb3IpLCBzdHJ1Y3QucGFja19pbnRvLCBiJycsIHNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lKQogCiAgICAgZGVmIHRlc3RfcGFja19pbnRvX2ZuKHNlbGYpOgogICAgICAgICB0ZXN0X3N0cmluZyA9IGInUmV5a2phdmlrIHJvY2tzLCBlb3chJwpAQCAtNDYwLDEyICs0NDcsMTIgQEAKIAogICAgICAgICAjIFRlc3Qgd2l0aG91dCBvZmZzZXQuCiAgICAgICAgIHBhY2tfaW50byh3cml0YWJsZV9idWYsIDAsIHRlc3Rfc3RyaW5nKQotICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpXQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b2J5dGVzKClbOmxlbih0ZXN0X3N0cmluZyldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbV9idWYsIHRlc3Rfc3RyaW5nKQogCiAgICAgICAgICMgVGVzdCB3aXRoIG9mZnNldC4KICAgICAgICAgcGFja19pbnRvKHdyaXRhYmxlX2J1ZiwgMTAsIHRlc3Rfc3RyaW5nKQotICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b3N0cmluZygpWzpsZW4odGVzdF9zdHJpbmcpKzEwXQorICAgICAgICBmcm9tX2J1ZiA9IHdyaXRhYmxlX2J1Zi50b2J5dGVzKClbOmxlbih0ZXN0X3N0cmluZykrMTBdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnJvbV9idWYsIHRlc3Rfc3RyaW5nWzoxMF0gKyB0ZXN0X3N0cmluZykKIAogICAgICAgICAjIEdvIGJleW9uZCBib3VuZGFyaWVzLgpAQCAtNTE1LDggKzUwMiwxMyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHJlZml4LCBtc2c9J2VuY29kZWQgYm9vbCBpcyBub3Qgb25lIGJ5dGU6ICVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXBhY2tlZCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgc3RydWN0LnBhY2ssIHByZWZpeCArICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGxvZGluZ0Jvb2woKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhwcmVmaXggKyAnPycsIEV4cGxvZGluZ0Jvb2woKSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBJT0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwbG9kaW5nQm9vbCgpKSIgJSAocHJlZml4ICsgJz8nKSkKIAogICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RydWN0LnVucGFjaygnPj8nLCBjKVswXSkKQEAgLTUzMiw2ICs1MjQsMzcgQEAKICAgICAgICAgZGVmIHRlc3RfY3Jhc2hlcihzZWxmKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE1lbW9yeUVycm9yLCBzdHJ1Y3QucGFjaywgIjM1NzkxMzk0MWIiLCAiYSIpCiAKKyAgICBkZWYgdGVzdF90cmFpbGluZ19jb3VudGVyKHNlbGYpOgorICAgICAgICBzdG9yZSA9IGFycmF5LmFycmF5KCdiJywgYicgJyoxMDApCisKKyAgICAgICAgIyBmb3JtYXQgbGlzdHMgY29udGFpbmluZyBvbmx5IGNvdW50IHNwZWMgc2hvdWxkIHJlc3VsdCBpbiBhbiBlcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrLCAnMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICcxMjM0NScsICcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrX2ludG8sICcxMjM0NScsIHN0b3JlLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2tfZnJvbSwgJzEyMzQ1Jywgc3RvcmUsIDApCisKKyAgICAgICAgIyBGb3JtYXQgbGlzdHMgd2l0aCB0cmFpbGluZyBjb3VudCBzcGVjIHNob3VsZCByZXN1bHQgaW4gYW4gZXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJ2MxMjM0NScsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrLCAnYzEyMzQ1JywgJ3gnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5wYWNrX2ludG8sICdjMTIzNDUnLCBzdG9yZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QudW5wYWNrX2Zyb20sICdjMTIzNDUnLCBzdG9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKyAgICAgICAgIyBNaXhlZCBmb3JtYXQgdGVzdHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFjaywgJzE0czQyJywgJ3NwYW0gYW5kIGVnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2ssICcxNHM0MicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtIGFuZCBlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yLCBzdHJ1Y3QucGFja19pbnRvLCAnMTRzNDInLCBzdG9yZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0gYW5kIGVnZ3MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC51bnBhY2tfZnJvbSwgJzE0czQyJywgc3RvcmUsIDApCisKKyAgICBkZWYgdGVzdF9TdHJ1Y3RfcmVpbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSA5NDIyOiB0aGVyZSB3YXMgYSBtZW1vcnkgbGVhayB3aGVuIHJlaW5pdGlhbGl6aW5nIGEKKyAgICAgICAgIyBTdHJ1Y3QgaW5zdGFuY2UuICBUaGlzIHRlc3QgY2FuIGJlIHVzZWQgdG8gZGV0ZWN0IHRoZSBsZWFrCisgICAgICAgICMgd2hlbiBydW5uaW5nIHdpdGggcmVncnRlc3QgLUwuCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCdpJykKKyAgICAgICAgcy5fX2luaXRfXygnaWknKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdG1lbWJlcnMucHkKaW5kZXggNDFiY2FjOS4uMThmZWNjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RtZW1iZXJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0bWVtYmVycy5weQpAQCAtNiw3ICs2LDcgQEAKICAgICBMTE9OR19NQVgsIExMT05HX01JTiwgVUxMT05HX01BWCwgXAogICAgIFBZX1NTSVpFX1RfTUFYLCBQWV9TU0laRV9UX01JTgogCi1pbXBvcnQgd2FybmluZ3MsIHVuaXR0ZXN0LCBzeXMKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIHRzPV90ZXN0X3N0cnVjdG1lbWJlcnNUeXBlKEZhbHNlLCAgIyBUX0JPT0wKQEAgLTExMiwzOSArMTEyLDMwIEBACiAKIAogY2xhc3MgVGVzdFdhcm5pbmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgaGFzX3dhcm5lZChzZWxmLCB3KToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmNhdGVnb3J5LCBSdW50aW1lV2FybmluZykKIAogICAgIGRlZiB0ZXN0X2J5dGVfbWF4KHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgdHMuVF9CWVRFID0gQ0hBUl9NQVgrMQotICAgICAgICAgICAgc2VsZi5oYXNfd2FybmVkKHcpCiAKICAgICBkZWYgdGVzdF9ieXRlX21pbihzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfQllURSA9IENIQVJfTUlOLTEKLSAgICAgICAgICAgIHNlbGYuaGFzX3dhcm5lZCh3KQogCiAgICAgZGVmIHRlc3RfdWJ5dGVfbWF4KHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKSBhcyB3OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSdW50aW1lV2FybmluZykpOgogICAgICAgICAgICAgdHMuVF9VQllURSA9IFVDSEFSX01BWCsxCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3Nob3J0X21heChzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01BWCsxCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3Nob3J0X21pbihzZWxmKToKLSAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgIHRzLlRfU0hPUlQgPSBTSFJUX01JTi0xCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKIAogICAgIGRlZiB0ZXN0X3VzaG9ydF9tYXgoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJ1bnRpbWVXYXJuaW5nKSk6CiAgICAgICAgICAgICB0cy5UX1VTSE9SVCA9IFVTSFJUX01BWCsxCi0gICAgICAgICAgICBzZWxmLmhhc193YXJuZWQodykKLQogCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggN2FkY2E1My4uZDZjNjNiNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTEsMTIgKzEsMTQgQEAKK2ltcG9ydCBvcworaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWltcG9ydCB0aW1lCiAKIGNsYXNzIFN0cnVjdFNlcVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdHVwbGUoc2VsZik6CiAgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0LCB0dXBsZSkKICAgICAgICAgYXN0dXBsZSA9IHR1cGxlKHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHQpLCBsZW4oYXN0dXBsZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgYXN0dXBsZSkKQEAgLTMzLDYgKzM1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKICAgICAgICAgICAgICJ0aW1lLnN0cnVjdF90aW1lKHRtX3llYXI9MTk3MCwgdG1fbW9uPTEsIHRtX21kYXk9MSwgdG1faG91cj0wLCAiCiAgICAgICAgICAgICAidG1fbWluPTAsIHRtX3NlYz0wLCB0bV93ZGF5PTMsIHRtX3lkYXk9MSwgdG1faXNkc3Q9MCkiKQorICAgICAgICAjIG9zLnN0YXQoKSBnaXZlcyBhIGNvbXBsaWNhdGVkIHN0cnVjdCBzZXF1ZW5jZS4KKyAgICAgICAgc3QgPSBvcy5zdGF0KF9fZmlsZV9fKQorICAgICAgICByZXAgPSByZXByKHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwLnN0YXJ0c3dpdGgob3MubmFtZSArICIuc3RhdF9yZXN1bHQiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfbW9kZT0iLCByZXApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2lubz0iLCByZXApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2Rldj0iLCByZXApCiAKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CiAgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQpAQCAtNTAsOCArNTksOCBAQAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWUuZ210aW1lKCkKICAgICAgICAgZm9yIGl0ZW0gaW4gdDE6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXRlbSBpbiB0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKC00MiBub3QgaW4gdDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGl0ZW0sIHQxKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKC00MiwgdDEpCiAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICB0MSA9IHRpbWUuZ210aW1lKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQppbmRleCAyMGI3MmU2Li40ZWM3NTRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CkBAIC0zLDEyICszLDIwIEBACiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwogaW1wb3J0IHNpZ25hbAoraW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCBlcnJubwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBzZWxlY3QKIGltcG9ydCBzaHV0aWwKK3RyeToKKyAgICBpbXBvcnQgZ2MKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnYyA9IE5vbmUKIAogbXN3aW5kb3dzID0gKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiKQogCkBAIC0yMiwzOCArMzAsMzkgQEAKIGVsc2U6CiAgICAgU0VUQklOQVJZID0gJycKIAotIyBJbiBhIGRlYnVnIGJ1aWxkLCBzdHVmZiBsaWtlICJbNjU4MCByZWZzXSIgaXMgcHJpbnRlZCB0byBzdGRlcnIgYXQKLSMgc2h1dGRvd24gdGltZS4gIFRoYXQgZnJ1c3RyYXRlcyB0ZXN0cyB0cnlpbmcgdG8gY2hlY2sgc3RkZXJyIHByb2R1Y2VkCi0jIGZyb20gYSBzcGF3bmVkIFB5dGhvbiBwcm9jZXNzLgotZGVmIHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMoc3RkZXJyKToKLSAgICByZXR1cm4gcmUuc3ViKCJcW1xkKyByZWZzXF1ccj9cbj8kIiwgIiIsIHN0ZGVyci5kZWNvZGUoKSkuZW5jb2RlKCkKLSAgICAjcmV0dXJuIHJlLnN1YihyIlxbXGQrIHJlZnNcXVxyP1xuPyQiLCAiIiwgc3RkZXJyKQorCit0cnk6CisgICAgbWtzdGVtcCA9IHRlbXBmaWxlLm1rc3RlbXAKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAjIHRlbXBmaWxlLm1rc3RlbXAgaXMgbm90IGF2YWlsYWJsZQorICAgIGRlZiBta3N0ZW1wKCk6CisgICAgICAgICIiIlJlcGxhY2VtZW50IGZvciBta3N0ZW1wLCBjYWxsaW5nIG1rdGVtcC4iIiIKKyAgICAgICAgZm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgICAgICByZXR1cm4gb3Mub3BlbihmbmFtZSwgb3MuT19SRFdSfG9zLk9fQ1JFQVQpLCBmbmFtZQorCiAKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAjIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIGhhdmUgc28gdGhpcyB0ZXN0CiAgICAgICAgICMgZG9lc24ndCBjcmFzaCBvbiBzb21lIGJ1aWxkYm90cyAoQWxwaGFzIGluIHBhcnRpY3VsYXIpLgotICAgICAgICBpZiBoYXNhdHRyKHN1cHBvcnQsICJyZWFwX2NoaWxkcmVuIik6Ci0gICAgICAgICAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorICAgICAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAjIFRyeSB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHdlIGhhdmUgc28gdGhpcyB0ZXN0Ci0gICAgICAgICMgZG9lc24ndCBjcmFzaCBvbiBzb21lIGJ1aWxkYm90cyAoQWxwaGFzIGluIHBhcnRpY3VsYXIpLgotICAgICAgICBpZiBoYXNhdHRyKHN1cHBvcnQsICJyZWFwX2NoaWxkcmVuIik6Ci0gICAgICAgICAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorICAgICAgICBmb3IgaW5zdCBpbiBzdWJwcm9jZXNzLl9hY3RpdmU6CisgICAgICAgICAgICBpbnN0LndhaXQoKQorICAgICAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzdWJwcm9jZXNzLl9hY3RpdmUsICJzdWJwcm9jZXNzLl9hY3RpdmUgbm90IGVtcHR5IikKIAotICAgIGRlZiBta3N0ZW1wKHNlbGYsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIndyYXBwZXIgZm9yIG1rc3RlbXAsIGNhbGxpbmcgbWt0ZW1wIGlmIG1rc3RlbXAgaXMgbm90IGF2YWlsYWJsZSIiIgotICAgICAgICBpZiBoYXNhdHRyKHRlbXBmaWxlLCAibWtzdGVtcCIpOgotICAgICAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rc3RlbXAoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm5hbWUgPSB0ZW1wZmlsZS5ta3RlbXAoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKKyAgICBkZWYgYXNzZXJ0U3RkZXJyRXF1YWwoc2VsZiwgc3RkZXJyLCBleHBlY3RlZCwgbXNnPU5vbmUpOgorICAgICAgICAjIEluIGEgZGVidWcgYnVpbGQsIHN0dWZmIGxpa2UgIls2NTgwIHJlZnNdIiBpcyBwcmludGVkIHRvIHN0ZGVyciBhdAorICAgICAgICAjIHNodXRkb3duIHRpbWUuICBUaGF0IGZydXN0cmF0ZXMgdGVzdHMgdHJ5aW5nIHRvIGNoZWNrIHN0ZGVyciBwcm9kdWNlZAorICAgICAgICAjIGZyb20gYSBzcGF3bmVkIFB5dGhvbiBwcm9jZXNzLgorICAgICAgICBhY3R1YWwgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykKKwogCiBjbGFzcyBQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKLSAgICAjCi0gICAgIyBHZW5lcmljIHRlc3RzCi0gICAgIworCiAgICAgZGVmIHRlc3RfY2FsbF9zZXEoc2VsZik6CiAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQKICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLApAQCAtNjgsNDcgKzc3LDM5IEBACiAKICAgICBkZWYgdGVzdF9jaGVja19jYWxsX25vbnplcm8oc2VsZik6CiAgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdKQotICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5yZXR1cm5jb2RlLCA0NykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgQ2FsbGVkUHJvY2Vzc0Vycm9yIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmV4Y2VwdGlvbi5yZXR1cm5jb2RlLCA0NykKIAogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dChzZWxmKToKICAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiB3aXRoIHplcm8gcmV0dXJuIGNvZGUKICAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ0JERkwnKSJdKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYidCREZMJyBpbiBvdXRwdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidCREZMJywgb3V0cHV0KQogCiAgICAgZGVmIHRlc3RfY2hlY2tfb3V0cHV0X25vbnplcm8oc2VsZik6CiAgICAgICAgICMgY2hlY2tfY2FsbCgpIGZ1bmN0aW9uIHdpdGggbm9uLXplcm8gcmV0dXJuIGNvZGUKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yKSBhcyBjOgogICAgICAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDUpIl0pCi0gICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLnJldHVybmNvZGUsIDUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIENhbGxlZFByb2Nlc3NFcnJvciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5leGNlcHRpb24ucmV0dXJuY29kZSwgNSkKIAogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRlcnIoc2VsZik6CiAgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgZnVuY3Rpb24gc3RkZXJyIHJlZGlyZWN0ZWQgdG8gc3Rkb3V0CiAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRlcnIud3JpdGUoJ0JERkwnKSJdLAogICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInQkRGTCcgaW4gb3V0cHV0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInQkRGTCcsIG91dHB1dCkKIAogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF9zdGRvdXRfYXJnKHNlbGYpOgogICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHN0ZGVyciByZWRpcmVjdGVkIHRvIHN0ZG91dAotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKICAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAogICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN5cy5zdGRvdXQpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3N0ZG91dCcgaW4gZS5hcmdzWzBdKQotICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIHdoZW4gc3Rkb3V0IGFyZyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRvdXQnLCBjLmV4Y2VwdGlvbi5hcmdzWzBdKQogCiAgICAgZGVmIHRlc3RfY2FsbF9rd2FyZ3Moc2VsZik6CiAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGgga2V5d29yZCBhcmdzCkBAIC0xMjQsNiArMTI1LDggQEAKICAgICAgICAgIyAuc3RkaW4gaXMgTm9uZSB3aGVuIG5vdCByZWRpcmVjdGVkCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KCJiYW5hbmEiKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQogICAgICAgICBwLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RkaW4sIE5vbmUpCiAKQEAgLTEzNCw2ICsxMzcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBvZiBzdGRvdXQgaW4gYSBkaWZmZXJlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvY2VzcyAuLi4iKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQsIE5vbmUpCiAKQEAgLTE0MSwxMyArMTQ2LDI2IEBACiAgICAgICAgICMgLnN0ZGVyciBpcyBOb25lIHdoZW4gbm90IHJlZGlyZWN0ZWQKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQoImJhbmFuYSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICBwLndhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RkZXJyLCBOb25lKQogCi0gICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKLSAgICAgICAgYXJnMCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb21ldGhpbmd5b3Vkb250aGF2ZSIpCi0gICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFthcmcwLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgZGVmIHRlc3RfZXhlY3V0YWJsZV93aXRoX2N3ZChzZWxmKToKKyAgICAgICAgcHl0aG9uX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzb21ldGhpbmd5b3Vkb250aGF2ZSIsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsIGN3ZD1weXRob25fZGlyKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgNDcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5pc19weXRob25fYnVpbGQoKSwKKyAgICAgICAgICAgICAgICAgICAgICJuZWVkIGFuIGluc3RhbGxlZCBQeXRob24uIFNlZSAjNzc3NCIpCisgICAgZGVmIHRlc3RfZXhlY3V0YWJsZV93aXRob3V0X2N3ZChzZWxmKToKKyAgICAgICAgIyBGb3IgYSBub3JtYWwgaW5zdGFsbGF0aW9uLCBpdCBzaG91bGQgd29yayB3aXRob3V0ICdjd2QnCisgICAgICAgICMgYXJndW1lbnQuICBGb3IgdGVzdCBydW5zIGluIHRoZSBidWlsZCBkaXJlY3RvcnksIHNlZSAjNzc3NC4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJzb21ldGhpbmd5b3Vkb250aGF2ZSIsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKQEAgLTE2NSw2ICsxODMsNyBAQAogICAgIGRlZiB0ZXN0X3N0ZGluX2ZpbGVkZXMoc2VsZik6CiAgICAgICAgICMgc3RkaW4gaXMgc2V0IHRvIG9wZW4gZmlsZSBkZXNjcmlwdG9yCiAgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKICAgICAgICAgZCA9IHRmLmZpbGVubygpCiAgICAgICAgIG9zLndyaXRlKGQsIGIicGVhciIpCiAgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCkBAIC0xNzcsNiArMTk2LDcgQEAKICAgICBkZWYgdGVzdF9zdGRpbl9maWxlb2JqKHNlbGYpOgogICAgICAgICAjIHN0ZGluIGlzIHNldCB0byBvcGVuIGZpbGUgb2JqZWN0CiAgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKICAgICAgICAgdGYud3JpdGUoYiJwZWFyIikKICAgICAgICAgdGYuc2VlaygwKQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCkBAIC0xOTAsMTEgKzIxMCwxMyBAQAogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKCJvcmFuZ2UiKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCksIGIib3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlZGVzKHNlbGYpOgogICAgICAgICAjIHN0ZG91dCBpcyBzZXQgdG8gb3BlbiBmaWxlIGRlc2NyaXB0b3IKICAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQogICAgICAgICBkID0gdGYuZmlsZW5vKCkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZSgib3JhbmdlIiknXSwKQEAgLTIwNiw2ICsyMjgsNyBAQAogICAgIGRlZiB0ZXN0X3N0ZG91dF9maWxlb2JqKHNlbGYpOgogICAgICAgICAjIHN0ZG91dCBpcyBzZXQgdG8gb3BlbiBmaWxlIG9iamVjdAogICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoIm9yYW5nZSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXRmKQpAQCAtMjE4LDMxICsyNDEsMzEgQEAKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgic3RyYXdiZXJyeSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHAuc3RkZXJyLnJlYWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYiJzdHJhd2JlcnJ5IikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHAuc3RkZXJyLnJlYWQoKSwgYiJzdHJhd2JlcnJ5IikKIAogICAgIGRlZiB0ZXN0X3N0ZGVycl9maWxlZGVzKHNlbGYpOgogICAgICAgICAjIHN0ZGVyciBpcyBzZXQgdG8gb3BlbiBmaWxlIGRlc2NyaXB0b3IKICAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQogICAgICAgICBkID0gdGYuZmlsZW5vKCkKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsgc3lzLnN0ZGVyci53cml0ZSgic3RyYXdiZXJyeSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWQpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIG9zLmxzZWVrKGQsIDAsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvcy5yZWFkKGQsIDEwMjQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiInN0cmF3YmVycnkiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKG9zLnJlYWQoZCwgMTAyNCksIGIic3RyYXdiZXJyeSIpCiAKICAgICBkZWYgdGVzdF9zdGRlcnJfZmlsZW9iaihzZWxmKToKICAgICAgICAgIyBzdGRlcnIgaXMgc2V0IHRvIG9wZW4gZmlsZSBvYmplY3QKICAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBzeXMuc3RkZXJyLndyaXRlKCJzdHJhd2JlcnJ5IiknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGYpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHRmLnNlZWsoMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdmVfc3RkZXJyX2RlYnVnX2RlY29yYXRpb25zKHRmLnJlYWQoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYiJzdHJhd2JlcnJ5IikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbCh0Zi5yZWFkKCksIGIic3RyYXdiZXJyeSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkZXJyX3BpcGUoc2VsZik6CiAgICAgICAgICMgY2FwdHVyZSBzdGRvdXQgYW5kIHN0ZGVyciB0byB0aGUgc2FtZSBwaXBlCkBAIC0yNTMsMTMgKzI3NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIm9yYW5nZSIpJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKLSAgICAgICAgb3V0cHV0ID0gcC5zdGRvdXQucmVhZCgpCi0gICAgICAgIHN0cmlwcGVkID0gcmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBwZWQsIGIiYXBwbGVvcmFuZ2UiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwocC5zdGRvdXQucmVhZCgpLCBiImFwcGxlb3JhbmdlIikKIAogICAgIGRlZiB0ZXN0X3N0ZG91dF9zdGRlcnJfZmlsZShzZWxmKToKICAgICAgICAgIyBjYXB0dXJlIHN0ZG91dCBhbmQgc3RkZXJyIHRvIHRoZSBzYW1lIG9wZW4gZmlsZQogICAgICAgICB0ZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodGYuY2xvc2UpCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKQEAgLTI2OSw5ICsyOTIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGYpCiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHRmLnNlZWsoMCkKLSAgICAgICAgb3V0cHV0ID0gdGYucmVhZCgpCi0gICAgICAgIHN0cmlwcGVkID0gcmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhvdXRwdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaXBwZWQsIGIiYXBwbGVvcmFuZ2UiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHRmLnJlYWQoKSwgYiJhcHBsZW9yYW5nZSIpCiAKICAgICBkZWYgdGVzdF9zdGRvdXRfZmlsZWRlc19vZl9zdGRvdXQoc2VsZik6CiAgICAgICAgICMgc3Rkb3V0IGlzIHNldCB0byAxICgjMTUzMTg2MikuCkBAIC0yOTIsNiArMzEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGN3ZCgpKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9dG1wZGlyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCiAgICAgICAgIG5vcm1jYXNlID0gb3MucGF0aC5ub3JtY2FzZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vcm1jYXNlKHAuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoInV0Zi04IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1jYXNlKHRtcGRpcikpCkBAIC0zMDQsNiArMzI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKG9zLmdldGVudigiRlJVSVQiKSknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKSwgYiJvcmFuZ2UiKQogCiAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3RkaW4oc2VsZik6CkBAIC0zMjgsOSArMzUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgTm9uZSkKLSAgICAgICAgIyBXaGVuIHJ1bm5pbmcgd2l0aCBhIHB5ZGVidWcgYnVpbGQsIHRoZSAjIG9mIHJlZmVyZW5jZXMgaXMgb3V0cHV0dGVkCi0gICAgICAgICMgdG8gc3RkZXJyLCBzbyBqdXN0IGNoZWNrIGlmIHN0ZGVyciBhdCBsZWFzdCBzdGFydGVkIHdpdGggInBpbmFwcGxlIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMoc3RkZXJyKSwgYiJwaW5lYXBwbGUiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgYiJwaW5lYXBwbGUiKQogCiAgICAgZGVmIHRlc3RfY29tbXVuaWNhdGUoc2VsZik6CiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKQEAgLTM0MCwyNiArMzYxLDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZShiImJhbmFuYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiImJhbmFuYSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtb3ZlX3N0ZGVycl9kZWJ1Z19kZWNvcmF0aW9ucyhzdGRlcnIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGIicGluZWFwcGxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsIGIicGluZWFwcGxlIikKIAotICAgICMgVGhpcyB0ZXN0IGlzIExpbnV4IHNwZWNpZmljIGZvciBzaW1wbGljaXR5IHRvIGF0IGxlYXN0IGhhdmUKLSAgICAjIHNvbWUgY292ZXJhZ2UuICBJdCBpcyBub3QgYSBwbGF0Zm9ybSBzcGVjaWZpYyBidWcuCi0gICAgaWYgb3MucGF0aC5pc2RpcignL3Byb2MvJWQvZmQnICUgb3MuZ2V0cGlkKCkpOgotICAgICAgICAjIFRlc3QgZm9yIHRoZSBmZCBsZWFrIHJlcG9ydGVkIGluIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNzkxLgotICAgICAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9waXBlX2ZkX2xlYWsoc2VsZik6Ci0gICAgICAgICAgICBmZF9kaXJlY3RvcnkgPSAnL3Byb2MvJWQvZmQnICUgb3MuZ2V0cGlkKCkKLSAgICAgICAgICAgIG51bV9mZHNfYmVmb3JlX3BvcGVuID0gbGVuKG9zLmxpc3RkaXIoZmRfZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3ByaW50KCknXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgICAgICBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIG51bV9mZHNfYWZ0ZXJfY29tbXVuaWNhdGUgPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQotICAgICAgICAgICAgZGVsIHAKLSAgICAgICAgICAgIG51bV9mZHNfYWZ0ZXJfZGVzdHJ1Y3Rpb24gPSBsZW4ob3MubGlzdGRpcihmZF9kaXJlY3RvcnkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fZmRzX2JlZm9yZV9wb3BlbiwgbnVtX2Zkc19hZnRlcl9kZXN0cnVjdGlvbikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2Zkc19iZWZvcmVfcG9wZW4sIG51bV9mZHNfYWZ0ZXJfY29tbXVuaWNhdGUpCisgICAgIyBUZXN0IGZvciB0aGUgZmQgbGVhayByZXBvcnRlZCBpbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjc5MS4KKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9waXBlX2ZkX2xlYWsoc2VsZik6CisgICAgICAgIGZvciBzdGRpbl9waXBlIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICBmb3Igc3Rkb3V0X3BpcGUgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICBmb3Igc3RkZXJyX3BpcGUgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IHt9CisgICAgICAgICAgICAgICAgICAgIGlmIHN0ZGluX3BpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zWydzdGRpbiddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgICAgICAgICAgICAgIGlmIHN0ZG91dF9waXBlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1snc3Rkb3V0J10gPSBzdWJwcm9jZXNzLlBJUEUKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RkZXJyX3BpcGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zWydzdGRlcnInXSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3B0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKChzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiKSwgKipvcHRpb25zKQorICAgICAgICAgICAgICAgICAgICBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcC5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLnN0ZGluLmNsb3NlZCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcC5zdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocC5zdGRvdXQuY2xvc2VkKQorICAgICAgICAgICAgICAgICAgICBpZiBwLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLnN0ZGVyci5jbG9zZWQpCiAKICAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9yZXR1cm5zKHNlbGYpOgogICAgICAgICAjIGNvbW11bmljYXRlKCkgc2hvdWxkIHJldHVybiBOb25lIGlmIG5vIHJlZGlyZWN0aW9uIGlzIGFjdGl2ZQpAQCAtMzg4LDYgKzQxOCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGluLmNsb3NlKQogICAgICAgICBzdHJpbmdfdG9fd3JpdGUgPSBiImFiYyIqcGlwZV9idWYKICAgICAgICAgKHN0ZG91dCwgc3RkZXJyKSA9IHAuY29tbXVuaWNhdGUoc3RyaW5nX3RvX3dyaXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgc3RyaW5nX3RvX3dyaXRlKQpAQCAtNDAwLDEwICs0MzMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkaW4uY2xvc2UpCiAgICAgICAgIHAuc3RkaW4ud3JpdGUoYiJiYW5hbmEiKQogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZShiInNwbGl0IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGIiYmFuYW5hc3BsaXQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW92ZV9zdGRlcnJfZGVidWdfZGVjb3JhdGlvbnMoc3RkZXJyKSwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHN0ZGVyciwgYiIiKQogCiAgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgogICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCkBAIC00MjEsNiArNDU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJcXG5saW5lNiIpOyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQogICAgICAgICBzdGRvdXQgPSBwLnN0ZG91dC5yZWFkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICJsaW5lMVxubGluZTJcbmxpbmUzXG5saW5lNFxubGluZTVcbmxpbmU2IikKIApAQCAtNDQxLDYgKzQ3OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiXFxubGluZTYiKTsnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPTEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQogICAgICAgICAoc3Rkb3V0LCBzdGRlcnIpID0gcC5jb21tdW5pY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCAibGluZTFcbmxpbmUyXG5saW5lM1xubGluZTRcbmxpbmU1XG5saW5lNiIpCiAKQEAgLTUxMyw3ICs1NTIsNyBAQAogICAgICAgICAjIGJ1dCwgYmFzZWQgb24gc3lzdGVtIHNjaGVkdWxpbmcgd2UgY2FuJ3QgY29udHJvbCwgaXQncyBwb3NzaWJsZQogICAgICAgICAjIHBvbGwoKSBuZXZlciByZXR1cm5lZCBOb25lLiAgSXQgInNob3VsZCBiZSIgdmVyeSByYXJlIHRoYXQgaXQKICAgICAgICAgIyBkaWRuJ3QgZ28gYXJvdW5kIGF0IGxlYXN0IHR3aWNlLgotICAgICAgICBzZWxmLmFzc2VydFRydWUoY291bnQgPj0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoY291bnQsIDIpCiAgICAgICAgICMgU3Vic2VxdWVudCBpbnZvY2F0aW9ucyBzaG91bGQganVzdCByZXR1cm4gdGhlIHJldHVybmNvZGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvbGwoKSwgMCkKIApAQCAtNTI5LDEyICs1NjgsOCBAQAogICAgIGRlZiB0ZXN0X2ludmFsaWRfYnVmc2l6ZShzZWxmKToKICAgICAgICAgIyBhbiBpbnZhbGlkIHR5cGUgb2YgdGhlIGJ1ZnNpemUgYXJndW1lbnQgc2hvdWxkIHJhaXNlCiAgICAgICAgICMgVHlwZUVycm9yLgotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLCAib3JhbmdlIikKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgVHlwZUVycm9yIikKIAogICAgIGRlZiB0ZXN0X2J1ZnNpemVfaXNfbm9uZShzZWxmKToKICAgICAgICAgIyBidWZzaXplPU5vbmUgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGJ1ZnNpemU9MC4KQEAgLTU1MSwxNSArNTg2LDE0IEBACiAgICAgICAgICMgdmFsdWUgZm9yIHRoYXQgbGltaXQsIGJ1dCBXaW5kb3dzIGhhcyAyMDQ4LCBzbyB3ZSBsb29wCiAgICAgICAgICMgMTAyNCB0aW1lcyAoZWFjaCBjYWxsIGxlYWtlZCB0d28gZmRzKS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAyNCk6Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFdpbmRvd3MgcmFpc2VzIElPRXJyb3IuICBPdGhlcnMgcmFpc2UgT1NFcnJvci4KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRW52aXJvbm1lbnRFcnJvcikgYXMgYzoKICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKFsnbm9uZXhpc3RpbmdfaV9ob3BlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgICMgV2luZG93cyByYWlzZXMgSU9FcnJvcgotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBpZ25vcmUgZXJyb3JzIHRoYXQgaW5kaWNhdGUgdGhlIGNvbW1hbmQgd2FzIG5vdCBmb3VuZAotICAgICAgICAgICAgICAgIGlmIGVyci5lcnJubyBub3QgaW4gKGVycm5vLkVOT0VOVCwgZXJybm8uRUFDQ0VTKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgaWdub3JlIGVycm9ycyB0aGF0IGluZGljYXRlIHRoZSBjb21tYW5kIHdhcyBub3QgZm91bmQKKyAgICAgICAgICAgIGlmIGMuZXhjZXB0aW9uLmVycm5vIG5vdCBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FQUNDRVMpOgorICAgICAgICAgICAgICAgIHJhaXNlIGMuZXhjZXB0aW9uCiAKICAgICBkZWYgdGVzdF9pc3N1ZTg3ODAoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgc3Rkb3V0IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQKQEAgLTU3NSw5ICs2MDksOSBAQAogICAgIGRlZiB0ZXN0X2hhbmRsZXNfY2xvc2VkX29uX2V4Y2VwdGlvbihzZWxmKToKICAgICAgICAgIyBJZiBDcmVhdGVQcm9jZXNzIGV4aXRzIHdpdGggYW4gZXJyb3IsIGVuc3VyZSB0aGUKICAgICAgICAgIyBkdXBsaWNhdGUgb3V0cHV0IGhhbmRsZXMgYXJlIHJlbGVhc2VkCi0gICAgICAgIGlmaGFuZGxlLCBpZm5hbWUgPSBzZWxmLm1rc3RlbXAoKQotICAgICAgICBvZmhhbmRsZSwgb2ZuYW1lID0gc2VsZi5ta3N0ZW1wKCkKLSAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IHNlbGYubWtzdGVtcCgpCisgICAgICAgIGlmaGFuZGxlLCBpZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgb2ZoYW5kbGUsIG9mbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBlZmhhbmRsZSwgZWZuYW1lID0gbWtzdGVtcCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4gKFsiKiJdLCBzdGRpbj1pZmhhbmRsZSwgc3Rkb3V0PW9maGFuZGxlLAogICAgICAgICAgICAgICBzdGRlcnI9ZWZoYW5kbGUpCkBAIC02MTEsNDc2ICs2NDUsNzY5IEBACiAgICAgICAgIHRpbWUuc2xlZXAoMikKICAgICAgICAgcC5jb21tdW5pY2F0ZShiIngiICogMioqMjApCiAKLSAgICAjCi0gICAgIyBQT1NJWCB0ZXN0cwotICAgICMKLSAgICBpZiBub3QgbXN3aW5kb3dzOgotICAgICAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgotICAgICAgICAgICAgIyBjYXVnaHQgJiByZS1yYWlzZWQgZXhjZXB0aW9ucwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD0iL3RoaXMvcGF0aC9kb2VzL25vdC9leGlzdCIpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICMgVGhlIGF0dHJpYnV0ZSBjaGlsZF90cmFjZWJhY2sgc2hvdWxkIGNvbnRhaW4gIm9zLmNoZGlyIgotICAgICAgICAgICAgICAgICMgc29tZXdoZXJlLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5jaGlsZF90cmFjZWJhY2suZmluZCgib3MuY2hkaXIiKSwgLTEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXhwZWN0ZWQgT1NFcnJvciIpCiAKLSAgICAgICAgZGVmIF9zdXBwcmVzc19jb3JlX2ZpbGVzKHNlbGYpOgotICAgICAgICAgICAgIiIiVHJ5IHRvIHByZXZlbnQgY29yZSBmaWxlcyBmcm9tIGJlaW5nIGNyZWF0ZWQuCi0gICAgICAgICAgICBSZXR1cm5zIHByZXZpb3VzIHVsaW1pdCBpZiBzdWNjZXNzZnVsLCBlbHNlIE5vbmUuCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAotICAgICAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKyMgY29udGV4dCBtYW5hZ2VyCitjbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKKyAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKKyAgICBvbGRfbGltaXQgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IHJlc291cmNlCisgICAgICAgICAgICBzZWxmLm9sZF9saW1pdCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSkKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgKDAsIDApKQorICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAorICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCisgICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgorICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCiAgICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCiAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgICAgICBpZiB2YWx1ZS5zdHJpcCgpID09IGInZGV2ZWxvcGVyJzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoInRoaXMgdGVzdHMgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQotICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgorICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgorICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHJlc291cmNlCi0gICAgICAgICAgICAgICAgb2xkX2xpbWl0ID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgKDAsMCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9sZF9saW1pdAotICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgorICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZXNvdXJjZQorICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF9saW1pdCkKKyAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgVmFsdWVFcnJvciwgcmVzb3VyY2UuZXJyb3IpOgorICAgICAgICAgICAgcGFzcwogCiAKK0B1bml0dGVzdC5za2lwSWYobXN3aW5kb3dzLCAiUE9TSVggc3BlY2lmaWMgdGVzdHMiKQorY2xhc3MgUE9TSVhQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKIAotICAgICAgICBkZWYgX3Vuc3VwcHJlc3NfY29yZV9maWxlcyhzZWxmLCBvbGRfbGltaXQpOgotICAgICAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgotICAgICAgICAgICAgaWYgb2xkX2xpbWl0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IHJlc291cmNlCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBvbGRfbGltaXQpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBWYWx1ZUVycm9yLCByZXNvdXJjZS5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgZGVmIHRlc3RfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgbm9uZXhpc3RlbnRfZGlyID0gIi9fdGhpcy9wYS50aC9kb2VzL25vdC9leGlzdCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIobm9uZXhpc3RlbnRfZGlyKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgIyBUaGlzIGF2b2lkcyBoYXJkIGNvZGluZyB0aGUgZXJybm8gdmFsdWUgb3IgdGhlIE9TIHBlcnJvcigpCisgICAgICAgICAgICAjIHN0cmluZyBhbmQgaW5zdGVhZCBjYXB0dXJlIHRoZSBleGNlcHRpb24gdGhhdCB3ZSB3YW50IHRvIHNlZQorICAgICAgICAgICAgIyBiZWxvdyBmb3IgY29tcGFyaXNvbi4KKyAgICAgICAgICAgIGRlc2lyZWRfZXhjZXB0aW9uID0gZQorICAgICAgICAgICAgZGVzaXJlZF9leGNlcHRpb24uc3RyZXJyb3IgKz0gJzogJyArIHJlcHIoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImNoZGlyIHRvIG5vbmV4aXN0YW50IGRpcmVjdG9yeSAlcyBzdWNjZWVkZWQuIiAlCisgICAgICAgICAgICAgICAgICAgICAgbm9uZXhpc3RlbnRfZGlyKQogCi0gICAgICAgIGRlZiB0ZXN0X3J1bl9hYm9ydChzZWxmKToKLSAgICAgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgotICAgICAgICAgICAgb2xkX2xpbWl0ID0gc2VsZi5fc3VwcHJlc3NfY29yZV9maWxlcygpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IG9zOyBvcy5hYm9ydCgpIl0pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuX3Vuc3VwcHJlc3NfY29yZV9maWxlcyhvbGRfbGltaXQpCi0gICAgICAgICAgICBwLndhaXQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgtcC5yZXR1cm5jb2RlLCBzaWduYWwuU0lHQUJSVCkKKyAgICAgICAgIyBFcnJvciBpbiB0aGUgY2hpbGQgcmUtcmFpc2VkIGluIHRoZSBwYXJlbnQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPW5vbmV4aXN0ZW50X2RpcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgVGVzdCB0aGF0IHRoZSBjaGlsZCBwcm9jZXNzIGNoZGlyIGZhaWx1cmUgYWN0dWFsbHkgbWFrZXMKKyAgICAgICAgICAgICMgaXQgdXAgdG8gdGhlIHBhcmVudCBwcm9jZXNzIGFzIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVzaXJlZF9leGNlcHRpb24uZXJybm8sIGUuZXJybm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc2lyZWRfZXhjZXB0aW9uLnN0cmVycm9yLCBlLnN0cmVycm9yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yOiAlcyIgJSBkZXNpcmVkX2V4Y2VwdGlvbikKIAotICAgICAgICBkZWYgdGVzdF9wcmVleGVjKHNlbGYpOgotICAgICAgICAgICAgIyBwcmVleGVjIGZ1bmN0aW9uCisgICAgZGVmIHRlc3RfcmVzdG9yZV9zaWduYWxzKHNlbGYpOgorICAgICAgICAjIENvZGUgY292ZXJhZ2UgZm9yIGJvdGggdmFsdWVzIG9mIHJlc3RvcmVfc2lnbmFscyB0byBtYWtlIHN1cmUgaXQKKyAgICAgICAgIyBhdCBsZWFzdCBkb2VzIG5vdCBibG93IHVwLgorICAgICAgICAjIEEgdGVzdCBmb3IgYmVoYXZpb3Igd291bGQgYmUgY29tcGxleC4gIENvbnRyaWJ1dGlvbnMgd2VsY29tZS4KKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLCByZXN0b3JlX3NpZ25hbHM9VHJ1ZSkKKyAgICAgICAgc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgIiJdLCByZXN0b3JlX3NpZ25hbHM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9zdGFydF9uZXdfc2Vzc2lvbihzZWxmKToKKyAgICAgICAgIyBGb3IgY29kZSBjb3ZlcmFnZSBvZiBjYWxsaW5nIHNldHNpZCgpLiAgV2UgZG9uJ3QgY2FyZSBpZiB3ZSBnZXQgYW4KKyAgICAgICAgIyBFUEVSTSBlcnJvciBmcm9tIGl0IGRlcGVuZGluZyBvbiB0aGUgdGVzdCBleGVjdXRpb24gZW52aXJvbm1lbnQsIHRoYXQKKyAgICAgICAgIyBzdGlsbCBpbmRpY2F0ZXMgdGhhdCBpdCB3YXMgY2FsbGVkLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBvczsgcHJpbnQob3MuZ2V0cGdpZChvcy5nZXRwaWQoKSkpIl0sCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQRVJNOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwYXJlbnRfcGdpZCA9IG9zLmdldHBnaWQob3MuZ2V0cGlkKCkpCisgICAgICAgICAgICBjaGlsZF9wZ2lkID0gaW50KG91dHB1dCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGFyZW50X3BnaWQsIGNoaWxkX3BnaWQpCisKKyAgICBkZWYgdGVzdF9ydW5fYWJvcnQoc2VsZik6CisgICAgICAgICMgcmV0dXJuY29kZSBoYW5kbGVzIHNpZ25hbCB0ZXJtaW5hdGlvbgorICAgICAgICB3aXRoIF9TdXBwcmVzc0NvcmVGaWxlcygpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzLG9zOycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZShvcy5nZXRlbnYoIkZSVUlUIikpJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IG9zLnB1dGVudigiRlJVSVQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGUiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCBiImFwcGxlIikKLQotICAgICAgICBkZWYgdGVzdF9hcmdzX3N0cmluZyhzZWxmKToKLSAgICAgICAgICAgICMgYXJncyBpcyBhIHN0cmluZwotICAgICAgICAgICAgZmQsIGZuYW1lID0gc2VsZi5ta3N0ZW1wKCkKLSAgICAgICAgICAgICMgcmVvcGVuIGluIHRleHQgbW9kZQotICAgICAgICAgICAgd2l0aCBvcGVuKGZkLCAidyIpIGFzIGZvYmo6Ci0gICAgICAgICAgICAgICAgZm9iai53cml0ZSgiIyEvYmluL3NoXG4iKQotICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMG83MDApCi0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihmbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOyBvcy5hYm9ydCgpJ10pCiAgICAgICAgICAgICBwLndhaXQoKQotICAgICAgICAgICAgb3MucmVtb3ZlKGZuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDQ3KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1wLnJldHVybmNvZGUsIHNpZ25hbC5TSUdBQlJUKQogCi0gICAgICAgIGRlZiB0ZXN0X2ludmFsaWRfYXJncyhzZWxmKToKLSAgICAgICAgICAgICMgaW52YWxpZCBhcmd1bWVudHMgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz00NykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPTQ3KQorICAgIGRlZiB0ZXN0X3ByZWV4ZWMoc2VsZik6CisgICAgICAgICMgRElTQ0xBSU1FUjogU2V0dGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaXMgKm5vdCogYSBnb29kIHVzZQorICAgICAgICAjIG9mIGEgcHJlZXhlY19mbi4gIFRoaXMgaXMgbWVyZWx5IGEgdGVzdC4KKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMsb3M7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUob3MuZ2V0ZW52KCJGUlVJVCIpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogb3MucHV0ZW52KCJGUlVJVCIsICJhcHBsZSIpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLCBiImFwcGxlIikKIAotICAgICAgICBkZWYgdGVzdF9zaGVsbF9zZXF1ZW5jZShzZWxmKToKLSAgICAgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQotICAgICAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJhcHBsZSIKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZWNobyAkRlJVSVQiXSwgc2hlbGw9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoYiIgXHRcclxuXGYiKSwgYiJhcHBsZSIpCisgICAgZGVmIHRlc3RfcHJlZXhlY19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGRlZiByYWlzZV9pdCgpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiV2hhdCBpZiB0d28gc3dhbGxvd3MgY2FycmllZCBhIGNvY29udXQ/IikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXJhaXNlX2l0KQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIGEgVmFsdWVFcnJvciBmcm9tIHRoZSBwcmVleGVjX2ZuIikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImNvY29udXQiLCBlLmFyZ3NbMF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4Y2VwdGlvbiByYWlzZWQgYnkgcHJlZXhlY19mbiBkaWQgbm90IG1ha2UgaXQgIgorICAgICAgICAgICAgICAgICAgICAgICJ0byB0aGUgcGFyZW50IHByb2Nlc3MuIikKIAotICAgICAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzdHJpbmcpCi0gICAgICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oImVjaG8gJEZSVUlUIiwgc2hlbGw9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoYiIgXHRcclxuXGYiKSwgYiJhcHBsZSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2MsICJSZXF1aXJlcyBhIGdjIG1vZHVsZS4iKQorICAgIGRlZiB0ZXN0X3ByZWV4ZWNfZ2NfbW9kdWxlX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0cyB0aGUgY29kZSB0aGF0IGRpc2FibGVzIGdhcmJhZ2UgY29sbGVjdGlvbiBpZiB0aGUgY2hpbGQKKyAgICAgICAgIyBwcm9jZXNzIHdpbGwgZXhlY3V0ZSBhbnkgUHl0aG9uLgorICAgICAgICBkZWYgcmFpc2VfcnVudGltZV9lcnJvcigpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aGlzIHNob3VsZG4ndCBlc2NhcGUiKQorICAgICAgICBlbmFibGVkID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgb3JpZ19nY19kaXNhYmxlID0gZ2MuZGlzYWJsZQorICAgICAgICBvcmlnX2djX2lzZW5hYmxlZCA9IGdjLmlzZW5hYmxlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNlbmFibGVkKCkpCisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZXhlY19mbj1sYW1iZGE6IE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdjLmlzZW5hYmxlZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUG9wZW4gZW5hYmxlZCBnYyB3aGVuIGl0IHNob3VsZG4ndC4iKQogCi0gICAgICAgIGRlZiB0ZXN0X2NhbGxfc3RyaW5nKHNlbGYpOgotICAgICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gVU5JWAotICAgICAgICAgICAgZmQsIGZuYW1lID0gc2VsZi5ta3N0ZW1wKCkKLSAgICAgICAgICAgICMgcmVvcGVuIGluIHRleHQgbW9kZQotICAgICAgICAgICAgd2l0aCBvcGVuKGZkLCAidyIpIGFzIGZvYmo6Ci0gICAgICAgICAgICAgICAgZm9iai53cml0ZSgiIyEvYmluL3NoXG4iKQotICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCi0gICAgICAgICAgICBvcy5jaG1vZChmbmFtZSwgMG83MDApCi0gICAgICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChmbmFtZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorICAgICAgICAgICAgZ2MuZW5hYmxlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc2VuYWJsZWQoKSkKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsICcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnYy5pc2VuYWJsZWQoKSwgIlBvcGVuIGxlZnQgZ2MgZGlzYWJsZWQuIikKIAotICAgICAgICBkZWYgdGVzdF9zcGVjaWZpY19zaGVsbChzZWxmKToKLSAgICAgICAgICAgICMgSXNzdWUgIzkyNjU6IEluY29ycmVjdCBuYW1lIHBhc3NlZCBhcyBhcmdbMF0uCi0gICAgICAgICAgICBzaGVsbHMgPSBbXQotICAgICAgICAgICAgZm9yIHByZWZpeCBpbiBbJy9iaW4nLCAnL3Vzci9iaW4vJywgJy91c3IvbG9jYWwvYmluJ106Ci0gICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gWydiYXNoJywgJ2tzaCddOgotICAgICAgICAgICAgICAgICAgICBzaCA9IG9zLnBhdGguam9pbihwcmVmaXgsIG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHNoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCi0gICAgICAgICAgICBpZiBub3Qgc2hlbGxzOiAjIFdpbGwgcHJvYmFibHkgd29yayBmb3IgYW55IHNoZWxsIGJ1dCBjc2guCi0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiYmFzaCBvciBrc2ggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCIpCi0gICAgICAgICAgICBzaCA9ICcvYmluL3NoJwotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2gpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoc2gpOgotICAgICAgICAgICAgICAgICMgVGVzdCB3aWxsIGZhaWwgaWYgL2Jpbi9zaCBpcyBhIHN5bWxpbmsgdG8gY3NoLgotICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCi0gICAgICAgICAgICBmb3Igc2ggaW4gc2hlbGxzOgotICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJlY2hvICQwIiwgZXhlY3V0YWJsZT1zaCwgc2hlbGw9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKCksIGJ5dGVzKHNoLCAnYXNjaWknKSkKKyAgICAgICAgICAgIGdjLmRpc2FibGUgPSByYWlzZV9ydW50aW1lX2Vycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHN1YnByb2Nlc3MuUG9wZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsICcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiBOb25lKQogCi0gICAgICAgIGRlZiBESVNBQkxFRF90ZXN0X3NlbmRfc2lnbmFsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImlucHV0KCkiXSkKKyAgICAgICAgICAgIGRlbCBnYy5pc2VuYWJsZWQgICMgZm9yY2UgYW4gQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzdWJwcm9jZXNzLlBvcGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogTm9uZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGdjLmRpc2FibGUgPSBvcmlnX2djX2Rpc2FibGUKKyAgICAgICAgICAgIGdjLmlzZW5hYmxlZCA9IG9yaWdfZ2NfaXNlbmFibGVkCisgICAgICAgICAgICBpZiBub3QgZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC5zZW5kX3NpZ25hbChzaWduYWwuU0lHSU5UKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLndhaXQoKSwgMCkKKyAgICBkZWYgdGVzdF9hcmdzX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBhcmdzIGlzIGEgc3RyaW5nCisgICAgICAgIGZkLCBmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICAjIHJlb3BlbiBpbiB0ZXh0IG1vZGUKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAidyIsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikgYXMgZm9iajoKKyAgICAgICAgICAgIGZvYmoud3JpdGUoIiMhL2Jpbi9zaFxuIikKKyAgICAgICAgICAgIGZvYmoud3JpdGUoImV4ZWMgJyVzJyAtYyAnaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpJ1xuIiAlCisgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlKQorICAgICAgICBvcy5jaG1vZChmbmFtZSwgMG83MDApCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGZuYW1lKQorICAgICAgICBwLndhaXQoKQorICAgICAgICBvcy5yZW1vdmUoZm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCA0NykKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9raWxsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbz00NykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0aW9uZmxhZ3M9NDcpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAua2lsbCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR0tJTEwpCisgICAgZGVmIHRlc3Rfc2hlbGxfc2VxdWVuY2Uoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIkZSVUlUIl0gPSAiYXBwbGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsiZWNobyAkRlJVSVQiXSwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5zdHJpcChiIiBcdFxyXG5cZiIpLCBiImFwcGxlIikKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF90ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIi1jIiwgImlucHV0KCkiXSkKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHN0cmluZykKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gImFwcGxlIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkRlJVSVQiLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGRvdXQucmVhZCgpLnN0cmlwKGIiIFx0XHJcblxmIiksIGIiYXBwbGUiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAtc2lnbmFsLlNJR1RFUk0pCisgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFVOSVgKKyAgICAgICAgZmQsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgICMgcmVvcGVuIGluIHRleHQgbW9kZQorICAgICAgICB3aXRoIG9wZW4oZmQsICJ3IiwgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZSgiIyEvYmluL3NoXG4iKQorICAgICAgICAgICAgZm9iai53cml0ZSgiZXhlYyAnJXMnIC1jICdpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NyknXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIG9zLmNobW9kKGZuYW1lLCAwbzcwMCkKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoZm5hbWUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCiAKLSAgICAgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZW52KHNlbGYpOgotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gKCgndGVzdCcsICdhYmNcdURDRkYnKSwgKCd0ZXN0XHVEQ0ZGJywgJzQyJykpOgotICAgICAgICAgICAgICAgIHZhbHVlX3JlcHIgPSBhc2NpaSh2YWx1ZSkuZW5jb2RlKCJhc2NpaSIpCisgICAgZGVmIHRlc3Rfc3BlY2lmaWNfc2hlbGwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzkyNjU6IEluY29ycmVjdCBuYW1lIHBhc3NlZCBhcyBhcmdbMF0uCisgICAgICAgIHNoZWxscyA9IFtdCisgICAgICAgIGZvciBwcmVmaXggaW4gWycvYmluJywgJy91c3IvYmluLycsICcvdXNyL2xvY2FsL2JpbiddOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gWydiYXNoJywgJ2tzaCddOgorICAgICAgICAgICAgICAgIHNoID0gb3MucGF0aC5qb2luKHByZWZpeCwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCk6CisgICAgICAgICAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGlmIG5vdCBzaGVsbHM6ICMgV2lsbCBwcm9iYWJseSB3b3JrIGZvciBhbnkgc2hlbGwgYnV0IGNzaC4KKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImJhc2ggb3Iga3NoIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QiKQorICAgICAgICBzaCA9ICcvYmluL3NoJworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzaCkgYW5kIG5vdCBvcy5wYXRoLmlzbGluayhzaCk6CisgICAgICAgICAgICAjIFRlc3Qgd2lsbCBmYWlsIGlmIC9iaW4vc2ggaXMgYSBzeW1saW5rIHRvIGNzaC4KKyAgICAgICAgICAgIHNoZWxscy5hcHBlbmQoc2gpCisgICAgICAgIGZvciBzaCBpbiBzaGVsbHM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigiZWNobyAkMCIsIGV4ZWN1dGFibGU9c2gsIHNoZWxsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKSwgYnl0ZXMoc2gsICdhc2NpaScpKQogCi0gICAgICAgICAgICAgICAgIyB0ZXN0IHN0ciB3aXRoIHN1cnJvZ2F0ZXMKLSAgICAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnYoJXMpKSkiICUgcmVwcihrZXkpCi0gICAgICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCi0gICAgICAgICAgICAgICAgIyBGb3JjZSBzdXJyb2dhdGUtZXNjYXBpbmcgb2YgXHhGRiBpbiB0aGUgY2hpbGQgcHJvY2VzczsKLSAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBpdCBjYW4gYmUgZGVjb2RlZCBhcy1pcyBpZiB0aGUgZGVmYXVsdCBsb2NhbGUKLSAgICAgICAgICAgICAgICAjIGlzIGxhdGluLTEuCi0gICAgICAgICAgICAgICAgZW52WydQWVRIT05GU0VOQ09ESU5HJ10gPSAnYXNjaWknCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCi0gICAgICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKLSAgICAgICAgICAgICAgICAgICAgZW52PWVudikKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHZhbHVlX3JlcHIpCisgICAgZGVmIF9raWxsX3Byb2Nlc3Moc2VsZiwgbWV0aG9kLCAqYXJncyk6CisgICAgICAgICMgRG8gbm90IGluaGVyaXQgZmlsZSBoYW5kbGVzIGZyb20gdGhlIHBhcmVudC4KKyAgICAgICAgIyBJdCBzaG91bGQgZml4IGZhaWx1cmVzIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgneFxcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDMwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAjIFdhaXQgZm9yIHRoZSBpbnRlcnByZXRlciB0byBiZSBjb21wbGV0ZWx5IGluaXRpYWxpemVkIGJlZm9yZQorICAgICAgICAjIHNlbmRpbmcgYW55IHNpZ25hbC4KKyAgICAgICAgcC5zdGRvdXQucmVhZCgxKQorICAgICAgICBnZXRhdHRyKHAsIG1ldGhvZCkoKmFyZ3MpCisgICAgICAgIHJldHVybiBwCiAKLSAgICAgICAgICAgICAgICAjIHRlc3QgYnl0ZXMKLSAgICAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgICAgIHNjcmlwdCA9ICJpbXBvcnQgb3M7IHByaW50KGFzY2lpKG9zLmdldGVudiglcykpKSIgJSByZXByKGtleSkKLSAgICAgICAgICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQotICAgICAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKLSAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKLSAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAotICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQotICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgdmFsdWVfcmVwcikKKyAgICBkZWYgdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0tleWJvYXJkSW50ZXJydXB0Jywgc3RkZXJyKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQogCi0gICAgICAgIGRlZiB0ZXN0X3dhaXRfd2hlbl9zaWdjaGlsZF9pZ25vcmVkKHNlbGYpOgotICAgICAgICAgICAgIyBOT1RFOiBzaWdjaGlsZF9pZ25vcmUucHkgbWF5IG5vdCBiZSBhbiBlZmZlY3RpdmUgdGVzdCBvbiBhbGwgT1Nlcy4KLSAgICAgICAgICAgIHNpZ2NoaWxkX2lnbm9yZSA9IHN1cHBvcnQuZmluZGZpbGUoInNpZ2NoaWxkX2lnbm9yZS5weSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBzaWdjaGlsZF9pZ25vcmVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAucmV0dXJuY29kZSwgInNpZ2NoaWxkX2lnbm9yZS5weSBleGl0ZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm9uLXplcm8gd2l0aCB0aGlzIGVycm9yOlxuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmRlY29kZSgndXRmOCcpKQorICAgIGRlZiB0ZXN0X2tpbGwoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLl9raWxsX3Byb2Nlc3MoJ2tpbGwnKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgLXNpZ25hbC5TSUdLSUxMKQogCi0gICAgICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6Ci0gICAgICAgICAgICAjIElzc3VlICM5OTA1OiB0ZXN0IHRoYXQgc3VicHJvY2VzcyBwaXBlcyBzdGlsbCB3b3JrIHByb3Blcmx5IHdpdGgKLSAgICAgICAgICAgICMgc29tZSBzdGFuZGFyZCBmZHMgY2xvc2VkCi0gICAgICAgICAgICBzdGRpbiA9IDAKLSAgICAgICAgICAgIG5ld2ZkcyA9IFtdCi0gICAgICAgICAgICBmb3IgYSBpbiBmZHM6Ci0gICAgICAgICAgICAgICAgYiA9IG9zLmR1cChhKQotICAgICAgICAgICAgICAgIG5ld2Zkcy5hcHBlbmQoYikKLSAgICAgICAgICAgICAgICBpZiBhID09IDA6Ci0gICAgICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuX2tpbGxfcHJvY2VzcygndGVybWluYXRlJykKKyAgICAgICAgXywgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0U3RkZXJyRXF1YWwoc3RkZXJyLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIC1zaWduYWwuU0lHVEVSTSkKKworICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CisgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAorICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAorICAgICAgICBzdGRpbiA9IDAKKyAgICAgICAgbmV3ZmRzID0gW10KKyAgICAgICAgZm9yIGEgaW4gZmRzOgorICAgICAgICAgICAgYiA9IG9zLmR1cChhKQorICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQorICAgICAgICAgICAgaWYgYSA9PSAwOgorICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgZmQgaW4gZmRzOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJhcHBsZSIpOycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRlcnIud3JpdGUoIm9yYW5nZSIpJ10sCisgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN0ZGluLAorICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpCisgICAgICAgICAgICBlcnIgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgob3V0LCBlcnIpLCAoYidhcHBsZScsIGInb3JhbmdlJykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgYiwgYSBpbiB6aXAobmV3ZmRzLCBmZHMpOgorICAgICAgICAgICAgICAgIG9zLmR1cDIoYiwgYSkKKyAgICAgICAgICAgIGZvciBiIGluIG5ld2ZkczoKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShiKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRfMChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkXzEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMV0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZF8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jbG9zZV9zdGRfZmRzKFswLCAxXSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Zkc18wXzIoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMl0pCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfMV8yKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzEsIDJdKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMV8yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMDgwNjogdGVzdCB0aGF0IHN1YnByb2Nlc3MgcGlwZXMgc3RpbGwgd29yayBwcm9wZXJseSB3aXRoCisgICAgICAgICMgYWxsIHN0YW5kYXJkIGZkcyBjbG9zZWQuCisgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMSwgMl0pCisKKyAgICBkZWYgdGVzdF9yZW1hcHBpbmdfc3RkX2ZkcyhzZWxmKToKKyAgICAgICAgIyBvcGVuIHVwIHNvbWUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAgIHRlbXBzID0gW21rc3RlbXAoKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVtcF9mZHMgPSBbZmQgZm9yIGZkLCBmbmFtZSBpbiB0ZW1wc10KKworICAgICAgICAgICAgIyB1bmxpbmsgdGhlIGZpbGVzIC0tIHdlIHdvbid0IG5lZWQgdG8gcmVvcGVuIHRoZW0KKyAgICAgICAgICAgIGZvciBmZCwgZm5hbWUgaW4gdGVtcHM6CisgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQorCisgICAgICAgICAgICAjIHdyaXRlIHNvbWUgZGF0YSB0byB3aGF0IHdpbGwgYmVjb21lIHN0ZGluLCBhbmQgcmV3aW5kCisgICAgICAgICAgICBvcy53cml0ZSh0ZW1wX2Zkc1sxXSwgYiJTVERJTiIpCisgICAgICAgICAgICBvcy5sc2Vlayh0ZW1wX2Zkc1sxXSwgMCwgMCkKKworICAgICAgICAgICAgIyBtb3ZlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIG91dCBvZiB0aGUgd2F5CisgICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZm9yIGZkIGluIGZkczoKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5czsnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIik7JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCk7JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXMuc3RkZXJyLndyaXRlKCJvcmFuZ2UiKSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3RkaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkuY29tbXVuaWNhdGUoKQotICAgICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgob3V0LCBlcnIpLCAoYidhcHBsZScsIGInb3JhbmdlJykpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoYiwgYSkKLSAgICAgICAgICAgICAgICBmb3IgYiBpbiBuZXdmZHM6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgdGhlIGZpbGUgb2JqZWN0cyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzCisgICAgICAgICAgICAgICAgZm9yIGZkLCB0ZW1wX2ZkIGluIGVudW1lcmF0ZSh0ZW1wX2Zkcyk6CisgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIodGVtcF9mZCwgZmQpCiAKLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRfMChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMF0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRfMShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMV0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRfMihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMl0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMShzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMV0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMl0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzFfMihzZWxmKToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMSwgMl0pCi0KLSAgICAgICAgZGVmIHRlc3RfY2xvc2VfZmRzXzBfMV8yKHNlbGYpOgotICAgICAgICAgICAgIyBJc3N1ZSAjMTA4MDY6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAotICAgICAgICAgICAgIyBhbGwgc3RhbmRhcmQgZmRzIGNsb3NlZC4KLSAgICAgICAgICAgIHNlbGYuY2hlY2tfY2xvc2Vfc3RkX2ZkcyhbMCwgMSwgMl0pCi0KLSAgICAgICAgZGVmIHRlc3Rfc3Vycm9nYXRlc19lcnJvcl9tZXNzYWdlKHNlbGYpOgotICAgICAgICAgICAgZGVmIHByZXBhcmUoKToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdXJyb2dhdGU6XHVEQ2ZmIikKLQotICAgICAgICBkZWYgdGVzdF9zZWxlY3RfdW5idWZmZXJlZChzZWxmKToKLSAgICAgICAgICAgICMgSXNzdWUgIzExNDU5OiBidWZzaXplPTAgc2hvdWxkIHJlYWxseSBzZXQgdGhlIHBpcGVzIGFzCi0gICAgICAgICAgICAjIHVuYnVmZmVyZWQgKGFuZCB0aGVyZWZvcmUgbGV0IHNlbGVjdCgpIHdvcmsgcHJvcGVybHkpLgotICAgICAgICAgICAgc2VsZWN0ID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCJzZWxlY3QiKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiYXBwbGUiKSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZnNpemU9MCkKLSAgICAgICAgICAgIGYgPSBwLnN0ZG91dAotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGYuY2xvc2UpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoNCksIGIiYXBwbCIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmLCBzZWxlY3Quc2VsZWN0KFtmXSwgW10sIFtdLCAwLjApWzBdKQotICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAjIG5vdyB1c2UgdGhvc2UgZmlsZXMgaW4gdGhlICJ3cm9uZyIgb3JkZXIsIHNvIHRoYXQgc3VicHJvY2VzcworICAgICAgICAgICAgICAgICMgaGFzIHRvIHJlYXJyYW5nZSB0aGVtIGluIHRoZSBjaGlsZAorICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IGdvdCA9IHN5cy5zdGRpbi5yZWFkKCk7JworICAgICAgICAgICAgICAgICAgICAnc3lzLnN0ZG91dC53cml0ZSgiZ290ICVzIiVnb3QpOyBzeXMuc3RkZXJyLndyaXRlKCJlcnIiKSddLAorICAgICAgICAgICAgICAgICAgICBzdGRpbj10ZW1wX2Zkc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXRlbXBfZmRzWzJdLAorICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGVtcF9mZHNbMF0pCiAgICAgICAgICAgICAgICAgcC53YWl0KCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmZCdzIHVuZGVybmVhdGggc3lzLnN0ZGluLCBldGMuCisgICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6CisgICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCiAKLSAgICAjCi0gICAgIyBXaW5kb3dzIHRlc3RzCi0gICAgIwotICAgIGlmIG1zd2luZG93czoKLSAgICAgICAgZGVmIHRlc3Rfc3RhcnR1cGluZm8oc2VsZik6Ci0gICAgICAgICAgICAjIHN0YXJ0dXBpbmZvIGFyZ3VtZW50Ci0gICAgICAgICAgICAjIFdlIHVzZXMgaGFyZGNvZGVkIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bwotICAgICAgICAgICAgIyBkZXBlbmQgb24gd2luMzJhbGwuCi0gICAgICAgICAgICBTVEFSVEZfVVNFU0hPV1dJTkRPVyA9IDEKLSAgICAgICAgICAgIFNXX01BWElNSVpFID0gMwotICAgICAgICAgICAgc3RhcnR1cGluZm8gPSBzdWJwcm9jZXNzLlNUQVJUVVBJTkZPKCkKLSAgICAgICAgICAgIHN0YXJ0dXBpbmZvLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU0hPV1dJTkRPVwotICAgICAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBTV19NQVhJTUlaRQotICAgICAgICAgICAgIyBTaW5jZSBQeXRob24gaXMgYSBjb25zb2xlIHByb2Nlc3MsIGl0IHdvbid0IGJlIGFmZmVjdGVkCi0gICAgICAgICAgICAjIGJ5IHdTaG93V2luZG93LCBidXQgdGhlIGFyZ3VtZW50IHNob3VsZCBiZSBzaWxlbnRseQotICAgICAgICAgICAgIyBpZ25vcmVkCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKKyAgICAgICAgICAgIGZvciBmZCBpbiB0ZW1wX2ZkczoKKyAgICAgICAgICAgICAgICBvcy5sc2VlayhmZCwgMCwgMCkKKworICAgICAgICAgICAgb3V0ID0gb3MucmVhZCh0ZW1wX2Zkc1syXSwgMTAyNCkKKyAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihvcy5yZWFkKHRlbXBfZmRzWzBdLCAxMDI0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiImdvdCBTVERJTiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiJlcnIiKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBkZWYgdGVzdF9zdXJyb2dhdGVzX2Vycm9yX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGRlZiBwcmVwYXJlKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzdXJyb2dhdGU6XHVEQ2ZmIikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNhbGwoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicGFzcyJdLAorICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49cHJlcGFyZSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgIyBQdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMga2VlcHMgdGhlIG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJzdXJyb2dhdGU6XHVEQ2ZmIikKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAjIF9wb3NpeHN1YnByb2Nlc3MgdXNlcyBhIGRlZmF1bHQgbWVzc2FnZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgIkV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBwcmVleGVjX2ZuLiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3IgUnVudGltZUVycm9yIikKKworICAgIGRlZiB0ZXN0X3VuZGVjb2RhYmxlX2VudihzZWxmKToKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gKCgndGVzdCcsICdhYmNcdURDRkYnKSwgKCd0ZXN0XHVEQ0ZGJywgJzQyJykpOgorICAgICAgICAgICAgIyB0ZXN0IHN0ciB3aXRoIHN1cnJvZ2F0ZXMKKyAgICAgICAgICAgIHNjcmlwdCA9ICJpbXBvcnQgb3M7IHByaW50KGFzY2lpKG9zLmdldGVudiglcykpKSIgJSByZXByKGtleSkKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICAjIFVzZSBDIGxvY2FsZSB0byBnZXQgYXNjaWkgZm9yIHRoZSBsb2NhbGUgZW5jb2RpbmcgdG8gZm9yY2UKKyAgICAgICAgICAgICMgc3Vycm9nYXRlLWVzY2FwaW5nIG9mIFx4RkYgaW4gdGhlIGNoaWxkIHByb2Nlc3M7IG90aGVyd2lzZSBpdCBjYW4KKyAgICAgICAgICAgICMgYmUgZGVjb2RlZCBhcy1pcyBpZiB0aGUgZGVmYXVsdCBsb2NhbGUgaXMgbGF0aW4tMS4KKyAgICAgICAgICAgIGVudlsnTENfQUxMJ10gPSAnQycKKyAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKKyAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcChiJ1xuXHInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaSh2YWx1ZSkpCisKKyAgICAgICAgICAgICMgdGVzdCBieXRlcworICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgiYXNjaWkiLCAic3Vycm9nYXRlZXNjYXBlIikKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQorICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52YiglcykpKSIgJSByZXByKGtleSkKKyAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICBlbnZba2V5XSA9IHZhbHVlCisgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCisgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfcHJvZ3JhbShzZWxmKToKKyAgICAgICAgYWJzX3Byb2dyYW0gPSBvcy5mc2VuY29kZShzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgcGF0aCwgcHJvZ3JhbSA9IG9zLnBhdGguc3BsaXQoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIHByb2dyYW0gPSBvcy5mc2VuY29kZShwcm9ncmFtKQorCisgICAgICAgICMgYWJzb2x1dGUgYnl0ZXMgcGF0aAorICAgICAgICBleGl0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChbYWJzX3Byb2dyYW0sICItYyIsICJwYXNzIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisKKyAgICAgICAgIyBieXRlcyBwcm9ncmFtLCB1bmljb2RlIFBBVEgKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJQQVRIIl0gPSBwYXRoCisgICAgICAgIGV4aXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKFtwcm9ncmFtLCAiLWMiLCAicGFzcyJdLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCAwKQorCisgICAgICAgICMgYnl0ZXMgcHJvZ3JhbSwgYnl0ZXMgUEFUSAorICAgICAgICBlbnZiID0gb3MuZW52aXJvbmIuY29weSgpCisgICAgICAgIGVudmJbYiJQQVRIIl0gPSBvcy5mc2VuY29kZShwYXRoKQorICAgICAgICBleGl0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbChbcHJvZ3JhbSwgIi1jIiwgInBhc3MiXSwgZW52PWVudmIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisKKyAgICBkZWYgdGVzdF9waXBlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNsZWVwZXIgPSBzdXBwb3J0LmZpbmRmaWxlKCJpbnB1dF9yZWFkZXIucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKyAgICAgICAgZmRfc3RhdHVzID0gc3VwcG9ydC5maW5kZmlsZSgiZmRfc3RhdHVzLnB5Iiwgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisKKyAgICAgICAgcDEgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgc2xlZXBlcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAxLmNvbW11bmljYXRlLCBiJycpCisKKyAgICAgICAgcDIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgZmRfc3RhdHVzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGNsb3NlX2Zkcz1GYWxzZSkKKworICAgICAgICBvdXRwdXQsIGVycm9yID0gcDIuY29tbXVuaWNhdGUoKQorICAgICAgICByZXN1bHRfZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisgICAgICAgIHVud2FudGVkX2ZkcyA9IHNldChbcDEuc3RkaW4uZmlsZW5vKCksIHAxLnN0ZG91dC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMS5zdGRlcnIuZmlsZW5vKCldKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0X2ZkcyAmIHVud2FudGVkX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgbm8gZmRzIGZyb20gJXIgdG8gYmUgb3BlbiBpbiBjaGlsZCwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCAlciIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVud2FudGVkX2ZkcywgcmVzdWx0X2ZkcyAmIHVud2FudGVkX2ZkcykpCisKKyAgICBkZWYgdGVzdF9waXBlX2Nsb2V4ZWNfcmVhbF90b29scyhzZWxmKToKKyAgICAgICAgcWNhdCA9IHN1cHBvcnQuZmluZGZpbGUoInFjYXQucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKyAgICAgICAgcWdyZXAgPSBzdXBwb3J0LmZpbmRmaWxlKCJxZ3JlcC5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgIHN1YmRhdGEgPSBiJ3p4Y3ZibicKKyAgICAgICAgZGF0YSA9IHN1YmRhdGEgKiA0ICsgYidcbicKKworICAgICAgICBwMSA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBxY2F0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1GYWxzZSkKKworICAgICAgICBwMiA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBxZ3JlcCwgc3ViZGF0YV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1wMS5zdGRvdXQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAxLndhaXQpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwMi53YWl0KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocDEudGVybWluYXRlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocDIudGVybWluYXRlKQorCisgICAgICAgIHAxLnN0ZGluLndyaXRlKGRhdGEpCisgICAgICAgIHAxLnN0ZGluLmNsb3NlKCkKKworICAgICAgICByZWFkZmlsZXMsIGlnbm9yZWQxLCBpZ25vcmVkMiA9IHNlbGVjdC5zZWxlY3QoW3AyLnN0ZG91dF0sIFtdLCBbXSwgMTApCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWRmaWxlcywgIlRoZSBjaGlsZCBodW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMi5zdGRvdXQucmVhZCgpLCBkYXRhKQorCisgICAgICAgIHAxLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIHAyLnN0ZG91dC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHMoc2VsZik6CisgICAgICAgIGZkX3N0YXR1cyA9IHN1cHBvcnQuZmluZGZpbGUoImZkX3N0YXR1cy5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgIGZkcyA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZHNbMV0pCisKKyAgICAgICAgb3Blbl9mZHMgPSBzZXQoZmRzKQorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgZmRfc3RhdHVzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPUZhbHNlKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgcmVtYWluaW5nX2ZkcyA9IHNldChtYXAoaW50LCBvdXRwdXQuc3BsaXQoYicsJykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVtYWluaW5nX2ZkcyAmIG9wZW5fZmRzLCBvcGVuX2ZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU29tZSBmZHMgd2VyZSBjbG9zZWQiKQorCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgZmRfc3RhdHVzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUpCisgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICByZW1haW5pbmdfZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZW1haW5pbmdfZmRzICYgb3Blbl9mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgZmRzIHdlcmUgbGVmdCBvcGVuIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigxLCByZW1haW5pbmdfZmRzLCAiU3VicHJvY2VzcyBmYWlsZWQiKQorCisgICAgZGVmIHRlc3RfcGFzc19mZHMoc2VsZik6CisgICAgICAgIGZkX3N0YXR1cyA9IHN1cHBvcnQuZmluZGZpbGUoImZkX3N0YXR1cy5weSIsIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorCisgICAgICAgIG9wZW5fZmRzID0gc2V0KCkKKworICAgICAgICBmb3IgeCBpbiByYW5nZSg1KToKKyAgICAgICAgICAgIGZkcyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZHNbMF0pCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1sxXSkKKyAgICAgICAgICAgIG9wZW5fZmRzLnVwZGF0ZShmZHMpCisKKyAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBmZF9zdGF0dXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2Zkcz0oZmQsICkpCisgICAgICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKworICAgICAgICAgICAgcmVtYWluaW5nX2ZkcyA9IHNldChtYXAoaW50LCBvdXRwdXQuc3BsaXQoYicsJykpKQorICAgICAgICAgICAgdG9fYmVfY2xvc2VkID0gb3Blbl9mZHMgLSB7ZmR9CisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZmQsIHJlbWFpbmluZ19mZHMsICJmZCB0byBiZSBwYXNzZWQgbm90IHBhc3NlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbWFpbmluZ19mZHMgJiB0b19iZV9jbG9zZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZCB0byBiZSBjbG9zZWQgcGFzc2VkIikKKworICAgICAgICAgICAgIyBwYXNzX2ZkcyBvdmVycmlkZXMgY2xvc2VfZmRzIHdpdGggYSB3YXJuaW5nLgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nKSBhcyBjb250ZXh0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3VicHJvY2Vzcy5jYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1GYWxzZSwgcGFzc19mZHM9KGZkLCApKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ292ZXJyaWRpbmcgY2xvc2VfZmRzJywgc3RyKGNvbnRleHQud2FybmluZykpCisKKyAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKKyAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1pbm91dCwgc3RkaW49aW5vdXQpCisgICAgICAgICAgICBwLndhaXQoKQorCisgICAgZGVmIHRlc3Rfc3Rkb3V0X3N0ZGVycl9hcmVfc2luZ2xlX2lub3V0X2ZkKHNlbGYpOgorICAgICAgICB3aXRoIGlvLm9wZW4ob3MuZGV2bnVsbCwgInIrIikgYXMgaW5vdXQ6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PWlub3V0LCBzdGRlcnI9aW5vdXQpCisgICAgICAgICAgICBwLndhaXQoKQorCisgICAgZGVmIHRlc3Rfc3RkZXJyX3N0ZGluX2FyZV9zaW5nbGVfaW5vdXRfZmQoc2VsZik6CisgICAgICAgIHdpdGggaW8ub3Blbihvcy5kZXZudWxsLCAicisiKSBhcyBpbm91dDoKKyAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5leGl0KDApIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9aW5vdXQsIHN0ZGluPWlub3V0KQorICAgICAgICAgICAgcC53YWl0KCkKKworICAgIGRlZiB0ZXN0X3dhaXRfd2hlbl9zaWdjaGlsZF9pZ25vcmVkKHNlbGYpOgorICAgICAgICAjIE5PVEU6IHNpZ2NoaWxkX2lnbm9yZS5weSBtYXkgbm90IGJlIGFuIGVmZmVjdGl2ZSB0ZXN0IG9uIGFsbCBPU2VzLgorICAgICAgICBzaWdjaGlsZF9pZ25vcmUgPSBzdXBwb3J0LmZpbmRmaWxlKCJzaWdjaGlsZF9pZ25vcmUucHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmRpcj0ic3VicHJvY2Vzc2RhdGEiKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsIHNpZ2NoaWxkX2lnbm9yZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcC5yZXR1cm5jb2RlLCAic2lnY2hpbGRfaWdub3JlLnB5IGV4aXRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIG5vbi16ZXJvIHdpdGggdGhpcyBlcnJvcjpcbiVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyLmRlY29kZSgndXRmOCcpKQorCisgICAgZGVmIHRlc3Rfc2VsZWN0X3VuYnVmZmVyZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNDU5OiBidWZzaXplPTAgc2hvdWxkIHJlYWxseSBzZXQgdGhlIHBpcGVzIGFzCisgICAgICAgICMgdW5idWZmZXJlZCAoYW5kIHRoZXJlZm9yZSBsZXQgc2VsZWN0KCkgd29yayBwcm9wZXJseSkuCisgICAgICAgIHNlbGVjdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgic2VsZWN0IikKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5cy5zdGRvdXQud3JpdGUoImFwcGxlIiknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZT0wKQorICAgICAgICBmID0gcC5zdGRvdXQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGYuY2xvc2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDQpLCBiImFwcGwiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihmLCBzZWxlY3Quc2VsZWN0KFtmXSwgW10sIFtdLCAwLjApWzBdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcC53YWl0KCkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJXaW5kb3dzIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyUHJvY2Vzc1Rlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zdGFydHVwaW5mbyhzZWxmKToKKyAgICAgICAgIyBzdGFydHVwaW5mbyBhcmd1bWVudAorICAgICAgICAjIFdlIHVzZXMgaGFyZGNvZGVkIGNvbnN0YW50cywgYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0bworICAgICAgICAjIGRlcGVuZCBvbiB3aW4zMmFsbC4KKyAgICAgICAgU1RBUlRGX1VTRVNIT1dXSU5ET1cgPSAxCisgICAgICAgIFNXX01BWElNSVpFID0gMworICAgICAgICBzdGFydHVwaW5mbyA9IHN1YnByb2Nlc3MuU1RBUlRVUElORk8oKQorICAgICAgICBzdGFydHVwaW5mby5kd0ZsYWdzID0gU1RBUlRGX1VTRVNIT1dXSU5ET1cKKyAgICAgICAgc3RhcnR1cGluZm8ud1Nob3dXaW5kb3cgPSBTV19NQVhJTUlaRQorICAgICAgICAjIFNpbmNlIFB5dGhvbiBpcyBhIGNvbnNvbGUgcHJvY2VzcywgaXQgd29uJ3QgYmUgYWZmZWN0ZWQKKyAgICAgICAgIyBieSB3U2hvd1dpbmRvdywgYnV0IHRoZSBhcmd1bWVudCBzaG91bGQgYmUgc2lsZW50bHkKKyAgICAgICAgIyBpZ25vcmVkCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgwKSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm89c3RhcnR1cGluZm8pCiAKLSAgICAgICAgZGVmIHRlc3RfY3JlYXRpb25mbGFncyhzZWxmKToKLSAgICAgICAgICAgICMgY3JlYXRpb25mbGFncyBhcmd1bWVudAotICAgICAgICAgICAgQ1JFQVRFX05FV19DT05TT0xFID0gMTYKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiAgICBhIERPUyBib3ggc2hvdWxkIGZsYXNoIGJyaWVmbHkgLi4uXG4iKQotICAgICAgICAgICAgc3VicHJvY2Vzcy5jYWxsKHN5cy5leGVjdXRhYmxlICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtYyAiaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMC4yNSkiJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzPUNSRUFURV9ORVdfQ09OU09MRSkKKyAgICBkZWYgdGVzdF9jcmVhdGlvbmZsYWdzKHNlbGYpOgorICAgICAgICAjIGNyZWF0aW9uZmxhZ3MgYXJndW1lbnQKKyAgICAgICAgQ1JFQVRFX05FV19DT05TT0xFID0gMTYKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiICAgIGEgRE9TIGJveCBzaG91bGQgZmxhc2ggYnJpZWZseSAuLi5cbiIpCisgICAgICAgIHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCisgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgwLjI1KSInLAorICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpb25mbGFncz1DUkVBVEVfTkVXX0NPTlNPTEUpCiAKLSAgICAgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBpbnZhbGlkIGFyZ3VtZW50cyBzaG91bGQgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49bGFtYmRhOiAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICAjIGludmFsaWQgYXJndW1lbnRzIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN1YnByb2Nlc3MuY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3VicHJvY2Vzcy5jYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLmV4aXQoNDcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKQorCisgICAgZGVmIHRlc3RfY2xvc2VfZmRzKHNlbGYpOgorICAgICAgICAjIGNsb3NlIGZpbGUgZGVzY3JpcHRvcnMKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltcG9ydCBzeXM7IHN5cy5leGl0KDQ3KSJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQogCi0gICAgICAgIGRlZiB0ZXN0X2Nsb3NlX2ZkcyhzZWxmKToKLSAgICAgICAgICAgICMgY2xvc2UgZmlsZSBkZXNjcmlwdG9ycwotICAgICAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAiLWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFJ1biBjb21tYW5kIHRocm91Z2ggdGhlIHNoZWxsIChzZXF1ZW5jZSkKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbInNldCJdLCBzaGVsbD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiJwaHlzYWxpcyIsIHAuc3Rkb3V0LnJlYWQoKSkKIAotICAgICAgICBkZWYgdGVzdF9zaGVsbF9zZXF1ZW5jZShzZWxmKToKLSAgICAgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHNlcXVlbmNlKQotICAgICAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsic2V0Il0sIHNoZWxsPTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC5zdGRvdXQucmVhZCgpLmZpbmQoYiJwaHlzYWxpcyIpLCAtMSkKKyAgICBkZWYgdGVzdF9zaGVsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgUnVuIGNvbW1hbmQgdGhyb3VnaCB0aGUgc2hlbGwgKHN0cmluZykKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJGUlVJVCJdID0gInBoeXNhbGlzIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbigic2V0Iiwgc2hlbGw9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEluKGIicGh5c2FsaXMiLCBwLnN0ZG91dC5yZWFkKCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfc2hlbGxfc3RyaW5nKHNlbGYpOgotICAgICAgICAgICAgIyBSdW4gY29tbWFuZCB0aHJvdWdoIHRoZSBzaGVsbCAoc3RyaW5nKQotICAgICAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIG5ld2VudlsiRlJVSVQiXSA9ICJwaHlzYWxpcyIKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCJzZXQiLCBzaGVsbD0xLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1uZXdlbnYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAuc3Rkb3V0LnJlYWQoKS5maW5kKGIicGh5c2FsaXMiKSwgLTEpCisgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IG9uIFdpbmRvd3MKKyAgICAgICAgcmMgPSBzdWJwcm9jZXNzLmNhbGwoc3lzLmV4ZWN1dGFibGUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCiAKLSAgICAgICAgZGVmIHRlc3RfY2FsbF9zdHJpbmcoc2VsZik6Ci0gICAgICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCBvbiBXaW5kb3dzCi0gICAgICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChzeXMuZXhlY3V0YWJsZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1jICJpbXBvcnQgc3lzOyBzeXMuZXhpdCg0NykiJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDQ3KQorICAgIGRlZiBfa2lsbF9wcm9jZXNzKHNlbGYsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAjIFNvbWUgd2luMzIgYnVpbGRib3QgcmFpc2VzIEVPRkVycm9yIGlmIHN0ZGluIGlzIGluaGVyaXRlZAorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMsIHRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgneFxcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDMwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZG91dC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3RkZXJyLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRpbi5jbG9zZSkKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgaW50ZXJwcmV0ZXIgdG8gYmUgY29tcGxldGVseSBpbml0aWFsaXplZCBiZWZvcmUKKyAgICAgICAgIyBzZW5kaW5nIGFueSBzaWduYWwuCisgICAgICAgIHAuc3Rkb3V0LnJlYWQoMSkKKyAgICAgICAgZ2V0YXR0cihwLCBtZXRob2QpKCphcmdzKQorICAgICAgICBfLCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTdGRlcnJFcXVhbChzdGRlcnIsIGInJykKKyAgICAgICAgcmV0dXJuY29kZSA9IHAud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmV0dXJuY29kZSwgMCkKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9zZW5kX3NpZ25hbChzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHNlbGYuX2tpbGxfcHJvY2Vzcygnc2VuZF9zaWduYWwnLCBzaWduYWwuU0lHVEVSTSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAucG9sbCgpIGlzIE5vbmUsIHAucG9sbCgpKQotICAgICAgICAgICAgcC5zZW5kX3NpZ25hbChzaWduYWwuU0lHVEVSTSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocC53YWl0KCksIDApCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCdraWxsJykKIAotICAgICAgICBkZWYgRElTQUJMRURfdGVzdF9raWxsKHNlbGYpOgotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICItYyIsICJpbnB1dCgpIl0pCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLnBvbGwoKSBpcyBOb25lLCBwLnBvbGwoKSkKLSAgICAgICAgICAgIHAua2lsbCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQotCi0gICAgICAgIGRlZiBESVNBQkxFRF90ZXN0X3Rlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCAiaW5wdXQoKSJdKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocC5wb2xsKCkgaXMgTm9uZSwgcC5wb2xsKCkpCi0gICAgICAgICAgICBwLnRlcm1pbmF0ZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAud2FpdCgpLCAwKQorICAgIGRlZiB0ZXN0X3Rlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgc2VsZi5fa2lsbF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCiAKLWNsYXNzIENvbW1hbmRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAjIFRoZSBtb2R1bGUgc2F5czoKICMgICAiTkIgVGhpcyBvbmx5IHdvcmtzIChhbmQgaXMgb25seSByZWxldmFudCkgZm9yIFVOSVguIgogIwogIyBBY3R1YWxseSwgZ2V0b3V0cHV0IHNob3VsZCB3b3JrIG9uIGFueSBwbGF0Zm9ybSB3aXRoIGFuIG9zLnBvcGVuLCBidXQKICMgSSdsbCB0YWtlIHRoZSBjb21tZW50IGFzIGdpdmVuLCBhbmQgc2tpcCB0aGlzIHN1aXRlLgotICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKK0B1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgIm9ubHkgcmVsZXZhbnQgZm9yIFVOSVgiKQorY2xhc3MgQ29tbWFuZFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9nZXRvdXRwdXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VicHJvY2Vzcy5nZXRvdXRwdXQoJ2VjaG8geHl6enknKSwgJ3h5enp5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnZWNobyB4eXp6eScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgwLCAneHl6enknKSkKIAotICAgICAgICBkZWYgdGVzdF9nZXRvdXRwdXQoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MuZ2V0b3V0cHV0KCdlY2hvIHh5enp5JyksICd4eXp6eScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdlY2hvIHh5enp5JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCAneHl6enknKSkKKyAgICAgICAgIyB3ZSB1c2UgbWtkdGVtcCBpbiB0aGUgbmV4dCBsaW5lIHRvIGNyZWF0ZSBhbiBlbXB0eSBkaXJlY3RvcnkKKyAgICAgICAgIyB1bmRlciBvdXIgZXhjbHVzaXZlIGNvbnRyb2w7IGZyb20gdGhhdCwgd2UgY2FuIGludmVudCBhIHBhdGhuYW1lCisgICAgICAgICMgdGhhdCB3ZSBfa25vd18gd29uJ3QgZXhpc3QuICBUaGlzIGlzIGd1YXJhbnRlZWQgdG8gZmFpbC4KKyAgICAgICAgZGlyID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCAiZm9vIikKIAotICAgICAgICAgICAgIyB3ZSB1c2UgbWtkdGVtcCBpbiB0aGUgbmV4dCBsaW5lIHRvIGNyZWF0ZSBhbiBlbXB0eSBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgdW5kZXIgb3VyIGV4Y2x1c2l2ZSBjb250cm9sOyBmcm9tIHRoYXQsIHdlIGNhbiBpbnZlbnQgYSBwYXRobmFtZQotICAgICAgICAgICAgIyB0aGF0IHdlIF9rbm93XyB3b24ndCBleGlzdC4gIFRoaXMgaXMgZ3VhcmFudGVlZCB0byBmYWlsLgotICAgICAgICAgICAgZGlyID0gTm9uZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQotICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCAiZm9vIikKLQotICAgICAgICAgICAgICAgIHN0YXR1cywgb3V0cHV0ID0gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2NhdCAnICsgbmFtZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZGlyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisgICAgICAgICAgICBzdGF0dXMsIG91dHB1dCA9IHN1YnByb2Nlc3MuZ2V0c3RhdHVzb3V0cHV0KCdjYXQgJyArIG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRpciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotdW5pdF90ZXN0cyA9IFtQcm9jZXNzVGVzdENhc2UsIENvbW1hbmRUZXN0c10KK0B1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3VicHJvY2VzcywgJ19oYXNfcG9sbCcsIEZhbHNlKSwKKyAgICAgICAgICAgICAgICAgICAgICJwb2xsIHN5c3RlbSBjYWxsIG5vdCBzdXBwb3J0ZWQiKQorY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsKFByb2Nlc3NUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IEZhbHNlCisgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCi1pZiBtc3dpbmRvd3M6Ci0gICAgY2xhc3MgQ29tbWFuZHNXaXRoU3BhY2VzIChCYXNlVGVzdENhc2UpOgotCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIHN1cGVyKCkuc2V0VXAoKQotICAgICAgICAgICAgZiwgZm5hbWUgPSBzZWxmLm1rc3RlbXAoIi5weSIsICJ0ZSBzdCIpCi0gICAgICAgICAgICBzZWxmLmZuYW1lID0gZm5hbWUubG93ZXIgKCkKLSAgICAgICAgICAgIG9zLndyaXRlKGYsIGIiaW1wb3J0IHN5czsiCi0gICAgICAgICAgICAgICAgICAgICAgICBiInN5cy5zdGRvdXQud3JpdGUoJyVkICVzJyAlIChsZW4oc3lzLmFyZ3YpLCBbYS5sb3dlciAoKSBmb3IgYSBpbiBzeXMuYXJndl0pKSIKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgIG9zLmNsb3NlKGYpCi0KLSAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZm5hbWUpCi0gICAgICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQotICAgICAgICBkZWYgd2l0aF9zcGFjZXMoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIGt3YXJnc1snc3Rkb3V0J10gPSBzdWJwcm9jZXNzLlBJUEUKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAgIHAuc3Rkb3V0LnJlYWQgKCkuZGVjb2RlKCJtYmNzIiksCi0gICAgICAgICAgICAgICIyIFslciwgJ2FiIGNkJ10iICUgc2VsZi5mbmFtZQotICAgICAgICAgICAgKQotCi0gICAgICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZ193aXRoX3NwYWNlcyhzZWxmKToKLSAgICAgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgIHNlbGYud2l0aF9zcGFjZXMoJyIlcyIgIiVzIiAiJXMiJyAlIChzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYiBjZCIpLCBzaGVsbD0xKQotCi0gICAgICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlX3dpdGhfc3BhY2VzKHNlbGYpOgotICAgICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCi0gICAgICAgICAgICBzZWxmLndpdGhfc3BhY2VzKFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwgImFiIGNkIl0sIHNoZWxsPTEpCi0KLSAgICAgICAgZGVmIHRlc3Rfbm9zaGVsbF9zdHJpbmdfd2l0aF9zcGFjZXMoc2VsZik6Ci0gICAgICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHN0cmluZyBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCi0gICAgICAgICAgICBzZWxmLndpdGhfc3BhY2VzKCciJXMiICIlcyIgIiVzIicgJSAoc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWIgY2QiKSkKLQotICAgICAgICBkZWYgdGVzdF9ub3NoZWxsX3NlcXVlbmNlX3dpdGhfc3BhY2VzKHNlbGYpOgotICAgICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzZXF1ZW5jZSBhcmd1bWVudCB3aXRoIHNwYWNlcyBvbiBXaW5kb3dzCi0gICAgICAgICAgICBzZWxmLndpdGhfc3BhY2VzKFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwgImFiIGNkIl0pCi0KLSAgICB1bml0X3Rlc3RzLmFwcGVuZChDb21tYW5kc1dpdGhTcGFjZXMpCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgUHJvY2Vzc1Rlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKIAotaWYgZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpOgotICAgIGNsYXNzIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbChQcm9jZXNzVGVzdENhc2UpOgotICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IEZhbHNlCi0gICAgICAgICAgICBQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKK0B1bml0dGVzdC5za2lwVW5sZXNzKGdldGF0dHIoc3VicHJvY2VzcywgJ19wb3NpeHN1YnByb2Nlc3MnLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAiX3Bvc2l4c3VicHJvY2VzcyBleHRlbnNpb24gbW9kdWxlIG5vdCBmb3VuZC4iKQorY2xhc3MgUHJvY2Vzc1Rlc3RDYXNlUE9TSVhQdXJlUHl0aG9uKFByb2Nlc3NUZXN0Q2FzZSwgUE9TSVhQcm9jZXNzVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzID0gTm9uZQorICAgICAgICBQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgUE9TSVhQcm9jZXNzVGVzdENhc2Uuc2V0VXAoc2VsZikKIAotICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKLSAgICAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQotCi0gICAgdW5pdF90ZXN0cy5hcHBlbmQoUHJvY2Vzc1Rlc3RDYXNlTm9Qb2xsKQorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3VicHJvY2Vzcy5fcG9zaXhzdWJwcm9jZXNzID0gc3lzLm1vZHVsZXNbJ19wb3NpeHN1YnByb2Nlc3MnXQorICAgICAgICBQT1NJWFByb2Nlc3NUZXN0Q2FzZS50ZWFyRG93bihzZWxmKQorICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKIAogCiBjbGFzcyBIZWxwZXJGdW5jdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTExMDEsMTEgKzE0MjgsMTA0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5fZWludHJfcmV0cnlfY2FsbChmYWtlX29zX2Z1bmMsIDY2NikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygyNTYsIDk5OSksICg2NjYsKSwgKDY2NiwpXSwgcmVjb3JkX2NhbGxzKQogCi11bml0X3Rlc3RzLmFwcGVuZChIZWxwZXJGdW5jdGlvblRlc3RzKQorCitAdW5pdHRlc3Quc2tpcFVubGVzcyhtc3dpbmRvd3MsICJXaW5kb3dzLXNwZWNpZmljIHRlc3RzIikKK2NsYXNzIENvbW1hbmRzV2l0aFNwYWNlcyAoQmFzZVRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIGYsIGZuYW1lID0gbWtzdGVtcCgiLnB5IiwgInRlIHN0IikKKyAgICAgICAgc2VsZi5mbmFtZSA9IGZuYW1lLmxvd2VyICgpCisgICAgICAgIG9zLndyaXRlKGYsIGIiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgIGIic3lzLnN0ZG91dC53cml0ZSgnJWQgJXMnICUgKGxlbihzeXMuYXJndiksIFthLmxvd2VyICgpIGZvciBhIGluIHN5cy5hcmd2XSkpIgorICAgICAgICApCisgICAgICAgIG9zLmNsb3NlKGYpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLnJlbW92ZShzZWxmLmZuYW1lKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB3aXRoX3NwYWNlcyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBrd2FyZ3NbJ3N0ZG91dCddID0gc3VicHJvY2Vzcy5QSVBFCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgIHAuc3Rkb3V0LnJlYWQgKCkuZGVjb2RlKCJtYmNzIiksCisgICAgICAgICAgIjIgWyVyLCAnYWIgY2QnXSIgJSBzZWxmLmZuYW1lCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NoZWxsX3N0cmluZ193aXRoX3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKCciJXMiICIlcyIgIiVzIicgJSAoc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWIgY2QiKSwgc2hlbGw9MSkKKworICAgIGRlZiB0ZXN0X3NoZWxsX3NlcXVlbmNlX3dpdGhfc3BhY2VzKHNlbGYpOgorICAgICAgICAjIGNhbGwoKSBmdW5jdGlvbiB3aXRoIHNlcXVlbmNlIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcyhbc3lzLmV4ZWN1dGFibGUsIHNlbGYuZm5hbWUsICJhYiBjZCJdLCBzaGVsbD0xKQorCisgICAgZGVmIHRlc3Rfbm9zaGVsbF9zdHJpbmdfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc3RyaW5nIGFyZ3VtZW50IHdpdGggc3BhY2VzIG9uIFdpbmRvd3MKKyAgICAgICAgc2VsZi53aXRoX3NwYWNlcygnIiVzIiAiJXMiICIlcyInICUgKHN5cy5leGVjdXRhYmxlLCBzZWxmLmZuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWIgY2QiKSkKKworICAgIGRlZiB0ZXN0X25vc2hlbGxfc2VxdWVuY2Vfd2l0aF9zcGFjZXMoc2VsZik6CisgICAgICAgICMgY2FsbCgpIGZ1bmN0aW9uIHdpdGggc2VxdWVuY2UgYXJndW1lbnQgd2l0aCBzcGFjZXMgb24gV2luZG93cworICAgICAgICBzZWxmLndpdGhfc3BhY2VzKFtzeXMuZXhlY3V0YWJsZSwgc2VsZi5mbmFtZSwgImFiIGNkIl0pCisKKworY2xhc3MgQ29udGV4dE1hbmFnZXJUZXN0cyhQcm9jZXNzVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcGlwZShzZWxmKToKKyAgICAgICAgd2l0aCBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5cy5zdGRvdXQud3JpdGUoJ3N0ZG91dCcpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyJyk7Il0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy5zdGRvdXQucmVhZCgpLCBiInN0ZG91dCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFN0ZGVyckVxdWFsKHByb2Muc3RkZXJyLnJlYWQoKSwgYiJzdGRlcnIiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jLnN0ZG91dC5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jLnN0ZGVyci5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5jb2RlKHNlbGYpOgorICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuZXhpdCgxMDApIl0pIGFzIHByb2M6CisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgMTAwKQorCisgICAgZGVmIHRlc3RfY29tbXVuaWNhdGVfc3RkaW4oc2VsZik6CisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLmV4aXQoc3lzLnN0ZGluLnJlYWQoKSA9PSAnY29udGV4dCcpIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSkgYXMgcHJvYzoKKyAgICAgICAgICAgIHByb2MuY29tbXVuaWNhdGUoYiJjb250ZXh0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvYy5yZXR1cm5jb2RlLCAxKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICBpZiBjLmV4Y2VwdGlvbi5lcnJubyAhPSBlcnJuby5FTk9FTlQ6ICAjIGlnbm9yZSAibm8gc3VjaCBmaWxlIgorICAgICAgICAgICAgICAgIHJhaXNlIGMuZXhjZXB0aW9uCisKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIHVuaXRfdGVzdHMgPSAoUHJvY2Vzc1Rlc3RDYXNlLAorICAgICAgICAgICAgICAgICAgUE9TSVhQcm9jZXNzVGVzdENhc2UsCisgICAgICAgICAgICAgICAgICBXaW4zMlByb2Nlc3NUZXN0Q2FzZSwKKyAgICAgICAgICAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZVBPU0lYUHVyZVB5dGhvbiwKKyAgICAgICAgICAgICAgICAgIENvbW1hbmRUZXN0cywKKyAgICAgICAgICAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZU5vUG9sbCwKKyAgICAgICAgICAgICAgICAgIEhlbHBlckZ1bmN0aW9uVGVzdHMsCisgICAgICAgICAgICAgICAgICBDb21tYW5kc1dpdGhTcGFjZXMsCisgICAgICAgICAgICAgICAgICBDb250ZXh0TWFuYWdlclRlc3RzKQorCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnVuaXRfdGVzdHMpCiAgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQppbmRleCA5MTlmYjg0Li4wNzgwMmQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N1bmRyeS5weQpAQCAtMywxNiArMywxMyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwogCiBjbGFzcyBUZXN0VW50ZXN0ZWRNb2R1bGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9hdF9sZWFzdF9pbXBvcnRfdW50ZXN0ZWRfbW9kdWxlcyhzZWxmKToKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MocXVpZXQ9VHJ1ZSk6CiAgICAgICAgICAgICBpbXBvcnQgYmRiCiAgICAgICAgICAgICBpbXBvcnQgY2dpdGIKICAgICAgICAgICAgIGltcG9ydCBjb2RlCi0gICAgICAgICAgICBpbXBvcnQgY29tcGlsZWFsbAogCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKQEAgLTQ5LDI5ICs0NiwxOSBAQAogICAgICAgICAgICAgaW1wb3J0IGh0bWwuZW50aXRpZXMKICAgICAgICAgICAgIGltcG9ydCBpbWdoZHIKICAgICAgICAgICAgIGltcG9ydCBrZXl3b3JkCi0gICAgICAgICAgICBpbXBvcnQgbGluZWNhY2hlCiAgICAgICAgICAgICBpbXBvcnQgbWFjdXJsMnBhdGgKICAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbm50cGxpYgogICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgKLSAgICAgICAgICAgIGltcG9ydCBvcGNvZGUKICAgICAgICAgICAgIGltcG9ydCBvczJlbXhwYXRoCi0gICAgICAgICAgICBpbXBvcnQgcGRiCiAgICAgICAgICAgICBpbXBvcnQgcHN0YXRzCiAgICAgICAgICAgICBpbXBvcnQgcHlfY29tcGlsZQotICAgICAgICAgICAgaW1wb3J0IHNjaGVkCiAgICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgc3ltYm9sCiAgICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKLSAgICAgICAgICAgIGltcG9ydCB0aW1laXQKLSAgICAgICAgICAgIGltcG9ydCB0b2tlbgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCiAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgic2tpcHBpbmcgdHR5IikKLSAgICAgICAgICAgIGltcG9ydCB3ZWJicm93c2VyCi0gICAgICAgICAgICBpbXBvcnQgeG1sCiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3ltdGFibGUucHkKaW5kZXggM2U2MmQ5Ni4uN2ZiMzY4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW10YWJsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bXRhYmxlLnB5CkBAIC04Miw3ICs4Miw3IEBACiAgICAgICAgIGZ1bmMgPSBzZWxmLnNwYW0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmdldF9wYXJhbWV0ZXJzKCksICgiYSIsICJiIiwgImt3IiwgInZhciIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMuZ2V0X2xvY2FscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgiYSIsICJiIiwgImJhciIsICJnbG9iIiwgImludGVybmFsIiwgImt3IiwgInZhciIsICJ4IikpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJhIiwgImIiLCAiaW50ZXJuYWwiLCAia3ciLCAidmFyIiwgIngiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jLmdldF9nbG9iYWxzKCksICgiYmFyIiwgImdsb2IiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmludGVybmFsLmdldF9mcmVlcygpLCAoIngiLCkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3ludGF4LnB5IGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKaW5kZXggN2ZhYWI5MS4uNTkyNmI2OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkKQEAgLTQ4MCwyNCArNDgwLDQyIEBACiAgICAuLi4KIFN5bnRheEVycm9yOiBrZXl3b3JkIGFyZ3VtZW50IHJlcGVhdGVkCiAKKz4+PiBkZWwgKCkKK1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKK1N5bnRheEVycm9yOiBjYW4ndCBkZWxldGUgKCkKKworPj4+IHsxLCAyLCAzfSA9IDQyCitUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CitTeW50YXhFcnJvcjogY2FuJ3QgYXNzaWduIHRvIGxpdGVyYWwKKwogQ29ybmVyLWNhc2VzIHRoYXQgdXNlZCB0byBmYWlsIHRvIHJhaXNlIHRoZSBjb3JyZWN0IGVycm9yOgogCi0gICAgPj4+IGRlZiBmKCosIHg9bGFtYmRhICo6MCk6IHBhc3MKKyAgICA+Pj4gZGVmIGYoKiwgeD1sYW1iZGEgX19kZWJ1Z19fOjApOiBwYXNzCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgIFN5bnRheEVycm9yOiBuYW1lZCBhcmd1bWVudHMgbXVzdCBmb2xsb3cgYmFyZSAqCisgICAgU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAogCi0gICAgPj4+IGRlZiBmKCphcmdzOihsYW1iZGEgKjowKSk6IHBhc3MKKyAgICA+Pj4gZGVmIGYoKmFyZ3M6KGxhbWJkYSBfX2RlYnVnX186MCkpOiBwYXNzCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgIFN5bnRheEVycm9yOiBuYW1lZCBhcmd1bWVudHMgbXVzdCBmb2xsb3cgYmFyZSAqCisgICAgU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAogCi0gICAgPj4+IGRlZiBmKCoqa3dhcmdzOihsYW1iZGEgKjowKSk6IHBhc3MKKyAgICA+Pj4gZGVmIGYoKiprd2FyZ3M6KGxhbWJkYSBfX2RlYnVnX186MCkpOiBwYXNzCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgIFN5bnRheEVycm9yOiBuYW1lZCBhcmd1bWVudHMgbXVzdCBmb2xsb3cgYmFyZSAqCisgICAgU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAogCiAgICAgPj4+IHdpdGggKGxhbWJkYSAqOjApOiBwYXNzCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgIFN5bnRheEVycm9yOiBuYW1lZCBhcmd1bWVudHMgbXVzdCBmb2xsb3cgYmFyZSAqCiAKK0Nvcm5lci1jYXNlcyB0aGF0IHVzZWQgdG8gY3Jhc2g6CisKKyAgICA+Pj4gZGVmIGYoKipfX2RlYnVnX18pOiBwYXNzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKKworICAgID4+PiBkZWYgZigqeHgsIF9fZGVidWdfXyk6IHBhc3MKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorCiAiIiIKIAogaW1wb3J0IHJlCkBAIC01MzYsMTMgKzU1NCwxMyBAQAogICAgIGRlZiB0ZXN0X2dsb2JhbF9lcnJfdGhlbl93YXJuKHNlbGYpOgogICAgICAgICAjIEJ1ZyB0aWNrbGVyOiAgVGhlIFN5bnRheEVycm9yIHJhaXNlZCBmb3Igb25lIGdsb2JhbCBzdGF0ZW1lbnQKICAgICAgICAgIyBzaG91bGRuJ3QgYmUgY2xvYmJlcmVkIGJ5IGEgU3ludGF4V2FybmluZyBpc3N1ZWQgZm9yIGEgbGF0ZXIgb25lLgotICAgICAgICBzb3VyY2UgPSByZS5zdWIoJyg/bSleICo6JywgJycsICIiIlwKLSAgICAgICAgICAgIDpkZWYgZXJyb3IoYSk6Ci0gICAgICAgICAgICA6ICAgIGdsb2JhbCBhICAjIFN5bnRheEVycm9yCi0gICAgICAgICAgICA6ZGVmIHdhcm5pbmcoKToKLSAgICAgICAgICAgIDogICAgYiA9IDEKLSAgICAgICAgICAgIDogICAgZ2xvYmFsIGIgICMgU3ludGF4V2FybmluZwotICAgICAgICAgICAgOiIiIikKKyAgICAgICAgc291cmNlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGRlZiBlcnJvcihhKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgYSAgIyBTeW50YXhFcnJvcgorICAgICAgICAgICAgZGVmIHdhcm5pbmcoKToKKyAgICAgICAgICAgICAgICBiID0gMQorICAgICAgICAgICAgICAgIGdsb2JhbCBiICAjIFN5bnRheFdhcm5pbmcKKyAgICAgICAgICAgICIiIgogICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncyhhY3Rpb249J2lnbm9yZScsIGNhdGVnb3J5PVN5bnRheFdhcm5pbmcpCiAgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKHNvdXJjZSwgImdsb2JhbCIpCiAgICAgICAgIHdhcm5pbmdzLmZpbHRlcnMucG9wKDApCkBAIC01NTAsMTUgKzU2OCw2IEBACiAgICAgZGVmIHRlc3RfYnJlYWtfb3V0c2lkZV9sb29wKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja19lcnJvcigiYnJlYWsiLCAib3V0c2lkZSBsb29wIikKIAotICAgIGRlZiB0ZXN0X2RlbGV0ZV9kZXJlZihzZWxmKToKLSAgICAgICAgc291cmNlID0gcmUuc3ViKCcoP20pXiAqOicsICcnLCAiIiJcCi0gICAgICAgICAgICA6ZGVmIGZvbyh4KToKLSAgICAgICAgICAgIDogIGRlZiBiYXIoKToKLSAgICAgICAgICAgIDogICAgcHJpbnQoeCkKLSAgICAgICAgICAgIDogIGRlbCB4Ci0gICAgICAgICAgICA6IiIiKQotICAgICAgICBzZWxmLl9jaGVja19lcnJvcihzb3VyY2UsICJuZXN0ZWQgc2NvcGUiKQotCiAgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9pbmRlbnQoc2VsZik6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Vycm9yKCJmb28oKVxuIGJhcigpXG4iLCAidW5leHBlY3RlZCBpbmRlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcz1JbmRlbnRhdGlvbkVycm9yKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCAxMTY4NWE0Li5kYjI3Y2RmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtMSwxNCArMSwyMCBAQAotIyAtKi0gY29kaW5nOiBpc28tODg1OS0xIC0qLQogaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnN1cHBvcnQKIGltcG9ydCBzeXMsIGlvLCBvcwogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgb3BlcmF0b3IKK2ltcG9ydCBjb2RlY3MKIAogIyBjb3VudCB0aGUgbnVtYmVyIG9mIHRlc3QgcnVucywgdXNlZCB0byBjcmVhdGUgdW5pcXVlCiAjIHN0cmluZ3MgdG8gaW50ZXJuIGluIHRlc3RfaW50ZXJuKCkKIG51bXJ1bnMgPSAwCiAKK3RyeToKKyAgICBpbXBvcnQgdGhyZWFkaW5nCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdGhyZWFkaW5nID0gTm9uZQogCiBjbGFzcyBTeXNNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjEsNiArMjcsNyBAQAogICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5vcmlnX3N0ZG91dAogICAgICAgICBzeXMuc3RkZXJyID0gc2VsZi5vcmlnX3N0ZGVycgogICAgICAgICBzeXMuZGlzcGxheWhvb2sgPSBzZWxmLm9yaWdfZGlzcGxheWhvb2sKKyAgICAgICAgdGVzdC5zdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQogCiAgICAgZGVmIHRlc3Rfb3JpZ2luYWxfZGlzcGxheWhvb2soc2VsZik6CiAgICAgICAgIGltcG9ydCBidWlsdGlucwpAQCAtMTM4LDkgKzE0NSw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmFpc2UgU3lzdGVtRXhpdCg0NykiXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgNDcpCiAKLSAgICAgICAgZGVmIGNoZWNrX2V4aXRfbWVzc2FnZShjb2RlLCBleHBlY3RlZCk6CisgICAgICAgIGRlZiBjaGVja19leGl0X21lc3NhZ2UoY29kZSwgZXhwZWN0ZWQsIGVudj1Ob25lKToKICAgICAgICAgICAgIHByb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2Nlc3MucmV0dXJuY29kZSwgMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGRlcnIuc3RhcnRzd2l0aChleHBlY3RlZCksCkBAIC0xNTgsMjAgKzE2NSw0NiBAQAogICAgICAgICAgICAgcidpbXBvcnQgc3lzOyBzeXMuZXhpdCgic3Vycm9nYXRlczpcdURDRkYiKScsCiAgICAgICAgICAgICBiInN1cnJvZ2F0ZXM6XFx1ZGNmZiIpCiAKKyAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHVuaWNvZGUgbWVzc2FnZSBpcyBlbmNvZGVkIHRvIHRoZSBzdGRlcnIgZW5jb2RpbmcKKyAgICAgICAgIyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGVuY29kaW5nICh1dGY4KQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTklPRU5DT0RJTkcnXSA9ICdsYXRpbi0xJworICAgICAgICBjaGVja19leGl0X21lc3NhZ2UoCisgICAgICAgICAgICByJ2ltcG9ydCBzeXM7IHN5cy5leGl0KCJoXHhlOSIpJywKKyAgICAgICAgICAgIGIiaFx4ZTkiLCBlbnY9ZW52KQorCiAgICAgZGVmIHRlc3RfZ2V0ZGVmYXVsdGVuY29kaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcsIDQyKQogICAgICAgICAjIGNhbid0IGNoZWNrIG1vcmUgdGhhbiB0aGUgdHlwZSwgYXMgdGhlIHVzZXIgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5nZXRkZWZhdWx0ZW5jb2RpbmcoKSwgc3RyKQogCiAgICAgIyB0ZXN0aW5nIHN5cy5zZXR0cmFjZSgpIGlzIGRvbmUgaW4gdGVzdF9zeXNfc2V0dHJhY2UucHkKICAgICAjIHRlc3Rpbmcgc3lzLnNldHByb2ZpbGUoKSBpcyBkb25lIGluIHRlc3Rfc3lzX3NldHByb2ZpbGUucHkKIAogICAgIGRlZiB0ZXN0X3NldGNoZWNraW50ZXJ2YWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLnNldGNoZWNraW50ZXJ2YWwpCi0gICAgICAgIG9yaWcgPSBzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpCi0gICAgICAgIGZvciBuIGluIDAsIDEwMCwgMTIwLCBvcmlnOiAjIG9yaWcgbGFzdCB0byByZXN0b3JlIHN0YXJ0aW5nIHN0YXRlCi0gICAgICAgICAgICBzeXMuc2V0Y2hlY2tpbnRlcnZhbChuKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0Y2hlY2tpbnRlcnZhbCgpLCBuKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXRjaGVja2ludGVydmFsKQorICAgICAgICAgICAgb3JpZyA9IHN5cy5nZXRjaGVja2ludGVydmFsKCkKKyAgICAgICAgICAgIGZvciBuIGluIDAsIDEwMCwgMTIwLCBvcmlnOiAjIG9yaWcgbGFzdCB0byByZXN0b3JlIHN0YXJ0aW5nIHN0YXRlCisgICAgICAgICAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwobikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRjaGVja2ludGVydmFsKCksIG4pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0X3N3aXRjaGludGVydmFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwsICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3lzLnNldHN3aXRjaGludGVydmFsLCAtMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwsIDAuMCkKKyAgICAgICAgb3JpZyA9IHN5cy5nZXRzd2l0Y2hpbnRlcnZhbCgpCisgICAgICAgICMgc2FuaXR5IGNoZWNrCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcmlnIDwgMC41LCBvcmlnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbiBpbiAwLjAwMDAxLCAwLjA1LCAzLjAsIG9yaWc6CisgICAgICAgICAgICAgICAgc3lzLnNldHN3aXRjaGludGVydmFsKG4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKSwgbikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbChvcmlnKQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaW9ubGltaXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHJlY3Vyc2lvbmxpbWl0LCA0MikKQEAgLTE4Miw2ICsyMTUsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWN1cnNpb25saW1pdCgpLCAxMDAwMCkKICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KG9sZGxpbWl0KQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ2ZhdGFsIGVycm9yIGlmIHJ1biB3aXRoIGEgdHJhY2UgZnVuY3Rpb24nKQogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbmxpbWl0X3JlY292ZXJ5KHNlbGYpOgogICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBpcyBzbGlnaHRseSBmcmFnaWxlIGluIHRoYXQgaXQgZGVwZW5kcyBvbiB0aGUgY3VycmVudAogICAgICAgICAjIHJlY3Vyc2lvbiBjb3VudCB3aGVuIGV4ZWN1dGluZyB0aGUgdGVzdCBiZWluZyBsb3cgZW5vdWdoIHNvIGFzIHRvCkBAIC0yMjYsMTUgKzI2MSwzNCBAQAogICAgICAgICAgICAgICAgIGVycikKIAogICAgIGRlZiB0ZXN0X2dldHdpbmRvd3N2ZXJzaW9uKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIik6Ci0gICAgICAgICAgICB2ID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHYsIHR1cGxlKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCA1KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodlswXSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZbMV0sIGludCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2WzJdLCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodlszXSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZbNF0sIHN0cikpCisgICAgICAgICMgUmFpc2UgU2tpcFRlc3QgaWYgc3lzIGRvZXNuJ3QgaGF2ZSBnZXR3aW5kb3dzdmVyc2lvbiBhdHRyaWJ1dGUKKyAgICAgICAgdGVzdC5zdXBwb3J0LmdldF9hdHRyaWJ1dGUoc3lzLCAiZ2V0d2luZG93c3ZlcnNpb24iKQorICAgICAgICB2ID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odiksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzBdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzJdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzNdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2WzRdLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0sIHYsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2Lm1pbm9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LmJ1aWxkLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnBsYXRmb3JtLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnNlcnZpY2VfcGFjaywgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodi5zZXJ2aWNlX3BhY2tfbWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYuc2VydmljZV9wYWNrX21ham9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LnN1aXRlX21hc2ssIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHYucHJvZHVjdF90eXBlLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlswXSwgdi5tYWpvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzFdLCB2Lm1pbm9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbMl0sIHYuYnVpbGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodlszXSwgdi5wbGF0Zm9ybSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzRdLCB2LnNlcnZpY2VfcGFjaykKKworICAgICAgICAjIFRoaXMgaXMgaG93IHBsYXRmb3JtLnB5IGNhbGxzIGl0LiBNYWtlIHN1cmUgdHVwbGUKKyAgICAgICAgIyAgc3RpbGwgaGFzIDUgZWxlbWVudHMKKyAgICAgICAgbWFqLCBtaW4sIGJ1aWxkbm8sIHBsYXQsIGNzZCA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpCiAKICAgICBkZWYgdGVzdF9jYWxsX3RyYWNpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmNhbGxfdHJhY2luZywgdHlwZSwgMikKQEAgLTI2Miw3ICszMTYsNyBAQAogICAgICAgICBkZWwgbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWZjb3VudChOb25lKSwgYykKICAgICAgICAgaWYgaGFzYXR0cihzeXMsICJnZXR0b3RhbHJlZmNvdW50Iik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMuZ2V0dG90YWxyZWZjb3VudCgpLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5nZXR0b3RhbHJlZmNvdW50KCksIGludCkKIAogICAgIGRlZiB0ZXN0X2dldGZyYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN5cy5fZ2V0ZnJhbWUsIDQyLCA0MikKQEAgLTI4Niw2ICszNDAsNyBAQAogICAgICAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lc193aXRob3V0X3RocmVhZHMoKQogCiAgICAgIyBUZXN0IHN5cy5fY3VycmVudF9mcmFtZXMoKSBpbiBhIFdJVEhfVEhSRUFEUyBidWlsZC4KKyAgICBAdGVzdC5zdXBwb3J0LnJlYXBfdGhyZWFkcwogICAgIGRlZiBjdXJyZW50X2ZyYW1lc193aXRoX3RocmVhZHMoc2VsZik6CiAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcsIF90aHJlYWQKICAgICAgICAgaW1wb3J0IHRyYWNlYmFjawpAQCAtMzE4LDggKzM3Myw4IEBACiAgICAgICAgIGQgPSBzeXMuX2N1cnJlbnRfZnJhbWVzKCkKIAogICAgICAgICBtYWluX2lkID0gX3RocmVhZC5nZXRfaWRlbnQoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobWFpbl9pZCBpbiBkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGhyZWFkX2lkIGluIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWFpbl9pZCwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0aHJlYWRfaWQsIGQpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgY2FwdHVyZWQgbWFpbi10aHJlYWQgZnJhbWUgaXMgX3RoaXNfIGZyYW1lLgogICAgICAgICBmcmFtZSA9IGQucG9wKG1haW5faWQpCkBAIC0zNDEsNyArMzk2LDcgQEAKICAgICAgICAgIyBBbmQgdGhlIG5leHQgcmVjb3JkIG11c3QgYmUgZm9yIGc0NTYoKS4KICAgICAgICAgZmlsZW5hbWUsIGxpbmVubywgZnVuY25hbWUsIHNvdXJjZWxpbmUgPSBzdGFja1tpKzFdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY25hbWUsICJnNDU2IikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvdXJjZWxpbmUgaW4gWyJsZWF2ZV9nLndhaXQoKSIsICJlbnRlcmVkX2cuc2V0KCkiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzb3VyY2VsaW5lLCBbImxlYXZlX2cud2FpdCgpIiwgImVudGVyZWRfZy5zZXQoKSJdKQogCiAgICAgICAgICMgUmVhcCB0aGUgc3Bhd25lZCB0aHJlYWQuCiAgICAgICAgIGxlYXZlX2cuc2V0KCkKQEAgLTM1MywxNyArNDA4LDE3IEBACiAgICAgICAgICMgInRocmVhZCBpZCIgMC4KICAgICAgICAgZCA9IHN5cy5fY3VycmVudF9mcmFtZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgaW4gZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigwLCBkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZFswXSBpcyBzeXMuX2dldGZyYW1lKCkpCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMuYXBpX3ZlcnNpb24sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN5cy5hcmd2LCBsaXN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5ieXRlb3JkZXIgaW4gKCJsaXR0bGUiLCAiYmlnIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcywgdHVwbGUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMuY29weXJpZ2h0LCBzdHIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMuZXhlY19wcmVmaXgsIHN0cikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN5cy5leGVjdXRhYmxlLCBzdHIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmFwaV92ZXJzaW9uLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYXJndiwgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuYnl0ZW9yZGVyLCAoImxpdHRsZSIsICJiaWciKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuY29weXJpZ2h0LCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZXhlY19wcmVmaXgsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5leGVjdXRhYmxlLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbG9hdF9pbmZvKSwgMTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmZsb2F0X2luZm8ucmFkaXgsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5pbnRfaW5mbyksIDIpCkBAIC0zNzEsMzIgKzQyNiw1MiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc3lzLmludF9pbmZvLnNpemVvZl9kaWdpdCA+PSAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmludF9pbmZvLmJpdHNfcGVyX2RpZ2l0KSwgaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmludF9pbmZvLnNpemVvZl9kaWdpdCksIGludCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3lzLmhleHZlcnNpb24sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN5cy5tYXhzaXplLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMubWF4dW5pY29kZSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3lzLnBsYXRmb3JtLCBzdHIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMucHJlZml4LCBzdHIpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzeXMudmVyc2lvbiwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLm1vZHVsdXMsIDIqKnN5cy5oYXNoX2luZm8ud2lkdGgpCisgICAgICAgICMgc3lzLmhhc2hfaW5mby5tb2R1bHVzIHNob3VsZCBiZSBhIHByaW1lOyB3ZSBkbyBhIHF1aWNrCisgICAgICAgICMgcHJvYmFibGUgcHJpbWFsaXR5IHRlc3QgKGRvZXNuJ3QgZXhjbHVkZSB0aGUgcG9zc2liaWxpdHkgb2YKKyAgICAgICAgIyBhIENhcm1pY2hhZWwgbnVtYmVyKQorICAgICAgICBmb3IgeCBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBwb3coeCwgc3lzLmhhc2hfaW5mby5tb2R1bHVzLTEsIHN5cy5oYXNoX2luZm8ubW9kdWx1cyksCisgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAic3lzLmhhc2hfaW5mby5tb2R1bHVzIHt9IGlzIGEgbm9uLXByaW1lIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHN5cy5oYXNoX2luZm8ubW9kdWx1cykKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLmluZiwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5uYW4sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW1hZywgaW50KQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMubWF4c2l6ZSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHVuaWNvZGUsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5wbGF0Zm9ybSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnByZWZpeCwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnZlcnNpb24sIHN0cikKICAgICAgICAgdmkgPSBzeXMudmVyc2lvbl9pbmZvCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZpWzpdLCB0dXBsZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVs6XSwgdHVwbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHZpKSwgNSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmlbMF0sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZpWzFdLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2aVsyXSwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZpWzNdIGluICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmlbNF0sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHZpLm1ham9yLCBpbnQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh2aS5taW5vciwgaW50KSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodmkubWljcm8sIGludCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2aS5yZWxlYXNlbGV2ZWwgaW4KLSAgICAgICAgICAgICAgICAgICAgICgiYWxwaGEiLCAiYmV0YSIsICJjYW5kaWRhdGUiLCAiZmluYWwiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uodmkuc2VyaWFsLCBpbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmlbMF0sIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpWzFdLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVsyXSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEluKHZpWzNdLCAoImFscGhhIiwgImJldGEiLCAiY2FuZGlkYXRlIiwgImZpbmFsIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aVs0XSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmkubWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZpLm1pbm9yLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aS5taWNybywgaW50KQorICAgICAgICBzZWxmLmFzc2VydEluKHZpLnJlbGVhc2VsZXZlbCwgKCJhbHBoYSIsICJiZXRhIiwgImNhbmRpZGF0ZSIsICJmaW5hbCIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uodmkuc2VyaWFsLCBpbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbMF0sIHZpLm1ham9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpWzFdLCB2aS5taW5vcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVsyXSwgdmkubWljcm8pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmlbM10sIHZpLnJlbGVhc2VsZXZlbCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2aVs0XSwgdmkuc2VyaWFsKQogICAgICAgICBzZWxmLmFzc2VydFRydWUodmkgPiAoMSwwLDApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmZsb2F0X3JlcHJfc3R5bGUsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuZmxvYXRfcmVwcl9zdHlsZSwgKCdzaG9ydCcsICdsZWdhY3knKSkKKyAgICAgICAgaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuYWJpZmxhZ3MsIHN0cikKIAogICAgIGRlZiB0ZXN0XzQzNTgxKHNlbGYpOgogICAgICAgICAjIENhbid0IHVzZSBzeXMuc3Rkb3V0LCBhcyB0aGlzIGlzIGEgU3RyaW5nSU8gb2JqZWN0IHdoZW4KQEAgLTQyMywzMCArNDk4LDEyIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuaW50ZXJuLCBTKCJhYmMiKSkKIAotICAgIGRlZiB0ZXN0X21haW5faW52YWxpZF91bmljb2RlKHNlbGYpOgotICAgICAgICBpbXBvcnQgbG9jYWxlCi0gICAgICAgIG5vbl9kZWNvZGFibGUgPSBiIlx4ZmYiCi0gICAgICAgIGVuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbm9uX2RlY29kYWJsZS5kZWNvZGUoZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclciBpcyBkZWNvZGFibGUgd2l0aCBlbmNvZGluZyAlcycKLSAgICAgICAgICAgICAgICAlIChub25fZGVjb2RhYmxlLCBlbmNvZGluZykpCi0gICAgICAgIGNvZGUgPSBiJ3ByaW50KCInICsgbm9uX2RlY29kYWJsZSArIGInIiknCi0gICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgY29kZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJVbmljb2RlRW5jb2RlRXJyb3I6IiBpbiBzdGRlcnIsCi0gICAgICAgICAgICAiJXIgbm90IGluICVzIiAlIChiIlVuaWNvZGVFbmNvZGVFcnJvcjoiLCBhc2NpaShzdGRlcnIpKSkKLQogICAgIGRlZiB0ZXN0X3N5c19mbGFncyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN5cy5mbGFncykKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwgImRpdmlzaW9uX3dhcm5pbmciLAogICAgICAgICAgICAgICAgICAiaW5zcGVjdCIsICJpbnRlcmFjdGl2ZSIsICJvcHRpbWl6ZSIsICJkb250X3dyaXRlX2J5dGVjb2RlIiwKICAgICAgICAgICAgICAgICAgIm5vX3VzZXJfc2l0ZSIsICJub19zaXRlIiwgImlnbm9yZV9lbnZpcm9ubWVudCIsICJ2ZXJib3NlIiwKLSAgICAgICAgICAgICAgICAgImJ5dGVzX3dhcm5pbmciKQorICAgICAgICAgICAgICAgICAiYnl0ZXNfd2FybmluZyIsICJxdWlldCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCkBAIC00NjUsMTMgKzUyMiwxMyBAQAogICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJjcDQyNCIKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAncHJpbnQoY2hyKDB4YTIpKSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLlBJUEUsIGVudj1lbnYpCi0gICAgICAgIG91dCA9IHAuc3Rkb3V0LnJlYWQoKQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgIlx4YTJcbiIuZW5jb2RlKCJjcDQyNCIpKQogCiAgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpOnJlcGxhY2UiCiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQotICAgICAgICBvdXQgPSBwLnN0ZG91dC5yZWFkKCkuc3RyaXAoKQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYic/JykKIAogICAgIGRlZiB0ZXN0X2V4ZWN1dGFibGUoc2VsZik6CkBAIC00OTEsNiArNTQ4LDIyIEBACiAgICAgICAgIHAud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhlY3V0YWJsZSwgWyJiJyciLCByZXByKHN5cy5leGVjdXRhYmxlLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpKV0pCiAKKyAgICBkZWYgY2hlY2tfZnNlbmNvZGluZyhzZWxmLCBmc19lbmNvZGluZywgZXhwZWN0ZWQ9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKGZzX2VuY29kaW5nKQorICAgICAgICBjb2RlY3MubG9va3VwKGZzX2VuY29kaW5nKQorICAgICAgICBpZiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnNfZW5jb2RpbmcsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKHNlbGYpOgorICAgICAgICBmc19lbmNvZGluZyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgICAgICBleHBlY3RlZCA9ICd1dGYtOCcKKyAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gJ21iY3MnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHBlY3RlZCA9IE5vbmUKKyAgICAgICAgc2VsZi5jaGVja19mc2VuY29kaW5nKGZzX2VuY29kaW5nLCBleHBlY3RlZCkKKwogCiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNDk4LDcgKzU3MSw3IEBACiAgICAgVFBGTEFHU19IRUFQVFlQRSA9IDE8PDkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5jID0gbGVuKHN0cnVjdC5wYWNrKCdjJywgJyAnKSkKKyAgICAgICAgc2VsZi5jID0gbGVuKHN0cnVjdC5wYWNrKCdjJywgYicgJykpCiAgICAgICAgIHNlbGYuSCA9IGxlbihzdHJ1Y3QucGFjaygnSCcsIDApKQogICAgICAgICBzZWxmLmkgPSBsZW4oc3RydWN0LnBhY2soJ2knLCAwKSkKICAgICAgICAgc2VsZi5sID0gbGVuKHN0cnVjdC5wYWNrKCdsJywgMCkpCkBAIC01ODMsNyArNjU2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBpbm5lcgogICAgICAgICBjaGVjayhnZXRfY2VsbCgpLl9fY2xvc3VyZV9fWzBdLCBzaXplKGggKyAnUCcpKQogICAgICAgICAjIGNvZGUKLSAgICAgICAgY2hlY2soZ2V0X2NlbGwoKS5fX2NvZGVfXywgc2l6ZShoICsgJzVpOFBpMlAnKSkKKyAgICAgICAgY2hlY2soZ2V0X2NlbGwoKS5fX2NvZGVfXywgc2l6ZShoICsgJzVpOFBpM1AnKSkKICAgICAgICAgIyBjb21wbGV4CiAgICAgICAgIGNoZWNrKGNvbXBsZXgoMCwxKSwgc2l6ZShoICsgJzJkJykpCiAgICAgICAgICMgbWV0aG9kX2Rlc2NyaXB0b3IgKGRlc2NyaXB0b3Igb2JqZWN0KQpAQCAtNjg4LDcgKzc2MSw3IEBACiAgICAgICAgIGNoZWNrKGludChQeUxvbmdfQkFTRSoqMi0xKSwgc2l6ZSh2aCkgKyAyKnNlbGYubG9uZ2RpZ2l0KQogICAgICAgICBjaGVjayhpbnQoUHlMb25nX0JBU0UqKjIpLCBzaXplKHZoKSArIDMqc2VsZi5sb25nZGlnaXQpCiAgICAgICAgICMgbWVtb3J5Ci0gICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYicnKSwgc2l6ZShoICsgJ1AgUFAyUDJpN1AnKSkKKyAgICAgICAgY2hlY2sobWVtb3J5dmlldyhiJycpLCBzaXplKGggKyAnUFAyUDJpN1AnKSkKICAgICAgICAgIyBtb2R1bGUKICAgICAgICAgY2hlY2sodW5pdHRlc3QsIHNpemUoaCArICczUCcpKQogICAgICAgICAjIE5vbmUKQEAgLTcxMSw4ICs3ODQsOCBAQAogICAgICAgICAjIHJldmVyc2UKICAgICAgICAgY2hlY2socmV2ZXJzZWQoJycpLCBzaXplKGggKyAnUFAnKSkKICAgICAgICAgIyByYW5nZQotICAgICAgICBjaGVjayhyYW5nZSgxKSwgc2l6ZShoICsgJzNQJykpCi0gICAgICAgIGNoZWNrKHJhbmdlKDY2MDAwKSwgc2l6ZShoICsgJzNQJykpCisgICAgICAgIGNoZWNrKHJhbmdlKDEpLCBzaXplKGggKyAnNFAnKSkKKyAgICAgICAgY2hlY2socmFuZ2UoNjYwMDApLCBzaXplKGggKyAnNFAnKSkKICAgICAgICAgIyBzZXQKICAgICAgICAgIyBmcm96ZW5zZXQKICAgICAgICAgUHlTZXRfTUlOU0laRSA9IDgKQEAgLTc1Niw3ICs4MjksNyBAQAogICAgICAgICAjIHdlIG5lZWQgdG8gdGVzdCBmb3IgYm90aCBzaXplcywgYmVjYXVzZSB3ZSBkb24ndCBrbm93IGlmIHRoZSBzdHJpbmcKICAgICAgICAgIyBoYXMgYmVlbiBjYWNoZWQKICAgICAgICAgZm9yIHMgaW4gc2FtcGxlczoKLSAgICAgICAgICAgIGJhc2ljc2l6ZSA9ICBzaXplKGggKyAnUFBsaVAnKSArIHVzaXplICogKGxlbihzKSArIDEpCisgICAgICAgICAgICBiYXNpY3NpemUgPSAgc2l6ZShoICsgJ1BQUGlQJykgKyB1c2l6ZSAqIChsZW4ocykgKyAxKQogICAgICAgICAgICAgY2hlY2socywgYmFzaWNzaXplKQogICAgICAgICAjIHdlYWtyZWYKICAgICAgICAgaW1wb3J0IHdlYWtyZWYKQEAgLTc5MCw0NyArODYzLDYgQEAKICAgICAgICAgIyBzeXMuZmxhZ3MKICAgICAgICAgY2hlY2soc3lzLmZsYWdzLCBzaXplKHZoKSArIHNlbGYuUCAqIGxlbihzeXMuZmxhZ3MpKQogCi0gICAgZGVmIHRlc3RfZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKHNlbGYpOgotICAgICAgICBpbXBvcnQgY29kZWNzCi0KLSAgICAgICAgZGVmIGNoZWNrX2ZzZW5jb2RpbmcoZnNfZW5jb2RpbmcpOgotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnNfZW5jb2RpbmcsICd1dGYtOCcpCi0gICAgICAgICAgICBlbGlmIGZzX2VuY29kaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBjb2RlY3MubG9va3VwKGZzX2VuY29kaW5nKQotCi0gICAgICAgIGZzX2VuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCi0gICAgICAgIGNoZWNrX2ZzZW5jb2RpbmcoZnNfZW5jb2RpbmcpCi0KLSAgICAgICAgIyBFdmVuIGluIEMgbG9jYWxlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLmVuY29kZSgnYXNjaWknKQotICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgIyBQeXRob24gZG9lc24ndCBzdGFydCB3aXRoIEFTQ0lJIGxvY2FsZSBpZiBpdHMgcGF0aCBpcyBub3QgQVNDSUksCi0gICAgICAgICAgICAjIHNlZSBpc3N1ZSAjODYxMQotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIGVudlsnTEFORyddID0gJ0MnCi0gICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKLSAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCi0gICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBwcmludChzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkpIl0sCi0gICAgICAgICAgICAgICAgZW52PWVudikKLSAgICAgICAgICAgIGZzX2VuY29kaW5nID0gb3V0cHV0LnJzdHJpcCgpLmRlY29kZSgnYXNjaWknKQotICAgICAgICAgICAgY2hlY2tfZnNlbmNvZGluZyhmc19lbmNvZGluZykKLQotICAgIGRlZiB0ZXN0X3NldGZpbGVzeXN0ZW1lbmNvZGluZyhzZWxmKToKLSAgICAgICAgb2xkID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zZXRmaWxlc3lzdGVtZW5jb2RpbmcoImlzby04ODU5LTEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCksICJpc28tODg1OS0xIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXRmaWxlc3lzdGVtZW5jb2Rpbmcob2xkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhMb29rdXBFcnJvciwgc3lzLnNldGZpbGVzeXN0ZW1lbmNvZGluZywgInh4eCIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc2V0ZmlsZXN5c3RlbWVuY29kaW5nKG9sZCkKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoU3lzTW9kdWxlVGVzdCwgU2l6ZW9mVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkzYjVmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5CkBAIC0wLDAgKzEsMjk4IEBACisiIiJUZXN0cyBmb3IgJ3NpdGUnLgorCitUZXN0cyBhc3N1bWUgdGhlIGluaXRpYWwgcGF0aHMgaW4gc3lzLnBhdGggb25jZSB0aGUgaW50ZXJwcmV0ZXIgaGFzIGJlZ3VuCitleGVjdXRpbmcgaGF2ZSBub3QgYmVlbiByZW1vdmVkLgorCisiIiIKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHNodXRpbAorZnJvbSBjb3B5IGltcG9ydCBjb3B5LCBkZWVwY29weQorCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGdldF9hdHRyaWJ1dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCwgc2tpcF91bmxlc3Nfc3ltbGluaykKKworaW1wb3J0IHN5c2NvbmZpZworZnJvbSBzeXNjb25maWcgaW1wb3J0IChnZXRfcGF0aHMsIGdldF9wbGF0Zm9ybSwgZ2V0X2NvbmZpZ192YXJzLAorICAgICAgICAgICAgICAgICAgICAgICBnZXRfcGF0aCwgZ2V0X3BhdGhfbmFtZXMsIF9JTlNUQUxMX1NDSEVNRVMsCisgICAgICAgICAgICAgICAgICAgICAgIF9nZXRfZGVmYXVsdF9zY2hlbWUsIF9leHBhbmRfdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3NjaGVtZV9uYW1lcywgZ2V0X2NvbmZpZ192YXIsIF9tYWluKQorCitjbGFzcyBUZXN0U3lzQ29uZmlnKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIiIiTWFrZSBhIGNvcHkgb2Ygc3lzLnBhdGgiIiIKKyAgICAgICAgc3VwZXIoVGVzdFN5c0NvbmZpZywgc2VsZikuc2V0VXAoKQorICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tYWtlZmlsZSA9IE5vbmUKKyAgICAgICAgIyBwYXRjaGluZyBvcy51bmFtZQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAndW5hbWUnKToKKyAgICAgICAgICAgIHNlbGYudW5hbWUgPSBvcy51bmFtZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBvcy51bmFtZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnVuYW1lID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fdW5hbWUgPSBOb25lCisgICAgICAgIG9zLnVuYW1lID0gc2VsZi5fZ2V0X3VuYW1lCisgICAgICAgICMgc2F2aW5nIHRoZSBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLm5hbWUgPSBvcy5uYW1lCisgICAgICAgIHNlbGYucGxhdGZvcm0gPSBzeXMucGxhdGZvcm0KKyAgICAgICAgc2VsZi52ZXJzaW9uID0gc3lzLnZlcnNpb24KKyAgICAgICAgc2VsZi5zZXAgPSBvcy5zZXAKKyAgICAgICAgc2VsZi5qb2luID0gb3MucGF0aC5qb2luCisgICAgICAgIHNlbGYuaXNhYnMgPSBvcy5wYXRoLmlzYWJzCisgICAgICAgIHNlbGYuc3BsaXRkcml2ZSA9IG9zLnBhdGguc3BsaXRkcml2ZQorICAgICAgICBzZWxmLl9jb25maWdfdmFycyA9IGNvcHkoc3lzY29uZmlnLl9DT05GSUdfVkFSUykKKyAgICAgICAgc2VsZi5vbGRfZW52aXJvbiA9IGRlZXBjb3B5KG9zLmVudmlyb24pCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICIiIlJlc3RvcmUgc3lzLnBhdGgiIiIKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnN5c19wYXRoCisgICAgICAgIGlmIHNlbGYubWFrZWZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5tYWtlZmlsZSkKKyAgICAgICAgc2VsZi5fY2xlYW51cF90ZXN0Zm4oKQorICAgICAgICBpZiBzZWxmLnVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb3MudW5hbWUgPSBzZWxmLnVuYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgb3MudW5hbWUKKyAgICAgICAgb3MubmFtZSA9IHNlbGYubmFtZQorICAgICAgICBzeXMucGxhdGZvcm0gPSBzZWxmLnBsYXRmb3JtCisgICAgICAgIHN5cy52ZXJzaW9uID0gc2VsZi52ZXJzaW9uCisgICAgICAgIG9zLnNlcCA9IHNlbGYuc2VwCisgICAgICAgIG9zLnBhdGguam9pbiA9IHNlbGYuam9pbgorICAgICAgICBvcy5wYXRoLmlzYWJzID0gc2VsZi5pc2FicworICAgICAgICBvcy5wYXRoLnNwbGl0ZHJpdmUgPSBzZWxmLnNwbGl0ZHJpdmUKKyAgICAgICAgc3lzY29uZmlnLl9DT05GSUdfVkFSUyA9IGNvcHkoc2VsZi5fY29uZmlnX3ZhcnMpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYub2xkX2Vudmlyb24uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG9zLmVudmlyb24uZ2V0KGtleSkgIT0gdmFsdWU6CisgICAgICAgICAgICAgICAgb3MuZW52aXJvbltrZXldID0gdmFsdWUKKworICAgICAgICBmb3Iga2V5IGluIGxpc3Qob3MuZW52aXJvbi5rZXlzKCkpOgorICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBzZWxmLm9sZF9lbnZpcm9uOgorICAgICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tleV0KKworICAgICAgICBzdXBlcihUZXN0U3lzQ29uZmlnLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgX3NldF91bmFtZShzZWxmLCB1bmFtZSk6CisgICAgICAgIHNlbGYuX3VuYW1lID0gdW5hbWUKKworICAgIGRlZiBfZ2V0X3VuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdW5hbWUKKworICAgIGRlZiBfY2xlYW51cF90ZXN0Zm4oc2VsZik6CisgICAgICAgIHBhdGggPSBURVNURk4KKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShwYXRoKQorCisgICAgZGVmIHRlc3RfZ2V0X3BhdGhfbmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BhdGhfbmFtZXMoKSwgc3lzY29uZmlnLl9TQ0hFTUVfS0VZUykKKworICAgIGRlZiB0ZXN0X2dldF9wYXRocyhzZWxmKToKKyAgICAgICAgc2NoZW1lID0gZ2V0X3BhdGhzKCkKKyAgICAgICAgZGVmYXVsdF9zY2hlbWUgPSBfZ2V0X2RlZmF1bHRfc2NoZW1lKCkKKyAgICAgICAgd2FudGVkID0gX2V4cGFuZF92YXJzKGRlZmF1bHRfc2NoZW1lLCBOb25lKQorICAgICAgICB3YW50ZWQgPSBsaXN0KHdhbnRlZC5pdGVtcygpKQorICAgICAgICB3YW50ZWQuc29ydCgpCisgICAgICAgIHNjaGVtZSA9IGxpc3Qoc2NoZW1lLml0ZW1zKCkpCisgICAgICAgIHNjaGVtZS5zb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2hlbWUsIHdhbnRlZCkKKworICAgIGRlZiB0ZXN0X2dldF9wYXRoKHNlbGYpOgorICAgICAgICAjIHh4eCBtYWtlIHJlYWwgdGVzdHMgaGVyZQorICAgICAgICBmb3Igc2NoZW1lIGluIF9JTlNUQUxMX1NDSEVNRVM6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBfSU5TVEFMTF9TQ0hFTUVTW3NjaGVtZV06CisgICAgICAgICAgICAgICAgcmVzID0gZ2V0X3BhdGgobmFtZSwgc2NoZW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgorICAgICAgICBjdmFycyA9IGdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGN2YXJzLCBkaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN2YXJzKQorCisgICAgZGVmIHRlc3RfZ2V0X3BsYXRmb3JtKHNlbGYpOgorICAgICAgICAjIHdpbmRvd3MgWFAsIDMyYml0cworICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEludGVsKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4zMicpCisKKyAgICAgICAgIyB3aW5kb3dzIFhQLCBhbWQ2NAorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEFtZDY0KV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnd2luMzInCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICd3aW4tYW1kNjQnKQorCisgICAgICAgICMgd2luZG93cyBYUCwgaXRhbml1bQorICAgICAgICBvcy5uYW1lID0gJ250JworICAgICAgICBzeXMudmVyc2lvbiA9ICgnMi40LjQgKCM3MSwgT2N0IDE4IDIwMDYsIDA4OjM0OjQzKSAnCisgICAgICAgICAgICAgICAgICAgICAgICdbTVNDIHYuMTMxMCAzMiBiaXQgKEl0YW5pdW0pXScpCisgICAgICAgIHN5cy5wbGF0Zm9ybSA9ICd3aW4zMicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ3dpbi1pYTY0JykKKworICAgICAgICAjIG1hY2Jvb2sKKyAgICAgICAgb3MubmFtZSA9ICdwb3NpeCcKKyAgICAgICAgc3lzLnZlcnNpb24gPSAoJzIuNSAocjI1OjUxOTE4LCBTZXAgMTkgMjAwNiwgMDg6NDk6MTMpICcKKyAgICAgICAgICAgICAgICAgICAgICAgJ1xuW0dDQyA0LjAuMSAoQXBwbGUgQ29tcHV0ZXIsIEluYy4gYnVpbGQgNTM0MSldJykKKyAgICAgICAgc3lzLnBsYXRmb3JtID0gJ2RhcndpbicKKyAgICAgICAgc2VsZi5fc2V0X3VuYW1lKCgnRGFyd2luJywgJ21hY3ppYWRlJywgJzguMTEuMScsCisgICAgICAgICAgICAgICAgICAgKCdEYXJ3aW4gS2VybmVsIFZlcnNpb24gOC4xMS4xOiAnCisgICAgICAgICAgICAgICAgICAgICdXZWQgT2N0IDEwIDE4OjIzOjI4IFBEVCAyMDA3OyAnCisgICAgICAgICAgICAgICAgICAgICdyb290OnhudS03OTIuMjUuMjB+MS9SRUxFQVNFX0kzODYnKSwgJ1Bvd2VyUEMnKSkKKyAgICAgICAgb3MuZW52aXJvblsnTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJ10gPSAnMTAuMycKKworICAgICAgICBnZXRfY29uZmlnX3ZhcnMoKVsnQ0ZMQUdTJ10gPSAoJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1ETkRFQlVHIC1nICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzJykKKworICAgICAgICBtYXhpbnQgPSBzeXMubWF4c2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMubWF4c2l6ZSA9IDIxNDc0ODM2NDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy1wcGMnKQorICAgICAgICAgICAgc3lzLm1heHNpemUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjMtcHBjNjQnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLm1heHNpemUgPSBtYXhpbnQKKworCisgICAgICAgIHNlbGYuX3NldF91bmFtZSgoJ0RhcndpbicsICdtYWN6aWFkZScsICc4LjExLjEnLAorICAgICAgICAgICAgICAgICAgICgnRGFyd2luIEtlcm5lbCBWZXJzaW9uIDguMTEuMTogJworICAgICAgICAgICAgICAgICAgICAnV2VkIE9jdCAxMCAxODoyMzoyOCBQRFQgMjAwNzsgJworICAgICAgICAgICAgICAgICAgICAncm9vdDp4bnUtNzkyLjI1LjIwfjEvUkVMRUFTRV9JMzg2JyksICdpMzg2JykpCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXSA9ICcxMC4zJworICAgICAgICBvcy5lbnZpcm9uWydNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnXSA9ICcxMC4zJworCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWZuby1zdHJpY3QtYWxpYXNpbmcgLUROREVCVUcgLWcgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMnKQorICAgICAgICBtYXhpbnQgPSBzeXMubWF4c2l6ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMubWF4c2l6ZSA9IDIxNDc0ODM2NDcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuMy1pMzg2JykKKyAgICAgICAgICAgIHN5cy5tYXhzaXplID0gOTIyMzM3MjAzNjg1NDc3NTgwNworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC4zLXg4Nl82NCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMubWF4c2l6ZSA9IG1heGludAorCisgICAgICAgICMgbWFjYm9vayB3aXRoIGZhdCBiaW5hcmllcyAoZmF0LCB1bml2ZXJzYWwgb3IgZmF0NjQpCisgICAgICAgIG9zLmVudmlyb25bJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjQnCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LWZhdCcpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCB4ODZfNjQgLWFyY2ggaTM4NiAtaXN5c3Jvb3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC40dS5zZGsgICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWR5bmFtaWMgLUROREVCVUcgLWcgLU8zJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtaW50ZWwnKQorCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIHBwYyAtYXJjaCBpMzg2IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9wbGF0Zm9ybSgpLCAnbWFjb3N4LTEwLjQtZmF0MycpCisKKyAgICAgICAgZ2V0X2NvbmZpZ192YXJzKClbJ0NGTEFHUyddID0gKCctYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIGkzODYgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrICAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZuby1zdHJpY3QtYWxpYXNpbmcgLWZuby1jb21tb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC11bml2ZXJzYWwnKQorCisgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggeDg2XzY0IC1hcmNoIHBwYzY0IC1pc3lzcm9vdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZHluYW1pYyAtRE5ERUJVRyAtZyAtTzMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdtYWNvc3gtMTAuNC1mYXQ2NCcpCisKKyAgICAgICAgZm9yIGFyY2ggaW4gKCdwcGMnLCAnaTM4NicsICd4ODZfNjQnLCAncHBjNjQnKToKKyAgICAgICAgICAgIGdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9ICgnLWFyY2ggJXMgLWlzeXNyb290ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayAgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZm5vLXN0cmljdC1hbGlhc2luZyAtZm5vLWNvbW1vbiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1keW5hbWljIC1ETkRFQlVHIC1nIC1PMyclKGFyY2gsKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRfcGxhdGZvcm0oKSwgJ21hY29zeC0xMC40LSVzJyUoYXJjaCwpKQorCisgICAgICAgICMgbGludXggZGViaWFuIHNhcmdlCisgICAgICAgIG9zLm5hbWUgPSAncG9zaXgnCisgICAgICAgIHN5cy52ZXJzaW9uID0gKCcyLjMuNSAoIzEsIEp1bCAgNCAyMDA3LCAxNzoyODo1OSkgJworICAgICAgICAgICAgICAgICAgICAgICAnXG5bR0NDIDQuMS4yIDIwMDYxMTE1IChwcmVyZWxlYXNlKSAoRGViaWFuIDQuMS4xLTIxKV0nKQorICAgICAgICBzeXMucGxhdGZvcm0gPSAnbGludXgyJworICAgICAgICBzZWxmLl9zZXRfdW5hbWUoKCdMaW51eCcsICdhZ2xhZScsICcyLjYuMjEuMWRlZGlib3gtcjcnLAorICAgICAgICAgICAgICAgICAgICAnIzEgTW9uIEFwciAzMCAxNzoyNTozOCBDRVNUIDIwMDcnLCAnaTY4NicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3BsYXRmb3JtKCksICdsaW51eC1pNjg2JykKKworICAgICAgICAjIFhYWCBtb3JlIHBsYXRmb3JtcyB0byB0ZXN0cyBoZXJlCisKKyAgICBkZWYgdGVzdF9nZXRfY29uZmlnX2hfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGNvbmZpZ19oID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShjb25maWdfaCksIGNvbmZpZ19oKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCisgICAgICAgICAgICAgICAgICAgICAnVGVzdCBpcyBub3QgV2luZG93cyBjb21wYXRpYmxlJykKKyAgICBkZWYgdGVzdF9nZXRfbWFrZWZpbGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIG1ha2VmaWxlID0gc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSksIG1ha2VmaWxlKQorCisgICAgZGVmIHRlc3RfZ2V0X3NjaGVtZV9uYW1lcyhzZWxmKToKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zMicsICdvczJfaG9tZScsICdvc3hfZnJhbWV3b3JrX3VzZXInLAorICAgICAgICAgICAgICAgICAgJ3Bvc2l4X2hvbWUnLCAncG9zaXhfcHJlZml4JywgJ3Bvc2l4X3VzZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9zY2hlbWVfbmFtZXMoKSwgd2FudGVkKQorCisgICAgQHNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zeW1saW5rKHNlbGYpOgorICAgICAgICAjIE9uIFdpbmRvd3MsIHRoZSBFWEUgbmVlZHMgdG8ga25vdyB3aGVyZSBweXRob25YWS5kbGwgaXMgYXQgc28gd2UgaGF2ZQorICAgICAgICAjIHRvIGFkZCB0aGUgZGlyZWN0b3J5IHRvIHRoZSBwYXRoLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIG9zLmVudmlyb25bIlBhdGgiXSA9ICJ7fTt7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksIG9zLmVudmlyb25bIlBhdGgiXSkKKworICAgICAgICAjIElzc3VlIDc4ODAKKyAgICAgICAgZGVmIGdldChweXRob24pOgorICAgICAgICAgICAgY21kID0gW3B5dGhvbiwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKSddCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIGVudj1vcy5lbnZpcm9uKQorICAgICAgICAgICAgcmV0dXJuIHAuY29tbXVuaWNhdGUoKQorICAgICAgICByZWFsID0gb3MucGF0aC5yZWFscGF0aChzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgbGluayA9IG9zLnBhdGguYWJzcGF0aChURVNURk4pCisgICAgICAgIG9zLnN5bWxpbmsocmVhbCwgbGluaykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXQocmVhbCksIGdldChsaW5rKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVubGluayhsaW5rKQorCisgICAgZGVmIHRlc3RfdXNlcl9zaW1pbGFyKHNlbGYpOgorICAgICAgICAjIElzc3VlIDg3NTkgOiBtYWtlIHN1cmUgdGhlIHBvc2l4IHNjaGVtZSBmb3IgdGhlIHVzZXJzCisgICAgICAgICMgaXMgc2ltaWxhciB0byB0aGUgZ2xvYmFsIHBvc2l4X3ByZWZpeCBvbmUKKyAgICAgICAgYmFzZSA9IGdldF9jb25maWdfdmFyKCdiYXNlJykKKyAgICAgICAgdXNlciA9IGdldF9jb25maWdfdmFyKCd1c2VyYmFzZScpCisgICAgICAgIGZvciBuYW1lIGluICgnc3RkbGliJywgJ3BsYXRzdGRsaWInLCAncHVyZWxpYicsICdwbGF0bGliJyk6CisgICAgICAgICAgICBnbG9iYWxfcGF0aCA9IGdldF9wYXRoKG5hbWUsICdwb3NpeF9wcmVmaXgnKQorICAgICAgICAgICAgdXNlcl9wYXRoID0gZ2V0X3BhdGgobmFtZSwgJ3Bvc2l4X3VzZXInKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1c2VyX3BhdGgsIGdsb2JhbF9wYXRoLnJlcGxhY2UoYmFzZSwgdXNlcikpCisKKyAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgorICAgICAgICAjIGp1c3QgbWFraW5nIHN1cmUgX21haW4oKSBydW5zIGFuZCByZXR1cm5zIHRoaW5ncyBpbiB0aGUgc3Rkb3V0CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgX21haW4oKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG91dHB1dC5nZXR2YWx1ZSgpLnNwbGl0KCdcbicpKSA+IDApCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiRG9lcyBub3QgYXBwbHkgdG8gV2luZG93cyIpCisgICAgZGVmIHRlc3RfbGRzaGFyZWRfdmFsdWUoc2VsZik6CisgICAgICAgIGxkZmxhZ3MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKQorICAgICAgICBsZHNoYXJlZCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGRmbGFncywgbGRzaGFyZWQpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0U3lzQ29uZmlnKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CmluZGV4IDAyOGRjYjQuLjRlNzYyMWU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQpAQCAtMTEsNiArMTEsOCBAQAogCiAgICAgZGVmIHRlc3Rfb3BlbmxvZyhzZWxmKToKICAgICAgICAgc3lzbG9nLm9wZW5sb2coJ3B5dGhvbicpCisgICAgICAgICMgSXNzdWUgIzY2OTcuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgc3lzbG9nLm9wZW5sb2csICdcdUQ4MDAnKQogCiAgICAgZGVmIHRlc3Rfc3lzbG9nKHNlbGYpOgogICAgICAgICBzeXNsb2cub3BlbmxvZygncHl0aG9uJykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCA2YzdkYjk1Li44MDM2YzVjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC0yLDcgKzIsNiBAQAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KIGltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IGlvCiBmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQogaW1wb3J0IGVycm5vCkBAIC0yNiw3ICsyNSw3IEBACiBkZWYgbWQ1c3VtKGRhdGEpOgogICAgIHJldHVybiBtZDUoZGF0YSkuaGV4ZGlnZXN0KCkKIAotVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikKK1RFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pICsgIi10YXJkaXIiCiB0YXJuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgidGVzdHRhci50YXIiKQogZ3ppcG5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3R0YXIudGFyLmd6IikKIGJ6Mm5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInRlc3R0YXIudGFyLmJ6MiIpCkBAIC01Myw0MSArNTIsNTAgQEAKICAgICBkZWYgdGVzdF9maWxlb2JqX3JlZ3VsYXJfZmlsZShzZWxmKToKICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCiAgICAgICAgIGZvYmogPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvKQotICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChsZW4oZGF0YSksIG1kNXN1bShkYXRhKSkgPT0gKHRhcmluZm8uc2l6ZSwgbWQ1X3JlZ3R5cGUpLAotICAgICAgICAgICAgICAgICJyZWd1bGFyIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgobGVuKGRhdGEpLCBtZDVzdW0oZGF0YSkpID09ICh0YXJpbmZvLnNpemUsIG1kNV9yZWd0eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgInJlZ3VsYXIgZmlsZSBleHRyYWN0aW9uIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb2JqLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZpbGVvYmpfcmVhZGxpbmVzKHNlbGYpOgogICAgICAgICBzZWxmLnRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCi0gICAgICAgIGZvYmoxID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSwgInIiKQotICAgICAgICBmb2JqMiA9IGlvLlRleHRJT1dyYXBwZXIoc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSwgInIiKSBhcyBmb2JqMToKKyAgICAgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCiAKLSAgICAgICAgbGluZXMxID0gZm9iajEucmVhZGxpbmVzKCkKLSAgICAgICAgbGluZXMyID0gZm9iajIucmVhZGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMSA9PSBsaW5lczIsCi0gICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihsaW5lczIpID09IDExNCwKLSAgICAgICAgICAgICAgICAiZmlsZW9iai5yZWFkbGluZXMoKSBmYWlsZWQiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMyWzgzXSA9PSBcCi0gICAgICAgICAgICAgICAgIkkgd2lsbCBnbGFkbHkgYWRtaXQgdGhhdCBQeXRob24gaXMgbm90IHRoZSBmYXN0ZXN0IHJ1bm5pbmcgc2NyaXB0aW5nIGxhbmd1YWdlLlxuIiwKLSAgICAgICAgICAgICAgICAiZmlsZW9iai5yZWFkbGluZXMoKSBmYWlsZWQiKQorICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9iajIgPSBpby5UZXh0SU9XcmFwcGVyKGZvYmopCisgICAgICAgICAgICBsaW5lczIgPSBmb2JqMi5yZWFkbGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMSA9PSBsaW5lczIsCisgICAgICAgICAgICAgICAgICAgICJmaWxlb2JqLnJlYWRsaW5lcygpIGZhaWxlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGxpbmVzMikgPT0gMTE0LAorICAgICAgICAgICAgICAgICAgICAiZmlsZW9iai5yZWFkbGluZXMoKSBmYWlsZWQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMls4M10gPT0KKyAgICAgICAgICAgICAgICAgICAgIkkgd2lsbCBnbGFkbHkgYWRtaXQgdGhhdCBQeXRob24gaXMgbm90IHRoZSBmYXN0ZXN0IHJ1bm5pbmcgc2NyaXB0aW5nIGxhbmd1YWdlLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgImZpbGVvYmoucmVhZGxpbmVzKCkgZmFpbGVkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmlsZW9ial9pdGVyKHNlbGYpOgogICAgICAgICBzZWxmLnRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCi0gICAgICAgIGZvYmoxID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSwgInJVIikKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpLCAiclUiKSBhcyBmb2JqMToKKyAgICAgICAgICAgIGxpbmVzMSA9IGZvYmoxLnJlYWRsaW5lcygpCiAgICAgICAgIGZvYmoyID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKLSAgICAgICAgbGluZXMxID0gZm9iajEucmVhZGxpbmVzKCkKLSAgICAgICAgbGluZXMyID0gbGlzdChpby5UZXh0SU9XcmFwcGVyKGZvYmoyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzMSA9PSBsaW5lczIsCi0gICAgICAgICAgICAgICAgICAgICAiZmlsZW9iai5fX2l0ZXJfXygpIGZhaWxlZCIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxpbmVzMiA9IGxpc3QoaW8uVGV4dElPV3JhcHBlcihmb2JqMikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXMxID09IGxpbmVzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZW9iai5fX2l0ZXJfXygpIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb2JqMi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9maWxlb2JqX3NlZWsoc2VsZik6CiAgICAgICAgIHNlbGYudGFyLmV4dHJhY3QoInVzdGFyL3JlZ3R5cGUiLCBURU1QRElSKQotICAgICAgICBmb2JqID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSwgInJiIikKLSAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCi0gICAgICAgIGZvYmouY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9yZWd0eXBlIiksICJyYiIpIGFzIGZvYmo6CisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKIAogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKICAgICAgICAgZm9iaiA9IHNlbGYudGFyLmV4dHJhY3RmaWxlKHRhcmluZm8pCkBAIC0xMzQsMzggKzE0MiwxMjAgQEAKICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgYWZ0ZXIgcmVhZGxpbmUoKSBmYWlsZWQiKQogICAgICAgICBmb2JqLmNsb3NlKCkKIAorICAgICMgVGVzdCBpZiBzeW1ib2xpYyBhbmQgaGFyZCBsaW5rcyBhcmUgcmVzb2x2ZWQgYnkgZXh0cmFjdGZpbGUoKS4gIFRoZQorICAgICMgdGVzdCBsaW5rIG1lbWJlcnMgZWFjaCBwb2ludCB0byBhIHJlZ3VsYXIgbWVtYmVyIHdob3NlIGRhdGEgaXMKKyAgICAjIHN1cHBvc2VkIHRvIGJlIGV4cG9ydGVkLgorICAgIGRlZiBfdGVzdF9maWxlb2JqX2xpbmsoc2VsZiwgbG5rdHlwZSwgcmVndHlwZSk6CisgICAgICAgIGEgPSBzZWxmLnRhci5leHRyYWN0ZmlsZShsbmt0eXBlKQorICAgICAgICBiID0gc2VsZi50YXIuZXh0cmFjdGZpbGUocmVndHlwZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLm5hbWUsIGIubmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGEuY2xvc2UoKQorICAgICAgICAgICAgYi5jbG9zZSgpCiAKLWNsYXNzIE1pc2NSZWFkVGVzdChSZWFkVGVzdCk6CisgICAgZGVmIHRlc3RfZmlsZW9ial9saW5rMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9maWxlb2JqX2xpbmsoInVzdGFyL2xua3R5cGUiLCAidXN0YXIvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX2xpbmsyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygiLi91c3Rhci9saW5rdGVzdDIvbG5rdHlwZSIsICJ1c3Rhci9saW5rdGVzdDEvcmVndHlwZSIpCisKKyAgICBkZWYgdGVzdF9maWxlb2JqX3N5bWxpbmsxKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2ZpbGVvYmpfbGluaygidXN0YXIvc3ltdHlwZSIsICJ1c3Rhci9yZWd0eXBlIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmpfc3ltbGluazIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZmlsZW9ial9saW5rKCIuL3VzdGFyL2xpbmt0ZXN0Mi9zeW10eXBlIiwgInVzdGFyL2xpbmt0ZXN0MS9yZWd0eXBlIikKKworCitjbGFzcyBDb21tb25SZWFkVGVzdChSZWFkVGVzdCk6CisKKyAgICBkZWYgdGVzdF9lbXB0eV90YXJmaWxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIGlzc3VlNjEyMzogQWxsb3cgb3BlbmluZyBlbXB0eSBhcmNoaXZlcy4KKyAgICAgICAgIyBUaGlzIHRlc3QgY2hlY2tzIGlmIHRhcmZpbGUub3BlbigpIGlzIGFibGUgdG8gb3BlbiBhbiBlbXB0eSB0YXIKKyAgICAgICAgIyBhcmNoaXZlIHN1Y2Nlc3NmdWxseS4gTm90ZSB0aGF0IGFuIGVtcHR5IHRhciBhcmNoaXZlIGlzIG5vdCB0aGUKKyAgICAgICAgIyBzYW1lIGFzIGFuIGVtcHR5IGZpbGUhCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZS5yZXBsYWNlKCJyIiwgInciKSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0YXIuZ2V0bmFtZXMoKQorICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLmZhaWwoInRhcmZpbGUub3BlbigpIGZhaWxlZCBvbiBlbXB0eSBhcmNoaXZlIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKHRhci5nZXRtZW1iZXJzKCksIFtdKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X251bGxfdGFyZmlsZShzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTYxMjM6IEFsbG93IG9wZW5pbmcgZW1wdHkgYXJjaGl2ZXMuCisgICAgICAgICMgVGhpcyB0ZXN0IGd1YXJhbnRlZXMgdGhhdCB0YXJmaWxlLm9wZW4oKSBkb2VzIG5vdCB0cmVhdCBhbiBlbXB0eQorICAgICAgICAjIGZpbGUgYXMgYW4gZW1wdHkgdGFyIGFyY2hpdmUuCisgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAid2IiKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwgc2VsZi5tb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX3plcm9zKHNlbGYpOgorICAgICAgICAjIFRlc3QgVGFyRmlsZSdzIGlnbm9yZV96ZXJvcyBvcHRpb24uCisgICAgICAgIGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmd6Iik6CisgICAgICAgICAgICBfb3BlbiA9IGd6aXAuR3ppcEZpbGUKKyAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoIjpiejIiKToKKyAgICAgICAgICAgIF9vcGVuID0gYnoyLkJaMkZpbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9vcGVuID0gb3BlbgorCisgICAgICAgIGZvciBjaGFyIGluIChiJ1wwJywgYidhJyk6CisgICAgICAgICAgICAjIFRlc3QgaWYgRU9GSGVhZGVyRXJyb3IgKCdcMCcpIGFuZCBJbnZhbGlkSGVhZGVyRXJyb3IgKCdhJykKKyAgICAgICAgICAgICMgYXJlIGlnbm9yZWQgY29ycmVjdGx5LgorICAgICAgICAgICAgd2l0aCBfb3Blbih0bXBuYW1lLCAid2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoY2hhciAqIDEwMjQpCisgICAgICAgICAgICAgICAgZm9iai53cml0ZSh0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBtb2RlPSJyIiwgaWdub3JlX3plcm9zPVRydWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwodGFyLmdldG5hbWVzKCksIFsiZm9vIl0sCisgICAgICAgICAgICAgICAgICAgICJpZ25vcmVfemVyb3M9VHJ1ZSBzaG91bGQgaGF2ZSBza2lwcGVkIHRoZSAlci1ibG9ja3MiICUgY2hhcikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworCitjbGFzcyBNaXNjUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgogCiAgICAgZGVmIHRlc3Rfbm9fbmFtZV9hcmd1bWVudChzZWxmKToKLSAgICAgICAgZm9iaiA9IG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKQotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpIGFzIGZvYmo6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLm5hbWUsIG9zLnBhdGguYWJzcGF0aChmb2JqLm5hbWUpKQogCiAgICAgZGVmIHRlc3Rfbm9fbmFtZV9hdHRyaWJ1dGUoc2VsZik6Ci0gICAgICAgIGRhdGEgPSBvcGVuKHNlbGYudGFybmFtZSwgInJiIikucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpIGFzIGZvYmo6CisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKICAgICAgICAgZm9iaiA9IGlvLkJ5dGVzSU8oZGF0YSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGZvYmosICJuYW1lIikKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLm5hbWUsIE5vbmUpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9uYW1lX2F0dHJpYnV0ZShzZWxmKToKLSAgICAgICAgZGF0YSA9IG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGFybmFtZSwgInJiIikgYXMgZm9iajoKKyAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQogICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhkYXRhKQogICAgICAgICBmb2JqLm5hbWUgPSAiIgotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0X2ZpbGVvYmpfd2l0aF9vZmZzZXQoc2VsZik6CiAgICAgICAgICMgU2tpcCB0aGUgZmlyc3QgbWVtYmVyIGFuZCBzdG9yZSB2YWx1ZXMgZnJvbSB0aGUgc2Vjb25kIG1lbWJlcgogICAgICAgICAjIG9mIHRoZSB0ZXN0dGFyLgogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlPXNlbGYubW9kZSkKLSAgICAgICAgdGFyLm5leHQoKQotICAgICAgICB0ID0gdGFyLm5leHQoKQotICAgICAgICBuYW1lID0gdC5uYW1lCi0gICAgICAgIG9mZnNldCA9IHQub2Zmc2V0Ci0gICAgICAgIGRhdGEgPSB0YXIuZXh0cmFjdGZpbGUodCkucmVhZCgpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhci5uZXh0KCkKKyAgICAgICAgICAgIHQgPSB0YXIubmV4dCgpCisgICAgICAgICAgICBuYW1lID0gdC5uYW1lCisgICAgICAgICAgICBvZmZzZXQgPSB0Lm9mZnNldAorICAgICAgICAgICAgZiA9IHRhci5leHRyYWN0ZmlsZSh0KQorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgIyBPcGVuIHRoZSB0ZXN0dGFyIGFuZCBzZWVrIHRvIHRoZSBvZmZzZXQgb2YgdGhlIHNlY29uZCBtZW1iZXIuCiAgICAgICAgIGlmIHNlbGYubW9kZS5lbmRzd2l0aCgiOmd6Iik6CkBAIC0xNzUsMjYgKzI2NSwzMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgX29wZW4gPSBvcGVuCiAgICAgICAgIGZvYmogPSBfb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpCi0gICAgICAgIGZvYmouc2VlayhvZmZzZXQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvYmouc2VlayhvZmZzZXQpCiAKLSAgICAgICAgIyBUZXN0IGlmIHRoZSB0YXJmaWxlIHN0YXJ0cyB3aXRoIHRoZSBzZWNvbmQgbWVtYmVyLgotICAgICAgICB0YXIgPSB0YXIub3BlbihzZWxmLnRhcm5hbWUsIG1vZGU9InI6IiwgZmlsZW9iaj1mb2JqKQotICAgICAgICB0ID0gdGFyLm5leHQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgbmFtZSkKLSAgICAgICAgIyBSZWFkIHRvIHRoZSBlbmQgb2YgZmlsZW9iaiBhbmQgdGVzdCBpZiBzZWVraW5nIGJhY2sgdG8gdGhlCi0gICAgICAgICMgYmVnaW5uaW5nIHdvcmtzLgotICAgICAgICB0YXIuZ2V0bWVtYmVycygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmV4dHJhY3RmaWxlKHQpLnJlYWQoKSwgZGF0YSwKLSAgICAgICAgICAgICAgICAic2VlayBiYWNrIGRpZCBub3Qgd29yayIpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgICAgICAjIFRlc3QgaWYgdGhlIHRhcmZpbGUgc3RhcnRzIHdpdGggdGhlIHNlY29uZCBtZW1iZXIuCisgICAgICAgICAgICB0YXIgPSB0YXIub3BlbihzZWxmLnRhcm5hbWUsIG1vZGU9InI6IiwgZmlsZW9iaj1mb2JqKQorICAgICAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBuYW1lKQorICAgICAgICAgICAgIyBSZWFkIHRvIHRoZSBlbmQgb2YgZmlsZW9iaiBhbmQgdGVzdCBpZiBzZWVraW5nIGJhY2sgdG8gdGhlCisgICAgICAgICAgICAjIGJlZ2lubmluZyB3b3Jrcy4KKyAgICAgICAgICAgIHRhci5nZXRtZW1iZXJzKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmV4dHJhY3RmaWxlKHQpLnJlYWQoKSwgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgInNlZWsgYmFjayBkaWQgbm90IHdvcmsiKQorICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZmFpbF9jb21wKHNlbGYpOgogICAgICAgICAjIEZvciBHemlwIGFuZCBCejIgVGVzdHM6IGZhaWwgd2l0aCBhIFJlYWRFcnJvciBvbiBhbiB1bmNvbXByZXNzZWQgZmlsZS4KICAgICAgICAgaWYgc2VsZi5tb2RlID09ICJyOiI6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5SZWFkRXJyb3IsIHRhcmZpbGUub3BlbiwgdGFybmFtZSwgc2VsZi5tb2RlKQotICAgICAgICBmb2JqID0gb3Blbih0YXJuYW1lLCAicmIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQorICAgICAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQogCiAgICAgZGVmIHRlc3RfdjdfZGlydHlwZShzZWxmKToKICAgICAgICAgIyBUZXN0IG9sZCBzdHlsZSBkaXJ0eXBlIG1lbWJlciAoYnVnICMxMzM2NjIzKToKQEAgLTIyNiw2NiArMzIwLDEyMSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50YXIuZ2V0bWVtYmVycygpWy0xXS5uYW1lID09ICJtaXNjL2VvZiIsCiAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBmaW5kIGFsbCBtZW1iZXJzIikKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJsaW5rIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3NpbmcgaGFyZGxpbmsgaW1wbGVtZW50YXRpb24iKQorICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKICAgICBkZWYgdGVzdF9leHRyYWN0X2hhcmRsaW5rKHNlbGYpOgogICAgICAgICAjIFRlc3QgaGFyZGxpbmsgZXh0cmFjdGlvbiAoZS5nLiBidWcgIzg1NzI5NykuCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCBlcnJvcmxldmVsPTEsIGVuY29kaW5nPSJpc284ODU5LTEiKQogCi0gICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL2xua3R5cGUiLCBURU1QRElSKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJoYXJkbGluayBub3QgZXh0cmFjdGVkIHByb3Blcmx5IikKKyAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvbG5rdHlwZSIsIFRFTVBESVIpCisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhhcmRsaW5rIG5vdCBleHRyYWN0ZWQgcHJvcGVybHkiKQogCi0gICAgICAgIGRhdGEgPSBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpLCAicmIiKS5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQogCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9zeW10eXBlIiwgVEVNUERJUikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic3ltbGluayBub3QgZXh0cmFjdGVkIHByb3Blcmx5IikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvc3ltdHlwZSIsIFRFTVBESVIpCisgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInN5bWxpbmsgbm90IGV4dHJhY3RlZCBwcm9wZXJseSIpCiAKLSAgICAgICAgZGF0YSA9IG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIiksICJyYiIpLnJlYWQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIiksICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZXh0cmFjdGFsbChzZWxmKToKICAgICAgICAgIyBUZXN0IGlmIGV4dHJhY3RhbGwoKSBjb3JyZWN0bHkgcmVzdG9yZXMgZGlyZWN0b3J5IHBlcm1pc3Npb25zCiAgICAgICAgICMgYW5kIHRpbWVzIChzZWUgaXNzdWUxNzM1KS4KICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICBkaXJlY3RvcmllcyA9IFt0IGZvciB0IGluIHRhciBpZiB0LmlzZGlyKCldCi0gICAgICAgIHRhci5leHRyYWN0YWxsKFRFTVBESVIsIGRpcmVjdG9yaWVzKQotICAgICAgICBmb3IgdGFyaW5mbyBpbiBkaXJlY3RvcmllczoKLSAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgdGFyaW5mby5uYW1lKQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6Ci0gICAgICAgICAgICAgICAgIyBXaW4zMiBoYXMgbm8gc3VwcG9ydCBmb3IgZmluZSBncmFpbmVkIHBlcm1pc3Npb25zLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5tb2RlICYgMG83NzcsIG9zLnN0YXQocGF0aCkuc3RfbW9kZSAmIDBvNzc3KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLm10aW1lLCBvcy5wYXRoLmdldG10aW1lKHBhdGgpKQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBESVIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImV4dHJhY3RhbGwiKQorICAgICAgICBvcy5ta2RpcihESVIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpcmVjdG9yaWVzID0gW3QgZm9yIHQgaW4gdGFyIGlmIHQuaXNkaXIoKV0KKyAgICAgICAgICAgIHRhci5leHRyYWN0YWxsKERJUiwgZGlyZWN0b3JpZXMpCisgICAgICAgICAgICBmb3IgdGFyaW5mbyBpbiBkaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKERJUiwgdGFyaW5mby5uYW1lKQorICAgICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiOgorICAgICAgICAgICAgICAgICAgICAjIFdpbjMyIGhhcyBubyBzdXBwb3J0IGZvciBmaW5lIGdyYWluZWQgcGVybWlzc2lvbnMuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5tb2RlICYgMG83NzcsIG9zLnN0YXQocGF0aCkuc3RfbW9kZSAmIDBvNzc3KQorICAgICAgICAgICAgICAgIGRlZiBmb3JtYXRfbXRpbWUobXRpbWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG10aW1lLCBmbG9hdCk6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInt9ICh7fSkiLmZvcm1hdChtdGltZSwgbXRpbWUuaGV4KCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gInshcn0gKGludCkiLmZvcm1hdChtdGltZSkKKyAgICAgICAgICAgICAgICBmaWxlX210aW1lID0gb3MucGF0aC5nZXRtdGltZShwYXRoKQorICAgICAgICAgICAgICAgIGVycm1zZyA9ICJ0YXIgbXRpbWUgezB9ICE9IGZpbGUgdGltZSB7MX0gb2YgcGF0aCB7MiFhfSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBmb3JtYXRfbXRpbWUodGFyaW5mby5tdGltZSksCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9tdGltZShmaWxlX210aW1lKSwKKyAgICAgICAgICAgICAgICAgICAgcGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIGZpbGVfbXRpbWUsIGVycm1zZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKERJUikKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICBkaXJ0eXBlID0gInVzdGFyL2RpcnR5cGUiCisgICAgICAgIERJUiA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZXh0cmFjdGRpciIpCisgICAgICAgIG9zLm1rZGlyKERJUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcihkaXJ0eXBlKQorICAgICAgICAgICAgICAgIHRhci5leHRyYWN0KHRhcmluZm8sIHBhdGg9RElSKQorICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IG9zLnBhdGguam9pbihESVIsIGRpcnR5cGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmdldG10aW1lKGV4dHJhY3RlZCksIHRhcmluZm8ubXRpbWUpCisgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChleHRyYWN0ZWQpLnN0X21vZGUgJiAwbzc3NywgMG83NTUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKERJUikKIAogICAgIGRlZiB0ZXN0X2luaXRfY2xvc2VfZm9iaihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjNzM0MTogQ2xvc2UgdGhlIGludGVybmFsIGZpbGUgb2JqZWN0IGluIHRoZSBUYXJGaWxlCiAgICAgICAgICMgY29uc3RydWN0b3IgaW4gY2FzZSBvZiBhbiBlcnJvci4gRm9yIHRoZSB0ZXN0IHdlIHJlbHkgb24KLSAgICAgICAgIyB0aGUgZmFjdCB0aGF0IG9wZW5pbmcgYW4gaW52YWxpZCBmaWxlIHJhaXNlcyBhIFJlYWRFcnJvci4KLSAgICAgICAgaW52YWxpZCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiaW52YWxpZCIpCi0gICAgICAgIG9wZW4oaW52YWxpZCwgIndiIikud3JpdGUoYiJmb28iKQorICAgICAgICAjIHRoZSBmYWN0IHRoYXQgb3BlbmluZyBhbiBlbXB0eSBmaWxlIHJhaXNlcyBhIFJlYWRFcnJvci4KKyAgICAgICAgZW1wdHkgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImVtcHR5IikKKyAgICAgICAgd2l0aCBvcGVuKGVtcHR5LCAid2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZShiIiIpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFyID0gb2JqZWN0Ll9fbmV3X18odGFyZmlsZS5UYXJGaWxlKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRhci5fX2luaXRfXyhpbnZhbGlkKQorICAgICAgICAgICAgICAgIHRhci5fX2luaXRfXyhlbXB0eSkKICAgICAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvcjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmZpbGVvYmouY2xvc2VkKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlJlYWRFcnJvciBub3QgcmFpc2VkIikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJlbW92ZShpbnZhbGlkKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZW1wdHkpCiAKIAotY2xhc3MgU3RyZWFtUmVhZFRlc3QoUmVhZFRlc3QpOgorY2xhc3MgU3RyZWFtUmVhZFRlc3QoQ29tbW9uUmVhZFRlc3QpOgogCiAgICAgbW9kZT0icnwiCiAKKyAgICBkZWYgdGVzdF9yZWFkX3Rocm91Z2goc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExMjI0OiBBIHBvb3JseSBkZXNpZ25lZCBfRmlsZUluRmlsZS5yZWFkKCkgbWV0aG9kCisgICAgICAgICMgY2F1c2VkIHNlZWtpbmcgZXJyb3JzIHdpdGggc3RyZWFtIHRhciBmaWxlcy4KKyAgICAgICAgZm9yIHRhcmluZm8gaW4gc2VsZi50YXI6CisgICAgICAgICAgICBpZiBub3QgdGFyaW5mby5pc3JlZygpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBidWYgPSBmb2JqLnJlYWQoNTEyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlN0cmVhbUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNpbXBsZSByZWFkLXRocm91Z2ggdXNpbmcgVGFyRmlsZS5leHRyYWN0ZmlsZSgpIGZhaWxlZCIpCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZvYmouY2xvc2UoKQorCiAgICAgZGVmIHRlc3RfZmlsZW9ial9yZWd1bGFyX2ZpbGUoc2VsZik6CiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5uZXh0KCkgIyBnZXQgInJlZ3R5cGUiIChjYW4ndCB1c2UgZ2V0bWVtYmVyKQogICAgICAgICBmb2JqID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbykKQEAgLTMwMCw0MiArNDQ5LDQ4IEBACiAKICAgICBkZWYgdGVzdF9jb21wYXJlX21lbWJlcnMoc2VsZik6CiAgICAgICAgIHRhcjEgPSB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCi0gICAgICAgIHRhcjIgPSBzZWxmLnRhcgorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIyID0gc2VsZi50YXIKIAotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdDEgPSB0YXIxLm5leHQoKQotICAgICAgICAgICAgdDIgPSB0YXIyLm5leHQoKQotICAgICAgICAgICAgaWYgdDEgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyIGlzIG5vdCBOb25lLCAic3RyZWFtLm5leHQoKSBmYWlsZWQuIikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdDEgPSB0YXIxLm5leHQoKQorICAgICAgICAgICAgICAgIHQyID0gdGFyMi5uZXh0KCkKKyAgICAgICAgICAgICAgICBpZiB0MSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MiBpcyBub3QgTm9uZSwgInN0cmVhbS5uZXh0KCkgZmFpbGVkLiIpCiAKLSAgICAgICAgICAgIGlmIHQyLmlzbG5rKCkgb3IgdDIuaXNzeW0oKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlN0cmVhbUVycm9yLCB0YXIyLmV4dHJhY3RmaWxlLCB0MikKLSAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHQyLmlzbG5rKCkgb3IgdDIuaXNzeW0oKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGFyZmlsZS5TdHJlYW1FcnJvciwgdGFyMi5leHRyYWN0ZmlsZSwgdDIpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIHYxID0gdGFyMS5leHRyYWN0ZmlsZSh0MSkKLSAgICAgICAgICAgIHYyID0gdGFyMi5leHRyYWN0ZmlsZSh0MikKLSAgICAgICAgICAgIGlmIHYxIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2MiBpcyBub3QgTm9uZSwgInN0cmVhbS5leHRyYWN0ZmlsZSgpIGZhaWxlZCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLnJlYWQoKSwgdjIucmVhZCgpLCAic3RyZWFtIGV4dHJhY3Rpb24gZmFpbGVkIikKLQotICAgICAgICB0YXIxLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB2MSA9IHRhcjEuZXh0cmFjdGZpbGUodDEpCisgICAgICAgICAgICAgICAgdjIgPSB0YXIyLmV4dHJhY3RmaWxlKHQyKQorICAgICAgICAgICAgICAgIGlmIHYxIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYyIGlzIG5vdCBOb25lLCAic3RyZWFtLmV4dHJhY3RmaWxlKCkgZmFpbGVkIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYxLnJlYWQoKSwgdjIucmVhZCgpLCAic3RyZWFtIGV4dHJhY3Rpb24gZmFpbGVkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhcjEuY2xvc2UoKQogCiAKIGNsYXNzIERldGVjdFJlYWRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBfdGVzdGZ1bmNfZmlsZShzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyZmlsZS5vcGVuKG5hbWUsIG1vZGUpCisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4obmFtZSwgbW9kZSkKICAgICAgICAgZXhjZXB0IHRhcmZpbGUuUmVhZEVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmZhaWwoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiBfdGVzdGZ1bmNfZmlsZW9iaihzZWxmLCBuYW1lLCBtb2RlKToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyZmlsZS5vcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmo9b3BlbihuYW1lLCAicmIiKSkKKyAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihuYW1lLCBtb2RlLCBmaWxlb2JqPWYpCiAgICAgICAgIGV4Y2VwdCB0YXJmaWxlLlJlYWRFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICBkZWYgX3Rlc3RfbW9kZXMoc2VsZiwgdGVzdGZ1bmMpOgogICAgICAgICB0ZXN0ZnVuYyh0YXJuYW1lLCAiciIpCkBAIC00MzMsMTkgKzU4OCwzNiBAQAogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9zcGFyc2UiKQogICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTg2MDE2LCBjaGtzdW09bWQ1X3NwYXJzZSkKIAorICAgIGRlZiB0ZXN0X2ZpbmRfZ251c3BhcnNlKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJnbnUvc3BhcnNlIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT04NjAxNiwgY2hrc3VtPW1kNV9zcGFyc2UpCisKKyAgICBkZWYgdGVzdF9maW5kX2dudXNwYXJzZV8wMChzZWxmKToKKyAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcigiZ251L3NwYXJzZS0wLjAiKQorICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTg2MDE2LCBjaGtzdW09bWQ1X3NwYXJzZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZ251c3BhcnNlXzAxKHNlbGYpOgorICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJnbnUvc3BhcnNlLTAuMSIpCisgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9ODYwMTYsIGNoa3N1bT1tZDVfc3BhcnNlKQorCisgICAgZGVmIHRlc3RfZmluZF9nbnVzcGFyc2VfMTAoc2VsZik6CisgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoImdudS9zcGFyc2UtMS4wIikKKyAgICAgICAgc2VsZi5fdGVzdF9tZW1iZXIodGFyaW5mbywgc2l6ZT04NjAxNiwgY2hrc3VtPW1kNV9zcGFyc2UpCisKICAgICBkZWYgdGVzdF9maW5kX3VtbGF1dHMoc2VsZik6CiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3VtbGF1dHMtXHhjNFx4ZDZceGRjXHhlNFx4ZjZceGZjXHhkZiIpCiAgICAgICAgIHNlbGYuX3Rlc3RfbWVtYmVyKHRhcmluZm8sIHNpemU9NzAxMSwgY2hrc3VtPW1kNV9yZWd0eXBlKQogCiAgICAgZGVmIHRlc3RfZmluZF91c3Rhcl9sb25nbmFtZShzZWxmKToKICAgICAgICAgbmFtZSA9ICJ1c3Rhci8iICsgIjEyMzQ1LyIgKiAzOSArICIxMjM0NTY3L2xvbmduYW1lIgotICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZSBpbiBzZWxmLnRhci5nZXRuYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYudGFyLmdldG5hbWVzKCkpCiAKICAgICBkZWYgdGVzdF9maW5kX3JlZ3R5cGVfb2xkdjcoc2VsZik6CiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoIm1pc2MvcmVndHlwZS1vbGQtdjciKQogICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTcwMTEsIGNoa3N1bT1tZDVfcmVndHlwZSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRfcGF4X3VtbGF1dHMoc2VsZik6CisgICAgICAgIHNlbGYudGFyLmNsb3NlKCkKICAgICAgICAgc2VsZi50YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlPXNlbGYubW9kZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCiAgICAgICAgIHRhcmluZm8gPSBzZWxmLnRhci5nZXRtZW1iZXIoInBheC91bWxhdXRzLVx4YzRceGQ2XHhkY1x4ZTRceGY2XHhmY1x4ZGYiKQogICAgICAgICBzZWxmLl90ZXN0X21lbWJlcih0YXJpbmZvLCBzaXplPTcwMTEsIGNoa3N1bT1tZDVfcmVndHlwZSkKQEAgLTQ4NCwxMCArNjU2LDEwIEBACiAgICAgICAgICMgdGhlIHByZWNlZGluZyBleHRlbmRlZCBoZWFkZXIuCiAgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCiAgICAgICAgIG9mZnNldCA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbmFtZSkub2Zmc2V0Ci0gICAgICAgIGZvYmogPSBvcGVuKHRhcm5hbWUsICJyYiIpCi0gICAgICAgIGZvYmouc2VlayhvZmZzZXQpCi0gICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8uZnJvbWJ1Zihmb2JqLnJlYWQoNTEyKSwgImlzbzg4NTktMSIsICJzdHJpY3QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udHlwZSwgc2VsZi5sb25nbmFtZXR5cGUpCisgICAgICAgIHdpdGggb3Blbih0YXJuYW1lLCAicmIiKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai5zZWVrKG9mZnNldCkKKyAgICAgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8uZnJvbWJ1Zihmb2JqLnJlYWQoNTEyKSwgImlzbzg4NTktMSIsICJzdHJpY3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnR5cGUsIHNlbGYubG9uZ25hbWV0eXBlKQogCiAKIGNsYXNzIEdOVVJlYWRUZXN0KExvbmduYW1lVGVzdCk6CkBAIC00OTUsMTMgKzY2Nyw1MyBAQAogICAgIHN1YmRpciA9ICJnbnUiCiAgICAgbG9uZ25hbWV0eXBlID0gdGFyZmlsZS5HTlVUWVBFX0xPTkdOQU1FCiAKLSAgICBkZWYgdGVzdF9zcGFyc2VfZmlsZShzZWxmKToKLSAgICAgICAgdGFyaW5mbzEgPSBzZWxmLnRhci5nZXRtZW1iZXIoInVzdGFyL3NwYXJzZSIpCi0gICAgICAgIGZvYmoxID0gc2VsZi50YXIuZXh0cmFjdGZpbGUodGFyaW5mbzEpCi0gICAgICAgIHRhcmluZm8yID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJnbnUvc3BhcnNlIikKLSAgICAgICAgZm9iajIgPSBzZWxmLnRhci5leHRyYWN0ZmlsZSh0YXJpbmZvMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb2JqMS5yZWFkKCksIGZvYmoyLnJlYWQoKSwKLSAgICAgICAgICAgICAgICAic3BhcnNlIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQorICAgICMgU2luY2UgMy4yIHRhcmZpbGUgaXMgc3VwcG9zZWQgdG8gYWNjdXJhdGVseSByZXN0b3JlIHNwYXJzZSBtZW1iZXJzIGFuZAorICAgICMgcHJvZHVjZSBmaWxlcyB3aXRoIGhvbGVzLiBUaGlzIGlzIHdoYXQgd2UgYWN0dWFsbHkgd2FudCB0byB0ZXN0IGhlcmUuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBub3QgYWxsIHBsYXRmb3Jtcy9maWxlc3lzdGVtcyBzdXBwb3J0IHNwYXJzZSBmaWxlcywgYW5kCisgICAgIyBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IGRvIGl0IGlzIG5vbi10cml2aWFsIHRvIG1ha2UgcmVsaWFibGUgYXNzZXJ0aW9ucworICAgICMgYWJvdXQgaG9sZXMgaW4gZmlsZXMuIFRoZXJlZm9yZSwgd2UgZmlyc3QgZG8gb25lIGJhc2ljIHRlc3Qgd2hpY2ggd29ya3MKKyAgICAjIGFuIGFsbCBwbGF0Zm9ybXMsIGFuZCBhZnRlciB0aGF0IGEgdGVzdCB0aGF0IHdpbGwgd29yayBvbmx5IG9uCisgICAgIyBwbGF0Zm9ybXMvZmlsZXN5c3RlbXMgdGhhdCBwcm92ZSB0byBzdXBwb3J0IHNwYXJzZSBmaWxlcy4KKyAgICBkZWYgX3Rlc3Rfc3BhcnNlX2ZpbGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYudGFyLmV4dHJhY3QobmFtZSwgVEVNUERJUikKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgbmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmb2JqOgorICAgICAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWQ1c3VtKGRhdGEpLCBtZDVfc3BhcnNlLAorICAgICAgICAgICAgICAgICJ3cm9uZyBtZDVzdW0gZm9yICVzIiAlIG5hbWUpCisKKyAgICAgICAgaWYgc2VsZi5fZnNfc3VwcG9ydHNfaG9sZXMoKToKKyAgICAgICAgICAgIHMgPSBvcy5zdGF0KGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RfYmxvY2tzICogNTEyIDwgcy5zdF9zaXplKQorCisgICAgZGVmIHRlc3Rfc3BhcnNlX2ZpbGVfb2xkKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NwYXJzZV9maWxlKCJnbnUvc3BhcnNlIikKKworICAgIGRlZiB0ZXN0X3NwYXJzZV9maWxlXzAwKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NwYXJzZV9maWxlKCJnbnUvc3BhcnNlLTAuMCIpCisKKyAgICBkZWYgdGVzdF9zcGFyc2VfZmlsZV8wMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zcGFyc2VfZmlsZSgiZ251L3NwYXJzZS0wLjEiKQorCisgICAgZGVmIHRlc3Rfc3BhcnNlX2ZpbGVfMTAoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc3BhcnNlX2ZpbGUoImdudS9zcGFyc2UtMS4wIikKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2ZzX3N1cHBvcnRzX2hvbGVzKCk6CisgICAgICAgICMgUmV0dXJuIFRydWUgaWYgdGhlIHBsYXRmb3JtIGtub3dzIHRoZSBzdF9ibG9ja3Mgc3RhdCBhdHRyaWJ1dGUgYW5kCisgICAgICAgICMgdXNlcyBzdF9ibG9ja3MgdW5pdHMgb2YgNTEyIGJ5dGVzLCBhbmQgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgYWJsZSB0bworICAgICAgICAjIHN0b3JlIGhvbGVzIGluIGZpbGVzLgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImxpbnV4MiI6CisgICAgICAgICAgICAjIExpbnV4IGV2aWRlbnRpYWxseSBoYXMgNTEyIGJ5dGUgc3RfYmxvY2tzIHVuaXRzLgorICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihURU1QRElSLCAic3BhcnNlLXRlc3QiKQorICAgICAgICAgICAgd2l0aCBvcGVuKG5hbWUsICJ3YiIpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9iai5zZWVrKDQwOTYpCisgICAgICAgICAgICAgICAgZm9iai50cnVuY2F0ZSgpCisgICAgICAgICAgICBzID0gb3Muc3RhdChuYW1lKQorICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCisgICAgICAgICAgICByZXR1cm4gcy5zdF9ibG9ja3MgPT0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKIAogY2xhc3MgUGF4UmVhZFRlc3QoTG9uZ25hbWVUZXN0KToKQEAgLTUxMSwzMyArNzIzLDM4IEBACiAKICAgICBkZWYgdGVzdF9wYXhfZ2xvYmFsX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAiYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksICJceGM0XHhkNlx4ZGNceGU0XHhmNlx4ZmNceGRmIikKIAotICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGUxIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVuYW1lLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAiYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnBheF9oZWFkZXJzLmdldCgiVkVORE9SLnVtbGF1dHMiKSwgIlx4YzRceGQ2XHhkY1x4ZTRceGY2XHhmY1x4ZGYiKQorICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAiYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksICJceGM0XHhkNlx4ZGNceGU0XHhmNlx4ZmNceGRmIikKIAotICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGUyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVuYW1lLCAiIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAiYmFyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnBheF9oZWFkZXJzLmdldCgiVkVORE9SLnVtbGF1dHMiKSwgIlx4YzRceGQ2XHhkY1x4ZTRceGY2XHhmY1x4ZGYiKQotCi0gICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJ0YXJmaWxlIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmduYW1lLCAidGFyZmlsZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksICJceGM0XHhkNlx4ZGNceGU0XHhmNlx4ZmNceGRmIikKKyAgICAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVuYW1lLCAidGFyZmlsZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ25hbWUsICJ0YXJmaWxlIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksICJceGM0XHhkNlx4ZGNceGU0XHhmNlx4ZmNceGRmIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9wYXhfbnVtYmVyX2ZpZWxkcyhzZWxmKToKICAgICAgICAgIyBBbGwgZm9sbG93aW5nIG51bWJlciBmaWVsZHMgYXJlIHJlYWQgZnJvbSB0aGUgcGF4IGhlYWRlci4KICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGU0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDcwMTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51aWQsIDEyMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmdpZCwgMTIzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIDEwNDE4MDg3ODMuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHRhcmluZm8ubXRpbWUpLCBmbG9hdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh0YXJpbmZvLnBheF9oZWFkZXJzWyJhdGltZSJdKSwgMTA0MTgwODc4My4wKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImN0aW1lIl0pLCAxMDQxODA4NzgzLjApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTQiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDcwMTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udWlkLCAxMjMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ2lkLCAxMjMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIDEwNDE4MDg3ODMuMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh0YXJpbmZvLm10aW1lKSwgZmxvYXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImF0aW1lIl0pLCAxMDQxODA4NzgzLjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImN0aW1lIl0pLCAxMDQxODA4NzgzLjApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAKIGNsYXNzIFdyaXRlVGVzdEJhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNTYzLDUyICs3ODAsNTkgQEAKICAgICAgICAgIyBhIHRyYWlsaW5nICdcMCcuCiAgICAgICAgIG5hbWUgPSAiMDEyMzQ1Njc4OSIgKiAxMAogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQotICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKG5hbWUpCi0gICAgICAgIHRhci5hZGRmaWxlKHQpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8obmFtZSkKKyAgICAgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKClbMF0gPT0gbmFtZSwKLSAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHN0b3JlIDEwMCBjaGFyIGZpbGVuYW1lIikKLSAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5nZXRuYW1lcygpWzBdID09IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gc3RvcmUgMTAwIGNoYXIgZmlsZW5hbWUiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3Rhcl9zaXplKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIGJ1ZyAjMTAxMzg4Mi4KICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsZSIpCi0gICAgICAgIGZvYmogPSBvcGVuKHBhdGgsICJ3YiIpCi0gICAgICAgIGZvYmoud3JpdGUoYiJhYWEiKQotICAgICAgICBmb2JqLmNsb3NlKCkKLSAgICAgICAgdGFyLmFkZChwYXRoKQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmaWxlIikKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAid2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoYiJhYWEiKQorICAgICAgICAgICAgdGFyLmFkZChwYXRoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSA+IDAsCiAgICAgICAgICAgICAgICAgInRhcmZpbGUgaXMgZW1wdHkiKQogCiAgICAgIyBUaGUgdGVzdF8qX3NpemUgdGVzdHMgdGVzdCBmb3IgYnVnICMxMTY3MTI4LgogICAgIGRlZiB0ZXN0X2ZpbGVfc2l6ZShzZWxmKToKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsZSIpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgIndiIik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXR0YXJpbmZvKHBhdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKIAotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJmaWxlIikKLSAgICAgICAgZm9iaiA9IG9wZW4ocGF0aCwgIndiIikKLSAgICAgICAgZm9iai5jbG9zZSgpCi0gICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhwYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKLQotICAgICAgICBmb2JqID0gb3BlbihwYXRoLCAid2IiKQotICAgICAgICBmb2JqLndyaXRlKGIiYWFhIikKLSAgICAgICAgZm9iai5jbG9zZSgpCi0gICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhwYXRoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMykKLQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICJ3YiIpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9iai53cml0ZShiImFhYSIpCisgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9zaXplKHNlbGYpOgogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJkaXJlY3RvcnkiKQogICAgICAgICBvcy5ta2RpcihwYXRoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQotICAgICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXR0YXJpbmZvKHBhdGgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8ocGF0aCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uc2l6ZSwgMCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnJtZGlyKHBhdGgpCiAKQEAgLTYxNiw0NiArODQwLDUyIEBACiAgICAgICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CiAgICAgICAgICAgICBsaW5rID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJsaW5rIikKICAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihURU1QRElSLCAibGlua190YXJnZXQiKQotICAgICAgICAgICAgZm9iaiA9IG9wZW4odGFyZ2V0LCAid2IiKQotICAgICAgICAgICAgZm9iai53cml0ZShiImFhYSIpCi0gICAgICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbih0YXJnZXQsICJ3YiIpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9iai53cml0ZShiImFhYSIpCiAgICAgICAgICAgICBvcy5saW5rKHRhcmdldCwgbGluaykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQotICAgICAgICAgICAgICAgICMgUmVjb3JkIHRoZSBsaW5rIHRhcmdldCBpbiB0aGUgaW5vZGVzIGxpc3QuCi0gICAgICAgICAgICAgICAgdGFyLmdldHRhcmluZm8odGFyZ2V0KQotICAgICAgICAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhsaW5rKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAwKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgIyBSZWNvcmQgdGhlIGxpbmsgdGFyZ2V0IGluIHRoZSBpbm9kZXMgbGlzdC4KKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldHRhcmluZm8odGFyZ2V0KQorICAgICAgICAgICAgICAgICAgICB0YXJpbmZvID0gdGFyLmdldHRhcmluZm8obGluaykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDApCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHRhcmdldCkKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUobGluaykKIAorICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKICAgICBkZWYgdGVzdF9zeW1saW5rX3NpemUoc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIob3MsICJzeW1saW5rIik6Ci0gICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJzeW1saW5rIikKLSAgICAgICAgICAgIG9zLnN5bWxpbmsoImxpbmtfdGFyZ2V0IiwgcGF0aCkKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihURU1QRElSLCAic3ltbGluayIpCisgICAgICAgIG9zLnN5bWxpbmsoImxpbmtfdGFyZ2V0IiwgcGF0aCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgc2VsZi5tb2RlKQogICAgICAgICAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0dGFyaW5mbyhwYXRoKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5zaXplLCAwKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUocGF0aCkKKyAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCiAKICAgICBkZWYgdGVzdF9hZGRfc2VsZihzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciAjMTI1NzI1NS4KICAgICAgICAgZHN0bmFtZSA9IG9zLnBhdGguYWJzcGF0aCh0bXBuYW1lKQotCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIubmFtZSA9PSBkc3RuYW1lLCAiYXJjaGl2ZSBuYW1lIG11c3QgYmUgYWJzb2x1dGUiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLm5hbWUgPT0gZHN0bmFtZSwgImFyY2hpdmUgbmFtZSBtdXN0IGJlIGFic29sdXRlIikKKyAgICAgICAgICAgIHRhci5hZGQoZHN0bmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuZ2V0bmFtZXMoKSA9PSBbXSwgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCiAKLSAgICAgICAgdGFyLmFkZChkc3RuYW1lKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKCkgPT0gW10sICJhZGRlZCB0aGUgYXJjaGl2ZSB0byBpdHNlbGYiKQotCi0gICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKFRFTVBESVIpCi0gICAgICAgIHRhci5hZGQoZHN0bmFtZSkKLSAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKCkgPT0gW10sICJhZGRlZCB0aGUgYXJjaGl2ZSB0byBpdHNlbGYiKQorICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgIG9zLmNoZGlyKFRFTVBESVIpCisgICAgICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCisgICAgICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmdldG5hbWVzKCkgPT0gW10sICJhZGRlZCB0aGUgYXJjaGl2ZSB0byBpdHNlbGYiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2V4Y2x1ZGUoc2VsZik6CiAgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImV4Y2x1ZGUiKQpAQCAtNjY1LDIwICs4OTUsOTUgQEAKICAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIG5hbWUpCiAgICAgICAgICAgICAgICAgb3BlbihuYW1lLCAid2IiKS5jbG9zZSgpCiAKLSAgICAgICAgICAgIGRlZiBleGNsdWRlKG5hbWUpOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmlzZmlsZShuYW1lKQorICAgICAgICAgICAgZXhjbHVkZSA9IG9zLnBhdGguaXNmaWxlCiAKICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICAgICAgdGFyLmFkZCh0ZW1wZGlyLCBhcmNuYW1lPSJlbXB0eV9kaXIiLCBleGNsdWRlPWV4Y2x1ZGUpCi0gICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoInVzZSB0aGUgZmlsdGVyIGFyZ3VtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsIGFyY25hbWU9ImVtcHR5X2RpciIsIGV4Y2x1ZGU9ZXhjbHVkZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRhci5nZXRtZW1iZXJzKCkpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bmFtZXMoKVswXSwgImVtcHR5X2RpciIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFyLmdldG1lbWJlcnMoKSksIDEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bmFtZXMoKVswXSwgImVtcHR5X2RpciIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCiAKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCdzeW1saW5rJyksICJuZWVkcyBvcy5zeW1saW5rIikKKyAgICBkZWYgdGVzdF9maWx0ZXIoc2VsZik6CisgICAgICAgIHRlbXBkaXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZpbHRlciIpCisgICAgICAgIG9zLm1rZGlyKHRlbXBkaXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBuYW1lIGluICgiZm9vIiwgImJhciIsICJiYXoiKToKKyAgICAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHRlbXBkaXIsIG5hbWUpCisgICAgICAgICAgICAgICAgb3BlbihuYW1lLCAid2IiKS5jbG9zZSgpCisKKyAgICAgICAgICAgIGRlZiBmaWx0ZXIodGFyaW5mbyk6CisgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZSh0YXJpbmZvLm5hbWUpID09ICJiYXIiOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IDEyMworICAgICAgICAgICAgICAgIHRhcmluZm8udW5hbWUgPSAiZm9vIgorICAgICAgICAgICAgICAgIHJldHVybiB0YXJpbmZvCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRhci5hZGQodGVtcGRpciwgYXJjbmFtZT0iZW1wdHlfZGlyIiwgZmlsdGVyPWZpbHRlcikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCBmaWx0ZXIgaXMgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICB0YXIuYWRkKHRlbXBkaXIsICJlbXB0eV9kaXIiLCBUcnVlLCBOb25lLCBmaWx0ZXIpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHRhcmluZm8gaW4gdGFyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udWlkLCAxMjMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgImZvbyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGFyLmdldG1lbWJlcnMoKSksIDMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisKKyAgICAjIEd1YXJhbnRlZSB0aGF0IHN0b3JlZCBwYXRobmFtZXMgYXJlIG5vdCBtb2RpZmllZC4gRG9uJ3QKKyAgICAjIHJlbW92ZSAuLyBvciAuLi8gb3IgZG91YmxlIHNsYXNoZXMuIFN0aWxsIG1ha2UgYWJzb2x1dGUKKyAgICAjIHBhdGhuYW1lcyByZWxhdGl2ZS4KKyAgICAjIEZvciBkZXRhaWxzIHNlZSBidWcgIzYwNTQuCisgICAgZGVmIF90ZXN0X3BhdGhuYW1lKHNlbGYsIHBhdGgsIGNtcF9wYXRoPU5vbmUsIGRpcj1GYWxzZSk6CisgICAgICAgICMgQ3JlYXRlIGEgdGFyZmlsZSB3aXRoIGFuIGVtcHR5IG1lbWJlciBuYW1lZCBwYXRoCisgICAgICAgICMgYW5kIGNvbXBhcmUgdGhlIHN0b3JlZCBuYW1lIHdpdGggdGhlIG9yaWdpbmFsLgorICAgICAgICBmb28gPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImZvbyIpCisgICAgICAgIGlmIG5vdCBkaXI6CisgICAgICAgICAgICBvcGVuKGZvbywgInciKS5jbG9zZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5ta2Rpcihmb28pCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIHNlbGYubW9kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyLmFkZChmb28sIGFyY25hbWU9cGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJyIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdCA9IHRhci5uZXh0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgaWYgbm90IGRpcjoKKyAgICAgICAgICAgIG9zLnJlbW92ZShmb28pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvcy5ybWRpcihmb28pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm5hbWUsIGNtcF9wYXRoIG9yIHBhdGgucmVwbGFjZShvcy5zZXAsICIvIikpCisKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKICAgICBkZWYgdGVzdF9leHRyYWN0YWxsX3N5bWxpbmtzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaWYgZXh0cmFjdGFsbCB3b3JrcyBwcm9wZXJseSB3aGVuIHRhcmZpbGUgY29udGFpbnMgc3ltbGlua3MKICAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAidGVzdHN5bWxpbmtzIikKQEAgLTcwNyw2ICsxMDEyLDUxIEBACiAgICAgICAgICAgICBvcy51bmxpbmsodGVtcGFyY2hpdmUpCiAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCiAKKyAgICBkZWYgdGVzdF9wYXRobmFtZXMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoImZvbyIpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCJmb28iLCAiLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oImZvbyIsICIuLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4iLCAiZm9vIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIsICIuIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIsICIuIiwgImJhciIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLiIsICJmb28iLCAiLi4iLCAiYmFyIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuIiwgImZvbyIsICIuLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIpKQorICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKG9zLnBhdGguam9pbigiLi4iLCAiZm9vIiwgIi4uIikpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUob3MucGF0aC5qb2luKCIuLiIsICJmb28iLCAiLiIsICJiYXIiKSkKKyAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZShvcy5wYXRoLmpvaW4oIi4uIiwgImZvbyIsICIuLiIsICJiYXIiKSkKKworICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iICsgb3Muc2VwICsgb3Muc2VwICsgImJhciIpCisgICAgICAgIHNlbGYuX3Rlc3RfcGF0aG5hbWUoImZvbyIgKyBvcy5zZXAgKyBvcy5zZXAsICJmb28iLCBkaXI9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2Fic19wYXRobmFtZXMoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiQzpcXGZvbyIsICJmb28iKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiL2ZvbyIsICJmb28iKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9wYXRobmFtZSgiLy8vZm9vIiwgImZvbyIpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgICMgVGVzdCBhZGRpbmcgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCisgICAgICAgIGN3ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKFRFTVBESVIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFyLmFkZCgiLiIpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAiciIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodC5uYW1lID09ICIuIiBvciB0Lm5hbWUuc3RhcnRzd2l0aCgiLi8iKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKKworCiBjbGFzcyBTdHJlYW1Xcml0ZVRlc3QoV3JpdGVUZXN0QmFzZSk6CiAKICAgICBtb2RlID0gInd8IgpAQCAtNzE3LDE5ICsxMDY3LDE4IEBACiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgaWYgc2VsZi5tb2RlLmVuZHN3aXRoKCJneiIpOgotICAgICAgICAgICAgZm9iaiA9IGd6aXAuR3ppcEZpbGUodG1wbmFtZSkKLSAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQotICAgICAgICAgICAgZm9iai5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUodG1wbmFtZSkgYXMgZm9iajoKKyAgICAgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKICAgICAgICAgZWxpZiBzZWxmLm1vZGUuZW5kc3dpdGgoImJ6MiIpOgogICAgICAgICAgICAgZGVjID0gYnoyLkJaMkRlY29tcHJlc3NvcigpCi0gICAgICAgICAgICBkYXRhID0gb3Blbih0bXBuYW1lLCAicmIiKS5yZWFkKCkKKyAgICAgICAgICAgIHdpdGggb3Blbih0bXBuYW1lLCAicmIiKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQogICAgICAgICAgICAgZGF0YSA9IGRlYy5kZWNvbXByZXNzKGRhdGEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRlYy51bnVzZWRfZGF0YSkgPT0gMCwKICAgICAgICAgICAgICAgICAgICAgImZvdW5kIHRyYWlsaW5nIGRhdGEiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9iaiA9IG9wZW4odG1wbmFtZSwgInJiIikKLSAgICAgICAgICAgIGRhdGEgPSBmb2JqLnJlYWQoKQotICAgICAgICAgICAgZm9iai5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgInJiIikgYXMgZm9iajoKKyAgICAgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5jb3VudChiIlwwIikgPT0gdGFyZmlsZS5SRUNPUkRTSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvcnJlY3QgemVybyBwYWRkaW5nIikKQEAgLTc4NCwyMSArMTEzMywyNyBAQAogICAgICAgICAgICAgdGFyaW5mby50eXBlID0gdGFyZmlsZS5MTktUWVBFCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IikKLSAgICAgICAgdGFyLmZvcm1hdCA9IHRhcmZpbGUuR05VX0ZPUk1BVAotICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIuZm9ybWF0ID0gdGFyZmlsZS5HTlVfRk9STUFUCisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQogCi0gICAgICAgIHYxID0gc2VsZi5fY2FsY19zaXplKG5hbWUsIGxpbmspCi0gICAgICAgIHYyID0gdGFyLm9mZnNldAotICAgICAgICBzZWxmLmFzc2VydFRydWUodjEgPT0gdjIsICJHTlUgbG9uZ25hbWUvbG9uZ2xpbmsgY3JlYXRpb24gZmFpbGVkIikKLQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgdjEgPSBzZWxmLl9jYWxjX3NpemUobmFtZSwgbGluaykKKyAgICAgICAgICAgIHYyID0gdGFyLm9mZnNldAorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYxID09IHYyLCAiR05VIGxvbmduYW1lL2xvbmdsaW5rIGNyZWF0aW9uIGZhaWxlZCIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQotICAgICAgICBtZW1iZXIgPSB0YXIubmV4dCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobWVtYmVyIGlzIE5vbmUsICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyaW5mby5uYW1lID09IG1lbWJlci5uYW1lIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID09IG1lbWJlci5saW5rbmFtZSwgXAotICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1lbWJlciA9IHRhci5uZXh0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1lbWJlciwKKyAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byByZWFkIGxvbmduYW1lIG1lbWJlciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubmFtZSwgbWVtYmVyLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmxpbmtuYW1lLCBtZW1iZXIubGlua25hbWUsCisgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gcmVhZCBsb25nbmFtZSBtZW1iZXIiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2xvbmduYW1lXzEwMjMoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3QoKCJsb25nbmFtLyIgKiAxMjcpICsgImxvbmduYW0iKQpAQCAtODM4LDkgKzExOTMsOCBAQAogICAgICAgICBzZWxmLmZvbyA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZm9vIikKICAgICAgICAgc2VsZi5iYXIgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgImJhciIpCiAKLSAgICAgICAgZm9iaiA9IG9wZW4oc2VsZi5mb28sICJ3YiIpCi0gICAgICAgIGZvYmoud3JpdGUoYiJmb28iKQotICAgICAgICBmb2JqLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZm9vLCAid2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZShiImZvbyIpCiAKICAgICAgICAgb3MubGluayhzZWxmLmZvbywgc2VsZi5iYXIpCiAKQEAgLTg0OSw4ICsxMjAzLDggQEAKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi50YXIuY2xvc2UoKQotICAgICAgICBvcy5yZW1vdmUoc2VsZi5mb28pCi0gICAgICAgIG9zLnJlbW92ZShzZWxmLmJhcikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5mb28pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHNlbGYuYmFyKQogCiAgICAgZGVmIHRlc3RfYWRkX3R3aWNlKHNlbGYpOgogICAgICAgICAjIFRoZSBzYW1lIG5hbWUgd2lsbCBiZSBhZGRlZCBhcyBhIFJFR1RZUEUgZXZlcnkKQEAgLTg4MSwxNiArMTIzNSwyMSBAQAogICAgICAgICAgICAgdGFyaW5mby50eXBlID0gdGFyZmlsZS5MTktUWVBFCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCkKLSAgICAgICAgdGFyLmFkZGZpbGUodGFyaW5mbykKLSAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGFyLmFkZGZpbGUodGFyaW5mbykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUpCi0gICAgICAgIGlmIGxpbms6Ci0gICAgICAgICAgICBsID0gdGFyLmdldG1lbWJlcnMoKVswXS5saW5rbmFtZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmsgPT0gbCwgIlBBWCBsb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbiA9IHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBsaW5rOgorICAgICAgICAgICAgICAgIGwgPSB0YXIuZ2V0bWVtYmVycygpWzBdLmxpbmtuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmsgPT0gbCwgIlBBWCBsb25nbGluayBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuID0gdGFyLmdldG1lbWJlcnMoKVswXS5uYW1lCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3BheF9nbG9iYWxfaGVhZGVyKHNlbGYpOgogICAgICAgICBwYXhfaGVhZGVycyA9IHsKQEAgLTkwMCwyNSArMTI1OSwyOSBAQAogICAgICAgICAgICAgICAgICJ0ZXN0IjogIlx4ZTRceGY2XHhmYyIsCiAgICAgICAgICAgICAgICAgIlx4ZTRceGY2XHhmYyI6ICJ0ZXN0In0KIAotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFULCBcCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD10YXJmaWxlLlBBWF9GT1JNQVQsCiAgICAgICAgICAgICAgICAgcGF4X2hlYWRlcnM9cGF4X2hlYWRlcnMpCi0gICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbygidGVzdCIpKQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oInRlc3QiKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IGlmIHRoZSBnbG9iYWwgaGVhZGVyIHdhcyB3cml0dGVuIGNvcnJlY3RseS4KICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5wYXhfaGVhZGVycywgcGF4X2hlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG1lbWJlcnMoKVswXS5wYXhfaGVhZGVycywgcGF4X2hlYWRlcnMpCi0KLSAgICAgICAgIyBUZXN0IGlmIGFsbCB0aGUgZmllbGRzIGFyZSBzdHJpbmdzLgotICAgICAgICBmb3Iga2V5LCB2YWwgaW4gdGFyLnBheF9oZWFkZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShrZXkpIGlzIG5vdCBieXRlcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHZhbCkgaXMgbm90IGJ5dGVzKQotICAgICAgICAgICAgaWYga2V5IGluIHRhcmZpbGUuUEFYX05VTUJFUl9GSUVMRFM6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0YXJmaWxlLlBBWF9OVU1CRVJfRklFTERTW2tleV0odmFsKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmFibGUgdG8gY29udmVydCBwYXggaGVhZGVyIGZpZWxkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLnBheF9oZWFkZXJzLCBwYXhfaGVhZGVycykKKyAgICAgICAgICAgICMgVGVzdCBpZiBhbGwgdGhlIGZpZWxkcyBhcmUgc3RyaW5ncy4KKyAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiB0YXIucGF4X2hlYWRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShrZXkpIGlzIG5vdCBieXRlcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh2YWwpIGlzIG5vdCBieXRlcykKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEUzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEU1trZXldKHZhbCkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJ1bmFibGUgdG8gY29udmVydCBwYXggaGVhZGVyIGZpZWxkIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9wYXhfZXh0ZW5kZWRfaGVhZGVyKHNlbGYpOgogICAgICAgICAjIFRoZSBmaWVsZHMgZnJvbSB0aGUgcGF4IGhlYWRlciBoYXZlIHByaW9yaXR5IG92ZXIgdGhlCkBAIC05MjYsMTggKzEyODksMjMgQEAKICAgICAgICAgcGF4X2hlYWRlcnMgPSB7InBhdGgiOiAiZm9vIiwgInVpZCI6ICIxMjMifQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD10YXJmaWxlLlBBWF9GT1JNQVQsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCkKLSAgICAgICAgdC5uYW1lID0gIlx4ZTRceGY2XHhmYyIgIyBub24tQVNDSUkKLSAgICAgICAgdC51aWQgPSA4Kio4ICMgdG9vIGxhcmdlCi0gICAgICAgIHQucGF4X2hlYWRlcnMgPSBwYXhfaGVhZGVycwotICAgICAgICB0YXIuYWRkZmlsZSh0KQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCkKKyAgICAgICAgICAgIHQubmFtZSA9ICJceGU0XHhmNlx4ZmMiICMgbm9uLUFTQ0lJCisgICAgICAgICAgICB0LnVpZCA9IDgqKjggIyB0b28gbGFyZ2UKKyAgICAgICAgICAgIHQucGF4X2hlYWRlcnMgPSBwYXhfaGVhZGVycworICAgICAgICAgICAgdGFyLmFkZGZpbGUodCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICB0ID0gdGFyLmdldG1lbWJlcnMoKVswXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51aWQsIDEyMykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdCA9IHRhci5nZXRtZW1iZXJzKClbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5wYXhfaGVhZGVycywgcGF4X2hlYWRlcnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgImZvbyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudWlkLCAxMjMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAKIGNsYXNzIFVzdGFyVW5pY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtOTU1LDEzICsxMzIzLDE3IEBACiAKICAgICBkZWYgX3Rlc3RfdW5pY29kZV9maWxlbmFtZShzZWxmLCBlbmNvZGluZyk6CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz0ic3RyaWN0IikKLSAgICAgICAgbmFtZSA9ICJceGU0XHhmNlx4ZmMiCi0gICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbyhuYW1lKSkKLSAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9ICJceGU0XHhmNlx4ZmMiCisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8obmFtZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBlbmNvZGluZz1lbmNvZGluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLm5hbWUsIG5hbWUpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG1lbWJlcnMoKVswXS5uYW1lLCBuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVfZXJyb3Ioc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZm9ybWF0ID09IHRhcmZpbGUuUEFYX0ZPUk1BVDoKQEAgLTk2OSwyMyArMTM0MSwyOCBAQAogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCi0gICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCkKIAotICAgICAgICB0YXJpbmZvLm5hbWUgPSAiXHhlNFx4ZjZceGZjIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhci5hZGRmaWxlLCB0YXJpbmZvKQorICAgICAgICAgICAgdGFyaW5mby5uYW1lID0gIlx4ZTRceGY2XHhmYyIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyLmFkZGZpbGUsIHRhcmluZm8pCiAKLSAgICAgICAgdGFyaW5mby5uYW1lID0gImZvbyIKLSAgICAgICAgdGFyaW5mby51bmFtZSA9ICJceGU0XHhmNlx4ZmMiCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyLmFkZGZpbGUsIHRhcmluZm8pCisgICAgICAgICAgICB0YXJpbmZvLm5hbWUgPSAiZm9vIgorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9ICJceGU0XHhmNlx4ZmMiCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhci5hZGRmaWxlLCB0YXJpbmZvKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfYXJndW1lbnQoc2VsZik6CiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAiciIsIGVuY29kaW5nPSJpc284ODU5LTEiLCBlcnJvcnM9InN0cmljdCIpCi0gICAgICAgIGZvciB0IGluIHRhcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQubmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5saW5rbmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC51bmFtZSkgaXMgc3RyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5nbmFtZSkgaXMgc3RyKQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgdCBpbiB0YXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5uYW1lKSBpcyBzdHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGUodC5saW5rbmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eXBlKHQudW5hbWUpIGlzIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZSh0LmduYW1lKSBpcyBzdHIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfdW5hbWVfdW5pY29kZShzZWxmKToKICAgICAgICAgdCA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikKQEAgLTk5MywzMCArMTM3MCw1NyBAQAogICAgICAgICB0LmduYW1lID0gIlx4ZTRceGY2XHhmYyIKIAogICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgbW9kZT0idyIsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCi0gICAgICAgIHRhci5hZGRmaWxlKHQpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKLSAgICAgICAgdCA9IHRhci5nZXRtZW1iZXIoImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51bmFtZSwgIlx4ZTRceGY2XHhmYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5nbmFtZSwgIlx4ZTRceGY2XHhmYyIpCi0KLSAgICAgICAgaWYgc2VsZi5mb3JtYXQgIT0gdGFyZmlsZS5QQVhfRk9STUFUOgotICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHRyeToKICAgICAgICAgICAgIHQgPSB0YXIuZ2V0bWVtYmVyKCJmb28iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnVuYW1lLCAiXHVmZmZkXHVmZmZkXHVmZmZkIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5nbmFtZSwgIlx1ZmZmZFx1ZmZmZFx1ZmZmZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudW5hbWUsICJceGU0XHhmNlx4ZmMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmduYW1lLCAiXHhlNFx4ZjZceGZjIikKKworICAgICAgICAgICAgaWYgc2VsZi5mb3JtYXQgIT0gdGFyZmlsZS5QQVhfRk9STUFUOgorICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgICAgICAgICAgdCA9IHRhci5nZXRtZW1iZXIoImZvbyIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnVuYW1lLCAiXHVkY2U0XHVkY2Y2XHVkY2ZjIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ25hbWUsICJcdWRjZTRcdWRjZjZcdWRjZmMiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogCiBjbGFzcyBHTlVVbmljb2RlVGVzdChVc3RhclVuaWNvZGVUZXN0KToKIAogICAgIGZvcm1hdCA9IHRhcmZpbGUuR05VX0ZPUk1BVAogCisgICAgZGVmIHRlc3RfYmFkX3BheF9oZWFkZXIoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgIzg2MzMuIEdOVSB0YXIgPD0gMS4yMyBjcmVhdGVzIHJhdyBiaW5hcnkgZmllbGRzCisgICAgICAgICMgd2l0aG91dCBhIGhkcmNoYXJzZXQ9QklOQVJZIGhlYWRlci4KKyAgICAgICAgZm9yIGVuY29kaW5nLCBuYW1lIGluICgoInV0ZjgiLCAicGF4L2JhZC1wYXgtXHVkY2U0XHVkY2Y2XHVkY2ZjIiksCisgICAgICAgICAgICAgICAgKCJpc284ODU5LTEiLCAicGF4L2JhZC1wYXgtXHhlNFx4ZjZceGZjIiksKToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9InN1cnJvZ2F0ZWVzY2FwZSIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHQgPSB0YXIuZ2V0bWVtYmVyKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuYWJsZSB0byByZWFkIGJhZCBHTlUgdGFyIHBheCBoZWFkZXIiKQorCiAKIGNsYXNzIFBBWFVuaWNvZGVUZXN0KFVzdGFyVW5pY29kZVRlc3QpOgogCiAgICAgZm9ybWF0ID0gdGFyZmlsZS5QQVhfRk9STUFUCiAKKyAgICBkZWYgdGVzdF9iaW5hcnlfaGVhZGVyKHNlbGYpOgorICAgICAgICAjIFRlc3QgYSBQT1NJWC4xLTIwMDggY29tcGF0aWJsZSBoZWFkZXIgd2l0aCBhIGhkcmNoYXJzZXQ9QklOQVJZIGZpZWxkLgorICAgICAgICBmb3IgZW5jb2RpbmcsIG5hbWUgaW4gKCgidXRmOCIsICJwYXgvaGRyY2hhcnNldC1cdWRjZTRcdWRjZjZcdWRjZmMiKSwKKyAgICAgICAgICAgICAgICAoImlzbzg4NTktMSIsICJwYXgvaGRyY2hhcnNldC1ceGU0XHhmNlx4ZmMiKSwpOgorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikgYXMgdGFyOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdCA9IHRhci5nZXRtZW1iZXIobmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgidW5hYmxlIHRvIHJlYWQgUE9TSVguMS0yMDA4IGJpbmFyeSBoZWFkZXIiKQorCiAKIGNsYXNzIEFwcGVuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCBhcHBlbmQgbW9kZSAoY3AuIHBhdGNoICMxNjUyNjgxKS4KQEAgLTEwMjcsNDEgKzE0MzEsNDMgQEAKICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLnRhcm5hbWUpCiAKICAgICBkZWYgX2FkZF90ZXN0ZmlsZShzZWxmLCBmaWxlb2JqPU5vbmUpOgotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCAiYSIsIGZpbGVvYmo9ZmlsZW9iaikKLSAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKCJiYXIiKSkKLSAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCAiYSIsIGZpbGVvYmo9ZmlsZW9iaikgYXMgdGFyOgorICAgICAgICAgICAgdGFyLmFkZGZpbGUodGFyZmlsZS5UYXJJbmZvKCJiYXIiKSkKIAogICAgIGRlZiBfY3JlYXRlX3Rlc3R0YXIoc2VsZiwgbW9kZT0idzoiKToKLSAgICAgICAgc3JjID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQotICAgICAgICB0ID0gc3JjLmdldG1lbWJlcigidXN0YXIvcmVndHlwZSIpCi0gICAgICAgIHQubmFtZSA9ICJmb28iCi0gICAgICAgIGYgPSBzcmMuZXh0cmFjdGZpbGUodCkKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgbW9kZSkKLSAgICAgICAgdGFyLmFkZGZpbGUodCwgZikKLSAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpIGFzIHNyYzoKKyAgICAgICAgICAgIHQgPSBzcmMuZ2V0bWVtYmVyKCJ1c3Rhci9yZWd0eXBlIikKKyAgICAgICAgICAgIHQubmFtZSA9ICJmb28iCisgICAgICAgICAgICBmID0gc3JjLmV4dHJhY3RmaWxlKHQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCBtb2RlKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgICAgIHRhci5hZGRmaWxlKHQsIGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIF90ZXN0KHNlbGYsIG5hbWVzPVsiYmFyIl0sIGZpbGVvYmo9Tm9uZSk6Ci0gICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihzZWxmLnRhcm5hbWUsIGZpbGVvYmo9ZmlsZW9iaikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bmFtZXMoKSwgbmFtZXMpCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHNlbGYudGFybmFtZSwgZmlsZW9iaj1maWxlb2JqKSBhcyB0YXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpLCBuYW1lcykKIAogICAgIGRlZiB0ZXN0X25vbl9leGlzdGluZyhzZWxmKToKICAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKCkKICAgICAgICAgc2VsZi5fdGVzdCgpCiAKICAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKLSAgICAgICAgb3BlbihzZWxmLnRhcm5hbWUsICJ3IikuY2xvc2UoKQorICAgICAgICB0YXJmaWxlLm9wZW4oc2VsZi50YXJuYW1lLCAidzoiKS5jbG9zZSgpCiAgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZSgpCiAgICAgICAgIHNlbGYuX3Rlc3QoKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZW9iaihzZWxmKToKLSAgICAgICAgZm9iaiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhiIlwwIiAqIDEwMjQpCiAgICAgICAgIHNlbGYuX2FkZF90ZXN0ZmlsZShmb2JqKQogICAgICAgICBmb2JqLnNlZWsoMCkKICAgICAgICAgc2VsZi5fdGVzdChmaWxlb2JqPWZvYmopCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgogICAgICAgICBzZWxmLl9jcmVhdGVfdGVzdHRhcigpCi0gICAgICAgIGRhdGEgPSBvcGVuKHNlbGYudGFybmFtZSwgInJiIikucmVhZCgpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRhcm5hbWUsICJyYiIpIGFzIGZvYmo6CisgICAgICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKICAgICAgICAgZm9iaiA9IGlvLkJ5dGVzSU8oZGF0YSkKICAgICAgICAgc2VsZi5fYWRkX3Rlc3RmaWxlKGZvYmopCiAgICAgICAgIGZvYmouc2VlaygwKQpAQCAtMTA4NCw2ICsxNDkwLDMwIEBACiAgICAgICAgIHNlbGYuX2NyZWF0ZV90ZXN0dGFyKCJ3OmJ6MiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCB0YXJmaWxlLm9wZW4sIHRtcG5hbWUsICJhIikKIAorICAgICMgQXBwZW5kIG1vZGUgaXMgc3VwcG9zZWQgdG8gZmFpbCBpZiB0aGUgdGFyZmlsZSB0byBhcHBlbmQgdG8KKyAgICAjIGRvZXMgbm90IGVuZCB3aXRoIGEgemVybyBibG9jay4KKyAgICBkZWYgX3Rlc3RfZXJyb3Ioc2VsZiwgZGF0YSk6CisgICAgICAgIHdpdGggb3BlbihzZWxmLnRhcm5hbWUsICJ3YiIpIGFzIGZvYmo6CisgICAgICAgICAgICBmb2JqLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRhcmZpbGUuUmVhZEVycm9yLCBzZWxmLl9hZGRfdGVzdGZpbGUpCisKKyAgICBkZWYgdGVzdF9udWxsKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKGIiIikKKworICAgIGRlZiB0ZXN0X2luY29tcGxldGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfZXJyb3IoYiJcMCIgKiAxMykKKworICAgIGRlZiB0ZXN0X3ByZW1hdHVyZV9lb2Yoc2VsZik6CisgICAgICAgIGRhdGEgPSB0YXJmaWxlLlRhckluZm8oImZvbyIpLnRvYnVmKCkKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcihkYXRhKQorCisgICAgZGVmIHRlc3RfdHJhaWxpbmdfZ2FyYmFnZShzZWxmKToKKyAgICAgICAgZGF0YSA9IHRhcmZpbGUuVGFySW5mbygiZm9vIikudG9idWYoKQorICAgICAgICBzZWxmLl90ZXN0X2Vycm9yKGRhdGEgKyBiIlwwIiAqIDEzKQorCisgICAgZGVmIHRlc3RfaW52YWxpZChzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9lcnJvcihiImEiICogNTEyKQorCiAKIGNsYXNzIExpbWl0c1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMTU3LDYgKzE1ODcsOTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJmaWxlLml0bigweGZmZmZmZmZmKSwgYiJceDgwXHgwMFx4MDBceDAwXHhmZlx4ZmZceGZmXHhmZiIpCiAKIAorY2xhc3MgQ29udGV4dE1hbmFnZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRhci5jbG9zZWQsICJjbG9zZWQgaW5zaWRlIHJ1bnRpbWUgY29udGV4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCisKKyAgICBkZWYgdGVzdF9jbG9zZWQoc2VsZik6CisgICAgICAgICMgVGhlIF9fZW50ZXJfXygpIG1ldGhvZCBpcyBzdXBwb3NlZCB0byByYWlzZSBJT0Vycm9yCisgICAgICAgICMgaWYgdGhlIFRhckZpbGUgb2JqZWN0IGlzIGFscmVhZHkgY2xvc2VkLgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odGFybmFtZSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgIHdpdGggdGFyOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIHRoZSBJT0Vycm9yIGV4Y2VwdGlvbiBpcyBwYXNzZWQgdGhyb3VnaCBwcm9wZXJseS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGV4YzoKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShleGMuZXhjZXB0aW9uLCBJT0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndyb25nIGV4Y2VwdGlvbiByYWlzZWQgaW4gY29udGV4dCBtYW5hZ2VyIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X25vX2VvZihzZWxmKToKKyAgICAgICAgIyBfX2V4aXRfXygpIG11c3Qgbm90IHdyaXRlIGVuZC1vZi1hcmNoaXZlIGJsb2NrcyBpZiBhbgorICAgICAgICAjIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSwgMCwKKyAgICAgICAgICAgICAgICAiY29udGV4dCBtYW5hZ2VyIHdyb3RlIGFuIGVuZC1vZi1hcmNoaXZlIGJsb2NrIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKKworICAgIGRlZiB0ZXN0X2VvZihzZWxmKToKKyAgICAgICAgIyBfX2V4aXRfXygpIG11c3Qgd3JpdGUgZW5kLW9mLWFyY2hpdmUgYmxvY2tzLCBpLmUuIGNhbGwKKyAgICAgICAgIyBUYXJGaWxlLmNsb3NlKCkgaWYgdGhlcmUgd2FzIG5vIGVycm9yLgorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9zLnBhdGguZ2V0c2l6ZSh0bXBuYW1lKSwgMCwKKyAgICAgICAgICAgICAgICAiY29udGV4dCBtYW5hZ2VyIHdyb3RlIG5vIGVuZC1vZi1hcmNoaXZlIGJsb2NrIikKKworICAgIGRlZiB0ZXN0X2ZpbGVvYmooc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IF9fZXhpdF9fKCkgZGlkIG5vdCBjbG9zZSB0aGUgZXh0ZXJuYWwgZmlsZQorICAgICAgICAjIG9iamVjdC4KKyAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICJ3YiIpIGFzIGZvYmo6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPSJ3IikgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24KKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZvYmouY2xvc2VkLCAiZXh0ZXJuYWwgZmlsZSBvYmplY3Qgd2FzIGNsb3NlZCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQorCisKK2NsYXNzIExpbmtFbXVsYXRpb25UZXN0KFJlYWRUZXN0KToKKworICAgICMgVGVzdCBmb3IgaXNzdWUgIzg3NDEgcmVncmVzc2lvbi4gT24gcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQKKyAgICAjIHN5bWJvbGljIG9yIGhhcmQgbGlua3MgdGFyZmlsZSB0cmllcyB0byBleHRyYWN0IHRoZXNlIHR5cGVzIG9mIG1lbWJlcnMgYXMKKyAgICAjIHRoZSByZWd1bGFyIGZpbGVzIHRoZXkgcG9pbnQgdG8uCisgICAgZGVmIF90ZXN0X2xpbmtfZXh0cmFjdGlvbihzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi50YXIuZXh0cmFjdChuYW1lLCBURU1QRElSKQorICAgICAgICBkYXRhID0gb3Blbihvcy5wYXRoLmpvaW4oVEVNUERJUiwgbmFtZSksICJyYiIpLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCisKKyAgICAjIFdoZW4gODg3OSBnZXRzIGZpeGVkLCB0aGlzIHdpbGwgbmVlZCB0byBjaGFuZ2UuIEN1cnJlbnRseSBvbiBXaW5kb3dzCisgICAgIyB3ZSBoYXZlIG9zLnBhdGguaXNsaW5rIGJ1dCBubyBvcy5saW5rLCBzbyB0aGVzZSB0ZXN0cyBmYWlsIHdpdGhvdXQgdGhlCisgICAgIyBmb2xsb3dpbmcgc2tpcCB1bnRpbCBsaW5rIGlzIGNvbXBsZXRlZC4KKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MucGF0aCwgImlzbGluayIpLAorICAgICAgICAgICAgICAgICAgICAgIlNraXAgZW11bGF0aW9uIC0gaGFzIG9zLnBhdGguaXNsaW5rIGJ1dCBub3Qgb3MubGluayIpCisgICAgZGVmIHRlc3RfaGFyZGxpbmtfZXh0cmFjdGlvbjEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCJ1c3Rhci9sbmt0eXBlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihvcy5wYXRoLCAiaXNsaW5rIiksCisgICAgICAgICAgICAgICAgICAgICAiU2tpcCBlbXVsYXRpb24gLSBoYXMgb3MucGF0aC5pc2xpbmsgYnV0IG5vdCBvcy5saW5rIikKKyAgICBkZWYgdGVzdF9oYXJkbGlua19leHRyYWN0aW9uMihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9saW5rX2V4dHJhY3Rpb24oIi4vdXN0YXIvbGlua3Rlc3QyL2xua3R5cGUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAic3ltbGluayIpLAorICAgICAgICAgICAgICAgICAgICAgIlNraXAgZW11bGF0aW9uIGlmIHN5bWxpbmsgZXhpc3RzIikKKyAgICBkZWYgdGVzdF9zeW1saW5rX2V4dHJhY3Rpb24xKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X2xpbmtfZXh0cmFjdGlvbigidXN0YXIvc3ltdHlwZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MsICJzeW1saW5rIiksCisgICAgICAgICAgICAgICAgICAgICAiU2tpcCBlbXVsYXRpb24gaWYgc3ltbGluayBleGlzdHMiKQorICAgIGRlZiB0ZXN0X3N5bWxpbmtfZXh0cmFjdGlvbjIoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbGlua19leHRyYWN0aW9uKCIuL3VzdGFyL2xpbmt0ZXN0Mi9zeW10eXBlIikKKworCiBjbGFzcyBHemlwTWlzY1JlYWRUZXN0KE1pc2NSZWFkVGVzdCk6CiAgICAgdGFybmFtZSA9IGd6aXBuYW1lCiAgICAgbW9kZSA9ICJyOmd6IgpAQCAtMTE5OCwxMCArMTcyMCwxNiBAQAogICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiaW5maW5pdGUgbG9vcCBkZXRlY3RlZCBpbiB0YXJmaWxlLm9wZW4oKSIpCiAgICAgICAgICAgICAgICAgc2VsZi5oaXRfZW9mID0gc2VsZi50ZWxsKCkgPT0gbGVuKHNlbGYuZ2V0dmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoTXlCeXRlc0lPLCBzZWxmKS5yZWFkKG4pCisgICAgICAgICAgICBkZWYgc2VlayhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5oaXRfZW9mID0gRmFsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoTXlCeXRlc0lPLCBzZWxmKS5zZWVrKCphcmdzKQogCiAgICAgICAgIGRhdGEgPSBiejIuY29tcHJlc3ModGFyZmlsZS5UYXJJbmZvKCJmb28iKS50b2J1ZigpKQogICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZGF0YSkgKyAxKToKLSAgICAgICAgICAgIHRhcmZpbGUub3BlbihmaWxlb2JqPU15Qnl0ZXNJTyhkYXRhWzp4XSksIG1vZGU9bW9kZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJmaWxlLm9wZW4oZmlsZW9iaj1NeUJ5dGVzSU8oZGF0YVs6eF0pLCBtb2RlPW1vZGUpCisgICAgICAgICAgICBleGNlcHQgdGFyZmlsZS5SZWFkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcyAjIHdlIGhhdmUgbm8gaW50ZXJlc3QgaW4gUmVhZEVycm9ycwogCiAgICAgZGVmIHRlc3RfcGFydGlhbF9pbnB1dChzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF9wYXJ0aWFsX2lucHV0KCJyIikKQEAgLTEyMTEsNiArMTczOSw3IEBACiAKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQudW5saW5rKFRFTVBESVIpCiAgICAgb3MubWFrZWRpcnMoVEVNUERJUikKIAogICAgIHRlc3RzID0gWwpAQCAtMTIzMSwyMCArMTc2MCwyMiBAQAogICAgICAgICBBcHBlbmRUZXN0LAogICAgICAgICBMaW1pdHNUZXN0LAogICAgICAgICBNaXNjVGVzdCwKKyAgICAgICAgQ29udGV4dE1hbmFnZXJUZXN0LAogICAgIF0KIAogICAgIGlmIGhhc2F0dHIob3MsICJsaW5rIik6CiAgICAgICAgIHRlc3RzLmFwcGVuZChIYXJkbGlua1Rlc3QpCisgICAgZWxzZToKKyAgICAgICAgdGVzdHMuYXBwZW5kKExpbmtFbXVsYXRpb25UZXN0KQogCi0gICAgZm9iaiA9IG9wZW4odGFybmFtZSwgInJiIikKLSAgICBkYXRhID0gZm9iai5yZWFkKCkKLSAgICBmb2JqLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4odGFybmFtZSwgInJiIikgYXMgZm9iajoKKyAgICAgICAgZGF0YSA9IGZvYmoucmVhZCgpCiAKICAgICBpZiBnemlwOgogICAgICAgICAjIENyZWF0ZSB0ZXN0dGFyLnRhci5neiBhbmQgYWRkIGd6aXAtc3BlY2lmaWMgdGVzdHMuCi0gICAgICAgIHRhciA9IGd6aXAub3BlbihnemlwbmFtZSwgIndiIikKLSAgICAgICAgdGFyLndyaXRlKGRhdGEpCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIHN1cHBvcnQudW5saW5rKGd6aXBuYW1lKQorICAgICAgICB3aXRoIGd6aXAub3BlbihnemlwbmFtZSwgIndiIikgYXMgdGFyOgorICAgICAgICAgICAgdGFyLndyaXRlKGRhdGEpCiAKICAgICAgICAgdGVzdHMgKz0gWwogICAgICAgICAgICAgR3ppcE1pc2NSZWFkVGVzdCwKQEAgLTEyNTYsOSArMTc4NywxMiBAQAogCiAgICAgaWYgYnoyOgogICAgICAgICAjIENyZWF0ZSB0ZXN0dGFyLnRhci5iejIgYW5kIGFkZCBiejItc3BlY2lmaWMgdGVzdHMuCisgICAgICAgIHN1cHBvcnQudW5saW5rKGJ6Mm5hbWUpCiAgICAgICAgIHRhciA9IGJ6Mi5CWjJGaWxlKGJ6Mm5hbWUsICJ3YiIpCi0gICAgICAgIHRhci53cml0ZShkYXRhKQotICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0YXIud3JpdGUoZGF0YSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGVzdHMgKz0gWwogICAgICAgICAgICAgQnoyTWlzY1JlYWRUZXN0LApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90Y2wucHkgYi9MaWIvdGVzdC90ZXN0X3RjbC5weQppbmRleCA2MzJkNWUzLi5kODYyNDZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RjbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RjbC5weQpAQCAtMSw2ICsxLDcgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTEyNywyMSArMTI4LDIwIEBACiAgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLHRjbC5ldmFsLCdwYWNrYWdlIHJlcXVpcmUgRE5FJykKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAnUmVxdWlyZXMgV2luZG93cycpCiAgICAgZGVmIHRlc3RMb2FkV2l0aFVOQyhzZWxmKToKLSAgICAgICAgaW1wb3J0IHN5cwotICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIHJldHVybgotCiAgICAgICAgICMgQnVpbGQgYSBVTkMgcGF0aCBmcm9tIHRoZSByZWd1bGFyIHBhdGguCiAgICAgICAgICMgU29tZXRoaW5nIGxpa2UKICAgICAgICAgIyAgIFxcJUNPTVBVVEVSTkFNRSVcYyRccHl0aG9uMjdccHl0aG9uLmV4ZQogCiAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKQogICAgICAgICBpZiBmdWxsbmFtZVsxXSAhPSAnOic6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdBYnNvbHV0ZSBwYXRoIHNob3VsZCBoYXZlIGRyaXZlIHBhcnQnKQogICAgICAgICB1bmNfbmFtZSA9IHInXFwlc1wlcyRcJXMnICUgKG9zLmVudmlyb25bJ0NPTVBVVEVSTkFNRSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbG5hbWVbMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZVszOl0pCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1bmNfbmFtZSk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnQ2Fubm90IGNvbm5lY3QgdG8gVU5DIFBhdGgnKQogCiAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgogICAgICAgICAgICAgZW52LnVuc2V0KCJUQ0xfTElCUkFSWSIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbG5ldGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CmluZGV4IGMxZWVhMDYuLmE3OGI5MzggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5CkBAIC0xLDEyICsxLDEyIEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0Ci1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdGVsbmV0bGliCiBpbXBvcnQgdGltZQogaW1wb3J0IGNvbnRleHRsaWIKIAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAordGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBIT1NUID0gc3VwcG9ydC5IT1NUCiAKQEAgLTE3LDkgKzE3LDEwIEBACiAgICAgICAgIGNvbm4sIGFkZHIgPSBzZXJ2LmFjY2VwdCgpCiAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgZmluYWxseToKICAgICAgICAgc2Vydi5jbG9zZSgpCi0gICAgICAgIGNvbm4uY2xvc2UoKQogICAgICAgICBldnQuc2V0KCkKIAogY2xhc3MgR2VuZXJhbFRlc3RzKFRlc3RDYXNlKToKQEAgLTI4NSw3ICsyODYsNyBAQAogICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQogICAgICAgICBjbWQgPSBuZWdvLnNlZW4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxlbihjbWQpID4gMCkgIyB3ZSBleHBlY3QgYXQgbGVhc3Qgb25lIGNvbW1hbmQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNtZFs6MV0gaW4gc2VsZi5jbWRzKQorICAgICAgICBzZWxmLmFzc2VydEluKGNtZFs6MV0sIHNlbGYuY21kcykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbWRbMToyXSwgdGwuTk9PUFQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YV9sZW4sIGxlbih0eHQgKyBjbWQpKQogICAgICAgICBuZWdvLnNiX2dldHRlciA9IE5vbmUgIyBicmVhayB0aGUgbmVnbyA9PiB0ZWxuZXQgY3ljbGUKQEAgLTMzMiw3ICszMzMsNyBAQAogICAgICAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQoW2FdKQogICAgICAgICAgICAgdGVsbmV0LnNldF9kZWJ1Z2xldmVsKDEpCiAgICAgICAgICAgICB0eHQgPSB0ZWxuZXQucmVhZF9hbGwoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIgaW4gdGVsbmV0Ll9tZXNzYWdlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYiwgdGVsbmV0Ll9tZXNzYWdlcykKICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgdGVzdF9kZWJ1Z2xldmVsX3dyaXRlKHNlbGYpOgpAQCAtMzQwLDcgKzM0MSw3IEBACiAgICAgICAgIHRlbG5ldC5zZXRfZGVidWdsZXZlbCgxKQogICAgICAgICB0ZWxuZXQud3JpdGUoYid4eHgnKQogICAgICAgICBleHBlY3RlZCA9ICJzZW5kIGIneHh4J1xuIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gdGVsbmV0Ll9tZXNzYWdlcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgdGVsbmV0Ll9tZXNzYWdlcykKIAogICAgIGRlZiB0ZXN0X2RlYnVnX2FjY2VwdHNfc3RyX3BvcnQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTA2OTUKQEAgLTM0OSw3ICszNTAsNyBAQAogICAgICAgICAgICAgdGVsbmV0Ll9tZXNzYWdlcyA9ICcnCiAgICAgICAgIHRlbG5ldC5zZXRfZGVidWdsZXZlbCgxKQogICAgICAgICB0ZWxuZXQubXNnKCd0ZXN0JykKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKHRlbG5ldC5fbWVzc2FnZXMsIHInMC4qdGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodGVsbmV0Ll9tZXNzYWdlcywgcicwLip0ZXN0JykKIAogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQppbmRleCBmNzJiMGIxLi4yZDI5ODg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKQEAgLTMsMTUgKzMsMTEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHJlCi1pbXBvcnQgZXJybm8KIGltcG9ydCB3YXJuaW5ncwogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi13YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PVJ1bnRpbWVXYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0ibWt0ZW1wIiwgbW9kdWxlPV9fbmFtZV9fKQogCiBpZiBoYXNhdHRyKG9zLCAnc3RhdCcpOgogICAgIGltcG9ydCBzdGF0CkBAIC0yNCw5ICsyMCw3IEBACiAKICMgVEVTVF9GSUxFUyBtYXkgbmVlZCB0byBiZSB0d2Vha2VkIGZvciBzeXN0ZW1zIGRlcGVuZGluZyBvbiB0aGUgbWF4aW11bQogIyBudW1iZXIgb2YgZmlsZXMgdGhhdCBjYW4gYmUgb3BlbmVkIGF0IG9uZSB0aW1lIChzZWUgdWxpbWl0IC1uKQotaWYgc3lzLnBsYXRmb3JtID09ICdtYWMnOgotICAgIFRFU1RfRklMRVMgPSAzMgotZWxpZiBzeXMucGxhdGZvcm0gaW4gKCdvcGVuYnNkMycsICdvcGVuYnNkNCcpOgoraWYgc3lzLnBsYXRmb3JtIGluICgnb3BlbmJzZDMnLCAnb3BlbmJzZDQnKToKICAgICBURVNUX0ZJTEVTID0gNDgKIGVsc2U6CiAgICAgVEVTVF9GSUxFUyA9IDEwMApAQCAtNDAsNiArMzQsMTYgQEAKIAogICAgIHN0cl9jaGVjayA9IHJlLmNvbXBpbGUociJbYS16QS1aMC05Xy1dezZ9JCIpCiAKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3dhcm5pbmdzX21hbmFnZXIgPSBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCkKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlci5fX2VudGVyX18oKQorICAgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9UnVudGltZVdhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9Im1rdGVtcCIsIG1vZHVsZT1fX25hbWVfXykKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlci5fX2V4aXRfXyhOb25lLCBOb25lLCBOb25lKQorCisKICAgICBkZWYgZmFpbE9uRXhjZXB0aW9uKHNlbGYsIHdoYXQsIGVpPU5vbmUpOgogICAgICAgICBpZiBlaSBpcyBOb25lOgogICAgICAgICAgICAgZWkgPSBzeXMuZXhjX2luZm8oKQpAQCAtODEsNyArODUsOCBAQAogICAgICAgICAgICAgImdldHRlbXBkaXIiIDogMSwKICAgICAgICAgICAgICJ0ZW1wZGlyIiA6IDEsCiAgICAgICAgICAgICAidGVtcGxhdGUiIDogMSwKLSAgICAgICAgICAgICJTcG9vbGVkVGVtcG9yYXJ5RmlsZSIgOiAxCisgICAgICAgICAgICAiU3Bvb2xlZFRlbXBvcmFyeUZpbGUiIDogMSwKKyAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkiIDogMSwKICAgICAgICAgfQogCiAgICAgICAgIHVuZXhwID0gW10KQEAgLTk5LDYgKzEwNCw3IEBACiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuciA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKIAogICAgIGRlZiB0ZXN0X2dldF9zaXhfY2hhcl9zdHIoc2VsZik6CiAgICAgICAgICMgX1JhbmRvbU5hbWVTZXF1ZW5jZSByZXR1cm5zIGEgc2l4LWNoYXJhY3RlciBzdHJpbmcKQEAgLTExMyw3ICsxMTksNyBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZShURVNUX0ZJTEVTKToKICAgICAgICAgICAgIHMgPSBuZXh0KHIpCiAgICAgICAgICAgICBzZWxmLm5hbWVDaGVjayhzLCAnJywgJycsICcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzIGluIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHMsIGRpY3QpCiAgICAgICAgICAgICBkaWN0W3NdID0gMQogCiAgICAgZGVmIHN1cHBvcnRzX2l0ZXIoc2VsZik6CkBAIC0xMjcsNyArMTMzLDcgQEAKICAgICAgICAgICAgICAgICBpZiBpID09IDIwOgogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBmYWlsT25FeGNlcHRpb24oIml0ZXJhdGlvbiIpCisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiaXRlcmF0aW9uIikKIAogdGVzdF9jbGFzc2VzLmFwcGVuZCh0ZXN0X19SYW5kb21OYW1lU2VxdWVuY2UpCiAKQEAgLTE0Miw4ICsxNDgsNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGVuKGNhbmQpID09IDApCiAgICAgICAgIGZvciBjIGluIGNhbmQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjLCBzdHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBub3QgYSBzdHJpbmciICUgYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjLCBzdHIpCiAKICAgICBkZWYgdGVzdF93YW50ZWRfZGlycyhzZWxmKToKICAgICAgICAgIyBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGlyZWN0b3JpZXMKQEAgLTE2MCwxNCArMTY1LDE0IEBACiAgICAgICAgICAgICBmb3IgZW52bmFtZSBpbiAnVE1QRElSJywgJ1RFTVAnLCAnVE1QJzoKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0ZW52KGVudm5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbm90IGRpcm5hbWU6IHJhaXNlIFZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlybmFtZSBpbiBjYW5kKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5nZXRjd2QoKQogICAgICAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgb3MuZXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcm5hbWUgaW4gY2FuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGlybmFtZSwgY2FuZCkKIAogICAgICAgICAgICAgIyBOb3QgcHJhY3RpY2FsIHRvIHRyeSB0byB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIE9TLXNwZWNpZmljCiAgICAgICAgICAgICAjIHBhdGhzIGluIHRoaXMgbGlzdC4KQEAgLTE4NCw3ICsxODksNyBAQAogICAgIGRlZiB0ZXN0X3JldHZhbChzZWxmKToKICAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyByZXR1cm5zIGEgX1JhbmRvbU5hbWVTZXF1ZW5jZSBvYmplY3QKICAgICAgICAgb2JqID0gdGVtcGZpbGUuX2dldF9jYW5kaWRhdGVfbmFtZXMoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShvYmosIHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLCB0ZW1wZmlsZS5fUmFuZG9tTmFtZVNlcXVlbmNlKQogCiAgICAgZGVmIHRlc3Rfc2FtZV90aGluZyhzZWxmKToKICAgICAgICAgIyBfZ2V0X2NhbmRpZGF0ZV9uYW1lcyBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QKQEAgLTI1OSw3ICsyNjQsNyBAQAogICAgICAgICBmaWxlID0gc2VsZi5kb19jcmVhdGUoKQogICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZmlsZS5uYW1lKS5zdF9tb2RlKQogICAgICAgICBleHBlY3RlZCA9IDBvNjAwCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcsICdtYWMnKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CiAgICAgICAgICAgICAjIFRoZXJlJ3Mgbm8gZGlzdGluY3Rpb24gYW1vbmcgJ3VzZXInLCAnZ3JvdXAnIGFuZCAnd29ybGQnOwogICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTMyNiw3ICszMzEsNyBAQAogICAgICAgICAjIGdldHRlbXBwcmVmaXggcmV0dXJucyBhIG5vbmVtcHR5IHByZWZpeCBzdHJpbmcKICAgICAgICAgcCA9IHRlbXBmaWxlLmdldHRlbXBwcmVmaXgoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHAsIHN0cikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsZW4ocCkgPiAwKQogCiAgICAgZGVmIHRlc3RfdXNhYmxlX3RlbXBsYXRlKHNlbGYpOgpAQCAtNDgyLDcgKzQ4Nyw3IEBACiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwbzc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMG83MDAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcsICdtYWMnKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgogICAgICAgICAgICAgICAgICMgVGhlcmUncyBubyBkaXN0aW5jdGlvbiBhbW9uZyAndXNlcicsICdncm91cCcgYW5kICd3b3JsZCc7CiAgICAgICAgICAgICAgICAgIyByZXBsaWNhdGUgdGhlICd1c2VyJyBiaXRzLgogICAgICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC01MDEsMTEgKzUwNiwxMyBAQAogICAgICMgV2UgbXVzdCBhbHNvIHN1cHByZXNzIHRoZSBSdW50aW1lV2FybmluZyBpdCBnZW5lcmF0ZXMuCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmRpciA9IHRlbXBmaWxlLm1rZHRlbXAoKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgc2VsZi5kaXI6CiAgICAgICAgICAgICBvcy5ybWRpcihzZWxmLmRpcikKICAgICAgICAgICAgIHNlbGYuZGlyID0gTm9uZQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKIAogICAgIGNsYXNzIG1rdGVtcGVkOgogICAgICAgICBfdW5saW5rID0gb3MudW5saW5rCkBAIC05MDAsNiArOTA3LDE1MiBAQAogaWYgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlIGlzIG5vdCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlOgogICAgIHRlc3RfY2xhc3Nlcy5hcHBlbmQodGVzdF9UZW1wb3JhcnlGaWxlKQogCisKKyMgSGVscGVyIGZvciB0ZXN0X2RlbF9vbl9zaHV0ZG93bgorY2xhc3MgTnVsbGVkTW9kdWxlczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKm1vZHVsZXMpOgorICAgICAgICBzZWxmLnJlZnMgPSBbbW9kLl9fZGljdF9fIGZvciBtb2QgaW4gbW9kdWxlc10KKyAgICAgICAgc2VsZi5jb250ZW50cyA9IFtyZWYuY29weSgpIGZvciByZWYgaW4gc2VsZi5yZWZzXQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgZm9yIGQgaW4gc2VsZi5yZWZzOgorICAgICAgICAgICAgZm9yIGtleSBpbiBkOgorICAgICAgICAgICAgICAgIGRba2V5XSA9IE5vbmUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBmb3IgZCwgYyBpbiB6aXAoc2VsZi5yZWZzLCBzZWxmLmNvbnRlbnRzKToKKyAgICAgICAgICAgIGQuY2xlYXIoKQorICAgICAgICAgICAgZC51cGRhdGUoYykKKworY2xhc3MgdGVzdF9UZW1wb3JhcnlEaXJlY3RvcnkoVEMpOgorICAgICIiIlRlc3QgVGVtcG9yYXJ5RGlyZWN0b3J5KCkuIiIiCisKKyAgICBkZWYgZG9fY3JlYXRlKHNlbGYsIGRpcj1Ob25lLCBwcmU9IiIsIHN1Zj0iIiwgcmVjdXJzZT0xKToKKyAgICAgICAgaWYgZGlyIGlzIE5vbmU6CisgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdG1wID0gdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KGRpcj1kaXIsIHByZWZpeD1wcmUsIHN1ZmZpeD1zdWYpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbE9uRXhjZXB0aW9uKCJUZW1wb3JhcnlEaXJlY3RvcnkiKQorICAgICAgICBzZWxmLm5hbWVDaGVjayh0bXAubmFtZSwgZGlyLCBwcmUsIHN1ZikKKyAgICAgICAgIyBDcmVhdGUgYSBzdWJkaXJlY3RvcnkgYW5kIHNvbWUgZmlsZXMKKyAgICAgICAgaWYgcmVjdXJzZToKKyAgICAgICAgICAgIHNlbGYuZG9fY3JlYXRlKHRtcC5uYW1lLCBwcmUsIHN1ZiwgcmVjdXJzZS0xKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcC5uYW1lLCAidGVzdC50eHQiKSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJIZWxsbyB3b3JsZCEiKQorICAgICAgICByZXR1cm4gdG1wCisKKyAgICBkZWYgdGVzdF9ta2R0ZW1wX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgQ2hlY2sgbm8gYWRkaXRpb25hbCBleGNlcHRpb24gaWYgbWtkdGVtcCBmYWlscworICAgICAgICAjIFByZXZpb3VzbHkgd291bGQgcmFpc2UgQXR0cmlidXRlRXJyb3IgaW5zdGVhZAorICAgICAgICAjIChub3RlZCBhcyBwYXJ0IG9mIElzc3VlICMxMDE4OCkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyBub25leGlzdGVudDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvcik6CisgICAgICAgICAgICB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoZGlyPW5vbmV4aXN0ZW50KQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfY2xlYW51cChzZWxmKToKKyAgICAgICAgIyBBIFRlbXBvcmFyeURpcmVjdG9yeSBpcyBkZWxldGVkIHdoZW4gY2xlYW5lZCB1cAorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IHNlbGYuZG9fY3JlYXRlKGRpcj1kaXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZC5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGVtcG9yYXJ5RGlyZWN0b3J5ICVzIGRvZXMgbm90IGV4aXN0IiAlIGQubmFtZSkKKyAgICAgICAgICAgIGQuY2xlYW51cCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGQubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVtcG9yYXJ5RGlyZWN0b3J5ICVzIGV4aXN0cyBhZnRlciBjbGVhbnVwIiAlIGQubmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJtZGlyKGRpcikKKworICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2RlbF9vbl9jb2xsZWN0aW9uKHNlbGYpOgorICAgICAgICAjIEEgVGVtcG9yYXJ5RGlyZWN0b3J5IGlzIGRlbGV0ZWQgd2hlbiBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZCA9IHNlbGYuZG9fY3JlYXRlKGRpcj1kaXIpCisgICAgICAgICAgICBuYW1lID0gZC5uYW1lCisgICAgICAgICAgICBkZWwgZCAjIFJlbHkgb24gcmVmY291bnRpbmcgdG8gaW52b2tlIF9fZGVsX18KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVtcG9yYXJ5RGlyZWN0b3J5ICVzIGV4aXN0cyBhZnRlciBfX2RlbF9fIiAlIG5hbWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5ybWRpcihkaXIpCisKKyAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlICMgU2VlIGlzc3VlICMxMDE4OAorICAgIGRlZiB0ZXN0X2RlbF9vbl9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBBIFRlbXBvcmFyeURpcmVjdG9yeSBtYXkgYmUgY2xlYW5lZCB1cCBkdXJpbmcgc2h1dGRvd24KKyAgICAgICAgIyBNYWtlIHN1cmUgaXQgd29ya3Mgd2l0aCB0aGUgcmVsZXZhbnQgbW9kdWxlcyBudWxsZWQgb3V0CisgICAgICAgIHdpdGggc2VsZi5kb19jcmVhdGUoKSBhcyBkaXI6CisgICAgICAgICAgICBkID0gc2VsZi5kb19jcmVhdGUoZGlyPWRpcikKKyAgICAgICAgICAgICMgTWltaWMgdGhlIG51bGxpbmcgb3V0IG9mIG1vZHVsZXMgdGhhdAorICAgICAgICAgICAgIyBvY2N1cnMgZHVyaW5nIHN5c3RlbSBzaHV0ZG93bgorICAgICAgICAgICAgbW9kdWxlcyA9IFtvcywgb3MucGF0aF0KKyAgICAgICAgICAgIGlmIGhhc19zdGF0OgorICAgICAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKHN0YXQpCisgICAgICAgICAgICAjIEN1cnJlbnRseSBicm9rZW4sIHNvIHN1cHByZXNzIHRoZSB3YXJuaW5nCisgICAgICAgICAgICAjIHRoYXQgaXMgb3RoZXJ3aXNlIGVtaXR0ZWQgb24gc3Rkb3V0CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgZXJyOgorICAgICAgICAgICAgICAgIHdpdGggTnVsbGVkTW9kdWxlcygqbW9kdWxlcyk6CisgICAgICAgICAgICAgICAgICAgIGQuY2xlYW51cCgpCisgICAgICAgICAgICAjIEN1cnJlbnRseSBicm9rZW4sIHNvIHN0b3Agc3B1cmlvdXMgZXhjZXB0aW9uIGJ5CisgICAgICAgICAgICAjIGluZGljYXRpbmcgdGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZAorICAgICAgICAgICAgZC5fY2xvc2VkID0gVHJ1ZQorICAgICAgICAgICAgIyBBbmQgdGhpcyBhc3NlcnQgd2lsbCBmYWlsLCBhcyBleHBlY3RlZCBieSB0aGUKKyAgICAgICAgICAgICMgdW5pdHRlc3QgZGVjb3JhdG9yLi4uCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGQubmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVtcG9yYXJ5RGlyZWN0b3J5ICVzIGV4aXN0cyBhZnRlciBjbGVhbnVwIiAlIGQubmFtZSkKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzX29uX2NsZWFudXAoc2VsZik6CisgICAgICAgICMgVHdvIGtpbmRzIG9mIHdhcm5pbmcgb24gc2h1dGRvd24KKyAgICAgICAgIyAgIElzc3VlIDEwODg4OiBtYXkgd3JpdGUgdG8gc3RkZXJyIGlmIG1vZHVsZXMgYXJlIG51bGxlZCBvdXQKKyAgICAgICAgIyAgIFJlc291cmNlV2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBieSBfX2RlbF9fCisgICAgICAgIHdpdGggc2VsZi5kb19jcmVhdGUoKSBhcyBkaXI6CisgICAgICAgICAgICBpZiBvcy5zZXAgIT0gJ1xcJzoKKyAgICAgICAgICAgICAgICAjIEVtYmVkIGEgYmFja3NsYXNoIGluIG9yZGVyIHRvIG1ha2Ugc3VyZSBzdHJpbmcgZXNjYXBpbmcKKyAgICAgICAgICAgICAgICAjIGluIHRoZSBkaXNwbGF5ZWQgZXJyb3IgbWVzc2FnZSBpcyBkZWFsdCB3aXRoIGNvcnJlY3RseQorICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICdcXGNoZWNrX2JhY2tzbGFzaF9oYW5kbGluZycKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3VmZml4ID0gJycKKyAgICAgICAgICAgIGQgPSBzZWxmLmRvX2NyZWF0ZShkaXI9ZGlyLCBzdWY9c3VmZml4KQorCisgICAgICAgICAgICAjQ2hlY2sgZm9yIHRoZSBJc3N1ZSAxMDg4OCBtZXNzYWdlCisgICAgICAgICAgICBtb2R1bGVzID0gW29zLCBvcy5wYXRoXQorICAgICAgICAgICAgaWYgaGFzX3N0YXQ6CisgICAgICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoc3RhdCkKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnI6CisgICAgICAgICAgICAgICAgd2l0aCBOdWxsZWRNb2R1bGVzKCptb2R1bGVzKToKKyAgICAgICAgICAgICAgICAgICAgZC5jbGVhbnVwKCkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnIuZ2V0dmFsdWUoKS5yZXBsYWNlKCdcXFxcJywgJ1xcJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIndoaWxlIGNsZWFuaW5nIHVwIiwgIG1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGQubmFtZSwgIG1lc3NhZ2UpCisKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHRoZSByZXNvdXJjZSB3YXJuaW5nCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdJbXBsaWNpdGx5JywgUmVzb3VyY2VXYXJuaW5nKSwgcXVpZXQ9RmFsc2UpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgZC5fX2RlbF9fKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZC5uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIF9fZGVsX18iICUgZC5uYW1lKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2FuIGJlIGNsZWFuZWQtdXAgbWFueSB0aW1lcyB3aXRob3V0IGVycm9yCisgICAgICAgIGQgPSBzZWxmLmRvX2NyZWF0ZSgpCisgICAgICAgIGQuY2xlYW51cCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGQuY2xlYW51cCgpCisgICAgICAgICAgICBkLmNsZWFudXAoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmZhaWxPbkV4Y2VwdGlvbigiY2xlYW51cCIpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgQ2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgZCA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgd2l0aCBkIGFzIG5hbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMobmFtZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGQubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhuYW1lKSkKKworCit0ZXN0X2NsYXNzZXMuYXBwZW5kKHRlc3RfVGVtcG9yYXJ5RGlyZWN0b3J5KQorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQppbmRleCBhODZmODZiLi44OTRhNDkzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZC5weQpAQCAtMiw4ICsyLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCByYW5kb20KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotaW1wb3J0IF90aHJlYWQgYXMgdGhyZWFkCit0aHJlYWQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogaW1wb3J0IHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWFrcmVmCiAKIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwogCkBAIC02MSw3ICs2Myw3IEBACiAKICAgICBkZWYgdGVzdF9zdGFja19zaXplKHNlbGYpOgogICAgICAgICAjIFZhcmlvdXMgc3RhY2sgc2l6ZSB0ZXN0cy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAiaW50aWFsIHN0YWNrIHNpemUgaXMgbm90IDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5zdGFja19zaXplKCksIDAsICJpbml0aWFsIHN0YWNrIHNpemUgaXMgbm90IDAiKQogCiAgICAgICAgIHRocmVhZC5zdGFja19zaXplKDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhyZWFkLnN0YWNrX3NpemUoKSwgMCwgInN0YWNrX3NpemUgbm90IHJlc2V0IHRvIGRlZmF1bHQiKQpAQCAtMTAwLDYgKzEwMiwzMiBAQAogCiAgICAgICAgICAgICB0aHJlYWQuc3RhY2tfc2l6ZSgwKQogCisgICAgZGVmIHRlc3RfX2NvdW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIF9jb3VudCgpIGZ1bmN0aW9uLgorICAgICAgICBvcmlnID0gdGhyZWFkLl9jb3VudCgpCisgICAgICAgIG11dCA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgbXV0LmFjcXVpcmUoKQorICAgICAgICBzdGFydGVkID0gW10KKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHN0YXJ0ZWQuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICBtdXQuYWNxdWlyZSgpCisgICAgICAgICAgICBtdXQucmVsZWFzZSgpCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRhc2ssICgpKQorICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuX2NvdW50KCksIG9yaWcgKyAxKQorICAgICAgICAjIEFsbG93IHRoZSB0YXNrIHRvIGZpbmlzaC4KKyAgICAgICAgbXV0LnJlbGVhc2UoKQorICAgICAgICAjIFRoZSBvbmx5IHJlbGlhYmxlIHdheSB0byBiZSBzdXJlIHRoYXQgdGhlIHRocmVhZCBlbmRlZCBmcm9tIHRoZQorICAgICAgICAjIGludGVycHJldGVyJ3MgcG9pbnQgb2YgdmlldyBpcyB0byB3YWl0IGZvciB0aGUgZnVuY3Rpb24gb2JqZWN0IHRvIGJlCisgICAgICAgICMgZGVzdHJveWVkLgorICAgICAgICBkb25lID0gW10KKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZih0YXNrLCBsYW1iZGEgXzogZG9uZS5hcHBlbmQoTm9uZSkpCisgICAgICAgIGRlbCB0YXNrCisgICAgICAgIHdoaWxlIG5vdCBkb25lOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRocmVhZC5fY291bnQoKSwgb3JpZykKKwogCiBjbGFzcyBCYXJyaWVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBudW1fdGhyZWFkcyk6CkBAIC0xNjYsOCArMTk0LDQ4IEBACiAgICAgbG9ja3R5cGUgPSB0aHJlYWQuYWxsb2NhdGVfbG9jawogCiAKK2NsYXNzIFRlc3RGb3JrSW5UaHJlYWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWFkX2ZkLCBzZWxmLndyaXRlX2ZkID0gb3MucGlwZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKKyAgICAgICAgICAgICAgICAgICAgICJUaGlzIHRlc3QgaXMgb25seSBhcHByb3ByaWF0ZSBmb3IgUE9TSVgtbGlrZSBzeXN0ZW1zLiIpCisgICAgQHN1cHBvcnQucmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfZm9ya2ludGhyZWFkKHNlbGYpOgorICAgICAgICBkZWYgdGhyZWFkMSgpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKSAjIGZvcmsgaW4gYSB0aHJlYWQKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoMSkgIyBleGl0IHRoZSBjaGlsZAorCisgICAgICAgICAgICBpZiBwaWQgPT0gMDogIyBjaGlsZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkX2ZkKQorICAgICAgICAgICAgICAgICAgICBvcy53cml0ZShzZWxmLndyaXRlX2ZkLCBiIk9LIikKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICAgICAgZWxzZTogIyBwYXJlbnQKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlX2ZkKQorCisgICAgICAgIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKHRocmVhZDEsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoc2VsZi5yZWFkX2ZkLCAyKSwgYiJPSyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBmb3JrKCkgaW4gdGhyZWFkIikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5yZWFkX2ZkKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5jbG9zZShzZWxmLndyaXRlX2ZkKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGhyZWFkUnVubmluZ1Rlc3RzLCBCYXJyaWVyVGVzdCwgTG9ja1Rlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRocmVhZFJ1bm5pbmdUZXN0cywgQmFycmllclRlc3QsIExvY2tUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0Rm9ya0luVGhyZWFkKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkX2ltcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CmluZGV4IGU0ZDE4ODIuLjc3OTE5MzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5CkBAIC0xMCwxMCArMTAsNiBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBzaHV0aWwKLSMgSEFDSzogcHJlbG9hZGluZyB0ZW1wZmlsZSBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgZmFpbHVyZXMgd2hlbiB0ZXN0X3RlbXBmaWxlCi0jIGlzIHJ1biBhZnRlciB0ZXN0X3RocmVhZGVkX2ltcG9ydC4gIFRoaXMgaGFzIHRvIGRvIHdpdGggZGFyayBzZWNyZXRzIG9mCi0jIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGFuZCBwaGFudG9tIGNvcGllcyBvZiB0aGUgcmFuZG9tIG1vZHVsZS4KLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdmVyYm9zZSwgaW1wb3J0X21vZHVsZSwgcnVuX3VuaXR0ZXN0LCBURVNURk4KIHRocmVhZCA9IGltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CmluZGV4IDc0NWM2MDIuLjJkZmQzYTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKQEAgLTE2LDExICsxNiwxMCBAQAogTlVNX1RIUkVBRFMgPSAyMAogRklMRVNfUEVSX1RIUkVBRCA9IDUwCiAKLWltcG9ydCBfdGhyZWFkIGFzIHRocmVhZCAjIElmIHRoaXMgZmFpbHMsIHdlIGNhbid0IHRlc3QgdGhpcyBtb2R1bGUKLWltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0ZW1wZmlsZQogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdGhyZWFkaW5nX3NldHVwLCB0aHJlYWRpbmdfY2xlYW51cCwgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgdGhyZWFkaW5nX3NldHVwLCB0aHJlYWRpbmdfY2xlYW51cCwgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCit0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaW8KIGZyb20gdHJhY2ViYWNrIGltcG9ydCBwcmludF9leGMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggZjk3N2E3Zi4uNWY5OWIyZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTEsMTYgKzEsMTYgQEAKICMgVmVyeSBydWRpbWVudGFyeSB0ZXN0IG9mIHRocmVhZGluZyBtb2R1bGUKIAogaW1wb3J0IHRlc3Quc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UKLWltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHN0cmlwX3B5dGhvbl9zdGRlcnIKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQogaW1wb3J0IHN5cwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IF90aHJlYWQKK190aHJlYWQgPSB0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCit0aHJlYWRpbmcgPSB0ZXN0LnN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCitpbXBvcnQgb3MKIGltcG9ydCBzdWJwcm9jZXNzCiAKIGZyb20gdGVzdCBpbXBvcnQgbG9ja190ZXN0cwpAQCAtNTksNyArNTksMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgc2VsZi5ucnVubmluZy5nZXQoKSkpCiAKIAotY2xhc3MgVGhyZWFkVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX3RocmVhZHMgPSB0ZXN0LnN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdGVzdC5zdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQorICAgICAgICB0ZXN0LnN1cHBvcnQucmVhcF9jaGlsZHJlbigpCisKKworY2xhc3MgVGhyZWFkVGVzdHMoQmFzZVRlc3RDYXNlKToKIAogICAgICMgQ3JlYXRlIGEgYnVuY2ggb2YgdGhyZWFkcywgbGV0IGVhY2ggZG8gc29tZSB3b3JrLCB3YWl0IHVudGlsIGFsbCBhcmUKICAgICAjIGRvbmUuCkBAIC04OSw3ICs5OCw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuaXNfYWxpdmUoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIFx3KyAtP1xkK1wpPicsIHJlcHIodCkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCc8VGVzdFRocmVhZFwoLiosIHN0b3BwZWQgLT9cZCtcKT4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIodCkpKQogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ2FsbCB0YXNrcyBkb25lJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1ydW5uaW5nLmdldCgpLCAwKQpAQCAtMTE1LDkgKzEyNSw4IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRocmVhZGluZy5zdGFja19zaXplKDI2MjE0NCkKICAgICAgICAgZXhjZXB0IF90aHJlYWQuZXJyb3I6Ci0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCdwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIHRocmVhZCBzdGFjayBzaXplJykKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoCisgICAgICAgICAgICAgICAgJ3BsYXRmb3JtIGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgdGhyZWFkIHN0YWNrIHNpemUnKQogICAgICAgICBzZWxmLnRlc3RfdmFyaW91c19vcHMoKQogICAgICAgICB0aHJlYWRpbmcuc3RhY2tfc2l6ZSgwKQogCkBAIC0xMjgsOSArMTM3LDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGhyZWFkaW5nLnN0YWNrX3NpemUoMHgxMDAwMDApCiAgICAgICAgIGV4Y2VwdCBfdGhyZWFkLmVycm9yOgotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgncGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyB0aHJlYWQgc3RhY2sgc2l6ZScpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KAorICAgICAgICAgICAgICAgICdwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IGNoYW5naW5nIHRocmVhZCBzdGFjayBzaXplJykKICAgICAgICAgc2VsZi50ZXN0X3ZhcmlvdXNfb3BzKCkKICAgICAgICAgdGhyZWFkaW5nLnN0YWNrX3NpemUoMCkKIApAQCAtMTQ3LDkgKzE1NSw4IEBACiAgICAgICAgIHRpZCA9IF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZChmLCAobXV0ZXgsKSkKICAgICAgICAgIyBXYWl0IGZvciB0aGUgdGhyZWFkIHRvIGZpbmlzaC4KICAgICAgICAgbXV0ZXguYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aWQgaW4gdGhyZWFkaW5nLl9hY3RpdmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRocmVhZGluZy5fYWN0aXZlW3RpZF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fRHVtbXlUaHJlYWQpKQorICAgICAgICBzZWxmLmFzc2VydEluKHRpZCwgdGhyZWFkaW5nLl9hY3RpdmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0aHJlYWRpbmcuX2FjdGl2ZVt0aWRdLCB0aHJlYWRpbmcuX0R1bW15VGhyZWFkKQogICAgICAgICBkZWwgdGhyZWFkaW5nLl9hY3RpdmVbdGlkXQogCiAgICAgIyBQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjKCkgaXMgYSBDUHl0aG9uLW9ubHkgZ2ltbWljaywgbm90IChjdXJyZW50bHkpCkBAIC0xNTgsOSArMTY1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaW1wb3J0IGN0eXBlcwogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCJ0ZXN0X1B5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMgY2FuJ3QgaW1wb3J0IGN0eXBlcyIpCi0gICAgICAgICAgICByZXR1cm4gICMgY2FuJ3QgZG8gYW55dGhpbmcKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgaW1wb3J0IGN0eXBlcyIpCiAKICAgICAgICAgc2V0X2FzeW5jX2V4YyA9IGN0eXBlcy5weXRob25hcGkuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YwogCkBAIC0xNjksNiArMTc0LDI3IEBACiAKICAgICAgICAgZXhjZXB0aW9uID0gY3R5cGVzLnB5X29iamVjdChBc3luY0V4YykKIAorICAgICAgICAjIEZpcnN0IGNoZWNrIGl0IHdvcmtzIHdoZW4gc2V0dGluZyB0aGUgZXhjZXB0aW9uIGZyb20gdGhlIHNhbWUgdGhyZWFkLgorICAgICAgICB0aWQgPSBfdGhyZWFkLmdldF9pZGVudCgpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0ID0gc2V0X2FzeW5jX2V4YyhjdHlwZXMuY19sb25nKHRpZCksIGV4Y2VwdGlvbikKKyAgICAgICAgICAgICMgVGhlIGV4Y2VwdGlvbiBpcyBhc3luYywgc28gd2UgbWlnaHQgaGF2ZSB0byBrZWVwIHRoZSBWTSBidXN5IHVudGlsCisgICAgICAgICAgICAjIGl0IG5vdGljZXMuCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEFzeW5jRXhjOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnV0IGl0IHJlZmxlY3RzIHRoZSBpbnRlbnQuIElmIHdlIHdhbnRlZAorICAgICAgICAgICAgIyB0byBiZSBzbWFydGVyIHRoZSBhYm92ZSBsb29wIHdvdWxkbid0IGJlIGluZmluaXRlLgorICAgICAgICAgICAgc2VsZi5mYWlsKCJBc3luY0V4YyBub3QgcmFpc2VkIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDEpICMgb25lIHRocmVhZCBzdGF0ZSBtb2RpZmllZAorICAgICAgICBleGNlcHQgVW5ib3VuZExvY2FsRXJyb3I6CisgICAgICAgICAgICAjIFRoZSBleGNlcHRpb24gd2FzIHJhaXNlZCB0b28gcXVpY2tseSBmb3IgdXMgdG8gZ2V0IHRoZSByZXN1bHQuCisgICAgICAgICAgICBwYXNzCisKICAgICAgICAgIyBgd29ya2VyX3N0YXJ0ZWRgIGlzIHNldCBieSB0aGUgdGhyZWFkIHdoZW4gaXQncyBpbnNpZGUgYSB0cnkvZXhjZXB0CiAgICAgICAgICMgYmxvY2sgd2FpdGluZyB0byBjYXRjaCB0aGUgYXN5bmNocm9ub3VzbHkgc2V0IEFzeW5jRXhjIGV4Y2VwdGlvbi4KICAgICAgICAgIyBgd29ya2VyX3Nhd19leGNlcHRpb25gIGlzIHNldCBieSB0aGUgdGhyZWFkIHVwb24gY2F0Y2hpbmcgdGhhdApAQCAtMjQ1LDkgKzI3MSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgidGVzdF9maW5hbGl6ZV93aXRoX3J1bm5uaW5nX3RocmVhZCBjYW4ndCBpbXBvcnQgY3R5cGVzIikKLSAgICAgICAgICAgIHJldHVybiAgIyBjYW4ndCBkbyBhbnl0aGluZworICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbm5vdCBpbXBvcnQgY3R5cGVzIikKIAogICAgICAgICByYyA9IHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICItYyIsICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgY3R5cGVzLCBzeXMsIHRpbWUsIF90aHJlYWQKQEAgLTMwMiw2ICszMjYsOCBAQAogICAgICAgICAgICAgIiIiXSwKICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRvdXQuY2xvc2UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwLnN0ZGVyci5jbG9zZSkKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgcmMgPSBwLnJldHVybmNvZGUKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyYyA9PSAyLCAiaW50ZXJwcmV0ZWQgd2FzIGJsb2NrZWQiKQpAQCAtMzI2LDMwICszNTIsMzAgQEAKICAgICAgICAgICAgICIiIl0sCiAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHAuc3Rkb3V0LmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5zdGRlcnIuY2xvc2UpCiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnN0cmlwKCksCiAgICAgICAgICAgICBiIldva2UgdXAsIHNsZWVwIGZ1bmN0aW9uIGlzOiA8YnVpbHQtaW4gZnVuY3Rpb24gc2xlZXA+IikKLSAgICAgICAgc3RkZXJyID0gcmUuc3ViKGJyIl5cW1xkKyByZWZzXF0iLCBiIiIsIHN0ZGVyciwgcmUuTVVMVElMSU5FKS5zdHJpcCgpCisgICAgICAgIHN0ZGVyciA9IHN0cmlwX3B5dGhvbl9zdGRlcnIoc3RkZXJyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZGVyciwgYiIiKQogCiAgICAgZGVmIHRlc3RfZW51bWVyYXRlX2FmdGVyX2pvaW4oc2VsZik6CiAgICAgICAgICMgVHJ5IGhhcmQgdG8gdHJpZ2dlciAjMTcwMzQ0ODogYSB0aHJlYWQgaXMgc3RpbGwgcmV0dXJuZWQgaW4KICAgICAgICAgIyB0aHJlYWRpbmcuZW51bWVyYXRlKCkgYWZ0ZXIgaXQgaGFzIGJlZW4gam9pbigpZWQuCiAgICAgICAgIGVudW0gPSB0aHJlYWRpbmcuZW51bWVyYXRlCi0gICAgICAgIG9sZF9pbnRlcnZhbCA9IHN5cy5nZXRjaGVja2ludGVydmFsKCkKKyAgICAgICAgb2xkX2ludGVydmFsID0gc3lzLmdldHN3aXRjaGludGVydmFsKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMSwgMTAwKToKLSAgICAgICAgICAgICAgICAjIFRyeSBhIGNvdXBsZSB0aW1lcyBhdCBlYWNoIHRocmVhZC1zd2l0Y2hpbmcgaW50ZXJ2YWwKLSAgICAgICAgICAgICAgICAjIHRvIGdldCBtb3JlIGludGVybGVhdmluZ3MuCi0gICAgICAgICAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwoaSAvLyA1KQorICAgICAgICAgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbChpICogMC4wMDAyKQogICAgICAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGE6IE5vbmUpCiAgICAgICAgICAgICAgICAgdC5zdGFydCgpCiAgICAgICAgICAgICAgICAgdC5qb2luKCkKICAgICAgICAgICAgICAgICBsID0gZW51bSgpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0IGluIGwsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbih0LCBsLAogICAgICAgICAgICAgICAgICAgICAiIzE3MDM0NDggdHJpZ2dlcmVkIGFmdGVyICVkIHRyaWFsczogJXMiICUgKGksIGwpKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwob2xkX2ludGVydmFsKQorICAgICAgICAgICAgc3lzLnNldHN3aXRjaGludGVydmFsKG9sZF9pbnRlcnZhbCkKIAogICAgIGRlZiB0ZXN0X25vX3JlZmN5Y2xlX3Rocm91Z2hfdGFyZ2V0KHNlbGYpOgogICAgICAgICBjbGFzcyBSdW5TZWxmRnVuY3Rpb24ob2JqZWN0KToKQEAgLTM3MCw3ICszOTYsNyBAQAogICAgICAgICB3ZWFrX2N5Y2xpY19vYmplY3QgPSB3ZWFrcmVmLnJlZihjeWNsaWNfb2JqZWN0KQogICAgICAgICBjeWNsaWNfb2JqZWN0LnRocmVhZC5qb2luKCkKICAgICAgICAgZGVsIGN5Y2xpY19vYmplY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB3ZWFrX2N5Y2xpY19vYmplY3QoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2Vha19jeWNsaWNfb2JqZWN0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSgnJWQgcmVmZXJlbmNlcyBzdGlsbCBhcm91bmQnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5nZXRyZWZjb3VudCh3ZWFrX2N5Y2xpY19vYmplY3QoKSkpKQogCkBAIC0zNzgsNyArNDA0LDcgQEAKICAgICAgICAgd2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QgPSB3ZWFrcmVmLnJlZihyYWlzaW5nX2N5Y2xpY19vYmplY3QpCiAgICAgICAgIHJhaXNpbmdfY3ljbGljX29iamVjdC50aHJlYWQuam9pbigpCiAgICAgICAgIGRlbCByYWlzaW5nX2N5Y2xpY19vYmplY3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpLAorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3ZWFrX3JhaXNpbmdfY3ljbGljX29iamVjdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0oJyVkIHJlZmVyZW5jZXMgc3RpbGwgYXJvdW5kJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZ2V0cmVmY291bnQod2Vha19yYWlzaW5nX2N5Y2xpY19vYmplY3QoKSkpKQogCkBAIC0zOTUsOCArNDIxLDE0IEBACiAgICAgICAgIGUuaXNTZXQoKQogICAgICAgICB0aHJlYWRpbmcuYWN0aXZlQ291bnQoKQogCisgICAgZGVmIHRlc3RfcmVwcl9kYWVtb24oc2VsZik6CisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgnZGFlbW9uJyBpbiByZXByKHQpKQorICAgICAgICB0LmRhZW1vbiA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdkYWVtb24nIGluIHJlcHIodCkpCiAKLWNsYXNzIFRocmVhZEpvaW5PblNodXRkb3duKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgVGhyZWFkSm9pbk9uU2h1dGRvd24oQmFzZVRlc3RDYXNlKToKIAogICAgIGRlZiBfcnVuX2FuZF9qb2luKHNlbGYsIHNjcmlwdCk6CiAgICAgICAgIHNjcmlwdCA9ICIiImlmIDE6CkBAIC00MzIsMTEgKzQ2NCw5IEBACiAgICAgICAgIHNlbGYuX3J1bl9hbmRfam9pbihzY3JpcHQpCiAKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQogICAgIGRlZiB0ZXN0XzJfam9pbl9pbl9mb3JrZWRfcHJvY2VzcyhzZWxmKToKICAgICAgICAgIyBMaWtlIHRoZSB0ZXN0IGFib3ZlLCBidXQgZnJvbSBhIGZvcmtlZCBpbnRlcnByZXRlcgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCiAgICAgICAgICAgICBpZiBjaGlsZHBpZCAhPSAwOgpAQCAtNDUwLDE5ICs0ODAsMTYgQEAKICAgICAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9ydW5fYW5kX2pvaW4oc2NyaXB0KQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCiAgICAgZGVmIHRlc3RfM19qb2luX2luX2ZvcmtlZF9mcm9tX3RocmVhZChzZWxmKToKICAgICAgICAgIyBMaWtlIHRoZSB0ZXN0IGFib3ZlLCBidXQgZm9yaygpIHdhcyBjYWxsZWQgZnJvbSBhIHdvcmtlciB0aHJlYWQKICAgICAgICAgIyBJbiB0aGUgZm9ya2VkIHByb2Nlc3MsIHRoZSBtYWluIFRocmVhZCBvYmplY3QgbXVzdCBiZSBtYXJrZWQgYXMgc3RvcHBlZC4KLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKG9zLCAnZm9yaycpOgotICAgICAgICAgICAgcmV0dXJuCisKICAgICAgICAgIyBTa2lwIHBsYXRmb3JtcyB3aXRoIGtub3duIHByb2JsZW1zIGZvcmtpbmcgZnJvbSBhIHdvcmtlciB0aHJlYWQuCiAgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzODYzLgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvczJlbXgnKToKLSAgICAgICAgICAgIHByaW50KCdTa2lwcGluZyB0ZXN0XzNfam9pbl9pbl9mb3JrZWRfZnJvbV90aHJlYWQnCi0gICAgICAgICAgICAgICAgICAnIGR1ZSB0byBrbm93biBPUyBidWdzIG9uJywgc3lzLnBsYXRmb3JtLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdkdWUgdG8ga25vd24gT1MgYnVncyBvbiAnICsgc3lzLnBsYXRmb3JtKQogICAgICAgICBzY3JpcHQgPSAiIiJpZiAxOgogICAgICAgICAgICAgbWFpbl90aHJlYWQgPSB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKQogICAgICAgICAgICAgZGVmIHdvcmtlcigpOgpAQCAtNDg1LDkgKzUxMiw5IEBACiAgICAgZGVmIGFzc2VydFNjcmlwdEhhc091dHB1dChzZWxmLCBzY3JpcHQsIGV4cGVjdGVkX291dHB1dCk6CiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgc2NyaXB0XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgcmMgPSBwLndhaXQoKQotICAgICAgICBkYXRhID0gcC5zdGRvdXQucmVhZCgpLmRlY29kZSgpLnJlcGxhY2UoJ1xyJywgJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDAsICJVbmV4cGVjdGVkIGVycm9yIikKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZGF0YSA9IHN0ZG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwgIlVuZXhwZWN0ZWQgZXJyb3IiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQpAQCAtNjI5LDcgKzY1Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgb3V0cHV0KQogCiAKLWNsYXNzIFRocmVhZGluZ0V4Y2VwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRocmVhZGluZ0V4Y2VwdGlvblRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAgICAgIyBBIFJ1bnRpbWVFcnJvciBzaG91bGQgYmUgcmFpc2VkIGlmIFRocmVhZC5zdGFydCgpIGlzIGNhbGxlZAogICAgICMgbXVsdGlwbGUgdGltZXMuCiAgICAgZGVmIHRlc3Rfc3RhcnRfdGhyZWFkX2FnYWluKHNlbGYpOgpAQCAtNjU0LDggKzY4MSwxMSBAQAogY2xhc3MgTG9ja1Rlc3RzKGxvY2tfdGVzdHMuTG9ja1Rlc3RzKToKICAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuTG9jaykKIAotY2xhc3MgUkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgotICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5STG9jaykKK2NsYXNzIFB5UkxvY2tUZXN0cyhsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5fUHlSTG9jaykKKworY2xhc3MgQ1JMb2NrVGVzdHMobG9ja190ZXN0cy5STG9ja1Rlc3RzKToKKyAgICBsb2NrdHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuX0NSTG9jaykKIAogY2xhc3MgRXZlbnRUZXN0cyhsb2NrX3Rlc3RzLkV2ZW50VGVzdHMpOgogICAgIGV2ZW50dHlwZSA9IHN0YXRpY21ldGhvZCh0aHJlYWRpbmcuRXZlbnQpCkBAIC02NzMsMTQgKzcwMywxNyBAQAogY2xhc3MgQm91bmRlZFNlbWFwaG9yZVRlc3RzKGxvY2tfdGVzdHMuQm91bmRlZFNlbWFwaG9yZVRlc3RzKToKICAgICBzZW10eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5Cb3VuZGVkU2VtYXBob3JlKQogCitjbGFzcyBCYXJyaWVyVGVzdHMobG9ja190ZXN0cy5CYXJyaWVyVGVzdHMpOgorICAgIGJhcnJpZXJ0eXBlID0gc3RhdGljbWV0aG9kKHRocmVhZGluZy5CYXJyaWVyKQogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NrVGVzdHMsIFJMb2NrVGVzdHMsIEV2ZW50VGVzdHMsCisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChMb2NrVGVzdHMsIFB5UkxvY2tUZXN0cywgQ1JMb2NrVGVzdHMsIEV2ZW50VGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25Bc1JMb2NrVGVzdHMsIENvbmRpdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VtYXBob3JlVGVzdHMsIEJvdW5kZWRTZW1hcGhvcmVUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZFRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkSm9pbk9uU2h1dGRvd24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhcnJpZXJUZXN0cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmdfbG9jYWwucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weQppbmRleCBjOWQwZmRkLi5jODg2YTI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weQpAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICBsb2NhbC5zb21lb3RoZXJ2YXIgPSBOb25lCiAgICAgICAgIGdjLmNvbGxlY3QoKQogICAgICAgICBkZWFkbGlzdCA9IFt3ZWFrIGZvciB3ZWFrIGluIHdlYWtsaXN0IGlmIHdlYWsoKSBpcyBOb25lXQotICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGRlYWRsaXN0KSBpbiAobi0xLCBuKSwgKG4sIGxlbihkZWFkbGlzdCkpKQorICAgICAgICBzZWxmLmFzc2VydEluKGxlbihkZWFkbGlzdCksIChuLTEsIG4pLCAobiwgbGVuKGRlYWRsaXN0KSkpCiAKICAgICBkZWYgdGVzdF9kZXJpdmVkKHNlbGYpOgogICAgICAgICAjIElzc3VlIDMwODg6IGlmIHRoZXJlIGlzIGEgdGhyZWFkcyBzd2l0Y2ggaW5zaWRlIHRoZSBfX2luaXRfXwpAQCAtMTEyLDYgKzExMiwxNyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXNzZWQpCiAKKyAgICBkZWYgdGVzdF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTUyMjIzNworICAgICAgICBjbGFzcyBNeUxvY2FsKHNlbGYuX2xvY2FsKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBNeUxvY2FsKGE9MSkKKyAgICAgICAgTXlMb2NhbCgxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuX2xvY2FsLCBhPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5fbG9jYWwsIDEpCisKICAgICBkZWYgX3Rlc3Rfb25lX2NsYXNzKHNlbGYsIGMpOgogICAgICAgICBzZWxmLl9mYWlsZWQgPSAiTm8gZXJyb3IgbWVzc2FnZSBzZXQgb3IgY2xlYXJlZC4iCiAgICAgICAgIG9iaiA9IGMoKQpAQCAtMTczLDExICsxODQsNiBAQAogICAgICAgICAgICAgIiIiVG8gdGVzdCB0aGF0IHN1YmNsYXNzZXMgYmVoYXZlIHByb3Blcmx5LiIiIgogICAgICAgICBzZWxmLl90ZXN0X2RpY3RfYXR0cmlidXRlKExvY2FsU3ViY2xhc3MpCiAKLQotY2xhc3MgVGhyZWFkTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBCYXNlTG9jYWxUZXN0KToKLSAgICBfbG9jYWwgPSBfdGhyZWFkLl9sb2NhbAotCi0gICAgIyBGYWlscyBmb3IgdGhlIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uCiAgICAgZGVmIHRlc3RfY3ljbGVfY29sbGVjdGlvbihzZWxmKToKICAgICAgICAgY2xhc3MgWDoKICAgICAgICAgICAgIHBhc3MKQEAgLTE5MCw2ICsxOTYsMTAgQEAKICAgICAgICAgZ2MuY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKIAorCitjbGFzcyBUaHJlYWRMb2NhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UsIEJhc2VMb2NhbFRlc3QpOgorICAgIF9sb2NhbCA9IF90aHJlYWQuX2xvY2FsCisKIGNsYXNzIFB5VGhyZWFkaW5nTG9jYWxUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBCYXNlTG9jYWxUZXN0KToKICAgICBfbG9jYWwgPSBfdGhyZWFkaW5nX2xvY2FsLmxvY2FsCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQppbmRleCA3OTU5ZTkxLi40NmU0MDVhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CkBAIC0xLDExICsxLDEyIEBACiAiIiJQeVVuaXQgdGVzdGluZyB0aGF0IHRocmVhZHMgaG9ub3Igb3VyIHNpZ25hbCBzZW1hbnRpY3MiIiIKIAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKIGltcG9ydCBzaWduYWwKIGltcG9ydCBvcwogaW1wb3J0IHN5cwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQordGhyZWFkID0gaW1wb3J0X21vZHVsZSgnX3RocmVhZCcpCitpbXBvcnQgdGltZQogCiBpZiBzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybT09J3Jpc2Nvcyc6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbid0IHRlc3Qgc2lnbmFsIG9uICVzIiAlIHN5cy5wbGF0Zm9ybSkKQEAgLTM0LDEyICszNSwxMiBAQAogICAgIHNpZ25hbGxlZF9hbGwucmVsZWFzZSgpCiAKIGNsYXNzIFRocmVhZFNpZ25hbHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlRlc3Qgc2lnbmFsIGhhbmRsaW5nIHNlbWFudGljcyBvZiB0aHJlYWRzLgotICAgICAgIFdlIHNwYXduIGEgdGhyZWFkLCBoYXZlIHRoZSB0aHJlYWQgc2VuZCB0d28gc2lnbmFscywgYW5kCi0gICAgICAgd2FpdCBmb3IgaXQgdG8gZmluaXNoLiBDaGVjayB0aGF0IHdlIGdvdCBib3RoIHNpZ25hbHMKLSAgICAgICBhbmQgdGhhdCB0aGV5IHdlcmUgcnVuIGJ5IHRoZSBtYWluIHRocmVhZC4KLSAgICAiIiIKKwogICAgIGRlZiB0ZXN0X3NpZ25hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzaWduYWwgaGFuZGxpbmcgc2VtYW50aWNzIG9mIHRocmVhZHMuCisgICAgICAgICMgV2Ugc3Bhd24gYSB0aHJlYWQsIGhhdmUgdGhlIHRocmVhZCBzZW5kIHR3byBzaWduYWxzLCBhbmQKKyAgICAgICAgIyB3YWl0IGZvciBpdCB0byBmaW5pc2guIENoZWNrIHRoYXQgd2UgZ290IGJvdGggc2lnbmFscworICAgICAgICAjIGFuZCB0aGF0IHRoZXkgd2VyZSBydW4gYnkgdGhlIG1haW4gdGhyZWFkLgogICAgICAgICBzaWduYWxsZWRfYWxsLmFjcXVpcmUoKQogICAgICAgICBzZWxmLnNwYXduU2lnbmFsbGluZ1RocmVhZCgpCiAgICAgICAgIHNpZ25hbGxlZF9hbGwuYWNxdWlyZSgpCkBAIC02Niw2ICs2NywxMzYgQEAKICAgICBkZWYgc3Bhd25TaWduYWxsaW5nVGhyZWFkKHNlbGYpOgogICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChzZW5kX3NpZ25hbHMsICgpKQogCisgICAgZGVmIGFsYXJtX2ludGVycnVwdChzZWxmLCBzaWcsIGZyYW1lKToKKyAgICAgICAgcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKKworICAgIGRlZiB0ZXN0X2xvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oc2VsZik6CisgICAgICAgICMgTWltaWMgcmVjZWl2aW5nIGEgU0lHSU5UIChLZXlib2FyZEludGVycnVwdCkgd2l0aCBTSUdBTFJNIHdoaWxlIHN0dWNrCisgICAgICAgICMgaW4gYSBkZWFkbG9jay4KKyAgICAgICAgIyBYWFggdGhpcyB0ZXN0IGNhbiBmYWlsIHdoZW4gdGhlIGxlZ2FjeSAobm9uLXNlbWFwaG9yZSkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgIyBvZiBsb2NrcyBpcyB1c2VkIGluIHRocmVhZF9wdGhyZWFkLmgsIHNlZSBpc3N1ZSAjMTEyMjMuCisgICAgICAgIG9sZGFscm0gPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBzZWxmLmFsYXJtX2ludGVycnVwdCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9jayA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgIHQxID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0LCBsb2NrLmFjcXVpcmUsIHRpbWVvdXQ9NSkKKyAgICAgICAgICAgIGR0ID0gdGltZS50aW1lKCkgLSB0MQorICAgICAgICAgICAgIyBDaGVja2luZyB0aGF0IEtleWJvYXJkSW50ZXJydXB0IHdhcyByYWlzZWQgaXMgbm90IHN1ZmZpY2llbnQuCisgICAgICAgICAgICAjIFdlIHdhbnQgdG8gYXNzZXJ0IHRoYXQgbG9jay5hY3F1aXJlKCkgd2FzIGludGVycnVwdGVkIGJlY2F1c2UKKyAgICAgICAgICAgICMgb2YgdGhlIHNpZ25hbCwgbm90IHRoYXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdhcyBjYWxsZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICMgYWZ0ZXIgdGltZW91dCByZXR1cm4gb2YgbG9jay5hY3F1aXJlKCkgKHdoaWNoIGNhbiBmb29sIGFzc2VydFJhaXNlcykuCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoZHQsIDMuMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZGFscm0pCisKKyAgICBkZWYgdGVzdF9ybG9ja19hY3F1aXJlX2ludGVycnVwdGlvbihzZWxmKToKKyAgICAgICAgIyBNaW1pYyByZWNlaXZpbmcgYSBTSUdJTlQgKEtleWJvYXJkSW50ZXJydXB0KSB3aXRoIFNJR0FMUk0gd2hpbGUgc3R1Y2sKKyAgICAgICAgIyBpbiBhIGRlYWRsb2NrLgorICAgICAgICAjIFhYWCB0aGlzIHRlc3QgY2FuIGZhaWwgd2hlbiB0aGUgbGVnYWN5IChub24tc2VtYXBob3JlKSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIG9mIGxvY2tzIGlzIHVzZWQgaW4gdGhyZWFkX3B0aHJlYWQuaCwgc2VlIGlzc3VlICMxMTIyMy4KKyAgICAgICAgb2xkYWxybSA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIHNlbGYuYWxhcm1faW50ZXJydXB0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBybG9jayA9IHRocmVhZC5STG9jaygpCisgICAgICAgICAgICAjIEZvciByZWVudHJhbnQgbG9ja3MsIHRoZSBpbml0aWFsIGFjcXVpc2l0aW9uIG11c3QgYmUgaW4gYW5vdGhlcgorICAgICAgICAgICAgIyB0aHJlYWQuCisgICAgICAgICAgICBkZWYgb3RoZXJfdGhyZWFkKCk6CisgICAgICAgICAgICAgICAgcmxvY2suYWNxdWlyZSgpCisgICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChvdGhlcl90aHJlYWQsICgpKQorICAgICAgICAgICAgIyBXYWl0IHVudGlsIHdlIGNhbid0IGFjcXVpcmUgaXQgd2l0aG91dCBibG9ja2luZy4uLgorICAgICAgICAgICAgd2hpbGUgcmxvY2suYWNxdWlyZShibG9ja2luZz1GYWxzZSk6CisgICAgICAgICAgICAgICAgcmxvY2sucmVsZWFzZSgpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICB0MSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlib2FyZEludGVycnVwdCwgcmxvY2suYWNxdWlyZSwgdGltZW91dD01KQorICAgICAgICAgICAgZHQgPSB0aW1lLnRpbWUoKSAtIHQxCisgICAgICAgICAgICAjIFNlZSByYXRpb25hbGUgYWJvdmUgaW4gdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uCisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3MoZHQsIDMuMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0FMUk0sIG9sZGFscm0pCisKKyAgICBkZWYgYWNxdWlyZV9yZXRyaWVzX29uX2ludHIoc2VsZiwgbG9jayk6CisgICAgICAgIHNlbGYuc2lnX3JlY3ZkID0gRmFsc2UKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoc2lnbmFsLCBmcmFtZSk6CisgICAgICAgICAgICBzZWxmLnNpZ19yZWN2ZCA9IFRydWUKKyAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBteV9oYW5kbGVyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWYgb3RoZXJfdGhyZWFkKCk6CisgICAgICAgICAgICAgICAgIyBBY3F1aXJlIHRoZSBsb2NrIGluIGEgbm9uLW1haW4gdGhyZWFkLCBzbyB0aGlzIHRlc3Qgd29ya3MgZm9yCisgICAgICAgICAgICAgICAgIyBSTG9ja3MuCisgICAgICAgICAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGlzIGJsb2NrZWQgaW4gdGhlIGxvY2sgYWNxdWlyZSwgYW5kCisgICAgICAgICAgICAgICAgIyB0aGVuIHdha2UgaXQgdXAgd2l0aCB0aGlzLgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICAgICAgICAgIG9zLmtpbGwocHJvY2Vzc19waWQsIHNpZ25hbC5TSUdVU1IxKQorICAgICAgICAgICAgICAgICMgTGV0IHRoZSBtYWluIHRocmVhZCB0YWtlIHRoZSBpbnRlcnJ1cHQsIGhhbmRsZSBpdCwgYW5kIHJldHJ5CisgICAgICAgICAgICAgICAgIyB0aGUgbG9jayBhY3F1aXNpdGlvbi4gIFRoZW4gd2UnbGwgbGV0IGl0IHJ1bi4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0X25ld190aHJlYWQob3RoZXJfdGhyZWFkLCAoKSkKKyAgICAgICAgICAgICMgV2FpdCB1bnRpbCB3ZSBjYW4ndCBhY3F1aXJlIGl0IHdpdGhvdXQgYmxvY2tpbmcuLi4KKyAgICAgICAgICAgIHdoaWxlIGxvY2suYWNxdWlyZShibG9ja2luZz1GYWxzZSk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICByZXN1bHQgPSBsb2NrLmFjcXVpcmUoKSAgIyBCbG9jayB3aGlsZSB3ZSByZWNlaXZlIGEgc2lnbmFsLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc2lnX3JlY3ZkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG9sZF9oYW5kbGVyKQorCisgICAgZGVmIHRlc3RfbG9ja19hY3F1aXJlX3JldHJpZXNfb25faW50cihzZWxmKToKKyAgICAgICAgc2VsZi5hY3F1aXJlX3JldHJpZXNfb25faW50cih0aHJlYWQuYWxsb2NhdGVfbG9jaygpKQorCisgICAgZGVmIHRlc3RfcmxvY2tfYWNxdWlyZV9yZXRyaWVzX29uX2ludHIoc2VsZik6CisgICAgICAgIHNlbGYuYWNxdWlyZV9yZXRyaWVzX29uX2ludHIodGhyZWFkLlJMb2NrKCkpCisKKyAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF90aW1lZF9hY3F1aXJlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdG8gbWFrZSBzdXJlIHdlIHJlY29tcHV0ZSBsb2NrIGFjcXVpc2l0aW9uIHRpbWVvdXRzIHdoZW4gd2UKKyAgICAgICAgIyByZWNlaXZlIGEgc2lnbmFsLiAgQ2hlY2sgdGhpcyBieSByZXBlYXRlZGx5IGludGVycnVwdGluZyBhIGxvY2sKKyAgICAgICAgIyBhY3F1aXJlIGluIHRoZSBtYWluIHRocmVhZCwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoZSBsb2NrIGFjcXVpcmUgdGltZXMKKyAgICAgICAgIyBvdXQgYWZ0ZXIgdGhlIHJpZ2h0IGFtb3VudCBvZiB0aW1lLgorICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBvbmx5IGJlaGF2ZXMgYXMgZXhwZWN0ZWQgaWYgQyBzaWduYWxzIGdldCBkZWxpdmVyZWQKKyAgICAgICAgIyB0byB0aGUgbWFpbiB0aHJlYWQuICBPdGhlcndpc2UgbG9jay5hY3F1aXJlKCkgaXRzZWxmIGRvZXNuJ3QgZ2V0CisgICAgICAgICMgaW50ZXJydXB0ZWQgYW5kIHRoZSB0ZXN0IHRyaXZpYWxseSBzdWNjZWVkcy4KKyAgICAgICAgc2VsZi5zdGFydCA9IE5vbmUKKyAgICAgICAgc2VsZi5lbmQgPSBOb25lCisgICAgICAgIHNlbGYuc2lnc19yZWN2ZCA9IDAKKyAgICAgICAgZG9uZSA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZG9uZS5hY3F1aXJlKCkKKyAgICAgICAgbG9jayA9IHRocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgbG9jay5hY3F1aXJlKCkKKyAgICAgICAgZGVmIG15X2hhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICBzZWxmLnNpZ3NfcmVjdmQgKz0gMQorICAgICAgICBvbGRfaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1VTUjEsIG15X2hhbmRsZXIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlZiB0aW1lZF9hY3F1aXJlKCk6CisgICAgICAgICAgICAgICAgc2VsZi5zdGFydCA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgbG9jay5hY3F1aXJlKHRpbWVvdXQ9MC41KQorICAgICAgICAgICAgICAgIHNlbGYuZW5kID0gdGltZS50aW1lKCkKKyAgICAgICAgICAgIGRlZiBzZW5kX3NpZ25hbHMoKToKKyAgICAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSg0MCk6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikKKyAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChwcm9jZXNzX3BpZCwgc2lnbmFsLlNJR1VTUjEpCisgICAgICAgICAgICAgICAgZG9uZS5yZWxlYXNlKCkKKworICAgICAgICAgICAgIyBTZW5kIHRoZSBzaWduYWxzIGZyb20gdGhlIG5vbi1tYWluIHRocmVhZCwgc2luY2UgdGhlIG1haW4gdGhyZWFkCisgICAgICAgICAgICAjIGlzIHRoZSBvbmx5IG9uZSB0aGF0IGNhbiBwcm9jZXNzIHNpZ25hbHMuCisgICAgICAgICAgICB0aHJlYWQuc3RhcnRfbmV3X3RocmVhZChzZW5kX3NpZ25hbHMsICgpKQorICAgICAgICAgICAgdGltZWRfYWNxdWlyZSgpCisgICAgICAgICAgICAjIFdhaXQgZm9yIHRocmVhZCB0byBmaW5pc2gKKyAgICAgICAgICAgIGRvbmUuYWNxdWlyZSgpCisgICAgICAgICAgICAjIFRoaXMgYWxsb3dzIGZvciBzb21lIHRpbWluZyBhbmQgc2NoZWR1bGluZyBpbXByZWNpc2lvbgorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHNlbGYuZW5kIC0gc2VsZi5zdGFydCwgMi4wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNlbGYuZW5kIC0gc2VsZi5zdGFydCwgMC4zKQorICAgICAgICAgICAgIyBJZiB0aGUgc2lnbmFsIGlzIHJlY2VpdmVkIHNldmVyYWwgdGltZXMgYmVmb3JlIFB5RXJyX0NoZWNrU2lnbmFscygpCisgICAgICAgICAgICAjIGlzIGNhbGxlZCwgdGhlIGhhbmRsZXIgd2lsbCBnZXQgY2FsbGVkIGxlc3MgdGhhbiA0MCB0aW1lcy4gSnVzdAorICAgICAgICAgICAgIyBjaGVjayBpdCdzIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UuCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc2VsZi5zaWdzX3JlY3ZkLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkX2hhbmRsZXIpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIGdsb2JhbCBzaWduYWxfYmxhY2tib2FyZApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CmluZGV4IDY1YjI3MzUuLjg0OTlhZjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RpbWUucHkKQEAgLTIsNyArMiw5IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKIAogY2xhc3MgVGltZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTksMTAgKzIxLDEwIEBACiAgICAgICAgIHRpbWUuY2xvY2soKQogCiAgICAgZGVmIHRlc3RfY29udmVyc2lvbnMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLmN0aW1lKHNlbGYudCkKLSAgICAgICAgICAgICAgICAgICAgID09IHRpbWUuYXNjdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGludCh0aW1lLm1rdGltZSh0aW1lLmxvY2FsdGltZShzZWxmLnQpKSkKLSAgICAgICAgICAgICAgICAgICAgID09IGludChzZWxmLnQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuY3RpbWUoc2VsZi50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lLmFzY3RpbWUodGltZS5sb2NhbHRpbWUoc2VsZi50KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHRpbWUubWt0aW1lKHRpbWUubG9jYWx0aW1lKHNlbGYudCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQoc2VsZi50KSkKIAogICAgIGRlZiB0ZXN0X3NsZWVwKHNlbGYpOgogICAgICAgICB0aW1lLnNsZWVwKDEuMikKQEAgLTQ1LDY4ICs0Nyw2MSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCclZicpCiAKLSAgICBkZWYgdGVzdF9zdHJmdGltZV9ib3VuZHNfY2hlY2tpbmcoc2VsZik6CisgICAgZGVmIF9ib3VuZHNfY2hlY2tpbmcoc2VsZiwgZnVuYz10aW1lLnN0cmZ0aW1lKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBzdHJmdGltZSgpIGNoZWNrcyB0aGUgYm91bmRzIG9mIHRoZSB2YXJpb3VzIHBhcnRzCiAgICAgICAgICNvZiB0aGUgdGltZSB0dXBsZSAoMCBpcyB2YWxpZCBmb3IgKmFsbCogdmFsdWVzKS4KIAotICAgICAgICAjIENoZWNrIHllYXIgWzE5MDAsIG1heChpbnQpXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQotICAgICAgICBpZiB0aW1lLmFjY2VwdDJkeWVhcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLTEsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIC0xKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkpCisgICAgICAgICMgVGhlIHllYXIgZmllbGQgaXMgdGVzdGVkIGJ5IG90aGVyIHRlc3QgY2FzZXMgYWJvdmUKKwogICAgICAgICAjIENoZWNrIG1vbnRoIFsxLCAxMl0gKyB6ZXJvIHN1cHBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIC0xLCAxLCAwLCAwLCAwLCAwLCAxLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxMywgMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQogICAgICAgICAjIENoZWNrIGRheSBvZiBtb250aCBbMSwgMzFdICsgemVybyBzdXBwb3J0Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAtMSwgMCwgMCwgMCwgMCwgMSwgLTEpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMzIsIDAsIDAsIDAsIDAsIDEsIC0xKSkKICAgICAgICAgIyBDaGVjayBob3VyIFswLCAyM10KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIC0xLCAwLCAwLCAwLCAxLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAyNCwgMCwgMCwgMCwgMSwgLTEpKQogICAgICAgICAjIENoZWNrIG1pbnV0ZSBbMCwgNTldCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAtMSwgMCwgMCwgMSwgLTEpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgNjAsIDAsIDAsIDEsIC0xKSkKICAgICAgICAgIyBDaGVjayBzZWNvbmQgWzAsIDYxXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgLTEsIDAsIDEsIC0xKSkKICAgICAgICAgIyBDOTkgb25seSByZXF1aXJlcyBhbGxvd2luZyBmb3Igb25lIGxlYXAgc2Vjb25kLCBidXQgUHl0aG9uJ3MgZG9jcyBzYXkKICAgICAgICAgIyBhbGxvdyB0d28gbGVhcCBzZWNvbmRzICgwLi42MSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDYyLCAwLCAxLCAtMSkpCiAgICAgICAgICMgTm8gY2hlY2sgZm9yIHVwcGVyLWJvdW5kIGRheSBvZiB3ZWVrOwogICAgICAgICAjICB2YWx1ZSBmb3JjZWQgaW50byByYW5nZSBieSBhIGBgJSA3YGAgY2FsY3VsYXRpb24uCiAgICAgICAgICMgU3RhcnQgY2hlY2sgYXQgLTIgc2luY2UgZ2V0dG1hcmcoKSBpbmNyZW1lbnRzIHZhbHVlIGJlZm9yZSB0YWtpbmcKICAgICAgICAgIyAgbW9kdWxvLgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgLTIsIDEsIC0xKSkKICAgICAgICAgIyBDaGVjayBkYXkgb2YgdGhlIHllYXIgWzEsIDM2Nl0gKyB6ZXJvIHN1cHBvcnQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZS5zdHJmdGltZSwgJycsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDE5MDAsIDEsIDEsIDAsIDAsIDAsIDAsIC0xLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuc3RyZnRpbWUsICcnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxOTAwLCAxLCAxLCAwLCAwLCAwLCAwLCAzNjcsIC0xKSkKLSAgICAgICAgIyBDaGVjayBkYXlsaWdodCBzYXZpbmdzIGZsYWcgWy0xLCAxXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgLTIpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0aW1lLnN0cmZ0aW1lLCAnJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTkwMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMikpCisKKyAgICBkZWYgdGVzdF9zdHJmdGltZV9ib3VuZGluZ19jaGVjayhzZWxmKToKKyAgICAgICAgc2VsZi5fYm91bmRzX2NoZWNraW5nKGxhbWJkYSB0dXA6IHRpbWUuc3RyZnRpbWUoJycsIHR1cCkpCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3ZhbHVlc19mb3JfemVybyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB1c2luZyBhbGwgemVyb3MgdXNlcyB0aGUgcHJvcGVyIGRlZmF1bHQgdmFsdWVzLgogICAgICAgICAjIE5vIHRlc3QgZm9yIGRheWxpZ2h0IHNhdmluZ3Mgc2luY2Ugc3RyZnRpbWUoKSBkb2VzIG5vdCBjaGFuZ2Ugb3V0cHV0CiAgICAgICAgICMgYmFzZWQgb24gaXRzIHZhbHVlLgogICAgICAgICBleHBlY3RlZCA9ICIyMDAwIDAxIDAxIDAwIDAwIDAwIDEgMDAxIgotICAgICAgICByZXN1bHQgPSB0aW1lLnN0cmZ0aW1lKCIlWSAlbSAlZCAlSCAlTSAlUyAldyAlaiIsICgwLCkqOSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICByZXN1bHQgPSB0aW1lLnN0cmZ0aW1lKCIlWSAlbSAlZCAlSCAlTSAlUyAldyAlaiIsICgwLCkqOSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgcmVzdWx0KQogCiAgICAgZGVmIHRlc3Rfc3RycHRpbWUoc2VsZik6CkBAIC0xMzEsMTcgKzEyNiwzNCBAQAogCiAgICAgZGVmIHRlc3RfYXNjdGltZShzZWxmKToKICAgICAgICAgdGltZS5hc2N0aW1lKHRpbWUuZ210aW1lKHNlbGYudCkpCisKKyAgICAgICAgIyBNYXggeWVhciBpcyBvbmx5IGxpbWl0ZWQgYnkgdGhlIHNpemUgb2YgQyBpbnQuCisgICAgICAgIHNpemVvZl9pbnQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NJWkVPRl9JTlQnKSBvciA0CisgICAgICAgIGJpZ3llYXIgPSAoMSA8PCA4ICogc2l6ZW9mX2ludCAtIDEpIC0gMQorICAgICAgICBhc2MgPSB0aW1lLmFzY3RpbWUoKGJpZ3llYXIsIDYsIDEpICsgKDAsKSo2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY1stbGVuKHN0cihiaWd5ZWFyKSk6XSwgc3RyKGJpZ3llYXIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCB0aW1lLmFzY3RpbWUsIChiaWd5ZWFyICsgMSwpICsgKDAsKSo4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRpbWUuYXNjdGltZSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aW1lLmFzY3RpbWUsICgpKQotICAgICAgICAjIFhYWDogUG9zaXggY29tcGlhbnQgYXNjdGltZSBzaG91bGQgcmVmdXNlIHRvIGNvbnZlcnQKLSAgICAgICAgIyB5ZWFyID4gOTk5OSwgYnV0IExpbnV4IGltcGxlbWVudGF0aW9uIGRvZXMgbm90LgotICAgICAgICAjIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWUuYXNjdGltZSwKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICgxMjM0NSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCkpCi0gICAgICAgICMgWFhYOiBGb3Igbm93LCBqdXN0IG1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgY3Jhc2g6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRpbWUuYXNjdGltZSgoMTIzNDUsIDEsIDEsIDAsIDAsIDAsIDAsIDEsIDApKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aW1lLmFzY3RpbWUsICgwLCkgKiAxMCkKKworICAgIGRlZiB0ZXN0X2FzY3RpbWVfYm91bmRpbmdfY2hlY2soc2VsZik6CisgICAgICAgIHNlbGYuX2JvdW5kc19jaGVja2luZyh0aW1lLmFzY3RpbWUpCisKKyAgICBkZWYgdGVzdF9jdGltZShzZWxmKToKKyAgICAgICAgdCA9IHRpbWUubWt0aW1lKCgxOTczLCA5LCAxNiwgMSwgMywgNTIsIDAsIDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmN0aW1lKHQpLCAnU3VuIFNlcCAxNiAwMTowMzo1MiAxOTczJykKKyAgICAgICAgdCA9IHRpbWUubWt0aW1lKCgyMDAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5jdGltZSh0KSwgJ1NhdCBKYW4gIDEgMDA6MDA6MDAgMjAwMCcpCisgICAgICAgIGZvciB5ZWFyIGluIFstMTAwLCAxMDAsIDEwMDAsIDIwMDAsIDEwMDAwXToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZXN0dmFsID0gdGltZS5ta3RpbWUoKHllYXIsIDEsIDEwKSArICgwLCkqNikKKyAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgIyBJZiBta3RpbWUgZmFpbHMsIGN0aW1lIHdpbGwgZmFpbCB0b28uICBUaGlzIG1heSBoYXBwZW4KKyAgICAgICAgICAgICAgICAjIG9uIHNvbWUgcGxhdGZvcm1zLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmN0aW1lKHRlc3R2YWwpWzIwOl0sIHN0cih5ZWFyKSkKIAogICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIodGltZSwgInR6c2V0IiksCiAgICAgICAgICJ0aW1lIG1vZHVsZSBoYXMgbm8gYXR0cmlidXRlIHR6c2V0IikKQEAgLTIzMiwyNCArMjQ0LDE0IEBACiAgICAgICAgIGd0MSA9IHRpbWUuZ210aW1lKE5vbmUpCiAgICAgICAgIHQwID0gdGltZS5ta3RpbWUoZ3QwKQogICAgICAgICB0MSA9IHRpbWUubWt0aW1lKGd0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gKHQxLXQwKSA8IDAuMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCh0MSwgdDAsIGRlbHRhPTAuMikKIAogICAgIGRlZiB0ZXN0X2xvY2FsdGltZV93aXRob3V0X2FyZyhzZWxmKToKICAgICAgICAgbHQwID0gdGltZS5sb2NhbHRpbWUoKQogICAgICAgICBsdDEgPSB0aW1lLmxvY2FsdGltZShOb25lKQogICAgICAgICB0MCA9IHRpbWUubWt0aW1lKGx0MCkKICAgICAgICAgdDEgPSB0aW1lLm1rdGltZShsdDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9ICh0MS10MCkgPCAwLjIpCi0KLSAgICBkZWYgdGVzdF9ta3RpbWUoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE3MjY2ODcKLSAgICAgICAgZm9yIHQgaW4gKC0yLCAtMSwgMCwgMSk6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHQgPSB0aW1lLmxvY2FsdGltZSh0KQotICAgICAgICAgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5ta3RpbWUodHQpLCB0KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHQxLCB0MCwgZGVsdGE9MC4yKQogCiBjbGFzcyBUZXN0TG9jYWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0yNjcsOCArMjY5LDEzOCBAQAogICAgICAgICAjIFRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbiBleGNlcHRpb24KICAgICAgICAgdGltZS5zdHJmdGltZSgiJUIiLCAoMjAwOSwyLDEsMCwwLDAsMCwwLDApKQogCisKK2NsYXNzIF9CYXNlWWVhclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGFjY2VwdDJkeWVhciA9IE5vbmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zYXZlZF9hY2NlcHQyZHllYXIgPSB0aW1lLmFjY2VwdDJkeWVhcgorICAgICAgICB0aW1lLmFjY2VwdDJkeWVhciA9IHNlbGYuYWNjZXB0MmR5ZWFyCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRpbWUuYWNjZXB0MmR5ZWFyID0gc2VsZi5zYXZlZF9hY2NlcHQyZHllYXIKKworICAgIGRlZiB5ZWFyc3RyKHNlbGYsIHkpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworY2xhc3MgX1Rlc3RBc2N0aW1lWWVhcjoKKyAgICBkZWYgeWVhcnN0cihzZWxmLCB5KToKKyAgICAgICAgcmV0dXJuIHRpbWUuYXNjdGltZSgoeSwpICsgKDAsKSAqIDgpLnNwbGl0KClbLTFdCisKKyAgICBkZWYgdGVzdF9sYXJnZV95ZWFyKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgaXQgZG9lc24ndCBjcmFzaCBmb3IgeWVhciA+IDk5OTkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnllYXJzdHIoMTIzNDUpLCAnMTIzNDUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYueWVhcnN0cigxMjM0NTY3ODkpLCAnMTIzNDU2Nzg5JykKKworY2xhc3MgX1Rlc3RTdHJmdGltZVllYXI6CisgICAgZGVmIHllYXJzdHIoc2VsZiwgeSk6CisgICAgICAgIHJldHVybiB0aW1lLnN0cmZ0aW1lKCclWScsICh5LCkgKyAoMCwpICogOCkuc3BsaXQoKVstMV0KKworICAgIGRlZiB0ZXN0X2xhcmdlX3llYXIoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBpdCBkb2Vzbid0IGNyYXNoIGZvciB5ZWFyID4gOTk5OQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXh0ID0gc2VsZi55ZWFyc3RyKDEyMzQ1KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgc3RyZnRpbWUoKSBpcyBsaW1pdGVkIHRvIFsxOyA5OTk5XSB3aXRoIFZpc3VhbCBTdHVkaW8KKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICcxMjM0NScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi55ZWFyc3RyKDEyMzQ1Njc4OSksICcxMjM0NTY3ODknKQorCitjbGFzcyBfVGVzdDJkWWVhcihfQmFzZVllYXJUZXN0KToKKyAgICBhY2NlcHQyZHllYXIgPSAxCisKKyAgICBkZWYgdGVzdF95ZWFyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi55ZWFyc3RyKDApLCAnMjAwMCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYueWVhcnN0cig2OSksICcxOTY5JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi55ZWFyc3RyKDY4KSwgJzIwNjgnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnllYXJzdHIoOTkpLCAnMTk5OScpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnllYXJzdHIsIC0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLnllYXJzdHIsIDEwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi55ZWFyc3RyLCA5OTkpCisKK2NsYXNzIF9UZXN0NGRZZWFyKF9CYXNlWWVhclRlc3QpOgorICAgIGFjY2VwdDJkeWVhciA9IDAKKworICAgIGRlZiB0ZXN0X3llYXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi55ZWFyc3RyKDEpLCAgICAgKCcxJywgJzAwMDEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnllYXJzdHIoNjgpLCAgICgnNjgnLCAnMDA2OCcpKQorICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYueWVhcnN0cig2OSksICAgKCc2OScsICcwMDY5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi55ZWFyc3RyKDk5KSwgICAoJzk5JywgJzAwOTknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLnllYXJzdHIoOTk5KSwgKCc5OTknLCAnMDk5OScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYueWVhcnN0cig5OTk5KSwgJzk5OTknKQorCisgICAgZGVmIHRlc3RfbmVnYXRpdmUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRleHQgPSBzZWxmLnllYXJzdHIoLTEpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgIyBzdHJmdGltZSgpIGlzIGxpbWl0ZWQgdG8gWzE7IDk5OTldIHdpdGggVmlzdWFsIFN0dWRpbworICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuYXNzZXJ0SW4odGV4dCwgKCctMScsICctMDAxJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnllYXJzdHIoLTEyMzQpLCAnLTEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYueWVhcnN0cigtMTIzNDU2KSwgJy0xMjM0NTYnKQorCisKKyAgICBkZWYgdGVzdF9ta3RpbWUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE3MjY2ODcKKyAgICAgICAgZm9yIHQgaW4gKC0yLCAtMSwgMCwgMSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdHQgPSB0aW1lLmxvY2FsdGltZSh0KQorICAgICAgICAgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5ta3RpbWUodHQpLCB0KQorICAgICAgICAjIEl0IG1heSBub3QgYmUgcG9zc2libGUgdG8gcmVsaWFibHkgbWFrZSBta3RpbWUgcmV0dXJuIGVycm9yCisgICAgICAgICMgb24gYWxsIHBsYXRmb20uICBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgbm8gb3RoZXIgZXhjZXB0aW9uCisgICAgICAgICMgdGhhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZCBmb3IgYW4gZXh0cmVtZSB2YWx1ZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGltZS5ta3RpbWUoKC0xLCAxLCAxLCAwLCAwLCAwLCAtMSwgLTEsIC0xKSkKKyAgICAgICAgZXhjZXB0IE92ZXJmbG93RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKK2NsYXNzIFRlc3RBc2N0aW1lQWNjZXB0MmRZZWFyKF9UZXN0QXNjdGltZVllYXIsIF9UZXN0MmRZZWFyKToKKyAgICBwYXNzCisKK2NsYXNzIFRlc3RTdHJmdGltZUFjY2VwdDJkWWVhcihfVGVzdFN0cmZ0aW1lWWVhciwgX1Rlc3QyZFllYXIpOgorICAgIHBhc3MKKworY2xhc3MgVGVzdEFzY3RpbWU0ZHllYXIoX1Rlc3RBc2N0aW1lWWVhciwgX1Rlc3Q0ZFllYXIpOgorICAgIHBhc3MKKworY2xhc3MgVGVzdFN0cmZ0aW1lNGR5ZWFyKF9UZXN0U3RyZnRpbWVZZWFyLCBfVGVzdDRkWWVhcik6CisgICAgcGFzcworCitjbGFzcyBUZXN0MmR5ZWFyQm9vbChfVGVzdEFzY3RpbWVZZWFyLCBfVGVzdDJkWWVhcik6CisgICAgYWNjZXB0MmR5ZWFyID0gVHJ1ZQorCitjbGFzcyBUZXN0NGR5ZWFyQm9vbChfVGVzdEFzY3RpbWVZZWFyLCBfVGVzdDRkWWVhcik6CisgICAgYWNjZXB0MmR5ZWFyID0gRmFsc2UKKworY2xhc3MgVGVzdEFjY2VwdDJZZWFyQmFkKF9UZXN0QXNjdGltZVllYXIsIF9CYXNlWWVhclRlc3QpOgorICAgIGNsYXNzIFg6CisgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignYm9vJykKKyAgICBhY2NlcHQyZHllYXIgPSBYKCkKKyAgICBkZWYgdGVzdF8yZHllYXIoc2VsZik6CisgICAgICAgIHBhc3MKKyAgICBkZWYgdGVzdF9pbnZhbGlkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYueWVhcnN0ciwgMjAwKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUaW1lVGVzdENhc2UsIFRlc3RMb2NhbGUpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIFRpbWVUZXN0Q2FzZSwKKyAgICAgICAgVGVzdExvY2FsZSwKKyAgICAgICAgVGVzdEFzY3RpbWVBY2NlcHQyZFllYXIsCisgICAgICAgIFRlc3RTdHJmdGltZUFjY2VwdDJkWWVhciwKKyAgICAgICAgVGVzdEFzY3RpbWU0ZHllYXIsCisgICAgICAgIFRlc3RTdHJmdGltZTRkeWVhciwKKyAgICAgICAgVGVzdDJkeWVhckJvb2wsCisgICAgICAgIFRlc3Q0ZHllYXJCb29sLAorICAgICAgICBUZXN0QWNjZXB0MlllYXJCYWQpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZWl0LnB5IGIvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzYjFhMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdGltZWl0LnB5CkBAIC0wLDAgKzEsMzA1IEBACitpbXBvcnQgdGltZWl0CitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbworaW1wb3J0IHRpbWUKK2Zyb20gdGV4dHdyYXAgaW1wb3J0IGRlZGVudAorCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKyMgdGltZWl0J3MgZGVmYXVsdCBudW1iZXIgb2YgaXRlcmF0aW9ucy4KK0RFRkFVTFRfTlVNQkVSID0gMTAwMDAwMAorCisjIHRpbWVpdCdzIGRlZmF1bHQgbnVtYmVyIG9mIHJlcGV0aXRpb25zLgorREVGQVVMVF9SRVBFQVQgPSAzCisKKyMgWFhYOiBzb21lIHRlc3RzIGFyZSBjb21tZW50ZWQgb3V0IHRoYXQgd291bGQgaW1wcm92ZSB0aGUgY292ZXJhZ2UgYnV0IHRha2UgYQorIyBsb25nIHRpbWUgdG8gcnVuIGJlY2F1c2UgdGhleSB0ZXN0IHRoZSBkZWZhdWx0IG51bWJlciBvZiBsb29wcywgd2hpY2ggaXMKKyMgbGFyZ2UuICBUaGUgdGVzdHMgY291bGQgYmUgZW5hYmxlZCBpZiB0aGVyZSB3YXMgYSB3YXkgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKKyMgbnVtYmVyIG9mIGxvb3BzIGR1cmluZyB0ZXN0aW5nLCBidXQgdGhpcyB3b3VsZCByZXF1aXJlIGNoYW5naW5nIHRoZSBzaWduYXR1cmUKKyMgb2Ygc29tZSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIGRlZmF1bHQgYXMgYSBkZWZhdWx0IGFyZ3VtZW50LgorCitjbGFzcyBGYWtlVGltZXI6CisgICAgQkFTRV9USU1FID0gNDIuMAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9MS4wKToKKyAgICAgICAgc2VsZi5jb3VudCA9IDAKKyAgICAgICAgc2VsZi5zZXR1cF9jYWxscyA9IDAKKyAgICAgICAgc2VsZi5zZWNvbmRzX3Blcl9pbmNyZW1lbnQ9c2Vjb25kc19wZXJfaW5jcmVtZW50CisgICAgICAgIHRpbWVpdC5fZmFrZV90aW1lciA9IHNlbGYKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuQkFTRV9USU1FICsgc2VsZi5jb3VudCAqIHNlbGYuc2Vjb25kc19wZXJfaW5jcmVtZW50CisKKyAgICBkZWYgaW5jKHNlbGYpOgorICAgICAgICBzZWxmLmNvdW50ICs9IDEKKworICAgIGRlZiBzZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5zZXR1cF9jYWxscyArPSAxCisKKyAgICBkZWYgd3JhcF90aW1lcihzZWxmLCB0aW1lcik6CisgICAgICAgICIiIlJlY29yZHMgJ3RpbWVyJyBhbmQgcmV0dXJucyBzZWxmIGFzIGNhbGxhYmxlIHRpbWVyLiIiIgorICAgICAgICBzZWxmLnNhdmVkX3RpbWVyID0gdGltZXIKKyAgICAgICAgcmV0dXJuIHNlbGYKKworY2xhc3MgVGVzdFRpbWVpdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCB0aW1laXQuX2Zha2VfdGltZXIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfcmVpbmRlbnRfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWl0LnJlaW5kZW50KCIiLCAwKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWl0LnJlaW5kZW50KCIiLCA0KSwgIiIpCisKKyAgICBkZWYgdGVzdF9yZWluZGVudF9zaW5nbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWl0LnJlaW5kZW50KCJwYXNzIiwgMCksICJwYXNzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1laXQucmVpbmRlbnQoInBhc3MiLCA0KSwgInBhc3MiKQorCisgICAgZGVmIHRlc3RfcmVpbmRlbnRfbXVsdGlfZW1wdHkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWl0LnJlaW5kZW50KCJcblxuIiwgMCksICJcblxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1laXQucmVpbmRlbnQoIlxuXG4iLCA0KSwgIlxuICAgIFxuICAgICIpCisKKyAgICBkZWYgdGVzdF9yZWluZGVudF9tdWx0aShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1laXQucmVpbmRlbnQoCisgICAgICAgICAgICAicHJpbnQoKVxucGFzc1xuYnJlYWsiLCAwKSwKKyAgICAgICAgICAgICJwcmludCgpXG5wYXNzXG5icmVhayIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZWl0LnJlaW5kZW50KAorICAgICAgICAgICAgInByaW50KClcbnBhc3NcbmJyZWFrIiwgNCksCisgICAgICAgICAgICAicHJpbnQoKVxuICAgIHBhc3NcbiAgICBicmVhayIpCisKKyAgICBkZWYgdGVzdF90aW1lcl9pbnZhbGlkX3N0bXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWVpdC5UaW1lciwgc3RtdD1Ob25lKQorCisgICAgZGVmIHRlc3RfdGltZXJfaW52YWxpZF9zZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD1Ob25lKQorCisgICAgZmFrZV9zZXR1cCA9ICJpbXBvcnQgdGltZWl0OyB0aW1laXQuX2Zha2VfdGltZXIuc2V0dXAoKSIKKyAgICBmYWtlX3N0bXQgPSAiaW1wb3J0IHRpbWVpdDsgdGltZWl0Ll9mYWtlX3RpbWVyLmluYygpIgorCisgICAgZGVmIGZha2VfY2FsbGFibGVfc2V0dXAoc2VsZik6CisgICAgICAgIHNlbGYuZmFrZV90aW1lci5zZXR1cCgpCisKKyAgICBkZWYgZmFrZV9jYWxsYWJsZV9zdG10KHNlbGYpOgorICAgICAgICBzZWxmLmZha2VfdGltZXIuaW5jKCkKKworICAgIGRlZiB0aW1laXQoc2VsZiwgc3RtdCwgc2V0dXAsIG51bWJlcj1Ob25lKToKKyAgICAgICAgc2VsZi5mYWtlX3RpbWVyID0gRmFrZVRpbWVyKCkKKyAgICAgICAgdCA9IHRpbWVpdC5UaW1lcihzdG10PXN0bXQsIHNldHVwPXNldHVwLCB0aW1lcj1zZWxmLmZha2VfdGltZXIpCisgICAgICAgIGt3YXJncyA9IHt9CisgICAgICAgIGlmIG51bWJlciBpcyBOb25lOgorICAgICAgICAgICAgbnVtYmVyID0gREVGQVVMVF9OVU1CRVIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGt3YXJnc1snbnVtYmVyJ10gPSBudW1iZXIKKyAgICAgICAgZGVsdGFfdGltZSA9IHQudGltZWl0KCoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZmFrZV90aW1lci5zZXR1cF9jYWxscywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZha2VfdGltZXIuY291bnQsIG51bWJlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YV90aW1lLCBudW1iZXIpCisKKyAgICAjIFRha2VzIHRvbyBsb25nIHRvIHJ1biBpbiBkZWJ1ZyBidWlsZC4KKyAgICAjZGVmIHRlc3RfdGltZWl0X2RlZmF1bHRfaXRlcnMoc2VsZik6CisgICAgIyAgICBzZWxmLnRpbWVpdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX3NldHVwKQorCisgICAgZGVmIHRlc3RfdGltZWl0X3plcm9faXRlcnMoc2VsZik6CisgICAgICAgIHNlbGYudGltZWl0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIG51bWJlcj0wKQorCisgICAgZGVmIHRlc3RfdGltZWl0X2Zld19pdGVycyhzZWxmKToKKyAgICAgICAgc2VsZi50aW1laXQoc2VsZi5mYWtlX3N0bXQsIHNlbGYuZmFrZV9zZXR1cCwgbnVtYmVyPTMpCisKKyAgICBkZWYgdGVzdF90aW1laXRfY2FsbGFibGVfc3RtdChzZWxmKToKKyAgICAgICAgc2VsZi50aW1laXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsIHNlbGYuZmFrZV9zZXR1cCwgbnVtYmVyPTMpCisKKyAgICBkZWYgdGVzdF90aW1laXRfY2FsbGFibGVfc3RtdF9hbmRfc2V0dXAoc2VsZik6CisgICAgICAgIHNlbGYudGltZWl0KHNlbGYuZmFrZV9jYWxsYWJsZV9zdG10LAorICAgICAgICAgICAgICAgIHNlbGYuZmFrZV9jYWxsYWJsZV9zZXR1cCwgbnVtYmVyPTMpCisKKyAgICAjIFRha2VzIHRvbyBsb25nIHRvIHJ1biBpbiBkZWJ1ZyBidWlsZC4KKyAgICAjZGVmIHRlc3RfdGltZWl0X2Z1bmN0aW9uKHNlbGYpOgorICAgICMgICAgZGVsdGFfdGltZSA9IHRpbWVpdC50aW1laXQoc2VsZi5mYWtlX3N0bXQsIHNlbGYuZmFrZV9zZXR1cCwKKyAgICAjICAgICAgICAgICAgdGltZXI9RmFrZVRpbWVyKCkpCisgICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKGRlbHRhX3RpbWUsIERFRkFVTFRfTlVNQkVSKQorCisgICAgZGVmIHRlc3RfdGltZWl0X2Z1bmN0aW9uX3plcm9faXRlcnMoc2VsZik6CisgICAgICAgIGRlbHRhX3RpbWUgPSB0aW1laXQudGltZWl0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIG51bWJlcj0wLAorICAgICAgICAgICAgICAgIHRpbWVyPUZha2VUaW1lcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlbHRhX3RpbWUsIDApCisKKyAgICBkZWYgcmVwZWF0KHNlbGYsIHN0bXQsIHNldHVwLCByZXBlYXQ9Tm9uZSwgbnVtYmVyPU5vbmUpOgorICAgICAgICBzZWxmLmZha2VfdGltZXIgPSBGYWtlVGltZXIoKQorICAgICAgICB0ID0gdGltZWl0LlRpbWVyKHN0bXQ9c3RtdCwgc2V0dXA9c2V0dXAsIHRpbWVyPXNlbGYuZmFrZV90aW1lcikKKyAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgaWYgcmVwZWF0IGlzIE5vbmU6CisgICAgICAgICAgICByZXBlYXQgPSBERUZBVUxUX1JFUEVBVAorICAgICAgICBlbHNlOgorICAgICAgICAgICAga3dhcmdzWydyZXBlYXQnXSA9IHJlcGVhdAorICAgICAgICBpZiBudW1iZXIgaXMgTm9uZToKKyAgICAgICAgICAgIG51bWJlciA9IERFRkFVTFRfTlVNQkVSCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3NbJ251bWJlciddID0gbnVtYmVyCisgICAgICAgIGRlbHRhX3RpbWVzID0gdC5yZXBlYXQoKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mYWtlX3RpbWVyLnNldHVwX2NhbGxzLCByZXBlYXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mYWtlX3RpbWVyLmNvdW50LCByZXBlYXQgKiBudW1iZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVsdGFfdGltZXMsIHJlcGVhdCAqIFtmbG9hdChudW1iZXIpXSkKKworICAgICMgVGFrZXMgdG9vIGxvbmcgdG8gcnVuIGluIGRlYnVnIGJ1aWxkLgorICAgICNkZWYgdGVzdF9yZXBlYXRfZGVmYXVsdChzZWxmKToKKyAgICAjICAgIHNlbGYucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXApCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfemVyb19yZXBzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcGVhdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX3NldHVwLCByZXBlYXQ9MCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF96ZXJvX2l0ZXJzKHNlbGYpOgorICAgICAgICBzZWxmLnJlcGVhdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX3NldHVwLCBudW1iZXI9MCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9mZXdfcmVwc19hbmRfaXRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIHJlcGVhdD0zLCBudW1iZXI9NSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9jYWxsYWJsZV9zdG10KHNlbGYpOgorICAgICAgICBzZWxmLnJlcGVhdChzZWxmLmZha2VfY2FsbGFibGVfc3RtdCwgc2VsZi5mYWtlX3NldHVwLAorICAgICAgICAgICAgICAgIHJlcGVhdD0zLCBudW1iZXI9NSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9jYWxsYWJsZV9zdG10X2FuZF9zZXR1cChzZWxmKToKKyAgICAgICAgc2VsZi5yZXBlYXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsIHNlbGYuZmFrZV9jYWxsYWJsZV9zZXR1cCwKKyAgICAgICAgICAgICAgICByZXBlYXQ9MywgbnVtYmVyPTUpCisKKyAgICAjIFRha2VzIHRvbyBsb25nIHRvIHJ1biBpbiBkZWJ1ZyBidWlsZC4KKyAgICAjZGVmIHRlc3RfcmVwZWF0X2Z1bmN0aW9uKHNlbGYpOgorICAgICMgICAgZGVsdGFfdGltZXMgPSB0aW1laXQucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsCisgICAgIyAgICAgICAgICAgIHRpbWVyPUZha2VUaW1lcigpKQorICAgICMgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YV90aW1lcywgREVGQVVMVF9SRVBFQVQgKiBbZmxvYXQoREVGQVVMVF9OVU1CRVIpXSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF9mdW5jdGlvbl96ZXJvX3JlcHMoc2VsZik6CisgICAgICAgIGRlbHRhX3RpbWVzID0gdGltZWl0LnJlcGVhdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX3NldHVwLCByZXBlYXQ9MCwKKyAgICAgICAgICAgICAgICB0aW1lcj1GYWtlVGltZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWx0YV90aW1lcywgW10pCisKKyAgICBkZWYgdGVzdF9yZXBlYXRfZnVuY3Rpb25femVyb19pdGVycyhzZWxmKToKKyAgICAgICAgZGVsdGFfdGltZXMgPSB0aW1laXQucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIG51bWJlcj0wLAorICAgICAgICAgICAgICAgIHRpbWVyPUZha2VUaW1lcigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlbHRhX3RpbWVzLCBERUZBVUxUX1JFUEVBVCAqIFswLjBdKQorCisgICAgZGVmIGFzc2VydF9leGNfc3RyaW5nKHNlbGYsIGV4Y19zdHJpbmcsIGV4cGVjdGVkX2V4Y19uYW1lKToKKyAgICAgICAgZXhjX2xpbmVzID0gZXhjX3N0cmluZy5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihleGNfbGluZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhjX2xpbmVzWzBdLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhjX2xpbmVzWy0xXS5zdGFydHN3aXRoKGV4cGVjdGVkX2V4Y19uYW1lKSkKKworICAgIGRlZiB0ZXN0X3ByaW50X2V4YyhzZWxmKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgdCA9IHRpbWVpdC5UaW1lcigiMS8wIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdC50aW1laXQoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0LnByaW50X2V4YyhzKQorICAgICAgICBzZWxmLmFzc2VydF9leGNfc3RyaW5nKHMuZ2V0dmFsdWUoKSwgJ1plcm9EaXZpc2lvbkVycm9yJykKKworICAgIE1BSU5fREVGQVVMVF9PVVRQVVQgPSAiMTAgbG9vcHMsIGJlc3Qgb2YgMzogMSBzZWMgcGVyIGxvb3BcbiIKKworICAgIGRlZiBydW5fbWFpbihzZWxmLCBzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9MS4wLCBzd2l0Y2hlcz1Ob25lLCB0aW1lcj1Ob25lKToKKyAgICAgICAgaWYgdGltZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHRpbWVyID0gRmFrZVRpbWVyKHNlY29uZHNfcGVyX2luY3JlbWVudD1zZWNvbmRzX3Blcl9pbmNyZW1lbnQpCisgICAgICAgIGlmIHN3aXRjaGVzIGlzIE5vbmU6CisgICAgICAgICAgICBhcmdzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgPSBzd2l0Y2hlc1s6XQorICAgICAgICBhcmdzLmFwcGVuZChzZWxmLmZha2Vfc3RtdCkKKyAgICAgICAgIyB0aW1laXQubWFpbigpIG1vZGlmaWVzIHN5cy5wYXRoLCBzbyBzYXZlIGFuZCByZXN0b3JlIGl0LgorICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzOgorICAgICAgICAgICAgdGltZWl0Lm1haW4oYXJncz1hcmdzLCBfd3JhcF90aW1lcj10aW1lci53cmFwX3RpbWVyKQorICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGhbOl0KKyAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQorCisgICAgZGVmIHRlc3RfbWFpbl9iYWRfc3dpdGNoKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzd2l0Y2hlcz1bJy0tYmFkLXN3aXRjaCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGRlZGVudCgiIiJcCisgICAgICAgICAgICBvcHRpb24gLS1iYWQtc3dpdGNoIG5vdCByZWNvZ25pemVkCisgICAgICAgICAgICB1c2UgLWgvLS1oZWxwIGZvciBjb21tYW5kIGxpbmUgaGVscAorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X21haW5fc2Vjb25kcyhzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTUuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiMTAgbG9vcHMsIGJlc3Qgb2YgMzogNS41IHNlYyBwZXIgbG9vcFxuIikKKworICAgIGRlZiB0ZXN0X21haW5fbWlsbGlzZWNvbmRzKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9MC4wMDU1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIxMDAgbG9vcHMsIGJlc3Qgb2YgMzogNS41IG1zZWMgcGVyIGxvb3BcbiIpCisKKyAgICBkZWYgdGVzdF9tYWluX21pY3Jvc2Vjb25kcyhzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTAuMDAwMDAyNSwgc3dpdGNoZXM9WyctbjEwMCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIxMDAgbG9vcHMsIGJlc3Qgb2YgMzogMi41IHVzZWMgcGVyIGxvb3BcbiIpCisKKyAgICBkZWYgdGVzdF9tYWluX2ZpeGVkX2l0ZXJzKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9Mi4wLCBzd2l0Y2hlcz1bJy1uMzUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiMzUgbG9vcHMsIGJlc3Qgb2YgMzogMiBzZWMgcGVyIGxvb3BcbiIpCisKKyAgICBkZWYgdGVzdF9tYWluX3NldHVwKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzZWNvbmRzX3Blcl9pbmNyZW1lbnQ9Mi4wLAorICAgICAgICAgICAgICAgIHN3aXRjaGVzPVsnLW4zNScsICctcycsICdwcmludCgiQ3VzdG9tU2V0dXAiKSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJDdXN0b21TZXR1cFxuIiAqIDMgKworICAgICAgICAgICAgICAgICIzNSBsb29wcywgYmVzdCBvZiAzOiAyIHNlYyBwZXIgbG9vcFxuIikKKworICAgIGRlZiB0ZXN0X21haW5fZml4ZWRfcmVwcyhzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTYwLjAsIHN3aXRjaGVzPVsnLXI5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIjEwIGxvb3BzLCBiZXN0IG9mIDk6IDYwIHNlYyBwZXIgbG9vcFxuIikKKworICAgIGRlZiB0ZXN0X21haW5fbmVnYXRpdmVfcmVwcyhzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTYwLjAsIHN3aXRjaGVzPVsnLXItNSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICIxMCBsb29wcywgYmVzdCBvZiAxOiA2MCBzZWMgcGVyIGxvb3BcbiIpCisKKyAgICBkZWYgdGVzdF9tYWluX2hlbHAoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnJ1bl9tYWluKHN3aXRjaGVzPVsnLWgnXSkKKyAgICAgICAgIyBOb3RlOiBJdCdzIG5vdCBjbGVhciB0aGF0IHRoZSB0cmFpbGluZyBzcGFjZSB3YXMgaW50ZW5kZWQgYXMgcGFydCBvZgorICAgICAgICAjIHRoZSBoZWxwIHRleHQsIGJ1dCBzaW5jZSBpdCdzIHRoZXJlLCBjaGVjayBmb3IgaXQuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgdGltZWl0Ll9fZG9jX18gKyAnICcpCisKKyAgICBkZWYgdGVzdF9tYWluX3VzaW5nX3RpbWUoc2VsZik6CisgICAgICAgIGZha2VfdGltZXIgPSBGYWtlVGltZXIoKQorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzd2l0Y2hlcz1bJy10J10sIHRpbWVyPWZha2VfdGltZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5NQUlOX0RFRkFVTFRfT1VUUFVUKQorICAgICAgICBzZWxmLmFzc2VydElzKGZha2VfdGltZXIuc2F2ZWRfdGltZXIsIHRpbWUudGltZSkKKworICAgIGRlZiB0ZXN0X21haW5fdXNpbmdfY2xvY2soc2VsZik6CisgICAgICAgIGZha2VfdGltZXIgPSBGYWtlVGltZXIoKQorICAgICAgICBzID0gc2VsZi5ydW5fbWFpbihzd2l0Y2hlcz1bJy1jJ10sIHRpbWVyPWZha2VfdGltZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5NQUlOX0RFRkFVTFRfT1VUUFVUKQorICAgICAgICBzZWxmLmFzc2VydElzKGZha2VfdGltZXIuc2F2ZWRfdGltZXIsIHRpbWUuY2xvY2spCisKKyAgICBkZWYgdGVzdF9tYWluX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLnJ1bl9tYWluKHN3aXRjaGVzPVsnLXYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIDEwIGxvb3BzIC0+IDEwIHNlY3MKKyAgICAgICAgICAgICAgICByYXcgdGltZXM6IDEwIDEwIDEwCisgICAgICAgICAgICAgICAgMTAgbG9vcHMsIGJlc3Qgb2YgMzogMSBzZWMgcGVyIGxvb3AKKyAgICAgICAgICAgICIiIikpCisKKyAgICBkZWYgdGVzdF9tYWluX3ZlcnlfdmVyYm9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc2Vjb25kc19wZXJfaW5jcmVtZW50PTAuMDAwMDUwLCBzd2l0Y2hlcz1bJy12diddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIGRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgMTAgbG9vcHMgLT4gMC4wMDA1IHNlY3MKKyAgICAgICAgICAgICAgICAxMDAgbG9vcHMgLT4gMC4wMDUgc2VjcworICAgICAgICAgICAgICAgIDEwMDAgbG9vcHMgLT4gMC4wNSBzZWNzCisgICAgICAgICAgICAgICAgMTAwMDAgbG9vcHMgLT4gMC41IHNlY3MKKyAgICAgICAgICAgICAgICByYXcgdGltZXM6IDAuNSAwLjUgMC41CisgICAgICAgICAgICAgICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogNTAgdXNlYyBwZXIgbG9vcAorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X21haW5fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGVycm9yX3N0cmluZ2lvOgorICAgICAgICAgICAgcyA9IHNlbGYucnVuX21haW4oc3dpdGNoZXM9WycxLzAnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRfZXhjX3N0cmluZyhlcnJvcl9zdHJpbmdpby5nZXR2YWx1ZSgpLCAnWmVyb0RpdmlzaW9uRXJyb3InKQorCisgICAgZGVmIHRlc3RfbWFpbl9leGNlcHRpb25fZml4ZWRfcmVwcyhzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnJvcl9zdHJpbmdpbzoKKyAgICAgICAgICAgIHMgPSBzZWxmLnJ1bl9tYWluKHN3aXRjaGVzPVsnLW4xJywgJzEvMCddKQorICAgICAgICBzZWxmLmFzc2VydF9leGNfc3RyaW5nKGVycm9yX3N0cmluZ2lvLmdldHZhbHVlKCksICdaZXJvRGl2aXNpb25FcnJvcicpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHJ1bl91bml0dGVzdChUZXN0VGltZWl0KQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkgYi9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKaW5kZXggYmJjZGMyNS4uNGNhZDQ5OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQpAQCAtNyw2ICs3LDcgQEAKIHNraXBfZXhwZWN0ZWQgPSBub3Qgc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCduZXR3b3JrJykKIAogaW1wb3J0IHRpbWUKK2ltcG9ydCBlcnJubwogaW1wb3J0IHNvY2tldAogCiAKQEAgLTg4LDggKzg5LDYgQEAKIAogCiBjbGFzcyBUaW1lb3V0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICIiIlRlc3QgY2FzZSBmb3Igc29ja2V0LnNvY2tldCgpIHRpbWVvdXQgZnVuY3Rpb25zIiIiCi0KICAgICAjIFRoZXJlIGFyZSBhIG51bWJlciBvZiB0ZXN0cyBoZXJlIHRyeWluZyB0byBtYWtlIHN1cmUgdGhhdCBhbiBvcGVyYXRpb24KICAgICAjIGRvZXNuJ3QgdGFrZSB0b28gbXVjaCBsb25nZXIgdGhhbiBleHBlY3RlZC4gIEJ1dCBjb21wZXRpbmcgbWFjaGluZQogICAgICMgYWN0aXZpdHkgbWFrZXMgaXQgaW5ldml0YWJsZSB0aGF0IHN1Y2ggdGVzdHMgd2lsbCBmYWlsIGF0IHRpbWVzLgpAQCAtOTgsMTAgKzk3LDQyIEBACiAgICAgIyBzb2x1dGlvbi4KICAgICBmdXp6ID0gMi4wCiAKKyAgICBsb2NhbGhvc3QgPSAnMTI3LjAuMC4xJworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIHRlYXJEb3duID0gc2V0VXAKKworICAgIGRlZiBfc29ja19vcGVyYXRpb24oc2VsZiwgY291bnQsIHRpbWVvdXQsIG1ldGhvZCwgKmFyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCB0aGUgc3BlY2lmaWVkIHNvY2tldCBtZXRob2QuCisKKyAgICAgICAgVGhlIG1ldGhvZCBpcyBydW4gYXQgbW9zdCBgY291bnRgIHRpbWVzIGFuZCBtdXN0IHJhaXNlIGEgc29ja2V0LnRpbWVvdXQKKyAgICAgICAgd2l0aGluIGB0aW1lb3V0YCArIHNlbGYuZnV6eiBzZWNvbmRzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQodGltZW91dCkKKyAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihzZWxmLnNvY2ssIG1ldGhvZCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoY291bnQpOgorICAgICAgICAgICAgdDEgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1ldGhvZCgqYXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlOgorICAgICAgICAgICAgICAgIGRlbHRhID0gdGltZS50aW1lKCkgLSB0MQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3NvY2tldC50aW1lb3V0IHdhcyBub3QgcmFpc2VkJykKKyAgICAgICAgIyBUaGVzZSBjaGVja3Mgc2hvdWxkIGFjY291bnQgZm9yIHRpbWluZyB1bnByZWNpc2lvbgorICAgICAgICBzZWxmLmFzc2VydExlc3MoZGVsdGEsIHRpbWVvdXQgKyBzZWxmLmZ1enopCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZWx0YSwgdGltZW91dCAtIDEuMCkKKworCitjbGFzcyBUQ1BUaW1lb3V0VGVzdENhc2UoVGltZW91dFRlc3RDYXNlKToKKyAgICAiIiJUQ1AgdGVzdCBjYXNlIGZvciBzb2NrZXQuc29ja2V0KCkgdGltZW91dCBmdW5jdGlvbnMiIiIKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFkZHJfcmVtb3RlID0gKCd3d3cucHl0aG9uLm9yZy4nLCA4MCkKLSAgICAgICAgc2VsZi5sb2NhbGhvc3QgPSAnMTI3LjAuMC4xJwogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQpAQCAtMTEzLDkwICsxNDQsNzMgQEAKICAgICAgICAgIyB3aXRoIHRoZSBjb25uZWN0IHRpbWUuICBUaGlzIGF2b2lkcyBmYWlsaW5nIHRoZSBhc3NlcnRpb24gdGhhdAogICAgICAgICAjIHRoZSB0aW1lb3V0IG9jY3VycmVkIGZhc3QgZW5vdWdoLgogICAgICAgICBhZGRyID0gKCcxMC4wLjAuMCcsIDEyMzQ1KQotCi0gICAgICAgICMgVGVzdCBjb25uZWN0KCkgdGltZW91dAotICAgICAgICBfdGltZW91dCA9IDAuMDAxCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQotCi0gICAgICAgIF90MSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmNvbm5lY3QsIGFkZHIpCi0gICAgICAgIF90MiA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAotICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyBtb3JlIHRoYW4gJWcgc2Vjb25kcyBtb3JlIHRoYW4gZXhwZWN0ZWQgKCVnKSIKLSAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChhZGRyWzBdKToKKyAgICAgICAgICAgIHNlbGYuX3NvY2tfb3BlcmF0aW9uKDEsIDAuMDAxLCAnY29ubmVjdCcsIGFkZHIpCiAKICAgICBkZWYgdGVzdFJlY3ZUaW1lb3V0KHNlbGYpOgogICAgICAgICAjIFRlc3QgcmVjdigpIHRpbWVvdXQKLSAgICAgICAgX3RpbWVvdXQgPSAwLjAyCi0KICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLmFkZHJfcmVtb3RlWzBdKToKICAgICAgICAgICAgIHNlbGYuc29jay5jb25uZWN0KHNlbGYuYWRkcl9yZW1vdGUpCi0gICAgICAgICAgICBzZWxmLnNvY2suc2V0dGltZW91dChfdGltZW91dCkKLQotICAgICAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC50aW1lb3V0LCBzZWxmLnNvY2sucmVjdiwgMTAyNCkKLSAgICAgICAgICAgIF90MiA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgICAgIF9kZWx0YSA9IGFicyhfdDEgLSBfdDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCi0gICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgotICAgICAgICAgICAgICAgICAgICAgICAgICUoX2RlbHRhLCBzZWxmLmZ1enosIF90aW1lb3V0KSkKKyAgICAgICAgICAgIHNlbGYuX3NvY2tfb3BlcmF0aW9uKDEsIDEuNSwgJ3JlY3YnLCAxMDI0KQogCiAgICAgZGVmIHRlc3RBY2NlcHRUaW1lb3V0KHNlbGYpOgogICAgICAgICAjIFRlc3QgYWNjZXB0KCkgdGltZW91dAotICAgICAgICBfdGltZW91dCA9IDIKLSAgICAgICAgc2VsZi5zb2NrLnNldHRpbWVvdXQoX3RpbWVvdXQpCi0gICAgICAgICMgUHJldmVudCAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSIgc29ja2V0IGV4Y2VwdGlvbnMKICAgICAgICAgc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrLCBzZWxmLmxvY2FsaG9zdCkKICAgICAgICAgc2VsZi5zb2NrLmxpc3Rlbig1KQotCi0gICAgICAgIF90MSA9IHRpbWUudGltZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5zb2NrLmFjY2VwdCkKLSAgICAgICAgX3QyID0gdGltZS50aW1lKCkKLQotICAgICAgICBfZGVsdGEgPSBhYnMoX3QxIC0gX3QyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoX2RlbHRhIDwgX3RpbWVvdXQgKyBzZWxmLmZ1enosCi0gICAgICAgICAgICAgICAgICAgICAidGltZW91dCAoJWcpIGlzICVnIHNlY29uZHMgbW9yZSB0aGFuIGV4cGVjdGVkICglZykiCi0gICAgICAgICAgICAgICAgICAgICAlKF9kZWx0YSwgc2VsZi5mdXp6LCBfdGltZW91dCkpCi0KLSAgICBkZWYgdGVzdFJlY3Zmcm9tVGltZW91dChzZWxmKToKLSAgICAgICAgIyBUZXN0IHJlY3Zmcm9tKCkgdGltZW91dAotICAgICAgICBfdGltZW91dCA9IDIKLSAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCi0gICAgICAgIHNlbGYuc29jay5zZXR0aW1lb3V0KF90aW1lb3V0KQotICAgICAgICAjIFByZXZlbnQgIkFkZHJlc3MgYWxyZWFkeSBpbiB1c2UiIHNvY2tldCBleGNlcHRpb25zCi0gICAgICAgIHN1cHBvcnQuYmluZF9wb3J0KHNlbGYuc29jaywgc2VsZi5sb2NhbGhvc3QpCi0KLSAgICAgICAgX3QxID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLnNvY2sucmVjdmZyb20sIDgxOTIpCi0gICAgICAgIF90MiA9IHRpbWUudGltZSgpCi0KLSAgICAgICAgX2RlbHRhID0gYWJzKF90MSAtIF90MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9kZWx0YSA8IF90aW1lb3V0ICsgc2VsZi5mdXp6LAotICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgKCVnKSBpcyAlZyBzZWNvbmRzIG1vcmUgdGhhbiBleHBlY3RlZCAoJWcpIgotICAgICAgICAgICAgICAgICAgICAgJShfZGVsdGEsIHNlbGYuZnV6eiwgX3RpbWVvdXQpKQorICAgICAgICBzZWxmLl9zb2NrX29wZXJhdGlvbigxLCAxLjUsICdhY2NlcHQnKQogCiAgICAgZGVmIHRlc3RTZW5kKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2VuZCgpIHRpbWVvdXQKLSAgICAgICAgIyBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IGl0Ci0gICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNlcnY6CisgICAgICAgICAgICBzdXBwb3J0LmJpbmRfcG9ydChzZXJ2LCBzZWxmLmxvY2FsaG9zdCkKKyAgICAgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzZXJ2LmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAjIFNlbmQgYSBsb3Qgb2YgZGF0YSBpbiBvcmRlciB0byBieXBhc3MgYnVmZmVyaW5nIGluIHRoZSBUQ1Agc3RhY2suCisgICAgICAgICAgICBzZWxmLl9zb2NrX29wZXJhdGlvbigxMDAsIDEuNSwgJ3NlbmQnLCBiIlgiICogMjAwMDAwKQogCiAgICAgZGVmIHRlc3RTZW5kdG8oc2VsZik6CiAgICAgICAgICMgVGVzdCBzZW5kdG8oKSB0aW1lb3V0Ci0gICAgICAgICMgY291bGRuJ3QgZmlndXJlIG91dCBob3cgdG8gdGVzdCBpdAotICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzZXJ2OgorICAgICAgICAgICAgc3VwcG9ydC5iaW5kX3BvcnQoc2Vydiwgc2VsZi5sb2NhbGhvc3QpCisgICAgICAgICAgICBzZXJ2Lmxpc3Rlbig1KQorICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3Qoc2Vydi5nZXRzb2NrbmFtZSgpKQorICAgICAgICAgICAgIyBUaGUgYWRkcmVzcyBhcmd1bWVudCBpcyBpZ25vcmVkIHNpbmNlIHdlIGFscmVhZHkgY29ubmVjdGVkLgorICAgICAgICAgICAgc2VsZi5fc29ja19vcGVyYXRpb24oMTAwLCAxLjUsICdzZW5kdG8nLCBiIlgiICogMjAwMDAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vydi5nZXRzb2NrbmFtZSgpKQogCiAgICAgZGVmIHRlc3RTZW5kYWxsKHNlbGYpOgogICAgICAgICAjIFRlc3Qgc2VuZGFsbCgpIHRpbWVvdXQKLSAgICAgICAgIyBjb3VsZG4ndCBmaWd1cmUgb3V0IGhvdyB0byB0ZXN0IGl0Ci0gICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHNlcnY6CisgICAgICAgICAgICBzdXBwb3J0LmJpbmRfcG9ydChzZXJ2LCBzZWxmLmxvY2FsaG9zdCkKKyAgICAgICAgICAgIHNlcnYubGlzdGVuKDUpCisgICAgICAgICAgICBzZWxmLnNvY2suY29ubmVjdChzZXJ2LmdldHNvY2tuYW1lKCkpCisgICAgICAgICAgICAjIFNlbmQgYSBsb3Qgb2YgZGF0YSBpbiBvcmRlciB0byBieXBhc3MgYnVmZmVyaW5nIGluIHRoZSBUQ1Agc3RhY2suCisgICAgICAgICAgICBzZWxmLl9zb2NrX29wZXJhdGlvbigxMDAsIDEuNSwgJ3NlbmRhbGwnLCBiIlgiICogMjAwMDAwKQorCisKK2NsYXNzIFVEUFRpbWVvdXRUZXN0Q2FzZShUaW1lb3V0VGVzdENhc2UpOgorICAgICIiIlVEUCB0ZXN0IGNhc2UgZm9yIHNvY2tldC5zb2NrZXQoKSB0aW1lb3V0IGZ1bmN0aW9ucyIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0UmVjdmZyb21UaW1lb3V0KHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVjdmZyb20oKSB0aW1lb3V0CisgICAgICAgICMgUHJldmVudCAiQWRkcmVzcyBhbHJlYWR5IGluIHVzZSIgc29ja2V0IGV4Y2VwdGlvbnMKKyAgICAgICAgc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrLCBzZWxmLmxvY2FsaG9zdCkKKyAgICAgICAgc2VsZi5fc29ja19vcGVyYXRpb24oMSwgMS41LCAncmVjdmZyb20nLCAxMDI0KQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDcmVhdGlvblRlc3RDYXNlLCBUaW1lb3V0VGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgIENyZWF0aW9uVGVzdENhc2UsCisgICAgICAgIFRDUFRpbWVvdXRUZXN0Q2FzZSwKKyAgICAgICAgVURQVGltZW91dFRlc3RDYXNlLAorICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weSBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKaW5kZXggNTEwZTYzMi4uMTFlNmZiNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CkBAIC0xLDUgKzEsMyBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLQogZG9jdGVzdHMgPSAiIiIKIFRlc3RzIGZvciB0aGUgdG9rZW5pemUgbW9kdWxlLgogCkBAIC00Miw3ICs0MCw3IEBACiAgICAgICAgIC4uLgogICAgIEluZGVudGF0aW9uRXJyb3I6IHVuaW5kZW50IGRvZXMgbm90IG1hdGNoIGFueSBvdXRlciBpbmRlbnRhdGlvbiBsZXZlbAogCi1UaGVyZSBhcmUgc29tZSBzdGFuZGFyZCBmb3JtYXR0aWcgcHJhY3Rpc2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgorVGhlcmUgYXJlIHNvbWUgc3RhbmRhcmQgZm9ybWF0dGluZyBwcmFjdGljZXMgdGhhdCBhcmUgZWFzeSB0byBnZXQgcmlnaHQuCiAKICAgICA+Pj4gcm91bmR0cmlwKCJpZiB4ID09IDE6XFxuIgogICAgIC4uLiAgICAgICAgICAgIiAgICBwcmludCh4KVxcbiIpCkBAIC01NjYsNyArNTY0LDggQEAKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIF90b2tlbml6ZSwgdW50b2tlbml6ZSwgTlVNQkVSLCBOQU1FLCBPUCwKLSAgICAgICAgICAgICAgICAgICAgIFNUUklORywgRU5ETUFSS0VSLCB0b2tfbmFtZSwgZGV0ZWN0X2VuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICAgU1RSSU5HLCBFTkRNQVJLRVIsIHRva19uYW1lLCBkZXRlY3RfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBvcGVuIGFzIHRva2VuaXplX29wZW4pCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQogaW1wb3J0IG9zLCBzeXMsIGdsb2IKQEAgLTYxMywxMSArNjEyLDExIEBACiAKICAgICBUaGUgZm9ybWF0IG9mIHRoZSBleHBvbmVudCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcGxhdGZvcm0gQyBsaWJyYXJ5LgogICAgIEtub3duIGNhc2VzIGFyZSAiZS0wMDciIChXaW5kb3dzKSBhbmQgImUtMDciIChub3QgV2luZG93cykuICBTaW5jZQotICAgIHdlJ3JlIG9ubHkgc2hvd2luZyAxMiBkaWdpdHMsIGFuZCB0aGUgMTN0aCBpc24ndCBjbG9zZSB0byA1LCB0aGUKKyAgICB3ZSdyZSBvbmx5IHNob3dpbmcgMTEgZGlnaXRzLCBhbmQgdGhlIDEydGggaXNuJ3QgY2xvc2UgdG8gNSwgdGhlCiAgICAgcmVzdCBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KIAogICAgID4+PiBleGVjKHMpICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAtMy4yMTcxNjAzNDI3MmUtMC4uLjcKKyAgICAtMy4yMTcxNjAzNDI3Li4uZS0wLi4uNwogCiAgICAgT3V0cHV0IGZyb20gY2FsY3VsYXRpb25zIHdpdGggRGVjaW1hbCBzaG91bGQgYmUgaWRlbnRpY2FsIGFjcm9zcyBhbGwKICAgICBwbGF0Zm9ybXMuCkBAIC03NDEsNyArNzQwLDcgQEAKICAgICAgICAgICAgIGInZG9fc29tZXRoaW5nKGVsc2UpXG4nCiAgICAgICAgICkKICAgICAgICAgZW5jb2RpbmcsIGNvbnN1bWVkX2xpbmVzID0gZGV0ZWN0X2VuY29kaW5nKHNlbGYuZ2V0X3JlYWRsaW5lKGxpbmVzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGluZywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGluZywgJ3V0Zi04LXNpZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uc3VtZWRfbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2InIyBzb21ldGhpbmdcbicsIGIncHJpbnQoc29tZXRoaW5nKVxuJ10pCiAKQEAgLTc2Miw3ICs3NjEsNyBAQAogICAgICAgICAgICAgYidkb19zb21ldGhpbmcoZWxzZSlcbicKICAgICAgICAgKQogICAgICAgICBlbmNvZGluZywgY29uc3VtZWRfbGluZXMgPSBkZXRlY3RfZW5jb2Rpbmcoc2VsZi5nZXRfcmVhZGxpbmUobGluZXMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgtc2lnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25zdW1lZF9saW5lcywgW2InIyBjb2Rpbmc9dXRmLThcbiddKQogCiAgICAgZGVmIHRlc3RfbWlzbWF0Y2hlZF9ib21fYW5kX2Nvb2tpZV9maXJzdF9saW5lX3JhaXNlc19zeW50YXhlcnJvcihzZWxmKToKQEAgLTc5NCw3ICs3OTMsNyBAQAogICAgICAgICAgICAgYidkb19zb21ldGhpbmcoZWxzZSlcbicKICAgICAgICAgKQogICAgICAgICBlbmNvZGluZywgY29uc3VtZWRfbGluZXMgPSBkZXRlY3RfZW5jb2Rpbmcoc2VsZi5nZXRfcmVhZGxpbmUobGluZXMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgtc2lnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25zdW1lZF9saW5lcywKICAgICAgICAgICAgICAgICAgICAgICAgICBbYicjISBzb21ldGhpbmdcbicsIGInZiMgY29kaW5nPXV0Zi04XG4nXSkKIApAQCAtODQ4LDE3ICs4NDcsMzcgQEAKIAogICAgICAgICByZWFkbGluZSA9IHNlbGYuZ2V0X3JlYWRsaW5lKChiJ1x4ZWZceGJiXHhiZnByaW50KHNvbWV0aGluZylcbicsKSkKICAgICAgICAgZW5jb2RpbmcsIGNvbnN1bWVkX2xpbmVzID0gZGV0ZWN0X2VuY29kaW5nKHJlYWRsaW5lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kaW5nLCAndXRmLTgtc2lnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25zdW1lZF9saW5lcywgW2IncHJpbnQoc29tZXRoaW5nKVxuJ10pCiAKICAgICAgICAgcmVhZGxpbmUgPSBzZWxmLmdldF9yZWFkbGluZSgoYidceGVmXHhiYlx4YmYnLCkpCiAgICAgICAgIGVuY29kaW5nLCBjb25zdW1lZF9saW5lcyA9IGRldGVjdF9lbmNvZGluZyhyZWFkbGluZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGluZywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGluZywgJ3V0Zi04LXNpZycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29uc3VtZWRfbGluZXMsIFtdKQogCiAgICAgICAgIHJlYWRsaW5lID0gc2VsZi5nZXRfcmVhZGxpbmUoKGInIyBjb2Rpbmc6IGJhZFxuJywpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZGV0ZWN0X2VuY29kaW5nLCByZWFkbGluZSkKIAorICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIGZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4gKyAnLnB5JworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZpbGVuYW1lKQorCisgICAgICAgICMgdGVzdCBjb2RpbmcgY29va2llCisgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2lzby04ODU5LTE1JywgJ3V0Zi04Jyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JywgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGZwOgorICAgICAgICAgICAgICAgIHByaW50KCIjIGNvZGluZzogJXMiICUgZW5jb2RpbmcsIGZpbGU9ZnApCisgICAgICAgICAgICAgICAgcHJpbnQoInByaW50KCdldXJvOlx1MjBhYycpIiwgZmlsZT1mcCkKKyAgICAgICAgICAgIHdpdGggdG9rZW5pemVfb3BlbihmaWxlbmFtZSkgYXMgZnA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5lbmNvZGluZywgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5tb2RlLCAncicpCisKKyAgICAgICAgIyB0ZXN0IEJPTSAobm8gY29kaW5nIGNvb2tpZSkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAndycsIGVuY29kaW5nPSd1dGYtOC1zaWcnKSBhcyBmcDoKKyAgICAgICAgICAgIHByaW50KCJwcmludCgnZXVybzpcdTIwYWMnKSIsIGZpbGU9ZnApCisgICAgICAgIHdpdGggdG9rZW5pemVfb3BlbihmaWxlbmFtZSkgYXMgZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmVuY29kaW5nLCAndXRmLTgtc2lnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAubW9kZSwgJ3InKQorCiBjbGFzcyBUZXN0VG9rZW5pemUoVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdG9rZW5pemUoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQppbmRleCAzNjk3Y2JmLi40NjFkMWQ4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKQEAgLTcwLDYgKzcwLDEyIEBACiBkZWYgdHJhY2VkX2RvdWJsZXIobnVtKToKICAgICByZXR1cm4gbnVtICogMgogCitkZWYgdHJhY2VkX2NhbGxlcl9saXN0X2NvbXByZWhlbnNpb24oKToKKyAgICBrID0gMTAKKyAgICBteWxpc3QgPSBbdHJhY2VkX2RvdWJsZXIoaSkgZm9yIGkgaW4gcmFuZ2UoayldCisgICAgcmV0dXJuIG15bGlzdAorCisKIGNsYXNzIFRyYWNlZENsYXNzKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgogICAgICAgICBzZWxmLmEgPSB4CkBAIC0xNTAsNiArMTU2LDIyIEBACiAgICAgICAgIH0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRyYWNlci5yZXN1bHRzKCkuY291bnRzLCBleHBlY3RlZCkKIAorICAgIGRlZiB0ZXN0X3RyYWNlX2xpc3RfY29tcHJlaGVuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi50cmFjZXIucnVuZnVuYyh0cmFjZWRfY2FsbGVyX2xpc3RfY29tcHJlaGVuc2lvbikKKworICAgICAgICBmaXJzdGxpbmVub19jYWxsaW5nID0gZ2V0X2ZpcnN0bGluZW5vKHRyYWNlZF9jYWxsZXJfbGlzdF9jb21wcmVoZW5zaW9uKQorICAgICAgICBmaXJzdGxpbmVub19jYWxsZWQgPSBnZXRfZmlyc3RsaW5lbm8odHJhY2VkX2RvdWJsZXIpCisgICAgICAgIGV4cGVjdGVkID0geworICAgICAgICAgICAgKHNlbGYubXlfcHlfZmlsZW5hbWUsIGZpcnN0bGluZW5vX2NhbGxpbmcgKyAxKTogMSwKKyAgICAgICAgICAgICMgTGlzdCBjb21wZWhlbnRpb25zIHdvcmsgZGlmZmVyZW50bHkgaW4gMy54LCBzbyB0aGUgY291bnQKKyAgICAgICAgICAgICMgYmVsb3cgY2hhbmdlZCBjb21wYXJlZCB0byAyLnguCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGluZyArIDIpOiAxMiwKKyAgICAgICAgICAgIChzZWxmLm15X3B5X2ZpbGVuYW1lLCBmaXJzdGxpbmVub19jYWxsaW5nICsgMyk6IDEsCisgICAgICAgICAgICAoc2VsZi5teV9weV9maWxlbmFtZSwgZmlyc3RsaW5lbm9fY2FsbGVkICsgMSk6IDEwLAorICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50cmFjZXIucmVzdWx0cygpLmNvdW50cywgZXhwZWN0ZWQpCisKKwogICAgIGRlZiB0ZXN0X2xpbmVhcl9tZXRob2RzKHNlbGYpOgogICAgICAgICAjIFhYWCB0b2RvOiBsYXRlciBhZGQgJ3N0YXRpY19tZXRob2RfbGluZWFyJyBhbmQgJ2NsYXNzX21ldGhvZF9saW5lYXInCiAgICAgICAgICMgaGVyZSwgb25jZSBpc3N1ZTE3NjQyODYgaXMgcmVzb2x2ZWQKQEAgLTI3NCwxMCArMjk2LDEwIEBACiAgICAgICAgICAgICBzZWxmLl9jb3ZlcmFnZSh0cmFjZXIpCiAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5nZXR2YWx1ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHByaW50LnB5IiBpbiBzdGRvdXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidW5pdHRlc3QucHkiIGluIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJjYXNlLnB5IiBpbiBzdGRvdXQpICAgIyBmcm9tIHVuaXR0ZXN0CiAgICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihURVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgicHByaW50LmNvdmVyIiBpbiBmaWxlcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ1bml0dGVzdC5jb3ZlciIgaW4gZmlsZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgidW5pdHRlc3QuY2FzZS5jb3ZlciIgaW4gZmlsZXMpCiAKICAgICBkZWYgdGVzdF9jb3ZlcmFnZV9pZ25vcmUoc2VsZik6CiAgICAgICAgICMgSWdub3JlIGFsbCBmaWxlcywgbm90aGluZyBzaG91bGQgYmUgdHJhY2VkIG5vciBwcmludGVkCkBAIC0zMDgsMTAgKzMzMCwyNSBAQAogICAgICAgICAgICAgbGluZXMsIGNvdiwgbW9kdWxlID0gbGluZS5zcGxpdCgpWzozXQogICAgICAgICAgICAgY292ZXJhZ2VbbW9kdWxlXSA9IChpbnQobGluZXMpLCBpbnQoY292WzotMV0pKQogICAgICAgICAjIFhYWCBUaGlzIGlzIG5lZWRlZCB0byBydW4gcmVncnRlc3QucHkgYXMgYSBzY3JpcHQKLSAgICAgICAgbW9kbmFtZSA9IHRyYWNlLmZ1bGxtb2RuYW1lKHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fZmlsZV9fKQorICAgICAgICBtb2RuYW1lID0gdHJhY2UuX2Z1bGxtb2RuYW1lKHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fZmlsZV9fKQogICAgICAgICBzZWxmLmFzc2VydEluKG1vZG5hbWUsIGNvdmVyYWdlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdmVyYWdlW21vZG5hbWVdLCAoNSwgMTAwKSkKIAorIyMjIFRlc3RzIHRoYXQgZG9uJ3QgbWVzcyB3aXRoIHN5cy5zZXR0cmFjZSBhbmQgY2FuIGJlIHRyYWNlZAorIyMjIHRoZW1zZWx2ZXMgVE9ETzogU2tpcCB0ZXN0cyB0aGF0IGRvIG1lc3Mgd2l0aCBzeXMuc2V0dHJhY2Ugd2hlbgorIyMjIHJlZ3J0ZXN0IGlzIGludm9rZWQgd2l0aCAtVCBvcHRpb24uCitjbGFzcyBUZXN0X0lnbm9yZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaWdub3JlZChzZWxmKToKKyAgICAgICAgam4gPSBvcy5wYXRoLmpvaW4KKyAgICAgICAgaWdub3JlID0gdHJhY2UuX0lnbm9yZShbJ3gnLCAneS56J10sIFtqbignZm9vJywgJ2JhcicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlnbm9yZS5uYW1lcygneC5weScsICd4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaWdub3JlLm5hbWVzKCd4eS5weScsICd4eScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlnbm9yZS5uYW1lcygneS5weScsICd5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZ25vcmUubmFtZXMoam4oJ2ZvbycsICdiYXInLCAnYmF6LnB5JyksICdiYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpZ25vcmUubmFtZXMoam4oJ2JhcicsICd6LnB5JyksICd6JykpCisgICAgICAgICMgTWF0Y2hlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpZ25vcmUubmFtZXMoam4oJ2JhcicsICdiYXoucHknKSwgJ2JheicpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weSBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CmluZGV4IGY5ZTQ0NTguLjQ3NTJkMzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHJhY2ViYWNrLnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgcmUKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGlzX2p5dGhvbiwgRXJyb3IsIGNhcHR1cmVkX291dHB1dAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgRXJyb3IsIGNhcHR1cmVkX291dHB1dAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgdW5saW5rCiAKIGltcG9ydCB0cmFjZWJhY2sKQEAgLTI5LDEwICsyOSw2IEBACiAgICAgZGVmIHN5bnRheF9lcnJvcl93aXRoX2NhcmV0XzIoc2VsZik6CiAgICAgICAgIGNvbXBpbGUoIjEgK1xuIiwgIj8iLCAiZXhlYyIpCiAKLSAgICBkZWYgc3ludGF4X2Vycm9yX3dpdGhvdXRfY2FyZXQoc2VsZik6Ci0gICAgICAgICMgWFhYIHdoeSBkb2Vzbid0IGNvbXBpbGUgcmFpc2UgdGhlIHNhbWUgdHJhY2ViYWNrPwotICAgICAgICBpbXBvcnQgdGVzdC5iYWRzeW50YXhfbm9jYXJldAotCiAgICAgZGVmIHN5bnRheF9lcnJvcl9iYWRfaW5kZW50YXRpb24oc2VsZik6CiAgICAgICAgIGNvbXBpbGUoImRlZiBzcGFtKCk6XG4gIHByaW50KDEpXG4gcHJpbnQoMikiLCAiPyIsICJleGVjIikKIApAQCAtNDEsMzAgKzM3LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlcnJbMV0uc3RyaXAoKSA9PSAicmV0dXJuIHghIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJeIiBpbiBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiXiIsIGVyclsyXSkgIyB0aGlyZCBsaW5lIGhhcyBjYXJldAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyclsxXS5maW5kKCIhIiksIGVyclsyXS5maW5kKCJeIikpICMgaW4gdGhlIHJpZ2h0IHBsYWNlCiAKICAgICAgICAgZXJyID0gc2VsZi5nZXRfZXhjZXB0aW9uX2Zvcm1hdChzZWxmLnN5bnRheF9lcnJvcl93aXRoX2NhcmV0XzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ludGF4RXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiXiIgaW4gZXJyWzJdKSAjIHRoaXJkIGxpbmUgaGFzIGNhcmV0CisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl4iLCBlcnJbMl0pICMgdGhpcmQgbGluZSBoYXMgY2FyZXQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsyXS5jb3VudCgnXG4nKSA9PSAxKSAjIGFuZCBubyBhZGRpdGlvbmFsIG5ld2xpbmUKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5maW5kKCIrIikgPT0gZXJyWzJdLmZpbmQoIl4iKSkgIyBpbiB0aGUgcmlnaHQgcGxhY2UKIAogICAgIGRlZiB0ZXN0X25vY2FyZXQoc2VsZik6Ci0gICAgICAgIGlmIGlzX2p5dGhvbjoKLSAgICAgICAgICAgICMganl0aG9uIGFkZHMgYSBjYXJldCBpbiB0aGlzIGNhc2UgKHdoeSBzaG91bGRuJ3QgaXQ/KQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3Jfd2l0aG91dF9jYXJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeW50YXhFcnJvcikKKyAgICAgICAgZXhjID0gU3ludGF4RXJyb3IoImVycm9yIiwgKCJ4LnB5IiwgMjMsIE5vbmUsICJiYWQgc3ludGF4IikpCisgICAgICAgIGVyciA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uX29ubHkoU3ludGF4RXJyb3IsIGV4YykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyclsxXS5zdHJpcCgpID09ICJbeCBmb3IgeCBpbiB4XSA9IHgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyclsxXS5zdHJpcCgpLCAiYmFkIHN5bnRheCIpCiAKICAgICBkZWYgdGVzdF9iYWRfaW5kZW50YXRpb24oc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuZ2V0X2V4Y2VwdGlvbl9mb3JtYXQoc2VsZi5zeW50YXhfZXJyb3JfYmFkX2luZGVudGF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudGF0aW9uRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVyciksIDQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyWzFdLnN0cmlwKCksICJwcmludCgyKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiXiIgaW4gZXJyWzJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCJeIiwgZXJyWzJdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyclsxXS5maW5kKCIpIiksIGVyclsyXS5maW5kKCJeIikpCiAKICAgICBkZWYgdGVzdF9iYXNlX2V4Y2VwdGlvbihzZWxmKToKQEAgLTEzMSw3ICsxMjQsNyBAQAogICAgICAgICAgICAgZXJyX2xpbmUgPSAicmFpc2UgUnVudGltZUVycm9yKCd7MH0nKSIuZm9ybWF0KG1lc3NhZ2VfYXNjaWkpCiAgICAgICAgICAgICBlcnJfbXNnID0gIlJ1bnRpbWVFcnJvcjogezB9Ii5mb3JtYXQobWVzc2FnZV9hc2NpaSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCgibGluZSAlcyIgJSBsaW5lbm8pIGluIHN0ZG91dFsxXSwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCJsaW5lICVzIiAlIGxpbmVubyksIHN0ZG91dFsxXSwKICAgICAgICAgICAgICAgICAiSW52YWxpZCBsaW5lIG51bWJlcjogezAhcn0gaW5zdGVhZCBvZiB7MX0iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0WzFdLCBsaW5lbm8pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN0ZG91dFsyXS5lbmRzd2l0aChlcnJfbGluZSksCkBAIC0yMTAsNyArMjAzLDcgQEAKICAgICBkZWYgY2hlY2tfemVyb19kaXYoc2VsZiwgbXNnKToKICAgICAgICAgbGluZXMgPSBtc2cuc3BsaXRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1stM10uc3RhcnRzd2l0aCgnICBGaWxlJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnMS8wICMgSW4gemVyb19kaXYnIGluIGxpbmVzWy0yXSwgbGluZXNbLTJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCcxLzAgIyBJbiB6ZXJvX2RpdicsIGxpbmVzWy0yXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWy0xXS5zdGFydHN3aXRoKCdaZXJvRGl2aXNpb25FcnJvcicpLCBsaW5lc1stMV0pCiAKICAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CkBAIC0yMjIsNyArMjE1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KQogICAgICAgICBzZWxmLmFzc2VydFRydWUobGluZXNbMF0uc3RhcnRzd2l0aCgnVHJhY2ViYWNrJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1sxXS5zdGFydHN3aXRoKCcgIEZpbGUnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcxLzAgIyBNYXJrZXInIGluIGxpbmVzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCcxLzAgIyBNYXJrZXInLCBsaW5lc1syXSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzNdLnN0YXJ0c3dpdGgoJ1plcm9EaXZpc2lvbkVycm9yJykpCiAKICAgICBkZWYgdGVzdF9jYXVzZShzZWxmKToKQEAgLTIzNyw3ICsyMzAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihibG9ja3MpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJsb2Nrc1sxXSwgY2F1c2VfbWVzc2FnZSkKICAgICAgICAgc2VsZi5jaGVja196ZXJvX2RpdihibG9ja3NbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaW5uZXJfcmFpc2UoKSAjIE1hcmtlcicgaW4gYmxvY2tzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbm5lcl9yYWlzZSgpICMgTWFya2VyJywgYmxvY2tzWzJdKQogCiAgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKICAgICAgICAgZGVmIGlubmVyX3JhaXNlKCk6CkBAIC0yNTEsNyArMjQ0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmxvY2tzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChibG9ja3NbMV0sIGNvbnRleHRfbWVzc2FnZSkKICAgICAgICAgc2VsZi5jaGVja196ZXJvX2RpdihibG9ja3NbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaW5uZXJfcmFpc2UoKSAjIE1hcmtlcicgaW4gYmxvY2tzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbm5lcl9yYWlzZSgpICMgTWFya2VyJywgYmxvY2tzWzJdKQogCiAgICAgZGVmIHRlc3RfY2F1c2VfYW5kX2NvbnRleHQoc2VsZik6CiAgICAgICAgICMgV2hlbiBib3RoIGEgY2F1c2UgYW5kIGEgY29udGV4dCBhcmUgc2V0LCBvbmx5IHRoZSBjYXVzZSBzaG91bGQgYmUKQEAgLTI4OSwxMSArMjgyLDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJsb2NrcyksIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmxvY2tzWzFdLCBjYXVzZV9tZXNzYWdlKQogICAgICAgICAjIFRoZSBmaXJzdCBibG9jayBpcyB0aGUgS2V5RXJyb3IgcmFpc2VkIGZyb20gdGhlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgncmFpc2UgS2V5RXJyb3IgZnJvbSBlJyBpbiBibG9ja3NbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnMS8wJyBub3QgaW4gYmxvY2tzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBLZXlFcnJvciBmcm9tIGUnLCBibG9ja3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzEvMCcsIGJsb2Nrc1swXSkKICAgICAgICAgIyBUaGUgc2Vjb25kIGJsb2NrIChhcGFydCBmcm9tIHRoZSBib3VuZGFyeSkgaXMgdGhlIFplcm9EaXZpc2lvbkVycm9yCiAgICAgICAgICMgcmUtcmFpc2VkIGZyb20gdGhlIEtleUVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnaW5uZXJfcmFpc2UoKSAjIE1hcmtlcicgaW4gYmxvY2tzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpbm5lcl9yYWlzZSgpICMgTWFya2VyJywgYmxvY2tzWzJdKQogICAgICAgICBzZWxmLmNoZWNrX3plcm9fZGl2KGJsb2Nrc1syXSkKIAogICAgIGRlZiB0ZXN0X3N5bnRheF9lcnJvcl9vZmZzZXRfYXRfZW9sKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKaW5kZXggZDcwODYzYS4uYmZmNGZjMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R0a190ZXh0b25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CmluZGV4IGI5OTYyNWEuLjU2NmZjOWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHRrX3RleHRvbmx5LnB5CkBAIC0xLDUgKzEsNCBAQAogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogIyBTa2lwIHRoaXMgdGVzdCBpZiBfdGtpbnRlciBkb2VzIG5vdCBleGlzdC4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkgYi9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CmluZGV4IGY1ODM3NDcuLjc1ZmJlNDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQpAQCAtOTYsNiArOTYsNyBAQAogICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdjLmlzX3RyYWNrZWQodCksIHQpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90cmFja19saXRlcmFscyhzZWxmKToKICAgICAgICAgIyBUZXN0IEdDLW9wdGltaXphdGlvbiBvZiB0dXBsZSBsaXRlcmFscwogICAgICAgICB4LCB5LCB6ID0gMS41LCAiYSIsIFtdCkBAIC0xMzYsMTYgKzEzNywxOSBAQAogICAgICAgICBzZWxmLl90cmFja2VkKHRwKHR1cGxlKFtvYmpdKSBmb3Igb2JqIGluIFt4LCB5LCB6XSkpCiAgICAgICAgIHNlbGYuX3RyYWNrZWQodHVwbGUodHAoW29ial0pIGZvciBvYmogaW4gW3gsIHksIHpdKSkKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X3RyYWNrX2R5bmFtaWMoc2VsZik6CiAgICAgICAgICMgVGVzdCBHQy1vcHRpbWl6YXRpb24gb2YgZHluYW1pY2FsbHkgY29uc3RydWN0ZWQgdHVwbGVzLgogICAgICAgICBzZWxmLmNoZWNrX3RyYWNrX2R5bmFtaWModHVwbGUsIEZhbHNlKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdHJhY2tfc3VidHlwZXMoc2VsZik6CiAgICAgICAgICMgVHVwbGUgc3VidHlwZXMgbXVzdCBhbHdheXMgYmUgdHJhY2tlZAogICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5jaGVja190cmFja19keW5hbWljKE15VHVwbGUsIFRydWUpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9idWc3NDY2KHNlbGYpOgogICAgICAgICAjIFRyeWluZyB0byB1bnRyYWNrIGFuIHVuZmluaXNoZWQgdHVwbGUgY291bGQgY3Jhc2ggUHl0aG9uCiAgICAgICAgIHNlbGYuX25vdF90cmFja2VkKHR1cGxlKGdjLmNvbGxlY3QoKSBmb3IgaSBpbiByYW5nZSgxMDEpKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IGQyMjdhYjEuLjhhOThhMDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMTAsMTcgKzEwLDE0IEBACiAgICAgZGVmIHRlc3RfdHJ1dGhfdmFsdWVzKHNlbGYpOgogICAgICAgICBpZiBOb25lOiBzZWxmLmZhaWwoJ05vbmUgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKICAgICAgICAgaWYgMDogc2VsZi5mYWlsKCcwIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCi0gICAgICAgIGlmIDA6IHNlbGYuZmFpbCgnMEwgaXMgdHJ1ZSBpbnN0ZWFkIG9mIGZhbHNlJykKICAgICAgICAgaWYgMC4wOiBzZWxmLmZhaWwoJzAuMCBpcyB0cnVlIGluc3RlYWQgb2YgZmFsc2UnKQogICAgICAgICBpZiAnJzogc2VsZi5mYWlsKCdcJ1wnIGlzIHRydWUgaW5zdGVhZCBvZiBmYWxzZScpCiAgICAgICAgIGlmIG5vdCAxOiBzZWxmLmZhaWwoJzEgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKLSAgICAgICAgaWYgbm90IDE6IHNlbGYuZmFpbCgnMUwgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKICAgICAgICAgaWYgbm90IDEuMDogc2VsZi5mYWlsKCcxLjAgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKICAgICAgICAgaWYgbm90ICd4Jzogc2VsZi5mYWlsKCdcJ3hcJyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQogICAgICAgICBpZiBub3Qgeyd4JzogMX06IHNlbGYuZmFpbCgne1wneFwnOiAxfSBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQogICAgICAgICBkZWYgZigpOiBwYXNzCiAgICAgICAgIGNsYXNzIEM6IHBhc3MKLSAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICB4ID0gQygpCiAgICAgICAgIGlmIG5vdCBmOiBzZWxmLmZhaWwoJ2YgaXMgZmFsc2UgaW5zdGVhZCBvZiB0cnVlJykKICAgICAgICAgaWYgbm90IEM6IHNlbGYuZmFpbCgnQyBpcyBmYWxzZSBpbnN0ZWFkIG9mIHRydWUnKQpAQCAtMzYsOCArMzMsNiBAQAogICAgIGRlZiB0ZXN0X2NvbXBhcmlzb25zKHNlbGYpOgogICAgICAgICBpZiAwIDwgMSA8PSAxID09IDEgPj0gMSA+IDAgIT0gMTogcGFzcwogICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2ludCBjb21wYXJpc29ucyBmYWlsZWQnKQotICAgICAgICBpZiAwIDwgMSA8PSAxID09IDEgPj0gMSA+IDAgIT0gMTogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgaW50IGNvbXBhcmlzb25zIGZhaWxlZCcpCiAgICAgICAgIGlmIDAuMCA8IDEuMCA8PSAxLjAgPT0gMS4wID49IDEuMCA+IDAuMCAhPSAxLjA6IHBhc3MKICAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdmbG9hdCBjb21wYXJpc29ucyBmYWlsZWQnKQogICAgICAgICBpZiAnJyA8ICdhJyA8PSAnYScgPT0gJ2EnIDwgJ2FiYycgPCAnYWJkJyA8ICdiJzogcGFzcwpAQCAtNzUsMTggKzcwLDEzIEBACiAgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgiNSAlIDAgZGlkbid0IHJhaXNlIFplcm9EaXZpc2lvbkVycm9yIikKIAogICAgIGRlZiB0ZXN0X251bWVyaWNfdHlwZXMoc2VsZik6Ci0gICAgICAgIGlmIDAgIT0gMCBvciAwICE9IDAuMCBvciAwICE9IDAuMDogc2VsZi5mYWlsKCdtaXhlZCBjb21wYXJpc29ucycpCi0gICAgICAgIGlmIDEgIT0gMSBvciAxICE9IDEuMCBvciAxICE9IDEuMDogc2VsZi5mYWlsKCdtaXhlZCBjb21wYXJpc29ucycpCi0gICAgICAgIGlmIC0xICE9IC0xIG9yIC0xICE9IC0xLjAgb3IgLTEgIT0gLTEuMDoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50L2xvbmcvZmxvYXQgdmFsdWUgbm90IGVxdWFsJykKKyAgICAgICAgaWYgMCAhPSAwLjAgb3IgMSAhPSAxLjAgb3IgLTEgIT0gLTEuMDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW50L2Zsb2F0IHZhbHVlIG5vdCBlcXVhbCcpCiAgICAgICAgICMgY2FsbGluZyBidWlsdC1pbiB0eXBlcyB3aXRob3V0IGFyZ3VtZW50IG11c3QgcmV0dXJuIDAKICAgICAgICAgaWYgaW50KCkgIT0gMDogc2VsZi5mYWlsKCdpbnQoKSBkb2VzIG5vdCByZXR1cm4gMCcpCi0gICAgICAgIGlmIGludCgpICE9IDA6IHNlbGYuZmFpbCgnbG9uZygpIGRvZXMgbm90IHJldHVybiAwJykKICAgICAgICAgaWYgZmxvYXQoKSAhPSAwLjA6IHNlbGYuZmFpbCgnZmxvYXQoKSBkb2VzIG5vdCByZXR1cm4gMC4wJykKICAgICAgICAgaWYgaW50KDEuOSkgPT0gMSA9PSBpbnQoMS4xKSBhbmQgaW50KC0xLjEpID09IC0xID09IGludCgtMS45KTogcGFzcwogICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2ludCgpIGRvZXMgbm90IHJvdW5kIHByb3Blcmx5JykKLSAgICAgICAgaWYgaW50KDEuOSkgPT0gMSA9PSBpbnQoMS4xKSBhbmQgaW50KC0xLjEpID09IC0xID09IGludCgtMS45KTogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcoKSBkb2VzIG5vdCByb3VuZCBwcm9wZXJseScpCiAgICAgICAgIGlmIGZsb2F0KDEpID09IDEuMCBhbmQgZmxvYXQoLTEpID09IC0xLjAgYW5kIGZsb2F0KDApID09IDAuMDogcGFzcwogICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2Zsb2F0KCkgZG9lcyBub3Qgd29yayBwcm9wZXJseScpCiAKQEAgLTE0MSw1OCArMTMxLDM4IEBACiAgICAgICAgICAgICBpZiB0eXBlKHByb2QpIGlzIG5vdCBpbnQ6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKHByb2QpIHRvIGJlIGludCwgbm90ICVyIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUocHJvZCkpCi0gICAgICAgICMgQ2hlY2sgZm9yIGV4cGVjdGVkICogb3ZlcmZsb3cgdG8gbG9uZy4KKyAgICAgICAgIyBDaGVjayBmb3IgdW5pZmllZCBpbnRlZ3JhbCB0eXBlCiAgICAgICAgIGZvciBkaXZpc29yIGluIDEsIDIsIDQsIDgsIDE2LCAzMjoKICAgICAgICAgICAgIGogPSBtIC8vIGRpdmlzb3IgLSAxCiAgICAgICAgICAgICBwcm9kID0gZGl2aXNvciAqIGoKICAgICAgICAgICAgIGlmIHR5cGUocHJvZCkgaXMgbm90IGludDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIHR5cGUoJXIpIHRvIGJlIGxvbmcsIG5vdCAlciIgJQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdHlwZSglcikgdG8gYmUgaW50LCBub3QgJXIiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByb2QsIHR5cGUocHJvZCkpKQotICAgICAgICAjIENoZWNrIGZvciBleHBlY3RlZCAqIG92ZXJmbG93IHRvIGxvbmcuCisgICAgICAgICMgQ2hlY2sgZm9yIHVuaWZpZWQgaW50ZWdyYWwgdHlwZQogICAgICAgICBtID0gc3lzLm1heHNpemUKICAgICAgICAgZm9yIGRpdmlzb3IgaW4gMSwgMiwgNCwgOCwgMTYsIDMyOgogICAgICAgICAgICAgaiA9IG0gLy8gZGl2aXNvciArIDEKICAgICAgICAgICAgIHByb2QgPSBkaXZpc29yICogagogICAgICAgICAgICAgaWYgdHlwZShwcm9kKSBpcyBub3QgaW50OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgdHlwZSglcikgdG8gYmUgbG9uZywgbm90ICVyIiAlCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJleHBlY3RlZCB0eXBlKCVyKSB0byBiZSBpbnQsIG5vdCAlciIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvZCwgdHlwZShwcm9kKSkpCiAKLSAgICBkZWYgdGVzdF9sb25nX2ludGVnZXJzKHNlbGYpOgotICAgICAgICBpZiAxMiArIDI0ICE9IDM2OiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQotICAgICAgICBpZiAxMiArICgtMjQpICE9IC0xMjogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgaWYgKC0xMikgKyAyNCAhPSAxMjogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgaWYgKC0xMikgKyAoLTI0KSAhPSAtMzY6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCi0gICAgICAgIGlmIG5vdCAxMiA8IDI0OiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQotICAgICAgICBpZiBub3QgLTI0IDwgLTEyOiBzZWxmLmZhaWwoJ2xvbmcgb3AnKQogICAgICAgICB4ID0gc3lzLm1heHNpemUKLSAgICAgICAgaWYgaW50KGludCh4KSkgIT0geDogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgdHJ5OiB5ID0gaW50KGludCh4KSsxKQotICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeSwgaW50KTogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgeCA9IC14Ci0gICAgICAgIGlmIGludChpbnQoeCkpICE9IHg6IHNlbGYuZmFpbCgnbG9uZyBvcCcpCi0gICAgICAgIHggPSB4LTEKLSAgICAgICAgaWYgaW50KGludCh4KSkgIT0geDogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgdHJ5OiB5ID0gaW50KGludCh4KS0xKQotICAgICAgICBleGNlcHQgT3ZlcmZsb3dFcnJvcjogc2VsZi5mYWlsKCdsb25nIG9wJykKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoeSwgaW50KTogc2VsZi5mYWlsKCdsb25nIG9wJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHggKyAxLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKHN5cy5tYXhzaXplICsgMSkgc2hvdWxkIGhhdmUgcmV0dXJuZWQgaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKC14IC0gMSwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigtc3lzLm1heHNpemUgLSAxKSBzaG91bGQgaGF2ZSByZXR1cm5lZCBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoLXggLSAyLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKC1zeXMubWF4c2l6ZSAtIDIpIHNob3VsZCBoYXZlIHJldHVybmVkIGludCIpCiAKICAgICAgICAgdHJ5OiA1IDw8IC01CiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCiAgICAgICAgIGVsc2U6IHNlbGYuZmFpbCgnaW50IG5lZ2F0aXZlIHNoaWZ0IDw8JykKIAotICAgICAgICB0cnk6IDUgPDwgLTUKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKLSAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdsb25nIG5lZ2F0aXZlIHNoaWZ0IDw8JykKLQogICAgICAgICB0cnk6IDUgPj4gLTUKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6IHBhc3MKICAgICAgICAgZWxzZTogc2VsZi5mYWlsKCdpbnQgbmVnYXRpdmUgc2hpZnQgPj4nKQogCi0gICAgICAgIHRyeTogNSA+PiAtNQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogcGFzcwotICAgICAgICBlbHNlOiBzZWxmLmZhaWwoJ2xvbmcgbmVnYXRpdmUgc2hpZnQgPj4nKQotCiAgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgogICAgICAgICBpZiAxMi4wICsgMjQuMCAhPSAzNi4wOiBzZWxmLmZhaWwoJ2Zsb2F0IG9wJykKICAgICAgICAgaWYgMTIuMCArICgtMjQuMCkgIT0gLTEyLjA6IHNlbGYuZmFpbCgnZmxvYXQgb3AnKQpAQCAtMjMyLDcgKzIwMiw3IEBACiAKICAgICBkZWYgdGVzdF9pbnRfX2Zvcm1hdF9fKHNlbGYpOgogICAgICAgICBkZWYgdGVzdChpLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKLSAgICAgICAgICAgICMganVzdCBtYWtlIHN1cmUgSSdtIG5vdCBhY2NpZGVudGFsbHkgY2hlY2tpbmcgbG9uZ3MKKyAgICAgICAgICAgICMganVzdCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgdW5pZmllZCB0eXBlIGZvciBpbnRlZ2VycwogICAgICAgICAgICAgYXNzZXJ0IHR5cGUoaSkgPT0gaW50CiAgICAgICAgICAgICBhc3NlcnQgdHlwZShmb3JtYXRfc3BlYykgPT0gc3RyCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksIHJlc3VsdCkKQEAgLTM1Myw2ICszMjMsMTAgQEAKICAgICAgICAgIyBpc3N1ZSA1NzgyLCBjb21tYXMgd2l0aCBubyBzcGVjaWZpZXIgdHlwZQogICAgICAgICB0ZXN0KDEyMzQsICcwMTAsJywgJzAwLDAwMSwyMzQnKQogCisgICAgICAgICMgVW5pZmllZCB0eXBlIGZvciBpbnRlZ2VycworICAgICAgICB0ZXN0KDEwKioxMDAsICdkJywgJzEnICsgJzAnICogMTAwKQorICAgICAgICB0ZXN0KDEwKioxMDArMTAwLCAnZCcsICcxJyArICcwJyAqIDk3ICsgJzEwMCcpCisKICAgICAgICAgIyBtYWtlIHN1cmUgdGhlc2UgYXJlIGVycm9ycwogCiAgICAgICAgICMgcHJlY2lzaW9uIGRpc2FsbG93ZWQKQEAgLTM5Myw5NiArMzY3LDYgQEAKICAgICAgICAgdGVzdCgxMjM0NTYsICIxPTIwIiwgJzExMTExMTExMTExMTExMTIzNDU2JykKICAgICAgICAgdGVzdCgxMjM0NTYsICIqPTIwIiwgJyoqKioqKioqKioqKioqMTIzNDU2JykKIAotICAgIGRlZiB0ZXN0X2xvbmdfX2Zvcm1hdF9fKHNlbGYpOgotICAgICAgICBkZWYgdGVzdChpLCBmb3JtYXRfc3BlYywgcmVzdWx0KToKLSAgICAgICAgICAgICMgbWFrZSBzdXJlIHdlJ3JlIG5vdCBhY2NpZGVudGFsbHkgY2hlY2tpbmcgaW50cwotICAgICAgICAgICAgYXNzZXJ0IHR5cGUoaSkgPT0gaW50Ci0gICAgICAgICAgICBhc3NlcnQgdHlwZShmb3JtYXRfc3BlYykgPT0gc3RyCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYyksIHJlc3VsdCkKLQotICAgICAgICB0ZXN0KDEwKioxMDAsICdkJywgJzEnICsgJzAnICogMTAwKQotICAgICAgICB0ZXN0KDEwKioxMDArMTAwLCAnZCcsICcxJyArICcwJyAqIDk3ICsgJzEwMCcpCi0KLSAgICAgICAgdGVzdCgxMjM0NTY3ODksICdkJywgJzEyMzQ1Njc4OScpCi0gICAgICAgIHRlc3QoMTIzNDU2Nzg5LCAnZCcsICcxMjM0NTY3ODknKQotCi0gICAgICAgICMgc2lnbiBhbmQgYWxpZ25pbmcgYXJlIGludGVyZGVwZW5kZW50Ci0gICAgICAgIHRlc3QoMSwgIi0iLCAnMScpCi0gICAgICAgIHRlc3QoLTEsICItIiwgJy0xJykKLSAgICAgICAgdGVzdCgxLCAiLTMiLCAnICAxJykKLSAgICAgICAgdGVzdCgtMSwgIi0zIiwgJyAtMScpCi0gICAgICAgIHRlc3QoMSwgIiszIiwgJyArMScpCi0gICAgICAgIHRlc3QoLTEsICIrMyIsICcgLTEnKQotICAgICAgICB0ZXN0KDEsICIgMyIsICcgIDEnKQotICAgICAgICB0ZXN0KC0xLCAiIDMiLCAnIC0xJykKLSAgICAgICAgdGVzdCgxLCAiICIsICcgMScpCi0gICAgICAgIHRlc3QoLTEsICIgIiwgJy0xJykKLQotICAgICAgICB0ZXN0KDEsICdjJywgJ1wwMScpCi0KLSAgICAgICAgIyBoZXgKLSAgICAgICAgdGVzdCgzLCAieCIsICIzIikKLSAgICAgICAgdGVzdCgzLCAiWCIsICIzIikKLSAgICAgICAgdGVzdCgxMjM0LCAieCIsICI0ZDIiKQotICAgICAgICB0ZXN0KC0xMjM0LCAieCIsICItNGQyIikKLSAgICAgICAgdGVzdCgxMjM0LCAiOHgiLCAiICAgICA0ZDIiKQotICAgICAgICB0ZXN0KC0xMjM0LCAiOHgiLCAiICAgIC00ZDIiKQotICAgICAgICB0ZXN0KDEyMzQsICJ4IiwgIjRkMiIpCi0gICAgICAgIHRlc3QoLTEyMzQsICJ4IiwgIi00ZDIiKQotICAgICAgICB0ZXN0KC0zLCAieCIsICItMyIpCi0gICAgICAgIHRlc3QoLTMsICJYIiwgIi0zIikKLQotICAgICAgICAjIG9jdGFsCi0gICAgICAgIHRlc3QoMywgIm8iLCAiMyIpCi0gICAgICAgIHRlc3QoLTMsICJvIiwgIi0zIikKLSAgICAgICAgdGVzdCg2NSwgIm8iLCAiMTAxIikKLSAgICAgICAgdGVzdCgtNjUsICJvIiwgIi0xMDEiKQotICAgICAgICB0ZXN0KDEyMzQsICJvIiwgIjIzMjIiKQotICAgICAgICB0ZXN0KC0xMjM0LCAibyIsICItMjMyMiIpCi0gICAgICAgIHRlc3QoMTIzNCwgIi1vIiwgIjIzMjIiKQotICAgICAgICB0ZXN0KC0xMjM0LCAiLW8iLCAiLTIzMjIiKQotICAgICAgICB0ZXN0KDEyMzQsICIgbyIsICIgMjMyMiIpCi0gICAgICAgIHRlc3QoLTEyMzQsICIgbyIsICItMjMyMiIpCi0gICAgICAgIHRlc3QoMTIzNCwgIitvIiwgIisyMzIyIikKLSAgICAgICAgdGVzdCgtMTIzNCwgIitvIiwgIi0yMzIyIikKLQotICAgICAgICAjIGJpbmFyeQotICAgICAgICB0ZXN0KDMsICJiIiwgIjExIikKLSAgICAgICAgdGVzdCgtMywgImIiLCAiLTExIikKLSAgICAgICAgdGVzdCgxMjM0LCAiYiIsICIxMDAxMTAxMDAxMCIpCi0gICAgICAgIHRlc3QoLTEyMzQsICJiIiwgIi0xMDAxMTAxMDAxMCIpCi0gICAgICAgIHRlc3QoMTIzNCwgIi1iIiwgIjEwMDExMDEwMDEwIikKLSAgICAgICAgdGVzdCgtMTIzNCwgIi1iIiwgIi0xMDAxMTAxMDAxMCIpCi0gICAgICAgIHRlc3QoMTIzNCwgIiBiIiwgIiAxMDAxMTAxMDAxMCIpCi0gICAgICAgIHRlc3QoLTEyMzQsICIgYiIsICItMTAwMTEwMTAwMTAiKQotICAgICAgICB0ZXN0KDEyMzQsICIrYiIsICIrMTAwMTEwMTAwMTAiKQotICAgICAgICB0ZXN0KC0xMjM0LCAiK2IiLCAiLTEwMDExMDEwMDEwIikKLQotICAgICAgICAjIG1ha2Ugc3VyZSB0aGVzZSBhcmUgZXJyb3JzCi0KLSAgICAgICAgIyBwcmVjaXNpb24gZGlzYWxsb3dlZAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCAiMS4zIikKLSAgICAgICAgIyBzaWduIG5vdCBhbGxvd2VkIHdpdGggJ2MnCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIDMgLl9fZm9ybWF0X18sICIrYyIpCi0gICAgICAgICMgZm9ybWF0IHNwZWMgbXVzdCBiZSBzdHJpbmcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAzIC5fX2Zvcm1hdF9fLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIDMgLl9fZm9ybWF0X18sIDApCi0KLSAgICAgICAgIyBlbnN1cmUgdGhhdCBvbmx5IGludCBhbmQgZmxvYXQgdHlwZSBzcGVjaWZpZXJzIHdvcmsKLSAgICAgICAgZm9yIGZvcm1hdF9zcGVjIGluIChbY2hyKHgpIGZvciB4IGluIHJhbmdlKG9yZCgnYScpLCBvcmQoJ3onKSsxKV0gKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdBJyksIG9yZCgnWicpKzEpXSk6Ci0gICAgICAgICAgICBpZiBub3QgZm9ybWF0X3NwZWMgaW4gJ2JjZG94WGVFZkZnR24lJzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAwIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAxIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoLTEpIC5fX2Zvcm1hdF9fLCBmb3JtYXRfc3BlYykKLQotICAgICAgICAjIGVuc3VyZSB0aGF0IGZsb2F0IHR5cGUgc3BlY2lmaWVycyB3b3JrOyBmb3JtYXQgY29udmVydHMKLSAgICAgICAgIyAgdGhlIGxvbmcgdG8gYSBmbG9hdAotICAgICAgICBmb3IgZm9ybWF0X3NwZWMgaW4gJ2VFZkZnRyUnOgotICAgICAgICAgICAgZm9yIHZhbHVlIGluIFswLCAxLCAtMSwgMTAwLCAtMTAwLCAxMjM0NTY3ODkwLCAtMTIzNDU2Nzg5MF06Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KHZhbHVlKS5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSkKLQogICAgIEBydW5fd2l0aF9sb2NhbGUoJ0xDX05VTUVSSUMnLCAnZW5fVVMuVVRGOCcpCiAgICAgZGVmIHRlc3RfZmxvYXRfX2Zvcm1hdF9fbG9jYWxlKHNlbGYpOgogICAgICAgICAjIHRlc3QgbG9jYWxlIHN1cHBvcnQgZm9yIF9fZm9ybWF0X18gY29kZSAnbicKQEAgLTUxMiwxMyArMzk2LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZvcm1hdCgwLCBjZm10KSksIGxlbihmb3JtYXQoeCwgY2ZtdCkpKQogCiAgICAgZGVmIHRlc3RfZmxvYXRfX2Zvcm1hdF9fKHNlbGYpOgotICAgICAgICAjIHRoZXNlIHNob3VsZCBiZSByZXdyaXR0ZW4gdG8gdXNlIGJvdGggZm9ybWF0KHgsIHNwZWMpIGFuZAotICAgICAgICAjIHguX19mb3JtYXRfXyhzcGVjKQotCiAgICAgICAgIGRlZiB0ZXN0KGYsIGZvcm1hdF9zcGVjLCByZXN1bHQpOgotICAgICAgICAgICAgYXNzZXJ0IHR5cGUoZikgPT0gZmxvYXQKLSAgICAgICAgICAgIGFzc2VydCB0eXBlKGZvcm1hdF9zcGVjKSA9PSBzdHIKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Zvcm1hdF9fKGZvcm1hdF9zcGVjKSwgcmVzdWx0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgZm9ybWF0X3NwZWMpLCByZXN1bHQpCiAKICAgICAgICAgdGVzdCgwLjAsICdmJywgJzAuMDAwMDAwJykKIApAQCAtNTYwLDEzICs0NDAsMTMgQEAKICAgICAgICAgICAgIHJlc3VsdCA9IGYuX19mb3JtYXRfXyhmbXQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCA5OCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy03XSwgJy4nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdFs6MTJdIGluICgnMTEyMzQwMDAwMDAwJywgJzExMjMzOTk5OTk5OScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihyZXN1bHRbOjEyXSwgKCcxMTIzNDAwMDAwMDAnLCAnMTEyMzM5OTk5OTk5JykpCiAgICAgICAgIGYgPSAxLjEyMzRlMjAwCiAgICAgICAgIGZvciBmbXQgaW4gJ2YnLCAnRic6CiAgICAgICAgICAgICByZXN1bHQgPSBmLl9fZm9ybWF0X18oZm10KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0KSwgMjA4KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTddLCAnLicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0WzoxMl0gaW4gKCcxMTIzNDAwMDAwMDAnLCAnMTEyMzM5OTk5OTk5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHJlc3VsdFs6MTJdLCAoJzExMjM0MDAwMDAwMCcsICcxMTIzMzk5OTk5OTknKSkKIAogCiAgICAgICAgIHRlc3QoIDEuMCwgJ2UnLCAnMS4wMDAwMDBlKzAwJykKQEAgLTYzMiw5ICs1MTIsMjcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsIDFlLTEwMCwgZm9ybWF0X3NwZWMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAtMWUtMTAwLCBmb3JtYXRfc3BlYykKIAotICAgICAgICAjIEFsdGVybmF0ZSBmb3JtYXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAwLjAsICcjMjBmJykKKyAgICAgICAgIyBBbHRlcm5hdGUgZmxvYXQgZm9ybWF0dGluZworICAgICAgICB0ZXN0KDEuMCwgJy4wZScsICcxZSswMCcpCisgICAgICAgIHRlc3QoMS4wLCAnIy4wZScsICcxLmUrMDAnKQorICAgICAgICB0ZXN0KDEuMCwgJy4wZicsICcxJykKKyAgICAgICAgdGVzdCgxLjAsICcjLjBmJywgJzEuJykKKyAgICAgICAgdGVzdCgxLjEsICdnJywgJzEuMScpCisgICAgICAgIHRlc3QoMS4xLCAnI2cnLCAnMS4xMDAwMCcpCisgICAgICAgIHRlc3QoMS4wLCAnLjAlJywgJzEwMCUnKQorICAgICAgICB0ZXN0KDEuMCwgJyMuMCUnLCAnMTAwLiUnKQorCisgICAgICAgICMgSXNzdWUgNzA5NDogQWx0ZXJuYXRlIGZvcm1hdHRpbmcgKHNwZWNpZmllZCBieSAjKQorICAgICAgICB0ZXN0KDEuMCwgJzBlJywgICcxLjAwMDAwMGUrMDAnKQorICAgICAgICB0ZXN0KDEuMCwgJyMwZScsICcxLjAwMDAwMGUrMDAnKQorICAgICAgICB0ZXN0KDEuMCwgJzBmJywgICcxLjAwMDAwMCcgKQorICAgICAgICB0ZXN0KDEuMCwgJyMwZicsICcxLjAwMDAwMCcpCisgICAgICAgIHRlc3QoMS4wLCAnLjFlJywgICcxLjBlKzAwJykKKyAgICAgICAgdGVzdCgxLjAsICcjLjFlJywgJzEuMGUrMDAnKQorICAgICAgICB0ZXN0KDEuMCwgJy4xZicsICAnMS4wJykKKyAgICAgICAgdGVzdCgxLjAsICcjLjFmJywgJzEuMCcpCisgICAgICAgIHRlc3QoMS4wLCAnLjElJywgICcxMDAuMCUnKQorICAgICAgICB0ZXN0KDEuMCwgJyMuMSUnLCAnMTAwLjAlJykKIAogICAgICAgICAjIElzc3VlIDY5MDIKICAgICAgICAgdGVzdCgxMjM0NS42LCAiMDwyMCIsICcxMjM0NS42MDAwMDAwMDAwMDAwMCcpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Vjbi5weSBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CmluZGV4IDJkNDgxNzkuLmZkNjIwZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdWNuLnB5CkBAIC04OCw5ICs4OCwxMyBAQAogICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtMzQwMCIsICJcdTM0MDAiKQogICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtNERCNSIsICJcdTRkYjUiKQogICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtNEUwMCIsICJcdTRlMDAiKQotICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtOUZBNSIsICJcdTlmYTUiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtOUZDQiIsICJcdTlmQ0IiKQogICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtMjAwMDAiLCAiXFUwMDAyMDAwMCIpCiAgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC0yQTZENiIsICJcVTAwMDJhNmQ2IikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTJBNzAwIiwgIlxVMDAwMkE3MDAiKQorICAgICAgICBzZWxmLmNoZWNrbGV0dGVyKCJDSksgVU5JRklFRCBJREVPR1JBUEgtMkI3MzQiLCAiXFUwMDAyQjczNCIpCisgICAgICAgIHNlbGYuY2hlY2tsZXR0ZXIoIkNKSyBVTklGSUVEIElERU9HUkFQSC0yQjc0MCIsICJcVTAwMDJCNzQwIikKKyAgICAgICAgc2VsZi5jaGVja2xldHRlcigiQ0pLIFVOSUZJRUQgSURFT0dSQVBILTJCODFEIiwgIlxVMDAwMkI4MUQiKQogCiAgICAgZGVmIHRlc3RfYm1wX2NoYXJhY3RlcnMoc2VsZik6CiAgICAgICAgIGltcG9ydCB1bmljb2RlZGF0YQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CmluZGV4IDc3MmVhMzUuLjk3YmU1ODcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKQEAgLTExLDYgKzExLDcgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHN0cmluZ190ZXN0cworaW1wb3J0IF9zdHJpbmcKIAogIyBFcnJvciBoYW5kbGluZyAoYmFkIGRlY29kZXIgcmV0dXJuKQogZGVmIHNlYXJjaF9mdW5jdGlvbihlbmNvZGluZyk6CkBAIC0zMCwxOSArMzEsMTIgQEAKICAgICAgICAgcmV0dXJuIE5vbmUKIGNvZGVjcy5yZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pCiAKLWNsYXNzIFVuaWNvZGVUZXN0KAotICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LAotICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKLSAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKLSAgICApOgorY2xhc3MgVW5pY29kZVRlc3Qoc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QsCisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdCwKKyAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVRlc3QpOgorCiAgICAgdHlwZTJ0ZXN0ID0gc3RyCiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYud2FybmluZ19maWx0ZXJzID0gd2FybmluZ3MuZmlsdGVyc1s6XQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICB3YXJuaW5ncy5maWx0ZXJzID0gc2VsZi53YXJuaW5nX2ZpbHRlcnMKLQogICAgIGRlZiBjaGVja2VxdWFsbm9maXgoc2VsZiwgcmVzdWx0LCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKICAgICAgICAgbWV0aG9kID0gZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpCiAgICAgICAgIHJlYWxyZXN1bHQgPSBtZXRob2QoKmFyZ3MpCkBAIC0yODIsMjIgKzI3NiwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICdyZXBsYWNlJy5yZXBsYWNlLCAiciIsIDQyKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNfY29tcGFyaXNvbihzZWxmKToKLSAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycgPT0gYidhYmMnLCBGYWxzZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJyAhPSBiJ2FiYycsIFRydWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycgPT0gYnl0ZWFycmF5KGInYWJjJyksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnICE9IGJ5dGVhcnJheShiJ2FiYycpLCBUcnVlKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgQnl0ZXNXYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJyA9PSBiJ2FiYycsIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJyAhPSBiJ2FiYycsIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnID09IGJ5dGVhcnJheShiJ2FiYycpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycgIT0gYnl0ZWFycmF5KGInYWJjJyksIFRydWUpCiAKICAgICBkZWYgdGVzdF9jb21wYXJpc29uKHNlbGYpOgogICAgICAgICAjIENvbXBhcmlzb25zOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYmMnLCAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsICdhYmMnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiY2QnID4gJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjZCcgPiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmNkJyA+ICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiYycgPCAnYWJjZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjJyA8ICdhYmNkJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYmMnIDwgJ2FiY2QnKQogCiAgICAgICAgIGlmIDA6CkBAIC00MzUsMzIgKzQyNCwzMiBAQAogCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGNvbnRhaW5zIG1ldGhvZAotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluICdhYmRiJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiAnYmRhYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgaW4gJ2JkYWJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiAnYmRiYScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgbm90IGluICdiZGInKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluICdiZGJhJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiAoJ2EnLDEsTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgaW4gKDEsTm9uZSwnYScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluICgnYScsMSxOb25lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhJyBpbiAoMSxOb25lLCdhJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgbm90IGluICgneCcsMSwneScpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIG5vdCBpbiAoJ3gnLDEsTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYWJjZCcgbm90IGluICdhYmN4eHh4JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYicgaW4gJ2FiY2QnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FiJyBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhYicgaW4gKDEsTm9uZSwnYWInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcnIGluICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJycgaW4gJycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnJyBpbiAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdcMCcgbm90IGluICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1wwJyBpbiAnXDBhYmMnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1wwJyBpbiAnYWJjXDAnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2EnIGluICdcMGFiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYXNkZicgaW4gJ2FzZGYnKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2FzZGYnIG5vdCBpbiAnYXNkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdhc2RmJyBub3QgaW4gJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYWJkYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYmRhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYmRhYmEnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhJywgJ2JkYmEnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhJywgJ2JkYicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYmRiYScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoJ2EnLDEsTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAoMSxOb25lLCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2EnLCAoJ3gnLDEsJ3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsICgneCcsMSxOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYWJjZCcsICdhYmN4eHh4JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYWInLCAnYWJjZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FiJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2FiJywgKDEsTm9uZSwnYWInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEluKCcnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignXDAnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignXDAnLCAnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdcMCcsICdhYmNcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnXDBhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdhc2RmJywgJ2FzZGYnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdhc2RmJywgJ2FzZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ2FzZGYnLCAnJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICJhYmMiLl9fY29udGFpbnNfXykKIApAQCAtNjIwLDEzICs2MDksMTYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezB9Jy5mb3JtYXQoe30pLCAne30nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdChbXSksICdbXScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swfScuZm9ybWF0KFsxXSksICdbMV0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MH0nLmZvcm1hdChFKCdkYXRhJykpLCAnRShkYXRhKScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmR9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ0coZGF0YSknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDo+MTVzfScuZm9ybWF0KEcoJ2RhdGEnKSksICcgc3RyaW5nIGlzIGRhdGEnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MCFzfScuZm9ybWF0KEcoJ2RhdGEnKSksICdzdHJpbmcgaXMgZGF0YScpCiAKKyAgICAgICAgbXNnID0gJ29iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0IHN0cmluZyBpcyBkZXByZWNhdGVkJworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKG1zZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEwfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMHN9Jy5mb3JtYXQoRSgnZGF0YScpKSwgJyBFKGRhdGEpICAnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6PjE1c30nLmZvcm1hdChHKCdkYXRhJykpLCAnIHN0cmluZyBpcyBkYXRhJykKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheT0yNykpLApAQCAtNjU3LDggKzY0OSw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsICd7MX0nLmZvcm1hdCwgJ2FiYycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICd7eH0nLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIn17Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7Ii5mb3JtYXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ9Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJhYmN7MDp7fSIuZm9ybWF0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAiLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswLn0iLmZvcm1hdCkKQEAgLTcwNiw2ICs2OTYsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZm9ybWF0LCAnJywgJyMnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmb3JtYXQsICcnLCAnIzIwJykKIAorICAgIGRlZiB0ZXN0X2Zvcm1hdF9tYXAoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuZm9ybWF0X21hcCh7fSksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhJy5mb3JtYXRfbWFwKHt9KSwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhYicuZm9ybWF0X21hcCh7fSksICdhYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7eycuZm9ybWF0X21hcCh7fSksICdheycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F9fScuZm9ybWF0X21hcCh7fSksICdhfScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t7YicuZm9ybWF0X21hcCh7fSksICd7YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ319YicuZm9ybWF0X21hcCh7fSksICd9YicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F7e2InLmZvcm1hdF9tYXAoe30pLCAnYXtiJykKKworICAgICAgICAjIHVzaW5nIG1hcHBpbmdzCisgICAgICAgIGNsYXNzIE1hcHBpbmcoZGljdCk6CisgICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3toZWxsb30nLmZvcm1hdF9tYXAoTWFwcGluZygpKSwgJ2hlbGxvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne2F9IHt3b3JsZH0nLmZvcm1hdF9tYXAoTWFwcGluZyhhPSdoZWxsbycpKSwgJ2hlbGxvIHdvcmxkJykKKworICAgICAgICBjbGFzcyBJbnRlcm5hbE1hcHBpbmc6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5tYXBwaW5nID0geydhJzogJ2hlbGxvJ30KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm1hcHBpbmdba2V5XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7YX0nLmZvcm1hdF9tYXAoSW50ZXJuYWxNYXBwaW5nKCkpLCAnaGVsbG8nKQorCisKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4PTEwMCk6CisgICAgICAgICAgICAgICAgc2VsZi5feCA9IHgKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3tmb28uX3h9Jy5mb3JtYXRfbWFwKHsnZm9vJzogQygyMCl9KSwgJzIwJykKKworICAgICAgICAjIHRlc3QgdmFyaW91cyBlcnJvcnMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAneycuZm9ybWF0X21hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnfScuZm9ybWF0X21hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnYXsnLmZvcm1hdF9tYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ2F9Jy5mb3JtYXRfbWFwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7YScuZm9ybWF0X21hcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnfWEnLmZvcm1hdF9tYXApCisKICAgICBkZWYgdGVzdF9mb3JtYXRfYXV0b19udW1iZXJpbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeD0xMDApOgpAQCAtNzkxLDEyICs4MjEsOSBAQAogCiAgICAgZGVmIHRlc3Rfc3RhcnRzd2l0aF9lbmRzd2l0aF9lcnJvcnMoc2VsZik6CiAgICAgICAgIGZvciBtZXRoIGluICgnZm9vJy5zdGFydHN3aXRoLCAnZm9vJy5lbmRzd2l0aCk6Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICAgICAgbWV0aChbJ2YnXSkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGV4YyA9IHN0cihlcnIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnc3RhcnRzL2VuZHN3aXRoIHVuZXhwZWN0ZWRseSBzdWNjZWVkZWQnKQorICAgICAgICAgICAgZXhjID0gc3RyKGNtLmV4Y2VwdGlvbikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0cicsIGV4YykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R1cGxlJywgZXhjKQogCkBAIC0xMTE3LDYgKzExNDQsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCAnQW5kclwyMDIgeCcuZW5jb2RlLCAnYXNjaWknLCdzdHJpY3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdBbmRyXDIwMiB4Jy5lbmNvZGUoJ2FzY2lpJywnaWdub3JlJyksIGIiQW5kciB4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsJ3JlcGxhY2UnKSwgYiJBbmRyPyB4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsICdyZXBsYWNlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ0FuZHJcMjAyIHgnLmVuY29kZSgnYXNjaWknLCBlcnJvcnM9J3JlcGxhY2UnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQW5kclwyMDIgeCcuZW5jb2RlKCdhc2NpaScsICdpZ25vcmUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQW5kclwyMDIgeCcuZW5jb2RlKGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0naWdub3JlJykpCiAKICAgICAgICAgIyBFcnJvciBoYW5kbGluZyAoZGVjb2RpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgc3RyLCBiJ0FuZHJcMjAyIHgnLCAnYXNjaWknKQpAQCAtMTE0Niw4ICsxMTc3LDEzIEBACiAgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHdyb25nIGFyZ3VtZW50cykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAiaGVsbG8iLmVuY29kZSwgNDIsIDQyLCA0MikKIAotICAgICAgICAjIEVycm9yIGhhbmRsaW5nIChQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGludCwgIlx1MDIwMCIpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKGxvbmUgc3Vycm9nYXRlIGluIFB5VW5pY29kZV9UcmFuc2Zvcm1EZWNpbWFsVG9BU0NJSSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGludCwgIlx1ZDgwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgaW50LCAiXHVkZjAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBmbG9hdCwgIlx1ZDgwMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgZmxvYXQsICJcdWRmMDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvbXBsZXgsICJcdWQ4MDAiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvbXBsZXgsICJcdWRmMDAiKQogCiAgICAgZGVmIHRlc3RfY29kZWNzKHNlbGYpOgogICAgICAgICAjIEVuY29kaW5nCkBAIC0xMjAwLDggKzEyMzYsOCBAQAogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKICAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAotICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKLSAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCisgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAorICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKICAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfMycsICdpc284ODU5XzQnLCAnaXNvODg1OV81JywgJ2lzbzg4NTlfNicsCkBAIC0xMjI4LDggKzEyNjQsOCBAQAogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4LCAyNTYpKQogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gKAogICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsCi0gICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAotICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKKyAgICAgICAgICAgICdjcDQzNycsICdjcDUwMCcsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsCisgICAgICAgICAgICAnY3A4NTInLCAnY3A4NTUnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAogICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV80JywgJ2lzbzg4NTlfNScsCkBAIC0xMjc3LDIxICsxMzEzLDIwIEBACiAgICAgICAgIHkgPSB4LmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAKLSAgICAgICAgIyBGSVhNRQotICAgICAgICAjeSA9IHInXFUwMDEwMDAwMCcKLSAgICAgICAgI3ggPSB5LmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQotICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotICAgICAgICAjeSA9IHInXFUwMDAxMDAwMCcKLSAgICAgICAgI3ggPSB5LmVuY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQotICAgICAgICAjc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICB5ID0gYnInXFUwMDEwMDAwMCcKKyAgICAgICAgeCA9IHkuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKS5lbmNvZGUoInJhdy11bmljb2RlLWVzY2FwZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgeSA9IGJyJ1xVMDAwMTAwMDAnCisgICAgICAgIHggPSB5LmRlY29kZSgicmF3LXVuaWNvZGUtZXNjYXBlIikuZW5jb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAKLSAgICAgICAgI3RyeToKLSAgICAgICAgIyAgICAnXFUxMTExMTExMScuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQotICAgICAgICAjZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOgotICAgICAgICAjICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5zdGFydCwgMCkKLSAgICAgICAgIyAgICBzZWxmLmFzc2VydEVxdWFsKGUuZW5kLCAxMCkKLSAgICAgICAgI2Vsc2U6Ci0gICAgICAgICMgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYnInXFUxMTExMTExMScuZGVjb2RlKCJyYXctdW5pY29kZS1lc2NhcGUiKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuc3RhcnQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZW5kLCAxMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciIpCiAKICAgICBkZWYgdGVzdF9jb252ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBfX3VuaWNvZGVfXygpIHdvcmtzIHByb3Blcmx5CkBAIC0xMzY1LDYgKzE0MDAsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHMxKCkpLCAnXFxuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHMyKCkpLCAnXFxuJykKIAorICAgIGRlZiB0ZXN0X3ByaW50YWJsZV9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoJ1xVMDAwMTAwMDAnKSwgIiclYyciICUgKDB4MTAwMDAsKSkgIyBwcmludGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKCdcVTAwMDE0MDAwJyksICInXFxVMDAwMTQwMDAnIikgICAgICMgbm9ucHJpbnRhYmxlCisKICAgICBkZWYgdGVzdF9leHBhbmR0YWJzX292ZXJmbG93c19ncmFjZWZ1bGx5KHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBvbmx5IGFmZmVjdHMgMzItYml0IHBsYXRmb3JtcyBiZWNhdXNlIGV4cGFuZHRhYnMgY2FuIG9ubHkgdGFrZQogICAgICAgICAjIGFuIGludCBhcyB0aGUgbWF4IHZhbHVlLCBub3QgYSA2NC1iaXQgQyBsb25nLiAgSWYgZXhwYW5kdGFicyBpcyBjaGFuZ2VkCkBAIC0xMzkzLDYgKzE0MzIsMTY1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzIiAlIHMsICdfX3N0cl9fIG92ZXJyaWRkZW4nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7fSIuZm9ybWF0KHMpLCAnX19zdHJfXyBvdmVycmlkZGVuJykKIAorICAgICMgVGVzdCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpCisgICAgZGVmIHRlc3RfZnJvbV9mb3JtYXQoc2VsZik6CisgICAgICAgIHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHB5dGhvbmFwaSwgcHlfb2JqZWN0LCBjX2ludAorICAgICAgICBpZiBzeXMubWF4dW5pY29kZSA9PSA2NTUzNToKKyAgICAgICAgICAgIG5hbWUgPSAiUHlVbmljb2RlVUNTMl9Gcm9tRm9ybWF0IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbmFtZSA9ICJQeVVuaWNvZGVVQ1M0X0Zyb21Gb3JtYXQiCisgICAgICAgIF9QeVVuaWNvZGVfRnJvbUZvcm1hdCA9IGdldGF0dHIocHl0aG9uYXBpLCBuYW1lKQorICAgICAgICBfUHlVbmljb2RlX0Zyb21Gb3JtYXQucmVzdHlwZSA9IHB5X29iamVjdAorCisgICAgICAgIGRlZiBQeVVuaWNvZGVfRnJvbUZvcm1hdChmb3JtYXQsICphcmdzKToKKyAgICAgICAgICAgIGNhcmdzID0gdHVwbGUoCisgICAgICAgICAgICAgICAgcHlfb2JqZWN0KGFyZykgaWYgaXNpbnN0YW5jZShhcmcsIHN0cikgZWxzZSBhcmcKKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3MpCisgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Gcm9tRm9ybWF0KGZvcm1hdCwgKmNhcmdzKQorCisgICAgICAgICMgYXNjaWkgZm9ybWF0LCBub24tYXNjaWkgYXJndW1lbnQKKyAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInYXNjaWlceDdmPSVVJywgJ3VuaWNvZGVceGU5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCAnYXNjaWlceDdmPXVuaWNvZGVceGU5JykKKworICAgICAgICAjIG5vbi1hc2NpaSBmb3JtYXQsIGFzY2lpIGFyZ3VtZW50OiBlbnN1cmUgdGhhdCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKQorICAgICAgICAjIHJhaXNlcyBhbiBlcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAnXlB5VW5pY29kZV9Gcm9tRm9ybWF0VlwoXCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAnCisgICAgICAgICAgICAnc3RyaW5nLCBnb3QgYSBub24tQVNDSUkgYnl0ZTogMHhlOSQnLAorICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Gb3JtYXQsIGIndW5pY29kZVx4ZTk9JXMnLCAnYXNjaWknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUHlVbmljb2RlX0Zyb21Gb3JtYXQoYiclYycsIGNfaW50KDB4YWJjZCkpLCAnXHVhYmNkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQeVVuaWNvZGVfRnJvbUZvcm1hdChiJyVjJywgY19pbnQoMHgxMGZmZmYpKSwgJ1xVMDAxMGZmZmYnKQorCisgICAgICAgICMgb3RoZXIgdGVzdHMKKyAgICAgICAgdGV4dCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KGInJSVBOiVBJywgJ2FiY1x4ZTlcdWFiY2RcVTAwMTBmZmZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LCByIiVBOidhYmNceGU5XHVhYmNkXFUwMDEwZmZmZiciKQorCisgICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCAnYWJjJywgYid4eXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiYycpCisKKyAgICAgICAgIyBUZXN0IHN0cmluZyBkZWNvZGUgZnJvbSBwYXJhbWV0ZXIgb2YgJXMgdXNpbmcgdXRmLTguCisgICAgICAgICMgYidceGU0XHhiYVx4YmFceGU2XHhiMFx4OTEnIGlzIHV0Zi04IGVuY29kZWQgYnl0ZSBzZXF1ZW5jZSBvZgorICAgICAgICAjICdcdTRlYmFcdTZjMTEnCisgICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ1x4ZTRceGJhXHhiYVx4ZTZceGIwXHg5MScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgJ3JlcHI9XHU0ZWJhXHU2YzExJykKKworICAgICAgICAjVGVzdCByZXBsYWNlIGVycm9yIGhhbmRsZXIuCisgICAgICAgIHRleHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChiJ3JlcHI9JVYnLCBOb25lLCBiJ2FiY1x4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQsICdyZXByPWFiY1x1ZmZmZCcpCisKKyAgICAjIFRlc3QgUHlVbmljb2RlX0FzV2lkZUNoYXIoKQorICAgIGRlZiB0ZXN0X2Fzd2lkZWNoYXIoc2VsZik6CisgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCB1bmljb2RlX2Fzd2lkZWNoYXIKKyAgICAgICAgc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdjdHlwZXMnKQorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY193Y2hhciwgc2l6ZW9mCisKKyAgICAgICAgd2NoYXIsIHNpemUgPSB1bmljb2RlX2Fzd2lkZWNoYXIoJ2FiY2RlZicsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y2hhciwgJ2FiJykKKworICAgICAgICB3Y2hhciwgc2l6ZSA9IHVuaWNvZGVfYXN3aWRlY2hhcignYWJjJywgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjaGFyLCAnYWJjJykKKworICAgICAgICB3Y2hhciwgc2l6ZSA9IHVuaWNvZGVfYXN3aWRlY2hhcignYWJjJywgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjaGFyLCAnYWJjXDAnKQorCisgICAgICAgIHdjaGFyLCBzaXplID0gdW5pY29kZV9hc3dpZGVjaGFyKCdhYmMnLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjaGFyLCAnYWJjXDAnKQorCisgICAgICAgIHdjaGFyLCBzaXplID0gdW5pY29kZV9hc3dpZGVjaGFyKCdhYmNcMGRlZicsIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NoYXIsICdhYmNcMGRlZlwwJykKKworICAgICAgICBub25ibXAgPSBjaHIoMHgxMGZmZmYpCisgICAgICAgIGlmIHNpemVvZihjX3djaGFyKSA9PSAyOgorICAgICAgICAgICAgYnVmbGVuID0gMworICAgICAgICAgICAgbmNoYXIgPSAyCisgICAgICAgIGVsc2U6ICMgc2l6ZW9mKGNfd2NoYXIpID09IDQKKyAgICAgICAgICAgIGJ1ZmxlbiA9IDIKKyAgICAgICAgICAgIG5jaGFyID0gMQorICAgICAgICB3Y2hhciwgc2l6ZSA9IHVuaWNvZGVfYXN3aWRlY2hhcihub25ibXAsIGJ1ZmxlbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBuY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y2hhciwgbm9uYm1wICsgJ1wwJykKKworICAgICMgVGVzdCBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZygpCisgICAgZGVmIHRlc3RfYXN3aWRlY2hhcnN0cmluZyhzZWxmKToKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHVuaWNvZGVfYXN3aWRlY2hhcnN0cmluZworICAgICAgICBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2N0eXBlcycpCisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX3djaGFyLCBzaXplb2YKKworICAgICAgICB3Y2hhciwgc2l6ZSA9IHVuaWNvZGVfYXN3aWRlY2hhcnN0cmluZygnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdjaGFyLCAnYWJjXDAnKQorCisgICAgICAgIHdjaGFyLCBzaXplID0gdW5pY29kZV9hc3dpZGVjaGFyc3RyaW5nKCdhYmNcMGRlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y2hhciwgJ2FiY1wwZGVmXDAnKQorCisgICAgICAgIG5vbmJtcCA9IGNocigweDEwZmZmZikKKyAgICAgICAgaWYgc2l6ZW9mKGNfd2NoYXIpID09IDI6CisgICAgICAgICAgICBuY2hhciA9IDIKKyAgICAgICAgZWxzZTogIyBzaXplb2YoY193Y2hhcikgPT0gNAorICAgICAgICAgICAgbmNoYXIgPSAxCisgICAgICAgIHdjaGFyLCBzaXplID0gdW5pY29kZV9hc3dpZGVjaGFyc3RyaW5nKG5vbmJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBuY2hhcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y2hhciwgbm9uYm1wICsgJ1wwJykKKworCitjbGFzcyBTdHJpbmdNb2R1bGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfcGFyc2VyKHNlbGYpOgorICAgICAgICBkZWYgcGFyc2UoZm9ybWF0KToKKyAgICAgICAgICAgIHJldHVybiBsaXN0KF9zdHJpbmcuZm9ybWF0dGVyX3BhcnNlcihmb3JtYXQpKQorCisgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlKCJwcmVmaXggezIhc314eHh7MDpeKzEwLjNmfXtvYmouYXR0ciFzfSB7elswXSFzOjEwfSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0dGVyLCBbCisgICAgICAgICAgICAoJ3ByZWZpeCAnLCAnMicsICcnLCAncycpLAorICAgICAgICAgICAgKCd4eHgnLCAnMCcsICdeKzEwLjNmJywgTm9uZSksCisgICAgICAgICAgICAoJycsICdvYmouYXR0cicsICcnLCAncycpLAorICAgICAgICAgICAgKCcgJywgJ3pbMF0nLCAnMTAnLCAncycpLAorICAgICAgICBdKQorCisgICAgICAgIGZvcm1hdHRlciA9IHBhcnNlKCJwcmVmaXgge30gc3VmZml4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXR0ZXIsIFsKKyAgICAgICAgICAgICgncHJlZml4ICcsICcnLCAnJywgTm9uZSksCisgICAgICAgICAgICAoJyBzdWZmaXgnLCBOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgXSkKKworICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZSgic3RyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXR0ZXIsIFsKKyAgICAgICAgICAgICgnc3RyJywgTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgIF0pCisKKyAgICAgICAgZm9ybWF0dGVyID0gcGFyc2UoIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0dGVyLCBbXSkKKworICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZSgiezB9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXR0ZXIsIFsKKyAgICAgICAgICAgICgnJywgJzAnLCAnJywgTm9uZSksCisgICAgICAgIF0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfc3RyaW5nLmZvcm1hdHRlcl9wYXJzZXIsIDEpCisKKyAgICBkZWYgdGVzdF9mb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdChzZWxmKToKKyAgICAgICAgZGVmIHNwbGl0KG5hbWUpOgorICAgICAgICAgICAgaXRlbXMgPSBsaXN0KF9zdHJpbmcuZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQobmFtZSkpCisgICAgICAgICAgICBpdGVtc1sxXSA9IGxpc3QoaXRlbXNbMV0pCisgICAgICAgICAgICByZXR1cm4gaXRlbXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgib2JqIiksIFsib2JqIiwgW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KCJvYmouYXJnIiksIFsib2JqIiwgWyhUcnVlLCAnYXJnJyldXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgib2JqW2tleV0iKSwgWyJvYmoiLCBbKEZhbHNlLCAna2V5JyldXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdCgib2JqLmFyZ1trZXkxXVtrZXkyXSIpLCBbCisgICAgICAgICAgICAib2JqIiwKKyAgICAgICAgICAgIFsoVHJ1ZSwgJ2FyZycpLAorICAgICAgICAgICAgIChGYWxzZSwgJ2tleTEnKSwKKyAgICAgICAgICAgICAoRmFsc2UsICdrZXkyJyksCisgICAgICAgICAgICBdXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfc3RyaW5nLmZvcm1hdHRlcl9maWVsZF9uYW1lX3NwbGl0LCAxKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkKaW5kZXggNTlhYjg1ZS4uNmMyMDExYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlX2ZpbGUucHkKQEAgLTUsMTQgKzUsMTYgQEAKIGltcG9ydCB1bmljb2RlZGF0YQogCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIFRFU1RGTl9VTklDT0RFLCBybXRyZWUKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk5fRU5DT0RJTkcsIFRFU1RGTl9VTkVOQ09EQUJMRQotdHJ5OgotICAgIFRFU1RGTl9VTklDT0RFLmVuY29kZShURVNURk5fRU5DT0RJTkcpCi1leGNlcHQgKFVuaWNvZGVFcnJvciwgVHlwZUVycm9yKToKLSAgICAjIEVpdGhlciB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgaXMgTm9uZSwgb3IgdGhlIGZpbGUgbmFtZQotICAgICMgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nLgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBVbmljb2RlIGZpbGVzeXN0ZW0gc2VtYW50aWNzIG9uIHRoaXMgcGxhdGZvcm0uIikKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBybXRyZWUsCisgICAgVEVTVEZOX0VOQ09ESU5HLCBURVNURk5fVU5JQ09ERSwgVEVTVEZOX1VORU5DT0RBQkxFKQorCitpZiBub3Qgb3MucGF0aC5zdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lczoKKyAgICB0cnk6CisgICAgICAgIFRFU1RGTl9VTklDT0RFLmVuY29kZShURVNURk5fRU5DT0RJTkcpCisgICAgZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICMgRWl0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbmNvZGluZyBpcyBOb25lLCBvciB0aGUgZmlsZSBuYW1lCisgICAgICAgICMgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nLgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiTm8gVW5pY29kZSBmaWxlc3lzdGVtIHNlbWFudGljcyBvbiB0aGlzIHBsYXRmb3JtLiIpCiAKIGRlZiByZW1vdmVfaWZfZXhpc3RzKGZpbGVuYW1lKToKICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSk6CkBAIC00NywyMyArNDksNyBAQAogICAgICAgICBiYXNlID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBiYXNlKQogICAgICAgICBmaWxlX2xpc3QgPSBbdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBmKSBmb3IgZiBpbiBmaWxlX2xpc3RdCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhc2UgaW4gZmlsZV9saXN0KQotCi0gICAgIyBEbyBhcyBtYW55ICJlcXVpdmFsYW5jeScgdGVzdHMgYXMgd2UgY2FuIC0gaWUsIGNoZWNrIHRoYXQgYWx0aG91Z2ggd2UKLSAgICAjIGhhdmUgZGlmZmVyZW50IHR5cGVzIGZvciB0aGUgZmlsZW5hbWUsIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgZmlsZS4KLSAgICBkZWYgX2RvX2VxdWl2YWxlbnQoc2VsZiwgZmlsZW5hbWUxLCBmaWxlbmFtZTIpOgotICAgICAgICAjIE5vdGUgd2Ugb25seSBjaGVjayAiZmlsZW5hbWUxIGFnYWluc3QgZmlsZW5hbWUyIiAtIHdlIGRvbid0IGJvdGhlcgotICAgICAgICAjIGNoZWNraW5nICJmaWxlbmFtZTIgYWdhaW5zdCAxIiwgYXMgd2UgYXNzdW1lIHdlIGFyZSBjYWxsZWQgYWdhaW4gd2l0aAotICAgICAgICAjIHRoZSBhcmdzIHJldmVyc2VkLgotICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShmaWxlbmFtZTEpIT10eXBlKGZpbGVuYW1lMiksCi0gICAgICAgICAgICAgICAgICAgICJObyBwb2ludCBjaGVja2luZyBlcXVpdmFsZW50IGZpbGVuYW1lcyBvZiB0aGUgc2FtZSB0eXBlIikKLSAgICAgICAgIyBzdGF0IGFuZCBsc3RhdCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdHMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChmaWxlbmFtZTEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVuYW1lMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubHN0YXQoZmlsZW5hbWUxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MubHN0YXQoZmlsZW5hbWUyKSkKLSAgICAgICAgIyBDb3B5L3JlbmFtZSBldGMgdGVzdHMgdXNpbmcgZXF1aXZhbGVudCBmaWxlbmFtZQotICAgICAgICBzZWxmLl9kb19jb3B5aXNoKGZpbGVuYW1lMSwgZmlsZW5hbWUyKQorICAgICAgICBzZWxmLmFzc2VydEluKGJhc2UsIGZpbGVfbGlzdCkKIAogICAgICMgVGVzdHMgdGhhdCBjb3B5LCBtb3ZlLCBldGMgb25lIGZpbGUgdG8gYW5vdGhlci4KICAgICBkZWYgX2RvX2NvcHlpc2goc2VsZiwgZmlsZW5hbWUxLCBmaWxlbmFtZTIpOgpAQCAtODksNyArNzUsNyBAQAogICAgICAgICBzaHV0aWwuY29weTIoZmlsZW5hbWUxLCBmaWxlbmFtZTIgKyAiLm5ldyIpCiAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZTEgKyAiLm5ldyIpCiAKLSAgICBkZWYgX2RvX2RpcmVjdG9yeShzZWxmLCBtYWtlX25hbWUsIGNoZGlyX25hbWUsIGVuY29kZWQpOgorICAgIGRlZiBfZG9fZGlyZWN0b3J5KHNlbGYsIG1ha2VfbmFtZSwgY2hkaXJfbmFtZSk6CiAgICAgICAgIGN3ZCA9IG9zLmdldGN3ZGIoKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG1ha2VfbmFtZSk6CiAgICAgICAgICAgICBybXRyZWUobWFrZV9uYW1lKQpAQCAtOTcsMTIgKzgzLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MuY2hkaXIoY2hkaXJfbmFtZSkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBub3QgZW5jb2RlZDoKLSAgICAgICAgICAgICAgICAgICAgY3dkX3Jlc3VsdCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gbWFrZV9uYW1lCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY3dkX3Jlc3VsdCA9IG9zLmdldGN3ZGIoKS5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKQotICAgICAgICAgICAgICAgICAgICBuYW1lX3Jlc3VsdCA9IG1ha2VfbmFtZS5kZWNvZGUoVEVTVEZOX0VOQ09ESU5HKQorICAgICAgICAgICAgICAgIGN3ZF9yZXN1bHQgPSBvcy5nZXRjd2QoKQorICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gbWFrZV9uYW1lCiAKICAgICAgICAgICAgICAgICBjd2RfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBjd2RfcmVzdWx0KQogICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gdW5pY29kZWRhdGEubm9ybWFsaXplKCJORkQiLCBuYW1lX3Jlc3VsdCkKQEAgLTEzMiwxNiArMTE0LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnVubGluayhmaWxlbmFtZSkKIAotICAgIGRlZiBfdGVzdF9lcXVpdmFsZW50KHNlbGYsIGZpbGVuYW1lMSwgZmlsZW5hbWUyKToKLSAgICAgICAgcmVtb3ZlX2lmX2V4aXN0cyhmaWxlbmFtZTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3Qgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUyKSkKLSAgICAgICAgZiA9IGZpbGUoZmlsZW5hbWUxLCAidyIpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLl9kb19lcXVpdmFsZW50KGZpbGVuYW1lMSwgZmlsZW5hbWUyKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MudW5saW5rKGZpbGVuYW1lMSkKLQogICAgICMgVGhlICd0ZXN0JyBmdW5jdGlvbnMgYXJlIHVuaXR0ZXN0IGVudHJ5IHBvaW50cywgYW5kIHNpbXBseSBjYWxsIG91cgogICAgICMgX3Rlc3QgZnVuY3Rpb25zIHdpdGggZWFjaCBvZiB0aGUgZmlsZW5hbWUgY29tYmluYXRpb25zIHdlIHdpc2ggdG8gdGVzdAogICAgIGRlZiB0ZXN0X3NpbmdsZV9maWxlcyhzZWxmKToKQEAgLTE1NCwxMiArMTI2LDExIEBACiAgICAgICAgICMgIE1ha2UgZGlyIHdpdGggZW5jb2RlZCwgY2hkaXIgd2l0aCB1bmljb2RlLCBjaGVja2RpciB3aXRoIGVuY29kZWQKICAgICAgICAgIyAgKG9yIHVuaWNvZGUvZW5jb2RlZC91bmljb2RlLCBldGMKICAgICAgICAgZXh0ID0gIi5kaXIiCi0gICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fVU5JQ09ERStleHQsIFRFU1RGTl9VTklDT0RFK2V4dCwgRmFsc2UpCisgICAgICAgIHNlbGYuX2RvX2RpcmVjdG9yeShURVNURk5fVU5JQ09ERStleHQsIFRFU1RGTl9VTklDT0RFK2V4dCkKICAgICAgICAgIyBPdXIgZGlyZWN0b3J5IG5hbWUgdGhhdCBjYW4ndCB1c2UgYSBub24tdW5pY29kZSBuYW1lLgogICAgICAgICBpZiBURVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9kb19kaXJlY3RvcnkoVEVTVEZOX1VORU5DT0RBQkxFK2V4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBURVNURk5fVU5FTkNPREFCTEUrZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RGTl9VTkVOQ09EQUJMRStleHQpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5IGIvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQppbmRleCAwODYyYzliLi45NzQ0MjU2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKQEAgLTIxLDExICsyMSwxMSBAQAogY2xhc3MgVW5pY29kZU1ldGhvZHNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICc2ZWM2NWI2NTgzNTYxNGVjMDA2MzRjNjc0YmJhMGU1MGNkMzJjMTg5JworICAgIGV4cGVjdGVkY2hlY2tzdW0gPSAnMjFiOTBmMWFlZDAwMDgxYjgxY2E3OTQyYjIyMTk2YWYwOTAwMTVhMCcKIAogICAgIGRlZiB0ZXN0X21ldGhvZF9jaGVja3N1bShzZWxmKToKICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDY1NTM2KToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMHgxMDAwMCk6CiAgICAgICAgICAgICBjaGFyID0gY2hyKGkpCiAgICAgICAgICAgICBkYXRhID0gWwogICAgICAgICAgICAgICAgICMgUHJlZGljYXRlcyAoc2luZ2xlIGNoYXIpCkBAIC04MCw4ICs4MCw3IEBACiBjbGFzcyBVbmljb2RlRnVuY3Rpb25zVGVzdChVbmljb2RlRGF0YWJhc2VUZXN0KToKIAogICAgICMgdXBkYXRlIHRoaXMsIGlmIHRoZSBkYXRhYmFzZSBjaGFuZ2VzCi0gICAgZXhwZWN0ZWRjaGVja3N1bSA9ICczMTM2ZDVhZmQ3ODdkYzJiY2IxYmRjYWM5NWUzODUzNDlmYmViYmNhJwotCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdjMjNkZmMwYjVlYWYzY2EyYWFkMzJkNzMzZGU5NmJiMTgyY2NkYTUwJwogICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBkYXRhID0gW10KICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCkBAIC05MCw5ICs4OSw5IEBACiAgICAgICAgICAgICBjaGFyID0gY2hyKGkpCiAgICAgICAgICAgICBkYXRhID0gWwogICAgICAgICAgICAgICAgICMgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHN0cihzZWxmLmRiLmRpZ2l0KGNoYXIsIC0xKSksCi0gICAgICAgICAgICAgICAgc3RyKHNlbGYuZGIubnVtZXJpYyhjaGFyLCAtMSkpLAotICAgICAgICAgICAgICAgIHN0cihzZWxmLmRiLmRlY2ltYWwoY2hhciwgLTEpKSwKKyAgICAgICAgICAgICAgICBmb3JtYXQoc2VsZi5kYi5kaWdpdChjaGFyLCAtMSksICcuMTJnJyksCisgICAgICAgICAgICAgICAgZm9ybWF0KHNlbGYuZGIubnVtZXJpYyhjaGFyLCAtMSksICcuMTJnJyksCisgICAgICAgICAgICAgICAgZm9ybWF0KHNlbGYuZGIuZGVjaW1hbChjaGFyLCAtMSksICcuMTJnJyksCiAgICAgICAgICAgICAgICAgc2VsZi5kYi5jYXRlZ29yeShjaGFyKSwKICAgICAgICAgICAgICAgICBzZWxmLmRiLmJpZGlyZWN0aW9uYWwoY2hhciksCiAgICAgICAgICAgICAgICAgc2VsZi5kYi5kZWNvbXBvc2l0aW9uKGNoYXIpLApAQCAtMTE5LDYgKzExOCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKCc5JyksIDkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKCdcdTIxNWInKSwgMC4xMjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kYi5udW1lcmljKCdcdTI0NjgnKSwgOS4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIubnVtZXJpYygnXHVhNjI3JyksIDcuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWMoJ1xVMDAwMjAwMDAnLCBOb25lKSwgTm9uZSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZGIubnVtZXJpYykKQEAgLTIzNyw3ICsyMzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvcGVuLnJldHVybmNvZGUsIDEpCiAgICAgICAgIGVycm9yID0gIlN5bnRheEVycm9yOiAodW5pY29kZSBlcnJvcikgXFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAiIFwKICAgICAgICAgICAgICIoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZXJyb3IgaW4gcG9wZW4uc3RkZXJyLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXJyb3IsIHBvcGVuLnN0ZGVyci5yZWFkKCkuZGVjb2RlKCJhc2NpaSIpKQorICAgICAgICBwb3Blbi5zdGRlcnIuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfZGVjaW1hbF9udW1lcmljX2NvbnNpc3RlbnQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGRlY2ltYWwgYW5kIG51bWVyaWMgYXJlIGNvbnNpc3RlbnQsCkBAIC0yOTYsNiArMjk3LDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx1MDFjNSIudGl0bGUoKSwgIlx1MDFjNSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlx1MDFjNiIudGl0bGUoKSwgIlx1MDFjNSIpCiAKKyAgICBkZWYgdGVzdF9saW5lYnJlYWtfNzY0MyhzZWxmKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMHgxMDAwMCk6CisgICAgICAgICAgICBsaW5lcyA9IChjaHIoaSkgKyAnQScpLnNwbGl0bGluZXMoKQorICAgICAgICAgICAgaWYgaSBpbiAoMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHg4NSwKKyAgICAgICAgICAgICAgICAgICAgIDB4MWMsIDB4MWQsIDB4MWUsIDB4MjAyOCwgMHgyMDI5KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlx1JS40eCBzaG91bGQgYmUgYSBsaW5lYnJlYWsiICUgaSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcdSUuNHggc2hvdWxkIG5vdCBiZSBhIGxpbmVicmVhayIgJSBpKQorCisgICAgZGVmIHRlc3RfVUNTNChzZWxmKToKKyAgICAgICAgIyB1bmljb2RlZGF0YSBzaG91bGQgd29yayB3aXRoIGNvZGUgcG9pbnRzIG91dHNpZGUgdGhlIEJNUAorICAgICAgICAjIGV2ZW4gb24gYSBuYXJyb3cgVW5pY29kZSBidWlsZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGIuY2F0ZWdvcnkoIlxVMDAwMTAxMkEiKSwgIk5vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLm51bWVyaWMoIlxVMDAwMTAxMkEiKSwgOTAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRlY2ltYWwoIlxVMDAwMUQ3RkQiKSwgNykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRiLmRpZ2l0KCJcVTAwMDFEN0ZEIiksIDcpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KAogICAgICAgICBVbmljb2RlTWlzY1Rlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF91bml0dGVzdC5weQppbmRleCBjNGNhZDgzLi5iZmMzZGVkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaXR0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pdHRlc3QucHkKQEAgLTEsMzM5NiArMSwxNiBAQAotIiIiVGVzdCBzY3JpcHQgZm9yIHVuaXR0ZXN0LgoraW1wb3J0IHVuaXR0ZXN0LnRlc3QKIAotQnkgQ29sbGluIFdpbnRlciA8Y29sbGludyBhdCBnbWFpbC5jb20+Ci0KLVN0aWxsIG5lZWQgdGVzdGluZzoKLSAgICBUZXN0Q2FzZS57YXNzZXJ0LGZhaWx9KiBtZXRob2RzIChzb21lIGFyZSB0ZXN0ZWQgaW1wbGljaXRseSkKLSIiIgotCi1pbXBvcnQgcmUKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZSwgVGVzdFByb2dyYW0KLWltcG9ydCB0eXBlcwotZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQotaW1wb3J0IGlvCi0KLSMjIyBTdXBwb3J0IGNvZGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2xhc3MgTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nKToKLSAgICAgICAgc2VsZi5fZXZlbnRzID0gbG9nCi0gICAgICAgIHN1cGVyKCkuX19pbml0X18oKQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0JykKLSAgICAgICAgc3VwZXIoKS5zdGFydFRlc3QodGVzdCkKLQotICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCi0KLSAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKLSAgICAgICAgc3VwZXIoKS5zdG9wVGVzdCh0ZXN0KQotCi0gICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgotICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKLQotICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRmFpbHVyZScpCi0gICAgICAgIHN1cGVyKCkuYWRkRmFpbHVyZSgqYXJncykKLQotICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKLSAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCi0gICAgICAgIHN1cGVyKCkuYWRkRXJyb3IoKmFyZ3MpCi0KLSAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQotCi0gICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEV4cGVjdGVkRmFpbHVyZScpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKLQotICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCi0KLQotY2xhc3MgVGVzdEVxdWFsaXR5KG9iamVjdCk6Ci0gICAgIiIiVXNlZCBhcyBhIG1peGluIGZvciBUZXN0Q2FzZSIiIgotCi0gICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX2VxX18gaW1wbGVtZW50YXRpb24KLSAgICBkZWYgdGVzdF9lcShzZWxmKToKLSAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLmVxX3BhaXJzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpfMSwgb2JqXzIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9ial8yLCBvYmpfMSkKLQotICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19uZV9fIGltcGxlbWVudGF0aW9uCi0gICAgZGVmIHRlc3RfbmUoc2VsZik6Ci0gICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5uZV9wYWlyczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2JqXzEsIG9ial8yKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvYmpfMiwgb2JqXzEpCi0KLWNsYXNzIFRlc3RIYXNoaW5nKG9iamVjdCk6Ci0gICAgIiIiVXNlZCBhcyBhIG1peGluIGZvciBUZXN0Q2FzZSIiIgotCi0gICAgIyBDaGVjayBmb3IgYSB2YWxpZCBfX2hhc2hfXyBpbXBsZW1lbnRhdGlvbgotICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6Ci0gICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5lcV9wYWlyczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBub3QgaGFzaChvYmpfMSkgPT0gaGFzaChvYmpfMik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgYW5kICVyIGRvIG5vdCBoYXNoIGVxdWFsIiAlIChvYmpfMSwgb2JqXzIpKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXIgYW5kICVyOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKLQotICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYubmVfcGFpcnM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgaGFzaChvYmpfMSkgPT0gaGFzaChvYmpfMik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXMgYW5kICVzIGhhc2ggZXF1YWwsIGJ1dCBzaG91bGRuJ3QiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvYmpfMSwgb2JqXzIpKQotICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJQcm9ibGVtIGhhc2hpbmcgJXMgYW5kICVzOiAlcyIgJSAob2JqXzEsIG9ial8yLCBlKSkKLQotCi0jIExpc3Qgc3ViY2xhc3Mgd2UgY2FuIGFkZCBhdHRyaWJ1dGVzIHRvLgotY2xhc3MgTXlDbGFzc1N1aXRlKGxpc3QpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzKToKLSAgICAgICAgc3VwZXIoTXlDbGFzc1N1aXRlLCBzZWxmKS5fX2luaXRfXyh0ZXN0cykKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgL1N1cHBvcnQgY29kZQotCi1jbGFzcyBUZXN0X1Rlc3RMb2FkZXIoVGVzdENhc2UpOgotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKLSAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKLQotICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKLSAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgTWFrZSBzdXJlIGl0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGV2ZW4gaWYgbm8gdGVzdHMgd2VyZSBmb3VuZAotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fbm9fbWF0Y2hlcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgZW1wdHlfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgZW1wdHlfc3VpdGUpCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBpcyBnaXZlbiBhbiBvYmplY3QKLSAgICAjIHRoYXQgaXNuJ3QgYSBzdWJjbGFzcyBvZiBUZXN0Q2FzZT8gU3BlY2lmaWNhbGx5LCB3aGF0IGhhcHBlbnMKLSAgICAjIGlmIHRlc3RDYXNlQ2xhc3MgaXMgYSBzdWJjbGFzcyBvZiBUZXN0U3VpdGU/Ci0gICAgIwotICAgICMgVGhpcyBpcyBjaGVja2VkIGZvciBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvZGUsIHNvIHdlIGJldHRlciBhZGQgYQotICAgICMgdGVzdCBmb3IgaXQuCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19UZXN0U3VpdGVfc3ViY2xhc3Moc2VsZik6Ci0gICAgICAgIGNsYXNzIE5vdEFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0U3VpdGUpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE5vdEFUZXN0Q2FzZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnU2hvdWxkIHJhaXNlIFR5cGVFcnJvcicpCi0KLSAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCi0gICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBwaWNrcyB1cCB0aGUgZGVmYXVsdCB0ZXN0IG1ldGhvZAotICAgICMgbmFtZSAoYXMgc3BlY2lmaWVkIGJ5IFRlc3RDYXNlKSwgZXZlbiB0aG91Z2ggdGhlIG1ldGhvZCBuYW1lIGRvZXMKLSAgICAjIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXggc3RyaW5nCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19kZWZhdWx0X21ldGhvZF9uYW1lKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICAjIFRoaXMgaGFzIHRvIGJlIGZhbHNlIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ3J1blRlc3QnLnN0YXJ0c3dpdGgobG9hZGVyLnRlc3RNZXRob2RQcmVmaXgpKQotCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtGb28oJ3J1blRlc3QnKV0pCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBleHBlY3RlZCA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbTXlUZXN0Q2FzZSgndGVzdCcpXSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIGV4cGVjdGVkKQotCi0gICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyBpZiBubyB0ZXN0cyBhcmUgZm91bmQgKG5vIFRlc3RDYXNlIGluc3RhbmNlcyk/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm9fVGVzdENhc2VfaW5zdGFuY2VzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCi0KLSAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIG5vIHRlc3RzIGFyZSBmb3VuZCAoVGVzdENhc2VzIGluc3RhbmNlcywgYnV0IG5vIHRlc3RzKT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub19UZXN0Q2FzZV90ZXN0cyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW2xvYWRlci5zdWl0ZUNsYXNzKCldKQotCi0gICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlInMKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgbG9hZFRlc3RzRnJvbU1vZHVsZSgpIGlzIGdpdmVuIHNvbWV0aGluZyBvdGhlcgotICAgICMgdGhhbiBhIG1vZHVsZT8KLSAgICAjCi0gICAgIyBYWFggQ3VycmVudGx5LCBpdCBzdWNjZWVkcyBhbnl3YXkuIFRoaXMgZmxleGliaWxpdHkKLSAgICAjIHNob3VsZCBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBsb2FkVGVzdHNGcm9tTW9kdWxlKCkgc2hvdWxkCi0gICAgIyByYWlzZSBhIFR5cGVFcnJvcgotICAgICMKLSAgICAjIFhYWCBDZXJ0YWluIHBlb3BsZSBhcmUgdXNpbmcgdGhpcyBiZWhhdmlvdXIuIFdlJ2xsIGFkZCBhIHRlc3QgZm9yIGl0Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm90X2FfbW9kdWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6Ci0gICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoTm90QU1vZHVsZSkKLQotICAgICAgICByZWZlcmVuY2UgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgcmVmZXJlbmNlKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSgpCi0KLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoKQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgSXMgVmFsdWVFcnJvciByYWlzZWQgaW4gcmVzcG9uc2UgdG8gYW4gZW1wdHkgbmFtZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fZW1wdHlfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCcnKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJFbXB0eSBtb2R1bGUgbmFtZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbmFtZSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnM/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX21hbGZvcm1lZF9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ2FiYyAoKSAvLycpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIGEKLSAgICAjIG1vZHVsZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBhIG1vZHVsZSBieSB0aGF0IG5hbWUgY2FuJ3QgYmUgZm91bmQ/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3Vua25vd25fbW9kdWxlX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnc2Rhc2Zhc2Zhc2RmJykKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIG1vZHVsZSBuYW1lZCBzZGFzZmFzZmFzZGYiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBJbXBvcnRFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHRoZSBtb2R1bGUgaXMgZm91bmQsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX2F0dHJfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd1bml0dGVzdC5zZGFzZmFzZmFzZGYnKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHdlIHByb3ZpZGUgdGhlIG1vZHVsZSwgYnV0IHRoZSBhdHRyaWJ1dGUgY2FuJ3QgYmUKLSAgICAjIGZvdW5kPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV91bmtub3duX25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnc2Rhc2Zhc2Zhc2RmJywgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHBhc3NlZCBhbiBlbXB0eQotICAgICMgbmFtZSByZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZT8KLSAgICAjCi0gICAgIyBYWFggU2hvdWxkIHByb2JhYmx5IHJhaXNlIGEgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFuIEF0dHJpYnV0ZUVycm9yCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX2VtcHR5X25hbWUoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJywgdW5pdHRlc3QpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYW4gaW1wb3NzaWJsZSBuYW1lIGlzIGdpdmVuLCByZWxhdGl2ZSB0byB0aGUgcHJvdmlkZWQKLSAgICAjIGBtb2R1bGVgPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVmFsdWVFcnJvciIpCi0KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIERvZXMgbG9hZFRlc3RzRnJvbU5hbWUgcmFpc2UgVHlwZUVycm9yIHdoZW4gdGhlIGBtb2R1bGVgIGFyZ3VtZW50Ci0gICAgIyBpc24ndCBhIG1vZHVsZSBvYmplY3Q/Ci0gICAgIwotICAgICMgWFhYIEFjY2VwdHMgdGhlIG5vdC1hLW1vZHVsZSBvYmplY3QsIGlnbm9ybmluZyB0aGUgb2JqZWN0J3MgdHlwZQotICAgICMgVGhpcyBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIG9yIHRoZSBtZXRob2QgbmFtZSBzaG91bGQgYmUgY2hhbmdlZAotICAgICMKLSAgICAjIFhYWCBTb21lIHBlb3BsZSBhcmUgcmVseWluZyBvbiB0aGlzLCBzbyBrZWVwIGl0IGZvciBub3cKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6Ci0gICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0XzInLCBOb3RBTW9kdWxlKQotCi0gICAgICAgIHJlZmVyZW5jZSA9IFtNeVRlc3RDYXNlKCd0ZXN0JyldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIHJlZmVyZW5jZSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgRG9lcyBpdCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIG5hbWUgcmVzb2x2ZXMgdG8gYW4gaW52YWxpZAotICAgICMgb2JqZWN0PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9iYWRfb2JqZWN0KHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IG9iamVjdCgpCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBUeXBlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5Ci0gICAgIyByZXNvbHZlIGVpdGhlciB0byAuLi4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xJywgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdHN1aXRlJywgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3QnLCBtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lKCkgcmFpc2UgdGhlIHByb3BlciBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8KLSAgICAjIHJlc29sdmUgImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiB0aGF0IGRvZXNuJ3QgZXhpc3QKLSAgICAjIGZvciB0aGUgZ2l2ZW4gbmFtZSAocmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGUpPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCd0ZXN0Y2FzZV8xLnRlc3Rmb28nLCBtKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSAuLi4gVGVzdFN1aXRlIGluc3RhbmNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdFN1aXRlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgdGVzdGNhc2VfMiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBkZWYgcmV0dXJuX1Rlc3RTdWl0ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCi0gICAgICAgIG0ucmV0dXJuX1Rlc3RTdWl0ZSA9IHJldHVybl9UZXN0U3VpdGUKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0U3VpdGUnLCBtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2UgLi4uIGluc3RhbmNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2Uoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6Ci0gICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQotICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RDYXNlJywgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzFdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgaWYgdGhlIGNhbGxhYmxlIHJldHVybnMgc29tZXRoaW5nIGVsc2U/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2NhbGxhYmxlX193cm9uZ190eXBlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGRlZiByZXR1cm5fd3JvbmcoKToKLSAgICAgICAgICAgIHJldHVybiA2Ci0gICAgICAgIG0ucmV0dXJuX3dyb25nID0gcmV0dXJuX3dyb25nCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fd3JvbmcnLCBtKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBjYW4gcmVmZXIgdG8gbW9kdWxlcyBhbmQgcGFja2FnZXMgd2hpY2ggaGF2ZSBub3QgYmVlbgotICAgICMgaW1wb3J0ZWQ7IHRoZXkgd2lsbCBiZSBpbXBvcnRlZCBhcyBhIHNpZGUtZWZmZWN0IgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19tb2R1bGVfbm90X2xvYWRlZChzZWxmKToKLSAgICAgICAgIyBXZSdyZSBnb2luZyB0byB0cnkgdG8gbG9hZCB0aGlzIG1vZHVsZSBhcyBhIHNpZGUtZWZmZWN0LCBzbyBpdAotICAgICAgICAjIGJldHRlciBub3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSB0cnkuCi0gICAgICAgICMKLSAgICAgICAgIyBXaHkgcGljayBhdWRpb29wPyBHb29nbGUgc2hvd3MgaXQgaXNuJ3QgdXNlZCB2ZXJ5IG9mdGVuLCBzbyB0aGVyZSdzCi0gICAgICAgICMgYSBnb29kIGNoYW5jZSB0aGF0IGl0IHdvbid0IGJlIGltcG9ydGVkIHdoZW4gdGhpcyB0ZXN0IGlzIHJ1bgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdhdWRpb29wJwotCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG1vZHVsZV9uYW1lKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCi0KLSAgICAgICAgICAgICMgYXVkaW9vcCBzaG91bGQgbm93IGJlIGxvYWRlZCwgdGhhbmtzIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoKQotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKLSAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19lbXB0eV9uYW1lX2xpc3Qoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCi0KLSAgICAjICJTaW1pbGFyIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCksIGJ1dCB0YWtlcyBhIHNlcXVlbmNlIG9mIG5hbWVzIHJhdGhlcgotICAgICMgdGhhbiBhIHNpbmdsZSBuYW1lLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/Ci0gICAgIwotICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIGEgVmFsdWVFcnJvciBvciBqdXN0IHJldHVybiBhbiBlbXB0eSBUZXN0U3VpdGU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lX2xpc3Qoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSwgdW5pdHRlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjCi0gICAgIyBJcyBWYWx1ZUVycm9yIHJhaXNlZCBpbiByZXNwb25zZSB0byBhbiBlbXB0eSBuYW1lPwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJyddKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJFbXB0eSBtb2R1bGUgbmFtZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gcHJlc2VudGVkIHdpdGggYW4gaW1wb3NzaWJsZSBtb2R1bGUgbmFtZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21hbGZvcm1lZF9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10pCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gbm8gbW9kdWxlIGNhbiBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnc2Rhc2Zhc2Zhc2RmJ10pCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQsIGJ1dCBub3QgdGhlIGF0dHJpYnV0ZT8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0J10pCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMgLi4uCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBnaXZlbiBhbiB1bmtub3duIGF0dHJpYnV0ZSBvbiBhIHNwZWNpZmllZCBgbW9kdWxlYAotICAgICMgYXJndW1lbnQ/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgRG8gdW5rbm93biBhdHRyaWJ1dGVzIChyZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZSkgc3RpbGwgcmFpc2UgYW4KLSAgICAjIGV4Y2VwdGlvbiBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB2YWxpZCBhdHRyaWJ1dGUgbmFtZXM/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMihzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ1Rlc3RDYXNlJywgJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCi0gICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCi0gICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQotICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKLSAgICAjIC4uLgotICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZmFjZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nPwotICAgICMKLSAgICAjIFhYWCBUaGlzIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IsIHRob3VnaCBWYWx1ZUVycm9yIGlzIHByb2JhYmx5Ci0gICAgIyBtb3JlIGFwcHJvcHJpYXRlCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bwotICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAotICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKLSAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCi0gICAgIyAuLi4KLSAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgotICAgICMKLSAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgYXR0cmlidXRlIG5hbWU/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0KLSAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQotCi0gICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKLSAgICAjCi0gICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lcygpIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYG1vZHVsZWAgaXMgaW4gZmFjdAotICAgICMgYSBtb2R1bGU/Ci0gICAgIwotICAgICMgWFhYIFRoaXMgdmFsaWRhdGlvbiBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoaXMgZmxleGliaWxpdHkgc2hvdWxkCi0gICAgIyBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBhIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkLgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgotICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6Ci0gICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RfMiddLCBOb3RBTW9kdWxlKQotCi0gICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KLSAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKLSAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCi0gICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgotICAgICMKLSAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKLSAgICAjIG9iamVjdD8KLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKLSAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBleHBlY3RlZCA9IGxvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCi0gICAgIyAuLi4gYSBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0c3VpdGUnXSwgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbS50ZXN0c3VpdGVdKQotCi0gICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCi0gICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdCddLCBtKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotCi0gICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKLSAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKLSAgICAjCi0gICAgIyBEb2VzIHRoZSBtZXRob2QgZ3JhY2VmdWxseSBoYW5kbGUgbmFtZXMgdGhhdCBpbml0aWFsbHkgbG9vayBsaWtlIHRoZXkKLSAgICAjIHJlc29sdmUgdG8gImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiBidXQgZG9uJ3Q/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSAuLi4gVGVzdFN1aXRlIGluc3RhbmNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKLSAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQotICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0U3VpdGUnXSwgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICBleHBlY3RlZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtleHBlY3RlZF0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2UgLi4uIGluc3RhbmNlIgotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLSAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgotICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKLSAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX1Rlc3RDYXNlJ10sIG0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykpCi0KLSAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KLSAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgotICAgICMKLSAgICAjIEFyZSBzdGF0aWNtZXRob2RzIGhhbmRsZWQgY29ycmVjdGx5PwotICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX2NhbGxfc3RhdGljbWV0aG9kKHNlbGYpOgotICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCi0gICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0Y2FzZV8xID0gVGVzdDEoJ3Rlc3QnKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGZvbygpOgotICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0Zvby5mb28nXSwgbSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKSkKLQotICAgICAgICByZWZfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzFdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbcmVmX3N1aXRlXSkKLQotICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bwotICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGNhbGxhYmxlIHJldHVybnMgc29tZXRoaW5nIGVsc2U/Ci0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6Ci0gICAgICAgICAgICByZXR1cm4gNgotICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fd3JvbmcnXSwgbSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCi0KLSAgICAjICJUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuCi0gICAgIyBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QiCi0gICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19tb2R1bGVfbm90X2xvYWRlZChzZWxmKToKLSAgICAgICAgIyBXZSdyZSBnb2luZyB0byB0cnkgdG8gbG9hZCB0aGlzIG1vZHVsZSBhcyBhIHNpZGUtZWZmZWN0LCBzbyBpdAotICAgICAgICAjIGJldHRlciBub3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSB0cnkuCi0gICAgICAgICMKLSAgICAgICAgIyBXaHkgcGljayBhdWRpb29wPyBHb29nbGUgc2hvd3MgaXQgaXNuJ3QgdXNlZCB2ZXJ5IG9mdGVuLCBzbyB0aGVyZSdzCi0gICAgICAgICMgYSBnb29kIGNoYW5jZSB0aGF0IGl0IHdvbid0IGJlIGltcG9ydGVkIHdoZW4gdGhpcyB0ZXN0IGlzIHJ1bgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdhdWRpb29wJwotCi0gICAgICAgIGltcG9ydCBzeXMKLSAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbbW9kdWxlX25hbWVdKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKLQotICAgICAgICAgICAgIyBhdWRpb29wIHNob3VsZCBub3cgYmUgbG9hZGVkLCB0aGFua3MgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbW9kdWxlX25hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKCkKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKCkKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIFRlc3QuZm9vYmFyIGlzIGRlZmluZWQgdG8gbWFrZSBzdXJlIGdldFRlc3RDYXNlTmFtZXMoKSByZXNwZWN0cwotICAgICMgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKLSAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3QpLCBbJ3Rlc3RfMScsICd0ZXN0XzInXSkKLQotICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgRG9lcyBnZXRUZXN0Q2FzZU5hbWVzKCkgYmVoYXZlIGFwcHJvcHJpYXRlbHkgaWYgbm8gdGVzdHMgYXJlIGZvdW5kPwotICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX25vX3Rlc3RzKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBmb29iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3QpLCBbXSkKLQotICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCi0gICAgIwotICAgICMgQXJlIG5vdC1UZXN0Q2FzZXMgaGFuZGxlZCBncmFjZWZ1bGx5PwotICAgICMKLSAgICAjIFhYWCBUaGlzIHNob3VsZCByYWlzZSBhIFR5cGVFcnJvciwgbm90IHJldHVybiBhIGxpc3QKLSAgICAjCi0gICAgIyBYWFggSXQncyB0b28gbGF0ZSBpbiB0aGUgMi41IHJlbGVhc2UgY3ljbGUgdG8gZml4IHRoaXMsIGJ1dCBpdCBzaG91bGQKLSAgICAjIHByb2JhYmx5IGJlIHJldmlzaXRlZCBmb3IgMi42Ci0gICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19fbm90X2FfVGVzdENhc2Uoc2VsZik6Ci0gICAgICAgIGNsYXNzIEJhZENhc2UoaW50KToKLSAgICAgICAgICAgIGRlZiB0ZXN0X2ZvbyhzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIG5hbWVzID0gbG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoQmFkQ2FzZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzLCBbJ3Rlc3RfZm9vJ10pCi0KLSAgICAjICJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBpbmhlcml0ZWQgbmFtZXMgYXJlIGhhbmRsZWQuCi0gICAgIwotICAgICMgVGVzdFAuZm9vYmFyIGlzIGRlZmluZWQgdG8gbWFrZSBzdXJlIGdldFRlc3RDYXNlTmFtZXMoKSByZXNwZWN0cwotICAgICMgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKLSAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19pbmhlcml0YW5jZShzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdFAodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcwotCi0gICAgICAgIGNsYXNzIFRlc3RDKFRlc3RQKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzMoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBuYW1lcyA9IFsndGVzdF8xJywgJ3Rlc3RfMicsICd0ZXN0XzMnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKFRlc3RDKSwgbmFtZXMpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKCkKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci50ZXN0TWV0aG9kUHJlZml4Ci0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCi0gICAgIyB0ZXN0IG1ldGhvZHMiCi0gICAgIwotICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQotICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCi0gICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLQotICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pCi0gICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0c18xKQotCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0c18yKQotCi0gICAgIyAiU3RyaW5nIGdpdmluZyB0aGUgcHJlZml4IG9mIG1ldGhvZCBuYW1lcyB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzCi0gICAgIyB0ZXN0IG1ldGhvZHMiCi0gICAgIwotICAgICMgSW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gaXMgdGhhdCB0ZXN0TWV0aG9kUHJlZml4IGlzIHJlc3BlY3RlZCBieQotICAgICMgYWxsIGxvYWRUZXN0c0Zyb20qIG1ldGhvZHMuCi0gICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0c18xID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCdmb29fYmFyJyldKV0KLSAgICAgICAgdGVzdHNfMiA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAnZm9vJwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0c18xKQotCi0gICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzXzIpCi0KLSAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKLSAgICAjIHRlc3QgbWV0aG9kcyIKLSAgICAjCi0gICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5Ci0gICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KLSAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTmFtZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pCi0gICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHNfMSkKLQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzXzIpCi0KLSAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKLSAgICAjIHRlc3QgbWV0aG9kcyIKLSAgICAjCi0gICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5Ci0gICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KLSAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTmFtZXMoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHNfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pXSkKLSAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCi0gICAgICAgIHRlc3RzXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RzXzJdKQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHNfMSkKLQotICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICd0ZXN0JwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzXzIpCi0KLSAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyAndGVzdCciCi0gICAgZGVmIHRlc3RfdGVzdE1ldGhvZFByZWZpeF9fZGVmYXVsdF92YWx1ZShzZWxmKToKLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnRlc3RNZXRob2RQcmVmaXgsICd0ZXN0JykKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtKCh4ID4geSkgLSAoeCA8IHkpKQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAotCi0gICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgdGVzdHMpCi0KLSAgICAjICJGdW5jdGlvbiB0byBiZSB1c2VkIHRvIGNvbXBhcmUgbWV0aG9kIG5hbWVzIHdoZW4gc29ydGluZyB0aGVtIGluCi0gICAgIyBnZXRUZXN0Q2FzZU5hbWVzKCkgYW5kIGFsbCB0aGUgbG9hZFRlc3RzRnJvbVgoKSBtZXRob2RzIgotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC0oKHggPiB5KSAtICh4IDwgeSkpCi0KLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkpLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgotICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgotICAgICAgICAgICAgcmV0dXJuIC0oKHggPiB5KSAtICh4IDwgeSkpCi0KLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICBtLkZvbyA9IEZvbwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0cyA9IGxvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCi0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKLSAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAtKCh4ID4geSkgLSAoeCA8IHkpKQotCi0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCi0KLSAgICAgICAgdGVzdHMgPSBbbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSkpLCB0ZXN0cykKLQotICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KLSAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSIKLSAgICAjCi0gICAgIyBEb2VzIGl0IGFjdHVhbGx5IGFmZmVjdCBnZXRUZXN0Q2FzZU5hbWVzKCk/Ci0gICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2dldFRlc3RDYXNlTmFtZXMoc2VsZik6Ci0gICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6Ci0gICAgICAgICAgICByZXR1cm4gLSgoeCA+IHkpIC0gKHggPCB5KSkKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKLQotICAgICAgICB0ZXN0X25hbWVzID0gWyd0ZXN0XzInLCAndGVzdF8xJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pLCB0ZXN0X25hbWVzKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGJ1aWx0LWluIGNtcCgpIGZ1bmN0aW9uIgotICAgICMgU2luY2UgY21wIGlzIG5vdyBkZWZ1bmN0LCB3ZSBzaW1wbHkgdmVyaWZ5IHRoYXQgdGhlIHJlc3VsdHMKLSAgICAjIG9jY3VyIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgd291bGQgd2l0aCB0aGUgZGVmYXVsdCBzb3J0LgotICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMyhzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Rlc3RfMicsICd0ZXN0XzMnLCAndGVzdF8xJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pLCBzb3J0ZWQodGVzdF9uYW1lcykpCi0KLQotICAgICMgIml0IGNhbiBiZSBzZXQgdG8gTm9uZSB0byBkaXNhYmxlIHRoZSBzb3J0LiIKLSAgICAjCi0gICAgIyBYWFggSG93IGlzIHRoaXMgZGlmZmVyZW50IGZyb20gcmVhc3NpZ25pbmcgY21wPyBBcmUgdGhlIHRlc3RzIHJldHVybmVkCi0gICAgIyBpbiBhIHJhbmRvbSBvcmRlciBvciBzb21ldGhpbmc/IFRoaXMgYmVoYXZpb3VyIHNob3VsZCBkaWUKLSAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fTm9uZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gTm9uZQotCi0gICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Rlc3RfMicsICd0ZXN0XzEnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhGb28pKSwgc2V0KHRlc3RfbmFtZXMpKQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcKLQotICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0gICAgIyAiQ2FsbGFibGUgb2JqZWN0IHRoYXQgY29uc3RydWN0cyBhIHRlc3Qgc3VpdGUgZnJvbSBhIGxpc3Qgb2YgdGVzdHMuIgotICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdHMgPSBbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0KLQotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKLQotICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0Ci0gICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQotICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6Ci0gICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCi0gICAgICAgIG0uRm9vID0gRm9vCi0KLSAgICAgICAgdGVzdHMgPSBbW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSwgdGVzdHMpCi0KLSAgICAjIEl0IGlzIGltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MgdGhhdAotICAgICMgYWxsIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbSogbWV0aG9kcyByZXNwZWN0IGl0LiBMZXQncyBtYWtlIHN1cmUKLSAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19sb2FkVGVzdHNGcm9tTmFtZShzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0cyA9IFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXQotCi0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0cykKLQotICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0Ci0gICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQotICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKLSAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKLSAgICAgICAgbS5Gb28gPSBGb28KLQotICAgICAgICB0ZXN0cyA9IFtbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV1dCi0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydGb28nXSwgbSksIHRlc3RzKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIFRlc3RTdWl0ZSBjbGFzcyIKLSAgICBkZWYgdGVzdF9zdWl0ZUNsYXNzX19kZWZhdWx0X3ZhbHVlKHNlbGYpOgotICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvYWRlci5zdWl0ZUNsYXNzIGlzIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MKLQotIyMjIFN1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0U3VpdGUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcwotICAgIGRlZiB0ZXN0XzMoc2VsZik6IHBhc3MKLSAgICBkZWYgcnVuVGVzdChzZWxmKTogcGFzcwotCi1kZWYgX21rX1Rlc3RTdWl0ZSgqbmFtZXMpOgotICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoRm9vKG4pIGZvciBuIGluIG5hbWVzKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgL1N1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0U3VpdGUKLQotY2xhc3MgVGVzdF9UZXN0U3VpdGUoVGVzdENhc2UsIFRlc3RFcXVhbGl0eSk6Ci0KLSAgICAjIyMgU2V0IHVwIGF0dHJpYnV0ZXMgbmVlZGVkIGJ5IGluaGVyaXRlZCB0ZXN0cwotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9lcQotICAgIGVxX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKCkpCi0gICAgICAgICAgICAgICAsKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCB1bml0dGVzdC5UZXN0U3VpdGUoW10pKQotICAgICAgICAgICAgICAgLChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpXQotCi0gICAgIyBVc2VkIGJ5IFRlc3RFcXVhbGl0eS50ZXN0X25lCi0gICAgbmVfcGFpcnMgPSBbKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpLCBfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSkKLSAgICAgICAgICAgICAgICwodW5pdHRlc3QuVGVzdFN1aXRlKFtdKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpCi0gICAgICAgICAgICAgICAsKF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScsICd0ZXN0XzInKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJywgJ3Rlc3RfMycpKQotICAgICAgICAgICAgICAgLChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8yJykpXQotCi0gICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICMjIyAvU2V0IHVwIGF0dHJpYnV0ZXMgbmVlZGVkIGJ5IGluaGVyaXRlZCB0ZXN0cwotCi0gICAgIyMjIFRlc3RzIGZvciBUZXN0U3VpdGUuX19pbml0X18KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCi0gICAgIwotICAgICMgVGhlIHRlc3RzIGl0ZXJhYmxlIHNob3VsZCBiZSBvcHRpb25hbAotICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX29wdGlvbmFsKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQotCi0gICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgotICAgICMgLi4uCi0gICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCi0gICAgIyBvciBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5IgotICAgICMKLSAgICAjIFRlc3RTdWl0ZSBzaG91bGQgZGVhbCB3aXRoIGVtcHR5IHRlc3RzIGl0ZXJhYmxlcyBieSBhbGxvd2luZyB0aGUKLSAgICAjIGNyZWF0aW9uIG9mIGFuIGVtcHR5IHN1aXRlCi0gICAgZGVmIHRlc3RfaW5pdF9fZW1wdHlfdGVzdHMoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtdKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKLQotICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKLSAgICAjIC4uLgotICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcwotICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKLSAgICAjCi0gICAgIyBUZXN0U3VpdGUgc2hvdWxkIGFsbG93IGFueSBpdGVyYWJsZSB0byBwcm92aWRlIHRlc3RzCi0gICAgZGVmIHRlc3RfaW5pdF9fdGVzdHNfZnJvbV9hbnlfaXRlcmFibGUoc2VsZik6Ci0gICAgICAgIGRlZiB0ZXN0cygpOgotICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMS5jb3VudFRlc3RDYXNlcygpLCAyKQotCi0gICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVfMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8yLmNvdW50VGVzdENhc2VzKCksIDIpCi0KLSAgICAgICAgc3VpdGVfMyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzZXQoc3VpdGVfMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMy5jb3VudFRlc3RDYXNlcygpLCAyKQotCi0gICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgotICAgICMgLi4uCi0gICAgIyAiSWYgdGVzdHMgaXMgZ2l2ZW4sIGl0IG11c3QgYmUgYW4gaXRlcmFibGUgb2YgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCi0gICAgIyBvciBvdGhlciB0ZXN0IHN1aXRlcyB0aGF0IHdpbGwgYmUgdXNlZCB0byBidWlsZCB0aGUgc3VpdGUgaW5pdGlhbGx5IgotICAgICMKLSAgICAjIERvZXMgVGVzdFN1aXRlKCkgYWxzbyBhbGxvdyBvdGhlciBUZXN0U3VpdGUoKSBpbnN0YW5jZXMgdG8gYmUgcHJlc2VudAotICAgICMgaW4gdGhlIHRlc3RzIGl0ZXJhYmxlPwotICAgIGRlZiB0ZXN0X2luaXRfX1Rlc3RTdWl0ZV9pbnN0YW5jZXNfaW5fdGVzdHMoc2VsZik6Ci0gICAgICAgIGRlZiB0ZXN0cygpOgotICAgICAgICAgICAgZnRjID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5UZXN0U3VpdGUoW2Z0Y10pCi0gICAgICAgICAgICB5aWVsZCB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCi0KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgIyMjIC9UZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCi0KLSAgICAjIENvbnRhaW5lciB0eXBlcyBzaG91bGQgc3VwcG9ydCB0aGUgaXRlciBwcm90b2NvbAotICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6Ci0gICAgICAgIHRlc3QxID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHRlc3QyID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MSwgdGVzdDIpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0MSwgdGVzdDJdKQotCi0gICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCi0gICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgotICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKLSAgICAjCi0gICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSByZXR1cm5zIDA/Ci0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfemVyb19zaW1wbGUoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCi0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KLSAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCi0gICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgotICAgICMKLSAgICAjIFByZXN1bWFibHkgYW4gZW1wdHkgVGVzdFN1aXRlIChldmVuIGlmIGl0IGNvbnRhaW5zIG90aGVyIGVtcHR5Ci0gICAgIyBUZXN0U3VpdGUgaW5zdGFuY2VzKSByZXR1cm5zIDA/Ci0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfemVyb19uZXN0ZWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdW5pdHRlc3QuVGVzdFN1aXRlKCldKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgotICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KLSAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCi0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfc2ltcGxlKHNlbGYpOgotICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCi0KLSAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KLSAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCi0gICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGlzIGhvbGRzIGZvciBuZXN0ZWQgVGVzdFN1aXRlIGluc3RhbmNlcywgdG9vCi0gICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXNfbmVzdGVkKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3QyID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIHRlc3QzID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0gICAgICAgIGNoaWxkID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MSgndGVzdDInKSwgdGVzdDIpKQotICAgICAgICBwYXJlbnQgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QzLCBjaGlsZCwgVGVzdDEoJ3Rlc3QxJykpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LmNvdW50VGVzdENhc2VzKCksIDQpCi0KLSAgICAjICJSdW4gdGhlIHRlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHN1aXRlLCBjb2xsZWN0aW5nIHRoZSByZXN1bHQgaW50bwotICAgICMgdGhlIHRlc3QgcmVzdWx0IG9iamVjdCBwYXNzZWQgYXMgcmVzdWx0LiIKLSAgICAjCi0gICAgIyBBbmQgaWYgdGhlcmUgYXJlIG5vIHRlc3RzPyBXaGF0IHRoZW4/Ci0gICAgZGVmIHRlc3RfcnVuX19lbXB0eV9zdWl0ZShzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFtdKQotCi0gICAgIyAiTm90ZSB0aGF0IHVubGlrZSBUZXN0Q2FzZS5ydW4oKSwgVGVzdFN1aXRlLnJ1bigpIHJlcXVpcmVzIHRoZQotICAgICMgInJlc3VsdCBvYmplY3QgdG8gYmUgcGFzc2VkIGluLiIKLSAgICBkZWYgdGVzdF9ydW5fX3JlcXVpcmVzX3Jlc3VsdChzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN1aXRlLnJ1bigpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQotCi0gICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KLSAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCi0gICAgZGVmIHRlc3RfcnVuKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBMb2dnaW5nQ2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgncnVuICVzJyAlIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQotCi0gICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKLSAgICAgICAgICAgIGRlZiB0ZXN0MihzZWxmKTogcGFzcwotCi0gICAgICAgIHRlc3RzID0gW0xvZ2dpbmdDYXNlKCd0ZXN0MScpLCBMb2dnaW5nQ2FzZSgndGVzdDInKV0KLQotICAgICAgICB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMpLnJ1bihyZXN1bHQpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsncnVuIHRlc3QxJywgJ3J1biB0ZXN0MiddKQotCi0gICAgIyAiQWRkIGEgVGVzdENhc2UgLi4uIHRvIHRoZSBzdWl0ZSIKLSAgICBkZWYgdGVzdF9hZGRUZXN0X19UZXN0Q2FzZShzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdCcpCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLQotICAgICAgICBzdWl0ZS5hZGRUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdF0pCi0KLSAgICAjICJBZGQgYSAuLi4gVGVzdFN1aXRlIHRvIHRoZSBzdWl0ZSIKLSAgICBkZWYgdGVzdF9hZGRUZXN0X19UZXN0U3VpdGUoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcwotCi0gICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdCcpXSkKLQotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgICAgIHN1aXRlLmFkZFRlc3Qoc3VpdGVfMikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtzdWl0ZV8yXSkKLQotICAgICMgIkFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQotICAgICMgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4iCi0gICAgIwotICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCi0gICAgIyBlYWNoIGVsZW1lbnQiCi0gICAgZGVmIHRlc3RfYWRkVGVzdHMoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCi0KLSAgICAgICAgdGVzdF8xID0gRm9vKCd0ZXN0XzEnKQotICAgICAgICB0ZXN0XzIgPSBGb28oJ3Rlc3RfMicpCi0gICAgICAgIGlubmVyX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XzJdKQotCi0gICAgICAgIGRlZiBnZW4oKToKLSAgICAgICAgICAgIHlpZWxkIHRlc3RfMQotICAgICAgICAgICAgeWllbGQgdGVzdF8yCi0gICAgICAgICAgICB5aWVsZCBpbm5lcl9zdWl0ZQotCi0gICAgICAgIHN1aXRlXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzdWl0ZV8xLmFkZFRlc3RzKGdlbigpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZV8xKSwgbGlzdChnZW4oKSkpCi0KLSAgICAgICAgIyAiVGhpcyBpcyBlcXVpdmFsZW50IHRvIGl0ZXJhdGluZyBvdmVyIHRlc3RzLCBjYWxsaW5nIGFkZFRlc3QoKSBmb3IKLSAgICAgICAgIyBlYWNoIGVsZW1lbnQiCi0gICAgICAgIHN1aXRlXzIgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBmb3IgdCBpbiBnZW4oKToKLSAgICAgICAgICAgIHN1aXRlXzIuYWRkVGVzdCh0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMSwgc3VpdGVfMikKLQotICAgICMgIkFkZCBhbGwgdGhlIHRlc3RzIGZyb20gYW4gaXRlcmFibGUgb2YgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQotICAgICMgaW5zdGFuY2VzIHRvIHRoaXMgdGVzdCBzdWl0ZS4iCi0gICAgIwotICAgICMgV2hhdCBoYXBwZW5zIGlmIGl0IGRvZXNuJ3QgZ2V0IGFuIGl0ZXJhYmxlPwotICAgIGRlZiB0ZXN0X2FkZFRlc3RfX25vbml0ZXJhYmxlKHNlbGYpOgotICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdHMoNSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCi0KLSAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25jYWxsYWJsZShzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIDUpCi0KLSAgICBkZWYgdGVzdF9hZGRUZXN0X19jYXNlc3VpdGVjbGFzcyhzZWxmKToKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIFRlc3RfVGVzdFN1aXRlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN1aXRlLmFkZFRlc3QsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKLQotICAgIGRlZiB0ZXN0X2FkZFRlc3RzX19zdHJpbmcoc2VsZik6Ci0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0cywgImZvbyIpCi0KLQotY2xhc3MgVGVzdF9GdW5jdGlvblRlc3RDYXNlKFRlc3RDYXNlKToKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LiBGb3IKLSAgICAjIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSAxIgotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzKHNlbGYpOgotICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LmNvdW50VGVzdENhc2VzKCksIDEpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHNldFVwKCkgcmFpc2VzCi0gICAgIyBhbiBleGNlcHRpb24uCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBkZWYgc2V0VXAoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHNldFVwJykKLQotICAgICAgICBkZWYgdGVzdCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICAgICAgZGVmIHRlYXJEb3duKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCi0gICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRoZSB0ZXN0IHJhaXNlcwotICAgICMgYW4gZXJyb3IgKGFzIG9wcG9zZWQgdG8gYSBmYWlsdXJlKS4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVzdChzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgZGVmIHNldFVwKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCdzZXRVcCcpCi0KLSAgICAgICAgZGVmIHRlc3QoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgdGVzdCcpCi0KLSAgICAgICAgZGVmIHRlYXJEb3duKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3Qgc2lnbmFscwotICAgICMgYSBmYWlsdXJlIChhcyBvcHBvc2VkIHRvIGFuIGVycm9yKS4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBkZWYgc2V0VXAoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICBkZWYgdGVzdCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0gICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSB0ZXN0JykKLQotICAgICAgICBkZWYgdGVhckRvd24oKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAnYWRkRmFpbHVyZScsICd0ZWFyRG93bicsCi0gICAgICAgICAgICAgICAgICAgICdzdG9wVGVzdCddCi0gICAgICAgIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UodGVzdCwgc2V0VXAsIHRlYXJEb3duKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCi0gICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQotICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKLSAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCi0gICAgIwotICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRlYXJEb3duKCkgcmFpc2VzCi0gICAgIyBhbiBleGNlcHRpb24uCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBkZWYgc2V0VXAoKToKLSAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKLQotICAgICAgICBkZWYgdGVzdCgpOgotICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICAgICAgZGVmIHRlYXJEb3duKCk6Ci0gICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZWFyRG93bicpCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSB0ZWFyRG93bicpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2FkZEVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIlJldHVybiBhIHN0cmluZyBpZGVudGlmeWluZyB0aGUgc3BlY2lmaWMgdGVzdCBjYXNlLiIKLSAgICAjCi0gICAgIyBCZWNhdXNlIG9mIHRoZSB2YWd1ZSBuYXR1cmUgb2YgdGhlIGRvY3MsIEknbSBub3QgZ29pbmcgdG8gbG9jayB0aGlzCi0gICAgIyB0ZXN0IGRvd24gdG9vIG11Y2guIFJlYWxseSBhbGwgdGhhdCBjYW4gYmUgYXNzZXJ0ZWQgaXMgdGhhdCB0aGUgaWQoKQotICAgICMgd2lsbCBiZSBhIHN0cmluZyAoZWl0aGVyIDgtYnl0ZSBvciB1bmljb2RlIC0tIGFnYWluLCBiZWNhdXNlIHRoZSBkb2NzCi0gICAgIyBqdXN0IHNheSAic3RyaW5nIikKLSAgICBkZWYgdGVzdF9pZChzZWxmKToKLSAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRlc3QuaWQoKSwgc3RyKSkKLQotICAgICMgIlJldHVybnMgYSBvbmUtbGluZSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdCwgb3IgTm9uZSBpZiBubyBkZXNjcmlwdGlvbgotICAgICMgaGFzIGJlZW4gcHJvdmlkZWQuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHJldHVybnMKLSAgICAjIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0ZXN0IG1ldGhvZCdzIGRvY3N0cmluZywgaWYgYXZhaWxhYmxlLCBvciBOb25lLiIKLSAgICBkZWYgdGVzdF9zaG9ydERlc2NyaXB0aW9uX19ub19kb2NzdHJpbmcoc2VsZik6Ci0gICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCBOb25lKQotCi0gICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCi0gICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucwotICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgotICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX3NpbmdsZWxpbmVfZG9jc3RyaW5nKHNlbGYpOgotICAgICAgICBkZXNjID0gInRoaXMgdGVzdHMgZm9vIgotICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUsIGRlc2NyaXB0aW9uPWRlc2MpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LnNob3J0RGVzY3JpcHRpb24oKSwgInRoaXMgdGVzdHMgZm9vIikKLQotY2xhc3MgVGVzdF9UZXN0UmVzdWx0KFRlc3RDYXNlKToKLSAgICAjIE5vdGU6IHRoZXJlIGFyZSBub3Qgc2VwYXJhdGUgdGVzdHMgZm9yIFRlc3RSZXN1bHQud2FzU3VjY2Vzc2Z1bCgpLAotICAgICMgVGVzdFJlc3VsdC5lcnJvcnMsIFRlc3RSZXN1bHQuZmFpbHVyZXMsIFRlc3RSZXN1bHQudGVzdHNSdW4gb3IKLSAgICAjIFRlc3RSZXN1bHQuc2hvdWxkU3RvcCBiZWNhdXNlIHRoZXNlIG9ubHkgaGF2ZSBtZWFuaW5nIGluIHRlcm1zIG9mCi0gICAgIyBvdGhlciBUZXN0UmVzdWx0IG1ldGhvZHMuCi0gICAgIwotICAgICMgQWNjb3JkaW5nbHksIHRlc3RzIGZvciB0aGUgYWZvcmVuYW1lZCBhdHRyaWJ1dGVzIGFyZSBpbmNvcnBvcmF0ZWQKLSAgICAjIGluIHdpdGggdGhlIHRlc3RzIGZvciB0aGUgZGVmaW5pbmcgbWV0aG9kcy4KLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICMgIlRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZwotICAgICMgcnVuIHNob3VsZCBiZSBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIFRlc3RSZXN1bHQncyBzaG91bGRTdG9wCi0gICAgIyBhdHRyaWJ1dGUgdG8gVHJ1ZS4iCi0gICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0b3AoKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIFRydWUpCi0KLSAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuLiBUaGUgZGVmYXVsdAotICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGluY3JlbWVudHMgdGhlIGluc3RhbmNlJ3MgdGVzdHNSdW4gY291bnRlci4iCi0gICAgZGVmIHRlc3Rfc3RhcnRUZXN0KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAjICJDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSB0ZXN0IGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mCi0gICAgIyB0aGUgb3V0Y29tZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKLSAgICBkZWYgdGVzdF9zdG9wVGVzdChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0KLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQotCi0gICAgICAgICMgU2FtZSB0ZXN0cyBhcyBhYm92ZTsgbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCi0KLSAgICAjICJDYWxsZWQgYmVmb3JlIGFuZCBhZnRlciB0ZXN0cyBhcmUgcnVuLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgotICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bihzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0gICAgICAgIHJlc3VsdC5zdGFydFRlc3RSdW4oKQotICAgICAgICByZXN1bHQuc3RvcFRlc3RSdW4oKQotCi0gICAgIyAiYWRkU3VjY2Vzcyh0ZXN0KSIKLSAgICAjIC4uLgotICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzdWNjZWVkcyIKLSAgICAjIC4uLgotICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKLSAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgotICAgICMgLi4uCi0gICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgotICAgICMgLi4uCi0gICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAotICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCi0gICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCi0gICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgIyAuLi4KLSAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKLSAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQotICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAotICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCi0gICAgZGVmIHRlc3RfYWRkU3VjY2VzcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0KLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQotICAgICAgICByZXN1bHQuYWRkU3VjY2Vzcyh0ZXN0KQotICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKLQotICAgICMgImFkZEZhaWx1cmUodGVzdCwgZXJyKSIKLSAgICAjIC4uLgotICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzaWduYWxzIGEgZmFpbHVyZS4gZXJyIGlzIGEgdHVwbGUgb2YKLSAgICAjIHRoZSBmb3JtIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpOiAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCi0gICAgIyAuLi4KLSAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCi0gICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKLSAgICAjIC4uLgotICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKLSAgICAjIC4uLgotICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgotICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAotICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgICMgLi4uCi0gICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCi0gICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKLSAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKLSAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgIGRlZiB0ZXN0X2FkZEZhaWx1cmUoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdC5mYWlsKCJmb28iKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCi0KLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0KLSAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQotICAgICAgICByZXN1bHQuYWRkRmFpbHVyZSh0ZXN0LCBleGNfaW5mb190dXBsZSkKLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQotICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdF9jYXNlIGlzIHRlc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikpCi0KLSAgICAjICJhZGRFcnJvcih0ZXN0LCBlcnIpIgotICAgICMgLi4uCi0gICAgIyAiQ2FsbGVkIHdoZW4gdGhlIHRlc3QgY2FzZSB0ZXN0IHJhaXNlcyBhbiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiBlcnIKLSAgICAjIGlzIGEgdHVwbGUgb2YgdGhlIGZvcm0gcmV0dXJuZWQgYnkgc3lzLmV4Y19pbmZvKCk6Ci0gICAgIyAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCi0gICAgIyAuLi4KLSAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCi0gICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKLSAgICAjIC4uLgotICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKLSAgICAjIC4uLgotICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKLSAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgotICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAotICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgICMgLi4uCi0gICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCi0gICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCi0gICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKLSAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKLSAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgotICAgIGRlZiB0ZXN0X2FkZEVycm9yKHNlbGYpOgotICAgICAgICBpbXBvcnQgc3lzCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKLQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLQotICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCi0gICAgICAgIHJlc3VsdC5hZGRFcnJvcih0ZXN0LCBleGNfaW5mb190dXBsZSkKLSAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQotCi0gICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5lcnJvcnNbMF0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRlc3RfY2FzZSBpcyB0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmb3JtYXR0ZWRfZXhjLCBzdHIpKQotCi0jIyMgU3VwcG9ydCBjb2RlIGZvciBUZXN0X1Rlc3RDYXNlCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKLSAgICBkZWYgdGVzdDEoc2VsZik6IHBhc3MKLQotY2xhc3MgQmFyKEZvbyk6Ci0gICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCi0KLWNsYXNzIExvZ2dpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIiIiQSB0ZXN0IGNhc2Ugd2hpY2ggbG9ncyBpdHMgY2FsbHMuIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Rlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygndGVzdCcpCi0gICAgICAgIHNlbGYuZXZlbnRzID0gZXZlbnRzCi0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQotCi0gICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgndGVzdCcpCi0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQotCi1jbGFzcyBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bihvYmplY3QpOgotICAgICIiIkFuIG9iamVjdCBob25vdXJpbmcgVGVzdFJlc3VsdCBiZWZvcmUgc3RhcnRUZXN0UnVuL3N0b3BUZXN0UnVuLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KLSAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQotICAgICAgICBzZWxmLnRlc3RzUnVuID0gMAotICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQotICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZXMgPSBbXQotICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMgPSBbXQotICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0b3BUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6Ci0gICAgICAgIHJldHVybiBUcnVlCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyMjIC9TdXBwb3J0IGNvZGUgZm9yIFRlc3RfVGVzdENhc2UKLQotY2xhc3MgVGVzdF9UZXN0Q2FzZShUZXN0Q2FzZSwgVGVzdEVxdWFsaXR5LCBUZXN0SGFzaGluZyk6Ci0KLSAgICAjIyMgU2V0IHVwIGF0dHJpYnV0ZXMgdXNlZCBieSBpbmhlcml0ZWQgdGVzdHMKLSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSAgICAjIFVzZWQgYnkgVGVzdEhhc2hpbmcudGVzdF9oYXNoIGFuZCBUZXN0RXF1YWxpdHkudGVzdF9lcQotICAgIGVxX3BhaXJzID0gWyhGb28oJ3Rlc3QxJyksIEZvbygndGVzdDEnKSldCi0KLSAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfbmUKLSAgICBuZV9wYWlycyA9IFsoRm9vKCd0ZXN0MScpLCBGb28oJ3J1blRlc3QnKSkKLSAgICAgICAgICAgICAgICwoRm9vKCd0ZXN0MScpLCBCYXIoJ3Rlc3QxJykpCi0gICAgICAgICAgICAgICAsKEZvbygndGVzdDEnKSwgQmFyKCd0ZXN0MicpKV0KLQotICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIHVzZWQgYnkgaW5oZXJpdGVkIHRlc3RzCi0KLQotICAgICMgImNsYXNzIFRlc3RDYXNlKFttZXRob2ROYW1lXSkiCi0gICAgIyAuLi4KLSAgICAjICJFYWNoIGluc3RhbmNlIG9mIFRlc3RDYXNlIHdpbGwgcnVuIGEgc2luZ2xlIHRlc3QgbWV0aG9kOiB0aGUKLSAgICAjIG1ldGhvZCBuYW1lZCBtZXRob2ROYW1lLiIKLSAgICAjIC4uLgotICAgICMgIm1ldGhvZE5hbWUgZGVmYXVsdHMgdG8gInJ1blRlc3QiLiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgaXQgcmVhbGx5IGlzIG9wdGlvbmFsLCBhbmQgdGhhdCBpdCBkZWZhdWx0cyB0byB0aGUgcHJvcGVyCi0gICAgIyB0aGluZy4KLSAgICBkZWYgdGVzdF9pbml0X19ub190ZXN0X25hbWUoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIE15RXhjZXB0aW9uKCkKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0KCkuaWQoKVstMTM6XSwgJy5UZXN0LnJ1blRlc3QnKQotCi0gICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKLSAgICAjIC4uLgotICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQotICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgotICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RfbmFtZV9fdmFsaWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHJhaXNlIE15RXhjZXB0aW9uKCkKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOiBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0KCd0ZXN0JykuaWQoKVstMTA6XSwgJy5UZXN0LnRlc3QnKQotCi0gICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKLSAgICAjIC4uLgotICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQotICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgotICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RfbmFtZV9faW52YWxpZChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgTXlFeGNlcHRpb24oKQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBUZXN0KCd0ZXN0Zm9vJykKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKLQotICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LiBGb3IKLSAgICAjIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZSAxIgotICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZvbygndGVzdCcpLmNvdW50VGVzdENhc2VzKCksIDEpCi0KLSAgICAjICJSZXR1cm4gdGhlIGRlZmF1bHQgdHlwZSBvZiB0ZXN0IHJlc3VsdCBvYmplY3QgdG8gYmUgdXNlZCB0byBydW4gdGhpcwotICAgICMgdGVzdC4gRm9yIFRlc3RDYXNlIGluc3RhbmNlcywgdGhpcyB3aWxsIGFsd2F5cyBiZQotICAgICMgdW5pdHRlc3QuVGVzdFJlc3VsdDsgIHN1YmNsYXNzZXMgb2YgVGVzdENhc2Ugc2hvdWxkCi0gICAgIyBvdmVycmlkZSB0aGlzIGFzIG5lY2Vzc2FyeS4iCi0gICAgZGVmIHRlc3RfZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgcmVzdWx0ID0gRm9vKCkuZGVmYXVsdFRlc3RSZXN1bHQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgdW5pdHRlc3QuVGVzdFJlc3VsdCkKLQotICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKLSAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCi0gICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAotICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgc2V0VXAoKSByYWlzZXMKLSAgICAjIGFuIGV4Y2VwdGlvbi4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXAoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyhMb2dnaW5nVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikuc2V0VXAoKQotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby5zZXRVcCcpCi0KLSAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQotICAgICMgIldpdGggYSB0ZW1wb3JhcnkgcmVzdWx0IHN0b3BUZXN0UnVuIGlzIGNhbGxlZCB3aGVuIHNldFVwIGVycm9ycy4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXBfZGVmYXVsdF9yZXN1bHQoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0KLSAgICAgICAgY2xhc3MgRm9vKExvZ2dpbmdUZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCi0KLSAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnNldFVwKCkKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQotCi0gICAgICAgIEZvbyhldmVudHMpLnJ1bigpCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKLSAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCi0gICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyhMb2dnaW5nVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KLSAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2l0aCBhIGRlZmF1bHQgcmVzdWx0LCBhbiBlcnJvciBpbiB0aGUgdGVzdCBzdGlsbCByZXN1bHRzIGluIHN0b3BUZXN0UnVuCi0gICAgIyBiZWluZyBjYWxsZWQuIgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0X2RlZmF1bHRfcmVzdWx0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotCi0gICAgICAgIGNsYXNzIEZvbyhMb2dnaW5nVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQotCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKLQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEVycm9yJywKLSAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KLSAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCBzaWduYWxzCi0gICAgIyBhIGZhaWx1cmUgKGFzIG9wcG9zZWQgdG8gYW4gZXJyb3IpLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3Qoc2VsZik6Ci0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotCi0gICAgICAgIGNsYXNzIEZvbyhMb2dnaW5nVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ2FkZEZhaWx1cmUnLCAndGVhckRvd24nLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIGEgdGVzdCBmYWlscyB3aXRoIGEgZGVmYXVsdCByZXN1bHQgc3RvcFRlc3RSdW4gaXMgc3RpbGwgY2FsbGVkLiIKLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0X2RlZmF1bHRfcmVzdWx0KHNlbGYpOgotCi0gICAgICAgIGNsYXNzIEZvbyhMb2dnaW5nVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KHNlbGYuZXZlbnRzKQotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCi0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICdhZGRGYWlsdXJlJywKLSAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgRm9vKGV2ZW50cykucnVuKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAotICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKLSAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCi0gICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0ZWFyRG93bigpIHJhaXNlcwotICAgICMgYW4gZXhjZXB0aW9uLgotICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZWFyRG93bihzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgRm9vKExvZ2dpbmdUZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZWFyRG93bigpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKLQotICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnYWRkRXJyb3InLAotICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJXaGVuIHRlYXJEb3duIGVycm9ycyB3aXRoIGEgZGVmYXVsdCByZXN1bHQgc3RvcFRlc3RSdW4gaXMgc3RpbGwgY2FsbGVkLiIKLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVhckRvd25fZGVmYXVsdF9yZXN1bHQoc2VsZik6Ci0KLSAgICAgICAgY2xhc3MgRm9vKExvZ2dpbmdUZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCi0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZWFyRG93bigpCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKLQotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgJ2FkZEVycm9yJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiVGVzdENhc2UucnVuKCkgc3RpbGwgd29ya3Mgd2hlbiB0aGUgZGVmYXVsdFRlc3RSZXN1bHQgaXMgYSBUZXN0UmVzdWx0Ci0gICAgIyB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc3RhcnRUZXN0UnVuIGFuZCBzdG9wVGVzdFJ1bi4KLSAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9kZWZhdWx0X3Jlc3VsdChzZWxmKToKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bigpCi0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKLQotICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgotICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCi0gICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCi0gICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMKLSAgICAjIGF0dHJpYnV0ZSBpcyBBc3NlcnRpb25FcnJvciIKLSAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19kZWZhdWx0KHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIEFzc2VydGlvbkVycm9yKQotCi0gICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCi0gICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KLSAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KLSAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiIKLSAgICAjCi0gICAgIyBNYWtlIHN1cmUgVGVzdENhc2UucnVuKCkgcmVzcGVjdHMgdGhlIGRlc2lnbmF0ZWQgZmFpbHVyZUV4Y2VwdGlvbgotICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX3N1YmNsYXNzaW5nX19leHBsaWNpdF9yYWlzZShzZWxmKToKLSAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCi0KLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCi0KLSAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBSdW50aW1lRXJyb3IKLQotICAgICAgICBzZWxmLmFzc2VydFRydWUoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBSdW50aW1lRXJyb3IpCi0KLQotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQotICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KLSAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwotICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgotICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuIgotICAgICMKLSAgICAjIE1ha2Ugc3VyZSBUZXN0Q2FzZS5ydW4oKSByZXNwZWN0cyB0aGUgZGVzaWduYXRlZCBmYWlsdXJlRXhjZXB0aW9uCi0gICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fc3ViY2xhc3NpbmdfX2ltcGxpY2l0X3JhaXNlKHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJmb28iKQotCi0gICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gUnVudGltZUVycm9yCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgUnVudGltZUVycm9yKQotCi0KLSAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotCi0gICAgIyAiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKLSAgICBkZWYgdGVzdF9zZXRVcChzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAjIC4uLiBhbmQgbm90aGluZyBzaG91bGQgaGFwcGVuCi0gICAgICAgIEZvbygpLnNldFVwKCkKLQotICAgICMgIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCi0gICAgZGVmIHRlc3RfdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgIyAuLi4gYW5kIG5vdGhpbmcgc2hvdWxkIGhhcHBlbgotICAgICAgICBGb28oKS50ZWFyRG93bigpCi0KLSAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCi0gICAgIwotICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcwotICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKLSAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcwotICAgICMganVzdCBzYXkgInN0cmluZyIpCi0gICAgZGVmIHRlc3RfaWQoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoRm9vKCkuaWQoKSwgc3RyKSkKLQotICAgICMgIklmIHJlc3VsdCBpcyBvbWl0dGVkIG9yIE5vbmUsIGEgdGVtcG9yYXJ5IHJlc3VsdCBvYmplY3QgaXMgY3JlYXRlZAotICAgICMgYW5kIHVzZWQsIGJ1dCBpcyBub3QgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGNhbGxlci4gQXMgVGVzdENhc2Ugb3ducyB0aGUKLSAgICAjIHRlbXBvcmFyeSByZXN1bHQgc3RhcnRUZXN0UnVuIGFuZCBzdG9wVGVzdFJ1biBhcmUgY2FsbGVkLgotCi0gICAgZGVmIHRlc3RfcnVuX191c2VzX2RlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICBldmVudHMgPSBbXQotCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKLQotICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLQotICAgICAgICAjIE1ha2UgcnVuKCkgZmluZCBhIHJlc3VsdCBvYmplY3Qgb24gaXRzIG93bgotICAgICAgICBGb28oJ3Rlc3QnKS5ydW4oKQotCi0gICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3Rlc3QnLCAnYWRkU3VjY2VzcycsCi0gICAgICAgICAgICAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCi0KLSAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIHNlbGYuc2hvcnREZXNjcmlwdGlvbigpLAotICAgICAgICAgICAgICAgICd0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCi0gICAgICAgICAgICAgICAgJy5UZXN0X1Rlc3RDYXNlKScpCi0KLSAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIHNlbGYuc2hvcnREZXNjcmlwdGlvbigpLAotICAgICAgICAgICAgICAgICgndGVzdFNob3J0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyAnCi0gICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RDYXNlKVxuJwotICAgICAgICAgICAgICAgICAnVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpKQotCi0gICAgZGVmIHRlc3RTaG9ydERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKLSAgICAgICAgIiIiVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KLQotICAgICAgICBUaGlzIG1ldGhvZCBlbnN1cmVzIHRoYXQgb25seSB0aGUgZmlyc3QgbGluZSBvZiBhIGRvY3N0cmluZyBpcwotICAgICAgICByZXR1cm5lZCB1c2VkIGluIHRoZSBzaG9ydCBkZXNjcmlwdGlvbiwgbm8gbWF0dGVyIGhvdyBsb25nIHRoZQotICAgICAgICB3aG9sZSB0aGluZyBpcy4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAgICAgc2VsZi5zaG9ydERlc2NyaXB0aW9uKCksCi0gICAgICAgICAgICAgICAgKCd0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJwotICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0Q2FzZSlcbicKLSAgICAgICAgICAgICAgICAgJ1Rlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciAnCi0gICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCi0KLSAgICBkZWYgdGVzdEFkZFR5cGVFcXVhbGl0eUZ1bmMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFNhZFNuYWtlKG9iamVjdCk6Ci0gICAgICAgICAgICAiIiJEdW1teSBjbGFzcyBmb3IgdGVzdF9hZGRUeXBlRXF1YWxpdHlGdW5jLiIiIgotICAgICAgICBzMSwgczIgPSBTYWRTbmFrZSgpLCBTYWRTbmFrZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoczEgPT0gczIpCi0gICAgICAgIGRlZiBBbGxTbmFrZXNDcmVhdGVkRXF1YWwoYSwgYiwgbXNnPU5vbmUpOgotICAgICAgICAgICAgcmV0dXJuIHR5cGUoYSkgPT0gdHlwZShiKSA9PSBTYWRTbmFrZQotICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoU2FkU25ha2UsIEFsbFNuYWtlc0NyZWF0ZWRFcXVhbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCi0gICAgICAgICMgTm8gdGhpcyBkb2Vzbid0IGNsZWFuIHVwIGFuZCByZW1vdmUgdGhlIFNhZFNuYWtlIGVxdWFsaXR5IGZ1bmMKLSAgICAgICAgIyBmcm9tIHRoaXMgVGVzdENhc2UgaW5zdGFuY2UgYnV0IHNpbmNlIGl0cyBhIGxvY2FsIG5vdGhpbmcgZWxzZQotICAgICAgICAjIHdpbGwgZXZlciBub3RpY2UgdGhhdC4KLQotICAgIGRlZiB0ZXN0QXNzZXJ0SXMoc2VsZik6Ci0gICAgICAgIHRoaW5nID0gb2JqZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyh0aGluZywgdGhpbmcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJcywgdGhpbmcsIG9iamVjdCgpKQotCi0gICAgZGVmIHRlc3RBc3NlcnRJc05vdChzZWxmKToKLSAgICAgICAgdGhpbmcgPSBvYmplY3QoKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KHRoaW5nLCBvYmplY3QoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm90LCB0aGluZywgdGhpbmcpCi0KLSAgICBkZWYgdGVzdEFzc2VydEluKHNlbGYpOgotICAgICAgICBhbmltYWxzID0geydtb25rZXknOiAnYmFuYW5hJywgJ2Nvdyc6ICdncmFzcycsICdzZWFsJzogJ2Zpc2gnfQotCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2EnLCAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigyLCBbMSwgMiwgM10pCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oJ21vbmtleScsIGFuaW1hbHMpCi0KLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignZCcsICdhYmMnKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKDAsIFsxLCAyLCAzXSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignb3R0ZXInLCBhbmltYWxzKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJbiwgJ3gnLCAnYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCA0LCBbMSwgMiwgM10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJbiwgJ2VsZXBoYW50JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWFscykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SW4sICdjJywgJ2FiYycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgMSwgWzEsIDIsIDNdKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90SW4sICdjb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYWxzKQotCi0gICAgZGVmIHRlc3RBc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHt9LCB7fSkKLSAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoe30sIHsnYSc6IDF9KQotICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxfSwgeydhJzogMX0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDF9LCB7J2EnOiAxLCAnYic6IDJ9KQotICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxLCAnYic6IDJ9LCB7J2EnOiAxLCAnYic6IDJ9KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0LCB7J2EnOiAyfSwgeydhJzogMX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICcuKk1pc21hdGNoZWQgdmFsdWVzOi4qJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCwgeydjJzogMX0sIHsnYSc6IDF9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAnLipNaXNzaW5nOi4qJykKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCwgeydhJzogMSwgJ2MnOiAxfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogMX0sICcuKk1pc3Npbmc6LionKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0LCB7J2EnOiAxLCAnYyc6IDF9LAotICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnOiAxfSwgJy4qTWlzc2luZzouKk1pc21hdGNoZWQgdmFsdWVzOi4qJykKLQotICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWwoc2VsZik6Ci0gICAgICAgIGVxdWFsX3BhaXJzID0gWwotICAgICAgICAgICAgICAgICgoKSwgKCkpLAotICAgICAgICAgICAgICAgICh7fSwge30pLAotICAgICAgICAgICAgICAgIChbXSwgW10pLAotICAgICAgICAgICAgICAgIChzZXQoKSwgc2V0KCkpLAotICAgICAgICAgICAgICAgIChmcm96ZW5zZXQoKSwgZnJvemVuc2V0KCkpXQotICAgICAgICBmb3IgYSwgYiBpbiBlcXVhbF9wYWlyczoKLSAgICAgICAgICAgICMgVGhpcyBtZXNzIG9mIHRyeSBleGNlcHRzIGlzIHRvIHRlc3QgdGhlIGFzc2VydEVxdWFsIGJlaGF2aW9yCi0gICAgICAgICAgICAjIGl0c2VsZi4KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCi0gICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwoJXIsICVyKSBmYWlsZWQnICUgKGEsIGIpKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYiwgbXNnPSdmb28nKQotICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsKCVyLCAlcikgd2l0aCBtc2c9IGZhaWxlZCcgJSAoYSwgYikpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiLCAnZm9vJykKLSAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRFcXVhbCglciwgJXIpIHdpdGggdGhpcmQgcGFyYW1ldGVyIGZhaWxlZCcgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikpCi0KLSAgICAgICAgdW5lcXVhbF9wYWlycyA9IFsKLSAgICAgICAgICAgICAgICgoKSwgW10pLAotICAgICAgICAgICAgICAgKHt9LCBzZXQoKSksCi0gICAgICAgICAgICAgICAoc2V0KFs0LDFdKSwgZnJvemVuc2V0KFs0LDJdKSksCi0gICAgICAgICAgICAgICAoZnJvemVuc2V0KFs0LDVdKSwgc2V0KFsyLDNdKSksCi0gICAgICAgICAgICAgICAoc2V0KFszLDRdKSwgc2V0KFs1LDRdKSldCi0gICAgICAgIGZvciBhLCBiIGluIHVuZXF1YWxfcGFpcnM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RXF1YWwsIGEsIGIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RXF1YWwsIGEsIGIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9vJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0nZm9vJykKLQotICAgIGRlZiB0ZXN0RXF1YWxpdHkoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKFtdLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKCgpLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKFtdLCAoKSkKLQotICAgICAgICBhID0gWzAsICdhJywgW11dCi0gICAgICAgIGIgPSBbXQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCwgYSwgYikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIHR1cGxlKGEpLCB0dXBsZShiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLCBhLCB0dXBsZShiKSkKLQotICAgICAgICBiLmV4dGVuZChhKQotICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChhLCBiKQotICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodHVwbGUoYSksIHR1cGxlKGIpKQotICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoYSwgdHVwbGUoYikpCi0gICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbCh0dXBsZShhKSwgYikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBhLCB0dXBsZShiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHR1cGxlKGEpLCBiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCBOb25lLCBiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwgTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUoYikpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCB0dXBsZShiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExpc3RFcXVhbCwgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwsIDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKHt9LCB7fSkKLQotICAgICAgICBjID0geyAneCc6IDEgfQotICAgICAgICBkID0ge30KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwsIGMsIGQpCi0KLSAgICAgICAgZC51cGRhdGUoYykKLSAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoYywgZCkKLQotICAgICAgICBkWyd4J10gPSAwCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCBjLCBkLCAnVGhlc2UgYXJlIHVuZXF1YWwnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIE5vbmUsIGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIFtdLCBkKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0RGljdEVxdWFsLCAxLCAxKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0U2FtZUVsZW1lbnRzKFsxLCAyLCAzXSwgWzMsIDIsIDFdKQotICAgICAgICBzZWxmLmFzc2VydFNhbWVFbGVtZW50cyhbMSwgMl0gKyBbM10gKiAxMDAsIFsxXSAqIDEwMCArIFsyLCAzXSkKLSAgICAgICAgc2VsZi5hc3NlcnRTYW1lRWxlbWVudHMoWydmb28nLCAnYmFyJywgJ2JheiddLCBbJ2JhcicsICdiYXonLCAnZm9vJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTYW1lRWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsxMF0sIFsxMCwgMTFdKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2FtZUVsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAsIDExXSwgWzEwXSkKLQotICAgICAgICAjIFRlc3QgdGhhdCBzZXF1ZW5jZXMgb2YgdW5oYXNoYWJsZSBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIHNhbWVuZXNzOgotICAgICAgICBzZWxmLmFzc2VydFNhbWVFbGVtZW50cyhbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbMSwgMl1dKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0U2FtZUVsZW1lbnRzKFt7J2EnOiAxfSwgeydiJzogMn1dLCBbeydiJzogMn0sIHsnYSc6IDF9XSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNhbWVFbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW1sxXV0sIFtbMl1dKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2FtZUVsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBbeydhJzogMX0sIHsnYic6IDJ9XSwgW3snYic6IDJ9LCB7J2EnOiAyfV0pCi0KLSAgICBkZWYgdGVzdEFzc2VydFNldEVxdWFsKHNlbGYpOgotICAgICAgICBzZXQxID0gc2V0KCkKLSAgICAgICAgc2V0MiA9IHNldCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MikKLQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIE5vbmUsIHNldDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgW10sIHNldDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBbXSkKLQotICAgICAgICBzZXQxID0gc2V0KFsnYSddKQotICAgICAgICBzZXQyID0gc2V0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQotCi0gICAgICAgIHNldDEgPSBzZXQoWydhJ10pCi0gICAgICAgIHNldDIgPSBzZXQoWydhJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MikKLQotICAgICAgICBzZXQxID0gc2V0KFsnYSddKQotICAgICAgICBzZXQyID0gc2V0KFsnYScsICdiJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKLQotICAgICAgICBzZXQxID0gc2V0KFsnYSddKQotICAgICAgICBzZXQyID0gZnJvemVuc2V0KFsnYScsICdiJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKLQotICAgICAgICBzZXQxID0gc2V0KFsnYScsICdiJ10pCi0gICAgICAgIHNldDIgPSBmcm96ZW5zZXQoWydhJywgJ2InXSkKLSAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQxLCBzZXQyKQotCi0gICAgICAgIHNldDEgPSBzZXQoKQotICAgICAgICBzZXQyID0gImZvbyIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDIsIHNldDEpCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgYW55IHN0cmluZyBmb3JtYXR0aW5nIGlzIHR1cGxlLXNhZmUKLSAgICAgICAgc2V0MSA9IHNldChbKDAsIDEpLCAoMiwgMyldKQotICAgICAgICBzZXQyID0gc2V0KFsoNCwgNSldKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCi0KLSAgICBkZWYgdGVzdEluZXF1YWxpdHkoc2VsZik6Ci0gICAgICAgICMgVHJ5IGludHMKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDIsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzcygxLCAyKQotICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLCAyKQotICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIDEsIDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAyLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgMiwgMSkKLQotICAgICAgICAjIFRyeSBGbG9hdHMKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKDEuMSwgMS4wKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgxLjEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMS4wLCAxLjApCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzcygxLjAsIDEuMSkKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMS4wLCAxLjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEuMCwgMS4wKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMS4wLCAxLjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLjAsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgMS4wLCAxLjEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAxLjEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDEuMCwgMS4wKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAxLjEsIDEuMCkKLQotICAgICAgICAjIFRyeSBTdHJpbmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcignYnVnJywgJ2FudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKCdidWcnLCAnYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoJ2FudCcsICdhbnQnKQotICAgICAgICBzZWxmLmFzc2VydExlc3MoJ2FudCcsICdidWcnKQotICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgnYW50JywgJ2J1ZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKCdhbnQnLCAnYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCAnYnVnJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsICdhbnQnLCAnYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgJ2FudCcsICdidWcnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2J1ZycsICdhbnQnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgJ2FudCcsICdhbnQnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCAnYnVnJywgJ2FudCcpCi0KLSAgICAgICAgIyBUcnkgYnl0ZXMKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGInYnVnJywgYidhbnQnKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChiJ2J1ZycsIGInYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYidhbnQnLCBiJ2FudCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhiJ2FudCcsIGInYnVnJykKLSAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoYidhbnQnLCBiJ2J1ZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGInYW50JywgYidhbnQnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgYidhbnQnLCBiJ2J1ZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCBiJ2FudCcsIGInYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCwgYidhbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1ZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCBiJ2J1ZycsIGInYW50JykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIGInYW50JywgYidhbnQnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzc0VxdWFsLCBiJ2J1ZycsIGInYW50JykKLQotICAgIGRlZiB0ZXN0QXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZik6Ci0gICAgICAgIHNhbXBsZV90ZXh0ID0gIiIiXAotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy8yLjMvbGliL21vZHVsZS11bml0dGVzdC5odG1sCi10ZXN0IGNhc2UKLSAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXQotIiIiCi0gICAgICAgIHJldmlzZWRfc2FtcGxlX3RleHQgPSAiIiJcCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuNC4xL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAotdGVzdCBjYXNlCi0gICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0gWW91IG1heSBwcm92aWRlIHlvdXIKLSAgICBvd24gaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBzdWJjbGFzcyBmcm9tIFRlc3RDYXNlLCBvZiBjb3Vyc2UuCi0iIiIKLSAgICAgICAgc2FtcGxlX3RleHRfZXJyb3IgPSAiIiIKLS0gaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy8yLjMvbGliL21vZHVsZS11bml0dGVzdC5odG1sCi0/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0rIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi40LjEvbGliL21vZHVsZS11bml0dGVzdC5odG1sCi0/ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl4KLSAgdGVzdCBjYXNlCi0tICAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXQotKyAgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0gWW91IG1heSBwcm92aWRlIHlvdXIKLT8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKysrKysrKysrKysrKysrKysrKysrCi0rICAgICBvd24gaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIG5vdCBzdWJjbGFzcyBmcm9tIFRlc3RDYXNlLCBvZiBjb3Vyc2UuCi0iIiIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHNhbXBsZV90ZXh0LCByZXZpc2VkX3NhbXBsZV90ZXh0KQotICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6Ci0gICAgICAgICAgICAjIG5vIGZhaXIgdGVzdGluZyBvdXJzZWxmIHdpdGggb3Vyc2VsZiwgdXNlIGFzc2VydEVxdWFsLi4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2FtcGxlX3RleHRfZXJyb3IsIHN0cihlKSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWxfZGlmZlRocmVzaG9sZChzZWxmKToKLSAgICAgICAgIyBjaGVjayB0aHJlc2hvbGQgdmFsdWUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9kaWZmVGhyZXNob2xkLCAyKioxNikKLSAgICAgICAgIyBkaXNhYmxlIG1hZERpZmYgdG8gZ2V0IGRpZmYgbWFya2VycwotICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCi0KLSAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAotICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAotICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMioqOAotICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQotCi0gICAgICAgICMgdW5kZXIgdGhlIHRocmVzaG9sZDogZGlmZiBtYXJrZXIgKF4pIGluIGVycm9yIG1lc3NhZ2UKLSAgICAgICAgcyA9ICd4JyAqICgyKio3KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHMgKyAnYScsIHMgKyAnYicpCi0gICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZXhjOgotICAgICAgICAgICAgZXJyX21zZyA9IHN0cihleGMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsIHVuZXhwZWN0ZWRseSBzdWNjZWVkZWQnKQotICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgZXJyX21zZykKLSAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQotCi0gICAgICAgICMgb3ZlciB0aGUgdGhyZXNob2xkOiBkaWZmIG5vdCB1c2VkIGFuZCBtYXJrZXIgKF4pIG5vdCBpbiBlcnJvciBtZXNzYWdlCi0gICAgICAgIHMgPSAneCcgKiAoMioqOSkKLSAgICAgICAgczEsIHMyID0gcyArICdhJywgcyArICdiJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydE11bHRpTGluZUVxdWFsKHMxLCBzMikKLSAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBleGM6Ci0gICAgICAgICAgICBlcnJfbXNnID0gc3RyKGV4YykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwgdW5leHBlY3RlZGx5IHN1Y2NlZWRlZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ14nLCBlcnJfbXNnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycl9tc2csICclciAhPSAlcicgJSAoczEsIHMyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChzICsgJ2EnLCBzICsgJ2EnKQotCi0gICAgZGVmIHRlc3RBc3NlcnRJc05vbmUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc05vbmUsIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSgnRGpab1Bsb0dlYXJzIG9uIFJhaWxzJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzTm90Tm9uZSwgTm9uZSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0UmVnZXhwTWF0Y2hlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleHBNYXRjaGVzKCdhc2RmYWJhc2RmJywgcidhYisnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0UmVnZXhwTWF0Y2hlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NhYWFzJywgcidhYWFhJykKLQotICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhwKHNlbGYpOgotICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZGVmIFN0dWIoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbk1vY2soJ1dlIGV4cGVjdCcpCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoRXhjZXB0aW9uTW9jaywgcmUuY29tcGlsZSgnZXhwZWN0JCcpLCBTdHViKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChFeGNlcHRpb25Nb2NrLCAnZXhwZWN0JCcsIFN0dWIpCi0KLSAgICBkZWYgdGVzdEFzc2VydE5vdFJhaXNlc1JlZ2V4cChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkIGJ5IDxsYW1iZGE+JCcsCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgcmUuY29tcGlsZSgneCcpLAotICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAoCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkIGJ5IDxsYW1iZGE+JCcsCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgJ3gnLAotICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhwTWlzbWF0Y2goc2VsZik6Ci0gICAgICAgIGRlZiBTdHViKCk6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQnKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwgJ15FeHBlY3RlZCQnLAotICAgICAgICAgICAgICAgIFN0dWIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKAotICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleHAsIEV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICByZS5jb21waWxlKCdeRXhwZWN0ZWQkJyksIFN0dWIpCi0KLSAgICBkZWYgdGVzdFN5bm9ueW1Bc3NlcnRNZXRob2ROYW1lcyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCB1bmRvY3VtZW50ZWQgbWV0aG9kIG5hbWUgc3lub255bXMuCi0KLSAgICAgICAgUGxlYXNlIGRvIG5vdCB1c2UgdGhlc2UgbWV0aG9kcyBuYW1lcyBpbiB5b3VyIG93biBjb2RlLgotCi0gICAgICAgIFRoaXMgdGVzdCBjb25maXJtcyB0aGVpciBjb250aW51ZWQgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5Ci0gICAgICAgIGluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIGV4aXN0aW5nIGNvZGUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFscygzLCA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFscygzLCAzKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLjAsIDIuMCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbHMoMy4wLCA1LjApCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhUcnVlKQotCi0gICAgZGVmIHRlc3RQZW5kaW5nRGVwcmVjYXRpb25NZXRob2ROYW1lcyhzZWxmKToKLSAgICAgICAgIiIiVGVzdCBmYWlsKiBtZXRob2RzIHBlbmRpbmcgZGVwcmVjYXRpb24sIHRoZXkgd2lsbCB3YXJuIGluIDMuMi4KLQotICAgICAgICBEbyBub3QgdXNlIHRoZXNlIG1ldGhvZHMuICBUaGV5IHdpbGwgZ28gYXdheSBpbiAzLjMuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmZhaWxJZkVxdWFsKDMsIDUpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0VxdWFsKDMsIDMpCi0gICAgICAgIHNlbGYuZmFpbFVubGVzc0FsbW9zdEVxdWFsKDIuMCwgMi4wKQotICAgICAgICBzZWxmLmZhaWxJZkFsbW9zdEVxdWFsKDMuMCwgNS4wKQotICAgICAgICBzZWxmLmZhaWxVbmxlc3MoVHJ1ZSkKLSAgICAgICAgc2VsZi5mYWlsVW5sZXNzUmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhIF86IDMuMTQgKyAnc3BhbScpCi0gICAgICAgIHNlbGYuZmFpbElmKEZhbHNlKQotCi0gICAgZGVmIHRlc3REZWVwY29weShzZWxmKToKLSAgICAgICAgIyBJc3N1ZTogNTY2MAotICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QoVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCi0KLSAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG93IHVwCi0gICAgICAgIGRlZXBjb3B5KHRlc3QpCi0KLQotY2xhc3MgVGVzdF9UZXN0U2tpcHBpbmcoVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3Rfc2tpcHBpbmcoc2VsZik6Ci0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdF9za2lwX21lKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAiKQotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLSAgICAgICAgdGVzdCA9IEZvbygidGVzdF9za2lwX21lIikKLSAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJza2lwIildKQotCi0gICAgICAgICMgVHJ5IGxldHRpbmcgc2V0VXAgc2tpcCB0aGUgdGVzdCBub3cuCi0gICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdGluZyIpCi0gICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOiBwYXNzCi0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X25vdGhpbmciKQotICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3N0YXJ0VGVzdCcsICdhZGRTa2lwJywgJ3N0b3BUZXN0J10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNraXBwZWQsIFsodGVzdCwgInRlc3RpbmciKV0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQotCi0gICAgZGVmIHRlc3Rfc2tpcHBpbmdfZGVjb3JhdG9ycyhzZWxmKToKLSAgICAgICAgb3BfdGFibGUgPSAoKHVuaXR0ZXN0LnNraXBVbmxlc3MsIEZhbHNlLCBUcnVlKSwKLSAgICAgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LnNraXBJZiwgVHJ1ZSwgRmFsc2UpKQotICAgICAgICBmb3IgZGVjbywgZG9fc2tpcCwgZG9udF9za2lwIGluIG9wX3RhYmxlOgotICAgICAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgICAgICBAZGVjbyhkb19za2lwLCAidGVzdGluZyIpCi0gICAgICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcChzZWxmKTogcGFzcwotCi0gICAgICAgICAgICAgICAgQGRlY28oZG9udF9za2lwLCAidGVzdGluZyIpCi0gICAgICAgICAgICAgICAgZGVmIHRlc3RfZG9udF9za2lwKHNlbGYpOiBwYXNzCi0gICAgICAgICAgICB0ZXN0X2RvX3NraXAgPSBGb28oInRlc3Rfc2tpcCIpCi0gICAgICAgICAgICB0ZXN0X2RvbnRfc2tpcCA9IEZvbygidGVzdF9kb250X3NraXAiKQotICAgICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RfZG9fc2tpcCwgdGVzdF9kb250X3NraXBdKQotICAgICAgICAgICAgZXZlbnRzID0gW10KLSAgICAgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotICAgICAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnRUZXN0JywgJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3RfZG9fc2tpcCwgInRlc3RpbmciKV0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLQotICAgIGRlZiB0ZXN0X3NraXBfY2xhc3Moc2VsZik6Ci0gICAgICAgIEB1bml0dGVzdC5za2lwKCJ0ZXN0aW5nIikKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmVjb3JkLmFwcGVuZCgxKQotICAgICAgICByZWNvcmQgPSBbXQotICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKLSAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQotICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZCwgW10pCi0KLSAgICBkZWYgdGVzdF9leHBlY3RlZF9mYWlsdXJlKHNlbGYpOgotICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaGVscCBtZSEiKQotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKLSAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQotICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLQotICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2VzcyhzZWxmKToKLSAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKLSAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV2ZW50cyA9IFtdCi0gICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQotICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCi0gICAgICAgIHRlc3QucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCi0KLQotCi1jbGFzcyBUZXN0X0Fzc2VydGlvbnMoVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X0FsbW9zdEVxdWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEuMDAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgxLjAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLCAxLjAwMDAwMDEsIDEuMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLCAxLjAwMDAwMDAxLCAxLjApCi0KLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjEsIDEuMCwgcGxhY2VzPTApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwgMS4xLCAxLjAsIHBsYWNlcz0xKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgwLCAuMSsuMWosIHBsYWNlcz0xKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwgMCwgLjErLjFqLCBwbGFjZXM9MCkKLQotICAgIGRlZiB0ZXN0X2Fzc2VydFJhaXNlcyhzZWxmKToKLSAgICAgICAgZGVmIF9yYWlzZShlKToKLSAgICAgICAgICAgIHJhaXNlIGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIF9yYWlzZSwgS2V5RXJyb3IpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBfcmFpc2UsIEtleUVycm9yKCJrZXkiKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogTm9uZSkKLSAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiS2V5RXJyb3Igbm90IHJhaXNlZCIsIHN0cihlKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGZhaWwiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgX3JhaXNlLCBWYWx1ZUVycm9yKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICByYWlzZSBLZXlFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJrZXkiKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIktleUVycm9yIG5vdCByYWlzZWQiLCBzdHIoZSkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBmYWlsIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgotICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKLQotCi1jbGFzcyBUZXN0TG9uZ01lc3NhZ2UoVGVzdENhc2UpOgotICAgICIiIlRlc3QgdGhhdCB0aGUgaW5kaXZpZHVhbCBhc3NlcnRzIGhvbm91ciBsb25nTWVzc2FnZS4KLSAgICBUaGlzIGFjdHVhbGx5IHRlc3RzIGFsbCB0aGUgbWVzc2FnZSBiZWhhdmlvdXIgZm9yCi0gICAgYXNzZXJ0cyB0aGF0IHVzZSBsb25nTWVzc2FnZS4iIiIKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0RmFsc2UoVGVzdENhc2UpOgotICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBGYWxzZQotICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbgotCi0gICAgICAgICAgICBkZWYgdGVzdFRlc3Qoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdFRydWUoVGVzdENhc2UpOgotICAgICAgICAgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCi0gICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gc2VsZi5mYWlsdXJlRXhjZXB0aW9uCi0KLSAgICAgICAgICAgIGRlZiB0ZXN0VGVzdChzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUgPSBUZXN0YWJsZVRlc3RUcnVlKCd0ZXN0VGVzdCcpCi0gICAgICAgIHNlbGYudGVzdGFibGVGYWxzZSA9IFRlc3RhYmxlVGVzdEZhbHNlKCd0ZXN0VGVzdCcpCi0KLSAgICBkZWYgdGVzdERlZmF1bHQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdENhc2UubG9uZ01lc3NhZ2UpCi0KLSAgICBkZWYgdGVzdF9mb3JtYXRNc2coc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKE5vbmUsICJmb28iKSwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKCJmb28iLCAiYmFyIiksICJmb28iKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2UoTm9uZSwgImZvbyIpLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZSgiZm9vIiwgImJhciIpLCAiYmFyIDogZm9vIikKLQotICAgIGRlZiBhc3NlcnRNZXNzYWdlcyhzZWxmLCBtZXRob2ROYW1lLCBhcmdzLCBlcnJvcnMpOgotICAgICAgICBkZWYgZ2V0TWV0aG9kKGkpOgotICAgICAgICAgICAgdXNlVGVzdGFibGVGYWxzZSAgPSBpIDwgMgotICAgICAgICAgICAgaWYgdXNlVGVzdGFibGVGYWxzZToKLSAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0YWJsZUZhbHNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLnRlc3RhYmxlVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIodGVzdCwgbWV0aG9kTmFtZSkKLQotICAgICAgICBmb3IgaSwgZXhwZWN0ZWRfcmVnZXhwIGluIGVudW1lcmF0ZShlcnJvcnMpOgotICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldE1ldGhvZChpKQotICAgICAgICAgICAga3dhcmdzID0ge30KLSAgICAgICAgICAgIHdpdGhNc2cgPSBpICUgMgotICAgICAgICAgICAgaWYgd2l0aE1zZzoKLSAgICAgICAgICAgICAgICBrd2FyZ3MgPSB7Im1zZyI6ICJvb3BzIn0KLQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cChzZWxmLmZhaWx1cmVFeGNlcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cD1leHBlY3RlZF9yZWdleHApOgotICAgICAgICAgICAgICAgIHRlc3RNZXRob2QoKmFyZ3MsICoqa3dhcmdzKQotCi0gICAgZGVmIHRlc3RBc3NlcnRUcnVlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRUcnVlJywgKEZhbHNlLCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeRmFsc2UgaXMgbm90IHRydWUkIiwgIl5vb3BzJCIsICJeRmFsc2UgaXMgbm90IHRydWUkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5GYWxzZSBpcyBub3QgdHJ1ZSA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdEFzc2VydEZhbHNlKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRGYWxzZScsIChUcnVlLCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeVHJ1ZSBpcyBub3QgZmFsc2UkIiwgIl5vb3BzJCIsICJeVHJ1ZSBpcyBub3QgZmFsc2UkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5UcnVlIGlzIG5vdCBmYWxzZSA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdE5vdEVxdWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnROb3RFcXVhbCcsICgxLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xID09IDEkIiwgIl5vb3BzJCIsICJeMSA9PSAxJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSA9PSAxIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QWxtb3N0RXF1YWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEFsbW9zdEVxdWFsJywgKDEsIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMkIiwgIl5vb3BzJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSAhPSAyIHdpdGhpbiA3IHBsYWNlcyQiLCAiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMgOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3ROb3RBbG1vc3RFcXVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90QWxtb3N0RXF1YWwnLCAoMSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xID09IDEgd2l0aGluIDcgcGxhY2VzJCIsICJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdF9iYXNlQXNzZXJ0RXF1YWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ19iYXNlQXNzZXJ0RXF1YWwnLCAoMSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSAhPSAyJCIsICJeb29wcyQiLCAiXjEgIT0gMiQiLCAiXjEgIT0gMiA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdEFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZik6Ci0gICAgICAgICMgRXJyb3IgbWVzc2FnZXMgYXJlIG11bHRpbGluZSBzbyBub3QgdGVzdGluZyBvbiBmdWxsIG1lc3NhZ2UKLSAgICAgICAgIyBhc3NlcnRUdXBsZUVxdWFsIGFuZCBhc3NlcnRMaXN0RXF1YWwgZGVsZWdhdGUgdG8gdGhpcyBtZXRob2QKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0U2VxdWVuY2VFcXVhbCcsIChbXSwgW05vbmVdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIlwrIFxbTm9uZVxdJCIsICJeb29wcyQiLCByIlwrIFxbTm9uZVxdJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXCsgXFtOb25lXF0gOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3RBc3NlcnRTZXRFcXVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0U2V0RXF1YWwnLCAoc2V0KCksIHNldChbTm9uZV0pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIk5vbmUkIiwgIl5vb3BzJCIsICJOb25lJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0SW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEluJywgKE5vbmUsIFtdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdJCcsICJeb29wcyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXk5vbmUgbm90IGZvdW5kIGluIFxbXF0kJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdIDogb29wcyQnXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0Tm90SW4oc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE5vdEluJywgKE5vbmUsIFtOb25lXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0kJywgIl5vb3BzJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0kJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIHVuZXhwZWN0ZWRseSBmb3VuZCBpbiBcW05vbmVcXSA6IG9vcHMkJ10pCi0KLSAgICBkZWYgdGVzdEFzc2VydERpY3RFcXVhbChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RGljdEVxdWFsJywgKHt9LCB7J2tleSc6ICd2YWx1ZSd9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbciJcKyBceydrZXknOiAndmFsdWUnXH0kIiwgIl5vb3BzJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcKyBceydrZXknOiAndmFsdWUnXH0kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwrIFx7J2tleSc6ICd2YWx1ZSdcfSA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdEFzc2VydERpY3RDb250YWluc1N1YnNldChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0JywgKHsna2V5JzogJ3ZhbHVlJ30sIHt9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl5NaXNzaW5nOiAna2V5JyQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5NaXNzaW5nOiAna2V5JyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk1pc3Npbmc6ICdrZXknIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0U2FtZUVsZW1lbnRzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRTYW1lRWxlbWVudHMnLCAoW10sIFtOb25lXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXFtOb25lXF0kIiwgIl5vb3BzJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXFtOb25lXF0kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcW05vbmVcXSA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRNdWx0aUxpbmVFcXVhbCcsICgiIiwgImZvbyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyIlwrIGZvbyQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJcKyBmb28gOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3RBc3NlcnRMZXNzKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRMZXNzJywgKDIsIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeb29wcyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiAxJCIsICJeMiBub3QgbGVzcyB0aGFuIDEgOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3RBc3NlcnRMZXNzRXF1YWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydExlc3NFcXVhbCcsICgyLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjIgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAxIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0R3JlYXRlcicsICgxLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gMiQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiAyIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0R3JlYXRlckVxdWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRHcmVhdGVyRXF1YWwnLCAoMSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwgIl5vb3BzJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMiA6IG9vcHMkIl0pCi0KLSAgICBkZWYgdGVzdEFzc2VydElzTm9uZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb25lJywgKCdub3QgTm9uZScsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lJCIsICJeb29wcyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXidub3QgTm9uZScgaXMgbm90IE5vbmUkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lIDogb29wcyQiXSkKLQotICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb3ROb25lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJc05vdE5vbmUnLCAoTm9uZSwpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXnVuZXhwZWN0ZWRseSBOb25lJCIsICJeb29wcyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBOb25lJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IE5vbmUgOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3RBc3NlcnRJcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXMnLCAoTm9uZSwgJ2ZvbycpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXk5vbmUgaXMgbm90ICdmb28nJCIsICJeb29wcyQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk5vbmUgaXMgbm90ICdmb28nJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTm9uZSBpcyBub3QgJ2ZvbycgOiBvb3BzJCJdKQotCi0gICAgZGVmIHRlc3RBc3NlcnRJc05vdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb3QnLCAoTm9uZSwgTm9uZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSQiLCAiXm9vcHMkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiBOb25lJCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSA6IG9vcHMkIl0pCi0KLQotY2xhc3MgVGVzdENsZWFuVXAoVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RDbGVhblVwKHNlbGYpOgotICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QoVGVzdENhc2UpOgotICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fY2xlYW51cHMsIFtdKQotCi0gICAgICAgIGNsZWFudXBzID0gW10KLQotICAgICAgICBkZWYgY2xlYW51cDEoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIGNsZWFudXBzLmFwcGVuZCgoMSwgYXJncywga3dhcmdzKSkKLQotICAgICAgICBkZWYgY2xlYW51cDIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIGNsZWFudXBzLmFwcGVuZCgoMiwgYXJncywga3dhcmdzKSkKLQotICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEsIDEsIDIsIDMsIGZvdXI9J2hlbGxvJywgZml2ZT0nZ29vZGJ5ZScpCi0gICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX2NsZWFudXBzLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsoY2xlYW51cDEsICgxLCAyLCAzKSwgZGljdChmb3VyPSdoZWxsbycsIGZpdmU9J2dvb2RieWUnKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGVhbnVwMiwgKCksIHt9KV0pCi0KLSAgICAgICAgcmVzdWx0ID0gdGVzdC5kb0NsZWFudXBzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNsZWFudXBzLCBbKDIsICgpLCB7fSksICgxLCAoMSwgMiwgMyksIGRpY3QoZm91cj0naGVsbG8nLCBmaXZlPSdnb29kYnllJykpXSkKLQotICAgIGRlZiB0ZXN0Q2xlYW5VcFdpdGhFcnJvcnMoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdChUZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNsYXNzIE1vY2tSZXN1bHQob2JqZWN0KToKLSAgICAgICAgICAgIGVycm9ycyA9IFtdCi0gICAgICAgICAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXhjX2luZm8pOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgZXhjX2luZm8pKQotCi0gICAgICAgIHJlc3VsdCA9IE1vY2tSZXN1bHQoKQotICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCi0gICAgICAgIHRlc3QuX3Jlc3VsdEZvckRvQ2xlYW51cHMgPSByZXN1bHQKLQotICAgICAgICBleGMxID0gRXhjZXB0aW9uKCdmb28nKQotICAgICAgICBleGMyID0gRXhjZXB0aW9uKCdiYXInKQotICAgICAgICBkZWYgY2xlYW51cDEoKToKLSAgICAgICAgICAgIHJhaXNlIGV4YzEKLQotICAgICAgICBkZWYgY2xlYW51cDIoKToKLSAgICAgICAgICAgIHJhaXNlIGV4YzIKLQotICAgICAgICB0ZXN0LmFkZENsZWFudXAoY2xlYW51cDEpCi0gICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKLQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRlc3QuZG9DbGVhbnVwcygpKQotCi0gICAgICAgICh0ZXN0MSwgKFR5cGUxLCBpbnN0YW5jZTEsIF8pKSwgKHRlc3QyLCAoVHlwZTIsIGluc3RhbmNlMiwgXykpID0gcmV2ZXJzZWQoTW9ja1Jlc3VsdC5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRlc3QxLCBUeXBlMSwgaW5zdGFuY2UxKSwgKHRlc3QsIEV4Y2VwdGlvbiwgZXhjMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHRlc3QyLCBUeXBlMiwgaW5zdGFuY2UyKSwgKHRlc3QsIEV4Y2VwdGlvbiwgZXhjMikpCi0KLSAgICBkZWYgdGVzdENsZWFudXBJblJ1bihzZWxmKToKLSAgICAgICAgYmxvd1VwID0gRmFsc2UKLSAgICAgICAgb3JkZXJpbmcgPSBbXQotCi0gICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdChUZXN0Q2FzZSk6Ci0gICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcCcpCi0gICAgICAgICAgICAgICAgaWYgYmxvd1VwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2ZvbycpCi0KLSAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKLSAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3Rlc3QnKQotCi0gICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bicpCi0KLSAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQotCi0gICAgICAgIGRlZiBjbGVhbnVwMSgpOgotICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMScpCi0gICAgICAgIGRlZiBjbGVhbnVwMigpOgotICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMicpCi0gICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKLSAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQotCi0gICAgICAgIGRlZiBzdWNjZXNzKHNvbWVfdGVzdCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvbWVfdGVzdCwgdGVzdCkKLSAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc3VjY2VzcycpCi0KLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0gICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzID0gc3VjY2VzcwotCi0gICAgICAgIHRlc3QucnVuKHJlc3VsdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGVhbnVwMicsICdjbGVhbnVwMScsICdzdWNjZXNzJ10pCi0KLSAgICAgICAgYmxvd1VwID0gVHJ1ZQotICAgICAgICBvcmRlcmluZyA9IFtdCi0gICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKLSAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxKQotICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIFsnc2V0VXAnLCAnY2xlYW51cDEnXSkKLQotCi1jbGFzcyBUZXN0X1Rlc3RQcm9ncmFtKFRlc3RDYXNlKToKLQotICAgICMgSG9ycmlibGUgd2hpdGUgYm94IHRlc3QKLSAgICBkZWYgdGVzdE5vRXhpdChzZWxmKToKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0KCkKLSAgICAgICAgdGVzdCA9IG9iamVjdCgpCi0KLSAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgotICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICAgIHJ1bm5lciA9IEZha2VSdW5uZXIoKQotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG9sZFBhcnNlQXJncyA9IFRlc3RQcm9ncmFtLnBhcnNlQXJncwotICAgICAgICAgICAgVGVzdFByb2dyYW0ucGFyc2VBcmdzID0gbGFtYmRhICphcmdzOiBOb25lCi0gICAgICAgICAgICBUZXN0UHJvZ3JhbS50ZXN0ID0gdGVzdAotCi0gICAgICAgICAgICBwcm9ncmFtID0gVGVzdFByb2dyYW0odGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UpCi0KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS5yZXN1bHQsIHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLnRlc3QsIHRlc3QpCi0KLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIFRlc3RQcm9ncmFtLnBhcnNlQXJncyA9IG9sZFBhcnNlQXJncwotICAgICAgICAgICAgZGVsIFRlc3RQcm9ncmFtLnRlc3QKLQotCi0gICAgY2xhc3MgRm9vQmFyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3RQYXNzKHNlbGYpOgotICAgICAgICAgICAgYXNzZXJ0IFRydWUKLSAgICAgICAgZGVmIHRlc3RGYWlsKHNlbGYpOgotICAgICAgICAgICAgYXNzZXJ0IEZhbHNlCi0KLSAgICBjbGFzcyBGb29CYXJMb2FkZXIodW5pdHRlc3QuVGVzdExvYWRlcik6Ci0gICAgICAgICIiIlRlc3QgbG9hZGVyIHRoYXQgcmV0dXJucyBhIHN1aXRlIGNvbnRhaW5pbmcgRm9vQmFyLiIiIgotICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKLSAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKLQotCi0gICAgZGVmIHRlc3RfTm9uRXhpdChzZWxmKToKLSAgICAgICAgcHJvZ3JhbSA9IHVuaXR0ZXN0Lm1haW4oZXhpdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndj1bImZvb2JhciJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPXVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihwcm9ncmFtLCAncmVzdWx0JykpCi0KLQotICAgIGRlZiB0ZXN0X0V4aXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgU3lzdGVtRXhpdCwKLSAgICAgICAgICAgIHVuaXR0ZXN0Lm1haW4sCi0gICAgICAgICAgICBhcmd2PVsiZm9vYmFyIl0sCi0gICAgICAgICAgICB0ZXN0UnVubmVyPXVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpKSwKLSAgICAgICAgICAgIGV4aXQ9VHJ1ZSwKLSAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKLQotCi0gICAgZGVmIHRlc3RfRXhpdEFzRGVmYXVsdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICBTeXN0ZW1FeGl0LAotICAgICAgICAgICAgdW5pdHRlc3QubWFpbiwKLSAgICAgICAgICAgIGFyZ3Y9WyJmb29iYXIiXSwKLSAgICAgICAgICAgIHRlc3RSdW5uZXI9dW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPWlvLlN0cmluZ0lPKCkpLAotICAgICAgICAgICAgdGVzdExvYWRlcj1zZWxmLkZvb0JhckxvYWRlcigpKQotCi0KLWNsYXNzIFRlc3RfVGV4dFRlc3RSdW5uZXIoVGVzdENhc2UpOgotICAgICIiIlRlc3RzIGZvciBUZXh0VGVzdFJ1bm5lci4iIiIKLQotICAgIGRlZiB0ZXN0X3dvcmtzX3dpdGhfcmVzdWx0X3dpdGhvdXRfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuKHNlbGYpOgotICAgICAgICBjbGFzcyBPbGRUZXh0UmVzdWx0KFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKToKLSAgICAgICAgICAgIHNlcGFyYXRvcjIgPSAnJwotICAgICAgICAgICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHN1cGVyKFJ1bm5lciwgc2VsZikuX19pbml0X18oaW8uU3RyaW5nSU8oKSkKLQotICAgICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBPbGRUZXh0UmVzdWx0KCkKLQotICAgICAgICBydW5uZXIgPSBSdW5uZXIoKQotICAgICAgICBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQotCi0gICAgZGVmIHRlc3Rfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuX2NhbGxlZChzZWxmKToKLSAgICAgICAgY2xhc3MgTG9nZ2luZ1RleHRSZXN1bHQoTG9nZ2luZ1Jlc3VsdCk6Ci0gICAgICAgICAgICBzZXBhcmF0b3IyID0gJycKLSAgICAgICAgICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY2xhc3MgTG9nZ2luZ1J1bm5lcih1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcik6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKLSAgICAgICAgICAgICAgICBzdXBlcihMb2dnaW5nUnVubmVyLCBzZWxmKS5fX2luaXRfXyhpby5TdHJpbmdJTygpKQotICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGV2ZW50cwotCi0gICAgICAgICAgICBkZWYgX21ha2VSZXN1bHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdUZXh0UmVzdWx0KHNlbGYuX2V2ZW50cykKLQotICAgICAgICBldmVudHMgPSBbXQotICAgICAgICBydW5uZXIgPSBMb2dnaW5nUnVubmVyKGV2ZW50cykKLSAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKLSAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdG9wVGVzdFJ1biddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLQogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyBNYWluCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0X1Rlc3RDYXNlLCBUZXN0X1Rlc3RMb2FkZXIsCi0gICAgICAgIFRlc3RfVGVzdFN1aXRlLCBUZXN0X1Rlc3RSZXN1bHQsIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZSwKLSAgICAgICAgVGVzdF9UZXN0U2tpcHBpbmcsIFRlc3RfQXNzZXJ0aW9ucywgVGVzdExvbmdNZXNzYWdlLAotICAgICAgICBUZXN0X1Rlc3RQcm9ncmFtLCBUZXN0Q2xlYW5VcCkKKyAgICAjIHVzZWQgYnkgcmVncnRlc3QKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCh1bml0dGVzdC50ZXN0LnN1aXRlKCkpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworZGVmIGxvYWRfdGVzdHMoKl8pOgorICAgICMgdXNlZCBieSB1bml0dGVzdAorICAgIHJldHVybiB1bml0dGVzdC50ZXN0LnN1aXRlKCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bnBhY2sucHkgYi9MaWIvdGVzdC90ZXN0X3VucGFjay5weQppbmRleCBiMTUzMWYzLi5iMWM0ODNkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VucGFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VucGFjay5weQpAQCAtNjIsMTQgKzYyLDE0IEBACiAgICAgPj4+IGEsIGIgPSB0CiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICAgLi4uCi0gICAgVmFsdWVFcnJvcjogdG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjaworICAgIFZhbHVlRXJyb3I6IHRvbyBtYW55IHZhbHVlcyB0byB1bnBhY2sgKGV4cGVjdGVkIDIpCiAKIFVucGFja2luZyB0dXBsZSBvZiB3cm9uZyBzaXplCiAKICAgICA+Pj4gYSwgYiA9IGwKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAuLi4KLSAgICBWYWx1ZUVycm9yOiB0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrCisgICAgVmFsdWVFcnJvcjogdG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjayAoZXhwZWN0ZWQgMikKIAogVW5wYWNraW5nIHNlcXVlbmNlIHRvbyBzaG9ydAogCkBAIC04Myw3ICs4Myw3IEBACiAgICAgPj4+IGEsIGIgPSBTZXEoKQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgIC4uLgotICAgIFZhbHVlRXJyb3I6IHRvbyBtYW55IHZhbHVlcyB0byB1bnBhY2sKKyAgICBWYWx1ZUVycm9yOiB0b28gbWFueSB2YWx1ZXMgdG8gdW5wYWNrIChleHBlY3RlZCAyKQogCiBVbnBhY2tpbmcgYSBzZXF1ZW5jZSB3aGVyZSB0aGUgdGVzdCBmb3IgdG9vIGxvbmcgcmFpc2VzIGEgZGlmZmVyZW50IGtpbmQgb2YKIGVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CmluZGV4IDRkMzUwOWEuLjdiYjhhMDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CkBAIC0xMSw3ICsxMSw2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQotaW1wb3J0IHdhcm5pbmdzCiAKIGRlZiBoZXhlc2NhcGUoY2hhcik6CiAgICAgIiIiRXNjYXBlIGNoYXIgYXMgUkZDIDIzOTYgc3BlY2lmaWVzIiIiCkBAIC04OCwxOSArODcsMTggQEAKIAogICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKICAgICAgICAgZmlsZV9udW0gPSBzZWxmLnJldHVybmVkX29iai5maWxlbm8oKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShmaWxlX251bSwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICJmaWxlbm8oKSBkaWQgbm90IHJldHVybiBhbiBpbnQiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmlsZV9udW0sIGludCwgImZpbGVubygpIGRpZCBub3QgcmV0dXJuIGFuIGludCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChmaWxlX251bSwgbGVuKHNlbGYudGV4dCkpLCBzZWxmLnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlYWRpbmcgb24gdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBmaWxlbm8oKSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgcmV0dXJuIHRoZSBleHBlY3RlZCB0ZXh0IikKIAogICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgotICAgICAgICAjIFRlc3QgY2xvc2UoKSBieSBjYWxsaW5nIGl0IGhlYXIgYW5kIHRoZW4gaGF2aW5nIGl0IGJlIGNhbGxlZCBhZ2FpbgorICAgICAgICAjIFRlc3QgY2xvc2UoKSBieSBjYWxsaW5nIGl0IGhlcmUgYW5kIHRoZW4gaGF2aW5nIGl0IGJlIGNhbGxlZCBhZ2FpbgogICAgICAgICAjIGJ5IHRoZSB0ZWFyRG93bigpIG1ldGhvZCBmb3IgdGhlIHRlc3QKICAgICAgICAgc2VsZi5yZXR1cm5lZF9vYmouY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uoc2VsZi5yZXR1cm5lZF9vYmouaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5yZXR1cm5lZF9vYmouaW5mbygpLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpCiAKICAgICBkZWYgdGVzdF9nZXR1cmwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZXR1cm5lZF9vYmouZ2V0dXJsKCksIHNlbGYucGF0aG5hbWUpCkBAIC0xNDMsOCArMTQxLDEwIEBACiAKICAgICBkZWYgZmFrZWh0dHAoc2VsZiwgZmFrZWRhdGEpOgogICAgICAgICBjbGFzcyBGYWtlU29ja2V0KGlvLkJ5dGVzSU8pOgorICAgICAgICAgICAgaW9fcmVmcyA9IDEKICAgICAgICAgICAgIGRlZiBzZW5kYWxsKHNlbGYsIHN0cik6IHBhc3MKICAgICAgICAgICAgIGRlZiBtYWtlZmlsZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICBzZWxmLmlvX3JlZnMgKz0gMQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAgICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBhbXQ9Tm9uZSk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6IHJldHVybiBiIiIKQEAgLTE1Miw2ICsxNTIsMTAgQEAKICAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBsZW5ndGg9Tm9uZSk6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6IHJldHVybiBiIiIKICAgICAgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkbGluZShzZWxmLCBsZW5ndGgpCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5pb19yZWZzIC09IDEKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlvX3JlZnMgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgaW8uQnl0ZXNJTy5jbG9zZShzZWxmKQogICAgICAgICBjbGFzcyBGYWtlSFRUUENvbm5lY3Rpb24oaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24pOgogICAgICAgICAgICAgZGVmIGNvbm5lY3Qoc2VsZik6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gRmFrZVNvY2tldChmYWtlZGF0YSkKQEAgLTE2MSw4ICsxNjUsOCBAQAogICAgIGRlZiB1bmZha2VodHRwKHNlbGYpOgogICAgICAgICBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiA9IHNlbGYuX2Nvbm5lY3Rpb25fY2xhc3MKIAotICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6Ci0gICAgICAgIHNlbGYuZmFrZWh0dHAoYiJIZWxsbyEiKQorICAgIGRlZiBjaGVja19yZWFkKHNlbGYsIHZlcik6CisgICAgICAgIHNlbGYuZmFrZWh0dHAoYiJIVFRQLyIgKyB2ZXIgKyBiIiAyMDAgT0tcclxuXHJcbkhlbGxvISIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gdXJsb3BlbigiaHR0cDovL3B5dGhvbi5vcmcvIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgYiJIZWxsbyEiKQpAQCAtMTc1LDEzICsxNzksMzIgQEAKICAgICBkZWYgdGVzdF91cmxfZnJhZ21lbnQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExNzAzOiBnZXR1cmwoKSBvbWl0cyBmcmFnbWVudHMgaW4gdGhlIG9yaWdpbmFsIFVSTC4KICAgICAgICAgdXJsID0gJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91cmxsaWIuaHRtbCNPSycKLSAgICAgICAgc2VsZi5mYWtlaHR0cChiJ0hlbGxvIScpCisgICAgICAgIHNlbGYuZmFrZWh0dHAoYiJIVFRQLzEuMSAyMDAgT0tcclxuXHJcbkhlbGxvISIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmdldHVybCgpLCB1cmwpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCisgICAgZGVmIHRlc3Rfd2lsbGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmZha2VodHRwKGIiSFRUUC8xLjEgMjAwIE9LXHJcblxyXG5IZWxsbyEiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwID0gdXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmZwLndpbGxfY2xvc2UpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQorCisgICAgZGVmIHRlc3RfcmVhZF8wXzkoc2VsZik6CisgICAgICAgICMgIjAuOSIgcmVzcG9uc2UgYWNjZXB0ZWQgKGJ1dCBub3QgInNpbXBsZSByZXNwb25zZXMiIHdpdGhvdXQKKyAgICAgICAgIyBhIHN0YXR1cyBsaW5lKQorICAgICAgICBzZWxmLmNoZWNrX3JlYWQoYiIwLjkiKQorCisgICAgZGVmIHRlc3RfcmVhZF8xXzAoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZChiIjEuMCIpCisKKyAgICBkZWYgdGVzdF9yZWFkXzFfMShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWFkKGIiMS4xIikKKwogICAgIGRlZiB0ZXN0X3JlYWRfYm9ndXMoc2VsZik6CiAgICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBJT0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgogICAgICAgICBzZWxmLmZha2VodHRwKGInJydIVFRQLzEuMSA0MDEgQXV0aGVudGljYXRpb24gUmVxdWlyZWQKQEAgLTIyMCw3ICsyNDMsNyBAQAogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X3VzZXJwYXNzX2ludXJsKHNlbGYpOgotICAgICAgICBzZWxmLmZha2VodHRwKGIiSGVsbG8hIikKKyAgICAgICAgc2VsZi5mYWtlaHR0cChiIkhUVFAvMS4wIDIwMCBPS1xyXG5cclxuSGVsbG8hIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnAgPSB1cmxvcGVuKCJodHRwOi8vdXNlcjpwYXNzQHB5dGhvbi5vcmcvIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZGxpbmUoKSwgYiJIZWxsbyEiKQpAQCAtMjYxLDggKzI4NCwxMiBAQAogICAgICAgICAgICAgZXhjZXB0OiBwYXNzCiAKICAgICBkZWYgY29uc3RydWN0TG9jYWxGaWxlVXJsKHNlbGYsIGZpbGVQYXRoKToKLSAgICAgICAgcmV0dXJuICJmaWxlOi8vJXMiICUgdXJsbGliLnJlcXVlc3QucGF0aG5hbWUydXJsKAotICAgICAgICAgICAgb3MucGF0aC5hYnNwYXRoKGZpbGVQYXRoKSkKKyAgICAgICAgZmlsZVBhdGggPSBvcy5wYXRoLmFic3BhdGgoZmlsZVBhdGgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZpbGVQYXRoLmVuY29kZSgidXRmOCIpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZVBhdGggaXMgbm90IGVuY29kYWJsZSB0byB1dGY4IikKKyAgICAgICAgcmV0dXJuICJmaWxlOi8vJXMiICUgdXJsbGliLnJlcXVlc3QucGF0aG5hbWUydXJsKGZpbGVQYXRoKQogCiAgICAgZGVmIGNyZWF0ZU5ld1RlbXBGaWxlKHNlbGYsIGRhdGE9YiIiKToKICAgICAgICAgIiIiQ3JlYXRlcyBhIG5ldyB0ZW1wb3JhcnkgZmlsZSBjb250YWluaW5nIHRoZSBzcGVjaWZpZWQgZGF0YSwKQEAgLTI4OCw5ICszMTUsOSBAQAogICAgICAgICAjIGEgaGVhZGVycyB2YWx1ZSBpcyByZXR1cm5lZC4KICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUoImZpbGU6JXMiICUgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0WzBdLCBzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UocmVzdWx0WzFdLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgImRpZCBub3QgZ2V0IGEgZW1haWwubWVzc2FnZS5NZXNzYWdlIGluc3RhbmNlICIKLSAgICAgICAgICAgICAgICAgICAgICJhcyBzZWNvbmQgcmV0dXJuZWQgdmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0WzFdLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBnZXQgYSBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UgaW5zdGFuY2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzIHNlY29uZCByZXR1cm5lZCB2YWx1ZSIpCiAKICAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBmaWxlbmFtZSBhcmd1bWVudCB3b3Jrcy4KQEAgLTMxMyw5ICszNDAsOSBAQAogICAgIGRlZiB0ZXN0X3JlcG9ydGhvb2soc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHJlcG9ydGhvb2sgd29ya3MuCiAgICAgICAgIGRlZiBob29rdGVzdGVyKGNvdW50LCBibG9ja19zaXplLCB0b3RhbF9zaXplLCBjb3VudF9ob2xkZXI9WzBdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGNvdW50LCBpbnQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYmxvY2tfc2l6ZSwgaW50KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHRvdGFsX3NpemUsIGludCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY291bnQsIGludCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShibG9ja19zaXplLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodG90YWxfc2l6ZSwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudCwgY291bnRfaG9sZGVyWzBdKQogICAgICAgICAgICAgY291bnRfaG9sZGVyWzBdID0gY291bnRfaG9sZGVyWzBdICsgMQogICAgICAgICBzZWNvbmRfdGVtcCA9ICIlcy4yIiAlIHN1cHBvcnQuVEVTVEZOCkBAIC01OTcsOCArNjI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiICUgcmVzdWx0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIHVybGxpYi5wYXJzZS51bnF1b3RlLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciksIHVybGxpYi5wYXJzZS51bnF1b3RlLCAoKSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBCeXRlc1dhcm5pbmcpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIEJ5dGVzV2FybmluZyksIHF1aWV0PVRydWUpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpLCB1cmxsaWIucGFyc2UudW5xdW90ZSwgYicnKQogCiAgICAgZGVmIHRlc3RfdW5xdW90aW5nX2JhZHBlcmNlbnQoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKaW5kZXggNjIyMjZiOC4uZTlmYjJmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQpAQCAtNCw2ICs0LDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc29ja2V0CitpbXBvcnQgYXJyYXkKIAogaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAjIFRoZSBwcm94eSBieXBhc3MgbWV0aG9kIGltcG9ydGVkIGJlbG93IGhhcyBsb2dpYyBzcGVjaWZpYyB0byB0aGUgT1NYCkBAIC0yNSwxMSArMjYsNiBAQAogICAgICAgICAjIFhYWCBOYW1lIGhhY2tpbmcgdG8gZ2V0IHRoaXMgdG8gd29yayBvbiBXaW5kb3dzLgogICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aCh1cmxsaWIucmVxdWVzdC5fX2ZpbGVfXykucmVwbGFjZSgnXFwnLCAnLycpCiAKLSAgICAgICAgIyBBbmQgbW9yZSBoYWNraW5nIHRvIGdldCBpdCB0byB3b3JrIG9uIE1hY09TLiBUaGlzIGFzc3VtZXMKLSAgICAgICAgIyB1cmxsaWIucGF0aG5hbWUydXJsIHdvcmtzLCB1bmZvcnR1bmF0ZWx5Li4uCi0gICAgICAgIGlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgICAgICAgICBmbmFtZSA9ICcvJyArIGZuYW1lLnJlcGxhY2UoJzonLCAnLycpCi0KICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICAgICAgZmlsZV91cmwgPSAiZmlsZTovLy8lcyIgJSBmbmFtZQogICAgICAgICBlbHNlOgpAQCAtMjk5LDcgKzI5NSw3IEBACiAgICAgZGVmIHNldF9kZWJ1Z2xldmVsKHNlbGYsIGxldmVsKToKICAgICAgICAgc2VsZi5sZXZlbCA9IGxldmVsCiAKLSAgICBkZWYgX3NldF90dW5uZWwoc2VsZiwgaG9zdCwgcG9ydD1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIGRlZiBzZXRfdHVubmVsKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgaGVhZGVycz1Ob25lKToKICAgICAgICAgc2VsZi5fdHVubmVsX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYuX3R1bm5lbF9wb3J0ID0gcG9ydAogICAgICAgICBpZiBoZWFkZXJzOgpAQCAtNTkyLDEyICs1ODgsMTIgQEAKICAgICAgICAgICAgICAgICAjICpfcmVxdWVzdAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGhhbmRsZXIsIG5hbWUpLCBjYWxsc1tpXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhcmdzKSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYXJnc1swXSwgUmVxdWVzdCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyAqX3Jlc3BvbnNlCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoaGFuZGxlciwgbmFtZSksIGNhbGxzW2ldKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFyZ3MpLCAyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGFyZ3NbMF0sIFJlcXVlc3QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhcmdzWzBdLCBSZXF1ZXN0KQogICAgICAgICAgICAgICAgICMgcmVzcG9uc2UgZnJvbSBvcGVuZXIub3BlbiBpcyBOb25lLCBiZWNhdXNlIHRoZXJlJ3Mgbm8KICAgICAgICAgICAgICAgICAjIGhhbmRsZXIgdGhhdCBkZWZpbmVzIGh0dHBfb3BlbiB0byBoYW5kbGUgaXQKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJnc1sxXSBpcyBOb25lIG9yCkBAIC02MDUsNiArNjAxLDEwIEBACiAKIAogZGVmIHNhbmVwYXRobmFtZTJ1cmwocGF0aCk6CisgICAgdHJ5OgorICAgICAgICBwYXRoLmVuY29kZSgidXRmOCIpCisgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInBhdGggaXMgbm90IGVuY29kYWJsZSB0byB1dGY4IikKICAgICB1cmxwYXRoID0gdXJsbGliLnJlcXVlc3QucGF0aG5hbWUydXJsKHBhdGgpCiAgICAgaWYgb3MubmFtZSA9PSAibnQiIGFuZCB1cmxwYXRoLnN0YXJ0c3dpdGgoIi8vLyIpOgogICAgICAgICB1cmxwYXRoID0gdXJscGF0aFsyOl0KQEAgLTc0NSwxMSArNzQ1LDExIEBACiAgICAgICAgICMgZmlsZTovLy9ibGFoLnR4dCAoYSBmaWxlKQogICAgICAgICAjIGZpbGU6Ly9mdHAuZXhhbXBsZS5jb20vYmxhaC50eHQgKGFuIGZ0cCBVUkwpCiAgICAgICAgIGZvciB1cmwsIGZ0cCBpbiBbCi0gICAgICAgICAgICAoImZpbGU6Ly9mdHAuZXhhbXBsZS5jb20vL2Zvby50eHQiLCBUcnVlKSwKKyAgICAgICAgICAgICgiZmlsZTovL2Z0cC5leGFtcGxlLmNvbS8vZm9vLnR4dCIsIEZhbHNlKSwKICAgICAgICAgICAgICgiZmlsZTovL2Z0cC5leGFtcGxlLmNvbS8vL2Zvby50eHQiLCBGYWxzZSksCiAjIFhYWFggYnVnOiBmYWlscyB3aXRoIE9TRXJyb3IsIHNob3VsZCBiZSBVUkxFcnJvcgogICAgICAgICAgICAgKCJmaWxlOi8vZnRwLmV4YW1wbGUuY29tL2Zvby50eHQiLCBGYWxzZSksCi0gICAgICAgICAgICAoImZpbGU6Ly9zb21laG9zdC8vZm9vL3NvbWV0aGluZy50eHQiLCBUcnVlKSwKKyAgICAgICAgICAgICgiZmlsZTovL3NvbWVob3N0Ly9mb28vc29tZXRoaW5nLnR4dCIsIEZhbHNlKSwKICAgICAgICAgICAgICgiZmlsZTovL2xvY2FsaG9zdC8vZm9vL3NvbWV0aGluZy50eHQiLCBGYWxzZSksCiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCkBAIC03NjksNyArNzY5LDcgQEAKICAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCiAKICAgICAgICAgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS8iCi0gICAgICAgIGZvciBtZXRob2QsIGRhdGEgaW4gWygiR0VUIiwgTm9uZSksICgiUE9TVCIsICJibGFoIildOgorICAgICAgICBmb3IgbWV0aG9kLCBkYXRhIGluIFsoIkdFVCIsIE5vbmUpLCAoIlBPU1QiLCBiImJsYWgiKV06CiAgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCwgZGF0YSwgeyJGb28iOiAiYmFyIn0pCiAgICAgICAgICAgICByZXEudGltZW91dCA9IE5vbmUKICAgICAgICAgICAgIHJlcS5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiU3BhbSIsICJlZ2dzIikKQEAgLTc5NywxNSArNzk3LDE5IEBACiAgICAgICAgIGh0dHAucmFpc2Vfb25fZW5kaGVhZGVycyA9IFRydWUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yLCBoLmRvX29wZW4sIGh0dHAsIHJlcSkKIAorICAgICAgICAjIENoZWNrIGZvciBUeXBlRXJyb3Igb24gUE9TVCBkYXRhIHdoaWNoIGlzIHN0ci4KKyAgICAgICAgcmVxID0gUmVxdWVzdCgiaHR0cDovL2V4YW1wbGUuY29tLyIsImJhZHBvc3QiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGguZG9fcmVxdWVzdF8sIHJlcSkKKwogICAgICAgICAjIGNoZWNrIGFkZGluZyBvZiBzdGFuZGFyZCBoZWFkZXJzCiAgICAgICAgIG8uYWRkaGVhZGVycyA9IFsoIlNwYW0iLCAiZWdncyIpXQotICAgICAgICBmb3IgZGF0YSBpbiAiIiwgTm9uZTogICMgUE9TVCwgR0VUCisgICAgICAgIGZvciBkYXRhIGluIGIiIiwgTm9uZTogICMgUE9TVCwgR0VUCiAgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIiwgZGF0YSkKICAgICAgICAgICAgIHIgPSBNb2NrUmVzcG9uc2UoMjAwLCAiT0siLCB7fSwgIiIpCiAgICAgICAgICAgICBuZXdyZXEgPSBoLmRvX3JlcXVlc3RfKHJlcSkKICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZTogICMgR0VUCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJDb250ZW50LWxlbmd0aCIgbm90IGluIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoIkNvbnRlbnQtdHlwZSIgbm90IGluIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHJlcS51bnJlZGlyZWN0ZWRfaGRycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LXR5cGUiLCByZXEudW5yZWRpcmVjdGVkX2hkcnMpCiAgICAgICAgICAgICBlbHNlOiAgIyBQT1NUCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0sICIwIikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siQ29udGVudC10eXBlIl0sCkBAIC04MjUsNiArODI5LDQ4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCAiYmF6IikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVxLnVucmVkaXJlY3RlZF9oZHJzWyJTcGFtIl0sICJmb28iKQogCisgICAgICAgICMgQ2hlY2sgaXRlcmFibGUgYm9keSBzdXBwb3J0CisgICAgICAgIGRlZiBpdGVyYWJsZV9ib2R5KCk6CisgICAgICAgICAgICB5aWVsZCBiIm9uZSIKKyAgICAgICAgICAgIHlpZWxkIGIidHdvIgorICAgICAgICAgICAgeWllbGQgYiJ0aHJlZSIKKworICAgICAgICBmb3IgaGVhZGVycyBpbiB7fSwgeyJDb250ZW50LUxlbmd0aCI6IDExfToKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBpdGVyYWJsZV9ib2R5KCksIGhlYWRlcnMpCisgICAgICAgICAgICBpZiBub3QgaGVhZGVyczoKKyAgICAgICAgICAgICAgICAjIEhhdmluZyBhbiBpdGVyYWJsZSBib2R5IHdpdGhvdXQgYSBDb250ZW50LUxlbmd0aCBzaG91bGQKKyAgICAgICAgICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGguZG9fcmVxdWVzdF8sIHJlcSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCisKKyAgICAgICAgIyBBIGZpbGUgb2JqZWN0LgorICAgICAgICAjIFRlc3Qgb25seSBDb250ZW50LUxlbmd0aCBhdHRyaWJ1dGUgb2YgcmVxdWVzdC4KKworICAgICAgICBmaWxlX29iaiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBmaWxlX29iai53cml0ZShiIlNvbWV0aGluZ1xuU29tZXRoaW5nXG5Tb21ldGhpbmdcbiIpCisKKyAgICAgICAgZm9yIGhlYWRlcnMgaW4ge30sIHsiQ29udGVudC1MZW5ndGgiOiAzMH06CisgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZXhhbXBsZS5jb20vIiwgZmlsZV9vYmosIGhlYWRlcnMpCisgICAgICAgICAgICBpZiBub3QgaGVhZGVyczoKKyAgICAgICAgICAgICAgICAjIEhhdmluZyBhbiBpdGVyYWJsZSBib2R5IHdpdGhvdXQgYSBDb250ZW50LUxlbmd0aCBzaG91bGQKKyAgICAgICAgICAgICAgICAjIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGguZG9fcmVxdWVzdF8sIHJlcSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3cmVxID0gaC5kb19yZXF1ZXN0XyhyZXEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobmV3cmVxLmdldF9oZWFkZXIoJ0NvbnRlbnQtbGVuZ3RoJykpLDMwKQorCisgICAgICAgIGZpbGVfb2JqLmNsb3NlKCkKKworICAgICAgICAjIGFycmF5LmFycmF5IEl0ZXJhYmxlIC0gQ29udGVudCBMZW5ndGggaXMgY2FsY3VsYXRlZAorCisgICAgICAgIGl0ZXJhYmxlX2FycmF5ID0gYXJyYXkuYXJyYXkoIkkiLFsxLDIsMyw0XSkKKworICAgICAgICBmb3IgaGVhZGVycyBpbiB7fSwgeyJDb250ZW50LUxlbmd0aCI6IDE2fToKKyAgICAgICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly9leGFtcGxlLmNvbS8iLCBpdGVyYWJsZV9hcnJheSwgaGVhZGVycykKKyAgICAgICAgICAgIG5ld3JlcSA9IGguZG9fcmVxdWVzdF8ocmVxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobmV3cmVxLmdldF9oZWFkZXIoJ0NvbnRlbnQtbGVuZ3RoJykpLDE2KQorCiAgICAgZGVmIHRlc3RfaHR0cF9kb3VibGVzbGFzaChzZWxmKToKICAgICAgICAgIyBDaGVja3MgdGhlIHByZXNlbmNlIG9mIGFueSB1bm5lY2Vzc2FyeSBkb3VibGUgc2xhc2ggaW4gdXJsIGRvZXMgbm90CiAgICAgICAgICMgYnJlYWsgYW55dGhpbmcuIFByZXZpb3VzbHksIGEgZG91YmxlIHNsYXNoIGRpcmVjdGx5IGFmdGVyIHRoZSBob3N0CkBAIC04MzIsNyArODc4LDcgQEAKICAgICAgICAgaCA9IHVybGxpYi5yZXF1ZXN0LkFic3RyYWN0SFRUUEhhbmRsZXIoKQogICAgICAgICBvID0gaC5wYXJlbnQgPSBNb2NrT3BlbmVyKCkKIAotICAgICAgICBkYXRhID0gIiIKKyAgICAgICAgZGF0YSA9IGIiIgogICAgICAgICBkc191cmxzID0gWwogICAgICAgICAgICAgImh0dHA6Ly9leGFtcGxlLmNvbS9mb28vYmFyL2Jhei5odG1sIiwKICAgICAgICAgICAgICJodHRwOi8vZXhhbXBsZS5jb20vL2Zvby9iYXIvYmF6Lmh0bWwiLApAQCAtOTQ1LDEzICs5OTEsMTMgQEAKICAgICAgICAgICAgICAgICAjIG5vdyBpdCdzIGEgR0VULCB0aGVyZSBzaG91bGQgbm90IGJlIGhlYWRlcnMgcmVnYXJkaW5nIGNvbnRlbnQKICAgICAgICAgICAgICAgICAjIChwb3NzaWJseSBkcmFnZ2VkIGZyb20gYmVmb3JlIGJlaW5nIGEgUE9TVCkKICAgICAgICAgICAgICAgICBoZWFkZXJzID0gW3gubG93ZXIoKSBmb3IgeCBpbiBvLnJlcS5oZWFkZXJzXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY29udGVudC1sZW5ndGgiIG5vdCBpbiBoZWFkZXJzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiY29udGVudC10eXBlIiBub3QgaW4gaGVhZGVycykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJjb250ZW50LWxlbmd0aCIsIGhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiY29udGVudC10eXBlIiwgaGVhZGVycykKIAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoby5yZXEuaGVhZGVyc1siTm9uc2Vuc2UiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWtpbmc9d2l0aGhvbGQiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiU3BhbSIgbm90IGluIG8ucmVxLmhlYWRlcnMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJTcGFtIiBub3QgaW4gby5yZXEudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLmhlYWRlcnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiU3BhbSIsIG8ucmVxLnVucmVkaXJlY3RlZF9oZHJzKQogCiAgICAgICAgICMgbG9vcCBkZXRlY3Rpb24KICAgICAgICAgcmVxID0gUmVxdWVzdChmcm9tX3VybCkKQEAgLTExMDgsMTAgKzExNTQsMTAgQEAKICAgICAgICAgIyBWZXJpZnkgUHJveHktQXV0aG9yaXphdGlvbiBnZXRzIHR1bm5lbGVkIHRvIHJlcXVlc3QuCiAgICAgICAgICMgaHR0cHNjb25uIHJlcV9oZWFkZXJzIGRvIG5vdCBoYXZlIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGhlYWRlciBidXQKICAgICAgICAgIyB0aGUgcmVxIHdpbGwgaGF2ZS4KLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoIlByb3h5LUF1dGhvcml6YXRpb24iLCJGb29CYXIiKSBpbgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCgiUHJveHktQXV0aG9yaXphdGlvbiIsIkZvb0JhciIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBzX2hhbmRsZXIuaHR0cGNvbm4ucmVxX2hlYWRlcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoIlVzZXItQWdlbnQiLCJHcmFpbCIpIGluCi0gICAgICAgICAgICAgICAgICAgICAgICBodHRwc19oYW5kbGVyLmh0dHBjb25uLnJlcV9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEluKCgiVXNlci1BZ2VudCIsIkdyYWlsIiksCisgICAgICAgICAgICAgICAgICAgICAgaHR0cHNfaGFuZGxlci5odHRwY29ubi5yZXFfaGVhZGVycykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVxLl90dW5uZWxfaG9zdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hvc3QoKSwgInByb3h5LmV4YW1wbGUuY29tOjMxMjgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfaGVhZGVyKCJQcm94eS1hdXRob3JpemF0aW9uIiksIkZvb0JhciIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggZmJkMjFkMi4uOWUxY2U1YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtMSwxMyArMSwyMSBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKK2ltcG9ydCBvcwogaW1wb3J0IGVtYWlsCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKIGltcG9ydCBodHRwLnNlcnZlcgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaGFzaGxpYgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Cit0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCisKKworaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnbG9jYWxob3N0JworQ0VSVF9sb2NhbGhvc3QgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2tleWNlcnQucGVtJykKKyMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnZmFrZWhvc3RuYW1lJworQ0VSVF9mYWtlaG9zdG5hbWUgPSBvcy5wYXRoLmpvaW4oaGVyZSwgJ2tleWNlcnQyLnBlbScpCiAKICMgTG9vcGJhY2sgaHR0cCBzZXJ2ZXIgaW5mcmFzdHJ1Y3R1cmUKIApAQCAtMjMsNyArMzEsNyBAQAogCiAgICAgICAgICMgU2V0IHRoZSB0aW1lb3V0IG9mIG91ciBsaXN0ZW5pbmcgc29ja2V0IHJlYWxseSBsb3cgc28KICAgICAgICAgIyB0aGF0IHdlIGNhbiBzdG9wIHRoZSBzZXJ2ZXIgZWFzaWx5LgotICAgICAgICBzZWxmLnNvY2tldC5zZXR0aW1lb3V0KDEuMCkKKyAgICAgICAgc2VsZi5zb2NrZXQuc2V0dGltZW91dCgwLjEpCiAKICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CiAgICAgICAgICIiIkhUVFBTZXJ2ZXIgbWV0aG9kLCBvdmVycmlkZGVuLiIiIgpAQCAtNTgsNiArNjYsNyBAQAogICAgICAgICBzZWxmLl9zdG9wX3NlcnZlciA9IFRydWUKIAogICAgICAgICBzZWxmLmpvaW4oKQorICAgICAgICBzZWxmLmh0dHBkLnNlcnZlcl9jbG9zZSgpCiAKICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICBzZWxmLnJlYWR5LnNldCgpCkBAIC0yMjksNiArMjM4LDcgQEAKICAgICBSRUFMTSA9ICJUZXN0UmVhbG0iCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKFByb3h5QXV0aFRlc3RzLCBzZWxmKS5zZXRVcCgpCiAgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlciA9IERpZ2VzdEF1dGhIYW5kbGVyKCkKICAgICAgICAgc2VsZi5kaWdlc3RfYXV0aF9oYW5kbGVyLnNldF91c2Vycyh7c2VsZi5VU0VSOiBzZWxmLlBBU1NXRH0pCiAgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfcmVhbG0oc2VsZi5SRUFMTSkKQEAgLTI0Niw2ICsyNTYsNyBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKKyAgICAgICAgc3VwZXIoUHJveHlBdXRoVGVzdHMsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiB0ZXN0X3Byb3h5X3dpdGhfYmFkX3Bhc3N3b3JkX3JhaXNlc19odHRwZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYucHJveHlfZGlnZXN0X2hhbmRsZXIuYWRkX3Bhc3N3b3JkKHNlbGYuUkVBTE0sIHNlbGYuVVJMLApAQCAtMzQwLDE1ICszNTEsMTcgQEAKICAgICAiIiIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoVGVzdFVybG9wZW4sIHNlbGYpLnNldFVwKCkKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIHN1cGVyKFRlc3RVcmxvcGVuLCBzZWxmKS50ZWFyRG93bigpCiAKLSAgICBkZWYgdXJsb3BlbihzZWxmLCB1cmwsIGRhdGE9Tm9uZSk6CisgICAgZGVmIHVybG9wZW4oc2VsZiwgdXJsLCBkYXRhPU5vbmUsICoqa3dhcmdzKToKICAgICAgICAgbCA9IFtdCi0gICAgICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCwgZGF0YSkKKyAgICAgICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsLCBkYXRhLCAqKmt3YXJncykKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBFeGVyY2lzZSB2YXJpb3VzIG1ldGhvZHMKICAgICAgICAgICAgIGwuZXh0ZW5kKGYucmVhZGxpbmVzKDIwMCkpCkBAIC0zNzEsNiArMzg0LDE3IEBACiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIAorICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIodXJsbGliLnJlcXVlc3QsICdIVFRQU0hhbmRsZXInKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3NzbCBzdXBwb3J0IHJlcXVpcmVkJykKKyAgICAgICAgZnJvbSB0ZXN0LnNzbF9zZXJ2ZXJzIGltcG9ydCBtYWtlX2h0dHBzX3NlcnZlcgorICAgICAgICBpZiByZXNwb25zZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJlc3BvbnNlcyA9IFsoMjAwLCBbXSwgYiJ3ZSBjYXJlIGEgYml0IildCisgICAgICAgIGhhbmRsZXIgPSBHZXRSZXF1ZXN0SGFuZGxlcihyZXNwb25zZXMpCisgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIpCisgICAgICAgIGhhbmRsZXIucG9ydCA9IHNlcnZlci5wb3J0CisgICAgICAgIHJldHVybiBoYW5kbGVyCisKICAgICBkZWYgdGVzdF9yZWRpcmVjdGlvbihzZWxmKToKICAgICAgICAgZXhwZWN0ZWRfcmVzcG9uc2UgPSBiIldlIGdvdCBoZXJlLi4uIgogICAgICAgICByZXNwb25zZXMgPSBbCkBAIC00MjgsNiArNDUyLDI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfcmVzcG9uc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5yZXF1ZXN0cywgWyIvYml6YXJyZSIsIGIiZ2V0PXdpdGhfZmVlbGluZyJdKQogCisgICAgZGVmIHRlc3RfaHR0cHMoc2VsZik6CisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X2h0dHBzX3NlcnZlcigpCisgICAgICAgIGRhdGEgPSBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIid2UgY2FyZSBhIGJpdCIpCisKKyAgICBkZWYgdGVzdF9odHRwc193aXRoX2NhZmlsZShzZWxmKToKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KQorICAgICAgICBpbXBvcnQgc3NsCisgICAgICAgICMgR29vZCBjZXJ0CisgICAgICAgIGRhdGEgPSBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1DRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiIndlIGNhcmUgYSBiaXQiKQorICAgICAgICAjIEJhZCBjZXJ0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPUNFUlRfZmFrZWhvc3RuYW1lKQorICAgICAgICAjIEdvb2QgY2VydCwgYnV0IG1pc21hdGNoaW5nIGhvc3RuYW1lCisgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X2h0dHBzX3NlcnZlcihjZXJ0ZmlsZT1DRVJUX2Zha2Vob3N0bmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuQ2VydGlmaWNhdGVFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1DRVJUX2Zha2Vob3N0bmFtZSkKKwogICAgIGRlZiB0ZXN0X3NlbmRpbmdfaGVhZGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfc2VydmVyKCkKICAgICAgICAgcmVxID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL2xvY2FsaG9zdDolcy8iICUgaGFuZGxlci5wb3J0LApAQCAtNDUyLDkgKzQ5OCw5IEBACiAgICAgICAgICAgICBvcGVuX3VybCA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oCiAgICAgICAgICAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0KQogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGluZm9fb2JqLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImVtYWlsLm1lc3NhZ2UuTWVzc2FnZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mb19vYmosIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvX29iai5nZXRfY29udGVudF9zdWJ0eXBlKCksICJwbGFpbiIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNlcnZlci5zdG9wKCkKQEAgLTUwOSw2ICs1NTUsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5kZXgsIGxlbihsaW5lc1tpbmRleF0pLCBsZW4obGluZSkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4ICsgMSwgbGVuKGxpbmVzKSkKIAorCitAc3VwcG9ydC5yZWFwX3RocmVhZHMKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQcm94eUF1dGhUZXN0cywgVGVzdFVybG9wZW4pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCBlNmM0ZWMxLi43Y2E2MTE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC02LDEwICs2LDEzIEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHN5cwogaW1wb3J0IHVybGxpYi5lcnJvcgogaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiBpbXBvcnQgc3lzCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKIAogVElNRU9VVCA9IDYwICAjIHNlY29uZHMKIApAQCAtNzgsOCArODEsNiBAQAogY2xhc3MgQ2xvc2VTb2NrZXRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgotICAgICAgICBpbXBvcnQgc29ja2V0LCBodHRwLmNsaWVudCwgZ2MKLQogICAgICAgICAjIGNhbGxpbmcgLmNsb3NlKCkgb24gdXJsbGliMidzIHJlc3BvbnNlIG9iamVjdHMgc2hvdWxkIGNsb3NlIHRoZQogICAgICAgICAjIHVuZGVybHlpbmcgc29ja2V0CiAKQEAgLTE3NCw3ICsxNzUsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXF1ZXN0LmdldF9oZWFkZXIoJ1VzZXItYWdlbnQnKSwnVGVzdC1BZ2VudCcpCiAKICAgICBkZWYgX3Rlc3RfdXJscyhzZWxmLCB1cmxzLCBoYW5kbGVycywgcmV0cnk9VHJ1ZSk6Ci0gICAgICAgIGltcG9ydCBzb2NrZXQKICAgICAgICAgaW1wb3J0IHRpbWUKICAgICAgICAgaW1wb3J0IGxvZ2dpbmcKICAgICAgICAgZGVidWcgPSBsb2dnaW5nLmdldExvZ2dlcigidGVzdF91cmxsaWIyIikuZGVidWcKQEAgLTE4OCw2ICsxODgsNyBAQAogICAgICAgICAgICAgICAgIHVybCwgcmVxLCBleHBlY3RlZF9lcnIgPSB1cmwKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVxID0gZXhwZWN0ZWRfZXJyID0gTm9uZQorCiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICAgICAgZGVidWcodXJsKQogICAgICAgICAgICAgICAgIHRyeToKQEAgLTE5Nyw3ICsxOTgsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBleHBlY3RlZF9lcnI6CiAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAoIkRpZG4ndCBnZXQgZXhwZWN0ZWQgZXJyb3IocykgJXMgZm9yICVzICVzLCBnb3QgJXM6ICVzIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX2VyciwgdXJsLCByZXEsIHR5cGUoZXJyKSwgZXJyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyKSwgbXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyLCBtc2cpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKQEAgLTI2Myw3ICsyNjQsNyBAQAogICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsLCB0aW1lb3V0PTEyMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpLCAxMjApCiAKLSAgICBGVFBfSE9TVCA9ICJmdHA6Ly9mdHAubWlycm9yLm5sL3B1Yi9taXJyb3IvZ251LyIKKyAgICBGVFBfSE9TVCA9ICJmdHA6Ly9mdHAubWlycm9yLm5sL3B1Yi9nbnUvIgogCiAgICAgZGVmIHRlc3RfZnRwX2Jhc2ljKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkgaXMgTm9uZSkKQEAgLTI5NywxMyArMjk4LDM1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAicmVxdWlyZXMgU1NMIHN1cHBvcnQiKQorY2xhc3MgSFRUUFNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9zbmkoc2VsZik6CisgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgZGlzYWJsZWQgLSB0ZXN0IHNlcnZlciBuZWVkZWQiKQorICAgICAgICAjIENoZWNrcyB0aGF0IFNlcnZlciBOYW1lIEluZGljYXRpb24gd29ya3MsIGlmIHN1cHBvcnRlZCBieSB0aGUKKyAgICAgICAgIyBPcGVuU1NMIGxpbmtlZCB0by4KKyAgICAgICAgIyBUaGUgc3NsIG1vZHVsZSBpdHNlbGYgZG9lc24ndCBoYXZlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIFNOSSwKKyAgICAgICAgIyBzbyB3ZSByZWx5IG9uIGEgdGhpcmQtcGFydHkgdGVzdCBzaXRlLgorICAgICAgICBleHBlY3Rfc25pID0gc3NsLkhBU19TTkkKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgiWFhYIik6CisgICAgICAgICAgICB1ID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiWFhYIikKKyAgICAgICAgICAgIGNvbnRlbnRzID0gdS5yZWFkYWxsKCkKKyAgICAgICAgICAgIGlmIGV4cGVjdF9zbmk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkdyZWF0IiwgY29udGVudHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIkdyZWF0IiwgY29udGVudHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQXV0aFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJOZXR3b3JrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbG9zZVNvY2tldFRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyTmV0d29ya1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIENsb3NlU29ja2V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lb3V0VGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGlibmV0LnB5IGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKaW5kZXggYmFjMjA0OS4uMzJlZmIyYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTEyLDggKzEyLDkgQEAKIAogCiBjbGFzcyBVUkxUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBYWFggdGhpcyB0ZXN0IGRvZXNuJ3Qgc2VlbSB0byB0ZXN0IGFueXRoaW5nIHVzZWZ1bC4KIAotICAgIFRJTUVPVVQgPSAxMC4wCisgICAgVElNRU9VVCA9IDMwLjAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KHNlbGYuVElNRU9VVCkKQEAgLTI0LDcgKzI1LDcgQEAKICAgICBkZWYgdGVzdFVSTHJlYWQoc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInd3dy5weXRob24ub3JnIik6CiAgICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCi0gICAgICAgIHggPSBmLnJlYWQoKQorICAgICAgICAgICAgeCA9IGYucmVhZCgpCiAKIGNsYXNzIHVybG9wZW5OZXR3b3JrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIHVybGxpYi5yZXFlc3QudXJsb3BlbiB1c2luZyB0aGUgbmV0d29yay4KQEAgLTQzLDggKzQ0LDEwIEBACiAKICAgICBkZWYgdXJsb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICByZXNvdXJjZSA9IGFyZ3NbMF0KLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZXNvdXJjZSk6Ci0gICAgICAgICAgICByZXR1cm4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGNtID0gc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQocmVzb3VyY2UpCisgICAgICAgIGNtLl9fZW50ZXJfXygpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbS5fX2V4aXRfXywgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgcmV0dXJuIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oKmFyZ3MsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgU2ltcGxlIHRlc3QgZXhwZWN0ZWQgdG8gcGFzcy4KQEAgLTYyLDEwICs2NSwxMCBAQAogICAgICAgICAjIFRlc3QgYm90aCByZWFkbGluZSBhbmQgcmVhZGxpbmVzLgogICAgICAgICBvcGVuX3VybCA9IHNlbGYudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lKCksIGJ5dGVzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUgZGlkIG5vdCByZXR1cm4gYnl0ZXMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmVzKCksIGxpc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZXMgZGlkIG5vdCByZXR1cm4gYSBsaXN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZSgpLCBieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVhZGxpbmUgZGlkIG5vdCByZXR1cm4gYSBzdHJpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9wZW5fdXJsLnJlYWRsaW5lcygpLCBsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZXMgZGlkIG5vdCByZXR1cm4gYSBsaXN0IikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKIApAQCAtNzYsOSArNzksOSBAQAogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9wZW5fdXJsLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGluZm9fb2JqLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgImVtYWlsLm1lc3NhZ2UuTWVzc2FnZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mb19vYmosIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHJldHVybmVkIGJ5ICdpbmZvJyBpcyBub3QgYW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZSBvZiBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvX29iai5nZXRfY29udGVudF9zdWJ0eXBlKCksICJodG1sIikKIAogICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKQEAgLTEzNSw4ICsxMzgsMTAgQEAKIAogICAgIGRlZiB1cmxyZXRyaWV2ZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHJlc291cmNlID0gYXJnc1swXQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHJlc291cmNlKToKLSAgICAgICAgICAgIHJldHVybiB1cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZSgqYXJncykKKyAgICAgICAgY20gPSBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChyZXNvdXJjZSkKKyAgICAgICAgY20uX19lbnRlcl9fKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNtLl9fZXhpdF9fLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICByZXR1cm4gdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUoKmFyZ3MpCiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKICAgICAgICAgIyBUZXN0IGJhc2ljIGZ1bmN0aW9uYWxpdHkuCkBAIC0xNjgsOCArMTczLDggQEAKICAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCiAgICAgICAgIGZpbGVfbG9jYXRpb24sIGhlYWRlciA9IHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKQogICAgICAgICBvcy51bmxpbmsoZmlsZV9sb2NhdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoaGVhZGVyLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgImhlYWRlciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZW1haWwubWVzc2FnZS5NZXNzYWdlIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGhlYWRlciwgZW1haWwubWVzc2FnZS5NZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlciBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZW1haWwubWVzc2FnZS5NZXNzYWdlIikKIAogICAgIGRlZiB0ZXN0X2RhdGFfaGVhZGVyKHNlbGYpOgogICAgICAgICBsb2dvID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvbG9nb3MvcHl0aG9uLWxvZ28tbWFzdGVyLXYzLVRNLnBuZyIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CmluZGV4IDI1MmViMTMuLmM4ZDU3MmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CkBAIC0yNCw2ICsyNCwxNyBAQAogICAgICgiJmE9YiIsIFsoJ2EnLCAnYicpXSksCiAgICAgKCJhPWErYiZiPWIrYyIsIFsoJ2EnLCAnYSBiJyksICgnYicsICdiIGMnKV0pLAogICAgICgiYT0xJmE9MiIsIFsoJ2EnLCAnMScpLCAoJ2EnLCAnMicpXSksCisgICAgKGIiIiwgW10pLAorICAgIChiIiYiLCBbXSksCisgICAgKGIiJiYiLCBbXSksCisgICAgKGIiPSIsIFsoYicnLCBiJycpXSksCisgICAgKGIiPWEiLCBbKGInJywgYidhJyldKSwKKyAgICAoYiJhIiwgWyhiJ2EnLCBiJycpXSksCisgICAgKGIiYT0iLCBbKGInYScsIGInJyldKSwKKyAgICAoYiJhPSIsIFsoYidhJywgYicnKV0pLAorICAgIChiIiZhPWIiLCBbKGInYScsIGInYicpXSksCisgICAgKGIiYT1hK2ImYj1iK2MiLCBbKGInYScsIGInYSBiJyksIChiJ2InLCBiJ2IgYycpXSksCisgICAgKGIiYT0xJmE9MiIsIFsoYidhJywgYicxJyksIChiJ2EnLCBiJzInKV0pLAogXQogCiBjbGFzcyBVcmxQYXJzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg2LDcgKzk3LDcgQEAKIAogCiAgICAgZGVmIHRlc3Rfcm91bmR0cmlwcyhzZWxmKToKLSAgICAgICAgdGVzdGNhc2VzID0gWworICAgICAgICBzdHJfY2FzZXMgPSBbCiAgICAgICAgICAgICAoJ2ZpbGU6Ly8vdG1wL2p1bmsudHh0JywKICAgICAgICAgICAgICAoJ2ZpbGUnLCAnJywgJy90bXAvanVuay50eHQnLCAnJywgJycsICcnKSwKICAgICAgICAgICAgICAoJ2ZpbGUnLCAnJywgJy90bXAvanVuay50eHQnLCAnJywgJycpKSwKQEAgLTExMCwxNiArMTIxLDIxIEBACiAgICAgICAgICAgICAoJ2dpdCtzc2gnLCAnZ2l0QGdpdGh1Yi5jb20nLCcvdXNlci9wcm9qZWN0LmdpdCcsCiAgICAgICAgICAgICAgJycsJycsJycpLAogICAgICAgICAgICAgKCdnaXQrc3NoJywgJ2dpdEBnaXRodWIuY29tJywnL3VzZXIvcHJvamVjdC5naXQnLAotICAgICAgICAgICAgICcnLCAnJykpCisgICAgICAgICAgICAgJycsICcnKSksCiAgICAgICAgICAgICBdCi0gICAgICAgIGZvciB1cmwsIHBhcnNlZCwgc3BsaXQgaW4gdGVzdGNhc2VzOgorICAgICAgICBkZWYgX2VuY29kZSh0KToKKyAgICAgICAgICAgIHJldHVybiAodFswXS5lbmNvZGUoJ2FzY2lpJyksCisgICAgICAgICAgICAgICAgICAgIHR1cGxlKHguZW5jb2RlKCdhc2NpaScpIGZvciB4IGluIHRbMV0pLAorICAgICAgICAgICAgICAgICAgICB0dXBsZSh4LmVuY29kZSgnYXNjaWknKSBmb3IgeCBpbiB0WzJdKSkKKyAgICAgICAgYnl0ZXNfY2FzZXMgPSBbX2VuY29kZSh4KSBmb3IgeCBpbiBzdHJfY2FzZXNdCisgICAgICAgIGZvciB1cmwsIHBhcnNlZCwgc3BsaXQgaW4gc3RyX2Nhc2VzICsgYnl0ZXNfY2FzZXM6CiAgICAgICAgICAgICBzZWxmLmNoZWNrUm91bmR0cmlwcyh1cmwsIHBhcnNlZCwgc3BsaXQpCiAKICAgICBkZWYgdGVzdF9odHRwX3JvdW5kdHJpcHMoc2VsZik6CiAgICAgICAgICMgdXJsbGliLnBhcnNlLnVybHNwbGl0IHRyZWF0cyAnaHR0cDonIGFzIGFuIG9wdGltaXplZCBzcGVjaWFsIGNhc2UsCiAgICAgICAgICMgc28gd2UgdGVzdCBib3RoICdodHRwOicgYW5kICdodHRwczonIGluIGFsbCB0aGUgZm9sbG93aW5nLgogICAgICAgICAjIFRocmVlIGNoZWVycyBmb3Igd2hpdGUgYm94IGtub3dsZWRnZSEKLSAgICAgICAgdGVzdGNhc2VzID0gWworICAgICAgICBzdHJfY2FzZXMgPSBbCiAgICAgICAgICAgICAoJzovL3d3dy5weXRob24ub3JnJywKICAgICAgICAgICAgICAoJ3d3dy5weXRob24ub3JnJywgJycsICcnLCAnJywgJycpLAogICAgICAgICAgICAgICgnd3d3LnB5dGhvbi5vcmcnLCAnJywgJycsICcnKSksCkBAIC0xMzYsMTkgKzE1MiwzNCBAQAogICAgICAgICAgICAgICgnYScsICcvYi9jL2QnLCAncCcsICdxJywgJ2YnKSwKICAgICAgICAgICAgICAoJ2EnLCAnL2IvYy9kO3AnLCAncScsICdmJykpLAogICAgICAgICAgICAgXQotICAgICAgICBmb3Igc2NoZW1lIGluICgnaHR0cCcsICdodHRwcycpOgotICAgICAgICAgICAgZm9yIHVybCwgcGFyc2VkLCBzcGxpdCBpbiB0ZXN0Y2FzZXM6Ci0gICAgICAgICAgICAgICAgdXJsID0gc2NoZW1lICsgdXJsCi0gICAgICAgICAgICAgICAgcGFyc2VkID0gKHNjaGVtZSwpICsgcGFyc2VkCi0gICAgICAgICAgICAgICAgc3BsaXQgPSAoc2NoZW1lLCkgKyBzcGxpdAotICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tSb3VuZHRyaXBzKHVybCwgcGFyc2VkLCBzcGxpdCkKKyAgICAgICAgZGVmIF9lbmNvZGUodCk6CisgICAgICAgICAgICByZXR1cm4gKHRbMF0uZW5jb2RlKCdhc2NpaScpLAorICAgICAgICAgICAgICAgICAgICB0dXBsZSh4LmVuY29kZSgnYXNjaWknKSBmb3IgeCBpbiB0WzFdKSwKKyAgICAgICAgICAgICAgICAgICAgdHVwbGUoeC5lbmNvZGUoJ2FzY2lpJykgZm9yIHggaW4gdFsyXSkpCisgICAgICAgIGJ5dGVzX2Nhc2VzID0gW19lbmNvZGUoeCkgZm9yIHggaW4gc3RyX2Nhc2VzXQorICAgICAgICBzdHJfc2NoZW1lcyA9ICgnaHR0cCcsICdodHRwcycpCisgICAgICAgIGJ5dGVzX3NjaGVtZXMgPSAoYidodHRwJywgYidodHRwcycpCisgICAgICAgIHN0cl90ZXN0cyA9IHN0cl9zY2hlbWVzLCBzdHJfY2FzZXMKKyAgICAgICAgYnl0ZXNfdGVzdHMgPSBieXRlc19zY2hlbWVzLCBieXRlc19jYXNlcworICAgICAgICBmb3Igc2NoZW1lcywgdGVzdF9jYXNlcyBpbiAoc3RyX3Rlc3RzLCBieXRlc190ZXN0cyk6CisgICAgICAgICAgICBmb3Igc2NoZW1lIGluIHNjaGVtZXM6CisgICAgICAgICAgICAgICAgZm9yIHVybCwgcGFyc2VkLCBzcGxpdCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgICAgICAgICB1cmwgPSBzY2hlbWUgKyB1cmwKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VkID0gKHNjaGVtZSwpICsgcGFyc2VkCisgICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gKHNjaGVtZSwpICsgc3BsaXQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja1JvdW5kdHJpcHModXJsLCBwYXJzZWQsIHNwbGl0KQogCiAgICAgZGVmIGNoZWNrSm9pbihzZWxmLCBiYXNlLCByZWx1cmwsIGV4cGVjdGVkKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJsam9pbihiYXNlLCByZWx1cmwpLCBleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYmFzZSwgcmVsdXJsLCBleHBlY3RlZCkpCisgICAgICAgIHN0cl9jb21wb25lbnRzID0gKGJhc2UsIHJlbHVybCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybGpvaW4oYmFzZSwgcmVsdXJsKSwgZXhwZWN0ZWQpCisgICAgICAgIGJ5dGVzX2NvbXBvbmVudHMgPSBiYXNlYiwgcmVsdXJsYiwgZXhwZWN0ZWRiID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguZW5jb2RlKCdhc2NpaScpIGZvciB4IGluIHN0cl9jb21wb25lbnRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxqb2luKGJhc2ViLCByZWx1cmxiKSwgZXhwZWN0ZWRiKQogCiAgICAgZGVmIHRlc3RfdW5wYXJzZV9wYXJzZShzZWxmKToKLSAgICAgICAgZm9yIHUgaW4gWydQeXRob24nLCAnLi9QeXRob24nLCd4LW5ld3NjaGVtZTovL2Zvby5jb20vc3R1ZmYnLCd4Oi8veScsJ3g6L3knLCd4Oi8nLCcvJyxdOgorICAgICAgICBzdHJfY2FzZXMgPSBbJ1B5dGhvbicsICcuL1B5dGhvbicsJ3gtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZicsJ3g6Ly95JywneDoveScsJ3g6LycsJy8nLF0KKyAgICAgICAgYnl0ZXNfY2FzZXMgPSBbeC5lbmNvZGUoJ2FzY2lpJykgZm9yIHggaW4gc3RyX2Nhc2VzXQorICAgICAgICBmb3IgdSBpbiBzdHJfY2FzZXMgKyBieXRlc19jYXNlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHVuc3BsaXQodXJsbGliLnBhcnNlLnVybHNwbGl0KHUpKSwgdSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHVucGFyc2UodXJsbGliLnBhcnNlLnVybHBhcnNlKHUpKSwgdSkKIApAQCAtMjA0LDYgKzIzNSw4IEBACiAKICAgICBkZWYgdGVzdF9SRkMyMzk2KHNlbGYpOgogICAgICAgICAjIGNhc2VzIGZyb20gUkZDIDIzOTYKKworCiAgICAgICAgIHNlbGYuY2hlY2tKb2luKFJGQzIzOTZfQkFTRSwgJ2c6aCcsICdnOmgnKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMyMzk2X0JBU0UsICdnJywgJ2h0dHA6Ly9hL2IvYy9nJykKICAgICAgICAgc2VsZi5jaGVja0pvaW4oUkZDMjM5Nl9CQVNFLCAnLi9nJywgJ2h0dHA6Ly9hL2IvYy9nJykKQEAgLTI3Myw2ICszMDYsNyBAQAogICAgICAgICBzZWxmLmNoZWNrSm9pbihSRkMzOTg2X0JBU0UsICcuLi8uLi9nJywnaHR0cDovL2EvZycpCiAKICAgICAgICAgI0Fibm9ybWFsIEV4YW1wbGVzCisKICAgICAgICAgIyBUaGUgJ2Fibm9ybWFsIHNjZW5hcmlvcycgYXJlIGluY29tcGF0aWJsZSB3aXRoIFJGQzI5ODYgcGFyc2luZwogICAgICAgICAjIFRlc3RzIGFyZSBoZXJlIGZvciByZWZlcmVuY2UuCiAKQEAgLTMzMiw4ICszNjYsNDggQEAKICAgICAgICAgc2VsZi5jaGVja0pvaW4oU0lNUExFX0JBU0UsICdodHRwOmc/eScsJ2h0dHA6Ly9hL2IvYy9nP3knKQogICAgICAgICBzZWxmLmNoZWNrSm9pbihTSU1QTEVfQkFTRSwgJ2h0dHA6Zz95Ly4veCcsJ2h0dHA6Ly9hL2IvYy9nP3kvLi94JykKIAorICAgIGRlZiB0ZXN0X1JGQzI3MzIoc2VsZik6CisgICAgICAgIHN0cl9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnaHR0cDovL1Rlc3QucHl0aG9uLm9yZzo1NDMyL2Zvby8nLCAndGVzdC5weXRob24ub3JnJywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly8xMi4zNC41Ni43ODo1NDMyL2Zvby8nLCAnMTIuMzQuNTYuNzgnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdOjU0MzIvZm9vLycsICc6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6OjFdOjU0MzIvZm9vLycsICdkZWFkOmJlZWY6OjEnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1tkZWFkOmJlZWY6Ol06NTQzMi9mb28vJywgJ2RlYWQ6YmVlZjo6JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXTo1NDMyL2Zvby8nLAorICAgICAgICAgICAgICdkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OGZhMzpkZWFmOmZlZWQnLCA1NDMyKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjEyLjM0LjU2Ljc4XTo1NDMyL2Zvby8nLCAnOjoxMi4zNC41Ni43OCcsIDU0MzIpLAorICAgICAgICAgICAgKCdodHRwOi8vWzo6ZmZmZjoxMi4zNC41Ni43OF06NTQzMi9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgNTQzMiksCisgICAgICAgICAgICAoJ2h0dHA6Ly9UZXN0LnB5dGhvbi5vcmcvZm9vLycsICd0ZXN0LnB5dGhvbi5vcmcnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovLzEyLjM0LjU2Ljc4L2Zvby8nLCAnMTIuMzQuNTYuNzgnLCBOb25lKSwKKyAgICAgICAgICAgICgnaHR0cDovL1s6OjFdL2Zvby8nLCAnOjoxJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOjoxXS9mb28vJywgJ2RlYWQ6YmVlZjo6MScsIE5vbmUpLAorICAgICAgICAgICAgKCdodHRwOi8vW2RlYWQ6YmVlZjo6XS9mb28vJywgJ2RlYWQ6YmVlZjo6JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJywKKyAgICAgICAgICAgICAnZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhmYTM6ZGVhZjpmZWVkJywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjoxMi4zNC41Ni43OF0vZm9vLycsICc6OjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICAoJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4XS9mb28vJywKKyAgICAgICAgICAgICAnOjpmZmZmOjEyLjM0LjU2Ljc4JywgTm9uZSksCisgICAgICAgICAgICBdCisgICAgICAgIGRlZiBfZW5jb2RlKHQpOgorICAgICAgICAgICAgcmV0dXJuIHRbMF0uZW5jb2RlKCdhc2NpaScpLCB0WzFdLmVuY29kZSgnYXNjaWknKSwgdFsyXQorICAgICAgICBieXRlc19jYXNlcyA9IFtfZW5jb2RlKHgpIGZvciB4IGluIHN0cl9jYXNlc10KKyAgICAgICAgZm9yIHVybCwgaG9zdG5hbWUsIHBvcnQgaW4gc3RyX2Nhc2VzICsgYnl0ZXNfY2FzZXM6CisgICAgICAgICAgICB1cmxwYXJzZWQgPSB1cmxsaWIucGFyc2UudXJscGFyc2UodXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgodXJscGFyc2VkLmhvc3RuYW1lLCB1cmxwYXJzZWQucG9ydCkgLCAoaG9zdG5hbWUsIHBvcnQpKQorCisgICAgICAgIHN0cl9jYXNlcyA9IFsKKyAgICAgICAgICAgICAgICAnaHR0cDovLzo6MTIuMzQuNTYuNzhdLycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby8nLAorICAgICAgICAgICAgICAgICdmdHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjoxL2Zvby9iYWRdL2JhZCcsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9bOjpmZmZmOjEyLjM0LjU2Ljc4J10KKyAgICAgICAgYnl0ZXNfY2FzZXMgPSBbeC5lbmNvZGUoJ2FzY2lpJykgZm9yIHggaW4gc3RyX2Nhc2VzXQorICAgICAgICBmb3IgaW52YWxpZF91cmwgaW4gc3RyX2Nhc2VzICsgYnl0ZXNfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1cmxsaWIucGFyc2UudXJscGFyc2UsIGludmFsaWRfdXJsKQorCiAgICAgZGVmIHRlc3RfdXJsZGVmcmFnKHNlbGYpOgotICAgICAgICBmb3IgdXJsLCBkZWZyYWcsIGZyYWcgaW4gWworICAgICAgICBzdHJfY2FzZXMgPSBbCiAgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcnLCAnZnJhZycpLAogICAgICAgICAgICAgKCdodHRwOi8vcHl0aG9uLm9yZycsICdodHRwOi8vcHl0aG9uLm9yZycsICcnKSwKICAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvI2ZyYWcnLCAnaHR0cDovL3B5dGhvbi5vcmcvJywgJ2ZyYWcnKSwKQEAgLTM0NCw4ICs0MTgsMTYgQEAKICAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvcD9xJywgJ2h0dHA6Ly9weXRob24ub3JnL3A/cScsICcnKSwKICAgICAgICAgICAgIChSRkMxODA4X0JBU0UsICdodHRwOi8vYS9iL2MvZDtwP3EnLCAnZicpLAogICAgICAgICAgICAgKFJGQzIzOTZfQkFTRSwgJ2h0dHA6Ly9hL2IvYy9kO3A/cScsICcnKSwKLSAgICAgICAgICAgIF06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxkZWZyYWcodXJsKSwgKGRlZnJhZywgZnJhZykpCisgICAgICAgIF0KKyAgICAgICAgZGVmIF9lbmNvZGUodCk6CisgICAgICAgICAgICByZXR1cm4gdHlwZSh0KSh4LmVuY29kZSgnYXNjaWknKSBmb3IgeCBpbiB0KQorICAgICAgICBieXRlc19jYXNlcyA9IFtfZW5jb2RlKHgpIGZvciB4IGluIHN0cl9jYXNlc10KKyAgICAgICAgZm9yIHVybCwgZGVmcmFnLCBmcmFnIGluIHN0cl9jYXNlcyArIGJ5dGVzX2Nhc2VzOgorICAgICAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnVybGRlZnJhZyh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR1cmwoKSwgdXJsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChkZWZyYWcsIGZyYWcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudXJsLCBkZWZyYWcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mcmFnbWVudCwgZnJhZykKIAogICAgIGRlZiB0ZXN0X3VybHNwbGl0X2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIHVybCA9ICJIVFRQOi8vV1dXLlBZVEhPTi5PUkcvZG9jLyNmcmFnIgpAQCAtMzYxLDcgKzQ0Myw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQogICAgICAgICAjIGdldHVybCgpIHdvbid0IHJldHVybiBleGFjdGx5IHRoZSBvcmlnaW5hbCBVUkwgaW4gdGhpcyBjYXNlCiAgICAgICAgICMgc2luY2UgdGhlIHNjaGVtZSBpcyBhbHdheXMgY2FzZS1ub3JtYWxpemVkCi0gICAgICAgICNzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVybCkKKyAgICAgICAgIyBXZSBoYW5kbGUgdGhpcyBieSBpZ25vcmluZyB0aGUgZmlyc3QgNCBjaGFyYWN0ZXJzIG9mIHRoZSBVUkwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpWzQ6XSwgdXJsWzQ6XSkKIAogICAgICAgICB1cmwgPSAiaHR0cDovL1VzZXI6UGFzc0B3d3cucHl0aG9uLm9yZzowODAvZG9jLz9xdWVyeT15ZXMjZnJhZyIKICAgICAgICAgcCA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpCkBAIC0zOTMsNiArNDc2LDQ1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCA4MCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmwpCiAKKyAgICAgICAgIyBBbmQgY2hlY2sgdGhlbSBhbGwgYWdhaW4sIG9ubHkgd2l0aCBieXRlcyB0aGlzIHRpbWUKKyAgICAgICAgdXJsID0gYiJIVFRQOi8vV1dXLlBZVEhPTi5PUkcvZG9jLyNmcmFnIgorICAgICAgICBwID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnNjaGVtZSwgYiJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgYiJXV1cuUFlUSE9OLk9SRyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXRoLCBiIi9kb2MvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnF1ZXJ5LCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mcmFnbWVudCwgYiJmcmFnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFzc3dvcmQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ob3N0bmFtZSwgYiJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKClbNDpdLCB1cmxbNDpdKQorCisgICAgICAgIHVybCA9IGIiaHR0cDovL1VzZXI6UGFzc0B3d3cucHl0aG9uLm9yZzowODAvZG9jLz9xdWVyeT15ZXMjZnJhZyIKKyAgICAgICAgcCA9IHVybGxpYi5wYXJzZS51cmxzcGxpdCh1cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zY2hlbWUsIGIiaHR0cCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsIGIiVXNlcjpQYXNzQHd3dy5weXRob24ub3JnOjA4MCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXRoLCBiIi9kb2MvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnF1ZXJ5LCBiInF1ZXJ5PXllcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5mcmFnbWVudCwgYiJmcmFnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnVzZXJuYW1lLCBiIlVzZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFzc3dvcmQsIGIiUGFzcyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5ob3N0bmFtZSwgYiJ3d3cucHl0aG9uLm9yZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmwpCisKKyAgICAgICAgdXJsID0gYiJodHRwOi8vVXNlckBleGFtcGxlLmNvbTpQYXNzQHd3dy5weXRob24ub3JnOjA4MC9kb2MvP3F1ZXJ5PXllcyNmcmFnIgorICAgICAgICBwID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnNjaGVtZSwgYiJodHRwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgYiJVc2VyQGV4YW1wbGUuY29tOlBhc3NAd3d3LnB5dGhvbi5vcmc6MDgwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhdGgsIGIiL2RvYy8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucXVlcnksIGIicXVlcnk9eWVzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmZyYWdtZW50LCBiImZyYWciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudXNlcm5hbWUsIGIiVXNlckBleGFtcGxlLmNvbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgYiJQYXNzIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhvc3RuYW1lLCBiInd3dy5weXRob24ub3JnIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvcnQsIDgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVybCkKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfYmFkX3BvcnQoc2VsZik6CiAgICAgICAgICIiIkNoZWNrIGhhbmRsaW5nIG9mIG5vbi1pbnRlZ2VyIHBvcnRzLiIiIgpAQCAtNDA0LDYgKzUyNiwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCAid3d3LmV4YW1wbGUubmV0OmZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogcC5wb3J0KQogCisgICAgICAgICMgT25jZSBhZ2FpbiwgcmVwZWF0IG91cnNlbHZlcyB0byB0ZXN0IGJ5dGVzCisgICAgICAgIHAgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQoYiJodHRwOi8vd3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsIGIid3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogcC5wb3J0KQorCisgICAgICAgIHAgPSB1cmxsaWIucGFyc2UudXJscGFyc2UoYiJodHRwOi8vd3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5uZXRsb2MsIGIid3d3LmV4YW1wbGUubmV0OmZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogcC5wb3J0KQorCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlc193aXRob3V0X25ldGxvYyhzZWxmKToKICAgICAgICAgIyBUaGlzIGV4YW1wbGUgaXMgc3RyYWlnaHQgZnJvbSBSRkMgMzI2MS4gIEl0IGxvb2tzIGxpa2UgaXQKICAgICAgICAgIyBzaG91bGQgYWxsb3cgdGhlIHVzZXJuYW1lLCBob3N0bmFtZSwgYW5kIHBvcnQgdG8gYmUgZmlsbGVkCkBAIC00MjcsMTAgKzU1OCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmkpCiAKKyAgICAgICAgIyBZb3UgZ3Vlc3NlZCBpdCwgcmVwZWF0aW5nIHRoZSB0ZXN0IHdpdGggYnl0ZXMgaW5wdXQKKyAgICAgICAgdXJpID0gYiJzaXA6YWxpY2VAYXRsYW50YS5jb207bWFkZHI9MjM5LjI1NS4yNTUuMTt0dGw9MTUiCisgICAgICAgIHAgPSB1cmxsaWIucGFyc2UudXJsc3BsaXQodXJpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubmV0bG9jLCBiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51c2VybmFtZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhc3N3b3JkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuaG9zdG5hbWUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3J0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0dXJsKCksIHVyaSkKKworICAgICAgICBwID0gdXJsbGliLnBhcnNlLnVybHBhcnNlKHVyaSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm5ldGxvYywgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudXNlcm5hbWUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXNzd29yZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmhvc3RuYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG9ydCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldHVybCgpLCB1cmkpCisKICAgICBkZWYgdGVzdF9ub3NsYXNoKHNlbGYpOgogICAgICAgICAjIElzc3VlIDE2Mzc6IGh0dHA6Ly9mb28uY29tP3F1ZXJ5IGlzIGxlZ2FsCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKCJodHRwOi8vZXhhbXBsZS5jb20/YmxhaGJsYWg9L2ZvbyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cCcsICdleGFtcGxlLmNvbScsICcnLCAnJywgJ2JsYWhibGFoPS9mb28nLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKGIiaHR0cDovL2V4YW1wbGUuY29tP2JsYWhibGFoPS9mb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidodHRwJywgYidleGFtcGxlLmNvbScsIGInJywgYicnLCBiJ2JsYWhibGFoPS9mb28nLCBiJycpKQogCiAgICAgZGVmIHRlc3Rfd2l0aG91dHNjaGVtZShzZWxmKToKICAgICAgICAgIyBUZXN0IHVybHBhcnNlIHdpdGhvdXQgc2NoZW1lCkBAIC00NDMsNiArNTk0LDEzIEBACiAgICAgICAgICAgICAgICAgKCcnLCd3d3cucHl0aG9uLm9yZzo4MCcsJycsJycsJycsJycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxwYXJzZSgiaHR0cDovL3d3dy5weXRob24ub3JnOjgwIiksCiAgICAgICAgICAgICAgICAgKCdodHRwJywnd3d3LnB5dGhvbi5vcmc6ODAnLCcnLCcnLCcnLCcnKSkKKyAgICAgICAgIyBSZXBlYXQgZm9yIGJ5dGVzIGlucHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKGIicGF0aCIpLAorICAgICAgICAgICAgICAgIChiJycsYicnLGIncGF0aCcsYicnLGInJyxiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxwYXJzZShiIi8vd3d3LnB5dGhvbi5vcmc6ODAiKSwKKyAgICAgICAgICAgICAgICAoYicnLGInd3d3LnB5dGhvbi5vcmc6ODAnLGInJyxiJycsYicnLGInJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKGIiaHR0cDovL3d3dy5weXRob24ub3JnOjgwIiksCisgICAgICAgICAgICAgICAgKGInaHR0cCcsYid3d3cucHl0aG9uLm9yZzo4MCcsYicnLGInJyxiJycsYicnKSkKIAogICAgIGRlZiB0ZXN0X3BvcnRzZXBhcmF0b3Ioc2VsZik6CiAgICAgICAgICMgSXNzdWUgNzU0MDE2IG1ha2VzIGNoYW5nZXMgZm9yIHBvcnQgc2VwYXJhdG9yICc6JyBmcm9tIHNjaGVtZSBzZXBhcmF0b3IKQEAgLTQ1Miw2ICs2MTAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoImh0dHBzOiIpLCgnaHR0cHMnLCcnLCcnLCcnLCcnLCcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoImh0dHA6Ly93d3cucHl0aG9uLm9yZzo4MCIpLAogICAgICAgICAgICAgICAgICgnaHR0cCcsJ3d3dy5weXRob24ub3JnOjgwJywnJywnJywnJywnJykpCisgICAgICAgICMgQXMgdXN1YWwsIG5lZWQgdG8gY2hlY2sgYnl0ZXMgaW5wdXQgYXMgd2VsbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxwYXJzZShiInBhdGg6ODAiKSwKKyAgICAgICAgICAgICAgICAoYicnLGInJyxiJ3BhdGg6ODAnLGInJyxiJycsYicnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoYiJodHRwOiIpLChiJ2h0dHAnLGInJyxiJycsYicnLGInJyxiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxwYXJzZShiImh0dHBzOiIpLChiJ2h0dHBzJyxiJycsYicnLGInJyxiJycsYicnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoYiJodHRwOi8vd3d3LnB5dGhvbi5vcmc6ODAiKSwKKyAgICAgICAgICAgICAgICAoYidodHRwJyxiJ3d3dy5weXRob24ub3JnOjgwJyxiJycsYicnLGInJyxiJycpKQogCiAgICAgZGVmIHRlc3RfdXNpbmdzeXMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMzMxNDogc3lzIG1vZHVsZSBpcyB1c2VkIGluIHRoZSBlcnJvcgpAQCAtNDYzLDYgKzYyOCw5OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICgnczMnLCAnZm9vLmNvbScsICcvc3R1ZmYnLCAnJywgJycsICcnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1cmxsaWIucGFyc2UudXJscGFyc2UoIngtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgneC1uZXdzY2hlbWUnLCAnZm9vLmNvbScsICcvc3R1ZmYnLCAnJywgJycsICcnKSkKKyAgICAgICAgIyBBbmQgZm9yIGJ5dGVzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKGIiczM6Ly9mb28uY29tL3N0dWZmIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInczMnLCBiJ2Zvby5jb20nLCBiJy9zdHVmZicsIGInJywgYicnLCBiJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybGxpYi5wYXJzZS51cmxwYXJzZShiIngtbmV3c2NoZW1lOi8vZm9vLmNvbS9zdHVmZiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ3gtbmV3c2NoZW1lJywgYidmb28uY29tJywgYicvc3R1ZmYnLCBiJycsIGInJywgYicnKSkKKworICAgIGRlZiB0ZXN0X21peGVkX3R5cGVzX3JlamVjdGVkKHNlbGYpOgorICAgICAgICAjIFNldmVyYWwgZnVuY3Rpb25zIHRoYXQgcHJvY2VzcyBlaXRoZXIgc3RyaW5ncyBvciBBU0NJSSBlbmNvZGVkIGJ5dGVzCisgICAgICAgICMgYWNjZXB0IG11bHRpcGxlIGFyZ3VtZW50cy4gQ2hlY2sgdGhleSByZWplY3QgbWl4ZWQgdHlwZSBpbnB1dAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmxwYXJzZSgid3d3LnB5dGhvbi5vcmciLCBiImh0dHAiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmxwYXJzZShiInd3dy5weXRob24ub3JnIiwgImh0dHAiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmxzcGxpdCgid3d3LnB5dGhvbi5vcmciLCBiImh0dHAiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmxzcGxpdChiInd3dy5weXRob24ub3JnIiwgImh0dHAiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmx1bnBhcnNlKCggYiJodHRwIiwgInd3dy5weXRob24ub3JnIiwiIiwiIiwiIiwiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJDYW5ub3QgbWl4IHN0ciIpOgorICAgICAgICAgICAgdXJsbGliLnBhcnNlLnVybHVucGFyc2UoKCJodHRwIiwgYiJ3d3cucHl0aG9uLm9yZyIsIiIsIiIsIiIsIiIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiQ2Fubm90IG1peCBzdHIiKToKKyAgICAgICAgICAgIHVybGxpYi5wYXJzZS51cmx1bnNwbGl0KChiImh0dHAiLCAid3d3LnB5dGhvbi5vcmciLCIiLCIiLCIiKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIkNhbm5vdCBtaXggc3RyIik6CisgICAgICAgICAgICB1cmxsaWIucGFyc2UudXJsdW5zcGxpdCgoImh0dHAiLCBiInd3dy5weXRob24ub3JnIiwiIiwiIiwiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJDYW5ub3QgbWl4IHN0ciIpOgorICAgICAgICAgICAgdXJsbGliLnBhcnNlLnVybGpvaW4oImh0dHA6Ly9weXRob24ub3JnIiwgYiJodHRwOi8vcHl0aG9uLm9yZyIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJDYW5ub3QgbWl4IHN0ciIpOgorICAgICAgICAgICAgdXJsbGliLnBhcnNlLnVybGpvaW4oYiJodHRwOi8vcHl0aG9uLm9yZyIsICJodHRwOi8vcHl0aG9uLm9yZyIpCisKKyAgICBkZWYgX2NoZWNrX3Jlc3VsdF90eXBlKHNlbGYsIHN0cl90eXBlKToKKyAgICAgICAgbnVtX2FyZ3MgPSBsZW4oc3RyX3R5cGUuX2ZpZWxkcykKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHN0cl90eXBlLl9lbmNvZGVkX2NvdW50ZXJwYXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYnl0ZXNfdHlwZS5fZGVjb2RlZF9jb3VudGVycGFydCwgc3RyX3R5cGUpCisgICAgICAgIHN0cl9hcmdzID0gKCcnLCkgKiBudW1fYXJncworICAgICAgICBieXRlc19hcmdzID0gKGInJywpICogbnVtX2FyZ3MKKyAgICAgICAgc3RyX3Jlc3VsdCA9IHN0cl90eXBlKCpzdHJfYXJncykKKyAgICAgICAgYnl0ZXNfcmVzdWx0ID0gYnl0ZXNfdHlwZSgqYnl0ZXNfYXJncykKKyAgICAgICAgZW5jb2RpbmcgPSAnYXNjaWknCisgICAgICAgIGVycm9ycyA9ICdzdHJpY3QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyX3Jlc3VsdCwgc3RyX2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfcmVzdWx0LmRlY29kZSgpLCBzdHJfYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlc19yZXN1bHQuZGVjb2RlKCksIHN0cl9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfcmVzdWx0LmRlY29kZShlbmNvZGluZyksIHN0cl9hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3Jlc3VsdC5kZWNvZGUoZW5jb2RpbmcpLCBzdHJfcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3Jlc3VsdC5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycyksIHN0cl9hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzX3Jlc3VsdC5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycyksIHN0cl9yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXNfcmVzdWx0LCBieXRlc19hcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cl9yZXN1bHQuZW5jb2RlKCksIGJ5dGVzX2FyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyX3Jlc3VsdC5lbmNvZGUoKSwgYnl0ZXNfcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cl9yZXN1bHQuZW5jb2RlKGVuY29kaW5nKSwgYnl0ZXNfYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJfcmVzdWx0LmVuY29kZShlbmNvZGluZyksIGJ5dGVzX3Jlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJfcmVzdWx0LmVuY29kZShlbmNvZGluZywgZXJyb3JzKSwgYnl0ZXNfYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJfcmVzdWx0LmVuY29kZShlbmNvZGluZywgZXJyb3JzKSwgYnl0ZXNfcmVzdWx0KQorCisgICAgZGVmIHRlc3RfcmVzdWx0X3BhaXJzKHNlbGYpOgorICAgICAgICAjIENoZWNrIGVuY29kaW5nIGFuZCBkZWNvZGluZyBiZXR3ZWVuIHJlc3VsdCBwYWlycworICAgICAgICByZXN1bHRfdHlwZXMgPSBbCisgICAgICAgICAgdXJsbGliLnBhcnNlLkRlZnJhZ1Jlc3VsdCwKKyAgICAgICAgICB1cmxsaWIucGFyc2UuU3BsaXRSZXN1bHQsCisgICAgICAgICAgdXJsbGliLnBhcnNlLlBhcnNlUmVzdWx0LAorICAgICAgICBdCisgICAgICAgIGZvciByZXN1bHRfdHlwZSBpbiByZXN1bHRfdHlwZXM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZXN1bHRfdHlwZShyZXN1bHRfdHlwZSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX3FzX2VuY29kaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UucGFyc2VfcXMoImtleT1cdTAxNDElRTkiLCBlbmNvZGluZz0ibGF0aW4tMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB7J2tleSc6IFsnXHUwMTQxXHhFOSddfSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKCJrZXk9XHUwMTQxJUMzJUE5IiwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHsna2V5JzogWydcdTAxNDFceEU5J119KQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UucGFyc2VfcXMoImtleT1cdTAxNDElQzMlQTkiLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgeydrZXknOiBbJ1x1MDE0MVx1ZmZmZFx1ZmZmZCddfSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKCJrZXk9XHUwMTQxJUU5LSIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB7J2tleSc6IFsnXHUwMTQxXHVmZmZkLSddfSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzKCJrZXk9XHUwMTQxJUU5LSIsIGVuY29kaW5nPSJhc2NpaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgeydrZXknOiBbJ1x1MDE0MS0nXX0pCisKKyAgICBkZWYgdGVzdF9wYXJzZV9xc2xfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5wYXJzZV9xc2woImtleT1cdTAxNDElRTkiLCBlbmNvZGluZz0ibGF0aW4tMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdrZXknLCAnXHUwMTQxXHhFOScpXSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzbCgia2V5PVx1MDE0MSVDMyVBOSIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdrZXknLCAnXHUwMTQxXHhFOScpXSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzbCgia2V5PVx1MDE0MSVDMyVBOSIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdrZXknLCAnXHUwMTQxXHVmZmZkXHVmZmZkJyldKQorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UucGFyc2VfcXNsKCJrZXk9XHUwMTQxJUU5LSIsIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbKCdrZXknLCAnXHUwMTQxXHVmZmZkLScpXSkKKyAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnBhcnNlX3FzbCgia2V5PVx1MDE0MSVFOS0iLCBlbmNvZGluZz0iYXNjaWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0iaWdub3JlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsoJ2tleScsICdcdTAxNDEtJyldKQorCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFVybFBhcnNlVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQppbmRleCA5ZDBhOGIxLi4xMzdjNDQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKQEAgLTM5LDggKzM5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5Vc2VyRGljdC5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSwgMSksIGQ1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkuZnJvbWtleXMoJ29uZSB0d28nLnNwbGl0KCksIDEpLCBkNSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUxLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSBpcyBub3QgdTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHUxLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgY29sbGVjdGlvbnMuVXNlckRpY3QpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh1Mi5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIGNvbGxlY3Rpb25zLlVzZXJEaWN0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHUxLmZyb21rZXlzKCdvbmUgdHdvJy5zcGxpdCgpKSwgY29sbGVjdGlvbnMuVXNlckRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh1Mi5mcm9ta2V5cygnb25lIHR3bycuc3BsaXQoKSksIGNvbGxlY3Rpb25zLlVzZXJEaWN0KQogCiAgICAgICAgICMgVGVzdCBfX3JlcHJfXwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih1MCksIHN0cihkMCkpCkBAIC05NSw3ICs5NSw3IEBACiAKICAgICAgICAgIyBUZXN0ICJpbiIuCiAgICAgICAgIGZvciBpIGluIHUyLmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpIGluIHUyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihpLCB1MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MSwgaSBpbiBkMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSBpbiB1MCwgaSBpbiBkMCkKIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICMgVGVzdCBzZXRkZWZhdWx0CiAgICAgICAgIHQgPSBjb2xsZWN0aW9ucy5Vc2VyRGljdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZXRkZWZhdWx0KCJ4IiwgNDIpLCA0MikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJ4IiBpbiB0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJ4IiwgdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnNldGRlZmF1bHQoIngiLCAyMyksIDQyKQogCiAgICAgICAgICMgVGVzdCBwb3AKQEAgLTE1Miw4ICsxNTIsOCBAQAogICAgICAgICBkID0gRCh7MTogMiwgMzogNH0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsxXSwgMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWzNdLCA0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMiBub3QgaW4gZCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDIgbm90IGluIGQua2V5cygpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDIsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMiwgZC5rZXlzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsyXSwgNDIpCiAgICAgICAgIGNsYXNzIEUoY29sbGVjdGlvbnMuVXNlckRpY3QpOgogICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKaW5kZXggMDUzODEzOC4uN2E4YjkzMiAxMDA3NTUKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBVc2VyU3RyaW5nIGlzIGEgd3JhcHBlciBhcm91bmQgdGhlIG5hdGl2ZSBidWlsdGluIHN0cmluZyB0eXBlLgogIyBVc2VyU3RyaW5nIGluc3RhbmNlcyBzaG91bGQgYmVoYXZlIHNpbWlsYXIgdG8gYnVpbHRpbiBzdHJpbmcgb2JqZWN0cy4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggNjVhMWEyOC4uZGJmMzBlOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC00LDcgKzQsNiBAQAogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgc3VicHJvY2VzcwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawpAQCAtNTA4LDcgKzUwNyw3IEBACiAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfb3V0cHV0KCdzdGRlcnInKSBhcyBzdHJlYW06CiAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2Fybih0ZXh0KQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5nZXR2YWx1ZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0IGluIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbih0ZXh0LCByZXN1bHQpCiAKICAgICBkZWYgdGVzdF9zaG93d2FybmluZ19ub3RfY2FsbGFibGUoc2VsZik6CiAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MobW9kdWxlPXNlbGYubW9kdWxlKToKQEAgLTY2OSwxOCArNjY4LDMzIEBACiAgICAgZGVmIHRlc3RfY2hlY2tfd2FybmluZ3Moc2VsZik6CiAgICAgICAgICMgRXhwbGljaXQgdGVzdHMgZm9yIHRoZSB0ZXN0LnN1cHBvcnQgY29udmVuaWVuY2Ugd3JhcHBlcgogICAgICAgICB3bW9kID0gc2VsZi5tb2R1bGUKLSAgICAgICAgaWYgd21vZCBpcyBzeXMubW9kdWxlc1snd2FybmluZ3MnXToKLSAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygpIGFzIHc6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKLSAgICAgICAgICAgICAgICB3bW9kLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgaWYgd21vZCBpcyBub3Qgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ106CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKHF1aWV0PUZhbHNlKSBhcyB3OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Lndhcm5pbmdzLCBbXSkKKyAgICAgICAgICAgIHdtb2Quc2ltcGxlZmlsdGVyKCJhbHdheXMiKQorICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgImZvbyIpCisgICAgICAgICAgICB3bW9kLndhcm4oImJhciIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3Lm1lc3NhZ2UpLCAiYmFyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcud2FybmluZ3NbMF0ubWVzc2FnZSksICJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody53YXJuaW5nc1sxXS5tZXNzYWdlKSwgImJhciIpCisgICAgICAgICAgICB3LnJlc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCisKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIGRlZmF1bHRzIHRvIHF1aWV0PVRydWUgd2l0aG91dCBhcmd1bWVudAorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdmb28nLCBVc2VyV2FybmluZykpOgorICAgICAgICAgICAgd21vZC53YXJuKCJmb28iKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUnVudGltZVdhcm5pbmcpKToKKyAgICAgICAgICAgICAgICAjIGRlZmF1bHRzIHRvIHF1aWV0PUZhbHNlIHdpdGggYXJndW1lbnQKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnZm9vJywgUnVudGltZVdhcm5pbmcpKToKICAgICAgICAgICAgICAgICB3bW9kLndhcm4oImZvbyIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIody5tZXNzYWdlKSwgImZvbyIpCi0gICAgICAgICAgICAgICAgd21vZC53YXJuKCJiYXIiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcubWVzc2FnZSksICJiYXIiKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcud2FybmluZ3NbMF0ubWVzc2FnZSksICJmb28iKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHcud2FybmluZ3NbMV0ubWVzc2FnZSksICJiYXIiKQotICAgICAgICAgICAgICAgIHcucmVzZXQoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53YXJuaW5ncywgW10pCiAKIGNsYXNzIENDYXRjaFdhcm5pbmdUZXN0cyhDYXRjaFdhcm5pbmdUZXN0cyk6CiAgICAgbW9kdWxlID0gY193YXJuaW5ncwpAQCAtNjg5LDMyICs3MDMsNzYgQEAKICAgICBtb2R1bGUgPSBweV93YXJuaW5ncwogCiAKK2NsYXNzIEVudmlyb25tZW50VmFyaWFibGVUZXN0cyhCYXNlVGVzdCk6CisKKyAgICBkZWYgdGVzdF9zaW5nbGVfd2FybmluZyhzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJQWVRIT05XQVJOSU5HUyJdID0gImlnbm9yZTo6RGVwcmVjYXRpb25XYXJuaW5nIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy53YXJub3B0aW9ucykpIl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmNvbW11bmljYXRlKClbMF0sIGIiWydpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKworICAgIGRlZiB0ZXN0X2NvbW1hX3NlcGFyYXRlZF93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgbmV3ZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgbmV3ZW52WyJQWVRIT05XQVJOSU5HUyJdID0gKCJpZ25vcmU6OkRlcHJlY2F0aW9uV2FybmluZywiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWdub3JlOjpVbmljb2RlV2FybmluZyIpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwKKyAgICAgICAgICAgICAgICBiIlsnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnLCAnaWdub3JlOjpVbmljb2RlV2FybmluZyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLndhaXQoKSwgMCkKKworICAgIGRlZiB0ZXN0X2VudnZhcl9hbmRfY29tbWFuZF9saW5lKHNlbGYpOgorICAgICAgICBuZXdlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBuZXdlbnZbIlBZVEhPTldBUk5JTkdTIl0gPSAiaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmciCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1XIiAiaWdub3JlOjpVbmljb2RlV2FybmluZyIsCisgICAgICAgICAgICAgICAgIi1jIiwgImltcG9ydCBzeXM7IHN5cy5zdGRvdXQud3JpdGUoc3RyKHN5cy53YXJub3B0aW9ucykpIl0sCisgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PW5ld2VudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmNvbW11bmljYXRlKClbMF0sCisgICAgICAgICAgICAgICAgYiJbJ2lnbm9yZTo6VW5pY29kZVdhcm5pbmcnLCAnaWdub3JlOjpEZXByZWNhdGlvbldhcm5pbmcnXSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkgIT0gJ2FzY2lpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgbm9uLWFzY2lpIGZpbGVzeXN0ZW1lbmNvZGluZycpCisgICAgZGVmIHRlc3Rfbm9uYXNjaWkoc2VsZik6CisgICAgICAgIG5ld2VudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIG5ld2VudlsiUFlUSE9OV0FSTklOR1MiXSA9ICJpZ25vcmU6RGVwcmVjYWNpw7NuV2FybmluZyIKKyAgICAgICAgbmV3ZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAidXRmLTgiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzdHIoc3lzLndhcm5vcHRpb25zKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9bmV3ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuY29tbXVuaWNhdGUoKVswXSwKKyAgICAgICAgICAgICAgICAiWydpZ25vcmU6RGVwcmVjYWNpw7NuV2FybmluZyddIi5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC53YWl0KCksIDApCisKK2NsYXNzIENFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMoRW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKK2NsYXNzIFB5RW52aXJvbm1lbnRWYXJpYWJsZVRlc3RzKEVudmlyb25tZW50VmFyaWFibGVUZXN0cyk6CisgICAgbW9kdWxlID0gcHlfd2FybmluZ3MKKworCiBjbGFzcyBCb290c3RyYXBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9pc3N1ZV84NzY2KHNlbGYpOgogICAgICAgICAjICJpbXBvcnQgZW5jb2RpbmdzIiBlbWl0cyBhIHdhcm5pbmcgd2hlcmVhcyB0aGUgd2FybmluZ3MgaXMgbm90IGxvYWRlZAogICAgICAgICAjIG9yIG5vdCBjb21wbGV0ZWx5IGxvYWRlZCAod2FybmluZ3MgaW1wb3J0cyBpbmRpcmVjdGx5IGVuY29kaW5ncyBieQogICAgICAgICAjIGltcG9ydGluZyBsaW5lY2FjaGUpIHlldAotICAgICAgICBjd2QgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZW5jb2RpbmdzID0gb3MucGF0aC5qb2luKGN3ZCwgJ2VuY29kaW5ncycpCi0gICAgICAgICAgICBvcy5ta2RpcihlbmNvZGluZ3MpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgICAgICBlbnZbJ1BZVEhPTlBBVEgnXSA9IGN3ZAorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoKSBhcyBjd2QsIHN1cHBvcnQudGVtcF9jd2QoJ2VuY29kaW5ncycpOgorICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gY3dkCiAKLSAgICAgICAgICAgICAgICAjIGVuY29kaW5ncyBsb2FkZWQgYnkgaW5pdGZzZW5jb2RpbmcoKQotICAgICAgICAgICAgICAgIHJldGNvZGUgPSBzdWJwcm9jZXNzLmNhbGwoW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAncGFzcyddLCBlbnY9ZW52KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0Y29kZSwgMCkKKyAgICAgICAgICAgICMgZW5jb2RpbmdzIGxvYWRlZCBieSBpbml0ZnNlbmNvZGluZygpCisgICAgICAgICAgICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXSwgZW52PWVudikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0Y29kZSwgMCkKIAotICAgICAgICAgICAgICAgICMgVXNlIC1XIHRvIGxvYWQgd2FybmluZ3MgbW9kdWxlIGF0IHN0YXJ0dXAKLSAgICAgICAgICAgICAgICByZXRjb2RlID0gc3VicHJvY2Vzcy5jYWxsKAotICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJywgJy1XJywgJ2Fsd2F5cyddLAotICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0Y29kZSwgMCkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3Mucm1kaXIoZW5jb2RpbmdzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3Mucm1kaXIoY3dkKQorICAgICAgICAgICAgIyBVc2UgLVcgdG8gbG9hZCB3YXJuaW5ncyBtb2R1bGUgYXQgc3RhcnR1cAorICAgICAgICAgICAgcmV0Y29kZSA9IHN1YnByb2Nlc3MuY2FsbCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJywgJy1XJywgJ2Fsd2F5cyddLAorICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldGNvZGUsIDApCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBweV93YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQpAQCAtNzI2LDYgKzc4NCw3IEBACiAgICAgICAgIF9XYXJuaW5nc1Rlc3RzLAogICAgICAgICBDV2FybmluZ3NEaXNwbGF5VGVzdHMsIFB5V2FybmluZ3NEaXNwbGF5VGVzdHMsCiAgICAgICAgIENDYXRjaFdhcm5pbmdUZXN0cywgUHlDYXRjaFdhcm5pbmdUZXN0cywKKyAgICAgICAgQ0Vudmlyb25tZW50VmFyaWFibGVUZXN0cywgUHlFbnZpcm9ubWVudFZhcmlhYmxlVGVzdHMsCiAgICAgICAgIEJvb3RzdHJhcFRlc3QsCiAgICAgKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dhdmUucHkgYi9MaWIvdGVzdC90ZXN0X3dhdmUucHkKaW5kZXggMWJjYWEyNDIuLmUwYWFjZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhdmUucHkKQEAgLTIyLDExICsyMiwxNCBAQAogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0X2l0KHNlbGYpOgorICAgIGRlZiB0ZXN0X2l0KHNlbGYsIHRlc3Rfcm91bmRpbmc9RmFsc2UpOgogICAgICAgICBzZWxmLmYgPSB3YXZlLm9wZW4oVEVTVEZOLCAnd2InKQogICAgICAgICBzZWxmLmYuc2V0bmNoYW5uZWxzKG5jaGFubmVscykKICAgICAgICAgc2VsZi5mLnNldHNhbXB3aWR0aChzYW1wd2lkdGgpCi0gICAgICAgIHNlbGYuZi5zZXRmcmFtZXJhdGUoZnJhbWVyYXRlKQorICAgICAgICBpZiB0ZXN0X3JvdW5kaW5nOgorICAgICAgICAgICAgc2VsZi5mLnNldGZyYW1lcmF0ZShmcmFtZXJhdGUgLSAwLjEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmYuc2V0ZnJhbWVyYXRlKGZyYW1lcmF0ZSkKICAgICAgICAgc2VsZi5mLnNldG5mcmFtZXMobmZyYW1lcykKICAgICAgICAgb3V0cHV0ID0gYidcMCcgKiBuZnJhbWVzICogbmNoYW5uZWxzICogc2FtcHdpZHRoCiAgICAgICAgIHNlbGYuZi53cml0ZWZyYW1lcyhvdXRwdXQpCkBAIC0zOSw2ICs0MiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5mcmFtZXMsIHNlbGYuZi5nZXRuZnJhbWVzKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mLnJlYWRmcmFtZXMobmZyYW1lcyksIG91dHB1dCkKIAorICAgIGRlZiB0ZXN0X2ZyYWN0aW9uYWxfZnJhbWVyYXRlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQWRkcmVzc2VzIFsgMTUxMjc5MSBdIG1vZHVsZSB3YXZlIGRvZXMgbm8gcm91bmRpbmcKKyAgICAgICAgRmxvYXRpbmcgcG9pbnQgZnJhbWVyYXRlcyBzaG91bGQgYmUgcm91bmRlZCwgcmF0aGVyIHRoYW4gdHJ1bmNhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi50ZXN0X2l0KHRlc3Rfcm91bmRpbmc9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzY4MShzZWxmKToKICAgICAgICAgc2VsZi5mID0gd2F2ZS5vcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgc2VsZi5mLnNldG5jaGFubmVscyhuY2hhbm5lbHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkgYi9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKaW5kZXggMDI4YjQxOC4uOGI1YmJjMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQpAQCAtMTY5LDggKzE2OSw3IEBACiAgICAgICAgIHBbOl0gPSBbMiwgM10KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oTCksIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHApLCAyKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMyBpbiBwLAotICAgICAgICAgICAgICAgICAgICAgICAgInByb3h5IGRpZG4ndCBzdXBwb3J0IF9fY29udGFpbnNfXygpIHByb3Blcmx5IikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigzLCBwLCAicHJveHkgZGlkbid0IHN1cHBvcnQgX19jb250YWluc19fKCkgcHJvcGVybHkiKQogICAgICAgICBwWzFdID0gNQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExbMV0sIDUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsxXSwgNSkKQEAgLTE5Myw3ICsxOTIsNyBAQAogICAgICAgICAgICAgZGVmIF9fYnl0ZXNfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gYiJieXRlcyIKICAgICAgICAgaW5zdGFuY2UgPSBDKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJfX2J5dGVzX18iIGluIGRpcih3ZWFrcmVmLnByb3h5KGluc3RhbmNlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9fYnl0ZXNfXyIsIGRpcih3ZWFrcmVmLnByb3h5KGluc3RhbmNlKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMod2Vha3JlZi5wcm94eShpbnN0YW5jZSkpLCBiImJ5dGVzIikKIAogICAgIGRlZiB0ZXN0X3Byb3h5X2luZGV4KHNlbGYpOgpAQCAtNjgxLDYgKzY4MCwxOCBAQAogICAgICAgICAjIE5vIGV4Y2VwdGlvbiBzaG91bGQgYmUgcmFpc2VkIGhlcmUKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jbGFzc2VzKHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgY2xhc3NlcyBhcmUgd2Vha3JlZmFibGUuCisgICAgICAgIGNsYXNzIEEob2JqZWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbCA9IFtdCisgICAgICAgIHdlYWtyZWYucmVmKGludCkKKyAgICAgICAgYSA9IHdlYWtyZWYucmVmKEEsIGwuYXBwZW5kKQorICAgICAgICBBID0gTm9uZQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgW2FdKQorCiAKIGNsYXNzIFN1YmNsYXNzYWJsZVdlYWtyZWZUZXN0Q2FzZShUZXN0QmFzZSk6CiAKQEAgLTcxNSw4ICs3MjYsOCBAQAogICAgICAgICByZWZzID0gd2Vha3JlZi5nZXR3ZWFrcmVmcyhvKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWZzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIyIGlzIHJlZnNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSBpbiByZWZzWzE6XSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzIGluIHJlZnNbMTpdKQorICAgICAgICBzZWxmLmFzc2VydEluKHIxLCByZWZzWzE6XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMywgcmVmc1sxOl0pCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc19yZWZzX2RvbnRfY29uZmxhdGVfY2FsbGJhY2tzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeVJlZih3ZWFrcmVmLnJlZik6CkBAIC03MjYsOCArNzM3LDggQEAKICAgICAgICAgcjIgPSBNeVJlZihvLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSBpcyBub3QgcjIpCiAgICAgICAgIHJlZnMgPSB3ZWFrcmVmLmdldHdlYWtyZWZzKG8pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSBpbiByZWZzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocjIgaW4gcmVmcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMSwgcmVmcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyMiwgcmVmcykKIAogICAgIGRlZiB0ZXN0X3N1YmNsYXNzX3JlZnNfd2l0aF9zbG90cyhzZWxmKToKICAgICAgICAgY2xhc3MgTXlSZWYod2Vha3JlZi5yZWYpOgpAQCAtODYwLDggKzg3MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgdGhlIGtleXMgZGlkIG5vdCBjbGVhciB0aGUgZGljdGlvbmFyeSIpCiAgICAgICAgIG8gPSBPYmplY3QoNDIpCiAgICAgICAgIGRpY3Rbb10gPSAiV2hhdCBpcyB0aGUgbWVhbmluZyBvZiB0aGUgdW5pdmVyc2U/IgotICAgICAgICBzZWxmLmFzc2VydFRydWUobyBpbiBkaWN0KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoMzQgbm90IGluIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigzNCwgZGljdCkKIAogICAgIGRlZiB0ZXN0X3dlYWtfa2V5ZWRfaXRlcnMoc2VsZik6CiAgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha19rZXllZF9kaWN0KCkKQEAgLTg3Myw4ICs4ODQsOCBAQAogICAgICAgICBvYmplY3RzMiA9IGxpc3Qob2JqZWN0cykKICAgICAgICAgZm9yIHdyIGluIHJlZnM6CiAgICAgICAgICAgICBvYiA9IHdyKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYiBpbiBkaWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iIGluIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9iLCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvYiwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iXSkKICAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQpAQCAtODg0LDggKzg5NSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpc3QoZGljdC5rZXlyZWZzKCkpKSwgbGVuKG9iamVjdHMpKQogICAgICAgICBmb3Igd3IgaW4gZGljdC5rZXlyZWZzKCk6CiAgICAgICAgICAgICBvYiA9IHdyKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYiBpbiBkaWN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iIGluIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG9iLCBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihvYiwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2IuYXJnLCBkaWN0W29iXSkKICAgICAgICAgICAgIG9iamVjdHMyLnJlbW92ZShvYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2JqZWN0czIpLCAwKQpAQCAtOTYxLDEzICs5NzIsMTMgQEAKICAgICAgICAgIyB3ZWFrcmVmJ2VkIG9iamVjdHMgYW5kIHRoZW4gcmV0dXJuIGEgbmV3IGtleS92YWx1ZSBwYWlyIGNvcnJlc3BvbmRpbmcKICAgICAgICAgIyB0byB0aGUgZGVzdHJveWVkIG9iamVjdC4KICAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIChrLCB2KToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoayBpbiBkaWN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihrLCBkaWN0KQogICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCkgYXMgKGssIHYpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGRpY3QuX19kZWxpdGVtX18sIGspCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoayBpbiBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGRpY3QpCiAgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyAoaywgdik6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZGljdC5wb3AsIGspCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoayBpbiBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGssIGRpY3QpCiAgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyAoaywgdik6CiAgICAgICAgICAgICBkaWN0W2tdID0gdgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Rba10sIHYpCkBAIC0xMDkxLDEzICsxMTAyLDEzIEBACiAgICAgICAgIHdlYWtkaWN0ID0ga2xhc3MoKQogICAgICAgICBvID0gd2Vha2RpY3Quc2V0ZGVmYXVsdChrZXksIHZhbHVlMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaXMgdmFsdWUxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIHdlYWtkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgd2Vha2RpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdC5nZXQoa2V5KSBpcyB2YWx1ZTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdFtrZXldIGlzIHZhbHVlMSkKIAogICAgICAgICBvID0gd2Vha2RpY3Quc2V0ZGVmYXVsdChrZXksIHZhbHVlMikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG8gaXMgdmFsdWUxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIHdlYWtkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEluKGtleSwgd2Vha2RpY3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdC5nZXQoa2V5KSBpcyB2YWx1ZTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3ZWFrZGljdFtrZXldIGlzIHZhbHVlMSkKIApAQCAtMTExOCwxNCArMTEyOSwxMiBAQAogICAgICAgICB3ZWFrZGljdC51cGRhdGUoZGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4od2Vha2RpY3QpLCBsZW4oZGljdCkpCiAgICAgICAgIGZvciBrIGluIHdlYWtkaWN0LmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIGRpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm15c3RlcmlvdXMgbmV3IGtleSBhcHBlYXJlZCBpbiB3ZWFrIGRpY3QiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrLCBkaWN0LCAibXlzdGVyaW91cyBuZXcga2V5IGFwcGVhcmVkIGluIHdlYWsgZGljdCIpCiAgICAgICAgICAgICB2ID0gZGljdC5nZXQoaykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHdlYWtkaWN0W2tdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYgaXMgd2Vha2RpY3QuZ2V0KGspKQogICAgICAgICBmb3IgayBpbiBkaWN0LmtleXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIHdlYWtkaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICJvcmlnaW5hbCBrZXkgZGlzYXBwZWFyZWQgaW4gd2VhayBkaWN0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgd2Vha2RpY3QsICJvcmlnaW5hbCBrZXkgZGlzYXBwZWFyZWQgaW4gd2VhayBkaWN0IikKICAgICAgICAgICAgIHYgPSBkaWN0W2tdCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodiBpcyB3ZWFrZGljdFtrXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2IGlzIHdlYWtkaWN0LmdldChrKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3NldC5weQppbmRleCBlNTg3ODk4Li41OGExZjg3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtzZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrc2V0LnB5CkBAIC0zNSw3ICszNSw3IEBACiAgICAgICAgIGZvciBtZXRob2QgaW4gZGlyKHNldCk6CiAgICAgICAgICAgICBpZiBtZXRob2QgPT0gJ3Rlc3RfY19hcGknIG9yIG1ldGhvZC5zdGFydHN3aXRoKCdfJyk6CiAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2QgaW4gd2Vha3NldG1ldGhvZHMsCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1ldGhvZCwgd2Vha3NldG1ldGhvZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIldlYWtTZXQgbWlzc2luZyBtZXRob2QgIiArIG1ldGhvZCkKIAogICAgIGRlZiB0ZXN0X25ld19vcl9pbml0KHNlbGYpOgpAQCAtNTIsOSArNTIsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjIGluIHNlbGYucywgYyBpbiBzZWxmLmQpCiAgICAgICAgICMgMSBpcyBub3Qgd2Vha3JlZidhYmxlLCBidXQgdGhhdCBUeXBlRXJyb3IgaXMgY2F1Z2h0IGJ5IF9fY29udGFpbnNfXwogICAgICAgICBzZWxmLmFzc2VydE5vdEluKDEsIHNlbGYucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYub2JqIGluIHNlbGYuZnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5vYmosIHNlbGYuZnMpCiAgICAgICAgIGRlbCBzZWxmLm9iagotICAgICAgICBzZWxmLmFzc2VydFRydWUodXN0cignRicpIG5vdCBpbiBzZWxmLmZzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHVzdHIoJ0YnKSwgc2VsZi5mcykKIAogICAgIGRlZiB0ZXN0X3VuaW9uKHNlbGYpOgogICAgICAgICB1ID0gc2VsZi5zLnVuaW9uKHNlbGYuaXRlbXMyKQpAQCAtMTUxLDcgKzE1MSw3IEBACiAgICAgICAgIHM9SCgpCiAgICAgICAgIGY9c2V0KCkKICAgICAgICAgZi5hZGQocykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMgaW4gZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzLCBmKQogICAgICAgICBmLnJlbW92ZShzKQogICAgICAgICBmLmFkZChzKQogICAgICAgICBmLmRpc2NhcmQocykKQEAgLTE4Niw3ICsxODYsNyBAQAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKICAgICAgICAgeCA9IHVzdHIoJ1EnKQogICAgICAgICBzZWxmLnMuYWRkKHgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4IGluIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih4LCBzZWxmLnMpCiAgICAgICAgIGR1cCA9IHNlbGYucy5jb3B5KCkKICAgICAgICAgc2VsZi5zLmFkZCh4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucywgZHVwKQpAQCAtMTk5LDY2ICsxOTksNjYgQEAKICAgICBkZWYgdGVzdF9yZW1vdmUoc2VsZik6CiAgICAgICAgIHggPSB1c3RyKCdhJykKICAgICAgICAgc2VsZi5zLnJlbW92ZSh4KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBub3QgaW4gc2VsZi5zKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHgsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHNlbGYucy5yZW1vdmUsIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnJlbW92ZSwgW10pCiAKICAgICBkZWYgdGVzdF9kaXNjYXJkKHNlbGYpOgogICAgICAgICBhLCBxID0gdXN0cignYScpLCB1c3RyKCdRJykKICAgICAgICAgc2VsZi5zLmRpc2NhcmQoYSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgbm90IGluIHNlbGYucykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihhLCBzZWxmLnMpCiAgICAgICAgIHNlbGYucy5kaXNjYXJkKHEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmRpc2NhcmQsIFtdKQogCiAgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5zKSk6CiAgICAgICAgICAgICBlbGVtID0gc2VsZi5zLnBvcCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZWxlbSBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLnMucG9wKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlKHNlbGYpOgogICAgICAgICByZXR2YWwgPSBzZWxmLnMudXBkYXRlKHNlbGYuaXRlbXMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyBpbiBzZWxmLnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMudXBkYXRlLCBbW11dKQogCiAgICAgZGVmIHRlc3RfdXBkYXRlX3NldChzZWxmKToKICAgICAgICAgc2VsZi5zLnVwZGF0ZShzZXQoc2VsZi5pdGVtczIpKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3RfaW9yKHNlbGYpOgogICAgICAgICBzZWxmLnMgfD0gc2V0KHNlbGYuaXRlbXMyKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogCiAgICAgZGVmIHRlc3RfaW50ZXJzZWN0aW9uX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUoc2VsZi5pdGVtczIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dmFsLCBOb25lKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLmludGVyc2VjdGlvbl91cGRhdGUsIFtbXV0pCiAKICAgICBkZWYgdGVzdF9pYW5kKHNlbGYpOgogICAgICAgICBzZWxmLnMgJj0gc2V0KHNlbGYuaXRlbXMyKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKICAgICAgICAgICAgIGlmIGMgaW4gc2VsZi5pdGVtczIgYW5kIGMgaW4gc2VsZi5pdGVtczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjLCBzZWxmLnMpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIG5vdCBpbiBzZWxmLnMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihjLCBzZWxmLnMpCiAKICAgICBkZWYgdGVzdF9kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLmRpZmZlcmVuY2VfdXBkYXRlKHNlbGYuaXRlbXMyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHZhbCwgTm9uZSkKICAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnMuZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgW1tdXSkKIApAQCAtMjY2LDI3ICsyNjYsMjcgQEAKICAgICAgICAgc2VsZi5zIC09IHNldChzZWxmLml0ZW1zMikKICAgICAgICAgZm9yIGMgaW4gKHNlbGYuaXRlbXMgKyBzZWxmLml0ZW1zMik6CiAgICAgICAgICAgICBpZiBjIGluIHNlbGYuaXRlbXMgYW5kIGMgbm90IGluIHNlbGYuaXRlbXMyOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmKToKICAgICAgICAgcmV0dmFsID0gc2VsZi5zLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShzZWxmLml0ZW1zMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR2YWwsIE5vbmUpCiAgICAgICAgIGZvciBjIGluIChzZWxmLml0ZW1zICsgc2VsZi5pdGVtczIpOgogICAgICAgICAgICAgaWYgKGMgaW4gc2VsZi5pdGVtcykgXiAoYyBpbiBzZWxmLml0ZW1zMik6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgc2VsZi5zKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYyBub3QgaW4gc2VsZi5zKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYywgc2VsZi5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucy5zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsIFtbXV0pCiAKICAgICBkZWYgdGVzdF9peG9yKHNlbGYpOgogICAgICAgICBzZWxmLnMgXj0gc2V0KHNlbGYuaXRlbXMyKQogICAgICAgICBmb3IgYyBpbiAoc2VsZi5pdGVtcyArIHNlbGYuaXRlbXMyKToKICAgICAgICAgICAgIGlmIChjIGluIHNlbGYuaXRlbXMpIF4gKGMgaW4gc2VsZi5pdGVtczIpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjIGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGMsIHNlbGYucykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMgbm90IGluIHNlbGYucykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGMsIHNlbGYucykKIAogICAgIGRlZiB0ZXN0X2lucGxhY2Vfb25fc2VsZihzZWxmKToKICAgICAgICAgdCA9IHNlbGYucy5jb3B5KCkKQEAgLTM0MywxMyArMzQzLDEzIEBACiAgICAgICAgICAgICAgICAgaXQgPSBOb25lICAgICAgICAgICAjIHNob3VsZCBjb21taXQgYWxsIHJlbW92YWxzCiAKICAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHUgaW4gcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4odSwgcykKICAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5yZW1vdmUsIHUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodSBpbiBzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHUsIHMpCiAgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKSBhcyB1OgogICAgICAgICAgICAgcy5hZGQodSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHUgaW4gcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih1LCBzKQogICAgICAgICB0ID0gcy5jb3B5KCkKICAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpIGFzIHU6CiAgICAgICAgICAgICBzLnVwZGF0ZSh0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQppbmRleCBmODk4YmY3Li4wYzFiZjI5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpbnJlZy5weQpAQCAtMSw0ICsxLDMgQEAKLSMgLSotIGNvZGluZzogdXRmLTggLSotCiAjIFRlc3QgdGhlIHdpbmRvd3Mgc3BlY2lmaWMgd2luMzJyZWcgbW9kdWxlLgogIyBPbmx5IHdpbjMycmVnIGZ1bmN0aW9ucyBub3QgaGl0IGhlcmU6IEZsdXNoS2V5LCBMb2FkS2V5IGFuZCBTYXZlS2V5CiAKQEAgLTYsMTMgKzUsMzIgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiB0aHJlYWRpbmcgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInRocmVhZGluZyIpCitmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lCiAKICMgRG8gdGhpcyBmaXJzdCBzbyB0ZXN0IHdpbGwgYmUgc2tpcHBlZCBpZiBtb2R1bGUgZG9lc24ndCBleGlzdAogc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5yZWcnKQogIyBOb3cgaW1wb3J0IGV2ZXJ5dGhpbmcKIGZyb20gd2lucmVnIGltcG9ydCAqCiAKK3RyeToKKyAgICBSRU1PVEVfTkFNRSA9IHN5cy5hcmd2W3N5cy5hcmd2LmluZGV4KCItLXJlbW90ZSIpKzFdCitleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgorICAgIFJFTU9URV9OQU1FID0gTm9uZQorCisjIHR1cGxlIG9mIChtYWpvciwgbWlub3IpCitXSU5fVkVSID0gc3lzLmdldHdpbmRvd3N2ZXJzaW9uKClbOjJdCisjIFNvbWUgdGVzdHMgc2hvdWxkIG9ubHkgcnVuIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzIHdoZXJlIFdPVzY0IHdpbGwgYmUuCitXSU42NF9NQUNISU5FID0gVHJ1ZSBpZiBtYWNoaW5lKCkgPT0gIkFNRDY0IiBlbHNlIEZhbHNlCisKKyMgU3RhcnRpbmcgd2l0aCBXaW5kb3dzIDcgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDggUjIsIFdPVzY0IG5vIGxvbmdlciB1c2VzCisjIHJlZ2lzdHJ5IHJlZmxlY3Rpb24gYW5kIGZvcm1lcmx5IHJlZmxlY3RlZCBrZXlzIGFyZSBzaGFyZWQgaW5zdGVhZC4KKyMgV2luZG93cyA3IGFuZCBXaW5kb3dzIFNlcnZlciAyMDA4IFIyIGFyZSB2ZXJzaW9uIDYuMS4gRHVlIHRvIHRoaXMsIHNvbWUKKyMgdGVzdHMgYXJlIG9ubHkgdmFsaWQgdXAgdW50aWwgNi4xCitIQVNfUkVGTEVDVElPTiA9IFRydWUgaWYgV0lOX1ZFUiA8ICg2LCAxKSBlbHNlIEZhbHNlCisKIHRlc3Rfa2V5X25hbWUgPSAiU09GVFdBUkVcXFB5dGhvbiBSZWdpc3RyeSBUZXN0IEtleSAtIERlbGV0ZSBNZSIKKyMgT24gT1MnZXMgdGhhdCBzdXBwb3J0IHJlZmxlY3Rpb24gd2Ugc2hvdWxkIHRlc3Qgd2l0aCBhIHJlZmxlY3RlZCBrZXkKK3Rlc3RfcmVmbGVjdF9rZXlfbmFtZSA9ICJTT0ZUV0FSRVxcQ2xhc3Nlc1xcUHl0aG9uIFRlc3QgS2V5IC0gRGVsZXRlIE1lIgogCiB0ZXN0X2RhdGEgPSBbCiAgICAgKCJJbnQgVmFsdWUiLCAgICAgNDUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUdfRFdPUkQpLApAQCAtMjYsOCArNDQsNyBAQAogICAgICgiSmFwYW5lc2Ug5pel5pysIiwgIuaXpeacrOiqniIsIFJFR19TWiksCiBdCiAKLWNsYXNzIFdpbnJlZ1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICByZW1vdGVfbmFtZSA9IE5vbmUKK2NsYXNzIEJhc2VXaW5yZWdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgdGhlIHRlc3Qga2V5IGlzIGFic2VudCB3aGVuIHRoZSB0ZXN0CkBAIC01MCw3ICs2Nyw4IEBACiAgICAgICAgIENsb3NlS2V5KGhrZXkpCiAgICAgICAgIERlbGV0ZUtleShyb290LCBzdWJrZXkpCiAKLSAgICBkZWYgV3JpdGVUZXN0RGF0YShzZWxmLCByb290X2tleSwgc3Via2V5c3RyPSJzdWJfa2V5Iik6CisgICAgZGVmIF93cml0ZV90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlS2V5PUNyZWF0ZUtleSk6CiAgICAgICAgICMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KICAgICAgICAgU2V0VmFsdWUocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUsIFJFR19TWiwgIkRlZmF1bHQgdmFsdWUiKQogICAgICAgICBrZXkgPSBDcmVhdGVLZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCkBAIC05MSw3ICsxMDksNyBAQAogICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBSZWFkVGVzdERhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIpOgorICAgIGRlZiBfcmVhZF90ZXN0X2RhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIsIE9wZW5LZXk9T3BlbktleSk6CiAgICAgICAgICMgQ2hlY2sgd2UgY2FuIGdldCBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGtleS4KICAgICAgICAgdmFsID0gUXVlcnlWYWx1ZShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICJEZWZhdWx0IHZhbHVlIiwKQEAgLTEzMSw3ICsxNDksNyBAQAogCiAgICAgICAgIGtleS5DbG9zZSgpCiAKLSAgICBkZWYgRGVsZXRlVGVzdERhdGEoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIpOgorICAgIGRlZiBfZGVsZXRlX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgc3Via2V5c3RyPSJzdWJfa2V5Iik6CiAgICAgICAgIGtleSA9IE9wZW5LZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUsIDAsIEtFWV9BTExfQUNDRVNTKQogICAgICAgICBzdWJfa2V5ID0gT3BlbktleShrZXksIHN1YmtleXN0ciwgMCwgS0VZX0FMTF9BQ0NFU1MpCiAgICAgICAgICMgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkZWxldGUgdGhlIHZhbHVlcyBiZWZvcmUgZGVsZXRpbmcKQEAgLTE2MSwzMSArMTc5LDcwIEBACiAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiBUZXN0QWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKLSAgICAgICAgc2VsZi5Xcml0ZVRlc3REYXRhKHJvb3Rfa2V5LCBzdWJrZXlzdHIpCi0gICAgICAgIHNlbGYuUmVhZFRlc3REYXRhKHJvb3Rfa2V5LCBzdWJrZXlzdHIpCi0gICAgICAgIHNlbGYuRGVsZXRlVGVzdERhdGEocm9vdF9rZXksIHN1YmtleXN0cikKKyAgICBkZWYgX3Rlc3RfYWxsKHNlbGYsIHJvb3Rfa2V5LCBzdWJrZXlzdHI9InN1Yl9rZXkiKToKKyAgICAgICAgc2VsZi5fd3JpdGVfdGVzdF9kYXRhKHJvb3Rfa2V5LCBzdWJrZXlzdHIpCisgICAgICAgIHNlbGYuX3JlYWRfdGVzdF9kYXRhKHJvb3Rfa2V5LCBzdWJrZXlzdHIpCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEocm9vdF9rZXksIHN1YmtleXN0cikKIAotICAgIGRlZiB0ZXN0TG9jYWxNYWNoaW5lUmVnaXN0cnlXb3JrcyhzZWxmKToKLSAgICAgICAgc2VsZi5UZXN0QWxsKEhLRVlfQ1VSUkVOVF9VU0VSKQotICAgICAgICBzZWxmLlRlc3RBbGwoSEtFWV9DVVJSRU5UX1VTRVIsICLml6XmnKwtc3Via2V5IikKKyAgICBkZWYgX3Rlc3RfbmFtZWRfYXJncyhzZWxmLCBrZXksIHN1Yl9rZXkpOgorICAgICAgICB3aXRoIENyZWF0ZUtleUV4KGtleT1rZXksIHN1Yl9rZXk9c3ViX2tleSwgcmVzZXJ2ZWQ9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3M9S0VZX0FMTF9BQ0NFU1MpIGFzIGNrZXk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2tleS5oYW5kbGUgIT0gMCkKIAotICAgIGRlZiB0ZXN0Q29ubmVjdFJlZ2lzdHJ5VG9Mb2NhbE1hY2hpbmVXb3JrcyhzZWxmKToKKyAgICAgICAgd2l0aCBPcGVuS2V5RXgoa2V5PWtleSwgc3ViX2tleT1zdWJfa2V5LCByZXNlcnZlZD0wLAorICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3M9S0VZX0FMTF9BQ0NFU1MpIGFzIG9rZXk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2tleS5oYW5kbGUgIT0gMCkKKworCitjbGFzcyBMb2NhbFdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3JrcyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9hbGwoSEtFWV9DVVJSRU5UX1VTRVIpCisgICAgICAgIHNlbGYuX3Rlc3RfYWxsKEhLRVlfQ1VSUkVOVF9VU0VSLCAi5pel5pysLXN1YmtleSIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3RyeV93b3Jrc19leHRlbmRlZF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgU3Vic3RpdHV0ZSB0aGUgcmVndWxhciBDcmVhdGVLZXkgYW5kIE9wZW5LZXkgY2FsbHMgd2l0aCB0aGVpcgorICAgICAgICAjIGV4dGVuZGVkIGNvdW50ZXJwYXJ0cy4KKyAgICAgICAgIyBOb3RlOiBEZWxldGVLZXlFeCBpcyBub3QgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXMgcGxhdGZvcm0gZGVwZW5kZW50CisgICAgICAgIGNrZSA9IGxhbWJkYSBrZXksIHN1Yl9rZXk6IENyZWF0ZUtleUV4KGtleSwgc3ViX2tleSwgMCwgS0VZX0FMTF9BQ0NFU1MpCisgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3RfZGF0YShIS0VZX0NVUlJFTlRfVVNFUiwgQ3JlYXRlS2V5PWNrZSkKKworICAgICAgICBva2UgPSBsYW1iZGEga2V5LCBzdWJfa2V5OiBPcGVuS2V5RXgoa2V5LCBzdWJfa2V5LCAwLCBLRVlfUkVBRCkKKyAgICAgICAgc2VsZi5fcmVhZF90ZXN0X2RhdGEoSEtFWV9DVVJSRU5UX1VTRVIsIE9wZW5LZXk9b2tlKQorCisgICAgICAgIHNlbGYuX2RlbGV0ZV90ZXN0X2RhdGEoSEtFWV9DVVJSRU5UX1VTRVIpCisKKyAgICBkZWYgdGVzdF9uYW1lZF9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfbmFtZWRfYXJncyhIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkKKyAgICAgICAgIyBVc2UgdGhlIHJlZ3VsYXIgRGVsZXRlS2V5IHRvIGNsZWFuIHVwCisgICAgICAgICMgRGVsZXRlS2V5RXggdGFrZXMgbmFtZWQgYXJncyBhbmQgaXMgdGVzdGVkIHNlcGFyYXRlbHkKKyAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9yZWdpc3RyeV90b19sb2NhbF9tYWNoaW5lX3dvcmtzKHNlbGYpOgogICAgICAgICAjIHBlcmZvcm0gbWluaW1hbCBDb25uZWN0UmVnaXN0cnkgdGVzdCB3aGljaCBqdXN0IGludm9rZXMgaXQKICAgICAgICAgaCA9IENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaC5oYW5kbGUsIDApCiAgICAgICAgIGguQ2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGFuZGxlLCAwKQogCi0gICAgZGVmIHRlc3RSZW1vdGVNYWNoaW5lUmVnaXN0cnlXb3JrcyhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVtb3RlX25hbWU6Ci0gICAgICAgICAgICByZXR1cm4gIyByZW1vdGUgbWFjaGluZSBuYW1lIG5vdCBzcGVjaWZpZWQKLSAgICAgICAgcmVtb3RlX2tleSA9IENvbm5lY3RSZWdpc3RyeShzZWxmLnJlbW90ZV9uYW1lLCBIS0VZX0NVUlJFTlRfVVNFUikKLSAgICAgICAgc2VsZi5UZXN0QWxsKHJlbW90ZV9rZXkpCisgICAgZGVmIHRlc3RfaW5leGlzdGFudF9yZW1vdGVfcmVnaXN0cnkoc2VsZik6CisgICAgICAgIGNvbm5lY3QgPSBsYW1iZGE6IENvbm5lY3RSZWdpc3RyeSgiYWJjZGVmZ2hpamtsIiwgSEtFWV9DVVJSRU5UX1VTRVIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgY29ubmVjdCkKIAogICAgIGRlZiB0ZXN0RXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKHNlbGYpOgogICAgICAgICByID0gRXhwYW5kRW52aXJvbm1lbnRTdHJpbmdzKCIld2luZGlyJVxcdGVzdCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyKSwgc3RyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIG9zLmVudmlyb25bIndpbmRpciJdICsgIlxcdGVzdCIpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGhhbmRsZSBpcyBjbG9zZWQgaWYgYW4gZXhjZXB0aW9uIG9jY3VycworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpIGFzIGg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKKyAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oYW5kbGUsIDApCisKICAgICBkZWYgdGVzdF9jaGFuZ2luZ192YWx1ZShzZWxmKToKICAgICAgICAgIyBJc3N1ZTI4MTA6IEEgcmFjZSBjb25kaXRpb24gaW4gMi42IGFuZCAzLjEgbWF5IGNhdXNlCiAgICAgICAgICMgRW51bVZhbHVlIG9yIFF1ZXJ5VmFsdWUgdG8gdGhyb3cgIldpbmRvd3NFcnJvcjogTW9yZSBkYXRhIGlzCkBAIC0yMzgsMTUgKzI5NSwxMzcgQEAKICAgICAgICAgRW51bVZhbHVlKEhLRVlfUEVSRk9STUFOQ0VfREFUQSwgMCkKICAgICAgICAgUXVlcnlWYWx1ZUV4KEhLRVlfUEVSRk9STUFOQ0VfREFUQSwgIiIpCiAKKyAgICAjIFJlZmxlY3Rpb24gcmVxdWlyZXMgWFAgeDY0L1Zpc3RhIGF0IGEgbWluaW11bS4gWFAgZG9lc24ndCBoYXZlIHRoaXMgc3R1ZmYKKyAgICAjIG9yIERlbGV0ZUtleUV4IHNvIG1ha2Ugc3VyZSB0aGVpciB1c2UgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhXSU5fVkVSIDwgKDUsIDIpLCAiUmVxdWlyZXMgV2luZG93cyBYUCIpCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2suaGFuZGxlLCAwKQorCisgICAgICAgICAgICBrZXkgPSBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERpc2FibGVSZWZsZWN0aW9uS2V5KGtleSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgRW5hYmxlUmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIERlbGV0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFJFTU9URV9OQU1FLCAiU2tpcHBpbmcgcmVtb3RlIHJlZ2lzdHJ5IHRlc3RzIikKK2NsYXNzIFJlbW90ZVdpbnJlZ1Rlc3RzKEJhc2VXaW5yZWdUZXN0cyk6CisKKyAgICBkZWYgdGVzdF9yZW1vdGVfcmVnaXN0cnlfd29ya3Moc2VsZik6CisgICAgICAgIHJlbW90ZV9rZXkgPSBDb25uZWN0UmVnaXN0cnkoUkVNT1RFX05BTUUsIEhLRVlfQ1VSUkVOVF9VU0VSKQorICAgICAgICBzZWxmLl90ZXN0X2FsbChyZW1vdGVfa2V5KQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKFdJTjY0X01BQ0hJTkUsICJ4NjQgc3BlY2lmaWMgcmVnaXN0cnkgdGVzdHMiKQorY2xhc3MgV2luNjRXaW5yZWdUZXN0cyhCYXNlV2lucmVnVGVzdHMpOgorCisgICAgZGVmIHRlc3RfbmFtZWRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X25hbWVkX2FyZ3MoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCisgICAgICAgICMgQ2xlYW4gdXAgYW5kIGFsc28gZXhlcmNpc2UgdGhlIG5hbWVkIGFyZ3VtZW50cworICAgICAgICBEZWxldGVLZXlFeChrZXk9SEtFWV9DVVJSRU5UX1VTRVIsIHN1Yl9rZXk9dGVzdF9rZXlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYWNjZXNzPUtFWV9BTExfQUNDRVNTLCByZXNlcnZlZD0wKQorCisgICAgZGVmIHRlc3RfcmVmbGVjdGlvbl9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjYWxsIHRoZSBxdWVyeSwgZW5hYmxlLCBhbmQgZGlzYWJsZSBmdW5jdGlvbnMKKyAgICAgICAgIyBvbiBhIGtleSB3aGljaCBpc24ndCBvbiB0aGUgcmVmbGVjdGlvbiBsaXN0IHdpdGggbm8gY29uc2VxdWVuY2VzLgorICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9MT0NBTF9NQUNISU5FLCAiU29mdHdhcmUiKSBhcyBrZXk6CisgICAgICAgICAgICAjIEhLTE1cU29mdHdhcmUgaXMgcmVkaXJlY3RlZCBidXQgbm90IHJlZmxlY3RlZCBpbiBhbGwgT1NlcworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFF1ZXJ5UmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoRW5hYmxlUmVmbGVjdGlvbktleShrZXkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoRGlzYWJsZVJlZmxlY3Rpb25LZXkoa2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShRdWVyeVJlZmxlY3Rpb25LZXkoa2V5KSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRUZMRUNUSU9OLCAiT1MgZG9lc24ndCBzdXBwb3J0IHJlZmxlY3Rpb24iKQorICAgIGRlZiB0ZXN0X3JlZmxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdlIGNhbiBjcmVhdGUsIG9wZW4sIGFuZCBkZWxldGUga2V5cyBpbiB0aGUgMzItYml0CisgICAgICAgICMgYXJlYS4gQmVjYXVzZSB3ZSBhcmUgZG9pbmcgdGhpcyBpbiBhIGtleSB3aGljaCBnZXRzIHJlZmxlY3RlZCwKKyAgICAgICAgIyB0ZXN0IHRoZSBkaWZmZXJlbmNlcyBvZiAzMiBhbmQgNjQtYml0IGtleXMgYmVmb3JlIGFuZCBhZnRlciB0aGUKKyAgICAgICAgIyByZWZsZWN0aW9uIG9jY3VycyAoaWUuIHdoZW4gdGhlIGNyZWF0ZWQga2V5IGlzIGNsb3NlZCkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggQ3JlYXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX0FMTF9BQ0NFU1MgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGNyZWF0ZWRfa2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY3JlYXRlZF9rZXkuaGFuZGxlLCAwKQorCisgICAgICAgICAgICAgICAgIyBUaGUga2V5IHNob3VsZCBub3cgYmUgYXZhaWxhYmxlIGluIHRoZSAzMi1iaXQgYXJlYQorICAgICAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF8zMktFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisKKyAgICAgICAgICAgICAgICAjIFdyaXRlIGEgdmFsdWUgdG8gd2hhdCBjdXJyZW50bHkgaXMgb25seSBpbiB0aGUgMzItYml0IGFyZWEKKyAgICAgICAgICAgICAgICBTZXRWYWx1ZUV4KGNyZWF0ZWRfa2V5LCAiIiwgMCwgUkVHX1NaLCAiMzJLRVkiKQorCisgICAgICAgICAgICAgICAgIyBUaGUga2V5IGlzIG5vdCByZWZsZWN0ZWQgdW50aWwgY3JlYXRlZF9rZXkgaXMgY2xvc2VkLgorICAgICAgICAgICAgICAgICMgVGhlIDY0LWJpdCB2ZXJzaW9uIG9mIHRoZSBrZXkgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGUgeWV0LgorICAgICAgICAgICAgICAgIG9wZW5fZmFpbCA9IGxhbWJkYTogT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9wZW5fZmFpbCkKKworICAgICAgICAgICAgIyBOb3cgZXhwbGljaXRseSBvcGVuIHRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5CisgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfQUxMX0FDQ0VTUyB8IEtFWV9XT1c2NF82NEtFWSkgYXMga2V5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmhhbmRsZSwgMCkKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgb3JpZ2luYWwgdmFsdWUgd2Ugc2V0IGlzIHRoZXJlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMzJLRVkiLCBRdWVyeVZhbHVlKGtleSwgIiIpKQorICAgICAgICAgICAgICAgICMgU2V0IGEgbmV3IHZhbHVlLCB3aGljaCB3aWxsIGdldCByZWZsZWN0ZWQgdG8gMzItYml0CisgICAgICAgICAgICAgICAgU2V0VmFsdWVFeChrZXksICIiLCAwLCBSRUdfU1osICI2NEtFWSIpCisKKyAgICAgICAgICAgICMgUmVmbGVjdGlvbiB1c2VzIGEgImxhc3Qtd3JpdGVyIHdpbnMgcG9saWN5LCBzbyB0aGUgdmFsdWUgd2Ugc2V0CisgICAgICAgICAgICAjIG9uIHRoZSA2NC1iaXQga2V5IHNob3VsZCBiZSB0aGUgc2FtZSBvbiAzMi1iaXQKKyAgICAgICAgICAgIHdpdGggT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBrZXk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiNjRLRVkiLCBRdWVyeVZhbHVlKGtleSwgIiIpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9XT1c2NF8zMktFWSwgMCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19SRUZMRUNUSU9OLCAiT1MgZG9lc24ndCBzdXBwb3J0IHJlZmxlY3Rpb24iKQorICAgIGRlZiB0ZXN0X2Rpc2FibGVfcmVmbGVjdGlvbihzZWxmKToKKyAgICAgICAgIyBNYWtlIHVzZSBvZiBhIGtleSB3aGljaCBnZXRzIHJlZGlyZWN0ZWQgYW5kIHJlZmxlY3RlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIENyZWF0ZUtleUV4KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9BTExfQUNDRVNTIHwgS0VZX1dPVzY0XzMyS0VZKSBhcyBjcmVhdGVkX2tleToKKyAgICAgICAgICAgICAgICAjIFF1ZXJ5UmVmbGVjdGlvbktleSByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBrZXkgaXMgZGlzYWJsZWQKKyAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IFF1ZXJ5UmVmbGVjdGlvbktleShjcmVhdGVkX2tleSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZGlzYWJsZWQpLCBib29sKQorICAgICAgICAgICAgICAgICMgSEtDVVxTb2Z0d2FyZVxDbGFzc2VzIGlzIHJlZmxlY3RlZCBieSBkZWZhdWx0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkaXNhYmxlZCkKKworICAgICAgICAgICAgICAgIERpc2FibGVSZWZsZWN0aW9uS2V5KGNyZWF0ZWRfa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShRdWVyeVJlZmxlY3Rpb25LZXkoY3JlYXRlZF9rZXkpKQorCisgICAgICAgICAgICAjIFRoZSBrZXkgaXMgbm93IGNsb3NlZCBhbmQgd291bGQgbm9ybWFsbHkgYmUgcmVmbGVjdGVkIHRvIHRoZQorICAgICAgICAgICAgIyA2NC1iaXQgYXJlYSwgYnV0IGxldCdzIG1ha2Ugc3VyZSB0aGF0IGRpZG4ndCBoYXBwZW4uCisgICAgICAgICAgICBvcGVuX2ZhaWwgPSBsYW1iZGE6IE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcGVuX2ZhaWwpCisKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHRoZSAzMi1iaXQga2V5IGlzIGFjdHVhbGx5IHRoZXJlCisgICAgICAgICAgICB3aXRoIE9wZW5LZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1JFQUQgfCBLRVlfV09XNjRfMzJLRVkpIGFzIGtleToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGtleS5oYW5kbGUsIDApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBEZWxldGVLZXlFeChIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9yZWZsZWN0X2tleV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgS0VZX1dPVzY0XzMyS0VZLCAwKQorCiAKIGRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChXaW5yZWdUZXN0cykKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMb2NhbFdpbnJlZ1Rlc3RzLCBSZW1vdGVXaW5yZWdUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBXaW42NFdpbnJlZ1Rlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRyeToKLSAgICAgICAgV2lucmVnVGVzdHMucmVtb3RlX25hbWUgPSBzeXMuYXJndltzeXMuYXJndi5pbmRleCgiLS1yZW1vdGUiKSsxXQotICAgIGV4Y2VwdCAoSW5kZXhFcnJvciwgVmFsdWVFcnJvcik6CisgICAgaWYgbm90IFJFTU9URV9OQU1FOgogICAgICAgICBwcmludCgiUmVtb3RlIHJlZ2lzdHJ5IGNhbGxzIGNhbiBiZSB0ZXN0ZWQgdXNpbmciLAogICAgICAgICAgICAgICAiJ3Rlc3Rfd2lucmVnLnB5IC0tcmVtb3RlIFxcXFxtYWNoaW5lX25hbWUnIikKLSAgICAgICAgV2lucmVnVGVzdHMucmVtb3RlX25hbWUgPSBOb25lCiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CmluZGV4IGJlMGU2MjUuLjM0YzNkZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQpAQCAtMjQ5LDYgKzI0OSw3IEBACiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtjc2NyaXB0X3BhdGgsIGNoZWNrX3NjcmlwdF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCiAgICAgICAgIF9faGF2ZV9zb3VuZGNhcmRfY2FjaGUgPSBub3QgcC53YWl0KCkKKyAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQogICAgIHJldHVybiBfX2hhdmVfc291bmRjYXJkX2NhY2hlCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aXRoLnB5IGIvTGliL3Rlc3QvdGVzdF93aXRoLnB5CmluZGV4IDY2ZmYzYjIuLmE5ZDM3NGIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiVW5pdCB0ZXN0cyBmb3IgdGhlIHdpdGggc3RhdGVtZW50IHNwZWNpZmllZCBpbiBQRVAgMzQzLiIiIgogCkBAIC05LDI2ICs5LDI2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIGNvbnRleHRsaWIgaW1wb3J0IEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyLCBjb250ZXh0bWFuYWdlcgorZnJvbSBjb250ZXh0bGliIGltcG9ydCBfR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIsIGNvbnRleHRtYW5hZ2VyCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIAotY2xhc3MgTW9ja0NvbnRleHRNYW5hZ2VyKEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyKToKK2NsYXNzIE1vY2tDb250ZXh0TWFuYWdlcihfR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZW4pOgotICAgICAgICBHZW5lcmF0b3JDb250ZXh0TWFuYWdlci5fX2luaXRfXyhzZWxmLCBnZW4pCisgICAgICAgIF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlci5fX2luaXRfXyhzZWxmLCBnZW4pCiAgICAgICAgIHNlbGYuZW50ZXJfY2FsbGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuZXhpdF9hcmdzID0gTm9uZQogCiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgc2VsZi5lbnRlcl9jYWxsZWQgPSBUcnVlCi0gICAgICAgIHJldHVybiBHZW5lcmF0b3JDb250ZXh0TWFuYWdlci5fX2VudGVyX18oc2VsZikKKyAgICAgICAgcmV0dXJuIF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlci5fX2VudGVyX18oc2VsZikKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgc2VsZi5leGl0X2NhbGxlZCA9IFRydWUKICAgICAgICAgc2VsZi5leGl0X2FyZ3MgPSAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykKLSAgICAgICAgcmV0dXJuIEdlbmVyYXRvckNvbnRleHRNYW5hZ2VyLl9fZXhpdF9fKHNlbGYsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgdHJhY2ViYWNrKQorICAgICAgICByZXR1cm4gX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyLl9fZXhpdF9fKHNlbGYsIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIHRyYWNlYmFjaykKIAogCiBkZWYgbW9ja19jb250ZXh0bWFuYWdlcihmdW5jKToKQEAgLTIxNSwxMSArMjE1LDE3IEBACiAgICAgZGVmIHJhaXNlVGVzdEV4Y2VwdGlvbihzZWxmKToKICAgICAgICAgcmFpc2Ugc2VsZi5URVNUX0VYQ0VQVElPTgogCi0gICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfbWFuYWdlcik6CisgICAgZGVmIGFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3R5cGU9Tm9uZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2NrX21hbmFnZXIuZW50ZXJfY2FsbGVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobW9ja19tYW5hZ2VyLmV4aXRfY2FsbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2tfbWFuYWdlci5leGl0X2FyZ3NbMF0sIFJ1bnRpbWVFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzFdLCBzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrX21hbmFnZXIuZXhpdF9hcmdzWzFdLCBzZWxmLlRFU1RfRVhDRVBUSU9OKQorICAgICAgICAgICAgZXhjX3R5cGUgPSB0eXBlKHNlbGYuVEVTVF9FWENFUFRJT04pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1swXSwgZXhjX3R5cGUpCisgICAgICAgICMgVGVzdCB0aGUgX19leGl0X18gYXJndW1lbnRzLiBJc3N1ZSAjNzg1MworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1sxXSwgZXhjX3R5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9ja19tYW5hZ2VyLmV4aXRfYXJnc1syXSwgTm9uZSkKIAogICAgIGRlZiBhc3NlcnRBZnRlcldpdGhHZW5lcmF0b3JJbnZhcmlhbnRzV2l0aEVycm9yKHNlbGYsIG1vY2tfZ2VuZXJhdG9yKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vY2tfZ2VuZXJhdG9yLnlpZWxkZWQpCkBAIC0yODUsMTUgKzI5MSw2IEBACiAgICAgICAgIHdpdGggTmVzdGVkKG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkpOgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RTaW5nbGVBcmdVbmJvdW5kKHNlbGYpOgotICAgICAgICBtb2NrX2NvbnRleHRtYW5hZ2VyID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQotICAgICAgICBtb2NrX25lc3RlZCA9IE1vY2tOZXN0ZWQobW9ja19jb250ZXh0bWFuYWdlcikKLSAgICAgICAgd2l0aCBtb2NrX25lc3RlZDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19jb250ZXh0bWFuYWdlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5XaXRoTWFuYWdlckludmFyaWFudHMobW9ja19uZXN0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfY29udGV4dG1hbmFnZXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNOb0Vycm9yKG1vY2tfbmVzdGVkKQotCiAgICAgZGVmIHRlc3RTaW5nbGVBcmdCb3VuZFRvTm9uVHVwbGUoc2VsZik6CiAgICAgICAgIG0gPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCiAgICAgICAgICMgVGhpcyB3aWxsIGJpbmQgYWxsIHRoZSBhcmd1bWVudHMgdG8gbmVzdGVkKCkgaW50byBhIHNpbmdsZSBsaXN0CkBAIC0zNjYsNiArMzYzLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoTWFuYWdlckludmFyaWFudHNXaXRoRXJyb3IoY20pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWZ0ZXJXaXRoR2VuZXJhdG9ySW52YXJpYW50c1dpdGhFcnJvcihzZWxmLnJlc291cmNlKQogCisgICAgZGVmIHRlc3RFeGNlcHRpb25Ob3JtYWxpemVkKHNlbGYpOgorICAgICAgICBjbSA9IG1vY2tfY29udGV4dG1hbmFnZXJfZ2VuZXJhdG9yKCkKKyAgICAgICAgZGVmIHNob3VsZFRocm93KCk6CisgICAgICAgICAgICB3aXRoIGNtIGFzIHNlbGYucmVzb3VyY2U6CisgICAgICAgICAgICAgICAgIyBOb3RlIHRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgMSAvLyAwIHByb2R1Y2VzIGFuIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICMgdGhhdCBpcyBub3Qgbm9ybWFsaXplZCBpbW1lZGlhdGVseS4KKyAgICAgICAgICAgICAgICAxIC8vIDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIHNob3VsZFRocm93KQorICAgICAgICBzZWxmLmFzc2VydEFmdGVyV2l0aE1hbmFnZXJJbnZhcmlhbnRzV2l0aEVycm9yKGNtLCBaZXJvRGl2aXNpb25FcnJvcikKKwogICAgIGRlZiB0ZXN0TmVzdGVkU2luZ2xlU3RhdGVtZW50cyhzZWxmKToKICAgICAgICAgbW9ja19hID0gbW9ja19jb250ZXh0bWFuYWdlcl9nZW5lcmF0b3IoKQogICAgICAgICBtb2NrX2IgPSBtb2NrX2NvbnRleHRtYW5hZ2VyX2dlbmVyYXRvcigpCkBAIC03MjEsNiArNzI4LDcgQEAKICAgICAgICAgICAgIGJvZHlfZXhlY3V0ZWQgPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhLmVudGVyX2NhbGxlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEuZXhpdF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShib2R5X2V4ZWN1dGVkKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGEuZXhjX2luZm9bMF0sIE5vbmUpCiAKICAgICBkZWYgdGVzdEVudGVyUmV0dXJuc1R1cGxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5IGIvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5Cm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKaW5kZXggMzQ1MDE2My4uYTA4ZjY2YgotLS0gYS9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgICgnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpLAogICAgICAgICAoJ0RhdGUnLCdNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVCcpCiAgICAgXSkKLSAgICByZXR1cm4gWyJIZWxsbywgd29ybGQhIl0KKyAgICByZXR1cm4gW2IiSGVsbG8sIHdvcmxkISJdCiAKIGRlZiBydW5fYW1vY2soYXBwPWhlbGxvX2FwcCwgZGF0YT1iIkdFVCAvIEhUVFAvMS4wXG5cbiIpOgogICAgIHNlcnZlciA9IG1ha2Vfc2VydmVyKCIiLCA4MCwgYXBwLCBNb2NrU2VydmVyLCBNb2NrSGFuZGxlcikKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgIGRlZiBjaGVja19oZWxsbyhzZWxmLCBvdXQsIGhhc19sZW5ndGg9VHJ1ZSk6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LAogICAgICAgICAgICAgKCJIVFRQLzEuMCAyMDAgT0tcclxuIgotICAgICAgICAgICAgIlNlcnZlcjogV1NHSVNlcnZlci8wLjEgUHl0aG9uLyIrc3lzLnZlcnNpb24uc3BsaXQoKVswXSsiXHJcbiIKKyAgICAgICAgICAgICJTZXJ2ZXI6IFdTR0lTZXJ2ZXIvMC4yIFB5dGhvbi8iK3N5cy52ZXJzaW9uLnNwbGl0KClbMF0rIlxyXG4iCiAgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluXHJcbiIKICAgICAgICAgICAgICJEYXRlOiBNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVFxyXG4iICsKICAgICAgICAgICAgIChoYXNfbGVuZ3RoIGFuZCAgIkNvbnRlbnQtTGVuZ3RoOiAxM1xyXG4iIG9yICIiKSArCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICBkZWYgdGVzdF93c2dpX2lucHV0KHNlbGYpOgogICAgICAgICBkZWYgYmFkX2FwcChlLHMpOgogICAgICAgICAgICAgZVsid3NnaS5pbnB1dCJdLnJlYWQoKQotICAgICAgICAgICAgcyhiIjIwMCBPSyIsIFsoYiJDb250ZW50LVR5cGUiLCBiInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKV0pCisgICAgICAgICAgICBzKCIyMDAgT0siLCBbKCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIpXSkKICAgICAgICAgICAgIHJldHVybiBbYiJkYXRhIl0KICAgICAgICAgb3V0LCBlcnIgPSBydW5fYW1vY2sodmFsaWRhdG9yKGJhZF9hcHApKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LmVuZHN3aXRoKApAQCAtMTc3LDggKzE3Nyw4IEBACiAKICAgICBkZWYgdGVzdF9ieXRlc192YWxpZGF0aW9uKHNlbGYpOgogICAgICAgICBkZWYgYXBwKGUsIHMpOgotICAgICAgICAgICAgcyhiIjIwMCBPSyIsIFsKLSAgICAgICAgICAgICAgICAoYiJDb250ZW50LVR5cGUiLCBiInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKSwKKyAgICAgICAgICAgIHMoIjIwMCBPSyIsIFsKKyAgICAgICAgICAgICAgICAoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiksCiAgICAgICAgICAgICAgICAgKCJEYXRlIiwgIldlZCwgMjQgRGVjIDIwMDggMTM6Mjk6MzIgR01UIiksCiAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgIHJldHVybiBbYiJkYXRhIl0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICB2ZXIgPSBzeXMudmVyc2lvbi5zcGxpdCgpWzBdLmVuY29kZSgnYXNjaWknKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgICAgIGIiSFRUUC8xLjAgMjAwIE9LXHJcbiIKLSAgICAgICAgICAgICAgICBiIlNlcnZlcjogV1NHSVNlcnZlci8wLjEgUHl0aG9uLyIgKyB2ZXIgKyBiIlxyXG4iCisgICAgICAgICAgICAgICAgYiJTZXJ2ZXI6IFdTR0lTZXJ2ZXIvMC4yIFB5dGhvbi8iICsgdmVyICsgYiJcclxuIgogICAgICAgICAgICAgICAgIGIiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XHJcbiIKICAgICAgICAgICAgICAgICBiIkRhdGU6IFdlZCwgMjQgRGVjIDIwMDggMTM6Mjk6MzIgR01UXHJcbiIKICAgICAgICAgICAgICAgICBiIlxyXG4iCkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogICAgICAgICAjIENoZWNrIGRlZmF1bHRpbmcgd2hlbiBlbXB0eQogICAgICAgICBlbnYgPSB7fQogICAgICAgICB1dGlsLnNldHVwX3Rlc3RpbmdfZGVmYXVsdHMoZW52KQotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLFN0cmluZ0lPKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGVudltrZXldLFN0cmluZ0lPKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgU3RyaW5nSU8pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudltrZXldLCBTdHJpbmdJTykKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLEJ5dGVzSU8pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZW52W2tleV0sQnl0ZXNJTykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW52W2tleV0sQnl0ZXNJTykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52W2tleV0sdmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudltrZXldLCB2YWx1ZSkKIAogICAgICAgICAjIENoZWNrIGV4aXN0aW5nIHZhbHVlCiAgICAgICAgIGVudiA9IHtrZXk6YWx0fQpAQCAtNDI0LDI5ICs0MjQsNiBAQAogICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICkKIAotICAgIGRlZiB0ZXN0Qnl0ZXMoc2VsZik6Ci0gICAgICAgIGggPSBIZWFkZXJzKFsKLSAgICAgICAgICAgIChiIkNvbnRlbnQtVHlwZSIsIGIidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIpLAotICAgICAgICAgICAgXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsIGguZ2V0KCJDb250ZW50LVR5cGUiKSkKLQotICAgICAgICBoW2IiRm9vIl0gPSBieXRlcyhiImJhciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImJhciIsIGguZ2V0KCJGb28iKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYmFyIiwgaC5nZXQoYiJGb28iKSkKLQotICAgICAgICBoLnNldGRlZmF1bHQoYiJCYXIiLCBiImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImZvbyIsIGguZ2V0KCJCYXIiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiZm9vIiwgaC5nZXQoYiJCYXIiKSkKLQotICAgICAgICBoLmFkZF9oZWFkZXIoYidjb250ZW50LWRpc3Bvc2l0aW9uJywgYidhdHRhY2htZW50JywKLSAgICAgICAgICAgIGZpbGVuYW1lPWInYnVkLmdpZicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2F0dGFjaG1lbnQ7IGZpbGVuYW1lPSJidWQuZ2lmIicsCi0gICAgICAgICAgICBoLmdldCgiY29udGVudC1kaXNwb3NpdGlvbiIpKQotCi0gICAgICAgIGRlbCBoWydjb250ZW50LWRpc3Bvc2l0aW9uJ10KLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInY29udGVudC1kaXNwb3NpdGlvbicgbm90IGluIGgpCi0KLQogY2xhc3MgRXJyb3JIYW5kbGVyKEJhc2VDR0lIYW5kbGVyKToKICAgICAiIiJTaW1wbGUgaGFuZGxlciBzdWJjbGFzcyBmb3IgdGVzdGluZyBCYXNlSGFuZGxlciIiIgogCkBAIC00OTcsNyArNDc0LDcgQEAKICAgICAgICAgICAgIGlmIGsgbm90IGluIGVtcHR5OgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW52W2tdLHYpCiAgICAgICAgIGZvciBrLHYgaW4gZW1wdHkuaXRlbXMoKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrIGluIGVudikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaywgZW52KQogCiAgICAgZGVmIHRlc3RFbnZpcm9uKHNlbGYpOgogICAgICAgICBoID0gVGVzdEhhbmRsZXIoWD0iWSIpCkBAIC01MTAsNyArNDg3LDcgQEAKICAgICAgICAgaCA9IEJhc2VDR0lIYW5kbGVyKE5vbmUsTm9uZSxOb25lLHt9KQogICAgICAgICBoLnNldHVwX2Vudmlyb24oKQogICAgICAgICBmb3Iga2V5IGluICd3c2dpLnVybF9zY2hlbWUnLCAnd3NnaS5pbnB1dCcsICd3c2dpLmVycm9ycyc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoa2V5IGluIGguZW52aXJvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBoLmVudmlyb24pCiAKICAgICBkZWYgdGVzdFNjaGVtZShzZWxmKToKICAgICAgICAgaD1UZXN0SGFuZGxlcihIVFRQUz0ib24iKTsgaC5zZXR1cF9lbnZpcm9uKCkKQEAgLTUzMywxMCArNTEwLDEwIEBACiAKICAgICAgICAgZGVmIHRyaXZpYWxfYXBwMShlLHMpOgogICAgICAgICAgICAgcygnMjAwIE9LJyxbXSkKLSAgICAgICAgICAgIHJldHVybiBbZVsnd3NnaS51cmxfc2NoZW1lJ11dCisgICAgICAgICAgICByZXR1cm4gW2VbJ3dzZ2kudXJsX3NjaGVtZSddLmVuY29kZSgnaXNvLTg4NTktMScpXQogCiAgICAgICAgIGRlZiB0cml2aWFsX2FwcDIoZSxzKToKLSAgICAgICAgICAgIHMoJzIwMCBPSycsW10pKGVbJ3dzZ2kudXJsX3NjaGVtZSddKQorICAgICAgICAgICAgcygnMjAwIE9LJyxbXSkoZVsnd3NnaS51cmxfc2NoZW1lJ10uZW5jb2RlKCdpc28tODg1OS0xJykpCiAgICAgICAgICAgICByZXR1cm4gW10KIAogICAgICAgICBkZWYgdHJpdmlhbF9hcHAzKGUscyk6CkBAIC02MDEsMTMgKzU3OCwxMyBAQAogICAgICAgICAgICAgKCJTdGF0dXM6ICVzXHJcbiIKICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IHRleHQvcGxhaW5cclxuIgogICAgICAgICAgICAgIkNvbnRlbnQtTGVuZ3RoOiAlZFxyXG4iCi0gICAgICAgICAgICAiXHJcbiVzIiAlIChoLmVycm9yX3N0YXR1cyxsZW4oaC5lcnJvcl9ib2R5KSxoLmVycm9yX2JvZHkpCi0gICAgICAgICAgICApLmVuY29kZSgiaXNvLTg4NTktMSIpKQorICAgICAgICAgICAgIlxyXG4iICUgKGguZXJyb3Jfc3RhdHVzLGxlbihoLmVycm9yX2JvZHkpKSkuZW5jb2RlKCdpc28tODg1OS0xJykKKyAgICAgICAgICAgICsgaC5lcnJvcl9ib2R5KQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiQXNzZXJ0aW9uRXJyb3IiIGluIGguc3RkZXJyLmdldHZhbHVlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkFzc2VydGlvbkVycm9yIiwgaC5zdGRlcnIuZ2V0dmFsdWUoKSkKIAogICAgIGRlZiB0ZXN0RXJyb3JBZnRlck91dHB1dChzZWxmKToKLSAgICAgICAgTVNHID0gIlNvbWUgb3V0cHV0IGhhcyBiZWVuIHNlbnQiCisgICAgICAgIE1TRyA9IGIiU29tZSBvdXRwdXQgaGFzIGJlZW4gc2VudCIKICAgICAgICAgZGVmIGVycm9yX2FwcChlLHMpOgogICAgICAgICAgICAgcygiMjAwIE9LIixbXSkoTVNHKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRoaXMgc2hvdWxkIGJlIGNhdWdodCBieSBoYW5kbGVyIikKQEAgLTYxNiw4ICs1OTMsOCBAQAogICAgICAgICBoLnJ1bihlcnJvcl9hcHApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5zdGRvdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICgiU3RhdHVzOiAyMDAgT0tcclxuIgotICAgICAgICAgICAgIlxyXG4iK01TRykuZW5jb2RlKCJpc28tODg1OS0xIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiQXNzZXJ0aW9uRXJyb3IiIGluIGguc3RkZXJyLmdldHZhbHVlKCkpCisgICAgICAgICAgICAiXHJcbiIuZW5jb2RlKCJpc28tODg1OS0xIikrTVNHKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiQXNzZXJ0aW9uRXJyb3IiLCBoLnN0ZGVyci5nZXR2YWx1ZSgpKQogCiAKICAgICBkZWYgdGVzdEhlYWRlckZvcm1hdHMoc2VsZik6CkBAIC02NjUsOCArNjQyLDggQEAKIAogICAgIGRlZiB0ZXN0Qnl0ZXNEYXRhKHNlbGYpOgogICAgICAgICBkZWYgYXBwKGUsIHMpOgotICAgICAgICAgICAgcyhiIjIwMCBPSyIsIFsKLSAgICAgICAgICAgICAgICAoYiJDb250ZW50LVR5cGUiLCBiInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKSwKKyAgICAgICAgICAgIHMoIjIwMCBPSyIsIFsKKyAgICAgICAgICAgICAgICAoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04IiksCiAgICAgICAgICAgICAgICAgXSkKICAgICAgICAgICAgIHJldHVybiBbYiJkYXRhIl0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQppbmRleCBmMjU1MWQ2Li4yMmZhZmE5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZS5weQpAQCAtMSwyMiArMSw1MiBAQAogIyB4bWwuZXRyZWUgdGVzdC4gIFRoaXMgZmlsZSBjb250YWlucyBlbm91Z2ggdGVzdHMgdG8gbWFrZSBzdXJlIHRoYXQKLSMgYWxsIGluY2x1ZGVkIGNvbXBvbmVudHMgd29yayBhcyB0aGV5IHNob3VsZC4gIEZvciBhIG1vcmUgZXh0ZW5zaXZlCi0jIHRlc3Qgc3VpdGUsIHNlZSB0aGUgc2VsZnRlc3Qgc2NyaXB0IGluIHRoZSBFbGVtZW50VHJlZSBkaXN0cmlidXRpb24uCisjIGFsbCBpbmNsdWRlZCBjb21wb25lbnRzIHdvcmsgYXMgdGhleSBzaG91bGQuCisjIExhcmdlIHBhcnRzIGFyZSBleHRyYWN0ZWQgZnJvbSB0aGUgdXBzdHJlYW0gdGVzdCBzdWl0ZS4KIAotaW1wb3J0IGRvY3Rlc3QKKyMgSU1QT1JUQU5UOiB0aGUgc2FtZSBkb2N0ZXN0cyBhcmUgcnVuIGZyb20gInRlc3RfeG1sX2V0cmVlX2MiIGluCisjIG9yZGVyIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBDIGltcGxlbWVudGF0aW9uIGFuZCB0aGUKKyMgUHl0aG9uIGltcGxlbWVudGF0aW9uLgorIworIyBGb3IgdGhpcyBwdXJwb3NlLCB0aGUgbW9kdWxlLWxldmVsICJFVCIgc3ltYm9sIGlzIHRlbXBvcmFyaWx5CisjIG1vbmtleS1wYXRjaGVkIHdoZW4gcnVubmluZyB0aGUgInRlc3RfeG1sX2V0cmVlX2MiIHRlc3Qgc3VpdGUuCisjIERvbid0IHJlLWltcG9ydCAieG1sLmV0cmVlLkVsZW1lbnRUcmVlIiBtb2R1bGUgaW4gdGhlIGRvY3N0cmluZywKKyMgZXhjZXB0IGlmIHRoZSB0ZXN0IGlzIHNwZWNpZmljIHRvIHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24uCisKIGltcG9ydCBzeXMKK2ltcG9ydCBodG1sCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgZmluZGZpbGUKIAotU0FNUExFX1hNTCA9ICIiIgorZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlIGFzIEVUCisKK1NJTVBMRV9YTUxGSUxFID0gZmluZGZpbGUoInNpbXBsZS54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKK3RyeToKKyAgICBTSU1QTEVfWE1MRklMRS5lbmNvZGUoInV0ZjgiKQorZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZmlsZW5hbWUgaXMgbm90IGVuY29kYWJsZSB0byB1dGY4IikKK1NJTVBMRV9OU19YTUxGSUxFID0gZmluZGZpbGUoInNpbXBsZS1ucy54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKKworU0FNUExFX1hNTCA9ICIiIlwKIDxib2R5PgotICA8dGFnPnRleHQ8L3RhZz4KLSAgPHRhZyAvPgorICA8dGFnIGNsYXNzPSdhJz50ZXh0PC90YWc+CisgIDx0YWcgY2xhc3M9J2InIC8+CiAgIDxzZWN0aW9uPgotICAgIDx0YWc+c3VidGV4dDwvdGFnPgorICAgIDx0YWcgY2xhc3M9J2InIGlkPSdpbm5lcic+c3VidGV4dDwvdGFnPgogICA8L3NlY3Rpb24+CiA8L2JvZHk+CiAiIiIKIAorU0FNUExFX1NFQ1RJT04gPSAiIiJcCis8c2VjdGlvbj4KKyAgPHRhZyBjbGFzcz0nYicgaWQ9J2lubmVyJz5zdWJ0ZXh0PC90YWc+CisgIDxuZXh0dGFnIC8+CisgIDxuZXh0c2VjdGlvbj4KKyAgICA8dGFnIC8+CisgIDwvbmV4dHNlY3Rpb24+Cis8L3NlY3Rpb24+CisiIiIKKwogU0FNUExFX1hNTF9OUyA9ICIiIgogPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KICAgPHRhZz50ZXh0PC90YWc+CkBAIC0yNyw2ICs1Nyw3IEBACiA8L2JvZHk+CiAiIiIKIAorCiBkZWYgc2FuaXR5KCk6CiAgICAgIiIiCiAgICAgSW1wb3J0IHNhbml0eS4KQEAgLTQwLDM1ICs3MSwxMTAgQEAKICAgICBpZiBub3QgaGFzYXR0cihtZXRob2QsICdfX2NhbGxfXycpOgogICAgICAgICBwcmludChtZXRob2QsICJub3QgY2FsbGFibGUiKQogCi1kZWYgc2VyaWFsaXplKEVULCBlbGVtKToKK2RlZiBzZXJpYWxpemUoZWxlbSwgdG9fc3RyaW5nPVRydWUsIGVuY29kaW5nPSd1bmljb2RlJywgKipvcHRpb25zKToKICAgICBpbXBvcnQgaW8KKyAgICBpZiBlbmNvZGluZyAhPSAndW5pY29kZSc6CisgICAgICAgIGZpbGUgPSBpby5CeXRlc0lPKCkKKyAgICBlbHNlOgorICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8oKQogICAgIHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtKQotICAgIGZpbGUgPSBpby5TdHJpbmdJTygpCi0gICAgdHJlZS53cml0ZShmaWxlKQotICAgIHJldHVybiBmaWxlLmdldHZhbHVlKCkKKyAgICB0cmVlLndyaXRlKGZpbGUsIGVuY29kaW5nPWVuY29kaW5nLCAqKm9wdGlvbnMpCisgICAgaWYgdG9fc3RyaW5nOgorICAgICAgICByZXR1cm4gZmlsZS5nZXR2YWx1ZSgpCisgICAgZWxzZToKKyAgICAgICAgZmlsZS5zZWVrKDApCisgICAgICAgIHJldHVybiBmaWxlCiAKIGRlZiBzdW1tYXJpemUoZWxlbSk6CisgICAgaWYgZWxlbS50YWcgPT0gRVQuQ29tbWVudDoKKyAgICAgICAgcmV0dXJuICI8Q29tbWVudD4iCiAgICAgcmV0dXJuIGVsZW0udGFnCiAKIGRlZiBzdW1tYXJpemVfbGlzdChzZXEpOgotICAgIHJldHVybiBsaXN0KG1hcChzdW1tYXJpemUsIHNlcSkpCisgICAgcmV0dXJuIFtzdW1tYXJpemUoZWxlbSkgZm9yIGVsZW0gaW4gc2VxXQorCitkZWYgbm9ybWFsaXplX2NybGYodHJlZSk6CisgICAgZm9yIGVsZW0gaW4gdHJlZS5pdGVyKCk6CisgICAgICAgIGlmIGVsZW0udGV4dDoKKyAgICAgICAgICAgIGVsZW0udGV4dCA9IGVsZW0udGV4dC5yZXBsYWNlKCJcclxuIiwgIlxuIikKKyAgICAgICAgaWYgZWxlbS50YWlsOgorICAgICAgICAgICAgZWxlbS50YWlsID0gZWxlbS50YWlsLnJlcGxhY2UoIlxyXG4iLCAiXG4iKQorCitkZWYgbm9ybWFsaXplX2V4Y2VwdGlvbihmdW5jLCAqYXJncywgKiprd2FyZ3MpOgorICAgICMgSWdub3JlIHRoZSBleGNlcHRpb24gX19tb2R1bGVfXworICAgIHRyeToKKyAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlcnI6CisgICAgICAgIHByaW50KCJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6IikKKyAgICAgICAgcHJpbnQoInt9OiB7fSIuZm9ybWF0KGVyci5fX2NsYXNzX18uX19uYW1lX18sIGVycikpCisKK2RlZiBjaGVja19zdHJpbmcoc3RyaW5nKToKKyAgICBsZW4oc3RyaW5nKQorICAgIGZvciBjaGFyIGluIHN0cmluZzoKKyAgICAgICAgaWYgbGVuKGNoYXIpICE9IDE6CisgICAgICAgICAgICBwcmludCgiZXhwZWN0ZWQgb25lLWNoYXJhY3RlciBzdHJpbmcsIGdvdCAlciIgJSBjaGFyKQorICAgIG5ld19zdHJpbmcgPSBzdHJpbmcgKyAiIgorICAgIG5ld19zdHJpbmcgPSBzdHJpbmcgKyAiICIKKyAgICBzdHJpbmdbOjBdCisKK2RlZiBjaGVja19tYXBwaW5nKG1hcHBpbmcpOgorICAgIGxlbihtYXBwaW5nKQorICAgIGtleXMgPSBtYXBwaW5nLmtleXMoKQorICAgIGl0ZW1zID0gbWFwcGluZy5pdGVtcygpCisgICAgZm9yIGtleSBpbiBrZXlzOgorICAgICAgICBpdGVtID0gbWFwcGluZ1trZXldCisgICAgbWFwcGluZ1sia2V5Il0gPSAidmFsdWUiCisgICAgaWYgbWFwcGluZ1sia2V5Il0gIT0gInZhbHVlIjoKKyAgICAgICAgcHJpbnQoImV4cGVjdGVkIHZhbHVlIHN0cmluZywgZ290ICVyIiAlIG1hcHBpbmdbImtleSJdKQorCitkZWYgY2hlY2tfZWxlbWVudChlbGVtZW50KToKKyAgICBpZiBub3QgRVQuaXNlbGVtZW50KGVsZW1lbnQpOgorICAgICAgICBwcmludCgibm90IGFuIGVsZW1lbnQiKQorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0YWciKToKKyAgICAgICAgcHJpbnQoIm5vIHRhZyBtZW1iZXIiKQorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJhdHRyaWIiKToKKyAgICAgICAgcHJpbnQoIm5vIGF0dHJpYiBtZW1iZXIiKQorICAgIGlmIG5vdCBoYXNhdHRyKGVsZW1lbnQsICJ0ZXh0Iik6CisgICAgICAgIHByaW50KCJubyB0ZXh0IG1lbWJlciIpCisgICAgaWYgbm90IGhhc2F0dHIoZWxlbWVudCwgInRhaWwiKToKKyAgICAgICAgcHJpbnQoIm5vIHRhaWwgbWVtYmVyIikKKworICAgIGNoZWNrX3N0cmluZyhlbGVtZW50LnRhZykKKyAgICBjaGVja19tYXBwaW5nKGVsZW1lbnQuYXR0cmliKQorICAgIGlmIGVsZW1lbnQudGV4dCBpcyBub3QgTm9uZToKKyAgICAgICAgY2hlY2tfc3RyaW5nKGVsZW1lbnQudGV4dCkKKyAgICBpZiBlbGVtZW50LnRhaWwgaXMgbm90IE5vbmU6CisgICAgICAgIGNoZWNrX3N0cmluZyhlbGVtZW50LnRhaWwpCisgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKKyAgICAgICAgY2hlY2tfZWxlbWVudChlbGVtKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGVsZW1lbnQgdHJlZSB0ZXN0cwogCiBkZWYgaW50ZXJmYWNlKCk6CiAgICAgIiIiCiAgICAgVGVzdCBlbGVtZW50IHRyZWUgaW50ZXJmYWNlLgogCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAotCi0gICAgPj4+IGVsZW1lbnQgPSBFVC5FbGVtZW50KCJ0YWciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQoZWxlbWVudCkKICAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IGNoZWNrX2VsZW1lbnQodHJlZS5nZXRyb290KCkpCisKKyAgICA+Pj4gZWxlbWVudCA9IEVULkVsZW1lbnQoInRcXHhlNGciLCBrZXk9InZhbHVlIikKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpCisgICAgPj4+IHJlcHIoZWxlbWVudCkgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICI8RWxlbWVudCAndFxceGU0ZycgYXQgMHguLi4+IgorICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCiAKICAgICBNYWtlIHN1cmUgYWxsIHN0YW5kYXJkIGVsZW1lbnQgbWV0aG9kcyBleGlzdC4KIAogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5hcHBlbmQpCisgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmV4dGVuZCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaW5zZXJ0KQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5yZW1vdmUpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGNoaWxkcmVuKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5maW5kKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZGFsbCkKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZmluZHRleHQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmNsZWFyKQpAQCAtNzYsMzAgKzE4Miw5MjYgQEAKICAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuc2V0KQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5rZXlzKQogICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVtcykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcikKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcnRleHQpCiAgICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmdldGl0ZXJhdG9yKQogCisgICAgVGhlc2UgbWV0aG9kcyByZXR1cm4gYW4gaXRlcmFibGUuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyKCJ0YWciKS5fX25leHRfXykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuaXRlcmZpbmQoInRhZyIpLl9fbmV4dF9fKQorICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pdGVyZmluZCgiKiIpLl9fbmV4dF9fKQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyKCJ0YWciKS5fX25leHRfXykKKyAgICA+Pj4gY2hlY2tfbWV0aG9kKHRyZWUuaXRlcmZpbmQoInRhZyIpLl9fbmV4dF9fKQorICAgID4+PiBjaGVja19tZXRob2QodHJlZS5pdGVyZmluZCgiKiIpLl9fbmV4dF9fKQorCisgICAgVGhlc2UgYWxpYXNlcyBhcmUgcHJvdmlkZWQ6CisKKyAgICA+Pj4gYXNzZXJ0IEVULlhNTCA9PSBFVC5mcm9tc3RyaW5nCisgICAgPj4+IGFzc2VydCBFVC5QSSA9PSBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24KKyAgICA+Pj4gYXNzZXJ0IEVULlhNTFBhcnNlciA9PSBFVC5YTUxUcmVlQnVpbGRlcgorICAgICIiIgorCitkZWYgc2ltcGxlb3BzKCk6CisgICAgIiIiCiAgICAgQmFzaWMgbWV0aG9kIHNhbml0eSBjaGVja3MuCiAKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDEKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPGJvZHk+PHRhZy8+PC9ib2R5PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8Ym9keT48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoInRhZzIiKQorICAgID4+PiBlbGVtLmFwcGVuZChlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzxib2R5Pjx0YWcgLz48L2JvZHk+JworICAgID4+PiBlbGVtLmluc2VydCgwLCBlKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZzIgLz48dGFnIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKyAgICA+Pj4gZWxlbS5leHRlbmQoW2VdKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPGJvZHk+PHRhZyAvPjx0YWcyIC8+PC9ib2R5PicKKyAgICA+Pj4gZWxlbS5yZW1vdmUoZSkKKworICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtZW50KSAjIDEKICAgICAnPHRhZyBrZXk9InZhbHVlIiAvPicKICAgICA+Pj4gc3ViZWxlbWVudCA9IEVULkVsZW1lbnQoInN1YnRhZyIpCiAgICAgPj4+IGVsZW1lbnQuYXBwZW5kKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAgMgorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyAyCiAgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKICAgICA+Pj4gZWxlbWVudC5pbnNlcnQoMCwgc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDMKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgMwogICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JwogICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNAorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA0CiAgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjwvdGFnPicKICAgICA+Pj4gZWxlbWVudC5yZW1vdmUoc3ViZWxlbWVudCkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtZW50KSAjIDUKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpICMgNQogICAgICc8dGFnIGtleT0idmFsdWUiIC8+JwogICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICBWYWx1ZUVycm9yOiBsaXN0LnJlbW92ZSh4KTogeCBub3QgaW4gbGlzdAotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNgorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudCkgIyA2CiAgICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCisgICAgPj4+IGVsZW1lbnRbMDowXSA9IFtzdWJlbGVtZW50LCBzdWJlbGVtZW50LCBzdWJlbGVtZW50XQorICAgID4+PiBzZXJpYWxpemUoZWxlbWVudFsxXSkKKyAgICAnPHN1YnRhZyAvPicKKyAgICA+Pj4gZWxlbWVudFsxOjldID09IFtlbGVtZW50WzFdLCBlbGVtZW50WzJdXQorICAgIFRydWUKKyAgICA+Pj4gZWxlbWVudFs6OToyXSA9PSBbZWxlbWVudFswXSwgZWxlbWVudFsyXV0KKyAgICBUcnVlCisgICAgPj4+IGRlbCBlbGVtZW50WzE6Ml0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW1lbnQpCisgICAgJzx0YWcga2V5PSJ2YWx1ZSI+PHN1YnRhZyAvPjxzdWJ0YWcgLz48L3RhZz4nCisgICAgIiIiCisKK2RlZiBjZGF0YSgpOgorICAgICIiIgorICAgIFRlc3QgQ0RBVEEgaGFuZGxpbmcgKGV0YykuCisKKyAgICA+Pj4gc2VyaWFsaXplKEVULlhNTCgiPHRhZz5oZWxsbzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPiYjMTA0OyYjMTAxOyYjMTA4OyYjMTA4OyYjMTExOzwvdGFnPiIpKQorICAgICc8dGFnPmhlbGxvPC90YWc+JworICAgID4+PiBzZXJpYWxpemUoRVQuWE1MKCI8dGFnPjwhW0NEQVRBW2hlbGxvXV0+PC90YWc+IikpCisgICAgJzx0YWc+aGVsbG88L3RhZz4nCisgICAgIiIiCisKKyMgT25seSB3aXRoIFB5dGhvbiBpbXBsZW1lbnRhdGlvbgorZGVmIHNpbXBsZWZpbmQoKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmQgbWV0aG9kcyB1c2luZyB0aGUgZWxlbWVudHBhdGggZmFsbGJhY2suCisKKyAgICA+Pj4gZnJvbSB4bWwuZXRyZWUgaW1wb3J0IEVsZW1lbnRUcmVlCisKKyAgICA+Pj4gQ3VycmVudEVsZW1lbnRQYXRoID0gRWxlbWVudFRyZWUuRWxlbWVudFBhdGgKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFBhdGggPSBFbGVtZW50VHJlZS5fU2ltcGxlRWxlbWVudFBhdGgoKQorICAgID4+PiBlbGVtID0gRWxlbWVudFRyZWUuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRWxlbWVudFRyZWUuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorCisgICAgUGF0aCBzeW50YXggZG9lc24ndCB3b3JrIGluIHRoaXMgY2FzZS4KKworICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikKKyAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCisgICAgW10KKworICAgID4+PiBFbGVtZW50VHJlZS5FbGVtZW50UGF0aCA9IEN1cnJlbnRFbGVtZW50UGF0aAorICAgICIiIgorCitkZWYgZmluZCgpOgorICAgICIiIgorICAgIFRlc3QgZmluZCBtZXRob2RzIChpbmNsdWRpbmcgeHBhdGggc3ludGF4KS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCisgICAgJ3RhZycKKyAgICA+Pj4gZWxlbS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IGVsZW0uZmluZCgiLi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCIuL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoIi90YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiBlbGVtWzJdID0gRVQuWE1MKFNBTVBMRV9TRUNUSU9OKQorICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vbmV4dHRhZyIpLnRhZworICAgICduZXh0dGFnJworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZworICAgICd0YWcnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInRvZy9mb28iKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL25leHR0YWciKQorICAgICcnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vbmV4dHRhZyIsICJkZWZhdWx0IikKKyAgICAnJworICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQorICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCisgICAgJ2RlZmF1bHQnCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQorICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidG9nL2ZvbyIpCisgICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0b2cvZm9vIiwgImRlZmF1bHQiKQorICAgICdkZWZhdWx0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiLi90YWciKQorICAgICd0ZXh0JworICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgiL3RhZyIpCisgICAgJ3RleHQnCisgICAgPj4+IGVsZW0uZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKyAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZHRleHQoInNlY3Rpb24vdGFnIikKKyAgICAnc3VidGV4dCcKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuIikpCisgICAgWydib2R5J10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRvZyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidG9nL2ZvbyIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKiIpKQorICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnLCAndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi90YWciKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8qIikpCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLi8vKiIpKQorICAgIFsndGFnJywgJ25leHR0YWcnLCAnbmV4dHNlY3Rpb24nLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLyoiKSkKKyAgICBbJ3RhZycsICduZXh0dGFnJywgJ25leHRzZWN0aW9uJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLy8qIikpCisgICAgWyd0YWcnLCAnbmV4dHRhZycsICduZXh0c2VjdGlvbicsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovdGFnIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLi90YWciKSkKKyAgICBbJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi90YWciKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy4vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzXSIpKQorICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAY2xhc3M9J2EnXSIpKQorICAgIFsndGFnJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWdbQGNsYXNzPSdiJ10iKSkKKyAgICBbJ3RhZycsICd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZ1tAaWRdIikpCisgICAgWyd0YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3NlY3Rpb25bdGFnXSIpKQorICAgIFsnc2VjdGlvbiddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vc2VjdGlvbltlbGVtZW50XSIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi4vdGFnIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy4uL3RhZyIpKQorICAgIFsndGFnJywgJ3RhZyddCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi4vdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKworICAgIEZvbGxvd2luZyBleGFtcGxlIGlzIGludmFsaWQgaW4gMS4yLgorICAgIEEgbGVhZGluZyAnKicgaXMgYXNzdW1lZCBpbiAxLjMuCisKKyAgICA+Pj4gZWxlbS5maW5kYWxsKCJzZWN0aW9uLy8iKSA9PSBlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKQorICAgIFRydWUKKworICAgIEVUJ3MgUGF0aCBtb2R1bGUgaGFuZGxlcyB0aGlzIGNhc2UgaW5jb3JyZWN0bHk7IHRoaXMgZ2l2ZXMKKyAgICBhIHdhcm5pbmcgaW4gMS4zLCBhbmQgdGhlIGJlaGF2aW91ciB3aWxsIGJlIG1vZGlmaWVkIGluIDEuNC4KKworICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIvdGFnIikpCisgICAgWyd0YWcnLCAndGFnJ10KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCisgICAgW10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCisgICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3todHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKKyAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KKyAgICAiIiIKKworZGVmIGZpbGVfaW5pdCgpOgorICAgICIiIgorICAgID4+PiBpbXBvcnQgaW8KKworICAgID4+PiBzdHJpbmdmaWxlID0gaW8uQnl0ZXNJTyhTQU1QTEVfWE1MLmVuY29kZSgidXRmLTgiKSkKKyAgICA+Pj4gdHJlZSA9IEVULkVsZW1lbnRUcmVlKGZpbGU9c3RyaW5nZmlsZSkKKyAgICA+Pj4gdHJlZS5maW5kKCJ0YWciKS50YWcKKyAgICAndGFnJworICAgID4+PiB0cmVlLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCisgICAgJ3RhZycKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZmlsZT1TSU1QTEVfWE1MRklMRSkKKyAgICA+Pj4gdHJlZS5maW5kKCJlbGVtZW50IikudGFnCisgICAgJ2VsZW1lbnQnCisgICAgPj4+IHRyZWUuZmluZCgiZWxlbWVudC8uLi9lbXB0eS1lbGVtZW50IikudGFnCisgICAgJ2VtcHR5LWVsZW1lbnQnCisgICAgIiIiCisKK2RlZiBiYWRfZmluZCgpOgorICAgICIiIgorICAgIENoZWNrIGJhZCBvciB1bnN1cHBvcnRlZCBwYXRoIGV4cHJlc3Npb25zLgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKKyAgICA+Pj4gZWxlbS5maW5kYWxsKCIvdGFnIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgU3ludGF4RXJyb3I6IGNhbm5vdCB1c2UgYWJzb2x1dGUgcGF0aCBvbiBlbGVtZW50CisgICAgIiIiCisKK2RlZiBwYXRoX2NhY2hlKCk6CisgICAgIiIiCisgICAgQ2hlY2sgdGhhdCB0aGUgcGF0aCBjYWNoZSBiZWhhdmVzIHNhbmVseS4KKworICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDEwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gY2FjaGVfbGVuXzEwID0gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTApOiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCcuLycrc3RyKGkpKQorICAgID4+PiBsZW4oRVQuRWxlbWVudFBhdGguX2NhY2hlKSA9PSBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDIwKTogRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgnLi8nK3N0cihpKSkKKyAgICA+Pj4gbGVuKEVULkVsZW1lbnRQYXRoLl9jYWNoZSkgPiBjYWNoZV9sZW5fMTAKKyAgICBUcnVlCisgICAgPj4+IGZvciBpIGluIHJhbmdlKDYwMCk6IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoJy4vJytzdHIoaSkpCisgICAgPj4+IGxlbihFVC5FbGVtZW50UGF0aC5fY2FjaGUpIDwgNTAwCisgICAgVHJ1ZQorICAgICIiIgorCitkZWYgY29weSgpOgorICAgICIiIgorICAgIFRlc3QgY29weSBoYW5kbGluZyAoZXRjKS4KKworICAgID4+PiBpbXBvcnQgY29weQorICAgID4+PiBlMSA9IEVULlhNTCgiPHRhZz5oZWxsbzxmb28vPjwvdGFnPiIpCisgICAgPj4+IGUyID0gY29weS5jb3B5KGUxKQorICAgID4+PiBlMyA9IGNvcHkuZGVlcGNvcHkoZTEpCisgICAgPj4+IGUxLmZpbmQoImZvbyIpLnRhZyA9ICJiYXIiCisgICAgPj4+IHNlcmlhbGl6ZShlMSkKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMikKKyAgICAnPHRhZz5oZWxsbzxiYXIgLz48L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlMykKKyAgICAnPHRhZz5oZWxsbzxmb28gLz48L3RhZz4nCisKKyAgICAiIiIKKworZGVmIGF0dHJpYigpOgorICAgICIiIgorICAgIFRlc3QgYXR0cmlidXRlIGhhbmRsaW5nLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyAxLjEKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIsICJkZWZhdWx0IikgIyAxLjIKKyAgICAnZGVmYXVsdCcKKyAgICA+Pj4gZWxlbS5zZXQoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDEuMworICAgICd2YWx1ZScKKworICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDIuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyAyLjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gYXR0cmliID0geyJrZXkiOiAidmFsdWUifQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIiwgYXR0cmliKQorICAgID4+PiBhdHRyaWIuY2xlYXIoKSAjIGNoZWNrIGZvciBhbGlhc2luZyBpc3N1ZXMKKyAgICA+Pj4gZWxlbS5nZXQoImtleSIpICMgMy4xCisgICAgJ3ZhbHVlJworICAgID4+PiBlbGVtLmF0dHJpYiAjIDMuMgorICAgIHsna2V5JzogJ3ZhbHVlJ30KKworICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciLCAqKmF0dHJpYikKKyAgICA+Pj4gYXR0cmliLmNsZWFyKCkgIyBjaGVjayBmb3IgYWxpYXNpbmcgaXNzdWVzCisgICAgPj4+IGVsZW0uZ2V0KCJrZXkiKSAjIDQuMQorICAgICd2YWx1ZScKKyAgICA+Pj4gZWxlbS5hdHRyaWIgIyA0LjIKKyAgICB7J2tleSc6ICd2YWx1ZSd9CisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIsIHsia2V5IjogIm90aGVyIn0sIGtleT0idmFsdWUiKQorICAgID4+PiBlbGVtLmdldCgia2V5IikgIyA1LjEKKyAgICAndmFsdWUnCisgICAgPj4+IGVsZW0uYXR0cmliICMgNS4yCisgICAgeydrZXknOiAndmFsdWUnfQorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCd0ZXN0JykKKyAgICA+Pj4gZWxlbS50ZXh0ID0gImFhIgorICAgID4+PiBlbGVtLnNldCgndGVzdGEnLCAndGVzdHZhbCcpCisgICAgPj4+IGVsZW0uc2V0KCd0ZXN0YicsICd0ZXN0MicpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgYic8dGVzdCB0ZXN0YT0idGVzdHZhbCIgdGVzdGI9InRlc3QyIj5hYTwvdGVzdD4nCisgICAgPj4+IHNvcnRlZChlbGVtLmtleXMoKSkKKyAgICBbJ3Rlc3RhJywgJ3Rlc3RiJ10KKyAgICA+Pj4gc29ydGVkKGVsZW0uaXRlbXMoKSkKKyAgICBbKCd0ZXN0YScsICd0ZXN0dmFsJyksICgndGVzdGInLCAndGVzdDInKV0KKyAgICA+Pj4gZWxlbS5hdHRyaWJbJ3Rlc3RiJ10KKyAgICAndGVzdDInCisgICAgPj4+IGVsZW0uYXR0cmliWyd0ZXN0YiddID0gJ3Rlc3QxJworICAgID4+PiBlbGVtLmF0dHJpYlsndGVzdGMnXSA9ICd0ZXN0MicKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbSkKKyAgICBiJzx0ZXN0IHRlc3RhPSJ0ZXN0dmFsIiB0ZXN0Yj0idGVzdDEiIHRlc3RjPSJ0ZXN0MiI+YWE8L3Rlc3Q+JworICAgICIiIgorCitkZWYgbWFrZWVsZW1lbnQoKToKKyAgICAiIiIKKyAgICBUZXN0IG1ha2VlbGVtZW50IGhhbmRsaW5nLgorCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJ0YWciKQorICAgID4+PiBhdHRyaWIgPSB7ImtleSI6ICJ2YWx1ZSJ9CisgICAgPj4+IHN1YmVsZW0gPSBlbGVtLm1ha2VlbGVtZW50KCJzdWJ0YWciLCBhdHRyaWIpCisgICAgPj4+IGlmIHN1YmVsZW0uYXR0cmliIGlzIGF0dHJpYjoKKyAgICAuLi4gICAgIHByaW50KCJhdHRyaWIgYWxpYXNpbmciKQorICAgID4+PiBlbGVtLmFwcGVuZChzdWJlbGVtKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PC90YWc+JworCisgICAgPj4+IGVsZW0uY2xlYXIoKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyAvPicKKyAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbS5leHRlbmQoW3N1YmVsZW0sIHN1YmVsZW1dKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz48c3VidGFnIGtleT0idmFsdWUiIC8+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjxzdWJ0YWcga2V5PSJ2YWx1ZSIgLz48L3RhZz4nCisgICAgPj4+IGVsZW1bOl0gPSBbc3ViZWxlbV0KKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKyAgICA+Pj4gZWxlbVs6XSA9IHR1cGxlKFtzdWJlbGVtXSkKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+PHN1YnRhZyBrZXk9InZhbHVlIiAvPjwvdGFnPicKKworICAgICIiIgorCitkZWYgcGFyc2VmaWxlKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzaW5nIGZyb20gZmlsZS4KKworICAgID4+PiB0cmVlID0gRVQucGFyc2UoU0lNUExFX1hNTEZJTEUpCisgICAgPj4+IG5vcm1hbGl6ZV9jcmxmKHRyZWUpCisgICAgPj4+IHRyZWUud3JpdGUoc3lzLnN0ZG91dCwgZW5jb2Rpbmc9J3VuaWNvZGUnKQorICAgIDxyb290PgorICAgICAgIDxlbGVtZW50IGtleT0idmFsdWUiPnRleHQ8L2VsZW1lbnQ+CisgICAgICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICAgICAgPGVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L3Jvb3Q+CisgICAgPj4+IHRyZWUgPSBFVC5wYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKKyAgICA+Pj4gbm9ybWFsaXplX2NybGYodHJlZSkKKyAgICA+Pj4gdHJlZS53cml0ZShzeXMuc3Rkb3V0LCBlbmNvZGluZz0ndW5pY29kZScpCisgICAgPG5zMDpyb290IHhtbG5zOm5zMD0ibmFtZXNwYWNlIj4KKyAgICAgICA8bnMwOmVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvbnMwOmVsZW1lbnQ+CisgICAgICAgPG5zMDplbGVtZW50PnRleHQ8L25zMDplbGVtZW50PnRhaWwKKyAgICAgICA8bnMwOmVtcHR5LWVsZW1lbnQgLz4KKyAgICA8L25zMDpyb290PgorCisgICAgPj4+IHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSkgYXMgZjoKKyAgICAuLi4gICAgIGRhdGEgPSBmLnJlYWQoKQorCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpCisgICAgPj4+IHBhcnNlci52ZXJzaW9uICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICdFeHBhdCAuLi4nCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKworICAgID4+PiBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpICMgMS4yIGNvbXBhdGliaWxpdHkKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKHBhcnNlci5jbG9zZSgpKSkKKyAgICA8cm9vdD4KKyAgICAgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PgorICAgICAgIDxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbAorICAgICAgIDxlbXB0eS1lbGVtZW50IC8+CisgICAgPC9yb290PgorCisgICAgPj4+IHRhcmdldCA9IEVULlRyZWVCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD10YXJnZXQpCisgICAgPj4+IHBhcnNlci5mZWVkKGRhdGEpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShwYXJzZXIuY2xvc2UoKSkpCisgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKyAgICAiIiIKKworZGVmIHBhcnNlbGl0ZXJhbCgpOgorICAgICIiIgorICAgID4+PiBlbGVtZW50ID0gRVQuWE1MKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0LCBlbmNvZGluZz0ndW5pY29kZScpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0LCBlbmNvZGluZz0ndW5pY29kZScpCisgICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+CisgICAgPj4+IHNlcXVlbmNlID0gWyI8aHRtbD48Ym9keT4iLCAidGV4dDwvYm8iLCAiZHk+PC9odG1sPiJdCisgICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSkKKyAgICA+Pj4gRVQudG9zdHJpbmcoZWxlbWVudCkKKyAgICBiJzxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPicKKyAgICA+Pj4gYiIiLmpvaW4oRVQudG9zdHJpbmdsaXN0KGVsZW1lbnQpKQorICAgIGInPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgID4+PiBFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKQorICAgIGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cXG48aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iCisgICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBsZW4oaWRzKQorICAgIDAKKyAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5IGlkPSdib2R5Jz50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBsZW4oaWRzKQorICAgIDEKKyAgICA+Pj4gaWRzWyJib2R5Il0udGFnCisgICAgJ2JvZHknCisgICAgIiIiCisKK2RlZiBpdGVycGFyc2UoKToKKyAgICAiIiIKKyAgICBUZXN0IGl0ZXJwYXJzZSBpbnRlcmZhY2UuCisKKyAgICA+Pj4gaXRlcnBhcnNlID0gRVQuaXRlcnBhcnNlCisKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSkKKyAgICA+Pj4gYWN0aW9uLCBlbGVtID0gbmV4dChjb250ZXh0KQorICAgID4+PiBwcmludChhY3Rpb24sIGVsZW0udGFnKQorICAgIGVuZCBlbGVtZW50CisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludChhY3Rpb24sIGVsZW0udGFnKQorICAgIGVuZCBlbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorICAgID4+PiBjb250ZXh0LnJvb3QudGFnCisgICAgJ3Jvb3QnCisKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfTlNfWE1MRklMRSkKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50KGFjdGlvbiwgZWxlbS50YWcpCisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorCisgICAgPj4+IGV2ZW50cyA9ICgpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX1hNTEZJTEUsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50KGFjdGlvbiwgZWxlbS50YWcpCisKKyAgICA+Pj4gZXZlbnRzID0gKCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzPWV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIHByaW50KGFjdGlvbiwgZWxlbS50YWcpCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiKQorICAgID4+PiBjb250ZXh0ID0gaXRlcnBhcnNlKFNJTVBMRV9YTUxGSUxFLCBldmVudHMpCisgICAgPj4+IGZvciBhY3Rpb24sIGVsZW0gaW4gY29udGV4dDoKKyAgICAuLi4gICBwcmludChhY3Rpb24sIGVsZW0udGFnKQorICAgIHN0YXJ0IHJvb3QKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbGVtZW50CisgICAgZW5kIGVsZW1lbnQKKyAgICBzdGFydCBlbXB0eS1lbGVtZW50CisgICAgZW5kIGVtcHR5LWVsZW1lbnQKKyAgICBlbmQgcm9vdAorCisgICAgPj4+IGV2ZW50cyA9ICgic3RhcnQiLCAiZW5kIiwgInN0YXJ0LW5zIiwgImVuZC1ucyIpCisgICAgPj4+IGNvbnRleHQgPSBpdGVycGFyc2UoU0lNUExFX05TX1hNTEZJTEUsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgIGlmIGFjdGlvbiBpbiAoInN0YXJ0IiwgImVuZCIpOgorICAgIC4uLiAgICAgcHJpbnQoYWN0aW9uLCBlbGVtLnRhZykKKyAgICAuLi4gICBlbHNlOgorICAgIC4uLiAgICAgcHJpbnQoYWN0aW9uLCBlbGVtKQorICAgIHN0YXJ0LW5zICgnJywgJ25hbWVzcGFjZScpCisgICAgc3RhcnQge25hbWVzcGFjZX1yb290CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbXB0eS1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9cm9vdAorICAgIGVuZC1ucyBOb25lCisKKyAgICA+Pj4gZXZlbnRzID0gKCJzdGFydCIsICJlbmQiLCAiYm9ndXMiKQorICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyYiIpIGFzIGY6CisgICAgLi4uICAgICBpdGVycGFyc2UoZiwgZXZlbnRzKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBWYWx1ZUVycm9yOiB1bmtub3duIGV2ZW50ICdib2d1cycKKworICAgID4+PiBpbXBvcnQgaW8KKworICAgID4+PiBzb3VyY2UgPSBpby5CeXRlc0lPKAorICAgIC4uLiAgICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+XFxuIgorICAgIC4uLiAgICAgYiI8Ym9keSB4bWxucz0naHR0cDovLyYjMjMzO2ZmYm90Lm9yZy9ucydcXG4iCisgICAgLi4uICAgICBiIiAgICAgIHhtbG5zOmNsXFx4ZTk9J2h0dHA6Ly9lZmZib3Qub3JnL25zJz50ZXh0PC9ib2R5PlxcbiIpCisgICAgPj4+IGV2ZW50cyA9ICgic3RhcnQtbnMiLCkKKyAgICA+Pj4gY29udGV4dCA9IGl0ZXJwYXJzZShzb3VyY2UsIGV2ZW50cykKKyAgICA+Pj4gZm9yIGFjdGlvbiwgZWxlbSBpbiBjb250ZXh0OgorICAgIC4uLiAgICAgcHJpbnQoYWN0aW9uLCBlbGVtKQorICAgIHN0YXJ0LW5zICgnJywgJ2h0dHA6Ly9cXHhlOWZmYm90Lm9yZy9ucycpCisgICAgc3RhcnQtbnMgKCdjbFxceGU5JywgJ2h0dHA6Ly9lZmZib3Qub3JnL25zJykKKworICAgID4+PiBzb3VyY2UgPSBpby5TdHJpbmdJTygiPGRvY3VtZW50IC8+anVuayIpCisgICAgPj4+IHRyeToKKyAgICAuLi4gICBmb3IgYWN0aW9uLCBlbGVtIGluIGl0ZXJwYXJzZShzb3VyY2UpOgorICAgIC4uLiAgICAgcHJpbnQoYWN0aW9uLCBlbGVtLnRhZykKKyAgICAuLi4gZXhjZXB0IEVULlBhcnNlRXJyb3IgYXMgdjoKKyAgICAuLi4gICBwcmludCh2KQorICAgIGp1bmsgYWZ0ZXIgZG9jdW1lbnQgZWxlbWVudDogbGluZSAxLCBjb2x1bW4gMTIKKyAgICAiIiIKKworZGVmIHdyaXRlZmlsZSgpOgorICAgICIiIgorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gZWxlbS50ZXh0ID0gInRleHQiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPnRleHQ8L3RhZz4nCisgICAgPj4+IEVULlN1YkVsZW1lbnQoZWxlbSwgInN1YnRhZyIpLnRleHQgPSAic3VidGV4dCIKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pCisgICAgJzx0YWc+dGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPjwvdGFnPicKKworICAgIFRlc3QgdGFnIHN1cHByZXNzaW9uCisgICAgPj4+IGVsZW0udGFnID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAndGV4dDxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICA+Pj4gZWxlbS5pbnNlcnQoMCwgRVQuQ29tbWVudCgiY29tbWVudCIpKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgICAgICMgYXNzdW1lcyAxLjMKKyAgICAndGV4dDwhLS1jb21tZW50LS0+PHN1YnRhZz5zdWJ0ZXh0PC9zdWJ0YWc+JworICAgID4+PiBlbGVtWzBdID0gRVQuUEkoImtleSIsICJ2YWx1ZSIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICd0ZXh0PD9rZXkgdmFsdWU/PjxzdWJ0YWc+c3VidGV4dDwvc3VidGFnPicKKyAgICAiIiIKKworZGVmIGN1c3RvbV9idWlsZGVyKCk6CisgICAgIiIiCisgICAgVGVzdCBwYXJzZXIgdy4gY3VzdG9tIGJ1aWxkZXIuCisKKyAgICA+Pj4gd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFKSBhcyBmOgorICAgIC4uLiAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgPj4+IGNsYXNzIEJ1aWxkZXI6CisgICAgLi4uICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWIpOgorICAgIC4uLiAgICAgICAgIHByaW50KCJzdGFydCIsIHRhZykKKyAgICAuLi4gICAgIGRlZiBlbmQoc2VsZiwgdGFnKToKKyAgICAuLi4gICAgICAgICBwcmludCgiZW5kIiwgdGFnKQorICAgIC4uLiAgICAgZGVmIGRhdGEoc2VsZiwgdGV4dCk6CisgICAgLi4uICAgICAgICAgcGFzcworICAgID4+PiBidWlsZGVyID0gQnVpbGRlcigpCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9YnVpbGRlcikKKyAgICA+Pj4gcGFyc2VyLmZlZWQoZGF0YSkKKyAgICBzdGFydCByb290CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZWxlbWVudAorICAgIGVuZCBlbGVtZW50CisgICAgc3RhcnQgZW1wdHktZWxlbWVudAorICAgIGVuZCBlbXB0eS1lbGVtZW50CisgICAgZW5kIHJvb3QKKworICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX05TX1hNTEZJTEUpIGFzIGY6CisgICAgLi4uICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICA+Pj4gY2xhc3MgQnVpbGRlcjoKKyAgICAuLi4gICAgIGRlZiBzdGFydChzZWxmLCB0YWcsIGF0dHJpYik6CisgICAgLi4uICAgICAgICAgcHJpbnQoInN0YXJ0IiwgdGFnKQorICAgIC4uLiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgIC4uLiAgICAgICAgIHByaW50KCJlbmQiLCB0YWcpCisgICAgLi4uICAgICBkZWYgZGF0YShzZWxmLCB0ZXh0KToKKyAgICAuLi4gICAgICAgICBwYXNzCisgICAgLi4uICAgICBkZWYgcGkoc2VsZiwgdGFyZ2V0LCBkYXRhKToKKyAgICAuLi4gICAgICAgICBwcmludCgicGkiLCB0YXJnZXQsIHJlcHIoZGF0YSkpCisgICAgLi4uICAgICBkZWYgY29tbWVudChzZWxmLCBkYXRhKToKKyAgICAuLi4gICAgICAgICBwcmludCgiY29tbWVudCIsIHJlcHIoZGF0YSkpCisgICAgPj4+IGJ1aWxkZXIgPSBCdWlsZGVyKCkKKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKHRhcmdldD1idWlsZGVyKQorICAgID4+PiBwYXJzZXIuZmVlZChkYXRhKQorICAgIHBpIHBpICdkYXRhJworICAgIGNvbW1lbnQgJyBjb21tZW50ICcKKyAgICBzdGFydCB7bmFtZXNwYWNlfXJvb3QKKyAgICBzdGFydCB7bmFtZXNwYWNlfWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1lbGVtZW50CisgICAgc3RhcnQge25hbWVzcGFjZX1lbGVtZW50CisgICAgZW5kIHtuYW1lc3BhY2V9ZWxlbWVudAorICAgIHN0YXJ0IHtuYW1lc3BhY2V9ZW1wdHktZWxlbWVudAorICAgIGVuZCB7bmFtZXNwYWNlfWVtcHR5LWVsZW1lbnQKKyAgICBlbmQge25hbWVzcGFjZX1yb290CisKKyAgICAiIiIKKworZGVmIGdldGNoaWxkcmVuKCk6CisgICAgIiIiCisgICAgVGVzdCBFbGVtZW50LmdldGNoaWxkcmVuKCkKKworICAgID4+PiB3aXRoIG9wZW4oU0lNUExFX1hNTEZJTEUsICJyYiIpIGFzIGY6CisgICAgLi4uICAgICB0cmVlID0gRVQucGFyc2UoZikKKyAgICA+Pj4gZm9yIGVsZW0gaW4gdHJlZS5nZXRyb290KCkuaXRlcigpOgorICAgIC4uLiAgICAgc3VtbWFyaXplX2xpc3QoZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIFsnZWxlbWVudCcsICdlbGVtZW50JywgJ2VtcHR5LWVsZW1lbnQnXQorICAgIFtdCisgICAgW10KKyAgICBbXQorICAgID4+PiBmb3IgZWxlbSBpbiB0cmVlLmdldGl0ZXJhdG9yKCk6CisgICAgLi4uICAgICBzdW1tYXJpemVfbGlzdChlbGVtLmdldGNoaWxkcmVuKCkpCisgICAgWydlbGVtZW50JywgJ2VsZW1lbnQnLCAnZW1wdHktZWxlbWVudCddCisgICAgW10KKyAgICBbXQorICAgIFtdCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDMKKyAgICA+Pj4gbGVuKGVsZW1bMl0uZ2V0Y2hpbGRyZW4oKSkKKyAgICAxCisgICAgPj4+IGVsZW1bOl0gPT0gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPSBlbGVtWzBdCisgICAgPj4+IGNoaWxkMiA9IGVsZW1bMl0KKyAgICA+Pj4gZGVsIGVsZW1bMToyXQorICAgID4+PiBsZW4oZWxlbS5nZXRjaGlsZHJlbigpKQorICAgIDIKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBUcnVlCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzFdCisgICAgVHJ1ZQorICAgID4+PiBlbGVtWzA6Ml0gPSBbY2hpbGQyLCBjaGlsZDFdCisgICAgPj4+IGNoaWxkMiA9PSBlbGVtWzBdCisgICAgVHJ1ZQorICAgID4+PiBjaGlsZDEgPT0gZWxlbVsxXQorICAgIFRydWUKKyAgICA+Pj4gY2hpbGQxID09IGVsZW1bMF0KKyAgICBGYWxzZQorICAgID4+PiBlbGVtLmNsZWFyKCkKKyAgICA+Pj4gZWxlbS5nZXRjaGlsZHJlbigpCisgICAgW10KKyAgICAiIiIKKworZGVmIHdyaXRlc3RyaW5nKCk6CisgICAgIiIiCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGVsZW0pCisgICAgYic8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4nCisgICAgPj4+IGVsZW0gPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQorICAgID4+PiBFVC50b3N0cmluZyhlbGVtKQorICAgIGInPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+JworICAgICIiIgorCitkZWYgY2hlY2tfZW5jb2RpbmcoZW5jb2RpbmcpOgorICAgICIiIgorICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygidXMtYXNjaWkiKQorICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJjcDQzNyIpCisgICAgPj4+IGNoZWNrX2VuY29kaW5nKCJtYWMtcm9tYW4iKQorICAgICIiIgorICAgIEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz48eG1sIC8+IiAlIGVuY29kaW5nKQorCitkZWYgZW5jb2RpbmcoKToKKyAgICByIiIiCisgICAgVGVzdCBlbmNvZGluZyBpc3N1ZXMuCisKKyAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCisgICAgPj4+IGVsZW0udGV4dCA9ICJhYmMiCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgYic8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgYic8dGFnPmFiYzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICBiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbjx0YWc+YWJjPC90YWc+IgorCisgICAgPj4+IGVsZW0udGV4dCA9ICI8JlwiXCc+IgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICBiJzx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJ1cy1hc2NpaSIpICMgY2RhdGEgY2hhcmFjdGVycworICAgIGInPHRhZz4mbHQ7JmFtcDsiXCcmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiKQorICAgIGInPD94bWwgdmVyc2lvbj1cJzEuMFwnIGVuY29kaW5nPVwnaXNvLTg4NTktMVwnPz5cbjx0YWc+Jmx0OyZhbXA7IlwnJmd0OzwvdGFnPicKKworICAgID4+PiBlbGVtLmF0dHJpYlsia2V5Il0gPSAiPCZcIlwnPiIKKyAgICA+Pj4gZWxlbS50ZXh0ID0gTm9uZQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkKKyAgICAnPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKQorICAgIGInPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgIGInPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpCisgICAgYic8P3htbCB2ZXJzaW9uPVwnMS4wXCcgZW5jb2Rpbmc9XCdpc28tODg1OS0xXCc/PlxuPHRhZyBrZXk9IiZsdDsmYW1wOyZxdW90O1wnJmd0OyIgLz4nCisKKyAgICA+Pj4gZWxlbS50ZXh0ID0gJ1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLmF0dHJpYi5jbGVhcigpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnPlx4ZTVceGY2XHhmNiZsdDsmZ3Q7PC90YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICBiJzx0YWc+XHhjM1x4YTVceGMzXHhiNlx4YzNceGI2Jmx0OyZndDs8L3RhZz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgIGInPHRhZz4mIzIyOTsmIzI0NjsmIzI0NjsmbHQ7Jmd0OzwvdGFnPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICBiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz5cbjx0YWc+XHhlNVx4ZjZceGY2Jmx0OyZndDs8L3RhZz4iCisKKyAgICA+Pj4gZWxlbS5hdHRyaWJbImtleSJdID0gJ1x4ZTVceGY2XHhmNjw+JworICAgID4+PiBlbGVtLnRleHQgPSBOb25lCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKQorICAgICc8dGFnIGtleT0iXHhlNVx4ZjZceGY2Jmx0OyZndDsiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InV0Zi04IikKKyAgICBiJzx0YWcga2V5PSJceGMzXHhhNVx4YzNceGI2XHhjM1x4YjYmbHQ7Jmd0OyIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgIGInPHRhZyBrZXk9IiYjMjI5OyYjMjQ2OyYjMjQ2OyZsdDsmZ3Q7IiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPSJpc28tODg1OS0xIikKKyAgICBiJzw/eG1sIHZlcnNpb249XCcxLjBcJyBlbmNvZGluZz1cJ2lzby04ODU5LTFcJz8+XG48dGFnIGtleT0iXHhlNVx4ZjZceGY2Jmx0OyZndDsiIC8+JworICAgICIiIgorCitkZWYgbWV0aG9kcygpOgorICAgIHIiIiIKKyAgICBUZXN0IHNlcmlhbGl6YXRpb24gbWV0aG9kcy4KKworICAgID4+PiBlID0gRVQuWE1MKCI8aHRtbD48bGluay8+PHNjcmlwdD4xICZsdDsgMjwvc2NyaXB0PjwvaHRtbD4iKQorICAgID4+PiBlLnRhaWwgPSAiXG4iCisgICAgPj4+IHNlcmlhbGl6ZShlKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Tm9uZSkKKyAgICAnPGh0bWw+PGxpbmsgLz48c2NyaXB0PjEgJmx0OyAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ4bWwiKQorICAgICc8aHRtbD48bGluayAvPjxzY3JpcHQ+MSAmbHQ7IDI8L3NjcmlwdD48L2h0bWw+XG4nCisgICAgPj4+IHNlcmlhbGl6ZShlLCBtZXRob2Q9Imh0bWwiKQorICAgICc8aHRtbD48bGluaz48c2NyaXB0PjEgPCAyPC9zY3JpcHQ+PC9odG1sPlxuJworICAgID4+PiBzZXJpYWxpemUoZSwgbWV0aG9kPSJ0ZXh0IikKKyAgICAnMSA8IDJcbicKKyAgICAiIiIKKworZGVmIGl0ZXJhdG9ycygpOgorICAgICIiIgorICAgIFRlc3QgaXRlcmF0b3JzLgorCisgICAgPj4+IGUgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRoaXMgaXMgYSA8aT5wYXJhZ3JhcGg8L2k+LjwvYm9keT4uLjwvaHRtbD4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlLml0ZXIoKSkKKyAgICBbJ2h0bWwnLCAnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZS5maW5kKCJib2R5IikuaXRlcigpKQorICAgIFsnYm9keScsICdpJ10KKyAgICA+Pj4gc3VtbWFyaXplKG5leHQoZS5pdGVyKCkpKQorICAgICdodG1sJworICAgID4+PiAiIi5qb2luKGUuaXRlcnRleHQoKSkKKyAgICAndGhpcyBpcyBhIHBhcmFncmFwaC4uLicKKyAgICA+Pj4gIiIuam9pbihlLmZpbmQoImJvZHkiKS5pdGVydGV4dCgpKQorICAgICd0aGlzIGlzIGEgcGFyYWdyYXBoLicKKyAgICA+Pj4gbmV4dChlLml0ZXJ0ZXh0KCkpCisgICAgJ3RoaXMgaXMgYSAnCisKKyAgICBNZXRob2QgaXRlcnBhcnNlIHNob3VsZCByZXR1cm4gYW4gaXRlcmF0b3IuIFNlZSBidWcgNjQ3Mi4KKworICAgID4+PiBzb3VyY2VmaWxlID0gc2VyaWFsaXplKGUsIHRvX3N0cmluZz1GYWxzZSkKKyAgICA+Pj4gbmV4dChFVC5pdGVycGFyc2Uoc291cmNlZmlsZSkpICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICgnZW5kJywgPEVsZW1lbnQgJ2knIGF0IDB4Li4uPikKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoTm9uZSkKKyAgICA+Pj4gdHJlZS5pdGVyKCkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgQXR0cmlidXRlRXJyb3I6ICdOb25lVHlwZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2l0ZXInCisgICAgIiIiCisKK0VOVElUWV9YTUwgPSAiIiJcCis8IURPQ1RZUEUgcG9pbnRzIFsKKzwhRU5USVRZICUgdXNlci1lbnRpdGllcyBTWVNURU0gJ3VzZXItZW50aXRpZXMueG1sJz4KKyV1c2VyLWVudGl0aWVzOworXT4KKzxkb2N1bWVudD4mZW50aXR5OzwvZG9jdW1lbnQ+CisiIiIKKworZGVmIGVudGl0eSgpOgorICAgICIiIgorICAgIFRlc3QgZW50aXR5IGhhbmRsaW5nLgorCisgICAgMSkgZ29vZCBlbnRpdGllcworCisgICAgPj4+IGUgPSBFVC5YTUwoIjxkb2N1bWVudCB0aXRsZT0nJiN4ODIzMDsnPnRlc3Q8L2RvY3VtZW50PiIpCisgICAgPj4+IHNlcmlhbGl6ZShlLCBlbmNvZGluZz0idXMtYXNjaWkiKQorICAgIGInPGRvY3VtZW50IHRpdGxlPSImIzMzMzI4OyI+dGVzdDwvZG9jdW1lbnQ+JworICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvY3VtZW50IHRpdGxlPSJcdTgyMzAiPnRlc3Q8L2RvY3VtZW50PicKKworICAgIDIpIGJhZCBlbnRpdGllcworCisgICAgPj4+IG5vcm1hbGl6ZV9leGNlcHRpb24oRVQuWE1MLCAiPGRvY3VtZW50PiZlbnRpdHk7PC9kb2N1bWVudD4iKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBQYXJzZUVycm9yOiB1bmRlZmluZWQgZW50aXR5OiBsaW5lIDEsIGNvbHVtbiAxMAorCisgICAgPj4+IG5vcm1hbGl6ZV9leGNlcHRpb24oRVQuWE1MLCBFTlRJVFlfWE1MKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBQYXJzZUVycm9yOiB1bmRlZmluZWQgZW50aXR5ICZlbnRpdHk7OiBsaW5lIDUsIGNvbHVtbiAxMAorCisgICAgMykgY3VzdG9tIGVudGl0eQorCisgICAgPj4+IHBhcnNlciA9IEVULlhNTFBhcnNlcigpCisgICAgPj4+IHBhcnNlci5lbnRpdHlbImVudGl0eSJdID0gInRleHQiCisgICAgPj4+IHBhcnNlci5mZWVkKEVOVElUWV9YTUwpCisgICAgPj4+IHJvb3QgPSBwYXJzZXIuY2xvc2UoKQorICAgID4+PiBzZXJpYWxpemUocm9vdCkKKyAgICAnPGRvY3VtZW50PnRleHQ8L2RvY3VtZW50PicKKyAgICAiIiIKKworZGVmIGVycm9yKHhtbCk6CisgICAgIiIiCisKKyAgICBUZXN0IGVycm9yIGhhbmRsaW5nLgorCisgICAgPj4+IGlzc3ViY2xhc3MoRVQuUGFyc2VFcnJvciwgU3ludGF4RXJyb3IpCisgICAgVHJ1ZQorICAgID4+PiBlcnJvcigiZm9vIikucG9zaXRpb24KKyAgICAoMSwgMCkKKyAgICA+Pj4gZXJyb3IoIjx0YWc+JmZvbzs8L3RhZz4iKS5wb3NpdGlvbgorICAgICgxLCA1KQorICAgID4+PiBlcnJvcigiZm9vYmFyPCIpLnBvc2l0aW9uCisgICAgKDEsIDYpCisKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIEVULlhNTCh4bWwpCisgICAgZXhjZXB0IEVULlBhcnNlRXJyb3I6CisgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsxXQorCitkZWYgbmFtZXNwYWNlKCk6CisgICAgIiIiCisgICAgVGVzdCBuYW1lc3BhY2UgaXNzdWVzLgorCisgICAgMSkgeG1sIG5hbWVzcGFjZQorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjx0YWcgeG1sOmxhbmc9J2VuJyAvPiIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMQorICAgICc8dGFnIHhtbDpsYW5nPSJlbiIgLz4nCisKKyAgICAyKSBvdGhlciAid2VsbC1rbm93biIgbmFtZXNwYWNlcworCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIycgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIiAvPicKKworICAgID4+PiBlbGVtID0gRVQuWE1MKCI8aHRtbDpodG1sIHhtbG5zOmh0bWw9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnIC8+IikKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMi4yCisgICAgJzxodG1sOmh0bWwgeG1sbnM6aHRtbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgLz4nCisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgiPHNvYXA6RW52ZWxvcGUgeG1sbnM6c29hcD0naHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9lbnZlbG9wZScgLz4iKQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjMKKyAgICAnPG5zMDpFbnZlbG9wZSB4bWxuczpuczA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUiIC8+JworCisgICAgMykgdW5rbm93biBuYW1lc3BhY2VzCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKKyAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGVsZW0pKQorICAgIDxuczA6Ym9keSB4bWxuczpuczA9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KKyAgICAgIDxuczA6dGFnPnRleHQ8L25zMDp0YWc+CisgICAgICA8bnMwOnRhZyAvPgorICAgICAgPG5zMDpzZWN0aW9uPgorICAgICAgICA8bnMwOnRhZz5zdWJ0ZXh0PC9uczA6dGFnPgorICAgICAgPC9uczA6c2VjdGlvbj4KKyAgICA8L25zMDpib2R5PgogICAgICIiIgogCiBkZWYgcW5hbWUoKToKQEAgLTEwOCw1NCArMTExMCw1MyBAQAogCiAgICAgMSkgZGVjb3JhdGVkIHRhZ3MKIAotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKICAgICA+Pj4gZWxlbSA9IEVULkVsZW1lbnQoInt1cml9dGFnIikKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDEuMQorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjEKICAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JwogICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgie3VyaX10YWciKSkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDEuMgorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjIKICAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIC8+JwogICAgID4+PiBlbGVtID0gRVQuRWxlbWVudChFVC5RTmFtZSgidXJpIiwgInRhZyIpKQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW0pICMgMS4zCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDEuMwogICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgLz4nCiAgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KEVULlFOYW1lKCJ1cmkiLCAidGFnIikpCiAgICAgPj4+IHN1YmVsZW0gPSBFVC5TdWJFbGVtZW50KGVsZW0sIEVULlFOYW1lKCJ1cmkiLCAidGFnMSIpKQogICAgID4+PiBzdWJlbGVtID0gRVQuU3ViRWxlbWVudChlbGVtLCBFVC5RTmFtZSgidXJpIiwgInRhZzIiKSkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDEuNAorICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAxLjQKICAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiPjxuczA6dGFnMSAvPjxuczA6dGFnMiAvPjwvbnMwOnRhZz4nCiAKICAgICAyKSBkZWNvcmF0ZWQgYXR0cmlidXRlcwogCiAgICAgPj4+IGVsZW0uY2xlYXIoKQogICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9ICJ2YWx1ZSIKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDIuMQotICAgICc8bnMwOnRhZyBuczA6a2V5PSJ2YWx1ZSIgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAyLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9InZhbHVlIiAvPicKIAogICAgID4+PiBlbGVtLmNsZWFyKCkKICAgICA+Pj4gZWxlbS5hdHRyaWJbRVQuUU5hbWUoInt1cml9a2V5IildID0gInZhbHVlIgotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW0pICMgMi4yCi0gICAgJzxuczA6dGFnIG5zMDprZXk9InZhbHVlIiB4bWxuczpuczA9InVyaSIgLz4nCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIDIuMgorICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSIgbnMwOmtleT0idmFsdWUiIC8+JwogCiAgICAgMykgZGVjb3JhdGVkIHZhbHVlcyBhcmUgbm90IGNvbnZlcnRlZCBieSBkZWZhdWx0LCBidXQgdGhlCiAgICAgICAgUU5hbWUgd3JhcHBlciBjYW4gYmUgdXNlZCBmb3IgdmFsdWVzCiAKICAgICA+Pj4gZWxlbS5jbGVhcigpCiAgICAgPj4+IGVsZW0uYXR0cmliWyJ7dXJpfWtleSJdID0gInt1cml9dmFsdWUiCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbSkgIyAzLjEKLSAgICAnPG5zMDp0YWcgbnMwOmtleT0ie3VyaX12YWx1ZSIgeG1sbnM6bnMwPSJ1cmkiIC8+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjEKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIG5zMDprZXk9Int1cml9dmFsdWUiIC8+JwogCiAgICAgPj4+IGVsZW0uY2xlYXIoKQogICAgID4+PiBlbGVtLmF0dHJpYlsie3VyaX1rZXkiXSA9IEVULlFOYW1lKCJ7dXJpfXZhbHVlIikKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDMuMgotICAgICc8bnMwOnRhZyBuczA6a2V5PSJuczA6dmFsdWUiIHhtbG5zOm5zMD0idXJpIiAvPicKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgMy4yCisgICAgJzxuczA6dGFnIHhtbG5zOm5zMD0idXJpIiBuczA6a2V5PSJuczA6dmFsdWUiIC8+JwogCiAgICAgPj4+IGVsZW0uY2xlYXIoKQogICAgID4+PiBzdWJlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgICA+Pj4gc3ViZWxlbS5hdHRyaWJbInt1cmkxfWtleSJdID0gRVQuUU5hbWUoInt1cmkyfXZhbHVlIikKICAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKICAgICA+Pj4gZWxlbS5hcHBlbmQoc3ViZWxlbSkKLSAgICA+Pj4gc2VyaWFsaXplKEVULCBlbGVtKSAjIDMuMwotICAgICc8bnMwOnRhZyB4bWxuczpuczA9InVyaSI+PHRhZyBuczE6a2V5PSJuczI6dmFsdWUiIHhtbG5zOm5zMT0idXJpMSIgeG1sbnM6bnMyPSJ1cmkyIiAvPjx0YWcgbnMxOmtleT0ibnMyOnZhbHVlIiB4bWxuczpuczE9InVyaTEiIHhtbG5zOm5zMj0idXJpMiIgLz48L25zMDp0YWc+JworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyAzLjMKKyAgICAnPG5zMDp0YWcgeG1sbnM6bnMwPSJ1cmkiIHhtbG5zOm5zMT0idXJpMSIgeG1sbnM6bnMyPSJ1cmkyIj48dGFnIG5zMTprZXk9Im5zMjp2YWx1ZSIgLz48dGFnIG5zMTprZXk9Im5zMjp2YWx1ZSIgLz48L25zMDp0YWc+JwogCiAgICAgNCkgRGlyZWN0IFFOYW1lIHRlc3RzCiAKQEAgLTE3NiwxMjQgKzExNzcsODYgQEAKICAgICBUcnVlCiAgICAgIiIiCiAKLWRlZiBmaW5kKCk6CitkZWYgZG9jdHlwZV9wdWJsaWMoKToKICAgICAiIiIKLSAgICBUZXN0IGZpbmQgbWV0aG9kcyAoaW5jbHVkaW5nIHhwYXRoIHN5bnRheCkuCisgICAgVGVzdCBQVUJMSUMgZG9jdHlwZS4KIAotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKKyAgICA+Pj4gZWxlbSA9IEVULlhNTCgnPCFET0NUWVBFIGh0bWwgUFVCTElDJworICAgIC4uLiAgICcgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIicKKyAgICAuLi4gICAnICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nCisgICAgLi4uICAgJzxodG1sPnRleHQ8L2h0bWw+JykKIAotICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUwpCi0gICAgPj4+IGVsZW0uZmluZCgidGFnIikudGFnCi0gICAgJ3RhZycKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgidGFnIikudGFnCi0gICAgJ3RhZycKLSAgICA+Pj4gZWxlbS5maW5kKCJzZWN0aW9uL3RhZyIpLnRhZwotICAgICd0YWcnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCi0gICAgJ3RhZycKLSAgICA+Pj4gZWxlbS5maW5kdGV4dCgidGFnIikKLSAgICAndGV4dCcKLSAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIikKLSAgICA+Pj4gZWxlbS5maW5kdGV4dCgidG9nIiwgImRlZmF1bHQiKQotICAgICdkZWZhdWx0JwotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgidGFnIikKLSAgICAndGV4dCcKLSAgICA+Pj4gZWxlbS5maW5kdGV4dCgic2VjdGlvbi90YWciKQotICAgICdzdWJ0ZXh0JwotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kdGV4dCgic2VjdGlvbi90YWciKQotICAgICdzdWJ0ZXh0JwotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInRhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKiIpKQotICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuLy90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy90YWciKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8uLy8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqLy8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovdGFnIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLi90YWciKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vLi90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIvdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZGFsbCgiLi90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBlbGVtID0gRVQuWE1MKFNBTVBMRV9YTUxfTlMpCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCi0gICAgW10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnIikpCi0gICAgWyd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3todHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKLSAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJ10KICAgICAiIiIKIAotZGVmIHBhcnNlbGl0ZXJhbCgpOgotICAgIHIiIiIKLQotICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUgYXMgRVQKLQotICAgID4+PiBlbGVtZW50ID0gRVQuWE1MKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQotICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgotICAgID4+PiBlbGVtZW50ID0gRVQuZnJvbXN0cmluZygiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3lzLnN0ZG91dCkKLSAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KLSAgICA+Pj4gcHJpbnQoRVQudG9zdHJpbmcoZWxlbWVudCkpCi0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IHByaW50KHJlcHIoRVQudG9zdHJpbmcoZWxlbWVudCwgImFzY2lpIikpKQotICAgIGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nYXNjaWknPz5cbjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIKLSAgICA+Pj4gXywgaWRzID0gRVQuWE1MSUQoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IGxlbihpZHMpCi0gICAgMAotICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHkgaWQ9J2JvZHknPnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IGxlbihpZHMpCi0gICAgMQotICAgID4+PiBpZHNbImJvZHkiXS50YWcKLSAgICAnYm9keScKK2RlZiB4cGF0aF90b2tlbml6ZXIocCk6CiAgICAgIiIiCisgICAgVGVzdCB0aGUgWFBhdGggdG9rZW5pemVyLgogCisgICAgPj4+ICMgdGVzdHMgZnJvbSB0aGUgeG1sIHNwZWNpZmljYXRpb24KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIqIikKKyAgICBbJyonXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoInRleHQoKSIpCisgICAgWyd0ZXh0JywgJygpJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJAbmFtZSIpCisgICAgWydAJywgJ25hbWUnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIkAqIikKKyAgICBbJ0AnLCAnKiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigicGFyYVsxXSIpCisgICAgWydwYXJhJywgJ1snLCAnMScsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJwYXJhW2xhc3QoKV0iKQorICAgIFsncGFyYScsICdbJywgJ2xhc3QnLCAnKCknLCAnXSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiKi9wYXJhIikKKyAgICBbJyonLCAnLycsICdwYXJhJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIvZG9jL2NoYXB0ZXJbNV0vc2VjdGlvblsyXSIpCisgICAgWycvJywgJ2RvYycsICcvJywgJ2NoYXB0ZXInLCAnWycsICc1JywgJ10nLCAnLycsICdzZWN0aW9uJywgJ1snLCAnMicsICddJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJjaGFwdGVyLy9wYXJhIikKKyAgICBbJ2NoYXB0ZXInLCAnLy8nLCAncGFyYSddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLy9wYXJhIikKKyAgICBbJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi8vb2xpc3QvaXRlbSIpCisgICAgWycvLycsICdvbGlzdCcsICcvJywgJ2l0ZW0nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4iKQorICAgIFsnLiddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiLi8vcGFyYSIpCisgICAgWycuJywgJy8vJywgJ3BhcmEnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4uIikKKyAgICBbJy4uJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLi9AbGFuZyIpCisgICAgWycuLicsICcvJywgJ0AnLCAnbGFuZyddCisgICAgPj4+IHhwYXRoX3Rva2VuaXplcigiY2hhcHRlclt0aXRsZV0iKQorICAgIFsnY2hhcHRlcicsICdbJywgJ3RpdGxlJywgJ10nXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoImVtcGxveWVlW0BzZWNyZXRhcnkgYW5kIEBhc3Npc3RhbnRdIikKKyAgICBbJ2VtcGxveWVlJywgJ1snLCAnQCcsICdzZWNyZXRhcnknLCAnJywgJ2FuZCcsICcnLCAnQCcsICdhc3Npc3RhbnQnLCAnXSddCiAKLWRlZiBjaGVja19lbmNvZGluZyhFVCwgZW5jb2RpbmcpOgorICAgID4+PiAjIGFkZGl0aW9uYWwgdGVzdHMKKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCJ7aHR0cDovL3NwYW19ZWdnIikKKyAgICBbJ3todHRwOi8vc3BhbX1lZ2cnXQorICAgID4+PiB4cGF0aF90b2tlbml6ZXIoIi4vc3BhbS5lZ2ciKQorICAgIFsnLicsICcvJywgJ3NwYW0uZWdnJ10KKyAgICA+Pj4geHBhdGhfdG9rZW5pemVyKCIuLy97aHR0cDovL3NwYW19ZWdnIikKKyAgICBbJy4nLCAnLy8nLCAne2h0dHA6Ly9zcGFtfWVnZyddCiAgICAgIiIiCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgIG91dCA9IFtdCisgICAgZm9yIG9wLCB0YWcgaW4gRWxlbWVudFBhdGgueHBhdGhfdG9rZW5pemVyKHApOgorICAgICAgICBvdXQuYXBwZW5kKG9wIG9yIHRhZykKKyAgICByZXR1cm4gb3V0CiAKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJhc2NpaSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAidXMtYXNjaWkiKQotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgImlzby04ODU5LTEiKQotICAgID4+PiBjaGVja19lbmNvZGluZyhFVCwgImlzby04ODU5LTE1IikKLSAgICA+Pj4gY2hlY2tfZW5jb2RpbmcoRVQsICJjcDQzNyIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKEVULCAibWFjLXJvbWFuIikKK2RlZiBwcm9jZXNzaW5naW5zdHJ1Y3Rpb24oKToKICAgICAiIiIKLSAgICBFVC5YTUwoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+PHhtbCAvPiIgJSBlbmNvZGluZykKKyAgICBUZXN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiBkaXJlY3RseQogCi1kZWYgY2hlY2tfaXNzdWU2MjMzKCk6Ci0gICAgIiIiCi0gICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50VHJlZSBhcyBFVAorICAgID4+PiBFVC50b3N0cmluZyhFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oJ3Rlc3QnLCAnaW5zdHJ1Y3Rpb24nKSkKKyAgICBiJzw/dGVzdCBpbnN0cnVjdGlvbj8+JworICAgID4+PiBFVC50b3N0cmluZyhFVC5QSSgndGVzdCcsICdpbnN0cnVjdGlvbicpKQorICAgIGInPD90ZXN0IGluc3RydWN0aW9uPz4nCiAKLSAgICA+Pj4gZSA9IEVULlhNTCgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz48Ym9keT50XHhlM2c8L2JvZHk+IikKLSAgICA+Pj4gRVQudG9zdHJpbmcoZSwgJ2FzY2lpJykKLSAgICBiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2FzY2lpJz8+XFxuPGJvZHk+dCYjMjI3O2c8L2JvZHk+IgotICAgID4+PiBlID0gRVQuWE1MKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PGJvZHk+dFx4ZTNnPC9ib2R5PiIuZW5jb2RlKCdpc28tODg1OS0xJykpICMgY3JlYXRlIGJ5dGUgc3RyaW5nIHdpdGggdGhlIHJpZ2h0IGVuY29kaW5nCi0gICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCi0gICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKyAgICBJc3N1ZSAjMjc0NgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJzx0ZXN0aW5nJj4nKSkKKyAgICBiJzw/dGVzdCA8dGVzdGluZyY+Pz4nCisgICAgPj4+IEVULnRvc3RyaW5nKEVULlBJKCd0ZXN0JywgJzx0ZXN0aW5nJj5ceGUzJyksICdsYXRpbjEnKQorICAgIGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nbGF0aW4xJz8+XFxuPD90ZXN0IDx0ZXN0aW5nJj5cXHhlMz8+IgogICAgICIiIgogCiAjCkBAIC0zMjgsNiArMTI5MSwxNCBAQAogCiBYSU5DTFVERVsiY291bnQudHh0Il0gPSAiMzI0Mzg3IgogCitYSU5DTFVERVsiQzJiLnhtbCJdID0gIiIiXAorPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8ZG9jdW1lbnQgeG1sbnM6eGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWEluY2x1ZGUiPgorICA8cD5UaGlzIGRvY3VtZW50IGhhcyBiZWVuIDxlbT5hY2Nlc3NlZDwvZW0+CisgIDx4aTppbmNsdWRlIGhyZWY9ImNvdW50LnR4dCIgcGFyc2U9InRleHQiLz4gdGltZXMuPC9wPgorPC9kb2N1bWVudD4KKyIiIgorCiBYSU5DTFVERVsiQzMueG1sIl0gPSAiIiJcCiA8P3htbCB2ZXJzaW9uPScxLjAnPz4KIDxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CkBAIC0zNjAsOSArMTMzMSw5IEBACiA8P3htbCB2ZXJzaW9uPScxLjAnPz4KIDxkb2N1bWVudCB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CiAgIDxwPkV4YW1wbGUuPC9wPgotICA8eGk6aW5jbHVkZSBocmVmPSJzYW1wbGVzL3NpbXBsZS54bWwiLz4KKyAgPHhpOmluY2x1ZGUgaHJlZj0ie30iLz4KIDwvZG9jdW1lbnQ+Ci0iIiIKKyIiIi5mb3JtYXQoaHRtbC5lc2NhcGUoU0lNUExFX1hNTEZJTEUsIFRydWUpKQogCiBkZWYgeGluY2x1ZGVfbG9hZGVyKGhyZWYsIHBhcnNlPSJ4bWwiLCBlbmNvZGluZz1Ob25lKToKICAgICB0cnk6CkBAIC0zODMsNyArMTM1NCw3IEBACiAKICAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMxLnhtbCIpCiAgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIHhpbmNsdWRlX2xvYWRlcikKLSAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKEVULCBkb2N1bWVudCkpICMgQzEKKyAgICA+Pj4gcHJpbnQoc2VyaWFsaXplKGRvY3VtZW50KSkgIyBDMQogICAgIDxkb2N1bWVudD4KICAgICAgIDxwPjEyMCBNeiBpcyBhZGVxdWF0ZSBmb3IgYW4gYXZlcmFnZSBob21lIHVzZXIuPC9wPgogICAgICAgPGRpc2NsYWltZXI+CkBAIC0zOTcsMTcgKzEzNjgsMjcgQEAKIAogICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzIueG1sIikKICAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQotICAgID4+PiBwcmludChzZXJpYWxpemUoRVQsIGRvY3VtZW50KSkgIyBDMgorICAgID4+PiBwcmludChzZXJpYWxpemUoZG9jdW1lbnQpKSAjIEMyCiAgICAgPGRvY3VtZW50PgogICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiBhY2Nlc3NlZAogICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KICAgICA8L2RvY3VtZW50PgogCisgICAgVGV4dHVhbCBpbmNsdXNpb24gYWZ0ZXIgc2libGluZyBlbGVtZW50IChiYXNlZCBvbiBtb2RpZmllZCBYSW5jbHVkZSBDLjIpCisKKyAgICA+Pj4gZG9jdW1lbnQgPSB4aW5jbHVkZV9sb2FkZXIoIkMyYi54bWwiKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShkb2N1bWVudCkpICMgQzJiCisgICAgPGRvY3VtZW50PgorICAgICAgPHA+VGhpcyBkb2N1bWVudCBoYXMgYmVlbiA8ZW0+YWNjZXNzZWQ8L2VtPgorICAgICAgMzI0Mzg3IHRpbWVzLjwvcD4KKyAgICA8L2RvY3VtZW50PgorCiAgICAgVGV4dHVhbCBpbmNsdXNpb24gb2YgWE1MIGV4YW1wbGUgKFhJbmNsdWRlIEMuMykKIAogICAgID4+PiBkb2N1bWVudCA9IHhpbmNsdWRlX2xvYWRlcigiQzMueG1sIikKICAgICA+Pj4gRWxlbWVudEluY2x1ZGUuaW5jbHVkZShkb2N1bWVudCwgeGluY2x1ZGVfbG9hZGVyKQotICAgID4+PiBwcmludChzZXJpYWxpemUoRVQsIGRvY3VtZW50KSkgIyBDMworICAgID4+PiBwcmludChzZXJpYWxpemUoZG9jdW1lbnQpKSAjIEMzCiAgICAgPGRvY3VtZW50PgogICAgICAgPHA+VGhlIGZvbGxvd2luZyBpcyB0aGUgc291cmNlIG9mIHRoZSAiZGF0YS54bWwiIHJlc291cmNlOjwvcD4KICAgICAgIDxleGFtcGxlPiZsdDs/eG1sIHZlcnNpb249JzEuMCc/Jmd0OwpAQCAtNDI0LDEzICsxNDA1LDUxMCBAQAogICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCB4aW5jbHVkZV9sb2FkZXIpCiAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgIElPRXJyb3I6IHJlc291cmNlIG5vdCBmb3VuZAotICAgID4+PiAjIHByaW50IHNlcmlhbGl6ZShFVCwgZG9jdW1lbnQpICMgQzUKKyAgICA+Pj4gIyBwcmludChzZXJpYWxpemUoZG9jdW1lbnQpKSAjIEM1CisgICAgIiIiCisKK2RlZiB4aW5jbHVkZV9kZWZhdWx0KCk6CisgICAgIiIiCisgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50SW5jbHVkZQorCisgICAgPj4+IGRvY3VtZW50ID0geGluY2x1ZGVfbG9hZGVyKCJkZWZhdWx0LnhtbCIpCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQpCisgICAgPj4+IHByaW50KHNlcmlhbGl6ZShkb2N1bWVudCkpICMgZGVmYXVsdAorICAgIDxkb2N1bWVudD4KKyAgICAgIDxwPkV4YW1wbGUuPC9wPgorICAgICAgPHJvb3Q+CisgICAgICAgPGVsZW1lbnQga2V5PSJ2YWx1ZSI+dGV4dDwvZWxlbWVudD4KKyAgICAgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgICAgICA8ZW1wdHktZWxlbWVudCAvPgorICAgIDwvcm9vdD4KKyAgICA8L2RvY3VtZW50PgorICAgICIiIgorCisjCisjIGJhZGx5IGZvcm1hdHRlZCB4aTppbmNsdWRlIHRhZ3MKKworWElOQ0xVREVfQkFEID0ge30KKworWElOQ0xVREVfQkFEWyJCMS54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRvY3VtZW50IHhtbG5zOnhpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlIj4KKyAgPHA+MTIwIE16IGlzIGFkZXF1YXRlIGZvciBhbiBhdmVyYWdlIGhvbWUgdXNlci48L3A+CisgIDx4aTppbmNsdWRlIGhyZWY9ImRpc2NsYWltZXIueG1sIiBwYXJzZT0iQkFEX1RZUEUiLz4KKzwvZG9jdW1lbnQ+CisiIiIKKworWElOQ0xVREVfQkFEWyJCMi54bWwiXSA9ICIiIlwKKzw/eG1sIHZlcnNpb249JzEuMCc/PgorPGRpdiB4bWxuczp4aT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YSW5jbHVkZSI+CisgICAgPHhpOmZhbGxiYWNrPjwveGk6ZmFsbGJhY2s+Cis8L2Rpdj4KKyIiIgorCitkZWYgeGluY2x1ZGVfZmFpbHVyZXMoKToKKyAgICByIiIiCisgICAgVGVzdCBmYWlsdXJlIHRvIGxvY2F0ZSBpbmNsdWRlZCBYTUwgZmlsZS4KKworICAgID4+PiBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudEluY2x1ZGUKKworICAgID4+PiBkZWYgbm9uZV9sb2FkZXIoaHJlZiwgcGFyc2VyLCBlbmNvZGluZz1Ob25lKToKKyAgICAuLi4gICAgIHJldHVybiBOb25lCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVbIkMxLnhtbCJdKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIHhtbC5ldHJlZS5FbGVtZW50SW5jbHVkZS5GYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2Rpc2NsYWltZXIueG1sJyBhcyAneG1sJworCisgICAgVGVzdCBmYWlsdXJlIHRvIGxvY2F0ZSBpbmNsdWRlZCB0ZXh0IGZpbGUuCisKKyAgICA+Pj4gZG9jdW1lbnQgPSBFVC5YTUwoWElOQ0xVREVbIkMyLnhtbCJdKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIHhtbC5ldHJlZS5FbGVtZW50SW5jbHVkZS5GYXRhbEluY2x1ZGVFcnJvcjogY2Fubm90IGxvYWQgJ2NvdW50LnR4dCcgYXMgJ3RleHQnCisKKyAgICBUZXN0IGJhZCBwYXJzZSB0eXBlLgorCisgICAgPj4+IGRvY3VtZW50ID0gRVQuWE1MKFhJTkNMVURFX0JBRFsiQjEueG1sIl0pCisgICAgPj4+IEVsZW1lbnRJbmNsdWRlLmluY2x1ZGUoZG9jdW1lbnQsIGxvYWRlcj1ub25lX2xvYWRlcikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgeG1sLmV0cmVlLkVsZW1lbnRJbmNsdWRlLkZhdGFsSW5jbHVkZUVycm9yOiB1bmtub3duIHBhcnNlIHR5cGUgaW4geGk6aW5jbHVkZSB0YWcgKCdCQURfVFlQRScpCisKKyAgICBUZXN0IHhpOmZhbGxiYWNrIG91dHNpZGUgeGk6aW5jbHVkZS4KKworICAgID4+PiBkb2N1bWVudCA9IEVULlhNTChYSU5DTFVERV9CQURbIkIyLnhtbCJdKQorICAgID4+PiBFbGVtZW50SW5jbHVkZS5pbmNsdWRlKGRvY3VtZW50LCBsb2FkZXI9bm9uZV9sb2FkZXIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIHhtbC5ldHJlZS5FbGVtZW50SW5jbHVkZS5GYXRhbEluY2x1ZGVFcnJvcjogeGk6ZmFsbGJhY2sgdGFnIG11c3QgYmUgY2hpbGQgb2YgeGk6aW5jbHVkZSAoJ3todHRwOi8vd3d3LnczLm9yZy8yMDAxL1hJbmNsdWRlfWZhbGxiYWNrJykKKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByZXBvcnRlZCBidWdzCisKK2RlZiBidWdfeG1sdG9vbGtpdDIxKCk6CisgICAgIiIiCisKKyAgICBtYXJzaGFsbGVyIGdpdmVzIG9ic2N1cmUgZXJyb3JzIGZvciBub24tc3RyaW5nIHZhbHVlcworCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgdGFnCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGV4dCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0ZXh0CisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0udGFpbCA9IDEyMworICAgID4+PiBzZXJpYWxpemUoZWxlbSkgIyB0YWlsCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQorICAgID4+PiBlbGVtID0gRVQuRWxlbWVudCgiZWxlbSIpCisgICAgPj4+IGVsZW0uc2V0KDEyMywgIjEyMyIpCisgICAgPj4+IHNlcmlhbGl6ZShlbGVtKSAjIGF0dHJpYnV0ZSBrZXkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgVHlwZUVycm9yOiBjYW5ub3Qgc2VyaWFsaXplIDEyMyAodHlwZSBpbnQpCisgICAgPj4+IGVsZW0gPSBFVC5FbGVtZW50KCJlbGVtIikKKyAgICA+Pj4gZWxlbS5zZXQoIjEyMyIsIDEyMykKKyAgICA+Pj4gc2VyaWFsaXplKGVsZW0pICMgYXR0cmlidXRlIHZhbHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFR5cGVFcnJvcjogY2Fubm90IHNlcmlhbGl6ZSAxMjMgKHR5cGUgaW50KQogCiAgICAgIiIiCiAKLWRlZiB0ZXN0X21haW4oKToKK2RlZiBidWdfeG1sdG9vbGtpdDI1KCk6CisgICAgIiIiCisKKyAgICB0eXBvIGluIEVsZW1lbnRUcmVlLmZpbmR0ZXh0CisKKyAgICA+Pj4gZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiB0cmVlID0gRVQuRWxlbWVudFRyZWUoZWxlbSkKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgidGFnIikKKyAgICAndGV4dCcKKyAgICA+Pj4gdHJlZS5maW5kdGV4dCgic2VjdGlvbi90YWciKQorICAgICdzdWJ0ZXh0JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDI4KCk6CisgICAgIiIiCisKKyAgICAuLy90YWcgY2F1c2VzIGV4Y2VwdGlvbnMKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QodHJlZS5maW5kYWxsKCIuLy90aGVhZCIpKQorICAgIFtdCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KHRyZWUuZmluZGFsbCgiLi8vdGJvZHkiKSkKKyAgICBbJ3Rib2R5J10KKworICAgICIiIgorCitkZWYgYnVnX3htbHRvb2xraXRYMSgpOgorICAgICIiIgorCisgICAgZHVtcCgpIGRvZXNuJ3QgZmx1c2ggdGhlIG91dHB1dCBidWZmZXIKKworICAgID4+PiB0cmVlID0gRVQuWE1MKCI8ZG9jPjx0YWJsZT48dGJvZHkvPjwvdGFibGU+PC9kb2M+IikKKyAgICA+Pj4gRVQuZHVtcCh0cmVlKTsgcHJpbnQoInRhaWwiKQorICAgIDxkb2M+PHRhYmxlPjx0Ym9keSAvPjwvdGFibGU+PC9kb2M+CisgICAgdGFpbAorCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDM5KCk6CisgICAgIiIiCisKKyAgICBub24tYXNjaWkgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzIGRvZXNuJ3Qgd29yaworCisgICAgPj4+IHRyZWUgPSBFVC5YTUwoYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc28tODg1OS0xJz8+PHRcXHhlNGcgLz4iKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgIGInPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuWE1MKGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0YWcgXFx4ZTR0dHI9J3YmIzIyODtsdWUnIC8+IikKKyAgICA+Pj4gdHJlZS5hdHRyaWIKKyAgICB7J1xceGU0dHRyJzogJ3ZcXHhlNGx1ZSd9CisgICAgPj4+IEVULnRvc3RyaW5nKHRyZWUsICJ1dGYtOCIpCisgICAgYic8dGFnIFxceGMzXFx4YTR0dHI9InZcXHhjM1xceGE0bHVlIiAvPicKKworICAgID4+PiB0cmVlID0gRVQuWE1MKGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/Pjx0XFx4ZTRnPnRleHQ8L3RcXHhlNGc+IikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICBiJzx0XFx4YzNcXHhhNGc+dGV4dDwvdFxceGMzXFx4YTRnPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCgidFx1MDBlNGciKQorICAgID4+PiBFVC50b3N0cmluZyh0cmVlLCAidXRmLTgiKQorICAgIGInPHRcXHhjM1xceGE0ZyAvPicKKworICAgID4+PiB0cmVlID0gRVQuRWxlbWVudCgidGFnIikKKyAgICA+Pj4gdHJlZS5zZXQoIlx1MDBlNHR0ciIsICJ2XHUwMGU0bHVlIikKKyAgICA+Pj4gRVQudG9zdHJpbmcodHJlZSwgInV0Zi04IikKKyAgICBiJzx0YWcgXFx4YzNcXHhhNHR0cj0idlxceGMzXFx4YTRsdWUiIC8+JworCisgICAgIiIiCisKK2RlZiBidWdfeG1sdG9vbGtpdDU0KCk6CisgICAgIiIiCisKKyAgICBwcm9ibGVtcyBoYW5kbGluZyBpbnRlcm5hbGx5IGRlZmluZWQgZW50aXRpZXMKKworICAgID4+PiBlID0gRVQuWE1MKCI8IURPQ1RZUEUgZG9jIFs8IUVOVElUWSBsZG90cyAnJiN4ODIzMDsnPl0+PGRvYz4mbGRvdHM7PC9kb2M+IikKKyAgICA+Pj4gc2VyaWFsaXplKGUsIGVuY29kaW5nPSJ1cy1hc2NpaSIpCisgICAgYic8ZG9jPiYjMzMzMjg7PC9kb2M+JworICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPGRvYz5cdTgyMzA8L2RvYz4nCisKKyAgICAiIiIKKworZGVmIGJ1Z194bWx0b29sa2l0NTUoKToKKyAgICAiIiIKKworICAgIG1ha2Ugc3VyZSB3ZSdyZSByZXBvcnRpbmcgdGhlIGZpcnN0IGVycm9yLCBub3QgdGhlIGxhc3QKKworICAgID4+PiBub3JtYWxpemVfZXhjZXB0aW9uKEVULlhNTCwgYiI8IURPQ1RZUEUgZG9jIFNZU1RFTSAnZG9jLmR0ZCc+PGRvYz4mbGRvdHM7Jm5kb3RzOyZyZG90czs8L2RvYz4iKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICBQYXJzZUVycm9yOiB1bmRlZmluZWQgZW50aXR5ICZsZG90czs6IGxpbmUgMSwgY29sdW1uIDM2CisKKyAgICAiIiIKKworY2xhc3MgRXhjZXB0aW9uRmlsZToKKyAgICBkZWYgcmVhZChzZWxmLCB4KToKKyAgICAgICAgcmFpc2UgSU9FcnJvcgorCitkZWYgeG1sdG9vbGtpdDYwKCk6CisgICAgIiIiCisKKyAgICBIYW5kbGUgY3Jhc2ggaW4gc3RyZWFtIHNvdXJjZS4KKyAgICA+Pj4gdHJlZSA9IEVULnBhcnNlKEV4Y2VwdGlvbkZpbGUoKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgSU9FcnJvcgorCisgICAgIiIiCisKK1hNTFRPT0xLSVQ2Ml9ET0MgPSAiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbiBTWVNURU0gInBhcC12MTUtMjAwMS0wMS0zMS5kdGQiIFtdPgorPHBhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbj4KKzxzdWJkb2MtYWJzdHJhY3Q+Cis8cGFyYWdyYXBoIGlkPSJBLTAwMDEiIGx2bD0iMCI+QSBuZXcgY3VsdGl2YXIgb2YgQmVnb25pYSBwbGFudCBuYW1lZCAmbHNxdW87QkNUOTgwMUJFRyZyc3F1bzsuPC9wYXJhZ3JhcGg+Cis8L3N1YmRvYy1hYnN0cmFjdD4KKzwvcGF0ZW50LWFwcGxpY2F0aW9uLXB1YmxpY2F0aW9uPiIiIgorCisKK2RlZiB4bWx0b29sa2l0NjIoKToKKyAgICAiIiIKKworICAgIERvbid0IGNyYXNoIHdoZW4gdXNpbmcgY3VzdG9tIGVudGl0aWVzLgorCisgICAgPj4+IHhtbHRvb2xraXQ2MigpCisgICAgJ0EgbmV3IGN1bHRpdmFyIG9mIEJlZ29uaWEgcGxhbnQgbmFtZWQgXHUyMDE4QkNUOTgwMUJFR1x1MjAxOS4nCisKKyAgICAiIiIKKyAgICBFTlRJVElFUyA9IHsncnNxdW8nOiAnXHUyMDE5JywgJ2xzcXVvJzogJ1x1MjAxOCd9CisgICAgcGFyc2VyID0gRVQuWE1MVHJlZUJ1aWxkZXIoKQorICAgIHBhcnNlci5lbnRpdHkudXBkYXRlKEVOVElUSUVTKQorICAgIHBhcnNlci5mZWVkKFhNTFRPT0xLSVQ2Ml9ET0MpCisgICAgdCA9IHBhcnNlci5jbG9zZSgpCisgICAgcmV0dXJuIHQuZmluZCgnLi8vcGFyYWdyYXBoJykudGV4dAorCitkZWYgeG1sdG9vbGtpdDYzKCk6CisgICAgIiIiCisKKyAgICBDaGVjayByZWZlcmVuY2UgbGVhay4KKyAgICA+Pj4geG1sdG9vbGtpdDYzKCkKKyAgICA+Pj4gY291bnQgPSBzeXMuZ2V0cmVmY291bnQoTm9uZSkKKyAgICA+Pj4gZm9yIGkgaW4gcmFuZ2UoMTAwMCk6CisgICAgLi4uICAgICB4bWx0b29sa2l0NjMoKQorICAgID4+PiBzeXMuZ2V0cmVmY291bnQoTm9uZSkgLSBjb3VudAorICAgIDAKKworICAgICIiIgorICAgIHRyZWUgPSBFVC5UcmVlQnVpbGRlcigpCisgICAgdHJlZS5zdGFydCgidGFnIiwge30pCisgICAgdHJlZS5kYXRhKCJ0ZXh0IikKKyAgICB0cmVlLmVuZCgidGFnIikKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK2RlZiBidWdfMjAwNzA4X25ld2xpbmUoKToKKyAgICByIiIiCisKKyAgICBQcmVzZXJ2ZSBuZXdsaW5lcyBpbiBhdHRyaWJ1dGVzLgorCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCdTb21lVGFnJywgdGV4dD0iZGVmIF9mKCk6XG4gIHJldHVybiAzXG4iKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgIGInPFNvbWVUYWcgdGV4dD0iZGVmIF9mKCk6JiMxMDsgIHJldHVybiAzJiMxMDsiIC8+JworICAgID4+PiBFVC5YTUwoRVQudG9zdHJpbmcoZSkpLmdldCgidGV4dCIpCisgICAgJ2RlZiBfZigpOlxuICByZXR1cm4gM1xuJworICAgID4+PiBFVC50b3N0cmluZyhFVC5YTUwoRVQudG9zdHJpbmcoZSkpKQorICAgIGInPFNvbWVUYWcgdGV4dD0iZGVmIF9mKCk6JiMxMDsgIHJldHVybiAzJiMxMDsiIC8+JworCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA4X2Nsb3NlKCk6CisgICAgIiIiCisKKyAgICBUZXN0IGRlZmF1bHQgYnVpbGRlci4KKyAgICA+Pj4gcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkgIyBkZWZhdWx0CisgICAgPj4+IHBhcnNlci5mZWVkKCI8ZWxlbWVudD5zb21lIHRleHQ8L2VsZW1lbnQ+IikKKyAgICA+Pj4gc3VtbWFyaXplKHBhcnNlci5jbG9zZSgpKQorICAgICdlbGVtZW50JworCisgICAgVGVzdCBjdXN0b20gYnVpbGRlci4KKyAgICA+Pj4gY2xhc3MgRWNob1RhcmdldDoKKyAgICAuLi4gICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gRVQuRWxlbWVudCgiZWxlbWVudCIpICMgc2ltdWxhdGUgcm9vdAorICAgID4+PiBwYXJzZXIgPSBFVC5YTUxQYXJzZXIoRWNob1RhcmdldCgpKQorICAgID4+PiBwYXJzZXIuZmVlZCgiPGVsZW1lbnQ+c29tZSB0ZXh0PC9lbGVtZW50PiIpCisgICAgPj4+IHN1bW1hcml6ZShwYXJzZXIuY2xvc2UoKSkKKyAgICAnZWxlbWVudCcKKworICAgICIiIgorCitkZWYgYnVnXzIwMDcwOV9kZWZhdWx0X25hbWVzcGFjZSgpOgorICAgICIiIgorCisgICAgPj4+IGUgPSBFVC5FbGVtZW50KCJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzZXJpYWxpemUoZSwgZGVmYXVsdF9uYW1lc3BhY2U9ImRlZmF1bHQiKSAjIDEKKyAgICAnPGVsZW0geG1sbnM9ImRlZmF1bHQiPjxlbGVtIC8+PC9lbGVtPicKKworICAgID4+PiBlID0gRVQuRWxlbWVudCgie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJ7ZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gcyA9IEVULlN1YkVsZW1lbnQoZSwgIntub3QtZGVmYXVsdH1lbGVtIikKKyAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAyCisgICAgJzxlbGVtIHhtbG5zPSJkZWZhdWx0IiB4bWxuczpuczE9Im5vdC1kZWZhdWx0Ij48ZWxlbSAvPjxuczE6ZWxlbSAvPjwvZWxlbT4nCisKKyAgICA+Pj4gZSA9IEVULkVsZW1lbnQoIntkZWZhdWx0fWVsZW0iKQorICAgID4+PiBzID0gRVQuU3ViRWxlbWVudChlLCAie2RlZmF1bHR9ZWxlbSIpCisgICAgPj4+IHMgPSBFVC5TdWJFbGVtZW50KGUsICJlbGVtIikgIyB1bnByZWZpeGVkIG5hbWUKKyAgICA+Pj4gc2VyaWFsaXplKGUsIGRlZmF1bHRfbmFtZXNwYWNlPSJkZWZhdWx0IikgIyAzCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIFZhbHVlRXJyb3I6IGNhbm5vdCB1c2Ugbm9uLXF1YWxpZmllZCBuYW1lcyB3aXRoIGRlZmF1bHRfbmFtZXNwYWNlIG9wdGlvbgorCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X3JlZ2lzdGVyX25hbWVzcGFjZSgpOgorICAgICIiIgorCisgICAgPj4+IEVULnRvc3RyaW5nKEVULkVsZW1lbnQoIntodHRwOi8vbmFtZXNwYWNlLmludmFsaWQvZG9lcy9ub3QvZXhpc3QvfXRpdGxlIikpCisgICAgYic8bnMwOnRpdGxlIHhtbG5zOm5zMD0iaHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0LyIgLz4nCisgICAgPj4+IEVULnJlZ2lzdGVyX25hbWVzcGFjZSgiZm9vIiwgImh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iKQorICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL25hbWVzcGFjZS5pbnZhbGlkL2RvZXMvbm90L2V4aXN0L310aXRsZSIpKQorICAgIGInPGZvbzp0aXRsZSB4bWxuczpmb289Imh0dHA6Ly9uYW1lc3BhY2UuaW52YWxpZC9kb2VzL25vdC9leGlzdC8iIC8+JworCisgICAgQW5kIHRoZSBEdWJsaW4gQ29yZSBuYW1lc3BhY2UgaXMgaW4gdGhlIGRlZmF1bHQgbGlzdDoKKworICAgID4+PiBFVC50b3N0cmluZyhFVC5FbGVtZW50KCJ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS99dGl0bGUiKSkKKyAgICBiJzxkYzp0aXRsZSB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIC8+JworCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X2VsZW1lbnRfY29tbWVudCgpOgorICAgICIiIgorCisgICAgTm90IHN1cmUgaWYgdGhpcyBjYW4gYmUgZml4ZWQsIHJlYWxseSAoc2luY2UgdGhlIHNlcmlhbGl6ZXIgbmVlZHMKKyAgICBFVC5Db21tZW50LCBub3QgY0VULmNvbW1lbnQpLgorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYS5hcHBlbmQoRVQuQ29tbWVudCgnZm9vJykpCisgICAgPj4+IGFbMF0udGFnID09IEVULkNvbW1lbnQKKyAgICBUcnVlCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBhLmFwcGVuZChFVC5QSSgnZm9vJykpCisgICAgPj4+IGFbMF0udGFnID09IEVULlBJCisgICAgVHJ1ZQorCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X2VsZW1lbnRfaW5zZXJ0KCk6CisgICAgIiIiCisKKyAgICA+Pj4gYSA9IEVULkVsZW1lbnQoJ2EnKQorICAgID4+PiBiID0gRVQuU3ViRWxlbWVudChhLCAnYicpCisgICAgPj4+IGMgPSBFVC5TdWJFbGVtZW50KGEsICdjJykKKyAgICA+Pj4gZCA9IEVULkVsZW1lbnQoJ2QnKQorICAgID4+PiBhLmluc2VydCgwLCBkKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChhKQorICAgIFsnZCcsICdiJywgJ2MnXQorICAgID4+PiBhLmluc2VydCgtMSwgZCkKKyAgICA+Pj4gc3VtbWFyaXplX2xpc3QoYSkKKyAgICBbJ2QnLCAnYicsICdkJywgJ2MnXQorCisgICAgIiIiCisKK2RlZiBidWdfMjAwNzA5X2l0ZXJfY29tbWVudCgpOgorICAgICIiIgorCisgICAgPj4+IGEgPSBFVC5FbGVtZW50KCdhJykKKyAgICA+Pj4gYiA9IEVULlN1YkVsZW1lbnQoYSwgJ2InKQorICAgID4+PiBjb21tZW50X2IgPSBFVC5Db21tZW50KCJURVNULWIiKQorICAgID4+PiBiLmFwcGVuZChjb21tZW50X2IpCisgICAgPj4+IHN1bW1hcml6ZV9saXN0KGEuaXRlcihFVC5Db21tZW50KSkKKyAgICBbJzxDb21tZW50PiddCisKKyAgICAiIiIKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyByZXBvcnRlZCBvbiBidWdzLnB5dGhvbi5vcmcKKworZGVmIGJ1Z18xNTM0NjMwKCk6CisgICAgIiIiCisKKyAgICA+Pj4gYm9iID0gRVQuVHJlZUJ1aWxkZXIoKQorICAgID4+PiBlID0gYm9iLmRhdGEoImRhdGEiKQorICAgID4+PiBlID0gYm9iLnN0YXJ0KCJ0YWciLCB7fSkKKyAgICA+Pj4gZSA9IGJvYi5lbmQoInRhZyIpCisgICAgPj4+IGUgPSBib2IuY2xvc2UoKQorICAgID4+PiBzZXJpYWxpemUoZSkKKyAgICAnPHRhZyAvPicKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWU2MjMzKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULlhNTChiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J3V0Zi04Jz8+PGJvZHk+dFxceGMzXFx4YTNnPC9ib2R5PiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCisgICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKyAgICA+Pj4gZSA9IEVULlhNTChiIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J2lzby04ODU5LTEnPz48Ym9keT50XFx4ZTNnPC9ib2R5PiIpCisgICAgPj4+IEVULnRvc3RyaW5nKGUsICdhc2NpaScpCisgICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/Plxcbjxib2R5PnQmIzIyNztnPC9ib2R5PiIKKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWUzMTUxKCk6CisgICAgIiIiCisKKyAgICA+Pj4gZSA9IEVULlhNTCgnPHByZWZpeDpsb2NhbG5hbWUgeG1sbnM6cHJlZml4PSIke3N0dWZmfSIvPicpCisgICAgPj4+IGUudGFnCisgICAgJ3ske3N0dWZmfX1sb2NhbG5hbWUnCisgICAgPj4+IHQgPSBFVC5FbGVtZW50VHJlZShlKQorICAgID4+PiBFVC50b3N0cmluZyhlKQorICAgIGInPG5zMDpsb2NhbG5hbWUgeG1sbnM6bnMwPSIke3N0dWZmfSIgLz4nCisKKyAgICAiIiIKKworZGVmIGNoZWNrX2lzc3VlNjU2NSgpOgorICAgICIiIgorCisgICAgPj4+IGVsZW0gPSBFVC5YTUwoIjxib2R5Pjx0YWcvPjwvYm9keT4iKQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJ10KKyAgICA+Pj4gbmV3ZWxlbSA9IEVULlhNTChTQU1QTEVfWE1MKQorICAgID4+PiBlbGVtWzpdID0gbmV3ZWxlbVs6XQorICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtKQorICAgIFsndGFnJywgJ3RhZycsICdzZWN0aW9uJ10KKworICAgICIiIgorCitkZWYgY2hlY2tfaXNzdWUxMDc3NygpOgorICAgICIiIgorICAgIFJlZ2lzdGVyaW5nIGEgbmFtZXNwYWNlIHR3aWNlIGNhdXNlZCBhICJkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcKKyAgICBpdGVyYXRpb24iIGJ1Zy4KKworICAgID4+PiBFVC5yZWdpc3Rlcl9uYW1lc3BhY2UoJ3Rlc3QxMDc3NycsICdodHRwOi8vbXl1cmkvJykKKyAgICA+Pj4gRVQucmVnaXN0ZXJfbmFtZXNwYWNlKCd0ZXN0MTA3NzcnLCAnaHR0cDovL215dXJpLycpCisgICAgIiIiCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitjbGFzcyBDbGVhbkNvbnRleHQob2JqZWN0KToKKyAgICAiIiJQcm92aWRlIGRlZmF1bHQgbmFtZXNwYWNlIG1hcHBpbmcgYW5kIHBhdGggY2FjaGUuIiIiCisgICAgY2hlY2t3YXJuaW5ncyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWlldD1GYWxzZSk6CisgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyOgorICAgICAgICAgICAgIyB1bmRlciAtT08sIGRvY3Rlc3RzIGNhbm5vdCBiZSBydW4gYW5kIHRoZXJlZm9yZSBub3QgYWxsIHdhcm5pbmdzCisgICAgICAgICAgICAjIHdpbGwgYmUgZW1pdHRlZAorICAgICAgICAgICAgcXVpZXQgPSBUcnVlCisgICAgICAgIGRlcHJlY2F0aW9ucyA9ICgKKyAgICAgICAgICAgICMgU2VhcmNoIGJlaGF2aW91ciBpcyBicm9rZW4gaWYgc2VhcmNoIHBhdGggc3RhcnRzIHdpdGggIi8iLgorICAgICAgICAgICAgKCJUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSBmaXhlZCAiCisgICAgICAgICAgICAgImluIGEgZnV0dXJlIHZlcnNpb24uICBJZiB5b3UgcmVseSBvbiB0aGUgY3VycmVudCBiZWhhdmlvdXIsICIKKyAgICAgICAgICAgICAiY2hhbmdlIGl0IHRvICcuKyciLCBGdXR1cmVXYXJuaW5nKSwKKyAgICAgICAgICAgICMgRWxlbWVudC5nZXRjaGlsZHJlbigpIGFuZCBFbGVtZW50LmdldGl0ZXJhdG9yKCkgYXJlIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAgIlVzZSAuKyBpbnN0ZWFkLiIsIERlcHJlY2F0aW9uV2FybmluZyksCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAgIlVzZSAuKyBpbnN0ZWFkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpLAorICAgICAgICAgICAgIyBYTUxQYXJzZXIuZG9jdHlwZSgpIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgICAgICAoIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUuLiAiCisgICAgICAgICAgICAgIm1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncyA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKmRlcHJlY2F0aW9ucywgcXVpZXQ9cXVpZXQpCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKyAgICAgICAgc2VsZi5fbnNtYXAgPSBFbGVtZW50VHJlZS5fbmFtZXNwYWNlX21hcAorICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlCisgICAgICAgICMgQ29weSB0aGUgZGVmYXVsdCBuYW1lc3BhY2UgbWFwcGluZworICAgICAgICBFbGVtZW50VHJlZS5fbmFtZXNwYWNlX21hcCA9IHNlbGYuX25zbWFwLmNvcHkoKQorICAgICAgICAjIENvcHkgdGhlIHBhdGggY2FjaGUgKHNob3VsZCBiZSBlbXB0eSkKKyAgICAgICAgRWxlbWVudFRyZWUuRWxlbWVudFBhdGguX2NhY2hlID0gc2VsZi5fcGF0aF9jYWNoZS5jb3B5KCkKKyAgICAgICAgc2VsZi5jaGVja3dhcm5pbmdzLl9fZW50ZXJfXygpCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFRyZWUKKyAgICAgICAgIyBSZXN0b3JlIG1hcHBpbmcgYW5kIHBhdGggY2FjaGUKKyAgICAgICAgRWxlbWVudFRyZWUuX25hbWVzcGFjZV9tYXAgPSBzZWxmLl9uc21hcAorICAgICAgICBFbGVtZW50VHJlZS5FbGVtZW50UGF0aC5fY2FjaGUgPSBzZWxmLl9wYXRoX2NhY2hlCisgICAgICAgIHNlbGYuY2hlY2t3YXJuaW5ncy5fX2V4aXRfXygqYXJncykKKworCitkZWYgdGVzdF9tYWluKG1vZHVsZV9uYW1lPSd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfeG1sX2V0cmVlCi0gICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZSwgdmVyYm9zaXR5PVRydWUpCisKKyAgICB1c2VfcHlfbW9kdWxlID0gKG1vZHVsZV9uYW1lID09ICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKQorCisgICAgIyBUaGUgc2FtZSBkb2N0ZXN0cyBhcmUgdXNlZCBmb3IgYm90aCB0aGUgUHl0aG9uIGFuZCB0aGUgQyBpbXBsZW1lbnRhdGlvbnMKKyAgICBhc3NlcnQgdGVzdF94bWxfZXRyZWUuRVQuX19uYW1lX18gPT0gbW9kdWxlX25hbWUKKworICAgICMgWFhYIHRoZSBDIG1vZHVsZSBzaG91bGQgZ2l2ZSB0aGUgc2FtZSB3YXJuaW5ncyBhcyB0aGUgUHl0aG9uIG1vZHVsZQorICAgIHdpdGggQ2xlYW5Db250ZXh0KHF1aWV0PW5vdCB1c2VfcHlfbW9kdWxlKToKKyAgICAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZSwgdmVyYm9zaXR5PVRydWUpCisKKyAgICAjIFRoZSBtb2R1bGUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoZSB0ZXN0cworICAgIGFzc2VydCB0ZXN0X3htbF9ldHJlZS5FVC5fX25hbWVfXyA9PSBtb2R1bGVfbmFtZQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQppbmRleCBjNDgyNzZhLi5kYjY5ZTVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKQEAgLTEsMjE4ICsxLDM3IEBACiAjIHhtbC5ldHJlZSB0ZXN0IGZvciBjRWxlbWVudFRyZWUKIAotaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCBzeXMKLQogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcHJlY2lzaW9uYmlnbWVtdGVzdCwgXzJHCiBpbXBvcnQgdW5pdHRlc3QKIAotRVQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3htbC5ldHJlZS5jRWxlbWVudFRyZWUnKQorY0VUID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd4bWwuZXRyZWUuY0VsZW1lbnRUcmVlJykKIAotU0FNUExFX1hNTCA9ICIiIgotPGJvZHk+Ci0gIDx0YWc+dGV4dDwvdGFnPgotICA8dGFnIC8+Ci0gIDxzZWN0aW9uPgotICAgIDx0YWc+c3VidGV4dDwvdGFnPgotICA8L3NlY3Rpb24+Ci08L2JvZHk+Ci0iIiIKIAotU0FNUExFX1hNTF9OUyA9ICIiIgotPGJvZHkgeG1sbnM9Imh0dHA6Ly9lZmZib3Qub3JnL25zIj4KLSAgPHRhZz50ZXh0PC90YWc+Ci0gIDx0YWcgLz4KLSAgPHNlY3Rpb24+Ci0gICAgPHRhZz5zdWJ0ZXh0PC90YWc+Ci0gIDwvc2VjdGlvbj4KLTwvYm9keT4KLSIiIgorIyBjRWxlbWVudFRyZWUgc3BlY2lmaWMgdGVzdHMKIAogZGVmIHNhbml0eSgpOgotICAgICIiIgorICAgIHIiIiIKICAgICBJbXBvcnQgc2FuaXR5LgogCiAgICAgPj4+IGZyb20geG1sLmV0cmVlIGltcG9ydCBjRWxlbWVudFRyZWUKLSAgICAiIiIKIAotZGVmIGNoZWNrX21ldGhvZChtZXRob2QpOgotICAgIGlmIG5vdCBoYXNhdHRyKG1ldGhvZCwgJ19fY2FsbF9fJyk6Ci0gICAgICAgIHByaW50KG1ldGhvZCwgIm5vdCBjYWxsYWJsZSIpCisgICAgSXNzdWUgIzY2OTcuCiAKLWRlZiBzZXJpYWxpemUoRVQsIGVsZW0pOgotICAgIGltcG9ydCBpbwotICAgIGZpbGUgPSBpby5TdHJpbmdJTygpCi0gICAgdHJlZSA9IEVULkVsZW1lbnRUcmVlKGVsZW0pCi0gICAgdHJlZS53cml0ZShmaWxlKQotICAgIHJldHVybiBmaWxlLmdldHZhbHVlKCkKLQotZGVmIHN1bW1hcml6ZShlbGVtKToKLSAgICByZXR1cm4gZWxlbS50YWcKLQotZGVmIHN1bW1hcml6ZV9saXN0KHNlcSk6Ci0gICAgcmV0dXJuIGxpc3QobWFwKHN1bW1hcml6ZSwgc2VxKSkKLQotZGVmIGludGVyZmFjZSgpOgotICAgICIiIgotICAgIFRlc3QgZWxlbWVudCB0cmVlIGludGVyZmFjZS4KLQotICAgID4+PiBlbGVtZW50ID0gRVQuRWxlbWVudCgidGFnIiwga2V5PSJ2YWx1ZSIpCi0gICAgPj4+IHRyZWUgPSBFVC5FbGVtZW50VHJlZShlbGVtZW50KQotCi0gICAgTWFrZSBzdXJlIGFsbCBzdGFuZGFyZCBlbGVtZW50IG1ldGhvZHMgZXhpc3QuCi0KLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuYXBwZW5kKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5pbnNlcnQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LnJlbW92ZSkKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0Y2hpbGRyZW4pCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmRhbGwpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmZpbmR0ZXh0KQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5jbGVhcikKLSAgICA+Pj4gY2hlY2tfbWV0aG9kKGVsZW1lbnQuZ2V0KQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5zZXQpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50LmtleXMpCi0gICAgPj4+IGNoZWNrX21ldGhvZChlbGVtZW50Lml0ZW1zKQotICAgID4+PiBjaGVja19tZXRob2QoZWxlbWVudC5nZXRpdGVyYXRvcikKLQotICAgIEJhc2ljIG1ldGhvZCBzYW5pdHkgY2hlY2tzLgotCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyAxCi0gICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCi0gICAgPj4+IHN1YmVsZW1lbnQgPSBFVC5FbGVtZW50KCJzdWJ0YWciKQotICAgID4+PiBlbGVtZW50LmFwcGVuZChzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgIDIKLSAgICAnPHRhZyBrZXk9InZhbHVlIj48c3VidGFnIC8+PC90YWc+JwotICAgID4+PiBlbGVtZW50Lmluc2VydCgwLCBzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgMwotICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48c3VidGFnIC8+PC90YWc+JwotICAgID4+PiBlbGVtZW50LnJlbW92ZShzdWJlbGVtZW50KQotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNAotICAgICc8dGFnIGtleT0idmFsdWUiPjxzdWJ0YWcgLz48L3RhZz4nCi0gICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZWxlbWVudCkgIyA1Ci0gICAgJzx0YWcga2V5PSJ2YWx1ZSIgLz4nCi0gICAgPj4+IGVsZW1lbnQucmVtb3ZlKHN1YmVsZW1lbnQpCisgICAgPj4+IGUgPSBjRWxlbWVudFRyZWUuRWxlbWVudCgnYScpCisgICAgPj4+IGdldGF0dHIoZSwgJ1x1RDgwMCcpICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUwogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICBWYWx1ZUVycm9yOiBsaXN0LnJlbW92ZSh4KTogeCBub3QgaW4gbGlzdAotICAgID4+PiBzZXJpYWxpemUoRVQsIGVsZW1lbnQpICMgNgotICAgICc8dGFnIGtleT0idmFsdWUiIC8+JworICAgICAgLi4uCisgICAgVW5pY29kZUVuY29kZUVycm9yOiAuLi4KKworICAgID4+PiBwID0gY0VsZW1lbnRUcmVlLlhNTFBhcnNlcigpCisgICAgPj4+IHAudmVyc2lvbi5zcGxpdCgpWzBdCisgICAgJ0V4cGF0JworICAgID4+PiBnZXRhdHRyKHAsICdcdUQ4MDAnKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgLi4uCisgICAgQXR0cmlidXRlRXJyb3I6ICdYTUxQYXJzZXInIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdcdWQ4MDAnCiAgICAgIiIiCiAKLWRlZiBmaW5kKCk6Ci0gICAgIiIiCi0gICAgVGVzdCBmaW5kIG1ldGhvZHMgKGluY2x1ZGluZyB4cGF0aCBzeW50YXgpLgotCi0gICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTCkKLSAgICA+Pj4gZWxlbS5maW5kKCJ0YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kKCJ0YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBlbGVtLmZpbmQoInNlY3Rpb24vdGFnIikudGFnCi0gICAgJ3RhZycKLSAgICA+Pj4gRVQuRWxlbWVudFRyZWUoZWxlbSkuZmluZCgic2VjdGlvbi90YWciKS50YWcKLSAgICAndGFnJwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0YWciKQotICAgICd0ZXh0JwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciKQotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJ0b2ciLCAiZGVmYXVsdCIpCi0gICAgJ2RlZmF1bHQnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJ0YWciKQotICAgICd0ZXh0JwotICAgID4+PiBlbGVtLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCi0gICAgJ3N1YnRleHQnCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmR0ZXh0KCJzZWN0aW9uL3RhZyIpCi0gICAgJ3N1YnRleHQnCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgidGFnIikpCi0gICAgWyd0YWcnLCAndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIqIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3NlY3Rpb24nXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIi4vL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vdGFnIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoInNlY3Rpb24vL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgic2VjdGlvbi8vKiIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJzZWN0aW9uLy4vLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8qIikpCi0gICAgWyd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIiovLyoiKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi90YWciKSkKLSAgICBbJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiKi8uL3RhZyIpKQotICAgIFsndGFnJ10KLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCIuL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8vdGFnIikpCi0gICAgWyd0YWcnLCAndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8uL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KEVULkVsZW1lbnRUcmVlKGVsZW0pLmZpbmRhbGwoIi90YWciKSkKLSAgICBbJ3RhZycsICd0YWcnXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChFVC5FbGVtZW50VHJlZShlbGVtKS5maW5kYWxsKCIuL3RhZyIpKQotICAgIFsndGFnJywgJ3RhZyddCi0gICAgPj4+IGVsZW0gPSBFVC5YTUwoU0FNUExFX1hNTF9OUykKLSAgICA+Pj4gc3VtbWFyaXplX2xpc3QoZWxlbS5maW5kYWxsKCJ0YWciKSkKLSAgICBbXQotICAgID4+PiBzdW1tYXJpemVfbGlzdChlbGVtLmZpbmRhbGwoIntodHRwOi8vZWZmYm90Lm9yZy9uc310YWciKSkKLSAgICBbJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnLCAne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyddCi0gICAgPj4+IHN1bW1hcml6ZV9saXN0KGVsZW0uZmluZGFsbCgiLi8ve2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZyIpKQotICAgIFsne2h0dHA6Ly9lZmZib3Qub3JnL25zfXRhZycsICd7aHR0cDovL2VmZmJvdC5vcmcvbnN9dGFnJywgJ3todHRwOi8vZWZmYm90Lm9yZy9uc310YWcnXQotICAgICIiIgotCi1kZWYgcGFyc2VsaXRlcmFsKCk6Ci0gICAgciIiIgotCi0gICAgPj4+IGVsZW1lbnQgPSBFVC5YTUwoIjxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPiIpCi0gICAgPj4+IEVULkVsZW1lbnRUcmVlKGVsZW1lbnQpLndyaXRlKHN5cy5zdGRvdXQpCi0gICAgPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+Ci0gICAgPj4+IGVsZW1lbnQgPSBFVC5mcm9tc3RyaW5nKCI8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4iKQotICAgID4+PiBFVC5FbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzeXMuc3Rkb3V0KQotICAgIDxodG1sPjxib2R5PnRleHQ8L2JvZHk+PC9odG1sPgotICAgID4+PiBwcmludChFVC50b3N0cmluZyhlbGVtZW50KSkKLSAgICA8aHRtbD48Ym9keT50ZXh0PC9ib2R5PjwvaHRtbD4KLSAgICA+Pj4gcHJpbnQocmVwcihFVC50b3N0cmluZyhlbGVtZW50LCAiYXNjaWkiKSkpCi0gICAgYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdhc2NpaSc/PlxuPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IgotICAgID4+PiBfLCBpZHMgPSBFVC5YTUxJRCgiPGh0bWw+PGJvZHk+dGV4dDwvYm9keT48L2h0bWw+IikKLSAgICA+Pj4gbGVuKGlkcykKLSAgICAwCi0gICAgPj4+IF8sIGlkcyA9IEVULlhNTElEKCI8aHRtbD48Ym9keSBpZD0nYm9keSc+dGV4dDwvYm9keT48L2h0bWw+IikKLSAgICA+Pj4gbGVuKGlkcykKLSAgICAxCi0gICAgPj4+IGlkc1siYm9keSJdLnRhZwotICAgICdib2R5JwotICAgICIiIgotCi1kZWYgY2hlY2tfZW5jb2RpbmcoZW5jb2RpbmcpOgotICAgICIiIgotICAgID4+PiBjaGVja19lbmNvZGluZygiYXNjaWkiKQotICAgID4+PiBjaGVja19lbmNvZGluZygidXMtYXNjaWkiKQotICAgID4+PiBjaGVja19lbmNvZGluZygiaXNvLTg4NTktMSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJpc28tODg1OS0xNSIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJjcDQzNyIpCi0gICAgPj4+IGNoZWNrX2VuY29kaW5nKCJtYWMtcm9tYW4iKQotICAgICIiIgotICAgIEVULlhNTCgKLSAgICAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+PHhtbCAvPiIgJSBlbmNvZGluZwotICAgICAgICApCi0KLWRlZiBidWdfMTUzNDYzMCgpOgotICAgICIiIgotICAgID4+PiBib2IgPSBFVC5UcmVlQnVpbGRlcigpCi0gICAgPj4+IGUgPSBib2IuZGF0YSgiZGF0YSIpCi0gICAgPj4+IGUgPSBib2Iuc3RhcnQoInRhZyIsIHt9KQotICAgID4+PiBlID0gYm9iLmVuZCgidGFnIikKLSAgICA+Pj4gZSA9IGJvYi5jbG9zZSgpCi0gICAgPj4+IHNlcmlhbGl6ZShFVCwgZSkKLSAgICAnPHRhZyAvPicKLSAgICAiIiIKIAogY2xhc3MgTWlzY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIElzc3VlICM4NjUxLgpAQCAtMjIxLDcgKzQwLDcgQEAKICAgICAgICAgaWYgc2l6ZSA8IHN1cHBvcnQuXzJHICsgMTAwOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgibm90IGVub3VnaCBmcmVlIG1lbW9yeSwgbmVlZCBhdCBsZWFzdCAyIEdCIikKICAgICAgICAgZGF0YSA9IGIneCcgKiBzaXplCi0gICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcigpCisgICAgICAgIHBhcnNlciA9IGNFVC5YTUxQYXJzZXIoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwYXJzZXIuZmVlZCwgZGF0YSkKICAgICAgICAgZmluYWxseToKQEAgLTIyOSwxMCArNDgsMjYgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZV9jCisgICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3htbF9ldHJlZSwgdGVzdF94bWxfZXRyZWVfYworCisgICAgIyBSdW4gdGhlIHRlc3RzIHNwZWNpZmljIHRvIHRoZSBDIGltcGxlbWVudGF0aW9uCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3htbF9ldHJlZV9jLCB2ZXJib3NpdHk9VHJ1ZSkKIAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1pc2NUZXN0cykKIAorICAgICMgQXNzaWduIHRoZSBDIGltcGxlbWVudGF0aW9uIGJlZm9yZSBydW5uaW5nIHRoZSBkb2N0ZXN0cworICAgICMgUGF0Y2ggdGhlIF9fbmFtZV9fLCB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoIHRoZSBwdXJlIFB5dGhvbiB0ZXN0CisgICAgcHlFVCA9IHRlc3RfeG1sX2V0cmVlLkVUCisgICAgcHlfX25hbWVfXyA9IHRlc3RfeG1sX2V0cmVlLl9fbmFtZV9fCisgICAgdGVzdF94bWxfZXRyZWUuRVQgPSBjRVQKKyAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgorICAgICAgICB0ZXN0X3htbF9ldHJlZS5fX25hbWVfXyA9IF9fbmFtZV9fCisgICAgdHJ5OgorICAgICAgICAjIFJ1biB0aGUgc2FtZSB0ZXN0IHN1aXRlIGFzIHhtbC5ldHJlZS5FbGVtZW50VHJlZQorICAgICAgICB0ZXN0X3htbF9ldHJlZS50ZXN0X21haW4obW9kdWxlX25hbWU9J3htbC5ldHJlZS5jRWxlbWVudFRyZWUnKQorICAgIGZpbmFsbHk6CisgICAgICAgIHRlc3RfeG1sX2V0cmVlLkVUID0gcHlFVAorICAgICAgICB0ZXN0X3htbF9ldHJlZS5fX25hbWVfXyA9IHB5X19uYW1lX18KKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkgYi9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQppbmRleCA5ODMzZjI2Li4xMDJmODkyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbHJwYy5weQpAQCAtNSwxMyArNSwxOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgeG1scnBjLmNsaWVudCBhcyB4bWxycGNsaWIKIGltcG9ydCB4bWxycGMuc2VydmVyCi1pbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgaHR0cC5jbGllbnQKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBvcwogaW1wb3J0IHJlCitpbXBvcnQgaW8KK2ltcG9ydCBjb250ZXh0bGliCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKIGFsaXN0ID0gW3snYXN0cmluZyc6ICdmb29AYmFyLmJhei5zcGFtJywKICAgICAgICAgICAnYWZsb2F0JzogNzI4My40MywKICAgICAgICAgICAnYW5pbnQnOiAyKioyMCwKQEAgLTczLDExICs3OSwxMSBAQAogICAgICAgICBkID0geG1scnBjbGliLkRhdGVUaW1lKCkKICAgICAgICAgKChuZXdfZCwpLCBkdW1teSkgPSB4bWxycGNsaWIubG9hZHMoeG1scnBjbGliLmR1bXBzKChkLCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHJlc3BvbnNlPVRydWUpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShuZXdfZC52YWx1ZSwgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5ld19kLnZhbHVlLCBzdHIpCiAKICAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBvdXRwdXQgb2YgZHVtcHMoKSBpcyBzdGlsbCBhbiA4LWJpdCBzdHJpbmcKICAgICAgICAgcyA9IHhtbHJwY2xpYi5kdW1wcygobmV3X2QsKSwgbWV0aG9kcmVzcG9uc2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uocywgc3RyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHN0cikKIAogICAgIGRlZiB0ZXN0X25ld3N0eWxlX2NsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBUKG9iamVjdCk6CkBAIC0yNTksNyArMjY1LDcgQEAKICMgVGhlIGV2dCBpcyBzZXQgdHdpY2UuICBGaXJzdCB3aGVuIHRoZSBzZXJ2ZXIgaXMgcmVhZHkgdG8gc2VydmUuCiAjIFNlY29uZCB3aGVuIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gc2h1dGRvd24uICBUaGUgdXNlciBtdXN0IGNsZWFyCiAjIHRoZSBldmVudCBhZnRlciBpdCBoYXMgYmVlbiBzZXQgdGhlIGZpcnN0IHRpbWUgdG8gY2F0Y2ggdGhlIHNlY29uZCBzZXQuCi1kZWYgaHR0cF9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cyk6CitkZWYgaHR0cF9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cywgcmVxdWVzdEhhbmRsZXI9Tm9uZSk6CiAgICAgY2xhc3MgVGVzdEluc3RhbmNlQ2xhc3M6CiAgICAgICAgIGRlZiBkaXYoc2VsZiwgeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geCAvLyB5CkBAIC0yODAsNyArMjg2LDkgQEAKICAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBzLCBwb3J0CiAKLSAgICBzZXJ2ID0gTXlYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwKKyAgICBpZiBub3QgcmVxdWVzdEhhbmRsZXI6CisgICAgICAgIHJlcXVlc3RIYW5kbGVyID0geG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgIHNlcnYgPSBNeVhNTFJQQ1NlcnZlcigoImxvY2FsaG9zdCIsIDApLCByZXF1ZXN0SGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nUmVxdWVzdHM9RmFsc2UsIGJpbmRfYW5kX2FjdGl2YXRlPUZhbHNlKQogICAgIHRyeToKICAgICAgICAgc2Vydi5zZXJ2ZXJfYmluZCgpCkBAIC0zMTIsNiArMzIwLDY2IEBACiAgICAgICAgIFBPUlQgPSBOb25lCiAgICAgICAgIGV2dC5zZXQoKQogCitkZWYgaHR0cF9tdWx0aV9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cywgcmVxdWVzdEhhbmRsZXI9Tm9uZSk6CisgICAgY2xhc3MgVGVzdEluc3RhbmNlQ2xhc3M6CisgICAgICAgIGRlZiBkaXYoc2VsZiwgeCwgeSk6CisgICAgICAgICAgICByZXR1cm4geCAvLyB5CisKKyAgICAgICAgZGVmIF9tZXRob2RIZWxwKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgaWYgbmFtZSA9PSAnZGl2JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1RoaXMgaXMgdGhlIGRpdiBmdW5jdGlvbicKKworICAgIGRlZiBteV9mdW5jdGlvbigpOgorICAgICAgICAnJydUaGlzIGlzIG15IGZ1bmN0aW9uJycnCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBjbGFzcyBNeVhNTFJQQ1NlcnZlcih4bWxycGMuc2VydmVyLk11bHRpUGF0aFhNTFJQQ1NlcnZlcik6CisgICAgICAgIGRlZiBnZXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgICAgICMgRW5zdXJlIHRoZSBzb2NrZXQgaXMgYWx3YXlzIG5vbi1ibG9ja2luZy4gIE9uIExpbnV4LCBzb2NrZXQKKyAgICAgICAgICAgICMgYXR0cmlidXRlcyBhcmUgbm90IGluaGVyaXRlZCBsaWtlIHRoZXkgYXJlIG9uICpCU0QgYW5kIFdpbmRvd3MuCisgICAgICAgICAgICBzLCBwb3J0ID0gc2VsZi5zb2NrZXQuYWNjZXB0KCkKKyAgICAgICAgICAgIHMuc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBzLCBwb3J0CisKKyAgICBpZiBub3QgcmVxdWVzdEhhbmRsZXI6CisgICAgICAgIHJlcXVlc3RIYW5kbGVyID0geG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENSZXF1ZXN0SGFuZGxlcgorICAgIGNsYXNzIE15UmVxdWVzdEhhbmRsZXIocmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBycGNfcGF0aHMgPSBbXQorCisgICAgc2VydiA9IE15WE1MUlBDU2VydmVyKCgibG9jYWxob3N0IiwgMCksIE15UmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKKyAgICBzZXJ2LnNvY2tldC5zZXR0aW1lb3V0KDMpCisgICAgc2Vydi5zZXJ2ZXJfYmluZCgpCisgICAgdHJ5OgorICAgICAgICBnbG9iYWwgQUREUiwgUE9SVCwgVVJMCisgICAgICAgIEFERFIsIFBPUlQgPSBzZXJ2LnNvY2tldC5nZXRzb2NrbmFtZSgpCisgICAgICAgICNjb25uZWN0IHRvIElQIGFkZHJlc3MgZGlyZWN0bHkuICBUaGlzIGF2b2lkcyBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQorICAgICAgICAjdHJ5aW5nIHRvIGNvbm5lY3QgdG8gdG8gImxvY2FsaG9zdCIgdXNpbmcgYWxsIGFkZHJlc3MgZmFtaWxpZXMsIHdoaWNoCisgICAgICAgICNjYXVzZXMgc2xvd2Rvd24gZS5nLiBvbiB2aXN0YSB3aGljaCBzdXBwb3J0cyBBRl9JTkVUNi4gIFRoZSBzZXJ2ZXIgbGlzdGVucworICAgICAgICAjb24gQUZfSU5FVCBvbmx5LgorICAgICAgICBVUkwgPSAiaHR0cDovLyVzOiVkIiUoQUREUiwgUE9SVCkKKyAgICAgICAgc2Vydi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICBwYXRocyA9IFsiL2ZvbyIsICIvZm9vL2JhciJdCisgICAgICAgIGZvciBwYXRoIGluIHBhdGhzOgorICAgICAgICAgICAgZCA9IHNlcnYuYWRkX2Rpc3BhdGNoZXIocGF0aCwgeG1scnBjLnNlcnZlci5TaW1wbGVYTUxSUENEaXNwYXRjaGVyKCkpCisgICAgICAgICAgICBkLnJlZ2lzdGVyX2ludHJvc3BlY3Rpb25fZnVuY3Rpb25zKCkKKyAgICAgICAgICAgIGQucmVnaXN0ZXJfbXVsdGljYWxsX2Z1bmN0aW9ucygpCisgICAgICAgIHNlcnYuZ2V0X2Rpc3BhdGNoZXIocGF0aHNbMF0pLnJlZ2lzdGVyX2Z1bmN0aW9uKHBvdykKKyAgICAgICAgc2Vydi5nZXRfZGlzcGF0Y2hlcihwYXRoc1sxXSkucmVnaXN0ZXJfZnVuY3Rpb24obGFtYmRhIHgseTogeCt5LCAnYWRkJykKKyAgICAgICAgZXZ0LnNldCgpCisKKyAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cworICAgICAgICB3aGlsZSBudW1yZXF1ZXN0cyA+IDA6CisgICAgICAgICAgICBzZXJ2LmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgICAgIG51bXJlcXVlc3RzIC09IDEKKworICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIHNlcnYuc29ja2V0LmNsb3NlKCkKKyAgICAgICAgUE9SVCA9IE5vbmUKKyAgICAgICAgZXZ0LnNldCgpCisKICMgVGhpcyBmdW5jdGlvbiBwcmV2ZW50cyBlcnJvcnMgbGlrZToKICMgICAgPFByb3RvY29sRXJyb3IgZm9yIGxvY2FsaG9zdDo1NzUyNy9SUEMyOiA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yPgogZGVmIGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKQEAgLTMzMSwxNSArMzk5LDM2IEBACiAgICAgaWYgZXhjX21lc3MgYW5kICd0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScgaW4gZXhjX21lc3MubG93ZXIoKToKICAgICAgICAgcmV0dXJuIFRydWUKIAotY2xhc3MgU2ltcGxlU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIHRoZSBzZXJ2ZXIgY3JlYXRlZCBpbiBzZXRVcCBibG9ja3MgZXhwZWN0aW5nIG9uZSB0byBjb21lIGluLgorICAgIGlmIG5vdCBjb25kaXRpb246CisgICAgICAgIHJldHVybiBsYW1iZGEgZnVuYzogZnVuYworICAgIGRlZiBkZWNvcmF0b3IoZnVuYyk6CisgICAgICAgIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXAoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkubXlfZnVuY3Rpb24oKQorICAgICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChyZWFzb24pCisgICAgICAgIHJldHVybiBtYWtlX3JlcXVlc3RfYW5kX3NraXAKKyAgICByZXR1cm4gZGVjb3JhdG9yCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBCYXNlU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJlcXVlc3RIYW5kbGVyID0gTm9uZQorICAgIHJlcXVlc3RfY291bnQgPSAxCisgICAgdGhyZWFkRnVuYyA9IHN0YXRpY21ldGhvZChodHRwX3NlcnZlcikKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBlbmFibGUgdHJhY2ViYWNrIHJlcG9ydGluZwogICAgICAgICB4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gVHJ1ZQogCiAgICAgICAgIHNlbGYuZXZ0ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgIyBzdGFydCBzZXJ2ZXIgdGhyZWFkIHRvIGhhbmRsZSByZXF1ZXN0cwotICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5ldnQsIDEpCi0gICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWh0dHBfc2VydmVyLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQorICAgICAgICBzZXJ2X2FyZ3MgPSAoc2VsZi5ldnQsIHNlbGYucmVxdWVzdF9jb3VudCwgc2VsZi5yZXF1ZXN0SGFuZGxlcikKKyAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi50aHJlYWRGdW5jLCBhcmdzPXNlcnZfYXJncykuc3RhcnQoKQogCiAgICAgICAgICMgd2FpdCBmb3IgdGhlIHNlcnZlciB0byBiZSByZWFkeQogICAgICAgICBzZWxmLmV2dC53YWl0KCkKQEAgLTM0OCw2ICs0MzcsNyBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgIyB3YWl0IG9uIHRoZSBzZXJ2ZXIgdGhyZWFkIHRvIHRlcm1pbmF0ZQogICAgICAgICBzZWxmLmV2dC53YWl0KDQuMCkKKyAgICAgICAgIyBYWFggdGhpcyBjb2RlIGRvZXMgbm90IHdvcmssIGFuZCBpbiBmYWN0IHN0b3Bfc2VydmluZyBkb2Vzbid0IGV4aXN0LgogICAgICAgICBpZiBub3Qgc2VsZi5ldnQuaXNfc2V0KCk6CiAgICAgICAgICAgICBzZWxmLmV2dC5zZXQoKQogICAgICAgICAgICAgc3RvcF9zZXJ2aW5nKCkKQEAgLTM1Niw2ICs0NDYsNyBAQAogICAgICAgICAjIGRpc2FibGUgdHJhY2ViYWNrIHJlcG9ydGluZwogICAgICAgICB4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1NlcnZlci5fc2VuZF90cmFjZWJhY2tfaGVhZGVyID0gRmFsc2UKIAorY2xhc3MgU2ltcGxlU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zaW1wbGUxKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKQEAgLTQxOCw2ICs1MDksOCBAQAogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBnZXRhdHRyKGUsICJoZWFkZXJzIiwgIiIpKSkKIAorICAgIEBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RfaW50cm9zcGVjdGlvbjMoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgdGVzdCBuYXRpdmUgZG9jCkBAIC00OTEsNiArNTg0LDE4NCBAQAogICAgICAgICAjIFRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdGltZW91dC4KICAgICAgICAgc2VsZi50ZXN0X3NpbXBsZTEoKQogCitjbGFzcyBNdWx0aVBhdGhTZXJ2ZXJUZXN0Q2FzZShCYXNlU2VydmVyVGVzdENhc2UpOgorICAgIHRocmVhZEZ1bmMgPSBzdGF0aWNtZXRob2QoaHR0cF9tdWx0aV9zZXJ2ZXIpCisgICAgcmVxdWVzdF9jb3VudCA9IDIKKyAgICBkZWYgdGVzdF9wYXRoMShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwrIi9mb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgcC5hZGQsIDYsIDgpCisgICAgZGVmIHRlc3RfcGF0aDIoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKyIvZm9vL2JhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZGQoNiw4KSwgNis4KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh4bWxycGNsaWIuRmF1bHQsIHAucG93LCA2LCA4KQorCisjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQLzEuMSBrZWVwLWFsaXZlIG1lY2hhbmlzbQorI2RvZXMgaW5kZWVkIHNlcnZlIHN1YnNlcXVlbnQgcmVxdWVzdHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorY2xhc3MgQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKEJhc2VTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgI2EgcmVxdWVzdCBoYW5kbGVyIHRoYXQgc3VwcG9ydHMga2VlcC1hbGl2ZSBhbmQgbG9ncyByZXF1ZXN0cyBpbnRvIGEKKyAgICAjY2xhc3MgdmFyaWFibGUKKyAgICBjbGFzcyBSZXF1ZXN0SGFuZGxlcih4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyKToKKyAgICAgICAgcGFyZW50Q2xhc3MgPSB4bWxycGMuc2VydmVyLlNpbXBsZVhNTFJQQ1JlcXVlc3RIYW5kbGVyCisgICAgICAgIHByb3RvY29sX3ZlcnNpb24gPSAnSFRUUC8xLjEnCisgICAgICAgIG15UmVxdWVzdHMgPSBbXQorICAgICAgICBkZWYgaGFuZGxlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5teVJlcXVlc3RzLmFwcGVuZChbXSkKKyAgICAgICAgICAgIHNlbGYucmVxaWR4ID0gbGVuKHNlbGYubXlSZXF1ZXN0cyktMQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Q2xhc3MuaGFuZGxlKHNlbGYpCisgICAgICAgIGRlZiBoYW5kbGVfb25lX3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLnBhcmVudENsYXNzLmhhbmRsZV9vbmVfcmVxdWVzdChzZWxmKQorICAgICAgICAgICAgc2VsZi5teVJlcXVlc3RzW3NlbGYucmVxaWR4XS5hcHBlbmQoc2VsZi5yYXdfcmVxdWVzdGxpbmUpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICByZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjY2xlYXIgcmVxdWVzdCBsb2cKKyAgICAgICAgc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzID0gW10KKyAgICAgICAgcmV0dXJuIEJhc2VTZXJ2ZXJUZXN0Q2FzZS5zZXRVcChzZWxmKQorCisjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGEgc2VydmVyIHVzaW5nIHRoZSBIVFRQLzEuMSBrZWVwLWFsaXZlIG1lY2hhbmlzbQorI2RvZXMgaW5kZWVkIHNlcnZlIHN1YnNlcXVlbnQgcmVxdWVzdHMgb24gdGhlIHNhbWUgY29ubmVjdGlvbgorY2xhc3MgS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKEJhc2VLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKKyAgICAgICAgI2RvIHRocmVlIHJlcXVlc3RzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBwKCJjbG9zZSIpKCkKKworICAgICAgICAjdGhleSBzaG91bGQgaGF2ZSBhbGwgYmVlbiBoYW5kbGVkIGJ5IGEgc2luZ2xlIHJlcXVlc3QgaGFuZGxlcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHMpLCAxKQorCisgICAgICAgICNjaGVjayB0aGF0IHdlIGRpZCBhdCBsZWFzdCB0d28gKHRoZSB0aGlyZCBtYXkgYmUgcGVuZGluZyBhcHBlbmQKKyAgICAgICAgI2R1ZSB0byB0aHJlYWQgc2NoZWR1bGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0c1stMV0pLCAyKQorCisKKyN0ZXN0IHNwZWNpYWwgYXR0cmlidXRlIGFjY2VzcyBvbiB0aGUgc2VydmVycHJveHksIHRocm91Z2ggdGhlIF9fY2FsbF9fCisjZnVuY3Rpb24uCitjbGFzcyBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIoQmFzZUtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlKToKKyAgICAjYXNrIGZvciB0d28ga2VlcGFsaXZlIHJlcXVlc3RzIHRvIGJlIGhhbmRsZWQuCisgICAgcmVxdWVzdF9jb3VudD0yCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCisgICAgICAgICNkbyBzb21lIHJlcXVlc3RzIHdpdGggY2xvc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHAoImNsb3NlIikoKSAjdGhpcyBzaG91bGQgdHJpZ2dlciBhIG5ldyBrZWVwLWFsaXZlIHJlcXVlc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgiY2xvc2UiKSgpCisKKyAgICAgICAgI3RoZXkgc2hvdWxkIGhhdmUgYWxsIGJlZW4gdHdvIHJlcXVlc3QgaGFuZGxlcnMsIGVhY2ggaGF2aW5nIGxvZ2dlZCBhdCBsZWFzdAorICAgICAgICAjdHdvIGNvbXBsZXRlIHJlcXVlc3RzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0cyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGxlbihzZWxmLlJlcXVlc3RIYW5kbGVyLm15UmVxdWVzdHNbLTFdKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHNlbGYuUmVxdWVzdEhhbmRsZXIubXlSZXF1ZXN0c1stMl0pLCAyKQorCisKKyAgICBkZWYgdGVzdF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQorICAgICAgICAjZG8gc29tZSByZXF1ZXN0cyB3aXRoIGNsb3NlLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIHAoInRyYW5zcG9ydCIpLmNsb3NlKCkgI3NhbWUgYXMgYWJvdmUsIHJlYWxseS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQorICAgICAgICBwKCJjbG9zZSIpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5SZXF1ZXN0SGFuZGxlci5teVJlcXVlc3RzKSwgMikKKworI0EgdGVzdCBjYXNlIHRoYXQgdmVyaWZpZXMgdGhhdCBnemlwIGVuY29kaW5nIHdvcmtzIGluIGJvdGggZGlyZWN0aW9ucworIyhmb3IgYSByZXF1ZXN0IGFuZCB0aGUgcmVzcG9uc2UpCitjbGFzcyBHemlwU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKKyAgICAjYSByZXF1ZXN0IGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBrZWVwLWFsaXZlIGFuZCBsb2dzIHJlcXVlc3RzIGludG8gYQorICAgICNjbGFzcyB2YXJpYWJsZQorICAgIGNsYXNzIFJlcXVlc3RIYW5kbGVyKHhtbHJwYy5zZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIpOgorICAgICAgICBwYXJlbnRDbGFzcyA9IHhtbHJwYy5zZXJ2ZXIuU2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIKKyAgICAgICAgcHJvdG9jb2xfdmVyc2lvbiA9ICdIVFRQLzEuMScKKworICAgICAgICBkZWYgZG9fUE9TVChzZWxmKToKKyAgICAgICAgICAgICNzdG9yZSBjb250ZW50IG9mIGxhc3QgcmVxdWVzdCBpbiBjbGFzcworICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uY29udGVudF9sZW5ndGggPSBpbnQoc2VsZi5oZWFkZXJzWyJjb250ZW50LWxlbmd0aCJdKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50Q2xhc3MuZG9fUE9TVChzZWxmKQorICAgIHJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXIKKworICAgIGNsYXNzIFRyYW5zcG9ydCh4bWxycGNsaWIuVHJhbnNwb3J0KToKKyAgICAgICAgI2N1c3RvbSB0cmFuc3BvcnQsIHN0b3JlcyB0aGUgcmVzcG9uc2UgbGVuZ3RoIGZvciBvdXIgcGVydXNhbAorICAgICAgICBmYWtlX2d6aXAgPSBGYWxzZQorICAgICAgICBkZWYgcGFyc2VfcmVzcG9uc2Uoc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAgICAgc2VsZi5yZXNwb25zZV9sZW5ndGg9aW50KHJlc3BvbnNlLmdldGhlYWRlcigiY29udGVudC1sZW5ndGgiLCAwKSkKKyAgICAgICAgICAgIHJldHVybiB4bWxycGNsaWIuVHJhbnNwb3J0LnBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKQorCisgICAgICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgYm9keSk6CisgICAgICAgICAgICBpZiBzZWxmLmZha2VfZ3ppcDoKKyAgICAgICAgICAgICAgICAjYWRkIGEgbG9uZSBnemlwIGhlYWRlciB0byBpbmR1Y2UgZGVjb2RlIGVycm9yIHJlbW90ZWx5CisgICAgICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgICAgICByZXR1cm4geG1scnBjbGliLlRyYW5zcG9ydC5zZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgYm9keSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgQmFzZVNlcnZlclRlc3RDYXNlLnNldFVwKHNlbGYpCisKKyAgICBkZWYgdGVzdF9nemlwX3JlcXVlc3Qoc2VsZik6CisgICAgICAgIHQgPSBzZWxmLlRyYW5zcG9ydCgpCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIHRyYW5zcG9ydD10KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGEgPSBzZWxmLlJlcXVlc3RIYW5kbGVyLmNvbnRlbnRfbGVuZ3RoCisgICAgICAgIHQuZW5jb2RlX3RocmVzaG9sZCA9IDAgI3R1cm4gb24gcmVxdWVzdCBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGIgPSBzZWxmLlJlcXVlc3RIYW5kbGVyLmNvbnRlbnRfbGVuZ3RoCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhPmIpCisgICAgICAgIHAoImNsb3NlIikoKQorCisgICAgZGVmIHRlc3RfYmFkX2d6aXBfcmVxdWVzdChzZWxmKToKKyAgICAgICAgdCA9IHNlbGYuVHJhbnNwb3J0KCkKKyAgICAgICAgdC5lbmNvZGVfdGhyZXNob2xkID0gTm9uZQorICAgICAgICB0LmZha2VfZ3ppcCA9IFRydWUKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwsIHRyYW5zcG9ydD10KQorICAgICAgICBjbSA9IHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoeG1scnBjbGliLlByb3RvY29sRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKHIiXGI0MDBcYiIpKQorICAgICAgICB3aXRoIGNtOgorICAgICAgICAgICAgcC5wb3coNiwgOCkKKyAgICAgICAgcCgiY2xvc2UiKSgpCisKKyAgICBkZWYgdGVzdF9nc2lwX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5UcmFuc3BvcnQoKQorICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCwgdHJhbnNwb3J0PXQpCisgICAgICAgIG9sZCA9IHNlbGYucmVxdWVzdEhhbmRsZXIuZW5jb2RlX3RocmVzaG9sZAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSBOb25lICNubyBlbmNvZGluZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucG93KDYsOCksIDYqKjgpCisgICAgICAgIGEgPSB0LnJlc3BvbnNlX2xlbmd0aAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSAwICNhbHdheXMgZW5jb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKKyAgICAgICAgcCgiY2xvc2UiKSgpCisgICAgICAgIGIgPSB0LnJlc3BvbnNlX2xlbmd0aAorICAgICAgICBzZWxmLnJlcXVlc3RIYW5kbGVyLmVuY29kZV90aHJlc2hvbGQgPSBvbGQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGE+YikKKworI1Rlc3Qgc3BlY2lhbCBhdHRyaWJ1dGVzIG9mIHRoZSBTZXJ2ZXJQcm94eSBvYmplY3QKK2NsYXNzIFNlcnZlclByb3h5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgaWYgdGhyZWFkaW5nOgorICAgICAgICAgICAgc2VsZi51cmwgPSBVUkwKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2l0aG91dCB0aHJlYWRpbmcsIGh0dHBfc2VydmVyKCkgYW5kIGh0dHBfbXVsdGlfc2VydmVyKCkgd2lsbCBub3QKKyAgICAgICAgICAgICMgYmUgZXhlY3V0ZWQgYW5kIFVSTCBpcyBzdGlsbCBlcXVhbCB0byBOb25lLiAnaHR0cDovLycgaXMgYSBqdXN0CisgICAgICAgICAgICAjIGVub3VnaCB0byBjaG9vc2UgdGhlIHNjaGVtZSAoSFRUUCkKKyAgICAgICAgICAgIHNlbGYudXJsID0gJ2h0dHA6Ly8nCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShzZWxmLnVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdjbG9zZScpKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHQgPSB4bWxycGNsaWIuVHJhbnNwb3J0KCkKKyAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShzZWxmLnVybCwgdHJhbnNwb3J0PXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgndHJhbnNwb3J0JyksIHQpCisKICMgVGhpcyBpcyBhIGNvbnRyaXZlZCB3YXkgdG8gbWFrZSBhIGZhaWx1cmUgb2NjdXIgb24gdGhlIHNlcnZlciBzaWRlCiAjIGluIG9yZGVyIHRvIHRlc3QgdGhlIF9zZW5kX3RyYWNlYmFja19oZWFkZXIgZmxhZyBvbiB0aGUgc2VydmVyCiBjbGFzcyBGYWlsaW5nTWVzc2FnZUNsYXNzKGh0dHAuY2xpZW50LkhUVFBNZXNzYWdlKToKQEAgLTUwMSw2ICs3NzIsNyBAQAogICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXQoa2V5LCBmYWlsb2JqKQogCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBGYWlsaW5nU2VydmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5ldnQgPSB0aHJlYWRpbmcuRXZlbnQoKQpAQCAtNTc2LDYgKzg0OCwyMSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdQcm90b2NvbEVycm9yIG5vdCByYWlzZWQnKQogCisKK0Bjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgY2FwdHVyZWRfc3Rkb3V0KGVuY29kaW5nPSd1dGYtOCcpOgorICAgICIiIkEgdmFyaWF0aW9uIG9uIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgd2hpY2ggZ2l2ZXMgYSB0ZXh0IHN0cmVhbQorICAgIGhhdmluZyBhIGBidWZmZXJgIGF0dHJpYnV0ZS4KKyAgICAiIiIKKyAgICBpbXBvcnQgaW8KKyAgICBvcmlnX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gaW8uVGV4dElPV3JhcHBlcihpby5CeXRlc0lPKCksIGVuY29kaW5nPWVuY29kaW5nKQorICAgIHRyeToKKyAgICAgICAgeWllbGQgc3lzLnN0ZG91dAorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBvcmlnX3N0ZG91dAorCisKIGNsYXNzIENHSUhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmNnaSA9IHhtbHJwYy5zZXJ2ZXIuQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXIoKQpAQCAtNTg4LDU0ICs4NzUsNDUgQEAKICAgICAgICAgICAgIGVudlsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnCiAgICAgICAgICAgICAjIGlmIHRoZSBtZXRob2QgaXMgR0VUIGFuZCBubyByZXF1ZXN0X3RleHQgaXMgZ2l2ZW4sIGl0IHJ1bnMgaGFuZGxlX2dldAogICAgICAgICAgICAgIyBnZXQgc3lzb3V0IG91dHB1dAotICAgICAgICAgICAgdG1wID0gc3lzLnN0ZG91dAotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKLSAgICAgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHRtcAorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoZW5jb2Rpbmc9c2VsZi5jZ2kuZW5jb2RpbmcpIGFzIGRhdGFfb3V0OgorICAgICAgICAgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKIAogICAgICAgICAgICAgIyBwYXJzZSBTdGF0dXMgaGVhZGVyCi0gICAgICAgICAgICBoYW5kbGUgPSBvcGVuKHN1cHBvcnQuVEVTVEZOLCAiciIpLnJlYWQoKQorICAgICAgICAgICAgZGF0YV9vdXQuc2VlaygwKQorICAgICAgICAgICAgaGFuZGxlID0gZGF0YV9vdXQucmVhZCgpCiAgICAgICAgICAgICBzdGF0dXMgPSBoYW5kbGUuc3BsaXQoKVsxXQogICAgICAgICAgICAgbWVzc2FnZSA9ICcgJy5qb2luKGhhbmRsZS5zcGxpdCgpWzI6NF0pCiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHVzLCAnNDAwJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ0JhZCBSZXF1ZXN0JykKIAotICAgICAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2dpX3htbHJwY19yZXNwb25zZShzZWxmKToKICAgICAgICAgZGF0YSA9ICIiIjw/eG1sIHZlcnNpb249JzEuMCc/PgotPG1ldGhvZENhbGw+Ci0gICAgPG1ldGhvZE5hbWU+dGVzdF9tZXRob2Q8L21ldGhvZE5hbWU+Ci0gICAgPHBhcmFtcz4KLSAgICAgICAgPHBhcmFtPgotICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+Zm9vPC9zdHJpbmc+PC92YWx1ZT4KLSAgICAgICAgPC9wYXJhbT4KLSAgICAgICAgPHBhcmFtPgotICAgICAgICAgICAgPHZhbHVlPjxzdHJpbmc+YmFyPC9zdHJpbmc+PC92YWx1ZT4KLSAgICAgICAgPC9wYXJhbT4KLSAgICAgPC9wYXJhbXM+Ci08L21ldGhvZENhbGw+Ci0iIiIKLSAgICAgICAgb3BlbigieG1sZGF0YS50eHQiLCAidyIpLndyaXRlKGRhdGEpCi0gICAgICAgIHRtcDEgPSBzeXMuc3RkaW4KLSAgICAgICAgdG1wMiA9IHN5cy5zdGRvdXQKKyAgICAgICAgPG1ldGhvZENhbGw+CisgICAgICAgICAgICA8bWV0aG9kTmFtZT50ZXN0X21ldGhvZDwvbWV0aG9kTmFtZT4KKyAgICAgICAgICAgIDxwYXJhbXM+CisgICAgICAgICAgICAgICAgPHBhcmFtPgorICAgICAgICAgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5mb288L3N0cmluZz48L3ZhbHVlPgorICAgICAgICAgICAgICAgIDwvcGFyYW0+CisgICAgICAgICAgICAgICAgPHBhcmFtPgorICAgICAgICAgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5iYXI8L3N0cmluZz48L3ZhbHVlPgorICAgICAgICAgICAgICAgIDwvcGFyYW0+CisgICAgICAgICAgICA8L3BhcmFtcz4KKyAgICAgICAgPC9tZXRob2RDYWxsPgorICAgICAgICAiIiIKIAotICAgICAgICBzeXMuc3RkaW4gPSBvcGVuKCJ4bWxkYXRhLnR4dCIsICJyIikKLSAgICAgICAgc3lzLnN0ZG91dCA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKLQotICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnYsIFwKKyAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQoZW5jb2Rpbmc9c2VsZi5jZ2kuZW5jb2RpbmcpIGFzIGRhdGFfb3V0LCBcCisgICAgICAgICAgICAgc3VwcG9ydC5jYXB0dXJlZF9zdGRpbigpIGFzIGRhdGFfaW46CisgICAgICAgICAgICBkYXRhX2luLndyaXRlKGRhdGEpCisgICAgICAgICAgICBkYXRhX2luLnNlZWsoMCkKICAgICAgICAgICAgIGVudlsnQ09OVEVOVF9MRU5HVEgnXSA9IHN0cihsZW4oZGF0YSkpCiAgICAgICAgICAgICBzZWxmLmNnaS5oYW5kbGVfcmVxdWVzdCgpCi0KLSAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgc3lzLnN0ZG91dC5jbG9zZSgpCi0gICAgICAgIHN5cy5zdGRpbiA9IHRtcDEKLSAgICAgICAgc3lzLnN0ZG91dCA9IHRtcDIKKyAgICAgICAgZGF0YV9vdXQuc2VlaygwKQogCiAgICAgICAgICMgd2lsbCByZXNwb25kIGV4Y2VwdGlvbiwgaWYgc28sIG91ciBnb2FsIGlzIGFjaGlldmVkIDspCi0gICAgICAgIGhhbmRsZSA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJyIikucmVhZCgpCisgICAgICAgIGhhbmRsZSA9IGRhdGFfb3V0LnJlYWQoKQogCiAgICAgICAgICMgc3RhcnQgd2l0aCA0NHRoIGNoYXIgc28gYXMgbm90IHRvIGdldCBodHRwIGhlYWRlciwgd2UganVzdAogICAgICAgICAjIG5lZWQgb25seSB4bWwKQEAgLTY1MiwxNCArOTMwLDIxIEBACiAgICAgICAgICAgICBpbnQocmUuc2VhcmNoKCdDb250ZW50LUxlbmd0aDogKFxkKyknLCBoYW5kbGUpLmdyb3VwKDEpKSwKICAgICAgICAgICAgIGxlbihjb250ZW50KSkKIAotICAgICAgICBvcy5yZW1vdmUoInhtbGRhdGEudHh0IikKLSAgICAgICAgb3MucmVtb3ZlKHN1cHBvcnQuVEVTVEZOKQogCi0KK0BzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHhtbHJwY190ZXN0cyA9IFtYTUxSUENUZXN0Q2FzZSwgSGVscGVyVGVzdENhc2UsIERhdGVUaW1lVGVzdENhc2UsCiAgICAgICAgICBCaW5hcnlUZXN0Q2FzZSwgRmF1bHRUZXN0Q2FzZV0KICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKFNpbXBsZVNlcnZlclRlc3RDYXNlKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UxKQorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoS2VlcGFsaXZlU2VydmVyVGVzdENhc2UyKQorICAgIHRyeToKKyAgICAgICAgaW1wb3J0IGd6aXAKKyAgICAgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChHemlwU2VydmVyVGVzdENhc2UpCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBwYXNzICNnemlwIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZAorICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoTXVsdGlQYXRoU2VydmVyVGVzdENhc2UpCisgICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTZXJ2ZXJQcm94eVRlc3RDYXNlKQogICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoRmFpbGluZ1NlcnZlclRlc3RDYXNlKQogICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoQ0dJSGFuZGxlclRlc3RDYXNlKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkgYi9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKaW5kZXggYjg0MjZhYy4uNWRmNzlmMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiBpbXBvcnQgY29sbGVjdGlvbnMKIGltcG9ydCBlcnJubwpAQCAtNDgsNyArNDgsNyBAQAogCiAgICAgICAgICMgUGVyZm9ybSBhIG1pbmltYWwgc2FuaXR5IGNoZWNrIG9uIHRoZSByZXN1bHQsIGp1c3QgdG8gYmUgc3VyZQogICAgICAgICAjIHRoZSByZXF1ZXN0IG1lYW5zIHdoYXQgd2UgdGhpbmsgaXQgbWVhbnMuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGJ1aWxkZXJzLCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSksIHR5cGUoYnVpbGRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYnVpbGRlcnMsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoW3ggZm9yIHggaW4gYnVpbGRlcnMgaWYgIjMueCIgaW4geF0sIGJ1aWxkZXJzKQogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQppbmRleCAzNGQwZmJjLi45MGFhYjg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CkBAIC0zLDIzICszLDM1IEBACiAgICAgaW1wb3J0IHpsaWIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB6bGliID0gTm9uZQotaW1wb3J0IHppcGZpbGUsIG9zLCB1bml0dGVzdCwgc3lzLCBzaHV0aWwsIHN0cnVjdCwgaW8KKworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBpbXAKK2ltcG9ydCB0aW1lCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RydWN0CitpbXBvcnQgemlwZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKIAogZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5RmlsZQogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQsIHJhbmRvbQorZnJvbSB1bml0dGVzdCBpbXBvcnQgc2tpcFVubGVzcwogCi1pbXBvcnQgdGVzdC5zdXBwb3J0IGFzIHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgZmluZGZpbGUKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgZmluZGZpbGUsIHVubGluawogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiBURVNURk5ESVIgPSBURVNURk4gKyAiZCIKIEZJWEVEVEVTVF9TSVpFID0gMTAwMAorREFUQUZJTEVTX0RJUiA9ICd6aXBmaWxlX2RhdGFmaWxlcycKIAogU01BTExfVEVTVF9EQVRBID0gWygnX3ppcHRlc3QxJywgJzFxMnczZTRyNXQnKSwKICAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL196aXB0ZXN0MicsICdxYXdzZWRyZnRnJyksCiAgICAgICAgICAgICAgICAgICAgKCcvemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvX3ppcHRlc3QzJywgJ2F6c3hkY2Z2Z2InKSwKICAgICAgICAgICAgICAgICAgICAoJ3ppcHRlc3QyZGlyL3ppcHRlc3QzZGlyL3ppcHRlc3Q0ZGlyL196aXB0ZXN0MycsICc2eTd1OGk5bzBwJyldCiAKKwogY2xhc3MgVGVzdHNXaXRoU291cmNlRmlsZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmxpbmVfZ2VuID0gKGJ5dGVzKCJaaXBmaWxlIHRlc3QgbGluZSAlZC4gcmFuZG9tIGZsb2F0OiAlZiIgJQpAQCAtMjgsMzY4ICs0MCw0NjcgQEAKICAgICAgICAgc2VsZi5kYXRhID0gYidcbicuam9pbihzZWxmLmxpbmVfZ2VuKSArIGInXG4nCiAKICAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCi0gICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3YiIpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKIAotICAgIGRlZiBtYWtlVGVzdEFyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKIAotICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJzdHJmaWxlIiksIHNlbGYuZGF0YSkKIAotICAgICAgICAjIFByaW50IHRoZSBaSVAgZGlyZWN0b3J5Ci0gICAgICAgIGZwID0gaW8uU3RyaW5nSU8oKQotICAgICAgICB6aXBmcC5wcmludGRpcihmaWxlPWZwKQorICAgICAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQorICAgICAgICAgICAgZnAgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICB6aXBmcC5wcmludGRpcihmaWxlPWZwKQorICAgICAgICAgICAgZGlyZWN0b3J5ID0gZnAuZ2V0dmFsdWUoKQorICAgICAgICAgICAgbGluZXMgPSBkaXJlY3Rvcnkuc3BsaXRsaW5lcygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaW5lcyksIDQpICMgTnVtYmVyIG9mIGZpbGVzICsgaGVhZGVyCiAKLSAgICAgICAgZGlyZWN0b3J5ID0gZnAuZ2V0dmFsdWUoKQotICAgICAgICBsaW5lcyA9IGRpcmVjdG9yeS5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignRmlsZSBOYW1lJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdNb2RpZmllZCcsIGxpbmVzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignU2l6ZScsIGxpbmVzWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRmlsZSBOYW1lJyBpbiBsaW5lc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdNb2RpZmllZCcgaW4gbGluZXNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU2l6ZScgaW4gbGluZXNbMF0pCisgICAgICAgICAgICBmbiwgZGF0ZSwgdGltZV8sIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZuLCAnYW5vdGhlci5uYW1lJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKGRhdGUsICclWS0lbS0lZCcpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRpbWUuc3RycHRpbWUodGltZV8sICclSDolTTolUycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQogCi0gICAgICAgIGZuLCBkYXRlLCB0aW1lLCBzaXplID0gbGluZXNbMV0uc3BsaXQoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZuLCAnYW5vdGhlci5uYW1lJykKLSAgICAgICAgIyBYWFg6IHRpbWVzdGFtcCBpcyBub3QgdGVzdGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgc3RyKGxlbihzZWxmLmRhdGEpKSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0CisgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQogCi0gICAgICAgICMgQ2hlY2sgdGhlIG5hbWVsaXN0Ci0gICAgICAgIG5hbWVzID0gemlwZnAubmFtZWxpc3QoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShURVNURk4gaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiYW5vdGhlci5uYW1lIiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJzdHJmaWxlIiBpbiBuYW1lcykKKyAgICAgICAgICAgICMgQ2hlY2sgaW5mb2xpc3QKKyAgICAgICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQorICAgICAgICAgICAgbmFtZXMgPSBbaS5maWxlbmFtZSBmb3IgaSBpbiBpbmZvc10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oVEVTVEZOLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oImFub3RoZXIubmFtZSIsIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RyZmlsZSIsIG5hbWVzKQorICAgICAgICAgICAgZm9yIGkgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCiAKLSAgICAgICAgIyBDaGVjayBpbmZvbGlzdAotICAgICAgICBpbmZvcyA9IHppcGZwLmluZm9saXN0KCkKLSAgICAgICAgbmFtZXMgPSBbIGkuZmlsZW5hbWUgZm9yIGkgaW4gaW5mb3MgXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShURVNURk4gaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiYW5vdGhlci5uYW1lIiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJzdHJmaWxlIiBpbiBuYW1lcykKLSAgICAgICAgZm9yIGkgaW4gaW5mb3M6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgICMgY2hlY2sgZ2V0aW5mbworICAgICAgICAgICAgZm9yIG5tIGluIChURVNURk4sICJhbm90aGVyLm5hbWUiLCAic3RyZmlsZSIpOgorICAgICAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlbmFtZSwgbm0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCiAKLSAgICAgICAgIyBjaGVjayBnZXRpbmZvCi0gICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKLSAgICAgICAgICAgIGluZm8gPSB6aXBmcC5nZXRpbmZvKG5tKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVuYW1lLCBubSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBzdHIpOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KLSAgICAgICAgemlwZnAudGVzdHppcCgpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgIGRlZiB0ZXN0U3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBPcGVuVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiB6aXBfb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGRhdGExID0gW10KLSAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQoMjU2KQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuMToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCiAKLSAgICAgICAgemlwZGF0YTIgPSBbXQotICAgICAgICB6aXBvcGVuMiA9IHppcGZwLm9wZW4oImFub3RoZXIubmFtZSIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgICAgICB6aXBkYXRhMiA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oImFub3RoZXIubmFtZSIpIGFzIHppcG9wZW4yOgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4yLnJlYWQoMjU2KQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YTIuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHppcGRhdGExKSwgc2VsZi5kYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHppcGRhdGEyKSwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHppcGRhdGExKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbih6aXBkYXRhMiksIHNlbGYuZGF0YSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgZGVmIHRlc3RPcGVuU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBPcGVuVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RPcGVuVmlhWmlwSW5mbyhzZWxmKToKKyAgICBkZWYgdGVzdF9vcGVuX3ZpYV96aXBfaW5mbyhzZWxmKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJmb28iKQotICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJiYXIiKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJuYW1lIiwgImZvbyIpCisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigibmFtZSIsICJiYXIiKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKLSAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCi0gICAgICAgIGRhdGEgPSBiIiIKLSAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6Ci0gICAgICAgICAgICBkYXRhICs9IHppcGZwLm9wZW4oaW5mbykucmVhZCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09IGIiZm9vYmFyIiBvciBkYXRhID09IGIiYmFyZm9vIikKLSAgICAgICAgZGF0YSA9IGIiIgotICAgICAgICBmb3IgaW5mbyBpbiBpbmZvczoKLSAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YSA9PSBiImZvb2JhciIgb3IgZGF0YSA9PSBiImJhcmZvbyIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQorICAgICAgICAgICAgZGF0YSA9IGIiIgorICAgICAgICAgICAgZm9yIGluZm8gaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGluZm8pIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gemlwb3Blbi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhID09IGIiZm9vYmFyIiBvciBkYXRhID09IGIiYmFyZm9vIikKKyAgICAgICAgICAgIGRhdGEgPSBiIiIKKyAgICAgICAgICAgIGZvciBpbmZvIGluIGluZm9zOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gemlwZnAucmVhZChpbmZvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEgPT0gYiJmb29iYXIiIG9yIGRhdGEgPT0gYiJiYXJmb28iKQogCi0gICAgZGVmIHppcFJhbmRvbU9wZW5UZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF9yYW5kb21fb3Blbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHppcGRhdGExID0gW10KLSAgICAgICAgemlwb3BlbjEgPSB6aXBmcC5vcGVuKFRFU1RGTikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlYWRfZGF0YSA9IHppcG9wZW4xLnJlYWQocmFuZGludCgxLCAxMDI0KSkKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgemlwb3BlbjE6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZChyYW5kaW50KDEsIDEwMjQpKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJy5qb2luKHppcGRhdGExKSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycuam9pbih6aXBkYXRhMSksIHNlbGYuZGF0YSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfcmFuZG9tX29wZW5fc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisKKyAgICBkZWYgdGVzdF91bml2ZXJhbF9yZWFkYWhlYWRzKHNlbGYpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTygpCisKKyAgICAgICAgZGF0YSA9IGInYVxyXG4nICogMTYgKiAxMDI0CisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICd3JywgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICB6aXBmcC53cml0ZXN0cihURVNURk4sIGRhdGEpCiAgICAgICAgIHppcGZwLmNsb3NlKCkKIAotICAgIGRlZiB0ZXN0UmFuZG9tT3BlblN0b3JlZChzZWxmKToKLSAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmFuZG9tT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICBkYXRhMiA9IGInJworICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAncicpCisgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4sICdyVScpIGFzIHppcG9wZW46CisgICAgICAgICAgICBmb3IgbGluZSBpbiB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGRhdGEyICs9IGxpbmUKKyAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgZGVmIHppcFJlYWRsaW5lVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyLnJlcGxhY2UoYidcbicsIGInXHJcbicpKQorCisgICAgZGVmIHppcF9yZWFkbGluZV9yZWFkX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICB6aXBvcGVuID0gemlwZnAub3BlbihURVNURk4pCi0gICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46Ci0gICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lZGF0YSwgbGluZSArICdcbicpCisgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW46CisgICAgICAgICAgICBkYXRhID0gYicnCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKIAorICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWQoMTAwKQorICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGRhdGEgKz0gcmVhZAorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgc2VsZi5kYXRhKQogICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIGRlZiB6aXBSZWFkbGluZXNUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF9yZWFkbGluZV90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgemlwbGluZXMgPSB6aXBmcC5vcGVuKFRFU1RGTikucmVhZGxpbmVzKCkKLSAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGxpbmVzKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArICdcbicpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYubGluZV9nZW46CisgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyAnXG4nKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBzdHIpOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgemlwZnAuY2xvc2UoKQotCi0gICAgZGVmIHppcEl0ZXJsaW5lc1Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKKyAgICBkZWYgemlwX3JlYWRsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIikKLSAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcGZwLm9wZW4oVEVTVEZOKSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB6aXBsaW5lcyA9IHppcG9wZW4ucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgJ1xuJykKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgemlwX2l0ZXJsaW5lc190ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAotICAgIGRlZiB0ZXN0UmVhZGxpbmVTdG9yZWQoc2VsZik6CisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihURVNURk4pIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIHppcG9wZW4pOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyAnXG4nKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBzdHIpOgorICAgICAgICAgICAgZi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9yZWFkX3N0b3JlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzYxMDogY2FsbHMgdG8gcmVhZGxpbmUoKSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIHRvIHJlYWQoKS4KICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwUmVhZGxpbmVUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdFJlYWRsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFJlYWRsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfcmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdEl0ZXJsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBJdGVybGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0RGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBkZWYgdGVzdF9pdGVybGluZXNfc3RvcmVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgICAgIGRlZiB0ZXN0T3BlbkRlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcE9wZW5UZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RSYW5kb21PcGVuRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYuemlwUmFuZG9tT3BlblRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RSZWFkbGluZURlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcFJlYWRsaW5lVGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3Rfb3Blbl9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcFJlYWRsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdEl0ZXJsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnppcEl0ZXJsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICAgICAgZGVmIHRlc3RMb3dDb21wcmVzc2lvbihzZWxmKToKLSAgICAgICAgICAgICMgQ2hlY2tzIGZvciBjYXNlcyB3aGVyZSBjb21wcmVzc2VkIGRhdGEgaXMgbGFyZ2VyIHRoYW4gb3JpZ2luYWwKLSAgICAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3JlYWRsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2l0ZXJsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX2l0ZXJsaW5lc190ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X2xvd19jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgZm9yIGNhc2VzIHdoZXJlIGNvbXByZXNzZWQgZGF0YSBpcyBsYXJnZXIgdGhhbiBvcmlnaW5hbC4iIiIKKyAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCAnMTInKQotICAgICAgICAgICAgemlwZnAuY2xvc2UoKQogCi0gICAgICAgICAgICAjIEdldCBhbiBvcGVuIG9iamVjdCBmb3Igc3RyZmlsZQotICAgICAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKLSAgICAgICAgICAgIG9wZW5vYmogPSB6aXBmcC5vcGVuKCJzdHJmaWxlIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Blbm9iai5yZWFkKDEpLCBiJzEnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVub2JqLnJlYWQoMSksIGInMicpCisgICAgICAgICMgR2V0IGFuIG9wZW4gb2JqZWN0IGZvciBzdHJmaWxlCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKCJzdHJmaWxlIikgYXMgb3Blbm9iajoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5vYmoucmVhZCgxKSwgYicxJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZW5vYmoucmVhZCgxKSwgYicyJykKIAotICAgIGRlZiB0ZXN0QWJzb2x1dGVBcmNuYW1lcyhzZWxmKToKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgdGVzdF9hYnNvbHV0ZV9hcmNuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiL2Fic29sdXRlIikKIAotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCiAKLSAgICBkZWYgdGVzdEFwcGVuZFRvWmlwRmlsZShzZWxmKToKLSAgICAgICAgIyBUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyB6aXBmaWxlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAuY2xvc2UoKQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTiwgInN0cmZpbGUiXSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2FwcGVuZF90b196aXBfZmlsZShzZWxmKToKKyAgICAgICAgIiIiVGVzdCBhcHBlbmRpbmcgdG8gYW4gZXhpc3RpbmcgemlwZmlsZS4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCiAKLSAgICBkZWYgdGVzdEFwcGVuZFRvTm9uWmlwRmlsZShzZWxmKToKLSAgICAgICAgIyBUZXN0IGFwcGVuZGluZyB0byBhbiBleGlzdGluZyBmaWxlIHRoYXQgaXMgbm90IGEgemlwZmlsZQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTiwgInN0cmZpbGUiXSkKKworICAgIGRlZiB0ZXN0X2FwcGVuZF90b19ub25femlwX2ZpbGUoc2VsZik6CisgICAgICAgICIiIlRlc3QgYXBwZW5kaW5nIHRvIGFuIGV4aXN0aW5nIGZpbGUgdGhhdCBpcyBub3QgYSB6aXBmaWxlLiIiIgogICAgICAgICAjIE5PVEU6IHRoaXMgdGVzdCBmYWlscyBpZiBsZW4oZCkgPCAyMiBiZWNhdXNlIG9mIHRoZSBmaXJzdAogICAgICAgICAjIGxpbmUgImZwaW4uc2VlaygtMjIsIDIpIiBpbiBfRW5kUmVjRGF0YQotICAgICAgICBkID0gYidJIGFtIG5vdCBhIFppcEZpbGUhJyoxMAotICAgICAgICBmID0gb3BlbihURVNURk4yLCAnd2InKQotICAgICAgICBmLndyaXRlKGQpCi0gICAgICAgIGYuY2xvc2UoKQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCBURVNURk4pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgZGF0YSA9IGInSSBhbSBub3QgYSBaaXBGaWxlIScqMTAKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGRhdGEpCiAKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOMiwgJ3JiJykKLSAgICAgICAgZi5zZWVrKGxlbihkKSkKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLm5hbWVsaXN0KCksIFtURVNURk5dKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiYSIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKIAotICAgIGRlZiB0ZXN0X1dyaXRlRGVmYXVsdE5hbWUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBjYWxsaW5nIFppcEZpbGUud3JpdGUgd2l0aG91dCBhcmNuYW1lIHNwZWNpZmllZCBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgcmVzdWx0Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikKLSAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgb3BlbihURVNURk4sICJyYiIpLnJlYWQoKSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOMiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGYuc2VlayhsZW4oZGF0YSkpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAubmFtZWxpc3QoKSwgW1RFU1RGTl0pCiAKLSAgICBkZWYgdGVzdF9QZXJGaWxlQ29tcHJlc3Npb24oc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmaWxlcyB3aXRoaW4gYSBaaXAgYXJjaGl2ZSBjYW4gaGF2ZSBkaWZmZXJlbnQgY29tcHJlc3Npb24gb3B0aW9ucwotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ3N0b3JlbWUnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ2RlZmxhdGVtZScsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICBzaW5mbyA9IHppcGZwLmdldGluZm8oJ3N0b3JlbWUnKQotICAgICAgICBkaW5mbyA9IHppcGZwLmdldGluZm8oJ2RlZmxhdGVtZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2luZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgZGVmIHRlc3Rfd3JpdGVfZGVmYXVsdF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNhbGxpbmcgWmlwRmlsZS53cml0ZSB3aXRob3V0IGFyY25hbWUgc3BlY2lmaWVkCisgICAgICAgIHByb2R1Y2VzIHRoZSBleHBlY3RlZCByZXN1bHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4pCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZChURVNURk4pLCBmLnJlYWQoKSkKIAotICAgIGRlZiB0ZXN0X1dyaXRlVG9SZWFkb25seShzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IHRyeWluZyB0byBjYWxsIHdyaXRlKCkgb24gYSByZWFkb25seSBaaXBGaWxlIG9iamVjdAotICAgICAgICAjIHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJzb21lZmlsZS50eHQiLCAiYm9ndXMiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLndyaXRlLCBURVNURk4pCi0gICAgICAgIHppcGYuY2xvc2UoKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9wZXJfZmlsZV9jb21wcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBmaWxlcyB3aXRoaW4gYSBaaXAgYXJjaGl2ZSBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICAgICAgY29tcHJlc3Npb24gb3B0aW9ucy4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgJ3N0b3JlbWUnLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICdkZWZsYXRlbWUnLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICAgICAgICAgIHNpbmZvID0gemlwZnAuZ2V0aW5mbygnc3RvcmVtZScpCisgICAgICAgICAgICBkaW5mbyA9IHppcGZwLmdldGluZm8oJ2RlZmxhdGVtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfREVGTEFURUQpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3Qoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKLSAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3JlYWRvbmx5KHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRyeWluZyB0byBjYWxsIHdyaXRlKCkgb24gYSByZWFkb25seSBaaXBGaWxlIG9iamVjdAorICAgICAgICByYWlzZXMgYSBSdW50aW1lRXJyb3IuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCJzb21lZmlsZS50eHQiLCAiYm9ndXMiKQogCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICB3cml0dGVuZmlsZSA9IHppcGZwLmV4dHJhY3QoZnBhdGgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZnAud3JpdGUsIFRFU1RGTikKIAotICAgICAgICAgICAgIyBtYWtlIHN1cmUgaXQgd2FzIHdyaXR0ZW4gdG8gdGhlIHJpZ2h0IHBsYWNlCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKLSAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGgpCi0gICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCisgICAgZGVmIHRlc3RfZXh0cmFjdChzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBmcGF0aCwgZmRhdGEgaW4gU01BTExfVEVTVF9EQVRBOgorICAgICAgICAgICAgICAgIHdyaXR0ZW5maWxlID0gemlwZnAuZXh0cmFjdChmcGF0aCkKIAotICAgICAgICAgICAgIyBtYWtlIHN1cmUgY29ycmVjdCBkYXRhIGlzIGluIGNvcnJlY3QgZmlsZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YS5lbmNvZGUoKSwgb3Blbih3cml0dGVuZmlsZSwgInJiIikucmVhZCgpKQorICAgICAgICAgICAgICAgICMgbWFrZSBzdXJlIGl0IHdhcyB3cml0dGVuIHRvIHRoZSByaWdodCBwbGFjZQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoZnBhdGgpOgorICAgICAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aCkKKyAgICAgICAgICAgICAgICBjb3JyZWN0ZmlsZSA9IG9zLnBhdGgubm9ybXBhdGgoY29ycmVjdGZpbGUpCiAKLSAgICAgICAgICAgIG9zLnJlbW92ZSh3cml0dGVuZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSkKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgIyBtYWtlIHN1cmUgY29ycmVjdCBkYXRhIGlzIGluIGNvcnJlY3QgZmlsZQorICAgICAgICAgICAgICAgIHdpdGggb3Blbih3cml0dGVuZmlsZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YS5lbmNvZGUoKSwgZi5yZWFkKCkpCisKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUod3JpdHRlbmZpbGUpCiAKICAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcwogICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3RBbGwoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKQotICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKLSAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKGZwYXRoLCBmZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiB0ZXN0X2V4dHJhY3RfYWxsKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCkgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCiAKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKQotICAgICAgICB6aXBmcC5leHRyYWN0YWxsKCkKLSAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKLSAgICAgICAgICAgICAgICBvdXRmaWxlID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBmcGF0aFsxOl0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAuZXh0cmFjdGFsbCgpCisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKGZwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgZnBhdGhbMTpdKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksIGZwYXRoKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLmVuY29kZSgpLCBvcGVuKG91dGZpbGUsICJyYiIpLnJlYWQoKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3V0ZmlsZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZGF0YS5lbmNvZGUoKSwgZi5yZWFkKCkpCiAKLSAgICAgICAgICAgIG9zLnJlbW92ZShvdXRmaWxlKQotCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3V0ZmlsZSkKIAogICAgICAgICAjIHJlbW92ZSB0aGUgdGVzdCBmaWxlIHN1YmRpcmVjdG9yaWVzCiAgICAgICAgIHNodXRpbC5ybXRyZWUob3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCAnemlwdGVzdDJkaXInKSkKIAorICAgIGRlZiB0ZXN0X3dyaXRlc3RyX2NvbXByZXNzaW9uKHNlbGYpOgorICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpCisgICAgICAgIHppcGZwLndyaXRlc3RyKCJhLnR4dCIsICJoZWxsbyB3b3JsZCIsIGNvbXByZXNzX3R5cGU9emlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICBpZiB6bGliOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoImIudHh0IiwgImhlbGxvIHdvcmxkIiwgY29tcHJlc3NfdHlwZT16aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbygnYS50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uY29tcHJlc3NfdHlwZSwgemlwZmlsZS5aSVBfU1RPUkVEKQorCisgICAgICAgIGlmIHpsaWI6CisgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbygnYi50eHQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmNvbXByZXNzX3R5cGUsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisKICAgICBkZWYgemlwX3Rlc3Rfd3JpdGVzdHJfcGVybWlzc2lvbnMoc2VsZiwgZiwgY29tcHJlc3Npb24pOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdyaXRlc3RyIGNyZWF0ZXMgZmlsZXMgd2l0aCBtb2RlIDA2MDAsCiAgICAgICAgICMgd2hlbiBpdCBpcyBwYXNzZWQgYSBuYW1lIHJhdGhlciB0aGFuIGEgWmlwSW5mbyBpbnN0YW5jZS4KIAotICAgICAgICBzZWxmLm1ha2VUZXN0QXJjaGl2ZShmLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICB6aW5mbyA9IHppcGZwLmdldGluZm8oJ3N0cmZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIDBvNjAwIDw8IDE2KQorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgemluZm8gPSB6aXBmcC5nZXRpbmZvKCdzdHJmaWxlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZXh0ZXJuYWxfYXR0ciwgMG82MDAgPDwgMTYpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X3dyaXRlc3RyX3Blcm1pc3Npb25zKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgogICAgICAgICAgICAgc2VsZi56aXBfdGVzdF93cml0ZXN0cl9wZXJtaXNzaW9ucyhmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKICAgICBkZWYgdGVzdF93cml0ZXN0cl9leHRlbmRlZF9sb2NhbF9oZWFkZXJfaXNzdWUxMjAyKHNlbGYpOgotICAgICAgICBvcmlnX3ppcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAndycpCi0gICAgICAgIGZvciBkYXRhIGluICdhYmNkZWZnaGlqa2xtbm9wJzoKLSAgICAgICAgICAgIHppbmZvID0gemlwZmlsZS5aaXBJbmZvKGRhdGEpCi0gICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMgfD0gMHgwOCAgIyBJbmNsdWRlIGFuIGV4dGVuZGVkIGxvY2FsIGhlYWRlci4KLSAgICAgICAgICAgIG9yaWdfemlwLndyaXRlc3RyKHppbmZvLCBkYXRhKQotICAgICAgICBvcmlnX3ppcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICd3JykgYXMgb3JpZ196aXA6CisgICAgICAgICAgICBmb3IgZGF0YSBpbiAnYWJjZGVmZ2hpamtsbW5vcCc6CisgICAgICAgICAgICAgICAgemluZm8gPSB6aXBmaWxlLlppcEluZm8oZGF0YSkKKyAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMgfD0gMHgwOCAgIyBJbmNsdWRlIGFuIGV4dGVuZGVkIGxvY2FsIGhlYWRlci4KKyAgICAgICAgICAgICAgICBvcmlnX3ppcC53cml0ZXN0cih6aW5mbywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBhZnRlciB0aGUgJ3dpdGgnIGJsb2NrLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZwYXRoLCBmZGF0YSBpbiBTTUFMTF9URVNUX0RBVEE6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoZnBhdGgsIGZkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcC5mcCBpcyBub3QgTm9uZSwgJ3ppcGZwIGlzIG5vdCBvcGVuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIE5vbmUsICd6aXBmcCBpcyBub3QgY2xvc2VkJykKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppcGZwLmZwIGlzIG5vdCBOb25lLCAnemlwZnAgaXMgbm90IG9wZW4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZnAuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfb25fZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHRoZSB6aXBmaWxlIGlzIGNsb3NlZCBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZQorICAgICAgICAnd2l0aCcgYmxvY2suIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgZnBhdGgsIGZkYXRhIGluIFNNQUxMX1RFU1RfREFUQToKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0cihmcGF0aCwgZmRhdGEpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiKSBhcyB6aXBmcDI6CisgICAgICAgICAgICAgICAgcmFpc2UgemlwZmlsZS5CYWRaaXBGaWxlKCkKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwRmlsZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmcDIuZnAgaXMgTm9uZSwgJ3ppcGZwIGlzIG5vdCBjbG9zZWQnKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfZmlsZW5hbWVzKHNlbGYpOgorICAgICAgICAjIGJ1ZyAjMTA4MDEKKyAgICAgICAgZm5hbWUgPSBmaW5kZmlsZSgnemlwX2NwNDM3X2hlYWRlci56aXAnKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmbmFtZSkgYXMgemlwZnA6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiB6aXBmcC5uYW1lbGlzdCgpOgorICAgICAgICAgICAgICAgIHppcGZwLm9wZW4obmFtZSkuY2xvc2UoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgVGVzdFppcDY0SW5TbWFsbEZpbGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRoZXNlIHRlc3RzIHRlc3QgdGhlIFpJUDY0IGZ1bmN0aW9uYWxpdHkgd2l0aG91dCB1c2luZyBsYXJnZSBmaWxlcywKQEAgLTQwNCwxODEgKzUxNSwyMDAgQEAKICAgICAgICAgc2VsZi5kYXRhID0gYidcbicuam9pbihsaW5lX2dlbikKIAogICAgICAgICAjIE1ha2UgYSBzb3VyY2UgZmlsZSB3aXRoIHNvbWUgbGluZXMKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgIndiIikKLSAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQogCi0gICAgZGVmIGxhcmdlRmlsZUV4Y2VwdGlvblRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKLSAgICAgICAgICAgICAgICB6aXBmcC53cml0ZSwgVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiBsYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlLCBURVNURk4sICJhbm90aGVyLm5hbWUiKQogCi0gICAgZGVmIGxhcmdlRmlsZUV4Y2VwdGlvblRlc3QyKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCi0gICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICBkZWYgbGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZnAud3JpdGVzdHIsICJhbm90aGVyLm5hbWUiLCBzZWxmLmRhdGEpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIGRlZiB0ZXN0TGFyZ2VGaWxlRXhjZXB0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xhcmdlX2ZpbGVfZXhjZXB0aW9uKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi5sYXJnZUZpbGVFeGNlcHRpb25UZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgICAgIHNlbGYubGFyZ2VGaWxlRXhjZXB0aW9uVGVzdDIoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5sYXJnZV9maWxlX2V4Y2VwdGlvbl90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYubGFyZ2VfZmlsZV9leGNlcHRpb25fdGVzdDIoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHppcFRlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgIGRlZiB6aXBfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQotICAgICAgICB6aXBmcC53cml0ZXN0cigic3RyZmlsZSIsIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGUoVEVTVEZOLCAiYW5vdGhlci5uYW1lIikKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgVEVTVEZOKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoInN0cmZpbGUiLCBzZWxmLmRhdGEpCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoVEVTVEZOKSwgc2VsZi5kYXRhKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoImFub3RoZXIubmFtZSIpLCBzZWxmLmRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKFRFU1RGTiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgiYW5vdGhlci5uYW1lIiksIHNlbGYuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnAucmVhZCgic3RyZmlsZSIpLCBzZWxmLmRhdGEpCiAKLSAgICAgICAgIyBQcmludCB0aGUgWklQIGRpcmVjdG9yeQotICAgICAgICBmcCA9IGlvLlN0cmluZ0lPKCkKLSAgICAgICAgemlwZnAucHJpbnRkaXIoZnApCisgICAgICAgICAgICAjIFByaW50IHRoZSBaSVAgZGlyZWN0b3J5CisgICAgICAgICAgICBmcCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHppcGZwLnByaW50ZGlyKGZwKQogCi0gICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKLSAgICAgICAgbGluZXMgPSBkaXJlY3Rvcnkuc3BsaXRsaW5lcygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxpbmVzKSwgNCkgIyBOdW1iZXIgb2YgZmlsZXMgKyBoZWFkZXIKKyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgIGxpbmVzID0gZGlyZWN0b3J5LnNwbGl0bGluZXMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCA0KSAjIE51bWJlciBvZiBmaWxlcyArIGhlYWRlcgogCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRmlsZSBOYW1lJyBpbiBsaW5lc1swXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdNb2RpZmllZCcgaW4gbGluZXNbMF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU2l6ZScgaW4gbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdGaWxlIE5hbWUnLCBsaW5lc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ01vZGlmaWVkJywgbGluZXNbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdTaXplJywgbGluZXNbMF0pCiAKLSAgICAgICAgZm4sIGRhdGUsIHRpbWUsIHNpemUgPSBsaW5lc1sxXS5zcGxpdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm4sICdhbm90aGVyLm5hbWUnKQotICAgICAgICAjIFhYWDogdGltZXN0YW1wIGlzIG5vdCB0ZXN0ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBzdHIobGVuKHNlbGYuZGF0YSkpKQorICAgICAgICAgICAgZm4sIGRhdGUsIHRpbWVfLCBzaXplID0gbGluZXNbMV0uc3BsaXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbiwgJ2Fub3RoZXIubmFtZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGltZS5zdHJwdGltZShkYXRlLCAnJVktJW0tJWQnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0aW1lLnN0cnB0aW1lKHRpbWVfLCAnJUg6JU06JVMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgc3RyKGxlbihzZWxmLmRhdGEpKSkKIAotICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAotICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoVEVTVEZOIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoImFub3RoZXIubmFtZSIgaW4gbmFtZXMpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgic3RyZmlsZSIgaW4gbmFtZXMpCisgICAgICAgICAgICAjIENoZWNrIHRoZSBuYW1lbGlzdAorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuYW1lcyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKFRFU1RGTiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJhbm90aGVyLm5hbWUiLCBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0cmZpbGUiLCBuYW1lcykKIAotICAgICAgICAjIENoZWNrIGluZm9saXN0Ci0gICAgICAgIGluZm9zID0gemlwZnAuaW5mb2xpc3QoKQotICAgICAgICBuYW1lcyA9IFsgaS5maWxlbmFtZSBmb3IgaSBpbiBpbmZvcyBdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG5hbWVzKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFRFU1RGTiBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCJhbm90aGVyLm5hbWUiIGluIG5hbWVzKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoInN0cmZpbGUiIGluIG5hbWVzKQotICAgICAgICBmb3IgaSBpbiBpbmZvczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaS5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgIyBDaGVjayBpbmZvbGlzdAorICAgICAgICAgICAgaW5mb3MgPSB6aXBmcC5pbmZvbGlzdCgpCisgICAgICAgICAgICBuYW1lcyA9IFtpLmZpbGVuYW1lIGZvciBpIGluIGluZm9zXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obmFtZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihURVNURk4sIG5hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiYW5vdGhlci5uYW1lIiwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJzdHJmaWxlIiwgbmFtZXMpCisgICAgICAgICAgICBmb3IgaSBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkuZmlsZV9zaXplLCBsZW4oc2VsZi5kYXRhKSkKIAotICAgICAgICAjIGNoZWNrIGdldGluZm8KLSAgICAgICAgZm9yIG5tIGluIChURVNURk4sICJhbm90aGVyLm5hbWUiLCAic3RyZmlsZSIpOgotICAgICAgICAgICAgaW5mbyA9IHppcGZwLmdldGluZm8obm0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvLmZpbGVfc2l6ZSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICAjIGNoZWNrIGdldGluZm8KKyAgICAgICAgICAgIGZvciBubSBpbiAoVEVTVEZOLCAiYW5vdGhlci5uYW1lIiwgInN0cmZpbGUiKToKKyAgICAgICAgICAgICAgICBpbmZvID0gemlwZnAuZ2V0aW5mbyhubSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm8uZmlsZW5hbWUsIG5tKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5maWxlX3NpemUsIGxlbihzZWxmLmRhdGEpKQogCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0ZXN0emlwIGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uCi0gICAgICAgIHppcGZwLnRlc3R6aXAoKQorICAgICAgICAgICAgIyBDaGVjayB0aGF0IHRlc3R6aXAgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24KKyAgICAgICAgICAgIHppcGZwLnRlc3R6aXAoKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBzdHIpOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKLQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdFN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi56aXBfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQogCi0gICAgaWYgemxpYjoKLSAgICAgICAgZGVmIHRlc3REZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi56aXBUZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorICAgIGRlZiB0ZXN0X2Fic29sdXRlX2FyY25hbWVzKHNlbGYpOgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX1NUT1JFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCiAKLSAgICBkZWYgdGVzdEFic29sdXRlQXJjbmFtZXMoc2VsZik6Ci0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpCi0gICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgIi9hYnNvbHV0ZSIpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKLQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAiciIsIHppcGZpbGUuWklQX1NUT1JFRCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInIiLCB6aXBmaWxlLlpJUF9TVE9SRUQpIGFzIHppcGZwOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5uYW1lbGlzdCgpLCBbImFic29sdXRlIl0pCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSBzZWxmLl9saW1pdAotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQotICAgICAgICBvcy5yZW1vdmUoVEVTVEZOMikKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKyAgICAgICAgdW5saW5rKFRFU1RGTjIpCisKIAogY2xhc3MgUHlaaXBGaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0V3JpdGVQeWZpbGUoc2VsZik6Ci0gICAgICAgIHppcGZwICA9IHppcGZpbGUuUHlaaXBGaWxlKFRlbXBvcmFyeUZpbGUoKSwgInciKQotICAgICAgICBmbiA9IF9fZmlsZV9fCi0gICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgIGZuID0gZm5bOi0xXQorICAgIGRlZiB0ZXN0X3dyaXRlX3B5ZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZuID0gX19maWxlX18KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHljJykgb3IgZm4uZW5kc3dpdGgoJy5weW8nKToKKyAgICAgICAgICAgICAgICBwYXRoX3NwbGl0ID0gZm4uc3BsaXQob3Muc2VwKQorICAgICAgICAgICAgICAgIGlmIG9zLmFsdHNlcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcGF0aF9zcGxpdC5leHRlbmQoZm4uc3BsaXQob3MuYWx0c2VwKSkKKyAgICAgICAgICAgICAgICBpZiAnX19weWNhY2hlX18nIGluIHBhdGhfc3BsaXQ6CisgICAgICAgICAgICAgICAgICAgIGZuID0gaW1wLnNvdXJjZV9mcm9tX2NhY2hlKGZuKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZuID0gZm5bOi0xXQogCi0gICAgICAgIHppcGZwLndyaXRlcHkoZm4pCisgICAgICAgICAgICB6aXBmcC53cml0ZXB5KGZuKQogCi0gICAgICAgIGJuID0gb3MucGF0aC5iYXNlbmFtZShmbikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuIG5vdCBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvciBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICBibiA9IG9zLnBhdGguYmFzZW5hbWUoZm4pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGJuLCB6aXBmcC5uYW1lbGlzdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuICsgJ28nIGluIHppcGZwLm5hbWVsaXN0KCkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQogCisgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCisgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgoJy5weWMnLCAnLnB5bycpKToKKyAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KIAotICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKLSAgICAgICAgZm4gPSBfX2ZpbGVfXwotICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICBmbiA9IGZuWzotMV0KKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkoZm4sICJ0ZXN0cGFja2FnZSIpCiAKLSAgICAgICAgemlwZnAud3JpdGVweShmbiwgInRlc3RwYWNrYWdlIikKKyAgICAgICAgICAgIGJuID0gIiVzLyVzIiAlICgidGVzdHBhY2thZ2UiLCBvcy5wYXRoLmJhc2VuYW1lKGZuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYm4sIHppcGZwLm5hbWVsaXN0KCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJuICsgJ2MnIGluIHppcGZwLm5hbWVsaXN0KCkpCiAKLSAgICAgICAgYm4gPSAiJXMvJXMiJSgidGVzdHBhY2thZ2UiLCBvcy5wYXRoLmJhc2VuYW1lKGZuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJuIG5vdCBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYm4gKyAnbycgaW4gemlwZnAubmFtZWxpc3QoKSBvciBibiArICdjJyBpbiB6aXBmcC5uYW1lbGlzdCgpKQotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgdGVzdFdyaXRlUHl0aG9uUGFja2FnZShzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9weXRob25fcGFja2FnZShzZWxmKToKICAgICAgICAgaW1wb3J0IGVtYWlsCiAgICAgICAgIHBhY2thZ2VkaXIgPSBvcy5wYXRoLmRpcm5hbWUoZW1haWwuX19maWxlX18pCiAKLSAgICAgICAgemlwZnAgID0gemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpCi0gICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKIAotICAgICAgICAjIENoZWNrIGZvciBhIGNvdXBsZSBvZiBtb2R1bGVzIGF0IGRpZmZlcmVudCBsZXZlbHMgb2YgdGhlIGhpZWFyYXJjaHkKLSAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZW1haWwvX19pbml0X18ucHlvJyBpbiBuYW1lcyBvciAnZW1haWwvX19pbml0X18ucHljJyBpbiBuYW1lcykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdlbWFpbC9taW1lL3RleHQucHlvJyBpbiBuYW1lcyBvciAnZW1haWwvbWltZS90ZXh0LnB5YycgaW4gbmFtZXMpCisgICAgICAgICAgICAjIENoZWNrIGZvciBhIGNvdXBsZSBvZiBtb2R1bGVzIGF0IGRpZmZlcmVudCBsZXZlbHMgb2YgdGhlCisgICAgICAgICAgICAjIGhpZXJhcmNoeQorICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ2VtYWlsL19faW5pdF9fLnB5bycgaW4gbmFtZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwvX19pbml0X18ucHljJyBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnZW1haWwvbWltZS90ZXh0LnB5bycgaW4gbmFtZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwvbWltZS90ZXh0LnB5YycgaW4gbmFtZXMpCiAKLSAgICBkZWYgdGVzdFdyaXRlUHl0aG9uRGlyZWN0b3J5KHNlbGYpOgotICAgICAgICBvcy5ta2RpcihURVNURk4yKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QxLnB5IiksICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MilcbiIpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgZGVmIHRlc3Rfd3JpdGVfd2l0aF9vcHRpbWl6YXRpb24oc2VsZik6CisgICAgICAgIGltcG9ydCBlbWFpbAorICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQorICAgICAgICAjIHVzZSAucHljIGlmIHJ1bm5pbmcgdGVzdCBpbiBvcHRpbWl6YXRpb24gbW9kZSwKKyAgICAgICAgIyB1c2UgLnB5byBpZiBydW5uaW5nIHRlc3QgaW4gZGVidWcgbW9kZQorICAgICAgICBvcHRsZXZlbCA9IDEgaWYgX19kZWJ1Z19fIGVsc2UgMAorICAgICAgICBleHQgPSAnLnB5bycgaWYgb3B0bGV2ZWwgPT0gMSBlbHNlICcucHljJwogCi0gICAgICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QyLnB5IiksICJ3IikKLSAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MiAqIDQyKVxuIikKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLQotICAgICAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMi50eHQiKSwgInciKQotICAgICAgICAgICAgZnAud3JpdGUoImJsYSBibGEgYmxhXG4iKQotICAgICAgICAgICAgZnAuY2xvc2UoKQotCi0gICAgICAgICAgICB6aXBmcCAgPSB6aXBmaWxlLlB5WmlwRmlsZShUZW1wb3JhcnlGaWxlKCksICJ3IikKLSAgICAgICAgICAgIHppcGZwLndyaXRlcHkoVEVTVEZOMikKKyAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgXAorICAgICAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKIAogICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21vZDEucHljJyBpbiBuYW1lcyBvciAnbW9kMS5weW8nIGluIG5hbWVzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdtb2QyLnB5YycgaW4gbmFtZXMgb3IgJ21vZDIucHlvJyBpbiBuYW1lcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbW9kMi50eHQnIG5vdCBpbiBuYW1lcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2VtYWlsL19faW5pdF9fJyArIGV4dCwgbmFtZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdlbWFpbC9taW1lL3RleHQnICsgZXh0LCBuYW1lcykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3B5dGhvbl9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDEucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIpXG4iKQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QyLnB5IiksICJ3IikgYXMgZnA6CisgICAgICAgICAgICAgICAgZnAud3JpdGUoInByaW50KDQyICogNDIpXG4iKQorCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFU1RGTjIsICJtb2QyLnR4dCIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJibGEgYmxhIGJsYVxuIikKKworICAgICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KFRFU1RGTjIpCisKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ21vZDEucHljJyBpbiBuYW1lcyBvciAnbW9kMS5weW8nIGluIG5hbWVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnbW9kMi5weWMnIGluIG5hbWVzIG9yICdtb2QyLnB5bycgaW4gbmFtZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMi50eHQnLCBuYW1lcykKIAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQogCi0gICAgZGVmIHRlc3RXcml0ZU5vblB5ZmlsZShzZWxmKToKLSAgICAgICAgemlwZnAgID0gemlwZmlsZS5QeVppcEZpbGUoVGVtcG9yYXJ5RmlsZSgpLCAidyIpCi0gICAgICAgIG9wZW4oVEVTVEZOLCAndycpLndyaXRlKCdtb3N0IGRlZmluaXRlbHkgbm90IGEgcHl0aG9uIGZpbGUnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTikKKyAgICBkZWYgdGVzdF93cml0ZV9ub25fcHlmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ21vc3QgZGVmaW5pdGVseSBub3QgYSBweXRob24gZmlsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGZwLndyaXRlcHksIFRFU1RGTikKKyAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4pCiAKIAogY2xhc3MgT3RoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02MDMsMTcgKzczMywxNyBAQAogICAgICAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKSwKICAgICB9CiAKLSAgICBkZWYgdGVzdFVuaWNvZGVGaWxlbmFtZXMoc2VsZik6Ci0gICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciKQotICAgICAgICB6Zi53cml0ZXN0cigiZm9vLnR4dCIsICJUZXN0IGZvciB1bmljb2RlIGZpbGVuYW1lIikKLSAgICAgICAgemYud3JpdGVzdHIoIlx4ZjYudHh0IiwgIlRlc3QgZm9yIHVuaWNvZGUgZmlsZW5hbWUiKQotICAgICAgICB6Zi5jbG9zZSgpCi0gICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLmZpbGVsaXN0WzBdLmZpbGVuYW1lLCAiZm9vLnR4dCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMV0uZmlsZW5hbWUsICJceGY2LnR4dCIpCi0gICAgICAgIHpmLmNsb3NlKCkKKyAgICBkZWYgdGVzdF91bmljb2RlX2ZpbGVuYW1lcyhzZWxmKToKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpIGFzIHpmOgorICAgICAgICAgICAgemYud3JpdGVzdHIoImZvby50eHQiLCAiVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZSIpCisgICAgICAgICAgICB6Zi53cml0ZXN0cigiXHhmNi50eHQiLCAiVGVzdCBmb3IgdW5pY29kZSBmaWxlbmFtZSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoemYuaW5mb2xpc3QoKVswXS5maWxlbmFtZSwgc3RyKQogCi0gICAgZGVmIHRlc3RDcmVhdGVOb25FeGlzdGVudEZpbGVGb3JBcHBlbmQoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInIiKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMF0uZmlsZW5hbWUsICJmb28udHh0IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemYuZmlsZWxpc3RbMV0uZmlsZW5hbWUsICJceGY2LnR4dCIpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfbm9uX2V4aXN0ZW50X2ZpbGVfZm9yX2FwcGVuZChzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVTVEZOKToKICAgICAgICAgICAgIG9zLnVubGluayhURVNURk4pCiAKQEAgLTYyMSw0MiArNzUxLDM4IEBACiAgICAgICAgIGNvbnRlbnQgPSBiJ2hlbGxvLCB3b3JsZC4gdGhpcyBpcyBzb21lIGNvbnRlbnQuJwogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgJ2EnKQotICAgICAgICAgICAgemYud3JpdGVzdHIoZmlsZW5hbWUsIGNvbnRlbnQpCi0gICAgICAgICAgICB6Zi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdhJykgYXMgemY6CisgICAgICAgICAgICAgICAgemYud3JpdGVzdHIoZmlsZW5hbWUsIGNvbnRlbnQpCiAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCdDb3VsZCBub3QgYXBwZW5kIGRhdGEgdG8gYSBub24tZXhpc3RlbnQgemlwIGZpbGUuJykKIAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKIAotICAgICAgICB6ZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICdyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6Zi5yZWFkKGZpbGVuYW1lKSwgY29udGVudCkKLSAgICAgICAgemYuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICdyJykgYXMgemY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpmLnJlYWQoZmlsZW5hbWUpLCBjb250ZW50KQogCi0gICAgZGVmIHRlc3RDbG9zZUVycm9uZW91c0ZpbGUoc2VsZik6CisgICAgZGVmIHRlc3RfY2xvc2VfZXJyb25lb3VzX2ZpbGUoc2VsZik6CiAgICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBaaXBGaWxlIGNvbnN0cnVjdG9yIGNsb3NlcyB0aGUgZmlsZSBvYmplY3QKLSAgICAgICAgIyBpdCBvcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBmaWxlLiAgSWYgaXQgZG9lc24ndCwgdGhlIHRyYWNlYmFjawotICAgICAgICAjIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBaaXBGaWxlIG9iamVjdCBhbmQsIGluZGlyZWN0bHksIHRoZSBmaWxlIG9iamVjdC4KKyAgICAgICAgIyBpdCBvcGVucyBpZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBmaWxlLiAgSWYgaXQgZG9lc24ndCwgdGhlCisgICAgICAgICMgdHJhY2ViYWNrIGhvbGRzIGEgcmVmZXJlbmNlIHRvIHRoZSBaaXBGaWxlIG9iamVjdCBhbmQsIGluZGlyZWN0bHksCisgICAgICAgICMgdGhlIGZpbGUgb2JqZWN0LgogICAgICAgICAjIE9uIFdpbmRvd3MsIHRoaXMgY2F1c2VzIHRoZSBvcy51bmxpbmsoKSBjYWxsIHRvIGZhaWwgYmVjYXVzZSB0aGUKICAgICAgICAgIyB1bmRlcmx5aW5nIGZpbGUgaXMgc3RpbGwgb3Blbi4gIFRoaXMgaXMgU0YgYnVnICM0MTIyMTQuCiAgICAgICAgICMKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgInciKQotICAgICAgICBmcC53cml0ZSgidGhpcyBpcyBub3QgYSBsZWdhbCB6aXAgZmlsZVxuIikKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHpmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTikKLSAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwRmlsZToKICAgICAgICAgICAgIHBhc3MKIAotICAgIGRlZiB0ZXN0SXNaaXBFcnJvbmVvdXNGaWxlKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgaXNfemlwZmlsZSBmdW5jdGlvbiBjb3JyZWN0bHkgaWRlbnRpZmllcwotICAgICAgICAjIGEgZmlsZSB0aGF0IGlzIG5vdCBhIHppcCBmaWxlCi0KKyAgICBkZWYgdGVzdF9pc196aXBfZXJyb25lb3VzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgaXNfemlwZmlsZSgpIGNvcnJlY3RseSBpZGVudGlmaWVzIG5vbi16aXAgZmlsZXMuIiIiCiAgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZW5hbWUKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInciKSBhcyBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKCJ0aGlzIGlzIG5vdCBhIGxlZ2FsIHppcCBmaWxlXG4iKQogICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoVEVTVEZOKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGNoaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjaGspCiAgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZSBvYmplY3QKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgInJiIikgYXMgZnA6CiAgICAgICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoZnApCkBAIC02NjYsMzYgKzc5MiwzNCBAQAogICAgICAgICBmcC53cml0ZShiInRoaXMgaXMgbm90IGEgbGVnYWwgemlwIGZpbGVcbiIpCiAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCi0gICAgICAgIGZwLnNlZWsoMCwwKQorICAgICAgICBmcC5zZWVrKDAsIDApCiAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBjaGspCiAKLSAgICBkZWYgdGVzdElzWmlwVmFsaWRGaWxlKHNlbGYpOgotICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgaXNfemlwZmlsZSBmdW5jdGlvbiBjb3JyZWN0bHkgaWRlbnRpZmllcwotICAgICAgICAjIGEgZmlsZSB0aGF0IGlzIGEgemlwIGZpbGUKLQorICAgIGRlZiB0ZXN0X2lzX3ppcF92YWxpZF9maWxlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGlzX3ppcGZpbGUoKSBjb3JyZWN0bHkgaWRlbnRpZmllcyB6aXAgZmlsZXMuIiIiCiAgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZW5hbWUKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKwogICAgICAgICBjaGsgPSB6aXBmaWxlLmlzX3ppcGZpbGUoVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQogICAgICAgICAjIC0gcGFzc2luZyBhIGZpbGUgb2JqZWN0CiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICJyYiIpIGFzIGZwOgogICAgICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKLSAgICAgICAgICAgIGZwLnNlZWsoMCwwKQorICAgICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICAgICAgemlwX2NvbnRlbnRzID0gZnAucmVhZCgpCiAgICAgICAgICMgLSBwYXNzaW5nIGEgZmlsZS1saWtlIG9iamVjdAogICAgICAgICBmcCA9IGlvLkJ5dGVzSU8oKQogICAgICAgICBmcC53cml0ZSh6aXBfY29udGVudHMpCiAgICAgICAgIGNoayA9IHppcGZpbGUuaXNfemlwZmlsZShmcCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNoaykKLSAgICAgICAgZnAuc2VlaygwLDApCisgICAgICAgIGZwLnNlZWsoMCwgMCkKICAgICAgICAgY2hrID0gemlwZmlsZS5pc196aXBmaWxlKGZwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hrKQogCi0gICAgZGVmIHRlc3ROb25FeGlzdGVudEZpbGVSYWlzZXNJT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtNzEyLDE5ICs4MzYsMTcgQEAKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlX3JhaXNlc19CYWRaaXBGaWxlKHNlbGYpOgogICAgICAgICBmID0gb3BlbihURVNURk4sICd3JykKICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwZmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCiAKLSAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCi0gICAgICAgIGYud3JpdGUoInNob3J0IGZpbGUiKQotICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBmaWxlLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKCJzaG9ydCBmaWxlIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBGaWxlLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTikKIAotICAgIGRlZiB0ZXN0Q2xvc2VkWmlwUmFpc2VzUnVudGltZUVycm9yKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGF0IHRlc3R6aXAoKSBkb2Vzbid0IHN3YWxsb3cgaW5hcHByb3ByaWF0ZSBleGNlcHRpb25zLgorICAgIGRlZiB0ZXN0X2Nsb3NlZF96aXBfcmFpc2VzX1J1bnRpbWVFcnJvcihzZWxmKToKKyAgICAgICAgIiIiVmVyaWZ5IHRoYXQgdGVzdHppcCgpIGRvZXNuJ3Qgc3dhbGxvdyBpbmFwcHJvcHJpYXRlIGV4Y2VwdGlvbnMuIiIiCiAgICAgICAgIGRhdGEgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShkYXRhLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGRhdGEsIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKIAogICAgICAgICAjIFRoaXMgaXMgY29ycmVjdDsgY2FsbGluZyAucmVhZCBvbiBhIGNsb3NlZCBaaXBGaWxlIHNob3VsZCB0aHJvdwogICAgICAgICAjIGEgUnVudGltZUVycm9yLCBhbmQgc28gc2hvdWxkIGNhbGxpbmcgLnRlc3R6aXAuICBBbiBlYXJsaWVyCkBAIC03MzQsMTUwICs4NTYsMTM5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi5vcGVuLCAiZm9vLnR4dCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi50ZXN0emlwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYud3JpdGVzdHIsICJib2d1cy50eHQiLCAiYm9ndXMiKQotICAgICAgICBvcGVuKFRFU1RGTiwgJ3cnKS53cml0ZSgnemlwZmlsZSB0ZXN0IGRhdGEnKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCd6aXBmaWxlIHRlc3QgZGF0YScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZi53cml0ZSwgVEVTVEZOKQogCi0gICAgZGVmIHRlc3RfQmFkQ29uc3RydWN0b3JNb2RlKHNlbGYpOgotICAgICAgICAjIENoZWNrIHRoYXQgYmFkIG1vZGVzIHBhc3NlZCB0byBaaXBGaWxlIGNvbnN0cnVjdG9yIGFyZSBjYXVnaHQKKyAgICBkZWYgdGVzdF9iYWRfY29uc3RydWN0b3JfbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUgY29uc3RydWN0b3IgYXJlIGNhdWdodC4iIiIKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmaWxlLlppcEZpbGUsIFRFU1RGTiwgInEiKQogCi0gICAgZGVmIHRlc3RfQmFkT3Blbk1vZGUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBiYWQgbW9kZXMgcGFzc2VkIHRvIFppcEZpbGUub3BlbiBhcmUgY2F1Z2h0Ci0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICBkZWYgdGVzdF9iYWRfb3Blbl9tb2RlKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGJhZCBtb2RlcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZSBjYXVnaHQuIiIiCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGY6CiAgICAgICAgICMgcmVhZCB0aGUgZGF0YSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdGhlcmUKLSAgICAgICAgemlwZi5yZWFkKCJmb28udHh0IikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgICAgIHppcGYucmVhZCgiZm9vLnR4dCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAicSIpCiAKLSAgICBkZWYgdGVzdF9SZWFkMChzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGNhbGxpbmcgcmVhZCgwKSBvbiBhIFppcEV4dEZpbGUgb2JqZWN0IHJldHVybnMgYW4gZW1wdHkKLSAgICAgICAgIyBzdHJpbmcgYW5kIGRvZXNuJ3QgYWR2YW5jZSBmaWxlIHBvaW50ZXIKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICAjIHJlYWQgdGhlIGRhdGEgdG8gbWFrZSBzdXJlIHRoZSBmaWxlIGlzIHRoZXJlCi0gICAgICAgIGYgPSB6aXBmLm9wZW4oImZvby50eHQiKQotICAgICAgICBmb3IgaSBpbiByYW5nZShGSVhFRFRFU1RfU0laRSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgwKSwgYicnKQorICAgIGRlZiB0ZXN0X3JlYWQwKHNlbGYpOgorICAgICAgICAiIiJDaGVjayB0aGF0IGNhbGxpbmcgcmVhZCgwKSBvbiBhIFppcEV4dEZpbGUgb2JqZWN0IHJldHVybnMgYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nIGFuZCBkb2Vzbid0IGFkdmFuY2UgZmlsZSBwb2ludGVyLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgICAgICMgcmVhZCB0aGUgZGF0YSB0byBtYWtlIHN1cmUgdGhlIGZpbGUgaXMgdGhlcmUKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCJmb28udHh0IikgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShGSVhFRFRFU1RfU0laRSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCBiJycpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKIAotICAgIGRlZiB0ZXN0X09wZW5Ob25leGlzdGVudEl0ZW0oc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhdHRlbXB0aW5nIHRvIGNhbGwgb3BlbigpIGZvciBhbiBpdGVtIHRoYXQgZG9lc24ndAotICAgICAgICAjIGV4aXN0IGluIHRoZSBhcmNoaXZlIHJhaXNlcyBhIFJ1bnRpbWVFcnJvcgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB6aXBmLm9wZW4sICJmb28udHh0IiwgInIiKQorICAgIGRlZiB0ZXN0X29wZW5fbm9uX2V4aXN0ZW50X2l0ZW0oc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgYXR0ZW1wdGluZyB0byBjYWxsIG9wZW4oKSBmb3IgYW4gaXRlbSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgZXhpc3QgaW4gdGhlIGFyY2hpdmUgcmFpc2VzIGEgUnVudGltZUVycm9yLiIiIgorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHppcGYub3BlbiwgImZvby50eHQiLCAiciIpCiAKLSAgICBkZWYgdGVzdF9CYWRDb21wcmVzc2lvbk1vZGUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBiYWQgY29tcHJlc3Npb24gbWV0aG9kcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZSBjYXVnaHQKKyAgICBkZWYgdGVzdF9iYWRfY29tcHJlc3Npb25fbW9kZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBiYWQgY29tcHJlc3Npb24gbWV0aG9kcyBwYXNzZWQgdG8gWmlwRmlsZS5vcGVuIGFyZQorICAgICAgICBjYXVnaHQuIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICJ3IiwgLTEpCiAKLSAgICBkZWYgdGVzdF9OdWxsQnl0ZUluRmlsZW5hbWUoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgYSBudWxsIGJ5dGUgaXMgcHJvcGVybHkgdGVybWluYXRlZAotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHRceDAwcXFxIiwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLm5hbWVsaXN0KCksIFsnZm9vLnR4dCddKQorICAgIGRlZiB0ZXN0X251bGxfYnl0ZV9pbl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCBhIGZpbGVuYW1lIGNvbnRhaW5pbmcgYSBudWxsIGJ5dGUgaXMgcHJvcGVybHkKKyAgICAgICAgdGVybWluYXRlZC4iIiIKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHRceDAwcXFxIiwgYiJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5uYW1lbGlzdCgpLCBbJ2Zvby50eHQnXSkKIAotICAgIGRlZiB0ZXN0X1N0cnVjdFNpemVzKHNlbGYpOgotICAgICAgICAjIGNoZWNrIHRoYXQgWklQIGludGVybmFsIHN0cnVjdHVyZSBzaXplcyBhcmUgY2FsY3VsYXRlZCBjb3JyZWN0bHkKKyAgICBkZWYgdGVzdF9zdHJ1Y3Rfc2l6ZXMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgWklQIGludGVybmFsIHN0cnVjdHVyZSBzaXplcyBhcmUgY2FsY3VsYXRlZCBjb3JyZWN0bHkuIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplRW5kQ2VudERpciwgMjIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplQ2VudHJhbERpciwgNDYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZmlsZS5zaXplRW5kQ2VudERpcjY0LCA1NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmaWxlLnNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyMCkKIAotICAgIGRlZiB0ZXN0Q29tbWVudHMoc2VsZik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGNvbW1lbnRzIG9uIHRoZSBhcmNoaXZlIGFyZSBoYW5kbGVkIHByb3Blcmx5CisgICAgZGVmIHRlc3RfY29tbWVudHMoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgY29tbWVudHMgb24gdGhlIGFyY2hpdmUgYXJlIGhhbmRsZWQgcHJvcGVybHkuIiIiCiAKICAgICAgICAgIyBjaGVjayBkZWZhdWx0IGNvbW1lbnQgaXMgZW1wdHkKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGYuY29tbWVudCwgYicnKQotICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQotICAgICAgICB6aXBmLmNsb3NlKCkKLSAgICAgICAgemlwZnIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmci5jb21tZW50LCBiJycpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZi5jb21tZW50LCBiJycpCisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28udHh0IiwgIk8sIGZvciBhIE11c2Ugb2YgRmlyZSEiKQorCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGZyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmci5jb21tZW50LCBiJycpCiAKICAgICAgICAgIyBjaGVjayBhIHNpbXBsZSBzaG9ydCBjb21tZW50CiAgICAgICAgIGNvbW1lbnQgPSBiJ0JyYXZlbHkgdGFraW5nIHRvIGhpcyBmZWV0LCBoZSBiZWF0IGEgdmVyeSBicmF2ZSByZXRyZWF0LicKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50Ci0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmciA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpIGFzIHppcGZyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmLmNvbW1lbnQsIGNvbW1lbnQpCiAKICAgICAgICAgIyBjaGVjayBhIGNvbW1lbnQgb2YgbWF4IGxlbmd0aAogICAgICAgICBjb21tZW50MiA9ICcnLmpvaW4oWyclZCcgJSAoaSoqMyAlIDEwKSBmb3IgaSBpbiByYW5nZSgoMSA8PCAxNiktMSldKQogICAgICAgICBjb21tZW50MiA9IGNvbW1lbnQyLmVuY29kZSgiYXNjaWkiKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpCi0gICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyCi0gICAgICAgIHppcGYud3JpdGVzdHIoImZvby50eHQiLCAiTywgZm9yIGEgTXVzZSBvZiBGaXJlISIpCi0gICAgICAgIHppcGYuY2xvc2UoKQotICAgICAgICB6aXBmciA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQyKQotICAgICAgICB6aXBmci5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0idyIpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InIiKSBhcyB6aXBmcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnIuY29tbWVudCwgY29tbWVudDIpCiAKICAgICAgICAgIyBjaGVjayBhIGNvbW1lbnQgdGhhdCBpcyB0b28gbG9uZyBpcyB0cnVuY2F0ZWQKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciKQotICAgICAgICB6aXBmLmNvbW1lbnQgPSBjb21tZW50MiArIGInb29wcycKLSAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKLSAgICAgICAgemlwZi5jbG9zZSgpCi0gICAgICAgIHppcGZyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgbW9kZT0iciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwZnIuY29tbWVudCwgY29tbWVudDIpCi0gICAgICAgIHppcGZyLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYuY29tbWVudCA9IGNvbW1lbnQyICsgYidvb3BzJworICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vLnR4dCIsICJPLCBmb3IgYSBNdXNlIG9mIEZpcmUhIikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikgYXMgemlwZnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZyLmNvbW1lbnQsIGNvbW1lbnQyKQogCiAgICAgZGVmIGNoZWNrX3Rlc3R6aXBfd2l0aF9iYWRfY3JjKHNlbGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIiIiVGVzdHMgdGhhdCBmaWxlcyB3aXRoIGJhZCBDUkNzIHJldHVybiB0aGVpciBuYW1lIGZyb20gdGVzdHppcC4iIiIKICAgICAgICAgemlwZGF0YSA9IHNlbGYuemlwc193aXRoX2JhZF9jcmNbY29tcHJlc3Npb25dCiAKLSAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCBtb2RlPSJyIikKLSAgICAgICAgIyB0ZXN0emlwIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IGNvcnJ1cHQgZmlsZSwgb3IgTm9uZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhZmlsZScsIHppcGYudGVzdHppcCgpKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICAjIHRlc3R6aXAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgY29ycnVwdCBmaWxlLCBvciBOb25lCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdhZmlsZScsIHppcGYudGVzdHppcCgpKQogCiAgICAgZGVmIHRlc3RfdGVzdHppcF93aXRoX2JhZF9jcmNfc3RvcmVkKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3Rlc3R6aXBfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0X3Rlc3R6aXBfd2l0aF9iYWRfY3JjX2RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5jaGVja190ZXN0emlwX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfdGVzdHppcF93aXRoX2JhZF9jcmNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdGVzdHppcF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfREVGTEFURUQpCiAKICAgICBkZWYgY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoc2VsZiwgY29tcHJlc3Npb24pOgotICAgICAgICAiIiJUZXN0cyB0aGF0IGZpbGVzIHdpdGggYmFkIENSQ3MgcmFpc2UgYSBCYWRaaXBmaWxlIGV4Y2VwdGlvbiB3aGVuIHJlYWQuIiIiCisgICAgICAgICIiIlRlc3RzIHRoYXQgZmlsZXMgd2l0aCBiYWQgQ1JDcyByYWlzZSBhIEJhZFppcEZpbGUgZXhjZXB0aW9uIHdoZW4gcmVhZC4iIiIKICAgICAgICAgemlwZGF0YSA9IHNlbGYuemlwc193aXRoX2JhZF9jcmNbY29tcHJlc3Npb25dCiAKICAgICAgICAgIyBVc2luZyBaaXBGaWxlLnJlYWQoKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGYucmVhZCwgJ2FmaWxlJykKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5CYWRaaXBGaWxlLCB6aXBmLnJlYWQsICdhZmlsZScpCiAKICAgICAgICAgIyBVc2luZyBaaXBFeHRGaWxlLnJlYWQoKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKQotICAgICAgICBjb3JydXB0X2ZpbGUgPSB6aXBmLm9wZW4oJ2FmaWxlJywgJ3InKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIGNvcnJ1cHRfZmlsZS5yZWFkKQotICAgICAgICBjb3JydXB0X2ZpbGUuY2xvc2UoKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3BlbignYWZpbGUnLCAncicpIGFzIGNvcnJ1cHRfZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcEZpbGUsIGNvcnJ1cHRfZmlsZS5yZWFkKQogCiAgICAgICAgICMgU2FtZSB3aXRoIHNtYWxsIHJlYWRzIChpbiBvcmRlciB0byBleGVyY2lzZSB0aGUgYnVmZmVyaW5nIGxvZ2ljKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oemlwZGF0YSksIG1vZGU9InIiKQotICAgICAgICBjb3JydXB0X2ZpbGUgPSB6aXBmLm9wZW4oJ2FmaWxlJywgJ3InKQotICAgICAgICBjb3JydXB0X2ZpbGUuTUlOX1JFQURfU0laRSA9IDIKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUpOgotICAgICAgICAgICAgd2hpbGUgY29ycnVwdF9maWxlLnJlYWQoMik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICBjb3JydXB0X2ZpbGUuY2xvc2UoKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTyh6aXBkYXRhKSwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3BlbignYWZpbGUnLCAncicpIGFzIGNvcnJ1cHRfZmlsZToKKyAgICAgICAgICAgICAgICBjb3JydXB0X2ZpbGUuTUlOX1JFQURfU0laRSA9IDIKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGNvcnJ1cHRfZmlsZS5yZWFkKDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JhZF9jcmNfc3RvcmVkKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3JlYWRfd2l0aF9iYWRfY3JjKHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0X3JlYWRfd2l0aF9iYWRfY3JjX2RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgc2VsZi5jaGVja19yZWFkX3dpdGhfYmFkX2NyYyh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfcmVhZF93aXRoX2JhZF9jcmNfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF93aXRoX2JhZF9jcmMoemlwZmlsZS5aSVBfREVGTEFURUQpCiAKICAgICBkZWYgY2hlY2tfcmVhZF9yZXR1cm5fc2l6ZShzZWxmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgSXNzdWUgIzk4Mzc6IFppcEV4dEZpbGUucmVhZCgpIHNob3VsZG4ndCByZXR1cm4gbW9yZSBieXRlcwpAQCAtODg2LDIxICs5OTcsMTggQEAKICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IHRlc3Rfc2l6ZSArIDEKICAgICAgICAgICAgIGp1bmsgPSBiJycuam9pbihzdHJ1Y3QucGFjaygnQicsIHJhbmRpbnQoMCwgMjU1KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZShmaWxlX3NpemUpKQotICAgICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKCksICJ3IiwgY29tcHJlc3Npb24pCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKCksICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGY6CiAgICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cignZm9vJywganVuaykKLSAgICAgICAgICAgICAgICBmcCA9IHppcGYub3BlbignZm9vJywgJ3InKQotICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQodGVzdF9zaXplKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIHRlc3Rfc2l6ZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ2ZvbycsICdyJykgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQodGVzdF9zaXplKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCB0ZXN0X3NpemUpCiAKICAgICBkZWYgdGVzdF9yZWFkX3JldHVybl9zaXplX3N0b3JlZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19yZWFkX3JldHVybl9zaXplKHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGlmIHpsaWI6Ci0gICAgICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuX3NpemVfZGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX3JlYWRfcmV0dXJuX3NpemUoemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRfcmV0dXJuX3NpemVfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVhZF9yZXR1cm5fc2l6ZSh6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3ppcGZpbGUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBjcmVhdGluZyBhIGZpbGUgaW4gJ3cnIG9yICdhJyBtb2RlIGFuZCBjbG9zaW5nIHdpdGhvdXQKQEAgLTkwOSw3ICsxMDE3LDcgQEAKICAgICAgICAgemlwZi5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKLSAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwZmlsZToKKyAgICAgICAgZXhjZXB0IHppcGZpbGUuQmFkWmlwRmlsZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBaSVAgZmlsZSBpbiAndycgbW9kZSIpCiAKICAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9ImEiKQpAQCAtOTIxLDIwICsxMDI5LDIxIEBACiAKICAgICBkZWYgdGVzdF9vcGVuX2VtcHR5X2ZpbGUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTcxMDcwMzogQ2hlY2sgdGhhdCBvcGVuaW5nIGEgZmlsZSB3aXRoIGxlc3MgdGhhbiAyMiBieXRlcwotICAgICAgICAjIHJhaXNlcyBhIEJhZFppcGZpbGUgZXhjZXB0aW9uIChyYXRoZXIgdGhhbiB0aGUgcHJldmlvdXNseSB1bmhlbHBmdWwKKyAgICAgICAgIyByYWlzZXMgYSBCYWRaaXBGaWxlIGV4Y2VwdGlvbiAocmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgdW5oZWxwZnVsCiAgICAgICAgICMgSU9FcnJvcikKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCiAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcGZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuQmFkWmlwRmlsZSwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4sICdyJykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4yKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKKwogCiBjbGFzcyBEZWNyeXB0aW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICMgVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IFpJUCBkZWNyeXB0aW9uIHdvcmtzLiBTaW5jZSB0aGUgbGlicmFyeSBkb2VzIG5vdAotICAgICMgc3VwcG9ydCBlbmNyeXB0aW9uIGF0IHRoZSBtb21lbnQsIHdlIHVzZSBhIHByZS1nZW5lcmF0ZWQgZW5jcnlwdGVkCi0gICAgIyBaSVAgZmlsZQorICAgICIiIkNoZWNrIHRoYXQgWklQIGRlY3J5cHRpb24gd29ya3MuIFNpbmNlIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisgICAgc3VwcG9ydCBlbmNyeXB0aW9uIGF0IHRoZSBtb21lbnQsIHdlIHVzZSBhIHByZS1nZW5lcmF0ZWQgZW5jcnlwdGVkCisgICAgWklQIGZpbGUuIiIiCiAKICAgICBkYXRhID0gKAogICAgIGInUEtceDAzXHgwNFx4MTRceDAwXHgwMVx4MDBceDAwXHgwMG5ceDkyaS4jeVx4ZWY/Jlx4MDBceDAwXHgwMFx4MWFceDAwJwpAQCAtOTU4LDEzICsxMDY3LDExIEBACiAgICAgcGxhaW4yID0gYidceDAwJyo1MTIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgIndiIikKLSAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhKQogICAgICAgICBzZWxmLnppcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikKLSAgICAgICAgZnAgPSBvcGVuKFRFU1RGTjIsICJ3YiIpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YTIpCi0gICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoc2VsZi5kYXRhMikKICAgICAgICAgc2VsZi56aXAyID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJyIikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTk3MywxOSArMTA4MCwyMCBAQAogICAgICAgICBzZWxmLnppcDIuY2xvc2UoKQogICAgICAgICBvcy51bmxpbmsoVEVTVEZOMikKIAotICAgIGRlZiB0ZXN0Tm9QYXNzd29yZChzZWxmKToKKyAgICBkZWYgdGVzdF9ub19wYXNzd29yZChzZWxmKToKICAgICAgICAgIyBSZWFkaW5nIHRoZSBlbmNyeXB0ZWQgZmlsZSB3aXRob3V0IHBhc3N3b3JkCiAgICAgICAgICMgbXVzdCBnZW5lcmF0ZSBhIFJ1blRpbWUgZXhjZXB0aW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLnppcDIucmVhZCwgInplcm8iKQogCi0gICAgZGVmIHRlc3RCYWRQYXNzd29yZChzZWxmKToKKyAgICBkZWYgdGVzdF9iYWRfcGFzc3dvcmQoc2VsZik6CiAgICAgICAgIHNlbGYuemlwLnNldHBhc3N3b3JkKGIicGVybCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAucmVhZCwgInRlc3QudHh0IikKICAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKGIicGVybCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi56aXAyLnJlYWQsICJ6ZXJvIikKIAotICAgIGRlZiB0ZXN0R29vZFBhc3N3b3JkKHNlbGYpOgorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9nb29kX3Bhc3N3b3JkKHNlbGYpOgogICAgICAgICBzZWxmLnppcC5zZXRwYXNzd29yZChiInB5dGhvbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi56aXAucmVhZCgidGVzdC50eHQiKSwgc2VsZi5wbGFpbikKICAgICAgICAgc2VsZi56aXAyLnNldHBhc3N3b3JkKGIiMTIzNDUiKQpAQCAtMTAwNSwxNTEgKzExMTMsMTYzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRhdGFjb3VudCkpCiAKICAgICAgICAgIyBNYWtlIGEgc291cmNlIGZpbGUgd2l0aCBzb21lIGxpbmVzCi0gICAgICAgIGZwID0gb3BlbihURVNURk4sICJ3YiIpCi0gICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKHNlbGYuZGF0YSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4yKQorICAgICAgICB1bmxpbmsoVEVTVEZOKQorICAgICAgICB1bmxpbmsoVEVTVEZOMikKIAotICAgIGRlZiBtYWtlVGVzdEFyY2hpdmUoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgIGRlZiBtYWtlX3Rlc3RfYXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sICJhbm90aGVyLm5hbWUiKQotICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlKFRFU1RGTiwgImFub3RoZXIubmFtZSIpCisgICAgICAgICAgICB6aXBmcC53cml0ZShURVNURk4sIFRFU1RGTikKIAotICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHppcF90ZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShmLCBjb21wcmVzc2lvbikKIAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pCi0gICAgICAgIHRlc3RkYXRhID0gemlwZnAucmVhZChURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBmcC5yZWFkKCJhbm90aGVyLm5hbWUiKSwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgdGVzdGRhdGEgPSB6aXBmcC5yZWFkKFRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGZwLnJlYWQoImFub3RoZXIubmFtZSIpLCBzZWxmLmRhdGEpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIGRlZiB0ZXN0U3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X3N0b3JlZChzZWxmKToKICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgIHNlbGYuemlwVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF90ZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKIAotICAgIGRlZiB6aXBPcGVuVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIEBza2lwVW5sZXNzKHpsaWIsICJyZXF1aXJlcyB6bGliIikKKyAgICBkZWYgdGVzdF9kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgemlwX29wZW5fdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIsIGNvbXByZXNzaW9uKQotICAgICAgICB6aXBkYXRhMSA9IFtdCi0gICAgICAgIHppcG9wZW4xID0gemlwZnAub3BlbihURVNURk4pCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKDI1NikKLSAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIHppcGRhdGExLmFwcGVuZChyZWFkX2RhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZGF0YTEgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKFRFU1RGTikgYXMgemlwb3BlbjE6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZCgyNTYpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHppcGRhdGEyID0gW10KLSAgICAgICAgemlwb3BlbjIgPSB6aXBmcC5vcGVuKCJhbm90aGVyLm5hbWUiKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjIucmVhZCgyNTYpCi0gICAgICAgICAgICBpZiBub3QgcmVhZF9kYXRhOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICB6aXBkYXRhMi5hcHBlbmQocmVhZF9kYXRhKQorICAgICAgICAgICAgemlwZGF0YTIgPSBbXQorICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKCJhbm90aGVyLm5hbWUiKSBhcyB6aXBvcGVuMjoKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMi5yZWFkKDI1NikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIHppcGRhdGEyLmFwcGVuZChyZWFkX2RhdGEpCiAKLSAgICAgICAgdGVzdGRhdGExID0gYicnLmpvaW4oemlwZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMSwgc2VsZi5kYXRhKQorICAgICAgICAgICAgdGVzdGRhdGExID0gYicnLmpvaW4oemlwZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZXN0ZGF0YTEpLCBsZW4oc2VsZi5kYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGExLCBzZWxmLmRhdGEpCiAKLSAgICAgICAgdGVzdGRhdGEyID0gYicnLmpvaW4oemlwZGF0YTIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMSksIGxlbihzZWxmLmRhdGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhMSwgc2VsZi5kYXRhKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0ZGF0YTIgPSBiJycuam9pbih6aXBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhMiksIGxlbihzZWxmLmRhdGEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZGF0YTIsIHNlbGYuZGF0YSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgZGVmIHRlc3RPcGVuU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X29wZW5fc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi56aXBPcGVuVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHppcFJhbmRvbU9wZW5UZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X29wZW5fZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnppcF9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBkZWYgemlwX3JhbmRvbV9vcGVuX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikKLSAgICAgICAgemlwZGF0YTEgPSBbXQotICAgICAgICB6aXBvcGVuMSA9IHppcGZwLm9wZW4oVEVTVEZOKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmVhZF9kYXRhID0gemlwb3BlbjEucmVhZChyYW5kaW50KDEsIDEwMjQpKQotICAgICAgICAgICAgaWYgbm90IHJlYWRfZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgemlwZGF0YTEuYXBwZW5kKHJlYWRfZGF0YSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBkYXRhMSA9IFtdCisgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oVEVTVEZOKSBhcyB6aXBvcGVuMToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZWFkX2RhdGEgPSB6aXBvcGVuMS5yZWFkKHJhbmRpbnQoMSwgMTAyNCkpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkX2RhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICB6aXBkYXRhMS5hcHBlbmQocmVhZF9kYXRhKQogCi0gICAgICAgIHRlc3RkYXRhID0gYicnLmpvaW4oemlwZGF0YTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdGRhdGEsIHNlbGYuZGF0YSkKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgICAgICAgICAgdGVzdGRhdGEgPSBiJycuam9pbih6aXBkYXRhMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRlc3RkYXRhKSwgbGVuKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RkYXRhLCBzZWxmLmRhdGEpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgIGRlZiB0ZXN0UmFuZG9tT3BlblN0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yYW5kb21fb3Blbl9zdG9yZWQoc2VsZik6CiAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6Ci0gICAgICAgICAgICBzZWxmLnppcFJhbmRvbU9wZW5UZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYuemlwX3JhbmRvbV9vcGVuX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JhbmRvbV9vcGVuX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi56aXBfcmFuZG9tX29wZW5fdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKKworCitAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiBjbGFzcyBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKQotICAgICAgICB6aXBmcC53cml0ZXN0cignb25lcycsICcxJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCAnMicqRklYRURURVNUX1NJWkUpCi0gICAgICAgIHppcGZwLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgInciLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemlwZnA6CisgICAgICAgICAgICB6aXBmcC53cml0ZXN0cignb25lcycsICcxJypGSVhFRFRFU1RfU0laRSkKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCd0d29zJywgJzInKkZJWEVEVEVTVF9TSVpFKQogCi0gICAgZGVmIHRlc3RTYW1lRmlsZShzZWxmKToKKyAgICBkZWYgdGVzdF9zYW1lX2ZpbGUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKQotICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQotICAgICAgICB6b3BlbjIgPSB6aXBmLm9wZW4oJ29uZXMnKQotICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBkYXRhMikKLSAgICAgICAgemlwZi5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMjoKKyAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgZGF0YTIpCiAKLSAgICBkZWYgdGVzdERpZmZlcmVudEZpbGUoc2VsZik6CisgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZpbGUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKQotICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQotICAgICAgICB6b3BlbjIgPSB6aXBmLm9wZW4oJ3R3b3MnKQotICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBiJzInKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgorICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgYicyJypGSVhFRFRFU1RfU0laRSkKIAotICAgIGRlZiB0ZXN0SW50ZXJsZWF2ZWQoc2VsZik6CisgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWQoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKQotICAgICAgICB6b3BlbjEgPSB6aXBmLm9wZW4oJ29uZXMnKQotICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgem9wZW4yID0gemlwZi5vcGVuKCd0d29zJykKLSAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKLSAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBiJzInKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICB6aXBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgbW9kZT0iciIpIGFzIHppcGY6CisgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMSwgemlwZi5vcGVuKCd0d29zJykgYXMgem9wZW4yOgorICAgICAgICAgICAgICAgIGRhdGExID0gem9wZW4xLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGEyID0gem9wZW4yLnJlYWQoNTAwKQorICAgICAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMiArPSB6b3BlbjIucmVhZCg1MDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBiJzEnKkZJWEVEVEVTVF9TSVpFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgYicyJypGSVhFRFRFU1RfU0laRSkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgb3MucmVtb3ZlKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4yKQorCiAKIGNsYXNzIFRlc3RXaXRoRGlyZWN0b3J5KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKFRFU1RGTjIpCiAKLSAgICBkZWYgdGVzdEV4dHJhY3REaXIoc2VsZik6Ci0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoZmluZGZpbGUoInppcGRpci56aXAiKSkKLSAgICAgICAgemlwZi5leHRyYWN0YWxsKFRFU1RGTjIpCisgICAgZGVmIHRlc3RfZXh0cmFjdF9kaXIoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGZpbmRmaWxlKCJ6aXBkaXIuemlwIikpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLmV4dHJhY3RhbGwoVEVTVEZOMikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJhIikpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiLCAiYiIpKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKG9zLnBhdGguam9pbihURVNURk4yLCAiYSIsICJiIiwgImMiKSkpCkBAIC0xMTU3LDkgKzEyNzcsOSBAQAogICAgIGRlZiB0ZXN0X2J1Z182MDUwKHNlbGYpOgogICAgICAgICAjIEV4dHJhY3Rpb24gc2hvdWxkIHN1Y2NlZWQgaWYgZGlyZWN0b3JpZXMgYWxyZWFkeSBleGlzdAogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkKLSAgICAgICAgc2VsZi50ZXN0RXh0cmFjdERpcigpCisgICAgICAgIHNlbGYudGVzdF9leHRyYWN0X2RpcigpCiAKLSAgICBkZWYgdGVzdFN0b3JlRGlyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3N0b3JlX2RpcihzZWxmKToKICAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IikpCiAgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIpCiAgICAgICAgIHppcGYud3JpdGUob3MucGF0aC5qb2luKFRFU1RGTjIsICJ4IiksICJ4IikKQEAgLTExNjgsNyArMTI4OCw3IEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKFRFU1RGTik6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogCiBjbGFzcyBVbml2ZXJzYWxOZXdsaW5lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTE4NywxMDUgKzEzMDcsMTQ1IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogCi0gICAgZGVmIG1ha2VUZXN0QXJjaGl2ZShzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgZGVmIG1ha2VfdGVzdF9hcmNoaXZlKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlCi0gICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCi0gICAgICAgIGZvciBmbiBpbiBzZWxmLmFyY2ZpbGVzLnZhbHVlcygpOgotICAgICAgICAgICAgemlwZnAud3JpdGUoZm4sIGZuKQotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIGZuIGluIHNlbGYuYXJjZmlsZXMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGUoZm4sIGZuKQogCi0gICAgZGVmIHJlYWRUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHJlYWRfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIHppcGRhdGEgPSB6aXBmcC5vcGVuKGZuLCAiclUiKS5yZWFkKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmNkYXRhW3NlcF0sIHppcGRhdGEpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgemlwZGF0YSA9IGZwLnJlYWQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hcmNkYXRhW3NlcF0sIHppcGRhdGEpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgcmVhZGxpbmVUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgc2VsZi5tYWtlVGVzdEFyY2hpdmUoZiwgY29tcHJlc3Npb24pCisgICAgZGVmIHJlYWRsaW5lX3JlYWRfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIHppcG9wZW4gPSB6aXBmcC5vcGVuKGZuLCAiclUiKQotICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKLSAgICAgICAgICAgICAgICBsaW5lZGF0YSA9IHppcG9wZW4ucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWRhdGEsIGxpbmUgKyBiJ1xuJykKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBiJycKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgPSB6aXBvcGVuLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhICs9IHJlYWQKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICByZWFkID0gemlwb3Blbi5yZWFkKDUpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVhZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSArPSByZWFkCiAKLSAgICBkZWYgcmVhZGxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBzZWxmLmFyY2RhdGFbJ1xuJ10pCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZiwgc3RyKToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHJlYWRsaW5lX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKGYsIGNvbXByZXNzaW9uKQogCiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKLSAgICAgICAgemlwZnAgPSB6aXBmaWxlLlppcEZpbGUoZiwgInIiKQotICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICB6aXBsaW5lcyA9IHppcGZwLm9wZW4oZm4sICJyVSIpLnJlYWRsaW5lcygpCi0gICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgorICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgYidcbicpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICB6aXBmcC5jbG9zZSgpCi0KLSAgICBkZWYgaXRlcmxpbmVzVGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6Ci0gICAgICAgIHNlbGYubWFrZVRlc3RBcmNoaXZlKGYsIGNvbXByZXNzaW9uKQorICAgIGRlZiByZWFkbGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAiciIpCi0gICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBmcC5vcGVuKGZuLCAiclUiKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgYidcbicpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CisgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAgICAgemlwbGluZXMgPSBmcC5yZWFkbGluZXMoKQorICAgICAgICAgICAgICAgIGZvciBsaW5lLCB6aXBsaW5lIGluIHppcChzZWxmLmxpbmVfZ2VuLCB6aXBsaW5lcyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmLCBzdHIpOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICAgICAgemlwZnAuY2xvc2UoKQorICAgIGRlZiBpdGVybGluZXNfdGVzdChzZWxmLCBmLCBjb21wcmVzc2lvbik6CisgICAgICAgIHNlbGYubWFrZV90ZXN0X2FyY2hpdmUoZiwgY29tcHJlc3Npb24pCiAKLSAgICBkZWYgdGVzdFJlYWRTdG9yZWQoc2VsZik6CisgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgZnApOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aXBsaW5lLCBsaW5lICsgYidcbicpCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi5yZWFkVGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCisgICAgICAgICAgICBzZWxmLnJlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdFJlYWRsaW5lU3RvcmVkKHNlbGYpOgorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfc3RvcmVkKHNlbGYpOgorICAgICAgICAjIElzc3VlICM3NjEwOiBjYWxscyB0byByZWFkbGluZSgpIGludGVybGVhdmVkIHdpdGggY2FsbHMgdG8gcmVhZCgpLgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi5yZWFkbGluZVRlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV9yZWFkX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgZGVmIHRlc3RSZWFkbGluZXNTdG9yZWQoc2VsZik6CisgICAgZGVmIHRlc3RfcmVhZGxpbmVfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi5yZWFkbGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVfdGVzdChmLCB6aXBmaWxlLlpJUF9TVE9SRUQpCiAKLSAgICBkZWYgdGVzdEl0ZXJsaW5lc1N0b3JlZChzZWxmKToKKyAgICBkZWYgdGVzdF9yZWFkbGluZXNfc3RvcmVkKHNlbGYpOgogICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgc2VsZi5pdGVybGluZXNUZXN0KGYsIHppcGZpbGUuWklQX1NUT1JFRCkKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgaWYgemxpYjoKLSAgICAgICAgZGVmIHRlc3RSZWFkRGVmbGF0ZWQoc2VsZik6Ci0gICAgICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgotICAgICAgICAgICAgICAgIHNlbGYucmVhZFRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX3N0b3JlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYuaXRlcmxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfU1RPUkVEKQogCi0gICAgICAgIGRlZiB0ZXN0UmVhZGxpbmVEZWZsYXRlZChzZWxmKToKLSAgICAgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5yZWFkbGluZVRlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdFJlYWRsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLnJlYWRsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX3JlYWRfZGVmbGF0ZWQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzc2MTA6IGNhbGxzIHRvIHJlYWRsaW5lKCkgaW50ZXJsZWF2ZWQgd2l0aCBjYWxscyB0byByZWFkKCkuCisgICAgICAgIGZvciBmIGluIChURVNURk4yLCBUZW1wb3JhcnlGaWxlKCksIGlvLkJ5dGVzSU8oKSk6CisgICAgICAgICAgICBzZWxmLnJlYWRsaW5lX3JlYWRfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAotICAgICAgICBkZWYgdGVzdEl0ZXJsaW5lc0RlZmxhdGVkKHNlbGYpOgotICAgICAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKLSAgICAgICAgICAgICAgICBzZWxmLml0ZXJsaW5lc1Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi5yZWFkbGluZV90ZXN0KGYsIHppcGZpbGUuWklQX0RFRkxBVEVEKQorCisgICAgQHNraXBVbmxlc3MoemxpYiwgInJlcXVpcmVzIHpsaWIiKQorICAgIGRlZiB0ZXN0X3JlYWRsaW5lc19kZWZsYXRlZChzZWxmKToKKyAgICAgICAgZm9yIGYgaW4gKFRFU1RGTjIsIFRlbXBvcmFyeUZpbGUoKSwgaW8uQnl0ZXNJTygpKToKKyAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzX3Rlc3QoZiwgemlwZmlsZS5aSVBfREVGTEFURUQpCisKKyAgICBAc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCisgICAgZGVmIHRlc3RfaXRlcmxpbmVzX2RlZmxhdGVkKHNlbGYpOgorICAgICAgICBmb3IgZiBpbiAoVEVTVEZOMiwgVGVtcG9yYXJ5RmlsZSgpLCBpby5CeXRlc0lPKCkpOgorICAgICAgICAgICAgc2VsZi5pdGVybGluZXNfdGVzdChmLCB6aXBmaWxlLlpJUF9ERUZMQVRFRCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgogICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQotICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCi0gICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTjIpCisgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHVubGluayhURVNURk4yKQogCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGVzdHNXaXRoU291cmNlRmlsZSwgVGVzdFppcDY0SW5TbWFsbEZpbGVzLCBPdGhlclRlc3RzLAogICAgICAgICAgICAgICAgICBQeVppcEZpbGVUZXN0cywgRGVjcnlwdGlvblRlc3RzLCBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zLAotICAgICAgICAgICAgICAgICBUZXN0V2l0aERpcmVjdG9yeSwKLSAgICAgICAgICAgICAgICAgVW5pdmVyc2FsTmV3bGluZVRlc3RzLCBUZXN0c1dpdGhSYW5kb21CaW5hcnlGaWxlcykKKyAgICAgICAgICAgICAgICAgVGVzdFdpdGhEaXJlY3RvcnksIFVuaXZlcnNhbE5ld2xpbmVUZXN0cywKKyAgICAgICAgICAgICAgICAgVGVzdHNXaXRoUmFuZG9tQmluYXJ5RmlsZXMpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKaW5kZXggZWJmNmFkNC4uMDkwZjBmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTYsMTEgKzYsMTcgQEAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKIAotaW1wb3J0IHpsaWIgIyBpbXBsaWVkIHByZXJlcXVpc2l0ZQotZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlLCBaaXBJbmZvLCBaSVBfU1RPUkVELCBaSVBfREVGTEFURUQKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlLCB0ZXN0X3NyYywgdGVzdF9jbwogCisjIHNvbWUgdGVzdHMgY2FuIGJlIHJhbiBldmVuIHdpdGhvdXQgemxpYgordHJ5OgorICAgIGltcG9ydCB6bGliCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgemxpYiA9IE5vbmUKKworZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlLCBaaXBJbmZvLCBaSVBfU1RPUkVELCBaSVBfREVGTEFURUQKKwogaW1wb3J0IHppcGltcG9ydAogaW1wb3J0IGxpbmVjYWNoZQogaW1wb3J0IGRvY3Rlc3QKQEAgLTQyLDE3ICs0OCwxNSBAQAogdGVzdF9weWMgPSBtYWtlX3B5Yyh0ZXN0X2NvLCBOT1cpCiAKIAotaWYgX19kZWJ1Z19fOgotICAgIHB5Y19leHQgPSAiLnB5YyIKLWVsc2U6Ci0gICAgcHljX2V4dCA9ICIucHlvIgotCi0KIFRFU1RNT0QgPSAiemlwdGVzdG1vZHVsZSIKIFRFU1RQQUNLID0gInppcHRlc3RwYWNrYWdlIgogVEVTVFBBQ0syID0gInppcHRlc3RwYWNrYWdlMiIKIFRFTVBfWklQID0gb3MucGF0aC5hYnNwYXRoKCJqdW5rOTUxNDIuemlwIikKIAorcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQorcHljX2V4dCA9ICgnLnB5YycgaWYgX19kZWJ1Z19fIGVsc2UgJy5weW8nKQorCisKIGNsYXNzIFVuY29tcHJlc3NlZFppcEltcG9ydFRlc3RDYXNlKEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlKToKIAogICAgIGNvbXByZXNzaW9uID0gWklQX1NUT1JFRApAQCAtNzYsMTQgKzgwLDExIEBACiAgICAgICAgICAgICBzdHVmZiA9IGt3LmdldCgic3R1ZmYiLCBOb25lKQogICAgICAgICAgICAgaWYgc3R1ZmYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyBQcmVwZW5kICdzdHVmZicgdG8gdGhlIHN0YXJ0IG9mIHRoZSB6aXBmaWxlCi0gICAgICAgICAgICAgICAgZiA9IG9wZW4oVEVNUF9aSVAsICJyYiIpCi0gICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgICAgICAgICBmID0gb3BlbihURU1QX1pJUCwgIndiIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKHN0dWZmKQotICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oVEVNUF9aSVAsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihURU1QX1pJUCwgIndiIikgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzdHVmZikKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogCiAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgVEVNUF9aSVApCiAKQEAgLTE3Myw4ICsxNzQsOSBAQAogCiAgICAgZGVmIHRlc3RCYWRNVGltZShzZWxmKToKICAgICAgICAgYmFkdGltZV9weWMgPSBieXRlYXJyYXkodGVzdF9weWMpCi0gICAgICAgIGJhZHRpbWVfcHljWzddIF49IDB4MDIgICMgZmxpcCB0aGUgc2Vjb25kIGJpdCAtLSBub3QgdGhlIGZpcnN0IGFzIHRoYXQgb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaXNuJ3Qgc3RvcmVkIGluIHRoZSAucHkncyBtdGltZSBpbiB0aGUgemlwIGFyY2hpdmUuCisgICAgICAgICMgZmxpcCB0aGUgc2Vjb25kIGJpdCAtLSBub3QgdGhlIGZpcnN0IGFzIHRoYXQgb25lIGlzbid0IHN0b3JlZCBpbiB0aGUKKyAgICAgICAgIyAucHkncyBtdGltZSBpbiB0aGUgemlwIGFyY2hpdmUuCisgICAgICAgIGJhZHRpbWVfcHljWzddIF49IDB4MDIKICAgICAgICAgZmlsZXMgPSB7VEVTVE1PRCArICIucHkiOiAoTk9XLCB0ZXN0X3NyYyksCiAgICAgICAgICAgICAgICAgIFRFU1RNT0QgKyBweWNfZXh0OiAoTk9XLCBiYWR0aW1lX3B5Yyl9CiAgICAgICAgIHNlbGYuZG9UZXN0KCIucHkiLCBmaWxlcywgVEVTVE1PRCkKQEAgLTIyMCwxMiArMjIyLDEzIEBACiAKICAgICAgICAgICAgIG1vZF9wYXRoID0gcGFja2RpcjIgKyBURVNUTU9ECiAgICAgICAgICAgICBtb2RfbmFtZSA9IG1vZHVsZV9wYXRoX3RvX2RvdHRlZF9uYW1lKG1vZF9wYXRoKQotICAgICAgICAgICAgcGtnID0gX19pbXBvcnRfXyhtb2RfbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kX25hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1ttb2RfbmFtZV0KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShURVNUUEFDSyksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UobW9kX3BhdGgpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aS5nZXRfZmlsZW5hbWUobW9kX3BhdGgpLCBtb2QuX19maWxlX18pCi0gICAgICAgICAgICAjIFRvIHBhc3MgaW4gdGhlIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgdGhlIHBhdGgsIHdlIG11c3QgdXNlIHRoZSByaWdodCBpbXBvcnRlcgorICAgICAgICAgICAgIyBUbyBwYXNzIGluIHRoZSBtb2R1bGUgbmFtZSBpbnN0ZWFkIG9mIHRoZSBwYXRoLCB3ZSBtdXN0IHVzZSB0aGUKKyAgICAgICAgICAgICMgcmlnaHQgaW1wb3J0ZXIKICAgICAgICAgICAgIGxvYWRlciA9IG1vZC5fX2xvYWRlcl9fCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRfc291cmNlKG1vZF9uYW1lKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9maWxlbmFtZShtb2RfbmFtZSksIG1vZC5fX2ZpbGVfXykKQEAgLTI1OSwxNyArMjYyLDIwIEBACiAgICAgICAgICAgICBtb2QgPSB6aS5sb2FkX21vZHVsZShURVNUUEFDSzIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9maWxlbmFtZShURVNUUEFDSzIpLCBtb2QuX19maWxlX18pCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuaXNfcGFja2FnZShURVNUUEFDSzIgKyBvcy5zZXAgKyAnX19pbml0X18nKSwgRmFsc2UpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmlzX3BhY2thZ2UoVEVTVFBBQ0syICsgb3Muc2VwICsgVEVTVE1PRCksIEZhbHNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICB6aS5pc19wYWNrYWdlKFRFU1RQQUNLMiArIG9zLnNlcCArICdfX2luaXRfXycpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgemkuaXNfcGFja2FnZShURVNUUEFDSzIgKyBvcy5zZXAgKyBURVNUTU9EKSwgRmFsc2UpCiAKICAgICAgICAgICAgIG1vZF9wYXRoID0gVEVTVFBBQ0syICsgb3Muc2VwICsgVEVTVE1PRAogICAgICAgICAgICAgbW9kX25hbWUgPSBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShtb2RfcGF0aCkKLSAgICAgICAgICAgIHBrZyA9IF9faW1wb3J0X18obW9kX25hbWUpCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kX25hbWVdCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9zb3VyY2UoVEVTVFBBQ0syKSwgTm9uZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemkuZ2V0X3NvdXJjZShtb2RfcGF0aCksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppLmdldF9maWxlbmFtZShtb2RfcGF0aCksIG1vZC5fX2ZpbGVfXykKLSAgICAgICAgICAgICMgVG8gcGFzcyBpbiB0aGUgbW9kdWxlIG5hbWUgaW5zdGVhZCBvZiB0aGUgcGF0aCwgd2UgbXVzdCB1c2UgdGhlIHJpZ2h0IGltcG9ydGVyCisgICAgICAgICAgICAjIFRvIHBhc3MgaW4gdGhlIG1vZHVsZSBuYW1lIGluc3RlYWQgb2YgdGhlIHBhdGgsIHdlIG11c3QgdXNlIHRoZQorICAgICAgICAgICAgIyByaWdodCBpbXBvcnRlcgogICAgICAgICAgICAgbG9hZGVyID0gbW9kLl9fbG9hZGVyX18KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldF9zb3VyY2UobW9kX25hbWUpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuZ2V0X2ZpbGVuYW1lKG1vZF9uYW1lKSwgbW9kLl9fZmlsZV9fKQpAQCAtMjg3LDcgKzI5Myw3IEBACiAgICAgICAgICAgICB6LmNsb3NlKCkKICAgICAgICAgICAgIHppID0gemlwaW1wb3J0LnppcGltcG9ydGVyKFRFTVBfWklQKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB6aS5nZXRfZGF0YShuYW1lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnemlwaW1wb3J0ZXIgb2JqZWN0JyBpbiByZXByKHppKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ppcGltcG9ydGVyIG9iamVjdCcsIHJlcHIoemkpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgei5jbG9zZSgpCiAgICAgICAgICAgICBvcy5yZW1vdmUoVEVNUF9aSVApCkBAIC0zNTQsNyArMzYwLDYgQEAKICAgICBkZWYgdGVzdERvY3Rlc3RTdWl0ZShzZWxmKToKICAgICAgICAgc2VsZi5ydW5Eb2N0ZXN0KHNlbGYuZG9Eb2N0ZXN0U3VpdGUpCiAKLQogICAgIGRlZiBkb1RyYWNlYmFjayhzZWxmLCBtb2R1bGUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2R1bGUuZG9fcmFpc2UoKQpAQCAtMzc3LDcgKzM4MiwyMiBAQAogICAgICAgICBmaWxlcyA9IHtURVNUTU9EICsgIi5weSI6IChOT1csIHJhaXNlX3NyYyl9CiAgICAgICAgIHNlbGYuZG9UZXN0KE5vbmUsIGZpbGVzLCBURVNUTU9ELCBjYWxsPXNlbGYuZG9UcmFjZWJhY2spCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN1cHBvcnQuVEVTVEZOX1VORU5DT0RBQkxFIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAibmVlZCBhbiB1bmVuY29kYWJsZSBmaWxlbmFtZSIpCisgICAgZGVmIHRlc3RVbmVuY29kYWJsZShzZWxmKToKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTl9VTkVOQ09EQUJMRSArICIuemlwIgorICAgICAgICB6ID0gWmlwRmlsZShmaWxlbmFtZSwgInciKQorICAgICAgICB6aW5mbyA9IFppcEluZm8oVEVTVE1PRCArICIucHkiLCB0aW1lLmxvY2FsdGltZShOT1cpKQorICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICB6LndyaXRlc3RyKHppbmZvLCB0ZXN0X3NyYykKKyAgICAgICAgei5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHppcGltcG9ydC56aXBpbXBvcnRlcihmaWxlbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKIAorCitAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAicmVxdWlyZXMgemxpYiIpCiBjbGFzcyBDb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UoVW5jb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gWklQX0RFRkxBVEVECiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CmluZGV4IDk0YTY1ZmMuLjYxMGRmYTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQpAQCAtMiw3ICsyLDYgQEAKICMgZm9yIHdvcmtpbmcgd2l0aCBtb2R1bGVzIGxvY2F0ZWQgaW5zaWRlIHppcGZpbGVzCiAjIFRoZSB0ZXN0cyBhcmUgY2VudHJhbGlzZWQgaW4gdGhpcyBmYXNoaW9uIHRvIG1ha2UgaXQgZWFzeSB0byBkcm9wIHRoZW0KICMgaWYgYSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgemlwaW1wb3J0Ci1pbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKQEAgLTE0LDYgKzEzLDkgQEAKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgbGluZWNhY2hlCiBpbXBvcnQgcGRiCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCAoc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbiwgYXNzZXJ0X3B5dGhvbl9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kaXIsIG1ha2Vfc2NyaXB0LCBtYWtlX3ppcF9zY3JpcHQpCiAKIHZlcmJvc2UgPSB0ZXN0LnN1cHBvcnQudmVyYm9zZQogCkBAIC0yOCwxMiArMzAsNiBAQAogCiAjIFJldHJpZXZlIHNvbWUgaGVscGVycyBmcm9tIG90aGVyIHRlc3QgY2FzZXMKIGZyb20gdGVzdCBpbXBvcnQgdGVzdF9kb2N0ZXN0LCBzYW1wbGVfZG9jdGVzdAotZnJvbSB0ZXN0LnRlc3RfaW1wb3J0aG9va3MgaW1wb3J0IEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlCi1mcm9tIHRlc3QudGVzdF9jbWRfbGluZV9zY3JpcHQgaW1wb3J0IHRlbXBfZGlyLCBfcnVuX3B5dGhvbiwgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NwYXduX3B5dGhvbiwgX2tpbGxfcHl0aG9uLCAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbWFrZV90ZXN0X3NjcmlwdCwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21waWxlX3Rlc3Rfc2NyaXB0LCAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21ha2VfdGVzdF96aXAsIF9tYWtlX3Rlc3RfcGtnCiAKIAogZGVmIF9ydW5fb2JqZWN0X2RvY3Rlc3Qob2JqLCBtb2R1bGUpOgpAQCAtNjMsMzAgKzU5LDQ0IEBACiAKIAogCi1jbGFzcyBaaXBTdXBwb3J0VGVzdHMoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgotICAgICMgV2UgdXNlIHRoZSBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSB0byByZXN0b3JlCitjbGFzcyBaaXBTdXBwb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGhpcyB1c2VkIHRvIHVzZSB0aGUgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UgdG8gcmVzdG9yZQogICAgICMgdGhlIHN0YXRlIG9mIHRoZSBpbXBvcnQgcmVsYXRlZCBpbmZvcm1hdGlvbgotICAgICMgaW4gdGhlIHN5cyBtb2R1bGUgYWZ0ZXIgZWFjaCB0ZXN0CisgICAgIyBpbiB0aGUgc3lzIG1vZHVsZSBhZnRlciBlYWNoIHRlc3QuIEhvd2V2ZXIsIHRoYXQgcmVzdG9yZXMKKyAgICAjICp0b28gbXVjaCogaW5mb3JtYXRpb24gYW5kIGJyZWFrcyBmb3IgdGhlIGludm9jYXRpb24gb2YKKyAgICAjIG9mIHRlc3RfZG9jdGVzdC4gU28gd2UgZG8gb3VyIG93biB0aGluZyBhbmQgbGVhdmUKKyAgICAjIHN5cy5tb2R1bGVzIGFsb25lLgogICAgICMgV2UgYWxzbyBjbGVhciB0aGUgbGluZWNhY2hlIGFuZCB6aXBpbXBvcnQgY2FjaGUKICAgICAjIGp1c3QgdG8gYXZvaWQgYW55IGJvZ3VzIGVycm9ycyBkdWUgdG8gbmFtZSByZXVzZSBpbiB0aGUgdGVzdHMKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIGxpbmVjYWNoZS5jbGVhcmNhY2hlKCkKICAgICAgICAgemlwaW1wb3J0Ll96aXBfZGlyZWN0b3J5X2NhY2hlLmNsZWFyKCkKLSAgICAgICAgSW1wb3J0SG9va3NCYXNlVGVzdENhc2Uuc2V0VXAoc2VsZikKKyAgICAgICAgc2VsZi5wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgc2VsZi5tZXRhX3BhdGggPSBzeXMubWV0YV9wYXRoWzpdCisgICAgICAgIHNlbGYucGF0aF9ob29rcyA9IHN5cy5wYXRoX2hvb2tzWzpdCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKKyAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCisgICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKIAogICAgIGRlZiB0ZXN0X2luc3BlY3RfZ2V0c291cmNlX2lzc3VlNDIyMyhzZWxmKToKICAgICAgICAgdGVzdF9zcmMgPSAiZGVmIGZvbygpOiBwYXNzXG4iCiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBkOgotICAgICAgICAgICAgaW5pdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoZCwgJ19faW5pdF9fJywgdGVzdF9zcmMpCisgICAgICAgICAgICBpbml0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnX19pbml0X18nLCB0ZXN0X3NyYykKICAgICAgICAgICAgIG5hbWVfaW5femlwID0gb3MucGF0aC5qb2luKCd6aXBfcGtnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoaW5pdF9uYW1lKSkKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKGQsICd0ZXN0X3ppcCcsCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgJ3Rlc3RfemlwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfbmFtZSwgbmFtZV9pbl96aXApCiAgICAgICAgICAgICBvcy5yZW1vdmUoaW5pdF9uYW1lKQogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHppcF9uYW1lKQogICAgICAgICAgICAgaW1wb3J0IHppcF9wa2cKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRzb3VyY2UoemlwX3BrZy5mb28pLCB0ZXN0X3NyYykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0c291cmNlKHppcF9wa2cuZm9vKSwgdGVzdF9zcmMpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1siemlwX3BrZyJdCiAKICAgICBkZWYgdGVzdF9kb2N0ZXN0X2lzc3VlNDE5NyhzZWxmKToKICAgICAgICAgIyBUbyBhdm9pZCBoYXZpbmcgdG8ga2VlcCB0d28gY29waWVzIG9mIHRoZSBkb2N0ZXN0IG1vZHVsZSdzCkBAIC0xMDYsOSArMTE2LDkgQEAKICAgICAgICAgc2FtcGxlX3NyYyA9IHNhbXBsZV9zcmMucmVwbGFjZSgidGVzdC50ZXN0X2RvY3Rlc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3ppcHBlZF9kb2N0ZXN0IikKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICd0ZXN0X3ppcHBlZF9kb2N0ZXN0JywKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gbWFrZV9zY3JpcHQoZCwgJ3Rlc3RfemlwcGVkX2RvY3Rlc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NyYykKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKGQsICd0ZXN0X3ppcCcsCisgICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBtYWtlX3ppcF9zY3JpcHQoZCwgJ3Rlc3RfemlwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgeiA9IHppcGZpbGUuWmlwRmlsZSh6aXBfbmFtZSwgJ2EnKQogICAgICAgICAgICAgei53cml0ZXN0cigic2FtcGxlX3ppcHBlZF9kb2N0ZXN0LnB5Iiwgc2FtcGxlX3NyYykKQEAgLTEyMSw1MyArMTMxLDU2IEBACiAgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgemlwX25hbWUpCiAgICAgICAgICAgICBpbXBvcnQgdGVzdF96aXBwZWRfZG9jdGVzdAotICAgICAgICAgICAgIyBTb21lIG9mIHRoZSBkb2MgdGVzdHMgZGVwZW5kIG9uIHRoZSBjb2xvY2F0ZWQgdGV4dCBmaWxlcwotICAgICAgICAgICAgIyB3aGljaCBhcmVuJ3QgYXZhaWxhYmxlIHRvIHRoZSB6aXBwZWQgdmVyc2lvbiAodGhlIGRvY3Rlc3QKLSAgICAgICAgICAgICMgbW9kdWxlIGN1cnJlbnRseSByZXF1aXJlcyByZWFsIGZpbGVuYW1lcyBmb3Igbm9uLWVtYmVkZGVkCi0gICAgICAgICAgICAjIHRlc3RzKS4gU28gd2UncmUgZm9yY2VkIHRvIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGljaCB0ZXN0cwotICAgICAgICAgICAgIyB0byBydW4uCi0gICAgICAgICAgICAjIGRvY3Rlc3QgY291bGQgcmVhbGx5IHVzZSBzb21lIEFQSXMgd2hpY2ggdGFrZSBhIHRleHQKLSAgICAgICAgICAgICMgc3RyaW5nIG9yIGEgZmlsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZpbGVuYW1lLi4uCi0gICAgICAgICAgICBrbm93bl9nb29kX3Rlc3RzID0gWwotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcywKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLk5lc3RlZENsYXNzLl9faW5pdF9fLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuX19pbml0X18sCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuYV9wcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmFfc3RhdGljbWV0aG9kLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuZG91YmxlLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuZ2V0LAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcywKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuX19pbml0X18sCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVOZXdTdHlsZUNsYXNzLmRvdWJsZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuZ2V0LAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Quc2FtcGxlX2Z1bmMsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3QsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RQYXJzZXIsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIuYmFzaWNzLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NUZXN0UnVubmVyLmV4Y2VwdGlvbnMsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIub3B0aW9uX2RpcmVjdGl2ZXMsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIub3B0aW9uZmxhZ3MsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIudmVyYm9zZV9mbGFnLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9FeGFtcGxlLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9kZWJ1ZywKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfcGRiX3NldF90cmFjZV9uZXN0ZWQsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3Rlc3Rzb3VyY2UsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3RyYWlsaW5nX3NwYWNlX2luX3Rlc3QsCi0gICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RTdWl0ZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdEZpbmRlciwKLSAgICAgICAgICAgIF0KLSAgICAgICAgICAgICMgVGhlc2UgcmVtYWluaW5nIHRlc3RzIGFyZSB0aGUgb25lcyB3aGljaCBuZWVkIGFjY2VzcwotICAgICAgICAgICAgIyB0byB0aGUgZGF0YSBmaWxlcywgc28gd2UgZG9uJ3QgcnVuIHRoZW0KLSAgICAgICAgICAgIGZhaWxfZHVlX3RvX21pc3NpbmdfZGF0YV9maWxlcyA9IFsKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jRmlsZVN1aXRlLAotICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF90ZXN0ZmlsZSwKLSAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfdW5pdHRlc3RfcmVwb3J0ZmxhZ3MsCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBmb3Igb2JqIGluIGtub3duX2dvb2RfdGVzdHM6Ci0gICAgICAgICAgICAgICAgX3J1bl9vYmplY3RfZG9jdGVzdChvYmosIHRlc3RfemlwcGVkX2RvY3Rlc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBTb21lIG9mIHRoZSBkb2MgdGVzdHMgZGVwZW5kIG9uIHRoZSBjb2xvY2F0ZWQgdGV4dCBmaWxlcworICAgICAgICAgICAgICAgICMgd2hpY2ggYXJlbid0IGF2YWlsYWJsZSB0byB0aGUgemlwcGVkIHZlcnNpb24gKHRoZSBkb2N0ZXN0CisgICAgICAgICAgICAgICAgIyBtb2R1bGUgY3VycmVudGx5IHJlcXVpcmVzIHJlYWwgZmlsZW5hbWVzIGZvciBub24tZW1iZWRkZWQKKyAgICAgICAgICAgICAgICAjIHRlc3RzKS4gU28gd2UncmUgZm9yY2VkIHRvIGJlIHNlbGVjdGl2ZSBhYm91dCB3aGljaCB0ZXN0cworICAgICAgICAgICAgICAgICMgdG8gcnVuLgorICAgICAgICAgICAgICAgICMgZG9jdGVzdCBjb3VsZCByZWFsbHkgdXNlIHNvbWUgQVBJcyB3aGljaCB0YWtlIGEgdGV4dAorICAgICAgICAgICAgICAgICMgc3RyaW5nIG9yIGEgZmlsZSBvYmplY3QgaW5zdGVhZCBvZiBhIGZpbGVuYW1lLi4uCisgICAgICAgICAgICAgICAga25vd25fZ29vZF90ZXN0cyA9IFsKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5OZXN0ZWRDbGFzcy5fX2luaXRfXywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5fX2luaXRfXywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVDbGFzcy5hX2NsYXNzbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmFfcHJvcGVydHksCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuYV9zdGF0aWNtZXRob2QsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlQ2xhc3MuZG91YmxlLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZUNsYXNzLmdldCwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC5TYW1wbGVOZXdTdHlsZUNsYXNzLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LlNhbXBsZU5ld1N0eWxlQ2xhc3MuX19pbml0X18sCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcy5kb3VibGUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QuU2FtcGxlTmV3U3R5bGVDbGFzcy5nZXQsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3Quc2FtcGxlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NUZXN0LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFBhcnNlciwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIuYmFzaWNzLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci5leGNlcHRpb25zLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFJ1bm5lci5vcHRpb25fZGlyZWN0aXZlcywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0RvY1Rlc3RSdW5uZXIub3B0aW9uZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NUZXN0UnVubmVyLnZlcmJvc2VfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X0V4YW1wbGUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3BkYl9zZXRfdHJhY2UsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9wZGJfc2V0X3RyYWNlX25lc3RlZCwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3Rlc3Rzb3VyY2UsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF90cmFpbGluZ19zcGFjZV9pbl90ZXN0LAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdFN1aXRlLAorICAgICAgICAgICAgICAgICAgICB0ZXN0X3ppcHBlZF9kb2N0ZXN0LnRlc3RfRG9jVGVzdEZpbmRlciwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgIyBUaGVzZSByZW1haW5pbmcgdGVzdHMgYXJlIHRoZSBvbmVzIHdoaWNoIG5lZWQgYWNjZXNzCisgICAgICAgICAgICAgICAgIyB0byB0aGUgZGF0YSBmaWxlcywgc28gd2UgZG9uJ3QgcnVuIHRoZW0KKyAgICAgICAgICAgICAgICBmYWlsX2R1ZV90b19taXNzaW5nX2RhdGFfZmlsZXMgPSBbCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF9Eb2NGaWxlU3VpdGUsCisgICAgICAgICAgICAgICAgICAgIHRlc3RfemlwcGVkX2RvY3Rlc3QudGVzdF90ZXN0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgdGVzdF96aXBwZWRfZG9jdGVzdC50ZXN0X3VuaXR0ZXN0X3JlcG9ydGZsYWdzLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICBmb3Igb2JqIGluIGtub3duX2dvb2RfdGVzdHM6CisgICAgICAgICAgICAgICAgICAgIF9ydW5fb2JqZWN0X2RvY3Rlc3Qob2JqLCB0ZXN0X3ppcHBlZF9kb2N0ZXN0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbInRlc3RfemlwcGVkX2RvY3Rlc3QiXQogCiAgICAgZGVmIHRlc3RfZG9jdGVzdF9tYWluX2lzc3VlNDE5NyhzZWxmKToKICAgICAgICAgdGVzdF9zcmMgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXApAQCAtMTgwLDIzICsxOTMsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgIiIiKQogICAgICAgICBwYXR0ZXJuID0gJ0ZpbGUgIiVzIiwgbGluZSAyLCBpbiAlcycKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKLSAgICAgICAgICAgIGV4aXRfY29kZSwgZGF0YSA9IF9ydW5fcHl0aG9uKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgZXhwZWN0ZWQgPSBwYXR0ZXJuICUgKHNjcmlwdF9uYW1lLCAiX19tYWluX18uVGVzdCIpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50ICgiRXhwZWN0ZWQgbGluZSIsIGV4cGVjdGVkKQogICAgICAgICAgICAgICAgIHByaW50ICgiR290IHN0ZG91dDoiKQotICAgICAgICAgICAgICAgIHByaW50IChkYXRhKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkIGluIGRhdGEpCi0gICAgICAgICAgICB6aXBfbmFtZSwgcnVuX25hbWUgPSBfbWFrZV90ZXN0X3ppcChkLCAidGVzdF96aXAiLAorICAgICAgICAgICAgICAgIHByaW50IChhc2NpaShvdXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZC5lbmNvZGUoJ3V0Zi04JyksIG91dCkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChkLCAidGVzdF96aXAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUsICdfX21haW5fXy5weScpCi0gICAgICAgICAgICBleGl0X2NvZGUsIGRhdGEgPSBfcnVuX3B5dGhvbih6aXBfbmFtZSkKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soemlwX25hbWUpCiAgICAgICAgICAgICBleHBlY3RlZCA9IHBhdHRlcm4gJSAocnVuX25hbWUsICJfX21haW5fXy5UZXN0IikKICAgICAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICAgICAgcHJpbnQgKCJFeHBlY3RlZCBsaW5lIiwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAgICAgcHJpbnQgKCJHb3Qgc3Rkb3V0OiIpCi0gICAgICAgICAgICAgICAgcHJpbnQgKGRhdGEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhwZWN0ZWQgaW4gZGF0YSkKKyAgICAgICAgICAgICAgICBwcmludCAoYXNjaWkob3V0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQuZW5jb2RlKCd1dGYtOCcpLCBvdXQpCiAKICAgICBkZWYgdGVzdF9wZGJfaXNzdWU0MjAxKHNlbGYpOgogICAgICAgICB0ZXN0X3NyYyA9IHRleHR3cmFwLmRlZGVudCgiIiJcCkBAIC0yMDQsMjAgKzIxNywyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBwZGIKLSAgICAgICAgICAgICAgICAgICAgcGRiLnJ1bmNhbGwoZikKKyAgICAgICAgICAgICAgICAgICAgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5ydW5jYWxsKGYpCiAgICAgICAgICAgICAgICAgICAgICIiIikKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIGQ6Ci0gICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KGQsICdzY3JpcHQnLCB0ZXN0X3NyYykKLSAgICAgICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdChkLCAnc2NyaXB0JywgdGVzdF9zcmMpCisgICAgICAgICAgICBwID0gc3Bhd25fcHl0aG9uKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgcC5zdGRpbi53cml0ZShiJ2xcbicpCi0gICAgICAgICAgICBkYXRhID0gX2tpbGxfcHl0aG9uKHApLmRlY29kZSgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NyaXB0X25hbWUgaW4gZGF0YSkKLSAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwKGQsICJ0ZXN0X3ppcCIsCisgICAgICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2NyaXB0X25hbWUuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICJ0ZXN0X3ppcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ19fbWFpbl9fLnB5JykKLSAgICAgICAgICAgIHAgPSBfc3Bhd25fcHl0aG9uKHppcF9uYW1lKQorICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbih6aXBfbmFtZSkKICAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYidsXG4nKQotICAgICAgICAgICAgZGF0YSA9IF9raWxsX3B5dGhvbihwKS5kZWNvZGUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJ1bl9uYW1lIGluIGRhdGEpCisgICAgICAgICAgICBkYXRhID0ga2lsbF9weXRob24ocCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocnVuX25hbWUuZW5jb2RlKCd1dGYtOCcpLCBkYXRhKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfemxpYi5weQppbmRleCA3NTkzYzA2Li45YWFmZmZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3psaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96bGliLnB5CkBAIC02NiwxMCArNjYsNiBAQAogIyBJc3N1ZSAjMTAyNzYgLSBjaGVjayB0aGF0IGlucHV0cyA+PTRHQiBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCiBjbGFzcyBDaGVja3N1bUJpZ0J1ZmZlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG1tYXAsICJtbWFwKCkgaXMgbm90IGF2YWlsYWJsZS4iKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5tYXhzaXplID4gXzRHLCAiQ2FuJ3QgcnVuIG9uIGEgMzItYml0IHN5c3RlbS4iKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgibGFyZ2VmaWxlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1heSB1c2UgbG90cyBvZiBkaXNrIHNwYWNlLiIpCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICJ3YisiKSBhcyBmOgogICAgICAgICAgICAgZi5zZWVrKF80RykKQEAgLTgxLDYgKzc3LDEwIEBACiAgICAgICAgIHNlbGYubWFwcGluZy5jbG9zZSgpCiAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobW1hcCwgIm1tYXAoKSBpcyBub3QgYXZhaWxhYmxlLiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLm1heHNpemUgPiBfNEcsICJDYW4ndCBydW4gb24gYSAzMi1iaXQgc3lzdGVtLiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJsYXJnZWZpbGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWF5IHVzZSBsb3RzIG9mIGRpc2sgc3BhY2UuIikKICAgICBkZWYgdGVzdF9iaWdfYnVmZmVyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHpsaWIuY3JjMzIoc2VsZi5tYXBwaW5nKSwgMzA1ODY4NjkwOCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6bGliLmFkbGVyMzIoc2VsZi5tYXBwaW5nKSwgODI4Mzc5MTkpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgIyBHZW5lcmF0ZSAxME1CIHdvcnRoIG9mIHJhbmRvbSwgYW5kIGV4cGFuZCBpdCBieSByZXBlYXRpbmcgaXQuCiAgICAgICAgICMgVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB6bGliJ3MgbWVtb3J5IGlzIG5vdCBiaWcgZW5vdWdoIHRvIGV4cGxvaXQKICAgICAgICAgIyBzdWNoIHNwcmVhZCBvdXQgcmVkdW5kYW5jeS4KLSAgICAgICAgZGF0YSA9IGInJy5qb2luKFtiaW5hc2NpaS5hMmJfaGV4KGZtdCAlIHJhbmRvbS5nZXRyYW5kYml0cyg4ICogXzFNKSkKKyAgICAgICAgZGF0YSA9IGInJy5qb2luKFtyYW5kb20uZ2V0cmFuZGJpdHMoOCAqIF8xTSkudG9fYnl0ZXMoXzFNLCAnbGl0dGxlJykKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKV0pCiAgICAgICAgIGRhdGEgPSBkYXRhICogKHNpemUgLy8gbGVuKGRhdGEpICsgMSkKICAgICAgICAgdHJ5OgpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9zdHJlYW0oc2VsZik6CiAgICAgICAgICMgQW4gdXNlZnVsIGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4KICAgICAgICAgeCA9IHpsaWIuY29tcHJlc3MoSEFNTEVUX1NDRU5FKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCh6bGliLmVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHpsaWIuZXJyb3IsCiAgICAgICAgICAgICAiRXJyb3IgLTUgd2hpbGUgZGVjb21wcmVzc2luZyBkYXRhOiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzdHJlYW0iLAogICAgICAgICAgICAgemxpYi5kZWNvbXByZXNzLCB4WzotMV0pCiAKQEAgLTE4Niw2ICsxODYsMTYgQEAKICAgICBkZWYgdGVzdF9iaWdfZGVjb21wcmVzc19idWZmZXIoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuY2hlY2tfYmlnX2RlY29tcHJlc3NfYnVmZmVyKHNpemUsIHpsaWIuZGVjb21wcmVzcykKIAorICAgIEBwcmVjaXNpb25iaWdtZW10ZXN0KHNpemU9XzRHICsgMTAwLCBtZW11c2U9MSkKKyAgICBkZWYgdGVzdF9sZW5ndGhfb3ZlcmZsb3coc2VsZiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPCBfNEcgKyAxMDA6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJub3QgZW5vdWdoIGZyZWUgbWVtb3J5LCBuZWVkIGF0IGxlYXN0IDQgR0IiKQorICAgICAgICBkYXRhID0gYid4JyAqIHNpemUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgemxpYi5jb21wcmVzcywgZGF0YSwgMSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRhdGEgPSBOb25lCisKIAogY2xhc3MgQ29tcHJlc3NPYmplY3RUZXN0Q2FzZShCYXNlQ29tcHJlc3NUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgVGVzdCBjb21wcmVzc2lvbiBvYmplY3QKQEAgLTIwNSw4ICsyMTUsOCBAQAogICAgICAgICAgICAgeTEgPSBkY28uZGVjb21wcmVzcyh2MSArIHYyKQogICAgICAgICAgICAgeTIgPSBkY28uZmx1c2goKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCB5MSArIHkyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZGNvLnVuY29uc3VtZWRfdGFpbCwgYnl0ZXMpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZGNvLnVudXNlZF9kYXRhLCBieXRlcykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGNvLnVuY29uc3VtZWRfdGFpbCwgYnl0ZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGNvLnVudXNlZF9kYXRhLCBieXRlcykKIAogICAgIGRlZiB0ZXN0X2NvbXByZXNzb3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBzcGVjaWZ5IGxvdHMgb2Ygb3B0aW9ucyB0byBjb21wcmVzc29iaigpCkBAIC0yNTEsNyArMjYxLDcgQEAKIAogICAgICAgICBkZWNvbWJ1ZiA9IHpsaWIuZGVjb21wcmVzcyhjb21idWYpCiAgICAgICAgICMgVGVzdCB0eXBlIG9mIHJldHVybiB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkZWNvbWJ1ZiwgYnl0ZXMpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZGVjb21idWYsIGJ5dGVzKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGVjb21idWYpCiAKQEAgLTQ2Myw3ICs0NzMsNyBAQAogICAgICAgICAgICAgZGF0YSA9IEhBTUxFVF9TQ0VORQogICAgICAgICAgICAgY29tcCA9IHpsaWIuY29tcHJlc3MoZGF0YSkKICAgICAgICAgICAgICMgVGVzdCB0eXBlIG9mIHJldHVybiB2YWx1ZQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoY29tcCwgYnl0ZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNvbXAsIGJ5dGVzKQogCiAgICAgICAgICAgICBkMCA9IHpsaWIuZGVjb21wcmVzc29iaigpCiAgICAgICAgICAgICBidWZzMCA9IFtdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0dGFyLnRhciBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCmluZGV4IGI1YmI0NmIuLmI5MzIxMDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3R0YXIudGFyCisrKyBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3RocmVhZGVkX2ltcG9ydF9oYW5nZXJzLnB5IGIvTGliL3Rlc3QvdGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMucHkKaW5kZXggZDc1MDg3NC4uYWRmMDNlMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMucHkKKysrIGIvTGliL3Rlc3QvdGhyZWFkZWRfaW1wb3J0X2hhbmdlcnMucHkKQEAgLTI5LDcgKzI5LDcgQEAKIAogZm9yIG5hbWUsIGZ1bmMsIGFyZ3MgaW4gWwogICAgICAgICAjIEJ1ZyAxNDczNzY6ICBUZW1wb3JhcnlGaWxlIGh1bmcgb24gV2luZG93cywgc3RhcnRpbmcgaW4gUHl0aG9uIDIuNC4KLSAgICAgICAgKCJ0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlIiwgdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSwgKCkpLAorICAgICAgICAoInRlbXBmaWxlLlRlbXBvcmFyeUZpbGUiLCBsYW1iZGE6IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKS5jbG9zZSgpLCAoKSksCiAKICAgICAgICAgIyBUaGUgcmVhbCBjYXVzZSBmb3IgYnVnIDE0NzM3NjogIG50cGF0aC5hYnNwYXRoKCkgY2F1c2VkIHRoZSBoYW5nLgogICAgICAgICAoIm9zLnBhdGguYWJzcGF0aCIsIG9zLnBhdGguYWJzcGF0aCwgKCcuJywpKSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3dpbl9jb25zb2xlX2hhbmRsZXIucHkgYi9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3Nzc5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC93aW5fY29uc29sZV9oYW5kbGVyLnB5CkBAIC0wLDAgKzEsNDkgQEAKKyIiIlNjcmlwdCB1c2VkIHRvIHRlc3Qgb3Mua2lsbCBvbiBXaW5kb3dzLCBmb3IgaXNzdWUgIzEyMjAyMTIKKworVGhpcyBzY3JpcHQgaXMgc3RhcnRlZCBhcyBhIHN1YnByb2Nlc3MgaW4gdGVzdF9vcyBhbmQgaXMgdXNlZCB0byB0ZXN0IHRoZQorQ1RSTF9DX0VWRU5UIGFuZCBDVFJMX0JSRUFLX0VWRU5UIHNpZ25hbHMsIHdoaWNoIHJlcXVpcmVzIGEgY3VzdG9tIGhhbmRsZXIKK3RvIGJlIHdyaXR0ZW4gaW50byB0aGUga2lsbCB0YXJnZXQuCisKK1NlZSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM2ODUwNDklMjh2PVZTLjg1JTI5LmFzcHggZm9yIGEKK3NpbWlsYXIgZXhhbXBsZSBpbiBDLgorIiIiCisKK2Zyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcywgV0lORlVOQ1RZUEUKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBtbWFwCitpbXBvcnQgc3lzCisKKyMgRnVuY3Rpb24gcHJvdG90eXBlIGZvciB0aGUgaGFuZGxlciBmdW5jdGlvbi4gUmV0dXJucyBCT09MLCB0YWtlcyBhIERXT1JELgorSGFuZGxlclJvdXRpbmUgPSBXSU5GVU5DVFlQRSh3aW50eXBlcy5CT09MLCB3aW50eXBlcy5EV09SRCkKKworZGVmIF9jdHJsX2hhbmRsZXIoc2lnKToKKyAgICAiIiJIYW5kbGUgYSBzaWcgZXZlbnQgYW5kIHJldHVybiAwIHRvIHRlcm1pbmF0ZSB0aGUgcHJvY2VzcyIiIgorICAgIGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9DX0VWRU5UOgorICAgICAgICBwYXNzCisgICAgZWxpZiBzaWcgPT0gc2lnbmFsLkNUUkxfQlJFQUtfRVZFTlQ6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiVU5LTk9XTiBFVkVOVCIpCisgICAgcmV0dXJuIDAKKworY3RybF9oYW5kbGVyID0gSGFuZGxlclJvdXRpbmUoX2N0cmxfaGFuZGxlcikKKworCitTZXRDb25zb2xlQ3RybEhhbmRsZXIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLlNldENvbnNvbGVDdHJsSGFuZGxlcgorU2V0Q29uc29sZUN0cmxIYW5kbGVyLmFyZ3R5cGVzID0gKEhhbmRsZXJSb3V0aW5lLCB3aW50eXBlcy5CT09MKQorU2V0Q29uc29sZUN0cmxIYW5kbGVyLnJlc3R5cGUgPSB3aW50eXBlcy5CT09MCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgIyBBZGQgb3VyIGNvbnNvbGUgY29udHJvbCBoYW5kbGluZyBmdW5jdGlvbiB3aXRoIHZhbHVlIDEKKyAgICBpZiBub3QgU2V0Q29uc29sZUN0cmxIYW5kbGVyKGN0cmxfaGFuZGxlciwgMSk6CisgICAgICAgIHByaW50KCJVbmFibGUgdG8gYWRkIFNldENvbnNvbGVDdHJsSGFuZGxlciIpCisgICAgICAgIGV4aXQoLTEpCisKKyAgICAjIEF3YWtlIG1haW4gcHJvY2VzcworICAgIG0gPSBtbWFwLm1tYXAoLTEsIDEsIHN5cy5hcmd2WzFdKQorICAgIG1bMF0gPSAxCisKKyAgICAjIERvIG5vdGhpbmcgYnV0IHdhaXQgZm9yIHRoZSBzaWduYWwKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUtbnMueG1sIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLW5zLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWYzNGIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvc2ltcGxlLW5zLnhtbApAQCAtMCwwICsxLDcgQEAKKzw/cGkgZGF0YT8+Cis8IS0tIGNvbW1lbnQgLS0+Cis8cm9vdCB4bWxucz0nbmFtZXNwYWNlJz4KKyAgIDxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQ+CisgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWwKKyAgIDxlbXB0eS1lbGVtZW50Lz4KKzwvcm9vdD4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3htbHRlc3RkYXRhL3NpbXBsZS54bWwgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4OGMyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS9zaW1wbGUueG1sCkBAIC0wLDAgKzEsNiBAQAorPCEtLSBjb21tZW50IC0tPgorPHJvb3Q+CisgICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50PgorICAgPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsCisgICA8ZW1wdHktZWxlbWVudC8+Cis8L3Jvb3Q+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0LnhtbCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0LnhtbApyZW5hbWUgdG8gTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3QueG1sLm91dCBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdC54bWwub3V0CnJlbmFtZSB0byBMaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3ppcF9jcDQzN19oZWFkZXIuemlwIGIvTGliL3Rlc3QvemlwX2NwNDM3X2hlYWRlci56aXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjNmNmMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3ppcF9jcDQzN19oZWFkZXIuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90aHJlYWRpbmcucHkgYi9MaWIvdGhyZWFkaW5nLnB5CmluZGV4IGM5NjVjNmYuLmZkOTNmNzQgMTAwNjQ0Ci0tLSBhL0xpYi90aHJlYWRpbmcucHkKKysrIGIvTGliL3RocmVhZGluZy5weQpAQCAtMTcsMjQgKzE3LDI0IEBACiAjIHdpdGggdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUsIHdoaWNoIGRvZXNuJ3QgcHJvdmlkZSB0aGUgb2xkCiAjIEphdmEgaW5zcGlyZWQgbmFtZXMuCiAKLQotIyBSZW5hbWUgc29tZSBzdHVmZiBzbyAiZnJvbSB0aHJlYWRpbmcgaW1wb3J0ICoiIGlzIHNhZmUKIF9fYWxsX18gPSBbJ2FjdGl2ZV9jb3VudCcsICdDb25kaXRpb24nLCAnY3VycmVudF90aHJlYWQnLCAnZW51bWVyYXRlJywgJ0V2ZW50JywKLSAgICAgICAgICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnVGhyZWFkJywKKyAgICAgICAgICAgJ0xvY2snLCAnUkxvY2snLCAnU2VtYXBob3JlJywgJ0JvdW5kZWRTZW1hcGhvcmUnLCAnVGhyZWFkJywgJ0JhcnJpZXInLAogICAgICAgICAgICAnVGltZXInLCAnc2V0cHJvZmlsZScsICdzZXR0cmFjZScsICdsb2NhbCcsICdzdGFja19zaXplJ10KIAorIyBSZW5hbWUgc29tZSBzdHVmZiBzbyAiZnJvbSB0aHJlYWRpbmcgaW1wb3J0ICoiIGlzIHNhZmUKIF9zdGFydF9uZXdfdGhyZWFkID0gX3RocmVhZC5zdGFydF9uZXdfdGhyZWFkCiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jawogX2dldF9pZGVudCA9IF90aHJlYWQuZ2V0X2lkZW50CiBUaHJlYWRFcnJvciA9IF90aHJlYWQuZXJyb3IKK3RyeToKKyAgICBfQ1JMb2NrID0gX3RocmVhZC5STG9jaworZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgIF9DUkxvY2sgPSBOb25lCitUSU1FT1VUX01BWCA9IF90aHJlYWQuVElNRU9VVF9NQVgKIGRlbCBfdGhyZWFkCiAKIAogIyBEZWJ1ZyBzdXBwb3J0IChhZGFwdGVkIGZyb20gaWhvb2tzLnB5KS4KLSMgQWxsIHRoZSBtYWpvciBjbGFzc2VzIGhlcmUgZGVyaXZlIGZyb20gX1ZlcmJvc2UuICBXZSBmb3JjZSB0aGF0IHRvCi0jIGJlIGEgbmV3LXN0eWxlIGNsYXNzIHNvIHRoYXQgYWxsIHRoZSBtYWpvciBjbGFzc2VzIGhlcmUgYXJlIG5ldy1zdHlsZS4KLSMgVGhpcyBoZWxwcyBkZWJ1Z2dpbmcgKHR5cGUoaW5zdGFuY2UpIGlzIG1vcmUgcmV2ZWFsaW5nIGZvciBpbnN0YW5jZXMKLSMgb2YgbmV3LXN0eWxlIGNsYXNzZXMpLgogCiBfVkVSQk9TRSA9IEZhbHNlCiAKQEAgLTg1LDggKzg1LDEyIEBACiAKIExvY2sgPSBfYWxsb2NhdGVfbG9jawogCi1kZWYgUkxvY2soKmFyZ3MsICoqa3dhcmdzKToKLSAgICByZXR1cm4gX1JMb2NrKCphcmdzLCAqKmt3YXJncykKK2RlZiBSTG9jayh2ZXJib3NlPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgaWYgdmVyYm9zZSBpcyBOb25lOgorICAgICAgICB2ZXJib3NlID0gX1ZFUkJPU0UKKyAgICBpZiAoX19kZWJ1Z19fIGFuZCB2ZXJib3NlKSBvciBfQ1JMb2NrIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBfUHlSTG9jayh2ZXJib3NlLCAqYXJncywgKiprd2FyZ3MpCisgICAgcmV0dXJuIF9DUkxvY2soKmFyZ3MsICoqa3dhcmdzKQogCiBjbGFzcyBfUkxvY2soX1ZlcmJvc2UpOgogCkBAIC0xMDUsMTQgKzEwOSwxNCBAQAogICAgICAgICByZXR1cm4gIjwlcyBvd25lcj0lciBjb3VudD0lZD4iICUgKAogICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBvd25lciwgc2VsZi5fY291bnQpCiAKLSAgICBkZWYgYWNxdWlyZShzZWxmLCBibG9ja2luZz1UcnVlKToKKyAgICBkZWYgYWNxdWlyZShzZWxmLCBibG9ja2luZz1UcnVlLCB0aW1lb3V0PS0xKToKICAgICAgICAgbWUgPSBfZ2V0X2lkZW50KCkKICAgICAgICAgaWYgc2VsZi5fb3duZXIgPT0gbWU6CiAgICAgICAgICAgICBzZWxmLl9jb3VudCA9IHNlbGYuX2NvdW50ICsgMQogICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgogICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLmFjcXVpcmUoJXMpOiByZWN1cnNpdmUgc3VjY2VzcyIsIHNlbGYsIGJsb2NraW5nKQogICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgcmMgPSBzZWxmLl9ibG9jay5hY3F1aXJlKGJsb2NraW5nKQorICAgICAgICByYyA9IHNlbGYuX2Jsb2NrLmFjcXVpcmUoYmxvY2tpbmcsIHRpbWVvdXQpCiAgICAgICAgIGlmIHJjOgogICAgICAgICAgICAgc2VsZi5fb3duZXIgPSBtZQogICAgICAgICAgICAgc2VsZi5fY291bnQgPSAxCkBAIC0xNjIsNiArMTY2LDggQEAKICAgICBkZWYgX2lzX293bmVkKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fb3duZXIgPT0gX2dldF9pZGVudCgpCiAKK19QeVJMb2NrID0gX1JMb2NrCisKIAogZGVmIENvbmRpdGlvbigqYXJncywgKiprd2FyZ3MpOgogICAgIHJldHVybiBfQ29uZGl0aW9uKCphcmdzLCAqKmt3YXJncykKQEAgLTIyNywyNSArMjMzLDE0IEBACiAgICAgICAgIHRyeTogICAgIyByZXN0b3JlIHN0YXRlIG5vIG1hdHRlciB3aGF0IChlLmcuLCBLZXlib2FyZEludGVycnVwdCkKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKICAgICAgICAgICAgICAgICB3YWl0ZXIuYWNxdWlyZSgpCisgICAgICAgICAgICAgICAgZ290aXQgPSBUcnVlCiAgICAgICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl9ub3RlKCIlcy53YWl0KCk6IGdvdCBpdCIsIHNlbGYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgQmFsYW5jaW5nIGFjdDogIFdlIGNhbid0IGFmZm9yZCBhIHB1cmUgYnVzeSBsb29wLCBzbyB3ZQotICAgICAgICAgICAgICAgICMgaGF2ZSB0byBzbGVlcDsgYnV0IGlmIHdlIHNsZWVwIHRoZSB3aG9sZSB0aW1lb3V0IHRpbWUsCi0gICAgICAgICAgICAgICAgIyB3ZSdsbCBiZSB1bnJlc3BvbnNpdmUuICBUaGUgc2NoZW1lIGhlcmUgc2xlZXBzIHZlcnkKLSAgICAgICAgICAgICAgICAjIGxpdHRsZSBhdCBmaXJzdCwgbG9uZ2VyIGFzIHRpbWUgZ29lcyBvbiwgYnV0IG5ldmVyIGxvbmdlcgotICAgICAgICAgICAgICAgICMgdGhhbiAyMCB0aW1lcyBwZXIgc2Vjb25kIChvciB0aGUgdGltZW91dCB0aW1lIHJlbWFpbmluZykuCi0gICAgICAgICAgICAgICAgZW5kdGltZSA9IF90aW1lKCkgKyB0aW1lb3V0Ci0gICAgICAgICAgICAgICAgZGVsYXkgPSAwLjAwMDUgIyA1MDAgdXMgLT4gaW5pdGlhbCBkZWxheSBvZiAxIG1zCi0gICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgZ290aXQgPSB3YWl0ZXIuYWNxdWlyZSgwKQotICAgICAgICAgICAgICAgICAgICBpZiBnb3RpdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGVuZHRpbWUgLSBfdGltZSgpCi0gICAgICAgICAgICAgICAgICAgIGlmIHJlbWFpbmluZyA8PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgZGVsYXkgPSBtaW4oZGVsYXkgKiAyLCByZW1haW5pbmcsIC4wNSkKLSAgICAgICAgICAgICAgICAgICAgX3NsZWVwKGRlbGF5KQorICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPiAwOgorICAgICAgICAgICAgICAgICAgICBnb3RpdCA9IHdhaXRlci5hY3F1aXJlKFRydWUsIHRpbWVvdXQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZ290aXQgPSB3YWl0ZXIuYWNxdWlyZShGYWxzZSkKICAgICAgICAgICAgICAgICBpZiBub3QgZ290aXQ6CiAgICAgICAgICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLndhaXQoJXMpOiB0aW1lZCBvdXQiLCBzZWxmLCB0aW1lb3V0KQpAQCAtMjU2LDkgKzI1MSwzNiBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLndhaXQoJXMpOiBnb3QgaXQiLCBzZWxmLCB0aW1lb3V0KQorICAgICAgICAgICAgcmV0dXJuIGdvdGl0CiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9hY3F1aXJlX3Jlc3RvcmUoc2F2ZWRfc3RhdGUpCiAKKyAgICBkZWYgd2FpdF9mb3Ioc2VsZiwgcHJlZGljYXRlLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBlbmR0aW1lID0gTm9uZQorICAgICAgICB3YWl0dGltZSA9IHRpbWVvdXQKKyAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgd2hpbGUgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIGlmIHdhaXR0aW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGVuZHRpbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgZW5kdGltZSA9IF90aW1lKCkgKyB3YWl0dGltZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdhaXR0aW1lID0gZW5kdGltZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgd2FpdHRpbWUgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9ub3RlKCIlcy53YWl0X2ZvciglciwgJXIpOiBUaW1lZCBvdXQuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHByZWRpY2F0ZSwgdGltZW91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICAgICAgc2VsZi5fbm90ZSgiJXMud2FpdF9mb3IoJXIsICVyKTogV2FpdGluZyB3aXRoIHRpbWVvdXQ9JXMuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHByZWRpY2F0ZSwgdGltZW91dCwgd2FpdHRpbWUpCisgICAgICAgICAgICBzZWxmLndhaXQod2FpdHRpbWUpCisgICAgICAgICAgICByZXN1bHQgPSBwcmVkaWNhdGUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgorICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoIiVzLndhaXRfZm9yKCVyLCAlcik6IFN1Y2Nlc3MuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHByZWRpY2F0ZSwgdGltZW91dCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCiAgICAgZGVmIG5vdGlmeShzZWxmLCBuPTEpOgogICAgICAgICBpZiBub3Qgc2VsZi5faXNfb3duZWQoKToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrIikKQEAgLTI5Nyw4ICszMTksMTEgQEAKICAgICAgICAgc2VsZi5fY29uZCA9IENvbmRpdGlvbihMb2NrKCkpCiAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKIAotICAgIGRlZiBhY3F1aXJlKHNlbGYsIGJsb2NraW5nPVRydWUpOgorICAgIGRlZiBhY3F1aXJlKHNlbGYsIGJsb2NraW5nPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBibG9ja2luZyBhbmQgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IHNwZWNpZnkgdGltZW91dCBmb3Igbm9uLWJsb2NraW5nIGFjcXVpcmUiKQogICAgICAgICByYyA9IEZhbHNlCisgICAgICAgIGVuZHRpbWUgPSBOb25lCiAgICAgICAgIHNlbGYuX2NvbmQuYWNxdWlyZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX3ZhbHVlID09IDA6CiAgICAgICAgICAgICBpZiBub3QgYmxvY2tpbmc6CkBAIC0zMDYsNyArMzMxLDE0IEBACiAgICAgICAgICAgICBpZiBfX2RlYnVnX186CiAgICAgICAgICAgICAgICAgc2VsZi5fbm90ZSgiJXMuYWNxdWlyZSglcyk6IGJsb2NrZWQgd2FpdGluZywgdmFsdWU9JXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgYmxvY2tpbmcsIHNlbGYuX3ZhbHVlKQotICAgICAgICAgICAgc2VsZi5fY29uZC53YWl0KCkKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgZW5kdGltZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBlbmR0aW1lID0gX3RpbWUoKSArIHRpbWVvdXQKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZW5kdGltZSAtIF90aW1lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuX2NvbmQud2FpdCh0aW1lb3V0KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSAtIDEKICAgICAgICAgICAgIGlmIF9fZGVidWdfXzoKQEAgLTM5MSw2ICs0MjMsMTc3IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLl9jb25kLnJlbGVhc2UoKQogCisKKyMgQSBiYXJyaWVyIGNsYXNzLiAgSW5zcGlyZWQgaW4gcGFydCBieSB0aGUgcHRocmVhZF9iYXJyaWVyXyogYXBpIGFuZAorIyB0aGUgQ3ljbGljQmFycmllciBjbGFzcyBmcm9tIEphdmEuICBTZWUKKyMgaHR0cDovL3NvdXJjZXdhcmUub3JnL3B0aHJlYWRzLXdpbjMyL21hbnVhbC9wdGhyZWFkX2JhcnJpZXJfaW5pdC5odG1sIGFuZAorIyBodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvamF2YS91dGlsL2NvbmN1cnJlbnQvCisjICAgICAgICBDeWNsaWNCYXJyaWVyLmh0bWwKKyMgZm9yIGluZm9ybWF0aW9uLgorIyBXZSBtYWludGFpbiB0d28gbWFpbiBzdGF0ZXMsICdmaWxsaW5nJyBhbmQgJ2RyYWluaW5nJyBlbmFibGluZyB0aGUgYmFycmllcgorIyB0byBiZSBjeWNsaWMuICBUaHJlYWRzIGFyZSBub3QgYWxsb3dlZCBpbnRvIGl0IHVudGlsIGl0IGhhcyBmdWxseSBkcmFpbmVkCisjIHNpbmNlIHRoZSBwcmV2aW91cyBjeWNsZS4gIEluIGFkZGl0aW9uLCBhICdyZXNldHRpbmcnIHN0YXRlIGV4aXN0cyB3aGljaCBpcworIyBzaW1pbGFyIHRvICdkcmFpbmluZycgZXhjZXB0IHRoYXQgdGhyZWFkcyBsZWF2ZSB3aXRoIGEgQnJva2VuQmFycmllckVycm9yLAorIyBhbmQgYSAnYnJva2VuJyBzdGF0ZSBpbiB3aGljaCBhbGwgdGhyZWFkcyBnZXQgZ2V0IHRoZSBleGNlcHRpb24uCitjbGFzcyBCYXJyaWVyKF9WZXJib3NlKToKKyAgICAiIiIKKyAgICBCYXJyaWVyLiAgVXNlZnVsIGZvciBzeW5jaHJvbml6aW5nIGEgZml4ZWQgbnVtYmVyIG9mIHRocmVhZHMKKyAgICBhdCBrbm93biBzeW5jaHJvbml6YXRpb24gcG9pbnRzLiAgVGhyZWFkcyBibG9jayBvbiAnd2FpdCgpJyBhbmQgYXJlCisgICAgc2ltdWx0YW5lb3VzbHkgb25jZSB0aGV5IGhhdmUgYWxsIG1hZGUgdGhhdCBjYWxsLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJ0aWVzLCBhY3Rpb249Tm9uZSwgdGltZW91dD1Ob25lLCB2ZXJib3NlPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgYmFycmllciwgaW5pdGlhbGlzZWQgdG8gJ3BhcnRpZXMnIHRocmVhZHMuCisgICAgICAgICdhY3Rpb24nIGlzIGEgY2FsbGFibGUgd2hpY2gsIHdoZW4gc3VwcGxpZWQsIHdpbGwgYmUgY2FsbGVkCisgICAgICAgIGJ5IG9uZSBvZiB0aGUgdGhyZWFkcyBhZnRlciB0aGV5IGhhdmUgYWxsIGVudGVyZWQgdGhlCisgICAgICAgIGJhcnJpZXIgYW5kIGp1c3QgcHJpb3IgdG8gcmVsZWFzaW5nIHRoZW0gYWxsLgorICAgICAgICBJZiBhICd0aW1lb3V0JyBpcyBwcm92aWRlZCwgaXQgaXMgdXNlcyBhcyB0aGUgZGVmYXVsdCBmb3IKKyAgICAgICAgYWxsIHN1YnNlcXVlbnQgJ3dhaXQoKScgY2FsbHMuCisgICAgICAgICIiIgorICAgICAgICBfVmVyYm9zZS5fX2luaXRfXyhzZWxmLCB2ZXJib3NlKQorICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKExvY2soKSkKKyAgICAgICAgc2VsZi5fYWN0aW9uID0gYWN0aW9uCisgICAgICAgIHNlbGYuX3RpbWVvdXQgPSB0aW1lb3V0CisgICAgICAgIHNlbGYuX3BhcnRpZXMgPSBwYXJ0aWVzCisgICAgICAgIHNlbGYuX3N0YXRlID0gMCAjMCBmaWxsaW5nLCAxLCBkcmFpbmluZywgLTEgcmVzZXR0aW5nLCAtMiBicm9rZW4KKyAgICAgICAgc2VsZi5fY291bnQgPSAwCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgV2FpdCBmb3IgdGhlIGJhcnJpZXIuICBXaGVuIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRocmVhZHMgaGF2ZQorICAgICAgICBzdGFydGVkIHdhaXRpbmcsIHRoZXkgYXJlIGFsbCBzaW11bHRhbmVvdXNseSBhd29rZW4uIElmIGFuICdhY3Rpb24nCisgICAgICAgIHdhcyBwcm92aWRlZCBmb3IgdGhlIGJhcnJpZXIsIG9uZSBvZiB0aGUgdGhyZWFkcyB3aWxsIGhhdmUgZXhlY3V0ZWQKKyAgICAgICAgdGhhdCBjYWxsYmFjayBwcmlvciB0byByZXR1cm5pbmcuCisgICAgICAgIFJldHVybnMgYW4gaW5kaXZpZHVhbCBpbmRleCBudW1iZXIgZnJvbSAwIHRvICdwYXJ0aWVzLTEnLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3RpbWVvdXQKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgorICAgICAgICAgICAgc2VsZi5fZW50ZXIoKSAjIEJsb2NrIHdoaWxlIHRoZSBiYXJyaWVyIGRyYWlucy4KKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5fY291bnQKKyAgICAgICAgICAgIHNlbGYuX2NvdW50ICs9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBpbmRleCArIDEgPT0gc2VsZi5fcGFydGllczoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSByZWxlYXNlIHRoZSBiYXJyaWVyCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlbGVhc2UoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgV2Ugd2FpdCB1bnRpbCBzb21lb25lIHJlbGVhc2VzIHVzCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXQodGltZW91dCkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXgKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fY291bnQgLT0gMQorICAgICAgICAgICAgICAgICMgV2FrZSB1cCBhbnkgdGhyZWFkcyB3YWl0aW5nIGZvciBiYXJyaWVyIHRvIGRyYWluLgorICAgICAgICAgICAgICAgIHNlbGYuX2V4aXQoKQorCisgICAgIyBCbG9jayB1bnRpbCB0aGUgYmFycmllciBpcyByZWFkeSBmb3IgdXMsIG9yIHJhaXNlIGFuIGV4Y2VwdGlvbgorICAgICMgaWYgaXQgaXMgYnJva2VuLgorICAgIGRlZiBfZW50ZXIoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuX3N0YXRlIGluICgtMSwgMSk6CisgICAgICAgICAgICAjIEl0IGlzIGRyYWluaW5nIG9yIHJlc2V0dGluZywgd2FpdCB1bnRpbCBkb25lCisgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQoKQorICAgICAgICAjc2VlIGlmIHRoZSBiYXJyaWVyIGlzIGluIGEgYnJva2VuIHN0YXRlCisgICAgICAgIGlmIHNlbGYuX3N0YXRlIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIEJyb2tlbkJhcnJpZXJFcnJvcgorICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgPT0gMAorCisgICAgIyBPcHRpb25hbGx5IHJ1biB0aGUgJ2FjdGlvbicgYW5kIHJlbGVhc2UgdGhlIHRocmVhZHMgd2FpdGluZworICAgICMgaW4gdGhlIGJhcnJpZXIuCisgICAgZGVmIF9yZWxlYXNlKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9hY3Rpb246CisgICAgICAgICAgICAgICAgc2VsZi5fYWN0aW9uKCkKKyAgICAgICAgICAgICMgZW50ZXIgZHJhaW5pbmcgc3RhdGUKKyAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gMQorICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnlfYWxsKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgI2FuIGV4Y2VwdGlvbiBkdXJpbmcgdGhlIF9hY3Rpb24gaGFuZGxlci4gIEJyZWFrIGFuZCByZXJhaXNlCisgICAgICAgICAgICBzZWxmLl9icmVhaygpCisgICAgICAgICAgICByYWlzZQorCisgICAgIyBXYWl0IGluIHRoZSBiYXJyaWVyIHVudGlsIHdlIGFyZSByZWxhc2VkLiAgUmFpc2UgYW4gZXhjZXB0aW9uCisgICAgIyBpZiB0aGUgYmFycmllciBpcyByZXNldCBvciBicm9rZW4uCisgICAgZGVmIF93YWl0KHNlbGYsIHRpbWVvdXQpOgorICAgICAgICBpZiBub3Qgc2VsZi5fY29uZC53YWl0X2ZvcihsYW1iZGEgOiBzZWxmLl9zdGF0ZSAhPSAwLCB0aW1lb3V0KToKKyAgICAgICAgICAgICN0aW1lZCBvdXQuICBCcmVhayB0aGUgYmFycmllcgorICAgICAgICAgICAgc2VsZi5fYnJlYWsoKQorICAgICAgICAgICAgcmFpc2UgQnJva2VuQmFycmllckVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlIDwgMDoKKyAgICAgICAgICAgIHJhaXNlIEJyb2tlbkJhcnJpZXJFcnJvcgorICAgICAgICBhc3NlcnQgc2VsZi5fc3RhdGUgPT0gMQorCisgICAgIyBJZiB3ZSBhcmUgdGhlIGxhc3QgdGhyZWFkIHRvIGV4aXQgdGhlIGJhcnJpZXIsIHNpZ25hbCBhbnkgdGhyZWFkcworICAgICMgd2FpdGluZyBmb3IgdGhlIGJhcnJpZXIgdG8gZHJhaW4uCisgICAgZGVmIF9leGl0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb3VudCA9PSAwOgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgaW4gKC0xLCAxKToKKyAgICAgICAgICAgICAgICAjcmVzZXR0aW5nIG9yIGRyYWluaW5nCisgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnlfYWxsKCkKKworICAgIGRlZiByZXNldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlc2V0IHRoZSBiYXJyaWVyIHRvIHRoZSBpbml0aWFsIHN0YXRlLgorICAgICAgICBBbnkgdGhyZWFkcyBjdXJyZW50bHkgd2FpdGluZyB3aWxsIGdldCB0aGUgQnJva2VuQmFycmllciBleGNlcHRpb24KKyAgICAgICAgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgorICAgICAgICAgICAgaWYgc2VsZi5fY291bnQgPiAwOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IDA6CisgICAgICAgICAgICAgICAgICAgICNyZXNldCB0aGUgYmFycmllciwgd2FraW5nIHVwIHRocmVhZHMKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdGUgPSAtMQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RhdGUgPT0gLTI6CisgICAgICAgICAgICAgICAgICAgICN3YXMgYnJva2VuLCBzZXQgaXQgdG8gcmVzZXQgc3RhdGUKKyAgICAgICAgICAgICAgICAgICAgI3doaWNoIGNsZWFycyB3aGVuIHRoZSBsYXN0IHRocmVhZCBleGl0cworICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IC0xCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gMAorICAgICAgICAgICAgc2VsZi5fY29uZC5ub3RpZnlfYWxsKCkKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFBsYWNlIHRoZSBiYXJyaWVyIGludG8gYSAnYnJva2VuJyBzdGF0ZS4KKyAgICAgICAgVXNlZnVsIGluIGNhc2Ugb2YgZXJyb3IuICBBbnkgY3VycmVudGx5IHdhaXRpbmcgdGhyZWFkcyBhbmQKKyAgICAgICAgdGhyZWFkcyBhdHRlbXB0aW5nIHRvICd3YWl0KCknIHdpbGwgaGF2ZSBCcm9rZW5CYXJyaWVyRXJyb3IKKyAgICAgICAgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgd2l0aCBzZWxmLl9jb25kOgorICAgICAgICAgICAgc2VsZi5fYnJlYWsoKQorCisgICAgZGVmIF9icmVhayhzZWxmKToKKyAgICAgICAgIyBBbiBpbnRlcm5hbCBlcnJvciB3YXMgZGV0ZWN0ZWQuICBUaGUgYmFycmllciBpcyBzZXQgdG8KKyAgICAgICAgIyBhIGJyb2tlbiBzdGF0ZSBhbGwgcGFydGllcyBhd2FrZW5lZC4KKyAgICAgICAgc2VsZi5fc3RhdGUgPSAtMgorICAgICAgICBzZWxmLl9jb25kLm5vdGlmeV9hbGwoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcnRpZXMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aHJlYWRzIHJlcXVpcmVkIHRvIHRyaXAgdGhlIGJhcnJpZXIuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcGFydGllcworCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5fd2FpdGluZyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHRocmVhZHMgdGhhdCBhcmUgY3VycmVudGx5IHdhaXRpbmcgYXQgdGhlIGJhcnJpZXIuCisgICAgICAgICIiIgorICAgICAgICAjIFdlIGRvbid0IG5lZWQgc3luY2hyb25pemF0aW9uIGhlcmUgc2luY2UgdGhpcyBpcyBhbiBlcGhlbWVyYWwgcmVzdWx0CisgICAgICAgICMgYW55d2F5LiAgSXQgcmV0dXJucyB0aGUgY29ycmVjdCB2YWx1ZSBpbiB0aGUgc3RlYWR5IHN0YXRlLgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvdW50CisgICAgICAgIHJldHVybiAwCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJva2VuKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgdGhlIGJhcnJpZXIgaXMgaW4gYSBicm9rZW4gc3RhdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSAtMgorCisjZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgQmFycmllciBjbGFzcworY2xhc3MgQnJva2VuQmFycmllckVycm9yKFJ1bnRpbWVFcnJvcik6IHBhc3MKKworCiAjIEhlbHBlciB0byBnZW5lcmF0ZSBuZXcgdGhyZWFkIG5hbWVzCiBfY291bnRlciA9IDAKIGRlZiBfbmV3bmFtZSh0ZW1wbGF0ZT0iVGhyZWFkLSVkIik6CkBAIC04ODEsOTEgKzEwODQsMyBAQAogICAgICAgICBfYWN0aXZlLmNsZWFyKCkKICAgICAgICAgX2FjdGl2ZS51cGRhdGUobmV3X2FjdGl2ZSkKICAgICAgICAgYXNzZXJ0IGxlbihfYWN0aXZlKSA9PSAxCi0KLQotIyBTZWxmLXRlc3QgY29kZQotCi1kZWYgX3Rlc3QoKToKLQotICAgIGNsYXNzIEJvdW5kZWRRdWV1ZShfVmVyYm9zZSk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbWl0KToKLSAgICAgICAgICAgIF9WZXJib3NlLl9faW5pdF9fKHNlbGYpCi0gICAgICAgICAgICBzZWxmLm1vbiA9IFJMb2NrKCkKLSAgICAgICAgICAgIHNlbGYucmMgPSBDb25kaXRpb24oc2VsZi5tb24pCi0gICAgICAgICAgICBzZWxmLndjID0gQ29uZGl0aW9uKHNlbGYubW9uKQotICAgICAgICAgICAgc2VsZi5saW1pdCA9IGxpbWl0Ci0gICAgICAgICAgICBzZWxmLnF1ZXVlID0gZGVxdWUoKQotCi0gICAgICAgIGRlZiBwdXQoc2VsZiwgaXRlbSk6Ci0gICAgICAgICAgICBzZWxmLm1vbi5hY3F1aXJlKCkKLSAgICAgICAgICAgIHdoaWxlIGxlbihzZWxmLnF1ZXVlKSA+PSBzZWxmLmxpbWl0OgotICAgICAgICAgICAgICAgIHNlbGYuX25vdGUoInB1dCglcyk6IHF1ZXVlIGZ1bGwiLCBpdGVtKQotICAgICAgICAgICAgICAgIHNlbGYud2Mud2FpdCgpCi0gICAgICAgICAgICBzZWxmLnF1ZXVlLmFwcGVuZChpdGVtKQotICAgICAgICAgICAgc2VsZi5fbm90ZSgicHV0KCVzKTogYXBwZW5kZWQsIGxlbmd0aCBub3cgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCBsZW4oc2VsZi5xdWV1ZSkpCi0gICAgICAgICAgICBzZWxmLnJjLm5vdGlmeSgpCi0gICAgICAgICAgICBzZWxmLm1vbi5yZWxlYXNlKCkKLQotICAgICAgICBkZWYgZ2V0KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5tb24uYWNxdWlyZSgpCi0gICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5xdWV1ZToKLSAgICAgICAgICAgICAgICBzZWxmLl9ub3RlKCJnZXQoKTogcXVldWUgZW1wdHkiKQotICAgICAgICAgICAgICAgIHNlbGYucmMud2FpdCgpCi0gICAgICAgICAgICBpdGVtID0gc2VsZi5xdWV1ZS5wb3BsZWZ0KCkKLSAgICAgICAgICAgIHNlbGYuX25vdGUoImdldCgpOiBnb3QgJXMsICVkIGxlZnQiLCBpdGVtLCBsZW4oc2VsZi5xdWV1ZSkpCi0gICAgICAgICAgICBzZWxmLndjLm5vdGlmeSgpCi0gICAgICAgICAgICBzZWxmLm1vbi5yZWxlYXNlKCkKLSAgICAgICAgICAgIHJldHVybiBpdGVtCi0KLSAgICBjbGFzcyBQcm9kdWNlclRocmVhZChUaHJlYWQpOgotCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwgcXVvdGEpOgotICAgICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9IlByb2R1Y2VyIikKLSAgICAgICAgICAgIHNlbGYucXVldWUgPSBxdWV1ZQotICAgICAgICAgICAgc2VsZi5xdW90YSA9IHF1b3RhCi0KLSAgICAgICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgICAgIGZyb20gcmFuZG9tIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgIGNvdW50ZXIgPSAwCi0gICAgICAgICAgICB3aGlsZSBjb3VudGVyIDwgc2VsZi5xdW90YToKLSAgICAgICAgICAgICAgICBjb3VudGVyID0gY291bnRlciArIDEKLSAgICAgICAgICAgICAgICBzZWxmLnF1ZXVlLnB1dCgiJXMuJWQiICUgKHNlbGYubmFtZSwgY291bnRlcikpCi0gICAgICAgICAgICAgICAgX3NsZWVwKHJhbmRvbSgpICogMC4wMDAwMSkKLQotCi0gICAgY2xhc3MgQ29uc3VtZXJUaHJlYWQoVGhyZWFkKToKLQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcXVldWUsIGNvdW50KToKLSAgICAgICAgICAgIFRocmVhZC5fX2luaXRfXyhzZWxmLCBuYW1lPSJDb25zdW1lciIpCi0gICAgICAgICAgICBzZWxmLnF1ZXVlID0gcXVldWUKLSAgICAgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAotCi0gICAgICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgICAgICB3aGlsZSBzZWxmLmNvdW50ID4gMDoKLSAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5xdWV1ZS5nZXQoKQotICAgICAgICAgICAgICAgIHByaW50KGl0ZW0pCi0gICAgICAgICAgICAgICAgc2VsZi5jb3VudCA9IHNlbGYuY291bnQgLSAxCi0KLSAgICBOUCA9IDMKLSAgICBRTCA9IDQKLSAgICBOSSA9IDUKLQotICAgIFEgPSBCb3VuZGVkUXVldWUoUUwpCi0gICAgUCA9IFtdCi0gICAgZm9yIGkgaW4gcmFuZ2UoTlApOgotICAgICAgICB0ID0gUHJvZHVjZXJUaHJlYWQoUSwgTkkpCi0gICAgICAgIHQubmFtZSA9ICJQcm9kdWNlci0lZCIgJSAoaSsxKQotICAgICAgICBQLmFwcGVuZCh0KQotICAgIEMgPSBDb25zdW1lclRocmVhZChRLCBOSSpOUCkKLSAgICBmb3IgdCBpbiBQOgotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgX3NsZWVwKDAuMDAwMDAxKQotICAgIEMuc3RhcnQoKQotICAgIGZvciB0IGluIFA6Ci0gICAgICAgIHQuam9pbigpCi0gICAgQy5qb2luKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBfdGVzdCgpCmRpZmYgLS1naXQgYS9MaWIvdGltZWl0LnB5IGIvTGliL3RpbWVpdC5weQppbmRleCBjM2Y2NzUzLi44ZTA0NjQ1IDEwMDY0NAotLS0gYS9MaWIvdGltZWl0LnB5CisrKyBiL0xpYi90aW1laXQucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJUb29sIGZvciBtZWFzdXJpbmcgZXhlY3V0aW9uIHRpbWUgb2Ygc21hbGwgY29kZSBzbmlwcGV0cy4KIApAQCAtMjMyLDEwICsyMzIsMTAgQEAKICAgICAiIiJDb252ZW5pZW5jZSBmdW5jdGlvbiB0byBjcmVhdGUgVGltZXIgb2JqZWN0IGFuZCBjYWxsIHJlcGVhdCBtZXRob2QuIiIiCiAgICAgcmV0dXJuIFRpbWVyKHN0bXQsIHNldHVwLCB0aW1lcikucmVwZWF0KHJlcGVhdCwgbnVtYmVyKQogCi1kZWYgbWFpbihhcmdzPU5vbmUpOgorZGVmIG1haW4oYXJncz1Ob25lLCAqLCBfd3JhcF90aW1lcj1Ob25lKToKICAgICAiIiJNYWluIHByb2dyYW0sIHVzZWQgd2hlbiBydW4gYXMgYSBzY3JpcHQuCiAKLSAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBjb21tYW5kIGxpbmUgdG8gYmUgcGFyc2VkLAorICAgIFRoZSBvcHRpb25hbCAnYXJncycgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBjb21tYW5kIGxpbmUgdG8gYmUgcGFyc2VkLAogICAgIGRlZmF1bHRpbmcgdG8gc3lzLmFyZ3ZbMTpdLgogCiAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBleGl0IGNvZGUgdG8gYmUgcGFzc2VkIHRvIHN5cy5leGl0KCk7IGl0CkBAIC0yNDQsNiArMjQ0LDEwIEBACiAgICAgV2hlbiBhbiBleGNlcHRpb24gaGFwcGVucyBkdXJpbmcgdGltaW5nLCBhIHRyYWNlYmFjayBpcyBwcmludGVkIHRvCiAgICAgc3RkZXJyIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGlzIDEuICBFeGNlcHRpb25zIGF0IG90aGVyIHRpbWVzCiAgICAgKGluY2x1ZGluZyB0aGUgdGVtcGxhdGUgY29tcGlsYXRpb24pIGFyZSBub3QgY2F1Z2h0LgorCisgICAgJ193cmFwX3RpbWVyJyBpcyBhbiBpbnRlcm5hbCBpbnRlcmZhY2UgdXNlZCBmb3IgdW5pdCB0ZXN0aW5nLiAgSWYgaXQKKyAgICBpcyBub3QgTm9uZSwgaXQgbXVzdCBiZSBhIGNhbGxhYmxlIHRoYXQgYWNjZXB0cyBhIHRpbWVyIGZ1bmN0aW9uCisgICAgYW5kIHJldHVybnMgYW5vdGhlciB0aW1lciBmdW5jdGlvbiAodXNlZCBmb3IgdW5pdCB0ZXN0aW5nKS4KICAgICAiIiIKICAgICBpZiBhcmdzIGlzIE5vbmU6CiAgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KQEAgLTI4OSw2ICsyOTMsOCBAQAogICAgICMgZGlyZWN0b3J5KQogICAgIGltcG9ydCBvcwogICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCisgICAgaWYgX3dyYXBfdGltZXIgaXMgbm90IE5vbmU6CisgICAgICAgIHRpbWVyID0gX3dyYXBfdGltZXIodGltZXIpCiAgICAgdCA9IFRpbWVyKHN0bXQsIHNldHVwLCB0aW1lcikKICAgICBpZiBudW1iZXIgPT0gMDoKICAgICAgICAgIyBkZXRlcm1pbmUgbnVtYmVyIHNvIHRoYXQgMC4yIDw9IHRvdGFsIHRpbWUgPCAyLjAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19faW5pdF9fLnB5IGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKaW5kZXggMGJjY2JmYy4uZTU0YzUzZiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvX19pbml0X18ucHkKKysrIGIvTGliL3RraW50ZXIvX19pbml0X18ucHkKQEAgLTE0MDMsNiArMTQwMyw0OCBAQAogICAgICAgICAgICAgc2VsZi53aWRnZXQuX3JlcG9ydF9leGNlcHRpb24oKQogCiAKK2NsYXNzIFhWaWV3OgorICAgICIiIk1peC1pbiBjbGFzcyBmb3IgcXVlcnlpbmcgYW5kIGNoYW5naW5nIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uCisgICAgb2YgYSB3aWRnZXQncyB3aW5kb3cuIiIiCisKKyAgICBkZWYgeHZpZXcoc2VsZiwgKmFyZ3MpOgorICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgorICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgKmFyZ3MpCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMocmVzKQorCisgICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6CisgICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQorICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCisKKyAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6CisgICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiCisgICAgICAgIG9yICJwYWdlcyIgKFdIQVQpLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKKworCitjbGFzcyBZVmlldzoKKyAgICAiIiJNaXgtaW4gY2xhc3MgZm9yIHF1ZXJ5aW5nIGFuZCBjaGFuZ2luZyB0aGUgdmVydGljYWwgcG9zaXRpb24KKyAgICBvZiBhIHdpZGdldCdzIHdpbmRvdy4iIiIKKworICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgdGhlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgorICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgKmFyZ3MpCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMocmVzKQorCisgICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6CisgICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQorICAgICAgICB0b3RhbCBoZWlnaHQgb2YgdGhlIGNhbnZhcyBpcyBvZmYtc2NyZWVuIHRvIHRoZSB0b3AuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCisKKyAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6CisgICAgICAgICIiIlNoaWZ0IHRoZSB5LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbgorICAgICAgICAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgorICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKKworCiBjbGFzcyBXbToKICAgICAiIiJQcm92aWRlcyBmdW5jdGlvbnMgZm9yIHRoZSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHdpbmRvdyBtYW5hZ2VyLiIiIgogCkBAIC0yMDQxLDcgKzIwODMsNyBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiAnQCVyLCVyJyAlICh4LCB5KQogCi1jbGFzcyBDYW52YXMoV2lkZ2V0KToKK2NsYXNzIENhbnZhcyhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiQ2FudmFzIHdpZGdldCB0byBkaXNwbGF5IGdyYXBoaWNhbCBlbGVtZW50cyBsaWtlIGxpbmVzIG9yIHRleHQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBjYW52YXMgd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBNQVNURVIuCkBAIC0yMjgxLDMwICsyMzIzLDYgQEAKICAgICBkZWYgdHlwZShzZWxmLCB0YWdPcklkKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBpdGVtIFRBR09SSUQuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3R5cGUnLCB0YWdPcklkKSBvciBOb25lCi0gICAgZGVmIHh2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3QgYXJnczoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneHZpZXcnKSArIGFyZ3MpCi0gICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHh2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeC12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCi0gICAgZGVmIHl2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3l2aWV3JykgKyBhcmdzKQotICAgIGRlZiB5dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3RzIHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgaGVpZ2h0IG9mIHRoZSBjYW52YXMgaXMgb2ZmLXNjcmVlbiB0byB0aGUgdG9wLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB5dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHktdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQogCiBjbGFzcyBDaGVja2J1dHRvbihXaWRnZXQpOgogICAgICIiIkNoZWNrYnV0dG9uIHdpZGdldCB3aGljaCBpcyBlaXRoZXIgaW4gb24tIG9yIG9mZi1zdGF0ZS4iIiIKQEAgLTIzMzUsNyArMjM1Myw3IEBACiAgICAgICAgICIiIlRvZ2dsZSB0aGUgYnV0dG9uLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3RvZ2dsZScpCiAKLWNsYXNzIEVudHJ5KFdpZGdldCk6CitjbGFzcyBFbnRyeShXaWRnZXQsIFhWaWV3KToKICAgICAiIiJFbnRyeSB3aWRnZXQgd2hpY2ggYWxsb3dzIHRvIGRpc3BsYXkgc2ltcGxlIHRleHQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYW4gZW50cnkgd2lkZ2V0IHdpdGggdGhlIHBhcmVudCBNQVNURVIuCkBAIC0yMzg2LDcgKzI0MDQsOCBAQAogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdmcm9tJywgaW5kZXgpCiAgICAgc2VsZWN0X2Zyb20gPSBzZWxlY3Rpb25fZnJvbQogICAgIGRlZiBzZWxlY3Rpb25fcHJlc2VudChzZWxmKToKLSAgICAgICAgIiIiUmV0dXJuIHdoZXRoZXIgdGhlIHdpZGdldCBoYXMgdGhlIHNlbGVjdGlvbi4iIiIKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlcmUgYXJlIGNoYXJhY3RlcnMgc2VsZWN0ZWQgaW4gdGhlIGVudHJ5LCBGYWxzZQorICAgICAgICBvdGhlcndpc2UuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGJvb2xlYW4oCiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdwcmVzZW50JykpCiAgICAgc2VsZWN0X3ByZXNlbnQgPSBzZWxlY3Rpb25fcHJlc2VudApAQCAtMjM5OCwxNiArMjQxNyw2IEBACiAgICAgICAgICIiIlNldCB0aGUgdmFyaWFibGUgZW5kIG9mIGEgc2VsZWN0aW9uIHRvIElOREVYLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICd0bycsIGluZGV4KQogICAgIHNlbGVjdF90byA9IHNlbGVjdGlvbl90bwotICAgIGRlZiB4dmlldyhzZWxmLCBpbmRleCk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsIGluZGV4KQotICAgIGRlZiB4dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3QgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgZW50cnkgaXMgb2ZmLXNjcmVlbiB0byB0aGUgbGVmdC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKIAogY2xhc3MgRnJhbWUoV2lkZ2V0KToKICAgICAiIiJGcmFtZSB3aWRnZXQgd2hpY2ggbWF5IGNvbnRhaW4gb3RoZXIgd2lkZ2V0cyBhbmQgY2FuIGhhdmUgYSAzRCBib3JkZXIuIiIiCkBAIC0yNDQ5LDcgKzI0NTgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgJ2xhYmVsJywgY25mLCBrdykKIAotY2xhc3MgTGlzdGJveChXaWRnZXQpOgorY2xhc3MgTGlzdGJveChXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiTGlzdGJveCB3aWRnZXQgd2hpY2ggY2FuIGRpc3BsYXkgYSBsaXN0IG9mIHN0cmluZ3MuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBsaXN0Ym94IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpAQCAtMjUyOCwzMCArMjUzNyw2IEBACiAgICAgZGVmIHNpemUoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBsaXN0Ym94LiIiIgogICAgICAgICByZXR1cm4gZ2V0aW50KHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2l6ZScpKQotICAgIGRlZiB4dmlldyhzZWxmLCAqd2hhdCk6Ci0gICAgICAgICIiIlF1ZXJ5IGFuZCBjaGFuZ2UgaG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IHdoYXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3h2aWV3JykgKyB3aGF0KQotICAgIGRlZiB4dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3QgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgZW50cnkgaXMgb2ZmLXNjcmVlbiB0byB0aGUgbGVmdC4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeHZpZXdfc2Nyb2xsKHNlbGYsIG51bWJlciwgd2hhdCk6Ci0gICAgICAgICIiIlNoaWZ0IHRoZSB4LXZpZXcgYWNjb3JkaW5nIHRvIE5VTUJFUiB3aGljaCBpcyBtZWFzdXJlZCBpbiAidW5pdHMiIG9yICJwYWdlcyIgKFdIQVQpLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgJ3Njcm9sbCcsIG51bWJlciwgd2hhdCkKLSAgICBkZWYgeXZpZXcoc2VsZiwgKndoYXQpOgotICAgICAgICAiIiJRdWVyeSBhbmQgY2hhbmdlIHZlcnRpY2FsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3Qgd2hhdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneXZpZXcnKSArIHdoYXQpCi0gICAgZGVmIHl2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdCB0aGUgdmlldyBpbiB0aGUgd2luZG93IHNvIHRoYXQgRlJBQ1RJT04gb2YgdGhlCi0gICAgICAgIHRvdGFsIHdpZHRoIG9mIHRoZSBlbnRyeSBpcyBvZmYtc2NyZWVuIHRvIHRoZSB0b3AuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHl2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeS12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd5dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCiAgICAgZGVmIGl0ZW1jZ2V0KHNlbGYsIGluZGV4LCBvcHRpb24pOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHJlc291cmNlIHZhbHVlIGZvciBhbiBJVEVNIGFuZCBhbiBPUFRJT04uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoCkBAIC0yNzk4LDcgKzI3ODMsNyBAQAogCiAKIAotY2xhc3MgVGV4dChXaWRnZXQpOgorY2xhc3MgVGV4dChXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiVGV4dCB3aWRnZXQgd2hpY2ggY2FuIGRpc3BsYXkgdGV4dCBpbiB2YXJpb3VzIGZvcm1zLiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgdGV4dCB3aWRnZXQgd2l0aCB0aGUgcGFyZW50IE1BU1RFUi4KQEAgLTMxMjAsMzIgKzMxMDUsNiBAQAogICAgICAgICAiIiJSZXR1cm4gYWxsIG5hbWVzIG9mIGVtYmVkZGVkIHdpbmRvd3MgaW4gdGhpcyB3aWRnZXQuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdCgKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnd2luZG93JywgJ25hbWVzJykpCi0gICAgZGVmIHh2aWV3KHNlbGYsICp3aGF0KToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSB2aWV3LiIiIgotICAgICAgICBpZiBub3Qgd2hhdDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnKSkKLSAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneHZpZXcnKSArIHdoYXQpCi0gICAgZGVmIHh2aWV3X21vdmV0byhzZWxmLCBmcmFjdGlvbik6Ci0gICAgICAgICIiIkFkanVzdHMgdGhlIHZpZXcgaW4gdGhlIHdpbmRvdyBzbyB0aGF0IEZSQUNUSU9OIG9mIHRoZQotICAgICAgICB0b3RhbCB3aWR0aCBvZiB0aGUgY2FudmFzIGlzIG9mZi1zY3JlZW4gdG8gdGhlIGxlZnQuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHh2aWV3X3Njcm9sbChzZWxmLCBudW1iZXIsIHdoYXQpOgotICAgICAgICAiIiJTaGlmdCB0aGUgeC12aWV3IGFjY29yZGluZyB0byBOVU1CRVIgd2hpY2ggaXMgbWVhc3VyZWQKLSAgICAgICAgaW4gInVuaXRzIiBvciAicGFnZXMiIChXSEFUKS4iIiIKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICd4dmlldycsICdzY3JvbGwnLCBudW1iZXIsIHdoYXQpCi0gICAgZGVmIHl2aWV3KHNlbGYsICp3aGF0KToKLSAgICAgICAgIiIiUXVlcnkgYW5kIGNoYW5nZSB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgdmlldy4iIiIKLSAgICAgICAgaWYgbm90IHdoYXQ6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0ZG91YmxlcyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JykpCi0gICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ3l2aWV3JykgKyB3aGF0KQotICAgIGRlZiB5dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICAiIiJBZGp1c3RzIHRoZSB2aWV3IGluIHRoZSB3aW5kb3cgc28gdGhhdCBGUkFDVElPTiBvZiB0aGUKLSAgICAgICAgdG90YWwgaGVpZ2h0IG9mIHRoZSBjYW52YXMgaXMgb2ZmLXNjcmVlbiB0byB0aGUgdG9wLiIiIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgJ21vdmV0bycsIGZyYWN0aW9uKQotICAgIGRlZiB5dmlld19zY3JvbGwoc2VsZiwgbnVtYmVyLCB3aGF0KToKLSAgICAgICAgIiIiU2hpZnQgdGhlIHktdmlldyBhY2NvcmRpbmcgdG8gTlVNQkVSIHdoaWNoIGlzIG1lYXN1cmVkCi0gICAgICAgIGluICJ1bml0cyIgb3IgInBhZ2VzIiAoV0hBVCkuIiIiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAnc2Nyb2xsJywgbnVtYmVyLCB3aGF0KQogICAgIGRlZiB5dmlld19waWNrcGxhY2Uoc2VsZiwgKndoYXQpOgogICAgICAgICAiIiJPYnNvbGV0ZSBmdW5jdGlvbiwgdXNlIHNlZS4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAneXZpZXcnLCAnLXBpY2twbGFjZScpICsgd2hhdCkKQEAgLTMzMzEsNyArMzI5MCw3IEBACiBkZWYgaW1hZ2VfdHlwZXMoKTogcmV0dXJuIF9kZWZhdWx0X3Jvb3QudGsuY2FsbCgnaW1hZ2UnLCAndHlwZXMnKQogCiAKLWNsYXNzIFNwaW5ib3goV2lkZ2V0KToKK2NsYXNzIFNwaW5ib3goV2lkZ2V0LCBYVmlldyk6CiAgICAgIiIic3BpbmJveCB3aWRnZXQuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCBjbmY9e30sICoqa3cpOgogICAgICAgICAiIiJDb25zdHJ1Y3QgYSBzcGluYm94IHdpZGdldCB3aXRoIHRoZSBwYXJlbnQgTUFTVEVSLgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvX19tYWluX18ucHkgYi9MaWIvdGtpbnRlci9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTc4ODBkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3RraW50ZXIvX19tYWluX18ucHkKQEAgLTAsMCArMSw3IEBACisiIiJNYWluIGVudHJ5IHBvaW50IiIiCisKK2ltcG9ydCBzeXMKK2lmIHN5cy5hcmd2WzBdLmVuZHN3aXRoKCJfX21haW5fXy5weSIpOgorICAgIHN5cy5hcmd2WzBdID0gInB5dGhvbiAtbSB0a2ludGVyIgorZnJvbSAuIGltcG9ydCBfdGVzdCBhcyBtYWluCittYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL2ZvbnQucHkgYi9MaWIvdGtpbnRlci9mb250LnB5CmluZGV4IDFlYzc2MGUuLjU0MjViMDYgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL2ZvbnQucHkKKysrIGIvTGliL3RraW50ZXIvZm9udC5weQpAQCAtOTcsNyArOTcsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5uYW1lCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZCBpc2luc3RhbmNlKG90aGVyLCBGb250KQorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgRm9udCkgYW5kIHNlbGYubmFtZSA9PSBvdGhlci5uYW1lCiAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgcmV0dXJuIHNlbGYuY2dldChrZXkpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9zY3JvbGxlZHRleHQucHkgYi9MaWIvdGtpbnRlci9zY3JvbGxlZHRleHQucHkKaW5kZXggZDlhZjY3Yy4uOWFhOTM2YSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvc2Nyb2xsZWR0ZXh0LnB5CisrKyBiL0xpYi90a2ludGVyL3Njcm9sbGVkdGV4dC5weQpAQCAtMjcsOCArMjcsMTEgQEAKICAgICAgICAgc2VsZi5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9VHJ1ZSkKICAgICAgICAgc2VsZi52YmFyWydjb21tYW5kJ10gPSBzZWxmLnl2aWV3CiAKLSAgICAgICAgIyBDb3B5IGdlb21ldHJ5IG1ldGhvZHMgb2Ygc2VsZi5mcmFtZSAtLSBoYWNrIQotICAgICAgICBtZXRob2RzID0gdmFycyhQYWNrKS5rZXlzKCkgKyB2YXJzKEdyaWQpLmtleXMoKSArIHZhcnMoUGxhY2UpLmtleXMoKQorICAgICAgICAjIENvcHkgZ2VvbWV0cnkgbWV0aG9kcyBvZiBzZWxmLmZyYW1lIHdpdGhvdXQgb3ZlcnJpZGluZyBUZXh0CisgICAgICAgICMgbWV0aG9kcyAtLSBoYWNrIQorICAgICAgICB0ZXh0X21ldGhzID0gdmFycyhUZXh0KS5rZXlzKCkKKyAgICAgICAgbWV0aG9kcyA9IHZhcnMoUGFjaykua2V5cygpIHwgdmFycyhHcmlkKS5rZXlzKCkgfCB2YXJzKFBsYWNlKS5rZXlzKCkKKyAgICAgICAgbWV0aG9kcyA9IG1ldGhvZHMuZGlmZmVyZW5jZSh0ZXh0X21ldGhzKQogCiAgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CiAgICAgICAgICAgICBpZiBtWzBdICE9ICdfJyBhbmQgbSAhPSAnY29uZmlnJyBhbmQgbSAhPSAnY29uZmlndXJlJzoKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmQ2MzBiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9mb250LnB5CkBAIC0wLDAgKzEsMzMgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRraW50ZXIKK2Zyb20gdGtpbnRlciBpbXBvcnQgZm9udAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKK2ltcG9ydCB0a2ludGVyLnRlc3Quc3VwcG9ydCBhcyBzdXBwb3J0CisKK3JlcXVpcmVzKCdndWknKQorCitjbGFzcyBGb250VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQorCisgICAgZGVmIHRlc3RfZm9udF9lcShzZWxmKToKKyAgICAgICAgZm9udG5hbWUgPSAiVGtEZWZhdWx0Rm9udCIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZiA9IGZvbnQuRm9udChuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKKyAgICAgICAgZXhjZXB0IHRraW50ZXIuX3RraW50ZXIuVGNsRXJyb3I6CisgICAgICAgICAgICBmID0gZm9udC5Gb250KG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1GYWxzZSkKKyAgICAgICAgZm9udDEgPSBmb250Lm5hbWV0b2ZvbnQoZm9udG5hbWUpCisgICAgICAgIGZvbnQyID0gZm9udC5uYW1ldG9mb250KGZvbnRuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZvbnQxLCBmb250MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb250MSwgZm9udDIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZm9udDEsIGZvbnQxLmNvcHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb250MSwgMCkKKwordGVzdHNfZ3VpID0gKEZvbnRUZXN0LCApCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0c19ndWkpCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2xvYWR0ay5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5CmluZGV4IDhmMWEwODUuLmJhYjdiY2QgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLnB5CkBAIC0zMSw3ICszMSw4IEBACiAgICAgICAgICAgICAgICAgIyBkb2Vzbid0IGFjdHVhbGx5IGNhcnJ5IHRocm91Z2ggdG8gdGhlIHByb2Nlc3MgbGV2ZWwKICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhleSBkb24ndCBzdXBwb3J0IHVuc2V0ZW52CiAgICAgICAgICAgICAgICAgIyBJZiB0aGF0J3MgdGhlIGNhc2UsIGFib3J0LgotICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBvcy5wb3BlbignZWNobyAkRElTUExBWScpLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgd2l0aCBvcy5wb3BlbignZWNobyAkRElTUExBWScpIGFzIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBwaXBlLnJlYWQoKS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgaWYgZGlzcGxheToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKaW5kZXggMzU4MjRlYS4uY2QwMGE2MSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0a2ludGVyCitpbXBvcnQgb3MKIGZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIHJ1bl91bml0dGVzdAogCkBAIC05MjUsNyArOTI2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi50di5oZWFkaW5nLCAnIzAnLAogICAgICAgICAgICAgYW5jaG9yPTEpCiAKLQorICAgICMgWFhYIHNraXBwaW5nIGZvciBub3c7IHNob3VsZCBiZSBmaXhlZCB0byB3b3JrIHdpdGggbmV3ZXIgdHRrCisgICAgQHVuaXR0ZXN0LnNraXAKICAgICBkZWYgdGVzdF9oZWFkaW5nX2NhbGxiYWNrKHNlbGYpOgogICAgICAgICBkZWYgc2ltdWxhdGVfaGVhZGluZ19jbGljayh4LCB5KToKICAgICAgICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgeCwgeSkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3RpeC5weSBiL0xpYi90a2ludGVyL3RpeC5weQppbmRleCBiMTA1Mjc4Li5iZTQ0YTA5IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90aXgucHkKKysrIGIvTGliL3RraW50ZXIvdGl4LnB5CkBAIC00Niw2ICs0NiwyMSBAQAogQVVUTyA9ICdhdXRvJwogQUNST1NTVE9QID0gJ2Fjcm9zc3RvcCcKIAorIyBBIGZldyB1c2VmdWwgY29uc3RhbnRzIGZvciB0aGUgR3JpZCB3aWRnZXQKK0FTQ0lJID0gJ2FzY2lpJworQ0VMTCA9ICdjZWxsJworQ09MVU1OID0gJ2NvbHVtbicKK0RFQ1JFQVNJTkcgPSAnZGVjcmVhc2luZycKK0lOQ1JFQVNJTkcgPSAnaW5jcmVhc2luZycKK0lOVEVHRVIgPSAnaW50ZWdlcicKK01BSU4gPSAnbWFpbicKK01BWCA9ICdtYXgnCitSRUFMID0gJ3JlYWwnCitST1cgPSAncm93JworU19SRUdJT04gPSAncy1yZWdpb24nCitYX1JFR0lPTiA9ICd4LXJlZ2lvbicKK1lfUkVHSU9OID0gJ3ktcmVnaW9uJworCiAjIFNvbWUgY29uc3RhbnRzIHVzZWQgYnkgVGtpbnRlciBkb29uZWV2ZW50KCkKIFRDTF9ET05UX1dBSVQgICAgID0gMSA8PCAxCiBUQ0xfV0lORE9XX0VWRU5UUyA9IDEgPDwgMgpAQCAtODUwLDcgKzg2NSw3IEBACiAgICAgICAgICMgRklYTUU6IHJldHVybiBweXRob24gb2JqZWN0CiAgICAgICAgIHBhc3MKIAotY2xhc3MgSExpc3QoVGl4V2lkZ2V0KToKK2NsYXNzIEhMaXN0KFRpeFdpZGdldCwgWFZpZXcsIFlWaWV3KToKICAgICAiIiJITGlzdCAtIEhpZXJhcmNoeSBkaXNwbGF5ICB3aWRnZXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBhbnkgZGF0YQogICAgIHRoYXQgaGF2ZSBhIGhpZXJhcmNoaWNhbCBzdHJ1Y3R1cmUsIGZvciBleGFtcGxlLCBmaWxlIHN5c3RlbSBkaXJlY3RvcnkKICAgICB0cmVlcy4gVGhlIGxpc3QgZW50cmllcyBhcmUgaW5kZW50ZWQgYW5kIGNvbm5lY3RlZCBieSBicmFuY2ggbGluZXMKQEAgLTk2MSw2ICs5NzYsMTAgQEAKICAgICBkZWYgaW5mb19hbmNob3Ioc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnYW5jaG9yJykKIAorICAgIGRlZiBpbmZvX2Jib3goc2VsZiwgZW50cnkpOgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cygKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnYmJveCcsIGVudHJ5KSkgb3IgTm9uZQorCiAgICAgZGVmIGluZm9fY2hpbGRyZW4oc2VsZiwgZW50cnk9Tm9uZSk6CiAgICAgICAgIGMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnY2hpbGRyZW4nLCBlbnRyeSkKICAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KGMpCkBAIC05NjgsNiArOTg3LDEyIEBACiAgICAgZGVmIGluZm9fZGF0YShzZWxmLCBlbnRyeSk6CiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnZGF0YScsIGVudHJ5KQogCisgICAgZGVmIGluZm9fZHJhZ3NpdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnZHJhZ3NpdGUnKQorCisgICAgZGVmIGluZm9fZHJvcHNpdGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2luZm8nLCAnZHJvcHNpdGUnKQorCiAgICAgZGVmIGluZm9fZXhpc3RzKHNlbGYsIGVudHJ5KToKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW5mbycsICdleGlzdHMnLCBlbnRyeSkKIApAQCAtMTAzNywxMiArMTA2Miw2IEBACiAgICAgZGVmIHNob3dfZW50cnkoc2VsZiwgZW50cnkpOgogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICdzaG93JywgJ2VudHJ5JywgZW50cnkpCiAKLSAgICBkZWYgeHZpZXcoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3h2aWV3JywgKmFyZ3MpCi0KLSAgICBkZWYgeXZpZXcoc2VsZiwgKmFyZ3MpOgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3l2aWV3JywgKmFyZ3MpCi0KIGNsYXNzIElucHV0T25seShUaXhXaWRnZXQpOgogICAgICIiIklucHV0T25seSAtIEludmlzaWJsZSB3aWRnZXQuIFVuaXggb25seS4KIApAQCAtMTI0MSwxMSArMTI2MCw4IEBACiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAncGFuZWNvbmZpZ3VyZScsIGVudHJ5LCAqc2VsZi5fb3B0aW9ucyhjbmYsIGt3KSkKIAogICAgIGRlZiBwYW5lcyhzZWxmKToKLSAgICAgICAgbmFtZXMgPSBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3BhbmVzJykKLSAgICAgICAgcmV0ID0gW10KLSAgICAgICAgZm9yIHggaW4gbmFtZXM6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKHNlbGYuc3Vid2lkZ2V0KHgpKQotICAgICAgICByZXR1cm4gcmV0CisgICAgICAgIG5hbWVzID0gc2VsZi50ay5zcGxpdGxpc3Qoc2VsZi50ay5jYWxsKHNlbGYuX3csICdwYW5lcycpKQorICAgICAgICByZXR1cm4gW3NlbGYuc3Vid2lkZ2V0KHgpIGZvciB4IGluIG5hbWVzXQogCiBjbGFzcyBQb3B1cE1lbnUoVGl4V2lkZ2V0KToKICAgICAiIiJQb3B1cE1lbnUgd2lkZ2V0IGNhbiBiZSB1c2VkIGFzIGEgcmVwbGFjZW1lbnQgb2YgdGhlIHRrX3BvcHVwIGNvbW1hbmQuCkBAIC0xNDE5LDcgKzE0MzUsNyBAQAogICAgICAgICBpZiBuYW1lIGluIHNlbGYuc3Vid2lkZ2V0X2xpc3Q6CiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2ludm9rZScsIG5hbWUpCiAKLWNsYXNzIFRMaXN0KFRpeFdpZGdldCk6CitjbGFzcyBUTGlzdChUaXhXaWRnZXQsIFhWaWV3LCBZVmlldyk6CiAgICAgIiIiVExpc3QgLSBIaWVyYXJjaHkgZGlzcGxheSB3aWRnZXQgd2hpY2ggY2FuIGJlCiAgICAgdXNlZCB0byBkaXNwbGF5IGRhdGEgaW4gYSB0YWJ1bGFyIGZvcm1hdC4gVGhlIGxpc3QgZW50cmllcyBvZiBhIFRMaXN0CiAgICAgd2lkZ2V0IGFyZSBzaW1pbGFyIHRvIHRoZSBlbnRyaWVzIGluIHRoZSBUayBsaXN0Ym94IHdpZGdldC4gVGhlIG1haW4KQEAgLTE1MDIsMTIgKzE1MTgsNiBAQAogICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGZpcnN0LCBsYXN0PU5vbmUpOgogICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ3NlbGVjdGlvbicsICdzZXQnLCBmaXJzdCwgbGFzdCkKIAotICAgIGRlZiB4dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneHZpZXcnLCAqYXJncykKLQotICAgIGRlZiB5dmlldyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAneXZpZXcnLCAqYXJncykKLQogY2xhc3MgVHJlZShUaXhXaWRnZXQpOgogICAgICIiIlRyZWUgLSBUaGUgdGl4VHJlZSB3aWRnZXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBoaWVyYXJjaGljYWwKICAgICBkYXRhIGluIGEgdHJlZSBmb3JtLiBUaGUgdXNlciBjYW4gYWRqdXN0CkBAIC0xNTYzLDcgKzE1NzMsNyBAQAogICAgICMgRklYTUU6IEl0IHNob3VsZCBpbmhlcml0IC1zdXBlcmNsYXNzIHRpeFRyZWUKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyPU5vbmUsIGNuZj17fSwgKiprdyk6CiAgICAgICAgIFRpeFdpZGdldC5fX2luaXRfXyhzZWxmLCBtYXN0ZXIsICd0aXhDaGVja0xpc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWydvcHRpb25zJ10sIGNuZiwga3cpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ29wdGlvbnMnLCAncmFkaW8nXSwgY25mLCBrdykKICAgICAgICAgc2VsZi5zdWJ3aWRnZXRfbGlzdFsnaGxpc3QnXSA9IF9kdW1teUhMaXN0KHNlbGYsICdobGlzdCcpCiAgICAgICAgIHNlbGYuc3Vid2lkZ2V0X2xpc3RbJ3ZzYiddID0gX2R1bW15U2Nyb2xsYmFyKHNlbGYsICd2c2InKQogICAgICAgICBzZWxmLnN1YndpZGdldF9saXN0Wydoc2InXSA9IF9kdW1teVNjcm9sbGJhcihzZWxmLCAnaHNiJykKQEAgLTE3NzcsNyArMTc4Nyw3IEBACiAgICAgcGFzcwogCiAKLWNsYXNzIEdyaWQoVGl4V2lkZ2V0KToKK2NsYXNzIEdyaWQoVGl4V2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICcnJ1RoZSBUaXggR3JpZCBjb21tYW5kIGNyZWF0ZXMgYSBuZXcgd2luZG93ICBhbmQgbWFrZXMgaXQgaW50byBhCiAgICAgdGl4R3JpZCB3aWRnZXQuIEFkZGl0aW9uYWwgb3B0aW9ucywgbWF5IGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZAogICAgIGxpbmUgb3IgaW4gdGhlIG9wdGlvbiBkYXRhYmFzZSB0byBjb25maWd1cmUgYXNwZWN0cyBzdWNoIGFzIGl0cyBjdXJzb3IKQEAgLTE4MDEsMTYgKzE4MTEsMjEgQEAKICAgICAgICAgVGl4V2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgJ3RpeEdyaWQnLCBzdGF0aWMsIGNuZiwga3cpCiAKICAgICAjIHZhbGlkIG9wdGlvbnMgYXMgb2YgVGsgOC40Ci0gICAgIyBhbmNob3IsIGJkdHlwZSwgY2dldCwgY29uZmlndXJlLCBkZWxldGUsIGRyYWdzaXRlLCBkcm9wc2l0ZSwgZW50cnljZ2V0LCBlZGl0Ci0gICAgIyBlbnRyeWNvbmZpZ3VyZSwgZm9ybWF0LCBnZW9tZXRyeWluZm8sIGluZm8sIGluZGV4LCBtb3ZlLCBuZWFyZXN0LCBzZWxlY3Rpb24KLSAgICAjIHNldCwgc2l6ZSwgdW5zZXQsIHh2aWV3LCB5dmlldwotICAgICMgZGVmIGFuY2hvciBvcHRpb24gP2FyZ3MgLi4uPworICAgICMgYW5jaG9yLCBiZHR5cGUsIGNnZXQsIGNvbmZpZ3VyZSwgZGVsZXRlLCBkcmFnc2l0ZSwgZHJvcHNpdGUsIGVudHJ5Y2dldCwKKyAgICAjIGVkaXQsIGVudHJ5Y29uZmlndXJlLCBmb3JtYXQsIGdlb21ldHJ5aW5mbywgaW5mbywgaW5kZXgsIG1vdmUsIG5lYXJlc3QsCisgICAgIyBzZWxlY3Rpb24sIHNldCwgc2l6ZSwgdW5zZXQsIHh2aWV3LCB5dmlldworICAgIGRlZiBhbmNob3JfY2xlYXIoc2VsZik6CisgICAgICAgICIiIlJlbW92ZXMgdGhlIHNlbGVjdGlvbiBhbmNob3IuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnYW5jaG9yJywgJ2NsZWFyJykKKwogICAgIGRlZiBhbmNob3JfZ2V0KHNlbGYpOgogICAgICAgICAiR2V0IHRoZSAoeCx5KSBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50IGFuY2hvciBjZWxsIgogICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cyhzZWxmLnRrLmNhbGwoc2VsZiwgJ2FuY2hvcicsICdnZXQnKSkKIAotICAgICMgZGVmIGJkdHlwZQotICAgICMgZGVmIGRlbGV0ZSBkaW0gZnJvbSA/dG8/CisgICAgZGVmIGFuY2hvcl9zZXQoc2VsZiwgeCwgeSk6CisgICAgICAgICIiIlNldCB0aGUgc2VsZWN0aW9uIGFuY2hvciB0byB0aGUgY2VsbCBhdCAoeCwgeSkuIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnYW5jaG9yJywgJ3NldCcsIHgsIHkpCisKICAgICBkZWYgZGVsZXRlX3JvdyhzZWxmLCBmcm9tXywgdG89Tm9uZSk6CiAgICAgICAgICIiIkRlbGV0ZSByb3dzIGJldHdlZW4gZnJvbV8gYW5kIHRvIGluY2x1c2l2ZS4KICAgICAgICAgSWYgdG8gaXMgbm90IHByb3ZpZGVkLCAgZGVsZXRlIG9ubHkgcm93IGF0IGZyb21fIiIiCkBAIC0xODE4LDYgKzE4MzMsNyBAQAogICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdkZWxldGUnLCAncm93JywgZnJvbV8pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2RlbGV0ZScsICdyb3cnLCBmcm9tXywgdG8pCisKICAgICBkZWYgZGVsZXRlX2NvbHVtbihzZWxmLCBmcm9tXywgdG89Tm9uZSk6CiAgICAgICAgICIiIkRlbGV0ZSBjb2x1bW5zIGJldHdlZW4gZnJvbV8gYW5kIHRvIGluY2x1c2l2ZS4KICAgICAgICAgSWYgdG8gaXMgbm90IHByb3ZpZGVkLCAgZGVsZXRlIG9ubHkgY29sdW1uIGF0IGZyb21fIiIiCkBAIC0xODI1LDI2ICsxODQxLDQ5IEBACiAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ2RlbGV0ZScsICdjb2x1bW4nLCBmcm9tXykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnZGVsZXRlJywgJ2NvbHVtbicsIGZyb21fLCB0bykKLSAgICAjIGRlZiBlZGl0IGFwcGx5Ci0gICAgIyBkZWYgZWRpdCBzZXQgeCB5CisKKyAgICBkZWYgZWRpdF9hcHBseShzZWxmKToKKyAgICAgICAgIiIiSWYgYW55IGNlbGwgaXMgYmVpbmcgZWRpdGVkLCBkZS1oaWdobGlnaHQgdGhlIGNlbGwgIGFuZCAgYXBwbGllcworICAgICAgICB0aGUgY2hhbmdlcy4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdlZGl0JywgJ2FwcGx5JykKKworICAgIGRlZiBlZGl0X3NldChzZWxmLCB4LCB5KToKKyAgICAgICAgIiIiSGlnaGxpZ2h0cyAgdGhlICBjZWxsICBhdCAgKHgsIHkpIGZvciBlZGl0aW5nLCBpZiB0aGUgLWVkaXRub3RpZnkKKyAgICAgICAgY29tbWFuZCByZXR1cm5zIFRydWUgZm9yIHRoaXMgY2VsbC4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdlZGl0JywgJ3NldCcsIHgsIHkpCiAKICAgICBkZWYgZW50cnljZ2V0KHNlbGYsIHgsIHksIG9wdGlvbik6CiAgICAgICAgICJHZXQgdGhlIG9wdGlvbiB2YWx1ZSBmb3IgY2VsbCBhdCAoeCx5KSIKKyAgICAgICAgaWYgb3B0aW9uIGFuZCBvcHRpb25bMF0gIT0gJy0nOgorICAgICAgICAgICAgb3B0aW9uID0gJy0nICsgb3B0aW9uCiAgICAgICAgIHJldHVybiBzZWxmLnRrLmNhbGwoc2VsZiwgJ2VudHJ5Y2dldCcsIHgsIHksIG9wdGlvbikKIAotICAgIGRlZiBlbnRyeWNvbmZpZ3VyZShzZWxmLCB4LCB5LCAqKmt3KToKLSAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLCAnZW50cnljb25maWd1cmUnLCB4LCB5LCAqc2VsZi5fb3B0aW9ucyhOb25lLCBrdykpCisgICAgZGVmIGVudHJ5Y29uZmlndXJlKHNlbGYsIHgsIHksIGNuZj1Ob25lLCAqKmt3KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZ3VyZSgoJ2VudHJ5Y29uZmlndXJlJywgeCwgeSksIGNuZiwga3cpCisKICAgICAjIGRlZiBmb3JtYXQKICAgICAjIGRlZiBpbmRleAogCiAgICAgZGVmIGluZm9fZXhpc3RzKHNlbGYsIHgsIHkpOgogICAgICAgICAiUmV0dXJuIFRydWUgaWYgZGlzcGxheSBpdGVtIGV4aXN0cyBhdCAoeCx5KSIKLSAgICAgICAgcmV0dXJuIGJvb2woaW50KHNlbGYudGsuY2FsbChzZWxmLCAnaW5mbycsICdleGlzdHMnLCB4LCB5KSkpCisgICAgICAgIHJldHVybiBzZWxmLl9nZXRib29sZWFuKHNlbGYudGsuY2FsbChzZWxmLCAnaW5mbycsICdleGlzdHMnLCB4LCB5KSkKIAogICAgIGRlZiBpbmZvX2Jib3goc2VsZiwgeCwgeSk6CiAgICAgICAgICMgVGhpcyBzZWVtcyB0byBhbHdheXMgcmV0dXJuICcnLCBhdCBsZWFzdCBmb3IgJ3RleHQnIGRpc3BsYXlpdGVtcwogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYsICdpbmZvJywgJ2Jib3gnLCB4LCB5KQogCisgICAgZGVmIG1vdmVfY29sdW1uKHNlbGYsIGZyb21fLCB0bywgb2Zmc2V0KToKKyAgICAgICAgIiIiTW92ZXMgdGhlIHRoZSByYW5nZSBvZiBjb2x1bW5zIGZyb20gcG9zaXRpb24gRlJPTSB0aHJvdWdoIFRPIGJ5CisgICAgICAgIHRoZSBkaXN0YW5jZSBpbmRpY2F0ZWQgYnkgT0ZGU0VULiBGb3IgZXhhbXBsZSwgbW92ZV9jb2x1bW4oMiwgNCwgMSkKKyAgICAgICAgbW92ZXMgdGhlIGNvbHVtbnMgMiwzLDQgdG8gY29sdW1ucyAzLDQsNS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdtb3ZlJywgJ2NvbHVtbicsIGZyb21fLCB0bywgb2Zmc2V0KQorCisgICAgZGVmIG1vdmVfcm93KHNlbGYsIGZyb21fLCB0bywgb2Zmc2V0KToKKyAgICAgICAgIiIiTW92ZXMgdGhlIHRoZSByYW5nZSBvZiByb3dzIGZyb20gcG9zaXRpb24gRlJPTSB0aHJvdWdoIFRPIGJ5CisgICAgICAgIHRoZSBkaXN0YW5jZSBpbmRpY2F0ZWQgYnkgT0ZGU0VULgorICAgICAgICBGb3IgZXhhbXBsZSwgbW92ZV9yb3coMiwgNCwgMSkgbW92ZXMgdGhlIHJvd3MgMiwzLDQgdG8gcm93cyAzLDQsNS4iIiIKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsICdtb3ZlJywgJ3JvdycsIGZyb21fLCB0bywgb2Zmc2V0KQorCiAgICAgZGVmIG5lYXJlc3Qoc2VsZiwgeCwgeSk6CiAgICAgICAgICJSZXR1cm4gY29vcmRpbmF0ZSBvZiBjZWxsIG5lYXJlc3QgcGl4ZWwgY29vcmRpbmF0ZSAoeCx5KSIKICAgICAgICAgcmV0dXJuIHNlbGYuX2dldGludHMoc2VsZi50ay5jYWxsKHNlbGYsICduZWFyZXN0JywgeCwgeSkpCkBAIC0xODU0LDcgKzE4OTMsNiBAQAogICAgICMgZGVmIHNlbGVjdGlvbiBpbmNsdWRlcwogICAgICMgZGVmIHNlbGVjdGlvbiBzZXQKICAgICAjIGRlZiBzZWxlY3Rpb24gdG9nZ2xlCi0gICAgIyBkZWYgbW92ZSBkaW0gZnJvbSB0byBvZmZzZXQKIAogICAgIGRlZiBzZXQoc2VsZiwgeCwgeSwgaXRlbXR5cGU9Tm9uZSwgKiprdyk6CiAgICAgICAgIGFyZ3M9IHNlbGYuX29wdGlvbnMoc2VsZi5jbmYsIGt3KQpAQCAtMTg2MiwyNCArMTkwMCw1OSBAQAogICAgICAgICAgICAgYXJncz0gKCctaXRlbXR5cGUnLCBpdGVtdHlwZSkgKyBhcmdzCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAnc2V0JywgeCwgeSwgKmFyZ3MpCiAKLSAgICAjIGRlZiBzaXplIGRpbSBpbmRleCA/b3B0aW9uIHZhbHVlIC4uLj8KLSAgICAjIGRlZiB1bnNldCB4IHkKKyAgICBkZWYgc2l6ZV9jb2x1bW4oc2VsZiwgaW5kZXgsICoqa3cpOgorICAgICAgICAiIiJRdWVyaWVzICBvciAgc2V0cyB0aGUgc2l6ZSBvZiB0aGUgY29sdW1uIGdpdmVuIGJ5CisgICAgICAgIElOREVYLiAgSU5ERVggbWF5IGJlIGFueSAgbm9uLW5lZ2F0aXZlCisgICAgICAgIGludGVnZXIgIHRoYXQgIGdpdmVzICB0aGUgIHBvc2l0aW9uICBvZiBhIGdpdmVuIGNvbHVtbi4KKyAgICAgICAgSU5ERVggY2FuIGFsc28gYmUgdGhlIHN0cmluZyAiZGVmYXVsdCI7IGluIHRoaXMgY2FzZSwgdGhpcyBjb21tYW5kCisgICAgICAgIHF1ZXJpZXMgb3Igc2V0cyB0aGUgZGVmYXVsdCBzaXplIG9mIGFsbCBjb2x1bW5zLgorICAgICAgICBXaGVuICBubyAgb3B0aW9uLXZhbHVlICBwYWlyIGlzIGdpdmVuLCB0aGlzIGNvbW1hbmQgcmV0dXJucyBhIHR1cGxlCisgICAgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgc2l6ZSBzZXR0aW5nIG9mIHRoZSBnaXZlbiAgY29sdW1uLiAgV2hlbgorICAgICAgICBvcHRpb24tdmFsdWUgIHBhaXJzICBhcmUgIGdpdmVuLCAgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9ucyBvZiB0aGUKKyAgICAgICAgc2l6ZSBzZXR0aW5nIG9mIHRoZSBnaXZlbiBjb2x1bW4gYXJlIGNoYW5nZWQuIE9wdGlvbnMgbWF5IGJlIG9uZQorICAgICAgICBvZiAgdGhlICBmb2xsd2luZzoKKyAgICAgICAgICAgICAgcGFkMCBwaXhlbHMKKyAgICAgICAgICAgICAgICAgICAgIFNwZWNpZmllcyB0aGUgcGFkZGluZ3MgdG8gdGhlIGxlZnQgb2YgYSBjb2x1bW4uCisgICAgICAgICAgICAgIHBhZDEgcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhZGRpbmdzIHRvIHRoZSByaWdodCBvZiBhICBjb2x1bW4uCisgICAgICAgICAgICAgIHNpemUgdmFsCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgIHRoZSAgd2lkdGggb2YgYSBjb2x1bW4gLgorICAgICAgICAgICAgICAgICAgICAgVmFsIG1heSBiZTogImF1dG8iIC0tIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGlzIHNldCB0aGUKKyAgICAgICAgICAgICAgICAgICAgIHRoZSB3aWRlc3QgY2VsbCBpbiB0aGUgY29sdW1uOyBhIHZhbGlkIFRrIHNjcmVlbiBkaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgdW5pdDsgb3IgYSByZWFsIG51bWJlciBmb2xsb3dpbmcgYnkgdGhlIHdvcmQgY2hhcnMKKyAgICAgICAgICAgICAgICAgICAgIChlLmcuIDMuNGNoYXJzKSB0aGF0IHNldHMgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW4gdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICBnaXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXQoc2VsZi50ay5jYWxsKHNlbGYuX3csICdzaXplJywgJ2NvbHVtbicsIGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2VsZi5fb3B0aW9ucyh7fSwga3cpKSkKIAotICAgIGRlZiB4dmlldyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2dldGRvdWJsZXMoc2VsZi50ay5jYWxsKHNlbGYsICd4dmlldycpKQotICAgIGRlZiB4dmlld19tb3ZldG8oc2VsZiwgZnJhY3Rpb24pOgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwneHZpZXcnLCAnbW92ZXRvJywgZnJhY3Rpb24pCi0gICAgZGVmIHh2aWV3X3Njcm9sbChzZWxmLCBjb3VudCwgd2hhdD0idW5pdHMiKToKLSAgICAgICAgIlNjcm9sbCByaWdodCAoY291bnQ+MCkgb3IgbGVmdCA8Y291bnQ+IG9mIHVuaXRzfHBhZ2VzIgotICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZiwgJ3h2aWV3JywgJ3Njcm9sbCcsIGNvdW50LCB3aGF0KQorICAgIGRlZiBzaXplX3JvdyhzZWxmLCBpbmRleCwgKiprdyk6CisgICAgICAgICIiIlF1ZXJpZXMgIG9yICBzZXRzIHRoZSBzaXplIG9mIHRoZSByb3cgZ2l2ZW4gYnkKKyAgICAgICAgSU5ERVguIElOREVYIG1heSBiZSBhbnkgIG5vbi1uZWdhdGl2ZQorICAgICAgICBpbnRlZ2VyICB0aGF0ICBnaXZlcyAgdGhlICBwb3NpdGlvbiAgb2YgYSBnaXZlbiByb3cgLgorICAgICAgICBJTkRFWCBjYW4gYWxzbyBiZSB0aGUgc3RyaW5nICJkZWZhdWx0IjsgaW4gdGhpcyBjYXNlLCB0aGlzIGNvbW1hbmQKKyAgICAgICAgcXVlcmllcyBvciBzZXRzIHRoZSBkZWZhdWx0IHNpemUgb2YgYWxsIHJvd3MuCisgICAgICAgIFdoZW4gIG5vIG9wdGlvbi12YWx1ZSBwYWlyIGlzIGdpdmVuLCB0aGlzIGNvbW1hbmQgcmV0dXJucyBhIGxpc3QgY29uLQorICAgICAgICB0YWluaW5nIHRoZSBjdXJyZW50IHNpemUgc2V0dGluZyBvZiB0aGUgZ2l2ZW4gIHJvdyAuIFdoZW4gb3B0aW9uLXZhbHVlCisgICAgICAgIHBhaXJzIGFyZSBnaXZlbiwgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9ucyBvZiB0aGUgc2l6ZSBzZXR0aW5nIG9mIHRoZQorICAgICAgICBnaXZlbiByb3cgYXJlIGNoYW5nZWQuIE9wdGlvbnMgbWF5IGJlIG9uZSBvZiB0aGUgZm9sbHdpbmc6CisgICAgICAgICAgICAgIHBhZDAgcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhZGRpbmdzIHRvIHRoZSB0b3Agb2YgYSByb3cuCisgICAgICAgICAgICAgIHBhZDEgcGl4ZWxzCisgICAgICAgICAgICAgICAgICAgICBTcGVjaWZpZXMgdGhlIHBhZGRpbmdzIHRvIHRoZSB0aGUgYm90dG9tIG9mIGEgcm93LgorICAgICAgICAgICAgICBzaXplIHZhbAorICAgICAgICAgICAgICAgICAgICAgU3BlY2lmaWVzICB0aGUgaGVpZ2h0IG9mIGEgcm93LgorICAgICAgICAgICAgICAgICAgICAgVmFsIG1heSBiZTogImF1dG8iIC0tIHRoZSBoZWlnaHQgb2YgdGhlIHJvdyAgaXMgIHNldCAgdGhlCisgICAgICAgICAgICAgICAgICAgICB0aGUgaGlnaGVzdCBjZWxsIGluIHRoZSByb3c7IGEgdmFsaWQgVGsgc2NyZWVuIGRpc3RhbmNlCisgICAgICAgICAgICAgICAgICAgICB1bml0OyBvciBhIHJlYWwgbnVtYmVyIGZvbGxvd2luZyBieSB0aGUgd29yZCBjaGFycworICAgICAgICAgICAgICAgICAgICAgKGUuZy4gMy40Y2hhcnMpIHRoYXQgc2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSByb3cgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICBnaXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXQoc2VsZi50ay5jYWxsKAorICAgICAgICAgICAgICAgICAgICBzZWxmLCAnc2l6ZScsICdyb3cnLCBpbmRleCwgKnNlbGYuX29wdGlvbnMoe30sIGt3KSkpCiAKLSAgICBkZWYgeXZpZXcoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9nZXRkb3VibGVzKHNlbGYudGsuY2FsbChzZWxmLCAneXZpZXcnKSkKLSAgICBkZWYgeXZpZXdfbW92ZXRvKHNlbGYsIGZyYWN0aW9uKToKLSAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYsJ3lzdmlldycsICdtb3ZldG8nLCBmcmFjdGlvbikKLSAgICBkZWYgeXZpZXdfc2Nyb2xsKHNlbGYsIGNvdW50LCB3aGF0PSJ1bml0cyIpOgotICAgICAgICAiU2Nyb2xsIGRvd24gKGNvdW50PjApIG9yIHVwIDxjb3VudD4gb2YgdW5pdHN8cGFnZXMiCi0gICAgICAgIHNlbGYudGsuY2FsbChzZWxmLCAneXZpZXcnLCAnc2Nyb2xsJywgY291bnQsIHdoYXQpCisgICAgZGVmIHVuc2V0KHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJDbGVhcnMgdGhlIGNlbGwgYXQgKHgsIHkpIGJ5IHJlbW92aW5nIGl0cyBkaXNwbGF5IGl0ZW0uIiIiCisgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAndW5zZXQnLCB4LCB5KQorCiAKIGNsYXNzIFNjcm9sbGVkR3JpZChHcmlkKToKICAgICAnJydTY3JvbGxlZCBHcmlkIHdpZGdldHMnJycKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3R0ay5weSBiL0xpYi90a2ludGVyL3R0ay5weQppbmRleCA5MjEzYjYyLi4xYTZhOWY0IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90dGsucHkKKysrIGIvTGliL3RraW50ZXIvdHRrLnB5CkBAIC0xMTcwLDcgKzExNzAsNyBAQAogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAidHRrOjpzaXplZ3JpcCIsIGt3KQogCiAKLWNsYXNzIFRyZWV2aWV3KFdpZGdldCk6CitjbGFzcyBUcmVldmlldyhXaWRnZXQsIHRraW50ZXIuWFZpZXcsIHRraW50ZXIuWVZpZXcpOgogICAgICIiIlR0ayBUcmVldmlldyB3aWRnZXQgZGlzcGxheXMgYSBoaWVyYXJjaGljYWwgY29sbGVjdGlvbiBvZiBpdGVtcy4KIAogICAgIEVhY2ggaXRlbSBoYXMgYSB0ZXh0dWFsIGxhYmVsLCBhbiBvcHRpb25hbCBpbWFnZSwgYW5kIGFuIG9wdGlvbmFsIGxpc3QKQEAgLTE0ODAsMTYgKzE0ODAsNiBAQAogICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJ0YWciLCAiaGFzIiwgdGFnbmFtZSwgaXRlbSkKIAogCi0gICAgZGVmIHh2aWV3KHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUXVlcnkgb3IgbW9kaWZ5IGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHRyZWV2aWV3LiIiIgotICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJ4dmlldyIsICphcmdzKQotCi0KLSAgICBkZWYgeXZpZXcoc2VsZiwgKmFyZ3MpOgotICAgICAgICAiIiJRdWVyeSBvciBtb2RpZnkgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRyZWV2aWV3LiIiIgotICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKHNlbGYuX3csICJ5dmlldyIsICphcmdzKQotCi0KICMgRXh0ZW5zaW9ucwogCiBjbGFzcyBMYWJlbGVkU2NhbGUoRnJhbWUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rva2VuLnB5IGIvTGliL3Rva2VuLnB5CmluZGV4IGRhNGQyOWIuLjdlMmJmY2YgMTAwNzU1Ci0tLSBhL0xpYi90b2tlbi5weQorKysgYi9MaWIvdG9rZW4ucHkKQEAgLTEsNyArMSw3IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KICIiIlRva2VuIGNvbnN0YW50cyAoZnJvbSAidG9rZW4uaCIpLiIiIgogCitfX2FsbF9fID0gWyd0b2tfbmFtZScsICdJU1RFUk1JTkFMJywgJ0lTTk9OVEVSTUlOQUwnLCAnSVNFT0YnXQorCiAjICBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQ7IHBsZWFzZSBkb24ndCBtdWNrIGl0IHVwIQogIwogIyAgVG8gdXBkYXRlIHRoZSBzeW1ib2xzIGluIHRoaXMgZmlsZSwgJ2NkJyB0byB0aGUgdG9wIGRpcmVjdG9yeSBvZgpAQCAtNjgsMTIgKzY4LDEwIEBACiBOVF9PRkZTRVQgPSAyNTYKICMtLWVuZCBjb25zdGFudHMtLQogCi10b2tfbmFtZSA9IHt9Ci1mb3IgX25hbWUsIF92YWx1ZSBpbiBsaXN0KGdsb2JhbHMoKS5pdGVtcygpKToKLSAgICBpZiB0eXBlKF92YWx1ZSkgaXMgdHlwZSgwKToKLSAgICAgICAgdG9rX25hbWVbX3ZhbHVlXSA9IF9uYW1lCi1kZWwgX25hbWUsIF92YWx1ZQotCit0b2tfbmFtZSA9IHt2YWx1ZTogbmFtZQorICAgICAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGdsb2JhbHMoKS5pdGVtcygpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpfQorX19hbGxfXy5leHRlbmQodG9rX25hbWUudmFsdWVzKCkpCiAKIGRlZiBJU1RFUk1JTkFMKHgpOgogICAgIHJldHVybiB4IDwgTlRfT0ZGU0VUCkBAIC04NSw3ICs4Myw3IEBACiAgICAgcmV0dXJuIHggPT0gRU5ETUFSS0VSCiAKIAotZGVmIG1haW4oKToKK2RlZiBfbWFpbigpOgogICAgIGltcG9ydCByZQogICAgIGltcG9ydCBzeXMKICAgICBhcmdzID0gc3lzLmFyZ3ZbMTpdCkBAIC0xMzksNCArMTM3LDQgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90b2tlbml6ZS5weSBiL0xpYi90b2tlbml6ZS5weQppbmRleCBlNzExYTIxLi5mNTc1ZTliIDEwMDY0NAotLS0gYS9MaWIvdG9rZW5pemUucHkKKysrIGIvTGliL3Rva2VuaXplLnB5CkBAIC0xLDEyICsxLDEyIEBACiAiIiJUb2tlbml6YXRpb24gaGVscCBmb3IgUHl0aG9uIHByb2dyYW1zLgogCi10b2tlbml6ZShyZWFkbGluZSkgaXMgYSBnZW5lcmF0b3IgdGhhdCBicmVha3MgYSBzdHJlYW0gb2YKLWJ5dGVzIGludG8gUHl0aG9uIHRva2Vucy4gSXQgZGVjb2RlcyB0aGUgYnl0ZXMgYWNjb3JkaW5nIHRvCi1QRVAtMDI2MyBmb3IgZGV0ZXJtaW5pbmcgc291cmNlIGZpbGUgZW5jb2RpbmcuCit0b2tlbml6ZShyZWFkbGluZSkgaXMgYSBnZW5lcmF0b3IgdGhhdCBicmVha3MgYSBzdHJlYW0gb2YgYnl0ZXMgaW50bworUHl0aG9uIHRva2Vucy4gIEl0IGRlY29kZXMgdGhlIGJ5dGVzIGFjY29yZGluZyB0byBQRVAtMDI2MyBmb3IKK2RldGVybWluaW5nIHNvdXJjZSBmaWxlIGVuY29kaW5nLgogCi1JdCBhY2NlcHRzIGEgcmVhZGxpbmUtbGlrZSBtZXRob2Qgd2hpY2ggaXMgY2FsbGVkCi1yZXBlYXRlZGx5IHRvIGdldCB0aGUgbmV4dCBsaW5lIG9mIGlucHV0IChvciBiIiIgZm9yIEVPRikuICBJdCBnZW5lcmF0ZXMKLTUtdHVwbGVzIHdpdGggdGhlc2UgbWVtYmVyczoKK0l0IGFjY2VwdHMgYSByZWFkbGluZS1saWtlIG1ldGhvZCB3aGljaCBpcyBjYWxsZWQgcmVwZWF0ZWRseSB0byBnZXQgdGhlCituZXh0IGxpbmUgb2YgaW5wdXQgKG9yIGIiIiBmb3IgRU9GKS4gIEl0IGdlbmVyYXRlcyA1LXR1cGxlcyB3aXRoIHRoZXNlCittZW1iZXJzOgogCiAgICAgdGhlIHRva2VuIHR5cGUgKHNlZSB0b2tlbi5weSkKICAgICB0aGUgdG9rZW4gKGEgc3RyaW5nKQpAQCAtMTYsMjIgKzE2LDI2IEBACiAKIEl0IGlzIGRlc2lnbmVkIHRvIG1hdGNoIHRoZSB3b3JraW5nIG9mIHRoZSBQeXRob24gdG9rZW5pemVyIGV4YWN0bHksIGV4Y2VwdAogdGhhdCBpdCBwcm9kdWNlcyBDT01NRU5UIHRva2VucyBmb3IgY29tbWVudHMgYW5kIGdpdmVzIHR5cGUgT1AgZm9yIGFsbAotb3BlcmF0b3JzLiBBZGl0aW9uYWxseSwgYWxsIHRva2VuIGxpc3RzIHN0YXJ0IHdpdGggYW4gRU5DT0RJTkcgdG9rZW4KLXdoaWNoIHRlbGxzIHlvdSB3aGljaCBlbmNvZGluZyB3YXMgdXNlZCB0byBkZWNvZGUgdGhlIGJ5dGVzIHN0cmVhbS4iIiIKK29wZXJhdG9ycy4gIEFkZGl0aW9uYWxseSwgYWxsIHRva2VuIGxpc3RzIHN0YXJ0IHdpdGggYW4gRU5DT0RJTkcgdG9rZW4KK3doaWNoIHRlbGxzIHlvdSB3aGljaCBlbmNvZGluZyB3YXMgdXNlZCB0byBkZWNvZGUgdGhlIGJ5dGVzIHN0cmVhbS4KKyIiIgogCiBfX2F1dGhvcl9fID0gJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JwogX19jcmVkaXRzX18gPSAoJ0d2UiwgRVNSLCBUaW0gUGV0ZXJzLCBUaG9tYXMgV291dGVycywgRnJlZCBEcmFrZSwgJwogICAgICAgICAgICAgICAgJ1NraXAgTW9udGFuYXJvLCBSYXltb25kIEhldHRpbmdlciwgVHJlbnQgTmVsc29uLCAnCiAgICAgICAgICAgICAgICAnTWljaGFlbCBGb29yZCcpCi1pbXBvcnQgcmUsIHN0cmluZywgc3lzCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCByZQoraW1wb3J0IHN5cwogZnJvbSB0b2tlbiBpbXBvcnQgKgogZnJvbSBjb2RlY3MgaW1wb3J0IGxvb2t1cCwgQk9NX1VURjgKK2ltcG9ydCBjb2xsZWN0aW9ucworZnJvbSBpbyBpbXBvcnQgVGV4dElPV3JhcHBlcgogY29va2llX3JlID0gcmUuY29tcGlsZSgiY29kaW5nWzo9XVxzKihbLVx3Ll0rKSIpCiAKIGltcG9ydCB0b2tlbgotX19hbGxfXyA9IFt4IGZvciB4IGluIGRpcih0b2tlbikgaWYgbm90IHguc3RhcnRzd2l0aCgiXyIpXQotX19hbGxfXy5leHRlbmQoWyJDT01NRU5UIiwgInRva2VuaXplIiwgImRldGVjdF9lbmNvZGluZyIsICJOTCIsICJ1bnRva2VuaXplIiwKLSAgICAgICAgICAgICAgICAiRU5DT0RJTkciLCAiVG9rZW5JbmZvIl0pCitfX2FsbF9fID0gdG9rZW4uX19hbGxfXyArIFsiQ09NTUVOVCIsICJ0b2tlbml6ZSIsICJkZXRlY3RfZW5jb2RpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5MIiwgInVudG9rZW5pemUiLCAiRU5DT0RJTkciLCAiVG9rZW5JbmZvIl0KIGRlbCB0b2tlbgogCiBDT01NRU5UID0gTl9UT0tFTlMKQEAgLTQyLDQ2ICs0NiwxMSBAQAogdG9rX25hbWVbRU5DT0RJTkddID0gJ0VOQ09ESU5HJwogTl9UT0tFTlMgKz0gMwogCi1jbGFzcyBUb2tlbkluZm8odHVwbGUpOgotICAgICdUb2tlbkluZm8odHlwZSwgc3RyaW5nLCBzdGFydCwgZW5kLCBsaW5lKScKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBfZmllbGRzID0gKCd0eXBlJywgJ3N0cmluZycsICdzdGFydCcsICdlbmQnLCAnbGluZScpCi0KLSAgICBkZWYgX19uZXdfXyhjbHMsIHR5cGUsIHN0cmluZywgc3RhcnQsIGVuZCwgbGluZSk6Ci0gICAgICAgIHJldHVybiB0dXBsZS5fX25ld19fKGNscywgKHR5cGUsIHN0cmluZywgc3RhcnQsIGVuZCwgbGluZSkpCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX21ha2UoY2xzLCBpdGVyYWJsZSwgbmV3PXR1cGxlLl9fbmV3X18sIGxlbj1sZW4pOgotICAgICAgICAnTWFrZSBhIG5ldyBUb2tlbkluZm8gb2JqZWN0IGZyb20gYSBzZXF1ZW5jZSBvciBpdGVyYWJsZScKLSAgICAgICAgcmVzdWx0ID0gbmV3KGNscywgaXRlcmFibGUpCi0gICAgICAgIGlmIGxlbihyZXN1bHQpICE9IDU6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0V4cGVjdGVkIDUgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKHJlc3VsdCkpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQorY2xhc3MgVG9rZW5JbmZvKGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoJ1Rva2VuSW5mbycsICd0eXBlIHN0cmluZyBzdGFydCBlbmQgbGluZScpKToKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAnVG9rZW5JbmZvKHR5cGU9JXIsIHN0cmluZz0lciwgc3RhcnQ9JXIsIGVuZD0lciwgbGluZT0lciknICUgc2VsZgotCi0gICAgZGVmIF9hc2RpY3Qoc2VsZik6Ci0gICAgICAgICdSZXR1cm4gYSBuZXcgZGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcycKLSAgICAgICAgcmV0dXJuIGRpY3QoemlwKHNlbGYuX2ZpZWxkcywgc2VsZikpCi0KLSAgICBkZWYgX3JlcGxhY2Uoc2VsZiwgKiprd2RzKToKLSAgICAgICAgJ1JldHVybiBhIG5ldyBUb2tlbkluZm8gb2JqZWN0IHJlcGxhY2luZyBzcGVjaWZpZWQgZmllbGRzIHdpdGggbmV3IHZhbHVlcycKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZShtYXAoa3dkcy5wb3AsICgndHlwZScsICdzdHJpbmcnLCAnc3RhcnQnLCAnZW5kJywgJ2xpbmUnKSwgc2VsZikpCi0gICAgICAgIGlmIGt3ZHM6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdHb3QgdW5leHBlY3RlZCBmaWVsZCBuYW1lczogJXInICUga3dkcy5rZXlzKCkpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHR1cGxlKHNlbGYpCi0KLSAgICB0eXBlID0gcHJvcGVydHkobGFtYmRhIHQ6IHRbMF0pCi0gICAgc3RyaW5nID0gcHJvcGVydHkobGFtYmRhIHQ6IHRbMV0pCi0gICAgc3RhcnQgPSBwcm9wZXJ0eShsYW1iZGEgdDogdFsyXSkKLSAgICBlbmQgPSBwcm9wZXJ0eShsYW1iZGEgdDogdFszXSkKLSAgICBsaW5lID0gcHJvcGVydHkobGFtYmRhIHQ6IHRbNF0pCisgICAgICAgIGFubm90YXRlZF90eXBlID0gJyVkICglcyknICUgKHNlbGYudHlwZSwgdG9rX25hbWVbc2VsZi50eXBlXSkKKyAgICAgICAgcmV0dXJuICgnVG9rZW5JbmZvKHR5cGU9JXMsIHN0cmluZz0lciwgc3RhcnQ9JXIsIGVuZD0lciwgbGluZT0lciknICUKKyAgICAgICAgICAgICAgICBzZWxmLl9yZXBsYWNlKHR5cGU9YW5ub3RhdGVkX3R5cGUpKQogCiBkZWYgZ3JvdXAoKmNob2ljZXMpOiByZXR1cm4gJygnICsgJ3wnLmpvaW4oY2hvaWNlcykgKyAnKScKIGRlZiBhbnkoKmNob2ljZXMpOiByZXR1cm4gZ3JvdXAoKmNob2ljZXMpICsgJyonCkBAIC0yOTgsMjIgKzI2NywyMyBAQAogZGVmIGRldGVjdF9lbmNvZGluZyhyZWFkbGluZSk6CiAgICAgIiIiCiAgICAgVGhlIGRldGVjdF9lbmNvZGluZygpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZyB0aGF0IHNob3VsZAotICAgIGJlIHVzZWQgdG8gZGVjb2RlIGEgUHl0aG9uIHNvdXJjZSBmaWxlLiBJdCByZXF1aXJlcyBvbmUgYXJnbWVudCwgcmVhZGxpbmUsCisgICAgYmUgdXNlZCB0byBkZWNvZGUgYSBQeXRob24gc291cmNlIGZpbGUuICBJdCByZXF1aXJlcyBvbmUgYXJnbWVudCwgcmVhZGxpbmUsCiAgICAgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSB0b2tlbml6ZSgpIGdlbmVyYXRvci4KIAogICAgIEl0IHdpbGwgY2FsbCByZWFkbGluZSBhIG1heGltdW0gb2YgdHdpY2UsIGFuZCByZXR1cm4gdGhlIGVuY29kaW5nIHVzZWQKLSAgICAoYXMgYSBzdHJpbmcpIGFuZCBhIGxpc3Qgb2YgYW55IGxpbmVzIChsZWZ0IGFzIGJ5dGVzKSBpdCBoYXMgcmVhZAotICAgIGluLgorICAgIChhcyBhIHN0cmluZykgYW5kIGEgbGlzdCBvZiBhbnkgbGluZXMgKGxlZnQgYXMgYnl0ZXMpIGl0IGhhcyByZWFkIGluLgogCiAgICAgSXQgZGV0ZWN0cyB0aGUgZW5jb2RpbmcgZnJvbSB0aGUgcHJlc2VuY2Ugb2YgYSB1dGYtOCBib20gb3IgYW4gZW5jb2RpbmcKLSAgICBjb29raWUgYXMgc3BlY2lmaWVkIGluIHBlcC0wMjYzLiBJZiBib3RoIGEgYm9tIGFuZCBhIGNvb2tpZSBhcmUgcHJlc2VudCwKLSAgICBidXQgZGlzYWdyZWUsIGEgU3ludGF4RXJyb3Igd2lsbCBiZSByYWlzZWQuIElmIHRoZSBlbmNvZGluZyBjb29raWUgaXMgYW4KLSAgICBpbnZhbGlkIGNoYXJzZXQsIHJhaXNlIGEgU3ludGF4RXJyb3IuCisgICAgY29va2llIGFzIHNwZWNpZmllZCBpbiBwZXAtMDI2My4gIElmIGJvdGggYSBib20gYW5kIGEgY29va2llIGFyZSBwcmVzZW50LAorICAgIGJ1dCBkaXNhZ3JlZSwgYSBTeW50YXhFcnJvciB3aWxsIGJlIHJhaXNlZC4gIElmIHRoZSBlbmNvZGluZyBjb29raWUgaXMgYW4KKyAgICBpbnZhbGlkIGNoYXJzZXQsIHJhaXNlIGEgU3ludGF4RXJyb3IuICBOb3RlIHRoYXQgaWYgYSB1dGYtOCBib20gaXMgZm91bmQsCisgICAgJ3V0Zi04LXNpZycgaXMgcmV0dXJuZWQuCiAKICAgICBJZiBubyBlbmNvZGluZyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlIGRlZmF1bHQgb2YgJ3V0Zi04JyB3aWxsIGJlIHJldHVybmVkLgogICAgICIiIgogICAgIGJvbV9mb3VuZCA9IEZhbHNlCiAgICAgZW5jb2RpbmcgPSBOb25lCisgICAgZGVmYXVsdCA9ICd1dGYtOCcKICAgICBkZWYgcmVhZF9vcl9zdG9wKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJldHVybiByZWFkbGluZSgpCkBAIC0zMzYsMTcgKzMwNiwyMCBAQAogICAgICAgICAgICAgIyBUaGlzIGJlaGF2aW91ciBtaW1pY3MgdGhlIFB5dGhvbiBpbnRlcnByZXRlcgogICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVua25vd24gZW5jb2Rpbmc6ICIgKyBlbmNvZGluZykKIAotICAgICAgICBpZiBib21fZm91bmQgYW5kIGNvZGVjLm5hbWUgIT0gJ3V0Zi04JzoKLSAgICAgICAgICAgICMgVGhpcyBiZWhhdmlvdXIgbWltaWNzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIKLSAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCdlbmNvZGluZyBwcm9ibGVtOiB1dGYtOCcpCisgICAgICAgIGlmIGJvbV9mb3VuZDoKKyAgICAgICAgICAgIGlmIGNvZGVjLm5hbWUgIT0gJ3V0Zi04JzoKKyAgICAgICAgICAgICAgICAjIFRoaXMgYmVoYXZpb3VyIG1pbWljcyB0aGUgUHl0aG9uIGludGVycHJldGVyCisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoJ2VuY29kaW5nIHByb2JsZW06IHV0Zi04JykKKyAgICAgICAgICAgIGVuY29kaW5nICs9ICctc2lnJwogICAgICAgICByZXR1cm4gZW5jb2RpbmcKIAogICAgIGZpcnN0ID0gcmVhZF9vcl9zdG9wKCkKICAgICBpZiBmaXJzdC5zdGFydHN3aXRoKEJPTV9VVEY4KToKICAgICAgICAgYm9tX2ZvdW5kID0gVHJ1ZQogICAgICAgICBmaXJzdCA9IGZpcnN0WzM6XQorICAgICAgICBkZWZhdWx0ID0gJ3V0Zi04LXNpZycKICAgICBpZiBub3QgZmlyc3Q6Ci0gICAgICAgIHJldHVybiAndXRmLTgnLCBbXQorICAgICAgICByZXR1cm4gZGVmYXVsdCwgW10KIAogICAgIGVuY29kaW5nID0gZmluZF9jb29raWUoZmlyc3QpCiAgICAgaWYgZW5jb2Rpbmc6CkBAIC0zNTQsMjAgKzMyNywzMiBAQAogCiAgICAgc2Vjb25kID0gcmVhZF9vcl9zdG9wKCkKICAgICBpZiBub3Qgc2Vjb25kOgotICAgICAgICByZXR1cm4gJ3V0Zi04JywgW2ZpcnN0XQorICAgICAgICByZXR1cm4gZGVmYXVsdCwgW2ZpcnN0XQogCiAgICAgZW5jb2RpbmcgPSBmaW5kX2Nvb2tpZShzZWNvbmQpCiAgICAgaWYgZW5jb2Rpbmc6CiAgICAgICAgIHJldHVybiBlbmNvZGluZywgW2ZpcnN0LCBzZWNvbmRdCiAKLSAgICByZXR1cm4gJ3V0Zi04JywgW2ZpcnN0LCBzZWNvbmRdCisgICAgcmV0dXJuIGRlZmF1bHQsIFtmaXJzdCwgc2Vjb25kXQorCisKK2RlZiBvcGVuKGZpbGVuYW1lKToKKyAgICAiIiJPcGVuIGEgZmlsZSBpbiByZWFkIG9ubHkgbW9kZSB1c2luZyB0aGUgZW5jb2RpbmcgZGV0ZWN0ZWQgYnkKKyAgICBkZXRlY3RfZW5jb2RpbmcoKS4KKyAgICAiIiIKKyAgICBidWZmZXIgPSBidWlsdGlucy5vcGVuKGZpbGVuYW1lLCAncmInKQorICAgIGVuY29kaW5nLCBsaW5lcyA9IGRldGVjdF9lbmNvZGluZyhidWZmZXIucmVhZGxpbmUpCisgICAgYnVmZmVyLnNlZWsoMCkKKyAgICB0ZXh0ID0gVGV4dElPV3JhcHBlcihidWZmZXIsIGVuY29kaW5nLCBsaW5lX2J1ZmZlcmluZz1UcnVlKQorICAgIHRleHQubW9kZSA9ICdyJworICAgIHJldHVybiB0ZXh0CiAKIAogZGVmIHRva2VuaXplKHJlYWRsaW5lKToKICAgICAiIiIKICAgICBUaGUgdG9rZW5pemUoKSBnZW5lcmF0b3IgcmVxdWlyZXMgb25lIGFyZ21lbnQsIHJlYWRsaW5lLCB3aGljaAogICAgIG11c3QgYmUgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcHJvdmlkZXMgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZQotICAgIHJlYWRsaW5lKCkgbWV0aG9kIG9mIGJ1aWx0LWluIGZpbGUgb2JqZWN0cy4gRWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbgorICAgIHJlYWRsaW5lKCkgbWV0aG9kIG9mIGJ1aWx0LWluIGZpbGUgb2JqZWN0cy4gIEVhY2ggY2FsbCB0byB0aGUgZnVuY3Rpb24KICAgICBzaG91bGQgcmV0dXJuIG9uZSBsaW5lIG9mIGlucHV0IGFzIGJ5dGVzLiAgQWx0ZXJuYXRlbHksIHJlYWRsaW5lCiAgICAgY2FuIGJlIGEgY2FsbGFibGUgZnVuY3Rpb24gdGVybWluYXRpbmcgd2l0aCBTdG9wSXRlcmF0aW9uOgogICAgICAgICByZWFkbGluZSA9IG9wZW4obXlmaWxlLCAncmInKS5fX25leHRfXyAgIyBFeGFtcGxlIG9mIGFsdGVybmF0ZSByZWFkbGluZQpAQCAtMzc2LDIzICszNjEsMTkgQEAKICAgICB0b2tlbiBzdHJpbmc7IGEgMi10dXBsZSAoc3Jvdywgc2NvbCkgb2YgaW50cyBzcGVjaWZ5aW5nIHRoZSByb3cgYW5kCiAgICAgY29sdW1uIHdoZXJlIHRoZSB0b2tlbiBiZWdpbnMgaW4gdGhlIHNvdXJjZTsgYSAyLXR1cGxlIChlcm93LCBlY29sKSBvZgogICAgIGludHMgc3BlY2lmeWluZyB0aGUgcm93IGFuZCBjb2x1bW4gd2hlcmUgdGhlIHRva2VuIGVuZHMgaW4gdGhlIHNvdXJjZTsKLSAgICBhbmQgdGhlIGxpbmUgb24gd2hpY2ggdGhlIHRva2VuIHdhcyBmb3VuZC4gVGhlIGxpbmUgcGFzc2VkIGlzIHRoZQorICAgIGFuZCB0aGUgbGluZSBvbiB3aGljaCB0aGUgdG9rZW4gd2FzIGZvdW5kLiAgVGhlIGxpbmUgcGFzc2VkIGlzIHRoZQogICAgIGxvZ2ljYWwgbGluZTsgY29udGludWF0aW9uIGxpbmVzIGFyZSBpbmNsdWRlZC4KIAogICAgIFRoZSBmaXJzdCB0b2tlbiBzZXF1ZW5jZSB3aWxsIGFsd2F5cyBiZSBhbiBFTkNPRElORyB0b2tlbgogICAgIHdoaWNoIHRlbGxzIHlvdSB3aGljaCBlbmNvZGluZyB3YXMgdXNlZCB0byBkZWNvZGUgdGhlIGJ5dGVzIHN0cmVhbS4KICAgICAiIiIKKyAgICAjIFRoaXMgaW1wb3J0IGlzIGhlcmUgdG8gYXZvaWQgcHJvYmxlbXMgd2hlbiB0aGUgaXRlcnRvb2xzIG1vZHVsZSBpcyBub3QKKyAgICAjIGJ1aWx0IHlldCBhbmQgdG9rZW5pemUgaXMgaW1wb3J0ZWQuCisgICAgZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluLCByZXBlYXQKICAgICBlbmNvZGluZywgY29uc3VtZWQgPSBkZXRlY3RfZW5jb2RpbmcocmVhZGxpbmUpCi0gICAgZGVmIHJlYWRsaW5lX2dlbmVyYXRvcihjb25zdW1lZCk6Ci0gICAgICAgIGZvciBsaW5lIGluIGNvbnN1bWVkOgotICAgICAgICAgICAgeWllbGQgbGluZQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHlpZWxkIHJlYWRsaW5lKCkKLSAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgIGNoYWluZWQgPSByZWFkbGluZV9nZW5lcmF0b3IoY29uc3VtZWQpCi0gICAgcmV0dXJuIF90b2tlbml6ZShjaGFpbmVkLl9fbmV4dF9fLCBlbmNvZGluZykKKyAgICBybF9nZW4gPSBpdGVyKHJlYWRsaW5lLCBiIiIpCisgICAgZW1wdHkgPSByZXBlYXQoYiIiKQorICAgIHJldHVybiBfdG9rZW5pemUoY2hhaW4oY29uc3VtZWQsIHJsX2dlbiwgZW1wdHkpLl9fbmV4dF9fLCBlbmNvZGluZykKIAogCiBkZWYgX3Rva2VuaXplKHJlYWRsaW5lLCBlbmNvZGluZyk6CkBAIC00MDMsNiArMzg0LDkgQEAKICAgICBpbmRlbnRzID0gWzBdCiAKICAgICBpZiBlbmNvZGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZW5jb2RpbmcgPT0gInV0Zi04LXNpZyI6CisgICAgICAgICAgICAjIEJPTSB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIHN0cmlwcGVkLgorICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgiCiAgICAgICAgIHlpZWxkIFRva2VuSW5mbyhFTkNPRElORywgZW5jb2RpbmcsICgwLCAwKSwgKDAsIDApLCAnJykKICAgICB3aGlsZSBUcnVlOiAgICAgICAgICAgICAjIGxvb3Agb3ZlciBsaW5lcyBpbiBzdHJlYW0KICAgICAgICAgdHJ5OgpAQCAtNTQ1LDMgKzUyOSwyOCBAQAogIyBsaWJyYXJ5IHRoYXQgZXhwZWN0IHRvIGJlIGFibGUgdG8gdXNlIHRva2VuaXplIHdpdGggc3RyaW5ncwogZGVmIGdlbmVyYXRlX3Rva2VucyhyZWFkbGluZSk6CiAgICAgcmV0dXJuIF90b2tlbml6ZShyZWFkbGluZSwgTm9uZSkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAjIFF1aWNrIHNhbml0eSBjaGVjaworICAgIHMgPSBiJycnZGVmIHBhcnNlbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgICAgICIiIlBhcnNlIHRoZSBsaW5lIGludG8gYSBjb21tYW5kIG5hbWUgYW5kIGEgc3RyaW5nIGNvbnRhaW5pbmcKKyAgICAgICAgICAgIHRoZSBhcmd1bWVudHMuICBSZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyAoY29tbWFuZCwgYXJncywgbGluZSkuCisgICAgICAgICAgICAnY29tbWFuZCcgYW5kICdhcmdzJyBtYXkgYmUgTm9uZSBpZiB0aGUgbGluZSBjb3VsZG4ndCBiZSBwYXJzZWQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBOb25lLCBsaW5lCisgICAgICAgICAgICBlbGlmIGxpbmVbMF0gPT0gJz8nOgorICAgICAgICAgICAgICAgIGxpbmUgPSAnaGVscCAnICsgbGluZVsxOl0KKyAgICAgICAgICAgIGVsaWYgbGluZVswXSA9PSAnISc6CisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnZG9fc2hlbGwnKToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9ICdzaGVsbCAnICsgbGluZVsxOl0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZSwgTm9uZSwgbGluZQorICAgICAgICAgICAgaSwgbiA9IDAsIGxlbihsaW5lKQorICAgICAgICAgICAgd2hpbGUgaSA8IG4gYW5kIGxpbmVbaV0gaW4gc2VsZi5pZGVudGNoYXJzOiBpID0gaSsxCisgICAgICAgICAgICBjbWQsIGFyZyA9IGxpbmVbOmldLCBsaW5lW2k6XS5zdHJpcCgpCisgICAgICAgICAgICByZXR1cm4gY21kLCBhcmcsIGxpbmUKKyAgICAnJycKKyAgICBmb3IgdG9rIGluIHRva2VuaXplKGl0ZXIocy5zcGxpdGxpbmVzKCkpLl9fbmV4dF9fKToKKyAgICAgICAgcHJpbnQodG9rKQpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlLnB5IGIvTGliL3RyYWNlLnB5CmluZGV4IGMwMTkzNWYuLjg1MDM2OWIgMTAwNjQ0Ci0tLSBhL0xpYi90cmFjZS5weQorKysgYi9MaWIvdHJhY2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBwb3J0aW9ucyBjb3B5cmlnaHQgMjAwMSwgQXV0b25vbW91cyBab25lcyBJbmR1c3RyaWVzLCBJbmMuLCBhbGwgcmlnaHRzLi4uCiAjIGVyci4uLiAgcmVzZXJ2ZWQgYW5kIG9mZmVyZWQgdG8gdGhlIHB1YmxpYyB1bmRlciB0aGUgdGVybXMgb2YgdGhlCkBAIC00Nyw3ICs0Nyw3IEBACiAgIHIgPSB0cmFjZXIucmVzdWx0cygpCiAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgY292ZXJkaXI9Ii90bXAiKQogIiIiCi0KK19fYWxsX18gPSBbJ1RyYWNlJywgJ0NvdmVyYWdlUmVzdWx0cyddCiBpbXBvcnQgaW8KIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBvcwpAQCAtNjAsNiArNjAsNyBAQAogaW1wb3J0IGdjCiBpbXBvcnQgZGlzCiBpbXBvcnQgcGlja2xlCitmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJuIGFzIF93YXJuCiAKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCkBAIC03Nyw3ICs3OCw3IEBACiAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQogICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2UoTm9uZSkKIAotZGVmIHVzYWdlKG91dGZpbGUpOgorZGVmIF91c2FnZShvdXRmaWxlKToKICAgICBvdXRmaWxlLndyaXRlKCIiIlVzYWdlOiAlcyBbT1BUSU9OU10gPGZpbGU+IFtBUkdTXQogCiBNZXRhLW9wdGlvbnM6CkBAIC0xMjcsMTIgKzEyOCwxMSBAQAogIyBTaW1wbGUgcnggdG8gZmluZCBsaW5lcyB3aXRoIG5vIGNvZGUuCiByeF9ibGFuayA9IHJlLmNvbXBpbGUocideXHMqKCMuKik/JCcpCiAKLWNsYXNzIElnbm9yZToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kdWxlcyA9IE5vbmUsIGRpcnMgPSBOb25lKToKLSAgICAgICAgc2VsZi5fbW9kcyA9IG1vZHVsZXMgb3IgW10KLSAgICAgICAgc2VsZi5fZGlycyA9IGRpcnMgb3IgW10KLQotICAgICAgICBzZWxmLl9kaXJzID0gbGlzdChtYXAob3MucGF0aC5ub3JtcGF0aCwgc2VsZi5fZGlycykpCitjbGFzcyBfSWdub3JlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGVzPU5vbmUsIGRpcnM9Tm9uZSk6CisgICAgICAgIHNlbGYuX21vZHMgPSBzZXQoKSBpZiBub3QgbW9kdWxlcyBlbHNlIHNldChtb2R1bGVzKQorICAgICAgICBzZWxmLl9kaXJzID0gW10gaWYgbm90IGRpcnMgZWxzZSBbb3MucGF0aC5ub3JtcGF0aChkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGQgaW4gZGlyc10KICAgICAgICAgc2VsZi5faWdub3JlID0geyAnPHN0cmluZz4nOiAxIH0KIAogICAgIGRlZiBuYW1lcyhzZWxmLCBmaWxlbmFtZSwgbW9kdWxlbmFtZSk6CkBAIC0xNDAsMjQgKzE0MCwyMiBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lnbm9yZVttb2R1bGVuYW1lXQogCiAgICAgICAgICMgaGF2ZW4ndCBzZWVuIHRoaXMgb25lIGJlZm9yZSwgc28gc2VlIGlmIHRoZSBtb2R1bGUgbmFtZSBpcwotICAgICAgICAjIG9uIHRoZSBpZ25vcmUgbGlzdC4gIE5lZWQgdG8gdGFrZSBzb21lIGNhcmUgc2luY2UgaWdub3JpbmcKLSAgICAgICAgIyAiY21wIiBtdXNuJ3QgbWVhbiBpZ25vcmluZyAiY21wY2FjaGUiIGJ1dCBpZ25vcmluZwotICAgICAgICAjICJTcGFtIiBtdXN0IGFsc28gbWVhbiBpZ25vcmluZyAiU3BhbS5FZ2dzIi4KKyAgICAgICAgIyBvbiB0aGUgaWdub3JlIGxpc3QuCisgICAgICAgIGlmIG1vZHVsZW5hbWUgaW4gc2VsZi5fbW9kczogICMgSWRlbnRpY2FsIG5hbWVzLCBzbyBpZ25vcmUKKyAgICAgICAgICAgIHNlbGYuX2lnbm9yZVttb2R1bGVuYW1lXSA9IDEKKyAgICAgICAgICAgIHJldHVybiAxCisKKyAgICAgICAgIyBjaGVjayBpZiB0aGUgbW9kdWxlIGlzIGEgcHJvcGVyIHN1Ym1vZHVsZSBvZiBzb21ldGhpbmcgb24KKyAgICAgICAgIyB0aGUgaWdub3JlIGxpc3QKICAgICAgICAgZm9yIG1vZCBpbiBzZWxmLl9tb2RzOgotICAgICAgICAgICAgaWYgbW9kID09IG1vZHVsZW5hbWU6ICAjIElkZW50aWNhbCBuYW1lcywgc28gaWdub3JlCi0gICAgICAgICAgICAgICAgc2VsZi5faWdub3JlW21vZHVsZW5hbWVdID0gMQotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSBtb2R1bGUgaXMgYSBwcm9wZXIgc3VibW9kdWxlIG9mIHNvbWV0aGluZyBvbgotICAgICAgICAgICAgIyB0aGUgaWdub3JlIGxpc3QKLSAgICAgICAgICAgIG4gPSBsZW4obW9kKQotICAgICAgICAgICAgIyAod2lsbCBub3Qgb3ZlcmZsb3cgc2luY2UgaWYgdGhlIGZpcnN0IG4gY2hhcmFjdGVycyBhcmUgdGhlCi0gICAgICAgICAgICAjIHNhbWUgYW5kIHRoZSBuYW1lIGhhcyBub3QgYWxyZWFkeSBvY2N1cnJlZCwgdGhlbiB0aGUgc2l6ZQotICAgICAgICAgICAgIyBvZiAibmFtZSIgaXMgZ3JlYXRlciB0aGFuIHRoYXQgb2YgIm1vZCIpCi0gICAgICAgICAgICBpZiBtb2QgPT0gbW9kdWxlbmFtZVs6bl0gYW5kIG1vZHVsZW5hbWVbbl0gPT0gJy4nOgorICAgICAgICAgICAgIyBOZWVkIHRvIHRha2Ugc29tZSBjYXJlIHNpbmNlIGlnbm9yaW5nCisgICAgICAgICAgICAjICJjbXAiIG11c3RuJ3QgbWVhbiBpZ25vcmluZyAiY21wY2FjaGUiIGJ1dCBpZ25vcmluZworICAgICAgICAgICAgIyAiU3BhbSIgbXVzdCBhbHNvIG1lYW4gaWdub3JpbmcgIlNwYW0uRWdncyIuCisgICAgICAgICAgICBpZiBtb2R1bGVuYW1lLnN0YXJ0c3dpdGgobW9kICsgJy4nKToKICAgICAgICAgICAgICAgICBzZWxmLl9pZ25vcmVbbW9kdWxlbmFtZV0gPSAxCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKIAotICAgICAgICAjIE5vdyBjaGVjayB0aGF0IF9fZmlsZV9fIGlzbid0IGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMKKyAgICAgICAgIyBOb3cgY2hlY2sgdGhhdCBmaWxlbmFtZSBpc24ndCBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzCiAgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6CiAgICAgICAgICAgICAjIG11c3QgYmUgYSBidWlsdC1pbiwgc28gd2UgbXVzdCBpZ25vcmUKICAgICAgICAgICAgIHNlbGYuX2lnbm9yZVttb2R1bGVuYW1lXSA9IDEKQEAgLTE4MCwxNCArMTc4LDE0IEBACiAgICAgICAgIHNlbGYuX2lnbm9yZVttb2R1bGVuYW1lXSA9IDAKICAgICAgICAgcmV0dXJuIDAKIAotZGVmIG1vZG5hbWUocGF0aCk6CitkZWYgX21vZG5hbWUocGF0aCk6CiAgICAgIiIiUmV0dXJuIGEgcGxhdXNpYmxlIG1vZHVsZSBuYW1lIGZvciB0aGUgcGF0Y2guIiIiCiAKICAgICBiYXNlID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQogICAgIGZpbGVuYW1lLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGJhc2UpCiAgICAgcmV0dXJuIGZpbGVuYW1lCiAKLWRlZiBmdWxsbW9kbmFtZShwYXRoKToKK2RlZiBfZnVsbG1vZG5hbWUocGF0aCk6CiAgICAgIiIiUmV0dXJuIGEgcGxhdXNpYmxlIG1vZHVsZSBuYW1lIGZvciB0aGUgcGF0aC4iIiIKIAogICAgICMgSWYgdGhlIGZpbGUgJ3BhdGgnIGlzIHBhcnQgb2YgYSBwYWNrYWdlLCB0aGVuIHRoZSBmaWxlbmFtZSBpc24ndApAQCAtMjU4LDEzICsyNTYsMTMgQEAKICAgICAgICAgb3RoZXJfY2FsbGVkZnVuY3MgPSBvdGhlci5jYWxsZWRmdW5jcwogICAgICAgICBvdGhlcl9jYWxsZXJzID0gb3RoZXIuY2FsbGVycwogCi0gICAgICAgIGZvciBrZXkgaW4gb3RoZXJfY291bnRzLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBvdGhlcl9jb3VudHM6CiAgICAgICAgICAgICBjb3VudHNba2V5XSA9IGNvdW50cy5nZXQoa2V5LCAwKSArIG90aGVyX2NvdW50c1trZXldCiAKLSAgICAgICAgZm9yIGtleSBpbiBvdGhlcl9jYWxsZWRmdW5jcy5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gb3RoZXJfY2FsbGVkZnVuY3M6CiAgICAgICAgICAgICBjYWxsZWRmdW5jc1trZXldID0gMQogCi0gICAgICAgIGZvciBrZXkgaW4gb3RoZXJfY2FsbGVycy5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gb3RoZXJfY2FsbGVyczoKICAgICAgICAgICAgIGNhbGxlcnNba2V5XSA9IDEKIAogICAgIGRlZiB3cml0ZV9yZXN1bHRzKHNlbGYsIHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PUZhbHNlLCBjb3ZlcmRpcj1Ob25lKToKQEAgLTI3NCw3ICsyNzIsNyBAQAogICAgICAgICBpZiBzZWxmLmNhbGxlZGZ1bmNzOgogICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgcHJpbnQoImZ1bmN0aW9ucyBjYWxsZWQ6IikKLSAgICAgICAgICAgIGNhbGxzID0gc2VsZi5jYWxsZWRmdW5jcy5rZXlzKCkKKyAgICAgICAgICAgIGNhbGxzID0gc2VsZi5jYWxsZWRmdW5jcwogICAgICAgICAgICAgZm9yIGZpbGVuYW1lLCBtb2R1bGVuYW1lLCBmdW5jbmFtZSBpbiBzb3J0ZWQoY2FsbHMpOgogICAgICAgICAgICAgICAgIHByaW50KCgiZmlsZW5hbWU6ICVzLCBtb2R1bGVuYW1lOiAlcywgZnVuY25hbWU6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbW9kdWxlbmFtZSwgZnVuY25hbWUpKSkKQEAgLTI4NCw3ICsyODIsNyBAQAogICAgICAgICAgICAgcHJpbnQoImNhbGxpbmcgcmVsYXRpb25zaGlwczoiKQogICAgICAgICAgICAgbGFzdGZpbGUgPSBsYXN0Y2ZpbGUgPSAiIgogICAgICAgICAgICAgZm9yICgocGZpbGUsIHBtb2QsIHBmdW5jKSwgKGNmaWxlLCBjbW9kLCBjZnVuYykpIFwKLSAgICAgICAgICAgICAgICAgICAgaW4gc29ydGVkKHNlbGYuY2FsbGVycy5rZXlzKCkpOgorICAgICAgICAgICAgICAgICAgICBpbiBzb3J0ZWQoc2VsZi5jYWxsZXJzKToKICAgICAgICAgICAgICAgICBpZiBwZmlsZSAhPSBsYXN0ZmlsZToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgICAgICAgICBwcmludCgiKioqIiwgcGZpbGUsICIqKioiKQpAQCAtMjk4LDcgKzI5Niw3IEBACiAgICAgICAgICMgdHVybiB0aGUgY291bnRzIGRhdGEgKCIoZmlsZW5hbWUsIGxpbmVubykgPSBjb3VudCIpIGludG8gc29tZXRoaW5nCiAgICAgICAgICMgYWNjZXNzaWJsZSBvbiBhIHBlci1maWxlIGJhc2lzCiAgICAgICAgIHBlcl9maWxlID0ge30KLSAgICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbm8gaW4gc2VsZi5jb3VudHMua2V5cygpOgorICAgICAgICBmb3IgZmlsZW5hbWUsIGxpbmVubyBpbiBzZWxmLmNvdW50czoKICAgICAgICAgICAgIGxpbmVzX2hpdCA9IHBlcl9maWxlW2ZpbGVuYW1lXSA9IHBlcl9maWxlLmdldChmaWxlbmFtZSwge30pCiAgICAgICAgICAgICBsaW5lc19oaXRbbGluZW5vXSA9IHNlbGYuY291bnRzWyhmaWxlbmFtZSwgbGluZW5vKV0KIApAQCAtMzE0LDMyICszMTIsMzMgQEAKIAogICAgICAgICAgICAgaWYgY292ZXJkaXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBkaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKGZpbGVuYW1lKSkKLSAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gbW9kbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gX21vZG5hbWUoZmlsZW5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGRpciA9IGNvdmVyZGlyCiAgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGRpcik6CiAgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcikKLSAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gZnVsbG1vZG5hbWUoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlbmFtZSA9IF9mdWxsbW9kbmFtZShmaWxlbmFtZSkKIAogICAgICAgICAgICAgIyBJZiBkZXNpcmVkLCBnZXQgYSBsaXN0IG9mIHRoZSBsaW5lIG51bWJlcnMgd2hpY2ggcmVwcmVzZW50CiAgICAgICAgICAgICAjIGV4ZWN1dGFibGUgY29udGVudCAocmV0dXJuZWQgYXMgYSBkaWN0IGZvciBiZXR0ZXIgbG9va3VwIHNwZWVkKQogICAgICAgICAgICAgaWYgc2hvd19taXNzaW5nOgotICAgICAgICAgICAgICAgIGxub3RhYiA9IGZpbmRfZXhlY3V0YWJsZV9saW5lbm9zKGZpbGVuYW1lKQorICAgICAgICAgICAgICAgIGxub3RhYiA9IF9maW5kX2V4ZWN1dGFibGVfbGluZW5vcyhmaWxlbmFtZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbG5vdGFiID0ge30KIAogICAgICAgICAgICAgc291cmNlID0gbGluZWNhY2hlLmdldGxpbmVzKGZpbGVuYW1lKQogICAgICAgICAgICAgY292ZXJwYXRoID0gb3MucGF0aC5qb2luKGRpciwgbW9kdWxlbmFtZSArICIuY292ZXIiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgXyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmcC5yZWFkbGluZSkKICAgICAgICAgICAgIG5faGl0cywgbl9saW5lcyA9IHNlbGYud3JpdGVfcmVzdWx0c19maWxlKGNvdmVycGF0aCwgc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5vdGFiLCBjb3VudCkKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG5vdGFiLCBjb3VudCwgZW5jb2RpbmcpCiAgICAgICAgICAgICBpZiBzdW1tYXJ5IGFuZCBuX2xpbmVzOgogICAgICAgICAgICAgICAgIHBlcmNlbnQgPSBpbnQoMTAwICogbl9oaXRzIC8gbl9saW5lcykKICAgICAgICAgICAgICAgICBzdW1zW21vZHVsZW5hbWVdID0gbl9saW5lcywgcGVyY2VudCwgbW9kdWxlbmFtZSwgZmlsZW5hbWUKIAogICAgICAgICBpZiBzdW1tYXJ5IGFuZCBzdW1zOgogICAgICAgICAgICAgcHJpbnQoImxpbmVzICAgY292JSAgIG1vZHVsZSAgIChwYXRoKSIpCi0gICAgICAgICAgICBmb3IgbSBpbiBzb3J0ZWQoc3Vtcy5rZXlzKCkpOgorICAgICAgICAgICAgZm9yIG0gaW4gc29ydGVkKHN1bXMpOgogICAgICAgICAgICAgICAgIG5fbGluZXMsIHBlcmNlbnQsIG1vZHVsZW5hbWUsIGZpbGVuYW1lID0gc3Vtc1ttXQogICAgICAgICAgICAgICAgIHByaW50KCIlNWQgICAlM2QlJSAgICVzICAgKCVzKSIgJSBzdW1zW21dKQogCkBAIC0zNTEsMTEgKzM1MCwxMSBAQAogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCJDYW4ndCBzYXZlIGNvdW50cyBmaWxlcyBiZWNhdXNlICVzIiAlIGVyciwgZmlsZT1zeXMuc3RkZXJyKQogCi0gICAgZGVmIHdyaXRlX3Jlc3VsdHNfZmlsZShzZWxmLCBwYXRoLCBsaW5lcywgbG5vdGFiLCBsaW5lc19oaXQpOgorICAgIGRlZiB3cml0ZV9yZXN1bHRzX2ZpbGUoc2VsZiwgcGF0aCwgbGluZXMsIGxub3RhYiwgbGluZXNfaGl0LCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIGEgY292ZXJhZ2UgcmVzdWx0cyBmaWxlIGluIHBhdGguIiIiCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgInciKQorICAgICAgICAgICAgb3V0ZmlsZSA9IG9wZW4ocGF0aCwgInciLCBlbmNvZGluZz1lbmNvZGluZykKICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoKCJ0cmFjZTogQ291bGQgbm90IG9wZW4gJXIgZm9yIHdyaXRpbmc6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIiAlIChwYXRoLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQpAQCAtMzYzLDggKzM2Miw3IEBACiAKICAgICAgICAgbl9saW5lcyA9IDAKICAgICAgICAgbl9oaXRzID0gMAotICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgotICAgICAgICAgICAgbGluZW5vID0gaSArIDEKKyAgICAgICAgZm9yIGxpbmVubywgbGluZSBpbiBlbnVtZXJhdGUobGluZXMsIDEpOgogICAgICAgICAgICAgIyBkbyB0aGUgYmxhbmsvY29tbWVudCBtYXRjaCB0byB0cnkgdG8gbWFyayBtb3JlIGxpbmVzCiAgICAgICAgICAgICAjIChoZWxwIHRoZSByZWFkZXIgZmluZCBzdHVmZiB0aGF0IGhhc24ndCBiZWVuIGNvdmVyZWQpCiAgICAgICAgICAgICBpZiBsaW5lbm8gaW4gbGluZXNfaGl0OgpAQCAtMzc3LDE3ICszNzUsMTcgQEAKICAgICAgICAgICAgICAgICAjIGxpbmVzIHByZWNlZGVkIGJ5IG5vIG1hcmtzIHdlcmVuJ3QgaGl0CiAgICAgICAgICAgICAgICAgIyBIaWdobGlnaHQgdGhlbSBpZiBzbyBpbmRpY2F0ZWQsIHVubGVzcyB0aGUgbGluZSBjb250YWlucwogICAgICAgICAgICAgICAgICMgI3ByYWdtYTogTk8gQ09WRVIKLSAgICAgICAgICAgICAgICBpZiBsaW5lbm8gaW4gbG5vdGFiIGFuZCBub3QgUFJBR01BX05PQ09WRVIgaW4gbGluZXNbaV06CisgICAgICAgICAgICAgICAgaWYgbGluZW5vIGluIGxub3RhYiBhbmQgbm90IFBSQUdNQV9OT0NPVkVSIGluIGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIG91dGZpbGUud3JpdGUoIj4+Pj4+PiAiKQogICAgICAgICAgICAgICAgICAgICBuX2xpbmVzICs9IDEKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKCIgICAgICAgIikKLSAgICAgICAgICAgIG91dGZpbGUud3JpdGUobGluZXNbaV0uZXhwYW5kdGFicyg4KSkKKyAgICAgICAgICAgIG91dGZpbGUud3JpdGUobGluZS5leHBhbmR0YWJzKDgpKQogICAgICAgICBvdXRmaWxlLmNsb3NlKCkKIAogICAgICAgICByZXR1cm4gbl9oaXRzLCBuX2xpbmVzCiAKLWRlZiBmaW5kX2xpbmVzX2Zyb21fY29kZShjb2RlLCBzdHJzKToKK2RlZiBfZmluZF9saW5lc19mcm9tX2NvZGUoY29kZSwgc3Rycyk6CiAgICAgIiIiUmV0dXJuIGRpY3Qgd2hlcmUga2V5cyBhcmUgbGluZXMgaW4gdGhlIGxpbmUgbnVtYmVyIHRhYmxlLiIiIgogICAgIGxpbmVub3MgPSB7fQogCkBAIC0zOTcsMTkgKzM5NSwxOSBAQAogCiAgICAgcmV0dXJuIGxpbmVub3MKIAotZGVmIGZpbmRfbGluZXMoY29kZSwgc3Rycyk6CitkZWYgX2ZpbmRfbGluZXMoY29kZSwgc3Rycyk6CiAgICAgIiIiUmV0dXJuIGxpbmVubyBkaWN0IGZvciBhbGwgY29kZSBvYmplY3RzIHJlYWNoYWJsZSBmcm9tIGNvZGUuIiIiCiAgICAgIyBnZXQgYWxsIG9mIHRoZSBsaW5lbm8gaW5mb3JtYXRpb24gZnJvbSB0aGUgY29kZSBvZiB0aGlzIHNjb3BlIGxldmVsCi0gICAgbGluZW5vcyA9IGZpbmRfbGluZXNfZnJvbV9jb2RlKGNvZGUsIHN0cnMpCisgICAgbGluZW5vcyA9IF9maW5kX2xpbmVzX2Zyb21fY29kZShjb2RlLCBzdHJzKQogCiAgICAgIyBhbmQgY2hlY2sgdGhlIGNvbnN0YW50cyBmb3IgcmVmZXJlbmNlcyB0byBvdGhlciBjb2RlIG9iamVjdHMKICAgICBmb3IgYyBpbiBjb2RlLmNvX2NvbnN0czoKICAgICAgICAgaWYgaW5zcGVjdC5pc2NvZGUoYyk6CiAgICAgICAgICAgICAjIGZpbmQgYW5vdGhlciBjb2RlIG9iamVjdCwgc28gcmVjdXJzZSBpbnRvIGl0Ci0gICAgICAgICAgICBsaW5lbm9zLnVwZGF0ZShmaW5kX2xpbmVzKGMsIHN0cnMpKQorICAgICAgICAgICAgbGluZW5vcy51cGRhdGUoX2ZpbmRfbGluZXMoYywgc3RycykpCiAgICAgcmV0dXJuIGxpbmVub3MKIAotZGVmIGZpbmRfc3RyaW5ncyhmaWxlbmFtZSwgZW5jb2Rpbmc9Tm9uZSk6CitkZWYgX2ZpbmRfc3RyaW5ncyhmaWxlbmFtZSwgZW5jb2Rpbmc9Tm9uZSk6CiAgICAgIiIiUmV0dXJuIGEgZGljdCBvZiBwb3NzaWJsZSBkb2NzdHJpbmcgcG9zaXRpb25zLgogCiAgICAgVGhlIGRpY3QgbWFwcyBsaW5lIG51bWJlcnMgdG8gc3RyaW5ncy4gIFRoZXJlIGlzIGFuIGVudHJ5IGZvcgpAQCAtNDIwLDMxICs0MTgsMzEgQEAKICAgICAjIElmIHRoZSBmaXJzdCB0b2tlbiBpcyBhIHN0cmluZywgdGhlbiBpdCdzIHRoZSBtb2R1bGUgZG9jc3RyaW5nLgogICAgICMgQWRkIHRoaXMgc3BlY2lhbCBjYXNlIHNvIHRoYXQgdGhlIHRlc3QgaW4gdGhlIGxvb3AgcGFzc2VzLgogICAgIHByZXZfdHR5cGUgPSB0b2tlbi5JTkRFTlQKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgZm9yIHR0eXBlLCB0c3RyLCBzdGFydCwgZW5kLCBsaW5lIGluIHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKToKLSAgICAgICAgaWYgdHR5cGUgPT0gdG9rZW4uU1RSSU5HOgotICAgICAgICAgICAgaWYgcHJldl90dHlwZSA9PSB0b2tlbi5JTkRFTlQ6Ci0gICAgICAgICAgICAgICAgc2xpbmUsIHNjb2wgPSBzdGFydAotICAgICAgICAgICAgICAgIGVsaW5lLCBlY29sID0gZW5kCi0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2xpbmUsIGVsaW5lICsgMSk6Ci0gICAgICAgICAgICAgICAgICAgIGRbaV0gPSAxCi0gICAgICAgIHByZXZfdHR5cGUgPSB0dHlwZQotICAgIGYuY2xvc2UoKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgIHRvayA9IHRva2VuaXplLmdlbmVyYXRlX3Rva2VucyhmLnJlYWRsaW5lKQorICAgICAgICBmb3IgdHR5cGUsIHRzdHIsIHN0YXJ0LCBlbmQsIGxpbmUgaW4gdG9rOgorICAgICAgICAgICAgaWYgdHR5cGUgPT0gdG9rZW4uU1RSSU5HOgorICAgICAgICAgICAgICAgIGlmIHByZXZfdHR5cGUgPT0gdG9rZW4uSU5ERU5UOgorICAgICAgICAgICAgICAgICAgICBzbGluZSwgc2NvbCA9IHN0YXJ0CisgICAgICAgICAgICAgICAgICAgIGVsaW5lLCBlY29sID0gZW5kCisgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKHNsaW5lLCBlbGluZSArIDEpOgorICAgICAgICAgICAgICAgICAgICAgICAgZFtpXSA9IDEKKyAgICAgICAgICAgIHByZXZfdHR5cGUgPSB0dHlwZQogICAgIHJldHVybiBkCiAKLWRlZiBmaW5kX2V4ZWN1dGFibGVfbGluZW5vcyhmaWxlbmFtZSk6CitkZWYgX2ZpbmRfZXhlY3V0YWJsZV9saW5lbm9zKGZpbGVuYW1lKToKICAgICAiIiJSZXR1cm4gZGljdCB3aGVyZSBrZXlzIGFyZSBsaW5lIG51bWJlcnMgaW4gdGhlIGxpbmUgbnVtYmVyIHRhYmxlLiIiIgogICAgIHRyeToKLSAgICAgICAgd2l0aCBpby5GaWxlSU8oZmlsZW5hbWUsICdyJykgYXMgZmlsZToKLSAgICAgICAgICAgIGVuY29kaW5nLCBsaW5lcyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhmaWxlLnJlYWRsaW5lKQotICAgICAgICBwcm9nID0gb3BlbihmaWxlbmFtZSwgInIiLCBlbmNvZGluZz1lbmNvZGluZykucmVhZCgpCisgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHByb2cgPSBmLnJlYWQoKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBmLmVuY29kaW5nCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgogICAgICAgICBwcmludCgoIk5vdCBwcmludGluZyBjb3ZlcmFnZSBkYXRhIGZvciAlcjogJXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgcmV0dXJuIHt9CiAgICAgY29kZSA9IGNvbXBpbGUocHJvZywgZmlsZW5hbWUsICJleGVjIikKLSAgICBzdHJzID0gZmluZF9zdHJpbmdzKGZpbGVuYW1lLCBlbmNvZGluZykKLSAgICByZXR1cm4gZmluZF9saW5lcyhjb2RlLCBzdHJzKQorICAgIHN0cnMgPSBfZmluZF9zdHJpbmdzKGZpbGVuYW1lLCBlbmNvZGluZykKKyAgICByZXR1cm4gX2ZpbmRfbGluZXMoY29kZSwgc3RycykKIAogY2xhc3MgVHJhY2U6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvdW50PTEsIHRyYWNlPTEsIGNvdW50ZnVuY3M9MCwgY291bnRjYWxsZXJzPTAsCkBAIC00NjksOSArNDY3LDggQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuaW5maWxlID0gaW5maWxlCiAgICAgICAgIHNlbGYub3V0ZmlsZSA9IG91dGZpbGUKLSAgICAgICAgc2VsZi5pZ25vcmUgPSBJZ25vcmUoaWdub3JlbW9kcywgaWdub3JlZGlycykKKyAgICAgICAgc2VsZi5pZ25vcmUgPSBfSWdub3JlKGlnbm9yZW1vZHMsIGlnbm9yZWRpcnMpCiAgICAgICAgIHNlbGYuY291bnRzID0ge30gICAjIGtleXMgYXJlIChmaWxlbmFtZSwgbGluZW51bWJlcikKLSAgICAgICAgc2VsZi5ibGFiYmVkID0ge30gIyBmb3IgZGVidWdnaW5nCiAgICAgICAgIHNlbGYucGF0aHRvYmFzZW5hbWUgPSB7fSAjIGZvciBtZW1vaXppbmcgb3MucGF0aC5iYXNlbmFtZQogICAgICAgICBzZWxmLmRvbm90aGluZyA9IDAKICAgICAgICAgc2VsZi50cmFjZSA9IHRyYWNlCkBAIC01MDEsMTUgKzQ5OCw3IEBACiAgICAgZGVmIHJ1bihzZWxmLCBjbWQpOgogICAgICAgICBpbXBvcnQgX19tYWluX18KICAgICAgICAgZGljdCA9IF9fbWFpbl9fLl9fZGljdF9fCi0gICAgICAgIGlmIG5vdCBzZWxmLmRvbm90aGluZzoKLSAgICAgICAgICAgIHRocmVhZGluZy5zZXR0cmFjZShzZWxmLmdsb2JhbHRyYWNlKQotICAgICAgICAgICAgc3lzLnNldHRyYWNlKHNlbGYuZ2xvYmFsdHJhY2UpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWMoY21kLCBkaWN0LCBkaWN0KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaWYgbm90IHNlbGYuZG9ub3RoaW5nOgotICAgICAgICAgICAgICAgIHN5cy5zZXR0cmFjZShOb25lKQotICAgICAgICAgICAgICAgIHRocmVhZGluZy5zZXR0cmFjZShOb25lKQorICAgICAgICBzZWxmLnJ1bmN0eChjbWQsIGRpY3QsIGRpY3QpCiAKICAgICBkZWYgcnVuY3R4KHNlbGYsIGNtZCwgZ2xvYmFscz1Ob25lLCBsb2NhbHM9Tm9uZSk6CiAgICAgICAgIGlmIGdsb2JhbHMgaXMgTm9uZTogZ2xvYmFscyA9IHt9CkBAIC01MzcsNyArNTI2LDcgQEAKICAgICAgICAgY29kZSA9IGZyYW1lLmZfY29kZQogICAgICAgICBmaWxlbmFtZSA9IGNvZGUuY29fZmlsZW5hbWUKICAgICAgICAgaWYgZmlsZW5hbWU6Ci0gICAgICAgICAgICBtb2R1bGVuYW1lID0gbW9kbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgIG1vZHVsZW5hbWUgPSBfbW9kbmFtZShmaWxlbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1vZHVsZW5hbWUgPSBOb25lCiAKQEAgLTYwNCw5ICs1OTMsOSBAQAogICAgICAgICAgICAgY29kZSA9IGZyYW1lLmZfY29kZQogICAgICAgICAgICAgZmlsZW5hbWUgPSBmcmFtZS5mX2dsb2JhbHMuZ2V0KCdfX2ZpbGVfXycsIE5vbmUpCiAgICAgICAgICAgICBpZiBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICAjIFhYWCBtb2RuYW1lKCkgZG9lc24ndCB3b3JrIHJpZ2h0IGZvciBwYWNrYWdlcywgc28KKyAgICAgICAgICAgICAgICAjIFhYWCBfbW9kbmFtZSgpIGRvZXNuJ3Qgd29yayByaWdodCBmb3IgcGFja2FnZXMsIHNvCiAgICAgICAgICAgICAgICAgIyB0aGUgaWdub3JlIHN1cHBvcnQgd29uJ3Qgd29yayByaWdodCBmb3IgcGFja2FnZXMKLSAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gbW9kbmFtZShmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGVuYW1lID0gX21vZG5hbWUoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgaWYgbW9kdWxlbmFtZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgaWdub3JlX2l0ID0gc2VsZi5pZ25vcmUubmFtZXMoZmlsZW5hbWUsIG1vZHVsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfaXQ6CkBAIC02OTksNyArNjg4LDcgQEAKIAogICAgIGZvciBvcHQsIHZhbCBpbiBvcHRzOgogICAgICAgICBpZiBvcHQgPT0gIi0taGVscCI6Ci0gICAgICAgICAgICB1c2FnZShzeXMuc3Rkb3V0KQorICAgICAgICAgICAgX3VzYWdlKHN5cy5zdGRvdXQpCiAgICAgICAgICAgICBzeXMuZXhpdCgwKQogCiAgICAgICAgIGlmIG9wdCA9PSAiLS12ZXJzaW9uIjoKQEAgLTgyMiw1ICs4MTEsNDcgQEAKICAgICAgICAgaWYgbm90IG5vX3JlcG9ydDoKICAgICAgICAgICAgIHJlc3VsdHMud3JpdGVfcmVzdWx0cyhtaXNzaW5nLCBzdW1tYXJ5PXN1bW1hcnksIGNvdmVyZGlyPWNvdmVyZGlyKQogCisjICBEZXByZWNhdGVkIEFQSQorZGVmIHVzYWdlKG91dGZpbGUpOgorICAgIF93YXJuKCJUaGUgdHJhY2UudXNhZ2UoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICBfdXNhZ2Uob3V0ZmlsZSkKKworY2xhc3MgSWdub3JlKF9JZ25vcmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGVzPU5vbmUsIGRpcnM9Tm9uZSk6CisgICAgICAgIF93YXJuKCJUaGUgY2xhc3MgdHJhY2UuSWdub3JlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAgICAgX0lnbm9yZS5fX2luaXRfXyhzZWxmLCBtb2R1bGVzLCBkaXJzKQorCitkZWYgbW9kbmFtZShwYXRoKToKKyAgICBfd2FybigiVGhlIHRyYWNlLm1vZG5hbWUoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gX21vZG5hbWUocGF0aCkKKworZGVmIGZ1bGxtb2RuYW1lKHBhdGgpOgorICAgIF93YXJuKCJUaGUgdHJhY2UuZnVsbG1vZG5hbWUoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gX2Z1bGxtb2RuYW1lKHBhdGgpCisKK2RlZiBmaW5kX2xpbmVzX2Zyb21fY29kZShjb2RlLCBzdHJzKToKKyAgICBfd2FybigiVGhlIHRyYWNlLmZpbmRfbGluZXNfZnJvbV9jb2RlKCkgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgcmV0dXJuIF9maW5kX2xpbmVzX2Zyb21fY29kZShjb2RlLCBzdHJzKQorCitkZWYgZmluZF9saW5lcyhjb2RlLCBzdHJzKToKKyAgICBfd2FybigiVGhlIHRyYWNlLmZpbmRfbGluZXMoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gX2ZpbmRfbGluZXMoY29kZSwgc3RycykKKworZGVmIGZpbmRfc3RyaW5ncyhmaWxlbmFtZSwgZW5jb2Rpbmc9Tm9uZSk6CisgICAgX3dhcm4oIlRoZSB0cmFjZS5maW5kX3N0cmluZ3MoKSBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICByZXR1cm4gX2ZpbmRfc3RyaW5ncyhmaWxlbmFtZSwgZW5jb2Rpbmc9Tm9uZSkKKworZGVmIGZpbmRfZXhlY3V0YWJsZV9saW5lbm9zKGZpbGVuYW1lKToKKyAgICBfd2FybigiVGhlIHRyYWNlLmZpbmRfZXhlY3V0YWJsZV9saW5lbm9zKCkgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCIsCisgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgcmV0dXJuIF9maW5kX2V4ZWN1dGFibGVfbGluZW5vcyhmaWxlbmFtZSkKKwogaWYgX19uYW1lX189PSdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlLnB5IGIvTGliL3R1cnRsZS5weQppbmRleCAwYzQzOWYxLi4yZmY1NDI3IDEwMDY0NAotLS0gYS9MaWIvdHVydGxlLnB5CisrKyBiL0xpYi90dXJ0bGUucHkKQEAgLTEwOSw2ICsxMDksNyBAQAogaW1wb3J0IG1hdGgKIGltcG9ydCB0aW1lCiBpbXBvcnQgb3MKK2ltcG9ydCBpbnNwZWN0CiAKIGZyb20gb3MucGF0aCBpbXBvcnQgaXNmaWxlLCBzcGxpdCwgam9pbgogZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpAQCAtMTY5LDkgKzE3MCw4IEBACiAKIGRlZiBjb25maWdfZGljdChmaWxlbmFtZSk6CiAgICAgIiIiQ29udmVydCBjb250ZW50IG9mIGNvbmZpZy1maWxlIGludG8gZGljdGlvbmFyeS4iIiIKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgInIiKQotICAgIGNmZ2xpbmVzID0gZi5yZWFkbGluZXMoKQotICAgIGYuY2xvc2UoKQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiKSBhcyBmOgorICAgICAgICBjZmdsaW5lcyA9IGYucmVhZGxpbmVzKCkKICAgICBjZmdkaWN0ID0ge30KICAgICBmb3IgbGluZSBpbiBjZmdsaW5lczoKICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQpAQCAtMzE0Nyw3ICszMTQ3LDcgQEAKICAgICAgICAgaWYgcGVuIGlzIGRvd24uIEFsbCBvdGhlciBtZXRob2RlcyBmb3IgdHVydGxlIG1vdmVtZW50IGRlcGVuZAogICAgICAgICBvbiB0aGlzIG9uZS4KICAgICAgICAgIiIiCi0gICAgICAgICMjIFZlcnNpb24gbWl0IHVuZG8tc3R1ZmYKKyAgICAgICAgIyMgVmVyc2lvbiB3aXRoIHVuZG8tc3R1ZmYKICAgICAgICAgZ29fbW9kZXMgPSAoIHNlbGYuX2RyYXdpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wZW5jb2xvciwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BlbnNpemUsCkBAIC0zODkzLDMxICszODkzLDM1IEBACiAKIAogZGVmIGdldG1ldGhwYXJsaXN0KG9iKToKLSAgICAiR2V0IHN0cmluZ3MgZGVzY3JpYmluZyB0aGUgYXJndW1lbnRzIGZvciB0aGUgZ2l2ZW4gb2JqZWN0IgotICAgIGFyZ1RleHQxID0gYXJnVGV4dDIgPSAiIgorICAgICIiIkdldCBzdHJpbmdzIGRlc2NyaWJpbmcgdGhlIGFyZ3VtZW50cyBmb3IgdGhlIGdpdmVuIG9iamVjdAorCisgICAgUmV0dXJucyBhIHBhaXIgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgZnVuY3Rpb24gcGFyYW1ldGVyIGxpc3RzCisgICAgaW5jbHVkaW5nIHBhcmVudGhlc2lzLiAgVGhlIGZpcnN0IHN0cmluZyBpcyBzdWl0YWJsZSBmb3IgdXNlIGluCisgICAgZnVuY3Rpb24gZGVmaW5pdGlvbiBhbmQgdGhlIHNlY29uZCBpcyBzdWl0YWJsZSBmb3IgdXNlIGluIGZ1bmN0aW9uCisgICAgY2FsbC4gIFRoZSAic2VsZiIgcGFyYW1ldGVyIGlzIG5vdCBpbmNsdWRlZC4KKyAgICAiIiIKKyAgICBkZWZUZXh0ID0gY2FsbFRleHQgPSAiIgogICAgICMgYml0IG9mIGEgaGFjayBmb3IgbWV0aG9kcyAtIHR1cm4gaXQgaW50byBhIGZ1bmN0aW9uCiAgICAgIyBidXQgd2UgZHJvcCB0aGUgInNlbGYiIHBhcmFtLgogICAgICMgVHJ5IGFuZCBidWlsZCBvbmUgZm9yIFB5dGhvbiBkZWZpbmVkIGZ1bmN0aW9ucwotICAgIGFyZ09mZnNldCA9IDEKLSAgICBjb3VudGVyID0gb2IuX19jb2RlX18uY29fYXJnY291bnQKLSAgICBpdGVtczIgPSBsaXN0KG9iLl9fY29kZV9fLmNvX3Zhcm5hbWVzW2FyZ09mZnNldDpjb3VudGVyXSkKLSAgICByZWFsQXJncyA9IG9iLl9fY29kZV9fLmNvX3Zhcm5hbWVzW2FyZ09mZnNldDpjb3VudGVyXQorICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3ID0gaW5zcGVjdC5nZXRhcmdzKG9iLl9fY29kZV9fKQorICAgIGl0ZW1zMiA9IGFyZ3NbMTpdCisgICAgcmVhbEFyZ3MgPSBhcmdzWzE6XQogICAgIGRlZmF1bHRzID0gb2IuX19kZWZhdWx0c19fIG9yIFtdCi0gICAgZGVmYXVsdHMgPSBsaXN0KG1hcChsYW1iZGEgbmFtZTogIj0lcyIgJSByZXByKG5hbWUpLCBkZWZhdWx0cykpCisgICAgZGVmYXVsdHMgPSBbIj0lciIgJSAodmFsdWUsKSBmb3IgdmFsdWUgaW4gZGVmYXVsdHNdCiAgICAgZGVmYXVsdHMgPSBbIiJdICogKGxlbihyZWFsQXJncyktbGVuKGRlZmF1bHRzKSkgKyBkZWZhdWx0cwotICAgIGl0ZW1zMSA9IGxpc3QobWFwKGxhbWJkYSBhcmcsIGRmbHQ6IGFyZytkZmx0LCByZWFsQXJncywgZGVmYXVsdHMpKQotICAgIGlmIG9iLl9fY29kZV9fLmNvX2ZsYWdzICYgMHg0OgotICAgICAgICBpdGVtczEuYXBwZW5kKCIqIitvYi5fX2NvZGVfXy5jb192YXJuYW1lc1tjb3VudGVyXSkKLSAgICAgICAgaXRlbXMyLmFwcGVuZCgiKiIrb2IuX19jb2RlX18uY29fdmFybmFtZXNbY291bnRlcl0pCi0gICAgICAgIGNvdW50ZXIgKz0gMQotICAgIGlmIG9iLl9fY29kZV9fLmNvX2ZsYWdzICYgMHg4OgotICAgICAgICBpdGVtczEuYXBwZW5kKCIqKiIrb2IuX19jb2RlX18uY29fdmFybmFtZXNbY291bnRlcl0pCi0gICAgICAgIGl0ZW1zMi5hcHBlbmQoIioqIitvYi5fX2NvZGVfXy5jb192YXJuYW1lc1tjb3VudGVyXSkKLSAgICBhcmdUZXh0MSA9ICIsICIuam9pbihpdGVtczEpCi0gICAgYXJnVGV4dDEgPSAiKCVzKSIgJSBhcmdUZXh0MQotICAgIGFyZ1RleHQyID0gIiwgIi5qb2luKGl0ZW1zMikKLSAgICBhcmdUZXh0MiA9ICIoJXMpIiAlIGFyZ1RleHQyCi0gICAgcmV0dXJuIGFyZ1RleHQxLCBhcmdUZXh0MgorICAgIGl0ZW1zMSA9IFthcmcgKyBkZmx0IGZvciBhcmcsIGRmbHQgaW4gemlwKHJlYWxBcmdzLCBkZWZhdWx0cyldCisgICAgaWYgdmFyYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgaXRlbXMxLmFwcGVuZCgiKiIgKyB2YXJhcmdzKQorICAgICAgICBpdGVtczIuYXBwZW5kKCIqIiArIHZhcmFyZ3MpCisgICAgaWYgdmFya3cgaXMgbm90IE5vbmU6CisgICAgICAgIGl0ZW1zMS5hcHBlbmQoIioqIiArIHZhcmt3KQorICAgICAgICBpdGVtczIuYXBwZW5kKCIqKiIgKyB2YXJrdykKKyAgICBkZWZUZXh0ID0gIiwgIi5qb2luKGl0ZW1zMSkKKyAgICBkZWZUZXh0ID0gIiglcykiICUgZGVmVGV4dAorICAgIGNhbGxUZXh0ID0gIiwgIi5qb2luKGl0ZW1zMikKKyAgICBjYWxsVGV4dCA9ICIoJXMpIiAlIGNhbGxUZXh0CisgICAgcmV0dXJuIGRlZlRleHQsIGNhbGxUZXh0CiAKIGRlZiBfdHVydGxlX2RvY3JldmlzZShkb2NzdHIpOgogICAgICIiIlRvIHJlZHVjZSBkb2NzdHJpbmdzIGZyb20gUmF3VHVydGxlIGNsYXNzIGZvciBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvY29weXJpZ2h0IGIvTGliL3R1cnRsZWRlbW8vX19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFRvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvY29weXJpZ2h0CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdHVydGxlRGVtby5weSBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdHVydGxlRGVtby5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKaW5kZXggMzZiZjE1Yy4uY2JmM2FlYgotLS0gYS9EZW1vL3R1cnRsZS90dXJ0bGVEZW1vLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogCkBAIC0xMSw2ICsxMSw4IEBACiBpbXBvcnQgdHVydGxlCiBpbXBvcnQgdGltZQogCitkZW1vX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoX19maWxlX18pKQorCiBTVEFSVFVQID0gMQogUkVBRFkgPSAyCiBSVU5OSU5HID0gMwpAQCAtMjIsMzcgKzI0LDIwIEBACiB0eHRmb250ID0gKCdMdWNpZGEgQ29uc29sZScsIDgsICdub3JtYWwnKQogCiBkZWYgZ2V0RXhhbXBsZUVudHJpZXMoKToKLSAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgICNwcmludChjd2QsIG9zLmxpc3RkaXIoY3dkKSkKLSAgICBpZiAidHVydGxlRGVtby5weSIgbm90IGluIG9zLmxpc3RkaXIoY3dkKToKLSAgICAgICAgcHJpbnQoIkRpcmVjdG9yeSBvZiB0dXJ0bGVEZW1vIG11c3QgYmUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSEiKQotICAgICAgICBwcmludCgiQnV0IGluIHlvdXIgY2FzZSB0aGlzIGlzIiwgY3dkKQotICAgICAgICBzeXMuZXhpdCgpCi0gICAgZW50cmllczEgPSBbZW50cnkgZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIoY3dkKSBpZgotICAgICAgICAgICAgICAgICAgICAgZW50cnkuc3RhcnRzd2l0aCgidGRlbW9fIikgYW5kCi0gICAgICAgICAgICAgICAgICAgICBub3QgZW50cnkuZW5kc3dpdGgoIi5weWMiKV0KLSAgICBlbnRyaWVzMiA9IFtdCi0gICAgZm9yIGVudHJ5IGluIGVudHJpZXMxOgotICAgICAgICBpZiBlbnRyeS5lbmRzd2l0aCgiLnB5Iik6Ci0gICAgICAgICAgICBlbnRyaWVzMi5hcHBlbmQoZW50cnkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGN3ZCxlbnRyeSkKLSAgICAgICAgICAgIHN5cy5wYXRoLmFwcGVuZChwYXRoKQotICAgICAgICAgICAgc3ViZGlyID0gW2VudHJ5XQotICAgICAgICAgICAgc2NyaXB0cyA9IFtzY3JpcHQgZm9yIHNjcmlwdCBpbiBvcy5saXN0ZGlyKHBhdGgpIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LnN0YXJ0c3dpdGgoInRkZW1vXyIpIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5lbmRzd2l0aCgiLnB5IildCi0gICAgICAgICAgICBlbnRyaWVzMi5hcHBlbmQoc3ViZGlyK3NjcmlwdHMpCi0gICAgcmV0dXJuIGVudHJpZXMyCisgICAgcmV0dXJuIFtlbnRyeVs6LTNdIGZvciBlbnRyeSBpbiBvcy5saXN0ZGlyKGRlbW9fZGlyKSBpZgorICAgICAgICAgICAgZW50cnkuZW5kc3dpdGgoIi5weSIpIGFuZCBlbnRyeVswXSAhPSAnXyddCiAKIGRlZiBzaG93RGVtb0hlbHAoKToKLSAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiSGVscCBvbiB0dXJ0bGVEZW1vIiwgImRlbW9oZWxwLnR4dCIpCisgICAgdmlld19maWxlKGRlbW8ucm9vdCwgIkhlbHAgb24gdHVydGxlRGVtbyIsCisgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImRlbW9oZWxwLnR4dCIpKQogCiBkZWYgc2hvd0Fib3V0RGVtbygpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJBYm91dCB0dXJ0bGVEZW1vIiwgImFib3V0X3R1cnRsZWRlbW8udHh0IikKKyAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiQWJvdXQgdHVydGxlRGVtbyIsCisgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImFib3V0X3R1cnRsZWRlbW8udHh0IikpCiAKIGRlZiBzaG93QWJvdXRUdXJ0bGUoKToKLSAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiQWJvdXQgdGhlIG5ldyB0dXJ0bGUgbW9kdWxlLiIsICJhYm91dF90dXJ0bGUudHh0IikKKyAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiQWJvdXQgdGhlIG5ldyB0dXJ0bGUgbW9kdWxlLiIsCisgICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImFib3V0X3R1cnRsZS50eHQiKSkKIAogY2xhc3MgRGVtb1dpbmRvdyhvYmplY3QpOgogCkBAIC0xNDAsMjAgKzEyNSwyMCBAQAogICAgICAgICBzZWxmLkV4YW1wbGVzQnRuLmNvbmZpZyhzdGF0ZT1tZW51KQogCiAgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhzdGF0ZT1zdGFydCkKLSAgICAgICAgaWYgc3RhcnQ9PU5PUk1BTDoKKyAgICAgICAgaWYgc3RhcnQgPT0gTk9STUFMOgogICAgICAgICAgICAgc2VsZi5zdGFydF9idG4uY29uZmlnKGJnPSIjZDAwIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhiZz0iI2ZjYSIpCiAKICAgICAgICAgc2VsZi5zdG9wX2J0bi5jb25maWcoc3RhdGU9c3RvcCkKLSAgICAgICAgaWYgc3RvcD09Tk9STUFMOgorICAgICAgICBpZiBzdG9wID09IE5PUk1BTDoKICAgICAgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKGJnPSIjZDAwIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKGJnPSIjZmNhIikKICAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyKQogCiAgICAgICAgIHNlbGYuY2xlYXJfYnRuLmNvbmZpZyhzdGF0ZT1jbGVhcikKLSAgICAgICAgaWYgY2xlYXI9PU5PUk1BTDoKKyAgICAgICAgaWYgY2xlYXIgPT0gTk9STUFMOgogICAgICAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKGJnPSIjZDAwIikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuY2xlYXJfYnRuLmNvbmZpZyhiZz0iI2ZjYSIpCkBAIC0xNzEsMzEgKzE1NiwyMyBAQAogICAgICAgICAgICAgICAgIGRlZiBlbWl0KCk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGZpbGUoeCkKICAgICAgICAgICAgICAgICByZXR1cm4gZW1pdAotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbnRyeSxzdHIpOgotICAgICAgICAgICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPWVudHJ5WzY6LTNdLCB1bmRlcmxpbmU9MCwgZm9udD1tZW51Zm9udCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPWxvYWRleGFtcGxlKGVudHJ5KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgX2RpciwgZW50cmllcyA9IGVudHJ5WzBdLCBlbnRyeVsxOl0KLSAgICAgICAgICAgICAgICBDbWRCdG4ubWVudS5jaG9pY2VzID0gTWVudShDbWRCdG4ubWVudSkKLSAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbnRyaWVzOgotICAgICAgICAgICAgICAgICAgICBDbWRCdG4ubWVudS5jaG9pY2VzLmFkZF9jb21tYW5kKGxhYmVsPWVbNjotM10sIHVuZGVybGluZT0wLCBmb250PW1lbnVmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IGxvYWRleGFtcGxlKG9zLnBhdGguam9pbihfZGlyLGUpKSkKLQotICAgICAgICAgICAgICAgIENtZEJ0bi5tZW51LmFkZF9jYXNjYWRlKGxhYmVsPV9kaXJbNjpdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgPSBDbWRCdG4ubWVudS5jaG9pY2VzLCBmb250PW1lbnVmb250ICkKKyAgICAgICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPWVudHJ5LCB1bmRlcmxpbmU9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9bWVudWZvbnQsIGNvbW1hbmQ9bG9hZGV4YW1wbGUoZW50cnkpKQogCiAgICAgICAgIENtZEJ0blsnbWVudSddID0gQ21kQnRuLm1lbnUKICAgICAgICAgcmV0dXJuIENtZEJ0bgogCi0KICAgICBkZWYgbWFrZUhlbHBNZW51KHNlbGYpOgotICAgICAgICBDbWRCdG4gPSBNZW51YnV0dG9uKHNlbGYubUJhciwgdGV4dD0nSGVscCcsIHVuZGVybGluZT0wLCBmb250ID0gbWVudWZvbnQpCisgICAgICAgIENtZEJ0biA9IE1lbnVidXR0b24oc2VsZi5tQmFyLCB0ZXh0PSdIZWxwJywgdW5kZXJsaW5lPTAsIGZvbnQ9bWVudWZvbnQpCiAgICAgICAgIENtZEJ0bi5wYWNrKHNpZGU9TEVGVCwgcGFkeD0nMm0nKQogICAgICAgICBDbWRCdG4ubWVudSA9IE1lbnUoQ21kQnRuKQogCi0gICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSdBYm91dCB0dXJ0bGUucHknLCBmb250PW1lbnVmb250LCBjb21tYW5kPXNob3dBYm91dFR1cnRsZSkKLSAgICAgICAgQ21kQnRuLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J3R1cnRsZURlbW8gLSBIZWxwJywgZm9udD1tZW51Zm9udCwgY29tbWFuZD1zaG93RGVtb0hlbHApCi0gICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSdBYm91dCB0dXJ0bGVEZW1vJywgZm9udD1tZW51Zm9udCwgY29tbWFuZD1zaG93QWJvdXREZW1vKQorICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlLnB5JywgZm9udD1tZW51Zm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zaG93QWJvdXRUdXJ0bGUpCisgICAgICAgIENtZEJ0bi5tZW51LmFkZF9jb21tYW5kKGxhYmVsPSd0dXJ0bGVEZW1vIC0gSGVscCcsIGZvbnQ9bWVudWZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0RlbW9IZWxwKQorICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0nQWJvdXQgdHVydGxlRGVtbycsIGZvbnQ9bWVudWZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0Fib3V0RGVtbykKIAogICAgICAgICBDbWRCdG5bJ21lbnUnXSA9IENtZEJ0bi5tZW51CiAgICAgICAgIHJldHVybiBDbWRCdG4KQEAgLTIwNiwyMiArMTgzLDIwIEBACiAgICAgICAgICNzZWxmLnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCiAgICAgICAgIHNlbGYuZGlydHk9RmFsc2UKIAotICAgIGRlZiBsb2FkZmlsZShzZWxmLGZpbGVuYW1lKToKKyAgICBkZWYgbG9hZGZpbGUoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICBzZWxmLnJlZnJlc2hDYW52YXMoKQotICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZSkgYW5kIG5vdCBvcy5wYXRoLmlzZGlyKGZpbGVuYW1lKToKLSAgICAgICAgICAgICMgbG9hZCBhbmQgZGlzcGxheSBmaWxlIHRleHQKLSAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCdyJykKKyAgICAgICAgbW9kbmFtZSA9ICd0dXJ0bGVkZW1vLicgKyBmaWxlbmFtZQorICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgICAgIHNlbGYubW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubW9kdWxlLl9fZmlsZV9fLCAncicpIGFzIGY6CiAgICAgICAgICAgICBjaGFycyA9IGYucmVhZCgpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYudGV4dC5kZWxldGUoIjEuMCIsICJlbmQiKQotICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgiMS4wIixjaGFycykKLSAgICAgICAgICAgIGRpcmVjLCBmbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCi0gICAgICAgICAgICBzZWxmLnJvb3QudGl0bGUoZm5hbWVbNjotM10rIiAtIGEgUHl0aG9uIHR1cnRsZSBncmFwaGljcyBleGFtcGxlIikKLSAgICAgICAgICAgIHNlbGYubW9kdWxlID0gX19pbXBvcnRfXyhmbmFtZVs6LTNdKQotICAgICAgICAgICAgcmVsb2FkKHNlbGYubW9kdWxlKQotICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcmVzcyBzdGFydCBidXR0b24iLCAicmVkIikKLSAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBSRUFEWQorICAgICAgICBzZWxmLnRleHQuZGVsZXRlKCIxLjAiLCAiZW5kIikKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgiMS4wIiwgY2hhcnMpCisgICAgICAgIHNlbGYucm9vdC50aXRsZShmaWxlbmFtZSArICIgLSBhIFB5dGhvbiB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSIpCisgICAgICAgIHJlbG9hZChzZWxmLm1vZHVsZSkKKyAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIlByZXNzIHN0YXJ0IGJ1dHRvbiIsICJyZWQiKQorICAgICAgICBzZWxmLnN0YXRlID0gUkVBRFkKIAogICAgIGRlZiBzdGFydERlbW8oc2VsZik6CiAgICAgICAgIHNlbGYucmVmcmVzaENhbnZhcygpCmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS9hYm91dF90dXJ0bGUudHh0IGIvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvYWJvdXRfdHVydGxlLnR4dApyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlLnR4dApkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvYWJvdXRfdHVydGxlZGVtby50eHQgYi9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGVkZW1vLnR4dApzaW1pbGFyaXR5IGluZGV4IDcwJQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS9hYm91dF90dXJ0bGVkZW1vLnR4dApyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlZGVtby50eHQKaW5kZXggNTRjMjVhNS4uYTkwMDliZCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvYWJvdXRfdHVydGxlZGVtby50eHQKKysrIGIvTGliL3R1cnRsZWRlbW8vYWJvdXRfdHVydGxlZGVtby50eHQKQEAgLTEsOSArMSw5IEBACiAKICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBBYm91dCB0dXJ0bGVEZW1vLnB5CisgICAgICAgIEFib3V0IHRoaXMgdmlld2VyCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgIFRpbnkgZGVtbyBWaWV3ZXIgdG8gdmlldyB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSBzY3JpcHRzLgorICAgIFRpbnkgZGVtbyB2aWV3ZXIgdG8gdmlldyB0dXJ0bGUgZ3JhcGhpY3MgZXhhbXBsZSBzY3JpcHRzLgogCiAgICAgUXVpY2tseSBhbmQgZGlydHlseSBhc3NlbWJsZWQgYnkgR3JlZ29yIExpbmdsLgogICAgIEp1bmUsIDIwMDYKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2J5dGVkZXNpZ24ucHkgYi9MaWIvdHVydGxlZGVtby9ieXRlZGVzaWduLnB5CnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX2J5dGVkZXNpZ24ucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL2J5dGVkZXNpZ24ucHkKaW5kZXggODVmMjg4Ny4uNjRiMWQ3ZCAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fYnl0ZWRlc2lnbi5weQorKysgYi9MaWIvdHVydGxlZGVtby9ieXRlZGVzaWduLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgIHRkZW1vX2J5dGVkZXNpZ24ucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2NoYW9zLnB5IGIvTGliL3R1cnRsZWRlbW8vY2hhb3MucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX2NoYW9zLnB5CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9jaGFvcy5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkgYi9MaWIvdHVydGxlZGVtby9jbG9jay5weQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS90ZGVtb19jbG9jay5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vY2xvY2sucHkKaW5kZXggZTE4NmMzOC4uYTBkMTU3YiAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fY2xvY2sucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyAtKi0gY29kaW5nOiBjcDEyNTIgLSotCiAiIiIgICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2NvbG9ybWl4ZXIucHkgYi9MaWIvdHVydGxlZGVtby9jb2xvcm1peGVyLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS90ZGVtb19jb2xvcm1peGVyLnB5CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9jb2xvcm1peGVyLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS9kZW1vaGVscC50eHQgYi9MaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQKc2ltaWxhcml0eSBpbmRleCA5MCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvZGVtb2hlbHAudHh0CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9kZW1vaGVscC50eHQKaW5kZXggNTY4Mzg3NS4uZmU4M2JjNyAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvZGVtb2hlbHAudHh0CisrKyBiL0xpYi90dXJ0bGVkZW1vL2RlbW9oZWxwLnR4dApAQCAtNTMsMTIgKzUzLDcgQEAKIAogICAgKDIpIEhvdyB0byBhZGQgeW91ciBvd24gZGVtb3MgdG8gdGhlIGRlbW8gcmVwb3NpdG9yeQogCi0gICAtIHNjcmlwdG5hbWU6IG11c3QgYmVnaW4gd2l0aCB0ZGVtb18gLAotICAgICBzbyBpdCBtdXN0IGhhdmUgdGhlIGZvcm0gdGRlbW9fPHlvdXItc2NyaXB0LW5hbWU+LnB5Ci0KLSAgIC0gcGxhY2U6IHNhbWUgZGlyZWN0b3J5IGFzIHR1cnRsZURlbW8ucHkgb3Igc29tZQotICAgICBzdWJkaXJlY3RvcnksIHRoZSBuYW1lIG9mIHdoaWNoIG11c3QgYWxzbyBiZWdpbiB3aXRoCi0gICAgIHRkZW1vXy4uLi4uCisgICAtIHBsYWNlOiBzYW1lIGRpcmVjdG9yeSBhcyB0dXJ0bGVkZW1vL19fbWFpbl9fLnB5CiAKICAgIC0gcmVxdWlyZW1lbnRzIG9uIHNvdXJjZSBjb2RlOgogICAgICAgIGNvZGUgbXVzdCBjb250YWluIGEgbWFpbigpIGZ1bmN0aW9uIHdoaWNoIHdpbGwKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX2ZvcmVzdC5weSBiL0xpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS90ZGVtb19mb3Jlc3QucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weQppbmRleCAwMWZhMTg2Li5hODM3ZDg0IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19mb3Jlc3QucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgdHVydGxlZ3JhcGhpY3MtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgIHRkZW1vX2ZvcmVzdC5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fZnJhY3RhbGN1cnZlcy5weSBiL0xpYi90dXJ0bGVkZW1vL2ZyYWN0YWxjdXJ2ZXMucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fZnJhY3RhbGN1cnZlcy5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vZnJhY3RhbGN1cnZlcy5weQppbmRleCAyNDdmMTZjLi5jNDlmOGI4IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19mcmFjdGFsY3VydmVzLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL2ZyYWN0YWxjdXJ2ZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgdGRlbW9fZnJhY3RhbEN1cnZlcy5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fbGluZGVubWF5ZXJfaW5kaWFuLnB5IGIvTGliL3R1cnRsZWRlbW8vbGluZGVubWF5ZXIucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fbGluZGVubWF5ZXJfaW5kaWFuLnB5CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9saW5kZW5tYXllci5weQppbmRleCBiZGE1MDY3Li4zOTI1ZjI1IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19saW5kZW5tYXllcl9pbmRpYW4ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vbGluZGVubWF5ZXIucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiICAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgIHh0eF9saW5kZW5tYXllcl9pbmRpYW4ucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX21pbmltYWxfaGFub2kucHkgYi9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5CnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX21pbmltYWxfaGFub2kucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkKaW5kZXggYThiZGNhNy4uY2ZiNzhkYyAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9fbWluaW1hbF9oYW5vaS5weQorKysgYi9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgdGRlbW9fbWluaW1hbF9oYW5vaS5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fbmltLnB5IGIvTGliL3R1cnRsZWRlbW8vbmltLnB5CnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX25pbS5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vbmltLnB5CmluZGV4IDhlNjZkN2UuLjc5MmJhNTEgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX25pbS5weQorKysgYi9MaWIvdHVydGxlZGVtby9uaW0ucHkKQEAgLTEsNyArMSw3IEBACiAiIiIgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgdGRlbW9fbmltLnB5Ci0gICAgICAgICAKKwogUGxheSBuaW0gYWdhaW5zdCB0aGUgY29tcHV0ZXIuIFRoZSBwbGF5ZXIKIHdobyB0YWtlcyB0aGUgbGFzdCBzdGljayBpcyB0aGUgd2lubmVyLgogCkBAIC00MSw3ICs0MSw3IEBACiAgICAgICAgICAgICByZXR1cm4gbW92ZQogCiBkZWYgcmFuZG9tbW92ZShzdGF0ZSk6Ci0gICAgbSA9IG1heChzdGF0ZSkgICAKKyAgICBtID0gbWF4KHN0YXRlKQogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHogPSByYW5kb20ucmFuZGludCgwLDIpCiAgICAgICAgIGlmIHN0YXRlW3pdID4gKG0gPiAxKToKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgc2VsZi53aW5uZXIgPSBOb25lCiAgICAgICAgIHNlbGYuZ2FtZS52aWV3LnNldHVwKCkKICAgICAgICAgc2VsZi5nYW1lLnN0YXRlID0gTmltLlJVTk5JTkcKLSAgICAgICAgCisKICAgICBkZWYgbW92ZShzZWxmLCByb3csIGNvbCk6CiAgICAgICAgIG1heHNwYWx0ZSA9IHNlbGYuc3RpY2tzW3Jvd10KICAgICAgICAgc2VsZi5zdGlja3Nbcm93XSA9IGNvbApAQCAtNzYsNyArNzYsNyBAQAogICAgICAgICAgICAgcm93LCBjb2wgPSBjb21wdXRlcnp1ZyhzZWxmLnN0aWNrcykKICAgICAgICAgICAgIHNlbGYubW92ZShyb3csIGNvbCkKICAgICAgICAgICAgIHNlbGYucGxheWVyID0gMAotICAgICAgICAKKwogICAgIGRlZiBnYW1lX292ZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnN0aWNrcyA9PSBbMCwgMCwgMF0KIApAQCAtMTAwLDEzICsxMDAsMTMgQEAKICAgICAgICAgc2VsZi5nb3RvKHgseSkKICAgICAgICAgc2VsZi5jb2xvcigid2hpdGUiKQogICAgICAgICBzZWxmLnNob3d0dXJ0bGUoKQotICAgICAgICAgICAgCisKICAgICBkZWYgY29vcmRzKHNlbGYsIHJvdywgY29sKToKICAgICAgICAgcGFja2V0LCByZW1haW5kZXIgPSBkaXZtb2QoY29sLCA1KQogICAgICAgICB4ID0gKDMgKyAxMSAqIHBhY2tldCArIDIgKiByZW1haW5kZXIpICogV1VOSVQKICAgICAgICAgeSA9ICgyICsgMyAqIHJvdykgKiBIVU5JVAogICAgICAgICByZXR1cm4geCAtIFNDUkVFTldJRFRIIC8vIDIgKyBXVU5JVCAvLyAyLCBTQ1JFRU5IRUlHSFQgLy8gMiAtIHkgLSBIVU5JVCAvLyAyCi0gICAgICAgIAorCiAgICAgZGVmIG1ha2Vtb3ZlKHNlbGYsIHgsIHkpOgogICAgICAgICBpZiBzZWxmLmdhbWUuc3RhdGUgIT0gTmltLlJVTk5JTkc6CiAgICAgICAgICAgICByZXR1cm4KQEAgLTE0Miw3ICsxNDIsNyBAQAogICAgICAgICBzZWxmLndyaXRlci5wZW5jb2xvcigiYmxhY2siKQogICAgICAgICBzZWxmLndyaXRlci53cml0ZShtc2cxLCBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLDE0LCJib2xkIikpCiAgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihUcnVlKQotICAgICAgICAKKwogCiAgICAgZGVmIHNldHVwKHNlbGYpOgogICAgICAgICBzZWxmLnNjcmVlbi50cmFjZXIoRmFsc2UpCkBAIC0yMDAsMTggKzIwMCwxOCBAQAogICAgICAgICBzZWxmLkJVU1kgPSBUcnVlCiAgICAgICAgIHNlbGYuZ2FtZS5tb2RlbC5ub3RpZnlfbW92ZShyb3csIGNvbCkKICAgICAgICAgc2VsZi5CVVNZID0gRmFsc2UKLSAgICAgICAgICAgICAgICAKKwogY2xhc3MgTmltKG9iamVjdCk6CiAgICAgQ1JFQVRFRCA9IDAKICAgICBSVU5OSU5HID0gMQogICAgIE9WRVIgPSAyCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNjcmVlbik6Ci0gICAgICAgIHNlbGYuc3RhdGUgPSBOaW0uQ1JFQVRFRCAKKyAgICAgICAgc2VsZi5zdGF0ZSA9IE5pbS5DUkVBVEVECiAgICAgICAgIHNlbGYuc2NyZWVuID0gc2NyZWVuCiAgICAgICAgIHNlbGYubW9kZWwgPSBOaW1Nb2RlbChzZWxmKQogICAgICAgICBzZWxmLnZpZXcgPSBOaW1WaWV3KHNlbGYpCiAgICAgICAgIHNlbGYuY29udHJvbGxlciA9IE5pbUNvbnRyb2xsZXIoc2VsZikKLSAgICAgICAgCisKIAogbWFpbnNjcmVlbiA9IHR1cnRsZS5TY3JlZW4oKQogbWFpbnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCkBAIC0yMjQsNCArMjI0LDMgQEAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCiAgICAgdHVydGxlLm1haW5sb29wKCkKLSAgICAKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5IGIvTGliL3R1cnRsZWRlbW8vcGFpbnQucHkKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fcGFpbnQucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3BhaW50LnB5CmluZGV4IDMzN2E1N2MuLjY4MDU4YWIgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3BhaW50LnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgdGRlbW9fcGFpbnQucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3BlYWNlLnB5IGIvTGliL3R1cnRsZWRlbW8vcGVhY2UucHkKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fcGVhY2UucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3BlYWNlLnB5CmluZGV4IGVhNTcwNjkuLjYzY2Y3Y2MgMTAwNjQ0Ci0tLSBhL0RlbW8vdHVydGxlL3RkZW1vX3BlYWNlLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgICB0ZGVtb19wZWFjZS5weQpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fcGVucm9zZS5weSBiL0xpYi90dXJ0bGVkZW1vL3BlbnJvc2UucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fcGVucm9zZS5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vcGVucm9zZS5weQppbmRleCBmODE2ZjY2Li5mNzNjODY0IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19wZW5yb3NlLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3BlbnJvc2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiICAgICAgIHh0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgIHh0eF9raXRlc19hbmRfZGFydHMucHkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3BsYW5ldF9hbmRfbW9vbi5weSBiL0xpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS90ZGVtb19wbGFuZXRfYW5kX21vb24ucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weQppbmRleCA5ODM0NDljLi4xNGM0YmJjIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19wbGFuZXRfYW5kX21vb24ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICB0ZGVtb19wbGFuZXRzX2FuZF9tb29uLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90ZGVtb19yb3VuZF9kYW5jZS5weSBiL0xpYi90dXJ0bGVkZW1vL3JvdW5kX2RhbmNlLnB5CnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX3JvdW5kX2RhbmNlLnB5CnJlbmFtZSB0byBMaWIvdHVydGxlZGVtby9yb3VuZF9kYW5jZS5weQppbmRleCBiZmZjMWU2Li4xMDM4MzYxIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb19yb3VuZF9kYW5jZS5weQorKysgYi9MaWIvdHVydGxlZGVtby9yb3VuZF9kYW5jZS5weQpAQCAtMSw3ICsxLDcgQEAKICIiIiAgICAgIHR1cnRsZS1leGFtcGxlLXN1aXRlOgogCiAgICAgICAgICB0ZGVtb19yb3VuZF9kYW5jZS5weQotICAgICAgICAgCisKIChOZWVkcyB2ZXJzaW9uIDEuMSBvZiB0aGUgdHVydGxlIG1vZHVsZSB0aGF0CiBjb21lcyB3aXRoIFB5dGhvbiAzLjEpCiAKQEAgLTg0LDcgKzg0LDMgQEAKIGlmIF9fbmFtZV9fPT0nX19tYWluX18nOgogICAgIHByaW50KG1haW4oKSkKICAgICBtYWlubG9vcCgpCi0gICAgCi0KLQotICAgIApkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdGRlbW9fdHJlZS5weSBiL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdGRlbW9fdHJlZS5weQpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vdHJlZS5weQppbmRleCBmZGE2NTNjLi45YzBiMWY3IDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb190cmVlLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiICAgICAgdHVydGxlLWV4YW1wbGUtc3VpdGU6CiAKICAgICAgICAgICAgICB0ZGVtb190cmVlLnB5CmRpZmYgLS1naXQgYS9EZW1vL3R1cnRsZS90dXJ0bGUuY2ZnIGIvTGliL3R1cnRsZWRlbW8vdHVydGxlLmNmZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdHVydGxlLmNmZwpyZW5hbWUgdG8gTGliL3R1cnRsZWRlbW8vdHVydGxlLmNmZwpkaWZmIC0tZ2l0IGEvRGVtby90dXJ0bGUvdHVydGxlZGVtb190d29fY2FudmFzZXMucHkgYi9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkKc2ltaWxhcml0eSBpbmRleCA4OSUKcmVuYW1lIGZyb20gRGVtby90dXJ0bGUvdHVydGxlZGVtb190d29fY2FudmFzZXMucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weQppbmRleCA1N2VjYjFkLi4wMmQ4OWRiIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90dXJ0bGVkZW1vX3R3b19jYW52YXNlcy5weQorKysgYi9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL3B5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyMgREVNT05TVFJBVEVTIFVTRSBPRiAyIENBTlZBU0VTLCBTTyBDQU5OT1QgQkUgUlVOIElOIERFTU9WSUVXRVIhCiAiIiJ0dXJ0bGUgZXhhbXBsZTogVXNpbmcgVHVydGxlU2NyZWVuIGFuZCBSYXdUdXJ0bGUKIGZvciBkcmF3aW5nIG9uIHR3byBkaXN0aW5jdCBjYW52YXNlcy4KQEAgLTQ0LDkgKzQ0LDkgQEAKIAogIyMgV2FudCB0byBnZXQgc29tZSBpbmZvPwogCi1wcmludChzMSwgczIpCi1wcmludChwLCBxKQotcHJpbnQoczEudHVydGxlcygpKQotcHJpbnQoczIudHVydGxlcygpKQorI3ByaW50KHMxLCBzMikKKyNwcmludChwLCBxKQorI3ByaW50KHMxLnR1cnRsZXMoKSkKKyNwcmludChzMi50dXJ0bGVzKCkpCiAKIFRLLm1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3dpa2lwZWRpYS5weSBiL0xpYi90dXJ0bGVkZW1vL3dpa2lwZWRpYS5weQpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBEZW1vL3R1cnRsZS90ZGVtb193aWtpcGVkaWEucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3dpa2lwZWRpYS5weQppbmRleCA3M2UwM2QyLi4wZjI3NDQyIDEwMDY0NAotLS0gYS9EZW1vL3R1cnRsZS90ZGVtb193aWtpcGVkaWEucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vd2lraXBlZGlhLnB5CkBAIC01Niw3ICs1Niw3IEBACiAgICAgICAgIGZvciB0IGluIHMudHVydGxlcygpOgogICAgICAgICAgICAgdC51bmRvKCkKICAgICBldCA9IGNsb2NrKCkKLSAgICByZXR1cm4gIkxhdWZ6ZWl0OiAlLjNmIHNlYyIgJSAoejErZXQtYXQpCisgICAgcmV0dXJuICJydW50aW1lOiAlLjNmIHNlYyIgJSAoejErZXQtYXQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0RlbW8vdHVydGxlL3RkZW1vX3lpbnlhbmcucHkgYi9MaWIvdHVydGxlZGVtby95aW55YW5nLnB5CnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIERlbW8vdHVydGxlL3RkZW1vX3lpbnlhbmcucHkKcmVuYW1lIHRvIExpYi90dXJ0bGVkZW1vL3lpbnlhbmcucHkKaW5kZXggNjUwOGI0NC4uMTFkMWY0NyAxMDA2NDQKLS0tIGEvRGVtby90dXJ0bGUvdGRlbW9feWlueWFuZy5weQorKysgYi9MaWIvdHVydGxlZGVtby95aW55YW5nLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKICIiIiAgICAgICB0dXJ0bGUtZXhhbXBsZS1zdWl0ZToKIAogICAgICAgICAgICAgdGRlbW9feWlueWFuZy5weQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0LnB5IGIvTGliL3VuaXR0ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWJkODU3Li4wMDAwMDAwCi0tLSBhL0xpYi91bml0dGVzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2MzAgKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0nJycKLVB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBiYXNlZCBvbiBFcmljaCBHYW1tYSdzIEpVbml0IGFuZCBLZW50IEJlY2sncwotU21hbGx0YWxrIHRlc3RpbmcgZnJhbWV3b3JrLgotCi1UaGlzIG1vZHVsZSBjb250YWlucyB0aGUgY29yZSBmcmFtZXdvcmsgY2xhc3NlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mCi1zcGVjaWZpYyB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgKFRlc3RDYXNlLCBUZXN0U3VpdGUgZXRjLiksIGFuZCBhbHNvIGEKLXRleHQtYmFzZWQgdXRpbGl0eSBjbGFzcyBmb3IgcnVubmluZyB0aGUgdGVzdHMgYW5kIHJlcG9ydGluZyB0aGUgcmVzdWx0cwotIChUZXh0VGVzdFJ1bm5lcikuCi0KLVNpbXBsZSB1c2FnZToKLQotICAgIGltcG9ydCB1bml0dGVzdAotCi0gICAgY2xhc3MgSW50ZWdlckFyaXRobWVudGljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdEFkZChzZWxmKTogICMjIHRlc3QgbWV0aG9kIG5hbWVzIGJlZ2luICd0ZXN0KicKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEgKyAyKSwgMykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCArIDEsIDEpCi0gICAgICAgIGRlZiB0ZXN0TXVsdGlwbHkoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwICogMTApLCAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSAqIDgpLCA0MCkKLQotICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgIHVuaXR0ZXN0Lm1haW4oKQotCi1GdXJ0aGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVuZGxlZCBkb2N1bWVudGF0aW9uLCBhbmQgZnJvbQotCi0gIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91bml0dGVzdC5odG1sCi0KLUNvcHlyaWdodCAoYykgMTk5OS0yMDAzIFN0ZXZlIFB1cmNlbGwKLUNvcHlyaWdodCAoYykgMjAwMy0yMDA5IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1UaGlzIG1vZHVsZSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotaXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUHl0aG9uIGl0c2VsZiwgc28gbG9uZyBhcyB0aGlzIGNvcHlyaWdodCBtZXNzYWdlCi1hbmQgZGlzY2xhaW1lciBhcmUgcmV0YWluZWQgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybS4KLQotSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAotU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YKLVRISVMgQ09ERSwgRVZFTiBJRiBUSEUgQVVUSE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLURBTUFHRS4KLQotVEhFIEFVVEhPUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLUxJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCi1QQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgQ09ERSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywKLUFORCBUSEVSRSBJUyBOTyBPQkxJR0FUSU9OIFdIQVRTT0VWRVIgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwKLVNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KLScnJwotCi1pbXBvcnQgZGlmZmxpYgotaW1wb3J0IGZ1bmN0b29scwotaW1wb3J0IG9zCi1pbXBvcnQgcHByaW50Ci1pbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi1pbXBvcnQgdHJhY2ViYWNrCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB3YXJuaW5ncwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRXhwb3J0ZWQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLV9fYWxsX18gPSBbJ1Rlc3RSZXN1bHQnLCAnVGVzdENhc2UnLCAnVGVzdFN1aXRlJywKLSAgICAgICAgICAgJ1RleHRUZXN0UnVubmVyJywgJ1Rlc3RMb2FkZXInLCAnRnVuY3Rpb25UZXN0Q2FzZScsICdtYWluJywKLSAgICAgICAgICAgJ2RlZmF1bHRUZXN0TG9hZGVyJywgJ1NraXBUZXN0JywgJ3NraXAnLCAnc2tpcElmJywgJ3NraXBVbmxlc3MnLAotICAgICAgICAgICAnZXhwZWN0ZWRGYWlsdXJlJ10KLQotIyBFeHBvc2Ugb2Jzb2xldGUgZnVuY3Rpb25zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotX19hbGxfXy5leHRlbmQoWydnZXRUZXN0Q2FzZU5hbWVzJywgJ21ha2VTdWl0ZScsICdmaW5kVGVzdENhc2VzJ10pCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgZnJhbWV3b3JrIGNvcmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1kZWYgX3N0cmNsYXNzKGNscyk6Ci0gICAgcmV0dXJuICIlcy4lcyIgJSAoY2xzLl9fbW9kdWxlX18sIGNscy5fX25hbWVfXykKLQotCi1jbGFzcyBTa2lwVGVzdChFeGNlcHRpb24pOgotICAgICIiIgotICAgIFJhaXNlIHRoaXMgZXhjZXB0aW9uIGluIGEgdGVzdCB0byBza2lwIGl0LgotCi0gICAgVXN1YWxseSB5b3UgY2FuIHVzZSBUZXN0UmVzdWx0LnNraXAoKSBvciBvbmUgb2YgdGhlIHNraXBwaW5nIGRlY29yYXRvcnMKLSAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KLSAgICAiIiIKLSAgICBwYXNzCi0KLWNsYXNzIF9FeHBlY3RlZEZhaWx1cmUoRXhjZXB0aW9uKToKLSAgICAiIiIKLSAgICBSYWlzZSB0aGlzIHdoZW4gYSB0ZXN0IGlzIGV4cGVjdGVkIHRvIGZhaWwuCi0KLSAgICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSAgICAiIiIKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbyk6Ci0gICAgICAgIHN1cGVyKF9FeHBlY3RlZEZhaWx1cmUsIHNlbGYpLl9faW5pdF9fKCkKLSAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvCi0KLWNsYXNzIF9VbmV4cGVjdGVkU3VjY2VzcyhFeGNlcHRpb24pOgotICAgICIiIgotICAgIFRoZSB0ZXN0IHdhcyBzdXBwb3NlZCB0byBmYWlsLCBidXQgaXQgZGlkbid0IQotICAgICIiIgotICAgIHBhc3MKLQotZGVmIF9pZChvYmopOgotICAgIHJldHVybiBvYmoKLQotZGVmIHNraXAocmVhc29uKToKLSAgICAiIiIKLSAgICBVbmNvbmRpdGlvbmFsbHkgc2tpcCBhIHRlc3QuCi0gICAgIiIiCi0gICAgZGVmIGRlY29yYXRvcih0ZXN0X2l0ZW0pOgotICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RfaXRlbSwgdHlwZSkgYW5kIGlzc3ViY2xhc3ModGVzdF9pdGVtLCBUZXN0Q2FzZSk6Ci0gICAgICAgICAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9za2lwX18gPSBUcnVlCi0gICAgICAgICAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9za2lwX3doeV9fID0gcmVhc29uCi0gICAgICAgICAgICByZXR1cm4gdGVzdF9pdGVtCi0gICAgICAgIEBmdW5jdG9vbHMud3JhcHModGVzdF9pdGVtKQotICAgICAgICBkZWYgc2tpcF93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICByYWlzZSBTa2lwVGVzdChyZWFzb24pCi0gICAgICAgIHJldHVybiBza2lwX3dyYXBwZXIKLSAgICByZXR1cm4gZGVjb3JhdG9yCi0KLWRlZiBza2lwSWYoY29uZGl0aW9uLCByZWFzb24pOgotICAgICIiIgotICAgIFNraXAgYSB0ZXN0IGlmIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KLSAgICAiIiIKLSAgICBpZiBjb25kaXRpb246Ci0gICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKLSAgICByZXR1cm4gX2lkCi0KLWRlZiBza2lwVW5sZXNzKGNvbmRpdGlvbiwgcmVhc29uKToKLSAgICAiIiIKLSAgICBTa2lwIGEgdGVzdCB1bmxlc3MgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLgotICAgICIiIgotICAgIGlmIG5vdCBjb25kaXRpb246Ci0gICAgICAgIHJldHVybiBza2lwKHJlYXNvbikKLSAgICByZXR1cm4gX2lkCi0KLQotZGVmIGV4cGVjdGVkRmFpbHVyZShmdW5jKToKLSAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCi0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnVuYygqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICByYWlzZSBfRXhwZWN0ZWRGYWlsdXJlKHN5cy5leGNfaW5mbygpKQotICAgICAgICByYWlzZSBfVW5leHBlY3RlZFN1Y2Nlc3MKLSAgICByZXR1cm4gd3JhcHBlcgotCi1fX3VuaXR0ZXN0ID0gMQotCi1jbGFzcyBUZXN0UmVzdWx0KG9iamVjdCk6Ci0gICAgIiIiSG9sZGVyIGZvciB0ZXN0IHJlc3VsdCBpbmZvcm1hdGlvbi4KLQotICAgIFRlc3QgcmVzdWx0cyBhcmUgYXV0b21hdGljYWxseSBtYW5hZ2VkIGJ5IHRoZSBUZXN0Q2FzZSBhbmQgVGVzdFN1aXRlCi0gICAgY2xhc3NlcywgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbWFuaXB1bGF0ZWQgYnkgd3JpdGVycyBvZiB0ZXN0cy4KLQotICAgIEVhY2ggaW5zdGFuY2UgaG9sZHMgdGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4sIGFuZCBjb2xsZWN0aW9ucyBvZgotICAgIGZhaWx1cmVzIGFuZCBlcnJvcnMgdGhhdCBvY2N1cnJlZCBhbW9uZyB0aG9zZSB0ZXN0IHJ1bnMuIFRoZSBjb2xsZWN0aW9ucwotICAgIGNvbnRhaW4gdHVwbGVzIG9mICh0ZXN0Y2FzZSwgZXhjZXB0aW9uaW5mbyksIHdoZXJlIGV4Y2VwdGlvbmluZm8gaXMgdGhlCi0gICAgZm9ybWF0dGVkIHRyYWNlYmFjayBvZiB0aGUgZXJyb3IgdGhhdCBvY2N1cnJlZC4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuZmFpbHVyZXMgPSBbXQotICAgICAgICBzZWxmLmVycm9ycyA9IFtdCi0gICAgICAgIHNlbGYudGVzdHNSdW4gPSAwCi0gICAgICAgIHNlbGYuc2tpcHBlZCA9IFtdCi0gICAgICAgIHNlbGYuZXhwZWN0ZWRGYWlsdXJlcyA9IFtdCi0gICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3NlcyA9IFtdCi0gICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IEZhbHNlCi0KLSAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgotICAgICAgICAiQ2FsbGVkIHdoZW4gdGhlIGdpdmVuIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuIgotICAgICAgICBzZWxmLnRlc3RzUnVuID0gc2VsZi50ZXN0c1J1biArIDEKLQotICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6Ci0gICAgICAgICIiIkNhbGxlZCBvbmNlIGJlZm9yZSBhbnkgdGVzdHMgYXJlIGV4ZWN1dGVkLgotCi0gICAgICAgIFNlZSBzdGFydFRlc3QgZm9yIGEgbWV0aG9kIGNhbGxlZCBiZWZvcmUgZWFjaCB0ZXN0LgotICAgICAgICAiIiIKLQotICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgIkNhbGxlZCB3aGVuIHRoZSBnaXZlbiB0ZXN0IGhhcyBiZWVuIHJ1biIKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgotICAgICAgICAiIiJDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgotCi0gICAgICAgIFNlZSBzdG9wVGVzdCBmb3IgYSBtZXRob2QgY2FsbGVkIGFmdGVyIGVhY2ggdGVzdC4KLSAgICAgICAgIiIiCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcwotICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQotCi0gICAgZGVmIGFkZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcwotICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4iIiIKLSAgICAgICAgc2VsZi5mYWlsdXJlcy5hcHBlbmQoKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKLQotICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsIHRlc3QpOgotICAgICAgICAiQ2FsbGVkIHdoZW4gYSB0ZXN0IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgYWRkU2tpcChzZWxmLCB0ZXN0LCByZWFzb24pOgotICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIHRlc3QgaXMgc2tpcHBlZC4iIiIKLSAgICAgICAgc2VsZi5za2lwcGVkLmFwcGVuZCgodGVzdCwgcmVhc29uKSkKLQotICAgIGRlZiBhZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXhwZWN0ZWQgZmFpbHVyZS9lcnJvciBvY2N1cmVkLiIiIgotICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZXMuYXBwZW5kKAotICAgICAgICAgICAgKHRlc3QsIHNlbGYuX2V4Y19pbmZvX3RvX3N0cmluZyhlcnIsIHRlc3QpKSkKLQotICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCB0ZXN0KToKLSAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0ZXN0IHdhcyBleHBlY3RlZCB0byBmYWlsLCBidXQgc3VjY2VlZC4iIiIKLSAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzLmFwcGVuZCh0ZXN0KQotCi0gICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6Ci0gICAgICAgICJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzIgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuZmFpbHVyZXMpID09IGxlbihzZWxmLmVycm9ycykgPT0gMAotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgICJJbmRpY2F0ZXMgdGhhdCB0aGUgdGVzdHMgc2hvdWxkIGJlIGFib3J0ZWQiCi0gICAgICAgIHNlbGYuc2hvdWxkU3RvcCA9IFRydWUKLQotICAgIGRlZiBfZXhjX2luZm9fdG9fc3RyaW5nKHNlbGYsIGVyciwgdGVzdCk6Ci0gICAgICAgICIiIkNvbnZlcnRzIGEgc3lzLmV4Y19pbmZvKCktc3R5bGUgdHVwbGUgb2YgdmFsdWVzIGludG8gYSBzdHJpbmcuIiIiCi0gICAgICAgIGV4Y3R5cGUsIHZhbHVlLCB0YiA9IGVycgotICAgICAgICAjIFNraXAgdGVzdCBydW5uZXIgdHJhY2ViYWNrIGxldmVscwotICAgICAgICB3aGlsZSB0YiBhbmQgc2VsZi5faXNfcmVsZXZhbnRfdGJfbGV2ZWwodGIpOgotICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIGlmIGV4Y3R5cGUgaXMgdGVzdC5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgIyBTa2lwIGFzc2VydCooKSB0cmFjZWJhY2sgbGV2ZWxzCi0gICAgICAgICAgICBsZW5ndGggPSBzZWxmLl9jb3VudF9yZWxldmFudF90Yl9sZXZlbHModGIpCi0gICAgICAgICAgICByZXR1cm4gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gJycuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIpKQotCi0gICAgZGVmIF9pc19yZWxldmFudF90Yl9sZXZlbChzZWxmLCB0Yik6Ci0gICAgICAgIHJldHVybiAnX191bml0dGVzdCcgaW4gdGIudGJfZnJhbWUuZl9nbG9iYWxzCi0KLSAgICBkZWYgX2NvdW50X3JlbGV2YW50X3RiX2xldmVscyhzZWxmLCB0Yik6Ci0gICAgICAgIGxlbmd0aCA9IDAKLSAgICAgICAgd2hpbGUgdGIgYW5kIG5vdCBzZWxmLl9pc19yZWxldmFudF90Yl9sZXZlbCh0Yik6Ci0gICAgICAgICAgICBsZW5ndGggKz0gMQotICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIHJldHVybiBsZW5ndGgKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgcnVuPSVpIGVycm9ycz0laSBmYWlsdXJlcz0laT4iICUgXAotICAgICAgICAgICAgICAgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYudGVzdHNSdW4sIGxlbihzZWxmLmVycm9ycyksCi0gICAgICAgICAgICAgICAgbGVuKHNlbGYuZmFpbHVyZXMpKQotCi0KLWNsYXNzIF9Bc3NlcnRSYWlzZXNDb250ZXh0KG9iamVjdCk6Ci0gICAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byBpbXBsZW1lbnQgVGVzdENhc2UuYXNzZXJ0UmFpc2VzKiBtZXRob2RzLiIiIgotCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZXhwZWN0ZWQsIHRlc3RfY2FzZSwgY2FsbGFibGVfb2JqPU5vbmUsCi0gICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4cD1Ob25lKToKLSAgICAgICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCi0gICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiA9IHRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uCi0gICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gY2FsbGFibGVfb2JqLl9fbmFtZV9fCi0gICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSA9IHN0cihjYWxsYWJsZV9vYmopCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gTm9uZQotICAgICAgICBzZWxmLmV4cGVjdGVkX3JlZ2V4ID0gZXhwZWN0ZWRfcmVnZXhwCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdGIpOgotICAgICAgICBpZiBleGNfdHlwZSBpcyBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gc2VsZi5leHBlY3RlZC5fX25hbWVfXwotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIGV4Y19uYW1lID0gc3RyKHNlbGYuZXhwZWN0ZWQpCi0gICAgICAgICAgICBpZiBzZWxmLm9ial9uYW1lOgotICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigiezB9IG5vdCByYWlzZWQgYnkgezF9IgotICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGV4Y19uYW1lLCBzZWxmLm9ial9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCJ7MH0gbm90IHJhaXNlZCIKLSAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChleGNfbmFtZSkpCi0gICAgICAgIGlmIG5vdCBpc3N1YmNsYXNzKGV4Y190eXBlLCBzZWxmLmV4cGVjdGVkKToKLSAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICBpZiBzZWxmLmV4cGVjdGVkX3JlZ2V4IGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIGV4cGVjdGVkX3JlZ2V4cCA9IHNlbGYuZXhwZWN0ZWRfcmVnZXgKLSAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZF9yZWdleHAsIChieXRlcywgc3RyKSk6Ci0gICAgICAgICAgICBleHBlY3RlZF9yZWdleHAgPSByZS5jb21waWxlKGV4cGVjdGVkX3JlZ2V4cCkKLSAgICAgICAgaWYgbm90IGV4cGVjdGVkX3JlZ2V4cC5zZWFyY2goc3RyKGV4Y192YWx1ZSkpOgotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCciJXMiIGRvZXMgbm90IG1hdGNoICIlcyInICUKLSAgICAgICAgICAgICAgICAgICAgIChleHBlY3RlZF9yZWdleHAucGF0dGVybiwgc3RyKGV4Y192YWx1ZSkpKQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0KLWNsYXNzIF9Bc3NlcnRXcmFwcGVyKG9iamVjdCk6Ci0gICAgIiIiV3JhcCBlbnRyaWVzIGluIHRoZSBfdHlwZV9lcXVhbGl0eV9mdW5jcyByZWdpc3RyeSB0byBtYWtlIHRoZW0gZGVlcAotICAgIGNvcHlhYmxlLiIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uKToKLSAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCi0KLSAgICBkZWYgX19kZWVwY29weV9fKHNlbGYsIG1lbW8pOgotICAgICAgICBtZW1vW2lkKHNlbGYpXSA9IHNlbGYKLQotCi1jbGFzcyBUZXN0Q2FzZShvYmplY3QpOgotICAgICIiIkEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzaW5nbGUgdGVzdCBjYXNlcy4KLQotICAgIEJ5IGRlZmF1bHQsIHRoZSB0ZXN0IGNvZGUgaXRzZWxmIHNob3VsZCBiZSBwbGFjZWQgaW4gYSBtZXRob2QgbmFtZWQKLSAgICAncnVuVGVzdCcuCi0KLSAgICBJZiB0aGUgZml4dHVyZSBtYXkgYmUgdXNlZCBmb3IgbWFueSB0ZXN0IGNhc2VzLCBjcmVhdGUgYXMKLSAgICBtYW55IHRlc3QgbWV0aG9kcyBhcyBhcmUgbmVlZGVkLiBXaGVuIGluc3RhbnRpYXRpbmcgc3VjaCBhIFRlc3RDYXNlCi0gICAgc3ViY2xhc3MsIHNwZWNpZnkgaW4gdGhlIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyB0aGUgbmFtZSBvZiB0aGUgdGVzdCBtZXRob2QKLSAgICB0aGF0IHRoZSBpbnN0YW5jZSBpcyB0byBleGVjdXRlLgotCi0gICAgVGVzdCBhdXRob3JzIHNob3VsZCBzdWJjbGFzcyBUZXN0Q2FzZSBmb3IgdGhlaXIgb3duIHRlc3RzLiBDb25zdHJ1Y3Rpb24KLSAgICBhbmQgZGVjb25zdHJ1Y3Rpb24gb2YgdGhlIHRlc3QncyBlbnZpcm9ubWVudCAoJ2ZpeHR1cmUnKSBjYW4gYmUKLSAgICBpbXBsZW1lbnRlZCBieSBvdmVycmlkaW5nIHRoZSAnc2V0VXAnIGFuZCAndGVhckRvd24nIG1ldGhvZHMgcmVzcGVjdGl2ZWx5LgotCi0gICAgSWYgaXQgaXMgbmVjZXNzYXJ5IHRvIG92ZXJyaWRlIHRoZSBfX2luaXRfXyBtZXRob2QsIHRoZSBiYXNlIGNsYXNzCi0gICAgX19pbml0X18gbWV0aG9kIG11c3QgYWx3YXlzIGJlIGNhbGxlZC4gSXQgaXMgaW1wb3J0YW50IHRoYXQgc3ViY2xhc3NlcwotICAgIHNob3VsZCBub3QgY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgdGhlaXIgX19pbml0X18gbWV0aG9kLCBzaW5jZSBpbnN0YW5jZXMKLSAgICBvZiB0aGUgY2xhc3NlcyBhcmUgaW5zdGFudGlhdGVkIGF1dG9tYXRpY2FsbHkgYnkgcGFydHMgb2YgdGhlIGZyYW1ld29yawotICAgIGluIG9yZGVyIHRvIGJlIHJ1bi4KLSAgICAiIiIKLQotICAgICMgVGhpcyBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGljaCBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbgotICAgICMgdGhlIGluc3RhbmNlJ3MgYXNzZXJ0aW9uIG1ldGhvZHMgZmFpbDsgdGVzdCBtZXRob2RzIHJhaXNpbmcgdGhpcwotICAgICMgZXhjZXB0aW9uIHdpbGwgYmUgZGVlbWVkIHRvIGhhdmUgJ2ZhaWxlZCcgcmF0aGVyIHRoYW4gJ2Vycm9yZWQnCi0KLSAgICBmYWlsdXJlRXhjZXB0aW9uID0gQXNzZXJ0aW9uRXJyb3IKLQotICAgICMgVGhpcyBhdHRyaWJ1dGUgZGV0ZXJtaW5lcyB3aGV0aGVyIGxvbmcgbWVzc2FnZXMgKGluY2x1ZGluZyByZXByIG9mCi0gICAgIyBvYmplY3RzIHVzZWQgaW4gYXNzZXJ0IG1ldGhvZHMpIHdpbGwgYmUgcHJpbnRlZCBvbiBmYWlsdXJlIGluICphZGRpdGlvbioKLSAgICAjIHRvIGFueSBleHBsaWNpdCBtZXNzYWdlIHBhc3NlZC4KLQotICAgIGxvbmdNZXNzYWdlID0gRmFsc2UKLQotICAgICMgSWYgYSBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gX2RpZmZUaHJlc2hvbGQsIHVzZSBub3JtYWwgY29tcGFyaXNvbiBpbnN0ZWFkCi0gICAgIyBvZiBkaWZmbGliLiAgU2VlICMxMTc2My4KLSAgICBfZGlmZlRocmVzaG9sZCA9IDIqKjE2Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgotICAgICAgICAiIiJDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIHRoYXQgd2lsbCB1c2UgdGhlIG5hbWVkIHRlc3QKLSAgICAgICAgICAgbWV0aG9kIHdoZW4gZXhlY3V0ZWQuIFJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdGhlIGluc3RhbmNlIGRvZXMKLSAgICAgICAgICAgbm90IGhhdmUgYSBtZXRob2Qgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9IG1ldGhvZE5hbWUKLSAgICAgICAgc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcyA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgbWV0aG9kTmFtZSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gc3VjaCB0ZXN0IG1ldGhvZCBpbiAlczogJXMiICUgXAotICAgICAgICAgICAgICAgICAgKHNlbGYuX19jbGFzc19fLCBtZXRob2ROYW1lKSkKLSAgICAgICAgc2VsZi5fdGVzdE1ldGhvZERvYyA9IHRlc3RNZXRob2QuX19kb2NfXwotICAgICAgICBzZWxmLl9jbGVhbnVwcyA9IFtdCi0KLSAgICAgICAgIyBNYXAgdHlwZXMgdG8gY3VzdG9tIGFzc2VydEVxdWFsIGZ1bmN0aW9ucyB0aGF0IHdpbGwgY29tcGFyZQotICAgICAgICAjIGluc3RhbmNlcyBvZiBzYWlkIHR5cGUgaW4gbW9yZSBkZXRhaWwgdG8gZ2VuZXJhdGUgYSBtb3JlIHVzZWZ1bAotICAgICAgICAjIGVycm9yIG1lc3NhZ2UuCi0gICAgICAgIHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3MgPSB7fQotICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmMoZGljdCwgc2VsZi5hc3NlcnREaWN0RXF1YWwpCi0gICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhsaXN0LCBzZWxmLmFzc2VydExpc3RFcXVhbCkKLSAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHR1cGxlLCBzZWxmLmFzc2VydFR1cGxlRXF1YWwpCi0gICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhzZXQsIHNlbGYuYXNzZXJ0U2V0RXF1YWwpCi0gICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhmcm96ZW5zZXQsIHNlbGYuYXNzZXJ0U2V0RXF1YWwpCi0KLSAgICBkZWYgYWRkVHlwZUVxdWFsaXR5RnVuYyhzZWxmLCB0eXBlb2JqLCBmdW5jdGlvbik6Ci0gICAgICAgICIiIkFkZCBhIHR5cGUgc3BlY2lmaWMgYXNzZXJ0RXF1YWwgc3R5bGUgZnVuY3Rpb24gdG8gY29tcGFyZSBhIHR5cGUuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgaXMgZm9yIHVzZSBieSBUZXN0Q2FzZSBzdWJjbGFzc2VzIHRoYXQgbmVlZCB0byByZWdpc3RlcgotICAgICAgICB0aGVpciBvd24gdHlwZSBlcXVhbGl0eSBmdW5jdGlvbnMgdG8gcHJvdmlkZSBuaWNlciBlcnJvciBtZXNzYWdlcy4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdHlwZW9iajogVGhlIGRhdGEgdHlwZSB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb24gd2hlbiBib3RoIHZhbHVlcwotICAgICAgICAgICAgICAgICAgICBhcmUgb2YgdGhlIHNhbWUgdHlwZSBpbiBhc3NlcnRFcXVhbCgpLgotICAgICAgICAgICAgZnVuY3Rpb246IFRoZSBjYWxsYWJsZSB0YWtpbmcgdHdvIGFyZ3VtZW50cyBhbmQgYW4gb3B0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgbXNnPSBhcmd1bWVudCB0aGF0IHJhaXNlcyBzZWxmLmZhaWx1cmVFeGNlcHRpb24gd2l0aCBhCi0gICAgICAgICAgICAgICAgICAgIHVzZWZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gdGhlIHR3byBhcmd1bWVudHMgYXJlIG5vdCBlcXVhbC4KLSAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3NbdHlwZW9ial0gPSBfQXNzZXJ0V3JhcHBlcihmdW5jdGlvbikKLQotICAgIGRlZiBhZGRDbGVhbnVwKHNlbGYsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICAiIiJBZGQgYSBmdW5jdGlvbiwgd2l0aCBhcmd1bWVudHMsIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB0ZXN0IGlzCi0gICAgICAgIGNvbXBsZXRlZC4gRnVuY3Rpb25zIGFkZGVkIGFyZSBjYWxsZWQgb24gYSBMSUZPIGJhc2lzIGFuZCBhcmUKLSAgICAgICAgY2FsbGVkIGFmdGVyIHRlYXJEb3duIG9uIHRlc3QgZmFpbHVyZSBvciBzdWNjZXNzLgotCi0gICAgICAgIENsZWFudXAgaXRlbXMgYXJlIGNhbGxlZCBldmVuIGlmIHNldFVwIGZhaWxzICh1bmxpa2UgdGVhckRvd24pLiIiIgotICAgICAgICBzZWxmLl9jbGVhbnVwcy5hcHBlbmQoKGZ1bmN0aW9uLCBhcmdzLCBrd2FyZ3MpKQotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAiSG9vayBtZXRob2QgZm9yIHNldHRpbmcgdXAgdGhlIHRlc3QgZml4dHVyZSBiZWZvcmUgZXhlcmNpc2luZyBpdC4iCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBkZWNvbnN0cnVjdGluZyB0aGUgdGVzdCBmaXh0dXJlIGFmdGVyIHRlc3RpbmcgaXQuIgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiAxCi0KLSAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBUZXN0UmVzdWx0KCkKLQotICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm5zIGJvdGggdGhlIHRlc3QgbWV0aG9kIG5hbWUgYW5kIGZpcnN0IGxpbmUgb2YgaXRzIGRvY3N0cmluZy4KLQotICAgICAgICBJZiBubyBkb2NzdHJpbmcgaXMgZ2l2ZW4sIG9ubHkgcmV0dXJucyB0aGUgbWV0aG9kIG5hbWUuCi0KLSAgICAgICAgVGhpcyBtZXRob2Qgb3ZlcnJpZGVzIHVuaXR0ZXN0LlRlc3RDYXNlLnNob3J0RGVzY3JpcHRpb24oKSwgd2hpY2gKLSAgICAgICAgb25seSByZXR1cm5zIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcsIG9ic2N1cmluZyB0aGUgbmFtZQotICAgICAgICBvZiB0aGUgdGVzdCB1cG9uIGZhaWx1cmUuCi0gICAgICAgICIiIgotICAgICAgICBkZXNjID0gc3RyKHNlbGYpCi0gICAgICAgIGRvY19maXJzdF9saW5lID0gTm9uZQotCi0gICAgICAgIGlmIHNlbGYuX3Rlc3RNZXRob2REb2M6Ci0gICAgICAgICAgICBkb2NfZmlyc3RfbGluZSA9IHNlbGYuX3Rlc3RNZXRob2REb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKQotICAgICAgICBpZiBkb2NfZmlyc3RfbGluZToKLSAgICAgICAgICAgIGRlc2MgPSAnXG4nLmpvaW4oKGRlc2MsIGRvY19maXJzdF9saW5lKSkKLSAgICAgICAgcmV0dXJuIGRlc2MKLQotICAgIGRlZiBpZChzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgdHlwZShzZWxmKSBpcyBub3QgdHlwZShvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotICAgICAgICByZXR1cm4gc2VsZi5fdGVzdE1ldGhvZE5hbWUgPT0gb3RoZXIuX3Rlc3RNZXRob2ROYW1lCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChzZWxmLl90ZXN0TWV0aG9kTmFtZSwgX3N0cmNsYXNzKHNlbGYuX19jbGFzc19fKSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgdGVzdE1ldGhvZD0lcz4iICUgXAotICAgICAgICAgICAgICAgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQotCi0gICAgZGVmIHJ1bihzZWxmLCByZXN1bHQ9Tm9uZSk6Ci0gICAgICAgIG9yaWdfcmVzdWx0ID0gcmVzdWx0Ci0gICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kZWZhdWx0VGVzdFJlc3VsdCgpCi0gICAgICAgICAgICBzdGFydFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0YXJ0VGVzdFJ1bicsIE5vbmUpCi0gICAgICAgICAgICBpZiBzdGFydFRlc3RSdW4gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3RhcnRUZXN0UnVuKCkKLQotICAgICAgICBzZWxmLl9yZXN1bHRGb3JEb0NsZWFudXBzID0gcmVzdWx0Ci0gICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKLSAgICAgICAgaWYgZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpOgotICAgICAgICAgICAgIyBJZiB0aGUgd2hvbGUgY2xhc3Mgd2FzIHNraXBwZWQuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFNraXAoc2VsZiwgc2VsZi5fX2NsYXNzX18uX191bml0dGVzdF9za2lwX3doeV9fKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0YXR0cihzZWxmLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZXRVcCgpCi0gICAgICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkU2tpcChzZWxmLCBzdHIoZSkpCi0gICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgX0V4cGVjdGVkRmFpbHVyZSBhcyBlOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIGUuZXhjX2luZm8pCi0gICAgICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTa2lwKHNlbGYsIHN0cihlKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3Ioc2VsZiwgc3lzLmV4Y19pbmZvKCkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFRydWUKLQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIHN5cy5leGNfaW5mbygpKQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gRmFsc2UKLQotICAgICAgICAgICAgY2xlYW5VcFN1Y2Nlc3MgPSBzZWxmLmRvQ2xlYW51cHMoKQotICAgICAgICAgICAgc3VjY2VzcyA9IHN1Y2Nlc3MgYW5kIGNsZWFuVXBTdWNjZXNzCi0gICAgICAgICAgICBpZiBzdWNjZXNzOgotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKLSAgICAgICAgICAgIGlmIG9yaWdfcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0b3BUZXN0UnVuJywgTm9uZSkKLSAgICAgICAgICAgICAgICBpZiBzdG9wVGVzdFJ1biBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQotCi0gICAgZGVmIGRvQ2xlYW51cHMoc2VsZik6Ci0gICAgICAgICIiIkV4ZWN1dGUgYWxsIGNsZWFudXAgZnVuY3Rpb25zLiBOb3JtYWxseSBjYWxsZWQgZm9yIHlvdSBhZnRlcgotICAgICAgICB0ZWFyRG93bi4iIiIKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5fcmVzdWx0Rm9yRG9DbGVhbnVwcwotICAgICAgICBvayA9IFRydWUKLSAgICAgICAgd2hpbGUgc2VsZi5fY2xlYW51cHM6Ci0gICAgICAgICAgICBmdW5jdGlvbiwgYXJncywga3dhcmdzID0gc2VsZi5fY2xlYW51cHMucG9wKC0xKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgb2sgPSBGYWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRFcnJvcihzZWxmLCBzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgcmV0dXJuIG9rCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQotCi0gICAgZGVmIGRlYnVnKHNlbGYpOgotICAgICAgICAiIiJSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKLSAgICAgICAgc2VsZi5zZXRVcCgpCi0gICAgICAgIGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpKCkKLSAgICAgICAgc2VsZi50ZWFyRG93bigpCi0KLSAgICBkZWYgc2tpcFRlc3Qoc2VsZiwgcmVhc29uKToKLSAgICAgICAgIiIiU2tpcCB0aGlzIHRlc3QuIiIiCi0gICAgICAgIHJhaXNlIFNraXBUZXN0KHJlYXNvbikKLQotICAgIGRlZiBmYWlsKHNlbGYsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiRmFpbCBpbW1lZGlhdGVseSwgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZS4iIiIKLSAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKLQotICAgIGRlZiBhc3NlcnRGYWxzZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkNoZWNrIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UuIiIiCi0gICAgICAgIGlmIGV4cHI6Ci0gICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgIiVyIGlzIG5vdCBmYWxzZSIgJSBleHByKQotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKLQotICAgIGRlZiBhc3NlcnRUcnVlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyB0cnVlLiIiIgotICAgICAgICBpZiBub3QgZXhwcjoKLSAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAiJXIgaXMgbm90IHRydWUiICUgZXhwcikKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KLSAgICBkZWYgX2Zvcm1hdE1lc3NhZ2Uoc2VsZiwgbXNnLCBzdGFuZGFyZE1zZyk6Ci0gICAgICAgICIiIkhvbm91ciB0aGUgbG9uZ01lc3NhZ2UgYXR0cmlidXRlIHdoZW4gZ2VuZXJhdGluZyBmYWlsdXJlIG1lc3NhZ2VzLgotICAgICAgICBJZiBsb25nTWVzc2FnZSBpcyBGYWxzZSB0aGlzIG1lYW5zOgotICAgICAgICAqIFVzZSBvbmx5IGFuIGV4cGxpY2l0IG1lc3NhZ2UgaWYgaXQgaXMgcHJvdmlkZWQKLSAgICAgICAgKiBPdGhlcndpc2UgdXNlIHRoZSBzdGFuZGFyZCBtZXNzYWdlIGZvciB0aGUgYXNzZXJ0Ci0KLSAgICAgICAgSWYgbG9uZ01lc3NhZ2UgaXMgVHJ1ZToKLSAgICAgICAgKiBVc2UgdGhlIHN0YW5kYXJkIG1lc3NhZ2UKLSAgICAgICAgKiBJZiBhbiBleHBsaWNpdCBtZXNzYWdlIGlzIHByb3ZpZGVkLCBwbHVzICcgOiAnIGFuZCB0aGUgZXhwbGljaXQgbWVzc2FnZQotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IHNlbGYubG9uZ01lc3NhZ2U6Ci0gICAgICAgICAgICByZXR1cm4gbXNnIG9yIHN0YW5kYXJkTXNnCi0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTXNnCi0gICAgICAgIHJldHVybiBzdGFuZGFyZE1zZyArICcgOiAnICsgbXNnCi0KLQotICAgIGRlZiBhc3NlcnRSYWlzZXMoc2VsZiwgZXhjQ2xhc3MsIGNhbGxhYmxlT2JqPU5vbmUsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICIiIkZhaWwgdW5sZXNzIGFuIGV4Y2VwdGlvbiBvZiBjbGFzcyBleGNDbGFzcyBpcyB0aHJvd24KLSAgICAgICAgICAgYnkgY2FsbGFibGVPYmogd2hlbiBpbnZva2VkIHdpdGggYXJndW1lbnRzIGFyZ3MgYW5kIGtleXdvcmQKLSAgICAgICAgICAgYXJndW1lbnRzIGt3YXJncy4gSWYgYSBkaWZmZXJlbnQgdHlwZSBvZiBleGNlcHRpb24gaXMKLSAgICAgICAgICAgdGhyb3duLCBpdCB3aWxsIG5vdCBiZSBjYXVnaHQsIGFuZCB0aGUgdGVzdCBjYXNlIHdpbGwgYmUKLSAgICAgICAgICAgZGVlbWVkIHRvIGhhdmUgc3VmZmVyZWQgYW4gZXJyb3IsIGV4YWN0bHkgYXMgZm9yIGFuCi0gICAgICAgICAgIHVuZXhwZWN0ZWQgZXhjZXB0aW9uLgotCi0gICAgICAgICAgIElmIGNhbGxlZCB3aXRoIGNhbGxhYmxlT2JqIG9taXR0ZWQgb3IgTm9uZSwgd2lsbCByZXR1cm4gYQotICAgICAgICAgICBjb250ZXh0IG9iamVjdCB1c2VkIGxpa2UgdGhpczo6Ci0KLSAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvbWVfZXJyb3JfY2xhc3MpOgotICAgICAgICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQotICAgICAgICAiIiIKLSAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4Y0NsYXNzLCBzZWxmLCBjYWxsYWJsZU9iaikKLSAgICAgICAgaWYgY2FsbGFibGVPYmogaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBjb250ZXh0Ci0gICAgICAgIHdpdGggY29udGV4dDoKLSAgICAgICAgICAgIGNhbGxhYmxlT2JqKCphcmdzLCAqKmt3YXJncykKLQotICAgIGRlZiBfZ2V0QXNzZXJ0RXF1YWxpdHlGdW5jKHNlbGYsIGZpcnN0LCBzZWNvbmQpOgotICAgICAgICAiIiJHZXQgYSBkZXRhaWxlZCBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciB0aGUgdHlwZXMgb2YgdGhlIHR3byBhcmdzLgotCi0gICAgICAgIFJldHVybnM6IEEgY2FsbGFibGUgYWNjZXB0aW5nIChmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSkgdGhhdCB3aWxsCi0gICAgICAgIHJhaXNlIGEgZmFpbHVyZSBleGNlcHRpb24gaWYgZmlyc3QgIT0gc2Vjb25kIHdpdGggYSB1c2VmdWwgaHVtYW4KLSAgICAgICAgcmVhZGFibGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhvc2UgdHlwZXMuCi0gICAgICAgICIiIgotICAgICAgICAjCi0gICAgICAgICMgTk9URShncmVnb3J5LnAuc21pdGgpOiBJIGNvbnNpZGVyZWQgaXNpbnN0YW5jZShmaXJzdCwgdHlwZShzZWNvbmQpKQotICAgICAgICAjIGFuZCB2aWNlIHZlcnNhLiAgSSBvcHRlZCBmb3IgdGhlIGNvbnNlcnZhdGl2ZSBhcHByb2FjaCBpbiBjYXNlCi0gICAgICAgICMgc3ViY2xhc3NlcyBhcmUgbm90IGludGVuZGVkIHRvIGJlIGNvbXBhcmVkIGluIGRldGFpbCB0byB0aGVpciBzdXBlcgotICAgICAgICAjIGNsYXNzIGluc3RhbmNlcyB1c2luZyBhIHR5cGUgZXF1YWxpdHkgZnVuYy4gIFRoaXMgbWVhbnMgdGVzdGluZwotICAgICAgICAjIHN1YnR5cGVzIHdvbid0IGF1dG9tYWdpY2FsbHkgdXNlIHRoZSBkZXRhaWxlZCBjb21wYXJpc29uLiAgQ2FsbGVycwotICAgICAgICAjIHNob3VsZCB1c2UgdGhlaXIgdHlwZSBzcGVjaWZpYyBhc3NlcnRTcGFtRXF1YWwgbWV0aG9kIHRvIGNvbXBhcmUKLSAgICAgICAgIyBzdWJjbGFzc2VzIGlmIHRoZSBkZXRhaWxlZCBjb21wYXJpc29uIGlzIGRlc2lyZWQgYW5kIGFwcHJvcHJpYXRlLgotICAgICAgICAjIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjU3OC4KLSAgICAgICAgIwotICAgICAgICBpZiB0eXBlKGZpcnN0KSBpcyB0eXBlKHNlY29uZCk6Ci0gICAgICAgICAgICBhc3NlcnRlciA9IHNlbGYuX3R5cGVfZXF1YWxpdHlfZnVuY3MuZ2V0KHR5cGUoZmlyc3QpKQotICAgICAgICAgICAgaWYgYXNzZXJ0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGFzc2VydGVyLmZ1bmN0aW9uCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuX2Jhc2VBc3NlcnRFcXVhbAotCi0gICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgotICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCi0gICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciAhPSAlcicgJSAoZmlyc3QsIHNlY29uZCkKLSAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCi0KLSAgICBkZWYgYXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCi0gICAgICAgICAgIG9wZXJhdG9yLgotICAgICAgICAiIiIKLSAgICAgICAgYXNzZXJ0aW9uX2Z1bmMgPSBzZWxmLl9nZXRBc3NlcnRFcXVhbGl0eUZ1bmMoZmlyc3QsIHNlY29uZCkKLSAgICAgICAgYXNzZXJ0aW9uX2Z1bmMoZmlyc3QsIHNlY29uZCwgbXNnPW1zZykKLQotICAgIGRlZiBhc3NlcnROb3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSAnPT0nCi0gICAgICAgICAgIG9wZXJhdG9yLgotICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IGZpcnN0ICE9IHNlY29uZDoKLSAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAnJXIgPT0gJXInICUgKGZpcnN0LCBzZWNvbmQpKQotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKLQotICAgIGRlZiBhc3NlcnRBbG1vc3RFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBwbGFjZXM9NywgbXNnPU5vbmUpOgotICAgICAgICAiIiJGYWlsIGlmIHRoZSB0d28gb2JqZWN0cyBhcmUgdW5lcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCi0gICAgICAgICAgIGRpZmZlcmVuY2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCi0gICAgICAgICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVyby4KLQotICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCi0gICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpICE9IDA6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciAhPSAlciB3aXRoaW4gJXIgcGxhY2VzJyAlIChmaXJzdCwgc2Vjb25kLCBwbGFjZXMpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCi0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQotCi0gICAgZGVmIGFzc2VydE5vdEFsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz03LCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSBlcXVhbCBhcyBkZXRlcm1pbmVkIGJ5IHRoZWlyCi0gICAgICAgICAgIGRpZmZlcmVuY2Ugcm91bmRlZCB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzCi0gICAgICAgICAgIChkZWZhdWx0IDcpIGFuZCBjb21wYXJpbmcgdG8gemVyby4KLQotICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCi0gICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KLSAgICAgICAgIiIiCi0gICAgICAgIGlmIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpID09IDA6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciA9PSAlciB3aXRoaW4gJXIgcGxhY2VzJyAlIChmaXJzdCwgc2Vjb25kLCBwbGFjZXMpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCi0gICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQotCi0gICAgIyBTeW5vbnltcyBmb3IgYXNzZXJ0aW9uIG1ldGhvZHMKLQotICAgICMgVGhlIHBsdXJhbHMgYXJlIHVuZG9jdW1lbnRlZC4gIEtlZXAgdGhlbSB0aGF0IHdheSB0byBkaXNjb3VyYWdlIHVzZS4KLSAgICAjIERvIG5vdCBhZGQgbW9yZS4gIERvIG5vdCByZW1vdmUuCi0gICAgIyBHb2luZyB0aHJvdWdoIGEgZGVwcmVjYXRpb24gY3ljbGUgb24gdGhlc2Ugd291bGQgYW5ub3kgbWFueSBwZW9wbGUuCi0gICAgYXNzZXJ0RXF1YWxzID0gYXNzZXJ0RXF1YWwKLSAgICBhc3NlcnROb3RFcXVhbHMgPSBhc3NlcnROb3RFcXVhbAotICAgIGFzc2VydEFsbW9zdEVxdWFscyA9IGFzc2VydEFsbW9zdEVxdWFsCi0gICAgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzID0gYXNzZXJ0Tm90QWxtb3N0RXF1YWwKLSAgICBhc3NlcnRfID0gYXNzZXJ0VHJ1ZQotCi0gICAgIyBUaGVzZSBmYWlsKiBhc3NlcnRpb24gbWV0aG9kIG5hbWVzIGFyZSBwZW5kaW5nIGRlcHJlY2F0aW9uIGFuZCB3aWxsCi0gICAgIyBiZSBhIERlcHJlY2F0aW9uV2FybmluZyBpbiAzLjI7IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTc4Ci0gICAgZGVmIF9kZXByZWNhdGUob3JpZ2luYWxfZnVuYyk6Ci0gICAgICAgIGRlZiBkZXByZWNhdGVkX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCi0gICAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgezB9IGluc3RlYWQuJy5mb3JtYXQob3JpZ2luYWxfZnVuYy5fX25hbWVfXyksCi0gICAgICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbF9mdW5jKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgcmV0dXJuIGRlcHJlY2F0ZWRfZnVuYwotCi0gICAgZmFpbFVubGVzc0VxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRFcXVhbCkKLSAgICBmYWlsSWZFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90RXF1YWwpCi0gICAgZmFpbFVubGVzc0FsbW9zdEVxdWFsID0gX2RlcHJlY2F0ZShhc3NlcnRBbG1vc3RFcXVhbCkKLSAgICBmYWlsSWZBbG1vc3RFcXVhbCA9IF9kZXByZWNhdGUoYXNzZXJ0Tm90QWxtb3N0RXF1YWwpCi0gICAgZmFpbFVubGVzcyA9IF9kZXByZWNhdGUoYXNzZXJ0VHJ1ZSkKLSAgICBmYWlsVW5sZXNzUmFpc2VzID0gX2RlcHJlY2F0ZShhc3NlcnRSYWlzZXMpCi0gICAgZmFpbElmID0gX2RlcHJlY2F0ZShhc3NlcnRGYWxzZSkKLQotICAgIGRlZiBhc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYsIHNlcTEsIHNlcTIsIG1zZz1Ob25lLCBzZXFfdHlwZT1Ob25lKToKLSAgICAgICAgIiIiQW4gZXF1YWxpdHkgYXNzZXJ0aW9uIGZvciBvcmRlcmVkIHNlcXVlbmNlcyAobGlrZSBsaXN0cyBhbmQgdHVwbGVzKS4KLQotICAgICAgICBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZnVuY3Rpb24sIGEgdmFsaWQgb3JkZXJlZCBzZXF1ZW5jZSB0eXBlIGlzIG9uZQotICAgICAgICB3aGljaCBjYW4gYmUgaW5kZXhlZCwgaGFzIGEgbGVuZ3RoLCBhbmQgaGFzIGFuIGVxdWFsaXR5IG9wZXJhdG9yLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBzZXExOiBUaGUgZmlyc3Qgc2VxdWVuY2UgdG8gY29tcGFyZS4KLSAgICAgICAgICAgIHNlcTI6IFRoZSBzZWNvbmQgc2VxdWVuY2UgdG8gY29tcGFyZS4KLSAgICAgICAgICAgIHNlcV90eXBlOiBUaGUgZXhwZWN0ZWQgZGF0YXR5cGUgb2YgdGhlIHNlcXVlbmNlcywgb3IgTm9uZSBpZiBubwotICAgICAgICAgICAgICAgICAgICBkYXRhdHlwZSBzaG91bGQgYmUgZW5mb3JjZWQuCi0gICAgICAgICAgICBtc2c6IE9wdGlvbmFsIG1lc3NhZ2UgdG8gdXNlIG9uIGZhaWx1cmUgaW5zdGVhZCBvZiBhIGxpc3Qgb2YKLSAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZXMuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZXFfdHlwZSAhPSBOb25lOgotICAgICAgICAgICAgc2VxX3R5cGVfbmFtZSA9IHNlcV90eXBlLl9fbmFtZV9fCi0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZXExLCBzZXFfdHlwZSk6Ci0gICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCdGaXJzdCBzZXF1ZW5jZSBpcyBub3QgYSAlczogJXInCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNlcTEpKQotICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VxMiwgc2VxX3R5cGUpOgotICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignU2Vjb25kIHNlcXVlbmNlIGlzIG5vdCBhICVzOiAlcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VxX3R5cGVfbmFtZSwgc2VxMikpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZXFfdHlwZV9uYW1lID0gInNlcXVlbmNlIgotCi0gICAgICAgIGRpZmZlcmluZyA9IE5vbmUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGVuMSA9IGxlbihzZXExKQotICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6Ci0gICAgICAgICAgICBkaWZmZXJpbmcgPSAnRmlyc3QgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCi0gICAgICAgICAgICAgICAgICAgIHNlcV90eXBlX25hbWUpCi0KLSAgICAgICAgaWYgZGlmZmVyaW5nIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbGVuMiA9IGxlbihzZXEyKQotICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgIGRpZmZlcmluZyA9ICdTZWNvbmQgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXFfdHlwZV9uYW1lKQotCi0gICAgICAgIGlmIGRpZmZlcmluZyBpcyBOb25lOgotICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgotICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICBzZXExX3JlcHIgPSByZXByKHNlcTEpCi0gICAgICAgICAgICBzZXEyX3JlcHIgPSByZXByKHNlcTIpCi0gICAgICAgICAgICBpZiBsZW4oc2VxMV9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTFfcmVwciA9IHNlcTFfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGlmIGxlbihzZXEyX3JlcHIpID4gMzA6Ci0gICAgICAgICAgICAgICAgc2VxMl9yZXByID0gc2VxMl9yZXByWzozMF0gKyAnLi4uJwotICAgICAgICAgICAgZWxlbWVudHMgPSAoc2VxX3R5cGVfbmFtZS5jYXBpdGFsaXplKCksIHNlcTFfcmVwciwgc2VxMl9yZXByKQotICAgICAgICAgICAgZGlmZmVyaW5nID0gJyVzcyBkaWZmZXI6ICVzICE9ICVzXG4nICUgZWxlbWVudHMKLQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobWluKGxlbjEsIGxlbjIpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0xID0gc2VxMVtpXQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5VbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCBvZiBmaXJzdCAlc1xuJyAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSwgc2VxX3R5cGVfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0yID0gc2VxMltpXQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5VbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCBvZiBzZWNvbmQgJXNcbicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIHNlcV90eXBlX25hbWUpKQotICAgICAgICAgICAgICAgICAgICBicmVhawotCi0gICAgICAgICAgICAgICAgaWYgaXRlbTEgIT0gaXRlbTI6Ci0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuRmlyc3QgZGlmZmVyaW5nIGVsZW1lbnQgJWQ6XG4lc1xuJXNcbicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIGl0ZW0xLCBpdGVtMikpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIChsZW4xID09IGxlbjIgYW5kIHNlcV90eXBlIGlzIE5vbmUgYW5kCi0gICAgICAgICAgICAgICAgICAgIHR5cGUoc2VxMSkgIT0gdHlwZShzZXEyKSk6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhlIHNlcXVlbmNlcyBhcmUgdGhlIHNhbWUsIGJ1dCBoYXZlIGRpZmZlcmluZyB0eXBlcy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgIGlmIGxlbjEgPiBsZW4yOgotICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuRmlyc3QgJXMgY29udGFpbnMgJWQgYWRkaXRpb25hbCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMSAtIGxlbjIpKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuMiwgc2VxMVtsZW4yXSkpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIGZpcnN0ICVzXG4nICUgKGxlbjIsIHNlcV90eXBlX25hbWUpKQotICAgICAgICAgICAgZWxpZiBsZW4xIDwgbGVuMjoKLSAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcblNlY29uZCAlcyBjb250YWlucyAlZCBhZGRpdGlvbmFsICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsZW1lbnRzLlxuJyAlIChzZXFfdHlwZV9uYW1lLCBsZW4yIC0gbGVuMSkpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdGaXJzdCBleHRyYSBlbGVtZW50ICVkOlxuJXNcbicgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZW4xLCBzZXEyW2xlbjFdKSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1VuYWJsZSB0byBpbmRleCBlbGVtZW50ICVkICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2Ygc2Vjb25kICVzXG4nICUgKGxlbjEsIHNlcV90eXBlX25hbWUpKQotICAgICAgICBzdGFuZGFyZE1zZyA9IGRpZmZlcmluZyArICdcbicgKyAnXG4nLmpvaW4oZGlmZmxpYi5uZGlmZihwcHJpbnQucGZvcm1hdChzZXExKS5zcGxpdGxpbmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KHNlcTIpLnNwbGl0bGluZXMoKSkpCi0gICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKLSAgICAgICAgc2VsZi5mYWlsKG1zZykKLQotICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgbGlzdDEsIGxpc3QyLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkEgbGlzdC1zcGVjaWZpYyBlcXVhbGl0eSBhc3NlcnRpb24uCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGxpc3QxOiBUaGUgZmlyc3QgbGlzdCB0byBjb21wYXJlLgotICAgICAgICAgICAgbGlzdDI6IFRoZSBzZWNvbmQgbGlzdCB0byBjb21wYXJlLgotICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgotCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwobGlzdDEsIGxpc3QyLCBtc2csIHNlcV90eXBlPWxpc3QpCi0KLSAgICBkZWYgYXNzZXJ0VHVwbGVFcXVhbChzZWxmLCB0dXBsZTEsIHR1cGxlMiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJBIHR1cGxlLXNwZWNpZmljIGVxdWFsaXR5IGFzc2VydGlvbi4KLQotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdHVwbGUxOiBUaGUgZmlyc3QgdHVwbGUgdG8gY29tcGFyZS4KLSAgICAgICAgICAgIHR1cGxlMjogVGhlIHNlY29uZCB0dXBsZSB0byBjb21wYXJlLgotICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlMSwgdHVwbGUyLCBtc2csIHNlcV90eXBlPXR1cGxlKQotCi0gICAgZGVmIGFzc2VydFNldEVxdWFsKHNlbGYsIHNldDEsIHNldDIsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiQSBzZXQtc3BlY2lmaWMgZXF1YWxpdHkgYXNzZXJ0aW9uLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBzZXQxOiBUaGUgZmlyc3Qgc2V0IHRvIGNvbXBhcmUuCi0gICAgICAgICAgICBzZXQyOiBUaGUgc2Vjb25kIHNldCB0byBjb21wYXJlLgotICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCi0gICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgotCi0gICAgICAgIEZvciBtb3JlIGdlbmVyYWwgY29udGFpbmVyc2hpcCBlcXVhbGl0eSwgYXNzZXJ0U2FtZUVsZW1lbnRzIHdpbGwgd29yawotICAgICAgICB3aXRoIHRoaW5ncyBvdGhlciB0aGFuIHNldHMuICAgIFRoaXMgdXNlcyBkdWNrdHlwaW5nIHRvIHN1cHBvcnQKLSAgICAgICAgZGlmZmVyZW50IHR5cGVzIG9mIHNldHMsIGFuZCBpcyBvcHRpbWl6ZWQgZm9yIHNldHMgc3BlY2lmaWNhbGx5Ci0gICAgICAgIChwYXJhbWV0ZXJzIG11c3Qgc3VwcG9ydCBhIGRpZmZlcmVuY2UgbWV0aG9kKS4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRpZmZlcmVuY2UxID0gc2V0MS5kaWZmZXJlbmNlKHNldDIpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnaW52YWxpZCB0eXBlIHdoZW4gYXR0ZW1wdGluZyBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpcnN0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlmZmVyZW5jZTIgPSBzZXQyLmRpZmZlcmVuY2Uoc2V0MSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdpbnZhbGlkIHR5cGUgd2hlbiBhdHRlbXB0aW5nIHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnc2Vjb25kIGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCi0KLSAgICAgICAgaWYgbm90IChkaWZmZXJlbmNlMSBvciBkaWZmZXJlbmNlMik6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGlmIGRpZmZlcmVuY2UxOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJdGVtcyBpbiB0aGUgZmlyc3Qgc2V0IGJ1dCBub3QgdGhlIHNlY29uZDonKQotICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGlmZmVyZW5jZTE6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHJlcHIoaXRlbSkpCi0gICAgICAgIGlmIGRpZmZlcmVuY2UyOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJdGVtcyBpbiB0aGUgc2Vjb25kIHNldCBidXQgbm90IHRoZSBmaXJzdDonKQotICAgICAgICAgICAgZm9yIGl0ZW0gaW4gZGlmZmVyZW5jZTI6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHJlcHIoaXRlbSkpCi0KLSAgICAgICAgc3RhbmRhcmRNc2cgPSAnXG4nLmpvaW4obGluZXMpCi0gICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydEluKHNlbGYsIG1lbWJlciwgY29udGFpbmVyLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBpbiBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCi0gICAgICAgIGlmIG1lbWJlciBub3QgaW4gY29udGFpbmVyOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXIgbm90IGZvdW5kIGluICVyJyAlIChtZW1iZXIsIGNvbnRhaW5lcikKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydE5vdEluKHNlbGYsIG1lbWJlciwgY29udGFpbmVyLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBub3QgaW4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgotICAgICAgICBpZiBtZW1iZXIgaW4gY29udGFpbmVyOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXIgdW5leHBlY3RlZGx5IGZvdW5kIGluICVyJyAlIChtZW1iZXIsIGNvbnRhaW5lcikKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydElzKHNlbGYsIGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaXMgYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgotICAgICAgICBpZiBleHByMSBpcyBub3QgZXhwcjI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciBpcyBub3QgJXInICUgKGV4cHIxLCBleHByMikKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydElzTm90KHNlbGYsIGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaXMgbm90IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKLSAgICAgICAgaWYgZXhwcjEgaXMgZXhwcjI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICd1bmV4cGVjdGVkbHkgaWRlbnRpY2FsOiAlcicgJSAoZXhwcjEsKQotICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCi0KLSAgICBkZWYgYXNzZXJ0RGljdEVxdWFsKHNlbGYsIGQxLCBkMiwgbXNnPU5vbmUpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShkMSwgZGljdCksICdGaXJzdCBhcmd1bWVudCBpcyBub3QgYSBkaWN0aW9uYXJ5JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoZDIsIGRpY3QpLCAnU2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIGRpY3Rpb25hcnknKQotCi0gICAgICAgIGlmIGQxICE9IGQyOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydERpY3RDb250YWluc1N1YnNldChzZWxmLCBleHBlY3RlZCwgYWN0dWFsLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkNoZWNrcyB3aGV0aGVyIGFjdHVhbCBpcyBhIHN1cGVyc2V0IG9mIGV4cGVjdGVkLiIiIgotICAgICAgICBtaXNzaW5nID0gW10KLSAgICAgICAgbWlzbWF0Y2hlZCA9IFtdCi0gICAgICAgIGZvciBrZXksIHZhbHVlIGluIGV4cGVjdGVkLml0ZW1zKCk6Ci0gICAgICAgICAgICBpZiBrZXkgbm90IGluIGFjdHVhbDoKLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChrZXkpCi0gICAgICAgICAgICBlbGlmIHZhbHVlICE9IGFjdHVhbFtrZXldOgotICAgICAgICAgICAgICAgIG1pc21hdGNoZWQuYXBwZW5kKCclcywgZXhwZWN0ZWQ6ICVzLCBhY3R1YWw6ICVzJyAlIChrZXksIHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxba2V5XSkpCi0KLSAgICAgICAgaWYgbm90IChtaXNzaW5nIG9yIG1pc21hdGNoZWQpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgc3RhbmRhcmRNc2cgPSAnJwotICAgICAgICBpZiBtaXNzaW5nOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnTWlzc2luZzogJXInICUgJywnLmpvaW4obWlzc2luZykKLSAgICAgICAgaWYgbWlzbWF0Y2hlZDoKLSAgICAgICAgICAgIGlmIHN0YW5kYXJkTXNnOgotICAgICAgICAgICAgICAgIHN0YW5kYXJkTXNnICs9ICc7ICcKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnICs9ICdNaXNtYXRjaGVkIHZhbHVlczogJXMnICUgJywnLmpvaW4obWlzbWF0Y2hlZCkKLQotICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKLQotICAgIGRlZiBhc3NlcnRTYW1lRWxlbWVudHMoc2VsZiwgZXhwZWN0ZWRfc2VxLCBhY3R1YWxfc2VxLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkFuIHVub3JkZXJlZCBzZXF1ZW5jZSBzcGVjaWZpYyBjb21wYXJpc29uLgotCi0gICAgICAgIFJhaXNlcyB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgbGlzdGluZyB3aGljaCBlbGVtZW50cyBvZiBleHBlY3RlZF9zZXEKLSAgICAgICAgYXJlIG1pc3NpbmcgZnJvbSBhY3R1YWxfc2VxIGFuZCB2aWNlIHZlcnNhIGlmIGFueS4KLSAgICAgICAgIiIiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2V0KGV4cGVjdGVkX3NlcSkKLSAgICAgICAgICAgIGFjdHVhbCA9IHNldChhY3R1YWxfc2VxKQotICAgICAgICAgICAgbWlzc2luZyA9IGxpc3QoZXhwZWN0ZWQuZGlmZmVyZW5jZShhY3R1YWwpKQotICAgICAgICAgICAgdW5leHBlY3RlZCA9IGxpc3QoYWN0dWFsLmRpZmZlcmVuY2UoZXhwZWN0ZWQpKQotICAgICAgICAgICAgbWlzc2luZy5zb3J0KCkKLSAgICAgICAgICAgIHVuZXhwZWN0ZWQuc29ydCgpCi0gICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAjIEZhbGwgYmFjayB0byBzbG93ZXIgbGlzdC1jb21wYXJlIGlmIGFueSBvZiB0aGUgb2JqZWN0cyBhcmUKLSAgICAgICAgICAgICMgbm90IGhhc2hhYmxlLgotICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KGV4cGVjdGVkX3NlcSkKLSAgICAgICAgICAgIGFjdHVhbCA9IGxpc3QoYWN0dWFsX3NlcSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBleHBlY3RlZC5zb3J0KCkKLSAgICAgICAgICAgICAgICBhY3R1YWwuc29ydCgpCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIG1pc3NpbmcsIHVuZXhwZWN0ZWQgPSBfVW5vcmRlcmFibGVMaXN0RGlmZmVyZW5jZShleHBlY3RlZCwgYWN0dWFsKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtaXNzaW5nLCB1bmV4cGVjdGVkID0gX1NvcnRlZExpc3REaWZmZXJlbmNlKGV4cGVjdGVkLCBhY3R1YWwpCi0gICAgICAgIGVycm9ycyA9IFtdCi0gICAgICAgIGlmIG1pc3Npbmc6Ci0gICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCdFeHBlY3RlZCwgYnV0IG1pc3Npbmc6XG4gICAgJXInICUgbWlzc2luZykKLSAgICAgICAgaWYgdW5leHBlY3RlZDoKLSAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoJ1VuZXhwZWN0ZWQsIGJ1dCBwcmVzZW50OlxuICAgICVyJyAlIHVuZXhwZWN0ZWQpCi0gICAgICAgIGlmIGVycm9yczoKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGVycm9ycykKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKLSAgICAgICAgIiIiQXNzZXJ0IHRoYXQgdHdvIG11bHRpLWxpbmUgc3RyaW5ncyBhcmUgZXF1YWwuIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZpcnN0LCBzdHIpLCAoCi0gICAgICAgICAgICAgICAgJ0ZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZycpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWNvbmQsIHN0ciksICgKLSAgICAgICAgICAgICAgICAnU2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZycpKQotCi0gICAgICAgIGlmIGZpcnN0ICE9IHNlY29uZDoKLSAgICAgICAgICAgICMgZG9uJ3QgdXNlIGRpZmZsaWIgaWYgdGhlIHN0cmluZ3MgYXJlIHRvbyBsb25nCi0gICAgICAgICAgICBpZiAobGVuKGZpcnN0KSA+IHNlbGYuX2RpZmZUaHJlc2hvbGQgb3IKLSAgICAgICAgICAgICAgICBsZW4oc2Vjb25kKSA+IHNlbGYuX2RpZmZUaHJlc2hvbGQpOgotICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2VBc3NlcnRFcXVhbChmaXJzdCwgc2Vjb25kLCBtc2cpCi0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3Quc3BsaXRsaW5lcyhUcnVlKSwgc2Vjb25kLnNwbGl0bGluZXMoVHJ1ZSkpKQotICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCi0KLSAgICBkZWYgYXNzZXJ0TGVzcyhzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA8IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKLSAgICAgICAgaWYgbm90IGEgPCBiOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXIgbm90IGxlc3MgdGhhbiAlcicgJSAoYSwgYikKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydExlc3NFcXVhbChzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA8PSBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCi0gICAgICAgIGlmIG5vdCBhIDw9IGI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVyJyAlIChhLCBiKQotICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCi0KLSAgICBkZWYgYXNzZXJ0R3JlYXRlcihzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA+IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKLSAgICAgICAgaWYgbm90IGEgPiBiOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXIgbm90IGdyZWF0ZXIgdGhhbiAlcicgJSAoYSwgYikKLSAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQotCi0gICAgZGVmIGFzc2VydEdyZWF0ZXJFcXVhbChzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6Ci0gICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA+PSBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCi0gICAgICAgIGlmIG5vdCBhID49IGI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclciBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVyJyAlIChhLCBiKQotICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCi0KLSAgICBkZWYgYXNzZXJ0SXNOb25lKHNlbGYsIG9iaiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJTYW1lIGFzIHNlbGYuYXNzZXJ0VHJ1ZShvYmogaXMgTm9uZSksIHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCi0gICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVyIGlzIG5vdCBOb25lJyAlIG9iagotICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCi0KLSAgICBkZWYgYXNzZXJ0SXNOb3ROb25lKHNlbGYsIG9iaiwgbXNnPU5vbmUpOgotICAgICAgICAiIiJJbmNsdWRlZCBmb3Igc3ltbWV0cnkgd2l0aCBhc3NlcnRJc05vbmUuIiIiCi0gICAgICAgIGlmIG9iaiBpcyBOb25lOgotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAndW5leHBlY3RlZGx5IE5vbmUnCi0gICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKLQotICAgIGRlZiBhc3NlcnRSYWlzZXNSZWdleHAoc2VsZiwgZXhwZWN0ZWRfZXhjZXB0aW9uLCBleHBlY3RlZF9yZWdleHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYWJsZV9vYmo9Tm9uZSwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgIiIiQXNzZXJ0cyB0aGF0IHRoZSBtZXNzYWdlIGluIGEgcmFpc2VkIGV4Y2VwdGlvbiBtYXRjaGVzIGEgcmVnZXhwLgotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBleHBlY3RlZF9leGNlcHRpb246IEV4Y2VwdGlvbiBjbGFzcyBleHBlY3RlZCB0byBiZSByYWlzZWQuCi0gICAgICAgICAgICBleHBlY3RlZF9yZWdleHA6IFJlZ2V4cCAocmUgcGF0dGVybiBvYmplY3Qgb3Igc3RyaW5nKSBleHBlY3RlZAotICAgICAgICAgICAgICAgICAgICB0byBiZSBmb3VuZCBpbiBlcnJvciBtZXNzYWdlLgotICAgICAgICAgICAgY2FsbGFibGVfb2JqOiBGdW5jdGlvbiB0byBiZSBjYWxsZWQuCi0gICAgICAgICAgICBhcmdzOiBFeHRyYSBhcmdzLgotICAgICAgICAgICAga3dhcmdzOiBFeHRyYSBrd2FyZ3MuCi0gICAgICAgICIiIgotICAgICAgICBjb250ZXh0ID0gX0Fzc2VydFJhaXNlc0NvbnRleHQoZXhwZWN0ZWRfZXhjZXB0aW9uLCBzZWxmLCBjYWxsYWJsZV9vYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9yZWdleHApCi0gICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKLSAgICAgICAgd2l0aCBjb250ZXh0OgotICAgICAgICAgICAgY2FsbGFibGVfb2JqKCphcmdzLCAqKmt3YXJncykKLQotICAgIGRlZiBhc3NlcnRSZWdleHBNYXRjaGVzKHNlbGYsIHRleHQsIGV4cGVjdGVkX3JlZ2V4LCBtc2c9Tm9uZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXgsIChzdHIsIGJ5dGVzKSk6Ci0gICAgICAgICAgICBleHBlY3RlZF9yZWdleCA9IHJlLmNvbXBpbGUoZXhwZWN0ZWRfcmVnZXgpCi0gICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleC5zZWFyY2godGV4dCk6Ci0gICAgICAgICAgICBtc2cgPSBtc2cgb3IgIlJlZ2V4cCBkaWRuJ3QgbWF0Y2giCi0gICAgICAgICAgICBtc2cgPSAnJXM6ICVyIG5vdCBmb3VuZCBpbiAlcicgJSAobXNnLCBleHBlY3RlZF9yZWdleC5wYXR0ZXJuLCB0ZXh0KQotICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKLQotCi1kZWYgX1NvcnRlZExpc3REaWZmZXJlbmNlKGV4cGVjdGVkLCBhY3R1YWwpOgotICAgICIiIkZpbmRzIGVsZW1lbnRzIGluIG9ubHkgb25lIG9yIHRoZSBvdGhlciBvZiB0d28sIHNvcnRlZCBpbnB1dCBsaXN0cy4KLQotICAgIFJldHVybnMgYSB0d28tZWxlbWVudCB0dXBsZSBvZiBsaXN0cy4gICAgVGhlIGZpcnN0IGxpc3QgY29udGFpbnMgdGhvc2UKLSAgICBlbGVtZW50cyBpbiB0aGUgImV4cGVjdGVkIiBsaXN0IGJ1dCBub3QgaW4gdGhlICJhY3R1YWwiIGxpc3QsIGFuZCB0aGUKLSAgICBzZWNvbmQgY29udGFpbnMgdGhvc2UgZWxlbWVudHMgaW4gdGhlICJhY3R1YWwiIGxpc3QgYnV0IG5vdCBpbiB0aGUKLSAgICAiZXhwZWN0ZWQiIGxpc3QuICAgIER1cGxpY2F0ZSBlbGVtZW50cyBpbiBlaXRoZXIgaW5wdXQgbGlzdCBhcmUgaWdub3JlZC4KLSAgICAiIiIKLSAgICBpID0gaiA9IDAKLSAgICBtaXNzaW5nID0gW10KLSAgICB1bmV4cGVjdGVkID0gW10KLSAgICB3aGlsZSBUcnVlOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlID0gZXhwZWN0ZWRbaV0KLSAgICAgICAgICAgIGEgPSBhY3R1YWxbal0KLSAgICAgICAgICAgIGlmIGUgPCBhOgotICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGUpCi0gICAgICAgICAgICAgICAgaSArPSAxCi0gICAgICAgICAgICAgICAgd2hpbGUgZXhwZWN0ZWRbaV0gPT0gZToKLSAgICAgICAgICAgICAgICAgICAgaSArPSAxCi0gICAgICAgICAgICBlbGlmIGUgPiBhOgotICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGEpCi0gICAgICAgICAgICAgICAgaiArPSAxCi0gICAgICAgICAgICAgICAgd2hpbGUgYWN0dWFsW2pdID09IGE6Ci0gICAgICAgICAgICAgICAgICAgIGogKz0gMQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpICs9IDEKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIGV4cGVjdGVkW2ldID09IGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBqICs9IDEKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgYWN0dWFsW2pdID09IGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBqICs9IDEKLSAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICBtaXNzaW5nLmV4dGVuZChleHBlY3RlZFtpOl0pCi0gICAgICAgICAgICB1bmV4cGVjdGVkLmV4dGVuZChhY3R1YWxbajpdKQotICAgICAgICAgICAgYnJlYWsKLSAgICByZXR1cm4gbWlzc2luZywgdW5leHBlY3RlZAotCi1kZWYgX1Vub3JkZXJhYmxlTGlzdERpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCk6Ci0gICAgIiIiU2FtZSBiZWhhdmlvciBhcyBfU29ydGVkTGlzdERpZmZlcmVuY2UgYnV0Ci0gICAgZm9yIGxpc3RzIG9mIHVub3JkZXJhYmxlIGl0ZW1zIChsaWtlIGRpY3RzKS4KLQotICAgIEFzIGl0IGRvZXMgYSBsaW5lYXIgc2VhcmNoIHBlciBpdGVtIChyZW1vdmUpIGl0Ci0gICAgaGFzIE8obipuKSBwZXJmb3JtYW5jZS4iIiIKLSAgICBtaXNzaW5nID0gW10KLSAgICB3aGlsZSBleHBlY3RlZDoKLSAgICAgICAgaXRlbSA9IGV4cGVjdGVkLnBvcCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGFjdHVhbC5yZW1vdmUoaXRlbSkKLSAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChpdGVtKQotCi0gICAgIyBhbnl0aGluZyBsZWZ0IGluIGFjdHVhbCBpcyB1bmV4cGVjdGVkCi0gICAgcmV0dXJuIG1pc3NpbmcsIGFjdHVhbAotCi1jbGFzcyBUZXN0U3VpdGUob2JqZWN0KToKLSAgICAiIiJBIHRlc3Qgc3VpdGUgaXMgYSBjb21wb3NpdGUgdGVzdCBjb25zaXN0aW5nIG9mIGEgbnVtYmVyIG9mIFRlc3RDYXNlcy4KLQotICAgIEZvciB1c2UsIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBUZXN0U3VpdGUsIHRoZW4gYWRkIHRlc3QgY2FzZSBpbnN0YW5jZXMuCi0gICAgV2hlbiBhbGwgdGVzdHMgaGF2ZSBiZWVuIGFkZGVkLCB0aGUgc3VpdGUgY2FuIGJlIHBhc3NlZCB0byBhIHRlc3QKLSAgICBydW5uZXIsIHN1Y2ggYXMgVGV4dFRlc3RSdW5uZXIuIEl0IHdpbGwgcnVuIHRoZSBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKLSAgICBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGFkZGVkLCBhZ2dyZWdhdGluZyB0aGUgcmVzdWx0cy4gV2hlbgotICAgIHN1YmNsYXNzaW5nLCBkbyBub3QgZm9yZ2V0IHRvIGNhbGwgdGhlIGJhc2UgY2xhc3MgY29uc3RydWN0b3IuCi0gICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzPSgpKToKLSAgICAgICAgc2VsZi5fdGVzdHMgPSBbXQotICAgICAgICBzZWxmLmFkZFRlc3RzKHRlc3RzKQotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIjwlcyB0ZXN0cz0lcz4iICUgKF9zdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIGxpc3Qoc2VsZikpCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gbGlzdChzZWxmKSA9PSBsaXN0KG90aGVyKQotCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRlcihzZWxmLl90ZXN0cykKLQotICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKLSAgICAgICAgY2FzZXMgPSAwCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6Ci0gICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKLSAgICAgICAgcmV0dXJuIGNhc2VzCi0KLSAgICBkZWYgYWRkVGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgIyBzYW5pdHkgY2hlY2tzCi0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHRlc3QsICdfX2NhbGxfXycpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0aGUgdGVzdCB0byBhZGQgbXVzdCBiZSBjYWxsYWJsZSIpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgdHlwZSkgYW5kIGlzc3ViY2xhc3ModGVzdCwgKFRlc3RDYXNlLCBUZXN0U3VpdGUpKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdENhc2VzIGFuZCBUZXN0U3VpdGVzIG11c3QgYmUgaW5zdGFudGlhdGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBhZGRUZXN0KCkiKQotICAgICAgICBzZWxmLl90ZXN0cy5hcHBlbmQodGVzdCkKLQotICAgIGRlZiBhZGRUZXN0cyhzZWxmLCB0ZXN0cyk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdHMsIHN0cik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInRlc3RzIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgdGVzdHMsIG5vdCBhIHN0cmluZyIpCi0gICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hZGRUZXN0KHRlc3QpCi0KLSAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdCk6Ci0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLQotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCi0KLSAgICBkZWYgZGVidWcoc2VsZik6Ci0gICAgICAgICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKLSAgICAgICAgZm9yIHRlc3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHRlc3QuZGVidWcoKQotCi0KLWNsYXNzIEZ1bmN0aW9uVGVzdENhc2UoVGVzdENhc2UpOgotICAgICIiIkEgdGVzdCBjYXNlIHRoYXQgd3JhcHMgYSB0ZXN0IGZ1bmN0aW9uLgotCi0gICAgVGhpcyBpcyB1c2VmdWwgZm9yIHNsaXBwaW5nIHByZS1leGlzdGluZyB0ZXN0IGZ1bmN0aW9ucyBpbnRvIHRoZQotICAgIHVuaXR0ZXN0IGZyYW1ld29yay4gT3B0aW9uYWxseSwgc2V0LXVwIGFuZCB0aWR5LXVwIGZ1bmN0aW9ucyBjYW4gYmUKLSAgICBzdXBwbGllZC4gQXMgd2l0aCBUZXN0Q2FzZSwgdGhlIHRpZHktdXAgKCd0ZWFyRG93bicpIGZ1bmN0aW9uIHdpbGwKLSAgICBhbHdheXMgYmUgY2FsbGVkIGlmIHRoZSBzZXQtdXAgKCdzZXRVcCcpIGZ1bmN0aW9uIHJhbiBzdWNjZXNzZnVsbHkuCi0gICAgIiIiCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGVzdEZ1bmMsIHNldFVwPU5vbmUsIHRlYXJEb3duPU5vbmUsIGRlc2NyaXB0aW9uPU5vbmUpOgotICAgICAgICBzdXBlcihGdW5jdGlvblRlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgIHNlbGYuX3NldFVwRnVuYyA9IHNldFVwCi0gICAgICAgIHNlbGYuX3RlYXJEb3duRnVuYyA9IHRlYXJEb3duCi0gICAgICAgIHNlbGYuX3Rlc3RGdW5jID0gdGVzdEZ1bmMKLSAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9zZXRVcEZ1bmMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9zZXRVcEZ1bmMoKQotCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl90ZWFyRG93bkZ1bmMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl90ZWFyRG93bkZ1bmMoKQotCi0gICAgZGVmIHJ1blRlc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYuX3Rlc3RGdW5jKCkKLQotICAgIGRlZiBpZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Rlc3RGdW5jLl9fbmFtZV9fCi0KLSAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIHNlbGYuX19jbGFzc19fKToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0gICAgICAgIHJldHVybiBzZWxmLl9zZXRVcEZ1bmMgPT0gb3RoZXIuX3NldFVwRnVuYyBhbmQgXAotICAgICAgICAgICAgICAgc2VsZi5fdGVhckRvd25GdW5jID09IG90aGVyLl90ZWFyRG93bkZ1bmMgYW5kIFwKLSAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jID09IG90aGVyLl90ZXN0RnVuYyBhbmQgXAotICAgICAgICAgICAgICAgc2VsZi5fZGVzY3JpcHRpb24gPT0gb3RoZXIuX2Rlc2NyaXB0aW9uCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KLSAgICBkZWYgX19oYXNoX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBoYXNoKCh0eXBlKHNlbGYpLCBzZWxmLl9zZXRVcEZ1bmMsIHNlbGYuX3RlYXJEb3duRnVuYywKLSAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jLCBzZWxmLl9kZXNjcmlwdGlvbikpCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICIlcyAoJXMpIiAlIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0RnVuYy5fX25hbWVfXykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8JXMgdGVzdEZ1bmM9JXM+IiAlIChfc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0RnVuYykKLQotICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9kZXNjcmlwdGlvbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9kZXNjcmlwdGlvbgotICAgICAgICBkb2MgPSBzZWxmLl90ZXN0RnVuYy5fX2RvY19fCi0gICAgICAgIHJldHVybiBkb2MgYW5kIGRvYy5zcGxpdCgiXG4iKVswXS5zdHJpcCgpIG9yIE5vbmUKLQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBMb2NhdGluZyBhbmQgbG9hZGluZyB0ZXN0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWRlZiBDbXBUb0tleShteWNtcCk6Ci0gICAgJ0NvbnZlcnQgYSBjbXA9IGZ1bmN0aW9uIGludG8gYSBrZXk9IGZ1bmN0aW9uJwotICAgIGNsYXNzIEsob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgKmFyZ3MpOgotICAgICAgICAgICAgc2VsZi5vYmogPSBvYmoKLSAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gbXljbXAoc2VsZi5vYmosIG90aGVyLm9iaikgPT0gLTEKLSAgICByZXR1cm4gSwotCi1kZWYgdGhyZWVfd2F5X2NtcCh4LCB5KToKLSAgICAiIiJSZXR1cm4gLTEgaWYgeCA8IHksIDAgaWYgeCA9PSB5IGFuZCAxIGlmIHggPiB5IiIiCi0gICAgcmV0dXJuICh4ID4geSkgLSAoeCA8IHkpCi0KLWNsYXNzIFRlc3RMb2FkZXIob2JqZWN0KToKLSAgICAiIiIKLSAgICBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIHRlc3RzIGFjY29yZGluZyB0byB2YXJpb3VzIGNyaXRlcmlhCi0gICAgYW5kIHJldHVybmluZyB0aGVtIHdyYXBwZWQgaW4gYSBUZXN0U3VpdGUKLSAgICAiIiIKLSAgICB0ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCi0gICAgc29ydFRlc3RNZXRob2RzVXNpbmcgPSBzdGF0aWNtZXRob2QodGhyZWVfd2F5X2NtcCkKLSAgICBzdWl0ZUNsYXNzID0gVGVzdFN1aXRlCi0KLSAgICBkZWYgbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgotICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRlc3RDYXNlQ2xhc3MiIiIKLSAgICAgICAgaWYgaXNzdWJjbGFzcyh0ZXN0Q2FzZUNsYXNzLCBUZXN0U3VpdGUpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJUZXN0IGNhc2VzIHNob3VsZCBub3QgYmUgZGVyaXZlZCBmcm9tIFRlc3RTdWl0ZS4iIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBNYXliZSB5b3UgbWVhbnQgdG8gZGVyaXZlIGZyb20gVGVzdENhc2U/IikKLSAgICAgICAgdGVzdENhc2VOYW1lcyA9IHNlbGYuZ2V0VGVzdENhc2VOYW1lcyh0ZXN0Q2FzZUNsYXNzKQotICAgICAgICBpZiBub3QgdGVzdENhc2VOYW1lcyBhbmQgaGFzYXR0cih0ZXN0Q2FzZUNsYXNzLCAncnVuVGVzdCcpOgotICAgICAgICAgICAgdGVzdENhc2VOYW1lcyA9IFsncnVuVGVzdCddCi0gICAgICAgIHN1aXRlID0gc2VsZi5zdWl0ZUNsYXNzKG1hcCh0ZXN0Q2FzZUNsYXNzLCB0ZXN0Q2FzZU5hbWVzKSkKLSAgICAgICAgcmV0dXJuIHN1aXRlCi0KLSAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmLCBtb2R1bGUpOgotICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBtb2R1bGUiIiIKLSAgICAgICAgdGVzdHMgPSBbXQotICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kdWxlKToKLSAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGUpIGFuZCBpc3N1YmNsYXNzKG9iaiwgVGVzdENhc2UpOgotICAgICAgICAgICAgICAgIHRlc3RzLmFwcGVuZChzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShvYmopKQotICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKHRlc3RzKQotCi0gICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KLQotICAgICAgICBUaGUgbmFtZSBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhCi0gICAgICAgIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2gKLSAgICAgICAgcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4KLQotICAgICAgICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgdGhlIG5hbWVzIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbW9kdWxlLgotICAgICAgICAiIiIKLSAgICAgICAgcGFydHMgPSBuYW1lLnNwbGl0KCcuJykKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBwYXJ0c19jb3B5ID0gcGFydHNbOl0KLSAgICAgICAgICAgIHdoaWxlIHBhcnRzX2NvcHk6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCcuJy5qb2luKHBhcnRzX2NvcHkpKQotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZGVsIHBhcnRzX2NvcHlbLTFdCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0c19jb3B5OgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIHBhcnRzID0gcGFydHNbMTpdCi0gICAgICAgIG9iaiA9IG1vZHVsZQotICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKLSAgICAgICAgICAgIHBhcmVudCwgb2JqID0gb2JqLCBnZXRhdHRyKG9iaiwgcGFydCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuTW9kdWxlVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG9iaikKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSkgYW5kIGlzc3ViY2xhc3Mob2JqLCBUZXN0Q2FzZSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2Uob2JqKQotICAgICAgICBlbGlmIChpc2luc3RhbmNlKG9iaiwgdHlwZXMuRnVuY3Rpb25UeXBlKSBhbmQKLSAgICAgICAgICAgICAgaXNpbnN0YW5jZShwYXJlbnQsIHR5cGUpIGFuZAotICAgICAgICAgICAgICBpc3N1YmNsYXNzKHBhcmVudCwgVGVzdENhc2UpKToKLSAgICAgICAgICAgIG5hbWUgPSBvYmouX19uYW1lX18KLSAgICAgICAgICAgIGluc3QgPSBwYXJlbnQobmFtZSkKLSAgICAgICAgICAgICMgc3RhdGljIG1ldGhvZHMgZm9sbG93IGEgZGlmZmVyZW50IHBhdGgKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGdldGF0dHIoaW5zdCwgbmFtZSksIHR5cGVzLkZ1bmN0aW9uVHlwZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTdWl0ZShbaW5zdF0pCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZShvYmosIFRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICByZXR1cm4gb2JqCi0KLSAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX2NhbGxfXycpOgotICAgICAgICAgICAgdGVzdCA9IG9iaigpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3QsIFRlc3RTdWl0ZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QKLSAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXN0LCBUZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RTdWl0ZShbdGVzdF0pCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY2FsbGluZyAlcyByZXR1cm5lZCAlcywgbm90IGEgdGVzdCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqLCB0ZXN0KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gbWFrZSB0ZXN0IGZyb206ICVzIiAlIG9iaikKLQotICAgIGRlZiBsb2FkVGVzdHNGcm9tTmFtZXMoc2VsZiwgbmFtZXMsIG1vZHVsZT1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGZvdW5kIHVzaW5nIHRoZSBnaXZlbiBzZXF1ZW5jZQotICAgICAgICBvZiBzdHJpbmcgc3BlY2lmaWVycy4gU2VlICdsb2FkVGVzdHNGcm9tTmFtZSgpJy4KLSAgICAgICAgIiIiCi0gICAgICAgIHN1aXRlcyA9IFtzZWxmLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIG1vZHVsZSkgZm9yIG5hbWUgaW4gbmFtZXNdCi0gICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3Moc3VpdGVzKQotCi0gICAgZGVmIGdldFRlc3RDYXNlTmFtZXMoc2VsZiwgdGVzdENhc2VDbGFzcyk6Ci0gICAgICAgICIiIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MKLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUsIHRlc3RDYXNlQ2xhc3M9dGVzdENhc2VDbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg9c2VsZi50ZXN0TWV0aG9kUHJlZml4KToKLSAgICAgICAgICAgIHJldHVybiBhdHRybmFtZS5zdGFydHN3aXRoKHByZWZpeCkgYW5kIFwKLSAgICAgICAgICAgICAgICBoYXNhdHRyKGdldGF0dHIodGVzdENhc2VDbGFzcywgYXR0cm5hbWUpLCAnX19jYWxsX18nKQotICAgICAgICB0ZXN0Rm5OYW1lcyA9IGxpc3QoZmlsdGVyKGlzVGVzdE1ldGhvZCwgZGlyKHRlc3RDYXNlQ2xhc3MpKSkKLSAgICAgICAgaWYgc2VsZi5zb3J0VGVzdE1ldGhvZHNVc2luZzoKLSAgICAgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoa2V5PUNtcFRvS2V5KHNlbGYuc29ydFRlc3RNZXRob2RzVXNpbmcpKQotICAgICAgICByZXR1cm4gdGVzdEZuTmFtZXMKLQotCi0KLWRlZmF1bHRUZXN0TG9hZGVyID0gVGVzdExvYWRlcigpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBhdGNoZXMgZm9yIG9sZCBmdW5jdGlvbnM6IHRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgYmUgY29uc2lkZXJlZCBvYnNvbGV0ZQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWRlZiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcz1Ob25lKToKLSAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKCkKLSAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBzb3J0VXNpbmcKLSAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9IHByZWZpeAotICAgIGlmIHN1aXRlQ2xhc3M6IGxvYWRlci5zdWl0ZUNsYXNzID0gc3VpdGVDbGFzcwotICAgIHJldHVybiBsb2FkZXIKLQotZGVmIGdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcywgcHJlZml4LCBzb3J0VXNpbmc9dGhyZWVfd2F5X2NtcCk6Ci0gICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nKS5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCi0KLWRlZiBtYWtlU3VpdGUodGVzdENhc2VDbGFzcywgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPXRocmVlX3dheV9jbXAsCi0gICAgICAgICAgICAgIHN1aXRlQ2xhc3M9VGVzdFN1aXRlKToKLSAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3MpLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZSgKLSAgICAgICAgdGVzdENhc2VDbGFzcykKLQotZGVmIGZpbmRUZXN0Q2FzZXMobW9kdWxlLCBwcmVmaXg9J3Rlc3QnLCBzb3J0VXNpbmc9dGhyZWVfd2F5X2NtcCwKLSAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3M9VGVzdFN1aXRlKToKLSAgICByZXR1cm4gX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3MpLmxvYWRUZXN0c0Zyb21Nb2R1bGUoCi0gICAgICAgIG1vZHVsZSkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgVGV4dCBVSQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIF9Xcml0ZWxuRGVjb3JhdG9yKG9iamVjdCk6Ci0gICAgIiIiVXNlZCB0byBkZWNvcmF0ZSBmaWxlLWxpa2Ugb2JqZWN0cyB3aXRoIGEgaGFuZHkgJ3dyaXRlbG4nIG1ldGhvZCIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLHN0cmVhbSk6Ci0gICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCi0KLSAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuc3RyZWFtLGF0dHIpCi0KLSAgICBkZWYgd3JpdGVsbihzZWxmLCBhcmc9Tm9uZSk6Ci0gICAgICAgIGlmIGFyZzoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoYXJnKQotICAgICAgICBzZWxmLndyaXRlKCdcbicpICMgdGV4dC1tb2RlIHN0cmVhbXMgdHJhbnNsYXRlIHRvIFxyXG4gaWYgbmVlZGVkCi0KLQotY2xhc3MgX1RleHRUZXN0UmVzdWx0KFRlc3RSZXN1bHQpOgotICAgICIiIkEgdGVzdCByZXN1bHQgY2xhc3MgdGhhdCBjYW4gcHJpbnQgZm9ybWF0dGVkIHRleHQgcmVzdWx0cyB0byBhIHN0cmVhbS4KLQotICAgIFVzZWQgYnkgVGV4dFRlc3RSdW5uZXIuCi0gICAgIiIiCi0gICAgc2VwYXJhdG9yMSA9ICc9JyAqIDcwCi0gICAgc2VwYXJhdG9yMiA9ICctJyAqIDcwCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCBkZXNjcmlwdGlvbnMsIHZlcmJvc2l0eSk6Ci0gICAgICAgIHN1cGVyKF9UZXh0VGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oKQotICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQotICAgICAgICBzZWxmLnNob3dBbGwgPSB2ZXJib3NpdHkgPiAxCi0gICAgICAgIHNlbGYuZG90cyA9IHZlcmJvc2l0eSA9PSAxCi0gICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCi0KLSAgICBkZWYgZ2V0RGVzY3JpcHRpb24oc2VsZiwgdGVzdCk6Ci0gICAgICAgIGlmIHNlbGYuZGVzY3JpcHRpb25zOgotICAgICAgICAgICAgcmV0dXJuIHRlc3Quc2hvcnREZXNjcmlwdGlvbigpIG9yIHN0cih0ZXN0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHN0cih0ZXN0KQotCi0gICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKLSAgICAgICAgc3VwZXIoX1RleHRUZXN0UmVzdWx0LCBzZWxmKS5zdGFydFRlc3QodGVzdCkKLSAgICAgICAgaWYgc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoc2VsZi5nZXREZXNjcmlwdGlvbih0ZXN0KSkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCIgLi4uICIpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCi0KLSAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKLSAgICAgICAgc3VwZXIoX1RleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKHRlc3QpCi0gICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIm9rIikKLSAgICAgICAgZWxpZiBzZWxmLmRvdHM6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnLicpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCi0KLSAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKLSAgICAgICAgc3VwZXIoX1RleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRFcnJvcih0ZXN0LCBlcnIpCi0gICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIkVSUk9SIikKLSAgICAgICAgZWxpZiBzZWxmLmRvdHM6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnRScpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCi0KLSAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgotICAgICAgICBzdXBlcihfVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZEZhaWx1cmUodGVzdCwgZXJyKQotICAgICAgICBpZiBzZWxmLnNob3dBbGw6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJGQUlMIikKLSAgICAgICAgZWxpZiBzZWxmLmRvdHM6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnRicpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCi0KLSAgICBkZWYgYWRkU2tpcChzZWxmLCB0ZXN0LCByZWFzb24pOgotICAgICAgICBzdXBlcihfVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZFNraXAodGVzdCwgcmVhc29uKQotICAgICAgICBpZiBzZWxmLnNob3dBbGw6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJza2lwcGVkIHswIXJ9Ii5mb3JtYXQocmVhc29uKSkKLSAgICAgICAgZWxpZiBzZWxmLmRvdHM6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgicyIpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCi0KLSAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6Ci0gICAgICAgIHN1cGVyKF9UZXh0VGVzdFJlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKHRlc3QsIGVycikKLSAgICAgICAgaWYgc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiZXhwZWN0ZWQgZmFpbHVyZSIpCi0gICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIngiKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYsIHRlc3QpOgotICAgICAgICBzdXBlcihfVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZFVuZXhwZWN0ZWRTdWNjZXNzKHRlc3QpCi0gICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oInVuZXhwZWN0ZWQgc3VjY2VzcyIpCi0gICAgICAgIGVsaWYgc2VsZi5kb3RzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoInUiKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQotCi0gICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmRvdHMgb3Igc2VsZi5zaG93QWxsOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigpCi0gICAgICAgIHNlbGYucHJpbnRFcnJvckxpc3QoJ0VSUk9SJywgc2VsZi5lcnJvcnMpCi0gICAgICAgIHNlbGYucHJpbnRFcnJvckxpc3QoJ0ZBSUwnLCBzZWxmLmZhaWx1cmVzKQotCi0gICAgZGVmIHByaW50RXJyb3JMaXN0KHNlbGYsIGZsYXZvdXIsIGVycm9ycyk6Ci0gICAgICAgIGZvciB0ZXN0LCBlcnIgaW4gZXJyb3JzOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihzZWxmLnNlcGFyYXRvcjEpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIlczogJXMiICUgKGZsYXZvdXIsc2VsZi5nZXREZXNjcmlwdGlvbih0ZXN0KSkpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHNlbGYuc2VwYXJhdG9yMikKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiVzIiAlIGVycikKLQotCi1jbGFzcyBUZXh0VGVzdFJ1bm5lcihvYmplY3QpOgotICAgICIiIkEgdGVzdCBydW5uZXIgY2xhc3MgdGhhdCBkaXNwbGF5cyByZXN1bHRzIGluIHRleHR1YWwgZm9ybS4KLQotICAgIEl0IHByaW50cyBvdXQgdGhlIG5hbWVzIG9mIHRlc3RzIGFzIHRoZXkgYXJlIHJ1biwgZXJyb3JzIGFzIHRoZXkKLSAgICBvY2N1ciwgYW5kIGEgc3VtbWFyeSBvZiB0aGUgcmVzdWx0cyBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHJ1bi4KLSAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPXN5cy5zdGRlcnIsIGRlc2NyaXB0aW9ucz0xLCB2ZXJib3NpdHk9MSk6Ci0gICAgICAgIHNlbGYuc3RyZWFtID0gX1dyaXRlbG5EZWNvcmF0b3Ioc3RyZWFtKQotICAgICAgICBzZWxmLmRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9ucwotICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQotCi0gICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgotICAgICAgICByZXR1cm4gX1RleHRUZXN0UmVzdWx0KHNlbGYuc3RyZWFtLCBzZWxmLmRlc2NyaXB0aW9ucywgc2VsZi52ZXJib3NpdHkpCi0KLSAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgotICAgICAgICAiUnVuIHRoZSBnaXZlbiB0ZXN0IGNhc2Ugb3IgdGVzdCBzdWl0ZS4iCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VSZXN1bHQoKQotICAgICAgICBzdGFydFRpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICBzdGFydFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0YXJ0VGVzdFJ1bicsIE5vbmUpCi0gICAgICAgIGlmIHN0YXJ0VGVzdFJ1biBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHN0YXJ0VGVzdFJ1bigpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRlc3QocmVzdWx0KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc3RvcFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0b3BUZXN0UnVuJywgTm9uZSkKLSAgICAgICAgICAgIGlmIHN0b3BUZXN0UnVuIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuKCkKLSAgICAgICAgc3RvcFRpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICB0aW1lVGFrZW4gPSBzdG9wVGltZSAtIHN0YXJ0VGltZQotICAgICAgICByZXN1bHQucHJpbnRFcnJvcnMoKQotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHJlc3VsdC5zZXBhcmF0b3IyKQotICAgICAgICBydW4gPSByZXN1bHQudGVzdHNSdW4KLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydW4sIHJ1biAhPSAxIGFuZCAicyIgb3IgIiIsIHRpbWVUYWtlbikpCi0gICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQotICAgICAgICByZXN1bHRzID0gbWFwKGxlbiwgKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5za2lwcGVkKSkKLSAgICAgICAgZXhwZWN0ZWRGYWlscywgdW5leHBlY3RlZFN1Y2Nlc3Nlcywgc2tpcHBlZCA9IHJlc3VsdHMKLSAgICAgICAgaW5mb3MgPSBbXQotICAgICAgICBpZiBub3QgcmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKToKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJGQUlMRUQiKQotICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbGVuKHJlc3VsdC5mYWlsdXJlcyksIGxlbihyZXN1bHQuZXJyb3JzKQotICAgICAgICAgICAgaWYgZmFpbGVkOgotICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgiZmFpbHVyZXM9JWQiICUgZmFpbGVkKQotICAgICAgICAgICAgaWYgZXJyb3JlZDoKLSAgICAgICAgICAgICAgICBpbmZvcy5hcHBlbmQoImVycm9ycz0lZCIgJSBlcnJvcmVkKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIk9LIikKLSAgICAgICAgaWYgc2tpcHBlZDoKLSAgICAgICAgICAgIGluZm9zLmFwcGVuZCgic2tpcHBlZD0lZCIgJSBza2lwcGVkKQotICAgICAgICBpZiBleHBlY3RlZEZhaWxzOgotICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJleHBlY3RlZCBmYWlsdXJlcz0lZCIgJSBleHBlY3RlZEZhaWxzKQotICAgICAgICBpZiB1bmV4cGVjdGVkU3VjY2Vzc2VzOgotICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJ1bmV4cGVjdGVkIHN1Y2Nlc3Nlcz0lZCIgJSB1bmV4cGVjdGVkU3VjY2Vzc2VzKQotICAgICAgICBpZiBpbmZvczoKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIiAoJXMpIiAlICgiLCAiLmpvaW4oaW5mb3MpLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiXG4iKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRmFjaWxpdGllcyBmb3IgcnVubmluZyB0ZXN0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1jbGFzcyBUZXN0UHJvZ3JhbShvYmplY3QpOgotICAgICIiIkEgY29tbWFuZC1saW5lIHByb2dyYW0gdGhhdCBydW5zIGEgc2V0IG9mIHRlc3RzOyB0aGlzIGlzIHByaW1hcmlseQotICAgICAgIGZvciBtYWtpbmcgdGVzdCBtb2R1bGVzIGNvbnZlbmllbnRseSBleGVjdXRhYmxlLgotICAgICIiIgotICAgIFVTQUdFID0gIiIiXAotVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0KLUV4YW1wbGVzOgotICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKLSAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZwotICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKLSIiIgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwKLSAgICAgICAgICAgICAgICAgYXJndj1Ob25lLCB0ZXN0UnVubmVyPVRleHRUZXN0UnVubmVyLAotICAgICAgICAgICAgICAgICB0ZXN0TG9hZGVyPWRlZmF1bHRUZXN0TG9hZGVyLCBleGl0PVRydWUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgc3RyKToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlID0gX19pbXBvcnRfXyhtb2R1bGUpCi0gICAgICAgICAgICBmb3IgcGFydCBpbiBtb2R1bGUuc3BsaXQoJy4nKVsxOl06Ci0gICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBnZXRhdHRyKHNlbGYubW9kdWxlLCBwYXJ0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5tb2R1bGUgPSBtb2R1bGUKLSAgICAgICAgaWYgYXJndiBpcyBOb25lOgotICAgICAgICAgICAgYXJndiA9IHN5cy5hcmd2Ci0KLSAgICAgICAgc2VsZi5leGl0ID0gZXhpdAotICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDEKLSAgICAgICAgc2VsZi5kZWZhdWx0VGVzdCA9IGRlZmF1bHRUZXN0Ci0gICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHRlc3RSdW5uZXIKLSAgICAgICAgc2VsZi50ZXN0TG9hZGVyID0gdGVzdExvYWRlcgotICAgICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQotICAgICAgICBzZWxmLnBhcnNlQXJncyhhcmd2KQotICAgICAgICBzZWxmLnJ1blRlc3RzKCkKLQotICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgotICAgICAgICBpZiBtc2c6Ci0gICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSBzZWxmLl9fZGljdF9fKQotICAgICAgICBzeXMuZXhpdCgyKQotCi0gICAgZGVmIHBhcnNlQXJncyhzZWxmLCBhcmd2KToKLSAgICAgICAgaW1wb3J0IGdldG9wdAotICAgICAgICBsb25nX29wdHMgPSBbJ2hlbHAnLCd2ZXJib3NlJywncXVpZXQnXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcHRpb25zLCBhcmdzID0gZ2V0b3B0LmdldG9wdChhcmd2WzE6XSwgJ2hIdnEnLCBsb25nX29wdHMpCi0gICAgICAgICAgICBmb3Igb3B0LCB2YWx1ZSBpbiBvcHRpb25zOgotICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1oJywnLUgnLCctLWhlbHAnKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQotICAgICAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1xJywnLS1xdWlldCcpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKLSAgICAgICAgICAgICAgICBpZiBvcHQgaW4gKCctdicsJy0tdmVyYm9zZScpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDIKLSAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwIGFuZCBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZi5tb2R1bGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBpZiBsZW4oYXJncykgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gYXJncwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IChzZWxmLmRlZmF1bHRUZXN0LCkKLSAgICAgICAgICAgIHNlbGYuY3JlYXRlVGVzdHMoKQotICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KG1zZykKLQotICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKLSAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLnRlc3ROYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKLQotICAgIGRlZiBydW5UZXN0cyhzZWxmKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnRlc3RSdW5uZXIsIHR5cGUpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIodmVyYm9zaXR5PXNlbGYudmVyYm9zaXR5KQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIGRpZG4ndCBhY2NlcHQgdGhlIHZlcmJvc2l0eSBhcmd1bWVudAotICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBpdCBpcyBhc3N1bWVkIHRvIGJlIGEgVGVzdFJ1bm5lciBpbnN0YW5jZQotICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcgotICAgICAgICBzZWxmLnJlc3VsdCA9IHRlc3RSdW5uZXIucnVuKHNlbGYudGVzdCkKLSAgICAgICAgaWYgc2VsZi5leGl0OgotICAgICAgICAgICAgc3lzLmV4aXQobm90IHNlbGYucmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKLQotbWFpbiA9IFRlc3RQcm9ncmFtCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEV4ZWN1dGluZyB0aGlzIG1vZHVsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4obW9kdWxlPU5vbmUpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkgYi9MaWIvdW5pdHRlc3QvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAxYTNmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDY5IEBACisiIiIKK1B5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLCBiYXNlZCBvbiBFcmljaCBHYW1tYSdzIEpVbml0IGFuZCBLZW50IEJlY2sncworU21hbGx0YWxrIHRlc3RpbmcgZnJhbWV3b3JrLgorCitUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgY29yZSBmcmFtZXdvcmsgY2xhc3NlcyB0aGF0IGZvcm0gdGhlIGJhc2lzIG9mCitzcGVjaWZpYyB0ZXN0IGNhc2VzIGFuZCBzdWl0ZXMgKFRlc3RDYXNlLCBUZXN0U3VpdGUgZXRjLiksIGFuZCBhbHNvIGEKK3RleHQtYmFzZWQgdXRpbGl0eSBjbGFzcyBmb3IgcnVubmluZyB0aGUgdGVzdHMgYW5kIHJlcG9ydGluZyB0aGUgcmVzdWx0cworIChUZXh0VGVzdFJ1bm5lcikuCisKK1NpbXBsZSB1c2FnZToKKworICAgIGltcG9ydCB1bml0dGVzdAorCisgICAgY2xhc3MgSW50ZWdlckFyaXRobWVudGljVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBkZWYgdGVzdEFkZChzZWxmKTogICMjIHRlc3QgbWV0aG9kIG5hbWVzIGJlZ2luICd0ZXN0KicKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEgKyAyKSwgMykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCArIDEsIDEpCisgICAgICAgIGRlZiB0ZXN0TXVsdGlwbHkoc2VsZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwICogMTApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoNSAqIDgpLCA0MCkKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIHVuaXR0ZXN0Lm1haW4oKQorCitGdXJ0aGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgYnVuZGxlZCBkb2N1bWVudGF0aW9uLCBhbmQgZnJvbQorCisgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91bml0dGVzdC5odG1sCisKK0NvcHlyaWdodCAoYykgMTk5OS0yMDAzIFN0ZXZlIFB1cmNlbGwKK0NvcHlyaWdodCAoYykgMjAwMy0yMDEwIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCitUaGlzIG1vZHVsZSBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQoraXQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgUHl0aG9uIGl0c2VsZiwgc28gbG9uZyBhcyB0aGlzIGNvcHlyaWdodCBtZXNzYWdlCithbmQgZGlzY2xhaW1lciBhcmUgcmV0YWluZWQgaW4gdGhlaXIgb3JpZ2luYWwgZm9ybS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgQ09ERSwgRVZFTiBJRiBUSEUgQVVUSE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVEhFIEFVVEhPUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgQ09ERSBQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywKK0FORCBUSEVSRSBJUyBOTyBPQkxJR0FUSU9OIFdIQVRTT0VWRVIgVE8gUFJPVklERSBNQUlOVEVOQU5DRSwKK1NVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyIiIgorCitfX2FsbF9fID0gWydUZXN0UmVzdWx0JywgJ1Rlc3RDYXNlJywgJ1Rlc3RTdWl0ZScsCisgICAgICAgICAgICdUZXh0VGVzdFJ1bm5lcicsICdUZXN0TG9hZGVyJywgJ0Z1bmN0aW9uVGVzdENhc2UnLCAnbWFpbicsCisgICAgICAgICAgICdkZWZhdWx0VGVzdExvYWRlcicsICdTa2lwVGVzdCcsICdza2lwJywgJ3NraXBJZicsICdza2lwVW5sZXNzJywKKyAgICAgICAgICAgJ2V4cGVjdGVkRmFpbHVyZScsICdUZXh0VGVzdFJlc3VsdCcsICdpbnN0YWxsSGFuZGxlcicsCisgICAgICAgICAgICdyZWdpc3RlclJlc3VsdCcsICdyZW1vdmVSZXN1bHQnLCAncmVtb3ZlSGFuZGxlciddCisKKyMgRXhwb3NlIG9ic29sZXRlIGZ1bmN0aW9ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19fYWxsX18uZXh0ZW5kKFsnZ2V0VGVzdENhc2VOYW1lcycsICdtYWtlU3VpdGUnLCAnZmluZFRlc3RDYXNlcyddKQorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitmcm9tIC5yZXN1bHQgaW1wb3J0IFRlc3RSZXN1bHQKK2Zyb20gLmNhc2UgaW1wb3J0IChUZXN0Q2FzZSwgRnVuY3Rpb25UZXN0Q2FzZSwgU2tpcFRlc3QsIHNraXAsIHNraXBJZiwKKyAgICAgICAgICAgICAgICAgICBza2lwVW5sZXNzLCBleHBlY3RlZEZhaWx1cmUpCitmcm9tIC5zdWl0ZSBpbXBvcnQgQmFzZVRlc3RTdWl0ZSwgVGVzdFN1aXRlCitmcm9tIC5sb2FkZXIgaW1wb3J0IChUZXN0TG9hZGVyLCBkZWZhdWx0VGVzdExvYWRlciwgbWFrZVN1aXRlLCBnZXRUZXN0Q2FzZU5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgZmluZFRlc3RDYXNlcykKK2Zyb20gLm1haW4gaW1wb3J0IFRlc3RQcm9ncmFtLCBtYWluCitmcm9tIC5ydW5uZXIgaW1wb3J0IFRleHRUZXN0UnVubmVyLCBUZXh0VGVzdFJlc3VsdAorZnJvbSAuc2lnbmFscyBpbXBvcnQgaW5zdGFsbEhhbmRsZXIsIHJlZ2lzdGVyUmVzdWx0LCByZW1vdmVSZXN1bHQsIHJlbW92ZUhhbmRsZXIKKworIyBkZXByZWNhdGVkCitfVGV4dFRlc3RSZXN1bHQgPSBUZXh0VGVzdFJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMjAwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxMiBAQAorIiIiTWFpbiBlbnRyeSBwb2ludCIiIgorCitpbXBvcnQgc3lzCitpZiBzeXMuYXJndlswXS5lbmRzd2l0aCgiX19tYWluX18ucHkiKToKKyAgICBzeXMuYXJndlswXSA9ICJweXRob24gLW0gdW5pdHRlc3QiCisKK19fdW5pdHRlc3QgPSBUcnVlCisKK2Zyb20gLm1haW4gaW1wb3J0IG1haW4sIFRlc3RQcm9ncmFtLCBVU0FHRV9BU19NQUlOCitUZXN0UHJvZ3JhbS5VU0FHRSA9IFVTQUdFX0FTX01BSU4KKworbWFpbihtb2R1bGU9Tm9uZSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyZjM3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9jYXNlLnB5CkBAIC0wLDAgKzEsMTI2MyBAQAorIiIiVGVzdCBjYXNlIGltcGxlbWVudGF0aW9uIiIiCisKK2ltcG9ydCBzeXMKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBkaWZmbGliCitpbXBvcnQgcHByaW50CitpbXBvcnQgcmUKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IGNvbGxlY3Rpb25zCisKK2Zyb20gLiBpbXBvcnQgcmVzdWx0Citmcm9tIC51dGlsIGltcG9ydCAoc3RyY2xhc3MsIHNhZmVfcmVwciwgc29ydGVkX2xpc3RfZGlmZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICB1bm9yZGVyYWJsZV9saXN0X2RpZmZlcmVuY2UsIF9jb3VudF9kaWZmX2FsbF9wdXJwb3NlLAorICAgICAgICAgICAgICAgICAgIF9jb3VudF9kaWZmX2hhc2hhYmxlKQorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK0RJRkZfT01JVFRFRCA9ICgnXG5EaWZmIGlzICVzIGNoYXJhY3RlcnMgbG9uZy4gJworICAgICAgICAgICAgICAgICAnU2V0IHNlbGYubWF4RGlmZiB0byBOb25lIHRvIHNlZSBpdC4nKQorCitjbGFzcyBTa2lwVGVzdChFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJhaXNlIHRoaXMgZXhjZXB0aW9uIGluIGEgdGVzdCB0byBza2lwIGl0LgorCisgICAgVXN1YWxseSB5b3UgY2FuIHVzZSBUZXN0UmVzdWx0LnNraXAoKSBvciBvbmUgb2YgdGhlIHNraXBwaW5nIGRlY29yYXRvcnMKKyAgICBpbnN0ZWFkIG9mIHJhaXNpbmcgdGhpcyBkaXJlY3RseS4KKyAgICAiIiIKKworY2xhc3MgX0V4cGVjdGVkRmFpbHVyZShFeGNlcHRpb24pOgorICAgICIiIgorICAgIFJhaXNlIHRoaXMgd2hlbiBhIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KKworICAgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvKToKKyAgICAgICAgc3VwZXIoX0V4cGVjdGVkRmFpbHVyZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KKworY2xhc3MgX1VuZXhwZWN0ZWRTdWNjZXNzKEV4Y2VwdGlvbik6CisgICAgIiIiCisgICAgVGhlIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGZhaWwsIGJ1dCBpdCBkaWRuJ3QhCisgICAgIiIiCisKKworY2xhc3MgX091dGNvbWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3VjY2VzcyA9IFRydWUKKyAgICAgICAgc2VsZi5za2lwcGVkID0gTm9uZQorICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzID0gTm9uZQorICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKKyAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKworCitkZWYgX2lkKG9iaik6CisgICAgcmV0dXJuIG9iagorCitkZWYgc2tpcChyZWFzb24pOgorICAgICIiIgorICAgIFVuY29uZGl0aW9uYWxseSBza2lwIGEgdGVzdC4KKyAgICAiIiIKKyAgICBkZWYgZGVjb3JhdG9yKHRlc3RfaXRlbSk6CisgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZSh0ZXN0X2l0ZW0sIHR5cGUpIGFuZCBpc3N1YmNsYXNzKHRlc3RfaXRlbSwgVGVzdENhc2UpKToKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHModGVzdF9pdGVtKQorICAgICAgICAgICAgZGVmIHNraXBfd3JhcHBlcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAgIHJhaXNlIFNraXBUZXN0KHJlYXNvbikKKyAgICAgICAgICAgIHRlc3RfaXRlbSA9IHNraXBfd3JhcHBlcgorCisgICAgICAgIHRlc3RfaXRlbS5fX3VuaXR0ZXN0X3NraXBfXyA9IFRydWUKKyAgICAgICAgdGVzdF9pdGVtLl9fdW5pdHRlc3Rfc2tpcF93aHlfXyA9IHJlYXNvbgorICAgICAgICByZXR1cm4gdGVzdF9pdGVtCisgICAgcmV0dXJuIGRlY29yYXRvcgorCitkZWYgc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKKyAgICAiIiIKKyAgICBTa2lwIGEgdGVzdCBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWUuCisgICAgIiIiCisgICAgaWYgY29uZGl0aW9uOgorICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCisgICAgcmV0dXJuIF9pZAorCitkZWYgc2tpcFVubGVzcyhjb25kaXRpb24sIHJlYXNvbik6CisgICAgIiIiCisgICAgU2tpcCBhIHRlc3QgdW5sZXNzIHRoZSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAgICAiIiIKKyAgICBpZiBub3QgY29uZGl0aW9uOgorICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCisgICAgcmV0dXJuIF9pZAorCisKK2RlZiBleHBlY3RlZEZhaWx1cmUoZnVuYyk6CisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVkRmFpbHVyZShzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzCisgICAgcmV0dXJuIHdyYXBwZXIKKworCitjbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQob2JqZWN0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgdGVzdF9jYXNlLCBjYWxsYWJsZV9vYmo9Tm9uZSwKKyAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4PU5vbmUpOgorICAgICAgICBzZWxmLmV4cGVjdGVkID0gZXhwZWN0ZWQKKyAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uID0gdGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24KKyAgICAgICAgaWYgY2FsbGFibGVfb2JqIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYub2JqX25hbWUgPSBjYWxsYWJsZV9vYmouX19uYW1lX18KKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gc3RyKGNhbGxhYmxlX29iaikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYub2JqX25hbWUgPSBOb25lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXgsIChieXRlcywgc3RyKSk6CisgICAgICAgICAgICBleHBlY3RlZF9yZWdleCA9IHJlLmNvbXBpbGUoZXhwZWN0ZWRfcmVnZXgpCisgICAgICAgIHNlbGYuZXhwZWN0ZWRfcmVnZXggPSBleHBlY3RlZF9yZWdleAorCisKK2NsYXNzIF9Bc3NlcnRSYWlzZXNDb250ZXh0KF9Bc3NlcnRSYWlzZXNCYXNlQ29udGV4dCk6CisgICAgIiIiQSBjb250ZXh0IG1hbmFnZXIgdXNlZCB0byBpbXBsZW1lbnQgVGVzdENhc2UuYXNzZXJ0UmFpc2VzKiBtZXRob2RzLiIiIgorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6CisgICAgICAgIGlmIGV4Y190eXBlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBzZWxmLmV4cGVjdGVkLl9fbmFtZV9fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjX25hbWUgPSBzdHIoc2VsZi5leHBlY3RlZCkKKyAgICAgICAgICAgIGlmIHNlbGYub2JqX25hbWU6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCJ7MH0gbm90IHJhaXNlZCBieSB7MX0iCisgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZXhjX25hbWUsIHNlbGYub2JqX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24oInswfSBub3QgcmFpc2VkIgorICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGV4Y19uYW1lKSkKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoZXhjX3R5cGUsIHNlbGYuZXhwZWN0ZWQpOgorICAgICAgICAgICAgIyBsZXQgdW5leHBlY3RlZCBleGNlcHRpb25zIHBhc3MgdGhyb3VnaAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICMgc3RvcmUgZXhjZXB0aW9uLCB3aXRob3V0IHRyYWNlYmFjaywgZm9yIGxhdGVyIHJldHJpZXZhbAorICAgICAgICBzZWxmLmV4Y2VwdGlvbiA9IGV4Y192YWx1ZS53aXRoX3RyYWNlYmFjayhOb25lKQorICAgICAgICBpZiBzZWxmLmV4cGVjdGVkX3JlZ2V4IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gc2VsZi5leHBlY3RlZF9yZWdleAorICAgICAgICBpZiBub3QgZXhwZWN0ZWRfcmVnZXguc2VhcmNoKHN0cihleGNfdmFsdWUpKToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignIiVzIiBkb2VzIG5vdCBtYXRjaCAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfcmVnZXgucGF0dGVybiwgc3RyKGV4Y192YWx1ZSkpKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIF9Bc3NlcnRXYXJuc0NvbnRleHQoX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KToKKyAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRXYXJucyogbWV0aG9kcy4iIiIKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICMgVGhlIF9fd2FybmluZ3JlZ2lzdHJ5X18ncyBuZWVkIHRvIGJlIGluIGEgcHJpc3RpbmUgc3RhdGUgZm9yIHRlc3RzCisgICAgICAgICMgdG8gd29yayBwcm9wZXJseS4KKyAgICAgICAgZm9yIHYgaW4gc3lzLm1vZHVsZXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBnZXRhdHRyKHYsICdfX3dhcm5pbmdyZWdpc3RyeV9fJywgTm9uZSk6CisgICAgICAgICAgICAgICAgdi5fX3dhcm5pbmdyZWdpc3RyeV9fID0ge30KKyAgICAgICAgc2VsZi53YXJuaW5nc19tYW5hZ2VyID0gd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpCisgICAgICAgIHNlbGYud2FybmluZ3MgPSBzZWxmLndhcm5pbmdzX21hbmFnZXIuX19lbnRlcl9fKCkKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiLCBzZWxmLmV4cGVjdGVkKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKToKKyAgICAgICAgc2VsZi53YXJuaW5nc19tYW5hZ2VyLl9fZXhpdF9fKGV4Y190eXBlLCBleGNfdmFsdWUsIHRiKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleGNfbmFtZSA9IHNlbGYuZXhwZWN0ZWQuX19uYW1lX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgZXhjX25hbWUgPSBzdHIoc2VsZi5leHBlY3RlZCkKKyAgICAgICAgZmlyc3RfbWF0Y2hpbmcgPSBOb25lCisgICAgICAgIGZvciBtIGluIHNlbGYud2FybmluZ3M6CisgICAgICAgICAgICB3ID0gbS5tZXNzYWdlCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh3LCBzZWxmLmV4cGVjdGVkKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgZmlyc3RfbWF0Y2hpbmcgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBmaXJzdF9tYXRjaGluZyA9IHcKKyAgICAgICAgICAgIGlmIChzZWxmLmV4cGVjdGVkX3JlZ2V4IGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgIG5vdCBzZWxmLmV4cGVjdGVkX3JlZ2V4LnNlYXJjaChzdHIodykpKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBzdG9yZSB3YXJuaW5nIGZvciBsYXRlciByZXRyaWV2YWwKKyAgICAgICAgICAgIHNlbGYud2FybmluZyA9IHcKKyAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBtLmZpbGVuYW1lCisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IG0ubGluZW5vCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgIyBOb3cgd2Ugc2ltcGx5IHRyeSB0byBjaG9vc2UgYSBoZWxwZnVsIGZhaWx1cmUgbWVzc2FnZQorICAgICAgICBpZiBmaXJzdF9tYXRjaGluZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignIiVzIiBkb2VzIG5vdCBtYXRjaCAiJXMiJyAlCisgICAgICAgICAgICAgICAgICAgICAoc2VsZi5leHBlY3RlZF9yZWdleC5wYXR0ZXJuLCBzdHIoZmlyc3RfbWF0Y2hpbmcpKSkKKyAgICAgICAgaWYgc2VsZi5vYmpfbmFtZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbigiezB9IG5vdCB0cmlnZ2VyZWQgYnkgezF9IgorICAgICAgICAgICAgICAgIC5mb3JtYXQoZXhjX25hbWUsIHNlbGYub2JqX25hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCJ7MH0gbm90IHRyaWdnZXJlZCIKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGV4Y19uYW1lKSkKKworCitjbGFzcyBfVHlwZUVxdWFsaXR5RGljdChvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RjYXNlKToKKyAgICAgICAgc2VsZi50ZXN0Y2FzZSA9IHRlc3RjYXNlCisgICAgICAgIHNlbGYuX3N0b3JlID0ge30KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgc2VsZi5fc3RvcmVba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgdmFsdWUgPSBzZWxmLl9zdG9yZVtrZXldCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnRlc3RjYXNlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgaWYga2V5IGluIHNlbGYuX3N0b3JlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisKK2NsYXNzIFRlc3RDYXNlKG9iamVjdCk6CisgICAgIiIiQSBjbGFzcyB3aG9zZSBpbnN0YW5jZXMgYXJlIHNpbmdsZSB0ZXN0IGNhc2VzLgorCisgICAgQnkgZGVmYXVsdCwgdGhlIHRlc3QgY29kZSBpdHNlbGYgc2hvdWxkIGJlIHBsYWNlZCBpbiBhIG1ldGhvZCBuYW1lZAorICAgICdydW5UZXN0Jy4KKworICAgIElmIHRoZSBmaXh0dXJlIG1heSBiZSB1c2VkIGZvciBtYW55IHRlc3QgY2FzZXMsIGNyZWF0ZSBhcworICAgIG1hbnkgdGVzdCBtZXRob2RzIGFzIGFyZSBuZWVkZWQuIFdoZW4gaW5zdGFudGlhdGluZyBzdWNoIGEgVGVzdENhc2UKKyAgICBzdWJjbGFzcywgc3BlY2lmeSBpbiB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IG1ldGhvZAorICAgIHRoYXQgdGhlIGluc3RhbmNlIGlzIHRvIGV4ZWN1dGUuCisKKyAgICBUZXN0IGF1dGhvcnMgc2hvdWxkIHN1YmNsYXNzIFRlc3RDYXNlIGZvciB0aGVpciBvd24gdGVzdHMuIENvbnN0cnVjdGlvbgorICAgIGFuZCBkZWNvbnN0cnVjdGlvbiBvZiB0aGUgdGVzdCdzIGVudmlyb25tZW50ICgnZml4dHVyZScpIGNhbiBiZQorICAgIGltcGxlbWVudGVkIGJ5IG92ZXJyaWRpbmcgdGhlICdzZXRVcCcgYW5kICd0ZWFyRG93bicgbWV0aG9kcyByZXNwZWN0aXZlbHkuCisKKyAgICBJZiBpdCBpcyBuZWNlc3NhcnkgdG8gb3ZlcnJpZGUgdGhlIF9faW5pdF9fIG1ldGhvZCwgdGhlIGJhc2UgY2xhc3MKKyAgICBfX2luaXRfXyBtZXRob2QgbXVzdCBhbHdheXMgYmUgY2FsbGVkLiBJdCBpcyBpbXBvcnRhbnQgdGhhdCBzdWJjbGFzc2VzCisgICAgc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiB0aGVpciBfX2luaXRfXyBtZXRob2QsIHNpbmNlIGluc3RhbmNlcworICAgIG9mIHRoZSBjbGFzc2VzIGFyZSBpbnN0YW50aWF0ZWQgYXV0b21hdGljYWxseSBieSBwYXJ0cyBvZiB0aGUgZnJhbWV3b3JrCisgICAgaW4gb3JkZXIgdG8gYmUgcnVuLgorICAgICIiIgorCisgICAgIyBUaGlzIGF0dHJpYnV0ZSBkZXRlcm1pbmVzIHdoaWNoIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZCB3aGVuCisgICAgIyB0aGUgaW5zdGFuY2UncyBhc3NlcnRpb24gbWV0aG9kcyBmYWlsOyB0ZXN0IG1ldGhvZHMgcmFpc2luZyB0aGlzCisgICAgIyBleGNlcHRpb24gd2lsbCBiZSBkZWVtZWQgdG8gaGF2ZSAnZmFpbGVkJyByYXRoZXIgdGhhbiAnZXJyb3JlZCcKKworICAgIGZhaWx1cmVFeGNlcHRpb24gPSBBc3NlcnRpb25FcnJvcgorCisgICAgIyBUaGlzIGF0dHJpYnV0ZSBkZXRlcm1pbmVzIHdoZXRoZXIgbG9uZyBtZXNzYWdlcyAoaW5jbHVkaW5nIHJlcHIgb2YKKyAgICAjIG9iamVjdHMgdXNlZCBpbiBhc3NlcnQgbWV0aG9kcykgd2lsbCBiZSBwcmludGVkIG9uIGZhaWx1cmUgaW4gKmFkZGl0aW9uKgorICAgICMgdG8gYW55IGV4cGxpY2l0IG1lc3NhZ2UgcGFzc2VkLgorCisgICAgbG9uZ01lc3NhZ2UgPSBUcnVlCisKKyAgICAjIFRoaXMgYXR0cmlidXRlIHNldHMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgZGlmZiBpbiBmYWlsdXJlIG1lc3NhZ2VzCisgICAgIyBieSBhc3NlcnQgbWV0aG9kcyB1c2luZyBkaWZmbGliLiBJdCBpcyBsb29rZWQgdXAgYXMgYW4gaW5zdGFuY2UgYXR0cmlidXRlCisgICAgIyBzbyBjYW4gYmUgY29uZmlndXJlZCBieSBpbmRpdmlkdWFsIHRlc3RzIGlmIHJlcXVpcmVkLgorCisgICAgbWF4RGlmZiA9IDgwKjgKKworICAgICMgSWYgYSBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gX2RpZmZUaHJlc2hvbGQsIHVzZSBub3JtYWwgY29tcGFyaXNvbiBpbnN0ZWFkCisgICAgIyBvZiBkaWZmbGliLiAgU2VlICMxMTc2My4KKyAgICBfZGlmZlRocmVzaG9sZCA9IDIqKjE2CisKKyAgICAjIEF0dHJpYnV0ZSB1c2VkIGJ5IFRlc3RTdWl0ZSBmb3IgY2xhc3NTZXRVcAorCisgICAgX2NsYXNzU2V0dXBGYWlsZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1ldGhvZE5hbWU9J3J1blRlc3QnKToKKyAgICAgICAgIiIiQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyB0aGF0IHdpbGwgdXNlIHRoZSBuYW1lZCB0ZXN0CisgICAgICAgICAgIG1ldGhvZCB3aGVuIGV4ZWN1dGVkLiBSYWlzZXMgYSBWYWx1ZUVycm9yIGlmIHRoZSBpbnN0YW5jZSBkb2VzCisgICAgICAgICAgIG5vdCBoYXZlIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdGVzdE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lCisgICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gJ05vIHRlc3QnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZE5hbWUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGlmIG1ldGhvZE5hbWUgIT0gJ3J1blRlc3QnOgorICAgICAgICAgICAgICAgICMgd2UgYWxsb3cgaW5zdGFudGlhdGlvbiB3aXRoIG5vIGV4cGxpY2l0IG1ldGhvZCBuYW1lCisgICAgICAgICAgICAgICAgIyBidXQgbm90IGFuICppbmNvcnJlY3QqIG9yIG1pc3NpbmcgbWV0aG9kIG5hbWUKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJubyBzdWNoIHRlc3QgbWV0aG9kIGluICVzOiAlcyIgJQorICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXywgbWV0aG9kTmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gdGVzdE1ldGhvZC5fX2RvY19fCisgICAgICAgIHNlbGYuX2NsZWFudXBzID0gW10KKworICAgICAgICAjIE1hcCB0eXBlcyB0byBjdXN0b20gYXNzZXJ0RXF1YWwgZnVuY3Rpb25zIHRoYXQgd2lsbCBjb21wYXJlCisgICAgICAgICMgaW5zdGFuY2VzIG9mIHNhaWQgdHlwZSBpbiBtb3JlIGRldGFpbCB0byBnZW5lcmF0ZSBhIG1vcmUgdXNlZnVsCisgICAgICAgICMgZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgc2VsZi5fdHlwZV9lcXVhbGl0eV9mdW5jcyA9IF9UeXBlRXF1YWxpdHlEaWN0KHNlbGYpCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhkaWN0LCAnYXNzZXJ0RGljdEVxdWFsJykKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKGxpc3QsICdhc3NlcnRMaXN0RXF1YWwnKQorICAgICAgICBzZWxmLmFkZFR5cGVFcXVhbGl0eUZ1bmModHVwbGUsICdhc3NlcnRUdXBsZUVxdWFsJykKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHNldCwgJ2Fzc2VydFNldEVxdWFsJykKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKGZyb3plbnNldCwgJ2Fzc2VydFNldEVxdWFsJykKKyAgICAgICAgc2VsZi5hZGRUeXBlRXF1YWxpdHlGdW5jKHN0ciwgJ2Fzc2VydE11bHRpTGluZUVxdWFsJykKKworICAgIGRlZiBhZGRUeXBlRXF1YWxpdHlGdW5jKHNlbGYsIHR5cGVvYmosIGZ1bmN0aW9uKToKKyAgICAgICAgIiIiQWRkIGEgdHlwZSBzcGVjaWZpYyBhc3NlcnRFcXVhbCBzdHlsZSBmdW5jdGlvbiB0byBjb21wYXJlIGEgdHlwZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBmb3IgdXNlIGJ5IFRlc3RDYXNlIHN1YmNsYXNzZXMgdGhhdCBuZWVkIHRvIHJlZ2lzdGVyCisgICAgICAgIHRoZWlyIG93biB0eXBlIGVxdWFsaXR5IGZ1bmN0aW9ucyB0byBwcm92aWRlIG5pY2VyIGVycm9yIG1lc3NhZ2VzLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0eXBlb2JqOiBUaGUgZGF0YSB0eXBlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBvbiB3aGVuIGJvdGggdmFsdWVzCisgICAgICAgICAgICAgICAgICAgIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGluIGFzc2VydEVxdWFsKCkuCisgICAgICAgICAgICBmdW5jdGlvbjogVGhlIGNhbGxhYmxlIHRha2luZyB0d28gYXJndW1lbnRzIGFuZCBhbiBvcHRpb25hbAorICAgICAgICAgICAgICAgICAgICBtc2c9IGFyZ3VtZW50IHRoYXQgcmFpc2VzIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiB3aXRoIGEKKyAgICAgICAgICAgICAgICAgICAgdXNlZnVsIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aGUgdHdvIGFyZ3VtZW50cyBhcmUgbm90IGVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdHlwZV9lcXVhbGl0eV9mdW5jc1t0eXBlb2JqXSA9IGZ1bmN0aW9uCisKKyAgICBkZWYgYWRkQ2xlYW51cChzZWxmLCBmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgIiIiQWRkIGEgZnVuY3Rpb24sIHdpdGggYXJndW1lbnRzLCB0byBiZSBjYWxsZWQgd2hlbiB0aGUgdGVzdCBpcworICAgICAgICBjb21wbGV0ZWQuIEZ1bmN0aW9ucyBhZGRlZCBhcmUgY2FsbGVkIG9uIGEgTElGTyBiYXNpcyBhbmQgYXJlCisgICAgICAgIGNhbGxlZCBhZnRlciB0ZWFyRG93biBvbiB0ZXN0IGZhaWx1cmUgb3Igc3VjY2Vzcy4KKworICAgICAgICBDbGVhbnVwIGl0ZW1zIGFyZSBjYWxsZWQgZXZlbiBpZiBzZXRVcCBmYWlscyAodW5saWtlIHRlYXJEb3duKS4iIiIKKyAgICAgICAgc2VsZi5fY2xlYW51cHMuYXBwZW5kKChmdW5jdGlvbiwgYXJncywga3dhcmdzKSkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBzZXR0aW5nIHVwIHRoZSB0ZXN0IGZpeHR1cmUgYmVmb3JlIGV4ZXJjaXNpbmcgaXQuIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICJIb29rIG1ldGhvZCBmb3IgZGVjb25zdHJ1Y3RpbmcgdGhlIHRlc3QgZml4dHVyZSBhZnRlciB0ZXN0aW5nIGl0LiIKKyAgICAgICAgcGFzcworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgIkhvb2sgbWV0aG9kIGZvciBzZXR0aW5nIHVwIGNsYXNzIGZpeHR1cmUgYmVmb3JlIHJ1bm5pbmcgdGVzdHMgaW4gdGhlIGNsYXNzLiIKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICJIb29rIG1ldGhvZCBmb3IgZGVjb25zdHJ1Y3RpbmcgdGhlIGNsYXNzIGZpeHR1cmUgYWZ0ZXIgcnVubmluZyBhbGwgdGVzdHMgaW4gdGhlIGNsYXNzLiIKKworICAgIGRlZiBjb3VudFRlc3RDYXNlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDEKKworICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5UZXN0UmVzdWx0KCkKKworICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgbGluZSBvZgorICAgICAgICB0aGUgc3BlY2lmaWVkIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgZG9jID0gc2VsZi5fdGVzdE1ldGhvZERvYworICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCisKKworICAgIGRlZiBpZChzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiB0eXBlKHNlbGYpIGlzIG5vdCB0eXBlKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0TWV0aG9kTmFtZSA9PSBvdGhlci5fdGVzdE1ldGhvZE5hbWUKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHR5cGUoc2VsZiksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzICglcykiICUgKHNlbGYuX3Rlc3RNZXRob2ROYW1lLCBzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXykpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKKyAgICAgICAgICAgICAgIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQorCisgICAgZGVmIF9hZGRTa2lwKHNlbGYsIHJlc3VsdCwgcmVhc29uKToKKyAgICAgICAgYWRkU2tpcCA9IGdldGF0dHIocmVzdWx0LCAnYWRkU2tpcCcsIE5vbmUpCisgICAgICAgIGlmIGFkZFNraXAgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhZGRTa2lwKHNlbGYsIHJlYXNvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZFNraXAgbWV0aG9kLCBza2lwcyBub3QgcmVwb3J0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZywgMikKKyAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisKKyAgICBkZWYgX2V4ZWN1dGVUZXN0UGFydChzZWxmLCBmdW5jdGlvbiwgb3V0Y29tZSwgaXNUZXN0PUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnVuY3Rpb24oKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBvdXRjb21lLnNraXBwZWQgPSBzdHIoZSkKKyAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBpZiBpc1Rlc3Q6CisgICAgICAgICAgICAgICAgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcyA9IGV4Y19pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKKyAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6CisgICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgaXNUZXN0OgorICAgICAgICAgICAgICAgIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlID0gZXhjX2luZm8KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKGV4Y19pbmZvKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKKyAgICAgICAgICAgIG91dGNvbWUuZmFpbHVyZXMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQorICAgICAgICAgICAgb3V0Y29tZS5lcnJvcnMuYXBwZW5kKHN5cy5leGNfaW5mbygpKQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIG9yaWdfcmVzdWx0ID0gcmVzdWx0CisgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5kZWZhdWx0VGVzdFJlc3VsdCgpCisgICAgICAgICAgICBzdGFydFRlc3RSdW4gPSBnZXRhdHRyKHJlc3VsdCwgJ3N0YXJ0VGVzdFJ1bicsIE5vbmUpCisgICAgICAgICAgICBpZiBzdGFydFRlc3RSdW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc3RhcnRUZXN0UnVuKCkKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHNlbGYpCisKKyAgICAgICAgdGVzdE1ldGhvZCA9IGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpCisgICAgICAgIGlmIChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAiX191bml0dGVzdF9za2lwX18iLCBGYWxzZSkgb3IKKyAgICAgICAgICAgIGdldGF0dHIodGVzdE1ldGhvZCwgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpKToKKyAgICAgICAgICAgICMgSWYgdGhlIGNsYXNzIG9yIG1ldGhvZCB3YXMgc2tpcHBlZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBza2lwX3doeSA9IChnZXRhdHRyKHNlbGYuX19jbGFzc19fLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2V0YXR0cih0ZXN0TWV0aG9kLCAnX191bml0dGVzdF9za2lwX3doeV9fJywgJycpKQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZFNraXAocmVzdWx0LCBza2lwX3doeSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKCkKKyAgICAgICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gb3V0Y29tZQorCisgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQoc2VsZi5zZXRVcCwgb3V0Y29tZSkKKyAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKKyAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisKKyAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQorICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQorICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKKyAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKKworICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQorICAgICAgICAgICAgaWYgb3JpZ19yZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBzdG9wVGVzdFJ1biA9IGdldGF0dHIocmVzdWx0LCAnc3RvcFRlc3RSdW4nLCBOb25lKQorICAgICAgICAgICAgICAgIGlmIHN0b3BUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzdG9wVGVzdFJ1bigpCisKKyAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKKyAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCisgICAgICAgIHRlYXJEb3duLiIiIgorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICB3aGlsZSBzZWxmLl9jbGVhbnVwczoKKyAgICAgICAgICAgIGZ1bmN0aW9uLCBhcmdzLCBrd2FyZ3MgPSBzZWxmLl9jbGVhbnVwcy5wb3AoKQorICAgICAgICAgICAgcGFydCA9IGxhbWJkYTogZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHBhcnQsIG91dGNvbWUpCisKKyAgICAgICAgIyByZXR1cm4gdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgICAgICAgIyBldmVuIHRob3VnaCB3ZSBubyBsb25nZXIgdXMgaXQgaW50ZXJuYWxseQorICAgICAgICByZXR1cm4gb3V0Y29tZS5zdWNjZXNzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQorCisgICAgZGVmIGRlYnVnKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKKyAgICAgICAgc2VsZi5zZXRVcCgpCisgICAgICAgIGdldGF0dHIoc2VsZiwgc2VsZi5fdGVzdE1ldGhvZE5hbWUpKCkKKyAgICAgICAgc2VsZi50ZWFyRG93bigpCisgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgorICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgtMSkKKyAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBza2lwVGVzdChzZWxmLCByZWFzb24pOgorICAgICAgICAiIiJTa2lwIHRoaXMgdGVzdC4iIiIKKyAgICAgICAgcmFpc2UgU2tpcFRlc3QocmVhc29uKQorCisgICAgZGVmIGZhaWwoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSBnaXZlbiBtZXNzYWdlLiIiIgorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydEZhbHNlKHNlbGYsIGV4cHIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQ2hlY2sgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZS4iIiIKKyAgICAgICAgaWYgZXhwcjoKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCAiJXMgaXMgbm90IGZhbHNlIiAlIHNhZmVfcmVwcihleHByKSkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0VHJ1ZShzZWxmLCBleHByLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkNoZWNrIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgdHJ1ZS4iIiIKKyAgICAgICAgaWYgbm90IGV4cHI6CisgICAgICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgIiVzIGlzIG5vdCB0cnVlIiAlIHNhZmVfcmVwcihleHByKSkKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgX2Zvcm1hdE1lc3NhZ2Uoc2VsZiwgbXNnLCBzdGFuZGFyZE1zZyk6CisgICAgICAgICIiIkhvbm91ciB0aGUgbG9uZ01lc3NhZ2UgYXR0cmlidXRlIHdoZW4gZ2VuZXJhdGluZyBmYWlsdXJlIG1lc3NhZ2VzLgorICAgICAgICBJZiBsb25nTWVzc2FnZSBpcyBGYWxzZSB0aGlzIG1lYW5zOgorICAgICAgICAqIFVzZSBvbmx5IGFuIGV4cGxpY2l0IG1lc3NhZ2UgaWYgaXQgaXMgcHJvdmlkZWQKKyAgICAgICAgKiBPdGhlcndpc2UgdXNlIHRoZSBzdGFuZGFyZCBtZXNzYWdlIGZvciB0aGUgYXNzZXJ0CisKKyAgICAgICAgSWYgbG9uZ01lc3NhZ2UgaXMgVHJ1ZToKKyAgICAgICAgKiBVc2UgdGhlIHN0YW5kYXJkIG1lc3NhZ2UKKyAgICAgICAgKiBJZiBhbiBleHBsaWNpdCBtZXNzYWdlIGlzIHByb3ZpZGVkLCBwbHVzICcgOiAnIGFuZCB0aGUgZXhwbGljaXQgbWVzc2FnZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYubG9uZ01lc3NhZ2U6CisgICAgICAgICAgICByZXR1cm4gbXNnIG9yIHN0YW5kYXJkTXNnCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHN0YW5kYXJkTXNnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgZG9uJ3Qgc3dpdGNoIHRvICd7fScgZm9ybWF0dGluZyBpbiBQeXRob24gMi5YCisgICAgICAgICAgICAjIGl0IGNoYW5nZXMgdGhlIHdheSB1bmljb2RlIGlucHV0IGlzIGhhbmRsZWQKKyAgICAgICAgICAgIHJldHVybiAnJXMgOiAlcycgJSAoc3RhbmRhcmRNc2csIG1zZykKKyAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiAgJyVzIDogJXMnICUgKHNhZmVfcmVwcihzdGFuZGFyZE1zZyksIHNhZmVfcmVwcihtc2cpKQorCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzKHNlbGYsIGV4Y0NsYXNzLCBjYWxsYWJsZU9iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhbiBleGNlcHRpb24gb2YgY2xhc3MgZXhjQ2xhc3MgaXMgdGhyb3duCisgICAgICAgICAgIGJ5IGNhbGxhYmxlT2JqIHdoZW4gaW52b2tlZCB3aXRoIGFyZ3VtZW50cyBhcmdzIGFuZCBrZXl3b3JkCisgICAgICAgICAgIGFyZ3VtZW50cyBrd2FyZ3MuIElmIGEgZGlmZmVyZW50IHR5cGUgb2YgZXhjZXB0aW9uIGlzCisgICAgICAgICAgIHRocm93biwgaXQgd2lsbCBub3QgYmUgY2F1Z2h0LCBhbmQgdGhlIHRlc3QgY2FzZSB3aWxsIGJlCisgICAgICAgICAgIGRlZW1lZCB0byBoYXZlIHN1ZmZlcmVkIGFuIGVycm9yLCBleGFjdGx5IGFzIGZvciBhbgorICAgICAgICAgICB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4KKworICAgICAgICAgICBJZiBjYWxsZWQgd2l0aCBjYWxsYWJsZU9iaiBvbWl0dGVkIG9yIE5vbmUsIHdpbGwgcmV0dXJuIGEKKyAgICAgICAgICAgY29udGV4dCBvYmplY3QgdXNlZCBsaWtlIHRoaXM6OgorCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTb21lRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKworICAgICAgICAgICBUaGUgY29udGV4dCBtYW5hZ2VyIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBleGNlcHRpb24gYXMKKyAgICAgICAgICAgdGhlICdleGNlcHRpb24nIGF0dHJpYnV0ZS4gVGhpcyBhbGxvd3MgeW91IHRvIGluc3BlY3QgdGhlCisgICAgICAgICAgIGV4Y2VwdGlvbiBhZnRlciB0aGUgYXNzZXJ0aW9uOjoKKworICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTb21lRXhjZXB0aW9uKSBhcyBjbToKKyAgICAgICAgICAgICAgICAgICBkb19zb21ldGhpbmcoKQorICAgICAgICAgICAgICAgdGhlX2V4Y2VwdGlvbiA9IGNtLmV4Y2VwdGlvbgorICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVfZXhjZXB0aW9uLmVycm9yX2NvZGUsIDMpCisgICAgICAgICIiIgorICAgICAgICBjb250ZXh0ID0gX0Fzc2VydFJhaXNlc0NvbnRleHQoZXhjQ2xhc3MsIHNlbGYsIGNhbGxhYmxlT2JqKQorICAgICAgICBpZiBjYWxsYWJsZU9iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKKyAgICAgICAgd2l0aCBjb250ZXh0OgorICAgICAgICAgICAgY2FsbGFibGVPYmooKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGFzc2VydFdhcm5zKHNlbGYsIGV4cGVjdGVkX3dhcm5pbmcsIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIHdhcm5pbmcgb2YgY2xhc3Mgd2FybkNsYXNzIGlzIHRyaWdnZXJlZAorICAgICAgICAgICBieSBjYWxsYWJsZU9iaiB3aGVuIGludm9rZWQgd2l0aCBhcmd1bWVudHMgYXJncyBhbmQga2V5d29yZAorICAgICAgICAgICBhcmd1bWVudHMga3dhcmdzLiAgSWYgYSBkaWZmZXJlbnQgdHlwZSBvZiB3YXJuaW5nIGlzCisgICAgICAgICAgIHRyaWdnZXJlZCwgaXQgd2lsbCBub3QgYmUgaGFuZGxlZDogZGVwZW5kaW5nIG9uIHRoZSBvdGhlcgorICAgICAgICAgICB3YXJuaW5nIGZpbHRlcmluZyBydWxlcyBpbiBlZmZlY3QsIGl0IG1pZ2h0IGJlIHNpbGVuY2VkLCBwcmludGVkCisgICAgICAgICAgIG91dCwgb3IgcmFpc2VkIGFzIGFuIGV4Y2VwdGlvbi4KKworICAgICAgICAgICBJZiBjYWxsZWQgd2l0aCBjYWxsYWJsZU9iaiBvbWl0dGVkIG9yIE5vbmUsIHdpbGwgcmV0dXJuIGEKKyAgICAgICAgICAgY29udGV4dCBvYmplY3QgdXNlZCBsaWtlIHRoaXM6OgorCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFNvbWVXYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKworICAgICAgICAgICBUaGUgY29udGV4dCBtYW5hZ2VyIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCBtYXRjaGluZworICAgICAgICAgICB3YXJuaW5nIGFzIHRoZSAnd2FybmluZycgYXR0cmlidXRlOyBzaW1pbGFybHksIHRoZSAnZmlsZW5hbWUnCisgICAgICAgICAgIGFuZCAnbGluZW5vJyBhdHRyaWJ1dGVzIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5lCisgICAgICAgICAgIG9mIFB5dGhvbiBjb2RlIGZyb20gd2hpY2ggdGhlIHdhcm5pbmcgd2FzIHRyaWdnZXJlZC4KKyAgICAgICAgICAgVGhpcyBhbGxvd3MgeW91IHRvIGluc3BlY3QgdGhlIHdhcm5pbmcgYWZ0ZXIgdGhlIGFzc2VydGlvbjo6CisKKyAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhTb21lV2FybmluZykgYXMgY206CisgICAgICAgICAgICAgICAgICAgZG9fc29tZXRoaW5nKCkKKyAgICAgICAgICAgICAgIHRoZV93YXJuaW5nID0gY20ud2FybmluZworICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aGVfd2FybmluZy5zb21lX2F0dHJpYnV0ZSwgMTQ3KQorICAgICAgICAiIiIKKyAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRXYXJuc0NvbnRleHQoZXhwZWN0ZWRfd2FybmluZywgc2VsZiwgY2FsbGFibGVfb2JqKQorICAgICAgICBpZiBjYWxsYWJsZV9vYmogaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0CisgICAgICAgIHdpdGggY29udGV4dDoKKyAgICAgICAgICAgIGNhbGxhYmxlX29iaigqYXJncywgKiprd2FyZ3MpCisKKyAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKKyAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KKworICAgICAgICBSZXR1cm5zOiBBIGNhbGxhYmxlIGFjY2VwdGluZyAoZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpIHRoYXQgd2lsbAorICAgICAgICByYWlzZSBhIGZhaWx1cmUgZXhjZXB0aW9uIGlmIGZpcnN0ICE9IHNlY29uZCB3aXRoIGEgdXNlZnVsIGh1bWFuCisgICAgICAgIHJlYWRhYmxlIGVycm9yIG1lc3NhZ2UgZm9yIHRob3NlIHR5cGVzLgorICAgICAgICAiIiIKKyAgICAgICAgIworICAgICAgICAjIE5PVEUoZ3JlZ29yeS5wLnNtaXRoKTogSSBjb25zaWRlcmVkIGlzaW5zdGFuY2UoZmlyc3QsIHR5cGUoc2Vjb25kKSkKKyAgICAgICAgIyBhbmQgdmljZSB2ZXJzYS4gIEkgb3B0ZWQgZm9yIHRoZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggaW4gY2FzZQorICAgICAgICAjIHN1YmNsYXNzZXMgYXJlIG5vdCBpbnRlbmRlZCB0byBiZSBjb21wYXJlZCBpbiBkZXRhaWwgdG8gdGhlaXIgc3VwZXIKKyAgICAgICAgIyBjbGFzcyBpbnN0YW5jZXMgdXNpbmcgYSB0eXBlIGVxdWFsaXR5IGZ1bmMuICBUaGlzIG1lYW5zIHRlc3RpbmcKKyAgICAgICAgIyBzdWJ0eXBlcyB3b24ndCBhdXRvbWFnaWNhbGx5IHVzZSB0aGUgZGV0YWlsZWQgY29tcGFyaXNvbi4gIENhbGxlcnMKKyAgICAgICAgIyBzaG91bGQgdXNlIHRoZWlyIHR5cGUgc3BlY2lmaWMgYXNzZXJ0U3BhbUVxdWFsIG1ldGhvZCB0byBjb21wYXJlCisgICAgICAgICMgc3ViY2xhc3NlcyBpZiB0aGUgZGV0YWlsZWQgY29tcGFyaXNvbiBpcyBkZXNpcmVkIGFuZCBhcHByb3ByaWF0ZS4KKyAgICAgICAgIyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1NzguCisgICAgICAgICMKKyAgICAgICAgaWYgdHlwZShmaXJzdCkgaXMgdHlwZShzZWNvbmQpOgorICAgICAgICAgICAgYXNzZXJ0ZXIgPSBzZWxmLl90eXBlX2VxdWFsaXR5X2Z1bmNzLmdldCh0eXBlKGZpcnN0KSkKKyAgICAgICAgICAgIGlmIGFzc2VydGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBhc3NlcnRlcgorCisgICAgICAgIHJldHVybiBzZWxmLl9iYXNlQXNzZXJ0RXF1YWwKKworICAgIGRlZiBfYmFzZUFzc2VydEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiVGhlIGRlZmF1bHQgYXNzZXJ0RXF1YWwgaW1wbGVtZW50YXRpb24sIG5vdCB0eXBlIHNwZWNpZmljLiIiIgorICAgICAgICBpZiBub3QgZmlyc3QgPT0gc2Vjb25kOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCksIHNhZmVfcmVwcihzZWNvbmQpKQorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworICAgIGRlZiBhc3NlcnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSB1bmVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlICc9PScKKyAgICAgICAgICAgb3BlcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnRpb25fZnVuYyA9IHNlbGYuX2dldEFzc2VydEVxdWFsaXR5RnVuYyhmaXJzdCwgc2Vjb25kKQorICAgICAgICBhc3NlcnRpb25fZnVuYyhmaXJzdCwgc2Vjb25kLCBtc2c9bXNnKQorCisgICAgZGVmIGFzc2VydE5vdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlICc9PScKKyAgICAgICAgICAgb3BlcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgZmlyc3QgIT0gc2Vjb25kOgorICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csICclcyA9PSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kKSkpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGZpcnN0LCBzZWNvbmQsIHBsYWNlcz1Ob25lLCBtc2c9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9Tm9uZSk6CisgICAgICAgICIiIkZhaWwgaWYgdGhlIHR3byBvYmplY3RzIGFyZSB1bmVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlaXIKKyAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmluZyB0byB6ZXJvLCBvciBieSBjb21wYXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMgaXMgbW9yZSB0aGFuIHRoZSBnaXZlbiBkZWx0YS4KKworICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KKworICAgICAgICAgICBJZiB0aGUgdHdvIG9iamVjdHMgY29tcGFyZSBlcXVhbCB0aGVuIHRoZXkgd2lsbCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgIGNvbXBhcmUgYWxtb3N0IGVxdWFsLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlyc3QgPT0gc2Vjb25kOgorICAgICAgICAgICAgIyBzaG9ydGN1dAorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGRlbHRhIGlzIG5vdCBOb25lIGFuZCBwbGFjZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNwZWNpZnkgZGVsdGEgb3IgcGxhY2VzIG5vdCBib3RoIikKKworICAgICAgICBpZiBkZWx0YSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGFicyhmaXJzdCAtIHNlY29uZCkgPD0gZGVsdGE6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzIHdpdGhpbiAlcyBkZWx0YScgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihkZWx0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwbGFjZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwbGFjZXMgPSA3CisKKyAgICAgICAgICAgIGlmIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzIHdpdGhpbiAlciBwbGFjZXMnICUgKHNhZmVfcmVwcihmaXJzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzKQorICAgICAgICBtc2cgPSBzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpCisgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKyAgICBkZWYgYXNzZXJ0Tm90QWxtb3N0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgcGxhY2VzPU5vbmUsIG1zZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1Ob25lKToKKyAgICAgICAgIiIiRmFpbCBpZiB0aGUgdHdvIG9iamVjdHMgYXJlIGVxdWFsIGFzIGRldGVybWluZWQgYnkgdGhlaXIKKyAgICAgICAgICAgZGlmZmVyZW5jZSByb3VuZGVkIHRvIHRoZSBnaXZlbiBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgKGRlZmF1bHQgNykgYW5kIGNvbXBhcmluZyB0byB6ZXJvLCBvciBieSBjb21wYXJpbmcgdGhhdCB0aGUKKyAgICAgICAgICAgYmV0d2VlbiB0aGUgdHdvIG9iamVjdHMgaXMgbGVzcyB0aGFuIHRoZSBnaXZlbiBkZWx0YS4KKworICAgICAgICAgICBOb3RlIHRoYXQgZGVjaW1hbCBwbGFjZXMgKGZyb20gemVybykgYXJlIHVzdWFsbHkgbm90IHRoZSBzYW1lCisgICAgICAgICAgIGFzIHNpZ25pZmljYW50IGRpZ2l0cyAobWVhc3VyZWQgZnJvbSB0aGUgbW9zdCBzaWduZmljYW50IGRpZ2l0KS4KKworICAgICAgICAgICBPYmplY3RzIHRoYXQgYXJlIGVxdWFsIGF1dG9tYXRpY2FsbHkgZmFpbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGRlbHRhIGlzIG5vdCBOb25lIGFuZCBwbGFjZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNwZWNpZnkgZGVsdGEgb3IgcGxhY2VzIG5vdCBib3RoIikKKyAgICAgICAgaWYgZGVsdGEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgKGZpcnN0ID09IHNlY29uZCkgYW5kIGFicyhmaXJzdCAtIHNlY29uZCkgPiBkZWx0YToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzID09ICVzIHdpdGhpbiAlcyBkZWx0YScgJSAoc2FmZV9yZXByKGZpcnN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihkZWx0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwbGFjZXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwbGFjZXMgPSA3CisgICAgICAgICAgICBpZiBub3QgKGZpcnN0ID09IHNlY29uZCkgYW5kIHJvdW5kKGFicyhzZWNvbmQtZmlyc3QpLCBwbGFjZXMpICE9IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyA9PSAlcyB3aXRoaW4gJXIgcGxhY2VzJyAlIChzYWZlX3JlcHIoZmlyc3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZXMpCisKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisKKyAgICBkZWYgYXNzZXJ0U2VxdWVuY2VFcXVhbChzZWxmLCBzZXExLCBzZXEyLCBtc2c9Tm9uZSwgc2VxX3R5cGU9Tm9uZSk6CisgICAgICAgICIiIkFuIGVxdWFsaXR5IGFzc2VydGlvbiBmb3Igb3JkZXJlZCBzZXF1ZW5jZXMgKGxpa2UgbGlzdHMgYW5kIHR1cGxlcykuCisKKyAgICAgICAgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGZ1bmN0aW9uLCBhIHZhbGlkIG9yZGVyZWQgc2VxdWVuY2UgdHlwZSBpcyBvbmUKKyAgICAgICAgd2hpY2ggY2FuIGJlIGluZGV4ZWQsIGhhcyBhIGxlbmd0aCwgYW5kIGhhcyBhbiBlcXVhbGl0eSBvcGVyYXRvci4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgc2VxMTogVGhlIGZpcnN0IHNlcXVlbmNlIHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXEyOiBUaGUgc2Vjb25kIHNlcXVlbmNlIHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXFfdHlwZTogVGhlIGV4cGVjdGVkIGRhdGF0eXBlIG9mIHRoZSBzZXF1ZW5jZXMsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgICAgICAgICAgICAgZGF0YXR5cGUgc2hvdWxkIGJlIGVuZm9yY2VkLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VxX3R5cGUgIT0gTm9uZToKKyAgICAgICAgICAgIHNlcV90eXBlX25hbWUgPSBzZXFfdHlwZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VxMSwgc2VxX3R5cGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbignRmlyc3Qgc2VxdWVuY2UgaXMgbm90IGEgJXM6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNhZmVfcmVwcihzZXExKSkpCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZXEyLCBzZXFfdHlwZSk6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCdTZWNvbmQgc2VxdWVuY2UgaXMgbm90IGEgJXM6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlcV90eXBlX25hbWUsIHNhZmVfcmVwcihzZXEyKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZXFfdHlwZV9uYW1lID0gInNlcXVlbmNlIgorCisgICAgICAgIGRpZmZlcmluZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbGVuMSA9IGxlbihzZXExKQorICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnRmlyc3QgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAgICAgIHNlcV90eXBlX25hbWUpCisKKyAgICAgICAgaWYgZGlmZmVyaW5nIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGVuMiA9IGxlbihzZXEyKQorICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIGRpZmZlcmluZyA9ICdTZWNvbmQgJXMgaGFzIG5vIGxlbmd0aC4gICAgTm9uLXNlcXVlbmNlPycgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXFfdHlwZV9uYW1lKQorCisgICAgICAgIGlmIGRpZmZlcmluZyBpcyBOb25lOgorICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKKyAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQorICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKKyAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCisgICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgorICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKKyAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKKyAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpdGVtMSA9IHNlcTFbaV0KKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuVW5hYmxlIHRvIGluZGV4IGVsZW1lbnQgJWQgb2YgZmlyc3QgJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGksIHNlcV90eXBlX25hbWUpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBpdGVtMiA9IHNlcTJbaV0KKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgSW5kZXhFcnJvciwgTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ1xuVW5hYmxlIHRvIGluZGV4IGVsZW1lbnQgJWQgb2Ygc2Vjb25kICVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGl0ZW0xICE9IGl0ZW0yOgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcbkZpcnN0IGRpZmZlcmluZyBlbGVtZW50ICVkOlxuJXNcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpLCBpdGVtMSwgaXRlbTIpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiAobGVuMSA9PSBsZW4yIGFuZCBzZXFfdHlwZSBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICB0eXBlKHNlcTEpICE9IHR5cGUoc2VxMikpOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBzZXF1ZW5jZXMgYXJlIHRoZSBzYW1lLCBidXQgaGF2ZSBkaWZmZXJpbmcgdHlwZXMuCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBsZW4xID4gbGVuMjoKKyAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdcbkZpcnN0ICVzIGNvbnRhaW5zICVkIGFkZGl0aW9uYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxlbWVudHMuXG4nICUgKHNlcV90eXBlX25hbWUsIGxlbjEgLSBsZW4yKSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmluZyArPSAoJ0ZpcnN0IGV4dHJhIGVsZW1lbnQgJWQ6XG4lc1xuJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlbjIsIHNlcTFbbGVuMl0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBJbmRleEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnVW5hYmxlIHRvIGluZGV4IGVsZW1lbnQgJWQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvZiBmaXJzdCAlc1xuJyAlIChsZW4yLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgIGVsaWYgbGVuMSA8IGxlbjI6CisgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnXG5TZWNvbmQgJXMgY29udGFpbnMgJWQgYWRkaXRpb25hbCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbGVtZW50cy5cbicgJSAoc2VxX3R5cGVfbmFtZSwgbGVuMiAtIGxlbjEpKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGlmZmVyaW5nICs9ICgnRmlyc3QgZXh0cmEgZWxlbWVudCAlZDpcbiVzXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGVuMSwgc2VxMltsZW4xXSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEluZGV4RXJyb3IsIE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBkaWZmZXJpbmcgKz0gKCdVbmFibGUgdG8gaW5kZXggZWxlbWVudCAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIHNlY29uZCAlc1xuJyAlIChsZW4xLCBzZXFfdHlwZV9uYW1lKSkKKyAgICAgICAgc3RhbmRhcmRNc2cgPSBkaWZmZXJpbmcKKyAgICAgICAgZGlmZk1zZyA9ICdcbicgKyAnXG4nLmpvaW4oCisgICAgICAgICAgICBkaWZmbGliLm5kaWZmKHBwcmludC5wZm9ybWF0KHNlcTEpLnNwbGl0bGluZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoc2VxMikuc3BsaXRsaW5lcygpKSkKKworICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZk1zZykKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICBzZWxmLmZhaWwobXNnKQorCisgICAgZGVmIF90cnVuY2F0ZU1lc3NhZ2Uoc2VsZiwgbWVzc2FnZSwgZGlmZik6CisgICAgICAgIG1heF9kaWZmID0gc2VsZi5tYXhEaWZmCisgICAgICAgIGlmIG1heF9kaWZmIGlzIE5vbmUgb3IgbGVuKGRpZmYpIDw9IG1heF9kaWZmOgorICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UgKyBkaWZmCisgICAgICAgIHJldHVybiBtZXNzYWdlICsgKERJRkZfT01JVFRFRCAlIGxlbihkaWZmKSkKKworICAgIGRlZiBhc3NlcnRMaXN0RXF1YWwoc2VsZiwgbGlzdDEsIGxpc3QyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkEgbGlzdC1zcGVjaWZpYyBlcXVhbGl0eSBhc3NlcnRpb24uCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGxpc3QxOiBUaGUgZmlyc3QgbGlzdCB0byBjb21wYXJlLgorICAgICAgICAgICAgbGlzdDI6IFRoZSBzZWNvbmQgbGlzdCB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorCisgICAgICAgICIiIgorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwobGlzdDEsIGxpc3QyLCBtc2csIHNlcV90eXBlPWxpc3QpCisKKyAgICBkZWYgYXNzZXJ0VHVwbGVFcXVhbChzZWxmLCB0dXBsZTEsIHR1cGxlMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJBIHR1cGxlLXNwZWNpZmljIGVxdWFsaXR5IGFzc2VydGlvbi4KKworICAgICAgICBBcmdzOgorICAgICAgICAgICAgdHVwbGUxOiBUaGUgZmlyc3QgdHVwbGUgdG8gY29tcGFyZS4KKyAgICAgICAgICAgIHR1cGxlMjogVGhlIHNlY29uZCB0dXBsZSB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlMSwgdHVwbGUyLCBtc2csIHNlcV90eXBlPXR1cGxlKQorCisgICAgZGVmIGFzc2VydFNldEVxdWFsKHNlbGYsIHNldDEsIHNldDIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQSBzZXQtc3BlY2lmaWMgZXF1YWxpdHkgYXNzZXJ0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBzZXQxOiBUaGUgZmlyc3Qgc2V0IHRvIGNvbXBhcmUuCisgICAgICAgICAgICBzZXQyOiBUaGUgc2Vjb25kIHNldCB0byBjb21wYXJlLgorICAgICAgICAgICAgbXNnOiBPcHRpb25hbCBtZXNzYWdlIHRvIHVzZSBvbiBmYWlsdXJlIGluc3RlYWQgb2YgYSBsaXN0IG9mCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VzLgorCisgICAgICAgIGFzc2VydFNldEVxdWFsIHVzZXMgZHVja3R5cGluZyB0byBzdXBwb3J0IGRpZmZlcmVudCB0eXBlcyBvZiBzZXRzLCBhbmQKKyAgICAgICAgaXMgb3B0aW1pemVkIGZvciBzZXRzIHNwZWNpZmljYWxseSAocGFyYW1ldGVycyBtdXN0IHN1cHBvcnQgYQorICAgICAgICBkaWZmZXJlbmNlIG1ldGhvZCkuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkaWZmZXJlbmNlMSA9IHNldDEuZGlmZmVyZW5jZShzZXQyKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2ludmFsaWQgdHlwZSB3aGVuIGF0dGVtcHRpbmcgc2V0IGRpZmZlcmVuY2U6ICVzJyAlIGUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdmaXJzdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRpZmZlcmVuY2UyID0gc2V0Mi5kaWZmZXJlbmNlKHNldDEpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnaW52YWxpZCB0eXBlIHdoZW4gYXR0ZW1wdGluZyBzZXQgZGlmZmVyZW5jZTogJXMnICUgZSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ3NlY29uZCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHNldCBkaWZmZXJlbmNlOiAlcycgJSBlKQorCisgICAgICAgIGlmIG5vdCAoZGlmZmVyZW5jZTEgb3IgZGlmZmVyZW5jZTIpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBkaWZmZXJlbmNlMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSXRlbXMgaW4gdGhlIGZpcnN0IHNldCBidXQgbm90IHRoZSBzZWNvbmQ6JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRpZmZlcmVuY2UxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChyZXByKGl0ZW0pKQorICAgICAgICBpZiBkaWZmZXJlbmNlMjoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSXRlbXMgaW4gdGhlIHNlY29uZCBzZXQgYnV0IG5vdCB0aGUgZmlyc3Q6JykKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGRpZmZlcmVuY2UyOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChyZXByKGl0ZW0pKQorCisgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJbihzZWxmLCBtZW1iZXIsIGNvbnRhaW5lciwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaW4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBtZW1iZXIgbm90IGluIGNvbnRhaW5lcjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIG5vdCBmb3VuZCBpbiAlcycgJSAoc2FmZV9yZXByKG1lbWJlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihjb250YWluZXIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0Tm90SW4oc2VsZiwgbWVtYmVyLCBjb250YWluZXIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhIG5vdCBpbiBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG1lbWJlciBpbiBjb250YWluZXI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyB1bmV4cGVjdGVkbHkgZm91bmQgaW4gJXMnICUgKHNhZmVfcmVwcihtZW1iZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoY29udGFpbmVyKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzKHNlbGYsIGV4cHIxLCBleHByMiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgaXMgYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBleHByMSBpcyBub3QgZXhwcjI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBub3QgJXMnICUgKHNhZmVfcmVwcihleHByMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoZXhwcjIpKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3Qoc2VsZiwgZXhwcjEsIGV4cHIyLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSBpcyBub3QgYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBleHByMSBpcyBleHByMjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ3VuZXhwZWN0ZWRseSBpZGVudGljYWw6ICVzJyAlIChzYWZlX3JlcHIoZXhwcjEpLCkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydERpY3RFcXVhbChzZWxmLCBkMSwgZDIsIG1zZz1Ob25lKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQxLCBkaWN0LCAnRmlyc3QgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkMiwgZGljdCwgJ1NlY29uZCBhcmd1bWVudCBpcyBub3QgYSBkaWN0aW9uYXJ5JykKKworICAgICAgICBpZiBkMSAhPSBkMjoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIChzYWZlX3JlcHIoZDEsIFRydWUpLCBzYWZlX3JlcHIoZDIsIFRydWUpKQorICAgICAgICAgICAgZGlmZiA9ICgnXG4nICsgJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcHJpbnQucGZvcm1hdChkMSkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDIpLnNwbGl0bGluZXMoKSkpKQorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZiwgc3Vic2V0LCBkaWN0aW9uYXJ5LCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkNoZWNrcyB3aGV0aGVyIGRpY3Rpb25hcnkgaXMgYSBzdXBlcnNldCBvZiBzdWJzZXQuIiIiCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2Fzc2VydERpY3RDb250YWluc1N1YnNldCBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIG1pc3NpbmcgPSBbXQorICAgICAgICBtaXNtYXRjaGVkID0gW10KKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gc3Vic2V0Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiBrZXkgbm90IGluIGRpY3Rpb25hcnk6CisgICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgZWxpZiB2YWx1ZSAhPSBkaWN0aW9uYXJ5W2tleV06CisgICAgICAgICAgICAgICAgbWlzbWF0Y2hlZC5hcHBlbmQoJyVzLCBleHBlY3RlZDogJXMsIGFjdHVhbDogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2FmZV9yZXByKGtleSksIHNhZmVfcmVwcih2YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVfcmVwcihkaWN0aW9uYXJ5W2tleV0pKSkKKworICAgICAgICBpZiBub3QgKG1pc3Npbmcgb3IgbWlzbWF0Y2hlZCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzdGFuZGFyZE1zZyA9ICcnCisgICAgICAgIGlmIG1pc3Npbmc6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICdNaXNzaW5nOiAlcycgJSAnLCcuam9pbihzYWZlX3JlcHIobSkgZm9yIG0gaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nKQorICAgICAgICBpZiBtaXNtYXRjaGVkOgorICAgICAgICAgICAgaWYgc3RhbmRhcmRNc2c6CisgICAgICAgICAgICAgICAgc3RhbmRhcmRNc2cgKz0gJzsgJworICAgICAgICAgICAgc3RhbmRhcmRNc2cgKz0gJ01pc21hdGNoZWQgdmFsdWVzOiAlcycgJSAnLCcuam9pbihtaXNtYXRjaGVkKQorCisgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydFNhbWVFbGVtZW50cyhzZWxmLCBleHBlY3RlZF9zZXEsIGFjdHVhbF9zZXEsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiQW4gdW5vcmRlcmVkIHNlcXVlbmNlIHNwZWNpZmljIGNvbXBhcmlzb24uCisKKyAgICAgICAgUmFpc2VzIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBsaXN0aW5nIHdoaWNoIGVsZW1lbnRzIG9mIGV4cGVjdGVkX3NlcQorICAgICAgICBhcmUgbWlzc2luZyBmcm9tIGFjdHVhbF9zZXEgYW5kIHZpY2UgdmVyc2EgaWYgYW55LgorCisgICAgICAgIER1cGxpY2F0ZSBlbGVtZW50cyBhcmUgaWdub3JlZCB3aGVuIGNvbXBhcmluZyAqZXhwZWN0ZWRfc2VxKiBhbmQKKyAgICAgICAgKmFjdHVhbF9zZXEqLiBJdCBpcyB0aGUgZXF1aXZhbGVudCBvZiBgYGFzc2VydEVxdWFsKHNldChleHBlY3RlZCksCisgICAgICAgIHNldChhY3R1YWwpKWBgIGJ1dCBpdCB3b3JrcyB3aXRoIHNlcXVlbmNlcyBvZiB1bmhhc2hhYmxlIG9iamVjdHMgYXMKKyAgICAgICAgd2VsbC4KKyAgICAgICAgIiIiCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2Fzc2VydFNhbWVFbGVtZW50cyBpcyBkZXByZWNhdGVkJywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gc2V0KGV4cGVjdGVkX3NlcSkKKyAgICAgICAgICAgIGFjdHVhbCA9IHNldChhY3R1YWxfc2VxKQorICAgICAgICAgICAgbWlzc2luZyA9IHNvcnRlZChleHBlY3RlZC5kaWZmZXJlbmNlKGFjdHVhbCkpCisgICAgICAgICAgICB1bmV4cGVjdGVkID0gc29ydGVkKGFjdHVhbC5kaWZmZXJlbmNlKGV4cGVjdGVkKSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgRmFsbCBiYWNrIHRvIHNsb3dlciBsaXN0LWNvbXBhcmUgaWYgYW55IG9mIHRoZSBvYmplY3RzIGFyZQorICAgICAgICAgICAgIyBub3QgaGFzaGFibGUuCisgICAgICAgICAgICBleHBlY3RlZCA9IGxpc3QoZXhwZWN0ZWRfc2VxKQorICAgICAgICAgICAgYWN0dWFsID0gbGlzdChhY3R1YWxfc2VxKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQorICAgICAgICAgICAgICAgIGFjdHVhbC5zb3J0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgbWlzc2luZywgdW5leHBlY3RlZCA9IHVub3JkZXJhYmxlX2xpc3RfZGlmZmVyZW5jZShleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWlzc2luZywgdW5leHBlY3RlZCA9IHNvcnRlZF9saXN0X2RpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCkKKyAgICAgICAgZXJyb3JzID0gW10KKyAgICAgICAgaWYgbWlzc2luZzoKKyAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoJ0V4cGVjdGVkLCBidXQgbWlzc2luZzpcbiAgICAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIobWlzc2luZykpCisgICAgICAgIGlmIHVuZXhwZWN0ZWQ6CisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKCdVbmV4cGVjdGVkLCBidXQgcHJlc2VudDpcbiAgICAlcycgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIodW5leHBlY3RlZCkpCisgICAgICAgIGlmIGVycm9yczoKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJ1xuJy5qb2luKGVycm9ycykKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisKKyAgICBkZWYgYXNzZXJ0Q291bnRFcXVhbChzZWxmLCBmaXJzdCwgc2Vjb25kLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkFuIHVub3JkZXJlZCBzZXF1ZW5jZSBjb21wYXJpc29uIGFzc2VydGluZyB0aGF0IHRoZSBzYW1lIGVsZW1lbnRzLAorICAgICAgICByZWdhcmRsZXNzIG9mIG9yZGVyLiAgSWYgdGhlIHNhbWUgZWxlbWVudCBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsCisgICAgICAgIGl0IHZlcmlmaWVzIHRoYXQgdGhlIGVsZW1lbnRzIG9jY3VyIHRoZSBzYW1lIG51bWJlciBvZiB0aW1lcy4KKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb3VudGVyKGxpc3QoZmlyc3QpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRlcihsaXN0KHNlY29uZCkpKQorCisgICAgICAgICBFeGFtcGxlOgorICAgICAgICAgICAgLSBbMCwgMSwgMV0gYW5kIFsxLCAwLCAxXSBjb21wYXJlIGVxdWFsLgorICAgICAgICAgICAgLSBbMCwgMCwgMV0gYW5kIFswLCAxXSBjb21wYXJlIHVuZXF1YWwuCisKKyAgICAgICAgIiIiCisgICAgICAgIGZpcnN0X3NlcSwgc2Vjb25kX3NlcSA9IGxpc3QoZmlyc3QpLCBsaXN0KHNlY29uZCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlyc3QgPSBjb2xsZWN0aW9ucy5Db3VudGVyKGZpcnN0X3NlcSkKKyAgICAgICAgICAgIHNlY29uZCA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoc2Vjb25kX3NlcSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGNhc2Ugd2l0aCB1bmhhc2hhYmxlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJlbmNlcyA9IF9jb3VudF9kaWZmX2FsbF9wdXJwb3NlKGZpcnN0X3NlcSwgc2Vjb25kX3NlcSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGZpcnN0ID09IHNlY29uZDoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGRpZmZlcmVuY2VzID0gX2NvdW50X2RpZmZfaGFzaGFibGUoZmlyc3Rfc2VxLCBzZWNvbmRfc2VxKQorCisgICAgICAgIGlmIGRpZmZlcmVuY2VzOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnRWxlbWVudCBjb3VudHMgd2VyZSBub3QgZXF1YWw6XG4nCisgICAgICAgICAgICBsaW5lcyA9IFsnRmlyc3QgaGFzICVkLCBTZWNvbmQgaGFzICVkOiAgJXInICUgZGlmZiBmb3IgZGlmZiBpbiBkaWZmZXJlbmNlc10KKyAgICAgICAgICAgIGRpZmZNc2cgPSAnXG4nLmpvaW4obGluZXMpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZShzdGFuZGFyZE1zZywgZGlmZk1zZykKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgICAgIHNlbGYuZmFpbChtc2cpCisKKyAgICBkZWYgYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCB0d28gbXVsdGktbGluZSBzdHJpbmdzIGFyZSBlcXVhbC4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZpcnN0LCBzdHIsICdGaXJzdCBhcmd1bWVudCBpcyBub3QgYSBzdHJpbmcnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2Vjb25kLCBzdHIsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nJykKKworICAgICAgICBpZiBmaXJzdCAhPSBzZWNvbmQ6CisgICAgICAgICAgICAjIGRvbid0IHVzZSBkaWZmbGliIGlmIHRoZSBzdHJpbmdzIGFyZSB0b28gbG9uZworICAgICAgICAgICAgaWYgKGxlbihmaXJzdCkgPiBzZWxmLl9kaWZmVGhyZXNob2xkIG9yCisgICAgICAgICAgICAgICAgbGVuKHNlY29uZCkgPiBzZWxmLl9kaWZmVGhyZXNob2xkKToKKyAgICAgICAgICAgICAgICBzZWxmLl9iYXNlQXNzZXJ0RXF1YWwoZmlyc3QsIHNlY29uZCwgbXNnKQorICAgICAgICAgICAgZmlyc3RsaW5lcyA9IGZpcnN0LnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIHNlY29uZGxpbmVzID0gc2Vjb25kLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIGlmIGxlbihmaXJzdGxpbmVzKSA9PSAxIGFuZCBmaXJzdC5zdHJpcCgnXHJcbicpID09IGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0bGluZXMgPSBbZmlyc3QgKyAnXG4nXQorICAgICAgICAgICAgICAgIHNlY29uZGxpbmVzID0gW3NlY29uZCArICdcbiddCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0LCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlX3JlcHIoc2Vjb25kLCBUcnVlKSkKKyAgICAgICAgICAgIGRpZmYgPSAnXG4nICsgJycuam9pbihkaWZmbGliLm5kaWZmKGZpcnN0bGluZXMsIHNlY29uZGxpbmVzKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKHN0YW5kYXJkTXNnLCBkaWZmKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0TGVzcyhzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA8IGIpLCBidXQgd2l0aCBhIG5pY2VyIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGEgPCBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGxlc3MgdGhhbiAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRMZXNzRXF1YWwoc2VsZiwgYSwgYiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJKdXN0IGxpa2Ugc2VsZi5hc3NlcnRUcnVlKGEgPD0gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA8PSBiOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycgJSAoc2FmZV9yZXByKGEpLCBzYWZlX3JlcHIoYikpCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRHcmVhdGVyKHNlbGYsIGEsIGIsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiSnVzdCBsaWtlIHNlbGYuYXNzZXJ0VHJ1ZShhID4gYiksIGJ1dCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBub3QgYSA+IGI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZ3JlYXRlciB0aGFuICVzJyAlIChzYWZlX3JlcHIoYSksIHNhZmVfcmVwcihiKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydEdyZWF0ZXJFcXVhbChzZWxmLCBhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIkp1c3QgbGlrZSBzZWxmLmFzc2VydFRydWUoYSA+PSBiKSwgYnV0IHdpdGggYSBuaWNlciBkZWZhdWx0IG1lc3NhZ2UuIiIiCisgICAgICAgIGlmIG5vdCBhID49IGI6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJyAlIChzYWZlX3JlcHIoYSksIHNhZmVfcmVwcihiKSkKKyAgICAgICAgICAgIHNlbGYuZmFpbChzZWxmLl9mb3JtYXRNZXNzYWdlKG1zZywgc3RhbmRhcmRNc2cpKQorCisgICAgZGVmIGFzc2VydElzTm9uZShzZWxmLCBvYmosIG1zZz1Ob25lKToKKyAgICAgICAgIiIiU2FtZSBhcyBzZWxmLmFzc2VydFRydWUob2JqIGlzIE5vbmUpLCB3aXRoIGEgbmljZXIgZGVmYXVsdCBtZXNzYWdlLiIiIgorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyBpcyBub3QgTm9uZScgJSAoc2FmZV9yZXByKG9iaiksKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0SXNOb3ROb25lKHNlbGYsIG9iaiwgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbmNsdWRlZCBmb3Igc3ltbWV0cnkgd2l0aCBhc3NlcnRJc05vbmUuIiIiCisgICAgICAgIGlmIG9iaiBpcyBOb25lOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAndW5leHBlY3RlZGx5IE5vbmUnCisgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKKworICAgIGRlZiBhc3NlcnRJc0luc3RhbmNlKHNlbGYsIG9iaiwgY2xzLCBtc2c9Tm9uZSk6CisgICAgICAgICIiIlNhbWUgYXMgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uob2JqLCBjbHMpKSwgd2l0aCBhIG5pY2VyCisgICAgICAgIGRlZmF1bHQgbWVzc2FnZS4iIiIKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob2JqLCBjbHMpOgorICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgaXMgbm90IGFuIGluc3RhbmNlIG9mICVyJyAlIChzYWZlX3JlcHIob2JqKSwgY2xzKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmLCBvYmosIGNscywgbXNnPU5vbmUpOgorICAgICAgICAiIiJJbmNsdWRlZCBmb3Igc3ltbWV0cnkgd2l0aCBhc3NlcnRJc0luc3RhbmNlLiIiIgorICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgY2xzKToKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzIGlzIGFuIGluc3RhbmNlIG9mICVyJyAlIChzYWZlX3JlcHIob2JqKSwgY2xzKQorICAgICAgICAgICAgc2VsZi5mYWlsKHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZiwgZXhwZWN0ZWRfZXhjZXB0aW9uLCBleHBlY3RlZF9yZWdleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGFibGVfb2JqPU5vbmUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIkFzc2VydHMgdGhhdCB0aGUgbWVzc2FnZSBpbiBhIHJhaXNlZCBleGNlcHRpb24gbWF0Y2hlcyBhIHJlZ2V4LgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBleHBlY3RlZF9leGNlcHRpb246IEV4Y2VwdGlvbiBjbGFzcyBleHBlY3RlZCB0byBiZSByYWlzZWQuCisgICAgICAgICAgICBleHBlY3RlZF9yZWdleDogUmVnZXggKHJlIHBhdHRlcm4gb2JqZWN0IG9yIHN0cmluZykgZXhwZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgdG8gYmUgZm91bmQgaW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgICAgICAgIGNhbGxhYmxlX29iajogRnVuY3Rpb24gdG8gYmUgY2FsbGVkLgorICAgICAgICAgICAgYXJnczogRXh0cmEgYXJncy4KKyAgICAgICAgICAgIGt3YXJnczogRXh0cmEga3dhcmdzLgorICAgICAgICAiIiIKKyAgICAgICAgY29udGV4dCA9IF9Bc3NlcnRSYWlzZXNDb250ZXh0KGV4cGVjdGVkX2V4Y2VwdGlvbiwgc2VsZiwgY2FsbGFibGVfb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXgpCisgICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKKyAgICAgICAgd2l0aCBjb250ZXh0OgorICAgICAgICAgICAgY2FsbGFibGVfb2JqKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBhc3NlcnRXYXJuc1JlZ2V4KHNlbGYsIGV4cGVjdGVkX3dhcm5pbmcsIGV4cGVjdGVkX3JlZ2V4LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhYmxlX29iaj1Ob25lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAiIiJBc3NlcnRzIHRoYXQgdGhlIG1lc3NhZ2UgaW4gYSB0cmlnZ2VyZWQgd2FybmluZyBtYXRjaGVzIGEgcmVnZXhwLgorICAgICAgICBCYXNpYyBmdW5jdGlvbmluZyBpcyBzaW1pbGFyIHRvIGFzc2VydFdhcm5zKCkgd2l0aCB0aGUgYWRkaXRpb24KKyAgICAgICAgdGhhdCBvbmx5IHdhcm5pbmdzIHdob3NlIG1lc3NhZ2VzIGFsc28gbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICAgICAgICBhcmUgY29uc2lkZXJlZCBzdWNjZXNzZnVsIG1hdGNoZXMuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGV4cGVjdGVkX3dhcm5pbmc6IFdhcm5pbmcgY2xhc3MgZXhwZWN0ZWQgdG8gYmUgdHJpZ2dlcmVkLgorICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXg6IFJlZ2V4IChyZSBwYXR0ZXJuIG9iamVjdCBvciBzdHJpbmcpIGV4cGVjdGVkCisgICAgICAgICAgICAgICAgICAgIHRvIGJlIGZvdW5kIGluIGVycm9yIG1lc3NhZ2UuCisgICAgICAgICAgICBjYWxsYWJsZV9vYmo6IEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC4KKyAgICAgICAgICAgIGFyZ3M6IEV4dHJhIGFyZ3MuCisgICAgICAgICAgICBrd2FyZ3M6IEV4dHJhIGt3YXJncy4KKyAgICAgICAgIiIiCisgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXgpCisgICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQKKyAgICAgICAgd2l0aCBjb250ZXh0OgorICAgICAgICAgICAgY2FsbGFibGVfb2JqKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBhc3NlcnRSZWdleChzZWxmLCB0ZXh0LCBleHBlY3RlZF9yZWdleCwgbXNnPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHRoZSB0ZXN0IHVubGVzcyB0aGUgdGV4dCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWRfcmVnZXgsIChzdHIsIGJ5dGVzKSk6CisgICAgICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcmVnZXgsICJleHBlY3RlZF9yZWdleCBtdXN0IG5vdCBiZSBlbXB0eS4iCisgICAgICAgICAgICBleHBlY3RlZF9yZWdleCA9IHJlLmNvbXBpbGUoZXhwZWN0ZWRfcmVnZXgpCisgICAgICAgIGlmIG5vdCBleHBlY3RlZF9yZWdleC5zZWFyY2godGV4dCk6CisgICAgICAgICAgICBtc2cgPSBtc2cgb3IgIlJlZ2V4IGRpZG4ndCBtYXRjaCIKKyAgICAgICAgICAgIG1zZyA9ICclczogJXIgbm90IGZvdW5kIGluICVyJyAlIChtc2csIGV4cGVjdGVkX3JlZ2V4LnBhdHRlcm4sIHRleHQpCisgICAgICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgZGVmIGFzc2VydE5vdFJlZ2V4KHNlbGYsIHRleHQsIHVuZXhwZWN0ZWRfcmVnZXgsIG1zZz1Ob25lKToKKyAgICAgICAgIiIiRmFpbCB0aGUgdGVzdCBpZiB0aGUgdGV4dCBtYXRjaGVzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIiIiCisgICAgICAgIGlmIGlzaW5zdGFuY2UodW5leHBlY3RlZF9yZWdleCwgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgIHVuZXhwZWN0ZWRfcmVnZXggPSByZS5jb21waWxlKHVuZXhwZWN0ZWRfcmVnZXgpCisgICAgICAgIG1hdGNoID0gdW5leHBlY3RlZF9yZWdleC5zZWFyY2godGV4dCkKKyAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICBtc2cgPSBtc2cgb3IgIlJlZ2V4IG1hdGNoZWQiCisgICAgICAgICAgICBtc2cgPSAnJXM6ICVyIG1hdGNoZXMgJXIgaW4gJXInICUgKG1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFttYXRjaC5zdGFydCgpOm1hdGNoLmVuZCgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5leHBlY3RlZF9yZWdleC5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0KQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKKworCisgICAgZGVmIF9kZXByZWNhdGUob3JpZ2luYWxfZnVuYyk6CisgICAgICAgIGRlZiBkZXByZWNhdGVkX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgJ1BsZWFzZSB1c2UgezB9IGluc3RlYWQuJy5mb3JtYXQob3JpZ2luYWxfZnVuYy5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICByZXR1cm4gZGVwcmVjYXRlZF9mdW5jCisKKyAgICAjIHNlZSAjOTQyNAorICAgIGZhaWxVbmxlc3NFcXVhbCA9IGFzc2VydEVxdWFscyA9IF9kZXByZWNhdGUoYXNzZXJ0RXF1YWwpCisgICAgZmFpbElmRXF1YWwgPSBhc3NlcnROb3RFcXVhbHMgPSBfZGVwcmVjYXRlKGFzc2VydE5vdEVxdWFsKQorICAgIGZhaWxVbmxlc3NBbG1vc3RFcXVhbCA9IGFzc2VydEFsbW9zdEVxdWFscyA9IF9kZXByZWNhdGUoYXNzZXJ0QWxtb3N0RXF1YWwpCisgICAgZmFpbElmQWxtb3N0RXF1YWwgPSBhc3NlcnROb3RBbG1vc3RFcXVhbHMgPSBfZGVwcmVjYXRlKGFzc2VydE5vdEFsbW9zdEVxdWFsKQorICAgIGZhaWxVbmxlc3MgPSBhc3NlcnRfID0gX2RlcHJlY2F0ZShhc3NlcnRUcnVlKQorICAgIGZhaWxVbmxlc3NSYWlzZXMgPSBfZGVwcmVjYXRlKGFzc2VydFJhaXNlcykKKyAgICBmYWlsSWYgPSBfZGVwcmVjYXRlKGFzc2VydEZhbHNlKQorICAgIGFzc2VydFJhaXNlc1JlZ2V4cCA9IF9kZXByZWNhdGUoYXNzZXJ0UmFpc2VzUmVnZXgpCisgICAgYXNzZXJ0UmVnZXhwTWF0Y2hlcyA9IF9kZXByZWNhdGUoYXNzZXJ0UmVnZXgpCisKKworCitjbGFzcyBGdW5jdGlvblRlc3RDYXNlKFRlc3RDYXNlKToKKyAgICAiIiJBIHRlc3QgY2FzZSB0aGF0IHdyYXBzIGEgdGVzdCBmdW5jdGlvbi4KKworICAgIFRoaXMgaXMgdXNlZnVsIGZvciBzbGlwcGluZyBwcmUtZXhpc3RpbmcgdGVzdCBmdW5jdGlvbnMgaW50byB0aGUKKyAgICB1bml0dGVzdCBmcmFtZXdvcmsuIE9wdGlvbmFsbHksIHNldC11cCBhbmQgdGlkeS11cCBmdW5jdGlvbnMgY2FuIGJlCisgICAgc3VwcGxpZWQuIEFzIHdpdGggVGVzdENhc2UsIHRoZSB0aWR5LXVwICgndGVhckRvd24nKSBmdW5jdGlvbiB3aWxsCisgICAgYWx3YXlzIGJlIGNhbGxlZCBpZiB0aGUgc2V0LXVwICgnc2V0VXAnKSBmdW5jdGlvbiByYW4gc3VjY2Vzc2Z1bGx5LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RGdW5jLCBzZXRVcD1Ob25lLCB0ZWFyRG93bj1Ob25lLCBkZXNjcmlwdGlvbj1Ob25lKToKKyAgICAgICAgc3VwZXIoRnVuY3Rpb25UZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLl9zZXRVcEZ1bmMgPSBzZXRVcAorICAgICAgICBzZWxmLl90ZWFyRG93bkZ1bmMgPSB0ZWFyRG93bgorICAgICAgICBzZWxmLl90ZXN0RnVuYyA9IHRlc3RGdW5jCisgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fc2V0VXBGdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2V0VXBGdW5jKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdGVhckRvd25GdW5jIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdGVhckRvd25GdW5jKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0RnVuYygpCisKKyAgICBkZWYgaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90ZXN0RnVuYy5fX25hbWVfXworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICByZXR1cm4gc2VsZi5fc2V0VXBGdW5jID09IG90aGVyLl9zZXRVcEZ1bmMgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuX3RlYXJEb3duRnVuYyA9PSBvdGhlci5fdGVhckRvd25GdW5jIGFuZCBcCisgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYyA9PSBvdGhlci5fdGVzdEZ1bmMgYW5kIFwKKyAgICAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID09IG90aGVyLl9kZXNjcmlwdGlvbgorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fc2V0VXBGdW5jLCBzZWxmLl90ZWFyRG93bkZ1bmMsCisgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYywgc2VsZi5fZGVzY3JpcHRpb24pKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXMgKCVzKSIgJSAoc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Rlc3RGdW5jLl9fbmFtZV9fKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyB0ZWM9JXM+IiAlIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdGVzdEZ1bmMpCisKKyAgICBkZWYgc2hvcnREZXNjcmlwdGlvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZGVzY3JpcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRpb24KKyAgICAgICAgZG9jID0gc2VsZi5fdGVzdEZ1bmMuX19kb2NfXworICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmRmZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L2xvYWRlci5weQpAQCAtMCwwICsxLDMyMSBAQAorIiIiTG9hZGluZyB1bml0dGVzdHMuIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdHlwZXMKK2ltcG9ydCBmdW5jdG9vbHMKKworZnJvbSBmbm1hdGNoIGltcG9ydCBmbm1hdGNoCisKK2Zyb20gLiBpbXBvcnQgY2FzZSwgc3VpdGUsIHV0aWwKKworX191bml0dGVzdCA9IFRydWUKKworIyB3aGF0IGFib3V0IC5weWMgb3IgLnB5byAoZXRjKQorIyB3ZSB3b3VsZCBuZWVkIHRvIGF2b2lkIGxvYWRpbmcgdGhlIHNhbWUgdGVzdHMgbXVsdGlwbGUgdGltZXMKKyMgZnJvbSAnLnB5JywgJy5weWMnICphbmQqICcucHlvJworVkFMSURfTU9EVUxFX05BTUUgPSByZS5jb21waWxlKHInW19hLXpdXHcqXC5weSQnLCByZS5JR05PUkVDQVNFKQorCisKK2RlZiBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc3VpdGVDbGFzcyk6CisgICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiAlc1xuJXMnICUgKG5hbWUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCisgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KCdNb2R1bGVJbXBvcnRGYWlsdXJlJywgbmFtZSwgSW1wb3J0RXJyb3IobWVzc2FnZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3MpCisKK2RlZiBfbWFrZV9mYWlsZWRfbG9hZF90ZXN0cyhuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIHJldHVybiBfbWFrZV9mYWlsZWRfdGVzdCgnTG9hZFRlc3RzRmFpbHVyZScsIG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcykKKworZGVmIF9tYWtlX2ZhaWxlZF90ZXN0KGNsYXNzbmFtZSwgbWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKKyAgICBkZWYgdGVzdEZhaWx1cmUoc2VsZik6CisgICAgICAgIHJhaXNlIGV4Y2VwdGlvbgorICAgIGF0dHJzID0ge21ldGhvZG5hbWU6IHRlc3RGYWlsdXJlfQorICAgIFRlc3RDbGFzcyA9IHR5cGUoY2xhc3NuYW1lLCAoY2FzZS5UZXN0Q2FzZSwpLCBhdHRycykKKyAgICByZXR1cm4gc3VpdGVDbGFzcygoVGVzdENsYXNzKG1ldGhvZG5hbWUpLCkpCisKKworY2xhc3MgVGVzdExvYWRlcihvYmplY3QpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgdGVzdHMgYWNjb3JkaW5nIHRvIHZhcmlvdXMgY3JpdGVyaWEKKyAgICBhbmQgcmV0dXJuaW5nIHRoZW0gd3JhcHBlZCBpbiBhIFRlc3RTdWl0ZQorICAgICIiIgorICAgIHRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICBzb3J0VGVzdE1ldGhvZHNVc2luZyA9IHN0YXRpY21ldGhvZCh1dGlsLnRocmVlX3dheV9jbXApCisgICAgc3VpdGVDbGFzcyA9IHN1aXRlLlRlc3RTdWl0ZQorICAgIF90b3BfbGV2ZWxfZGlyID0gTm9uZQorCisgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCisgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKKyAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKKyAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQorICAgICAgICBsb2FkZWRfc3VpdGUgPSBzZWxmLnN1aXRlQ2xhc3MobWFwKHRlc3RDYXNlQ2xhc3MsIHRlc3RDYXNlTmFtZXMpKQorICAgICAgICByZXR1cm4gbG9hZGVkX3N1aXRlCisKKyAgICBkZWYgbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmLCBtb2R1bGUsIHVzZV9sb2FkX3Rlc3RzPVRydWUpOgorICAgICAgICAiIiJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBnaXZlbiBtb2R1bGUiIiIKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgbmFtZSBpbiBkaXIobW9kdWxlKToKKyAgICAgICAgICAgIG9iaiA9IGdldGF0dHIobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGUpIGFuZCBpc3N1YmNsYXNzKG9iaiwgY2FzZS5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKHNlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKG9iaikpCisKKyAgICAgICAgbG9hZF90ZXN0cyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZF90ZXN0cycsIE5vbmUpCisgICAgICAgIHRlc3RzID0gc2VsZi5zdWl0ZUNsYXNzKHRlc3RzKQorICAgICAgICBpZiB1c2VfbG9hZF90ZXN0cyBhbmQgbG9hZF90ZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX21ha2VfZmFpbGVkX2xvYWRfdGVzdHMobW9kdWxlLl9fbmFtZV9fLCBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN1aXRlQ2xhc3MpCisgICAgICAgIHJldHVybiB0ZXN0cworCisgICAgZGVmIGxvYWRUZXN0c0Zyb21OYW1lKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lKToKKyAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGdpdmVuIGEgc3RyaW5nIHNwZWNpZmllci4KKworICAgICAgICBUaGUgbmFtZSBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8gYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhCisgICAgICAgIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2gKKyAgICAgICAgcmV0dXJucyBhIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4KKworICAgICAgICBUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgdGhlIG5hbWVzIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gbW9kdWxlLgorICAgICAgICAiIiIKKyAgICAgICAgcGFydHMgPSBuYW1lLnNwbGl0KCcuJykKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJ0c19jb3B5ID0gcGFydHNbOl0KKyAgICAgICAgICAgIHdoaWxlIHBhcnRzX2NvcHk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfX2ltcG9ydF9fKCcuJy5qb2luKHBhcnRzX2NvcHkpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZGVsIHBhcnRzX2NvcHlbLTFdCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0c19jb3B5OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHBhcnRzID0gcGFydHNbMTpdCisgICAgICAgIG9iaiA9IG1vZHVsZQorICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgIHBhcmVudCwgb2JqID0gb2JqLCBnZXRhdHRyKG9iaiwgcGFydCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuTW9kdWxlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG9iaikKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSkgYW5kIGlzc3ViY2xhc3Mob2JqLCBjYXNlLlRlc3RDYXNlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShvYmopCisgICAgICAgIGVsaWYgKGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5GdW5jdGlvblR5cGUpIGFuZAorICAgICAgICAgICAgICBpc2luc3RhbmNlKHBhcmVudCwgdHlwZSkgYW5kCisgICAgICAgICAgICAgIGlzc3ViY2xhc3MocGFyZW50LCBjYXNlLlRlc3RDYXNlKSk6CisgICAgICAgICAgICBuYW1lID0gb2JqLl9fbmFtZV9fCisgICAgICAgICAgICBpbnN0ID0gcGFyZW50KG5hbWUpCisgICAgICAgICAgICAjIHN0YXRpYyBtZXRob2RzIGZvbGxvdyBhIGRpZmZlcmVudCBwYXRoCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShnZXRhdHRyKGluc3QsIG5hbWUpLCB0eXBlcy5GdW5jdGlvblR5cGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoW2luc3RdKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBzdWl0ZS5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fY2FsbF9fJyk6CisgICAgICAgICAgICB0ZXN0ID0gb2JqKCkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgc3VpdGUuVGVzdFN1aXRlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdGVzdAorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRlc3QsIGNhc2UuVGVzdENhc2UpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoW3Rlc3RdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImNhbGxpbmcgJXMgcmV0dXJuZWQgJXMsIG5vdCBhIHRlc3QiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iaiwgdGVzdCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIG1ha2UgdGVzdCBmcm9tOiAlcyIgJSBvYmopCisKKyAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYsIG5hbWVzLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBmb3VuZCB1c2luZyB0aGUgZ2l2ZW4gc2VxdWVuY2UKKyAgICAgICAgb2Ygc3RyaW5nIHNwZWNpZmllcnMuIFNlZSAnbG9hZFRlc3RzRnJvbU5hbWUoKScuCisgICAgICAgICIiIgorICAgICAgICBzdWl0ZXMgPSBbc2VsZi5sb2FkVGVzdHNGcm9tTmFtZShuYW1lLCBtb2R1bGUpIGZvciBuYW1lIGluIG5hbWVzXQorICAgICAgICByZXR1cm4gc2VsZi5zdWl0ZUNsYXNzKHN1aXRlcykKKworICAgIGRlZiBnZXRUZXN0Q2FzZU5hbWVzKHNlbGYsIHRlc3RDYXNlQ2xhc3MpOgorICAgICAgICAiIiJSZXR1cm4gYSBzb3J0ZWQgc2VxdWVuY2Ugb2YgbWV0aG9kIG5hbWVzIGZvdW5kIHdpdGhpbiB0ZXN0Q2FzZUNsYXNzCisgICAgICAgICIiIgorICAgICAgICBkZWYgaXNUZXN0TWV0aG9kKGF0dHJuYW1lLCB0ZXN0Q2FzZUNsYXNzPXRlc3RDYXNlQ2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXNlbGYudGVzdE1ldGhvZFByZWZpeCk6CisgICAgICAgICAgICByZXR1cm4gYXR0cm5hbWUuc3RhcnRzd2l0aChwcmVmaXgpIGFuZCBcCisgICAgICAgICAgICAgICAgaGFzYXR0cihnZXRhdHRyKHRlc3RDYXNlQ2xhc3MsIGF0dHJuYW1lKSwgJ19fY2FsbF9fJykKKyAgICAgICAgdGVzdEZuTmFtZXMgPSB0ZXN0Rm5OYW1lcyA9IGxpc3QoZmlsdGVyKGlzVGVzdE1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcih0ZXN0Q2FzZUNsYXNzKSkpCisgICAgICAgIGlmIHNlbGYuc29ydFRlc3RNZXRob2RzVXNpbmc6CisgICAgICAgICAgICB0ZXN0Rm5OYW1lcy5zb3J0KGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShzZWxmLnNvcnRUZXN0TWV0aG9kc1VzaW5nKSkKKyAgICAgICAgcmV0dXJuIHRlc3RGbk5hbWVzCisKKyAgICBkZWYgZGlzY292ZXIoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuPSd0ZXN0Ki5weScsIHRvcF9sZXZlbF9kaXI9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhbGwgdGVzdCBtb2R1bGVzIGZyb20gdGhlIHNwZWNpZmllZCBzdGFydAorICAgICAgICBkaXJlY3RvcnksIHJlY3Vyc2luZyBpbnRvIHN1YmRpcmVjdG9yaWVzIHRvIGZpbmQgdGhlbSBhbmQgcmV0dXJuIGFsbAorICAgICAgICB0ZXN0cyBmb3VuZCB3aXRoaW4gdGhlbS4gT25seSB0ZXN0IGZpbGVzIHRoYXQgbWF0Y2ggdGhlIHBhdHRlcm4gd2lsbAorICAgICAgICBiZSBsb2FkZWQuIChVc2luZyBzaGVsbCBzdHlsZSBwYXR0ZXJuIG1hdGNoaW5nLikKKworICAgICAgICBBbGwgdGVzdCBtb2R1bGVzIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHByb2plY3QuCisgICAgICAgIElmIHRoZSBzdGFydCBkaXJlY3RvcnkgaXMgbm90IHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IHRoZW4gdGhlIHRvcAorICAgICAgICBsZXZlbCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseS4KKworICAgICAgICBJZiBhIHRlc3QgcGFja2FnZSBuYW1lIChkaXJlY3Rvcnkgd2l0aCAnX19pbml0X18ucHknKSBtYXRjaGVzIHRoZQorICAgICAgICBwYXR0ZXJuIHRoZW4gdGhlIHBhY2thZ2Ugd2lsbCBiZSBjaGVja2VkIGZvciBhICdsb2FkX3Rlc3RzJyBmdW5jdGlvbi4gSWYKKyAgICAgICAgdGhpcyBleGlzdHMgdGhlbiBpdCB3aWxsIGJlIGNhbGxlZCB3aXRoIGxvYWRlciwgdGVzdHMsIHBhdHRlcm4uCisKKyAgICAgICAgSWYgbG9hZF90ZXN0cyBleGlzdHMgdGhlbiBkaXNjb3ZlcnkgZG9lcyAgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAorICAgICAgICBsb2FkX3Rlc3RzIGlzIHJlc3BvbnNpYmxlIGZvciBsb2FkaW5nIGFsbCB0ZXN0cyBpbiB0aGUgcGFja2FnZS4KKworICAgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRlbHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdAorICAgICAgICBwYWNrYWdlcyBjYW4gY29udGludWUgZGlzY292ZXJ5IHRoZW1zZWx2ZXMuIHRvcF9sZXZlbF9kaXIgaXMgc3RvcmVkIHNvCisgICAgICAgIGxvYWRfdGVzdHMgZG9lcyBub3QgbmVlZCB0byBwYXNzIHRoaXMgYXJndW1lbnQgaW4gdG8gbG9hZGVyLmRpc2NvdmVyKCkuCisgICAgICAgICIiIgorICAgICAgICBzZXRfaW1wbGljaXRfdG9wID0gRmFsc2UKKyAgICAgICAgaWYgdG9wX2xldmVsX2RpciBpcyBOb25lIGFuZCBzZWxmLl90b3BfbGV2ZWxfZGlyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBtYWtlIHRvcF9sZXZlbF9kaXIgb3B0aW9uYWwgaWYgY2FsbGVkIGZyb20gbG9hZF90ZXN0cyBpbiBhIHBhY2thZ2UKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzZWxmLl90b3BfbGV2ZWxfZGlyCisgICAgICAgIGVsaWYgdG9wX2xldmVsX2RpciBpcyBOb25lOgorICAgICAgICAgICAgc2V0X2ltcGxpY2l0X3RvcCA9IFRydWUKKyAgICAgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBzdGFydF9kaXIKKworICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5hYnNwYXRoKHRvcF9sZXZlbF9kaXIpCisKKyAgICAgICAgaWYgbm90IHRvcF9sZXZlbF9kaXIgaW4gc3lzLnBhdGg6CisgICAgICAgICAgICAjIGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcCBsZXZlbCBkaXJlY3RvcnkKKyAgICAgICAgICAgICMgc2hvdWxkIHdlICp1bmNvbmRpdGlvbmFsbHkqIHB1dCB0aGUgc3RhcnQgZGlyZWN0b3J5IGluIGZpcnN0CisgICAgICAgICAgICAjIGluIHN5cy5wYXRoIHRvIG1pbmltaXNlIGxpa2VsaWhvb2Qgb2YgY29uZmxpY3RzIGJldHdlZW4gaW5zdGFsbGVkCisgICAgICAgICAgICAjIG1vZHVsZXMgYW5kIGRldmVsb3BtZW50IHZlcnNpb25zPworICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSB0b3BfbGV2ZWxfZGlyCisKKyAgICAgICAgaXNfbm90X2ltcG9ydGFibGUgPSBGYWxzZQorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpKToKKyAgICAgICAgICAgIHN0YXJ0X2RpciA9IG9zLnBhdGguYWJzcGF0aChzdGFydF9kaXIpCisgICAgICAgICAgICBpZiBzdGFydF9kaXIgIT0gdG9wX2xldmVsX2RpcjoKKyAgICAgICAgICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCAnX19pbml0X18ucHknKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgZGlzY292ZXJ5IGZyb20gZG90dGVkIG1vZHVsZSBuYW1lcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9faW1wb3J0X18oc3RhcnRfZGlyKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIGlzX25vdF9pbXBvcnRhYmxlID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQorICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KKyAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgaWYgc2V0X2ltcGxpY2l0X3RvcDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHNlbGYuX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUodG9wX3BhcnQpCisgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorCisgICAgICAgIGlmIGlzX25vdF9pbXBvcnRhYmxlOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1N0YXJ0IGRpcmVjdG9yeSBpcyBub3QgaW1wb3J0YWJsZTogJXInICUgc3RhcnRfZGlyKQorCisgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCisgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCisKKyAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG1vZHVsZS5fX2ZpbGVfXykKKworICAgICAgICBpZiBvcy5wYXRoLmJhc2VuYW1lKGZ1bGxfcGF0aCkubG93ZXIoKS5zdGFydHN3aXRoKCdfX2luaXRfXy5weScpOgorICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoZnVsbF9wYXRoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaGVyZSB3ZSBoYXZlIGJlZW4gZ2l2ZW4gYSBtb2R1bGUgcmF0aGVyIHRoYW4gYSBwYWNrYWdlIC0gc28KKyAgICAgICAgICAgICMgYWxsIHdlIGNhbiBkbyBpcyBzZWFyY2ggdGhlICpzYW1lKiBkaXJlY3RvcnkgdGhlIG1vZHVsZSBpcyBpbgorICAgICAgICAgICAgIyBzaG91bGQgYW4gZXhjZXB0aW9uIGJlIHJhaXNlZCBpbnN0ZWFkCisgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKGZ1bGxfcGF0aCkKKworICAgIGRlZiBfZ2V0X25hbWVfZnJvbV9wYXRoKHNlbGYsIHBhdGgpOgorICAgICAgICBwYXRoID0gb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLm5vcm1wYXRoKHBhdGgpKVswXQorCisgICAgICAgIF9yZWxwYXRoID0gb3MucGF0aC5yZWxwYXRoKHBhdGgsIHNlbGYuX3RvcF9sZXZlbF9kaXIpCisgICAgICAgIGFzc2VydCBub3Qgb3MucGF0aC5pc2FicyhfcmVscGF0aCksICJQYXRoIG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorICAgICAgICBhc3NlcnQgbm90IF9yZWxwYXRoLnN0YXJ0c3dpdGgoJy4uJyksICJQYXRoIG11c3QgYmUgd2l0aGluIHRoZSBwcm9qZWN0IgorCisgICAgICAgIG5hbWUgPSBfcmVscGF0aC5yZXBsYWNlKG9zLnBhdGguc2VwLCAnLicpCisgICAgICAgIHJldHVybiBuYW1lCisKKyAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIF9tYXRjaF9wYXRoKHNlbGYsIHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CisgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCisKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiVXNlZCBieSBkaXNjb3ZlcnkuIFlpZWxkcyB0ZXN0IHN1aXRlcyBpdCBsb2Fkcy4iIiIKKyAgICAgICAgcGF0aHMgPSBvcy5saXN0ZGlyKHN0YXJ0X2RpcikKKworICAgICAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihzdGFydF9kaXIsIHBhdGgpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBWQUxJRF9NT0RVTEVfTkFNRS5tYXRjaChwYXRoKToKKyAgICAgICAgICAgICAgICAgICAgIyB2YWxpZCBQeXRob24gaWRlbnRpZmllcnMgb25seQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9tYXRjaF9wYXRoKHBhdGgsIGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBpZiB0aGUgdGVzdCBmaWxlIG1hdGNoZXMsIGxvYWQgaXQKKyAgICAgICAgICAgICAgICBuYW1lID0gc2VsZi5fZ2V0X25hbWVfZnJvbV9wYXRoKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZF9maWxlID0gb3MucGF0aC5hYnNwYXRoKGdldGF0dHIobW9kdWxlLCAnX19maWxlX18nLCBmdWxsX3BhdGgpKQorICAgICAgICAgICAgICAgICAgICByZWFscGF0aCA9IG9zLnBhdGguc3BsaXRleHQobW9kX2ZpbGUpWzBdCisgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoX25vZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmdWxsX3BhdGgpWzBdCisgICAgICAgICAgICAgICAgICAgIGlmIHJlYWxwYXRoLmxvd2VyKCkgIT0gZnVsbHBhdGhfbm9leHQubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9kaXIgPSBvcy5wYXRoLmRpcm5hbWUocmVhbHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShmdWxsX3BhdGgpKVswXQorICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZGlyID0gb3MucGF0aC5kaXJuYW1lKGZ1bGxfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiJXIgbW9kdWxlIGluY29ycmVjdGx5IGltcG9ydGVkIGZyb20gJXIuIEV4cGVjdGVkICVyLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklzIHRoaXMgbW9kdWxlIGdsb2JhbGx5IGluc3RhbGxlZD8iKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnICUgKG1vZF9uYW1lLCBtb2R1bGVfZGlyLCBleHBlY3RlZF9kaXIpKQorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzZWxmLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihmdWxsX3BhdGgsICdfX2luaXRfXy5weScpKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGxvYWRfdGVzdHMgPSBOb25lCisgICAgICAgICAgICAgICAgdGVzdHMgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgZm5tYXRjaChwYXRoLCBwYXR0ZXJuKToKKyAgICAgICAgICAgICAgICAgICAgIyBvbmx5IGNoZWNrIGxvYWRfdGVzdHMgaWYgdGhlIHBhY2thZ2UgZGlyZWN0b3J5IGl0c2VsZiBtYXRjaGVzIHRoZSBmaWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBsb2FkX3Rlc3RzID0gZ2V0YXR0cihwYWNrYWdlLCAnbG9hZF90ZXN0cycsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKHBhY2thZ2UsIHVzZV9sb2FkX3Rlc3RzPUZhbHNlKQorCisgICAgICAgICAgICAgICAgaWYgbG9hZF90ZXN0cyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGVzdHMgbG9hZGVkIGZyb20gcGFja2FnZSBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0cworICAgICAgICAgICAgICAgICAgICAjIHJlY3Vyc2UgaW50byB0aGUgcGFja2FnZQorICAgICAgICAgICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0ZXN0CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgX21ha2VfZmFpbGVkX2xvYWRfdGVzdHMocGFja2FnZS5fX25hbWVfXywgZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3VpdGVDbGFzcykKKworZGVmYXVsdFRlc3RMb2FkZXIgPSBUZXN0TG9hZGVyKCkKKworCitkZWYgX21ha2VMb2FkZXIocHJlZml4LCBzb3J0VXNpbmcsIHN1aXRlQ2xhc3M9Tm9uZSk6CisgICAgbG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gc29ydFVzaW5nCisgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSBwcmVmaXgKKyAgICBpZiBzdWl0ZUNsYXNzOgorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IHN1aXRlQ2xhc3MKKyAgICByZXR1cm4gbG9hZGVyCisKK2RlZiBnZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MsIHByZWZpeCwgc29ydFVzaW5nPXV0aWwudGhyZWVfd2F5X2NtcCk6CisgICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nKS5nZXRUZXN0Q2FzZU5hbWVzKHRlc3RDYXNlQ2xhc3MpCisKK2RlZiBtYWtlU3VpdGUodGVzdENhc2VDbGFzcywgcHJlZml4PSd0ZXN0Jywgc29ydFVzaW5nPXV0aWwudGhyZWVfd2F5X2NtcCwKKyAgICAgICAgICAgICAgc3VpdGVDbGFzcz1zdWl0ZS5UZXN0U3VpdGUpOgorICAgIHJldHVybiBfbWFrZUxvYWRlcihwcmVmaXgsIHNvcnRVc2luZywgc3VpdGVDbGFzcykubG9hZFRlc3RzRnJvbVRlc3RDYXNlKAorICAgICAgICB0ZXN0Q2FzZUNsYXNzKQorCitkZWYgZmluZFRlc3RDYXNlcyhtb2R1bGUsIHByZWZpeD0ndGVzdCcsIHNvcnRVc2luZz11dGlsLnRocmVlX3dheV9jbXAsCisgICAgICAgICAgICAgICAgICBzdWl0ZUNsYXNzPXN1aXRlLlRlc3RTdWl0ZSk6CisgICAgcmV0dXJuIF9tYWtlTG9hZGVyKHByZWZpeCwgc29ydFVzaW5nLCBzdWl0ZUNsYXNzKS5sb2FkVGVzdHNGcm9tTW9kdWxlKFwKKyAgICAgICAgbW9kdWxlKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21haW4ucHkgYi9MaWIvdW5pdHRlc3QvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWQ0ZTRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTAsMCArMSwyNzQgQEAKKyIiIlVuaXR0ZXN0IG1haW4gcHJvZ3JhbSIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgb3MKK2ltcG9ydCB0eXBlcworCitmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCitmcm9tIC5zaWduYWxzIGltcG9ydCBpbnN0YWxsSGFuZGxlcgorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitGQUlMRkFTVCAgICAgPSAiICAtZiwgLS1mYWlsZmFzdCAgIFN0b3Agb24gZmlyc3QgZmFpbHVyZVxuIgorQ0FUQ0hCUkVBSyAgID0gIiAgLWMsIC0tY2F0Y2ggICAgICBDYXRjaCBjb250cm9sLUMgYW5kIGRpc3BsYXkgcmVzdWx0c1xuIgorQlVGRkVST1VUUFVUID0gIiAgLWIsIC0tYnVmZmVyICAgICBCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3QgcnVuc1xuIgorCitVU0FHRV9BU19NQUlOID0gIiIiXAorVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RzXQorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCisgIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKKyAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAorJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitFeGFtcGxlczoKKyAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQorICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCisKK1t0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAorbWV0aG9kcy4KKworQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KKworT3B0aW9uczoKKyAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAorJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQorICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQorICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bworICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKKworRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAorbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorIiIiCisKK1VTQUdFX0ZST01fTU9EVUxFID0gIiIiXAorVXNhZ2U6ICUocHJvZ05hbWUpcyBbb3B0aW9uc10gW3Rlc3RdIFsuLi5dCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKKyAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAorICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0CislKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK0V4YW1wbGVzOgorICAlKHByb2dOYW1lKXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nTmFtZSlzIE15VGVzdFN1aXRlICAgICAgICAgICAgICAgICAgIC0gcnVuIHN1aXRlICdNeVRlc3RTdWl0ZScKKyAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgICAgIC0gcnVuIE15VGVzdENhc2UudGVzdFNvbWV0aGluZworICAlKHByb2dOYW1lKXMgTXlUZXN0Q2FzZSAgICAgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIE15VGVzdENhc2UKKyIiIgorCitkZWYgX2NvbnZlcnRfbmFtZShuYW1lKToKKyAgICAjIG9uIExpbnV4IC8gTWFjIE9TIFggJ2Zvby5QWScgaXMgbm90IGltcG9ydGFibGUsIGJ1dCBvbgorICAgICMgV2luZG93cyBpdCBpcy4gU2ltcGxlciB0byBkbyBhIGNhc2UgaW5zZW5zaXRpdmUgbWF0Y2gKKyAgICAjIGEgYmV0dGVyIGNoZWNrIHdvdWxkIGJlIHRvIGNoZWNrIHRoYXQgdGhlIG5hbWUgaXMgYQorICAgICMgdmFsaWQgUHl0aG9uIG1vZHVsZSBuYW1lLgorICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpIGFuZCBuYW1lLmxvd2VyKCkuZW5kc3dpdGgoJy5weScpOgorICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKG5hbWUpOgorICAgICAgICAgICAgcmVsX3BhdGggPSBvcy5wYXRoLnJlbHBhdGgobmFtZSwgb3MuZ2V0Y3dkKCkpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzYWJzKHJlbF9wYXRoKSBvciByZWxfcGF0aC5zdGFydHN3aXRoKG9zLnBhcmRpcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSByZWxfcGF0aAorICAgICAgICAjIG9uIFdpbmRvd3MgYm90aCAnXCcgYW5kICcvJyBhcmUgdXNlZCBhcyBwYXRoCisgICAgICAgICMgc2VwYXJhdG9ycy4gQmV0dGVyIHRvIHJlcGxhY2UgYm90aCB0aGFuIHJlbHkgb24gb3MucGF0aC5zZXAKKyAgICAgICAgcmV0dXJuIG5hbWVbOi0zXS5yZXBsYWNlKCdcXCcsICcuJykucmVwbGFjZSgnLycsICcuJykKKyAgICByZXR1cm4gbmFtZQorCitkZWYgX2NvbnZlcnRfbmFtZXMobmFtZXMpOgorICAgIHJldHVybiBbX2NvbnZlcnRfbmFtZShuYW1lKSBmb3IgbmFtZSBpbiBuYW1lc10KKworY2xhc3MgVGVzdFByb2dyYW0ob2JqZWN0KToKKyAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKKyAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KKyAgICAiIiIKKyAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCisKKyAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSB3YXJuaW5ncyA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAorICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLAorICAgICAgICAgICAgICAgICAgICBleGl0PVRydWUsIHZlcmJvc2l0eT0xLCBmYWlsZmFzdD1Ob25lLCBjYXRjaGJyZWFrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1Ob25lLCB3YXJuaW5ncz1Ob25lKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHN0cik6CisgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IF9faW1wb3J0X18obW9kdWxlKQorICAgICAgICAgICAgZm9yIHBhcnQgaW4gbW9kdWxlLnNwbGl0KCcuJylbMTpdOgorICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlID0gZ2V0YXR0cihzZWxmLm1vZHVsZSwgcGFydCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIGlmIGFyZ3YgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZ3YgPSBzeXMuYXJndgorCisgICAgICAgIHNlbGYuZXhpdCA9IGV4aXQKKyAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CisgICAgICAgIHNlbGYuY2F0Y2hicmVhayA9IGNhdGNoYnJlYWsKKyAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKKyAgICAgICAgc2VsZi5idWZmZXIgPSBidWZmZXIKKyAgICAgICAgaWYgd2FybmluZ3MgaXMgTm9uZSBhbmQgbm90IHN5cy53YXJub3B0aW9uczoKKyAgICAgICAgICAgICMgZXZlbiBpZiBEcmVwcmVjYXRpb25XYXJuaW5ncyBhcmUgaWdub3JlZCBieSBkZWZhdWx0CisgICAgICAgICAgICAjIHByaW50IHRoZW0gYW55d2F5IHVubGVzcyBvdGhlciB3YXJuaW5ncyBzZXR0aW5ncyBhcmUKKyAgICAgICAgICAgICMgc3BlY2lmaWVkIGJ5IHRoZSB3YXJuaW5ncyBhcmcgb3IgdGhlIC1XIHB5dGhvbiBmbGFnCisgICAgICAgICAgICBzZWxmLndhcm5pbmdzID0gJ2RlZmF1bHQnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGhlcmUgc2VsZi53YXJuaW5ncyBpcyBzZXQgZWl0aGVyIHRvIHRoZSB2YWx1ZSBwYXNzZWQKKyAgICAgICAgICAgICMgdG8gdGhlIHdhcm5pbmdzIGFyZ3Mgb3IgdG8gTm9uZS4KKyAgICAgICAgICAgICMgSWYgdGhlIHVzZXIgZGlkbid0IHBhc3MgYSB2YWx1ZSBzZWxmLndhcm5pbmdzIHdpbGwKKyAgICAgICAgICAgICMgYmUgTm9uZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBiZWhhdmlvciBpcyB1bmNoYW5nZWQKKyAgICAgICAgICAgICMgYW5kIGRlcGVuZHMgb24gdGhlIHZhbHVlcyBwYXNzZWQgdG8gLVcuCisgICAgICAgICAgICBzZWxmLndhcm5pbmdzID0gd2FybmluZ3MKKyAgICAgICAgc2VsZi5kZWZhdWx0VGVzdCA9IGRlZmF1bHRUZXN0CisgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHRlc3RSdW5uZXIKKyAgICAgICAgc2VsZi50ZXN0TG9hZGVyID0gdGVzdExvYWRlcgorICAgICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBdKQorICAgICAgICBzZWxmLnBhcnNlQXJncyhhcmd2KQorICAgICAgICBzZWxmLnJ1blRlc3RzKCkKKworICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgorICAgICAgICBpZiBtc2c6CisgICAgICAgICAgICBwcmludChtc2cpCisgICAgICAgIHVzYWdlID0geydwcm9nTmFtZSc6IHNlbGYucHJvZ05hbWUsICdjYXRjaGJyZWFrJzogJycsICdmYWlsZmFzdCc6ICcnLAorICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJyd9CisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6CisgICAgICAgICAgICB1c2FnZVsnZmFpbGZhc3QnXSA9IEZBSUxGQVNUCisgICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKKyAgICAgICAgICAgIHVzYWdlWydjYXRjaGJyZWFrJ10gPSBDQVRDSEJSRUFLCisgICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgorICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCisgICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSB1c2FnZSkKKyAgICAgICAgc3lzLmV4aXQoMikKKworICAgIGRlZiBwYXJzZUFyZ3Moc2VsZiwgYXJndik6CisgICAgICAgIGlmICgobGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3ZlcicpIG9yCisgICAgICAgICAgICAobGVuKGFyZ3YpID09IDEgYW5kIHNlbGYubW9kdWxlIGlzIE5vbmUpKToKKyAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShhcmd2WzI6XSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGltcG9ydCBnZXRvcHQKKyAgICAgICAgbG9uZ19vcHRzID0gWydoZWxwJywgJ3ZlcmJvc2UnLCAncXVpZXQnLCAnZmFpbGZhc3QnLCAnY2F0Y2gnLCAnYnVmZmVyJ10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3B0aW9ucywgYXJncyA9IGdldG9wdC5nZXRvcHQoYXJndlsxOl0sICdoSHZxZmNiJywgbG9uZ19vcHRzKQorICAgICAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KG1zZykKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGZvciBvcHQsIHZhbHVlIGluIG9wdGlvbnM6CisgICAgICAgICAgICBpZiBvcHQgaW4gKCctaCcsJy1IJywnLS1oZWxwJyk6CisgICAgICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQorICAgICAgICAgICAgaWYgb3B0IGluICgnLXEnLCctLXF1aWV0Jyk6CisgICAgICAgICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSAwCisgICAgICAgICAgICBpZiBvcHQgaW4gKCctdicsJy0tdmVyYm9zZScpOgorICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgorICAgICAgICAgICAgaWYgb3B0IGluICgnLWYnLCctLWZhaWxmYXN0Jyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgU2hvdWxkIHRoaXMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIC1mIGlzIG5vdCB2YWxpZD8KKyAgICAgICAgICAgIGlmIG9wdCBpbiAoJy1jJywnLS1jYXRjaCcpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBUcnVlCisgICAgICAgICAgICAgICAgIyBTaG91bGQgdGhpcyByYWlzZSBhbiBleGNlcHRpb24gaWYgLWMgaXMgbm90IHZhbGlkPworICAgICAgICAgICAgaWYgb3B0IGluICgnLWInLCctLWJ1ZmZlcicpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gVHJ1ZQorICAgICAgICAgICAgICAgICMgU2hvdWxkIHRoaXMgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIC1iIGlzIG5vdCB2YWxpZD8KKworICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKKyAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuIFRoaXMgbWVhbnMgLWMgLyAtYiAvIC12IC8gLWYgb3B0aW9ucyB3aWxsCisgICAgICAgICAgICAjIGJlIGhhbmRsZWQgdHdpY2UsIHdoaWNoIGlzIGhhcm1sZXNzIGJ1dCBub3QgaWRlYWwuCisgICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsxOl0pCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgorICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQorICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCisgICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoYXJncykKKyAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gKHNlbGYuZGVmYXVsdFRlc3QsKQorICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKKworICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi50ZXN0TmFtZXMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVzdCA9IHNlbGYudGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYubW9kdWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi50ZXN0ID0gc2VsZi50ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhzZWxmLnRlc3ROYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUpCisKKyAgICBkZWYgX2RvX2Rpc2NvdmVyeShzZWxmLCBhcmd2LCBMb2FkZXI9bG9hZGVyLlRlc3RMb2FkZXIpOgorICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgc2VsZi5wcm9nTmFtZSA9ICclcyBkaXNjb3ZlcicgJSBzZWxmLnByb2dOYW1lCisgICAgICAgIGltcG9ydCBvcHRwYXJzZQorICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQorICAgICAgICBwYXJzZXIucHJvZyA9IHNlbGYucHJvZ05hbWUKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2UnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdWZXJib3NlIG91dHB1dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWYnLCAnLS1mYWlsZmFzdCcsIGRlc3Q9J2ZhaWxmYXN0JywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgICAgICBpZiBzZWxmLmNhdGNoYnJlYWsgIT0gRmFsc2U6CisgICAgICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLWMnLCAnLS1jYXRjaCcsIGRlc3Q9J2NhdGNoYnJlYWsnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQ2F0Y2ggY3RybC1DIGFuZCBkaXNwbGF5IHJlc3VsdHMgc28gZmFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1iJywgJy0tYnVmZmVyJywgZGVzdD0nYnVmZmVyJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0J1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc3RhcnQtZGlyZWN0b3J5JywgZGVzdD0nc3RhcnQnLCBkZWZhdWx0PScuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0iRGlyZWN0b3J5IHRvIHN0YXJ0IGRpc2NvdmVyeSAoJy4nIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1wJywgJy0tcGF0dGVybicsIGRlc3Q9J3BhdHRlcm4nLCBkZWZhdWx0PSd0ZXN0Ki5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IlBhdHRlcm4gdG8gbWF0Y2ggdGVzdHMgKCd0ZXN0Ki5weScgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvIHN0YXJ0IGRpcmVjdG9yeSknKQorCisgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorICAgICAgICBpZiBsZW4oYXJncykgPiAzOgorICAgICAgICAgICAgc2VsZi51c2FnZUV4aXQoKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiB6aXAoKCdzdGFydCcsICdwYXR0ZXJuJywgJ3RvcCcpLCBhcmdzKToKKyAgICAgICAgICAgIHNldGF0dHIob3B0aW9ucywgbmFtZSwgdmFsdWUpCisKKyAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQorICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKKyAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKKyAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKworICAgICAgICBpZiBvcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDIKKworICAgICAgICBzdGFydF9kaXIgPSBvcHRpb25zLnN0YXJ0CisgICAgICAgIHBhdHRlcm4gPSBvcHRpb25zLnBhdHRlcm4KKyAgICAgICAgdG9wX2xldmVsX2RpciA9IG9wdGlvbnMudG9wCisKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyKCkKKyAgICAgICAgc2VsZi50ZXN0ID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2RpcikKKworICAgIGRlZiBydW5UZXN0cyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgorICAgICAgICAgICAgaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICBpZiBzZWxmLnRlc3RSdW5uZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IHJ1bm5lci5UZXh0VGVzdFJ1bm5lcgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYudGVzdFJ1bm5lciwgdHlwZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lciA9IHNlbGYudGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi52ZXJib3NpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsZmFzdD1zZWxmLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyPXNlbGYuYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3M9c2VsZi53YXJuaW5ncykKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBkaWRuJ3QgYWNjZXB0IHRoZSB2ZXJib3NpdHksIGJ1ZmZlciBvciBmYWlsZmFzdCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyID0gc2VsZi50ZXN0UnVubmVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgaXQgaXMgYXNzdW1lZCB0byBiZSBhIFRlc3RSdW5uZXIgaW5zdGFuY2UKKyAgICAgICAgICAgIHRlc3RSdW5uZXIgPSBzZWxmLnRlc3RSdW5uZXIKKyAgICAgICAgc2VsZi5yZXN1bHQgPSB0ZXN0UnVubmVyLnJ1bihzZWxmLnRlc3QpCisgICAgICAgIGlmIHNlbGYuZXhpdDoKKyAgICAgICAgICAgIHN5cy5leGl0KG5vdCBzZWxmLnJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKK21haW4gPSBUZXN0UHJvZ3JhbQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weSBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRiZjE4NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9yZXN1bHQucHkKQEAgLTAsMCArMSwxOTIgQEAKKyIiIlRlc3QgcmVzdWx0IG9iamVjdCIiIgorCitpbXBvcnQgb3MKK2ltcG9ydCBpbworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitkZWYgZmFpbGZhc3QobWV0aG9kKToKKyAgICBAd3JhcHMobWV0aG9kKQorICAgIGRlZiBpbm5lcihzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ2ZhaWxmYXN0JywgRmFsc2UpOgorICAgICAgICAgICAgc2VsZi5zdG9wKCkKKyAgICAgICAgcmV0dXJuIG1ldGhvZChzZWxmLCAqYXJncywgKiprdykKKyAgICByZXR1cm4gaW5uZXIKKworU1RET1VUX0xJTkUgPSAnXG5TdGRvdXQ6XG4lcycKK1NUREVSUl9MSU5FID0gJ1xuU3RkZXJyOlxuJXMnCisKKworY2xhc3MgVGVzdFJlc3VsdChvYmplY3QpOgorICAgICIiIkhvbGRlciBmb3IgdGVzdCByZXN1bHQgaW5mb3JtYXRpb24uCisKKyAgICBUZXN0IHJlc3VsdHMgYXJlIGF1dG9tYXRpY2FsbHkgbWFuYWdlZCBieSB0aGUgVGVzdENhc2UgYW5kIFRlc3RTdWl0ZQorICAgIGNsYXNzZXMsIGFuZCBkbyBub3QgbmVlZCB0byBiZSBleHBsaWNpdGx5IG1hbmlwdWxhdGVkIGJ5IHdyaXRlcnMgb2YgdGVzdHMuCisKKyAgICBFYWNoIGluc3RhbmNlIGhvbGRzIHRoZSB0b3RhbCBudW1iZXIgb2YgdGVzdHMgcnVuLCBhbmQgY29sbGVjdGlvbnMgb2YKKyAgICBmYWlsdXJlcyBhbmQgZXJyb3JzIHRoYXQgb2NjdXJyZWQgYW1vbmcgdGhvc2UgdGVzdCBydW5zLiBUaGUgY29sbGVjdGlvbnMKKyAgICBjb250YWluIHR1cGxlcyBvZiAodGVzdGNhc2UsIGV4Y2VwdGlvbmluZm8pLCB3aGVyZSBleGNlcHRpb25pbmZvIGlzIHRoZQorICAgIGZvcm1hdHRlZCB0cmFjZWJhY2sgb2YgdGhlIGVycm9yIHRoYXQgb2NjdXJyZWQuCisgICAgIiIiCisgICAgX3ByZXZpb3VzVGVzdENsYXNzID0gTm9uZQorICAgIF90ZXN0UnVuRW50ZXJlZCA9IEZhbHNlCisgICAgX21vZHVsZVNldFVwRmFpbGVkID0gRmFsc2UKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RyZWFtPU5vbmUsIGRlc2NyaXB0aW9ucz1Ob25lLCB2ZXJib3NpdHk9Tm9uZSk6CisgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBGYWxzZQorICAgICAgICBzZWxmLmZhaWx1cmVzID0gW10KKyAgICAgICAgc2VsZi5lcnJvcnMgPSBbXQorICAgICAgICBzZWxmLnRlc3RzUnVuID0gMAorICAgICAgICBzZWxmLnNraXBwZWQgPSBbXQorICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZXMgPSBbXQorICAgICAgICBzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMgPSBbXQorICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQorICAgICAgICBzZWxmLmJ1ZmZlciA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIgPSBOb25lCisgICAgICAgIHNlbGYuX29yaWdpbmFsX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBGYWxzZQorCisgICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgorICAgICAgICAiQ2FsbGVkIGJ5IFRlc3RSdW5uZXIgYWZ0ZXIgdGVzdCBydW4iCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICAiQ2FsbGVkIHdoZW4gdGhlIGdpdmVuIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuIgorICAgICAgICBzZWxmLnRlc3RzUnVuICs9IDEKKyAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gRmFsc2UKKyAgICAgICAgc2VsZi5fc2V0dXBTdGRvdXQoKQorCisgICAgZGVmIF9zZXR1cFN0ZG91dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBpZiBzZWxmLl9zdGRlcnJfYnVmZmVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RkZXJyX2J1ZmZlciA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZmVyID0gaW8uU3RyaW5nSU8oKQorICAgICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX3N0ZG91dF9idWZmZXIKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLl9zdGRlcnJfYnVmZmVyCisKKyAgICBkZWYgc3RhcnRUZXN0UnVuKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgb25jZSBiZWZvcmUgYW55IHRlc3RzIGFyZSBleGVjdXRlZC4KKworICAgICAgICBTZWUgc3RhcnRUZXN0IGZvciBhIG1ldGhvZCBjYWxsZWQgYmVmb3JlIGVhY2ggdGVzdC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBnaXZlbiB0ZXN0IGhhcyBiZWVuIHJ1biIiIgorICAgICAgICBzZWxmLl9yZXN0b3JlU3Rkb3V0KCkKKyAgICAgICAgc2VsZi5fbWlycm9yT3V0cHV0ID0gRmFsc2UKKworICAgIGRlZiBfcmVzdG9yZVN0ZG91dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBpZiBzZWxmLl9taXJyb3JPdXRwdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZG91dC5nZXR2YWx1ZSgpCisgICAgICAgICAgICAgICAgZXJyb3IgPSBzeXMuc3RkZXJyLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1xuJworICAgICAgICAgICAgICAgICAgICBzZWxmLl9vcmlnaW5hbF9zdGRvdXQud3JpdGUoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBlcnJvci5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfc3RkZXJyLndyaXRlKFNUREVSUl9MSU5FICUgZXJyb3IpCisKKyAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vcmlnaW5hbF9zdGRvdXQKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzZWxmLl9vcmlnaW5hbF9zdGRlcnIKKyAgICAgICAgICAgIHNlbGYuX3N0ZG91dF9idWZmZXIuc2VlaygwKQorICAgICAgICAgICAgc2VsZi5fc3Rkb3V0X2J1ZmZlci50cnVuY2F0ZSgpCisgICAgICAgICAgICBzZWxmLl9zdGRlcnJfYnVmZmVyLnNlZWsoMCkKKyAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmZXIudHJ1bmNhdGUoKQorCisgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgb25jZSBhZnRlciBhbGwgdGVzdHMgYXJlIGV4ZWN1dGVkLgorCisgICAgICAgIFNlZSBzdG9wVGVzdCBmb3IgYSBtZXRob2QgY2FsbGVkIGFmdGVyIGVhY2ggdGVzdC4KKyAgICAgICAgIiIiCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYW4gZXJyb3IgaGFzIG9jY3VycmVkLiAnZXJyJyBpcyBhIHR1cGxlIG9mIHZhbHVlcyBhcworICAgICAgICByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhbiBlcnJvciBoYXMgb2NjdXJyZWQuICdlcnInIGlzIGEgdHVwbGUgb2YgdmFsdWVzIGFzCisgICAgICAgIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpLiIiIgorICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQorICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKKyAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKKyAgICAgICAgIkNhbGxlZCB3aGVuIGEgdGVzdCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdCwgcmVhc29uKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gYSB0ZXN0IGlzIHNraXBwZWQuIiIiCisgICAgICAgIHNlbGYuc2tpcHBlZC5hcHBlbmQoKHRlc3QsIHJlYXNvbikpCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGFuIGV4cGVjdGVkIGZhaWx1cmUvZXJyb3Igb2NjdXJlZC4iIiIKKyAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmVzLmFwcGVuZCgKKyAgICAgICAgICAgICh0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisKKyAgICBAZmFpbGZhc3QKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgdGVzdCB3YXMgZXhwZWN0ZWQgdG8gZmFpbCwgYnV0IHN1Y2NlZWQuIiIiCisgICAgICAgIHNlbGYudW5leHBlY3RlZFN1Y2Nlc3Nlcy5hcHBlbmQodGVzdCkKKworICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgorICAgICAgICAiVGVsbHMgd2hldGhlciBvciBub3QgdGhpcyByZXN1bHQgd2FzIGEgc3VjY2VzcyIKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDAKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiSW5kaWNhdGVzIHRoYXQgdGhlIHRlc3RzIHNob3VsZCBiZSBhYm9ydGVkIgorICAgICAgICBzZWxmLnNob3VsZFN0b3AgPSBUcnVlCisKKyAgICBkZWYgX2V4Y19pbmZvX3RvX3N0cmluZyhzZWxmLCBlcnIsIHRlc3QpOgorICAgICAgICAiIiJDb252ZXJ0cyBhIHN5cy5leGNfaW5mbygpLXN0eWxlIHR1cGxlIG9mIHZhbHVlcyBpbnRvIGEgc3RyaW5nLiIiIgorICAgICAgICBleGN0eXBlLCB2YWx1ZSwgdGIgPSBlcnIKKyAgICAgICAgIyBTa2lwIHRlc3QgcnVubmVyIHRyYWNlYmFjayBsZXZlbHMKKyAgICAgICAgd2hpbGUgdGIgYW5kIHNlbGYuX2lzX3JlbGV2YW50X3RiX2xldmVsKHRiKToKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgICAgIGlmIGV4Y3R5cGUgaXMgdGVzdC5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgIyBTa2lwIGFzc2VydCooKSB0cmFjZWJhY2sgbGV2ZWxzCisgICAgICAgICAgICBsZW5ndGggPSBzZWxmLl9jb3VudF9yZWxldmFudF90Yl9sZXZlbHModGIpCisgICAgICAgICAgICBtc2dMaW5lcyA9IHRyYWNlYmFjay5mb3JtYXRfZXhjZXB0aW9uKGV4Y3R5cGUsIHZhbHVlLCB0YiwgbGVuZ3RoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbXNnTGluZXMgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGN0eXBlLCB2YWx1ZSwgdGIpCisKKyAgICAgICAgaWYgc2VsZi5idWZmZXI6CisgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3Rkb3V0LmdldHZhbHVlKCkKKyAgICAgICAgICAgIGVycm9yID0gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiBvdXRwdXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG91dHB1dC5lbmRzd2l0aCgnXG4nKToKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcbicKKyAgICAgICAgICAgICAgICBtc2dMaW5lcy5hcHBlbmQoU1RET1VUX0xJTkUgJSBvdXRwdXQpCisgICAgICAgICAgICBpZiBlcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBub3QgZXJyb3IuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgICAgIGVycm9yICs9ICdcbicKKyAgICAgICAgICAgICAgICBtc2dMaW5lcy5hcHBlbmQoU1RERVJSX0xJTkUgJSBlcnJvcikKKyAgICAgICAgcmV0dXJuICcnLmpvaW4obXNnTGluZXMpCisKKworICAgIGRlZiBfaXNfcmVsZXZhbnRfdGJfbGV2ZWwoc2VsZiwgdGIpOgorICAgICAgICByZXR1cm4gJ19fdW5pdHRlc3QnIGluIHRiLnRiX2ZyYW1lLmZfZ2xvYmFscworCisgICAgZGVmIF9jb3VudF9yZWxldmFudF90Yl9sZXZlbHMoc2VsZiwgdGIpOgorICAgICAgICBsZW5ndGggPSAwCisgICAgICAgIHdoaWxlIHRiIGFuZCBub3Qgc2VsZi5faXNfcmVsZXZhbnRfdGJfbGV2ZWwodGIpOgorICAgICAgICAgICAgbGVuZ3RoICs9IDEKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gbGVuZ3RoCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoIjwlcyBydW49JWkgZXJyb3JzPSVpIGZhaWx1cmVzPSVpPiIgJQorICAgICAgICAgICAgICAgKHV0aWwuc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBzZWxmLnRlc3RzUnVuLCBsZW4oc2VsZi5lcnJvcnMpLAorICAgICAgICAgICAgICAgIGxlbihzZWxmLmZhaWx1cmVzKSkpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvcnVubmVyLnB5IGIvTGliL3VuaXR0ZXN0L3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGM0Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3J1bm5lci5weQpAQCAtMCwwICsxLDIxMyBAQAorIiIiUnVubmluZyB0ZXN0cyIiIgorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHdhcm5pbmdzCisKK2Zyb20gLiBpbXBvcnQgcmVzdWx0Citmcm9tIC5zaWduYWxzIGltcG9ydCByZWdpc3RlclJlc3VsdAorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK2NsYXNzIF9Xcml0ZWxuRGVjb3JhdG9yKG9iamVjdCk6CisgICAgIiIiVXNlZCB0byBkZWNvcmF0ZSBmaWxlLWxpa2Ugb2JqZWN0cyB3aXRoIGEgaGFuZHkgJ3dyaXRlbG4nIG1ldGhvZCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHN0cmVhbSk6CisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgIGlmIGF0dHIgaW4gKCdzdHJlYW0nLCAnX19nZXRzdGF0ZV9fJyk6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcihhdHRyKQorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLnN0cmVhbSxhdHRyKQorCisgICAgZGVmIHdyaXRlbG4oc2VsZiwgYXJnPU5vbmUpOgorICAgICAgICBpZiBhcmc6CisgICAgICAgICAgICBzZWxmLndyaXRlKGFyZykKKyAgICAgICAgc2VsZi53cml0ZSgnXG4nKSAjIHRleHQtbW9kZSBzdHJlYW1zIHRyYW5zbGF0ZSB0byBcclxuIGlmIG5lZWRlZAorCisKK2NsYXNzIFRleHRUZXN0UmVzdWx0KHJlc3VsdC5UZXN0UmVzdWx0KToKKyAgICAiIiJBIHRlc3QgcmVzdWx0IGNsYXNzIHRoYXQgY2FuIHByaW50IGZvcm1hdHRlZCB0ZXh0IHJlc3VsdHMgdG8gYSBzdHJlYW0uCisKKyAgICBVc2VkIGJ5IFRleHRUZXN0UnVubmVyLgorICAgICIiIgorICAgIHNlcGFyYXRvcjEgPSAnPScgKiA3MAorICAgIHNlcGFyYXRvcjIgPSAnLScgKiA3MAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbSwgZGVzY3JpcHRpb25zLCB2ZXJib3NpdHkpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorICAgICAgICBzZWxmLnNob3dBbGwgPSB2ZXJib3NpdHkgPiAxCisgICAgICAgIHNlbGYuZG90cyA9IHZlcmJvc2l0eSA9PSAxCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCisKKyAgICBkZWYgZ2V0RGVzY3JpcHRpb24oc2VsZiwgdGVzdCk6CisgICAgICAgIGRvY19maXJzdF9saW5lID0gdGVzdC5zaG9ydERlc2NyaXB0aW9uKCkKKyAgICAgICAgaWYgc2VsZi5kZXNjcmlwdGlvbnMgYW5kIGRvY19maXJzdF9saW5lOgorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbigoc3RyKHRlc3QpLCBkb2NfZmlyc3RfbGluZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc3RyKHRlc3QpCisKKyAgICBkZWYgc3RhcnRUZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICBzdXBlcihUZXh0VGVzdFJlc3VsdCwgc2VsZikuc3RhcnRUZXN0KHRlc3QpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiIC4uLiAiKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRTdWNjZXNzKHRlc3QpCisgICAgICAgIGlmIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIm9rIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgnLicpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZEVycm9yKHRlc3QsIGVycikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRVJST1IiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCdFJykKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRGYWlsdXJlKHRlc3QsIGVycikKKyAgICAgICAgaWYgc2VsZi5zaG93QWxsOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiRkFJTCIpCisgICAgICAgIGVsaWYgc2VsZi5kb3RzOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ0YnKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQorCisgICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdCwgcmVhc29uKToKKyAgICAgICAgc3VwZXIoVGV4dFRlc3RSZXN1bHQsIHNlbGYpLmFkZFNraXAodGVzdCwgcmVhc29uKQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJza2lwcGVkIHswIXJ9Ii5mb3JtYXQocmVhc29uKSkKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgicyIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRFeHBlY3RlZEZhaWx1cmUodGVzdCwgZXJyKQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJleHBlY3RlZCBmYWlsdXJlIikKKyAgICAgICAgZWxpZiBzZWxmLmRvdHM6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgieCIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS5mbHVzaCgpCisKKyAgICBkZWYgYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHN1cGVyKFRleHRUZXN0UmVzdWx0LCBzZWxmKS5hZGRVbmV4cGVjdGVkU3VjY2Vzcyh0ZXN0KQorICAgICAgICBpZiBzZWxmLnNob3dBbGw6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJ1bmV4cGVjdGVkIHN1Y2Nlc3MiKQorICAgICAgICBlbGlmIHNlbGYuZG90czoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJ1IikKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLmZsdXNoKCkKKworICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kb3RzIG9yIHNlbGYuc2hvd0FsbDoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQorICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdFUlJPUicsIHNlbGYuZXJyb3JzKQorICAgICAgICBzZWxmLnByaW50RXJyb3JMaXN0KCdGQUlMJywgc2VsZi5mYWlsdXJlcykKKworICAgIGRlZiBwcmludEVycm9yTGlzdChzZWxmLCBmbGF2b3VyLCBlcnJvcnMpOgorICAgICAgICBmb3IgdGVzdCwgZXJyIGluIGVycm9yczoKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oc2VsZi5zZXBhcmF0b3IxKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiJXM6ICVzIiAlIChmbGF2b3VyLHNlbGYuZ2V0RGVzY3JpcHRpb24odGVzdCkpKQorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihzZWxmLnNlcGFyYXRvcjIpCisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCIlcyIgJSBlcnIpCisKKworY2xhc3MgVGV4dFRlc3RSdW5uZXIob2JqZWN0KToKKyAgICAiIiJBIHRlc3QgcnVubmVyIGNsYXNzIHRoYXQgZGlzcGxheXMgcmVzdWx0cyBpbiB0ZXh0dWFsIGZvcm0uCisKKyAgICBJdCBwcmludHMgb3V0IHRoZSBuYW1lcyBvZiB0ZXN0cyBhcyB0aGV5IGFyZSBydW4sIGVycm9ycyBhcyB0aGV5CisgICAgb2NjdXIsIGFuZCBhIHN1bW1hcnkgb2YgdGhlIHJlc3VsdHMgYXQgdGhlIGVuZCBvZiB0aGUgdGVzdCBydW4uCisgICAgIiIiCisgICAgcmVzdWx0Y2xhc3MgPSBUZXh0VGVzdFJlc3VsdAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbT1Ob25lLCBkZXNjcmlwdGlvbnM9VHJ1ZSwgdmVyYm9zaXR5PTEsCisgICAgICAgICAgICAgICAgIGZhaWxmYXN0PUZhbHNlLCBidWZmZXI9RmFsc2UsIHJlc3VsdGNsYXNzPU5vbmUsIHdhcm5pbmdzPU5vbmUpOgorICAgICAgICBpZiBzdHJlYW0gaXMgTm9uZToKKyAgICAgICAgICAgIHN0cmVhbSA9IHN5cy5zdGRlcnIKKyAgICAgICAgc2VsZi5zdHJlYW0gPSBfV3JpdGVsbkRlY29yYXRvcihzdHJlYW0pCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zCisgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgIHNlbGYuZmFpbGZhc3QgPSBmYWlsZmFzdAorICAgICAgICBzZWxmLmJ1ZmZlciA9IGJ1ZmZlcgorICAgICAgICBzZWxmLndhcm5pbmdzID0gd2FybmluZ3MKKyAgICAgICAgaWYgcmVzdWx0Y2xhc3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnJlc3VsdGNsYXNzID0gcmVzdWx0Y2xhc3MKKworICAgIGRlZiBfbWFrZVJlc3VsdChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0Y2xhc3Moc2VsZi5zdHJlYW0sIHNlbGYuZGVzY3JpcHRpb25zLCBzZWxmLnZlcmJvc2l0eSkKKworICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICJSdW4gdGhlIGdpdmVuIHRlc3QgY2FzZSBvciB0ZXN0IHN1aXRlLiIKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5fbWFrZVJlc3VsdCgpCisgICAgICAgIHJlZ2lzdGVyUmVzdWx0KHJlc3VsdCkKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gc2VsZi5mYWlsZmFzdAorICAgICAgICByZXN1bHQuYnVmZmVyID0gc2VsZi5idWZmZXIKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgaWYgc2VsZi53YXJuaW5nczoKKyAgICAgICAgICAgICAgICAjIGlmIHNlbGYud2FybmluZ3MgaXMgc2V0LCB1c2UgaXQgdG8gZmlsdGVyIGFsbCB0aGUgd2FybmluZ3MKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoc2VsZi53YXJuaW5ncykKKyAgICAgICAgICAgICAgICAjIGlmIHRoZSBmaWx0ZXIgaXMgJ2RlZmF1bHQnIG9yICdhbHdheXMnLCBzcGVjaWFsLWNhc2UgdGhlCisgICAgICAgICAgICAgICAgIyB3YXJuaW5ncyBmcm9tIHRoZSBkZXByZWNhdGVkIHVuaXR0ZXN0IG1ldGhvZHMgdG8gc2hvdyB0aGVtCisgICAgICAgICAgICAgICAgIyBubyBtb3JlIHRoYW4gb25jZSBwZXIgbW9kdWxlLCBiZWNhdXNlIHRoZXkgY2FuIGJlIGZhaXJseQorICAgICAgICAgICAgICAgICMgbm9pc3kuICBUaGUgLVdkIGFuZCAtV2EgZmxhZ3MgY2FuIGJlIHVzZWQgdG8gYnlwYXNzIHRoaXMKKyAgICAgICAgICAgICAgICAjIG9ubHkgd2hlbiBzZWxmLndhcm5pbmdzIGlzIE5vbmUuCisgICAgICAgICAgICAgICAgaWYgc2VsZi53YXJuaW5ncyBpbiBbJ2RlZmF1bHQnLCAnYWx3YXlzJ106CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdtb2R1bGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5PURlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdQbGVhc2UgdXNlIGFzc2VydFx3KyBpbnN0ZWFkLicpCisgICAgICAgICAgICBzdGFydFRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgc3RhcnRUZXN0UnVuID0gZ2V0YXR0cihyZXN1bHQsICdzdGFydFRlc3RSdW4nLCBOb25lKQorICAgICAgICAgICAgaWYgc3RhcnRUZXN0UnVuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHN0YXJ0VGVzdFJ1bigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuID0gZ2V0YXR0cihyZXN1bHQsICdzdG9wVGVzdFJ1bicsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgc3RvcFRlc3RSdW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHN0b3BUZXN0UnVuKCkKKyAgICAgICAgICAgIHN0b3BUaW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgdGltZVRha2VuID0gc3RvcFRpbWUgLSBzdGFydFRpbWUKKyAgICAgICAgcmVzdWx0LnByaW50RXJyb3JzKCkKKyAgICAgICAgaWYgaGFzYXR0cihyZXN1bHQsICdzZXBhcmF0b3IyJyk6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKHJlc3VsdC5zZXBhcmF0b3IyKQorICAgICAgICBydW4gPSByZXN1bHQudGVzdHNSdW4KKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChydW4sIHJ1biAhPSAxIGFuZCAicyIgb3IgIiIsIHRpbWVUYWtlbikpCisgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oKQorCisgICAgICAgIGV4cGVjdGVkRmFpbHMgPSB1bmV4cGVjdGVkU3VjY2Vzc2VzID0gc2tpcHBlZCA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzdWx0cyA9IG1hcChsZW4sIChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5za2lwcGVkKSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhwZWN0ZWRGYWlscywgdW5leHBlY3RlZFN1Y2Nlc3Nlcywgc2tpcHBlZCA9IHJlc3VsdHMKKworICAgICAgICBpbmZvcyA9IFtdCisgICAgICAgIGlmIG5vdCByZXN1bHQud2FzU3VjY2Vzc2Z1bCgpOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoIkZBSUxFRCIpCisgICAgICAgICAgICBmYWlsZWQsIGVycm9yZWQgPSBsZW4ocmVzdWx0LmZhaWx1cmVzKSwgbGVuKHJlc3VsdC5lcnJvcnMpCisgICAgICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJmYWlsdXJlcz0lZCIgJSBmYWlsZWQpCisgICAgICAgICAgICBpZiBlcnJvcmVkOgorICAgICAgICAgICAgICAgIGluZm9zLmFwcGVuZCgiZXJyb3JzPSVkIiAlIGVycm9yZWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiT0siKQorICAgICAgICBpZiBza2lwcGVkOgorICAgICAgICAgICAgaW5mb3MuYXBwZW5kKCJza2lwcGVkPSVkIiAlIHNraXBwZWQpCisgICAgICAgIGlmIGV4cGVjdGVkRmFpbHM6CisgICAgICAgICAgICBpbmZvcy5hcHBlbmQoImV4cGVjdGVkIGZhaWx1cmVzPSVkIiAlIGV4cGVjdGVkRmFpbHMpCisgICAgICAgIGlmIHVuZXhwZWN0ZWRTdWNjZXNzZXM6CisgICAgICAgICAgICBpbmZvcy5hcHBlbmQoInVuZXhwZWN0ZWQgc3VjY2Vzc2VzPSVkIiAlIHVuZXhwZWN0ZWRTdWNjZXNzZXMpCisgICAgICAgIGlmIGluZm9zOgorICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiICglcykiICUgKCIsICIuam9pbihpbmZvcyksKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJcbiIpCisgICAgICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zaWduYWxzLnB5IGIvTGliL3VuaXR0ZXN0L3NpZ25hbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzMTA0MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC9zaWduYWxzLnB5CkBAIC0wLDAgKzEsNTcgQEAKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCisKK2NsYXNzIF9JbnRlcnJ1cHRIYW5kbGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRlZmF1bHRfaGFuZGxlcik6CisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5kZWZhdWx0X2hhbmRsZXIgPSBkZWZhdWx0X2hhbmRsZXIKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzaWdudW0sIGZyYW1lKToKKyAgICAgICAgaW5zdGFsbGVkX2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGlmIGluc3RhbGxlZF9oYW5kbGVyIGlzIG5vdCBzZWxmOgorICAgICAgICAgICAgIyBpZiB3ZSBhcmVuJ3QgdGhlIGluc3RhbGxlZCBoYW5kbGVyLCB0aGVuIGRlbGVnYXRlIGltbWVkaWF0ZWx5CisgICAgICAgICAgICAjIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9oYW5kbGVyKHNpZ251bSwgZnJhbWUpCisKKyAgICAgICAgaWYgc2VsZi5jYWxsZWQ6CisgICAgICAgICAgICBzZWxmLmRlZmF1bHRfaGFuZGxlcihzaWdudW0sIGZyYW1lKQorICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKKyAgICAgICAgZm9yIHJlc3VsdCBpbiBfcmVzdWx0cy5rZXlzKCk6CisgICAgICAgICAgICByZXN1bHQuc3RvcCgpCisKK19yZXN1bHRzID0gd2Vha3JlZi5XZWFrS2V5RGljdGlvbmFyeSgpCitkZWYgcmVnaXN0ZXJSZXN1bHQocmVzdWx0KToKKyAgICBfcmVzdWx0c1tyZXN1bHRdID0gMQorCitkZWYgcmVtb3ZlUmVzdWx0KHJlc3VsdCk6CisgICAgcmV0dXJuIGJvb2woX3Jlc3VsdHMucG9wKHJlc3VsdCwgTm9uZSkpCisKK19pbnRlcnJ1cHRfaGFuZGxlciA9IE5vbmUKK2RlZiBpbnN0YWxsSGFuZGxlcigpOgorICAgIGdsb2JhbCBfaW50ZXJydXB0X2hhbmRsZXIKKyAgICBpZiBfaW50ZXJydXB0X2hhbmRsZXIgaXMgTm9uZToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICBfaW50ZXJydXB0X2hhbmRsZXIgPSBfSW50ZXJydXB0SGFuZGxlcihkZWZhdWx0X2hhbmRsZXIpCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgX2ludGVycnVwdF9oYW5kbGVyKQorCisKK2RlZiByZW1vdmVIYW5kbGVyKG1ldGhvZD1Ob25lKToKKyAgICBpZiBtZXRob2QgaXMgbm90IE5vbmU6CisgICAgICAgIEB3cmFwcyhtZXRob2QpCisgICAgICAgIGRlZiBpbm5lcigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgaW5pdGlhbCA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHJlbW92ZUhhbmRsZXIoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2QoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIGluaXRpYWwpCisgICAgICAgIHJldHVybiBpbm5lcgorCisgICAgZ2xvYmFsIF9pbnRlcnJ1cHRfaGFuZGxlcgorICAgIGlmIF9pbnRlcnJ1cHRfaGFuZGxlciBpcyBub3QgTm9uZToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBfaW50ZXJydXB0X2hhbmRsZXIuZGVmYXVsdF9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3N1aXRlLnB5IGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YmQ2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKQEAgLTAsMCArMSwzMDEgQEAKKyIiIlRlc3RTdWl0ZSIiIgorCitpbXBvcnQgc3lzCisKK2Zyb20gLiBpbXBvcnQgY2FzZQorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fdW5pdHRlc3QgPSBUcnVlCisKKworZGVmIF9jYWxsX2lmX2V4aXN0cyhwYXJlbnQsIGF0dHIpOgorICAgIGZ1bmMgPSBnZXRhdHRyKHBhcmVudCwgYXR0ciwgbGFtYmRhOiBOb25lKQorICAgIGZ1bmMoKQorCisKK2NsYXNzIEJhc2VUZXN0U3VpdGUob2JqZWN0KToKKyAgICAiIiJBIHNpbXBsZSB0ZXN0IHN1aXRlIHRoYXQgZG9lc24ndCBwcm92aWRlIGNsYXNzIG9yIG1vZHVsZSBzaGFyZWQgZml4dHVyZXMuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RzPSgpKToKKyAgICAgICAgc2VsZi5fdGVzdHMgPSBbXQorICAgICAgICBzZWxmLmFkZFRlc3RzKHRlc3RzKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIjwlcyB0ZXN0cz0lcz4iICUgKHV0aWwuc3RyY2xhc3Moc2VsZi5fX2NsYXNzX18pLCBsaXN0KHNlbGYpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZikgPT0gbGlzdChvdGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fdGVzdHMpCisKKyAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIGNhc2VzID0gMAorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgY2FzZXMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCisgICAgICAgIHJldHVybiBjYXNlcworCisgICAgZGVmIGFkZFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgICMgc2FuaXR5IGNoZWNrcworICAgICAgICBpZiBub3QgaGFzYXR0cih0ZXN0LCAnX19jYWxsX18nKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigie30gaXMgbm90IGNhbGxhYmxlIi5mb3JtYXQocmVwcih0ZXN0KSkpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgdHlwZSkgYW5kIGlzc3ViY2xhc3ModGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FzZS5UZXN0Q2FzZSwgVGVzdFN1aXRlKSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3RDYXNlcyBhbmQgVGVzdFN1aXRlcyBtdXN0IGJlIGluc3RhbnRpYXRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYWRkVGVzdCgpIikKKyAgICAgICAgc2VsZi5fdGVzdHMuYXBwZW5kKHRlc3QpCisKKyAgICBkZWYgYWRkVGVzdHMoc2VsZiwgdGVzdHMpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHRlc3RzLCBzdHIpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0ZXN0cyBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIHRlc3RzLCBub3QgYSBzdHJpbmciKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bigqYXJncywgKiprd2RzKQorCisgICAgZGVmIGRlYnVnKHNlbGYpOgorICAgICAgICAiIiJSdW4gdGhlIHRlc3RzIHdpdGhvdXQgY29sbGVjdGluZyBlcnJvcnMgaW4gYSBUZXN0UmVzdWx0IiIiCisgICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgICAgICB0ZXN0LmRlYnVnKCkKKworCitjbGFzcyBUZXN0U3VpdGUoQmFzZVRlc3RTdWl0ZSk6CisgICAgIiIiQSB0ZXN0IHN1aXRlIGlzIGEgY29tcG9zaXRlIHRlc3QgY29uc2lzdGluZyBvZiBhIG51bWJlciBvZiBUZXN0Q2FzZXMuCisKKyAgICBGb3IgdXNlLCBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgVGVzdFN1aXRlLCB0aGVuIGFkZCB0ZXN0IGNhc2UgaW5zdGFuY2VzLgorICAgIFdoZW4gYWxsIHRlc3RzIGhhdmUgYmVlbiBhZGRlZCwgdGhlIHN1aXRlIGNhbiBiZSBwYXNzZWQgdG8gYSB0ZXN0CisgICAgcnVubmVyLCBzdWNoIGFzIFRleHRUZXN0UnVubmVyLiBJdCB3aWxsIHJ1biB0aGUgaW5kaXZpZHVhbCB0ZXN0IGNhc2VzCisgICAgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZCwgYWdncmVnYXRpbmcgdGhlIHJlc3VsdHMuIFdoZW4KKyAgICBzdWJjbGFzc2luZywgZG8gbm90IGZvcmdldCB0byBjYWxsIHRoZSBiYXNlIGNsYXNzIGNvbnN0cnVjdG9yLgorICAgICIiIgorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQsIGRlYnVnPUZhbHNlKToKKyAgICAgICAgdG9wTGV2ZWwgPSBGYWxzZQorICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwgJ190ZXN0UnVuRW50ZXJlZCcsIEZhbHNlKSBpcyBGYWxzZToKKyAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSB0b3BMZXZlbCA9IFRydWUKKworICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgX2lzbm90c3VpdGUodGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVNb2R1bGVGaXh0dXJlKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVDbGFzc1NldFVwKHRlc3QsIHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQuX3ByZXZpb3VzVGVzdENsYXNzID0gdGVzdC5fX2NsYXNzX18KKworICAgICAgICAgICAgICAgIGlmIChnZXRhdHRyKHRlc3QuX19jbGFzc19fLCAnX2NsYXNzU2V0dXBGYWlsZWQnLCBGYWxzZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihyZXN1bHQsICdfbW9kdWxlU2V0VXBGYWlsZWQnLCBGYWxzZSkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBub3QgZGVidWc6CisgICAgICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3QuZGVidWcoKQorCisgICAgICAgIGlmIHRvcExldmVsOgorICAgICAgICAgICAgc2VsZi5fdGVhckRvd25QcmV2aW91c0NsYXNzKE5vbmUsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZU1vZHVsZVRlYXJEb3duKHJlc3VsdCkKKyAgICAgICAgICAgIHJlc3VsdC5fdGVzdFJ1bkVudGVyZWQgPSBGYWxzZQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgZGVidWcoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgdGVzdHMgd2l0aG91dCBjb2xsZWN0aW5nIGVycm9ycyBpbiBhIFRlc3RSZXN1bHQiIiIKKyAgICAgICAgZGVidWcgPSBfRGVidWdSZXN1bHQoKQorICAgICAgICBzZWxmLnJ1bihkZWJ1ZywgVHJ1ZSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICBkZWYgX2hhbmRsZUNsYXNzU2V0VXAoc2VsZiwgdGVzdCwgcmVzdWx0KToKKyAgICAgICAgcHJldmlvdXNDbGFzcyA9IGdldGF0dHIocmVzdWx0LCAnX3ByZXZpb3VzVGVzdENsYXNzJywgTm9uZSkKKyAgICAgICAgY3VycmVudENsYXNzID0gdGVzdC5fX2NsYXNzX18KKyAgICAgICAgaWYgY3VycmVudENsYXNzID09IHByZXZpb3VzQ2xhc3M6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgcmVzdWx0Ll9tb2R1bGVTZXRVcEZhaWxlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBnZXRhdHRyKGN1cnJlbnRDbGFzcywgIl9fdW5pdHRlc3Rfc2tpcF9fIiwgRmFsc2UpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY3VycmVudENsYXNzLl9jbGFzc1NldHVwRmFpbGVkID0gRmFsc2UKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgdGVzdCBtYXkgYWN0dWFsbHkgYmUgYSBmdW5jdGlvbgorICAgICAgICAgICAgIyBzbyBpdHMgY2xhc3Mgd2lsbCBiZSBhIGJ1aWx0aW4tdHlwZQorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNldFVwQ2xhc3MgPSBnZXRhdHRyKGN1cnJlbnRDbGFzcywgJ3NldFVwQ2xhc3MnLCBOb25lKQorICAgICAgICBpZiBzZXRVcENsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2NhbGxfaWZfZXhpc3RzKHJlc3VsdCwgJ19zZXR1cFN0ZG91dCcpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2V0VXBDbGFzcygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIF9EZWJ1Z1Jlc3VsdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgY3VycmVudENsYXNzLl9jbGFzc1NldHVwRmFpbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHV0aWwuc3RyY2xhc3MoY3VycmVudENsYXNzKQorICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9ICdzZXRVcENsYXNzICglcyknICUgY2xhc3NOYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkQ2xhc3NPck1vZHVsZUxldmVsRXhjZXB0aW9uKHJlc3VsdCwgZSwgZXJyb3JOYW1lKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBfY2FsbF9pZl9leGlzdHMocmVzdWx0LCAnX3Jlc3RvcmVTdGRvdXQnKQorCisgICAgZGVmIF9nZXRfcHJldmlvdXNfbW9kdWxlKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHByZXZpb3VzTW9kdWxlID0gTm9uZQorICAgICAgICBwcmV2aW91c0NsYXNzID0gZ2V0YXR0cihyZXN1bHQsICdfcHJldmlvdXNUZXN0Q2xhc3MnLCBOb25lKQorICAgICAgICBpZiBwcmV2aW91c0NsYXNzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJldmlvdXNNb2R1bGUgPSBwcmV2aW91c0NsYXNzLl9fbW9kdWxlX18KKyAgICAgICAgcmV0dXJuIHByZXZpb3VzTW9kdWxlCisKKworICAgIGRlZiBfaGFuZGxlTW9kdWxlRml4dHVyZShzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c01vZHVsZSA9IHNlbGYuX2dldF9wcmV2aW91c19tb2R1bGUocmVzdWx0KQorICAgICAgICBjdXJyZW50TW9kdWxlID0gdGVzdC5fX2NsYXNzX18uX19tb2R1bGVfXworICAgICAgICBpZiBjdXJyZW50TW9kdWxlID09IHByZXZpb3VzTW9kdWxlOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQorCisKKyAgICAgICAgcmVzdWx0Ll9tb2R1bGVTZXRVcEZhaWxlZCA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2N1cnJlbnRNb2R1bGVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZXRVcE1vZHVsZSA9IGdldGF0dHIobW9kdWxlLCAnc2V0VXBNb2R1bGUnLCBOb25lKQorICAgICAgICBpZiBzZXRVcE1vZHVsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jYWxsX2lmX2V4aXN0cyhyZXN1bHQsICdfc2V0dXBTdGRvdXQnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNldFVwTW9kdWxlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlc3VsdCwgX0RlYnVnUmVzdWx0KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICByZXN1bHQuX21vZHVsZVNldFVwRmFpbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGVycm9yTmFtZSA9ICdzZXRVcE1vZHVsZSAoJXMpJyAlIGN1cnJlbnRNb2R1bGUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIF9jYWxsX2lmX2V4aXN0cyhyZXN1bHQsICdfcmVzdG9yZVN0ZG91dCcpCisKKyAgICBkZWYgX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihzZWxmLCByZXN1bHQsIGV4Y2VwdGlvbiwgZXJyb3JOYW1lKToKKyAgICAgICAgZXJyb3IgPSBfRXJyb3JIb2xkZXIoZXJyb3JOYW1lKQorICAgICAgICBhZGRTa2lwID0gZ2V0YXR0cihyZXN1bHQsICdhZGRTa2lwJywgTm9uZSkKKyAgICAgICAgaWYgYWRkU2tpcCBpcyBub3QgTm9uZSBhbmQgaXNpbnN0YW5jZShleGNlcHRpb24sIGNhc2UuU2tpcFRlc3QpOgorICAgICAgICAgICAgYWRkU2tpcChlcnJvciwgc3RyKGV4Y2VwdGlvbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXN1bHQuYWRkRXJyb3IoZXJyb3IsIHN5cy5leGNfaW5mbygpKQorCisgICAgZGVmIF9oYW5kbGVNb2R1bGVUZWFyRG93bihzZWxmLCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c01vZHVsZSA9IHNlbGYuX2dldF9wcmV2aW91c19tb2R1bGUocmVzdWx0KQorICAgICAgICBpZiBwcmV2aW91c01vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIHJlc3VsdC5fbW9kdWxlU2V0VXBGYWlsZWQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1twcmV2aW91c01vZHVsZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGVhckRvd25Nb2R1bGUgPSBnZXRhdHRyKG1vZHVsZSwgJ3RlYXJEb3duTW9kdWxlJywgTm9uZSkKKyAgICAgICAgaWYgdGVhckRvd25Nb2R1bGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfY2FsbF9pZl9leGlzdHMocmVzdWx0LCAnX3NldHVwU3Rkb3V0JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ZWFyRG93bk1vZHVsZSgpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIF9EZWJ1Z1Jlc3VsdCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZXJyb3JOYW1lID0gJ3RlYXJEb3duTW9kdWxlICglcyknICUgcHJldmlvdXNNb2R1bGUKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRDbGFzc09yTW9kdWxlTGV2ZWxFeGNlcHRpb24ocmVzdWx0LCBlLCBlcnJvck5hbWUpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIF9jYWxsX2lmX2V4aXN0cyhyZXN1bHQsICdfcmVzdG9yZVN0ZG91dCcpCisKKyAgICBkZWYgX3RlYXJEb3duUHJldmlvdXNDbGFzcyhzZWxmLCB0ZXN0LCByZXN1bHQpOgorICAgICAgICBwcmV2aW91c0NsYXNzID0gZ2V0YXR0cihyZXN1bHQsICdfcHJldmlvdXNUZXN0Q2xhc3MnLCBOb25lKQorICAgICAgICBjdXJyZW50Q2xhc3MgPSB0ZXN0Ll9fY2xhc3NfXworICAgICAgICBpZiBjdXJyZW50Q2xhc3MgPT0gcHJldmlvdXNDbGFzczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBnZXRhdHRyKHByZXZpb3VzQ2xhc3MsICdfY2xhc3NTZXR1cEZhaWxlZCcsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBnZXRhdHRyKHJlc3VsdCwgJ19tb2R1bGVTZXRVcEZhaWxlZCcsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBnZXRhdHRyKHByZXZpb3VzQ2xhc3MsICJfX3VuaXR0ZXN0X3NraXBfXyIsIEZhbHNlKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHRlYXJEb3duQ2xhc3MgPSBnZXRhdHRyKHByZXZpb3VzQ2xhc3MsICd0ZWFyRG93bkNsYXNzJywgTm9uZSkKKyAgICAgICAgaWYgdGVhckRvd25DbGFzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF9jYWxsX2lmX2V4aXN0cyhyZXN1bHQsICdfc2V0dXBTdGRvdXQnKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRlYXJEb3duQ2xhc3MoKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBfRGVidWdSZXN1bHQpOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9IHV0aWwuc3RyY2xhc3MocHJldmlvdXNDbGFzcykKKyAgICAgICAgICAgICAgICBlcnJvck5hbWUgPSAndGVhckRvd25DbGFzcyAoJXMpJyAlIGNsYXNzTmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FkZENsYXNzT3JNb2R1bGVMZXZlbEV4Y2VwdGlvbihyZXN1bHQsIGUsIGVycm9yTmFtZSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgX2NhbGxfaWZfZXhpc3RzKHJlc3VsdCwgJ19yZXN0b3JlU3Rkb3V0JykKKworCitjbGFzcyBfRXJyb3JIb2xkZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBQbGFjZWhvbGRlciBmb3IgYSBUZXN0Q2FzZSBpbnNpZGUgYSByZXN1bHQuIEFzIGZhciBhcyBhIFRlc3RSZXN1bHQKKyAgICBpcyBjb25jZXJuZWQsIHRoaXMgbG9va3MgZXhhY3RseSBsaWtlIGEgdW5pdCB0ZXN0LiBVc2VkIHRvIGluc2VydAorICAgIGFyYml0cmFyeSBlcnJvcnMgaW50byBhIHRlc3Qgc3VpdGUgcnVuLgorICAgICIiIgorICAgICMgSW5zcGlyZWQgYnkgdGhlIEVycm9ySG9sZGVyIGZyb20gVHdpc3RlZDoKKyAgICAjIGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS90cmFjL2Jyb3dzZXIvdHJ1bmsvdHdpc3RlZC90cmlhbC9ydW5uZXIucHkKKworICAgICMgYXR0cmlidXRlIHVzZWQgYnkgVGVzdFJlc3VsdC5fZXhjX2luZm9fdG9fc3RyaW5nCisgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5kZXNjcmlwdGlvbgorCisgICAgZGVmIHNob3J0RGVzY3JpcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPEVycm9ySG9sZGVyIGRlc2NyaXB0aW9uPSVyPiIgJSAoc2VsZi5kZXNjcmlwdGlvbiwpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaWQoKQorCisgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAjIGNvdWxkIGNhbGwgcmVzdWx0LmFkZEVycm9yKC4uLikgLSBidXQgdGhpcyB0ZXN0LWxpa2Ugb2JqZWN0CisgICAgICAgICMgc2hvdWxkbid0IGJlIHJ1biBhbnl3YXkKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnJ1bihyZXN1bHQpCisKKyAgICBkZWYgY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIHJldHVybiAwCisKK2RlZiBfaXNub3RzdWl0ZSh0ZXN0KToKKyAgICAiQSBjcnVkZSB3YXkgdG8gdGVsbCBhcGFydCB0ZXN0Y2FzZXMgYW5kIHN1aXRlcyB3aXRoIGR1Y2stdHlwaW5nIgorICAgIHRyeToKKyAgICAgICAgaXRlcih0ZXN0KQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgX0RlYnVnUmVzdWx0KG9iamVjdCk6CisgICAgIlVzZWQgYnkgdGhlIFRlc3RTdWl0ZSB0byBob2xkIHByZXZpb3VzIGNsYXNzIHdoZW4gcnVubmluZyBpbiBkZWJ1Zy4iCisgICAgX3ByZXZpb3VzVGVzdENsYXNzID0gTm9uZQorICAgIF9tb2R1bGVTZXRVcEZhaWxlZCA9IEZhbHNlCisgICAgc2hvdWxkU3RvcCA9IEZhbHNlCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9fX2luaXRfXy5weSBiL0xpYi91bml0dGVzdC90ZXN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjczMGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIxIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2hlcmUgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCitsb2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgorCitkZWYgc3VpdGUoKToKKyAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgZm9yIGZuIGluIG9zLmxpc3RkaXIoaGVyZSk6CisgICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgZm4uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgbW9kbmFtZSA9ICJ1bml0dGVzdC50ZXN0LiIgKyBmbls6LTNdCisgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQorICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtb2R1bGUpKQorICAgIHJldHVybiBzdWl0ZQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbihkZWZhdWx0VGVzdD0ic3VpdGUiKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX3Rlc3Rfd2FybmluZ3MucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fdGVzdF93YXJuaW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGJlMThkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX3Rlc3Rfd2FybmluZ3MucHkKQEAgLTAsMCArMSw3NCBAQAorIyBoZWxwZXIgbW9kdWxlIGZvciB0ZXN0X3J1bm5lci5UZXN0X1RleHRUZXN0UnVubmVyLnRlc3Rfd2FybmluZ3MKKworIiIiCitUaGlzIG1vZHVsZSBoYXMgYSBudW1iZXIgb2YgdGVzdHMgdGhhdCByYWlzZSBkaWZmZXJlbnQga2luZHMgb2Ygd2FybmluZ3MuCitXaGVuIHRoZSB0ZXN0cyBhcmUgcnVuLCB0aGUgd2FybmluZ3MgYXJlIGNhdWdodCBhbmQgdGhlaXIgbWVzc2FnZXMgYXJlIHByaW50ZWQKK3RvIHN0ZG91dC4gIFRoaXMgbW9kdWxlIGFsc28gYWNjZXB0cyBhbiBhcmcgdGhhdCBpcyB0aGVuIHBhc3NlZCB0bwordW5pdHRlc3QubWFpbiB0byBhZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHdhcm5pbmdzLgorVGVzdF9UZXh0VGVzdFJ1bm5lci50ZXN0X3dhcm5pbmdzIGV4ZWN1dGVzIHRoaXMgc2NyaXB0IHdpdGggZGlmZmVyZW50Citjb21iaW5hdGlvbnMgb2Ygd2FybmluZ3MgYXJncyBhbmQgLVcgZmxhZ3MgYW5kIGNoZWNrIHRoYXQgdGhlIG91dHB1dCBpcyBjb3JyZWN0LgorU2VlICMxMDUzNS4KKyIiIgorCitpbXBvcnQgaW8KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKK2RlZiB3YXJuZnVuKCk6CisgICAgd2FybmluZ3Mud2FybigncncnLCBSdW50aW1lV2FybmluZykKKworY2xhc3MgVGVzdFdhcm5pbmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIHVuaXR0ZXN0IHdhcm5pbmdzIHdpbGwgYmUgcHJpbnRlZCBhdCBtb3N0IG9uY2UgcGVyIHR5cGUgKG1heCBvbmUgbWVzc2FnZQorICAgICMgZm9yIHRoZSBmYWlsKiBtZXRob2RzLCBhbmQgb25lIGZvciB0aGUgYXNzZXJ0KiBtZXRob2RzKQorICAgIGRlZiB0ZXN0X2Fzc2VydChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoMisyLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscygyKjIsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKDIqKjIsIDQpCisKKyAgICBkZWYgdGVzdF9mYWlsKHNlbGYpOgorICAgICAgICBzZWxmLmZhaWxVbmxlc3MoMSkKKyAgICAgICAgc2VsZi5mYWlsVW5sZXNzKFRydWUpCisKKyAgICBkZWYgdGVzdF9vdGhlcl91bml0dGVzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyKzIsIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoNCs0LCAyKQorCisgICAgIyB0aGVzZSB3YXJuaW5ncyBhcmUgbm9ybWFsbHkgc2lsZW5jZWQsIGJ1dCB0aGV5IGFyZSBwcmludGVkIGluIHVuaXR0ZXN0CisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2R3JywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB3YXJuaW5ncy53YXJuKCdkdycsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybignZHcnLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6CisgICAgICAgIHdhcm5pbmdzLndhcm4oJ2l3JywgSW1wb3J0V2FybmluZykKKyAgICAgICAgd2FybmluZ3Mud2FybignaXcnLCBJbXBvcnRXYXJuaW5nKQorICAgICAgICB3YXJuaW5ncy53YXJuKCdpdycsIEltcG9ydFdhcm5pbmcpCisKKyAgICAjIHVzZXIgd2FybmluZ3Mgc2hvdWxkIGFsd2F5cyBiZSBwcmludGVkCisgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgd2FybmluZ3Mud2FybigndXcnKQorICAgICAgICB3YXJuaW5ncy53YXJuKCd1dycpCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ3V3JykKKworICAgICMgdGhlc2Ugd2FybmluZ3MgY29tZSBmcm9tIHRoZSBzYW1lIHBsYWNlOyB0aGV5IHdpbGwgYmUgcHJpbnRlZAorICAgICMgb25seSBvbmNlIGJ5IGRlZmF1bHQgb3IgdGhyZWUgdGltZXMgaWYgdGhlICdhbHdheXMnIGZpbHRlciBpcyB1c2VkCisgICAgZGVmIHRlc3RfZnVuY3Rpb24oc2VsZik6CisKKyAgICAgICAgd2FybmZ1bigpCisgICAgICAgIHdhcm5mdW4oKQorICAgICAgICB3YXJuZnVuKCkKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgd3M6CisgICAgICAgICMgaWYgYW4gYXJnIGlzIHByb3ZpZGVkIHBhc3MgaXQgdG8gdW5pdHRlc3QubWFpbiBhcyAnd2FybmluZ3MnCisgICAgICAgIGlmIGxlbihzeXMuYXJndikgPT0gMjoKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1haW4oZXhpdD1GYWxzZSwgd2FybmluZ3M9c3lzLmFyZ3YucG9wKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UpCisKKyAgICAjIHByaW50IGFsbCB0aGUgd2FybmluZyBtZXNzYWdlcyBjb2xsZWN0ZWQKKyAgICBmb3IgdyBpbiB3czoKKyAgICAgICAgcHJpbnQody5tZXNzYWdlKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvZHVtbXkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9kdW1teS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGYxNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvZHVtbXkucHkKQEAgLTAsMCArMSBAQAorIyBFbXB0eSBtb2R1bGUgZm9yIHRlc3RpbmcgdGhlIGxvYWRpbmcgb2YgbW9kdWxlcwpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJlNGRkYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTAsMCArMSwxMTggQEAKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RFcXVhbGl0eShvYmplY3QpOgorICAgICIiIlVzZWQgYXMgYSBtaXhpbiBmb3IgVGVzdENhc2UiIiIKKworICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19lcV9fIGltcGxlbWVudGF0aW9uCisgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIGZvciBvYmpfMSwgb2JqXzIgaW4gc2VsZi5lcV9wYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqXzEsIG9ial8yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmpfMiwgb2JqXzEpCisKKyAgICAjIENoZWNrIGZvciBhIHZhbGlkIF9fbmVfXyBpbXBsZW1lbnRhdGlvbgorICAgIGRlZiB0ZXN0X25lKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYubmVfcGFpcnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG9ial8xLCBvYmpfMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2JqXzIsIG9ial8xKQorCitjbGFzcyBUZXN0SGFzaGluZyhvYmplY3QpOgorICAgICIiIlVzZWQgYXMgYSBtaXhpbiBmb3IgVGVzdENhc2UiIiIKKworICAgICMgQ2hlY2sgZm9yIGEgdmFsaWQgX19oYXNoX18gaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgorICAgICAgICBmb3Igb2JqXzEsIG9ial8yIGluIHNlbGYuZXFfcGFpcnM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbm90IGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVyIGFuZCAlciBkbyBub3QgaGFzaCBlcXVhbCIgJSAob2JqXzEsIG9ial8yKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVyIGFuZCAlcjogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCisKKyAgICAgICAgZm9yIG9ial8xLCBvYmpfMiBpbiBzZWxmLm5lX3BhaXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIGhhc2gob2JqXzEpID09IGhhc2gob2JqXzIpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzIGFuZCAlcyBoYXNoIGVxdWFsLCBidXQgc2hvdWxkbid0IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqXzEsIG9ial8yKSkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiUHJvYmxlbSBoYXNoaW5nICVzIGFuZCAlczogJXMiICUgKG9ial8xLCBvYmpfMiwgZSkpCisKKworY2xhc3MgTG9nZ2luZ1Jlc3VsdCh1bml0dGVzdC5UZXN0UmVzdWx0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9nKToKKyAgICAgICAgc2VsZi5fZXZlbnRzID0gbG9nCisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgZGVmIHN0YXJ0VGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RhcnRUZXN0JykKKyAgICAgICAgc3VwZXIoKS5zdGFydFRlc3QodGVzdCkKKworICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0b3BUZXN0JykKKyAgICAgICAgc3VwZXIoKS5zdG9wVGVzdCh0ZXN0KQorCisgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKworICAgIGRlZiBhZGRGYWlsdXJlKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRmFpbHVyZScpCisgICAgICAgIHN1cGVyKCkuYWRkRmFpbHVyZSgqYXJncykKKworICAgIGRlZiBhZGRTdWNjZXNzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkU3VjY2VzcycpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZFN1Y2Nlc3MoKmFyZ3MpCisKKyAgICBkZWYgYWRkRXJyb3Ioc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRFcnJvcicpCisgICAgICAgIHN1cGVyKCkuYWRkRXJyb3IoKmFyZ3MpCisKKyAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQorICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorCisgICAgZGVmIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEV4cGVjdGVkRmFpbHVyZScpCisgICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKKworICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKKyAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4ob2JqZWN0KToKKyAgICAiIiJBbiBvYmplY3QgaG9ub3VyaW5nIFRlc3RSZXN1bHQgYmVmb3JlIHN0YXJ0VGVzdFJ1bi9zdG9wVGVzdFJ1bi4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisgICAgICAgIHNlbGYuZXJyb3JzID0gW10KKyAgICAgICAgc2VsZi50ZXN0c1J1biA9IDAKKyAgICAgICAgc2VsZi5za2lwcGVkID0gW10KKyAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmVzID0gW10KKyAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzID0gW10KKyAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gRmFsc2UKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZEVycm9yKHNlbGYsIHRlc3QpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0KToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgdGVzdCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiB3YXNTdWNjZXNzZnVsKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTAsMCArMSwyODYgQEAKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X0Fzc2VydGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X0FsbW9zdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEuMDAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgxLjAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLCAxLjAwMDAwMDEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLCAxLjAwMDAwMDAxLCAxLjApCisKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjEsIDEuMCwgcGxhY2VzPTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwgMS4xLCAxLjAsIHBsYWNlcz0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgLjErLjFqLCBwbGFjZXM9MCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCgwLCAuMSsuMWosIHBsYWNlcz0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwsIDAsIC4xKy4xaiwgcGxhY2VzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RBbG1vc3RFcXVhbCwgMCwgLjErLjFqLCBwbGFjZXM9MCkKKworICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KCdpbmYnKSwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KCdpbmYnKSwgZmxvYXQoJ2luZicpKQorCisgICAgZGVmIHRlc3RfQW1vc3RFcXVhbFdpdGhEZWx0YShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxLjEsIDEuMCwgZGVsdGE9MC41KQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEuMCwgMS4xLCBkZWx0YT0wLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4xLCAxLjAsIGRlbHRhPTAuMDUpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMS4wLCAxLjEsIGRlbHRhPTAuMDUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgZGVsdGE9MC4wNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEFsbW9zdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLjEsIDEuMCwgZGVsdGE9MC41KQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMS4xLCAxLjAsIHBsYWNlcz0yLCBkZWx0YT0yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMSwgMS4wLCBwbGFjZXM9MiwgZGVsdGE9MikKKworICAgICAgICBmaXJzdCA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpCisgICAgICAgIHNlY29uZCA9IGZpcnN0ICsgZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1kYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz0yMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoZmlyc3QsIHNlY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1kYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz01KSkKKworICAgIGRlZiB0ZXN0X2Fzc2VydFJhaXNlcyhzZWxmKToKKyAgICAgICAgZGVmIF9yYWlzZShlKToKKyAgICAgICAgICAgIHJhaXNlIGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIF9yYWlzZSwgS2V5RXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBfcmFpc2UsIEtleUVycm9yKCJrZXkiKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGxhbWJkYTogTm9uZSkKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiS2V5RXJyb3Igbm90IHJhaXNlZCIsIHN0cihlKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGZhaWwiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgX3JhaXNlLCBWYWx1ZUVycm9yKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcikgYXMgY206CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICBleGMgPSBlCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjbS5leGNlcHRpb24sIGV4YykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJrZXkiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIktleUVycm9yIG5vdCByYWlzZWQiLCBzdHIoZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImFzc2VydFJhaXNlcygpIGRpZG4ndCBmYWlsIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90UmVnZXgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXgoJ0FsYSBtYSBrb3RhJywgcidyKycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXgoJ0FsYSBtYSBrb3RhJywgcidrLnQnLCAnTWVzc2FnZScpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidrb3QnIiwgZS5hcmdzWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTWVzc2FnZScsIGUuYXJnc1swXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0Tm90UmVnZXggc2hvdWxkIGhhdmUgZmFpbGVkLicpCisKKworY2xhc3MgVGVzdExvbmdNZXNzYWdlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgdGhlIGluZGl2aWR1YWwgYXNzZXJ0cyBob25vdXIgbG9uZ01lc3NhZ2UuCisgICAgVGhpcyBhY3R1YWxseSB0ZXN0cyBhbGwgdGhlIG1lc3NhZ2UgYmVoYXZpb3VyIGZvcgorICAgIGFzc2VydHMgdGhhdCB1c2UgbG9uZ01lc3NhZ2UuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdEZhbHNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGxvbmdNZXNzYWdlID0gRmFsc2UKKyAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBzZWxmLmZhaWx1cmVFeGNlcHRpb24KKworICAgICAgICAgICAgZGVmIHRlc3RUZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3RUcnVlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGxvbmdNZXNzYWdlID0gVHJ1ZQorICAgICAgICAgICAgZmFpbHVyZUV4Y2VwdGlvbiA9IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbgorCisgICAgICAgICAgICBkZWYgdGVzdFRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYudGVzdGFibGVUcnVlID0gVGVzdGFibGVUZXN0VHJ1ZSgndGVzdFRlc3QnKQorICAgICAgICBzZWxmLnRlc3RhYmxlRmFsc2UgPSBUZXN0YWJsZVRlc3RGYWxzZSgndGVzdFRlc3QnKQorCisgICAgZGVmIHRlc3REZWZhdWx0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUodW5pdHRlc3QuVGVzdENhc2UubG9uZ01lc3NhZ2UpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNc2coc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKE5vbmUsICJmb28iKSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZUZhbHNlLl9mb3JtYXRNZXNzYWdlKCJmb28iLCAiYmFyIiksICJmb28iKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2UoTm9uZSwgImZvbyIpLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZSgiZm9vIiwgImJhciIpLCAiYmFyIDogZm9vIikKKworICAgICAgICAjIFRoaXMgYmxvd3MgdXAgaWYgX2Zvcm1hdE1lc3NhZ2UgdXNlcyBzdHJpbmcgY29uY2F0ZW5hdGlvbgorICAgICAgICBzZWxmLnRlc3RhYmxlVHJ1ZS5fZm9ybWF0TWVzc2FnZShvYmplY3QoKSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRNZXNzYWdlX3VuaWNvZGVfZXJyb3Ioc2VsZik6CisgICAgICAgIG9uZSA9ICcnLmpvaW4oY2hyKGkpIGZvciBpIGluIHJhbmdlKDI1NSkpCisgICAgICAgICMgdGhpcyB1c2VkIHRvIGNhdXNlIGEgVW5pY29kZURlY29kZUVycm9yIGNvbnN0cnVjdGluZyBtc2cKKyAgICAgICAgc2VsZi50ZXN0YWJsZVRydWUuX2Zvcm1hdE1lc3NhZ2Uob25lLCAnXHVGRkZEJykKKworICAgIGRlZiBhc3NlcnRNZXNzYWdlcyhzZWxmLCBtZXRob2ROYW1lLCBhcmdzLCBlcnJvcnMpOgorICAgICAgICBkZWYgZ2V0TWV0aG9kKGkpOgorICAgICAgICAgICAgdXNlVGVzdGFibGVGYWxzZSAgPSBpIDwgMgorICAgICAgICAgICAgaWYgdXNlVGVzdGFibGVGYWxzZToKKyAgICAgICAgICAgICAgICB0ZXN0ID0gc2VsZi50ZXN0YWJsZUZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHRlc3QgPSBzZWxmLnRlc3RhYmxlVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIodGVzdCwgbWV0aG9kTmFtZSkKKworICAgICAgICBmb3IgaSwgZXhwZWN0ZWRfcmVnZXggaW4gZW51bWVyYXRlKGVycm9ycyk6CisgICAgICAgICAgICB0ZXN0TWV0aG9kID0gZ2V0TWV0aG9kKGkpCisgICAgICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICAgICAgd2l0aE1zZyA9IGkgJSAyCisgICAgICAgICAgICBpZiB3aXRoTXNnOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IHsibXNnIjogIm9vcHMifQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4PWV4cGVjdGVkX3JlZ2V4KToKKyAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiB0ZXN0QXNzZXJ0VHJ1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0VHJ1ZScsIChGYWxzZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXkZhbHNlIGlzIG5vdCB0cnVlJCIsICJeb29wcyQiLCAiXkZhbHNlIGlzIG5vdCB0cnVlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeRmFsc2UgaXMgbm90IHRydWUgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRGYWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0RmFsc2UnLCAoVHJ1ZSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXlRydWUgaXMgbm90IGZhbHNlJCIsICJeb29wcyQiLCAiXlRydWUgaXMgbm90IGZhbHNlJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeVHJ1ZSBpcyBub3QgZmFsc2UgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3ROb3RFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0Tm90RXF1YWwnLCAoMSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSA9PSAxJCIsICJeb29wcyQiLCAiXjEgPT0gMSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgPT0gMSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFsbW9zdEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRBbG1vc3RFcXVhbCcsICgxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgIT0gMiB3aXRoaW4gNyBwbGFjZXMkIiwgIl4xICE9IDIgd2l0aGluIDcgcGxhY2VzIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0Tm90QWxtb3N0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydE5vdEFsbW9zdEVxdWFsJywgKDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSA9PSAxIHdpdGhpbiA3IHBsYWNlcyQiLCAiXjEgPT0gMSB3aXRoaW4gNyBwbGFjZXMgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RfYmFzZUFzc2VydEVxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdfYmFzZUFzc2VydEVxdWFsJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgIT0gMiQiLCAiXm9vcHMkIiwgIl4xICE9IDIkIiwgIl4xICE9IDIgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXF1ZW5jZUVxdWFsKHNlbGYpOgorICAgICAgICAjIEVycm9yIG1lc3NhZ2VzIGFyZSBtdWx0aWxpbmUgc28gbm90IHRlc3Rpbmcgb24gZnVsbCBtZXNzYWdlCisgICAgICAgICMgYXNzZXJ0VHVwbGVFcXVhbCBhbmQgYXNzZXJ0TGlzdEVxdWFsIGRlbGVnYXRlIHRvIHRoaXMgbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNlcXVlbmNlRXF1YWwnLCAoW10sIFtOb25lXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJcKyBcW05vbmVcXSQiLCAiXm9vcHMkIiwgciJcKyBcW05vbmVcXSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIlwrIFxbTm9uZVxdIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0U2V0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydFNldEVxdWFsJywgKHNldCgpLCBzZXQoW05vbmVdKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJOb25lJCIsICJeb29wcyQiLCAiTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRJbicsIChOb25lLCBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWydeTm9uZSBub3QgZm91bmQgaW4gXFtcXSQnLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ15Ob25lIG5vdCBmb3VuZCBpbiBcW1xdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSBub3QgZm91bmQgaW4gXFtcXSA6IG9vcHMkJ10pCisKKyAgICBkZWYgdGVzdEFzc2VydE5vdEluKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnROb3RJbicsIChOb25lLCBbTm9uZV0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXk5vbmUgdW5leHBlY3RlZGx5IGZvdW5kIGluIFxbTm9uZVxdJCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdeTm9uZSB1bmV4cGVjdGVkbHkgZm91bmQgaW4gXFtOb25lXF0gOiBvb3BzJCddKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0RXF1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydERpY3RFcXVhbCcsICh7fSwgeydrZXknOiAndmFsdWUnfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3IiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCsgXHsna2V5JzogJ3ZhbHVlJ1x9JCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcKyBceydrZXknOiAndmFsdWUnXH0gOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnREaWN0Q29udGFpbnNTdWJzZXQnLCAoeydrZXknOiAndmFsdWUnfSwge30pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl5NaXNzaW5nOiAna2V5JyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTWlzc2luZzogJ2tleSckIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeTWlzc2luZzogJ2tleScgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRNdWx0aUxpbmVFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0TXVsdGlMaW5lRXF1YWwnLCAoIiIsICJmb28iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbciJcKyBmb28kIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXCsgZm9vJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiXCsgZm9vIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TGVzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0TGVzcycsICgyLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl4yIG5vdCBsZXNzIHRoYW4gMSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4yIG5vdCBsZXNzIHRoYW4gMSQiLCAiXjIgbm90IGxlc3MgdGhhbiAxIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TGVzc0VxdWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE1lc3NhZ2VzKCdhc3NlcnRMZXNzRXF1YWwnLCAoMiwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMiBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMiBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4yIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEdyZWF0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydEdyZWF0ZXInLCAoMSwgMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeMSBub3QgZ3JlYXRlciB0aGFuIDIkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIDIkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4xIG5vdCBncmVhdGVyIHRoYW4gMiA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydEdyZWF0ZXJFcXVhbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0R3JlYXRlckVxdWFsJywgKDEsIDIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXjEgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyJCIsICJeb29wcyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXjEgbm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeMSBub3QgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDIgOiBvb3BzJCJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRJc05vbmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydElzTm9uZScsICgnbm90IE5vbmUnLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJeJ25vdCBOb25lJyBpcyBub3QgTm9uZSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl4nbm90IE5vbmUnIGlzIG5vdCBOb25lJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJeJ25vdCBOb25lJyBpcyBub3QgTm9uZSA6IG9vcHMkIl0pCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm90Tm9uZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRNZXNzYWdlcygnYXNzZXJ0SXNOb3ROb25lJywgKE5vbmUsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl51bmV4cGVjdGVkbHkgTm9uZSQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl51bmV4cGVjdGVkbHkgTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBOb25lIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydElzJywgKE5vbmUsICdmb28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIl5Ob25lIGlzIG5vdCAnZm9vJyQiLCAiXm9vcHMkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl5Ob25lIGlzIG5vdCAnZm9vJyQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXk5vbmUgaXMgbm90ICdmb28nIDogb29wcyQiXSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb3Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TWVzc2FnZXMoJ2Fzc2VydElzTm90JywgKE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiXnVuZXhwZWN0ZWRseSBpZGVudGljYWw6IE5vbmUkIiwgIl5vb3BzJCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJedW5leHBlY3RlZGx5IGlkZW50aWNhbDogTm9uZSQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXnVuZXhwZWN0ZWRseSBpZGVudGljYWw6IE5vbmUgOiBvb3BzJCJdKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdjZTIwMQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKQEAgLTAsMCArMSwyNTIgQEAKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCB3ZWFrcmVmCisKK2ltcG9ydCB1bml0dGVzdAorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdraWxsJyksICJUZXN0IHJlcXVpcmVzIG9zLmtpbGwiKQorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0id2luMzIiLCAiVGVzdCBjYW5ub3QgcnVuIG9uIFdpbmRvd3MiKQorQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gJ2ZyZWVic2Q2JywgIlRlc3Qga2lsbHMgcmVncnRlc3Qgb24gZnJlZWJzZDYgIgorICAgICJpZiB0aHJlYWRzIGhhdmUgYmVlbiB1c2VkIikKK2NsYXNzIFRlc3RCcmVhayh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHSU5ULCBzZWxmLl9kZWZhdWx0X2hhbmRsZXIpCisgICAgICAgIHVuaXR0ZXN0LnNpZ25hbHMuX3Jlc3VsdHMgPSB3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5KCkKKyAgICAgICAgdW5pdHRlc3Quc2lnbmFscy5faW50ZXJydXB0X2hhbmRsZXIgPSBOb25lCisKKworICAgIGRlZiB0ZXN0SW5zdGFsbEhhbmRsZXIoc2VsZik6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IGhhbmRsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bml0dGVzdC5zaWduYWxzLl9pbnRlcnJ1cHRfaGFuZGxlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdFJlZ2lzdGVyUmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorCisgICAgICAgIGZvciByZWYgaW4gdW5pdHRlc3Quc2lnbmFscy5fcmVzdWx0czoKKyAgICAgICAgICAgIGlmIHJlZiBpcyByZXN1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsaWYgcmVmIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJvZGQgb2JqZWN0IGluIHJlc3VsdCBzZXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgbm90IGZvdW5kIikKKworCisgICAgZGVmIHRlc3RJbnRlcnJ1cHRDYXVnaHQoc2VsZik6CisgICAgICAgIGRlZmF1bHRfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHJlc3VsdC5icmVha0NhdWdodCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc2hvdWxkU3RvcCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0KHJlc3VsdCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCJLZXlib2FyZEludGVycnVwdCBub3QgaGFuZGxlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuYnJlYWtDYXVnaHQpCisKKworICAgIGRlZiB0ZXN0U2Vjb25kSW50ZXJydXB0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXIoKQorICAgICAgICB1bml0dGVzdC5yZWdpc3RlclJlc3VsdChyZXN1bHQpCisKKyAgICAgICAgZGVmIHRlc3QocmVzdWx0KToKKyAgICAgICAgICAgIHBpZCA9IG9zLmdldHBpZCgpCisgICAgICAgICAgICBvcy5raWxsKHBpZCwgc2lnbmFsLlNJR0lOVCkKKyAgICAgICAgICAgIHJlc3VsdC5icmVha0NhdWdodCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc2hvdWxkU3RvcCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJTZWNvbmQgS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IHJhaXNlZCIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2Vjb25kIEtleWJvYXJkSW50ZXJydXB0IG5vdCByYWlzZWQiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmJyZWFrQ2F1Z2h0KQorCisKKyAgICBkZWYgdGVzdFR3b1Jlc3VsdHMoc2VsZik6CisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorICAgICAgICBuZXdfaGFuZGxlciA9IHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCkKKworICAgICAgICByZXN1bHQyID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHVuaXR0ZXN0LnJlZ2lzdGVyUmVzdWx0KHJlc3VsdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgbmV3X2hhbmRsZXIpCisKKyAgICAgICAgcmVzdWx0MyA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIGRlZiB0ZXN0KHJlc3VsdCk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdChyZXN1bHQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiS2V5Ym9hcmRJbnRlcnJ1cHQgbm90IGhhbmRsZWQiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuc2hvdWxkU3RvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdDIuc2hvdWxkU3RvcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQzLnNob3VsZFN0b3ApCisKKworICAgIGRlZiB0ZXN0SGFuZGxlclJlcGxhY2VkQnV0Q2FsbGVkKHNlbGYpOgorICAgICAgICAjIElmIG91ciBoYW5kbGVyIGhhcyBiZWVuIHJlcGxhY2VkIChpcyBubyBsb25nZXIgaW5zdGFsbGVkKSBidXQgaXMKKyAgICAgICAgIyBjYWxsZWQgYnkgdGhlICpuZXcqIGhhbmRsZXIsIHRoZW4gaXQgaXNuJ3Qgc2FmZSB0byBkZWxheSB0aGUKKyAgICAgICAgIyBTSUdJTlQgYW5kIHdlIHNob3VsZCBpbW1lZGlhdGVseSBkZWxlZ2F0ZSB0byB0aGUgZGVmYXVsdCBoYW5kbGVyCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKworICAgICAgICBoYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICBkZWYgbmV3X2hhbmRsZXIoZnJhbWUsIHNpZ251bSk6CisgICAgICAgICAgICBoYW5kbGVyKGZyYW1lLCBzaWdudW0pCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0lOVCwgbmV3X2hhbmRsZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKKyAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlcGxhY2VkIGJ1dCBkZWxlZ2F0ZWQgaGFuZGxlciBkb2Vzbid0IHJhaXNlIGludGVycnVwdCIpCisKKyAgICBkZWYgdGVzdFJ1bm5lcihzZWxmKToKKyAgICAgICAgIyBDcmVhdGluZyBhIFRleHRUZXN0UnVubmVyIHdpdGggdGhlIGFwcHJvcHJpYXRlIGFyZ3VtZW50IHNob3VsZAorICAgICAgICAjIHJlZ2lzdGVyIHRoZSBUZXh0VGVzdFJlc3VsdCBpdCBjcmVhdGVzCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpKQorCisgICAgICAgIHJlc3VsdCA9IHJ1bm5lci5ydW4odW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0LCB1bml0dGVzdC5zaWduYWxzLl9yZXN1bHRzKQorCisgICAgZGVmIHRlc3RXZWFrUmVmZXJlbmNlcyhzZWxmKToKKyAgICAgICAgIyBDYWxsaW5nIHJlZ2lzdGVyUmVzdWx0IG9uIGEgcmVzdWx0IHNob3VsZCBub3Qga2VlcCBpdCBhbGl2ZQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHJlc3VsdCkKKyAgICAgICAgZGVsIHJlc3VsdAorCisgICAgICAgICMgRm9yIG5vbi1yZWZlcmVuY2UgY291bnRpbmcgaW1wbGVtZW50YXRpb25zCisgICAgICAgIGdjLmNvbGxlY3QoKTtnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVmKCkpCisKKworICAgIGRlZiB0ZXN0UmVtb3ZlUmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdW5pdHRlc3QucmVnaXN0ZXJSZXN1bHQocmVzdWx0KQorCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHVuaXR0ZXN0LnJlbW92ZVJlc3VsdChyZXN1bHQpKQorCisgICAgICAgICMgU2hvdWxkIHRoaXMgcmFpc2UgYW4gZXJyb3IgaW5zdGVhZD8KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh1bml0dGVzdC5yZW1vdmVSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCgpKSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQgPSBvcy5nZXRwaWQoKQorICAgICAgICAgICAgb3Mua2lsbChwaWQsIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgZGVmIHRlc3RNYWluSW5zdGFsbHNIYW5kbGVyKHNlbGYpOgorICAgICAgICBmYWlsZmFzdCA9IG9iamVjdCgpCisgICAgICAgIHRlc3QgPSBvYmplY3QoKQorICAgICAgICB2ZXJib3NpdHkgPSBvYmplY3QoKQorICAgICAgICByZXN1bHQgPSBvYmplY3QoKQorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisKKyAgICAgICAgY2xhc3MgRmFrZVJ1bm5lcihvYmplY3QpOgorICAgICAgICAgICAgaW5pdEFyZ3MgPSBbXQorICAgICAgICAgICAgcnVuQXJncyA9IFtdCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzZWxmLmluaXRBcmdzLmFwcGVuZCgoYXJncywga3dhcmdzKSkKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZiwgdGVzdCk6CisgICAgICAgICAgICAgICAgc2VsZi5ydW5BcmdzLmFwcGVuZCh0ZXN0KQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICBjbGFzcyBQcm9ncmFtKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYXRjaGJyZWFrKToKKyAgICAgICAgICAgICAgICBzZWxmLmV4aXQgPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gdmVyYm9zaXR5CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IGZhaWxmYXN0CisgICAgICAgICAgICAgICAgc2VsZi5jYXRjaGJyZWFrID0gY2F0Y2hicmVhaworICAgICAgICAgICAgICAgIHNlbGYudGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgICAgICAgICBzZWxmLnRlc3QgPSB0ZXN0CisgICAgICAgICAgICAgICAgc2VsZi5yZXN1bHQgPSBOb25lCisKKyAgICAgICAgcCA9IFByb2dyYW0oRmFsc2UpCisgICAgICAgIHAucnVuVGVzdHMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywgWygoKSwgeydidWZmZXInOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyYm9zaXR5JzogdmVyYm9zaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmFpbGZhc3QnOiBmYWlsZmFzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzJzogTm9uZX0pXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnJ1bkFyZ3MsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlc3VsdCwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQorCisgICAgICAgIEZha2VSdW5uZXIuaW5pdEFyZ3MgPSBbXQorICAgICAgICBGYWtlUnVubmVyLnJ1bkFyZ3MgPSBbXQorICAgICAgICBwID0gUHJvZ3JhbShUcnVlKQorICAgICAgICBwLnJ1blRlc3RzKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIuaW5pdEFyZ3MsIFsoKCksIHsnYnVmZmVyJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlcmJvc2l0eSc6IHZlcmJvc2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWxmYXN0JzogZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5ncyc6IE5vbmV9KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5ydW5BcmdzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXN1bHQsIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgIGRlZiB0ZXN0UmVtb3ZlSGFuZGxlcihzZWxmKToKKyAgICAgICAgZGVmYXVsdF9oYW5kbGVyID0gc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKQorICAgICAgICB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcigpCisgICAgICAgIHVuaXR0ZXN0LnJlbW92ZUhhbmRsZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgICAgICAjIGNoZWNrIHRoYXQgY2FsbGluZyByZW1vdmVIYW5kbGVyIG11bHRpcGxlIHRpbWVzIGhhcyBubyBpbGwtZWZmZWN0CisgICAgICAgIHVuaXR0ZXN0LnJlbW92ZUhhbmRsZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hbC5nZXRzaWduYWwoc2lnbmFsLlNJR0lOVCksIGRlZmF1bHRfaGFuZGxlcikKKworICAgIGRlZiB0ZXN0UmVtb3ZlSGFuZGxlckFzRGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBkZWZhdWx0X2hhbmRsZXIgPSBzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHVuaXR0ZXN0Lmluc3RhbGxIYW5kbGVyKCkKKworICAgICAgICBAdW5pdHRlc3QucmVtb3ZlSGFuZGxlcgorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLCBkZWZhdWx0X2hhbmRsZXIpCisKKyAgICAgICAgdGVzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2lnbmFsLmdldHNpZ25hbChzaWduYWwuU0lHSU5UKSwgZGVmYXVsdF9oYW5kbGVyKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NGE1MzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKQEAgLTAsMCArMSwxMjcwIEBACitpbXBvcnQgZGlmZmxpYgoraW1wb3J0IHBwcmludAoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKK2ltcG9ydCBpbnNwZWN0CisKK2Zyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgKAorICAgIFRlc3RFcXVhbGl0eSwgVGVzdEhhc2hpbmcsIExvZ2dpbmdSZXN1bHQsCisgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KKykKKworCitjbGFzcyBUZXN0KG9iamVjdCk6CisgICAgIktlZXAgdGhlc2UgVGVzdENhc2UgY2xhc3NlcyBvdXQgb2YgdGhlIG1haW4gbmFtZXNwYWNlIgorCisgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisKKyAgICBjbGFzcyBCYXIoRm9vKToKKyAgICAgICAgZGVmIHRlc3QyKHNlbGYpOiBwYXNzCisKKyAgICBjbGFzcyBMb2dnaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAiIiJBIHRlc3QgY2FzZSB3aGljaCBsb2dzIGl0cyBjYWxscy4iIiIKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKKyAgICAgICAgICAgIHN1cGVyKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlLCBzZWxmKS5fX2luaXRfXygndGVzdCcpCisgICAgICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5ldmVudHMuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICBzZWxmLmV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKworCitjbGFzcyBUZXN0X1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlLCBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nKToKKworICAgICMjIyBTZXQgdXAgYXR0cmlidXRlcyB1c2VkIGJ5IGluaGVyaXRlZCB0ZXN0cworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgVXNlZCBieSBUZXN0SGFzaGluZy50ZXN0X2hhc2ggYW5kIFRlc3RFcXVhbGl0eS50ZXN0X2VxCisgICAgZXFfcGFpcnMgPSBbKFRlc3QuRm9vKCd0ZXN0MScpLCBUZXN0LkZvbygndGVzdDEnKSldCisKKyAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfbmUKKyAgICBuZV9wYWlycyA9IFsoVGVzdC5Gb28oJ3Rlc3QxJyksIFRlc3QuRm9vKCdydW5UZXN0JykpLAorICAgICAgICAgICAgICAgIChUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5CYXIoJ3Rlc3QxJykpLAorICAgICAgICAgICAgICAgIChUZXN0LkZvbygndGVzdDEnKSwgVGVzdC5CYXIoJ3Rlc3QyJykpXQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvU2V0IHVwIGF0dHJpYnV0ZXMgdXNlZCBieSBpbmhlcml0ZWQgdGVzdHMKKworCisgICAgIyAiY2xhc3MgVGVzdENhc2UoW21ldGhvZE5hbWVdKSIKKyAgICAjIC4uLgorICAgICMgIkVhY2ggaW5zdGFuY2Ugb2YgVGVzdENhc2Ugd2lsbCBydW4gYSBzaW5nbGUgdGVzdCBtZXRob2Q6IHRoZQorICAgICMgbWV0aG9kIG5hbWVkIG1ldGhvZE5hbWUuIgorICAgICMgLi4uCisgICAgIyAibWV0aG9kTmFtZSBkZWZhdWx0cyB0byAicnVuVGVzdCIuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb3B0aW9uYWwsIGFuZCB0aGF0IGl0IGRlZmF1bHRzIHRvIHRoZSBwcm9wZXIKKyAgICAjIHRoaW5nLgorICAgIGRlZiB0ZXN0X2luaXRfX25vX3Rlc3RfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgTXlFeGNlcHRpb24oKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoKS5pZCgpWy0xMzpdLCAnLlRlc3QucnVuVGVzdCcpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgVGVzdENhc2UgY2FuIGJlIGluc3RhbnRpYXRlZCB3aXRoIG5vIGFyZ3MKKyAgICAgICAgIyBwcmltYXJpbHkgZm9yIHVzZSBhdCB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCkKKyAgICAgICAgdGVzdC5hc3NlcnRFcXVhbCgzLCAzKQorICAgICAgICB3aXRoIHRlc3QuYXNzZXJ0UmFpc2VzKHRlc3QuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICB0ZXN0LmFzc2VydEVxdWFsKDMsIDIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICB0ZXN0LnJ1bigpCisKKyAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgorICAgICMgLi4uCisgICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCisgICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCisgICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX192YWxpZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKTogcmFpc2UgTXlFeGNlcHRpb24oKQorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QoJ3Rlc3QnKS5pZCgpWy0xMDpdLCAnLlRlc3QudGVzdCcpCisKKyAgICAjICJjbGFzcyBUZXN0Q2FzZShbbWV0aG9kTmFtZV0pIgorICAgICMgLi4uCisgICAgIyAiRWFjaCBpbnN0YW5jZSBvZiBUZXN0Q2FzZSB3aWxsIHJ1biBhIHNpbmdsZSB0ZXN0IG1ldGhvZDogdGhlCisgICAgIyBtZXRob2QgbmFtZWQgbWV0aG9kTmFtZS4iCisgICAgZGVmIHRlc3RfaW5pdF9fdGVzdF9uYW1lX19pbnZhbGlkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiByYWlzZSBNeUV4Y2VwdGlvbigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIFRlc3QoJ3Rlc3Rmb28nKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuIEZvcgorICAgICMgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIDEiCisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vKCd0ZXN0JykuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICMgIlJldHVybiB0aGUgZGVmYXVsdCB0eXBlIG9mIHRlc3QgcmVzdWx0IG9iamVjdCB0byBiZSB1c2VkIHRvIHJ1biB0aGlzCisgICAgIyB0ZXN0LiBGb3IgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlCisgICAgIyB1bml0dGVzdC5UZXN0UmVzdWx0OyAgc3ViY2xhc3NlcyBvZiBUZXN0Q2FzZSBzaG91bGQKKyAgICAjIG92ZXJyaWRlIHRoaXMgYXMgbmVjZXNzYXJ5LiIKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBGb28oKS5kZWZhdWx0VGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCB1bml0dGVzdC5UZXN0UmVzdWx0KQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiBzZXRVcCgpIHJhaXNlcworICAgICMgYW4gZXhjZXB0aW9uLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl9zZXRVcChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQorCisgICAgICAgIEZvbyhldmVudHMpLnJ1bihyZXN1bHQpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaXRoIGEgdGVtcG9yYXJ5IHJlc3VsdCBzdG9wVGVzdFJ1biBpcyBjYWxsZWQgd2hlbiBzZXRVcCBlcnJvcnMuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3NldFVwX2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisKKyAgICAgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnNldFVwKCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28uc2V0VXAnKQorCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3RSdW4nLCAnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCByYWlzZXMKKyAgICAjIGFuIGVycm9yIChhcyBvcHBvc2VkIHRvIGEgZmFpbHVyZSkuCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaXRoIGEgZGVmYXVsdCByZXN1bHQsIGFuIGVycm9yIGluIHRoZSB0ZXN0IHN0aWxsIHJlc3VsdHMgaW4gc3RvcFRlc3RSdW4KKyAgICAjIGJlaW5nIGNhbGxlZC4iCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3Rlc3RfZGVmYXVsdF9yZXN1bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0VGVzdFJlc3VsdChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTG9nZ2luZ1Jlc3VsdChzZWxmLmV2ZW50cykKKworICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsCisgICAgICAgICAgICAgICAgICAgICd0ZWFyRG93bicsICdhZGRFcnJvcicsICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIEZvbyhldmVudHMpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3Qgc2lnbmFscworICAgICMgYSBmYWlsdXJlIChhcyBvcHBvc2VkIHRvIGFuIGVycm9yKS4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3JhaXNlZCBieSBGb28udGVzdCcpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgdGVzdCBmYWlscyB3aXRoIGEgZGVmYXVsdCByZXN1bHQgc3RvcFRlc3RSdW4gaXMgc3RpbGwgY2FsbGVkLiIKKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZmFpbHVyZV9pbl90ZXN0X2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgncmFpc2VkIGJ5IEZvby50ZXN0JykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duJywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnLCAnc3RvcFRlc3RSdW4nXQorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJXaGVuIGEgc2V0VXAoKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgcnVuIHRoYXQgbWV0aG9kCisgICAgIyBwcmlvciB0byBlYWNoIHRlc3QuIExpa2V3aXNlLCBpZiBhIHRlYXJEb3duKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZQorICAgICMgdGVzdCBydW5uZXIgd2lsbCBpbnZva2UgdGhhdCBtZXRob2QgYWZ0ZXIgZWFjaCB0ZXN0LiBJbiB0aGUgZXhhbXBsZSwKKyAgICAjIHNldFVwKCkgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2ggdGVzdC4iCisgICAgIworICAgICMgTWFrZSBzdXJlIHRoZSBwcm9wZXIgY2FsbCBvcmRlciBpcyBtYWludGFpbmVkLCBldmVuIGlmIHRlYXJEb3duKCkgcmFpc2VzCisgICAgIyBhbiBleGNlcHRpb24uCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVhckRvd24oKQorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IEZvby50ZWFyRG93bicpCisKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2FkZEVycm9yJywKKyAgICAgICAgICAgICAgICAgICAgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiB0ZWFyRG93biBlcnJvcnMgd2l0aCBhIGRlZmF1bHQgcmVzdWx0IHN0b3BUZXN0UnVuIGlzIHN0aWxsIGNhbGxlZC4iCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX2Vycm9yX2luX3RlYXJEb3duX2RlZmF1bHRfcmVzdWx0KHNlbGYpOgorCisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoc2VsZi5ldmVudHMpCisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZWFyRG93bigpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgRm9vLnRlYXJEb3duJykKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4oKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0UnVuJywgJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZEVycm9yJywgJ3N0b3BUZXN0JywgJ3N0b3BUZXN0UnVuJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiVGVzdENhc2UucnVuKCkgc3RpbGwgd29ya3Mgd2hlbiB0aGUgZGVmYXVsdFRlc3RSZXN1bHQgaXMgYSBUZXN0UmVzdWx0CisgICAgIyB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc3RhcnRUZXN0UnVuIGFuZCBzdG9wVGVzdFJ1bi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9kZWZhdWx0X3Jlc3VsdChzZWxmKToKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGRlZmF1bHRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bigpCisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKKworICAgICMgIlRoaXMgY2xhc3MgYXR0cmlidXRlIGdpdmVzIHRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoZSB0ZXN0KCkgbWV0aG9kLgorICAgICMgSWYgYSB0ZXN0IGZyYW1ld29yayBuZWVkcyB0byB1c2UgYSBzcGVjaWFsaXplZCBleGNlcHRpb24sIHBvc3NpYmx5IHRvCisgICAgIyBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLCBpdCBtdXN0IHN1YmNsYXNzIHRoaXMgZXhjZXB0aW9uIGluCisgICAgIyBvcmRlciB0byBgYHBsYXkgZmFpcicnIHdpdGggdGhlIGZyYW1ld29yay4gIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoaXMKKyAgICAjIGF0dHJpYnV0ZSBpcyBBc3NlcnRpb25FcnJvciIKKyAgICBkZWYgdGVzdF9mYWlsdXJlRXhjZXB0aW9uX19kZWZhdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShGb28oJ3Rlc3QnKS5mYWlsdXJlRXhjZXB0aW9uIGlzIEFzc2VydGlvbkVycm9yKQorCisgICAgIyAiVGhpcyBjbGFzcyBhdHRyaWJ1dGUgZ2l2ZXMgdGhlIGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhlIHRlc3QoKSBtZXRob2QuCisgICAgIyBJZiBhIHRlc3QgZnJhbWV3b3JrIG5lZWRzIHRvIHVzZSBhIHNwZWNpYWxpemVkIGV4Y2VwdGlvbiwgcG9zc2libHkgdG8KKyAgICAjIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIGl0IG11c3Qgc3ViY2xhc3MgdGhpcyBleGNlcHRpb24gaW4KKyAgICAjIG9yZGVyIHRvIGBgcGxheSBmYWlyJycgd2l0aCB0aGUgZnJhbWV3b3JrLiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgVGVzdENhc2UucnVuKCkgcmVzcGVjdHMgdGhlIGRlc2lnbmF0ZWQgZmFpbHVyZUV4Y2VwdGlvbgorICAgIGRlZiB0ZXN0X2ZhaWx1cmVFeGNlcHRpb25fX3N1YmNsYXNzaW5nX19leHBsaWNpdF9yYWlzZShzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgICAgIGZhaWx1cmVFeGNlcHRpb24gPSBSdW50aW1lRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoRm9vKCd0ZXN0JykuZmFpbHVyZUV4Y2VwdGlvbiBpcyBSdW50aW1lRXJyb3IpCisKKworICAgICAgICBGb28oJ3Rlc3QnKS5ydW4ocmVzdWx0KQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KKyAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bworICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgorICAgICMgb3JkZXIgdG8gYGBwbGF5IGZhaXInJyB3aXRoIHRoZSBmcmFtZXdvcmsuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBUZXN0Q2FzZS5ydW4oKSByZXNwZWN0cyB0aGUgZGVzaWduYXRlZCBmYWlsdXJlRXhjZXB0aW9uCisgICAgZGVmIHRlc3RfZmFpbHVyZUV4Y2VwdGlvbl9fc3ViY2xhc3NpbmdfX2ltcGxpY2l0X3JhaXNlKHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJmb28iKQorCisgICAgICAgICAgICBmYWlsdXJlRXhjZXB0aW9uID0gUnVudGltZUVycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZvbygndGVzdCcpLmZhaWx1cmVFeGNlcHRpb24gaXMgUnVudGltZUVycm9yKQorCisKKyAgICAgICAgRm9vKCd0ZXN0JykucnVuKHJlc3VsdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIC4uLiBhbmQgbm90aGluZyBzaG91bGQgaGFwcGVuCisgICAgICAgIEZvbygpLnNldFVwKCkKKworICAgICMgIlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4iCisgICAgZGVmIHRlc3RfdGVhckRvd24oc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyAuLi4gYW5kIG5vdGhpbmcgc2hvdWxkIGhhcHBlbgorICAgICAgICBGb28oKS50ZWFyRG93bigpCisKKyAgICAjICJSZXR1cm4gYSBzdHJpbmcgaWRlbnRpZnlpbmcgdGhlIHNwZWNpZmljIHRlc3QgY2FzZS4iCisgICAgIworICAgICMgQmVjYXVzZSBvZiB0aGUgdmFndWUgbmF0dXJlIG9mIHRoZSBkb2NzLCBJJ20gbm90IGdvaW5nIHRvIGxvY2sgdGhpcworICAgICMgdGVzdCBkb3duIHRvbyBtdWNoLiBSZWFsbHkgYWxsIHRoYXQgY2FuIGJlIGFzc2VydGVkIGlzIHRoYXQgdGhlIGlkKCkKKyAgICAjIHdpbGwgYmUgYSBzdHJpbmcgKGVpdGhlciA4LWJ5dGUgb3IgdW5pY29kZSAtLSBhZ2FpbiwgYmVjYXVzZSB0aGUgZG9jcworICAgICMganVzdCBzYXkgInN0cmluZyIpCisgICAgZGVmIHRlc3RfaWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKEZvbygpLmlkKCksIHN0cikKKworCisgICAgIyAiSWYgcmVzdWx0IGlzIG9taXR0ZWQgb3IgTm9uZSwgYSB0ZW1wb3JhcnkgcmVzdWx0IG9iamVjdCBpcyBjcmVhdGVkCisgICAgIyBhbmQgdXNlZCwgYnV0IGlzIG5vdCBtYWRlIGF2YWlsYWJsZSB0byB0aGUgY2FsbGVyLiBBcyBUZXN0Q2FzZSBvd25zIHRoZQorICAgICMgdGVtcG9yYXJ5IHJlc3VsdCBzdGFydFRlc3RSdW4gYW5kIHN0b3BUZXN0UnVuIGFyZSBjYWxsZWQuCisKKyAgICBkZWYgdGVzdF9ydW5fX3VzZXNfZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgICAgICBkZWYgZGVmYXVsdFRlc3RSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgICMgTWFrZSBydW4oKSBmaW5kIGEgcmVzdWx0IG9iamVjdCBvbiBpdHMgb3duCisgICAgICAgIEZvbygndGVzdCcpLnJ1bigpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdGFydFRlc3QnLCAndGVzdCcsICdhZGRTdWNjZXNzJywKKyAgICAgICAgICAgICdzdG9wVGVzdCcsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0U2hvcnREZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuc2hvcnREZXNjcmlwdGlvbigpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RTaG9ydERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcoc2VsZik6CisgICAgICAgICIiIlRlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLnNob3J0RGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAnVGVzdHMgc2hvcnREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLicpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdFNob3J0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBzaG9ydERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgZG9jc3RyaW5nLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCBvbmx5IHRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIGlzCisgICAgICAgIHJldHVybmVkIHVzZWQgaW4gdGhlIHNob3J0IGRlc2NyaXB0aW9uLCBubyBtYXR0ZXIgaG93IGxvbmcgdGhlCisgICAgICAgIHdob2xlIHRoaW5nIGlzLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZWxmLnNob3J0RGVzY3JpcHRpb24oKSwKKyAgICAgICAgICAgICAgICAgJ1Rlc3RzIHNob3J0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciAnCisgICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykKKworICAgIGRlZiB0ZXN0QWRkVHlwZUVxdWFsaXR5RnVuYyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2FkU25ha2Uob2JqZWN0KToKKyAgICAgICAgICAgICIiIkR1bW15IGNsYXNzIGZvciB0ZXN0X2FkZFR5cGVFcXVhbGl0eUZ1bmMuIiIiCisgICAgICAgIHMxLCBzMiA9IFNhZFNuYWtlKCksIFNhZFNuYWtlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzMSA9PSBzMikKKyAgICAgICAgZGVmIEFsbFNuYWtlc0NyZWF0ZWRFcXVhbChhLCBiLCBtc2c9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gdHlwZShhKSA9PSB0eXBlKGIpID09IFNhZFNuYWtlCisgICAgICAgIHNlbGYuYWRkVHlwZUVxdWFsaXR5RnVuYyhTYWRTbmFrZSwgQWxsU25ha2VzQ3JlYXRlZEVxdWFsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgIyBObyB0aGlzIGRvZXNuJ3QgY2xlYW4gdXAgYW5kIHJlbW92ZSB0aGUgU2FkU25ha2UgZXF1YWxpdHkgZnVuYworICAgICAgICAjIGZyb20gdGhpcyBUZXN0Q2FzZSBpbnN0YW5jZSBidXQgc2luY2UgaXRzIGEgbG9jYWwgbm90aGluZyBlbHNlCisgICAgICAgICMgd2lsbCBldmVyIG5vdGljZSB0aGF0LgorCisgICAgZGVmIHRlc3RBc3NlcnRJcyhzZWxmKToKKyAgICAgICAgdGhpbmcgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHRoaW5nLCB0aGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydElzLCB0aGluZywgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdEFzc2VydElzTm90KHNlbGYpOgorICAgICAgICB0aGluZyA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QodGhpbmcsIG9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNOb3QsIHRoaW5nLCB0aGluZykKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNJbnN0YW5jZShzZWxmKToKKyAgICAgICAgdGhpbmcgPSBbXQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGhpbmcsIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc0luc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluZywgZGljdCkKKworICAgIGRlZiB0ZXN0QXNzZXJ0Tm90SXNJbnN0YW5jZShzZWxmKToKKyAgICAgICAgdGhpbmcgPSBbXQorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UodGhpbmcsIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0aGluZywgbGlzdCkKKworICAgIGRlZiB0ZXN0QXNzZXJ0SW4oc2VsZik6CisgICAgICAgIGFuaW1hbHMgPSB7J21vbmtleSc6ICdiYW5hbmEnLCAnY293JzogJ2dyYXNzJywgJ3NlYWwnOiAnZmlzaCd9CisKKyAgICAgICAgc2VsZi5hc3NlcnRJbignYScsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKDIsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbW9ua2V5JywgYW5pbWFscykKKworICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdkJywgJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oMCwgWzEsIDIsIDNdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdvdHRlcicsIGFuaW1hbHMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCAneCcsICdhYmMnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SW4sIDQsIFsxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEluLCAnZWxlcGhhbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYWxzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgJ2MnLCAnYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydE5vdEluLCAxLCBbMSwgMiwgM10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnROb3RJbiwgJ2NvdycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hbHMpCisKKyAgICBkZWYgdGVzdEFzc2VydERpY3RDb250YWluc1N1YnNldChzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHt9LCB7fSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHt9LCB7J2EnOiAxfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDF9LCB7J2EnOiAxfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsnYSc6IDF9LCB7J2EnOiAxLCAnYic6IDJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMSwgJ2InOiAyfSwgeydhJzogMSwgJ2InOiAyfSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0KHsxOiAib25lIn0sIHt9KQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMn0sIHsnYSc6IDF9KQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydjJzogMX0sIHsnYSc6IDF9KQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoeydhJzogMSwgJ2MnOiAxfSwgeydhJzogMX0pCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2EnOiAxLCAnYyc6IDF9LCB7J2EnOiAxfSkKKworICAgICAgICAgICAgb25lID0gJycuam9pbihjaHIoaSkgZm9yIGkgaW4gcmFuZ2UoMjU1KSkKKyAgICAgICAgICAgICMgdGhpcyB1c2VkIHRvIGNhdXNlIGEgVW5pY29kZURlY29kZUVycm9yIGNvbnN0cnVjdGluZyB0aGUgZmFpbHVyZSBtc2cKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RDb250YWluc1N1YnNldCh7J2Zvbyc6IG9uZX0sIHsnZm9vJzogJ1x1RkZGRCd9KQorCisgICAgZGVmIHRlc3RBc3NlcnRFcXVhbChzZWxmKToKKyAgICAgICAgZXF1YWxfcGFpcnMgPSBbCisgICAgICAgICAgICAgICAgKCgpLCAoKSksCisgICAgICAgICAgICAgICAgKHt9LCB7fSksCisgICAgICAgICAgICAgICAgKFtdLCBbXSksCisgICAgICAgICAgICAgICAgKHNldCgpLCBzZXQoKSksCisgICAgICAgICAgICAgICAgKGZyb3plbnNldCgpLCBmcm96ZW5zZXQoKSldCisgICAgICAgIGZvciBhLCBiIGluIGVxdWFsX3BhaXJzOgorICAgICAgICAgICAgIyBUaGlzIG1lc3Mgb2YgdHJ5IGV4Y2VwdHMgaXMgdG8gdGVzdCB0aGUgYXNzZXJ0RXF1YWwgYmVoYXZpb3IKKyAgICAgICAgICAgICMgaXRzZWxmLgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgYikKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRFcXVhbCglciwgJXIpIGZhaWxlZCcgJSAoYSwgYikpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiLCBtc2c9J2ZvbycpCisgICAgICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnYXNzZXJ0RXF1YWwoJXIsICVyKSB3aXRoIG1zZz0gZmFpbGVkJyAlIChhLCBiKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIsICdmb28nKQorICAgICAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydEVxdWFsKCVyLCAlcikgd2l0aCB0aGlyZCBwYXJhbWV0ZXIgZmFpbGVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgIChhLCBiKSkKKworICAgICAgICB1bmVxdWFsX3BhaXJzID0gWworICAgICAgICAgICAgICAgKCgpLCBbXSksCisgICAgICAgICAgICAgICAoe30sIHNldCgpKSwKKyAgICAgICAgICAgICAgIChzZXQoWzQsMV0pLCBmcm96ZW5zZXQoWzQsMl0pKSwKKyAgICAgICAgICAgICAgIChmcm96ZW5zZXQoWzQsNV0pLCBzZXQoWzIsM10pKSwKKyAgICAgICAgICAgICAgIChzZXQoWzMsNF0pLCBzZXQoWzUsNF0pKV0KKyAgICAgICAgZm9yIGEsIGIgaW4gdW5lcXVhbF9wYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRFcXVhbCwgYSwgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEVxdWFsLCBhLCBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSdmb28nKQorCisgICAgZGVmIHRlc3RFcXVhbGl0eShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoW10sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwoKCksICgpKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoW10sICgpKQorCisgICAgICAgIGEgPSBbMCwgJ2EnLCBbXV0KKyAgICAgICAgYiA9IFtdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHVuaXR0ZXN0LlRlc3RDYXNlLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCBhLCBiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbCwgdHVwbGUoYSksIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsIGEsIHR1cGxlKGIpKQorCisgICAgICAgIGIuZXh0ZW5kKGEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKGEsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh0dXBsZShhKSwgdHVwbGUoYikpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChhLCB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHR1cGxlKGEpLCBiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMaXN0RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGEsIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUoYSksIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMaXN0RXF1YWwsIE5vbmUsIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRUdXBsZUVxdWFsLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0dXBsZShiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIHR1cGxlKGIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGlzdEVxdWFsLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCwgMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEpCisKKyAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwoe30sIHt9KQorCisgICAgICAgIGMgPSB7ICd4JzogMSB9CisgICAgICAgIGQgPSB7fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1bml0dGVzdC5UZXN0Q2FzZS5mYWlsdXJlRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbCwgYywgZCkKKworICAgICAgICBkLnVwZGF0ZShjKQorICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChjLCBkKQorCisgICAgICAgIGRbJ3gnXSA9IDAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModW5pdHRlc3QuVGVzdENhc2UuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwsIGMsIGQsICdUaGVzZSBhcmUgdW5lcXVhbCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydERpY3RFcXVhbCwgTm9uZSwgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydERpY3RFcXVhbCwgW10sIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnREaWN0RXF1YWwsIDEsIDEpCisKKyAgICBkZWYgdGVzdEFzc2VydFNlcXVlbmNlRXF1YWxNYXhEaWZmKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubWF4RGlmZiwgODAqOCkKKyAgICAgICAgc2VxMSA9ICdhJyArICd4JyAqIDgwKioyCisgICAgICAgIHNlcTIgPSAnYicgKyAneCcgKiA4MCoqMgorICAgICAgICBkaWZmID0gJ1xuJy5qb2luKGRpZmZsaWIubmRpZmYocHByaW50LnBmb3JtYXQoc2VxMSkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoc2VxMikuc3BsaXRsaW5lcygpKSkKKyAgICAgICAgIyB0aGUgKzEgaXMgdGhlIGxlYWRpbmcgXG4gYWRkZWQgYnkgYXNzZXJ0U2VxdWVuY2VFcXVhbAorICAgICAgICBvbWl0dGVkID0gdW5pdHRlc3QuY2FzZS5ESUZGX09NSVRURUQgJSAobGVuKGRpZmYpICsgMSwpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gbGVuKGRpZmYpLy8yCisgICAgICAgIHRyeToKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPCBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ob21pdHRlZCwgbXNnKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IGxlbihkaWZmKSAqIDIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPiBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ob21pdHRlZCwgbXNnKQorCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKHNlcTEsIHNlcTIpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIG1zZyA9IGUuYXJnc1swXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdhc3NlcnRTZXF1ZW5jZUVxdWFsIGRpZCBub3QgZmFpbC4nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKG1zZykgPiBsZW4oZGlmZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4ob21pdHRlZCwgbXNnKQorCisgICAgZGVmIHRlc3RUcnVuY2F0ZU1lc3NhZ2Uoc2VsZik6CisgICAgICAgIHNlbGYubWF4RGlmZiA9IDEKKyAgICAgICAgbWVzc2FnZSA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZSgnZm9vJywgJ2JhcicpCisgICAgICAgIG9taXR0ZWQgPSB1bml0dGVzdC5jYXNlLkRJRkZfT01JVFRFRCAlIGxlbignYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnZm9vJyArIG9taXR0ZWQpCisKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorICAgICAgICBtZXNzYWdlID0gc2VsZi5fdHJ1bmNhdGVNZXNzYWdlKCdmb28nLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXNzYWdlLCAnZm9vYmFyJykKKworICAgICAgICBzZWxmLm1heERpZmYgPSA0CisgICAgICAgIG1lc3NhZ2UgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UoJ2ZvbycsICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1lc3NhZ2UsICdmb29iYXInKQorCisgICAgZGVmIHRlc3RBc3NlcnREaWN0RXF1YWxUcnVuY2F0ZXMoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5UZXN0Q2FzZSgnYXNzZXJ0RXF1YWwnKQorICAgICAgICBkZWYgdHJ1bmNhdGUobXNnLCBkaWZmKToKKyAgICAgICAgICAgIHJldHVybiAnZm9vJworICAgICAgICB0ZXN0Ll90cnVuY2F0ZU1lc3NhZ2UgPSB0cnVuY2F0ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0LmFzc2VydERpY3RFcXVhbCh7fSwgezE6IDB9KQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ2ZvbycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydERpY3RFcXVhbCBkaWQgbm90IGZhaWwnKQorCisgICAgZGVmIHRlc3RBc3NlcnRNdWx0aUxpbmVFcXVhbFRydW5jYXRlcyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCdhc3NlcnRFcXVhbCcpCisgICAgICAgIGRlZiB0cnVuY2F0ZShtc2csIGRpZmYpOgorICAgICAgICAgICAgcmV0dXJuICdmb28nCisgICAgICAgIHRlc3QuX3RydW5jYXRlTWVzc2FnZSA9IHRydW5jYXRlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoJ2ZvbycsICdiYXInKQorICAgICAgICBleGNlcHQgc2VsZi5mYWlsdXJlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ2ZvbycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoJ2Fzc2VydE11bHRpTGluZUVxdWFsIGRpZCBub3QgZmFpbCcpCisKKyAgICBkZWYgdGVzdEFzc2VydEVxdWFsX2RpZmZUaHJlc2hvbGQoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhyZXNob2xkIHZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZGlmZlRocmVzaG9sZCwgMioqMTYpCisgICAgICAgICMgZGlzYWJsZSBtYWREaWZmIHRvIGdldCBkaWZmIG1hcmtlcnMKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQorCisgICAgICAgICMgc2V0IGEgbG93ZXIgdGhyZXNob2xkIHZhbHVlIGFuZCBhZGQgYSBjbGVhbnVwIHRvIHJlc3RvcmUgaXQKKyAgICAgICAgb2xkX3RocmVzaG9sZCA9IHNlbGYuX2RpZmZUaHJlc2hvbGQKKyAgICAgICAgc2VsZi5fZGlmZlRocmVzaG9sZCA9IDIqKjgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc2V0YXR0cihzZWxmLCAnX2RpZmZUaHJlc2hvbGQnLCBvbGRfdGhyZXNob2xkKSkKKworICAgICAgICAjIHVuZGVyIHRoZSB0aHJlc2hvbGQ6IGRpZmYgbWFya2VyICheKSBpbiBlcnJvciBtZXNzYWdlCisgICAgICAgIHMgPSAneCcgKiAoMioqNykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKKworICAgICAgICAjIG92ZXIgdGhlIHRocmVzaG9sZDogZGlmZiBub3QgdXNlZCBhbmQgbWFya2VyICheKSBub3QgaW4gZXJyb3IgbWVzc2FnZQorICAgICAgICBzID0gJ3gnICogKDIqKjkpCisgICAgICAgICMgaWYgdGhlIHBhdGggdGhhdCB1c2VzIGRpZmZsaWIgaXMgdGFrZW4sIF90cnVuY2F0ZU1lc3NhZ2Ugd2lsbCBiZQorICAgICAgICAjIGNhbGxlZCAtLSByZXBsYWNlIGl0IHdpdGggZXhwbG9kaW5nVHJ1bmNhdGlvbiB0byB2ZXJpZnkgdGhhdCB0aGlzCisgICAgICAgICMgZG9lc24ndCBoYXBwZW4KKyAgICAgICAgZGVmIGV4cGxvZGluZ1RydW5jYXRpb24obWVzc2FnZSwgZGlmZik6CisgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcigndGhpcyBzaG91bGQgbm90IGJlIHJhaXNlZCcpCisgICAgICAgIG9sZF90cnVuY2F0ZSA9IHNlbGYuX3RydW5jYXRlTWVzc2FnZQorICAgICAgICBzZWxmLl90cnVuY2F0ZU1lc3NhZ2UgPSBleHBsb2RpbmdUcnVuY2F0aW9uCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ190cnVuY2F0ZU1lc3NhZ2UnLCBvbGRfdHJ1bmNhdGUpKQorCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScsIHMgKyAnYicKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzMSwgczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ14nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgJyVyICE9ICVyJyAlIChzMSwgczIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCisKKyAgICBkZWYgdGVzdEFzc2VydENvdW50RXF1YWwoc2VsZik6CisgICAgICAgIGEgPSBvYmplY3QoKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsIDIsIDNdLCBbMywgMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChbJ2ZvbycsICdiYXInLCAnYmF6J10sIFsnYmFyJywgJ2JheicsICdmb28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFthLCBhLCAyLCAyLCAzXSwgKGEsIDIsIDMsIGEsIDIpKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsICIyIiwgImEiLCAiYSJdLCBbImEiLCAiMiIsIFRydWUsICJhIl0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRDb3VudEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgMl0gKyBbM10gKiAxMDAsIFsxXSAqIDEwMCArIFsyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydENvdW50RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAiMiIsICJhIiwgImEiXSwgWyJhIiwgIjIiLCBUcnVlLCAxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydENvdW50RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMF0sIFsxMCwgMTFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwLCAxMV0sIFsxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRDb3VudEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMTAsIDExLCAxMF0sIFsxMCwgMTFdKQorCisgICAgICAgICMgVGVzdCB0aGF0IHNlcXVlbmNlcyBvZiB1bmhhc2hhYmxlIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3Igc2FtZW5lc3M6CisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChbWzEsIDJdLCBbMywgNF0sIDBdLCBbRmFsc2UsIFszLCA0XSwgWzEsIDJdXSkKKyAgICAgICAgIyBUZXN0IHRoYXQgaXRlcmF0b3Igb2YgdW5oYXNoYWJsZSBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIHNhbWVuZXNzOgorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoaXRlcihbMSwgMiwgW10sIDMsIDRdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXIoWzEsIDIsIFtdLCAzLCA0XSkpCisKKyAgICAgICAgIyBoYXNoYWJsZSB0eXBlcywgYnV0IG5vdCBvcmRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydENvdW50RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtdLCBbZGl2bW9kLCAneCcsIDEsIDVqLCAyaiwgZnJvemVuc2V0KCldKQorICAgICAgICAjIGNvbXBhcmluZyBkaWN0cworICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoW3snYSc6IDF9LCB7J2InOiAyfV0sIFt7J2InOiAyfSwgeydhJzogMX1dKQorICAgICAgICAjIGNvbXBhcmluZyBoZXRlcm9nZW5vdXMgbm9uLWhhc2hhYmxlIHNlcXVlbmNlcworICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoWzEsICd4JywgZGl2bW9kLCBbXV0sIFtkaXZtb2QsIFtdLCAneCcsIDFdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW10sIFtkaXZtb2QsIFtdLCAneCcsIDEsIDVqLCAyaiwgc2V0KCldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgW1sxXV0sIFtbMl1dKQorCisgICAgICAgICMgU2FtZSBlbGVtZW50cywgYnV0IG5vdCBzYW1lIHNlcXVlbmNlIGxlbmd0aAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWzEsIDEsIDJdLCBbMiwgMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRDb3VudEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwgMSwgIjIiLCAiYSIsICJhIl0sIFsiMiIsICIyIiwgVHJ1ZSwgImEiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydENvdW50RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCB7J2InOiAyfSwgTm9uZSwgVHJ1ZV0sIFt7J2InOiAyfSwgVHJ1ZSwgTm9uZV0pCisKKyAgICAgICAgIyBTYW1lIGVsZW1lbnRzIHdoaWNoIGRvbid0IHJlbGlhYmx5IGNvbXBhcmUsIGluCisgICAgICAgICMgZGlmZmVyZW50IG9yZGVyLCBzZWUgaXNzdWUgMTAyNDIKKyAgICAgICAgYSA9IFt7Miw0fSwgezEsMn1dCisgICAgICAgIGIgPSBhWzo6LTFdCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhLCBiKQorCisgICAgICAgICMgdGVzdCB1dGlsaXR5IGZ1bmN0aW9ucyBzdXBwb3J0aW5nIGFzc2VydENvdW50RXF1YWwoKQorCisgICAgICAgIGRpZmZzID0gc2V0KHVuaXR0ZXN0LnV0aWwuX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UoJ2FhYWJjY2QnLCAnYWJiYmNjZScpKQorICAgICAgICBleHBlY3RlZCA9IHsoMywxLCdhJyksICgxLDMsJ2InKSwgKDEsMCwnZCcpLCAoMCwxLCdlJyl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZnMsIGV4cGVjdGVkKQorCisgICAgICAgIGRpZmZzID0gdW5pdHRlc3QudXRpbC5fY291bnRfZGlmZl9hbGxfcHVycG9zZShbW11dLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmcywgWygxLCAwLCBbXSldKQorCisgICAgICAgIGRpZmZzID0gc2V0KHVuaXR0ZXN0LnV0aWwuX2NvdW50X2RpZmZfaGFzaGFibGUoJ2FhYWJjY2QnLCAnYWJiYmNjZScpKQorICAgICAgICBleHBlY3RlZCA9IHsoMywxLCdhJyksICgxLDMsJ2InKSwgKDEsMCwnZCcpLCAoMCwxLCdlJyl9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RBc3NlcnRTZXRFcXVhbChzZWxmKToKKyAgICAgICAgc2V0MSA9IHNldCgpCisgICAgICAgIHNldDIgPSBzZXQoKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldDEsIHNldDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBOb25lLCBzZXQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIFtdLCBzZXQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgW10pCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnXSkKKyAgICAgICAgc2V0MiA9IHNldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKworICAgICAgICBzZXQxID0gc2V0KFsnYSddKQorICAgICAgICBzZXQyID0gc2V0KFsnYSddKQorICAgICAgICBzZWxmLmFzc2VydFNldEVxdWFsKHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnXSkKKyAgICAgICAgc2V0MiA9IHNldChbJ2EnLCAnYiddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnXSkKKyAgICAgICAgc2V0MiA9IGZyb3plbnNldChbJ2EnLCAnYiddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0U2V0RXF1YWwsIHNldDEsIHNldDIpCisKKyAgICAgICAgc2V0MSA9IHNldChbJ2EnLCAnYiddKQorICAgICAgICBzZXQyID0gZnJvemVuc2V0KFsnYScsICdiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0U2V0RXF1YWwoc2V0MSwgc2V0MikKKworICAgICAgICBzZXQxID0gc2V0KCkKKyAgICAgICAgc2V0MiA9ICJmb28iCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRTZXRFcXVhbCwgc2V0MSwgc2V0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQyLCBzZXQxKQorCisgICAgICAgICMgbWFrZSBzdXJlIGFueSBzdHJpbmcgZm9ybWF0dGluZyBpcyB0dXBsZS1zYWZlCisgICAgICAgIHNldDEgPSBzZXQoWygwLCAxKSwgKDIsIDMpXSkKKyAgICAgICAgc2V0MiA9IHNldChbKDQsIDUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFNldEVxdWFsLCBzZXQxLCBzZXQyKQorCisgICAgZGVmIHRlc3RJbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICAjIFRyeSBpbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcigyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgxLCAxKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsIDEsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzRXF1YWwsIDIsIDEpCisKKyAgICAgICAgIyBUcnkgRmxvYXRzCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcigxLjEsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoMS4xLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKDEuMCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoMS4wLCAxLjEpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKDEuMCwgMS4xKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgxLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIDEuMCwgMS4xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgMS4wLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIDEuMCwgMS4xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgMS4xLCAxLjApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCAxLjAsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgMS4xLCAxLjApCisKKyAgICAgICAgIyBUcnkgU3RyaW5ncworICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoJ2J1ZycsICdhbnQnKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCgnYnVnJywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKCdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKCdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoJ2FudCcsICdidWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbCgnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAnYW50JywgJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyLCAnYW50JywgJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsICdhbnQnLCAnYnVnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsICdidWcnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3MsICdhbnQnLCAnYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgJ2J1ZycsICdhbnQnKQorCisgICAgICAgICMgVHJ5IGJ5dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihiJ2J1ZycsIGInYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYididWcnLCBiJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGInYW50JywgYidhbnQnKQorICAgICAgICBzZWxmLmFzc2VydExlc3MoYidhbnQnLCBiJ2J1ZycpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGInYW50JywgYididWcnKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChiJ2FudCcsIGInYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydEdyZWF0ZXIsIGInYW50JywgYididWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0R3JlYXRlciwgYidhbnQnLCBiJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwsIGInYW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYididWcnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0TGVzcywgYididWcnLCBiJ2FudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRMZXNzLCBiJ2FudCcsIGInYW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydExlc3NFcXVhbCwgYididWcnLCBiJ2FudCcpCisKKyAgICBkZWYgdGVzdEFzc2VydE11bHRpTGluZUVxdWFsKHNlbGYpOgorICAgICAgICBzYW1wbGVfdGV4dCA9ICIiIlwKK2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4zL2xpYi9tb2R1bGUtdW5pdHRlc3QuaHRtbAordGVzdCBjYXNlCisgICAgQSB0ZXN0IGNhc2UgaXMgdGhlIHNtYWxsZXN0IHVuaXQgb2YgdGVzdGluZy4gWy4uLl0KKyIiIgorICAgICAgICByZXZpc2VkX3NhbXBsZV90ZXh0ID0gIiIiXAoraHR0cDovL3d3dy5weXRob24ub3JnL2RvYy8yLjQuMS9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKK3Rlc3QgY2FzZQorICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dIFlvdSBtYXkgcHJvdmlkZSB5b3VyCisgICAgb3duIGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyBub3Qgc3ViY2xhc3MgZnJvbSBUZXN0Q2FzZSwgb2YgY291cnNlLgorIiIiCisgICAgICAgIHNhbXBsZV90ZXh0X2Vycm9yID0gIiIiXAorLSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuMy9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKKz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KKysgaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy8yLjQuMS9saWIvbW9kdWxlLXVuaXR0ZXN0Lmh0bWwKKz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXgorICB0ZXN0IGNhc2UKKy0gICAgIEEgdGVzdCBjYXNlIGlzIHRoZSBzbWFsbGVzdCB1bml0IG9mIHRlc3RpbmcuIFsuLi5dCisrICAgICBBIHRlc3QgY2FzZSBpcyB0aGUgc21hbGxlc3QgdW5pdCBvZiB0ZXN0aW5nLiBbLi4uXSBZb3UgbWF5IHByb3ZpZGUgeW91cgorPyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArKysrKysrKysrKysrKysrKysrKysKKysgICAgIG93biBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXMgbm90IHN1YmNsYXNzIGZyb20gVGVzdENhc2UsIG9mIGNvdXJzZS4KKyIiIgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TXVsdGlMaW5lRXF1YWwoc2FtcGxlX3RleHQsIHJldmlzZWRfc2FtcGxlX3RleHQpCisgICAgICAgIGV4Y2VwdCBzZWxmLmZhaWx1cmVFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICMgbmVlZCB0byByZW1vdmUgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGVycm9yIG1lc3NhZ2UKKyAgICAgICAgICAgIGVycm9yID0gc3RyKGUpLnNwbGl0KCdcbicsIDEpWzFdCisKKyAgICAgICAgICAgICMgbm8gZmFpciB0ZXN0aW5nIG91cnNlbGYgd2l0aCBvdXJzZWxmLCBhbmQgYXNzZXJ0RXF1YWwgaXMgdXNlZCBmb3Igc3RyaW5ncworICAgICAgICAgICAgIyBzbyBjYW4ndCB1c2UgYXNzZXJ0RXF1YWwgZWl0aGVyLiBKdXN0IHVzZSBhc3NlcnRUcnVlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNhbXBsZV90ZXh0X2Vycm9yID09IGVycm9yKQorCisgICAgZGVmIHRlc3RBc2VydEVxdWFsU2luZ2xlTGluZShzZWxmKToKKyAgICAgICAgc2FtcGxlX3RleHQgPSAibGFkZW4gc3dhbGxvd3MgZmx5IHNsb3dseSIKKyAgICAgICAgcmV2aXNlZF9zYW1wbGVfdGV4dCA9ICJ1bmxhZGVuIHN3YWxsb3dzIGZseSBxdWlja2x5IgorICAgICAgICBzYW1wbGVfdGV4dF9lcnJvciA9ICIiIlwKKy0gbGFkZW4gc3dhbGxvd3MgZmx5IHNsb3dseQorPyAgICAgICAgICAgICAgICAgICAgXl5eXgorKyB1bmxhZGVuIHN3YWxsb3dzIGZseSBxdWlja2x5Cis/ICsrICAgICAgICAgICAgICAgICAgIF5eXl5eCisiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzYW1wbGVfdGV4dCwgcmV2aXNlZF9zYW1wbGVfdGV4dCkKKyAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyb3IgPSBzdHIoZSkuc3BsaXQoJ1xuJywgMSlbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzYW1wbGVfdGV4dF9lcnJvciA9PSBlcnJvcikKKworICAgIGRlZiB0ZXN0QXNzZXJ0SXNOb25lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0SXNOb25lLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoJ0RqWm9QbG9HZWFycyBvbiBSYWlscycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwgc2VsZi5hc3NlcnRJc05vdE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdEFzc2VydFJlZ2V4KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KCdhc2RmYWJhc2RmJywgcidhYisnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24sIHNlbGYuYXNzZXJ0UmVnZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWFhcycsIHInYWFhYScpCisKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4KHNlbGYpOgorICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIFN0dWIoKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbk1vY2soJ1dlIGV4cGVjdCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb25Nb2NrLCByZS5jb21waWxlKCdleHBlY3QkJyksIFN0dWIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uTW9jaywgJ2V4cGVjdCQnLCBTdHViKQorCisgICAgZGVmIHRlc3RBc3NlcnROb3RSYWlzZXNSZWdleChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sICdeRXhjZXB0aW9uIG5vdCByYWlzZWQgYnkgPGxhbWJkYT4kJywKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4LCBFeGNlcHRpb24sIHJlLmNvbXBpbGUoJ3gnKSwKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCAnXkV4Y2VwdGlvbiBub3QgcmFpc2VkIGJ5IDxsYW1iZGE+JCcsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCwgRXhjZXB0aW9uLCAneCcsCisgICAgICAgICAgICAgICAgbGFtYmRhOiBOb25lKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNSZWdleE1pc21hdGNoKHNlbGYpOgorICAgICAgICBkZWYgU3R1YigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdVbmV4cGVjdGVkJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByJyJcXkV4cGVjdGVkXCQiIGRvZXMgbm90IG1hdGNoICJVbmV4cGVjdGVkIicsCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCwgRXhjZXB0aW9uLCAnXkV4cGVjdGVkJCcsCisgICAgICAgICAgICAgICAgU3R1YikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWx1cmVFeGNlcHRpb24sCisgICAgICAgICAgICAgICAgciciXF5FeHBlY3RlZFwkIiBkb2VzIG5vdCBtYXRjaCAiVW5leHBlY3RlZCInLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgsIEV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICByZS5jb21waWxlKCdeRXhwZWN0ZWQkJyksIFN0dWIpCisKKyAgICBkZWYgdGVzdEFzc2VydFJhaXNlc0V4Y1ZhbHVlKHNlbGYpOgorICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZGVmIFN0dWIoZm9vKToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbk1vY2soZm9vKQorICAgICAgICB2ID0gInBhcnRpY3VsYXIgdmFsdWUiCisKKyAgICAgICAgY3R4ID0gc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jaykKKyAgICAgICAgd2l0aCBjdHg6CisgICAgICAgICAgICBTdHViKHYpCisgICAgICAgIGUgPSBjdHguZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBFeGNlcHRpb25Nb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgdikKKworICAgIGRlZiB0ZXN0QXNzZXJ0V2FybnNDYWxsYWJsZShzZWxmKToKKyAgICAgICAgZGVmIF9ydW50aW1lX3dhcm4oKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oImZvbyIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAjIFN1Y2Nlc3Mgd2hlbiB0aGUgcmlnaHQgd2FybmluZyBpcyB0cmlnZ2VyZWQsIGV2ZW4gc2V2ZXJhbCB0aW1lcworICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCBfcnVudGltZV93YXJuKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCBfcnVudGltZV93YXJuKQorICAgICAgICAjIEEgdHVwbGUgb2Ygd2FybmluZyBjbGFzc2VzIGlzIGFjY2VwdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoKERlcHJlY2F0aW9uV2FybmluZywgUnVudGltZVdhcm5pbmcpLCBfcnVudGltZV93YXJuKQorICAgICAgICAjICphcmdzIGFuZCAqKmt3YXJncyBhbHNvIHdvcmsKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuLCAiZm9vIiwgY2F0ZWdvcnk9UnVudGltZVdhcm5pbmcpCisgICAgICAgICMgRmFpbHVyZSB3aGVuIG5vIHdhcm5pbmcgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoUnVudGltZVdhcm5pbmcsIGxhbWJkYTogMCkKKyAgICAgICAgIyBGYWlsdXJlIHdoZW4gYW5vdGhlciB3YXJuaW5nIGlzIHRyaWdnZXJlZAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIEZvcmNlIGRlZmF1bHQgZmlsdGVyIChpbiBjYXNlIHRlc3RzIGFyZSBydW4gd2l0aCAtV2UpCisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImRlZmF1bHQiLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgX3J1bnRpbWVfd2FybikKKyAgICAgICAgIyBGaWx0ZXJzIGZvciBvdGhlciB3YXJuaW5ncyBhcmUgbm90IG1vZGlmaWVkCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiZXJyb3IiLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCBfcnVudGltZV93YXJuKQorCisgICAgZGVmIHRlc3RBc3NlcnRXYXJuc0NvbnRleHQoc2VsZik6CisgICAgICAgICMgQmVsaWV2ZSBpdCBvciBub3QsIGl0IGlzIHByZWZlcnJhYmxlIHRvIGR1cGxpY2F0ZSBhbGwgdGVzdHMgYWJvdmUsCisgICAgICAgICMgdG8gbWFrZSBzdXJlIHRoZSBfX3dhcm5pbmdyZWdpc3RyeV9fICRAIGlzIGNpcmN1bXZlbnRlZCBjb3JyZWN0bHkuCisgICAgICAgIGRlZiBfcnVudGltZV93YXJuKCk6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJmb28iLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgX3J1bnRpbWVfd2Fybl9saW5lbm8gPSBpbnNwZWN0LmdldHNvdXJjZWxpbmVzKF9ydW50aW1lX3dhcm4pWzFdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZykgYXMgY206CisgICAgICAgICAgICBfcnVudGltZV93YXJuKCkKKyAgICAgICAgIyBBIHR1cGxlIG9mIHdhcm5pbmcgY2xhc3NlcyBpcyBhY2NlcHRlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoKERlcHJlY2F0aW9uV2FybmluZywgUnVudGltZVdhcm5pbmcpKSBhcyBjbToKKyAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oKQorICAgICAgICAjIFRoZSBjb250ZXh0IG1hbmFnZXIgZXhwb3NlcyB2YXJpb3VzIHVzZWZ1bCBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjbS53YXJuaW5nLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS53YXJuaW5nLmFyZ3NbMF0sICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEluKCJ0ZXN0X2Nhc2UucHkiLCBjbS5maWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5saW5lbm8sIF9ydW50aW1lX3dhcm5fbGluZW5vICsgMSkKKyAgICAgICAgIyBTYW1lIHdpdGggc2V2ZXJhbCB3YXJuaW5ncworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAgICAgX3J1bnRpbWVfd2FybigpCisgICAgICAgICAgICBfcnVudGltZV93YXJuKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oImZvbyIsIGNhdGVnb3J5PVJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyB3YXJuaW5nIGlzIHRyaWdnZXJlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUnVudGltZVdhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBGYWlsdXJlIHdoZW4gYW5vdGhlciB3YXJuaW5nIGlzIHRyaWdnZXJlZAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAjIEZvcmNlIGRlZmF1bHQgZmlsdGVyIChpbiBjYXNlIHRlc3RzIGFyZSBydW4gd2l0aCAtV2UpCisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImRlZmF1bHQiLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybigpCisgICAgICAgICMgRmlsdGVycyBmb3Igb3RoZXIgd2FybmluZ3MgYXJlIG5vdCBtb2RpZmllZAorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImVycm9yIiwgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVXYXJuaW5nKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybigpCisKKyAgICBkZWYgdGVzdEFzc2VydFdhcm5zUmVnZXhDYWxsYWJsZShzZWxmKToKKyAgICAgICAgZGVmIF9ydW50aW1lX3dhcm4obXNnKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybiwgImZvb3giKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyB3YXJuaW5nIGlzIHRyaWdnZXJlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiAwKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIHdhcm5pbmcgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICMgRm9yY2UgZGVmYXVsdCBmaWx0ZXIgKGluIGNhc2UgdGVzdHMgYXJlIHJ1biB3aXRoIC1XZSkKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiZGVmYXVsdCIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnNSZWdleChEZXByZWNhdGlvbldhcm5pbmcsICJvKyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4sICJmb294IikKKyAgICAgICAgIyBGYWlsdXJlIHdoZW4gbWVzc2FnZSBkb2Vzbid0IG1hdGNoCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuLCAiYmFyeiIpCisgICAgICAgICMgQSBsaXR0bGUgdHJpY2tpZXI6IHdlIGFzayBSdW50aW1lV2FybmluZ3MgdG8gYmUgcmFpc2VkLCBhbmQgdGhlbgorICAgICAgICAjIGNoZWNrIGZvciBzb21lIG9mIHRoZW0uICBJdCBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHdoZXRoZXIKKyAgICAgICAgIyBub24tbWF0Y2hpbmcgUnVudGltZVdhcm5pbmdzIGFyZSBzaW1wbHkgcmUtcmFpc2VkLCBvciBwcm9kdWNlIGEKKyAgICAgICAgIyBmYWlsdXJlRXhjZXB0aW9uLgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImVycm9yIiwgUnVudGltZVdhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChSdW50aW1lV2FybmluZywgc2VsZi5mYWlsdXJlRXhjZXB0aW9uKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuLCAiYmFyeiIpCisKKyAgICBkZWYgdGVzdEFzc2VydFdhcm5zUmVnZXhDb250ZXh0KHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIGFzc2VydFdhcm5zUmVnZXggYXMgYSBjb250ZXh0IG1hbmFnZXIKKyAgICAgICAgZGVmIF9ydW50aW1lX3dhcm4obXNnKToKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgX3J1bnRpbWVfd2Fybl9saW5lbm8gPSBpbnNwZWN0LmdldHNvdXJjZWxpbmVzKF9ydW50aW1lX3dhcm4pWzFdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiKSBhcyBjbToKKyAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImZvb3giKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20ud2FybmluZywgUnVudGltZVdhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ud2FybmluZy5hcmdzWzBdLCAiZm9veCIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInRlc3RfY2FzZS5weSIsIGNtLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmxpbmVubywgX3J1bnRpbWVfd2Fybl9saW5lbm8gKyAxKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyB3YXJuaW5nIGlzIHRyaWdnZXJlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnNSZWdleChSdW50aW1lV2FybmluZywgIm8rIik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIHdhcm5pbmcgaXMgdHJpZ2dlcmVkCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICMgRm9yY2UgZGVmYXVsdCBmaWx0ZXIgKGluIGNhc2UgdGVzdHMgYXJlIHJ1biB3aXRoIC1XZSkKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiZGVmYXVsdCIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KERlcHJlY2F0aW9uV2FybmluZywgIm8rIik6CisgICAgICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImZvb3giKQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBtZXNzYWdlIGRvZXNuJ3QgbWF0Y2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIpOgorICAgICAgICAgICAgICAgIF9ydW50aW1lX3dhcm4oImJhcnoiKQorICAgICAgICAjIEEgbGl0dGxlIHRyaWNraWVyOiB3ZSBhc2sgUnVudGltZVdhcm5pbmdzIHRvIGJlIHJhaXNlZCwgYW5kIHRoZW4KKyAgICAgICAgIyBjaGVjayBmb3Igc29tZSBvZiB0aGVtLiAgSXQgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5lZCB3aGV0aGVyCisgICAgICAgICMgbm9uLW1hdGNoaW5nIFJ1bnRpbWVXYXJuaW5ncyBhcmUgc2ltcGx5IHJlLXJhaXNlZCwgb3IgcHJvZHVjZSBhCisgICAgICAgICMgZmFpbHVyZUV4Y2VwdGlvbi4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJlcnJvciIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoUnVudGltZVdhcm5pbmcsIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFJ1bnRpbWVXYXJuaW5nLCAibysiKToKKyAgICAgICAgICAgICAgICAgICAgX3J1bnRpbWVfd2FybigiYmFyeiIpCisKKyAgICBkZWYgdGVzdERlcHJlY2F0ZWRNZXRob2ROYW1lcyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgdGhhdCB0aGUgZGVwcmVjYXRlZCBtZXRob2RzIHJhaXNlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBTZWUgIzk0MjQuCisgICAgICAgICIiIgorICAgICAgICBvbGQgPSAoCisgICAgICAgICAgICAoc2VsZi5mYWlsSWZFcXVhbCwgKDMsIDUpKSwKKyAgICAgICAgICAgIChzZWxmLmFzc2VydE5vdEVxdWFscywgKDMsIDUpKSwKKyAgICAgICAgICAgIChzZWxmLmZhaWxVbmxlc3NFcXVhbCwgKDMsIDMpKSwKKyAgICAgICAgICAgIChzZWxmLmFzc2VydEVxdWFscywgKDMsIDMpKSwKKyAgICAgICAgICAgIChzZWxmLmZhaWxVbmxlc3NBbG1vc3RFcXVhbCwgKDIuMCwgMi4wKSksCisgICAgICAgICAgICAoc2VsZi5hc3NlcnRBbG1vc3RFcXVhbHMsICgyLjAsIDIuMCkpLAorICAgICAgICAgICAgKHNlbGYuZmFpbElmQWxtb3N0RXF1YWwsICgzLjAsIDUuMCkpLAorICAgICAgICAgICAgKHNlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWxzLCAoMy4wLCA1LjApKSwKKyAgICAgICAgICAgIChzZWxmLmZhaWxVbmxlc3MsIChUcnVlLCkpLAorICAgICAgICAgICAgKHNlbGYuYXNzZXJ0XywgKFRydWUsKSksCisgICAgICAgICAgICAoc2VsZi5mYWlsVW5sZXNzUmFpc2VzLCAoVHlwZUVycm9yLCBsYW1iZGEgXzogMy4xNCArICdzcGFtJykpLAorICAgICAgICAgICAgKHNlbGYuZmFpbElmLCAoRmFsc2UsKSksCisgICAgICAgICAgICAoc2VsZi5hc3NlcnRTYW1lRWxlbWVudHMsIChbMSwgMSwgMiwgM10sIFsxLCAyLCAzXSkpLAorICAgICAgICAgICAgKHNlbGYuYXNzZXJ0RGljdENvbnRhaW5zU3Vic2V0LCAoZGljdChhPTEsIGI9MiksIGRpY3QoYT0xLCBiPTIsIGM9MykpKSwKKyAgICAgICAgICAgIChzZWxmLmFzc2VydFJhaXNlc1JlZ2V4cCwgKEtleUVycm9yLCAnZm9vJywgbGFtYmRhOiB7fVsnZm9vJ10pKSwKKyAgICAgICAgICAgIChzZWxmLmFzc2VydFJlZ2V4cE1hdGNoZXMsICgnYmFyJywgJ2JhcicpKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgbWV0aCwgYXJncyBpbiBvbGQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBtZXRoKCphcmdzKQorCisgICAgZGVmIHRlc3REZXByZWNhdGVkRmFpbE1ldGhvZHMoc2VsZik6CisgICAgICAgICIiIlRlc3QgdGhhdCB0aGUgZGVwcmVjYXRlZCBmYWlsKiBtZXRob2RzIGdldCByZW1vdmVkIGluIDMuMyIiIgorICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzoyXSA8ICgzLCAzKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkZXByZWNhdGVkX25hbWVzID0gWworICAgICAgICAgICAgJ2ZhaWxJZkVxdWFsJywgJ2ZhaWxVbmxlc3NFcXVhbCcsICdmYWlsVW5sZXNzQWxtb3N0RXF1YWwnLAorICAgICAgICAgICAgJ2ZhaWxJZkFsbW9zdEVxdWFsJywgJ2ZhaWxVbmxlc3MnLCAnZmFpbFVubGVzc1JhaXNlcycsICdmYWlsSWYnLAorICAgICAgICAgICAgJ2Fzc2VydFNhbWVFbGVtZW50cycsICdhc3NlcnREaWN0Q29udGFpbnNTdWJzZXQnLAorICAgICAgICBdCisgICAgICAgIGZvciBkZXByZWNhdGVkX25hbWUgaW4gZGVwcmVjYXRlZF9uYW1lczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgZGVwcmVjYXRlZF9uYW1lKSAgIyByZW1vdmUgdGhlc2UgaW4gMy4zCisKKyAgICBkZWYgdGVzdERlZXBjb3B5KHNlbGYpOgorICAgICAgICAjIElzc3VlOiA1NjYwCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKworICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGJsb3cgdXAKKyAgICAgICAgZGVlcGNvcHkodGVzdCkKKworICAgIGRlZiB0ZXN0UGlja2xlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDEwMzI2CisKKyAgICAgICAgIyBDYW4ndCB1c2UgVGVzdENhc2UgY2xhc3NlcyBkZWZpbmVkIGluIFRlc3QgY2xhc3MgYXMKKyAgICAgICAgIyBwaWNrbGUgZG9lcyBub3Qgd29yayB3aXRoIGlubmVyIGNsYXNzZXMKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LlRlc3RDYXNlKCdydW4nKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKworICAgICAgICAgICAgIyBibGV3IHVwIHByaW9yIHRvIGZpeAorICAgICAgICAgICAgcGlja2xlZF90ZXN0ID0gcGlja2xlLmR1bXBzKHRlc3QsIHByb3RvY29sPXByb3RvY29sKQorICAgICAgICAgICAgdW5waWNrbGVkX3Rlc3QgPSBwaWNrbGUubG9hZHMocGlja2xlZF90ZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0LCB1bnBpY2tsZWRfdGVzdCkKKworICAgICAgICAgICAgIyBleGVyY2lzZSB0aGUgVGVzdENhc2UgaW5zdGFuY2UgaW4gYSB3YXkgdGhhdCB3aWxsIGludm9rZQorICAgICAgICAgICAgIyB0aGUgdHlwZSBlcXVhbGl0eSBsb29rdXAgbWVjaGFuaXNtCisgICAgICAgICAgICB1bnBpY2tsZWRfdGVzdC5hc3NlcnRFcXVhbChzZXQoKSwgc2V0KCkpCisKKyAgICBkZWYgdGVzdEtleWJvYXJkSW50ZXJydXB0KHNlbGYpOgorICAgICAgICBkZWYgX3JhaXNlKHNlbGY9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorICAgICAgICBkZWYgbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IF9yYWlzZQorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHNldFVwID0gX3JhaXNlCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKworICAgICAgICBjbGFzcyBUZXN0Myh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKyAgICAgICAgICAgIHRlYXJEb3duID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfcmFpc2UpCisKKyAgICAgICAgZm9yIGtsYXNzIGluIChUZXN0MSwgVGVzdDIsIFRlc3QzLCBUZXN0NCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleWJvYXJkSW50ZXJydXB0KToKKyAgICAgICAgICAgICAgICBrbGFzcygndGVzdF9zb21ldGhpbmcnKS5ydW4oKQorCisgICAgZGVmIHRlc3RTa2lwcGluZ0V2ZXJ5d2hlcmUoc2VsZik6CisgICAgICAgIGRlZiBfc2tpcChzZWxmPU5vbmUpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NvbWUgcmVhc29uJykKKyAgICAgICAgZGVmIG5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVzdF9zb21ldGhpbmcgPSBfc2tpcAorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHNldFVwID0gX3NraXAKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworCisgICAgICAgIGNsYXNzIFRlc3QzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlc3Rfc29tZXRoaW5nID0gbm90aGluZworICAgICAgICAgICAgdGVhckRvd24gPSBfc2tpcAorCisgICAgICAgIGNsYXNzIFRlc3Q0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoX3NraXApCisKKyAgICAgICAgZm9yIGtsYXNzIGluIChUZXN0MSwgVGVzdDIsIFRlc3QzLCBUZXN0NCk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgICAgIGtsYXNzKCd0ZXN0X3NvbWV0aGluZycpLnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworICAgIGRlZiB0ZXN0U3lzdGVtRXhpdChzZWxmKToKKyAgICAgICAgZGVmIF9yYWlzZShzZWxmPU5vbmUpOgorICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorICAgICAgICBkZWYgbm90aGluZyhzZWxmKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IF9yYWlzZQorCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHNldFVwID0gX3JhaXNlCisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKworICAgICAgICBjbGFzcyBUZXN0Myh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZXN0X3NvbWV0aGluZyA9IG5vdGhpbmcKKyAgICAgICAgICAgIHRlYXJEb3duID0gX3JhaXNlCisKKyAgICAgICAgY2xhc3MgVGVzdDQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc29tZXRoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChfcmFpc2UpCisKKyAgICAgICAgZm9yIGtsYXNzIGluIChUZXN0MSwgVGVzdDIsIFRlc3QzLCBUZXN0NCk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgICAgIGtsYXNzKCd0ZXN0X3NvbWV0aGluZycpLnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjg4ZjhlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9kaXNjb3ZlcnkucHkKQEAgLTAsMCArMSwzOTUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3lzCisKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RhYmxlVGVzdFByb2dyYW0odW5pdHRlc3QuVGVzdFByb2dyYW0pOgorICAgIG1vZHVsZSA9ICdfX21haW5fXycKKyAgICBleGl0ID0gVHJ1ZQorICAgIGRlZmF1bHRUZXN0ID0gZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gTm9uZQorICAgIHZlcmJvc2l0eSA9IDEKKyAgICBwcm9nTmFtZSA9ICcnCisgICAgdGVzdFJ1bm5lciA9IHRlc3RMb2FkZXIgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBUZXN0RGlzY292ZXJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgSGVhdmlseSBtb2NrZWQgdGVzdHMgc28gSSBjYW4gYXZvaWQgaGl0dGluZyB0aGUgZmlsZXN5c3RlbQorICAgIGRlZiB0ZXN0X2dldF9uYW1lX2Zyb21fcGF0aChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9ICcvZm9vJworICAgICAgICBuYW1lID0gbG9hZGVyLl9nZXRfbmFtZV9mcm9tX3BhdGgoJy9mb28vYmFyL2Jhei5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgJ2Jhci5iYXonKQorCisgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CisgICAgICAgICAgICAjIGFzc2VydHMgYXJlIG9mZgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuX2dldF9uYW1lX2Zyb21fcGF0aCgnL2Jhci9iYXoucHknKQorCisgICAgZGVmIHRlc3RfZmluZF90ZXN0cyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgb3JpZ2luYWxfbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfbGlzdGRpcigpOgorICAgICAgICAgICAgb3MubGlzdGRpciA9IG9yaWdpbmFsX2xpc3RkaXIKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNmaWxlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorICAgICAgICBvcmlnaW5hbF9pc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorCisgICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0MS5weScsICd0ZXN0Mi5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKKyAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QuZm9vJywgJ3Rlc3Qtbm90LWEtbW9kdWxlLnB5JywgJ2Fub3RoZXJfZGlyJ10sCisgICAgICAgICAgICAgICAgICAgICAgWyd0ZXN0My5weScsICd0ZXN0NC5weScsIF1dCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKKworICAgICAgICBkZWYgaXNkaXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gcGF0aC5lbmRzd2l0aCgnZGlyJykKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQorCisgICAgICAgIGRlZiBpc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAjIGFub3RoZXJfZGlyIGlzIG5vdCBhIHBhY2thZ2UgYW5kIHNvIHNob3VsZG4ndCBiZSByZWN1cnNlZCBpbnRvCisgICAgICAgICAgICByZXR1cm4gbm90IHBhdGguZW5kc3dpdGgoJ2RpcicpIGFuZCBub3QgJ2Fub3RoZXJfZGlyJyBpbiBwYXRoCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gaXNmaWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKworICAgICAgICBsb2FkZXIuX2dldF9tb2R1bGVfZnJvbV9uYW1lID0gbGFtYmRhIHBhdGg6IHBhdGggKyAnIG1vZHVsZScKKyAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUgPSBsYW1iZGEgbW9kdWxlOiBtb2R1bGUgKyAnIHRlc3RzJworCisgICAgICAgIHRvcF9sZXZlbCA9IG9zLnBhdGguYWJzcGF0aCgnL2ZvbycpCisgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbbmFtZSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QxJywgJ3Rlc3QyJyldCisgICAgICAgIGV4cGVjdGVkLmV4dGVuZChbKCd0ZXN0X2Rpci4lcycgJSBuYW1lKSArICcgbW9kdWxlIHRlc3RzJyBmb3IgbmFtZSBpbgorICAgICAgICAgICAgICAgICAgICAoJ3Rlc3QzJywgJ3Rlc3Q0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZpbmRfdGVzdHNfd2l0aF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9saXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBkZWYgcmVzdG9yZV9saXN0ZGlyKCk6CisgICAgICAgICAgICBvcy5saXN0ZGlyID0gb3JpZ2luYWxfbGlzdGRpcgorICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZV9pc2ZpbGUoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNmaWxlID0gb3JpZ2luYWxfaXNmaWxlCisgICAgICAgIG9yaWdpbmFsX2lzZGlyID0gb3MucGF0aC5pc2RpcgorICAgICAgICBkZWYgcmVzdG9yZV9pc2RpcigpOgorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisKKyAgICAgICAgZGlyZWN0b3JpZXMgPSBbJ2FfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddCisgICAgICAgIHBhdGhfbGlzdHMgPSBbZGlyZWN0b3JpZXMsIFtdLCBbXSwgW11dCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgcGF0aDogcGF0aF9saXN0cy5wb3AoMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfbGlzdGRpcikKKworICAgICAgICBvcy5wYXRoLmlzZGlyID0gbGFtYmRhIHBhdGg6IFRydWUKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNkaXIpCisKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgcGF0aDogb3MucGF0aC5iYXNlbmFtZShwYXRoKSBub3QgaW4gZGlyZWN0b3JpZXMKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfaXNmaWxlKQorCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgcGF0aHMgPSBbXQorICAgICAgICAgICAgbG9hZF90ZXN0c19hcmdzID0gW10KKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKyAgICAgICAgICAgICAgICBzZWxmLnBhdGhzLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguYmFzZW5hbWUocGF0aCkgPT0gJ3Rlc3RfZGlyZWN0b3J5JzoKKyAgICAgICAgICAgICAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHNfYXJncy5hcHBlbmQoKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdsb2FkX3Rlc3RzJworICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRfdGVzdHMgPSBsb2FkX3Rlc3RzCisKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhdGggPT0gb3RoZXIucGF0aAorCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBsYW1iZGEgbmFtZTogTW9kdWxlKG5hbWUpCisgICAgICAgIGRlZiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSwgdXNlX2xvYWRfdGVzdHMpOgorICAgICAgICAgICAgaWYgdXNlX2xvYWRfdGVzdHM6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKCd1c2VfbG9hZF90ZXN0cyBzaG91bGQgYmUgRmFsc2UgZm9yIHBhY2thZ2VzJykKKyAgICAgICAgICAgIHJldHVybiBtb2R1bGUucGF0aCArICcgbW9kdWxlIHRlc3RzJworICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZSA9IGxvYWRUZXN0c0Zyb21Nb2R1bGUKKworICAgICAgICBsb2FkZXIuX3RvcF9sZXZlbF9kaXIgPSAnL2ZvbycKKyAgICAgICAgIyB0aGlzIHRpbWUgbm8gJy5weScgb24gdGhlIHBhdHRlcm4gc28gdGhhdCBpdCBjYW4gbWF0Y2gKKyAgICAgICAgIyBhIHRlc3QgcGFja2FnZQorICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKCcvZm9vJywgJ3Rlc3QqJykpCisKKyAgICAgICAgIyBXZSBzaG91bGQgaGF2ZSBsb2FkZWQgdGVzdHMgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkgcGFja2FnZSBieSBjYWxsaW5nIGxvYWRfdGVzdHMKKyAgICAgICAgIyBhbmQgZGlyZWN0bHkgZnJvbSB0aGUgdGVzdF9kaXJlY3RvcnkyIHBhY2thZ2UKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2xvYWRfdGVzdHMnLCAndGVzdF9kaXJlY3RvcnkyJyArICcgbW9kdWxlIHRlc3RzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLCBbJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddKQorCisgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vZHVsZS5sb2FkX3Rlc3RzX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhsb2FkZXIsICd0ZXN0X2RpcmVjdG9yeScgKyAnIG1vZHVsZSB0ZXN0cycsICd0ZXN0KicpXSkKKworICAgIGRlZiB0ZXN0X2Rpc2NvdmVyKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnaW5hbF9pc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBvcmlnaW5hbF9pc2RpciA9IG9zLnBhdGguaXNkaXIKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNmaWxlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IEZhbHNlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZmlsZSkKKworICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KKyAgICAgICAgZGVmIHJlc3RvcmVfcGF0aCgpOgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX3BhdGgpCisKKyAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGgubm9ybXBhdGgoJy9mb28nKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZGlzY292ZXIoJy9mb28vYmFyJywgdG9wX2xldmVsX2Rpcj0nL2ZvbycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuX3RvcF9sZXZlbF9kaXIsIGZ1bGxfcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmdWxsX3BhdGgsIHN5cy5wYXRoKQorCisgICAgICAgIG9zLnBhdGguaXNmaWxlID0gbGFtYmRhIHBhdGg6IFRydWUKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGxhbWJkYSBwYXRoOiBUcnVlCisKKyAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKKyAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9pc2RpcikKKworICAgICAgICBfZmluZF90ZXN0c19hcmdzID0gW10KKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiBbJ3Rlc3RzJ10KKyAgICAgICAgbG9hZGVyLl9maW5kX3Rlc3RzID0gX2ZpbmRfdGVzdHMKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBzdHIKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignL2Zvby9iYXIvYmF6JywgJ3BhdHRlcm4nLCAnL2Zvby9iYXInKQorCisgICAgICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoJy9mb28vYmFyJykKKyAgICAgICAgc3RhcnRfZGlyID0gb3MucGF0aC5hYnNwYXRoKCcvZm9vL2Jhci9iYXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCAiWyd0ZXN0cyddIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIuX3RvcF9sZXZlbF9kaXIsIHRvcF9sZXZlbF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZpbmRfdGVzdHNfYXJncywgWyhzdGFydF9kaXIsICdwYXR0ZXJuJyldKQorICAgICAgICBzZWxmLmFzc2VydEluKHRvcF9sZXZlbF9kaXIsIHN5cy5wYXRoKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCisgICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBpc2ZpbGUgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGxhbWJkYSBfOiBUcnVlCisgICAgICAgIG9yaWdfc3lzX3BhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBsaXN0ZGlyCisgICAgICAgICAgICBzeXMucGF0aFs6XSA9IG9yaWdfc3lzX3BhdGgKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCisKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJy4nKQorICAgICAgICBzZWxmLmFzc2VydEluKG9zLmdldGN3ZCgpLCBzeXMucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICB0ZXN0ID0gbGlzdChsaXN0KHN1aXRlKVswXSlbMF0gIyBleHRyYWN0IHRlc3QgZnJvbSBzdWl0ZQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgdGVzdC50ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QoKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQorCisgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgorICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHQoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKKyAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCisKKyAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQorICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgorICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIFtdKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2Rpc2NvdmVyX2J5X2RlZmF1bHRfd2l0aF9vcHRpb25zKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCisgICAgICAgIHByb2dyYW0ubW9kdWxlID0gTm9uZQorCisgICAgICAgIGFyZ3MgPSBbJ3NvbWV0aGluZycsICctdicsICctYicsICctdicsICctYycsICctZiddCisgICAgICAgIHNlbGYuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgZGVmIGRvX2Rpc2NvdmVyeShhcmd2KToKKyAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmd2LCBhcmdzWzE6XSkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNhbGxlZCkKKworCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV90b29fbWFueV9hcmd1bWVudHMoc2VsZik6CisgICAgICAgIGNsYXNzIFN0b3AoRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIHVzYWdlRXhpdCgpOgorICAgICAgICAgICAgcmFpc2UgU3RvcAorCisgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKKyAgICAgICAgcHJvZ3JhbS51c2FnZUV4aXQgPSB1c2FnZUV4aXQKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3ApOgorICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKworCisgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX2RvX2Rpc2NvdmVyeV9jYWxsc19sb2FkZXIoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKKworICAgICAgICBjbGFzcyBMb2FkZXIob2JqZWN0KToKKyAgICAgICAgICAgIGFyZ3MgPSBbXQorICAgICAgICAgICAgZGVmIGRpc2NvdmVyKHNlbGYsIHN0YXJ0X2RpciwgcGF0dGVybiwgdG9wX2xldmVsX2Rpcik6CisgICAgICAgICAgICAgICAgc2VsZi5hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Rlc3RzJworCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy12J10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctLXZlcmJvc2UnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ2Zpc2gnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJ2Zpc2gnLCAndGVzdCoucHknLCBOb25lKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJ2Zpc2gnLCAnZWdncyddLCBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydmaXNoJywgJ2VnZ3MnLCAnaGFtJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ2VnZ3MnLCAnaGFtJyldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctcycsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCdmaXNoJywgJ3Rlc3QqLnB5JywgTm9uZSldKQorCisgICAgICAgIExvYWRlci5hcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQorICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWyctdCcsICdmaXNoJ10sIExvYWRlcj1Mb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0LCAndGVzdHMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKExvYWRlci5hcmdzLCBbKCcuJywgJ3Rlc3QqLnB5JywgJ2Zpc2gnKV0pCisKKyAgICAgICAgTG9hZGVyLmFyZ3MgPSBbXQorICAgICAgICBwcm9ncmFtID0gVGVzdGFibGVUZXN0UHJvZ3JhbSgpCisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeShbJy1wJywgJ2Zpc2gnXSwgTG9hZGVyPUxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3QsICd0ZXN0cycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTG9hZGVyLmFyZ3MsIFsoJy4nLCAnZmlzaCcsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcm9ncmFtLmZhaWxmYXN0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHByb2dyYW0uY2F0Y2hicmVhaykKKworICAgICAgICBMb2FkZXIuYXJncyA9IFtdCisgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5KFsnLXAnLCAnZWdncycsICctcycsICdmaXNoJywgJy12JywgJy1mJywgJy1jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkZXI9TG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdCwgJ3Rlc3RzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMb2FkZXIuYXJncywgWygnZmlzaCcsICdlZ2dzJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2dyYW0uY2F0Y2hicmVhaykKKworICAgIGRlZiB0ZXN0X2RldGVjdF9tb2R1bGVfY2xhc2goc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgX19maWxlX18gPSAnYmFyL2Zvby5weScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ2ZvbyddID0gTW9kdWxlCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aCgnZm9vJykKKyAgICAgICAgb3JpZ2luYWxfbGlzdGRpciA9IG9zLmxpc3RkaXIKKyAgICAgICAgb3JpZ2luYWxfaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgb3JpZ2luYWxfaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisKKyAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgIG9zLmxpc3RkaXIgPSBvcmlnaW5hbF9saXN0ZGlyCisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IG9yaWdpbmFsX2lzZmlsZQorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IG9yaWdpbmFsX2lzZGlyCisgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ2ZvbyddCisgICAgICAgICAgICBpZiBmdWxsX3BhdGggaW4gc3lzLnBhdGg6CisgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisKKyAgICAgICAgZGVmIGxpc3RkaXIoXyk6CisgICAgICAgICAgICByZXR1cm4gWydmb28ucHknXQorICAgICAgICBkZWYgaXNmaWxlKF8pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZGVmIGlzZGlyKF8pOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgb3MubGlzdGRpciA9IGxpc3RkaXIKKyAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBpc2ZpbGUKKyAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgbW9kX2RpciA9IG9zLnBhdGguYWJzcGF0aCgnYmFyJykKKyAgICAgICAgZXhwZWN0ZWRfZGlyID0gb3MucGF0aC5hYnNwYXRoKCdmb28nKQorICAgICAgICBtc2cgPSByZS5lc2NhcGUociInZm9vJyBtb2R1bGUgaW5jb3JyZWN0bHkgaW1wb3J0ZWQgZnJvbSAlci4gRXhwZWN0ZWQgJXIuICIKKyAgICAgICAgICAgICAgICAiSXMgdGhpcyBtb2R1bGUgZ2xvYmFsbHkgaW5zdGFsbGVkPyIgJSAobW9kX2RpciwgZXhwZWN0ZWRfZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIEltcG9ydEVycm9yLCAnXiVzJCcgJSBtc2csIGxvYWRlci5kaXNjb3ZlciwKKyAgICAgICAgICAgIHN0YXJ0X2Rpcj0nZm9vJywgcGF0dGVybj0nZm9vLnB5JworICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLnBhdGhbMF0sIGZ1bGxfcGF0aCkKKworCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX3BhdGgoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRlc3RzID0gW3NlbGZdCisgICAgICAgIGV4cGVjdGVkUGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUodW5pdHRlc3QudGVzdC5fX2ZpbGVfXykpCisKKyAgICAgICAgc2VsZi53YXNSdW4gPSBGYWxzZQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcigndW5pdHRlc3QudGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhc1J1bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIHRlc3RzKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlNWVlMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQpAQCAtMCwwICsxLDE0NCBAQAoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQKKworCitjbGFzcyBUZXN0X0Z1bmN0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuIEZvcgorICAgICMgVGVzdENhc2UgaW5zdGFuY2VzLCB0aGlzIHdpbGwgYWx3YXlzIGJlIDEiCisgICAgZGVmIHRlc3RfY291bnRUZXN0Q2FzZXMoc2VsZik6CisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgc2V0VXAoKSByYWlzZXMKKyAgICAjIGFuIGV4Y2VwdGlvbi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fc2V0VXAoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGRlZiBzZXRVcCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyYWlzZWQgYnkgc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ2FkZEVycm9yJywgJ3N0b3BUZXN0J10KKyAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGhlIHRlc3QgcmFpc2VzCisgICAgIyBhbiBlcnJvciAoYXMgb3Bwb3NlZCB0byBhIGZhaWx1cmUpLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19lcnJvcl9pbl90ZXN0KHNlbGYpOgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKworICAgICAgICBkZWYgc2V0VXAoKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3NldFVwJykKKworICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVzdCcpCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSB0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRXJyb3InLCAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiV2hlbiBhIHNldFVwKCkgbWV0aG9kIGlzIGRlZmluZWQsIHRoZSB0ZXN0IHJ1bm5lciB3aWxsIHJ1biB0aGF0IG1ldGhvZAorICAgICMgcHJpb3IgdG8gZWFjaCB0ZXN0LiBMaWtld2lzZSwgaWYgYSB0ZWFyRG93bigpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUKKyAgICAjIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gSW4gdGhlIGV4YW1wbGUsCisgICAgIyBzZXRVcCgpIHdhcyB1c2VkIHRvIGNyZWF0ZSBhIGZyZXNoIHNlcXVlbmNlIGZvciBlYWNoIHRlc3QuIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSB0aGUgcHJvcGVyIGNhbGwgb3JkZXIgaXMgbWFpbnRhaW5lZCwgZXZlbiBpZiB0aGUgdGVzdCBzaWduYWxzCisgICAgIyBhIGZhaWx1cmUgKGFzIG9wcG9zZWQgdG8gYW4gZXJyb3IpLgorICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19mYWlsdXJlX2luX3Rlc3Qoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGRlZiBzZXRVcCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKyAgICAgICAgICAgIHNlbGYuZmFpbCgncmFpc2VkIGJ5IHRlc3QnKQorCisgICAgICAgIGRlZiB0ZWFyRG93bigpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgndGVhckRvd24nKQorCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRGYWlsdXJlJywgJ3N0b3BUZXN0J10KKyAgICAgICAgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZSh0ZXN0LCBzZXRVcCwgdGVhckRvd24pLnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgICMgIldoZW4gYSBzZXRVcCgpIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdCBtZXRob2QKKyAgICAjIHByaW9yIHRvIGVhY2ggdGVzdC4gTGlrZXdpc2UsIGlmIGEgdGVhckRvd24oKSBtZXRob2QgaXMgZGVmaW5lZCwgdGhlCisgICAgIyB0ZXN0IHJ1bm5lciB3aWxsIGludm9rZSB0aGF0IG1ldGhvZCBhZnRlciBlYWNoIHRlc3QuIEluIHRoZSBleGFtcGxlLAorICAgICMgc2V0VXAoKSB3YXMgdXNlZCB0byBjcmVhdGUgYSBmcmVzaCBzZXF1ZW5jZSBmb3IgZWFjaCB0ZXN0LiIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhlIHByb3BlciBjYWxsIG9yZGVyIGlzIG1haW50YWluZWQsIGV2ZW4gaWYgdGVhckRvd24oKSByYWlzZXMKKyAgICAjIGFuIGV4Y2VwdGlvbi4KKyAgICBkZWYgdGVzdF9ydW5fY2FsbF9vcmRlcl9fZXJyb3JfaW5fdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIGRlZiBzZXRVcCgpOgorICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnc2V0VXAnKQorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBldmVudHMuYXBwZW5kKCd0ZXN0JykKKworICAgICAgICBkZWYgdGVhckRvd24oKToKKyAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3RlYXJEb3duJykKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigncmFpc2VkIGJ5IHRlYXJEb3duJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLCAnYWRkRXJyb3InLAorICAgICAgICAgICAgICAgICAgICAnc3RvcFRlc3QnXQorICAgICAgICB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKHRlc3QsIHNldFVwLCB0ZWFyRG93bikucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkKQorCisgICAgIyAiUmV0dXJuIGEgc3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBzcGVjaWZpYyB0ZXN0IGNhc2UuIgorICAgICMKKyAgICAjIEJlY2F1c2Ugb2YgdGhlIHZhZ3VlIG5hdHVyZSBvZiB0aGUgZG9jcywgSSdtIG5vdCBnb2luZyB0byBsb2NrIHRoaXMKKyAgICAjIHRlc3QgZG93biB0b28gbXVjaC4gUmVhbGx5IGFsbCB0aGF0IGNhbiBiZSBhc3NlcnRlZCBpcyB0aGF0IHRoZSBpZCgpCisgICAgIyB3aWxsIGJlIGEgc3RyaW5nIChlaXRoZXIgOC1ieXRlIG9yIHVuaWNvZGUgLS0gYWdhaW4sIGJlY2F1c2UgdGhlIGRvY3MKKyAgICAjIGp1c3Qgc2F5ICJzdHJpbmciKQorICAgIGRlZiB0ZXN0X2lkKHNlbGYpOgorICAgICAgICB0ZXN0ID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3QuaWQoKSwgc3RyKQorCisgICAgIyAiUmV0dXJucyBhIG9uZS1saW5lIGRlc2NyaXB0aW9uIG9mIHRoZSB0ZXN0LCBvciBOb25lIGlmIG5vIGRlc2NyaXB0aW9uCisgICAgIyBoYXMgYmVlbiBwcm92aWRlZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgcmV0dXJucworICAgICMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRlc3QgbWV0aG9kJ3MgZG9jc3RyaW5nLCBpZiBhdmFpbGFibGUsIG9yIE5vbmUuIgorICAgIGRlZiB0ZXN0X3Nob3J0RGVzY3JpcHRpb25fX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksIE5vbmUpCisKKyAgICAjICJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QsIG9yIE5vbmUgaWYgbm8gZGVzY3JpcHRpb24KKyAgICAjIGhhcyBiZWVuIHByb3ZpZGVkLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCByZXR1cm5zCisgICAgIyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgdGVzdCBtZXRob2QncyBkb2NzdHJpbmcsIGlmIGF2YWlsYWJsZSwgb3IgTm9uZS4iCisgICAgZGVmIHRlc3Rfc2hvcnREZXNjcmlwdGlvbl9fc2luZ2xlbGluZV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGRlc2MgPSAidGhpcyB0ZXN0cyBmb28iCisgICAgICAgIHRlc3QgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSwgZGVzY3JpcHRpb249ZGVzYykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3Quc2hvcnREZXNjcmlwdGlvbigpLCAidGhpcyB0ZXN0cyBmb28iKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2xvYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2UzMWE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTAsMCArMSwxMjkyIEBACitpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKKworCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X1Rlc3RMb2FkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKKworICAgICMgIlJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIFRlc3RDYXNlLWRlcml2ZWQKKyAgICAjIGNsYXNzIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgTWFrZSBzdXJlIGl0IGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGV2ZW4gaWYgbm8gdGVzdHMgd2VyZSBmb3VuZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21UZXN0Q2FzZV9fbm9fbWF0Y2hlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiBmb29fYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgZW1wdHlfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoRm9vKSwgZW1wdHlfc3VpdGUpCisKKyAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCisgICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBpcyBnaXZlbiBhbiBvYmplY3QKKyAgICAjIHRoYXQgaXNuJ3QgYSBzdWJjbGFzcyBvZiBUZXN0Q2FzZT8gU3BlY2lmaWNhbGx5LCB3aGF0IGhhcHBlbnMKKyAgICAjIGlmIHRlc3RDYXNlQ2xhc3MgaXMgYSBzdWJjbGFzcyBvZiBUZXN0U3VpdGU/CisgICAgIworICAgICMgVGhpcyBpcyBjaGVja2VkIGZvciBzcGVjaWZpY2FsbHkgaW4gdGhlIGNvZGUsIHNvIHdlIGJldHRlciBhZGQgYQorICAgICMgdGVzdCBmb3IgaXQuCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19UZXN0U3VpdGVfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5vdEFUZXN0Q2FzZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE5vdEFUZXN0Q2FzZSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnU2hvdWxkIHJhaXNlIFR5cGVFcnJvcicpCisKKyAgICAjICJSZXR1cm4gYSBzdWl0ZSBvZiBhbGwgdGVzdHMgY2FzZXMgY29udGFpbmVkIGluIHRoZSBUZXN0Q2FzZS1kZXJpdmVkCisgICAgIyBjbGFzcyB0ZXN0Q2FzZUNsYXNzIgorICAgICMKKyAgICAjIE1ha2Ugc3VyZSBsb2FkVGVzdHNGcm9tVGVzdENhc2UoKSBwaWNrcyB1cCB0aGUgZGVmYXVsdCB0ZXN0IG1ldGhvZAorICAgICMgbmFtZSAoYXMgc3BlY2lmaWVkIGJ5IFRlc3RDYXNlKSwgZXZlbiB0aG91Z2ggdGhlIG1ldGhvZCBuYW1lIGRvZXMKKyAgICAjIG5vdCBtYXRjaCB0aGUgZGVmYXVsdCBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXggc3RyaW5nCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbVRlc3RDYXNlX19kZWZhdWx0X21ldGhvZF9uYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1blRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICAjIFRoaXMgaGFzIHRvIGJlIGZhbHNlIGZvciB0aGUgdGVzdCB0byBzdWNjZWVkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ3J1blRlc3QnLnN0YXJ0c3dpdGgobG9hZGVyLnRlc3RNZXRob2RQcmVmaXgpKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtGb28oJ3J1blRlc3QnKV0pCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbTXlUZXN0Q2FzZSgndGVzdCcpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIGV4cGVjdGVkKQorCisgICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBubyB0ZXN0cyBhcmUgZm91bmQgKG5vIFRlc3RDYXNlIGluc3RhbmNlcyk/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm9fVGVzdENhc2VfaW5zdGFuY2VzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCisKKyAgICAjICJUaGlzIG1ldGhvZCBzZWFyY2hlcyBgbW9kdWxlYCBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gVGVzdENhc2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIG5vIHRlc3RzIGFyZSBmb3VuZCAoVGVzdENhc2VzIGluc3RhbmNlcywgYnV0IG5vIHRlc3RzKT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTW9kdWxlX19ub19UZXN0Q2FzZV90ZXN0cyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW2xvYWRlci5zdWl0ZUNsYXNzKCldKQorCisgICAgIyAiVGhpcyBtZXRob2Qgc2VhcmNoZXMgYG1vZHVsZWAgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tIFRlc3RDYXNlInMKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgaWYgbG9hZFRlc3RzRnJvbU1vZHVsZSgpIGlzIGdpdmVuIHNvbWV0aGluZyBvdGhlcgorICAgICMgdGhhbiBhIG1vZHVsZT8KKyAgICAjCisgICAgIyBYWFggQ3VycmVudGx5LCBpdCBzdWNjZWVkcyBhbnl3YXkuIFRoaXMgZmxleGliaWxpdHkKKyAgICAjIHNob3VsZCBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBsb2FkVGVzdHNGcm9tTW9kdWxlKCkgc2hvdWxkCisgICAgIyByYWlzZSBhIFR5cGVFcnJvcgorICAgICMKKyAgICAjIFhYWCBDZXJ0YWluIHBlb3BsZSBhcmUgdXNpbmcgdGhpcyBiZWhhdmlvdXIuIFdlJ2xsIGFkZCBhIHRlc3QgZm9yIGl0CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU1vZHVsZV9fbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoTm90QU1vZHVsZSkKKworICAgICAgICByZWZlcmVuY2UgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgcmVmZXJlbmNlKQorCisKKyAgICAjIENoZWNrIHRoYXQgbG9hZFRlc3RzRnJvbU1vZHVsZSBob25vcnMgKG9yIG5vdCkgYSBtb2R1bGUKKyAgICAjIHdpdGggYSBsb2FkX3Rlc3RzIGZ1bmN0aW9uLgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX2xvYWRfdGVzdHMoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHRlc3RzLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ZXN0cywgdW5pdHRlc3QuVGVzdFN1aXRlKQorICAgICAgICAgICAgbG9hZF90ZXN0c19hcmdzLmV4dGVuZCgobG9hZGVyLCB0ZXN0cywgcGF0dGVybikpCisgICAgICAgICAgICByZXR1cm4gdGVzdHMKKyAgICAgICAgbS5sb2FkX3Rlc3RzID0gbG9hZF90ZXN0cworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgdW5pdHRlc3QuVGVzdFN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRfdGVzdHNfYXJncywgW2xvYWRlciwgc3VpdGUsIE5vbmVdKQorCisgICAgICAgIGxvYWRfdGVzdHNfYXJncyA9IFtdCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobSwgdXNlX2xvYWRfdGVzdHM9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZF90ZXN0c19hcmdzLCBbXSkKKworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21Nb2R1bGVfX2ZhdWx0eV9sb2FkX3Rlc3RzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisKKyAgICAgICAgZGVmIGxvYWRfdGVzdHMobG9hZGVyLCB0ZXN0cywgcGF0dGVybik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3NvbWUgZmFpbHVyZScpCisgICAgICAgIG0ubG9hZF90ZXN0cyA9IGxvYWRfdGVzdHMKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICB0ZXN0ID0gbGlzdChzdWl0ZSlbMF0KKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInNvbWUgZmFpbHVyZSIsIHRlc3QubSkKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCkKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIElzIFZhbHVlRXJyb3IgcmFpc2VkIGluIHJlc3BvbnNlIHRvIGFuIGVtcHR5IG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX2VtcHR5X25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnJykKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiRW1wdHkgbW9kdWxlIG5hbWUiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgVmFsdWVFcnJvciBvciBJbXBvcnRFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdhYmMgKCkgLy8nKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0byBhCisgICAgIyBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gYSBtb2R1bGUgYnkgdGhhdCBuYW1lIGNhbid0IGJlIGZvdW5kPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicpCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgSW1wb3J0RXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB0aGUgbW9kdWxlIGlzIGZvdW5kLCBidXQgdGhlIGF0dHJpYnV0ZSBjYW4ndD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fdW5rbm93bl9hdHRyX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJykKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiB3ZSBwcm92aWRlIHRoZSBtb2R1bGUsIGJ1dCB0aGUgYXR0cmlidXRlIGNhbid0IGJlCisgICAgIyBmb3VuZD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdW5rbm93bl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3NkYXNmYXNmYXNkZicsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAiJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ3NkYXNmYXNmYXNkZiciKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lIHJhaXNlIFZhbHVlRXJyb3Igd2hlbiBwYXNzZWQgYW4gZW1wdHkKKyAgICAjIG5hbWUgcmVsYXRpdmUgdG8gYSBwcm92aWRlZCBtb2R1bGU/CisgICAgIworICAgICMgWFhYIFNob3VsZCBwcm9iYWJseSByYWlzZSBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBBdHRyaWJ1dGVFcnJvcgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJycsIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIGFuIGltcG9zc2libGUgbmFtZSBpcyBnaXZlbiwgcmVsYXRpdmUgdG8gdGhlIHByb3ZpZGVkCisgICAgIyBgbW9kdWxlYD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfbWFsZm9ybWVkX25hbWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIEF0dHJpYnV0ZUVycm9yIG9yIFZhbHVlRXJyb3I/CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnYWJjICgpIC8vJywgdW5pdHRlc3QpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lIHJhaXNlIFR5cGVFcnJvciB3aGVuIHRoZSBgbW9kdWxlYCBhcmd1bWVudAorICAgICMgaXNuJ3QgYSBtb2R1bGUgb2JqZWN0PworICAgICMKKyAgICAjIFhYWCBBY2NlcHRzIHRoZSBub3QtYS1tb2R1bGUgb2JqZWN0LCBpZ25vcm5pbmcgdGhlIG9iamVjdCdzIHR5cGUKKyAgICAjIFRoaXMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciB0aGUgbWV0aG9kIG5hbWUgc2hvdWxkIGJlIGNoYW5nZWQKKyAgICAjCisgICAgIyBYWFggU29tZSBwZW9wbGUgYXJlIHJlbHlpbmcgb24gdGhpcywgc28ga2VlcCBpdCBmb3Igbm93CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVfX3JlbGF0aXZlX25vdF9hX21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTm90QU1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgdGVzdF8yID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdF8yJywgTm90QU1vZHVsZSkKKworICAgICAgICByZWZlcmVuY2UgPSBbTXlUZXN0Q2FzZSgndGVzdCcpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKKyAgICAjIG9iamVjdD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfYmFkX29iamVjdChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBtLnRlc3RjYXNlXzEgPSBvYmplY3QoKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RjYXNlXzEnLCBtKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heQorICAgICMgcmVzb2x2ZSBlaXRoZXIgdG8gLi4uIGEgdGVzdCBjYXNlIGNsYXNzIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV9UZXN0Q2FzZV9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMScsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3Rlc3RzdWl0ZScsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW015VGVzdENhc2UoJ3Rlc3QnKV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfdGVzdG1ldGhvZChzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gTXlUZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0JywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgRG9lcyBsb2FkVGVzdHNGcm9tTmFtZSgpIHJhaXNlIHRoZSBwcm9wZXIgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvCisgICAgIyByZXNvbHZlICJhIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIgdGhhdCBkb2Vzbid0IGV4aXN0CisgICAgIyBmb3IgdGhlIGdpdmVuIG5hbWUgKHJlbGF0aXZlIHRvIGEgcHJvdmlkZWQgbW9kdWxlKT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fcmVsYXRpdmVfaW52YWxpZF90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0Zm9vJywgbSkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgInR5cGUgb2JqZWN0ICdNeVRlc3RDYXNlJyBoYXMgbm8gYXR0cmlidXRlICd0ZXN0Zm9vJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgLi4uIFRlc3RTdWl0ZSBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKKyAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdyZXR1cm5fVGVzdFN1aXRlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhIFRlc3RDYXNlIC4uLiBpbnN0YW5jZSIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKKyAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ3JldHVybl9UZXN0Q2FzZScsIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt0ZXN0Y2FzZV8xXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSAuLi4gaW5zdGFuY2UiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fVGVzdENhc2VfaW5zdGFuY2VfUHJvcGVyU3VpdGVDbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU3ViVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RTdWl0ZSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgdGVzdGNhc2VfMSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBkZWYgcmV0dXJuX1Rlc3RDYXNlKCk6CisgICAgICAgICAgICByZXR1cm4gdGVzdGNhc2VfMQorICAgICAgICBtLnJldHVybl9UZXN0Q2FzZSA9IHJldHVybl9UZXN0Q2FzZQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IFN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX1Rlc3RDYXNlJywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RjYXNlXzFdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgI092ZXJyaWRlIHRoZSBzdWl0ZUNsYXNzIGF0dHJpYnV0ZSB0byBlbnN1cmUgdGhhdCB0aGUgc3VpdGVDbGFzcworICAgICNhdHRyaWJ1dGUgaXMgdXNlZAorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19yZWxhdGl2ZV90ZXN0bWV0aG9kX1Byb3BlclN1aXRlQ2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFN1YlRlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzPVN1YlRlc3RTdWl0ZQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgndGVzdGNhc2VfMS50ZXN0JywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoZSBjYWxsYWJsZSByZXR1cm5zIHNvbWV0aGluZyBlbHNlPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgncmV0dXJuX3dyb25nJywgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgY2FuIHJlZmVyIHRvIG1vZHVsZXMgYW5kIHBhY2thZ2VzIHdoaWNoIGhhdmUgbm90IGJlZW4KKyAgICAjIGltcG9ydGVkOyB0aGV5IHdpbGwgYmUgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZV9fbW9kdWxlX25vdF9sb2FkZWQoc2VsZik6CisgICAgICAgICMgV2UncmUgZ29pbmcgdG8gdHJ5IHRvIGxvYWQgdGhpcyBtb2R1bGUgYXMgYSBzaWRlLWVmZmVjdCwgc28gaXQKKyAgICAgICAgIyBiZXR0ZXIgbm90IGJlIGxvYWRlZCBiZWZvcmUgd2UgdHJ5LgorICAgICAgICAjCisgICAgICAgIG1vZHVsZV9uYW1lID0gJ3VuaXR0ZXN0LnRlc3QuZHVtbXknCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChtb2R1bGVfbmFtZSwgTm9uZSkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUobW9kdWxlX25hbWUpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbXSkKKworICAgICAgICAgICAgIyBtb2R1bGUgc2hvdWxkIG5vdyBiZSBsb2FkZWQsIHRoYW5rcyB0byBsb2FkVGVzdHNGcm9tTmFtZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZV9uYW1lLCBzeXMubW9kdWxlcykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIG1vZHVsZV9uYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgVGVzdHMgZm9yIFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcygpCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiU2ltaWxhciB0byBsb2FkVGVzdHNGcm9tTmFtZSgpLCBidXQgdGFrZXMgYSBzZXF1ZW5jZSBvZiBuYW1lcyByYXRoZXIKKyAgICAjIHRoYW4gYSBzaW5nbGUgbmFtZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19lbXB0eV9uYW1lX2xpc3Qoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW10pCisKKyAgICAjICJTaW1pbGFyIHRvIGxvYWRUZXN0c0Zyb21OYW1lKCksIGJ1dCB0YWtlcyBhIHNlcXVlbmNlIG9mIG5hbWVzIHJhdGhlcgorICAgICMgdGhhbiBhIHNpbmdsZSBuYW1lLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIGlmIHRoYXQgc2VxdWVuY2Ugb2YgbmFtZXMgaXMgZW1wdHk/CisgICAgIworICAgICMgWFhYIFNob3VsZCB0aGlzIHJhaXNlIGEgVmFsdWVFcnJvciBvciBqdXN0IHJldHVybiBhbiBlbXB0eSBUZXN0U3VpdGU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lX2xpc3Qoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbXSwgdW5pdHRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjCisgICAgIyBJcyBWYWx1ZUVycm9yIHJhaXNlZCBpbiByZXNwb25zZSB0byBhbiBlbXB0eSBuYW1lPworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fZW1wdHlfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJyddKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJFbXB0eSBtb2R1bGUgbmFtZSIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gcHJlc2VudGVkIHdpdGggYW4gaW1wb3NzaWJsZSBtb2R1bGUgbmFtZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX21hbGZvcm1lZF9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICAjIFhYWCBTaG91bGQgdGhpcyByYWlzZSBWYWx1ZUVycm9yIG9yIEltcG9ydEVycm9yPworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnYWJjICgpIC8vJ10pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gbm8gbW9kdWxlIGNhbiBiZSBmb3VuZCBmb3IgdGhlIGdpdmVuIG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX21vZHVsZV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnc2Rhc2Zhc2Zhc2RmJ10pCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICJObyBtb2R1bGUgbmFtZWQgc2Rhc2Zhc2Zhc2RmIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIEltcG9ydEVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQsIGJ1dCBub3QgdGhlIGF0dHJpYnV0ZT8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3Vua25vd25fYXR0cl9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsndW5pdHRlc3Quc2Rhc2Zhc2Zhc2RmJywgJ3VuaXR0ZXN0J10pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZSksICInbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2Rhc2Zhc2Zhc2RmJyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIlRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzIGZhaWxlZCB0byByYWlzZSBBdHRyaWJ1dGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMgLi4uCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBXaGF0IGhhcHBlbnMgd2hlbiBnaXZlbiBhbiB1bmtub3duIGF0dHJpYnV0ZSBvbiBhIHNwZWNpZmllZCBgbW9kdWxlYAorICAgICMgYXJndW1lbnQ/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgRG8gdW5rbm93biBhdHRyaWJ1dGVzIChyZWxhdGl2ZSB0byBhIHByb3ZpZGVkIG1vZHVsZSkgc3RpbGwgcmFpc2UgYW4KKyAgICAjIGV4Y2VwdGlvbiBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB2YWxpZCBhdHRyaWJ1dGUgbmFtZXM/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX191bmtub3duX25hbWVfcmVsYXRpdmVfMihzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ1Rlc3RDYXNlJywgJ3NkYXNmYXNmYXNkZiddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIidtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzZGFzZmFzZmFzZGYnIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSBmYWlsZWQgdG8gcmFpc2UgQXR0cmlidXRlRXJyb3IiKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgZWl0aGVyIHRvCisgICAgIyBhIG1vZHVsZSwgYSB0ZXN0IGNhc2UgY2xhc3MsIGEgVGVzdFN1aXRlIGluc3RhbmNlLCBhIHRlc3QgbWV0aG9kCisgICAgIyB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MsIG9yIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYQorICAgICMgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlLiIKKyAgICAjIC4uLgorICAgICMgIlRoZSBtZXRob2Qgb3B0aW9uYWxseSByZXNvbHZlcyBuYW1lIHJlbGF0aXZlIHRvIHRoZSBnaXZlbiBtb2R1bGUiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gZmFjZWQgd2l0aCB0aGUgZW1wdHkgc3RyaW5nPworICAgICMKKyAgICAjIFhYWCBUaGlzIGN1cnJlbnRseSByYWlzZXMgQXR0cmlidXRlRXJyb3IsIHRob3VnaCBWYWx1ZUVycm9yIGlzIHByb2JhYmx5CisgICAgIyBtb3JlIGFwcHJvcHJpYXRlCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9lbXB0eV9uYW1lKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnJ10sIHVuaXR0ZXN0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBWYWx1ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIGVpdGhlciB0bworICAgICMgYSBtb2R1bGUsIGEgdGVzdCBjYXNlIGNsYXNzLCBhIFRlc3RTdWl0ZSBpbnN0YW5jZSwgYSB0ZXN0IG1ldGhvZAorICAgICMgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzLCBvciBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEKKyAgICAjIFRlc3RDYXNlIG9yIFRlc3RTdWl0ZSBpbnN0YW5jZS4iCisgICAgIyAuLi4KKyAgICAjICJUaGUgbWV0aG9kIG9wdGlvbmFsbHkgcmVzb2x2ZXMgbmFtZSByZWxhdGl2ZSB0byB0aGUgZ2l2ZW4gbW9kdWxlIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIGltcG9zc2libGUgYXR0cmlidXRlIG5hbWU/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9tYWxmb3JtZWRfbmFtZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisKKyAgICAgICAgIyBYWFggU2hvdWxkIHRoaXMgcmFpc2UgQXR0cmlidXRlRXJyb3Igb3IgVmFsdWVFcnJvcj8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ2FiYyAoKSAvLyddLCB1bml0dGVzdCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFZhbHVlRXJyb3IiKQorCisgICAgIyAiVGhlIG1ldGhvZCBvcHRpb25hbGx5IHJlc29sdmVzIG5hbWUgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIG1vZHVsZSIKKyAgICAjCisgICAgIyBEb2VzIGxvYWRUZXN0c0Zyb21OYW1lcygpIG1ha2Ugc3VyZSB0aGUgcHJvdmlkZWQgYG1vZHVsZWAgaXMgaW4gZmFjdAorICAgICMgYSBtb2R1bGU/CisgICAgIworICAgICMgWFhYIFRoaXMgdmFsaWRhdGlvbiBpcyBjdXJyZW50bHkgbm90IGRvbmUuIFRoaXMgZmxleGliaWxpdHkgc2hvdWxkCisgICAgIyBlaXRoZXIgYmUgZG9jdW1lbnRlZCBvciBhIFR5cGVFcnJvciBzaG91bGQgYmUgcmFpc2VkLgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fcmVsYXRpdmVfbm90X2FfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBOb3RBTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICB0ZXN0XzIgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RfMiddLCBOb3RBTW9kdWxlKQorCisgICAgICAgIHJlZmVyZW5jZSA9IFt1bml0dGVzdC5UZXN0U3VpdGUoW015VGVzdENhc2UoJ3Rlc3QnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCByZWZlcmVuY2UpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSBlaXRoZXIgdG8KKyAgICAjIGEgbW9kdWxlLCBhIHRlc3QgY2FzZSBjbGFzcywgYSBUZXN0U3VpdGUgaW5zdGFuY2UsIGEgdGVzdCBtZXRob2QKKyAgICAjIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcywgb3IgYSBjYWxsYWJsZSBvYmplY3Qgd2hpY2ggcmV0dXJucyBhCisgICAgIyBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UuIgorICAgICMKKyAgICAjIERvZXMgaXQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBuYW1lIHJlc29sdmVzIHRvIGFuIGludmFsaWQKKyAgICAjIG9iamVjdD8KKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX2JhZF9vYmplY3Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgbS50ZXN0Y2FzZV8xID0gb2JqZWN0KCkKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICBkZWYgdGVzdF9sb2FkVGVzdHNGcm9tTmFtZXNfX3JlbGF0aXZlX1Rlc3RDYXNlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IGxvYWRlci5zdWl0ZUNsYXNzKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbZXhwZWN0ZWRdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvCisgICAgIyAuLi4gYSBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9UZXN0U3VpdGUoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtNeVRlc3RDYXNlKCd0ZXN0JyldKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWyd0ZXN0c3VpdGUnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbbS50ZXN0c3VpdGVdKQorCisgICAgIyAiVGhlIHNwZWNpZmllciBuYW1lIGlzIGEgYGBkb3R0ZWQgbmFtZScnIHRoYXQgbWF5IHJlc29sdmUgLi4uIHRvIC4uLiBhCisgICAgIyB0ZXN0IG1ldGhvZCB3aXRoaW4gYSB0ZXN0IGNhc2UgY2xhc3MiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV90ZXN0bWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIE15VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBtLnRlc3RjYXNlXzEgPSBNeVRlc3RDYXNlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdCddLCBtKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3VpdGUsIGxvYWRlci5zdWl0ZUNsYXNzKQorCisgICAgICAgIHJlZl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbTXlUZXN0Q2FzZSgndGVzdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8gLi4uIGEKKyAgICAjIHRlc3QgbWV0aG9kIHdpdGhpbiBhIHRlc3QgY2FzZSBjbGFzcyIKKyAgICAjCisgICAgIyBEb2VzIHRoZSBtZXRob2QgZ3JhY2VmdWxseSBoYW5kbGUgbmFtZXMgdGhhdCBpbml0aWFsbHkgbG9vayBsaWtlIHRoZXkKKyAgICAjIHJlc29sdmUgdG8gImEgdGVzdCBtZXRob2Qgd2l0aGluIGEgdGVzdCBjYXNlIGNsYXNzIiBidXQgZG9uJ3Q/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19yZWxhdGl2ZV9pbnZhbGlkX3Rlc3RtZXRob2Qoc2VsZik6CisgICAgICAgIG0gPSB0eXBlcy5Nb2R1bGVUeXBlKCdtJykKKyAgICAgICAgY2xhc3MgTXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIG0udGVzdGNhc2VfMSA9IE15VGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3Rlc3RjYXNlXzEudGVzdGZvbyddLCBtKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGUpLCAidHlwZSBvYmplY3QgJ015VGVzdENhc2UnIGhhcyBubyBhdHRyaWJ1dGUgJ3Rlc3Rmb28nIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiRmFpbGVkIHRvIHJhaXNlIEF0dHJpYnV0ZUVycm9yIikKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSAuLi4gVGVzdFN1aXRlIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICB0ZXN0Y2FzZV8xID0gdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisgICAgICAgIHRlc3RjYXNlXzIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0U3VpdGUoKToKKyAgICAgICAgICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzEsIHRlc3RjYXNlXzJdKQorICAgICAgICBtLnJldHVybl9UZXN0U3VpdGUgPSByZXR1cm5fVGVzdFN1aXRlCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ3JldHVybl9UZXN0U3VpdGUnXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICBleHBlY3RlZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdGNhc2VfMSwgdGVzdGNhc2VfMl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFtleHBlY3RlZF0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2UgLi4uIGluc3RhbmNlIgorICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX1Rlc3RDYXNlX2luc3RhbmNlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIHRlc3RjYXNlXzEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgZGVmIHJldHVybl9UZXN0Q2FzZSgpOgorICAgICAgICAgICAgcmV0dXJuIHRlc3RjYXNlXzEKKyAgICAgICAgbS5yZXR1cm5fVGVzdENhc2UgPSByZXR1cm5fVGVzdENhc2UKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsncmV0dXJuX1Rlc3RDYXNlJ10sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWl0ZSwgbG9hZGVyLnN1aXRlQ2xhc3MpCisKKyAgICAgICAgcmVmX3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0Y2FzZV8xXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3JlZl9zdWl0ZV0pCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIG5hbWUgaXMgYSBgYGRvdHRlZCBuYW1lJycgdGhhdCBtYXkgcmVzb2x2ZSAuLi4gdG8KKyAgICAjIC4uLiBhIGNhbGxhYmxlIG9iamVjdCB3aGljaCByZXR1cm5zIGEgVGVzdENhc2Ugb3IgVGVzdFN1aXRlIGluc3RhbmNlIgorICAgICMKKyAgICAjIEFyZSBzdGF0aWNtZXRob2RzIGhhbmRsZWQgY29ycmVjdGx5PworICAgIGRlZiB0ZXN0X2xvYWRUZXN0c0Zyb21OYW1lc19fY2FsbGFibGVfX2NhbGxfc3RhdGljbWV0aG9kKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIFRlc3QxKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0Y2FzZV8xID0gVGVzdDEoJ3Rlc3QnKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0Y2FzZV8xCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHN1aXRlID0gbG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0Zvby5mb28nXSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKworICAgICAgICByZWZfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RjYXNlXzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbcmVmX3N1aXRlXSkKKworICAgICMgIlRoZSBzcGVjaWZpZXIgbmFtZSBpcyBhIGBgZG90dGVkIG5hbWUnJyB0aGF0IG1heSByZXNvbHZlIC4uLiB0bworICAgICMgLi4uIGEgY2FsbGFibGUgb2JqZWN0IHdoaWNoIHJldHVybnMgYSBUZXN0Q2FzZSBvciBUZXN0U3VpdGUgaW5zdGFuY2UiCisgICAgIworICAgICMgV2hhdCBoYXBwZW5zIHdoZW4gdGhlIGNhbGxhYmxlIHJldHVybnMgc29tZXRoaW5nIGVsc2U/CisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19jYWxsYWJsZV9fd3JvbmdfdHlwZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBkZWYgcmV0dXJuX3dyb25nKCk6CisgICAgICAgICAgICByZXR1cm4gNgorICAgICAgICBtLnJldHVybl93cm9uZyA9IHJldHVybl93cm9uZworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoWydyZXR1cm5fd3JvbmcnXSwgbSkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMgZmFpbGVkIHRvIHJhaXNlIFR5cGVFcnJvciIpCisKKyAgICAjICJUaGUgc3BlY2lmaWVyIGNhbiByZWZlciB0byBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aGljaCBoYXZlIG5vdCBiZWVuCisgICAgIyBpbXBvcnRlZDsgdGhleSB3aWxsIGJlIGltcG9ydGVkIGFzIGEgc2lkZS1lZmZlY3QiCisgICAgZGVmIHRlc3RfbG9hZFRlc3RzRnJvbU5hbWVzX19tb2R1bGVfbm90X2xvYWRlZChzZWxmKToKKyAgICAgICAgIyBXZSdyZSBnb2luZyB0byB0cnkgdG8gbG9hZCB0aGlzIG1vZHVsZSBhcyBhIHNpZGUtZWZmZWN0LCBzbyBpdAorICAgICAgICAjIGJldHRlciBub3QgYmUgbG9hZGVkIGJlZm9yZSB3ZSB0cnkuCisgICAgICAgICMKKyAgICAgICAgbW9kdWxlX25hbWUgPSAndW5pdHRlc3QudGVzdC5kdW1teScKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKG1vZHVsZV9uYW1lLCBOb25lKQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZSA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoW21vZHVsZV9uYW1lXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN1aXRlLCBsb2FkZXIuc3VpdGVDbGFzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzdWl0ZSksIFt1bml0dGVzdC5UZXN0U3VpdGUoKV0pCisKKyAgICAgICAgICAgICMgbW9kdWxlIHNob3VsZCBub3cgYmUgbG9hZGVkLCB0aGFua3MgdG8gbG9hZFRlc3RzRnJvbU5hbWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBtb2R1bGVfbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tTmFtZXMoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoKQorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgVGVzdC5mb29iYXIgaXMgZGVmaW5lZCB0byBtYWtlIHN1cmUgZ2V0VGVzdENhc2VOYW1lcygpIHJlc3BlY3RzCisgICAgIyBsb2FkZXIudGVzdE1ldGhvZFByZWZpeAorICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXMoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdCksIFsndGVzdF8xJywgJ3Rlc3RfMiddKQorCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBEb2VzIGdldFRlc3RDYXNlTmFtZXMoKSBiZWhhdmUgYXBwcm9wcmlhdGVseSBpZiBubyB0ZXN0cyBhcmUgZm91bmQ/CisgICAgZGVmIHRlc3RfZ2V0VGVzdENhc2VOYW1lc19fbm9fdGVzdHMoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIGZvb2JhcihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdCksIFtdKQorCisgICAgIyAiUmV0dXJuIGEgc29ydGVkIHNlcXVlbmNlIG9mIG1ldGhvZCBuYW1lcyBmb3VuZCB3aXRoaW4gdGVzdENhc2VDbGFzcyIKKyAgICAjCisgICAgIyBBcmUgbm90LVRlc3RDYXNlcyBoYW5kbGVkIGdyYWNlZnVsbHk/CisgICAgIworICAgICMgWFhYIFRoaXMgc2hvdWxkIHJhaXNlIGEgVHlwZUVycm9yLCBub3QgcmV0dXJuIGEgbGlzdAorICAgICMKKyAgICAjIFhYWCBJdCdzIHRvbyBsYXRlIGluIHRoZSAyLjUgcmVsZWFzZSBjeWNsZSB0byBmaXggdGhpcywgYnV0IGl0IHNob3VsZAorICAgICMgcHJvYmFibHkgYmUgcmV2aXNpdGVkIGZvciAyLjYKKyAgICBkZWYgdGVzdF9nZXRUZXN0Q2FzZU5hbWVzX19ub3RfYV9UZXN0Q2FzZShzZWxmKToKKyAgICAgICAgY2xhc3MgQmFkQ2FzZShpbnQpOgorICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbmFtZXMgPSBsb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyhCYWRDYXNlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZXMsIFsndGVzdF9mb28nXSkKKworICAgICMgIlJldHVybiBhIHNvcnRlZCBzZXF1ZW5jZSBvZiBtZXRob2QgbmFtZXMgZm91bmQgd2l0aGluIHRlc3RDYXNlQ2xhc3MiCisgICAgIworICAgICMgTWFrZSBzdXJlIGluaGVyaXRlZCBuYW1lcyBhcmUgaGFuZGxlZC4KKyAgICAjCisgICAgIyBUZXN0UC5mb29iYXIgaXMgZGVmaW5lZCB0byBtYWtlIHN1cmUgZ2V0VGVzdENhc2VOYW1lcygpIHJlc3BlY3RzCisgICAgIyBsb2FkZXIudGVzdE1ldGhvZFByZWZpeAorICAgIGRlZiB0ZXN0X2dldFRlc3RDYXNlTmFtZXNfX2luaGVyaXRhbmNlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0UCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vYmFyKHNlbGYpOiBwYXNzCisKKyAgICAgICAgY2xhc3MgVGVzdEMoVGVzdFApOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMyhzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIG5hbWVzID0gWyd0ZXN0XzEnLCAndGVzdF8yJywgJ3Rlc3RfMyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoVGVzdEMpLCBuYW1lcykKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1Rlc3RzIGZvciBUZXN0TG9hZGVyLmdldFRlc3RDYXNlTmFtZXMoKQorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnRlc3RNZXRob2RQcmVmaXgKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKKyAgICAjIHRlc3QgbWV0aG9kcyIKKyAgICAjCisgICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5CisgICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KKyAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSkKKyAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzXzIpCisKKyAgICAjICJTdHJpbmcgZ2l2aW5nIHRoZSBwcmVmaXggb2YgbWV0aG9kIG5hbWVzIHdoaWNoIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMKKyAgICAjIHRlc3QgbWV0aG9kcyIKKyAgICAjCisgICAgIyBJbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBpcyB0aGF0IHRlc3RNZXRob2RQcmVmaXggaXMgcmVzcGVjdGVkIGJ5CisgICAgIyBhbGwgbG9hZFRlc3RzRnJvbSogbWV0aG9kcy4KKyAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19sb2FkVGVzdHNGcm9tTW9kdWxlKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzXzEgPSBbdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ2Zvb19iYXInKV0pXQorICAgICAgICB0ZXN0c18yID0gW3VuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIudGVzdE1ldGhvZFByZWZpeCA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzXzEpCisKKyAgICAgICAgbG9hZGVyLnRlc3RNZXRob2RQcmVmaXggPSAndGVzdCcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pKSwgdGVzdHNfMikKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzXzEgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSkKKyAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWUoJ0ZvbycsIG0pLCB0ZXN0c18xKQorCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKCdGb28nLCBtKSwgdGVzdHNfMikKKworICAgICMgIlN0cmluZyBnaXZpbmcgdGhlIHByZWZpeCBvZiBtZXRob2QgbmFtZXMgd2hpY2ggd2lsbCBiZSBpbnRlcnByZXRlZCBhcworICAgICMgdGVzdCBtZXRob2RzIgorICAgICMKKyAgICAjIEltcGxpY2l0IGluIHRoZSBkb2N1bWVudGF0aW9uIGlzIHRoYXQgdGVzdE1ldGhvZFByZWZpeCBpcyByZXNwZWN0ZWQgYnkKKyAgICAjIGFsbCBsb2FkVGVzdHNGcm9tKiBtZXRob2RzLgorICAgIGRlZiB0ZXN0X3Rlc3RNZXRob2RQcmVmaXhfX2xvYWRUZXN0c0Zyb21OYW1lcyhzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0c18xID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygnZm9vX2JhcicpXSldKQorICAgICAgICB0ZXN0c18yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXSkKKyAgICAgICAgdGVzdHNfMiA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdHNfMl0pCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ2ZvbycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKFsnRm9vJ10sIG0pLCB0ZXN0c18xKQorCisgICAgICAgIGxvYWRlci50ZXN0TWV0aG9kUHJlZml4ID0gJ3Rlc3QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHNfMikKKworICAgICMgIlRoZSBkZWZhdWx0IHZhbHVlIGlzICd0ZXN0JyIKKyAgICBkZWYgdGVzdF90ZXN0TWV0aG9kUHJlZml4X19kZWZhdWx0X3ZhbHVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIudGVzdE1ldGhvZFByZWZpeCwgJ3Rlc3QnKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RMb2FkZXIudGVzdE1ldGhvZFByZWZpeAorCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC0oKHggPiB5KSAtICh4IDwgeSkpCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0XzIoc2VsZik6IHBhc3MKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnNvcnRUZXN0TWV0aG9kc1VzaW5nID0gcmV2ZXJzZWRfY21wCisKKyAgICAgICAgdGVzdHMgPSBsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShGb28pLCB0ZXN0cykKKworICAgICMgIkZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gY29tcGFyZSBtZXRob2QgbmFtZXMgd2hlbiBzb3J0aW5nIHRoZW0gaW4KKyAgICAjIGdldFRlc3RDYXNlTmFtZXMoKSBhbmQgYWxsIHRoZSBsb2FkVGVzdHNGcm9tWCgpIG1ldGhvZHMiCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2xvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLSgoeCA+IHkpIC0gKHggPCB5KSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gW2xvYWRlci5zdWl0ZUNsYXNzKFtGb28oJ3Rlc3RfMicpLCBGb28oJ3Rlc3RfMScpXSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWUoc2VsZik6CisgICAgICAgIGRlZiByZXZlcnNlZF9jbXAoeCwgeSk6CisgICAgICAgICAgICByZXR1cm4gLSgoeCA+IHkpIC0gKHggPCB5KSkKKworICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgIG0uRm9vID0gRm9vCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RzID0gbG9hZGVyLnN1aXRlQ2xhc3MoW0ZvbygndGVzdF8yJyksIEZvbygndGVzdF8xJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIGFuZCBhbGwgdGhlIGxvYWRUZXN0c0Zyb21YKCkgbWV0aG9kcyIKKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBkZWYgcmV2ZXJzZWRfY21wKHgsIHkpOgorICAgICAgICAgICAgcmV0dXJuIC0oKHggPiB5KSAtICh4IDwgeSkpCisKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSByZXZlcnNlZF9jbXAKKworICAgICAgICB0ZXN0cyA9IFtsb2FkZXIuc3VpdGVDbGFzcyhbRm9vKCd0ZXN0XzInKSwgRm9vKCd0ZXN0XzEnKV0pXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSksIHRlc3RzKQorCisgICAgIyAiRnVuY3Rpb24gdG8gYmUgdXNlZCB0byBjb21wYXJlIG1ldGhvZCBuYW1lcyB3aGVuIHNvcnRpbmcgdGhlbSBpbgorICAgICMgZ2V0VGVzdENhc2VOYW1lcygpIgorICAgICMKKyAgICAjIERvZXMgaXQgYWN0dWFsbHkgYWZmZWN0IGdldFRlc3RDYXNlTmFtZXMoKT8KKyAgICBkZWYgdGVzdF9zb3J0VGVzdE1ldGhvZHNVc2luZ19fZ2V0VGVzdENhc2VOYW1lcyhzZWxmKToKKyAgICAgICAgZGVmIHJldmVyc2VkX2NtcCh4LCB5KToKKyAgICAgICAgICAgIHJldHVybiAtKCh4ID4geSkgLSAoeCA8IHkpKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZyA9IHJldmVyc2VkX2NtcAorCisgICAgICAgIHRlc3RfbmFtZXMgPSBbJ3Rlc3RfMicsICd0ZXN0XzEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEZvbyksIHRlc3RfbmFtZXMpCisKKyAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYnVpbHQtaW4gY21wKCkgZnVuY3Rpb24iCisgICAgIyBTaW5jZSBjbXAgaXMgbm93IGRlZnVuY3QsIHdlIHNpbXBseSB2ZXJpZnkgdGhhdCB0aGUgcmVzdWx0cworICAgICMgb2NjdXIgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSB3b3VsZCB3aXRoIHRoZSBkZWZhdWx0IHNvcnQuCisgICAgZGVmIHRlc3Rfc29ydFRlc3RNZXRob2RzVXNpbmdfX2RlZmF1bHRfdmFsdWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisKKyAgICAgICAgdGVzdF9uYW1lcyA9IFsndGVzdF8yJywgJ3Rlc3RfMycsICd0ZXN0XzEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEZvbyksIHNvcnRlZCh0ZXN0X25hbWVzKSkKKworCisgICAgIyAiaXQgY2FuIGJlIHNldCB0byBOb25lIHRvIGRpc2FibGUgdGhlIHNvcnQuIgorICAgICMKKyAgICAjIFhYWCBIb3cgaXMgdGhpcyBkaWZmZXJlbnQgZnJvbSByZWFzc2lnbmluZyBjbXA/IEFyZSB0aGUgdGVzdHMgcmV0dXJuZWQKKyAgICAjIGluIGEgcmFuZG9tIG9yZGVyIG9yIHNvbWV0aGluZz8gVGhpcyBiZWhhdmlvdXIgc2hvdWxkIGRpZQorICAgIGRlZiB0ZXN0X3NvcnRUZXN0TWV0aG9kc1VzaW5nX19Ob25lKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc29ydFRlc3RNZXRob2RzVXNpbmcgPSBOb25lCisKKyAgICAgICAgdGVzdF9uYW1lcyA9IFsndGVzdF8yJywgJ3Rlc3RfMSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxvYWRlci5nZXRUZXN0Q2FzZU5hbWVzKEZvbykpLCBzZXQodGVzdF9uYW1lcykpCisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIC9UZXN0cyBmb3IgVGVzdExvYWRlci5zb3J0VGVzdE1ldGhvZHNVc2luZworCisgICAgIyMjIFRlc3RzIGZvciBUZXN0TG9hZGVyLnN1aXRlQ2xhc3MKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjICJDYWxsYWJsZSBvYmplY3QgdGhhdCBjb25zdHJ1Y3RzIGEgdGVzdCBzdWl0ZSBmcm9tIGEgbGlzdCBvZiB0ZXN0cy4iCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbVRlc3RDYXNlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0cyA9IFtGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXQorCisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKEZvbyksIHRlc3RzKQorCisgICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKKyAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU1vZHVsZShzZWxmKToKKyAgICAgICAgbSA9IHR5cGVzLk1vZHVsZVR5cGUoJ20nKQorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIGZvb19iYXIoc2VsZik6IHBhc3MKKyAgICAgICAgbS5Gb28gPSBGb28KKworICAgICAgICB0ZXN0cyA9IFtbRm9vKCd0ZXN0XzEnKSwgRm9vKCd0ZXN0XzInKV1dCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG0pLCB0ZXN0cykKKworICAgICMgSXQgaXMgaW1wbGljaXQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIFRlc3RMb2FkZXIuc3VpdGVDbGFzcyB0aGF0CisgICAgIyBhbGwgVGVzdExvYWRlci5sb2FkVGVzdHNGcm9tKiBtZXRob2RzIHJlc3BlY3QgaXQuIExldCdzIG1ha2Ugc3VyZQorICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2xvYWRUZXN0c0Zyb21OYW1lKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzID0gW0ZvbygndGVzdF8xJyksIEZvbygndGVzdF8yJyldCisKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIGxvYWRlci5zdWl0ZUNsYXNzID0gbGlzdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZSgnRm9vJywgbSksIHRlc3RzKQorCisgICAgIyBJdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgVGVzdExvYWRlci5zdWl0ZUNsYXNzIHRoYXQKKyAgICAjIGFsbCBUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb20qIG1ldGhvZHMgcmVzcGVjdCBpdC4gTGV0J3MgbWFrZSBzdXJlCisgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYpOgorICAgICAgICBtID0gdHlwZXMuTW9kdWxlVHlwZSgnbScpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF8yKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgZm9vX2JhcihzZWxmKTogcGFzcworICAgICAgICBtLkZvbyA9IEZvbworCisgICAgICAgIHRlc3RzID0gW1tGb28oJ3Rlc3RfMScpLCBGb28oJ3Rlc3RfMicpXV0KKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLnN1aXRlQ2xhc3MgPSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lcyhbJ0ZvbyddLCBtKSwgdGVzdHMpCisKKyAgICAjICJUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgVGVzdFN1aXRlIGNsYXNzIgorICAgIGRlZiB0ZXN0X3N1aXRlQ2xhc3NfX2RlZmF1bHRfdmFsdWUoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9hZGVyLnN1aXRlQ2xhc3MgaXMgdW5pdHRlc3QuVGVzdFN1aXRlKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDBmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKQEAgLTAsMCArMSwzNTggQEAKK2ltcG9ydCBpbworCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCisKK2NsYXNzIFRlc3RfVGVzdFByb2dyYW0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGlzY292ZXJ5X2Zyb21fZG90dGVkX3BhdGgoc2VsZik6CisgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorCisgICAgICAgIHRlc3RzID0gW3NlbGZdCisgICAgICAgIGV4cGVjdGVkUGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmRpcm5hbWUodW5pdHRlc3QudGVzdC5fX2ZpbGVfXykpCisKKyAgICAgICAgc2VsZi53YXNSdW4gPSBGYWxzZQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKKyAgICAgICAgICAgIHJldHVybiB0ZXN0cworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcigndW5pdHRlc3QudGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhc1J1bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIHRlc3RzKQorCisgICAgIyBIb3JyaWJsZSB3aGl0ZSBib3ggdGVzdAorICAgIGRlZiB0ZXN0Tm9FeGl0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvYmplY3QoKQorICAgICAgICB0ZXN0ID0gb2JqZWN0KCkKKworICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisKKyAgICAgICAgb2xkUGFyc2VBcmdzID0gdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzCisgICAgICAgIGRlZiByZXN0b3JlUGFyc2VBcmdzKCk6CisgICAgICAgICAgICB1bml0dGVzdC5UZXN0UHJvZ3JhbS5wYXJzZUFyZ3MgPSBvbGRQYXJzZUFyZ3MKKyAgICAgICAgdW5pdHRlc3QuVGVzdFByb2dyYW0ucGFyc2VBcmdzID0gbGFtYmRhICphcmdzOiBOb25lCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlUGFyc2VBcmdzKQorCisgICAgICAgIGRlZiByZW1vdmVUZXN0KCk6CisgICAgICAgICAgICBkZWwgdW5pdHRlc3QuVGVzdFByb2dyYW0udGVzdAorICAgICAgICB1bml0dGVzdC5UZXN0UHJvZ3JhbS50ZXN0ID0gdGVzdAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVtb3ZlVGVzdCkKKworICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QuVGVzdFByb2dyYW0odGVzdFJ1bm5lcj1ydW5uZXIsIGV4aXQ9RmFsc2UsIHZlcmJvc2l0eT0yKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS5yZXN1bHQsIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIudGVzdCwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMikKKworICAgIGNsYXNzIEZvb0Jhcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0UGFzcyhzZWxmKToKKyAgICAgICAgICAgIGFzc2VydCBUcnVlCisgICAgICAgIGRlZiB0ZXN0RmFpbChzZWxmKToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZQorCisgICAgY2xhc3MgRm9vQmFyTG9hZGVyKHVuaXR0ZXN0LlRlc3RMb2FkZXIpOgorICAgICAgICAiIiJUZXN0IGxvYWRlciB0aGF0IHJldHVybnMgYSBzdWl0ZSBjb250YWluaW5nIEZvb0Jhci4iIiIKKyAgICAgICAgZGVmIGxvYWRUZXN0c0Zyb21Nb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3MoCisgICAgICAgICAgICAgICAgW3NlbGYubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3RfVGVzdFByb2dyYW0uRm9vQmFyKV0pCisKKworICAgIGRlZiB0ZXN0X05vbkV4aXQoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5tYWluKGV4aXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Y9WyJmb29iYXIiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09aW8uU3RyaW5nSU8oKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIocHJvZ3JhbSwgJ3Jlc3VsdCcpKQorCisKKyAgICBkZWYgdGVzdF9FeGl0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFN5c3RlbUV4aXQsCisgICAgICAgICAgICB1bml0dGVzdC5tYWluLAorICAgICAgICAgICAgYXJndj1bImZvb2JhciJdLAorICAgICAgICAgICAgdGVzdFJ1bm5lcj11bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihzdHJlYW09aW8uU3RyaW5nSU8oKSksCisgICAgICAgICAgICBleGl0PVRydWUsCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisKKworICAgIGRlZiB0ZXN0X0V4aXRBc0RlZmF1bHQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgU3lzdGVtRXhpdCwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1haW4sCisgICAgICAgICAgICBhcmd2PVsiZm9vYmFyIl0sCisgICAgICAgICAgICB0ZXN0UnVubmVyPXVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpKSwKKyAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKworCitjbGFzcyBJbml0aWFsaXNhYmxlUHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6CisgICAgZXhpdCA9IEZhbHNlCisgICAgcmVzdWx0ID0gTm9uZQorICAgIHZlcmJvc2l0eSA9IDEKKyAgICBkZWZhdWx0VGVzdCA9IE5vbmUKKyAgICB0ZXN0UnVubmVyID0gTm9uZQorICAgIHRlc3RMb2FkZXIgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlcgorICAgIG1vZHVsZSA9ICdfX21haW5fXycKKyAgICBwcm9nTmFtZSA9ICd0ZXN0JworICAgIHRlc3QgPSAndGVzdCcKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKK1JFU1VMVCA9IG9iamVjdCgpCisKK2NsYXNzIEZha2VSdW5uZXIob2JqZWN0KToKKyAgICBpbml0QXJncyA9IE5vbmUKKyAgICB0ZXN0ID0gTm9uZQorICAgIHJhaXNlRXJyb3IgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IGt3YXJncworICAgICAgICBpZiBGYWtlUnVubmVyLnJhaXNlRXJyb3I6CisgICAgICAgICAgICBGYWtlUnVubmVyLnJhaXNlRXJyb3IgPSBGYWxzZQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisKKyAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICBGYWtlUnVubmVyLnRlc3QgPSB0ZXN0CisgICAgICAgIHJldHVybiBSRVNVTFQKKworY2xhc3MgVGVzdENvbW1hbmRMaW5lQXJncyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucHJvZ3JhbSA9IEluaXRpYWxpc2FibGVQcm9ncmFtKCkKKyAgICAgICAgc2VsZi5wcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIEZha2VSdW5uZXIuaW5pdEFyZ3MgPSBOb25lCisgICAgICAgIEZha2VSdW5uZXIudGVzdCA9IE5vbmUKKyAgICAgICAgRmFrZVJ1bm5lci5yYWlzZUVycm9yID0gRmFsc2UKKworICAgIGRlZiB0ZXN0SGVscEFuZFVua25vd24oc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZGVmIHVzYWdlRXhpdChtc2c9Tm9uZSk6CisgICAgICAgICAgICBwcm9ncmFtLm1zZyA9IG1zZworICAgICAgICAgICAgcHJvZ3JhbS5leGl0ID0gVHJ1ZQorICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAorCisgICAgICAgIGZvciBvcHQgaW4gJy1oJywgJy1IJywgJy0taGVscCc6CisgICAgICAgICAgICBwcm9ncmFtLmV4aXQgPSBGYWxzZQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvZ3JhbS5tc2cpCisKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsICctJCddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvZ3JhbS5leGl0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm9ncmFtLm1zZykKKworICAgIGRlZiB0ZXN0VmVyYm9zaXR5KHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgZm9yIG9wdCBpbiAnLXEnLCAnLS1xdWlldCc6CisgICAgICAgICAgICBwcm9ncmFtLnZlcmJvc2l0eSA9IDEKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnZlcmJvc2l0eSwgMCkKKworICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAxCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDIpCisKKyAgICBkZWYgdGVzdEJ1ZmZlckNhdGNoRmFpbGZhc3Qoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgZm9yIGFyZywgYXR0ciBpbiAoKCdidWZmZXInLCAnYnVmZmVyJyksICgnZmFpbGZhc3QnLCAnZmFpbGZhc3QnKSwKKyAgICAgICAgICAgICAgICAgICAgICAoJ2NhdGNoJywgJ2NhdGNoYnJlYWsnKSk6CisgICAgICAgICAgICBpZiBhdHRyID09ICdjYXRjaCcgYW5kIG5vdCBoYXNJbnN0YWxsSGFuZGxlcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQorICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKKyAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCisKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKworICAgICAgICAgICAgZm9yIG9wdCBpbiBzaG9ydF9vcHQsIGxvbmdfb3B0OgorICAgICAgICAgICAgICAgIG5vdF9ub25lID0gb2JqZWN0KCkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIG5vdF9ub25lKQorCisgICAgICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmUsIG9wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCBub3Rfbm9uZSkKKworICAgIGRlZiB0ZXN0V2FybmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgd2FybmluZ3MgYXJndW1lbnQiIiIKKyAgICAgICAgIyBzZWUgIzEwNTM1CisgICAgICAgIGNsYXNzIEZha2VUUCh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6CisgICAgICAgICAgICBkZWYgcGFyc2VBcmdzKHNlbGYsICphcmdzLCAqKmt3KTogcGFzcworICAgICAgICAgICAgZGVmIHJ1blRlc3RzKHNlbGYsICphcmdzLCAqKmt3KTogcGFzcworICAgICAgICB3YXJub3B0aW9ucyA9IHN5cy53YXJub3B0aW9uc1s6XQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMud2Fybm9wdGlvbnNbOl0gPSBbXQorICAgICAgICAgICAgIyBubyB3YXJuIG9wdGlvbnMsIG5vIGFyZyAtPiBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VUUCgpLndhcm5pbmdzLCAnZGVmYXVsdCcpCisgICAgICAgICAgICAjIG5vIHdhcm4gb3B0aW9ucywgdy8gYXJnIC0+IGFyZyB2YWx1ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlVFAod2FybmluZ3M9J2lnbm9yZScpLndhcm5pbmdzLCAnaWdub3JlJykKKyAgICAgICAgICAgIHN5cy53YXJub3B0aW9uc1s6XSA9IFsnc29tZXZhbHVlJ10KKyAgICAgICAgICAgICMgd2FybiBvcHRpb25zLCBubyBhcmcgLT4gTm9uZQorICAgICAgICAgICAgIyB3YXJuIG9wdGlvbnMsIHcvIGFyZyAtPiBhcmcgdmFsdWUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVRQKCkud2FybmluZ3MsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VUUCh3YXJuaW5ncz0naWdub3JlJykud2FybmluZ3MsICdpZ25vcmUnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLndhcm5vcHRpb25zWzpdID0gd2Fybm9wdGlvbnMKKworICAgIGRlZiB0ZXN0UnVuVGVzdHNSdW5uZXJDbGFzcyhzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorCisgICAgICAgIHByb2dyYW0udGVzdFJ1bm5lciA9IEZha2VSdW5uZXIKKyAgICAgICAgcHJvZ3JhbS52ZXJib3NpdHkgPSAndmVyYm9zaXR5JworICAgICAgICBwcm9ncmFtLmZhaWxmYXN0ID0gJ2ZhaWxmYXN0JworICAgICAgICBwcm9ncmFtLmJ1ZmZlciA9ICdidWZmZXInCisgICAgICAgIHByb2dyYW0ud2FybmluZ3MgPSAnd2FybmluZ3MnCisKKyAgICAgICAgcHJvZ3JhbS5ydW5UZXN0cygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLmluaXRBcmdzLCB7J3ZlcmJvc2l0eSc6ICd2ZXJib3NpdHknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhaWxmYXN0JzogJ2ZhaWxmYXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidWZmZXInOiAnYnVmZmVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YXJuaW5ncyc6ICd3YXJuaW5ncyd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZha2VSdW5uZXIudGVzdCwgJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0ucmVzdWx0LCBSRVNVTFQpCisKKyAgICBkZWYgdGVzdFJ1blRlc3RzUnVubmVySW5zdGFuY2Uoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKworICAgICAgICBwcm9ncmFtLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyKCkKKyAgICAgICAgRmFrZVJ1bm5lci5pbml0QXJncyA9IE5vbmUKKworICAgICAgICBwcm9ncmFtLnJ1blRlc3RzKCkKKworICAgICAgICAjIEEgbmV3IEZha2VSdW5uZXIgc2hvdWxkIG5vdCBoYXZlIGJlZW4gaW5zdGFudGlhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKEZha2VSdW5uZXIuaW5pdEFyZ3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWtlUnVubmVyLnRlc3QsICd0ZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLnJlc3VsdCwgUkVTVUxUKQorCisgICAgZGVmIHRlc3RSdW5UZXN0c09sZFJ1bm5lckNsYXNzKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisKKyAgICAgICAgRmFrZVJ1bm5lci5yYWlzZUVycm9yID0gVHJ1ZQorICAgICAgICBwcm9ncmFtLnRlc3RSdW5uZXIgPSBGYWtlUnVubmVyCisgICAgICAgIHByb2dyYW0udmVyYm9zaXR5ID0gJ3ZlcmJvc2l0eScKKyAgICAgICAgcHJvZ3JhbS5mYWlsZmFzdCA9ICdmYWlsZmFzdCcKKyAgICAgICAgcHJvZ3JhbS5idWZmZXIgPSAnYnVmZmVyJworICAgICAgICBwcm9ncmFtLnRlc3QgPSAndGVzdCcKKworICAgICAgICBwcm9ncmFtLnJ1blRlc3RzKCkKKworICAgICAgICAjIElmIGluaXRpYWxpc2luZyByYWlzZXMgYSB0eXBlIGVycm9yIGl0IHNob3VsZCBiZSByZXRyaWVkCisgICAgICAgICMgd2l0aG91dCB0aGUgbmV3IGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci5pbml0QXJncywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFrZVJ1bm5lci50ZXN0LCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5yZXN1bHQsIFJFU1VMVCkKKworICAgIGRlZiB0ZXN0Q2F0Y2hCcmVha0luc3RhbGxzSGFuZGxlcihzZWxmKToKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbJ3VuaXR0ZXN0Lm1haW4nXQorICAgICAgICBvcmlnaW5hbCA9IG1vZHVsZS5pbnN0YWxsSGFuZGxlcgorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgbW9kdWxlLmluc3RhbGxIYW5kbGVyID0gb3JpZ2luYWwKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmUpCisKKyAgICAgICAgc2VsZi5pbnN0YWxsZWQgPSBGYWxzZQorICAgICAgICBkZWYgZmFrZUluc3RhbGxIYW5kbGVyKCk6CisgICAgICAgICAgICBzZWxmLmluc3RhbGxlZCA9IFRydWUKKyAgICAgICAgbW9kdWxlLmluc3RhbGxIYW5kbGVyID0gZmFrZUluc3RhbGxIYW5kbGVyCisKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorICAgICAgICBwcm9ncmFtLmNhdGNoYnJlYWsgPSBUcnVlCisKKyAgICAgICAgcHJvZ3JhbS50ZXN0UnVubmVyID0gRmFrZVJ1bm5lcgorCisgICAgICAgIHByb2dyYW0ucnVuVGVzdHMoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5pbnN0YWxsZWQpCisKKyAgICBkZWYgX3BhdGNoX2lzZmlsZShzZWxmLCBuYW1lcywgZXhpc3RzPVRydWUpOgorICAgICAgICBkZWYgaXNmaWxlKHBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIHBhdGggaW4gbmFtZXMKKyAgICAgICAgb3JpZ2luYWwgPSBvcy5wYXRoLmlzZmlsZQorICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICBkZWYgcmVzdG9yZSgpOgorICAgICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBvcmlnaW5hbAorICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKKworCisgICAgZGVmIHRlc3RQYXJzZUFyZ3NGaWxlTmFtZXMoc2VsZik6CisgICAgICAgICMgcnVubmluZyB0ZXN0cyB3aXRoIGZpbGVuYW1lcyBpbnN0ZWFkIG9mIG1vZHVsZSBuYW1lcworICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisgICAgICAgIGFyZ3YgPSBbJ3Byb2duYW1lJywgJ2Zvby5weScsICdiYXIuUHknLCAnYmF6LlBZJywgJ3dpbmcudHh0J10KKyAgICAgICAgc2VsZi5fcGF0Y2hfaXNmaWxlKGFyZ3YpCisKKyAgICAgICAgcHJvZ3JhbS5jcmVhdGVUZXN0cyA9IGxhbWJkYTogTm9uZQorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhhcmd2KQorCisgICAgICAgICMgbm90ZSB0aGF0ICd3aW5nLnR4dCcgaXMgbm90IGEgUHl0aG9uIGZpbGUgc28gdGhlIG5hbWUgc2hvdWxkCisgICAgICAgICMgKm5vdCogYmUgY29udmVydGVkIHRvIGEgbW9kdWxlIG5hbWUKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2ZvbycsICdiYXInLCAnYmF6JywgJ3dpbmcudHh0J10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3ROYW1lcywgZXhwZWN0ZWQpCisKKworICAgIGRlZiB0ZXN0UGFyc2VBcmdzRmlsZVBhdGhzKHNlbGYpOgorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisgICAgICAgIGFyZ3YgPSBbJ3Byb2duYW1lJywgJ2Zvby9iYXIvYmF6LnB5JywgJ2dyZWVuXFxyZWQucHknXQorICAgICAgICBzZWxmLl9wYXRjaF9pc2ZpbGUoYXJndikKKworICAgICAgICBwcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3YpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2Zvby5iYXIuYmF6JywgJ2dyZWVuLnJlZCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS50ZXN0TmFtZXMsIGV4cGVjdGVkKQorCisKKyAgICBkZWYgdGVzdFBhcnNlQXJnc05vbkV4aXN0ZW50RmlsZXMoc2VsZik6CisgICAgICAgIHByb2dyYW0gPSBzZWxmLnByb2dyYW0KKyAgICAgICAgYXJndiA9IFsncHJvZ25hbWUnLCAnZm9vL2Jhci9iYXoucHknLCAnZ3JlZW5cXHJlZC5weSddCisgICAgICAgIHNlbGYuX3BhdGNoX2lzZmlsZShbXSkKKworICAgICAgICBwcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3YpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3ROYW1lcywgYXJndlsxOl0pCisKKyAgICBkZWYgdGVzdFBhcnNlQXJnc0Fic29sdXRlUGF0aHNUaGF0Q2FuQmVDb252ZXJ0ZWQoc2VsZik6CisgICAgICAgIGN1cl9kaXIgPSBvcy5nZXRjd2QoKQorICAgICAgICBwcm9ncmFtID0gc2VsZi5wcm9ncmFtCisgICAgICAgIGRlZiBfam9pbihuYW1lKToKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oY3VyX2RpciwgbmFtZSkKKyAgICAgICAgYXJndiA9IFsncHJvZ25hbWUnLCBfam9pbignZm9vL2Jhci9iYXoucHknKSwgX2pvaW4oJ2dyZWVuXFxyZWQucHknKV0KKyAgICAgICAgc2VsZi5fcGF0Y2hfaXNmaWxlKGFyZ3YpCisKKyAgICAgICAgcHJvZ3JhbS5jcmVhdGVUZXN0cyA9IGxhbWJkYTogTm9uZQorICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhhcmd2KQorCisgICAgICAgIGV4cGVjdGVkID0gWydmb28uYmFyLmJheicsICdncmVlbi5yZWQnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udGVzdE5hbWVzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0UGFyc2VBcmdzQWJzb2x1dGVQYXRoc1RoYXRDYW5ub3RCZUNvbnZlcnRlZChzZWxmKToKKyAgICAgICAgcHJvZ3JhbSA9IHNlbGYucHJvZ3JhbQorICAgICAgICAjIGV2ZW4gb24gV2luZG93cyAnLy4uLicgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBieSBvcy5wYXRoLmFic3BhdGgKKyAgICAgICAgYXJndiA9IFsncHJvZ25hbWUnLCAnL2Zvby9iYXIvYmF6LnB5JywgJy9ncmVlbi9yZWQucHknXQorICAgICAgICBzZWxmLl9wYXRjaF9pc2ZpbGUoYXJndikKKworICAgICAgICBwcm9ncmFtLmNyZWF0ZVRlc3RzID0gbGFtYmRhOiBOb25lCisgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKGFyZ3YpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9ncmFtLnRlc3ROYW1lcywgYXJndlsxOl0pCisKKyAgICAgICAgIyBpdCBtYXkgYmUgYmV0dGVyIHRvIHVzZSBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgdG8gbm9ybWFsaXNlIHBhdGhzCisgICAgICAgICMgcmF0aGVyIHRoYW4gYWNjZXB0aW5nICcuUFknIGFuZCAnXCcgYXMgZmlsZSBzZXByYXRvciBvbiBMaW51eCAvIE1hYworICAgICAgICAjIGl0IHdvdWxkIGFsc28gYmUgYmV0dGVyIHRvIGNoZWNrIHRoYXQgYSBmaWxlbmFtZSBpcyBhIHZhbGlkIG1vZHVsZQorICAgICAgICAjIGlkZW50aWZpZXIgKHdlIGhhdmUgYSByZWdleCBmb3IgdGhpcyBpbiBsb2FkZXIucHkpCisgICAgICAgICMgZm9yIGludmFsaWQgZmlsZW5hbWVzIHNob3VsZCB3ZSByYWlzZSBhIHVzZWZ1bCBlcnJvciByYXRoZXIgdGhhbgorICAgICAgICAjIGxlYXZpbmcgdGhlIGN1cnJlbnQgZXJyb3IgbWVzc2FnZSAoaW1wb3J0IG9mIGZpbGVuYW1lIGZhaWxzKSBpbiBwbGFjZT8KKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzU4ZTYxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkKQEAgLTAsMCArMSw1NjggQEAKK2ltcG9ydCBpbworaW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdW5pdHRlc3QKKworCitjbGFzcyBUZXN0X1Rlc3RSZXN1bHQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgTm90ZTogdGhlcmUgYXJlIG5vdCBzZXBhcmF0ZSB0ZXN0cyBmb3IgVGVzdFJlc3VsdC53YXNTdWNjZXNzZnVsKCksCisgICAgIyBUZXN0UmVzdWx0LmVycm9ycywgVGVzdFJlc3VsdC5mYWlsdXJlcywgVGVzdFJlc3VsdC50ZXN0c1J1biBvcgorICAgICMgVGVzdFJlc3VsdC5zaG91bGRTdG9wIGJlY2F1c2UgdGhlc2Ugb25seSBoYXZlIG1lYW5pbmcgaW4gdGVybXMgb2YKKyAgICAjIG90aGVyIFRlc3RSZXN1bHQgbWV0aG9kcy4KKyAgICAjCisgICAgIyBBY2NvcmRpbmdseSwgdGVzdHMgZm9yIHRoZSBhZm9yZW5hbWVkIGF0dHJpYnV0ZXMgYXJlIGluY29ycG9yYXRlZAorICAgICMgaW4gd2l0aCB0aGUgdGVzdHMgZm9yIHRoZSBkZWZpbmluZyBtZXRob2RzLgorICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQuX3N0ZG91dF9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdC5fc3RkZXJyX2J1ZmZlcikKKworICAgICMgIlRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHNldCBvZiB0ZXN0cyBiZWluZworICAgICMgcnVuIHNob3VsZCBiZSBhYm9ydGVkIGJ5IHNldHRpbmcgdGhlIFRlc3RSZXN1bHQncyBzaG91bGRTdG9wCisgICAgIyBhdHRyaWJ1dGUgdG8gVHJ1ZS4iCisgICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0b3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIFRydWUpCisKKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgaXMgYWJvdXQgdG8gYmUgcnVuLiBUaGUgZGVmYXVsdAorICAgICMgaW1wbGVtZW50YXRpb24gc2ltcGx5IGluY3JlbWVudHMgdGhlIGluc3RhbmNlJ3MgdGVzdHNSdW4gY291bnRlci4iCisgICAgZGVmIHRlc3Rfc3RhcnRUZXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHRlc3QpCisKKyAgICAjICJDYWxsZWQgYWZ0ZXIgdGhlIHRlc3QgY2FzZSB0ZXN0IGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mCisgICAgIyB0aGUgb3V0Y29tZS4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLiIKKyAgICBkZWYgdGVzdF9zdG9wVGVzdChzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmZhaWx1cmVzKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnNob3VsZFN0b3AsIEZhbHNlKQorCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgICAgICMgU2FtZSB0ZXN0cyBhcyBhYm92ZTsgbWFrZSBzdXJlIG5vdGhpbmcgaGFzIGNoYW5nZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAjICJDYWxsZWQgYmVmb3JlIGFuZCBhZnRlciB0ZXN0cyBhcmUgcnVuLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuIgorICAgIGRlZiB0ZXN0X3N0YXJ0VGVzdFJ1bl9zdG9wVGVzdFJ1bihzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3RSdW4oKQorICAgICAgICByZXN1bHQuc3RvcFRlc3RSdW4oKQorCisgICAgIyAiYWRkU3VjY2Vzcyh0ZXN0KSIKKyAgICAjIC4uLgorICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzdWNjZWVkcyIKKyAgICAjIC4uLgorICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKKyAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgorICAgICMgLi4uCisgICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgorICAgICMgLi4uCisgICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCisgICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgIyAuLi4KKyAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKKyAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQorICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAorICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgZGVmIHRlc3RfYWRkU3VjY2VzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3RfMScpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkU3VjY2Vzcyh0ZXN0KQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICMgImFkZEZhaWx1cmUodGVzdCwgZXJyKSIKKyAgICAjIC4uLgorICAgICMgIkNhbGxlZCB3aGVuIHRoZSB0ZXN0IGNhc2UgdGVzdCBzaWduYWxzIGEgZmFpbHVyZS4gZXJyIGlzIGEgdHVwbGUgb2YKKyAgICAjIHRoZSBmb3JtIHJldHVybmVkIGJ5IHN5cy5leGNfaW5mbygpOiAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaykiCisgICAgIyAuLi4KKyAgICAjICJ3YXNTdWNjZXNzZnVsKCkgLSBSZXR1cm5zIFRydWUgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsCisgICAgIyBvdGhlcndpc2UgcmV0dXJucyBGYWxzZSIKKyAgICAjIC4uLgorICAgICMgInRlc3RzUnVuIC0gVGhlIHRvdGFsIG51bWJlciBvZiB0ZXN0cyBydW4gc28gZmFyLiIKKyAgICAjIC4uLgorICAgICMgImVycm9ycyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoaWNoIHJhaXNlZCBhbgorICAgICMgdW5leHBlY3RlZCBleGNlcHRpb24uIENvbnRhaW5zIGZvcm1hdHRlZAorICAgICMgdHJhY2ViYWNrcyBpbnN0ZWFkIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgICMgLi4uCisgICAgIyAiZmFpbHVyZXMgLSBBIGxpc3QgY29udGFpbmluZyAyLXR1cGxlcyBvZiBUZXN0Q2FzZSBpbnN0YW5jZXMgYW5kCisgICAgIyBmb3JtYXR0ZWQgdHJhY2ViYWNrcy4gRWFjaCB0dXBsZSByZXByZXNlbnRzIGEgdGVzdCB3aGVyZSBhIGZhaWx1cmUgd2FzCisgICAgIyBleHBsaWNpdGx5IHNpZ25hbGxlZCB1c2luZyB0aGUgVGVzdENhc2UuZmFpbCooKSBvciBUZXN0Q2FzZS5hc3NlcnQqKCkKKyAgICAjIG1ldGhvZHMuIENvbnRhaW5zIGZvcm1hdHRlZCB0cmFjZWJhY2tzIGluc3RlYWQKKyAgICAjIG9mIHN5cy5leGNfaW5mbygpIHJlc3VsdHMuIgorICAgIGRlZiB0ZXN0X2FkZEZhaWx1cmUoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZXN0LmZhaWwoImZvbyIpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y19pbmZvX3R1cGxlID0gc3lzLmV4Y19pbmZvKCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHRlc3QpCisgICAgICAgIHJlc3VsdC5hZGRGYWlsdXJlKHRlc3QsIGV4Y19pbmZvX3R1cGxlKQorICAgICAgICByZXN1bHQuc3RvcFRlc3QodGVzdCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2hvdWxkU3RvcCwgRmFsc2UpCisKKyAgICAgICAgdGVzdF9jYXNlLCBmb3JtYXR0ZWRfZXhjID0gcmVzdWx0LmZhaWx1cmVzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2Nhc2UgaXMgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKKworICAgICMgImFkZEVycm9yKHRlc3QsIGVycikiCisgICAgIyAuLi4KKyAgICAjICJDYWxsZWQgd2hlbiB0aGUgdGVzdCBjYXNlIHRlc3QgcmFpc2VzIGFuIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGVycgorICAgICMgaXMgYSB0dXBsZSBvZiB0aGUgZm9ybSByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKToKKyAgICAjICh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKSIKKyAgICAjIC4uLgorICAgICMgIndhc1N1Y2Nlc3NmdWwoKSAtIFJldHVybnMgVHJ1ZSBpZiBhbGwgdGVzdHMgcnVuIHNvIGZhciBoYXZlIHBhc3NlZCwKKyAgICAjIG90aGVyd2lzZSByZXR1cm5zIEZhbHNlIgorICAgICMgLi4uCisgICAgIyAidGVzdHNSdW4gLSBUaGUgdG90YWwgbnVtYmVyIG9mIHRlc3RzIHJ1biBzbyBmYXIuIgorICAgICMgLi4uCisgICAgIyAiZXJyb3JzIC0gQSBsaXN0IGNvbnRhaW5pbmcgMi10dXBsZXMgb2YgVGVzdENhc2UgaW5zdGFuY2VzIGFuZAorICAgICMgZm9ybWF0dGVkIHRyYWNlYmFja3MuIEVhY2ggdHVwbGUgcmVwcmVzZW50cyBhIHRlc3Qgd2hpY2ggcmFpc2VkIGFuCisgICAgIyB1bmV4cGVjdGVkIGV4Y2VwdGlvbi4gQ29udGFpbnMgZm9ybWF0dGVkCisgICAgIyB0cmFjZWJhY2tzIGluc3RlYWQgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgIyAuLi4KKyAgICAjICJmYWlsdXJlcyAtIEEgbGlzdCBjb250YWluaW5nIDItdHVwbGVzIG9mIFRlc3RDYXNlIGluc3RhbmNlcyBhbmQKKyAgICAjIGZvcm1hdHRlZCB0cmFjZWJhY2tzLiBFYWNoIHR1cGxlIHJlcHJlc2VudHMgYSB0ZXN0IHdoZXJlIGEgZmFpbHVyZSB3YXMKKyAgICAjIGV4cGxpY2l0bHkgc2lnbmFsbGVkIHVzaW5nIHRoZSBUZXN0Q2FzZS5mYWlsKigpIG9yIFRlc3RDYXNlLmFzc2VydCooKQorICAgICMgbWV0aG9kcy4gQ29udGFpbnMgZm9ybWF0dGVkIHRyYWNlYmFja3MgaW5zdGVhZAorICAgICMgb2Ygc3lzLmV4Y19pbmZvKCkgcmVzdWx0cy4iCisgICAgZGVmIHRlc3RfYWRkRXJyb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0XzEnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdCh0ZXN0KQorICAgICAgICByZXN1bHQuYWRkRXJyb3IodGVzdCwgZXhjX2luZm9fdHVwbGUpCisgICAgICAgIHJlc3VsdC5zdG9wVGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXN0X2Nhc2UgaXMgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKKworICAgIGRlZiB0ZXN0R2V0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmKSwKKyAgICAgICAgICAgICAgICAndGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKKyAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCknKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgZG9jc3RyaW5nLiIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmKSwKKyAgICAgICAgICAgICAgICgndGVzdEdldERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCisgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZiksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXREZXNjcmlwdGlvbldpdGhNdWx0aUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBsb25nZXIgJworICAgICAgICAgICAgICAgICdkb2NzdHJpbmcuJykpCisKKyAgICBkZWYgdGVzdFN0YWNrRnJhbWVUcmltbWluZyhzZWxmKToKKyAgICAgICAgY2xhc3MgRnJhbWUob2JqZWN0KToKKyAgICAgICAgICAgIGNsYXNzIHRiX2ZyYW1lKG9iamVjdCk6CisgICAgICAgICAgICAgICAgZl9nbG9iYWxzID0ge30KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Ll9pc19yZWxldmFudF90Yl9sZXZlbChGcmFtZSkpCisKKyAgICAgICAgRnJhbWUudGJfZnJhbWUuZl9nbG9iYWxzWydfX3VuaXR0ZXN0J10gPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuX2lzX3JlbGV2YW50X3RiX2xldmVsKEZyYW1lKSkKKworICAgIGRlZiB0ZXN0RmFpbEZhc3Qoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkRXJyb3IoTm9uZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zaG91bGRTdG9wKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuX2V4Y19pbmZvX3RvX3N0cmluZyA9IGxhbWJkYSAqXzogJycKKyAgICAgICAgcmVzdWx0LmZhaWxmYXN0ID0gVHJ1ZQorICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5fZXhjX2luZm9fdG9fc3RyaW5nID0gbGFtYmRhICpfOiAnJworICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisgICAgICAgIHJlc3VsdC5hZGRVbmV4cGVjdGVkU3VjY2VzcyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LnNob3VsZFN0b3ApCisKKyAgICBkZWYgdGVzdEZhaWxGYXN0U2V0QnlSdW5uZXIoc2VsZik6CisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpLCBmYWlsZmFzdD1UcnVlKQorICAgICAgICBkZWYgdGVzdChyZXN1bHQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5mYWlsZmFzdCkKKyAgICAgICAgcmVzdWx0ID0gcnVubmVyLnJ1bih0ZXN0KQorCisKK2NsYXNzRGljdCA9IGRpY3QodW5pdHRlc3QuVGVzdFJlc3VsdC5fX2RpY3RfXykKK2ZvciBtIGluICgnYWRkU2tpcCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLAorICAgICAgICAgICAnX19pbml0X18nKToKKyAgICBkZWwgY2xhc3NEaWN0W21dCisKK2RlZiBfX2luaXRfXyhzZWxmLCBzdHJlYW09Tm9uZSwgZGVzY3JpcHRpb25zPU5vbmUsIHZlcmJvc2l0eT1Ob25lKToKKyAgICBzZWxmLmZhaWx1cmVzID0gW10KKyAgICBzZWxmLmVycm9ycyA9IFtdCisgICAgc2VsZi50ZXN0c1J1biA9IDAKKyAgICBzZWxmLnNob3VsZFN0b3AgPSBGYWxzZQorICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKworY2xhc3NEaWN0WydfX2luaXRfXyddID0gX19pbml0X18KK09sZFJlc3VsdCA9IHR5cGUoJ09sZFJlc3VsdCcsIChvYmplY3QsKSwgY2xhc3NEaWN0KQorCitjbGFzcyBUZXN0X09sZFRlc3RSZXN1bHQodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGFzc2VydE9sZFJlc3VsdFdhcm5pbmcoc2VsZiwgdGVzdCwgZmFpbHVyZXMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCJUZXN0UmVzdWx0IGhhcyBubyBhZGQuKyBtZXRob2QsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykpOgorICAgICAgICAgICAgcmVzdWx0ID0gT2xkUmVzdWx0KCkKKyAgICAgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIGZhaWx1cmVzKQorCisgICAgZGVmIHRlc3RPbGRUZXN0UmVzdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0U2tpcChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdmb29iYXInKQorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RFeHBlY3RlZEZhaWwoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yCisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgdGVzdF9uYW1lLCBzaG91bGRfcGFzcyBpbiAoKCd0ZXN0U2tpcCcsIFRydWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0RXhwZWN0ZWRGYWlsJywgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3Rlc3RVbmV4cGVjdGVkU3VjY2VzcycsIEZhbHNlKSk6CisgICAgICAgICAgICB0ZXN0ID0gVGVzdCh0ZXN0X25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydE9sZFJlc3VsdFdhcm5pbmcodGVzdCwgaW50KG5vdCBzaG91bGRfcGFzcykpCisKKyAgICBkZWYgdGVzdE9sZFRlc3RUZXN1bHRTZXR1cChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gcmVhc29uJykKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRPbGRSZXN1bHRXYXJuaW5nKFRlc3QoJ3Rlc3RGb28nKSwgMCkKKworICAgIGRlZiB0ZXN0T2xkVGVzdFJlc3VsdENsYXNzKHNlbGYpOgorICAgICAgICBAdW5pdHRlc3Quc2tpcCgnbm8gcmVhc29uJykKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdEZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0T2xkUmVzdWx0V2FybmluZyhUZXN0KCd0ZXN0Rm9vJyksIDApCisKKyAgICBkZWYgdGVzdE9sZFJlc3VsdFdpdGhSdW5uZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RGb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcihyZXN1bHRjbGFzcz1PbGRSZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09aW8uU3RyaW5nSU8oKSkKKyAgICAgICAgIyBUaGlzIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIFRleHRUZXN0UnVubmVyIGNhbid0IGhhbmRsZSBvbGQKKyAgICAgICAgIyB0ZXN0IHJlc3VsdCBvYmplY3RzCisgICAgICAgIHJ1bm5lci5ydW4oVGVzdCgndGVzdEZvbycpKQorCisKK2NsYXNzIE1vY2tUcmFjZWJhY2sob2JqZWN0KToKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZvcm1hdF9leGNlcHRpb24oKl8pOgorICAgICAgICByZXR1cm4gWydBIHRyYWNlYmFjayddCisKK2RlZiByZXN0b3JlX3RyYWNlYmFjaygpOgorICAgIHVuaXR0ZXN0LnJlc3VsdC50cmFjZWJhY2sgPSB0cmFjZWJhY2sKKworCitjbGFzcyBUZXN0T3V0cHV0QnVmZmVyaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5fcmVhbF9vdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHNlbGYuX3JlYWxfZXJyID0gc3lzLnN0ZGVycgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzeXMuc3Rkb3V0ID0gc2VsZi5fcmVhbF9vdXQKKyAgICAgICAgc3lzLnN0ZGVyciA9IHNlbGYuX3JlYWxfZXJyCisKKyAgICBkZWYgdGVzdEJ1ZmZlck91dHB1dE9mZihzZWxmKToKKyAgICAgICAgcmVhbF9vdXQgPSBzZWxmLl9yZWFsX291dAorICAgICAgICByZWFsX2VyciA9IHNlbGYuX3JlYWxfZXJyCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmJ1ZmZlcikKKworICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorCisgICAgICAgIHJlc3VsdC5zdGFydFRlc3Qoc2VsZikKKworICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfb3V0LCBzeXMuc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHJlYWxfZXJyLCBzeXMuc3RkZXJyKQorCisgICAgZGVmIHRlc3RCdWZmZXJPdXRwdXRTdGFydFRlc3RBZGRTdWNjZXNzKHNlbGYpOgorICAgICAgICByZWFsX291dCA9IHNlbGYuX3JlYWxfb3V0CisgICAgICAgIHJlYWxfZXJyID0gc2VsZi5fcmVhbF9lcnIKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuYnVmZmVyKQorCisgICAgICAgIHJlc3VsdC5idWZmZXIgPSBUcnVlCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX291dCwgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWFsX2Vyciwgc3lzLnN0ZGVycikKKworICAgICAgICByZXN1bHQuc3RhcnRUZXN0KHNlbGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWFsX291dCwgc3lzLnN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChyZWFsX2Vyciwgc3lzLnN0ZGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5zdGRvdXQsIGlvLlN0cmluZ0lPKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLnN0ZGVyciwgaW8uU3RyaW5nSU8pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikKKworICAgICAgICBvdXRfc3RyZWFtID0gc3lzLnN0ZG91dAorICAgICAgICBlcnJfc3RyZWFtID0gc3lzLnN0ZGVycgorCisgICAgICAgIHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0ID0gaW8uU3RyaW5nSU8oKQorICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZGVyciA9IGlvLlN0cmluZ0lPKCkKKworICAgICAgICBwcmludCgnZm9vJykKKyAgICAgICAgcHJpbnQoJ2JhcicsIGZpbGU9c3lzLnN0ZGVycikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dF9zdHJlYW0uZ2V0dmFsdWUoKSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnJfc3RyZWFtLmdldHZhbHVlKCksICdiYXJcbicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZG91dC5nZXR2YWx1ZSgpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuX29yaWdpbmFsX3N0ZGVyci5nZXR2YWx1ZSgpLCAnJykKKworICAgICAgICByZXN1bHQuYWRkU3VjY2VzcyhzZWxmKQorICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKKworICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRlcnIsIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIuZ2V0dmFsdWUoKSwgJycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRfc3RyZWFtLmdldHZhbHVlKCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVycl9zdHJlYW0uZ2V0dmFsdWUoKSwgJycpCisKKworICAgIGRlZiBnZXRTdGFydGVkUmVzdWx0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKyAgICAgICAgcmVzdWx0LnN0YXJ0VGVzdChzZWxmKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgdGVzdEJ1ZmZlck91dHB1dEFkZEVycm9yT3JGYWlsdXJlKHNlbGYpOgorICAgICAgICB1bml0dGVzdC5yZXN1bHQudHJhY2ViYWNrID0gTW9ja1RyYWNlYmFjaworICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV90cmFjZWJhY2spCisKKyAgICAgICAgZm9yIG1lc3NhZ2VfYXR0ciwgYWRkX2F0dHIsIGluY2x1ZGVfZXJyb3IgaW4gWworICAgICAgICAgICAgKCdlcnJvcnMnLCAnYWRkRXJyb3InLCBUcnVlKSwKKyAgICAgICAgICAgICgnZmFpbHVyZXMnLCAnYWRkRmFpbHVyZScsIEZhbHNlKSwKKyAgICAgICAgICAgICgnZXJyb3JzJywgJ2FkZEVycm9yJywgVHJ1ZSksCisgICAgICAgICAgICAoJ2ZhaWx1cmVzJywgJ2FkZEZhaWx1cmUnLCBGYWxzZSkKKyAgICAgICAgXToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0U3RhcnRlZFJlc3VsdCgpCisgICAgICAgICAgICBidWZmZXJlZF9vdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgICAgICBidWZmZXJlZF9lcnIgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICByZXN1bHQuX29yaWdpbmFsX3N0ZG91dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgICAgIHJlc3VsdC5fb3JpZ2luYWxfc3RkZXJyID0gaW8uU3RyaW5nSU8oKQorCisgICAgICAgICAgICBwcmludCgnZm9vJywgZmlsZT1zeXMuc3Rkb3V0KQorICAgICAgICAgICAgaWYgaW5jbHVkZV9lcnJvcjoKKyAgICAgICAgICAgICAgICBwcmludCgnYmFyJywgZmlsZT1zeXMuc3RkZXJyKQorCisKKyAgICAgICAgICAgIGFkZEZ1bmN0aW9uID0gZ2V0YXR0cihyZXN1bHQsIGFkZF9hdHRyKQorICAgICAgICAgICAgYWRkRnVuY3Rpb24oc2VsZiwgKE5vbmUsIE5vbmUsIE5vbmUpKQorICAgICAgICAgICAgcmVzdWx0LnN0b3BUZXN0KHNlbGYpCisKKyAgICAgICAgICAgIHJlc3VsdF9saXN0ID0gZ2V0YXR0cihyZXN1bHQsIG1lc3NhZ2VfYXR0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdF9saXN0KSwgMSkKKworICAgICAgICAgICAgdGVzdCwgbWVzc2FnZSA9IHJlc3VsdF9saXN0WzBdCisgICAgICAgICAgICBleHBlY3RlZE91dE1lc3NhZ2UgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCisgICAgICAgICAgICAgICAgU3Rkb3V0OgorICAgICAgICAgICAgICAgIGZvbworICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZXhwZWN0ZWRFcnJNZXNzYWdlID0gJycKKyAgICAgICAgICAgIGlmIGluY2x1ZGVfZXJyb3I6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRFcnJNZXNzYWdlID0gdGV4dHdyYXAuZGVkZW50KCIiIgorICAgICAgICAgICAgICAgIFN0ZGVycjoKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgZXhwZWN0ZWRGdWxsTWVzc2FnZSA9ICdBIHRyYWNlYmFjayVzJXMnICUgKGV4cGVjdGVkT3V0TWVzc2FnZSwgZXhwZWN0ZWRFcnJNZXNzYWdlKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHRlc3QsIHNlbGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5fb3JpZ2luYWxfc3Rkb3V0LmdldHZhbHVlKCksIGV4cGVjdGVkT3V0TWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Ll9vcmlnaW5hbF9zdGRlcnIuZ2V0dmFsdWUoKSwgZXhwZWN0ZWRFcnJNZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRNdWx0aUxpbmVFcXVhbChtZXNzYWdlLCBleHBlY3RlZEZ1bGxNZXNzYWdlKQorCisgICAgZGVmIHRlc3RCdWZmZXJTZXR1cENsYXNzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcmVzdWx0LmJ1ZmZlciA9IFRydWUKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgZGVmIHRlc3RfZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW0ZvbygndGVzdF9mb28nKV0pCisgICAgICAgIHN1aXRlKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisKKyAgICBkZWYgdGVzdEJ1ZmZlclRlYXJEb3duQ2xhc3Moc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0X2ZvbycpXSkKKyAgICAgICAgc3VpdGUocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKworICAgIGRlZiB0ZXN0QnVmZmVyU2V0VXBNb2R1bGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgICAgIEZvby5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMubW9kdWxlcy5wb3AsICdNb2R1bGUnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0X2ZvbycpXSkKKyAgICAgICAgc3VpdGUocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKworICAgIGRlZiB0ZXN0QnVmZmVyVGVhckRvd25Nb2R1bGUoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuYnVmZmVyID0gVHJ1ZQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9mb28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgICAgIEZvby5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzeXMubW9kdWxlcy5wb3AsICdNb2R1bGUnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbRm9vKCd0ZXN0X2ZvbycpXSkKKyAgICAgICAgc3VpdGUocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTk1NDEwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkKQEAgLTAsMCArMSwzMTggQEAKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3VicHJvY2VzcworCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KKworCitjbGFzcyBUZXN0Q2xlYW5VcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdENsZWFuVXAoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdE5vdGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9jbGVhbnVwcywgW10pCisKKyAgICAgICAgY2xlYW51cHMgPSBbXQorCisgICAgICAgIGRlZiBjbGVhbnVwMSgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgY2xlYW51cHMuYXBwZW5kKCgxLCBhcmdzLCBrd2FyZ3MpKQorCisgICAgICAgIGRlZiBjbGVhbnVwMigqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgY2xlYW51cHMuYXBwZW5kKCgyLCBhcmdzLCBrd2FyZ3MpKQorCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSwgMSwgMiwgMywgZm91cj0naGVsbG8nLCBmaXZlPSdnb29kYnllJykKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5fY2xlYW51cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyhjbGVhbnVwMSwgKDEsIDIsIDMpLCBkaWN0KGZvdXI9J2hlbGxvJywgZml2ZT0nZ29vZGJ5ZScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsZWFudXAyLCAoKSwge30pXSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodGVzdC5kb0NsZWFudXBzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xlYW51cHMsIFsoMiwgKCksIHt9KSwgKDEsICgxLCAyLCAzKSwgZGljdChmb3VyPSdoZWxsbycsIGZpdmU9J2dvb2RieWUnKSldKQorCisgICAgZGVmIHRlc3RDbGVhblVwV2l0aEVycm9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdGFibGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTW9ja091dGNvbWUob2JqZWN0KToKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCisgICAgICAgICAgICBlcnJvcnMgPSBbXQorCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgdGVzdC5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBNb2NrT3V0Y29tZQorCisgICAgICAgIGV4YzEgPSBFeGNlcHRpb24oJ2ZvbycpCisgICAgICAgIGV4YzIgPSBFeGNlcHRpb24oJ2JhcicpCisgICAgICAgIGRlZiBjbGVhbnVwMSgpOgorICAgICAgICAgICAgcmFpc2UgZXhjMQorCisgICAgICAgIGRlZiBjbGVhbnVwMigpOgorICAgICAgICAgICAgcmFpc2UgZXhjMgorCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdC5kb0NsZWFudXBzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9ja091dGNvbWUuc3VjY2VzcykKKworICAgICAgICAoVHlwZTEsIGluc3RhbmNlMSwgXyksIChUeXBlMiwgaW5zdGFuY2UyLCBfKSA9IHJldmVyc2VkKE1vY2tPdXRjb21lLmVycm9ycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoVHlwZTEsIGluc3RhbmNlMSksIChFeGNlcHRpb24sIGV4YzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChUeXBlMiwgaW5zdGFuY2UyKSwgKEV4Y2VwdGlvbiwgZXhjMikpCisKKyAgICBkZWYgdGVzdENsZWFudXBJblJ1bihzZWxmKToKKyAgICAgICAgYmxvd1VwID0gRmFsc2UKKyAgICAgICAgb3JkZXJpbmcgPSBbXQorCisgICAgICAgIGNsYXNzIFRlc3RhYmxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdzZXRVcCcpCisgICAgICAgICAgICAgICAgaWYgYmxvd1VwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ2ZvbycpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3Rlc3QnKQorCisgICAgICAgICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bicpCisKKyAgICAgICAgdGVzdCA9IFRlc3RhYmxlVGVzdCgndGVzdE5vdGhpbmcnKQorCisgICAgICAgIGRlZiBjbGVhbnVwMSgpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMScpCisgICAgICAgIGRlZiBjbGVhbnVwMigpOgorICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCdjbGVhbnVwMicpCisgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMSkKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQorCisgICAgICAgIGRlZiBzdWNjZXNzKHNvbWVfdGVzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvbWVfdGVzdCwgdGVzdCkKKyAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc3VjY2VzcycpCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzID0gc3VjY2VzcworCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjbGVhbnVwMicsICdjbGVhbnVwMScsICdzdWNjZXNzJ10pCisKKyAgICAgICAgYmxvd1VwID0gVHJ1ZQorICAgICAgICBvcmRlcmluZyA9IFtdCisgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKKyAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAxKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIFsnc2V0VXAnLCAnY2xlYW51cDEnXSkKKworICAgIGRlZiB0ZXN0VGVzdENhc2VEZWJ1Z0V4ZWN1dGVzQ2xlYW51cHMoc2VsZik6CisgICAgICAgIG9yZGVyaW5nID0gW10KKworICAgICAgICBjbGFzcyBUZXN0YWJsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXAnKQorICAgICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwMSkKKworICAgICAgICAgICAgZGVmIHRlc3ROb3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVzdCcpCisKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3RlYXJEb3duJykKKworICAgICAgICB0ZXN0ID0gVGVzdGFibGVUZXN0KCd0ZXN0Tm90aGluZycpCisKKyAgICAgICAgZGVmIGNsZWFudXAxKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAxJykKKyAgICAgICAgICAgIHRlc3QuYWRkQ2xlYW51cChjbGVhbnVwMikKKyAgICAgICAgZGVmIGNsZWFudXAyKCk6CisgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ2NsZWFudXAyJykKKworICAgICAgICB0ZXN0LmRlYnVnKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmRlcmluZywgWydzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywgJ2NsZWFudXAxJywgJ2NsZWFudXAyJ10pCisKKworY2xhc3MgVGVzdF9UZXh0VGVzdFJ1bm5lcih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgZm9yIFRleHRUZXN0UnVubmVyLiIiIgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJ1bm5lci5mYWlsZmFzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShydW5uZXIuYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocnVubmVyLndhcm5pbmdzLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLmRlc2NyaXB0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5uZXIucmVzdWx0Y2xhc3MsIHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0KQorCisKKyAgICBkZWYgdGVzdEJ1ZmZlckFuZEZhaWxmYXN0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1pby5TdHJpbmdJTygpLCBmYWlsZmFzdD1UcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcj1UcnVlKQorICAgICAgICAjIFVzZSBvdXIgcmVzdWx0IG9iamVjdAorICAgICAgICBydW5uZXIuX21ha2VSZXN1bHQgPSBsYW1iZGE6IHJlc3VsdAorICAgICAgICBydW5uZXIucnVuKFRlc3QoJ3Rlc3RGb28nKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmZhaWxmYXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0LmJ1ZmZlcikKKworICAgIGRlZiB0ZXN0UnVubmVyUmVnaXN0ZXJzUmVzdWx0KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0Rm9vKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgb3JpZ2luYWxSZWdpc3RlclJlc3VsdCA9IHVuaXR0ZXN0LnJ1bm5lci5yZWdpc3RlclJlc3VsdAorICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgdW5pdHRlc3QucnVubmVyLnJlZ2lzdGVyUmVzdWx0ID0gb3JpZ2luYWxSZWdpc3RlclJlc3VsdAorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cCkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtPWlvLlN0cmluZ0lPKCkpCisgICAgICAgICMgVXNlIG91ciByZXN1bHQgb2JqZWN0CisgICAgICAgIHJ1bm5lci5fbWFrZVJlc3VsdCA9IGxhbWJkYTogcmVzdWx0CisKKyAgICAgICAgc2VsZi53YXNSZWdpc3RlcmVkID0gMAorICAgICAgICBkZWYgZmFrZVJlZ2lzdGVyUmVzdWx0KHRoaXNSZXN1bHQpOgorICAgICAgICAgICAgc2VsZi53YXNSZWdpc3RlcmVkICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGhpc1Jlc3VsdCwgcmVzdWx0KQorICAgICAgICB1bml0dGVzdC5ydW5uZXIucmVnaXN0ZXJSZXN1bHQgPSBmYWtlUmVnaXN0ZXJSZXN1bHQKKworICAgICAgICBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYud2FzUmVnaXN0ZXJlZCwgMSkKKworICAgIGRlZiB0ZXN0X3dvcmtzX3dpdGhfcmVzdWx0X3dpdGhvdXRfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuKHNlbGYpOgorICAgICAgICBjbGFzcyBPbGRUZXh0UmVzdWx0KFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuKToKKyAgICAgICAgICAgIHNlcGFyYXRvcjIgPSAnJworICAgICAgICAgICAgZGVmIHByaW50RXJyb3JzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBSdW5uZXIodW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKFJ1bm5lciwgc2VsZikuX19pbml0X18oaW8uU3RyaW5nSU8oKSkKKworICAgICAgICAgICAgZGVmIF9tYWtlUmVzdWx0KHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBPbGRUZXh0UmVzdWx0KCkKKworICAgICAgICBydW5uZXIgPSBSdW5uZXIoKQorICAgICAgICBydW5uZXIucnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorCisgICAgZGVmIHRlc3Rfc3RhcnRUZXN0UnVuX3N0b3BUZXN0UnVuX2NhbGxlZChzZWxmKToKKyAgICAgICAgY2xhc3MgTG9nZ2luZ1RleHRSZXN1bHQoTG9nZ2luZ1Jlc3VsdCk6CisgICAgICAgICAgICBzZXBhcmF0b3IyID0gJycKKyAgICAgICAgICAgIGRlZiBwcmludEVycm9ycyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgTG9nZ2luZ1J1bm5lcih1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzKToKKyAgICAgICAgICAgICAgICBzdXBlcihMb2dnaW5nUnVubmVyLCBzZWxmKS5fX2luaXRfXyhpby5TdHJpbmdJTygpKQorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGV2ZW50cworCisgICAgICAgICAgICBkZWYgX21ha2VSZXN1bHQoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIExvZ2dpbmdUZXh0UmVzdWx0KHNlbGYuX2V2ZW50cykKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICBydW5uZXIgPSBMb2dnaW5nUnVubmVyKGV2ZW50cykKKyAgICAgICAgcnVubmVyLnJ1bih1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdFJ1bicsICdzdG9wVGVzdFJ1biddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV91bnBpY2tsZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjNzE5NzogYSBUZXh0VGVzdFJ1bm5lciBzaG91bGQgYmUgKHVuKXBpY2tsZWFibGUuIFRoaXMgaXMKKyAgICAgICAgIyByZXF1aXJlZCBieSB0ZXN0X211bHRpcHJvY2Vzc2luZyB1bmRlciBXaW5kb3dzIChpbiB2ZXJib3NlIG1vZGUpLgorICAgICAgICBzdHJlYW0gPSBpby5TdHJpbmdJTygiZm9vIikKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoc3RyZWFtKQorICAgICAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMocnVubmVyLCBwcm90b2NvbCkKKyAgICAgICAgICAgIG9iaiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgIyBTdHJpbmdJTyBvYmplY3RzIG5ldmVyIGNvbXBhcmUgZXF1YWwsIGEgY2hlYXAgdGVzdCBpbnN0ZWFkLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RyZWFtLmdldHZhbHVlKCksIHN0cmVhbS5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfcmVzdWx0Y2xhc3Moc2VsZik6CisgICAgICAgIGRlZiBNb2NrUmVzdWx0Q2xhc3MoKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKyAgICAgICAgU1RSRUFNID0gb2JqZWN0KCkKKyAgICAgICAgREVTQ1JJUFRJT05TID0gb2JqZWN0KCkKKyAgICAgICAgVkVSQk9TSVRZID0gb2JqZWN0KCkKKyAgICAgICAgcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIoU1RSRUFNLCBERVNDUklQVElPTlMsIFZFUkJPU0lUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Y2xhc3M9TW9ja1Jlc3VsdENsYXNzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5yZXN1bHRjbGFzcywgTW9ja1Jlc3VsdENsYXNzKQorCisgICAgICAgIGV4cGVjdGVkcmVzdWx0ID0gKHJ1bm5lci5zdHJlYW0sIERFU0NSSVBUSU9OUywgVkVSQk9TSVRZKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJ1bm5lci5fbWFrZVJlc3VsdCgpLCBleHBlY3RlZHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X3dhcm5pbmdzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgdGhhdCB3YXJuaW5ncyBhcmd1bWVudCBvZiBUZXh0VGVzdFJ1bm5lciBjb3JyZWN0bHkgYWZmZWN0cyB0aGUKKyAgICAgICAgYmVoYXZpb3Igb2YgdGhlIHdhcm5pbmdzLgorICAgICAgICAiIiIKKyAgICAgICAgIyBzZWUgIzEwNTM1IGFuZCB0aGUgX3Rlc3Rfd2FybmluZ3MgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCisgICAgICAgIGRlZiBnZXRfcGFyc2Vfb3V0X2VycihwKToKKyAgICAgICAgICAgIHJldHVybiBbYi5zcGxpdGxpbmVzKCkgZm9yIGIgaW4gcC5jb21tdW5pY2F0ZSgpXQorICAgICAgICBvcHRzID0gZGljdChzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICBjd2Q9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAgYWVfbXNnID0gYidQbGVhc2UgdXNlIGFzc2VydEVxdWFsIGluc3RlYWQuJworICAgICAgICBhdF9tc2cgPSBiJ1BsZWFzZSB1c2UgYXNzZXJ0VHJ1ZSBpbnN0ZWFkLicKKworICAgICAgICAjIG5vIGFyZ3MgLT4gYWxsIHRoZSB3YXJuaW5ncyBhcmUgcHJpbnRlZCwgdW5pdHRlc3Qgd2FybmluZ3Mgb25seSBvbmNlCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJ190ZXN0X3dhcm5pbmdzLnB5J10sICoqb3B0cykKKyAgICAgICAgb3V0LCBlcnIgPSBnZXRfcGFyc2Vfb3V0X2VycihwKQorICAgICAgICBzZWxmLmFzc2VydEluKGInT0snLCBlcnIpCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgdG90YWwgbnVtYmVyIG9mIHdhcm5pbmdzIGluIHRoZSBvdXRwdXQgaXMgY29ycmVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCAxMikKKyAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBudW1iZXJzIG9mIHRoZSBkaWZmZXJlbnQga2luZCBvZiB3YXJuaW5ncyBpcyBjb3JyZWN0CisgICAgICAgIGZvciBtc2cgaW4gW2InZHcnLCBiJ2l3JywgYid1dyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuY291bnQobXNnKSwgMykKKyAgICAgICAgZm9yIG1zZyBpbiBbYWVfbXNnLCBhdF9tc2csIGIncncnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmNvdW50KG1zZyksIDEpCisKKyAgICAgICAgYXJnc19saXN0ID0gKAorICAgICAgICAgICAgIyBwYXNzaW5nICdpZ25vcmUnIGFzIHdhcm5pbmdzIGFyZyAtPiBubyB3YXJuaW5ncworICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnX3Rlc3Rfd2FybmluZ3MucHknLCAnaWdub3JlJ10sCisgICAgICAgICAgICAjIC1XIGRvZXNuJ3QgYWZmZWN0IHRoZSByZXN1bHQgaWYgdGhlIGFyZyBpcyBwYXNzZWQKKyAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1XYScsICdfdGVzdF93YXJuaW5ncy5weScsICdpZ25vcmUnXSwKKyAgICAgICAgICAgICMgLVcgYWZmZWN0cyB0aGUgcmVzdWx0IGlmIHRoZSBhcmcgaXMgbm90IHBhc3NlZAorICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLVdpJywgJ190ZXN0X3dhcm5pbmdzLnB5J10KKyAgICAgICAgKQorICAgICAgICAjIGluIGFsbCB0aGVzZSBjYXNlcyBubyB3YXJuaW5ncyBhcmUgcHJpbnRlZAorICAgICAgICBmb3IgYXJncyBpbiBhcmdzX2xpc3Q6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihhcmdzLCAqKm9wdHMpCisgICAgICAgICAgICBvdXQsIGVyciA9IGdldF9wYXJzZV9vdXRfZXJyKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInT0snLCBlcnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCAwKQorCisKKyAgICAgICAgIyBwYXNzaW5nICdhbHdheXMnIGFzIHdhcm5pbmdzIGFyZyAtPiBhbGwgdGhlIHdhcm5pbmdzIHByaW50ZWQsCisgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Qgd2FybmluZ3Mgb25seSBvbmNlCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJ190ZXN0X3dhcm5pbmdzLnB5JywgJ2Fsd2F5cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm9wdHMpCisgICAgICAgIG91dCwgZXJyID0gZ2V0X3BhcnNlX291dF9lcnIocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ09LJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvdXQpLCAxNCkKKyAgICAgICAgZm9yIG1zZyBpbiBbYidkdycsIGInaXcnLCBiJ3V3JywgYidydyddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuY291bnQobXNnKSwgMykKKyAgICAgICAgZm9yIG1zZyBpbiBbYWVfbXNnLCBhdF9tc2ddOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuY291bnQobXNnKSwgMSkKKworICAgIGRlZiB0ZXN0U3RkRXJyTG9va2VkVXBBdEluc3RhbnRpYXRpb25UaW1lKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAxMDc4NgorICAgICAgICBvbGRfc3RkZXJyID0gc3lzLnN0ZGVycgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICBzeXMuc3RkZXJyID0gZgorICAgICAgICB0cnk6CisgICAgICAgICAgICBydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcigpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocnVubmVyLnN0cmVhbS5zdHJlYW0gaXMgZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvbGRfc3RkZXJyCisKKyAgICBkZWYgdGVzdFNwZWNpZmllZFN0cmVhbVVzZWQoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDEwNzg2CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuc3RyZWFtLnN0cmVhbSBpcyBmKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQ1YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zZXR1cHMucHkKQEAgLTAsMCArMSw1MDcgQEAKK2ltcG9ydCBpbworaW1wb3J0IHN5cworCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgcmVzdWx0RmFjdG9yeSgqXyk6CisgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorCisKK2NsYXNzIFRlc3RTZXR1cHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGdldFJ1bm5lcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHJlc3VsdGNsYXNzPXJlc3VsdEZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW09aW8uU3RyaW5nSU8oKSkKKyAgICBkZWYgcnVuVGVzdHMoc2VsZiwgKmNhc2VzKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBmb3IgY2FzZSBpbiBjYXNlczoKKyAgICAgICAgICAgIHRlc3RzID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKGNhc2UpCisgICAgICAgICAgICBzdWl0ZS5hZGRUZXN0cyh0ZXN0cykKKworICAgICAgICBydW5uZXIgPSBzZWxmLmdldFJ1bm5lcigpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIG5lc3RlZCBzdWl0ZSBleHBvc2VzIHNvbWUgcG90ZW50aWFsIGJ1Z3MKKyAgICAgICAgcmVhbFN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgcmVhbFN1aXRlLmFkZFRlc3Qoc3VpdGUpCisgICAgICAgICMgYWRkaW5nIGVtcHR5IHN1aXRlcyB0byB0aGUgZW5kIGV4cG9zZXMgcG90ZW50aWFsIGJ1Z3MKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh1bml0dGVzdC5UZXN0U3VpdGUoKSkKKyAgICAgICAgcmVhbFN1aXRlLmFkZFRlc3QodW5pdHRlc3QuVGVzdFN1aXRlKCkpCisgICAgICAgIHJldHVybiBydW5uZXIucnVuKHJlYWxTdWl0ZSkKKworICAgIGRlZiB0ZXN0X3NldHVwX2NsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHNldFVwQ2FsbGVkID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3Quc2V0VXBDYWxsZWQgKz0gMQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLnNldFVwQ2xhc3MoKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdC5zZXRVcENhbGxlZCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorCisgICAgZGVmIHRlc3RfdGVhcmRvd25fY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdGVhckRvd25DYWxsZWQgPSAwCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC50ZWFyRG93bkNhbGxlZCArPSAxCisgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UudGVhckRvd25DbGFzcygpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0LnRlYXJEb3duQ2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bl9jbGFzc190d29fY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0ZWFyRG93bkNhbGxlZCA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRlYXJEb3duQ2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHRlYXJEb3duQ2FsbGVkID0gMAorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QyLnRlYXJEb3duQ2FsbGVkICs9IDEKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzKCkKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCwgVGVzdDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUZXN0LnRlYXJEb3duQ2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QyLnRlYXJEb3duQ2FsbGVkLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF9lcnJvcl9pbl9zZXR1cGNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBCcm9rZW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKEJyb2tlblRlc3QpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQorICAgICAgICBlcnJvciwgXyA9IHJlc3VsdC5lcnJvcnNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAnc2V0VXBDbGFzcyAoJXMuQnJva2VuVGVzdCknICUgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9lcnJvcl9pbl90ZWFyZG93bl9jbGFzcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0b3JuRG93biA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0LnRvcm5Eb3duICs9IDEKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2ZvbycpCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICB0b3JuRG93biA9IDAKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBUZXN0Mi50b3JuRG93biArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0LCBUZXN0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRlc3QudG9ybkRvd24sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGVzdDIudG9ybkRvd24sIDEpCisKKyAgICAgICAgZXJyb3IsIF8gPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgJ3RlYXJEb3duQ2xhc3MgKCVzLlRlc3QpJyAlIF9fbmFtZV9fKQorCisgICAgZGVmIHRlc3RfY2xhc3Nfbm90X3Rvcm5kb3duX3doZW5fc2V0dXBfZmFpbHMoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgdG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC50b3JuRG93bikKKworICAgIGRlZiB0ZXN0X2NsYXNzX25vdF9zZXR1cF9vcl90b3JuZG93bl93aGVuX3NraXBwZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3NTZXRVcCA9IEZhbHNlCisgICAgICAgICAgICB0b3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QudG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIFRlc3QgPSB1bml0dGVzdC5za2lwKCJob3AiKShUZXN0KQorICAgICAgICBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC5jbGFzc1NldFVwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3QudG9ybkRvd24pCisKKyAgICBkZWYgdGVzdF9zZXR1cF90ZWFyZG93bl9vcmRlcl93aXRoX3BhdGhvbG9naWNhbF9zdWl0ZShzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgY2xhc3MgTW9kdWxlMShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTEuc2V0VXBNb2R1bGUnKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ01vZHVsZTEudGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIE1vZHVsZTIob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdNb2R1bGUyLnNldFVwTW9kdWxlJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdNb2R1bGUyLnRlYXJEb3duTW9kdWxlJykKKworICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NldHVwIDEnKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCd0ZWFyZG93biAxJykKKyAgICAgICAgICAgIGRlZiB0ZXN0T25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0MS50ZXN0T25lJykKKyAgICAgICAgICAgIGRlZiB0ZXN0VHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0MS50ZXN0VHdvJykKKworICAgICAgICBjbGFzcyBUZXN0Mih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NldHVwIDInKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCd0ZWFyZG93biAyJykKKyAgICAgICAgICAgIGRlZiB0ZXN0T25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0Mi50ZXN0T25lJykKKyAgICAgICAgICAgIGRlZiB0ZXN0VHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0Mi50ZXN0VHdvJykKKworICAgICAgICBjbGFzcyBUZXN0Myh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NldHVwIDMnKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCd0ZWFyZG93biAzJykKKyAgICAgICAgICAgIGRlZiB0ZXN0T25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0My50ZXN0T25lJykKKyAgICAgICAgICAgIGRlZiB0ZXN0VHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdUZXN0My50ZXN0VHdvJykKKworICAgICAgICBUZXN0MS5fX21vZHVsZV9fID0gVGVzdDIuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIFRlc3QzLl9fbW9kdWxlX18gPSAnTW9kdWxlMicKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlMQorICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlMiddID0gTW9kdWxlMgorCisgICAgICAgIGZpcnN0ID0gdW5pdHRlc3QuVGVzdFN1aXRlKChUZXN0MSgndGVzdE9uZScpLCkpCisgICAgICAgIHNlY29uZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3RUd28nKSwpKQorICAgICAgICB0aGlyZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDIoJ3Rlc3RPbmUnKSwpKQorICAgICAgICBmb3VydGggPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QyKCd0ZXN0VHdvJyksKSkKKyAgICAgICAgZmlmdGggPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QzKCd0ZXN0T25lJyksKSkKKyAgICAgICAgc2l4dGggPSB1bml0dGVzdC5UZXN0U3VpdGUoKFRlc3QzKCd0ZXN0VHdvJyksKSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgsIGZpZnRoLCBzaXh0aCkpCisKKyAgICAgICAgcnVubmVyID0gc2VsZi5nZXRSdW5uZXIoKQorICAgICAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnTW9kdWxlMS5zZXRVcE1vZHVsZScsICdzZXR1cCAxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QxLnRlc3RPbmUnLCAnVGVzdDEudGVzdFR3bycsICd0ZWFyZG93biAxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldHVwIDInLCAnVGVzdDIudGVzdE9uZScsICdUZXN0Mi50ZXN0VHdvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYXJkb3duIDInLCAnTW9kdWxlMS50ZWFyRG93bk1vZHVsZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdNb2R1bGUyLnNldFVwTW9kdWxlJywgJ3NldHVwIDMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdDMudGVzdE9uZScsICdUZXN0My50ZXN0VHdvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RlYXJkb3duIDMnLCAnTW9kdWxlMi50ZWFyRG93bk1vZHVsZSddKQorCisgICAgZGVmIHRlc3Rfc2V0dXBfbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIG1vZHVsZVNldHVwID0gMAorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVNldHVwICs9IDEKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLm1vZHVsZVNldHVwLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF9lcnJvcl9pbl9zZXR1cF9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlU2V0dXAgPSAwCisgICAgICAgICAgICBtb2R1bGVUb3JuRG93biA9IDAKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIE1vZHVsZS5tb2R1bGVTZXR1cCArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdmb28nKQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVRvcm5Eb3duICs9IDEKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgY2xhc3NUb3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QuY2xhc3NUb3JuRG93biA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBUZXN0Mi5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0LCBUZXN0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlU2V0dXAsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLm1vZHVsZVRvcm5Eb3duLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUZXN0LmNsYXNzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC5jbGFzc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgZXJyb3IsIF8gPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwgJ3NldFVwTW9kdWxlIChNb2R1bGUpJykKKworICAgIGRlZiB0ZXN0X3Rlc3RjYXNlX3dpdGhfbWlzc2luZ19tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcCgnTW9kdWxlJywgTm9uZSkKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorCisgICAgZGVmIHRlc3RfdGVhcmRvd25fbW9kdWxlKHNlbGYpOgorICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIG1vZHVsZVRvcm5Eb3duID0gMAorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLm1vZHVsZVRvcm5Eb3duICs9IDEKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICByZXN1bHQgPSBzZWxmLnJ1blRlc3RzKFRlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLm1vZHVsZVRvcm5Eb3duLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisKKyAgICBkZWYgdGVzdF9lcnJvcl9pbl90ZWFyZG93bl9tb2R1bGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgbW9kdWxlVG9ybkRvd24gPSAwCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBNb2R1bGUubW9kdWxlVG9ybkRvd24gKz0gMQorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZm9vJykKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGNsYXNzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgY2xhc3NUb3JuRG93biA9IEZhbHNlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgVGVzdC5jbGFzc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIFRlc3QuY2xhc3NUb3JuRG93biA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X29uZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdF90d28oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBUZXN0Mi5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0LCBUZXN0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChNb2R1bGUubW9kdWxlVG9ybkRvd24sIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCA0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVGVzdC5jbGFzc1NldFVwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVGVzdC5jbGFzc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZXJyb3JzKSwgMSkKKyAgICAgICAgZXJyb3IsIF8gPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVycm9yKSwgJ3RlYXJEb3duTW9kdWxlIChNb2R1bGUpJykKKworICAgIGRlZiB0ZXN0X3NraXB0ZXN0X2luX3NldHVwY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdmb28nKQorICAgICAgICAgICAgZGVmIHRlc3Rfb25lKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0X3R3byhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5ydW5UZXN0cyhUZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5za2lwcGVkKSwgMSkKKyAgICAgICAgc2tpcHBlZCA9IHJlc3VsdC5za2lwcGVkWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHNraXBwZWQpLCAnc2V0VXBDbGFzcyAoJXMuVGVzdCknICUgX19uYW1lX18pCisKKyAgICBkZWYgdGVzdF9za2lwdGVzdF9pbl9zZXR1cG1vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9vbmUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfdHdvKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBNb2R1bGUob2JqZWN0KToKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBzZXRVcE1vZHVsZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdmb28nKQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorCisgICAgICAgIHJlc3VsdCA9IHNlbGYucnVuVGVzdHMoVGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgIHNraXBwZWQgPSByZXN1bHQuc2tpcHBlZFswXVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihza2lwcGVkKSwgJ3NldFVwTW9kdWxlIChNb2R1bGUpJykKKworICAgIGRlZiB0ZXN0X3N1aXRlX2RlYnVnX2V4ZWN1dGVzX3NldHVwc19hbmRfdGVhcmRvd25zKHNlbGYpOgorICAgICAgICBvcmRlcmluZyA9IFtdCisKKyAgICAgICAgY2xhc3MgTW9kdWxlKG9iamVjdCk6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBNb2R1bGUoKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3NldFVwTW9kdWxlJykKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgndGVhckRvd25Nb2R1bGUnKQorCisgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIG9yZGVyaW5nLmFwcGVuZCgnc2V0VXBDbGFzcycpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgb3JkZXJpbmcuYXBwZW5kKCd0ZWFyRG93bkNsYXNzJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NvbWV0aGluZyhzZWxmKToKKyAgICAgICAgICAgICAgICBvcmRlcmluZy5hcHBlbmQoJ3Rlc3Rfc29tZXRoaW5nJykKKworICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJworICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQorICAgICAgICBzdWl0ZS5kZWJ1ZygpCisgICAgICAgIGV4cGVjdGVkT3JkZXIgPSBbJ3NldFVwTW9kdWxlJywgJ3NldFVwQ2xhc3MnLCAndGVzdF9zb21ldGhpbmcnLCAndGVhckRvd25DbGFzcycsICd0ZWFyRG93bk1vZHVsZSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkZXJpbmcsIGV4cGVjdGVkT3JkZXIpCisKKyAgICBkZWYgdGVzdF9zdWl0ZV9kZWJ1Z19wcm9wYWdhdGVzX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdzZXRVcE1vZHVsZScpCisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3RlYXJEb3duTW9kdWxlJykKKworICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBpZiBwaGFzZSA9PSAyOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3NldFVwQ2xhc3MnKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHBoYXNlID09IDM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigndGVhckRvd25DbGFzcycpCisgICAgICAgICAgICBkZWYgdGVzdF9zb21ldGhpbmcoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgcGhhc2UgPT0gNDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCd0ZXN0X3NvbWV0aGluZycpCisKKyAgICAgICAgVGVzdC5fX21vZHVsZV9fID0gJ01vZHVsZScKKyAgICAgICAgc3lzLm1vZHVsZXNbJ01vZHVsZSddID0gTW9kdWxlCisKKyAgICAgICAgX3N1aXRlID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbVRlc3RDYXNlKFRlc3QpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUuYWRkVGVzdChfc3VpdGUpCisKKyAgICAgICAgbWVzc2FnZXMgPSAoJ3NldFVwTW9kdWxlJywgJ3RlYXJEb3duTW9kdWxlJywgJ3NldFVwQ2xhc3MnLCAndGVhckRvd25DbGFzcycsICd0ZXN0X3NvbWV0aGluZycpCisgICAgICAgIGZvciBwaGFzZSwgbXNnIGluIGVudW1lcmF0ZShtZXNzYWdlcyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpOgorICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1OTI0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0wLDAgKzEsMTM0IEBACitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAorCisKK2NsYXNzIFRlc3RfVGVzdFNraXBwaW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Rfc2tpcF9tZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJza2lwIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAic2tpcCIpXSkKKworICAgICAgICAjIFRyeSBsZXR0aW5nIHNldFVwIHNraXAgdGhlIHRlc3Qgbm93LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3RpbmciKQorICAgICAgICAgICAgZGVmIHRlc3Rfbm90aGluZyhzZWxmKTogcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9ub3RoaW5nIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgWydzdGFydFRlc3QnLCAnYWRkU2tpcCcsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMSkKKworICAgIGRlZiB0ZXN0X3NraXBwaW5nX2RlY29yYXRvcnMoc2VsZik6CisgICAgICAgIG9wX3RhYmxlID0gKCh1bml0dGVzdC5za2lwVW5sZXNzLCBGYWxzZSwgVHJ1ZSksCisgICAgICAgICAgICAgICAgICAgICh1bml0dGVzdC5za2lwSWYsIFRydWUsIEZhbHNlKSkKKyAgICAgICAgZm9yIGRlY28sIGRvX3NraXAsIGRvbnRfc2tpcCBpbiBvcF90YWJsZToKKyAgICAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICAgICAgQGRlY28oZG9fc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X3NraXAoc2VsZik6IHBhc3MKKworICAgICAgICAgICAgICAgIEBkZWNvKGRvbnRfc2tpcCwgInRlc3RpbmciKQorICAgICAgICAgICAgICAgIGRlZiB0ZXN0X2RvbnRfc2tpcChzZWxmKTogcGFzcworICAgICAgICAgICAgdGVzdF9kb19za2lwID0gRm9vKCJ0ZXN0X3NraXAiKQorICAgICAgICAgICAgdGVzdF9kb250X3NraXAgPSBGb28oInRlc3RfZG9udF9za2lwIikKKyAgICAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0X2RvX3NraXAsIHRlc3RfZG9udF9za2lwXSkKKyAgICAgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgICAgIHN1aXRlLnJ1bihyZXN1bHQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuc2tpcHBlZCksIDEpCisgICAgICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnc3RvcFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXJ0VGVzdCcsICdhZGRTdWNjZXNzJywgJ3N0b3BUZXN0J10KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0X2RvX3NraXAsICJ0ZXN0aW5nIildKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF9za2lwX2NsYXNzKHNlbGYpOgorICAgICAgICBAdW5pdHRlc3Quc2tpcCgidGVzdGluZyIpCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHJlY29yZC5hcHBlbmQoMSkKKyAgICAgICAgcmVjb3JkID0gW10KKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmQsIFtdKQorCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZShzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhlbHAgbWUhIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfZGllIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdF9kaWUoc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF9kaWUiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0LmZhaWx1cmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC51bmV4cGVjdGVkU3VjY2Vzc2VzLCBbdGVzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQorCisgICAgZGVmIHRlc3Rfc2tpcF9kb2VzbnRfcnVuX3NldHVwKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgICAgIEZvby53YXNTZXRVcCA9IFRydWUKKyAgICAgICAgICAgIGRlZiB0b3JuRG93bihzZWxmKToKKyAgICAgICAgICAgICAgICBGb28ud2FzVG9ybkRvd24gPSBUcnVlCisgICAgICAgICAgICBAdW5pdHRlc3Quc2tpcCgndGVzdGluZycpCisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgdGVzdCA9IEZvbygidGVzdF8xIikKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3Rlc3RdKQorICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkLCBbKHRlc3QsICJ0ZXN0aW5nIildKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKEZvby53YXNTZXRVcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShGb28ud2FzVG9ybkRvd24pCisKKyAgICBkZWYgdGVzdF9kZWNvcmF0ZWRfc2tpcChzZWxmKToKKyAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKKyAgICAgICAgICAgIGRlZiBpbm5lcigqYSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmEpCisgICAgICAgICAgICByZXR1cm4gaW5uZXIKKworICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQGRlY29yYXRvcgorICAgICAgICAgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3RpbmcnKQorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3RfMSIpCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkYjk3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CkBAIC0wLDAgKzEsMzY4IEBACitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHN5cworZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CisKKworIyMjIFN1cHBvcnQgY29kZSBmb3IgVGVzdF9UZXN0U3VpdGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgVGVzdChvYmplY3QpOgorICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6IHBhc3MKKyAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworICAgICAgICBkZWYgdGVzdF8zKHNlbGYpOiBwYXNzCisgICAgICAgIGRlZiBydW5UZXN0KHNlbGYpOiBwYXNzCisKK2RlZiBfbWtfVGVzdFN1aXRlKCpuYW1lcyk6CisgICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShUZXN0LkZvbyhuKSBmb3IgbiBpbiBuYW1lcykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK2NsYXNzIFRlc3RfVGVzdFN1aXRlKHVuaXR0ZXN0LlRlc3RDYXNlLCBUZXN0RXF1YWxpdHkpOgorCisgICAgIyMjIFNldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyAgICAjIFVzZWQgYnkgVGVzdEVxdWFsaXR5LnRlc3RfZXEKKyAgICBlcV9wYWlycyA9IFsodW5pdHRlc3QuVGVzdFN1aXRlKCksIHVuaXR0ZXN0LlRlc3RTdWl0ZSgpKQorICAgICAgICAgICAgICAgLCh1bml0dGVzdC5UZXN0U3VpdGUoKSwgdW5pdHRlc3QuVGVzdFN1aXRlKFtdKSkKKyAgICAgICAgICAgICAgICwoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKV0KKworICAgICMgVXNlZCBieSBUZXN0RXF1YWxpdHkudGVzdF9uZQorICAgIG5lX3BhaXJzID0gWyh1bml0dGVzdC5UZXN0U3VpdGUoKSwgX21rX1Rlc3RTdWl0ZSgndGVzdF8xJykpCisgICAgICAgICAgICAgICAsKHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScpKQorICAgICAgICAgICAgICAgLChfbWtfVGVzdFN1aXRlKCd0ZXN0XzEnLCAndGVzdF8yJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMScsICd0ZXN0XzMnKSkKKyAgICAgICAgICAgICAgICwoX21rX1Rlc3RTdWl0ZSgndGVzdF8xJyksIF9ta19UZXN0U3VpdGUoJ3Rlc3RfMicpKV0KKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMgL1NldCB1cCBhdHRyaWJ1dGVzIG5lZWRlZCBieSBpbmhlcml0ZWQgdGVzdHMKKworICAgICMjIyBUZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyAiY2xhc3MgVGVzdFN1aXRlKFt0ZXN0c10pIgorICAgICMKKyAgICAjIFRoZSB0ZXN0cyBpdGVyYWJsZSBzaG91bGQgYmUgb3B0aW9uYWwKKyAgICBkZWYgdGVzdF9pbml0X190ZXN0c19vcHRpb25hbChzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBUZXN0U3VpdGUgc2hvdWxkIGRlYWwgd2l0aCBlbXB0eSB0ZXN0cyBpdGVyYWJsZXMgYnkgYWxsb3dpbmcgdGhlCisgICAgIyBjcmVhdGlvbiBvZiBhbiBlbXB0eSBzdWl0ZQorICAgIGRlZiB0ZXN0X2luaXRfX2VtcHR5X3Rlc3RzKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCisgICAgIyAuLi4KKyAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKKyAgICAjIG9yIG90aGVyIHRlc3Qgc3VpdGVzIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGJ1aWxkIHRoZSBzdWl0ZSBpbml0aWFsbHkiCisgICAgIworICAgICMgVGVzdFN1aXRlIHNob3VsZCBhbGxvdyBhbnkgaXRlcmFibGUgdG8gcHJvdmlkZSB0ZXN0cworICAgIGRlZiB0ZXN0X2luaXRfX3Rlc3RzX2Zyb21fYW55X2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIHlpZWxkIHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGVfMSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSh0ZXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlXzEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMi5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgICAgIHN1aXRlXzMgPSB1bml0dGVzdC5UZXN0U3VpdGUoc2V0KHN1aXRlXzEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzMuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKKyAgICAjIC4uLgorICAgICMgIklmIHRlc3RzIGlzIGdpdmVuLCBpdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mIGluZGl2aWR1YWwgdGVzdCBjYXNlcworICAgICMgb3Igb3RoZXIgdGVzdCBzdWl0ZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gYnVpbGQgdGhlIHN1aXRlIGluaXRpYWxseSIKKyAgICAjCisgICAgIyBEb2VzIFRlc3RTdWl0ZSgpIGFsc28gYWxsb3cgb3RoZXIgVGVzdFN1aXRlKCkgaW5zdGFuY2VzIHRvIGJlIHByZXNlbnQKKyAgICAjIGluIHRoZSB0ZXN0cyBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9pbml0X19UZXN0U3VpdGVfaW5zdGFuY2VzX2luX3Rlc3RzKHNlbGYpOgorICAgICAgICBkZWYgdGVzdHMoKToKKyAgICAgICAgICAgIGZ0YyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuVGVzdFN1aXRlKFtmdGNdKQorICAgICAgICAgICAgeWllbGQgdW5pdHRlc3QuRnVuY3Rpb25UZXN0Q2FzZShsYW1iZGE6IE5vbmUpCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICMjIyAvVGVzdHMgZm9yIFRlc3RTdWl0ZS5fX2luaXRfXworCisgICAgIyBDb250YWluZXIgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdGhlIGl0ZXIgcHJvdG9jb2wKKyAgICBkZWYgdGVzdF9pdGVyKHNlbGYpOgorICAgICAgICB0ZXN0MSA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDEsIHRlc3QyKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdDEsIHRlc3QyXSkKKworICAgICMgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRlc3RzIHJlcHJlc2VudGVkIGJ5IHRoZSB0aGlzIHRlc3Qgb2JqZWN0LgorICAgICMgLi4udGhpcyBtZXRob2QgaXMgYWxzbyBpbXBsZW1lbnRlZCBieSB0aGUgVGVzdFN1aXRlIGNsYXNzLCB3aGljaCBjYW4KKyAgICAjIHJldHVybiBsYXJnZXIgW2dyZWF0ZXIgdGhhbiAxXSB2YWx1ZXMiCisgICAgIworICAgICMgUHJlc3VtYWJseSBhbiBlbXB0eSBUZXN0U3VpdGUgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fc2ltcGxlKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAwKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBQcmVzdW1hYmx5IGFuIGVtcHR5IFRlc3RTdWl0ZSAoZXZlbiBpZiBpdCBjb250YWlucyBvdGhlciBlbXB0eQorICAgICMgVGVzdFN1aXRlIGluc3RhbmNlcykgcmV0dXJucyAwPworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3plcm9fbmVzdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0MSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW3VuaXR0ZXN0LlRlc3RTdWl0ZSgpXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisKKyAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KKyAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCisgICAgIyByZXR1cm4gbGFyZ2VyIFtncmVhdGVyIHRoYW4gMV0gdmFsdWVzIgorICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX3NpbXBsZShzZWxmKToKKyAgICAgICAgdGVzdDEgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgdGVzdDIgPSB1bml0dGVzdC5GdW5jdGlvblRlc3RDYXNlKGxhbWJkYTogTm9uZSkKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorCisgICAgIyAiUmV0dXJuIHRoZSBudW1iZXIgb2YgdGVzdHMgcmVwcmVzZW50ZWQgYnkgdGhlIHRoaXMgdGVzdCBvYmplY3QuCisgICAgIyAuLi50aGlzIG1ldGhvZCBpcyBhbHNvIGltcGxlbWVudGVkIGJ5IHRoZSBUZXN0U3VpdGUgY2xhc3MsIHdoaWNoIGNhbgorICAgICMgcmV0dXJuIGxhcmdlciBbZ3JlYXRlciB0aGFuIDFdIHZhbHVlcyIKKyAgICAjCisgICAgIyBNYWtlIHN1cmUgdGhpcyBob2xkcyBmb3IgbmVzdGVkIFRlc3RTdWl0ZSBpbnN0YW5jZXMsIHRvbworICAgIGRlZiB0ZXN0X2NvdW50VGVzdENhc2VzX25lc3RlZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdDEodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0MiA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICB0ZXN0MyA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lKQorICAgICAgICBjaGlsZCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgoVGVzdDEoJ3Rlc3QyJyksIHRlc3QyKSkKKyAgICAgICAgcGFyZW50ID0gdW5pdHRlc3QuVGVzdFN1aXRlKCh0ZXN0MywgY2hpbGQsIFRlc3QxKCd0ZXN0MScpKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmVudC5jb3VudFRlc3RDYXNlcygpLCA0KQorCisgICAgIyAiUnVuIHRoZSB0ZXN0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdWl0ZSwgY29sbGVjdGluZyB0aGUgcmVzdWx0IGludG8KKyAgICAjIHRoZSB0ZXN0IHJlc3VsdCBvYmplY3QgcGFzc2VkIGFzIHJlc3VsdC4iCisgICAgIworICAgICMgQW5kIGlmIHRoZXJlIGFyZSBubyB0ZXN0cz8gV2hhdCB0aGVuPworICAgIGRlZiB0ZXN0X3J1bl9fZW1wdHlfc3VpdGUoc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICBzdWl0ZS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbXSkKKworICAgICMgIk5vdGUgdGhhdCB1bmxpa2UgVGVzdENhc2UucnVuKCksIFRlc3RTdWl0ZS5ydW4oKSByZXF1aXJlcyB0aGUKKyAgICAjICJyZXN1bHQgb2JqZWN0IHRvIGJlIHBhc3NlZCBpbi4iCisgICAgZGVmIHRlc3RfcnVuX19yZXF1aXJlc19yZXN1bHQoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWl0ZS5ydW4oKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJGYWlsZWQgdG8gcmFpc2UgVHlwZUVycm9yIikKKworICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCisgICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgorICAgIGRlZiB0ZXN0X3J1bihzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisKKyAgICAgICAgY2xhc3MgTG9nZ2luZ0Nhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ3J1biAlcycgJSBzZWxmLl90ZXN0TWV0aG9kTmFtZSkKKworICAgICAgICAgICAgZGVmIHRlc3QxKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6IHBhc3MKKworICAgICAgICB0ZXN0cyA9IFtMb2dnaW5nQ2FzZSgndGVzdDEnKSwgTG9nZ2luZ0Nhc2UoJ3Rlc3QyJyldCisKKyAgICAgICAgdW5pdHRlc3QuVGVzdFN1aXRlKHRlc3RzKS5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBbJ3J1biB0ZXN0MScsICdydW4gdGVzdDInXSkKKworICAgICMgIkFkZCBhIFRlc3RDYXNlIC4uLiB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdENhc2Uoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKTogcGFzcworCisgICAgICAgIHRlc3QgPSBGb28oJ3Rlc3QnKQorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuYWRkVGVzdCh0ZXN0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3Rlc3RdKQorCisgICAgIyAiQWRkIGEgLi4uIFRlc3RTdWl0ZSB0byB0aGUgc3VpdGUiCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fVGVzdFN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6IHBhc3MKKworICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKFtGb28oJ3Rlc3QnKV0pCisKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0KHN1aXRlXzIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbc3VpdGVfMl0pCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjICJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaXRlcmF0aW5nIG92ZXIgdGVzdHMsIGNhbGxpbmcgYWRkVGVzdCgpIGZvcgorICAgICMgZWFjaCBlbGVtZW50IgorICAgIGRlZiB0ZXN0X2FkZFRlc3RzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIHRlc3RfMihzZWxmKTogcGFzcworCisgICAgICAgIHRlc3RfMSA9IEZvbygndGVzdF8xJykKKyAgICAgICAgdGVzdF8yID0gRm9vKCd0ZXN0XzInKQorICAgICAgICBpbm5lcl9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbdGVzdF8yXSkKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCB0ZXN0XzEKKyAgICAgICAgICAgIHlpZWxkIHRlc3RfMgorICAgICAgICAgICAgeWllbGQgaW5uZXJfc3VpdGUKKworICAgICAgICBzdWl0ZV8xID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGVfMS5hZGRUZXN0cyhnZW4oKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGVfMSksIGxpc3QoZ2VuKCkpKQorCisgICAgICAgICMgIlRoaXMgaXMgZXF1aXZhbGVudCB0byBpdGVyYXRpbmcgb3ZlciB0ZXN0cywgY2FsbGluZyBhZGRUZXN0KCkgZm9yCisgICAgICAgICMgZWFjaCBlbGVtZW50IgorICAgICAgICBzdWl0ZV8yID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgZm9yIHQgaW4gZ2VuKCk6CisgICAgICAgICAgICBzdWl0ZV8yLmFkZFRlc3QodCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlXzEsIHN1aXRlXzIpCisKKyAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKKyAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgorICAgICMKKyAgICAjIFdoYXQgaGFwcGVucyBpZiBpdCBkb2Vzbid0IGdldCBhbiBpdGVyYWJsZT8KKyAgICBkZWYgdGVzdF9hZGRUZXN0X19ub25pdGVyYWJsZShzZWxmKToKKyAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKDUpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkZhaWxlZCB0byByYWlzZSBUeXBlRXJyb3IiKQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fbm9uY2FsbGFibGUoc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCA1KQorCisgICAgZGVmIHRlc3RfYWRkVGVzdF9fY2FzZXN1aXRlY2xhc3Moc2VsZik6CisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCBUZXN0X1Rlc3RTdWl0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzdWl0ZS5hZGRUZXN0LCB1bml0dGVzdC5UZXN0U3VpdGUpCisKKyAgICBkZWYgdGVzdF9hZGRUZXN0c19fc3RyaW5nKHNlbGYpOgorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3VpdGUuYWRkVGVzdHMsICJmb28iKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25faW5fc3VpdGUoc2VsZik6CisgICAgICAgIGRlZiBmKF8pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLmFkZFRlc3QoZikKKworICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKKyAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKworCisKKyAgICBkZWYgdGVzdF9iYXNldGVzdHN1aXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIHdhc1NldFVwID0gRmFsc2UKKyAgICAgICAgICAgIHdhc1Rvcm5Eb3duID0gRmFsc2UKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgICAgICAgICBjbHMud2FzU2V0VXAgPSBUcnVlCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgICAgICAgICAgY2xzLndhc1Rvcm5Eb3duID0gVHJ1ZQorICAgICAgICAgICAgZGVmIHRlc3RQYXNzKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiB0ZXN0RmFpbChzZWxmKToKKyAgICAgICAgICAgICAgICBmYWlsCisgICAgICAgIGNsYXNzIE1vZHVsZShvYmplY3QpOgorICAgICAgICAgICAgd2FzU2V0VXAgPSBGYWxzZQorICAgICAgICAgICAgd2FzVG9ybkRvd24gPSBGYWxzZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1NldFVwID0gVHJ1ZQorICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgICAgICAgICAgICAgTW9kdWxlLndhc1Rvcm5Eb3duID0gVHJ1ZQorCisgICAgICAgIFRlc3QuX19tb2R1bGVfXyA9ICdNb2R1bGUnCisgICAgICAgIHN5cy5tb2R1bGVzWydNb2R1bGUnXSA9IE1vZHVsZQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3lzLm1vZHVsZXMucG9wLCAnTW9kdWxlJykKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUoKQorICAgICAgICBzdWl0ZS5hZGRUZXN0cyhbVGVzdCgndGVzdFBhc3MnKSwgVGVzdCgndGVzdEZhaWwnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMikKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShNb2R1bGUud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9kdWxlLndhc1Rvcm5Eb3duKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFRlc3Qud2FzU2V0VXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVGVzdC53YXNUb3JuRG93bikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAyKQorCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE15U3VpdGUodW5pdHRlc3QuVGVzdFN1aXRlKToKKyAgICAgICAgICAgIGNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RTdWl0ZS5fX2NhbGxfXyhzZWxmLCAqYXJncywgKiprdykKKworICAgICAgICBzdWl0ZSA9IE15U3VpdGUoKQorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgd3JhcHBlciA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHdyYXBwZXIuYWRkVGVzdChzdWl0ZSkKKyAgICAgICAgd3JhcHBlcihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWl0ZS5jYWxsZWQpCisKKyAgICAgICAgIyByZXVzaW5nIHJlc3VsdHMgc2hvdWxkIGJlIHBlcm1pdHRlZCBldmVuIGlmIGFib21pbmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuX3Rlc3RSdW5FbnRlcmVkKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC91dGlsLnB5IGIvTGliL3VuaXR0ZXN0L3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkZjBiOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC91dGlsLnB5CkBAIC0wLDAgKzEsMTQwIEBACisiIiJWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgorCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBPcmRlcmVkRGljdAorCitfX3VuaXR0ZXN0ID0gVHJ1ZQorCitfTUFYX0xFTkdUSCA9IDgwCitkZWYgc2FmZV9yZXByKG9iaiwgc2hvcnQ9RmFsc2UpOgorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gcmVwcihvYmopCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcmVzdWx0ID0gb2JqZWN0Ll9fcmVwcl9fKG9iaikKKyAgICBpZiBub3Qgc2hvcnQgb3IgbGVuKHJlc3VsdCkgPCBfTUFYX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgIHJldHVybiByZXN1bHRbOl9NQVhfTEVOR1RIXSArICcgW3RydW5jYXRlZF0uLi4nCisKK2RlZiBzdHJjbGFzcyhjbHMpOgorICAgIHJldHVybiAiJXMuJXMiICUgKGNscy5fX21vZHVsZV9fLCBjbHMuX19uYW1lX18pCisKK2RlZiBzb3J0ZWRfbGlzdF9kaWZmZXJlbmNlKGV4cGVjdGVkLCBhY3R1YWwpOgorICAgICIiIkZpbmRzIGVsZW1lbnRzIGluIG9ubHkgb25lIG9yIHRoZSBvdGhlciBvZiB0d28sIHNvcnRlZCBpbnB1dCBsaXN0cy4KKworICAgIFJldHVybnMgYSB0d28tZWxlbWVudCB0dXBsZSBvZiBsaXN0cy4gICAgVGhlIGZpcnN0IGxpc3QgY29udGFpbnMgdGhvc2UKKyAgICBlbGVtZW50cyBpbiB0aGUgImV4cGVjdGVkIiBsaXN0IGJ1dCBub3QgaW4gdGhlICJhY3R1YWwiIGxpc3QsIGFuZCB0aGUKKyAgICBzZWNvbmQgY29udGFpbnMgdGhvc2UgZWxlbWVudHMgaW4gdGhlICJhY3R1YWwiIGxpc3QgYnV0IG5vdCBpbiB0aGUKKyAgICAiZXhwZWN0ZWQiIGxpc3QuICAgIER1cGxpY2F0ZSBlbGVtZW50cyBpbiBlaXRoZXIgaW5wdXQgbGlzdCBhcmUgaWdub3JlZC4KKyAgICAiIiIKKyAgICBpID0gaiA9IDAKKyAgICBtaXNzaW5nID0gW10KKyAgICB1bmV4cGVjdGVkID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBlID0gZXhwZWN0ZWRbaV0KKyAgICAgICAgICAgIGEgPSBhY3R1YWxbal0KKyAgICAgICAgICAgIGlmIGUgPCBhOgorICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKGUpCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgd2hpbGUgZXhwZWN0ZWRbaV0gPT0gZToKKyAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICBlbGlmIGUgPiBhOgorICAgICAgICAgICAgICAgIHVuZXhwZWN0ZWQuYXBwZW5kKGEpCisgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgd2hpbGUgYWN0dWFsW2pdID09IGE6CisgICAgICAgICAgICAgICAgICAgIGogKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIGV4cGVjdGVkW2ldID09IGU6CisgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgYWN0dWFsW2pdID09IGE6CisgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDEKKyAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CisgICAgICAgICAgICBtaXNzaW5nLmV4dGVuZChleHBlY3RlZFtpOl0pCisgICAgICAgICAgICB1bmV4cGVjdGVkLmV4dGVuZChhY3R1YWxbajpdKQorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gbWlzc2luZywgdW5leHBlY3RlZAorCisKK2RlZiB1bm9yZGVyYWJsZV9saXN0X2RpZmZlcmVuY2UoZXhwZWN0ZWQsIGFjdHVhbCk6CisgICAgIiIiU2FtZSBiZWhhdmlvciBhcyBzb3J0ZWRfbGlzdF9kaWZmZXJlbmNlIGJ1dAorICAgIGZvciBsaXN0cyBvZiB1bm9yZGVyYWJsZSBpdGVtcyAobGlrZSBkaWN0cykuCisKKyAgICBBcyBpdCBkb2VzIGEgbGluZWFyIHNlYXJjaCBwZXIgaXRlbSAocmVtb3ZlKSBpdAorICAgIGhhcyBPKG4qbikgcGVyZm9ybWFuY2UuIiIiCisgICAgbWlzc2luZyA9IFtdCisgICAgd2hpbGUgZXhwZWN0ZWQ6CisgICAgICAgIGl0ZW0gPSBleHBlY3RlZC5wb3AoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhY3R1YWwucmVtb3ZlKGl0ZW0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoaXRlbSkKKworICAgICMgYW55dGhpbmcgbGVmdCBpbiBhY3R1YWwgaXMgdW5leHBlY3RlZAorICAgIHJldHVybiBtaXNzaW5nLCBhY3R1YWwKKworZGVmIHRocmVlX3dheV9jbXAoeCwgeSk6CisgICAgIiIiUmV0dXJuIC0xIGlmIHggPCB5LCAwIGlmIHggPT0geSBhbmQgMSBpZiB4ID4geSIiIgorICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQorCitfTWlzbWF0Y2ggPSBuYW1lZHR1cGxlKCdNaXNtYXRjaCcsICdhY3R1YWwgZXhwZWN0ZWQgdmFsdWUnKQorCitkZWYgX2NvdW50X2RpZmZfYWxsX3B1cnBvc2UoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgJ1JldHVybnMgbGlzdCBvZiAoY250X2FjdCwgY250X2V4cCwgZWxlbSkgdHJpcGxlcyB3aGVyZSB0aGUgY291bnRzIGRpZmZlcicKKyAgICAjIGVsZW1lbnRzIG5lZWQgbm90IGJlIGhhc2hhYmxlCisgICAgcywgdCA9IGxpc3QoYWN0dWFsKSwgbGlzdChleHBlY3RlZCkKKyAgICBtLCBuID0gbGVuKHMpLCBsZW4odCkKKyAgICBOVUxMID0gb2JqZWN0KCkKKyAgICByZXN1bHQgPSBbXQorICAgIGZvciBpLCBlbGVtIGluIGVudW1lcmF0ZShzKToKKyAgICAgICAgaWYgZWxlbSBpcyBOVUxMOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgY250X3MgPSBjbnRfdCA9IDAKKyAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSwgbSk6CisgICAgICAgICAgICBpZiBzW2pdID09IGVsZW06CisgICAgICAgICAgICAgICAgY250X3MgKz0gMQorICAgICAgICAgICAgICAgIHNbal0gPSBOVUxMCisgICAgICAgIGZvciBqLCBvdGhlcl9lbGVtIGluIGVudW1lcmF0ZSh0KToKKyAgICAgICAgICAgIGlmIG90aGVyX2VsZW0gPT0gZWxlbToKKyAgICAgICAgICAgICAgICBjbnRfdCArPSAxCisgICAgICAgICAgICAgICAgdFtqXSA9IE5VTEwKKyAgICAgICAgaWYgY250X3MgIT0gY250X3Q6CisgICAgICAgICAgICBkaWZmID0gX01pc21hdGNoKGNudF9zLCBjbnRfdCwgZWxlbSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZGlmZikKKworICAgIGZvciBpLCBlbGVtIGluIGVudW1lcmF0ZSh0KToKKyAgICAgICAgaWYgZWxlbSBpcyBOVUxMOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgY250X3QgPSAwCisgICAgICAgIGZvciBqIGluIHJhbmdlKGksIG4pOgorICAgICAgICAgICAgaWYgdFtqXSA9PSBlbGVtOgorICAgICAgICAgICAgICAgIGNudF90ICs9IDEKKyAgICAgICAgICAgICAgICB0W2pdID0gTlVMTAorICAgICAgICBkaWZmID0gX01pc21hdGNoKDAsIGNudF90LCBlbGVtKQorICAgICAgICByZXN1bHQuYXBwZW5kKGRpZmYpCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgX29yZGVyZWRfY291bnQoaXRlcmFibGUpOgorICAgICdSZXR1cm4gZGljdCBvZiBlbGVtZW50IGNvdW50cywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBmaXJzdCBzZWVuJworICAgIGMgPSBPcmRlcmVkRGljdCgpCisgICAgZm9yIGVsZW0gaW4gaXRlcmFibGU6CisgICAgICAgIGNbZWxlbV0gPSBjLmdldChlbGVtLCAwKSArIDEKKyAgICByZXR1cm4gYworCitkZWYgX2NvdW50X2RpZmZfaGFzaGFibGUoYWN0dWFsLCBleHBlY3RlZCk6CisgICAgJ1JldHVybnMgbGlzdCBvZiAoY250X2FjdCwgY250X2V4cCwgZWxlbSkgdHJpcGxlcyB3aGVyZSB0aGUgY291bnRzIGRpZmZlcicKKyAgICAjIGVsZW1lbnRzIG11c3QgYmUgaGFzaGFibGUKKyAgICBzLCB0ID0gX29yZGVyZWRfY291bnQoYWN0dWFsKSwgX29yZGVyZWRfY291bnQoZXhwZWN0ZWQpCisgICAgcmVzdWx0ID0gW10KKyAgICBmb3IgZWxlbSwgY250X3MgaW4gcy5pdGVtcygpOgorICAgICAgICBjbnRfdCA9IHQuZ2V0KGVsZW0sIDApCisgICAgICAgIGlmIGNudF9zICE9IGNudF90OgorICAgICAgICAgICAgZGlmZiA9IF9NaXNtYXRjaChjbnRfcywgY250X3QsIGVsZW0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRpZmYpCisgICAgZm9yIGVsZW0sIGNudF90IGluIHQuaXRlbXMoKToKKyAgICAgICAgaWYgZWxlbSBub3QgaW4gczoKKyAgICAgICAgICAgIGRpZmYgPSBfTWlzbWF0Y2goMCwgY250X3QsIGVsZW0pCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGRpZmYpCisgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9wYXJzZS5weSBiL0xpYi91cmxsaWIvcGFyc2UucHkKaW5kZXggYTIwYTNkNC4uNDVhZTIwMiAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9wYXJzZS5weQorKysgYi9MaWIvdXJsbGliL3BhcnNlLnB5CkBAIC01LDYgKzUsOSBAQAogUkZDIDM5ODYgKFNURDY2KTogIlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMiIGJ5IFQuIEJlcm5lcnMtTGVlLCBSLiBGaWVsZGluZwogYW5kIEwuICBNYXNpbnRlciwgSmFudWFyeSAyMDA1LgogCitSRkMgMjczMiA6ICJGb3JtYXQgZm9yIExpdGVyYWwgSVB2NiBBZGRyZXNzZXMgaW4gVVJMJ3MgYnkgUi5IaW5kZW4sIEIuQ2FycGVudGVyCithbmQgTC5NYXNpbnRlciwgRGVjZW1iZXIgMTk5OS4KKwogUkZDIDIzOTY6ICAiVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycyAoVVJJKSI6IEdlbmVyaWMgU3ludGF4IGJ5IFQuCiBCZXJuZXJzLUxlZSwgUi4gRmllbGRpbmcsIGFuZCBMLiBNYXNpbnRlciwgQXVndXN0IDE5OTguCiAKQEAgLTI4LDggKzMxLDggQEAKIGltcG9ydCBjb2xsZWN0aW9ucwogCiBfX2FsbF9fID0gWyJ1cmxwYXJzZSIsICJ1cmx1bnBhcnNlIiwgInVybGpvaW4iLCAidXJsZGVmcmFnIiwKLSAgICAgICAgICAgInVybHNwbGl0IiwgInVybHVuc3BsaXQiLCAicGFyc2VfcXMiLCAicGFyc2VfcXNsIiwKLSAgICAgICAgICAgInF1b3RlIiwgInF1b3RlX3BsdXMiLCAicXVvdGVfZnJvbV9ieXRlcyIsCisgICAgICAgICAgICJ1cmxzcGxpdCIsICJ1cmx1bnNwbGl0IiwgInVybGVuY29kZSIsICJwYXJzZV9xcyIsCisgICAgICAgICAgICJwYXJzZV9xc2wiLCAicXVvdGUiLCAicXVvdGVfcGx1cyIsICJxdW90ZV9mcm9tX2J5dGVzIiwKICAgICAgICAgICAgInVucXVvdGUiLCAidW5xdW90ZV9wbHVzIiwgInVucXVvdGVfdG9fYnl0ZXMiXQogCiAjIEEgY2xhc3NpZmljYXRpb24gb2Ygc2NoZW1lcyAoJycgbWVhbnMgYXBwbHkgYnkgZGVmYXVsdCkKQEAgLTU3LDYgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAnMDEyMzQ1Njc4OScKICAgICAgICAgICAgICAgICAnKy0uJykKIAorIyBYWFg6IENvbnNpZGVyIHJlcGxhY2luZyB3aXRoIGZ1bmN0b29scy5scnVfY2FjaGUKIE1BWF9DQUNIRV9TSVpFID0gMjAKIF9wYXJzZV9jYWNoZSA9IHt9CiAKQEAgLTY2LDY0ICs3MCwyMTAgQEAKICAgICBfc2FmZV9xdW90ZXJzLmNsZWFyKCkKIAogCi1jbGFzcyBSZXN1bHRNaXhpbihvYmplY3QpOgotICAgICIiIlNoYXJlZCBtZXRob2RzIGZvciB0aGUgcGFyc2VkIHJlc3VsdCBvYmplY3RzLiIiIgorIyBIZWxwZXJzIGZvciBieXRlcyBoYW5kbGluZworIyBGb3IgMy4yLCB3ZSBkZWxpYmVyYXRlbHkgcmVxdWlyZSBhcHBsaWNhdGlvbnMgdGhhdAorIyBoYW5kbGUgaW1wcm9wZXJseSBxdW90ZWQgVVJMcyB0byBkbyB0aGVpciBvd24KKyMgZGVjb2RpbmcgYW5kIGVuY29kaW5nLiBJZiB2YWxpZCB1c2UgY2FzZXMgYXJlCisjIHByZXNlbnRlZCwgd2UgbWF5IHJlbGF4IHRoaXMgYnkgdXNpbmcgbGF0aW4tMQorIyBkZWNvZGluZyBpbnRlcm5hbGx5IGZvciAzLjMKK19pbXBsaWNpdF9lbmNvZGluZyA9ICdhc2NpaScKK19pbXBsaWNpdF9lcnJvcnMgPSAnc3RyaWN0JworCitkZWYgX25vb3Aob2JqKToKKyAgICByZXR1cm4gb2JqCisKK2RlZiBfZW5jb2RlX3Jlc3VsdChvYmosIGVuY29kaW5nPV9pbXBsaWNpdF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz1faW1wbGljaXRfZXJyb3JzKToKKyAgICByZXR1cm4gb2JqLmVuY29kZShlbmNvZGluZywgZXJyb3JzKQorCitkZWYgX2RlY29kZV9hcmdzKGFyZ3MsIGVuY29kaW5nPV9pbXBsaWNpdF9lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPV9pbXBsaWNpdF9lcnJvcnMpOgorICAgIHJldHVybiB0dXBsZSh4LmRlY29kZShlbmNvZGluZywgZXJyb3JzKSBpZiB4IGVsc2UgJycgZm9yIHggaW4gYXJncykKKworZGVmIF9jb2VyY2VfYXJncygqYXJncyk6CisgICAgIyBJbnZva2VzIGRlY29kZSBpZiBuZWNlc3NhcnkgdG8gY3JlYXRlIHN0ciBhcmdzCisgICAgIyBhbmQgcmV0dXJucyB0aGUgY29lcmNlZCBpbnB1dHMgYWxvbmcgd2l0aAorICAgICMgYW4gYXBwcm9wcmlhdGUgcmVzdWx0IGNvZXJjaW9uIGZ1bmN0aW9uCisgICAgIyAgIC0gbm9vcCBmb3Igc3RyIGlucHV0cworICAgICMgICAtIGVuY29kaW5nIGZ1bmN0aW9uIG90aGVyd2lzZQorICAgIHN0cl9pbnB1dCA9IGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKQorICAgIGZvciBhcmcgaW4gYXJnc1sxOl06CisgICAgICAgICMgV2Ugc3BlY2lhbC1jYXNlIHRoZSBlbXB0eSBzdHJpbmcgdG8gc3VwcG9ydCB0aGUKKyAgICAgICAgIyAic2NoZW1lPScnIiBkZWZhdWx0IGFyZ3VtZW50IHRvIHNvbWUgZnVuY3Rpb25zCisgICAgICAgIGlmIGFyZyBhbmQgaXNpbnN0YW5jZShhcmcsIHN0cikgIT0gc3RyX2lucHV0OgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgbWl4IHN0ciBhbmQgbm9uLXN0ciBhcmd1bWVudHMiKQorICAgIGlmIHN0cl9pbnB1dDoKKyAgICAgICAgcmV0dXJuIGFyZ3MgKyAoX25vb3AsKQorICAgIHJldHVybiBfZGVjb2RlX2FyZ3MoYXJncykgKyAoX2VuY29kZV9yZXN1bHQsKQorCisjIFJlc3VsdCBvYmplY3RzIGFyZSBtb3JlIGhlbHBmdWwgdGhhbiBzaW1wbGUgdHVwbGVzCitjbGFzcyBfUmVzdWx0TWl4aW5TdHIob2JqZWN0KToKKyAgICAiIiJTdGFuZGFyZCBhcHByb2FjaCB0byBlbmNvZGluZyBwYXJzZWQgcmVzdWx0cyBmcm9tIHN0ciB0byBieXRlcyIiIgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBzZWxmLl9lbmNvZGVkX2NvdW50ZXJwYXJ0KCooeC5lbmNvZGUoZW5jb2RpbmcsIGVycm9ycykgZm9yIHggaW4gc2VsZikpCisKKworY2xhc3MgX1Jlc3VsdE1peGluQnl0ZXMob2JqZWN0KToKKyAgICAiIiJTdGFuZGFyZCBhcHByb2FjaCB0byBkZWNvZGluZyBwYXJzZWQgcmVzdWx0cyBmcm9tIGJ5dGVzIHRvIHN0ciIiIgorICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsIGVuY29kaW5nPSdhc2NpaScsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBzZWxmLl9kZWNvZGVkX2NvdW50ZXJwYXJ0KCooeC5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycykgZm9yIHggaW4gc2VsZikpCisKKworY2xhc3MgX05ldGxvY1Jlc3VsdE1peGluQmFzZShvYmplY3QpOgorICAgICIiIlNoYXJlZCBtZXRob2RzIGZvciB0aGUgcGFyc2VkIHJlc3VsdCBvYmplY3RzIGNvbnRhaW5pbmcgYSBuZXRsb2MgZWxlbWVudCIiIgorICAgIF9fc2xvdHNfXyA9ICgpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgdXNlcm5hbWUoc2VsZik6Ci0gICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jCi0gICAgICAgIGlmICJAIiBpbiBuZXRsb2M6Ci0gICAgICAgICAgICB1c2VyaW5mbyA9IG5ldGxvYy5yc3BsaXQoIkAiLCAxKVswXQotICAgICAgICAgICAgaWYgIjoiIGluIHVzZXJpbmZvOgotICAgICAgICAgICAgICAgIHVzZXJpbmZvID0gdXNlcmluZm8uc3BsaXQoIjoiLCAxKVswXQotICAgICAgICAgICAgcmV0dXJuIHVzZXJpbmZvCi0gICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl91c2VyaW5mb1swXQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhc3N3b3JkKHNlbGYpOgotICAgICAgICBuZXRsb2MgPSBzZWxmLm5ldGxvYwotICAgICAgICBpZiAiQCIgaW4gbmV0bG9jOgotICAgICAgICAgICAgdXNlcmluZm8gPSBuZXRsb2MucnNwbGl0KCJAIiwgMSlbMF0KLSAgICAgICAgICAgIGlmICI6IiBpbiB1c2VyaW5mbzoKLSAgICAgICAgICAgICAgICByZXR1cm4gdXNlcmluZm8uc3BsaXQoIjoiLCAxKVsxXQotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fdXNlcmluZm9bMV0KIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBob3N0bmFtZShzZWxmKToKLSAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2MKLSAgICAgICAgaWYgIkAiIGluIG5ldGxvYzoKLSAgICAgICAgICAgIG5ldGxvYyA9IG5ldGxvYy5yc3BsaXQoIkAiLCAxKVsxXQotICAgICAgICBpZiAiOiIgaW4gbmV0bG9jOgotICAgICAgICAgICAgbmV0bG9jID0gbmV0bG9jLnNwbGl0KCI6IiwgMSlbMF0KLSAgICAgICAgcmV0dXJuIG5ldGxvYy5sb3dlcigpIG9yIE5vbmUKKyAgICAgICAgaG9zdG5hbWUgPSBzZWxmLl9ob3N0aW5mb1swXQorICAgICAgICBpZiBub3QgaG9zdG5hbWU6CisgICAgICAgICAgICBob3N0bmFtZSA9IE5vbmUKKyAgICAgICAgZWxpZiBob3N0bmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGhvc3RuYW1lID0gaG9zdG5hbWUubG93ZXIoKQorICAgICAgICByZXR1cm4gaG9zdG5hbWUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwb3J0KHNlbGYpOgorICAgICAgICBwb3J0ID0gc2VsZi5faG9zdGluZm9bMV0KKyAgICAgICAgaWYgcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHBvcnQgPSBpbnQocG9ydCwgMTApCisgICAgICAgIHJldHVybiBwb3J0CisKKworY2xhc3MgX05ldGxvY1Jlc3VsdE1peGluU3RyKF9OZXRsb2NSZXN1bHRNaXhpbkJhc2UsIF9SZXN1bHRNaXhpblN0cik6CisgICAgX19zbG90c19fID0gKCkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfdXNlcmluZm8oc2VsZik6CiAgICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jCi0gICAgICAgIGlmICJAIiBpbiBuZXRsb2M6Ci0gICAgICAgICAgICBuZXRsb2MgPSBuZXRsb2MucnNwbGl0KCJAIiwgMSlbMV0KLSAgICAgICAgaWYgIjoiIGluIG5ldGxvYzoKLSAgICAgICAgICAgIHBvcnQgPSBuZXRsb2Muc3BsaXQoIjoiLCAxKVsxXQotICAgICAgICAgICAgcmV0dXJuIGludChwb3J0LCAxMCkKLSAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdXNlcmluZm8sIGhhdmVfaW5mbywgaG9zdGluZm8gPSBuZXRsb2MucnBhcnRpdGlvbignQCcpCisgICAgICAgIGlmIGhhdmVfaW5mbzoKKyAgICAgICAgICAgIHVzZXJuYW1lLCBoYXZlX3Bhc3N3b3JkLCBwYXNzd29yZCA9IHVzZXJpbmZvLnBhcnRpdGlvbignOicpCisgICAgICAgICAgICBpZiBub3QgaGF2ZV9wYXNzd29yZDoKKyAgICAgICAgICAgICAgICBwYXNzd29yZCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZXJuYW1lID0gcGFzc3dvcmQgPSBOb25lCisgICAgICAgIHJldHVybiB1c2VybmFtZSwgcGFzc3dvcmQKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfaG9zdGluZm8oc2VsZik6CisgICAgICAgIG5ldGxvYyA9IHNlbGYubmV0bG9jCisgICAgICAgIF8sIF8sIGhvc3RpbmZvID0gbmV0bG9jLnJwYXJ0aXRpb24oJ0AnKQorICAgICAgICBfLCBoYXZlX29wZW5fYnIsIGJyYWNrZXRlZCA9IGhvc3RpbmZvLnBhcnRpdGlvbignWycpCisgICAgICAgIGlmIGhhdmVfb3Blbl9icjoKKyAgICAgICAgICAgIGhvc3RuYW1lLCBfLCBwb3J0ID0gYnJhY2tldGVkLnBhcnRpdGlvbignXScpCisgICAgICAgICAgICBfLCBoYXZlX3BvcnQsIHBvcnQgPSBwb3J0LnBhcnRpdGlvbignOicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3N0bmFtZSwgaGF2ZV9wb3J0LCBwb3J0ID0gaG9zdGluZm8ucGFydGl0aW9uKCc6JykKKyAgICAgICAgaWYgbm90IGhhdmVfcG9ydDoKKyAgICAgICAgICAgIHBvcnQgPSBOb25lCisgICAgICAgIHJldHVybiBob3N0bmFtZSwgcG9ydAorCisKK2NsYXNzIF9OZXRsb2NSZXN1bHRNaXhpbkJ5dGVzKF9OZXRsb2NSZXN1bHRNaXhpbkJhc2UsIF9SZXN1bHRNaXhpbkJ5dGVzKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF91c2VyaW5mbyhzZWxmKToKKyAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2MKKyAgICAgICAgdXNlcmluZm8sIGhhdmVfaW5mbywgaG9zdGluZm8gPSBuZXRsb2MucnBhcnRpdGlvbihiJ0AnKQorICAgICAgICBpZiBoYXZlX2luZm86CisgICAgICAgICAgICB1c2VybmFtZSwgaGF2ZV9wYXNzd29yZCwgcGFzc3dvcmQgPSB1c2VyaW5mby5wYXJ0aXRpb24oYic6JykKKyAgICAgICAgICAgIGlmIG5vdCBoYXZlX3Bhc3N3b3JkOgorICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNlcm5hbWUgPSBwYXNzd29yZCA9IE5vbmUKKyAgICAgICAgcmV0dXJuIHVzZXJuYW1lLCBwYXNzd29yZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9ob3N0aW5mbyhzZWxmKToKKyAgICAgICAgbmV0bG9jID0gc2VsZi5uZXRsb2MKKyAgICAgICAgXywgXywgaG9zdGluZm8gPSBuZXRsb2MucnBhcnRpdGlvbihiJ0AnKQorICAgICAgICBfLCBoYXZlX29wZW5fYnIsIGJyYWNrZXRlZCA9IGhvc3RpbmZvLnBhcnRpdGlvbihiJ1snKQorICAgICAgICBpZiBoYXZlX29wZW5fYnI6CisgICAgICAgICAgICBob3N0bmFtZSwgXywgcG9ydCA9IGJyYWNrZXRlZC5wYXJ0aXRpb24oYiddJykKKyAgICAgICAgICAgIF8sIGhhdmVfcG9ydCwgcG9ydCA9IHBvcnQucGFydGl0aW9uKGInOicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBob3N0bmFtZSwgaGF2ZV9wb3J0LCBwb3J0ID0gaG9zdGluZm8ucGFydGl0aW9uKGInOicpCisgICAgICAgIGlmIG5vdCBoYXZlX3BvcnQ6CisgICAgICAgICAgICBwb3J0ID0gTm9uZQorICAgICAgICByZXR1cm4gaG9zdG5hbWUsIHBvcnQKKwogCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCiAKLWNsYXNzIFNwbGl0UmVzdWx0KG5hbWVkdHVwbGUoJ1NwbGl0UmVzdWx0JywgJ3NjaGVtZSBuZXRsb2MgcGF0aCBxdWVyeSBmcmFnbWVudCcpLCBSZXN1bHRNaXhpbik6CitfRGVmcmFnUmVzdWx0QmFzZSA9IG5hbWVkdHVwbGUoJ0RlZnJhZ1Jlc3VsdCcsICd1cmwgZnJhZ21lbnQnKQorX1NwbGl0UmVzdWx0QmFzZSA9IG5hbWVkdHVwbGUoJ1NwbGl0UmVzdWx0JywgJ3NjaGVtZSBuZXRsb2MgcGF0aCBxdWVyeSBmcmFnbWVudCcpCitfUGFyc2VSZXN1bHRCYXNlID0gbmFtZWR0dXBsZSgnUGFyc2VSZXN1bHQnLCAnc2NoZW1lIG5ldGxvYyBwYXRoIHBhcmFtcyBxdWVyeSBmcmFnbWVudCcpCiAKKyMgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbGlhcyBfTmV0bG9jUmVzdWx0TWl4aW5TdHIKKyMgUmVzdWx0QmFzZSBpcyBubyBsb25nZXIgcGFydCBvZiB0aGUgZG9jdW1lbnRlZCBBUEksIGJ1dCBpdCBpcworIyByZXRhaW5lZCBzaW5jZSBkZXByZWNhdGluZyBpdCBpc24ndCB3b3J0aCB0aGUgaGFzc2xlCitSZXN1bHRCYXNlID0gX05ldGxvY1Jlc3VsdE1peGluU3RyCisKKyMgU3RydWN0dXJlZCByZXN1bHQgb2JqZWN0cyBmb3Igc3RyaW5nIGRhdGEKK2NsYXNzIERlZnJhZ1Jlc3VsdChfRGVmcmFnUmVzdWx0QmFzZSwgX1Jlc3VsdE1peGluU3RyKToKICAgICBfX3Nsb3RzX18gPSAoKQorICAgIGRlZiBnZXR1cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51cmwgKyAnIycgKyBzZWxmLmZyYWdtZW50CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51cmwKIAorY2xhc3MgU3BsaXRSZXN1bHQoX1NwbGl0UmVzdWx0QmFzZSwgX05ldGxvY1Jlc3VsdE1peGluU3RyKToKKyAgICBfX3Nsb3RzX18gPSAoKQogICAgIGRlZiBnZXR1cmwoc2VsZik6CiAgICAgICAgIHJldHVybiB1cmx1bnNwbGl0KHNlbGYpCiAKLQotY2xhc3MgUGFyc2VSZXN1bHQobmFtZWR0dXBsZSgnUGFyc2VSZXN1bHQnLCAnc2NoZW1lIG5ldGxvYyBwYXRoIHBhcmFtcyBxdWVyeSBmcmFnbWVudCcpLCBSZXN1bHRNaXhpbik6Ci0KK2NsYXNzIFBhcnNlUmVzdWx0KF9QYXJzZVJlc3VsdEJhc2UsIF9OZXRsb2NSZXN1bHRNaXhpblN0cik6CiAgICAgX19zbG90c19fID0gKCkKLQogICAgIGRlZiBnZXR1cmwoc2VsZik6CiAgICAgICAgIHJldHVybiB1cmx1bnBhcnNlKHNlbGYpCiAKKyMgU3RydWN0dXJlZCByZXN1bHQgb2JqZWN0cyBmb3IgYnl0ZXMgZGF0YQorY2xhc3MgRGVmcmFnUmVzdWx0Qnl0ZXMoX0RlZnJhZ1Jlc3VsdEJhc2UsIF9SZXN1bHRNaXhpbkJ5dGVzKToKKyAgICBfX3Nsb3RzX18gPSAoKQorICAgIGRlZiBnZXR1cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi51cmwgKyBiJyMnICsgc2VsZi5mcmFnbWVudAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudXJsCisKK2NsYXNzIFNwbGl0UmVzdWx0Qnl0ZXMoX1NwbGl0UmVzdWx0QmFzZSwgX05ldGxvY1Jlc3VsdE1peGluQnl0ZXMpOgorICAgIF9fc2xvdHNfXyA9ICgpCisgICAgZGVmIGdldHVybChzZWxmKToKKyAgICAgICAgcmV0dXJuIHVybHVuc3BsaXQoc2VsZikKKworY2xhc3MgUGFyc2VSZXN1bHRCeXRlcyhfUGFyc2VSZXN1bHRCYXNlLCBfTmV0bG9jUmVzdWx0TWl4aW5CeXRlcyk6CisgICAgX19zbG90c19fID0gKCkKKyAgICBkZWYgZ2V0dXJsKHNlbGYpOgorICAgICAgICByZXR1cm4gdXJsdW5wYXJzZShzZWxmKQorCisjIFNldCB1cCB0aGUgZW5jb2RlL2RlY29kZSByZXN1bHQgcGFpcnMKK2RlZiBfZml4X3Jlc3VsdF90cmFuc2NvZGluZygpOgorICAgIF9yZXN1bHRfcGFpcnMgPSAoCisgICAgICAgIChEZWZyYWdSZXN1bHQsIERlZnJhZ1Jlc3VsdEJ5dGVzKSwKKyAgICAgICAgKFNwbGl0UmVzdWx0LCBTcGxpdFJlc3VsdEJ5dGVzKSwKKyAgICAgICAgKFBhcnNlUmVzdWx0LCBQYXJzZVJlc3VsdEJ5dGVzKSwKKyAgICApCisgICAgZm9yIF9kZWNvZGVkLCBfZW5jb2RlZCBpbiBfcmVzdWx0X3BhaXJzOgorICAgICAgICBfZGVjb2RlZC5fZW5jb2RlZF9jb3VudGVycGFydCA9IF9lbmNvZGVkCisgICAgICAgIF9lbmNvZGVkLl9kZWNvZGVkX2NvdW50ZXJwYXJ0ID0gX2RlY29kZWQKKworX2ZpeF9yZXN1bHRfdHJhbnNjb2RpbmcoKQorZGVsIF9maXhfcmVzdWx0X3RyYW5zY29kaW5nCiAKIGRlZiB1cmxwYXJzZSh1cmwsIHNjaGVtZT0nJywgYWxsb3dfZnJhZ21lbnRzPVRydWUpOgogICAgICIiIlBhcnNlIGEgVVJMIGludG8gNiBjb21wb25lbnRzOgpAQCAtMTMxLDEzICsyODEsMTUgQEAKICAgICBSZXR1cm4gYSA2LXR1cGxlOiAoc2NoZW1lLCBuZXRsb2MsIHBhdGgsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KS4KICAgICBOb3RlIHRoYXQgd2UgZG9uJ3QgYnJlYWsgdGhlIGNvbXBvbmVudHMgdXAgaW4gc21hbGxlciBiaXRzCiAgICAgKGUuZy4gbmV0bG9jIGlzIGEgc2luZ2xlIHN0cmluZykgYW5kIHdlIGRvbid0IGV4cGFuZCAlIGVzY2FwZXMuIiIiCisgICAgdXJsLCBzY2hlbWUsIF9jb2VyY2VfcmVzdWx0ID0gX2NvZXJjZV9hcmdzKHVybCwgc2NoZW1lKQogICAgIHR1cGxlID0gdXJsc3BsaXQodXJsLCBzY2hlbWUsIGFsbG93X2ZyYWdtZW50cykKICAgICBzY2hlbWUsIG5ldGxvYywgdXJsLCBxdWVyeSwgZnJhZ21lbnQgPSB0dXBsZQogICAgIGlmIHNjaGVtZSBpbiB1c2VzX3BhcmFtcyBhbmQgJzsnIGluIHVybDoKICAgICAgICAgdXJsLCBwYXJhbXMgPSBfc3BsaXRwYXJhbXModXJsKQogICAgIGVsc2U6CiAgICAgICAgIHBhcmFtcyA9ICcnCi0gICAgcmV0dXJuIFBhcnNlUmVzdWx0KHNjaGVtZSwgbmV0bG9jLCB1cmwsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KQorICAgIHJlc3VsdCA9IFBhcnNlUmVzdWx0KHNjaGVtZSwgbmV0bG9jLCB1cmwsIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KQorICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdChyZXN1bHQpCiAKIGRlZiBfc3BsaXRwYXJhbXModXJsKToKICAgICBpZiAnLycgIGluIHVybDoKQEAgLTE2MiwxMSArMzE0LDEyIEBACiAgICAgUmV0dXJuIGEgNS10dXBsZTogKHNjaGVtZSwgbmV0bG9jLCBwYXRoLCBxdWVyeSwgZnJhZ21lbnQpLgogICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBicmVhayB0aGUgY29tcG9uZW50cyB1cCBpbiBzbWFsbGVyIGJpdHMKICAgICAoZS5nLiBuZXRsb2MgaXMgYSBzaW5nbGUgc3RyaW5nKSBhbmQgd2UgZG9uJ3QgZXhwYW5kICUgZXNjYXBlcy4iIiIKKyAgICB1cmwsIHNjaGVtZSwgX2NvZXJjZV9yZXN1bHQgPSBfY29lcmNlX2FyZ3ModXJsLCBzY2hlbWUpCiAgICAgYWxsb3dfZnJhZ21lbnRzID0gYm9vbChhbGxvd19mcmFnbWVudHMpCiAgICAga2V5ID0gdXJsLCBzY2hlbWUsIGFsbG93X2ZyYWdtZW50cywgdHlwZSh1cmwpLCB0eXBlKHNjaGVtZSkKICAgICBjYWNoZWQgPSBfcGFyc2VfY2FjaGUuZ2V0KGtleSwgTm9uZSkKICAgICBpZiBjYWNoZWQ6Ci0gICAgICAgIHJldHVybiBjYWNoZWQKKyAgICAgICAgcmV0dXJuIF9jb2VyY2VfcmVzdWx0KGNhY2hlZCkKICAgICBpZiBsZW4oX3BhcnNlX2NhY2hlKSA+PSBNQVhfQ0FDSEVfU0laRTogIyBhdm9pZCBydW5hd2F5IGdyb3d0aAogICAgICAgICBjbGVhcl9jYWNoZSgpCiAgICAgbmV0bG9jID0gcXVlcnkgPSBmcmFnbWVudCA9ICcnCkBAIC0xNzcsMTMgKzMzMCwxNiBAQAogICAgICAgICAgICAgdXJsID0gdXJsW2krMTpdCiAgICAgICAgICAgICBpZiB1cmxbOjJdID09ICcvLyc6CiAgICAgICAgICAgICAgICAgbmV0bG9jLCB1cmwgPSBfc3BsaXRuZXRsb2ModXJsLCAyKQorICAgICAgICAgICAgICAgIGlmICgoJ1snIGluIG5ldGxvYyBhbmQgJ10nIG5vdCBpbiBuZXRsb2MpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAoJ10nIGluIG5ldGxvYyBhbmQgJ1snIG5vdCBpbiBuZXRsb2MpKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBJUHY2IFVSTCIpCiAgICAgICAgICAgICBpZiBhbGxvd19mcmFnbWVudHMgYW5kICcjJyBpbiB1cmw6CiAgICAgICAgICAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybC5zcGxpdCgnIycsIDEpCiAgICAgICAgICAgICBpZiAnPycgaW4gdXJsOgogICAgICAgICAgICAgICAgIHVybCwgcXVlcnkgPSB1cmwuc3BsaXQoJz8nLCAxKQogICAgICAgICAgICAgdiA9IFNwbGl0UmVzdWx0KHNjaGVtZSwgbmV0bG9jLCB1cmwsIHF1ZXJ5LCBmcmFnbWVudCkKICAgICAgICAgICAgIF9wYXJzZV9jYWNoZVtrZXldID0gdgotICAgICAgICAgICAgcmV0dXJuIHYKKyAgICAgICAgICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh2KQogICAgICAgICBmb3IgYyBpbiB1cmxbOmldOgogICAgICAgICAgICAgaWYgYyBub3QgaW4gc2NoZW1lX2NoYXJzOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xOTcsMjMgKzM1MywyNyBAQAogCiAgICAgaWYgdXJsWzoyXSA9PSAnLy8nOgogICAgICAgICBuZXRsb2MsIHVybCA9IF9zcGxpdG5ldGxvYyh1cmwsIDIpCisgICAgICAgIGlmICgoJ1snIGluIG5ldGxvYyBhbmQgJ10nIG5vdCBpbiBuZXRsb2MpIG9yCisgICAgICAgICAgICAgICAgKCddJyBpbiBuZXRsb2MgYW5kICdbJyBub3QgaW4gbmV0bG9jKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIElQdjYgVVJMIikKICAgICBpZiBhbGxvd19mcmFnbWVudHMgYW5kIHNjaGVtZSBpbiB1c2VzX2ZyYWdtZW50IGFuZCAnIycgaW4gdXJsOgogICAgICAgICB1cmwsIGZyYWdtZW50ID0gdXJsLnNwbGl0KCcjJywgMSkKICAgICBpZiBzY2hlbWUgaW4gdXNlc19xdWVyeSBhbmQgJz8nIGluIHVybDoKICAgICAgICAgdXJsLCBxdWVyeSA9IHVybC5zcGxpdCgnPycsIDEpCiAgICAgdiA9IFNwbGl0UmVzdWx0KHNjaGVtZSwgbmV0bG9jLCB1cmwsIHF1ZXJ5LCBmcmFnbWVudCkKICAgICBfcGFyc2VfY2FjaGVba2V5XSA9IHYKLSAgICByZXR1cm4gdgorICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh2KQogCiBkZWYgdXJsdW5wYXJzZShjb21wb25lbnRzKToKICAgICAiIiJQdXQgYSBwYXJzZWQgVVJMIGJhY2sgdG9nZXRoZXIgYWdhaW4uICBUaGlzIG1heSByZXN1bHQgaW4gYQogICAgIHNsaWdodGx5IGRpZmZlcmVudCwgYnV0IGVxdWl2YWxlbnQgVVJMLCBpZiB0aGUgVVJMIHRoYXQgd2FzIHBhcnNlZAogICAgIG9yaWdpbmFsbHkgaGFkIHJlZHVuZGFudCBkZWxpbWl0ZXJzLCBlLmcuIGEgPyB3aXRoIGFuIGVtcHR5IHF1ZXJ5CiAgICAgKHRoZSBkcmFmdCBzdGF0ZXMgdGhhdCB0aGVzZSBhcmUgZXF1aXZhbGVudCkuIiIiCi0gICAgc2NoZW1lLCBuZXRsb2MsIHVybCwgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQgPSBjb21wb25lbnRzCisgICAgc2NoZW1lLCBuZXRsb2MsIHVybCwgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQsIF9jb2VyY2VfcmVzdWx0ID0gKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29lcmNlX2FyZ3MoKmNvbXBvbmVudHMpKQogICAgIGlmIHBhcmFtczoKICAgICAgICAgdXJsID0gIiVzOyVzIiAlICh1cmwsIHBhcmFtcykKLSAgICByZXR1cm4gdXJsdW5zcGxpdCgoc2NoZW1lLCBuZXRsb2MsIHVybCwgcXVlcnksIGZyYWdtZW50KSkKKyAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5zcGxpdCgoc2NoZW1lLCBuZXRsb2MsIHVybCwgcXVlcnksIGZyYWdtZW50KSkpCiAKIGRlZiB1cmx1bnNwbGl0KGNvbXBvbmVudHMpOgogICAgICIiIkNvbWJpbmUgdGhlIGVsZW1lbnRzIG9mIGEgdHVwbGUgYXMgcmV0dXJuZWQgYnkgdXJsc3BsaXQoKSBpbnRvIGEKQEAgLTIyMSw3ICszODEsOCBAQAogICAgIFRoaXMgbWF5IHJlc3VsdCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCwgYnV0IGVxdWl2YWxlbnQgVVJMLCBpZiB0aGUgVVJMIHRoYXQKICAgICB3YXMgcGFyc2VkIG9yaWdpbmFsbHkgaGFkIHVubmVjZXNzYXJ5IGRlbGltaXRlcnMgKGZvciBleGFtcGxlLCBhID8gd2l0aCBhbgogICAgIGVtcHR5IHF1ZXJ5OyB0aGUgUkZDIHN0YXRlcyB0aGF0IHRoZXNlIGFyZSBlcXVpdmFsZW50KS4iIiIKLSAgICBzY2hlbWUsIG5ldGxvYywgdXJsLCBxdWVyeSwgZnJhZ21lbnQgPSBjb21wb25lbnRzCisgICAgc2NoZW1lLCBuZXRsb2MsIHVybCwgcXVlcnksIGZyYWdtZW50LCBfY29lcmNlX3Jlc3VsdCA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2VyY2VfYXJncygqY29tcG9uZW50cykpCiAgICAgaWYgbmV0bG9jIG9yIChzY2hlbWUgYW5kIHNjaGVtZSBpbiB1c2VzX25ldGxvYyBhbmQgdXJsWzoyXSAhPSAnLy8nKToKICAgICAgICAgaWYgdXJsIGFuZCB1cmxbOjFdICE9ICcvJzogdXJsID0gJy8nICsgdXJsCiAgICAgICAgIHVybCA9ICcvLycgKyAobmV0bG9jIG9yICcnKSArIHVybApAQCAtMjMxLDcgKzM5Miw3IEBACiAgICAgICAgIHVybCA9IHVybCArICc/JyArIHF1ZXJ5CiAgICAgaWYgZnJhZ21lbnQ6CiAgICAgICAgIHVybCA9IHVybCArICcjJyArIGZyYWdtZW50Ci0gICAgcmV0dXJuIHVybAorICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh1cmwpCiAKIGRlZiB1cmxqb2luKGJhc2UsIHVybCwgYWxsb3dfZnJhZ21lbnRzPVRydWUpOgogICAgICIiIkpvaW4gYSBiYXNlIFVSTCBhbmQgYSBwb3NzaWJseSByZWxhdGl2ZSBVUkwgdG8gZm9ybSBhbiBhYnNvbHV0ZQpAQCAtMjQwLDI3ICs0MDEsMjggQEAKICAgICAgICAgcmV0dXJuIHVybAogICAgIGlmIG5vdCB1cmw6CiAgICAgICAgIHJldHVybiBiYXNlCisgICAgYmFzZSwgdXJsLCBfY29lcmNlX3Jlc3VsdCA9IF9jb2VyY2VfYXJncyhiYXNlLCB1cmwpCiAgICAgYnNjaGVtZSwgYm5ldGxvYywgYnBhdGgsIGJwYXJhbXMsIGJxdWVyeSwgYmZyYWdtZW50ID0gXAogICAgICAgICAgICAgdXJscGFyc2UoYmFzZSwgJycsIGFsbG93X2ZyYWdtZW50cykKICAgICBzY2hlbWUsIG5ldGxvYywgcGF0aCwgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQgPSBcCiAgICAgICAgICAgICB1cmxwYXJzZSh1cmwsIGJzY2hlbWUsIGFsbG93X2ZyYWdtZW50cykKICAgICBpZiBzY2hlbWUgIT0gYnNjaGVtZSBvciBzY2hlbWUgbm90IGluIHVzZXNfcmVsYXRpdmU6Ci0gICAgICAgIHJldHVybiB1cmwKKyAgICAgICAgcmV0dXJuIF9jb2VyY2VfcmVzdWx0KHVybCkKICAgICBpZiBzY2hlbWUgaW4gdXNlc19uZXRsb2M6CiAgICAgICAgIGlmIG5ldGxvYzoKLSAgICAgICAgICAgIHJldHVybiB1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpCisgICAgICAgICAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKSkKICAgICAgICAgbmV0bG9jID0gYm5ldGxvYwogICAgIGlmIHBhdGhbOjFdID09ICcvJzoKLSAgICAgICAgcmV0dXJuIHVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKQorICAgICAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQodXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsIHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpKQogICAgIGlmIG5vdCBwYXRoIGFuZCBub3QgcGFyYW1zOgogICAgICAgICBwYXRoID0gYnBhdGgKICAgICAgICAgcGFyYW1zID0gYnBhcmFtcwogICAgICAgICBpZiBub3QgcXVlcnk6CiAgICAgICAgICAgICBxdWVyeSA9IGJxdWVyeQotICAgICAgICByZXR1cm4gdXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsIHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpCisgICAgICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcywgcXVlcnksIGZyYWdtZW50KSkpCiAgICAgc2VnbWVudHMgPSBicGF0aC5zcGxpdCgnLycpWzotMV0gKyBwYXRoLnNwbGl0KCcvJykKICAgICAjIFhYWCBUaGUgc3R1ZmYgYmVsb3cgaXMgYm9ndXMgaW4gdmFyaW91cyB3YXlzLi4uCiAgICAgaWYgc2VnbWVudHNbLTFdID09ICcuJzoKQEAgLTI4Miw4ICs0NDQsOCBAQAogICAgICAgICBzZWdtZW50c1stMV0gPSAnJwogICAgIGVsaWYgbGVuKHNlZ21lbnRzKSA+PSAyIGFuZCBzZWdtZW50c1stMV0gPT0gJy4uJzoKICAgICAgICAgc2VnbWVudHNbLTI6XSA9IFsnJ10KLSAgICByZXR1cm4gdXJsdW5wYXJzZSgoc2NoZW1lLCBuZXRsb2MsICcvJy5qb2luKHNlZ21lbnRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKQorICAgIHJldHVybiBfY29lcmNlX3Jlc3VsdCh1cmx1bnBhcnNlKChzY2hlbWUsIG5ldGxvYywgJy8nLmpvaW4oc2VnbWVudHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCkpKQogCiBkZWYgdXJsZGVmcmFnKHVybCk6CiAgICAgIiIiUmVtb3ZlcyBhbnkgZXhpc3RpbmcgZnJhZ21lbnQgZnJvbSBVUkwuCkBAIC0yOTIsMTIgKzQ1NCwxNCBAQAogICAgIHRoZSBVUkwgY29udGFpbmVkIG5vIGZyYWdtZW50cywgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZQogICAgIGVtcHR5IHN0cmluZy4KICAgICAiIiIKKyAgICB1cmwsIF9jb2VyY2VfcmVzdWx0ID0gX2NvZXJjZV9hcmdzKHVybCkKICAgICBpZiAnIycgaW4gdXJsOgogICAgICAgICBzLCBuLCBwLCBhLCBxLCBmcmFnID0gdXJscGFyc2UodXJsKQogICAgICAgICBkZWZyYWcgPSB1cmx1bnBhcnNlKChzLCBuLCBwLCBhLCBxLCAnJykpCi0gICAgICAgIHJldHVybiBkZWZyYWcsIGZyYWcKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gdXJsLCAnJworICAgICAgICBmcmFnID0gJycKKyAgICAgICAgZGVmcmFnID0gdXJsCisgICAgcmV0dXJuIF9jb2VyY2VfcmVzdWx0KERlZnJhZ1Jlc3VsdChkZWZyYWcsIGZyYWcpKQogCiBkZWYgdW5xdW90ZV90b19ieXRlcyhzdHJpbmcpOgogICAgICIiInVucXVvdGVfdG9fYnl0ZXMoJ2FiYyUyMGRlZicpIC0+IGInYWJjIGRlZicuIiIiCkBAIC0zNjQsNyArNTI4LDggQEAKICAgICAgICAgc3RyaW5nICs9IHBjdF9zZXF1ZW5jZS5kZWNvZGUoZW5jb2RpbmcsIGVycm9ycykKICAgICByZXR1cm4gc3RyaW5nCiAKLWRlZiBwYXJzZV9xcyhxcywga2VlcF9ibGFua192YWx1ZXM9RmFsc2UsIHN0cmljdF9wYXJzaW5nPUZhbHNlKToKK2RlZiBwYXJzZV9xcyhxcywga2VlcF9ibGFua192YWx1ZXM9RmFsc2UsIHN0cmljdF9wYXJzaW5nPUZhbHNlLAorICAgICAgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpOgogICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQuCiAKICAgICAgICAgQXJndW1lbnRzOgpAQCAtMzgxLDE2ICs1NDYsMjIgQEAKICAgICAgICAgc3RyaWN0X3BhcnNpbmc6IGZsYWcgaW5kaWNhdGluZyB3aGF0IHRvIGRvIHdpdGggcGFyc2luZyBlcnJvcnMuCiAgICAgICAgICAgICBJZiBmYWxzZSAodGhlIGRlZmF1bHQpLCBlcnJvcnMgYXJlIHNpbGVudGx5IGlnbm9yZWQuCiAgICAgICAgICAgICBJZiB0cnVlLCBlcnJvcnMgcmFpc2UgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbi4KKworICAgICAgICBlbmNvZGluZyBhbmQgZXJyb3JzOiBzcGVjaWZ5IGhvdyB0byBkZWNvZGUgcGVyY2VudC1lbmNvZGVkIHNlcXVlbmNlcworICAgICAgICAgICAgaW50byBVbmljb2RlIGNoYXJhY3RlcnMsIGFzIGFjY2VwdGVkIGJ5IHRoZSBieXRlcy5kZWNvZGUoKSBtZXRob2QuCiAgICAgIiIiCiAgICAgZGljdCA9IHt9Ci0gICAgZm9yIG5hbWUsIHZhbHVlIGluIHBhcnNlX3FzbChxcywga2VlcF9ibGFua192YWx1ZXMsIHN0cmljdF9wYXJzaW5nKToKKyAgICBwYWlycyA9IHBhcnNlX3FzbChxcywga2VlcF9ibGFua192YWx1ZXMsIHN0cmljdF9wYXJzaW5nLAorICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBwYWlyczoKICAgICAgICAgaWYgbmFtZSBpbiBkaWN0OgogICAgICAgICAgICAgZGljdFtuYW1lXS5hcHBlbmQodmFsdWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBkaWN0W25hbWVdID0gW3ZhbHVlXQogICAgIHJldHVybiBkaWN0CiAKLWRlZiBwYXJzZV9xc2wocXMsIGtlZXBfYmxhbmtfdmFsdWVzPUZhbHNlLCBzdHJpY3RfcGFyc2luZz1GYWxzZSk6CitkZWYgcGFyc2VfcXNsKHFzLCBrZWVwX2JsYW5rX3ZhbHVlcz1GYWxzZSwgc3RyaWN0X3BhcnNpbmc9RmFsc2UsCisgICAgICAgICAgICAgIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpOgogICAgICIiIlBhcnNlIGEgcXVlcnkgZ2l2ZW4gYXMgYSBzdHJpbmcgYXJndW1lbnQuCiAKICAgICBBcmd1bWVudHM6CkBAIC00MDcsOCArNTc4LDEyIEBACiAgICAgICAgIGZhbHNlICh0aGUgZGVmYXVsdCksIGVycm9ycyBhcmUgc2lsZW50bHkgaWdub3JlZC4gSWYgdHJ1ZSwKICAgICAgICAgZXJyb3JzIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24uCiAKKyAgICBlbmNvZGluZyBhbmQgZXJyb3JzOiBzcGVjaWZ5IGhvdyB0byBkZWNvZGUgcGVyY2VudC1lbmNvZGVkIHNlcXVlbmNlcworICAgICAgICBpbnRvIFVuaWNvZGUgY2hhcmFjdGVycywgYXMgYWNjZXB0ZWQgYnkgdGhlIGJ5dGVzLmRlY29kZSgpIG1ldGhvZC4KKwogICAgIFJldHVybnMgYSBsaXN0LCBhcyBHLWQgaW50ZW5kZWQuCiAgICAgIiIiCisgICAgcXMsIF9jb2VyY2VfcmVzdWx0ID0gX2NvZXJjZV9hcmdzKHFzKQogICAgIHBhaXJzID0gW3MyIGZvciBzMSBpbiBxcy5zcGxpdCgnJicpIGZvciBzMiBpbiBzMS5zcGxpdCgnOycpXQogICAgIHIgPSBbXQogICAgIGZvciBuYW1lX3ZhbHVlIGluIHBhaXJzOgpAQCAtNDI0LDEwICs1OTksMTMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbGVuKG52WzFdKSBvciBrZWVwX2JsYW5rX3ZhbHVlczoKLSAgICAgICAgICAgIG5hbWUgPSB1bnF1b3RlKG52WzBdLnJlcGxhY2UoJysnLCAnICcpKQotICAgICAgICAgICAgdmFsdWUgPSB1bnF1b3RlKG52WzFdLnJlcGxhY2UoJysnLCAnICcpKQorICAgICAgICAgICAgbmFtZSA9IG52WzBdLnJlcGxhY2UoJysnLCAnICcpCisgICAgICAgICAgICBuYW1lID0gdW5xdW90ZShuYW1lLCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykKKyAgICAgICAgICAgIG5hbWUgPSBfY29lcmNlX3Jlc3VsdChuYW1lKQorICAgICAgICAgICAgdmFsdWUgPSBudlsxXS5yZXBsYWNlKCcrJywgJyAnKQorICAgICAgICAgICAgdmFsdWUgPSB1bnF1b3RlKHZhbHVlLCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykKKyAgICAgICAgICAgIHZhbHVlID0gX2NvZXJjZV9yZXN1bHQodmFsdWUpCiAgICAgICAgICAgICByLmFwcGVuZCgobmFtZSwgdmFsdWUpKQotCiAgICAgcmV0dXJuIHIKIAogZGVmIHVucXVvdGVfcGx1cyhzdHJpbmcsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0ncmVwbGFjZScpOgpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CmluZGV4IDZiMjk5MDEuLjUzMjVkNjIgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcmVxdWVzdC5weQorKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKQEAgLTk0LDYgKzk0LDcgQEAKIGltcG9ydCBzb2NrZXQKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCitpbXBvcnQgY29sbGVjdGlvbnMKIAogZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IFVSTEVycm9yLCBIVFRQRXJyb3IsIENvbnRlbnRUb29TaG9ydEVycm9yCiBmcm9tIHVybGxpYi5wYXJzZSBpbXBvcnQgKApAQCAtMTE0LDExICsxMTUsMjcgQEAKIF9fdmVyc2lvbl9fID0gc3lzLnZlcnNpb25bOjNdCiAKIF9vcGVuZXIgPSBOb25lCi1kZWYgdXJsb3Blbih1cmwsIGRhdGE9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQpOgorZGVmIHVybG9wZW4odXJsLCBkYXRhPU5vbmUsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAorICAgICAgICAgICAgKiwgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lKToKICAgICBnbG9iYWwgX29wZW5lcgotICAgIGlmIF9vcGVuZXIgaXMgTm9uZToKLSAgICAgICAgX29wZW5lciA9IGJ1aWxkX29wZW5lcigpCi0gICAgcmV0dXJuIF9vcGVuZXIub3Blbih1cmwsIGRhdGEsIHRpbWVvdXQpCisgICAgaWYgY2FmaWxlIG9yIGNhcGF0aDoKKyAgICAgICAgaWYgbm90IF9oYXZlX3NzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NTTCBzdXBwb3J0IG5vdCBhdmFpbGFibGUnKQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoOgorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGUsIGNhcGF0aCkKKyAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgICAgICBodHRwc19oYW5kbGVyID0gSFRUUFNIYW5kbGVyKGNvbnRleHQ9Y29udGV4dCwgY2hlY2tfaG9zdG5hbWU9Y2hlY2tfaG9zdG5hbWUpCisgICAgICAgIG9wZW5lciA9IGJ1aWxkX29wZW5lcihodHRwc19oYW5kbGVyKQorICAgIGVsaWYgX29wZW5lciBpcyBOb25lOgorICAgICAgICBfb3BlbmVyID0gb3BlbmVyID0gYnVpbGRfb3BlbmVyKCkKKyAgICBlbHNlOgorICAgICAgICBvcGVuZXIgPSBfb3BlbmVyCisgICAgcmV0dXJuIG9wZW5lci5vcGVuKHVybCwgZGF0YSwgdGltZW91dCkKIAogZGVmIGluc3RhbGxfb3BlbmVyKG9wZW5lcik6CiAgICAgZ2xvYmFsIF9vcGVuZXIKQEAgLTEwNDUsMTMgKzEwNjIsMjQgQEAKIAogICAgICAgICBpZiByZXF1ZXN0LmRhdGEgaXMgbm90IE5vbmU6ICAjIFBPU1QKICAgICAgICAgICAgIGRhdGEgPSByZXF1ZXN0LmRhdGEKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlBPU1QgZGF0YSBzaG91bGQgYmUgYnl0ZXMiCisgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIGFuIGl0ZXJhYmxlIG9mIGJ5dGVzLiBJdCBjYW5ub3QgYmUgc3RyLiIpCiAgICAgICAgICAgICBpZiBub3QgcmVxdWVzdC5oYXNfaGVhZGVyKCdDb250ZW50LXR5cGUnKToKICAgICAgICAgICAgICAgICByZXF1ZXN0LmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKAogICAgICAgICAgICAgICAgICAgICAnQ29udGVudC10eXBlJywKICAgICAgICAgICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpCiAgICAgICAgICAgICBpZiBub3QgcmVxdWVzdC5oYXNfaGVhZGVyKCdDb250ZW50LWxlbmd0aCcpOgotICAgICAgICAgICAgICAgIHJlcXVlc3QuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoCi0gICAgICAgICAgICAgICAgICAgICdDb250ZW50LWxlbmd0aCcsICclZCcgJSBsZW4oZGF0YSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtdiA9IG1lbW9yeXZpZXcoZGF0YSkKKyAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGNvbGxlY3Rpb25zLkl0ZXJhYmxlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNvbnRlbnQtTGVuZ3RoIHNob3VsZCBiZSBzcGVjaWZpZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIGl0ZXJhYmxlIGRhdGEgb2YgdHlwZSAlciAlciIgJSAodHlwZShkYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1sZW5ndGgnLCAnJWQnICUgKGxlbihtdikgKiBtdi5pdGVtc2l6ZSkpCiAKICAgICAgICAgc2VsX2hvc3QgPSBob3N0CiAgICAgICAgIGlmIHJlcXVlc3QuaGFzX3Byb3h5KCk6CkBAIC0xMDY2LDcgKzEwOTQsNyBAQAogCiAgICAgICAgIHJldHVybiByZXF1ZXN0CiAKLSAgICBkZWYgZG9fb3BlbihzZWxmLCBodHRwX2NsYXNzLCByZXEpOgorICAgIGRlZiBkb19vcGVuKHNlbGYsIGh0dHBfY2xhc3MsIHJlcSwgKipodHRwX2Nvbm5fYXJncyk6CiAgICAgICAgICIiIlJldHVybiBhbiBIVFRQUmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgcmVxdWVzdCwgdXNpbmcgaHR0cF9jbGFzcy4KIAogICAgICAgICBodHRwX2NsYXNzIG11c3QgaW1wbGVtZW50IHRoZSBIVFRQQ29ubmVjdGlvbiBBUEkgZnJvbSBodHRwLmNsaWVudC4KQEAgLTEwNzUsNyArMTEwMyw4IEBACiAgICAgICAgIGlmIG5vdCBob3N0OgogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IoJ25vIGhvc3QgZ2l2ZW4nKQogCi0gICAgICAgIGggPSBodHRwX2NsYXNzKGhvc3QsIHRpbWVvdXQ9cmVxLnRpbWVvdXQpICMgd2lsbCBwYXJzZSBob3N0OnBvcnQKKyAgICAgICAgIyB3aWxsIHBhcnNlIGhvc3Q6cG9ydAorICAgICAgICBoID0gaHR0cF9jbGFzcyhob3N0LCB0aW1lb3V0PXJlcS50aW1lb3V0LCAqKmh0dHBfY29ubl9hcmdzKQogCiAgICAgICAgIGhlYWRlcnMgPSBkaWN0KHJlcS51bnJlZGlyZWN0ZWRfaGRycykKICAgICAgICAgaGVhZGVycy51cGRhdGUoZGljdCgoaywgdikgZm9yIGssIHYgaW4gcmVxLmhlYWRlcnMuaXRlbXMoKQpAQCAtMTEwMSw3ICsxMTMwLDcgQEAKICAgICAgICAgICAgICAgICAjIFByb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIG5vdCBiZSBzZW50IHRvIG9yaWdpbgogICAgICAgICAgICAgICAgICMgc2VydmVyLgogICAgICAgICAgICAgICAgIGRlbCBoZWFkZXJzW3Byb3h5X2F1dGhfaGRyXQotICAgICAgICAgICAgaC5fc2V0X3R1bm5lbChyZXEuX3R1bm5lbF9ob3N0LCBoZWFkZXJzPXR1bm5lbF9oZWFkZXJzKQorICAgICAgICAgICAgaC5zZXRfdHVubmVsKHJlcS5fdHVubmVsX2hvc3QsIGhlYWRlcnM9dHVubmVsX2hlYWRlcnMpCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCkBAIC0xMTI3LDEwICsxMTU2LDE4IEBACiAgICAgaHR0cF9yZXF1ZXN0ID0gQWJzdHJhY3RIVFRQSGFuZGxlci5kb19yZXF1ZXN0XwogCiBpZiBoYXNhdHRyKGh0dHAuY2xpZW50LCAnSFRUUFNDb25uZWN0aW9uJyk6CisgICAgaW1wb3J0IHNzbAorCiAgICAgY2xhc3MgSFRUUFNIYW5kbGVyKEFic3RyYWN0SFRUUEhhbmRsZXIpOgogCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZWJ1Z2xldmVsPTAsIGNvbnRleHQ9Tm9uZSwgY2hlY2tfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICAgICBBYnN0cmFjdEhUVFBIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGRlYnVnbGV2ZWwpCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gY29udGV4dAorICAgICAgICAgICAgc2VsZi5fY2hlY2tfaG9zdG5hbWUgPSBjaGVja19ob3N0bmFtZQorCiAgICAgICAgIGRlZiBodHRwc19vcGVuKHNlbGYsIHJlcSk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5kb19vcGVuKGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbiwgcmVxKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZG9fb3BlbihodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24sIHJlcSwKKyAgICAgICAgICAgICAgICBjb250ZXh0PXNlbGYuX2NvbnRleHQsIGNoZWNrX2hvc3RuYW1lPXNlbGYuX2NoZWNrX2hvc3RuYW1lKQogCiAgICAgICAgIGh0dHBzX3JlcXVlc3QgPSBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX3JlcXVlc3RfCiAKQEAgLTEyMTYsOCArMTI1Myw4IEBACiAgICAgICAgIHVybCA9IHJlcS5zZWxlY3RvcgogICAgICAgICBpZiB1cmxbOjJdID09ICcvLycgYW5kIHVybFsyOjNdICE9ICcvJyBhbmQgKHJlcS5ob3N0IGFuZAogICAgICAgICAgICAgICAgIHJlcS5ob3N0ICE9ICdsb2NhbGhvc3QnKToKLSAgICAgICAgICAgIHJlcS50eXBlID0gJ2Z0cCcKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudC5vcGVuKHJlcSkKKyAgICAgICAgICAgIGlmIG5vdCByZXEuaG9zdCBpcyBzZWxmLmdldF9uYW1lcygpOgorICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKCJmaWxlOi8vIHNjaGVtZSBpcyBzdXBwb3J0ZWQgb25seSBvbiBsb2NhbGhvc3QiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub3Blbl9sb2NhbF9maWxlKHJlcSkKIApAQCAtMTM3OCw5ICsxNDE1LDcgQEAKIE1BWEZUUENBQ0hFID0gMTAgICAgICAgICMgVHJpbSB0aGUgZnRwIGNhY2hlIGJleW9uZCB0aGlzIHNpemUKIAogIyBIZWxwZXIgZm9yIG5vbi11bml4IHN5c3RlbXMKLWlmIG9zLm5hbWUgPT0gJ21hYyc6Ci0gICAgZnJvbSBtYWN1cmwycGF0aCBpbXBvcnQgdXJsMnBhdGhuYW1lLCBwYXRobmFtZTJ1cmwKLWVsaWYgb3MubmFtZSA9PSAnbnQnOgoraWYgb3MubmFtZSA9PSAnbnQnOgogICAgIGZyb20gbnR1cmwycGF0aCBpbXBvcnQgdXJsMnBhdGhuYW1lLCBwYXRobmFtZTJ1cmwKIGVsc2U6CiAgICAgZGVmIHVybDJwYXRobmFtZShwYXRobmFtZSk6CkBAIC0xNTE5LDcgKzE1NTQsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZwID0gc2VsZi5vcGVuX2xvY2FsX2ZpbGUodXJsMSkKICAgICAgICAgICAgICAgICBoZHJzID0gZnAuaW5mbygpCi0gICAgICAgICAgICAgICAgZGVsIGZwCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiB1cmwycGF0aG5hbWUoc3BsaXRob3N0KHVybDEpWzFdKSwgaGRycwogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHBhc3MKQEAgLTE1NjMsOCArMTU5OCw2IEBACiAgICAgICAgICAgICAgICAgdGZwLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgZGVsIGZwCi0gICAgICAgIGRlbCB0ZnAKIAogICAgICAgICAjIHJhaXNlIGV4Y2VwdGlvbiBpZiBhY3R1YWwgc2l6ZSBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXIKICAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCByZWFkIDwgc2l6ZToKQEAgLTE2MzgsNiArMTY3MSwxMiBAQAogICAgICAgICAgICAgaGVhZGVyc1siQXV0aG9yaXphdGlvbiJdID0gICJCYXNpYyAlcyIgJSBhdXRoCiAgICAgICAgIGlmIHJlYWxob3N0OgogICAgICAgICAgICAgaGVhZGVyc1siSG9zdCJdID0gcmVhbGhvc3QKKworICAgICAgICAjIEFkZCBDb25uZWN0aW9uOmNsb3NlIGFzIHdlIGRvbid0IHN1cHBvcnQgcGVyc2lzdGVudCBjb25uZWN0aW9ucyB5ZXQuCisgICAgICAgICMgVGhpcyBoZWxwcyBpbiBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIGF2b2lkaW5nIFJlc291cmNlV2FybmluZworCisgICAgICAgIGhlYWRlcnNbIkNvbm5lY3Rpb24iXSA9ICJjbG9zZSIKKwogICAgICAgICBmb3IgaGVhZGVyLCB2YWx1ZSBpbiBzZWxmLmFkZGhlYWRlcnM6CiAgICAgICAgICAgICBoZWFkZXJzW2hlYWRlcl0gPSB2YWx1ZQogCkBAIC0xNzA0LDcgKzE3NDMsNyBAQAogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh1cmwsIHN0cik6CiAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcignZmlsZSBlcnJvcicsICdwcm94eSBzdXBwb3J0IGZvciBmaWxlIHByb3RvY29sIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQnKQogICAgICAgICBpZiB1cmxbOjJdID09ICcvLycgYW5kIHVybFsyOjNdICE9ICcvJyBhbmQgdXJsWzI6MTJdLmxvd2VyKCkgIT0gJ2xvY2FsaG9zdC8nOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYub3Blbl9mdHAodXJsKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZmlsZTovLyBzY2hlbWUgaXMgc3VwcG9ydGVkIG9ubHkgb24gbG9jYWxob3N0IikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9wZW5fbG9jYWxfZmlsZSh1cmwpCiAKQEAgLTIxMjcsNyArMjE2Niw3IEBACiAgICAgICAgICAgICAjIFRyeSB0byByZXRyaWV2ZSBhcyBhIGZpbGUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjbWQgPSAnUkVUUiAnICsgZmlsZQotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLmZ0cC5udHJhbnNmZXJjbWQoY21kKQorICAgICAgICAgICAgICAgIGNvbm4sIHJldHJsZW4gPSBzZWxmLmZ0cC5udHJhbnNmZXJjbWQoY21kKQogICAgICAgICAgICAgZXhjZXB0IGZ0cGxpYi5lcnJvcl9wZXJtIGFzIHJlYXNvbjoKICAgICAgICAgICAgICAgICBpZiBzdHIocmVhc29uKVs6M10gIT0gJzU1MCc6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFVSTEVycm9yKCdmdHAgZXJyb3InLCByZWFzb24pLndpdGhfdHJhY2ViYWNrKApAQCAtMjE0OCwxMCArMjE4NywxNCBAQAogICAgICAgICAgICAgICAgIGNtZCA9ICdMSVNUICcgKyBmaWxlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNtZCA9ICdMSVNUJwotICAgICAgICAgICAgY29ubiA9IHNlbGYuZnRwLm50cmFuc2ZlcmNtZChjbWQpCisgICAgICAgICAgICBjb25uLCByZXRybGVuID0gc2VsZi5mdHAubnRyYW5zZmVyY21kKGNtZCkKICAgICAgICAgc2VsZi5idXN5ID0gMQorCisgICAgICAgIGZ0cG9iaiA9IGFkZGNsb3NlaG9vayhjb25uLm1ha2VmaWxlKCdyYicpLCBzZWxmLmVuZHRyYW5zZmVyKQorICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBQYXNzIGJhY2sgYm90aCBhIHN1aXRhYmx5IGRlY29yYXRlZCBvYmplY3QgYW5kIGEgcmV0cmlldmFsIGxlbmd0aAotICAgICAgICByZXR1cm4gKGFkZGNsb3NlaG9vayhjb25uWzBdLm1ha2VmaWxlKCdyYicpLCBzZWxmLmVuZHRyYW5zZmVyKSwgY29ublsxXSkKKyAgICAgICAgcmV0dXJuIChmdHBvYmosIHJldHJsZW4pCisKICAgICBkZWYgZW5kdHJhbnNmZXIoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmJ1c3k6CiAgICAgICAgICAgICByZXR1cm4KZGlmZiAtLWdpdCBhL0xpYi91dS5weSBiL0xpYi91dS5weQppbmRleCAzMGMxZWQ4Li5kNjhkMjkzIDEwMDc1NQotLS0gYS9MaWIvdXUucHkKKysrIGIvTGliL3V1LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBDb3B5cmlnaHQgMTk5NCBieSBMYW5jZSBFbGxpbmdob3VzZQogIyBDYXRoZWRyYWwgQ2l0eSwgQ2FsaWZvcm5pYSBSZXB1YmxpYywgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLgpkaWZmIC0tZ2l0IGEvTGliL3dhcm5pbmdzLnB5IGIvTGliL3dhcm5pbmdzLnB5CmluZGV4IDlkZTJjNjcuLjViNTgyMWIgMTAwNjQ0Ci0tLSBhL0xpYi93YXJuaW5ncy5weQorKysgYi9MaWIvd2FybmluZ3MucHkKQEAgLTM1NywxMCArMzU3LDEwIEBACiAjIElmIGVpdGhlciBpZiB0aGUgY29tcGlsZWQgcmVnZXhzIGFyZSBOb25lLCBtYXRjaCBhbnl0aGluZy4KIF93YXJuaW5nc19kZWZhdWx0cyA9IEZhbHNlCiB0cnk6Ci0gICAgZnJvbSBfd2FybmluZ3MgaW1wb3J0IChmaWx0ZXJzLCBkZWZhdWx0X2FjdGlvbiwgb25jZV9yZWdpc3RyeSwKKyAgICBmcm9tIF93YXJuaW5ncyBpbXBvcnQgKGZpbHRlcnMsIF9kZWZhdWx0YWN0aW9uLCBfb25jZXJlZ2lzdHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4sIHdhcm5fZXhwbGljaXQpCi0gICAgZGVmYXVsdGFjdGlvbiA9IGRlZmF1bHRfYWN0aW9uCi0gICAgb25jZXJlZ2lzdHJ5ID0gb25jZV9yZWdpc3RyeQorICAgIGRlZmF1bHRhY3Rpb24gPSBfZGVmYXVsdGFjdGlvbgorICAgIG9uY2VyZWdpc3RyeSA9IF9vbmNlcmVnaXN0cnkKICAgICBfd2FybmluZ3NfZGVmYXVsdHMgPSBUcnVlCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZmlsdGVycyA9IFtdCkBAIC0zNzEsOCArMzcxLDEwIEBACiAjIE1vZHVsZSBpbml0aWFsaXphdGlvbgogX3Byb2Nlc3NvcHRpb25zKHN5cy53YXJub3B0aW9ucykKIGlmIG5vdCBfd2FybmluZ3NfZGVmYXVsdHM6Ci0gICAgc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBjYXRlZ29yeT1QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBhcHBlbmQ9MSkKLSAgICBzaW1wbGVmaWx0ZXIoImlnbm9yZSIsIGNhdGVnb3J5PUltcG9ydFdhcm5pbmcsIGFwcGVuZD0xKQorICAgIHNpbGVuY2UgPSBbSW1wb3J0V2FybmluZywgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZ10KKyAgICBzaWxlbmNlLmFwcGVuZChEZXByZWNhdGlvbldhcm5pbmcpCisgICAgZm9yIGNscyBpbiBzaWxlbmNlOgorICAgICAgICBzaW1wbGVmaWx0ZXIoImlnbm9yZSIsIGNhdGVnb3J5PWNscykKICAgICBieXRlc193YXJuaW5nID0gc3lzLmZsYWdzLmJ5dGVzX3dhcm5pbmcKICAgICBpZiBieXRlc193YXJuaW5nID4gMToKICAgICAgICAgYnl0ZXNfYWN0aW9uID0gImVycm9yIgpAQCAtMzgxLDQgKzM4MywxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIGJ5dGVzX2FjdGlvbiA9ICJpZ25vcmUiCiAgICAgc2ltcGxlZmlsdGVyKGJ5dGVzX2FjdGlvbiwgY2F0ZWdvcnk9Qnl0ZXNXYXJuaW5nLCBhcHBlbmQ9MSkKKyAgICAjIHJlc291cmNlIHVzYWdlIHdhcm5pbmdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gcHlkZWJ1ZyBtb2RlCisgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6CisgICAgICAgIHJlc291cmNlX2FjdGlvbiA9ICJhbHdheXMiCisgICAgZWxzZToKKyAgICAgICAgcmVzb3VyY2VfYWN0aW9uID0gImlnbm9yZSIKKyAgICBzaW1wbGVmaWx0ZXIocmVzb3VyY2VfYWN0aW9uLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcsIGFwcGVuZD0xKQorCiBkZWwgX3dhcm5pbmdzX2RlZmF1bHRzCmRpZmYgLS1naXQgYS9MaWIvd2F2ZS5weSBiL0xpYi93YXZlLnB5CmluZGV4IDI0ODM5Y2EuLjI4NzcxMzcgMTAwNjQ0Ci0tLSBhL0xpYi93YXZlLnB5CisrKyBiL0xpYi93YXZlLnB5CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZmlsZQogICAgICAgICAgICAgY2h1bmsuc2l6ZV9yZWFkID0gY2h1bmsuc2l6ZV9yZWFkICsgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoCiAgICAgICAgICAgICBkYXRhLmJ5dGVzd2FwKCkKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvc3RyaW5nKCkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGFfY2h1bmsucmVhZChuZnJhbWVzICogc2VsZi5fZnJhbWVzaXplKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0IGFuZCBkYXRhOgpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgICAgICAgICByYWlzZSBFcnJvcignY2Fubm90IGNoYW5nZSBwYXJhbWV0ZXJzIGFmdGVyIHN0YXJ0aW5nIHRvIHdyaXRlJykKICAgICAgICAgaWYgZnJhbWVyYXRlIDw9IDA6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignYmFkIGZyYW1lIHJhdGUnKQotICAgICAgICBzZWxmLl9mcmFtZXJhdGUgPSBmcmFtZXJhdGUKKyAgICAgICAgc2VsZi5fZnJhbWVyYXRlID0gaW50KHJvdW5kKGZyYW1lcmF0ZSkpCiAKICAgICBkZWYgZ2V0ZnJhbWVyYXRlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fZnJhbWVyYXRlOgpAQCAtNDY3LDExICs0NjcsMTEgQEAKICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCA9IHNlbGYuX25mcmFtZXMgKiBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgKICAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPGw0czRzbGhobGxoaDRzJywKLSAgICAgICAgICAgIDM2ICsgc2VsZi5fZGF0YWxlbmd0aCwgJ1dBVkUnLCAnZm10ICcsIDE2LAorICAgICAgICAgICAgMzYgKyBzZWxmLl9kYXRhbGVuZ3RoLCBiJ1dBVkUnLCBiJ2ZtdCAnLCAxNiwKICAgICAgICAgICAgIFdBVkVfRk9STUFUX1BDTSwgc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9mcmFtZXJhdGUsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9mcmFtZXJhdGUgKiBzZWxmLl9zYW1wd2lkdGgsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgsCi0gICAgICAgICAgICBzZWxmLl9zYW1wd2lkdGggKiA4LCAnZGF0YScpKQorICAgICAgICAgICAgc2VsZi5fc2FtcHdpZHRoICogOCwgYidkYXRhJykpCiAgICAgICAgIHNlbGYuX2RhdGFfbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCiAgICAgICAgIHNlbGYuX2ZpbGUud3JpdGUoc3RydWN0LnBhY2soJzxsJywgc2VsZi5fZGF0YWxlbmd0aCkpCiAgICAgICAgIHNlbGYuX2hlYWRlcndyaXR0ZW4gPSBUcnVlCmRpZmYgLS1naXQgYS9MaWIvd2Vha3JlZi5weSBiL0xpYi93ZWFrcmVmLnB5CmluZGV4IDY2YzRkYzYuLjQ2OGY4ZjEgMTAwNjQ0Ci0tLSBhL0xpYi93ZWFrcmVmLnB5CisrKyBiL0xpYi93ZWFrcmVmLnB5CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICBkZWYgcG9waXRlbShzZWxmKToKICAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKICAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCi0gICAgICAgIHdoaWxlIDE6CisgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBrZXksIHdyID0gc2VsZi5kYXRhLnBvcGl0ZW0oKQogICAgICAgICAgICAgbyA9IHdyKCkKICAgICAgICAgICAgIGlmIG8gaXMgbm90IE5vbmU6CkBAIC0zMjQsNyArMzI0LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd3IgPSByZWYoa2V5KQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gd3IgaW4gc2VsZi5kYXRhCiAKICAgICBkZWYgaXRlbXMoc2VsZik6CkBAIC0zNjIsNyArMzYyLDcgQEAKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5kYXRhKQogCiAgICAgZGVmIHBvcGl0ZW0oc2VsZik6Ci0gICAgICAgIHdoaWxlIDE6CisgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICBrZXksIHZhbHVlID0gc2VsZi5kYXRhLnBvcGl0ZW0oKQogICAgICAgICAgICAgbyA9IGtleSgpCiAgICAgICAgICAgICBpZiBvIGlzIG5vdCBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3dlYmJyb3dzZXIucHkgYi9MaWIvd2ViYnJvd3Nlci5weQppbmRleCAxOTA3OTg1Li40MTVmMTJhIDEwMDY0NAotLS0gYS9MaWIvd2ViYnJvd3Nlci5weQorKysgYi9MaWIvd2ViYnJvd3Nlci5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAiIiJJbnRlcmZhY2VzIGZvciBsYXVuY2hpbmcgYW5kIHJlbW90ZWx5IGNvbnRyb2xsaW5nIFdlYiBicm93c2Vycy4iIiIKICMgTWFpbnRhaW5lZCBieSBHZW9yZyBCcmFuZGwuCiAKQEAgLTIyOCwxNSArMjI4LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgZm9yIFRUWSBicm93c2Vycywgd2UgbmVlZCBzdGRpbi9vdXQKICAgICAgICAgICAgIGlub3V0ID0gTm9uZQotICAgICAgICAjIGlmIHBvc3NpYmxlLCBwdXQgYnJvd3NlciBpbiBzZXBhcmF0ZSBwcm9jZXNzIGdyb3VwLCBzbwotICAgICAgICAjIGtleWJvYXJkIGludGVycnVwdHMgZG9uJ3QgYWZmZWN0IGJyb3dzZXIgYXMgd2VsbCBhcyBQeXRob24KLSAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHNpZCcsIE5vbmUpCi0gICAgICAgIGlmIG5vdCBzZXRzaWQ6Ci0gICAgICAgICAgICBzZXRzaWQgPSBnZXRhdHRyKG9zLCAnc2V0cGdycCcsIE5vbmUpCi0KICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgY2xvc2VfZmRzPVRydWUsIHN0ZGluPWlub3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9KHNlbGYucmVkaXJlY3Rfc3Rkb3V0IGFuZCBpbm91dCBvciBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWlub3V0LCBwcmVleGVjX2ZuPXNldHNpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPWlub3V0LCBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQogICAgICAgICBpZiByZW1vdGU6CiAgICAgICAgICAgICAjIHdhaXQgZml2ZSBzZWNvbnMuIElmIHRoZSBzdWJwcm9jZXNzIGlzIG5vdCBmaW5pc2hlZCwgdGhlCiAgICAgICAgICAgICAjIHJlbW90ZSBpbnZvY2F0aW9uIGhhcyAoaG9wZWZ1bGx5KSBzdGFydGVkIGEgbmV3IGluc3RhbmNlLgpAQCAtNTM2LDE4ICs1MzAsNiBAQAogIyBQbGF0Zm9ybSBzdXBwb3J0IGZvciBNYWNPUwogIwogCi10cnk6Ci0gICAgaW1wb3J0IGljCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBjbGFzcyBJbnRlcm5ldENvbmZpZyhCYXNlQnJvd3Nlcik6Ci0gICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKLSAgICAgICAgICAgIGljLmxhdW5jaHVybCh1cmwpCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZSAjIEFueSB3YXkgdG8gZ2V0IHN0YXR1cz8KLQotICAgIHJlZ2lzdGVyKCJpbnRlcm5ldC1jb25maWciLCBJbnRlcm5ldENvbmZpZywgdXBkYXRlX3RyeW9yZGVyPS0xKQotCiBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgIyBBZGFwdGVkIGZyb20gcGF0Y2ggc3VibWl0dGVkIHRvIFNvdXJjZUZvcmdlIGJ5IFN0ZXZlbiBKLiBCdXJyCiAgICAgY2xhc3MgTWFjT1NYKEJhc2VCcm93c2VyKToKQEAgLTU5Niw5ICs1NzgsMzUgQEAKICAgICAgICAgICAgIHJjID0gb3NhcGlwZS5jbG9zZSgpCiAgICAgICAgICAgICByZXR1cm4gbm90IHJjCiAKKyAgICBjbGFzcyBNYWNPU1hPU0FTY3JpcHQoQmFzZUJyb3dzZXIpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKKyAgICAgICAgICAgIGlmIHNlbGYuX25hbWUgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgICAgIHNjcmlwdCA9ICdvcGVuIGxvY2F0aW9uICIlcyInICUgdXJsLnJlcGxhY2UoJyInLCAnJTIyJykgIyBvcGVucyBpbiBkZWZhdWx0IGJyb3dzZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2NyaXB0ID0gJycnCisgICAgICAgICAgICAgICAgICAgdGVsbCBhcHBsaWNhdGlvbiAiJXMiCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlCisgICAgICAgICAgICAgICAgICAgICAgIG9wZW4gbG9jYXRpb24gIiVzIgorICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICcnJyUoc2VsZi5fbmFtZSwgdXJsLnJlcGxhY2UoJyInLCAnJTIyJykpCisKKyAgICAgICAgICAgIG9zYXBpcGUgPSBvcy5wb3Blbigib3Nhc2NyaXB0IiwgInciKQorICAgICAgICAgICAgaWYgb3NhcGlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgICAgICBvc2FwaXBlLndyaXRlKHNjcmlwdCkKKyAgICAgICAgICAgIHJjID0gb3NhcGlwZS5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gbm90IHJjCisKKwogICAgICMgRG9uJ3QgY2xlYXIgX3RyeW9yZGVyIG9yIF9icm93c2VycyBzaW5jZSBPUyBYIGNhbiB1c2UgYWJvdmUgVW5peCBzdXBwb3J0CiAgICAgIyAoYnV0IHdlIHByZWZlciB1c2luZyB0aGUgT1MgWCBzcGVjaWZpYyBzdHVmZikKLSAgICByZWdpc3RlcigiTWFjT1NYIiwgTm9uZSwgTWFjT1NYKCdkZWZhdWx0JyksIC0xKQorICAgIHJlZ2lzdGVyKCJzYWZhcmkiLCBOb25lLCBNYWNPU1hPU0FTY3JpcHQoJ3NhZmFyaScpLCAtMSkKKyAgICByZWdpc3RlcigiZmlyZWZveCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZmlyZWZveCcpLCAtMSkKKyAgICByZWdpc3RlcigiTWFjT1NYIiwgTm9uZSwgTWFjT1NYT1NBU2NyaXB0KCdkZWZhdWx0JyksIC0xKQogCiAKICMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL2hhbmRsZXJzLnB5IGIvTGliL3dzZ2lyZWYvaGFuZGxlcnMucHkKaW5kZXggNGE3NzEzNy4uNjcwNjRhNiAxMDA2NDQKLS0tIGEvTGliL3dzZ2lyZWYvaGFuZGxlcnMucHkKKysrIGIvTGliL3dzZ2lyZWYvaGFuZGxlcnMucHkKQEAgLTUsNyArNSwxMCBAQAogCiBpbXBvcnQgc3lzLCBvcywgdGltZQogCi1fX2FsbF9fID0gWydCYXNlSGFuZGxlcicsICdTaW1wbGVIYW5kbGVyJywgJ0Jhc2VDR0lIYW5kbGVyJywgJ0NHSUhhbmRsZXInXQorX19hbGxfXyA9IFsKKyAgICAnQmFzZUhhbmRsZXInLCAnU2ltcGxlSGFuZGxlcicsICdCYXNlQ0dJSGFuZGxlcicsICdDR0lIYW5kbGVyJywKKyAgICAnSUlTQ0dJSGFuZGxlcicsICdyZWFkX2Vudmlyb24nCitdCiAKICMgV2Vla2RheSBhbmQgbW9udGggbmFtZXMgZm9yIEhUVFAgZGF0ZS90aW1lIGZvcm1hdHRpbmc7IGFsd2F5cyBFbmdsaXNoIQogX3dlZWtkYXluYW1lID0gWyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iXQpAQCAtMTksNiArMjIsNzMgQEAKICAgICAgICAgX3dlZWtkYXluYW1lW3dkXSwgZGF5LCBfbW9udGhuYW1lW21vbnRoXSwgeWVhciwgaGgsIG1tLCBzcwogICAgICkKIAorX2lzX3JlcXVlc3QgPSB7CisgICAgJ1NDUklQVF9OQU1FJywgJ1BBVEhfSU5GTycsICdRVUVSWV9TVFJJTkcnLCAnUkVRVUVTVF9NRVRIT0QnLCAnQVVUSF9UWVBFJywKKyAgICAnQ09OVEVOVF9UWVBFJywgJ0NPTlRFTlRfTEVOR1RIJywgJ0hUVFBTJywgJ1JFTU9URV9VU0VSJywgJ1JFTU9URV9JREVOVCcsCit9Ll9fY29udGFpbnNfXworCitkZWYgX25lZWRzX3RyYW5zY29kZShrKToKKyAgICByZXR1cm4gX2lzX3JlcXVlc3Qoaykgb3Igay5zdGFydHN3aXRoKCdIVFRQXycpIG9yIGsuc3RhcnRzd2l0aCgnU1NMXycpIFwKKyAgICAgICAgb3IgKGsuc3RhcnRzd2l0aCgnUkVESVJFQ1RfJykgYW5kIF9uZWVkc190cmFuc2NvZGUoa1s5Ol0pKQorCitkZWYgcmVhZF9lbnZpcm9uKCk6CisgICAgIiIiUmVhZCBlbnZpcm9ubWVudCwgZml4aW5nIEhUVFAgdmFyaWFibGVzIiIiCisgICAgZW5jID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgZXNjID0gJ3N1cnJvZ2F0ZWVzY2FwZScKKyAgICB0cnk6CisgICAgICAgICcnLmVuY29kZSgndXRmLTgnLCBlc2MpCisgICAgZXhjZXB0IExvb2t1cEVycm9yOgorICAgICAgICBlc2MgPSAncmVwbGFjZScKKyAgICBlbnZpcm9uID0ge30KKworICAgICMgVGFrZSB0aGUgYmFzaWMgZW52aXJvbm1lbnQgZnJvbSBuYXRpdmUtdW5pY29kZSBvcy5lbnZpcm9uLiBBdHRlbXB0IHRvCisgICAgIyBmaXggdXAgdGhlIHZhcmlhYmxlcyB0aGF0IGNvbWUgZnJvbSB0aGUgSFRUUCByZXF1ZXN0IHRvIGNvbXBlbnNhdGUgZm9yCisgICAgIyB0aGUgYnl0ZXMtPnVuaWNvZGUgZGVjb2Rpbmcgc3RlcCB0aGF0IHdpbGwgYWxyZWFkeSBoYXZlIHRha2VuIHBsYWNlLgorICAgIGZvciBrLCB2IGluIG9zLmVudmlyb24uaXRlbXMoKToKKyAgICAgICAgaWYgX25lZWRzX3RyYW5zY29kZShrKToKKworICAgICAgICAgICAgIyBPbiB3aW4zMiwgdGhlIG9zLmVudmlyb24gaXMgbmF0aXZlbHkgVW5pY29kZS4gRGlmZmVyZW50IHNlcnZlcnMKKyAgICAgICAgICAgICMgZGVjb2RlIHRoZSByZXF1ZXN0IGJ5dGVzIHVzaW5nIGRpZmZlcmVudCBlbmNvZGluZ3MuCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSA9IG9zLmVudmlyb24uZ2V0KCdTRVJWRVJfU09GVFdBUkUnLCAnJykubG93ZXIoKQorCisgICAgICAgICAgICAgICAgIyBPbiBJSVMsIHRoZSBIVFRQIHJlcXVlc3Qgd2lsbCBiZSBkZWNvZGVkIGFzIFVURi04IGFzIGxvbmcKKyAgICAgICAgICAgICAgICAjIGFzIHRoZSBpbnB1dCBpcyBhIHZhbGlkIFVURi04IHNlcXVlbmNlLiBPdGhlcndpc2UgaXQgaXMKKyAgICAgICAgICAgICAgICAjIGRlY29kZWQgdXNpbmcgdGhlIHN5c3RlbSBjb2RlIHBhZ2UgKG1iY3MpLCB3aXRoIG5vIHdheSB0bworICAgICAgICAgICAgICAgICMgZGV0ZWN0IHRoaXMgaGFzIGhhcHBlbmVkLiBCZWNhdXNlIFVURi04IGlzIHRoZSBtb3JlIGxpa2VseQorICAgICAgICAgICAgICAgICMgZW5jb2RpbmcsIGFuZCBtYmNzIGlzIGluaGVyZW50bHkgdW5yZWxpYWJsZSAoYW4gbWJjcyBzdHJpbmcKKyAgICAgICAgICAgICAgICAjIHRoYXQgaGFwcGVucyB0byBiZSB2YWxpZCBVVEYtOCB3aWxsIG5vdCBiZSBkZWNvZGVkIGFzIG1iY3MpCisgICAgICAgICAgICAgICAgIyBhbHdheXMgcmVjcmVhdGUgdGhlIG9yaWdpbmFsIGJ5dGVzIGFzIFVURi04LgorICAgICAgICAgICAgICAgIGlmIHNvZnR3YXJlLnN0YXJ0c3dpdGgoJ21pY3Jvc29mdC1paXMvJyk6CisgICAgICAgICAgICAgICAgICAgIHYgPSB2LmVuY29kZSgndXRmLTgnKS5kZWNvZGUoJ2lzby04ODU5LTEnKQorCisgICAgICAgICAgICAgICAgIyBBcGFjaGUgbW9kX2NnaSB3cml0ZXMgYnl0ZXMtYXMtdW5pY29kZSAoYXMgaWYgSVNPLTg4NTktMSkgZGlyZWN0CisgICAgICAgICAgICAgICAgIyB0byB0aGUgVW5pY29kZSBlbnZpcm9uLiBObyBtb2RpZmljYXRpb24gbmVlZGVkLgorICAgICAgICAgICAgICAgIGVsaWYgc29mdHdhcmUuc3RhcnRzd2l0aCgnYXBhY2hlLycpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAjIFB5dGhvbiAzJ3MgaHR0cC5zZXJ2ZXIuQ0dJSFRUUFJlcXVlc3RIYW5kbGVyIGRlY29kZXMKKyAgICAgICAgICAgICAgICAjIHVzaW5nIHRoZSB1cmxsaWIudW5xdW90ZSBkZWZhdWx0IG9mIFVURi04LCBhbW9uZ3N0IG90aGVyCisgICAgICAgICAgICAgICAgIyBpc3N1ZXMuCisgICAgICAgICAgICAgICAgZWxpZiAoCisgICAgICAgICAgICAgICAgICAgIHNvZnR3YXJlLnN0YXJ0c3dpdGgoJ3NpbXBsZWh0dHAvJykKKyAgICAgICAgICAgICAgICAgICAgYW5kICdweXRob24vMycgaW4gc29mdHdhcmUKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgICAgICAgICB2ID0gdi5lbmNvZGUoJ3V0Zi04JykuZGVjb2RlKCdpc28tODg1OS0xJykKKworICAgICAgICAgICAgICAgICMgRm9yIG90aGVyIHNlcnZlcnMsIGd1ZXNzIHRoYXQgdGhleSBoYXZlIHdyaXR0ZW4gYnl0ZXMgdG8KKyAgICAgICAgICAgICAgICAjIHRoZSBlbnZpcm9uIHVzaW5nIHN0ZGlvIGJ5dGUtb3JpZW50ZWQgaW50ZXJmYWNlcywgZW5kaW5nIHVwCisgICAgICAgICAgICAgICAgIyB3aXRoIHRoZSBzeXN0ZW0gY29kZSBwYWdlLgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHYgPSB2LmVuY29kZShlbmMsICdyZXBsYWNlJykuZGVjb2RlKCdpc28tODg1OS0xJykKKworICAgICAgICAgICAgIyBSZWNvdmVyIGJ5dGVzIGZyb20gdW5pY29kZSBlbnZpcm9uLCB1c2luZyBzdXJyb2dhdGUgZXNjYXBlcworICAgICAgICAgICAgIyB3aGVyZSBhdmFpbGFibGUgKFB5dGhvbiAzLjErKS4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdiA9IHYuZW5jb2RlKGVuYywgZXNjKS5kZWNvZGUoJ2lzby04ODU5LTEnKQorCisgICAgICAgIGVudmlyb25ba10gPSB2CisgICAgcmV0dXJuIGVudmlyb24KIAogCiBjbGFzcyBCYXNlSGFuZGxlcjoKQEAgLTM3LDcgKzEwNyw3IEBACiAgICAgIyBvc19lbnZpcm9uIGlzIHVzZWQgdG8gc3VwcGx5IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgT1MgZW52aXJvbm1lbnQ6CiAgICAgIyBieSBkZWZhdWx0IGl0J3MgYSBjb3B5IG9mICdvcy5lbnZpcm9uJyBhcyBvZiBpbXBvcnQgdGltZSwgYnV0IHlvdSBjYW4KICAgICAjIG92ZXJyaWRlIHRoaXMgaW4gZS5nLiB5b3VyIF9faW5pdF9fIG1ldGhvZC4KLSAgICBvc19lbnZpcm9uID0gZGljdChvcy5lbnZpcm9uLml0ZW1zKCkpCisgICAgb3NfZW52aXJvbj0gcmVhZF9lbnZpcm9uKCkKIAogICAgICMgQ29sbGFib3JhdG9yIGNsYXNzZXMKICAgICB3c2dpX2ZpbGVfd3JhcHBlciA9IEZpbGVXcmFwcGVyICAgICAjIHNldCB0byBOb25lIHRvIGRpc2FibGUKQEAgLTQ1LDkgKzExNSw5IEBACiAKICAgICAjIEVycm9yIGhhbmRsaW5nIChhbHNvIHBlci1zdWJjbGFzcyBvciBwZXItaW5zdGFuY2UpCiAgICAgdHJhY2ViYWNrX2xpbWl0ID0gTm9uZSAgIyBQcmludCBlbnRpcmUgdHJhY2ViYWNrIHRvIHNlbGYuZ2V0X3N0ZGVycigpCi0gICAgZXJyb3Jfc3RhdHVzID0gIjUwMCBEdWRlLCB0aGlzIGlzIHdoYWNrISIKKyAgICBlcnJvcl9zdGF0dXMgPSAiNTAwIEludGVybmFsIFNlcnZlciBFcnJvciIKICAgICBlcnJvcl9oZWFkZXJzID0gWygnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbicpXQotICAgIGVycm9yX2JvZHkgPSAiQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4iCisgICAgZXJyb3JfYm9keSA9IGIiQSBzZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuICBQbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci4iCiAKICAgICAjIFN0YXRlIHZhcmlhYmxlcyAoZG9uJ3QgbWVzcyB3aXRoIHRoZXNlKQogICAgIHN0YXR1cyA9IHJlc3VsdCA9IE5vbmUKQEAgLTU1LDEzICsxMjUsNiBAQAogICAgIGhlYWRlcnMgPSBOb25lCiAgICAgYnl0ZXNfc2VudCA9IDAKIAotCi0KLQotCi0KLQotCiAgICAgZGVmIHJ1bihzZWxmLCBhcHBsaWNhdGlvbik6CiAgICAgICAgICIiIkludm9rZSB0aGUgYXBwbGljYXRpb24iIiIKICAgICAgICAgIyBOb3RlIHRvIHNlbGY6IGRvbid0IG1vdmUgdGhlIGNsb3NlKCkhICBBc3luY2hyb25vdXMgc2VydmVycyBzaG91bGRuJ3QKQEAgLTE0NSw3ICsyMDgsNyBAQAogICAgICAgICAgICAgc2VsZi5zZXRfY29udGVudF9sZW5ndGgoKQogCiAgICAgZGVmIHN0YXJ0X3Jlc3BvbnNlKHNlbGYsIHN0YXR1cywgaGVhZGVycyxleGNfaW5mbz1Ob25lKToKLSAgICAgICAgIiIiJ3N0YXJ0X3Jlc3BvbnNlKCknIGNhbGxhYmxlIGFzIHNwZWNpZmllZCBieSBQRVAgMzMzIiIiCisgICAgICAgICIiIidzdGFydF9yZXNwb25zZSgpJyBjYWxsYWJsZSBhcyBzcGVjaWZpZWQgYnkgUEVQIDMzMzMiIiIKIAogICAgICAgICBpZiBleGNfaW5mbzoKICAgICAgICAgICAgIHRyeToKQEAgLTE1Nyw0OSArMjIwLDQ4IEBACiAgICAgICAgIGVsaWYgc2VsZi5oZWFkZXJzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkhlYWRlcnMgYWxyZWFkeSBzZXQhIikKIAorICAgICAgICBzZWxmLnN0YXR1cyA9IHN0YXR1cworICAgICAgICBzZWxmLmhlYWRlcnMgPSBzZWxmLmhlYWRlcnNfY2xhc3MoaGVhZGVycykKICAgICAgICAgc3RhdHVzID0gc2VsZi5fY29udmVydF9zdHJpbmdfdHlwZShzdGF0dXMsICJTdGF0dXMiKQogICAgICAgICBhc3NlcnQgbGVuKHN0YXR1cyk+PTQsIlN0YXR1cyBtdXN0IGJlIGF0IGxlYXN0IDQgY2hhcmFjdGVycyIKICAgICAgICAgYXNzZXJ0IGludChzdGF0dXNbOjNdKSwiU3RhdHVzIG1lc3NhZ2UgbXVzdCBiZWdpbiB3LzMtZGlnaXQgY29kZSIKICAgICAgICAgYXNzZXJ0IHN0YXR1c1szXT09IiAiLCAiU3RhdHVzIG1lc3NhZ2UgbXVzdCBoYXZlIGEgc3BhY2UgYWZ0ZXIgY29kZSIKIAotICAgICAgICBzdHJfaGVhZGVycyA9IFtdCi0gICAgICAgIGZvciBuYW1lLHZhbCBpbiBoZWFkZXJzOgotICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUobmFtZSwgIkhlYWRlciBuYW1lIikKLSAgICAgICAgICAgIHZhbCA9IHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUodmFsLCAiSGVhZGVyIHZhbHVlIikKLSAgICAgICAgICAgIHN0cl9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsKSkKLSAgICAgICAgICAgIGFzc2VydCBub3QgaXNfaG9wX2J5X2hvcChuYW1lKSwiSG9wLWJ5LWhvcCBoZWFkZXJzIG5vdCBhbGxvd2VkIgorICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUobmFtZSwgIkhlYWRlciBuYW1lIikKKyAgICAgICAgICAgICAgICB2YWwgPSBzZWxmLl9jb252ZXJ0X3N0cmluZ190eXBlKHZhbCwgIkhlYWRlciB2YWx1ZSIpCisgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBpc19ob3BfYnlfaG9wKG5hbWUpLCJIb3AtYnktaG9wIGhlYWRlcnMgbm90IGFsbG93ZWQiCiAKLSAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0dXMKLSAgICAgICAgc2VsZi5oZWFkZXJzID0gc2VsZi5oZWFkZXJzX2NsYXNzKHN0cl9oZWFkZXJzKQogICAgICAgICByZXR1cm4gc2VsZi53cml0ZQogCiAgICAgZGVmIF9jb252ZXJ0X3N0cmluZ190eXBlKHNlbGYsIHZhbHVlLCB0aXRsZSk6CiAgICAgICAgICIiIkNvbnZlcnQvY2hlY2sgdmFsdWUgdHlwZS4iIiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgaWYgdHlwZSh2YWx1ZSkgaXMgc3RyOgogICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0gICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHZhbHVlLCBieXRlcyksIFwKLSAgICAgICAgICAgICJ7MH0gbXVzdCBiZSBhIHN0cmluZyBvciBieXRlcyBvYmplY3QgKG5vdCB7MX0pIi5mb3JtYXQodGl0bGUsIHZhbHVlKQotICAgICAgICByZXR1cm4gc3RyKHZhbHVlLCAiaXNvLTg4NTktMSIpCisgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAorICAgICAgICAgICAgInswfSBtdXN0IGJlIG9mIHR5cGUgc3RyIChnb3QgezF9KSIuZm9ybWF0KHRpdGxlLCByZXByKHZhbHVlKSkKKyAgICAgICAgKQogCiAgICAgZGVmIHNlbmRfcHJlYW1ibGUoc2VsZik6CiAgICAgICAgICIiIlRyYW5zbWl0IHZlcnNpb24vc3RhdHVzL2RhdGUvc2VydmVyLCB2aWEgc2VsZi5fd3JpdGUoKSIiIgogICAgICAgICBpZiBzZWxmLm9yaWdpbl9zZXJ2ZXI6CiAgICAgICAgICAgICBpZiBzZWxmLmNsaWVudF9pc19tb2Rlcm4oKToKLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZSgnSFRUUC8lcyAlc1xyXG4nICUgKHNlbGYuaHR0cF92ZXJzaW9uLHNlbGYuc3RhdHVzKSkKKyAgICAgICAgICAgICAgICBzZWxmLl93cml0ZSgoJ0hUVFAvJXMgJXNcclxuJyAlIChzZWxmLmh0dHBfdmVyc2lvbixzZWxmLnN0YXR1cykpLmVuY29kZSgnaXNvLTg4NTktMScpKQogICAgICAgICAgICAgICAgIGlmICdEYXRlJyBub3QgaW4gc2VsZi5oZWFkZXJzOgogICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICdEYXRlOiAlc1xyXG4nICUgZm9ybWF0X2RhdGVfdGltZSh0aW1lLnRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICgnRGF0ZTogJXNcclxuJyAlIGZvcm1hdF9kYXRlX3RpbWUodGltZS50aW1lKCkpKS5lbmNvZGUoJ2lzby04ODU5LTEnKQogICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXJfc29mdHdhcmUgYW5kICdTZXJ2ZXInIG5vdCBpbiBzZWxmLmhlYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlKCdTZXJ2ZXI6ICVzXHJcbicgJSBzZWxmLnNlcnZlcl9zb2Z0d2FyZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGUoKCdTZXJ2ZXI6ICVzXHJcbicgJSBzZWxmLnNlcnZlcl9zb2Z0d2FyZSkuZW5jb2RlKCdpc28tODg1OS0xJykpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl93cml0ZSgnU3RhdHVzOiAlc1xyXG4nICUgc2VsZi5zdGF0dXMpCisgICAgICAgICAgICBzZWxmLl93cml0ZSgoJ1N0YXR1czogJXNcclxuJyAlIHNlbGYuc3RhdHVzKS5lbmNvZGUoJ2lzby04ODU5LTEnKSkKIAogICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiJ3dyaXRlKCknIGNhbGxhYmxlIGFzIHNwZWNpZmllZCBieSBQRVAgMzMzIiIiCisgICAgICAgICIiIid3cml0ZSgpJyBjYWxsYWJsZSBhcyBzcGVjaWZpZWQgYnkgUEVQIDMzMzMiIiIKIAotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkYXRhLCAoc3RyLCBieXRlcykpLCBcCi0gICAgICAgICAgICAid3JpdGUoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGJ5dGVzIgorICAgICAgICBhc3NlcnQgdHlwZShkYXRhKSBpcyBieXRlcywgXAorICAgICAgICAgICAgIndyaXRlKCkgYXJndW1lbnQgbXVzdCBiZSBhIGJ5dGVzIGluc3RhbmNlIgogCiAgICAgICAgIGlmIG5vdCBzZWxmLnN0YXR1czoKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJ3cml0ZSgpIGJlZm9yZSBzdGFydF9yZXNwb25zZSgpIikKQEAgLTI2Niw3ICszMjgsNyBAQAogICAgICAgICBzZWxmLmhlYWRlcnNfc2VudCA9IFRydWUKICAgICAgICAgaWYgbm90IHNlbGYub3JpZ2luX3NlcnZlciBvciBzZWxmLmNsaWVudF9pc19tb2Rlcm4oKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9wcmVhbWJsZSgpCi0gICAgICAgICAgICBzZWxmLl93cml0ZShzdHIoc2VsZi5oZWFkZXJzKSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKGJ5dGVzKHNlbGYuaGVhZGVycykpCiAKIAogICAgIGRlZiByZXN1bHRfaXNfZmlsZShzZWxmKToKQEAgLTM1MywxNSArNDE1LDYgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKLQotCi0KLQotCi0KLQotCi0KIGNsYXNzIFNpbXBsZUhhbmRsZXIoQmFzZUhhbmRsZXIpOgogICAgICIiIkhhbmRsZXIgdGhhdCdzIGp1c3QgaW5pdGlhbGl6ZWQgd2l0aCBzdHJlYW1zLCBlbnZpcm9ubWVudCwgZXRjLgogCkBAIC0zOTUsMTIgKzQ0OCw2IEBACiAgICAgICAgIHNlbGYuZW52aXJvbi51cGRhdGUoc2VsZi5iYXNlX2VudikKIAogICAgIGRlZiBfd3JpdGUoc2VsZixkYXRhKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBzdHIpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLmVuY29kZSgiaXNvLTg4NTktMSIpCi0gICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuaWNvZGUgZGF0YSBtdXN0IGNvbnRhaW4gb25seSBjb2RlIHBvaW50cyIKLSAgICAgICAgICAgICAgICAgICAgIiByZXByZXNlbnRhYmxlIGluIElTTy04ODU5LTEgZW5jb2RpbmciKQogICAgICAgICBzZWxmLnN0ZG91dC53cml0ZShkYXRhKQogCiAgICAgZGVmIF9mbHVzaChzZWxmKToKQEAgLTQzMiwyMyArNDc5LDYgQEAKICAgICBvcmlnaW5fc2VydmVyID0gRmFsc2UKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgQ0dJSGFuZGxlcihCYXNlQ0dJSGFuZGxlcik6CiAKICAgICAiIiJDR0ktYmFzZWQgaW52b2NhdGlvbiB2aWEgc3lzLnN0ZGluL3N0ZG91dC9zdGRlcnIgYW5kIG9zLmVudmlyb24KQEAgLTQ3NCwyMyArNTA0LDQyIEBACiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIEJhc2VDR0lIYW5kbGVyLl9faW5pdF9fKAotICAgICAgICAgICAgc2VsZiwgc3lzLnN0ZGluLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyLCBkaWN0KG9zLmVudmlyb24uaXRlbXMoKSksCi0gICAgICAgICAgICBtdWx0aXRocmVhZD1GYWxzZSwgbXVsdGlwcm9jZXNzPVRydWUKKyAgICAgICAgICAgIHNlbGYsIHN5cy5zdGRpbi5idWZmZXIsIHN5cy5zdGRvdXQuYnVmZmVyLCBzeXMuc3RkZXJyLAorICAgICAgICAgICAgcmVhZF9lbnZpcm9uKCksIG11bHRpdGhyZWFkPUZhbHNlLCBtdWx0aXByb2Nlc3M9VHJ1ZQogICAgICAgICApCiAKIAorY2xhc3MgSUlTQ0dJSGFuZGxlcihCYXNlQ0dJSGFuZGxlcik6CisgICAgIiIiQ0dJLWJhc2VkIGludm9jYXRpb24gd2l0aCB3b3JrYXJvdW5kIGZvciBJSVMgcGF0aCBidWcKIAorICAgIFRoaXMgaGFuZGxlciBzaG91bGQgYmUgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIENHSUhhbmRsZXIgd2hlbiBkZXBsb3lpbmcgb24KKyAgICBNaWNyb3NvZnQgSUlTIHdpdGhvdXQgaGF2aW5nIHNldCB0aGUgY29uZmlnIGFsbG93UGF0aEluZm8gb3B0aW9uIChJSVM+PTcpCisgICAgb3IgbWV0YWJhc2UgYWxsb3dQYXRoSW5mb0ZvclNjcmlwdE1hcHBpbmdzIChJSVM8NykuCisgICAgIiIiCisgICAgd3NnaV9ydW5fb25jZSA9IFRydWUKKyAgICBvc19lbnZpcm9uID0ge30KIAorICAgICMgQnkgZGVmYXVsdCwgSUlTIGdpdmVzIGEgUEFUSF9JTkZPIHRoYXQgZHVwbGljYXRlcyB0aGUgU0NSSVBUX05BTUUgYXQKKyAgICAjIHRoZSBmcm9udCwgY2F1c2luZyBwcm9ibGVtcyBmb3IgV1NHSSBhcHBsaWNhdGlvbnMgdGhhdCB3aXNoIHRvIGltcGxlbWVudAorICAgICMgcm91dGluZy4gVGhpcyBoYW5kbGVyIHN0cmlwcyBhbnkgc3VjaCBkdXBsaWNhdGVkIHBhdGguCiAKKyAgICAjIElJUyBjYW4gYmUgY29uZmlndXJlZCB0byBwYXNzIHRoZSBjb3JyZWN0IFBBVEhfSU5GTywgYnV0IHRoaXMgY2F1c2VzCisgICAgIyBhbm90aGVyIGJ1ZyB3aGVyZSBQQVRIX1RSQU5TTEFURUQgaXMgd3JvbmcuIEx1Y2tpbHkgdGhpcyB2YXJpYWJsZSBpcworICAgICMgcmFyZWx5IHVzZWQgYW5kIGlzIG5vdCBndWFyYW50ZWVkIGJ5IFdTR0kuIE9uIElJUzw3LCB0aG91Z2gsIHRoZQorICAgICMgc2V0dGluZyBjYW4gb25seSBiZSBtYWRlIG9uIGEgdmhvc3QgbGV2ZWwsIGFmZmVjdGluZyBhbGwgb3RoZXIgc2NyaXB0CisgICAgIyBtYXBwaW5ncywgbWFueSBvZiB3aGljaCBicmVhayB3aGVuIGV4cG9zZWQgdG8gdGhlIFBBVEhfVFJBTlNMQVRFRCBidWcuCisgICAgIyBGb3IgdGhpcyByZWFzb24gSUlTPDcgaXMgYWxtb3N0IG5ldmVyIGRlcGxveWVkIHdpdGggdGhlIGZpeC4gKEV2ZW4gSUlTNworICAgICMgcmFyZWx5IHVzZXMgaXQgYmVjYXVzZSB0aGVyZSBpcyBzdGlsbCBubyBVSSBmb3IgaXQuKQogCi0KLQotCi0KLQotCi0KLQotCi0KLSMKKyAgICAjIFRoZXJlIGlzIG5vIHdheSBmb3IgQ0dJIGNvZGUgdG8gdGVsbCB3aGV0aGVyIHRoZSBvcHRpb24gd2FzIHNldCwgc28gYQorICAgICMgc2VwYXJhdGUgaGFuZGxlciBjbGFzcyBpcyBwcm92aWRlZC4KKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGVudmlyb249IHJlYWRfZW52aXJvbigpCisgICAgICAgIHBhdGggPSBlbnZpcm9uLmdldCgnUEFUSF9JTkZPJywgJycpCisgICAgICAgIHNjcmlwdCA9IGVudmlyb24uZ2V0KCdTQ1JJUFRfTkFNRScsICcnKQorICAgICAgICBpZiAocGF0aCsnLycpLnN0YXJ0c3dpdGgoc2NyaXB0KycvJyk6CisgICAgICAgICAgICBlbnZpcm9uWydQQVRIX0lORk8nXSA9IHBhdGhbbGVuKHNjcmlwdCk6XQorICAgICAgICBCYXNlQ0dJSGFuZGxlci5fX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIHN5cy5zdGRpbi5idWZmZXIsIHN5cy5zdGRvdXQuYnVmZmVyLCBzeXMuc3RkZXJyLAorICAgICAgICAgICAgZW52aXJvbiwgbXVsdGl0aHJlYWQ9RmFsc2UsIG11bHRpcHJvY2Vzcz1UcnVlCisgICAgICAgICkKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL2hlYWRlcnMucHkgYi9MaWIvd3NnaXJlZi9oZWFkZXJzLnB5CmluZGV4IDAyNTA2N2EuLmQ5Mzk2MjggMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL2hlYWRlcnMucHkKKysrIGIvTGliL3dzZ2lyZWYvaGVhZGVycy5weQpAQCAtMSw2ICsxLDYgQEAKICIiIk1hbmFnZSBIVFRQIFJlc3BvbnNlIEhlYWRlcnMKIAotTXVjaCBvZiB0aGlzIG1vZHVsZSBpcyByZWQtaGFuZGVkbHkgcGlsZmVyZWQgZnJvbSBlbWFpbC5NZXNzYWdlIGluIHRoZSBzdGRsaWIsCitNdWNoIG9mIHRoaXMgbW9kdWxlIGlzIHJlZC1oYW5kZWRseSBwaWxmZXJlZCBmcm9tIGVtYWlsLm1lc3NhZ2UgaW4gdGhlIHN0ZGxpYiwKIHNvIHBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kIHdlcmUKIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LgogIiIiCkBAIC0yNSwzOCArMjUsMjUgQEAKICAgICAgICAgcmV0dXJuIHBhcmFtCiAKIAotCi0KLQotCi0KLQotCi0KLQotCi0KLQogY2xhc3MgSGVhZGVyczoKIAogICAgICIiIk1hbmFnZSBhIGNvbGxlY3Rpb24gb2YgSFRUUCByZXNwb25zZSBoZWFkZXJzIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZixoZWFkZXJzKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaGVhZGVycywgbGlzdCk6CisgICAgICAgIGlmIHR5cGUoaGVhZGVycykgaXMgbm90IGxpc3Q6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkhlYWRlcnMgbXVzdCBiZSBhIGxpc3Qgb2YgbmFtZS92YWx1ZSB0dXBsZXMiKQotICAgICAgICBzZWxmLl9oZWFkZXJzID0gW10KLSAgICAgICAgZm9yIGssIHYgaW4gaGVhZGVyczoKLSAgICAgICAgICAgIGsgPSBzZWxmLl9jb252ZXJ0X3N0cmluZ190eXBlKGspCi0gICAgICAgICAgICB2ID0gc2VsZi5fY29udmVydF9zdHJpbmdfdHlwZSh2KQotICAgICAgICAgICAgc2VsZi5faGVhZGVycy5hcHBlbmQoKGssIHYpKQorICAgICAgICBzZWxmLl9oZWFkZXJzID0gaGVhZGVycworICAgICAgICBpZiBfX2RlYnVnX186CisgICAgICAgICAgICBmb3IgaywgdiBpbiBoZWFkZXJzOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUoaykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb252ZXJ0X3N0cmluZ190eXBlKHYpCiAKICAgICBkZWYgX2NvbnZlcnRfc3RyaW5nX3R5cGUoc2VsZiwgdmFsdWUpOgogICAgICAgICAiIiJDb252ZXJ0L2NoZWNrIHZhbHVlIHR5cGUuIiIiCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgICAgIGlmIHR5cGUodmFsdWUpIGlzIHN0cjoKICAgICAgICAgICAgIHJldHVybiB2YWx1ZQotICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZSh2YWx1ZSwgYnl0ZXMpLCAoIkhlYWRlciBuYW1lcy92YWx1ZXMgbXVzdCBiZSIKLSAgICAgICAgICAgICIgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0IChub3QgezB9KSIuZm9ybWF0KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIHN0cih2YWx1ZSwgImlzby04ODU5LTEiKQorICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiSGVhZGVyIG5hbWVzL3ZhbHVlcyBtdXN0IGJlIgorICAgICAgICAgICAgIiBvZiB0eXBlIHN0ciAoZ290IHswfSkiLmZvcm1hdChyZXByKHZhbHVlKSkpCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSB0b3RhbCBudW1iZXIgb2YgaGVhZGVycywgaW5jbHVkaW5nIGR1cGxpY2F0ZXMuIiIiCkBAIC04NywxMCArNzQsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0KG5hbWUpCiAKLQotCi0KLQogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgbmFtZSk6CiAgICAgICAgICIiIlJldHVybiB0cnVlIGlmIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXIuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmdldChuYW1lKSBpcyBub3QgTm9uZQpAQCAtMTI3LDkgKzExMCw2IEBACiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gW2sgZm9yIGssIHYgaW4gc2VsZi5faGVhZGVyc10KIAotCi0KLQogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIGxpc3Qgb2YgYWxsIGhlYWRlciB2YWx1ZXMuCiAKQEAgLTE1OCw2ICsxMzgsOSBAQAogICAgICAgICBzdWl0YWJsZSBmb3IgZGlyZWN0IEhUVFAgdHJhbnNtaXNzaW9uLiIiIgogICAgICAgICByZXR1cm4gJ1xyXG4nLmpvaW4oWyIlczogJXMiICUga3YgZm9yIGt2IGluIHNlbGYuX2hlYWRlcnNdK1snJywnJ10pCiAKKyAgICBkZWYgX19ieXRlc19fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLmVuY29kZSgnaXNvLTg4NTktMScpCisKICAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLG5hbWUsdmFsdWUpOgogICAgICAgICAiIiJSZXR1cm4gZmlyc3QgbWF0Y2hpbmcgaGVhZGVyIHZhbHVlIGZvciAnbmFtZScsIG9yICd2YWx1ZScKIApAQCAtMTcxLDcgKzE1NCw2IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CiAKLQogICAgIGRlZiBhZGRfaGVhZGVyKHNlbGYsIF9uYW1lLCBfdmFsdWUsICoqX3BhcmFtcyk6CiAgICAgICAgICIiIkV4dGVuZGVkIGhlYWRlciBzZXR0aW5nLgogCkBAIC0xODQsNyArMTY2LDcgQEAKIAogICAgICAgICBoLmFkZF9oZWFkZXIoJ2NvbnRlbnQtZGlzcG9zaXRpb24nLCAnYXR0YWNobWVudCcsIGZpbGVuYW1lPSdidWQuZ2lmJykKIAotICAgICAgICBOb3RlIHRoYXQgdW5saWtlIHRoZSBjb3JyZXNwb25kaW5nICdlbWFpbC5NZXNzYWdlJyBtZXRob2QsIHRoaXMgZG9lcworICAgICAgICBOb3RlIHRoYXQgdW5saWtlIHRoZSBjb3JyZXNwb25kaW5nICdlbWFpbC5tZXNzYWdlJyBtZXRob2QsIHRoaXMgZG9lcwogICAgICAgICAqbm90KiBoYW5kbGUgJyhjaGFyc2V0LCBsYW5ndWFnZSwgdmFsdWUpJyB0dXBsZXM6IGFsbCB2YWx1ZXMgbXVzdCBiZQogICAgICAgICBzdHJpbmdzIG9yIE5vbmUuCiAgICAgICAgICIiIgpAQCAtMjAwLDE5ICsxODIsMyBAQAogICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9jb252ZXJ0X3N0cmluZ190eXBlKHYpCiAgICAgICAgICAgICAgICAgcGFydHMuYXBwZW5kKF9mb3JtYXRwYXJhbShrLnJlcGxhY2UoJ18nLCAnLScpLCB2KSkKICAgICAgICAgc2VsZi5faGVhZGVycy5hcHBlbmQoKHNlbGYuX2NvbnZlcnRfc3RyaW5nX3R5cGUoX25hbWUpLCAiOyAiLmpvaW4ocGFydHMpKSkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkgYi9MaWIvd3NnaXJlZi9zaW1wbGVfc2VydmVyLnB5CmluZGV4IGRhMTQxNDQuLmFmODJmOTUgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3NpbXBsZV9zZXJ2ZXIucHkKKysrIGIvTGliL3dzZ2lyZWYvc2ltcGxlX3NlcnZlci5weQpAQCAtMSw0ICsxLDQgQEAKLSIiIkJhc2VIVFRQU2VydmVyIHRoYXQgaW1wbGVtZW50cyB0aGUgUHl0aG9uIFdTR0kgcHJvdG9jb2wgKFBFUCAzMzMsIHJldiAxLjIxKQorIiIiQmFzZUhUVFBTZXJ2ZXIgdGhhdCBpbXBsZW1lbnRzIHRoZSBQeXRob24gV1NHSSBwcm90b2NvbCAoUEVQIDMzMzMpCiAKIFRoaXMgaXMgYm90aCBhbiBleGFtcGxlIG9mIGhvdyBXU0dJIGNhbiBiZSBpbXBsZW1lbnRlZCwgYW5kIGEgYmFzaXMgZm9yIHJ1bm5pbmcKIHNpbXBsZSB3ZWIgYXBwbGljYXRpb25zIG9uIGEgbG9jYWwgbWFjaGluZSwgc3VjaCBhcyBtaWdodCBiZSBkb25lIHdoZW4gdGVzdGluZwpAQCAtMTUsNyArMTUsNyBAQAogaW1wb3J0IHVybGxpYi5wYXJzZQogZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBTaW1wbGVIYW5kbGVyCiAKLV9fdmVyc2lvbl9fID0gIjAuMSIKK19fdmVyc2lvbl9fID0gIjAuMiIKIF9fYWxsX18gPSBbJ1dTR0lTZXJ2ZXInLCAnV1NHSVJlcXVlc3RIYW5kbGVyJywgJ2RlbW9fYXBwJywgJ21ha2Vfc2VydmVyJ10KIAogCkBAIC0zOCw4ICszOCw2IEBACiAKIAogCi0KLQogY2xhc3MgV1NHSVNlcnZlcihIVFRQU2VydmVyKToKIAogICAgICIiIkJhc2VIVFRQU2VydmVyIHRoYXQgaW1wbGVtZW50cyB0aGUgUHl0aG9uIFdTR0kgcHJvdG9jb2wiIiIKQEAgLTY5LDE4ICs2Nyw2IEBACiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCiBjbGFzcyBXU0dJUmVxdWVzdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CiAKICAgICBzZXJ2ZXJfdmVyc2lvbiA9ICJXU0dJU2VydmVyLyIgKyBfX3ZlcnNpb25fXwpAQCAtODgsMTMgKzc0LDE0IEBACiAgICAgZGVmIGdldF9lbnZpcm9uKHNlbGYpOgogICAgICAgICBlbnYgPSBzZWxmLnNlcnZlci5iYXNlX2Vudmlyb24uY29weSgpCiAgICAgICAgIGVudlsnU0VSVkVSX1BST1RPQ09MJ10gPSBzZWxmLnJlcXVlc3RfdmVyc2lvbgorICAgICAgICBlbnZbJ1NFUlZFUl9TT0ZUV0FSRSddID0gc2VsZi5zZXJ2ZXJfdmVyc2lvbgogICAgICAgICBlbnZbJ1JFUVVFU1RfTUVUSE9EJ10gPSBzZWxmLmNvbW1hbmQKICAgICAgICAgaWYgJz8nIGluIHNlbGYucGF0aDoKICAgICAgICAgICAgIHBhdGgscXVlcnkgPSBzZWxmLnBhdGguc3BsaXQoJz8nLDEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwYXRoLHF1ZXJ5ID0gc2VsZi5wYXRoLCcnCiAKLSAgICAgICAgZW52WydQQVRIX0lORk8nXSA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCisgICAgICAgIGVudlsnUEFUSF9JTkZPJ10gPSB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcyhwYXRoKS5kZWNvZGUoJ2lzby04ODU5LTEnKQogICAgICAgICBlbnZbJ1FVRVJZX1NUUklORyddID0gcXVlcnkKIAogICAgICAgICBob3N0ID0gc2VsZi5hZGRyZXNzX3N0cmluZygpCkBAIC0xMzksMjkgKzEyNiw2IEBACiAKIAogCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQogZGVmIGRlbW9fYXBwKGVudmlyb24sc3RhcnRfcmVzcG9uc2UpOgogICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAgICAgc3Rkb3V0ID0gU3RyaW5nSU8oKQpAQCAtMTcwLDcgKzEzNCw3IEBACiAgICAgaCA9IHNvcnRlZChlbnZpcm9uLml0ZW1zKCkpCiAgICAgZm9yIGssdiBpbiBoOgogICAgICAgICBwcmludChrLCc9JyxyZXByKHYpLCBmaWxlPXN0ZG91dCkKLSAgICBzdGFydF9yZXNwb25zZShiIjIwMCBPSyIsIFsoYidDb250ZW50LVR5cGUnLGIndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpXSkKKyAgICBzdGFydF9yZXNwb25zZSgiMjAwIE9LIiwgWygnQ29udGVudC1UeXBlJywndGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCcpXSkKICAgICByZXR1cm4gW3N0ZG91dC5nZXR2YWx1ZSgpLmVuY29kZSgidXRmLTgiKV0KIAogCkBAIC0xOTAsMTYgKzE1NCwzIEBACiAgICAgaW1wb3J0IHdlYmJyb3dzZXIKICAgICB3ZWJicm93c2VyLm9wZW4oJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC94eXo/YWJjJykKICAgICBodHRwZC5oYW5kbGVfcmVxdWVzdCgpICAjIHNlcnZlIG9uZSByZXF1ZXN0LCB0aGVuIGV4aXQKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSMKZGlmZiAtLWdpdCBhL0xpYi93c2dpcmVmL3V0aWwucHkgYi9MaWIvd3NnaXJlZi91dGlsLnB5CmluZGV4IDA2ZWI5NTYuLjFmMWU2Y2MgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3V0aWwucHkKKysrIGIvTGliL3dzZ2lyZWYvdXRpbC5weQpAQCAtMzIsMTMgKzMyLDYgQEAKICAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KIAotCi0KLQotCi0KLQotCiBkZWYgZ3Vlc3Nfc2NoZW1lKGVudmlyb24pOgogICAgICIiIlJldHVybiBhIGd1ZXNzIGZvciB3aGV0aGVyICd3c2dpLnVybF9zY2hlbWUnIHNob3VsZCBiZSAnaHR0cCcgb3IgJ2h0dHBzJwogICAgICIiIgpAQCAtMTYxLDcgKzE1NCw2IEBACiAKIAogCi0KIF9ob3BwaXNoID0gewogICAgICdjb25uZWN0aW9uJzoxLCAna2VlcC1hbGl2ZSc6MSwgJ3Byb3h5LWF1dGhlbnRpY2F0ZSc6MSwKICAgICAncHJveHktYXV0aG9yaXphdGlvbic6MSwgJ3RlJzoxLCAndHJhaWxlcnMnOjEsICd0cmFuc2Zlci1lbmNvZGluZyc6MSwKQEAgLTE3MSwzNSArMTYzLDMgQEAKIGRlZiBpc19ob3BfYnlfaG9wKGhlYWRlcl9uYW1lKToKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiAnaGVhZGVyX25hbWUnIGlzIGFuIEhUVFAvMS4xICJIb3AtYnktSG9wIiBoZWFkZXIiIiIKICAgICByZXR1cm4gX2hvcHBpc2goaGVhZGVyX25hbWUubG93ZXIoKSkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvdmFsaWRhdGUucHkgYi9MaWIvd3NnaXJlZi92YWxpZGF0ZS5weQppbmRleCAyZGYzZjlmLi4wNWE0ODVkIDEwMDY0NAotLS0gYS9MaWIvd3NnaXJlZi92YWxpZGF0ZS5weQorKysgYi9MaWIvd3NnaXJlZi92YWxpZGF0ZS5weQpAQCAtMTI4LDExICsxMjgsMTAgQEAKICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoKmFyZ3MpCiAKIGRlZiBjaGVja19zdHJpbmdfdHlwZSh2YWx1ZSwgdGl0bGUpOgotICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6CisgICAgaWYgdHlwZSAodmFsdWUpIGlzIHN0cjoKICAgICAgICAgcmV0dXJuIHZhbHVlCi0gICAgYXNzZXJ0IGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKSwgXAotICAgICAgICAiezB9IG11c3QgYmUgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0IChub3QgezF9KSIuZm9ybWF0KHRpdGxlLCB2YWx1ZSkKLSAgICByZXR1cm4gc3RyKHZhbHVlLCAiaXNvLTg4NTktMSIpCisgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCisgICAgICAgICJ7MH0gbXVzdCBiZSBvZiB0eXBlIHN0ciAoZ290IHsxfSkiLmZvcm1hdCh0aXRsZSwgcmVwcih2YWx1ZSkpKQogCiBkZWYgdmFsaWRhdG9yKGFwcGxpY2F0aW9uKToKIApAQCAtMTk3LDIwICsxOTYsMjEgQEAKICAgICBkZWYgcmVhZChzZWxmLCAqYXJncyk6CiAgICAgICAgIGFzc2VydF8obGVuKGFyZ3MpID09IDEpCiAgICAgICAgIHYgPSBzZWxmLmlucHV0LnJlYWQoKmFyZ3MpCi0gICAgICAgIGFzc2VydF8oaXNpbnN0YW5jZSh2LCBieXRlcykpCisgICAgICAgIGFzc2VydF8odHlwZSh2KSBpcyBieXRlcykKICAgICAgICAgcmV0dXJuIHYKIAotICAgIGRlZiByZWFkbGluZShzZWxmKToKLSAgICAgICAgdiA9IHNlbGYuaW5wdXQucmVhZGxpbmUoKQotICAgICAgICBhc3NlcnRfKGlzaW5zdGFuY2UodiwgYnl0ZXMpKQorICAgIGRlZiByZWFkbGluZShzZWxmLCAqYXJncyk6CisgICAgICAgIGFzc2VydF8obGVuKGFyZ3MpIDw9IDEpCisgICAgICAgIHYgPSBzZWxmLmlucHV0LnJlYWRsaW5lKCphcmdzKQorICAgICAgICBhc3NlcnRfKHR5cGUodikgaXMgYnl0ZXMpCiAgICAgICAgIHJldHVybiB2CiAKICAgICBkZWYgcmVhZGxpbmVzKHNlbGYsICphcmdzKToKICAgICAgICAgYXNzZXJ0XyhsZW4oYXJncykgPD0gMSkKICAgICAgICAgbGluZXMgPSBzZWxmLmlucHV0LnJlYWRsaW5lcygqYXJncykKLSAgICAgICAgYXNzZXJ0Xyhpc2luc3RhbmNlKGxpbmVzLCBsaXN0KSkKKyAgICAgICAgYXNzZXJ0Xyh0eXBlKGxpbmVzKSBpcyBsaXN0KQogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGFzc2VydF8oaXNpbnN0YW5jZShsaW5lLCBieXRlcykpCisgICAgICAgICAgICBhc3NlcnRfKHR5cGUobGluZSkgaXMgYnl0ZXMpCiAgICAgICAgIHJldHVybiBsaW5lcwogCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgIHNlbGYuZXJyb3JzID0gd3NnaV9lcnJvcnMKIAogICAgIGRlZiB3cml0ZShzZWxmLCBzKToKLSAgICAgICAgYXNzZXJ0Xyhpc2luc3RhbmNlKHMsIHN0cikpCisgICAgICAgIGFzc2VydF8odHlwZShzKSBpcyBzdHIpCiAgICAgICAgIHNlbGYuZXJyb3JzLndyaXRlKHMpCiAKICAgICBkZWYgZmx1c2goc2VsZik6CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgICAgICAgc2VsZi53cml0ZXIgPSB3c2dpX3dyaXRlcgogCiAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHMpOgotICAgICAgICBhc3NlcnRfKGlzaW5zdGFuY2UocywgKHN0ciwgYnl0ZXMpKSkKKyAgICAgICAgYXNzZXJ0Xyh0eXBlKHMpIGlzIGJ5dGVzKQogICAgICAgICBzZWxmLndyaXRlcihzKQogCiBjbGFzcyBQYXJ0aWFsSXRlcmF0b3JXcmFwcGVyOgpAQCAtMjc1LDYgKzI3NSw4IEBACiAgICAgICAgIGFzc2VydF8obm90IHNlbGYuY2xvc2VkLAogICAgICAgICAgICAgIkl0ZXJhdG9yIHJlYWQgYWZ0ZXIgY2xvc2VkIikKICAgICAgICAgdiA9IG5leHQoc2VsZi5pdGVyYXRvcikKKyAgICAgICAgaWYgdHlwZSh2KSBpcyBub3QgYnl0ZXM6CisgICAgICAgICAgICBhc3NlcnRfKEZhbHNlLCAiSXRlcmF0b3IgeWllbGRlZCBub24tYnl0ZXN0cmluZyAoJXIpIiAlICh2LCkpCiAgICAgICAgIGlmIHNlbGYuY2hlY2tfc3RhcnRfcmVzcG9uc2UgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBhc3NlcnRfKHNlbGYuY2hlY2tfc3RhcnRfcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgIlRoZSBhcHBsaWNhdGlvbiByZXR1cm5zIGFuZCB3ZSBzdGFydGVkIGl0ZXJhdGluZyBvdmVyIGl0cyBib2R5LCBidXQgc3RhcnRfcmVzcG9uc2UgaGFzIG5vdCB5ZXQgYmVlbiBjYWxsZWQiKQpAQCAtMjk0LDcgKzI5Niw3IEBACiAgICAgICAgICAgICAiSXRlcmF0b3IgZ2FyYmFnZSBjb2xsZWN0ZWQgd2l0aG91dCBiZWluZyBjbG9zZWQiKQogCiBkZWYgY2hlY2tfZW52aXJvbihlbnZpcm9uKToKLSAgICBhc3NlcnRfKGlzaW5zdGFuY2UoZW52aXJvbiwgZGljdCksCisgICAgYXNzZXJ0Xyh0eXBlKGVudmlyb24pIGlzIGRpY3QsCiAgICAgICAgICJFbnZpcm9ubWVudCBpcyBub3Qgb2YgdGhlIHJpZ2h0IHR5cGU6ICVyIChlbnZpcm9ubWVudDogJXIpIgogICAgICAgICAlICh0eXBlKGVudmlyb24pLCBlbnZpcm9uKSkKIApAQCAtMzIxLDExICszMjMsMTEgQEAKICAgICAgICAgaWYgJy4nIGluIGtleToKICAgICAgICAgICAgICMgRXh0ZW5zaW9uLCB3ZSBkb24ndCBjYXJlIGFib3V0IGl0cyB0eXBlCiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICBhc3NlcnRfKGlzaW5zdGFuY2UoZW52aXJvbltrZXldLCBzdHIpLAorICAgICAgICBhc3NlcnRfKHR5cGUoZW52aXJvbltrZXldKSBpcyBzdHIsCiAgICAgICAgICAgICAiRW52aXJvbm1lbnRhbCB2YXJpYWJsZSAlcyBpcyBub3QgYSBzdHJpbmc6ICVyICh2YWx1ZTogJXIpIgogICAgICAgICAgICAgJSAoa2V5LCB0eXBlKGVudmlyb25ba2V5XSksIGVudmlyb25ba2V5XSkpCiAKLSAgICBhc3NlcnRfKGlzaW5zdGFuY2UoZW52aXJvblsnd3NnaS52ZXJzaW9uJ10sIHR1cGxlKSwKKyAgICBhc3NlcnRfKHR5cGUoZW52aXJvblsnd3NnaS52ZXJzaW9uJ10pIGlzIHR1cGxlLAogICAgICAgICAid3NnaS52ZXJzaW9uIHNob3VsZCBiZSBhIHR1cGxlICglcikiICUgKGVudmlyb25bJ3dzZ2kudmVyc2lvbiddLCkpCiAgICAgYXNzZXJ0XyhlbnZpcm9uWyd3c2dpLnVybF9zY2hlbWUnXSBpbiAoJ2h0dHAnLCAnaHR0cHMnKSwKICAgICAgICAgIndzZ2kudXJsX3NjaGVtZSB1bmtub3duOiAlciIgJSBlbnZpcm9uWyd3c2dpLnVybF9zY2hlbWUnXSkKQEAgLTM4NSwxMiArMzg3LDEyIEBACiAgICAgICAgICAgICAlIHN0YXR1cywgV1NHSVdhcm5pbmcpCiAKIGRlZiBjaGVja19oZWFkZXJzKGhlYWRlcnMpOgotICAgIGFzc2VydF8oaXNpbnN0YW5jZShoZWFkZXJzLCBsaXN0KSwKKyAgICBhc3NlcnRfKHR5cGUoaGVhZGVycykgaXMgbGlzdCwKICAgICAgICAgIkhlYWRlcnMgKCVyKSBtdXN0IGJlIG9mIHR5cGUgbGlzdDogJXIiCiAgICAgICAgICUgKGhlYWRlcnMsIHR5cGUoaGVhZGVycykpKQogICAgIGhlYWRlcl9uYW1lcyA9IHt9CiAgICAgZm9yIGl0ZW0gaW4gaGVhZGVyczoKLSAgICAgICAgYXNzZXJ0Xyhpc2luc3RhbmNlKGl0ZW0sIHR1cGxlKSwKKyAgICAgICAgYXNzZXJ0Xyh0eXBlKGl0ZW0pIGlzIHR1cGxlLAogICAgICAgICAgICAgIkluZGl2aWR1YWwgaGVhZGVycyAoJXIpIG11c3QgYmUgb2YgdHlwZSB0dXBsZTogJXIiCiAgICAgICAgICAgICAlIChpdGVtLCB0eXBlKGl0ZW0pKSkKICAgICAgICAgYXNzZXJ0XyhsZW4oaXRlbSkgPT0gMikKQEAgLTQyOCwxNCArNDMwLDE0IEBACiAgICAgICAgIGFzc2VydF8oMCwgIk5vIENvbnRlbnQtVHlwZSBoZWFkZXIgZm91bmQgaW4gaGVhZGVycyAoJXMpIiAlIGhlYWRlcnMpCiAKIGRlZiBjaGVja19leGNfaW5mbyhleGNfaW5mbyk6Ci0gICAgYXNzZXJ0XyhleGNfaW5mbyBpcyBOb25lIG9yIGlzaW5zdGFuY2UoZXhjX2luZm8sIHR1cGxlKSwKKyAgICBhc3NlcnRfKGV4Y19pbmZvIGlzIE5vbmUgb3IgdHlwZShleGNfaW5mbykgaXMgdHVwbGUsCiAgICAgICAgICJleGNfaW5mbyAoJXIpIGlzIG5vdCBhIHR1cGxlOiAlciIgJSAoZXhjX2luZm8sIHR5cGUoZXhjX2luZm8pKSkKICAgICAjIE1vcmUgZXhjX2luZm8gY2hlY2tzPwogCiBkZWYgY2hlY2tfaXRlcmF0b3IoaXRlcmF0b3IpOgotICAgICMgVGVjaG5pY2FsbHkgYSBzdHJpbmcgaXMgbGVnYWwsIHdoaWNoIGlzIHdoeSBpdCdzIGEgcmVhbGx5IGJhZAorICAgICMgVGVjaG5pY2FsbHkgYSBieXRlc3RyaW5nIGlzIGxlZ2FsLCB3aGljaCBpcyB3aHkgaXQncyBhIHJlYWxseSBiYWQKICAgICAjIGlkZWEsIGJlY2F1c2UgaXQgbWF5IGNhdXNlIHRoZSByZXNwb25zZSB0byBiZSByZXR1cm5lZAogICAgICMgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlcgogICAgIGFzc2VydF8obm90IGlzaW5zdGFuY2UoaXRlcmF0b3IsIChzdHIsIGJ5dGVzKSksCiAgICAgICAgICJZb3Ugc2hvdWxkIG5vdCByZXR1cm4gYSBzdHJpbmcgYXMgeW91ciBhcHBsaWNhdGlvbiBpdGVyYXRvciwgIgotICAgICAgICAiaW5zdGVhZCByZXR1cm4gYSBzaW5nbGUtaXRlbSBsaXN0IGNvbnRhaW5pbmcgdGhhdCBzdHJpbmcuIikKKyAgICAgICAgImluc3RlYWQgcmV0dXJuIGEgc2luZ2xlLWl0ZW0gbGlzdCBjb250YWluaW5nIGEgYnl0ZXN0cmluZy4iKQpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vbWluaWRvbS5weSBiL0xpYi94bWwvZG9tL21pbmlkb20ucHkKaW5kZXggZDljMDRkNC4uMjE4YzYyZSAxMDA2NDQKLS0tIGEvTGliL3htbC9kb20vbWluaWRvbS5weQorKysgYi9MaWIveG1sL2RvbS9taW5pZG9tLnB5CkBAIC0yNjgsNiArMjY4LDE0IEBACiAgICAgICAgIHNlbGYucHJldmlvdXNTaWJsaW5nID0gTm9uZQogICAgICAgICBzZWxmLm5leHRTaWJsaW5nID0gTm9uZQogCisgICAgIyBBIE5vZGUgaXMgaXRzIG93biBjb250ZXh0IG1hbmFnZXIsIHRvIGVuc3VyZSB0aGF0IGFuIHVubGluaygpIGNhbGwgb2NjdXJzLgorICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBhIGZpbGUgb2JqZWN0IHdvcmtzLgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXQsIGV2LCB0Yik6CisgICAgICAgIHNlbGYudW5saW5rKCkKKwogZGVmcHJvcGVydHkoTm9kZSwgImZpcnN0Q2hpbGQiLCBkb2M9IkZpcnN0IGNoaWxkIG5vZGUsIG9yIE5vbmUuIikKIGRlZnByb3BlcnR5KE5vZGUsICJsYXN0Q2hpbGQiLCAgZG9jPSJMYXN0IGNoaWxkIG5vZGUsIG9yIE5vbmUuIikKIGRlZnByb3BlcnR5KE5vZGUsICJsb2NhbE5hbWUiLCAgZG9jPSJOYW1lc3BhY2UtbG9jYWwgbmFtZSBvZiB0aGlzIG5vZGUuIikKQEAgLTkxMyw2ICs5MjEsMTAgQEAKICAgICAgICAgcmFpc2UgeG1sLmRvbS5Ob3RGb3VuZEVycigKICAgICAgICAgICAgIHNlbGYubm9kZU5hbWUgKyAiIG5vZGVzIGRvIG5vdCBoYXZlIGNoaWxkcmVuIikKIAorICAgIGRlZiBub3JtYWxpemUoc2VsZik6CisgICAgICAgICMgRm9yIGNoaWxkbGVzcyBub2Rlcywgbm9ybWFsaXplKCkgaGFzIG5vdGhpbmcgdG8gZG8uCisgICAgICAgIHBhc3MKKwogICAgIGRlZiByZXBsYWNlQ2hpbGQoc2VsZiwgbmV3Q2hpbGQsIG9sZENoaWxkKToKICAgICAgICAgcmFpc2UgeG1sLmRvbS5IaWVyYXJjaHlSZXF1ZXN0RXJyKAogICAgICAgICAgICAgc2VsZi5ub2RlTmFtZSArICIgbm9kZXMgZG8gbm90IGhhdmUgY2hpbGRyZW4iKQpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggZDdmODViMy4uODRmZDc1NCAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC0xLDYgKzEsNiBAQAogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRJbmNsdWRlLnB5IDE4NjIgMjAwNC0wNi0xOCAwNzozMTowMlogRnJlZHJpayAkCisjICRJZDogRWxlbWVudEluY2x1ZGUucHkgMzM3NSAyMDA4LTAyLTEzIDA4OjA1OjA4WiBmcmVkcmlrICQKICMKICMgbGltaXRlZCB4aW5jbHVkZSBzdXBwb3J0IGZvciBlbGVtZW50IHRyZWVzCiAjCkBAIC0xNiw3ICsxNiw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IGJ5IEZyZWRyaWsgTHVuZGgKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaAogIwogIyBCeSBvYnRhaW5pbmcsIHVzaW5nLCBhbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZC9vciBpdHMKICMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLApAQCAtNDIsNyArNDIsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogCiAjIwogIyBMaW1pdGVkIFhJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFbGVtZW50VHJlZSBwYWNrYWdlLgpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgaWYgaToKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGVsZW1baS0xXQotICAgICAgICAgICAgICAgICAgICBub2RlLnRhaWwgPSAobm9kZS50YWlsIG9yICIiKSArIHRleHQKKyAgICAgICAgICAgICAgICAgICAgbm9kZS50YWlsID0gKG5vZGUudGFpbCBvciAiIikgKyB0ZXh0ICsgKGUudGFpbCBvciAiIikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBlbGVtLnRleHQgPSAoZWxlbS50ZXh0IG9yICIiKSArIHRleHQgKyAoZS50YWlsIG9yICIiKQogICAgICAgICAgICAgICAgIGRlbCBlbGVtW2ldCmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQppbmRleCAwMGRiZTlkLi41MmU2NWYwIDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKQEAgLTEsNiArMSw2IEBACiAjCiAjIEVsZW1lbnRUcmVlCi0jICRJZDogRWxlbWVudFBhdGgucHkgMTg1OCAyMDA0LTA2LTE3IDIxOjMxOjQxWiBGcmVkcmlrICQKKyMgJElkOiBFbGVtZW50UGF0aC5weSAzMzc1IDIwMDgtMDItMTMgMDg6MDU6MDhaIGZyZWRyaWsgJAogIwogIyBsaW1pdGVkIHhwYXRoIHN1cHBvcnQgZm9yIGVsZW1lbnQgdHJlZXMKICMKQEAgLTgsOCArOCwxMyBAQAogIyAyMDAzLTA1LTIzIGZsICAgY3JlYXRlZAogIyAyMDAzLTA1LTI4IGZsICAgYWRkZWQgc3VwcG9ydCBmb3IgLy8gZXRjCiAjIDIwMDMtMDgtMjcgZmwgICBmaXhlZCBwYXJzaW5nIG9mIHBlcmlvZHMgaW4gZWxlbWVudCBuYW1lcworIyAyMDA3LTA5LTEwIGZsICAgbmV3IHNlbGVjdGlvbiBlbmdpbmUKKyMgMjAwNy0wOS0xMiBmbCAgIGZpeGVkIHBhcmVudCBzZWxlY3RvcgorIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcmZpbmQ7IGNoYW5nZWQgZmluZGFsbCB0byByZXR1cm4gYSBsaXN0CisjIDIwMDctMTEtMzAgZmwgICBhZGRlZCBuYW1lc3BhY2VzIHN1cHBvcnQKKyMgMjAwOS0xMC0zMCBmbCAgIGFkZGVkIGNoaWxkIGVsZW1lbnQgdmFsdWUgZmlsdGVyCiAjCi0jIENvcHlyaWdodCAoYykgMjAwMy0yMDA0IGJ5IEZyZWRyaWsgTHVuZGguICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgZnJlZHJpa0BweXRob253YXJlLmNvbQogIyBodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tCkBAIC0xNyw3ICsyMiw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRoZSBFbGVtZW50VHJlZSB0b29sa2l0IGlzCiAjCi0jIENvcHlyaWdodCAoYykgMTk5OS0yMDA0IGJ5IEZyZWRyaWsgTHVuZGgKKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDkgYnkgRnJlZHJpayBMdW5kaAogIwogIyBCeSBvYnRhaW5pbmcsIHVzaW5nLCBhbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZC9vciBpdHMKICMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLApAQCAtNDMsNyArNDgsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogCiAjIwogIyBJbXBsZW1lbnRhdGlvbiBtb2R1bGUgZm9yIFhQYXRoIHN1cHBvcnQuICBUaGVyZSdzIHVzdWFsbHkgbm8gcmVhc29uCkBAIC01MywxNDYgKzU4LDI0NiBAQAogCiBpbXBvcnQgcmUKIAoteHBhdGhfdG9rZW5pemVyID0gcmUuY29tcGlsZSgKLSAgICAiKDo6fFwuXC58XChcKXxbLy4qOlxbXF1cKFwpQD1dKXwoKD86XHtbXn1dK1x9KT9bXi86XFtcXVwoXClAPVxzXSspfFxzKyIKLSAgICApLmZpbmRhbGwKK3hwYXRoX3Rva2VuaXplcl9yZSA9IHJlLmNvbXBpbGUoCisgICAgIigiCisgICAgIidbXiddKid8XCJbXlwiXSpcInwiCisgICAgIjo6fCIKKyAgICAiLy8/fCIKKyAgICAiXC5cLnwiCisgICAgIlwoXCl8IgorICAgICJbLy4qOlxbXF1cKFwpQD1dKXwiCisgICAgIigoPzpce1tefV0rXH0pP1teL1xbXF1cKFwpQD1cc10rKXwiCisgICAgIlxzKyIKKyAgICApCiAKLWNsYXNzIHhwYXRoX2Rlc2NlbmRhbnRfb3Jfc2VsZjoKLSAgICBwYXNzCi0KLSMjCi0jIFdyYXBwZXIgZm9yIGEgY29tcGlsZWQgWFBhdGguCi0KLWNsYXNzIFBhdGg6Ci0KLSAgICAjIwotICAgICMgQ3JlYXRlIGFuIFBhdGggaW5zdGFuY2UgZnJvbSBhbiBYUGF0aCBleHByZXNzaW9uLgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgotICAgICAgICB0b2tlbnMgPSB4cGF0aF90b2tlbml6ZXIocGF0aCkKLSAgICAgICAgIyB0aGUgY3VycmVudCB2ZXJzaW9uIHN1cHBvcnRzICdwYXRoL3BhdGgnLXN0eWxlIGV4cHJlc3Npb25zIG9ubHkKLSAgICAgICAgc2VsZi5wYXRoID0gW10KLSAgICAgICAgc2VsZi50YWcgPSBOb25lCi0gICAgICAgIGlmIHRva2VucyBhbmQgdG9rZW5zWzBdWzBdID09ICIvIjoKLSAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudCIpCi0gICAgICAgIHdoaWxlIHRva2VuczoKLSAgICAgICAgICAgIG9wLCB0YWcgPSB0b2tlbnMucG9wKDApCi0gICAgICAgICAgICBpZiB0YWcgb3Igb3AgPT0gIioiOgotICAgICAgICAgICAgICAgIHNlbGYucGF0aC5hcHBlbmQodGFnIG9yIG9wKQotICAgICAgICAgICAgZWxpZiBvcCA9PSAiLiI6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxpZiBvcCA9PSAiLyI6Ci0gICAgICAgICAgICAgICAgc2VsZi5wYXRoLmFwcGVuZCh4cGF0aF9kZXNjZW5kYW50X29yX3NlbGYoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgcGF0aCBzeW50YXggKCVzKSIgJSBvcCkKLSAgICAgICAgICAgIGlmIHRva2VuczoKLSAgICAgICAgICAgICAgICBvcCwgdGFnID0gdG9rZW5zLnBvcCgwKQotICAgICAgICAgICAgICAgIGlmIG9wICE9ICIvIjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgcGF0aCBzZXBhcmF0b3IgKCVzKSIgJSAob3Agb3IgdGFnKQotICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICBpZiBzZWxmLnBhdGggYW5kIGlzaW5zdGFuY2Uoc2VsZi5wYXRoWy0xXSwgeHBhdGhfZGVzY2VuZGFudF9vcl9zZWxmKToKLSAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJwYXRoIGNhbm5vdCBlbmQgd2l0aCAvLyIpCi0gICAgICAgIGlmIGxlbihzZWxmLnBhdGgpID09IDEgYW5kIGlzaW5zdGFuY2Uoc2VsZi5wYXRoWzBdLCB0eXBlKCIiKSk6Ci0gICAgICAgICAgICBzZWxmLnRhZyA9IHNlbGYucGF0aFswXQotCi0gICAgIyMKLSAgICAjIEZpbmQgZmlyc3QgbWF0Y2hpbmcgb2JqZWN0LgotCi0gICAgZGVmIGZpbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHRhZyA9IHNlbGYudGFnCi0gICAgICAgIGlmIHRhZyBpcyBOb25lOgotICAgICAgICAgICAgbm9kZXNldCA9IHNlbGYuZmluZGFsbChlbGVtZW50KQotICAgICAgICAgICAgaWYgbm90IG5vZGVzZXQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJldHVybiBub2Rlc2V0WzBdCi0gICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6Ci0gICAgICAgICAgICBpZiBlbGVtLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0KLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICMjCi0gICAgIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KLQotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBlbGVtZW50LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICB0YWcgPSBzZWxmLnRhZwotICAgICAgICBpZiB0YWcgaXMgTm9uZToKLSAgICAgICAgICAgIG5vZGVzZXQgPSBzZWxmLmZpbmRhbGwoZWxlbWVudCkKLSAgICAgICAgICAgIGlmIG5vdCBub2Rlc2V0OgotICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Ci0gICAgICAgICAgICByZXR1cm4gbm9kZXNldFswXS50ZXh0IG9yICIiCi0gICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnQ6Ci0gICAgICAgICAgICBpZiBlbGVtLnRhZyA9PSB0YWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW0udGV4dCBvciAiIgotICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgIyMKLSAgICAjIEZpbmQgYWxsIG1hdGNoaW5nIG9iamVjdHMuCi0KLSAgICBkZWYgZmluZGFsbChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgbm9kZXNldCA9IFtlbGVtZW50XQotICAgICAgICBpbmRleCA9IDAKLSAgICAgICAgd2hpbGUgMToKK2RlZiB4cGF0aF90b2tlbml6ZXIocGF0dGVybiwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICBmb3IgdG9rZW4gaW4geHBhdGhfdG9rZW5pemVyX3JlLmZpbmRhbGwocGF0dGVybik6CisgICAgICAgIHRhZyA9IHRva2VuWzFdCisgICAgICAgIGlmIHRhZyBhbmQgdGFnWzBdICE9ICJ7IiBhbmQgIjoiIGluIHRhZzoKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5wYXRoW2luZGV4XQotICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXggKyAxCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbm9kZXNldAotICAgICAgICAgICAgc2V0ID0gW10KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgeHBhdGhfZGVzY2VuZGFudF9vcl9zZWxmKToKKyAgICAgICAgICAgICAgICBwcmVmaXgsIHVyaSA9IHRhZy5zcGxpdCgiOiIsIDEpCisgICAgICAgICAgICAgICAgaWYgbm90IG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCisgICAgICAgICAgICAgICAgeWllbGQgdG9rZW5bMF0sICJ7JXN9JXMiICUgKG5hbWVzcGFjZXNbcHJlZml4XSwgdXJpKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJwcmVmaXggJXIgbm90IGZvdW5kIGluIHByZWZpeCBtYXAiICUgcHJlZml4KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgdG9rZW4KKworZGVmIGdldF9wYXJlbnRfbWFwKGNvbnRleHQpOgorICAgIHBhcmVudF9tYXAgPSBjb250ZXh0LnBhcmVudF9tYXAKKyAgICBpZiBwYXJlbnRfbWFwIGlzIE5vbmU6CisgICAgICAgIGNvbnRleHQucGFyZW50X21hcCA9IHBhcmVudF9tYXAgPSB7fQorICAgICAgICBmb3IgcCBpbiBjb250ZXh0LnJvb3QuaXRlcigpOgorICAgICAgICAgICAgZm9yIGUgaW4gcDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfbWFwW2VdID0gcAorICAgIHJldHVybiBwYXJlbnRfbWFwCisKK2RlZiBwcmVwYXJlX2NoaWxkKG5leHQsIHRva2VuKToKKyAgICB0YWcgPSB0b2tlblsxXQorICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICBpZiBlLnRhZyA9PSB0YWc6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX3N0YXIobmV4dCwgdG9rZW4pOgorICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICB5aWVsZCBlCisgICAgcmV0dXJuIHNlbGVjdAorCitkZWYgcHJlcGFyZV9zZWxmKG5leHQsIHRva2VuKToKKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX2Rlc2NlbmRhbnQobmV4dCwgdG9rZW4pOgorICAgIHRva2VuID0gbmV4dCgpCisgICAgaWYgdG9rZW5bMF0gPT0gIioiOgorICAgICAgICB0YWcgPSAiKiIKKyAgICBlbGlmIG5vdCB0b2tlblswXToKKyAgICAgICAgdGFnID0gdG9rZW5bMV0KKyAgICBlbHNlOgorICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiaW52YWxpZCBkZXNjZW5kYW50IikKKyAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGZvciBlIGluIGVsZW0uaXRlcih0YWcpOgorICAgICAgICAgICAgICAgIGlmIGUgaXMgbm90IGVsZW06CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICByZXR1cm4gc2VsZWN0CisKK2RlZiBwcmVwYXJlX3BhcmVudChuZXh0LCB0b2tlbik6CisgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAjIEZJWE1FOiByYWlzZSBlcnJvciBpZiAuLiBpcyBhcHBsaWVkIGF0IHRvcGxldmVsPworICAgICAgICBwYXJlbnRfbWFwID0gZ2V0X3BhcmVudF9tYXAoY29udGV4dCkKKyAgICAgICAgcmVzdWx0X21hcCA9IHt9CisgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgIGlmIGVsZW0gaW4gcGFyZW50X21hcDoKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnRfbWFwW2VsZW1dCisgICAgICAgICAgICAgICAgaWYgcGFyZW50IG5vdCBpbiByZXN1bHRfbWFwOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfbWFwW3BhcmVudF0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHBhcmVudAorICAgIHJldHVybiBzZWxlY3QKKworZGVmIHByZXBhcmVfcHJlZGljYXRlKG5leHQsIHRva2VuKToKKyAgICAjIEZJWE1FOiByZXBsYWNlIHdpdGggcmVhbCBwYXJzZXIhISEgcmVmczoKKyAgICAjIGh0dHA6Ly9lZmZib3Qub3JnL3pvbmUvc2ltcGxlLWl0ZXJhdG9yLXBhcnNlci5odG0KKyAgICAjIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vdGRvcC90ZG9wLmh0bWwKKyAgICBzaWduYXR1cmUgPSBbXQorICAgIHByZWRpY2F0ZSA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgaWYgdG9rZW5bMF0gPT0gIl0iOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgdG9rZW5bMF0gYW5kIHRva2VuWzBdWzoxXSBpbiAiJ1wiIjoKKyAgICAgICAgICAgIHRva2VuID0gIiciLCB0b2tlblswXVsxOi0xXQorICAgICAgICBzaWduYXR1cmUuYXBwZW5kKHRva2VuWzBdIG9yICItIikKKyAgICAgICAgcHJlZGljYXRlLmFwcGVuZCh0b2tlblsxXSkKKyAgICBzaWduYXR1cmUgPSAiIi5qb2luKHNpZ25hdHVyZSkKKyAgICAjIHVzZSBzaWduYXR1cmUgdG8gZGV0ZXJtaW5lIHByZWRpY2F0ZSB0eXBlCisgICAgaWYgc2lnbmF0dXJlID09ICJALSI6CisgICAgICAgICMgW0BhdHRyaWJ1dGVdIHByZWRpY2F0ZQorICAgICAgICBrZXkgPSBwcmVkaWNhdGVbMV0KKyAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIGlmIHNpZ25hdHVyZSA9PSAiQC09JyI6CisgICAgICAgICMgW0BhdHRyaWJ1dGU9J3ZhbHVlJ10KKyAgICAgICAga2V5ID0gcHJlZGljYXRlWzFdCisgICAgICAgIHZhbHVlID0gcHJlZGljYXRlWy0xXQorICAgICAgICBkZWYgc2VsZWN0KGNvbnRleHQsIHJlc3VsdCk6CisgICAgICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6CisgICAgICAgICAgICAgICAgaWYgZWxlbS5nZXQoa2V5KSA9PSB2YWx1ZToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICByZXR1cm4gc2VsZWN0CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICAgICAgIyBbdGFnXQorICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KKyAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGVsZW0uZmluZCh0YWcpIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHJldHVybiBzZWxlY3QKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgICAgICMgW3RhZz0ndmFsdWUnXQorICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KKyAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIGZvciBlbGVtIGluIHJlc3VsdDoKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtLmZpbmRhbGwodGFnKToKKyAgICAgICAgICAgICAgICAgICAgaWYgIiIuam9pbihlLml0ZXJ0ZXh0KCkpID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgZWxlbQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIHNlbGVjdAorICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgb3Igc2lnbmF0dXJlID09ICItKCkiIG9yIHNpZ25hdHVyZSA9PSAiLSgpLSI6CisgICAgICAgICMgW2luZGV4XSBvciBbbGFzdCgpXSBvciBbbGFzdCgpLWluZGV4XQorICAgICAgICBpZiBzaWduYXR1cmUgPT0gIi0iOgorICAgICAgICAgICAgaW5kZXggPSBpbnQocHJlZGljYXRlWzBdKSAtIDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHByZWRpY2F0ZVswXSAhPSAibGFzdCI6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoInVuc3VwcG9ydGVkIGZ1bmN0aW9uIikKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSgpLSI6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0YWcgPSBzZWxmLnBhdGhbaW5kZXhdCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHRhZywgdHlwZSgiIikpOgotICAgICAgICAgICAgICAgICAgICAgICAgdGFnID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSAgICAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgdGFnID0gTm9uZSAjIGludmFsaWQgcGF0aAotICAgICAgICAgICAgICAgIGZvciBub2RlIGluIG5vZGVzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIG5ldyA9IGxpc3Qobm9kZS5nZXRpdGVyYXRvcih0YWcpKQotICAgICAgICAgICAgICAgICAgICBpZiBuZXcgYW5kIG5ld1swXSBpcyBub2RlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmV4dGVuZChuZXdbMTpdKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmV4dGVuZChuZXcpCisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXNldDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gbm9kZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhdGggPT0gIioiIG9yIG5vZGUudGFnID09IHBhdGg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmFwcGVuZChub2RlKQotICAgICAgICAgICAgaWYgbm90IHNldDoKLSAgICAgICAgICAgICAgICByZXR1cm4gW10KLSAgICAgICAgICAgIG5vZGVzZXQgPSBzZXQKKyAgICAgICAgICAgICAgICBpbmRleCA9IC0xCisgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKKyAgICAgICAgICAgIHBhcmVudF9tYXAgPSBnZXRfcGFyZW50X21hcChjb250ZXh0KQorICAgICAgICAgICAgZm9yIGVsZW0gaW4gcmVzdWx0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50X21hcFtlbGVtXQorICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiB3aGF0IGlmIHRoZSBzZWxlY3RvciBpcyAiKiIgPworICAgICAgICAgICAgICAgICAgICBlbGVtcyA9IGxpc3QocGFyZW50LmZpbmRhbGwoZWxlbS50YWcpKQorICAgICAgICAgICAgICAgICAgICBpZiBlbGVtc1tpbmRleF0gaXMgZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIEtleUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gc2VsZWN0CisgICAgcmFpc2UgU3ludGF4RXJyb3IoImludmFsaWQgcHJlZGljYXRlIikKKworb3BzID0geworICAgICIiOiBwcmVwYXJlX2NoaWxkLAorICAgICIqIjogcHJlcGFyZV9zdGFyLAorICAgICIuIjogcHJlcGFyZV9zZWxmLAorICAgICIuLiI6IHByZXBhcmVfcGFyZW50LAorICAgICIvLyI6IHByZXBhcmVfZGVzY2VuZGFudCwKKyAgICAiWyI6IHByZXBhcmVfcHJlZGljYXRlLAorICAgIH0KIAogX2NhY2hlID0ge30KIAotIyMKLSMgKEludGVybmFsKSBDb21waWxlIHBhdGguCitjbGFzcyBfU2VsZWN0b3JDb250ZXh0OgorICAgIHBhcmVudF9tYXAgPSBOb25lCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QpOgorICAgICAgICBzZWxmLnJvb3QgPSByb290CiAKLWRlZiBfY29tcGlsZShwYXRoKToKLSAgICBwID0gX2NhY2hlLmdldChwYXRoKQotICAgIGlmIHAgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBwCi0gICAgcCA9IFBhdGgocGF0aCkKLSAgICBpZiBsZW4oX2NhY2hlKSA+PSAxMDA6Ci0gICAgICAgIF9jYWNoZS5jbGVhcigpCi0gICAgX2NhY2hlW3BhdGhdID0gcAotICAgIHJldHVybiBwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMjCisjIEdlbmVyYXRlIGFsbCBtYXRjaGluZyBvYmplY3RzLgorCitkZWYgaXRlcmZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAjIGNvbXBpbGUgc2VsZWN0b3IgcGF0dGVybgorICAgIGlmIHBhdGhbLTE6XSA9PSAiLyI6CisgICAgICAgIHBhdGggPSBwYXRoICsgIioiICMgaW1wbGljaXQgYWxsIChGSVhNRToga2VlcCB0aGlzPykKKyAgICB0cnk6CisgICAgICAgIHNlbGVjdG9yID0gX2NhY2hlW3BhdGhdCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDoKKyAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCisgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKKyAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJjYW5ub3QgdXNlIGFic29sdXRlIHBhdGggb24gZWxlbWVudCIpCisgICAgICAgIG5leHQgPSBpdGVyKHhwYXRoX3Rva2VuaXplcihwYXRoLCBuYW1lc3BhY2VzKSkuX19uZXh0X18KKyAgICAgICAgdG9rZW4gPSBuZXh0KCkKKyAgICAgICAgc2VsZWN0b3IgPSBbXQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGVjdG9yLmFwcGVuZChvcHNbdG9rZW5bMF1dKG5leHQsIHRva2VuKSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJpbnZhbGlkIHBhdGgiKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRva2VuID0gbmV4dCgpCisgICAgICAgICAgICAgICAgaWYgdG9rZW5bMF0gPT0gIi8iOgorICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG5leHQoKQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgX2NhY2hlW3BhdGhdID0gc2VsZWN0b3IKKyAgICAjIGV4ZWN1dGUgc2VsZWN0b3IgcGF0dGVybgorICAgIHJlc3VsdCA9IFtlbGVtXQorICAgIGNvbnRleHQgPSBfU2VsZWN0b3JDb250ZXh0KGVsZW0pCisgICAgZm9yIHNlbGVjdCBpbiBzZWxlY3RvcjoKKyAgICAgICAgcmVzdWx0ID0gc2VsZWN0KGNvbnRleHQsIHJlc3VsdCkKKyAgICByZXR1cm4gcmVzdWx0CiAKICMjCiAjIEZpbmQgZmlyc3QgbWF0Y2hpbmcgb2JqZWN0LgogCi1kZWYgZmluZChlbGVtZW50LCBwYXRoKToKLSAgICByZXR1cm4gX2NvbXBpbGUocGF0aCkuZmluZChlbGVtZW50KQotCi0jIwotIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KLQotZGVmIGZpbmR0ZXh0KGVsZW1lbnQsIHBhdGgsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgcmV0dXJuIF9jb21waWxlKHBhdGgpLmZpbmR0ZXh0KGVsZW1lbnQsIGRlZmF1bHQpCitkZWYgZmluZChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG5leHQoaXRlcmZpbmQoZWxlbSwgcGF0aCwgbmFtZXNwYWNlcykpCisgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgIHJldHVybiBOb25lCiAKICMjCiAjIEZpbmQgYWxsIG1hdGNoaW5nIG9iamVjdHMuCiAKLWRlZiBmaW5kYWxsKGVsZW1lbnQsIHBhdGgpOgotICAgIHJldHVybiBfY29tcGlsZShwYXRoKS5maW5kYWxsKGVsZW1lbnQpCitkZWYgZmluZGFsbChlbGVtLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgIHJldHVybiBsaXN0KGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpKQorCisjIworIyBGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIG9iamVjdC4KKworZGVmIGZpbmR0ZXh0KGVsZW0sIHBhdGgsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICB0cnk6CisgICAgICAgIGVsZW0gPSBuZXh0KGl0ZXJmaW5kKGVsZW0sIHBhdGgsIG5hbWVzcGFjZXMpKQorICAgICAgICByZXR1cm4gZWxlbS50ZXh0IG9yICIiCisgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgIHJldHVybiBkZWZhdWx0CmRpZmYgLS1naXQgYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5IGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQppbmRleCBjNDc1NzNlLi5iYTMzODc5IDEwMDY0NAotLS0gYS9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CisrKyBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKQEAgLTEsNDAgKzEsMjQgQEAKICMKICMgRWxlbWVudFRyZWUKLSMgJElkOiBFbGVtZW50VHJlZS5weSAyMzI2IDIwMDUtMDMtMTcgMDc6NDU6MjFaIGZyZWRyaWsgJAorIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDM0NDAgMjAwOC0wNy0xOCAxNDo0NTowMVogZnJlZHJpayAkCiAjCi0jIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDEuNS4yIGFuZCBsYXRlci4KKyMgbGlnaHQtd2VpZ2h0IFhNTCBzdXBwb3J0IGZvciBQeXRob24gMi4zIGFuZCBsYXRlci4KICMKLSMgaGlzdG9yeToKLSMgMjAwMS0xMC0yMCBmbCAgIGNyZWF0ZWQgKGZyb20gdmFyaW91cyBzb3VyY2VzKQotIyAyMDAxLTExLTAxIGZsICAgcmV0dXJuIHJvb3QgZnJvbSBwYXJzZSBtZXRob2QKLSMgMjAwMi0wMi0xNiBmbCAgIHNvcnQgYXR0cmlidXRlcyBpbiBsZXhpY2FsIG9yZGVyCi0jIDIwMDItMDQtMDYgZmwgICBUcmVlQnVpbGRlciByZWZhY3RvcmluZywgYWRkZWQgUHl0aG9uRG9jIG1hcmt1cAotIyAyMDAyLTA1LTAxIGZsICAgZmluaXNoZWQgVHJlZUJ1aWxkZXIgcmVmYWN0b3JpbmcKLSMgMjAwMi0wNy0xNCBmbCAgIGFkZGVkIGJhc2ljIG5hbWVzcGFjZSBzdXBwb3J0IHRvIEVsZW1lbnRUcmVlLndyaXRlCi0jIDIwMDItMDctMjUgZmwgICBhZGRlZCBRTmFtZSBhdHRyaWJ1dGUgc3VwcG9ydAotIyAyMDAyLTEwLTIwIGZsICAgZml4ZWQgZW5jb2RpbmcgaW4gd3JpdGUKLSMgMjAwMi0xMS0yNCBmbCAgIGNoYW5nZWQgZGVmYXVsdCBlbmNvZGluZyB0byBhc2NpaTsgZml4ZWQgYXR0cmlidXRlIGVuY29kaW5nCi0jIDIwMDItMTEtMjcgZmwgICBhY2NlcHQgZmlsZSBvYmplY3RzIG9yIGZpbGUgbmFtZXMgZm9yIHBhcnNlL3dyaXRlCi0jIDIwMDItMTItMDQgZmwgICBtb3ZlZCBYTUxUcmVlQnVpbGRlciBiYWNrIHRvIHRoaXMgbW9kdWxlCi0jIDIwMDMtMDEtMTEgZmwgICBmaXhlZCBlbnRpdHkgZW5jb2RpbmcgZ2xpdGNoIGZvciB1cy1hc2NpaQotIyAyMDAzLTAyLTEzIGZsICAgYWRkZWQgWE1MIGxpdGVyYWwgZmFjdG9yeQotIyAyMDAzLTAyLTIxIGZsICAgYWRkZWQgUHJvY2Vzc2luZ0luc3RydWN0aW9uL1BJIGZhY3RvcnkKLSMgMjAwMy0wNS0xMSBmbCAgIGFkZGVkIHRvc3RyaW5nL2Zyb21zdHJpbmcgaGVscGVycwotIyAyMDAzLTA1LTI2IGZsICAgYWRkZWQgRWxlbWVudFBhdGggc3VwcG9ydAotIyAyMDAzLTA3LTA1IGZsICAgYWRkZWQgbWFrZWVsZW1lbnQgZmFjdG9yeSBtZXRob2QKLSMgMjAwMy0wNy0yOCBmbCAgIGFkZGVkIG1vcmUgd2VsbC1rbm93biBuYW1lc3BhY2UgcHJlZml4ZXMKLSMgMjAwMy0wOC0xNSBmbCAgIGZpeGVkIHR5cG8gaW4gRWxlbWVudFRyZWUuZmluZHRleHQgKFRob21hcyBEYXJ0c2NoKQotIyAyMDAzLTA5LTA0IGZsICAgZmFsbCBiYWNrIG9uIGVtdWxhdG9yIGlmIEVsZW1lbnRQYXRoIGlzIG5vdCBpbnN0YWxsZWQKLSMgMjAwMy0xMC0zMSBmbCAgIG1hcmt1cCB1cGRhdGVzCi0jIDIwMDMtMTEtMTUgZmwgICBmaXhlZCBuZXN0ZWQgbmFtZXNwYWNlIGJ1ZwotIyAyMDA0LTAzLTI4IGZsICAgYWRkZWQgWE1MSUQgaGVscGVyCi0jIDIwMDQtMDYtMDIgZmwgICBhZGRlZCBkZWZhdWx0IHN1cHBvcnQgdG8gZmluZHRleHQKLSMgMjAwNC0wNi0wOCBmbCAgIGZpeGVkIGVuY29kaW5nIG9mIG5vbi1hc2NpaSBlbGVtZW50L2F0dHJpYnV0ZSBuYW1lcwotIyAyMDA0LTA4LTIzIGZsICAgdGFrZSBhZHZhbnRhZ2Ugb2YgcG9zdC0yLjEgZXhwYXQgZmVhdHVyZXMKLSMgMjAwNS0wMi0wMSBmbCAgIGFkZGVkIGl0ZXJwYXJzZSBpbXBsZW1lbnRhdGlvbgotIyAyMDA1LTAzLTAyIGZsICAgZml4ZWQgaXRlcnBhcnNlIHN1cHBvcnQgZm9yIHByZS0yLjIgdmVyc2lvbnMKKyMgaGlzdG9yeSAoc2luY2UgMS4yLjYpOgorIyAyMDA1LTExLTEyIGZsICAgYWRkZWQgdG9zdHJpbmdsaXN0L2Zyb21zdHJpbmdsaXN0IGhlbHBlcnMKKyMgMjAwNi0wNy0wNSBmbCAgIG1lcmdlZCBpbiBzZWxlY3RlZCBjaGFuZ2VzIGZyb20gdGhlIDEuMyBzYW5kYm94CisjIDIwMDYtMDctMDUgZmwgICByZW1vdmVkIHN1cHBvcnQgZm9yIDIuMSBhbmQgZWFybGllcgorIyAyMDA3LTA2LTIxIGZsICAgYWRkZWQgZGVwcmVjYXRpb24vZnV0dXJlIHdhcm5pbmdzCisjIDIwMDctMDgtMjUgZmwgICBhZGRlZCBkb2N0eXBlIGhvb2ssIGFkZGVkIHBhcnNlciB2ZXJzaW9uIGF0dHJpYnV0ZSBldGMKKyMgMjAwNy0wOC0yNiBmbCAgIGFkZGVkIG5ldyBzZXJpYWxpemVyIGNvZGUgKGJldHRlciBuYW1lc3BhY2UgaGFuZGxpbmcsIGV0YykKKyMgMjAwNy0wOC0yNyBmbCAgIHdhcm4gZm9yIGJyb2tlbiAvdGFnIHNlYXJjaGVzIG9uIHRyZWUgbGV2ZWwKKyMgMjAwNy0wOS0wMiBmbCAgIGFkZGVkIGh0bWwvdGV4dCBtZXRob2RzIHRvIHNlcmlhbGl6ZXIgKGV4cGVyaW1lbnRhbCkKKyMgMjAwNy0wOS0wNSBmbCAgIGFkZGVkIG1ldGhvZCBhcmd1bWVudCB0byB0b3N0cmluZy90b3N0cmluZ2xpc3QKKyMgMjAwNy0wOS0wNiBmbCAgIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nCisjIDIwMDctMDktMTMgZmwgICBhZGRlZCBpdGVydGV4dCwgaXRlcmZpbmQ7IGFzc29ydGVkIGNsZWFudXBzCisjIDIwMDctMTItMTUgZmwgICBhZGRlZCBDMTROIGhvb2tzLCBjb3B5IG1ldGhvZCAoZXhwZXJpbWVudGFsKQogIwotIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBieSBGcmVkcmlrIEx1bmRoLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQpAQCAtNDIsNyArMjYsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwotIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNSBieSBGcmVkcmlrIEx1bmRoCisjIENvcHlyaWdodCAoYykgMTk5OS0yMDA4IGJ5IEZyZWRyaWsgTHVuZGgKICMKICMgQnkgb2J0YWluaW5nLCB1c2luZywgYW5kL29yIGNvcHlpbmcgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgaXRzCiAjIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgeW91IGFncmVlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwKQEAgLTY4LDI1ICs1MiwyOCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjQvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogCiBfX2FsbF9fID0gWwogICAgICMgcHVibGljIHN5bWJvbHMKICAgICAiQ29tbWVudCIsCiAgICAgImR1bXAiLAogICAgICJFbGVtZW50IiwgIkVsZW1lbnRUcmVlIiwKLSAgICAiZnJvbXN0cmluZyIsCisgICAgImZyb21zdHJpbmciLCAiZnJvbXN0cmluZ2xpc3QiLAogICAgICJpc2VsZW1lbnQiLCAiaXRlcnBhcnNlIiwKLSAgICAicGFyc2UiLAorICAgICJwYXJzZSIsICJQYXJzZUVycm9yIiwKICAgICAiUEkiLCAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwKICAgICAiUU5hbWUiLAogICAgICJTdWJFbGVtZW50IiwKLSAgICAidG9zdHJpbmciLAorICAgICJ0b3N0cmluZyIsICJ0b3N0cmluZ2xpc3QiLAogICAgICJUcmVlQnVpbGRlciIsCi0gICAgIlZFUlNJT04iLCAiWE1MIiwKKyAgICAiVkVSU0lPTiIsCisgICAgIlhNTCIsCiAgICAgIlhNTFBhcnNlciIsICJYTUxUcmVlQnVpbGRlciIsCiAgICAgXQogCitWRVJTSU9OID0gIjEuMy4wIgorCiAjIwogIyBUaGUgPGI+RWxlbWVudDwvYj4gdHlwZSBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QsIGRlc2lnbmVkIHRvCiAjIHN0b3JlIGhpZXJhcmNoaWNhbCBkYXRhIHN0cnVjdHVyZXMgaW4gbWVtb3J5LiBUaGUgdHlwZSBjYW4gYmUKQEAgLTEwMiwzNiArODksODYgQEAKICMgPGxpPmEgbnVtYmVyIG9mIDxpPmNoaWxkIGVsZW1lbnRzPC9pPiwgc3RvcmVkIGluIGEgUHl0aG9uIHNlcXVlbmNlPC9saT4KICMgPC91bD4KICMKLSMgVG8gY3JlYXRlIGFuIGVsZW1lbnQgaW5zdGFuY2UsIHVzZSB0aGUge0BsaW5rICNFbGVtZW50fSBvciB7QGxpbmsKLSMgI1N1YkVsZW1lbnR9IGZhY3RvcnkgZnVuY3Rpb25zLgorIyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSB7QGxpbmsgI0VsZW1lbnR9IGNvbnN0cnVjdG9yCisjIG9yIHRoZSB7QGxpbmsgI1N1YkVsZW1lbnR9IGZhY3RvcnkgZnVuY3Rpb24uCiAjIDxwPgogIyBUaGUge0BsaW5rICNFbGVtZW50VHJlZX0gY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhbiBlbGVtZW50CiAjIHN0cnVjdHVyZSwgYW5kIGNvbnZlcnQgaXQgZnJvbSBhbmQgdG8gWE1MLgogIyMKIAotaW1wb3J0IHN5cywgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCByZQoraW1wb3J0IHdhcm5pbmdzCiAKLWZyb20gLiBpbXBvcnQgRWxlbWVudFBhdGgKIAotIyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgY3VzdG9tIG5hbWVzcGFjZSByZXNvbHZlcnMvZGVmYXVsdCBuYW1lc3BhY2VzCi0jIFRPRE86IGFkZCBpbXByb3ZlZCBzdXBwb3J0IGZvciBpbmNyZW1lbnRhbCBwYXJzaW5nCitjbGFzcyBfU2ltcGxlRWxlbWVudFBhdGg6CisgICAgIyBlbXVsYXRlIHByZS0xLjIgZmluZC9maW5kdGV4dC9maW5kYWxsIGJlaGF2aW91cgorICAgIGRlZiBmaW5kKHNlbGYsIGVsZW1lbnQsIHRhZywgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKKyAgICAgICAgICAgIGlmIGVsZW0udGFnID09IHRhZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZWxlbQorICAgICAgICByZXR1cm4gTm9uZQorICAgIGRlZiBmaW5kdGV4dChzZWxmLCBlbGVtZW50LCB0YWcsIGRlZmF1bHQ9Tm9uZSwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgZWxlbSA9IHNlbGYuZmluZChlbGVtZW50LCB0YWcpCisgICAgICAgIGlmIGVsZW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgICAgIHJldHVybiBlbGVtLnRleHQgb3IgIiIKKyAgICBkZWYgaXRlcmZpbmQoc2VsZiwgZWxlbWVudCwgdGFnLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICBpZiB0YWdbOjNdID09ICIuLy8iOgorICAgICAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudC5pdGVyKHRhZ1szOl0pOgorICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KKyAgICAgICAgZm9yIGVsZW0gaW4gZWxlbWVudDoKKyAgICAgICAgICAgIGlmIGVsZW0udGFnID09IHRhZzoKKyAgICAgICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgZGVmIGZpbmRhbGwoc2VsZiwgZWxlbWVudCwgdGFnLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXJmaW5kKGVsZW1lbnQsIHRhZywgbmFtZXNwYWNlcykpCiAKLVZFUlNJT04gPSAiMS4yLjYiCit0cnk6CisgICAgZnJvbSAuIGltcG9ydCBFbGVtZW50UGF0aAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEVsZW1lbnRQYXRoID0gX1NpbXBsZUVsZW1lbnRQYXRoKCkKIAogIyMKLSMgSW50ZXJuYWwgZWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsCi0jIGFuZCBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KKyMgUGFyc2VyIGVycm9yLiAgVGhpcyBpcyBhIHN1YmNsYXNzIG9mIDxiPlN5bnRheEVycm9yPC9iPi4KICMgPHA+Ci0jIFlvdSBzaG91bGQgbm90IGNyZWF0ZSBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBkaXJlY3RseS4gIFVzZSB0aGUKLSMgYXBwcm9wcmlhdGUgZmFjdG9yeSBmdW5jdGlvbnMgaW5zdGVhZCwgc3VjaCBhcyB7QGxpbmsgI0VsZW1lbnR9Ci0jIGFuZCB7QGxpbmsgI1N1YkVsZW1lbnR9LgorIyBJbiBhZGRpdGlvbiB0byB0aGUgZXhjZXB0aW9uIHZhbHVlLCBhbiBleGNlcHRpb24gaW5zdGFuY2UgY29udGFpbnMgYQorIyBzcGVjaWZpYyBleGNlcHRpb24gY29kZSBpbiB0aGUgPGI+Y29kZTwvYj4gYXR0cmlidXRlLCBhbmQgdGhlIGxpbmUgYW5kCisjIGNvbHVtbiBvZiB0aGUgZXJyb3IgaW4gdGhlIDxiPnBvc2l0aW9uPC9iPiBhdHRyaWJ1dGUuCisKK2NsYXNzIFBhcnNlRXJyb3IoU3ludGF4RXJyb3IpOgorICAgIHBhc3MKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIworIyBDaGVja3MgaWYgYW4gb2JqZWN0IGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBlbGVtZW50IG9iamVjdC4KICMKKyMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCisjIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCisjIEBkZWZyZXR1cm4gZmxhZworCitkZWYgaXNlbGVtZW50KGVsZW1lbnQpOgorICAgICMgRklYTUU6IG5vdCBzdXJlIGFib3V0IHRoaXM7IG1pZ2h0IGJlIGEgYmV0dGVyIGlkZWEgdG8gbG9vaworICAgICMgZm9yIHRhZy9hdHRyaWIvdGV4dCBhdHRyaWJ1dGVzCisgICAgcmV0dXJuIGlzaW5zdGFuY2UoZWxlbWVudCwgRWxlbWVudCkgb3IgaGFzYXR0cihlbGVtZW50LCAidGFnIikKKworIyMKKyMgRWxlbWVudCBjbGFzcy4gIFRoaXMgY2xhc3MgZGVmaW5lcyB0aGUgRWxlbWVudCBpbnRlcmZhY2UsIGFuZAorIyBwcm92aWRlcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGludGVyZmFjZS4KKyMgPHA+CisjIFRoZSBlbGVtZW50IG5hbWUsIGF0dHJpYnV0ZSBuYW1lcywgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMgY2FuIGJlCisjIGVpdGhlciBBU0NJSSBzdHJpbmdzIChvcmRpbmFyeSBQeXRob24gc3RyaW5ncyBjb250YWluaW5nIG9ubHkgNy1iaXQKKyMgQVNDSUkgY2hhcmFjdGVycykgb3IgVW5pY29kZSBzdHJpbmdzLgorIworIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCisjIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCisjIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCiAjIEBzZWUgRWxlbWVudAogIyBAc2VlIFN1YkVsZW1lbnQKICMgQHNlZSBDb21tZW50CiAjIEBzZWUgUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKLWNsYXNzIF9FbGVtZW50SW50ZXJmYWNlOgorY2xhc3MgRWxlbWVudDoKICAgICAjIDx0YWcgYXR0cmliPnRleHQ8Y2hpbGQvPi4uLjwvdGFnPnRhaWwKIAogICAgICMjCkBAIC0xNDEsMzQgKzE3OCw0MSBAQAogCiAgICAgIyMKICAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkuICBXaGVyZSBwb3NzaWJsZSwgdXNlCi0gICAgIyB7QGxpbmsgI19FbGVtZW50SW50ZXJmYWNlLmdldH0sCi0gICAgIyB7QGxpbmsgI19FbGVtZW50SW50ZXJmYWNlLnNldH0sCi0gICAgIyB7QGxpbmsgI19FbGVtZW50SW50ZXJmYWNlLmtleXN9LCBhbmQKLSAgICAjIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2UuaXRlbXN9IHRvIGFjY2VzcworICAgICMge0BsaW5rICNFbGVtZW50LmdldH0sCisgICAgIyB7QGxpbmsgI0VsZW1lbnQuc2V0fSwKKyAgICAjIHtAbGluayAjRWxlbWVudC5rZXlzfSwgYW5kCisgICAgIyB7QGxpbmsgI0VsZW1lbnQuaXRlbXN9IHRvIGFjY2VzcwogICAgICMgZWxlbWVudCBhdHRyaWJ1dGVzLgogCiAgICAgYXR0cmliID0gTm9uZQogCiAgICAgIyMKICAgICAjIChBdHRyaWJ1dGUpIFRleHQgYmVmb3JlIGZpcnN0IHN1YmVsZW1lbnQuICBUaGlzIGlzIGVpdGhlciBhCi0gICAgIyBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUsIGlmIHRoZXJlIHdhcyBubyB0ZXh0LgorICAgICMgc3RyaW5nIG9yIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzCisgICAgIyBhdHRyaWJ1dGUgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uCisgICAgIyB0aGUgcGFyc2VyLgogCiAgICAgdGV4dCA9IE5vbmUKIAogICAgICMjCiAgICAgIyAoQXR0cmlidXRlKSBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlCiAgICAgIyBuZXh0IHNpYmxpbmcgZWxlbWVudCdzIHN0YXJ0IHRhZy4gIFRoaXMgaXMgZWl0aGVyIGEgc3RyaW5nIG9yCi0gICAgIyB0aGUgdmFsdWUgTm9uZSwgaWYgdGhlcmUgd2FzIG5vIHRleHQuCisgICAgIyB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcyBhdHRyaWJ1dGUKKyAgICAjIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCiAgICAgdGFpbCA9IE5vbmUgIyB0ZXh0IGFmdGVyIGVuZCB0YWcsIGlmIGFueQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgYXR0cmliKToKKyAgICAjIGNvbnN0cnVjdG9yCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGFnLCBhdHRyaWI9e30sICoqZXh0cmEpOgorICAgICAgICBhdHRyaWIgPSBhdHRyaWIuY29weSgpCisgICAgICAgIGF0dHJpYi51cGRhdGUoZXh0cmEpCiAgICAgICAgIHNlbGYudGFnID0gdGFnCiAgICAgICAgIHNlbGYuYXR0cmliID0gYXR0cmliCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuID0gW10KIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICI8RWxlbWVudCAlcyBhdCAleD4iICUgKHNlbGYudGFnLCBpZChzZWxmKSkKKyAgICAgICAgcmV0dXJuICI8RWxlbWVudCAlcyBhdCAweCV4PiIgJSAocmVwcihzZWxmLnRhZyksIGlkKHNlbGYpKQogCiAgICAgIyMKICAgICAjIENyZWF0ZXMgYSBuZXcgZWxlbWVudCBvYmplY3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGlzIGVsZW1lbnQuCkBAIC0xNzgsMTggKzIyMiw0MSBAQAogICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgogCiAgICAgZGVmIG1ha2VlbGVtZW50KHNlbGYsIHRhZywgYXR0cmliKToKLSAgICAgICAgcmV0dXJuIEVsZW1lbnQodGFnLCBhdHRyaWIpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh0YWcsIGF0dHJpYikKIAogICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuCisgICAgIyAoRXhwZXJpbWVudGFsKSBDb3BpZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gIFRoaXMgY3JlYXRlcyBhCisgICAgIyBzaGFsbG93IGNvcHk7IHN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIHRyZWUuCisgICAgIworICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgorCisgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgIGVsZW0gPSBzZWxmLm1ha2VlbGVtZW50KHNlbGYudGFnLCBzZWxmLmF0dHJpYikKKyAgICAgICAgZWxlbS50ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGVsZW0udGFpbCA9IHNlbGYudGFpbAorICAgICAgICBlbGVtWzpdID0gc2VsZgorICAgICAgICByZXR1cm4gZWxlbQorCisgICAgIyMKKyAgICAjIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIG9ubHkgY291bnRzCisgICAgIyBmdWxsIGVsZW1lbnRzOyB0byBjaGVjayBpZiB0aGVyZSdzIGFueSBjb250ZW50IGluIGFuIGVsZW1lbnQsIHlvdQorICAgICMgaGF2ZSB0byBjaGVjayBib3RoIHRoZSBsZW5ndGggYW5kIHRoZSA8Yj50ZXh0PC9iPiBhdHRyaWJ1dGUuCiAgICAgIwogICAgICMgQHJldHVybiBUaGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgogCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pCiAKKyAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAiVGhlIGJlaGF2aW9yIG9mIHRoaXMgbWV0aG9kIHdpbGwgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKKyAgICAgICAgICAgICJVc2Ugc3BlY2lmaWMgJ2xlbihlbGVtKScgb3IgJ2VsZW0gaXMgbm90IE5vbmUnIHRlc3QgaW5zdGVhZC4iLAorICAgICAgICAgICAgRnV0dXJlV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pICE9IDAgIyBlbXVsYXRlIG9sZCBiZWhhdmlvdXIsIGZvciBub3cKKwogICAgICMjCi0gICAgIyBSZXR1cm5zIHRoZSBnaXZlbiBzdWJlbGVtZW50LgorICAgICMgUmV0dXJucyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCiAgICAgIwogICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXR1cm4uCiAgICAgIyBAcmV0dXJuIFRoZSBnaXZlbiBzdWJlbGVtZW50LgpAQCAtMTk5LDE5ICsyNjYsMjIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCiAgICAgIyMKLSAgICAjIFJlcGxhY2VzIHRoZSBnaXZlbiBzdWJlbGVtZW50LgorICAgICMgUmVwbGFjZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgogICAgICMKICAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmVwbGFjZS4KICAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBuZXcgZWxlbWVudCB2YWx1ZS4KICAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLSAgICAjIEBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IgSWYgZWxlbWVudCBpcyBub3QgYSB2YWxpZCBvYmplY3QuCiAKICAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgorICAgICAgICAjICAgICBmb3IgZWx0IGluIGVsZW1lbnQ6CisgICAgICAgICMgICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsdCkKKyAgICAgICAgIyBlbHNlOgorICAgICAgICAjICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuW2luZGV4XSA9IGVsZW1lbnQKIAogICAgICMjCi0gICAgIyBEZWxldGVzIHRoZSBnaXZlbiBzdWJlbGVtZW50LgorICAgICMgRGVsZXRlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCiAgICAgIwogICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byBkZWxldGUuCiAgICAgIyBAZXhjZXB0aW9uIEluZGV4RXJyb3IgSWYgdGhlIGdpdmVuIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QuCkBAIC0yMjAsMTE4ICsyOTAsMTIxIEBACiAgICAgICAgIGRlbCBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAogICAgICMjCi0gICAgIyBSZXR1cm5zIGEgbGlzdCBjb250YWluaW5nIHN1YmVsZW1lbnRzIGluIHRoZSBnaXZlbiByYW5nZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gc3RhcnQgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdG8gcmV0dXJuLgotICAgICMgQHBhcmFtIHN0b3AgVGhlIGZpcnN0IHN1YmVsZW1lbnQgdGhhdCBzaG91bGRuJ3QgYmUgcmV0dXJuZWQuCi0gICAgIyBAcmV0dXJuIEEgc2VxdWVuY2Ugb2JqZWN0IGNvbnRhaW5pbmcgc3ViZWxlbWVudHMuCi0KLSAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX2NoaWxkcmVuW3N0YXJ0OnN0b3BdCi0KLSAgICAjIwotICAgICMgUmVwbGFjZXMgYSBudW1iZXIgb2Ygc3ViZWxlbWVudHMgd2l0aCBlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCi0gICAgIwotICAgICMgQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBzdWJlbGVtZW50IHRvIHJlcGxhY2UuCi0gICAgIyBAcGFyYW0gc3RvcCBUaGUgZmlyc3Qgc3ViZWxlbWVudCB0aGF0IHNob3VsZG4ndCBiZSByZXBsYWNlZC4KLSAgICAjIEBwYXJhbSBlbGVtZW50cyBBIHNlcXVlbmNlIG9iamVjdCB3aXRoIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KLSAgICAjIEBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IgSWYgYSBzZXF1ZW5jZSBtZW1iZXIgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgotCi0gICAgZGVmIF9fc2V0c2xpY2VfXyhzZWxmLCBzdGFydCwgc3RvcCwgZWxlbWVudHMpOgotICAgICAgICBmb3IgZWxlbWVudCBpbiBlbGVtZW50czoKLSAgICAgICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW5bc3RhcnQ6c3RvcF0gPSBsaXN0KGVsZW1lbnRzKQotCi0gICAgIyMKLSAgICAjIERlbGV0ZXMgYSBudW1iZXIgb2Ygc3ViZWxlbWVudHMuCi0gICAgIwotICAgICMgQHBhcmFtIHN0YXJ0IFRoZSBmaXJzdCBzdWJlbGVtZW50IHRvIGRlbGV0ZS4KLSAgICAjIEBwYXJhbSBzdG9wIFRoZSBmaXJzdCBzdWJlbGVtZW50IHRvIGxlYXZlIGluIHRoZXJlLgotCi0gICAgZGVmIF9fZGVsc2xpY2VfXyhzZWxmLCBzdGFydCwgc3RvcCk6Ci0gICAgICAgIGRlbCBzZWxmLl9jaGlsZHJlbltzdGFydDpzdG9wXQotCi0gICAgIyMKLSAgICAjIEFkZHMgYSBzdWJlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LgorICAgICMgQWRkcyBhIHN1YmVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGlzIGVsZW1lbnQuICBJbiBkb2N1bWVudCBvcmRlciwKKyAgICAjIHRoZSBuZXcgZWxlbWVudCB3aWxsIGFwcGVhciBhZnRlciB0aGUgbGFzdCBleGlzdGluZyBzdWJlbGVtZW50IChvcgorICAgICMgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLCBidXQgYmVmb3JlCisgICAgIyB0aGUgZW5kIHRhZyBmb3IgdGhpcyBlbGVtZW50LgogICAgICMKICAgICAjIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGFkZC4KLSAgICAjIEBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IgSWYgYSBzZXF1ZW5jZSBtZW1iZXIgaXMgbm90IGEgdmFsaWQgb2JqZWN0LgogCiAgICAgZGVmIGFwcGVuZChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKGVsZW1lbnQpCiAKICAgICAjIworICAgICMgQXBwZW5kcyBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCisgICAgIworICAgICMgQHBhcmFtIGVsZW1lbnRzIEEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgorICAgICMgQHNpbmNlIDEuMworCisgICAgZGVmIGV4dGVuZChzZWxmLCBlbGVtZW50cyk6CisgICAgICAgICMgZm9yIGVsZW1lbnQgaW4gZWxlbWVudHM6CisgICAgICAgICMgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uZXh0ZW5kKGVsZW1lbnRzKQorCisgICAgIyMKICAgICAjIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCiAgICAgIwogICAgICMgQHBhcmFtIGluZGV4IFdoZXJlIHRvIGluc2VydCB0aGUgbmV3IHN1YmVsZW1lbnQuCi0gICAgIyBAZXhjZXB0aW9uIEFzc2VydGlvbkVycm9yIElmIHRoZSBlbGVtZW50IGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KIAogICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIGVsZW1lbnQpOgotICAgICAgICBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpCiAKICAgICAjIwogICAgICMgUmVtb3ZlcyBhIG1hdGNoaW5nIHN1YmVsZW1lbnQuICBVbmxpa2UgdGhlIDxiPmZpbmQ8L2I+IG1ldGhvZHMsCiAgICAgIyB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiBpZGVudGl0eSwgbm90IG9uIHRhZwotICAgICMgdmFsdWUgb3IgY29udGVudHMuCisgICAgIyB2YWx1ZSBvciBjb250ZW50cy4gIFRvIHJlbW92ZSBzdWJlbGVtZW50cyBieSBvdGhlciBtZWFucywgdGhlCisgICAgIyBlYXNpZXN0IHdheSBpcyBvZnRlbiB0byB1c2UgYSBsaXN0IGNvbXByZWhlbnNpb24gdG8gc2VsZWN0IHdoYXQKKyAgICAjIGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB1c2Ugc2xpY2UgYXNzaWdubWVudCB0byB1cGRhdGUgdGhlIHBhcmVudAorICAgICMgZWxlbWVudC4KICAgICAjCiAgICAgIyBAcGFyYW0gZWxlbWVudCBXaGF0IGVsZW1lbnQgdG8gcmVtb3ZlLgogICAgICMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIGEgbWF0Y2hpbmcgZWxlbWVudCBjb3VsZCBub3QgYmUgZm91bmQuCi0gICAgIyBAZXhjZXB0aW9uIEFzc2VydGlvbkVycm9yIElmIHRoZSBlbGVtZW50IGlzIG5vdCBhIHZhbGlkIG9iamVjdC4KIAogICAgIGRlZiByZW1vdmUoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKKyAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCiAgICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShlbGVtZW50KQogCiAgICAgIyMKLSAgICAjIFJldHVybnMgYWxsIHN1YmVsZW1lbnRzLiAgVGhlIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiBkb2N1bWVudAotICAgICMgb3JkZXIuCisgICAgIyAoRGVwcmVjYXRlZCkgUmV0dXJucyBhbGwgc3ViZWxlbWVudHMuICBUaGUgZWxlbWVudHMgYXJlIHJldHVybmVkCisgICAgIyBpbiBkb2N1bWVudCBvcmRlci4KICAgICAjCiAgICAgIyBAcmV0dXJuIEEgbGlzdCBvZiBzdWJlbGVtZW50cy4KICAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwogCiAgICAgZGVmIGdldGNoaWxkcmVuKHNlbGYpOgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlICdsaXN0KGVsZW0pJyBvciBpdGVyYXRpb24gb3ZlciBlbGVtIGluc3RlYWQuIiwKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbgogCiAgICAgIyMKICAgICAjIEZpbmRzIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgogICAgICMKICAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KKyAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgogICAgICMgQHJldHVybiBUaGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KICAgICAjIEBkZWZyZXR1cm4gRWxlbWVudCBvciBOb25lCiAKLSAgICBkZWYgZmluZChzZWxmLCBwYXRoKToKLSAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmQoc2VsZiwgcGF0aCkKKyAgICBkZWYgZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgogICAgICMKICAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KICAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KICAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCiAgICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGhhcyBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KKyAgICAjICAgICBpcyBmb3VuZCwgYnV0IGhhcyBubyB0ZXh0IGNvbnRlbnQsIHRoaXMgbWV0aG9kIHJldHVybnMgYW4KICAgICAjICAgICBlbXB0eSBzdHJpbmcuCiAgICAgIyBAZGVmcmV0dXJuIHN0cmluZwogCi0gICAgZGVmIGZpbmR0ZXh0KHNlbGYsIHBhdGgsIGRlZmF1bHQ9Tm9uZSk6Ci0gICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0KQorICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0LCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKKyAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgorICAgICMgQHJldHVybiBBIGxpc3Qgb3Igb3RoZXIgc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCiAgICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KICAgICAjIEBkZWZyZXR1cm4gbGlzdCBvZiBFbGVtZW50IGluc3RhbmNlcwogCi0gICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCk6Ci0gICAgICAgIHJldHVybiBFbGVtZW50UGF0aC5maW5kYWxsKHNlbGYsIHBhdGgpCisgICAgZGVmIGZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKKworICAgICMjCisgICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisgICAgIworICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCisgICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAorICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCisgICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCisKKyAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLml0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgUmVzZXRzIGFuIGVsZW1lbnQuICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMKLSAgICAjIGFsbCBhdHRyaWJ1dGVzLCBhbmQgc2V0cyB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzIHRvIE5vbmUuCisgICAgIyBhbGwgYXR0cmlidXRlcywgYW5kIHNldHMgdGhlIDxiPnRleHQ8L2I+IGFuZCA8Yj50YWlsPC9iPiBhdHRyaWJ1dGVzCisgICAgIyB0byBOb25lLgogCiAgICAgZGVmIGNsZWFyKHNlbGYpOgogICAgICAgICBzZWxmLmF0dHJpYi5jbGVhcigpCkBAIC0zMzksNyArNDEyLDggQEAKICAgICAgICAgc2VsZi50ZXh0ID0gc2VsZi50YWlsID0gTm9uZQogCiAgICAgIyMKLSAgICAjIEdldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuCisgICAgIyBHZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuZ2V0PC9iPiwgYnV0CisgICAgIyBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KICAgICAjCiAgICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgogICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgpAQCAtMzUxLDcgKzQyNSw4IEBACiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5nZXQoa2V5LCBkZWZhdWx0KQogCiAgICAgIyMKLSAgICAjIFNldHMgYW4gZWxlbWVudCBhdHRyaWJ1dGUuCisgICAgIyBTZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWJba2V5XSA9IHZhbHVlPC9iPiwKKyAgICAjIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KICAgICAjCiAgICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIHNldC4KICAgICAjIEBwYXJhbSB2YWx1ZSBUaGUgYXR0cmlidXRlIHZhbHVlLgpAQCAtMzYyLDYgKzQzNyw3IEBACiAgICAgIyMKICAgICAjIEdldHMgYSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4gIFRoZSBuYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4KICAgICAjIGFyYml0cmFyeSBvcmRlciAoanVzdCBsaWtlIGZvciBhbiBvcmRpbmFyeSBQeXRob24gZGljdGlvbmFyeSkuCisgICAgIyBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5rZXlzKCk8L2I+LgogICAgICMKICAgICAjIEByZXR1cm4gQSBsaXN0IG9mIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIHN0cmluZ3MKQEAgLTM3MSw3ICs0NDcsNyBAQAogCiAgICAgIyMKICAgICAjIEdldHMgZWxlbWVudCBhdHRyaWJ1dGVzLCBhcyBhIHNlcXVlbmNlLiAgVGhlIGF0dHJpYnV0ZXMgYXJlCi0gICAgIyByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuCisgICAgIyByZXR1cm5lZCBpbiBhbiBhcmJpdHJhcnkgb3JkZXIuICBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5pdGVtcygpPC9iPi4KICAgICAjCiAgICAgIyBAcmV0dXJuIEEgbGlzdCBvZiAobmFtZSwgdmFsdWUpIHR1cGxlcyBmb3IgYWxsIGF0dHJpYnV0ZXMuCiAgICAgIyBAZGVmcmV0dXJuIGxpc3Qgb2YgKHN0cmluZywgc3RyaW5nKSB0dXBsZXMKQEAgLTM4NCw0NSArNDYwLDU1IEBACiAgICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGVsZW1lbnRzCiAgICAgIyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgogICAgICMgPHA+Ci0gICAgIyBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgdGhlIHJlc3VsdAotICAgICMgaXMgdW5kZWZpbmVkLgorICAgICMgSWYgdGhlIHRyZWUgc3RydWN0dXJlIGlzIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24sIG5ldyBvciByZW1vdmVkCisgICAgIyBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKKyAgICAjIGxpc3QoKSBmdW5jdGlvbiBvbiB0aGUgaXRlcmF0b3IsIGFuZCBsb29wIG92ZXIgdGhlIHJlc3VsdGluZyBsaXN0LgogICAgICMKICAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpLgotICAgICMgQHJldHVybiBBIGxpc3Qgb3IgaXRlcmF0b3IgY29udGFpbmluZyBhbGwgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9yIGl0ZXJhdG9yCisgICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KKyAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKIAotICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6Ci0gICAgICAgIG5vZGVzID0gW10KKyAgICBkZWYgaXRlcihzZWxmLCB0YWc9Tm9uZSk6CiAgICAgICAgIGlmIHRhZyA9PSAiKiI6CiAgICAgICAgICAgICB0YWcgPSBOb25lCiAgICAgICAgIGlmIHRhZyBpcyBOb25lIG9yIHNlbGYudGFnID09IHRhZzoKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChzZWxmKQotICAgICAgICBmb3Igbm9kZSBpbiBzZWxmLl9jaGlsZHJlbjoKLSAgICAgICAgICAgIG5vZGVzLmV4dGVuZChub2RlLmdldGl0ZXJhdG9yKHRhZykpCi0gICAgICAgIHJldHVybiBub2RlcworICAgICAgICAgICAgeWllbGQgc2VsZgorICAgICAgICBmb3IgZSBpbiBzZWxmLl9jaGlsZHJlbjoKKyAgICAgICAgICAgIGZvciBlIGluIGUuaXRlcih0YWcpOgorICAgICAgICAgICAgICAgIHlpZWxkIGUKKworICAgICMgY29tcGF0aWJpbGl0eQorICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6CisgICAgICAgICMgQ2hhbmdlIGZvciBhIERlcHJlY2F0aW9uV2FybmluZyBpbiAxLjQKKyAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICJUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gZnV0dXJlIHZlcnNpb25zLiAgIgorICAgICAgICAgICAgIlVzZSAnZWxlbS5pdGVyKCknIG9yICdsaXN0KGVsZW0uaXRlcigpKScgaW5zdGVhZC4iLAorICAgICAgICAgICAgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5pdGVyKHRhZykpCisKKyAgICAjIworICAgICMgQ3JlYXRlcyBhIHRleHQgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3IgbG9vcHMgb3ZlciB0aGlzIGVsZW1lbnQKKyAgICAjIGFuZCBhbGwgc3ViZWxlbWVudHMsIGluIGRvY3VtZW50IG9yZGVyLCBhbmQgcmV0dXJucyBhbGwgaW5uZXIKKyAgICAjIHRleHQuCisgICAgIworICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBjb250YWluaW5nIGFsbCBpbm5lciB0ZXh0LgorICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgorCisgICAgZGVmIGl0ZXJ0ZXh0KHNlbGYpOgorICAgICAgICB0YWcgPSBzZWxmLnRhZworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHN0cikgYW5kIHRhZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLnRleHQ6CisgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKKyAgICAgICAgZm9yIGUgaW4gc2VsZjoKKyAgICAgICAgICAgIGZvciBzIGluIGUuaXRlcnRleHQoKToKKyAgICAgICAgICAgICAgICB5aWVsZCBzCisgICAgICAgICAgICBpZiBlLnRhaWw6CisgICAgICAgICAgICAgICAgeWllbGQgZS50YWlsCiAKICMgY29tcGF0aWJpbGl0eQotX0VsZW1lbnQgPSBfRWxlbWVudEludGVyZmFjZQotCi0jIwotIyBFbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKLSMgc3RhbmRhcmQgRWxlbWVudCBpbnRlcmZhY2UuICBUaGUgZXhhY3QgY2xhc3Mgb3IgdHlwZSBvZiB0aGF0IG9iamVjdAotIyBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQsIGJ1dCBpdCB3aWxsIGFsd2F5cyBiZSBjb21wYXRpYmxlIHdpdGgKLSMgdGhlIHtAbGluayAjX0VsZW1lbnRJbnRlcmZhY2V9IGNsYXNzIGluIHRoaXMgbW9kdWxlLgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIDgtYml0IEFTQ0lJIHN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0jIEBwYXJhbSBhdHRyaWIgQW4gb3B0aW9uYWwgZGljdGlvbmFyeSwgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMuCi0jIEBwYXJhbSAqKmV4dHJhIEFkZGl0aW9uYWwgYXR0cmlidXRlcywgZ2l2ZW4gYXMga2V5d29yZCBhcmd1bWVudHMuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0KLWRlZiBFbGVtZW50KHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKLSAgICBhdHRyaWIgPSBhdHRyaWIuY29weSgpCi0gICAgYXR0cmliLnVwZGF0ZShleHRyYSkKLSAgICByZXR1cm4gX0VsZW1lbnRJbnRlcmZhY2UodGFnLCBhdHRyaWIpCitfRWxlbWVudCA9IF9FbGVtZW50SW50ZXJmYWNlID0gRWxlbWVudAogCiAjIwogIyBTdWJlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW4gZWxlbWVudCBpbnN0YW5jZSwgYW5kCkBAIC00NDcsNyArNTMzLDggQEAKIAogIyMKICMgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKLSMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudC4KKyMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudCBieSB0aGUgc3RhbmRhcmQKKyMgc2VyaWFsaXplci4KICMgPHA+CiAjIFRoZSBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGFuIDgtYml0IEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUKICMgc3RyaW5nLgpAQCAtNDYzLDcgKzU1MCw4IEBACiAKICMjCiAjIFBJIGVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVzIGEgc3BlY2lhbCBlbGVtZW50Ci0jIHRoYXQgd2lsbCBiZSBzZXJpYWxpemVkIGFzIGFuIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9uLgorIyB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBieSB0aGUgc3RhbmRhcmQKKyMgc2VyaWFsaXplci4KICMKICMgQHBhcmFtIHRhcmdldCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCiAjIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBhbnkuCkBAIC00OTYsNiArNTg0LDggQEAKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dF9vcl91cmkKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYudGV4dAorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8UU5hbWUgJXI+JyAlIChzZWxmLnRleHQsKQogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi50ZXh0KQogICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgpAQCAtNTIzLDE5ICs2MTMsMjEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLnRleHQgIT0gb3RoZXIudGV4dAogICAgICAgICByZXR1cm4gc2VsZi50ZXh0ICE9IG90aGVyCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogIyMKICMgRWxlbWVudFRyZWUgd3JhcHBlciBjbGFzcy4gIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiBlbnRpcmUgZWxlbWVudAogIyBoaWVyYXJjaHksIGFuZCBhZGRzIHNvbWUgZXh0cmEgc3VwcG9ydCBmb3Igc2VyaWFsaXphdGlvbiB0byBhbmQgZnJvbQogIyBzdGFuZGFyZCBYTUwuCiAjCiAjIEBwYXJhbSBlbGVtZW50IE9wdGlvbmFsIHJvb3QgZWxlbWVudC4KLSMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgbmFtZS4gIElmIGdpdmVuLCB0aGUKKyMgQGtleXBhcmFtIGZpbGUgT3B0aW9uYWwgZmlsZSBoYW5kbGUgb3IgZmlsZSBuYW1lLiAgSWYgZ2l2ZW4sIHRoZQogIyAgICAgdHJlZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGlzIFhNTCBmaWxlLgogCiBjbGFzcyBFbGVtZW50VHJlZToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50PU5vbmUsIGZpbGU9Tm9uZSk6Ci0gICAgICAgIGFzc2VydCBlbGVtZW50IGlzIE5vbmUgb3IgaXNlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICMgYXNzZXJ0IGVsZW1lbnQgaXMgTm9uZSBvciBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQgIyBmaXJzdCBub2RlCiAgICAgICAgIGlmIGZpbGU6CiAgICAgICAgICAgICBzZWxmLnBhcnNlKGZpbGUpCkBAIC01NTcsMzAgKzY0OSwzOCBAQAogICAgICMgQHBhcmFtIGVsZW1lbnQgQW4gZWxlbWVudCBpbnN0YW5jZS4KIAogICAgIGRlZiBfc2V0cm9vdChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQorICAgICAgICAjIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fcm9vdCA9IGVsZW1lbnQKIAogICAgICMjCiAgICAgIyBMb2FkcyBhbiBleHRlcm5hbCBYTUwgZG9jdW1lbnQgaW50byB0aGlzIGVsZW1lbnQgdHJlZS4KICAgICAjCi0gICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LgotICAgICMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotICAgICMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxUcmVlQnVpbGRlcn0gcGFyc2VyIGlzIHVzZWQuCisgICAgIyBAcGFyYW0gc291cmNlIEEgZmlsZSBuYW1lIG9yIGZpbGUgb2JqZWN0LiAgSWYgYSBmaWxlIG9iamVjdCBpcworICAgICMgICAgIGdpdmVuLCBpdCBvbmx5IGhhcyB0byBpbXBsZW1lbnQgYSA8Yj5yZWFkKG4pPC9iPiBtZXRob2QuCisgICAgIyBAa2V5cGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCisgICAgIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCiAgICAgIyBAcmV0dXJuIFRoZSBkb2N1bWVudCByb290IGVsZW1lbnQuCiAgICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKKyAgICAjIEBleGNlcHRpb24gUGFyc2VFcnJvciBJZiB0aGUgcGFyc2VyIGZhaWxzIHRvIHBhcnNlIHRoZSBkb2N1bWVudC4KIAogICAgIGRlZiBwYXJzZShzZWxmLCBzb3VyY2UsIHBhcnNlcj1Ob25lKToKKyAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAicmVhZCIpOgogICAgICAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCi0gICAgICAgIGlmIG5vdCBwYXJzZXI6Ci0gICAgICAgICAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoMzI3NjgpCi0gICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5jbG9zZSgpCi0gICAgICAgIHJldHVybiBzZWxmLl9yb290CisgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG5vdCBwYXJzZXI6CisgICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpCisgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuY2xvc2UoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKKyAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQogCiAgICAgIyMKICAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yIGxvb3BzCkBAIC01OTAsMjMgKzY5MCw0MCBAQAogICAgICMgQHJldHVybiBBbiBpdGVyYXRvci4KICAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKIAorICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyKHRhZykKKworICAgICMgY29tcGF0aWJpbGl0eQogICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6Ci0gICAgICAgIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCi0gICAgICAgIHJldHVybiBzZWxmLl9yb290LmdldGl0ZXJhdG9yKHRhZykKKyAgICAgICAgIyBDaGFuZ2UgZm9yIGEgRGVwcmVjYXRpb25XYXJuaW5nIGluIDEuNAorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMuICAiCisgICAgICAgICAgICAiVXNlICd0cmVlLml0ZXIoKScgb3IgJ2xpc3QodHJlZS5pdGVyKCkpJyBpbnN0ZWFkLiIsCisgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAogICAgICMjCiAgICAgIyBGaW5kcyB0aGUgZmlyc3QgdG9wbGV2ZWwgZWxlbWVudCB3aXRoIGdpdmVuIHRhZy4KICAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmQocGF0aCkuCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgogICAgICMgQGRlZnJldHVybiBFbGVtZW50IG9yIE5vbmUKIAotICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgIGRlZiBmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoKQorICAgICAgICAgICAgd2FybmluZ3Mud2FybigKKyAgICAgICAgICAgICAgICAiVGhpcyBzZWFyY2ggaXMgYnJva2VuIGluIDEuMyBhbmQgZWFybGllciwgYW5kIHdpbGwgYmUgIgorICAgICAgICAgICAgICAgICJmaXhlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiAgSWYgeW91IHJlbHkgb24gdGhlIGN1cnJlbnQgIgorICAgICAgICAgICAgICAgICJiZWhhdmlvdXIsIGNoYW5nZSBpdCB0byAlciIgJSBwYXRoLAorICAgICAgICAgICAgICAgIEZ1dHVyZVdhcm5pbmcsIHN0YWNrbGV2ZWw9MgorICAgICAgICAgICAgICAgICkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIEZpbmRzIHRoZSBlbGVtZW50IHRleHQgZm9yIHRoZSBmaXJzdCB0b3BsZXZlbCBlbGVtZW50IHdpdGggZ2l2ZW4KQEAgLTYxNCwxMTMgKzczMSw0NjMgQEAKICAgICAjCiAgICAgIyBAcGFyYW0gcGF0aCBXaGF0IHRvcGxldmVsIGVsZW1lbnQgdG8gbG9vayBmb3IuCiAgICAgIyBAcGFyYW0gZGVmYXVsdCBXaGF0IHRvIHJldHVybiBpZiB0aGUgZWxlbWVudCB3YXMgbm90IGZvdW5kLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIFRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIHRoZQogICAgICMgICAgIGRlZmF1bHQgdmFsdWUgbm8gZWxlbWVudCB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgdGhlIGVsZW1lbnQKLSAgICAjICAgICBoYXMgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCisgICAgIyAgICAgaXMgZm91bmQsIGJ1dCBoYXMgbm8gdGV4dCBjb250ZW50LCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuCiAgICAgIyAgICAgZW1wdHkgc3RyaW5nLgogICAgICMgQGRlZnJldHVybiBzdHJpbmcKIAotICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgIGRlZiBmaW5kdGV4dChzZWxmLCBwYXRoLCBkZWZhdWx0PU5vbmUsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZHRleHQocGF0aCwgZGVmYXVsdCkKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAiZml4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAiYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJXIiICUgcGF0aCwKKyAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmR0ZXh0KHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKICAgICAjIwogICAgICMgRmluZHMgYWxsIHRvcGxldmVsIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIHRhZy4KICAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCkuCiAgICAgIwogICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgorICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCiAgICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKICAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgogICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCiAKLSAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKKyAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCkKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgIlRoaXMgc2VhcmNoIGlzIGJyb2tlbiBpbiAxLjMgYW5kIGVhcmxpZXIsIGFuZCB3aWxsIGJlICIKKyAgICAgICAgICAgICAgICAiZml4ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gIElmIHlvdSByZWx5IG9uIHRoZSBjdXJyZW50ICIKKyAgICAgICAgICAgICAgICAiYmVoYXZpb3VyLCBjaGFuZ2UgaXQgdG8gJXIiICUgcGF0aCwKKyAgICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nLCBzdGFja2xldmVsPTIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmRhbGwocGF0aCwgbmFtZXNwYWNlcykKKworICAgICMjCisgICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisgICAgIyBTYW1lIGFzIGdldHJvb3QoKS5pdGVyZmluZChwYXRoKS4KKyAgICAjCisgICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCisgICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KKyAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3Igb3Igc2VxdWVuY2UgY29udGFpbmluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMsCisgICAgIyAgICBpbiBkb2N1bWVudCBvcmRlci4KKyAgICAjIEBkZWZyZXR1cm4gYSBnZW5lcmF0ZWQgc2VxdWVuY2Ugb2YgRWxlbWVudCBpbnN0YW5jZXMKKworICAgIGRlZiBpdGVyZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCisgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKKyAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICJUaGlzIHNlYXJjaCBpcyBicm9rZW4gaW4gMS4zIGFuZCBlYXJsaWVyLCBhbmQgd2lsbCBiZSAiCisgICAgICAgICAgICAgICAgImZpeGVkIGluIGEgZnV0dXJlIHZlcnNpb24uICBJZiB5b3UgcmVseSBvbiB0aGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgImJlaGF2aW91ciwgY2hhbmdlIGl0IHRvICVyIiAlIHBhdGgsCisgICAgICAgICAgICAgICAgRnV0dXJlV2FybmluZywgc3RhY2tsZXZlbD0yCisgICAgICAgICAgICAgICAgKQorICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCiAgICAgIyMKICAgICAjIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLgogICAgICMKKyAgICAjIEBkZWYgd3JpdGUoZmlsZSwgKipvcHRpb25zKQogICAgICMgQHBhcmFtIGZpbGUgQSBmaWxlIG5hbWUsIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLgotICAgICMgQHBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBOb25lKQorICAgICMgQHBhcmFtICoqb3B0aW9ucyBPcHRpb25zLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KKyAgICAjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgorICAgICMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCisgICAgIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgorICAgICMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCisgICAgIyBAa2V5cGFyYW0geG1sX2RlY2xhcmF0aW9uIENvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQKKyAgICAjICAgICBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywKKyAgICAjICAgICBOb25lIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOCBvciBVbmljb2RlLiAgTm9uZSBpcyBkZWZhdWx0LgogCi0gICAgZGVmIHdyaXRlKHNlbGYsIGZpbGUsIGVuY29kaW5nPU5vbmUpOgotICAgICAgICBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQotICAgICAgICBpZiBub3QgaGFzYXR0cihmaWxlLCAid3JpdGUiKToKLSAgICAgICAgICAgIGlmIGVuY29kaW5nOgotICAgICAgICAgICAgICAgIGZpbGUgPSBvcGVuKGZpbGUsICJ3YiIpCisgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVfb3JfZmlsZW5hbWUsCisgICAgICAgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICAgeG1sX2RlY2xhcmF0aW9uPU5vbmUsCisgICAgICAgICAgICAgIGRlZmF1bHRfbmFtZXNwYWNlPU5vbmUsCisgICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKKyAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQorICAgICAgICBpZiBub3QgbWV0aG9kOgorICAgICAgICAgICAgbWV0aG9kID0gInhtbCIKKyAgICAgICAgZWxpZiBtZXRob2Qgbm90IGluIF9zZXJpYWxpemU6CisgICAgICAgICAgICAjIEZJWE1FOiByYWlzZSBhbiBJbXBvcnRFcnJvciBmb3IgYzE0biBpZiBFbGVtZW50QzE0TiBpcyBtaXNzaW5nPworICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBtZXRob2QgJXIiICUgbWV0aG9kKQorICAgICAgICBpZiBub3QgZW5jb2Rpbmc6CisgICAgICAgICAgICBpZiBtZXRob2QgPT0gImMxNG4iOgorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gInV0Zi04IgogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlLCAidyIpCi0gICAgICAgIGlmIGVuY29kaW5nIGFuZCBlbmNvZGluZyAhPSAidXRmLTgiOgotICAgICAgICAgICAgZmlsZS53cml0ZShfZW5jb2RlKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/PlxuIiAlIGVuY29kaW5nLCBlbmNvZGluZykpCi0gICAgICAgIHNlbGYuX3dyaXRlKGZpbGUsIHNlbGYuX3Jvb3QsIGVuY29kaW5nLCB7fSkKLQotICAgIGRlZiBfd3JpdGUoc2VsZiwgZmlsZSwgbm9kZSwgZW5jb2RpbmcsIG5hbWVzcGFjZXMpOgotICAgICAgICAjIHdyaXRlIFhNTCB0byBmaWxlCi0gICAgICAgIHRhZyA9IG5vZGUudGFnCi0gICAgICAgIGlmIHRhZyBpcyBDb21tZW50OgotICAgICAgICAgICAgZmlsZS53cml0ZShiIjwhLS0gIiArIF9lbmNvZGVfY2RhdGEobm9kZS50ZXh0LCBlbmNvZGluZykgKyBiIiAtLT4iKQotICAgICAgICBlbGlmIHRhZyBpcyBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Ci0gICAgICAgICAgICBmaWxlLndyaXRlKGIiPD8iICsgX2VuY29kZV9jZGF0YShub2RlLnRleHQsIGVuY29kaW5nKSArIGIiPz4iKQorICAgICAgICAgICAgICAgIGVuY29kaW5nID0gInVzLWFzY2lpIgorICAgICAgICBlbGlmIGVuY29kaW5nID09IHN0cjogICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LgorICAgICAgICAgICAgZW5jb2RpbmcgPSAidW5pY29kZSIKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGl0ZW1zID0gbGlzdChub2RlLml0ZW1zKCkpCi0gICAgICAgICAgICB4bWxuc19pdGVtcyA9IFtdICMgbmV3IG5hbWVzcGFjZXMgaW4gdGhpcyBzY29wZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGFnLCBRTmFtZSkgb3IgdGFnWzoxXSA9PSAieyI6Ci0gICAgICAgICAgICAgICAgICAgIHRhZywgeG1sbnMgPSBmaXh0YWcodGFnLCBuYW1lc3BhY2VzKQotICAgICAgICAgICAgICAgICAgICBpZiB4bWxuczogeG1sbnNfaXRlbXMuYXBwZW5kKHhtbG5zKQotICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0YWcpCi0gICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGUoIjwiICsgdGFnLCBlbmNvZGluZykpCi0gICAgICAgICAgICBpZiBpdGVtcyBvciB4bWxuc19pdGVtczoKLSAgICAgICAgICAgICAgICBpdGVtcy5zb3J0KCkgIyBsZXhpY2FsIG9yZGVyCi0gICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gaXRlbXM6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgUU5hbWUpIG9yIGtbOjFdID09ICJ7IjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrLCB4bWxucyA9IGZpeHRhZyhrLCBuYW1lc3BhY2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHhtbG5zOiB4bWxuc19pdGVtcy5hcHBlbmQoeG1sbnMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcihrKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIFFOYW1lKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LCB4bWxucyA9IGZpeHRhZyh2LCBuYW1lc3BhY2VzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHhtbG5zOiB4bWxuc19pdGVtcy5hcHBlbmQoeG1sbnMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih2KQotICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGUoIiAlcz1cIiVzXCIiICUgKGssIF9lc2NhcGVfYXR0cmliKHYpKSwgZW5jb2RpbmcpKQotICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHhtbG5zX2l0ZW1zOgotICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGUoIiAlcz1cIiVzXCIiICUgKGssIF9lc2NhcGVfYXR0cmliKHYpKSwgZW5jb2RpbmcpKQotICAgICAgICAgICAgaWYgbm9kZS50ZXh0IG9yIGxlbihub2RlKToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGUoIj4iLCBlbmNvZGluZykpCi0gICAgICAgICAgICAgICAgaWYgbm9kZS50ZXh0OgotICAgICAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGVfY2RhdGEobm9kZS50ZXh0LCBlbmNvZGluZykpCi0gICAgICAgICAgICAgICAgZm9yIG4gaW4gbm9kZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGUoZmlsZSwgbiwgZW5jb2RpbmcsIG5hbWVzcGFjZXMpCi0gICAgICAgICAgICAgICAgZmlsZS53cml0ZShfZW5jb2RlKCI8LyIgKyB0YWcgKyAiPiIsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2RpbmcubG93ZXIoKQorICAgICAgICBpZiBoYXNhdHRyKGZpbGVfb3JfZmlsZW5hbWUsICJ3cml0ZSIpOgorICAgICAgICAgICAgZmlsZSA9IGZpbGVfb3JfZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGVuY29kaW5nICE9ICJ1bmljb2RlIjoKKyAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlX29yX2ZpbGVuYW1lLCAid2IiKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRlKF9lbmNvZGUoIiAvPiIsIGVuY29kaW5nKSkKLSAgICAgICAgICAgIGZvciBrLCB2IGluIHhtbG5zX2l0ZW1zOgotICAgICAgICAgICAgICAgIGRlbCBuYW1lc3BhY2VzW3ZdCi0gICAgICAgIGlmIG5vZGUudGFpbDoKLSAgICAgICAgICAgIGZpbGUud3JpdGUoX2VuY29kZV9jZGF0YShub2RlLnRhaWwsIGVuY29kaW5nKSkKKyAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlX29yX2ZpbGVuYW1lLCAidyIpCisgICAgICAgIGlmIGVuY29kaW5nICE9ICJ1bmljb2RlIjoKKyAgICAgICAgICAgIGRlZiB3cml0ZSh0ZXh0KToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlLndyaXRlKHRleHQuZW5jb2RlKGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieG1sY2hhcnJlZnJlcGxhY2UiKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JpdGUgPSBmaWxlLndyaXRlCisgICAgICAgIGlmIG1ldGhvZCA9PSAieG1sIiBhbmQgKHhtbF9kZWNsYXJhdGlvbiBvcgorICAgICAgICAgICAgICAgICh4bWxfZGVjbGFyYXRpb24gaXMgTm9uZSBhbmQKKyAgICAgICAgICAgICAgICAgZW5jb2Rpbmcgbm90IGluICgidXRmLTgiLCAidXMtYXNjaWkiLCAidW5pY29kZSIpKSk6CisgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAidW5pY29kZSI6CisgICAgICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgZGVmYXVsdCBlbmNvZGluZyBmb3IgdGhlIHhtbCBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCisgICAgICAgICAgICB3cml0ZSgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz5cbiIgJSBkZWNsYXJlZF9lbmNvZGluZykKKyAgICAgICAgaWYgbWV0aG9kID09ICJ0ZXh0IjoKKyAgICAgICAgICAgIF9zZXJpYWxpemVfdGV4dCh3cml0ZSwgc2VsZi5fcm9vdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHFuYW1lcywgbmFtZXNwYWNlcyA9IF9uYW1lc3BhY2VzKHNlbGYuX3Jvb3QsIGRlZmF1bHRfbmFtZXNwYWNlKQorICAgICAgICAgICAgc2VyaWFsaXplID0gX3NlcmlhbGl6ZVttZXRob2RdCisgICAgICAgICAgICBzZXJpYWxpemUod3JpdGUsIHNlbGYuX3Jvb3QsIHFuYW1lcywgbmFtZXNwYWNlcykKKyAgICAgICAgaWYgZmlsZV9vcl9maWxlbmFtZSBpcyBub3QgZmlsZToKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorCisgICAgZGVmIHdyaXRlX2MxNG4oc2VsZiwgZmlsZSk6CisgICAgICAgICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LiAgdXNlIG91dHB1dCBtZXRob2QgaW5zdGVhZAorICAgICAgICByZXR1cm4gc2VsZi53cml0ZShmaWxlLCBtZXRob2Q9ImMxNG4iKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGhlbHBlcnMKKyMgc2VyaWFsaXphdGlvbiBzdXBwb3J0CisKK2RlZiBfbmFtZXNwYWNlcyhlbGVtLCBkZWZhdWx0X25hbWVzcGFjZT1Ob25lKToKKyAgICAjIGlkZW50aWZ5IG5hbWVzcGFjZXMgdXNlZCBpbiB0aGlzIHRyZWUKKworICAgICMgbWFwcyBxbmFtZXMgdG8gKmVuY29kZWQqIHByZWZpeDpsb2NhbCBuYW1lcworICAgIHFuYW1lcyA9IHtOb25lOiBOb25lfQorCisgICAgIyBtYXBzIHVyaTpzIHRvIHByZWZpeGVzCisgICAgbmFtZXNwYWNlcyA9IHt9CisgICAgaWYgZGVmYXVsdF9uYW1lc3BhY2U6CisgICAgICAgIG5hbWVzcGFjZXNbZGVmYXVsdF9uYW1lc3BhY2VdID0gIiIKKworICAgIGRlZiBhZGRfcW5hbWUocW5hbWUpOgorICAgICAgICAjIGNhbGN1bGF0ZSBzZXJpYWxpemVkIHFuYW1lIHJlcHJlc2VudGF0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHFuYW1lWzoxXSA9PSAieyI6CisgICAgICAgICAgICAgICAgdXJpLCB0YWcgPSBxbmFtZVsxOl0ucnNwbGl0KCJ9IiwgMSkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBuYW1lc3BhY2VzLmdldCh1cmkpCisgICAgICAgICAgICAgICAgaWYgcHJlZml4IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IF9uYW1lc3BhY2VfbWFwLmdldCh1cmkpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gIm5zJWQiICUgbGVuKG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgICAgIGlmIHByZWZpeCAhPSAieG1sIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZXNbdXJpXSA9IHByZWZpeAorICAgICAgICAgICAgICAgIGlmIHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgcW5hbWVzW3FuYW1lXSA9ICIlczolcyIgJSAocHJlZml4LCB0YWcpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcW5hbWVzW3FuYW1lXSA9IHRhZyAjIGRlZmF1bHQgZWxlbWVudAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkZWZhdWx0X25hbWVzcGFjZToKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogY2FuIHRoaXMgYmUgaGFuZGxlZCBpbiBYTUwgMS4wPworICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCB1c2Ugbm9uLXF1YWxpZmllZCBuYW1lcyB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0X25hbWVzcGFjZSBvcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgcW5hbWVzW3FuYW1lXSA9IHFuYW1lCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcihxbmFtZSkKKworICAgICMgcG9wdWxhdGUgcW5hbWUgYW5kIG5hbWVzcGFjZXMgdGFibGUKKyAgICB0cnk6CisgICAgICAgIGl0ZXJhdGUgPSBlbGVtLml0ZXIKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGl0ZXJhdGUgPSBlbGVtLmdldGl0ZXJhdG9yICMgY0VUIGNvbXBhdGliaWxpdHkKKyAgICBmb3IgZWxlbSBpbiBpdGVyYXRlKCk6CisgICAgICAgIHRhZyA9IGVsZW0udGFnCisgICAgICAgIGlmIGlzaW5zdGFuY2UodGFnLCBRTmFtZSk6CisgICAgICAgICAgICBpZiB0YWcudGV4dCBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgICAgIGFkZF9xbmFtZSh0YWcudGV4dCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRhZywgc3RyKToKKyAgICAgICAgICAgIGlmIHRhZyBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgICAgIGFkZF9xbmFtZSh0YWcpCisgICAgICAgIGVsaWYgdGFnIGlzIG5vdCBOb25lIGFuZCB0YWcgaXMgbm90IENvbW1lbnQgYW5kIHRhZyBpcyBub3QgUEk6CisgICAgICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0YWcpCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGVsZW0uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBRTmFtZSk6CisgICAgICAgICAgICAgICAga2V5ID0ga2V5LnRleHQKKyAgICAgICAgICAgIGlmIGtleSBub3QgaW4gcW5hbWVzOgorICAgICAgICAgICAgICAgIGFkZF9xbmFtZShrZXkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBRTmFtZSkgYW5kIHZhbHVlLnRleHQgbm90IGluIHFuYW1lczoKKyAgICAgICAgICAgICAgICBhZGRfcW5hbWUodmFsdWUudGV4dCkKKyAgICAgICAgdGV4dCA9IGVsZW0udGV4dAorICAgICAgICBpZiBpc2luc3RhbmNlKHRleHQsIFFOYW1lKSBhbmQgdGV4dC50ZXh0IG5vdCBpbiBxbmFtZXM6CisgICAgICAgICAgICBhZGRfcW5hbWUodGV4dC50ZXh0KQorICAgIHJldHVybiBxbmFtZXMsIG5hbWVzcGFjZXMKKworZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorICAgIHRhZyA9IGVsZW0udGFnCisgICAgdGV4dCA9IGVsZW0udGV4dAorICAgIGlmIHRhZyBpcyBDb21tZW50OgorICAgICAgICB3cml0ZSgiPCEtLSVzLS0+IiAlIHRleHQpCisgICAgZWxpZiB0YWcgaXMgUHJvY2Vzc2luZ0luc3RydWN0aW9uOgorICAgICAgICB3cml0ZSgiPD8lcz8+IiAlIHRleHQpCisgICAgZWxzZToKKyAgICAgICAgdGFnID0gcW5hbWVzW3RhZ10KKyAgICAgICAgaWYgdGFnIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCisgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3cml0ZSgiPCIgKyB0YWcpCisgICAgICAgICAgICBpdGVtcyA9IGxpc3QoZWxlbS5pdGVtcygpKQorICAgICAgICAgICAgaWYgaXRlbXMgb3IgbmFtZXNwYWNlczoKKyAgICAgICAgICAgICAgICBpZiBuYW1lc3BhY2VzOgorICAgICAgICAgICAgICAgICAgICBmb3IgdiwgayBpbiBzb3J0ZWQobmFtZXNwYWNlcy5pdGVtcygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSB4OiB4WzFdKTogICMgc29ydCBvbiBwcmVmaXgKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGs6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9ICI6IiArIGsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCIgeG1sbnMlcz1cIiVzXCIiICUgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2VzY2FwZV9hdHRyaWIodikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICAgICAgICAgIGZvciBrLCB2IGluIHNvcnRlZChpdGVtcyk6ICAjIGxleGljYWwgb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrLCBRTmFtZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBrID0gay50ZXh0CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgUU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHFuYW1lc1t2LnRleHRdCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gX2VzY2FwZV9hdHRyaWIodikKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoIiAlcz1cIiVzXCIiICUgKHFuYW1lc1trXSwgdikpCisgICAgICAgICAgICBpZiB0ZXh0IG9yIGxlbihlbGVtKToKKyAgICAgICAgICAgICAgICB3cml0ZSgiPiIpCisgICAgICAgICAgICAgICAgaWYgdGV4dDoKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YSh0ZXh0KSkKKyAgICAgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQorICAgIGlmIGVsZW0udGFpbDoKKyAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YShlbGVtLnRhaWwpKQorCitIVE1MX0VNUFRZID0gKCJhcmVhIiwgImJhc2UiLCAiYmFzZWZvbnQiLCAiYnIiLCAiY29sIiwgImZyYW1lIiwgImhyIiwKKyAgICAgICAgICAgICAgImltZyIsICJpbnB1dCIsICJpc2luZGV4IiwgImxpbmsiLCAibWV0YSIgInBhcmFtIikKKwordHJ5OgorICAgIEhUTUxfRU1QVFkgPSBzZXQoSFRNTF9FTVBUWSkKK2V4Y2VwdCBOYW1lRXJyb3I6CisgICAgcGFzcworCitkZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorICAgIHRhZyA9IGVsZW0udGFnCisgICAgdGV4dCA9IGVsZW0udGV4dAorICAgIGlmIHRhZyBpcyBDb21tZW50OgorICAgICAgICB3cml0ZSgiPCEtLSVzLS0+IiAlIF9lc2NhcGVfY2RhdGEodGV4dCkpCisgICAgZWxpZiB0YWcgaXMgUHJvY2Vzc2luZ0luc3RydWN0aW9uOgorICAgICAgICB3cml0ZSgiPD8lcz8+IiAlIF9lc2NhcGVfY2RhdGEodGV4dCkpCisgICAgZWxzZToKKyAgICAgICAgdGFnID0gcW5hbWVzW3RhZ10KKyAgICAgICAgaWYgdGFnIGlzIE5vbmU6CisgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIHdyaXRlKF9lc2NhcGVfY2RhdGEodGV4dCkpCisgICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfaHRtbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JpdGUoIjwiICsgdGFnKQorICAgICAgICAgICAgaXRlbXMgPSBsaXN0KGVsZW0uaXRlbXMoKSkKKyAgICAgICAgICAgIGlmIGl0ZW1zIG9yIG5hbWVzcGFjZXM6CisgICAgICAgICAgICAgICAgaWYgbmFtZXNwYWNlczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHYsIGsgaW4gc29ydGVkKG5hbWVzcGFjZXMuaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgeDogeFsxXSk6ICAjIHNvcnQgb24gcHJlZml4CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAiOiIgKyBrCisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgiIHhtbG5zJXM9XCIlc1wiIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lc2NhcGVfYXR0cmliKHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzb3J0ZWQoaXRlbXMpOiAgIyBsZXhpY2FsIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaywgUU5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsudGV4dAorICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHYsIFFOYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBxbmFtZXNbdi50ZXh0XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgdiA9IF9lc2NhcGVfYXR0cmliX2h0bWwodikKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogaGFuZGxlIGJvb2xlYW4gYXR0cmlidXRlcworICAgICAgICAgICAgICAgICAgICB3cml0ZSgiICVzPVwiJXNcIiIgJSAocW5hbWVzW2tdLCB2KSkKKyAgICAgICAgICAgIHdyaXRlKCI+IikKKyAgICAgICAgICAgIHRhZyA9IHRhZy5sb3dlcigpCisgICAgICAgICAgICBpZiB0ZXh0OgorICAgICAgICAgICAgICAgIGlmIHRhZyA9PSAic2NyaXB0IiBvciB0YWcgPT0gInN0eWxlIjoKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUodGV4dCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQorICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKKyAgICAgICAgICAgICAgICBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGUsIHFuYW1lcywgTm9uZSkKKyAgICAgICAgICAgIGlmIHRhZyBub3QgaW4gSFRNTF9FTVBUWToKKyAgICAgICAgICAgICAgICB3cml0ZSgiPC8iICsgdGFnICsgIj4iKQorICAgIGlmIGVsZW0udGFpbDoKKyAgICAgICAgd3JpdGUoX2VzY2FwZV9jZGF0YShlbGVtLnRhaWwpKQorCitkZWYgX3NlcmlhbGl6ZV90ZXh0KHdyaXRlLCBlbGVtKToKKyAgICBmb3IgcGFydCBpbiBlbGVtLml0ZXJ0ZXh0KCk6CisgICAgICAgIHdyaXRlKHBhcnQpCisgICAgaWYgZWxlbS50YWlsOgorICAgICAgICB3cml0ZShlbGVtLnRhaWwpCisKK19zZXJpYWxpemUgPSB7CisgICAgInhtbCI6IF9zZXJpYWxpemVfeG1sLAorICAgICJodG1sIjogX3NlcmlhbGl6ZV9odG1sLAorICAgICJ0ZXh0IjogX3NlcmlhbGl6ZV90ZXh0LAorIyB0aGlzIG9wdGlvbmFsIG1ldGhvZCBpcyBpbXBvcnRlZCBhdCB0aGUgZW5kIG9mIHRoZSBtb2R1bGUKKyMgICAiYzE0biI6IF9zZXJpYWxpemVfYzE0biwKK30KIAogIyMKLSMgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuCisjIFJlZ2lzdGVycyBhIG5hbWVzcGFjZSBwcmVmaXguICBUaGUgcmVnaXN0cnkgaXMgZ2xvYmFsLCBhbmQgYW55CisjIGV4aXN0aW5nIG1hcHBpbmcgZm9yIGVpdGhlciB0aGUgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJCisjIHdpbGwgYmUgcmVtb3ZlZC4KICMKLSMgQHBhcmFtIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEByZXR1cm4gQSB0cnVlIHZhbHVlIGlmIHRoaXMgaXMgYW4gZWxlbWVudCBvYmplY3QuCi0jIEBkZWZyZXR1cm4gZmxhZworIyBAcGFyYW0gcHJlZml4IE5hbWVzcGFjZSBwcmVmaXguCisjIEBwYXJhbSB1cmkgTmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2UKKyMgICAgIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0IGFsbCBwb3NzaWJsZS4KKyMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIHRoZSBwcmVmaXggaXMgcmVzZXJ2ZWQsIG9yIGlzIG90aGVyd2lzZQorIyAgICAgaW52YWxpZC4KIAotZGVmIGlzZWxlbWVudChlbGVtZW50KToKLSAgICAjIEZJWE1FOiBub3Qgc3VyZSBhYm91dCB0aGlzOyBtaWdodCBiZSBhIGJldHRlciBpZGVhIHRvIGxvb2sKLSAgICAjIGZvciB0YWcvYXR0cmliL3RleHQgYXR0cmlidXRlcwotICAgIHJldHVybiBpc2luc3RhbmNlKGVsZW1lbnQsIF9FbGVtZW50SW50ZXJmYWNlKSBvciBoYXNhdHRyKGVsZW1lbnQsICJ0YWciKQorZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6CisgICAgaWYgcmUubWF0Y2goIm5zXGQrJCIsIHByZWZpeCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByZWZpeCBmb3JtYXQgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZSIpCisgICAgZm9yIGssIHYgaW4gbGlzdChfbmFtZXNwYWNlX21hcC5pdGVtcygpKToKKyAgICAgICAgaWYgayA9PSB1cmkgb3IgdiA9PSBwcmVmaXg6CisgICAgICAgICAgICBkZWwgX25hbWVzcGFjZV9tYXBba10KKyAgICBfbmFtZXNwYWNlX21hcFt1cmldID0gcHJlZml4CisKK19uYW1lc3BhY2VfbWFwID0geworICAgICMgIndlbGwta25vd24iIG5hbWVzcGFjZSBwcmVmaXhlcworICAgICJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiOiAieG1sIiwKKyAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI6ICJodG1sIiwKKyAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI6ICJyZGYiLAorICAgICJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyI6ICJ3c2RsIiwKKyAgICAjIHhtbCBzY2hlbWEKKyAgICAiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiOiAieHMiLAorICAgICJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI6ICJ4c2kiLAorICAgICMgZHVibGluIGNvcmUKKyAgICAiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iOiAiZGMiLAorfQorCitkZWYgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCk6CisgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSAlciAodHlwZSAlcykiICUgKHRleHQsIHR5cGUodGV4dCkuX19uYW1lX18pCisgICAgICAgICkKKworZGVmIF9lc2NhcGVfY2RhdGEodGV4dCk6CisgICAgIyBlc2NhcGUgY2hhcmFjdGVyIGRhdGEKKyAgICB0cnk6CisgICAgICAgICMgaXQncyB3b3J0aCBhdm9pZGluZyBkby1ub3RoaW5nIGNhbGxzIGZvciBzdHJpbmdzIHRoYXQgYXJlCisgICAgICAgICMgc2hvcnRlciB0aGFuIDUwMCBjaGFyYWN0ZXIsIG9yIHNvLiAgYXNzdW1lIHRoYXQncywgYnkgZmFyLAorICAgICAgICAjIHRoZSBtb3N0IGNvbW1vbiBjYXNlIGluIG1vc3QgYXBwbGljYXRpb25zLgorICAgICAgICBpZiAiJiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKQorICAgICAgICBpZiAiPCIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgICAgIGlmICI+IiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgcmV0dXJuIHRleHQKKyAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQorCitkZWYgX2VzY2FwZV9hdHRyaWIodGV4dCk6CisgICAgIyBlc2NhcGUgYXR0cmlidXRlIHZhbHVlCisgICAgdHJ5OgorICAgICAgICBpZiAiJiIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKQorICAgICAgICBpZiAiPCIgaW4gdGV4dDoKKyAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpCisgICAgICAgIGlmICI+IiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKKyAgICAgICAgaWYgIlwiIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXCIiLCAiJnF1b3Q7IikKKyAgICAgICAgaWYgIlxuIiBpbiB0ZXh0OgorICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXG4iLCAiJiMxMDsiKQorICAgICAgICByZXR1cm4gdGV4dAorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCisKK2RlZiBfZXNjYXBlX2F0dHJpYl9odG1sKHRleHQpOgorICAgICMgZXNjYXBlIGF0dHJpYnV0ZSB2YWx1ZQorICAgIHRyeToKKyAgICAgICAgaWYgIiYiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikKKyAgICAgICAgaWYgIj4iIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI+IiwgIiZndDsiKQorICAgICAgICBpZiAiXCIiIGluIHRleHQ6CisgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCJcIiIsICImcXVvdDsiKQorICAgICAgICByZXR1cm4gdGV4dAorICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyMKKyMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCisjIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7CisjIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgorIworIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgorIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KKyMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCisjIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCisjICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgorIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKyMgQGRlZnJldHVybiBzdHJpbmcKKworZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lKToKKyAgICBjbGFzcyBkdW1teToKKyAgICAgICAgcGFzcworICAgIGRhdGEgPSBbXQorICAgIGZpbGUgPSBkdW1teSgpCisgICAgZmlsZS53cml0ZSA9IGRhdGEuYXBwZW5kCisgICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoZmlsZSwgZW5jb2RpbmcsIG1ldGhvZD1tZXRob2QpCisgICAgaWYgZW5jb2RpbmcgaW4gKHN0ciwgInVuaWNvZGUiKToKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oZGF0YSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYiIiLmpvaW4oZGF0YSkKKworIyMKKyMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCisjIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgRmFsc2UsIHRoZSBzdHJpbmcgaXMgcmV0dXJuZWQgYXMgYQorIyBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzOyBvdGhlcndpc2UgaXQgaXMgYSBzZXF1ZW5jZSBvZgorIyBieXRlc3RyaW5ncy4KKyMKKyMgQHBhcmFtIGVsZW1lbnQgQW4gRWxlbWVudCBpbnN0YW5jZS4KKyMgQGtleXBhcmFtIGVuY29kaW5nIE9wdGlvbmFsIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdCBpcyBVUy1BU0NJSSkuCisjICAgICBVc2UgInVuaWNvZGUiIHRvIHJldHVybiBhIFVuaWNvZGUgc3RyaW5nLgorIyBAa2V5cGFyYW0gbWV0aG9kIE9wdGlvbmFsIG91dHB1dCBtZXRob2QgKCJ4bWwiLCAiaHRtbCIsICJ0ZXh0IiBvcgorIyAgICAgImMxNG4iOyBkZWZhdWx0IGlzICJ4bWwiKS4KKyMgQHJldHVybiBBIHNlcXVlbmNlIG9iamVjdCBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKyMgQGRlZnJldHVybiBzZXF1ZW5jZQorIyBAc2luY2UgMS4zCisKK2RlZiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9Tm9uZSwgbWV0aG9kPU5vbmUpOgorICAgIGNsYXNzIGR1bW15OgorICAgICAgICBwYXNzCisgICAgZGF0YSA9IFtdCisgICAgZmlsZSA9IGR1bW15KCkKKyAgICBmaWxlLndyaXRlID0gZGF0YS5hcHBlbmQKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShmaWxlLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICAjIEZJWE1FOiBtZXJnZSBzbWFsbCBmcmFnbWVudHMgaW50byBsYXJnZXIgcGFydHMKKyAgICByZXR1cm4gZGF0YQogCiAjIwogIyBXcml0ZXMgYW4gZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuICBUaGlzCkBAIC03MzUsMTEwICsxMjAyLDIwIEBACiAgICAgIyBkZWJ1Z2dpbmcKICAgICBpZiBub3QgaXNpbnN0YW5jZShlbGVtLCBFbGVtZW50VHJlZSk6CiAgICAgICAgIGVsZW0gPSBFbGVtZW50VHJlZShlbGVtKQotICAgIGVsZW0ud3JpdGUoc3lzLnN0ZG91dCkKKyAgICBlbGVtLndyaXRlKHN5cy5zdGRvdXQsIGVuY29kaW5nPSJ1bmljb2RlIikKICAgICB0YWlsID0gZWxlbS5nZXRyb290KCkudGFpbAogICAgIGlmIG5vdCB0YWlsIG9yIHRhaWxbLTFdICE9ICJcbiI6CiAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKIAotZGVmIF9lbmNvZGUocywgZW5jb2RpbmcpOgotICAgIGlmIGVuY29kaW5nOgotICAgICAgICByZXR1cm4gcy5lbmNvZGUoZW5jb2RpbmcpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHMKLQotX2VzY2FwZSA9IHJlLmNvbXBpbGUociJbJjw+XCJcdTAwODAtXHVmZmZmXSsiKQotCi1fZXNjYXBlX21hcCA9IHsKLSAgICAiJiI6ICImYW1wOyIsCi0gICAgIjwiOiAiJmx0OyIsCi0gICAgIj4iOiAiJmd0OyIsCi0gICAgJyInOiAiJnF1b3Q7IiwKLX0KLQotX25hbWVzcGFjZV9tYXAgPSB7Ci0gICAgIyAid2VsbC1rbm93biIgbmFtZXNwYWNlIHByZWZpeGVzCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSI6ICJ4bWwiLAotICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjogImh0bWwiLAotICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIjogInJkZiIsCi0gICAgImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIjogIndzZGwiLAotfQotCi1kZWYgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCk6Ci0gICAgcmFpc2UgVHlwZUVycm9yKAotICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSAlciAodHlwZSAlcykiICUgKHRleHQsIHR5cGUodGV4dCkuX19uYW1lX18pCi0gICAgICAgICkKLQotZGVmIF9lbmNvZGVfZW50aXR5KHRleHQsIHBhdHRlcm49X2VzY2FwZSk6Ci0gICAgIyBtYXAgcmVzZXJ2ZWQgYW5kIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIHRvIG51bWVyaWNhbCBlbnRpdGllcwotICAgIGRlZiBlc2NhcGVfZW50aXRpZXMobSwgbWFwPV9lc2NhcGVfbWFwKToKLSAgICAgICAgb3V0ID0gW10KLSAgICAgICAgYXBwZW5kID0gb3V0LmFwcGVuZAotICAgICAgICBmb3IgY2hhciBpbiBtLmdyb3VwKCk6Ci0gICAgICAgICAgICB0ZXh0ID0gbWFwLmdldChjaGFyKQotICAgICAgICAgICAgaWYgdGV4dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRleHQgPSAiJiMlZDsiICUgb3JkKGNoYXIpCi0gICAgICAgICAgICBhcHBlbmQodGV4dCkKLSAgICAgICAgcmV0dXJuICIiLmpvaW4ob3V0KQotICAgIHRyeToKLSAgICAgICAgcmV0dXJuIF9lbmNvZGUocGF0dGVybi5zdWIoZXNjYXBlX2VudGl0aWVzLCB0ZXh0KSwgImFzY2lpIikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBfcmFpc2Vfc2VyaWFsaXphdGlvbl9lcnJvcih0ZXh0KQotCi0jCi0jIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzc3VtZSBhbiBhc2NpaS1jb21wYXRpYmxlIGVuY29kaW5nCi0jIChvciAidXRmLTE2IikKLQotZGVmIF9lbmNvZGVfY2RhdGEodGV4dCwgZW5jb2RpbmcpOgotICAgICMgZXNjYXBlIGNoYXJhY3RlciBkYXRhCi0gICAgdHJ5OgotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCImIiwgIiZhbXA7IikKLSAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPCIsICImbHQ7IikKLSAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikKLSAgICAgICAgaWYgZW5jb2Rpbmc6Ci0gICAgICAgICAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcsICJ4bWxjaGFycmVmcmVwbGFjZSIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gdGV4dAotICAgIGV4Y2VwdCAoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgIF9yYWlzZV9zZXJpYWxpemF0aW9uX2Vycm9yKHRleHQpCi0KLWRlZiBfZXNjYXBlX2F0dHJpYih0ZXh0KToKLSAgICAjIGVzY2FwZSBhdHRyaWJ1dGUgdmFsdWUKLSAgICB0cnk6Ci0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKQotICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCInIiwgIiZhcG9zOyIpICMgRklYTUU6IG92ZXJraWxsCi0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlwiIiwgIiZxdW90OyIpCi0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpCi0gICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIj4iLCAiJmd0OyIpCi0gICAgICAgIHJldHVybiB0ZXh0Ci0gICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgX3JhaXNlX3NlcmlhbGl6YXRpb25fZXJyb3IodGV4dCkKLQotZGVmIGZpeHRhZyh0YWcsIG5hbWVzcGFjZXMpOgotICAgICMgZ2l2ZW4gYSBkZWNvcmF0ZWQgdGFnIChvZiB0aGUgZm9ybSB7dXJpfXRhZyksIHJldHVybiBwcmVmaXhlZAotICAgICMgdGFnIGFuZCBuYW1lc3BhY2UgZGVjbGFyYXRpb24sIGlmIGFueQotICAgIGlmIGlzaW5zdGFuY2UodGFnLCBRTmFtZSk6Ci0gICAgICAgIHRhZyA9IHRhZy50ZXh0Ci0gICAgbmFtZXNwYWNlX3VyaSwgdGFnID0gdGFnWzE6XS5zcGxpdCgifSIsIDEpCi0gICAgcHJlZml4ID0gbmFtZXNwYWNlcy5nZXQobmFtZXNwYWNlX3VyaSkKLSAgICBpZiBwcmVmaXggaXMgTm9uZToKLSAgICAgICAgcHJlZml4ID0gX25hbWVzcGFjZV9tYXAuZ2V0KG5hbWVzcGFjZV91cmkpCi0gICAgICAgIGlmIHByZWZpeCBpcyBOb25lOgotICAgICAgICAgICAgcHJlZml4ID0gIm5zJWQiICUgbGVuKG5hbWVzcGFjZXMpCi0gICAgICAgIG5hbWVzcGFjZXNbbmFtZXNwYWNlX3VyaV0gPSBwcmVmaXgKLSAgICAgICAgaWYgcHJlZml4ID09ICJ4bWwiOgotICAgICAgICAgICAgeG1sbnMgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB4bWxucyA9ICgieG1sbnM6JXMiICUgcHJlZml4LCBuYW1lc3BhY2VfdXJpKQotICAgIGVsc2U6Ci0gICAgICAgIHhtbG5zID0gTm9uZQotICAgIHJldHVybiAiJXM6JXMiICUgKHByZWZpeCwgdGFnKSwgeG1sbnMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgcGFyc2luZwogCiAjIwogIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlLgogIwogIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KICMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFRyZWVCdWlsZGVyfSBwYXJzZXIgaXMgdXNlZC4KKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogIyBAcmV0dXJuIEFuIEVsZW1lbnRUcmVlIGluc3RhbmNlCiAKIGRlZiBwYXJzZShzb3VyY2UsIHBhcnNlcj1Ob25lKToKQEAgLTg1MywxOCArMTIzMCwyOCBAQAogIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KICMgQHBhcmFtIGV2ZW50cyBBIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgSWYgb21pdHRlZCwgb25seSAiZW5kIgogIyAgICAgZXZlbnRzIGFyZSByZXBvcnRlZC4KKyMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCiAjIEByZXR1cm4gQSAoZXZlbnQsIGVsZW0pIGl0ZXJhdG9yLgogCi1jbGFzcyBpdGVycGFyc2U6CitkZWYgaXRlcnBhcnNlKHNvdXJjZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKToKKyAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQorICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKKyAgICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICJyYiIpCisgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKKyAgICBpZiBub3QgcGFyc2VyOgorICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCisgICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2UpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBldmVudHM9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgInJlYWQiKToKLSAgICAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQorY2xhc3MgX0l0ZXJQYXJzZUl0ZXJhdG9yOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgZXZlbnRzLCBwYXJzZXIsIGNsb3NlX3NvdXJjZT1GYWxzZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBzb3VyY2UKKyAgICAgICAgc2VsZi5fY2xvc2VfZmlsZSA9IGNsb3NlX3NvdXJjZQogICAgICAgICBzZWxmLl9ldmVudHMgPSBbXQogICAgICAgICBzZWxmLl9pbmRleCA9IDAKICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fcGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIoKQorICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKICAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZwogICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIuX3BhcnNlcgogICAgICAgICBhcHBlbmQgPSBzZWxmLl9ldmVudHMuYXBwZW5kCkBAIC04OTEsMTYgKzEyNzgsMTQgQEAKICAgICAgICAgICAgICAgICBwYXJzZXIuRW5kRWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCiAgICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJzdGFydC1ucyI6CiAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kKToKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgdXJpID0gX2VuY29kZSh1cmksICJhc2NpaSIpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIChwcmVmaXggb3IgIiIsIHVyaSkpKQorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKICAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKICAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZC1ucyI6CiAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQogICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudCkKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgd2hpbGUgMToKQEAgLTkwOSwxMCArMTI5NCw5IEBACiAgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9wYXJzZXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKICAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCiAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCkBAIC05MjYsMjQgKzEzMTAsMjIgQEAKICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleCA9IHNlbGYuX2luZGV4ICsgMQogICAgICAgICAgICAgICAgIHJldHVybiBpdGVtCiAKLSAgICB0cnk6Ci0gICAgICAgIGl0ZXIKLSAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19uZXh0X18oKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKIAogIyMKICMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LiAgVGhpcyBmdW5jdGlvbiBjYW4KICMgYmUgdXNlZCB0byBlbWJlZCAiWE1MIGxpdGVyYWxzIiBpbiBQeXRob24gY29kZS4KICMKICMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgorIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCisjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgogIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAotZGVmIFhNTCh0ZXh0KToKLSAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCitkZWYgWE1MKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICBpZiBub3QgcGFyc2VyOgorICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKICAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKIApAQCAtOTUyLDE1ICsxMzM0LDE4IEBACiAjIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgogIwogIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCisjIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKKyMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgogIyBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCiAjIEBkZWZyZXR1cm4gKEVsZW1lbnQsIGRpY3Rpb25hcnkpCiAKLWRlZiBYTUxJRCh0ZXh0KToKLSAgICBwYXJzZXIgPSBYTUxUcmVlQnVpbGRlcigpCitkZWYgWE1MSUQodGV4dCwgcGFyc2VyPU5vbmUpOgorICAgIGlmIG5vdCBwYXJzZXI6CisgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQogICAgIHRyZWUgPSBwYXJzZXIuY2xvc2UoKQogICAgIGlkcyA9IHt9Ci0gICAgZm9yIGVsZW0gaW4gdHJlZS5nZXRpdGVyYXRvcigpOgorICAgIGZvciBlbGVtIGluIHRyZWUuaXRlcigpOgogICAgICAgICBpZCA9IGVsZW0uZ2V0KCJpZCIpCiAgICAgICAgIGlmIGlkOgogICAgICAgICAgICAgaWRzW2lkXSA9IGVsZW0KQEAgLTk3NywyNSArMTM2MiwyMyBAQAogZnJvbXN0cmluZyA9IFhNTAogCiAjIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuICBJZiBlbmNvZGluZyBpcyBOb25lLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7Ci0jIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgorIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzZXF1ZW5jZSBvZiBzdHJpbmcgZnJhZ21lbnRzLgogIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKKyMgQHBhcmFtIHNlcXVlbmNlIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4KKyMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQorIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCisjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KKyMgQGRlZnJldHVybiBFbGVtZW50CisjIEBzaW5jZSAxLjMKIAotZGVmIHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPU5vbmUpOgotICAgIGNsYXNzIGR1bW15OgotICAgICAgICBwYXNzCi0gICAgZGF0YSA9IFtdCi0gICAgZmlsZSA9IGR1bW15KCkKLSAgICBmaWxlLndyaXRlID0gZGF0YS5hcHBlbmQKLSAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShmaWxlLCBlbmNvZGluZykKLSAgICBpZiBlbmNvZGluZzoKLSAgICAgICAgcmV0dXJuIGIiIi5qb2luKGRhdGEpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuICIiLmpvaW4oZGF0YSkKK2RlZiBmcm9tc3RyaW5nbGlzdChzZXF1ZW5jZSwgcGFyc2VyPU5vbmUpOgorICAgIGlmIG5vdCBwYXJzZXI6CisgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKKyAgICBmb3IgdGV4dCBpbiBzZXF1ZW5jZToKKyAgICAgICAgcGFyc2VyLmZlZWQodGV4dCkKKyAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjIwogIyBHZW5lcmljIGVsZW1lbnQgc3RydWN0dXJlIGJ1aWxkZXIuICBUaGlzIGJ1aWxkZXIgY29udmVydHMgYSBzZXF1ZW5jZQpAQCAtMTAxNiwxMSArMTM5OSwxMSBAQAogICAgICAgICBzZWxmLl9sYXN0ID0gTm9uZSAjIGxhc3QgZWxlbWVudAogICAgICAgICBzZWxmLl90YWlsID0gTm9uZSAjIHRydWUgaWYgd2UncmUgYWZ0ZXIgYW4gZW5kIHRhZwogICAgICAgICBpZiBlbGVtZW50X2ZhY3RvcnkgaXMgTm9uZToKLSAgICAgICAgICAgIGVsZW1lbnRfZmFjdG9yeSA9IF9FbGVtZW50SW50ZXJmYWNlCisgICAgICAgICAgICBlbGVtZW50X2ZhY3RvcnkgPSBFbGVtZW50CiAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBlbGVtZW50X2ZhY3RvcnkKIAogICAgICMjCi0gICAgIyBGbHVzaGVzIHRoZSBwYXJzZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW4KKyAgICAjIEZsdXNoZXMgdGhlIGJ1aWxkZXIgYnVmZmVycywgYW5kIHJldHVybnMgdGhlIHRvcGxldmVsIGRvY3VtZW50CiAgICAgIyBlbGVtZW50LgogICAgICMKICAgICAjIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KQEAgLTEwMjgsNyArMTQxMSw3IEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5fZWxlbSkgPT0gMCwgIm1pc3NpbmcgZW5kIHRhZ3MiCi0gICAgICAgIGFzc2VydCBzZWxmLl9sYXN0ICE9IE5vbmUsICJtaXNzaW5nIHRvcGxldmVsIGVsZW1lbnQiCisgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0IGlzIG5vdCBOb25lLCAibWlzc2luZyB0b3BsZXZlbCBlbGVtZW50IgogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdAogCiAgICAgZGVmIF9mbHVzaChzZWxmKToKQEAgLTEwOTMsMjggKzE0NzYsMzkgQEAKICMgICAgIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCB7QGxpbmsgI1RyZWVCdWlsZGVyfSBjbGFzcy4KICMgQGtleXBhcmFtIGh0bWwgUHJlZGVmaW5lIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZAogIyAgICAgYnkgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uCisjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBlbmNvZGluZy4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzCisjICAgICB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZS4KICMgQHNlZSAjRWxlbWVudFRyZWUKICMgQHNlZSAjVHJlZUJ1aWxkZXIKIAotY2xhc3MgWE1MVHJlZUJ1aWxkZXI6CitjbGFzcyBYTUxQYXJzZXI6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaHRtbD0wLCB0YXJnZXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGh0bWw9MCwgdGFyZ2V0PU5vbmUsIGVuY29kaW5nPU5vbmUpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKLSAgICAgICAgICAgICAgICAiTm8gbW9kdWxlIG5hbWVkIGV4cGF0OyB1c2UgU2ltcGxlWE1MVHJlZUJ1aWxkZXIgaW5zdGVhZCIKLSAgICAgICAgICAgICAgICApCi0gICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZShOb25lLCAifSIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IHB5ZXhwYXQgYXMgZXhwYXQKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIk5vIG1vZHVsZSBuYW1lZCBleHBhdDsgdXNlIFNpbXBsZVhNTFRyZWVCdWlsZGVyIGluc3RlYWQiCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgcGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKGVuY29kaW5nLCAifSIpCiAgICAgICAgIGlmIHRhcmdldCBpcyBOb25lOgogICAgICAgICAgICAgdGFyZ2V0ID0gVHJlZUJ1aWxkZXIoKQotICAgICAgICBzZWxmLl90YXJnZXQgPSB0YXJnZXQKKyAgICAgICAgIyB1bmRlcnNjb3JlZCBuYW1lcyBhcmUgcHJvdmlkZWQgZm9yIGNvbXBhdGliaWxpdHkgb25seQorICAgICAgICBzZWxmLnBhcnNlciA9IHNlbGYuX3BhcnNlciA9IHBhcnNlcgorICAgICAgICBzZWxmLnRhcmdldCA9IHNlbGYuX3RhcmdldCA9IHRhcmdldAorICAgICAgICBzZWxmLl9lcnJvciA9IGV4cGF0LmVycm9yCiAgICAgICAgIHNlbGYuX25hbWVzID0ge30gIyBuYW1lIG1lbW8gY2FjaGUKICAgICAgICAgIyBjYWxsYmFja3MKICAgICAgICAgcGFyc2VyLkRlZmF1bHRIYW5kbGVyRXhwYW5kID0gc2VsZi5fZGVmYXVsdAogICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0CiAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IHNlbGYuX2VuZAogICAgICAgICBwYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLl9kYXRhCisgICAgICAgICMgb3B0aW9uYWwgY2FsbGJhY2tzCisgICAgICAgIHBhcnNlci5Db21tZW50SGFuZGxlciA9IHNlbGYuX2NvbW1lbnQKKyAgICAgICAgcGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSBzZWxmLl9waQogICAgICAgICAjIGxldCBleHBhdCBkbyB0aGUgYnVmZmVyaW5nLCBpZiBzdXBwb3J0ZWQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQpAQCAtMTEyNywxMCArMTUyMSwxOCBAQAogICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLl9zdGFydF9saXN0CiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgiCi0gICAgICAgICMgdGFyZ2V0LnhtbChlbmNvZGluZywgTm9uZSkKICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IE5vbmUKICAgICAgICAgc2VsZi5lbnRpdHkgPSB7fQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnZlcnNpb24gPSAiRXhwYXQgJWQuJWQuJWQiICUgZXhwYXQudmVyc2lvbl9pbmZvCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MgIyB1bmtub3duCisKKyAgICBkZWYgX3JhaXNlZXJyb3Ioc2VsZiwgdmFsdWUpOgorICAgICAgICBlcnIgPSBQYXJzZUVycm9yKHZhbHVlKQorICAgICAgICBlcnIuY29kZSA9IHZhbHVlLmNvZGUKKyAgICAgICAgZXJyLnBvc2l0aW9uID0gdmFsdWUubGluZW5vLCB2YWx1ZS5vZmZzZXQKKyAgICAgICAgcmFpc2UgZXJyCiAKICAgICBkZWYgX2ZpeG5hbWUoc2VsZiwga2V5KToKICAgICAgICAgIyBleHBhbmQgcW5hbWUsIGFuZCBjb252ZXJ0IG5hbWUgc3RyaW5nIHRvIGFzY2lpLCBpZiBwb3NzaWJsZQpAQCAtMTE0OSw3ICsxNTUxLDcgQEAKICAgICAgICAgYXR0cmliID0ge30KICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gYXR0cmliX2luLml0ZW1zKCk6CiAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShrZXkpXSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBzZWxmLl90YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfc3RhcnRfbGlzdChzZWxmLCB0YWcsIGF0dHJpYl9pbik6CiAgICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCkBAIC0xMTU4LDI3ICsxNTYwLDQ3IEBACiAgICAgICAgIGlmIGF0dHJpYl9pbjoKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyaWJfaW4pLCAyKToKICAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyaWJfaW5baV0pXSA9IGF0dHJpYl9pbltpKzFdCi0gICAgICAgIHJldHVybiBzZWxmLl90YXJnZXQuc3RhcnQodGFnLCBhdHRyaWIpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfZGF0YShzZWxmLCB0ZXh0KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3RhcmdldC5kYXRhKHRleHQpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5kYXRhKHRleHQpCiAKICAgICBkZWYgX2VuZChzZWxmLCB0YWcpOgotICAgICAgICByZXR1cm4gc2VsZi5fdGFyZ2V0LmVuZChzZWxmLl9maXhuYW1lKHRhZykpCisgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5lbmQoc2VsZi5fZml4bmFtZSh0YWcpKQorCisgICAgZGVmIF9jb21tZW50KHNlbGYsIGRhdGEpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjb21tZW50ID0gc2VsZi50YXJnZXQuY29tbWVudAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY29tbWVudChkYXRhKQorCisgICAgZGVmIF9waShzZWxmLCB0YXJnZXQsIGRhdGEpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaSA9IHNlbGYudGFyZ2V0LnBpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBwaSh0YXJnZXQsIGRhdGEpCiAKICAgICBkZWYgX2RlZmF1bHQoc2VsZiwgdGV4dCk6CiAgICAgICAgIHByZWZpeCA9IHRleHRbOjFdCiAgICAgICAgIGlmIHByZWZpeCA9PSAiJiI6CiAgICAgICAgICAgICAjIGRlYWwgd2l0aCB1bmRlZmluZWQgZW50aXRpZXMKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLl90YXJnZXQuZGF0YShzZWxmLmVudGl0eVt0ZXh0WzE6LTFdXSkKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldC5kYXRhKHNlbGYuZW50aXR5W3RleHRbMTotMV1dKQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIGZyb20geG1sLnBhcnNlcnMgaW1wb3J0IGV4cGF0Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXhwYXQuZXJyb3IoCisgICAgICAgICAgICAgICAgZXJyID0gZXhwYXQuZXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJ1bmRlZmluZWQgZW50aXR5ICVzOiBsaW5lICVkLCBjb2x1bW4gJWQiICUKICAgICAgICAgICAgICAgICAgICAgKHRleHQsIHNlbGYuX3BhcnNlci5FcnJvckxpbmVOdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5FcnJvckNvbHVtbk51bWJlcikKICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGVyci5jb2RlID0gMTEgIyBYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWQorICAgICAgICAgICAgICAgIGVyci5saW5lbm8gPSBzZWxmLl9wYXJzZXIuRXJyb3JMaW5lTnVtYmVyCisgICAgICAgICAgICAgICAgZXJyLm9mZnNldCA9IHNlbGYuX3BhcnNlci5FcnJvckNvbHVtbk51bWJlcgorICAgICAgICAgICAgICAgIHJhaXNlIGVycgogICAgICAgICBlbGlmIHByZWZpeCA9PSAiPCIgYW5kIHRleHRbOjldID09ICI8IURPQ1RZUEUiOgogICAgICAgICAgICAgc2VsZi5fZG9jdHlwZSA9IFtdICMgaW5zaWRlIGEgZG9jdHlwZSBkZWNsYXJhdGlvbgogICAgICAgICBlbGlmIHNlbGYuX2RvY3R5cGUgaXMgbm90IE5vbmU6CkBAIC0xMjAyLDE4ICsxNjI0LDMxIEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIHB1YmlkOgogICAgICAgICAgICAgICAgICAgICBwdWJpZCA9IHB1YmlkWzE6LTFdCi0gICAgICAgICAgICAgICAgc2VsZi5kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihzZWxmLnRhcmdldCwgImRvY3R5cGUiKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50YXJnZXQuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5kb2N0eXBlIGlzIG5vdCBzZWxmLl9YTUxQYXJzZXJfX2RvY3R5cGU6CisgICAgICAgICAgICAgICAgICAgICMgd2FybiBhYm91dCBkZXByZWNhdGVkIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fWE1MUGFyc2VyX19kb2N0eXBlKG5hbWUsIHB1YmlkLCBzeXN0ZW1bMTotMV0pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAKICAgICAjIwotICAgICMgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCisgICAgIyAoRGVwcmVjYXRlZCkgSGFuZGxlcyBhIGRvY3R5cGUgZGVjbGFyYXRpb24uCiAgICAgIwogICAgICMgQHBhcmFtIG5hbWUgRG9jdHlwZSBuYW1lLgogICAgICMgQHBhcmFtIHB1YmlkIFB1YmxpYyBpZGVudGlmaWVyLgogICAgICMgQHBhcmFtIHN5c3RlbSBTeXN0ZW0gaWRlbnRpZmllci4KIAogICAgIGRlZiBkb2N0eXBlKHNlbGYsIG5hbWUsIHB1YmlkLCBzeXN0ZW0pOgotICAgICAgICBwYXNzCisgICAgICAgICIiIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiIiIgorICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIGRvY3R5cGUoKSAiCisgICAgICAgICAgICAibWV0aG9kIG9uIHRoZSBUcmVlQnVpbGRlciB0YXJnZXQuIiwKKyAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICkKKworICAgICMgc2VudGluZWwsIGlmIGRvY3R5cGUgaXMgcmVkZWZpbmVkIGluIGEgc3ViY2xhc3MKKyAgICBfX2RvY3R5cGUgPSBkb2N0eXBlCiAKICAgICAjIwogICAgICMgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLgpAQCAtMTIyMSw3ICsxNjU2LDEwIEBACiAgICAgIyBAcGFyYW0gZGF0YSBFbmNvZGVkIGRhdGEuCiAKICAgICBkZWYgZmVlZChzZWxmLCBkYXRhKToKLSAgICAgICAgc2VsZi5fcGFyc2VyLlBhcnNlKGRhdGEsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZShkYXRhLCAwKQorICAgICAgICBleGNlcHQgc2VsZi5fZXJyb3IgYXMgdjoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlZXJyb3IodikKIAogICAgICMjCiAgICAgIyBGaW5pc2hlcyBmZWVkaW5nIGRhdGEgdG8gdGhlIHBhcnNlci4KQEAgLTEyMzAsMTAgKzE2NjgsMjAgQEAKICAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLl9wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKLSAgICAgICAgdHJlZSA9IHNlbGYuX3RhcmdldC5jbG9zZSgpCi0gICAgICAgIGRlbCBzZWxmLl90YXJnZXQsIHNlbGYuX3BhcnNlciAjIGdldCByaWQgb2YgY2lyY3VsYXIgcmVmZXJlbmNlcworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKKyAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CisgICAgICAgICAgICBzZWxmLl9yYWlzZWVycm9yKHYpCisgICAgICAgIHRyZWUgPSBzZWxmLnRhcmdldC5jbG9zZSgpCisgICAgICAgIGRlbCBzZWxmLnRhcmdldCwgc2VsZi5fcGFyc2VyICMgZ2V0IHJpZCBvZiBjaXJjdWxhciByZWZlcmVuY2VzCiAgICAgICAgIHJldHVybiB0cmVlCiAKICMgY29tcGF0aWJpbGl0eQotWE1MUGFyc2VyID0gWE1MVHJlZUJ1aWxkZXIKK1hNTFRyZWVCdWlsZGVyID0gWE1MUGFyc2VyCisKKyMgd29ya2Fyb3VuZCBjaXJjdWxhciBpbXBvcnQuCit0cnk6CisgICAgZnJvbSBFbGVtZW50QzE0TiBpbXBvcnQgX3NlcmlhbGl6ZV9jMTRuCisgICAgX3NlcmlhbGl6ZVsiYzE0biJdID0gX3NlcmlhbGl6ZV9jMTRuCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9fX2luaXRfXy5weSBiL0xpYi94bWwvZXRyZWUvX19pbml0X18ucHkKaW5kZXggM2RkMmM5Mi4uMjdmZDhmNiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9fX2luaXRfXy5weQorKysgYi9MaWIveG1sL2V0cmVlL19faW5pdF9fLnB5CkBAIC0xLDEwICsxLDEwIEBACi0jICRJZDogX19pbml0X18ucHkgMTgyMSAyMDA0LTA2LTAzIDE2OjU3OjQ5WiBmcmVkcmlrICQKKyMgJElkOiBfX2luaXRfXy5weSAzMzc1IDIwMDgtMDItMTMgMDg6MDU6MDhaIGZyZWRyaWsgJAogIyBlbGVtZW50dHJlZSBwYWNrYWdlCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVGhlIEVsZW1lbnRUcmVlIHRvb2xraXQgaXMKICMKLSMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDQgYnkgRnJlZHJpayBMdW5kaAorIyBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOCBieSBGcmVkcmlrIEx1bmRoCiAjCiAjIEJ5IG9idGFpbmluZywgdXNpbmcsIGFuZC9vciBjb3B5aW5nIHRoaXMgc29mdHdhcmUgYW5kL29yIGl0cwogIyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsCkBAIC0zMCw0ICszMCw0IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIyBTZWUgaHR0cDovL3d3dy5weXRob24ub3JnLzIuNC9saWNlbnNlIGZvciBsaWNlbnNpbmcgZGV0YWlscy4KKyMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCmRpZmYgLS1naXQgYS9MaWIveG1sL3BhcnNlcnMvZXhwYXQucHkgYi9MaWIveG1sL3BhcnNlcnMvZXhwYXQucHkKaW5kZXggMTEzNTlhMC4uYTgwNWI4MiAxMDA2NDQKLS0tIGEvTGliL3htbC9wYXJzZXJzL2V4cGF0LnB5CisrKyBiL0xpYi94bWwvcGFyc2Vycy9leHBhdC5weQpAQCAtMSw0ICsxLDEwIEBACiAiIiJJbnRlcmZhY2UgdG8gdGhlIEV4cGF0IG5vbi12YWxpZGF0aW5nIFhNTCBwYXJzZXIuIiIiCiBfX3ZlcnNpb25fXyA9ICckUmV2aXNpb24kJwogCitpbXBvcnQgc3lzCisKIGZyb20gcHlleHBhdCBpbXBvcnQgKgorCisjIHByb3ZpZGUgcHlleHBhdCBzdWJtb2R1bGVzIGFzIHhtbC5wYXJzZXJzLmV4cGF0IHN1Ym1vZHVsZXMKK3N5cy5tb2R1bGVzWyd4bWwucGFyc2Vycy5leHBhdC5tb2RlbCddID0gbW9kZWwKK3N5cy5tb2R1bGVzWyd4bWwucGFyc2Vycy5leHBhdC5lcnJvcnMnXSA9IGVycm9ycwpkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgvZXhwYXRyZWFkZXIucHkgYi9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQppbmRleCBjOWZjODk0Li5hMjI3Y2RhIDEwMDY0NAotLS0gYS9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQorKysgYi9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weQpAQCAtMjE5LDYgKzIxOSw5IEBACiAgICAgICAgIHNlbGYuX3BhcnNpbmcgPSAwCiAgICAgICAgICMgYnJlYWsgY3ljbGUgY3JlYXRlZCBieSBleHBhdCBoYW5kbGVycyBwb2ludGluZyB0byBvdXIgbWV0aG9kcwogICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgIGJzID0gc2VsZi5fc291cmNlLmdldEJ5dGVTdHJlYW0oKQorICAgICAgICBpZiBicyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGJzLmNsb3NlKCkKIAogICAgIGRlZiBfcmVzZXRfY29udF9oYW5kbGVyKHNlbGYpOgogICAgICAgICBzZWxmLl9wYXJzZXIuUHJvY2Vzc2luZ0luc3RydWN0aW9uSGFuZGxlciA9IFwKZGlmZiAtLWdpdCBhL0xpYi94bWwvc2F4L3NheHV0aWxzLnB5IGIvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKaW5kZXggYjA1ZTgxNS4uNjI1YmMxMiAxMDA2NDQKLS0tIGEvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKKysrIGIvTGliL3htbC9zYXgvc2F4dXRpbHMucHkKQEAgLTc4LDcgKzc4LDcgQEAKIAogY2xhc3MgWE1MR2VuZXJhdG9yKGhhbmRsZXIuQ29udGVudEhhbmRsZXIpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dD1Ob25lLCBlbmNvZGluZz0iaXNvLTg4NTktMSIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXQ9Tm9uZSwgZW5jb2Rpbmc9Imlzby04ODU5LTEiLCBzaG9ydF9lbXB0eV9lbGVtZW50cz1GYWxzZSk6CiAgICAgICAgIGlmIG91dCBpcyBOb25lOgogICAgICAgICAgICAgaW1wb3J0IHN5cwogICAgICAgICAgICAgb3V0ID0gc3lzLnN0ZG91dApAQCAtODgsNiArODgsOCBAQAogICAgICAgICBzZWxmLl9jdXJyZW50X2NvbnRleHQgPSBzZWxmLl9uc19jb250ZXh0c1stMV0KICAgICAgICAgc2VsZi5fdW5kZWNsYXJlZF9uc19tYXBzID0gW10KICAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLl9zaG9ydF9lbXB0eV9lbGVtZW50cyA9IHNob3J0X2VtcHR5X2VsZW1lbnRzCisgICAgICAgIHNlbGYuX3BlbmRpbmdfc3RhcnRfZWxlbWVudCA9IEZhbHNlCiAKICAgICBkZWYgX3dyaXRlKHNlbGYsIHRleHQpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHRleHQsIHN0cik6CkBAIC0xMTIsNiArMTE0LDExIEBACiAgICAgICAgICMgUmV0dXJuIHRoZSB1bnF1YWxpZmllZCBuYW1lCiAgICAgICAgIHJldHVybiBuYW1lWzFdCiAKKyAgICBkZWYgX2ZpbmlzaF9wZW5kaW5nX3N0YXJ0X2VsZW1lbnQoc2VsZixlbmRFbGVtZW50PUZhbHNlKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19zdGFydF9lbGVtZW50OgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJz4nKQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19zdGFydF9lbGVtZW50ID0gRmFsc2UKKwogICAgICMgQ29udGVudEhhbmRsZXIgbWV0aG9kcwogCiAgICAgZGVmIHN0YXJ0RG9jdW1lbnQoc2VsZik6CkBAIC0xMjgsMTUgKzEzNSwyNCBAQAogICAgICAgICBkZWwgc2VsZi5fbnNfY29udGV4dHNbLTFdCiAKICAgICBkZWYgc3RhcnRFbGVtZW50KHNlbGYsIG5hbWUsIGF0dHJzKToKKyAgICAgICAgc2VsZi5fZmluaXNoX3BlbmRpbmdfc3RhcnRfZWxlbWVudCgpCiAgICAgICAgIHNlbGYuX3dyaXRlKCc8JyArIG5hbWUpCiAgICAgICAgIGZvciAobmFtZSwgdmFsdWUpIGluIGF0dHJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLl93cml0ZSgnICVzPSVzJyAlIChuYW1lLCBxdW90ZWF0dHIodmFsdWUpKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoJz4nKQorICAgICAgICBpZiBzZWxmLl9zaG9ydF9lbXB0eV9lbGVtZW50czoKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfc3RhcnRfZWxlbWVudCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCI+IikKIAogICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLl93cml0ZSgnPC8lcz4nICUgbmFtZSkKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19zdGFydF9lbGVtZW50OgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJy8+JykKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfc3RhcnRfZWxlbWVudCA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl93cml0ZSgnPC8lcz4nICUgbmFtZSkKIAogICAgIGRlZiBzdGFydEVsZW1lbnROUyhzZWxmLCBuYW1lLCBxbmFtZSwgYXR0cnMpOgorICAgICAgICBzZWxmLl9maW5pc2hfcGVuZGluZ19zdGFydF9lbGVtZW50KCkKICAgICAgICAgc2VsZi5fd3JpdGUoJzwnICsgc2VsZi5fcW5hbWUobmFtZSkpCiAKICAgICAgICAgZm9yIHByZWZpeCwgdXJpIGluIHNlbGYuX3VuZGVjbGFyZWRfbnNfbWFwczoKQEAgLTE0OCwxOCArMTY0LDMwIEBACiAKICAgICAgICAgZm9yIChuYW1lLCB2YWx1ZSkgaW4gYXR0cnMuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcgJXM9JXMnICUgKHNlbGYuX3FuYW1lKG5hbWUpLCBxdW90ZWF0dHIodmFsdWUpKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoJz4nKQorICAgICAgICBpZiBzZWxmLl9zaG9ydF9lbXB0eV9lbGVtZW50czoKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfc3RhcnRfZWxlbWVudCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCI+IikKIAogICAgIGRlZiBlbmRFbGVtZW50TlMoc2VsZiwgbmFtZSwgcW5hbWUpOgotICAgICAgICBzZWxmLl93cml0ZSgnPC8lcz4nICUgc2VsZi5fcW5hbWUobmFtZSkpCisgICAgICAgIGlmIHNlbGYuX3BlbmRpbmdfc3RhcnRfZWxlbWVudDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKCcvPicpCisgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3N0YXJ0X2VsZW1lbnQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fd3JpdGUoJzwvJXM+JyAlIHNlbGYuX3FuYW1lKG5hbWUpKQogCiAgICAgZGVmIGNoYXJhY3RlcnMoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIHNlbGYuX3dyaXRlKGVzY2FwZShjb250ZW50KSkKKyAgICAgICAgaWYgY29udGVudDoKKyAgICAgICAgICAgIHNlbGYuX2ZpbmlzaF9wZW5kaW5nX3N0YXJ0X2VsZW1lbnQoKQorICAgICAgICAgICAgc2VsZi5fd3JpdGUoZXNjYXBlKGNvbnRlbnQpKQogCiAgICAgZGVmIGlnbm9yYWJsZVdoaXRlc3BhY2Uoc2VsZiwgY29udGVudCk6Ci0gICAgICAgIHNlbGYuX3dyaXRlKGNvbnRlbnQpCisgICAgICAgIGlmIGNvbnRlbnQ6CisgICAgICAgICAgICBzZWxmLl9maW5pc2hfcGVuZGluZ19zdGFydF9lbGVtZW50KCkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlKGNvbnRlbnQpCiAKICAgICBkZWYgcHJvY2Vzc2luZ0luc3RydWN0aW9uKHNlbGYsIHRhcmdldCwgZGF0YSk6CisgICAgICAgIHNlbGYuX2ZpbmlzaF9wZW5kaW5nX3N0YXJ0X2VsZW1lbnQoKQogICAgICAgICBzZWxmLl93cml0ZSgnPD8lcyAlcz8+JyAlICh0YXJnZXQsIGRhdGEpKQogCiAKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvY2xpZW50LnB5IGIvTGliL3htbHJwYy9jbGllbnQucHkKaW5kZXggOTM1N2FjMy4uMTlkNGQ2OSAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9jbGllbnQucHkKKysrIGIvTGliL3htbHJwYy9jbGllbnQucHkKQEAgLTEzNiw2ICsxMzYsMTMgQEAKIGltcG9ydCByZSwgdGltZSwgb3BlcmF0b3IKIGltcG9ydCBodHRwLmNsaWVudAogZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBlcnJubworZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwordHJ5OgorICAgIGltcG9ydCBnemlwCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZ3ppcCA9IE5vbmUgI3B5dGhvbiBjYW4gYmUgYnVpbHQgd2l0aG91dCB6bGliL2d6aXAgc3VwcG9ydAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEludGVybmFsIHN0dWZmCkBAIC0xNDUsMjQgKzE1MiwxMSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGRhdGV0aW1lID0gTm9uZQogCi1kZWYgX2RlY29kZShkYXRhLCBlbmNvZGluZywgaXM4Yml0PXJlLmNvbXBpbGUoIltceDgwLVx4ZmZdIikuc2VhcmNoKToKLSAgICAjIGRlY29kZSBub24tYXNjaWkgc3RyaW5nIChpZiBwb3NzaWJsZSkKLSAgICBpZiBlbmNvZGluZyBhbmQgaXM4Yml0KGRhdGEpOgotICAgICAgICBkYXRhID0gc3RyKGRhdGEsIGVuY29kaW5nKQotICAgIHJldHVybiBkYXRhCi0KIGRlZiBlc2NhcGUocyk6CiAgICAgcyA9IHMucmVwbGFjZSgiJiIsICImYW1wOyIpCiAgICAgcyA9IHMucmVwbGFjZSgiPCIsICImbHQ7IikKICAgICByZXR1cm4gcy5yZXBsYWNlKCI+IiwgIiZndDsiLCkKIAotZGVmIF9zdHJpbmdpZnkoc3RyaW5nKToKLSAgICAjIGNvbnZlcnQgdG8gNy1iaXQgYXNjaWkgaWYgcG9zc2libGUKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBzdHJpbmcuZGVjb2RlKCJhc2NpaSIpCi0gICAgZXhjZXB0IChVbmljb2RlRXJyb3IsIFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICByZXR1cm4gc3RyaW5nCi0KIF9fdmVyc2lvbl9fID0gIjEuMC4xIgogCiAjIHhtbHJwYyBpbnRlZ2VyIGxpbWl0cwpAQCAtNzQ4LDggKzc0Miw4IEBACiAKICAgICBkZWYgZW5kX3N0cmluZyhzZWxmLCBkYXRhKToKICAgICAgICAgaWYgc2VsZi5fZW5jb2Rpbmc6Ci0gICAgICAgICAgICBkYXRhID0gX2RlY29kZShkYXRhLCBzZWxmLl9lbmNvZGluZykKLSAgICAgICAgc2VsZi5hcHBlbmQoX3N0cmluZ2lmeShkYXRhKSkKKyAgICAgICAgICAgIGRhdGEgPSBkYXRhLmRlY29kZShzZWxmLl9lbmNvZGluZykKKyAgICAgICAgc2VsZi5hcHBlbmQoZGF0YSkKICAgICAgICAgc2VsZi5fdmFsdWUgPSAwCiAgICAgZGlzcGF0Y2hbInN0cmluZyJdID0gZW5kX3N0cmluZwogICAgIGRpc3BhdGNoWyJuYW1lIl0gPSBlbmRfc3RyaW5nICMgc3RydWN0IGtleXMgYXJlIGFsd2F5cyBzdHJpbmdzCkBAIC03NjcsNyArNzYxLDcgQEAKICAgICAgICAgZGljdCA9IHt9CiAgICAgICAgIGl0ZW1zID0gc2VsZi5fc3RhY2tbbWFyazpdCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihpdGVtcyksIDIpOgotICAgICAgICAgICAgZGljdFtfc3RyaW5naWZ5KGl0ZW1zW2ldKV0gPSBpdGVtc1tpKzFdCisgICAgICAgICAgICBkaWN0W2l0ZW1zW2ldXSA9IGl0ZW1zW2krMV0KICAgICAgICAgc2VsZi5fc3RhY2tbbWFyazpdID0gW2RpY3RdCiAgICAgICAgIHNlbGYuX3ZhbHVlID0gMAogICAgIGRpc3BhdGNoWyJzdHJ1Y3QiXSA9IGVuZF9zdHJ1Y3QKQEAgLTgwNCw3ICs3OTgsNyBAQAogCiAgICAgZGVmIGVuZF9tZXRob2ROYW1lKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBzZWxmLl9lbmNvZGluZzoKLSAgICAgICAgICAgIGRhdGEgPSBfZGVjb2RlKGRhdGEsIHNlbGYuX2VuY29kaW5nKQorICAgICAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKHNlbGYuX2VuY29kaW5nKQogICAgICAgICBzZWxmLl9tZXRob2RuYW1lID0gZGF0YQogICAgICAgICBzZWxmLl90eXBlID0gIm1ldGhvZE5hbWUiICMgbm8gcGFyYW1zCiAgICAgZGlzcGF0Y2hbIm1ldGhvZE5hbWUiXSA9IGVuZF9tZXRob2ROYW1lCkBAIC0xMDEzLDYgKzEwMDcsNzggQEAKICAgICBwLmNsb3NlKCkKICAgICByZXR1cm4gdS5jbG9zZSgpLCB1LmdldG1ldGhvZG5hbWUoKQogCisjIworIyBFbmNvZGUgYSBzdHJpbmcgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBzdWNoIGFzIHNwZWNpZmllZCBieSB0aGUKKyMgQ29udGVudC1FbmNvZGluZzogZ3ppcAorIyBpbiB0aGUgSFRUUCBoZWFkZXIsIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1MgorIworIyBAcGFyYW0gZGF0YSB0aGUgdW5lbmNvZGVkIGRhdGEKKyMgQHJldHVybiB0aGUgZW5jb2RlZCBkYXRhCisKK2RlZiBnemlwX2VuY29kZShkYXRhKToKKyAgICAiIiJkYXRhIC0+IGd6aXAgZW5jb2RlZCBkYXRhCisKKyAgICBFbmNvZGUgZGF0YSB1c2luZyB0aGUgZ3ppcCBjb250ZW50IGVuY29kaW5nIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1MgorICAgICIiIgorICAgIGlmIG5vdCBnemlwOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgZiA9IEJ5dGVzSU8oKQorICAgIGd6ZiA9IGd6aXAuR3ppcEZpbGUobW9kZT0id2IiLCBmaWxlb2JqPWYsIGNvbXByZXNzbGV2ZWw9MSkKKyAgICBnemYud3JpdGUoZGF0YSkKKyAgICBnemYuY2xvc2UoKQorICAgIGVuY29kZWQgPSBmLmdldHZhbHVlKCkKKyAgICBmLmNsb3NlKCkKKyAgICByZXR1cm4gZW5jb2RlZAorCisjIworIyBEZWNvZGUgYSBzdHJpbmcgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBzdWNoIGFzIHNwZWNpZmllZCBieSB0aGUKKyMgQ29udGVudC1FbmNvZGluZzogZ3ppcAorIyBpbiB0aGUgSFRUUCBoZWFkZXIsIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1MgorIworIyBAcGFyYW0gZGF0YSBUaGUgZW5jb2RlZCBkYXRhCisjIEByZXR1cm4gdGhlIHVuZW5jb2RlZCBkYXRhCisjIEByYWlzZXMgVmFsdWVFcnJvciBpZiBkYXRhIGlzIG5vdCBjb3JyZWN0bHkgY29kZWQuCisKK2RlZiBnemlwX2RlY29kZShkYXRhKToKKyAgICAiIiJnemlwIGVuY29kZWQgZGF0YSAtPiB1bmVuY29kZWQgZGF0YQorCisgICAgRGVjb2RlIGRhdGEgdXNpbmcgdGhlIGd6aXAgY29udGVudCBlbmNvZGluZyBhcyBkZXNjcmliZWQgaW4gUkZDIDE5NTIKKyAgICAiIiIKKyAgICBpZiBub3QgZ3ppcDoKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgIGYgPSBCeXRlc0lPKGRhdGEpCisgICAgZ3pmID0gZ3ppcC5HemlwRmlsZShtb2RlPSJyYiIsIGZpbGVvYmo9ZikKKyAgICB0cnk6CisgICAgICAgIGRlY29kZWQgPSBnemYucmVhZCgpCisgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgZGF0YSIpCisgICAgZi5jbG9zZSgpCisgICAgZ3pmLmNsb3NlKCkKKyAgICByZXR1cm4gZGVjb2RlZAorCisjIworIyBSZXR1cm4gYSBkZWNvZGVkIGZpbGUtbGlrZSBvYmplY3QgZm9yIHRoZSBnemlwIGVuY29kaW5nCisjIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1Mi4KKyMKKyMgQHBhcmFtIHJlc3BvbnNlIEEgc3RyZWFtIHN1cHBvcnRpbmcgYSByZWFkKCkgbWV0aG9kCisjIEByZXR1cm4gYSBmaWxlLWxpa2Ugb2JqZWN0IHRoYXQgdGhlIGRlY29kZWQgZGF0YSBjYW4gYmUgcmVhZCgpIGZyb20KKworY2xhc3MgR3ppcERlY29kZWRSZXNwb25zZShnemlwLkd6aXBGaWxlIGlmIGd6aXAgZWxzZSBvYmplY3QpOgorICAgICIiImEgZmlsZS1saWtlIG9iamVjdCB0byBkZWNvZGUgYSByZXNwb25zZSBlbmNvZGVkIHdpdGggdGhlIGd6aXAKKyAgICBtZXRob2QsIGFzIGRlc2NyaWJlZCBpbiBSRkMgMTk1Mi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzcG9uc2UpOgorICAgICAgICAjcmVzcG9uc2UgZG9lc24ndCBzdXBwb3J0IHRlbGwoKSBhbmQgcmVhZCgpLCByZXF1aXJlZCBieQorICAgICAgICAjR3ppcEZpbGUKKyAgICAgICAgaWYgbm90IGd6aXA6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHNlbGYuaW8gPSBCeXRlc0lPKHJlc3BvbnNlLnJlYWQoKSkKKyAgICAgICAgZ3ppcC5HemlwRmlsZS5fX2luaXRfXyhzZWxmLCBtb2RlPSJyYiIsIGZpbGVvYmo9c2VsZi5pbykKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgZ3ppcC5HemlwRmlsZS5jbG9zZShzZWxmKQorICAgICAgICBzZWxmLmlvLmNsb3NlKCkKKwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIHJlcXVlc3QgZGlzcGF0Y2hlcgpAQCAtMTA0MCwxMSArMTEwNiwyMiBAQAogICAgICMgY2xpZW50IGlkZW50aWZpZXIgKG1heSBiZSBvdmVycmlkZGVuKQogICAgIHVzZXJfYWdlbnQgPSAieG1scnBjbGliLnB5LyVzIChieSB3d3cucHl0aG9ud2FyZS5jb20pIiAlIF9fdmVyc2lvbl9fCiAKKyAgICAjaWYgdHJ1ZSwgd2UnbGwgcmVxdWVzdCBnemlwIGVuY29kaW5nCisgICAgYWNjZXB0X2d6aXBfZW5jb2RpbmcgPSBUcnVlCisKKyAgICAjIGlmIHBvc2l0aXZlLCBlbmNvZGUgcmVxdWVzdCB1c2luZyBnemlwIGlmIGl0IGV4Y2VlZHMgdGhpcyB0aHJlc2hvbGQKKyAgICAjIG5vdGUgdGhhdCBtYW55IHNlcnZlciB3aWxsIGdldCBjb25mdXNlZCwgc28gb25seSB1c2UgaXQgaWYgeW91IGtub3cKKyAgICAjIHRoYXQgdGhleSBjYW4gZGVjb2RlIHN1Y2ggYSByZXF1ZXN0CisgICAgZW5jb2RlX3RocmVzaG9sZCA9IE5vbmUgI05vbmUgPSBkb24ndCBlbmNvZGUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1c2VfZGF0ZXRpbWU9RmFsc2UpOgogICAgICAgICBzZWxmLl91c2VfZGF0ZXRpbWUgPSB1c2VfZGF0ZXRpbWUKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbiA9IChOb25lLCBOb25lKQorICAgICAgICBzZWxmLl9leHRyYV9oZWFkZXJzID0gW10KIAogICAgICMjCiAgICAgIyBTZW5kIGEgY29tcGxldGUgcmVxdWVzdCwgYW5kIHBhcnNlIHRoZSByZXNwb25zZS4KKyAgICAjIFJldHJ5IHJlcXVlc3QgaWYgYSBjYWNoZWQgY29ubmVjdGlvbiBoYXMgZGlzY29ubmVjdGVkLgogICAgICMKICAgICAjIEBwYXJhbSBob3N0IFRhcmdldCBob3N0LgogICAgICMgQHBhcmFtIGhhbmRsZXIgVGFyZ2V0IFBSQyBoYW5kbGVyLgpAQCAtMTA1MywyMSArMTEzMCw0NCBAQAogICAgICMgQHJldHVybiBQYXJzZWQgcmVzcG9uc2UuCiAKICAgICBkZWYgcmVxdWVzdChzZWxmLCBob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2U9RmFsc2UpOgorICAgICAgICAjcmV0cnkgcmVxdWVzdCBvbmNlIGlmIGNhY2hlZCBjb25uZWN0aW9uIGhhcyBnb25lIGNvbGQKKyAgICAgICAgZm9yIGkgaW4gKDAsIDEpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNpbmdsZV9yZXF1ZXN0KGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgdmVyYm9zZSkKKyAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBpIG9yIGUuZXJybm8gbm90IGluIChlcnJuby5FQ09OTlJFU0VULCBlcnJuby5FQ09OTkFCT1JURUQsIGVycm5vLkVQSVBFKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGV4Y2VwdCBodHRwLmNsaWVudC5CYWRTdGF0dXNMaW5lOiAjY2xvc2UgYWZ0ZXIgd2Ugc2VudCByZXF1ZXN0CisgICAgICAgICAgICAgICAgaWYgaToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBzaW5nbGVfcmVxdWVzdChzZWxmLCBob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2U9RmFsc2UpOgogICAgICAgICAjIGlzc3VlIFhNTC1SUEMgcmVxdWVzdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBodHRwX2Nvbm4gPSBzZWxmLnNlbmRfcmVxdWVzdChob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2UpCisgICAgICAgICAgICByZXNwID0gaHR0cF9jb25uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgICAgIGlmIHJlc3Auc3RhdHVzID09IDIwMDoKKyAgICAgICAgICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfcmVzcG9uc2UocmVzcCkKIAotICAgICAgICBodHRwX2Nvbm4gPSBzZWxmLnNlbmRfcmVxdWVzdChob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2UpCi0gICAgICAgIHJlc3AgPSBodHRwX2Nvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBleGNlcHQgRmF1bHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgI0FsbCB1bmV4cGVjdGVkIGVycm9ycyBsZWF2ZSBjb25uZWN0aW9uIGluCisgICAgICAgICAgICAjIGEgc3RyYW5nZSBzdGF0ZSwgc28gd2UgY2xlYXIgaXQuCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCiAKLSAgICAgICAgaWYgcmVzcC5zdGF0dXMgIT0gMjAwOgotICAgICAgICAgICAgcmFpc2UgUHJvdG9jb2xFcnJvcigKLSAgICAgICAgICAgICAgICBob3N0ICsgaGFuZGxlciwKLSAgICAgICAgICAgICAgICByZXNwLnN0YXR1cywgcmVzcC5yZWFzb24sCi0gICAgICAgICAgICAgICAgZGljdChyZXNwLmdldGhlYWRlcnMoKSkKLSAgICAgICAgICAgICAgICApCisgICAgICAgICNXZSBnb3QgYW4gZXJyb3IgcmVzcG9uc2UuCisgICAgICAgICNEaXNjYXJkIGFueSByZXNwb25zZSBkYXRhIGFuZCByYWlzZSBleGNlcHRpb24KKyAgICAgICAgaWYgcmVzcC5nZXRoZWFkZXIoImNvbnRlbnQtbGVuZ3RoIiwgIiIpOgorICAgICAgICAgICAgcmVzcC5yZWFkKCkKKyAgICAgICAgcmFpc2UgUHJvdG9jb2xFcnJvcigKKyAgICAgICAgICAgIGhvc3QgKyBoYW5kbGVyLAorICAgICAgICAgICAgcmVzcC5zdGF0dXMsIHJlc3AucmVhc29uLAorICAgICAgICAgICAgZGljdChyZXNwLmdldGhlYWRlcnMoKSkKKyAgICAgICAgICAgICkKIAotICAgICAgICBzZWxmLnZlcmJvc2UgPSB2ZXJib3NlCi0KLSAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VfcmVzcG9uc2UocmVzcCkKIAogICAgICMjCiAgICAgIyBDcmVhdGUgcGFyc2VyLgpAQCAtMTEwNiw3ICsxMjA2LDcgQEAKICAgICAgICAgICAgICAgICAoIkF1dGhvcml6YXRpb24iLCAiQmFzaWMgIiArIGF1dGgpCiAgICAgICAgICAgICAgICAgXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXh0cmFfaGVhZGVycyA9IE5vbmUKKyAgICAgICAgICAgIGV4dHJhX2hlYWRlcnMgPSBbXQogCiAgICAgICAgIHJldHVybiBob3N0LCBleHRyYV9oZWFkZXJzLCB4NTA5CiAKQEAgLTExMTcsOSArMTIxNywyMyBAQAogICAgICMgQHJldHVybiBBbiBIVFRQQ29ubmVjdGlvbiBvYmplY3QKIAogICAgIGRlZiBtYWtlX2Nvbm5lY3Rpb24oc2VsZiwgaG9zdCk6CisgICAgICAgICNyZXR1cm4gYW4gZXhpc3RpbmcgY29ubmVjdGlvbiBpZiBwb3NzaWJsZS4gIFRoaXMgYWxsb3dzCisgICAgICAgICNIVFRQLzEuMSBrZWVwLWFsaXZlLgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uIGFuZCBob3N0ID09IHNlbGYuX2Nvbm5lY3Rpb25bMF06CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29ubmVjdGlvblsxXQogICAgICAgICAjIGNyZWF0ZSBhIEhUVFAgY29ubmVjdGlvbiBvYmplY3QgZnJvbSBhIGhvc3QgZGVzY3JpcHRvcgotICAgICAgICBob3N0LCBleHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihjaG9zdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KIAorICAgICMjCisgICAgIyBDbGVhciBhbnkgY2FjaGVkIGNvbm5lY3Rpb24gb2JqZWN0LgorICAgICMgVXNlZCBpbiB0aGUgZXZlbnQgb2Ygc29ja2V0IGVycm9ycy4KKyAgICAjCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uWzFdOgorICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvblsxXS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gKE5vbmUsIE5vbmUpCiAKICAgICAjIwogICAgICMgU2VuZCBIVFRQIHJlcXVlc3QuCkBAIC0xMTMxLDM5ICsxMjQ1LDc5IEBACiAgICAgIyBAcmV0dXJuIEFuIEhUVFBDb25uZWN0aW9uLgogCiAgICAgZGVmIHNlbmRfcmVxdWVzdChzZWxmLCBob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIGRlYnVnKToKLSAgICAgICAgaG9zdCwgZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQotICAgICAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oaG9zdCkKKyAgICAgICAgY29ubmVjdGlvbiA9IHNlbGYubWFrZV9jb25uZWN0aW9uKGhvc3QpCisgICAgICAgIGhlYWRlcnMgPSBzZWxmLl9leHRyYV9oZWFkZXJzWzpdCiAgICAgICAgIGlmIGRlYnVnOgogICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRfZGVidWdsZXZlbCgxKQotICAgICAgICBoZWFkZXJzID0ge30KLSAgICAgICAgaWYgZXh0cmFfaGVhZGVyczoKLSAgICAgICAgICAgIGZvciBrZXksIHZhbCBpbiBleHRyYV9oZWFkZXJzOgotICAgICAgICAgICAgICAgIGhlYWRlcnNba2V5XSA9IHZhbAotICAgICAgICBoZWFkZXJzWyJDb250ZW50LVR5cGUiXSA9ICJ0ZXh0L3htbCIKLSAgICAgICAgaGVhZGVyc1siVXNlci1BZ2VudCJdID0gc2VsZi51c2VyX2FnZW50Ci0gICAgICAgIGNvbm5lY3Rpb24ucmVxdWVzdCgiUE9TVCIsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgaGVhZGVycykKKyAgICAgICAgaWYgc2VsZi5hY2NlcHRfZ3ppcF9lbmNvZGluZyBhbmQgZ3ppcDoKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0cmVxdWVzdCgiUE9TVCIsIGhhbmRsZXIsIHNraXBfYWNjZXB0X2VuY29kaW5nPVRydWUpCisgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZCgoIkFjY2VwdC1FbmNvZGluZyIsICJnemlwIikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uZWN0aW9uLnB1dHJlcXVlc3QoIlBPU1QiLCBoYW5kbGVyKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0L3htbCIpKQorICAgICAgICBoZWFkZXJzLmFwcGVuZCgoIlVzZXItQWdlbnQiLCBzZWxmLnVzZXJfYWdlbnQpKQorICAgICAgICBzZWxmLnNlbmRfaGVhZGVycyhjb25uZWN0aW9uLCBoZWFkZXJzKQorICAgICAgICBzZWxmLnNlbmRfY29udGVudChjb25uZWN0aW9uLCByZXF1ZXN0X2JvZHkpCiAgICAgICAgIHJldHVybiBjb25uZWN0aW9uCiAKICAgICAjIworICAgICMgU2VuZCByZXF1ZXN0IGhlYWRlcnMuCisgICAgIyBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdXNlZnVsIGhvb2sgZm9yIHN1YmNsYXNzaW5nCisgICAgIworICAgICMgQHBhcmFtIGNvbm5lY3Rpb24gaHR0cENvbm5lY3Rpb24uCisgICAgIyBAcGFyYW0gaGVhZGVycyBsaXN0IG9mIGtleSx2YWx1ZSBwYWlycyBmb3IgSFRUUCBoZWFkZXJzCisKKyAgICBkZWYgc2VuZF9oZWFkZXJzKHNlbGYsIGNvbm5lY3Rpb24sIGhlYWRlcnMpOgorICAgICAgICBmb3Iga2V5LCB2YWwgaW4gaGVhZGVyczoKKyAgICAgICAgICAgIGNvbm5lY3Rpb24ucHV0aGVhZGVyKGtleSwgdmFsKQorCisgICAgIyMKKyAgICAjIFNlbmQgcmVxdWVzdCBib2R5LgorICAgICMgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHVzZWZ1bCBob29rIGZvciBzdWJjbGFzc2luZworICAgICMKKyAgICAjIEBwYXJhbSBjb25uZWN0aW9uIGh0dHBDb25uZWN0aW9uLgorICAgICMgQHBhcmFtIHJlcXVlc3RfYm9keSBYTUwtUlBDIHJlcXVlc3QgYm9keS4KKworICAgIGRlZiBzZW5kX2NvbnRlbnQoc2VsZiwgY29ubmVjdGlvbiwgcmVxdWVzdF9ib2R5KToKKyAgICAgICAgI29wdGlvbmFsbHkgZW5jb2RlIHRoZSByZXF1ZXN0CisgICAgICAgIGlmIChzZWxmLmVuY29kZV90aHJlc2hvbGQgaXMgbm90IE5vbmUgYW5kCisgICAgICAgICAgICBzZWxmLmVuY29kZV90aHJlc2hvbGQgPCBsZW4ocmVxdWVzdF9ib2R5KSBhbmQKKyAgICAgICAgICAgIGd6aXApOgorICAgICAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpCisgICAgICAgICAgICByZXF1ZXN0X2JvZHkgPSBnemlwX2VuY29kZShyZXF1ZXN0X2JvZHkpCisKKyAgICAgICAgY29ubmVjdGlvbi5wdXRoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIiwgc3RyKGxlbihyZXF1ZXN0X2JvZHkpKSkKKyAgICAgICAgY29ubmVjdGlvbi5lbmRoZWFkZXJzKHJlcXVlc3RfYm9keSkKKworICAgICMjCiAgICAgIyBQYXJzZSByZXNwb25zZS4KICAgICAjCiAgICAgIyBAcGFyYW0gZmlsZSBTdHJlYW0uCiAgICAgIyBAcmV0dXJuIFJlc3BvbnNlIHR1cGxlIGFuZCB0YXJnZXQgbWV0aG9kLgogCi0gICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIGZpbGUpOgotICAgICAgICAjIHJlYWQgcmVzcG9uc2UgZnJvbSBpbnB1dCBmaWxlL3NvY2tldCwgYW5kIHBhcnNlIGl0CisgICAgZGVmIHBhcnNlX3Jlc3BvbnNlKHNlbGYsIHJlc3BvbnNlKToKKyAgICAgICAgIyByZWFkIHJlc3BvbnNlIGRhdGEgZnJvbSBodHRwcmVzcG9uc2UsIGFuZCBwYXJzZSBpdAorICAgICAgICAjIENoZWNrIGZvciBuZXcgaHR0cCByZXNwb25zZSBvYmplY3QsIG90aGVyd2lzZSBpdCBpcyBhIGZpbGUgb2JqZWN0LgorICAgICAgICBpZiBoYXNhdHRyKHJlc3BvbnNlLCAnZ2V0aGVhZGVyJyk6CisgICAgICAgICAgICBpZiByZXNwb25zZS5nZXRoZWFkZXIoIkNvbnRlbnQtRW5jb2RpbmciLCAiIikgPT0gImd6aXAiOgorICAgICAgICAgICAgICAgIHN0cmVhbSA9IEd6aXBEZWNvZGVkUmVzcG9uc2UocmVzcG9uc2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0cmVhbSA9IHJlc3BvbnNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdHJlYW0gPSByZXNwb25zZQogCiAgICAgICAgIHAsIHUgPSBzZWxmLmdldHBhcnNlcigpCiAKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gZmlsZS5yZWFkKDEwMjQpCi0gICAgICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICBkYXRhID0gc3RyZWFtLnJlYWQoMTAyNCkKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoImJvZHk6IiwgcmVwcihyZXNwb25zZSkpCi0gICAgICAgICAgICBwLmZlZWQocmVzcG9uc2UpCisgICAgICAgICAgICAgICAgcHJpbnQoImJvZHk6IiwgcmVwcihkYXRhKSkKKyAgICAgICAgICAgIHAuZmVlZChkYXRhKQogCi0gICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBpZiBzdHJlYW0gaXMgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCkKICAgICAgICAgcC5jbG9zZSgpCiAKICAgICAgICAgcmV0dXJuIHUuY2xvc2UoKQpAQCAtMTE3NiwyNCArMTMzMCwxOSBAQAogCiAgICAgIyBGSVhNRTogbW9zdGx5IHVudGVzdGVkCiAKLSAgICBkZWYgc2VuZF9yZXF1ZXN0KHNlbGYsIGhvc3QsIGhhbmRsZXIsIHJlcXVlc3RfYm9keSwgZGVidWcpOgotICAgICAgICBpbXBvcnQgc29ja2V0CisgICAgZGVmIG1ha2VfY29ubmVjdGlvbihzZWxmLCBob3N0KToKKyAgICAgICAgaWYgc2VsZi5fY29ubmVjdGlvbiBhbmQgaG9zdCA9PSBzZWxmLl9jb25uZWN0aW9uWzBdOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KKwogICAgICAgICBpZiBub3QgaGFzYXR0cihodHRwLmNsaWVudCwgIkhUVFBTQ29ubmVjdGlvbiIpOgogICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKLSAgICAgICAgICAgICAgICAieW91ciB2ZXJzaW9uIG9mIGh0dHAuY2xpZW50IGRvZXNuJ3Qgc3VwcG9ydCBIVFRQUyIpCi0KLSAgICAgICAgaG9zdCwgZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQotICAgICAgICBjb25uZWN0aW9uID0gaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKGhvc3QsIE5vbmUsICoqKHg1MDkgb3Ige30pKQotICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0X2RlYnVnbGV2ZWwoMSkKLSAgICAgICAgaGVhZGVycyA9IHt9Ci0gICAgICAgIGlmIGV4dHJhX2hlYWRlcnM6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWwgaW4gZXh0cmFfaGVhZGVyczoKLSAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWwKLSAgICAgICAgaGVhZGVyc1siQ29udGVudC1UeXBlIl0gPSAidGV4dC94bWwiCi0gICAgICAgIGhlYWRlcnNbIlVzZXItQWdlbnQiXSA9IHNlbGYudXNlcl9hZ2VudAotICAgICAgICBjb25uZWN0aW9uLnJlcXVlc3QoIlBPU1QiLCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIGhlYWRlcnMpCi0gICAgICAgIHJldHVybiBjb25uZWN0aW9uCisgICAgICAgICAgICAieW91ciB2ZXJzaW9uIG9mIGh0dHAuY2xpZW50IGRvZXNuJ3Qgc3VwcG9ydCBIVFRQUyIpCisgICAgICAgICMgY3JlYXRlIGEgSFRUUFMgY29ubmVjdGlvbiBvYmplY3QgZnJvbSBhIGhvc3QgZGVzY3JpcHRvcgorICAgICAgICAjIGhvc3QgbWF5IGJlIGEgc3RyaW5nLCBvciBhIChob3N0LCB4NTA5LWRpY3QpIHR1cGxlCisgICAgICAgIGNob3N0LCBzZWxmLl9leHRyYV9oZWFkZXJzLCB4NTA5ID0gc2VsZi5nZXRfaG9zdF9pbmZvKGhvc3QpCisgICAgICAgIHNlbGYuX2Nvbm5lY3Rpb24gPSBob3N0LCBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oY2hvc3QsCisgICAgICAgICAgICBOb25lLCAqKih4NTA5IG9yIHt9KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nvbm5lY3Rpb25bMV0KIAogIyMKICMgU3RhbmRhcmQgc2VydmVyIHByb3h5LiAgVGhpcyBjbGFzcyBlc3RhYmxpc2hlcyBhIHZpcnR1YWwgY29ubmVjdGlvbgpAQCAtMTI1OCw2ICsxNDA3LDkgQEAKICAgICAgICAgc2VsZi5fX3ZlcmJvc2UgPSB2ZXJib3NlCiAgICAgICAgIHNlbGYuX19hbGxvd19ub25lID0gYWxsb3dfbm9uZQogCisgICAgZGVmIF9fY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX190cmFuc3BvcnQuY2xvc2UoKQorCiAgICAgZGVmIF9fcmVxdWVzdChzZWxmLCBtZXRob2RuYW1lLCBwYXJhbXMpOgogICAgICAgICAjIGNhbGwgYSBtZXRob2Qgb24gdGhlIHJlbW90ZSBzZXJ2ZXIKIApAQCAtMTI5MSw2ICsxNDQzLDE2IEBACiAgICAgIyBub3RlOiB0byBjYWxsIGEgcmVtb3RlIG9iamVjdCB3aXRoIGFuIG5vbi1zdGFuZGFyZCBuYW1lLCB1c2UKICAgICAjIHJlc3VsdCBnZXRhdHRyKHNlcnZlciwgInN0cmFuZ2UtcHl0aG9uLW5hbWUiKShhcmdzKQogCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGF0dHIpOgorICAgICAgICAiIiJBIHdvcmthcm91bmQgdG8gZ2V0IHNwZWNpYWwgYXR0cmlidXRlcyBvbiB0aGUgU2VydmVyUHJveHkKKyAgICAgICAgICAgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIHRoZSBtYWdpYyBfX2dldGF0dHJfXworICAgICAgICAiIiIKKyAgICAgICAgaWYgYXR0ciA9PSAiY2xvc2UiOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbG9zZQorICAgICAgICBlbGlmIGF0dHIgPT0gInRyYW5zcG9ydCI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fX3RyYW5zcG9ydAorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiQXR0cmlidXRlICVyIG5vdCBmb3VuZCIgJSAoYXR0ciwpKQorCiAjIGNvbXBhdGliaWxpdHkKIAogU2VydmVyID0gU2VydmVyUHJveHkKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvc2VydmVyLnB5IGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKaW5kZXggMjRkOGE2YS4uOTQ3NzMwOSAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9zZXJ2ZXIucHkKKysrIGIvTGliL3htbHJwYy9zZXJ2ZXIucHkKQEAgLTEwNCw3ICsxMDQsNyBAQAogIyBXcml0dGVuIGJ5IEJyaWFuIFF1aW5sYW4gKGJyaWFuQHN3ZWV0YXBwLmNvbSkuCiAjIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBGcmVkcmlrIEx1bmRoLgogCi1mcm9tIHhtbHJwYy5jbGllbnQgaW1wb3J0IEZhdWx0LCBkdW1wcywgbG9hZHMKK2Zyb20geG1scnBjLmNsaWVudCBpbXBvcnQgRmF1bHQsIGR1bXBzLCBsb2FkcywgZ3ppcF9lbmNvZGUsIGd6aXBfZGVjb2RlCiBmcm9tIGh0dHAuc2VydmVyIGltcG9ydCBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyCiBpbXBvcnQgaHR0cC5zZXJ2ZXIKIGltcG9ydCBzb2NrZXRzZXJ2ZXIKQEAgLTE1NSw4ICsxNTUsOSBAQAogICAgICIiIk1peC1pbiBjbGFzcyB0aGF0IGRpc3BhdGNoZXMgWE1MLVJQQyByZXF1ZXN0cy4KIAogICAgIFRoaXMgY2xhc3MgaXMgdXNlZCB0byByZWdpc3RlciBYTUwtUlBDIG1ldGhvZCBoYW5kbGVycwotICAgIGFuZCB0aGVuIHRvIGRpc3BhdGNoIHRoZW0uIFRoZXJlIHNob3VsZCBuZXZlciBiZSBhbnkKLSAgICByZWFzb24gdG8gaW5zdGFudGlhdGUgdGhpcyBjbGFzcyBkaXJlY3RseS4KKyAgICBhbmQgdGhlbiB0byBkaXNwYXRjaCB0aGVtLiBUaGlzIGNsYXNzIGRvZXNuJ3QgbmVlZCB0byBiZQorICAgIGluc3RhbmNlZCBkaXJlY3RseSB3aGVuIHVzZWQgYnkgU2ltcGxlWE1MUlBDU2VydmVyIGJ1dCBpdAorICAgIGNhbiBiZSBpbnN0YW5jZWQgd2hlbiB1c2VkIGJ5IHRoZSBNdWx0aVBhdGhYTUxSUENTZXJ2ZXIKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhbGxvd19ub25lPUZhbHNlLCBlbmNvZGluZz1Ob25lKToKQEAgLTIzMSw3ICsyMzIsNyBAQAogCiAgICAgICAgIHNlbGYuZnVuY3MudXBkYXRlKHsnc3lzdGVtLm11bHRpY2FsbCcgOiBzZWxmLnN5c3RlbV9tdWx0aWNhbGx9KQogCi0gICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSk6CisgICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSwgcGF0aCA9IE5vbmUpOgogICAgICAgICAiIiJEaXNwYXRjaGVzIGFuIFhNTC1SUEMgbWV0aG9kIGZyb20gbWFyc2hhbGxlZCAoWE1MKSBkYXRhLgogCiAgICAgICAgIFhNTC1SUEMgbWV0aG9kcyBhcmUgZGlzcGF0Y2hlZCBmcm9tIHRoZSBtYXJzaGFsbGVkIChYTUwpIGRhdGEKQEAgLTQyMCw2ICs0MjEsMzEgQEAKICAgICAjIHBhdGhzIG5vdCBvbiB0aGlzIGxpc3Qgd2lsbCByZXN1bHQgaW4gYSA0MDQgZXJyb3IuCiAgICAgcnBjX3BhdGhzID0gKCcvJywgJy9SUEMyJykKIAorICAgICNpZiBub3QgTm9uZSwgZW5jb2RlIHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGlzLCBpZiBwb3NzaWJsZQorICAgIGVuY29kZV90aHJlc2hvbGQgPSAxNDAwICNhIGNvbW1vbiBNVFUKKworICAgICNPdmVycmlkZSBmb3JtIFN0cmVhbVJlcXVlc3RIYW5kbGVyOiBmdWxsIGJ1ZmZlcmluZyBvZiBvdXRwdXQKKyAgICAjYW5kIG5vIE5hZ2xlLgorICAgIHdidWZzaXplID0gLTEKKyAgICBkaXNhYmxlX25hZ2xlX2FsZ29yaXRobSA9IFRydWUKKworICAgICMgYSByZSB0byBtYXRjaCBhIGd6aXAgQWNjZXB0LUVuY29kaW5nCisgICAgYWVwYXR0ZXJuID0gcmUuY29tcGlsZShyIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHMqIChbXlxzO10rKSBccyogICAgICAgICAgICAjY29udGVudC1jb2RpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoO1xzKiBxIFxzKj1ccyogKFswLTlcLl0rKSk/ICNxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIiLCByZS5WRVJCT1NFIHwgcmUuSUdOT1JFQ0FTRSkKKworICAgIGRlZiBhY2NlcHRfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICByID0ge30KKyAgICAgICAgYWUgPSBzZWxmLmhlYWRlcnMuZ2V0KCJBY2NlcHQtRW5jb2RpbmciLCAiIikKKyAgICAgICAgZm9yIGUgaW4gYWUuc3BsaXQoIiwiKToKKyAgICAgICAgICAgIG1hdGNoID0gc2VsZi5hZXBhdHRlcm4ubWF0Y2goZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIHYgPSBtYXRjaC5ncm91cCgzKQorICAgICAgICAgICAgICAgIHYgPSBmbG9hdCh2KSBpZiB2IGVsc2UgMS4wCisgICAgICAgICAgICAgICAgclttYXRjaC5ncm91cCgxKV0gPSB2CisgICAgICAgIHJldHVybiByCisKICAgICBkZWYgaXNfcnBjX3BhdGhfdmFsaWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucnBjX3BhdGhzOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucGF0aCBpbiBzZWxmLnJwY19wYXRocwpAQCAtNDUzLDEzICs0NzksMTcgQEAKICAgICAgICAgICAgICAgICBzaXplX3JlbWFpbmluZyAtPSBsZW4oTFstMV0pCiAgICAgICAgICAgICBkYXRhID0gYicnLmpvaW4oTCkKIAorICAgICAgICAgICAgZGF0YSA9IHNlbGYuZGVjb2RlX3JlcXVlc3RfY29udGVudChkYXRhKQorICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiAjcmVzcG9uc2UgaGFzIGJlZW4gc2VudAorCiAgICAgICAgICAgICAjIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFNpbXBsZVhNTFJQQ1NlcnZlciwgX2Rpc3BhdGNoCiAgICAgICAgICAgICAjIGNvdWxkIGJlIG92ZXJyaWRkZW4gaW4gdGhpcyBjbGFzcywgaW5zdGVhZCBvZiBpbgogICAgICAgICAgICAgIyBTaW1wbGVYTUxSUENEaXNwYXRjaGVyLiBUbyBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwKICAgICAgICAgICAgICMgY2hlY2sgdG8gc2VlIGlmIGEgc3ViY2xhc3MgaW1wbGVtZW50cyBfZGlzcGF0Y2ggYW5kIGRpc3BhdGNoCiAgICAgICAgICAgICAjIHVzaW5nIHRoYXQgbWV0aG9kIGlmIHByZXNlbnQuCiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuc2VydmVyLl9tYXJzaGFsZWRfZGlzcGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIGRhdGEsIGdldGF0dHIoc2VsZiwgJ19kaXNwYXRjaCcsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIGRhdGEsIGdldGF0dHIoc2VsZiwgJ19kaXNwYXRjaCcsIE5vbmUpLCBzZWxmLnBhdGgKICAgICAgICAgICAgICAgICApCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZTogIyBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgbW9kdWxlIGlzIGJ1Z2d5CiAgICAgICAgICAgICAjIGludGVybmFsIGVycm9yLCByZXBvcnQgYXMgSFRUUCBzZXJ2ZXIgZXJyb3IKQEAgLTQ3MywxNyArNTAzLDQwIEBACiAgICAgICAgICAgICAgICAgdHJhY2UgPSBzdHIodHJhY2UuZW5jb2RlKCdBU0NJSScsICdiYWNrc2xhc2hyZXBsYWNlJyksICdBU0NJSScpCiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiWC10cmFjZWJhY2siLCB0cmFjZSkKIAorICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCAiMCIpCiAgICAgICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCiAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LXR5cGUiLCAidGV4dC94bWwiKQorICAgICAgICAgICAgaWYgc2VsZi5lbmNvZGVfdGhyZXNob2xkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxlbihyZXNwb25zZSkgPiBzZWxmLmVuY29kZV90aHJlc2hvbGQ6CisgICAgICAgICAgICAgICAgICAgIHEgPSBzZWxmLmFjY2VwdF9lbmNvZGluZ3MoKS5nZXQoImd6aXAiLCAwKQorICAgICAgICAgICAgICAgICAgICBpZiBxOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZ3ppcF9lbmNvZGUocmVzcG9uc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1FbmNvZGluZyIsICJnemlwIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIiwgc3RyKGxlbihyZXNwb25zZSkpKQogICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgICAgICBzZWxmLndmaWxlLndyaXRlKHJlc3BvbnNlKQogCi0gICAgICAgICAgICAjIHNodXQgZG93biB0aGUgY29ubmVjdGlvbgotICAgICAgICAgICAgc2VsZi53ZmlsZS5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2h1dGRvd24oMSkKKyAgICBkZWYgZGVjb2RlX3JlcXVlc3RfY29udGVudChzZWxmLCBkYXRhKToKKyAgICAgICAgI3N1cHBvcnQgZ3ppcCBlbmNvZGluZyBvZiByZXF1ZXN0CisgICAgICAgIGVuY29kaW5nID0gc2VsZi5oZWFkZXJzLmdldCgiY29udGVudC1lbmNvZGluZyIsICJpZGVudGl0eSIpLmxvd2VyKCkKKyAgICAgICAgaWYgZW5jb2RpbmcgPT0gImlkZW50aXR5IjoKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGlmIGVuY29kaW5nID09ICJnemlwIjoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gZ3ppcF9kZWNvZGUoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSg1MDEsICJlbmNvZGluZyAlciBub3Qgc3VwcG9ydGVkIiAlIGVuY29kaW5nKQorICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDQwMCwgImVycm9yIGRlY29kaW5nIGd6aXAgY29udGVudCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoNTAxLCAiZW5jb2RpbmcgJXIgbm90IHN1cHBvcnRlZCIgJSBlbmNvZGluZykKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCAiMCIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogCiAgICAgZGVmIHJlcG9ydF80MDQgKHNlbGYpOgogICAgICAgICAgICAgIyBSZXBvcnQgYSA0MDQgZXJyb3IKQEAgLTQ5Myw5ICs1NDYsNiBAQAogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIsIHN0cihsZW4ocmVzcG9uc2UpKSkKICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUocmVzcG9uc2UpCi0gICAgICAgICMgc2h1dCBkb3duIHRoZSBjb25uZWN0aW9uCi0gICAgICAgIHNlbGYud2ZpbGUuZmx1c2goKQotICAgICAgICBzZWxmLmNvbm5lY3Rpb24uc2h1dGRvd24oMSkKIAogICAgIGRlZiBsb2dfcmVxdWVzdChzZWxmLCBjb2RlPSctJywgc2l6ZT0nLScpOgogICAgICAgICAiIiJTZWxlY3RpdmVseSBsb2cgYW4gYWNjZXB0ZWQgcmVxdWVzdC4iIiIKQEAgLTUzNyw2ICs1ODcsNDQgQEAKICAgICAgICAgICAgIGZsYWdzIHw9IGZjbnRsLkZEX0NMT0VYRUMKICAgICAgICAgICAgIGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfU0VURkQsIGZsYWdzKQogCitjbGFzcyBNdWx0aVBhdGhYTUxSUENTZXJ2ZXIoU2ltcGxlWE1MUlBDU2VydmVyKToKKyAgICAiIiJNdWx0aXBhdGggWE1MLVJQQyBTZXJ2ZXIKKyAgICBUaGlzIHNwZWNpYWxpemF0aW9uIG9mIFNpbXBsZVhNTFJQQ1NlcnZlciBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlCisgICAgbXVsdGlwbGUgRGlzcGF0Y2hlciBpbnN0YW5jZXMgYW5kIGFzc2lnbiB0aGVtIHRvIGRpZmZlcmVudAorICAgIEhUVFAgcmVxdWVzdCBwYXRocy4gIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gcnVuIHR3byBvciBtb3JlCisgICAgJ3ZpcnR1YWwgWE1MLVJQQyBzZXJ2ZXJzJyBhdCB0aGUgc2FtZSBwb3J0LgorICAgIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0SGFuZGxlciBhY2NlcHRzIHRoZSBwYXRocyBpbiBxdWVzdGlvbi4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgcmVxdWVzdEhhbmRsZXI9U2ltcGxlWE1MUlBDUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPVRydWUsIGFsbG93X25vbmU9RmFsc2UsIGVuY29kaW5nPU5vbmUsIGJpbmRfYW5kX2FjdGl2YXRlPVRydWUpOgorCisgICAgICAgIFNpbXBsZVhNTFJQQ1NlcnZlci5fX2luaXRfXyhzZWxmLCBhZGRyLCByZXF1ZXN0SGFuZGxlciwgbG9nUmVxdWVzdHMsIGFsbG93X25vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgYmluZF9hbmRfYWN0aXZhdGUpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hlcnMgPSB7fQorICAgICAgICBzZWxmLmFsbG93X25vbmUgPSBhbGxvd19ub25lCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworCisgICAgZGVmIGFkZF9kaXNwYXRjaGVyKHNlbGYsIHBhdGgsIGRpc3BhdGNoZXIpOgorICAgICAgICBzZWxmLmRpc3BhdGNoZXJzW3BhdGhdID0gZGlzcGF0Y2hlcgorICAgICAgICByZXR1cm4gZGlzcGF0Y2hlcgorCisgICAgZGVmIGdldF9kaXNwYXRjaGVyKHNlbGYsIHBhdGgpOgorICAgICAgICByZXR1cm4gc2VsZi5kaXNwYXRjaGVyc1twYXRoXQorCisgICAgZGVmIF9tYXJzaGFsZWRfZGlzcGF0Y2goc2VsZiwgZGF0YSwgZGlzcGF0Y2hfbWV0aG9kID0gTm9uZSwgcGF0aCA9IE5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYuZGlzcGF0Y2hlcnNbcGF0aF0uX21hcnNoYWxlZF9kaXNwYXRjaCgKKyAgICAgICAgICAgICAgIGRhdGEsIGRpc3BhdGNoX21ldGhvZCwgcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyByZXBvcnQgbG93IGxldmVsIGV4Y2VwdGlvbiBiYWNrIHRvIHNlcnZlcgorICAgICAgICAgICAgIyAoZWFjaCBkaXNwYXRjaGVyIHNob3VsZCBoYXZlIGhhbmRsZWQgdGhlaXIgb3duCisgICAgICAgICAgICAjIGV4Y2VwdGlvbnMpCisgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlID0gc3lzLmV4Y19pbmZvKClbOjJdCisgICAgICAgICAgICByZXNwb25zZSA9IHhtbHJwY2xpYi5kdW1wcygKKyAgICAgICAgICAgICAgICB4bWxycGNsaWIuRmF1bHQoMSwgIiVzOiVzIiAlIChleGNfdHlwZSwgZXhjX3ZhbHVlKSksCisgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZywgYWxsb3dfbm9uZT1zZWxmLmFsbG93X25vbmUpCisgICAgICAgIHJldHVybiByZXNwb25zZQorCiBjbGFzcyBDR0lYTUxSUENSZXF1ZXN0SGFuZGxlcihTaW1wbGVYTUxSUENEaXNwYXRjaGVyKToKICAgICAiIiJTaW1wbGUgaGFuZGxlciBmb3IgWE1MLVJQQyBkYXRhIHBhc3NlZCB0aHJvdWdoIENHSS4iIiIKIApAQCAtODI2LDEwICs5MTQsNiBAQAogICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShyZXNwb25zZSkKIAotICAgICAgICAjIHNodXQgZG93biB0aGUgY29ubmVjdGlvbgotICAgICAgICBzZWxmLndmaWxlLmZsdXNoKCkKLSAgICAgICAgc2VsZi5jb25uZWN0aW9uLnNodXRkb3duKDEpCi0KIGNsYXNzIERvY1hNTFJQQ1NlcnZlciggIFNpbXBsZVhNTFJQQ1NlcnZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFhNTFJQQ0RvY0dlbmVyYXRvcik6CiAgICAgIiIiWE1MLVJQQyBhbmQgSFRNTCBkb2N1bWVudGF0aW9uIHNlcnZlci4KZGlmZiAtLWdpdCBhL0xpYi96aXBmaWxlLnB5IGIvTGliL3ppcGZpbGUucHkKaW5kZXggMmVjNjMwNi4uNTBmNDg0OCAxMDA2NDQKLS0tIGEvTGliL3ppcGZpbGUucHkKKysrIGIvTGliL3ppcGZpbGUucHkKQEAgLTMsOCArMywxNyBAQAogCiBYWFggcmVmZXJlbmNlcyB0byB1dGYtOCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KICIiIgotaW1wb3J0IHN0cnVjdCwgb3MsIHRpbWUsIHN5cywgc2h1dGlsCi1pbXBvcnQgYmluYXNjaWksIGlvLCBzdGF0CitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgaW1wCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHN0YXQKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBiaW5hc2NpaQorCiAKIHRyeToKICAgICBpbXBvcnQgemxpYiAjIFdlIG1heSBuZWVkIGl0cyBjb21wcmVzc2lvbiBtZXRob2QKQEAgLTEzLDEwICsyMiwxMCBAQAogICAgIHpsaWIgPSBOb25lCiAgICAgY3JjMzIgPSBiaW5hc2NpaS5jcmMzMgogCi1fX2FsbF9fID0gWyJCYWRaaXBmaWxlIiwgImVycm9yIiwgIlpJUF9TVE9SRUQiLCAiWklQX0RFRkxBVEVEIiwgImlzX3ppcGZpbGUiLAotICAgICAgICAgICAiWmlwSW5mbyIsICJaaXBGaWxlIiwgIlB5WmlwRmlsZSIsICJMYXJnZVppcEZpbGUiIF0KK19fYWxsX18gPSBbIkJhZFppcEZpbGUiLCAiQmFkWmlwZmlsZSIsICJlcnJvciIsICJaSVBfU1RPUkVEIiwgIlpJUF9ERUZMQVRFRCIsCisgICAgICAgICAgICJpc196aXBmaWxlIiwgIlppcEluZm8iLCAiWmlwRmlsZSIsICJQeVppcEZpbGUiLCAiTGFyZ2VaaXBGaWxlIl0KIAotY2xhc3MgQmFkWmlwZmlsZShFeGNlcHRpb24pOgorY2xhc3MgQmFkWmlwRmlsZShFeGNlcHRpb24pOgogICAgIHBhc3MKIAogCkBAIC0yNiw3ICszNSw4IEBACiAgICAgYW5kIHRob3NlIGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkLgogICAgICIiIgogCi1lcnJvciA9IEJhZFppcGZpbGUgICAgICAjIFRoZSBleGNlcHRpb24gcmFpc2VkIGJ5IHRoaXMgbW9kdWxlCitlcnJvciA9IEJhZFppcGZpbGUgPSBCYWRaaXBGaWxlICAgICAgIyBQcmUtMy4yIGNvbXBhdGliaWxpdHkgbmFtZXMKKwogCiBaSVA2NF9MSU1JVCA9ICgxIDw8IDMxKSAtIDEKIFpJUF9GSUxFQ09VTlRfTElNSVQgPSAxIDw8IDE2CkBAIC0xNzEsNyArMTgxLDcgQEAKICAgICAgICAgcmV0dXJuIGVuZHJlYwogCiAgICAgaWYgZGlza25vICE9IDAgb3IgZGlza3MgIT0gMToKLSAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiemlwZmlsZXMgdGhhdCBzcGFuIG11bHRpcGxlIGRpc2tzIGFyZSBub3Qgc3VwcG9ydGVkIikKKyAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiemlwZmlsZXMgdGhhdCBzcGFuIG11bHRpcGxlIGRpc2tzIGFyZSBub3Qgc3VwcG9ydGVkIikKIAogICAgICMgQXNzdW1lIG5vICd6aXA2NCBleHRlbnNpYmxlIGRhdGEnCiAgICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yIC0gc2l6ZUVuZENlbnREaXI2NCwgMikKQEAgLTQ0OSwxMzMgKzQ1OSwxMzMgQEAKICAgICAgICAgc2VsZi5fVXBkYXRlS2V5cyhjKQogICAgICAgICByZXR1cm4gYwogCi1jbGFzcyBaaXBFeHRGaWxlOgorY2xhc3MgWmlwRXh0RmlsZShpby5CdWZmZXJlZElPQmFzZSk6CiAgICAgIiIiRmlsZS1saWtlIG9iamVjdCBmb3IgcmVhZGluZyBhbiBhcmNoaXZlIG1lbWJlci4KICAgICAgICBJcyByZXR1cm5lZCBieSBaaXBGaWxlLm9wZW4oKS4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlb2JqLCB6aXBpbmZvLCBkZWNyeXB0PU5vbmUpOgotICAgICAgICBzZWxmLmZpbGVvYmogPSBmaWxlb2JqCi0gICAgICAgIHNlbGYuZGVjcnlwdGVyID0gZGVjcnlwdAotICAgICAgICBzZWxmLmJ5dGVzX3JlYWQgPSAwCi0gICAgICAgIHNlbGYucmF3YnVmZmVyID0gYicnCi0gICAgICAgIHNlbGYucmVhZGJ1ZmZlciA9IGInJwotICAgICAgICBzZWxmLmxpbmVidWZmZXIgPSBiJycKLSAgICAgICAgc2VsZi5lb2YgPSBGYWxzZQotICAgICAgICBzZWxmLnVuaXZfbmV3bGluZXMgPSBGYWxzZQotICAgICAgICBzZWxmLm5sU2VwcyA9IChiIlxuIiwgKQotICAgICAgICBzZWxmLmxhc3RkaXNjYXJkID0gYicnCisgICAgIyBNYXggc2l6ZSBzdXBwb3J0ZWQgYnkgZGVjb21wcmVzc29yLgorICAgIE1BWF9OID0gMSA8PCAzMSAtIDEKIAotICAgICAgICBzZWxmLmNvbXByZXNzX3R5cGUgPSB6aXBpbmZvLmNvbXByZXNzX3R5cGUKLSAgICAgICAgc2VsZi5jb21wcmVzc19zaXplID0gemlwaW5mby5jb21wcmVzc19zaXplCisgICAgIyBSZWFkIGZyb20gY29tcHJlc3NlZCBmaWxlcyBpbiA0ayBibG9ja3MuCisgICAgTUlOX1JFQURfU0laRSA9IDQwOTYKIAotICAgICAgICBzZWxmLmNsb3NlZCAgPSBGYWxzZQotICAgICAgICBzZWxmLm1vZGUgICAgPSAiciIKKyAgICAjIFNlYXJjaCBmb3IgdW5pdmVyc2FsIG5ld2xpbmVzIG9yIGxpbmUgY2h1bmtzLgorICAgIFBBVFRFUk4gPSByZS5jb21waWxlKGJyJ14oP1A8Y2h1bms+W15cclxuXSspfCg/UDxuZXdsaW5lPlxufFxyXG4/KScpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW9iaiwgbW9kZSwgemlwaW5mbywgZGVjcnlwdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGNsb3NlX2ZpbGVvYmo9RmFsc2UpOgorICAgICAgICBzZWxmLl9maWxlb2JqID0gZmlsZW9iagorICAgICAgICBzZWxmLl9kZWNyeXB0ZXIgPSBkZWNyeXB0ZXIKKyAgICAgICAgc2VsZi5fY2xvc2VfZmlsZW9iaiA9IGNsb3NlX2ZpbGVvYmoKKworICAgICAgICBzZWxmLl9jb21wcmVzc190eXBlID0gemlwaW5mby5jb21wcmVzc190eXBlCisgICAgICAgIHNlbGYuX2NvbXByZXNzX3NpemUgPSB6aXBpbmZvLmNvbXByZXNzX3NpemUKKyAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA9IHppcGluZm8uY29tcHJlc3Nfc2l6ZQorCisgICAgICAgIGlmIHNlbGYuX2NvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgorICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gemxpYi5kZWNvbXByZXNzb2JqKC0xNSkKKyAgICAgICAgc2VsZi5fdW5jb25zdW1lZCA9IGInJworCisgICAgICAgIHNlbGYuX3JlYWRidWZmZXIgPSBiJycKKyAgICAgICAgc2VsZi5fb2Zmc2V0ID0gMAorCisgICAgICAgIHNlbGYuX3VuaXZlcnNhbCA9ICdVJyBpbiBtb2RlCisgICAgICAgIHNlbGYubmV3bGluZXMgPSBOb25lCisKKyAgICAgICAgIyBBZGp1c3QgcmVhZCBzaXplIGZvciBlbmNyeXB0ZWQgZmlsZXMgc2luY2UgdGhlIGZpcnN0IDEyIGJ5dGVzCisgICAgICAgICMgYXJlIGZvciB0aGUgZW5jcnlwdGlvbi9wYXNzd29yZCBpbmZvcm1hdGlvbi4KKyAgICAgICAgaWYgc2VsZi5fZGVjcnlwdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCAtPSAxMgorCisgICAgICAgIHNlbGYubW9kZSA9IG1vZGUKICAgICAgICAgc2VsZi5uYW1lID0gemlwaW5mby5maWxlbmFtZQogCi0gICAgICAgICMgcmVhZCBmcm9tIGNvbXByZXNzZWQgZmlsZXMgaW4gNjRrIGJsb2NrcwotICAgICAgICBzZWxmLmNvbXByZWFkc2l6ZSA9IDY0KjEwMjQKLSAgICAgICAgaWYgc2VsZi5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgIHNlbGYuZGMgPSB6bGliLmRlY29tcHJlc3NvYmooLTE1KQotCiAgICAgICAgIGlmIGhhc2F0dHIoemlwaW5mbywgJ0NSQycpOgogICAgICAgICAgICAgc2VsZi5fZXhwZWN0ZWRfY3JjID0gemlwaW5mby5DUkMKICAgICAgICAgICAgIHNlbGYuX3J1bm5pbmdfY3JjID0gY3JjMzIoYicnKSAmIDB4ZmZmZmZmZmYKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2V4cGVjdGVkX2NyYyA9IE5vbmUKIAotICAgIGRlZiBzZXRfdW5pdl9uZXdsaW5lcyhzZWxmLCB1bml2X25ld2xpbmVzKToKLSAgICAgICAgc2VsZi51bml2X25ld2xpbmVzID0gdW5pdl9uZXdsaW5lcworICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtLgogCi0gICAgICAgICMgcGljayBsaW5lIHNlcGFyYXRvciBjaGFyKHMpIGJhc2VkIG9uIHVuaXZlcnNhbCBuZXdsaW5lcyBmbGFnCi0gICAgICAgIHNlbGYubmxTZXBzID0gKGIiXG4iLCApCi0gICAgICAgIGlmIHNlbGYudW5pdl9uZXdsaW5lczoKLSAgICAgICAgICAgIHNlbGYubmxTZXBzID0gKGIiXHJcbiIsIGIiXHIiLCBiIlxuIikKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgbmV4dGxpbmUgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgaWYgbm90IG5leHRsaW5lOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbigpCi0KLSAgICAgICAgcmV0dXJuIG5leHRsaW5lCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi0gICAgZGVmIF9jaGVja2Zvcm5ld2xpbmUoc2VsZik6Ci0gICAgICAgIG5sLCBubGxlbiA9IC0xLCAtMQotICAgICAgICBpZiBzZWxmLmxpbmVidWZmZXI6Ci0gICAgICAgICAgICAjIHVnbHkgY2hlY2sgZm9yIGNhc2VzIHdoZXJlIGhhbGYgb2YgYW4gXHJcbiBwYWlyIHdhcwotICAgICAgICAgICAgIyByZWFkIG9uIHRoZSBsYXN0IHBhc3MsIGFuZCB0aGUgXHIgd2FzIGRpc2NhcmRlZC4gIEluIHRoaXMKLSAgICAgICAgICAgICMgY2FzZSB3ZSBqdXN0IHRocm93IGF3YXkgdGhlIFxuIGF0IHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyLgotICAgICAgICAgICAgaWYgKHNlbGYubGFzdGRpc2NhcmQsIHNlbGYubGluZWJ1ZmZlcls6MV0pID09IChiJ1xyJywgYidcbicpOgotICAgICAgICAgICAgICAgIHNlbGYubGluZWJ1ZmZlciA9IHNlbGYubGluZWJ1ZmZlclsxOl0KLQotICAgICAgICAgICAgZm9yIHNlcCBpbiBzZWxmLm5sU2VwczoKLSAgICAgICAgICAgICAgICBubCA9IHNlbGYubGluZWJ1ZmZlci5maW5kKHNlcCkKLSAgICAgICAgICAgICAgICBpZiBubCA+PSAwOgotICAgICAgICAgICAgICAgICAgICBubGxlbiA9IGxlbihzZXApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBubCwgbmxsZW4KLQotICAgICAgICByZXR1cm4gbmwsIG5sbGVuCi0KLSAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZSA9IC0xKToKLSAgICAgICAgIiIiUmVhZCBhIGxpbmUgd2l0aCBhcHByb3guIHNpemUuIElmIHNpemUgaXMgbmVnYXRpdmUsCi0gICAgICAgICAgIHJlYWQgYSB3aG9sZSBsaW5lLgorICAgICAgICBJZiBsaW1pdCBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgbGltaXQgYnl0ZXMgd2lsbCBiZSByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2l6ZSA8IDA6Ci0gICAgICAgICAgICBzaXplID0gc3lzLm1heHNpemUKLSAgICAgICAgZWxpZiBzaXplID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgIyBjaGVjayBmb3IgYSBuZXdsaW5lIGFscmVhZHkgaW4gYnVmZmVyCi0gICAgICAgIG5sLCBubGxlbiA9IHNlbGYuX2NoZWNrZm9ybmV3bGluZSgpCisgICAgICAgIGlmIG5vdCBzZWxmLl91bml2ZXJzYWwgYW5kIGxpbWl0IDwgMDoKKyAgICAgICAgICAgICMgU2hvcnRjdXQgY29tbW9uIGNhc2UgLSBuZXdsaW5lIGZvdW5kIGluIGJ1ZmZlci4KKyAgICAgICAgICAgIGkgPSBzZWxmLl9yZWFkYnVmZmVyLmZpbmQoYidcbicsIHNlbGYuX29mZnNldCkgKyAxCisgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICBsaW5lID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6IGldCisgICAgICAgICAgICAgICAgc2VsZi5fb2Zmc2V0ID0gaQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbmwgPj0gMDoKLSAgICAgICAgICAgICMgdGhlIG5leHQgbGluZSB3YXMgYWxyZWFkeSBpbiB0aGUgYnVmZmVyCi0gICAgICAgICAgICBubCA9IG1pbihubCwgc2l6ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgbm8gbGluZSBicmVhayBpbiBidWZmZXIgLSB0cnkgdG8gcmVhZCBtb3JlCi0gICAgICAgICAgICBzaXplIC09IGxlbihzZWxmLmxpbmVidWZmZXIpCi0gICAgICAgICAgICB3aGlsZSBubCA8IDAgYW5kIHNpemUgPiAwOgotICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYucmVhZChtaW4oc2l6ZSwgMTAwKSkKLSAgICAgICAgICAgICAgICBpZiBub3QgYnVmOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHNlbGYubGluZWJ1ZmZlciArPSBidWYKLSAgICAgICAgICAgICAgICBzaXplIC09IGxlbihidWYpCisgICAgICAgIGlmIG5vdCBzZWxmLl91bml2ZXJzYWw6CisgICAgICAgICAgICByZXR1cm4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGxpbmUoc2VsZiwgbGltaXQpCiAKLSAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBhIG5ld2xpbmUgaW4gYnVmZmVyCi0gICAgICAgICAgICAgICAgbmwsIG5sbGVuID0gc2VsZi5fY2hlY2tmb3JuZXdsaW5lKCkKKyAgICAgICAgbGluZSA9IGInJworICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKGxpbmUpIDwgbGltaXQ6CisgICAgICAgICAgICByZWFkYWhlYWQgPSBzZWxmLnBlZWsoMikKKyAgICAgICAgICAgIGlmIHJlYWRhaGVhZCA9PSBiJyc6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgICAgICAgICAgIyB3ZSBlaXRoZXIgcmFuIG91dCBvZiBieXRlcyBpbiB0aGUgZmlsZSwgb3IKLSAgICAgICAgICAgICMgbWV0IHRoZSBzcGVjaWZpZWQgc2l6ZSBsaW1pdCB3aXRob3V0IGZpbmRpbmcgYSBuZXdsaW5lLAotICAgICAgICAgICAgIyBzbyByZXR1cm4gY3VycmVudCBidWZmZXIKLSAgICAgICAgICAgIGlmIG5sIDwgMDoKLSAgICAgICAgICAgICAgICBzID0gc2VsZi5saW5lYnVmZmVyCi0gICAgICAgICAgICAgICAgc2VsZi5saW5lYnVmZmVyID0gYicnCi0gICAgICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgU2VhcmNoIGZvciB1bml2ZXJzYWwgbmV3bGluZXMgb3IgbGluZSBjaHVua3MuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZSBwYXR0ZXJuIHJldHVybnMgZWl0aGVyIGEgbGluZSBjaHVuayBvciBhIG5ld2xpbmUsIGJ1dCBub3QKKyAgICAgICAgICAgICMgYm90aC4gQ29tYmluZWQgd2l0aCBwZWVrKDIpLCB3ZSBhcmUgYXNzdXJlZCB0aGF0IHRoZSBzZXF1ZW5jZQorICAgICAgICAgICAgIyAnXHJcbicgaXMgYWx3YXlzIHJldHJpZXZlZCBjb21wbGV0ZWx5IGFuZCBuZXZlciBzcGxpdCBpbnRvCisgICAgICAgICAgICAjIHNlcGFyYXRlIG5ld2xpbmVzIC0gJ1xyJywgJ1xuJyBkdWUgdG8gY29pbmNpZGVudGFsIHJlYWRhaGVhZHMuCisgICAgICAgICAgICAjCisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuUEFUVEVSTi5zZWFyY2gocmVhZGFoZWFkKQorICAgICAgICAgICAgbmV3bGluZSA9IG1hdGNoLmdyb3VwKCduZXdsaW5lJykKKyAgICAgICAgICAgIGlmIG5ld2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5uZXdsaW5lcyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmVzID0gW10KKyAgICAgICAgICAgICAgICBpZiBuZXdsaW5lIG5vdCBpbiBzZWxmLm5ld2xpbmVzOgorICAgICAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmVzLmFwcGVuZChuZXdsaW5lKQorICAgICAgICAgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4obmV3bGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZSArIGInXG4nCiAKLSAgICAgICAgYnVmID0gc2VsZi5saW5lYnVmZmVyWzpubF0KLSAgICAgICAgc2VsZi5sYXN0ZGlzY2FyZCA9IHNlbGYubGluZWJ1ZmZlcltubDpubCArIG5sbGVuXQotICAgICAgICBzZWxmLmxpbmVidWZmZXIgPSBzZWxmLmxpbmVidWZmZXJbbmwgKyBubGxlbjpdCisgICAgICAgICAgICBjaHVuayA9IG1hdGNoLmdyb3VwKCdjaHVuaycpCisgICAgICAgICAgICBpZiBsaW1pdCA+PSAwOgorICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmtbOiBsaW1pdCAtIGxlbihsaW5lKV0KIAotICAgICAgICAjIGxpbmUgaXMgYWx3YXlzIHJldHVybmVkIHdpdGggXG4gYXMgbmV3bGluZSBjaGFyIChleGNlcHQgcG9zc2libHkKLSAgICAgICAgIyBmb3IgYSBmaW5hbCBpbmNvbXBsZXRlIGxpbmUgaW4gdGhlIGZpbGUsIHdoaWNoIGlzIGhhbmRsZWQgYWJvdmUpLgotICAgICAgICByZXR1cm4gYnVmICsgYiJcbiIKKyAgICAgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4oY2h1bmspCisgICAgICAgICAgICBsaW5lICs9IGNodW5rCiAKLSAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIHNpemVoaW50ID0gLTEpOgotICAgICAgICAiIiJSZXR1cm4gYSBsaXN0IHdpdGggYWxsIChmb2xsb3dpbmcpIGxpbmVzLiBUaGUgc2l6ZWhpbnQgcGFyYW1ldGVyCi0gICAgICAgIGlzIGlnbm9yZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiBwZWVrKHNlbGYsIG49MSk6CisgICAgICAgICIiIlJldHVybnMgYnVmZmVyZWQgYnl0ZXMgd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiIiIgorICAgICAgICBpZiBuID4gbGVuKHNlbGYuX3JlYWRidWZmZXIpIC0gc2VsZi5fb2Zmc2V0OgorICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnJlYWQobikKKyAgICAgICAgICAgIHNlbGYuX29mZnNldCAtPSBsZW4oY2h1bmspCisKKyAgICAgICAgIyBSZXR1cm4gdXAgdG8gNTEyIGJ5dGVzIHRvIHJlZHVjZSBhbGxvY2F0aW9uIG92ZXJoZWFkIGZvciB0aWdodCBsb29wcy4KKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0OiBzZWxmLl9vZmZzZXQgKyA1MTJdCisKKyAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKKyAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMuCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBOb25lLCBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4uCiAgICAgICAgICIiIgotICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBidWYgPSBiJycKKyAgICAgICAgaWYgbiBpcyBOb25lOgorICAgICAgICAgICAgbiA9IC0xCiAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBsaW5lID0gc2VsZi5yZWFkbGluZSgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobGluZSkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgaWYgbiA8IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYucmVhZDEobikKKyAgICAgICAgICAgIGVsaWYgbiA+IGxlbihidWYpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQxKG4gLSBsZW4oYnVmKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgaWYgbGVuKGRhdGEpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgorICAgICAgICAgICAgYnVmICs9IGRhdGEKIAogICAgIGRlZiBfdXBkYXRlX2NyYyhzZWxmLCBuZXdkYXRhLCBlb2YpOgogICAgICAgICAjIFVwZGF0ZSB0aGUgQ1JDIHVzaW5nIHRoZSBnaXZlbiBkYXRhLgpAQCAtNTg1LDg2ICs1OTUsNjcgQEAKICAgICAgICAgc2VsZi5fcnVubmluZ19jcmMgPSBjcmMzMihuZXdkYXRhLCBzZWxmLl9ydW5uaW5nX2NyYykgJiAweGZmZmZmZmZmCiAgICAgICAgICMgQ2hlY2sgdGhlIENSQyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCiAgICAgICAgIGlmIGVvZiBhbmQgc2VsZi5fcnVubmluZ19jcmMgIT0gc2VsZi5fZXhwZWN0ZWRfY3JjOgotICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiQmFkIENSQy0zMiBmb3IgZmlsZSAlciIgJSBzZWxmLm5hbWUpCisgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJCYWQgQ1JDLTMyIGZvciBmaWxlICVyIiAlIHNlbGYubmFtZSkKIAotICAgIGRlZiByZWFkKHNlbGYsIHNpemUgPSBOb25lKToKLSAgICAgICAgIyBhY3QgbGlrZSBmaWxlIG9iaiBhbmQgcmV0dXJuIGVtcHR5IHN0cmluZyBpZiBzaXplIGlzIDAKLSAgICAgICAgaWYgc2l6ZSA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIGInJworICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICAgICAgIiIiUmVhZCB1cCB0byBuIGJ5dGVzIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgogCi0gICAgICAgICMgZGV0ZXJtaW5lIHJlYWQgc2l6ZQotICAgICAgICBieXRlc1RvUmVhZCA9IHNlbGYuY29tcHJlc3Nfc2l6ZSAtIHNlbGYuYnl0ZXNfcmVhZAorICAgICAgICAjIFNpbXBsaWZ5IGFsZ29yaXRobSAoYnJhbmNoaW5nKSBieSB0cmFuc2Zvcm1pbmcgbmVnYXRpdmUgbiB0byBsYXJnZSBuLgorICAgICAgICBpZiBuIDwgMCBvciBuIGlzIE5vbmU6CisgICAgICAgICAgICBuID0gc2VsZi5NQVhfTgogCi0gICAgICAgICMgYWRqdXN0IHJlYWQgc2l6ZSBmb3IgZW5jcnlwdGVkIGZpbGVzIHNpbmNlIHRoZSBmaXJzdCAxMiBieXRlcwotICAgICAgICAjIGFyZSBmb3IgdGhlIGVuY3J5cHRpb24vcGFzc3dvcmQgaW5mb3JtYXRpb24KLSAgICAgICAgaWYgc2VsZi5kZWNyeXB0ZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBieXRlc1RvUmVhZCAtPSAxMgorICAgICAgICAjIEJ5dGVzIGF2YWlsYWJsZSBpbiByZWFkIGJ1ZmZlci4KKyAgICAgICAgbGVuX3JlYWRidWZmZXIgPSBsZW4oc2VsZi5fcmVhZGJ1ZmZlcikgLSBzZWxmLl9vZmZzZXQKIAotICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplID49IDA6Ci0gICAgICAgICAgICBpZiBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX1NUT1JFRDoKLSAgICAgICAgICAgICAgICBsciA9IGxlbihzZWxmLnJlYWRidWZmZXIpCi0gICAgICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBtaW4oYnl0ZXNUb1JlYWQsIHNpemUgLSBscikKLSAgICAgICAgICAgIGVsaWYgc2VsZi5jb21wcmVzc190eXBlID09IFpJUF9ERUZMQVRFRDoKLSAgICAgICAgICAgICAgICBpZiBsZW4oc2VsZi5yZWFkYnVmZmVyKSA+IHNpemU6Ci0gICAgICAgICAgICAgICAgICAgICMgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBmZXdlciBieXRlcyB0aGFuIHdlJ3ZlIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgIyBwdWxsZWQgdGhyb3VnaCB0aGUgZGVjb21wcmVzc29yOyBkb24ndCByZWFkIGFueSBtb3JlCi0gICAgICAgICAgICAgICAgICAgIGJ5dGVzVG9SZWFkID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgdXNlciB3aWxsIHVzZSB1cCB0aGUgYnVmZmVyLCBzbyByZWFkIHNvbWUgbW9yZQotICAgICAgICAgICAgICAgICAgICBsciA9IGxlbihzZWxmLnJhd2J1ZmZlcikKLSAgICAgICAgICAgICAgICAgICAgYnl0ZXNUb1JlYWQgPSBtaW4oYnl0ZXNUb1JlYWQsIHNlbGYuY29tcHJlYWRzaXplIC0gbHIpCisgICAgICAgICMgUmVhZCBmcm9tIGZpbGUuCisgICAgICAgIGlmIHNlbGYuX2NvbXByZXNzX2xlZnQgPiAwIGFuZCBuID4gbGVuX3JlYWRidWZmZXIgKyBsZW4oc2VsZi5fdW5jb25zdW1lZCk6CisgICAgICAgICAgICBuYnl0ZXMgPSBuIC0gbGVuX3JlYWRidWZmZXIgLSBsZW4oc2VsZi5fdW5jb25zdW1lZCkKKyAgICAgICAgICAgIG5ieXRlcyA9IG1heChuYnl0ZXMsIHNlbGYuTUlOX1JFQURfU0laRSkKKyAgICAgICAgICAgIG5ieXRlcyA9IG1pbihuYnl0ZXMsIHNlbGYuX2NvbXByZXNzX2xlZnQpCiAKLSAgICAgICAgIyBhdm9pZCByZWFkaW5nIHBhc3QgZW5kIG9mIGZpbGUgY29udGVudHMKLSAgICAgICAgaWYgYnl0ZXNUb1JlYWQgKyBzZWxmLmJ5dGVzX3JlYWQgPiBzZWxmLmNvbXByZXNzX3NpemU6Ci0gICAgICAgICAgICBieXRlc1RvUmVhZCA9IHNlbGYuY29tcHJlc3Nfc2l6ZSAtIHNlbGYuYnl0ZXNfcmVhZAorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGVvYmoucmVhZChuYnl0ZXMpCisgICAgICAgICAgICBzZWxmLl9jb21wcmVzc19sZWZ0IC09IGxlbihkYXRhKQogCi0gICAgICAgICMgdHJ5IHRvIHJlYWQgZnJvbSBmaWxlIChpZiBuZWNlc3NhcnkpCi0gICAgICAgIGlmIGJ5dGVzVG9SZWFkID4gMDoKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChieXRlc1RvUmVhZCkKLSAgICAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBsZW4oZGF0YSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnJhd2J1ZmZlciArPSBkYXRhCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgcHJpbnQocmVwcihzZWxmLmZpbGVvYmopLCByZXByKHNlbGYucmF3YnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgICByZXByKGRhdGEpKQotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBpZiBkYXRhIGFuZCBzZWxmLl9kZWNyeXB0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZGF0YSA9IGJ5dGVzKG1hcChzZWxmLl9kZWNyeXB0ZXIsIGRhdGEpKQogCi0gICAgICAgICAgICAjIGhhbmRsZSBjb250ZW50cyBvZiByYXcgYnVmZmVyCi0gICAgICAgICAgICBpZiBzZWxmLnJhd2J1ZmZlcjoKLSAgICAgICAgICAgICAgICBuZXdkYXRhID0gc2VsZi5yYXdidWZmZXIKLSAgICAgICAgICAgICAgICBzZWxmLnJhd2J1ZmZlciA9IGInJworICAgICAgICAgICAgaWYgc2VsZi5fY29tcHJlc3NfdHlwZSA9PSBaSVBfU1RPUkVEOgorICAgICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9jcmMoZGF0YSwgZW9mPShzZWxmLl9jb21wcmVzc19sZWZ0PT0wKSkKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWFkYnVmZmVyID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6XSArIGRhdGEKKyAgICAgICAgICAgICAgICBzZWxmLl9vZmZzZXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgUHJlcGFyZSBkZWZsYXRlZCBieXRlcyBmb3IgZGVjb21wcmVzc2lvbi4KKyAgICAgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkICs9IGRhdGEKIAotICAgICAgICAgICAgICAgICMgZGVjcnlwdCBuZXcgZGF0YSBpZiB3ZSB3ZXJlIGdpdmVuIGFuIG9iamVjdCB0byBoYW5kbGUgdGhhdAotICAgICAgICAgICAgICAgIGlmIG5ld2RhdGEgYW5kIHNlbGYuZGVjcnlwdGVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gYnl0ZXMobWFwKHNlbGYuZGVjcnlwdGVyLCBuZXdkYXRhKSkKKyAgICAgICAgIyBIYW5kbGUgdW5jb25zdW1lZCBkYXRhLgorICAgICAgICBpZiAobGVuKHNlbGYuX3VuY29uc3VtZWQpID4gMCBhbmQgbiA+IGxlbl9yZWFkYnVmZmVyIGFuZAorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfdHlwZSA9PSBaSVBfREVGTEFURUQpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKAorICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWQsCisgICAgICAgICAgICAgICAgbWF4KG4gLSBsZW5fcmVhZGJ1ZmZlciwgc2VsZi5NSU5fUkVBRF9TSVpFKQorICAgICAgICAgICAgKQogCi0gICAgICAgICAgICAgICAgIyBkZWNvbXByZXNzIG5ld2x5IHJlYWQgZGF0YSBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICBpZiBuZXdkYXRhIGFuZCBzZWxmLmNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgotICAgICAgICAgICAgICAgICAgICBuZXdkYXRhID0gc2VsZi5kYy5kZWNvbXByZXNzKG5ld2RhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmF3YnVmZmVyID0gc2VsZi5kYy51bmNvbnN1bWVkX3RhaWwKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5lb2YgYW5kIGxlbihzZWxmLnJhd2J1ZmZlcikgPT0gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgd2UncmUgb3V0IG9mIHJhdyBieXRlcyAoYm90aCBmcm9tIHRoZSBmaWxlIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgbG9jYWwgYnVmZmVyKTsgZmx1c2gganVzdCB0byBtYWtlIHN1cmUgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAjIGRlY29tcHJlc3NvciBpcyBkb25lCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdkYXRhICs9IHNlbGYuZGMuZmx1c2goKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBwcmV2ZW50IGRlY29tcHJlc3NvciBmcm9tIGJlaW5nIHVzZWQgYWdhaW4KLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGMgPSBOb25lCisgICAgICAgICAgICBzZWxmLl91bmNvbnN1bWVkID0gc2VsZi5fZGVjb21wcmVzc29yLnVuY29uc3VtZWRfdGFpbAorICAgICAgICAgICAgZW9mID0gbGVuKHNlbGYuX3VuY29uc3VtZWQpID09IDAgYW5kIHNlbGYuX2NvbXByZXNzX2xlZnQgPT0gMAorICAgICAgICAgICAgaWYgZW9mOgorICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzc29yLmZsdXNoKCkKIAotICAgICAgICAgICAgICAgIHNlbGYuX3VwZGF0ZV9jcmMobmV3ZGF0YSwgZW9mPSgKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb21wcmVzc19zaXplID09IHNlbGYuYnl0ZXNfcmVhZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucmF3YnVmZmVyKSA9PSAwKSkKLSAgICAgICAgICAgICAgICBzZWxmLnJlYWRidWZmZXIgKz0gbmV3ZGF0YQorICAgICAgICAgICAgc2VsZi5fdXBkYXRlX2NyYyhkYXRhLCBlb2Y9ZW9mKQorICAgICAgICAgICAgc2VsZi5fcmVhZGJ1ZmZlciA9IHNlbGYuX3JlYWRidWZmZXJbc2VsZi5fb2Zmc2V0Ol0gKyBkYXRhCisgICAgICAgICAgICBzZWxmLl9vZmZzZXQgPSAwCiAKLSAgICAgICAgIyByZXR1cm4gd2hhdCB0aGUgdXNlciBhc2tlZCBmb3IKLSAgICAgICAgaWYgc2l6ZSBpcyBOb25lIG9yIGxlbihzZWxmLnJlYWRidWZmZXIpIDw9IHNpemU6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5yZWFkYnVmZmVyCi0gICAgICAgICAgICBzZWxmLnJlYWRidWZmZXIgPSBiJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlYWRidWZmZXJbOnNpemVdCi0gICAgICAgICAgICBzZWxmLnJlYWRidWZmZXIgPSBzZWxmLnJlYWRidWZmZXJbc2l6ZTpdCi0KKyAgICAgICAgIyBSZWFkIGZyb20gYnVmZmVyLgorICAgICAgICBkYXRhID0gc2VsZi5fcmVhZGJ1ZmZlcltzZWxmLl9vZmZzZXQ6IHNlbGYuX29mZnNldCArIG5dCisgICAgICAgIHNlbGYuX29mZnNldCArPSBsZW4oZGF0YSkKICAgICAgICAgcmV0dXJuIGRhdGEKIAorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZW9iajoKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCiAKIGNsYXNzIFppcEZpbGU6CiAgICAgIiIiIENsYXNzIHdpdGggbWV0aG9kcyB0byBvcGVuLCByZWFkLCB3cml0ZSwgY2xvc2UsIGxpc3QgemlwIGZpbGVzLgpAQCAtNzM4LDcgKzcyOSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fUmVhbEdldENvbnRlbnRzKCkKICAgICAgICAgICAgICAgICAjIHNlZWsgdG8gc3RhcnQgb2YgZGlyZWN0b3J5IGFuZCBvdmVyd3JpdGUKICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoc2VsZi5zdGFydF9kaXIsIDApCi0gICAgICAgICAgICBleGNlcHQgQmFkWmlwZmlsZToKKyAgICAgICAgICAgIGV4Y2VwdCBCYWRaaXBGaWxlOgogICAgICAgICAgICAgICAgICMgZmlsZSBpcyBub3QgYSB6aXAgZmlsZSwganVzdCBhcHBlbmQKICAgICAgICAgICAgICAgICBzZWxmLmZwLnNlZWsoMCwgMikKIApAQCAtNzUxLDEyICs3NDIsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLmZwID0gTm9uZQogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdNb2RlIG11c3QgYmUgInIiLCAidyIgb3IgImEiJykKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIF9HZXRDb250ZW50cyhzZWxmKToKICAgICAgICAgIiIiUmVhZCB0aGUgZGlyZWN0b3J5LCBtYWtpbmcgc3VyZSB3ZSBjbG9zZSB0aGUgZmlsZSBpZiB0aGUgZm9ybWF0CiAgICAgICAgIGlzIGJhZC4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5fUmVhbEdldENvbnRlbnRzKCkKLSAgICAgICAgZXhjZXB0IEJhZFppcGZpbGU6CisgICAgICAgIGV4Y2VwdCBCYWRaaXBGaWxlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVQYXNzZWQ6CiAgICAgICAgICAgICAgICAgc2VsZi5mcC5jbG9zZSgpCiAgICAgICAgICAgICAgICAgc2VsZi5mcCA9IE5vbmUKQEAgLTc2OCw5ICs3NjUsOSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBlbmRyZWMgPSBfRW5kUmVjRGF0YShmcCkKICAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBCYWRaaXBmaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKKyAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQogICAgICAgICBpZiBub3QgZW5kcmVjOgotICAgICAgICAgICAgcmFpc2UgQmFkWmlwZmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCisgICAgICAgICAgICByYWlzZSBCYWRaaXBGaWxlKCJGaWxlIGlzIG5vdCBhIHppcCBmaWxlIikKICAgICAgICAgaWYgc2VsZi5kZWJ1ZyA+IDE6CiAgICAgICAgICAgICBwcmludChlbmRyZWMpCiAgICAgICAgIHNpemVfY2QgPSBlbmRyZWNbX0VDRF9TSVpFXSAgICAgICAgICAgICAjIGJ5dGVzIGluIGNlbnRyYWwgZGlyZWN0b3J5CkBAIC03OTUsNyArNzkyLDcgQEAKICAgICAgICAgd2hpbGUgdG90YWwgPCBzaXplX2NkOgogICAgICAgICAgICAgY2VudGRpciA9IGZwLnJlYWQoc2l6ZUNlbnRyYWxEaXIpCiAgICAgICAgICAgICBpZiBjZW50ZGlyWzA6NF0gIT0gc3RyaW5nQ2VudHJhbERpcjoKLSAgICAgICAgICAgICAgICByYWlzZSBCYWRaaXBmaWxlKCJCYWQgbWFnaWMgbnVtYmVyIGZvciBjZW50cmFsIGRpcmVjdG9yeSIpCisgICAgICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiQmFkIG1hZ2ljIG51bWJlciBmb3IgY2VudHJhbCBkaXJlY3RvcnkiKQogICAgICAgICAgICAgY2VudGRpciA9IHN0cnVjdC51bnBhY2soc3RydWN0Q2VudHJhbERpciwgY2VudGRpcikKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWcgPiAyOgogICAgICAgICAgICAgICAgIHByaW50KGNlbnRkaXIpCkBAIC04NjYsNyArODYzLDcgQEAKICAgICAgICAgICAgICAgICBmID0gc2VsZi5vcGVuKHppbmZvLmZpbGVuYW1lLCAiciIpCiAgICAgICAgICAgICAgICAgd2hpbGUgZi5yZWFkKGNodW5rX3NpemUpOiAgICAgIyBDaGVjayBDUkMtMzIKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZXhjZXB0IEJhZFppcGZpbGU6CisgICAgICAgICAgICBleGNlcHQgQmFkWmlwRmlsZToKICAgICAgICAgICAgICAgICByZXR1cm4gemluZm8uZmlsZW5hbWUKIAogICAgIGRlZiBnZXRpbmZvKHNlbGYsIG5hbWUpOgpAQCAtODg5LDcgKzg4Niw4IEBACiAKICAgICBkZWYgcmVhZChzZWxmLCBuYW1lLCBwd2Q9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiBmaWxlIGJ5dGVzIChhcyBhIHN0cmluZykgZm9yIG5hbWUuIiIiCi0gICAgICAgIHJldHVybiBzZWxmLm9wZW4obmFtZSwgInIiLCBwd2QpLnJlYWQoKQorICAgICAgICB3aXRoIHNlbGYub3BlbihuYW1lLCAiciIsIHB3ZCkgYXMgZnA6CisgICAgICAgICAgICByZXR1cm4gZnAucmVhZCgpCiAKICAgICBkZWYgb3BlbihzZWxmLCBuYW1lLCBtb2RlPSJyIiwgcHdkPU5vbmUpOgogICAgICAgICAiIiJSZXR1cm4gZmlsZS1saWtlIG9iamVjdCBmb3IgJ25hbWUnLiIiIgpAQCAtOTE0LDIyICs5MTIsMzQgQEAKICAgICAgICAgICAgIHppbmZvID0gbmFtZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBHZXQgaW5mbyBvYmplY3QgZm9yIG5hbWUKLSAgICAgICAgICAgIHppbmZvID0gc2VsZi5nZXRpbmZvKG5hbWUpCi0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB6aW5mbyA9IHNlbGYuZ2V0aW5mbyhuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlUGFzc2VkOgorICAgICAgICAgICAgICAgICAgICB6ZWZfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgemVmX2ZpbGUuc2Vlayh6aW5mby5oZWFkZXJfb2Zmc2V0LCAwKQogCiAgICAgICAgICMgU2tpcCB0aGUgZmlsZSBoZWFkZXI6CiAgICAgICAgIGZoZWFkZXIgPSB6ZWZfZmlsZS5yZWFkKHNpemVGaWxlSGVhZGVyKQogICAgICAgICBpZiBmaGVhZGVyWzA6NF0gIT0gc3RyaW5nRmlsZUhlYWRlcjoKLSAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoIkJhZCBtYWdpYyBudW1iZXIgZm9yIGZpbGUgaGVhZGVyIikKKyAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkJhZCBtYWdpYyBudW1iZXIgZm9yIGZpbGUgaGVhZGVyIikKIAogICAgICAgICBmaGVhZGVyID0gc3RydWN0LnVucGFjayhzdHJ1Y3RGaWxlSGVhZGVyLCBmaGVhZGVyKQogICAgICAgICBmbmFtZSA9IHplZl9maWxlLnJlYWQoZmhlYWRlcltfRkhfRklMRU5BTUVfTEVOR1RIXSkKICAgICAgICAgaWYgZmhlYWRlcltfRkhfRVhUUkFfRklFTERfTEVOR1RIXToKICAgICAgICAgICAgIHplZl9maWxlLnJlYWQoZmhlYWRlcltfRkhfRVhUUkFfRklFTERfTEVOR1RIXSkKIAotICAgICAgICBpZiBmbmFtZSAhPSB6aW5mby5vcmlnX2ZpbGVuYW1lLmVuY29kZSgidXRmLTgiKToKLSAgICAgICAgICAgIHJhaXNlIEJhZFppcGZpbGUoCisgICAgICAgIGlmIHppbmZvLmZsYWdfYml0cyAmIDB4ODAwOgorICAgICAgICAgICAgIyBVVEYtOCBmaWxlbmFtZQorICAgICAgICAgICAgZm5hbWVfc3RyID0gZm5hbWUuZGVjb2RlKCJ1dGYtOCIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmbmFtZV9zdHIgPSBmbmFtZS5kZWNvZGUoImNwNDM3IikKKworICAgICAgICBpZiBmbmFtZV9zdHIgIT0gemluZm8ub3JpZ19maWxlbmFtZToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlUGFzc2VkOgorICAgICAgICAgICAgICAgIHplZl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoCiAgICAgICAgICAgICAgICAgICAnRmlsZSBuYW1lIGluIGRpcmVjdG9yeSAlciBhbmQgaGVhZGVyICVyIGRpZmZlci4nCiAgICAgICAgICAgICAgICAgICAlICh6aW5mby5vcmlnX2ZpbGVuYW1lLCBmbmFtZSkpCiAKQEAgLTk0MCw2ICs5NTAsOCBAQAogICAgICAgICAgICAgaWYgbm90IHB3ZDoKICAgICAgICAgICAgICAgICBwd2QgPSBzZWxmLnB3ZAogICAgICAgICAgICAgaWYgbm90IHB3ZDoKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZmlsZVBhc3NlZDoKKyAgICAgICAgICAgICAgICAgICAgemVmX2ZpbGUuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiRmlsZSAlcyBpcyBlbmNyeXB0ZWQsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIHJlcXVpcmVkIGZvciBleHRyYWN0aW9uIiAlIG5hbWUpCiAKQEAgLTk1OCwxOCArOTcwLDEyIEBACiAgICAgICAgICAgICAgICAgIyBjb21wYXJlIGFnYWluc3QgdGhlIENSQyBvdGhlcndpc2UKICAgICAgICAgICAgICAgICBjaGVja19ieXRlID0gKHppbmZvLkNSQyA+PiAyNCkgJiAweGZmCiAgICAgICAgICAgICBpZiBoWzExXSAhPSBjaGVja19ieXRlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlUGFzc2VkOgorICAgICAgICAgICAgICAgICAgICB6ZWZfZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJCYWQgcGFzc3dvcmQgZm9yIGZpbGUiLCBuYW1lKQogCi0gICAgICAgICMgYnVpbGQgYW5kIHJldHVybiBhIFppcEV4dEZpbGUKLSAgICAgICAgaWYgemQgaXMgTm9uZToKLSAgICAgICAgICAgIHplZiA9IFppcEV4dEZpbGUoemVmX2ZpbGUsIHppbmZvKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgemVmID0gWmlwRXh0RmlsZSh6ZWZfZmlsZSwgemluZm8sIHpkKQotCi0gICAgICAgICMgc2V0IHVuaXZlcnNhbCBuZXdsaW5lcyBvbiBaaXBFeHRGaWxlIGlmIG5lY2Vzc2FyeQotICAgICAgICBpZiAiVSIgaW4gbW9kZToKLSAgICAgICAgICAgIHplZi5zZXRfdW5pdl9uZXdsaW5lcyhUcnVlKQotICAgICAgICByZXR1cm4gemVmCisgICAgICAgIHJldHVybiBaaXBFeHRGaWxlKHplZl9maWxlLCBtb2RlLCB6aW5mbywgemQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2ZpbGVvYmo9bm90IHNlbGYuX2ZpbGVQYXNzZWQpCiAKICAgICBkZWYgZXh0cmFjdChzZWxmLCBtZW1iZXIsIHBhdGg9Tm9uZSwgcHdkPU5vbmUpOgogICAgICAgICAiIiJFeHRyYWN0IGEgbWVtYmVyIGZyb20gdGhlIGFyY2hpdmUgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksCkBAIC0xMTM4LDcgKzExNDQsNyBAQAogICAgICAgICBzZWxmLmZpbGVsaXN0LmFwcGVuZCh6aW5mbykKICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCiAKLSAgICBkZWYgd3JpdGVzdHIoc2VsZiwgemluZm9fb3JfYXJjbmFtZSwgZGF0YSk6CisgICAgZGVmIHdyaXRlc3RyKHNlbGYsIHppbmZvX29yX2FyY25hbWUsIGRhdGEsIGNvbXByZXNzX3R5cGU9Tm9uZSk6CiAgICAgICAgICIiIldyaXRlIGEgZmlsZSBpbnRvIHRoZSBhcmNoaXZlLiAgVGhlIGNvbnRlbnRzIGlzICdkYXRhJywgd2hpY2gKICAgICAgICAgbWF5IGJlIGVpdGhlciBhICdzdHInIG9yIGEgJ2J5dGVzJyBpbnN0YW5jZTsgaWYgaXQgaXMgYSAnc3RyJywKICAgICAgICAgaXQgaXMgZW5jb2RlZCBhcyBVVEYtOCBmaXJzdC4KQEAgLTExNjAsNiArMTE2Niw5IEBACiAKICAgICAgICAgemluZm8uZmlsZV9zaXplID0gbGVuKGRhdGEpICAgICAgICAgICAgIyBVbmNvbXByZXNzZWQgc2l6ZQogICAgICAgICB6aW5mby5oZWFkZXJfb2Zmc2V0ID0gc2VsZi5mcC50ZWxsKCkgICAgIyBTdGFydCBvZiBoZWFkZXIgZGF0YQorICAgICAgICBpZiBjb21wcmVzc190eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IGNvbXByZXNzX3R5cGUKKwogICAgICAgICBzZWxmLl93cml0ZWNoZWNrKHppbmZvKQogICAgICAgICBzZWxmLl9kaWRNb2RpZnkgPSBUcnVlCiAgICAgICAgIHppbmZvLkNSQyA9IGNyYzMyKGRhdGEpICYgMHhmZmZmZmZmZiAgICAgICAjIENSQy0zMiBjaGVja3N1bQpAQCAtMTI5OCw2ICsxMzA3LDEyIEBACiBjbGFzcyBQeVppcEZpbGUoWmlwRmlsZSk6CiAgICAgIiIiQ2xhc3MgdG8gY3JlYXRlIFpJUCBhcmNoaXZlcyB3aXRoIFB5dGhvbiBsaWJyYXJ5IGZpbGVzIGFuZCBwYWNrYWdlcy4iIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwKKyAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1GYWxzZSwgb3B0aW1pemU9LTEpOgorICAgICAgICBaaXBGaWxlLl9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9bW9kZSwgY29tcHJlc3Npb249Y29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1hbGxvd1ppcDY0KQorICAgICAgICBzZWxmLl9vcHRpbWl6ZSA9IG9wdGltaXplCisKICAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIpOgogICAgICAgICAiIiJBZGQgYWxsIGZpbGVzIGZyb20gInBhdGhuYW1lIiB0byB0aGUgWklQIGFyY2hpdmUuCiAKQEAgLTEzNzAsMjUgKzEzODUsNjQgQEAKICAgICAgICAgYXJjaGl2ZSBuYW1lLCBjb21waWxpbmcgaWYgbmVjZXNzYXJ5LiAgRm9yIGV4YW1wbGUsIGdpdmVuCiAgICAgICAgIC9weXRob24vbGliL3N0cmluZywgcmV0dXJuICgvcHl0aG9uL2xpYi9zdHJpbmcucHljLCBzdHJpbmcpLgogICAgICAgICAiIiIKKyAgICAgICAgZGVmIF9jb21waWxlKGZpbGUsIG9wdGltaXplPS0xKToKKyAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCisgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgorICAgICAgICAgICAgICAgIHByaW50KCJDb21waWxpbmciLCBmaWxlKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShmaWxlLCBkb3JhaXNlPVRydWUsIG9wdGltaXplPW9wdGltaXplKQorICAgICAgICAgICAgZXhjZXB0IHB5X2NvbXBpbGUuUHlDb21waWxlRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICAgICAgcHJpbnQoZXJyLm1zZykKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKICAgICAgICAgZmlsZV9weSAgPSBwYXRobmFtZSArICIucHkiCiAgICAgICAgIGZpbGVfcHljID0gcGF0aG5hbWUgKyAiLnB5YyIKICAgICAgICAgZmlsZV9weW8gPSBwYXRobmFtZSArICIucHlvIgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3B5bykgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVfcHlvKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lOgotICAgICAgICAgICAgZm5hbWUgPSBmaWxlX3B5byAgICAjIFVzZSAucHlvIGZpbGUKLSAgICAgICAgZWxpZiBub3Qgb3MucGF0aC5pc2ZpbGUoZmlsZV9weWMpIG9yIFwKLSAgICAgICAgICAgICBvcy5zdGF0KGZpbGVfcHljKS5zdF9tdGltZSA8IG9zLnN0YXQoZmlsZV9weSkuc3RfbXRpbWU6Ci0gICAgICAgICAgICBpbXBvcnQgcHlfY29tcGlsZQotICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiQ29tcGlsaW5nIiwgZmlsZV9weSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZV9weSwgZmlsZV9weWMsIE5vbmUsIFRydWUpCi0gICAgICAgICAgICBleGNlcHQgcHlfY29tcGlsZS5QeUNvbXBpbGVFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgcHJpbnQoZXJyLm1zZykKLSAgICAgICAgICAgIGZuYW1lID0gZmlsZV9weWMKKyAgICAgICAgcHljYWNoZV9weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgVHJ1ZSkKKyAgICAgICAgcHljYWNoZV9weW8gPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9weSwgRmFsc2UpCisgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IC0xOgorICAgICAgICAgICAgIyBsZWdhY3kgbW9kZTogdXNlIHdoYXRldmVyIGZpbGUgaXMgcHJlc2VudAorICAgICAgICAgICAgaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHlvKSBhbmQKKyAgICAgICAgICAgICAgICBvcy5zdGF0KGZpbGVfcHlvKS5zdF9tdGltZSA+PSBvcy5zdGF0KGZpbGVfcHkpLnN0X210aW1lKToKKyAgICAgICAgICAgICAgICAjIFVzZSAucHlvIGZpbGUuCisgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZuYW1lID0gZmlsZV9weW8KKyAgICAgICAgICAgIGVsaWYgKG9zLnBhdGguaXNmaWxlKGZpbGVfcHljKSBhbmQKKyAgICAgICAgICAgICAgICAgIG9zLnN0YXQoZmlsZV9weWMpLnN0X210aW1lID49IG9zLnN0YXQoZmlsZV9weSkuc3RfbXRpbWUpOgorICAgICAgICAgICAgICAgICMgVXNlIC5weWMgZmlsZS4KKyAgICAgICAgICAgICAgICBhcmNuYW1lID0gZm5hbWUgPSBmaWxlX3B5YworICAgICAgICAgICAgZWxpZiAob3MucGF0aC5pc2ZpbGUocHljYWNoZV9weWMpIGFuZAorICAgICAgICAgICAgICAgICAgb3Muc3RhdChweWNhY2hlX3B5Yykuc3RfbXRpbWUgPj0gb3Muc3RhdChmaWxlX3B5KS5zdF9tdGltZSk6CisgICAgICAgICAgICAgICAgIyBVc2UgdGhlIF9fcHljYWNoZV9fLyoucHljIGZpbGUsIGJ1dCB3cml0ZSBpdCB0byB0aGUgbGVnYWN5IHB5YworICAgICAgICAgICAgICAgICMgZmlsZSBuYW1lIGluIHRoZSBhcmNoaXZlLgorICAgICAgICAgICAgICAgIGZuYW1lID0gcHljYWNoZV9weWMKKyAgICAgICAgICAgICAgICBhcmNuYW1lID0gZmlsZV9weWMKKyAgICAgICAgICAgIGVsaWYgKG9zLnBhdGguaXNmaWxlKHB5Y2FjaGVfcHlvKSBhbmQKKyAgICAgICAgICAgICAgICAgIG9zLnN0YXQocHljYWNoZV9weW8pLnN0X210aW1lID49IG9zLnN0YXQoZmlsZV9weSkuc3RfbXRpbWUpOgorICAgICAgICAgICAgICAgICMgVXNlIHRoZSBfX3B5Y2FjaGVfXy8qLnB5byBmaWxlLCBidXQgd3JpdGUgaXQgdG8gdGhlIGxlZ2FjeSBweW8KKyAgICAgICAgICAgICAgICAjIGZpbGUgbmFtZSBpbiB0aGUgYXJjaGl2ZS4KKyAgICAgICAgICAgICAgICBmbmFtZSA9IHB5Y2FjaGVfcHlvCisgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHlvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgQ29tcGlsZSBweSBpbnRvIFBFUCAzMTQ3IHB5YyBmaWxlLgorICAgICAgICAgICAgICAgIGlmIF9jb21waWxlKGZpbGVfcHkpOgorICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IChweWNhY2hlX3B5YyBpZiBfX2RlYnVnX18gZWxzZSBweWNhY2hlX3B5bykKKyAgICAgICAgICAgICAgICAgICAgYXJjbmFtZSA9IChmaWxlX3B5YyBpZiBfX2RlYnVnX18gZWxzZSBmaWxlX3B5bykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmbmFtZSA9IGFyY25hbWUgPSBmaWxlX3B5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmbmFtZSA9IGZpbGVfcHljCi0gICAgICAgIGFyY2hpdmVuYW1lID0gb3MucGF0aC5zcGxpdChmbmFtZSlbMV0KKyAgICAgICAgICAgICMgbmV3IG1vZGU6IHVzZSBnaXZlbiBvcHRpbWl6YXRpb24gbGV2ZWwKKyAgICAgICAgICAgIGlmIHNlbGYuX29wdGltaXplID09IDA6CisgICAgICAgICAgICAgICAgZm5hbWUgPSBweWNhY2hlX3B5YworICAgICAgICAgICAgICAgIGFyY25hbWUgPSBmaWxlX3B5YworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmbmFtZSA9IHB5Y2FjaGVfcHlvCisgICAgICAgICAgICAgICAgYXJjbmFtZSA9IGZpbGVfcHlvCisgICAgICAgICAgICBpZiBub3QgKG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChmbmFtZSkuc3RfbXRpbWUgPj0gb3Muc3RhdChmaWxlX3B5KS5zdF9tdGltZSk6CisgICAgICAgICAgICAgICAgaWYgbm90IF9jb21waWxlKGZpbGVfcHksIG9wdGltaXplPXNlbGYuX29wdGltaXplKToKKyAgICAgICAgICAgICAgICAgICAgZm5hbWUgPSBhcmNuYW1lID0gZmlsZV9weQorICAgICAgICBhcmNoaXZlbmFtZSA9IG9zLnBhdGguc3BsaXQoYXJjbmFtZSlbMV0KICAgICAgICAgaWYgYmFzZW5hbWU6CiAgICAgICAgICAgICBhcmNoaXZlbmFtZSA9ICIlcy8lcyIgJSAoYmFzZW5hbWUsIGFyY2hpdmVuYW1lKQogICAgICAgICByZXR1cm4gKGZuYW1lLCBhcmNoaXZlbmFtZSkKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0IGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKaW5kZXggMGYxYWViNS4uZGUyZjVjYiAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKKysrIGIvTWFjL0J1aWxkU2NyaXB0L1JFQURNRS50eHQKQEAgLTEsNzggKzEsMTQ3IEBACi1CdWlsZGluZyBhIE1hY1B5dGhvbiBkaXN0cmlidXRpb24KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQnVpbGRpbmcgYSBQeXRob24gTWFjIE9TIFggZGlzdHJpYnV0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotVGhlIGBgYnVpbGQtaW5zdGFsbC5weWBgIHNjcmlwdCBjcmVhdGVzIE1hY1B5dGhvbiBkaXN0cmlidXRpb25zLCBpbmNsdWRpbmcKLXNsZWVweWNhdCBkYjQsIHNxbGl0ZTMgYW5kIHJlYWRsaW5lIHN1cHBvcnQuICBJdCBidWlsZHMgYSBjb21wbGV0ZSAKK1RoZSBgYGJ1aWxkLWluc3RhbGwucHlgYCBzY3JpcHQgY3JlYXRlcyBQeXRob24gZGlzdHJpYnV0aW9ucywgaW5jbHVkaW5nCitjZXJ0YWluIHRoaXJkLXBhcnR5IGxpYnJhcmllcyBhcyBuZWNlc3NhcnkuICBJdCBidWlsZHMgYSBjb21wbGV0ZSAKIGZyYW1ld29yay1iYXNlZCBQeXRob24gb3V0LW9mLXRyZWUsIGluc3RhbGxzIGl0IGluIGEgZnVubnkgcGxhY2Ugd2l0aCAKICRERVNUUk9PVCwgbWFzc2FnZXMgdGhhdCBpbnN0YWxsYXRpb24gdG8gcmVtb3ZlIC5weWMgZmlsZXMgYW5kIHN1Y2gsIGNyZWF0ZXMgCiBhbiBJbnN0YWxsZXIgcGFja2FnZSBmcm9tIHRoZSBpbnN0YWxsYXRpb24gcGx1cyBvdGhlciBmaWxlcyBpbiBgYHJlc291cmNlc2BgIAogYW5kIGBgc2NyaXB0c2BgIGFuZCBwbGFjZWQgdGhhdCBvbiBhIGBgLmRtZ2BgIGRpc2sgaW1hZ2UuCiAKLVByZXJlcXVpc2l0ZXMKLS0tLS0tLS0tLS0tLS0KK0FzIG9mIFB5dGhvbiAyLjcueCBhbmQgMy4yLCBQU0YgcHJhY3RpY2UgaXMgdG8gYnVpbGQgdHdvIGluc3RhbGxlciB2YXJpYW50cworZm9yIGVhY2ggcmVsZWFzZToKIAotKiBBIE1hY09TIFggMTAuNCAob3IgbGF0ZXIpCisxLiAgMzItYml0LW9ubHksIGkzODYgYW5kIFBQQyB1bml2ZXJzYWwsIGNhcGFibGUgb24gcnVubmluZyBvbiBhbGwgbWFjaGluZXMKKyAgICBzdXBwb3J0ZWQgYnkgTWFjIE9TIFggMTAuMy45IHRocm91Z2ggKGF0IGxlYXN0KSAxMC42OjoKIAotKiBYQ29kZSAyLjIgKG9yIGxhdGVyKSwgd2l0aCB0aGUgdW5pdmVyc2FsIFNESworICAgICAgICBweXRob24gYnVpbGQtaW5zdGFsbGVyLnB5IFwKKyAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCisgICAgICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz0zMi1iaXQgXAorICAgICAgICAgICAgLS1kZXAtdGFyZ2V0PTEwLjMgCisgICAgICAgICAgICAjIFRoZXNlIGFyZSB0aGUgY3VycmVudCBkZWZhdWx0IG9wdGlvbnMKIAotKiBObyBGaW5rIChpbiBgYC9zd2BgKSBvciBEYXJ3aW5Qb3J0cyAoaW4gYGAvb3B0L2xvY2FsYGApLCB0aG9zZSBjb3VsZAorICAgIC0gYnVpbGRzIHRoZSBmb2xsb3dpbmcgdGhpcmQtcGFydHkgbGlicmFyaWVzCisKKyAgICAgICAgKiBCemlwMgorICAgICAgICAqIFpsaWIgMS4yLjMKKyAgICAgICAgKiBHTlUgUmVhZGxpbmUgKEdQTCkKKyAgICAgICAgKiBTUUxpdGUgMworICAgICAgICAqIE5DdXJzZXMKKyAgICAgICAgKiBPcmFjbGUgU2xlZXB5Y2F0IERCIDQuOCAoUHl0aG9uIDIueCBvbmx5KQorCisgICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBgYFRjbC9UayA4LjRgYCAoY3VycmVudGx5IDguNC4xOSkgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZworCisgICAgLSBjdXJyZW50IHRhcmdldCBidWlsZCBlbnZpcm9ubWVudDoKKyAgICAgICAgCisgICAgICAgICogTWFjIE9TIFggMTAuNS44IFBQQyBvciBJbnRlbAorICAgICAgICAqIFhjb2RlIDMuMS40IChvciBsYXRlcikKKyAgICAgICAgKiBgYE1hY09TWDEwLjR1YGAgU0RLIChsYXRlciBTREtzIGRvIG5vdCBzdXBwb3J0IFBQQyBHMyBwcm9jZXNzb3JzKQorICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjNgYAorICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMGBgCisgICAgICAgICogUHl0aG9uIDIubiAobiA+PSA0KSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorCisgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgorCisgICAgICAgICogTWFjIE9TIFggMTAuNC4xMSB3aXRoIFhjb2RlIDIuNQorICAgICAgICAqIE1hYyBPUyBYIDEwLjYuNiB3aXRoIFhjb2RlIDMuMi41CisgICAgICAgICAgICAtIG5lZWQgdG8gY2hhbmdlIGBgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrL1ZlcnNpb24vQ3VycmVudGBgIHRvIGBgOC40YGAKKworMi4gIDY0LWJpdCAvIDMyLWJpdCwgeDg2XzY0IGFuZCBpMzg2IHVuaXZlcnNhbCwgZm9yIE9TIFggMTAuNiAoYW5kIGxhdGVyKTo6CisKKyAgICAgICAgcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgICAgICAtLXNkay1wYXRoPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC42LnNkayBcCisgICAgICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz1pbnRlbCBcCisgICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuNgorCisgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKKyAgICAKKyAgICAgICAgKiByZWFkbGluZSBtb2R1bGUgbGlua3Mgd2l0aCBBcHBsZSBCU0QgZWRpdGxpbmUgKGxpYmVkaXQpCisgICAgICAgICogYnVpbGRzIE9yYWNsZSBTbGVlcHljYXQgREIgNC44IChQeXRob24gMi54IG9ubHkpCisKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuOSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKworICAgIC0gY3VycmVudCB0YXJnZXQgYnVpbGQgZW52aXJvbm1lbnQ6CisgICAgICAgIAorICAgICAgICAqIE1hYyBPUyBYIDEwLjYuNiAob3IgbGF0ZXIpCisgICAgICAgICogWGNvZGUgMy4yLjUgKG9yIGxhdGVyKQorICAgICAgICAqIGBgTWFjT1NYMTAuNmBgIFNESworICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjZgYAorICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMmBgCisgICAgICAgICogUHl0aG9uIDIubiAobiA+PSA0KSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorCisgICAgLSBhbHRlcm5hdGUgYnVpbGQgZW52aXJvbm1lbnRzOgorCisgICAgICAgICogbm9uZQorCisKK0dlbmVyYWwgUHJlcmVxdWlzaXRlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogTm8gRmluayAoaW4gYGAvc3dgYCkgb3IgTWFjUG9ydHMgKGluIGBgL29wdC9sb2NhbGBgKSBvciBvdGhlciBsb2NhbAorICBsaWJyYXJpZXMgb3IgdXRpbGl0aWVzIChpbiBgYC91c3IvbG9jYWxgYCkgYXMgdGhleSBjb3VsZAogICBpbnRlcmZlcmUgd2l0aCB0aGUgYnVpbGQuCiAKLSogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSByZWxlYXNlIG11c3QgYmUgYXZhaWxhYmxlIG9uIHB5dGhvbi5vcmcKKyogVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSByZWxlYXNlIGlzIGJ1aWx0IHVzaW5nIFNwaGlueAogICBiZWNhdXNlIGl0IGlzIGluY2x1ZGVkIGluIHRoZSBpbnN0YWxsZXIuCiAKKyogSXQgaXMgc2FmZXN0IHRvIHN0YXJ0IGVhY2ggdmFyaWFudCBidWlsZCB3aXRoIGFuIGVtcHR5IHNvdXJjZSBkaXJlY3RvcnkKKyAgcG9wdWxhdGVkIHdpdGggYSBmcmVzaCBjb3B5IG9mIHRoZSB1bnRhcnJlZCBzb3VyY2UuCisKIAogVGhlIFJlY2lwZQogLS0tLS0tLS0tLQogCi1IZXJlIGFyZSB0aGUgc3RlcHMgeW91IG5lZWQgdG8gZm9sbG93IHRvIGJ1aWxkIGEgTWFjUHl0aG9uIGluc3RhbGxlcjoKK0hlcmUgYXJlIHRoZSBzdGVwcyB5b3UgbmVlZCB0byBmb2xsb3cgdG8gYnVpbGQgYSBQeXRob24gaW5zdGFsbGVyOgogCi0qICBSdW4gYGAuL2J1aWxkLWluc3RhbGxlci5weWBgLiBPcHRpb25hbGx5IHlvdSBjYW4gcGFzcyBhIG51bWJlciBvZiBhcmd1bWVudHMKLSAgIHRvIHNwZWNpZnkgbG9jYXRpb25zIG9mIHZhcmlvdXMgZmlsZXMuIFBsZWFzZSBzZWUgdGhlIHRvcCBvZgorKiBSdW4gYGBidWlsZC1pbnN0YWxsZXIucHlgYC4gT3B0aW9uYWxseSB5b3UgY2FuIHBhc3MgYSBudW1iZXIgb2YgYXJndW1lbnRzCisgIHRvIHNwZWNpZnkgbG9jYXRpb25zIG9mIHZhcmlvdXMgZmlsZXMuIFBsZWFzZSBzZWUgdGhlIHRvcCBvZgogICBgYGJ1aWxkLWluc3RhbGxlci5weWBgIGZvciBpdHMgdXNhZ2UuCiAKLSAgUnVubmluZyB0aGlzIHNjcmlwdCB0YWtlcyBzb21lIHRpbWUsIEkgd2lsbCBub3Qgb25seSBidWlsZCBQeXRob24gaXRzZWxmCisgIFJ1bm5pbmcgdGhpcyBzY3JpcHQgdGFrZXMgc29tZSB0aW1lLCBpdCB3aWxsIG5vdCBvbmx5IGJ1aWxkIFB5dGhvbiBpdHNlbGYKICAgYnV0IGFsc28gc29tZSAzdGgtcGFydHkgbGlicmFyaWVzIHRoYXQgYXJlIG5lZWRlZCBmb3IgZXh0ZW5zaW9ucy4KIAogKiBXaGVuIGRvbmUgdGhlIHNjcmlwdCB3aWxsIHRlbGwgeW91IHdoZXJlIHRoZSBETUcgaW1hZ2UgaXMgKGJ5IGRlZmF1bHQKICAgc29tZXdoZXJlIGluIGBgL3RtcC9fcHlgYCkuCiAKLUJ1aWxkaW5nIGEgNC13YXkgdW5pdmVyc2FsIGluc3RhbGxlcgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCitCdWlsZGluZyBvdGhlciB1bml2ZXJzYWwgaW5zdGFsbGVycworLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZCBhIDQtd2F5IHVuaXZlcnNhbCBpbnN0YWxsZXIgdGhhdCBydW5zIG9uIAotT1NYIExlb3BhcmQgb3IgbGF0ZXI6OgorT1MgWCBMZW9wYXJkIG9yIGxhdGVyOjoKIAotICAkIC4vYnVpbGQtaW5zdGFsbGVyLnB5IC0tZGVwLXRhcmdldD0xMC41IC0tdW5pdmVyc2FsLWFyY2hzPWFsbCAtLXNkaz0vCisgIHB5dGhvbiAyLjYgL2J1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC0tZGVwLXRhcmdldD0xMC41CisgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPWFsbAorICAgICAgICAtLXNkay1wYXRoPS9EZXZlbG9wZXIvU0RLcy9NYWNPU1gxMC41LnNkawogCi1UaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGlzIDEwLjUgKG9yIGxhdGVyKSwgYW5kIGhlbmNlCi1hbHNvIHRoYXQgeW91ciBidWlsZGluZyBvbiBhdCBsZWFzdCBPU1ggMTAuNS4KK1RoaXMgcmVxdWlyZXMgdGhhdCB0aGUgZGVwbG95bWVudCB0YXJnZXQgaXMgMTAuNSwgYW5kIGhlbmNlCithbHNvIHRoYXQgeW91IGFyZSBidWlsZGluZyBvbiBhdCBsZWFzdCBPUyBYIDEwLjUuICA0LXdheSBpbmNsdWRlcworYGBpMzg2YGAsIGBgeDg2XzY0YGAsIGBgcHBjYGAsIGFuZCBgYHBwYzY0YGAgKEc1KS4gIGBgcHBjNjRgYCBleGVjdXRhYmxlCit2YXJpYW50cyBjYW4gb25seSBiZSBydW4gb24gRzUgbWFjaGluZXMgcnVubmluZyAxMC41LiAgTm90ZSB0aGF0LAord2hpbGUgT1MgWCAxMC42IGlzIG9ubHkgc3VwcG9ydGVkIG9uIEludGVsLWJhc2VkIG1hY2hpbmVzLCBpdCBpcyBwb3NzaWJsZQordG8gcnVuIGBgcHBjYGAgKDMyLWJpdCkgZXhlY3V0YWJsZXMgdW5tb2RpZmllZCB0aGFua3MgdG8gdGhlIFJvc2V0dGEgcHBjCitlbXVsYXRpb24gaW4gT1MgWCAxMC41IGFuZCAxMC42LgorCitPdGhlciBgYC0tdW5pdmVyc2FsLWFyY2hzYGAgb3B0aW9ucyBhcmUgYGA2NC1iaXRgYCAoYGB4ODZfNjRgYCwgYGBwcGM2NGBgKSwKK2FuZCBgYDMtd2F5YGAgKGBgcHBjYGAsIGBgaTM4NmBgLCBgYHg4Nl82NGBgKS4gIE5vbmUgb2YgdGhlc2Ugb3B0aW9ucworYXJlIHJlZ3VsYXJseSBleGVyY2lzZWQ7IHVzZSBhdCB5b3VyIG93biByaXNrLgorCiAKIFRlc3RpbmcKIC0tLS0tLS0KIAotVGhlIHJlc3VsdGluZyBiaW5hcmllcyBzaG91bGQgd29yayBvbiBNYWNPU1ggMTAuMy45IG9yIGxhdGVyLiBJIHVzdWFsbHkgcnVuCi10aGUgaW5zdGFsbGVyIG9uIGEgMTAuMy45LCBhIDEwLjQueCBQUEMgYW5kIGEgMTAuNC54IEludGVsIHN5c3RlbSBhbmQgdGhlbgotcnVuIHRoZSB0ZXN0c3VpdGUgdG8gbWFrZSBzdXJlLgorSWRlYWxseSwgdGhlIHJlc3VsdGluZyBiaW5hcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkIGFuZCB0aGUgdGVzdCBzdWl0ZSBydW4KK29uIGFsbCBzdXBwb3J0ZWQgT1MgWCByZWxlYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gIEFzIGEgcHJhY3RpY2FsIG1hdHRlciwKK3RoYXQgaXMgZ2VuZXJhbGx5IG5vdCBwb3NzaWJsZS4gIEF0IGEgbWluaW11bSwgdmFyaWFudCAxIHNob3VsZCBiZSBydW4gb24KK2F0IGxlYXN0IG9uZSBJbnRlbCwgb25lIFBQQyBHNCwgYW5kIG9uZSBQUEMgRzMgc3lzdGVtIGFuZCBvbmUgZWFjaCBvZiAKK09TIFggMTAuNiwgMTAuNSwgMTAuNCwgYW5kIDEwLjMuOS4gIE5vdCBhbGwgdGVzdHMgcnVuIG9uIDEwLjMuOS4KK1ZhcmlhbnQgMiBzaG91bGQgYmUgcnVuIG9uIDEwLjYgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBtb2Rlcy46OgogCisgICAgYXJjaCAtaTM4NiAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4gLW0gdGVzdC5yZWdydGVzdCAtdyAtdSBhbGwgCisgICAgYXJjaCAtWDg2XzY0IC91c3IvbG9jYWwvYmluL3B5dGhvbm4ubiAtbSB0ZXN0LnJlZ3J0ZXN0IC13IC11IGFsbAorICAgIAorQ2VydGFpbiB0ZXN0cyB3aWxsIGJlIHNraXBwZWQgYW5kIHNvbWUgY2F1c2UgdGhlIGludGVycHJldGVyIHRvIGZhaWwKK3doaWNoIHdpbGwgbGlrZWx5IGdlbmVyYXRlIGBgUHl0aG9uIHF1aXQgdW5leHBlY3RlZGx5YGAgYWxlcnQgbWVzc2FnZXMKK3RvIGJlIGdlbmVyYXRlZCBhdCBzZXZlcmFsIHBvaW50cyBkdXJpbmcgYSB0ZXN0IHJ1bi4gIFRoZXNlIGNhbgorYmUgaWdub3JlZC4KIAotQW5ub3VuY2VtZW50cwotLS0tLS0tLS0tLS0tLQotCi0oVGhpcyBpcyBtb3N0bHkgb2YgaGlzdG9yaWMgaW50ZXJlc3QpCi0KLVdoZW4gYWxsIGlzIGRvbmUsIGFubm91bmNlbWVudHMgY2FuIGJlIHBvc3RlZCB0byBhdCBsZWFzdCB0aGUgZm9sbG93aW5nCi1wbGFjZXM6Ci0tICAgcHl0aG9ubWFjLXNpZ0BweXRob24ub3JnCi0tICAgcHl0aG9uLWRldkBweXRob24ub3JnCi0tICAgcHl0aG9uLWFubm91bmNlQHB5dGhvbi5vcmcKLS0gICBhcmNoaXZpc3RAaW5mby1tYWMub3JnCi0tICAgYWRjbmV3c0BhcHBsZS5jb20KLS0gICBuZXdzQG1hY25uLmNvbQotLSAgIGh0dHA6Ly93d3cubWFjdXBkYXRlLmNvbQotLSAgIGh0dHA6Ly9ndWlkZS5hcHBsZS5jb20vdXNpbmRleC5sYXNzbwotLSAgIGh0dHA6Ly93d3cuYXBwbGUuY29tL2Rvd25sb2Fkcy9tYWNvc3gvc3VibWl0Ci0tICAgaHR0cDovL3d3dy52ZXJzaW9udHJhY2tlci5jb20vICh1c2VyaWQgSmFjay5KYW5zZW5Ab3JhdHJpeC5jb20pCi0tICAgaHR0cDovL3d3dy5tYWNzaGFyZXdhcmUubmV0ICh1c2VyaWQgamFja2phbnNlbikKLQotQWxzbywgY2hlY2sgb3V0IFN0ZXBoYW4gRGVpYmVscyBodHRwOi8vcHl0aG9ub2xvZ3kub3JnL21hcmtldCBjb250YWN0IGxpc3QKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkgYi9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CmluZGV4IDAyZGJlMTMuLmJhOTIwMTIgMTAwNzU1Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKKysrIGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQpAQCAtMSwxMiArMSwxNCBAQAogIyEvdXNyL2Jpbi9weXRob24KICIiIgotVGhpcyBzY3JpcHQgaXMgdXNlZCB0byBidWlsZCB0aGUgIm9mZmljaWFsIHVub2ZmaWNpYWwiIHVuaXZlcnNhbCBidWlsZCBvbgotTWFjIE9TIFguIEl0IHJlcXVpcmVzIE1hYyBPUyBYIDEwLjQsIFhjb2RlIDIuMiBhbmQgdGhlIDEwLjR1IFNESyB0byBkbyBpdHMKLXdvcmsuICA2NC1iaXQgb3IgZm91ci13YXkgdW5pdmVyc2FsIGJ1aWxkcyByZXF1aXJlIGF0IGxlYXN0IE9TIFggMTAuNSBhbmQKLXRoZSAxMC41IFNESy4KK1RoaXMgc2NyaXB0IGlzIHVzZWQgdG8gYnVpbGQgIm9mZmljaWFsIiB1bml2ZXJzYWwgaW5zdGFsbGVycyBvbiBNYWMgT1MgWC4KK0l0IHJlcXVpcmVzIGF0IGxlYXN0IE1hYyBPUyBYIDEwLjQsIFhjb2RlIDIuMiBhbmQgdGhlIDEwLjR1IFNESyBmb3IKKzMyLWJpdCBidWlsZHMuICA2NC1iaXQgb3IgZm91ci13YXkgdW5pdmVyc2FsIGJ1aWxkcyByZXF1aXJlIGF0IGxlYXN0CitPUyBYIDEwLjUgYW5kIHRoZSAxMC41IFNESy4KIAotUGxlYXNlIGVuc3VyZSB0aGF0IHRoaXMgc2NyaXB0IGtlZXBzIHdvcmtpbmcgd2l0aCBQeXRob24gMi4zLCB0byBhdm9pZAotYm9vdHN0cmFwIGlzc3VlcyAoL3Vzci9iaW4vcHl0aG9uIGlzIFB5dGhvbiAyLjMgb24gT1NYIDEwLjQpCitQbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBzY3JpcHQga2VlcHMgd29ya2luZyB3aXRoIFB5dGhvbiAyLjUsIHRvIGF2b2lkCitib290c3RyYXAgaXNzdWVzICgvdXNyL2Jpbi9weXRob24gaXMgUHl0aG9uIDIuNSBvbiBPU1ggMTAuNSkuICBTcGhpbngsCit3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uLCBjdXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3QKK1B5dGhvbiAyLjQuCiAKIFVzYWdlOiBzZWUgVVNBR0UgdmFyaWFibGUgaW4gdGhlIHNjcmlwdC4KICIiIgpAQCAtMTQ0LDkgKzE0Niw5IEBACiAgICAgaWYgREVQVEFSR0VUIDwgJzEwLjUnOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJCemlwMiAxLjAuNSIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5iemlwLm9yZy8xLjAuNS9iemlwMi0xLjAuNS50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nM2MxNWEwYzhkMWQzZWUxYzQ2YTE2MzRkMDA2MTdiMWEnLAorICAgICAgICAgICAgICBuYW1lPSJCemlwMiAxLjAuNiIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL2J6aXAub3JnLzEuMC42L2J6aXAyLTEuMC42LnRhci5neiIsCisgICAgICAgICAgICAgIGNoZWNrc3VtPScwMGI1MTZmNDcwNGQ0YTdjYjUwYTFkOTdlNmU4ZTE1YicsCiAgICAgICAgICAgICAgIGNvbmZpZ3VyZT1Ob25lLAogICAgICAgICAgICAgICBpbnN0YWxsPSdtYWtlIGluc3RhbGwgQ0M9JXMgUFJFRklYPSVzL3Vzci9sb2NhbC8gQ0ZMQUdTPSItYXJjaCAlcyAtaXN5c3Jvb3QgJXMiJyUoCiAgICAgICAgICAgICAgICAgICBDQywKQEAgLTE2OSwyOSArMTcxLDMzIEBACiAgICAgICAgICAgKSwKICAgICAgICAgICBkaWN0KAogICAgICAgICAgICAgICAjIE5vdGUgdGhhdCBHTlUgcmVhZGxpbmUgaXMgR1BMJ2Qgc29mdHdhcmUKLSAgICAgICAgICAgICAgbmFtZT0iR05VIFJlYWRsaW5lIDUuMS40IiwKLSAgICAgICAgICAgICAgdXJsPSJodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEudGFyLmd6IiAsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSc3ZWU1YTY5MmRiODhiMzBjYTQ4OTI3YTEzZmQ2MGU0NicsCisgICAgICAgICAgICAgIG5hbWU9IkdOVSBSZWFkbGluZSA2LjEuMiIsCisgICAgICAgICAgICAgIHVybD0iaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNi4xLnRhci5neiIgLAorICAgICAgICAgICAgICBjaGVja3N1bT0nZmMyZjdlNzE0ZmU3OTJkYjFjZTZkZGM0YzlmYjRlZjMnLAogICAgICAgICAgICAgICBwYXRjaGxldmVsPScwJywKICAgICAgICAgICAgICAgcGF0Y2hlcz1bCiAgICAgICAgICAgICAgICAgICAjIFRoZSByZWFkbGluZSBtYWludGFpbmVycyBkb24ndCBkbyBhY3R1YWwgbWljcm8gcmVsZWFzZXMsIGJ1dAogICAgICAgICAgICAgICAgICAgIyBqdXN0IHNoaXAgYSBzZXQgb2YgcGF0Y2hlcy4KLSAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEtcGF0Y2hlcy9yZWFkbGluZTUxLTAwMScsCi0gICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNS4xLXBhdGNoZXMvcmVhZGxpbmU1MS0wMDInLAotICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTUuMS1wYXRjaGVzL3JlYWRsaW5lNTEtMDAzJywKLSAgICAgICAgICAgICAgICAgICdodHRwOi8vZnRwLmdudS5vcmcvcHViL2dudS9yZWFkbGluZS9yZWFkbGluZS01LjEtcGF0Y2hlcy9yZWFkbGluZTUxLTAwNCcsCisgICAgICAgICAgICAgICAgICAnaHR0cDovL2Z0cC5nbnUub3JnL3B1Yi9nbnUvcmVhZGxpbmUvcmVhZGxpbmUtNi4xLXBhdGNoZXMvcmVhZGxpbmU2MS0wMDEnLAorICAgICAgICAgICAgICAgICAgJ2h0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L3JlYWRsaW5lL3JlYWRsaW5lLTYuMS1wYXRjaGVzL3JlYWRsaW5lNjEtMDAyJywKICAgICAgICAgICAgICAgXQogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKLSAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNi4xMSIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3d3dy5zcWxpdGUub3JnL3NxbGl0ZS0zLjYuMTEudGFyLmd6IiwKLSAgICAgICAgICAgICAgY2hlY2tzdW09JzdlYmIwOTk2OTZhYjc2Y2M2ZmY2NWRkNDk2ZDE3ODU4JywKKyAgICAgICAgICAgICAgbmFtZT0iU1FMaXRlIDMuNy40IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vd3d3LnNxbGl0ZS5vcmcvc3FsaXRlLWF1dG9jb25mLTMwNzA0MDAudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzhmMGM2OTBiZmIzM2MzY2JiYzI0NzFjM2Q5YmEwMTU4JywKKyAgICAgICAgICAgICAgY29uZmlndXJlX2Vudj0oJ0NGTEFHUz0iLU9zJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgLURTUUxJVEVfRU5BQkxFX0ZUUzMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtRFNRTElURV9FTkFCTEVfRlRTM19QQVJFTlRIRVNJUycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1EU1FMSVRFX0VOQUJMRV9SVFJFRScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1EU1FMSVRFX1RDTD0wJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICciJyksCiAgICAgICAgICAgICAgIGNvbmZpZ3VyZV9wcmU9WwogICAgICAgICAgICAgICAgICAgJy0tZW5hYmxlLXRocmVhZHNhZmUnLAotICAgICAgICAgICAgICAgICAgJy0tZW5hYmxlLXRlbXBzdG9yZScsCiAgICAgICAgICAgICAgICAgICAnLS1lbmFibGUtc2hhcmVkPW5vJywKICAgICAgICAgICAgICAgICAgICctLWVuYWJsZS1zdGF0aWM9eWVzJywKLSAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtdGNsJywKKyAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtcmVhZGxpbmUnLAorICAgICAgICAgICAgICAgICAgJy0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nJywKICAgICAgICAgICAgICAgXQogICAgICAgICAgICksCiAgICAgICAgICAgZGljdCgKQEAgLTE5OSw2ICsyMDUsNyBAQAogICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly9mdHAuZ251Lm9yZy9wdWIvZ251L25jdXJzZXMvbmN1cnNlcy01LjUudGFyLmd6IiwKICAgICAgICAgICAgICAgY2hlY2tzdW09J2U3M2MxYWMxMGI0YmZjNDZkYjQzYjJkZGZkNjI0NGVmJywKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCisgICAgICAgICAgICAgICAgICAiLS1lbmFibGUtd2lkZWMiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1jeHgiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1hZGEiLAogICAgICAgICAgICAgICAgICAgIi0td2l0aG91dC1wcm9ncyIsCkBAIC0yMjUsMTggKzIzMiwxOSBAQAogICAgICAgICAgICksCiAgICAgICAgIF0pCiAKLSAgICByZXN1bHQuZXh0ZW5kKFsKLSAgICAgIGRpY3QoCi0gICAgICAgICAgbmFtZT0iU2xlZXB5Y2F0IERCIDQuNy4yNSIsCi0gICAgICAgICAgdXJsPSJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi00LjcuMjUudGFyLmd6IiwKLSAgICAgICAgICBjaGVja3N1bT0nZWMyYjg3ZTgzMzc3OTY4MWEwYzNhODE0YWE3MTM1OWUnLAotICAgICAgICAgIGJ1aWxkRGlyPSJidWlsZF91bml4IiwKLSAgICAgICAgICBjb25maWd1cmU9Ii4uL2Rpc3QvY29uZmlndXJlIiwKLSAgICAgICAgICBjb25maWd1cmVfcHJlPVsKLSAgICAgICAgICAgICAgJy0taW5jbHVkZWRpcj0vdXNyL2xvY2FsL2luY2x1ZGUvZGI0JywKLSAgICAgICAgICBdCi0gICAgICApLAotICAgIF0pCisgICAgaWYgbm90IFBZVEhPTl8zOgorICAgICAgICByZXN1bHQuZXh0ZW5kKFsKKyAgICAgICAgICBkaWN0KAorICAgICAgICAgICAgICBuYW1lPSJTbGVlcHljYXQgREIgNC43LjI1IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vZG93bmxvYWQub3JhY2xlLmNvbS9iZXJrZWxleS1kYi9kYi00LjcuMjUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09J2VjMmI4N2U4MzM3Nzk2ODFhMGMzYTgxNGFhNzEzNTllJywKKyAgICAgICAgICAgICAgYnVpbGREaXI9ImJ1aWxkX3VuaXgiLAorICAgICAgICAgICAgICBjb25maWd1cmU9Ii4uL2Rpc3QvY29uZmlndXJlIiwKKyAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCisgICAgICAgICAgICAgICAgICAnLS1pbmNsdWRlZGlyPS91c3IvbG9jYWwvaW5jbHVkZS9kYjQnLAorICAgICAgICAgICAgICBdCisgICAgICAgICAgKSwKKyAgICAgICAgXSkKIAogICAgIHJldHVybiByZXN1bHQKIApAQCAtMzk5LDYgKzQwNyw5IEBACiAgICAgQ2hlY2sgdGhhdCB3ZSdyZSBydW5uaW5nIG9uIGEgc3VwcG9ydGVkIHN5c3RlbS4KICAgICAiIiIKIAorICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMDoyXSA8ICgyLCA0KToKKyAgICAgICAgZmF0YWwoIlRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIHdpdGggUHl0aG9uIDIuNCBvciBsYXRlciIpCisKICAgICBpZiBwbGF0Zm9ybS5zeXN0ZW0oKSAhPSAnRGFyd2luJzoKICAgICAgICAgZmF0YWwoIlRoaXMgc2NyaXB0IHNob3VsZCBiZSBydW4gb24gYSBNYWMgT1MgWCAxMC40IChvciBsYXRlcikgc3lzdGVtIikKIApAQCAtNDE4LDE1ICs0MjksMTYgQEAKICAgICAjICAgICAgIHRvIGluc3RhbGwgYSBuZXdlciBwYXRjaCBsZXZlbC4KIAogICAgIGZvciBmcmFtZXdvcmsgaW4gWydUY2wnLCAnVGsnXToKLSAgICAgICAgZncgPSBkaWN0KGxvd2VyPWZyYW1ld29yay5sb3dlcigpLAotICAgICAgICAgICAgICAgICAgICB1cHBlcj1mcmFtZXdvcmsudXBwZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgY2FwPWZyYW1ld29yay5jYXBpdGFsaXplKCkpCi0gICAgICAgIGZ3cHRoID0gIkxpYnJhcnkvRnJhbWV3b3Jrcy8lKGNhcClzLmZyYW1ld29yay8lKGxvd2VyKXNDb25maWcuc2giICUgZncKLSAgICAgICAgc3lzZncgPSBvcy5wYXRoLmpvaW4oJy9TeXN0ZW0nLCBmd3B0aCkKKyAgICAgICAgI2Z3ID0gZGljdChsb3dlcj1mcmFtZXdvcmsubG93ZXIoKSwKKyAgICAgICAgIyAgICAgICAgICAgIHVwcGVyPWZyYW1ld29yay51cHBlcigpLAorICAgICAgICAjICAgICAgICAgICAgY2FwPWZyYW1ld29yay5jYXBpdGFsaXplKCkpCisgICAgICAgICNmd3B0aCA9ICJMaWJyYXJ5L0ZyYW1ld29ya3MvJShjYXApcy5mcmFtZXdvcmsvJShsb3dlcilzQ29uZmlnLnNoIiAlIGZ3CisgICAgICAgIGZ3cHRoID0gJ0xpYnJhcnkvRnJhbWV3b3Jrcy9UY2wuZnJhbWV3b3JrL1ZlcnNpb25zL0N1cnJlbnQnCisgICAgICAgIHN5c2Z3ID0gb3MucGF0aC5qb2luKFNES1BBVEgsICdTeXN0ZW0nLCBmd3B0aCkKICAgICAgICAgbGliZncgPSBvcy5wYXRoLmpvaW4oJy8nLCBmd3B0aCkKICAgICAgICAgdXNyZncgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0ZW52KCdIT01FJyksIGZ3cHRoKQotICAgICAgICB2ZXJzaW9uID0gIiUodXBwZXIpc19WRVJTSU9OIiAlIGZ3Ci0gICAgICAgIGlmIGdldFRjbFRrVmVyc2lvbihsaWJmdywgdmVyc2lvbikgIT0gZ2V0VGNsVGtWZXJzaW9uKHN5c2Z3LCB2ZXJzaW9uKToKKyAgICAgICAgI3ZlcnNpb24gPSAiJSh1cHBlcilzX1ZFUlNJT04iICUgZncKKyAgICAgICAgaWYgb3MucmVhZGxpbmsobGliZncpICE9IG9zLnJlYWRsaW5rKHN5c2Z3KToKICAgICAgICAgICAgIGZhdGFsKCJWZXJzaW9uIG9mICVzIG11c3QgbWF0Y2ggJXMiICUgKGxpYmZ3LCBzeXNmdykgKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyh1c3Jmdyk6CiAgICAgICAgICAgICBmYXRhbCgiUGxlYXNlIHJlbmFtZSAlcyB0byBhdm9pZCBwb3NzaWJsZSBkeW5hbWljIGxvYWQgaXNzdWVzLiIKQEAgLTY5Niw2ICs3MDgsOSBAQAogICAgICAgICBjb25maWd1cmVfYXJncy5pbnNlcnQoMCwgY29uZmlndXJlKQogICAgICAgICBjb25maWd1cmVfYXJncyA9IFsgc2hlbGxRdW90ZShhKSBmb3IgYSBpbiBjb25maWd1cmVfYXJncyBdCiAKKyAgICAgICAgaWYgJ2NvbmZpZ3VyZV9lbnYnIGluIHJlY2lwZToKKyAgICAgICAgICAgIGNvbmZpZ3VyZV9hcmdzLmluc2VydCgwLCByZWNpcGVbJ2NvbmZpZ3VyZV9lbnYnXSkKKwogICAgICAgICBwcmludCAiUnVubmluZyBjb25maWd1cmUgZm9yICVzIiUobmFtZSwpCiAgICAgICAgIHJ1bkNvbW1hbmQoJyAnLmpvaW4oY29uZmlndXJlX2FyZ3MpICsgJyAyPiYxJykKIApAQCAtNzUxLDkgKzc2Niw5IEBACiAgICAgICAgIHNodXRpbC5ybXRyZWUoYnVpbGREaXIpCiAgICAgaWYgb3MucGF0aC5leGlzdHMocm9vdERpcik6CiAgICAgICAgIHNodXRpbC5ybXRyZWUocm9vdERpcikKLSAgICBvcy5ta2RpcihidWlsZERpcikKLSAgICBvcy5ta2Rpcihyb290RGlyKQotICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihyb290RGlyLCAnZW1wdHktZGlyJykpCisgICAgb3MubWFrZWRpcnMoYnVpbGREaXIpCisgICAgb3MubWFrZWRpcnMocm9vdERpcikKKyAgICBvcy5tYWtlZGlycyhvcy5wYXRoLmpvaW4ocm9vdERpciwgJ2VtcHR5LWRpcicpKQogICAgIGN1cmRpciA9IG9zLmdldGN3ZCgpCiAgICAgb3MuY2hkaXIoYnVpbGREaXIpCiAKQEAgLTgyNSwxMiArODQwLDMzIEBACiAgICAgICAgICAgICBvcy5jaG1vZChwLCBzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSkgfCBzdGF0LlNfSVdHUlApCiAgICAgICAgICAgICBvcy5jaG93bihwLCAtMSwgZ2lkKQogCisgICAgaWYgUFlUSE9OXzM6CisgICAgICAgIExEVkVSU0lPTj1Ob25lCisgICAgICAgIFZFUlNJT049Tm9uZQorICAgICAgICBBQklGTEFHUz1Ob25lCisKKyAgICAgICAgZnAgPSBvcGVuKG9zLnBhdGguam9pbihidWlsZERpciwgJ01ha2VmaWxlJyksICdyJykKKyAgICAgICAgZm9yIGxuIGluIGZwOgorICAgICAgICAgICAgaWYgbG4uc3RhcnRzd2l0aCgnVkVSU0lPTj0nKToKKyAgICAgICAgICAgICAgICBWRVJTSU9OPWxuLnNwbGl0KClbMV0KKyAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ0FCSUZMQUdTPScpOgorICAgICAgICAgICAgICAgIEFCSUZMQUdTPWxuLnNwbGl0KClbMV0KKyAgICAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgoJ0xEVkVSU0lPTj0nKToKKyAgICAgICAgICAgICAgICBMRFZFUlNJT049bG4uc3BsaXQoKVsxXQorICAgICAgICBmcC5jbG9zZSgpCisKKyAgICAgICAgTERWRVJTSU9OID0gTERWRVJTSU9OLnJlcGxhY2UoJyQoVkVSU0lPTiknLCBWRVJTSU9OKQorICAgICAgICBMRFZFUlNJT04gPSBMRFZFUlNJT04ucmVwbGFjZSgnJChBQklGTEFHUyknLCBBQklGTEFHUykKKyAgICAgICAgY29uZmlnX3N1ZmZpeCA9ICctJyArIExEVkVSU0lPTgorICAgIGVsc2U6CisgICAgICAgIGNvbmZpZ19zdWZmaXggPSAnJyAgICAgICMgUHl0aG9uIDIueAorCiAgICAgIyBXZSBhZGRlZCBzb21lIGRpcmVjdG9yaWVzIHRvIHRoZSBzZWFyY2ggcGF0aCBkdXJpbmcgdGhlIGNvbmZpZ3VyZQogICAgICMgcGhhc2UuIFJlbW92ZSB0aG9zZSBiZWNhdXNlIHRob3NlIGRpcmVjdG9yaWVzIHdvbid0IGJlIHRoZXJlIG9uCiAgICAgIyB0aGUgZW5kLXVzZXJzIHN5c3RlbS4KICAgICBwYXRoID1vcy5wYXRoLmpvaW4ocm9vdERpciwgJ0xpYnJhcnknLCAnRnJhbWV3b3JrcycsICdQeXRob24uZnJhbWV3b3JrJywKICAgICAgICAgICAgICAgICAnVmVyc2lvbnMnLCB2ZXJzaW9uLCAnbGliJywgJ3B5dGhvbiVzJyUodmVyc2lvbiwpLAotICAgICAgICAgICAgICAgICdjb25maWcnLCAnTWFrZWZpbGUnKQorICAgICAgICAgICAgICAgICdjb25maWcnICsgY29uZmlnX3N1ZmZpeCwgJ01ha2VmaWxlJykKICAgICBmcCA9IG9wZW4ocGF0aCwgJ3InKQogICAgIGRhdGEgPSBmcC5yZWFkKCkKICAgICBmcC5jbG9zZSgpCkBAIC04NjYsNyArOTAyLDcgQEAKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckRlVMTF9WRVJTSU9OJywgZ2V0RnVsbFZlcnNpb24oKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckVkVSU0lPTicsIGdldFZlcnNpb24oKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJywgJycuam9pbigoREVQVEFSR0VULCAnIG9yIGxhdGVyJykpKQotICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRBUkNISVRFQ1RVUkVTJywgImkzODYsIHBwYyIpCisgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJEFSQ0hJVEVDVFVSRVMnLCAiLCAiLmpvaW4odW5pdmVyc2FsX29wdHNfbWFwW1VOSVZFUlNBTEFSQ0hTXSkpCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJElOU1RBTExfU0laRScsIGluc3RhbGxTaXplKCkpCiAKICAgICAjIFRoaXMgb25lIGlzIG5vdCBoYW5keSBhcyBhIHRlbXBsYXRlIHZhcmlhYmxlCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKaW5kZXggNjdkNDUyNS4uZjFiZWRhMCAxMDA2NDQKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnR4dApAQCAtMSwyOSArMSwzNiBAQAogVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCBQeXRob24gJEZVTExfVkVSU0lPTiBmb3IgTWFjIE9TIFgKLSRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZm9yIHRoZSBmb2xsb3dpbmcgCi1hcmNoaXRlY3R1cmUocyk6ICRBUkNISVRFQ1RVUkVTLgorJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBmb3IgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmUocyk6CiskQVJDSElURUNUVVJFUy4KIAotU2VwYXJhdGUgaW5zdGFsbGVycyBhcmUgYXZhaWxhYmxlIGZvciBvbGRlciB2ZXJzaW9ucwotb2YgTWFjIE9TIFgsIHNlZSB0aGUgaG9tZXBhZ2UsIGJlbG93LgorSW5zdGFsbGF0aW9uIHJlcXVpcmVzIGFwcHJveGltYXRlbHkgJElOU1RBTExfU0laRSBNQiBvZiBkaXNrIHNwYWNlLAoraWdub3JlIHRoZSBtZXNzYWdlIHRoYXQgaXQgd2lsbCB0YWtlIHplcm8gYnl0ZXMuCiAKLUluc3RhbGxhdGlvbiByZXF1aXJlcyBhcHByb3hpbWF0ZWx5ICRJTlNUQUxMX1NJWkUgTUIgb2YgZGlzawotc3BhY2UsIGlnbm9yZSB0aGUgbWVzc2FnZSB0aGF0IGl0IHdpbGwgdGFrZSB6ZXJvIGJ5dGVzLgorWW91IG11c3QgaW5zdGFsbCBvbnRvIHlvdXIgY3VycmVudCBib290IGRpc2ssIGV2ZW4gdGhvdWdoIHRoZQoraW5zdGFsbGVyIGRvZXMgbm90IGVuZm9yY2UgdGhpcywgb3RoZXJ3aXNlIHRoaW5ncyB3aWxsIG5vdCB3b3JrLgogCi1Zb3UgbXVzdCBpbnN0YWxsIG9udG8geW91ciBjdXJyZW50IGJvb3QgZGlzaywgZXZlbgotdGhvdWdoIHRoZSBpbnN0YWxsZXIgZG9lcyBub3QgZW5mb3JjZSB0aGlzLCBvdGhlcndpc2UKLXRoaW5ncyB3aWxsIG5vdCB3b3JrLgorUHl0aG9uIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXIsIHBsdXMKK2Egc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kgYWNjZXNzIHRvIGl0IGZvciBNYWMgdXNlcnMgaW5jbHVkaW5nCithbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCBJRExFLCBwbHVzIGEgc2V0IG9mIHByZS1idWlsdAorZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8KK1B5dGhvbiBwcm9ncmFtcy4KIAotUHl0aG9uIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKLWludGVycHJldGVyLCBwbHVzIGEgc2V0IG9mIHByb2dyYW1zIHRvIGFsbG93IGVhc3kKLWFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50Ci1lbnZpcm9ubWVudCwgSURMRSwgcGx1cyBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMKLXRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy4KKyAgICAgICAgICAgICAgICAgICAgKioqKiBJTVBPUlRBTlQgKioqKgorICAgICAgICAgICAgICAgICAgICAKK0JlZm9yZSB1c2luZyBJRExFIG9yIG90aGVyIHByb2dyYW1zIHVzaW5nIHRoZSB0a2ludGVyIGdyYXBoaWNhbCB1c2VyCitpbnRlcmZhY2UgdG9vbGtpdCwgdmlzaXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8KK2ZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMKK29mIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgTWFjIE9TIFguCiAKLVRoZSBpbnN0YWxsZXIgcHV0cyB0aGUgYXBwbGljYXRpb25zIGluICJQeXRob24gJFZFUlNJT04iIAotaW4geW91ciBBcHBsaWNhdGlvbnMgZm9sZGVyLCBhbmQgdGhlIHVuZGVybHlpbmcgbWFjaGluZXJ5IGluCi0kUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUi4gSXQgY2FuIG9wdGlvbmFsbHkgcGxhY2UKLWxpbmtzIHRvIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgaW4gL3Vzci9sb2NhbCBhcyB3ZWxsLAotYnkgZGVmYXVsdCB5b3UgaGF2ZSB0byBhZGQgdGhlICJiaW4iIGRpcmVjdG9yeSBpbnNpZGUKLXRoZSBmcmFtZXdvcmsgdG8geW91IHNoZWxsJ3Mgc2VhcmNoIHBhdGguCisgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioKKworVGhlIGluc3RhbGxlciBwdXRzIGFwcGxpY2F0aW9ucywgYW4gIlVwZGF0ZSBTaGVsbCBQcm9maWxlIiBjb21tYW5kLAorYW5kIGEgbGluayB0byB0aGUgb3B0aW9uYWxseSBpbnN0YWxsZWQgUHl0aG9uIERvY3VtZW50YXRpb24gaW50byB0aGUKKyJQeXRob24gJFZFUlNJT04iIHN1YmZvbGRlciBvZiB0aGUgc3lzdGVtIEFwcGxpY2F0aW9ucyBmb2xkZXIsCithbmQgcHV0cyB0aGUgdW5kZXJseWluZyBtYWNoaW5lcnkgaW50byB0aGUgZm9sZGVyCiskUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUi4gSXQgY2FuCitvcHRpb25hbGx5IHBsYWNlIGxpbmtzIHRvIHRoZSBjb21tYW5kLWxpbmUgdG9vbHMgaW4gL3Vzci9sb2NhbC9iaW4gYXMKK3dlbGwuIERvdWJsZS1jbGljayBvbiB0aGUgIlVwZGF0ZSBTaGVsbCBQcm9maWxlIiBjb21tYW5kIHRvIGFkZCB0aGUKKyJiaW4iIGRpcmVjdG9yeSBpbnNpZGUgdGhlIGZyYW1ld29yayB0byB5b3VyIHNoZWxsJ3Mgc2VhcmNoIHBhdGguCiAKIE1vcmUgaW5mb3JtYXRpb24gb24gUHl0aG9uIGluIGdlbmVyYWwgY2FuIGJlIGZvdW5kIGF0CiBodHRwOi8vd3d3LnB5dGhvbi5vcmcuCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgppbmRleCBlZDQ2NDNiLi5kMjA5YjEwIDEwMDY0NAotLS0gYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKQEAgLTEsMTkgKzEsMzUgQEAKLXtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmOTQ5XGNvY29hc3VicnRmNDMwCit7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjEwMzhcY29jb2FzdWJydGYzNTAKIHtcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9Ci1ccGFwZXJ3MTE5MDBccGFwZXJoMTY4NDBcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk5MjBcdmlld2gxMDY2MFx2aWV3a2luZDAKK1xwYXBlcncxMTkwNFxwYXBlcmgxNjgzNlxtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTY0MFx2aWV3aDEwNjIwXHZpZXdraW5kMAogXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxxbFxxbmF0dXJhbAogCiBcZjBcZnMyNCBcY2YwIFRoaXMgcGFja2FnZSB3aWxsIGluc3RhbGwgCi1cYiBNYWNQeXRob24gJEZVTExfVkVSU0lPTgorXGIgUHl0aG9uICRGVUxMX1ZFUlNJT04KIFxiMCAgZm9yIAogXGIgTWFjIE9TIFggJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogXGIwIC5cCiBcCi1NYWNQeXRob24gY29uc2lzdHMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IFxiIElETEVcYjAgIHBsdXMgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCisKK1xiIFB5dGhvbiBmb3IgTWFjIE9TIFgKK1xiMCAgY29uc2lzdHMgb2YgdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBpbnRlcnByZXRlciwgcGx1cyBhIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIE9TIFggdXNlcnMgaW5jbHVkaW5nIGFuIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgCitcYiBJRExFCitcYjAgIGFuZCBhIHNldCBvZiBwcmUtYnVpbHQgZXh0ZW5zaW9uIG1vZHVsZXMgdGhhdCBvcGVuIHVwIHNwZWNpZmljIE1hY2ludG9zaCB0ZWNobm9sb2dpZXMgdG8gUHl0aG9uIHByb2dyYW1zLlwKIFwKLVNlZSB0aGUgUmVhZE1lIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uXAorU2VlIHRoZSBSZWFkTWUgZmlsZSBhbmQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwKIFwKIAogXGIgTk9URTogCi1cYjAgVGhpcyBwYWNrYWdlIHdpbGwgYnkgZGVmYXVsdCBub3QgdXBkYXRlIHlvdXIgc2hlbGwgcHJvZmlsZSBhbmQgd2lsbCBhbHNvIG5vdCBpbnN0YWxsIGZpbGVzIGluIC91c3IvbG9jYWwuICBEb3VibGUtY2xpY2sgXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGVcYjAgIGF0IGFueSB0aW1lIHRvIG1ha2UgJEZVTExfVkVSU0lPTiB0aGUgZGVmYXVsdCBQeXRob24ufQorXGIwIFRoaXMgcGFja2FnZSB3aWxsIGJ5IGRlZmF1bHQgbm90IHVwZGF0ZSB5b3VyIHNoZWxsIHByb2ZpbGUgYW5kIHdpbGwgYWxzbyBub3QgaW5zdGFsbCBmaWxlcyBpbiAvdXNyL2xvY2FsLiAgRG91YmxlLWNsaWNrIAorXGIgVXBkYXRlIFNoZWxsIFByb2ZpbGUKK1xiMCAgYXQgYW55IHRpbWUgdG8gbWFrZSAkRlVMTF9WRVJTSU9OIHRoZSBkZWZhdWx0IFB5dGhvbi5cCitcCisKK1xiIElNUE9SVEFOVDoKK1xiMCAgCitcYiBJRExFCitcYjAgIGFuZCBvdGhlciBwcm9ncmFtcyB1c2luZyB0aGUgCitcYiB0a2ludGVyCitcYjAgIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSB0b29sa2l0IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMgb2YgdGhlIAorXGIgVGNsL1RrCitcYjAgIHBsYXRmb3JtIGluZGVwZW5kZW50IHdpbmRvd2luZyB0b29sa2l0LiAgVmlzaXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay8ifX17XGZsZHJzbHQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay99fSBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgYW5kIHJlY29tbWVuZGVkIHZlcnNpb25zIG9mIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgTWFjIE9TIFgufQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbiBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZG9jdW1lbnRhdGlvbgppbmRleCA5ZjU5MThlLi4zMWZiZjJmIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvc2NyaXB0cy9wb3N0ZmxpZ2h0LmRvY3VtZW50YXRpb24KKysrIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5kb2N1bWVudGF0aW9uCkBAIC0xLDExICsxLDMyIEBACiAjIS9iaW4vc2gKIAogUFlWRVI9IkBQWVZFUkAiCitGV0s9Ii9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8ke1BZVkVSfSIKK0ZXS19ET0NESVJfU1VCUEFUSD0iUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbiIKK0ZXS19ET0NESVI9IiR7RldLfS8ke0ZXS19ET0NESVJfU1VCUEFUSH0iCitBUFBESVI9Ii9BcHBsaWNhdGlvbnMvUHl0aG9uICR7UFlWRVJ9IgorREVWX0RPQ0RJUj0iL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uIgorU0hBUkVfRElSPSIke0ZXS30vc2hhcmUiCitTSEFSRV9ET0NESVI9IiR7U0hBUkVfRElSfS9kb2MvcHl0aG9uJHtQWVZFUn0iCitTSEFSRV9ET0NESVJfVE9fRldLPSIuLi8uLi8uLiIKIAotaWYgWyAtZCAvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24gXTsgdGhlbgotCWlmIFsgISAtZCAvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24vUHl0aG9uIF07IHRoZW4KLQkJbWtkaXIgLXAgL0RldmVsb3Blci9Eb2N1bWVudGF0aW9uL1B5dGhvbgotCWZpCi0KLQlsbiAtZmhzIC9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8ke1BZVkVSfS9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9Eb2N1bWVudGF0aW9uICIvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24vUHl0aG9uL1JlZmVyZW5jZSBEb2N1bWVudGF0aW9uIEBQWVZFUkAiCisjIG1ha2UgbGluayBpbiAvRGV2ZWxvcGVyL0RvY3VtZW50YXRpb24vIGZvciBYY29kZSB1c2VycworaWYgWyAtZCAiJHtERVZfRE9DRElSfSIgXTsgdGhlbgorICAgIGlmIFsgISAtZCAiJHtERVZfRE9DRElSfS9QeXRob24iIF07IHRoZW4KKyAgICAgICAgbWtkaXIgLXAgIiR7REVWX0RPQ0RJUn0vUHl0aG9uIgorICAgIGZpCisgICAgbG4gLWZocyAiJHtGV0tfRE9DRElSfSIgIiR7REVWX0RPQ0RJUn0vUHl0aG9uL1JlZmVyZW5jZSBEb2N1bWVudGF0aW9uICR7UFlWRVJ9IgogZmkKKworIyBtYWtlIGxpbmsgaW4gL0FwcGxpY2F0aW9ucy9QeXRob24gbS5uLyBmb3IgRmluZGVyIHVzZXJzCitpZiBbIC1kICIke0FQUERJUn0iIF07IHRoZW4KKyAgICBsbiAtZmhzICIke0ZXS19ET0NESVJ9L2luZGV4Lmh0bWwiICIke0FQUERJUn0vUHl0aG9uIERvY3VtZW50YXRpb24uaHRtbCIKK2ZpCisKKyMgbWFrZSBzaGFyZS9kb2MgbGluayBpbiBmcmFtZXdvcmsgZm9yIGNvbW1hbmQgbGluZSB1c2VycworaWYgWyAtZCAiJHtTSEFSRV9ESVJ9IiBdOyB0aGVuCisgICAgbWtkaXIgLXAgIiR7U0hBUkVfRE9DRElSfSIKKyAgICAjIG1ha2UgcmVsYXRpdmUgbGluayB0byBodG1sIGRvYyBkaXJlY3RvcnkKKyAgICBsbiAtZmhzICIke1NIQVJFX0RPQ0RJUl9UT19GV0t9LyR7RldLX0RPQ0RJUl9TVUJQQVRIfSIgIiR7U0hBUkVfRE9DRElSfS9odG1sIgorZmkKKwpkaWZmIC0tZ2l0IGEvTWFjL0V4dHJhcy5SZWFkTWUudHh0IGIvTWFjL0V4dHJhcy5SZWFkTWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDdmZDQyLi4wMDAwMDAwCi0tLSBhL01hYy9FeHRyYXMuUmVhZE1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhpcyBmb2xkZXIgY29udGFpbnMgZXhhbXBsZXMgb2YgUHl0aG9uIHVzYWdlIGFuZCB1c2VmdWwgc2NyaXB0cyBhbmQgdG9vbHMuCi0KLVlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCB0aGVzZSBhcmUgbm90IE1hY2ludG9zaC1zcGVjaWZpYyBidXQgYXJlIHNoYXJlZAotYW1vbmcgUHl0aG9uIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHRoZXJlIGFyZSBzb21lIHRoYXQgb25seSBydW4gb24gV2luZG93cwotb3IgVW5peCBvciBhbm90aGVyIHBsYXRmb3JtLCBhbmQvb3IgbWFrZSBsaXR0bGUgc2Vuc2Ugb24gYSBNYWNpbnRvc2guCmRpZmYgLS1naXQgYS9NYWMvTWFrZWZpbGUuaW4gYi9NYWMvTWFrZWZpbGUuaW4KaW5kZXggMThkYjY0MS4uNWU1N2I1NyAxMDA2NDQKLS0tIGEvTWFjL01ha2VmaWxlLmluCisrKyBiL01hYy9NYWtlZmlsZS5pbgpAQCAtMTUsNiArMTUsOCBAQAogRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPUBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVhACiBQWVRIT05GUkFNRVdPUks9QFBZVEhPTkZSQU1FV09SS0AKIFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVI9QFBZVEhPTkZSQU1FV09SS0lERU5USUZJRVJACitMSVBPXzMyQklUX0ZMQUdTPUBMSVBPXzMyQklUX0ZMQUdTQAorQ0M9QENDQAogTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPUBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQAogZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAogCkBAIC0yMiw3ICsyNCw3IEBACiAKICMgVGhlc2UgYXJlIG5vcm1hbGx5IGdsaW1wc2VkIGZyb20gdGhlIHByZXZpb3VzIHNldAogYmluZGlyPSQocHJlZml4KS9iaW4KLVBZVEhPTkFQUFNESVI9L0FwcGxpY2F0aW9ucy8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQorUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiBBUFBJTlNUQUxMRElSPSQocHJlZml4KS9SZXNvdXJjZXMvUHl0aG9uLmFwcAogCiAjIFZhcmlhYmxlcyBmb3IgaW5zdGFsbGluZyB0aGUgIm5vcm1hbCIgdW5peCBiaW5hcmllcwpAQCAtNDQsNDUgKzQ2LDIwIEBACiBBUFBTVUJESVJTPU1hY09TIFJlc291cmNlcyAKIGNvbXBpbGVhbGw9JChzcmNkaXIpLy4uL0xpYi9jb21waWxlYWxsLnB5CiAKLWluc3RhbGxhcHBzOiBpbnN0YWxsX1B5dGhvbiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIGluc3RhbGxfSURMRSBcCi0JY2hlY2thcHBsZXB5dGhvbiBpbnN0YWxsX3B5dGhvbncgaW5zdGFsbF92ZXJzaW9uZWR0b29scwotCi1pbnN0YWxsYXBwczR3YXk6IGluc3RhbGxfUHl0aG9uNHdheSBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyIFwKLQlpbnN0YWxsX0lETEU0d2F5IGluc3RhbGxfcHl0aG9udzR3YXkgaW5zdGFsbF92ZXJzaW9uZWR0b29scwotCitpbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9weXRob253IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFIFwKKwljaGVja2FwcGxlcHl0aG9uCiAKIGluc3RhbGxfcHl0aG9udzogcHl0aG9udwogCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTikiCiAJJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pIgogCWxuIC1zZiBweXRob24kKFZFUlNJT04pICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zIgogCWxuIC1zZiBweXRob253JChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMiCi0KLQotIyBJbnN0YWxsIDMgdmFyaWFudHMgb2YgcHl0aG9uL3B5dGhvbnc6IAotIyAJLSAzMi1iaXQgKGkzODYgYW5kIHBwYykKLSMgCS0gNjQtYml0ICh4ODZfNjQgYW5kIHBwYzY0KQotIyAJLSBhbGwgICAgKGFsbCBmb3VyIGFyY2hpdGVjdHVyZXMpCi0jIAktIE1ha2UgJ3B5dGhvbicgYW5kICdweXRob253JyBhbGlhc2VzIGZvciB0aGUgMzItYml0IHZhcmlhbnQKLWluc3RhbGxfcHl0aG9udzR3YXk6IHB5dGhvbnctMzIgcHl0aG9udy02NCBweXRob253Ci0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253LTY0ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKS02NCIKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbnctNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktNjQiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktNjQgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMtNjQiCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLTY0ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253My02NCIKLQotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udy0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTiktMzIiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253LTMyICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLTMyIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zLTMyIgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMtMzIiCi0KLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLWFsbCIKLQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIHB5dGhvbncgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktYWxsIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLWFsbCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMy1hbGwiCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLWFsbCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMtYWxsIgotCi0JbG4gLXNmIHB5dGhvbnckKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob253JChWRVJTSU9OKSIKLQlsbiAtc2YgcHl0aG9uJChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKSIKLQlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zIgoraWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQorCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbiQoVkVSU0lPTiktMzIgcHl0aG9udworCWxpcG8gJChMSVBPXzMyQklUX0ZMQUdTKSAtb3V0cHV0ICQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnckKFZFUlNJT04pLTMyIHB5dGhvbncKKwlsbiAtc2YgcHl0aG9udyQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbnczLTMyIgorCWxuIC1zZiBweXRob24kKFZFUlNJT04pLTMyCSIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zLTMyIgorZW5kaWYKIAogIwogIyBJbnN0YWxsIHVuaXggdG9vbHMgaW4gL3Vzci9sb2NhbC9iaW4uIFRoZXNlIGFyZSBqdXN0IGFsaWFzZXMgZm9yIHRoZSAKQEAgLTEwMSwxMCArNzgsNiBAQAogCWRvbmUKIAogCi0jIFRPRE86IGluc3RhbGwgc3ltbGlua3MgZm9yIC0zMiwgLTY0IGFuZCAtYWxsIGFzIHdlbGwKLWluc3RhbGx1bml4dG9vbHM0d2F5OiBpbnN0YWxsdW5peHRvb2xzCi0KLQogIwogIyBMaWtlIGluc3RhbGx1bml4dG9vbHMsIGJ1dCBvbmx5IGluc3RhbGwgbGlua3MgdG8gdGhlIHZlcnNpb25lZCBiaW5hcmllcy4KICMKQEAgLTExOCw0MyArOTEsOCBAQAogCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAogCWRvbmUKIAotIyBUT0RPOiAtMzIsIC02NCBhbmQgLWFsbCB2YXJpYW50cwotYWx0aW5zdGFsbHVuaXh0b29sczR3YXk6IGFsdGluc3RhbGx1bml4dG9vbHMKLQotIyBCeSBkZWZhdWx0IG1vc3QgdG9vbHMgYXJlIGluc3RhbGxlZCB3aXRob3V0IGEgdmVyc2lvbiBpbiB0aGVpciBiYXNlbmFtZSwgdG8KLSMgbWFrZSBpdCBlYXNpZXIgdG8gaW5zdGFsbCAoYW5kIHVzZSkgc2V2ZXJhbCBweXRob24gdmVyc2lvbnMgc2lkZS1ieS1zaWRlIG1vdmUKLSMgdGhlIHRvb2xzIHRvIGEgdmVyc2lvbi1zcGVjaWZpYyBuYW1lIGFuZCBhZGQgdGhlIG5vbi12ZXJzaW9uZWQgbmFtZSBhcyBhbgotIyBhbGlhcy4KLWluc3RhbGxfdmVyc2lvbmVkdG9vbHM6Ci0JZm9yIGZuIGluIGlkbGUgcHlkb2MgO1wKLQlkbyBcCi0JCWlmIFsgLWggIiQoREVTVERJUikkKHByZWZpeCkvYmluLyQke2ZufTMiIF07IHRoZW4gXAotCQkJY29udGludWUgO1wKLQkJZmkgO1wKLQkJbXYgIiQoREVTVERJUikkKHByZWZpeCkvYmluLyQke2ZufTMiICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi8kJHtmbn0kKFZFUlNJT04pIiAgO1wKLQkJbG4gLXNmICIkJHtmbn0kKFZFUlNJT04pIiAiJChERVNURElSKSQocHJlZml4KS9iaW4vJCR7Zm59MyIgO1wKLQlkb25lCi0JbXYgIiQoREVTVERJUikkKHByZWZpeCkvYmluLzJ0bzMiICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi8ydG8zLSQoVkVSU0lPTikiCi0JbG4gLXNmICIydG8zLSQoVkVSU0lPTikiICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi8ydG8zIgotCWlmIFsgISAtaCAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMy1jb25maWciIF07IHRoZW4gXAotCQltdiAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uMy1jb25maWciICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pLWNvbmZpZyIgO1wKLQkJbG4gLXNmICJweXRob24kKFZFUlNJT04pLWNvbmZpZyIgIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMtY29uZmlnIiA7IFwKLQlmaQotCi0KIHB5dGhvbnc6ICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgTWFrZWZpbGUKLQkkKENDKSAkKExERkxBR1MpIC1vICRAICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSykiJwotCi1weXRob253LTMyOiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtbyBweXRob253LXRtcC5vICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktMzIiJyA7XAotCWxpcG8gIEBMSVBPXzMyQklUX0ZMQUdTQCAtb3V0cHV0ICRAICBweXRob253LXRtcC5vIDsgcm0gcHl0aG9udy10bXAubwotCi1weXRob253LTY0OiAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIE1ha2VmaWxlCi0JJChDQykgJChMREZMQUdTKSAtbyBweXRob253LXRtcC5vICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgXAotCQktRFBZVEhPTldFWEVDVVRBQkxFPSciJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9NYWNPUy8kKFBZVEhPTkZSQU1FV09SSyktNjQiJyA7XAotCWxpcG8gIEBMSVBPXzY0QklUX0ZMQUdTQCAtb3V0cHV0ICRAICBweXRob253LXRtcC5vIDsgcm0gcHl0aG9udy10bXAubworCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCAkKHNyY2RpcikvVG9vbHMvcHl0aG9udy5jIC1JLi4gLUkkKHNyY2RpcikvLi4vSW5jbHVkZSAuLi8kKFBZVEhPTkZSQU1FV09SSykuZnJhbWV3b3JrL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspCiAKIGluc3RhbGxfUHl0aG9uTGF1bmNoZXI6CiAJY2QgUHl0aG9uTGF1bmNoZXIgJiYgbWFrZSBpbnN0YWxsIERFU1RESVI9JChERVNURElSKQpAQCAtMjEwLDExICsxNDgsNiBAQAogCQk+ICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9JbmZvLnBsaXN0IgogCXJtICIkKERFU1RESVIpJChBUFBJTlNUQUxMRElSKS9Db250ZW50cy9JbmZvLnBsaXN0LmluIgogCi1pbnN0YWxsX1B5dGhvbjR3YXk6IGluc3RhbGxfUHl0aG9uCi0JbGlwbyAgQExJUE9fMzJCSVRfRkxBR1NAIC1vdXRwdXQgIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKS0zMiIgIiQoREVTVERJUikkKEFQUElOU1RBTExESVIpL0NvbnRlbnRzL01hY09TLyQoUFlUSE9ORlJBTUVXT1JLKSIKLQlsaXBvICBATElQT182NEJJVF9GTEFHU0AgLW91dHB1dCAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspLTY0IiAiJChERVNURElSKSQoQVBQSU5TVEFMTERJUikvQ29udGVudHMvTWFjT1MvJChQWVRIT05GUkFNRVdPUkspIgotCi0KIAogaW5zdGFsbF9JRExFOgogCXRlc3QgLWQgIiQoREVTVERJUikkKFBZVEhPTkFQUFNESVIpIiB8fCBta2RpciAtcCAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikiCkBAIC0yNDIsMjAgKzE3NSwxMyBAQAogCWZpCiAJdG91Y2ggIiQoREVTVERJUikkKFBZVEhPTkFQUFNESVIpL0lETEUuYXBwIgogCi1pbnN0YWxsX0lETEU0d2F5OiBpbnN0YWxsX0lETEUKLQlsbiAtc2YgIiQoSU5TVEFMTEVEX1BZVEhPTkFQUCktMzIiICIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9JRExFLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24iCi0Jc2VkIC1lICJzISVwcmVmaXglISQocHJlZml4KSFnIiAtZSAncyElZXhlJSEkKFBZVEhPTkZSQU1FV09SSyktMzIhZycgPCAiJChzcmNkaXIpL0lETEUvSURMRS5hcHAvQ29udGVudHMvTWFjT1MvSURMRSIgPiAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikvSURMRS5hcHAvQ29udGVudHMvTWFjT1MvSURMRSIKLQl0b3VjaCAiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikvSURMRS5hcHAiCi0KICQoSU5TVEFMTEVEX1BZVEhPTkFQUCk6IGluc3RhbGxfUHl0aG9uCiAKLWluc3RhbGxleHRyYXM6ICQoc3JjZGlyKS9FeHRyYXMuUmVhZE1lLnR4dCAkKHNyY2RpcikvRXh0cmFzLmluc3RhbGwucHkKLQkkKElOU1RBTEwpIC1kICIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9FeHRyYXMiCi0JJChJTlNUQUxMKSAkKHNyY2RpcikvRXh0cmFzLlJlYWRNZS50eHQgIiQoREVTVERJUikkKFBZVEhPTkFQUFNESVIpL0V4dHJhcy9SZWFkTWUudHh0IgotCSQoUlVOU0hBUkVEKSAkKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvRXh0cmFzLmluc3RhbGwucHkgJChzcmNkaXIpLy4uL0RlbW8gXAotCQkiJChERVNURElSKSQoUFlUSE9OQVBQU0RJUikvRXh0cmFzL0RlbW8iCi0JJChSVU5TSEFSRUQpICQoQlVJTERQWVRIT04pICQoc3JjZGlyKS9FeHRyYXMuaW5zdGFsbC5weSAkKHNyY2RpcikvRGVtbyBcCi0JCSIkKERFU1RESVIpJChQWVRIT05BUFBTRElSKS9FeHRyYXMvRGVtby5NYWMiCitpbnN0YWxsZXh0cmFzOiAkKHNyY2RpcikvRXh0cmFzLmluc3RhbGwucHkKKwkkKElOU1RBTEwpIC1kICIkKERFU1RESVIpJChwcmVmaXgpL3NoYXJlL2RvYy9weXRob24kKFZFUlNJT04pL2V4YW1wbGVzIgorCSQoUlVOU0hBUkVEKSAkKEJVSUxEUFlUSE9OKSAkKHNyY2RpcikvRXh0cmFzLmluc3RhbGwucHkgJChzcmNkaXIpLy4uL1Rvb2xzIFwKKwkJIiQoREVTVERJUikkKHByZWZpeCkvc2hhcmUvZG9jL3B5dGhvbiQoVkVSU0lPTikvZXhhbXBsZXMvVG9vbHMiIDsgXAorCQljaG1vZCAtUiB1Z28rclgsZ28tdyAiJChERVNURElSKSQocHJlZml4KS9zaGFyZS9kb2MvcHl0aG9uJChWRVJTSU9OKS9leGFtcGxlcy9Ub29scyIKIAogCiBjaGVja2FwcGxlcHl0aG9uOiAkKHNyY2RpcikvVG9vbHMvZml4YXBwbGVweXRob24yMy5weQpkaWZmIC0tZ2l0IGEvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluIGIvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCmluZGV4IDUzOWVkMWEuLjk3MGI4M2YgMTAwNjQ0Ci0tLSBhL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgorKysgYi9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KQEAgLTIxLDcgKzIxLDcgQEAKIAogQlVORExFQlVMREVSPSQoc3JjZGlyKS8uLi9Ub29scy9idW5kbGVidWlsZGVyLnB5CiAKLVBZVEhPTkFQUFNESVI9L0FwcGxpY2F0aW9ucy8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQorUFlUSE9OQVBQU0RJUj1ARlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVhALyQoUFlUSE9ORlJBTUVXT1JLKSAkKFZFUlNJT04pCiBPQkpFQ1RTPUZpbGVTZXR0aW5ncy5vIE15QXBwRGVsZWdhdGUubyBNeURvY3VtZW50Lm8gUHJlZmVyZW5jZXNXaW5kb3dDb250cm9sbGVyLm8gZG9zY3JpcHQubyBtYWluLm8KIAogaW5zdGFsbDogUHl0aG9uXCBMYXVuY2hlci5hcHAKZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IGY4NGUxMzQuLjAyNjExMjcgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtNSwxNiArNSwyNCBAQAogVGhpcyBkb2N1bWVudCBwcm92aWRlcyBhIHF1aWNrIG92ZXJ2aWV3IG9mIHNvbWUgTWFjIE9TIFggc3BlY2lmaWMgZmVhdHVyZXMgaW4KIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgogCi1NYWMtc3BlY2lmaWMgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKiBgYC0tZW5hYmxlLWZyYW1ld29ya2BgCisqIGBgLS1lbmFibGUtZnJhbWV3b3JrWz1ESVJdYGAKIAogICBJZiB0aGlzIGFyZ3VtZW50IGlzIHNwZWNpZmllZCB0aGUgYnVpbGQgd2lsbCBjcmVhdGUgYSBQeXRob24uZnJhbWV3b3JrIHJhdGhlcgogICB0aGFuIGEgdHJhZGl0aW9uYWwgVW5peCBpbnN0YWxsLiBTZWUgdGhlIHNlY3Rpb24KICAgX2BCdWlsZGluZyBhbmQgdXNpbmcgYSBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG9uIE1hYyBPUyBYYCBmb3IgbW9yZSAKICAgaW5mb3JtYXRpb24gb24gZnJhbWV3b3Jrcy4KIAorICBJZiB0aGUgb3B0aW9uYWwgZGlyZWN0b3J5IGFyZ3VtZW50IGlzIHNwZWNpZmllZCB0aGUgZnJhbWV3b3JrIGl0IGluc3RhbGxlZAorICBpbnRvIHRoYXQgZGlyZWN0b3J5LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYSBweXRob24gZnJhbWV3b3JrIGludG8KKyAgeW91ciBob21lIGRpcmVjdG9yeTo6CisKKyAgICAgJCBjb25maWd1cmUgLS1lbmFibGUtZnJhbWV3b3JrPS9Vc2Vycy9yb25hbGQvTGlicmFyeS9GcmFtZXdvcmtzCisgICAgICQgbWFrZSAmJiBtYWtlIGluc3RhbGwKKworICBUaGlzIHdpbGwgaW5zdGFsbCB0aGUgZnJhbWV3b3JrIGl0c2VsZiBpbiBgYC9Vc2Vycy9yb25hbGQvTGlicmFyeS9GcmFtZXdvcmtzYGAsCisgIHRoZSBhcHBsaWNhdGlvbnMgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgYGAvVXNlcnMvcm9uYWxkL0FwcGxpY2F0aW9uc2BgIGFuZCB0aGUKKyAgY29tbWFuZC1saW5lIHRvb2xzIGluIGBgL1VzZXJzL3JvbmFsZC9iaW5gYC4KKwogKiBgYC0td2l0aC1mcmFtZXdvcmstbmFtZT1OQU1FYGAKIAogICBTcGVjaWZ5IHRoZSBuYW1lIGZvciB0aGUgcHl0aG9uIGZyYW1ld29yaywgZGVmYXVsdHMgdG8gYGBQeXRob25gYC4gVGhpcyBvcHRpb24KQEAgLTI1LDE5ICszMywxOCBAQAogICBDcmVhdGUgYSB1bml2ZXJzYWwgYmluYXJ5IGJ1aWxkIG9mIG9mIFB5dGhvbi4gVGhpcyBjYW4gYmUgdXNlZCB3aXRoIGJvdGgKICAgcmVndWxhciBhbmQgZnJhbWV3b3JrIGJ1aWxkcy4KIAotICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHdpdGggT1NYIFNESyBzaG91bGQgYmUgdXNlZCB0byBwZXJmb3JtIHRoZQorICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIE9TWCBTREsgc2hvdWxkIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUKICAgYnVpbGQuIFRoaXMgZGVmYXVsdHMgdG8gYGAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYLjEwLjR1LnNka2BgLCBzcGVjaWZ5IAogICBgYC9gYCB3aGVuIGJ1aWxkaW5nIG9uIGEgMTAuNSBzeXN0ZW0sIGVzcGVjaWFsbHkgd2hlbiBidWlsZGluZyA2NC1iaXQgY29kZS4KIAogICBTZWUgdGhlIHNlY3Rpb24gX2BCdWlsZGluZyBhbmQgdXNpbmcgYSB1bml2ZXJzYWwgYmluYXJ5IG9mIFB5dGhvbiBvbiBNYWMgT1MgWGAKICAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLSogYGAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzPVZBTFVFYGAKKyogYGAtLXdpdGgtdW5pdmVyYWwtYXJjaHM9VkFMVUVgYAogCiAgIFNwZWNpZnkgdGhlIGtpbmQgb2YgdW5pdmVyc2FsIGJpbmFyeSB0aGF0IHNob3VsZCBiZSBjcmVhdGVkLiBUaGlzIG9wdGlvbiBpcyAKICAgb25seSB2YWxpZCB3aGVuIGBgLS1lbmFibGUtdW5pdmVyc2Fsc2RrYGAgaXMgc3BlY2lmaWVkLgogCi0gIAogCiBCdWlsZGluZyBhbmQgdXNpbmcgYSB1bml2ZXJzYWwgYmluYXJ5IG9mIFB5dGhvbiBvbiBNYWMgT1MgWAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTY0LDEyICs3MSw2IEBACiB3aXRoIFhjb2RlIDIuMSAob3IgbGF0ZXIpLiBZb3UgYWxzbyBoYXZlIHRvIGluc3RhbGwgdGhlIDEwLjR1IFNESyB3aGVuIAogaW5zdGFsbGluZyBYY29kZS4KIAotVGhlIG9wdGlvbiBgYC0tZW5hYmxlLXVuaXZlcnNhbHNka2BgIGhhcyBhbiBvcHRpb25hbCBhcmd1bWVudCB0byBzcGVjaWZ5IGFuCi1TREssIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSAxMC40dSBTREsuIFdoZW4geW91IGJ1aWxkIG9uIE9TWCAxMC41IG9yIGxhdGVyIAoteW91IGNhbiB1c2UgdGhlIHN5c3RlbSBoZWFkZXJzIGluc3RlYWQgb2YgYW4gU0RLOjoKLQotICAkIC4vY29uZmlndXJlIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0vCi0KIDIuMSBGbGF2b3VycyBvZiB1bml2ZXJzYWwgYmluYXJpZXMKIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIApAQCAtODgsMTAgKzg5LDI5IEBACiAKICAgKiBgYGludGVsYGA6CSAgYGBpMzg2YGAsIGBgeDg2XzY0YGAKIAotVG8gYnVpbGQgYSB1bml2ZXJzYWwgYmluYXJ5IHRoYXQgaW5jbHVkZXMgYSA2NC1iaXQgYXJjaGl0ZWN0dXJlIHlvdSBtdXN0IGJ1aWxkCi1vbiBhIHN5c3RlbSBydW5uaW5nIE9TWCAxMC41IG9yIGxhdGVyLiBUaGUgYGBhbGxgYCBmbGF2b3VyIGNhbiBvbmx5IGJlIGJ1aWxkIG9uCitUbyBidWlsZCBhIHVuaXZlcnNhbCBiaW5hcnkgdGhhdCBpbmNsdWRlcyBhIDY0LWJpdCBhcmNoaXRlY3R1cmUsIHlvdSBtdXN0IGJ1aWxkCitvbiBhIHN5c3RlbSBydW5uaW5nIE9TWCAxMC41IG9yIGxhdGVyLiBUaGUgYGBhbGxgYCBmbGF2b3VyIGNhbiBvbmx5IGJlIGJ1aWx0IG9uCiBPU1ggMTAuNS4KIAorVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGluc3RhbGwgYGBweXRob24zMmBgIGFuZCBgYHB5dGhvbnczMmBgIAorYmluYXJpZXMgd2hlbiB0aGUgdW5pdmVyc2FsIGFyY2hpdGVjdXJlcyBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgMzItYml0IGFyY2hpdGVjdHVyZQorKHRoYXQgaXMsIGZvciBhbGwgZmxhdm91cnMgYnV0IGBgNjQtYml0YGApLgorCitSdW5uaW5nIGEgc3BlY2lmaWMgYXJjaGljdHVyZQorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWW91IGNhbiBydW4gY29kZSB1c2luZyBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSB1c2luZyB0aGUgYGBhcmNoYGAgY29tbWFuZDo6CisKKyAgICQgYXJjaCAtaTM4NiBweXRob24KKworT3IgdG8gZXhwbGljaXRseSBydW4gaW4gMzItYml0IG1vZGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG1hY2hpbmUgaGFyZHdhcmU6OgorCisgICAkIGFyY2ggLWkzODYgLXBwYyBweXRob24KKworTk9URTogV2hlbiB5b3UncmUgdXNpbmcgYSBmcmFtZXdvcmsgaW5zdGFsbCBvZiBQeXRob24gdGhpcyByZXF1aXJlcyBhdCBsZWFzdAorUHl0aG9uIDIuNyBvciAzLjIsIGluIGVhcmxpZXIgdmVyc2lvbnMgdGhlIHB5dGhvbiAoYW5kIHB5dGhvbncpIGNvbW1hbmRzIGFyZQord3JhcHBlciB0b29scyB0aGF0IGV4ZWN1dGUgdGhlIHJlYWwgaW50ZXJwcmV0ZXIgd2l0aG91dCBlbnN1cmluZyB0aGF0IHRoZQorcmVhbCBpbnRlcnByZXRlciBydW5zIHdpdGggdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLgogCiBCdWlsZGluZyBhbmQgdXNpbmcgYSBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG9uIE1hYyBPUyBYLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEwOSw3ICsxMjksOCBAQAogCiBBIHNlY29uZCByZWFzb24gZm9yIHVzaW5nIGZyYW1ld29ya3MgaXMgdGhhdCB0aGV5IHB1dCBQeXRob24tcmVsYXRlZCBpdGVtcyBpbgogb25seSB0d28gcGxhY2VzOiAiL0xpYnJhcnkvRnJhbWV3b3JrL1B5dGhvbi5mcmFtZXdvcmsiIGFuZCAKLSIvQXBwbGljYXRpb25zL01hY1B5dGhvbiBtLm4iLiAgVGhpcyBzaW1wbGlmaWVzIG1hdHRlcnMgZm9yIHVzZXJzIGluc3RhbGxpbmcgCisiL0FwcGxpY2F0aW9ucy9NYWNQeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIyLjYiLAorIjMuMSIsIGV0Yy4uICBUaGlzIHNpbXBsaWZpZXMgbWF0dGVycyBmb3IgdXNlcnMgaW5zdGFsbGluZyAKIFB5dGhvbiBmcm9tIGEgYmluYXJ5IGRpc3RyaWJ1dGlvbiBpZiB0aGV5IHdhbnQgdG8gZ2V0IHJpZCBvZiBpdCBhZ2Fpbi4gTW9yZW92ZXIsCiBkdWUgdG8gdGhlIHdheSBmcmFtZXdvcmtzIHdvcmsgYSB1c2VyIHdpdGhvdXQgYWRtaW4gcHJpdmlsZWdlcyBjYW4gaW5zdGFsbCBhIAogYmluYXJ5IGRpc3RyaWJ1dGlvbiBpbiBoaXMgb3IgaGVyIGhvbWUgZGlyZWN0b3J5IHdpdGhvdXQgcmVjb21waWxhdGlvbi4KQEAgLTEzNiwzMyArMTU3LDQwIEBACiAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgTWFrZWZpbGUgdGhhdCB3aWxsIGNyZWF0ZSBhIGNvdXBsZSBvZiBweXRob24tcmVsYXRlZAogYXBwbGljYXRpb25zIChmdWxsYmxvd24gT1NYIC5hcHAgYXBwbGljYXRpb25zLCB0aGF0IGlzKSBpbgotIi9BcHBsaWNhdGlvbnMvTWFjUHl0aG9uIG0ubiIsIGFuZCBhIGhpZGRlbiBoZWxwZXIgYXBwbGljYXRpb24gUHl0aG9uLmFwcCAKKyIvQXBwbGljYXRpb25zL01hY1B5dGhvbiA8VkVSU0lPTj4iLCBhbmQgYSBoaWRkZW4gaGVscGVyIGFwcGxpY2F0aW9uIFB5dGhvbi5hcHAgCiBpbnNpZGUgdGhlIFB5dGhvbi5mcmFtZXdvcmssIGFuZCB1bml4IHRvb2xzICJweXRob24iIGFuZCAicHl0aG9udyIgaW50byAKIC91c3IvbG9jYWwvYmluLiAgSW4gYWRkaXRpb24gaXQgaGFzIGEgdGFyZ2V0ICJpbnN0YWxsbWFjc3VidHJlZSIgdGhhdCBpbnN0YWxscyAKIHRoZSByZWxldmFudCBwb3J0aW9ucyBvZiB0aGUgTWFjIHN1YnRyZWUgaW50byB0aGUgUHl0aG9uLmZyYW1ld29yay4KIAogSXQgaXMgbm9ybWFsbHkgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggdGhlIG1haW4gTWFrZWZpbGUsIGFzIHRoZSBsYXN0IHN0ZXAKLWluIHRoZSBzZXF1ZW5jZTo6CitpbiB0aGUgc2VxdWVuY2UKIAotICQgLi9jb25maWd1cmUgLS1lbmFibGUtZnJhbWV3b3JrCi0gJCBtYWtlCi0gJCBtYWtlIGluc3RhbGwKKyAxLiAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1mcmFtZXdvcmsKKworIDIuIG1ha2UKKyAKKyAzLiBtYWtlIGluc3RhbGwKIAogVGhpcyBzZXF1ZW5jZSB3aWxsIHB1dCB0aGUgZnJhbWV3b3JrIGluIC9MaWJyYXJ5L0ZyYW1ld29yay9QeXRob24uZnJhbWV3b3JrLAotdGhlIGFwcGxpY2F0aW9ucyBpbiAiL0FwcGxpY2F0aW9ucy9NYWNQeXRob24gbS5uIiBhbmQgdGhlIHVuaXggdG9vbHMgaW4gCit0aGUgYXBwbGljYXRpb25zIGluICIvQXBwbGljYXRpb25zL01hY1B5dGhvbiA8VkVSU0lPTj4iIGFuZCB0aGUgdW5peCB0b29scyBpbiAKIC91c3IvbG9jYWwvYmluLgogCi1JdCBpcyBwb3NzaWJsZSB0byBzZWxlY3QgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGZyYW1ld29yayB1c2luZyB0aGUgY29uZmlndXJlIAotb3B0aW9uIGBgLS13aXRoLWZyYW1ld29yay1uYW1lPU5BTUVgYC4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIHNldmVyYWwKLXBhcmFsbGVsIGluc3RhbGxzIG9mIGEgUHl0aG9uIGZyYW1ld29yay4KLQogSW5zdGFsbGluZyBpbiBhbm90aGVyIHBsYWNlLCBmb3IgaW5zdGFuY2UgJEhPTUUvTGlicmFyeS9GcmFtZXdvcmtzIGlmIHlvdSBoYXZlCiBubyBhZG1pbiBwcml2aWxlZ2VzIG9uIHlvdXIgbWFjaGluZSwgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgdmVyeSBsaWdodGx5LiBUaGlzCiBjYW4gYmUgZG9uZSBieSBjb25maWd1cmluZyB3aXRoIC0tZW5hYmxlLWZyYW1ld29yaz0kSE9NRS9MaWJyYXJ5L0ZyYW1ld29ya3MuCi1UaGUgb3RoZXIgdHdvIGRpcmVjdG9yaWVzLCAiL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tbS5uIiBhbmQgL3Vzci9sb2NhbC9iaW4sIAotd2lsbCB0aGVuIGFsc28gYmUgZGVwb3NpdGVkIGluICRIT01FLiBUaGlzIGlzIHN1Yi1vcHRpbWFsIGZvciB0aGUgdW5peCB0b29scywgCi13aGljaCB5b3Ugd291bGQgd2FudCBpbiAkSE9NRS9iaW4sIGJ1dCB0aGVyZSBpcyBubyBlYXN5IHdheSB0byBmaXggdGhpcyByaWdodCAKLW5vdy4KK1RoZSBvdGhlciB0d28gZGlyZWN0b3JpZXMsICIvQXBwbGljYXRpb25zL01hY1B5dGhvbi08VkVSU0lPTj4iIGFuZAorL3Vzci9sb2NhbC9iaW4sIHdpbGwgdGhlbiBhbHNvIGJlIGRlcG9zaXRlZCBpbiAkSE9NRS4gVGhpcyBpcyBzdWItb3B0aW1hbCBmb3IKK3RoZSB1bml4IHRvb2xzLCB3aGljaCB5b3Ugd291bGQgd2FudCBpbiAkSE9NRS9iaW4sIGJ1dCB0aGVyZSBpcyBubyBlYXN5IHdheSB0bworZml4IHRoaXMgcmlnaHQgbm93LgorCitJZiB5b3Ugd2FudCB0byBpbnN0YWxsIHNvbWUgcGFydCwgYnV0IG5vdCBhbGwsIHJlYWQgdGhlIG1haW4gTWFrZWZpbGUuIFRoZQorZnJhbWV3b3JraW5zdGFsbCBpcyBjb21wb3NlZCBvZiBhIGNvdXBsZSBvZiBzdWItdGFyZ2V0cyB0aGF0IGluc3RhbGwgdGhlCitmcmFtZXdvcmsgaXRzZWxmLCB0aGUgTWFjIHN1YnRyZWUsIHRoZSBhcHBsaWNhdGlvbnMgYW5kIHRoZSB1bml4IHRvb2xzLgorCitUaGVyZSBpcyBhbiBleHRyYSB0YXJnZXQgZnJhbWV3b3JraW5zdGFsbGV4dHJhcyB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZQorbm9ybWFsIGZyYW1ld29ya2luc3RhbGwgd2hpY2ggaW5zdGFsbHMgdGhlIFRvb2xzIGRpcmVjdG9yeSBpbnRvCisiL0FwcGxpY2F0aW9ucy9NYWNQeXRob24gPFZFUlNJT04+IiwgdGhpcyBpcyB1c2VmdWwgZm9yIGJpbmFyeQorZGlzdHJpYnV0aW9ucy4KIAogV2hhdCBkbyBhbGwgdGhlc2UgcHJvZ3JhbXMgZG8/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNzgsMTEgKzIwNiw2IEBACiBzY3JpcHQgdG8gc2V0IHJ1bnRpbWUgb3B0aW9ucy4gVGhlc2Ugb3B0aW9ucyBjYW4gYmUgc2V0IG9uY2UgYW5kIGZvciBhbGwKIHRocm91Z2ggUHl0aG9uTGF1bmNoZXIncyBwcmVmZXJlbmNlcyBkaWFsb2cuCiAKLSJCdWlsZEFwcGxldC5hcHAiIGNyZWF0ZXMgYW4gYXBwbGV0IGZyb20gYSBQeXRob24gc2NyaXB0LiBEcm9wIHRoZSBzY3JpcHQgb24gaXQKLWFuZCBvdXQgY29tZXMgYSBmdWxsLWZlYXR1cmVkIE1hY09TIGFwcGxpY2F0aW9uLiBUaGVyZSBpcyBtdWNoIG1vcmUgdG8gdGhpcywKLXRvIGJlIHN1cHBsaWVkIGxhdGVyLiBTb21lIHVzZWZ1bCAoYnV0IG91dGRhdGVkKSBpbmZvIGNhbiBiZSBmb3VuZCBpbgotTWFjL0RlbW8uCi0KIFRoZSBjb21tYW5kbGluZSBzY3JpcHRzIC91c3IvbG9jYWwvYmluL3B5dGhvbiBhbmQgcHl0aG9udyBjYW4gYmUgdXNlZCB0byBydW4KIG5vbi1HVUkgYW5kIEdVSSBweXRob24gc2NyaXB0cyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHJlc3BlY3RpdmVseS4KIApkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL3B5dGhvbncuYyBiL01hYy9Ub29scy9weXRob253LmMKaW5kZXggZTcwYTc2Zi4uMzBjODJhYyAxMDA2NDQKLS0tIGEvTWFjL1Rvb2xzL3B5dGhvbncuYworKysgYi9NYWMvVG9vbHMvcHl0aG9udy5jCkBAIC0zLDE1ICszLDE3NiBAQAogICogYXBwbGljYXRpb24gYnVuZGxlIGluc2lkZSB0aGUgUHl0aG9uIGZyYW1ld29yay4gVGhpcyBpcyBuZWVkZWQgdG8gcnVuCiAgKiBHVUkgY29kZTogc29tZSBHVUkgQVBJJ3MgZG9uJ3Qgd29yayB1bmxlc3MgdGhlIHByb2dyYW0gaXMgaW5zaWRlIGFuCiAgKiBhcHBsaWNhdGlvbiBidW5kbGUuCisgKgorICogVGhpcyBwcm9ncmFtIHVzZXMgcG9zaXhfc3Bhd24gcmF0aGVyIHRoYW4gcGxhaW4gZXhlY3YgYmVjYXVzZSB3ZSBuZWVkCisgKiBzbGlnaHRseSBtb3JlIGNvbnRyb2wgb3ZlciBob3cgdGhlICJyZWFsIiBpbnRlcnByZXRlciBpcyBleGVjdXRlZC4KKyAqCisgKiBPbiBPU1ggMTAuNCAoYW5kIGVhcmxpZXIpIHRoaXMgZmFsbHMgYmFjayB0byB1c2luZyBleGVjIGJlY2F1c2UgdGhlCisgKiBwb3NpeF9zcGF3bnYgZnVuY3Rpb25zIGFyZW4ndCBhdmFpbGFibGUgdGhlcmUuCiAgKi8KKworI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfaW5pdAorI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZl9ucAorI3ByYWdtYSB3ZWFrX2ltcG9ydCBwb3NpeF9zcGF3bmF0dHJfc2V0ZmxhZ3MKKyNwcmFnbWEgd2Vha19pbXBvcnQgcG9zaXhfc3Bhd24KKworI2luY2x1ZGUgPFB5dGhvbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2lmZGVmIEhBVkVfU1BBV05fSAorI2luY2x1ZGUgPHNwYXduLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxQeXRob24uaD4KIAotc3RhdGljIGNoYXIgUHl0aG9uW10gPSBQWVRIT05XRVhFQ1VUQUJMRTsKIAotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Ci0JYXJndlswXSA9IFB5dGhvbjsKLQlleGVjdihQeXRob24sIGFyZ3YpOwotCWVycigxLCAiZXhlY3Y6ICVzIiwgUHl0aG9uKTsKLQkvKiBOT1RSRUFDSEVEICovCitleHRlcm4gY2hhcioqIGVudmlyb247CisKKy8qCisgKiBMb2NhdGUgdGhlIHB5dGhvbiBmcmFtZXdvcmsgYnkgbG9va2luZyBmb3IgdGhlCisgKiBsaWJyYXJ5IHRoYXQgY29udGFpbnMgUHlfSW5pdGlhbGl6ZS4KKyAqCisgKiBJbiBhIHJlZ3VsYXIgZnJhbWV3b3JrIHRoZSBzdHJ1Y3R1cmUgaXM6CisgKgorICogICAgUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8yLjcKKyAqICAgICAgICAgICAgICAvUHl0aG9uCisgKiAgICAgICAgICAgICAgL1Jlc291cmNlcy9QeXRob24uYXBwL0NvbnRlbnRzL01hY09TL1B5dGhvbgorICoKKyAqIEluIGEgdmlydHVhbGVudiBzdHlsZSBzdHJ1Y3R1cmUgdGhlIGV4cGVjdGVkCisgKiBzdHJ1Y3R1cmUgaXM6CisgKgorICogICAgUk9PVAorICogICAgICAgL2Jpbi9weXRob253CisgKiAgICAgICAvLlB5dGhvbiAgIDwtIHRoZSBkeWxpYgorICogICAgICAgLy5SZXNvdXJjZXMvUHl0aG9uLmFwcC9Db250ZW50cy9NYWNPUy9QeXRob24KKyAqCisgKiBOT1RFOiB2aXJ0dWFsZW52J3MgYXJlIG5vdCBhbiBvZmZpY2lhbGx5IHN1cHBvcnRlZAorICogZmVhdHVyZSwgc3VwcG9ydCBmb3IgdGhhdCBzdHJ1Y3R1cmUgaXMgcHJvdmlkZWQgYXMKKyAqIGEgY29udmVuaWVuY2UuCisgKi8KK3N0YXRpYyBjaGFyKiBnZXRfcHl0aG9uX3BhdGgodm9pZCkKK3sKKyAgICBzaXplX3QgbGVuOworICAgIERsX2luZm8gaW5mbzsKKyAgICBjaGFyKiBlbmQ7CisgICAgY2hhciogZ19wYXRoOworCisgICAgaWYgKGRsYWRkcihQeV9Jbml0aWFsaXplLCAmaW5mbykgPT0gMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBsZW4gPSBzdHJsZW4oaW5mby5kbGlfZm5hbWUpOworCisgICAgZ19wYXRoID0gbWFsbG9jKGxlbis2MCk7CisgICAgaWYgKGdfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0cmNweShnX3BhdGgsIGluZm8uZGxpX2ZuYW1lKTsKKyAgICBlbmQgPSBnX3BhdGggKyBsZW4gLSAxOworICAgIHdoaWxlIChlbmQgIT0gZ19wYXRoICYmICplbmQgIT0gJy8nKSB7CisgICAgICAgIGVuZCAtLTsKKyAgICB9CisgICAgZW5kKys7CisgICAgaWYgKCplbmQgPT0gJy4nKSB7CisgICAgICAgIGVuZCsrOworICAgIH0KKyAgICBzdHJjcHkoZW5kLCAiUmVzb3VyY2VzL1B5dGhvbi5hcHAvQ29udGVudHMvTWFjT1MvIiBQWVRIT05GUkFNRVdPUkspOworCisgICAgcmV0dXJuIGdfcGF0aDsKK30KKworI2lmZGVmIEhBVkVfU1BBV05fSAorc3RhdGljIHZvaWQKK3NldHVwX3NwYXduYXR0cihwb3NpeF9zcGF3bmF0dHJfdCogc3Bhd25hdHRyKQoreworICAgIHNpemVfdCBvY291bnQ7CisgICAgc2l6ZV90IGNvdW50OworICAgIGNwdV90eXBlX3QgY3B1X3R5cGVzWzFdOworICAgIHNob3J0IGZsYWdzID0gMDsKKyNpZmRlZiBfX0xQNjRfXworICAgIGludCAgIGNoOworI2VuZGlmCisKKyAgICBpZiAoKGVycm5vID0gcG9zaXhfc3Bhd25hdHRyX2luaXQoc3Bhd25hdHRyKSkgIT0gMCkgeworICAgICAgICBlcnIoMiwgInBvc2l4X3NwYXduYXR0cl9pbnQiKTsKKyAgICAgICAgLyogTk9UUkVBQ0hURUQgKi8KKyAgICB9CisKKyAgICBjb3VudCA9IDE7CisKKyAgICAvKiBSdW4gdGhlIHJlYWwgcHl0aG9uIGV4ZWN1dGFibGUgdXNpbmcgdGhlIHNhbWUgYXJjaGl0ZWN0dXJlIGFzIHRoaXMKKyAgICAgKiBleGVjdXRhYmxlLCB0aGlzIGFsbG93cyB1c2VycyB0byBjb250cm9sIHRoZSBhcmNoaXRlY3R1cmUgdXNpbmcKKyAgICAgKiAiYXJjaCAtcHBjIHB5dGhvbiIKKyAgICAgKi8KKworI2lmIGRlZmluZWQoX19wcGM2NF9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1BPV0VSUEM2NDsKKworI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1g4Nl82NDsKKworI2VsaWYgZGVmaW5lZChfX3BwY19fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1BPV0VSUEM7CisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorICAgIGNwdV90eXBlc1swXSA9IENQVV9UWVBFX1g4NjsKKyNlbHNlCisjICAgICAgIGVycm9yICJVbmtub3duIENQVSIKKyNlbmRpZgorCisgICAgaWYgKHBvc2l4X3NwYXduYXR0cl9zZXRiaW5wcmVmX25wKHNwYXduYXR0ciwgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1X3R5cGVzLCAmb2NvdW50KSA9PSAtMSkgeworICAgICAgICBlcnIoMSwgInBvc2l4X3NwYXduYXR0cl9zZXRiaW5wcmVmIik7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorICAgIGlmIChjb3VudCAhPSBvY291bnQpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwb3NpeF9zcGF3bmF0dHJfc2V0YmlucHJlZiBmYWlsZWQgdG8gY29weVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorCisKKyAgICAvKgorICAgICAqIFNldCBmbGFnIHRoYXQgY2F1c2VzIHBvc2l4X3NwYXduIHRvIGJlaGF2ZSBsaWtlIGV4ZWN2CisgICAgICovCisgICAgZmxhZ3MgfD0gUE9TSVhfU1BBV05fU0VURVhFQzsKKyAgICBpZiAoKGVycm5vID0gcG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzKHNwYXduYXR0ciwgZmxhZ3MpKSAhPSAwKSB7CisgICAgICAgIGVycigxLCAicG9zaXhfc3Bhd25hdHRyX3NldGZsYWdzIik7CisgICAgICAgIC8qIE5PVFJFQUNIVEVEICovCisgICAgfQorfQorI2VuZGlmCisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgICBjaGFyKiBleGVjX3BhdGggPSBnZXRfcHl0aG9uX3BhdGgoKTsKKworICAgIC8qCisgICAgICogTGV0IGFyZ3ZbMF0gcmVmZXIgdG8gdGhlIG5ldyBpbnRlcnByZXRlci4gVGhpcyBpcyBuZWVkZWQgdG8KKyAgICAgKiBnZXQgdGhlIGVmZmVjdCB3ZSB3YW50IG9uIE9TWCAxMC41IG9yIGVhcmxpZXIuIFRoYXQgaXMsIHdpdGhvdXQKKyAgICAgKiBjaGFuZ2luZyBhcmd2WzBdIHRoZSByZWFsIGludGVycHJldGVyIHdvbid0IGhhdmUgYWNjZXNzIHRvCisgICAgICogdGhlIFdpbmRvdyBTZXJ2ZXIuCisgICAgICovCisgICAgYXJndlswXSA9IGV4ZWNfcGF0aDsKKworI2lmZGVmIEhBVkVfU1BBV05fSAorICAgIC8qIFdlJ3JlIHdlYWstbGlua2luZyB0byBwb3NpeC1zcGF3bnYgdG8gZW5zdXJlIHRoYXQKKyAgICAgKiBhbiBleGVjdXRhYmxlIGJ1aWxkIG9uIDEwLjUgY2FuIHdvcmsgb24gMTAuNC4KKyAgICAgKi8KKyAgICBpZiAocG9zaXhfc3Bhd24gIT0gTlVMTCkgeworICAgICAgICBwb3NpeF9zcGF3bmF0dHJfdCBzcGF3bmF0dHIgPSBOVUxMOworCisgICAgICAgIHNldHVwX3NwYXduYXR0cigmc3Bhd25hdHRyKTsKKyAgICAgICAgcG9zaXhfc3Bhd24oTlVMTCwgZXhlY19wYXRoLCBOVUxMLAorICAgICAgICAgICAgJnNwYXduYXR0ciwgYXJndiwgZW52aXJvbik7CisgICAgICAgIGVycigxLCAicG9zaXhfc3Bhd246ICVzIiwgZXhlY19wYXRoKTsKKyAgICB9CisjZW5kaWYKKyAgICBleGVjdmUoZXhlY19wYXRoLCBhcmd2LCBlbnZpcm9uKTsKKyAgICBlcnIoMSwgImV4ZWN2ZTogJXMiLCBhcmd2WzBdKTsKKyAgICAvKiBOT1RSRUFDSEVEICovCiB9CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5wcmUuaW4gYi9NYWtlZmlsZS5wcmUuaW4KaW5kZXggYzJmYzY5YS4uNDYwYzdjNyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUucHJlLmluCisrKyBiL01ha2VmaWxlLnByZS5pbgpAQCAtMzUsNiArMzUsOCBAQAogQVI9CQlAQVJACiBSQU5MSUI9CQlAUkFOTElCQAogU1ZOVkVSU0lPTj0JQFNWTlZFUlNJT05ACitTT0FCST0JCUBTT0FCSUAKK0xEVkVSU0lPTj0JQExEVkVSU0lPTkAKIEhHVkVSU0lPTj0JQEhHVkVSU0lPTkAKIEhHVEFHPQkJQEhHVEFHQAogSEdCUkFOQ0g9CUBIR0JSQU5DSEAKQEAgLTYyLDEyICs2NCwxOCBAQAogIyBDb21waWxlciBvcHRpb25zCiBPUFQ9CQlAT1BUQAogQkFTRUNGTEFHUz0JQEJBU0VDRkxBR1NACi1DRkxBR1M9CQkkKEJBU0VDRkxBR1MpIEBDRkxBR1NAICQoT1BUKSAkKEVYVFJBX0NGTEFHUykKK0NPTkZJR1VSRV9DRkxBR1M9CUBDRkxBR1NACitDT05GSUdVUkVfQ1BQRkxBR1M9CUBDUFBGTEFHU0AKK0NPTkZJR1VSRV9MREZMQUdTPQlATERGTEFHU0AKKyMgQXZvaWQgYXNzaWduaW5nIENGTEFHUywgTERGTEFHUywgZXRjLiBzbyB1c2VycyBjYW4gdXNlIHRoZW0gb24gdGhlCisjIGNvbW1hbmQgbGluZSB0byBhcHBlbmQgdG8gdGhlc2UgdmFsdWVzIHdpdGhvdXQgc3RvbXBpbmcgdGhlIHByZS1zZXQKKyMgdmFsdWVzLgorUFlfQ0ZMQUdTPQkkKEJBU0VDRkxBR1MpICQoT1BUKSAkKENPTkZJR1VSRV9DRkxBR1MpICQoQ0ZMQUdTKSAkKEVYVFJBX0NGTEFHUykKICMgQm90aCBDUFBGTEFHUyBhbmQgTERGTEFHUyBuZWVkIHRvIGNvbnRhaW4gdGhlIHNoZWxsJ3MgdmFsdWUgZm9yIHNldHVwLnB5IHRvCiAjIGJlIGFibGUgdG8gYnVpbGQgZXh0ZW5zaW9uIG1vZHVsZXMgdXNpbmcgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUKICMgZW52aXJvbm1lbnQgdmFyaWFibGVzCi1DUFBGTEFHUz0JLUkuIC1JSW5jbHVkZSAtSSQoc3JjZGlyKS9JbmNsdWRlIEBDUFBGTEFHU0AKLUxERkxBR1M9CUBMREZMQUdTQAorUFlfQ1BQRkxBR1M9CS1JLiAtSUluY2x1ZGUgLUkkKHNyY2RpcikvSW5jbHVkZSAkKENPTkZJR1VSRV9DUFBGTEFHUykgJChDUFBGTEFHUykKK1BZX0xERkxBR1M9CSQoQ09ORklHVVJFX0xERkxBR1MpICQoTERGTEFHUykKIExETEFTVD0JCUBMRExBU1RACiBTR0lfQUJJPQlAU0dJX0FCSUAKIENDU0hBUkVEPQlAQ0NTSEFSRURACkBAIC03Niw3ICs4NCw3IEBACiAjIEV4dHJhIEMgZmxhZ3MgYWRkZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBvYmplY3QgZmlsZXMuCiBDRkxBR1NGT1JTSEFSRUQ9QENGTEFHU0ZPUlNIQVJFREAKICMgQyBmbGFncyB1c2VkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0IGZpbGVzCi1QWV9DRkxBR1M9CSQoQ0ZMQUdTKSAkKENQUEZMQUdTKSAkKENGTEFHU0ZPUlNIQVJFRCkgLURQeV9CVUlMRF9DT1JFCitQWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ1BQRkxBR1MpICQoQ0ZMQUdTRk9SU0hBUkVEKSAtRFB5X0JVSUxEX0NPUkUKIAogCiAjIE1hY2hpbmUtZGVwZW5kZW50IHN1YmRpcmVjdG9yaWVzCkBAIC05OCwxOCArMTA2LDE5IEBACiBJTkNMVURFRElSPQlAaW5jbHVkZWRpckAKIENPTkZJTkNMVURFRElSPQkkKGV4ZWNfcHJlZml4KS9pbmNsdWRlCiBTQ1JJUFRESVI9CSQocHJlZml4KS9saWIKK0FCSUZMQUdTPQlAQUJJRkxBR1NACiAKICMgRGV0YWlsZWQgZGVzdGluYXRpb24gZGlyZWN0b3JpZXMKIEJJTkxJQkRFU1Q9CSQoTElCRElSKS9weXRob24kKFZFUlNJT04pCiBMSUJERVNUPQkkKFNDUklQVERJUikvcHl0aG9uJChWRVJTSU9OKQotSU5DTFVERVBZPQkkKElOQ0xVREVESVIpL3B5dGhvbiQoVkVSU0lPTikKLUNPTkZJTkNMVURFUFk9CSQoQ09ORklOQ0xVREVESVIpL3B5dGhvbiQoVkVSU0lPTikKLUxJQlA9CQkkKExJQkRJUikvcHl0aG9uJChWRVJTSU9OKQorSU5DTFVERVBZPQkkKElOQ0xVREVESVIpL3B5dGhvbiQoTERWRVJTSU9OKQorQ09ORklOQ0xVREVQWT0JJChDT05GSU5DTFVERURJUikvcHl0aG9uJChMRFZFUlNJT04pCiAKICMgU3ltYm9scyB1c2VkIGZvciB1c2luZyBzaGFyZWQgbGlicmFyaWVzCiBTTz0JCUBTT0AKLUxEU0hBUkVEPQlATERTSEFSRURACi1CTERTSEFSRUQ9CUBCTERTSEFSRURACitMRFNIQVJFRD0JQExEU0hBUkVEQCAkKFBZX0xERkxBR1MpCitCTERTSEFSRUQ9CUBCTERTSEFSRURAICQoUFlfTERGTEFHUykKK0xEQ1hYU0hBUkVEPQlATERDWFhTSEFSRURACiBERVNUU0hBUkVEPQkkKEJJTkxJQkRFU1QpL2xpYi1keW5sb2FkCiAKICMgRXhlY3V0YWJsZSBzdWZmaXggKC5leGUgb24gV2luZG93cyBhbmQgTWFjIE9TIFgpCkBAIC0xNDgsNyArMTU3LDcgQEAKIFNSQ0RJUlM9IAlAU1JDRElSU0AKIAogIyBPdGhlciBzdWJkaXJlY3RvcmllcwotU1VCRElSU1RPTz0JSW5jbHVkZSBMaWIgTWlzYyBEZW1vCitTVUJESVJTVE9PPQlJbmNsdWRlIExpYiBNaXNjCiAKICMgRmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGJlIGRpc3RyaWJ1dGVkCiBDT05GSUdGSUxFUz0JY29uZmlndXJlIGNvbmZpZ3VyZS5pbiBhY2NvbmZpZy5oIHB5Y29uZmlnLmguaW4gTWFrZWZpbGUucHJlLmluCkBAIC0xNjAsNiArMTY5LDcgQEAKIExJQlJBUlk9CUBMSUJSQVJZQAogTERMSUJSQVJZPSAgICAgIEBMRExJQlJBUllACiBCTERMSUJSQVJZPSAgICAgQEJMRExJQlJBUllACitQWTNMSUJSQVJZPSAgICAgQFBZM0xJQlJBUllACiBETExMSUJSQVJZPQlARExMTElCUkFSWUAKIExETElCUkFSWURJUj0gICBATERMSUJSQVJZRElSQAogSU5TVFNPTkFNRT0JQElOU1RTT05BTUVACkBAIC0yMTcsNiArMjI3LDggQEAKIEdSQU1NQVJfSU5QVVQ9CSQoc3JjZGlyKS9HcmFtbWFyL0dyYW1tYXIKIAogCitMSUJGRklfSU5DTFVERURJUj0JQExJQkZGSV9JTkNMVURFRElSQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBQYXJzZXIKIFBHRU49CQlQYXJzZXIvcGdlbiQoRVhFKQpAQCAtMjM4LDcgKzI1MCw5IEBACiAKIFBHT0JKUz0JCVwKIAkJT2JqZWN0cy9vYm1hbGxvYy5vIFwKKwkJUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMubyBcCiAJCVB5dGhvbi9teXNucHJpbnRmLm8gXAorCQlQeXRob24vcHljdHlwZS5vIFwKIAkJUGFyc2VyL3Rva2VuaXplcl9wZ2VuLm8gXAogCQlQYXJzZXIvcHJpbnRncmFtbWFyLm8gXAogCQlQYXJzZXIvcGdlbm1haW4ubwpAQCAtMjgyLDYgKzI5Niw3IEBACiAJCVB5dGhvbi9jZXZhbC5vIFwKIAkJUHl0aG9uL2NvbXBpbGUubyBcCiAJCVB5dGhvbi9jb2RlY3MubyBcCisJCVB5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLm8gXAogCQlQeXRob24vZXJyb3JzLm8gXAogCQlQeXRob24vZnJvemVuLm8gXAogCQlQeXRob24vZnJvemVubWFpbi5vIFwKQEAgLTMwNSw2ICszMjAsNyBAQAogCQlQeXRob24vcHltYXRoLm8gXAogCQlQeXRob24vcHlzdGF0ZS5vIFwKIAkJUHl0aG9uL3B5dGhvbnJ1bi5vIFwKKwkJUHl0aG9uL3B5dGltZS5vIFwKIAkJUHl0aG9uL3N0cnVjdG1lbWJlci5vIFwKIAkJUHl0aG9uL3N5bXRhYmxlLm8gXAogCQlQeXRob24vc3lzbW9kdWxlLm8gXApAQCAtMzE0LDYgKzMzMCw3IEBACiAJCVB5dGhvbi9weXN0cnRvZC5vIFwKIAkJUHl0aG9uL2R0b2EubyBcCiAJCVB5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5vIFwKKwkJUHl0aG9uL2ZpbGV1dGlscy5vIFwKIAkJUHl0aG9uLyQoRFlOTE9BREZJTEUpIFwKIAkJJChMSUJPQkpTKSBcCiAJCSQoTUFDSERFUF9PQkpTKSBcCkBAIC0zMzAsNyArMzQ3LDYgQEAKIAkJT2JqZWN0cy9ieXRlc29iamVjdC5vIFwKIAkJT2JqZWN0cy9jZWxsb2JqZWN0Lm8gXAogCQlPYmplY3RzL2NsYXNzb2JqZWN0Lm8gXAotCQlPYmplY3RzL2NvYmplY3QubyBcCiAJCU9iamVjdHMvY29kZW9iamVjdC5vIFwKIAkJT2JqZWN0cy9jb21wbGV4b2JqZWN0Lm8gXAogCQlPYmplY3RzL2Rlc2Nyb2JqZWN0Lm8gXApAQCAtMzc4LDcgKzM5NCw3IEBACiAKICMgRGVmYXVsdCB0YXJnZXQKIGFsbDoJCWJ1aWxkX2FsbAotYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMKK2J1aWxkX2FsbDoJJChCVUlMRFBZVEhPTikgb2xkc2hhcmVkbW9kcyBzaGFyZWRtb2RzIGdkYmhvb2tzIE1vZHVsZXMvX3Rlc3RlbWJlZAogCiAjIENvbXBpbGUgYSBiaW5hcnkgd2l0aCBnY2MgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uLgogcHJvZmlsZS1vcHQ6CkBAIC00MDgsMjAgKzQyNCwxOCBAQAogCiAKICMgQnVpbGQgdGhlIGludGVycHJldGVyCi0kKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBUlkpICQoTERMSUJSQVJZKQotCQkkKExJTktDQykgJChMREZMQUdTKSAkKExJTktGT1JTSEFSRUQpIC1vICRAIFwKLQkJCU1vZHVsZXMvcHl0aG9uLm8gXAotCQkJJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKKyQoQlVJTERQWVRIT04pOglNb2R1bGVzL3B5dGhvbi5vICQoTElCUkFSWSkgJChMRExJQlJBUlkpICQoUFkzTElCUkFSWSkKKwkkKExJTktDQykgJChQWV9MREZMQUdTKSAkKExJTktGT1JTSEFSRUQpIC1vICRAIE1vZHVsZXMvcHl0aG9uLm8gJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKIAogcGxhdGZvcm06ICQoQlVJTERQWVRIT04pCi0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLUUgLWMgJ2ltcG9ydCBzeXMgOyBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0gOyBwcmludChnZXRfcGxhdGZvcm0oKSsiLSIrc3lzLnZlcnNpb25bMDozXSknID5wbGF0Zm9ybQorCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pIC1FIC1jICdpbXBvcnQgc3lzIDsgZnJvbSBzeXNjb25maWcgaW1wb3J0IGdldF9wbGF0Zm9ybSA7IHByaW50KGdldF9wbGF0Zm9ybSgpKyItIitzeXMudmVyc2lvblswOjNdKScgPnBsYXRmb3JtCiAKIAogIyBCdWlsZCB0aGUgc2hhcmVkIG1vZHVsZXMKIHNoYXJlZG1vZHM6ICQoQlVJTERQWVRIT04pCiAJQGNhc2UgJCRNQUtFRkxBR1MgaW4gXAotCSpzKikgJChSVU5TSEFSRUQpIENDPSckKENDKScgTERTSEFSRUQ9JyQoQkxEU0hBUkVEKScgTERGTEFHUz0nJChMREZMQUdTKScgT1BUPSckKE9QVCknIC4vJChCVUlMRFBZVEhPTikgLUUgJChzcmNkaXIpL3NldHVwLnB5IC1xIGJ1aWxkOzsgXAotCSopICQoUlVOU0hBUkVEKSBDQz0nJChDQyknIExEU0hBUkVEPSckKEJMRFNIQVJFRCknIExERkxBR1M9JyQoTERGTEFHUyknIE9QVD0nJChPUFQpJyAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSBidWlsZDs7IFwKKwkqcyopICQoUlVOU0hBUkVEKSBDQz0nJChDQyknIExEU0hBUkVEPSckKEJMRFNIQVJFRCknIE9QVD0nJChPUFQpJyAuLyQoQlVJTERQWVRIT04pIC1FICQoc3JjZGlyKS9zZXR1cC5weSAtcSBidWlsZDs7IFwKKwkqKSAkKFJVTlNIQVJFRCkgQ0M9JyQoQ0MpJyBMRFNIQVJFRD0nJChCTERTSEFSRUQpJyBPUFQ9JyQoT1BUKScgLi8kKEJVSUxEUFlUSE9OKSAtRSAkKHNyY2Rpcikvc2V0dXAucHkgYnVpbGQ7OyBcCiAJZXNhYwogCiAjIEJ1aWxkIHN0YXRpYyBsaWJyYXJ5CkBAIC00MzYsMjAgKzQ1MCwzNCBAQAogCSQoQVIpICQoQVJGTEFHUykgJEAgJChNT0RPQkpTKQogCSQoUkFOTElCKSAkQAogCi1saWJweXRob24kKFZFUlNJT04pLnNvOiAkKExJQlJBUllfT0JKUykKK2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbzogJChMSUJSQVJZX09CSlMpCiAJaWYgdGVzdCAkKElOU1RTT05BTUUpICE9ICQoTERMSUJSQVJZKTsgdGhlbiBcCi0JCSQoQkxEU0hBUkVEKSAkKExERkxBR1MpIC1XbCwtaCQoSU5TVFNPTkFNRSkgLW8gJChJTlNUU09OQU1FKSAkKExJQlJBUllfT0JKUykgJChNT0RMSUJTKSAkKFNITElCUykgJChMSUJDKSAkKExJQk0pICQoTERMQVNUKTsgXAorCQkkKEJMRFNIQVJFRCkgLVdsLC1oJChJTlNUU09OQU1FKSAtbyAkKElOU1RTT05BTUUpICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpOyBcCiAJCSQoTE4pIC1mICQoSU5TVFNPTkFNRSkgJEA7IFwKIAllbHNlIFwKLQkJJChCTERTSEFSRUQpICQoTERGTEFHUykgLW8gJEAgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKKwkJJChCTERTSEFSRUQpIC1vICRAICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpOyBcCiAJZmkKIAotbGlicHl0aG9uJChWRVJTSU9OKS5keWxpYjogJChMSUJSQVJZX09CSlMpCi0JICQoQ0MpIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSAkKExERkxBR1MpIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAgLVdsLC1pbnN0YWxsX25hbWUsJChwcmVmaXgpL2xpYi9saWJweXRob24kKFZFUlNJT04pLmR5bGliIC1XbCwtY29tcGF0aWJpbGl0eV92ZXJzaW9uLCQoVkVSU0lPTikgLVdsLC1jdXJyZW50X3ZlcnNpb24sJChWRVJTSU9OKSAtbyAkQCAkKExJQlJBUllfT0JKUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKLQkJIAorbGlicHl0aG9uMy5zbzoJbGlicHl0aG9uJChMRFZFUlNJT04pLnNvCisJJChCTERTSEFSRUQpIC1vICRAIC1XbCwtaGwkQCAkXgorCitsaWJweXRob24kKExEVkVSU0lPTikuZHlsaWI6ICQoTElCUkFSWV9PQkpTKQorCSAkKENDKSAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgJChQWV9MREZMQUdTKSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIC1XbCwtaW5zdGFsbF9uYW1lLCQocHJlZml4KS9saWIvbGlicHl0aG9uJChMRFZFUlNJT04pLmR5bGliIC1XbCwtY29tcGF0aWJpbGl0eV92ZXJzaW9uLCQoVkVSU0lPTikgLVdsLC1jdXJyZW50X3ZlcnNpb24sJChWRVJTSU9OKSAtbyAkQCAkKExJQlJBUllfT0JKUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCk7IFwKKwogCiBsaWJweXRob24kKFZFUlNJT04pLnNsOiAkKExJQlJBUllfT0JKUykKLQkkKExEU0hBUkVEKSAkKExERkxBR1MpIC1vICRAICQoTElCUkFSWV9PQkpTKSAkKE1PRExJQlMpICQoU0hMSUJTKSAkKExJQkMpICQoTElCTSkgJChMRExBU1QpCisJJChMRFNIQVJFRCkgLW8gJEAgJChMSUJSQVJZX09CSlMpICQoTU9ETElCUykgJChTSExJQlMpICQoTElCQykgJChMSUJNKSAkKExETEFTVCkKKworIyBDb3B5IHVwIHRoZSBnZGIgcHl0aG9uIGhvb2tzIGludG8gYSBwb3NpdGlvbiB3aGVyZSB0aGV5IGNhbiBiZSBhdXRvbWF0aWNhbGx5CisjIGxvYWRlZCBieSBnZGIgZHVyaW5nIExpYi90ZXN0L3Rlc3RfZ2RiLnB5CisjCisjIERpc3RyaWJ1dG9ycyBhcmUgbGlrZWx5IHRvIHdhbnQgdG8gaW5zdGFsbCB0aGlzIHNvbWV3aGVyZSBlbHNlIGUuZy4gcmVsYXRpdmUKKyMgdG8gdGhlIHN0cmlwcGVkIERXQVJGIGRhdGEgZm9yIHRoZSBzaGFyZWQgbGlicmFyeS4KK2dkYmhvb2tzOiAkKEJVSUxEUFlUSE9OKS1nZGIucHkKKworU1JDX0dEQl9IT09LUz0kKHNyY2RpcikvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQorJChCVUlMRFBZVEhPTiktZ2RiLnB5OiAkKFNSQ19HREJfSE9PS1MpCisJJChJTlNUQUxMX0RBVEEpICQoU1JDX0dEQl9IT09LUykgJChCVUlMRFBZVEhPTiktZ2RiLnB5CiAKICMgVGhpcyBydWxlIGlzIGhlcmUgZm9yIE9QRU5TVEVQL1JoYXBzb2R5L01hY09TWC4gSXQgYnVpbGRzIGEgdGVtcG9yYXJ5CiAjIG1pbmltYWwgZnJhbWV3b3JrIChub3QgaW5jbHVkaW5nIHRoZSBMaWIgZGlyZWN0b3J5IGFuZCBzdWNoKSBpbiB0aGUgY3VycmVudApAQCAtNDU5LDcgKzQ4Nyw3IEBACiAJCSQoTElCUkFSWSkgXAogCQkkKFJFU1NSQ0RJUikvSW5mby5wbGlzdAogCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAkKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKQotCSQoQ0MpIC1vICQoTERMSUJSQVJZKSAkKExERkxBR1MpIC1keW5hbWljbGliIFwKKwkkKENDKSAtbyAkKExETElCUkFSWSkgJChQWV9MREZMQUdTKSAtZHluYW1pY2xpYiBcCiAJCS1hbGxfbG9hZCAkKExJQlJBUlkpIC1XbCwtc2luZ2xlX21vZHVsZSBcCiAJCS1pbnN0YWxsX25hbWUgJChERVNURElSKSQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSykgXAogCQktY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgXApAQCAtNDcxLDE0ICs0OTksMTMgQEAKIAkJJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvUmVzb3VyY2VzL0luZm8ucGxpc3QKIAkkKExOKSAtZnNuICQoVkVSU0lPTikgJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zL0N1cnJlbnQKIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvJChQWVRIT05GUkFNRVdPUkspICQoUFlUSE9ORlJBTUVXT1JLRElSKS8kKFBZVEhPTkZSQU1FV09SSykKLQkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvSGVhZGVycyAkKFBZVEhPTkZSQU1FV09SS0RJUikvSGVhZGVycwogCSQoTE4pIC1mc24gVmVyc2lvbnMvQ3VycmVudC9SZXNvdXJjZXMgJChQWVRIT05GUkFNRVdPUktESVIpL1Jlc291cmNlcwogCiAjIFRoaXMgcnVsZSBidWlsZHMgdGhlIEN5Z3dpbiBQeXRob24gRExMIGFuZCBpbXBvcnQgbGlicmFyeSBpZiBjb25maWd1cmVkCiAjIGZvciBhIHNoYXJlZCBjb3JlIGxpYnJhcnk7IG90aGVyd2lzZSwgdGhpcyBydWxlIGlzIGEgbm9vcC4KICQoRExMTElCUkFSWSkgbGlicHl0aG9uJChWRVJTSU9OKS5kbGwuYTogJChMSUJSQVJZX09CSlMpCiAJaWYgdGVzdCAtbiAiJChETExMSUJSQVJZKSI7IHRoZW4gXAotCQkkKExEU0hBUkVEKSAkKExERkxBR1MpIC1XbCwtLW91dC1pbXBsaWI9JEAgLW8gJChETExMSUJSQVJZKSAkXiBcCisJCSQoTERTSEFSRUQpIC1XbCwtLW91dC1pbXBsaWI9JEAgLW8gJChETExMSUJSQVJZKSAkXiBcCiAJCQkkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCk7IFwKIAllbHNlIHRydWU7IFwKIAlmaQpAQCAtNTEyLDYgKzUzOSw5IEBACiAJCWVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIjsgXAogCWZpCiAKK01vZHVsZXMvX3Rlc3RlbWJlZDogTW9kdWxlcy9fdGVzdGVtYmVkLm8gJChMSUJSQVJZKSAkKExETElCUkFSWSkgJChQWTNMSUJSQVJZKQorCSQoTElOS0NDKSAkKFBZX0xERkxBR1MpICQoTElOS0ZPUlNIQVJFRCkgLW8gJEAgTW9kdWxlcy9fdGVzdGVtYmVkLm8gJChCTERMSUJSQVJZKSAkKExJQlMpICQoTU9ETElCUykgJChTWVNMSUJTKSAkKExETEFTVCkKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTcGVjaWFsIHJ1bGVzIGZvciBvYmplY3QgZmlsZXMKIApAQCAtNTIyLDcgKzU1Miw3IEBACiAJCSQoU0lHTkFMX09CSlMpIFwKIAkJJChNT0RPQkpTKSBcCiAJCSQoc3JjZGlyKS9Nb2R1bGVzL2dldGJ1aWxkaW5mby5jCi0JJChDQykgLWMgJChQWV9DRkxBR1MpIFwKKwkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSBcCiAJICAgICAgLURTVk5WRVJTSU9OPSJcImBMQ19BTEw9QyAkKFNWTlZFUlNJT04pYFwiIiBcCiAJICAgICAgLURIR1ZFUlNJT049IlwiYExDX0FMTD1DICQoSEdWRVJTSU9OKWBcIiIgXAogCSAgICAgIC1ESEdUQUc9IlwiYExDX0FMTD1DICQoSEdUQUcpYFwiIiBcCkBAIC01MzAsNyArNTYwLDcgQEAKIAkgICAgICAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9nZXRidWlsZGluZm8uYwogCiBNb2R1bGVzL2dldHBhdGgubzogJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jIE1ha2VmaWxlCi0JJChDQykgLWMgJChQWV9DRkxBR1MpIC1EUFlUSE9OUEFUSD0nIiQoUFlUSE9OUEFUSCkiJyBcCisJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLURQWVRIT05QQVRIPSciJChQWVRIT05QQVRIKSInIFwKIAkJLURQUkVGSVg9JyIkKHByZWZpeCkiJyBcCiAJCS1ERVhFQ19QUkVGSVg9JyIkKGV4ZWNfcHJlZml4KSInIFwKIAkJLURWRVJTSU9OPSciJChWRVJTSU9OKSInIFwKQEAgLTUzOCw3ICs1NjgsMTcgQEAKIAkJLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvZ2V0cGF0aC5jCiAKIE1vZHVsZXMvcHl0aG9uLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3B5dGhvbi5jCi0JJChNQUlOQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworCSQoTUFJTkNDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtbyAkQCAkKHNyY2RpcikvTW9kdWxlcy9weXRob24uYworCitQeXRob24vZHlubG9hZF9zaGxpYi5vOiAkKHNyY2RpcikvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBNYWtlZmlsZQorCSQoQ0MpIC1jICQoUFlfQ09SRV9DRkxBR1MpIFwKKwkJLURTT0FCST0nIiQoU09BQkkpIicgXAorCQktbyAkQCAkKHNyY2RpcikvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYworCitQeXRob24vc3lzbW9kdWxlLm86ICQoc3JjZGlyKS9QeXRob24vc3lzbW9kdWxlLmMgTWFrZWZpbGUKKwkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSBcCisJCS1EQUJJRkxBR1M9JyIkKEFCSUZMQUdTKSInIFwKKwkJLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9zeXNtb2R1bGUuYwogCiAkKElPX09CSlMpOiAkKElPX0gpCiAKQEAgLTU1MCw3ICs1OTAsNyBAQAogCQktdG91Y2ggUGFyc2VyL3BnZW4uc3RhbXAKIAogJChQR0VOKToJJChQR0VOT0JKUykKLQkJJChDQykgJChPUFQpICQoTERGTEFHUykgJChQR0VOT0JKUykgJChMSUJTKSAtbyAkKFBHRU4pCisJCSQoQ0MpICQoT1BUKSAkKFBZX0xERkxBR1MpICQoUEdFTk9CSlMpICQoTElCUykgLW8gJChQR0VOKQogCiBQYXJzZXIvZ3JhbW1hci5vOgkkKHNyY2RpcikvUGFyc2VyL2dyYW1tYXIuYyBcCiAJCQkJJChzcmNkaXIpL0luY2x1ZGUvdG9rZW4uaCBcCkBAIC01NzAsMTAgKzYxMCwxMCBAQAogUHl0aG9uL2NvbXBpbGUubyBQeXRob24vc3ltdGFibGUubyBQeXRob24vYXN0Lm86ICQoR1JBTU1BUl9IKSAkKEFTVF9IKQogCiBQeXRob24vZ2V0cGxhdGZvcm0ubzogJChzcmNkaXIpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCi0JCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYworCQkkKENDKSAtYyAkKFBZX0NPUkVfQ0ZMQUdTKSAtRFBMQVRGT1JNPSciJChNQUNIREVQKSInIC1vICRAICQoc3JjZGlyKS9QeXRob24vZ2V0cGxhdGZvcm0uYwogCiBQeXRob24vaW1wb3J0ZGwubzogJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCi0JCSQoQ0MpIC1jICQoUFlfQ0ZMQUdTKSAtSSQoRExJTkNMRElSKSAtbyAkQCAkKHNyY2RpcikvUHl0aG9uL2ltcG9ydGRsLmMKKwkJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLUkkKERMSU5DTERJUikgLW8gJEAgJChzcmNkaXIpL1B5dGhvbi9pbXBvcnRkbC5jCiAKIE9iamVjdHMvdW5pY29kZWN0eXBlLm86CSQoc3JjZGlyKS9PYmplY3RzL3VuaWNvZGVjdHlwZS5jIFwKIAkJCQkkKHNyY2RpcikvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCkBAIC01ODYsNiArNjI2LDcgQEAKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIFwKQEAgLTU5NCw3ICs2MzUsNyBAQAogCiBPYmplY3RzL2J5dGVzb2JqZWN0Lm86ICQoc3JjZGlyKS9PYmplY3RzL2J5dGVzb2JqZWN0LmMgJChCWVRFU1RSX0RFUFMpCiAKLU9iamVjdHMvYnl0ZWFycmF5b2JqZWN0Lm86ICQoc3JjZGlyKS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jICQoQllURVNUUl9ERVBTKSAKK09iamVjdHMvYnl0ZWFycmF5b2JqZWN0Lm86ICQoc3JjZGlyKS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jICQoQllURVNUUl9ERVBTKQogCiBPYmplY3RzL3VuaWNvZGVvYmplY3QubzogJChzcmNkaXIpL09iamVjdHMvdW5pY29kZW9iamVjdC5jIFwKIAkJCQkkKEJZVEVTVFJfREVQUykKQEAgLTYwMiwxMiArNjQzLDE1IEBACiAkKE9QQ09ERVRBUkdFVFNfSCk6ICQoT1BDT0RFVEFSR0VUR0VOX0ZJTEVTKQogCSQoT1BDT0RFVEFSR0VUR0VOKSAkKE9QQ09ERVRBUkdFVFNfSCkKIAotUHl0aG9uL2NldmFsLm86ICQoT1BDT0RFVEFSR0VUU19IKQorUHl0aG9uL2NldmFsLm86ICQoT1BDT0RFVEFSR0VUU19IKSBQeXRob24vY2V2YWxfZ2lsLmgKIAogUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLm86ICQoc3JjZGlyKS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBcCiAJCQkJJChCWVRFU1RSX0RFUFMpIFwKIAkJCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgKIAorT2JqZWN0cy90eXBlb2JqZWN0Lm86ICQoc3JjZGlyKS9PYmplY3RzL3R5cGVzbG90cy5pbmMKKyQoc3JjZGlyKS9PYmplY3RzL3R5cGVzbG90cy5pbmM6ICQoc3JjZGlyKS9JbmNsdWRlL3R5cGVzbG90cy5oICQoc3JjZGlyKS9PYmplY3RzL3R5cGVzbG90cy5weQorCSQoUFlUSE9OKSAkKHNyY2RpcikvT2JqZWN0cy90eXBlc2xvdHMucHkgPCAkKHNyY2RpcikvSW5jbHVkZS90eXBlc2xvdHMuaCA+ICQoc3JjZGlyKS9PYmplY3RzL3R5cGVzbG90cy5pbmMKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBIZWFkZXIgZmlsZXMKQEAgLTYyNyw3ICs2NzEsNiBAQAogCQlJbmNsdWRlL2NlbGxvYmplY3QuaCBcCiAJCUluY2x1ZGUvY2V2YWwuaCBcCiAJCUluY2x1ZGUvY2xhc3NvYmplY3QuaCBcCi0JCUluY2x1ZGUvY29iamVjdC5oIFwKIAkJSW5jbHVkZS9jb2RlLmggXAogCQlJbmNsdWRlL2NvZGVjcy5oIFwKIAkJSW5jbHVkZS9jb21waWxlLmggXApAQCAtNjM1LDEwICs2NzgsMTIgQEAKIAkJSW5jbHVkZS9kZXNjcm9iamVjdC5oIFwKIAkJSW5jbHVkZS9kaWN0b2JqZWN0LmggXAogCQlJbmNsdWRlL2R0b2EuaCBcCisJCUluY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oIFwKIAkJSW5jbHVkZS9lbnVtb2JqZWN0LmggXAogCQlJbmNsdWRlL2VycmNvZGUuaCBcCiAJCUluY2x1ZGUvZXZhbC5oIFwKIAkJSW5jbHVkZS9maWxlb2JqZWN0LmggXAorCQlJbmNsdWRlL2ZpbGV1dGlscy5oIFwKIAkJSW5jbHVkZS9mbG9hdG9iamVjdC5oIFwKIAkJSW5jbHVkZS9mcmFtZW9iamVjdC5oIFwKIAkJSW5jbHVkZS9mdW5jb2JqZWN0LmggXApAQCAtNjY1LDYgKzcxMCw3IEBACiAJCUluY2x1ZGUvcGdlbi5oIFwKIAkJSW5jbHVkZS9wZ2VuaGVhZGVycy5oIFwKIAkJSW5jbHVkZS9weWFyZW5hLmggXAorCQlJbmNsdWRlL3B5YXRvbWljLmggXAogCQlJbmNsdWRlL3B5Y2Fwc3VsZS5oIFwKIAkJSW5jbHVkZS9weWN0eXBlLmggXAogCQlJbmNsdWRlL3B5ZGVidWcuaCBcCkBAIC02NzksNiArNzI1LDcgQEAKIAkJSW5jbHVkZS9weXN0cnRvZC5oIFwKIAkJSW5jbHVkZS9weXRob25ydW4uaCBcCiAJCUluY2x1ZGUvcHl0aHJlYWQuaCBcCisJCUluY2x1ZGUvcHl0aW1lLmggXAogCQlJbmNsdWRlL3Jhbmdlb2JqZWN0LmggXAogCQlJbmNsdWRlL3NldG9iamVjdC5oIFwKIAkJSW5jbHVkZS9zbGljZW9iamVjdC5oIFwKQEAgLTcxMCw3ICs3NTcsNyBAQAogCiBURVNUT1BUUz0JLWwgJChFWFRSQVRFU1RPUFRTKQogVEVTVFBST0c9CSQoc3JjZGlyKS9MaWIvdGVzdC9yZWdydGVzdC5weQotVEVTVFBZVEhPTj0JJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLUUgLWJiICQoVEVTVFBZVEhPTk9QVFMpCitURVNUUFlUSE9OPQkkKFJVTlNIQVJFRCkgLi8kKEJVSUxEUFlUSE9OKSAtV2QgLUUgLWJiICQoVEVTVFBZVEhPTk9QVFMpCiB0ZXN0OgkJYWxsIHBsYXRmb3JtCiAJCS1maW5kICQoc3JjZGlyKS9MaWIgLW5hbWUgJyoucHlbY29dJyAtcHJpbnQgfCB4YXJncyBybSAtZgogCQktJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAkKFRFU1RPUFRTKQpAQCAtNzQyLDcgKzc4OSw3IEBACiAJCS1AaWYgd2hpY2ggcHlidWlsZGJvdC5pZGVudGlmeSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCQkJcHlidWlsZGJvdC5pZGVudGlmeSAiQ0M9JyQoQ0MpJyIgIkNYWD0nJChDWFgpJyI7IFwKIAkJZmkKLQkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAtdWFsbCAtcncgJChURVNUT1BUUykKKwkJJChURVNUUFlUSE9OKSAkKFRFU1RQUk9HKSAtdWFsbCAtcndXICQoVEVTVE9QVFMpCiAKIFFVSUNLVEVTVE9QVFM9CSQoVEVTVE9QVFMpIC14IHRlc3Rfc3VicHJvY2VzcyB0ZXN0X2lvIHRlc3RfbGliMnRvMyBcCiAJCXRlc3RfbXVsdGlieXRlY29kZWMgdGVzdF91cmxsaWIyX2xvY2FsbmV0IHRlc3RfaXRlcnRvb2xzIFwKQEAgLTc5Nyw3ICs4NDQsMTMgQEAKIAkJZWxzZQl0cnVlOyBcCiAJCWZpOyBcCiAJZG9uZQotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEJVSUxEUFlUSE9OKSAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSkKKwkkKElOU1RBTExfUFJPR1JBTSkgJChCVUlMRFBZVEhPTikgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSkKKwktaWYgdGVzdCAiJChWRVJTSU9OKSIgIT0gIiQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQlpZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvJChQWVRIT04pJChWRVJTSU9OKSQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpLyQoUFlUSE9OKSQoVkVSU0lPTikkKEVYRSk7IFwKKwkJdGhlbiBybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKKwkJZmk7IFwKKwkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIHB5dGhvbiQoTERWRVJTSU9OKSQoRVhFKSBweXRob24kKFZFUlNJT04pJChFWEUpKTsgXAorCWZpCiAJaWYgdGVzdCAtZiAkKExETElCUkFSWSk7IHRoZW4gXAogCQlpZiB0ZXN0IC1uICIkKERMTExJQlJBUlkpIiA7IHRoZW4gXAogCQkJJChJTlNUQUxMX1NIQVJFRCkgJChETExMSUJSQVJZKSAkKERFU1RESVIpJChCSU5ESVIpOyBcCkBAIC04MDcsNiArODYwLDkgQEAKIAkJCQkoY2QgJChERVNURElSKSQoTElCRElSKTsgJChMTikgLXNmICQoSU5TVFNPTkFNRSkgJChMRExJQlJBUlkpKSBcCiAJCQlmaSBcCiAJCWZpOyBcCisJCWlmIHRlc3QgLW4gIiQoUFkzTElCUkFSWSkiOyB0aGVuIFwKKwkJCSQoSU5TVEFMTF9TSEFSRUQpICQoUFkzTElCUkFSWSkgJChERVNURElSKSQoTElCRElSKS8kKFBZM0xJQlJBUlkpOyBcCisJCWZpOyBcCiAJZWxzZQl0cnVlOyBcCiAJZmkKIApAQCAtODE2LDEwICs4NzIsMjIgQEAKIAllbHNlIHRydWU7IFwKIAlmaQogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSBweXRob24kKFZFUlNJT04pJChFWEUpICQoUFlUSE9OKTMkKEVYRSkpCisJLWlmIHRlc3QgIiQoVkVSU0lPTikiICE9ICIkKExEVkVSU0lPTikiOyB0aGVuIFwKKwkJcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pLWNvbmZpZzsgXAorCQkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl0aG9uJChMRFZFUlNJT04pLWNvbmZpZyBweXRob24kKFZFUlNJT04pLWNvbmZpZyk7IFwKKwkJcm0gLWYgJChERVNURElSKSQoTElCUEMpL3B5dGhvbi0kKExEVkVSU0lPTikucGM7IFwKKwkJKGNkICQoREVTVERJUikkKExJQlBDKTsgJChMTikgLXMgcHl0aG9uLSQoVkVSU0lPTikucGMgcHl0aG9uLSQoTERWRVJTSU9OKS5wYyk7IFwKKwlmaQogCS1ybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMtY29uZmlnCiAJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5dGhvbiQoVkVSU0lPTiktY29uZmlnIHB5dGhvbjMtY29uZmlnKQogCS1ybSAtZiAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uMy5wYwogCShjZCAkKERFU1RESVIpJChMSUJQQyk7ICQoTE4pIC1zIHB5dGhvbi0kKFZFUlNJT04pLnBjIHB5dGhvbjMucGMpCisJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvaWRsZTMKKwkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgaWRsZSQoVkVSU0lPTikgaWRsZTMpCisJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvcHlkb2MzCisJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIC1zIHB5ZG9jJChWRVJTSU9OKSBweWRvYzMpCisJLXJtIC1mICQoREVTVERJUikkKEJJTkRJUikvMnRvMworCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyAydG8zLSQoVkVSU0lPTikgMnRvMykKIAogIyBJbnN0YWxsIHRoZSBtYW51YWwgcGFnZQogbWFuaW5zdGFsbDoKQEAgLTg0MCwxMiArOTA4LDEyIEBACiBNQUNIREVQUz0JJChQTEFURElSKSAkKEVYVFJBUExBVERJUikKIFhNTExJQlNVQkRJUlM9ICB4bWwgeG1sL2RvbSB4bWwvZXRyZWUgeG1sL3BhcnNlcnMgeG1sL3NheAogTElCU1VCRElSUz0JdGtpbnRlciB0a2ludGVyL3Rlc3QgdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlciBcCi0gICAgICAgICAgICAgICAgdGtpbnRlci90ZXN0L3Rlc3RfdHRrIHNpdGUtcGFja2FnZXMgdGVzdCB0ZXN0L2RhdGEgXAotCQl0ZXN0L2RlY2ltYWx0ZXN0ZGF0YSBcCi0JCXRlc3QvdHJhY2VkbW9kdWxlcyBcCi0JCWVuY29kaW5ncyBcCisgICAgICAgICAgICAgICAgdGtpbnRlci90ZXN0L3Rlc3RfdHRrIHNpdGUtcGFja2FnZXMgdGVzdCBcCisJCXRlc3QvZGVjaW1hbHRlc3RkYXRhIHRlc3QveG1sdGVzdGRhdGEgdGVzdC9zdWJwcm9jZXNzZGF0YSBcCisJCXRlc3QvdHJhY2VkbW9kdWxlcyB0ZXN0L2VuY29kZWRfbW9kdWxlcyBcCisJCWNvbmN1cnJlbnQgY29uY3VycmVudC9mdXR1cmVzIGVuY29kaW5ncyBcCiAJCWVtYWlsIGVtYWlsL21pbWUgZW1haWwvdGVzdCBlbWFpbC90ZXN0L2RhdGEgXAotCQlodG1sIGpzb24ganNvbi90ZXN0cyBodHRwIGRibSB4bWxycGMgXAorCQlodG1sIGpzb24gdGVzdC9qc29uX3Rlc3RzIGh0dHAgZGJtIHhtbHJwYyBcCiAJCXNxbGl0ZTMgc3FsaXRlMy90ZXN0IFwKIAkJbG9nZ2luZyBjc3Ygd3NnaXJlZiB1cmxsaWIgXAogCQlsaWIydG8zIGxpYjJ0bzMvZml4ZXMgbGliMnRvMy9wZ2VuMiBsaWIydG8zL3Rlc3RzIFwKQEAgLTg1NSw4ICs5MjMsOSBAQAogCQlpbXBvcnRsaWIgaW1wb3J0bGliL3Rlc3QgaW1wb3J0bGliL3Rlc3QvYnVpbHRpbiBcCiAJCWltcG9ydGxpYi90ZXN0L2V4dGVuc2lvbiBpbXBvcnRsaWIvdGVzdC9mcm96ZW4gXAogCQlpbXBvcnRsaWIvdGVzdC9pbXBvcnRfIGltcG9ydGxpYi90ZXN0L3NvdXJjZSBcCi0JCXNldHVwdG9vbHMgc2V0dXB0b29scy9jb21tYW5kIHNldHVwdG9vbHMvdGVzdHMgc2V0dXB0b29scy5lZ2ctaW5mbyBcCisJCXR1cnRsZWRlbW8gXAogCQltdWx0aXByb2Nlc3NpbmcgbXVsdGlwcm9jZXNzaW5nL2R1bW15IFwKKwkJdW5pdHRlc3QgdW5pdHRlc3QvdGVzdCBcCiAJCWN1cnNlcyBweWRvY19kYXRhICQoTUFDSERFUFMpCiBsaWJpbnN0YWxsOglidWlsZF9hbGwgJChzcmNkaXIpL0xpYi8kKFBMQVRESVIpCiAJQGZvciBpIGluICQoU0NSSVBURElSKSAkKExJQkRFU1QpOyBcCkBAIC04NzgsNyArOTQ3LDcgQEAKIAkJZWxzZQl0cnVlOyBcCiAJCWZpOyBcCiAJZG9uZQotCUBmb3IgaSBpbiAkKHNyY2RpcikvTGliLyoucHkgJChzcmNkaXIpL0xpYi8qLmRvYyAkKHNyY2RpcikvTGliLyouZWdnLWluZm8gOyBcCisJQGZvciBpIGluICQoc3JjZGlyKS9MaWIvKi5weSAkKHNyY2RpcikvTGliLyouZWdnLWluZm8gOyBcCiAJZG8gXAogCQlpZiB0ZXN0IC14ICQkaTsgdGhlbiBcCiAJCQkkKElOU1RBTExfU0NSSVBUKSAkJGkgJChERVNURElSKSQoTElCREVTVCk7IFwKQEAgLTk0NSw2ICsxMDE0LDExIEBACiAJZXhwb3J0IEVYRTsgRVhFPSIkKEJVSUxERVhFKSI7IFwKIAljZCAkKHNyY2RpcikvTGliLyQoUExBVERJUik7ICQoUlVOU0hBUkVEKSAuL3JlZ2VuCiAKK3B5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4KKwkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgorCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKKwlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKExEVkVSU0lPTikkKEVYRSksIiA8ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gPnB5dGhvbi1jb25maWcKKwogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCiBpbmNsaW5zdGFsbDoKQEAgLTk2NSwxMyArMTAzOSwxMyBAQAogCiAjIEluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIG1pc2NlbGxhbmVvdXMgc3R1ZmYgbmVlZGVkIGZvciBleHRlbmRpbmcvZW1iZWRkaW5nCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCi1MSUJQTD0JCSQoTElCUCkvY29uZmlnCitMSUJQTD0JCSQoTElCREVTVCkvY29uZmlnLSQoTERWRVJTSU9OKQogCiAjIHBrZ2NvbmZpZyBkaXJlY3RvcnkKIExJQlBDPQkJJChMSUJESVIpL3BrZ2NvbmZpZwogCi1saWJhaW5zdGFsbDoJYWxsCi0JQGZvciBpIGluICQoTElCRElSKSAkKExJQlApICQoTElCUEwpICQoTElCUEMpOyBcCitsaWJhaW5zdGFsbDoJYWxsIHB5dGhvbi1jb25maWcKKwlAZm9yIGkgaW4gJChMSUJESVIpICQoTElCUEwpICQoTElCUEMpOyBcCiAJZG8gXAogCQlpZiB0ZXN0ICEgLWQgJChERVNURElSKSQkaTsgdGhlbiBcCiAJCQllY2hvICJDcmVhdGluZyBkaXJlY3RvcnkgJCRpIjsgXApAQCAtMTAwMSwxMCArMTA3NSw3IEBACiAJJChJTlNUQUxMX0RBVEEpIE1pc2MvcHl0aG9uLnBjICQoREVTVERJUikkKExJQlBDKS9weXRob24tJChWRVJTSU9OKS5wYwogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9Nb2R1bGVzL21ha2VzZXR1cCAkKERFU1RESVIpJChMSUJQTCkvbWFrZXNldHVwCiAJJChJTlNUQUxMX1NDUklQVCkgJChzcmNkaXIpL2luc3RhbGwtc2ggJChERVNURElSKSQoTElCUEwpL2luc3RhbGwtc2gKLQkjIFN1YnN0aXR1dGlvbiBoYXBwZW5zIGhlcmUsIGFzIHRoZSBjb21wbGV0ZWx5LWV4cGFuZGVkIEJJTkRJUgotCSMgaXMgbm90IGF2YWlsYWJsZSBpbiBjb25maWd1cmUKLQlzZWQgLWUgInMsQEVYRU5BTUVALCQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCi0JJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTiktY29uZmlnCisJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZyAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKS1jb25maWcKIAlybSBweXRob24tY29uZmlnCiAJQGlmIFsgLXMgTW9kdWxlcy9weXRob24uZXhwIC1hIFwKIAkJImBlY2hvICQoTUFDSERFUCkgfCBzZWQgJ3MvXlwoLi4uXCkuKi9cMS8nYCIgPSAiYWl4IiBdOyB0aGVuIFwKQEAgLTEwNjIsNyArMTEzMyw3IEBACiAJCWVsc2UJdHJ1ZTsgXAogCQlmaTsgXAogCWRvbmUKLQkkKExOKSAtZnNuIGluY2x1ZGUvcHl0aG9uJChWRVJTSU9OKSAkKERFU1RESVIpJChwcmVmaXgpL0hlYWRlcnMKKwkkKExOKSAtZnNuIGluY2x1ZGUvcHl0aG9uJChMRFZFUlNJT04pICQoREVTVERJUikkKHByZWZpeCkvSGVhZGVycwogCXNlZCAncy8lVkVSU0lPTiUvJyJgJChSVU5TSEFSRUQpIC4vJChCVUlMRFBZVEhPTikgLWMgJ2ltcG9ydCBwbGF0Zm9ybTsgcHJpbnQocGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSknYCInL2cnIDwgJChSRVNTUkNESVIpL0luZm8ucGxpc3QgPiAkKERFU1RESVIpJChwcmVmaXgpL1Jlc291cmNlcy9JbmZvLnBsaXN0CiAJJChMTikgLWZzbiAkKFZFUlNJT04pICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpL1ZlcnNpb25zL0N1cnJlbnQKIAkkKExOKSAtZnNuIFZlcnNpb25zL0N1cnJlbnQvJChQWVRIT05GUkFNRVdPUkspICQoREVTVERJUikkKFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIpLyQoUFlUSE9ORlJBTUVXT1JLKQpAQCAtMTA3NCwzMSArMTE0NSwyMiBAQAogIyBJbnN0YWxsIGEgbnVtYmVyIG9mIHN5bWxpbmtzIHRvIGtlZXAgc29mdHdhcmUgdGhhdCBleHBlY3RzIGEgbm9ybWFsIHVuaXgKICMgaW5zdGFsbCAod2hpY2ggaW5jbHVkZXMgcHl0aG9uLWNvbmZpZykgaGFwcHkuCiBmcmFtZXdvcmtpbnN0YWxsbWFjbGliOgotCWxuIC1mcyAiLi4vLi4vLi4vJChQWVRIT05GUkFNRVdPUkspIiAiJChERVNURElSKSQocHJlZml4KS9saWIvcHl0aG9uJChWRVJTSU9OKS9jb25maWcvbGlicHl0aG9uJChWRVJTSU9OKS5hIgotCWxuIC1mcyAiLi4vLi4vLi4vJChQWVRIT05GUkFNRVdPUkspIiAiJChERVNURElSKSQocHJlZml4KS9saWIvcHl0aG9uJChWRVJTSU9OKS9jb25maWcvbGlicHl0aG9uJChWRVJTSU9OKS5keWxpYiIKKwlsbiAtZnMgIi4uLy4uLy4uLyQoUFlUSE9ORlJBTUVXT1JLKSIgIiQoREVTVERJUikkKHByZWZpeCkvbGliL3B5dGhvbiQoVkVSU0lPTikvY29uZmlnLSQoTERWRVJTSU9OKS9saWJweXRob24kKFZFUlNJT04pLmEiCisJbG4gLWZzICIuLi8uLi8uLi8kKFBZVEhPTkZSQU1FV09SSykiICIkKERFU1RESVIpJChwcmVmaXgpL2xpYi9weXRob24kKFZFUlNJT04pL2NvbmZpZy0kKExEVkVSU0lPTikvbGlicHl0aG9uJChWRVJTSU9OKS5keWxpYiIKIAlsbiAtZnMgIi4uLyQoUFlUSE9ORlJBTUVXT1JLKSIgIiQoREVTVERJUikkKHByZWZpeCkvbGliL2xpYnB5dGhvbiQoVkVSU0lPTikuZHlsaWIiCiAKICMgVGhpcyBpbnN0YWxscyB0aGUgSURFLCB0aGUgTGF1bmNoZXIgYW5kIG90aGVyIGFwcHMgaW50byAvQXBwbGljYXRpb25zCiBmcmFtZXdvcmtpbnN0YWxsYXBwczoKIAljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsYXBwcyBERVNURElSPSIkKERFU1RESVIpIgogCi1mcmFtZXdvcmtpbnN0YWxsYXBwczR3YXk6Ci0JY2QgTWFjICYmICQoTUFLRSkgaW5zdGFsbGFwcHM0d2F5IERFU1RESVI9IiQoREVTVERJUikiCi0KICMgVGhpcyBpbnN0YWxsIHRoZSB1bml4IHB5dGhvbiBhbmQgcHl0aG9udyB0b29scyBpbiAvdXNyL2xvY2FsL2JpbgogZnJhbWV3b3JraW5zdGFsbHVuaXh0b29sczoKIAljZCBNYWMgJiYgJChNQUtFKSBpbnN0YWxsdW5peHRvb2xzIERFU1RESVI9IiQoREVTVERJUikiCiAKLWZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM0d2F5OgotCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGx1bml4dG9vbHM0d2F5IERFU1RESVI9IiQoREVTVERJUikiCi0KIGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHM6CiAJY2QgTWFjICYmICQoTUFLRSkgYWx0aW5zdGFsbHVuaXh0b29scyBERVNURElSPSIkKERFU1RESVIpIgogCi1mcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzNHdheToKLQljZCBNYWMgJiYgJChNQUtFKSBhbHRpbnN0YWxsdW5peHRvb2xzNHdheSBERVNURElSPSIkKERFU1RESVIpIgotCi0jIFRoaXMgaW5zdGFsbHMgdGhlIERlbW9zIGFuZCBUb29scyBpbnRvIHRoZSBhcHBsaWNhdGlvbnMgZGlyZWN0b3J5LgorIyBUaGlzIGluc3RhbGxzIHRoZSBUb29scyBpbnRvIHRoZSBhcHBsaWNhdGlvbnMgZGlyZWN0b3J5LgogIyBJdCBpcyBub3QgcGFydCBvZiBhIG5vcm1hbCBmcmFtZXdvcmtpbnN0YWxsCiBmcmFtZXdvcmtpbnN0YWxsZXh0cmFzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxleHRyYXMgREVTVERJUj0iJChERVNURElSKSIKQEAgLTExMjQsNyArMTE4Niw3IEBACiAKICMgU29tZSBtYWtlJ3MgcHV0IHRoZSBvYmplY3QgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkKIC5jLm86Ci0JJChDQykgLWMgJChQWV9DRkxBR1MpIC1vICRAICQ8CisJJChDQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJDwKIAogIyBSdW4gcmVpbmRlbnQgb24gdGhlIGxpYnJhcnkKIHJlaW5kZW50OgpAQCAtMTEzOCw4ICsxMjAwLDggQEAKIAogIyBSZWJ1aWxkIHRoZSBjb25maWd1cmUgc2NyaXB0IGZyb20gY29uZmlndXJlLmluOyBhbHNvIHJlYnVpbGQgcHljb25maWcuaC5pbgogYXV0b2NvbmY6Ci0JKGNkICQoc3JjZGlyKTsgYXV0b2NvbmYpCi0JKGNkICQoc3JjZGlyKTsgYXV0b2hlYWRlcikKKwkoY2QgJChzcmNkaXIpOyBhdXRvY29uZiAtV2FsbCkKKwkoY2QgJChzcmNkaXIpOyBhdXRvaGVhZGVyIC1XYWxsKQogCiAjIENyZWF0ZSBhIHRhZ3MgZmlsZSBmb3IgdmkKIHRhZ3M6OgpAQCAtMTE1OCw3ICsxMjIwLDggQEAKICMgU2FuaXRhdGlvbiB0YXJnZXRzIC0tIGNsZWFuIGxlYXZlcyBsaWJyYXJpZXMsIGV4ZWN1dGFibGVzIGFuZCB0YWdzCiAjIGZpbGVzLCB3aGljaCBjbG9iYmVyIHJlbW92ZXMgYXMgd2VsbAogcHljcmVtb3ZhbDoKLQlmaW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnKi5weVtjb10nIC1leGVjIHJtIC1mIHt9ICc7JworCS1maW5kICQoc3JjZGlyKSAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtZGlyIHt9ICcrJwogCiBybXRlc3R0dXJkczoKIAktcm0gLWYgKkJBRCAqR09PRCAqU0tJUFBFRApAQCAtMTE5Myw5ICsxMjU2LDE0IEBACiAjIHJlbW92ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLCBldmVuIE1ha2VmaWxlWy5wcmVdCiAjIEtlZXAgY29uZmlndXJlIGFuZCBQeXRob24tYXN0LltjaF0sIGl0J3MgcG9zc2libGUgdGhleSBjYW4ndCBiZSBnZW5lcmF0ZWQKIGRpc3RjbGVhbjogY2xvYmJlcgorCWZvciBmaWxlIGluIExpYi90ZXN0L2RhdGEvKiA7IGRvIFwKKwkgICAgaWYgdGVzdCAiJCRmaWxlIiAhPSAiTGliL3Rlc3QvZGF0YS9SRUFETUUiOyB0aGVuIHJtICIkJGZpbGUiOyBmaTsgXAorCWRvbmUKIAktcm0gLWYgY29yZSBNYWtlZmlsZSBNYWtlZmlsZS5wcmUgY29uZmlnLnN0YXR1cyBcCiAJCU1vZHVsZXMvU2V0dXAgTW9kdWxlcy9TZXR1cC5sb2NhbCBNb2R1bGVzL1NldHVwLmNvbmZpZyBcCiAJCU1vZHVsZXMvbGRfc29fYWl4IE1vZHVsZXMvcHl0aG9uLmV4cCBNaXNjL3B5dGhvbi5wYworCS1ybSAtZiBweXRob24qLWdkYi5weQorCS1ybSAtZiBweWJ1aWxkZGlyLnR4dAogCWZpbmQgJChzcmNkaXIpICcoJyAtbmFtZSAnKi5mZGMnIC1vIC1uYW1lICcqficgXAogCQkJICAgLW8gLW5hbWUgJ1tALCNdKicgLW8gLW5hbWUgJyoub2xkJyBcCiAJCQkgICAtbyAtbmFtZSAnKi5vcmlnJyAtbyAtbmFtZSAnKi5yZWonIFwKQEAgLTEyMTQsNyArMTI4Miw3IEBACiAJCS1vIC10eXBlIGQgXAogCQktbyAtbmFtZSAnKi5bY2hzXScgXAogCQktbyAtbmFtZSAnKi5weScgXAotCQktbyAtbmFtZSAnKi5kb2MnIFwKKwkJLW8gLW5hbWUgJyoucHl3JyBcCiAJCS1vIC1uYW1lICcqLmRhdCcgXAogCQktbyAtbmFtZSAnKi5lbCcgXAogCQktbyAtbmFtZSAnKi5mZCcgXApAQCAtMTIyNiwyMCArMTI5NCwxOCBAQAogCQktbyAtbmFtZSAnKi54cG0nIFwKIAkJLW8gLW5hbWUgJyoudXVlJyBcCiAJCS1vIC1uYW1lICcqLmRlY1Rlc3QnIFwKLQkJLW8gLW5hbWUgJyosW3ZwdF0nIFwKKwkJLW8gLW5hbWUgJyoudG1Db21tYW5kJyBcCisJCS1vIC1uYW1lICcqLnRtU25pcHBldCcgXAogCQktbyAtbmFtZSAnU2V0dXAnIFwKIAkJLW8gLW5hbWUgJ1NldHVwLionIFwKIAkJLW8gLW5hbWUgcmVnZW4gXAogCQktbyAtbmFtZSBSRUFETUUgXAorCQktbyAtbmFtZSBORVdTIFwKKwkJLW8gLW5hbWUgSElTVE9SWSBcCiAJCS1vIC1uYW1lIE1ha2VmaWxlIFwKIAkJLW8gLW5hbWUgQ2hhbmdlTG9nIFwKLQkJLW8gLW5hbWUgUmVwb3NpdG9yeSBcCi0JCS1vIC1uYW1lIFJvb3QgXAotCQktbyAtbmFtZSBFbnRyaWVzIFwKLQkJLW8gLW5hbWUgVGFnIFwKLQkJLW8gLW5hbWUgdGFncyBcCi0JCS1vIC1uYW1lIFRBR1MgXAotCQktbyAtbmFtZSAuY3ZzaWdub3JlIFwKKwkJLW8gLW5hbWUgLmhnaWdub3JlIFwKKwkJLW8gLW5hbWUgLmJ6cmlnbm9yZSBcCiAJCS1vIC1uYW1lIE1BTklGRVNUIFwKIAkJLW8gLXByaW50CiAKQEAgLTEyNTcsNyArMTMyMywxMSBAQAogLlBIT05ZOiBtYW5pbnN0YWxsIGxpYmluc3RhbGwgaW5jbGluc3RhbGwgbGliYWluc3RhbGwgc2hhcmVkaW5zdGFsbAogLlBIT05ZOiBmcmFtZXdvcmtpbnN0YWxsIGZyYW1ld29ya2luc3RhbGxmcmFtZXdvcmsgZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZQogLlBIT05ZOiBmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMKLS5QSE9OWTogZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyByZWNoZWNrIGF1dG9jb25mIGNsZWFuIGNsb2JiZXIgZGlzdGNsZWFuIAorLlBIT05ZOiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIHJlY2hlY2sgYXV0b2NvbmYgY2xlYW4gY2xvYmJlciBkaXN0Y2xlYW4KIC5QSE9OWTogc21lbGx5IGZ1bm55IHBhdGNoY2hlY2sKKy5QSE9OWTogZ2RiaG9va3MKIAogIyBJRiBZT1UgUFVUIEFOWVRISU5HIEhFUkUgSVQgV0lMTCBHTyBBV0FZCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogbWFrZWZpbGUKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IDU5YjM2NjEuLmMzZjRlOTQgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTEyLDE5ICsxMiwyNyBAQAogYW5kIHRoZSBsaXN0IGlzIGluIHJvdWdoIGFscGhhYmV0aWNhbCBvcmRlciBieSBsYXN0IG5hbWVzLgogCiBEYXZpZCBBYnJhaGFtcworUm9uIEFkYW0KIEppbSBBaGxzdHJvbQogRmFyaGFuIEFobWFkCitNYXR0aGV3IEFocmVucworTmlyIEFpZGVzCiBZYW5pdiBBa25pbgogSnlya2kgQWxha3VpamFsYQorUmF5IEFsbGVuCiBCaWxseSBHLiBBbGxpZQogS2V2aW4gQWx0aXMKIEpvZSBBbWVudGEKIE1hcmsgQW5hY2tlcgorU2hhc2h3YXQgQW5hbmQKIEFuZGVycyBBbmRlcnNlbgogSm9obiBBbmRlcnNvbgogRXJpayBBbmRlcnPDqW4KIE9saXZlciBBbmRyaWNoCiBSb3NzIEFuZHJ1cworSm9uIEFuZ2xpbgorw4lyaWMgQXJhdWpvCitBbGljaWEgQXJsZW4KIEphc29uIEFzYmFocgogRGF2aWQgQXNjaGVyCiBDaHJpcyBBdExlZQpAQCAtNzQsNiArODIsNyBAQAogU3RlcGhlbiBCZXZhbgogUm9uIEJpY2tlcnMKIE5hdGFsaWEgQi4gQmlkYXJ0CitBZHJpYW4gdm9uIEJpZGRlcgogRGF2aWQgQmluZ2VyCiBEb21pbmljIEJpbmtzCiBQaGlsaXBwZSBCaW9uZGkKQEAgLTg5LDE5ICs5OCwyNCBAQAogTWF0dGhldyBCb2VkaWNrZXIKIERhdmlkIEJvbGVuCiBGb3Jlc3QgQm9uZAorR2F3YWluIEJvbHRvbgogR3JlZ29yeSBCb25kCiBKdXJqZW4gQm9zCiBQZXRlciBCb3NjaAogRXJpYyBCb3VjawogVGhpZXJyeSBCb3VzY2gKIFNlYmFzdGlhbiBCb3ZpbmcKK0plZmYgQnJhZGJlcnJ5CiBNb250eSBCcmFuZGVuYmVyZwogR2VvcmcgQnJhbmRsCiBDaHJpc3RvcGhlciBCcmFubm9uCiBUZXJyZW5jZSBCcmFubm9uCitCcmlhbiBCcmF6aWwKIERhdmUgQnJlbm5hbgogVG9tIEJyaWRnbWFuCitUb2JpYXMgQnJpbmsKIFJpY2hhcmQgQnJvZGllCitNaWNoYWVsIEJyb2dodG9uCiBEYW5pZWwgQnJvdHNreQogSmVhbiBCcm91d2VycwogR2FyeSBTLiBCcm93bgpAQCAtMTI2LDYgKzE0MCw3IEBACiBUZXJyeSBDYXJyb2xsCiBMb3JlbnpvIE0uIENhdHVjY2kKIERvbm4gQ2F2ZQorQ2hhcmxlcyBDYXphYm9uCiBQZXIgQ2VkZXJxdmlzdAogT2N0YXZpYW4gQ2VybmEKIFBhc2NhbCBDaGFtYm9uCkBAIC0xNDIsNiArMTU3LDcgQEAKIEFsYmVydCBDaGluLUEtWW91bmcKIEFkYWwgQ2hpcmlsaXVjCiBNYXR0IENoaXNob2xtCitBbmRlcnMgQ2hyaWdzdHLDtm0KIFRvbSBDaHJpc3RpYW5zZW4KIFZhZGltIENodWd1bm92CiBEYXZpZCBDaW5lZ2UKQEAgLTE1NSwxMCArMTcxLDE0IEBACiBUZXJyZW5jZSBDb2xlCiBCZW5qYW1pbiBDb2xsYXIKIEplZmZlcnkgQ29sbGlucworUm9iZXJ0IENvbGxpbnMKIFBhdWwgQ29sb21pZXRzCiBEZW52ZXIgQ29uZXliZWFyZQorR2VyZW15IENvbmRyYQorSnVhbiBKb3PDqSBDb250aQogTWF0dCBDb253YXkKIERhdmlkIE0uIENvb2tlCitKYXNvbiBSLiBDb29tYnMKIEdyZWcgQ29wZWxhbmQKIEFsZG8gQ29ydGVzaQogRGF2aWQgQ29zdGFuem8KQEAgLTE3Niw2ICsxOTYsOCBAQAogSm9hcXVpbiBDdWVuY2EgQWJlbGEKIEpvaG4gQ3VnaW5pCiBUb20gQ3VsbGl0b24KK0FudG9uaW8gQ3VuaQorQnJpYW4gQ3VydGluCiBMaXNhbmRybyBEYWxjaW4KIEFuZHJldyBEYWxrZQogTGFycyBEYW1lcm93CkBAIC0xOTEsNiArMjEzLDcgQEAKIEVyaWsgRGVtYWluZQogUm9nZXIgRGV2CiBSYWdodXJhbSBEZXZhcmFrb25kYQorQ2FsZWIgRGV2ZXJhdXgKIENhdGhlcmluZSBEZXZsaW4KIFNjb3R0IERpYWwKIFRvYnkgRGlja2Vuc29uCkBAIC0yMDIsNiArMjI1LDcgQEAKIERhbmllbCBEaXR0bWFyCiBKYXJvbWlyIERvbGVjZWsKIElzbWFpbCBEb25tZXoKK01hcmNvcyBEb25vbG8KIERpbWEgRG9yZm1hbgogWXZlcyBEb3Jmc21hbgogQ2VzYXIgRG91YWR5CkBAIC0yMjIsMTAgKzI0NiwxMiBAQAogTWF4aW0gRHp1bWFuZW5rbwogV2FsdGVyIETDtnJ3YWxkCiBIYW5zIEVja2FyZHQKK1JvZG9scGhvIEVja2hhcmR0CiBHcmFudCBFZHdhcmRzCiBKb2huIEVocmVzbWFuCiBFcmljIEVpc25lcgogQW5kcmV3IEVsYW5kCitKdWxpZW4gw4lsaWUKIExhbmNlIEVsbGluZ2hhdXMKIERhdmlkIEVseQogSmVmZiBFcGxlcgpAQCAtMjUwLDYgKzI3Niw3IEBACiBNYXJrIEZhdmFzCiBOaWVscyBGZXJndXNvbgogU2ViYXN0aWFuIEZlcm5hbmRlegorRmxvcmlhbiBGZXN0aQogVmluY2VudCBGaWFjawogVG9tZXIgRmlsaWJhCiBKZWZmcmV5IEZpbmtlbHN0ZWluCkBAIC0yOTYsNiArMzIzLDcgQEAKIEpvbmF0aGFuIEdpZGR5CiBKb2hhbm5lcyBHaWpzYmVycwogTWljaGFlbCBHaWxmaXgKK0NocmlzdG9waCBHb2hsa2UKIFRpbSBHb2xkZW4KIENocmlzIEdvbm5lcm1hbgogRGF2aWQgR29vZGdlcgpAQCAtMzAzLDYgKzMzMSw3IEBACiBFZGR5IERlIEdyZWVmCiBEdW5jYW4gR3Jpc2J5CiBGYWJpYW4gR3JvZmZlbgorRXJpYyBHcm9vCiBEYWcgR3J1bmVhdQogRmlsaXAgR3J1c3pjennFhHNraQogTWljaGFlbCBHdXJhdmFnZQpAQCAtMzI0LDYgKzM1Myw3IEBACiBMeW5kYSBIYXJkbWFuCiBEZXJlayBIYXJsYW5kCiBKYXNvbiBIYXJwZXIKK0JyaWFuIEhhcnJpbmcKIExhcnJ5IEhhc3RpbmdzCiBTaGFuZSBIYXRoYXdheQogUnljaGFyZGUgSGF3a2VzCkBAIC0zNDcsNiArMzc3LDcgQEAKIEphc29uIEhpbGRlYnJhbmQKIFJpY2hpZSBIaW5kbGUKIEtvbnJhZCBIaW5zZW4KK01pY2hhZWwgSGVucnkKIERhdmlkIEhvYmxleQogVGltIEhvY2hiZXJnCiBKb2VyZy1DeXJpbCBIb2VobGUKQEAgLTM4Niw4ICs0MTcsOSBAQAogSm9obiBJbnRlcnJhbnRlCiBCb2IgSXBwb2xpdG8KIEF0c3VvIElzaGltb3RvCi1QYXVsIEphY2tzb24KK0FkYW0gSmFja3NvbgogQmVuIEphY2tzb24KK1BhdWwgSmFja3NvbgogRGF2aWQgSmFjb2JzCiBLZXZpbiBKYWNvYnMKIEtqZXRpbCBKYWNvYnNlbgpAQCAtMzk3LDcgKzQyOSw3IEBACiBCaWxsIEphbnNzZW4KIERyZXcgSmVua2lucwogRmxlbW1pbmcgS2rDpnIgSmVuc2VuCi1KaWJhCitNdW5TaWMgSmVvbmcKIE9yamFuIEpvaGFuc2VuCiBGcmVkcmlrIEpvaGFuc3NvbgogR3JlZ29yeSBLLiBKb2huc29uCkBAIC00MTgsOCArNDUwLDEwIEBACiBLdXJ0IEIuIEthaXNlcgogVGFtaXRvIEthaml5YW1hCiBQZXRlciB2YW4gS2FtcGVuCitSYWZlIEthcGxhbgogSmFjb2IgS2FwbGFuLU1vc3MKLVBpb3RyIEthc3ByenlrCitKYW4gS2FsaXN6ZXdza2kKK0Fya2FkeSBLb3BseWFyb3YKIExvdSBLYXRlcwogSGlyb2FraSBLYXdhaQogU2ViYXN0aWVuIEtlaW0KQEAgLTQzNyw2ICs0NzEsNyBAQAogU3RldmUgS2lyc2NoCiBTZWJhc3RpYW4gS2lyc2NoZQogUm9uIEtsYXRjaGtvCitSZWlkIEtsZWNrbmVyCiBCYXN0aWFuIEtsZWluZWlkYW0KIEJvYiBLbGluZQogTWF0dGhpYXMgS2xvc2UKQEAgLTQ0NSw4ICs0ODAsMTAgQEAKIFBhdCBLbmlnaHQKIEdyZWcgS29jaGFuc2tpCiBEYW1vbiBLb2hsZXIKK1ZsYWQgS29yb2xldgogSm9zZXBoIEtvc2h5CiBNYWtzaW0gS296eWFyY2h1aworU3RlZmFuIEtyYWgKIEJvYiBLcmFzCiBIb2xnZXIgS3Jla2VsCiBNaWNoYWVsIEtyZW1lcgpAQCAtNDU4LDYgKzQ5NSw4IEBACiBWbGFkaW1pciBLdXNobmlyCiBSb3NzIExhZ2Vyd2FsbAogQ2FtZXJvbiBMYWlyZAorSmVhbi1CYXB0aXN0ZSAiSmliYSIgTGFteQorVG9yc3RlbiBMYW5kc2Nob2ZmCiDFgXVrYXN6IExhbmdhCiBUaW5vIExhbmdlCiBBbmRyZXcgTGFuZ21lYWQKQEAgLTQ3OCw2ICs1MTcsNyBAQAogVmluY2VudCBMZWdvbGwKIEtpcCBMZWhtYW4KIEpvZXJnIExlaG1hbm4KK1JvYmVydCBMZWhtYW5uCiBMdWtlIEtlbm5ldGggQ2Fzc29uIExlaWdodG9uCiBNYXJjLUFuZHJlIExlbWJ1cmcKIEpvaG4gTGVudG9uCkBAIC01MjIsNiArNTYyLDcgQEAKIERvdWcgTWFyaWVuCiBBbGV4IE1hcnRlbGxpCiBBbnRob255IE1hcnRpbgorT3dlbiBNYXJ0aW4KIFPDqWJhc3RpZW4gTWFydGluaQogUm9nZXIgTWFzc2UKIE5pY2sgTWF0aGV3c29uCkBAIC01NDEsNiArNTgyLDcgQEAKIExhbWJlcnQgTWVlcnRlbnMKIEJpbGwgdmFuIE1lbGxlCiBMdWNhcyBQcmFkbyBNZWxvCitFemlvIE1lbG90dGkKIEJyaWFuIE1lcnJlbGwKIEx1a2UgTWV3YnVybgogTWlrZSBNZXllcgpAQCAtNTYyLDkgKzYwNCwxMSBAQAogUGF1bCBNb29yZQogRGVyZWsgTW9ycgogSmFtZXMgQSBNb3JyaXNvbgorUGFibG8gTW91em8KIFNqb2VyZCBNdWxsZW5kZXIKIFNhcGUgTXVsbGVuZGVyCiBNaWNoYWVsIE11bGxlcgorTmVpbCBNdWxsZXIKIFIuIERhdmlkIE11cnJheQogUGlvdHIgTWV5ZXIKIEpvaG4gTmFnbGUKQEAgLTU4Miw2ICs2MjYsNyBAQAogR3VzdGF2byBOaWVtZXllcgogT3NjYXIgTmllcnN0cmFzegogSHJ2b2plIE5pa3NpYworR3JlZ29yeSBOb2ZpCiBKZXNzZSBOb2xsZXIKIEJpbGwgTm9vbgogU3RlZmFuIE5vcmJlcmcKQEAgLTYzNiw2ICs2ODEsNyBAQAogSmltIFN0LiBQaWVycmUKIERhbiBQaWVyc29uCiBNYXJ0aWpuIFBpZXRlcnMKK0FuYW5kIEIuIFBpbGxhaQogRnJhbsOnb2lzIFBpbmFyZAogWmFjaCBQaW5jdXMKIE1pY2hhZWwgUGlvdHJvd3NraQpAQCAtNjUxLDYgKzY5Nyw3IEBACiBTdGV2ZSBQdXJjZWxsCiBGZXJuYW5kbyBQw6lyZXoKIEVkdWFyZG8gUMOpcmV6CitQaWVycmUgUXVlbnRlbAogQnJpYW4gUXVpbmxhbgogQW5kZXJzIFF2aXN0CiBCdXJ0b24gUmFkb25zCkBAIC02NjQsNiArNzExLDcgQEAKIEpvaG4gUmVkZm9yZAogVGVycnkgUmVlZHkKIFN0ZXZlIFJlZXZlcworTGVubmFydCBSZWdlYnJvCiBPZmlyIFJlaWNoZW5iZXJnCiBTZWFuIFJlaWZzY2huZWlkZXIKIE1pY2hhZWwgUC4gUmVpbGx5CkBAIC02NzEsNiArNzE5LDcgQEAKIFN0ZXZlbiBSZWl6CiBSb2VsYW5kIFJlbmdlbGluawogVGltIFJpY2UKK0ZyYW5jZXNjbyBSaWNjaWFyZGkKIEphbiBQaWV0ZXIgUmllZ2VsCiBBcm1pbiBSaWdvCiBOaWNob2xhcyBSaWxleQpAQCAtNjgwLDYgKzcyOSw3IEBACiBNYXJrIFJvYmVydHMKIEppbSBSb2JpbnNvbgogQW5keSBSb2JpbnNvbgorTWFyayBSb2RkeQogS2V2aW4gUm9kZ2VycwogR2lhbXBhb2xvIFJvZG9sYQogTWlrZSBSb21iZXJnCkBAIC02OTYsNiArNzQ2LDcgQEAKIENsaW50b24gUm95CiBQYXVsIFJ1YmluCiBTYW0gUnVieQorRGVtdXIgUnVtZWQKIEF1ZHVuIFMuIFJ1bmRlCiBSYXVsaSBSdW9ob25lbgogSmVmZiBSdXNoCkBAIC03MDcsMTQgKzc1OCwxNyBAQAogR2VvcmdlIFNha2tpcwogUmljaCBTYWx6CiBLZXZpbiBTYW1ib3JuCitBZHJpYW4gU2FtcHNvbgogSWx5YSBTYW5kbGVyCiBNYXJrIFNhcGlybwogVHkgU2FybmEKIEJlbiBTYXllcgorQW5kcmV3IFNjaGFhZgogTWljaGFlbCBTY2hhcmYKIEFuZHJlYXMgU2NoYXdvCiBOZWlsIFNjaGVtZW5hdWVyCiBEYXZpZCBTY2hlcmVyCitCb2IgU2NobWVydHoKIEdyZWdvciBTY2htaWQKIFJhbGYgU2NobWl0dAogTWljaGFlbCBTY2huZWlkZXIKQEAgLTcyOSw2ICs3ODMsNyBAQAogQmFycnkgU2NvdHQKIE5pY2sgU2VpZGVubWFuCiDFvWlnYSBTZWlsbmFjaAorWXVyeSBTZWxpdmFub3YKIEZyZWQgU2VsbHMKIEppd29uIFNlbwogUm9nZXIgRC4gU2Vyd3kKQEAgLTczNiw2ICs3OTEsNyBAQAogRGVuaXMgU2V2ZXJzb24KIElhbiBTZXllcgogSGEgU2hhbworUmljaGFyZCBTaGFwaXJvCiBCcnVjZSBTaGVyd29vZAogQWxleGFuZGVyIFNoaWdpbgogUGV0ZSBTaGlubmVycwpAQCAtNzg5LDYgKzg0NSw3IEBACiBUaGVuYXVsdCBTeWx2YWluCiBQw6l0ZXIgU3phYsOzCiBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcworTmVpbCBUYWxsaW0KIEdlb2ZmIFRhbHZvbGEKIE11c2FzaGkgVGFtdXJhCiBXaWxsaWFtIFRhbmtzbGV5CkBAIC03OTYsMTEgKzg1MywxNCBAQAogU3RldmVuIFRhc2NodWsKIE1vbnR5IFRheWxvcgogQW15IFRheWxvcgorQW5hdG9seSBUZWNodG9uaWsKIE1pa2hhaWwgVGVyZWtob3YKIFRvYmlhcyBUaGVsZW4KIEphbWVzIFRob21hcwogUm9iaW4gVGhvbWFzCitKZXJlbXkgVGh1cmdvb2QKIEVyaWMgVGllZGVtYW5uCitKdWx5IFRpa2hvbm92CiBUcmFjeSBUaW1zCiBPcmVuIFRpcm9zaAogSmFzb24gVGlzaGxlcgpAQCAtODA4LDYgKzg2OCw3IEBACiBGcmFuayBKLiBUb2JpbgogUiBMaW5kc2F5IFRvZGQKIEJlbm5ldHQgVG9kZAorTWF0aWFzIFRvcmNoaW5za3kKIFNhbmRybyBUb3NpCiBSaWNoYXJkIFRvd25zZW5kCiBMYXVyZW5jZSBUcmF0dApAQCAtODE1LDE4ICs4NzYsMjMgQEAKIEphc29uIFRyb3dicmlkZ2UKIEFudGhvbnkgVHVpbmluZ2EKIFN0ZXBoZW4gVHVybmVyCitUaGVvZG9yZSBUdXJvY3kKIEJpbGwgVHV0dAogRG9vYmVlIFIuIFR6ZWNrCiBFcmVuIFTDvHJrYXkKIExpb25lbCBVbG1lcgogUm9nZXIgVXBvbGUKK0RhbmllbCBVcmJhbgogTWljaGFlbCBVcm1hbgogSGVjdG9yIFVydHViaWEKIEFuZGkgVmFqZGEKK0Nhc2UgVmFuIEhvcnNlbgogS3lsZSBWYW5kZXJCZWVrCitBbmRyZXcgVmFudAogQXR1bCBWYXJtYQogRG1pdHJ5IFZhc2lsaWV2CiBBbGV4YW5kcmUgVmFzc2Fsb3R0aQorTmFkZWVtIFZhd2RhCiBGcmFuayBWZXJjcnVlc3NlCiBNaWtlIFZlcmRvbmUKIEphYXAgVmVybWV1bGVuCkBAIC04NDMsNiArOTA5LDcgQEAKIENoYXJsZXMgV2FsZG1hbgogUmljaGFyZCBXYWxrZXIKIExhcnJ5IFdhbGwKK0tldmluIFdhbHplcgogUm9kcmlnbyBTdGVpbm11bGxlciBXYW5kZXJsZXkKIEdyZWcgV2FyZAogQmFycnkgV2Fyc2F3CkBAIC04NzcsNyArOTQ0LDkgQEAKIERpayBXaW50ZXIKIEJsYWtlIFdpbnRvbgogSmVhbi1DbGF1ZGUgV2lwcGxlcgorRnJhbmsgV2llcnpiaWNraQogTGFycyBXaXJ6ZW5pdXMKK0pvaG4gV2lzZW1hbgogQ2hyaXMgV2l0aGVycwogU3RlZmFuIFdpdHplbAogSXJlayBXbGl6bG8KQEAgLTg5MCw2ICs5NTksNyBAQAogVGhvbWFzIFdvdXRlcnMKIEhlaWtvIFd1bmRyYW0KIERvdWcgV3lhdHQKK0Zsb3JlbnQgWGljbHVuYQogSGlyb2thenUgWWFtYW1vdG8KIEthLVBpbmcgWWVlCiBCb2IgWW9kbG93c2tpCkBAIC05MDIsNiArOTcyLDcgQEAKIEFydHVyIFphcHJ6YWxhCiBNaWtlIFphcm5zdG9yZmYKIFNpZWJyZW4gdmFuIGRlciBaZWUKK1l1eGlhbyBaZW5nCiBVd2UgWmVzc2luCiBLYWkgWmh1CiBUYXJlayBaaWFkw6kKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCA4ODc4NjEyLi4yYTUwMDk0IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0yLDEwICsyLDEwIEBACiBQeXRob24gTmV3cwogKysrKysrKysrKysKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4xLjQ/CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjIuMT8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiBYWFhYLVhYLVhYKgorKlJlbGVhc2UgZGF0ZTogWFgtWFhYLTIwWFgqCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTUsNiArMTUsMTQgQEAKICAgRml4IGEgY3Jhc2ggaWYgYSBjbGFzcyBvdmVycmlkZSBpdHMgX19jbGFzc19fIGF0dHJpYnV0ZSAoZS5nLiBhIHByb3h5IG9mIHRoZQogICBzdHIgdHlwZSkuIFBhdGNoIHdyaXR0ZW4gYnkgQW5kcmVhcyBTdMO8aHJrLgogCistIElzc3VlICMxMDkxNDogSW5pdGlhbGl6ZSBjb3JyZWN0bHkgdGhlIGZpbGVzeXN0ZW0gY29kZWMgd2hlbiBjcmVhdGluZyBhIG5ldworICBzdWJpbnRlcnByZXRlciB0byBmaXggYSBib290c3RyYXAgaXNzdWUgd2l0aCBjb2RlY3MgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLCBhcworICB0aGUgSVNPLTg4NTktMTUgY29kZWMuCisKKy0gSXNzdWUgIzEwNTE3OiBBZnRlciBmb3JrKCksIHJlaW5pdGlhbGl6ZSB0aGUgVExTIHVzZWQgYnkgdGhlIFB5R0lMU3RhdGVfKgorICBBUElzLCB0byBhdm9pZCBhIGNyYXNoIHdpdGggdGhlIHB0aHJlYWQgaW1wbGVtZW50YXRpb24gaW4gUkhFTCA1LiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCiAtIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKICAgYWNjZXB0ZWQgdG9vLgogCkBAIC0yMiw0NiArMzAsNTEgQEAKICAgYmV0d2VlbiBuYXJyb3cgYW5kIHdpZGUgYnVpbGRzIHdoaWxlIG9wdGltaXppbmcgQklOQVJZX1NVQlNDUiBvbiBub24tQk1QCiAgIGNoYXJzIChlLmcuICJcVTAwMDEyMzQ1IlswXSkuCiAKKy0gSXNzdWUgIzExODQ1OiBGaXggdHlwbyBpbiByYW5nZW9iamVjdC5jIHRoYXQgY2F1c2VkIGEgY3Jhc2ggaW4KKyAgY29tcHV0ZV9zbGljZV9pbmRpY2VzLiAgUGF0Y2ggYnkgRGFuaWVsIFVyYmFuLgorCiAtIElzc3VlICMxMTY1MDogUHlPU19TdGRpb1JlYWRsaW5lKCkgcmV0cmllcyBmZ2V0cygpIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZAogICAoRUlOVFIpLCBmb3IgZXhhbXBsZSBpZiB0aGUgcHJvZ3JhbSBpcyBzdG9wcGVkIHdpdGggQ1RSTCt6IG9uIE1hYyBPUyBYLiBQYXRjaAogICB3cml0dGVuIGJ5IENoYXJsZXMtRnJhbmNvaXMgTmF0YWxpLgogCi0tIElzc3VlICM4NjUxOiBQeUFyZ19QYXJzZSooKSBmdW5jdGlvbnMgcmFpc2UgYW4gT3ZlcmZsb3dFcnJvciBpZiB0aGUgZmlsZQotICBkb2Vzbid0IGhhdmUgUFlfU1NJWkVfVF9DTEVBTiBkZWZpbmUgYW5kIHRoZSBzaXplIGRvZXNuJ3QgZml0IGluIGFuIGludAotICAobGVuZ3RoIGJpZ2dlciB0aGFuIDJeMzEtMSBieXRlcykuCistIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgorICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQorICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgorICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgorCistIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCisgIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KKworLSBJc3N1ZSAjMTE1MTA6IEZpeGVkIG9wdGltaXplciBidWcgd2hpY2ggdHVybmVkICJhLGI9ezEsMX0iIGludG8gImEsYj0oMSwxKSIuCisKKy0gSXNzdWUgIzExNDMyOiBBIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiBzdWJwcm9jZXNzLlBvcGVuIG9uIHBvc2l4IHN5c3RlbXMgd2l0aAorICAzLjIuMCB3aGVyZSB0aGUgc3Rkb3V0IG9yIHN0ZGVyciBmaWxlIGRlc2NyaXB0b3IgYmVpbmcgdGhlIHNhbWUgYXMgdGhlIHN0ZGluCisgIGZpbGUgZGVzY3JpcHRvciB3b3VsZCByYWlzZSBhbiBleGNlcHRpb24uIHdlYmJyb3dzZXIub3BlbiB3b3VsZCBmYWlsLiBmaXhlZC4KIAogLSBJc3N1ZSAjMTE0NTA6IERvbid0IHRydW5jYXRlIGhnIHZlcnNpb24gaW5mbyBpbiBQeV9HZXRCdWlsZEluZm8oKSB3aGVuCiAgIHRoZXJlIGFyZSBtYW55IHRhZ3MgKGUuZy4gd2hlbiB1c2luZyBtcSkuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCiAKLS0gSXNzdWUgIzEwNDUxOiBtZW1vcnl2aWV3IG9iamVjdHMgY291bGQgYWxsb3cgdG8gbXV0YXRlIGEgcmVhZGFibGUgYnVmZmVyLgotICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KKyAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCiAKLS0gSXNzdWUgIzEwODkyOiBEb24ndCBzZWdmYXVsdCB3aGVuIHRyeWluZyB0byBkZWxldGUgX19hYnN0cmFjdG1ldGhvZHNfXyBmcm9tIGEKLSAgY2xhc3MuCistIElzc3VlICMxMTI4NjogUmFpc2UgYSBWYWx1ZUVycm9yIGZyb20gY2FsbGluZyBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlciB3aXRoCisgIGEgYnVmZmVyIHN0cnVjdCBoYXZpbmcgYSBOVUxMIGRhdGEgcG9pbnRlci4KIAotLSBJc3N1ZSAjODAyMDogQXZvaWQgYSBjcmFzaCB3aGVyZSB0aGUgc21hbGwgb2JqZWN0cyBhbGxvY2F0b3Igd291bGQgcmVhZAotICBub24tUHl0aG9uIG1hbmFnZWQgbWVtb3J5IHdoaWxlIGl0IGlzIGJlaW5nIG1vZGlmaWVkIGJ5IGFub3RoZXIgdGhyZWFkLgotICBQYXRjaCBieSBNYXR0IEJhbmR5LgotCi0tIElzc3VlICM4Mjc4OiBPbiBXaW5kb3dzIGFuZCB3aXRoIGEgTlRGUyBmaWxlc3lzdGVtLCBvcy5zdGF0KCkgYW5kIG9zLnV0aW1lKCkKLSAgY2FuIG5vdyBoYW5kbGUgZGF0ZXMgYWZ0ZXIgMjAzOC4KKy0gSXNzdWUgIzExMjcyOiBPbiBXaW5kb3dzLCBpbnB1dCgpIHN0cmlwcyAnXHInIChhbmQgbm90IG9ubHkgJ1xuJyksIGFuZAorICBzeXMuc3RkaW4gdXNlcyB1bml2ZXJzYWwgbmV3bGluZSAocmVwbGFjZSAnXHJcbicgYnkgJ1xuJykuCiAKIC0gaXNzdWUgIzExODI4OiBzdGFydHN3aXRoIGFuZCBlbmRzd2l0aCBkb24ndCBhY2NlcHQgTm9uZSBhcyBzbGljZSBpbmRleC4KICAgUGF0Y2ggYnkgVG9yc3RlbiBCZWNrZXIuCiAKLS0gSXNzdWUgIzQyMzY6IFB5TW9kdWxlX0NyZWF0ZTIgbm93IGNoZWNrcyB0aGUgaW1wb3J0IG1hY2hpbmVyeSBkaXJlY3RseQotICByYXRoZXIgdGhhbiB0aGUgUHlfSXNJbml0aWFsaXplZCBmbGFnLCBhdm9pZGluZyBhIEZhdGFsIFB5dGhvbgotICBlcnJvciBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgd2hlbiBhbiBpbXBvcnQgaXMgZG9uZSBpbiBfX2RlbF9fLgorLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgorICBuYXJyb3cgYnVpbGQuCiAKLS0gSXNzdWUgIzEwNTk2OiBGaXggZmxvYXQuX19tb2RfXyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBhcwotICBmbG9hdC5fX2Rpdm1vZF9fIHdpdGggcmVzcGVjdCB0byBzaWduZWQgemVyb3MuICAtNC4wICUgNC4wIHNob3VsZCBiZQotICAwLjAsIG5vdCAtMC4wLgorLSBDaGVjayBmb3IgTlVMTCByZXN1bHQgaW4gUHlUeXBlX0Zyb21TcGVjLgogCi0tIElzc3VlICM1NTg3OiBhZGQgYSByZXByIHRvIGRpY3RfcHJveHkgb2JqZWN0cy4gIFBhdGNoIGJ5IERhdmlkIFN0YW5layBhbmQKLSAgRGFuaWVsIFVyYmFuLgotCi0tIElzc3VlICMxMTUwNjogVHJ5aW5nIHRvIGFzc2lnbiB0byBhIGJ5dGVzIGxpdGVyYWwgc2hvdWxkIHJlc3VsdCBpbiBhCi0gIFN5bnRheEVycm9yLgorLSBJc3N1ZSAjMTEzODY6IGJ5dGVhcnJheS5wb3AoKSBub3cgdGhyb3dzIEluZGV4RXJyb3Igd2hlbiB0aGUgYnl0ZWFycmF5IGlzCisgIGVtcHR5LCBpbnN0ZWFkIG9mIE92ZXJmbG93RXJyb3IuCiAKIExpYnJhcnkKIC0tLS0tLS0KQEAgLTY5LDYgKzgyLDExIEBACiAtIElzc3VlICMxMTI3NzogbW1hcC5tbWFwKCkgY2FsbHMgZmNudGwoZmQsIEZfRlVMTEZTWU5DKSBvbiBNYWMgT1MgWCB0byBnZXQKICAgYXJvdW5kIGEgbW1hcCBidWcgd2l0aCBzcGFyc2UgZmlsZXMuIFBhdGNoIHdyaXR0ZW4gYnkgU3RlZmZlbiBEYW9kZSBOdXJwbWVzby4KIAorLSBJc3N1ZSAjMTE4NTg6IGNvbmZpZ3BhcnNlci5FeHRlbmRlZEludGVycG9sYXRpb24gZXhwZWN0ZWQgbG93ZXItY2FzZSBzZWN0aW9uCisgIG5hbWVzLgorCistIElzc3VlICMxMTMyNDogQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSkgbm93IHdvcmtzIGNvcnJlY3RseS4KKwogLSBJc3N1ZSAjMTE3NjM6IGRvbid0IHVzZSBkaWZmbGliIGluIFRlc3RDYXNlLmFzc2VydE11bHRpTGluZUVxdWFsIGlmIHRoZQogICBzdHJpbmdzIGFyZSB0b28gbG9uZy4KIApAQCAtNzgsMTggKzk2LDI1IEBACiAgIFB5X0FkZFBlbmRpbmdDYWxsKCkgZm9yIHRoZSBmaXJzdCBzaWduYWwgdG8gZml4IGEgZGVhZGxvY2sgb24gcmVlbnRyYW50IG9yCiAgIHBhcmFsbGVsIGNhbGxzLiBQeUVycl9TZXRJbnRlcnJ1cHQoKSB3cml0ZXMgYWxzbyBpbnRvIHRoZSB3YWtlIHVwIGZpbGUuCiAKLS0gSXNzdWUgIzExNDY3OiBGaXggdXJscGFyc2UgYmVoYXZpb3Igd2hlbiBoYW5kbGluZyB1cmxzIHdoaWNoIGNvbnRhaW5zIHNjaGVtZQotICBzcGVjaWZpYyBwYXJ0IG9ubHkgZGlnaXRzLiBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKy0gSXNzdWUgIzExNDkyOiBmaXggc2V2ZXJhbCBpc3N1ZXMgd2l0aCBoZWFkZXIgZm9sZGluZyBpbiB0aGUgZW1haWwgcGFja2FnZS4KKworLSBJc3N1ZSAjMTE4NTI6IEFkZCBtaXNzaW5nIGltcG9ydHMgYW5kIHVwZGF0ZSB0ZXN0cy4KIAogLSBJc3N1ZSAjMTE4NzU6IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0J3MgX19yZWR1Y2VfXyB3YXMgdGVtcG9yYXJpbHkKICAgbXV0YXRpbmcgdGhlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3Qgd29ya2luZyBvbiBhIGNvcHkuCiAKKy0gSXNzdWUgIzExNDY3OiBGaXggdXJscGFyc2UgYmVoYXZpb3Igd2hlbiBoYW5kbGluZyB1cmxzIHdoaWNoIGNvbnRhaW5zIHNjaGVtZQorICBzcGVjaWZpYyBwYXJ0IG9ubHkgZGlnaXRzLiBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KKwogLSBjb2xsZWN0aW9ucy5Db3VudGVyKCkuY29weSgpIG5vdyB3b3JrcyBjb3JyZWN0bHkgZm9yIHN1YmNsYXNzZXMuCiAKIC0gSXNzdWUgIzExNDc0OiBGaXggdGhlIGJ1ZyB3aXRoIHVybDJwYXRobmFtZSgpIGhhbmRsaW5nIG9mICcvQ3wvJyBvbiBXaW5kb3dzLgogICBQYXRjaCBieSBTYW50b3NvIFdpamF5YS4KIAotLSBJc3N1ZSAjOTIzMzogRml4IGpzb24gdG8gd29yayBwcm9wZXJseSBldmVuIHdoZW4gX2pzb24gaXMgbm90IGF2YWlsYWJsZS4KKy0gSXNzdWUgIzkyMzM6IEZpeCBqc29uLmxvYWRzKCd7fScpIHRvIHJldHVybiBhIGRpY3QgKGluc3RlYWQgb2YgYSBsaXN0KSwgd2hlbgorICBfanNvbiBpcyBub3QgYXZhaWxhYmxlLgorCistIElzc3VlICMxMTgzMDogUmVtb3ZlIHVubmVjZXNzYXJ5IGludHJvc3BlY3Rpb24gY29kZSBpbiB0aGUgZGVjaW1hbCBtb2R1bGUuCiAKIC0gSXNzdWUgIzExNzAzOiB1cmxsaWIyLmdldHVybCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IHVybCB3aGVuIHRoZSBvcmlnaW5hbAogICB1cmwgY29udGFpbnMgI2ZyYWdtZW50LgpAQCAtMTAwLDggKzEyNSwzMyBAQAogLSBJc3N1ZSAjNTE2MjogVHJlYXQgc2VydmljZXMgbGlrZSBmcm96ZW4gZXhlY3V0YWJsZXMgdG8gYWxsb3cgY2hpbGQgc3Bhd25pbmcKICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvbiBXaW5kb3dzLgogCistIElzc3VlICMxMTgxNDogRml4IGxpa2VseSB0eXBvIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sLl90ZXJtaW5hdGUoKS4KKworLSBJc3N1ZSAjMTE3NDc6IEZpeCByYW5nZSBmb3JtYXR0aW5nIGluIGRpZmZsaWIuY29udGV4dF9kaWZmKCkgYW5kCisgIGRpZmZsaWIudW5pZmllZF9kaWZmKCkuCisKKy0gSXNzdWUgIzg0Mjg6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIG11bHRpcHJvY2Vzc2luZy5Qb29sIHdoZW4gdGVybWluYXRpbmcKKyAgd29ya2VyIHByb2Nlc3NlczogbmV3IHByb2Nlc3NlcyB3b3VsZCBiZSBzcGF3bmVkIHdoaWxlIHRoZSBwb29sIGlzIGJlaW5nCisgIHNodXQgZG93bi4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjNzMxMTogZml4IGh0bWwucGFyc2VyIHRvIGFjY2VwdCBub24tQVNDSUkgYXR0cmlidXRlIHZhbHVlcy4KKworLSBJc3N1ZSAjMTE2MDU6IGVtYWlsLnBhcnNlci5CeXRlc0ZlZWRQYXJzZXIgd2FzIGluY29ycmVjdGx5IGNvbnZlcnRpbmcgbXVsdGlwYXJ0CisgIHN1YnBhcmFydHMgd2l0aCBhbiA4Yml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZSBieXRlcy4KKwogLSBJc3N1ZSAjMTA5NjM6IEVuc3VyZSB0aGF0IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBuZXZlciByYWlzZXMgRVBJUEUuCiAKKy0gSXNzdWUgIzExNzQ2OiBGaXggU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSB0byBhY2NlcHQgZWxsaXB0aWMgY3VydmUKKyAgcHJpdmF0ZSBrZXlzLgorCistIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgaW5pdGZzZW5jb2RpbmcoKSB3YXMgbm90CisgIGNhbGxlZCB5ZXQ6IGRldGVjdCBib290c3RyYXAgKHN0YXJ0dXApIGlzc3VlcyBlYXJsaWVyLgorCistIElzc3VlICMxMTYxODogRml4IHRoZSB0aW1lb3V0IGxvZ2ljIGluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSB1bmRlciBXaW5kb3dzLgorCistIElzc3VlICMxMTI1NjogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3Mgb24gZnVuY3Rpb25zIHRoYXQgdGFrZSBvbmx5IGtleXdvcmQKKyAgYXJndW1lbnRzLgorCiAtIElzc3VlICMxMTY5NjogRml4IElEIGdlbmVyYXRpb24gaW4gbXNpbGliLgogCiAtIElzc3VlICM5Njk2OiBGaXggZXhjZXB0aW9uIGluY29ycmVjdGx5IHJhaXNlZCBieSB4ZHJsaWIuUGFja2VyLnBhY2tfaW50IHdoZW4KQEAgLTExMSwyMyArMTYxLDQzIEBACiAgIGFyZSBub3cgemVyb2VkIG9uIGNyZWF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZQogICBkb2N1bWVudGF0aW9uLgogCi0tIElzc3VlICM3NjM5OiBGaXggc2hvcnQgZmlsZSBuYW1lIGdlbmVyYXRpb24gaW4gYmRpc3RfbXNpLgorLSBJc3N1ZSAjNzYzOTogRml4IHNob3J0IGZpbGUgbmFtZSBnZW5lcmF0aW9uIGluIGJkaXN0X21zaQogCiAtIElzc3VlICMxMTY1OTogRml4IFJlc291cmNlV2FybmluZyBpbiB0ZXN0X3N1YnByb2Nlc3MgaW50cm9kdWNlZCBieSAjMTE0NTkuCiAgIFBhdGNoIGJ5IEJlbiBIYXlkZW4uCiAKKy0gSXNzdWUgIzExNjM1OiBEb24ndCB1c2UgcG9sbGluZyBpbiB3b3JrZXIgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzIGxhdW5jaGVkIGJ5CisgIGNvbmN1cnJlbnQuZnV0dXJlcy4KKworLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fCisKKy0gSXNzdWUgIzExNjY2OiBsZXQgaGVscCgpIGRpc3BsYXkgbmFtZWQgdHVwbGUgYXR0cmlidXRlcyBhbmQgbWV0aG9kcworICB0aGF0IHN0YXJ0IHdpdGggYSBsZWFkaW5nIHVuZGVyc2NvcmUuCisKIC0gSXNzdWUgIzExNjYyOiBNYWtlIHVybGxpYiBhbmQgdXJsbGliMiBpZ25vcmUgcmVkaXJlY3Rpb25zIGlmIHRoZQogICBzY2hlbWUgaXMgbm90IEhUVFAsIEhUVFBTIG9yIEZUUCAoQ1ZFLTIwMTEtMTUyMSkuCiAKIC0gSXNzdWUgIzU1Mzc6IEZpeCB0aW1lMmlzb3ooKSBhbmQgdGltZTJuZXRzY2FwZSgpIGZ1bmN0aW9ucyBvZgogICBodHRwbGliLmNvb2tpZWphciBmb3IgZXhwaXJhdGlvbiB5ZWFyIGdyZWF0ZXIgdGhhbiAyMDM4IG9uIDMyLWJpdCBzeXN0ZW1zLgogCistIElzc3VlICMxMTU2MzogQ29ubmVjdGlvbjpjbG9zZSBoZWFkZXIgaXMgc2VudCBieSByZXF1ZXN0cyB1c2luZyBVUkxPcGVuZXIKKyAgY2xhc3Mgd2hpY2ggaGVscHMgaW4gY2xvc2luZyBvZiBzb2NrZXRzIGFmdGVyIGNvbm5lY3Rpb24gaXMgb3Zlci4gUGF0Y2gKKyAgY29udHJpYnV0aW9ucyBieSBKZWZmIE1jTmVpbCBhbmQgTmFkZWVtIFZhd2RhLgorCiAtIElzc3VlICMxMTQ1OTogQSBgYGJ1ZnNpemVgYCB2YWx1ZSBvZiAwIGluIHN1YnByb2Nlc3MuUG9wZW4oKSByZWFsbHkgY3JlYXRlcwogICB1bmJ1ZmZlcmVkIHBpcGVzLCBzdWNoIHRoYXQgc2VsZWN0KCkgd29ya3MgcHJvcGVybHkgb24gdGhlbS4KIAogLSBJc3N1ZSAjNTQyMTogRml4IG1pc2xlYWRpbmcgZXJyb3IgbWVzc2FnZSB3aGVuIG9uZSBvZiBzb2NrZXQuc2VuZHRvKCkncwogICBhcmd1bWVudHMgaGFzIHRoZSB3cm9uZyB0eXBlLiAgUGF0Y2ggYnkgTmlraXRhIFZldG9zaGtpbi4KIAorLSBJc3N1ZSAjMTA5Nzk6IHVuaXR0ZXN0IHN0ZG91dCBidWZmZXJpbmcgbm93IHdvcmtzIHdpdGggY2xhc3MgYW5kIG1vZHVsZQorICBzZXR1cCBhbmQgdGVhcmRvd24uCisKKy0gSXNzdWUgIzExNTc3OiBmaXggUmVzb3VyY2VXYXJuaW5nIHRyaWdnZXJlZCBieSBpbXByb3ZlZCBiaW5oZXggdGVzdCBjb3ZlcmFnZQorCistIElzc3VlICMxMTI0MzogZml4IHRoZSBwYXJhbWV0ZXIgcXVlcnlpbmcgbWV0aG9kcyBvZiBNZXNzYWdlIHRvIHdvcmsgaWYKKyAgdGhlIGhlYWRlcnMgY29udGFpbiB1bi1lbmNvZGVkIG5vbi1BU0NJSSBkYXRhLgorCiAtIElzc3VlICMxMTQwMTogZml4IGhhbmRsaW5nIG9mIGhlYWRlcnMgd2l0aCBubyB2YWx1ZTsgdGhpcyBmaXhlcyBhIHJlZ3Jlc3Npb24KICAgcmVsYXRpdmUgdG8gUHl0aG9uMiBhbmQgdGhlIHJlc3VsdCBpcyBub3cgdGhlIHNhbWUgYXMgaXQgd2FzIGluIFB5dGhvbjIuCiAKQEAgLTEzNSw2ICsyMDUsMTIgQEAKICAgd2hpY2ggd2FzIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yLiAgVW5saWtlIFB5dGhvbjIsIHRoZSBsYXN0IGxpbmUKICAgb2YgdGhlIGZvbGRlZCBib2R5IG5vdyBlbmRzIHdpdGggYSBjYXJyaWFnZSByZXR1cm4uCiAKKy0gSXNzdWUgIzExNTYwOiBzaHV0aWwudW5wYWNrX2FyY2hpdmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIHRoZSBmb3JtYXQKKyAgcGFyYW1ldGVyLiBQYXRjaCBieSBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExMTMzOiBmaXggdHdvIGNhc2VzIHdoZXJlIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgY2FuIHRyaWdnZXIgY29kZQorICBleGVjdXRpb24uIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKwogLSBJc3N1ZSAjMTE1Njk6IHVzZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzeXNjdGwgY29tbWFuZCBpbiBtdWx0aXByb2Nlc3NpbmcgdG8KICAgZW5zdXJlIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCByZWdhcmRsZXNzIG9mIHRoZSBzaGVsbCBQQVRILiBUaGlzIGVuc3VyZXMKICAgdGhhdCBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50IHdvcmtzIG9uIGRlZmF1bHQgaW5zdGFsbHMgb2YgTWFjT1NYLgpAQCAtMTQzLDYgKzIxOSwxMiBAQAogICBub3QgaW5zdGFsbGVkLiBJbnN0ZWFkLCB0aGUgemlwZmlsZS5aSVBfU1RPUkVEIGNvbXByZXNzaW9uIGlzIHVzZWQgdG8gY3JlYXRlCiAgIHRoZSBaaXBGaWxlLiBQYXRjaCBieSBOYXRhbGlhIEIuIEJpZGFydC4KIAorLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKKyAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KKworLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBvcyB4IHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKKyAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KKwogLSBJc3N1ZSAjMTE0OTE6IGRibS5lcnJvciBpcyBubyBsb25nZXIgcmFpc2VkIHdoZW4gZGJtLm9wZW4gaXMgY2FsbGVkIHdpdGgKICAgdGhlICJuIiBhcyB0aGUgZmxhZyBhcmd1bWVudCBhbmQgdGhlIGZpbGUgZXhpc3RzLiBUaGUgYmVoYXZpb3IgbWF0Y2hlcwogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQgZ2VuZXJhbCBsb2dpYy4KQEAgLTE1Nyw0OSArMjM5LDI2MiBAQAogICBgYG1tYXAuUFJPVF9SRUFEfG1tYXAuUFJPVF9FWEVDYGAgd291bGQgc2VnZmF1bHQgaW5zdGVhZCBvZiByYWlzaW5nIGEKICAgVHlwZUVycm9yLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgogCistIElzc3VlICMxMTMwNjogbWFpbGJveCBpbiBjZXJ0YWluIGNhc2VzIGFkYXB0cyB0byBhbiBpbmFiaWxpdHkgdG8gb3BlbgorICBjZXJ0YWluIGZpbGVzIGluIHJlYWQtd3JpdGUgbW9kZS4gIFByZXZpb3VzbHkgaXQgZGV0ZWN0ZWQgdGhpcyBieQorICBjaGVja2luZyBmb3IgRUFDQ0VTLCBub3cgaXQgYWxzbyBjaGVja3MgZm9yIEVST0ZTLgorCiAtIElzc3VlICMxMTI2NTogYXN5bmNvcmUgbm93IGNvcnJlY3RseSBoYW5kbGVzIEVQSVBFLCBFQkFERiBhbmQgRUFHQUlOIGVycm9ycwogICBvbiBhY2NlcHQoKSwgc2VuZCgpIGFuZCByZWN2KCkuCiAKLS0gSXNzdWUgIzEwMjc2OiBGaXggdGhlIHJlc3VsdHMgb2YgemxpYi5jcmMzMigpIGFuZCB6bGliLmFkbGVyMzIoKSBvbiBidWZmZXJzCi0gIGxhcmdlciB0aGFuIDRHQi4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgorCistIElzc3VlICM3MzIyOiBUcnlpbmcgdG8gcmVhZCBmcm9tIGEgc29ja2V0J3MgZmlsZS1saWtlIG9iamVjdCBhZnRlciBhIHRpbWVvdXQKKyAgb2NjdXJyZWQgbm93IHJhaXNlcyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNpbGVudGx5IGxvc2luZyBkYXRhLgorCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisKKy0gSXNzdWUgIzExMjI0OiBGaXhlZCBhIHJlZ3Jlc3Npb24gaW4gdGFyZmlsZSB0aGF0IGFmZmVjdGVkIHRoZSBmaWxlLWxpa2UKKyAgb2JqZWN0cyByZXR1cm5lZCBieSBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgcmVnYXJkaW5nIHBlcmZvcm1hbmNlLCBtZW1vcnkKKyAgY29uc3VtcHRpb24gYW5kIGZhaWx1cmVzIHdpdGggdGhlIHN0cmVhbSBpbnRlcmZhY2UuCisKKy0gSXNzdWUgIzExMDc0OiBNYWtlICd0b2tlbml6ZScgc28gaXQgY2FuIGJlIHJlbG9hZGVkLgogCiAtIElzc3VlICM0NjgxOiBBbGxvdyBtbWFwKCkgdG8gd29yayBvbiBmaWxlIHNpemVzIGFuZCBvZmZzZXRzIGxhcmdlciB0aGFuCiAgIDRHQiwgZXZlbiBvbiAzMi1iaXQgYnVpbGRzLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbCwgYWRhcHRlZCBmb3IKICAgMzItYml0IFdpbmRvd3MuCiAKLS0gZW1haWwuaGVhZGVyLkhlYWRlciB3YXMgaW5jb3JyZWN0bHkgZW5jb2RpbmcgZm9sZGluZyB3aGl0ZSBzcGFjZSB3aGVuCi0gIHJmYzIwNDctZW5jb2RpbmcgaGVhZGVyIHZhbHVlcyB3aXRoIGVtYmVkZGVkIG5ld2xpbmVzLCBsZWF2aW5nIHRoZW0KLSAgd2l0aG91dCBmb2xkaW5nIHdoaXRlc3BhY2UuICBJdCBub3cgdXNlcyB0aGUgY29udGludWF0aW9uX3dzLCBhcyBpdAotICBkb2VzIGZvciBjb250aW51YXRpb24gbGluZXMgdGhhdCBpdCBjcmVhdGVzIGl0c2VsZi4KLQotLSBJc3N1ZSAjMTAzNjA6IEluIFdlYWtTZXQsIGRvIG5vdCByYWlzZSBUeXBlRXJyb3JzIHdoZW4gdGVzdGluZyBmb3IKLSAgbWVtYmVyc2hpcCBvZiBub24td2Vha3JlZmFibGUgb2JqZWN0cy4KLQotLSBJc3N1ZSAjMTA1NDk6IEZpeCBweWRvYyB0cmFjZWJhY2sgd2hlbiB0ZXh0LWRvY3VtZW50aW5nIGNlcnRhaW4gY2xhc3Nlcy4KLQotLSBJc3N1ZSAjMTExMTA6IEZpeCBfc3FsaXRlIHRvIG5vdCBkZXJlZiBhIE5VTEwgd2hlbiBtb2R1bGUgY3JlYXRpb24gZmFpbHMuCi0KIC0gSXNzdWUgIzExMDg5OiBGaXggcGVyZm9ybWFuY2UgaXNzdWUgbGltaXRpbmcgdGhlIHVzZSBvZiBDb25maWdQYXJzZXIoKQogICB3aXRoIGxhcmdlIGNvbmZpZyBmaWxlcy4KIAotLSBJc3N1ZSAjODI3NTogRml4IHBhc3Npbmcgb2YgY2FsbGJhY2sgYXJndW1lbnRzIHdpdGggY3R5cGVzIHVuZGVyIFdpbjY0LgotICBQYXRjaCBieSBTdGFuIE1paGFpLgorLSBJc3N1ZSAjMTAyNzY6IEZpeCB0aGUgcmVzdWx0cyBvZiB6bGliLmNyYzMyKCkgYW5kIHpsaWIuYWRsZXIzMigpIG9uIGJ1ZmZlcnMKKyAgbGFyZ2VyIHRoYW4gNEdCLiAgUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICM5MzQ4OiBSYWlzZSBhbiBlYXJseSBlcnJvciBpZiBhcmdwYXJzZSBuYXJncyBhbmQgbWV0YXZhciBkb24ndCBtYXRjaC4KKworLSBJc3N1ZSAjODk4MjogSW1wcm92ZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGFyZ3BhcnNlIE5hbWVzcGFjZSBvYmplY3QuCisKKy0gSXNzdWUgIzkzNDM6IERvY3VtZW50IHRoYXQgYXJncGFyc2UgcGFyZW50IHBhcnNlcnMgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZQorICB0aGVpciBjaGlsZHJlbi4KKworLSBJc3N1ZSAjOTAyNjogRml4IG9yZGVyIG9mIGFyZ3BhcnNlIHN1Yi1jb21tYW5kcyBpbiBoZWxwIG1lc3NhZ2VzLgorCistIElzc3VlICM5MzQ3OiBGaXggZm9ybWF0dGluZyBmb3IgdHVwbGVzIGluIGFyZ3BhcnNlIHR5cGU9IGVycm9yIG1lc3NhZ2VzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTE0MTE6IEZpeCAnbWFrZSBERVNURElSPScgd2l0aCBhIHJlbGF0aXZlIGRlc3RpbmF0aW9uLgorCistIElzc3VlICMxMTI2ODogUHJldmVudCBNYWMgT1MgWCBJbnN0YWxsZXIgZmFpbHVyZSBpZiBEb2N1bWVudGF0aW9uCisgIHBhY2thZ2UgaGFkIHByZXZpb3VzbHkgYmVlbiBpbnN0YWxsZWQuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTE3MTg6IElETEUncyBvcGVuIG1vZHVsZSBkaWFsb2cgY291bGRuJ3QgZmluZCB0aGUgX19pbml0X18ucHkKKyAgZmlsZSBpbiBhIHBhY2thZ2UuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxMTE3OTogTWFrZSBjY2JlbmNoIHdvcmsgdW5kZXIgUHl0aG9uIDMuMSBhbmQgMi43IGFnYWluLgorCitFeHRlbnNpb25zCistLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4Mzg6IFByZXZlbnQgc2VnZmF1bHQgaW4gY3R5cGVzLCB3aGVuIF9hc19wYXJhbWV0ZXJfIG9uIGEgY2xhc3MgaXMgc2V0CisgIHRvIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzEwOTE0OiBBZGQgYSBtaW5pbWFsIGVtYmVkZGluZyB0ZXN0IHRvIHRlc3RfY2FwaS4KKworLSBJc3N1ZSAjMTE3OTA6IEZpeCBzcG9yYWRpYyBmYWlsdXJlcyBpbiB0ZXN0X211bHRpcHJvY2Vzc2luZy5XaXRoUHJvY2Vzc2VzVGVzdENvbmRpdGlvbi4KKworLSBGaXggcG9zc2libGUgImZpbGUgYWxyZWFkeSBleGlzdHMiIGVycm9yIHdoZW4gcnVubmluZyB0aGUgdGVzdHMgaW4gcGFyYWxsZWwuCisKKy0gSXNzdWUgIzExNzE5OiBGaXggbWVzc2FnZSBhYm91dCB1bmV4cGVjdGVkIHRlc3RfbXNpbGliIHNraXAgb24gbm9uLVdpbmRvd3MKKyAgcGxhdGZvcm1zLiBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNjUzOiBmaXggLVcgd2l0aCAtaiBpbiByZWdydGVzdC4KKworLSBJc3N1ZSAjMTE1Nzc6IGltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiBiaW5oZXgucHkuIFBhdGNoIGJ5IEFya2FkeSBLb3BseWFyb3YuCisKKy0gSXNzdWUgIzExNTc4OiBhZGRlZCB0ZXN0IGZvciB0aGUgdGltZWl0IG1vZHVsZS4gIFBhdGNoIE1pY2hhZWwgSGVucnkuCisKKy0gSXNzdWUgIzExNTAzOiBpbXByb3ZlIHRlc3QgY292ZXJhZ2Ugb2YgcG9zaXhwYXRoLnB5LiBQYXRjaCBieSBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuLgorCistIElzc3VlICMxMTU0ODogSW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHRoZSBzaHV0aWwgbW9kdWxlLiBQYXRjaCBieQorICBFdmFuIERhbmRyZWEuCisKKy0gSXNzdWUgIzExNTU0OiBSZWFjdGl2YXRlZCB0ZXN0X2VtYWlsX2NvZGVjcy4KKworLSBJc3N1ZSAjMTE0OTA6IHRlc3Rfc3VicHJvY2Vzczp0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yIG5vIGxvbmdlciBnaXZlcyBhCisgIGZhbHNlIHBvc2l0aXZlIGlmIHRoZSBsYXN0IGRpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcyBpbmFjY2Vzc2libGUuCisKKy0gSXNzdWUgIzExMjIzOiBGaXggdGVzdF90aHJlYWRzaWduYWxzIHRvIGZhaWwsIG5vdCBoYW5nLCB3aGVuIHRoZQorICBub24tc2VtYXBob3JlIGltcGxlbWVudGF0aW9uIG9mIGxvY2tzIGlzIHVzZWQgdW5kZXIgUE9TSVguCisKKy0gSXNzdWUgIzEwOTExOiBBZGQgdGVzdHMgb24gQ0dJIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgUGllcnJlIFF1ZW50ZWwuCisKKy0gSXNzdWUgIzk5MzE6IEZpeCBoYW5ncyBpbiBHVUkgdGVzdHMgdW5kZXIgV2luZG93cyBpbiBjZXJ0YWluIGNvbmRpdGlvbnMuCisgIFBhdGNoIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICMxMDgyNjogUHJldmVudCBzcG9yYWRpYyBmYWlsdXJlIGluIHRlc3Rfc3VicHJvY2VzcyBvbiBTb2xhcmlzIGR1ZQorICB0byBvcGVuIGRvb3IgZmlsZXMuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTE4MTg6IEZpeCB0ZW1wZmlsZSBleGFtcGxlcyBmb3IgUHl0aG9uIDMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yPworPT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyMC1GZWItMjAxMSoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzExMjQ5OiBGaXggcG90ZW50aWFsIGNyYXNoZXMgd2hlbiB1c2luZyB0aGUgbGltaXRlZCBBUEkuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMTIyMjogRml4IG5vbi1mcmFtZXdvcmsgc2hhcmVkIGxpYnJhcnkgYnVpbGQgb24gTWFjIE9TIFguCisKKy0gSXNzdWUgIzExMTg0OiBGaXggbGFyZ2UtZmlsZSBzdXBwb3J0IG9uIEFJWC4KKworLSBJc3N1ZSAjOTQxMzQ2OiBGaXggYnJva2VuIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIG9uIEFJWC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxMDcwOTogQWRkIHVwZGF0ZWQgQUlYIG5vdGVzIGluIE1pc2MvUkVBRE1FLkFJWC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjIgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAxMy1GZWItMjAxMSoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzExMTM0OiBBZGQgbWlzc2luZyBmaWVsZHMgdG8gdHlwZXNsb3RzLmguCisKKy0gSXNzdWUgIzExMTM1OiBSZW1vdmUgcmVkdW5kYW50IGRvYyBmaWVsZCBmcm9tIFB5VHlwZV9TcGVjLgorCistIElzc3VlICMxMTA2NzogQWRkIFB5VHlwZV9HZXRGbGFncywgdG8gc3VwcG9ydCBQeVVuaWNvZGVfQ2hlY2sgaW4gdGhlIGxpbWl0ZWQKKyAgQUJJLgorCistIElzc3VlICMxMTExODogRml4IGJvZ3VzIGV4cG9ydCBvZiBOb25lIGluIHB5dGhvbjMuZGxsLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzExMTE2OiBhbnkgZXJyb3IgZHVyaW5nIGFkZGl0aW9uIG9mIGEgbWVzc2FnZSB0byBhIG1haWxib3ggbm93IGNhdXNlcyBhCisgIHJvbGxiYWNrLCBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG1haWxib3ggcGFydGlhbGx5IG1vZGlmaWVkLgorCistIElzc3VlICMxMTEzMjogRml4IHBhc3Npbmcgb2YgIm9wdGltaXplIiBwYXJhbWV0ZXIgd2hlbiByZWN1cnNpbmcgaW4KKyAgY29tcGlsZWFsbC5jb21waWxlX2RpcigpLgorCistIElzc3VlICMxMTExMDogRml4IGEgcG90ZW50aWFsIGRlY3JlZiBvZiBhIE5VTEwgaW4gc3FsaXRlMy4KKworLSBJc3N1ZSAjODI3NTogRml4IHBhc3Npbmcgb2YgY2FsbGJhY2sgYXJndW1lbnRzIHdpdGggY3R5cGVzIHVuZGVyIFdpbjY0LiAgUGF0Y2gKKyAgYnkgU3RhbiBNaWhhaS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExMDc5OiBUaGUgL0FwcGxpY2F0aW9ucy9QeXRob24geC54IGZvbGRlciBjcmVhdGVkIGJ5IHRoZSBNYWMgT1MgWAorICBpbnN0YWxsZXJzIG5vdyBpbmNsdWRlcyBhIGxpbmsgdG8gdGhlIGluc3RhbGxlZCBkb2N1bWVudGF0aW9uIGFuZCBubyBsb25nZXIKKyAgaW5jbHVkZXMgYW4gRXh0cmFzIGRpcmVjdG9yeS4gIFRoZSBUb29scyBkaXJlY3RvcnkgaXMgbm93IGluc3RhbGxlZCBpbiB0aGUKKyAgZnJhbWV3b3JrIHVuZGVyIHNoYXJlL2RvYy4KKworLSBJc3N1ZSAjMTExMjE6IEZpeCBidWlsZGluZyB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzEwOTcxOiB0ZXN0X3ppcGltcG9ydF9zdXBwb3J0IGlzIG9uY2UgYWdhaW4gY29tcGF0aWJsZSB3aXRoIHRoZSByZWZsZWFrCisgIGh1bnRlciBmZWF0dXJlIG9mIHRlc3QucmVncnRlc3QuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMzAtSmFuLTIwMTEqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxMDQ1MTogbWVtb3J5dmlldyBvYmplY3RzIGNvdWxkIGFsbG93IHRvIG11dGF0ZSBhIHJlYWRhYmxlIGJ1ZmZlci4KKyAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICM5MTI0OiBtYWlsYm94IG5vdyBhY2NlcHRzIGJpbmFyeSBpbnB1dCBhbmQgcmVhZHMgYW5kIHdyaXRlcyBtYWlsYm94CisgIGZpbGVzIGluIGJpbmFyeSBtb2RlLCB1c2luZyB0aGUgZW1haWwgcGFja2FnZSdzIGJpbmFyeSBzdXBwb3J0IHRvIHBhcnNlCisgIGFyYml0cmFyeSBlbWFpbCBtZXNzYWdlcy4gIFN0cmluZ0lPIGFuZCB0ZXh0IGZpbGUgaW5wdXQgaXMgZGVwcmVjYXRlZCwKKyAgYW5kIHN0cmluZyBpbnB1dCBmYWlscyBlYXJseSBpZiBub24tQVNDSUkgY2hhcmFjdGVycyBhcmUgdXNlZCwgd2hlcmUKKyAgcHJldmlvdXNseSBpdCB3b3VsZCBmYWlsIHdoZW4gdGhlIGVtYWlsIHdhcyBwcm9jZXNzZWQgaW4gYSBsYXRlciBzdGVwLgorCistIElzc3VlICMxMDg0NTogTWl0aWdhdGUgdGhlIGluY29tcGF0aWJpbGl0eSBiZXR3ZWVuIHRoZSBtdWx0aXByb2Nlc3NpbmcKKyAgbW9kdWxlIG9uIFdpbmRvd3MgYW5kIHRoZSB1c2Ugb2YgcGFja2FnZSwgemlwZmlsZSBvciBkaXJlY3RvcnkgZXhlY3V0aW9uCisgIGJ5IHNwZWNpYWwgY2FzaW5nIG1haW4gbW9kdWxlcyB0aGF0IGFjdHVhbGx5ICphcmUqIGNhbGxlZCBfX21haW5fXy5weS4KKworLSBJc3N1ZSAjMTEwNDU6IFByb3RlY3QgbG9nZ2luZyBjYWxsIGFnYWluc3QgTm9uZSBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTEwNTI6IENvcnJlY3QgSURMRSBtZW51IGFjY2VsZXJhdG9ycyBvbiBNYWMgT1MgWCBmb3IgU2F2ZQorICBjb21tYW5kcy4KIAogLSBJc3N1ZSAjMTEwNTM6IEZpeCBJRExFICJTeW50YXggRXJyb3IiIHdpbmRvd3MgdG8gYmVoYXZlIGFzIGluIDIueCwKICAgcHJldmVudGluZyBhIGNvbmZ1c2luZyBodW5nIGFwcGVhcmFuY2Ugb24gT1MgWCB3aXRoIHRoZSB3aW5kb3dzCiAgIG9ic2N1cmVkLgogCi0tIElzc3VlICMxMTA1MjogQ29ycmVjdCBJRExFIG1lbnUgYWNjZWxlcmF0b3JzIG9uIE1hYyBPUyBYIGZvciBTYXZlCi0gIGNvbW1hbmRzLgorLSBJc3N1ZSAjMTA5NDA6IFdvcmthcm91bmQgYW4gSURMRSBoYW5nIG9uIE1hYyBPUyBYIDEwLjYgd2hlbiB1c2luZyB0aGUKKyAgbWVudSBhY2NlbGVyYXRvcnMgZm9yIE9wZW4gTW9kdWxlLCBHbyB0byBMaW5lLCBhbmQgTmV3IEluZGVudCBXaWR0aC4KKyAgVGhlIGFjY2VsZXJhdG9ycyBzdGlsbCB3b3JrIGJ1dCBubyBsb25nZXIgYXBwZWFyIGluIHRoZSBtZW51IGl0ZW1zLgorCistIElzc3VlICMxMDk4OTogRml4IGEgY3Jhc2ggb24gU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoTm9uZSwgVHJ1ZSkuCiAKIC0gSXNzdWUgIzExMDIwOiBDb21tYW5kLWxpbmUgcHljbGJyIHdhcyBicm9rZW4gYmVjYXVzZSBvZiBtaXNzaW5nIDItdG8tMwogICBjb252ZXJzaW9uLgogCistIElzc3VlICMxMTAxOTogRml4ZWQgQnl0ZXNHZW5lcmF0b3Igc28gdGhhdCBpdCBjb3JyZWN0bHkgaGFuZGxlcyBhIE1lc3NhZ2UKKyAgd2l0aCBhIE5vbmUgYm9keS4KKworLSBJc3N1ZSAjMTEwMTQ6IE1ha2UgJ2ZpbHRlcicgYXJndW1lbnQgaW4gdGFyZmlsZS5UYXJmaWxlLmFkZCgpIGludG8gYQorICBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICBUaGUgcHJlY2VkaW5nIHBvc2l0aW9uYWwgYXJndW1lbnQgd2FzIGRlcHJlY2F0ZWQsCisgIHNvIGl0IG1hZGUgbm8gc2Vuc2UgdG8gYWRkIGZpbHRlciBhcyBhIHBvc2l0aW9uYWwgYXJndW1lbnQuCisKKy0gSXNzdWUgIzExMDA0OiBSZXBhaXJlZCBlZGdlIGNhc2UgaW4gZGVxdWUuY291bnQoKS4KKwogLSBJc3N1ZSAjMTA5NzQ6IElETEUgbm8gbG9uZ2VyIGNyYXNoZXMgaWYgaXRzIHJlY2VudCBmaWxlcyBsaXN0IGluY2x1ZGVzIGZpbGVzCiAgIHdpdGggbm9uLUFTQ0lJIGNoYXJhY3RlcnMgaW4gdGhlaXIgcGF0aCBuYW1lcy4KIAorLSBIYXZlIGhhc2hsaWIuYWxnb3JpdGhtc19hdmFpbGFibGUgYW5kIGhhc2hsaWIuYWxnb3JpdGhtc19ndWFyYW50ZWVkIGJvdGgKKyAgcmV0dXJuIHNldHMgaW5zdGVhZCBvZiBvbmUgcmV0dXJuaW5nIGEgdHVwbGUgYW5kIHRoZSBvdGhlciBhIGZyb3plbnNldC4KKwogLSBJc3N1ZSAjMTA5ODc6IEZpeCB0aGUgcmVjdXJzaW9uIGxpbWl0IGhhbmRsaW5nIGluIHRoZSBfcGlja2xlIG1vZHVsZS4KIAorLSBJc3N1ZSAjMTA5ODM6IEZpeCBzZXZlcmFsIGJ1Z3MgbWFraW5nIHR1bm5lbCByZXF1ZXN0cyBpbiBodHRwLmNsaWVudC4KKworLSBJc3N1ZSAjMTA5NTU6IHppcGltcG9ydCB1c2VzIEFTQ0lJIGVuY29kaW5nIGluc3RlYWQgb2YgY3A0MzcgdG8gZGVjb2RlCisgIGZpbGVuYW1lcywgYXQgYm9vdHN0cmFwLCBpZiB0aGUgY29kZWMgcmVnaXN0cnkgaXMgbm90IHJlYWR5IHlldC4gSXQgaXMgc3RpbGwKKyAgcG9zc2libGUgdG8gaGF2ZSBub24tQVNDSUkgZmlsZW5hbWVzIHVzaW5nIHRoZSBVbmljb2RlIGZsYWcgKFVURi04IGVuY29kaW5nKQorICBmb3IgYWxsIGZpbGUgZW50cmllcyBpbiB0aGUgWklQIGZpbGUuCisKIC0gSXNzdWUgIzEwOTQ5OiBJbXByb3ZlZCByb2J1c3RuZXNzIG9mIHJvdGF0aW5nIGZpbGUgaGFuZGxlcnMuCiAKIC0gSXNzdWUgIzEwOTU1OiBGaXggYSBwb3RlbnRpYWwgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gbW1hcCgpIGEgZmlsZSBwYXN0IGl0cwpAQCAtMjA4LDI0ICs1MDMsMTMzIEBACiAtIElzc3VlICMxMDg5ODogQWxsb3cgY29tcGlsaW5nIHRoZSBwb3NpeCBtb2R1bGUgd2hlbiB0aGUgQyBsaWJyYXJ5IGRlZmluZXMKICAgYSBzeW1ib2wgbmFtZWQgRlNUQVQuCiAKLS0gSXNzdWUgIzEwOTE2OiBtbWFwIHNob3VsZCBub3Qgc2VnZmF1bHQgd2hlbiBhIGZpbGUgaXMgbWFwcGVkIHVzaW5nIDAgYXMKLSAgbGVuZ3RoIGFuZCBhIG5vbi16ZXJvIG9mZnNldCwgYW5kIGFuIGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZQotICBpcyBtYWRlIChJbmRleEVycm9yIGlzIHJhaXNlZCBpbnN0ZWFkKS4gIFBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorLSBJc3N1ZSAjMTA5ODA6IHRoZSBIVFRQIHNlcnZlciBub3cgZW5jb2RlcyBoZWFkZXJzIHdpdGggaXNvLTg4NTktMSAobGF0aW4xKQorICBlbmNvZGluZy4gIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBlbmNvZGluZyBvZiBQRVAgMzMzMyBhbmQgdGhlIGJhc2UgZW5jb2RpbmcKKyAgb2YgSFRUUCAxLjEuCiAKLS0gSXNzdWUgIzEwODk5OiBObyBmdW5jdGlvbiB0eXBlIGFubm90YXRpb25zIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgotICBSZW1vdmVkIGZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSBfcHlpby5weS4KKy0gVG8gbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiBIVFRQIHNlcnZlciwgdGhlIEhUVFAgY2xpZW50IGxpYnJhcnkgbm93IGFsc28KKyAgZW5jb2RlcyBoZWFkZXJzIHdpdGggaXNvLTg4NTktMSAobGF0aW4xKSBlbmNvZGluZy4gIEl0IHdhcyBhbHJlYWR5IGRvaW5nCisgIHRoYXQgZm9yIGluY29taW5nIGhlYWRlcnMgd2hpY2ggbWFrZXMgdGhpcyBiZWhhdmlvdXIgbm93IGNvbnNpc3RlbnQgaW4KKyAgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmcgZGlyZWN0aW9uLgorCistIElzc3VlICM5NTA5OiBhcmdwYXJzZSBub3cgcHJvcGVybHkgaGFuZGxlcyBJT0Vycm9ycyByYWlzZWQgYnkKKyAgYXJncGFyc2UuRmlsZVR5cGUuCisKKy0gSXNzdWUgIzEwOTYxOiBUaGUgbmV3IHB5ZG9jIHNlcnZlciBub3cgYmV0dGVyIGhhbmRsZXMgZXhjZXB0aW9ucyByYWlzZWQKKyAgZHVyaW5nIHJlcXVlc3QgaGFuZGxpbmcuCisKKy0gSXNzdWUgIzEwNjgwOiBGaXggbXV0dWFsbHkgZXhjbHVzaXZlIGFyZ3VtZW50cyBmb3IgYXJndW1lbnQgZ3JvdXBzIGluCisgIGFyZ3BhcnNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTEwNTQ6IEFsbG93IE1hYyBPUyBYIGluc3RhbGxlciBidWlsZHMgdG8gYWdhaW4gd29yayBvbiAxMC41IHdpdGgKKyAgdGhlIHN5c3RlbS1wcm92aWRlZCBQeXRob24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yIFJlbGVhc2UgQ2FuZGlkYXRlIDEKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDE2LUphbi0yMDExKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTA4ODk6IHJhbmdlIGluZGV4aW5nIGFuZCBzbGljaW5nIG5vdyB3b3JrcyBjb3JyZWN0bHkgb24gcmFuZ2VzIHdpdGgKKyAgYSBsZW5ndGggdGhhdCBleGNlZWRzIHN5cy5tYXhzaXplLgorCistIElzc3VlICMxMDg5MjogRG9uJ3Qgc2VnZmF1bHQgd2hlbiB0cnlpbmcgdG8gZGVsZXRlIF9fYWJzdHJhY3RtZXRob2RzX18gZnJvbSBhCisgIGNsYXNzLgorCistIElzc3VlICM4MDIwOiBBdm9pZCBhIGNyYXNoIHdoZXJlIHRoZSBzbWFsbCBvYmplY3RzIGFsbG9jYXRvciB3b3VsZCByZWFkCisgIG5vbi1QeXRob24gbWFuYWdlZCBtZW1vcnkgd2hpbGUgaXQgaXMgYmVpbmcgbW9kaWZpZWQgYnkgYW5vdGhlciB0aHJlYWQuICBQYXRjaAorICBieSBNYXR0IEJhbmR5LgorCistIElzc3VlICMxMDg0MTogT24gV2luZG93cywgc2V0IHRoZSBiaW5hcnkgbW9kZSBvbiBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIgYW5kIGFsbAorICBpby5GaWxlSU8gb2JqZWN0cyAodG8gbm90IHRyYW5zbGF0ZSBuZXdsaW5lcywgXHJcbiA8PT4gXG4pLiAgVGhlIFB5dGhvbiBwYXJzZXIKKyAgdHJhbnNsYXRlcyBuZXdsaW5lcyAoXHJcbiA9PiBcbikuCisKKy0gUmVtb3ZlIGJ1ZmZlciBBUEkgZnJvbSBzdGFibGUgQUJJIGZvciBub3csIHNlZSAjMTAxODEuCisKKy0gSXNzdWUgIzg2NTE6IFB5QXJnX1BhcnNlKigpIGZ1bmN0aW9ucyByYWlzZSBhbiBPdmVyZmxvd0Vycm9yIGlmIHRoZSBmaWxlCisgIGRvZXNuJ3QgaGF2ZSBQWV9TU0laRV9UX0NMRUFOIGRlZmluZSBhbmQgdGhlIHNpemUgZG9lc24ndCBmaXQgaW4gYW4gaW50CisgIChsZW5ndGggYmlnZ2VyIHRoYW4gMl4zMS0xIGJ5dGVzKS4KKworLSBJc3N1ZSAjOTAxNSwgIzk2MTE6IEZpbGVJTy5yZWFkaW50bygpLCBGaWxlSU8ud3JpdGUoKSwgb3Mud3JpdGUoKSBhbmQKKyAgc3RkcHJpbnRlci53cml0ZSgpIGNsYW1wIHRoZSBsZW5ndGggdG8gMl4zMS0xIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzgyNzg6IE9uIFdpbmRvd3MgYW5kIHdpdGggYSBOVEZTIGZpbGVzeXN0ZW0sIG9zLnN0YXQoKSBhbmQgb3MudXRpbWUoKQorICBjYW4gbm93IGhhbmRsZSBkYXRlcyBhZnRlciAyMDM4LgorCistIElzc3VlICMxMDc4MDogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoKSBhbmQKKyAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoKSBkZWNvZGUgdGhlIGZpbGVuYW1lIGZyb20gdGhlCisgIGZpbGVzeXN0ZW0gZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBJc3N1ZSAjMTA3Nzk6IFB5RXJyX1dhcm5FeHBsaWNpdCgpIGRlY29kZXMgdGhlIGZpbGVuYW1lIGZyb20gdGhlIGZpbGVzeXN0ZW0KKyAgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBBZGQgc3lzLmZsYWdzIGF0dHJpYnV0ZSBmb3IgdGhlIG5ldyAtcSBjb21tYW5kLWxpbmUgb3B0aW9uLgorCistIElzc3VlICMxMTUwNjogVHJ5aW5nIHRvIGFzc2lnbiB0byBhIGJ5dGVzIGxpdGVyYWwgc2hvdWxkIHJlc3VsdCBpbiBhCisgIFN5bnRheEVycm9yLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEwOTE2OiBtbWFwIHNob3VsZCBub3Qgc2VnZmF1bHQgd2hlbiBhIGZpbGUgaXMgbWFwcGVkIHVzaW5nIDAgYXMgbGVuZ3RoCisgIGFuZCBhIG5vbi16ZXJvIG9mZnNldCwgYW5kIGFuIGF0dGVtcHQgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSBpcyBtYWRlCisgIChJbmRleEVycm9yIGlzIHJhaXNlZCBpbnN0ZWFkKS4gIFBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMDkwNzogV2FybiBPUyBYIDEwLjYgSURMRSB1c2VycyB0byB1c2UgQWN0aXZlU3RhdGUgVGNsL1RrIDguNSwgcmF0aGVyCisgIHRoYW4gdGhlIGN1cnJlbnRseSBwcm9ibGVtYXRpYyBBcHBsZS1zdXBwbGllZCBvbmUsIHdoZW4gcnVubmluZyB3aXRoIHRoZQorICA2NC0vMzItYml0IGluc3RhbGxlciB2YXJpYW50LgorCistIElzc3VlICM0OTUzOiBjZ2kuRmllbGRTdG9yYWdlIGFuZCBjZ2kucGFyc2UoKSBwYXJzZSB0aGUgcmVxdWVzdCBhcyBieXRlcywgbm90CisgIGFzIHVuaWNvZGUsIGFuZCBhY2NlcHQgYmluYXJ5IGZpbGVzLiBBZGQgZW5jb2RpbmcgYW5kIGVycm9ycyBhdHRyaWJ1dGVzIHRvCisgIGNnaS5GaWVsZFN0b3JhZ2UuIFBhdGNoIHdyaXR0ZW4gYnkgUGllcnJlIFF1ZW50ZWwgKHdpdGggbWFueSBpbnB1dHMgYnkgR2xlbm4KKyAgTGluZGVybWFuKS4KKworLSBBZGQgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmd1bWVudHMgdG8gdXJsbGliLnBhcnNlX3FzKCkgYW5kIHVybGxpYi5wYXJzZV9xc2woKS4KKworLSBJc3N1ZSAjMTA4OTk6IE5vIGZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbnMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuICBSZW1vdmVkCisgIGZ1bmN0aW9uIHR5cGUgYW5ub3RhdGlvbnMgZnJvbSBfcHlpby5weS4KIAogLSBJc3N1ZSAjMTA4NzU6IFVwZGF0ZSBSZWd1bGFyIEV4cHJlc3Npb24gSE9XVE87IHBhdGNoIGJ5ICdTaWxlbnRHaG9zdCcuCiAKLS0gSXNzdWUgIzEwODY5OiBGaXhlZCBidWcgd2hlcmUgYXN0LmluY3JlbWVudF9saW5lbm8gbW9kaWZpZWQgdGhlIHJvb3QKLSAgbm9kZSB0d2ljZS4KKy0gSXNzdWUgIzEwODcyOiBUaGUgcmVwcigpIG9mIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBub3cgaW5jbHVkZXMgdGhlIG1vZGUKKyAgaWYgYXZhaWxhYmxlLgorCistIElzc3VlICMxMDg2OTogRml4ZWQgYnVnIHdoZXJlIGFzdC5pbmNyZW1lbnRfbGluZW5vIG1vZGlmaWVkIHRoZSByb290IG5vZGUKKyAgdHdpY2UuCiAKIC0gSXNzdWUgIzU4NzE6IGVtYWlsLmhlYWRlci5IZWFkZXIuZW5jb2RlIG5vdyByYWlzZXMgYW4gZXJyb3IgaWYgYW55Ci0gIGNvbnRpbnVhdGlvbiBsaW5lIGluIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaGFzIG5vIGxlYWRpbmcgd2hpdGUgc3BhY2UKLSAgYW5kIGxvb2tzIGxpa2UgYSBoZWFkZXIuICBTaW5jZSBHZW5lcmF0b3IgdXNlcyBIZWFkZXIgdG8gZm9ybWF0IGFsbAotICBoZWFkZXJzLCB0aGlzIGNoZWNrIGlzIG1hZGUgZm9yIGFsbCBoZWFkZXJzIGluIGFueSBzZXJpYWxpemVkIG1lc3NhZ2UKLSAgYXQgc2VyaWFsaXphdGlvbiB0aW1lLiAgVGhpcyBwcm92aWRlcyBwcm90ZWN0aW9uIGFnYWluc3QgaGVhZGVyCi0gIGluamVjdGlvbiBhdHRhY2tzLgorICBjb250aW51YXRpb24gbGluZSBpbiB0aGUgZm9ybWF0dGVkIHZhbHVlIGhhcyBubyBsZWFkaW5nIHdoaXRlIHNwYWNlIGFuZCBsb29rcworICBsaWtlIGEgaGVhZGVyLiAgU2luY2UgR2VuZXJhdG9yIHVzZXMgSGVhZGVyIHRvIGZvcm1hdCBhbGwgaGVhZGVycywgdGhpcyBjaGVjaworICBpcyBtYWRlIGZvciBhbGwgaGVhZGVycyBpbiBhbnkgc2VyaWFsaXplZCBtZXNzYWdlIGF0IHNlcmlhbGl6YXRpb24gdGltZS4gIFRoaXMKKyAgcHJvdmlkZXMgcHJvdGVjdGlvbiBhZ2FpbnN0IGhlYWRlciBpbmplY3Rpb24gYXR0YWNrcy4KKworLSBJc3N1ZSAjMTA4NTk6IE1ha2UgYGBjb250ZXh0bGliLkdlbmVyYXRvckNvbnRleHRNYW5hZ2VyYGAgb2ZmaWNpYWxseQorICBwcml2YXRlIGJ5IHJlbmFtaW5nIGl0IHRvIGBgX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyYGAuCisKKy0gSXNzdWUgIzEwMDQyOiBGaXhlZCB0aGUgdG90YWxfb3JkZXJpbmcgZGVjb3JhdG9yIHRvIGhhbmRsZSBjcm9zcy10eXBlCisgIGNvbXBhcmlzb25zIHRoYXQgY291bGQgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24uCisKKy0gSXNzdWUgIzEwNjg2OiB0aGUgZW1haWwgcGFja2FnZSBub3cgOnJmYzpgMjA0N2BcIC1lbmNvZGVzIGhlYWRlcnMgd2l0aAorICBub24tQVNDSUkgYnl0ZXMgKHBhcnNlZCBieSBhIEJ5dGVzIFBhcnNlcikgd2hlbiBkb2luZyBjb252ZXJzaW9uIHRvIDdiaXQtY2xlYW4KKyAgcHJlc2VudGF0aW9uLCBpbnN0ZWFkIG9mIHJlcGxhY2luZyB0aGVtIHdpdGggP3MuCisKKy0gZW1haWwuaGVhZGVyLkhlYWRlciB3YXMgaW5jb3JyZWN0bHkgZW5jb2RpbmcgZm9sZGluZyB3aGl0ZSBzcGFjZSB3aGVuCisgIHJmYzIwNDctZW5jb2RpbmcgaGVhZGVyIHZhbHVlcyB3aXRoIGVtYmVkZGVkIG5ld2xpbmVzLCBsZWF2aW5nIHRoZW0gd2l0aG91dAorICBmb2xkaW5nIHdoaXRlc3BhY2UuICBJdCBub3cgdXNlcyB0aGUgY29udGludWF0aW9uX3dzLCBhcyBpdCBkb2VzIGZvcgorICBjb250aW51YXRpb24gbGluZXMgdGhhdCBpdCBjcmVhdGVzIGl0c2VsZi4KKworLSBJc3N1ZSAjMTc3NzQxMiwgIzEwODI3OiBDaGFuZ2VkIHRoZSBydWxlcyBmb3IgMi1kaWdpdCB5ZWFycy4gVGhlCisgIHRpbWUuYXNjdGltZSgpLCB0aW1lLmN0aW1lKCkgYW5kIHRpbWUuc3RyZnRpbWUoKSBmdW5jdGlvbnMgd2lsbCBub3cgZm9ybWF0CisgIGFueSB5ZWFyIHdoZW4gYGB0aW1lLmFjY2VwdDJkeWVhcmBgIGlzIEZhbHNlIGFuZCB3aWxsIGFjY2VwdCB5ZWFycyA+PSAxMDAwCisgIG90aGVyd2lzZS4gYGB0aW1lLm1rdGltZWBgIGFuZCBgYHRpbWUuc3RyZnRpbWVgYCBub3cgYWNjZXB0IGZ1bGwgcmFuZ2UKKyAgc3VwcG9ydGVkIGJ5IHRoZSBPUy4gV2l0aCBWaXN1YWwgU3R1ZGlvIG9yIG9uIFNvbGFyaXMsIHRoZSB5ZWFyIGlzIGxpbWl0ZWQgdG8KKyAgdGhlIHJhbmdlIFsxOyA5OTk5XS4gQ29udmVyc2lvbiBvZiAyLWRpZ2l0IHllYXJzIHRvIDQtZGlnaXQgaXMgZGVwcmVjYXRlZC4KIAogLSBJc3N1ZSAjNzg1ODogUmFpc2UgYW4gZXJyb3IgcHJvcGVybHkgd2hlbiBvcy51dGltZSgpIGZhaWxzIHVuZGVyIFdpbmRvd3MKICAgb24gYW4gZXhpc3RpbmcgZmlsZS4KQEAgLTIzMyw5MiArNjM3LDEyMSBAQAogLSBJc3N1ZSAjMzgzOTogd3NnaXJlZiBzaG91bGQgbm90IG92ZXJyaWRlIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHNldCBieQogICB0aGUgYXBwbGljYXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IENsb3ZpcyBGYWJyaWNpby4KIAorLSBJc3N1ZSAjMTA0OTI6IGJkYi5CZGIucnVuKCkgb25seSB0cmFjZXMgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgY29kZSwgbm90IHRoZQorICBjb21waWxhdGlvbiAoaWYgdGhlIGlucHV0IGlzIGEgc3RyaW5nKS4KKworLSBJc3N1ZSAjNzk5NTogV2hlbiBjYWxsaW5nIGFjY2VwdCgpIG9uIGEgc29ja2V0IHdpdGggYSB0aW1lb3V0LCB0aGUgcmV0dXJuZWQKKyAgc29ja2V0IGlzIG5vdyBhbHdheXMgYmxvY2tpbmcsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0uCisKKy0gSXNzdWUgIzEwNzU2OiBhdGV4aXQgbm9ybWFsaXplcyB0aGUgZXhjZXB0aW9uIGJlZm9yZSBkaXNwbGF5aW5nIGl0LiBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKIC0gSXNzdWUgIzEwNzkwOiBlbWFpbC5oZWFkZXIuSGVhZGVyLmFwcGVuZCdzIGNoYXJzZXQgbG9naWMgbm93IHdvcmtzIGNvcnJlY3RseQogICBmb3IgY2hhcnNldHMgd2hvc2Ugb3V0cHV0IGNvZGVjIGlzIGRpZmZlcmVudCBmcm9tIGl0cyBpbnB1dCBjb2RlYy4KIAotLSBJc3N1ZSAjNjY0MzogUmVpbml0aWFsaXplIGxvY2tzIGhlbGQgd2l0aGluIHRoZSB0aHJlYWRpbmcgbW9kdWxlIGFmdGVyIGZvcmsKLSAgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcmFyZSBkZWFkbG9jayBvciBjcmFzaCBvbiBzb21lIHBsYXRmb3Jtcy4KKy0gSXNzdWUgIzEwODE5OiBTb2NrZXRJTy5uYW1lIHByb3BlcnR5IHJldHVybnMgLTEgd2hlbiBpdHMgY2xvc2VkLCBpbnN0ZWFkIG9mCisgIHJhaXNpbmcgYSBWYWx1ZUVycm9yLCB0byBmaXggcmVwcigpLgogCi0tIElzc3VlICMxMDgwNiwgaXNzdWUgIzk5MDU6IEZpeCBzdWJwcm9jZXNzIHBpcGVzIHdoZW4gc29tZSBvZiB0aGUgc3RhbmRhcmQKLSAgZmlsZSBkZXNjcmlwdG9ycyAoMCwgMSwgMikgYXJlIGNsb3NlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBJbml0aWFsCi0gIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorLSBJc3N1ZSAjODY1MDogemxpYi5jb21wcmVzcygpIGFuZCB6bGliLmRlY29tcHJlc3MoKSByYWlzZSBhbiBPdmVyZmxvd0Vycm9yIGlmCisgIHRoZSBpbnB1dCBidWZmZXIgbGVuZ3RoIGRvZXNuJ3QgZml0IGludG8gYW4gdW5zaWduZWQgaW50IChsZW5ndGggYmlnZ2VyIHRoYW4KKyAgMl4zMi0xIGJ5dGVzKS4KIAotLSBJc3N1ZSAjMTA3NTMgLSBDaGFyYWN0ZXJzICc7JywgJz0nIGFuZCAnLCcgaW4gdGhlIFBBVEhfSU5GTyBlbnZpcm9ubWVudAotICB2YXJpYWJsZSB3b24ndCBiZSBxdW90ZWQgd2hlbiB0aGUgVVJJIGlzIGNvbnN0cnVjdGVkIGJ5IHRoZSB3c2dpcmVmLnV0aWwncwotICByZXF1ZXN0X3VyaSBtZXRob2QuIEFjY29yZGluZyB0byBSRkMgMzk4NiwgdGhlc2UgY2hhcmFjdGVycyBjYW4gYmUgYSBwYXJ0IG9mCi0gIHBhcmFtcyBpbiBQQVRIIGNvbXBvbmVudCBvZiBVUkkgYW5kIG5lZWQgbm90IGJlIHF1b3RlZC4KKy0gSXNzdWUgIzY2NDM6IFJlaW5pdGlhbGl6ZSBsb2NrcyBoZWxkIHdpdGhpbiB0aGUgdGhyZWFkaW5nIG1vZHVsZSBhZnRlciBmb3JrIHRvCisgIGF2b2lkIGEgcG90ZW50aWFsIHJhcmUgZGVhZGxvY2sgb3IgY3Jhc2ggb24gc29tZSBwbGF0Zm9ybXMuCiAKLS0gSXNzdWUgIzEwNzM4OiBGaXggd2ViYnJvd3Nlci5PcGVyYS5yYWlzZV9vcHRzCistIElzc3VlICMxMDgwNiwgaXNzdWUgIzk5MDU6IEZpeCBzdWJwcm9jZXNzIHBpcGVzIHdoZW4gc29tZSBvZiB0aGUgc3RhbmRhcmQgZmlsZQorICBkZXNjcmlwdG9ycyAoMCwgMSwgMikgYXJlIGNsb3NlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MKKyAgTGFnZXJ3YWxsLgorCistIGB1bml0dGVzdC5UZXN0Q2FzZWAgY2FuIGJlIGluc3RhbnRpYXRlZCB3aXRob3V0IGEgbWV0aG9kIG5hbWU7IGZvciBzaW1wbGVyCisgIGV4cGxvcmF0aW9uIGZyb20gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyLgorCistIElzc3VlICMxMDc5ODogUmVqZWN0IHN1cHBvcnRpbmcgY29uY3VycmVudC5mdXR1cmVzIGlmIHRoZSBzeXN0ZW0gaGFzIHRvbworICBmZXcgUE9TSVggc2VtYXBob3Jlcy4KKworLSBJc3N1ZSAjMTA4MDc6IFJlbW92ZSBiYXNlNjQsIGJ6MiwgaGV4LCBxdW9wcmksIHJvdDEzLCB1dSBhbmQgemxpYiBjb2RlY3MgZnJvbQorICB0aGUgY29kZWMgYWxpYXNlcy4gVGhleSBhcmUgc3RpbGwgYWNjZXNzaWJsZSB2aWEgY29kZWNzLmxvb2t1cCgpLgorCistIElzc3VlICMxMDgwMTogSW4gemlwZmlsZSwgc3VwcG9ydCBkaWZmZXJlbnQgZW5jb2RpbmdzIGZvciB0aGUgaGVhZGVyIGFuZCB0aGUKKyAgZmlsZW5hbWVzLgorCistIElzc3VlICM2Mjg1OiBJRExFIG5vIGxvbmdlciBjcmFzaGVzIG9uIG1pc3NpbmcgaGVscCBmaWxlOyBwYXRjaCBieSBTY290dAorICBEYXZpZCBEYW5pZWxzLgorCistIEZpeCBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdC5zZXRkZWZhdWx0KCkgc28gdGhhdCBpdCB3b3JrcyBpbiBzdWJjbGFzc2VzIHRoYXQKKyAgZGVmaW5lIF9fbWlzc2luZ19fKCkuCisKKy0gSXNzdWUgIzEwNzg2OiB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lciBkZWZhdWx0IHN0cmVhbSBubyBsb25nZXIgYm91bmQgYXQgaW1wb3J0CisgIHRpbWUuIGBzeXMuc3RkZXJyYCBub3cgbG9va2VkIHVwIGF0IGluc3RhbnRpYXRpb24gdGltZS4gIEZpeCBjb250cmlidXRlZCBieQorICBNYXJrIFJvZGR5LgorCistIElzc3VlICMxMDc1MzogQ2hhcmFjdGVycyAnOycsICc9JyBhbmQgJywnIGluIHRoZSBQQVRIX0lORk8gZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgd29uJ3QgYmUgcXVvdGVkIHdoZW4gdGhlIFVSSSBpcyBjb25zdHJ1Y3RlZCBieSB0aGUgd3NnaXJlZi51dGlsJ3MgcmVxdWVzdF91cmkKKyAgbWV0aG9kLiBBY2NvcmRpbmcgdG8gUkZDIDM5ODYsIHRoZXNlIGNoYXJhY3RlcnMgY2FuIGJlIGEgcGFydCBvZiBwYXJhbXMgaW4KKyAgUEFUSCBjb21wb25lbnQgb2YgVVJJIGFuZCBuZWVkIG5vdCBiZSBxdW90ZWQuCisKKy0gSXNzdWUgIzEwNzM4OiBGaXggd2ViYnJvd3Nlci5PcGVyYS5yYWlzZV9vcHRzLgogCiAtIElzc3VlICM5ODI0OiBTaW1wbGVDb29raWUgbm93IGVuY29kZXMgLCBhbmQgOyBpbiB2YWx1ZXMgdG8gY2F0ZXIgdG8gaG93CiAgIGJyb3dzZXJzIGFjdHVhbGx5IHBhcnNlIGNvb2tpZXMuCiAKKy0gSXNzdWUgIzkzMzM6IG9zLnN5bWxpbmsgbm93IGF2YWlsYWJsZSByZWdhcmRsZXNzIG9mIHVzZXIgcHJpdmlsZWdlcy4gIFRoZQorICBmdW5jdGlvbiBub3cgcmFpc2VzIE9TRXJyb3Igb24gV2luZG93cyA+PTYuMCB3aGVuIHRoZSB1c2VyIGlzIHVuYWJsZSB0byBjcmVhdGUKKyAgc3ltYm9saWMgbGlua3MuIFhQIGFuZCAyMDAzIHN0aWxsIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IuCisKKy0gSXNzdWUgIzEwNzgzOiBzdHJ1Y3QucGFjaygpIG5vIGxvbmdlciBpbXBsaWNpdGx5IGVuY29kZXMgdW5pY29kZSB0byBVVEYtOC4KKworLSBJc3N1ZSAjMTA3MzA6IEFkZCBTVkcgbWltZSB0eXBlcyB0byBtaW1ldHlwZXMgbW9kdWxlLgorCistIElzc3VlICMxMDc2ODogTWFrZSB0aGUgVGtpbnRlciBTY3JvbGxlZFRleHQgd2lkZ2V0IHdvcmsgYWdhaW4uCisKKy0gSXNzdWUgIzEwNzc3OiBGaXggImRpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iIGJ1ZyBpbgorICBFbGVtZW50VHJlZSByZWdpc3Rlcl9uYW1lc3BhY2UoKS4KKworLSBJc3N1ZSAjMTA2MjY6IHRlc3RfbG9nZ2luZyBub3cgcHJlc2VydmVzIGxvZ2dlciBkaXNhYmxlZCBzdGF0ZXMuCisKKy0gSXNzdWUgIzEwNzc0OiB0ZXN0X2xvZ2dpbmcgbm93IHJlbW92ZXMgdGVtcCBmaWxlcyBjcmVhdGVkIGR1cmluZyB0ZXN0cy4KKwogLSBJc3N1ZSAjNTI1OC8jMTA2NDI6IGlmIHNpdGUucHkgZW5jb3VudGVycyBhIC5wdGggZmlsZSB0aGF0IGdlbmVyYXRlcyBhbiBlcnJvciwKICAgaXQgbm93IHByaW50cyB0aGUgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQgdHJhY2ViYWNrIHRvIHN0ZGVyciBhbmQgc2tpcHMKICAgdGhlIHJlc3Qgb2YgdGhhdCBpbmRpdmlkdWFsIGZpbGUsIGluc3RlYWQgb2Ygc3RvcHBpbmcgcHJvY2Vzc2luZyBlbnRpcmVseS4KIAorLSBJc3N1ZSAjMTA3NjM6IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBjbG9zZXMgc3Rkb3V0IGFuZCBzdGRlcnIgaWYgYm90aCBhcmUKKyAgcGlwZXMgKGJ1ZyBzcGVjaWZpYyB0byBXaW5kb3dzKS4KKworLSBJc3N1ZSAjMTY5MzU0NjogZml4IGVtYWlsLm1lc3NhZ2UgUkZDIDIyMzEgcGFyYW1ldGVyIGVuY29kaW5nIHRvIGJlIGluIGJldHRlcgorICBjb21wbGlhbmNlIChubyAicyBhcm91bmQgZW5jb2RlZCB2YWx1ZXMpLgorCistIEltcHJvdmVkIHRoZSBkaWZmIG1lc3NhZ2UgaW4gdGhlIHVuaXR0ZXN0IG1vZHVsZSdzIGFzc2VydENvdW50RXF1YWwoKS4KKworLSBJc3N1ZSAjMTE1NTM2MjogZW1haWwudXRpbHMucGFyc2VkYXRlX3R6IG5vdyBoYW5kbGVzIGEgbWlzc2luZyBzcGFjZSBiZWZvcmUKKyAgdGhlICctJyBvZiBhIHRpbWV6b25lIGZpZWxkIGFzIHdlbGwgYXMgYmVmb3JlIGEgJysnLgorCiAtIElzc3VlICM0ODcxOiBUaGUgemlwZmlsZSBtb2R1bGUgbm93IGdpdmVzIGEgbW9yZSB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpZgogICBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIGEgc3RyaW5nIHRvIHNwZWNpZnkgdGhlIGFyY2hpdmUgcGFzc3dvcmQuCiAKIC0gSXNzdWUgIzEwNzUwOiBUaGUgYGByYXdgYCBhdHRyaWJ1dGUgb2YgYnVmZmVyZWQgSU8gb2JqZWN0cyBpcyBub3cgcmVhZC1vbmx5LgogCi0tIElzc3VlICM2NzkxOiBMaW1pdCBoZWFkZXIgbGluZSBsZW5ndGggKHRvIDY1NTM1IGJ5dGVzKSBpbiBodHRwLmNsaWVudAotICBhbmQgaHR0cC5zZXJ2ZXIsIHRvIGF2b2lkIGRlbmlhbCBvZiBzZXJ2aWNlcyBmcm9tIHRoZSBvdGhlciBwYXJ0eS4KKy0gRGVwcmVjYXRlZCBhc3NlcnREaWN0Q29udGFpbnNTdWJzZXQoKSBpbiB0aGUgdW5pdHRlc3QgbW9kdWxlLgogCi0tIElzc3VlICMxMDQwNDogVXNlIGN0bC1idXR0b24tMSBvbiBPU1ggZm9yIHRoZSBjb250ZXh0IG1lbnUgaW4gSWRsZS4KK0MtQVBJCistLS0tLQogCi0tIElzc3VlICM0MTg4OiBBdm9pZCBjcmVhdGluZyBkdW1teSB0aHJlYWQgb2JqZWN0cyB3aGVuIGxvZ2dpbmcgb3BlcmF0aW9ucwotICBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlICh3aXRoIHRoZSBpbnRlcm5hbCB2ZXJib3NlIGZsYWcgYWN0aXZhdGVkKS4KKy0gSXNzdWUgIzEwOTEzOiBEZXByZWNhdGUgbWlzbGVhZGluZyBmdW5jdGlvbnMgUHlFdmFsX0FjcXVpcmVMb2NrKCkgYW5kCisgIFB5RXZhbF9SZWxlYXNlTG9jaygpLiAgVGhlIHRocmVhZC1zdGF0ZSBhd2FyZSBBUElzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAKLS0gSXNzdWUgIzk3MjE6IEZpeCB0aGUgYmVoYXZpb3Igb2YgdXJsam9pbiB3aGVuIHRoZSByZWxhdGl2ZSB1cmwgc3RhcnRzIHdpdGggYQotICAnOycgY2hhcmFjdGVyLiBQYXRjaCBieSBXZXMgQ2hvdy4KLQotLSBJc3N1ZSAjMTA3MTQ6IExpbWl0IGxlbmd0aCBvZiBpbmNvbWluZyByZXF1ZXN0IGluIGh0dHAuc2VydmVyIHRvIDY1NTM2IGJ5dGVzCi0gIGZvciBzZWN1cml0eSByZWFzb25zLiAgSW5pdGlhbCBwYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KLQotLSBJc3N1ZSAjOTU1ODogRml4IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dCB3aXRoIFZTIDguMC4KLQotLSBJc3N1ZSAjMTA2OTU6IHBhc3NpbmcgdGhlIHBvcnQgYXMgYSBzdHJpbmcgdmFsdWUgdG8gdGVsbmV0bGliIG5vIGxvbmdlcgotICBjYXVzZXMgZGVidWcgbW9kZSB0byBmYWlsLgotCi0tIElzc3VlICMxMDc4OTE5OiBhZGRfaGVhZGVyIG5vdyBhdXRvbWF0aWNhbGx5IFJGQzIyMzEgZW5jb2RlcyBwYXJhbWV0ZXJzCi0gIHRoYXQgY29udGFpbiBub24tYXNjaWkgdmFsdWVzLgotCi0tIElzc3VlICMxMDEwNzogV2FybiBhYm91dCB1bnNhdmVkIGZpbGVzIGluIElETEUgb24gT1NYLgotCi0tIElzc3VlICM3OTA0OiBDaGFuZ2VzIHRvIHVybGxpYi5wYXJzZS51cmxzcGxpdCB0byBoYW5kbGUgc2NoZW1lcyBhcyBkZWZpbmVkIGJ5Ci0gIFJGQzM5ODYuIEFueXRoaW5nIGJlZm9yZSA6Ly8gaXMgY29uc2lkZXJlZCBhIHNjaGVtZSBhbmQgaXMgZm9sbG93ZWQgYnkgYW4KLSAgYXV0aG9yaXR5IChvciBuZXRsb2MpIGFuZCBieSAnLycgbGVkIHBhdGgsIHdoaWNoIGlzIG9wdGlvbmFsLgotCi0tIElzc3VlICMxMDQ3ODogUmVlbnRyYW50IGNhbGxzIGluc2lkZSBidWZmZXJlZCBJTyBvYmplY3RzIChmb3IgZXhhbXBsZSBieQotICB3YXkgb2YgYSBzaWduYWwgaGFuZGxlcikgbm93IHJhaXNlIGEgUnVudGltZUVycm9yIGluc3RlYWQgb2YgZnJlZXppbmcgdGhlCi0gIGN1cnJlbnQgcHJvY2Vzcy4KLQotLSBJc3N1ZSAjMTA0NjQ6IG5ldHJjIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBsaW5lcyB3aXRoIGVtYmVkZGVkICcjJyBjaGFyYWN0ZXJzLgotCi0tIElzc3VlICMxNzMxNzE3OiBGaXhlZCB0aGUgcHJvYmxlbSB3aGVyZSBzdWJwcm9jZXNzLndhaXQoKSBjb3VsZCBjYXVzZSBhbgotICBPU0Vycm9yIGV4Y2VwdGlvbiB3aGVuIFRoZSBPUyBoYWQgYmVlbiB0b2xkIHRvIGlnbm9yZSBTSUdDTEQgaW4gb3VyIHByb2Nlc3MKLSAgb3Igb3RoZXJ3aXNlIG5vdCB3YWl0IGZvciBleGl0aW5nIGNoaWxkIHByb2Nlc3Nlcy4KLQotLSBJc3N1ZSAjMTE1MDA6IEZpeGVkIGEgYnVnIGluIHRoZSBvcyB4IHByb3h5IGJ5cGFzcyBjb2RlIGZvciBmdWxseSBxdWFsaWZpZWQKLSAgSVAgYWRkcmVzc2VzIGluIHRoZSBwcm94eSBleGNlcHRpb24gbGlzdC4KLQotRXh0ZW5zaW9ucwotLS0tLS0tLS0tLQotCi0tIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAotICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCi0KLS0gSXNzdWUgIzY3ODI1MDogTWFrZSBtbWFwIGZsdXNoIGEgbm9vcCBvbiBBQ0NFU1NfUkVBRCBhbmQgQUNDRVNTX0NPUFkuCistIElzc3VlICMxMDMzMzogUmVtb3ZlIGFuY2llbnQgR0MgQVBJLCB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIFB5dGhvbgorICAyLjIuCiAKIEJ1aWxkCiAtLS0tLQogCi0tIElzc3VlICMxMTQxMTogRml4ICdtYWtlIERFU1RESVI9JyB3aXRoIGEgcmVsYXRpdmUgZGVzdGluYXRpb24uCistIElzc3VlICMxMDg0MzogVXBkYXRlIHRoaXJkLXBhcnR5IGxpYnJhcnkgdmVyc2lvbnMgdXNlZCBpbiBPUyBYIDMyLWJpdAorICBpbnN0YWxsZXIgYnVpbGRzOiBiemlwMiAxLjAuNiwgcmVhZGxpbmUgNi4xLjIsIFNRTGl0ZSAzLjcuNCAod2l0aCBGVFMzL0ZUUzQKKyAgYW5kIFJUUkVFIGVuYWJsZWQpLCBhbmQgbmN1cnNlc3cgNS41ICh3aWRlLWNoYXIgc3VwcG9ydCBlbmFibGVkKS4KIAotLSBJc3N1ZSAjMTExODQ6IEZpeCBsYXJnZS1maWxlIHN1cHBvcnQgb24gQUlYLgotCi0tIElzc3VlICM5NDEzNDY6IEZpeCBicm9rZW4gc2hhcmVkIGxpYnJhcnkgYnVpbGQgb24gQUlYLgorLSBJc3N1ZSAjMTA4MjA6IEZpeCBPUyBYIGZyYW1ld29yayBpbnN0YWxscyB0byBzdXBwb3J0IHZlcnNpb24tc3BlY2lmaWMKKyAgc2NyaXB0cyAoIzEwNjc5KS4KIAogLSBJc3N1ZSAjNzcxNjogVW5kZXIgU29sYXJpcywgZG9uJ3QgYXNzdW1lIGV4aXN0ZW5jZSBvZiAvdXNyL3hwZzQvYmluL2dyZXAgaW4KICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYnV0IHVzZSAkR1JFUCBpbnN0ZWFkLiAgUGF0Y2ggYnkgRmFiaWFuIEdyb2ZmZW4uCkBAIC0zMjYsNiArNzU5LDkgQEAKIC0gSXNzdWUgIzEwNDc1OiBEb24ndCBoYXJkY29kZSBjb21waWxlcnMgZm9yIExEU0hBUkVEL0xEQ1hYU0hBUkVEIG9uIE5ldEJTRAogICBhbmQgRHJhZ29uRmx5IEJTRC4gIFBhdGNoIGJ5IE5pY29sYXMgSm9seS4KIAorLSBJc3N1ZSAjMTA2Nzk6IFRoZSAiaWRsZSIsICJweWRvYyIgYW5kICIydG8zIiBzY3JpcHRzIGFyZSBub3cgaW5zdGFsbGVkIHdpdGgKKyAgYSB2ZXJzaW9uLXNwZWNpZmljIHN1ZmZpeCBvbiAibWFrZSBhbHRpbnN0YWxsIi4KKwogLSBJc3N1ZSAjMTA2NTU6IEZpeCB0aGUgYnVpbGQgb24gUG93ZXJQQyBvbiBMaW51eCB3aXRoIEdDQyB3aGVuIGJ1aWxkaW5nIHdpdGgKICAgdGltZXN0YW1wIHByb2ZpbGluZyAoLS13aXRoLXRzYyk6IHRoZSBwcmVwcm9jZXNzb3IgdGVzdCBmb3IgdGhlIFBvd2VyUEMKICAgc3VwcG9ydCBub3cgbG9va3MgZm9yICJfX3Bvd2VycGNfXyIgYXMgd2VsbCBhcyAiX19wcGNfXyI6IHRoZSBsYXR0ZXIgc2VlbXMgdG8KQEAgLTMzNCw3MCArNzcwLDMzMyBAQAogLSBJc3N1ZSAjMTA5OTogRml4IHRoZSBidWlsZCBvbiBNYWNPU1ggd2hlbiBidWlsZGluZyBhIGZyYW1ld29yayB3aXRoIHB5ZGVidWcKICAgdXNpbmcgR0NDIDQuMC4KIAorVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEwODQzOiBJbnN0YWxsIHRoZSBUb29scyBkaXJlY3Rvcnkgb24gT1MgWCBpbiB0aGUgYXBwbGljYXRpb25zIEV4dHJhcworICAoL0FwcGxpY2F0aW9ucy9QeXRob24gMy5uL0V4dHJhcy8pIHdoZXJlIHRoZSBEZW1vIGRpcmVjdG9yeSBoYWQgcHJldmlvdXMgYmVlbgorICBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzc5NjI6IFRoZSBEZW1vIGRpcmVjdG9yeSBpcyBnb25lLiAgTW9zdCBvZiB0aGUgb2xkIGFuZCB1bm1haW50YWluZWQKKyAgZGVtb3MgaGF2ZSBiZWVuIHJlbW92ZWQsIG90aGVycyBpbnRlZ3JhdGVkIGluIGRvY3VtZW50YXRpb24gb3IgYSBuZXcKKyAgVG9vbHMvZGVtbyBzdWJkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzEwNTAyOiBBZGRpdGlvbiBvZiB0aGUgdW5pdHRlc3RndWkgdG9vbC4gT3JpZ2luYWxseSBieSBTdGV2ZSBQdXJjZWxsLgorICBVcGRhdGVkIGZvciB0ZXN0IGRpc2NvdmVyeSBieSBNYXJrIFJvZGR5IGFuZCBQeXRob24gMyBjb21wYXRpYmlsaXR5IGJ5IEJyaWFuCisgIEN1cnRpbi4KKwogVGVzdHMKIC0tLS0tCiAKIC0gRml4IHRlc3Rfc3RhcnRmaWxlIHRvIHdhaXQgZm9yIGNoaWxkIHByb2Nlc3MgdG8gdGVybWluYXRlIGJlZm9yZSBmaW5pc2hpbmcuCiAKLS0gSXNzdWUgIzExNzE5OiBGaXggbWVzc2FnZSBhYm91dCB1bmV4cGVjdGVkIHRlc3RfbXNpbGliIHNraXAgb24gbm9uLVdpbmRvd3MKLSAgcGxhdGZvcm1zLiBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCi0KLS0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQotICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgotCiAtIElzc3VlICMxMDgyMjogRml4IHRlc3RfcG9zaXg6dGVzdF9nZXRncm91cHMgZmFpbHVyZSB1bmRlciBTb2xhcmlzLiAgUGF0Y2gKICAgYnkgUm9zcyBMYWdlcndhbGwuCiAKLS0gSXNzdWUgIzYyOTM6IEhhdmUgcmVncnRlc3QucHkgZWNobyBiYWNrIHN5cy5mbGFncy4gIFRoaXMgaXMgZG9uZSBieSBkZWZhdWx0Ci0gIGluIHdob2xlIHJ1bnMgYW5kIGVuYWJsZWQgc2VsZWN0aXZlbHkgdXNpbmcgYGAtLWhlYWRlcmBgIHdoZW4gcnVubmluZyBhbgotICBleHBsaWNpdCBsaXN0IG9mIHRlc3RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ29sbGluIFdpbnRlci4KKy0gTWFrZSB0aGUgLS1jb3ZlcmFnZSBmbGFnIHdvcmsgZm9yIHRlc3QucmVncnRlc3QuCiAKLS0gSXNzdWUgIzc3NTk2NDogdGVzdF9ncnAgbm93IHNraXBzIFlQL05JUyBlbnRyaWVzIGluc3RlYWQgb2YgZmFpbGluZyB3aGVuCi0gIGVuY291bnRlcmluZyB0aGVtLgorLSBJc3N1ZSAjMTY3NzY5NDogUmVmYWN0b3IgYW5kIGltcHJvdmUgdGVzdF90aW1lb3V0LiAgT3JpZ2luYWwgcGF0Y2ggYnkKKyAgQmrDtnJuIExpbmRxdmlzdC4KIAotLSBJc3N1ZSAjNzExMDogcmVncnRlc3Qgbm93IHNlbmRzIHRlc3QgZmFpbHVyZSByZXBvcnRzIGFuZCBzaW5nbGUtZmFpbHVyZQotICB0cmFjZWJhY2tzIHRvIHN0ZGVyciByYXRoZXIgdGhhbiBzdGRvdXQuCistIElzc3VlICM1NDg1OiBBZGQgdGVzdHMgZm9yIHRoZSBVc2VGb3JlaWduRFREIG1ldGhvZCBvZiBleHBhdCBwYXJzZXIgb2JqZWN0cy4KKyAgUGF0Y2ggYnkgSmVhbi1QYXVsIENhbGRlcm9uZSBhbmQgU2FuZHJvIFRvc2kuCisKKy0gSXNzdWUgIzYyOTM6IEhhdmUgcmVncnRlc3QucHkgZWNobyBiYWNrIHN5cy5mbGFncy4gIFRoaXMgaXMgZG9uZSBieSBkZWZhdWx0IGluCisgIHdob2xlIHJ1bnMgYW5kIGVuYWJsZWQgc2VsZWN0aXZlbHkgdXNpbmcgYGAtLWhlYWRlcmBgIHdoZW4gcnVubmluZyBhbiBleHBsaWNpdAorICBsaXN0IG9mIHRlc3RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ29sbGluIFdpbnRlci4KIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjEuMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQorV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IDIwMTAtMTEtMjcqCisqUmVsZWFzZSBkYXRlOiAxOS1EZWMtMjAxMCoKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzEwMzkxOiBEb24ndCBkZXJlZmVyZW5jZSBpbnZhbGlkIG1lbW9yeSBpbiBlcnJvciBtZXNzYWdlcyBpbiB0aGUgYXN0Ci0gIG1vZHVsZS4KKy0gSXNzdWUgIzg4NDQ6IFJlZ3VsYXIgYW5kIHJlY3Vyc2l2ZSBsb2NrIGFjcXVpc2l0aW9ucyBjYW4gbm93IGJlIGludGVycnVwdGVkCisgIGJ5IHNpZ25hbHMgb24gcGxhdGZvcm1zIHVzaW5nIHB0aHJlYWRzLiAgUGF0Y2ggYnkgUmVpZCBLbGVja25lci4KKworLSBJc3N1ZSAjNDIzNjogUHlNb2R1bGVfQ3JlYXRlMiBub3cgY2hlY2tzIHRoZSBpbXBvcnQgbWFjaGluZXJ5IGRpcmVjdGx5CisgIHJhdGhlciB0aGFuIHRoZSBQeV9Jc0luaXRpYWxpemVkIGZsYWcsIGF2b2lkaW5nIGEgRmF0YWwgUHl0aG9uCisgIGVycm9yIGluIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB3aGVuIGFuIGltcG9ydCBpcyBkb25lIGluIF9fZGVsX18uCisKKy0gSXNzdWUgIzU1ODc6IGFkZCBhIHJlcHIgdG8gZGljdF9wcm94eSBvYmplY3RzLiAgUGF0Y2ggYnkgRGF2aWQgU3RhbmVrIGFuZAorICBEYW5pZWwgVXJiYW4uCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMjIzNjogZGlzdHV0aWxzJyBta3BhdGggaWdub3JlZCB0aGUgbW9kZSBwYXJhbWV0ZXIuCistIElzc3VlICMzMjQzOiAgU3VwcG9ydCBpdGVyYWJsZSBib2RpZXMgaW4gaHR0cGxpYi4gUGF0Y2ggQ29udHJpYnV0aW9ucyBieQorICBYdWFuamkgTGkgYW5kIENocmlzIEF0TGVlLgogCi0tIEZpeCB0eXBvIGluIG9uZSBzZGlzdCBvcHRpb24gKG1lZGF0YS1jaGVjaykuCistIElzc3VlICMxMDYxMTogU3lzdGVtRXhpdCBleGNlcHRpb24gd2lsbCBubyBsb25nZXIga2lsbCBhIHVuaXR0ZXN0IHJ1bi4KIAotLSBJc3N1ZSAjMTAzMjM6IGl0ZXJ0b29scy5pc2xpY2UoKSBub3cgY29uc3VtZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mCi0gIGlucHV0cyBiZWZvcmUgc3RvcHBpbmcuICBGb3JtZXJseSwgdGhlIGZpbmFsIHN0YXRlIG9mIHRoZSB1bmRlcmx5aW5nCi0gIGl0ZXJhdG9yIHdhcyB1bmRlZmluZWQuCistIElzc3VlICM5ODU3OiBJdCBpcyBub3cgcG9zc2libGUgdG8gc2tpcCBhIHRlc3QgaW4gYSBzZXRVcCwgdGVhckRvd24gb3IgY2xlYW4KKyAgdXAgZnVuY3Rpb24uCiAKLS0gSXNzdWUgIzEwNTY1OiBUaGUgY29sbGVjdGlvbnMuSXRlcmF0b3IgQUJDIG5vdyBjaGVja3MgZm9yIGJvdGgKLSAgX19pdGVyX18gYW5kIF9fbmV4dF9fLgorLSBJc3N1ZSAjMTA1NzM6IHVzZSBhY3R1YWwvZXhwZWN0ZWQgY29uc2lzdGVudGx5IGluIHVuaXR0ZXN0IG1ldGhvZHMuCisgIFRoZSBvcmRlciBvZiB0aGUgYXJncyBvZiBhc3NlcnRDb3VudEVxdWFsIGlzIGFsc28gY2hhbmdlZC4KKworLSBJc3N1ZSAjOTI4NjogZW1haWwudXRpbHMucGFyc2VhZGRyIG5vIGxvbmdlciBjb25jYXRlbmF0ZXMgYmxhbmstc2VwYXJhdGVkCisgIHdvcmRzIGluIHRoZSBsb2NhbCBwYXJ0IG9mIGVtYWlsIGFkZHJlc3NlcywgdGhlcmVieSBwcmVzZXJ2aW5nIHRoZSBpbnB1dC4KKworLSBJc3N1ZSAjNjc5MTogTGltaXQgaGVhZGVyIGxpbmUgbGVuZ3RoICh0byA2NTUzNSBieXRlcykgaW4gaHR0cC5jbGllbnQKKyAgYW5kIGh0dHAuc2VydmVyLCB0byBhdm9pZCBkZW5pYWwgb2Ygc2VydmljZXMgZnJvbSB0aGUgb3RoZXIgcGFydHkuCisKKy0gSXNzdWUgIzEwNDA0OiBVc2UgY3RsLWJ1dHRvbi0xIG9uIE9TWCBmb3IgdGhlIGNvbnRleHQgbWVudSBpbiBJZGxlLgorCistIElzc3VlICM5OTA3OiBGaXggdGFiIGhhbmRsaW5nIG9uIE9TWCB3aGVuIHVzaW5nIGVkaXRsaW5lIGJ5IGNhbGxpbmcKKyAgcmxfaW5pdGlhbGl6ZSBmaXJzdCwgdGhlbiBzZXR0aW5nIG91ciBjdXN0b20gZGVmYXVsdHMsIHRoZW4gcmVhZGluZyAuZWRpdHJjLgorCistIElzc3VlICM0MTg4OiBBdm9pZCBjcmVhdGluZyBkdW1teSB0aHJlYWQgb2JqZWN0cyB3aGVuIGxvZ2dpbmcgb3BlcmF0aW9ucworICBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlICh3aXRoIHRoZSBpbnRlcm5hbCB2ZXJib3NlIGZsYWcgYWN0aXZhdGVkKS4KKworLSBJc3N1ZSAjMTA3MTE6IFJlbW92ZSBIVFRQIDAuOSBzdXBwb3J0IGZyb20gaHR0cC5jbGllbnQuICBUaGUgYGBzdHJpY3RgYAorICBwYXJhbWV0ZXIgdG8gSFRUUENvbm5lY3Rpb24gYW5kIGZyaWVuZHMgaXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjOTcyMTogRml4IHRoZSBiZWhhdmlvciBvZiB1cmxqb2luIHdoZW4gdGhlIHJlbGF0aXZlIHVybCBzdGFydHMgd2l0aCBhCisgICc7JyBjaGFyYWN0ZXIuIFBhdGNoIGJ5IFdlcyBDaG93LgorCistIElzc3VlICMxMDcxNDogTGltaXQgbGVuZ3RoIG9mIGluY29taW5nIHJlcXVlc3QgaW4gaHR0cC5zZXJ2ZXIgdG8gNjU1MzYgYnl0ZXMKKyAgZm9yIHNlY3VyaXR5IHJlYXNvbnMuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICM5NTU4OiBGaXggZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0IHdpdGggVlMgOC4wLgorCistIElzc3VlICMxMDY2NzogRmFzdCBwYXRoIGZvciBjb2xsZWN0aW9ucy5Db3VudGVyKCkuCisKKy0gSXNzdWUgIzEwNjk1OiBwYXNzaW5nIHRoZSBwb3J0IGFzIGEgc3RyaW5nIHZhbHVlIHRvIHRlbG5ldGxpYiBubyBsb25nZXIKKyAgY2F1c2VzIGRlYnVnIG1vZGUgdG8gZmFpbC4KKworLSBJc3N1ZSAjMTA3ODkxOTogYWRkX2hlYWRlciBub3cgYXV0b21hdGljYWxseSBSRkMyMjMxIGVuY29kZXMgcGFyYW1ldGVycworICB0aGF0IGNvbnRhaW4gbm9uLWFzY2lpIHZhbHVlcy4KKworLSBJc3N1ZSAjMTAxODggKHBhcnRpYWwgcmVzb2x1dGlvbik6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSBlbWl0cworICBhIHdhcm5pbmcgb24gc3lzLnN0ZGVyciByYXRoZXIgdGhhbiB0aHJvd2luZyBhIG1pc2xlYWRpbmcgZXhjZXB0aW9uCisgIGlmIGNsZWFudXAgZmFpbHMgZHVlIHRvIG51bGxpbmcgb3V0IG9mIG1vZHVsZXMgZHVyaW5nIHNodXRkb3duLgorICBBbHNvIGF2b2lkcyBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIG1rZHRlbXAgY2FsbCBmYWlscyBhbmQgaXNzdWVzCisgIGEgUmVzb3VyY2VXYXJuaW5nIG9uIGltcGxpY2l0IGNsZWFudXAgdmlhIF9fZGVsX18uCisKKy0gSXNzdWUgIzEwMTA3OiBXYXJuIGFib3V0IHVuc2F2ZWQgZmlsZXMgaW4gSURMRSBvbiBPU1guCisKKy0gSXNzdWUgIzcyMTM6IHN1YnByb2Nlc3MuUG9wZW4ncyBkZWZhdWx0IGZvciBjbG9zZV9mZHMgaGFzIGJlZW4gY2hhbmdlZC4KKyAgSXQgaXMgbm93IFRydWUgaW4gbW9zdCBjYXNlcyBvdGhlciB0aGFuIG9uIFdpbmRvd3Mgd2hlbiBpbnB1dCwgb3V0cHV0IG9yCisgIGVycm9yIGhhbmRsZXMgYXJlIHByb3ZpZGVkLgorCistIElzc3VlICM2NTU5OiBzdWJwcm9jZXNzLlBvcGVuIGhhcyBhIG5ldyBwYXNzX2ZkcyBwYXJhbWV0ZXIgKGFjdHVhbGx5CisgIGFkZGVkIGluIDMuMmJldGExKSB0byBhbGxvdyBzcGVjaWZ5aW5nIGEgc3BlY2lmaWMgbGlzdCBvZiBmaWxlIGRlc2NyaXB0b3JzCisgIHRvIGtlZXAgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjMTczMTcxNzogRml4ZWQgdGhlIHByb2JsZW0gd2hlcmUgc3VicHJvY2Vzcy53YWl0KCkgY291bGQgY2F1c2UgYW4KKyAgT1NFcnJvciBleGNlcHRpb24gd2hlbiBUaGUgT1MgaGFkIGJlZW4gdG9sZCB0byBpZ25vcmUgU0lHQ0xEIGluIG91ciBwcm9jZXNzCisgIG9yIG90aGVyd2lzZSBub3Qgd2FpdCBmb3IgZXhpdGluZyBjaGlsZCBwcm9jZXNzZXMuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM3NzU5NjQ6IHRlc3RfZ3JwIG5vdyBza2lwcyBZUC9OSVMgZW50cmllcyBpbnN0ZWFkIG9mIGZhaWxpbmcgd2hlbgorICBlbmNvdW50ZXJpbmcgdGhlbS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzYwNzU6IElETEUgb24gTWFjIE9TIFggbm93IHdvcmtzIHdpdGggYm90aCBDYXJib24gQXF1YVRrIGFuZAorICBDb2NvYSBBcXVhVGsuCisKKy0gSXNzdWUgIzEwNzEwOiBgYE1pc2Mvc2V0dWlkLXByb2cuY2BgIGlzIHJlbW92ZWQgZnJvbSB0aGUgc291cmNlIHRyZWUuCisKKy0gSXNzdWUgIzEwNzA2OiBSZW1vdmUgb3V0ZGF0ZWQgc2NyaXB0IHJ1bnRlc3RzLnNoLiAgRWl0aGVyIGBgbWFrZSB0ZXN0YGAKKyAgb3IgYGBweXRob24gLW0gdGVzdGBgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCisKK0J1aWxkCistLS0tLQorCistIFRoZSBXaW5kb3dzIGJ1aWxkIG5vdyB1c2VzIFRjbC9UayA4LjUuOSBhbmQgc3FsaXRlMyAzLjcuNC4KKworLSBJc3N1ZSAjOTIzNDogYXJncGFyc2Ugc3VwcG9ydHMgYWxpYXMgbmFtZXMgZm9yIHN1YnBhcnNlcnMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4yIEJldGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA1LURlYy0yMDEwKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTA2MzA6IFJldHVybiBkaWN0IHZpZXdzIGZyb20gdGhlIGRpY3QgcHJveHkga2V5cygpL3ZhbHVlcygpL2l0ZW1zKCkKKyAgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTA1OTY6IEZpeCBmbG9hdC5fX21vZF9fIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3VyIGFzIGZsb2F0Ll9fZGl2bW9kX18KKyAgd2l0aCByZXNwZWN0IHRvIHNpZ25lZCB6ZXJvcy4gIC00LjAgJSA0LjAgc2hvdWxkIGJlIDAuMCwgbm90IC0wLjAuCisKKy0gSXNzdWUgIzE3NzI4MzM6IEFkZCB0aGUgLXEgY29tbWFuZC1saW5lIG9wdGlvbiB0byBzdXBwcmVzcyBjb3B5cmlnaHQgYW5kCisgIHZlcnNpb24gb3V0cHV0IGluIGludGVyYWN0aXZlIG1vZGUuCisKKy0gUHJvdmlkZSBhbiAqb3B0aW1pemUqIHBhcmFtZXRlciBpbiB0aGUgYnVpbHQtaW4gY29tcGlsZSgpIGZ1bmN0aW9uLgorCistIEZpeGVkIHNldmVyYWwgY29ybmVyIGNhc2UgaXNzdWVzIG9uIFdpbmRvd3MgaW4gb3Muc3RhdC9vcy5sc3RhdCByZWxhdGVkIHRvCisgIHJlcGFyc2UgcG9pbnRzLgorCistIFBFUCAzODQgKERlZmluaW5nIGEgU3RhYmxlIEFCSSkgaXMgaW1wbGVtZW50ZWQuCisKKy0gSXNzdWUgIzI2OTA6IFJhbmdlIG9iamVjdHMgc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBzbGljaW5nLgorCistIElzc3VlICM5OTE1OiBTcGVlZCB1cCBzb3J0aW5nIHdpdGggYSBrZXkuCisKKy0gSXNzdWUgIzg2ODU6IFNwZWVkIHVwIHNldCBkaWZmZXJlbmNlIGBgYSAtIGJgYCB3aGVuIHNvdXJjZSBzZXQgYGBhYGAgaXMgbXVjaAorICBsYXJnZXIgdGhhbiBvcGVyYW5kIGBgYmBgLiAgUGF0Y2ggYnkgQW5kcmV3IEJlbm5ldHRzLgorCistIElzc3VlICMxMDUxODogQnJpbmcgYmFjayB0aGUgY2FsbGFibGUoKSBidWlsdGluLgorCistIElzc3VlICM3MDk0OiBBZGRlZCBhbHRlcm5hdGUgZm9ybWF0dGluZyAoc3BlY2lmaWVkIGJ5ICcjJykgdG8gYGBfX2Zvcm1hdF9fYGAKKyAgbWV0aG9kIG9mIGZsb2F0LCBjb21wbGV4LCBhbmQgRGVjaW1hbC4gVGhpcyBhbGxvd3MgbW9yZSBwcmVjaXNlIGNvbnRyb2wgb3ZlcgorICB3aGVuIGRlY2ltYWwgcG9pbnRzIGFyZSBkaXNwbGF5ZWQuCisKKy0gSXNzdWUgIzEwNDc0OiByYW5nZS5jb3VudCgpIHNob3VsZCByZXR1cm4gaW50ZWdlcnMuCisKKy0gSXNzdWUgIzE1NzQyMTc6IGlzaW5zdGFuY2Ugbm93IGNhdGNoZXMgb25seSBBdHRyaWJ1dGVFcnJvciwgcmF0aGVyIHRoYW4KKyAgbWFza2luZyBhbGwgZXJyb3JzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gbG9nZ2luZzogYWRkZWQgImhhbmRsZXIgb2YgbGFzdCByZXNvcnQiLiBTZWUgaHR0cDovL2JpdC5seS9sYXN0LXJlc29ydC1oYW5kbGVyCisKKy0gdGVzdC5zdXBwb3J0OiBBZGRlZCBUZXN0SGFuZGxlciBhbmQgTWF0Y2hlciBjbGFzc2VzIGZvciBiZXR0ZXIgc3VwcG9ydCBvZgorICBhc3NlcnRpb25zIGFib3V0IGxvZ2dpbmcuCisKKy0gSXNzdWUgIzQzOTE6IFVzZSBwcm9wZXIgcGx1cmFsIGZvcm1zIGluIGFyZ3BhcnNlLgorCistIElzc3VlICMxMDYwMTogc3lzLmRpc3BsYXlob29rIHVzZXMgJ2JhY2tzbGFzaHJlcGxhY2UnIGVycm9yIGhhbmRsZXIgb24KKyAgVW5pY29kZUVuY29kZUVycm9yLgorCistIEFkZCB0aGUgImRpc3BsYXkiIGFuZCAidW5kaXNwbGF5IiBwZGIgY29tbWFuZHMuCisKKy0gSXNzdWUgIzcyNDU6IEFkZCBhIFNJR0lOVCBoYW5kbGVyIGluIHBkYiB0aGF0IGFsbG93cyB0byBicmVhayBhIHByb2dyYW0gYWdhaW4KKyAgYWZ0ZXIgYSAiY29udGludWUiIGNvbW1hbmQuCisKKy0gQWRkIHRoZSAiaW50ZXJhY3QiIHBkYiBjb21tYW5kLgorCistIElzc3VlICM3OTA1OiBBY3R1YWxseSByZXNwZWN0IHRoZSBrZXllbmNvZGluZyBwYXJhbWV0ZXIgdG8gc2hlbHZlLlNoZWxmLgorCistIElzc3VlICMxNTY5MjkxOiBTcGVlZCB1cCBhcnJheS5yZXBlYXQoKS4KKworLSBQcm92aWRlIGFuIGludGVyZmFjZSB0byBzZXQgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiBjb21waWxhdGlvbiBpbgorICBweV9jb21waWxlLCBjb21waWxlYWxsIGFuZCB6aXBmaWxlLlB5WmlwRmlsZS4KKworLSBJc3N1ZSAjNzkwNDogQ2hhbmdlcyB0byB1cmxsaWIucGFyc2UudXJsc3BsaXQgdG8gaGFuZGxlIHNjaGVtZXMgYXMgZGVmaW5lZCBieQorICBSRkMzOTg2LiBBbnl0aGluZyBiZWZvcmUgOi8vIGlzIGNvbnNpZGVyZWQgYSBzY2hlbWUgYW5kIGlzIGZvbGxvd2VkIGJ5IGFuCisgIGF1dGhvcml0eSAob3IgbmV0bG9jKSBhbmQgYnkgJy8nIGxlZCBwYXRoLCB3aGljaCBpcyBvcHRpb25hbC4KKworLSBJc3N1ZSAjNjA0NTogZGJtLmdudSBkYXRhYmFzZXMgbm93IHN1cHBvcnQgZ2V0KCkgYW5kIHNldGRlZmF1bHQoKSBtZXRob2RzLgorCistIElzc3VlICMxMDYyMDogYHB5dGhvbiAtbSB1bml0dGVzdGAgY2FuIGFjY2VwdCBmaWxlIHBhdGhzIGluc3RlYWQgb2YgbW9kdWxlCisgIG5hbWVzIGZvciBydW5uaW5nIHNwZWNpZmljIHRlc3RzLgorCistIElzc3VlICM5NDI0OiBEZXByZWNhdGUgdGhlIGB1bml0dGVzdC5UZXN0Q2FzZWAgbWV0aG9kcyBgYXNzZXJ0RXF1YWxzYCwKKyAgYGFzc2VydE5vdEVxdWFsc2AsIGBhc3NlcnRBbG1vc3RFcXVhbHNgLCBgYXNzZXJ0Tm90QWxtb3N0RXF1YWxzYCBhbmQgYGFzc2VydF9gCisgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgY29ycmVjdCBtZXRob2RzIGluIHRoZSBQeXRob24gdGVzdCBzdWl0ZS4KKworLSBJc3N1ZSAjMTAyNzI6IFRoZSBzc2wgbW9kdWxlIG5vdyByYWlzZXMgc29ja2V0LnRpbWVvdXQgaW5zdGVhZCBvZiBhIGdlbmVyaWMKKyAgU1NMRXJyb3Igb24gc29ja2V0IHRpbWVvdXRzLgorCistIElzc3VlICMxMDUyODogQWxsb3cgdHJhbnNsYXRvcnMgdG8gcmVvcmRlciBwbGFjZWhvbGRlcnMgaW4gbG9jYWxpemFibGUKKyAgbWVzc2FnZXMgZnJvbSBhcmdwYXJzZS4KKworLSBJc3N1ZSAjMTA0OTc6IEZpeCBpbmNvcnJlY3QgdXNlIG9mIGdldHRleHQgaW4gYXJncGFyc2UuCisKKy0gSXNzdWUgIzEwNDc4OiBSZWVudHJhbnQgY2FsbHMgaW5zaWRlIGJ1ZmZlcmVkIElPIG9iamVjdHMgKGZvciBleGFtcGxlIGJ5CisgIHdheSBvZiBhIHNpZ25hbCBoYW5kbGVyKSBub3cgcmFpc2UgYSBSdW50aW1lRXJyb3IgaW5zdGVhZCBvZiBmcmVlemluZyB0aGUKKyAgY3VycmVudCBwcm9jZXNzLgorCistIGxvZ2dpbmc6IEFkZGVkIGdldExvZ1JlY29yZEZhY3Rvcnkvc2V0TG9nUmVjb3JkRmFjdG9yeSB3aXRoIGRvY3MgYW5kIHRlc3RzLgorCistIElzc3VlICMxMDU0OTogRml4IHB5ZG9jIHRyYWNlYmFjayB3aGVuIHRleHQtZG9jdW1lbnRpbmcgY2VydGFpbiBjbGFzc2VzLgorCistIElzc3VlICMyMDAxOiBOZXcgSFRNTCBzZXJ2ZXIgd2l0aCBlbmhhbmNlZCBXZWIgcGFnZSBmZWF0dXJlcy4gIFBhdGNoIGJ5IFJvbgorICBBZGFtLgorCistIElzc3VlICMxMDM2MDogSW4gV2Vha1NldCwgZG8gbm90IHJhaXNlIFR5cGVFcnJvcnMgd2hlbiB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwCisgIG9mIG5vbi13ZWFrcmVmYWJsZSBvYmplY3RzLgorCistIElzc3VlICM5NDAyODY6IHB5ZG9jLkhlbHBlci5oZWxwKCkgaWdub3JlcyBpbnB1dC9vdXRwdXQgaW5pdCBwYXJhbWV0ZXJzLgorCistIElzc3VlICMxNzQ1MDM1OiBBZGQgYSBjb21tYW5kIHNpemUgYW5kIGRhdGEgc2l6ZSBsaW1pdCB0byBzbXRwZC5weSwgdG8gcHJldmVudAorICBEb1MgYXR0YWNrcy4gIFBhdGNoIGJ5IFNhdmlvIFNlbmEuCisKKy0gSXNzdWUgIzQ5MjU6IEFkZCBmaWxlbmFtZSB0byBlcnJvciBtZXNzYWdlIHdoZW4gZXhlY3V0YWJsZSBjYW4ndCBiZSBmb3VuZCBpbgorICBzdWJwcm9jZXNzLgorCistIElzc3VlICMxMDM5MTogRG9uJ3QgZGVyZWZlcmVuY2UgaW52YWxpZCBtZW1vcnkgaW4gZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGFzdAorICBtb2R1bGUuCisKKy0gSXNzdWUgIzEwMDI3OiBzdF9ubGluayB3YXMgbm90IGJlaW5nIHNldCBvbiBXaW5kb3dzIGNhbGxzIHRvIG9zLnN0YXQgb3IKKyAgb3MubHN0YXQuIFBhdGNoIGJ5IEhpcm9rYXp1IFlhbWFtb3RvLgorCistIElzc3VlICM5MzMzOiBFeHBvc2Ugb3Muc3ltbGluayBvbmx5IHdoZW4gdGhlIFNlQ3JlYXRlU3ltYm9saWNMaW5rUHJpdmlsZWdlIGlzCisgIGhlbGQgYnkgdGhlIHVzZXIncyBhY2NvdW50LCBpLmUuLCB3aGVuIHRoZSBmdW5jdGlvbiBjYW4gYWN0dWFsbHkgYmUgdXNlZC4KKworLSBJc3N1ZSAjODg3OTogQWRkIG9zLmxpbmsgc3VwcG9ydCBmb3IgV2luZG93cy4KKworLSBJc3N1ZSAjNzkxMTogYGB1bml0dGVzdC5UZXN0Q2FzZS5sb25nTWVzc2FnZWBgIGRlZmF1bHRzIHRvIFRydWUgZm9yIGltcHJvdmVkCisgIGZhaWx1cmUgbWVzc2FnZXMgYnkgZGVmYXVsdC4gUGF0Y2ggYnkgTWFyayBSb2RkeS4KKworLSBJc3N1ZSAjMTQ4NjcxMzogSFRNTFBhcnNlciBub3cgaGFzIGFuIG9wdGlvbmFsIHRvbGVyYW50IG1vZGUgd2hlcmUgaXQgdHJpZXMgdG8KKyAgZ3Vlc3MgYXQgdGhlIGNvcnJlY3QgcGFyc2luZyBvZiBpbnZhbGlkIGh0bWwuCisKKy0gSXNzdWUgIzEwNTU0OiBBZGQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQgdG8gc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3RzLgorCistIElzc3VlICM4OTg5OiBlbWFpbC51dGlscy5tYWtlX21zZ2lkIG5vdyBoYXMgYSBkb21haW4gcGFyYW1ldGVyIHRoYXQgY2FuCisgIG92ZXJyaWRlIHRoZSBkb21haW4gbmFtZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgbXNnaWQuCisKKy0gSXNzdWUgIzkyOTk6IEFkZCBleGlzdF9vayBwYXJhbWV0ZXIgdG8gb3MubWFrZWRpcnMgdG8gc3VwcHJlc3MgdGhlICdGaWxlCisgIGV4aXN0cycgZXhjZXB0aW9uIHdoZW4gYSB0YXJnZXQgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIHdpdGggdGhlIHNwZWNpZmllZAorICBtb2RlLiBQYXRjaCBieSBSYXkgQWxsZW4uCisKKy0gSXNzdWUgIzk1NzM6IG9zLmZvcmsoKSBub3cgd29ya3MgY29ycmVjdGx5IHdoZW4gdHJpZ2dlcmVkIGFzIGEgc2lkZSBlZmZlY3Qgb2YKKyAgYSBtb2R1bGUgaW1wb3J0LgorCistIElzc3VlICMxMDQ2NDogbmV0cmMgbm93IGNvcnJlY3RseSBoYW5kbGVzIGxpbmVzIHdpdGggZW1iZWRkZWQgJyMnIGNoYXJhY3RlcnMuCisKKy0gQWRkZWQgaXRlcnRvb2xzLmFjY3VtdWxhdGUoKS4KKworLSBJc3N1ZSAjNDExMzogQWRkZWQgY3VzdG9tIGBgX19yZXByX19gYCBtZXRob2QgdG8gYGBmdW5jdG9vbHMucGFydGlhbGBgLgorICBPcmlnaW5hbCBwYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzEwMjczOiBSZW5hbWUgYGFzc2VydFJlZ2V4cE1hdGNoZXNgIGFuZCBgYXNzZXJ0UmFpc2VzUmVnZXhwYCB0bworICBgYXNzZXJ0UmVnZXhgIGFuZCBgYXNzZXJ0UmFpc2VzUmVnZXhgLgorCistIElzc3VlICMxMDUzNTogRW5hYmxlIHNpbGVuY2VkIHdhcm5pbmdzIGluIHVuaXR0ZXN0IGJ5IGRlZmF1bHQuCisKKy0gSXNzdWUgIzk4NzM6IFRoZSBVUkwgcGFyc2luZyBmdW5jdGlvbnMgaW4gdXJsbGliLnBhcnNlIG5vdyBhY2NlcHQgQVNDSUkgYnl0ZQorICBzZXF1ZW5jZXMgYXMgaW5wdXQgaW4gYWRkaXRpb24gdG8gY2hhcmFjdGVyIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEwNTg2OiBUaGUgc3RhdGlzdGljcyBBUEkgZm9yIHRoZSBuZXcgZnVuY3Rvb2xzLmxydV9jYWNoZSBoYXMgYmVlbgorICBjaGFuZ2VkIHRvIGEgc2luZ2xlIGNhY2hlX2luZm8oKSBtZXRob2QgcmV0dXJuaW5nIGEgbmFtZWQgdHVwbGUuCisKKy0gSXNzdWUgIzEwMzIzOiBpdGVydG9vbHMuaXNsaWNlKCkgbm93IGNvbnN1bWVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiBpbnB1dHMKKyAgYmVmb3JlIHN0b3BwaW5nLiAgRm9ybWVybHksIHRoZSBmaW5hbCBzdGF0ZSBvZiB0aGUgdW5kZXJseWluZyBpdGVyYXRvciB3YXMKKyAgdW5kZWZpbmVkLgorCistIElzc3VlICMxMDU2NTogVGhlIGNvbGxlY3Rpb25zLkl0ZXJhdG9yIEFCQyBub3cgY2hlY2tzIGZvciBib3RoIF9faXRlcl9fIGFuZAorICBfX25leHRfXy4KKworLSBJc3N1ZSAjMTAyNDI6IEZpeGVkIGltcGxlbWVudGF0aW9uIG9mIHVuaXR0ZXN0Lkl0ZW1zRXF1YWwgYW5kIGdhdmUgaXQgYSBuZXcKKyAgbW9yZSBpbmZvcm1hdGl2ZSBuYW1lLCB1bml0dGVzdC5Db3VudEVxdWFsLgogCiAtIElzc3VlICMxMDU2MTogSW4gcGRiLCBjbGVhciB0aGUgYnJlYWtwb2ludHMgYnkgdGhlIGJyZWFrcG9pbnQgbnVtYmVyLgogCi0tIElzc3VlICMxMDQ1OTogVXBkYXRlIENKSyBjaGFyYWN0ZXIgbmFtZXMgdG8gVW5pY29kZSA1LjEuCistIElzc3VlICMyOTg2OiBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlciBnZXRzIGEgbmV3IHBhcmFtZXRlciwgYXV0b2p1bmssIHdoaWNoIGNhbgorICBiZSBzZXQgdG8gRmFsc2UgdG8gdHVybiBvZmYgdGhlIHByZXZpb3VzbHkgdW5kb2N1bWVudGVkICdwb3B1bGFyaXR5JworICBoZXVyaXN0aWMuIFBhdGNoIGJ5IFRlcnJ5IFJlZWR5IGFuZCBFbGkgQmVuZGVyc2t5LgogCi0tIElzc3VlICMxMDA5MjogUHJvcGVybHkgcmVzZXQgbG9jYWxlIGluIGNhbGVuZGFyLkxvY2FsZSpDYWxlbmRhciBjbGFzc2VzLgorLSBJc3N1ZSAjMTA1MzQ6IGluIGRpZmZsaWIsIGV4cG9zZSBianVuayBhbmQgYnBvcHVsYXIgc2V0czsgZGVwcmVjYXRlCisgIHVuZG9jdW1lbnRlZCBhbmQgbm93IHJlZHVuZGFudCBpc2JqdW5rIGFuZCBpc2Jwb3B1bGFyIG1ldGhvZHMuCiAKLS0gSXNzdWUgIzYwOTg6IERvbid0IGNsYWltIERPTSBsZXZlbCAzIGNvbmZvcm1hbmNlIGluIG1pbmlkb20uCistIElzc3VlICM5ODQ2OiB6aXBmaWxlIGlzIG5vdyBjb3JyZWN0bHkgY2xvc2luZyB1bmRlcmx5aW5nIGZpbGUgb2JqZWN0cy4KIAotLSBJc3N1ZSAjNTc2MjogRml4IEF0dHJpYnV0ZUVycm9yIHJhaXNlZCBieSBgYHhtbC5kb20ubWluaWRvbWBgIHdoZW4gYW4gZW1wdHkKLSAgWE1MIG5hbWVzcGFjZSBhdHRyaWJ1dGUgaXMgZW5jb3VudGVyZWQuCi0KLS0gSXNzdWUgIzE3MTA3MDM6IFdyaXRlIHN0cnVjdHVyZXMgZm9yIGFuIGVtcHR5IFpJUCBhcmNoaXZlIHdoZW4gYSBaaXBGaWxlIGlzCi0gIGNyZWF0ZWQgaW4gbW9kZXMgJ2EnIG9yICd3JyBhbmQgdGhlbiBjbG9zZWQgd2l0aG91dCBhZGRpbmcgYW55IGZpbGVzLiBSYWlzZQotICBCYWRaaXBmaWxlIChyYXRoZXIgdGhhbiBJT0Vycm9yKSB3aGVuIG9wZW5pbmcgc21hbGwgbm9uLVpJUCBmaWxlcy4KKy0gSXNzdWUgIzEwNDU5OiBVcGRhdGUgQ0pLIGNoYXJhY3RlciBuYW1lcyB0byBVbmljb2RlIDYuMC4KIAogLSBJc3N1ZSAjNDQ5MzogdXJsbGliLnJlcXVlc3QgYWRkcyAnLycgaW4gZnJvbnQgb2YgcGF0aCBjb21wb25lbnRzIHdoaWNoIGRvZXMgbm90CiAgIHN0YXJ0IHdpdGggJy8uIENvbW1vbiBiZWhhdmlvciBleGhpYml0ZWQgYnkgYnJvd3NlcnMgYW5kIG90aGVyIGNsaWVudHMuCkBAIC00MDUsMzMgKzExMDQsMTIyIEBACiAtIElzc3VlICM2Mzc4OiBpZGxlLmJhdCBub3cgcnVucyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gdmVyc2lvbiByYXRoZXIgdGhhbgogICB0aGUgc3lzdGVtIGRlZmF1bHQuIFBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hci4KIAorLSBJc3N1ZSAjMTA0NzA6ICdweXRob24gLW0gdW5pdHRlc3QnIHdpbGwgbm93IHJ1biB0ZXN0IGRpc2NvdmVyeSBieSBkZWZhdWx0LAorICB3aGVuIG5vIGV4dHJhIGFyZ3VtZW50cyBoYXZlIGJlZW4gcHJvdmlkZWQuCisKKy0gSXNzdWUgIzM3MDk6IEJhc2VIVFRQUmVxdWVzdEhhbmRsZXIgd2lsbCBidWZmZXIgdGhlIGhlYWRlcnMgYW5kIHdyaXRlIHRvCisgIG91dHB1dCBzdHJlYW0gb25seSB3aGVuIGVuZF9oZWFkZXJzIGlzIGludm9rZWQuIFRoaXMgaXMgYSBzcGVlZHVwIGFuZCBhbgorICBpbnRlcm5hbCBvcHRpbWl6YXRpb24uICBQYXRjaCBieSBlbmRpYW4uCisKKy0gSXNzdWUgIzEwMjIwOiBBZGRlZCBpbnNwZWN0LmdldGdlbmVyYXRvcnN0YXRlLiBJbml0aWFsIHBhdGNoIGJ5IFJvZG9scGhvCisgIEVja2hhcmR0LgorCistIElzc3VlICMxMDQ1MzogY29tcGlsZWFsbCBub3cgdXNlcyBhcmdwYXJzZSBpbnN0ZWFkIG9mIGdldG9wdCwgYW5kIHRodXMKKyAgcHJvdmlkZXMgY2xlYW4gb3V0cHV0IHdoZW4gY2FsbGVkIHdpdGggJy1oJy4KKworLSBJc3N1ZSAjODA3ODogQWRkIGNvbnN0YW50cyBmb3IgaGlnaGVyIGJhdWQgcmF0ZXMgaW4gdGhlIHRlcm1pb3MgbW9kdWxlLiAgUGF0Y2gKKyAgYnkgUm9kb2xwaG8gRWNraGFyZHQuCisKIC0gSXNzdWUgIzEwNDA3OiBGaXggdHdvIE5hbWVFcnJvcnMgaW4gZGlzdHV0aWxzLgogCi0tIElzc3VlICMxMDE5ODogZml4IGR1cGxpY2F0ZSBoZWFkZXIgd3JpdHRlbiB0byB3YXZlIGZpbGVzIHdoZW4gd3JpdGVmcmFtZXMoKQotICBpcyBjYWxsZWQgd2l0aG91dCBkYXRhLgorLSBJc3N1ZSAjMTAzNzE6IERlcHJlY2F0ZWQgdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyBpbiB0aGUgdHJhY2UgbW9kdWxlLgogCiAtIElzc3VlICMxMDQ2NzogRml4IEJ5dGVzSU8ucmVhZGludG8oKSBhZnRlciBzZWVraW5nIGludG8gYSBwb3NpdGlvbiBhZnRlciB0aGUKICAgZW5kIG9mIHRoZSBmaWxlLgogCistIGNvbmZpZ3BhcnNlcjogMTAwJSB0ZXN0IGNvdmVyYWdlLgorCistIElzc3VlICMxMDQ5OTogY29uZmlncGFyc2VyIHN1cHBvcnRzIHBsdWdnYWJsZSBpbnRlcnBvbGF0aW9uIGhhbmRsZXJzLiBUaGUKKyAgZGVmYXVsdCBjbGFzc2ljIGludGVycG9sYXRpb24gaGFuZGxlciBpcyBjYWxsZWQgQmFzaWNJbnRlcnBvbGF0aW9uLiBBbm90aGVyCisgIGludGVycG9sYXRpb24gaGFuZGxlciBhZGRlZCAoRXh0ZW5kZWRJbnRlcnBvbGF0aW9uKSB3aGljaCBzdXBwb3J0cyB0aGUgc3ludGF4CisgIHVzZWQgYnkgemMuYnVpbGRvdXQgKGUuZy4gaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHNlY3Rpb25zKS4KKworLSBjb25maWdwYXJzZXI6IHRoZSBTYWZlQ29uZmlnUGFyc2VyIGNsYXNzIGhhcyBiZWVuIHJlbmFtZWQgdG8gQ29uZmlnUGFyc2VyLgorICBUaGUgbGVnYWN5IENvbmZpZ1BhcnNlciBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIGJ1dCBpdHMgaW50ZXJwb2xhdGlvbiBtZWNoYW5pc20KKyAgaXMgc3RpbGwgYXZhaWxhYmxlIGFzIExlZ2FjeUludGVycG9sYXRpb24uCisKKy0gY29uZmlncGFyc2VyOiBVc2FnZSBvZiBSYXdDb25maWdQYXJzZXIgaXMgbm93IGRpc2NvdXJhZ2VkIGZvciBuZXcgcHJvamVjdHMKKyAgaW4gZmF2b3Igb2YgQ29uZmlnUGFyc2VyKGludGVycG9sYXRpb249Tm9uZSkuCisKIC0gSXNzdWUgIzE2ODI5NDI6IGNvbmZpZ3BhcnNlciBzdXBwb3J0cyBhbHRlcm5hdGl2ZSBvcHRpb24vdmFsdWUgZGVsaW1pdGVycy4KIAotQnVpbGQKKy0gSXNzdWUgIzU0MTI6IGNvbmZpZ3BhcnNlciBzdXBwb3J0cyBtYXBwaW5nIHByb3RvY29sIGFjY2Vzcy4KKworLSBJc3N1ZSAjOTQxMTogY29uZmlncGFyc2VyIHN1cHBvcnRzIHNwZWNpZnlpbmcgZW5jb2RpbmcgZm9yIHJlYWQgb3BlcmF0aW9ucy4KKworLSBJc3N1ZSAjOTQyMTogY29uZmlncGFyc2VyJ3MgZ2V0aW50KCksIGdldGZsb2F0KCkgYW5kIGdldGJvb2xlYW4oKSBtZXRob2RzCisgIGFjY2VwdCB2YXJzIGFuZCBkZWZhdWx0IGFyZ3VtZW50cyBqdXN0IGxpa2UgZ2V0KCkgZG9lcy4KKworLSBJc3N1ZSAjOTQ1MjogY29uZmlncGFyc2VyIHN1cHBvcnRzIHJlYWRpbmcgZnJvbSBzdHJpbmdzIGFuZCBkaWN0aW9uYXJpZXMKKyAgKHRoYW5rcyB0byB0aGUgbWFwcGluZyBwcm90b2NvbCBBUEksIHRoZSBsYXR0ZXIgY2FuIGJlIHVzZWQgdG8gY29weSBkYXRhCisgIGJldHdlZW4gcGFyc2VycykuCisKKy0gY29uZmlncGFyc2VyOiBhY2NlcHRlZCBJTkkgZmlsZSBzdHJ1Y3R1cmUgaXMgbm93IGN1c3RvbWl6YWJsZSwgaW5jbHVkaW5nCisgIGNvbW1lbnQgcHJlZml4ZXMsIG5hbWUgb2YgdGhlIERFRkFVTFQgc2VjdGlvbiwgZW1wdHkgbGluZXMgaW4gbXVsdGlsaW5lCisgIHZhbHVlcywgYW5kIGluZGVudGF0aW9uLgorCistIElzc3VlICMxMDMyNjogdW5pdHRlc3QuVGVzdENhc2UgaW5zdGFuY2VzIGNhbiBiZSBwaWNrbGVkLgorCistIElzc3VlICM5OTI2OiBXcmFwcGVkIFRlc3RTdWl0ZSBzdWJjbGFzcyBkb2VzIG5vdCBnZXQgX19jYWxsX18gZXhlY3V0ZWQuCisKKy0gSXNzdWUgIzk5MjA6IFNraXAgdGVzdHMgZm9yIGNtYXRoLmF0YW4gYW5kIGNtYXRoLmF0YW5oIGFwcGxpZWQgdG8gY29tcGxleAorICB6ZXJvcyBvbiBzeXN0ZW1zIHdoZXJlIHRoZSBsb2cxcCBmdW5jdGlvbiBmYWlscyB0byByZXNwZWN0IHRoZSBzaWduIG9mIHplcm8uCisgIFRoaXMgZml4ZXMgYSB0ZXN0IGZhaWx1cmUgb24gQUlYLgorCistIElzc3VlICM5NzMyOiBBZGRpdGlvbiBvZiBnZXRhdHRyX3N0YXRpYyB0byB0aGUgaW5zcGVjdCBtb2R1bGUuCisKKy0gSXNzdWUgIzEwNDQ2OiBNb2R1bGUgZG9jdW1lbnRhdGlvbiBnZW5lcmF0ZWQgYnkgcHlkb2Mgbm93IGxpbmtzIHRvIGEKKyAgdmVyc2lvbi1zcGVjaWZpYyBvbmxpbmUgcmVmZXJlbmNlIG1hbnVhbC4KKworLSBNYWtlIHRoZSAnTm8gbW9kdWxlIG5hbWVkJyBleGNlcHRpb24gbWVzc2FnZSBmcm9tIGltcG9ydGxpYiBjb25zaXN0ZW50LgorCistIElzc3VlICMxMDQ0MzogQWRkIHRoZSBTU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpIG1ldGhvZC4KKworLSBJc3N1ZSAjMTA0NDA6IFN1cHBvcnQgUlVTQUdFX1RIUkVBRCBhcyBhIGNvbnN0YW50IGluIHRoZSByZXNvdXJjZSBtb2R1bGUuCisgIFBhdGNoIGJ5IFJvYmVydCBDb2xsaW5zLgorCistIElzc3VlICMxMDQyOTogSU1BUC5zdGFydHRscygpIHN0b3JlZCB0aGUgY2FwYWJpbGl0aWVzIGFzIGJ5dGVzIG9iamVjdHMsIHJhdGhlcgorICB0aGFuIHN0cmluZ3MuCisKK0MtQVBJCiAtLS0tLQogCi0tIERvbid0IHJ1biBwZ2VuIHR3aWNlIHdoZW4gdXNpbmcgbWFrZSAtai4KKy0gSXNzdWUgIzEwNTU3OiBBZGRlZCBhIG5ldyBBUEkgZnVuY3Rpb24sIFB5VW5pY29kZV9UcmFuc2Zvcm1EZWNpbWFsVG9BU0NJSSgpLAorICB3aGljaCB0cmFuc2Zvcm1zIG5vbi1BU0NJSSBkZWNpbWFsIGRpZ2l0cyBpbiBhIFVuaWNvZGUgc3RyaW5nIHRvIHRoZWlyIEFTQ0lJCisgIGVxdWl2YWxlbnRzLgogCi0tIEJhY2twb3J0IHI4MzM5OSB0byBhbGxvdyB0ZXN0X2Rpc3R1dGlscyB0byBwYXNzIG9uIGluc3RhbGxlZCB2ZXJzaW9ucy4KKy0gSXNzdWUgIzk1MTg6IEV4dGVuZCB0aGUgUHlNb2R1bGVEZWZfSEVBRF9JTklUIG1hY3JvIHRvIGV4cGxpY2l0bHkKKyAgemVyby1pbml0aWFsaXplIGFsbCBmaWVsZHMsIGZpeGluZyBjb21waWxlciB3YXJuaW5ncyBzZWVuIHdoZW4gYnVpbGRpbmcKKyAgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBnY2Mgd2l0aCAiLVdtaXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIgKGltcGxpZWQgYnkKKyAgIi1XIikuCiAKLS0gSXNzdWUgIzEzMDM0MzQ6IEdlbmVyYXRlIFpJUCBmaWxlIGNvbnRhaW5pbmcgYWxsIFBEQnMgKGFscmVhZHkgZG9uZSBmb3IgcmMxKS4KKy0gSXNzdWUgIzEwMjU1OiBGaXggcmVmZXJlbmNlIGxlYWsgaW4gUHlfSW5pdGlhbGl6ZUV4KCkuICBQYXRjaCBieSBOZWlsCisgIFNjaGVtZW5hdWVyLgogCi0tIFN0b3AgcGFja2FnaW5nIHZlcnNpb25jaGVjayB0b29sIChhbHJlYWR5IGRvbmUgZm9yIHJjMSkuCistIHN0cnVjdHNlcS5oIGlzIG5vdyBpbmNsdWRlZCBpbiBQeXRob24uaC4KIAotLSBBY2NlcHQgT3JhY2xlIEJlcmtlbGV5IERCIDQuOCwgNS4wIGFuZCA1LjEgYXMgYmFja2VuZCBmb3IgdGhlIGRibSBleHRlbnNpb24uCistIExvb3NlbiBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMgdG8gYWxsb3cgZGljdCBzdWJjbGFzc2VzLgogCiBUZXN0cwogLS0tLS0KIAotLSBJc3N1ZSAjOTQyNDogUmVwbGFjZSBkZXByZWNhdGVkIGFzc2VydCogbWV0aG9kcyBpbiB0aGUgUHl0aG9uIHRlc3Qgc3VpdGUuCistIHJlZ3J0ZXN0LnB5IG9uY2UgYWdhaW4gZW5zdXJlcyB0aGUgdGVzdCBkaXJlY3RvcnkgaXMgcmVtb3ZlZCBmcm9tIHN5cy5wYXRoCisgIHdoZW4gaXQgaXMgaW52b2tlZCBkaXJlY3RseSBhcyB0aGUgX19tYWluX18gbW9kdWxlLgorCistIGBweXRob24gLW0gdGVzdGAgY2FuIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlIGFzIHdlbGwgYXMgYHB5dGhvbiAtbQorICB0ZXN0LnJlZ3J0ZXN0YC4KKworLSBEbyBub3QgZmFpbCB0ZXN0X3NvY2tldCB3aGVuIHRoZSBJUCBhZGRyZXNzIG9mIHRoZSBsb2NhbCBob3N0bmFtZSBjYW5ub3QgYmUKKyAgbG9va2VkIHVwLgorCistIElzc3VlICM4ODg2OiBVc2UgY29udGV4dCBtYW5hZ2VycyB0aHJvdWdob3V0IHRlc3RfemlwZmlsZS4gUGF0Y2ggYnkgRXJpYworICBDYXJzdGVuc2VuLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTAzMjU6IEZpeCB0d28gaXNzdWVzIGluIHRoZSBmYWxsYmFjayBkZWZpbml0aW9ucyBmb3IgUFlfVUxMT05HX01BWCBhbmQKKyAgUFlfTExPTkdfTUFYIHRoYXQgbWFkZSB0aGVtIHVuc3VpdGFibGUgZm9yIHVzZSBpbiBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWxzLgogCiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCkBAIC00MzksMTY0ICsxMjI3LDEyOCBAQAogLSBJc3N1ZSAjMTAyOTk6IExpc3QgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyBpbiBhIHRhYmxlIGluIGZ1bmN0aW9ucy5yc3QuCiAKIAotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4xLjMgcmVsZWFzZSBjYW5kaWRhdGUgMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjIgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAyMDEwLTExLTEzKgorKlJlbGVhc2UgZGF0ZTogMTMtTm92LTIwMTAqCiAKIENvcmUgYW5kIEJ1aWx0aW5zCiAtLS0tLS0tLS0tLS0tLS0tLQogCistIElzc3VlICMxMDM3MjogSW1wb3J0IHRoZSB3YXJuaW5ncyBtb2R1bGUgb25seSBhZnRlciB0aGUgSU8gbGlicmFyeSBpcworICBpbml0aWFsaXplZCwgc28gYXMgdG8gYXZvaWQgYm9vdHN0cmFwIGlzc3VlcyB3aXRoIHRoZSAnLVcnIG9wdGlvbi4KKworLSBJc3N1ZSAjMTAyOTM6IFJlbW92ZSBvYnNvbGV0ZSBmaWVsZCBpbiB0aGUgUHlNZW1vcnlWaWV3IHN0cnVjdHVyZSwgdW51c2VkCisgIHVuZG9jdW1lbnRlZCB2YWx1ZSBQeUJVRl9TSEFET1csIGFuZCBzdHJhbmdlbHktbG9va2luZyBjb2RlIGluCisgIFB5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzLgorCistIElzc3VlICM2MDgxOiBBZGQgc3RyLmZvcm1hdF9tYXAoKSwgc2ltaWxhciB0byBgYHN0ci5mb3JtYXQoKiptYXBwaW5nKWBgLgorCistIElmIEZpbGVJTy5fX2luaXRfXyBmYWlscywgY2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvci4KKwogLSBJc3N1ZSAjMTAyMjE6IGRpY3QucG9wKGspIG5vdyBoYXMgYSBrZXkgZXJyb3IgbWVzc2FnZSB0aGF0IGluY2x1ZGVzIHRoZQogICBtaXNzaW5nIGtleSAoc2FtZSBtZXNzYWdlIGRba10gcmV0dXJucyBmb3IgbWlzc2luZyBrZXlzKS4KIAotLSBJc3N1ZSAjNTQzNzogQSBwcmVhbGxvY2F0ZWQgTWVtb3J5RXJyb3IgaW5zdGFuY2Ugc2hvdWxkIG5vdCBob2xkIHRyYWNlYmFjaworLSBJc3N1ZSAjNTQzNzogQSBwcmVhbGxvY2F0ZWQgTWVtb3J5RXJyb3IgaW5zdGFuY2Ugc2hvdWxkIG5vdCBrZWVwIHRyYWNlYmFjawogICBkYXRhIChpbmNsdWRpbmcgbG9jYWwgdmFyaWFibGVzIGNhdWdodCBpbiB0aGUgc3RhY2sgdHJhY2UpIGFsaXZlIGluZmluaXRlbHkuCiAKLS0gSXNzdWUgIzEwMDc3OiBGaXggbG9nZ2luZyBvZiBzaXRlIG1vZHVsZSBlcnJvcnMgYXQgc3RhcnR1cC4KLQogLSBJc3N1ZSAjMTAxODY6IEZpeCB0aGUgU3ludGF4RXJyb3IgY2FyZXQgd2hlbiB0aGUgb2Zmc2V0IGlzIGVxdWFsIHRvIHRoZSBsZW5ndGgKICAgb2YgdGhlIG9mZmVuZGluZyBsaW5lLgogCi0tIElzc3VlICM5NzEzLCAjMTAxMTQ6IFBhcnNlciBmdW5jdGlvbnMgKGVnLiBQeVBhcnNlcl9BU1RGcm9tRmlsZSkgZXhwZWN0cwotICBmaWxlbmFtZXMgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvcgotICBoYW5kbGVyICh0byBzdXBwb3J0IHVuZGVjb2RhYmxlIGJ5dGVzKSwgaW5zdGVhZCBvZiBVVEYtOCBpbiBzdHJpY3QgbW9kZS4KKy0gSXNzdWUgIzEwMDg5OiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IC1YIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoZXkKKyAgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIGEgbmV3IGF0dHJpYnV0ZSBgYHN5cy5feG9wdGlvbnNgYC4KIAotLSBJc3N1ZSAjMTAwMDY6IHR5cGUuX19hYnN0cmFjdG1ldGhvZHNfXyBub3cgcmFpc2VzIGFuIEF0dHJpYnV0ZUVycm9yLiAgQXMgYQotICByZXN1bHQgbWV0YWNsYXNzZXMgY2FuIG5vdyBiZSBBQkNzIChzZWUgIzk1MzMpLgorLSBJc3N1ZSAjNDM4ODogT24gTWFjIE9TIFgsIGRlY29kZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIGZyb20gVVRGLTgsIGluc3RlYWQgb2YKKyAgdGhlIGxvY2FsZSBlbmNvZGluZy4gIElmIHRoZSBMQU5HIChhbmQgTENfQUxMIGFuZCBMQ19DVFlQRSkgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgaXMgbm90IHNldCwgdGhlIGxvY2FsZSBlbmNvZGluZyBpcyBJU08tODg1OS0xLCB3aGVyZWFzIG1vc3QgcHJvZ3JhbXMKKyAgKGluY2x1ZGluZyBQeXRob24pIGV4cGVjdCBVVEYtOC4gIFB5dGhvbiBhbHJlYWR5IHVzZXMgVVRGLTggZm9yIHRoZSBmaWxlc3lzdGVtCisgIGVuY29kaW5nIGFuZCB0byBlbmNvZGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBvbiB0aGlzIE9TLgorCistIElzc3VlICM5NzEzLCAjMTAxMTQ6IFBhcnNlciBmdW5jdGlvbnMgKGUuZy4gUHlQYXJzZXJfQVNURnJvbUZpbGUpIGV4cGVjdAorICBmaWxlbmFtZXMgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyB3aXRoIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IKKyAgaGFuZGxlciAodG8gc3VwcG9ydCB1bmRlY29kYWJsZSBieXRlcyksIGluc3RlYWQgb2YgVVRGLTggaW4gc3RyaWN0IG1vZGUuCiAKIC0gSXNzdWUgIzk5OTc6IERvbid0IGxldCB0aGUgbmFtZSAidG9wIiBoYXZlIHNwZWNpYWwgc2lnbmlmaWNhbmNlIGluIHNjb3BlCiAgIHJlc29sdXRpb24uCiAKLS0gSXNzdWUgIzk5MzA6IFJlbW92ZSBib2d1cyBzdWJ0eXBlIGNoZWNrIHRoYXQgd2FzIGNhdXNpbmcgKGUuZy4pCi0gIGZsb2F0Ll9fcmRpdl9fKDIuMCwgMykgdG8gcmV0dXJuIE5vdEltcGxlbWVudGVkIGluc3RlYWQgb2YgdGhlCi0gIGV4cGVjdGVkIDEuNS4KKy0gSXNzdWUgIzk4NjI6IENvbXBlbnNhdGUgZm9yIGJyb2tlbiBQSVBFX0JVRiBpbiBBSVggYnkgaGFyZCBjb2RpbmcgaXRzIHZhbHVlIGFzCisgIHRoZSBkZWZhdWx0IDUxMiB3aGVuIGNvbXBpbGluZyBvbiBBSVguCiAKLS0gSXNzdWUgIzk4MDQ6IGFzY2lpKCkgbm93IGFsd2F5cyByZXByZXNlbnRzIHVuaWNvZGUgc3Vycm9nYXRlIHBhaXJzIGFzCi0gIGEgc2luZ2xlIGBgXFVYWFhYWFhYWGBgLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBwcmludGFibGUKLSAgb3Igbm90LiAgQWxzbywgdGhlICJiYWNrc2xhc2hyZXBsYWNlIiBlcnJvciBoYW5kbGVyIG5vdyBqb2lucyBzdXJyb2dhdGUKLSAgcGFpcnMgaW50byBhIHNpbmdsZSBjaGFyYWN0ZXIgb24gVUNTLTIgYnVpbGRzLgorLSBVc2UgbG9jYWxlIGVuY29kaW5nIGluc3RlYWQgb2YgVVRGLTggdG8gZW5jb2RlIGFuZCBkZWNvZGUgZmlsZW5hbWVzIGlmCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgaXMgbm90IHNldC4KIAotLSBJc3N1ZSAjOTc5NzogcHlzdGF0ZS5jIHdyb25nbHkgYXNzdW1lZCB0aGF0IHplcm8gY291bGRuJ3QgYmUgYSB2YWxpZAotICB0aHJlYWQtbG9jYWwgc3RvcmFnZSBrZXkuCistIElzc3VlICMxMDA5NTogZnBfc2V0cmVhZGwoKSBkb2Vzbid0IHJlb3BlbiB0aGUgZmlsZSwgaW5zdGVhZCByZXVzZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yLgogCi0tIElzc3VlICM5NzM3OiBGaXggYSBjcmFzaCB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBzbGljZSBvciBhbiBpdGVtIGZyb20KLSAgYSBtZW1vcnl2aWV3IG9iamVjdC4KKy0gSXNzdWUgIzk0MTg6IE1vdmVkIHByaXZhdGUgc3RyaW5nIG1ldGhvZHMgYGBfZm9ybWF0dGVyX3BhcnNlcmBgIGFuZAorICBgYF9mb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdGBgIGludG8gYSBuZXcgYGBfc3RyaW5nYGAgbW9kdWxlLgogCi0tIElzc3VlICM3NDE1OiBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoKSBub3cgdXNlcyB0aGUgbmV3IGJ1ZmZlciBBUEkKLSAgcHJvcGVybHkuICBQYXRjaCBieSBTdGVmYW4gQmVobmVsLgotCi0tIFJlc3RvcmUgR0lMIGluIG5pc19jYXQgaW4gY2FzZSBvZiBlcnJvci4KLQotLSBJc3N1ZSAjOTcxMjogRml4IHRva2VuaXplIG9uIGlkZW50aWZpZXJzIHRoYXQgc3RhcnQgd2l0aCBub24tYXNjaWkgbmFtZXMuCi0KLS0gSXNzdWUgIzk2ODg6IF9fYmFzaWNzaXplX18gYW5kIF9faXRlbXNpemVfXyBtdXN0IGJlIGFjY2Vzc2VkIGFzIFB5X3NzaXplX3QuCi0KLS0gSXNzdWUgIzUzMTk6IFByaW50IGFuIGVycm9yIGlmIGZsdXNoaW5nIHN0ZG91dCBmYWlscyBhdCBpbnRlcnByZXRlcgotICBzaHV0ZG93bi4KLQotLSBJc3N1ZSAjODgxNDogZnVuY3Rpb24gYW5ub3RhdGlvbnMgKHRoZSBgYF9fYW5ub3RhdGlvbnNfX2BgIGF0dHJpYnV0ZSkKLSAgYXJlIG5vdyBpbmNsdWRlZCBpbiB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgY29waWVkIGJ5IGRlZmF1bHQgYnkKLSAgZnVuY3Rvb2xzLndyYXBzIGFuZCBmdW5jdG9vbHMudXBkYXRlX3dyYXBwZXIuICBQYXRjaCBieSBUZXJyZW5jZSBDb2xlLgotCi0tIElzc3VlICM4Mzc1NTogIEltcGxpY2l0IHNldC10by1mcm96ZW5zZXQgY29udmVyc2lvbiB3YXMgbm90IHRocmVhZC1zYWZlLgotCi0tIElzc3VlICMxMDA2ODogR2xvYmFsIG9iamVjdHMgd2hpY2ggaGF2ZSByZWZlcmVuY2UgY3ljbGVzIHdpdGggdGhlaXIgbW9kdWxlJ3MKLSAgZGljdCBhcmUgbm93IGNsZWFyZWQgYWdhaW4uIFRoaXMgY2F1c2VzIGlzc3VlICM3MTQwIHRvIGFwcGVhciBhZ2Fpbi4KLQotLSBJc3N1ZSAjOTQxNjogRml4IHNvbWUgaXNzdWVzIHdpdGggY29tcGxleCBmb3JtYXR0aW5nIHdoZXJlIHRoZQotICBvdXRwdXQgd2l0aCBubyB0eXBlIHNwZWNpZmllciBmYWlsZWQgdG8gbWF0Y2ggdGhlIHN0ciBvdXRwdXQ6Ci0KLSAgICAtIGZvcm1hdChjb21wbGV4KC0wLjAsIDIuMCksICctJykgb21pdHRlZCB0aGUgcmVhbCBwYXJ0IGZyb20gdGhlIG91dHB1dCwKLSAgICAtIGZvcm1hdChjb21wbGV4KDAuMCwgMi4wKSwgJy0nKSBpbmNsdWRlZCBhIHNpZ24gYW5kIHBhcmVudGhlc2VzLgotCi0tIElzc3VlICM3NjE2OiBGaXggY29weWluZyBvZiBvdmVybGFwcGluZyBtZW1vcnl2aWV3IHNsaWNlcyB3aXRoIHRoZSBJbnRlbAotICBjb21waWxlci4KLQotLSBJc3N1ZSAjODI3MTogZHVyaW5nIHRoZSBkZWNvZGluZyBvZiBhbiBpbnZhbGlkIFVURi04IGJ5dGUgc2VxdWVuY2UsIG9ubHkgdGhlCi0gIHN0YXJ0IGJ5dGUgYW5kIHRoZSBjb250aW51YXRpb24gYnl0ZShzKSBhcmUgbm93IGNvbnNpZGVyZWQgaW52YWxpZCwgaW5zdGVhZAotICBvZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNwZWNpZmllZCBieSB0aGUgc3RhcnQgYnl0ZS4KLSAgRS5nLjogJ1x4ZjFceDgwQUInLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpIG5vdyByZXR1cm5zIHUnXHVmZmZkQUInIGFuZAotICByZXBsYWNlcyB3aXRoIFUrRkZGRCBvbmx5IHRoZSBzdGFydCBieXRlICgnXHhmMScpIGFuZCB0aGUgY29udGludWF0aW9uIGJ5dGUKLSAgKCdceDgwJykgZXZlbiBpZiAnXHhmMScgaXMgdGhlIHN0YXJ0IGJ5dGUgb2YgYSA0LWJ5dGVzIHNlcXVlbmNlLgotICBQcmV2aW91cyB2ZXJzaW9ucyByZXR1cm5lZCBhIHNpbmdsZSB1J1x1ZmZmZCcuCi0KLS0gSXNzdWUgIzY1NDM6IFdyaXRlIHRoZSB0cmFjZWJhY2sgaW4gdGhlIHRlcm1pbmFsIGVuY29kaW5nIGluc3RlYWQgb2YgdXRmLTguCi0gIEZpeCB0aGUgZW5jb2Rpbmcgb2YgdGhlIG1vZHVsZXMgZmlsZW5hbWUuIFBhdGNoIHdyaXR0ZW4gYnkgQW1hdXJ5IEZvcmdlb3QKLSAgZCdBcmMuCi0KLS0gSXNzdWUgIzkwNTg6IFJlbW92ZSBhc3NlcnRpb25zIGFib3V0IElOVF9NQVggaW4gVW5pY29kZURlY29kZUVycm9yLgotCi0tIElzc3VlICM4OTQxOiBkZWNvZGluZyBiaWcgZW5kaWFuIFVURi0zMiBkYXRhIGluIFVDUy0yIGJ1aWxkcyBjb3VsZCBjcmFzaAotICB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZQotICAoaGlnaGVyIHRoYW4gMHgxMDAwMCkuCi0KLS0gSW4gdGhlIHN0ci5mb3JtYXQoKSwgcmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gaW5kZXhlcyB0byBhcmd1bWVudHMgYXJlIHRvbwotICBsYXJnZS4KLQotLSBJc3N1ZSAjODc2NjogSW5pdGlhbGl6ZSBfd2FybmluZ3MgbW9kdWxlIGJlZm9yZSBpbXBvcnRpbmcgdGhlIGZpcnN0IG1vZHVsZS4KLSAgRml4IGEgY3Jhc2ggaWYgYW4gZW1wdHkgZGlyZWN0b3J5IGNhbGxlZCAiZW5jb2RpbmdzIiBleGlzdHMgaW4gc3lzLnBhdGguCi0KLS0gUHlPYmplY3RfRHVtcCgpIGVuY29kZXMgdW5pY29kZSBvYmplY3RzIHRvIHV0Zjggd2l0aCBiYWNrc2xhc2hyZXBsYWNlCi0gIChpbnN0ZWFkIG9mIHN0cmljdCkgZXJyb3IgaGFuZGxlciB0byBlc2NhcGUgc3Vycm9nYXRlcwotCi0tIElzc3VlICM4MTI0OiBQeVN5c19Xcml0ZVN0ZG91dCgpIGFuZCBQeVN5c19Xcml0ZVN0ZGVycigpIGRvbid0IGV4ZWN1dGUKLSAgaW5kaXJlY3RseSBQeXRob24gc2lnbmFsIGhhbmRsZXJzIGFueW1vcmUgYmVjYXVzZSBteXdyaXRlKCkgaWdub3JlcwotICBleGNlcHRpb25zIChLZXlib2FyZEludGVycnVwdCkKLQotLSBJc3N1ZSAjODA5MjogRml4IFB5VW5pY29kZV9FbmNvZGVVVEY4KCkgdG8gc3VwcG9ydCBlcnJvciBoYW5kbGVyIHByb2R1Y2luZwotICB1bmljb2RlIHN0cmluZyAoZWcuIGJhY2tzbGFzaHJlcGxhY2UpCi0KLS0gSXNzdWUgIzgwMTQ6IFNldHRpbmcgYSBUX1VJTlQgb3IgVF9QWVNTSVpFVCBhdHRyaWJ1dGUgb2YgYW4gb2JqZWN0IHdpdGgKLSAgUHlNZW1iZXJEZWZzIGNvdWxkIHByb2R1Y2UgYW4gaW50ZXJuYWwgZXJyb3I7ICByYWlzZSBUeXBlRXJyb3IgaW5zdGVhZC4KLQotLSBJc3N1ZSAjODQxNzogUmFpc2UgYW4gT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGludGVnZXIgbGFyZ2VyIHRoYW4gc3lzLm1heHNpemUgaXMKLSAgcGFzc2VkIHRvIGJ5dGVzIG9yIGJ5dGVhcnJheS4KLQotLSBJc3N1ZSAjODMyOTogRG9uJ3QgcmV0dXJuIHRoZSBzYW1lIGxpc3RzIGZyb20gc2VsZWN0LnNlbGVjdCB3aGVuIG5vIGZkcyBhcmUKLSAgY2hhbmdlZC4KLQotLSBSYWlzZSBhIFR5cGVFcnJvciB3aGVuIHRyeWluZyB0byBkZWxldGUgYSBUX1NUUklOR19JTlBMQUNFIHN0cnVjdCBtZW1iZXIuCi0KLS0gSXNzdWUgIzgyMjY6IHN5cy5zZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBMb29rdXBFcnJvciBpZiB0aGUgZW5jb2RpbmcKLSAgaXMgdW5rbm93bgotCi0tIElzc3VlICMxNTgzODYzOiBBbiBzdHIgc3ViY2xhc3MgY2FuIG5vdyBvdmVycmlkZSB0aGUgX19zdHJfXyBtZXRob2QKLQotLSBJc3N1ZSAjNzA3MjogaXNzcGFjZSgweGEwKSBpcyB0cnVlIG9uIE1hYyBPUyBYCi0KLUMtQVBJCi0tLS0tLQotCi0tIElzc3VlICM5ODM0OiBEb24ndCBzZWdmYXVsdCBpbiBQeVNlcXVlbmNlX0dldFNsaWNlLCBQeVNlcXVlbmNlX1NldFNsaWNlLCBvcgotICBQeVNlcXVlbmNlX0RlbFNsaWNlIHdoZW4gdGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgYW55IG1hcHBpbmcgb3BlcmF0aW9ucwotICBkZWZpbmVkLgotCi0tIElzc3VlICM1NzUzOiBBIG5ldyBDIEFQSSBmdW5jdGlvbiwgOmNmdW5jOmBQeVN5c19TZXRBcmd2RXhgLCBhbGxvd3MKLSAgZW1iZWRkZXJzIG9mIHRoZSBpbnRlcnByZXRlciB0byBzZXQgc3lzLmFyZ3Ygd2l0aG91dCBhbHNvIG1vZGlmeWluZwotICBzeXMucGF0aC4gIFRoaXMgaGVscHMgZml4IGBDVkUtMjAwOC01OTgzCi0gIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXy4KKy0gSXNzdWUgIzk5OTI6IFJlbW92ZSBQWVRIT05GU0VOQ09ESU5HIGVudmlyb25tZW50IHZhcmlhYmxlLgogCiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzEwNDY1OiBmaXggYnJva2VuIGRlbGVnYXRpbmcgb2YgYXR0cmlidXRlcyBieSBnemlwLl9QYWRkZWRGaWxlLgorCistIElzc3VlICMxMDM1NjogRGVjaW1hbC5fX2hhc2hfXygtMSkgc2hvdWxkIHJldHVybiAtMi4KKworLSBJc3N1ZSAjMTU1MzM3NTogbG9nZ2luZzogQWRkZWQgc3RhY2tfaW5mbyBrd2FyZyB0byBkaXNwbGF5IHN0YWNrIGluZm9ybWF0aW9uLgorCiAtIElzc3VlICM1MTExOiBJUHY2IEhvc3QgaW4gdGhlIEhlYWRlciBpcyB3cmFwcGVkIGluc2lkZSBbIF0uIFBhdGNoIGJ5IENoYW5kcnUuCiAKLS0gSXNzdWUgIzQ0NzE6IFByb3Blcmx5IHNodXRkb3duIHNvY2tldCBpbiBJTUFQLnNodXRkb3duKCkuICBQYXRjaCBieQotICBMb3JlbnpvIE0uIENhdHVjY2kuCistIEZpeCBGcmFjdGlvbi5fX2hhc2hfXyBzbyB0aGF0IEZyYWN0aW9uLl9faGFzaF9fKC0xKSBpcyAtMi4gIChTZWUgYWxzbyBpc3N1ZQorICAjMTAzNTYuKQorCistIElzc3VlICM0NDcxOiBBZGQgdGhlIElNQVAuc3RhcnR0bHMoKSBtZXRob2QgdG8gZW5hYmxlIGVuY3J5cHRpb24gb24gc3RhbmRhcmQKKyAgSU1BUDQgY29ubmVjdGlvbnMuICBPcmlnaW5hbCBwYXRjaCBieSBMb3JlbnpvIE0uIENhdHVjY2kuCisKKy0gSXNzdWUgIzE0NjYwNjU6IEFkZCAndmFsaWRhdGUnIG9wdGlvbiB0byBiYXNlNjQuYjY0ZGVjb2RlIHRvIHJhaXNlIGFuIGVycm9yIGlmCisgIHRoZXJlIGFyZSBub24tYmFzZTY0IGFscGhhYmV0IGNoYXJhY3RlcnMgaW4gdGhlIGlucHV0LgorCistIElzc3VlICMxMDM4NjogQWRkIF9fYWxsX18gdG8gdG9rZW4gbW9kdWxlOyB0aGlzIHNpbXBsaWZpZXMgaW1wb3J0aW5nIGluCisgIHRva2VuaXplIG1vZHVsZSBhbmQgcHJldmVudHMgbGVha2luZyBvZiBwcml2YXRlIG5hbWVzIHRocm91Z2ggYGBpbXBvcnQgKmBgLgorCistIElzc3VlICM0NDcxOiBQcm9wZXJseSBzaHV0ZG93biBzb2NrZXQgaW4gSU1BUC5zaHV0ZG93bigpLiAgUGF0Y2ggYnkgTG9yZW56bworICBNLiBDYXR1Y2NpLgogCiAtIEZpeCBJTUFQLmxvZ2luKCkgdG8gd29yayBwcm9wZXJseS4KIAorLSBJc3N1ZSAjOTI0NDogbXVsdGlwcm9jZXNzaW5nIHBvb2wgd29ya2VyIHByb2Nlc3NlcyBjb3VsZCB0ZXJtaW5hdGUKKyAgdW5leHBlY3RlZGx5IGlmIHRoZSByZXR1cm4gdmFsdWUgb2YgYSB0YXNrIGNvdWxkIG5vdCBiZSBwaWNrbGVkLiAgT25seSB0aGUKKyAgYGByZXByYGAgb2Ygc3VjaCBlcnJvcnMgYXJlIG5vdyBzZW50IGJhY2ssIHdyYXBwZWQgaW4gYW4KKyAgYGBNYXliZUVuY29kaW5nRXJyb3JgYCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzkyNDQ6IFRoZSBgYGFwcGx5X2FzeW5jKClgYCBhbmQgYGBtYXBfYXN5bmMoKWBgIG1ldGhvZHMgb2YKKyAgYGBtdWx0aXByb2Nlc3NpbmcuUG9vbGBgIG5vdyBhY2NlcHRzIGEgYGBlcnJvcl9jYWxsYmFja2BgIGFyZ3VtZW50LiAgVGhpcyBjYW4KKyAgYmUgYSBjYWxsYmFjayB3aXRoIHRoZSBzaWduYXR1cmUgYGBjYWxsYmFjayhleGMpYGAsIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGlmCisgIHRoZSB0YXJnZXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTAwMjI6IFRoZSBkaWN0aW9uYXJ5IHJldHVybmVkIGJ5IHRoZSBgYGdldHBlZXJjZXJ0KClgYCBtZXRob2Qgb2YgU1NMCisgIHNvY2tldHMgbm93IGhhcyBhZGRpdGlvbmFsIGl0ZW1zIHN1Y2ggYXMgYGBpc3N1ZXJgYCBhbmQgYGBub3RCZWZvcmVgYC4KKworLSBgYHVzZW5ldHJjYGAgaXMgbm93IGZhbHNlIGJ5IGRlZmF1bHQgZm9yIE5OVFAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTkyNjogQWRkIHN1cHBvcnQgZm9yIE5OVFAgb3ZlciBTU0wgb24gcG9ydCA1NjMsIGFzIHdlbGwgYXMgU1RBUlRUTFMuCisgIFBhdGNoIGJ5IEFuZHJldyBWYW50LgorCistIElzc3VlICMxMDMzNTogQWRkIHRva2VuaXplLm9wZW4oKSwgZGV0ZWN0IHRoZSBmaWxlIGVuY29kaW5nIHVzaW5nCisgIHRva2VuaXplLmRldGVjdF9lbmNvZGluZygpIGFuZCBvcGVuIGl0IGluIHJlYWQgb25seSBtb2RlLgorCistIElzc3VlICMxMDMyMTogQWRkIHN1cHBvcnQgZm9yIGJpbmFyeSBkYXRhIHRvIHNtdHBsaWIuU01UUC5zZW5kbWFpbCwgYW5kIGEgbmV3CisgIG1ldGhvZCBzZW5kX21lc3NhZ2UgdG8gc2VuZCBhbiBlbWFpbC5tZXNzYWdlLk1lc3NhZ2Ugb2JqZWN0LgorCistIElzc3VlICM2MDExOiBzeXNjb25maWcgYW5kIGRpc3R1dGlscy5zeXNjb25maWcgdXNlIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IKKyAgaGFuZGxlciB0byBwYXJzZSB0aGUgTWFrZWZpbGUgZmlsZS4gIEF2b2lkIGEgVW5pY29kZURlY29kZUVycm9yIGlmIHRoZSBzb3VyY2UKKyAgY29kZSBkaXJlY3RvcnkgbmFtZSBjb250YWlucyBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIgYW5kIHRoZSBsb2NhbGUgZW5jb2RpbmcgaXMKKyAgQVNDSUkuCisKKy0gSXNzdWUgIzEwMzI5OiBUaGUgdHJhY2UgbW9kdWxlIHdyaXRlcyByZXBvcnRzIHVzaW5nIHRoZSBpbnB1dCBQeXRob24gc2NyaXB0CisgIGVuY29kaW5nLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuICBQYXRjaCB3cml0dGVuIGJ5IEFsZXhhbmRlcgorICBCZWxvcG9sc2t5LgorCiAtIElzc3VlICMxMDEyNjogRml4IGRpc3R1dGlscycgdGVzdF9idWlsZCB3aGVuIFB5dGhvbiB3YXMgYnVpbHQgd2l0aAogICAtLWVuYWJsZS1zaGFyZWQuCiAKLS0gRml4IHR5cG8gaW4gb25lIHNkaXN0IG9wdGlvbiAobWVkYXRhLWNoZWNrKS4KLQotLSBJc3N1ZSAjOTE5OTogRml4IGluY29ycmVjdCB1c2Ugb2YgZGlzdHV0aWxzLmNtZC5Db21tYW5kLmFubm91bmNlLgotCi0tIElzc3VlICMxNzE4NTc0OiBGaXggb3B0aW9ucyB0aGF0IHdlcmUgc3VwcG9zZWQgdG8gYWNjZXB0IGFyZ3VtZW50cyBidXQgZGlkCi0gIG5vdCBpbiBidWlsZF9jbGliLgotCiAtIElzc3VlICM5MjgxOiBQcmV2ZW50IHJhY2UgY29uZGl0aW9uIHdpdGggbWtkaXIgaW4gZGlzdHV0aWxzLiAgUGF0Y2ggYnkKICAgQXJmcmV2ZXIuCiAKQEAgLTYwNSw5NyArMTM1Nyw4MzQgQEAKIC0gSXNzdWUgIzEwMjUyOiBDbG9zZSBmaWxlIG9iamVjdHMgaW4gYSB0aW1lbHkgbWFubmVyIGluIGRpc3R1dGlscyBjb2RlIGFuZAogICB0ZXN0cy4gIFBhdGNoIGJ5IEJyaWFuIEJyYXppbCwgY29tcGxldGVkIGJ5IMOJcmljIEFyYXVqby4KIAotLSBJc3N1ZSAjMTAzMTE6IFRoZSBzaWduYWwgbW9kdWxlIG5vdyByZXN0b3JlcyBlcnJubyBiZWZvcmUgcmV0dXJuaW5nIGZyb20KLSAgaXRzIGxvdy1sZXZlbCBzaWduYWwgaGFuZGxlci4gIFBhdGNoIGJ5IEhhbGx2YXJkIEIgRnVydXNldGguCistIElzc3VlICMxMDE4MDogUGlja2xpbmcgZmlsZSBvYmplY3RzIGlzIG5vdyBleHBsaWNpdGx5IGZvcmJpZGRlbiwgc2luY2UKKyAgdW5waWNrbGluZyB0aGVtIHByb2R1Y2VkIG5vbnNlbnNpY2FsIHJlc3VsdHMuCiAKLS0gVGhlIGtleXdvcmQgb25seSByZXN0cmljdGlvbiBmb3IgdGhlIHBsYWNlcyBhcmd1bWVudCBpbgotICB1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRbTm90XUFsbW9zdEVxdWFsIG1ldGhvZHMgaGFzIGJlZW4gcmVtb3ZlZC4KKy0gSXNzdWUgIzEwMzExOiBUaGUgc2lnbmFsIG1vZHVsZSBub3cgcmVzdG9yZXMgZXJybm8gYmVmb3JlIHJldHVybmluZyBmcm9tIGl0cworICBsb3ctbGV2ZWwgc2lnbmFsIGhhbmRsZXIuICBQYXRjaCBieSBIYWxsdmFyZCBCIEZ1cnVzZXRoLgogCi0tIElzc3VlICM2NzA2OiBhc3luY29yZSBhY2NlcHQoKSBtZXRob2Qgbm8gbG9uZ2VyIHJhaXNlcyBFV09VTERCTE9DSy9FQ09OTkFCT1JURUQKLSAgb24gaW5jb21wbGV0ZSBjb25uZWN0aW9uIGF0dGVtcHQgYnV0IHJldHVybnMgTm9uZSBpbnN0ZWFkLgorLSBJc3N1ZSAjMTAyODI6IEFkZCBhIGBgbm50cF9pbXBsZW1lbnRhdGlvbmBgIGF0dHJpYnV0ZSB0byBOTlRQIG9iamVjdHMuCiAKLS0gSXNzdWUgIzEwMjY2OiB1dS5kZWNvZGUgZGlkbid0IGNsb3NlIGluX2ZpbGUgZXhwbGljaXRseSB3aGVuIGl0IHdhcyBnaXZlbgotICBhcyBhIGZpbGVuYW1lLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorLSBJc3N1ZSAjMTAyODM6IEFkZCBhIGBgZ3JvdXBfcGF0dGVybmBgIGFyZ3VtZW50IHRvIE5OVFAubGlzdCgpLgorCistIElzc3VlICMxMDE1NTogQWRkIElJU0NHSUhhbmRsZXIgdG8gd3NnaXJlZi5oYW5kbGVycyB0byBzdXBwb3J0IElJUyBDR0kKKyAgZW52aXJvbm1lbnQgYmV0dGVyLCBhbmQgdG8gY29ycmVjdCB1bmljb2RlIGVudmlyb25tZW50IHZhbHVlcyBmb3IgV1NHSSAxLjAuMS4KKworLSBJc3N1ZSAjMTAyODE6IG5udHBsaWIgbm93IHJldHVybnMgTm9uZSBmb3IgYWJzZW50IGZpZWxkcyBpbiB0aGUgT1ZFUi9YT1ZFUgorICByZXNwb25zZSwgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbi4KKworLSB3c2dpcmVmIG5vdyBpbXBsZW1lbnRzIGFuZCB2YWxpZGF0ZXMgUEVQIDMzMzMsIHJhdGhlciB0aGFuIGFuIGV4cGVyaW1lbnRhbAorICBleHRlbnNpb24gb2YgUEVQIDMzMy4gIChOb3RlOiBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiAzLnggbWF5IGhhdmUKKyAgaW5jb3JyZWN0bHkgdmFsaWRhdGVkIHNvbWUgbm9uLWNvbXBsaWFudCBhcHBsaWNhdGlvbnMgYXMgV1NHSSBjb21wbGlhbnQ7IGlmCisgIHlvdXIgYXBwIHZhbGlkYXRlcyB3aXRoIFB5dGhvbiA8My4yYjErLCBidXQgbm90IG9uIHRoaXMgdmVyc2lvbiwgaXQgaXMgbGlrZWx5CisgIHRoZSBjYXNlIHRoYXQgeW91ciBhcHAgd2FzIG5vdCBjb21wbGlhbnQuKQorCistIElzc3VlICMxMDI4MDogTk5UUC5ubnRwX3ZlcnNpb24gc2hvdWxkIHJlZmxlY3QgdGhlIGhpZ2hlc3QgdmVyc2lvbiBhZHZlcnRpc2VkCisgIGJ5IHRoZSBzZXJ2ZXIuCisKKy0gSXNzdWUgIzEwMTg0OiBUb3VjaCBkaXJlY3RvcmllcyBvbmx5IG9uY2Ugd2hlbiBleHRyYWN0aW5nIGEgdGFyZmlsZS4KKworLSBJc3N1ZSAjMTAxOTk6IE5ldyBwYWNrYWdlLCBgYHR1cnRsZWRlbW9gYCBub3cgY29udGFpbnMgc2VsZWN0ZWQgZGVtbyBzY3JpcHRzCisgIHRoYXQgd2VyZSBmb3JtZXJseSBmb3VuZCB1bmRlciBEZW1vL3R1cnRsZS4KKworLSBJc3N1ZSAjMTAyNjU6IENsb3NlIGZpbGUgb2JqZWN0cyBleHBsaWNpdGx5IGluIHN1bmF1LiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxMDI2NjogdXUuZGVjb2RlIGRpZG4ndCBjbG9zZSBpbl9maWxlIGV4cGxpY2l0bHkgd2hlbiBpdCB3YXMgZ2l2ZW4gYXMgYQorICBmaWxlbmFtZS4gIFBhdGNoIGJ5IEJyaWFuIEJyYXppbC4KKworLSBJc3N1ZSAjMTAxMTA6IFF1ZXVlIG9iamVjdHMgZGlkbid0IHJlY29nbml6ZSBmdWxsIHF1ZXVlcyB3aGVuIHRoZSBtYXhzaXplCisgIHBhcmFtZXRlciBoYWQgYmVlbiByZWR1Y2VkLgorCistIElzc3VlICMxMDE2MDogU3BlZWQgdXAgb3BlcmF0b3IuYXR0cmdldHRlci4gIFBhdGNoIGJ5IENocmlzdG9zIEdlb3JnaW91LgorCistIGxvZ2dpbmc6IEFkZGVkIHN0eWxlIG9wdGlvbiB0byBiYXNpY0NvbmZpZygpIHRvIGFsbG93ICUsIHt9IG9yICQtZm9ybWF0dGluZy4KKworLSBJc3N1ZSAjNTcyOToganNvbi5kdW1wcygpIG5vdyBzdXBwb3J0cyB1c2luZyBhIHN0cmluZyBzdWNoIGFzICdcdCcgZm9yCisgIHByZXR0eS1wcmludGluZyBtdWx0aWxldmVsIG9iamVjdHMuCisKKy0gSXNzdWUgIzEwMjUzOiBGaWxlSU8gbGVha3MgYSBmaWxlIGRlc2NyaXB0b3Igd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUgZm9yCisgIGFwcGVuZCB0aGF0IGlzbid0IHNlZWthYmxlLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIFN1cHBvcnQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIGZvciBmaWxlLWxpa2Ugb2JqZWN0cyByZXR1cm5lZCBieSBtYWlsYm94CisgIGBgZ2V0X2ZpbGUoKWBgIG1ldGhvZHMuCiAKIC0gSXNzdWUgIzEwMjQ2OiB1dS5lbmNvZGUgZGlkbid0IGNsb3NlIGZpbGUgb2JqZWN0cyBleHBsaWNpdGx5IHdoZW4gZmlsZW5hbWVzCiAgIHdlcmUgZ2l2ZW4gdG8gaXQuICBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCiAKLS0gSXNzdWUgIzEwMjUzOiBGaWxlSU8gbGVha3MgYSBmaWxlIGRlc2NyaXB0b3Igd2hlbiB0cnlpbmcgdG8gb3BlbiBhIGZpbGUKLSAgZm9yIGFwcGVuZCB0aGF0IGlzbid0IHNlZWthYmxlLiAgUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorLSBJc3N1ZSAjMTAxOTg6IGZpeCBkdXBsaWNhdGUgaGVhZGVyIHdyaXR0ZW4gdG8gd2F2ZSBmaWxlcyB3aGVuIHdyaXRlZnJhbWVzKCkgaXMKKyAgY2FsbGVkIHdpdGhvdXQgZGF0YS4KKworLSBDbG9zZSBmaWxlIG9iamVjdHMgaW4gbW9kdWxlZmluZGVyIGluIGEgdGltZWx5IG1hbm5lci4KKworLSBDbG9zZSBhIGlvLlRleHRJT1dyYXBwZXIgb2JqZWN0IGluIGVtYWlsLnBhcnNlciBpbiBhIHRpbWVseSBtYW5uZXIuCisKKy0gQ2xvc2UgYSBmaWxlIG9iamVjdCBpbiBkaXN0dXRpbHMuc3lzY29uZmlnIGluIGEgdGltZWx5IG1hbm5lci4KKworLSBDbG9zZSBhIGZpbGUgb2JqZWN0IGluIHBrZ3V0aWwgaW4gYSB0aW1lbHkgbWFubmVyLgorCistIElzc3VlICMxMDIzMzogQ2xvc2UgZmlsZSBvYmplY3RzIGluIGEgdGltZWx5IG1hbm5lciBpbiB0aGUgdGFyZmlsZSBtb2R1bGUgYW5kCisgIGl0cyB0ZXN0IHN1aXRlLgorCistIElzc3VlICMxMDA5MzogUmVzb3VyY2VXYXJuaW5ncyBhcmUgbm93IGlzc3VlZCB3aGVuIGZpbGVzIGFuZCBzb2NrZXRzIGFyZQorICBkZWFsbG9jYXRlZCB3aXRob3V0IGV4cGxpY2l0IGNsb3NpbmcuICBUaGVzZSB3YXJuaW5ncyBhcmUgc2lsZW5jZWQgYnkgZGVmYXVsdCwKKyAgZXhjZXB0IGluIHB5ZGVidWcgbW9kZS4KKworLSB0YXJmaWxlLnB5OiBBZGQgc3VwcG9ydCBmb3IgYWxsIG1pc3NpbmcgdmFyaWFudHMgb2YgdGhlIEdOVSBzcGFyc2UgZXh0ZW5zaW9ucworICBhbmQgY3JlYXRlIGZpbGVzIHdpdGggaG9sZXMgd2hlbiBleHRyYWN0aW5nIHNwYXJzZSBtZW1iZXJzLgorCistIElzc3VlICMxMDIxODogUmV0dXJuIHRpbWVvdXQgc3RhdHVzIGZyb20gYGBDb25kaXRpb24ud2FpdGBgIGluIHRocmVhZGluZy4KKworLSBJc3N1ZSAjNzM1MTogQWRkIGBgemlwZmlsZS5CYWRaaXBGaWxlYGAgc3BlbGxpbmcgb2YgdGhlIGV4Y2VwdGlvbiBuYW1lIGFuZAorICBkZXByZWNhdGUgdGhlIG9sZCBuYW1lIGBgemlwZmlsZS5CYWRaaXBmaWxlYGAuCiAKIC0gSXNzdWUgIzUwMjc6IFRoZSBzdGFuZGFyZCBgYHhtbGBgIG5hbWVzcGFjZSBpcyBub3cgdW5kZXJzdG9vZCBieQogICB4bWwuc2F4LnNheHV0aWxzLlhNTEdlbmVyYXRvciBhcyBiZWluZyBib3VuZCB0bwogICBodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UuICBQYXRjaCBieSBUcm95IEouIEZhcnJlbGwuCiAKKy0gSXNzdWUgIzU5NzU6IEFkZCBjc3YudW5peF9kaWFsZWN0IGNsYXNzLgorCiAtIElzc3VlICM3NzYxOiB0ZWxuZXRsaWIuaW50ZXJhY3QgZmFpbHVyZXMgb24gV2luZG93cyBmaXhlZC4KIAotLSBJc3N1ZSAjNTExNzogQ2FzZSBub3JtYWxpemF0aW9uIHdhcyBuZWVkZWQgb24gbnRwYXRoLnJlbHBhdGgoKS4gQW5kCi0gIGZpeGVkIHJvb3QgZGlyZWN0b3J5IGlzc3VlIG9uIHBvc2l4cGF0aC5yZWxwYXRoKCkuIChQb3J0ZWQgd29ya2luZyBmaXhlcwotICBmcm9tIG50cGF0aCkKKy0gbG9nZ2luZzogQWRkZWQgc3R5bGUgb3B0aW9uIHRvIEZvcm1hdHRlciB0byBhbGxvdyAlLCB7fSBvciAkLWZvcm1hdHRpbmcuCiAKLS0gSXNzdWUgIzEwMDQxOiBUaGUgc2lnbmF0dXJlIG9mIG9wdGlvbmFsIGFyZ3VtZW50cyBpbiBzb2NrZXQubWFrZWZpbGUoKQotICBkaWRuJ3QgbWF0Y2ggdGhhdCBvZiBpby5vcGVuKCksIGFuZCB0aGV5IGFsc28gZGlkbid0IGdldCBmb3J3YXJkZWQKLSAgcHJvcGVybHkgdG8gVGV4dElPV3JhcHBlciBpbiB0ZXh0IG1vZGUuICBQYXRjaCBieSBLYWkgWmh1LgorLSBJc3N1ZSAjNTE3ODogQWRkZWQgdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5IGNsYXNzIHRoYXQgY2FuIGJlIHVzZWQgYXMgYQorICBjb250ZXh0IG1hbmFnZXIuCisKKy0gSXNzdWUgIzEzNDkxMDY6IEdlbmVyYXRvciAoYW5kIEJ5dGVzR2VuZXJhdG9yKSBmbGF0dGVuIG1ldGhvZCBhbmQgSGVhZGVyCisgIGVuY29kZSBtZXRob2Qgbm93IHN1cHBvcnQgYSAnbGluZXNlcCcgYXJndW1lbnQuCisKKy0gSXNzdWUgIzU2Mzk6IEFkZCBhICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IHRvIGBgU1NMQ29udGV4dC53cmFwX3NvY2tldGBgIGluCisgIG9yZGVyIHRvIHN1cHBvcnQgdGhlIFRMUyBTTkkgZXh0ZW5zaW9uLiAgYGBIVFRQU0Nvbm5lY3Rpb25gYCBhbmQgYGB1cmxvcGVuKClgYAorICBhbHNvIHVzZSB0aGlzIGFyZ3VtZW50LCBzbyB0aGF0IEhUVFBTIHZpcnR1YWwgaG9zdHMgYXJlIG5vdyBzdXBwb3J0ZWQuCisKKy0gSXNzdWUgIzEwMTY2OiBBdm9pZCByZWN1cnNpb24gaW4gcHN0YXRzIFN0YXRzLmFkZCgpIGZvciBtYW55IHN0YXRzIGl0ZW1zLgorCistIElzc3VlICMxMDE2MzogU2tpcCB1bnJlYWRhYmxlIHJlZ2lzdHJ5IGtleXMgZHVyaW5nIG1pbWV0eXBlcyBpbml0aWFsaXphdGlvbi4KKworLSBsb2dnaW5nOiBNYWRlIFN0cmVhbUhhbmRsZXIgdGVybWluYXRvciBjb25maWd1cmFibGUuCisKKy0gbG9nZ2luZzogQWxsb3dlZCBmaWx0ZXJzIHRvIGJlIGp1c3QgY2FsbGFibGVzLgorCistIGxvZ2dpbmc6IEFkZGVkIHRlc3RzIGZvciBfbG9nUmVjb3JkQ2xhc3MgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTAwOTI6IFByb3Blcmx5IHJlc2V0IGxvY2FsZSBpbiBjYWxlbmRhci5Mb2NhbGUqQ2FsZW5kYXIgY2xhc3Nlcy4KKworLSBsb2dnaW5nOiBBZGRlZCBfbG9nUmVjb3JkQ2xhc3MsIGdldExvZ1JlY29yZENsYXNzLCBzZXRMb2dSZWNvcmRDbGFzcyB0bworICBpbmNyZWFzZSBmbGV4aWJpbGl0eSBvZiBMb2dSZWNvcmQgY3JlYXRpb24uCisKKy0gSXNzdWUgIzUxMTc6IENhc2Ugbm9ybWFsaXphdGlvbiB3YXMgbmVlZGVkIG9uIG50cGF0aC5yZWxwYXRoKCkuICBBbHNvIGZpeGVkCisgIHJvb3QgZGlyZWN0b3J5IGlzc3VlIG9uIHBvc2l4cGF0aC5yZWxwYXRoKCkuICAoUG9ydGVkIHdvcmtpbmcgZml4ZXMgZnJvbQorICBudHBhdGguKQorCistIElzc3VlICMxMzQzOiB4bWwuc2F4LnNheHV0aWxzLlhNTEdlbmVyYXRvciBub3cgaGFzIGFuIG9wdGlvbgorICBzaG9ydF9lbXB0eV9lbGVtZW50cyB0byBkaXJlY3QgaXQgdG8gdXNlIHNlbGYtY2xvc2luZyB0YWdzIHdoZW4gYXBwcm9wcmlhdGUuCisKKy0gSXNzdWUgIzk4MDcgKHBhcnQgMSk6IEV4cG9zZSB0aGUgQUJJIGZsYWdzIGluIHN5cy5hYmlmbGFncy4gIEFkZCAtLWFiaWZsYWdzCisgIHN3aXRjaCB0byBweXRob24tY29uZmlnIGZvciBjb21tYW5kIGxpbmUgYWNjZXNzLgorCistIElzc3VlICM2MDk4OiBEb24ndCBjbGFpbSBET00gbGV2ZWwgMyBjb25mb3JtYW5jZSBpbiBtaW5pZG9tLgorCistIElzc3VlICM1NzYyOiBGaXggQXR0cmlidXRlRXJyb3IgcmFpc2VkIGJ5IGBgeG1sLmRvbS5taW5pZG9tYGAgd2hlbiBhbiBlbXB0eQorICBYTUwgbmFtZXNwYWNlIGF0dHJpYnV0ZSBpcyBlbmNvdW50ZXJlZC4KKworLSBJc3N1ZSAjMjgzMDogQWRkIHRoZSBgYGh0bWwuZXNjYXBlKClgYCBmdW5jdGlvbiwgd2hpY2ggcXVvdGVzIGFsbCBwcm9ibGVtYXRpYworICBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQuICBEZXByZWNhdGUgYGBjZ2kuZXNjYXBlKClgYC4KKworLSBJc3N1ZSAjOTQwOTogRml4IHRoZSByZWdleCB0byBtYXRjaCBhbGwga2luZCBvZiBmaWxlbmFtZXMsIGZvciBpbnRlcmFjdGl2ZQorICBkZWJ1Z2dpbmcgaW4gZG9jdGVzdHMuCisKKy0gSXNzdWUgIzkxODM6IGBgZGF0ZXRpbWUudGltZXpvbmUoZGF0ZXRpbWUudGltZWRlbHRhKDApKWBgIHdpbGwgbm93IHJldHVybiB0aGUKKyAgc2FtZSBpbnN0YW5jZSBhcyBgYGRhdGV0aW1lLnRpbWV6b25lLnV0Y2BgLgorCistIElzc3VlICM3NTIzOiBBZGQgU09DS19DTE9FWEVDIGFuZCBTT0NLX05PTkJMT0NLIHRvIHRoZSBzb2NrZXQgbW9kdWxlLCB3aGVyZQorICBzdXBwb3J0ZWQgYnkgdGhlIHN5c3RlbS4gIFBhdGNoIGJ5IE5pa2l0YSBWZXRvc2hraW4uCisKKy0gSXNzdWUgIzEwMDYzOiBmaWxlOi8vIHNjaGVtZSB3aWxsIHN0b3AgYWNjZXNzaW5nIHJlbW90ZSBob3N0cyB2aWEgZnRwCisgIHByb3RvY29sLiBmaWxlOi8vIHVybHMgaGFkIGZhbGxiYWNrIHRvIGFjY2VzcyByZW1vdGUgaG9zdHMgdmlhIGZ0cC4gVGhpcyB3YXMKKyAgbm90IGNvcnJlY3QsIGNoYW5nZSBpcyBtYWRlIHRvIHJhaXNlIGEgVVJMRXJyb3Igd2hlbiBhIHJlbW90ZSBob3N0IGlzIHRyaWVkIHRvCisgIGFjY2VzcyB2aWEgZmlsZTovLyBzY2hlbWUuCisKKy0gSXNzdWUgIzE3MTA3MDM6IFdyaXRlIHN0cnVjdHVyZXMgZm9yIGFuIGVtcHR5IFpJUCBhcmNoaXZlIHdoZW4gYSBaaXBGaWxlIGlzCisgIGNyZWF0ZWQgaW4gbW9kZXMgJ2EnIG9yICd3JyBhbmQgdGhlbiBjbG9zZWQgd2l0aG91dCBhZGRpbmcgYW55IGZpbGVzLiBSYWlzZQorICBCYWRaaXBmaWxlIChyYXRoZXIgdGhhbiBJT0Vycm9yKSB3aGVuIG9wZW5pbmcgc21hbGwgbm9uLVpJUCBmaWxlcy4KKworLSBJc3N1ZSAjMTAwNDE6IFRoZSBzaWduYXR1cmUgb2Ygb3B0aW9uYWwgYXJndW1lbnRzIGluIHNvY2tldC5tYWtlZmlsZSgpIGRpZG4ndAorICBtYXRjaCB0aGF0IG9mIGlvLm9wZW4oKSwgYW5kIHRoZXkgYWxzbyBkaWRuJ3QgZ2V0IGZvcndhcmRlZCBwcm9wZXJseSB0bworICBUZXh0SU9XcmFwcGVyIGluIHRleHQgbW9kZS4gIFBhdGNoIGJ5IEthaSBaaHUuCisKKy0gSXNzdWUgIzkwMDM6IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbiwgdXJsbGliLnJlcXVlc3QuSFRUUFNIYW5kbGVyIGFuZAorICB1cmxsaWIucmVxdWVzdC51cmxvcGVuIG5vdyB0YWtlIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBhbGxvdyBmb3Igc2VydmVyCisgIGNlcnRpZmljYXRlIGNoZWNraW5nLCBhcyByZWNvbW1lbmRlZCBpbiBwdWJsaWMgdXNlcyBvZiBIVFRQUy4KIAogLSBJc3N1ZSAjNjYxMjogRml4IHNpdGUgYW5kIHN5c2NvbmZpZyB0byBjYXRjaCBvcy5nZXRjd2QoKSBlcnJvciwgZWcuIGlmIHRoZQogICBjdXJyZW50IGRpcmVjdG9yeSB3YXMgZGVsZXRlZC4gUGF0Y2ggd3JpdHRlbiBieSBXLiBUcmV2b3IgS2luZy4KIAorLSBJc3N1ZSAjMzg3MzogU3BlZWQgdXAgdW5waWNrbGluZyBmcm9tIGZpbGUgb2JqZWN0cyB0aGF0IGhhdmUgYSBwZWVrKCkgbWV0aG9kLgorCistIElzc3VlICMxMDA3NTogQWRkIGEgc2Vzc2lvbl9zdGF0cygpIG1ldGhvZCB0byBTU0xDb250ZXh0IG9iamVjdHMuCisKKy0gSXNzdWUgIzk5NDg6IEZpeGVkIHByb2JsZW0gb2YgbG9zaW5nIGZpbGVuYW1lIGNhc2UgaW5mb3JtYXRpb24uCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICM1MTA5OiBhcnJheS5hcnJheSBjb25zdHJ1Y3RvciB3aWxsIG5vdyB1c2UgZmFzdCBjb2RlIHdoZW4KKyAgaW5pdGlhbCBkYXRhIGlzIHByb3ZpZGVkIGluIGFuIGFycmF5IG9iamVjdCB3aXRoIGNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjNjMxNzogTm93IHdpbnNvdW5kLlBsYXlTb3VuZCBvbmx5IGFjY2VwdHMgdW5pY29kZS4KKworLSBJc3N1ZSAjNjMxNzogTm93IHdpbnNvdW5kLlBsYXlTb3VuZCBjYW4gYWNjZXB0IG5vbiBhc2NpaSBmaWxlbmFtZS4KKworLSBJc3N1ZSAjOTM3NzogVXNlIFVuaWNvZGUgQVBJIGZvciBnZXRob3N0bmFtZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMDE0MzogVXBkYXRlICJvcy5wYXRoY29uZiIgdmFsdWVzLgorCistIElzc3VlICM2NTE4OiBTdXBwb3J0IGNvbnRleHQgbWFuYWdlciBwcm90Y29sIGZvciBvc3NhdWRpb2RldiB0eXBlcy4KKworLSBJc3N1ZSAjNjc4MjUwOiBNYWtlIG1tYXAgZmx1c2ggYSBub29wIG9uIEFDQ0VTU19SRUFEIGFuZCBBQ0NFU1NfQ09QWS4KKworLSBJc3N1ZSAjOTA1NDogRml4IGEgY3Jhc2ggb2NjdXJyaW5nIHdoZW4gdXNpbmcgdGhlIHB5ZXhwYXQgbW9kdWxlIHdpdGggZXhwYXQKKyAgdmVyc2lvbiAyLjAuMS4KKworLSBJc3N1ZSAjNTM1NTogUHJvdmlkZSBtYXBwaW5ncyBmcm9tIEV4cGF0IGVycm9yIG51bWJlcnMgdG8gc3RyaW5nIGRlc2NyaXB0aW9ucworICBhbmQgYmFja3dhcmRzLCBpbiBvcmRlciB0byBhY3R1YWxseSBtYWtlIGl0IHBvc3NpYmxlIHRvIGFuYWx5emUgZXJyb3IgY29kZXMKKyAgcHJvdmlkZWQgYnkgRXhwYXRFcnJvci4KKworLSBUaGUgVW5pY29kZSBkYXRhYmFzZSB3YXMgdXBkYXRlZCB0byA2LjAuMC4KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEwMjg4OiBUaGUgZGVwcmVjYXRlZCBmYW1pbHkgb2YgImNoYXIiLWhhbmRsaW5nIG1hY3JvcworICAoSVNMT1dFUigpL0lTVVBQRVIoKS9ldGMpIGhhdmUgbm93IGJlZW4gcmVtb3ZlZDogdXNlIFB5X0lTTE9XRVIoKSBldGMgaW5zdGVhZC4KKworLSBJc3N1ZSAjOTc3ODogSGFzaCB2YWx1ZXMgYXJlIG5vdyBhbHdheXMgdGhlIHNpemUgb2YgcG9pbnRlcnMuIEEgbmV3IFB5X2hhc2hfdAorICB0eXBlIGhhcyBiZWVuIGludHJvZHVjZWQuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxMDExNzogVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSBub3cgYWNjZXB0cyBzb3VyY2UgZmlsZXMgdGhhdCB1c2UKKyAgZW5jb2Rpbmcgb3RoZXIgdGhhbiBBU0NJSSBvciBVVEYtOC4gIFNvdXJjZSBlbmNvZGluZyBpcyBwcmVzZXJ2ZWQgd2hlbgorICByZWluZGVudGVkIGNvZGUgaXMgd3JpdHRlbiB0byBhIGZpbGUuCisKKy0gSXNzdWUgIzcyODc6IERlbW8vaW1wdXRpbC9rbmVlLnB5IHdhcyByZW1vdmVkLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMzY5OTogRml4IHRlc3RfYmlnYWRkcnNwYWNlIGFuZCBleHRlbmQgaXQgdG8gdGVzdCBieXRlc3RyaW5ncyBhcyB3ZWxsCisgIGFzIHVuaWNvZGUgc3RyaW5ncy4gIEluaXRpYWwgcGF0Y2ggYnkgU2FuZHJvIFRvc2kuCisKKy0gSXNzdWUgIzEwMjk0OiBSZW1vdmUgZGVhZCBjb2RlIGZvcm0gdGVzdF91bmljb2RlX2ZpbGUuCisKKy0gSXNzdWUgIzEwMTIzOiBEb24ndCB1c2Ugbm9uLWFzY2lpIGZpbGVuYW1lcyBpbiB0ZXN0X2RvY3Rlc3QgdGVzdHMuIEFkZCBhIG5ldworICB0ZXN0IHNwZWNpZmljIHRvIHVuaWNvZGUgKG5vbi1hc2NpaSBuYW1lIGFuZCBmaWxlbmFtZSkuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMDI2ODogQWRkIGEgLS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMgb3B0aW9uIHRvIGNvbmZpZ3VyZS4KKworLSBJc3N1ZSAjODg1MjogQWxsb3cgdGhlIHNvY2tldCBtb2R1bGUgdG8gYnVpbGQgb24gT3BlblNvbGFyaXMuCisKKy0gRHJvcCAtT1BUOk9saW1pdCBjb21waWxlciBvcHRpb24uCisKKy0gSXNzdWUgIzEwMDk0OiBVc2UgdmVyc2lvbmVkIC5zbyBmaWxlcyBvbiBHTlUva2ZyZWVCU0QgYW5kIHRoZSBHTlUgSHVyZC4KKworLSBBY2NlcHQgT3JhY2xlIEJlcmtlbGV5IERCIDUuMCBhbmQgNS4xIGFzIGJhY2tlbmQgZm9yIHRoZSBkYm0gZXh0ZW5zaW9uLgorCistIElzc3VlICM3NDczOiBhdm9pZCBsaW5rIGVycm9ycyB3aGVuIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggYSBkaWZmZXJlbnQgc2V0CisgIG9mIGFyY2hpdGVjdHVyZXMgdGhhbiB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjIgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1PY3QtMjAxMCoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEwMDY4OiBHbG9iYWwgb2JqZWN0cyB3aGljaCBoYXZlIHJlZmVyZW5jZSBjeWNsZXMgd2l0aCB0aGVpciBtb2R1bGUncworICBkaWN0IGFyZSBub3cgY2xlYXJlZCBhZ2Fpbi4gVGhpcyBjYXVzZXMgaXNzdWUgIzcxNDAgdG8gYXBwZWFyIGFnYWluLgorCistIElzc3VlICM5NzM4OiBEb2N1bWVudCBQeUVycl9TZXRTdHJpbmcoKSBhbmQgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKCkKKyAgZW5jb2RpbmdzLgorCistIGFzdC5saXRlcmFsX2V2YWwoKSBjYW4gbm93IGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzLiAgSXQgaXMgYWxzbyBhIGxpdHRsZSBtb3JlCisgIGxpYmVyYWwgaW4gd2hhdCBpdCBhY2NlcHRzIHdpdGhvdXQgY29tcHJvbWlzaW5nIHRoZSBzYWZldHkgb2YgdGhlIGV2YWx1YXRpb24uCisgIEZvciBleGFtcGxlLCAzais0IGFuZCAzKzQrNSBhcmUgYm90aCBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMTAwMDY6IHR5cGUuX19hYnN0cmFjdG1ldGhvZHNfXyBub3cgcmFpc2VzIGFuIEF0dHJpYnV0ZUVycm9yLiAgQXMgYQorICByZXN1bHQgbWV0YWNsYXNzZXMgY2FuIG5vdyBiZSBBQkNzIChzZWUgIzk1MzMpLgorCistIElzc3VlICM4NjcwOiBjdHlwZXMuY193Y2hhciBzdXBwb3J0cyBub24tQk1QIGNoYXJhY3RlcnMgd2l0aCAzMiBiaXRzIHdjaGFyX3QuCisKKy0gSXNzdWUgIzg2NzA6IFB5VW5pY29kZV9Bc1dpZGVDaGFyKCkgYW5kIFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKCkgcmVwbGFjZQorICBVVEYtMTYgc3Vycm9nYXRlIHBhaXJzIGJ5IHNpbmdsZSBub24tQk1QIGNoYXJhY3RlcnMgZm9yIDE2IGJpdHMgUHlfVU5JQ09ERSBhbmQKKyAgMzIgYml0cyB3Y2hhcl90IChlZy4gTGludXggaW4gbmFycm93IGJ1aWxkKS4KKworLSBJc3N1ZSAjMTAwMDM6IEFsbG93IGhhbmRsaW5nIG9mIFNJR0JSRUFLIG9uIFdpbmRvd3MuIEZpeGVzIGEgcmVncmVzc2lvbgorICBpbnRyb2R1Y2VkIGJ5IGlzc3VlICM5MzI0LgorCistIElzc3VlICM5OTc5OiBDcmVhdGUgZnVuY3Rpb24gUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcoKS4KKworLSBJc3N1ZSAjNzM5NzogTWVudGlvbiB0aGF0IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkgaXMgcHJvYmFibHkgd2hhdCBzb21lb25lCisgIHJlYWxseSB3YW50cyB0byBiZSB1c2luZyBpbiBfX2ltcG9ydF9fJ3MgZG9jc3RyaW5nLgorCistIElzc3VlICM4NTIxOiBBbGxvdyBDcmVhdGVLZXlFeCwgT3BlbktleUV4LCBhbmQgRGVsZXRlS2V5RXggZnVuY3Rpb25zIG9mIHdpbnJlZworICB0byB1c2UgbmFtZWQgYXJndW1lbnRzLgorCistIElzc3VlICM5OTMwOiBSZW1vdmUgYm9ndXMgc3VidHlwZSBjaGVjayB0aGF0IHdhcyBjYXVzaW5nIChlLmcuKQorICBmbG9hdC5fX3JkaXZfXygyLjAsIDMpIHRvIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpbnN0ZWFkIG9mIHRoZSBleHBlY3RlZCAxLjUuCisKKy0gSXNzdWUgIzk4MDg6IEltcGxlbWVudCBvcy5nZXRsb2dpbiBmb3IgV2luZG93cy4gUGF0Y2ggYnkgSm9uIEFuZ2xpbi4KKworLSBJc3N1ZSAjOTkwMTogRGVzdHJveWluZyB0aGUgR0lMIGluIFB5X0ZpbmFsaXplKCkgY2FuIGZhaWwgaWYgc29tZSBvdGhlcgorICB0aHJlYWRzIGFyZSBzdGlsbCBydW5uaW5nLiAgSW5zdGVhZCwgcmVpbml0aWFsaXplIHRoZSBHSUwgb24gYSBzZWNvbmQgY2FsbCB0bworICBQeV9Jbml0aWFsaXplKCkuCisKKy0gQWxsIFN5bnRheEVycm9ycyBub3cgaGF2ZSBhIGNvbHVtbiBvZmZzZXQgYW5kIHRoZXJlZm9yZSBhIGNhcmV0IHdoZW4gdGhlIGVycm9yCisgIGlzIHByaW50ZWQuCisKKy0gSXNzdWUgIzkyNTI6IFB5SW1wb3J0X0ltcG9ydCBubyBsb25nZXIgdXNlcyBhIGZyb21saXN0IGhhY2sgdG8gcmV0dXJuIHRoZQorICBtb2R1bGUgdGhhdCB3YXMgaW1wb3J0ZWQsIGJ1dCBpbnN0ZWFkIGdldHMgdGhlIG1vZHVsZSBmcm9tIHN5cy5tb2R1bGVzLgorCistIElzc3VlICM5MjEzOiBUaGUgcmFuZ2UgdHlwZV9pdGVtcyBub3cgcHJvdmlkZXMgaW5kZXgoKSBhbmQgY291bnQoKSBtZXRob2RzLCB0bworICBjb25mb3JtIHRvIHRoZSBTZXF1ZW5jZSBBQkMuICBQYXRjaCBieSBEYW5pZWwgVXJiYW4gYW5kIERhbmllbCBTdHV0emJhY2guCisKKy0gSXNzdWUgIzc5OTQ6IElzc3VlIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyBpZiBvYmplY3QuX19mb3JtYXRfXyBpcyBjYWxsZWQKKyAgd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nLiAgVGhpcyBpcyBhbiBlZmZvcnQgdG8gZnV0dXJlLXByb29mIHVzZXIKKyAgY29kZS4gSWYgYSBkZXJpdmVkIGNsYXNzIGRvZXMgbm90IGN1cnJlbnRseSBpbXBsZW1lbnQgX19mb3JtYXRfXyBidXQgbGF0ZXIKKyAgYWRkcyBpdHMgb3duIF9fZm9ybWF0X18sIGl0IHdvdWxkIG1vc3QgbGlrZWx5IGJyZWFrIHVzZXIgY29kZSB0aGF0IGhhZAorICBzdXBwbGllZCBhIGZvcm1hdCBzdHJpbmcuICBUaGlzIHdpbGwgYmUgY2hhbmdlZCB0byBhIERlcHJlY2F0aW9uV2FyaW5nIGluCisgIFB5dGhvbiAzLjMgYW5kIGl0IHdpbGwgYmUgYW4gZXJyb3IgaW4gUHl0aG9uIDMuNC4KKworLSBJc3N1ZSAjOTgyODogRGVzdHJveSB0aGUgR0lMIGluIFB5X0ZpbmFsaXplKCksIHNvIHRoYXQgaXQgZ2V0cyBwcm9wZXJseQorICByZS1jcmVhdGVkIG9uIGEgc3Vic2VxdWVudCBjYWxsIHRvIFB5X0luaXRpYWxpemUoKS4gIFRoZSBwcm9ibGVtIChhIGNyYXNoKQorICB3b3VsZG4ndCBhcHBlYXIgaW4gMy4xIG9yIDIuNyB3aGVyZSB0aGUgR0lMJ3Mgc3RydWN0dXJlIGlzIG1vcmUgdHJpdmlhbC4KKworLSBJc3N1ZSAjOTIxMDogQ29uZmlndXJlIG9wdGlvbiAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucyB3YXMgcmVtb3ZlZC4gIFVzaW5nIHRoZQorICBmdW5jdGlvbnMgZnJvbSB0aGUgbGliYyBjYXVzZWQgdGhlIG1ldGhvZHMgLnVwcGVyKCkgYW5kIGxvd2VyKCkgdG8gYmVjb21lCisgIGxvY2FsZSBhd2FyZSBhbmQgY3JlYXRlZCBzdWJ0bHkgd3JvbmcgcmVzdWx0cy4KKworLSBJc3N1ZSAjOTczODogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlFcnJfRm9ybWF0KCkgcmFpc2UgYW4gZXJyb3Igb24gYQorICBub24tQVNDSUkgYnl0ZSBpbiB0aGUgZm9ybWF0IHN0cmluZy4KKworLSBJc3N1ZSAjNDYxNzogUHJldmlvdXNseSBpdCB3YXMgaWxsZWdhbCB0byBkZWxldGUgYSBuYW1lIGZyb20gdGhlIGxvY2FsCisgIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkIGJsb2NrLiAgVGhpcyBsaW1pdGF0aW9uCisgIG9mIHRoZSBjb21waWxlciBoYXMgYmVlbiBsaWZ0ZWQsIGFuZCBhIG5ldyBvcGNvZGUgaW50cm9kdWNlZCAoREVMRVRFX0RFUkVGKS4KKworLSBJc3N1ZSAjOTgwNDogYXNjaWkoKSBub3cgYWx3YXlzIHJlcHJlc2VudHMgdW5pY29kZSBzdXJyb2dhdGUgcGFpcnMgYXMgYSBzaW5nbGUKKyAgYGBcVVhYWFhYWFhYYGAsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY2hhcmFjdGVyIGlzIHByaW50YWJsZSBvciBub3QuCisgIEFsc28sIHRoZSAiYmFja3NsYXNocmVwbGFjZSIgZXJyb3IgaGFuZGxlciBub3cgam9pbnMgc3Vycm9nYXRlIHBhaXJzIGludG8gYQorICBzaW5nbGUgY2hhcmFjdGVyIG9uIFVDUy0yIGJ1aWxkcy4KKworLSBJc3N1ZSAjOTc1NzogbWVtb3J5dmlldyBvYmplY3RzIGdldCBhIHJlbGVhc2UoKSBtZXRob2QgdG8gcmVsZWFzZSB0aGUKKyAgdW5kZXJseWluZyBidWZmZXIgKHByZXZpb3VzbHkgdGhpcyB3YXMgb25seSBkb25lIHdoZW4gZGVhbGxvY2F0aW5nIHRoZQorICBtZW1vcnl2aWV3KSwgYW5kIGdhaW4gc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KKworLSBJc3N1ZSAjOTc5NzogcHlzdGF0ZS5jIHdyb25nbHkgYXNzdW1lZCB0aGF0IHplcm8gY291bGRuJ3QgYmUgYSB2YWxpZAorICB0aHJlYWQtbG9jYWwgc3RvcmFnZSBrZXkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjIzNjogZGlzdHV0aWxzJyBta3BhdGggaWdub3JlZCB0aGUgbW9kZSBwYXJhbWV0ZXIuCisKKy0gRml4IHR5cG8gaW4gb25lIHNkaXN0IG9wdGlvbiAobWVkYXRhLWNoZWNrKS4KKworLSBJc3N1ZSAjOTE5OTogRml4IGluY29ycmVjdCB1c2Ugb2YgZGlzdHV0aWxzLmNtZC5Db21tYW5kLmFubm91bmNlLgorCistIElzc3VlICMxNzE4NTc0OiBGaXggb3B0aW9ucyB0aGF0IHdlcmUgc3VwcG9zZWQgdG8gYWNjZXB0IGFyZ3VtZW50cyBidXQgZGlkCisgIG5vdCBpbiBidWlsZF9jbGliLgorCistIElzc3VlICM5NDM3OiBGaXggYnVpbGRpbmcgQyBleHRlbnNpb25zIHdpdGggbm9uLWRlZmF1bHQgTERGTEFHUy4KKworLSBJc3N1ZSAjNDY2MTogZW1haWwgY2FuIG5vdyBwYXJzZSBieXRlcyBpbnB1dCBhbmQgZ2VuZXJhdGUgZWl0aGVyIGNvbnZlcnRlZAorICA3Yml0IG91dHB1dCBvciBieXRlcyBvdXRwdXQuICBFbWFpbCB2ZXJzaW9uIGJ1bXBlZCB0byA1LjEuMC4KKworLSBJc3N1ZSAjMTU4OTogQWRkIHNzbC5tYXRjaF9ob3N0bmFtZSgpLCB0byBoZWxwIGltcGxlbWVudCBzZXJ2ZXIgaWRlbnRpdHkKKyAgdmVyaWZpY2F0aW9uIGZvciBoaWdoZXItbGV2ZWwgcHJvdG9jb2xzLgorCiAtIElzc3VlICM5NzU5OiBHemlwRmlsZSBub3cgcmFpc2VzIFZhbHVlRXJyb3Igd2hlbiBhbiBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkCiAgIGFmdGVyIHRoZSBmaWxlIGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEplZmZyZXkgRmlua2Vsc3RlaW4uCiAKIC0gSXNzdWUgIzkwNDI6IEZpeCBpbnRlcmFjdGlvbiBvZiBjdXN0b20gdHJhbnNsYXRpb24gY2xhc3NlcyBhbmQgY2FjaGluZyBpbgogICBnZXR0ZXh0LgogCistIElzc3VlICM2NzA2OiBhc3luY29yZS5kaXNwYXRjaGVyIG5vdyBwcm92aWRlcyBhIGhhbmRsZV9hY2NlcHRlZCgpIG1ldGhvZAorICByZXR1cm5pbmcgYSAoc29jaywgYWRkcikgcGFpciB3aGljaCBpcyBjYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaGFzIGJlZW4KKyAgZXN0YWJsaXNoZWQgd2l0aCBhIG5ldyByZW1vdGUgZW5kcG9pbnQuICBUaGlzIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgYXMgYQorICByZXBsYWNlbWVudCBmb3Igb2xkIGhhbmRsZV9hY2NlcHQoKSBhbmQgYXZvaWRzIHRoZSB1c2VyIHRvIGNhbGwgYWNjZXB0KCkKKyAgZGlyZWN0bHkuCisKIC0gSXNzdWUgIzkwNjU6IHRhcmZpbGUgbm8gbG9uZ2VyIHVzZXMgInJvb3QiIGFzIHRoZSBkZWZhdWx0IGZvciB0aGUgdW5hbWUgYW5kCiAgIGduYW1lIGZpZWxkLgogCi0tIElzc3VlICM4OTgwOiBGaXhlZCBhIGZhaWx1cmUgaW4gZGlzdHV0aWxzLmNvbW1hbmQgY2hlY2sgdGhhdCB3YXMgc2hhZG93ZWQKLSAgYnkgYW4gZW52aXJvbm1lbnQgdGhhdCBkb2VzIG5vdCBoYXZlIGRvY3V0aWxzLiBQYXRjaCBieSBBcmZyZXZlci4KKy0gSXNzdWUgIzg5ODA6IEZpeGVkIGEgZmFpbHVyZSBpbiBkaXN0dXRpbHMuY29tbWFuZCBjaGVjayB0aGF0IHdhcyBzaGFkb3dlZCBieQorICBhbiBlbnZpcm9ubWVudCB0aGF0IGRvZXMgbm90IGhhdmUgZG9jdXRpbHMuICBQYXRjaCBieSBBcmZyZXZlci4KIAogLSBJc3N1ZSAjMTA1MDI2ODogcGFyc2VhZGRyIG5vdyBjb3JyZWN0bHkgcXVvdGVzIGRvdWJsZSBxdW90ZSBhbmQgYmFja3NsYXNoCiAgIGNoYXJhY3RlcnMgdGhhdCBhcHBlYXIgaW5zaWRlIHF1b3RlZCBzdHJpbmdzIGluIGVtYWlsIGFkZHJlc3Nlcy4KIAotLSBJc3N1ZSAjMTAwMDQ6IHF1b3ByaW1pbWUgbm8gbG9uZ2VyIGdlbmVyYXRlcyBhIHRyYWNlYmFjayB3aGVuIGNvbmZyb250ZWQKLSAgd2l0aCBpbnZhbGlkIGNoYXJhY3RlcnMgYWZ0ZXIgJz0nIGluIGEgUS1lbmNvZGVkIHdvcmQuCistIElzc3VlICMxMDAwNDogcXVvcHJpbWltZSBubyBsb25nZXIgZ2VuZXJhdGVzIGEgdHJhY2ViYWNrIHdoZW4gY29uZnJvbnRlZCB3aXRoCisgIGludmFsaWQgY2hhcmFjdGVycyBhZnRlciAnPScgaW4gYSBRLWVuY29kZWQgd29yZC4KKworLSBJc3N1ZSAjMTQ5MTogQmFzZUhUVFBTZXJ2ZXIgbm93cyBzZW5kIGEgYGAxMDAgQ29udGludWVgYCByZXNwb25zZSBiZWZvcmUKKyAgc2VuZGluZyBhIDIwMCBPSyBmb3IgdGhlIEV4cGVjdDogMTAwLWNvbnRpbnVlIHJlcXVlc3QgaGVhZGVyLgorCistIElzc3VlICM5MzYwOiBDbGVhbnVwIGFuZCBpbXByb3ZlbWVudHMgdG8gdGhlIG5udHBsaWIgbW9kdWxlLiAgVGhlIEFQSSBub3cKKyAgY29uZm9ybXMgdG8gdGhlIHBoaWxvc29waHkgb2YgYnl0ZXMgYW5kIHVuaWNvZGUgc2VwYXJhdGlvbiBpbiBQeXRob24gMy4gIEEKKyAgdGVzdCBzdWl0ZSBoYXMgYWxzbyBiZWVuIGFkZGVkLgorCistIElzc3VlICM5OTYyOiBHemlwRmlsZSBub3cgaGFzIHRoZSBwZWVrKCkgbWV0aG9kLgorCistIElzc3VlICM5MDkwOiBXaGVuIGEgc29ja2V0IHdpdGggYSB0aW1lb3V0IGZhaWxzIHdpdGggRVdPVUxEQkxPQ0sgb3IgRUFHQUlOLAorICByZXRyeSB0aGUgc2VsZWN0KCkgbG9vcCBpbnN0ZWFkIG9mIGJhaWxpbmcgb3V0LiAgVGhpcyBpcyBiZWNhdXNlIHNlbGVjdCgpIGNhbgorICBpbmNvcnJlY3RseSByZXBvcnQgYSBzb2NrZXQgYXMgcmVhZHkgZm9yIHJlYWRpbmcgKGZvciBleGFtcGxlLCBpZiBpdCByZWNlaXZlZAorICBzb21lIGRhdGEgd2l0aCBhbiBpbnZhbGlkIGNoZWNrc3VtKS4KKworLSBJc3N1ZSAjMzYxMjogQWRkZWQgbmV3IHR5cGVzIHRvIGN0eXBlcy53aW50eXBlcy4gKENIQVIgYW5kIHBvaW50ZXJzKQogCiAtIElzc3VlICM5OTUwOiBGaXggc29ja2V0LnNlbmRhbGwoKSBjcmFzaCBvciBtaXNiZWhhdmlvdXIgd2hlbiBhIHNpZ25hbCBpcwotICByZWNlaXZlZC4gIE5vdyBzZW5kYWxsKCkgcHJvcGVybHkgY2FsbHMgc2lnbmFsIGhhbmRsZXJzIGlmIG5lY2Vzc2FyeSwKLSAgYW5kIHJldHJpZXMgc2VuZGluZyBpZiB0aGVzZSByZXR1cm5lZCBzdWNjZXNzZnVsbHksIGluY2x1ZGluZyBvbiBzb2NrZXRzCi0gIHdpdGggYSB0aW1lb3V0LgorICByZWNlaXZlZC4gIE5vdyBzZW5kYWxsKCkgcHJvcGVybHkgY2FsbHMgc2lnbmFsIGhhbmRsZXJzIGlmIG5lY2Vzc2FyeSwgYW5kCisgIHJldHJpZXMgc2VuZGluZyBpZiB0aGVzZSByZXR1cm5lZCBzdWNjZXNzZnVsbHksIGluY2x1ZGluZyBvbiBzb2NrZXRzIHdpdGggYQorICB0aW1lb3V0LgorCistIElzc3VlICM5OTQ3OiBsb2dnaW5nOiBGaXhlZCBsb2NraW5nIGJ1ZyBpbiBzdG9wTGlzdGVuaW5nLgorCistIElzc3VlICM5OTQ1OiBsb2dnaW5nOiBGaXhlZCBsb2NraW5nIGJ1Z3MgaW4gYWRkSGFuZGxlci9yZW1vdmVIYW5kbGVyLgogCiAtIElzc3VlICM5OTM2OiBGaXhlZCBleGVjdXRhYmxlIGxpbmVzJyBzZWFyY2ggaW4gdGhlIHRyYWNlIG1vZHVsZS4KIAorLSBJc3N1ZSAjOTc5MDogUmV3b3JrIGltcG9ydHMgbmVjZXNzYXJ5IGZvciBzYW1lZmlsZSBhbmQgc2FtZW9wZW5maWxlCisgIGluIG50cGF0aC4KKwogLSBJc3N1ZSAjOTkyODogUHJvcGVybHkgaW5pdGlhbGl6ZSB0aGUgdHlwZXMgZXhwb3J0ZWQgYnkgdGhlIGJ6MiBtb2R1bGUuCiAKLS0gSXNzdWUgIzk4NTQ6IFRoZSBkZWZhdWx0IHJlYWQoKSBpbXBsZW1lbnRhdGlvbiBpbiBpby5SYXdJT0Jhc2Ugbm93Ci0gIGhhbmRsZXMgbm9uLWJsb2NraW5nIHJlYWRpbnRvKCkgcmV0dXJuaW5nIE5vbmUgY29ycmVjdGx5LgorLSBJc3N1ZSAjMTY3NTk1MTogQWxsb3cgR3ppcEZpbGUgdG8gd29yayB3aXRoIHVuc2Vla2FibGUgZmlsZSBvYmplY3RzLiAgUGF0Y2ggYnkKKyAgRmxvcmlhbiBGZXN0aS4KIAotLSBJc3N1ZSAjOTg1MzogRml4IHRoZSBzaWduYXR1cmUgb2YgU1NMU29ja2V0LnJlY3Zmcm9tKCkgYW5kCi0gIFNTTFNvY2tldC5zZW5kdG8oKSB0byBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBzb2NrZXQgbWV0aG9kcy4KKy0gTG9nZ2luZzogQWRkZWQgUXVldWVMaXN0ZW5lciBjbGFzcyB0byBmYWNpbGl0YXRlIGxvZ2dpbmcgdXNhZ2UgZm9yCisgIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHRocmVhZHMuCiAKLS0gSXNzdWUgIzk3OTI6IEluIGNhc2Ugb2YgY29ubmVjdGlvbiBmYWlsdXJlLCBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKQotICB3b3VsZCBzd2FsbG93IHRoZSBleGNlcHRpb24gYW5kIHJhaXNlIGEgbmV3IG9uZSwgbWFraW5nIGl0IGltcG9zc2libGUKLSAgdG8gZmV0Y2ggdGhlIG9yaWdpbmFsIGVycm5vLCBvciB0byBmaWx0ZXIgdGltZW91dCBlcnJvcnMuICBOb3cgdGhlCi0gIG9yaWdpbmFsIGVycm9yIGlzIHJlLXJhaXNlZC4KKy0gSXNzdWUgIzk5MTY6IEFkZCBzb21lIG1pc3NpbmcgZXJybm8gc3ltYm9scy4KIAotLSBJc3N1ZSAjOTgyNjogT3JkZXJlZERpY3QuX19yZXByX18gY2FuIG5vdyBoYW5kbGUgc2VsZi1yZWZlcmVudGlhbAotICB2YWx1ZXM6ICAgZFsneCddID0gZC4KKy0gSXNzdWUgIzk4Nzc6IEV4cG9zZSBzeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKIAotLSBJc3N1ZSAjOTc1ODogV2hlbiBmY250bC5pb2N0bCgpIHdhcyBjYWxsZWQgd2l0aCBtdXRhYmxlX2ZsYWcgc2V0IHRvIFRydWUsCi0gIGFuZCB0aGUgcGFzc2VkIGJ1ZmZlciB3YXMgZXhhY3RseSAxMDI0IGJ5dGVzIGxvbmcsIHRoZSBidWZmZXIgd291bGRuJ3QKLSAgYmUgdXBkYXRlZCBiYWNrIGFmdGVyIHRoZSBzeXN0ZW0gY2FsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEJyaWFuIEJyYXppbC4KKy0gbG9nZ2luZzogQWRkZWQgaGFzSGFuZGxlcnMoKSBtZXRob2QgdG8gTG9nZ2VyIGFuZCBMb2dnZXJBZGFwdGVyLgogCi0tIElzc3VlICM2NjU2OiBmaXggbG9jYWxlLmZvcm1hdF9zdHJpbmcgdG8gaGFuZGxlIGVzY2FwZWQgcGVyY2VudHMKLSAgYW5kIG1hcHBpbmdzLgorLSBJc3N1ZSAjOTkwODogRml4IG9zLnN0YXQoKSBvbiBieXRlcyBwYXRocyB1bmRlciBXaW5kb3dzIDcuCiAKLS0gSXNzdWUgIzExMDA1NjI6IEZpeCBkZWVwLWNvcHlpbmcgb2Ygb2JqZWN0cyBkZXJpdmVkIGZyb20gdGhlIGxpc3QgYW5kCi0gIGRpY3QgdHlwZXMuICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5IGFuZCBCasO2cm4gTGluZHF2aXN0LgorLSBJc3N1ZSAjMjY0MzogbXN5bmMoKSBpcyBub3QgY2FsbGVkIGFueW1vcmUgd2hlbiBkZWFsbG9jYXRpbmcgYW4gb3BlbiBtbWFwCisgIG9iamVjdCwgb25seSBtdW5tYXAoKS4KIAotLSBJc3N1ZSAjOTc1MzogRml4ZWQgc29ja2V0LmR1cCwgd2hpY2ggZGlkIG5vdCBhbHdheXMgd29yayBjb3JyZWN0bHkKLSAgb24gV2luZG93cy4KKy0gbG9nZ2luZzogQ2hhbmdlZCBMb2dnZXJBZGFwdGVyIGltcGxlbWVudGF0aW9uIGludGVybmFsbHksIHRvIG1ha2UgaXQgZWFzaWVyIHRvCisgIHN1YmNsYXNzIGluIGEgdXNlZnVsIHdheS4KIAotLSBJc3N1ZSAjMTg2ODogRWxpbWluYXRlIHN1YnRsZSB0aW1pbmcgaXNzdWVzIGluIHRocmVhZC1sb2NhbCBvYmplY3RzIGJ5Ci0gIGdldHRpbmcgcmlkIG9mIHRoZSBjYWNoZWQgY29weSBvZiB0aHJlYWQtbG9jYWwgYXR0cmlidXRlIGRpY3Rpb25hcnkuCistIGxvZ2dpbmc6IGhhc0hhbmRsZXJzIG1ldGhvZCB3YXMgYWRkZWQgdG8gTG9nZ2VyLCBhbmQgaXNFbmFibGVkRm9yLAorICBnZXRFZmZlY3RpdmVMZXZlbCwgaGFzSGFuZGxlcnMgYW5kIHNldExldmVsIHdlcmUgYWRkZWQgdG8gTG9nZ2VyQWRhcHRlci4KKyAgTG9nZ2VyQWRhcHRlciB3YXMgaW50cm9kdWNlZCBpbnRvIHRoZSB1bml0IHRlc3RzIGZvciBsb2dnaW5nLgorCistIElzc3VlICMxNjg2OiBGaXggc3RyaW5nLlRlbXBsYXRlIHdoZW4gb3ZlcnJpZGluZyB0aGUgcGF0dGVybiBhdHRyaWJ1dGUuCisKKy0gSXNzdWUgIzk4NTQ6IFNvY2tldElPIG9iamVjdHMgbm93IG9ic2VydmUgdGhlIFJhd0lPQmFzZSBpbnRlcmZhY2UgaW4KKyAgbm9uLWJsb2NraW5nIG1vZGU6IHRoZXkgcmV0dXJuIE5vbmUgd2hlbiBhbiBvcGVyYXRpb24gd291bGQgYmxvY2sgKGluc3RlYWQgb2YKKyAgcmFpc2luZyBhbiBleGNlcHRpb24pLgorCistIElzc3VlICMxNzMwMTM2OiBGaXggdGhlIGNvbXBhcmlzb24gYmV0d2VlbiBhIHRrLmZvbnQuRm9udCBhbmQgYW4gb2JqZWN0IG9mCisgIGFub3RoZXIga2luZC4KKworLSBJc3N1ZSAjOTQ0MTogbG9nZ2luZyBoYXMgYmV0dGVyIGNvdmVyYWdlIGZvciByb3RhdGluZyBmaWxlIGhhbmRsZXJzLgorCistIElzc3VlICM5ODY1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCBub3cgaGFzIGEgX19zaXplb2ZfXyBtZXRob2QuCisKKy0gSXNzdWUgIzk4NTQ6IFRoZSBkZWZhdWx0IHJlYWQoKSBpbXBsZW1lbnRhdGlvbiBpbiBpby5SYXdJT0Jhc2Ugbm93IGhhbmRsZXMKKyAgbm9uLWJsb2NraW5nIHJlYWRpbnRvKCkgcmV0dXJuaW5nIE5vbmUgY29ycmVjdGx5LgorCistIElzc3VlICMxNTUyOiBzb2NrZXQuc29ja2V0cGFpcigpIG5vdyByZXR1cm5zIHJlZ3VsYXIgc29ja2V0LnNvY2tldCBvYmplY3RzCisgIHN1cHBvcnRpbmcgdGhlIHdob2xlIHNvY2tldCBBUEkgKHJhdGhlciB0aGFuIHRoZSAicmF3IiBfc29ja2V0LnNvY2tldAorICBvYmplY3RzKS4KKworLSBJc3N1ZSAjOTg1MzogRml4IHRoZSBzaWduYXR1cmUgb2YgU1NMU29ja2V0LnJlY3Zmcm9tKCkgYW5kIFNTTFNvY2tldC5zZW5kdG8oKQorICB0byBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyBzb2NrZXQgbWV0aG9kcy4KKworLSBJc3N1ZSAjOTg0MDogQWRkZWQgYSBkZWNvcmF0b3IgdG8gcmVwcmxpYiBmb3Igd3JhcHBpbmcgX19yZXByX18gbWV0aG9kcyB0byBtYWtlCisgIHRoZW0gaGFuZGxlIHJlY3Vyc2l2ZSBjYWxscyB3aXRoaW4gdGhlIHNhbWUgdGhyZWFkLgorCistIGxvZ2dpbmc6IEVuaGFuY2VkIEhUVFBIYW5kbGVyIHdpdGggc2VjdXJlIGFuZCBjcmVkZW50aWFscyBpbml0aWFsaXplcnMuCisKKy0gSXNzdWUgIzc2NzY0NTogU2V0IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgdG8gVHJ1ZSBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjOTgzNzogVGhlIHJlYWQoKSBtZXRob2Qgb2YgWmlwRXh0RmlsZSBvYmplY3RzIChhcyByZXR1cm5lZCBieQorICBaaXBGaWxlLm9wZW4oKSkgY291bGQgcmV0dXJuIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzk4MjY6IE9yZGVyZWREaWN0Ll9fcmVwcl9fIGNhbiBub3cgaGFuZGxlIHNlbGYtcmVmZXJlbnRpYWwgdmFsdWVzOgorICBkWyd4J10gPSBkLgorCistIElzc3VlICM5ODI1OiBVc2luZyBfX2RlbF9fIGluIHRoZSBkZWZpbml0aW9uIG9mIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IG1hZGUKKyAgaXQgcG9zc2libGUgZm9yIHRoZSB1c2VyIHRvIGNyZWF0ZSBzZWxmLXJlZmVyZW5jaW5nIG9yZGVyZWQgZGljdGlvbmFyaWVzIHdoaWNoCisgIGJlY29tZSBwZXJtYW5lbnRseSB1bmNvbGxlY3RhYmxlIEdDIGdhcmJhZ2UuICBSZWluc3RhdGVkIHRoZSBQeXRob24gMy4xCisgIGFwcHJvYWNoIG9mIHVzaW5nIHdlYWtyZWYgcHJveGllcyBzbyB0aGF0IHJlZmVyZW5jZSBjeWNsZXMgbmV2ZXIgZ2V0IGNyZWF0ZWQKKyAgaW4gdGhlIGZpcnN0IHBsYWNlLgorCistIElzc3VlICM5NTc5LCAjOTU4MDogRml4IG9zLmNvbmZzdHIoKSBmb3IgdmFsdWUgbG9uZ2VyIHRoYW4gMjU1IGJ5dGVzIGFuZAorICBlbmNvZGUgdGhlIHZhbHVlIHdpdGggZmlsZXN5c3RlbSBlbmNvZGluZyBhbmQgc3Vycm9nYXRlZXNjYXBlIChpbnN0ZWFkIG9mCisgIHV0Zi04IGluIHN0cmljdCBtb2RlKSAuIFBhdGNoIHdyaXR0ZW4gYnkgRGF2aWQgV2F0c29uLgorCistIElzc3VlICM5NjMyOiBSZW1vdmUgc3lzLnNldGZpbGVzeXN0ZW1lbmNvZGluZygpIGZ1bmN0aW9uOiB1c2UgUFlUSE9ORlNFTkNPRElORworICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBzZXQgdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYXQgUHl0aG9uIHN0YXJ0dXAuCisgIHN5cy5zZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSBjcmVhdGVzIGluY29uc2lzdGVuY2llcyBiZWNhdXNlIGl0IGlzIHVuYWJsZSB0bworICByZWVuY29kZSBhbGwgZmlsZW5hbWVzIGluIGFsbCBvYmplY3RzLgorCistIElzc3VlICM5NDEwOiBWYXJpb3VzIG9wdGltaXphdGlvbnMgdG8gdGhlIHBpY2tsZSBtb2R1bGUsIGxlYWRpbmcgdG8gc3BlZWR1cHMKKyAgdXAgdG8gNHggKGRlcGVuZGluZyBvbiB0aGUgYmVuY2htYXJrKS4gIE1vc3RseSBwb3J0ZWQgZnJvbSBVbmxhZGVuIFN3YWxsb3c7CisgIGluaXRpYWwgcGF0Y2ggYnkgQWxleGFuZHJlIFZhc3NhbG90dGkuCisKKy0gVGhlIHBwcmludCBtb2R1bGUgbm93IHN1cHBvcnRzIHByaW50aW5nIE9yZGVyZWREaWN0cyBpbiB0aGVpciBnaXZlbiBvcmRlcgorICAoZm9ybWVybHksIGl0IHdvdWxkIHNvcnQgdGhlIGtleXMpLgorCistIExvZ2dpbmc6IEFkZGVkIFF1ZXVlSGFuZGxlciBjbGFzcyB0byBmYWNpbGl0YXRlIGxvZ2dpbmcgdXNhZ2Ugd2l0aAorICBtdWx0aXByb2Nlc3NpbmcuCisKKy0gSXNzdWUgIzk3MDc6IFJld3JpdHRlbiByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhyZWFkaW5nLmxvY2FsIHdoaWNoIGlzCisgIGZyaWVuZGxpZXIgdG93YXJkcyByZWZlcmVuY2UgY3ljbGVzLiAgVGhpcyBjaGFuZ2UgaXMgbm90IG5vcm1hbGx5IHZpc2libGUKKyAgc2luY2UgYW4gb3B0aW1pemVkIEMgaW1wbGVtZW50YXRpb24gKF90aHJlYWQuX2xvY2FsKSBpcyB1c2VkIGluc3RlYWQuCisKKy0gSXNzdWUgIzYzOTQ6IG9zLmdldHBwaWQoKSBpcyBub3cgc3VwcG9ydGVkIG9uIFdpbmRvd3MuICBOb3RlIHRoYXQgaXQgd2lsbAorICBzdGlsbCByZXR1cm4gdGhlIGlkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBhZnRlciBpdCBoYXMgZXhpdGVkLiAgVGhpcyBwcm9jZXNzCisgIGlkIG1heSBldmVuIGhhdmUgYmVlbiByZXVzZWQgYnkgYW5vdGhlciB1bnJlbGF0ZWQgcHJvY2Vzcy4KKworLSBJc3N1ZSAjOTc5MjogSW4gY2FzZSBvZiBjb25uZWN0aW9uIGZhaWx1cmUsIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpIHdvdWxkCisgIHN3YWxsb3cgdGhlIGV4Y2VwdGlvbiBhbmQgcmFpc2UgYSBuZXcgb25lLCBtYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBmZXRjaCB0aGUKKyAgb3JpZ2luYWwgZXJybm8sIG9yIHRvIGZpbHRlciB0aW1lb3V0IGVycm9ycy4gIE5vdyB0aGUgb3JpZ2luYWwgZXJyb3IgaXMKKyAgcmUtcmFpc2VkLgorCistIElzc3VlICM5NzU4OiBXaGVuIGZjbnRsLmlvY3RsKCkgd2FzIGNhbGxlZCB3aXRoIG11dGFibGVfZmxhZyBzZXQgdG8gVHJ1ZSwgYW5kCisgIHRoZSBwYXNzZWQgYnVmZmVyIHdhcyBleGFjdGx5IDEwMjQgYnl0ZXMgbG9uZywgdGhlIGJ1ZmZlciB3b3VsZG4ndCBiZSB1cGRhdGVkCisgIGJhY2sgYWZ0ZXIgdGhlIHN5c3RlbSBjYWxsLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIFVwZGF0ZXMgdG8gdGhlIHJhbmRvbSBtb2R1bGU6CisKKyAgKiBEb2N1bWVudCB3aGljaCBwYXJ0cyBvZiB0aGUgbW9kdWxlIGFyZSBndWFyYW50ZWVkIHRvIHN0YXkgdGhlIHNhbWUgYWNyb3NzCisgICAgdmVyc2lvbnMgYW5kIHdoaWNoIHBhcnRzIGFyZSBzdWJqZWN0IHRvIGNoYW5nZS4KKworICAqIFVwZGF0ZSB0aGUgc2VlZCgpIG1ldGhvZCB0byB1c2UgYWxsIG9mIHRoZSBiaXRzIGluIGEgc3RyaW5nIGluc3RlYWQgb2YganVzdAorICAgIHRoZSBoYXNoIHZhbHVlLiAgVGhpcyBtYWtlcyBiZXR0ZXIgdXNlIG9mIHRoZSBzZWVkIHZhbHVlIGFuZCBhc3N1cmVzIHRoZQorICAgIHNlZWRpbmcgaXMgcGxhdGZvcm0gaW5kZXBlbmRlbnQuICBJc3N1ZSAjNzg4OS4KKworICAqIEltcHJvdmVkIHRoZSByYW5kb20oKS0tPmludGVnZXIgYWxnb3JpdGhtIHVzZWQgaW4gY2hvaWNlKCksIHNodWZmbGUoKSwKKyAgICBzYW1wbGUoKSwgcmFuZHJhbmdlKCksIGFuZCByYW5kaW50KCkuICBGb3JtZXJseSwgaXQgdXNlZCBpbnQobipyYW5kb20oKSkKKyAgICB3aGljaCBoYXMgYSBzbGlnaHQgYmlhcyB3aGVuZXZlciBuIGlzIG5vdCBhIHBvd2VyIG9mIHR3by4gIElzc3VlICM5MDI1LgorCisgICogSW1wcm92ZWQgZG9jdW1lbnRhdGlvbiBvZiBhcmd1bWVudHMgdG8gcmFuZHJhbmdlKCkuICBJc3N1ZSAjOTM3OS4KKworLSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCBub3cgc3VwcG9ydHMgYSBuZXcgbWV0aG9kIGZvciByZXBvc2l0aW9uaW5nIGtleXMgdG8KKyAgZWl0aGVyIGVuZC4KKworLSBJc3N1ZSAjOTc1NDogU2ltaWxhcmx5IHRvIGFzc2VydFJhaXNlcyBhbmQgYXNzZXJ0UmFpc2VzUmVnZXhwLCB1bml0dGVzdCB0ZXN0CisgIGNhc2VzIG5vdyBhbHNvIGhhdmUgYXNzZXJ0V2FybnMgYW5kIGFzc2VydFdhcm5zUmVnZXhwIG1ldGhvZHMgdG8gY2hlY2sgdGhhdCBhCisgIGdpdmVuIHdhcm5pbmcgdHlwZSB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBjb2RlIHVuZGVyIHRlc3QuCisKKy0gSXNzdWUgIzU1MDY6IEJ5dGVzSU8gb2JqZWN0cyBub3cgaGF2ZSBhIGdldGJ1ZmZlcigpIG1ldGhvZCBleHBvcnRpbmcgYSB2aWV3IG9mCisgIHRoZWlyIGNvbnRlbnRzIHdpdGhvdXQgZHVwbGljYXRpbmcgdGhlbS4gIFRoZSB2aWV3IGlzIGJvdGggcmVhZGFibGUgYW5kCisgIHdyaXRhYmxlLgorCistIElzc3VlICM3NTY2OiBJbXBsZW1lbnQgb3MucGF0aC5zYW1lb3BlbmZpbGUgZm9yIFdpbmRvd3MuCisKKy0gSXNzdWUgIzkyOTM6IEkvTyBzdHJlYW1zIG5vdyByYWlzZSBgYGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uYGAgd2hlbiBhbgorICB1bnN1cHBvcnRlZCBvcGVyYXRpb24gaXMgYXR0ZW1wdGVkIChmb3IgZXhhbXBsZSwgd3JpdGluZyB0byBhIGZpbGUgb3BlbiBvbmx5CisgIGZvciByZWFkaW5nKS4KKworLSBoYXNobGliIGhhcyB0d28gbmV3IGNvbnN0YW50IGF0dHJpYnV0ZXM6IGFsZ29yaXRobXNfZ3VhcmFudGVlZCBhbmQKKyAgYWxnb3JpdGhtc19hdmFpYWJsZSB0aGF0IHJlc3BlY3RpdmVseSBsaXN0IHRoZSBuYW1lcyBvZiBoYXNoIGFsZ29yaXRobXMKKyAgZ3VhcmFudGVlZCB0byBleGlzdCBpbiBhbGwgUHl0aG9uIGltcGxlbWVudGF0aW9ucyBhbmQgdGhlIG5hbWVzIG9mIGhhc2gKKyAgYWxnb3JpdGhtcyBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzcy4KKworLSBBIG5ldyBwYWNrYWdlIGBgY29uY3VycmVudC5mdXR1cmVzYGAgYXMgZGVmaW5lZCBieSBQRVAgMzE0OC4KKworQy1BUEkKKy0tLS0tCisKKy0gQWRkIFB5RXJyX1N5bnRheExvY2F0aW9uRXgsIHdoaWNoIHN1cHBvcnRzIHBhc3NpbmcgYSBjb2x1bW4gb2Zmc2V0LgorCistIElzc3VlICM5ODM0OiBEb24ndCBzZWdmYXVsdCBpbiBQeVNlcXVlbmNlX0dldFNsaWNlLCBQeVNlcXVlbmNlX1NldFNsaWNlLCBvcgorICBQeVNlcXVlbmNlX0RlbFNsaWNlIHdoZW4gdGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgYW55IG1hcHBpbmcgb3BlcmF0aW9ucworICBkZWZpbmVkLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTE4ODogVGhlIGdkYiBleHRlbnNpb24gbm93IGhhbmRsZXMgY29ycmVjdGx5IG5hcnJvdyAoVUNTMikgYXMgd2VsbCBhcworICB3aWRlIChVQ1M0KSB1bmljb2RlIGJ1aWxkcyBmb3IgYm90aCB0aGUgaG9zdCBpbnRlcnByZXRlciAoZW1iZWRkZWQgaW5zaWRlIGdkYikKKyAgYW5kIHRoZSBpbnRlcnByZXRlciB1bmRlciB0ZXN0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjOTMwODogQWRkZWQgdGVzdHMgZm9yIGltcG9ydGluZyBlbmNvZGVkIG1vZHVsZXMgdGhhdCBkbyBub3QKKyAgZGVwZW5kIG9uIHNwZWNpZmljIHN0ZGxpYiBtb2R1bGVzIGJlaW5nIGVuY29kZWQgaW4gYSBjZXJ0YWluIHdheS4KKworLSBJc3N1ZSAjMTA1MTogQWRkIGEgc2NyaXB0IChMaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weSkgdG8gZ2VuZXJhdGUgdGhlIGN1c3RvbQorICBjZXJ0aWZpY2F0ZSBhbmQgcHJpdmF0ZSBrZXkgZmlsZXMgdXNlZCBieSBTU0wtcmVsYXRlZCBjZXJ0cy4KKworLSBJc3N1ZSAjOTk3ODogV2FpdCB1bnRpbCBzdWJwcm9jZXNzIGNvbXBsZXRlcyBpbml0aWFsaXphdGlvbi4gKFdpbjMyS2lsbFRlc3RzCisgIGluIHRlc3Rfb3MpCisKKy0gSXNzdWUgIzcxMTA6IHJlZ3J0ZXN0IG5vdyBzZW5kcyB0ZXN0IGZhaWx1cmUgcmVwb3J0cyBhbmQgc2luZ2xlLWZhaWx1cmUKKyAgdHJhY2ViYWNrcyB0byBzdGRlcnIgcmF0aGVyIHRoYW4gc3Rkb3V0LgorCistIElzc3VlICM5NjI4OiBmaXggcnVudGVzdHMuc2ggLXggb3B0aW9uIHNvIG1vcmUgdGhhbiBvbmUgdGVzdCBjYW4gYmUgZXhjbHVkZWQuCisKKy0gSXNzdWUgIzk4OTk6IEZpeCB0ZXN0X3RraW50ZXIudGVzdF9mb250IG9uIHZhcmlvdXMgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgTmVkCisgIERlaWx5LgorCistIElzc3VlICM5ODk0OiBEbyBub3QgaGFyZGNvZGUgRU5PRU5UIGluIHRlc3Rfc3VicHJvY2Vzcy4KKworLSBJc3N1ZSAjOTMxNTogQWRkZWQgdGVzdHMgZm9yIHRoZSB0cmFjZSBtb2R1bGUuICBQYXRjaCBieSBFbGkgQmVuZGVyc2t5LgorCistIElzc3VlICM5MzIzOiBNYWtlIHRlc3QucmVncnRlc3QuX19maWxlX18gYWJzb2x1dGUsIHRoaXMgd2FzIG5vdCBhbHdheXMgdGhlCisgIGNhc2Ugd2hlbiBydW5uaW5nIHByb2ZpbGUgb3IgdHJhY2UsIGZvciBleGFtcGxlLgorCistIElzc3VlICM5NTY4OiBGaXggdGVzdF91cmxsaWIyX2xvY2FsbmV0IG9uIE9TIFggMTAuMy4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzEwMDYyOiBBbGxvdyBidWlsZGluZyBvbiBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IGhhdmUgc2VtX3RpbWVkd2FpdC4KKworLSBJc3N1ZSAjMTAwNTQ6IFNvbWUgcGxhdGZvcm1zIHByb3ZpZGUgdWludHB0cl90IGluIGludHR5cGVzLmguICBQYXRjaCBieSBBa2lyYQorICBLaXRhZGEuCisKKy0gSXNzdWUgIzEwMDU1OiBNYWtlIGpzb24gQzg5LWNvbXBsaWFudCBpbiBVQ1M0IG1vZGUuCisKKy0gSXNzdWUgIzk1NTI6IEF2b2lkIHVubmVjZXNzYXJ5IHJlYnVpbGQgb2YgT3BlblNTTC4gKFdpbmRvd3MpCisKKy0gSXNzdWUgIzE2MzM4NjM6IERvbid0IGlnbm9yZSAkQ0MgdW5kZXIgQUlYLgorCistIElzc3VlICM5ODEwOiBDb21waWxlIGJ6aXAyIHNvdXJjZSBmaWxlcyBpbiBQeXRob24ncyBwcm9qZWN0IGZpbGUgZGlyZWN0bHkuIEl0CisgIHVzZWQgdG8gYmUgYnVpbHQgd2l0aCBiemlwMidzIG1ha2VmaWxlLgorCistIElzc3VlICM5ODQ4OiBTdG9wcGluZyB0cnlpbmcgdG8gYnVpbGQgX3dlYWtyZWYgaW4gc2V0dXAucHkgYXMgaXQgaXMgYSBidWlsdC1pbgorICBtb2R1bGUuCisKKy0gSXNzdWUgIzk4MDY6IHB5dGhvbi1jb25maWcgbm93IGhhcyBhbiBgYC0tZXh0ZW5zaW9uLXN1ZmZpeGBgIG9wdGlvbiB0aGF0CisgIG91dHB1dHMgdGhlIHN1ZmZpeCBmb3IgZHluYW1pYyBsaWJyYXJpZXMgaW5jbHVkaW5nIHRoZSBBQkkgdmVyc2lvbiBuYW1lCisgIGRlZmluZWQgYnkgUEVQIDMxNDkuCisKKy0gSXNzdWUgIzk0MTM0NjogSW1wcm92ZSB0aGUgYnVpbGQgcHJvY2VzcyB1bmRlciBBSVggYW5kIGFsbG93IFB5dGhvbiB0byBiZQorICBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAgUGF0Y2ggYnkgU8OpYmFzdGllbiBTYWJsw6kuCisKKy0gSXNzdWUgIzQwMjY6IE1ha2UgdGhlIGZjbnRsIGV4dGVuc2lvbiBidWlsZCB1bmRlciBBSVguICBQYXRjaCBieSBTw6liYXN0aWVuCisgIFNhYmzDqS4KKworLSBJc3N1ZSAjOTcwMTogVGhlIE1hY09TWCBpbnN0YWxsZXIgY2FuIHBhdGNoIHRoZSBzaGVsbCBwcm9maWxlIHRvIGVuc3VyZSB0aGF0CisgIHRoZSAiYmluIiBkaXJlY3RvcnkgaW5zaWRlIHRoZSBmcmFtZXdvcmsgaXMgb24gdGhlIHNoZWxsJ3Mgc2VhcmNoIHBhdGguIFRoaXMKKyAgZmVhdHVyZSBub3cgYWxzbyBzdXBwb3J0cyB0aGUgWlNIIHNoZWxsLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMiBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA1LVNlcC0yMDEwKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTIyNTogUmVtb3ZlIHRoZSBST1RfRk9VUiBhbmQgRFVQX1RPUFggb3Bjb2RlLCB0aGUgbGF0dGVyIHJlcGxhY2VkIGJ5CisgIHRoZSBuZXcgKGFuZCBzaW1wbGVyKSBEVVBfVE9QX1RXTy4gIFBlcmZvcm1hbmNlIGlzbid0IGNoYW5nZWQsIGJ1dCBvdXIKKyAgYnl0ZWNvZGUgaXMgYSBiaXQgc2ltcGxpZmllZC4gIFBhdGNoIGJ5IERlbXVyIFJ1bWVkLgorCistIElzc3VlICM5NzY2OiBSZW5hbWUgcG9vcmx5IG5hbWVkIHZhcmlhYmxlcyBleHBvc2VkIGJ5IF93YXJuaW5ncyB0byBwcmV2ZW50CisgIGNvbmZ1c2lvbiB3aXRoIHRoZSBwcm9wZXIgdmFyaWFibGVzIG5hbWVzIGZyb20gJ3dhcm5pbmdzJyBpdHNlbGYuCisKKy0gSXNzdWUgIzkyMTI6IGRpY3Rfa2V5cyBhbmQgZGljdF9pdGVtcyBub3cgcHJvdmlkZSB0aGUgaXNkaXNqb2ludCgpIG1ldGhvZCwgdG8KKyAgY29uZm9ybSB0byB0aGUgU2V0IEFCQy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjOTczNzogRml4IGEgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gZGVsZXRlIGEgc2xpY2Ugb3IgYW4gaXRlbSBmcm9tIGEKKyAgbWVtb3J5dmlldyBvYmplY3QuCisKKy0gSXNzdWUgIzk1NDk6IHN5cy5zZXRkZWZhdWx0ZW5jb2RpbmcoKSBhbmQgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZygpIGFyZQorICBub3cgcmVtb3ZlZCwgc2luY2UgdGhlaXIgZWZmZWN0IHdhcyBpbmV4aXN0ZW50IGluIDMueCAodGhlIGRlZmF1bHQgZW5jb2RpbmcgaXMKKyAgaGFyZGNvZGVkIHRvIHV0Zi04IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCkuCisKKy0gSXNzdWUgIzc0MTU6IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCgpIG5vdyB1c2VzIHRoZSBuZXcgYnVmZmVyIEFQSQorICBwcm9wZXJseS4gIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzU1NTM6IFRoZSBQeV9MT0NBTF9JTkxJTkUgbWFjcm8gbm93IHJlc3VsdHMgaW4gaW5saW5pbmcgb24gbW9zdAorICBwbGF0Zm9ybXMuICBQcmV2aW91c2x5LCBpdCBpbmxpbmVkIG9ubHkgd2hlbiB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMuCisKKy0gSXNzdWUgIzk3MTI6IEZpeCB0b2tlbml6ZSBvbiBpZGVudGlmaWVycyB0aGF0IHN0YXJ0IHdpdGggbm9uLWFzY2lpIG5hbWVzLgorCistIElzc3VlICM5Njg4OiBfX2Jhc2ljc2l6ZV9fIGFuZCBfX2l0ZW1zaXplX18gbXVzdCBiZSBhY2Nlc3NlZCBhcyBQeV9zc2l6ZV90LgorCistIElzc3VlICM5Njg0OiBBZGRlZCBhIGRlZmluaXRpb24gZm9yIFNJWkVPRl9XQ0hBUl9UIHRvIFBDL3B5Y29uZmlnLmgsIHRvIG1hdGNoCisgIHRoZSBweWNvbmZpZy5oIGdlbmVyYXRlZCBieSBjb25maWd1cmUgb24gb3RoZXIgc3lzdGVtcy4KKworLSBJc3N1ZSAjOTY2NjogT25seSBjYXRjaCBBdHRyaWJ1dGVFcnJvciBpbiBoYXNhdHRyKCkuIEFsbCBvdGhlciBleGNlcHRpb25zIHRoYXQKKyAgb2NjdXIgZHVyaW5nIGF0dHJpYnV0ZSBsb29rdXAgYXJlIG5vdyBwcm9wYWdhdGVkIHRvIHRoZSBjYWxsZXIuCisKKy0gSXNzdWUgIzg2MjI6IEFkZCBQWVRIT05GU0VOQ09ESU5HIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJyaWRlIHRoZQorICBmaWxlc3lzdGVtIGVuY29kaW5nLgorCistIElzc3VlICM1MTI3OiBUaGUgQyBmdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIFVuaWNvZGUgRGF0YWJhc2Ugbm93IGFjY2VwdCBhbmQKKyAgcmV0dXJuIGNoYXJhY3RlcnMgZnJvbSB0aGUgZnVsbCBVbmljb2RlIHJhbmdlLCBldmVuIG9uIG5hcnJvdyB1bmljb2RlIGJ1aWxkcworICAoUHlfVU5JQ09ERV9UT0xPV0VSLCBQeV9VTklDT0RFX0lTREVDSU1BTCwgYW5kIG90aGVycykuICBBIHZpc2libGUgZGlmZmVyZW5jZQorICBpbiBQeXRob24gaXMgdGhhdCB1bmljb2RlZGF0YS5udW1lcmljKCkgbm93IHJldHVybnMgdGhlIGNvcnJlY3QgdmFsdWUgZm9yCisgIGxhcmdlIGNvZGUgcG9pbnRzLCBhbmQgcmVwcigpIG1heSBjb25zaWRlciBtb3JlIGNoYXJhY3RlcnMgYXMgcHJpbnRhYmxlLgorCistIElzc3VlICM5NDI1OiBDcmVhdGUgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QoKSBmdW5jdGlvbiB0byBnZXQgdGhlIGZpbGVuYW1lCisgIGFzIGEgdW5pY29kZSBvYmplY3QsIGluc3RlYWQgb2YgYSBieXRlIHN0cmluZy4gRnVuY3Rpb24gbmVlZGVkIHRvIHN1cHBvcnQKKyAgdW5lbmNvZGFibGUgZmlsZW5hbWVzLiBEZXByZWNhdGUgUHlNb2R1bGVfR2V0RmlsZW5hbWUoKSBpbiBmYXZvciBvbiB0aGUgbmV3CisgIGZ1bmN0aW9uLgorCistIElzc3VlICM4MDYzOiBDYWxsIF9QeUdJTFN0YXRlX0luaXQoKSBlYXJsaWVyIGluIFB5X0luaXRpYWxpemVFeCgpLgorCistIElzc3VlICM5NjEyOiBUaGUgc2V0IG9iamVjdCBpcyBub3cgNjQtYml0IGNsZWFuIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzgyMDI6IHN5cy5hcmd2WzBdIGlzIG5vdyBzZXQgdG8gJy1tJyBpbnN0ZWFkIG9mICctYycgd2hlbiBzZWFyY2hpbmcgZm9yCisgIHRoZSBtb2R1bGUgZmlsZSB0byBiZSBleGVjdXRlZCB3aXRoIHRoZSAtbSBjb21tYW5kIGxpbmUgb3B0aW9uLgorCistIElzc3VlICM5NTk5OiBDcmVhdGUgUHlTeXNfRm9ybWF0U3Rkb3V0KCkgYW5kIFB5U3lzX0Zvcm1hdFN0ZGVycigpIGZ1bmN0aW9ucyB0bworICB3cml0ZSBhIG1lc3NhZ2UgZm9ybWF0dGVkIGJ5IFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIHRvIHN5cy5zdGRvdXQgYW5kCisgIHN5cy5zdGRlcnIuCisKKy0gSXNzdWUgIzk1NDI6IENyZWF0ZSBQeVVuaWNvZGVfRlNEZWNvZGVyKCkgZnVuY3Rpb24sIGEgUGFyc2VUdXBsZSBjb252ZXJ0ZXI6CisgIGRlY29kZSBieXRlcyBvYmplY3RzIHRvIHVuaWNvZGUgdXNpbmcgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoKTsgc3RyCisgIG9iamVjdHMgYXJlIG91dHB1dCBhcy1pcy4KKworLSBJc3N1ZSAjOTIwMzogQ29tcHV0ZWQgZ290b3MgYXJlIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycworICAod2hpY2ggYXJlIGRldGVjdGVkIGJ5IHRoZSBjb25maWd1cmUgc2NyaXB0KS4gIFRoZXkgY2FuIHN0aWxsIGJlIGRpc2FibGUKKyAgc2VsZWN0aXZlbHkgYnkgc3BlY2lmeWluZyAtLXdpdGhvdXQtY29tcHV0ZWQtZ290b3MuCisKKy0gSXNzdWUgIzk0MjU6IENyZWF0ZSBQeUVycl9XYXJuRm9ybWF0KCkgZnVuY3Rpb24sIHNpbWlsYXIgdG8gUHlFcnJfV2FybkV4KCkgYnV0CisgIHVzZSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSB0byBmb3JtYXQgdGhlIHdhcm5pbmcgbWVzc2FnZS4KKworLSBJc3N1ZSAjODUzMDogUHJldmVudCBzdHJpbmdsaWIgZmFzdHNlYXJjaCBmcm9tIHJlYWRpbmcgYmV5b25kIHRoZSBmcm9udCBvZiBhbgorICBhcnJheS4KKworLSBJc3N1ZSAjNTMxOTogUHJpbnQgYW4gZXJyb3IgaWYgZmx1c2hpbmcgc3Rkb3V0IGZhaWxzIGF0IGludGVycHJldGVyIHNodXRkb3duLgorCistIElzc3VlICM5MzM3OiBUaGUgc3RyKCkgb2YgYSBmbG9hdCBvciBjb21wbGV4IG51bWJlciBpcyBub3cgaWRlbnRpY2FsIHRvIGl0cworICByZXByKCkuCisKKy0gSXNzdWUgIzk0MTY6IEZpeCBzb21lIGlzc3VlcyB3aXRoIGNvbXBsZXggZm9ybWF0dGluZyB3aGVyZSB0aGUgb3V0cHV0IHdpdGggbm8KKyAgdHlwZSBzcGVjaWZpZXIgZmFpbGVkIHRvIG1hdGNoIHRoZSBzdHIgb3V0cHV0OgorCisgICAgLSBmb3JtYXQoY29tcGxleCgtMC4wLCAyLjApLCAnLScpIG9taXR0ZWQgdGhlIHJlYWwgcGFydCBmcm9tIHRoZSBvdXRwdXQsCisgICAgLSBmb3JtYXQoY29tcGxleCgwLjAsIDIuMCksICctJykgaW5jbHVkZWQgYSBzaWduIGFuZCBwYXJlbnRoZXNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzgwMTM6IHRpbWUuYXNjdGltZSBhbmQgdGltZS5jdGltZSBubyBsb25nZXIgY2FsbCBzeXN0ZW0KKyAgYXNjdGltZSBhbmQgY3RpbWUgZnVuY3Rpb25zLiAgVGhlIHllYXIgcmFuZ2UgZm9yIHRpbWUuYXNjdGltZSBpcyBub3cKKyAgMTkwMCB0aHJvdWdoIG1heGludC4gIFRoZSByYW5nZSBmb3IgdGltZS5jdGltZSBpcyB0aGUgc2FtZSBhcyBmb3IKKyAgdGltZS5sb2NhbHRpbWUuICBUaGUgc3RyaW5nIHByb2R1Y2VkIGJ5IHRoZXNlIGZ1bmN0aW9ucyBpcyBsb25nZXIKKyAgdGhhbiAyNCBjaGFyYWN0ZXJzIHdoZW4geWVhciBpcyBncmVhdGVyIHRoYW4gOTk5OS4KKworLSBJc3N1ZSAjNjYwODogdGltZS5hc2N0aW1lIGlzIG5vdyBjaGVja2luZyBzdHJ1Y3QgdG0gZmllbGRzIGl0cyBpbnB1dAorICBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgc3lzdGVtIGFzY3RpbWUuICBQYXRjaCBieSBNdW5TaWMgSmVvbmcuCisKKy0gSXNzdWUgIzg3MzQ6IEF2b2lkIGNyYXNoIGluIG1zdmNydC5nZXRfb3NmaGFuZGxlKCkgd2hlbiBhbiBpbnZhbGlkIGZpbGUKKyAgZGVzY3JpcHRvciBpcyBwcm92aWRlZC4gIFBhdGNoIGJ5IFBhc2NhbCBDaGFtYm9uLgorCistIElzc3VlICM3NzM2OiBSZWxlYXNlIHRoZSBHSUwgYXJvdW5kIGNhbGxzIHRvIG9wZW5kaXIoKSBhbmQgY2xvc2VkaXIoKSBpbiB0aGUKKyAgcG9zaXggbW9kdWxlLiAgUGF0Y2ggYnkgTWFyY2luIEJhY2hyeS4KKworLSBJc3N1ZSAjNDgzNTogbWFrZSBQeUxvbmdfRnJvbVNvY2tldF90KCkgYW5kIFB5TG9uZ19Bc1NvY2tldF90KCkgcHJpdmF0ZSB0byB0aGUKKyAgc29ja2V0IG1vZHVsZSwgYW5kIGZpeCB0aGUgd2lkdGggb2Ygc29ja2V0IGRlc2NyaXB0b3JzIHRvIGJlIGNvcnJlY3RseQorICBkZXRlY3RlZCB1bmRlciA2NC1iaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTAyNzIwNjogU3VwcG9ydCBJRE5BIGluIGdldGhvc3RieW5hbWUsIGdldGhvc3RieW5hbWVfZXgsIGdldGFkZHJpbmZvCisgIGFuZCBnZXRob3N0YnlhZGRyLiAgZ2V0bmFtZWluZm8gaXMgbm93IHJlc3RyaWN0ZWQgdG8gbnVtZXJpYyBhZGRyZXNzZXMgYXMKKyAgaW5wdXQuCisKKy0gSXNzdWUgIzkyMTQ6IFNldCBvcGVyYXRpb25zIG9uIGEgS2V5c1ZpZXcgb3IgSXRlbXNWaWV3IGluIGNvbGxlY3Rpb25zIG5vdworICBjb3JyZWN0bHkgcmV0dXJuIGEgc2V0LiAgUGF0Y2ggYnkgRWxpIEJlbmRlcnNreS4KKworLSBJc3N1ZSAjNTczNzogQWRkIFNvbGFyaXMtc3BlY2lmaWMgbW5lbW9uaWNzIGluIHRoZSBlcnJubyBtb2R1bGUuICBQYXRjaCBieQorICBNYXR0aGV3IEFocmVucy4KKworLSBSZXN0b3JlIEdJTCBpbiBuaXNfY2F0IGluIGNhc2Ugb2YgZXJyb3IuIERlY29kZSBOSVMgZGF0YSB0byBmcyBlbmNvZGluZywgdXNpbmcKKyAgdGhlIHN1cnJvZ2F0ZSBlcnJvciBoYW5kbGVyLgorCistIElzc3VlICM2NjU3NjE6IGBgZnVuY3Rvb2xzLnJlZHVjZSgpYGAgd2lsbCBubyBsb25nZXIgbWFzayBleGNlcHRpb25zIG90aGVyCisgIHRoYW4gYGBUeXBlRXJyb3JgYCByYWlzZWQgYnkgdGhlIGl0ZXJhdG9yIGFyZ3VtZW50LgorCistIElzc3VlICM5NTcwOiBVc2UgUEVQIDM4MyBkZWNvZGluZyBpbiBvcy5ta25vZCBhbmQgb3MubWtmaWZvLgorCistIElzc3VlICM2OTE1OiBVbmRlciBXaW5kb3dzLCBvcy5saXN0ZGlyKCkgZGlkbid0IHJlbGVhc2UgdGhlIEdsb2JhbCBJbnRlcnByZXRlcgorICBMb2NrIGFyb3VuZCBhbGwgc3lzdGVtIGNhbGxzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUnlhbiBLZWxseS4KKworLSBJc3N1ZSAjODUyNDogQWRkIGEgZGV0YWNoKCkgbWV0aG9kIHRvIHNvY2tldCBvYmplY3RzLCBzbyBhcyB0byBwdXQgdGhlIHNvY2tldAorICBpbnRvIHRoZSBjbG9zZWQgc3RhdGUgd2l0aG91dCBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworLSBJc3N1ZSAjNDc3ODYzOiBFbWl0IGEgUmVzb3VyY2VXYXJuaW5nIGF0IHNodXRkb3duIGlmIGdjLmdhcmJhZ2UgaXMgbm90IGVtcHR5LgorCistIElzc3VlICM2ODY5OiBGaXggYSByZWZjb3VudCBwcm9ibGVtIGluIHRoZSBfY3R5cGVzIGV4dGVuc2lvbi4KKworLSBJc3N1ZSAjNTUwNDogY3R5cGVzIHNob3VsZCBub3cgd29yayB3aXRoIHN5c3RlbXMgd2hlcmUgbW1hcCBjYW4ndCBiZQorICBQUk9UX1dSSVRFIGFuZCBQUk9UX0VYRUMuCisKKy0gSXNzdWUgIzk1MDc6IE5hbWVkIHR1cGxlIHJlcHIgd2lsbCBub3cgYXV0b21hdGljYWxseSBkaXNwbGF5IHRoZSByaWdodCBuYW1lIGluCisgIGEgdHVwbGUgc3ViY2xhc3MuCisKKy0gSXNzdWUgIzkzMjQ6IEFkZCBwYXJhbWV0ZXIgdmFsaWRhdGlvbiB0byBzaWduYWwuc2lnbmFsIG9uIFdpbmRvd3MgaW4gb3JkZXIgdG8KKyAgcHJldmVudCBjcmFzaGVzLgorCistIElzc3VlICM5NTI2OiBSZW1vdmUgc29tZSBvdXRkYXRlZCAoaW50KSBjYXN0cyB0aGF0IHdlcmUgcHJldmVudGluZyB0aGUgYXJyYXkKKyAgbW9kdWxlIGZyb20gd29ya2luZyBjb3JyZWN0bHkgd2l0aCBhcnJheXMgb2YgbW9yZSB0aGFuIDIqKjMxIGVsZW1lbnRzLgorCistIEZpeCBtZW1vcnkgbGVhayBpbiBzc2wuX3NzbC5fdGVzdF9kZWNvZGVfY2VydC4KKworLSBJc3N1ZSAjODA2NTogRml4IG1lbW9yeSBsZWFrIGluIHJlYWRsaW5lIG1vZHVsZSAoZnJvbSBmYWlsdXJlIHRvIGZyZWUgdGhlCisgIHJlc3VsdCBvZiBoaXN0b3J5X2dldF9oaXN0b3J5X3N0YXRlKCkpLgorCistIElzc3VlICM5NDUwOiBGaXggbWVtb3J5IGxlYWsgaW4gcmVhZGxpbmUucmVwbGFjZV9oaXN0b3J5X2l0ZW0gYW5kCisgIHJlYWRsaW5lLnJlbW92ZV9oaXN0b3J5X2l0ZW0gZm9yIHJlYWRsaW5lIHZlcnNpb24gPj0gNS4wLgorCistIElzc3VlICM4MTA1OiBWYWxpZGF0ZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkIHRvIG1tYXAubW1hcCBvbiBXaW5kb3dzLgorCistIElzc3VlICM4MDQ2OiBBZGQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHN1cHBvcnQgYW5kIC5jbG9zZWQgcHJvcGVydHkgdG8gbW1hcAorICBvYmplY3RzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzc0NTE6IEltcHJvdmUgZGVjb2RpbmcgcGVyZm9ybWFuY2Ugb2YgSlNPTiBvYmplY3RzLCBhbmQgcmVkdWNlIHRoZQorICBtZW1vcnkgY29uc3VtcHRpb24gb2Ygc2FpZCBkZWNvZGVkIG9iamVjdHMgd2hlbiB0aGV5IHVzZSB0aGUgc2FtZSBzdHJpbmdzIGFzCisgIGtleXMuCisKKy0gSXNzdWUgIzExMDA1NjI6IEZpeCBkZWVwLWNvcHlpbmcgb2Ygb2JqZWN0cyBkZXJpdmVkIGZyb20gdGhlIGxpc3QgYW5kIGRpY3QKKyAgdHlwZXMuICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5IGFuZCBCasO2cm4gTGluZHF2aXN0LgorCistIElzc3VlICM5NzUzOiBGaXhlZCBzb2NrZXQuZHVwLCB3aGljaCBkaWQgbm90IGFsd2F5cyB3b3JrIGNvcnJlY3RseSBvbiBXaW5kb3dzLgorCistIElzc3VlICM5NDIxOiBNYWRlIHRoZSBnZXQ8dHlwZT4gbWV0aG9kcyBjb25zaXN0ZW50bHkgYWNjZXB0IHRoZSB2YXJzIGFuZAorICBkZWZhdWx0IGFyZ3VtZW50cyBvbiBhbGwgcGFyc2VyIGNsYXNzZXMuCisKKy0gSXNzdWUgIzcwMDU6IEZpeGVkIG91dHB1dCBvZiBOb25lIHZhbHVlcyBmb3IgUmF3Q29uZmlnUGFyc2VyLndyaXRlIGFuZAorICBDb25maWdQYXJzZXIud3JpdGUuCisKKy0gSXNzdWUgIzg5OTA6IGFycmF5LmZyb21zdHJpbmcoKSBhbmQgYXJyYXkudG9zdHJpbmcoKSBnZXQgcmVuYW1lZCB0bworICBmcm9tYnl0ZXMoKSBhbmQgdG9ieXRlcygpLCByZXNwZWN0aXZlbHksIHRvIGF2b2lkIGNvbmZ1c2lvbi4gIEZ1cnRoZXJtb3JlLAorICBhcnJheS5mcm9tYnl0ZXMoKSwgYXJyYXkuZXh0ZW5kKCkgYXMgd2VsbCBhcyB0aGUgYXJyYXkuYXJyYXkoKSBjb25zdHJ1Y3RvciBub3cKKyAgYWNjZXB0IGJ5dGVhcnJheSBvYmplY3RzLiAgUGF0Y2ggYnkgVGhvbWFzIEpvbGxhbnMuCisKKy0gSXNzdWUgIzgwODE2NDogRml4ZWQgc29ja2V0LmNsb3NlIHRvIGF2b2lkIHJlZmVyZW5jZXMgdG8gZ2xvYmFscywgdG8gYXZvaWQKKyAgaXNzdWVzIHdoZW4gc29ja2V0LmNsb3NlIGlzIGNhbGxlZCBmcm9tIGEgX19kZWxfXyBtZXRob2QuCisKKy0gSXNzdWUgIzk3MDY6IHNzbCBtb2R1bGUgcHJvdmlkZXMgYSBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgaW4gdmFyaW91cworICBjaXJjdW1zdGFuY2VzLgorCistIElzc3VlICMxODY4OiBFbGltaW5hdGUgc3VidGxlIHRpbWluZyBpc3N1ZXMgaW4gdGhyZWFkLWxvY2FsIG9iamVjdHMgYnkgZ2V0dGluZworICByaWQgb2YgdGhlIGNhY2hlZCBjb3B5IG9mIHRocmVhZC1sb2NhbCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTUxMjc5MTogSW4gc2V0ZnJhbWVyYXRlKCkgaW4gdGhlIHdhdmUgbW9kdWxlLCBub24taW50ZWdyYWwgZnJhbWUgcmF0ZXMKKyAgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4KIAogLSBJc3N1ZSAjODc5NzogdXJsbGliMiBkb2VzIGEgcmV0cnkgZm9yIEJhc2ljIEF1dGhlbnRpY2F0aW9uIGZhaWx1cmUgaW5zdGVhZCBvZgogICBmYWxsaW5nIGludG8gcmVjdXJzaW9uLgpAQCAtNzAzLDk5ICsyMTkyLDE0MiBAQAogLSBJc3N1ZSAjMTE5NDIyMjogZW1haWwudXRpbHMucGFyc2VkYXRlIG5vdyByZXR1cm5zIFJGQzI4MjIgY29tcGxpYW50IGZvdXIKICAgY2hhcmFjdGVyIHllYXJzIGV2ZW4gaWYgdGhlIG1lc3NhZ2UgY29udGFpbnMgUkZDODIyIHR3byBjaGFyYWN0ZXIgeWVhcnMuCiAKLS0gSXNzdWUgIzg3NTA6IEZpeGVkIE11dGFibGVTZXQncyBtZXRob2RzIHRvIGNvcnJlY3RseSBoYW5kbGUKLSAgcmVmbGV4aXZlIG9wZXJhdGlvbnMsIG5hbWVseSB4IC09IHggYW5kIHggXj0geC4KKy0gSXNzdWUgIzg3NTA6IEZpeGVkIE11dGFibGVTZXQncyBtZXRob2RzIHRvIGNvcnJlY3RseSBoYW5kbGUgcmVmbGV4aXZlCisgIG9wZXJhdGlvbnMgb24gaXRzIHNlbGYsIG5hbWVseSB4IC09IHggYW5kIHggXj0geC4KIAotLSBJc3N1ZSAjOTEyOTogc210cGQucHkgaXMgdnVsbmVyYWJsZSB0byBEb1MgYXR0YWNrcyBkZXJpdmluZyBmcm9tIG1pc3NpbmcKLSAgZXJyb3IgaGFuZGxpbmcgd2hlbiBhY2NlcHRpbmcgYSBuZXcgY29ubmVjdGlvbi4KKy0gSXNzdWUgIzkxMjk6IHNtdHBkLnB5IGlzIHZ1bG5lcmFibGUgdG8gRG9TIGF0dGFja3MgZGVyaXZpbmcgZnJvbSBtaXNzaW5nIGVycm9yCisgIGhhbmRsaW5nIHdoZW4gYWNjZXB0aW5nIGEgbmV3IGNvbm5lY3Rpb24uCisKKy0gSXNzdWUgIzk2MDE6IGZ0cGxpYiBub3cgcHJvdmlkZXMgYSB3b3JrYXJvdW5kIGZvciBub24tY29tcGxpYW50CisgIGltcGxlbWVudGF0aW9ucyBzdWNoIGFzIElJUyBzaGlwcGVkIHdpdGggV2luZG93cyBzZXJ2ZXIgMjAwMyByZXR1cm5pbmcgaW52YWxpZAorICByZXNwb25zZSBjb2RlcyBmb3IgTUtEIGFuZCBQV0QgY29tbWFuZHMuCiAKIC0gSXNzdWUgIzY1ODc0OTogYXN5bmNvcmUncyBjb25uZWN0KCkgbWV0aG9kIG5vdyBjb3JyZWN0bHkgaW50ZXJwcmV0cyB3aW5zb2NrCiAgIGVycm9ycy4KIAotLSBJc3N1ZSAjOTIxNDogU2V0IG9wZXJhdGlvbnMgb24gS2V5c1ZpZXcgb3IgSXRlbXNWaWV3IGluIHRoZSBjb2xsZWN0aW9ucwotICBtb2R1bGUgbm93IGNvcnJlY3RseSByZXR1cm4gYSBzZXQuICAoUGF0Y2ggYnkgRWxpIEJlbmRlcnNreS4pCistIElzc3VlICM5NTAxOiBGaXhlZCBsb2dnaW5nIHJlZ3Jlc3Npb25zIGluIGNsZWFudXAgY29kZS4KKworLSBGaXggZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkgdG8gc2tpcCBtZXRob2RzIGluaGVyaXRlZCBmcm9tIG9iamVjdC4KKworLSBJc3N1ZSAjOTU3MjogSW1wb3J0bGliIHNob3VsZCBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGEgZGlyZWN0b3J5IGl0IHRob3VnaHQKKyAgaXQgbmVlZGVkIHRvIGNyZWF0ZSB3YXMgZG9uZSBjb25jdXJyZW50bHkgYnkgYW5vdGhlciBwcm9jZXNzLgogCiAtIElzc3VlICM5NjE3OiBTaWduYWxzIHJlY2VpdmVkIGR1cmluZyBhIGxvdy1sZXZlbCB3cml0ZSBvcGVyYXRpb24gYXJlbid0CiAgIGlnbm9yZWQgYnkgdGhlIGJ1ZmZlcmVkIElPIGxheWVyIGFueW1vcmUuCiAKKy0gSXNzdWUgIzg0MzU5MDogTWFrZSAibWFjaW50b3NoIiBhbiBhbGlhcyB0byB0aGUgIm1hY19yb21hbiIgZW5jb2RpbmcuCisKKy0gQ3JlYXRlIG9zLmZzZGVjb2RlKCk6IGRlY29kZSBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlCisgIGVycm9yIGhhbmRsZXIsIG9yIHN0cmljdCBlcnJvciBoYW5kbGVyIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzM0ODg6IFByb3ZpZGUgY29udmVuaWVudCBzaG9ydGhhbmQgZnVuY3Rpb25zIGBgZ3ppcC5jb21wcmVzc2BgIGFuZAorICBgYGd6aXAuZGVjb21wcmVzc2BgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQW5hbmQgQi4gUGlsbGFpLgorCistIElzc3VlICM4ODA3OiBwb3BsaWIuUE9QM19TU0wgY2xhc3Mgbm93IGFjY2VwdHMgYSBjb250ZXh0IHBhcmFtZXRlciwgd2hpY2ggaXMgYQorICBzc2wuU1NMQ29udGV4dCBvYmplY3QgYWxsb3dpbmcgYnVuZGxpbmcgU1NMIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywKKyAgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkKKyAgc3RydWN0dXJlLgorCistIElzc3VlICM4ODY2OiBwYXJhbWV0ZXJzIHBhc3NlZCB0byBzb2NrZXQuZ2V0YWRkcmluZm8gY2FuIG5vdyBiZSBzcGVjaWZpZWQgYXMKKyAgc2luZ2xlIGtleXdvcmQgYXJndW1lbnRzLgorCistIEFkZHJlc3MgWFhYIGNvbW1lbnQgaW4gZGlzLnB5IGJ5IGhhdmluZyBpbnNwZWN0LnB5IHByZWZlciB0byByZXVzZSB0aGUgZGlzLnB5CisgIGNvbXBpbGVyIGZsYWcgdmFsdWVzIG92ZXIgZGVmaW5pbmcgaXRzIG93bi4KKworLSBJc3N1ZSAjOTE0NzogQWRkZWQgZGlzLmNvZGVfaW5mbygpIHdoaWNoIGlzIHNpbWlsYXIgdG8gc2hvd19jb2RlKCkgYnV0IHJldHVybnMKKyAgZm9ybWF0dGVkIGNvZGUgaW5mb3JtYXRpb24gaW4gYSBzdHJpbmcgcmF0aGVyIHRoYW4gZGlzcGxheWluZyBvbiBzY3JlZW4uCisKKy0gSXNzdWUgIzk1Njc6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciBub3cgYWRkcyBhIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZQorICBwb2ludGluZyB0byB0aGUgb3JpZ2luYWwgY2FsbGFibGUuCisKKy0gSXNzdWUgIzM0NDU6IGZ1bmN0b29scy51cGRhdGVfd3JhcHBlciBub3cgdG9sZXJhdGVzIG1pc3NpbmcgYXR0cmlidXRlcyBvbgorICB3cmFwcGVkIGNhbGxhYmxlcy4KKworLSBJc3N1ZSAjNTg2NzogQWRkIGFiYy5hYnN0cmFjdGNsYXNzbWV0aG9kIGFuZCBhYmMuYWJzdHJhY3RzdGF0aWNtZXRob2QuCisKIC0gSXNzdWUgIzk2MDU6IHBvc2l4LmdldGxvZ2luKCkgZGVjb2RlcyB0aGUgdXNlcm5hbWUgd2l0aCBmaWxlIGZpbGVzeXN0ZW0KICAgZW5jb2RpbmcgYW5kIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyLiBQYXRjaCB3cml0dGVuIGJ5IERhdmlkIFdhdHNvbi4KIAorLSBJc3N1ZSAjOTYwNDogcG9zaXguaW5pdGdyb3VwcygpIGVuY29kZXMgdGhlIHVzZXJuYW1lIHVzaW5nIHRoZSBmaWxleXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyLiBQYXRjaCB3cml0dGVuIGJ5IERhdmlkIFdhdHNvbi4KKwogLSBJc3N1ZSAjOTYwMzogcG9zaXgudHR5bmFtZSgpIGFuZCBwb3NpeC5jdGVybWlkKCkgZGVjb2RlIHRoZSB0ZXJtaW5hbCBuYW1lCi0gIHVzaW5nIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGFuZCBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlci4gUGF0Y2gKLSAgd3JpdHRlbiBieSBEYXZpZCBXYXRzb24uCisgIHVzaW5nIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nIGFuZCBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlci4gUGF0Y2ggd3JpdHRlbgorICBieSBEYXZpZCBXYXRzb24uCiAKLS0gSXNzdWUgIzg2ODg6IE1BTklGRVNUIGZpbGVzIGNyZWF0ZWQgYnkgZGlzdHV0aWxzIG5vdyBpbmNsdWRlIGEgbWFnaWMKLSAgY29tbWVudCBpbmRpY2F0aW5nIHRoZXkgYXJlIGdlbmVyYXRlZC4gIE1hbnVhbGx5IG1haW50YWluZWQgTUFOSUZFU1RzCi0gIHdpdGhvdXQgdGhpcyBtYXJrZXIgd2lsbCBub3QgYmUgb3ZlcndyaXR0ZW4gb3IgcmVtb3ZlZC4KKy0gSXNzdWUgIzc2NDc6IFRoZSBwb3NpeCBtb2R1bGUgbm93IGhhcyB0aGUgU1RfUkRPTkxZIGFuZCBTVF9OT1NVSUQgY29uc3RhbnRzLAorICBmb3IgdXNlIHdpdGggdGhlIHN0YXR2ZnMoKSBmdW5jdGlvbi4gIFBhdGNoIGJ5IEFkYW0gSmFja3Nvbi4KIAotLSBJc3N1ZSAjNzQ2Nzogd2hlbiByZWFkaW5nIGEgZmlsZSBmcm9tIGEgWklQIGFyY2hpdmUsIGl0cyBDUkMgaXMgY2hlY2tlZAotICBhbmQgYSBCYWRaaXBmaWxlIGVycm9yIGlzIHJhaXNlZCBpZiBpdCBkb2Vzbid0IG1hdGNoIChhcyB1c2VkIHRvIGJlIHRoZQotICBjYXNlIGluIFB5dGhvbiAyLjUgYW5kIGVhcmxpZXIpLgorLSBJc3N1ZSAjODY4ODogTUFOSUZFU1QgZmlsZXMgY3JlYXRlZCBieSBkaXN0dXRpbHMgbm93IGluY2x1ZGUgYSBtYWdpYyBjb21tZW50CisgIGluZGljYXRpbmcgdGhleSBhcmUgZ2VuZXJhdGVkLiAgTWFudWFsbHkgbWFpbnRhaW5lZCBNQU5JRkVTVHMgd2l0aG91dCB0aGlzCisgIG1hcmtlciB3aWxsIG5vdCBiZSBvdmVyd3JpdHRlbiBvciByZW1vdmVkLgogCi0tIElzc3VlICM5NTUwOiBhIEJ1ZmZlcmVkUmVhZGVyIGNvdWxkIGlzc3VlIGFuIGFkZGl0aW9uYWwgcmVhZCB3aGVuIHRoZQotICBvcmlnaW5hbCByZWFkIHJlcXVlc3QgaGFkIGJlZW4gc2F0aXNmaWVkLCB3aGljaCBjb3VsZCBibG9jayBpbmRlZmluaXRlbHkKLSAgd2hlbiB0aGUgdW5kZXJseWluZyByYXcgSU8gY2hhbm5lbCB3YXMgZS5nLiBhIHNvY2tldC4gIFJlcG9ydCBhbmQgb3JpZ2luYWwKLSAgcGF0Y2ggYnkgSmFzb24gVi4gTWlsbGVyLgorLSBJc3N1ZSAjNzQ2Nzogd2hlbiByZWFkaW5nIGEgZmlsZSBmcm9tIGEgWklQIGFyY2hpdmUsIGl0cyBDUkMgaXMgY2hlY2tlZCBhbmQgYQorICBCYWRaaXBmaWxlIGVycm9yIGlzIHJhaXNlZCBpZiBpdCBkb2Vzbid0IG1hdGNoIChhcyB1c2VkIHRvIGJlIHRoZSBjYXNlIGluCisgIFB5dGhvbiAyLjUgYW5kIGVhcmxpZXIpLgogCi0tIElzc3VlICM2OTE1OiBVbmRlciBXaW5kb3dzLCBvcy5saXN0ZGlyKCkgZGlkbid0IHJlbGVhc2UgdGhlIEdsb2JhbAotICBJbnRlcnByZXRlciBMb2NrIGFyb3VuZCBhbGwgc3lzdGVtIGNhbGxzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUnlhbiBLZWxseS4KKy0gSXNzdWUgIzk1NTA6IGEgQnVmZmVyZWRSZWFkZXIgY291bGQgaXNzdWUgYW4gYWRkaXRpb25hbCByZWFkIHdoZW4gdGhlIG9yaWdpbmFsCisgIHJlYWQgcmVxdWVzdCBoYWQgYmVlbiBzYXRpc2ZpZWQsIHdoaWNoIGNvdWxkIGJsb2NrIGluZGVmaW5pdGVseSB3aGVuIHRoZQorICB1bmRlcmx5aW5nIHJhdyBJTyBjaGFubmVsIHdhcyBlLmcuIGEgc29ja2V0LiAgUmVwb3J0IGFuZCBvcmlnaW5hbCBwYXRjaCBieQorICBKYXNvbiBWLiBNaWxsZXIuCiAKIC0gSXNzdWUgIzM3NTc6IHRocmVhZC1sb2NhbCBvYmplY3RzIG5vdyBzdXBwb3J0IGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3Rpb24uCi0gIFRocmVhZC1sb2NhbCBvYmplY3RzIGludm9sdmVkIGluIHJlZmVyZW5jZSBjeWNsZXMgd2lsbCBiZSBkZWFsbG9jYXRlZAotICB0aW1lbHkgYnkgdGhlIGN5Y2xpYyBHQywgZXZlbiBpZiB0aGUgdW5kZXJseWluZyB0aHJlYWQgaXMgc3RpbGwgcnVubmluZy4KKyAgVGhyZWFkLWxvY2FsIG9iamVjdHMgaW52b2x2ZWQgaW4gcmVmZXJlbmNlIGN5Y2xlcyB3aWxsIGJlIGRlYWxsb2NhdGVkIHRpbWVseQorICBieSB0aGUgY3ljbGljIEdDLCBldmVuIGlmIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nLgogCi0tIEZpeCBJc3N1ZTgyODAgLSB1cmxsaWIyJ3MgUmVxdWVzdCBtZXRob2Qgd2lsbCByZW1vdmUgZnJhZ2VtZW50cyBpbiB0aGUgdXJsLgotICBUaGlzIGlzIGhvdyBpdCBpcyBzdXBwb3NlZCB0byB3b3JrLCB3Z2V0IGFuZCBjdXJsIGRvIHRoZSBzYW1lLiAgUHJldmlvdXMKLSAgYmVoYXZpb3Igd2FzIHdyb25nLgorLSBJc3N1ZSAjOTQ1MjogQWRkIHJlYWRfZmlsZSwgcmVhZF9zdHJpbmcsIGFuZCByZWFkX2RpY3QgdG8gdGhlIGNvbmZpZ3BhcnNlcgorICBBUEk7IG5ldyBzb3VyY2UgYXR0cmlidXRlIHRvIGV4Y2VwdGlvbnMuCisKKy0gSXNzdWUgIzYyMzE6IEZpeCB4bWwuZXRyZWUuRWxlbWVudEluY2x1ZGUgdG8gaW5jbHVkZSB0aGUgdGFpbCBvZiB0aGUgY3VycmVudAorICBub2RlLgorCistIElzc3VlICM4MDQ3OiBGaXggdGhlIHhtbC5ldHJlZSBzZXJpYWxpemVyIHRvIHJldHVybiBieXRlcyBieSBkZWZhdWx0LiAgVXNlCisgIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8gZ2VuZXJhdGUgYSBVbmljb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjODI4MDogdXJsbGliMidzIFJlcXVlc3QgbWV0aG9kIHdpbGwgcmVtb3ZlIGZyYWdtZW50cyBpbiB0aGUgdXJsLiAgVGhpcworICBpcyBob3cgaXQgaXMgc3VwcG9zZWQgdG8gd29yaywgd2dldCBhbmQgY3VybCBkbyB0aGUgc2FtZS4gIFByZXZpb3VzIGJlaGF2aW9yCisgIHdhcyB3cm9uZy4KKworLSBJc3N1ZSAjNjY4MzogRm9yIFNNVFAgbG9naW5zIHdlIG5vdyB0cnkgYWxsIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYWR2ZXJ0aXNlZAorICBieSB0aGUgc2VydmVyLiAgTWFueSBzZXJ2ZXJzIGFyZSBidWdneSBhbmQgYWR2ZXJ0aXNlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMKKyAgdGhleSBkbyBub3Qgc3VwcG9ydCBpbiByZWFsaXR5LgorCistIElzc3VlICM4ODE0OiBmdW5jdGlvbiBhbm5vdGF0aW9ucyAodGhlIGBgX19hbm5vdGF0aW9uc19fYGAgYXR0cmlidXRlKSBhcmUgbm93CisgIGluY2x1ZGVkIGluIHRoZSBzZXQgb2YgYXR0cmlidXRlcyBjb3BpZWQgYnkgZGVmYXVsdCBieSBmdW5jdG9vbHMud3JhcHMgYW5kCisgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlci4gIFBhdGNoIGJ5IFRlcnJlbmNlIENvbGUuCiAKIC0gSXNzdWUgIzI5NDQ6IGFzeW5jb3JlIGRvZXNuJ3QgaGFuZGxlIGNvbm5lY3Rpb24gcmVmdXNlZCBjb3JyZWN0bHkuCiAKLS0gSXNzdWUgIzMxOTY6IGVtYWlsIGhlYWRlciBkZWNvZGluZyBpcyBub3cgZm9yZ2l2aW5nIGlmIGFuIFJGQzIwNDcKLSAgZW5jb2RlZCB3b3JkIGVuY29kZWQgaW4gYmFzZTY0IGlzIGxhY2tpbmcgcGFkZGluZy4KKy0gSXNzdWUgIzQxODQ6IFByaXZhdGUgYXR0cmlidXRlcyBvbiBzbXRwZC5TTVRQQ2hhbm5lbCBtYWRlIHB1YmxpYyBhbmQgZGVwcmVjYXRlCisgIHRoZSBwcml2YXRlIGF0dHJpYnV0ZXMuIEFkZCB0ZXN0cyBmb3Igc210cGQgbW9kdWxlLgogCi0tIElzc3VlICM4NDQ3OiBNYWtlIGRpc3R1dGlscy5zeXNjb25maWcgZm9sbG93IHN5bWxpbmtzIGluIHRoZSBwYXRoIHRvCi0gIHRoZSBpbnRlcnByZXRlciBleGVjdXRhYmxlLiAgVGhpcyBmaXhlcyBhIGZhaWx1cmUgb2YgdGVzdF9odHRwc2VydmVycwotICBvbiBPUyBYLgorLSBJc3N1ZSAjMzE5NjogZW1haWwgaGVhZGVyIGRlY29kaW5nIGlzIG5vdyBmb3JnaXZpbmcgaWYgYW4gUkZDMjA0NyBlbmNvZGVkIHdvcmQKKyAgZW5jb2RlZCBpbiBiYXNlNjQgaXMgbGFja2luZyBwYWRkaW5nLgogCi0tIElzc3VlICM3MzcyOiBGaXggcHN0YXRzIHJlZ3Jlc3Npb24gd2hlbiBzdHJpcHBpbmcgcGF0aHMgZnJvbSBwcm9maWxlCi0gIGRhdGEgZ2VuZXJhdGVkIHdpdGggdGhlIHByb2ZpbGUgbW9kdWxlLgorLSBJc3N1ZSAjOTQ0NDogQXJncGFyc2Ugbm93IHVzZXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgcHJlZml4X2NoYXJzIGFzIHRoZSBvcHRpb24KKyAgY2hhcmFjdGVyIGZvciB0aGUgYWRkZWQgJ2gvaGVscCcgb3B0aW9uIGlmIHByZWZpeF9jaGFycyBkb2VzIG5vdCBjb250YWluIGEKKyAgJy0nLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuCiAKLS0gSXNzdWUgIzQxMDg6IEluIHVybGxpYi5yb2JvdHBhcnNlciwgaWYgdGhlcmUgYXJlIG11bHRpcGxlICdVc2VyLWFnZW50OiAqJwotICBlbnRyaWVzLCBjb25zaWRlciB0aGUgZmlyc3Qgb25lLgorLSBJc3N1ZSAjNzM3MjogRml4IHBzdGF0cyByZWdyZXNzaW9uIHdoZW4gc3RyaXBwaW5nIHBhdGhzIGZyb20gcHJvZmlsZSBkYXRhCisgIGdlbmVyYXRlZCB3aXRoIHRoZSBwcm9maWxlIG1vZHVsZS4KIAotLSBJc3N1ZSAjODM5NzogUmFpc2UgYW4gZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIG1peCBpdGVyYXRpb24gYW5kIHJlZ3VsYXIKLSAgcmVhZHMgb24gYSBCWjJGaWxlIG9iamVjdCwgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGluY29ycmVjdCByZXN1bHRzLgorLSBJc3N1ZSAjOTQyODogRml4IHJ1bm5pbmcgc2NyaXB0cyB3aXRoIHRoZSBwcm9maWxlL2NQcm9maWxlIG1vZHVsZXMgZnJvbSB0aGUKKyAgY29tbWFuZCBsaW5lLgogCi0tIElzc3VlICM3OTA5OiBEbyBub3QgdG91Y2ggcGF0aHMgd2l0aCB0aGUgc3BlY2lhbCBwcmVmaXhlcyBgYFxcLlxgYAotICBvciBgYFxcP1xgYCBpbiBudHBhdGgubm9ybXBhdGgoKS4KKy0gSXNzdWUgIzc3ODE6IEZpeCByZXN0cmljdGluZyBzdGF0cyBieSBlbnRyeSBjb3VudHMgaW4gdGhlIHBzdGF0cyBpbnRlcmFjdGl2ZQorICBicm93c2VyLgogCi0tIElzc3VlICM1Mjk0OiBGaXggdGhlIGJlaGF2aW9yIG9mIHBkYidzICJjb250aW51ZSIgY29tbWFuZCB3aGVuIGNhbGxlZAotICBpbiB0aGUgdG9wLWxldmVsIGRlYnVnZ2VkIGZyYW1lLgorLSBJc3N1ZSAjOTIwOTogRG8gbm90IGNyYXNoIGluIHRoZSBwc3RhdHMgaW50ZXJhY3RpdmUgYnJvd3NlciBvbiBpbnZhbGlkIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuCiAKLS0gSXNzdWUgIzU3Mjc6IFJlc3RvcmUgdGhlIGFiaWxpdHkgdG8gdXNlIHJlYWRsaW5lIHdoZW4gY2FsbGluZyBpbnRvIHBkYgotICBpbiBkb2N0ZXN0cy4KKy0gVXBkYXRlIGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0IHRvIG1hdGNoIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBQeTIuNyAoYmFzZWQgb24KKyAgbGlzdHMgaW5zdGVhZCBvZiB3ZWFrbHkgcmVmZXJlbmNlZCBMaW5rIG9iamVjdHMpLgogCi0tIElzc3VlICM2NzE5OiBJbiBwZGIsIGRvIG5vdCBzdG9wIHNvbWV3aGVyZSBpbiB0aGUgZW5jb2RpbmdzIG1hY2hpbmVyeQotICBpZiB0aGUgc291cmNlIGZpbGUgdG8gYmUgZGVidWdnZWQgaXMgaW4gYSBub24tYnVpbHRpbiBlbmNvZGluZy4KKy0gSXNzdWUgIzgzOTc6IFJhaXNlIGFuIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBtaXggaXRlcmF0aW9uIGFuZCByZWd1bGFyIHJlYWRzCisgIG9uIGEgQloyRmlsZSBvYmplY3QsIHJhdGhlciB0aGFuIHJldHVybmluZyBpbmNvcnJlY3QgcmVzdWx0cy4KIAotLSBJc3N1ZSAjODA0ODogUHJldmVudCBkb2N0ZXN0cyBmcm9tIGZhaWxpbmcgd2hlbiBzeXMuZGlzcGxheWhvb2sgaGFzCi0gIGJlZW4gcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjODAxNTogSW4gcGRiLCBkbyBub3QgY3Jhc2ggd2hlbiBhbiBlbXB0eSBsaW5lIGlzIGVudGVyZWQgYXMKLSAgYSBicmVha3BvaW50IGNvbW1hbmQuCi0KLS0gSXNzdWUgIzUxNDY6IEhhbmRsZSBVSUQgVEhSRUFEIGNvbW1hbmQgY29ycmVjdGx5IGluIGltYXBsaWIuCi0KLS0gSXNzdWUgIzUxNDc6IEZpeCB0aGUgaGVhZGVyIGdlbmVyYXRlZCBmb3IgY29va2llIGZpbGVzIHdyaXR0ZW4gYnkKLSAgaHR0cC5jb29raWVqYXIuTW96aWxsYUNvb2tpZUphci4KLQotLSBJc3N1ZSAjODE5ODogSW4gcHlkb2MsIG91dHB1dCBhbGwgaGVscCB0ZXh0IHRvIHRoZSBjb3JyZWN0IHN0cmVhbQotICB3aGVuIHN5cy5zdGRvdXQgaXMgcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjODIzMDogRml4IExpYi90ZXN0L3NvcnRwZXJmLnB5LgotCi0tIElzc3VlICM3Mzk1OiBGaXggdHJhY2ViYWNrcyBpbiBwc3RhdHMgaW50ZXJhY3RpdmUgYnJvd3Nlci4KKy0gSXNzdWUgIzk0NDg6IEZpeCBhIGxlYWsgb2YgT1MgcmVzb3VyY2VzIChtdXRleGVzIG9yIHNlbWFwaG9yZXMpIHdoZW4KKyAgcmUtaW5pdGlhbGl6aW5nIGEgYnVmZmVyZWQgSU8gb2JqZWN0IGJ5IGNhbGxpbmcgaXRzIGBgX19pbml0X19gYCBtZXRob2QuCiAKIC0gSXNzdWUgIzE3MTM6IEZpeCBvcy5wYXRoLmlzbW91bnQoKSwgd2hpY2ggcmV0dXJuZWQgdHJ1ZSBmb3Igc3ltYm9saWMgbGlua3MKICAgYWNyb3NzIGRldmljZXMuCkBAIC04MDQsMTEwICsyMzM2LDc4MiBAQAogCiAtIElzc3VlICMxNjkwMTAzOiBGaXggaW5pdGlhbCBuYW1lc3BhY2UgZm9yIGNvZGUgcnVuIHdpdGggdHJhY2UubWFpbigpLgogCistIElzc3VlICM3Mzk1OiBGaXggdHJhY2ViYWNrcyBpbiBwc3RhdHMgaW50ZXJhY3RpdmUgYnJvd3Nlci4KKworLSBJc3N1ZSAjODIzMDogRml4IExpYi90ZXN0L3NvcnRwZXJmLnB5LgorCistIElzc3VlICM4NjIwOiB3aGVuIGEgY21kLkNtZCgpIGlzIGZlZCBpbnB1dCB0aGF0IHJlYWNoZXMgRU9GIHdpdGhvdXQgYSBmaW5hbAorICBuZXdsaW5lLCBpdCBubyBsb25nZXIgdHJ1bmNhdGVzIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgbGFzdCBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzUxNDY6IEhhbmRsZSBVSUQgVEhSRUFEIGNvbW1hbmQgY29ycmVjdGx5IGluIGltYXBsaWIuCisKKy0gSXNzdWUgIzUxNDc6IEZpeCB0aGUgaGVhZGVyIGdlbmVyYXRlZCBmb3IgY29va2llIGZpbGVzIHdyaXR0ZW4gYnkKKyAgaHR0cC5jb29raWVqYXIuTW96aWxsYUNvb2tpZUphci4KKworLSBJc3N1ZSAjODE5ODogSW4gcHlkb2MsIG91dHB1dCBhbGwgaGVscCB0ZXh0IHRvIHRoZSBjb3JyZWN0IHN0cmVhbSB3aGVuCisgIHN5cy5zdGRvdXQgaXMgcmVhc3NpZ25lZC4KKworLSBJc3N1ZSAjNzkwOTogRG8gbm90IHRvdWNoIHBhdGhzIHdpdGggdGhlIHNwZWNpYWwgcHJlZml4ZXMgYGBcXC5cYGAgb3IgYGBcXD9cYGAKKyAgaW4gbnRwYXRoLm5vcm1wYXRoKCkuCisKKy0gSXNzdWUgIzEyODY6IEFsbG93IHVzaW5nIGZpbGVpbnB1dC5GaWxlSW5wdXQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCisKKy0gQWRkIGxydV9jYWNoZSgpIGRlY29yYXRvciB0byB0aGUgZnVuY3Rvb2xzIG1vZHVsZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gRml4IGBgVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weWBgIGFmdGVyIFBFUCAzMTQ3LgorCistIElzc3VlICM4ODY3OiBGaXggYGBUb29scy9zY3JpcHRzL3NlcnZlLnB5YGAgdG8gd29yayB3aXRoIGZpbGVzIGNvbnRhaW5pbmcKKyAgbm9uLUFTQ0lJIGNvbnRlbnQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICM5NjAxOiBQcm92aWRlIGEgdGVzdCBjYXNlIGZvciBmdHBsaWIucGFyc2UyNTcuCisKKy0gSXNzdWUgIzg4NTc6IFByb3ZpZGUgYSB0ZXN0IGNhc2UgZm9yIHNvY2tldC5nZXRhZGRyaW5mby4KKworLSBJc3N1ZSAjNzU2NDogU2tpcCB0ZXN0X2lvY3RsIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBhdHRhY2hlZCB0byAvZGV2L3R0eS4KKworLSBJc3N1ZSAjODQzMzogRml4IHRlc3RfY3Vyc2VzIGZhaWx1cmUgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgorCistIElzc3VlICM5NDk2OiBQcm92aWRlIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHJsY29tcGxldGVyIG1vZHVsZS4gIFBhdGNoIGJ5CisgIE1pY2hlbGUgT3Jyw7kuCisKKy0gSXNzdWUgIzg2ODc6IHByb3ZpZGUgYSB0ZXN0IHN1aXRlIGZvciBzY2hlZC5weSBtb2R1bGUuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxMzAzNDM0OiBHZW5lcmF0ZSBaSVAgZmlsZSBjb250YWluaW5nIGFsbCBQREJzLgorCistIElzc3VlICM5MTkzOiBQRVAgMzE0OSBpcyBhY2NlcHRlZC4KKworLSBJc3N1ZSAjMzEwMTogSGVscGVyIGZ1bmN0aW9ucyBfYWRkX29uZV90b19pbmRleF9DKCkgYW5kIF9hZGRfb25lX3RvX2luZGV4X0YoKQorICBiZWNvbWUgX1B5X2FkZF9vbmVfdG9faW5kZXhfQygpIGFuZCBfUHlfYWRkX29uZV90b19pbmRleF9GKCksIHJlc3BlY3RpdmVseS4KKworLSBJc3N1ZSAjOTcwMDogZGVmaW5lIEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMgdW5kZXIgQUlYIDYueC4gIFBhdGNoIGJ5CisgIFPDqWJhc3RpZW4gU2FibMOpLgorCistIERvbid0IHJ1biBwZ2VuIHR3aWNlIHdoZW4gdXNpbmcgbWFrZSAtai4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjIgQWxwaGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwMS1BdWctMjAxMCoKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzg5OTE6IGNvbnZlcnRidWZmZXIoKSByZWplY3RzIGRpc2NvbnRpZ2lvdXMgYnVmZmVycy4KKworLSBJc3N1ZSAjNzYxNjogRml4IGNvcHlpbmcgb2Ygb3ZlcmxhcHBpbmcgbWVtb3J5dmlldyBzbGljZXMgd2l0aCB0aGUgSW50ZWwKKyAgY29tcGlsZXIuCisKKy0gSXNzdWUgIzg0MTM6IHN0cnVjdHNlcXVlbmNlIG5vdyBzdWJjbGFzc2VzIHR1cGxlLgorCistIElzc3VlICM4MjcxOiBkdXJpbmcgdGhlIGRlY29kaW5nIG9mIGFuIGludmFsaWQgVVRGLTggYnl0ZSBzZXF1ZW5jZSwgb25seSB0aGUKKyAgc3RhcnQgYnl0ZSBhbmQgdGhlIGNvbnRpbnVhdGlvbiBieXRlKHMpIGFyZSBub3cgY29uc2lkZXJlZCBpbnZhbGlkLCBpbnN0ZWFkIG9mCisgIHRoZSBudW1iZXIgb2YgYnl0ZXMgc3BlY2lmaWVkIGJ5IHRoZSBzdGFydCBieXRlLiAgRS5nLjoKKyAgJ1x4ZjFceDgwQUInLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpIG5vdyByZXR1cm5zIHUnXHVmZmZkQUInIGFuZCByZXBsYWNlcworICB3aXRoIFUrRkZGRCBvbmx5IHRoZSBzdGFydCBieXRlICgnXHhmMScpIGFuZCB0aGUgY29udGludWF0aW9uIGJ5dGUgKCdceDgwJykKKyAgZXZlbiBpZiAnXHhmMScgaXMgdGhlIHN0YXJ0IGJ5dGUgb2YgYSA0LWJ5dGVzIHNlcXVlbmNlLiAgUHJldmlvdXMgdmVyc2lvbnMKKyAgcmV0dXJuZWQgYSBzaW5nbGUgdSdcdWZmZmQnLgorCistIElzc3VlICM5MDExOiBBIG5lZ2F0ZWQgaW1hZ2luYXJ5IGxpdGVyYWwgKGUuZy4sICItN2oiKSBub3cgaGFzIHJlYWwgcGFydCAtMC4wCisgIHJhdGhlciB0aGFuIDAuMC4gIFNvICItN2oiIGlzIG5vdyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gIi0oN2opIi4KKworLSBCZSBtb3JlIHNwZWNpZmljIGluIGVycm9yIG1lc3NhZ2VzIGFib3V0IHBvc2l0aW9uYWwgYXJndW1lbnRzLgorCistIElzc3VlICM4OTQ5OiAieiIgZm9ybWF0IG9mIFB5QXJnX1BhcnNlKigpIGZ1bmN0aW9ucyBkb2Vzbid0IGFjY2VwdCBieXRlcworICBvYmplY3RzLCBhcyBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzY1NDM6IFdyaXRlIHRoZSB0cmFjZWJhY2sgaW4gdGhlIHRlcm1pbmFsIGVuY29kaW5nIGluc3RlYWQgb2YgdXRmLTguCisgIEZpeCB0aGUgZW5jb2Rpbmcgb2YgdGhlIG1vZHVsZXMgZmlsZW5hbWUuICBQYXRjaCB3cml0dGVuIGJ5IEFtYXVyeSBGb3JnZW90CisgIGQnQXJjLgorCistIElzc3VlICM5MDExOiBSZW1vdmUgYnVnZ3kgYW5kIHVubmVjZXNzYXJ5IChpbiAzLngpIFNULT5BU1QgY29tcGlsYXRpb24gY29kZQorICBkZWFsaW5nIHdpdGggdW5hcnkgbWludXMgYXBwbGllZCB0byBhIGNvbnN0YW50LiAgVGhlIHJlbW92ZWQgY29kZSB3YXMgbXV0YXRpbmcKKyAgdGhlIFNULCBjYXVzaW5nIGEgc2Vjb25kIGNvbXBpbGF0aW9uIHRvIGZhaWwuCisKKy0gSXNzdWUgIzg1MDk5NzogbWJjcyBlbmNvZGluZyAoV2luZG93cyBvbmx5KSBoYW5kbGVzIGVycm9ycyBhcmd1bWVudDogc3RyaWN0CisgIG1vZGUgcmFpc2VzIHVuaWNvZGUgZXJyb3JzLiAgVGhlIGVuY29kZXIgb25seSBzdXBwb3J0cyAic3RyaWN0IiBhbmQgInJlcGxhY2UiCisgIGVycm9yIGhhbmRsZXJzLCB0aGUgZGVjb2RlciBvbmx5IHN1cHBvcnRzICJzdHJpY3QiIGFuZCAiaWdub3JlIiBlcnJvcgorICBoYW5kbGVycy4gIFBhdGNoIHdyaXR0ZW4gYnkgTWFyayBIYW1tb25kLgorCistIElzc3VlICM4ODUwOiBSZW1vdmUgInciIGFuZCAidyMiIGZvcm1hdHMgZnJvbSBQeUFyZ19QYXJzZSooKSBmdW5jdGlvbnMsIHVzZQorICAidyoiIGZvcm1hdCBpbnN0ZWFkLiBBZGQgdGVzdHMgZm9yICJ3KiIgZm9ybWF0LgorCistIElzc3VlICM4NTkyOiBQeUFyZ19QYXJzZSooKSBmdW5jdGlvbnMgcmFpc2UgYSBUeXBlRXJyb3IgZm9yICJ5IiwgInUiIGFuZCAiWiIKKyAgZm9ybWF0cyBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVsbCBieXRlL2NoYXJhY3Rlci4gIFdyaXRlIHVuaXQgdGVzdHMgZm9yCisgIHN0cmluZyBmb3JtYXRzLgorCistIElzc3VlICM3NDkwOiBUbyBmYWNpbGl0YXRlIHNoYXJpbmcgb2YgZG9jdGVzdHMgYmV0d2VlbiAyLnggYW5kIDMueCB0ZXN0CisgIHN1aXRlcywgdGhlIElHTk9SRV9FWENFUFRJT05fREVUQUlMIGRpcmVjdGl2ZSBub3cgYWxzbyBpZ25vcmVzIHRoZSBtb2R1bGUKKyAgbG9jYXRpb24gb2YgdGhlIHJhaXNlZCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzg5Njk6IE9uIFdpbmRvd3MsIHVzZSBtYmNzIGNvZGVjIGluIHN0cmljdCBtb2RlIHRvIGVuY29kZSBhbmQgZGVjb2RlCisgIGZpbGVuYW1lcyBhbmQgZW5hYmxlIG9zLmZzZW5jb2RlKCkuCisKKy0gSXNzdWUgIzkwNTg6IFJlbW92ZSBhc3NlcnRpb25zIGFib3V0IElOVF9NQVggaW4gVW5pY29kZURlY29kZUVycm9yLgorCistIElzc3VlICM4OTQxOiBEZWNvZGluZyBiaWcgZW5kaWFuIFVURi0zMiBkYXRhIGluIFVDUy0yIGJ1aWxkcyBjb3VsZCBjcmFzaCB0aGUKKyAgaW50ZXJwcmV0ZXIgd2l0aCBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoaGlnaGVyIHRoYW4KKyAgMHgxMDAwMCkuCisKKy0gSXNzdWUgIzg5NTA6IChTZWUgYWxzbyBpc3N1ZSAjNTA4MCkuICBQeV9BcmdQYXJzZSooKSBmdW5jdGlvbnMgbm93IHJhaXNlCisgIFR5cGVFcnJvciBpbnN0ZWFkIG9mIGdpdmluZyBhIERlcHJlY2F0aW9uV2FybmluZyB3aGVuIGEgZmxvYXQgaXMgcGFyc2VkIHVzaW5nCisgIHRoZSAnTCcgY29kZSAoZm9yIGxvbmcgbG9uZykuICAoQWxsIG90aGVyIGludGVnZXIgY29kZXMgYWxyZWFkeSByYWlzZQorICBUeXBlRXJyb3IgaW4gdGhpcyBjYXNlLikKKworLSBJc3N1ZSAjODkyMjogTm9ybWFsaXplIHRoZSBlbmNvZGluZyBuYW1lIGluIFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoKSB0bworICBlbmFibGUgc2hvcnRjdXRzIGZvciB1cHBlciBjYXNlIGVuY29kaW5nIG5hbWUuIEFkZCBhbHNvIGEgc2hvcnRjdXQgZm9yCisgICJpc28tODg1OS0xIiBpbiBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKCkgYW5kIFB5VW5pY29kZV9EZWNvZGUoKS4KKworLSBJc3N1ZSAjODgzODogUmVtb3ZlIGNvZGVjcy5jaGFyYnVmZmVyX2VuY29kZSgpIGZ1bmN0aW9uLiAgVGhlIGJ1ZmZlciBwcm90b2NvbAorICBkb2Vzbid0IHN1cHBvcnQgImNoYXIgYnVmZmVyIiBhbnltb3JlIGluIFB5dGhvbiAzLgorCistIElzc3VlICM4MzM5OiBSZW1vdmUgInQjIiBmb3JtYXQgb2YgUHlBcmdfUGFyc2UqKCkgZnVuY3Rpb25zLCB1c2UgInMjIiBvciAicyoiCisgIGluc3RlYWQuICBjb2RlY3MuY2hhcmJ1ZmZlcl9lbmNvZGUoKSBub3cgYWNjZXB0cyBtb2RpZmlhYmxlIGJ1ZmZlciBvYmplY3RzCisgIGxpa2UgYnl0ZWFycmF5LgorCistIElzc3VlICM4ODM3OiBSZW1vdmUgIk8/IiBmb3JtYXQgb2YgUHlBcmdfUGFyc2UqKCkgZnVuY3Rpb25zLiAgVGhlIGZvcm1hdCBpcyBubworICB1c2VkIGFueW1vcmUgYW5kIGl0IHdhcyBuZXZlciBkb2N1bWVudGVkLgorCistIEluIHN0ci5mb3JtYXQoKSwgcmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gaW5kZXhlcyB0byBhcmd1bWVudHMgYXJlIHRvbyBsYXJnZS4KKworLSBJc3N1ZSAjMjg0NDogTWFrZSBpbnQoJzQyJywgbikgY29uc2lzdGVudGx5IHJhaXNlIFZhbHVlRXJyb3IgZm9yIGludmFsaWQKKyAgaW50ZWdlcnMgbiAoaW5jbHVkaW5nIG4gPSAtOTA5KS4KKworLSBJc3N1ZSAjODE4ODogSW50cm9kdWNlIGEgbmV3IHNjaGVtZSBmb3IgY29tcHV0aW5nIGhhc2hlcyBvZiBudW1iZXJzIChpbnN0YW5jZXMKKyAgb2YgaW50LCBmbG9hdCwgY29tcGxleCwgZGVjaW1hbC5EZWNpbWFsIGFuZCBmcmFjdGlvbnMuRnJhY3Rpb24pIHRoYXQgbWFrZXMgaXQKKyAgZWFzeSB0byBtYWludGFpbiB0aGUgaW52YXJpYW50IHRoYXQgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgaGF2ZQorICBlcXVhbCB2YWx1ZS4KKworLSBJc3N1ZSAjODc0ODogRml4IHR3byBpc3N1ZXMgd2l0aCBjb21wYXJpc29ucyBiZXR3ZWVuIGNvbXBsZXggYW5kIGludGVnZXIKKyAgb2JqZWN0cy4gICgxKSBUaGUgY29tcGFyaXNvbiBjb3VsZCBpbmNvcnJlY3RseSByZXR1cm4gVHJ1ZSBpbiBzb21lIGNhc2VzCisgICgyKio1MysxID09IGNvbXBsZXgoMioqNTMpID09IDIqKjUzKSwgYnJlYWtpbmcgdHJhbnNpdGl2aXR5IG9mIGVxdWFsaXR5LgorICAoMikgVGhlIGNvbXBhcmlzb24gcmFpc2VkIGFuIE92ZXJmbG93RXJyb3IgZm9yIGxhcmdlIGludGVnZXJzLCBsZWFkaW5nIHRvCisgIHVucHJlZGljdGFibGUgZXhjZXB0aW9ucyB3aGVuIGNvbWJpbmluZyBpbnRlZ2VycyBhbmQgY29tcGxleCBvYmplY3RzIGluIHNldHMKKyAgb3IgZGljdHMuCisKKy0gSXNzdWUgIzg3NjY6IEluaXRpYWxpemUgX3dhcm5pbmdzIG1vZHVsZSBiZWZvcmUgaW1wb3J0aW5nIHRoZSBmaXJzdCBtb2R1bGUuCisgIEZpeCBhIGNyYXNoIGlmIGFuIGVtcHR5IGRpcmVjdG9yeSBjYWxsZWQgImVuY29kaW5ncyIgZXhpc3RzIGluIHN5cy5wYXRoLgorCistIElzc3VlICM4NTg5OiBEZWNvZGUgUFlUSE9OV0FSTklOR1MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2l0aCB0aGUgZmlsZSBzeXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZyB0bworICBiZSBjb25zaXN0ZW50IHdpdGggb3MuZW52aXJvbi4gIEFkZCBQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZSgpIGZ1bmN0aW9uLgorCistIFB5T2JqZWN0X0R1bXAoKSBlbmNvZGVzIHVuaWNvZGUgb2JqZWN0cyB0byB1dGY4IHdpdGggYmFja3NsYXNocmVwbGFjZSAoaW5zdGVhZAorICBvZiBzdHJpY3QpIGVycm9yIGhhbmRsZXIgdG8gZXNjYXBlIHN1cnJvZ2F0ZXMuCisKKy0gSXNzdWUgIzg3MTU6IENyZWF0ZSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCkgZnVuY3Rpb246IEVuY29kZSBhIFVuaWNvZGUKKyAgb2JqZWN0IHRvIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmcgd2l0aCB0aGUgInN1cnJvZ2F0ZWVzY2FwZSIgZXJyb3IKKyAgaGFuZGxlciwgYW5kIHJldHVybiBieXRlcy4gIElmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgaXMgbm90IHNldCwgZmFsbAorICBiYWNrIHRvIFVURi04LgorCistIEVuYWJsZSBzaG9ydGN1dHMgZm9yIGNvbW1vbiBlbmNvZGluZ3MgaW4gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpIGZvciBhbnkKKyAgZXJyb3IgaGFuZGxlciwgbm90IG9ubHkgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlciAoc3RyaWN0KS4KKworLSBJc3N1ZSAjODYxMDogTG9hZCBmaWxlIHN5c3RlbSBjb2RlYyBhdCBzdGFydHVwLCBhbmQgZGlzcGxheSBhIGZhdGFsIGVycm9yIG9uCisgIGZhaWx1cmUuICBTZXQgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIHRvIHV0Zi04IChpbnN0ZWFkIG9mIE5vbmUpIGlmIGdldHRpbmcKKyAgdGhlIGxvY2FsZSBlbmNvZGluZyBmYWlsZWQsIG9yIGlmIG5sX2xhbmdpbmZvKENPREVTRVQpIGZ1bmN0aW9uIGlzIG1pc3NpbmcuCisKKy0gUHlGaWxlX0Zyb21GZCgpIHVzZXMgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdCgpIGluc3RlYWQgb2YKKyAgUHlVbmljb2RlX0Zyb21TdHJpbmcoKSB0byBzdXBwb3J0IHN1cnJvZ2F0ZXMgaW4gdGhlIGZpbGVuYW1lIGFuZCB1c2UgdGhlIHJpZ2h0CisgIGVuY29kaW5nLgorCistIElzc3VlICM3NTA3OiBRdW90ZSAiISIgaW4gcGlwZXMucXVvdGUoKTsgaXQgaXMgc3BlY2lhbCB0byBzb21lIHNoZWxscy4KKworLSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZSgpIHVzZXMgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIuCisKKy0gSXNzdWUgIzg0MTk6IFByZXZlbnQgdGhlIGRpY3QgY29uc3RydWN0b3IgZnJvbSBhY2NlcHRpbmcgbm9uLXN0cmluZyBrZXl3b3JkCisgIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjODEyNDogUHlTeXNfV3JpdGVTdGRvdXQoKSBhbmQgUHlTeXNfV3JpdGVTdGRlcnIoKSBkb24ndCBleGVjdXRlCisgIGluZGlyZWN0bHkgUHl0aG9uIHNpZ25hbCBoYW5kbGVycyBhbnltb3JlIGJlY2F1c2UgbXl3cml0ZSgpIGlnbm9yZXMgZXhjZXB0aW9ucworICAoS2V5Ym9hcmRJbnRlcnJ1cHQpLgorCistIElzc3VlICM4MDkyOiBGaXggUHlVbmljb2RlX0VuY29kZVVURjgoKSB0byBzdXBwb3J0IGVycm9yIGhhbmRsZXIgcHJvZHVjaW5nCisgIHVuaWNvZGUgc3RyaW5nIChlZy4gYmFja3NsYXNocmVwbGFjZSkuCisKKy0gSXNzdWUgIzg0ODU6IFB5VW5pY29kZV9GU0NvbnZlcnRlcigpIGRvZXNuJ3QgYWNjZXB0IGJ5dGVlYXJyYXkgb2JqZWN0cworICBhbnltb3JlLCB5b3UgaGF2ZSB0byBjb252ZXJ0IHlvdXIgYnl0ZWFycmF5IGZpbGVuYW1lcyB0byBieXRlcy4KKworLSBJc3N1ZSAjNzMzMjogUmVtb3ZlIHRoZSAxNktCIHN0YWNrLWJhc2VkIGJ1ZmZlciBpbgorICBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZSwgd2hpY2ggZG9lc24ndCBicmluZyBhbnkgbm90aWNlYWJsZSBiZW5lZml0CisgIGNvbXBhcmVkIHRvIHRoZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uIGZhbGxiYWNrLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMKKyAgTmF0YWxpLgorCistIElzc3VlICM4NDE3OiBSYWlzZSBhbiBPdmVyZmxvd0Vycm9yIHdoZW4gYW4gaW50ZWdlciBsYXJnZXIgdGhhbiBzeXMubWF4c2l6ZSBpcworICBwYXNzZWQgdG8gYnl0ZXMgb3IgYnl0ZWFycmF5LgorCistIElzc3VlICM3MzAxOiBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGUgJFBZVEhPTldBUk5JTkdTLgorCistIElzc3VlICM4MzI5OiBEb24ndCByZXR1cm4gdGhlIHNhbWUgbGlzdHMgZnJvbSBzZWxlY3Quc2VsZWN0IHdoZW4gbm8gZmRzIGFyZQorICBjaGFuZ2VkLgorCistIElzc3VlICM4MjU5OiAxTCA8PCAoMioqMzEpIG5vIGxvbmdlciBwcm9kdWNlcyBhbiAnb3V0cmFnZW91cyBzaGlmdCBlcnJvcicgb24KKyAgNjQtYml0IG1hY2hpbmVzLiAgVGhlIHNoaWZ0IGNvdW50IGZvciBlaXRoZXIgbGVmdCBvciByaWdodCBzaGlmdCBpcyBwZXJtaXR0ZWQKKyAgdG8gYmUgdXAgdG8gc3lzLm1heHNpemUuCisKKy0gRW5zdXJlIHRoYXQgdG9rZW5pemF0aW9uIG9mIGlkZW50aWZpZXJzIGlzIG5vdCBhZmZlY3RlZCBieSBsb2NhbGUuCisKKy0gSXNzdWUgIzEyMjI1ODU6IEFkZGVkIExEQ1hYU0hBUkVEIGZvciBDKysgc3VwcG9ydC4gUGF0Y2ggYnkgQXJmcmV2ZXIuCisKKy0gUmFpc2UgYSBUeXBlRXJyb3Igd2hlbiB0cnlpbmcgdG8gZGVsZXRlIGEgVF9TVFJJTkdfSU5QTEFDRSBzdHJ1Y3QgbWVtYmVyLgorCistIElzc3VlICM4MjExOiBTYXZlL3Jlc3RvcmUgQ0ZMQUdTIGFyb3VuZCBBQ19QUk9HX0NDIGluIGNvbmZpZ3VyZS5pbiwgaW4gY2FzZSBpdAorICBpcyBzZXQuCisKKy0gSXNzdWUgIzgyMjY6IHN5cy5zZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBMb29rdXBFcnJvciBpZiB0aGUgZW5jb2RpbmcKKyAgaXMgdW5rbm93bi4KKworLSBJc3N1ZSAjMTU4Mzg2MzogQSBzdHIgc3ViY2xhc3MgY2FuIG5vdyBvdmVycmlkZSB0aGUgX19zdHJfXyBtZXRob2QuCisKKy0gSXNzdWUgIzgwMTQ6IFNldHRpbmcgYSBUX1VJTlQgb3IgVF9QWVNTSVpFVCBhdHRyaWJ1dGUgb2YgYW4gb2JqZWN0IHdpdGgKKyAgUHlNZW1iZXJEZWZzIGNvdWxkIHByb2R1Y2UgYW4gaW50ZXJuYWwgZXJyb3I7IHJhaXNlIFR5cGVFcnJvciBpbnN0ZWFkLgorCistIElzc3VlICM3ODQ1OiBSaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBvbiB0aGUgY29tcGxleCB0eXBlIG5vdyByZXR1cm4KKyAgTm90SW1wbGVtZW50ZWQgcmF0aGVyIHRoYW4gcmFpc2luZyBhIFR5cGVFcnJvciB3aGVuIGNvbXBhcmluZyB3aXRoIGFuCisgIGluY29tcGF0aWJsZSB0eXBlOyB0aGlzIGFsbG93cyB1c2VyLWRlZmluZWQgY2xhc3NlcyB0byBpbXBsZW1lbnQgdGhlaXIgb3duCisgIGNvbXBhcmlzb25zIHdpdGggY29tcGxleC4KKworLSBJc3N1ZSAjMzEzNzogRG9uJ3QgaWdub3JlIGVycm9ycyBhdCBzdGFydHVwLCBlc3BlY2lhbGx5IGEga2V5Ym9hcmQgaW50ZXJydXB0CisgIChTSUdJTlQpLiBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgaW1wb3J0aW5nIHRoZSBzaXRlIG1vZHVsZSwgdGhlIGVycm9yIGlzCisgIHByaW50ZWQgYW5kIFB5dGhvbiBleGl0cy4gSW5pdGlhbGl6ZSB0aGUgR0lMIGJlZm9yZSBpbXBvcnRpbmcgdGhlIHNpdGUgbW9kdWxlLgorCistIElzc3VlICM3MTczOiBHZW5lcmF0b3IgZmluYWxpemF0aW9uIGNvdWxkIGludmFsaWRhdGUgc3lzLmV4Y19pbmZvKCkuCisKKy0gSXNzdWUgIzc1NDQ6IFByZWFsbG9jYXRlIHRocmVhZCBtZW1vcnkgYmVmb3JlIGNyZWF0aW5nIHRoZSB0aHJlYWQgdG8gYXZvaWQgYQorICBmYXRhbCBlcnJvciBpbiBsb3cgbWVtb3J5IGNvbmRpdGlvbi4KKworLSBJc3N1ZSAjNzgyMDogVGhlIHBhcnNlciB0b2tlbml6ZXIgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBpZiB0aGUgQk9NCisgIGNoZWNrIGZhaWxzLgorCistIEhhbmRsZSBlcnJvcnMgZnJvbSBsb29raW5nIHVwIF9fcHJlcGFyZV9fIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjNTkzOTogQWRkIGFkZGl0aW9uYWwgcnVudGltZSBjaGVja2luZyB0byBlbnN1cmUgYSB2YWxpZCBjYXBzdWxlIGluCisgIE1vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jLgorCistIElzc3VlICM3MzA5OiBGaXggdW5jaGVja2VkIGF0dHJpYnV0ZSBhY2Nlc3Mgd2hlbiBjb252ZXJ0aW5nCisgIFVuaWNvZGVFbmNvZGVFcnJvciwgVW5pY29kZURlY29kZUVycm9yLCBhbmQgVW5pY29kZVRyYW5zbGF0ZUVycm9yIHRvIHN0cmluZ3MuCisKKy0gSXNzdWUgIzY5MDI6IEZpeCBwcm9ibGVtIHdpdGggYnVpbHQtaW4gdHlwZXMgZm9ybWF0IGluY29ycmVjdGx5IHdpdGggMAorICBwYWRkaW5nLgorCistIElzc3VlICM3OTg4OiBGaXggZGVmYXVsdCBhbGlnbm1lbnQgdG8gYmUgcmlnaHQgYWxpZ25lZCBmb3IgY29tcGxleC5fX2Zvcm1hdF9fLgorICBOb3cgaXQgbWF0Y2hlcyBvdGhlciBudW1lcmljIHR5cGVzLgorCistIElzc3VlICM1OTg4OiBSZW1vdmUgZGVwcmVjYXRlZCBmdW5jdGlvbnMgUHlPU19hc2NpaV9mb3JtYXRkLAorICBQeU9TX2FzY2lpX3N0cnRvZCwgYW5kIFB5T1NfYXNjaWlfYXRvZi4gIFVzZSBQeU9TX2RvdWJsZV90b19zdHJpbmcgYW5kCisgIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSBpbnN0ZWFkLiAgU2VlIGlzc3VlICM1ODM1IGZvciB0aGUgb3JpZ2luYWwgZGVwcmVjYXRpb25zLgorCistIElzc3VlICM3Mzg1OiBGaXggYSBjcmFzaCBpbiBgTWVtb3J5Vmlld19Gcm9tT2JqZWN0YCB3aGVuIGBQeU9iamVjdF9HZXRCdWZmZXJgCisgIGZhaWxzLiAgUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgorCistIElzc3VlICM3Nzg4OiBGaXggYW4gaW50ZXJwcmV0ZXIgY3Jhc2ggcHJvZHVjZWQgYnkgZGVsZXRpbmcgYSBsaXN0IHNsaWNlIHdpdGgKKyAgdmVyeSBsYXJnZSBzdGVwIHZhbHVlLgorCistIElzc3VlICM3NzY2OiBDaGFuZ2Ugc3lzLmdldHdpbmRvd3N2ZXJzaW9uKCkgcmV0dXJuIHZhbHVlIHRvIGEgbmFtZWQgdHVwbGUgYW5kCisgIGFkZCB0aGUgYWRkaXRpb25hbCBtZW1iZXJzIHJldHVybmVkIGluIGFuIE9TVkVSU0lPTklORk9FWCBzdHJ1Y3R1cmUuICBUaGUgbmV3CisgIG1lbWJlcnMgYXJlIHNlcnZpY2VfcGFja19tYWpvciwgc2VydmljZV9wYWNrX21pbm9yLCBzdWl0ZV9tYXNrLCBhbmQKKyAgcHJvZHVjdF90eXBlLgorCistIElzc3VlICM3NTYxOiBPcGVyYXRpb25zIG9uIGVtcHR5IGJ5dGVhcnJheXMgKHN1Y2ggYXMgYGludChieXRlYXJyYXkoKSlgKSBjb3VsZAorICBjcmFzaCBpbiBtYW55IHBsYWNlcyBiZWNhdXNlIG9mIHRoZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoKSBtYWNybyByZXR1cm5pbmcKKyAgTlVMTC4gIFRoZSBtYWNybyBub3cgcmV0dXJucyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGVtcHR5IHN0cmluZyBpbnN0ZWFkLgorCistIElzc3VlICM2NjkwOiBPcHRpbWl6ZSB0aGUgYnl0ZWNvZGUgZm9yIGV4cHJlc3Npb25zIHN1Y2ggYXMgYHggaW4gezEsIDIsIDN9YCwKKyAgd2hlcmUgdGhlIHJpZ2h0IGhhbmQgb3BlcmFuZCBpcyBhIHNldCBvZiBjb25zdGFudHMsIGJ5IHR1cm5pbmcgdGhlIHNldCBpbnRvIGEKKyAgZnJvemVuc2V0IGFuZCBwcmUtYnVpbGRpbmcgaXQgYXMgYSBjb25zdGFudC4gIFRoZSBjb21wYXJpc29uIG9wZXJhdGlvbiBpcyBtYWRlCisgIGFnYWluc3QgdGhlIGNvbnN0YW50IGluc3RlYWQgb2YgYnVpbGRpbmcgYSBuZXcgc2V0IGVhY2ggdGltZSBpdCBpcyBleGVjdXRlZCAoYQorICBzaW1pbGFyIG9wdGltaXphdGlvbiBhbHJlYWR5IGV4aXN0ZWQgd2hpY2ggdHVybmVkIGEgbGlzdCBvZiBjb25zdGFudHMgaW50byBhCisgIHByZS1idWlsdCB0dXBsZSkuICBQYXRjaCBhbmQgYWRkaXRpb25hbCB0ZXN0cyBieSBEYXZlIE1hbGNvbG0uCisKKy0gSXNzdWUgIzc2MjI6IEltcHJvdmUgdGhlIHNwbGl0KCksIHJzcGxpdCgpLCBzcGxpdGxpbmVzKCkgYW5kIHJlcGxhY2UoKSBtZXRob2RzCisgIG9mIGJ5dGVzLCBieXRlYXJyYXkgYW5kIHVuaWNvZGUgb2JqZWN0cyBieSB1c2luZyBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBiYXNlZAorICBvbiBzdHJpbmdsaWIncyBmYXN0IHNlYXJjaC4gIFBhdGNoIGJ5IEZsb3JlbnQgWGljbHVuYS4KKworLSBJc3N1ZSAjNzYzMjogRml4IHZhcmlvdXMgc3RyIC0+IGZsb2F0IGNvbnZlcnNpb24gYnVncyBwcmVzZW50IGluIDIuNyBhbHBoYSAyLAorICBpbmNsdWRpbmc6ICgxKSBhIHNlcmlvdXMgJ3dyb25nIG91dHB1dCcgYnVnIHRoYXQgY291bGQgb2NjdXIgZm9yIGxvbmcgKD4gNDAKKyAgZGlnaXQpIGlucHV0IHN0cmluZ3MsICgyKSBhIGNyYXNoIGluIGR0b2EuYyB0aGF0IG9jY3VycmVkIGluIGRlYnVnIGJ1aWxkcyB3aGVuCisgIHBhcnNpbmcgY2VydGFpbiBsb25nIG51bWVyaWMgc3RyaW5ncyBjb3JyZXNwb25kaW5nIHRvIHN1Ym5vcm1hbCB2YWx1ZXMsICgzKSBhCisgIG1lbW9yeSBsZWFrIGZvciBzb21lIHZhbHVlcyBsYXJnZSBlbm91Z2ggdG8gY2F1c2Ugb3ZlcmZsb3csIGFuZCAoNCkgYSBudW1iZXIKKyAgb2YgZmxhd3MgdGhhdCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0cy4KKworLSBUaGUgX19jb21wbGV4X18gbWV0aG9kIGlzIG5vdyBsb29rZWQgdXAgb24gdGhlIGNsYXNzIG9mIGluc3RhbmNlcyB0byBtYWtlIGl0CisgIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzcGVjaWFsIG1ldGhvZHMuCisKKy0gSXNzdWUgIzc0NjI6IEltcGxlbWVudCB0aGUgc3RyaW5nbGliIGZhc3Qgc2VhcmNoIGFsZ29yaXRobSBmb3IgdGhlIGByZmluZGAsCisgIGByaW5kZXhgLCBgcnNwbGl0YCBhbmQgYHJwYXJ0aXRpb25gIG1ldGhvZHMuICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzc2MDQ6IERlbGV0aW5nIGFuIHVuc2V0IHNsb3R0ZWQgYXR0cmlidXRlIGRpZCBub3QgcmFpc2UgYW4KKyAgQXR0cmlidXRlRXJyb3IuCisKKy0gSXNzdWUgIzc1MzQ6IEZpeCBoYW5kbGluZyBvZiBJRUVFIHNwZWNpYWxzIChpbmZpbml0aWVzLCBuYW5zLCBuZWdhdGl2ZSB6ZXJvKQorICBpbiAqKiBvcGVyYXRvci4gIFRoZSBiZWhhdmlvdXIgbm93IGNvbmZvcm1zIHRvIHRoYXQgZGVzY3JpYmVkIGluIEM5OSBBbm5leCBGLgorCistIElzc3VlICMxODExOiBpbXByb3ZlIGFjY3VyYWN5IGFuZCBjcm9zcy1wbGF0Zm9ybSBjb25zaXN0ZW5jeSBmb3IgdHJ1ZSBkaXZpc2lvbgorICBvZiBpbnRlZ2VyczogdGhlIHJlc3VsdCBvZiBhL2IgaXMgbm93IGNvcnJlY3RseSByb3VuZGVkIGZvciBpbnRzIGEgYW5kIGIgKGF0CisgIGxlYXN0IG9uIElFRUUgNzU0IHBsYXRmb3JtcyksIGFuZCBpbiBwYXJ0aWN1bGFyIGRvZXMgbm90IGRlcGVuZCBvbiB0aGUKKyAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50LgorCistIElzc3VlICM2ODM0OiByZXBsYWNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlICdweXRob24nIGFuZCAncHl0aG9udycKKyAgZXhlY3V0YWJsZXMgb24gT1NYLgorCisgIFRoZXNlIGV4ZWN1dGFibGVzIG5vdyB3b3JrIHByb3Blcmx5IHdpdGggdGhlIGFyY2goMSkgY29tbWFuZDogYGBhcmNoIC1wcGMKKyAgcHl0aG9uYGAgd2lsbCBzdGFydCBhIHVuaXZlcnNhbCBiaW5hcnkgdmVyc2lvbiBvZiBweXRob24gaW4gUFBDIG1vZGUgKHVubGlrZQorICBwcmV2aW91cyByZWxlYXNlcykuCisKKy0gSXNzdWUgIzc0NjY6IFNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBpcyBjYWxsZWQgaW4gdGhlCisgIG1pZGRsZSBvZiBwb3B1bGF0aW5nIGEgdHVwbGUuICBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzc0MTk6IHNldGxvY2FsZSgpIGNvdWxkIGNyYXNoIHRoZSBpbnRlcnByZXRlciBvbiBXaW5kb3dzIHdoZW4gY2FsbGVkCisgIHdpdGggaW52YWxpZCB2YWx1ZXMuCisKKy0gSXNzdWUgIzYwNzc6IE9uIFdpbmRvd3MsIGZpbGVzIG9wZW5lZCB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUgaW4gInd0KyIKKyAgbW9kZSB3b3VsZCBhcHBlYXIgdHJ1bmNhdGVkIG9uIHRoZSBmaXJzdCAnMHgxYScgYnl0ZSAoYWthLiBDdHJsK1opLgorCistIElzc3VlICM3MDg1OiBGaXggY3Jhc2ggd2hlbiBpbXBvcnRpbmcgc29tZSBleHRlbnNpb25zIGluIGEgdGhyZWFkIG9uIE1hY09TWAorICAxMC42LgorCistIElzc3VlICMxNzU3MTI2OiBGaXggdGhlIGN5cmlsbGljLWFzaWFuIGFsaWFzIGZvciB0aGUgcHRjcDE1NCBlbmNvZGluZy4KKworLSBJc3N1ZSAjNjk3MDogUmVtb3ZlIHJlZHVuZGFudCBjYWxscyB3aGVuIGNvbXBhcmluZyBvYmplY3RzIHRoYXQgZG9uJ3QKKyAgaW1wbGVtZW50IHRoZSByZWxldmFudCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcy4KKworLSBJc3N1ZSAjNzI5ODogRml4ZXMgZm9yIHJhbmdlIGFuZCByZXZlcnNlZChyYW5nZSguLi4pKS4gIEl0ZXJhdGlvbiBvdmVyCisgIHJhbmdlKGEsIGIsIGMpIGluY29ycmVjdGx5IGdhdmUgYW4gZW1wdHkgaXRlcmF0b3Igd2hlbiBhLCBiIGFuZCBjIGZpdCBpbiBDCisgIGxvbmcgYnV0IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGRpZCBub3QuICBBbHNvIGZpeCBzZXZlcmFsIGNhc2VzIHdoZXJlCisgIHJldmVyc2VkKHJhbmdlKGEsIGIsIGMpKSBnYXZlIHdyb25nIHJlc3VsdHMsIGFuZCBmaXggYSByZWZsZWFrIGZvcgorICByZXZlcnNlZChyYW5nZShhLCBiLCBjKSkgd2l0aCBsYXJnZSBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzcyNDQ6IGl0ZXJ0b29scy5pemlwX2xvbmdlc3QoKSBubyBsb25nZXIgaWdub3JlcyBleGNlcHRpb25zIHJhaXNlZAorICBkdXJpbmcgdGhlIGZvcm1hdGlvbiBvZiBhbiBvdXRwdXQgdHVwbGUuCisKKy0gSXNzdWUgIzMyOTc6IE9uIHdpZGUgdW5pY29kZSBidWlsZHMsIGRvIG5vdCBzcGxpdCB1bmljb2RlIGNoYXJhY3RlcnMgaW50bworICBzdXJyb2dhdGVzLgorCistIFJlbW92ZSBsZW5ndGggbGltaXRhdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIGNvbXBsZXggbnVtYmVyIGZyb20gYSBzdHJpbmcuCisKKy0gSXNzdWUgIzEwODc0MTg6IEJvb3N0IHBlcmZvcm1hbmNlIG9mIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3IgbG9uZ3MuCisKKy0gU3VwcG9ydCBmb3IgQXRoZU9TIGhhcyBiZWVuIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSBjb2RlIGJhc2UuIEl0IHdhcworICBkaXNhYmxlZCBzaW5jZSBQeXRob24gMy4wLgorCistIFN1cHBvcnQgZm9yIHNldmVyYWwgbGVnYWN5IHRocmVhZGluZyBsaWJyYXJpZXMgaGFzIGJlZW4gZGlzYWJsZWQuIFRoZXNlCisgIGxpYnJhcmllcyBhcmU6IE1hY2ggQyB0aHJlYWRzLCBTdW5PUyBMV1AsIEdOVSBwdGgsIElyaXggdGhyZWFkcy4gU3VwcG9ydCBjb2RlCisgIHdpbGwgYmUgZW50aXJlbHkgcmVtb3ZlZCBpbiAzLjMuCisKKy0gU3VwcG9ydCBmb3IgT1NGKiBoYXMgYmVlbiBkaXNhYmxlZC4gSWYgbm9ib2R5IHN0YW5kcyB1cCwgc3VwcG9ydCB3aWxsIGJlCisgIHJlbW92ZWQgaW4gMy4zLiBTZWUgPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4NjA2Pi4KKworLSBQZWVwaG9sZSBjb25zdGFudCBmb2xkaW5nIGhhZCBtaXNzZWQgVU5BUllfUE9TSVRJVkUuCisKKy0gSXNzdWUgIzE3MjIzNDQ6IHRocmVhZGluZy5fc2h1dGRvd24oKSBpcyBub3cgY2FsbGVkIGluIFB5X0ZpbmFsaXplKCksIHdoaWNoCisgIGZpeGVzIHRoZSBwcm9ibGVtIG9mIHNvbWUgZXhjZXB0aW9ucyBiZWluZyB0aHJvd24gYXQgc2h1dGRvd24gd2hlbiB0aGUKKyAgaW50ZXJwcmV0ZXIgaXMga2lsbGVkLiBQYXRjaCBieSBBZGFtIE9sc2VuLgorCistIElzc3VlICM3MTQ3OiBSZW1vdmUgc3VwcG9ydCBmb3IgY29tcGlsaW5nIFB5dGhvbiB3aXRob3V0IGNvbXBsZXggbnVtYmVyCisgIHN1cHBvcnQuCisKKy0gSXNzdWUgIzcxMjA6IGxvZ2dpbmc6IFJlbW92ZWQgaW1wb3J0IG9mIG11bHRpcHJvY2Vzc2luZyB3aGljaCBpcyBjYXVzaW5nIGNyYXNoCisgIGluIEdBRS4KKworLSBJc3N1ZSAjMTc1NDA5NDogSW1wcm92ZSB0aGUgc3RhY2sgZGVwdGggY2FsY3VsYXRpb24gaW4gdGhlIGNvbXBpbGVyLiAgVGhlcmUKKyAgc2hvdWxkIGJlIG5vIG90aGVyIGVmZmVjdCB0aGFuIGEgc21hbGwgZGVjcmVhc2UgaW4gbWVtb3J5IHVzZS4gIFBhdGNoIGJ5CisgIENocmlzdG9waGVyIFR1ciBMZXNuaWV3c2tpLUxhYXMuCisKKy0gSXNzdWUgIzcwNjU6IEZpeCBhIGNyYXNoIGluIGJ5dGVzLm1ha2V0cmFucyBhbmQgYnl0ZWFycmF5Lm1ha2V0cmFucyB3aGVuIHVzaW5nCisgIGJ5dGUgdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcuICBQYXRjaCBieSBEZXJrIERydWtrZXIuCisKKy0gSXNzdWUgIzE1NzExODQ6IFRoZSBVbmljb2RlIGRhdGFiYXNlIGNvbnRhaW5zIHByb3BlcnRpZXMgZm9yIG1vcmUgY2hhcmFjdGVycy4KKyAgVGhlIHRhYmxlcyBmb3IgY29kZSBwb2ludHMgcmVwcmVzZW50aW5nIG51bWVyaWMgdmFsdWVzLCB3aGl0ZSBzcGFjZXMgb3IgbGluZQorICBicmVha3MgYXJlIG5vdyBnZW5lcmF0ZWQgZnJvbSB0aGUgb2ZmaWNpYWwgVW5pY29kZSBDaGFyYWN0ZXIgRGF0YWJhc2UgZmlsZXMsCisgIGFuZCBpbmNsdWRlIGluZm9ybWF0aW9uIGZyb20gdGhlIFVuaWhhbi50eHQgZmlsZS4KKworLSBJc3N1ZSAjNzAxOTogUmFpc2UgVmFsdWVFcnJvciB3aGVuIHVubWFyc2hhbGxpbmcgYmFkIGxvbmcgZGF0YSwgaW5zdGVhZCBvZgorICBwcm9kdWNpbmcgaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgUHl0aG9uIGxvbmdzLgorCistIElzc3VlICM2OTkwOiBGaXggdGhyZWFkaW5nLmxvY2FsIHN1YmNsYXNzZXMgbGVhdmluZyBvbGQgc3RhdGUgYXJvdW5kIGFmdGVyIGEKKyAgcmVmZXJlbmNlIGN5Y2xlIEdDIHdoaWNoIGNvdWxkIGJlIHJlY3ljbGVkIGJ5IG5ldyBsb2NhbHMuCisKKy0gSXNzdWUgIzU0NjA6IEZpeCBhbiBhbWJpZ3VpdHkgaW4gdGhlIGdyYW1tYXIuCisKKy0gSXNzdWUgIzE3NjYzMDQ6IEltcHJvdmUgcGVyZm9ybWFuY2Ugb2YgbWVtYmVyc2hpcCB0ZXN0cyBvbiByYW5nZSBvYmplY3RzLgorCistIElzc3VlICM2NzEzOiBJbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGludGVnZXIgLT4gc3RyaW5nIGNvbnZlcnNpb25zLgorCistIElzc3VlICM2ODQ2OiBGaXggYnVnIHdoZXJlIGJ5dGVhcnJheS5wb3AoKSByZXR1cm5zIG5lZ2F0aXZlIGludGVnZXJzLgorCistIElzc3VlICM2NzUwOiBBIHRleHQgZmlsZSBvcGVuZWQgd2l0aCBpby5vcGVuKCkgY291bGQgZHVwbGljYXRlIGl0cyBvdXRwdXQgd2hlbgorICB3cml0aW5nIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLgorCistIElzc3VlICM2NzA3OiBkaXIoKSBvbiBhbiB1bmluaXRpYWxpemVkIG1vZHVsZSBjYXVzZWQgYSBjcmFzaC4KKworLSBJc3N1ZSAjNjU0MDogRml4ZWQgY3Jhc2ggZm9yIGJ5dGVhcnJheS50cmFuc2xhdGUoKSB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjNjU3Mzogc2V0LnVuaW9uKCkgc3RvcHBlZCBwcm9jZXNzaW5nIGlucHV0cyBpZiBhbiBpbnN0YW5jZSBvZiBzZWxmCisgIG9jY3VycmVkIGluIHRoZSBhcmd1bWVudCBjaGFpbi4KKworLSBJc3N1ZSAjNjA3MDogT24gcG9zaXggcGxhdGZvcm1zIGltcG9ydCBubyBsb25nZXIgY29waWVzIHRoZSBleGVjdXRlIGJpdCBmcm9tCisgIHRoZSAucHkgZmlsZSB0byB0aGUgLnB5YyBmaWxlIGlmIGl0IGlzIHNldC4KKworLSBJc3N1ZSAjMTYxNjk3OTogQWRkZWQgdGhlIGNwNzIwIChBcmFiaWMgRE9TKSBlbmNvZGluZy4KKworLSBJc3N1ZSAjNjQyODogU2luY2UgUHl0aG9uIDMuMCwgdGhlIF9fYm9vbF9fIG1ldGhvZCBtdXN0IHJldHVybiBhIGJvb2wgb2JqZWN0LAorICBhbmQgbm90IGFuIGludC4gIEZpeCB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLCBhbmQgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gVGhlIGRlcHJlY2F0ZWQgUHlDT2JqZWN0IGhhcyBiZWVuIHJlbW92ZWQuCisKKy0gSXNzdWUgIzYzNDc6IEluY2x1ZGUgaW50dHlwZXMuaCBhcyB3ZWxsIGFzIHN0ZGludC5oIGluIHB5cG9ydC5oLiAgVGhpcyBmaXhlcyBhCisgIGJ1aWxkIGZhaWx1cmUgb24gSFAtVVg6IGludDMyX3QgYW5kIHVpbnQzMl90IGFyZSBkZWZpbmVkIGluIGludHR5cGVzLmggaW5zdGVhZAorICBvZiBzdGRpbnQuaCBvbiB0aGF0IHBsYXRmb3JtLgorCistIElzc3VlICM2MzczOiBGaXhlZCBhIFN5c3RlbUVycm9yIHdoZW4gZW5jb2Rpbmcgd2l0aCB0aGUgbGF0aW4tMSBjb2RlYyBhbmQgdGhlCisgICdzdXJyb2dhdGVlc2NhcGUnIGVycm9yIGhhbmRsZXIsIGEgc3RyaW5nIHdoaWNoIGNvbnRhaW5zIHVucGFpcmVkIHN1cnJvZ2F0ZXMuCisKKy0gSXNzdWUgIzQ4NTY6IFJlbW92ZSBjaGVja3MgZm9yIHdpbiBOVC4KKworLSBJc3N1ZSAjNjY4NzogUHlCeXRlc19Gcm9tT2JqZWN0KCkgbm8gbG9uZ2VyIGFjY2VwdHMgYW4gaW50ZWdlciBhcyBpdHMgYXJndW1lbnQKKyAgdG8gY29uc3RydWN0IGEgbnVsbC1pbml0aWFsaXplZCBieXRlcyBvYmplY3QuCisKKy0gSXNzdWUgIzEwMjMyOTA6IEFkZCBmcm9tX2J5dGVzKCkgYW5kIHRvX2J5dGVzKCkgbWV0aG9kcyB0byBpbnRlZ2Vycy4gIFRoZXNlCisgIG1ldGhvZHMgYWxsb3cgdGhlIGNvbnZlcnNpb24gb2YgaW50ZWdlcnMgdG8gYnl0ZXMsIGFuZCB2aWNlLXZlcnNhLgorCistIElzc3VlICM3MzgyOiBGaXggYnVnIGluIGJ5dGVzLl9fZ2V0bmV3YXJnc19fIHRoYXQgcHJldmVudGVkIGJ5dGVzIGluc3RhbmNlcworICBmcm9tIGJlaW5nIGNvcGllZCB3aXRoIGNvcHkuY29weSgpLCBhbmQgYnl0ZXMgc3ViY2xhc3NlcyBmcm9tIGJlaW5nIHBpY2tsZWQKKyAgcHJvcGVybHkuCisKKy0gQ29kZSBvYmplY3RzIG5vdyBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcy4KKworLSBJc3N1ZSAjNzA3MjogaXNzcGFjZSgweGEwKSBpcyB0cnVlIG9uIE1hYyBPUyBYLgorCistIElzc3VlICM4MDg0OiBQRVAgMzcwIG5vdyBjb25mb3JtcyB0byBzeXN0ZW0gY29udmVudGlvbnMgZm9yIGZyYW1ld29yayBidWlsZHMKKyAgb24gTWFjT1MgWC4gVGhhdCBpcywgInB5dGhvbiBzZXR1cC5weSBpbnN0YWxsIC0tdXNlciIgd2lsbCBpbnN0YWxsIGludG8KKyAgIn4vTGlicmFyeS9QeXRob24vMi43IiBpbnN0ZWFkIG9mICJ+Ly5sb2NhbCIuCisKK0MtQVBJCistLS0tLQorCistIElzc3VlICMyNDQzOiBBIG5ldyBtYWNybywgYFB5X1ZBX0NPUFlgLCBjb3BpZXMgdGhlIHN0YXRlIG9mIHRoZQorICB2YXJpYWJsZSBhcmd1bWVudCBsaXN0LiAgYFB5X1ZBX0NPUFlgIGlzIGVxdWl2YWxlbnQgdG8gQzk5CisgIGB2YV9jb3B5YCwgYnV0IGF2YWlsYWJsZSBvbiBhbGwgcHl0aG9uIHBsYXRmb3Jtcy4KKworLSBQeVNsaWNlX0dldEluZGljZXNFeCBub3cgY2xpcHMgdGhlIHN0ZXAgdG8gWy1QWV9TU0laRV9UX01BWCwgUFlfU1NJWkVfVF9NQVhdCisgIGluc3RlYWQgb2YgWy1QWV9TU0laRV9UX01BWC0xLCBQWV9TU0laRV9UX01BWF0uICBUaGlzIG1ha2VzIGl0IHNhZmUgdG8gZG8KKyAgInN0ZXAgPSAtc3RlcCIgd2hlbiByZXZlcnNpbmcgYSBzbGljZS4KKworLSBJc3N1ZSAjNTc1MzogQSBuZXcgQyBBUEkgZnVuY3Rpb24sIGBQeVN5c19TZXRBcmd2RXhgLCBhbGxvd3MgZW1iZWRkZXJzIG9mIHRoZQorICBpbnRlcnByZXRlciB0byBzZXQgc3lzLmFyZ3Ygd2l0aG91dCBhbHNvIG1vZGlmeWluZyBzeXMucGF0aC4gIFRoaXMgaGVscHMgZml4CisgIGBDVkUtMjAwOC01OTgzCisgIDxodHRwOi8vY3ZlLm1pdHJlLm9yZy9jZ2ktYmluL2N2ZW5hbWUuY2dpP25hbWU9Q1ZFLTIwMDgtNTk4Mz5gXy4KKworLSBBZGQgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzLCB3aGljaCBjaGVja3MgaWYgYWxsIGtleXdvcmQgYXJndW1lbnRzIGFyZQorICBzdHJpbmdzIGluIGFuIGVmZmljaWVudCBtYW5uZXIuCisKKy0gSXNzdWUgIzgyNzY6IFB5RXZhbF9DYWxsT2JqZWN0KCkgaXMgbm93IG9ubHkgYXZhaWxhYmxlIGluIG1hY3JvIGZvcm0uICBUaGUKKyAgZnVuY3Rpb24gZGVjbGFyYXRpb24sIHdoaWNoIHdhcyBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLCBpcworICBub3cgcmVtb3ZlZCAodGhlIG1hY3JvIHdhcyBpbnRyb2R1Y2VkIGluIDE5OTchKS4KKworLSBJc3N1ZSAjNzc2NzogTmV3IGZ1bmN0aW9uIFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cgYWRkZWQsIGFuYWxvZ291cyB0bworICBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cuCisKKy0gTWFrZSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyByZXR1cm4gbm90IGVxdWFsIGlmIHRoZSBQeXRob24gc3RyaW5nCisgIGhhcyAnXDAnIGF0IHRoZSBlbmQuCisKKy0gSXNzdWUgIzUwODA6IFRoZSBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9ucyBQeUFyZ19QYXJzZVR1cGxlLAorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMsIFB5QXJnX1ZhUGFyc2UsIFB5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzIGFuZAorICBQeUFyZ19QYXJzZSBub3cgcmFpc2UgYSBEZXByZWNhdGlvbldhcm5pbmcgZm9yIGZsb2F0IGFyZ3VtZW50cyBwYXNzZWQgd2l0aCB0aGUKKyAgJ0wnIGZvcm1hdCBjb2RlLiAgVGhpcyB3aWxsIGJlY29tZSBhIFR5cGVFcnJvciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiwKKyAgdG8gbWF0Y2ggdGhlIGJlaGF2aW91ciBvZiB0aGUgb3RoZXIgaW50ZWdlciBmb3JtYXQgY29kZXMuCisKKy0gSXNzdWUgIzcwMzM6IEZ1bmN0aW9uIGBgUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYygpYGAgYWRkZWQuCisKKy0gSXNzdWUgIzc0MTQ6ICdDJyBjb2RlIHdhc24ndCBiZWluZyBza2lwcGVkIHByb3Blcmx5IChmb3Iga2V5d29yZCBhcmd1bWVudHMpIGluCisgIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkcy4KKworLSBJc3N1ZSAjNzIyODogQWRkICclbGxkJyBhbmQgJyVsbHUnIHN1cHBvcnQgdG8gUHlTdHJpbmdfRnJvbUZvcm1hdChWKSBhbmQKKyAgUHlFcnJfRm9ybWF0LCBvbiBtYWNoaW5lcyB3aXRoIEhBVkVfTE9OR19MT05HIGRlZmluZWQuCisKKy0gSXNzdWUgIzYxNTE6IE1hZGUgUHlEZXNjcl9DT01NT04gY29uZm9ybSB0byBzdGFuZGFyZCBDIChsaWtlIFB5T2JqZWN0X0hFQUQgaW4KKyAgUEVQIDMxMjMpLiAgVGhlIFB5RGVzY3JfVFlQRSBhbmQgUHlEZXNjcl9OQU1FIG1hY3JvcyBzaG91bGQgYmUgc2hvdWxkIHVzZWQgZm9yCisgIGFjY2Vzc2luZyB0aGUgZF90eXBlIGFuZCBkX25hbWUgbWVtYmVycyBvZiBzdHJ1Y3R1cmVzIHVzaW5nIFB5RGVzY3JfQ09NTU9OLgorCistIElzc3VlICM2NDA1OiBSZW1vdmUgZHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb25zIGluIGRlc2Nyb2JqZWN0LmguCisKKy0gVGhlIGNvZGUgZmxhZ3MgZm9yIG9sZCBfX2Z1dHVyZV9fIGZlYXR1cmVzIGFyZSBub3cgYXZhaWxhYmxlIGFnYWluLgorCistIElzc3VlICM1OTU0OiBBZGQgYSBQeUZyYW1lX0dldExpbmVOdW1iZXIoKSBmdW5jdGlvbiB0byByZXBsYWNlIG1vc3QgdXNlcyBvZgorICBQeUNvZGVfQWRkcjJMaW5lKCkuCisKKy0gSXNzdWUgIzU5NTk6IEFkZCBhIFB5Q29kZV9OZXdFbXB0eSgpIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBlbXB0eSBjb2RlCisgIG9iamVjdCBhdCBhIHNwZWNpZmllZCBmaWxlLCBmdW5jdGlvbiwgYW5kIGxpbmUgbnVtYmVyLgorCistIElzc3VlICMxNDE5NjUyOiBDaGFuZ2UgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIoKSB0bworICBgYGNvbnN0IGNoYXIgKmBgIGFzIHRoZSBzdHJpbmcgaXMgc3RvcmVkIGJleW9uZCB0aGUgY2FsbC4KKworLSBJc3N1ZSAjMjQyMjogV2hlbiBjb21waWxlZCB3aXRoIHRoZSBgYC0td2l0aC12YWxncmluZGBgIG9wdGlvbiwgdGhlIHB5bWFsbG9jCisgIGFsbG9jYXRvciB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgd2hlbiBydW5uaW5nIHVuZGVyIFZhbGdyaW5kLiAgVGhpcworICBnaXZlcyBpbXByb3ZlZCBtZW1vcnkgbGVhayBkZXRlY3Rpb24gd2hlbiBydW5uaW5nIHVuZGVyIFZhbGdyaW5kLCB3aGlsZSB0YWtpbmcKKyAgYWR2YW50YWdlIG9mIHB5bWFsbG9jIGF0IG90aGVyIHRpbWVzLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSW4gcGRiLCB3aGVuIEN0cmwtQyBpcyBlbnRlcmVkIHdoaWxlIGRlZmluaW5nIGNvbW1hbmRzIGZvciBhIGJyZWFrcG9pbnQsIHRoZQorICBvbGQgY29tbWFuZHMgYXJlIHJlc3RvcmVkLgorCistIEZvciB0cmFjZWJhY2sgZGVidWdnaW5nLCB0aGUgcGRiIGxpc3Rpbmcgbm93IGFsc28gc2hvd3MgdGhlIGxvY2F0aW9ucyB3aGVyZQorICB0aGUgZXhjZXB0aW9uIHdhcyBvcmlnaW5hbGx5IChyZSlyYWlzZWQsIGlmIGl0IGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBsaW5lCisgIGV4ZWN1dGVkIChlLmcuIGluIGNhc2Ugb2YgZmluYWxseSBjbGF1c2VzKS4KKworLSBUaGUgcGRiIGNvbW1hbmQgInNvdXJjZSIgaGFzIGJlZW4gYWRkZWQuICBJdCBkaXNwbGF5cyB0aGUgc291cmNlIGNvZGUgZm9yIGEKKyAgZ2l2ZW4gb2JqZWN0LCBpZiBwb3NzaWJsZS4KKworLSBUaGUgcGRiIGNvbW1hbmQgImxvbmdsaXN0IiBoYXMgYmVlbiBhZGRlZC4gIEl0IGRpc3BsYXlzIHRoZSB3aG9sZSBzb3VyY2UgY29kZQorICBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE1MDM1MDI6IE1ha2UgcGRiLlBkYiBlYXNpZXIgdG8gc3ViY2xhc3MgYnkgcHV0dGluZyBtZXNzYWdlIGFuZCBlcnJvcgorICBvdXRwdXQgaW50byBtZXRob2RzLgorCistIElzc3VlICM4MDk4ODc6IE1ha2UgdGhlIG91dHB1dCBvZiBwZGIncyBicmVha3BvaW50IGRlbGV0aW9ucyBtb3JlIGNvbnNpc3RlbnQ7CisgIGVtaXQgYSBtZXNzYWdlIHdoZW4gYSBicmVha3BvaW50IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuCisKKy0gSXNzdWUgIzUyOTQ6IEZpeCB0aGUgYmVoYXZpb3Igb2YgcGRiJ3MgImNvbnRpbnVlIiBjb21tYW5kIHdoZW4gY2FsbGVkIGluIHRoZQorICB0b3AtbGV2ZWwgZGVidWdnZWQgZnJhbWUuCisKKy0gSXNzdWUgIzU3Mjc6IFJlc3RvcmUgdGhlIGFiaWxpdHkgdG8gdXNlIHJlYWRsaW5lIHdoZW4gY2FsbGluZyBpbnRvIHBkYiBpbgorICBkb2N0ZXN0cy4KKworLSBJc3N1ZSAjNjcxOTogSW4gcGRiLCBkbyBub3Qgc3RvcCBzb21ld2hlcmUgaW4gdGhlIGVuY29kaW5ncyBtYWNoaW5lcnkgaWYgdGhlCisgIHNvdXJjZSBmaWxlIHRvIGJlIGRlYnVnZ2VkIGlzIGluIGEgbm9uLWJ1aWx0aW4gZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgwNDg6IFByZXZlbnQgZG9jdGVzdHMgZnJvbSBmYWlsaW5nIHdoZW4gc3lzLmRpc3BsYXlob29rIGhhcyBiZWVuCisgIHJlYXNzaWduZWQuCisKKy0gSXNzdWUgIzgwMTU6IEluIHBkYiwgZG8gbm90IGNyYXNoIHdoZW4gYW4gZW1wdHkgbGluZSBpcyBlbnRlcmVkIGFzIGEKKyAgYnJlYWtwb2ludCBjb21tYW5kLgorCistIEluIHBkYiwgYWxsb3cgZ2l2aW5nIGEgbGluZSBudW1iZXIgdG8gdGhlICJ1bnRpbCIgY29tbWFuZC4KKworLSBJc3N1ZSAjMTQzNzA1MTogRm9yIHBkYiwgYWxsb3cgImNvbnRpbnVlIiBhbmQgcmVsYXRlZCBjb21tYW5kcyBpbiAucGRicmMKKyAgZmlsZXMuICBBbHNvLCBhZGQgYSBjb21tYW5kLWxpbmUgb3B0aW9uICItYyIgdGhhdCBydW5zIGEgY29tbWFuZCBhcyBpZiBnaXZlbgorICBpbiAucGRicmMuCisKKy0gSXNzdWUgIzQxNzk6IEluIHBkYiwgYWxsb3cgImxpc3QgLiIgYXMgYSBjb21tYW5kIHRvIHJldHVybiB0byB0aGUgY3VycmVudGx5CisgIGRlYnVnZ2VkIGxpbmUuCisKKy0gSXNzdWUgIzQxMDg6IEluIHVybGxpYi5yb2JvdHBhcnNlciwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGBgVXNlci1hZ2VudDogKmBgCisgIGVudHJpZXMsIGNvbnNpZGVyIHRoZSBmaXJzdCBvbmUuCisKKy0gSXNzdWUgIzY2MzA6IEFsbG93IGN1c3RvbWl6aW5nIHJlZ2V4IGZsYWdzIHdoZW4gc3ViY2xhc3NpbmcgdGhlCisgIHN0cmluZy5UZW1wbGF0ZSBjbGFzcy4KKworLSBJc3N1ZSAjOTQxMTogQWxsb3cgc3BlY2lmeWluZyBhbiBlbmNvZGluZyBmb3IgY29uZmlnIGZpbGVzIGluIHRoZSBjb25maWdwYXJzZXIKKyAgbW9kdWxlLgorCistIElzc3VlICMxNjgyOTQyOiBJbXByb3ZlbWVudHMgdG8gY29uZmlncGFyc2VyOiBzdXBwb3J0IGFsdGVybmF0ZSBkZWxpbWl0ZXJzLAorICBhbHRlcm5hdGUgY29tbWVudCBwcmVmaXhlcyBhbmQgZW1wdHkgbGluZXMgaW4gdmFsdWVzLgorCiAtIElzc3VlICM5MzU0OiBQcm92aWRlIGdldHNvY2tvcHQoKSBpbiBhc3luY29yZSdzIGZpbGVfd3JhcHBlci4KIAotLSBJc3N1ZSAjOTQ0ODogRml4IGEgbGVhayBvZiBPUyByZXNvdXJjZXMgKG11dGV4ZXMgb3Igc2VtYXBob3Jlcykgd2hlbgotICByZS1pbml0aWFsaXppbmcgYSBidWZmZXJlZCBJTyBvYmplY3QgYnkgY2FsbGluZyBpdHMgYGBfX2luaXRfX2BgIG1ldGhvZC4KKy0gSXNzdWUgIzg5NjY6IGN0eXBlczogUmVtb3ZlIGltcGxpY2l0IGJ5dGVzLXVuaWNvZGUgY29udmVyc2lvbi4KIAotLSBJc3N1ZSAjODYyMDogd2hlbiBhIENtZCBpcyBmZWQgaW5wdXQgdGhhdCByZWFjaGVzIEVPRiB3aXRob3V0IGEgZmluYWwKLSAgbmV3bGluZSwgaXQgbm8gbG9uZ2VyIHRydW5jYXRlcyB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGxhc3QgY29tbWFuZCBsaW5lLgorLSBJc3N1ZSAjOTM3ODogcHl0aG9uIC1tIHBpY2tsZSA8cGlja2xlIGZpbGU+IHdpbGwgbm93IGxvYWQgYW5kIGRpc3BsYXkgdGhlCisgIGZpcnN0IG9iamVjdCBpbiB0aGUgcGlja2xlIGZpbGUuCisKKy0gSXNzdWUgIzQ3NzA6IFJlc3RyaWN0IGJpbmFzY2lpIG1vZHVsZSB0byBhY2NlcHQgb25seSBieXRlcyAoYXMgc3BlY2lmaWVkKS4KKyAgQW5kIGZpeCB0aGUgZW1haWwgcGFja2FnZSB0byBlbmNvZGUgdG8gQVNDSUkgaW5zdGVhZCBvZiBgYHJhdy11bmljb2RlLWVzY2FwZWBgCisgIGJlZm9yZSBBU0NJSS10by1iaW5hcnkgZGVjb2RpbmcuCisKKy0gSXNzdWUgIzkzODQ6IGBgcHl0aG9uIC1tIHRraW50ZXJgYCB3aWxsIG5vdyBkaXNwbGF5IGEgc2ltcGxlIGRlbW8gYXBwbGV0LgorCistIFRoZSBkZWZhdWx0IHNpemUgb2YgdGhlIHJlIG1vZHVsZSdzIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZSBoYXMgYmVlbgorICBpbmNyZWFzZWQgZnJvbSAxMDAgdG8gNTAwIGFuZCB0aGUgY2FjaGUgcmVwbGFjZW1lbnQgcG9saWN5IGhhcyBjaGFuZ2VkIGZyb20KKyAgc2ltcGx5IGNsZWFyaW5nIHRoZSBlbnRpcmUgY2FjaGUgb24gb3ZlcmZsb3cgdG8gZm9yZ2V0dGluZyB0aGUgbGVhc3QgcmVjZW50bHkKKyAgdXNlZCBjYWNoZWQgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4gIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSB3aW4gZm9yCisgIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSBhIGxvdCBvZiByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBsaW1pdHMgdGhlIGltcGFjdCBvZgorICB0aGUgcGVyZm9ybWFuY2UgaGl0IGFueXRpbWUgdGhlIGNhY2hlIGlzIGV4Y2VlZGVkLgorCistIElzc3VlICM3MTEzOiBTcGVlZCB1cCBsb2FkaW5nIGluIGNvbmZpZ3BhcnNlci4gUGF0Y2ggYnkgxYF1a2FzeiBMYW5nYS4KKworLSBJc3N1ZSAjOTAzMjogWE1MLVJQQyBjbGllbnQgcmV0cmllcyB0aGUgcmVxdWVzdCBvbiBFUElQRSBlcnJvci4gIFRoZSBFUElQRQorICBlcnJvciBvY2N1cnMgd2hlbiB0aGUgc2VydmVyIGNsb3NlcyB0aGUgc29ja2V0IGFuZCB0aGUgY2xpZW50IHNlbmRzIGEgYmlnCisgIFhNTC1SUEMgcmVxdWVzdC4KKworLSBJc3N1ZSAjNDYyOTogZ2V0b3B0IHJhaXNlcyBhbiBlcnJvciBpZiBhbiBhcmd1bWVudCBlbmRzIHdpdGggIj0iLCB3aGVyZWFzCisgIGdldG9wdCBkb2Vzbid0IGFjY2VwdCBhIHZhbHVlIChlZy4gLS1oZWxwPSBpcyByZWplY3RlZCBpZiBnZXRvcHQgdXNlcworICBbJ2hlbHA9J10gbG9uZyBvcHRpb25zKS4KKworLSBJc3N1ZSAjNzk4OTogQWRkZWQgcHVyZSBweXRob24gaW1wbGVtZW50YXRpb24gb2YgdGhlIGBkYXRldGltZWAgbW9kdWxlLiAgVGhlIEMKKyAgbW9kdWxlIGlzIHJlbmFtZWQgdG8gYF9kYXRldGltZWAgYW5kIGlmIGF2YWlsYWJsZSwgb3ZlcnJpZGVzIGFsbCBjbGFzc2VzCisgIGRlZmluZWQgaW4gZGF0ZXRpbWUgd2l0aCBmYXN0IEMgaW1wZW1lbnRhdGlvbi4gIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZAorICBvbiB0aGUgb3JpZ2luYWwgcHl0aG9uIHByb3RvdHlwZSBmb3IgdGhlIGRhdGV0aW1lIG1vZHVsZSBieSBUaW0gUGV0ZXJzIHdpdGgKKyAgbWlub3IgbW9kaWZpY2F0aW9ucyBieSB0aGUgUHlQeSBwcm9qZWN0LiAgVGhlIHRlc3Qgc3VpdGUgbm93IHRlc3RzIGBkYXRldGltZWAKKyAgbW9kdWxlIHdpdGggYW5kIHdpdGhvdXQgYF9kYXRldGltZWAgYWNjZWxlcmF0aW9uIHVzaW5nIHRoZSBzYW1lIHRlc3QgY2FzZXMuCisKKy0gSXNzdWUgIzc4OTU6IHBsYXRmb3JtLm1hY192ZXIoKSBubyBsb25nZXIgY3Jhc2hlcyBhZnRlciBjYWxsaW5nIG9zLmZvcmsoKS4KKworLSBJc3N1ZSAjOTMyMzogRml4ZWQgYSBidWcgaW4gdHJhY2UucHkgdGhhdCByZXN1bHRlZCBpbiBsb29zaW5nIHRoZSBuYW1lIG9mIHRoZQorICBzY3JpcHQgYmVpbmcgdHJhY2VkLiAgUGF0Y2ggYnkgRWxpIEJlbmRlcnNreS4KKworLSBJc3N1ZSAjOTI4MjogRml4ZWQgLS1saXN0ZnVuY3Mgb3B0aW9uIG9mIHRyYWNlLnB5LiAgVGhhbmtzIEVsaSBCZW5kZXJza3kgZm9yCisgIHRoZSBwYXRjaC4KIAogLSBJc3N1ZSAjMzcwNDogaHR0cC5jb29raWVqYXIgd2FzIG5vdCBwcm9wZXJseSBoYW5kbGluZyBVUkxzIHdpdGggYSAvIGluIHRoZQogICBwYXJhbWV0ZXJzLgogCi0tIElzc3VlICM0NjI5OiBnZXRvcHQgcmFpc2VzIGFuIGVycm9yIGlmIGFuIGFyZ3VtZW50IGVuZHMgd2l0aCA9IHdoZXJlYXMgZ2V0b3B0Ci0gIGRvZXNuJ3QgZXhjZXB0IGEgdmFsdWUgKGVnLiAtLWhlbHA9IGlzIHJlamVjdGVkIGlmIGdldG9wdCB1c2VzIFsnaGVscD0nXSBsb25nCi0gIG9wdGlvbnMpLgorLSBJc3N1ZSAjOTI2ODogYGBwaWNrbGV0b29scy5kaXMoKWBgIG5vdyBoYXMgYW4gb3B0aW9uYWwgKmFubm90YXRlKiBhcmd1bWVudAorICB3aGljaCBjb250cm9scyBwcmludGluZyBvZiBvcGNvZGUgZGVzY3JpcHRpb25zIGluIGBgZGlzKClgYCBvdXRwdXQuCiAKLS0gSXNzdWUgIzc4OTU6IHBsYXRmb3JtLm1hY192ZXIoKSBubyBsb25nZXIgY3Jhc2hlcyBhZnRlciBjYWxsaW5nIG9zLmZvcmsoKQotCi0tIElzc3VlICM5MzIzOiBGaXhlZCBhIGJ1ZyBpbiB0cmFjZS5weSB0aGF0IHJlc3VsdGVkIGluIGxvb3NpbmcgdGhlCi0gIG5hbWUgb2YgdGhlIHNjcmlwdCBiZWluZyB0cmFjZWQuICBQYXRjaCBieSBFbGkgQmVuZGVyc2t5LgotCi0tIElzc3VlICM5MjgyOiBGaXhlZCAtLWxpc3RmdW5jcyBvcHRpb24gb2YgdHJhY2UucHkuICBUaGFua3MgRWxpCi0gIEJlbmRlcnNreSBmb3IgdGhlIHBhdGNoLgotCi0tIElzc3VlICMxNTU1NTcwOiBlbWFpbCBubyBsb25nZXIgaW5zZXJ0cyBleHRyYSBibGFuayBsaW5lcyB3aGVuIGEgXHJcbgotICBjb21ibyBjcm9zc2VzIGFuIDgxOTIgYnl0ZSBib3VuZGFyeS4KKy0gSXNzdWUgIzE1NTU1NzA6IGVtYWlsIG5vIGxvbmdlciBpbnNlcnRzIGV4dHJhIGJsYW5rIGxpbmVzIHdoZW4gYSBcclxuIGNvbWJvCisgIGNyb3NzZXMgYW4gODE5MiBieXRlIGJvdW5kYXJ5LgogCiAtIElzc3VlICM5MjQzOiBGaXggc25kaGRyIG1vZHVsZSBhbmQgYWRkIHVuaXQgdGVzdHMsIGNvbnRyaWJ1dGVkIGJ5IEphbWVzIExlZS4KIAotLSBJc3N1ZSAjOTEzNzogRml4IGlzc3VlIGluIE11dGFibGVNYXBwaW5nLnVwZGF0ZSwgd2hpY2ggaW5jb3JyZWN0bHkKLSAgdHJlYXRlZCBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgJ3NlbGYnIG9yICdvdGhlcicgc3BlY2lhbGx5LgorLSBgYGFzdC5saXRlcmFsX2V2YWwoKWBgIG5vdyBhbGxvd3MgYnl0ZSBsaXRlcmFscy4KKworLSBJc3N1ZSAjOTEzNzogRml4IGlzc3VlIGluIE11dGFibGVNYXBwaW5nLnVwZGF0ZSwgd2hpY2ggaW5jb3JyZWN0bHkgdHJlYXRlZAorICBrZXl3b3JkIGFyZ3VtZW50cyBjYWxsZWQgJ3NlbGYnIG9yICdvdGhlcicgc3BlY2lhbGx5LgorCistIGBgYXN0LmxpdGVyYWxfZXZhbCgpYGAgbm93IGFsbG93cyBzZXQgbGl0ZXJhbHMuCisKKy0gSXNzdWUgIzkxNjQ6IEVuc3VyZSB0aGF0IHN5c2NvbmZpZyBoYW5kbGVzIGR1cGxpY2F0ZSAtYXJjaCBmbGFncyBpbiBDRkxBR1MuCiAKIC0gSXNzdWUgIzc2NDY6IFRoZSBmbm1hdGNoIHBhdHRlcm4gY2FjaGUgbm8gbG9uZ2VyIGdyb3dzIHdpdGhvdXQgYm91bmQuCiAKLS0gSXNzdWUgIzkxMzY6IEZpeCAnZGljdGlvbmFyeSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbicKLSAgUnVudGltZUVycm9yIHByb2R1Y2VkIHdoZW4gcHJvZmlsaW5nIHRoZSBkZWNpbWFsIG1vZHVsZS4gIFRoaXMgd2FzCi0gIGR1ZSB0byBhIGRhbmdlcm91cyBpdGVyYXRpb24gb3ZlciAnbG9jYWxzKCknIGluIENvbnRleHQuX19pbml0X18uCistIElzc3VlICM5MTM2OiBGaXggJ2RpY3Rpb25hcnkgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24nIFJ1bnRpbWVFcnJvcgorICBwcm9kdWNlZCB3aGVuIHByb2ZpbGluZyB0aGUgZGVjaW1hbCBtb2R1bGUuICBUaGlzIHdhcyBkdWUgdG8gYSBkYW5nZXJvdXMKKyAgaXRlcmF0aW9uIG92ZXIgJ2xvY2FscygpJyBpbiBDb250ZXh0Ll9faW5pdF9fLgogCi0tIEZpeCBleHRyZW1lIHNwZWVkIGlzc3VlIGluIERlY2ltYWwucG93IHdoZW4gdGhlIGJhc2UgaXMgYW4gZXhhY3QKLSAgcG93ZXIgb2YgMTAgYW5kIHRoZSBleHBvbmVudCBpcyB0aW55IChmb3IgZXhhbXBsZSwKLSAgRGVjaW1hbCgxMCkgKiogRGVjaW1hbCgnMWUtOTk5OTk5OTk5JykpLgorLSBGaXggZXh0cmVtZSBzcGVlZCBpc3N1ZSBpbiBEZWNpbWFsLnBvdyB3aGVuIHRoZSBiYXNlIGlzIGFuIGV4YWN0IHBvd2VyIG9mIDEwCisgIGFuZCB0aGUgZXhwb25lbnQgaXMgdGlueSAoZm9yIGV4YW1wbGUsIGBgRGVjaW1hbCgxMCkgKioKKyAgRGVjaW1hbCgnMWUtOTk5OTk5OTk5JylgYCkuCisKKy0gSXNzdWUgIzkxODY6IEZpeCBtYXRoLmxvZzFwKC0xLjApIHRvIHJhaXNlIFZhbHVlRXJyb3IsIG5vdCBPdmVyZmxvd0Vycm9yLgogCiAtIElzc3VlICM5MTMwOiBGaXggdmFsaWRhdGlvbiBvZiByZWxhdGl2ZSBpbXBvcnRzIGluIHBhcnNlciBtb2R1bGUuCiAKIC0gSXNzdWUgIzkxMjg6IEZpeCB2YWxpZGF0aW9uIG9mIGNsYXNzIGRlY29yYXRvcnMgaW4gcGFyc2VyIG1vZHVsZS4KIAorLSBJc3N1ZSAjOTA5NDogcHl0aG9uIC1tIHBpY2tsZXRvb2xzIHdpbGwgbm93IGRpc2Fzc2VtYmxlIHBpY2tsZSBmaWxlcyBsaXN0ZWQgaW4KKyAgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuICBTZWUgb3V0cHV0IG9mIHB5dGhvbiAtbSBwaWNrbGV0b29scyAtaCBmb3IgbW9yZQorICBkZXRhaWxzLgorCiAtIElzc3VlICM1NDY4OiB1cmxlbmNvZGUgdG8gaGFuZGxlIGJ5dGVzIHR5cGUgYW5kIG90aGVyIGVuY29kaW5ncyBpbiBpdHMgcXVlcnkKICAgcGFyYW1ldGVyLiBQYXRjaCBieSBEYW4gTWFobi4KIAotLSBJc3N1ZSAjNzY3MzogRml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgKENWRS0yMDEwLTIwODkpIGluIHRoZSBhdWRpb29wCi0gIG1vZHVsZSwgZW5zdXJlIHRoYXQgdGhlIGlucHV0IHN0cmluZyBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZQorLSBJc3N1ZSAjNzY3MzogRml4IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgKENWRS0yMDEwLTIwODkpIGluIHRoZSBhdWRpb29wIG1vZHVsZSwKKyAgZW5zdXJlIHRoYXQgdGhlIGlucHV0IHN0cmluZyBsZW5ndGggaXMgYSBtdWx0aXBsZSBvZiB0aGUgZnJhbWUgc2l6ZS4KKworLSBJc3N1ZSAjNjUwNzogQWNjZXB0IHNvdXJjZSBzdHJpbmdzIGluIGRpcy5kaXMoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IERhbmllbAorICBVcmJhbi4KKworLSBJc3N1ZSAjNzgyOTogQ2xlYXJseSBkb2N1bWVudCB0aGF0IHRoZSBkaXMgbW9kdWxlIGlzIGV4cG9zaW5nIGFuCisgIGltcGxlbWVudGF0aW9uIGRldGFpbCB0aGF0IGlzIG5vdCBzdGFibGUgYmV0d2VlbiBQeXRob24gVk1zIG9yIHJlbGVhc2VzLgogCiAtIElzc3VlICM2NTg5OiBjbGVhbnVwIGFzeW5jb3JlLnNvY2tldF9tYXAgaW4gY2FzZSBzbXRwZC5TTVRQU2VydmVyIGNvbnN0cnVjdG9yCiAgIHJhaXNlcyBhbiBleGNlcHRpb24uCiAKLS0gSXNzdWUgIzkwNzU6IEluIHRoZSBzc2wgbW9kdWxlLCByZW1vdmUgdGhlIHNldHRpbmcgb2YgYSBgYGRlYnVnYGAgZmxhZwotICBvbiBhbiBPcGVuU1NMIHN0cnVjdHVyZS4KKy0gSXNzdWUgIzkxMTA6IEFkZGl0aW9uIG9mIENvbnRleHREZWNvcmF0b3IgdG8gY29udGV4dGxpYiwgZm9yIGNyZWF0aW5nIEFQSXMKKyAgdGhhdCBhY3QgYXMgYm90aCBjb250ZXh0IG1hbmFnZXJzIGFuZCBkZWNvcmF0b3JzLiBjb250ZXh0bWFuYWdlciBjaGFuZ2VzIHRvCisgIHVzZSBDb250ZXh0RGVjb3JhdG9yLgogCi0tIElzc3VlICM4NjgyOiBUaGUgc3NsIG1vZHVsZSBub3cgdGVtcG9yYXJ5IGluY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgotICBhIHNvY2tldCBvYmplY3QgZ290IHRocm91Z2ggYGBQeVdlYWtyZWZfR2V0T2JqZWN0YGAsIHNvIGFzIHRvIGF2b2lkIHBvc3NpYmxlCistIEltcGxlbWVudCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBhbmQgZGVwcmVjYXRlIFB5TG9hZGVyIGFuZCBQeVB5Y0xvYWRlcgorICBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy40LgorCistIElzc3VlICM5MDY0OiBwZGIncyAidXAiIGFuZCAiZG93biIgY29tbWFuZHMgbm93IGFjY2VwdCBhbiBvcHRpb25hbCBhcmd1bWVudAorICBnaXZpbmcgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gZ28uCisKKy0gSXNzdWUgIzkwMTg6IG9zLnBhdGgubm9ybWNhc2UoKSBub3cgcmFpc2VzIGEgVHlwZUVycm9yIGlmIHRoZSBhcmd1bWVudCBpcyBub3QKKyAgYGBzdHJgYCBvciBgYGJ5dGVzYGAuCisKKy0gSXNzdWUgIzkwNzU6IEluIHRoZSBzc2wgbW9kdWxlLCByZW1vdmUgdGhlIHNldHRpbmcgb2YgYSBgYGRlYnVnYGAgZmxhZyBvbiBhbgorICBPcGVuU1NMIHN0cnVjdHVyZS4KKworLSBJc3N1ZSAjODY4MjogVGhlIHNzbCBtb2R1bGUgbm93IHRlbXBvcmFyeSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgYQorICBzb2NrZXQgb2JqZWN0IGdvdCB0aHJvdWdoIGBgUHlXZWFrcmVmX0dldE9iamVjdGBgLCBzbyBhcyB0byBhdm9pZCBwb3NzaWJsZQogICBkZWFsbG9jYXRpb24gd2hpbGUgdGhlIG9iamVjdCBpcyBzdGlsbCBiZWluZyB1c2VkLgogCiAtIElzc3VlICMxMzY4MzY4OiBGYW5jeVVSTE9wZW5lciBjbGFzcyBjaGFuZ2VkIHRvIHRocm93IGFuIEV4Y2VwdGlvbiBvbiB3cm9uZwotICBwYXNzd29yZCBpbnN0ZWFkIG9mIHByZXNlbnRpbmcgYW4gaW50ZXJhY3RpdmUgcHJvbXB0LiBPbGRlciBiZWhhdmlvciBjYW4gYmUKKyAgcGFzc3dvcmQgaW5zdGVhZCBvZiBwcmVzZW50aW5nIGFuIGludGVyYWN0aXZlIHByb21wdC4gIE9sZGVyIGJlaGF2aW9yIGNhbiBiZQogICBvYnRhaW5lZCBieSBwYXNzaW5nIHJldHJ5PVRydWUgdG8gaHR0cF9lcnJvcl94eHggbWV0aG9kcyBvZiBGYW5jeVVSTE9wZW5lci4KIAotLSBJc3N1ZSAjODIwMzogRml4IElETEUgQ3JlZGl0cyBkaWFsb2c6IHZpZXdfZmlsZSgpIHVzZXMgaXRzIGVuY29kaW5nIGFyZ3VtZW50LgotCi0tIElzc3VlICM4NzIwOiBmaXggcmVncmVzc2lvbiBjYXVzZWQgYnkgZml4IGZvciAjNDA1MCBieSBtYWtpbmcgZ2V0c291cmNlZmlsZQorLSBJc3N1ZSAjODcyMDogRml4IHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IGZpeCBmb3IgIzQwNTAgYnkgbWFraW5nIGdldHNvdXJjZWZpbGUKICAgc21hcnQgZW5vdWdoIHRvIGZpbmQgc291cmNlIGZpbGVzIGluIHRoZSBsaW5lY2FjaGUuCiAKLS0gSXNzdWUgIzU2MTA6IGZlZWRwYXJzZXIgbm8gbG9uZ2VyIGVhdHMgZXh0cmEgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mCi0gIGEgYm9keSBwYXJ0IGlmIHRoZSBib2R5IHBhcnQgZW5kcyB3aXRoIGEgXHJcbi4KKy0gSXNzdWUgIzU2MTA6IGZlZWRwYXJzZXIgbm8gbG9uZ2VyIGVhdHMgZXh0cmEgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGEgYm9keQorICBwYXJ0IGlmIHRoZSBib2R5IHBhcnQgZW5kcyB3aXRoIGEgYGBcclxuYGAuCiAKLS0gRml4IGNvZGVjcy5lc2NhcGVfZW5jb2RlIHRvIHJldHVybiB0aGUgY29ycmVjdCBjb25zdW1lZCBzaXplLgorLSBJc3N1ZSAjODk4NjogbWF0aC5lcmZjIHdhcyBpbmNvcnJlY3RseSByYWlzaW5nIE92ZXJmbG93RXJyb3IgZm9yIHZhbHVlcworICBiZXR3ZWVuIC0yNy4zIGFuZCAtMzAuMCBvbiBzb21lIHBsYXRmb3Jtcy4KIAotLSBJc3N1ZSAjODg5NzogRml4IHN1bmF1IG1vZHVsZSwgdXNlIGJ5dGVzIHRvIHdyaXRlIHRoZSBoZWFkZXIuIFBhdGNoIHdyaXR0ZW4KLSAgYnkgVGhvbWFzIEpvbGxhbnMuCistIElzc3VlICM4Nzg0OiBTZXQgdGFyZmlsZSBkZWZhdWx0IGVuY29kaW5nIHRvICd1dGYtOCcgb24gV2luZG93cy4KKworLSBJc3N1ZSAjODk2NjogSWYgYSBjdHlwZXMgc3RydWN0dXJlIGZpZWxkIGlzIGFuIGFycmF5IG9mIGNfY2hhciwgY29udmVydCBpdHMKKyAgdmFsdWUgdG8gYnl0ZXMgaW5zdGVhZCBvZiBzdHIgKGFzIGRvbmUgZm9yIGNfY2hhciBhbmQgY19jaGFyX3ApLgorCistIElzc3VlICM4MTg4OiBDb21wYXJpc29ucyBiZXR3ZWVuIERlY2ltYWwgYW5kIEZyYWN0aW9uIG9iamVjdHMgYXJlIG5vdworICBwZXJtaXR0ZWQsIHJldHVybmluZyBhIHJlc3VsdCBiYXNlZCBvbiB0aGUgZXhhY3QgbnVtZXJpY2FsIHZhbHVlcyBvZiB0aGUKKyAgb3BlcmFuZHMuICBUaGlzIGJ1aWxkcyBvbiBpc3N1ZSAjMjUzMSwgd2hpY2ggYWxsb3dlZCBEZWNpbWFsLXRvLWZsb2F0CisgIGNvbXBhcmlzb25zOyBhbGwgY29tcGFyaXNvbnMgaW52b2x2aW5nIG51bWVyaWMgdHlwZXMgKGJvb2wsIGludCwgZmxvYXQsCisgIGNvbXBsZXgsIERlY2ltYWwsIEZyYWN0aW9uKSBzaG91bGQgbm93IGFjdCBhcyBleHBlY3RlZC4KKworLSBJc3N1ZSAjODg5NzogRml4IHN1bmF1IG1vZHVsZSwgdXNlIGJ5dGVzIHRvIHdyaXRlIHRoZSBoZWFkZXIuIFBhdGNoIHdyaXR0ZW4gYnkKKyAgVGhvbWFzIEpvbGxhbnMuCisKKy0gSXNzdWUgIzg4OTk6IHRpbWUuc3RydWN0X3RpbWUgbm93IGhhcyBjbGFzcyBhbmQgYXR0cmlidXRlIGRvY3N0cmluZ3MuCiAKIC0gSXNzdWUgIzY0NzA6IERyb3AgVU5DIHByZWZpeCBpbiBGaXhUay4KIAotLSBJc3N1ZSAjNDc2ODogYmFzZTY0IGVuY29kZWQgZW1haWwgYm9keSBwYXJ0cyB3ZXJlIGluY29ycmVjdGx5IHN0b3JlZCBhcwotICBiaW5hcnkgc3RyaW5ncy4gIFRoZXkgYXJlIG5vdyBjb3JyZWN0bHkgY29udmVydGVkIHRvIHN0cmluZ3MuCistIElzc3VlICM0NzY4OiBiYXNlNjQgZW5jb2RlZCBlbWFpbCBib2R5IHBhcnRzIHdlcmUgaW5jb3JyZWN0bHkgc3RvcmVkIGFzIGJpbmFyeQorICBzdHJpbmdzLiAgVGhleSBhcmUgbm93IGNvcnJlY3RseSBjb252ZXJ0ZWQgdG8gc3RyaW5ncy4KIAogLSBJc3N1ZSAjODgzMzogdGFyZmlsZSBjcmVhdGVkIGhhcmQgbGluayBlbnRyaWVzIHdpdGggYSBzaXplIGZpZWxkICE9IDAgYnkKICAgbWlzdGFrZS4KIAotLSBDaGFyc2V0LmJvZHlfZW5jb2RlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBiYXNlNjQgZW5jb2RpbmcgYnkgZW5jb2RpbmcKLSAgd2l0aCB0aGUgb3V0cHV0X2NoYXJzZXQgYmVmb3JlIGNhbGxpbmcgYmFzZTY0bWltZS5lbmNvZGUuICBQYXNzZXMgdGhlCi0gIHRlc3RzIGZyb20gMi54IGlzc3VlICMxMzY4MjQ3LgorLSBDaGFyc2V0LmJvZHlfZW5jb2RlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyBiYXNlNjQgZW5jb2RpbmcgYnkgZW5jb2Rpbmcgd2l0aCB0aGUKKyAgb3V0cHV0X2NoYXJzZXQgYmVmb3JlIGNhbGxpbmcgYmFzZTY0bWltZS5lbmNvZGUuICBQYXNzZXMgdGhlIHRlc3RzIGZyb20gMi54CisgIGlzc3VlICMxMzY4MjQ3LgorCistIElzc3VlICM4ODQ1OiBzcWxpdGUzIENvbm5lY3Rpb24gb2JqZWN0cyBub3cgaGF2ZSBhIHJlYWQtb25seSBpbl90cmFuc2FjdGlvbgorICBhdHRyaWJ1dGUgdGhhdCBpcyBUcnVlIGlmZiB0aGVyZSBhcmUgdW5jb21taXR0ZWQgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTI4OTExODogZGF0ZXRpbWUudGltZWRlbHRhIG9iamVjdHMgY2FuIG5vdyBiZSBtdWx0aXBsaWVkIGJ5IGZsb2F0IGFuZAorICBkaXZpZGVkIGJ5IGZsb2F0IGFuZCBpbnQgb2JqZWN0cy4gIFJlc3VsdHMgYXJlIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgbXVsdGlwbGUKKyAgb2YgdGltZWRlbHRhLnJlc29sdXRpb24gd2l0aCB0aWVzIHJlc29sdmVkIHVzaW5nIHJvdW5kLWhhbGYtdG8tZXZlbiBtZXRob2QuCiAKIC0gSXNzdWUgIzcxNTA6IFJhaXNlIE92ZXJmbG93RXJyb3IgaWYgdGhlIHJlc3VsdCBvZiBhZGRpbmcgb3Igc3VidHJhY3RpbmcKICAgdGltZWRlbHRhIGZyb20gZGF0ZSBvciBkYXRldGltZSBmYWxscyBvdXRzaWRlIG9mIHRoZSBNSU5ZRUFSOk1BWFlFQVIgcmFuZ2UuCiAKKy0gSXNzdWUgIzg4MDY6IGFkZCBTU0wgY29udGV4dHMgc3VwcG9ydCB0byBmdHBsaWIuCisKIC0gSXNzdWUgIzQ3Njk6IEZpeCBtYWluKCkgZnVuY3Rpb24gb2YgdGhlIGJhc2U2NCBtb2R1bGUsIHVzZSBzeXMuc3RkaW4uYnVmZmVyCiAgIGFuZCBzeXMuc3Rkb3V0LmJ1ZmZlciAoaW5zdGVhZCBvZiBzeXMuc3RkaW4gYW5kIHN5cy5zdGRvdXQpIHRvIHVzZSB0aGUgYnl0ZXMKLSAgQVBJCisgIEFQSS4KKworLSBJc3N1ZSAjODc3MDogTm93IHN5c2NvbmZpZyBkaXNwbGF5cyBpbmZvcm1hdGlvbiB3aGVuIGl0J3MgY2FsbGVkIGFzIGEgc2NyaXB0LgorICBJbml0aWFsIGlkZWEgYnkgU3JpZGhhciBSYXRuYWt1bWFyLgogCiAtIElzc3VlICM2NjYyOiBGaXggcGFyc2luZyBvZiBtYWxmb3JtYXR0ZWQgY2hhcnJlZiAoJiNiYWQ7KSwgcGF0Y2ggd3JpdHRlbiBieQotICBGcmVkcmlrIEjDpcOlcmQKKyAgRnJlZHJpayBIw6XDpXJkLgorCistIElzc3VlICM4NTQwOiBEZWNpbWFsIG1vZHVsZTogcmVuYW1lIHRoZSBDb250ZXh0Ll9jbGFtcCBhdHRyaWJ1dGUgdG8KKyAgQ29udGV4dC5jbGFtcCBhbmQgbWFrZSBpdCBwdWJsaWMuICBUaGlzIGlzIHVzZWZ1bCBpbiBjcmVhdGluZyBjb250ZXh0cyB0aGF0CisgIGNvcnJlc3BvbmQgdG8gdGhlIGRlY2ltYWwgaW50ZXJjaGFuZ2UgZm9ybWF0cyBzcGVjaWZpZWQgaW4gSUVFRSA3NTQuCiAKIC0gSXNzdWUgIzYyNjg6IEZpeCBzZWVrKCkgbWV0aG9kIG9mIGNvZGVjcy5vcGVuKCksIGRvbid0IHJlYWQgb3Igd3JpdGUgdGhlIEJPTQogICB0d2ljZSBhZnRlciBzZWVrKDApLiBGaXggYWxzbyByZXNldCgpIG1ldGhvZCBvZiBjb2RlY3MsIFVURi0xNiwgVVRGLTMyIGFuZAogICBTdHJlYW1Xcml0ZXIgY2xhc3Nlcy4KIAorLSBJc3N1ZSAjMzc5ODogc3lzLmV4aXQobWVzc2FnZSkgd3JpdGVzIHRoZSBtZXNzYWdlIHRvIHN5cy5zdGRlcnIgZmlsZSwgaW5zdGVhZAorICBvZiB0aGUgQyBmaWxlIHN0ZGVyciwgdG8gdXNlIHN0ZGVyciBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxlci4KKwogLSBJc3N1ZSAjODc4MjogQWRkIGEgdHJhaWxpbmcgbmV3bGluZSBpbiBsaW5lY2FjaGUudXBkYXRlY2FjaGUgdG8gdGhlIGxhc3QgbGluZQogICBvZiBmaWxlcyB3aXRob3V0IG9uZS4KIApAQCAtOTE1LDQ2NCArMzExOSwzMzMgQEAKICAgY29tcGFyaW5nIHRvIGEgbm9uLW1hcHBpbmcuCiAKIC0gSXNzdWUgIzg3NzQ6IHRhYm5hbm55IHVzZXMgdGhlIGVuY29kaW5nIGNvb2tpZSAoI2NvZGluZzouLi4pIHRvIHVzZSB0aGUKLSAgY29ycmVjdCBlbmNvZGluZworICBjb3JyZWN0IGVuY29kaW5nLgogCi0tIElzc3VlICM3NTA3OiBRdW90ZSAiISIgaW4gcGlwZXMucXVvdGUoKTsgaXQgaXMgc3BlY2lhbCB0byBzb21lIHNoZWxscy4KKy0gSXNzdWUgIzQ4NzA6IEFkZCBhbiBgb3B0aW9uc2AgYXR0cmlidXRlIHRvIFNTTCBjb250ZXh0cywgYXMgd2VsbCBhcyBzZXZlcmFsCisgIGBgT1BfKmBgIGNvbnN0YW50cyB0byB0aGUgYHNzbGAgbW9kdWxlLiAgVGhpcyBhbGxvd3MgdG8gc2VsZWN0aXZlbHkgZGlzYWJsZQorICBwcm90b2NvbCB2ZXJzaW9ucywgd2hlbiB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYFBST1RPQ09MX1NTTHYyM2AuCisKKy0gSXNzdWUgIzg3NTk6IEZpeGVkIHVzZXIgcGF0aHMgaW4gc3lzY29uZmlnIGZvciBwb3NpeCBhbmQgb3MyIHNjaGVtZXMuCiAKIC0gSXNzdWUgIzg2NjM6IGRpc3R1dGlscy5sb2cgZW11bGF0ZXMgYmFja3NsYXNocmVwbGFjZSBlcnJvciBoYW5kbGVyLiBGaXgKICAgY29tcGlsYXRpb24gaW4gYSBub24tQVNDSUkgZGlyZWN0b3J5IGlmIHN0ZG91dCBlbmNvZGluZyBpcyBBU0NJSSAoZWcuIGlmCiAgIHN0ZG91dCBpcyBub3QgYSBUVFkpLgogCistIElzc3VlICM4NTEzOiBvcy5nZXRfZXhlY19wYXRoKCkgc3VwcG9ydHMgYidQQVRIJyBrZXkgYW5kIGJ5dGVzIHZhbHVlLgorICBzdWJwcm9jZXNzLlBvcGVuKCkgYW5kIG9zLl9leGVjdnBlKCkgc3VwcG9ydCBieXRlcyBwcm9ncmFtIG5hbWUuIEFkZAorICBvcy5zdXBwb3J0c19ieXRlc19lbnZpcm9uIGZsYWc6IFRydWUgaWYgdGhlIG5hdGl2ZSBPUyB0eXBlIG9mIHRoZSBlbnZpcm9ubWVudAorICBpcyBieXRlcyAoZWcuIEZhbHNlIG9uIFdpbmRvd3MpLgorCistIElzc3VlICM4NjMzOiB0YXJmaWxlIGlzIG5vdyBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIGFyY2hpdmVzIHdpdGggInJhdyIgYmluYXJ5CisgIHBheCBoZWFkZXJzIGFzIGRlc2NyaWJlZCBpbiBQT1NJWC4xLTIwMDguCisKIC0gSXNzdWUgIzEyODUwODY6IFNwZWVkIHVwIHVybGxpYi5wYXJzZSBmdW5jdGlvbnM6IHF1b3RlLCBxdW90ZV9mcm9tX2J5dGVzLAogICB1bnF1b3RlLCB1bnF1b3RlX3RvX2J5dGVzLgogCiAtIElzc3VlICM4Njg4OiBEaXN0dXRpbHMgbm93IHJlY2FsY3VsYXRlcyBNQU5JRkVTVCBldmVyeXRpbWUuCiAKLS0gSXNzdWUgIzUwOTk6IHN1YnByb2Nlc3MuUG9wZW4uX19kZWxfXyBubyBsb25nZXIgcmVmZXJlbmNlcyBnbG9iYWwgb2JqZWN0cwotICB0byBwcmV2ZW50IGlzc3VlcyBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCistIElzc3VlICM4NDc3OiBzc2wuUkFORF9lZ2QoKSBhbmQgc3NsLl90ZXN0X2RlY29kZV9jZXJ0KCkgc3VwcG9ydCBzdHIgd2l0aAorICBzdXJyb2dhdGVzIGFuZCBieXRlcyBmb3IgdGhlIGZpbGVuYW1lLgogCi0tIElzc3VlICM4NjgxOiBNYWtlIHRoZSB6bGliIG1vZHVsZSdzIGVycm9yIG1lc3NhZ2VzIG1vcmUgaW5mb3JtYXRpdmUgd2hlbgotICB0aGUgemxpYiBpdHNlbGYgZG9lc24ndCBnaXZlIGFueSBkZXRhaWxlZCBleHBsYW5hdGlvbi4KKy0gSXNzdWUgIzg1NTA6IEFkZCBmaXJzdCBjbGFzcyBgYFNTTENvbnRleHRgYCBvYmplY3RzIHRvIHRoZSBzc2wgbW9kdWxlLgogCi0tIElzc3VlICM4Njc0OiBGaXhlZCBhIG51bWJlciBvZiBpbmNvcnJlY3Qgb3IgdW5kZWZpbmVkLWJlaGF2aW91ci1pbmR1Y2luZwotICBvdmVyZmxvdyBjaGVja3MgaW4gdGhlIGF1ZGlvb3AgbW9kdWxlLgorLSBJc3N1ZSAjODY4MTogTWFrZSB0aGUgemxpYiBtb2R1bGUncyBlcnJvciBtZXNzYWdlcyBtb3JlIGluZm9ybWF0aXZlIHdoZW4gdGhlCisgIHpsaWIgaXRzZWxmIGRvZXNuJ3QgZ2l2ZSBhbnkgZGV0YWlsZWQgZXhwbGFuYXRpb24uCiAKLS0gSXNzdWUgIzg1NzE6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciB3aGVuIGNvbXByZXNzaW5nIG9yIGRlY29tcHJlc3NpbmcgYQotICBjaHVuayBsYXJnZXIgdGhhbiAxR0Igd2l0aCB0aGUgemxpYiBtb2R1bGUncyBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IKLSAgb2JqZWN0cy4KKy0gVGhlIGF1ZGlvb3AgbW9kdWxlIG5vdyBzdXBwb3J0cyBzb3VuZCBmcmFnbWVudHMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiAyKiozMQorICBieXRlcyBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCBpcyBQWV9TU0laRV9UX0NMRUFOLgorCistIElzc3VlICM0OTcyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0byB0aGUgZnRwbGliLkZUUAorICBjbGFzcy4KKworLSBJc3N1ZSAjODY2NDogSW4gcHlfY29tcGlsZSwgY3JlYXRlIF9fcHljYWNoZV9fIHdoZW4gdGhlIGNvbXBpbGVkIHBhdGggaXMKKyAgZ2l2ZW4uCisKKy0gSXNzdWUgIzg1MTQ6IEFkZCBvcy5mc2VuY29kZSgpIGZ1bmN0aW9uIChVbml4IG9ubHkpOiBlbmNvZGUgYSBzdHJpbmcgdG8gYnl0ZXMKKyAgZm9yIHVzZSBpbiB0aGUgZmlsZSBzeXN0ZW0sIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciB0aGUgY29tbWFuZCBsaW5lLgorCistIElzc3VlICM4NTcxOiBGaXggYW4gaW50ZXJuYWwgZXJyb3Igd2hlbiBjb21wcmVzc2luZyBvciBkZWNvbXByZXNzaW5nIGEgY2h1bmsKKyAgbGFyZ2VyIHRoYW4gMUdCIHdpdGggdGhlIHpsaWIgbW9kdWxlJ3MgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG9iamVjdHMuCisKKy0gSXNzdWUgIzg2MDM6IFN1cHBvcnQgYnl0ZXMgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgb24gVW5peDogQWRkIG9zLmVudmlyb25iCisgIG1hcHBpbmcgYW5kIG9zLmdldGVudmIoKSBmdW5jdGlvbi4gb3MudW5zZXRlbnYoKSBlbmNvZGVzIHN0ciBhcmd1bWVudCB0byB0aGUKKyAgZmlsZSBzeXN0ZW0gZW5jb2Rpbmcgd2l0aCB0aGUgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgKGluc3RlYWQgb2YKKyAgdXRmOC9zdHJpY3QpIGFuZCBhY2NlcHRzIGJ5dGVzLiBwb3NpeC5lbnZpcm9uIGtleXMgYW5kIHZhbHVlcyBhcmUgbm93IGJ5dGVzLgogCiAtIElzc3VlICM4NTczOiBhc3luY29yZSBfc3RyZXJyb3IoKSBmdW5jdGlvbiBtaWdodCB0aHJvdyBWYWx1ZUVycm9yLgogCi0tIElzc3VlICM4NDgzOiBhc3luY29yZS5kaXNwYXRjaGVyJ3MgX19nZXRhdHRyX18gbWV0aG9kIHByb2R1Y2VkIGNvbmZ1c2luZwotICBlcnJvciBtZXNzYWdlcyB3aGVuIGFjY2Vzc2luZyB1bmRlZmluZWQgY2xhc3MgYXR0cmlidXRlcyBiZWNhdXNlIG9mIHRoZSBjaGVhcAotICBpbmhlcml0YW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCi0KLS0gSXNzdWUgIzc0NzI6IEZpeGVkIHR5cG8gaW4gZW1haWwuZW5jb2RlcnMgbW9kdWxlOyBtZXNzYWdlcyB1c2luZyBJU08tMjAyMgotICBjaGFyYWN0ZXIgc2V0cyB3aWxsIG5vdyBjb25zaXN0ZW50bHkgdXNlIGEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBvZgotICA3Yml0IHJhdGhlciB0aGFuIHNvbWV0aW1lcyBiZWluZyBtYXJrZWQgYXMgOGJpdC4KKy0gSXNzdWUgIzg0ODM6IGFzeW5jb3JlLmRpc3BhdGNoZXIncyBfX2dldGF0dHJfXyBtZXRob2QgcHJvZHVjZWQgY29uZnVzaW5nIGVycm9yCisgIG1lc3NhZ2VzIHdoZW4gYWNjZXNzaW5nIHVuZGVmaW5lZCBjbGFzcyBhdHRyaWJ1dGVzIGJlY2F1c2Ugb2YgdGhlIGNoZWFwCisgIGluaGVyaXRhbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4gIFRoZSBjaGVhcCBpbmhlcml0YW5jZSBoYXMgYmVlbgorICBkZXByZWNhdGVkLgogCiAtIElzc3VlICM0MjY1OiBzaHV0aWwuY29weWZpbGUoKSB3YXMgbGVha2luZyBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gZGlzayBmaWxscy4KICAgUGF0Y2ggYnkgVHJlcyBTZWF2ZXIuCiAKKy0gSXNzdWUgIzgzOTA6IHRhcmZpbGUgdXNlcyBzdXJyb2dhdGVlc2NhcGUgYXMgdGhlIGRlZmF1bHQgZXJyb3IgaGFuZGxlcgorICAoaW5zdGVhZCBvZiByZXBsYWNlIGluIHJlYWQgbW9kZSBvciBzdHJpY3QgaW4gd3JpdGUgbW9kZSkuCisKIC0gSXNzdWUgIzc3NTU6IFVzZSBhbiB1bmVuY3VtYmVyZWQgYXVkaW8gZmlsZSBmb3IgdGVzdHMuCiAKLS0gSXNzdWUgIzg2MjE6IHV1aWQudXVpZDQoKSByZXR1cm5lZCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW4gdGhlCi0gIHBhcmVudCBhbmQgYW55IGNoaWxkcmVuIGNyZWF0ZWQgdXNpbmcgYGBvcy5mb3JrYGAgb24gTWFjT1MgWCAxMC42LgorLSBJc3N1ZSAjODYyMTogdXVpZC51dWlkNCgpIHJldHVybmVkIHRoZSBzYW1lIHNlcXVlbmNlIG9mIHZhbHVlcyBpbiB0aGUgcGFyZW50CisgIGFuZCBhbnkgY2hpbGRyZW4gY3JlYXRlZCB1c2luZyBgYG9zLmZvcmtgYCBvbiBNYWNPUyBYIDEwLjYuCiAKLS0gSXNzdWUgIzg1Njc6IEZpeCBwcmVjZWRlbmNlIG9mIHNpZ25hbHMgaW4gRGVjaW1hbCBtb2R1bGU6IHdoZW4gYQotICBEZWNpbWFsIG9wZXJhdGlvbiByYWlzZXMgbXVsdGlwbGUgc2lnbmFscyBhbmQgbW9yZSB0aGFuIG9uZSBvZiB0aG9zZQotICBzaWduYWxzIGlzIHRyYXBwZWQsIHRoZSBzcGVjaWZpY2F0aW9uIGRldGVybWluZXMgdGhlIG9yZGVyIGluIHdoaWNoCi0gIHRoZSBzaWduYWxzIHNob3VsZCBiZSBoYW5kbGVkLiAgSW4gbWFueSBjYXNlcyB0aGlzIG9yZGVyIHdhc24ndAotICBiZWluZyBmb2xsb3dlZCwgbGVhZGluZyB0byB0aGUgd3JvbmcgUHl0aG9uIGV4Y2VwdGlvbiBiZWluZyByYWlzZWQuCistIElzc3VlICM4NTY3OiBGaXggcHJlY2VkZW5jZSBvZiBzaWduYWxzIGluIERlY2ltYWwgbW9kdWxlOiB3aGVuIGEgRGVjaW1hbAorICBvcGVyYXRpb24gcmFpc2VzIG11bHRpcGxlIHNpZ25hbHMgYW5kIG1vcmUgdGhhbiBvbmUgb2YgdGhvc2Ugc2lnbmFscyBpcworICB0cmFwcGVkLCB0aGUgc3BlY2lmaWNhdGlvbiBkZXRlcm1pbmVzIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgc2lnbmFscyBzaG91bGQgYmUKKyAgaGFuZGxlZC4gIEluIG1hbnkgY2FzZXMgdGhpcyBvcmRlciB3YXNuJ3QgYmVpbmcgZm9sbG93ZWQsIGxlYWRpbmcgdG8gdGhlIHdyb25nCisgIFB5dGhvbiBleGNlcHRpb24gYmVpbmcgcmFpc2VkLgogCiAtIElzc3VlICM3ODY1OiBUaGUgY2xvc2UoKSBtZXRob2Qgb2YgOm1vZDpgaW9gIG9iamVjdHMgc2hvdWxkIG5vdCBzd2FsbG93Ci0gIGV4Y2VwdGlvbnMgcmFpc2VkIGJ5IHRoZSBpbXBsaWNpdCBmbHVzaCgpLiAgQWxzbyBlbnN1cmUgdGhhdCBjYWxsaW5nCi0gIGNsb3NlKCkgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuICBQYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KKyAgZXhjZXB0aW9ucyByYWlzZWQgYnkgdGhlIGltcGxpY2l0IGZsdXNoKCkuICBBbHNvIHFlbnN1cmUgdGhhdCBjYWxsaW5nIGNsb3NlKCkKKyAgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuICBQYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KIAogLSBJc3N1ZSAjNDY4NzogRml4IGFjY3VyYWN5IG9mIGdhcmJhZ2UgY29sbGVjdGlvbiBydW50aW1lcyBkaXNwbGF5ZWQgd2l0aAogICBnYy5ERUJVR19TVEFUUy4KIAotLSBJc3N1ZSAjODM1NDogVGhlIHNpZ2ludGVycnVwdCBzZXR0aW5nIGlzIG5vdyBwcmVzZXJ2ZWQgZm9yIGFsbCBzaWduYWxzLAotICBub3QganVzdCBTSUdDSExELgorLSBJc3N1ZSAjODM1NDogVGhlIHNpZ2ludGVycnVwdCBzZXR0aW5nIGlzIG5vdyBwcmVzZXJ2ZWQgZm9yIGFsbCBzaWduYWxzLCBub3QKKyAganVzdCBTSUdDSExELgogCi0tIElzc3VlICM4NDY0OiB0YXJmaWxlIG5vIGxvbmdlciBjcmVhdGVzIGZpbGVzIHdpdGggZXhlY3V0ZSBwZXJtaXNzaW9ucyBzZXQKLSAgd2hlbiBtb2RlPSJ3fCIgaXMgdXNlZC4KKy0gSXNzdWUgIzcxOTI6IHdlYmJyb3dzZXIuZ2V0KCJmaXJlZm94Iikgbm93IHdvcmtzIG9uIE1hYyBPUyBYLCBhcyBkb2VzCisgIHdlYmJyb3dzZXIuZ2V0KCJzYWZhcmkiKS4KIAotLSBJc3N1ZSAjNzgzNDogRml4IGNvbm5lY3QoKSBvZiBCbHVldG9vdGggTDJDQVAgc29ja2V0cyB3aXRoIHJlY2VudCB2ZXJzaW9ucwotICBvZiB0aGUgTGludXgga2VybmVsLiAgUGF0Y2ggYnkgWWFuaXYgQWtuaW4uCistIElzc3VlICM4NDY0OiB0YXJmaWxlIG5vIGxvbmdlciBjcmVhdGVzIGZpbGVzIHdpdGggZXhlY3V0ZSBwZXJtaXNzaW9ucyBzZXQgd2hlbgorICBtb2RlPSJ3fCIgaXMgdXNlZC4KKworLSBJc3N1ZSAjNzgzNDogRml4IGNvbm5lY3QoKSBvZiBCbHVldG9vdGggTDJDQVAgc29ja2V0cyB3aXRoIHJlY2VudCB2ZXJzaW9ucyBvZgorICB0aGUgTGludXgga2VybmVsLiAgUGF0Y2ggYnkgWWFuaXYgQWtuaW4uCisKKy0gSXNzdWUgIzgyOTU6IEFkZGVkIHNodXRpbC51bnBhY2tfYXJjaGl2ZS4KIAogLSBJc3N1ZSAjNjMxMjogRml4ZWQgaHR0cCBIRUFEIHJlcXVlc3Qgd2hlbiB0aGUgdHJhbnNmZXIgZW5jb2RpbmcgaXMgY2h1bmtlZC4KICAgSXQgc2hvdWxkIGNvcnJlY3RseSByZXR1cm4gYW4gZW1wdHkgcmVzcG9uc2Ugbm93LgogCistIElzc3VlICM4NTQ2OiBSZWplY3QgTm9uZSBnaXZlbiBhcyB0aGUgYnVmZmVyaW5nIGFyZ3VtZW50IHRvIF9weWlvLm9wZW4uCisKIC0gSXNzdWUgIzg1NDk6IEZpeCBjb21waWxpbmcgdGhlIF9zc2wgZXh0ZW5zaW9uIHVuZGVyIEFJWC4gIFBhdGNoIGJ5CiAgIFNyaWRoYXIgUmF0bmFrdW1hci4KIAotLSBJc3N1ZSAjODM5MTogb3MuZXhlY3ZwZSgpIGFuZCBvcy5nZXRlbnYoKSBzdXBwb3J0cyB1bmljb2RlIHdpdGggc3Vycm9nYXRlcwotICBhbmQgYnl0ZXMgc3RyaW5ncyBmb3IgZW52aXJvbm1lbnQga2V5cyBhbmQgdmFsdWVzLCBhbmQgdXNlCi0gIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSBpbnN0ZWFkIG9mIHN5cy5nZXRkZWZhdXRsdGVuY29kaW5nKCkKKy0gSXNzdWUgIzY2NTY6IGZpeCBsb2NhbGUuZm9ybWF0X3N0cmluZyB0byBoYW5kbGUgZXNjYXBlZCBwZXJjZW50cworICBhbmQgbWFwcGluZ3MuCiAKLS0gSXNzdWUgIzIzMDI6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIFNvY2tldFNlcnZlci5CYXNlU2VydmVyLnNodXRkb3duLAotICB3aGVyZSB0aGUgbWV0aG9kIGNvdWxkIGJsb2NrIGluZGVmaW5pdGVseSBpZiBjYWxsZWQganVzdCBiZWZvcmUgdGhlCi0gIGV2ZW50IGxvb3Agc3RhcnRlZCBydW5uaW5nLiAgVGhpcyBhbHNvIGZpeGVzIHRoZSBvY2Nhc2lvbmFsIGZyZWV6ZXMKLSAgd2l0bmVzc2VkIGluIHRlc3RfaHR0cHNlcnZlcnMuCistIElzc3VlICMyMzAyOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBTb2NrZXRTZXJ2ZXIuQmFzZVNlcnZlci5zaHV0ZG93biwgd2hlcmUKKyAgdGhlIG1ldGhvZCBjb3VsZCBibG9jayBpbmRlZmluaXRlbHkgaWYgY2FsbGVkIGp1c3QgYmVmb3JlIHRoZSBldmVudCBsb29wCisgIHN0YXJ0ZWQgcnVubmluZy4gIFRoaXMgYWxzbyBmaXhlcyB0aGUgb2NjYXNpb25hbCBmcmVlemVzIHdpdG5lc3NlZCBpbgorICB0ZXN0X2h0dHBzZXJ2ZXJzLgogCi0tIElzc3VlICM4NTI0OiBXaGVuIGNyZWF0aW5nIGFuIFNTTCBzb2NrZXQsIHRoZSB0aW1lb3V0IHZhbHVlIG9mIHRoZQotICBvcmlnaW5hbCBzb2NrZXQgd2Fzbid0IHJldGFpbmVkIChpbnN0ZWFkLCBhIHNvY2tldCB3aXRoIGEgcG9zaXRpdmUgdGltZW91dAotICB3b3VsZCBiZSB0dXJuZWQgaW50byBhIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0KS4KKy0gSXNzdWUgIzg1MjQ6IFdoZW4gY3JlYXRpbmcgYW4gU1NMIHNvY2tldCwgdGhlIHRpbWVvdXQgdmFsdWUgb2YgdGhlIG9yaWdpbmFsCisgIHNvY2tldCB3YXNuJ3QgcmV0YWluZWQgKGluc3RlYWQsIGEgc29ja2V0IHdpdGggYSBwb3NpdGl2ZSB0aW1lb3V0IHdvdWxkIGJlCisgIHR1cm5lZCBpbnRvIGEgbm9uLWJsb2NraW5nIFNTTCBzb2NrZXQpLgogCiAtIElzc3VlICM1MTAzOiBTU0wgaGFuZHNoYWtlIHdvdWxkIGlnbm9yZSB0aGUgc29ja2V0IHRpbWVvdXQgYW5kIGJsb2NrCiAgIGluZGVmaW5pdGVseSBpZiB0aGUgb3RoZXIgZW5kIGRpZG4ndCByZXNwb25kLgogCi0tIFRoZSBkb19oYW5kc2hha2UoKSBtZXRob2Qgb2YgU1NMIG9iamVjdHMgbm93IGFkanVzdHMgdGhlIGJsb2NraW5nIG1vZGUgb2YKLSAgdGhlIFNTTCBzdHJ1Y3R1cmUgaWYgbmVjZXNzYXJ5IChhcyBvdGhlciBtZXRob2RzIGFscmVhZHkgZG8pLgorLSBUaGUgZG9faGFuZHNoYWtlKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIG5vdyBhZGp1c3RzIHRoZSBibG9ja2luZyBtb2RlIG9mIHRoZQorICBTU0wgc3RydWN0dXJlIGlmIG5lY2Vzc2FyeSAoYXMgb3RoZXIgbWV0aG9kcyBhbHJlYWR5IGRvKS4KIAotLSBJc3N1ZSAjODEwODogRml4IHRoZSB1bndyYXAoKSBtZXRob2Qgb2YgU1NMIG9iamVjdHMgd2hlbiB0aGUgc29ja2V0IGhhcwotICBhIG5vbi1pbmZpbml0ZSB0aW1lb3V0LiAgQWxzbyBtYWtlIHRoYXQgbWV0aG9kIGZyaWVuZGxpZXIgd2l0aCBhcHBsaWNhdGlvbnMKKy0gSXNzdWUgIzgzOTE6IG9zLmV4ZWN2cGUoKSBhbmQgb3MuZ2V0ZW52KCkgc3VwcG9ydHMgdW5pY29kZSB3aXRoIHN1cnJvZ2F0ZXMgYW5kCisgIGJ5dGVzIHN0cmluZ3MgZm9yIGVudmlyb25tZW50IGtleXMgYW5kIHZhbHVlcy4KKworLSBJc3N1ZSAjODQ2NzogUHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2Ygc3VicHJvY2VzcyBlbmNvZGVzIHRoZSBlcnJvcgorICBtZXNzYWdlIHVzaW5nIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlciB0byBzdXBwb3J0IHN1cnJvZ2F0ZXMgaW4gdGhlCisgIG1lc3NhZ2UuCisKKy0gSXNzdWUgIzg0Njg6IGJ6Mi5CWjJGaWxlKCkgYWNjZXB0cyBzdHIgd2l0aCBzdXJyb2dhdGVzIGFuZCBieXRlcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzg0NTE6IFN5c2xvZyBtb2R1bGUgbm93IHVzZXMgYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIGluc3RlYWQgb2YgdGhlCisgIHN0cmluZyAicHl0aG9uIiBhcyB0aGUgKmlkZW50Ki4gIG9wZW5sb2coKSBhcmd1bWVudHMgYXJlIGFsbCBvcHRpb25hbCBhbmQKKyAga2V5d29yZHMuCisKKy0gSXNzdWUgIzgxMDg6IEZpeCB0aGUgdW53cmFwKCkgbWV0aG9kIG9mIFNTTCBvYmplY3RzIHdoZW4gdGhlIHNvY2tldCBoYXMgYQorICBub24taW5maW5pdGUgdGltZW91dC4gIEFsc28gbWFrZSB0aGF0IG1ldGhvZCBmcmllbmRsaWVyIHdpdGggYXBwbGljYXRpb25zCiAgIHdhbnRpbmcgdG8gY29udGludWUgdXNpbmcgdGhlIHNvY2tldCBpbiBjbGVhci10ZXh0IG1vZGUsIGJ5IGRpc2FibGluZwogICBPcGVuU1NMJ3MgaW50ZXJuYWwgcmVhZGFoZWFkLiAgVGhhbmtzIHRvIERhcnJ5bCBNaWxlcyBmb3IgZ3VpZGFuY2UuCiAKLS0gSXNzdWUgIzg0Njg6IGJ6Mi5CWjJGaWxlKCkgYWNjZXB0cyBzdHIgd2l0aCBzdXJyb2dhdGVzIGFuZCBieXRlcyBmaWxlbmFtZXMKLQogLSBJc3N1ZSAjODQ5NjogbWFrZSBtYWlsY2FwLmxvb2t1cCgpIGFsd2F5cyByZXR1cm4gYSBsaXN0LCByYXRoZXIgdGhhbiBhbgogICBpdGVyYXRvci4gIFBhdGNoIGJ5IEdyZWdvcnkgTm9maS4KIAogLSBJc3N1ZSAjODE5NTogRml4IGEgY3Jhc2ggaW4gc3FsaXRlIENvbm5lY3Rpb24uY3JlYXRlX2NvbGxhdGlvbigpIGlmIHRoZQogICBjb2xsYXRpb24gbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuCiAKLS0gSXNzdWUgIzg0ODQ6IExvYWQgYWxsIGNpcGhlcnMgYW5kIGRpZ2VzdCBhbGdvcml0aG1zIHdoZW4gaW5pdGlhbGl6aW5nCi0gIHRoZSBfc3NsIGV4dGVuc2lvbiwgc3VjaCB0aGF0IHZlcmlmaWNhdGlvbiBvZiBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMKLSAgZG9lc24ndCBmYWlsIGJlY2F1c2Ugb2YgYW4gInVua25vd24gYWxnb3JpdGhtIi4KKy0gSXNzdWUgIzg0ODQ6IExvYWQgYWxsIGNpcGhlcnMgYW5kIGRpZ2VzdCBhbGdvcml0aG1zIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBfc3NsCisgIGV4dGVuc2lvbiwgc3VjaCB0aGF0IHZlcmlmaWNhdGlvbiBvZiBzb21lIFNTTCBjZXJ0aWZpY2F0ZXMgZG9lc24ndCBmYWlsCisgIGJlY2F1c2Ugb2YgYW4gInVua25vd24gYWxnb3JpdGhtIi4KKworLSBJc3N1ZSAjNjU0NzogQWRkZWQgdGhlIGlnbm9yZV9kYW5nbGluZ19zeW1saW5rcyBvcHRpb24gdG8gc2h1dGlsLmNvcHl0cmVlLgorCistIElzc3VlICMxNTQwMTEyOiBOb3cgYWxsb3dpbmcgdGhlIGNob2ljZSBvZiBhIGNvcHkgZnVuY3Rpb24gaW4gc2h1dGlsLmNvcHl0cmVlLgogCiAtIElzc3VlICM0ODE0OiB0aW1lb3V0IHBhcmFtZXRlciBpcyBub3cgYXBwbGllZCBhbHNvIGZvciBjb25uZWN0aW9ucyByZXN1bHRpbmcKICAgZnJvbSBQT1JUL0VQUlQgY29tbWFuZHMuCiAKLS0gSXNzdWUgIzM4MTc6IGZ0cGxpYi5GVFAuYWJvcnQoKSBtZXRob2Qgbm93IGNvbnNpZGVycyAyMjUgYSB2YWxpZCByZXNwb25zZQotICBjb2RlIGFzIHN0YXRlZCBpbiBSRkMtOTU5IGF0IGNoYXB0ZXIgNS40LgorLSBJc3N1ZSAjODQ2MzogYWRkZWQgbWlzc2luZyByZWZlcmVuY2UgdG8gYnp0YXIgaW4gc2h1dGlsJ3MgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNzE1NDogdXJsbGliLnJlcXVlc3QgY2FuIG5vdyBkZXRlY3QgdGhlIHByb3h5IHNldHRpbmdzIG9uIE9TWCAxMC42IChhcworICBsb25nIGFzIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICdhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbicpLgorCistIElzc3VlICMzODE3OiBmdHBsaWIuRlRQLmFib3J0KCkgbWV0aG9kIG5vdyBjb25zaWRlcnMgMjI1IGEgdmFsaWQgcmVzcG9uc2UgY29kZQorICBhcyBzdGF0ZWQgaW4gUkZDLTk1OSBhdCBjaGFwdGVyIDUuNC4KIAogLSBJc3N1ZSAjODM5NDogX2N0eXBlcy5kbG9wZW4oKSBhY2NlcHRzIGJ5dGVzLCBieXRlYXJyYXkgYW5kIHN0ciB3aXRoCiAgIHN1cnJvZ2F0ZXMuCiAKKy0gSXNzdWUgIzg1MDcyODogQWRkIGEgKnRpbWVvdXQqIHBhcmFtZXRlciB0byB0aGUgYGFjcXVpcmUoKWAgbWV0aG9kIG9mCisgIGB0aHJlYWRpbmcuU2VtYXBob3JlYCBvYmplY3RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICM4MzIyOiBBZGQgYSAqY2lwaGVycyogYXJndW1lbnQgdG8gU1NMIHNvY2tldHMsIHNvIGFzIHRvIGNoYW5nZSB0aGUKKyAgYXZhaWxhYmxlIGNpcGhlciBsaXN0LiAgSGVscHMgZml4IHRlc3Rfc3NsIHdpdGggT3BlblNTTCAxLjAuMC4KKworLSBJc3N1ZSAjODM5Mzogc3VicHJvY2VzcyBhY2NlcHRzIGJ5dGVzLCBieXRlYXJyYXkgYW5kIHN0ciB3aXRoIHN1cnJvZ2F0ZXMgZm9yCisgIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgorCiAtIElzc3VlICM3NjA2OiBYTUwtUlBDIHRyYWNlYmFjayBzdG9yZWQgaW4gWC10cmFjZWJhY2sgaXMgbm93IGVuY29kZWQgdG8gQVNDSUkKLSAgdXNpbmcgYmFja3NsYXNocmVwbGFjZSBlcnJvciBoYW5kbGVyCisgIHVzaW5nIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjODQxMjogb3Muc3lzdGVtKCkgbm93IGFjY2VwdHMgYnl0ZXMsIGJ5dGVhcnJheSBhbmQgc3RyIHdpdGggc3Vycm9nYXRlcy4KKworLSBJc3N1ZSAjMjk4NzogUkZDMjczMiBzdXBwb3J0IGZvciB1cmxwYXJzZSAoSVB2NiBhZGRyZXNzZXMpLiBQYXRjaCBieSBUb255CisgIExvY2tlIGFuZCBIYW5zIFVscmljaCBOaWVkZXJtYW5uLgogCiAtIElzc3VlICM1Mjc3OiBGaXggcXVvdGUgY291bnRpbmcgd2hlbiBwYXJzaW5nIFJGQyAyMjMxIGVuY29kZWQgcGFyYW1ldGVycy4KIAorLSBJc3N1ZSAjNzMxNjogVGhlIGFjcXVpcmUoKSBtZXRob2Qgb2YgbG9jayBvYmplY3RzIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgCisgIG1vZHVsZSBub3cgdGFrZXMgYW4gb3B0aW9uYWwgdGltZW91dCBhcmd1bWVudCBpbiBzZWNvbmRzLiAgVGltZW91dCBzdXBwb3J0CisgIHJlbGllcyBvbiB0aGUgc3lzdGVtIHRocmVhZGluZyBsaWJyYXJ5LCBzbyBhcyB0byBhdm9pZCBhIHNlbWktYnVzeSB3YWl0IGxvb3AuCisKIC0gSXNzdWUgIzgzODM6IHBpY2tsZSBhbmQgcGlja2xldG9vbHMgdXNlIHN1cnJvZ2F0ZXBhc3MgZXJyb3IgaGFuZGxlciB3aGVuCiAgIGVuY29kaW5nIHVuaWNvZGUgYXMgdXRmOCB0byBzdXBwb3J0IGxvbmUgc3Vycm9nYXRlcyBhbmQgc3RheSBjb21wYXRpYmxlIHdpdGgKLSAgUHl0aG9uIDIueCBhbmQgMy4wCisgIFB5dGhvbiAyLnggYW5kIDMueC4KIAotLSBJc3N1ZSAjODE3OTogRml4IG1hY3BhdGgucmVhbHBhdGgoKSBvbiBhIG5vbi1leGlzdGluZyBwYXRoLgorLSBJc3N1ZSAjNzU4NTogZGlmZmxpYiBjb250ZXh0IGFuZCB1bmlmaWVkIGRpZmZzIG5vdyBwbGFjZSBhIHRhYiBiZXR3ZWVuCisgIGZpbGVuYW1lIGFuZCBkYXRlLCBjb25mb3JtaW5nIHRvIHRoZSAnc3RhbmRhcmRzJyB0aGV5IHdlcmUgb3JpZ2luYWxseSBkZXNpZ25lZAorICB0byBmb2xsb3cuICBUaGlzIGltcHJvdmVzIGNvbXBhdGliaWxpdHkgd2l0aCBwYXRjaCB0b29scy4KIAotLSBJc3N1ZSAjODEzOTogb3NzYXVkaW9kZXYgZGlkbid0IGluaXRpYWxpemUgaXRzIHR5cGVzIHByb3Blcmx5LCB0aGVyZWZvcmUKLSAgc29tZSBtZXRob2RzIChzdWNoIGFzIG9zc19taXhlcl9kZXZpY2UuZmlsZW5vKCkpIHdlcmUgbm90IGF2YWlsYWJsZS4KLSAgSW5pdGlhbCBwYXRjaCBieSBCZXJ0cmFuZCBKYW5pbi4KKy0gSXNzdWUgIzc0NzI6IEZpeGVkIHR5cG8gaW4gZW1haWwuZW5jb2RlcnMgbW9kdWxlOyBtZXNzYWdlcyB1c2luZyBJU08tMjAyMgorICBjaGFyYWN0ZXIgc2V0cyB3aWxsIG5vdyBjb25zaXN0ZW50bHkgdXNlIGEgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyBvZiA3Yml0CisgIHJhdGhlciB0aGFuIHNvbWV0aW1lcyBiZWluZyBtYXJrZWQgYXMgOGJpdC4KKworLSBJc3N1ZSAjODM3NTogdGVzdF9kaXN0dXRpbHMgbm93IGNoZWNrcyBpZiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhcmUgc3RpbGwKKyAgcHJlc2VudCBiZWZvcmUgaXQgY2xlYW5zIHRoZW0uCisKKy0gSXNzdWUgIzgzNzQ6IFVwZGF0ZSB0aGUgaW50ZXJuYWwgYWxpYXMgdGFibGUgaW4gdGhlIDptb2Q6YGxvY2FsZWAgbW9kdWxlIHRvCisgIGNvdmVyIHJlY2VudCBsb2NhbGUgY2hhbmdlcyBhbmQgYWRkaXRpb25zLgorCistIElzc3VlICM4MzIxOiBHaXZlIGFjY2VzcyB0byBPcGVuU1NMIHZlcnNpb24gbnVtYmVycyBmcm9tIHRoZSBgc3NsYCBtb2R1bGUsCisgIHVzaW5nIHRoZSBuZXcgYXR0cmlidXRlcyBgc3NsLk9QRU5TU0xfVkVSU0lPTmAsIGBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk9gIGFuZAorICBgc3NsLk9QRU5TU0xfVkVSU0lPTl9OVU1CRVJgLgorCistIEFkZCBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSBhbmQgZnVuY3Rvb2xzLmNtcF90b19rZXkoKS4KKworLSBJc3N1ZSAjODI1NzogVGhlIERlY2ltYWwgY29uc3RydWN0IG5vdyBhY2NlcHRzIGEgZmxvYXQgaW5zdGFuY2UgZGlyZWN0bHksCisgIGNvbnZlcnRpbmcgdGhhdCBmbG9hdCB0byBhIERlY2ltYWwgb2YgZXF1YWwgdmFsdWU6CisKKyAgICAgPj4+IERlY2ltYWwoMS4xKQorICAgICBEZWNpbWFsKCcxLjEwMDAwMDAwMDAwMDAwMDA4ODgxNzg0MTk3MDAxMjUyMzIzMzg5MDUzMzQ0NzI2NTYyNScpCisKKy0gSXNzdWUgIzgyOTQ6IFRoZSBGcmFjdGlvbiBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBEZWNpbWFsIGFuZCBmbG9hdCBpbnN0YW5jZXMKKyAgZGlyZWN0bHkuCisKKy0gSXNzdWUgIzcyNzk6IENvbXBhcmlzb25zIGludm9sdmluZyBhIERlY2ltYWwgc2lnbmFsaW5nIE5hTiBub3cgc2lnbmFsCisgIEludmFsaWRPcGVyYXRpb24gaW5zdGVhZCBvZiByZXR1cm5pbmcgRmFsc2UuICAoQ29tcGFyaXNvbnMgaW52b2x2aW5nIGEgcXVpZXQKKyAgTmFOIGFyZSB1bmNoYW5nZWQuKSAgQWxzbywgRGVjaW1hbCBxdWlldCBOYU5zIGFyZSBub3cgaGFzaGFibGU7IERlY2ltYWwKKyAgc2lnbmFsaW5nIE5hTnMgcmVtYWluIHVuaGFzaGFibGUuCisKKy0gSXNzdWUgIzI1MzE6IENvbXBhcmlzb24gb3BlcmF0aW9ucyBiZXR3ZWVuIGZsb2F0cyBhbmQgRGVjaW1hbCBpbnN0YW5jZXMgbm93CisgIHJldHVybiBhIHJlc3VsdCBiYXNlZCBvbiB0aGUgbnVtZXJpYyB2YWx1ZXMgb2YgdGhlIG9wZXJhbmRzOyBwcmV2aW91c2x5IHRoZXkKKyAgcmV0dXJuZWQgYW4gYXJiaXRyYXJ5IHJlc3VsdCBiYXNlZCBvbiB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2YgaWQoZmxvYXQpIGFuZAorICBpZChEZWNpbWFsKS4gIFNlZSBhbHNvIGlzc3VlICM4MTg4LCB3aGljaCBhZGRzIERlY2ltYWwtdG8tRnJhY3Rpb24KKyAgY29tcGFyaXNvbnMuCisKKy0gQWRkZWQgYSBzdWJ0cmFjdCgpIG1ldGhvZCB0byBjb2xsZWN0aW9ucy5Db3VudGVyKCkuCisKKy0gSXNzdWUgIzgyMzM6IFdoZW4gcnVuIGFzIGEgc2NyaXB0LCBweV9jb21waWxlLnB5IG9wdGlvbmFsbHkgdGFrZXMgYSBzaW5nbGUKKyAgYXJndW1lbnQgYC1gIHdoaWNoIHRlbGxzIGl0IHRvIHJlYWQgZmlsZXMgdG8gY29tcGlsZSBmcm9tIHN0ZGluLiAgRWFjaCBsaW5lIGlzCisgIHJlYWQgb24gZGVtYW5kIGFuZCB0aGUgbmFtZWQgZmlsZSBpcyBjb21waWxlZCBpbW1lZGlhdGVseS4gIChPcmlnaW5hbCBwYXRjaCBieQorICBQaW90ciBPxbxhcm93c2tpKS4KKworLSBCYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZTogVW5pY29kZSBjb2RlcG9pbnRzIGxpbmUgdGFidWxhdGlvbiAoMHgwQikgYW5kCisgIGZvcm0gZmVlZCAoMHgwQykgYXJlIG5vdyBjb25zaWRlcmVkIGxpbmVicmVha3MsIGFzIHNwZWNpZmllZCBpbiBVbmljb2RlCisgIFN0YW5kYXJkIEFubmV4ICMxNC4gIFNlZSBpc3N1ZSAjNzY0My4gIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy90cjE0LworCistIENvbXBhcmlzb25zIHVzaW5nIG9uZSBvZiA8LCA8PSwgPiwgPj0gYmV0d2VlbiBhIGNvbXBsZXggaW5zdGFuY2UgYW5kIGEKKyAgRnJhY3Rpb25zIGluc3RhbmNlIG5vdyByYWlzZSBUeXBlRXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgVHJ1ZS9GYWxzZS4gIFRoaXMKKyAgbWFrZXMgRnJhY3Rpb24gPD0+IGNvbXBsZXggY29tcGFyaXNvbnMgY29uc2lzdGVudCB3aXRoIGludCA8PT4gY29tcGxleCwgZmxvYXQKKyAgPD0+IGNvbXBsZXgsIGFuZCBjb21wbGV4IDw9PiBjb21wbGV4IGNvbXBhcmlzb25zLgorCistIElzc3VlICM4MTM5OiBvc3NhdWRpb2RldiBkaWRuJ3QgaW5pdGlhbGl6ZSBpdHMgdHlwZXMgcHJvcGVybHksIHRoZXJlZm9yZSBzb21lCisgIG1ldGhvZHMgKHN1Y2ggYXMgb3NzX21peGVyX2RldmljZS5maWxlbm8oKSkgd2VyZSBub3QgYXZhaWxhYmxlLiAgSW5pdGlhbCBwYXRjaAorICBieSBCZXJ0cmFuZCBKYW5pbi4KKworLSBJc3N1ZSAjODIwNTogUmVtb3ZlIHRoZSAiTW9kdWxlcyIgZGlyZWN0b3J5IGZyb20gc3lzLnBhdGggd2hlbiBQeXRob24gaXMKKyAgcnVubmluZyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkgKFBPU0lYIG9ubHkpLgogCiAtIElzc3VlICM3NTEyOiBzaHV0aWwuY29weXN0YXQoKSBjb3VsZCByYWlzZSBhbiBPU0Vycm9yIHdoZW4gdGhlIGZpbGVzeXN0ZW0KLSAgZGlkbid0IHN1cHBvcnQgY2hmbGFncygpIChmb3IgZXhhbXBsZSBaRlMgdW5kZXIgRnJlZUJTRCkuICBUaGUgZXJyb3IgaXMKLSAgbm93IHNpbGVuY2VkLgorICBkaWRuJ3Qgc3VwcG9ydCBjaGZsYWdzKCkgKGZvciBleGFtcGxlIFpGUyB1bmRlciBGcmVlQlNEKS4gIFRoZSBlcnJvciBpcyBub3cKKyAgc2lsZW5jZWQuCisKKy0gSXNzdWUgIzc4NjA6IHBsYXRmb3JtLnVuYW1lIG5vdyByZXBvcnRzIHRoZSBjb3JyZWN0ICdtYWNoaW5lJyB0eXBlIHdoZW4gUHl0aG9uCisgIGlzIHJ1bm5pbmcgaW4gV09XNjQgbW9kZSBvbiA2NCBiaXQgV2luZG93cy4KIAogLSBJc3N1ZSAjMzg5MCwgIzgyMjI6IEZpeCByZWN2KCkgYW5kIHJlY3ZfaW50bygpIG9uIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cy4KICAgQWxzbywgZW5hYmxlIHRoZSBTU0xfTU9ERV9BVVRPX1JFVFJZIGZsYWcgb24gU1NMIHNvY2tldHMsIHNvIHRoYXQgYmxvY2tpbmcKICAgcmVhZHMgYW5kIHdyaXRlcyBhcmUgYWx3YXlzIHJldHJpZWQgYnkgT3BlblNTTCBpdHNlbGYuCiAKLS0gSXNzdWUgIzY3MTYvMjogQmFja3NsYXNoLXJlcGxhY2UgZXJyb3Igb3V0cHV0IGluIGNvbXBpbGFsbC4KLQotRXh0ZW5zaW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzYzMTc6IE5vdyB3aW5zb3VuZC5QbGF5U291bmQgY2FuIGFjY2VwdCBub24gYXNjaWkgZmlsZW5hbWUuCi0KLS0gSXNzdWUgIzkwNTQ6IEZpeCBhIGNyYXNoIG9jY3VycmluZyB3aGVuIHVzaW5nIHRoZSBweWV4cGF0IG1vZHVsZQotICB3aXRoIGV4cGF0IHZlcnNpb24gMi4wLjEuCi0KLS0gSXNzdWUgIzEwMDAzOiBBbGxvdyBoYW5kbGluZyBvZiBTSUdCUkVBSyBvbiBXaW5kb3dzLiBGaXhlcyBhIHJlZ3Jlc3Npb24KLSAgaW50cm9kdWNlZCBieSBpc3N1ZSAjOTMyNC4KLQotLSBJc3N1ZSAjODczNDogQXZvaWQgY3Jhc2ggaW4gbXN2Y3J0LmdldF9vc2ZoYW5kbGUoKSB3aGVuIGFuIGludmFsaWQgZmlsZQotICBkZXNjcmlwdG9yIGlzIHByb3ZpZGVkLiAgUGF0Y2ggYnkgUGFzY2FsIENoYW1ib24uCi0KLS0gSXNzdWUgIzc3MzY6IFJlbGVhc2UgdGhlIEdJTCBhcm91bmQgY2FsbHMgdG8gb3BlbmRpcigpIGFuZCBjbG9zZWRpcigpCi0gIGluIHRoZSBwb3NpeCBtb2R1bGUuICBQYXRjaCBieSBNYXJjaW4gQmFjaHJ5LgotCi0tIElzc3VlICM0ODM1OiBtYWtlIFB5TG9uZ19Gcm9tU29ja2V0X3QoKSBhbmQgUHlMb25nX0FzU29ja2V0X3QoKSBwcml2YXRlCi0gIHRvIHRoZSBzb2NrZXQgbW9kdWxlLCBhbmQgZml4IHRoZSB3aWR0aCBvZiBzb2NrZXQgZGVzY3JpcHRvcnMgdG8gYmUKLSAgY29ycmVjdGx5IGRldGVjdGVkIHVuZGVyIDY0LWJpdCBXaW5kb3dzLgotCi0tIElzc3VlICM2NjU3NjE6IGBgZnVuY3Rvb2xzLnJlZHVjZSgpYGAgd2lsbCBubyBsb25nZXIgbWFzayBleGNlcHRpb25zCi0gIG90aGVyIHRoYW4gYGBUeXBlRXJyb3JgYCByYWlzZWQgYnkgdGhlIGl0ZXJhdG9yIGFyZ3VtZW50LgotCi0tIElzc3VlICM5NTcwOiBVc2UgUEVQIDM4MyBkZWNvZGluZyBpbiBvcy5ta25vZCBhbmQgb3MubWtmaWZvLgotCi0tIElzc3VlICM5MzI0OiBBZGQgcGFyYW1ldGVyIHZhbGlkYXRpb24gdG8gc2lnbmFsLnNpZ25hbCBvbiBXaW5kb3dzIGluIG9yZGVyCi0gIHRvIHByZXZlbnQgY3Jhc2hlcy4KLQotLSBJc3N1ZSAjOTUyNjogUmVtb3ZlIHNvbWUgb3V0ZGF0ZWQgKGludCkgY2FzdHMgdGhhdCB3ZXJlIHByZXZlbnRpbmcKLSAgdGhlIGFycmF5IG1vZHVsZSBmcm9tIHdvcmtpbmcgY29ycmVjdGx5IHdpdGggYXJyYXlzIG9mIG1vcmUgdGhhbgotICAyKiozMSBlbGVtZW50cy4KLQotLSBGaXggbWVtb3J5IGxlYWsgaW4gc3NsLl9zc2wuX3Rlc3RfZGVjb2RlX2NlcnQuCi0KLS0gSXNzdWUgIzgwNjU6IEZpeCBtZW1vcnkgbGVhayBpbiByZWFkbGluZSBtb2R1bGUgKGZyb20gZmFpbHVyZSB0bwotICBmcmVlIHRoZSByZXN1bHQgb2YgaGlzdG9yeV9nZXRfaGlzdG9yeV9zdGF0ZSgpKS4KLQotLSBJc3N1ZSAjOTQ1MDogRml4IG1lbW9yeSBsZWFrIGluIHJlYWRsaW5lLnJlcGxhY2VfaGlzdG9yeV9pdGVtIGFuZAotICByZWFkbGluZS5yZW1vdmVfaGlzdG9yeV9pdGVtIGZvciByZWFkbGluZSB2ZXJzaW9uID49IDUuMC4KLQotLSBJc3N1ZSAjODEwNTogVmFsaWRhdGUgZmlsZSBkZXNjcmlwdG9yIHBhc3NlZCB0byBtbWFwLm1tYXAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjOTQyMjogRml4IG1lbW9yeSBsZWFrIHdoZW4gcmUtaW5pdGlhbGl6aW5nIGEgc3RydWN0LlN0cnVjdCBvYmplY3QuCi0KLS0gSXNzdWUgIzc5MDA6IFRoZSBnZXRncm91cHMoMikgc3lzdGVtIGNhbGwgb24gTWFjT1NYIGJlaGF2ZXMgcmF0aGVyIG9kZGx5Ci0gIGNvbXBhcmVkIHRvIG90aGVyIHVuaXggc3lzdGVtcy4gSW4gcGFydGljdWxhciwgb3MuZ2V0Z3JvdXBzKCkgZG9lcwotICBub3QgcmVmbGVjdCBhbnkgY2hhbmdlcyBtYWRlIHVzaW5nIG9zLnNldGdyb3VwcygpIGJ1dCBiYXNpY2x5IGFsd2F5cwotICByZXR1cm5zIHRoZSBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSBpZCBjb21tYW5kLgotCi0gIG9zLmdldGdyb3VwcygpIGNhbiBub3cgcmV0dXJuIG1vcmUgdGhhbiAxNiBncm91cHMgb24gTWFjT1NYLgotCi0tIElzc3VlICM3Mzg0OiBJZiB0aGUgc3lzdGVtIHJlYWRsaW5lIGxpYnJhcnkgaXMgbGlua2VkIGFnYWluc3QKLSAgbmN1cnNlcywgZG8gbm90IGxpbmsgdGhlIHJlYWRsaW5lIG1vZHVsZSBhZ2FpbnN0IG5jdXJzZXN3LiBUaGUKLSAgYWRkaXRpb25hbCByZXN0cmljdGlvbiBvZiBsaW5raW5nIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMKLSAgYWdhaW5zdCB0aGUgc2FtZSBjdXJzZXMgbGlicmFyeSBpcyBjdXJyZW50bHkgbm90IGVuYWJsZWQuCi0KLS0gSXNzdWUgIzg5NzM6IEFkZCBfX2FsbF9fIHRvIHN0cnVjdCBtb2R1bGU7IHRoaXMgZW5zdXJlcyB0aGF0Ci0gIGhlbHAoc3RydWN0KSBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3RydWN0LlN0cnVjdCBjbGFzcy4KLQotLSBJc3N1ZSAjMjgxMDogRml4IGNhc2VzIHdoZXJlIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IEFQSSByZXR1cm5zCi0gIEVSUk9SX01PUkVfREFUQSwgcmVxdWlyaW5nIGEgcmUtdHJ5IGluIG9yZGVyIHRvIGdldCB0aGUgY29tcGxldGUgcmVzdWx0LgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjODg1MjogQWxsb3cgdGhlIHNvY2tldCBtb2R1bGUgdG8gYnVpbGQgb24gT3BlblNvbGFyaXMuCi0KLS0gSXNzdWUgIzEwMDU0OiBTb21lIHBsYXRmb3JtcyBwcm92aWRlIHVpbnRwdHJfdCBpbiBpbnR0eXBlcy5oLiAgUGF0Y2ggYnkKLSAgQWtpcmEgS2l0YWRhLgotCi0tIElzc3VlICMxMDA1NTogTWFrZSBqc29uIEM4OS1jb21wbGlhbnQgaW4gVUNTNCBtb2RlLgotCi0tIElzc3VlICM2MjQ0OiBBbGxvdyBkZXRlY3RfdGtpbnRlciB0byBsb29rIGZvciBUY2wvVGsgOC42LgotCi0tIElzc3VlICMxNjMzODYzOiBEb24ndCBpZ25vcmUgJENDIHVuZGVyIEFJWC4KLQotLSBJc3N1ZSAjOTgxMDogQ29tcGlsZSBiemlwMiBzb3VyY2UgZmlsZXMgaW4gcHl0aG9uJ3MgcHJvamVjdCBmaWxlCi0gIGRpcmVjdGx5LiBJdCB1c2VkIHRvIGJlIGJ1aWx0IHdpdGggYnppcDIncyBtYWtlZmlsZS4KLQotLSBJc3N1ZSAjOTQxMzQ2OiBJbXByb3ZlIHRoZSBidWlsZCBwcm9jZXNzIHVuZGVyIEFJWCBhbmQgYWxsb3cgUHl0aG9uIHRvCi0gIGJlIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuICBQYXRjaCBieSBTw6liYXN0aWVuIFNhYmzDqS4KLQotLSBJc3N1ZSAjNDAyNjogTWFrZSB0aGUgZmNudGwgZXh0ZW5zaW9uIGJ1aWxkIHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4KLSAgU2FibMOpLgotCi0tIElzc3VlICMzMTAxOiBIZWxwZXIgZnVuY3Rpb25zIF9hZGRfb25lX3RvX2luZGV4X0MoKSBhbmQKLSAgX2FkZF9vbmVfdG9faW5kZXhfRigpIGJlY29tZSBfUHlfYWRkX29uZV90b19pbmRleF9DKCkgYW5kCi0gIF9QeV9hZGRfb25lX3RvX2luZGV4X0YoKSwgcmVzcGVjdGl2ZWx5LgotCi0tIElzc3VlICM5NzAwOiBkZWZpbmUgSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyB1bmRlciBBSVggNi54LiAgUGF0Y2ggYnkKLSAgU8OpYmFzdGllbiBTYWJsw6kuCi0KLS0gSXNzdWUgIzM5Mjg6IG9zLm1rbm9kKCkgbm93IGF2YWlsYWJsZSBpbiBTb2xhcmlzLCBhbHNvLgotCi0tIElzc3VlICM2NzE2OiBRdW90ZSAteCBhcmd1bWVudHMgb2YgY29tcGlsZWFsbCBpbiBNU0kgaW5zdGFsbGVyLgotICBFeGNsdWRlIDJ0bzMgdGVzdHMgZnJvbSBjb21waWxlYWxsLgotCi0tIElzc3VlICMxNjI4NDg0OiBUaGUgTWFrZWZpbGUgZG9lc24ndCBpZ25vcmUgdGhlIENGTEFHUyBlbnZpcm9ubWVudAotICB2YXJpYWJsZSBhbnltb3JlLiAgSXQgYWxzbyBmb3J3YXJkcyB0aGUgTERGTEFHUyBzZXR0aW5ncyB0byB0aGUgbGlua2VyCi0gIHdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQotLSBJc3N1ZSAjOTcwMTogVGhlIE1hY09TWCBpbnN0YWxsZXIgY2FuIHBhdGNoIHRoZSBzaGVsbCBwcm9maWxlIHRvIGVuc3VyZSB0aGF0Ci0gIHRoZSAiYmluIiBkaXJlY3RvcnkgaW5zaWRlIHRoZSBmcmFtZXdvcmsgaXMgb24gdGhlIHNoZWxsJ3Mgc2VhcmNoIHBhdGguIFRoaXMKLSAgZmVhdHVyZSBub3cgYWxzbyBzdXBwb3J0cyB0aGUgWlNIIHNoZWxsLgotCi0tIElzc3VlICM3NDczOiBhdm9pZCBsaW5rIGVycm9ycyB3aGVuIGJ1aWxkaW5nIGEgZnJhbWV3b3JrIHdpdGggYSBkaWZmZXJlbnQKLSAgc2V0IG9mIGFyY2hpdGVjdHVyZXMgdGhhbiB0aGUgb25lIHRoYXQgaXMgY3VycmVudGx5IGluc3RhbGxlZC4KLQotVGVzdHMKLS0tLS0tCi0KLS0gSXNzdWUgIzM2OTk6IEZpeCB0ZXN0X2JpZ2FkZHJzcGFjZSBhbmQgZXh0ZW5kIGl0IHRvIHRlc3QgYnl0ZXN0cmluZ3MKLSAgYXMgd2VsbCBhcyB1bmljb2RlIHN0cmluZ3MuICBJbml0aWFsIHBhdGNoIGJ5IFNhbmRybyBUb3NpLgotCi0tIElzc3VlICM5NjI4OiBmaXggcnVudGVzdHMuc2ggLXggb3B0aW9uIHNvIG1vcmUgdGhhbiBvbmUgdGVzdCBjYW4gYmUgZXhjbHVkZWQuCi0KLS0gSXNzdWUgIzk4OTQ6IERvIG5vdCBoYXJkY29kZSBFTk9FTlQgaW4gdGVzdF9zdWJwcm9jZXNzLgotCi0tIElzc3VlICM5MzE1OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHRyYWNlIG1vZHVsZS4gIFBhdGNoIGJ5IEVsaSBCZW5kZXJza3kuCi0KLS0gSXNzdWUgIzc1NjQ6IFNraXAgdGVzdF9pb2N0bCBpZiBhbm90aGVyIHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8gL2Rldi90dHkuCi0KLS0gSXNzdWUgIzg4NTc6IFByb3ZpZGUgYSB0ZXN0IGNhc2UgZm9yIHNvY2tldC5nZXRhZGRyaW5mby4KLQotLSBJc3N1ZSAjODQzMzogRml4IHRlc3RfY3Vyc2VzIGZhaWx1cmUgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBuY3Vyc2VzLgotCi0tIElzc3VlICM5NDk2OiBQcm92aWRlIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHJsY29tcGxldGVyIG1vZHVsZS4gIFBhdGNoIGJ5Ci0gIE1pY2hlbGUgT3Jyw7kuCi0KLS0gSXNzdWUgIzkyNTE6IHRlc3RfdGhyZWFkZWRfaW1wb3J0IGRpZG4ndCBmYWlsIHdoZW4gcnVuIHRocm91Z2ggcmVncnRlc3QKLSAgaWYgdGhlIGltcG9ydCBsb2NrIHdhcyBkaXNhYmxlZC4KLQotLSBJc3N1ZSAjNzQ0OTogU2tpcCB0ZXN0X3NvY2tldHNlcnZlciBpZiB0aHJlYWRpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZAotCi0tIElzc3VlICM4NjcyOiBBZGQgYSB6bGliIHRlc3QgZW5zdXJpbmcgdGhhdCBhbiBpbmNvbXBsZXRlIHN0cmVhbSBjYW4gYmUKLSAgaGFuZGxlZCBieSBhIGRlY29tcHJlc3NvciBvYmplY3Qgd2l0aG91dCBlcnJvcnMgKGl0IHJldHVybnMgaW5jb21wbGV0ZQotICB1bmNvbXByZXNzZWQgZGF0YSkuCi0KLS0gSXNzdWUgIzg2Mjk6IERpc2FibGUgc29tZSB0ZXN0X3NzbCB0ZXN0cywgc2luY2UgdGhleSBnaXZlIGRpZmZlcmVudAotICByZXN1bHRzIHdpdGggT3BlblNTTCAxLjAuMCBhbmQgaGlnaGVyLgotCi0tIElzc3VlICM4NTMzOiByZWdydGVzdCB1c2VzIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlciBmb3Igc3Rkb3V0IHRvIGF2b2lkCi0gIFVuaWNvZGVFbmNvZGVFcnJvciAod3JpdGUgbm9uLUFTQ0lJIGNoYXJhY3RlciB0byBzdGRvdXQgdXNpbmcgQVNDSUkgZW5jb2RpbmcpCi0KLS0gSXNzdWUgIzg1NzY6IFJlbW92ZSB1c2Ugb2YgZmluZF91bnVzZWRfcG9ydCgpIGluIHRlc3Rfc210cGxpYiBhbmQKLSAgdGVzdF9tdWx0aXByb2Nlc3NpbmcuICBQYXRjaCBieSBQYXVsIE1vb3JlLgotCi0tIElzc3VlICM4NTMxOiBTa2lwIHRlc3RfYXNjaWlfZm9ybWF0ZCBpZiBjdHlwZXMgbW9kdWxlIGlzIG1pc3NpbmcKLQotLSBJc3N1ZSAjMzg2NDogU2tpcCB0aHJlZSB0ZXN0X3NpZ25hbCB0ZXN0cyBvbiBmcmVlYnNkNiBiZWNhdXNlIHRoZXkgZmFpbAotICBpZiBhbnkgdGhyZWFkIHdhcyBwcmV2aW91c2x5IHN0YXJ0ZWQsIG1vc3QgbGlrZWx5IGR1ZSB0byBhIHBsYXRmb3JtIGJ1Zy4KLQotLSBJc3N1ZSAjODE5MzogRml4IHRlc3RfemxpYiBmYWlsdXJlIHdpdGggemxpYiAxLjIuNC4KLQotLSBJc3N1ZSAjOTU2ODogRml4IHRlc3RfdXJsbGliMl9sb2NhbG5ldCBvbiBPUyBYIDEwLjMuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjOTgxNzogQWRkIGV4cGF0IENPUFlJTkcgZmlsZTsgYWRkIGV4cGF0LCBsaWJmZmkgYW5kIGV4cGF0IGxpY2Vuc2VzCi0gIHRvIERvYy9saWNlbnNlLnJzdC4KLQotLSBJc3N1ZSAjOTI1NTogRG9jdW1lbnQgdGhhdCB0aGUgJ3Rlc3QnIHBhY2thZ2UgaXMgbWVhbnQgZm9yIGludGVyYWwgUHl0aG9uIHVzZQotICBvbmx5LgotCi0tIElzc3VlICM3ODI5OiBEb2N1bWVudCBpbiBkaXMgdGhhdCBieXRlY29kZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCi0KLVRvb2xzL0RlbW9zCi0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM3Mjg3OiBEZW1vL2ltcHV0aWwva25lZS5weSB3YXMgcmVtb3ZlZC4KLQotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMS4yPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDIwMTAtMDMtMjAqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM3MTczOiBHZW5lcmF0b3IgZmluYWxpemF0aW9uIGNvdWxkIGludmFsaWRhdGUgc3lzLmV4Y19pbmZvKCkuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjY5ODogVGhlIC0tY29tcGlsZXIgaWdub3JlZCB3YXMgaWdub3JlZCBmb3IgZGlzdHV0aWxzJyBidWlsZF9leHQuCi0KLS0gSXNzdWUgIzQ5NjE6IEluY29uc2lzdGVudC93cm9uZyByZXN1bHQgb2YgYXNreWVzbm8gZnVuY3Rpb24gaW4gdGtNZXNzYWdlQm94Ci0gIHdpdGggVGNsL1RrLTguNS4KLQotLSBJc3N1ZSAjNzM1NjogY3R5cGVzLnV0aWw6IE1ha2UgcGFyc2luZyBvZiBsZGNvbmZpZyBvdXRwdXQgaW5kZXBlbmRlbnQgb2YKLSAgdGhlIGxvY2FsZS4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjEuMiByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjAxMC0wMy0wNioKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzc1NDQ6IFByZWFsbG9jYXRlIHRocmVhZCBtZW1vcnkgYmVmb3JlIGNyZWF0aW5nIHRoZSB0aHJlYWQgdG8gYXZvaWQKLSAgYSBmYXRhbCBlcnJvciBpbiBsb3cgbWVtb3J5IGNvbmRpdGlvbi4KLQotLSBJc3N1ZSAjNzgyMDogVGhlIHBhcnNlciB0b2tlbml6ZXIgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBpZgotICB0aGUgQk9NIGNoZWNrIGZhaWxzLgotCi0tIEhhbmRsZSBlcnJvcnMgZnJvbSBsb29raW5nIHVwIF9fcHJlcGFyZV9fIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjNTkzOTogQWRkIGFkZGl0aW9uYWwgcnVudGltZSBjaGVja2luZyB0byBlbnN1cmUgYSB2YWxpZCBjYXBzdWxlCi0gIGluIE1vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jLgotCi0tIElzc3VlICM3MzA5OiBGaXggdW5jaGVja2VkIGF0dHJpYnV0ZSBhY2Nlc3Mgd2hlbiBjb252ZXJ0aW5nCi0gIFVuaWNvZGVFbmNvZGVFcnJvciwgVW5pY29kZURlY29kZUVycm9yLCBhbmQgVW5pY29kZVRyYW5zbGF0ZUVycm9yIHRvCi0gIHN0cmluZ3MuCi0KLS0gSXNzdWUgIzY5MDI6IEZpeCBwcm9ibGVtIHdpdGggYnVpbHQtaW4gdHlwZXMgZm9ybWF0IGluY29ycmVjdGx5IHdpdGgKLSAgMCBwYWRkaW5nLgotCi0tIElzc3VlICM3OTg4OiBGaXggZGVmYXVsdCBhbGlnbm1lbnQgdG8gYmUgcmlnaHQgYWxpZ25lZCBmb3IKLSAgY29tcGxleC5fX2Zvcm1hdF9fLiBOb3cgaXQgbWF0Y2hlcyBvdGhlciBudW1lcmljIHR5cGVzLgotCi0tIElzc3VlICM3Mzg1OiBGaXggYSBjcmFzaCBpbiBgTWVtb3J5Vmlld19Gcm9tT2JqZWN0YCB3aGVuCi0gIGBQeU9iamVjdF9HZXRCdWZmZXJgIGZhaWxzLiAgUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgotCi0tIElzc3VlICM3Nzg4OiBGaXggYW4gaW50ZXJwcmV0ZXIgY3Jhc2ggcHJvZHVjZWQgYnkgZGVsZXRpbmcgYSBsaXN0Ci0gIHNsaWNlIHdpdGggdmVyeSBsYXJnZSBzdGVwIHZhbHVlLgotCi0tIElzc3VlICM3NTYxOiBPcGVyYXRpb25zIG9uIGVtcHR5IGJ5dGVhcnJheXMgKHN1Y2ggYXMgYGludChieXRlYXJyYXkoKSlgKQotICBjb3VsZCBjcmFzaCBpbiBtYW55IHBsYWNlcyBiZWNhdXNlIG9mIHRoZSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoKSBtYWNybwotICByZXR1cm5pbmcgTlVMTC4gIFRoZSBtYWNybyBub3cgcmV0dXJucyBhIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGVtcHR5Ci0gIHN0cmluZyBpbnN0ZWFkLgotCi0tIElzc3VlICM3NjMyOiBGaXggdmFyaW91cyBzdHIgLT4gZmxvYXQgY29udmVyc2lvbiBidWdzIHByZXNlbnQgaW4gMi43Ci0gIGFscGhhIDIsIGluY2x1ZGluZzogKDEpIGEgc2VyaW91cyAnd3Jvbmcgb3V0cHV0JyBidWcgdGhhdCBjb3VsZAotICBvY2N1ciBmb3IgbG9uZyAoPiA0MCBkaWdpdCkgaW5wdXQgc3RyaW5ncywgKDIpIGEgY3Jhc2ggaW4gZHRvYS5jCi0gIHRoYXQgb2NjdXJyZWQgaW4gZGVidWcgYnVpbGRzIHdoZW4gcGFyc2luZyBjZXJ0YWluIGxvbmcgbnVtZXJpYwotICBzdHJpbmdzIGNvcnJlc3BvbmRpbmcgdG8gc3Vibm9ybWFsIHZhbHVlcywgKDMpIGEgbWVtb3J5IGxlYWsgZm9yCi0gIHNvbWUgdmFsdWVzIGxhcmdlIGVub3VnaCB0byBjYXVzZSBvdmVyZmxvdywgYW5kICg0KSBhIG51bWJlciBvZgotICBmbGF3cyB0aGF0IGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0bHkgcm91bmRlZCByZXN1bHRzLgotCi0tIElzc3VlICM3NjA0OiBEZWxldGluZyBhbiB1bnNldCBzbG90dGVkIGF0dHJpYnV0ZSBkaWQgbm90IHJhaXNlIGFuCi0gIEF0dHJpYnV0ZUVycm9yLgotCi0tIElzc3VlICM3NDY2OiBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgY2FsbGVkCi0gIGluIHRoZSBtaWRkbGUgb2YgcG9wdWxhdGluZyBhIHR1cGxlLiAgUGF0Y2ggYnkgRmxvcmVudCBYaWNsdW5hLgotCi0tIElzc3VlICM3NDE5OiBzZXRsb2NhbGUoKSBjb3VsZCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIgb24gV2luZG93cyB3aGVuIGNhbGxlZAotICB3aXRoIGludmFsaWQgdmFsdWVzLgotCi0tIElzc3VlICM2MDc3OiBPbiBXaW5kb3dzLCBmaWxlcyBvcGVuZWQgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlIGluICJ3dCsiCi0gIG1vZGUgd291bGQgYXBwZWFyIHRydW5jYXRlZCBvbiB0aGUgZmlyc3QgJzB4MWEnIGJ5dGUgKGFrYS4gQ3RybCtaKS4KLQotLSBJc3N1ZSAjNzA4NTogRml4IGNyYXNoIHdoZW4gaW1wb3J0aW5nIHNvbWUgZXh0ZW5zaW9ucyBpbiBhIHRocmVhZAotICBvbiBNYWNPU1ggMTAuNi4KLQotLSBJc3N1ZSAjNzI5ODogZml4ZXMgZm9yIHJhbmdlIGFuZCByZXZlcnNlZChyYW5nZSguLi4pKS4gIEl0ZXJhdGlvbgotICBvdmVyIHJhbmdlKGEsIGIsIGMpIGluY29ycmVjdGx5IGdhdmUgYW4gZW1wdHkgaXRlcmF0b3Igd2hlbiBhLCBiIGFuZAotICBjIGZpdCBpbiBDIGxvbmcgYnV0IHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGRpZCBub3QuICBBbHNvIGZpeAotICBzZXZlcmFsIGNhc2VzIHdoZXJlIHJldmVyc2VkKHJhbmdlKGEsIGIsIGMpKSBnYXZlIHdyb25nIHJlc3VsdHMsIGFuZAotICBmaXggYSByZWZsZWFrIGZvciByZXZlcnNlZChyYW5nZShhLCBiLCBjKSkgd2l0aCBsYXJnZSBhcmd1bWVudHMuCi0KLS0gSXNzdWUgIzcyNDQ6IGl0ZXJ0b29scy5pemlwX2xvbmdlc3QoKSBubyBsb25nZXIgaWdub3JlcyBleGNlcHRpb25zCi0gIHJhaXNlZCBkdXJpbmcgdGhlIGZvcm1hdGlvbiBvZiBhbiBvdXRwdXQgdHVwbGUuCi0KLS0gSXNzdWUgIzMyOTc6IE9uIHdpZGUgdW5pY29kZSBidWlsZHMsIGRvIG5vdCBzcGxpdCB1bmljb2RlIGNoYXJhY3RlcnMgaW50bwotICBzdXJyb2dhdGVzLgotCi0tIElzc3VlICMxNzIyMzQ0OiB0aHJlYWRpbmcuX3NodXRkb3duKCkgaXMgbm93IGNhbGxlZCBpbiBQeV9GaW5hbGl6ZSgpLCB3aGljaAotICBmaXhlcyB0aGUgcHJvYmxlbSBvZiBzb21lIGV4Y2VwdGlvbnMgYmVpbmcgdGhyb3duIGF0IHNodXRkb3duIHdoZW4gdGhlCi0gIGludGVycHJldGVyIGlzIGtpbGxlZC4gUGF0Y2ggYnkgQWRhbSBPbHNlbi4KLQotLSBJc3N1ZSAjNzA2NTogRml4IGEgY3Jhc2ggaW4gYnl0ZXMubWFrZXRyYW5zIGFuZCBieXRlYXJyYXkubWFrZXRyYW5zIHdoZW4KLSAgdXNpbmcgYnl0ZSB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEyNy4gIFBhdGNoIGJ5IERlcmsgRHJ1a2tlci4KLQotLSBJc3N1ZSAjNzAxOTogUmFpc2UgVmFsdWVFcnJvciB3aGVuIHVubWFyc2hhbGxpbmcgYmFkIGxvbmcgZGF0YSwgaW5zdGVhZAotICBvZiBwcm9kdWNpbmcgaW50ZXJuYWxseSBpbmNvbnNpc3RlbnQgUHl0aG9uIGxvbmdzLgotCi0tIElzc3VlICM2OTkwOiBGaXggdGhyZWFkaW5nLmxvY2FsIHN1YmNsYXNzZXMgbGVhdmluZyBvbGQgc3RhdGUgYXJvdW5kCi0gIGFmdGVyIGEgcmVmZXJlbmNlIGN5Y2xlIEdDIHdoaWNoIGNvdWxkIGJlIHJlY3ljbGVkIGJ5IG5ldyBsb2NhbHMuCi0KLS0gSXNzdWUgIzY4NDY6IEZpeCBidWcgd2hlcmUgYnl0ZWFycmF5LnBvcCgpIHJldHVybnMgbmVnYXRpdmUgaW50ZWdlcnMuCi0KLS0gSXNzdWUgIzY3NTA6IEEgdGV4dCBmaWxlIG9wZW5lZCB3aXRoIGlvLm9wZW4oKSBjb3VsZCBkdXBsaWNhdGUgaXRzIG91dHB1dAotICB3aGVuIHdyaXRpbmcgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjNzE1NDogdXJsbGliLnJlcXVlc3QgY2FuIG5vdyBkZXRlY3QgdGhlIHByb3h5IHNldHRpbmdzIG9uIE9TWCAxMC42Ci0gIChhcyBsb25nIGFzIHRoZSB1c2VyIGRpZG4ndCBzcGVjaWZ5ICdhdXRvbWF0aWMgcHJveHkgY29uZmlndXJhdGlvbicpLgotCi0tIElzc3VlICM4NDEyOiBvcy5zeXN0ZW0oKSBub3cgYWNjZXB0cyBieXRlcywgYnl0ZWFycmF5IGFuZCBzdHIgd2l0aAotICBzdXJyb2dhdGVzLgotCiAtIElzc3VlICM0MjgyOiBGaXggdGhlIG1haW4gZnVuY3Rpb24gb2YgdGhlIHByb2ZpbGUgbW9kdWxlIGZvciBhIG5vbi1BU0NJSQogICBzY3JpcHQsIG9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUgYW5kIG5vdCBpbiB0ZXh0IG1vZGUgd2l0aCB0aGUgZGVmYXVsdAogICAodXRmOCkgZW5jb2RpbmcuCiAKKy0gSXNzdWUgIzgxNzk6IEZpeCBtYWNwYXRoLnJlYWxwYXRoKCkgb24gYSBub24tZXhpc3RpbmcgcGF0aC4KKworLSBJc3N1ZSAjODAyNDogVXBkYXRlIHRoZSBVbmljb2RlIGRhdGFiYXNlIHRvIDUuMi4KKworLSBJc3N1ZSAjODE2ODogcHlfY29tcGlsZSBub3cgaGFuZGxlcyBmaWxlcyB3aXRoIHV0Zi04IEJPTVMuCisKKy0gYGB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmdgYCBub3cgcmV0dXJucyBgYCd1dGYtOC1zaWcnYGAgd2hlbiBhIFVURi04IEJPTSBpcworICBkZXRlY3RlZC4KKworLSBJc3N1ZSAjNjcxNi8yOiBCYWNrc2xhc2gtcmVwbGFjZSBlcnJvciBvdXRwdXQgaW4gY29tcGlsYWxsLgorCistIElzc3VlICM0OTYxOiBJbmNvbnNpc3RlbnQvd3JvbmcgcmVzdWx0IG9mIGFza3llc25vIGZ1bmN0aW9uIGluIHRrTWVzc2FnZUJveAorICB3aXRoIFRjbC9Uay04LjUuCisKKy0gSXNzdWUgIzgxNDA6IGV4dGVuZCBjb21waWxlYWxsIHRvIGNvbXBpbGUgc2luZ2xlIGZpbGVzLiAgQWRkIC1pIG9wdGlvbi4KKworLSBJc3N1ZSAjNzM1NjogY3R5cGVzLnV0aWw6IE1ha2UgcGFyc2luZyBvZiBsZGNvbmZpZyBvdXRwdXQgaW5kZXBlbmRlbnQgb2YgdGhlCisgIGxvY2FsZS4KKworLSBUaGUgaW50ZXJuYWxzIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBvbiBQT1NJWCBzeXN0ZW1zIGhhdmUgYmVlbiByZXBsYWNlZCBieQorICBhbiBleHRlbnNpb24gbW9kdWxlIChfcG9zaXhzdWJwcm9jZXNzKSBzbyB0aGF0IHRoZSBmb3JrKCkrZXhlYygpIGNhbiBiZSBkb25lCisgIHNhZmVseSB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBkZWFkbG9jayBpbiBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKworLSBzdWJwcm9jZXNzLlBvcGVuIG5vdyBoYXMgcmVzdG9yZV9zaWduYWxzIGFuZCBzdGFydF9uZXdfc2Vzc2lvbiBmZWF0dXJlcy4gIFRoZQorICBkZWZhdWx0IG9mIHJlc3RvcmVfc2lnbmFscz1UcnVlIGlzIGEgbmV3IGJlaGF2aW9yIGNvbXBhcmVkIHRvIGVhcmxpZXIgUHl0aG9uCisgIHZlcnNpb25zLiAgVGhpcyBtZWFucyB0aGF0IHNpZ25hbHMgc3VjaCBhcyBTSUdQSVBFIGFyZSBub3QgaWdub3JlZCBieSBkZWZhdWx0CisgIGluIHN1YnByb2Nlc3NlcyBsYXVuY2hlZCBieSBQeXRob24gKElzc3VlICMxNjUyKS4KKworLSBJc3N1ZSAjNjQ3MjogVGhlIHhtbC5ldHJlZSBwYWNrYWdlIGlzIHVwZGF0ZWQgdG8gRWxlbWVudFRyZWUgMS4zLiAgVGhlCisgIGNFbGVtZW50VHJlZSBtb2R1bGUgaXMgdXBkYXRlZCB0b28uCisKIC0gSXNzdWUgIzc3NzQ6IFNldCBzeXMuZXhlY3V0YWJsZSB0byBhbiBlbXB0eSBzdHJpbmcgaWYgYXJndlswXSBoYXMgYmVlbiBzZXQgdG8KLSAgYW4gbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbAotICBwcm9ncmFtIG5hbWUKKyAgYW4gbm9uIGV4aXN0ZW50IHByb2dyYW0gbmFtZSBhbmQgUHl0aG9uIGlzIHVuYWJsZSB0byByZXRyaWV2ZSB0aGUgcmVhbCBwcm9ncmFtCisgIG5hbWUuCiAKLS0gSXNzdWUgIzY1MDk6IGZpeCByZS5zdWIgdG8gd29yayBwcm9wZXJseSB3aGVuIHRoZSBwYXR0ZXJuLCB0aGUgc3RyaW5nLCBhbmQKLSAgdGhlIHJlcGxhY2VtZW50IHdlcmUgYWxsIGJ5dGVzLiBQYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKy0gSXNzdWUgIzc4ODA6IEZpeCBzeXNjb25maWcgd2hlbiB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgaXMgYSBzeW1ib2xpYyBsaW5rLgogCi0tIElzc3VlICMxMDU0OTQzOiBGaXggdW5pY29kZWRhdGEubm9ybWFsaXplKCdORkMnLCB0ZXh0KSBmb3IgdGhlIFB1YmxpYyBSZXZpZXcKLSAgSXNzdWUgIzI5CistIElzc3VlICM2NTA5OiBmaXggcmUuc3ViIHRvIHdvcmsgcHJvcGVybHkgd2hlbiB0aGUgcGF0dGVybiwgdGhlIHN0cmluZywgYW5kIHRoZQorICByZXBsYWNlbWVudCB3ZXJlIGFsbCBieXRlcy4gIFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIFRoZSBzcWxpdGUzIG1vZHVsZSB3YXMgdXBkYXRlZCB0byBweXNxbGl0ZSAyLjYuMC4gVGhpcyBmaXhlcyBzZXZlcmFsIG9ic2N1cmUKKyAgYnVncyBhbmQgYWxsb3dzIGxvYWRpbmcgU1FMaXRlIGV4dGVuc2lvbnMgZnJvbSBzaGFyZWQgbGlicmFyaWVzLgorCistIElzc3VlICMxMDU0OTQzOiBGaXggYGB1bmljb2RlZGF0YS5ub3JtYWxpemUoJ05GQycsIHRleHQpYGAgZm9yIHRoZSBQdWJsaWMKKyAgUmV2aWV3IElzc3VlICMyOSAoaHR0cDovL3VuaWNvZGUub3JnL3Jldmlldy9wci0yOS5odG1sKS4KIAogLSBJc3N1ZSAjNzQ5NDogZml4IGEgY3Jhc2ggaW4gX2xzcHJvZiAoY1Byb2ZpbGUpIGFmdGVyIGNsZWFyaW5nIHRoZSBwcm9maWxlciwKICAgcmVzZXQgYWxzbyB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBwb2ludGVyIGNvbnRleHQuCiAKKy0gSXNzdWUgIzcyMzI6IEFkZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvIHRoZSBUYXJGaWxlCisgIGNsYXNzLgorCiAtIElzc3VlICM3MjUwOiBGaXggaW5mbyBsZWFrIG9mIG9zLmVudmlyb24gYWNyb3NzIG11bHRpLXJ1biB1c2VzIG9mCiAgIHdzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlci4KIApAQCAtMTM4MSw1OSArMzQ1NCwxMDEgQEAKIC0gSXNzdWUgIzY5MTI5MTogY29kZWNzLm9wZW4oKSBzaG91bGQgbm90IGNvbnZlcnQgZW5kIG9mIGxpbmVzIG9uIHJlYWRpbmcgYW5kCiAgIHdyaXRpbmcuCiAKLS0gSXNzdWUgIzc5NTk6IGN0eXBlcyBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIG5vdyByZWdpc3RlcmVkIGNvcnJlY3RseQotICB3aXRoIHRoZSBjeWNsZSBnYXJiYWdlIGNvbGxlY3Rvci4KKy0gSXNzdWUgIzc4Njk6IGxvZ2dpbmc6IGltcHJvdmVkIGRpYWdub3N0aWMgZm9yIGZvcm1hdC10aW1lIGVycm9ycy4KIAotLSBJc3N1ZSAjNjY2NjogZml4IGJ1ZyBpbiB0cmFjZS5weSB0aGF0IGFwcGxpZWQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMKLSAgdG8gYmUgaWdub3JlZCBvbmx5IHRvIHRoZSBmaXJzdCBmaWxlLiAgTm90ZWQgYnkgQm9nZGFuIE9wYW5jaHVrLgorLSBJc3N1ZSAjNzg2ODogbG9nZ2luZzogYWRkZWQgbG9nZ2VyQ2xhc3MgYXR0cmlidXRlIHRvIE1hbmFnZXIuCiAKLS0gSXNzdWUgIzc1OTc6IGN1cnNlcy51c2VfZW52KCkgY2FuIG5vdyBiZSBjYWxsZWQgYmVmb3JlIGluaXRzY3IoKS4KLSAgTm90ZWQgYnkgS2FuLVJ1IENoZW4uCistIGxvZ2dpbmc6IEltcGxlbWVudGVkIFBFUCAzOTEuCisKKy0gSXNzdWUgIzE1Mzc3MjE6IEFkZCBhIHdyaXRlaGVhZGVyKCkgbWV0aG9kIHRvIGNzdi5EaWN0V3JpdGVyLgorCistIElzc3VlICM3OTU5OiBjdHlwZXMgY2FsbGJhY2sgZnVuY3Rpb25zIGFyZSBub3cgcmVnaXN0ZXJlZCBjb3JyZWN0bHkgd2l0aCB0aGUKKyAgY3ljbGUgZ2FyYmFnZSBjb2xsZWN0b3IuCisKKy0gSXNzdWUgIzU4MDE6IHJlbW92ZWQgc3B1cmlvdXMgZW1wdHkgbGluZXMgaW4gd3NnaXJlZi4KKworLSBJc3N1ZSAjNjY2NjogZml4IGJ1ZyBpbiB0cmFjZS5weSB0aGF0IGFwcGxpZWQgdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gYmUKKyAgaWdub3JlZCBvbmx5IHRvIHRoZSBmaXJzdCBmaWxlLiAgTm90ZWQgYnkgQm9nZGFuIE9wYW5jaHVrLgorCistIElzc3VlICM3NTk3OiBjdXJzZXMudXNlX2VudigpIGNhbiBub3cgYmUgY2FsbGVkIGJlZm9yZSBpbml0c2NyKCkuICBOb3RlZCBieQorICBLYW4tUnUgQ2hlbi4KIAogLSBJc3N1ZSAjNzMxMDogZml4IHRoZSBfX3JlcHJfXyBvZiBvcy5lbnZpcm9uIHRvIHNob3cgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KIAogLSBJc3N1ZSAjNzk3MDogZW1haWwuR2VuZXJhdG9yLmZsYXR0ZW4gbm93IGNvcnJlY3RseSBmbGF0dGVucyBtZXNzYWdlL3JmYzgyMgogICBtZXNzYWdlcyBwYXJzZWQgYnkgZW1haWwuUGFyc2VyLkhlYWRlclBhcnNlci4KIAotLSBJc3N1ZSAjNzM2MTogSW1wb3J0bGliIHdhcyBub3QgaGFuZGxpbmcgYnl0ZWNvZGUgZmlsZXMgbGVzcyB0aGFuIDggYnl0ZXMgaW4KLSAgbGVuZ3RoIHByb3Blcmx5LgorLSBJc3N1ZSAjNzM2MTogSW1wb3J0bGliIHdhcyBub3QgcHJvcGVybHkgY2hlY2tpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbgorICBieXRlY29kZSBmaWxlIHdoZW4gaXQgd2FzIGxlc3MgdGhlbiA4IGJ5dGVzLgorCistIElzc3VlICM3NjMzOiBJbiB0aGUgZGVjaW1hbCBtb2R1bGUsIENvbnRleHQgY2xhc3MgbWV0aG9kcyAod2l0aCB0aGUgZXhjZXB0aW9uCisgIG9mIGNhbm9uaWNhbCBhbmQgaXNfY2Fub25pY2FsKSBub3cgYWNjZXB0IGluc3RhbmNlcyBvZiBpbnQgYW5kIGxvbmcgd2hlcmV2ZXIgYQorICBEZWNpbWFsIGluc3RhbmNlIGlzIGFjY2VwdGVkLCBhbmQgaW1wbGljaXRseSBjb252ZXJ0IHRoYXQgYXJndW1lbnQgdG8gRGVjaW1hbC4KKyAgUHJldmlvdXNseSBvbmx5IHNvbWUgYXJndW1lbnRzIHdlcmUgY29udmVydGVkLgogCiAtIElzc3VlICM3ODM1OiBzaGVsdmUgc2hvdWxkIG5vIGxvbmdlciBwcm9kdWNlIG15c3RlcmlvdXMgd2FybmluZ3MgZHVyaW5nCiAgIGludGVycHJldGVyIHNodXRkb3duLgogCi0tIElzc3VlICM2MjMzOiBFbGVtZW50VHJlZSBmYWlsZWQgY29udmVydGluZyB1bmljb2RlIGNoYXJhY3RlcnMgdG8gWE1MCi0gIGVudGl0aWVzIHdoZW4gdGhleSBjb3VsZCd0IGJlIHJlcHJlc2VudGVkIGluIHRoZSByZXF1ZXN0ZWQgb3V0cHV0Ci0gIGVuY29kaW5nLiAgUGF0Y2ggYnkgSmVycnkgQ2hlbi4KKy0gSXNzdWUgIzI3NDY6IERvbid0IGVzY2FwZSBhbXBlcnNhbmRzIGFuZCBhbmdsZSBicmFja2V0cyAoIiYiLCAiPCIsICI+IikgaW4gWE1MCisgIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIGFuZCBjb21tZW50cy4gIFRoZXNlIHJhdyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkIGJ5IHRoZQorICBYTUwgc3BlY2lmaWNhdGlvbiwgYW5kIGFyZSBuZWNlc3Nhcnkgd2hlbiBvdXRwdXR0aW5nIGUuZy4gIFBIUCBjb2RlIGluIGEKKyAgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4gIFBhdGNoIGJ5IE5laWwgTXVsbGVyLgorCistIElzc3VlICM2MjMzOiBFbGVtZW50VHJlZSBmYWlsZWQgY29udmVydGluZyB1bmljb2RlIGNoYXJhY3RlcnMgdG8gWE1MIGVudGl0aWVzCisgIHdoZW4gdGhleSBjb3VsZCd0IGJlIHJlcHJlc2VudGVkIGluIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IGVuY29kaW5nLiAgUGF0Y2ggYnkKKyAgSmVycnkgQ2hlbi4KKworLSBJc3N1ZSAjNjAwMzogYWRkIGFuIGFyZ3VtZW50IHRvIGBgemlwZmlsZS5aaXBmaWxlLndyaXRlc3RyYGAgdG8gc3BlY2lmeSB0aGUKKyAgY29tcHJlc3Npb24gdHlwZS4KIAogLSBJc3N1ZSAjNDc3MjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gYW4gdW5rbm93biBCbHVldG9vdGggcHJvdG9jb2wgaXMKICAgc3BlY2lmaWVkLCByYXRoZXIgdGhhbiBmYWxsIHRocm91Z2ggdG8gQUZfUEFDS0VUIChpbiB0aGUgYHNvY2tldGAgbW9kdWxlKS4KLSAgQWxzbywgcmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBUeXBlRXJyb3Igd2hlbiBhbiB1bmtub3duIFRJUEMgYWRkcmVzcwotICB0eXBlIGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IEJyaWFuIEN1cnRpbi4KKyAgQWxzbywgcmFpc2UgVmFsdWVFcnJvciByYXRoZXIgdGhhbiBUeXBlRXJyb3Igd2hlbiBhbiB1bmtub3duIFRJUEMgYWRkcmVzcyB0eXBlCisgIGlzIHNwZWNpZmllZC4gIFBhdGNoIGJ5IEJyaWFuIEN1cnRpbi4KIAotLSBJc3N1ZSAjNjkzOTogRml4IGZpbGUgSS9PIG9iamVjdHMgaW4gdGhlIGBpb2AgbW9kdWxlIHRvIGtlZXAgdGhlIG9yaWdpbmFsCi0gIGZpbGUgcG9zaXRpb24gd2hlbiBjYWxsaW5nIGB0cnVuY2F0ZSgpYC4gIEl0IHdvdWxkIHByZXZpb3VzbHkgY2hhbmdlIHRoZQotICBmaWxlIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiBhcmd1bWVudCwgd2hpY2ggZ29lcyBhZ2FpbnN0IHRoZSB0cmFkaXRpb24gb2YKKy0gSXNzdWUgIzY5Mzk6IEZpeCBmaWxlIEkvTyBvYmplY3RzIGluIHRoZSBgaW9gIG1vZHVsZSB0byBrZWVwIHRoZSBvcmlnaW5hbCBmaWxlCisgIHBvc2l0aW9uIHdoZW4gY2FsbGluZyBgdHJ1bmNhdGUoKWAuICBJdCB3b3VsZCBwcmV2aW91c2x5IGNoYW5nZSB0aGUgZmlsZQorICBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gYXJndW1lbnQsIHdoaWNoIGdvZXMgYWdhaW5zdCB0aGUgdHJhZGl0aW9uIG9mCiAgIGZ0cnVuY2F0ZSgpIGFuZCBvdGhlciB0cnVuY2F0aW9uIEFQSXMuICBQYXRjaCBieSBQYXNjYWwgQ2hhbWJvbi4KIAorLSBJc3N1ZSAjNzYxMDogUmV3b3JrZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludGVybmFsCisgIDpjbGFzczpgemlwZmlsZS5aaXBFeHRGaWxlYCBjbGFzcyB1c2VkIHRvIHJlcHJlc2VudCBmaWxlcyBzdG9yZWQgaW5zaWRlIGFuCisgIGFyY2hpdmUuICBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIHNpZ25pZmljYW50bHkgZmFzdGVyIGFuZCBjYW4gYmUgd3JhcHBlZCBpbgorICBhIDpjbGFzczpgaW8uQnVmZmVyZWRSZWFkZXJgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0IGFsc28gc29sdmVzIGFuCisgIGlzc3VlIHdoZXJlIGludGVybGVhdmVkIGNhbGxzIHRvIGByZWFkKClgIGFuZCBgcmVhZGxpbmUoKWAgZ2l2ZSB3cm9uZyByZXN1bHRzLgorICBQYXRjaCBieSBOaXIgQWlkZXMuCisKKy0gSXNzdWUgIzY5NjM6IEFkZGVkICJtYXh0YXNrc3BlcmNoaWxkIiBhcmd1bWVudCB0byBtdWx0aXByb2Nlc3NpbmcuUG9vbCwKKyAgYWxsb3dpbmcgZm9yIGEgbWF4aW11bSBudW1iZXIgb2YgdGFza3Mgd2l0aGluIHRoZSBwb29sIHRvIGJlIGNvbXBsZXRlZCBieSB0aGUKKyAgd29ya2VyIGJlZm9yZSB0aGF0IHdvcmtlciBpcyB0ZXJtaW5hdGVkLCBhbmQgYSBuZXcgb25lIGNyZWF0ZWQgdG8gcmVwbGFjZSBpdC4KKwogLSBJc3N1ZSAjNzc5MjogUmVnaXN0ZXJpbmcgbm9uLWNsYXNzZXMgdG8gQUJDcyByYWlzZWQgYW4gb2JzY3VyZSBlcnJvci4KIAogLSBJc3N1ZSAjNzc4NTogRG9uJ3QgYWNjZXB0IGJ5dGVzIGluIEZpbGVJTy53cml0ZSgpLgogCistIFJlbW92ZWQgdGhlIGZ1bmN0aW9ucyAndmVyaWZ5JyBhbmQgJ3ZlcmVxJyBmcm9tIExpYi90ZXN0L3N1cHBvcnQucHkuCisKIC0gSXNzdWUgIzc3NzM6IEZpeCBhbiBVbmJvdW5kTG9jYWxFcnJvciBpbiBwbGF0Zm9ybS5saW51eF9kaXN0cmlidXRpb24oKSB3aGVuCiAgIHRoZSByZWxlYXNlIGZpbGUgaXMgZW1wdHkuCiAKIC0gSXNzdWUgIzc1NjE6IEZpeCBjcmFzaGVzIHdoZW4gdXNpbmcgYnl0ZWFycmF5IG9iamVjdHMgd2l0aCB0aGUgcG9zaXgKICAgbW9kdWxlLgogCi0tIElzc3VlICMxNjcwNzY1OiBQcmV2ZW50IGVtYWlsLmdlbmVyYXRvci5HZW5lcmF0b3IgZnJvbSByZS13cmFwcGluZwotICBoZWFkZXJzIGluIG11bHRpcGFydC9zaWduZWQgTUlNRSBwYXJ0cywgd2hpY2ggZml4ZXMgb25lIG9mIHRoZSBzb3VyY2VzIG9mCi0gIGludmFsaWQgbW9kaWZpY2F0aW9ucyB0byBzdWNoIHBhcnRzIGJ5IEdlbmVyYXRvci4KKy0gSXNzdWUgIzE2NzA3NjU6IFByZXZlbnQgZW1haWwuZ2VuZXJhdG9yLkdlbmVyYXRvciBmcm9tIHJlLXdyYXBwaW5nIGhlYWRlcnMgaW4KKyAgbXVsdGlwYXJ0L3NpZ25lZCBNSU1FIHBhcnRzLCB3aGljaCBmaXhlcyBvbmUgb2YgdGhlIHNvdXJjZXMgb2YgaW52YWxpZAorICBtb2RpZmljYXRpb25zIHRvIHN1Y2ggcGFydHMgYnkgR2VuZXJhdG9yLgogCi0tIElzc3VlICM3NzAxOiBGaXggY3Jhc2ggaW4gYmluYXNjaWkuYjJhX3V1KCkgaW4gZGVidWcgbW9kZSB3aGVuIGdpdmVuIGEKLSAgMS1ieXRlIGFyZ3VtZW50LiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCistIElzc3VlICM3NzAzOiBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBidWZmZXIgQVBJIHRvIGBiaW5hc2NpaS5hMmJocXhgLiAgUGF0Y2gKKyAgYnkgRmxvcmVudCBYaWNsdW5hLCBhbG9uZyB3aXRoIHNvbWUgYWRkaXRpb25hbCB0ZXN0cy4KIAotLSBJc3N1ZSAjMzI5OTogRml4IHBvc3NpYmxlIGNyYXNoIGluIHRoZSBfc3JlIG1vZHVsZSB3aGVuIGdpdmVuIGJhZAotICBhcmd1bWVudCB2YWx1ZXMgaW4gZGVidWcgbW9kZS4gIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorLSBJc3N1ZSAjNzcwMTogRml4IGNyYXNoIGluIGJpbmFzY2lpLmIyYV91dSgpIGluIGRlYnVnIG1vZGUgd2hlbiBnaXZlbiBhIDEtYnl0ZQorICBhcmd1bWVudC4gIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMzMjk5OiBGaXggcG9zc2libGUgY3Jhc2ggaW4gdGhlIF9zcmUgbW9kdWxlIHdoZW4gZ2l2ZW4gYmFkIGFyZ3VtZW50CisgIHZhbHVlcyBpbiBkZWJ1ZyBtb2RlLiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCisKKy0gSXNzdWUgIzI4NDY6IEFkZCBzdXBwb3J0IGZvciBnemlwLkd6aXBGaWxlIHJlYWRpbmcgemVyby1wYWRkZWQgZmlsZXMuICBQYXRjaAorICBieSBCcmlhbiBDdXJ0aW4uCiAKIC0gSXNzdWUgIzc2ODE6IFVzZSBmbG9vciBkaXZpc2lvbiBpbiBhcHByb3BpYXRlIHBsYWNlcyBpbiB0aGUgd2F2ZSBtb2R1bGUuCiAKQEAgLTE0NDEsODQgKzM1NTYsMTUzIEBACiAgIEV4dGVuc2lvbiBleHRyYSBvcHRpb25zIG1heSBjaGFuZ2UgdGhlIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSAuYwogICBmaWxlKS4gSW5pdGlhbCBwYXRjaCBieSBDb2xsaW4gV2ludGVyLgogCi0tIElzc3VlICM3NjE3OiBNYWtlIHN1cmUgZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIuVW5peENDb21waWxlciByZWNvZ25pemVzCi0gIGdjYyB3aGVuIGl0IGhhcyBhIGZ1bGx5IHF1YWxpZmllZCBjb25maWd1cmF0aW9uIHByZWZpeC4gSW5pdGlhbCBwYXRjaAotICBieSBBcmZyZXZlci4KKy0gSXNzdWUgIzc2MTc6IE1ha2Ugc3VyZSBkaXN0dXRpbHMudW5peGNjb21waWxlci5Vbml4Q0NvbXBpbGVyIHJlY29nbml6ZXMgZ2NjCisgIHdoZW4gaXQgaGFzIGEgZnVsbHkgcXVhbGlmaWVkIGNvbmZpZ3VyYXRpb24gcHJlZml4LiBJbml0aWFsIHBhdGNoIGJ5IEFyZnJldmVyLgogCi0tIElzc3VlICM3MTA1OiBNYWtlIFdlYWtLZXlEaWN0aW9uYXJ5IGFuZCBXZWFrVmFsdWVEaWN0aW9uYXJ5IHJvYnVzdCBhZ2FpbnN0Ci0gIHRoZSBkZXN0cnVjdGlvbiBvZiB3ZWFrcmVmJ2VkIG9iamVjdHMgd2hpbGUgaXRlcmF0aW5nLgorLSBJc3N1ZSAjNzEwNTogTWFrZSBXZWFrS2V5RGljdGlvbmFyeSBhbmQgV2Vha1ZhbHVlRGljdGlvbmFyeSByb2J1c3QgYWdhaW5zdCB0aGUKKyAgZGVzdHJ1Y3Rpb24gb2Ygd2Vha3JlZidlZCBvYmplY3RzIHdoaWxlIGl0ZXJhdGluZy4KIAotLSBJc3N1ZSAjNzQ1NTogRml4IHBvc3NpYmxlIGNyYXNoIGluIGNQaWNrbGUgb24gaW52YWxpZCBpbnB1dC4gIFBhdGNoIGJ5Ci0gIFZpY3RvciBTdGlubmVyLgorLSBJc3N1ZSAjNzQ1NTogRml4IHBvc3NpYmxlIGNyYXNoIGluIGNQaWNrbGUgb24gaW52YWxpZCBpbnB1dC4gIFBhdGNoIGJ5IFZpY3RvcgorICBTdGlubmVyLgogCi0tIElzc3VlICM2NTExOiBaaXBGaWxlIG5vdyByYWlzZXMgQmFkWmlwZmlsZSAoaW5zdGVhZCBvZiBhbiBJT0Vycm9yKSB3aGVuCi0gIG9wZW5pbmcgYW4gZW1wdHkgb3IgdmVyeSBzbWFsbCBmaWxlLgorLSBJc3N1ZSAjMTYyODIwNTogU29ja2V0IGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieSBzb2NrZXQuc29ja2V0Lm1ha2VmaWxlKCkgbm93CisgIHByb3Blcmx5IGhhbmRsZXMgRUlOVFIgd2l0aGluIHRoZSByZWFkLCByZWFkbGluZSwgd3JpdGUgJiBmbHVzaCBtZXRob2RzLiAgVGhlCisgIHNvY2tldC5zZW5kYWxsKCkgbWV0aG9kIG5vdyBwcm9wZXJseSBoYW5kbGVzIGludGVycnVwdGVkIHN5c3RlbSBjYWxscy4KIAotLSBJc3N1ZSAjNzU1NjogTWFrZSBzdXJlIERpc3R1dGlscycgbXN2Yzljb21waWxlIHJlYWRzIGFuZCB3cml0ZXMgdGhlCi0gIE1TVkMgWE1MIE1hbmlmZXN0IGZpbGUgaW4gdGV4dCBtb2RlIHNvIHN0cmluZyBwYXR0ZXJucyBjYW4gYmUgdXNlZAotICBpbiByZWd1bGFyIGV4cHJlc3Npb25zLgorLSBJc3N1ZSAjNzQ3MTogSW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgR3ppcEZpbGUncyBidWZmZXJpbmcgbWVjaGFuaXNtLCBhbmQKKyAgbWFrZSBpdCBpbXBsZW1lbnQgdGhlIGBpby5CdWZmZXJlZElPQmFzZWAgQUJDIHRvIGFsbG93IGZvciBmdXJ0aGVyIHNwZWVkdXBzIGJ5CisgIHdyYXBwaW5nIGl0IGluIGFuIGBpby5CdWZmZXJlZFJlYWRlcmAuICBQYXRjaCBieSBOaXIgQWlkZXMuCiAKLS0gSXNzdWUgIzc1NTI6IFJlbW92ZWQgbGluZSBmZWVkIGluIHRoZSBiYXNlNjQgQXV0aG9yaXphdGlvbiBoZWFkZXIgaW4KLSAgdGhlIERpc3R1dGlscyB1cGxvYWQgY29tbWFuZCB0byBhdm9pZCBhbiBlcnJvciB3aGVuIFB5UEkgcmVhZHMgaXQuCi0gIFRoaXMgb2NjdXJzIG9uIGxvbmcgcGFzc3dvcmRzLiBJbml0aWFsIHBhdGNoIGJ5IEpQIFN0LiBQaWVycmUuCistIElzc3VlICMzOTcyOiBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbiBub3cgYWNjZXB0cyBhbiBvcHRpb25hbCBzb3VyY2VfYWRkcmVzcworICBwYXJhbWV0ZXIgdG8gYWxsb3cgc3BlY2lmeWluZyB3aGVyZSB5b3VyIGNvbm5lY3Rpb25zIGNvbWUgZnJvbS4KKworLSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24gbm93IGFjY2VwdHMgYW4gb3B0aW9uYWwgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyLgorCistIElzc3VlICM1NTExOiBub3cgemlwZmlsZS5aaXBGaWxlIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLiAgSW5pdGlhbAorICBwYXRjaCBieSBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzc1NTY6IE1ha2Ugc3VyZSBEaXN0dXRpbHMnIG1zdmM5Y29tcGlsZSByZWFkcyBhbmQgd3JpdGVzIHRoZSBNU1ZDIFhNTAorICBNYW5pZmVzdCBmaWxlIGluIHRleHQgbW9kZSBzbyBzdHJpbmcgcGF0dGVybnMgY2FuIGJlIHVzZWQgaW4gcmVndWxhcgorICBleHByZXNzaW9ucy4KKworLSBJc3N1ZSAjNzU1MjogUmVtb3ZlZCBsaW5lIGZlZWQgaW4gdGhlIGJhc2U2NCBBdXRob3JpemF0aW9uIGhlYWRlciBpbiB0aGUKKyAgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kIHRvIGF2b2lkIGFuIGVycm9yIHdoZW4gUHlQSSByZWFkcyBpdC4gIFRoaXMgb2NjdXJzIG9uCisgIGxvbmcgcGFzc3dvcmRzLiBJbml0aWFsIHBhdGNoIGJ5IEpQIFN0LiBQaWVycmUuCiAKIC0gSXNzdWUgIzcyMzE6IHVybGxpYjIgY2Fubm90IGhhbmRsZSBodHRwcyB3aXRoIHByb3h5IHJlcXVpcmluZyBhdXRoLiAgUGF0Y2ggYnkKICAgVGF0c3VoaXJvIFRzdWppa2F3YS4KIAotLSBJc3N1ZSAjNDc1NzogYHpsaWIuY29tcHJlc3NgIGFuZCBvdGhlciBtZXRob2RzIGluIHRoZSB6bGliIG1vZHVsZSBub3cKLSAgcmFpc2UgYSBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiBgc3RyYCBvYmplY3QgKHJhdGhlciB0aGFuIGEgYGJ5dGVzYC1saWtlCi0gIG9iamVjdCkuICBQYXRjaCBieSBWaWN0b3IgU3Rpbm5lciBhbmQgRmxvcmVudCBYaWNsdW5hLgorLSBJc3N1ZSAjNDc1NzogYHpsaWIuY29tcHJlc3NgIGFuZCBvdGhlciBtZXRob2RzIGluIHRoZSB6bGliIG1vZHVsZSBub3cgcmFpc2UgYQorICBUeXBlRXJyb3Igd2hlbiBnaXZlbiBhbiBgc3RyYCBvYmplY3QgKHJhdGhlciB0aGFuIGEgYGJ5dGVzYC1saWtlIG9iamVjdCkuCisgIFBhdGNoIGJ5IFZpY3RvciBTdGlubmVyIGFuZCBGbG9yZW50IFhpY2x1bmEuCiAKIC0gSXNzdWUgIzczNDk6IE1ha2UgbWV0aG9kcyBvZiBmaWxlIG9iamVjdHMgaW4gdGhlIGlvIG1vZHVsZSBhY2NlcHQgTm9uZSBhcyBhbgogICBhcmd1bWVudCB3aGVyZSBmaWxlLWxpa2Ugb2JqZWN0cyAoaWUgU3RyaW5nSU8gYW5kIEJ5dGVzSU8pIGFjY2VwdCB0aGVtIHRvIG1lYW4KICAgdGhlIHNhbWUgYXMgcGFzc2luZyBubyBhcmd1bWVudC4KIAotLSBJc3N1ZSAjNTk0OTogYWRkZWQgY2hlY2sgZm9yIGNvcnJlY3QgbGluZWVuZHMgaW4gaW5wdXQgZnJvbSBJTUFQIHNlcnZlcgotICBpbiBpbWFwbGliLgorLSBJc3N1ZSAjNzM1NzogdGFyZmlsZSBubyBsb25nZXIgc3VwcHJlc3NlcyBmYXRhbCBleHRyYWN0aW9uIGVycm9ycyBieSBkZWZhdWx0LgorCistIElzc3VlICM1OTQ5OiBhZGRlZCBjaGVjayBmb3IgY29ycmVjdCBsaW5lZW5kcyBpbiBpbnB1dCBmcm9tIElNQVAgc2VydmVyIGluCisgIGltYXBsaWIuCisKKy0gQWRkIGNvdW50KCkgYW5kIHJldmVyc2UoKSBtZXRob2RzIHRvIGNvbGxlY3Rpb25zLmRlcXVlKCkuCiAKIC0gRml4IHZhcmlhdGlvbnMgb2YgZXh0ZW5kaW5nIGRlcXVlczogIGQuZXh0ZW5kKGQpICBkLmV4dGVuZGxlZnQoZCkgIGQrPWQKIAotLSBJc3N1ZSAjNjk4NjogRml4IGNyYXNoIGluIHRoZSBKU09OIEMgYWNjZWxlcmF0b3Igd2hlbiBjYWxsZWQgd2l0aCB0aGUKLSAgd3JvbmcgcGFyYW1ldGVyIHR5cGVzLiAgUGF0Y2ggYnkgVmljdG9yIFN0aW5uZXIuCistIElzc3VlICM2OTg2OiBGaXggY3Jhc2ggaW4gdGhlIEpTT04gQyBhY2NlbGVyYXRvciB3aGVuIGNhbGxlZCB3aXRoIHRoZSB3cm9uZworICBwYXJhbWV0ZXIgdHlwZXMuICBQYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KIAotLSBJc3N1ZSAjMTkyMzogRml4ZWQgdGhlIHJlbW92YWwgb2YgbWVhbmluZ2Z1bCBzcGFjZXMgd2hlbiBQS0ctSU5GTyBpcwotICBnZW5lcmF0ZWQgaW4gRGlzdHV0aWxzLiBQYXRjaCBieSBTdGVwaGVuIEVtc2xpZS4KKy0gSXNzdWUgIzc0NTc6IGFkZGVkIGEgcmVhZF9wa2dfZmlsZSBtZXRob2QgdG8KKyAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGEuCisKKy0gbG9nZ2luZzogQWRkZWQgb3B0aW9uYWwgYHNlY3VyZWAgcGFyYW1ldGVyIHRvIFNNVFBIYW5kbGVyLCB0byBlbmFibGUgdXNlIG9mCisgIFRMUyB3aXRoIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzLgorCistIElzc3VlICMxOTIzOiBGaXhlZCB0aGUgcmVtb3ZhbCBvZiBtZWFuaW5nZnVsIHNwYWNlcyB3aGVuIFBLRy1JTkZPIGlzIGdlbmVyYXRlZAorICBpbiBEaXN0dXRpbHMuICBQYXRjaCBieSBTdGVwaGVuIEVtc2xpZS4KIAogLSBJc3N1ZSAjNDEyMDogRHJvcCByZWZlcmVuY2UgdG8gQ1JUIGZyb20gbWFuaWZlc3Qgd2hlbiBidWlsZGluZyBleHRlbnNpb25zIHdpdGgKICAgbXN2Yzljb21waWxlci4KIAotLSBJc3N1ZSAjNzQxMDogZGVlcGNvcHkgb2YgaXRlcnRvb2xzLmNvdW50IHdhcyByZXNldHRpbmcgdGhlIGNvdW50LgorLSBJc3N1ZSAjNzMzMzogVGhlIGBwb3NpeGAgbW9kdWxlIGdhaW5zIGFuIGBpbml0Z3JvdXBzKClgIGZ1bmN0aW9uIHByb3ZpZGluZworICBhY2Nlc3MgdG8gdGhlIGluaXRncm91cHMoMykgQyBsaWJyYXJ5IGNhbGwgb24gVW5peCBzeXN0ZW1zIHdoaWNoIGltcGxlbWVudCBpdC4KKyAgUGF0Y2ggYnkgSmVhbi1QYXVsIENhbGRlcm9uZS4KKworLSBJc3N1ZSAjNzQwODogRml4ZWQgZGlzdHV0aWxzLnRlc3RzLnNkaXN0IHNvIGl0IGRvZXNuJ3QgY2hlY2sgZm9yIGdyb3VwCisgIG93bmVyc2hpcCB3aGVuIHRoZSBncm91cCBpcyBub3QgZm9yY2VkLCBiZWNhdXNlIHRoZSBncm91cCBtYXkgYmUgZGlmZmVyZW50CisgIGZyb20gdGhlIHVzZXIncyBncm91cCBhbmQgaW5oZXJpdCBmcm9tIGl0cyBjb250YWluZXIgd2hlbiB0aGUgdGVzdCBpcyBydW4uCiAKIC0gSXNzdWUgIzQ0ODY6IFdoZW4gYW4gZXhjZXB0aW9uIGhhcyBhbiBleHBsaWNpdCBjYXVzZSwgZG8gbm90IHByaW50IGl0cwotICBpbXBsaWNpdCBjb250ZXh0IHRvby4gIFRoaXMgYWZmZWN0cyB0aGUgYHRyYWNlYmFja2AgbW9kdWxlIGFzIHdlbGwgYXMKLSAgYnVpbHQtaW4gZXhjZXB0aW9uIHByaW50aW5nLgorICBpbXBsaWNpdCBjb250ZXh0IHRvby4gIFRoaXMgYWZmZWN0cyB0aGUgYHRyYWNlYmFja2AgbW9kdWxlIGFzIHdlbGwgYXMgYnVpbHQtaW4KKyAgZXhjZXB0aW9uIHByaW50aW5nLgogCi0tIElzc3VlICMxNDg4OTQzOiBkaWZmbGliLkRpZmZlcigpIGRvZXNuJ3QgYWx3YXlzIGFkZCBoaW50cyBmb3IgdGFiIGNoYXJhY3RlcnMKKy0gSXNzdWUgIzE1MTU6IEVuYWJsZSB1c2Ugb2YgZGVlcGNvcHkoKSB3aXRoIGluc3RhbmNlIG1ldGhvZHMuICBQYXRjaCBieSBSb2JlcnQKKyAgQ29sbGlucy4KIAotLSBJc3N1ZSAjNzM1NDogZGlzdHV0aWxzLnRlc3RzLnRlc3RfbXN2Yzljb21waWxlciAtIGRyYWdmdWxsd2luZG93cyBjYW4KLSAgYmUgMi4KKy0gSXNzdWUgIzc0MDM6IGxvZ2dpbmc6IEZpeGVkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIGluIGxvY2sgY3JlYXRpb24uCiAKLS0gSXNzdWUgIzM5NzY6IHBwcmludCBmb3Igc2V0cywgZnJvemVuc2V0cywgYW5kIGRpY3RzIG5vdyBzdWNjZWVkIHdoZW4KLSAgdGhleSBjb250YWluIHVub3JkZXJhYmxlIHR5cGVzLgorLSBJc3N1ZSAjNjg0NTogQWRkIHJlc3RhcnQgc3VwcG9ydCBmb3IgYmluYXJ5IHVwbG9hZCBpbiBmdHBsaWIuICBUaGUKKyAgYHN0b3JiaW5hcnkoKWAgbWV0aG9kIG9mIEZUUCBhbmQgRlRQX1RMUyBvYmplY3RzIGdhaW5zIGFuIG9wdGlvbmFsIGByZXN0YAorICBhcmd1bWVudC4gIFBhdGNoIGJ5IFBhYmxvIE1vdXpvLgorCistIElzc3VlICM1Nzg4OiBgZGF0ZXRpbWUudGltZWRlbHRhYCBvYmplY3RzIGdldCBhIG5ldyBgdG90YWxfc2Vjb25kcygpYCBtZXRob2QKKyAgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2Vjb25kcyBpbiB0aGUgZHVyYXRpb24uICBQYXRjaCBieSBCcmlhbgorICBRdWlubGFuLgorCistIElzc3VlICM3MTMzOiBTU0wgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgbmV3IGJ1ZmZlciBBUEkuCisKKy0gSXNzdWUgIzE0ODg5NDM6IGRpZmZsaWIuRGlmZmVyKCkgZG9lc24ndCBhbHdheXMgYWRkIGhpbnRzIGZvciB0YWIgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjNjEyMzogdGFyZmlsZSBub3cgb3BlbnMgZW1wdHkgYXJjaGl2ZXMgY29ycmVjdGx5IGFuZCBjb25zaXN0ZW50bHkKKyAgcmFpc2VzIFJlYWRFcnJvciBvbiBlbXB0eSBmaWxlcy4KKworLSBJc3N1ZSAjNzM1NDogZGlzdHV0aWxzLnRlc3RzLnRlc3RfbXN2Yzljb21waWxlciAtIGRyYWdmdWxsd2luZG93cyBjYW4gYmUgMi4KIAogLSBJc3N1ZSAjNTAzNzogUHJveHkgdGhlIF9fYnl0ZXNfXyBzcGVjaWFsIG1ldGhvZCBpbnN0ZWFkIHRvIF9fYnl0ZXNfXyBpbnN0ZWFkCiAgIG9mIF9fc3RyX18uCiAKLS0gSXNzdWUgIzczNDE6IENsb3NlIHRoZSBpbnRlcm5hbCBmaWxlIG9iamVjdCBpbiB0aGUgVGFyRmlsZSBjb25zdHJ1Y3RvciBpbgotICBjYXNlIG9mIGFuIGVycm9yLgorLSBJc3N1ZSAjNzM0MTogQ2xvc2UgdGhlIGludGVybmFsIGZpbGUgb2JqZWN0IGluIHRoZSBUYXJGaWxlIGNvbnN0cnVjdG9yIGluIGNhc2UKKyAgb2YgYW4gZXJyb3IuCiAKIC0gSXNzdWUgIzcyOTM6IGRpc3R1dGlscy50ZXN0X21zdmM5Y29tcGlsZXIgaXMgZml4ZWQgdG8gd29yayBvbiBhbnkgZnJlc2gKICAgV2luZG93cyBib3guIEhlbHAgcHJvdmlkZWQgYnkgRGF2aWQgQm9sZW4uCiAKLS0gSXNzdWUgIzczMjg6IHB5ZG9jIG5vIGxvbmdlciBjb3JydXB0cyBzeXMucGF0aCB3aGVuIHJ1biB3aXRoIHRoZSAnLW0nIHN3aXRjaAorLSBJc3N1ZSAjMjA1NDogZnRwbGliIG5vdyBwcm92aWRlcyBhbiBGVFBfVExTIGNsYXNzIHRvIGRvIHNlY3VyZSBGVFAgdXNpbmcgVExTCisgIG9yIFNTTC4gIFBhdGNoIGJ5IEdpYW1wYW9sbyBSb2RvbGEnLgogCi0tIElzc3VlICM3MzE4OiBtdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgYSB0aW1lb3V0IHdoZW4gaXQgZmFpbHMgdG8gZXN0YWJsaXNoCi0gIGEgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgcHJvY2VzcywgcmF0aGVyIHRoYW4gbG9vcGluZyBlbmRsZXNzbHkuIFRoZQotICBkZWZhdWx0IHRpbWVvdXQgaXMgMjAgc2Vjb25kcywgd2hpY2ggc2hvdWxkIGJlIGFtcGx5IHN1ZmZpY2llbnQgZm9yCi0gIGxvY2FsIGNvbm5lY3Rpb25zLgorLSBJc3N1ZSAjNzMyODogcHlkb2Mgbm8gbG9uZ2VyIGNvcnJ1cHRzIHN5cy5wYXRoIHdoZW4gcnVuIHdpdGggdGhlICctbScgc3dpdGNoLgogCi0tIElzc3VlICM3MjgyOiBGaXggYSBtZW1vcnkgbGVhayB3aGVuIGFuIFJMb2NrIHdhcyB1c2VkIGluIGEgdGhyZWFkIG90aGVyCi0gIHRoYW4gdGhvc2Ugc3RhcnRlZCB0aHJvdWdoIGB0aHJlYWRpbmcuVGhyZWFkYCAoZm9yIGV4YW1wbGUsIHVzaW5nCistIElzc3VlICM0OTY5OiBUaGUgbWltZXR5cGVzIG1vZHVsZSBub3cgcmVhZHMgdGhlIE1JTUUgZGF0YWJhc2UgZnJvbSB0aGUKKyAgcmVnaXN0cnkgdW5kZXIgV2luZG93cy4gIFBhdGNoIGJ5IEdhYnJpZWwgR2VuZWxsaW5hLgorCistIElzc3VlICM2ODE2OiBydW5weSBub3cgcHJvdmlkZXMgYSBydW5fcGF0aCBmdW5jdGlvbiB0aGF0IGFsbG93cyBQeXRob24gY29kZSB0bworICBleGVjdXRlIGZpbGUgcGF0aHMgdGhhdCByZWZlciB0byBzb3VyY2Ugb3IgY29tcGlsZWQgUHl0aG9uIGZpbGVzIGFzIHdlbGwgYXMKKyAgemlwZmlsZXMsIGRpcmVjdG9yaWVzIGFuZCBvdGhlciB2YWxpZCBzeXMucGF0aCBlbnRyaWVzIHRoYXQgY29udGFpbiBhCisgIF9fbWFpbl9fLnB5IGZpbGUuICBUaGlzIGFsbG93cyBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb3RoZXIgUHl0aG9uIHNjcmlwdHMgdG8KKyAgc3VwcG9ydCB0aGUgc2FtZSBmbGV4aWJpbGl0eSBhcyB0aGUgQ1B5dGhvbiBjb21tYW5kIGxpbmUgaXRzZWxmLgorCistIElzc3VlICM3MzE4OiBtdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgYSB0aW1lb3V0IHdoZW4gaXQgZmFpbHMgdG8gZXN0YWJsaXNoIGEKKyAgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgcHJvY2VzcywgcmF0aGVyIHRoYW4gbG9vcGluZyBlbmRsZXNzbHkuICBUaGUgZGVmYXVsdAorICB0aW1lb3V0IGlzIDIwIHNlY29uZHMsIHdoaWNoIHNob3VsZCBiZSBhbXBseSBzdWZmaWNpZW50IGZvciBsb2NhbCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjNzE5NzogQWxsb3cgdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIgb2JqZWN0cyB0byBiZSBwaWNrbGVkIGFuZAorICB1bnBpY2tsZWQuICBUaGlzIGZpeGVzIGNyYXNoZXMgdW5kZXIgV2luZG93cyB3aGVuIHRyeWluZyB0byBydW4KKyAgdGVzdF9tdWx0aXByb2Nlc3NpbmcgaW4gdmVyYm9zZSBtb2RlLgorCistIElzc3VlICM3ODkzOiBgYHVuaXR0ZXN0LlRleHRUZXN0UmVzdWx0YGAgaXMgbWFkZSBwdWJsaWMgYW5kIGEgYGByZXN1bHRjbGFzc2BgCisgIGFyZ3VtZW50IGFkZGVkIHRvIHRoZSBUZXh0VGVzdFJ1bm5lciBjb25zdHJ1Y3RvciBhbGxvd2luZyBhIGRpZmZlcmVudCByZXN1bHQKKyAgY2xhc3MgdG8gYmUgdXNlZCB3aXRob3V0IGhhdmluZyB0byBzdWJjbGFzcy4KKworLSBJc3N1ZSAjNzU4ODogYGB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdC5nZXREZXNjcmlwdGlvbmBgIG5vdyBpbmNsdWRlcyB0aGUgdGVzdAorICBuYW1lIGluIGZhaWx1cmUgcmVwb3J0cyBldmVuIGlmIHRoZSB0ZXN0IGhhcyBhIGRvY3N0cmluZy4KKworLSBJc3N1ZSAjMzAwMTogQWRkIGEgQyBpbXBsZW1lbnRhdGlvbiBvZiByZWN1cnNpdmUgbG9ja3Mgd2hpY2ggaXMgdXNlZCBieQorICBkZWZhdWx0IHdoZW4gaW5zdGFudGlhdGluZyBhIGB0aHJlYWRpbmcuUkxvY2tgIG9iamVjdC4gVGhpcyBtYWtlcyByZWN1cnNpdmUKKyAgbG9ja3MgYXMgZmFzdCBhcyByZWd1bGFyIG5vbi1yZWN1cnNpdmUgbG9ja3MgKHByZXZpb3VzbHksIHRoZXkgd2VyZSBzbG93ZXIgYnkKKyAgMTB4IHRvIDE1eCkuCisKKy0gSXNzdWUgIzcyODI6IEZpeCBhIG1lbW9yeSBsZWFrIHdoZW4gYW4gUkxvY2sgd2FzIHVzZWQgaW4gYSB0aHJlYWQgb3RoZXIgdGhhbgorICB0aG9zZSBzdGFydGVkIHRocm91Z2ggYHRocmVhZGluZy5UaHJlYWRgIChmb3IgZXhhbXBsZSwgdXNpbmcKICAgYF90aHJlYWQuc3RhcnRfbmV3X3RocmVhZCgpYCkuCiAKIC0gSXNzdWUgIzcxODc6IEltcG9ydGxpYiB3b3VsZCBub3Qgc2lsZW5jZSB0aGUgSU9FcnJvciByYWlzZWQgd2hlbiB0cnlpbmcgdG8KQEAgLTE1MjcsMjggKzM3MTEsMzYgQEAKIC0gSXNzdWUgIzcyNjQ6IEZpeCBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZGVhbGxvY2F0aW5nIHRocmVhZC1sb2NhbCBvYmplY3RzCiAgIHdoaWNoIGFyZSBwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgogCi0tIElzc3VlICM2ODk2OiBtYWlsYm94Lk1haWxkaXIgbm93IGludmFsaWRhdGVzIGl0cyBpbnRlcm5hbCBjYWNoZSBlYWNoIHRpbWUKLSAgYSBtb2RpZmljYXRpb24gaXMgZG9uZSB0aHJvdWdoIGl0LiAgVGhpcyBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgYW5kIHRlc3QKLSAgZmFpbHVyZXMgb24gc3lzdGVtcyB3aXRoIHNsaWdodGx5IGJvZ3VzIG10aW1lIGJlaGF2aW91ci4KKy0gSXNzdWUgIzcyMTE6IEFsbG93IDY0LWJpdCB2YWx1ZXMgZm9yIHRoZSBgaWRlbnRgIGFuZCBgZGF0YWAgZmllbGRzIG9mIGtldmVudAorICBvYmplY3RzIG9uIDY0LWJpdCBzeXN0ZW1zLiAgUGF0Y2ggYnkgTWljaGFlbCBCcm9naHRvbi4KIAotLSBJc3N1ZSAjNjY2NTogRml4IGZubWF0Y2ggdG8gcHJvcGVybHkgbWF0Y2ggZmlsZW5hbWVzIHdpdGggbmV3bGluZXMgaW4gdGhlbS4KKy0gSXNzdWUgIzY4OTY6IG1haWxib3guTWFpbGRpciBub3cgaW52YWxpZGF0ZXMgaXRzIGludGVybmFsIGNhY2hlIGVhY2ggdGltZSBhCisgIG1vZGlmaWNhdGlvbiBpcyBkb25lIHRocm91Z2ggaXQuICBUaGlzIGZpeGVzIGluY29uc2lzdGVuY2llcyBhbmQgdGVzdCBmYWlsdXJlcworICBvbiBzeXN0ZW1zIHdpdGggc2xpZ2h0bHkgYm9ndXMgbXRpbWUgYmVoYXZpb3VyLgogCi0tIElzc3VlICM3MjQ2ICYgSXNzdWUgIzcyMDg6IGdldHBhc3Mgbm93IHByb3Blcmx5IGZsdXNoZXMgaW5wdXQgYmVmb3JlCi0gIHJlYWRpbmcgZnJvbSBzdGRpbiBzbyB0aGF0IGV4aXN0aW5nIGlucHV0IGRvZXMgbm90IGNvbmZ1c2UgaXQgYW5kCi0gIGxlYWQgdG8gaW5jb3JyZWN0IGVudHJ5IG9yIGFuIElPRXJyb3IuICBJdCBhbHNvIHByb3Blcmx5IGZsdXNoZXMgaXQKLSAgYWZ0ZXJ3YXJkcyB0byBhdm9pZCB0aGUgdGVybWluYWwgZWNob2luZyB0aGUgaW5wdXQgYWZ0ZXJ3YXJkcyBvbgotICBPU2VzIHN1Y2ggYXMgU29sYXJpcy4KKy0gSXNzdWUgIzcyNDYgJiBJc3N1ZSAjNzIwODogZ2V0cGFzcyBub3cgcHJvcGVybHkgZmx1c2hlcyBpbnB1dCBiZWZvcmUgcmVhZGluZworICBmcm9tIHN0ZGluIHNvIHRoYXQgZXhpc3RpbmcgaW5wdXQgZG9lcyBub3QgY29uZnVzZSBpdCBhbmQgbGVhZCB0byBpbmNvcnJlY3QKKyAgZW50cnkgb3IgYW4gSU9FcnJvci4gIEl0IGFsc28gcHJvcGVybHkgZmx1c2hlcyBpdCBhZnRlcndhcmRzIHRvIGF2b2lkIHRoZQorICB0ZXJtaW5hbCBlY2hvaW5nIHRoZSBpbnB1dCBhZnRlcndhcmRzIG9uIE9TZXMgc3VjaCBhcyBTb2xhcmlzLgogCi0tIElzc3VlICM3MjMzOiBGaXggYSBudW1iZXIgb2YgdHdvLWFyZ3VtZW50IERlY2ltYWwgbWV0aG9kcyB0byBtYWtlCi0gIHN1cmUgdGhhdCB0aGV5IGFjY2VwdCBhbiBpbnQgb3IgbG9uZyBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LiAgQWxzbwotICBmaXggYnVnZ3kgaGFuZGxpbmcgb2YgbGFyZ2UgYXJndW1lbnRzICh0aG9zZSB3aXRoIGNvZWZmaWNpZW50IGxvbmdlcgotICB0aGFuIHRoZSBjdXJyZW50IHByZWNpc2lvbikgaW4gc2hpZnQgYW5kIHJvdGF0ZS4KKy0gSXNzdWUgIzcyMzM6IEZpeCBhIG51bWJlciBvZiB0d28tYXJndW1lbnQgRGVjaW1hbCBtZXRob2RzIHRvIG1ha2Ugc3VyZSB0aGF0CisgIHRoZXkgYWNjZXB0IGFuIGludCBvciBsb25nIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuICBBbHNvIGZpeCBidWdneSBoYW5kbGluZyBvZgorICBsYXJnZSBhcmd1bWVudHMgKHRob3NlIHdpdGggY29lZmZpY2llbnQgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uKSBpbgorICBzaGlmdCBhbmQgcm90YXRlLgorCistIElzc3VlICM0NzUwOiBTdG9yZSB0aGUgYmFzZW5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGluIHRoZSBnemlwIEZOQU1FCisgIGhlYWRlciBhcyByZXF1aXJlZCBieSBSRkMgMTk1Mi4KKworLSBJc3N1ZSAjMTE4MDogQWRkZWQgYSBuZXcgZ2xvYmFsIG9wdGlvbiB0byBpZ25vcmUgfi8ucHlkaXN0dXRpbHMuY2ZnIGluCisgIERpc3R1dGlscy4KKworLSBJc3N1ZSAjNzIxODogRml4IHRlc3Rfc2l0ZSBmb3Igd2luMzIsIHRoZSBkaXJlY3RvcnkgY29tcGFyaXNvbiB3YXMgZG9uZSB3aXRoCisgIGFuIHVwcGVyY2FzZS4KIAogLSBJc3N1ZSAjNzIwNTogRml4IGEgcG9zc2libGUgZGVhZGxvY2sgd2hlbiB1c2luZyBhIEJaMkZpbGUgb2JqZWN0IGZyb20KICAgc2V2ZXJhbCB0aHJlYWRzIGF0IG9uY2UuCiAKLS0gSXNzdWUgIzcwNzE6IGJ5dGUtY29tcGlsYXRpb24gaW4gRGlzdHV0aWxzIGlzIG5vdyBkb25lIHdpdGggcmVzcGVjdCB0bwotICBzeXMuZG9udF93cml0ZV9ieXRlY29kZS4KKy0gSXNzdWUgIzcwNzc6IGxvZ2dpbmc6IFN5c0xvZ0hhbmRsZXIgbm93IHRyZWF0cyBVbmljb2RlIGFzIHBlciBSRkMgNTQyNC4KIAogLSBJc3N1ZSAjNzA5OTogRGVjaW1hbC5pc19ub3JtYWwgbm93IHJldHVybnMgVHJ1ZSBmb3IgbnVtYmVycyB3aXRoIGV4cG9uZW50CiAgIGxhcmdlciB0aGFuIGVtYXguCkBAIC0xNTU2LDY5ICszNzQ4LDE1OSBAQAogLSBJc3N1ZSAjNzA4MDogbG9jYWxlLnN0cnhmcm0oKSByYWlzZXMgYSBNZW1vcnlFcnJvciBvbiA2NC1iaXQgbm9uLVdpbmRvd3MKICAgcGxhdGZvcm1zLCBhbmQgYXNzb3J0ZWQgbG9jYWxlIGZpeGVzIGJ5IERlcmsgRHJ1a2tlci4KIAotLSBJc3N1ZSAjNTgzMzogRml4IGV4dHJhIHNwYWNlIGNoYXJhY3RlciBpbiByZWFkbGluZSBjb21wbGV0aW9uIHdpdGggdGhlCi0gIEdOVSByZWFkbGluZSBsaWJyYXJ5IHZlcnNpb24gNi4wLgorLSBJc3N1ZSAjNTgzMzogRml4IGV4dHJhIHNwYWNlIGNoYXJhY3RlciBpbiByZWFkbGluZSBjb21wbGV0aW9uIHdpdGggdGhlIEdOVQorICByZWFkbGluZSBsaWJyYXJ5IHZlcnNpb24gNi4wLgogCi0tIElzc3VlICM2ODk0OiBGaXhlZCB0aGUgaXNzdWUgdXJsbGliMiBkb2Vzbid0IHJlc3BlY3QgIm5vX3Byb3h5IiBlbnZpcm9ubWVudAorLSBJc3N1ZSAjNjg5NDogRml4ZWQgdGhlIGlzc3VlIHVybGxpYjIgZG9lc24ndCByZXNwZWN0ICJub19wcm94eSIgZW52aXJvbm1lbnQuCiAKLS0gSXNzdWUgIzcwODI6IFdoZW4gZmFsbGluZyBiYWNrIHRvIHRoZSBNSU1FICduYW1lJyBwYXJhbWV0ZXIsIHRoZQotICBjb3JyZWN0IHBsYWNlIHRvIGxvb2sgZm9yIGl0IGlzIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgorLSBJc3N1ZSAjNzA4NjogQWRkZWQgVENQIHN1cHBvcnQgdG8gU3lzTG9nSGFuZGxlciwgYW5kIHRpZGllZCB1cCBzb21lCisgIGFuYWNocm9uaXNtcyBpbiB0aGUgY29kZSB3aGljaCB3ZXJlIGEgcmVsaWMgb2YgMS41LjIgY29tcGF0aWJpbGl0eS4KKworLSBJc3N1ZSAjNzA4MjogV2hlbiBmYWxsaW5nIGJhY2sgdG8gdGhlIE1JTUUgJ25hbWUnIHBhcmFtZXRlciwgdGhlIGNvcnJlY3QgcGxhY2UKKyAgdG8gbG9vayBmb3IgaXQgaXMgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCiAKIC0gTWFrZSB0b2tlbml6ZS5kZXRlY3RfY29kaW5nKCkgbm9ybWFsaXplIHV0Zi04IGFuZCBpc28tODg1OS0xIHZhcmlhbnRzIGxpa2UgdGhlCiAgIGJ1aWx0aW4gdG9rZW5pemVyLgogCi0tIElzc3VlICM3MDQ4OiBGb3JjZSBEZWNpbWFsLmxvZ2IgdG8gcm91bmQgaXRzIHJlc3VsdCB3aGVuIHRoYXQgcmVzdWx0Ci0gIGlzIHRvbyBsYXJnZSB0byBmaXQgaW4gdGhlIGN1cnJlbnQgcHJlY2lzaW9uLgorLSBJc3N1ZSAjNzA0ODogRm9yY2UgRGVjaW1hbC5sb2diIHRvIHJvdW5kIGl0cyByZXN1bHQgd2hlbiB0aGF0IHJlc3VsdCBpcyB0b28KKyAgbGFyZ2UgdG8gZml0IGluIHRoZSBjdXJyZW50IHByZWNpc2lvbi4KIAotLSBJc3N1ZSAjNjIzNiwgIzYzNDg6IEZpeCB2YXJpb3VzIGZhaWx1cmVzIGluIHRoZSBJL08gbGlicmFyeSB1bmRlciBBSVgKLSAgYW5kIG90aGVyIHBsYXRmb3Jtcywgd2hlbiB1c2luZyBhIG5vbi1nY2MgY29tcGlsZXIuIFBhdGNoIGJ5IERlcmsgRHJ1a2tlci4KKy0gSXNzdWUgIzYyMzYsICM2MzQ4OiBGaXggdmFyaW91cyBmYWlsdXJlcyBpbiB0aGUgSS9PIGxpYnJhcnkgdW5kZXIgQUlYIGFuZAorICBvdGhlciBwbGF0Zm9ybXMsIHdoZW4gdXNpbmcgYSBub24tZ2NjIGNvbXBpbGVyLiBQYXRjaCBieSBEZXJrIERydWtrZXIuCiAKLS0gSXNzdWUgIzY5NTQ6IEZpeGVkIGNyYXNoIHdoZW4gdXNpbmcgRElTVFVUSUxTX0RFQlVHIGZsYWcgaW4gRGlzdHV0aWxzLgorLSBJc3N1ZSAjNDYwNjogUGFzc2luZyAnTm9uZScgaWYgY3R5cGVzIGFyZ3R5cGUgaXMgc2V0IHRvIFBPSU5URVIoLi4uKSAgZG9lcyBub3cKKyAgYWx3YXlzIHJlc3VsdCBpbiBOVUxMLgogCi0tIElzc3VlICM0NjA2OiBQYXNzaW5nICdOb25lJyBpZiBjdHlwZXMgYXJndHlwZSBpcyBzZXQgdG8gUE9JTlRFUiguLi4pCi0gIGRvZXMgbm93IGFsd2F5cyByZXN1bHQgaW4gTlVMTC4KLQotLSBJc3N1ZSAjNTA0MjogU3RydWN0dXJlIHN1Yi1zdWJjbGFzcyBkb2VzIG5vdyBpbml0aWFsaXplIGNvcnJlY3RseQotICB3aXRoIGJhc2UgY2xhc3MgcG9zaXRpb25hbCBhcmd1bWVudHMuCistIElzc3VlICM1MDQyOiBTdHJ1Y3R1cmUgc3ViLXN1YmNsYXNzIGRvZXMgbm93IGluaXRpYWxpemUgY29ycmVjdGx5IHdpdGggYmFzZQorICBjbGFzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KIAogLSBJc3N1ZSAjNjg4MjogSW1wb3J0IHV1aWQgY3JlYXRlcyB6b21iaWVzIHByb2Nlc3Nlcy4KIAogLSBJc3N1ZSAjNjYzNTogRml4IHByb2ZpbGVyIHByaW50aW5nIHVzYWdlIG1lc3NhZ2UuCiAKKy0gSXNzdWUgIzY4NTY6IEFkZCBhIGZpbHRlciBrZXl3b3JkIGFyZ3VtZW50IHRvIFRhckZpbGUuYWRkKCkuCisKIC0gSXNzdWUgIzY4ODg6IHBkYidzIGFsaWFzIGNvbW1hbmQgd2FzIGJyb2tlbiB3aGVuIG5vIGFyZ3VtZW50cyB3ZXJlIGdpdmVuLgogCi0tIElzc3VlICM2Nzk1OiBpbnQoRGVjaW1hbCgnbmFuJykpIG5vdyByYWlzZXMgVmFsdWVFcnJvciBpbnN0ZWFkIG9mCi0gIHJldHVybmluZyBOYU4gb3IgcmFpc2luZyBJbnZhbGlkQ29udGV4dC4gIEFsc28sIGZpeCBpbmZpbml0ZSByZWN1cnNpb24KLSAgaW4gbG9uZyhEZWNpbWFsKCduYW4nKSkuCistIElzc3VlICM2ODU3OiBEZWZhdWx0IGZvcm1hdCgpIGFsaWdubWVudCBzaG91bGQgYmUgJz4nIGZvciBEZWNpbWFsIGluc3RhbmNlcy4KIAotLSBJc3N1ZSAjNjg1MDogRml4IGJ1ZyBpbiBEZWNpbWFsLl9wYXJzZV9mb3JtYXRfc3BlY2lmaWVyIGZvciBmb3JtYXRzCi0gIHdpdGggbm8gdHlwZSBzcGVjaWZpZXIuCistIElzc3VlICM2Nzk1OiBpbnQoRGVjaW1hbCgnbmFuJykpIG5vdyByYWlzZXMgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIHJldHVybmluZworICBOYU4gb3IgcmFpc2luZyBJbnZhbGlkQ29udGV4dC4gIEFsc28sIGZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4KKyAgbG9uZyhEZWNpbWFsKCduYW4nKSkuCisKKy0gSXNzdWUgIzY4NTA6IEZpeCBidWcgaW4gRGVjaW1hbC5fcGFyc2VfZm9ybWF0X3NwZWNpZmllciBmb3IgZm9ybWF0cyB3aXRoIG5vCisgIHR5cGUgc3BlY2lmaWVyLgogCiAtIElzc3VlICM2MjM5OiBjdHlwZXMuY19jaGFyX3AgcmV0dXJuIHZhbHVlIG11c3QgcmV0dXJuIGJ5dGVzLgogCi0tIElzc3VlICM2ODM4OiBVc2UgYSBsaXN0IHRvIGFjY3VtdWxhdGUgdGhlIHZhbHVlIGluc3RlYWQgb2YKLSAgcmVwZWF0ZWRseSBjb25jYXRlbmF0aW5nIHN0cmluZ3MgaW4gaHR0cC5jbGllbnQncwotICBIVFRQUmVzcG9uc2UuX3JlYWRfY2h1bmtlZCBwcm92aWRpbmcgYSBzaWduaWZpY2FudCBzcGVlZCBpbmNyZWFzZQotICB3aGVuIGRvd25sb2FkaW5nIGxhcmdlIGZpbGVzIHNlcnZlbmQgd2l0aCBhIFRyYW5zZmVyLUVuY29kaW5nIG9mICdjaHVua2VkJy4KKy0gSXNzdWUgIzY4Mzg6IFVzZSBhIGxpc3QgdG8gYWNjdW11bGF0ZSB0aGUgdmFsdWUgaW5zdGVhZCBvZiByZXBlYXRlZGx5CisgIGNvbmNhdGVuYXRpbmcgc3RyaW5ncyBpbiBodHRwLmNsaWVudCdzIEhUVFBSZXNwb25zZS5fcmVhZF9jaHVua2VkIHByb3ZpZGluZyBhCisgIHNpZ25pZmljYW50IHNwZWVkIGluY3JlYXNlIHdoZW4gZG93bmxvYWRpbmcgbGFyZ2UgZmlsZXMgc2VydmVuZCB3aXRoIGEKKyAgVHJhbnNmZXItRW5jb2Rpbmcgb2YgJ2NodW5rZWQnLgogCi0tIEhhdmUgaW1wb3J0bGliIHJhaXNlIEltcG9ydEVycm9yIGlmIE5vbmUgaXMgZm91bmQgaW4gc3lzLm1vZHVsZXMgZm9yIGEKLSAgbW9kdWxlLgorLSBUcnlpbmcgdG8gaW1wb3J0IGEgc3VibW9kdWxlIGZyb20gYSBtb2R1bGUgdGhhdCBpcyBub3QgYSBwYWNrYWdlLCBJbXBvcnRFcnJvcgorICBzaG91bGQgYmUgcmFpc2VkLCBub3QgQXR0cmlidXRlRXJyb3IuCisKKy0gV2hlbiB0aGUgZ2xvYmFscyBwYXN0IHRvIGltcG9ydGxpYi5fX2ltcG9ydF9fKCkgaGFzIF9fcGFja2FnZV9fIHNldCB0byBOb25lLAorICBmYWxsIGJhY2sgdG8gY29tcHV0aW5nIHdoYXQgX19wYWNrYWdlX18gc2hvdWxkIGJlIGluc3RlYWQgb2YgZ2l2aW5nIHVwLgorCistIFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdGhlIG5hbWUgb2YgYSBtb2R1bGUgdG8gYmUgaW1wb3J0ZWQgZm9yCisgIGltcG9ydGxpYi5fX2ltcG9ydF9fIGlzIG5vdCBhIHN0cmluZyAod2FzIHJhaXNpbmcgYW4gQXR0cmlidXRlRXJyb3IgYmVmb3JlKS4KKworLSBBbGxvdyB0aGUgZnJvbWxpc3QgcGFzc2VkIGludG8gaW1wb3J0bGliLl9faW1wb3J0X18gdG8gYmUgYW55IGl0ZXJhYmxlLgorCistIEhhdmUgaW1wb3J0bGliIHJhaXNlIEltcG9ydEVycm9yIGlmIE5vbmUgaXMgZm91bmQgaW4gc3lzLm1vZHVsZXMuCisKKy0gSXNzdWUgIzYwNTQ6IERvIG5vdCBub3JtYWxpemUgc3RvcmVkIHBhdGhuYW1lcyBpbiB0YXJmaWxlLgogCiAtIElzc3VlICM2Nzk0OiBGaXggRGVjaW1hbC5jb21wYXJlX3RvdGFsIGFuZCBEZWNpbWFsLmNvbXBhcmVfdG90YWxfbWFnOiBOYU4KICAgcGF5bG9hZHMgYXJlIG5vdyBvcmRlcmVkIGJ5IGludGVnZXIgdmFsdWUgcmF0aGVyIHRoYW4gbGV4aWNvZ3JhcGhpY2FsbHkuCiAKLS0gSXNzdWUgIzYxNjM6IEZpeGVkIEhQLVVYIHJ1bnRpbWUgbGlicmFyeSBkaXIgb3B0aW9ucyBpbgotICBkaXN0dXRpbHMudW5peGNvbXBpbGVyLiBJbml0aWFsIHBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hciBhbmQKLSAgTWljaGFlbCBIYXViZW53YWxsbmVyLgorLSBJc3N1ZSAjMTM1Njk2OTogQWRkIG1pc3NpbmcgaW5mbyBtZXRob2RzIGluIHRpeC5ITGlzdC4KIAotLSBJc3N1ZSAjNzA2NjogYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZSBub3cgcmVzdG9yZXMgdGhlIGN3ZCBpZiBhbiBlcnJvciBpcwotICByYWlzZWQuIEluaXRpYWwgcGF0Y2ggYnkgRXppbyBNZWxvdHRpLgorLSBJc3N1ZSAjMTUyMjU4NzogTmV3IGNvbnN0YW50cyBhbmQgbWV0aG9kcyBmb3IgdGhlIHRpeC5HcmlkIHdpZGdldC4KKworLSBJc3N1ZSAjMTI1MDQ2OTogRml4IHRoZSByZXR1cm4gdmFsdWUgb2YgdGl4LlBhbmVkV2luZG93LnBhbmVzLgorCistIElzc3VlICMxMTE5NjczOiBEbyBub3Qgb3ZlcnJpZGUgdGtpbnRlci5UZXh0IG1ldGhvZHMgd2hlbiBjcmVhdGluZyBhCisgIFNjcm9sbGVkVGV4dC4KKworLSBJc3N1ZSAjNjY2NTogRml4IGZubWF0Y2ggdG8gcHJvcGVybHkgbWF0Y2ggZmlsZW5hbWVzIHdpdGggbmV3bGluZXMgaW4gdGhlbS4KKworLSBJc3N1ZSAjMTEzNTogQWRkIHRoZSBYVmlldyBhbmQgWVZpZXcgbWl4LWlucyB0byBhdm9pZCBkdXBsaWNhdGluZyB0aGUgeHZpZXcqCisgIGFuZCB5dmlldyogbWV0aG9kcy4KKworLSBJc3N1ZSAjNjYyOTogRml4IGEgZGF0YSBjb3JydXB0aW9uIGlzc3VlIGluIHRoZSBuZXcgSS9PIGxpYnJhcnksIHdoaWNoIGNvdWxkCisgIG9jY3VyIHdoZW4gd3JpdGluZyB0byBhIEJ1ZmZlcmVkUmFuZG9tIG9iamVjdCAoZS5nLiBhIGZpbGUgb3BlbmVkIGluICJyYisiIG9yCisgICJ3YisiIG1vZGUpIGFmdGVyIGhhdmluZyBidWZmZXJlZCBhIGNlcnRhaW4gYW1vdW50IG9mIGRhdGEgZm9yIHJlYWRpbmcuIFRoaXMKKyAgYnVnIHdhcyBub3QgcHJlc2VudCBpbiB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCisKKy0gSXNzdWUgIzY2MjI6IEZpeCAibG9jYWwgdmFyaWFibGUgJ3NlY3JldCcgcmVmZXJlbmNlZCBiZWZvcmUgYXNzaWdubWVudCIgYnVnIGluCisgIFBPUDMuYXBvcC4KKworLSBJc3N1ZSAjMjcxNTogUmVtb3ZlIHJlbW5hbnRzIG9mIENhcmJvbi5GaWxlIGZyb20gYmluaGV4IG1vZHVsZS4KKworLSBJc3N1ZSAjNjU5NTogVGhlIERlY2ltYWwgY29uc3RydWN0b3Igbm93IGFsbG93cyBhcmJpdHJhcnkgVW5pY29kZSBkZWNpbWFsCisgIGRpZ2l0cyBpbiBpbnB1dCwgYXMgcmVjb21tZW5kZWQgYnkgdGhlIHN0YW5kYXJkLiAgUHJldmlvdXNseSBpdCB3YXMgcmVzdHJpY3RlZAorICB0byBhY2NlcHRpbmcgWzAtOV0uCisKKy0gSXNzdWUgIzYxMDY6IHRlbG5ldGxpYi5UZWxuZXQucHJvY2Vzc19yYXdxIGRvZXNuJ3QgaGFuZGxlIGRlZmF1bHQgV0lMTC9XT05UCisgIERPL0RPTlQgY29ycmVjdGx5LgorCistIElzc3VlICMxNDI0MTUyOiBGaXggZm9yIGh0dHAuY2xpZW50LCB1cmxsaWIucmVxdWVzdCB0byBzdXBwb3J0IFNTTCB3aGlsZQorICB3b3JraW5nIHRocm91Z2ggcHJveHkuICBPcmlnaW5hbCBwYXRjaCBieSBDaHJpc3RvcGhlciBMaSwgY2hhbmdlcyBtYWRlIGJ5CisgIFNlbnRoaWwgS3VtYXJhbi4KKworLSBBZGQgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIgdG8gcmVwcmVzZW50IHRoZSBQRVAgMzAyIHByb3RvY29sIGZvcgorICBsb2FkZXJzIHRoYXQgYWxsb3cgZm9yIG1vZHVsZXMgdG8gYmUgZXhlY3V0ZWQuIEJvdGggaW1wb3J0bGliLmFiYy5QeUxvYWRlciBhbmQKKyAgUHlQeWNMb2FkZXIgaW5oZXJpdCBmcm9tIHRoaXMgY2xhc3MgYW5kIHByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGluIHJlbGF0aW9uIHRvCisgIG90aGVyIG1ldGhvZHMgcmVxdWlyZWQgYnkgdGhlIEFCQ3MuCisKKy0gaW1wb3J0bGliLmFiYy5QeUxvYWRlciBkaWQgbm90IGluaGVyaXQgZnJvbSBpbXBvcnRsaWIuYWJjLlJlc291cmNlTG9hZGVyIGxpa2UKKyAgdGhlIGRvY3VtZW50YXRpb24gc2FpZCBpdCBkaWQgZXZlbiB0aG91Z2ggdGhlIGNvZGUgaW4gUHlMb2FkZXIgcmVsaWVkIG9uIHRoZQorICBhYnN0cmFjdCBtZXRob2QgcmVxdWlyZWQgYnkgUmVzb3VyY2VMb2FkZXIuCisKKy0gSXNzdWUgIzY0MzE6IE1ha2UgRnJhY3Rpb24gdHlwZSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbiBpdCBkb2Vzbid0IGtub3cgaG93CisgIHRvIGhhbmRsZSBhIGNvbXBhcmlzb24gd2l0aG91dCBsb3NzIG9mIHByZWNpc2lvbi4gIEFsc28gYWRkIGNvcnJlY3QgaGFuZGxpbmcKKyAgb2YgaW5maW5pdGllcyBhbmQgbmFucyBmb3IgY29tcGFyaXNvbnMgd2l0aCBmbG9hdC4KKworLSBJc3N1ZSAjNjQxNTogRml4ZWQgd2FybmluZ3Mud2FybiBzZWdmYXVsdCBvbiBiYWQgZm9ybWF0dGVkIHN0cmluZy4KKworLSBJc3N1ZSAjNjM1ODogVGhlIGV4aXQgc3RhdHVzIG9mIGEgY29tbWFuZCBzdGFydGVkIHdpdGggb3MucG9wZW4oKSB3YXMgcmVwb3J0ZWQKKyAgZGlmZmVyZW50bHkgdGhhbiBpdCBkaWQgd2l0aCBweXRob24gMi54LgorCistIElzc3VlICM2MzIzOiBUaGUgcGRiIGRlYnVnZ2VyIGRpZCBub3QgZXhpdCB3aGVuIHJ1bm5pbmcgYSBzY3JpcHQgd2l0aCBhIHN5bnRheAorICBlcnJvci4KKworLSBJc3N1ZSAjMzM5MjogVGhlIHN1YnByb2Nlc3MgY29tbXVuaWNhdGUoKSBtZXRob2Qgbm8gbG9uZ2VyIGZhaWxzIGluIHNlbGVjdCgpCisgIHdoZW4gZmlsZSBkZXNjcmlwdG9ycyBhcmUgbGFyZ2U7IGNvbW11bmljYXRlKCkgbm93IHVzZXMgcG9sbCgpIHdoZW4gcG9zc2libGUuCisKKy0gSXNzdWUgIzYzNjk6IEZpeCBhbiBSTEUgZGVjb21wcmVzc2lvbiBidWcgaW4gdGhlIGJpbmhleCBtb2R1bGUuCisKKy0gSXNzdWUgIzYzNDQ6IEZpeGVkIGEgY3Jhc2ggb2YgbW1hcC5yZWFkKCkgd2hlbiBwYXNzZWQgYSBuZWdhdGl2ZSBhcmd1bWVudC4KKworLSBUaGUgZGVwcmVjYXRlZCBmdW5jdGlvbiBzdHJpbmcubWFrZXRyYW5zIGhhcyBiZWVuIHJlbW92ZWQuCisKKy0gSXNzdWUgIzQwMDU6IEZpeGVkIGEgY3Jhc2ggb2YgcHlkb2Mgd2hlbiB0aGVyZSB3YXMgYSB6aXAgZmlsZSBwcmVzZW50IGluCisgIHN5cy5wYXRoLgorCistIElzc3VlICM2MjE4OiBpby5TdHJpbmdJTyBhbmQgaW8uQnl0ZXNJTyBpbnN0YW5jZXMgYXJlIG5vdyBwaWNrbGFibGUuCisKKy0gVGhlIG9zLmdldF9leGVjX3BhdGgoKSBmdW5jdGlvbiB0byByZXR1cm4gdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdGhhdCB3aWxsIGJlCisgIHNlYXJjaGVkIGZvciBhbiBleGVjdXRhYmxlIHdoZW4gbGF1bmNoaW5nIGEgc3VicHJvY2VzcyB3YXMgYWRkZWQuCiAKIC0gSXNzdWUgIzc0ODE6IFdoZW4gYSB0aHJlYWRpbmcuVGhyZWFkIGZhaWxlZCB0byBzdGFydCBpdCB3b3VsZCBsZWF2ZSB0aGUKICAgaW5zdGFuY2Ugc3R1Y2sgaW4gaW5pdGlhbCBzdGF0ZSBhbmQgcHJlc2VudCBpbiB0aHJlYWRpbmcuZW51bWVyYXRlKCkuCiAKLS0gSXNzdWUgIzEwNjgyNjg6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cgaGFuZGxlcyBFSU5UUiBpbiBpbnRlcm5hbAotICBvcy53YWl0cGlkIGFuZCBvcy5yZWFkIHN5c3RlbSBjYWxscyB3aGVyZSBhcHByb3ByaWF0ZS4KKy0gSXNzdWUgIzEwNjgyNjg6IFRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cgaGFuZGxlcyBFSU5UUiBpbiBpbnRlcm5hbCBvcy53YWl0cGlkCisgIGFuZCBvcy5yZWFkIHN5c3RlbSBjYWxscyB3aGVyZSBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjNjcyOTogQWRkZWQgY3R5cGVzLmNfc3NpemVfdCB0byByZXByZXNlbnQgc3NpemVfdC4KKworLSBJc3N1ZSAjNjI0NzogVGhlIGFyZ3BhcnNlIG1vZHVsZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKworLSBJc3N1ZSAjODIzNTogX3NvY2tldDogQWRkIHRoZSBjb25zdGFudCBgYFNPX1NFVEZJQmBgLiAgU09fU0VURklCIGlzIGEgc29ja2V0CisgIG9wdGlvbiBhdmFpbGFibGUgb24gRnJlZUJTRCA3LjEgYW5kIG5ld2VyLgogCiAtIElzc3VlICM5MzE1OiBGaXggZm9yIHRoZSB0cmFjZSBtb2R1bGUgdG8gcmVjb3JkIGNvcnJlY3QgY2xhc3MgbmFtZQogICBmb3IgdHJhY2luZyBtZXRob2RzLgpAQCAtMTYyNiw1NiArMzkwOCwzNTUgQEAKIEV4dGVuc2lvbiBNb2R1bGVzCiAtLS0tLS0tLS0tLS0tLS0tLQogCi0tIElzc3VlICM5Mjc3OiBGaXggYnVnIGluIHN0cnVjdC5wYWNrIGZvciBib29scyBpbiBzdGFuZGFyZCBtb2RlCi0gIChlLmcuLCBzdHJ1Y3QucGFjaygnPj8nKSk6ICBpZiBjb252ZXJzaW9uIHRvIGJvb2wgcmFpc2VkIGFuIGV4Y2VwdGlvbgotICB0aGVuIHRoYXQgZXhjZXB0aW9uIHdhc24ndCBwcm9wZXJseSBwcm9wYWdhdGVkIG9uIG1hY2hpbmVzIHdoZXJlCi0gIGNoYXIgaXMgdW5zaWduZWQuCistIElzc3VlICM5OTU5OiBUd2VhayBmb3JtdWxhIHVzZWQgZm9yIGNvbXB1dGluZyBtYXRoLmxvZyBvZiBhbiBpbnRlZ2VyLAorICBtYWtpbmcgaXQgbWFyZ2luYWxseSBtb3JlIGFjY3VyYXRlIGZvciBleGFjdCBwb3dlcnMgb2YgMi4KIAotLSBJc3N1ZSAjNTE4MDogRml4ZWQgYSBidWcgdGhhdCBwcmV2ZW50ZWQgbG9hZGluZyAyLnggcGlja2xlcyBpbiAzLngKLSAgcHl0aG9uIHdoZW4gdGhleSBjb250YWluIGluc3RhbmNlcyBvZiBvbGQtc3R5bGUgY2xhc3Nlcy4KKy0gSXNzdWUgIzk0MjI6IEZpeCBtZW1vcnkgbGVhayB3aGVuIHJlLWluaXRpYWxpemluZyBhIHN0cnVjdC5TdHJ1Y3Qgb2JqZWN0LgogCi0tIElzc3VlICM3NjcwOiBzcWxpdGUzOiBGaXhlZCBjcmFzaGVzIHdoZW4gb3BlcmF0aW5nIG9uIGNsb3NlZCBjb25uZWN0aW9ucy4KKy0gSXNzdWUgIzc5MDA6IFRoZSBnZXRncm91cHMoMikgc3lzdGVtIGNhbGwgb24gTWFjT1NYIGJlaGF2ZXMgcmF0aGVyIG9kZGx5CisgIGNvbXBhcmVkIHRvIG90aGVyIHVuaXggc3lzdGVtcy4gSW4gcGFydGljdWxhciwgb3MuZ2V0Z3JvdXBzKCkgZG9lcyBub3QgcmVmbGVjdAorICBhbnkgY2hhbmdlcyBtYWRlIHVzaW5nIG9zLnNldGdyb3VwcygpIGJ1dCBiYXNpY2x5IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lCisgIGluZm9ybWF0aW9uIGFzIHRoZSBpZCBjb21tYW5kLiBvcy5nZXRncm91cHMoKSBjYW4gbm93IHJldHVybiBtb3JlIHRoYW4gMTYKKyAgZ3JvdXBzIG9uIE1hY09TWC4KKworLSBJc3N1ZSAjNjA5NTogTWFrZSBkaXJlY3RvcnkgYXJndW1lbnQgdG8gb3MubGlzdGRpciBvcHRpb25hbC4KKworLSBJc3N1ZSAjOTI3NzogRml4IGJ1ZyBpbiBzdHJ1Y3QucGFjayBmb3IgYm9vbHMgaW4gc3RhbmRhcmQgbW9kZSAoZS5nLiwKKyAgc3RydWN0LnBhY2soJz4/JykpOiBpZiBjb252ZXJzaW9uIHRvIGJvb2wgcmFpc2VkIGFuIGV4Y2VwdGlvbiB0aGVuIHRoYXQKKyAgZXhjZXB0aW9uIHdhc24ndCBwcm9wZXJseSBwcm9wYWdhdGVkIG9uIG1hY2hpbmVzIHdoZXJlIGNoYXIgaXMgdW5zaWduZWQuCisKKy0gSXNzdWUgIzUxODA6IEZpeGVkIGEgYnVnIHRoYXQgcHJldmVudGVkIGxvYWRpbmcgMi54IHBpY2tsZXMgaW4gMy54IHB5dGhvbiB3aGVuCisgIHRoZXkgY29udGFpbiBpbnN0YW5jZXMgb2Ygb2xkLXN0eWxlIGNsYXNzZXMuCisKKy0gSXNzdWUgIzkxNjU6IEFkZCBuZXcgZnVuY3Rpb25zIG1hdGguaXNmaW5pdGUgYW5kIGNtYXRoLmlzZmluaXRlLCB0byBhY2NvbXBhbnkKKyAgZXhpc3RpbmcgaXNpbmYgYW5kIGlzbmFuIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTU3ODI2OTogSW1wbGVtZW50IG9zLnN5bWxpbmsgZm9yIFdpbmRvd3MgNi4wKy4gIFBhdGNoIGJ5IEphc29uCisgIFIuIENvb21icy4KKworLSBJbiBzdHJ1Y3QucGFjaywgY29ycmVjdGx5IHByb3BvZ2F0ZSBleGNlcHRpb25zIGZyb20gY29tcHV0aW5nIHRoZSB0cnV0aCBvZiBhbgorICBvYmplY3QgaW4gdGhlICc/JyBmb3JtYXQuCisKKy0gSXNzdWUgIzkwMDA6IGRhdGV0aW1lLnRpbWV6b25lIG9iamVjdHMgbm93IGhhdmUgZXZhbC1mcmllbmRseSByZXByLgorCistIEluIHRoZSBtYXRoIG1vZHVsZSwgY29ycmVjdGx5IGxvb2t1cCBfX3RydW5jX18sIF9fY2VpbF9fLCBhbmQgX19mbG9vcl9fIGFzCisgIHNwZWNpYWwgbWV0aG9kcy4KKworLSBJc3N1ZSAjOTAwNTogUHJldmVudCB1dGN0aW1ldHVwbGUoKSBmcm9tIHByb2R1Y2luZyB5ZWFyIDAgb3IgeWVhciAxMCwwMDAuCisgIFByaW9yIHRvIHRoaXMgY2hhbmdlLCB0aW1lem9uZSBhZGp1c3RtZW50IGluIHV0Y3RpbWV0dXBsZSgpIGNvdWxkIHByb2R1Y2UKKyAgdG1feWVhciB2YWx1ZSBvZiAwIG9yIDEwLDAwMC4gIE5vdyBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZCBpbiB0aGVzZSBlZGdlCisgIGNhc2VzLgorCistIElzc3VlICM2NjQxOiBUaGUgYGBkYXRldGltZS5zdHJwdGltZWBgIG1ldGhvZCBub3cgc3VwcG9ydHMgdGhlIGBgJXpgYAorICBkaXJlY3RpdmUuICBXaGVuIHRoZSBgYCV6YGAgZGlyZWN0aXZlIGlzIHByZXNlbnQgaW4gdGhlIGZvcm1hdCBzdHJpbmcsIGFuCisgIGF3YXJlIGBgZGF0ZXRpbWVgYCBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCBgYHR6aW5mb2BgIGJvdW5kIHRvIGEKKyAgYGBkYXRldGltZS50aW1lem9uZWBgIGluc3RhbmNlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHBhcnNlZCBvZmZzZXQuICBJZiBib3RoCisgIGBgJXpgYCBhbmQgYGAlWmBgIGFyZSBwcmVzZW50LCB0aGUgZGF0YSBpbiBgYCVaYGAgZmllbGQgaXMgdXNlZCBmb3IgdGltZXpvbmUKKyAgbmFtZSwgYnV0IGBgJVpgYCBkYXRhIHdpdGhvdXQgYGAlemBgIGlzIGRpc2NhcmRlZC4KKworLSBJc3N1ZSAjNTA5NDogVGhlIGBgZGF0ZXRpbWVgYCBtb2R1bGUgbm93IGhhcyBhIHNpbXBsZSBjb25jcmV0ZSBjbGFzcworICBpbXBsZW1lbnRpbmcgYGBkYXRldGltZS50emluZm9gYCBpbnRlcmZhY2UuICBJbnN0YW5jZXMgb2YgdGhlIG5ldyBjbGFzcywKKyAgYGBkYXRldGltZS50aW1lem9uZWBgLCByZXR1cm4gZml4ZWQgbmFtZSBhbmQgVVRDIG9mZnNldCBmcm9tIHRoZWlyCisgIGBgdHpuYW1lKGR0KWBgIGFuZCBgYHV0Y29mZnNldChkdClgYCBtZXRob2RzLiAgVGhlIGBgZHN0KGR0KWBgIG1ldGhvZCBhbHdheXMKKyAgcmV0dXJucyBgYE5vbmVgYC4gIEEgY2xhc3MgYXR0cmlidXRlLCBgYHV0Y2BgIGNvbnRhaW5zIGFuIGluc3RhbmNlCisgIHJlcHJlc2VudGluZyB0aGUgVVRDIHRpbWV6b25lLiAgT3JpZ2luYWwgcGF0Y2ggYnkgUmFmZSBLYXBsYW4uCisKKy0gSXNzdWUgIzg5NzM6IEFkZCBfX2FsbF9fIHRvIHN0cnVjdCBtb2R1bGU7IHRoaXMgZW5zdXJlcyB0aGF0IGhlbHAoc3RydWN0KQorICBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIGZvciB0aGUgc3RydWN0LlN0cnVjdCBjbGFzcy4KKworLSBJc3N1ZSAjMzEyOTogVHJhaWxpbmcgZGlnaXRzIGluIHN0cnVjdCBmb3JtYXQgc3RyaW5nIGFyZSBubyBsb25nZXIgaWdub3JlZC4KKyAgRm9yIGV4YW1wbGUsICIxIiBvciAiaWxpYjEyMyIgYXJlIG5vdyBpbnZhbGlkIGZvcm1hdHMgYW5kIGNhdXNlCisgIGBgc3RydWN0LmVycm9yYGAgdG8gYmUgcmFpc2VkLiAgUGF0Y2ggYnkgQ2FsZWIgRGV2ZXJhdXguCisKKy0gSXNzdWUgIzczODQ6IElmIHRoZSBzeXN0ZW0gcmVhZGxpbmUgbGlicmFyeSBpcyBsaW5rZWQgYWdhaW5zdCBuY3Vyc2VzLCB0aGUKKyAgY3Vyc2VzIG1vZHVsZSBtdXN0IGJlIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMgYXMgd2VsbC4gT3RoZXJ3aXNlIGl0IGlzIG5vdCBzYWZlCisgIHRvIGxvYWQgYm90aCB0aGUgcmVhZGxpbmUgYW5kIGN1cnNlcyBtb2R1bGVzIGluIGFuIGFwcGxpY2F0aW9uLgorCistIElzc3VlICMyODEwOiBGaXggY2FzZXMgd2hlcmUgdGhlIFdpbmRvd3MgcmVnaXN0cnkgQVBJIHJldHVybnMgRVJST1JfTU9SRV9EQVRBLAorICByZXF1aXJpbmcgYSByZS10cnkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBjb21wbGV0ZSByZXN1bHQuCisKKy0gSXNzdWUgIzg2OTI6IE9wdGltaXplIG1hdGguZmFjdG9yaWFsOiByZXBsYWNlIHRoZSBwcmV2aW91cyBuYWl2ZSBhbGdvcml0aG0KKyAgd2l0aCBhbiBpbXByb3ZlZCAnYmluYXJ5LXNwbGl0JyBhbGdvcml0aG0gdGhhdCB1c2VzIGZld2VyIG11bHRpcGxpY2F0aW9ucyBhbmQKKyAgYWxsb3dzIG1hbnkgb2YgdGhlIG11bHRpcGxpY2F0aW9ucyB0byBiZSBwZXJmb3JtZWQgdXNpbmcgcGxhaW4gQyBpbnRlZ2VyCisgIGFyaXRobWV0aWMgaW5zdGVhZCBvZiBQeUxvbmcgYXJpdGhtZXRpYy4gIEFsc28gdXNlcyBhIGxvb2t1cCB0YWJsZSBmb3Igc21hbGwKKyAgYXJndW1lbnRzLgorCistIElzc3VlICM4Njc0OiBGaXhlZCBhIG51bWJlciBvZiBpbmNvcnJlY3Qgb3IgdW5kZWZpbmVkLWJlaGF2aW91ci1pbmR1Y2luZworICBvdmVyZmxvdyBjaGVja3MgaW4gdGhlIGF1ZGlvb3AgbW9kdWxlLgorCistIElzc3VlICM4NjQ0OiBUaGUgYWNjdXJhY3kgb2YgdGQudG90YWxfc2Vjb25kcygpIGhhcyBiZWVuIGltcHJvdmVkIChieQorICBjYWxjdWxhdGluZyB3aXRoIGludGVnZXIgYXJpdGhtZXRpYyBpbnN0ZWFkIG9mIGZsb2F0IGFyaXRobWV0aWMgaW50ZXJuYWxseSk6CisgIHRoZSByZXN1bHQgaXMgbm93IGFsd2F5cyBjb3JyZWN0bHkgcm91bmRlZCwgYW5kIGlzIGVxdWl2YWxlbnQgdG8gYGB0ZCAvCisgIHRpbWVkZWx0YShzZWNvbmRzPTEpYGAuCisKKy0gSXNzdWUgIzI3MDY6IEFsbG93IGRpdmlzaW9uIG9mIGEgdGltZWRlbHRhIGJ5IGFub3RoZXIgdGltZWRlbHRhOiB0aW1lZGVsdGEgLworICB0aW1lZGVsdGEsIHRpbWVkZWx0YSAlIHRpbWVkZWx0YSwgdGltZWRlbHRhIC8vIHRpbWVkZWx0YSBhbmQgZGl2bW9kKHRpbWVkZWx0YSwKKyAgdGltZWRlbHRhKSBhcmUgYWxsIHN1cHBvcnRlZC4KKworLSBJc3N1ZSAjODMxNDogRml4IHVuc2lnbmVkIGxvbmcgbG9uZyBidWcgaW4gbGliZmZpIG9uIFNwYXJjIHY4LgorCistIElzc3VlICM4MzAwOiBXaGVuIHBhc3NpbmcgYSBub24taW50ZWdlciBhcmd1bWVudCB0byBzdHJ1Y3QucGFjayB3aXRoIGFueQorICBpbnRlZ2VyIGZvcm1hdCBjb2RlLCBzdHJ1Y3QucGFjayBmaXJzdCBhdHRlbXB0cyB0byBjb252ZXJ0IHRoZSBub24taW50ZWdlcgorICB1c2luZyBpdHMgX19pbmRleF9fIG1ldGhvZC4gIElmIHRoYXQgbWV0aG9kIGlzIG5vbi1leGlzdGVudCBvciByYWlzZXMKKyAgVHlwZUVycm9yIGl0IGdvZXMgb24gdG8gdHJ5IHRoZSBfX2ludF9fIG1ldGhvZCwgYXMgZGVzY3JpYmVkIGJlbG93LgorCistIElzc3VlICM4MTQyOiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuOSByZWxlYXNlLgorCistIElzc3VlICM2OTQ5OiBBbGxvdyB0aGUgX2RibSBleHRlbnNpb24gdG8gYmUgYnVpbHQgd2l0aCBkYiA0LjgueC4KKworLSBJc3N1ZSAjNjU0NDogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdGhlIGtxdWV1ZSBpbXBsZW1lbnRhdGlvbidzIGVycm9yCisgIGhhbmRsaW5nLgogCiAtIFN0b3AgcHJvdmlkaW5nIGNydGFzc2VtLmggc3ltYm9scyB3aGVuIGNvbXBpbGluZyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMCwgYXMKICAgbXN2Y3IxMDAuZGxsIGlzIG5vdCBhIHBsYXRmb3JtIGFzc2VtYmx5IGFueW1vcmUuCiAKKy0gSXNzdWUgIzY1MDg6IEFkZCBwb3NpeC57Z2V0cmVzdWlkLGdldHJlc2dpZCxzZXRyZXN1aWQsc2V0cmVzZ2lkfS4KKwogLSBJc3N1ZSAjNzA3ODogU2V0IHN0cnVjdC5fX2RvY19fIGZyb20gX3N0cnVjdC5fX2RvY19fLgogCistIElzc3VlICMzMzY2OiBBZGQgZXJmLCBlcmZjLCBleHBtMSwgZ2FtbWEsIGxnYW1tYSBmdW5jdGlvbnMgdG8gbWF0aCBtb2R1bGUuCisKKy0gSXNzdWUgIzY4Nzc6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byBsaW5rIHRoZSByZWFkbGluZSBleHRlbnNpb24gdG8gdGhlIGxpYmVkaXQKKyAgcmVhZGxpbmUgZW11bGF0aW9uIG9uIE9TWCAxMC41IG9yIGxhdGVyLgorCiAtIElzc3VlICM2ODQ4OiBGaXggY3Vyc2VzIG1vZHVsZSBidWlsZCBmYWlsdXJlIG9uIE9TIFggMTAuNi4KIAorLSBGaXggYSBzZWdmYXVsdCB0aGF0IGNvdWxkIGJlIHRyaWdnZXJlZCBieSBleHBhdCB3aXRoIHNwZWNpYWxseSBmb3JtZWQgaW5wdXQuCisKKy0gSXNzdWUgIzY1NjE6ICdcZCcgaW4gYSByZWdleCBub3cgbWF0Y2hlcyBvbmx5IGNoYXJhY3RlcnMgd2l0aCBVbmljb2RlIGNhdGVnb3J5CisgICdOZCcgKE51bWJlciwgRGVjaW1hbCBEaWdpdCkuICBQcmV2aW91c2x5IGl0IGFsc28gbWF0Y2hlZCBjaGFyYWN0ZXJzIHdpdGgKKyAgY2F0ZWdvcnkgJ05vJy4KKworLSBJc3N1ZSAjNDUwOTogQXJyYXkgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIG1vZGlmaWVkIGFmdGVyIGFuIG9wZXJhdGlvbiBmYWlsaW5nCisgIGR1ZSB0byB0aGUgcmVzaXplIHJlc3RyaWN0aW9uIGluLXBsYWNlIHdoZW4gdGhlIG9iamVjdCBoYXMgZXhwb3J0ZWQgYnVmZmVycy4KKworLSBJc3N1ZSAjMjM4OTogQXJyYXkgb2JqZWN0cyBhcmUgbm93IHBpY2tsZWQgaW4gYSBwb3J0YWJsZSBtYW5uZXIuCisKIC0gRXhwYXQ6IEZpeCBEb1MgdmlhIFhNTCBkb2N1bWVudCB3aXRoIG1hbGZvcm1lZCBVVEYtOCBzZXF1ZW5jZXMKICAgKENWRV8yMDA5XzM1NjApLgogCistIElzc3VlICM3MjQyOiBPbiBTb2xhcmlzIDkgYW5kIGVhcmxpZXIgY2FsbGluZyBvcy5mb3JrKCkgZnJvbSB3aXRoaW4gYSB0aHJlYWQKKyAgY291bGQgcmFpc2UgYW4gaW5jb3JyZWN0IFJ1bnRpbWVFcnJvciBhYm91dCBub3QgaG9sZGluZyB0aGUgaW1wb3J0IGxvY2suICBUaGUKKyAgaW1wb3J0IGxvY2sgaXMgbm93IHJlaW5pdGlhbGl6ZWQgYWZ0ZXIgZm9yay4KKwogLSBJc3N1ZSAjNzk5OTogb3Muc2V0cmV1aWQoKSBhbmQgb3Muc2V0cmVnaWQoKSB3b3VsZCByZWZ1c2UgdG8gYWNjZXB0IGEgLTEKICAgcGFyYW1ldGVyIG9uIHNvbWUgcGxhdGZvcm1zIHN1Y2ggYXMgT1MgWC4KIAorLSBCdWlsZCB0aGUgb3NzYXVkaW8gZXh0ZW5zaW9uIG9uIEdOVS9rRnJlZUJTRC4KKworLSBJc3N1ZSAjNzM0Nzogd2lucmVnOiBBZGQgQ3JlYXRlS2V5RXggYW5kIERlbGV0ZUtleUV4LCBhcyB3ZWxsIGFzIGZpeCBhIGJ1ZyBpbgorICB0aGUgcmV0dXJuIHZhbHVlIG9mIFF1ZXJ5UmVmbGVjdGlvbktleS4KKworLSBJc3N1ZSAjNzU2NzogUHlDdXJzZXNfc2V0dXB0ZXJtOiBEb24ndCBjYWxsIGBgc2V0dXB0ZXJtYGAgdHdpY2UuCisKK0J1aWxkCistLS0tLQorCistIFVzZSBPcGVuU1NMIDEuMC4wYSBvbiBXaW5kb3dzLgorCistIElzc3VlICM5MjgwOiBNYWtlIHNoYXJlZGluc3RhbGwgZGVwZW5kIG9uIHNoYXJlZG1vZHMuCisKKy0gSXNzdWUgIzkxODk6IE1ha2UgYSB1c2VyLXNwZWNpZmllZCBDRkxBR1MsIENQUEZMQUdTLCBvciBMREZMQUdTIHNldHRpbmcKKyAgb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyZSBhbmQgbWFrZWZpbGUgZGVmYXVsdHMsIHdpdGhvdXQgZGVsZXRpbmcgb3B0aW9ucyB0aGUKKyAgdXNlciBkaWRuJ3QgaW50ZW5kIHRvIG92ZXJyaWRlLiAgRGV2ZWxvcGVycyBzaG91bGQgbm8gbG9uZ2VyIG5lZWQgdG8gc3BlY2lmeQorICBPUFQgb3IgRVhUUkFfQ0ZMQUdTLCBhbHRob3VnaCB0aG9zZSB2YXJpYWJsZXMgYXJlIHN0aWxsIHByZXNlbnQgZm9yCisgIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzg4NTQ6IEZpeCBmaW5kaW5nIFZpc3VhbCBTdHVkaW8gMjAwOCBvbiBXaW5kb3dzIHg2NC4KKworLSBJc3N1ZSAjMTc1OTE2OSwgIzg4NjQ6IERyb3AgX1hPUEVOX1NPVVJDRSBvbiBTb2xhcmlzLCBkZWZpbmUgaXQgZm9yCisgIG11bHRpcHJvY2Vzc2luZyBvbmx5LgorCistIElzc3VlICM4NjI1OiBUdXJuIG9mZiBvcHRpbWl6YXRpb24gaW4gLS13aXRoLXB5ZGVidWcgYnVpbGRzIHdpdGggZ2NjLgorICAoT3B0aW1pemF0aW9uIHdhcyB1bmludGVudGlvbmFsbHkgdHVybmVkIG9uIGluIGdjYyAtLXdpdGgtcHlkZWJ1ZyBidWlsZHMgYXMgYQorICByZXN1bHQgb2YgdGhlIGlzc3VlICMxNjI4NDg0IGZpeCwgY29tYmluZWQgd2l0aCBhdXRvY29uZidzIHN0cmFuZ2UgY2hvaWNlIG9mCisgIGRlZmF1bHQgQ0ZMQUdTIHByb2R1Y2VkIGJ5IEFDX1BST0dfQ0MgZm9yIGdjYy4pCisKKy0gSXNzdWUgIzM2NDY6IEl0IGlzIG5vdyBlYXNpbHkgcG9zc2libGUgdG8gaW5zdGFsbCBhIFB5dGhvbiBmcmFtZXdvcmsgaW50byB5b3VyCisgIGhvbWUgZGlyZWN0b3J5IG9uIE1hY09TWCwgc2VlIE1hYy9SRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKy0gSXNzdWUgIzM5Mjg6IG9zLm1rbm9kKCkgbm93IGF2YWlsYWJsZSBpbiBTb2xhcmlzLCBhbHNvLgorCistIElzc3VlICMzMzI2OiBCdWlsZCBQeXRob24gd2l0aG91dCAtZm5vLXN0cmljdC1hbGlhc2luZyB3aGVuIHRoZSBnY2MgZG9lcyBub3QKKyAgZ2l2ZSBmYWxzZSB3YXJuaW5ncy4KKworLSBJc3N1ZSAjMTYyODQ4NDogVGhlIE1ha2VmaWxlIGRvZXNuJ3QgaWdub3JlIHRoZSBDRkxBR1MgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgYW55bW9yZS4gIEl0IGFsc28gZm9yd2FyZHMgdGhlIExERkxBR1Mgc2V0dGluZ3MgdG8gdGhlIGxpbmtlciB3aGVuIGJ1aWxkaW5nIGEKKyAgc2hhcmVkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzY3MTY6IFF1b3RlIC14IGFyZ3VtZW50cyBvZiBjb21waWxlYWxsIGluIE1TSSBpbnN0YWxsZXIuICBFeGNsdWRlIDJ0bzMKKyAgdGVzdHMgZnJvbSBjb21waWxlYWxsLgorCistIElzc3VlICMzOTIwLCAjNzkwMzogRGVmaW5lIF9CU0RfU09VUkNFIG9uIE9wZW5CU0QgNC40IHRocm91Z2ggNC45LgorCistIElzc3VlICM3NjMyOiBXaGVuIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUiBpcyBkZWZpbmVkLCBkaXNhYmxlIHRoZSBwcml2YXRlCisgIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBpbiBkdG9hLmMgYW5kIHVzZSBQeU1lbV9NYWxsb2MgYW5kIFB5TWVtX0ZyZWUKKyAgaW5zdGVhZC4gIEFsc28gZGlzYWJsZSBjYWNoaW5nIG9mIHBvd2VycyBvZiA1LgorCistIElzc3VlICM2NDkxOiBBbGxvdyAtLXdpdGgtZGJtbGlib3JkZXIgdG8gc3BlY2lmeSB0aGF0IG5vIGRibXMgd2lsbCBiZSBidWlsdC4KKworLSBJc3N1ZSAjNjk0MzogVXNlIHBrZy1jb25maWcgdG8gZmluZCB0aGUgbGliZmZpIGhlYWRlcnMgd2hlbiB0aGUKKyAgLS13aXRoLXN5c3RlbS1mZmkgZmxhZyBpcyB1c2VkLgorCistIElzc3VlICM3NjA5OiBBZGQgYSAtLXdpdGgtc3lzdGVtLWV4cGF0IG9wdGlvbiB0aGF0IGNhdXNlcyB0aGUgc3lzdGVtJ3MgZXhwYXQKKyAgbGlicmFyeSB0byBiZSB1c2VkIGZvciB0aGUgcHlleHBhdCBtb2R1bGUgaW5zdGVhZCBvZiB0aGUgb25lIGluY2x1ZGVkIHdpdGgKKyAgUHl0aG9uLgorCistIElzc3VlICM3NTg5OiBPbmx5IGJ1aWxkIHRoZSBuaXMgbW9kdWxlIHdoZW4gdGhlIGNvcnJlY3QgaGVhZGVyIGZpbGVzIGFyZQorICBmb3VuZC4KKworLSBTd2l0Y2ggdG8gT3BlblNTTCAwLjkuOGwgYW5kIHNxbGl0ZSAzLjYuMjEgb24gV2luZG93cy4KKworLSBJc3N1ZSAjNTc5MjogRXh0ZW5kIHRoZSBzaG9ydCBmbG9hdCByZXByIHN1cHBvcnQgdG8geDg2IHN5c3RlbXMgdXNpbmcKKyAgaWNjIG9yIHN1bmNjLgorCistIElzc3VlICM2NjAzOiBDaGFuZ2UgUkVBRF9USU1FU1RBTVAgbWFjcm8gaW4gY2V2YWwuYyBzbyB0aGF0IGl0IGNvbXBpbGVzCisgIGNvcnJlY3RseSB1bmRlciBnY2Mgb24geDg2LTY0LiAgVGhpcyBmaXhlcyBhIHJlcG9ydGVkIHByb2JsZW0gd2l0aCB0aGUKKyAgLS13aXRoLXRzYyBidWlsZCBvbiB4ODYtNjQuCisKKy0gSXNzdWUgIzY4MDI6IEZpeCBidWlsZCBpc3N1ZXMgb24gTWFjT1NYIDEwLjYuCisKKy0gSXNzdWUgIzYyNDQ6IEFsbG93IGRldGVjdF90a2ludGVyIHRvIGxvb2sgZm9yIFRjbC9UayA4LjYuCisKKy0gSXNzdWUgIzQ2MDE6ICdtYWtlIGluc3RhbGwnIGRpZCBub3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyBvbgorICBkaXJlY3Rvcmllcy4KKworLSBJc3N1ZSAjNTM5MDogQWRkIHVuaW5zdGFsbCBpY29uIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgZmlsZSBleHRlbnNpb25zIGFyZQorICBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzc1NDE6IFdoZW4gdXNpbmcgYGBweXRob24tY29uZmlnYGAgd2l0aCBhIGZyYW1ld29yayBpbnN0YWxsIHRoZQorICBjb21waWxlciBtaWdodCB1c2UgdGhlIHdyb25nIGxpYnJhcnkuCisKKy0gcHl0aG9uLWNvbmZpZyBub3cgc3VwcG9ydHMgbXVsdGlwbGUgb3B0aW9ucyBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUuCisKKy0gSXNzdWUgIzg1MDk6IEZpeCBxdW90aW5nIGluIGhlbHAgc3RyaW5ncyBhbmQgY29kZSBzbmlwcGV0cyBpbiBjb25maWd1cmUuaW4uCisKKy0gSXNzdWUgIzg1MTA6IFVwZGF0ZSB0byBhdXRvY29uZjIuNjUuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjOTgxNzogQWRkIGV4cGF0IENPUFlJTkcgZmlsZTsgYWRkIGV4cGF0LCBsaWJmZmkgYW5kIGV4cGF0IGxpY2Vuc2VzCisgIHRvIERvYy9saWNlbnNlLnJzdC4KKworLSBJc3N1ZSAjOTUyNDogRG9jdW1lbnQgdGhhdCB0d28gQ1RSTCogc2lnbmFscyBhcmUgbWVhbnQgZm9yIHVzZSBvbmx5CisgIHdpdGggb3Mua2lsbC4KKworLSBJc3N1ZSAjOTI1NTogRG9jdW1lbnQgdGhhdCB0aGUgJ3Rlc3QnIHBhY2thZ2UgaXMgbWVhbnQgZm9yIGludGVybmFsIFB5dGhvbiB1c2UKKyAgb25seS4KKworLSBBIHNtYWxsIFdTR0kgc2VydmVyIHdhcyBhZGRlZCBhcyBUb29scy9zY3JpcHRzL3NlcnZlLnB5LCBhbmQgaXMgdXNlZCB0bworICBpbXBsZW1lbnQgYSBsb2NhbCBkb2N1bWVudGF0aW9uIHNlcnZlciB2aWEgJ21ha2Ugc2VydmUnIGluIHRoZSBkb2MgZGlyZWN0b3J5LgorCistIFVwZGF0aW5nIGBVc2luZyBQeXRob25gIGRvY3VtZW50YXRpb24gdG8gaW5jbHVkZSBkZXNjcmlwdGlvbiBvZiBDUHl0aG9uJ3MgLUoKKyAgYW5kIC1YIG9wdGlvbnMuCisKKy0gRG9jdW1lbnQgdGhhdCBpbXBvcnRpbmcgYSBtb2R1bGUgdGhhdCBoYXMgTm9uZSBpbiBzeXMubW9kdWxlcyB0cmlnZ2VycyBhbgorICBJbXBvcnRFcnJvci4KKworLSBJc3N1ZSAjNjU1NjogRml4ZWQgdGhlIERpc3R1dGlscyBjb25maWd1cmF0aW9uIGZpbGVzIGxvY2F0aW9uIGV4cGxhbmF0aW9uIGZvcgorICBXaW5kb3dzLgorCistIFVwZGF0ZSBweXRob24gbWFudWFsIHBhZ2UgKG9wdGlvbnMgLUIsIC1PMCwgLXMsIGVudmlyb25tZW50IHZhcmlhYmxlcworICBQWVRIT05ET05UV1JJVEVCWVRFQ09ERSwgUFlUSE9OTk9VU0VSU0lURSkuCisKKy0gSXNzdWUgIzg5MDk6IEFkZGVkIHRoZSBzaXplIG9mIHRoZSBiaXRtYXAgdXNlZCBpbiB0aGUgaW5zdGFsbGVyIGNyZWF0ZWQgYnkKKyAgZGlzdHV0aWxzJyBiZGlzdF93aW5pbnN0LiBQYXRjaCBieSBBbmF0b2x5IFRlY2h0b25pay4KKwogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzc5MjQ6IEZpeCBhbiBpbnRlcm1pdHRlbnQgJ1hYWCB1bmRldGVjdGVkIGVycm9yJyBmYWlsdXJlIGluCi0gIHRlc3RfY2FwaSAob25seSBzZWVuIHNvIGZhciBvbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGN1cnNlcyBtb2R1bGUKLSAgd2Fzbid0IGJ1aWx0KSwgZHVlIHRvIGFuIHVuY2xlYXJlZCBleGNlcHRpb24uCistIElzc3VlICM5MjUxOiB0ZXN0X3RocmVhZGVkX2ltcG9ydCBkaWRuJ3QgZmFpbCB3aGVuIHJ1biB0aHJvdWdoIHJlZ3J0ZXN0IGlmIHRoZQorICBpbXBvcnQgbG9jayB3YXMgZGlzYWJsZWQuCiAKLS0gaXNzdWUgIzc3Mjg6IHRlc3RfdGltZW91dCB3YXMgY2hhbmdlZCB0byB1c2UgdGVzdC5zdXBwb3J0LmJpbmRfcG9ydAotICBpbnN0ZWFkIG9mIGEgaGFyZCBjb2RlZCBwb3J0LgorLSBJc3N1ZSAjODYwNTogU2tpcCB0ZXN0X2dkYiBpZiBQeXRob24gaXMgY29tcGlsZWQgd2l0aCBvcHRpbWl6YXRpb25zLgogCi0tIElzc3VlICM3Mzc2OiBpbnN0ZWFkIG9mIHJ1bm5pbmcgYSBzZWxmLXRlc3QgKHdoaWNoIHdhcyBmYWlsaW5nKSB3aGVuIGNhbGxlZAorLSBJc3N1ZSAjNzQ0OTogU2tpcCB0ZXN0X3NvY2tldHNlcnZlciBpZiB0aHJlYWRpbmcgc3VwcG9ydCBpcyBkaXNhYmxlZC4KKworLSBJc3N1ZSAjODY3MjogQWRkIGEgemxpYiB0ZXN0IGVuc3VyaW5nIHRoYXQgYW4gaW5jb21wbGV0ZSBzdHJlYW0gY2FuIGJlIGhhbmRsZWQKKyAgYnkgYSBkZWNvbXByZXNzb3Igb2JqZWN0IHdpdGhvdXQgZXJyb3JzIChpdCByZXR1cm5zIGluY29tcGxldGUgdW5jb21wcmVzc2VkCisgIGRhdGEpLgorCistIElzc3VlICM4NTMzOiByZWdydGVzdCB1c2VzIGJhY2tzbGFzaHJlcGxhY2UgZXJyb3IgaGFuZGxlciBmb3Igc3Rkb3V0IHRvIGF2b2lkCisgIFVuaWNvZGVFbmNvZGVFcnJvciAod3JpdGUgbm9uLUFTQ0lJIGNoYXJhY3RlciB0byBzdGRvdXQgdXNpbmcgQVNDSUkgZW5jb2RpbmcpLgorCistIElzc3VlICM4NTc2OiBSZW1vdmUgdXNlIG9mIGZpbmRfdW51c2VkX3BvcnQoKSBpbiB0ZXN0X3NtdHBsaWIgYW5kCisgIHRlc3RfbXVsdGlwcm9jZXNzaW5nLiAgUGF0Y2ggYnkgUGF1bCBNb29yZS4KKworLSBJc3N1ZSAjNzQ0OTogRml4IG1hbnkgdGVzdHMgdG8gc3VwcG9ydCBQeXRob24gY29tcGlsZWQgd2l0aG91dCB0aHJlYWQKKyAgc3VwcG9ydC4gUGF0Y2hlcyB3cml0dGVuIGJ5IEplcnJ5IFNldXR0ZXIuCisKKy0gSXNzdWUgIzgxMDg6IHRlc3RfZnRwbGliJ3Mgbm9uLWJsb2NraW5nIFNTTCBzZXJ2ZXIgbm93IGhhcyBwcm9wZXIgaGFuZGxpbmcgb2YKKyAgU1NMIHNodXRkb3ducy4KKworLSBJc3N1ZXMgIzgyNzksICM4MzMwLCAjODQzNywgIzg0ODAsICM4NDk1OiBGaXggdGVzdF9nZGIgZmFpbHVyZXMsIHBhdGNoIHdyaXR0ZW4KKyAgYnkgRGF2ZSBNYWxjb2xtLgorCistIElzc3VlICMzODY0OiBTa2lwIHRocmVlIHRlc3Rfc2lnbmFsIHRlc3RzIG9uIGZyZWVic2Q2IGJlY2F1c2UgdGhleSBmYWlsIGlmIGFueQorICB0aHJlYWQgd2FzIHByZXZpb3VzbHkgc3RhcnRlZCwgbW9zdCBsaWtlbHkgZHVlIHRvIGEgcGxhdGZvcm0gYnVnLgorCistIElzc3VlICM4MTkzOiBGaXggdGVzdF96bGliIGZhaWx1cmUgd2l0aCB6bGliIDEuMi40LgorCistIElzc3VlICM4MjQ4OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGJvb2wgdHlwZS4gIFBhdGNoIGJ5IEdyZWdvcnkgTm9maS4KKworLSBJc3N1ZSAjODI2MzogTm93IHJlZ3J0ZXN0LnB5IHdpbGwgcmVwb3J0IGEgZmFpbHVyZSBpZiBpdCByZWNlaXZlcyBhCisgIEtleWJvYXJkSW50ZXJydXB0IChTSUdJTlQpLgorCistIElzc3VlICM4MTgwIGFuZCAjODIwNzogRml4IHRlc3RfcGVwMjc3IG9uIE9TIFggYW5kIGFkZCBtb3JlIHRlc3RzIGZvciBzcGVjaWFsCisgIFVuaWNvZGUgbm9ybWFsaXphdGlvbiBjYXNlcy4KKworLSBJc3N1ZSAjNzc4MzogdGVzdC5zdXBwb3J0Lm9wZW5fdXJscmVzb3VyY2UgaW52YWxpZGF0ZXMgdGhlIG91dGRhdGVkIGZpbGVzIGZyb20KKyAgdGhlIGxvY2FsIGNhY2hlLgorCistIElzc3VlICM3ODQ5OiBOb3cgdGhlIHV0aWxpdHkgYGBjaGVja193YXJuaW5nc2BgIHZlcmlmaWVzIGlmIHRoZSB3YXJuaW5ncyBhcmUKKyAgZWZmZWN0aXZlbHkgcmFpc2VkLgorCistIFRoZSBmb3VyIHBhdGggbW9kdWxlcyAoZ2VuZXJpY3BhdGgsIG1hY3BhdGgsIG50cGF0aCwgcG9zaXhwYXRoKSBzaGFyZSBhIGNvbW1vbgorICBUZXN0Q2FzZSBmb3Igc29tZSB0ZXN0czogdGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LgorCistIFByaW50IHBsYXRmb3JtIGluZm9ybWF0aW9uIHdoZW4gcnVubmluZyB0aGUgd2hvbGUgdGVzdCBzdWl0ZSwgb3IgdXNpbmcgdGhlCisgIC0tdmVyYm9zZSBmbGFnLgorCistIElzc3VlICM3Njc2NzU6IGVuYWJsZSB0ZXN0X3BlcDI3NyBvbiBQT1NJWCBwbGF0Zm9ybXMgd2l0aCBVbmljb2RlLWZyaWVuZGx5CisgIGZpbGVzeXN0ZW0gZW5jb2RpbmcuCisKKy0gSXNzdWUgIzYyOTI6IGZvciB0aGUgbW9tZW50IGF0IGxlYXN0LCB0aGUgdGVzdCBzdWl0ZSBydW5zIGNsZWFubHkgaWYgcHl0aG9uIGlzCisgIHJ1biB3aXRoIHRoZSAtT08gZmxhZy4gIFRlc3RzIHJlcXVpcmluZyBkb2NzdHJpbmdzIGFyZSBza2lwcGVkLgorCistIElzc3VlICM3NzEyOiB0ZXN0LnN1cHBvcnQgZ2FpbmVkIGEgbmV3IGB0ZW1wX2N3ZGAgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGlzIG5vdworICBhbHNvIHVzZWQgYnkgcmVncnRlc3QgdG8gcnVuIGFsbCB0aGUgdGVzdHMgaW4gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LiAgVGhlCisgIG9yaWdpbmFsIENXRCBpcyBzYXZlZCBpbiBgc3VwcG9ydC5TQVZFRENXRGAuICBUaGFua3MgdG8gRmxvcmVudCBYaWNsdW5hIHdobworICBoZWxwZWQgd2l0aCB0aGUgcGF0Y2guCisKKy0gSXNzdWUgIzc5MjQ6IEZpeCBhbiBpbnRlcm1pdHRlbnQgJ1hYWCB1bmRldGVjdGVkIGVycm9yJyBmYWlsdXJlIGluIHRlc3RfY2FwaQorICAob25seSBzZWVuIHNvIGZhciBvbiBwbGF0Zm9ybXMgd2hlcmUgdGhlIGN1cnNlcyBtb2R1bGUgd2Fzbid0IGJ1aWx0KSwgZHVlIHRvCisgIGFuIHVuY2xlYXJlZCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzc3Mjg6IHRlc3RfdGltZW91dCB3YXMgY2hhbmdlZCB0byB1c2Ugc3VwcG9ydC5iaW5kX3BvcnQgaW5zdGVhZCBvZiBhCisgIGhhcmQgY29kZWQgcG9ydC4KKworLSBJc3N1ZSAjNzM3NjogSW5zdGVhZCBvZiBydW5uaW5nIGEgc2VsZi10ZXN0ICh3aGljaCB3YXMgZmFpbGluZykgd2hlbiBjYWxsZWQKICAgd2l0aCBubyBhcmd1bWVudHMsIGRvY3Rlc3QucHkgbm93IGdpdmVzIGEgdXNhZ2UgbWVzc2FnZS4KIAorLSBJc3N1ZSAjNzM5NjogZml4IHJlZ3J0ZXN0IC1zLCB3aGljaCB3YXMgYnJva2VuIGJ5IHRoZSAtaiBlbmhhbmNlbWVudC4KKwogLSBJc3N1ZSAjNzQ5ODogdGVzdF9tdWx0aXByb2Nlc3Npbmcgbm93IHVzZXMgdGVzdC5zdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQKICAgaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBwb3J0IG51bWJlciBpbiB0ZXN0X3JhcGlkX3Jlc3RhcnQuCiAKLS0gSXNzdWUgIzc0MzE6IHVzZSBURVNURk4gaW4gdGVzdF9saW5lY2FjaGUgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY3JlYXRlIGEKLSAgZmlsZSBpbiB0aGUgTGliL3Rlc3QgZGlyZWN0b3J5LCB3aGljaCBtaWdodCBiZSByZWFkLW9ubHkgZm9yIHRoZQotICB1c2VyIHJ1bm5pbmcgdGhlIHRlc3RzLgorLSBJc3N1ZSAjNzQzMTogVXNlIFRFU1RGTiBpbiB0ZXN0X2xpbmVjYWNoZSBpbnN0ZWFkIG9mIHRyeWluZyB0byBjcmVhdGUgYSBmaWxlCisgIGluIHRoZSBMaWIvdGVzdCBkaXJlY3RvcnksIHdoaWNoIG1pZ2h0IGJlIHJlYWQtb25seSBmb3IgdGhlIHVzZXIgcnVubmluZyB0aGUKKyAgdGVzdHMuCiAKLS0gSXNzdWUgIzczMjQ6IGFkZCBhIHNhbml0eSBjaGVjayB0byByZWdydGVzdCBhcmd1bWVudCBwYXJzaW5nIHRvCi0gIGNhdGNoIHRoZSBjYXNlIG9mIGFuIG9wdGlvbiB3aXRoIG5vIGhhbmRsZXIuCistIElzc3VlICM3MzI0OiBBZGQgYSBzYW5pdHkgY2hlY2sgdG8gcmVncnRlc3QgYXJndW1lbnQgcGFyc2luZyB0byBjYXRjaCB0aGUgY2FzZQorICBvZiBhbiBvcHRpb24gd2l0aCBubyBoYW5kbGVyLgogCi0tIElzc3VlICM2NTUxOiB0ZXN0X3ppcGltcG9ydCBjb3VsZCBpbXBvcnQgYW5kIHRoZW4gZGVzdHJveSBzb21lIG1vZHVsZXMgb2YKLSAgdGhlIGVuY29kaW5ncyBwYWNrYWdlLCB3aGljaCB3b3VsZCBtYWtlIG90aGVyIHRlc3RzIGZhaWwgZnVydGhlciBkb3duCi0gIHRoZSByb2FkIGJlY2F1c2UgdGhlIGludGVybmFsbHkgY2FjaGVkIGVuY29kZXJzIGFuZCBkZWNvZGVycyB3b3VsZCBwb2ludAotICB0byBlbXB0eSBnbG9iYWwgdmFyaWFibGVzLgorLSBJc3N1ZSAjNzMxMjogQWRkIGEgLUYgZmxhZyB0byBydW4gdGhlIHNlbGVjdGVkIHRlc3RzIGluIGEgbG9vcCB1bnRpbCBhIHRlc3QKKyAgZmFpbHMuICBDYW4gYmUgY29tYmluZWQgd2l0aCAtai4KKworLSBJc3N1ZSAjNjU1MTogdGVzdF96aXBpbXBvcnQgY291bGQgaW1wb3J0IGFuZCB0aGVuIGRlc3Ryb3kgc29tZSBtb2R1bGVzIG9mIHRoZQorICBlbmNvZGluZ3MgcGFja2FnZSwgd2hpY2ggd291bGQgbWFrZSBvdGhlciB0ZXN0cyBmYWlsIGZ1cnRoZXIgZG93biB0aGUgcm9hZAorICBiZWNhdXNlIHRoZSBpbnRlcm5hbGx5IGNhY2hlZCBlbmNvZGVycyBhbmQgZGVjb2RlcnMgd291bGQgcG9pbnQgdG8gZW1wdHkKKyAgZ2xvYmFsIHZhcmlhYmxlcy4KIAogLSBJc3N1ZSAjNzI5NTogRG8gbm90IHVzZSBhIGhhcmRjb2RlZCBmaWxlIG5hbWUgaW4gdGVzdF90YXJmaWxlLgogCkBAIC0xNjkwLDE5NCArNDI3MSwzOCBAQAogICBzdXJlIHRoYXQgc29tZSByZWZlcmVuY2VkIG9iamVjdHMgYWN0dWFsbHkgd2VyZSBjcmVhdGVkIGluIHRoZSBibG9jayBiZWZvcmUKICAgY2FsbGluZyBtZXRob2RzIG9uIHRoZSBvYmplY3QuCiAKKy0gSXNzdWUgIzcyMjI6IE1ha2UgdGhyZWFkICJyZWFwaW5nIiBtb3JlIHJlbGlhYmxlIHNvIHRoYXQgcmVmZXJlbmNlCisgIGxlYWstY2hhc2luZyB0ZXN0IHJ1bnMgZ2l2ZSBzZW5zaWJsZSByZXN1bHRzLiBUaGUgcHJldmlvdXMgbWV0aG9kIG9mIHJlYXBpbmcKKyAgdGhyZWFkcyBjb3VsZCByZXR1cm4gc3VjY2Vzc2Z1bGx5IHdoaWxlIHNvbWUgVGhyZWFkIG9iamVjdHMgd2VyZSBzdGlsbAorICByZWZlcmVuY2VkLiBUaGlzIGFsc28gaW50cm9kdWNlcyBhIG5ldyBwcml2YXRlIGZ1bmN0aW9uOgorICA6ZnVuYzpgX3RocmVhZC5fY291bnQoKWAuCisKKy0gSXNzdWUgIzcxNTE6IEZpeGVkIHJlZ3J0ZXN0IC1qIHNvIHRoYXQgb3V0cHV0IHRvIHN0ZGVyciBmcm9tIGEgdGVzdCBubyBsb25nZXIKKyAgcnVucyB0aGUgcmlzayBvZiBjYXVzaW5nIHRoZSB3b3JrZXIgdGhyZWFkIHRvIGZhaWwuCisKIC0gSXNzdWUgIzcwNTU6IHRlc3RfX19hbGxfXyBub3cgZ3JlZWRpbHkgZGV0ZWN0cyBhbGwgbW9kdWxlcyB3aGljaCBoYXZlIGFuCiAgIF9fYWxsX18gYXR0cmlidXRlLCByYXRoZXIgdGhhbiB1c2luZyBhIGhhcmRjb2RlZCBhbmQgaW5jb21wbGV0ZSBsaXN0LgogCi0tIElzc3VlICM3MDU4OiBBZGRlZCBzYXZlL3Jlc3RvcmUgZm9yIGFyZ3YgYW5kIG9zLmVudmlyb24gdG8gcnVudGVzdF9pbm5lcgotICBpbiByZWdydGVzdCwgd2l0aCB3YXJuaW5ncyBpZiB0aGUgY2FsbGVkIHRlc3QgbW9kaWZpZXMgdGhlbS4KKy0gSXNzdWUgIzcwNTg6IEFkZGVkIHNhdmUvcmVzdG9yZSBmb3IgdGhpbmdzIGxpa2Ugc3lzLmFyZ3YgYW5kIGN3ZCB0bworICBydW50ZXN0X2lubmVyIGluIHJlZ3J0ZXN0LCB3aXRoIHdhcm5pbmdzIGlmIHRoZSBjYWxsZWQgdGVzdCBtb2RpZmllcyB0aGVtLCBhbmQKKyAgYSBuZXcgc2VjdGlvbiBpbiB0aGUgc3VtbWFyeSByZXBvcnQgYXQgdGhlIGVuZC4KIAogLSBJc3N1ZSAjNzA0MjogRml4IHRlc3Rfc2lnbmFsICh0ZXN0X2l0aW1lcl92aXJ0dWFsKSBmYWlsdXJlIG9uIE9TIFggMTAuNi4KIAotQy1BUEkKLS0tLS0tCistIEZpeGVkIHRlc3RzIGluIGltcG9ydGxpYi50ZXN0LnNvdXJjZS50ZXN0X2FiY19sb2FkZXIgdGhhdCB3ZXJlIG1hc2tpbmcgdGhlCisgIHByb3BlciBleGNlcHRpb25zIHRoYXQgc2hvdWxkIGJlIHJhaXNlZCBmb3IgbWlzc2luZyBvciBpbXByb3BlciBjb2RlIG9iamVjdAorICBieXRlY29kZS4KIAotLSBNYWtlIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nIHJldHVybiBub3QgZXF1YWwgaWYgdGhlIFB5dGhvbiBzdHJpbmcKLSAgaGFzICdcMCcgYXQgdGhlIGVuZC4KKy0gUmVtb3ZlZCBpbXBvcnRsaWIncyBjdXN0b20gdGVzdCBkaXNjb3ZlcnkgY29kZSBhbmQgc3dpdGNoZWQgdG8KKyAgdW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcigpLgogCi0tIElzc3VlICM3NDE0OiAnQycgY29kZSB3YXNuJ3QgYmVpbmcgc2tpcHBlZCBwcm9wZXJseSAoZm9yIGtleXdvcmQgYXJndW1lbnRzKQotICBpbiBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMuCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KIAotQnVpbGQKLS0tLS0tCistIElzc3VlICM1NDY0LCAjODk3NDogSW1wbGVtZW50IHBsdXJhbCBmb3JtcyBpbiBtc2dmbXQucHkuCiAKLS0gSXNzdWUgIzkyODA6IE1ha2Ugc2hhcmVkaW5zdGFsbCBkZXBlbmQgb24gc2hhcmVkbW9kcy4KLQotLSBJc3N1ZSAjODg1NDogRml4IGZpbmRpbmcgVmlzdWFsIFN0dWRpbyAyMDA4IG9uIFdpbmRvd3MgeDY0LgotCi0tIElzc3VlICMzOTIwLCAjNzkwMzogRGVmaW5lIF9CU0RfU09VUkNFIG9uIE9wZW5CU0QgNC40IHRocm91Z2ggNC45LgotCi0tIElzc3VlICM3NjMyOiBXaGVuIFB5X1VTSU5HX01FTU9SWV9ERUJVR0dFUiBpcyBkZWZpbmVkLCBkaXNhYmxlIHRoZQotICBwcml2YXRlIG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBpbiBkdG9hLmMgYW5kIHVzZSBQeU1lbV9NYWxsb2MgYW5kCi0gIFB5TWVtX0ZyZWUgaW5zdGVhZC4gIEFsc28gZGlzYWJsZSBjYWNoaW5nIG9mIHBvd2VycyBvZiA1LgotCi0tIFN3aXRjaCB0byBPcGVuU1NMIDAuOS44bCBvbiBXaW5kb3dzLgotCi0tIElzc3VlICM2NjAzOiBDaGFuZ2UgUkVBRF9USU1FU1RBTVAgbWFjcm8gaW4gY2V2YWwuYyBzbyB0aGF0IGl0Ci0gIGNvbXBpbGVzIGNvcnJlY3RseSB1bmRlciBnY2Mgb24geDg2LTY0LiAgVGhpcyBmaXhlcyBhIHJlcG9ydGVkCi0gIHByb2JsZW0gd2l0aCB0aGUgLS13aXRoLXRzYyBidWlsZCBvbiB4ODYtNjQuCi0KLS0gSXNzdWUgIzY4MDI6IEZpeCBidWlsZCBpc3N1ZXMgb24gTWFjT1NYIDEwLjYKLQotLSBJc3N1ZSAjNjgwMSA6IHN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSBhbHNvIGFjY2VwdHMgfC4KLSAgVGhhbmtzIHRvIENhcmwgQ2hlbmV0LgotCi0tIElzc3VlICM3NTQxOiB3aGVuIHVzaW5nIGBgcHl0aG9uLWNvbmZpZ2BgIHdpdGggYSBmcmFtZXdvcmsgaW5zdGFsbCB0aGUKLSAgY29tcGlsZXIgbWlnaHQgdXNlIHRoZSB3cm9uZyBsaWJyYXJ5LgotCi0tIElzc3VlICM2NDkxOiBBbGxvdyAtLXdpdGgtZGJtbGlib3JkZXIgdG8gc3BlY2lmeSB0aGF0IG5vIGRibXMgd2lsbCBiZSBidWlsdC4KLQotLSBJc3N1ZSAjNzU4OTogT25seSBidWlsZCB0aGUgbmlzIG1vZHVsZSB3aGVuIHRoZSBjb3JyZWN0IGhlYWRlciBmaWxlcyBhcmUKLSAgZm91bmQuCi0KLURvY3VtZW50YXRpb24KLS0tLS0tLS0tLS0tLS0KLQotLSBVcGRhdGluZyBgVXNpbmcgUHl0aG9uYCBkb2N1bWVudGF0aW9uIHRvIGluY2x1ZGUgZGVzY3JpcHRpb24gb2YgQ1B5dGhvbidzCi0gIC1KIGFuZCAtWCBvcHRpb25zLgotCi0tIElzc3VlICM2NTU2OiBGaXhlZCB0aGUgRGlzdHV0aWxzIGNvbmZpZ3VyYXRpb24gZmlsZXMgbG9jYXRpb24gZXhwbGFuYXRpb24KLSAgZm9yIFdpbmRvd3MuCi0KLS0gVXBkYXRlIHB5dGhvbiBtYW51YWwgcGFnZSAob3B0aW9ucyAtQiwgLU8wLCAtcywgZW52aXJvbm1lbnQgdmFyaWFibGVzCi0gIFBZVEhPTkRPTlRXUklURUJZVEVDT0RFLCBQWVRIT05OT1VTRVJTSVRFKS4KLQotLSBJc3N1ZSAjODkwOTogQWRkZWQgdGhlIHNpemUgb2YgdGhlIGJpdG1hcCB1c2VkIGluIHRoZSBpbnN0YWxsZXIgY3JlYXRlZCBieQotICBkaXN0dXRpbHMnIGJkaXN0X3dpbmluc3QuIFBhdGNoIGJ5IEFuYXRvbHkgVGVjaHRvbmlrLgotCi0KLVdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMS4xPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDIwMDktMDgtMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICM2NzA3OiBkaXIoKSBvbiBhbiB1bmluaXRpYWxpemVkIG1vZHVsZSBjYXVzZWQgYSBjcmFzaC4KLQotLSBJc3N1ZSAjNjU0MDogRml4ZWQgY3Jhc2ggZm9yIGJ5dGVhcnJheS50cmFuc2xhdGUoKSB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjNjU3Mzogc2V0LnVuaW9uKCkgc3RvcHBlZCBwcm9jZXNzaW5nIGlucHV0cyBpZiBhbiBpbnN0YW5jZSBvZiBzZWxmCi0gIG9jY3VycmVkIGluIHRoZSBhcmd1bWVudCBjaGFpbi4KLQotLSBJc3N1ZSAjNjA3MDogT24gcG9zaXggcGxhdGZvcm1zIGltcG9ydCBubyBsb25nZXIgY29waWVzIHRoZSBleGVjdXRlIGJpdAotICBmcm9tIHRoZSAucHkgZmlsZSB0byB0aGUgLnB5YyBmaWxlIGlmIGl0IGlzIHNldC4KLQotLSBJc3N1ZSAjNjQyODogU2luY2UgUHl0aG9uIDMuMCwgdGhlIF9fYm9vbF9fIG1ldGhvZCBtdXN0IHJldHVybiBhIGJvb2wKLSAgb2JqZWN0LCBhbmQgbm90IGFuIGludC4gIEZpeCB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBtZXNzYWdlLCBhbmQgdGhlCi0gIGRvY3VtZW50YXRpb24uCi0KLS0gSXNzdWUgIzYzNDc6IEluY2x1ZGUgaW50dHlwZXMuaCBhcyB3ZWxsIGFzIHN0ZGludC5oIGluIHB5cG9ydC5oLgotICBUaGlzIGZpeGVzIGEgYnVpbGQgZmFpbHVyZSBvbiBIUC1VWDogaW50MzJfdCBhbmQgdWludDMyX3QgYXJlCi0gIGRlZmluZWQgaW4gaW50dHlwZXMuaCBpbnN0ZWFkIG9mIHN0ZGludC5oIG9uIHRoYXQgcGxhdGZvcm0uCi0KLS0gSXNzdWUgIzYzNzM6IEZpeGVkIGEgU3lzdGVtRXJyb3Igd2hlbiBlbmNvZGluZyB3aXRoIHRoZSBsYXRpbi0xIGNvZGVjIGFuZAotICB0aGUgJ3N1cnJvZ2F0ZWVzY2FwZScgZXJyb3IgaGFuZGxlciwgYSBzdHJpbmcgd2hpY2ggY29udGFpbnMgdW5wYWlyZWQKLSAgc3Vycm9nYXRlcy4KLQotQy1BUEkKLS0tLS0tCi0KLS0gSXNzdWUgIzY2MjQ6IHlBcmdfUGFyc2VUdXBsZSB3aXRoICJzIiBmb3JtYXQgd2hlbiBwYXJzaW5nIGFyZ3VtZW50IHdpdGgKLSAgTlVMOiBCb2d1cyBUeXBlRXJyb3IgZGV0YWlsIHN0cmluZy4KLQotLSBJc3N1ZSAjNjQwNTogUmVtb3ZlIGR1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9ucyBpbiBkZXNjcm9iamVjdC5oLgotCi0tIFRoZSBjb2RlIGZsYWdzIGZvciBvbGQgX19mdXR1cmVfXyBmZWF0dXJlcyBhcmUgbm93IGF2YWlsYWJsZSBhZ2Fpbi4KLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICM2MTA2OiB0ZWxuZXRsaWIuVGVsbmV0LnByb2Nlc3NfcmF3cSBkb2Vzbid0IGhhbmRsZSBkZWZhdWx0IFdJTEwvV09OVAotICBETy9ET05UIGNvcnJlY3RseS4KLQotLSBJc3N1ZSAjNjEyNjogRml4ZWQgcGRiIGNvbW1hbmQtbGluZSB1c2FnZS4KLQotLSBJc3N1ZSAjNjYyOTogRml4IGEgZGF0YSBjb3JydXB0aW9uIGlzc3VlIGluIHRoZSBuZXcgSS9PIGxpYnJhcnksIHdoaWNoIGNvdWxkCi0gIG9jY3VyIHdoZW4gd3JpdGluZyB0byBhIEJ1ZmZlcmVkUmFuZG9tIG9iamVjdCAoZS5nLiBhIGZpbGUgb3BlbmVkIGluICJyYisiIG9yCi0gICJ3YisiIG1vZGUpIGFmdGVyIGhhdmluZyBidWZmZXJlZCBhIGNlcnRhaW4gYW1vdW50IG9mIGRhdGEgZm9yIHJlYWRpbmcuIFRoaXMKLSAgYnVnIHdhcyBub3QgcHJlc2VudCBpbiB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24uCi0KLS0gSXNzdWUgIzY2MjI6IEZpeCAibG9jYWwgdmFyaWFibGUgJ3NlY3JldCcgcmVmZXJlbmNlZCBiZWZvcmUKLSAgYXNzaWdubWVudCIgYnVnIGluIFBPUDMuYXBvcC4KLQotLSBJc3N1ZSAjNjYzNzogZGVmYXVsdGRpY3QuY29weSgpIGRpZCBub3Qgd29yayB3aGVuIHRoZSBkZWZhdWx0IGZhY3RvcnkKLSAgd2FzIGxlZnQgdW5zcGVjaWZpZWQuICBBbHNvLCB0aGUgZXZhbC9yZXByIHJvdW5kLXRyaXAgd291bGQgZmFpbCB3aGVuCi0gIHRoZSBkZWZhdWx0X2ZhY3Rvcnkgd2FzIE5vbmUuCi0KLS0gSXNzdWUgIzI3MTU6IFJlbW92ZSByZW1uYW50cyBvZiBDYXJib24uRmlsZSBmcm9tIGJpbmhleCBtb2R1bGUuCi0KLS0gSXNzdWUgIzY1OTU6IFRoZSBEZWNpbWFsIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgYXJiaXRyYXJ5IFVuaWNvZGUKLWRlY2ltYWwgZGlnaXRzIGluIGlucHV0LCBhcyByZWNvbW1lbmRlZCBieSB0aGUgc3RhbmRhcmQuICBQcmV2aW91c2x5Ci1pdCB3YXMgcmVzdHJpY3RlZCB0byBhY2NlcHRpbmcgWzAtOV0uCi0KLS0gSXNzdWVzICM1MTU1LCAjNTMxMywgIzUzMzE6IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9ib290c3RyYXAgd2FzCi11bmNvbmRpdGlvbmFsbHkgY2FsbGluZyAib3MuY2xvc2Uoc3lzLnN0ZGluLmZpbGVubygpKSIgcmVzdWx0aW5nIGluIGZpbGUKLWRlc2NyaXB0b3IgZXJyb3JzCi0KLS0gSXNzdWUgIzE0MjQxNTI6IEZpeCBmb3IgaHR0cC5jbGllbnQsIHVybGxpYi5yZXF1ZXN0IHRvIHN1cHBvcnQgU1NMIHdoaWxlCi13b3JraW5nIHRocm91Z2ggcHJveHkuIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzdG9waGVyIExpLCBjaGFuZ2VzIG1hZGUgYnkKLVNlbnRoaWwgS3VtYXJhbgotCi0tIGltcG9ydGxpYi5hYmMuUHlMb2FkZXIgZGlkIG5vdCBpbmhlcml0IGZyb20gaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlciBsaWtlCi10aGUgZG9jdW1lbnRhdGlvbiBzYWlkIGl0IGRpZCBldmVuIHRob3VnaCB0aGUgY29kZSBpbiBQeUxvYWRlciByZWxpZWQgb24gdGhlCi1hYnN0cmFjdCBtZXRob2QgcmVxdWlyZWQgYnkgUmVzb3VyY2VMb2FkZXIuCi0KLS0gSXNzdWUgIzY0MzE6IE1ha2UgRnJhY3Rpb24gdHlwZSByZXR1cm4gTm90SW1wbGVtZW50ZWQgd2hlbiBpdCBkb2Vzbid0Ci1rbm93IGhvdyB0byBoYW5kbGUgYSBjb21wYXJpc29uIHdpdGhvdXQgbG9zcyBvZiBwcmVjaXNpb24uICBBbHNvIGFkZAotY29ycmVjdCBoYW5kbGluZyBvZiBpbmZpbml0aWVzIGFuZCBuYW5zIGZvciBjb21wYXJpc29ucyB3aXRoIGZsb2F0LgotCi0tIElzc3VlICM2NDE1OiBGaXhlZCB3YXJuaW5ncy53YXJuIHNlZ2ZhdWx0IG9uIGJhZCBmb3JtYXR0ZWQgc3RyaW5nLgotCi0tIElzc3VlICM2MzU4OiBUaGUgZXhpdCBzdGF0dXMgb2YgYSBjb21tYW5kIHN0YXJ0ZWQgd2l0aCBvcy5wb3BlbigpIHdhcwotcmVwb3J0ZWQgZGlmZmVyZW50bHkgdGhhbiBpdCBkaWQgd2l0aCBweXRob24gMi54LgotCi0tIElzc3VlICM2MzIzOiBUaGUgcGRiIGRlYnVnZ2VyIGRpZCBub3QgZXhpdCB3aGVuIHJ1bm5pbmcgYSBzY3JpcHQgd2l0aCBhCi1zeW50YXggZXJyb3IuCi0KLS0gSXNzdWUgIzMzOTI6IFRoZSBzdWJwcm9jZXNzIGNvbW11bmljYXRlKCkgbWV0aG9kIG5vIGxvbmdlciBmYWlscyBpbiBzZWxlY3QoKQotICB3aGVuIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGxhcmdlOyBjb21tdW5pY2F0ZSgpIG5vdyB1c2VzIHBvbGwoKSB3aGVuIHBvc3NpYmxlLgotCi0tIElzc3VlICM2MzY5OiBGaXggYW4gUkxFIGRlY29tcHJlc3Npb24gYnVnIGluIHRoZSBiaW5oZXggbW9kdWxlLgotCi0tIElzc3VlICM2MzQ0OiBGaXhlZCBhIGNyYXNoIG9mIG1tYXAucmVhZCgpIHdoZW4gcGFzc2VkIGEgbmVnYXRpdmUgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzQwMDU6IEZpeGVkIGEgY3Jhc2ggb2YgcHlkb2Mgd2hlbiB0aGVyZSB3YXMgYSB6aXAgZmlsZSBwcmVzZW50IGluCi0gIHN5cy5wYXRoLgotCi1FeHRlbnNpb24gTW9kdWxlcwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBGaXggYSBzZWdmYXVsdCBpbiBleHBhdC4KLQotLSBJc3N1ZSAjNDUwOTogYXJyYXkuYXJyYXkgb2JqZWN0cyBhcmUgbm8gbG9uZ2VyIG1vZGlmaWVkIGFmdGVyIGFuIG9wZXJhdGlvbgotICBmYWlsaW5nIGR1ZSB0byB0aGUgcmVzaXplIHJlc3RyaWN0aW9uIGluLXBsYWNlIHdoZW4gdGhlIG9iamVjdCBoYXMgZXhwb3J0ZWQKLSAgYnVmZmVycy4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzQ2MDE6ICdtYWtlIGluc3RhbGwnIGRpZCBub3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9ucyBvbgotZGlyZWN0b3JpZXMuCi0KLS0gSXNzdWUgIzUzOTA6IEFkZCB1bmluc3RhbGwgaWNvbiBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIGZpbGUKLWV4dGVuc2lvbnMgYXJlIGluc3RhbGxlZC4KLQotVGVzdAotLS0tLQotCi0tIEZpeCBhIHRlc3QgaW4gaW1wb3J0bGliLnRlc3Quc291cmNlLnRlc3RfYWJjX2xvYWRlciB0aGF0IHdhcyBpbmNvcnJlY3RseQotdGVzdGluZyB3aGVuIGEgLnB5YyBmaWxlIGxhY2tlZCBhbiBjb2RlIG9iamVjdCBieXRlY29kZS4KKy0gaW9iZW5jaCAoYSBmaWxlIEkvTyBiZW5jaG1hcmspIGFuZCBjY2JlbmNoIChhIGNvbmN1cnJlbmN5IGJlbmNobWFyaykgd2VyZQorICBhZGRlZCB0byB0aGUgYFRvb2xzL2AgZGlyZWN0b3J5LiAgVGhleSB3ZXJlIHByZXZpb3VzbHkgbGl2aW5nIGluIHRoZSBzYW5kYm94LgogCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMT8KQEAgLTE4ODksMjcgKzQzMTQsMjggQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIC0gSXNzdWUgIzYzMzQ6IEZpeCBidWcgaW4gcmFuZ2UgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciByYW5nZXMgd2l0aAotbGFyZ2UgYXJndW1lbnRzLgorICBsYXJnZSBhcmd1bWVudHMuCiAKIC0gSXNzdWUgIzYzMjk6IEZpeGVkIGl0ZXJhdGlvbiBmb3IgbWVtb3J5dmlldyBvYmplY3RzIChpdCB3YXMgYmVpbmcgYmxvY2tlZAotYmVjYXVzZSBpdCB3YXNuJ3QgcmVjb2duaXplZCBhcyBhIHNlcXVlbmNlKS4KKyAgYmVjYXVzZSBpdCB3YXNuJ3QgcmVjb2duaXplZCBhcyBhIHNlcXVlbmNlKS4KIAogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICM2MzE0OiBsb2dnaW5nLmJhc2ljQ29uZmlnKCkgcGVyZm9ybXMgZXh0cmEgY2hlY2tzIG9uIHRoZSAibGV2ZWwiCi1hcmd1bWVudC4KKy0gSXNzdWUgIzYxMjY6IEZpeGVkIHBkYiBjb21tYW5kLWxpbmUgdXNhZ2UuCisKKy0gSXNzdWUgIzYzMTQ6IGxvZ2dpbmc6IHBlcmZvcm1zIGV4dHJhIGNoZWNrcyBvbiB0aGUgImxldmVsIiBhcmd1bWVudC4KIAogLSBJc3N1ZSAjNjI3NDogRml4ZWQgcG9zc2libGUgZmlsZSBkZXNjcmlwdG9ycyBsZWFrIGluIHN1YnByb2Nlc3MucHkKIAogLSBBY2Nlc3NpbmcgaW8uU3RyaW5nSU8uYnVmZmVyIG5vdyByYWlzZXMgYW4gQXR0cmlidXRlRXJyb3IgaW5zdGVhZCBvZgotaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24uCisgIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uLgogCiAtIElzc3VlICM2MjcxOiBtbWFwIHRyaWVkIHRvIGNsb3NlIGludmFsaWQgZmlsZSBoYW5kbGUgKC0xKSB3aGVuIGFub255bW91cy4KLShPbiBVbml4KQorICAoT24gVW5peCkKIAogLSBJc3N1ZSAjMTIwMjogemlwZmlsZSBtb2R1bGUgd291bGQgY2F1c2UgYSBzdHJ1Y3QuZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvCi1zdG9yZSBmaWxlcyB3aXRoIGEgQ1JDMzIgPiAyKiozMS0xLgorICBzdG9yZSBmaWxlcyB3aXRoIGEgQ1JDMzIgPiAyKiozMS0xLgogCiBFeHRlbnNpb24gTW9kdWxlcwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE5MjgsMTAgKzQzNTQsMTAgQEAKIC0gRml4ZWQgU3lzdGVtRXJyb3IgdHJpZ2dlcmVkIGJ5ICJyYW5nZShbXSwgMSwgLTEpIi4KIAogLSBJc3N1ZSAjNTkyNDogT24gV2luZG93cywgYSBsYXJnZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlCi0obW9yZSB0aGFuIDI1NSBjaGFyYWN0ZXJzKSB3b3VsZCBiZSBjb21wbGV0ZWx5IGlnbm9yZWQuCisgIChtb3JlIHRoYW4gMjU1IGNoYXJhY3RlcnMpIHdvdWxkIGJlIGNvbXBsZXRlbHkgaWdub3JlZC4KIAogLSBJc3N1ZSAjNDU0NzogV2hlbiBkZWJ1Z2dpbmcgYSB2ZXJ5IGxhcmdlIGZ1bmN0aW9uLCBpdCB3YXMgbm90IGFsd2F5cwotcG9zc2libGUgdG8gdXBkYXRlIHRoZSBsaW5lbm8gYXR0cmlidXRlIG9mIHRoZSBjdXJyZW50IGZyYW1lLgorICBwb3NzaWJsZSB0byB1cGRhdGUgdGhlIGxpbmVubyBhdHRyaWJ1dGUgb2YgdGhlIGN1cnJlbnQgZnJhbWUuCiAKIC0gSXNzdWUgIzUzMzA6IEMgZnVuY3Rpb25zIGNhbGxlZCB3aXRoIGtleXdvcmQgYXJndW1lbnRzIHdlcmUgbm90IHJlcG9ydGVkIGJ5CiAgIHRoZSB2YXJpb3VzIHByb2ZpbGluZyBtb2R1bGVzIChwcm9maWxlLCBjUHJvZmlsZSkuIFBhdGNoIGJ5IEhhZ2VuIEbDvHJzdGVuYXUuCkBAIC0xOTQwLDM4ICs0MzY2LDM4IEBACiAtLS0tLS0tCiAKIC0gSXNzdWUgIzY0Mzg6IEZpeGVkIGRpc3R1dGlscy5jeWd3aW5jY29tcGlsZXIuZ2V0X3ZlcnNpb25zIDogdGhlIHJlZ3VsYXIKLWV4cHJlc3Npb24gc3RyaW5nIHBhdHRlcm4gd2FzIHRyeWluZyB0byBtYXRjaCBhZ2FpbnN0IGEgYnl0ZXMgcmV0dXJuZWQgYnkKLVBvcGVuLiBUZXN0ZWQgdW5kZXIgd2luMzIgdG8gYnVpbGQgdGhlIHB5LXBvc3RncmVzcWwgcHJvamVjdC4KKyAgZXhwcmVzc2lvbiBzdHJpbmcgcGF0dGVybiB3YXMgdHJ5aW5nIHRvIG1hdGNoIGFnYWluc3QgYSBieXRlcyByZXR1cm5lZCBieQorICBQb3Blbi4gVGVzdGVkIHVuZGVyIHdpbjMyIHRvIGJ1aWxkIHRoZSBweS1wb3N0Z3Jlc3FsIHByb2plY3QuCiAKIC0gSXNzdWUgIzYyNTg6IFN1cHBvcnQgQU1ENjQgaW4gYmRpc3RfbXNpLgogCiAtIElzc3VlICM2MTk1OiBmaXhlZCBkb2N0ZXN0IHRvIG5vIGxvbmdlciB0cnkgdG8gcmVhZCAnc291cmNlJyBkYXRhIGZyb20KLWJpbmFyeSBmaWxlcy4KKyAgYmluYXJ5IGZpbGVzLgogCiAtIElzc3VlICM1MjYyOiBGaXhlZCBidWcgaW4gbmV4dCByb2xsb3ZlciB0aW1lIGNvbXB1dGF0aW9uIGluCi1UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIuCisgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlci4KIAogLSBJc3N1ZSAjNjIxNzogVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgaW8uVGV4dElPV3JhcHBlciBkaWRuJ3QgaW5jbHVkZSB0aGUKLWVycm9ycyBwcm9wZXJ0eS4gIEFkZGl0aW9uYWxseSwgdGhlIGVycm9ycyBhbmQgZW5jb2RpbmcgcHJvcGVydGllcyBvZiBTdHJpbmdJTwotYXJlIGFsd2F5cyBOb25lIG5vdy4KKyAgZXJyb3JzIHByb3BlcnR5LiAgQWRkaXRpb25hbGx5LCB0aGUgZXJyb3JzIGFuZCBlbmNvZGluZyBwcm9wZXJ0aWVzIG9mIFN0cmluZ0lPCisgIGFyZSBhbHdheXMgTm9uZSBub3cuCiAKIC0gSXNzdWUgIzYxMzc6IFRoZSBwaWNrbGUgbW9kdWxlIG5vdyB0cmFuc2xhdGVzIG1vZHVsZSBuYW1lcyB3aGVuIGxvYWRpbmcKLW9yIGR1bXBpbmcgcGlja2xlcyB3aXRoIGEgMi54LWNvbXBhdGlibGUgcHJvdG9jb2wsIGluIG9yZGVyIHRvIG1ha2UgZGF0YQotc2hhcmluZyBhbmQgbWlncmF0aW9uIGVhc2llci4gVGhpcyBiZWhhdmlvdXIgY2FuIGJlIGRpc2FibGVkIHVzaW5nIHRoZQotbmV3IGBmaXhfaW1wb3J0c2Agb3B0aW9uYWwgYXJndW1lbnQuCisgIG9yIGR1bXBpbmcgcGlja2xlcyB3aXRoIGEgMi54LWNvbXBhdGlibGUgcHJvdG9jb2wsIGluIG9yZGVyIHRvIG1ha2UgZGF0YQorICBzaGFyaW5nIGFuZCBtaWdyYXRpb24gZWFzaWVyLiBUaGlzIGJlaGF2aW91ciBjYW4gYmUgZGlzYWJsZWQgdXNpbmcgdGhlCisgIG5ldyBgZml4X2ltcG9ydHNgIG9wdGlvbmFsIGFyZ3VtZW50LgogCiAtIFJlbW92ZWQgdGhlIGlwYWRkciBtb2R1bGUuCiAKIC0gSXNzdWUgIzM2MTM6IGJhc2U2NC57ZW5jb2RlLGRlY29kZX1zdHJpbmcgYXJlIG5vdyBjYWxsZWQKLWJhc2U2NC57ZW5jb2RlLGRlY29kZX1ieXRlcyB3aGljaCByZWZsZWN0cyB3aGF0IHR5cGUgdGhleSBhY2NlcHQgYW5kIHJldHVybi4KLVRoZSBvbGQgbmFtZXMgYXJlIHN0aWxsIHRoZXJlIGFzIGRlcHJlY2F0ZWQgYWxpYXNlcy4KKyAgYmFzZTY0LntlbmNvZGUsZGVjb2RlfWJ5dGVzIHdoaWNoIHJlZmxlY3RzIHdoYXQgdHlwZSB0aGV5IGFjY2VwdCBhbmQgcmV0dXJuLgorICBUaGUgb2xkIG5hbWVzIGFyZSBzdGlsbCB0aGVyZSBhcyBkZXByZWNhdGVkIGFsaWFzZXMuCiAKIC0gSXNzdWUgIzU3Njc6IFJlbW92ZSBzZ21sb3Agc3VwcG9ydCBmcm9tIHhtbHJwYy5jbGllbnQuCiAKIC0gSXNzdWUgIzYxNTA6IEZpeCB0ZXN0X3VuaWNvZGUgb24gd2lkZS11bmljb2RlIGJ1aWxkcy4KIAogLSBJc3N1ZSAjNjE0OTogRml4IGluaXRpYWxpemF0aW9uIG9mIFdlYWtWYWx1ZURpY3Rpb25hcnkgb2JqZWN0cyBmcm9tIG5vbi1lbXB0eQotcGFyYW1ldGVycy4KKyAgcGFyYW1ldGVycy4KIAogV2luZG93cwogLS0tLS0tLQpAQCAtMjI1NCw3ICs0NjgwLDcgQEAKIC0gSXNzdWUgIzIxNzA6IHJlZmFjdG9yZWQgeG1sLmRvbS5taW5pZG9tLm5vcm1hbGl6ZSwgaW5jcmVhc2luZyBib3RoCiAgIGl0cyBjbGFyaXR5IGFuZCBpdHMgc3BlZWQuCiAKLS0gSXNzdWUgIzExMTMyNDQ6IFB5X1hJTkNSRUYsIFB5X0RFQ1JFRiwgUHlfWERFQ1JFRjogQWRkIGBkbyB7IC4uLiB9IHdoaWxlICgwKScKKy0gSXNzdWUgIzExMTMyNDQ6IFB5X1hJTkNSRUYsIFB5X0RFQ1JFRiwgUHlfWERFQ1JFRjogQWRkIGBgZG8geyAuLi4gfSB3aGlsZSAoMClgYAogICB0byBhdm9pZCBjb21waWxlciB3YXJuaW5ncy4KIAogLSBJc3N1ZSAjMzczOTogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZW5jb2RlciBub3cgcmVwb3J0cyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKQEAgLTIyNjgsNiArNDY5NCw4IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzgyMDM6IEZpeCBJRExFIENyZWRpdHMgZGlhbG9nOiB2aWV3X2ZpbGUoKSB1c2VzIGl0cyBlbmNvZGluZyBhcmd1bWVudC4KKwogLSBJc3N1ZSAjNTMxMTogYmRpc3RfbXNpIGNhbiBub3cgYnVpbGQgcGFja2FnZXMgdGhhdCBkbyBub3QgZGVwZW5kIG9uIGEKICAgc3BlY2lmaWMgUHl0aG9uIHZlcnNpb24uCiAKQEAgLTI1NzYsNyArNTAwNCw3IEBACiAgIG9wdGlvbmFsIG1vZHVsZSBzdGF0ZSBkYXRhLgogCiAtIElzc3VlICM0OTEwOiBSZW5hbWUgbmJfbG9uZyBzbG90IHRvIG5iX3Jlc2VydmVkLCBhbmQgY2hhbmdlIGl0cwotICB0eXBlIHRvICh2b2lkICopLgorICB0eXBlIHRvIGBgKHZvaWQgKilgYC4KIAogLSBJc3N1ZSAjNDkzNTogVGhlIG92ZXJmbG93IGNoZWNraW5nIGNvZGUgaW4gdGhlIGV4cGFuZHRhYnMoKSBtZXRob2QgY29tbW9uCiAgIHRvIHN0ciwgYnl0ZXMgYW5kIGJ5dGVhcnJheSBjb3VsZCBiZSBvcHRpbWl6ZWQgYXdheSBieSB0aGUgY29tcGlsZXIsIGxldHRpbmcKQEAgLTI2MzEsOCArNTA1OSw4IEBACiAtIElzc3VlICM0NzQ3OiBXaGVuIHRoZSB0ZXJtaW5hbCBkb2VzIG5vdCB1c2UgdXRmLTgsIGV4ZWN1dGluZyBhIHNjcmlwdCB3aXRoCiAgIG5vbi1hc2NpaSBjaGFyYWN0ZXJzIGluIGl0cyBuYW1lIGNvdWxkIGZhaWwgd2l0aCBhICJTeW50YXhFcnJvcjogTm9uZSIgZXJyb3IuCiAKLS0gSXNzdWUgIzQ3OTc6IElPRXJyb3IuZmlsZW5hbWUgd2FzIG5vdCBzZXQgd2hlbiBfZmlsZWlvLkZpbGVJTyBmYWlsZWQgdG8gb3BlbgotICBmaWxlIHdpdGggYGJ5dGVzJyBmaWxlbmFtZSBvbiBXaW5kb3dzLgorLSBJc3N1ZSAjNDc5NzogSU9FcnJvci5maWxlbmFtZSB3YXMgbm90IHNldCB3aGVuIGBgX2ZpbGVpby5GaWxlSU9gYCBmYWlsZWQKKyAgdG8gb3BlbiBmaWxlIHdpdGggYSBieXRlcyBmaWxlbmFtZSBvbiBXaW5kb3dzLgogCiAtIElzc3VlICMzNjgwOiBSZWZlcmVuY2UgY3ljbGVzIGNyZWF0ZWQgdGhyb3VnaCBhIGRpY3QsIHNldCBvciBkZXF1ZSBpdGVyYXRvcgogICBkaWQgbm90IGdldCBjb2xsZWN0ZWQuCkBAIC0yNjk5LDIzICs1MTI3LDY1IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzcwNzE6IGJ5dGUtY29tcGlsYXRpb24gaW4gRGlzdHV0aWxzIGlzIG5vdyBkb25lIHdpdGggcmVzcGVjdCB0bworICBzeXMuZG9udF93cml0ZV9ieXRlY29kZS4KKworLSBJc3N1ZSAjNzA2NjogYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZSBub3cgcmVzdG9yZXMgdGhlIGN3ZCBpZiBhbiBlcnJvciBpcworICByYWlzZWQuIEluaXRpYWwgcGF0Y2ggYnkgRXppbyBNZWxvdHRpLgorCistIElzc3VlICM2NTE2OiBBZGRlZCBvd25lci9ncm91cCBzdXBwb3J0IHdoZW4gY3JlYXRpbmcgdGFyIGFyY2hpdmVzIGluCisgIERpc3R1dGlscy4KKworLSBJc3N1ZSAjNjk1NDogRml4ZWQgY3Jhc2ggd2hlbiB1c2luZyBESVNUVVRJTFNfREVCVUcgZmxhZyBpbiBEaXN0dXRpbHMuCisKKy0gSXNzdWUgIzYxNjM6IEZpeGVkIEhQLVVYIHJ1bnRpbWUgbGlicmFyeSBkaXIgb3B0aW9ucyBpbgorICBkaXN0dXRpbHMudW5peGNvbXBpbGVyLiBJbml0aWFsIHBhdGNoIGJ5IFNyaWRoYXIgUmF0bmFrdW1hciBhbmQKKyAgTWljaGFlbCBIYXViZW53YWxsbmVyLgorCistIElzc3VlICM2NjkzOiBOZXcgZnVuY3Rpb25zIGluIHNpdGUucHkgdG8gZ2V0IHVzZXIvZ2xvYmFsIHNpdGUgcGFja2FnZXMgcGF0aHMuCisKKy0gSXNzdWUgIzY1MTE6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBmaWxlIChpbnN0ZWFkIG9mIGFuIElPRXJyb3IpIHdoZW4KKyAgb3BlbmluZyBhbiBlbXB0eSBvciB2ZXJ5IHNtYWxsIGZpbGUuCisKIC0gSXNzdWUgIzY1NDU6IFJlbW92ZWQgYXNzZXJ0IHN0YXRlbWVudHMgaW4gZGlzdHV0aWxzLkV4dGVuc2lvbiwgc28gdGhlCiAgIGJlaGF2aW9yIGlzIHNpbWlsYXIgd2hlbiB1c2VkIHdpdGggLU8uCiAKLS0gSXNzdWUgIzY0NTk6IGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkX2V4dC5nZXRfZXhwb3J0X3N5bWJvbHMgbm93IHVzZXMgdGhlCi0gICJQeUluaXQiIHByZWZpeCwgcmF0aGVyIHRoYW4gImluaXQiLgorLSB1bml0dGVzdCBoYXMgYmVlbiBzcGxpdCB1cCBpbnRvIGEgcGFja2FnZS4gIEFsbCBvbGQgbmFtZXMgc2hvdWxkIHN0aWxsIHdvcmsuCisKKy0gSXNzdWUgIzY0NjY6IG5vdyBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyIGFuZCBkaXN0dXRpbHMuZW14Y2NvbXBpbGVyCisgIHVzZXMgdGhlIHNhbWUgcmVmYWN0b3JlZCBmdW5jdGlvbiB0byBnZXQgZ2NjL2xkL2RsbHdyYXAgdmVyc2lvbnMgbnVtYmVycy4KKyAgSXQncyBgZGlzdHV0aWxzLnV0aWwuZ2V0X2NvbXBpbGVyX3ZlcnNpb25zYC4gQWRkZWQgZGVwcmVjYXRpb24gd2FybmluZ3MKKyAgZm9yIHRoZSBvYnNvbGV0ZSBnZXRfdmVyc2lvbnMoKSBmdW5jdGlvbnMuCiAKIC0gSXNzdWUgIzY0MzM6IGZpeGVkIGlzc3VlcyB3aXRoIG11bHRpcHJvY2Vzc2luZy5wb29sLm1hcCBoYW5naW5nIG9uIGVtcHR5IGxpc3QKIAorLSBJc3N1ZSAjNjMxNDogbG9nZ2luZzogRXh0cmEgY2hlY2tzIG9uIHRoZSAibGV2ZWwiIGFyZ3VtZW50IGluIG1vcmUgcGxhY2VzLgorCistIElzc3VlICMyNjIyOiBGaXhlZCBhbiBJbXBvcnRFcnJvciB3aGVuIGltcG9ydGluZyBlbWFpbC5tZXNzYWdlIGZyb20gYQorICBzdGFuZGFsb25lIGFwcGxpY2F0aW9uIGJ1aWx0IHdpdGggcHkyZXhlIG9yIHB5MmFwcC4KKwogLSBJc3N1ZSAjNjQ1NTogRml4ZWQgdGVzdF9idWlsZF9leHQgdW5kZXIgd2luMzIuCiAKKy0gSXNzdWUgIzYzNzc6IEVuYWJsZWQgdGhlIGNvbXBpbGVyIG9wdGlvbiwgYW5kIGRlcHJlY2F0ZSBpdHMgdXNhZ2UgYXMgYW4KKyAgYXR0cmlidXRlLgorCiAtIElzc3VlICM2NDEzOiBGaXhlZCB0aGUgbG9nIGxldmVsIGluIGRpc3R1dGlscy5kaXN0IGZvciBhbm5vdW5jZS4KIAogLSBJc3N1ZSAjNjQwMzogRml4ZWQgcGFja2FnZSBwYXRoIHVzYWdlIGluIGJ1aWxkX2V4dC4KIAorLSBJc3N1ZXMgIzUxNTUsIDUzMTMsIDUzMzE6IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLl9ib290c3RyYXAgd2FzCisgIHVuY29uZGl0aW9uYWxseSBjYWxsaW5nICJvcy5jbG9zZShzeXMuc3RkaW4uZmlsZW5vKCkpIiByZXN1bHRpbmcgaW4gZmlsZQorICBkZXNjcmlwdG9yIGVycm9ycworCiAtIElzc3VlICM2MzY1OiBEaXN0dXRpbHMgYnVpbGRfZXh0IGlucGxhY2UgbW9kZSB3YXMgY29weWluZyB0aGUgY29tcGlsZWQKICAgZXh0ZW5zaW9uIGluIGEgc3ViZGlyZWN0b3J5IGlmIHRoZSBleHRlbnNpb24gbmFtZSBoYWQgZG90cy4KIAorLSBJc3N1ZSAjNjE2NDogQWRkZWQgYW4gQUlYIHNwZWNpZmljIGxpbmtlciBhcmd1bWVudCBpbiBEaXN0dXRpbHMKKyAgdW5peGNvbXBpbGVyLiBPcmlnaW5hbCBwYXRjaCBieSBTcmlkaGFyIFJhdG5ha3VtYXIuCisKKy0gSXNzdWUgIzYyODY6IE5vdyBEaXN0dXRpbHMgdXBsb2FkIGNvbW1hbmQgaXMgYmFzZWQgb24gdXJsbGliMiBpbnN0ZWFkIG9mCisgIGh0dHBsaWIsIGFsbG93aW5nIHRoZSB1c2FnZSBvZiBodHRwX3Byb3h5LgorCiAtIElzc3VlICM2Mjg3OiBBZGRlZCB0aGUgbGljZW5zZSBmaWVsZCBpbiBEaXN0dXRpbHMgZG9jdW1lbnRhdGlvbi4KIAogLSBJc3N1ZSAjNjI2MzogRml4ZWQgc3ludGF4IGVycm9yIGluIGRpc3R1dGlscy5jeWd3aW5jb21waWxlci4KQEAgLTI4NDEsNyArNTMxMSw3IEBACiAtIElzc3VlICM1Mzg2OiBtbWFwLndyaXRlX2J5dGUgZGlkbid0IGNoZWNrIG1hcCBzaXplLCBzbyBpdCBjb3VsZCBjYXVzZSBidWZmZXIKICAgb3ZlcnJ1bi4KIAotLSBJc3N1ZSAjMTUzMzE2NDogSW5zdGFsbGVkIGJ1dCBub3QgbGlzdGVkICoucHlvIHdhcyBicmVha2luZyBEaXN0dXRpbHMKKy0gSXNzdWUgIzE1MzMxNjQ6IEluc3RhbGxlZCBidXQgbm90IGxpc3RlZCBgYCoucHlvYGAgd2FzIGJyZWFraW5nIERpc3R1dGlscwogICBiZGlzdF9ycG0gY29tbWFuZC4KIAogLSBJc3N1ZSAjNTM3ODogYWRkZWQgLS1xdWlldCBvcHRpb24gdG8gRGlzdHV0aWxzIGJkaXN0X3JwbSBjb21tYW5kLgpAQCAtMjk5NCw4ICs1NDY0LDggQEAKIC0gSXNzdWUgIzQ5NTk6IGluc3BlY3QuZm9ybWF0YXJnc3BlYyBub3cgd29ya3MgZm9yIGtleXdvcmQgb25seSBhcmd1bWVudHMKICAgd2l0aG91dCBkZWZhdWx0cy4KIAotLSBJc3N1ZSAjMzMyMTogX211bHRpcHJvY2Vzc2luZy5Db25uZWN0aW9uKCkgZG9lc24ndCBjaGVjayBoYW5kbGU7IGFkZGVkIGNoZWNrcwotICBmb3IgKm5peCBtYWNoaW5lcyBmb3IgbmVnYXRpdmUgaGFuZGxlcyBhbmQgbGFyZ2UgaW50IGhhbmRsZXMuIFdpdGhvdXQgdGhpcyBjaGVjaworLSBJc3N1ZSAjMzMyMTogYGBfbXVsdGlwcm9jZXNzaW5nLkNvbm5lY3Rpb24oKWBgIGRvZXNuJ3QgY2hlY2sgaGFuZGxlOyBhZGRlZCBjaGVja3MKKyAgZm9yIFVuaXggbWFjaGluZXMgZm9yIG5lZ2F0aXZlIGhhbmRsZXMgYW5kIGxhcmdlIGludCBoYW5kbGVzLiBXaXRob3V0IHRoaXMgY2hlY2sKICAgaXQgaXMgcG9zc2libGUgdG8gc2VnZmF1bHQgdGhlIGludGVycHJldGVyLgogCiAtIElzc3VlICM0NDQ5OiBBc3NlcnRpb25FcnJvciBpbiBtcF9iZW5jaG1hcmtzLnB5LCBjYXVzZWQgYnkgYW4gdW5kZXJseWluZyBpc3N1ZQpAQCAtMzIwMSw2ICs1NjcxLDkgQEAKIEMtQVBJCiAtLS0tLQogCistIElzc3VlICM2NjI0OiB5QXJnX1BhcnNlVHVwbGUgd2l0aCAicyIgZm9ybWF0IHdoZW4gcGFyc2luZyBhcmd1bWVudCB3aXRoCisgIE5VTDogQm9ndXMgVHlwZUVycm9yIGRldGFpbCBzdHJpbmcuCisKIC0gSXNzdWUgIzUxNzU6IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmcgbm93IHJhaXNlcyBPdmVyZmxvd0Vycm9yCiAgIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMuICBQcmV2aW91c2x5LCBpdCByYWlzZWQgVHlwZUVycm9yLgogCkBAIC0zMjUxLDYgKzU3MjQsOSBAQAogVGVzdHMKIC0tLS0tCiAKKy0gSXNzdWUgIzYxNTI6IE5ldyBvcHRpb24gJy1qJy8nLS1tdWx0aXByb2Nlc3MnIGZvciByZWdydGVzdCBhbGxvd3MgcnVubmluZworICByZWdyZXNzaW9uIHRlc3RzIGluIHBhcmFsbGVsLCBzaG9ydGVuaW5nIHRoZSB0b3RhbCBydW50aW1lLgorCiAtIElzc3VlICM1NDUwOiBNb3ZlZCB0ZXN0cyBpbnZvbHZpbmcgbG9hZGluZyB0ayBmcm9tIExpYi90ZXN0L3Rlc3RfdGNsIHRvCiAgIExpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbG9hZHRrLiBXaXRoIHRoaXMsIHRoZXNlIHRlc3RzIGRlbW9uc3RyYXRlCiAgIHRoZSBzYW1lIGJlaGF2aW91ciBhcyB0ZXN0X3R0a2d1aW9ubHkgKGFuZCBub3cgYWxzbyB0ZXN0X3RrKSB3aGljaCBpcyB0bwpkaWZmIC0tZ2l0IGEvTWlzYy9Qb3J0aW5nIGIvTWlzYy9Qb3J0aW5nCmluZGV4IGVjOWNmMWYuLjUxZjczZTYgMTAwNjQ0Ci0tLSBhL01pc2MvUG9ydGluZworKysgYi9NaXNjL1BvcnRpbmcKQEAgLTMxLDcgKzMxLDcgQEAKIGl0IG91dCBvZiB0aGUgY29uZmlnLmMgZmlsZS4KIAogQmFuZyBvbiBpdCB1bnRpbCB5b3UgZ2V0IGEgPj4+IHByb21wdC4gIChZb3UgbWF5IGhhdmUgdG8gZGlzYWJsZSB0aGUKLWltcG9ydGluZyBvZiAic2l0ZS5weSIgYnkgcGFzc2luZyB0aGUgLVMgb3B0aW9ucy4pCitpbXBvcnRpbmcgb2YgInNpdGUucHkiIGJ5IHBhc3NpbmcgdGhlIC1TIG9wdGlvbi4pCiAKIFRoZW4gYmFuZyBvbiBpdCB1bnRpbCBpdCBleGVjdXRlcyB2ZXJ5IHNpbXBsZSBQeXRob24gc3RhdGVtZW50cy4KIApkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUgYi9NaXNjL1JFQURNRQppbmRleCBlN2E1OWM3Li5iMjM5Y2VlIDEwMDY0NAotLS0gYS9NaXNjL1JFQURNRQorKysgYi9NaXNjL1JFQURNRQpAQCAtOCwzMiArOCwxOSBAQAogLS0tLS0tLS0tLS0tLS0tLQogCiBBQ0tTICAgICAgICAgICAgICAgICAgICBBY2tub3dsZWRnZW1lbnRzCi1BSVgtTk9URVMgICAgICAgICAgICAgICBOb3RlcyBmb3IgYnVpbGRpbmcgUHl0aG9uIG9uIEFJWAogYnVpbGQuc2ggICAgICAgICAgICAgICAgU2NyaXB0IHRvIGJ1aWxkIGFuZCB0ZXN0IGxhdGVzdCBQeXRob24gZnJvbSB0aGUgcmVwb3NpdG9yeQotY2hlYXRzaGVldCAgICAgICAgICAgICAgUXVpY2sgc3VtbWFyeSBvZiBQeXRob24gYnkgS2VuIE1hbmhlaW1lcgotZGV2ZWxvcGVycy50eHQgICAgICAgICAgQSBoaXN0b3J5IG9mIHdobyBnb3QgZGV2ZWxvcGVyIHBlcm1pc3Npb25zLCBhbmQgd2h5CiBnZGJpbml0ICAgICAgICAgICAgICAgICBIYW5keSBzdHVmZiB0byBwdXQgaW4geW91ciAuZ2RiaW5pdCBmaWxlLCBpZiB5b3UgdXNlIGdkYgogSElTVE9SWSAgICAgICAgICAgICAgICAgTmV3cyBmcm9tIHByZXZpb3VzIHJlbGVhc2VzIC0tIG9sZGVzdCBsYXN0CiBpbmRlbnQucHJvICAgICAgICAgICAgICBHTlUgaW5kZW50IHByb2ZpbGUgYXBwcm94aW1hdGluZyBteSBDIHN0eWxlCi1tYWludGFpbmVycy5yc3QgICAgICAgICBBIGxpc3Qgb2YgbWFpbnRhaW5lcnMgZm9yIGxpYnJhcnkgbW9kdWxlcwogTkVXUyAgICAgICAgICAgICAgICAgICAgTmV3cyBmb3IgdGhpcyByZWxlYXNlIChmb3Igc29tZSBtZWFuaW5nIG9mICJ0aGlzIikKLU5FV1MuaGVscCAgICAgICAgICAgICAgIEhvdyB0byBlZGl0IE5FV1MKIFBvcnRpbmcgICAgICAgICAgICAgICAgIE1pbmktRkFRIG9uIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3JtcwotUFVSSUZZLlJFQURNRSAgICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFB1cmlmeSB1c2VycwotcHltZW1jb21wYXQuaCAgICAgICAgICAgTWVtb3J5IGludGVyZmFjZSBjb21wYXRpYmlsaXR5IGZpbGUuCiBweXRob24tY29uZmlnLmluICAgICAgICBQeXRob24gc2NyaXB0IHRlbXBsYXRlIGZvciBweXRob24tY29uZmlnCiBweXRob24ubWFuICAgICAgICAgICAgICBVTklYIG1hbiBwYWdlIGZvciB0aGUgcHl0aG9uIGludGVycHJldGVyCi1weXRob24tbW9kZS5lbCAgICAgICAgICBFbWFjcyBtb2RlIGZvciBlZGl0aW5nIFB5dGhvbiBwcm9ncmFtcwogcHl0aG9uLnBjLmluICAgICAgICAgICAgUGFja2FnZSBjb25maWd1cmF0aW9uIGluZm8gdGVtcGxhdGUgZm9yIHBrZy1jb25maWcKLXB5dGhvbi13aW5nLndwciAgICAgICAgIFdpbmcgSURFIHByb2plY3QgZmlsZQorcHl0aG9uLXdpbmcqLndwciAgICAgICAgV2luZyBJREUgcHJvamVjdCBmaWxlCiBSRUFETUUgICAgICAgICAgICAgICAgICBUaGUgZmlsZSB5b3UncmUgcmVhZGluZyBub3cKLVJFQURNRS5jb3Zlcml0eSAgICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHJ1bm5pbmcgQ292ZXJpdHkncyBQcmV2ZW50IG9uIFB5dGhvbgotUkVBRE1FLmtsb2N3b3JrICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyBLbG9jd29yaydzIEs3IG9uIFB5dGhvbgotUkVBRE1FLk9wZW5CU0QgICAgICAgICAgSGVscCBmb3IgYnVpbGRpbmcgcHJvYmxlbXMgb24gT3BlbkJTRAogUkVBRE1FLnZhbGdyaW5kICAgICAgICAgSW5mb3JtYXRpb24gZm9yIFZhbGdyaW5kIHVzZXJzLCBzZWUgdmFsZ3JpbmQtcHl0aG9uLnN1cHAKLVJGRCAgICAgICAgICAgICAgICAgICAgIFJlcXVlc3QgRm9yIERpc2N1c3Npb24gYWJvdXQgYSBQeXRob24gbmV3c2dyb3VwCiBSUE0gICAgICAgICAgICAgICAgICAgICAoT2xkKSB0b29scyB0byBidWlsZCBSUE1zCi1zZXR1aWQtcHJvZy5jICAgICAgICAgICBDIGhlbHBlciBwcm9ncmFtIGZvciBzZXQtdWlkIFB5dGhvbiBzY3JpcHRzCiBTcGVjaWFsQnVpbGRzLnR4dCAgICAgICBEZXNjcmliZXMgZXh0cmEgc3ltYm9scyB5b3UgY2FuIHNldCBmb3IgZGVidWcgYnVpbGRzCiBUZXh0TWF0ZSAgICAgICAgICAgICAgICBBIFRleHRNYXRlIGJ1bmRsZSBmb3IgUHl0aG9uIGRldmVsb3BtZW50CiB2YWxncmluZC1weXRob24uc3VwcCAgICBWYWxncmluZCBzdXBwcmVzc2lvbiBmaWxlLCBzZWUgUkVBRE1FLnZhbGdyaW5kCmRpZmYgLS1naXQgYS9NaXNjL1JFQURNRS5FbWFjcyBiL01pc2MvUkVBRE1FLkVtYWNzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGJiMWRiLi4wMDAwMDAwCi0tLSBhL01pc2MvUkVBRE1FLkVtYWNzCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPT09PT09PT09PT09PQotRW1hY3Mgc3VwcG9ydAotPT09PT09PT09PT09PQotCi1JZiB5b3Ugd2FudCB0byBlZGl0IFB5dGhvbiBjb2RlIGluIEVtYWNzLCB5b3Ugc2hvdWxkIGRvd25sb2FkIHB5dGhvbi1tb2RlLmVsCi1hbmQgaW5zdGFsbCBpdCBzb21ld2hlcmUgb24geW91ciBsb2FkLXBhdGguICBTZWUgdGhlIHByb2plY3QgcGFnZSB0byBkb3dubG9hZDoKLQotICAgIGh0dHBzOi8vbGF1bmNocGFkLm5ldC9weXRob24tbW9kZQotCi1XaGlsZSBFbWFjcyBjb21lcyB3aXRoIGEgcHl0aG9uLmVsIGZpbGUsIGl0IGlzIG5vdCByZWNvbW1lbmRlZC4KLXB5dGhvbi1tb2RlLmVsIGlzIG1haW50YWluZWQgYnkgY29yZSBQeXRob24gZGV2ZWxvcGVycyBhbmQgaXMgZ2VuZXJhbGx5Ci1jb25zaWRlcmVkIG1vcmUgUHl0aG9uIHByb2dyYW1tZXIgZnJpZW5kbHkuICBGb3IgZXhhbXBsZSwgcHl0aG9uLW1vZGUuZWwKLWluY2x1ZGVzIGEga2lsbGVyIGZlYXR1cmUgY2FsbGVkIGBwZGJ0cmFja2Agd2hpY2ggYWxsb3dzIHlvdSB0byBzZXQgYSBwZGIKLWJyZWFrcG9pbnQgaW4geW91ciBjb2RlLCBydW4geW91ciBwcm9ncmFtIGluIGFuIEVtYWNzIHNoZWxsIGJ1ZmZlciwgYW5kIGRvIGd1ZAotc3R5bGUgZGVidWdnaW5nIHdoZW4gdGhlIGJyZWFrcG9pbnQgaXMgaGl0LgotCi1weXRob24tbW9kZS5lbCBpcyBjb21wYXRpYmxlIHdpdGggYm90aCBHTlUgRW1hY3MgZnJvbSB0aGUgRlNGLCBhbmQgWEVtYWNzLgotCi1Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgYnVnIHJlcG9ydGluZywgc2VlIHRoZSBhYm92ZSBwcm9qZWN0IHBhZ2UuICBGb3IgaGVscCwKLWRldmVsb3BtZW50LCBvciBkaXNjdXNzaW9ucywgc2VlIHRoZSBweXRob24tbW9kZSBtYWlsaW5nIGxpc3Q6Ci0KLSAgICBodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLW1vZGUKLQotCi0uLgotICAgTG9jYWwgVmFyaWFibGVzOgotICAgbW9kZTogaW5kZW50ZWQtdGV4dAotICAgaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gICBzZW50ZW5jZS1lbmQtZG91YmxlLXNwYWNlOiB0Ci0gICBmaWxsLWNvbHVtbjogNzgKLSAgIGNvZGluZzogdXRmLTgKLSAgIEVuZDoKZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FLk9wZW5CU0QgYi9NaXNjL1JFQURNRS5PcGVuQlNECmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDE3ZWNjLi4wMDAwMDAwCi0tLSBhL01pc2MvUkVBRE1FLk9wZW5CU0QKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0KLTIwMDUtMDEtMDgKLQotSWYgeW91IGFyZSBoYXZlIGEgcHJvYmxlbSBidWlsZGluZyBvbiBPcGVuQlNEIGFuZCBzZWUgb3V0cHV0IGxpa2UgdGhpcwotd2hpbGUgcnVubmluZyBjb25maWd1cmU6Ci0KLWNoZWNraW5nIGN1cnNlcy5oIHByZXNlbmNlLi4uIHllcwotY29uZmlndXJlOiBXQVJOSU5HOiBjdXJzZXMuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkCi1jb25maWd1cmU6IFdBUk5JTkc6IGN1cnNlcy5oOiBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8KLWNvbmZpZ3VyZTogV0FSTklORzogY3Vyc2VzLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbgotY29uZmlndXJlOiBXQVJOSU5HOiBjdXJzZXMuaDogc2VjdGlvbiAiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkIgotY29uZmlndXJlOiBXQVJOSU5HOiBjdXJzZXMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQKLWNvbmZpZ3VyZTogV0FSTklORzogY3Vyc2VzLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZQotCi10aGVyZSBpcyBsaWtlbHkgYSBwcm9ibGVtIHRoYXQgd2lsbCBwcmV2ZW50IGJ1aWxkaW5nIHB5dGhvbi4gIAotSWYgeW91IHNlZSB0aGUgbWVzc2FnZXMgYWJvdmUgYW5kIGFyZSBhYmxlIHRvIGNvbXBsZXRlbHkgYnVpbGQgcHl0aG9uLAotcGxlYXNlIHRlbGwgcHl0aG9uLWRldkBweXRob24ub3JnIGluZGljYXRpbmcgeW91ciB2ZXJzaW9uIG9mIE9wZW5CU0QKLWFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgc3lzdGVtIGNvbmZpZ3VyYXRpb24uCi0KLVRoZSBidWlsZCBlcnJvciB0aGF0IG9jY3VycyB3aGlsZSBtYWtpbmcgbWF5IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKLQotICAgIC91c3IvaW5jbHVkZS9zeXMvZXZlbnQuaDo1MzogZXJyb3I6IHN5bnRheCBlcnJvciBiZWZvcmUgInVfaW50IgotICAgIC91c3IvaW5jbHVkZS9zeXMvZXZlbnQuaDo1NTogZXJyb3I6IHN5bnRheCBlcnJvciBiZWZvcmUgInVfc2hvcnQiCi0KLVRvIGZpeCB0aGlzIHByb2JsZW0sIHlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdXBkYXRlIFB5dGhvbidzIGNvbmZpZ3VyZQotc2NyaXB0IHRvIGRpc2FibGUgY2VydGFpbiBvcHRpb25zLiAgU2VhcmNoIGZvciBhIGxpbmUgdGhhdCBsb29rcyBsaWtlOgotCi0gICAgT3BlbkJTRC8yLiogfCBPcGVuQlNELzMuQDw6QDAxMjM0NTY3OEA6PkApCi0KLUlmIHlvdXIgdmVyc2lvbiBpcyBub3QgaW4gdGhhdCBsaXN0LCBlLmcuLCAzLjksIGFkZCB0aGUgdmVyc2lvbgotbnVtYmVyLiAgSW4gdGhpcyBjYXNlLCB5b3Ugd291bGQganVzdCBuZWVkIHRvIGFkZCBhIDkgYWZ0ZXIgdGhlIDguCi1JZiB5b3UgbW9kaWZ5IGNvbmZpZ3VyZS5pbiwgeW91IHdpbGwgbmVlZCB0byByZWdlbmVyYXRlIGNvbmZpZ3VyZQotd2l0aCBhdXRvY29uZi4KLQotSWYgeW91ciB2ZXJzaW9uIGlzIGFscmVhZHkgaW4gdGhlIGxpc3QsIHRoaXMgaXMgbm90IGEga25vd24gcHJvYmxlbS4KLVBsZWFzZSBzdWJtaXQgYSBidWcgcmVwb3J0IGhlcmU6Ci0KLSAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2dyb3VwX2lkPTU0NzAmYXRpZD0xMDU0NzAKZGlmZiAtLWdpdCBhL01pc2MvUkVBRE1FLmtsb2N3b3JrIGIvTWlzYy9SRUFETUUua2xvY3dvcmsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMmY1N2YuLjAwMDAwMDAKLS0tIGEvTWlzYy9SRUFETUUua2xvY3dvcmsKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0KLUtsb2N3b3JrIGhhcyBhIHN0YXRpYyBhbmFseXNpcyB0b29sIChLNykgd2hpY2ggaXMgc2ltaWxhciB0byBDb3Zlcml0eS4KLVRoZXkgd2lsbCBydW4gdGhlaXIgdG9vbCBvbiB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIG9uIGRlbWFuZC4KLVRoZSByZXN1bHRzIGFyZSBhdmFpbGFibGUgYXQ6Ci0KLSAgICAgaHR0cHM6Ly9vcGVuc291cmNlLmtsb2N3b3JrLmNvbS8KLQotQ3VycmVudGx5LCBvbmx5IE5lYWwgTm9yd2l0eiBoYXMgYWNjZXNzIHRvIHRoZSBhbmFseXNpcyByZXBvcnRzLiAgT3RoZXIKLXBlb3BsZSBjYW4gYmUgYWRkZWQgYnkgcmVxdWVzdC4KLQotSzcgd2FzIGZpcnN0IHJ1biBvbiB0aGUgUHl0aG9uIDIuNSBzb3VyY2UgY29kZSBpbiBtaWQtSnVseSAyMDA2LgotVGhpcyBpcyBhZnRlciBDb3Zlcml0eSBoYWQgYmVlbiBtYWtpbmcgdGhlaXIgcmVzdWx0cyBhdmFpbGFibGUuCi1UaGVyZSB3ZXJlIG9yaWdpbmFsbHkgMTc1IGRlZmVjdHMgcmVwb3J0ZWQuICBNb3N0IG9mIHRoZXNlCi13ZXJlIGZhbHNlIHBvc2l0aXZlcy4gIEhvd2V2ZXIsIHRoZXJlIHdlcmUgbnVtZXJvdXMgcmVhbCBpc3N1ZXMgCi1hbHNvIHVuY292ZXJlZC4KLQotRWFjaCB3YXJuaW5nIGhhcyBhIHVuaXF1ZSBpZCBhbmQgY29tbWVudHMgdGhhdCBjYW4gYmUgbWFkZSBvbiBpdC4KLVdoZW4gY2hlY2tpbmcgaW4gY2hhbmdlcyBkdWUgdG8gYSBLNyByZXBvcnQsIHRoZSB1bmlxdWUgaWQKLWFzIHJlcG9ydGVkIGJ5IHRoZSB0b29sIHdhcyBhZGRlZCB0byB0aGUgU1ZOIGNvbW1pdCBtZXNzYWdlLgotQSBjb21tZW50IHdhcyBhZGRlZCB0byB0aGUgSzcgd2FybmluZyBpbmRpY2F0aW5nIHRoZSBTVk4gcmV2aXNpb24KLWluIGFkZGl0aW9uIHRvIGFueSBhbmFseXNpcy4KLQotRmFsc2UgcG9zaXRpdmVzIHdlcmUgYWxzbyBhbm5vdGF0ZWQgc28gdGhhdCB0aGUgY29tbWVudHMgY2FuCi1iZSByZXZpZXdlZCBhbmQgcmV2ZXJzZWQgaWYgdGhlIGFuYWx5c2lzIHdhcyBpbmNvcnJlY3QuCi0KLUEgc2Vjb25kIHJ1biB3YXMgcGVyZm9ybWVkIG9uIDEwLUF1Zy0yMDA2LiAgVGhlIHRvb2wgd2FzIHR1bmVkIHRvIHJlbW92ZQotc29tZSBmYWxzZSBwb3NpdGl2ZXMgYW5kIHBlcmZvcm0gc29tZSBhZGRpdGlvbmFsIGNoZWNrcy4gIH4xNTAgbmV3Ci13YXJuaW5ncyB3ZXJlIHByb2R1Y2VkLCBwcmltYXJpbHkgcmVsYXRlZCB0byBkZXJlZmVyZW5jaW5nIE5VTEwgcG9pbnRlcnMuCi0KLUNvbnRhY3QgcHl0aG9uLWRldkBweXRob24ub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvTWlzYy9SRkQgYi9NaXNjL1JGRApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQyNzhjNC4uMDAwMDAwMAotLS0gYS9NaXNjL1JGRAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi1UbzogIHB5dGhvbi1saXN0Ci1TdWJqZWN0OiBjb21wLmxhbmcucHl0aG9uIFJGRCBhZ2FpbgotRnJvbTogR3VpZG8udmFuLlJvc3N1bUBjd2kubmwKLQotSSd2ZSBmb2xsb3dlZCB0aGUgcmVjZW50IGRpc2N1c3Npb24gYW5kIHRyaW1tZWQgdGhlIGJsdXJiIFJGRCBkb3duIGEgYml0Ci0oYW5kIGFkZGVkIHRoZSB3b3JkICJvYmplY3Qtb3JpZW50ZWQiIHRvIHRoZSBibHVyYikuCi0KLUkgZG9uJ3QgdGhpbmsgaXQncyB0b28gZWFybHkgdG8gKnRyeSogdG8gY3JlYXRlIHRoZSBuZXdzZ3JvdXAgLS0KLXdoZXRoZXIgd2Ugd2lsbCBzdWNjZWVkIG1heSBkZXBlbmQgb24gaG93IG1hbnkgUHl0aG9uIHN1cHBvcnRlcnMgdGhlcmUKLWFyZSBvdXRzaWRlIHRoZSBtYWlsaW5nIGxpc3QuCi0KLUknbSBwZXJzb25hbGx5IG5vdCB3b3JyaWVkIGFib3V0IG1vZGVyYXRpb24sIGFuZCBhbnl3YXkgSSBoYXZlbid0Ci1oZWFyZCBmcm9tIGFueSB2b2x1bnRlZXJzIGZvciBtb2RlcmF0aW9uIChhbmQgSSB3b24ndCB2b2x1bnRlZXIKLW15c2VsZikgc28gSSBzdWdnZXN0IHRoYXQgd2UnbGwgY29udGludWUgdG8gYXNrIGZvciBvbmUgdW5tb2RlcmF0ZWQKLW5ld3Nncm91cC4KLQotTXkgbmV4dCBhY3Rpb24gd2lsbCBiZSB0byBwb3N0IGFuIHVwZGF0ZWQgRkFRICh3aGljaCB3aWxsIGhpbnQgYXQgdGhlCi11cGNvbWluZyBSRkQpIHRvIGNvbXAubGFuZy5taXNjOyB0aGVuIGZpbmFsaXplIHRoZSAxLjAuMCByZWxlYXNlIGFuZAotcHV0IGl0IG9uIHRoZSBmdHAgc2l0ZS4gIEknbGwgYWxzbyB0cnkgdG8gZ2V0IGl0IGludG8KLWNvbXAuc291cmNlcy51bml4IG9yIC5taXNjLiAgQW5kIGFsbCB0aGlzIGJlZm9yZSB0aGUgZW5kIG9mIEphbnVhcnkhCi0KLS0tR3VpZG8gdmFuIFJvc3N1bSwgQ1dJLCBBbXN0ZXJkYW0gPEd1aWRvLnZhbi5Sb3NzdW1AY3dpLm5sPgotVVJMOiAgPGh0dHA6Ly93d3cuY3dpLm5sL2N3aS9wZW9wbGUvR3VpZG8udmFuLlJvc3N1bS5odG1sPgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoZXNlIGFyZSB0aGUgc3RlcHMgcmVxdWlyZWQgKGluIGNhc2UgeW91IGRvbid0IGtub3cgYWJvdXQgdGhlCi1uZXdzZ3JvdXAgY3JlYXRpb24gcHJvY2Vzcyk6Ci0KLUZpcnN0LCB3ZSBuZWVkIHRvIGRyYXcgdXAgYW4gUkZEIChSZXF1ZXN0IEZvciBEaXNjdXNzaW9uKS4gIFRoaXMgaXMgYQotZG9jdW1lbnQgdGhhdCB0ZWxscyB3aGF0IHRoZSBwdXJwb3NlIG9mIHRoZSBncm91cCBpcywgYW5kIGdpdmVzIGEgY2FzZQotZm9yIGl0cyBjcmVhdGlvbi4gIFdlIHBvc3QgdGhpcyB0byByZWxldmFudCBncm91cHMgKGNvbXAubGFuZy5taXNjLAotdGhlIG1haWxpbmcgbGlzdCwgbmV3cy5ncm91cHMsIGV0Yy4pICBEaXNjdXNzaW9uIGlzIGhlbGQgb24KLW5ld3MuZ3JvdXBzLgotCi1UaGVuLCBhZnRlciBhIGZldyB3ZWVrcywgd2UgcnVuIHRoZSBvZmZpY2lhbCBDRlYgKENhbGwgRm9yIFZvdGVzKS4KLVRoZSB2b3RlcyBhcmUgdGhlbiBjb2xsZWN0ZWQgb3ZlciBhIHBlcmlvZCBvZiB3ZWVrcy4gIFdlIG5lZWQgMTAwIG1vcmUKLXllcyB2b3RlcyB0aGFuIG5vIHZvdGVzLCBhbmQgYSAyLzMgbWFqb3JpdHksIHRvIGdldCB0aGUgZ3JvdXAuCi0KLVRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9ucyBvbiB0aGUgdm90ZSB0YWtlcjogW3NdaGUgY2Fubm90IGFjdGl2ZWx5Ci1jYW1wYWlnbiBmb3IvYWdhaW5zdCB0aGUgZ3JvdXAgZHVyaW5nIHRoZSB2b3RlIHByb2Nlc3MuICBTbyB0aGUgbWFpbgotYmVuZWZpdCB0byBTdGV2ZSBpbnN0ZWFkIG9mIG1lIHJ1bm5pbmcgdGhlIHZvdGUgaXMgdGhhdCBJIHdpbGwgYmUgZnJlZQotdG8gY2FtcGFpZ24gZm9yIGl0cyBjcmVhdGlvbiEKLQotVGhlIGZvbGxvd2luZyBpcyBvdXIgY3VycmVudCBkcmFmdCBmb3IgdGhlIFJGRC4KLQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1SZXF1ZXN0IEZvciBEaXNjdXNzaW9uOiBjb21wLmxhbmcucHl0aG9uCi0KLQotUHVycG9zZQotLS0tLS0tLQotCi1UaGUgbmV3c2dyb3VwIHdpbGwgYmUgZm9yIGRpc2N1c3Npb24gb24gdGhlIFB5dGhvbiBjb21wdXRlciBsYW5ndWFnZS4KLVBvc3NpYmxlIHRvcGljcyBpbmNsdWRlIHJlcXVlc3RzIGZvciBpbmZvcm1hdGlvbiwgZ2VuZXJhbCBwcm9ncmFtbWluZywKLWRldmVsb3BtZW50LCBhbmQgYnVnIHJlcG9ydHMuIFRoZSBncm91cCB3aWxsIGJlIHVubW9kZXJhdGVkLgotCi0KLVdoYXQgaXMgUHl0aG9uPwotLS0tLS0tLS0tLS0tLS0tCi0KLVB5dGhvbiBpcyBhIHJlbGF0aXZlbHkgbmV3IHZlcnktaGlnaC1sZXZlbCBsYW5ndWFnZSBkZXZlbG9wZWQgaW4KLUFtc3RlcmRhbS4gIFB5dGhvbiBpcyBhIHNpbXBsZSwgb2JqZWN0LW9yaWVudGVkIHByb2NlZHVyYWwgbGFuZ3VhZ2UsCi13aXRoIGZlYXR1cmVzIHRha2VuIGZyb20gQUJDLCBJY29uLCBNb2R1bGEtMywgYW5kIEMvQysrLgotCi1JdHMgY2VudHJhbCBnb2FsIGlzIHRvIHByb3ZpZGUgdGhlIGJlc3Qgb2YgYm90aCB3b3JsZHM6IHRoZSBkeW5hbWljCi1uYXR1cmUgb2Ygc2NyaXB0aW5nIGxhbmd1YWdlcyBsaWtlIFBlcmwvVENML1JFWFgsIGJ1dCBhbHNvIHN1cHBvcnQgZm9yCi1nZW5lcmFsIHByb2dyYW1taW5nIGZvdW5kIGluIHRoZSBtb3JlIHRyYWRpdGlvbmFsIGxhbmd1YWdlcyBsaWtlIEljb24sCi1DLCBNb2R1bGEsLi4uCi0KLVB5dGhvbiBtYXkgYmUgRlRQJ2QgZnJvbSB0aGUgZm9sbG93aW5nIHNpdGVzOgotCi0JZnRwLmN3aS5ubCBpbiBkaXJlY3RvcnkgL3B1Yi9weXRob24gKGl0cyAiaG9tZSBzaXRlIiwgYWxzbyBoYXMgYSBGQVEpCi0JZnRwLnV1Lm5ldCBpbiBkaXJlY3RvcnkgL2xhbmd1YWdlcy9weXRob24KLQlnYXRla2VlcGVyLmRlYy5jb20gaW4gZGlyZWN0b3J5IC9wdWIvcGxhbi9weXRob24vY3dpCi0KLQotUmF0aW9uYWxlCi0tLS0tLS0tLS0KLQotQ3VycmVudGx5IHRoZXJlIGlzIGEgbWFpbGluZyBsaXN0IHdpdGggb3ZlciAxMzAgc3Vic2NyaWJlcnMuCi1UaGUgYWN0aXZpdHkgb2YgdGhpcyBsaXN0IGlzIGhpZ2gsIGFuZCB0byBtYWtlIGhhbmRsaW5nIHRoZQotdHJhZmZpYyBtb3JlIHJlYXNvbmFibGUsIGEgbmV3c2dyb3VwIGlzIGJlaW5nIHByb3Bvc2VkLiBXZQotYWxzbyBmZWVsIHRoYXQgY29tcC5sYW5nLm1pc2Mgd291bGQgbm90IGJlIGEgc3VpdGFibGUgZm9ydW0KLWZvciB0aGlzIHZvbHVtZSBvZiBkaXNjdXNzaW9uIG9uIGEgcGFydGljdWxhciBsYW5ndWFnZS4KLQotCi1DaGFydGVyCi0tLS0tLS0tCi0KLUNvbXAubGFuZy5weXRob24gaXMgYW4gdW5tb2RlcmF0ZWQgbmV3c2dyb3VwIHdoaWNoIHdpbGwgc2VydmUKLWFzIGEgZm9ydW0gZm9yIGRpc2N1c3NpbmcgdGhlIFB5dGhvbiBjb21wdXRlciBsYW5ndWFnZS4gVGhlCi1ncm91cCB3aWxsIHNlcnZlIGJvdGggdGhvc2Ugd2hvIGp1c3QgcHJvZ3JhbSBpbiBQeXRob24gYW5kCi10aG9zZSB3aG8gd29yayBvbiBkZXZlbG9waW5nIHRoZSBsYW5ndWFnZS4gVG9waWNzIHRoYXQKLW1heSBiZSBkaXNjdXNzZWQgaW5jbHVkZToKLQotCS0gYW5ub3VuY2VtZW50cyBvZiBuZXcgdmVyc2lvbnMgb2YgdGhlIGxhbmd1YWdlIGFuZAotCSAgYXBwbGljYXRpb25zIHdyaXR0ZW4gaW4gUHl0aG9uLgotCi0JLSBkaXNjdXNzaW9uIG9uIHRoZSBpbnRlcm5hbHMgb2YgdGhlIFB5dGhvbiBsYW5ndWFnZS4KLQotCS0gZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbGFuZ3VhZ2UuCi0KLQktIGRpc2N1c3Npb24gb24gcHJvZ3JhbW1pbmcgaW4gUHl0aG9uLgotCi0KLURpc2N1c3Npb24KLS0tLS0tLS0tLS0KLQotQW55IG9iamVjdGlvbnMgdG8gdGhpcyBSRkQgd2lsbCBiZSBjb25zaWRlcmVkIGFuZCwgaWYgZGV0ZXJtaW5lZAotdG8gYmUgYXBwcm9wcmlhdGUsIHdpbGwgYmUgaW5jb3Jwb3JhdGVkLiBUaGUgZGlzY3Vzc2lvbiBwZXJpb2QKLXdpbGwgYmUgZm9yIGEgcGVyaW9kIG9mIDIxIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIGZpcnN0IENGViB3aWxsIGJlCi1pc3N1ZWQuCmRpZmYgLS1naXQgYS9NaXNjL1JQTS9SRUFETUUgYi9NaXNjL1JQTS9SRUFETUUKaW5kZXggZjNhMjU1Ny4uZDg4M2M5NSAxMDA2NDQKLS0tIGEvTWlzYy9SUE0vUkVBRE1FCisrKyBiL01pc2MvUlBNL1JFQURNRQpAQCAtMiwxMSArMiw2IEBACiBQeXRob24uICBJdHMgY29udGVudHMgYXJlIG1haW50YWluZWQgYnkgU2VhbiBSZWlmc2NobmVpZGVyCiA8amFmb0B0dW1teS5jb20+LgogCi1JdCBpcyByZWNvbW1lbmRlZCB0aGF0IFJQTSBidWlsZGVycyB1c2UgdGhlIHB5dGhvbiouc3JjLnJwbSBmaWxlCi1kb3dubG9hZGVkIGZyb20gdGhlICJmdHAucHl0aG9uLm9yZzovcHViL3B5dGhvbi88dmVyc2lvbj4vcnBtcyIuICBUaGVzZQotbWF5IGJlIG1vcmUgdXAgdG8gZGF0ZSB0aGFuIHRoZSBmaWxlcyBpbmNsdWRlZCBpbiB0aGUgYmFzZSBQeXRob24KLXJlbGVhc2UgdGFyLWZpbGUuCi0KIElmIHlvdSB3aXNoIHRvIGJ1aWxkIFJQTXMgZnJvbSB0aGUgYmFzZSBQeXRob24gcmVsZWFzZSB0YXItZmlsZSwgbm90ZQogdGhhdCB5b3Ugd2lsbCBoYXZlIHRvIGRvd25sb2FkIHRoZQogImRvYy88dmVyc2lvbj4vaHRtbC08dmVyc2lvbj4udGFyLmJ6MiIKQEAgLTE0LDMgKzksMjUgQEAKIHRoZSBidWlsZCB0byBjb21wbGV0ZS4gIFRoaXMgaXMgdGhlIHNhbWUgZGlyZWN0b3J5IHRoYXQgeW91IHBsYWNlIHRoZQogUHl0aG9uLTIuMy4xIHJlbGVhc2UgdGFyLWZpbGUgaW4uICBZb3UgY2FuIHRoZW4gdXNlIHRoZSAiLnNwZWMiIGZpbGUgaW4KIHRoaXMgZGlyZWN0b3J5IHRvIGJ1aWxkIFJQTXMuCisKK1lvdSBtYXkgYWxzbyB3aXNoIHRvIHB1cnN1ZSBSUE1zIHByb3ZpZGVkIGJ5IGRpc3RyaWJ1dGlvbiBtYWtlcnMgdG8gc2VlIGlmCit0aGV5IGhhdmUgb25lIHN1aXRhYmxlIGZvciB5b3VyIHVzZXMuICBJZiwgZm9yIGV4YW1wbGUsIHlvdSBqdXN0IHdhbnQgYQorc2xpZ2h0bHkgbmV3ZXIgdmVyc2lvbiBvZiBQeXRob24gdGhhbiB3aGF0IHRoZSBkaXN0cm8gcHJvdmlkZXMsIHlvdSBjb3VsZAorcGljayB1cCB0aGUgY2xvc2VzdCBTUlBNIHlvdXIgZGlzdHJvIHByb3ZpZGVzLCBhbmQgdGhlbiBtb2RpZnkgaXQgdG8KK3RoZSBuZXdlciB2ZXJzaW9uLCBhbmQgYnVpbGQgdGhhdC4gIEl0IG1heSBiZSBhcyBzaW1wbGUgYXMganVzdCBjaGFuZ2luZwordGhlICJ2ZXJzaW9uIiBpbmZvcm1hdGlvbiBpbiB0aGUgc3BlYyBmaWxlIChvciBpdCBtYXkgcmVxdWlyZSBmaXhpbmcKK3BhdGNoZXMpLgorCitOT1RFOiBJIGFtICpOT1QqIHJlY29tbWVuZGluZyBqdXN0IHVzaW5nIHRoZSBiaW5hcnkgUlBNLCBhbmQgbmV2ZXIgZG8gYW4KK2luc3RhbGwgd2l0aCAiLS1mb3JjZSIgb3IgIi0tbm9kZXBzIi4KKworQWxzbyB3b3J0aCBwdXJzdWluZyBtYXkgYmUgbmV3ZXIgdmVyc2lvbnMgcHJvdmlkZWQgYnkgc2ltaWxhciBkaXN0cm9zLiAgRm9yCitleGFtcGxlLCBhIFB5dGhvbiAzIFNSUE0gZnJvbSBGZWRvcmEgbWF5IGJlIGEgZ29vZCBiYXNlbGluZSB0byB0cnkgYnVpbGRpbmcKK29uIENlbnRPUy4KKworTWFueSBuZXdlciBTUlBNcyB3b24ndCBpbnN0YWxsIG9uIG9sZGVyIGRpc3Ryb3MgYmVjYXVzZSBvZiBmb3JtYXQgY2hhbmdlcy4KK1lvdSBjYW4gbWFudWFsbHkgZXh0cmFjdCB0aGVzZSBTUlBNUyB3aXRoOgorCisgICBta2RpciBmb28KKyAgIGNkIGZvbworICAgcnBtMmNwaW8gPC4uL3B5dGhvbjMtKi5zcmMucnBtIHwgY3BpbyAtaXZkCmRpZmYgLS1naXQgYS9NaXNjL1JQTS9weXRob24tMy4xLnNwZWMgYi9NaXNjL1JQTS9weXRob24tMy4yLnNwZWMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gTWlzYy9SUE0vcHl0aG9uLTMuMS5zcGVjCnJlbmFtZSB0byBNaXNjL1JQTS9weXRob24tMy4yLnNwZWMKaW5kZXggMGYyNGE0MS4uYTVlY2RjNyAxMDA2NDQKLS0tIGEvTWlzYy9SUE0vcHl0aG9uLTMuMS5zcGVjCisrKyBiL01pc2MvUlBNL3B5dGhvbi0zLjIuc3BlYwpAQCAtMjUsNiArMjUsMTEgQEAKICVkZWZpbmUgY29uZmlnX2lwdjYgeWVzCiAlZGVmaW5lIGNvbmZpZ19pcHY2IG5vCiAKKyMgIEJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgb3IgLmEgbGlicmFyeT8KKyNXQVJOSU5HOiBDb21tZW50aW5nIG91dCBkb2Vzbid0IHdvcmsuICBMYXN0IGxpbmUgaXMgd2hhdCdzIHVzZWQuCislZGVmaW5lIGNvbmZpZ19zaGFyZWRsaWIgbm8KKyVkZWZpbmUgY29uZmlnX3NoYXJlZGxpYiB5ZXMKKwogIyAgTG9jYXRpb24gb2YgdGhlIEhUTUwgZGlyZWN0b3J5LgogJWRlZmluZSBjb25maWdfaHRtbGRpciAvdmFyL3d3dy9odG1sL3B5dGhvbgogCkBAIC0zNCw4ICszOSw4IEBACiAKICVkZWZpbmUgbmFtZSBweXRob24KICMtLXN0YXJ0IGNvbnN0YW50cy0tCi0lZGVmaW5lIHZlcnNpb24gMy4xLjMKLSVkZWZpbmUgbGlidmVycyAzLjEKKyVkZWZpbmUgdmVyc2lvbiAzLjIKKyVkZWZpbmUgbGlidmVycyAzLjIKICMtLWVuZCBjb25zdGFudHMtLQogJWRlZmluZSByZWxlYXNlIDFweWRvdG9yZwogJWRlZmluZSBfX3ByZWZpeCAvdXNyCkBAIC00Niw2ICs1MSw4IEBACiAlZGVmaW5lIGJpbnN1ZmZpeCAlKGlmIFsgIiV7Y29uZmlnX2JpbnN1ZmZpeH0iID0gbm9uZSBdOyB0aGVuIGVjaG8gOyBlbHNlIGVjaG8gIiV7Y29uZmlnX2JpbnN1ZmZpeH0iOyBmaSkKICVkZWZpbmUgaW5jbHVkZV90a2ludGVyICUoaWYgWyBcXCggIiV7Y29uZmlnX3RraW50ZXJ9IiA9IGF1dG8gLWEgLWYgL3Vzci9iaW4vd2lzaCBcXCkgLW8gIiV7Y29uZmlnX3RraW50ZXJ9IiA9IHllcyBdOyB0aGVuIGVjaG8gMTsgZWxzZSBlY2hvIDA7IGZpKQogJWRlZmluZSBsaWJkaXJuYW1lICUoKCB1bmFtZSAtbSB8IGVncmVwIC1xICdfNjQkJyAmJiBbIC1kIC91c3IvbGliNjQgXSAmJiBlY2hvIGxpYjY0ICkgfHwgZWNobyBsaWIpCislZGVmaW5lIHNoYXJlZGxpYiAlKGlmIFsgIiV7Y29uZmlnX3NoYXJlZGxpYn0iID0geWVzIF07IHRoZW4gZWNobyAtLWVuYWJsZS1zaGFyZWQ7IGVsc2UgZWNobyA7IGZpKQorJWRlZmluZSBpbmNsdWRlX3NoYXJlZGxpYiAlKGlmIFsgIiV7Y29uZmlnX3NoYXJlZGxpYn0iID0geWVzIF07IHRoZW4gZWNobyAxOyBlbHNlIGVjaG8gMDsgZmkpCiAKICMgIGRldGVjdCBpZiBkb2N1bWVudGF0aW9uIGlzIGF2YWlsYWJsZQogJWRlZmluZSBpbmNsdWRlX2RvY3MgJShpZiBbIC1mICIle19zb3VyY2VkaXJ9L2h0bWwtJXt2ZXJzaW9ufS50YXIuYnoyIiBdOyB0aGVuIGVjaG8gMTsgZWxzZSBlY2hvIDA7IGZpKQpAQCAtMjIzLDcgKzIzMCwxNCBAQAogIyAgQlVJTEQKICMjIyMjIyMjCiAlYnVpbGQKLS4vY29uZmlndXJlIC0tZW5hYmxlLXVuaWNvZGU9dWNzNCAle2lwdjZ9ICV7cHltYWxsb2N9IC0tcHJlZml4PSV7X19wcmVmaXh9CitlY2hvICJTZXR0aW5nIGZvciBpcHY2OiAle2lwdjZ9IgorZWNobyAiU2V0dGluZyBmb3IgcHltYWxsb2M6ICV7cHltYWxsb2N9IgorZWNobyAiU2V0dGluZyBmb3IgYmluc3VmZml4OiAle2JpbnN1ZmZpeH0iCitlY2hvICJTZXR0aW5nIGZvciBpbmNsdWRlX3RraW50ZXI6ICV7aW5jbHVkZV90a2ludGVyfSIKK2VjaG8gIlNldHRpbmcgZm9yIGxpYmRpcm5hbWU6ICV7bGliZGlybmFtZX0iCitlY2hvICJTZXR0aW5nIGZvciBzaGFyZWRsaWI6ICV7c2hhcmVkbGlifSIKK2VjaG8gIlNldHRpbmcgZm9yIGluY2x1ZGVfc2hhcmVkbGliOiAle2luY2x1ZGVfc2hhcmVkbGlifSIKKy4vY29uZmlndXJlIC0tZW5hYmxlLXVuaWNvZGU9dWNzNCAle3NoYXJlZGxpYn0gJXtpcHY2fSAle3B5bWFsbG9jfSAtLXByZWZpeD0le19fcHJlZml4fQogbWFrZQogCiAjIyMjIyMjIyMjCkBAIC0yNTQsMTEgKzI2OCwxMCBAQAogIyAgYWRkIHRoZSBiaW5zdWZmaXgKIGlmIFsgISAteiAiJXtiaW5zdWZmaXh9IiBdCiB0aGVuCi0gICAoIGNkICRSUE1fQlVJTERfUk9PVCV7X19wcmVmaXh9L2Jpbjsgcm0gLWYgcHl0aG9uWzAtOWEtekEtWl0qOwotICAgICAgICAgbXYgLWYgcHl0aG9uIHB5dGhvbiIle2JpbnN1ZmZpeH0iICkKLSAgICggY2QgJFJQTV9CVUlMRF9ST09UJXtfX3ByZWZpeH0vc2hhcmUvbWFuL21hbjE7IG12IHB5dGhvbi4xIHB5dGhvbiV7Ymluc3VmZml4fS4xICkKLSAgICggY2QgJFJQTV9CVUlMRF9ST09UJXtfX3ByZWZpeH0vYmluOyBtdiAtZiBweWRvYyBweWRvYyIle2JpbnN1ZmZpeH0iICkKLSAgICggY2QgJFJQTV9CVUlMRF9ST09UJXtfX3ByZWZpeH0vYmluOyBtdiAtZiBpZGxlIGlkbGUiJXtiaW5zdWZmaXh9IiApCisgICBybSAtZiAkUlBNX0JVSUxEX1JPT1Qle19fcHJlZml4fS9iaW4vcHl0aG9uWzAtOWEtekEtWl0qCisgICAoIGNkICRSUE1fQlVJTERfUk9PVCV7X19wcmVmaXh9L2JpbjsgCisgICAgICBmb3IgZmlsZSBpbiAqOyBkbyBtdiAiJGZpbGUiICIkZmlsZSIle2JpbnN1ZmZpeH07IGRvbmUgKQorICAgKCBjZCAkUlBNX0JVSUxEX1JPT1Qle19tYW5kaXJ9L21hbjE7IG12IHB5dGhvbi4xIHB5dGhvbiV7Ymluc3VmZml4fS4xICkKIGZpCiAKICMjIyMjIyMjCkBAIC0yNzMsMTcgKzI4NiwyMyBAQAogCiAjICBNQUtFIEZJTEUgTElTVFMKIHJtIC1mIG1haW5wa2cuZmlsZXMKLWZpbmQgIiRSUE1fQlVJTERfUk9PVCIiJXtfX3ByZWZpeH0iLyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS9saWItZHlubG9hZCAtdHlwZSBmIHwKK2ZpbmQgIiRSUE1fQlVJTERfUk9PVCIiJXtfX3ByZWZpeH0iLyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfSAtdHlwZSBmIHwKIAlzZWQgInN8XiR7UlBNX0JVSUxEX1JPT1R9fC98IiB8Ci0JZ3JlcCAtdiAtZSAnX3RraW50ZXIuc28kJyA+bWFpbnBrZy5maWxlcwotZmluZCAiJFJQTV9CVUlMRF9ST09UIiIle19fcHJlZml4fSIvYmluIC10eXBlIGYgfAorCWdyZXAgLXYgLWUgJy9weXRob24le2xpYnZlcnN9L2NvbmZpZyQnIC1lICdfdGtpbnRlci5zbyQnID5tYWlucGtnLmZpbGVzCitmaW5kICIkUlBNX0JVSUxEX1JPT1QiIiV7X19wcmVmaXh9Ii9iaW4gLXR5cGUgZiAtbyAtdHlwZSBsIHwKIAlzZWQgInN8XiR7UlBNX0JVSUxEX1JPT1R9fC98IiB8CisJZ3JlcCAtdiAtZSAnL2Jpbi8ydG8zJXtiaW5zdWZmaXh9JCcgfAorCWdyZXAgLXYgLWUgJy9iaW4vcHlkb2Mle2JpbnN1ZmZpeH0kJyB8CisJZ3JlcCAtdiAtZSAnL2Jpbi9zbXRwZC5weSV7Ymluc3VmZml4fSQnIHwKIAlncmVwIC12IC1lICcvYmluL2lkbGUle2JpbnN1ZmZpeH0kJyA+Pm1haW5wa2cuZmlsZXMKIAogcm0gLWYgdG9vbHMuZmlsZXMKIGZpbmQgIiRSUE1fQlVJTERfUk9PVCIiJXtfX3ByZWZpeH0iLyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS9pZGxlbGliIFwKICAgICAgICIkUlBNX0JVSUxEX1JPT1QiIiV7X19wcmVmaXh9Ii8le2xpYmRpcm5hbWV9L3B5dGhvbiV7bGlidmVyc30vVG9vbHMgLXR5cGUgZiB8CiAgICAgICBzZWQgInN8XiR7UlBNX0JVSUxEX1JPT1R9fC98IiA+dG9vbHMuZmlsZXMKK2VjaG8gIiV7X19wcmVmaXh9Ii9iaW4vMnRvMyV7Ymluc3VmZml4fSA+PnRvb2xzLmZpbGVzCitlY2hvICIle19fcHJlZml4fSIvYmluL3B5ZG9jJXtiaW5zdWZmaXh9ID4+dG9vbHMuZmlsZXMKK2VjaG8gIiV7X19wcmVmaXh9Ii9iaW4vc210cGQucHkle2JpbnN1ZmZpeH0gPj50b29scy5maWxlcwogZWNobyAiJXtfX3ByZWZpeH0iL2Jpbi9pZGxlJXtiaW5zdWZmaXh9ID4+dG9vbHMuZmlsZXMKIAogIyMjIyMjCkBAIC0zNDEsMjcgKzM2MCwxMyBAQAogJWRlZmF0dHIoLSxyb290LHJvb3QpCiAlZG9jIE1pc2MvUkVBRE1FIE1pc2MvY2hlYXRzaGVldCBNaXNjL1BvcnRpbmcKICVkb2MgTElDRU5TRSBNaXNjL0FDS1MgTWlzYy9ISVNUT1JZIE1pc2MvTkVXUwotJXtfX3ByZWZpeH0vc2hhcmUvbWFuL21hbjEvcHl0aG9uJXtiaW5zdWZmaXh9LjEqCisle19tYW5kaXJ9L21hbjEvcHl0aG9uJXtiaW5zdWZmaXh9LjEqCiAKICVhdHRyKDc1NSxyb290LHJvb3QpICVkaXIgJXtfX3ByZWZpeH0vaW5jbHVkZS9weXRob24le2xpYnZlcnN9CiAlYXR0cig3NTUscm9vdCxyb290KSAlZGlyICV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS8KLSV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS8qLnR4dAotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9LyoucHkqCi0le19fcHJlZml4fS8le2xpYmRpcm5hbWV9L3B5dGhvbiV7bGlidmVyc30vcGRiLmRvYwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L2N1cnNlcwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L2Rpc3R1dGlscwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L2VuY29kaW5ncwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L3BsYXQtbGludXgyCi0le19fcHJlZml4fS8le2xpYmRpcm5hbWV9L3B5dGhvbiV7bGlidmVyc30vc2l0ZS1wYWNrYWdlcwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L3Rlc3QKLSV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS94bWwKLSV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS9lbWFpbAotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L2VtYWlsL21pbWUKLSV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS9zcWxpdGUzCi0le19fcHJlZml4fS8le2xpYmRpcm5hbWV9L3B5dGhvbiV7bGlidmVyc30vY29tcGlsZXIKLSV7X19wcmVmaXh9LyV7bGliZGlybmFtZX0vcHl0aG9uJXtsaWJ2ZXJzfS9ob3RzaG90Ci0le19fcHJlZml4fS8le2xpYmRpcm5hbWV9L3B5dGhvbiV7bGlidmVyc30vbG9nZ2luZwotJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9weXRob24le2xpYnZlcnN9L2xpYi1vbGQKKyVpZiAle2luY2x1ZGVfc2hhcmVkbGlifQorJXtfX3ByZWZpeH0vJXtsaWJkaXJuYW1lfS9saWJweXRob24qCislZW5kaWYKIAogJWZpbGVzIGRldmVsCiAlZGVmYXR0cigtLHJvb3Qscm9vdCkKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbXJjIGIvTWlzYy9WaW0vdmltcmMKaW5kZXggMjAxM2JmMy4uYzM5OGNjYSAxMDA2NDQKLS0tIGEvTWlzYy9WaW0vdmltcmMKKysrIGIvTWlzYy9WaW0vdmltcmMKQEAgLTE1LDM4ICsxNSwzNSBAQAogIiBPbmx5IGJhc2ljIHNldHRpbmdzIG5lZWRlZCB0byBlbmZvcmNlIHRoZSBzdHlsZSBndWlkZWxpbmVzIGFyZSBzZXQuCiAiIFNvbWUgc3VnZ2VzdGVkIG9wdGlvbnMgYXJlIGxpc3RlZCBidXQgY29tbWVudGVkIG91dCBhdCB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KIAotCi0iIE51bWJlciBvZiBzcGFjZXMgdG8gdXNlIGZvciBhbiBpbmRlbnQuCi0iIFRoaXMgd2lsbCBhZmZlY3QgQ3RybC1UIGFuZCAnYXV0b2luZGVudCcuCi0iIFB5dGhvbjogNCBzcGFjZXMKLSIgQzogNCBzcGFjZXMKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCpweXcgc2V0IHNoaWZ0d2lkdGg9NAotYXUgQnVmUmVhZCAqLmMsKi5oIHNldCBzaGlmdHdpZHRoPTgKLWF1IEJ1Zk5ld0ZpbGUgKi5jLCouaCBzZXQgc2hpZnR3aWR0aD00Ci0KICIgTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgcHJlLWV4aXN0aW5nIHRhYiBpcyBlcXVhbCB0by4KICIgRm9yIHRoZSBhbW91bnQgb2Ygc3BhY2UgdXNlZCBmb3IgYSBuZXcgdGFiIHVzZSBzaGlmdHdpZHRoLgotIiBQeXRob246IDgKLSIgQzogOAogYXUgQnVmUmVhZCxCdWZOZXdGaWxlICpweSwqcHl3LCouYywqLmggc2V0IHRhYnN0b3A9OAogCi0iIFJlcGxhY2UgdGFicyB3aXRoIHRoZSBlcXVpdmFsZW50IG51bWJlciBvZiBzcGFjZXMuCi0iIEFsc28gaGF2ZSBhbiBhdXRvY21kIGZvciBNYWtlZmlsZXMgc2luY2UgdGhleSByZXF1aXJlIGhhcmQgdGFicy4KLSIgUHl0aG9uOiB5ZXMKLSIgQzogeWVzCi0iIE1ha2VmaWxlOiBubwotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgZXhwYW5kdGFiCisiIFdoYXQgdG8gdXNlIGZvciBhbiBpbmRlbnQuCisiIFRoaXMgd2lsbCBhZmZlY3QgQ3RybC1UIGFuZCAnYXV0b2luZGVudCcuCisiIFB5dGhvbjogNCBzcGFjZXMKKyIgQzogdGFicyAocHJlLWV4aXN0aW5nIGZpbGVzKSBvciA0IHNwYWNlcyAobmV3IGZpbGVzKQorYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00CithdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBzZXQgZXhwYW5kdGFiCitmdSBTZWxlY3RfY19zdHlsZSgpCisgICAgaWYgc2VhcmNoKCdeXHQnLCAnbicsIDE1MCkKKyAgICAgICAgc2V0IHNoaWZ0d2lkdGg9OAorICAgICAgICBzZXQgbm9leHBhbmR0YWIKKyAgICBlbCAKKyAgICAgICAgc2V0IHNoaWZ0d2lkdGg9NAorICAgICAgICBzZXQgZXhwYW5kdGFiCisgICAgZW4KK2VuZGYKK2F1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIGNhbGwgU2VsZWN0X2Nfc3R5bGUoKQogYXUgQnVmUmVhZCxCdWZOZXdGaWxlIE1ha2VmaWxlKiBzZXQgbm9leHBhbmR0YWIKIAotIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZAorIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZC4KIGhpZ2hsaWdodCBCYWRXaGl0ZXNwYWNlIGN0ZXJtYmc9cmVkIGd1aWJnPXJlZAogCiAiIERpc3BsYXkgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpbiBQeXRob24gbW9kZSBhcyBiYWQuCi0iIFNob3VsZCBiZSBkb25lIGZvciBDIGNvZGUsIGJ1dCBub3QgdW50aWwgYWxsIGNvZGUgaGFzIGJlZW4gbW92ZWQgdG8gNC1zcGFjZQotIiAgIGluZGVudHMuCiBhdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9eXHRcKy8KICIgTWFrZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGJlIGZsYWdnZWQgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9cc1wrJC8KK2F1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLnB5LCoucHl3LCouYywqLmgsKi5yc3QgbWF0Y2ggQmFkV2hpdGVzcGFjZSAvXHNcKyQvCiAKICIgV3JhcCB0ZXh0IGFmdGVyIGEgY2VydGFpbiBudW1iZXIgb2YgY2hhcmFjdGVycwogIiBQeXRob246IDc5IApkaWZmIC0tZ2l0IGEvTWlzYy9idWlsZC5zaCBiL01pc2MvYnVpbGQuc2gKaW5kZXggMDNjMGQ3Yi4uZWNiZTU3OSAxMDA3NTUKLS0tIGEvTWlzYy9idWlsZC5zaAorKysgYi9NaXNjL2J1aWxkLnNoCkBAIC01Miw5ICs1Miw5IEBACiAjRkFJTFVSRV9DQz0ib3B0aW9uYWwtLXVuY29tbWVudCBhbmQgc2V0IHRvIGRlc2lyZWQgYWRkcmVzcyIKIAogUkVNT1RFX1NZU1RFTT0ibmVhbEBkaW5zZGFsZS5weXRob24ub3JnIgotUkVNT1RFX0RJUj0iL2RhdGEvZnRwLnB5dGhvbi5vcmcvcHViL3d3dy5weXRob24ub3JnL2RvYy8zLjEiCitSRU1PVEVfRElSPSIvZGF0YS9mdHAucHl0aG9uLm9yZy9wdWIvZG9jcy5weXRob24ub3JnL2Rldi9weTNrIgogUkVTVUxUX0ZJTEU9IiRESVIvYnVpbGQvaW5kZXguaHRtbCIKLUlOU1RBTExfRElSPSIvdG1wL3B5dGhvbi10ZXN0LTMuMS9sb2NhbCIKK0lOU1RBTExfRElSPSIvdG1wL3B5dGhvbi10ZXN0LTMuMi9sb2NhbCIKIFJTWU5DX09QVFM9Ii1DIC1lIHNzaCAtcmxvZ0QiCiAKICMgQWx3YXlzIHJ1biB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgUHl0aG9uLgpAQCAtMjE0LDcgKzIxNCw3IEBACiAgICAgICAgICAgICAjIyBtYWtlIGFuZCBydW4gYmFzaWMgdGVzdHMKICAgICAgICAgICAgIEY9bWFrZS10ZXN0Lm91dAogICAgICAgICAgICAgc3RhcnQ9YGN1cnJlbnRfdGltZWAKLSAgICAgICAgICAgICRQWVRIT04gJFJFR1JURVNUX0FSR1MgLXUgdXJsZmV0Y2ggPiYgYnVpbGQvJEYKKyAgICAgICAgICAgICRQWVRIT04gJFJFR1JURVNUX0FSR1MgLVcgLXUgdXJsZmV0Y2ggPiYgYnVpbGQvJEYKICAgICAgICAgICAgIE5VTV9GQUlMVVJFUz1gY291bnRfZmFpbHVyZXMgYnVpbGQvJEZgCiAgICAgICAgICAgICBwbGFjZV9zdW1tYXJ5X2ZpcnN0IGJ1aWxkLyRGCiAgICAgICAgICAgICB1cGRhdGVfc3RhdHVzICJUZXN0aW5nIGJhc2ljcyAoJE5VTV9GQUlMVVJFUyBmYWlsdXJlcykiICIkRiIgJHN0YXJ0CkBAIC0yMjIsNyArMjIyLDcgQEAKIAogICAgICAgICAgICAgRj1tYWtlLXRlc3Qtb3B0Lm91dAogICAgICAgICAgICAgc3RhcnQ9YGN1cnJlbnRfdGltZWAKLSAgICAgICAgICAgICRQWVRIT04gLU8gJFJFR1JURVNUX0FSR1MgLXUgdXJsZmV0Y2ggPiYgYnVpbGQvJEYKKyAgICAgICAgICAgICRQWVRIT04gLU8gJFJFR1JURVNUX0FSR1MgLVcgLXUgdXJsZmV0Y2ggPiYgYnVpbGQvJEYKICAgICAgICAgICAgIE5VTV9GQUlMVVJFUz1gY291bnRfZmFpbHVyZXMgYnVpbGQvJEZgCiAgICAgICAgICAgICBwbGFjZV9zdW1tYXJ5X2ZpcnN0IGJ1aWxkLyRGCiAgICAgICAgICAgICB1cGRhdGVfc3RhdHVzICJUZXN0aW5nIG9wdCAoJE5VTV9GQUlMVVJFUyBmYWlsdXJlcykiICIkRiIgJHN0YXJ0CkBAIC0yNDUsNyArMjQ1LDcgQEAKICAgICAgICAgICAgIHN0YXJ0PWBjdXJyZW50X3RpbWVgCiAgICAgICAgICAgICAjIyBza2lwIGN1cnNlcyB3aGVuIHJ1bm5pbmcgZnJvbSBjcm9uIHNpbmNlIHRoZXJlJ3Mgbm8gdGVybWluYWwKICAgICAgICAgICAgICMjIHNraXAgc291bmQgc2luY2UgaXQncyBub3Qgc2V0dXAgb24gdGhlIFBTRiBib3ggKC9kZXYvZHNwKQotICAgICAgICAgICAgJFBZVEhPTiAkUkVHUlRFU1RfQVJHUyAtdWFsbCAteCB0ZXN0X2N1cnNlcyB0ZXN0X2xpbnV4YXVkaW9kZXYgdGVzdF9vc3NhdWRpb2RldiAkX0FMV0FZU19TS0lQID4mIGJ1aWxkLyRGCisgICAgICAgICAgICAkUFlUSE9OICRSRUdSVEVTVF9BUkdTIC1XIC11YWxsIC14IHRlc3RfY3Vyc2VzIHRlc3RfbGludXhhdWRpb2RldiB0ZXN0X29zc2F1ZGlvZGV2ICZfQUxXQVlTX1NLSVAgPiYgYnVpbGQvJEYKICAgICAgICAgICAgIE5VTV9GQUlMVVJFUz1gY291bnRfZmFpbHVyZXMgYnVpbGQvJEZgCiAgICAgICAgICAgICBwbGFjZV9zdW1tYXJ5X2ZpcnN0IGJ1aWxkLyRGCiAgICAgICAgICAgICB1cGRhdGVfc3RhdHVzICJUZXN0aW5nIGFsbCBleGNlcHQgY3Vyc2VzIGFuZCBzb3VuZCAoJE5VTV9GQUlMVVJFUyBmYWlsdXJlcykiICIkRiIgJHN0YXJ0CmRpZmYgLS1naXQgYS9NaXNjL2NoZWF0c2hlZXQgYi9NaXNjL2NoZWF0c2hlZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjNWRkY2IuLjAwMDAwMDAKLS0tIGEvTWlzYy9jaGVhdHNoZWV0CisrKyAvZGV2L251bGwKQEAgLTEsMjE4MSArMCwwIEBACi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5dGhvbiAyLjMgUXVpY2sgUmVmZXJlbmNlCi0KLQotIDI1IEphbiAyMDAzICB1cGdyYWRlZCBieSBSYXltb25kIEhldHRpbmdlciBmb3IgUHl0aG9uIDIuMwotIDE2IE1heSAyMDAxICB1cGdyYWRlZCBieSBSaWNoYXJkIEdydWV0IGFuZCBTaW1vbiBCcnVubmluZyBmb3IgUHl0aG9uIDIuMAotIDIwMDAvMDcvMTggIHVwZ3JhZGVkIGJ5IFJpY2hhcmQgR3J1ZXQsIHJncnVldEBpbnRyYXdhcmUuY29tIGZvciBQeXRob24gMS41LjIKLWZyb20gVjEuMyByZWYKLTE5OTUvMTAvMzAsIGJ5IENocmlzIEhvZmZtYW5uLCBjaG9mZm1hbkB2aWNvcnAuY29tCi0KLUJhc2VkIG9uOgotICAgIFB5dGhvbiBCZXN0aWFyeSwgQXV0aG9yOiBLZW4gTWFuaGVpbWVyLCBrZW4ubWFuaGVpbWVyQG5pc3QuZ292Ci0gICAgUHl0aG9uIG1hbnVhbHMsIEF1dGhvcnM6IEd1aWRvIHZhbiBSb3NzdW0gYW5kIEZyZWQgRHJha2UKLSAgICBXaGF0J3MgbmV3IGluIFB5dGhvbiAyLjAsIEF1dGhvcnM6IEEuTS4gS3VjaGxpbmcgYW5kIE1vc2hlIFphZGthCi0gICAgcHl0aG9uLW1vZGUuZWwsIEF1dGhvcjogVGltIFBldGVycywgdGltX29uZUBlbWFpbC5tc24uY29tCi0KLSAgICBhbmQgdGhlIHJlYWRlcnMgb2YgY29tcC5sYW5nLnB5dGhvbgotCi1QeXRob24ncyBuZXN0OiBodHRwOi8vd3d3LnB5dGhvbi5vcmcgICAgIERldmVsb3BlbWVudDogaHR0cDovLwotcHl0aG9uLnNvdXJjZWZvcmdlLm5ldC8gICAgQWN0aXZlUHl0aG9uIDogaHR0cDovL3d3dy5BY3RpdmVTdGF0ZS5jb20vQVNQTi8KLVB5dGhvbi8KLW5ld3Nncm91cDogY29tcC5sYW5nLnB5dGhvbiAgSGVscCBkZXNrOiBoZWxwQHB5dGhvbi5vcmcKLVJlc291cmNlczogaHR0cDovL3N0YXJzaGlwLnB5dGhvbi5uZXQvCi0gICAgICAgICAgIGh0dHA6Ly93d3cudmV4Lm5ldC9wYXJuYXNzdXMvCi0gICAgICAgICAgIGh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL0Nvb2tib29rL1B5dGhvbgotRkFROiAgICAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvY2dpLWJpbi9mYXF3LnB5Ci1GdWxsIGRvY3VtZW50YXRpb246IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvCi1FeGNlbGxlbnQgcmVmZXJlbmNlIGJvb2tzOgotICAgICAgICAgICBQeXRob24gRXNzZW50aWFsIFJlZmVyZW5jZSBieSBEYXZpZCBCZWF6bGV5IChOZXcgUmlkZXJzKQotICAgICAgICAgICBQeXRob24gUG9ja2V0IFJlZmVyZW5jZSBieSBNYXJrIEx1dHogKE8nUmVpbGx5KQotCi0KLUludm9jYXRpb24gT3B0aW9ucwotCi1weXRob24gWy1kaU9TdHVVdnhYP10gWy1jIGNvbW1hbmQgfCBzY3JpcHQgfCAtIF0gW2FyZ3NdCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9jYXRpb24gT3B0aW9ucwotT3B0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmZmVjdAotLWMgY21kICBwcm9ncmFtIHBhc3NlZCBpbiBhcyBzdHJpbmcgKHRlcm1pbmF0ZXMgb3B0aW9uIGxpc3QpCi0tZCAgICAgIE91dHB1dHMgcGFyc2VyIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAoYWxzbyBQWVRIT05ERUJVRz14KQotLUUgICAgICBpZ25vcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzIChzdWNoIGFzIFBZVEhPTlBBVEgpCi0taCAgICAgIHByaW50IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0taSAgICAgIEluc3BlY3QgaW50ZXJhY3RpdmVseSBhZnRlciBydW5uaW5nIHNjcmlwdCAoYWxzbyBQWVRIT05JTlNQRUNUPXgpIGFuZAotICAgICAgICBmb3JjZSBwcm9tcHRzLCBldmVuIGlmIHN0ZGluIGFwcGVhcnMgbm90IHRvIGJlIGEgdGVybWluYWwKLS1tIG1vZCAgcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0Ci0tTyAgICAgIG9wdGltaXplIGdlbmVyYXRlZCBieXRlY29kZSAoYSB0YWQ7IGFsc28gUFlUSE9OT1BUSU1JWkU9eCkKLS1PTyAgICAgcmVtb3ZlIGRvYy1zdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSAtTyBvcHRpbWl6YXRpb25zCi0tUSBhcmcgIGRpdmlzaW9uIG9wdGlvbnM6IC1Rb2xkIChkZWZhdWx0KSwgLVF3YXJuLCAtUXdhcm5hbGwsIC1RbmV3Ci0tUyAgICAgIERvbid0IHBlcmZvcm0gJ2ltcG9ydCBzaXRlJyBvbiBpbml0aWFsaXphdGlvbgotLXUgICAgICBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGRvdXQgYW5kIHN0ZGVyciAoYWxzbyBQWVRIT05VTkJVRkZFUkVEPXgpLgotLXYgICAgICBWZXJib3NlICh0cmFjZSBpbXBvcnQgc3RhdGVtZW50cykgKGFsc28gUFlUSE9OVkVSQk9TRT14KQotLVcgYXJnIDogd2FybmluZyBjb250cm9sIChhcmcgaXMgYWN0aW9uOm1lc3NhZ2U6Y2F0ZWdvcnk6bW9kdWxlOmxpbmVubykKLS14ICAgICAgU2tpcCBmaXJzdCBsaW5lIG9mIHNvdXJjZSwgYWxsb3dpbmcgdXNlIG9mIG5vbi11bml4IEZvcm1zIG9mICMhY21kCi0tPyAgICAgIEhlbHAhCi0tYyAgICAgIFNwZWNpZnkgdGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSAoc2VlIG5leHQgc2VjdGlvbikuIFRoaXMgdGVybWluYXRlcyB0aGUKLWNvbW1hbmQgb3B0aW9uIGxpc3QgKGZvbGxvd2luZyBvcHRpb25zIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvIHRoZSBjb21tYW5kKS4KLSAgICAgICAgdGhlIG5hbWUgb2YgYSBweXRob24gZmlsZSAoLnB5KSB0byBleGVjdXRlIHJlYWQgZnJvbSBzdGRpbi4KLXNjcmlwdCAgQW55dGhpbmcgYWZ0ZXJ3YXJkIGlzIHBhc3NlZCBhcyBvcHRpb25zIHRvIHB5dGhvbiBzY3JpcHQgb3IgY29tbWFuZCwKLSAgICAgICAgbm90IGludGVycHJldGVkIGFzIGFuIG9wdGlvbiB0byBpbnRlcnByZXRlciBpdHNlbGYuCi1hcmdzICAgIHBhc3NlZCB0byBzY3JpcHQgb3IgY29tbWFuZCAoaW4gc3lzLmFyZ3ZbMTpdKQotICAgICAgICBJZiBubyBzY3JpcHQgb3IgY29tbWFuZCwgUHl0aG9uIGVudGVycyBpbnRlcmFjdGl2ZSBtb2RlLgotCi0gICogQXZhaWxhYmxlIElERXMgaW4gc3RkIGRpc3RyaWI6IElETEUgKHRraW50ZXIgYmFzZWQsIHBvcnRhYmxlKSwgUHl0aG9ud2luCi0gICAgKFdpbmRvd3MpLgotCi0KLQotRW52aXJvbm1lbnQgdmFyaWFibGVzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW52aXJvbm1lbnQgdmFyaWFibGVzCi0gICAgVmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZmZlY3QKLVBZVEhPTkhPTUUgICAgICAgQWx0ZXJuYXRlIHByZWZpeCBkaXJlY3RvcnkgKG9yIHByZWZpeDtleGVjX3ByZWZpeCkuIFRoZQotICAgICAgICAgICAgICAgICBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aCB1c2VzIHByZWZpeC9saWIKLSAgICAgICAgICAgICAgICAgQXVnbWVudHMgdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggZm9yIG1vZHVsZSBmaWxlcy4gVGhlIGZvcm1hdAotICAgICAgICAgICAgICAgICBpcyB0aGUgc2FtZSBhcyB0aGUgc2hlbGwncyAkUEFUSDogb25lIG9yIG1vcmUgZGlyZWN0b3J5Ci0gICAgICAgICAgICAgICAgIHBhdGhuYW1lcyBzZXBhcmF0ZWQgYnkgJzonIG9yICc7JyB3aXRob3V0IHNwYWNlcyBhcm91bmQKLSAgICAgICAgICAgICAgICAgKHNlbWktKWNvbG9ucyEKLVBZVEhPTlBBVEggICAgICAgT24gV2luZG93cyBmaXJzdCBzZWFyY2ggZm9yIFJlZ2lzdHJ5IGtleSBIS0VZX0xPQ0FMX01BQ0hJTkVcCi0gICAgICAgICAgICAgICAgIFNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXHgueVxQeXRob25QYXRoIChkZWZhdWx0IHZhbHVlKS4gWW91Ci0gICAgICAgICAgICAgICAgIG1heSBhbHNvIGRlZmluZSBhIGtleSBuYW1lZCBhZnRlciB5b3VyIGFwcGxpY2F0aW9uIHdpdGggYQotICAgICAgICAgICAgICAgICBkZWZhdWx0IHN0cmluZyB2YWx1ZSBnaXZpbmcgdGhlIHJvb3QgZGlyZWN0b3J5IHBhdGggb2YgeW91cgotICAgICAgICAgICAgICAgICBhcHAuCi0gICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgdGhlIG5hbWUgb2YgYSByZWFkYWJsZSBmaWxlLCB0aGUgUHl0aG9uIGNvbW1hbmRzIGluCi1QWVRIT05TVEFSVFVQICAgIHRoYXQgZmlsZSBhcmUgZXhlY3V0ZWQgYmVmb3JlIHRoZSBmaXJzdCBwcm9tcHQgaXMgZGlzcGxheWVkIGluCi0gICAgICAgICAgICAgICAgIGludGVyYWN0aXZlIG1vZGUgKG5vIGRlZmF1bHQpLgotUFlUSE9OREVCVUcgICAgICBJZiBub24tZW1wdHksIHNhbWUgYXMgLWQgb3B0aW9uCi1QWVRIT05JTlNQRUNUICAgIElmIG5vbi1lbXB0eSwgc2FtZSBhcyAtaSBvcHRpb24KLVBZVEhPTlNVUFBSRVNTICAgSWYgbm9uLWVtcHR5LCBzYW1lIGFzIC1zIG9wdGlvbgotUFlUSE9OVU5CVUZGRVJFRCBJZiBub24tZW1wdHksIHNhbWUgYXMgLXUgb3B0aW9uCi1QWVRIT05WRVJCT1NFICAgIElmIG5vbi1lbXB0eSwgc2FtZSBhcyAtdiBvcHRpb24KLVBZVEhPTkNBU0VPSyAgICAgSWYgbm9uLWVtcHR5LCBpZ25vcmUgY2FzZSBpbiBmaWxlL21vZHVsZSBuYW1lcyAoaW1wb3J0cykKLQotCi0KLQotTm90YWJsZSBsZXhpY2FsIGVudGl0aWVzCi0KLUtleXdvcmRzCi0KLSAgICBhbmQgICAgICAgZGVsICAgICAgIGZvciAgICAgICBpcyAgICAgICAgcmFpc2UKLSAgICBhc3NlcnQgICAgZWxpZiAgICAgIGZyb20gICAgICBsYW1iZGEgICAgcmV0dXJuCi0gICAgYnJlYWsgICAgIGVsc2UgICAgICBnbG9iYWwgICAgbm90ICAgICAgIHRyeQotICAgIGNsYXNzICAgICBleGNlcHQgICAgaWYgICAgICAgIG9yICAgICAgICB3aGlsZQotICAgIGNvbnRpbnVlICBleGVjICAgICAgaW1wb3J0ICAgIHBhc3MgICAgICB5aWVsZAotICAgIGRlZiAgICAgICBmaW5hbGx5ICAgaW4gICAgICAgIHByaW50Ci0KLSAgKiAobGlzdCBvZiBrZXl3b3JkcyBpbiBzdGQgbW9kdWxlOiBrZXl3b3JkKQotICAqIElsbGVnaXRpbWF0ZSBUb2tlbnMgKG9ubHkgdmFsaWQgaW4gc3RyaW5ncyk6IEAgJCA/Ci0gICogQSBzdGF0ZW1lbnQgbXVzdCBhbGwgYmUgb24gYSBzaW5nbGUgbGluZS4gVG8gYnJlYWsgYSBzdGF0ZW1lbnQgb3ZlcgotICAgIG11bHRpcGxlIGxpbmVzIHVzZSAiXCIsIGFzIHdpdGggdGhlIEMgcHJlcHJvY2Vzc29yLgotICAgIEV4Y2VwdGlvbjogY2FuIGFsd2F5cyBicmVhayB3aGVuIGluc2lkZSBhbnkgKCksIFtdLCBvciB7fSBwYWlyLCBvciBpbgotICAgIHRyaXBsZS1xdW90ZWQgc3RyaW5ncy4KLSAgKiBNb3JlIHRoYW4gb25lIHN0YXRlbWVudCBjYW4gYXBwZWFyIG9uIGEgbGluZSBpZiB0aGV5IGFyZSBzZXBhcmF0ZWQgd2l0aAotICAgIHNlbWljb2xvbnMgKCI7IikuCi0gICogQ29tbWVudHMgc3RhcnQgd2l0aCAiIyIgYW5kIGNvbnRpbnVlIHRvIGVuZCBvZiBsaW5lLgotCi1JZGVudGlmaWVycwotCi0gICAgICAgIChsZXR0ZXIgfCAiXyIpICAobGV0dGVyIHwgZGlnaXQgfCAiXyIpKgotCi0gICogUHl0aG9uIGlkZW50aWZpZXJzIGtleXdvcmRzLCBhdHRyaWJ1dGVzLCBldGMuIGFyZSBjYXNlLXNlbnNpdGl2ZS4KLSAgKiBTcGVjaWFsIGZvcm1zOiBfaWRlbnQgKG5vdCBpbXBvcnRlZCBieSAnZnJvbSBtb2R1bGUgaW1wb3J0IConKTsgX19pZGVudF9fCi0gICAgKHN5c3RlbSBkZWZpbmVkIG5hbWUpOwotICAgICAgICAgICAgICAgX19pZGVudCAoY2xhc3MtcHJpdmF0ZSBuYW1lIG1hbmdsaW5nKQotCi1TdHJpbmdzCi0KLSAgICAiYSBzdHJpbmcgZW5jbG9zZWQgYnkgZG91YmxlIHF1b3RlcyIKLSAgICAnYW5vdGhlciBzdHJpbmcgZGVsaW1pdGVkIGJ5IHNpbmdsZSBxdW90ZXMgYW5kIHdpdGggYSAiIGluc2lkZScKLSAgICAnJydhIHN0cmluZyBjb250YWluaW5nIGVtYmVkZGVkIG5ld2xpbmVzIGFuZCBxdW90ZSAoJykgbWFya3MsIGNhbiBiZQotICAgIGRlbGltaXRlZCB3aXRoIHRyaXBsZSBxdW90ZXMuJycnCi0gICAgIiIiIG1heSBhbHNvIHVzZSAzLSBkb3VibGUgcXVvdGVzIGFzIGRlbGltaXRlcnMgIiIiCi0gICAgdSdhIHVuaWNvZGUgc3RyaW5nJyAgIFUiQW5vdGhlciB1bmljb2RlIHN0cmluZyIKLSAgICByJ2EgcmF3IHN0cmluZyB3aGVyZSBcIGFyZSBrZXB0IChsaXRlcmFsaXplZCk6IGhhbmR5IGZvciByZWd1bGFyCi0gICAgZXhwcmVzc2lvbnMgYW5kIHdpbmRvd3MgcGF0aHMhJwotICAgIFIiYW5vdGhlciByYXcgc3RyaW5nIiAgICAtLSByYXcgc3RyaW5ncyBjYW5ub3QgZW5kIHdpdGggYSBcCi0gICAgdXInYSB1bmljb2RlIHJhdyBzdHJpbmcnICAgVVIiYW5vdGhlciByYXcgdW5pY29kZSIKLQotICAgICAgICBVc2UgXCBhdCBlbmQgb2YgbGluZSB0byBjb250aW51ZSBhIHN0cmluZyBvbiBuZXh0IGxpbmUuCi0gICAgICAgIGFkamFjZW50IHN0cmluZ3MgYXJlIGNvbmNhdGVuZWQsIGUuZy4gJ01vbnR5JyAnIFB5dGhvbicgaXMgdGhlIHNhbWUgYXMKLSAgICAgICAgJ01vbnR5IFB5dGhvbicuCi0gICAgICAgIHUnaGVsbG8nICsgJyB3b3JsZCcgIC0tPiB1J2hlbGxvIHdvcmxkJyAgIChjb2VyY2VkIHRvIHVuaWNvZGUpCi0KLSAgICBTdHJpbmcgTGl0ZXJhbCBFc2NhcGVzCi0KLSAgICAgXG5ld2xpbmUgIElnbm9yZWQgKGVzY2FwZSBuZXdsaW5lKQotICAgICBcXCBCYWNrc2xhc2ggKFwpICAgICAgICBcZSBFc2NhcGUgKEVTQykgICAgICAgIFx2IFZlcnRpY2FsIFRhYiAoVlQpCi0gICAgIFwnIFNpbmdsZSBxdW90ZSAoJykgICAgIFxmIEZvcm1mZWVkIChGRikgICAgICAgXE9PTyBjaGFyIHdpdGggb2N0YWwgdmFsdWUgT09PCi0gICAgIFwiIERvdWJsZSBxdW90ZSAoIikgICAgIFxuIExpbmVmZWVkIChMRikKLSAgICAgXGEgQmVsbCAoQkVMKSAgICAgICAgICAgXHIgQ2FycmlhZ2UgUmV0dXJuIChDUikgXHhISCAgY2hhciB3aXRoIGhleCB2YWx1ZSBISAotICAgICBcYiBCYWNrc3BhY2UgKEJTKSAgICAgICBcdCBIb3Jpem9udGFsIFRhYiAoVEFCKQotICAgICBcdUhISEggIHVuaWNvZGUgY2hhciB3aXRoIGhleCB2YWx1ZSBISEhILCBjYW4gb25seSBiZSB1c2VkIGluIHVuaWNvZGUgc3RyaW5nCi0gICAgIFxVSEhISEhISEggIHVuaWNvZGUgY2hhciB3aXRoIGhleCB2YWx1ZSBISEhISEhISCwgY2FuIG9ubHkgYmUgdXNlZCBpbiB1bmljb2RlIHN0cmluZwotICAgICBcQW55T3RoZXJDaGFyIGlzIGxlZnQgYXMtaXMKLQotICAqIE5VTCBieXRlIChcMDAwKSBpcyBOT1QgYW4gZW5kLW9mLXN0cmluZyBtYXJrZXI7IE5VTHMgbWF5IGJlIGVtYmVkZGVkIGluCi0gICAgc3RyaW5ncy4KLSAgKiBTdHJpbmdzIChhbmQgdHVwbGVzKSBhcmUgaW1tdXRhYmxlOiB0aGV5IGNhbm5vdCBiZSBtb2RpZmllZC4KLQotTnVtYmVycwotCi0gICAgRGVjaW1hbCBpbnRlZ2VyOiAxMjM0LCAxMjM0NTY3ODkwNTQ2Mzc4OTQwTCAgICAgICAgKG9yIGwpCi0gICAgT2N0YWwgaW50ZWdlcjogMDE3NywgMDE3Nzc3Nzc3Nzc3Nzc3Nzc3NyAoYmVnaW4gd2l0aCBhIDApCi0gICAgSGV4IGludGVnZXI6IDB4RkYsIDBYRkZGRmZmZmZGRkZGRkZGRkZGIChiZWdpbiB3aXRoIDB4IG9yIDBYKQotICAgIExvbmcgaW50ZWdlciAodW5saW1pdGVkIHByZWNpc2lvbik6IDEyMzQ1Njc4OTAxMjM0NTYKLSAgICBGbG9hdCAoZG91YmxlIHByZWNpc2lvbik6IDMuMTRlLTEwLCAuMDAxLCAxMC4sIDFFMwotICAgIENvbXBsZXg6IDFKLCAyKzNKLCA0KzVqIChlbmRzIHdpdGggSiBvciBqLCArIHNlcGFyYXRlcyAoZmxvYXQpIHJlYWwgYW5kCi0gICAgaW1hZ2luYXJ5IHBhcnRzKQotCi1TZXF1ZW5jZXMKLQotICAqIFN0cmluZyBvZiBsZW5ndGggMCwgMSwgMiAoc2VlIGFib3ZlKQotICAgICcnLCAnMScsICIxMiIsICdoZWxsb1xuJwotICAqIFR1cGxlIG9mIGxlbmd0aCAwLCAxLCAyLCBldGM6Ci0gICAgKCkgKDEsKSAoMSwyKSAgICAgIyBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwgaWYgbGVuID4gMAotICAqIExpc3Qgb2YgbGVuZ3RoIDAsIDEsIDIsIGV0YzoKLSAgICBbXSBbMV0gWzEsMl0KLQotSW5kZXhpbmcgaXMgMC1iYXNlZC4gTmVnYXRpdmUgaW5kaWNlcyAodXN1YWxseSkgbWVhbiBjb3VudCBiYWNrd2FyZHMgZnJvbSBlbmQKLW9mIHNlcXVlbmNlLgotCi1TZXF1ZW5jZSBzbGljaW5nIFtzdGFydGluZy1hdC1pbmRleCA6IGJ1dC1sZXNzLXRoYW4taW5kZXhdLiBTdGFydCBkZWZhdWx0cyB0bwotJzAnOyBFbmQgZGVmYXVsdHMgdG8gJ3NlcXVlbmNlLWxlbmd0aCcuCi0KLWEgPSAoMCwxLDIsMyw0LDUsNiw3KQotICAgIGFbM10gPT0+IDMKLSAgICBhWy0xXSA9PT4gNwotICAgIGFbMjo0XSA9PT4gKDIsIDMpCi0gICAgYVsxOl0gPT0+ICgxLCAyLCAzLCA0LCA1LCA2LCA3KQotICAgIGFbOjNdID09PiAoMCwgMSwgMikKLSAgICBhWzpdID09PiAoMCwxLDIsMyw0LDUsNiw3KSAgIyBtYWtlcyBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlLgotCi1EaWN0aW9uYXJpZXMgKE1hcHBpbmdzKQotCi0gICAge30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFplcm8gbGVuZ3RoIGVtcHR5IGRpY3Rpb25hcnkKLSAgICB7MSA6ICdmaXJzdCd9ICAgICAgICAgICAgICAgICAgICMgRGljdGlvbmFyeSB3aXRoIG9uZSAoa2V5LCB2YWx1ZSkgcGFpcgotICAgIHsxIDogJ2ZpcnN0JywgICduZXh0JzogJ3NlY29uZCd9Ci0gICAgZGljdChbKCdvbmUnLDEpLCgndHdvJywyKV0pICAgICAjIENvbnN0cnVjdCBhIGRpY3QgZnJvbSBhbiBpdGVtIGxpc3QKLSAgICBkaWN0KCdvbmUnPTEsICd0d28nPTIpICAgICAgICAgICMgQ29uc3RydWN0IGEgZGljdCB1c2luZyBrZXl3b3JkIGFyZ3MKLSAgICBkaWN0LmZyb21rZXlzKFsnb25lJywgJ2tleXMnXSkgICMgQ29uc3RydWN0IGEgZGljdCBmcm9tIGEgc2VxdWVuY2UKLQotT3BlcmF0b3JzIGFuZCB0aGVpciBldmFsdWF0aW9uIG9yZGVyCi0KLSAgICAgICAgICAgICAgICAgICAgIE9wZXJhdG9ycyBhbmQgdGhlaXIgZXZhbHVhdGlvbiBvcmRlcgotSGlnaGVzdCAgICAgICAgICAgICBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWVudAotICAgICAgICAoLi4uKSBbLi4uXSB7Li4ufSBgLi4uYCAgICAgICAgICAgVHVwbGUsIGxpc3QgJiBkaWN0LiBjcmVhdGlvbjsgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252LgotICAgICAgICBzW2ldICBzW2k6al0gIHMuYXR0ciBmKC4uLikgICAgICAgaW5kZXhpbmcgJiBzbGljaW5nOyBhdHRyaWJ1dGVzLCBmY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxzCi0gICAgICAgICt4LCAteCwgfnggICAgICAgICAgICAgICAgICAgICAgICBVbmFyeSBvcGVyYXRvcnMKLSAgICAgICAgeCoqeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvd2VyCi0gICAgICAgIHgqeSAgeC95ICB4JXkgeC8veSAgICAgICAgICAgICAgICBtdWx0LCBkaXZpc2lvbiwgbW9kdWxvLCBmbG9vciBkaXZpc2lvbgotICAgICAgICB4K3kgIHgteSAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb24sIHN1YnRyYWN0aW9uCi0gICAgICAgIHg8PHkgICB4Pj55ICAgICAgICAgICAgICAgICAgICAgICBCaXQgc2hpZnRpbmcKLSAgICAgICAgeCZ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpdHdpc2UgYW5kCi0gICAgICAgIHheeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXR3aXNlIGV4Y2x1c2l2ZSBvcgotICAgICAgICB4fHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQml0d2lzZSBvcgotICAgICAgICB4PHkgIHg8PXkgIHg+eSAgeD49eSAgeD09eSB4IT15ICAgQ29tcGFyaXNvbiwKLSAgICAgICAgeCBpcyB5ICAgeCBpcyBub3QgeSAgICAgICAgICAgICAgIG1lbWJlcnNoaXAKLSAgICAgICAgeCBpbiBzICAgeCBub3QgaW4gcwotICAgICAgICBub3QgeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBuZWdhdGlvbgotICAgICAgICB4IGFuZCB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBhbmQKLSAgICAgICAgeCBvciB5ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gb3IKLUxvd2VzdCAgbGFtYmRhIGFyZ3M6IGV4cHIgICAgICAgICAgICAgICAgIGFub255bW91cyBmdW5jdGlvbgotCi1BbHRlcm5hdGUgbmFtZXMgYXJlIGRlZmluZWQgaW4gbW9kdWxlIG9wZXJhdG9yIChlLmcuIF9fYWRkX18gYW5kIGFkZCBmb3IgKykKLU1vc3Qgb3BlcmF0b3JzIGFyZSBvdmVycmlkYWJsZS4KLQotTWFueSBiaW5hcnkgb3BlcmF0b3JzIGFsc28gc3VwcG9ydCBhdWdtZW50ZWQgYXNzaWdubWVudDoKLSAgICAgICAgeCArPSAxICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2FtZSBhcyB4ID0geCArIDEKLQotCi1CYXNpYyBUeXBlcyBhbmQgVGhlaXIgT3BlcmF0aW9ucwotCi1Db21wYXJpc29ucyAoZGVmaW5lZCBiZXR3ZWVuICphbnkqIHR5cGVzKQotCi0gICAgICAgICAgICAgICBDb21wYXJpc29ucwotQ29tcGFyaXNvbiAgICAgICAgIE1lYW5pbmcgICAgICAgICAgTm90ZXMKLTwgICAgICAgICAgc3RyaWN0bHkgbGVzcyB0aGFuICAgICAgICAoMSkKLTw9ICAgICAgICAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvCi0+ICAgICAgICAgIHN0cmljdGx5IGdyZWF0ZXIgdGhhbgotPj0gICAgICAgICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KLT09ICAgICAgICAgZXF1YWwgdG8KLSE9ICAgICAgICAgbm90IGVxdWFsIHRvCi1pcyAgICAgICAgIG9iamVjdCBpZGVudGl0eSAgICAgICAgICAgKDIpCi1pcyBub3QgICAgIG5lZ2F0ZWQgb2JqZWN0IGlkZW50aXR5ICAgKDIpCi0KLU5vdGVzIDoKLSAgICBDb21wYXJpc29uIGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuIGZvciBhIGdpdmVuIGNsYXNzIGJ5IGRlZmluaW5nIHNwZWNpYWwKLW1ldGhvZCBfX2NtcF9fLgotICAgIFRoZSBhYm92ZSBjb21wYXJpc29ucyByZXR1cm4gVHJ1ZSBvciBGYWxzZSB3aGljaCBhcmUgb2YgdHlwZSBib29sCi0oYSBzdWJjbGFzcyBvZiBpbnQpIGFuZCBiZWhhdmUgZXhhY3RseSBhcyAxIG9yIDAgZXhjZXB0IGZvciB0aGVpciB0eXBlIGFuZAotdGhhdCB0aGV5IHByaW50IGFzIFRydWUgb3IgRmFsc2UgaW5zdGVhZCBvZiAxIG9yIDAuCi0gICAgKDEpIFggPCBZIDwgWiA8IFcgaGFzIGV4cGVjdGVkIG1lYW5pbmcsIHVubGlrZSBDCi0gICAgKDIpIENvbXBhcmUgb2JqZWN0IGlkZW50aXRpZXMgKGkuZS4gaWQob2JqZWN0KSksIG5vdCBvYmplY3QgdmFsdWVzLgotCi1Cb29sZWFuIHZhbHVlcyBhbmQgb3BlcmF0b3JzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICBCb29sZWFuIHZhbHVlcyBhbmQgb3BlcmF0b3JzCi0gICAgICAgICAgICAgIFZhbHVlIG9yIE9wZXJhdG9yICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgICAgICAgICAgIE5vdGVzCi1Ob25lLCBudW1lcmljIHplcm9zLCBlbXB0eSBzZXF1ZW5jZXMgYW5kICAgICAgRmFsc2UKLW1hcHBpbmdzCi1hbGwgb3RoZXIgdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZQotbm90IHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUgaWYgeCBpcyBGYWxzZSwgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydWUKLXggb3IgeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4IGlzIEZhbHNlIHRoZW4geSwgZWxzZSAgICgxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgKLXggYW5kIHkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4IGlzIEZhbHNlIHRoZW4geCwgZWxzZSAgICgxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkKLQotTm90ZXMgOgotICAgIFRydXRoIHRlc3RpbmcgYmVoYXZpb3IgY2FuIGJlIG92ZXJyaWRkZW4gZm9yIGEgZ2l2ZW4gY2xhc3MgYnkgZGVmaW5pbmcKLXNwZWNpYWwgbWV0aG9kIF9fYm9vbF9fLgotICAgICgxKSBFdmFsdWF0ZSBzZWNvbmQgYXJnIG9ubHkgaWYgbmVjZXNzYXJ5IHRvIGRldGVybWluZSBvdXRjb21lLgotCi1Ob25lCi0KLSAgICBOb25lIGlzIHVzZWQgYXMgZGVmYXVsdCByZXR1cm4gdmFsdWUgb24gZnVuY3Rpb25zLiBCdWlsdC1pbiBzaW5nbGUgb2JqZWN0Ci0gICAgd2l0aCB0eXBlIE5vbmVUeXBlLgotICAgIElucHV0IHRoYXQgZXZhbHVhdGVzIHRvIE5vbmUgZG9lcyBub3QgcHJpbnQgd2hlbiBydW5uaW5nIFB5dGhvbgotICAgIGludGVyYWN0aXZlbHkuCi0KLU51bWVyaWMgdHlwZXMKLQotRmxvYXRzIGFuZCBpbnRlZ2Vycy4KLQotICAgIEZsb2F0cyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBDIGRvdWJsZXMuCi0gICAgSW50ZWdlcnMgaGF2ZSB1bmxpbWl0ZWQgc2l6ZSAob25seSBsaW1pdCBpcyBzeXN0ZW0gcmVzb3VyY2VzKQotCi1PcGVyYXRvcnMgb24gYWxsIG51bWVyaWMgdHlwZXMKLQotICAgICAgICAgICBPcGVyYXRvcnMgb24gYWxsIG51bWVyaWMgdHlwZXMKLSBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgIFJlc3VsdAotYWJzKHgpICAgICAgIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB4Ci1pbnQoeCkgICAgICAgeCBjb252ZXJ0ZWQgdG8gaW50ZWdlcgotZmxvYXQoeCkgICAgIHggY29udmVydGVkIHRvIGZsb2F0aW5nIHBvaW50Ci0teCAgICAgICAgICAgeCBuZWdhdGVkCi0reCAgICAgICAgICAgeCB1bmNoYW5nZWQKLXggKyB5ICAgICAgICB0aGUgc3VtIG9mIHggYW5kIHkKLXggLSB5ICAgICAgICBkaWZmZXJlbmNlIG9mIHggYW5kIHkKLXggKiB5ICAgICAgICBwcm9kdWN0IG9mIHggYW5kIHkKLXggLyB5ICAgICAgICBxdW90aWVudCBvZiB4IGFuZCB5Ci14ICUgeSAgICAgICAgcmVtYWluZGVyIG9mIHggLyB5Ci1kaXZtb2QoeCwgeSkgdGhlIHR1cGxlICh4L3ksIHgleSkKLXggKiogeSAgICAgICB4IHRvIHRoZSBwb3dlciB5ICh0aGUgc2FtZSBhcyBwb3coeCwgeSkpCi0KLUJpdCBvcGVyYXRvcnMgb24gaW50ZWdlcnMKLQotICAgICAgICAgICAgICBCaXQgb3BlcmF0b3JzCi1PcGVyYXRpb24gICAgICAgICAgICAgPlJlc3VsdAotfnggICAgICAgIHRoZSBiaXRzIG9mIHggaW52ZXJ0ZWQKLXggXiB5ICAgICBiaXR3aXNlIGV4Y2x1c2l2ZSBvciBvZiB4IGFuZCB5Ci14ICYgeSAgICAgYml0d2lzZSBhbmQgb2YgeCBhbmQgeQoteCB8IHkgICAgIGJpdHdpc2Ugb3Igb2YgeCBhbmQgeQoteCA8PCBuICAgIHggc2hpZnRlZCBsZWZ0IGJ5IG4gYml0cwoteCA+PiBuICAgIHggc2hpZnRlZCByaWdodCBieSBuIGJpdHMKLQotQ29tcGxleCBOdW1iZXJzCi0KLSAgKiByZXByZXNlbnRlZCBhcyBhIHBhaXIgb2YgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50Ci0gICAgbnVtYmVycy4KLSAgKiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHZhbHVlIG9mIGEgY29tcGxleCBudW1iZXIgeiBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2gKLSAgICB0aGUgYXR0cmlidXRlcyB6LnJlYWwgYW5kIHouaW1hZy4KLQotTnVtZXJpYyBleGNlcHRpb25zCi0KLVR5cGVFcnJvcgotICAgIHJhaXNlZCBvbiBhcHBsaWNhdGlvbiBvZiBhcml0aG1ldGljIG9wZXJhdGlvbiB0byBub24tbnVtYmVyCi1PdmVyZmxvd0Vycm9yCi0gICAgIG51bWVyaWMgYm91bmRzIGV4Y2VlZGVkCi1aZXJvRGl2aXNpb25FcnJvcgotICAgICByYWlzZWQgd2hlbiB6ZXJvIHNlY29uZCBhcmd1bWVudCBvZiBkaXYgb3IgbW9kdWxvIG9wCi1GbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgcmFpc2VkIHdoZW4gYSBmbG9hdGluZyBwb2ludCBvcGVyYXRpb24gZmFpbHMKLQotT3BlcmF0aW9ucyBvbiBhbGwgc2VxdWVuY2UgdHlwZXMgKGxpc3RzLCB0dXBsZXMsIHN0cmluZ3MpCi0KLSAgICAgICAgICAgICAgICBPcGVyYXRpb25zIG9uIGFsbCBzZXF1ZW5jZSB0eXBlcwotT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgTm90ZXMKLXggaW4gcyAgICAgVHJ1ZSBpZiBhbiBpdGVtIG9mIHMgaXMgZXF1YWwgdG8geCwgZWxzZSBGYWxzZQoteCBub3QgaW4gcyBGYWxzZSBpZiBhbiBpdGVtIG9mIHMgaXMgZXF1YWwgdG8geCwgZWxzZSBUcnVlCi1mb3IgeCBpbiBzOiBsb29wcyBvdmVyIHRoZSBzZXF1ZW5jZQotcyArIHQgICAgICB0aGUgY29uY2F0ZW5hdGlvbiBvZiBzIGFuZCB0Ci1zICogbiwgbipzIG4gY29waWVzIG9mIHMgY29uY2F0ZW5hdGVkCi1zW2ldICAgICAgIGkndGggaXRlbSBvZiBzLCBvcmlnaW4gMCAgICAgICAgICAgICAgICAgICAgICAgKDEpCi1zW2k6al0gICAgIHNsaWNlIG9mIHMgZnJvbSBpIChpbmNsdWRlZCkgdG8gaiAoZXhjbHVkZWQpICgxKSwgKDIpCi1sZW4ocykgICAgIGxlbmd0aCBvZiBzCi1taW4ocykgICAgIHNtYWxsZXN0IGl0ZW0gb2YgcwotbWF4KHMpICAgICBsYXJnZXN0IGl0ZW0gb2YgKHMpCi1pdGVyKHMpICAgIHJldHVybnMgYW4gaXRlcmF0b3Igb3ZlciBzLiAgaXRlcmF0b3JzIGRlZmluZSBfX2l0ZXJfXyBhbmQgbmV4dCgpCi0KLU5vdGVzIDoKLSAgICAoMSkgaWYgaSBvciBqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLAotaWUgbGVuKHMpKyBpIG9yIGxlbihzKStqIGlzCi0gICAgICAgICBzdWJzdGl0dXRlZC4gQnV0IG5vdGUgdGhhdCAtMCBpcyBzdGlsbCAwLgotICAgICgyKSBUaGUgc2xpY2Ugb2YgcyBmcm9tIGkgdG8gaiBpcyBkZWZpbmVkIGFzIHRoZSBzZXF1ZW5jZSBvZiBpdGVtcyB3aXRoCi1pbmRleCBrIHN1Y2ggdGhhdCBpIDw9IGsgPCBqLgotICAgICAgICAgIElmIGkgb3IgaiBpcyBncmVhdGVyIHRoYW4gbGVuKHMpLCB1c2UgbGVuKHMpLiBJZiBpIGlzIG9taXR0ZWQsIHVzZQotbGVuKHMpLiBJZiBpIGlzIGdyZWF0ZXIgdGhhbiBvcgotICAgICAgICAgIGVxdWFsIHRvIGosIHRoZSBzbGljZSBpcyBlbXB0eS4KLQotT3BlcmF0aW9ucyBvbiBtdXRhYmxlICg9bW9kaWZpYWJsZSkgc2VxdWVuY2VzIChsaXN0cykKLQotICAgICAgICAgICAgICAgICBPcGVyYXRpb25zIG9uIG11dGFibGUgc2VxdWVuY2VzCi0gICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgIE5vdGVzCi1zW2ldID14ICAgICAgICAgIGl0ZW0gaSBvZiBzIGlzIHJlcGxhY2VkIGJ5IHgKLXNbaTpqXSA9IHQgICAgICAgc2xpY2Ugb2YgcyBmcm9tIGkgdG8gaiBpcyByZXBsYWNlZCBieSB0Ci1kZWwgc1tpOmpdICAgICAgIHNhbWUgYXMgc1tpOmpdID0gW10KLXMuYXBwZW5kKHgpICAgICAgc2FtZSBhcyBzW2xlbihzKSA6IGxlbihzKV0gPSBbeF0KLXMuY291bnQoeCkgICAgICAgcmV0dXJuIG51bWJlciBvZiBpJ3MgZm9yIHdoaWNoIHNbaV0gPT0geAotcy5leHRlbmQoeCkgICAgICBzYW1lIGFzIHNbbGVuKHMpOmxlbihzKV09IHgKLXMuaW5kZXgoeCkgICAgICAgcmV0dXJuIHNtYWxsZXN0IGkgc3VjaCB0aGF0IHNbaV0gPT0geCAgICAgICgxKQotcy5pbnNlcnQoaSwgeCkgICBzYW1lIGFzIHNbaTppXSA9IFt4XSBpZiBpID49IDAKLXMucG9wKFtpXSkgICAgICAgc2FtZSBhcyB4ID0gc1tpXTsgZGVsIHNbaV07IHJldHVybiB4ICAgICAgICg0KQotcy5yZW1vdmUoeCkgICAgICBzYW1lIGFzIGRlbCBzW3MuaW5kZXgoeCldICAgICAgICAgICAgICAgICAgKDEpCi1zLnJldmVyc2UoKSAgICAgIHJldmVyc2UgdGhlIGl0ZW1zIG9mIHMgaW4gcGxhY2UgICAgICAgICAgICAoMykKLXMuc29ydChbY21wRmN0XSkgc29ydCB0aGUgaXRlbXMgb2YgcyBpbiBwbGFjZSAgICAgICAgICAgICAoMiksICgzKQotCi1Ob3RlcyA6Ci0gICAgKDEpIHJhaXNlIGEgVmFsdWVFcnJvciBleGNlcHRpb24gd2hlbiB4IGlzIG5vdCBmb3VuZCBpbiBzIChpLmUuIG91dCBvZgotcmFuZ2UpLgotICAgICAoMikgVGhlIHNvcnQoKSBtZXRob2QgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgc3BlY2lmeWluZyBhIGNvbXBhcmlzb24KLWZjdCBvZiAyIGFyZ3VtZW50cyAobGlzdCBpdGVtcykgd2hpY2ggc2hvdWxkCi0gICAgICAgICAgcmV0dXJuIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSAxc3QgYXJndW1lbnQgaXMKLWNvbnNpZGVyZWQgc21hbGxlciB0aGFuLCBlcXVhbCB0bywgb3IgbGFyZ2VyIHRoYW4gdGhlIDJuZAotICAgICAgICAgIGFyZ3VtZW50LiBOb3RlIHRoYXQgdGhpcyBzbG93cyB0aGUgc29ydGluZyBwcm9jZXNzIGRvd24gY29uc2lkZXJhYmx5LgotICAgICAoMykgVGhlIHNvcnQoKSBhbmQgcmV2ZXJzZSgpIG1ldGhvZHMgbW9kaWZ5IHRoZSBsaXN0IGluIHBsYWNlIGZvciBlY29ub215Ci1vZiBzcGFjZSB3aGVuIHNvcnRpbmcgb3IgcmV2ZXJzaW5nIGEgbGFyZ2UgbGlzdC4KLSAgICAgICAgICAgVGhleSBkb24ndCByZXR1cm4gdGhlIHNvcnRlZCBvciByZXZlcnNlZCBsaXN0IHRvIHJlbWluZCB5b3Ugb2YgdGhpcwotc2lkZSBlZmZlY3QuCi0gICAgICg0KSBbTmV3IDEuNS4yXSBUaGUgb3B0aW9uYWwgIGFyZ3VtZW50IGkgZGVmYXVsdHMgdG8gLTEsIHNvIHRoYXQgYnkgZGVmYXVsdCB0aGUgbGFzdAotaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC4KLQotCi0KLU9wZXJhdGlvbnMgb24gbWFwcGluZ3MgKGRpY3Rpb25hcmllcykKLQotICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnMgb24gbWFwcGluZ3MKLSAgICAgICAgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQgICAgICAgICAgICAgICAgICBOb3RlcwotbGVuKGQpICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBkCi1kW2tdICAgICAgICAgICAgICAgICAgICAgICB0aGUgaXRlbSBvZiBkIHdpdGgga2V5IGsgICAgICAgICAgICAgICAgICgxKQotZFtrXSA9IHggICAgICAgICAgICAgICAgICAgc2V0IGRba10gdG8geAotZGVsIGRba10gICAgICAgICAgICAgICAgICAgcmVtb3ZlIGRba10gZnJvbSBkICAgICAgICAgICAgICAgICAgICAgICAoMSkKLWQuY2xlYXIoKSAgICAgICAgICAgICAgICAgIHJlbW92ZSBhbGwgaXRlbXMgZnJvbSBkCi1kLmNvcHkoKSAgICAgICAgICAgICAgICAgICBhIHNoYWxsb3cgY29weSBvZiBkCi1kLmdldChrLGRlZmF1bHR2YWwpICAgICAgICB0aGUgaXRlbSBvZiBkIHdpdGgga2V5IGsgICAgICAgICAgICAgICAgICg0KQotZC5oYXNfa2V5KGspICAgICAgICAgICAgICAgVHJ1ZSBpZiBkIGhhcyBrZXkgaywgZWxzZSBGYWxzZQotZC5pdGVtcygpICAgICAgICAgICAgICAgICAgYSBjb3B5IG9mIGQncyBsaXN0IG9mIChrZXksIGl0ZW0pIHBhaXJzICAoMikKLWQuaXRlcml0ZW1zKCkgICAgICAgICAgICAgIGFuIGl0ZXJhdG9yIG92ZXIgKGtleSwgdmFsdWUpIHBhaXJzICAgICAgKDcpCi1kLml0ZXJrZXlzKCkgICAgICAgICAgICAgICBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzIG9mIGQgICAgICAgICAgICg3KQotZC5pdGVydmFsdWVzKCkgICAgICAgICAgICAgYW4gaXRlcmF0b3Igb3ZlciB0aGUgdmFsdWVzIG9mIGQgICAgICAgICAoNykKLWQua2V5cygpICAgICAgICAgICAgICAgICAgIGEgY29weSBvZiBkJ3MgbGlzdCBvZiBrZXlzICAgICAgICAgICAgICAgKDIpCi1kMS51cGRhdGUoZDIpICAgICAgICAgICAgICBmb3IgaywgdiBpbiBkMi5pdGVtcygpOiBkMVtrXSA9IHYgICAgICAgICgzKQotZC52YWx1ZXMoKSAgICAgICAgICAgICAgICAgYSBjb3B5IG9mIGQncyBsaXN0IG9mIHZhbHVlcyAgICAgICAgICAgICAoMikKLWQucG9wKGspICAgICAgICAgICAgICAgICAgIHJlbW92ZSBkW2tdIGFuZCByZXR1cm4gaXRzIHZhbHVlCi1kLnBvcGl0ZW0oKSAgICAgICAgICAgICAgICByZW1vdmUgYW5kIHJldHVybiBhbiBhcmJpdHJhcnkgICAgICAgICAgICg2KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleSwgaXRlbSkgcGFpcgotZC5zZXRkZWZhdWx0KGssZGVmYXVsdHZhbCkgdGhlIGl0ZW0gb2YgZCB3aXRoIGtleSBrICAgICAgICAgICAgICAgICAoNSkKLQotICAgIE5vdGVzIDoKLSAgICAgIFR5cGVFcnJvciBpcyByYWlzZWQgaWYga2V5IGlzIG5vdCBhY2NlcHRhYmxlCi0gICAgICAoMSkgS2V5RXJyb3IgaXMgcmFpc2VkIGlmIGtleSBrIGlzIG5vdCBpbiB0aGUgbWFwCi0gICAgICAoMikgS2V5cyBhbmQgdmFsdWVzIGFyZSBsaXN0ZWQgaW4gcmFuZG9tIG9yZGVyCi0gICAgICAoMykgZDIgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIGFzIGQxCi0gICAgICAoNCkgTmV2ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBrIGlzIG5vdCBpbiB0aGUgbWFwLCBpbnN0ZWFkIGl0IHJldHVybnMKLSAgICBkZWZhdWx0VmFsLgotICAgICAgICAgIGRlZmF1bHRWYWwgaXMgb3B0aW9uYWwsIHdoZW4gbm90IHByb3ZpZGVkIGFuZCBrIGlzIG5vdCBpbiB0aGUgbWFwLAotICAgIE5vbmUgaXMgcmV0dXJuZWQuCi0gICAgICAoNSkgTmV2ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiBrIGlzIG5vdCBpbiB0aGUgbWFwLCBpbnN0ZWFkIGl0IHJldHVybnMKLSAgICBkZWZhdWx0VmFsLCBhbmQgYWRkcyBrIHRvIG1hcCB3aXRoIHZhbHVlIGRlZmF1bHRWYWwuIGRlZmF1bHRWYWwgaXMKLSAgICBvcHRpb25hbC4gV2hlbiBub3QgcHJvdmlkZWQgYW5kIGsgaXMgbm90IGluIHRoZSBtYXAsIE5vbmUgaXMgcmV0dXJuZWQgYW5kCi0gICAgYWRkZWQgdG8gbWFwLgotICAgICAgKDYpIFJhaXNlcyBhIEtleUVycm9yIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIGVtdHB5LgotICAgICAgKDcpIFdoaWxlIGl0ZXJhdGluZyBvdmVyIGEgZGljdGlvbmFyeSwgdGhlIHZhbHVlcyBtYXkgYmUgdXBkYXRlZCBidXQKLSAgICAgICAgICB0aGUga2V5cyBjYW5ub3QgYmUgY2hhbmdlZC4KLQotT3BlcmF0aW9ucyBvbiBzdHJpbmdzCi0KLU5vdGUgdGhhdCB0aGVzZSBzdHJpbmcgbWV0aG9kcyBsYXJnZWx5IChidXQgbm90IGNvbXBsZXRlbHkpIHN1cGVyc2VkZSB0aGUKLWZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gdGhlIHN0cmluZyBtb2R1bGUuCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zIG9uIHN0cmluZ3MKLSAgICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgTm90ZXMKLXMuY2FwaXRhbGl6ZSgpICAgIHJldHVybiBhIGNvcHkgb2YgcyB3aXRoIG9ubHkgaXRzIGZpcnN0IGNoYXJhY3RlcgotICAgICAgICAgICAgICAgICAgY2FwaXRhbGl6ZWQuCi1zLmNlbnRlcih3aWR0aCkgICByZXR1cm4gYSBjb3B5IG9mIHMgY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoIHdpZHRoICAoMSkKLSAgICAgICAgICAgICAgICAgIC4KLXMuY291bnQoc3ViWyAgICAgIHJldHVybiB0aGUgbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyBzdWIgaW4gICAgICgyKQotLHN0YXJ0WyxlbmRdXSkgICAgc3RyaW5nIHMuCi1zLmRlY29kZSgoWyAgICAgICByZXR1cm4gYSBkZWNvZGVkIHZlcnNpb24gb2Ygcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAoMykKLSAgZW5jb2RpbmcKLSAgWyxlcnJvcnNdXSkKLXMuZW5jb2RlKFsgICAgICAgIHJldHVybiBhbiBlbmNvZGVkIHZlcnNpb24gb2Ygcy4gRGVmYXVsdCBlbmNvZGluZyBpcyB0aGUKLSAgZW5jb2RpbmcgICAgICAgIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcuICAgICAgICAgICAgICAgICAgICAgICAgICgzKQotICBbLGVycm9yc11dKQotcy5lbmRzd2l0aChzdWZmaXggcmV0dXJuIHRydWUgaWYgcyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCBzdWZmaXgsICAgICAgICAgKDIpCi0gIFssc3RhcnRbLGVuZF1dKSBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLgotcy5leHBhbmR0YWJzKFsgICAgcmV0dXJuIGEgY29weSBvZiBzIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgICAgICAgICAgKDQpCi10YWJzaXplXSkgICAgICAgICBleHBhbmRlZCB1c2luZyBzcGFjZXMuCi1zLmZpbmQoc3ViWyxzdGFydCByZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiBzIHdoZXJlIHN1YnN0cmluZyBzdWIgaXMgICAgICAoMikKLVssZW5kXV0pICAgICAgICAgIGZvdW5kLiBSZXR1cm4gLTEgaWYgc3ViIGlzIG5vdCBmb3VuZC4KLXMuaW5kZXgoc3ViWyAgICAgIGxpa2UgZmluZCgpLCBidXQgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBzdWJzdHJpbmcgaXMgICgyKQotLHN0YXJ0WyxlbmRdXSkgICAgbm90IGZvdW5kLgotcy5pc2FsbnVtKCkgICAgICAgcmV0dXJuIFRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gcyBhcmUgYWxwaGFudW1lcmljLCAgICAgKDUpCi0gICAgICAgICAgICAgICAgICBGYWxzZSBvdGhlcndpc2UuCi1zLmlzYWxwaGEoKSAgICAgICByZXR1cm4gVHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiBzIGFyZSBhbHBoYWJldGljLCAgICAgICAoNSkKLSAgICAgICAgICAgICAgICAgIEZhbHNlIG90aGVyd2lzZS4KLXMuaXNkaWdpdCgpICAgICAgIHJldHVybiBUcnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHMgYXJlIGRpZ2l0ICAgICAgICAgICAgICg1KQotICAgICAgICAgICAgICAgICAgY2hhcmFjdGVycywgRmFsc2Ugb3RoZXJ3aXNlLgotcy5pc2xvd2VyKCkgICAgICAgcmV0dXJuIFRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gcyBhcmUgbG93ZXJjYXNlLCBGYWxzZSAgKDYpCi0gICAgICAgICAgICAgICAgICBvdGhlcndpc2UuCi1zLmlzc3BhY2UoKSAgICAgICByZXR1cm4gVHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiBzIGFyZSB3aGl0ZXNwYWNlICAgICAgICAoNSkKLSAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMsIEZhbHNlIG90aGVyd2lzZS4KLXMuaXN0aXRsZSgpICAgICAgIHJldHVybiBUcnVlIGlmIHN0cmluZyBzIGlzIGEgdGl0bGVjYXNlZCBzdHJpbmcsIEZhbHNlICAgICg3KQotICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgotcy5pc3VwcGVyKCkgICAgICAgcmV0dXJuIFRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gcyBhcmUgdXBwZXJjYXNlLCBGYWxzZSAgKDYpCi0gICAgICAgICAgICAgICAgICBvdGhlcndpc2UuCi1zLmpvaW4oc2VxKSAgICAgICByZXR1cm4gYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBzdHJpbmdzIGluIHRoZSBzZXF1ZW5jZQotICAgICAgICAgICAgICAgICAgc2VxLCBzZXBhcmF0ZWQgYnkgJ3Mncy4KLXMubGp1c3Qod2lkdGgpICAgIHJldHVybiBzIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCB3aWR0aC4gICAgKDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi1zLmxvd2VyKCkgICAgICAgICByZXR1cm4gYSBjb3B5IG9mIHMgY29udmVydGVkIHRvIGxvd2VyY2FzZS4KLXMubHN0cmlwKCkgICAgICAgIHJldHVybiBhIGNvcHkgb2YgcyB3aXRoIGxlYWRpbmcgd2hpdGVzcGFjZSByZW1vdmVkLgotcy5yZXBsYWNlKG9sZCwgICAgcmV0dXJuIGEgY29weSBvZiBzIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnN0cmluZyAgICAgKDkpCi1uZXdbLCBtYXhzcGxpdF0pICBvbGQgcmVwbGFjZWQgYnkgbmV3Lgotcy5yZmluZChzdWJbICAgICAgcmV0dXJuIHRoZSBoaWdoZXN0IGluZGV4IGluIHMgd2hlcmUgc3Vic3RyaW5nIHN1YiBpcyAgICAgKDIpCi0sc3RhcnRbLGVuZF1dKSAgICBmb3VuZC4gUmV0dXJuIC0xIGlmIHN1YiBpcyBub3QgZm91bmQuCi1zLnJpbmRleChzdWJbICAgICBsaWtlIHJmaW5kKCksIGJ1dCByYWlzZSBWYWx1ZUVycm9yIHdoZW4gdGhlIHN1YnN0cmluZyAgICAoMikKLSxzdGFydFssZW5kXV0pICAgIGlzIG5vdCBmb3VuZC4KLXMucmp1c3Qod2lkdGgpICAgIHJldHVybiBzIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggd2lkdGguICAgKDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDgpCi1zLnJzdHJpcCgpICAgICAgICByZXR1cm4gYSBjb3B5IG9mIHMgd2l0aCB0cmFpbGluZyB3aGl0ZXNwYWNlIHJlbW92ZWQuCi1zLnNwbGl0KFtzZXBbICAgICByZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiBzLCB1c2luZyBzZXAgYXMgdGhlICAgICAgICgxMCkKLSxtYXhzcGxpdF1dKSAgICAgIGRlbGltaXRlciBzdHJpbmcuCi1zLnNwbGl0bGluZXMoWyAgICByZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiBzLCBicmVha2luZyBhdCBsaW5lICAgICAgICgxMSkKLWtlZXBlbmRzXSkgICAgICAgIGJvdW5kYXJpZXMuCi1zLnN0YXJ0c3dpdGggICAgICByZXR1cm4gdHJ1ZSBpZiBzIHN0YXJ0cyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4LAotKHByZWZpeFssc3RhcnRbICAgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDIpCi0sZW5kXV0pCi1zLnN0cmlwKCkgICAgICAgICByZXR1cm4gYSBjb3B5IG9mIHMgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCi0gICAgICAgICAgICAgICAgICByZW1vdmVkLgotcy5zd2FwY2FzZSgpICAgICAgcmV0dXJuIGEgY29weSBvZiBzIHdpdGggdXBwZXJjYXNlIGNoYXJhY3RlcnMgY29udmVydGVkCi0gICAgICAgICAgICAgICAgICB0byBsb3dlcmNhc2UgYW5kIHZpY2UgdmVyc2EuCi0gICAgICAgICAgICAgICAgICByZXR1cm4gYSB0aXRsZWNhc2VkIGNvcHkgb2YgcywgaS5lLiB3b3JkcyBzdGFydCB3aXRoCi1zLnRpdGxlKCkgICAgICAgICB1cHBlcmNhc2UgY2hhcmFjdGVycywgYWxsIHJlbWFpbmluZyBjYXNlZCBjaGFyYWN0ZXJzCi0gICAgICAgICAgICAgICAgICBhcmUgbG93ZXJjYXNlLgotcy50cmFuc2xhdGUodGFibGUgcmV0dXJuIGEgY29weSBvZiBzIG1hcHBlZCB0aHJvdWdoIHRyYW5zbGF0aW9uIHRhYmxlICAgICAoMTIpCi1bLGRlbGV0ZWNoYXJzXSkgICB0YWJsZS4KLXMudXBwZXIoKSAgICAgICAgIHJldHVybiBhIGNvcHkgb2YgcyBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLgotcy56ZmlsbCh3aWR0aCkgICAgcmV0dXJuIGEgc3RyaW5nIHBhZGRlZCB3aXRoIHplcm9lcyBvbiB0aGUgbGVmdCBzaWRlIGFuZAotICAgICAgICAgICAgICAgICAgc2xpZGluZyBhIG1pbnVzIHNpZ24gbGVmdCBpZiBuZWNlc3NhcnkuICBuZXZlciB0cnVuY2F0ZXMuCi0KLU5vdGVzIDoKLSAgICAoMSkgUGFkZGluZyBpcyBkb25lIHVzaW5nIHNwYWNlcy4KLSAgICAoMikgSWYgb3B0aW9uYWwgYXJndW1lbnQgc3RhcnQgaXMgc3VwcGxpZWQsIHN1YnN0cmluZyBzW3N0YXJ0Ol0gaXMKLXByb2Nlc3NlZC4gSWYgb3B0aW9uYWwgYXJndW1lbnRzIHN0YXJ0IGFuZCBlbmQgYXJlIHN1cHBsaWVkLCBzdWJzdHJpbmcgc1tzdGFydDoKLWVuZF0gaXMgcHJvY2Vzc2VkLgotICAgICgzKSBPcHRpb25hbCBhcmd1bWVudCBlcnJvcnMgbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZwotc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgZXJyb3JzIGlzICdzdHJpY3QnLCBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlCi1hIFZhbHVlRXJyb3IuIE90aGVyIHBvc3NpYmxlIHZhbHVlcyBhcmUgJ2lnbm9yZScgYW5kICdyZXBsYWNlJy4KLSAgICAoNCkgSWYgb3B0aW9uYWwgYXJndW1lbnQgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzCi1pcyBhc3N1bWVkLgotICAgICg1KSBSZXR1cm5zIGZhbHNlIGlmIHN0cmluZyBzIGRvZXMgbm90IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4KLSAgICAoNikgUmV0dXJucyBmYWxzZSBpZiBzdHJpbmcgcyBkb2VzIG5vdCBjb250YWluIGF0IGxlYXN0IG9uZSBjYXNlZAotY2hhcmFjdGVyLgotICAgICg3KSBBIHRpdGxlY2FzZWQgc3RyaW5nIGlzIGEgc3RyaW5nIGluIHdoaWNoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIG1heSBvbmx5Ci1mb2xsb3cgdW5jYXNlZCBjaGFyYWN0ZXJzIGFuZCBsb3dlcmNhc2UgY2hhcmFjdGVycyBvbmx5IGNhc2VkIG9uZXMuCi0gICAgKDgpIHMgaXMgcmV0dXJuZWQgaWYgd2lkdGggaXMgbGVzcyB0aGFuIGxlbihzKS4KLSAgICAoOSkgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50IG1heHNwbGl0IGlzIGdpdmVuLCBvbmx5IHRoZSBmaXJzdCBtYXhzcGxpdAotb2NjdXJyZW5jZXMgYXJlIHJlcGxhY2VkLgotICAgICgxMCkgSWYgc2VwIGlzIG5vdCBzcGVjaWZpZWQgb3IgTm9uZSwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLgotSWYgbWF4c3BsaXQgaXMgZ2l2ZW4sIGF0IG1vc3QgbWF4c3BsaXQgc3BsaXRzIGFyZSBkb25lLgotICAgICgxMSkgTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3QgdW5sZXNzIGtlZXBlbmRzIGlzCi1naXZlbiBhbmQgdHJ1ZS4KLSAgICAoMTIpIHRhYmxlIG11c3QgYmUgYSBzdHJpbmcgb2YgbGVuZ3RoIDI1Ni4gQWxsIGNoYXJhY3RlcnMgb2NjdXJyaW5nIGluIHRoZQotb3B0aW9uYWwgYXJndW1lbnQgZGVsZXRlY2hhcnMgYXJlIHJlbW92ZWQgcHJpb3IgdG8gdHJhbnNsYXRpb24uCi0KLVN0cmluZyBmb3JtYXR0aW5nIHdpdGggdGhlICUgb3BlcmF0b3IKLQotZm9ybWF0U3RyaW5nICUgYXJncy0tPiBldmFsdWF0ZXMgdG8gYSBzdHJpbmcKLQotICAqIGZvcm1hdFN0cmluZyB1c2VzIEMgcHJpbnRmIGZvcm1hdCBjb2RlcyA6ICUsIGMsIHMsIGksIGQsIHUsIG8sIHgsIFgsIGUsIEUsCi0gICAgZiwgZywgRywgciAoZGV0YWlscyBiZWxvdykuCi0gICogV2lkdGggYW5kIHByZWNpc2lvbiBtYXkgYmUgYSAqIHRvIHNwZWNpZnkgdGhhdCBhbiBpbnRlZ2VyIGFyZ3VtZW50IGdpdmVzCi0gICAgdGhlIGFjdHVhbCB3aWR0aCBvciBwcmVjaXNpb24uCi0gICogVGhlIGZsYWcgY2hhcmFjdGVycyAtLCArLCBibGFuaywgIyBhbmQgMCBhcmUgdW5kZXJzdG9vZC4gKGRldGFpbHMgYmVsb3cpCi0gICogJXMgd2lsbCBjb252ZXJ0IGFueSB0eXBlIGFyZ3VtZW50IHRvIHN0cmluZyAodXNlcyBzdHIoKSBmdW5jdGlvbikKLSAgKiBhcmdzIG1heSBiZSBhIHNpbmdsZSBhcmcgb3IgYSB0dXBsZSBvZiBhcmdzCi0KLSAgICAgICAgJyVzIGhhcyAlMDNkIHF1b3RlIHR5cGVzLicgJSAoJ1B5dGhvbicsIDIpICAjID0+ICdQeXRob24gaGFzIDAwMiBxdW90ZSB0eXBlcy4nCi0KLSAgKiBSaWdodC1oYW5kLXNpZGUgY2FuIGFsc28gYmUgYSBtYXBwaW5nOgotCi0gICAgICAgIGEgPSAnJShsYW5nKXMgaGFzICUoYykwM2QgcXVvdGUgdHlwZXMuJyAlIHsnYyc6MiwgJ2xhbmcnOidQeXRob259Ci0odmFycygpIGZ1bmN0aW9uIHZlcnkgaGFuZHkgdG8gdXNlIG9uIHJpZ2h0LWhhbmQtc2lkZS4pCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdCBjb2RlcwotQ29udmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWFuaW5nCi1kICAgICAgICAgIFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuCi1pICAgICAgICAgIFNpZ25lZCBpbnRlZ2VyIGRlY2ltYWwuCi1vICAgICAgICAgIFVuc2lnbmVkIG9jdGFsLgotdSAgICAgICAgICBVbnNpZ25lZCBkZWNpbWFsLgoteCAgICAgICAgICBVbnNpZ25lZCBoZXhhZGVjaW1hbCAobG93ZXJjYXNlKS4KLVggICAgICAgICAgVW5zaWduZWQgaGV4YWRlY2ltYWwgKHVwcGVyY2FzZSkuCi1lICAgICAgICAgIEZsb2F0aW5nIHBvaW50IGV4cG9uZW50aWFsIGZvcm1hdCAobG93ZXJjYXNlKS4KLUUgICAgICAgICAgRmxvYXRpbmcgcG9pbnQgZXhwb25lbnRpYWwgZm9ybWF0ICh1cHBlcmNhc2UpLgotZiAgICAgICAgICBGbG9hdGluZyBwb2ludCBkZWNpbWFsIGZvcm1hdC4KLUYgICAgICAgICAgRmxvYXRpbmcgcG9pbnQgZGVjaW1hbCBmb3JtYXQuCi1nICAgICAgICAgIFNhbWUgYXMgImUiIGlmIGV4cG9uZW50IGlzIGdyZWF0ZXIgdGhhbiAtNCBvciBsZXNzIHRoYW4gcHJlY2lzaW9uLAotICAgICAgICAgICAiZiIgb3RoZXJ3aXNlLgotRyAgICAgICAgICBTYW1lIGFzICJFIiBpZiBleHBvbmVudCBpcyBncmVhdGVyIHRoYW4gLTQgb3IgbGVzcyB0aGFuIHByZWNpc2lvbiwKLSAgICAgICAgICAgIkYiIG90aGVyd2lzZS4KLWMgICAgICAgICAgU2luZ2xlIGNoYXJhY3RlciAoYWNjZXB0cyBpbnRlZ2VyIG9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5nKS4KLXIgICAgICAgICAgU3RyaW5nIChjb252ZXJ0cyBhbnkgcHl0aG9uIG9iamVjdCB1c2luZyByZXByKCkpLgotcyAgICAgICAgICBTdHJpbmcgKGNvbnZlcnRzIGFueSBweXRob24gb2JqZWN0IHVzaW5nIHN0cigpKS4KLSUgICAgICAgICAgTm8gYXJndW1lbnQgaXMgY29udmVydGVkLCByZXN1bHRzIGluIGEgIiUiIGNoYXJhY3RlciBpbiB0aGUgcmVzdWx0LgotICAgICAgICAgICAoVGhlIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gaXMgJSUuKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnNpb24gZmxhZyBjaGFyYWN0ZXJzCi1GbGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYW5pbmcKLSMgICAgVGhlIHZhbHVlIGNvbnZlcnNpb24gd2lsbCB1c2UgdGhlIGBgYWx0ZXJuYXRlIGZvcm0nJy4KLTAgICAgVGhlIGNvbnZlcnNpb24gd2lsbCBiZSB6ZXJvIHBhZGRlZC4KLS0gICAgVGhlIGNvbnZlcnRlZCB2YWx1ZSBpcyBsZWZ0IGFkanVzdGVkIChvdmVycmlkZXMgIi0iKS4KLSAgICAgKGEgc3BhY2UpIEEgYmxhbmsgc2hvdWxkIGJlIGxlZnQgYmVmb3JlIGEgcG9zaXRpdmUgbnVtYmVyIChvciBlbXB0eQotICAgICBzdHJpbmcpIHByb2R1Y2VkIGJ5IGEgc2lnbmVkIGNvbnZlcnNpb24uCi0rICAgIEEgc2lnbiBjaGFyYWN0ZXIgKCIrIiBvciAiLSIpIHdpbGwgcHJlY2VkZSB0aGUgY29udmVyc2lvbiAob3ZlcnJpZGVzIGEKLSAgICAgInNwYWNlIiBmbGFnKS4KLQotRmlsZSBPYmplY3RzCi0KLUNyZWF0ZWQgd2l0aCBidWlsdC1pbiBmdW5jdGlvbiBvcGVuOyBtYXkgYmUgY3JlYXRlZCBieSBvdGhlciBtb2R1bGVzJyBmdW5jdGlvbnMKLWFzIHdlbGwuCi0KLU9wZXJhdG9ycyBvbiBmaWxlIG9iamVjdHMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIG9wZXJhdGlvbnMKLSAgICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotZi5jbG9zZSgpICAgICAgICAgQ2xvc2UgZmlsZSBmLgotZi5maWxlbm8oKSAgICAgICAgR2V0IGZpbGVubyAoZmQpIGZvciBmaWxlIGYuCi1mLmZsdXNoKCkgICAgICAgICBGbHVzaCBmaWxlIGYncyBpbnRlcm5hbCBidWZmZXIuCi1mLmlzYXR0eSgpICAgICAgICBUcnVlIGlmIGZpbGUgZiBpcyBjb25uZWN0ZWQgdG8gYSB0dHktbGlrZSBkZXYsIGVsc2UgRmFsc2UuCi1mLnJlYWQoW3NpemVdKSAgICBSZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcyBmcm9tIGZpbGUgZiBhbmQgcmV0dXJuIGFzIGEgc3RyaW5nCi0gICAgICAgICAgICAgICAgICBvYmplY3QuIElmIHNpemUgb21pdHRlZCwgcmVhZCB0byBFT0YuCi1mLnJlYWRsaW5lKCkgICAgICBSZWFkIG9uZSBlbnRpcmUgbGluZSBmcm9tIGZpbGUgZi4KLWYucmVhZGxpbmVzKCkgICAgIFJlYWQgdW50aWwgRU9GIHdpdGggcmVhZGxpbmUoKSBhbmQgcmV0dXJuIGxpc3Qgb2YgbGluZXMgcmVhZC4KLSAgICAgICAgICAgICAgICAgIFNldCBmaWxlIGYncyBwb3NpdGlvbiwgbGlrZSAic3RkaW8ncyBmc2VlaygpIi4KLWYuc2VlayhvZmZzZXRbLCAgIHdoZW5jZSA9PSAwIHRoZW4gdXNlIGFic29sdXRlIGluZGV4aW5nLgotd2hlbmNlPTBdKSAgICAgICAgd2hlbmNlID09IDEgdGhlbiBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBwb3MuCi0gICAgICAgICAgICAgICAgICB3aGVuY2UgPT0gMiB0aGVuIG9mZnNldCByZWxhdGl2ZSB0byBmaWxlIGVuZC4KLWYudGVsbCgpICAgICAgICAgIFJldHVybiBmaWxlIGYncyBjdXJyZW50IHBvc2l0aW9uIChieXRlIG9mZnNldCkuCi1mLndyaXRlKHN0cikgICAgICBXcml0ZSBzdHJpbmcgdG8gZmlsZSBmLgotZi53cml0ZWxpbmVzKGxpc3QgV3JpdGUgbGlzdCBvZiBzdHJpbmdzIHRvIGZpbGUgZi4KLSkKLQotRmlsZSBFeGNlcHRpb25zCi0KLSAgRU9GRXJyb3IKLSAgICAgRW5kLW9mLWZpbGUgaGl0IHdoZW4gcmVhZGluZyAobWF5IGJlIHJhaXNlZCBtYW55IHRpbWVzLCBlLmcuIGlmIGYgaXMgYQotICAgIHR0eSkuCi0gIElPRXJyb3IKLSAgICAgT3RoZXIgSS9PLXJlbGF0ZWQgSS9PIG9wZXJhdGlvbiBmYWlsdXJlLgotICBPU0Vycm9yCi0gICAgIE9TIHN5c3RlbSBjYWxsIGZhaWxlZC4KLQotCi0gICAgQWR2YW5jZWQgVHlwZXMKLQotICAgIC1TZWUgbWFudWFscyBmb3IgbW9yZSBkZXRhaWxzIC0KLSAgICAgICsgTW9kdWxlIG9iamVjdHMKLSAgICAgICsgQ2xhc3Mgb2JqZWN0cwotICAgICAgKyBDbGFzcyBpbnN0YW5jZSBvYmplY3RzCi0gICAgICArIFR5cGUgb2JqZWN0cyAoc2VlIG1vZHVsZTogdHlwZXMpCi0gICAgICArIEZpbGUgb2JqZWN0cyAoc2VlIGFib3ZlKQotICAgICAgKyBTbGljZSBvYmplY3RzCi0gICAgICArIFhSYW5nZSBvYmplY3RzCi0gICAgICArIENhbGxhYmxlIHR5cGVzOgotICAgICAgICAgIG8gVXNlci1kZWZpbmVkICh3cml0dGVuIGluIFB5dGhvbik6Ci0gICAgICAgICAgICAgICMgVXNlci1kZWZpbmVkIEZ1bmN0aW9uIG9iamVjdHMKLSAgICAgICAgICAgICAgIyBVc2VyLWRlZmluZWQgTWV0aG9kIG9iamVjdHMKLSAgICAgICAgICBvIEJ1aWx0LWluICh3cml0dGVuIGluIEMpOgotICAgICAgICAgICAgICAjIEJ1aWx0LWluIEZ1bmN0aW9uIG9iamVjdHMKLSAgICAgICAgICAgICAgIyBCdWlsdC1pbiBNZXRob2Qgb2JqZWN0cwotICAgICAgKyBJbnRlcm5hbCBUeXBlczoKLSAgICAgICAgICBvIENvZGUgb2JqZWN0cyAoYnl0ZS1jb21waWxlIGV4ZWN1dGFibGUgUHl0aG9uIGNvZGU6IGJ5dGVjb2RlKQotICAgICAgICAgIG8gRnJhbWUgb2JqZWN0cyAoZXhlY3V0aW9uIGZyYW1lcykKLSAgICAgICAgICBvIFRyYWNlYmFjayBvYmplY3RzIChzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24pCi0KLQotICAgIFN0YXRlbWVudHMKLQotICAgIHBhc3MgICAgICAgICAgICAtLSBOdWxsIHN0YXRlbWVudAotICAgIGRlbCBuYW1lWyxuYW1lXSogLS0gVW5iaW5kIG5hbWUocykgZnJvbSBvYmplY3QuIE9iamVjdCB3aWxsIGJlIGluZGlyZWN0bHkKLSAgICAgICAgICAgICAgICAgICAgICAgIChhbmQgYXV0b21hdGljYWxseSkgZGVsZXRlZCBvbmx5IGlmIG5vIGxvbmdlciByZWZlcmVuY2VkLgotICAgIHByaW50IFs+PiBmaWxlb2JqZWN0LF0gW3MxIFssIHMyIF0qIFssXQotICAgICAgICAgICAgICAgICAgICAtLSBXcml0ZXMgdG8gc3lzLnN0ZG91dCwgb3IgdG8gZmlsZW9iamVjdCBpZiBzdXBwbGllZC4KLSAgICAgICAgICAgICAgICAgICAgICAgUHV0cyBzcGFjZXMgYmV0d2VlbiBhcmd1bWVudHMuIFB1dHMgbmV3bGluZSBhdCBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgdW5sZXNzIHN0YXRlbWVudCBlbmRzIHdpdGggY29tbWEuCi0gICAgICAgICAgICAgICAgICAgICAgIFByaW50IGlzIG5vdCByZXF1aXJlZCB3aGVuIHJ1bm5pbmcgaW50ZXJhY3RpdmVseSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2ltcGx5IHR5cGluZyBhbiBleHByZXNzaW9uIHdpbGwgcHJpbnQgaXRzIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICB1bmxlc3MgdGhlIHZhbHVlIGlzIE5vbmUuCi0gICAgZXhlYyB4IFtpbiBnbG9iYWxzIFssbG9jYWxzXV0KLSAgICAgICAgICAgICAgICAgICAgLS0gRXhlY3V0ZXMgeCBpbiBuYW1lc3BhY2VzIHByb3ZpZGVkLiBEZWZhdWx0cwotICAgICAgICAgICAgICAgICAgICAgICB0byBjdXJyZW50IG5hbWVzcGFjZXMuIHggY2FuIGJlIGEgc3RyaW5nLCBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCBvciBhIGZ1bmN0aW9uIG9iamVjdC4KLSAgICBjYWxsYWJsZSh2YWx1ZSwuLi4gW2lkPXZhbHVlXSwgWyphcmdzXSwgWyoqa3ddKQotICAgICAgICAgICAgICAgICAgICAtLSBDYWxsIGZ1bmN0aW9uIGNhbGxhYmxlIHdpdGggcGFyYW1ldGVycy4gUGFyYW1ldGVycyBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgYmUgcGFzc2VkIGJ5IG5hbWUgb3IgYmUgb21pdHRlZCBpZiBmdW5jdGlvbgotICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVzIGRlZmF1bHQgdmFsdWVzLiBFLmcuIGlmIGNhbGxhYmxlIGlzIGRlZmluZWQgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgImRlZiBjYWxsYWJsZShwMT0xLCBwMj0yKSIKLSAgICAgICAgICAgICAgICAgICAgICAgImNhbGxhYmxlKCkiICAgICAgIDw9PiAgImNhbGxhYmxlKDEsIDIpIgotICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGFibGUoMTApIiAgICAgPD0+ICAiY2FsbGFibGUoMTAsIDIpIgotICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGFibGUocDI9OTkpIiAgPD0+ICAiY2FsbGFibGUoMSwgOTkpIgotICAgICAgICAgICAgICAgICAgICAgICAqYXJncyBpcyBhIHR1cGxlIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLgotICAgICAgICAgICAgICAgICAgICAgICAqKmt3IGlzIGEgZGljdGlvbmFyeSBvZiBrZXl3b3JkIGFyZ3VtZW50cy4KLQotICAgIEFzc2lnbm1lbnQgb3BlcmF0b3JzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhcHRpb24KLSAgICBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgTm90ZXMKLSAgICBhID0gYiAgICBCYXNpYyBhc3NpZ25tZW50IC0gYXNzaWduIG9iamVjdCBiIHRvIGxhYmVsIGEgICgxKQotICAgIGEgKz0gYiAgIFJvdWdobHkgZXF1aXZhbGVudCB0byBhID0gYSArIGIgICAgICAgICAgICAgICAgKDIpCi0gICAgYSAtPSBiICAgUm91Z2hseSBlcXVpdmFsZW50IHRvIGEgPSBhIC0gYiAgICAgICAgICAgICAgICAoMikKLSAgICBhICo9IGIgICBSb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSA9IGEgKiBiICAgICAgICAgICAgICAgICgyKQotICAgIGEgLz0gYiAgIFJvdWdobHkgZXF1aXZhbGVudCB0byBhID0gYSAvIGIgICAgICAgICAgICAgICAgKDIpCi0gICAgYSAlPSBiICAgUm91Z2hseSBlcXVpdmFsZW50IHRvIGEgPSBhICUgYiAgICAgICAgICAgICAgICAoMikKLSAgICBhICoqPSBiICBSb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSA9IGEgKiogYiAgICAgICAgICAgICAgICgyKQotICAgIGEgJj0gYiAgIFJvdWdobHkgZXF1aXZhbGVudCB0byBhID0gYSAmIGIgICAgICAgICAgICAgICAgKDIpCi0gICAgYSB8PSBiICAgUm91Z2hseSBlcXVpdmFsZW50IHRvIGEgPSBhIHwgYiAgICAgICAgICAgICAgICAoMikKLSAgICBhIF49IGIgICBSb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSA9IGEgXiBiICAgICAgICAgICAgICAgICgyKQotICAgIGEgPj49IGIgIFJvdWdobHkgZXF1aXZhbGVudCB0byBhID0gYSA+PiBiICAgICAgICAgICAgICAgKDIpCi0gICAgYSA8PD0gYiAgUm91Z2hseSBlcXVpdmFsZW50IHRvIGEgPSBhIDw8IGIgICAgICAgICAgICAgICAoMikKLQotICAgIE5vdGVzIDoKLSAgICAgICAgKDEpIENhbiB1bnBhY2sgdHVwbGVzLCBsaXN0cywgYW5kIHN0cmluZ3MuCi0gICAgICAgICAgIGZpcnN0LCBzZWNvbmQgPSBhWzA6Ml07IFtmLCBzXSA9IHJhbmdlKDIpOyBjMSxjMixjMz0nYWJjJwotICAgICAgICAgICBUaXA6IHgseSA9IHkseCBzd2FwcyB4IGFuZCB5LgotICAgICAgICAoMikgTm90IGV4YWN0bHkgZXF1aXZhbGVudCAtIGEgaXMgZXZhbHVhdGVkIG9ubHkgb25jZS4gQWxzbywgd2hlcmUKLSAgICBwb3NzaWJsZSwgb3BlcmF0aW9uIHBlcmZvcm1lZCBpbi1wbGFjZSAtIGEgaXMgbW9kaWZpZWQgcmF0aGVyIHRoYW4KLSAgICByZXBsYWNlZC4KLQotICAgIENvbnRyb2wgRmxvdwotCi0gICAgaWYgY29uZGl0aW9uOiBzdWl0ZQotICAgIFtlbGlmIGNvbmRpdGlvbjogc3VpdGVdKgotICAgIFtlbHNlOiBzdWl0ZV0gICAtLSB1c3VhbCBpZi9lbHNlX2lmL2Vsc2Ugc3RhdGVtZW50Ci0gICAgd2hpbGUgY29uZGl0aW9uOiBzdWl0ZQotICAgIFtlbHNlOiBzdWl0ZV0KLSAgICAgICAgICAgICAgICAgICAgLS0gdXN1YWwgd2hpbGUgc3RhdGVtZW50LiAiZWxzZSIgc3VpdGUgaXMgZXhlY3V0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgbG9vcCBleGl0cywgdW5sZXNzIHRoZSBsb29wIGlzIGV4aXRlZCB3aXRoCi0gICAgICAgICAgICAgICAgICAgICAgICJicmVhayIKLSAgICBmb3IgZWxlbWVudCBpbiBzZXF1ZW5jZTogc3VpdGUKLSAgICBbZWxzZTogc3VpdGVdCi0gICAgICAgICAgICAgICAgICAgIC0tIGl0ZXJhdGVzIG92ZXIgc2VxdWVuY2UsIGFzc2lnbmluZyBlYWNoIGVsZW1lbnQgdG8gZWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgVXNlIGJ1aWx0LWluIHJhbmdlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgYSBudW1iZXIgb2YgdGltZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICJlbHNlIiBzdWl0ZSBleGVjdXRlZCBhdCBlbmQgdW5sZXNzIGxvb3AgZXhpdGVkCi0gICAgICAgICAgICAgICAgICAgICAgIHdpdGggImJyZWFrIgotICAgIGJyZWFrICAgICAgICAgICAtLSBpbW1lZGlhdGVseSBleGl0cyAiZm9yIiBvciAid2hpbGUiIGxvb3AKLSAgICBjb250aW51ZSAgICAgICAgLS0gaW1tZWRpYXRlbHkgZG9lcyBuZXh0IGl0ZXJhdGlvbiBvZiAiZm9yIiBvciAid2hpbGUiIGxvb3AKLSAgICByZXR1cm4gW3Jlc3VsdF0gLS0gRXhpdHMgZnJvbSBmdW5jdGlvbiAob3IgbWV0aG9kKSBhbmQgcmV0dXJucyByZXN1bHQgKHVzZSBhIHR1cGxlIHRvCi0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3JlIHRoYW4gb25lIHZhbHVlKS4gSWYgbm8gcmVzdWx0IGdpdmVuLCB0aGVuIHJldHVybnMgTm9uZS4KLSAgICB5aWVsZCByZXN1bHQgICAgLS0gRnJlZXplcyB0aGUgZXhlY3V0aW9uIGZyYW1lIG9mIGEgZ2VuZXJhdG9yIGFuZCByZXR1cm5zIHRoZSByZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGl0ZXJhdG9yJ3MgLl9fbmV4dF9fKCkgbWV0aG9kLiAgVXBvbiB0aGUgbmV4dCBjYWxsIHRvIF9fbmV4dF9fKCksCi0gICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZXMgZXhlY3V0aW9uIGF0IHRoZSBmcm96ZW4gcG9pbnQgd2l0aCBhbGwgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcwotICAgICAgICAgICAgICAgICAgICAgICBzdGlsbCBpbnRhY3QuCi0KLSAgICBFeGNlcHRpb24gU3RhdGVtZW50cwotCi0gICAgYXNzZXJ0IGV4cHJbLCBtZXNzYWdlXQotICAgICAgICAgICAgICAgICAgICAtLSBleHByIGlzIGV2YWx1YXRlZC4gaWYgZmFsc2UsIHJhaXNlcyBleGNlcHRpb24gQXNzZXJ0aW9uRXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBtZXNzYWdlLiBJbmhpYml0ZWQgaWYgX19kZWJ1Z19fIGlzIDAuCi0gICAgdHJ5OiBzdWl0ZTEKLSAgICBbZXhjZXB0IFtleGNlcHRpb24gWywgdmFsdWVdOiBzdWl0ZTJdKwotICAgIFtlbHNlOiBzdWl0ZTNdCi0gICAgICAgICAgICAgICAgICAgIC0tIHN0YXRlbWVudHMgaW4gc3VpdGUxIGFyZSBleGVjdXRlZC4gSWYgYW4gZXhjZXB0aW9uIG9jY3VycywgbG9vawotICAgICAgICAgICAgICAgICAgICAgICBpbiAiZXhjZXB0IiBjbGF1c2VzIGZvciBtYXRjaGluZyA8ZXhjZXB0aW9uPi4gSWYgbWF0Y2hlcyBvciBiYXJlCi0gICAgICAgICAgICAgICAgICAgICAgICJleGNlcHQiIGV4ZWN1dGUgc3VpdGUgb2YgdGhhdCBjbGF1c2UuIElmIG5vIGV4Y2VwdGlvbiBoYXBwZW5zCi0gICAgICAgICAgICAgICAgICAgICAgIHN1aXRlIGluICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgYWZ0ZXIgc3VpdGUxLgotICAgICAgICAgICAgICAgICAgICAgICBJZiBleGNlcHRpb24gaGFzIGEgdmFsdWUsIGl0IGlzIHB1dCBpbiB2YWx1ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uIGNhbiBhbHNvIGJlIHR1cGxlIG9mIGV4Y2VwdGlvbnMsIGUuZy4KLSAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdCAoS2V5RXJyb3IsIE5hbWVFcnJvciksIHZhbDogcHJpbnQgdmFsIgotICAgIHRyeTogc3VpdGUxCi0gICAgZmluYWxseTogc3VpdGUyCi0gICAgICAgICAgICAgICAgICAgIC0tIHN0YXRlbWVudHMgaW4gc3VpdGUxIGFyZSBleGVjdXRlZC4gSWYgbm8KLSAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uLCBleGVjdXRlIHN1aXRlMiAoZXZlbiBpZiBzdWl0ZTEgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgZXhpdGVkIHdpdGggYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudCkuIElmIGV4Y2VwdGlvbiBkaWQgb2NjdXIsIGV4ZWN1dGVzCi0gICAgICAgICAgICAgICAgICAgICAgIHN1aXRlMiBhbmQgdGhlbiBpbW1lZGlhdGVseSByZXJhaXNlcyBleGNlcHRpb24uCi0gICAgcmFpc2UgZXhjZXB0aW9uIFssdmFsdWUgWywgdHJhY2ViYWNrXV0KLSAgICAgICAgICAgICAgICAgICAgLS0gcmFpc2VzIGV4Y2VwdGlvbiB3aXRoIG9wdGlvbmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLiBBcmcgdHJhY2ViYWNrIHNwZWNpZmllcyBhIHRyYWNlYmFjayBvYmplY3QgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgdXNlIHdoZW4gcHJpbnRpbmcgdGhlIGV4Y2VwdGlvbidzIGJhY2t0cmFjZS4KLSAgICByYWlzZSAgICAgICAgICAgLS0gYSByYWlzZSBzdGF0ZW1lbnQgd2l0aG91dCBhcmd1bWVudHMgcmUtcmFpc2VzCi0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBsYXN0IGV4Y2VwdGlvbiByYWlzZWQgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24KLUFuIGV4Y2VwdGlvbiBpcyBlaXRoZXIgYSBzdHJpbmcgKG9iamVjdCkgb3IgYSBjbGFzcyBpbnN0YW5jZS4KLSAgQ2FuIGNyZWF0ZSBhIG5ldyBvbmUgc2ltcGx5IGJ5IGNyZWF0aW5nIGEgbmV3IHN0cmluZzoKLQotICAgICAgICAgICAgICBteV9leGNlcHRpb24gPSAnWW91IGRpZCBzb21ldGhpbmcgd3JvbmcnCi0gICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgaWYgYmFkOgotICAgICAgICAgICAgICByYWlzZSBteV9leGNlcHRpb24sIGJhZAotICAgICAgZXhjZXB0IG15X2V4Y2VwdGlvbiwgdmFsdWU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ICdPb3BzJywgdmFsdWUKLQotRXhjZXB0aW9uIGNsYXNzZXMgbXVzdCBiZSBkZXJpdmVkIGZyb20gdGhlIHByZWRlZmluZWQgY2xhc3M6IEV4Y2VwdGlvbiwgZS5nLjoKLSAgICAgICAgICAgIGNsYXNzIHRleHRfZXhjZXB0aW9uKEV4Y2VwdGlvbik6IHBhc3MKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBiYWQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIHRleHRfZXhjZXB0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciB0aGUgZm9ybQotICAgICAgICAgICAgICAgICAgICAjICJyYWlzZSA8Y2xhc3M+LCA8aW5zdGFuY2U+IgotICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgIHByaW50ICdPb3BzJwotICAgICAgICAgICAgICAgICAjIFRoaXMgd2lsbCBiZSBwcmludGVkIGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgIyB0ZXh0X2V4Y2VwdGlvbiBpcyBhIHN1YmNsYXNzIG9mIEV4Y2VwdGlvbgotV2hlbiBhbiBlcnJvciBtZXNzYWdlIGlzIHByaW50ZWQgZm9yIGFuIHVuaGFuZGxlZCBleGNlcHRpb24gd2hpY2ggaXMgYQotY2xhc3MsIHRoZSBjbGFzcyBuYW1lIGlzIHByaW50ZWQsIHRoZW4gYSBjb2xvbiBhbmQgYSBzcGFjZSwgYW5kCi1maW5hbGx5IHRoZSBpbnN0YW5jZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgdXNpbmcgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCi1zdHIoKS4KLUFsbCBidWlsdC1pbiBleGNlcHRpb24gY2xhc3NlcyBkZXJpdmVzIGZyb20gRXhjZXB0aW9uLCBpdHNlbGYKLWRlcml2ZWQgZnJvbSBCYXNlRXhjZXB0aW9uLgotCi1OYW1lIFNwYWNlIFN0YXRlbWVudHMKLQotWzEuNTE6IE9uIE1hYyAmIFdpbmRvd3MsIHRoZSBjYXNlIG9mIG1vZHVsZSBmaWxlIG5hbWVzIG11c3Qgbm93IG1hdGNoIHRoZSBjYXNlCi1hcyB1c2VkCi0gIGluIHRoZSBpbXBvcnQgc3RhdGVtZW50XQotUGFja2FnZXMgKD4xLjUpOiBhIHBhY2thZ2UgaXMgYSBuYW1lIHNwYWNlIHdoaWNoIG1hcHMgdG8gYSBkaXJlY3RvcnkgaW5jbHVkaW5nCi0gICAgICAgICAgICAgICAgbW9kdWxlKHMpIGFuZCB0aGUgc3BlY2lhbCBpbml0aWFsaXphdGlvbiBtb2R1bGUgJ19faW5pdF9fLnB5JwotICAgICAgICAgICAgICAgIChwb3NzaWJseSBlbXB0eSkuIFBhY2thZ2VzL2RpcnMgY2FuIGJlIG5lc3RlZC4gWW91IGFkZHJlc3MgYQotICAgICAgICAgICAgICAgIG1vZHVsZSdzIHN5bWJvbCB2aWEgJ1twYWNrYWdlLltwYWNrYWdlLi4uXW1vZHVsZS5zeW1ib2wncy4KLWltcG9ydCBtb2R1bGUxIFthcyBuYW1lMV0gWywgbW9kdWxlMl0qCi0gICAgICAgICAgICAgICAgLS0gaW1wb3J0cyBtb2R1bGVzLiBNZW1iZXJzIG9mIG1vZHVsZSBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgcmVmZXJyZWQgdG8gYnkgcXVhbGlmeWluZyB3aXRoIFtwYWNrYWdlLl1tb2R1bGUgbmFtZToKLSAgICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgcHJpbnQgc3lzLmFyZ3Y6IgotICAgICAgICAgICAgICAgICAgICJpbXBvcnQgcGFja2FnZTEuc3VicGFja2FnZS5tb2R1bGU7IHBhY2thZ2UxLnN1YnBhY2thZ2UubW9kdWxlLmZvbygpIgotICAgICAgICAgICAgICAgICAgIG1vZHVsZTEgcmVuYW1lZCBhcyBuYW1lMSwgaWYgc3VwcGxpZWQuCi1mcm9tIG1vZHVsZSBpbXBvcnQgbmFtZTEgW2FzIG90aGVybmFtZTFdIFssIG5hbWUyXSoKLSAgICAgICAgICAgICAgICAtLSBpbXBvcnRzIG5hbWVzIGZyb20gbW9kdWxlIG1vZHVsZSBpbiBjdXJyZW50IG5hbWVzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAiZnJvbSBzeXMgaW1wb3J0IGFyZ3Y7IHByaW50IGFyZ3YiCi0gICAgICAgICAgICAgICAgICAgImZyb20gcGFja2FnZTEgaW1wb3J0IG1vZHVsZTsgbW9kdWxlLmZvbygpIgotICAgICAgICAgICAgICAgICAgICJmcm9tIHBhY2thZ2UxLm1vZHVsZSBpbXBvcnQgZm9vOyBmb28oKSIKLSAgICAgICAgICAgICAgICAgICBuYW1lMSByZW5hbWVkIGFzIG90aGVybmFtZTEsIGlmIHN1cHBsaWVkLgotZnJvbSBtb2R1bGUgaW1wb3J0ICoKLSAgICAgICAgICAgICAgICAtLSBpbXBvcnRzIGFsbCBuYW1lcyBpbiBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBzdGFydGluZyB3aXRoICJfIjsKLSAgICAgICAgICAgICAgICAgICAqdG8gYmUgdXNlZCBzcGFyc2VseSwgYmV3YXJlIG9mIG5hbWUgY2xhc2hlcyogOgotICAgICAgICAgICAgICAgICAgICJmcm9tIHN5cyBpbXBvcnQgKjsgcHJpbnQgYXJndiIKLSAgICAgICAgICAgICAgICAgICAiZnJvbSBwYWNrYWdlLm1vZHVsZSBpbXBvcnQgKjsgcHJpbnQgeCcKLSAgICAgICAgICAgICAgICAgICAgTkI6ICJmcm9tIHBhY2thZ2UgaW1wb3J0ICoiIG9ubHkgaW1wb3J0cyB0aGUgc3ltYm9scyBkZWZpbmVkCi0gICAgICAgICAgICAgICAgICAgIGluIHRoZSBwYWNrYWdlJ3MgX19pbml0X18ucHkgZmlsZSwgbm90IHRob3NlIGluIHRoZQotICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSBtb2R1bGVzIQotZ2xvYmFsIG5hbWUxIFssIG5hbWUyXSoKLSAgICAgICAgICAgICAgICAtLSBuYW1lcyBhcmUgZnJvbSBnbG9iYWwgc2NvcGUgKHVzdWFsbHkgbWVhbmluZyBmcm9tIG1vZHVsZSkKLSAgICAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBsb2NhbCAodXN1YWxseSBtZWFuaW5nIG9ubHkgaW4gZnVuY3Rpb24pLgotICAgICAgICAgICAgICAgIC0tIEUuZy4gaW4gZmN0IHdpdGhvdXQgImdsb2JhbCIgc3RhdGVtZW50cywgYXNzdW1pbmcKLSAgICAgICAgICAgICAgICAgICAiYSIgaXMgbmFtZSB0aGF0IGhhc24ndCBiZWVuIHVzZWQgaW4gZmN0IG9yIG1vZHVsZQotICAgICAgICAgICAgICAgICAgIHNvIGZhcjoKLSAgICAgICAgICAgICAgICAgICAtVHJ5IHRvIHJlYWQgZnJvbSAiYSIgLT4gTmFtZUVycm9yCi0gICAgICAgICAgICAgICAgICAgLVRyeSB0byB3cml0ZSB0byAiYSIgLT4gY3JlYXRlcyAiYSIgbG9jYWwgdG8gZmNuCi0gICAgICAgICAgICAgICAgICAgLUlmICJhIiBub3QgZGVmaW5lZCBpbiBmY3QsIGJ1dCBpcyBpbiBtb2R1bGUsIHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgLVRyeSB0byByZWFkIGZyb20gImEiLCBnZXRzIHZhbHVlIGZyb20gbW9kdWxlCi0gICAgICAgICAgICAgICAgICAgICAgIC1UcnkgdG8gd3JpdGUgdG8gImEiLCBjcmVhdGVzICJhIiBsb2NhbCB0byBmY3QKLSAgICAgICAgICAgICAgICAgICBCdXQgbm90ZSAiYVswXT0zIiBzdGFydHMgd2l0aCBzZWFyY2ggZm9yICJhIiwKLSAgICAgICAgICAgICAgICAgICB3aWxsIHVzZSB0byBnbG9iYWwgImEiIGlmIG5vIGxvY2FsICJhIi4KLQotRnVuY3Rpb24gRGVmaW5pdGlvbgotCi1kZWYgZnVuY19pZCAoW3BhcmFtX2xpc3RdKTogc3VpdGUKLSAgICAgICAgICAgICAgICAtLSBDcmVhdGVzIGEgZnVuY3Rpb24gb2JqZWN0ICYgYmluZHMgaXQgdG8gbmFtZSBmdW5jX2lkLgotCi0gICAgcGFyYW1fbGlzdCA6Oj0gW2lkIFssIGlkXSpdCi0gICAgaWQgOjo9IHZhbHVlIHwgaWQgPSB2YWx1ZSB8ICppZCB8ICoqaWQKLSAgICBbQXJncyBhcmUgcGFzc2VkIGJ5IHZhbHVlLlRodXMgb25seSBhcmdzIHJlcHJlc2VudGluZyBhIG11dGFibGUgb2JqZWN0Ci0gICAgY2FuIGJlIG1vZGlmaWVkIChhcmUgaW5vdXQgcGFyYW1ldGVycykuIFVzZSBhIHR1cGxlIHRvIHJldHVybiBtb3JlIHRoYW4KLSAgICBvbmUgdmFsdWVdCi0KLUV4YW1wbGU6Ci0gICAgICAgIGRlZiB0ZXN0IChwMSwgcDIgPSAxKzEsICpyZXN0LCAqKmtleXdvcmRzKToKLSAgICAgICAgICAgIC0tIFBhcmFtZXRlcnMgd2l0aCAiPSIgaGF2ZSBkZWZhdWx0IHZhbHVlICh2IGlzCi0gICAgICAgICAgICAgICBldmFsdWF0ZWQgd2hlbiBmdW5jdGlvbiBkZWZpbmVkKS4KLSAgICAgICAgICAgICAgIElmIGxpc3QgaGFzICIqaWQiIHRoZW4gaWQgaXMgYXNzaWduZWQgYSB0dXBsZSBvZgotICAgICAgICAgICAgICAgYWxsIHJlbWFpbmluZyBhcmdzIHBhc3NlZCB0byBmdW5jdGlvbiAobGlrZSBDIHZhcmFyZykKLSAgICAgICAgICAgICAgIElmIGxpc3QgaGFzICIqKmlkIiB0aGVuIGlkIGlzIGFzc2lnbmVkIGEgZGljdGlvbmFyeSBvZgotICAgICAgICAgICAgICAgYWxsIGV4dHJhIGFyZ3VtZW50cyBwYXNzZWQgYXMga2V5d29yZHMuCi0KLUNsYXNzIERlZmluaXRpb24KLQotY2xhc3MgPGNsYXNzX2lkPiBbKDxzdXBlcl9jbGFzczE+IFssPHN1cGVyX2NsYXNzMj5dKildOiA8c3VpdGU+Ci0gICAgICAgIC0tIENyZWF0ZXMgYSBjbGFzcyBvYmplY3QgYW5kIGFzc2lnbnMgaXQgbmFtZSA8Y2xhc3NfaWQ+Ci0gICAgICAgICAgIDxzdWl0ZT4gbWF5IGNvbnRhaW4gbG9jYWwgImRlZnMiIG9mIGNsYXNzIG1ldGhvZHMgYW5kCi0gICAgICAgICAgIGFzc2lnbm1lbnRzIHRvIGNsYXNzIGF0dHJpYnV0ZXMuCi1FeGFtcGxlOgotICAgICAgIGNsYXNzIG15X2NsYXNzIChjbGFzczEsIGNsYXNzX2xpc3RbM10pOiAuLi4KLSAgICAgICAgICAgICAgICAgIENyZWF0ZXMgYSBjbGFzcyBvYmplY3QgaW5oZXJpdGluZyBmcm9tIGJvdGggImNsYXNzMSIgYW5kIHdoYXRldmVyCi0gICAgICAgICAgICAgICAgICBjbGFzcyBvYmplY3QgImNsYXNzX2xpc3RbM10iIGV2YWx1YXRlcyB0by4gQXNzaWducyBuZXcKLSAgICAgICAgICAgICAgICAgIGNsYXNzIG9iamVjdCB0byBuYW1lICJteV9jbGFzcyIuCi0gICAgICAgIC0gRmlyc3QgYXJnIHRvIGNsYXNzIG1ldGhvZHMgaXMgYWx3YXlzIGluc3RhbmNlIG9iamVjdCwgY2FsbGVkICdzZWxmJwotICAgICAgICAgIGJ5IGNvbnZlbnRpb24uCi0gICAgICAgIC0gU3BlY2lhbCBtZXRob2QgX19pbml0X18oKSBpcyBjYWxsZWQgd2hlbiBpbnN0YW5jZSBpcyBjcmVhdGVkLgotICAgICAgICAtIFNwZWNpYWwgbWV0aG9kIF9fZGVsX18oKSBjYWxsZWQgd2hlbiBubyBtb3JlIHJlZmVyZW5jZSB0byBvYmplY3QuCi0gICAgICAgIC0gQ3JlYXRlIGluc3RhbmNlIGJ5ICJjYWxsaW5nIiBjbGFzcyBvYmplY3QsIHBvc3NpYmx5IHdpdGggYXJnCi0gICAgICAgICAgKHRodXMgaW5zdGFuY2U9YXBwbHkoYUNsYXNzT2JqZWN0LCBhcmdzLi4uKSBjcmVhdGVzIGFuIGluc3RhbmNlISkKLSAgICAgICAgLSBJbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjYW4ndCBzdWJjbGFzcyBvZmYgYnVpbHQtaW4KLSAgICAgICAgICBjbGFzc2VzLiBCdXQgY2FuICJ3cmFwIiB0aGVtLCBzZWUgVXNlckRpY3QgJiBVc2VyTGlzdCBtb2R1bGVzLAotICAgICAgICAgIGFuZCBzZWUgX19nZXRhdHRyX18oKSBiZWxvdy4KLUV4YW1wbGU6Ci0gICAgICAgIGNsYXNzIGMgKGNfcGFyZW50KToKLSAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOiBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgICAgIGRlZiBwcmludF9uYW1lKHNlbGYpOiBwcmludCAiSSdtIiwgc2VsZi5uYW1lCi0gICAgICAgICAgIGRlZiBjYWxsX3BhcmVudChzZWxmKTogY19wYXJlbnQucHJpbnRfbmFtZShzZWxmKQotICAgICAgICAgICBpbnN0YW5jZSA9IGMoJ3RvbScpCi0gICAgICAgICAgIHByaW50IGluc3RhbmNlLm5hbWUKLSAgICAgICAgICAgJ3RvbScKLSAgICAgICAgICAgaW5zdGFuY2UucHJpbnRfbmFtZSgpCi0gICAgICAgICAgICJJJ20gdG9tIgotICAgICAgICBDYWxsIHBhcmVudCdzIHN1cGVyIGNsYXNzIGJ5IGFjY2Vzc2luZyBwYXJlbnQncyBtZXRob2QKLSAgICAgICAgZGlyZWN0bHkgYW5kIHBhc3NpbmcgInNlbGYiIGV4cGxpY2l0bHkgKHNlZSAiY2FsbF9wYXJlbnQiCi0gICAgICAgIGluIGV4YW1wbGUgYWJvdmUpLgotICAgICAgICBNYW55IG90aGVyIHNwZWNpYWwgbWV0aG9kcyBhdmFpbGFibGUgZm9yIGltcGxlbWVudGluZwotICAgICAgICBhcml0aG1ldGljIG9wZXJhdG9ycywgc2VxdWVuY2UsIG1hcHBpbmcgaW5kZXhpbmcsIGV0Yy4KLQotRG9jdW1lbnRhdGlvbiBTdHJpbmdzCi0KLU1vZHVsZXMsIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBtYXkgYmUgZG9jdW1lbnRlZCBieSBwbGFjaW5nIGEgc3RyaW5nIGxpdGVyYWwgYnkKLWl0c2VsZiBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZSBzdWl0ZS4gVGhlIGRvY3VtZW50YXRpb24gY2FuIGJlIHJldHJpZXZlZAotYnkgZ2V0dGluZyB0aGUgJ19fZG9jX18nIGF0dHJpYnV0ZSBmcm9tIHRoZSBtb2R1bGUsIGNsYXNzIG9yIGZ1bmN0aW9uLgotRXhhbXBsZToKLSAgICAgICAgY2xhc3MgQzoKLSAgICAgICAgICAgICJBIGRlc2NyaXB0aW9uIG9mIEMiCi0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICAgICAgIkEgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnN0cnVjdG9yIgotICAgICAgICAgICAgICAgICMgZXRjLgotVGhlbiBjLl9fZG9jX18gPT0gIkEgZGVzY3JpcHRpb24gb2YgQyIuCi1UaGVuIGMuX19pbml0X18uX19kb2NfXyA9PSAiQSBkZXNjcmlwdGlvbiBvZiB0aGUgY29uc3RydWN0b3IiLgotCi1PdGhlcnMKLQotbGFtYmRhIFtwYXJhbV9saXN0XTogcmV0dXJuZWRFeHByCi0gICAgICAgICAgICAgICAgLS0gQ3JlYXRlcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24uIHJldHVybmVkRXhwciBtdXN0IGJlCi0gICAgICAgICAgICAgICAgICAgYW4gZXhwcmVzc2lvbiwgbm90IGEgc3RhdGVtZW50IChlLmcuLCBub3QgImlmIHh4Oi4uLiIsCi0gICAgICAgICAgICAgICAgICAgInByaW50IHh4eCIsIGV0Yy4pIGFuZCB0aHVzIGNhbid0IGNvbnRhaW4gbmV3bGluZXMuCi0gICAgICAgICAgICAgICAgICAgVXNlZCBtb3N0bHkgZm9yIGZpbHRlcigpLCBtYXAoKSBmdW5jdGlvbnMsIGFuZCBHVUkgY2FsbGJhY2tzLi4KLUxpc3QgY29tcHJlaGVuc2lvbnMKLXJlc3VsdCA9IFtleHByZXNzaW9uIGZvciBpdGVtMSBpbiBzZXF1ZW5jZTEgIFtpZiBjb25kaXRpb24xXQotICAgICAgICAgICAgICAgICAgICAgICAgW2ZvciBpdGVtMiBpbiBzZXF1ZW5jZTIgLi4uIGZvciBpdGVtTiBpbiBzZXF1ZW5jZU5dCi0gICAgICAgICAgICAgICAgICAgICAgXQotaXMgZXF1aXZhbGVudCB0bzoKLXJlc3VsdCA9IFtdCi1mb3IgaXRlbTEgaW4gc2VxdWVuY2UxOgotICAgIGZvciBpdGVtMiBpbiBzZXF1ZW5jZTI6Ci0gICAgLi4uCi0gICAgICAgIGZvciBpdGVtTiBpbiBzZXF1ZW5jZU46Ci0gICAgICAgICAgICAgaWYgKGNvbmRpdGlvbjEpIGFuZCBmdXJ0aHVyIGNvbmRpdGlvbnM6Ci0gICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGV4cHJlc3Npb24pCi0KLQotCi1CdWlsdC1JbiBGdW5jdGlvbnMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbHQtSW4gRnVuY3Rpb25zCi0gICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ci1fX2ltcG9ydF9fKG5hbWVbLCAgIEltcG9ydHMgbW9kdWxlIHdpdGhpbiB0aGUgZ2l2ZW4gY29udGV4dCAoc2VlIGxpYiByZWYgZm9yCi1nbG9iYWxzWywgbG9jYWxzWywgIG1vcmUgZGV0YWlscykKLWZyb21saXN0XV1dKQotYWJzKHgpICAgICAgICAgICAgICBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIG51bWJlciB4LgotYm9vbCh4KSAgICAgICAgICAgICBSZXR1cm5zIFRydWUgd2hlbiB0aGUgYXJndW1lbnQgeCBpcyB0cnVlIGFuZCBGYWxzZSBvdGhlcndpc2UuCi1idWZmZXIob2JqKSAgICAgICAgIENyZWF0ZXMgYSBidWZmZXIgcmVmZXJlbmNlIHRvIGFuIG9iamVjdC4KLWNocihpKSAgICAgICAgICAgICAgUmV0dXJucyBvbmUtY2hhcmFjdGVyIHN0cmluZyB3aG9zZSBBU0NJSSBjb2RlIGlzaW50ZWdlciBpCi1jbGFzc21ldGhvZChmKSAgICAgIENvbnZlcnRzIGEgZnVuY3Rpb24gZiwgaW50byBhIG1ldGhvZCB3aXRoIHRoZSBjbGFzcyBhcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgYXJndW1lbnQuICBVc2VmdWwgZm9yIGNyZWF0aW5nIGFsdGVybmF0aXZlIGNvbnN0cnVjdG9ycy4KLWNtcCh4LHkpICAgICAgICAgICAgUmV0dXJucyBuZWdhdGl2ZSwgMCwgcG9zaXRpdmUgaWYgeCA8LCA9PSwgPiB0byB5Ci1jb21waWxlKHN0cmluZywgICAgIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIHJlYWQsIG9yIGVnLiAnPHN0cmluZz4naWYgbm90IHJlYWQKLWZpbGVuYW1lLCBraW5kKSAgICAgZnJvbSBmaWxlLmtpbmQgY2FuIGJlICdldmFsJyBpZiBzdHJpbmcgaXMgYSBzaW5nbGUgc3RtdCwgb3IKLSAgICAgICAgICAgICAgICAgICAgJ3NpbmdsZScgd2hpY2ggcHJpbnRzIHRoZSBvdXRwdXQgb2YgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHRoYXQgZXZhbHVhdGUgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiBOb25lLCBvciBiZSAnZXhlYycuCi1jb21wbGV4KHJlYWxbLCAgICAgIEJ1aWxkcyBhIGNvbXBsZXggb2JqZWN0IChjYW4gYWxzbyBiZSBkb25lIHVzaW5nIEogb3IgagotaW1hZ2VdKSAgICAgICAgICAgICBzdWZmaXgsZS5nLiAxKzNKKQotZGVsYXR0cihvYmosIG5hbWUpICBkZWxldGVzIGF0dHJpYnV0ZSBuYW1lZCBuYW1lIG9mIG9iamVjdCBvYmogPD0+IGRlbCBvYmoubmFtZQotICAgICAgICAgICAgICAgICAgICBJZiBubyBhcmdzLCByZXR1cm5zIHRoZSBsaXN0IG9mIG5hbWVzIGluIGN1cnJlbnQKLWRpY3QoW2l0ZW1zXSkgICAgICAgQ3JlYXRlIGEgbmV3IGRpY3Rpb25hcnkgZnJvbSB0aGUgc3BlY2lmaWVkIGl0ZW0gbGlzdC4KLWRpcihbb2JqZWN0XSkgICAgICAgbG9jYWwgc3ltYm9sIHRhYmxlLiBXaXRoIGEgbW9kdWxlLCBjbGFzcyBvciBjbGFzcwotICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZSBvYmplY3QgYXMgYXJnLCByZXR1cm5zIGxpc3Qgb2YgbmFtZXMgaW4gaXRzIGF0dHIuCi0gICAgICAgICAgICAgICAgICAgIGRpY3QuCi1kaXZtb2QoYSxiKSAgICAgICAgIFJldHVybnMgdHVwbGUgb2YgKGEvYiwgYSViKQotZW51bWVyYXRlKHNlcSkgICAgICBSZXR1cm4gYSBpdGVyYXRvciBnaXZpbmc6ICAoMCwgc2VxWzBdKSwgKDEsIHNlcVsxXSksIC4uLgotZXZhbChzWywgZ2xvYmFsc1ssICBFdmFsIHN0cmluZyBzIGluIChvcHRpb25hbCkgZ2xvYmFscywgbG9jYWxzIGNvbnRleHRzLnMgbXVzdAotbG9jYWxzXV0pICAgICAgICAgICBoYXZlIG5vIE5VTCdzIG9yIG5ld2xpbmVzLiBzIGNhbiBhbHNvIGJlIGFjb2RlIG9iamVjdC4KLSAgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogeCA9IDE7IGluY3JfeCA9IGV2YWwoJ3ggKyAxJykKLWZpbHRlcihmdW5jdGlvbiwgICAgQ29uc3RydWN0cyBhIGxpc3QgZnJvbSB0aG9zZSBlbGVtZW50cyBvZiBzZXF1ZW5jZSBmb3Igd2hpY2gKLXNlcXVlbmNlKSAgICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyB0cnVlLiBmdW5jdGlvbiB0YWtlcyBvbmUgcGFyYW1ldGVyLgotZmxvYXQoeCkgICAgICAgICAgICBDb252ZXJ0cyBhIG51bWJlciBvciBhIHN0cmluZyB0byBmbG9hdGluZyBwb2ludC4KLWdldGF0dHIob2JqZWN0LCAgICAgWzxkZWZhdWx0PiBhcmcgYWRkZWQgaW4gMS41LjJdR2V0cyBhdHRyaWJ1dGUgY2FsbGVkIG5hbWUKLW5hbWVbLCBkZWZhdWx0XSkpICAgZnJvbSBvYmplY3QsZS5nLiBnZXRhdHRyKHgsICdmJykgPD0+IHguZikuIElmIG5vdCBmb3VuZCwKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VzIEF0dHJpYnV0ZUVycm9yIG9yIHJldHVybnMgZGVmYXVsdCBpZiBzcGVjaWZpZWQuCi1nbG9iYWxzKCkgICAgICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgY3VycmVudCBnbG9iYWwgdmFyaWFibGVzLgotaGFzYXR0cihvYmplY3QsICAgICBSZXR1cm5zIHRydWUgaWYgb2JqZWN0IGhhcyBhdHRyIGNhbGxlZCBuYW1lLgotbmFtZSkKLWhhc2gob2JqZWN0KSAgICAgICAgUmV0dXJucyB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgb2JqZWN0IChpZiBpdCBoYXMgb25lKQotaGVscChmKSAgICAgICAgICAgICBEaXNwbGF5IGRvY3VtZW50YXRpb24gb24gb2JqZWN0IGYuCi1oZXgoeCkgICAgICAgICAgICAgIENvbnZlcnRzIGEgbnVtYmVyIHggdG8gYSBoZXhhZGVjaW1hbCBzdHJpbmcuCi1pZChvYmplY3QpICAgICAgICAgIFJldHVybnMgYSB1bmlxdWUgJ2lkZW50aXR5JyBpbnRlZ2VyIGZvciBhbiBvYmplY3QuCi1pbnQoeFssIGJhc2VdKSAgICAgIGJhc2UgcGFyYW1lbnRlciBzcGVjaWZpZXMgYmFzZSBmcm9tIHdoaWNoIHRvIGNvbnZlcnQgc3RyaW5nCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlcy4KLWlzaW5zdGFuY2Uob2JqLCAgICAgUmV0dXJucyB0cnVlIGlmIG9iaiBpcyBhbiBpbnN0YW5jZSBvZiBjbGFzcy4gSWZpc3N1YmNsYXNzCi1jbGFzcykgICAgICAgICAgICAgIChBLEIpIHRoZW4gaXNpbnN0YW5jZSh4LEEpID0+IGlzaW5zdGFuY2UoeCxCKQotaXNzdWJjbGFzcyhjbGFzczEsICByZXR1cm5zIHRydWUgaWYgY2xhc3MxIGlzIGRlcml2ZWQgZnJvbSBjbGFzczIKLWNsYXNzMikKLSAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbGVuZ3RoICh0aGUgbnVtYmVyIG9mIGl0ZW1zKSBvZiBhbiBvYmplY3QKLWl0ZXIoY29sbGVjdGlvbikgICAgUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoZSBjb2xsZWN0aW9uLgotbGVuKG9iaikgICAgICAgICAgICAoc2VxdWVuY2UsIGRpY3Rpb25hcnksIG9yIGluc3RhbmNlIG9mIGNsYXNzIGltcGxlbWVudGluZwotICAgICAgICAgICAgICAgICAgICBfX2xlbl9fKS4KLWxpc3Qoc2VxdWVuY2UpICAgICAgQ29udmVydHMgc2VxdWVuY2UgaW50byBhIGxpc3QuIElmIGFscmVhZHkgYSBsaXN0LHJldHVybnMgYQotICAgICAgICAgICAgICAgICAgICBjb3B5IG9mIGl0LgotbG9jYWxzKCkgICAgICAgICAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBjb250YWluaW5nIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLgotICAgICAgICAgICAgICAgICAgICBBcHBsaWVzIGZ1bmN0aW9uIHRvIGV2ZXJ5IGl0ZW0gb2YgbGlzdCBhbmQgcmV0dXJucyBhIGxpc3RvZgotbWFwKGZ1bmN0aW9uLCBsaXN0LCB0aGUgcmVzdWx0cy4gSWYgYWRkaXRpb25hbCBhcmd1bWVudHMgYXJlIHBhc3NlZCxmdW5jdGlvbgotLi4uKSAgICAgICAgICAgICAgICBtdXN0IHRha2UgdGhhdCBtYW55IGFyZ3VtZW50cyBhbmQgaXQgaXMgZ2l2ZW50byBmdW5jdGlvbiBvbgotICAgICAgICAgICAgICAgICAgICBlYWNoIGNhbGwuCi1tYXgoc2VxKSAgICAgICAgICAgIFJldHVybnMgdGhlIGxhcmdlc3QgaXRlbSBvZiB0aGUgbm9uLWVtcHR5IHNlcXVlbmNlIHNlcS4KLW1pbihzZXEpICAgICAgICAgICAgUmV0dXJucyB0aGUgc21hbGxlc3QgaXRlbSBvZiBhIG5vbi1lbXB0eSBzZXF1ZW5jZSBzZXEuCi1vY3QoeCkgICAgICAgICAgICAgIENvbnZlcnRzIGEgbnVtYmVyIHRvIGFuIG9jdGFsIHN0cmluZy4KLW9wZW4oZmlsZW5hbWUgWywgICAgUmV0dXJucyBhIG5ldyBmaWxlIG9iamVjdC4gRmlyc3QgdHdvIGFyZ3MgYXJlIHNhbWUgYXN0aG9zZQotbW9kZT0ncicsIFtidWZzaXplPSBmb3IgQydzICJzdGRpbyBvcGVuIiBmdW5jdGlvbi4gYnVmc2l6ZSBpcyAwZm9yIHVuYnVmZmVyZWQsCi1pbXBsZW1lbnRhdGlvbiAgICAgIDEgZm9yIGxpbmUtYnVmZmVyZWQsIG5lZ2F0aXZlIGZvcnN5cy1kZWZhdWx0LCBhbGwgZWxzZSwgb2YKLWRlcGVuZGVudF1dKSAgICAgICAgKGFib3V0KSBnaXZlbiBzaXplLgotb3JkKGMpICAgICAgICAgICAgICBSZXR1cm5zIGludGVnZXIgQVNDSUkgdmFsdWUgb2YgYyAoYSBzdHJpbmcgb2YgbGVuIDEpLiBXb3JrcwotICAgICAgICAgICAgICAgICAgICB3aXRoIFVuaWNvZGUgY2hhci4KLW9iamVjdCgpICAgICAgICAgICAgQ3JlYXRlIGEgYmFzZSB0eXBlLiAgVXNlZCBhcyBhIHN1cGVyY2xhc3MgZm9yIG5ldy1zdHlsZSBvYmplY3RzLgotb3BlbihuYW1lICAgICAgICAgICBPcGVuIGEgZmlsZS4KLSAgWywgbW9kZQotICBbLCBidWZmZXJpbmddXSkKLXBvdyh4LCB5IFssIHpdKSAgICAgUmV0dXJucyB4IHRvIHBvd2VyIHkgW21vZHVsbyB6XS4gU2VlIGFsc28gKiogb3BlcmF0b3IuCi1wcm9wZXJ0eSgpICAgICAgICAgIENyZWF0ZWQgYSBwcm9wZXJ0eSB3aXRoIGFjY2VzcyBjb250cm9sbGVkIGJ5IGZ1bmN0aW9ucy4KLXJhbmdlKHN0YXJ0IFssZW5kICAgUmV0dXJucyBsaXN0IG9mIGludHMgZnJvbSA+PSBzdGFydCBhbmQgPCBlbmQuIFdpdGggMSBhcmcsCi1bLCBzdGVwXV0pICAgICAgICAgIGxpc3QgZnJvbSAwLi5hcmctMS4gV2l0aCAyIGFyZ3MsIGxpc3QgZnJvbSBzdGFydC4uZW5kLTEuCi0gICAgICAgICAgICAgICAgICAgIFdpdGggMyBhcmdzLCBsaXN0IGZyb20gc3RhcnQgdXAgdG8gZW5kIGJ5IHN0ZXAKLSAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgZml4aW5nIGl0LgotcmVwcihvYmplY3QpICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBwcmludGFibGUgYW5kIGlmIHBvc3NpYmxlCi0gICAgICAgICAgICAgICAgICAgIGV2YWx1YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIAotICAgICAgICAgICAgICAgICAgICBDbGFzcyByZWRlZmluYWJsZSAoX19yZXByX18pLiBTZWUgYWxzbyBzdHIoKS4KLXJvdW5kKHgsIG49MCkgICAgICAgUmV0dXJucyB0aGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgeCByb3VuZGVkIHRvIG4gZGlnaXRzYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgdGhlIGRlY2ltYWwgcG9pbnQuCi1zZXRhdHRyKG9iamVjdCwgICAgIFRoaXMgaXMgdGhlIGNvdW50ZXJwYXJ0IG9mIGdldGF0dHIoKS4gc2V0YXR0cihvLCAnZm9vYmFyJywKLW5hbWUsIHZhbHVlKSAgICAgICAgMykgPD0+IG8uZm9vYmFyID0gMy4gQ3JlYXRlcyBhdHRyaWJ1dGUgaWYgaXQgZG9lc24ndCBleGlzdCEKLXNsaWNlKFtzdGFydCxdIHN0b3AgUmV0dXJucyBhIHNsaWNlIG9iamVjdCByZXByZXNlbnRpbmcgYSByYW5nZSwgd2l0aCBSLwotWywgc3RlcF0pICAgICAgICAgICBPIGF0dHJpYnV0ZXM6IHN0YXJ0LCBzdG9wLCBzdGVwLgotc3RhdGljbWV0aG9kKCkgICAgICBDb252ZXJ0IGEgZnVuY3Rpb24gdG8gbWV0aG9kIHdpdGggbm8gc2VsZiBvciBjbGFzcwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC4gIFVzZWZ1bCBmb3IgbWV0aG9kcyBhc3NvY2lhdGVkIHdpdGggYSBjbGFzcyB0aGF0Ci0gICAgICAgICAgICAgICAgICAgIGRvIG5vdCBuZWVkIGFjY2VzcyB0byBhbiBvYmplY3QncyBpbnRlcm5hbCBzdGF0ZS4KLXN0cihvYmplY3QpICAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGEgbmljZWx5Ci0gICAgICAgICAgICAgICAgICAgIHByaW50YWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIENsYXNzIG92ZXJyaWRhYmxlCi0gICAgICAgICAgICAgICAgICAgIChfX3N0cl9fKS5TZWUgYWxzbyByZXByKCkuCi1zdXBlcih0eXBlKSAgICAgICAgIENyZWF0ZSBhbiB1bmJvdW5kIHN1cGVyIG9iamVjdC4gIFVzZWQgdG8gY2FsbCBjb29wZXJhdGl2ZQotICAgICAgICAgICAgICAgICAgICBzdXBlcmNsYXNzIG1ldGhvZHMuCi1zdW0oc2VxdWVuY2UsICAgICAgIEFkZCB0aGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBhbmQgcmV0dXJuIHRoZSBzdW0uCi0gICAgW3N0YXJ0XSkgCi10dXBsZShzZXF1ZW5jZSkgICAgIENyZWF0ZXMgYSB0dXBsZSB3aXRoIHNhbWUgZWxlbWVudHMgYXMgc2VxdWVuY2UuIElmIGFscmVhZHkKLSAgICAgICAgICAgICAgICAgICAgYSB0dXBsZSwgcmV0dXJuIGl0c2VsZiAobm90IGEgY29weSkuCi0gICAgICAgICAgICAgICAgICAgIFJldHVybnMgYSB0eXBlIG9iamVjdCBbc2VlIG1vZHVsZSB0eXBlc10gcmVwcmVzZW50aW5nCi0gICAgICAgICAgICAgICAgICAgIHRoZXR5cGUgb2Ygb2JqLiBFeGFtcGxlOiBpbXBvcnQgdHlwZXNpZiB0eXBlKHgpID09Ci10eXBlKG9iaikgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGU6IHByaW50ICdJdCBpcyBhIHN0cmluZydOQjogaXQgaXMKLSAgICAgICAgICAgICAgICAgICAgcmVjb21tYW5kZWQgdG8gdXNlIHRoZSBmb2xsb3dpbmcgZm9ybTppZiBpc2luc3RhbmNlKHgsCi0gICAgICAgICAgICAgICAgICAgIHR5cGVzLlN0cmluZ1R5cGUpOiBldGMuLi4KLXVuaWNocihjb2RlKSAgICAgICAgY29kZS4KLXVuaWNvZGUoc3RyaW5nWywgICAgQ3JlYXRlcyBhIFVuaWNvZGUgc3RyaW5nIGZyb20gYSA4LWJpdCBzdHJpbmcsIHVzaW5nCi1lbmNvZGluZ1ssIGVycm9yICAgIHRoZWdpdmVuIGVuY29kaW5nIG5hbWUgYW5kIGVycm9yIHRyZWF0bWVudCAoJ3N0cmljdCcsCi1dXV0pICAgICAgICAgICAgICAgICdpZ25vcmUnLG9yICdyZXBsYWNlJ30uCi0gICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgYXJndW1lbnRzLCByZXR1cm5zIGEgZGljdGlvbmFyeSBjb3JyZXNwb25kaW5ndG8gdGhlCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgbG9jYWwgc3ltYm9sIHRhYmxlLiBXaXRoIGEgbW9kdWxlLGNsYXNzIG9yIGNsYXNzCi12YXJzKFtvYmplY3RdKSAgICAgIGluc3RhbmNlIG9iamVjdCBhcyBhcmd1bWVudHJldHVybnMgYSBkaWN0aW9uYXJ5Ci0gICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCdzc3ltYm9sIHRhYmxlLiBVc2VmdWwgd2l0aCAiJSIKLSAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBvcGVyYXRvci4KLXppcChzZXExWywgc2VxMiwgICAgUmV0dXJucyBhbiBpdGVyYXRvciBvZiB0dXBsZXMgd2hlcmUgZWFjaCB0dXBsZSBjb250YWlucwotLi4uXSkgICAgICAgICAgICAgICB0aGUgbnRoIGVsZW1lbnQgb2YgZWFjaCBvZiB0aGUgYXJndW1lbnQgc2VxdWVuY2VzLgotCi0KLQotQnVpbHQtSW4gRXhjZXB0aW9ucwotCi1FeGNlcHRpb24+Ci0gICAgICAgICBSb290IGNsYXNzIGZvciBhbGwgZXhjZXB0aW9ucwotICAgIFN5c3RlbUV4aXQKLSAgICAgICAgIE9uICdzeXMuZXhpdCgpJwotICAgIFN0b3BJdGVyYXRpb24KLSAgICAgICAgIFNpZ25hbCB0aGUgZW5kIGZyb20gaXRlcmF0b3IuX19uZXh0X18oKQotICAgICAgICBBcml0aG1ldGljRXJyb3IKLSAgICAgICAgICAgICAgICAgQmFzZSBjbGFzcyBmb3IgT3ZlcmZsb3dFcnJvciwgWmVyb0RpdmlzaW9uRXJyb3IsCi0gICAgRmxvYXRpbmdQb2ludEVycm9yCi0gICAgICAgICAgICBGbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgV2hlbiBhIGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbiBmYWlscy4KLSAgICAgICAgICAgIE92ZXJmbG93RXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPbiBleGNlc3NpdmVseSBsYXJnZSBhcml0aG1ldGljIG9wZXJhdGlvbgotICAgICAgICAgICAgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgICAgICAgICAgIE9uIGRpdmlzaW9uIG9yIG1vZHVsbyBvcGVyYXRpb24gd2l0aCAwIGFzIDJuZCBhcmcKLSAgICAgICAgICAgIEFzc2VydGlvbkVycm9yCi0gICAgICAgICAgICAgICAgV2hlbiBhbiBhc3NlcnQgc3RhdGVtZW50IGZhaWxzLgotICAgICAgICBBdHRyaWJ1dGVFcnJvcgotICAgICAgICAgICAgICAgICAgICBPbiBhdHRyaWJ1dGUgcmVmZXJlbmNlIG9yIGFzc2lnbm1lbnQgZmFpbHVyZQotICAgICAgICBFbnZpcm9ubWVudEVycm9yICAgIFtuZXcgaW4gMS41LjJdCi0gICAgICAgICAgICAgICAgT24gZXJyb3Igb3V0c2lkZSBQeXRob247IGVycm9yIGFyZyB0dXBsZSBpcyAoZXJybm8sIGVyck1zZy4uLikKLSAgICAgICAgICAgIElPRXJyb3IgICAgW2NoYW5nZWQgaW4gMS41LjJdCi0gICAgICAgICAgICAgICBJL08tcmVsYXRlZCBvcGVyYXRpb24gZmFpbHVyZQotICAgICAgICAgICAgT1NFcnJvciAgICBbbmV3IGluIDEuNS4yXQotICAgICAgICAgICAgICAgdXNlZCBieSB0aGUgb3MgbW9kdWxlJ3Mgb3MuZXJyb3IgZXhjZXB0aW9uLgotICAgICAgICBFT0ZFcnJvcgotICAgICAgICAgICAgICAgICAgICBJbW1lZGlhdGUgZW5kLW9mLWZpbGUgaGl0IGJ5IGlucHV0KCkgb3IgcmF3X2lucHV0KCkKLSAgICAgICAgSW1wb3J0RXJyb3IKLSAgICAgICAgIE9uIGZhaWx1cmUgb2YgYGltcG9ydCcgdG8gZmluZCBtb2R1bGUgb3IgbmFtZQotICAgICAgICBLZXlib2FyZEludGVycnVwdAotICAgICAgICAgT24gdXNlciBlbnRyeSBvZiB0aGUgaW50ZXJydXB0IGtleSAob2Z0ZW4gYENvbnRyb2wtQycpCi0gICAgICAgIExvb2t1cEVycm9yCi0gICAgICAgICAgICAgICAgYmFzZSBjbGFzcyBmb3IgSW5kZXhFcnJvciwgS2V5RXJyb3IKLSAgICAgICAgICAgIEluZGV4RXJyb3IKLSAgICAgICAgICAgICAgICAgT24gb3V0LW9mLXJhbmdlIHNlcXVlbmNlIHN1YnNjcmlwdAotICAgICAgICAgICAgS2V5RXJyb3IKLSAgICAgICAgICAgICAgICAgT24gcmVmZXJlbmNlIHRvIGEgbm9uLWV4aXN0ZW50IG1hcHBpbmcgKGRpY3QpIGtleQotICAgICAgICBNZW1vcnlFcnJvcgotICAgICAgICAgT24gcmVjb3ZlcmFibGUgbWVtb3J5IGV4aGF1c3Rpb24KLSAgICAgICAgTmFtZUVycm9yCi0gICAgICAgICBPbiBmYWlsdXJlIHRvIGZpbmQgYSBsb2NhbCBvciBnbG9iYWwgKHVucXVhbGlmaWVkKSBuYW1lCi0gICAgICAgIFJ1bnRpbWVFcnJvcgotICAgICAgICAgT2Jzb2xldGUgY2F0Y2gtYWxsOyBkZWZpbmUgYSBzdWl0YWJsZSBlcnJvciBpbnN0ZWFkCi0gICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciAgIFtuZXcgaW4gMS41LjJdCi0gICAgICAgICAgICAgICAgT24gbWV0aG9kIG5vdCBpbXBsZW1lbnRlZAotICAgICAgICBTeW50YXhFcnJvcgotICAgICAgICAgT24gcGFyc2VyIGVuY291bnRlcmluZyBhIHN5bnRheCBlcnJvcgotICAgICAgIEluZGVudGF0aW9uRXJyb3IKLSAgICAgICAgICAgT24gcGFyc2VyIGVuY291bnRlcmluZyBhbiBpbmRlbnRhdGlvbiBzeW50YXggZXJyb3IKLSAgICAgICBUYWJFcnJvcgotICAgICAgICAgICBPbiBwYXJzZXIgZW5jb3VudGVyaW5nIGFuIGluZGVudGF0aW9uIHN5bnRheCBlcnJvcgotICAgICAgICBTeXN0ZW1FcnJvcgotICAgICAgICAgT24gbm9uLWZhdGFsIGludGVycHJldGVyIGVycm9yIC0gYnVnIC0gcmVwb3J0IGl0Ci0gICAgICAgIFR5cGVFcnJvcgotICAgICAgICAgT24gcGFzc2luZyBpbmFwcHJvcHJpYXRlIHR5cGUgdG8gYnVpbHQtaW4gb3Agb3IgZnVuYwotICAgICAgICBWYWx1ZUVycm9yCi0gICAgICAgICBPbiBhcmcgZXJyb3Igbm90IGNvdmVyZWQgYnkgVHlwZUVycm9yIG9yIG1vcmUgcHJlY2lzZQotICAgIFdhcm5pbmcKLSAgICAgICAgICAgICAgVXNlcldhcm5pbmcKLSAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nCi0gICAgICAgICAgICAgIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcKLSAgICAgICAgICAgICAgU3ludGF4V2FybmluZwotICAgICAgICAgICAgICBSdW50aW1lV2FybmluZwotICAgICAgICAgICAgICBGdXR1cmVXYXJuaW5nCi0KLQotCi1TdGFuZGFyZCBtZXRob2RzICYgb3BlcmF0b3JzIHJlZGVmaW5pdGlvbiBpbiBjbGFzc2VzCi0KLVN0YW5kYXJkIG1ldGhvZHMgJiBvcGVyYXRvcnMgbWFwIHRvIHNwZWNpYWwgJ19fbWV0aG9kc19fJyBhbmQgdGh1cyBtYXkgYmUKLSByZWRlZmluZWQgKG1vc3RseSBpbiB1c2VyLWRlZmluZWQgY2xhc3NlcyksIGUuZy46Ci0gICAgY2xhc3MgeDoKLSAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2KTogc2VsZi52YWx1ZSA9IHYKLSAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIHIpOiByZXR1cm4gc2VsZi52YWx1ZSArIHIKLSAgICBhID0geCgzKSAjIHNvcnQgb2YgbGlrZSBjYWxsaW5nIHguX19pbml0X18oYSwgMykKLSAgICBhICsgNCAgICAjIGlzIGVxdWl2YWxlbnQgdG8gYS5fX2FkZF9fKDQpCi0KLVNwZWNpYWwgbWV0aG9kcyBmb3IgYW55IGNsYXNzCi0KLShzOiBzZWxmLCBvOiBvdGhlcikKLSAgICAgICAgX19pbml0X18ocywgYXJncykgaW5zdGFuY2UgaW5pdGlhbGl6YXRpb24gKG9uIGNvbnN0cnVjdGlvbikKLSAgICAgICAgX19kZWxfXyhzKSAgICAgICAgY2FsbGVkIG9uIG9iamVjdCBkZW1pc2UgKHJlZmNvdW50IGJlY29tZXMgMCkKLSAgICAgICAgX19yZXByX18ocykgICAgICAgcmVwcigpIGFuZCBgLi4uYCBjb252ZXJzaW9ucwotICAgICAgICBfX3N0cl9fKHMpICAgICAgICBzdHIoKSBhbmQgJ3ByaW50JyBzdGF0ZW1lbnQKLSAgICAgICAgX19jbXBfXyhzLCBvKSAgICAgQ29tcGFyZXMgcyB0byBvIGFuZCByZXR1cm5zIDwwLCAwLCBvciA+MC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGVtZW50cyA+LCA8LCA9PSBldGMuLi4KLSAgICAgICAgX19oYXNoX18ocykgICAgICAgQ29tcHV0ZSBhIDMyIGJpdCBoYXNoIGNvZGU7IGhhc2goKSBhbmQgZGljdGlvbmFyeSBvcHMKLSAgICAgICAgX19ib29sX18ocykgICAgUmV0dXJucyBGYWxzZSBvciBUcnVlIGZvciB0cnV0aCB2YWx1ZSB0ZXN0aW5nCi0gICAgICAgIF9fZ2V0YXR0cl9fKHMsIG5hbWUpICBjYWxsZWQgd2hlbiBhdHRyIGxvb2t1cCBkb2Vzbid0IGZpbmQgPG5hbWU+Ci0gICAgICAgIF9fc2V0YXR0cl9fKHMsIG5hbWUsIHZhbCkgY2FsbGVkIHdoZW4gc2V0dGluZyBhbiBhdHRyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluc2lkZSwgZG9uJ3QgdXNlICJzZWxmLm5hbWUgPSB2YWx1ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlICJzZWxmLl9fZGljdF9fW25hbWVdID0gdmFsIikKLSAgICAgICAgX19kZWxhdHRyX18ocywgbmFtZSkgIGNhbGxlZCB0byBkZWxldGUgYXR0ciA8bmFtZT4KLSAgICAgICAgX19jYWxsX18oc2VsZiwgKmFyZ3MpIGNhbGxlZCB3aGVuIGFuIGluc3RhbmNlIGlzIGNhbGxlZCBhcyBmdW5jdGlvbi4KLQotT3BlcmF0b3JzCi0KLSAgICBTZWUgbGlzdCBpbiB0aGUgb3BlcmF0b3IgbW9kdWxlLiBPcGVyYXRvciBmdW5jdGlvbiBuYW1lcyBhcmUgcHJvdmlkZWQgd2l0aAotICAgIDIgdmFyaWFudHMsIHdpdGggb3Igd2l0aG91dAotICAgIGFkaW5nICYgdHJhaWxpbmcgJ19fJyAoZWcuIF9fYWRkX18gb3IgYWRkKS4KLQotICAgIE51bWVyaWMgb3BlcmF0aW9ucyBzcGVjaWFsIG1ldGhvZHMKLSAgICAoczogc2VsZiwgbzogb3RoZXIpCi0KLSAgICAgICAgcytvICAgICAgID0gIF9fYWRkX18ocyxvKSAgICAgICAgIHMtbyAgICAgICAgPSAgX19zdWJfXyhzLG8pCi0gICAgICAgIHMqbyAgICAgICA9ICBfX211bF9fKHMsbykgICAgICAgICBzL28gICAgICAgID0gIF9fZGl2X18ocyxvKQotICAgICAgICBzJW8gICAgICAgPSAgX19tb2RfXyhzLG8pICAgICAgICAgZGl2bW9kKHMsbykgPSBfX2Rpdm1vZF9fKHMsbykKLSAgICAgICAgcyoqbyAgICAgID0gIF9fcG93X18ocyxvKQotICAgICAgICBzJm8gICAgICAgPSAgX19hbmRfXyhzLG8pCi0gICAgICAgIHNebyAgICAgICA9ICBfX3hvcl9fKHMsbykgICAgICAgICBzfG8gICAgICAgID0gIF9fb3JfXyhzLG8pCi0gICAgICAgIHM8PG8gICAgICA9ICBfX2xzaGlmdF9fKHMsbykgICAgICBzPj5vICAgICAgID0gIF9fcnNoaWZ0X18ocyxvKQotICAgICAgICBib29sKHMpID0gX19ib29sX18ocykgKHVzZWQgaW4gYm9vbGVhbiB0ZXN0aW5nKQotICAgICAgICAtcyAgICAgICAgPSAgX19uZWdfXyhzKSAgICAgICAgICAgK3MgICAgICAgICA9ICBfX3Bvc19fKHMpCi0gICAgICAgIGFicyhzKSAgICA9ICBfX2Fic19fKHMpICAgICAgICAgICB+cyAgICAgICAgID0gIF9faW52ZXJ0X18ocykgIChiaXR3aXNlKQotICAgICAgICBzKz1vICAgICAgPSAgX19pYWRkX18ocyxvKSAgICAgICAgcy09byAgICAgICA9ICBfX2lzdWJfXyhzLG8pCi0gICAgICAgIHMqPW8gICAgICA9ICBfX2ltdWxfXyhzLG8pICAgICAgICBzLz1vICAgICAgID0gIF9faWRpdl9fKHMsbykKLSAgICAgICAgcyU9byAgICAgID0gIF9faW1vZF9fKHMsbykKLSAgICAgICAgcyoqPW8gICAgID0gIF9faXBvd19fKHMsbykKLSAgICAgICAgcyY9byAgICAgID0gIF9faWFuZF9fKHMsbykKLSAgICAgICAgc149byAgICAgID0gIF9faXhvcl9fKHMsbykgICAgICAgIHN8PW8gICAgICAgPSAgX19pb3JfXyhzLG8pCi0gICAgICAgIHM8PD1vICAgICA9ICBfX2lsc2hpZnRfXyhzLG8pICAgICBzPj49byAgICAgID0gIF9faXJzaGlmdF9fKHMsbykKLSAgICAgICAgQ29udmVyc2lvbnMKLSAgICAgICAgaW50KHMpICAgID0gIF9faW50X18ocykKLSAgICAgICAgZmxvYXQocykgID0gIF9fZmxvYXRfXyhzKSAgICAgICAgIGNvbXBsZXgocykgICAgPSAgX19jb21wbGV4X18ocykKLSAgICAgICAgb2N0KHMpICAgID0gIF9fb2N0X18ocykgICAgICAgICAgIGhleChzKSAgICAgPSAgX19oZXhfXyhzKQotICAgICAgICBSaWdodC1oYW5kLXNpZGUgZXF1aXZhbGVudHMgZm9yIGFsbCBiaW5hcnkgb3BlcmF0b3JzIGV4aXN0OwotICAgICAgICBhcmUgY2FsbGVkIHdoZW4gY2xhc3MgaW5zdGFuY2UgaXMgb24gci1oLXMgb2Ygb3BlcmF0b3I6Ci0gICAgICAgIGEgKyAzICBjYWxscyBfX2FkZF9fKGEsIDMpCi0gICAgICAgIDMgKyBhICBjYWxscyBfX3JhZGRfXyhhLCAzKQotCi0gICAgQWxsIHNlcXMgYW5kIG1hcHMsIGdlbmVyYWwgb3BlcmF0aW9ucyBwbHVzOgotICAgIChzOiBzZWxmLCBpOiBpbmRleCBvciBrZXkpCi0KLSAgICAgICAgbGVuKHMpICAgID0gX19sZW5fXyhzKSAgICAgICAgbGVuZ3RoIG9mIG9iamVjdCwgPj0gMC4gIExlbmd0aCAwID09IGZhbHNlCi0gICAgICAgIHNbaV0gICAgICA9IF9fZ2V0aXRlbV9fKHMsaSkgIEVsZW1lbnQgYXQgaW5kZXgva2V5IGksIG9yaWdpbiAwCi0KLSAgICBTZXF1ZW5jZXMsIGdlbmVyYWwgbWV0aG9kcywgcGx1czoKLSAgICAgIHNbaV09diAgICAgICAgICAgPSBfX3NldGl0ZW1fXyhzLGksdikKLSAgICAgIGRlbCBzW2ldICAgICAgICAgPSBfX2RlbGl0ZW1fXyhzLGkpCi0gICAgICBzW2k6al0gICAgICAgICAgID0gX19nZXRzbGljZV9fKHMsaSxqKQotICAgICAgc1tpOmpdPXNlcSAgICAgICA9IF9fc2V0c2xpY2VfXyhzLGksaixzZXEpCi0gICAgICBkZWwgc1tpOmpdICAgICAgID0gX19kZWxzbGljZV9fKHMsaSxqKSAgID09IHNbaTpqXSA9IFtdCi0gICAgICBzZXEgKiBuICAgICAgICAgID0gX19yZXBlYXRfXyhzZXEsIG4pCi0gICAgICBzMSArIHMyICAgICAgICAgID0gX19jb25jYXRfXyhzMSwgczIpCi0gICAgICBpIGluIHMgICAgICAgICAgID0gX19jb250YWluc19fKHMsIGkpCi0gICAgTWFwcGluZ3MsIGdlbmVyYWwgbWV0aG9kcywgcGx1cwotICAgICAgaGFzaChzKSAgICAgICAgICA9IF9faGFzaF9fKHMpIC0gaGFzaCB2YWx1ZSBmb3IgZGljdGlvbmFyeSByZWZlcmVuY2VzCi0gICAgICBzW2tdPXYgICAgICAgICAgID0gX19zZXRpdGVtX18ocyxrLHYpCi0gICAgICBkZWwgc1trXSAgICAgICAgID0gX19kZWxpdGVtX18ocyxrKQotCi1TcGVjaWFsIGluZm9ybWF0aXZlIHN0YXRlIGF0dHJpYnV0ZXMgZm9yIHNvbWUgdHlwZXM6Ci0KLSAgICBNb2R1bGVzOgotICAgICAgICBfX2RvY19fIChzdHJpbmcvTm9uZSwgUi9PKTogZG9jIHN0cmluZyAoPD0+IF9fZGljdF9fWydfX2RvY19fJ10pCi0gICAgICAgIF9fbmFtZV9fKHN0cmluZywgUi9PKTogbW9kdWxlIG5hbWUgKGFsc28gaW4gX19kaWN0X19bJ19fbmFtZV9fJ10pCi0gICAgICAgIF9fZGljdF9fIChkaWN0LCBSL08pOiBtb2R1bGUncyBuYW1lIHNwYWNlCi0gICAgICAgIF9fZmlsZV9fKHN0cmluZy91bmRlZmluZWQsIFIvTyk6IHBhdGhuYW1lIG9mIC5weWMsIC5weW8gb3IgLnB5ZCAodW5kZWYgZm9yCi0gICAgICAgICAgICAgICAgIG1vZHVsZXMgc3RhdGljYWxseSBsaW5rZWQgdG8gdGhlIGludGVycHJldGVyKQotCi0gICAgQ2xhc3NlczogICAgW2luIGJvbGQ6IHdyaXRhYmxlIHNpbmNlIDEuNS4yXQotICAgICAgICBfX2RvY19fIChzdHJpbmcvTm9uZSwgUi9XKTogZG9jIHN0cmluZyAoPD0+IF9fZGljdF9fWydfX2RvY19fJ10pCi0gICAgICAgIF9fbW9kdWxlX18gaXMgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZAotICAgICAgICBfX25hbWVfXyhzdHJpbmcsIFIvVyk6IGNsYXNzIG5hbWUgKGFsc28gaW4gX19kaWN0X19bJ19fbmFtZV9fJ10pCi0gICAgICAgIF9fYmFzZXNfXyAodHVwbGUsIFIvVyk6IHBhcmVudCBjbGFzc2VzCi0gICAgICAgIF9fZGljdF9fIChkaWN0LCBSL1cpOiBhdHRyaWJ1dGVzIChjbGFzcyBuYW1lIHNwYWNlKQotCi0gICAgSW5zdGFuY2VzOgotICAgICAgICBfX2NsYXNzX18gKGNsYXNzLCBSL1cpOiBpbnN0YW5jZSdzIGNsYXNzCi0gICAgICAgIF9fZGljdF9fIChkaWN0LCBSL1cpOiBhdHRyaWJ1dGVzCi0KLSAgICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zOiBbYm9sZDogd3JpdGFibGUgc2luY2UgMS41LjJdCi0gICAgICAgIF9fZG9jX18gKHN0cmluZy9Ob25lLCBSL1cpOiBkb2Mgc3RyaW5nCi0gICAgICAgIF9fbmFtZV9fKHN0cmluZywgUi9PKTogZnVuY3Rpb24gbmFtZQotICAgICAgICBmdW5jX2RvYyAoUi9XKTogc2FtZSBhcyBfX2RvY19fCi0gICAgICAgIGZ1bmNfbmFtZSAoUi9PKTogc2FtZSBhcyBfX25hbWVfXwotICAgICAgICBmdW5jX2RlZmF1bHRzICh0dXBsZS9Ob25lLCBSL1cpOiBkZWZhdWx0IGFyZ3MgdmFsdWVzIGlmIGFueQotICAgICAgICBmdW5jX2NvZGUgKGNvZGUsIFIvVyk6IGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcGlsZWQgZnVuY3Rpb24gYm9keQotICAgICAgICBmdW5jX2dsb2JhbHMgKGRpY3QsIFIvTyk6IHJlZiB0byBkaWN0aW9uYXJ5IG9mIGZ1bmMgZ2xvYmFsIHZhcmlhYmxlcwotICAgICAgICBmdW5jX2RpY3QgKGRpY3QsIFIvVyk6ICBzYW1lIGFzIF9fZGljdF9fIGNvbnRhaW5zIHRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZwotICAgICAgICAgICAgYXJiaXRyYXJ5IGZ1bmN0aW9uIGF0dHJpYnV0ZXMKLSAgICAgICAgZnVuY19jbG9zdXJlIChSL08pOiBOb25lIG9yIGEgdHVwbGUgb2YgY2VsbHMgdGhhdCBjb250YWluIGJpbmRpbmdzCi0gICAgICAgICAgICBmb3IgdGhlIGZ1bmN0aW9uJ3MgZnJlZSB2YXJpYWJsZXMuCi0KLQotICAgIFVzZXItZGVmaW5lZCBNZXRob2RzOgotICAgICAgICBfX2RvY19fIChzdHJpbmcvTm9uZSwgUi9PKTogZG9jIHN0cmluZwotICAgICAgICBfX25hbWVfXyhzdHJpbmcsIFIvTyk6IG1ldGhvZCBuYW1lIChzYW1lIGFzIGltX2Z1bmMuX19uYW1lX18pCi0gICAgICAgIGltX2NsYXNzIChjbGFzcywgUi9PKTogY2xhc3MgZGVmaW5pbmcgdGhlIG1ldGhvZCAobWF5IGJlIGEgYmFzZSBjbGFzcykKLSAgICAgICAgaW1fc2VsZiAoaW5zdGFuY2UvTm9uZSwgUi9PKTogdGFyZ2V0IGluc3RhbmNlIG9iamVjdCAoTm9uZSBpZiB1bmJvdW5kKQotICAgICAgICBpbV9mdW5jIChmdW5jdGlvbiwgUi9PKTogZnVuY3Rpb24gb2JqZWN0Ci0KLSAgICBCdWlsdC1pbiBGdW5jdGlvbnMgJiBtZXRob2RzOgotICAgICAgICBfX2RvY19fIChzdHJpbmcvTm9uZSwgUi9PKTogZG9jIHN0cmluZwotICAgICAgICBfX25hbWVfXyAoc3RyaW5nLCBSL08pOiBmdW5jdGlvbiBuYW1lCi0gICAgICAgIF9fc2VsZl9fIDogW21ldGhvZHMgb25seV0gdGFyZ2V0IG9iamVjdAotCi0gICAgQ29kZXM6Ci0gICAgICAgIGNvX25hbWUgKHN0cmluZywgUi9PKTogZnVuY3Rpb24gbmFtZQotICAgICAgICBjb19hcmdjb3VudCAoaW50LCBSLzApOiBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmdzCi0gICAgICAgIGNvX25sb2NhbHMgKGludCwgUi9PKTogbnVtYmVyIG9mIGxvY2FsIHZhcnMgKGluY2x1ZGluZyBhcmdzKQotICAgICAgICBjb192YXJuYW1lcyAodHVwbGUsIFIvTyk6IG5hbWVzIG9mIGxvY2FsIHZhcnMgKHN0YXJ0aW5nIHdpdGggYXJncykKLSAgICAgICAgY29fY2VsbHZhcnMgKHR1cGxlLCBSL08pKSB0aGUgbmFtZXMgb2YgbG9jYWwgdmFyaWFibGVzIHJlZmVyZW5jZWQgYnkKLSAgICAgICAgICAgIG5lc3RlZCBmdW5jdGlvbnMKLSAgICAgICAgY29fZnJlZXZhcnMgKHR1cGxlLCBSL08pKSBuYW1lcyBvZiBmcmVlIHZhcmlhYmxlcwotICAgICAgICBjb19jb2RlIChzdHJpbmcsIFIvTyk6IHNlcXVlbmNlIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucwotICAgICAgICBjb19jb25zdHMgKHR1cGxlLCBSL08pOiBsaXR0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGUsIDFzdCBvbmUgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmN0IGRvYyAob3IgTm9uZSkKLSAgICAgICAgY29fbmFtZXMgKHR1cGxlLCBSL08pOiBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZQotICAgICAgICBjb19maWxlbmFtZSAoc3RyaW5nLCBSL08pOiBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZAotICAgICAgICBjb19maXJzdGxpbmVubyAoaW50LCBSL08pOiBmaXJzdCBsaW5lIG51bWJlciBvZiB0aGUgZnVuY3Rpb24KLSAgICAgICAgY29fbG5vdGFiIChzdHJpbmcsIFIvTyk6IHN0cmluZyBlbmNvZGluZyBieXRlY29kZSBvZmZzZXRzIHRvIGxpbmUgbnVtYmVycy4KLSAgICAgICAgY29fc3RhY2tzaXplIChpbnQsIFIvTyk6IHJlcXVpcmVkIHN0YWNrIHNpemUgKGluY2x1ZGluZyBsb2NhbCB2YXJzKQotICAgICAgICBjb19mbGFncyAoaW50LCBSL08pOiBmbGFncyBmb3IgdGhlIGludGVycHJldGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBiaXQgMiBzZXQgaWYgZmN0IHVzZXMgIiphcmciIHN5bnRheAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0IDMgc2V0IGlmIGZjdCB1c2VzICcqKmtleXdvcmRzJyBzeW50YXgKLSAgICBGcmFtZXM6Ci0gICAgICAgIGZfYmFjayAoZnJhbWUvTm9uZSwgUi9PKTogcHJldmlvdXMgc3RhY2sgZnJhbWUgKHRvd2FyZCB0aGUgY2FsbGVyKQotICAgICAgICBmX2NvZGUgKGNvZGUsIFIvTyk6IGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkIGluIHRoaXMgZnJhbWUKLSAgICAgICAgZl9sb2NhbHMgKGRpY3QsIFIvTyk6IGxvY2FsIHZhcnMKLSAgICAgICAgZl9nbG9iYWxzIChkaWN0LCBSL08pOiBnbG9iYWwgdmFycwotICAgICAgICBmX2J1aWx0aW5zIChkaWN0LCBSL08pOiBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lcwotICAgICAgICBmX3Jlc3RyaWN0ZWQgKGludCwgUi9PKTogZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZmN0IGlzIGV4ZWN1dGVkIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0cmljdGVkIG1vZGUKLSAgICAgICAgZl9saW5lbm8gKGludCwgUi9PKTogY3VycmVudCBsaW5lIG51bWJlcgotICAgICAgICBmX2xhc3RpIChpbnQsIFIvTyk6IHByZWNpc2UgaW5zdHJ1Y3Rpb24gKGluZGV4IGludG8gYnl0ZWNvZGUpCi0gICAgICAgIGZfdHJhY2UgKGZ1bmN0aW9uL05vbmUsIFIvVyk6IGRlYnVnIGhvb2sgY2FsbGVkIGF0IHN0YXJ0IG9mIGVhY2ggc291cmNlIGxpbmUKLSAgICBUcmFjZWJhY2tzOgotICAgICAgICB0Yl9uZXh0IChmcmFtZS9Ob25lLCBSL08pOiBuZXh0IGxldmVsIGluIHN0YWNrIHRyYWNlICh0b3dhcmQgdGhlIGZyYW1lIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCkKLSAgICAgICAgdGJfZnJhbWUgKGZyYW1lLCBSL08pOiBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWwKLSAgICAgICAgdGJfbGluZW5vIChpbnQsIFIvTyk6IGxpbmUgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQKLSAgICAgICAgdGJfbGFzdGkgKGludCwgUi9PKTogcHJlY2lzZSBpbnN0cnVjdGlvbiAoaW5kZXggaW50byBieXRlY29kZSkKLQotICAgIFNsaWNlczoKLSAgICAgICAgc3RhcnQgKGFueS9Ob25lLCBSL08pOiBsb3dlcmJvdW5kCi0gICAgICAgIHN0b3AgKGFueS9Ob25lLCBSL08pOiB1cHBlcmJvdW5kCi0gICAgICAgIHN0ZXAgKGFueS9Ob25lLCBSL08pOiBzdGVwIHZhbHVlCi0KLSAgICBDb21wbGV4IG51bWJlcnM6Ci0gICAgICAgIHJlYWwgKGZsb2F0LCBSL08pOiByZWFsIHBhcnQKLSAgICAgICAgaW1hZyAoZmxvYXQsIFIvTyk6IGltYWdpbmFyeSBwYXJ0Ci0KLQotSW1wb3J0YW50IE1vZHVsZXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBzeXMgdmFyaWFibGVzCi0gICAgICBWYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudAotYXJndiAgICAgICAgICAgICAgICAgVGhlIGxpc3Qgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBwYXNzZWQgdG8gYVB5dGhvbgotICAgICAgICAgICAgICAgICAgICAgc2NyaXB0LiBzeXMuYXJndlswXSBpcyB0aGUgc2NyaXB0IG5hbWUuCi1idWlsdGluX21vZHVsZV9uYW1lcyBBIGxpc3Qgb2Ygc3RyaW5ncyBnaXZpbmcgdGhlIG5hbWVzIG9mIGFsbCBtb2R1bGVzd3JpdHRlbgotICAgICAgICAgICAgICAgICAgICAgaW4gQyB0aGF0IGFyZSBsaW5rZWQgaW50byB0aGlzIGludGVycHJldGVyLgotY2hlY2tfaW50ZXJ2YWwgICAgICAgSG93IG9mdGVuIHRvIGNoZWNrIGZvciB0aHJlYWQgc3dpdGNoZXMgb3Igc2lnbmFscyhtZWFzdXJlZAotICAgICAgICAgICAgICAgICAgICAgaW4gbnVtYmVyIG9mIHZpcnR1YWwgbWFjaGluZSBpbnN0cnVjdGlvbnMpCi1sYXN0X3R5cGUsICAgICAgICAgICBTZXQgb25seSB3aGVuIGFuIGV4Y2VwdGlvbiBub3QgaGFuZGxlZCBhbmRpbnRlcnByZXRlcgotbGFzdF92YWx1ZSwgICAgICAgICAgcHJpbnRzIGFuIGVycm9yLiBVc2VkIGJ5IGRlYnVnZ2Vycy4KLWxhc3RfdHJhY2ViYWNrCi1tYXhpbnQgICAgICAgICAgICAgICBtYXhpbXVtIHBvc2l0aXZlIHZhbHVlIGZvciBpbnRlZ2VycwotbW9kdWxlcyAgICAgICAgICAgICAgRGljdGlvbmFyeSBvZiBtb2R1bGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9hZGVkLgotcGF0aCAgICAgICAgICAgICAgICAgU2VhcmNoIHBhdGggZm9yIGV4dGVybmFsIG1vZHVsZXMuIENhbiBiZSBtb2RpZmllZGJ5Ci0gICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLiBzeXMucGF0aFswXSA9PSBkaXIgb2Ygc2NyaXB0IGV4ZWN1dGluZwotcGxhdGZvcm0gICAgICAgICAgICAgVGhlIGN1cnJlbnQgcGxhdGZvcm0sIGUuZy4gInN1bm9zNSIsICJ3aW4zMiIKLXBzMSwgcHMyICAgICAgICAgICAgIHByb21wdHMgdG8gdXNlIGluIGludGVyYWN0aXZlIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICBGaWxlIG9iamVjdHMgdXNlZCBmb3IgSS9PLiBPbmUgY2FuIHJlZGlyZWN0IGJ5YXNzaWduaW5nIGEKLXN0ZGluLCBzdGRvdXQsICAgICAgIG5ldyBmaWxlIG9iamVjdCB0byB0aGVtIChvciBhbnkgb2JqZWN0Oi53aXRoIGEgbWV0aG9kCi1zdGRlcnIgICAgICAgICAgICAgICB3cml0ZShzdHJpbmcpIGZvciBzdGRvdXQvc3RkZXJyLC53aXRoIGEgbWV0aG9kIHJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICAgICAgIGZvciBzdGRpbikKLXZlcnNpb24gICAgICAgICAgICAgIHN0cmluZyBjb250YWluaW5nIHZlcnNpb24gaW5mbyBhYm91dCBQeXRob24gaW50ZXJwcmV0ZXIuCi0gICAgICAgICAgICAgICAgICAgICAoYW5kIGFsc286IGNvcHlyaWdodCwgZGxsaGFuZGxlLCBleGVjX3ByZWZpeCwgcHJlZml4KQotdmVyc2lvbl9pbmZvICAgICAgICAgdHVwbGUgY29udGFpbmluZyBQeXRob24gdmVyc2lvbiBpbmZvIC0gKG1ham9yLCBtaW5vciwKLSAgICAgICAgICAgICAgICAgICAgIG1pY3JvLCBsZXZlbCwgc2VyaWFsKS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29tZSBzeXMgZnVuY3Rpb25zCi0gICAgIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ci1leGl0KG4pICAgICAgICAgICAgRXhpdHMgd2l0aCBzdGF0dXMgbi4gUmFpc2VzIFN5c3RlbUV4aXQgZXhjZXB0aW9uLihIZW5jZSBjYW4KLSAgICAgICAgICAgICAgICAgICBiZSBjYXVnaHQgYW5kIGlnbm9yZWQgYnkgcHJvZ3JhbSkKLWdldHJlZmNvdW50KG9iamVjdCBSZXR1cm5zIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdC4gR2VuZXJhbGx5IG9uZQotKSAgICAgICAgICAgICAgICAgIGhpZ2hlciB0aGFuIHlvdSBtaWdodCBleHBlY3QsIGJlY2F1c2Ugb2Ygb2JqZWN0IGFyZyB0ZW1wCi0gICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLgotc2V0Y2hlY2tpbnRlcnZhbCggIFNldHMgdGhlIGludGVycHJldGVyJ3MgdGhyZWFkIHN3aXRjaGluZyBpbnRlcnZhbCAoaW4gbnVtYmVyCi1pbnRlcnZhbCkgICAgICAgICAgb2YgdmlydHVhbCBjb2RlIGluc3RydWN0aW9ucywgZGVmYXVsdDoxMDApLgotc2V0dHJhY2UoZnVuYykgICAgIFNldHMgYSB0cmFjZSBmdW5jdGlvbjogY2FsbGVkIGJlZm9yZSBlYWNoIGxpbmUgb2Zjb2RlIGlzCi0gICAgICAgICAgICAgICAgICAgZXhpdGVkLgotc2V0cHJvZmlsZShmdW5jKSAgIFNldHMgYSBwcm9maWxlIGZ1bmN0aW9uIGZvciBwZXJmb3JtYW5jZSBwcm9maWxpbmcuCi0gICAgICAgICAgICAgICAgICAgSW5mbyBvbiBleGNlcHRpb24gY3VycmVudGx5IGJlaW5nIGhhbmRsZWQ7IHRoaXMgaXMgYXR1cGxlCi0gICAgICAgICAgICAgICAgICAgKGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFjZWJhY2spLldhcm5pbmc6IGFzc2lnbmluZyB0aGUKLWV4Y19pbmZvKCkgICAgICAgICB0cmFjZWJhY2sgcmV0dXJuIHZhbHVlIHRvIGEgbG9jYWwgdmFyaWFibGUgaW4gYQotICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsaW5nIGFuIGV4Y2VwdGlvbiB3aWxsIGNhdXNlIGEgY2lyY3VsYXIKLSAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UuCi1zZXRkZWZhdWx0ZW5jb2RpbmcgQ2hhbmdlIGRlZmF1bHQgVW5pY29kZSBlbmNvZGluZyAtIGRlZmF1bHRzIHRvIDctYml0IEFTQ0lJLgotKGVuY29kaW5nKQotZ2V0cmVjdXJzaW9ubGltaXQgIFJldHJpZXZlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLgotKCkKLXNldHJlY3Vyc2lvbmxpbWl0ICBTZXQgbWF4aW11bSByZWN1cnNpb24gZGVwdGguIChEZWZhdWx0cyB0byAxMDAwLikKLSgpCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zCi0ic3lub255bSIgZm9yIHdoYXRldmVyIE8vUy1zcGVjaWZpYyBtb2R1bGUgaXMgcHJvcGVyIGZvciBjdXJyZW50IGVudmlyb25tZW50LgotdGhpcyBtb2R1bGUgdXNlcyBwb3NpeCB3aGVuZXZlciBwb3NzaWJsZS4KLShzZWUgYWxzbyBNLkEuIExlbWJ1cmcncyB1dGlsaXR5IGh0dHA6Ly93d3cubGVtYnVyZy5jb20vZmlsZXMvcHl0aG9uLwotcGxhdGZvcm0ucHkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIG9zIHZhcmlhYmxlcwotICAgICBWYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYW5pbmcKLW5hbWUgICAgICAgICAgICAgICAgbmFtZSBvZiBPL1Mtc3BlY2lmaWMgbW9kdWxlIChlLmcuICJwb3NpeCIsICJtYWMiLCAibnQiKQotcGF0aCAgICAgICAgICAgICAgICBPL1Mtc3BlY2lmaWMgbW9kdWxlIGZvciBwYXRoIG1hbmlwdWxhdGlvbnMuCi0gICAgICAgICAgICAgICAgICAgIE9uIFVuaXgsIG9zLnBhdGguc3BsaXQoKSA8PT4gcG9zaXhwYXRoLnNwbGl0KCkKLWN1cmRpciAgICAgICAgICAgICAgc3RyaW5nIHVzZWQgdG8gcmVwcmVzZW50IGN1cnJlbnQgZGlyZWN0b3J5ICgnLicpCi1wYXJkaXIgICAgICAgICAgICAgIHN0cmluZyB1c2VkIHRvIHJlcHJlc2VudCBwYXJlbnQgZGlyZWN0b3J5ICgnLi4nKQotc2VwICAgICAgICAgICAgICAgICBzdHJpbmcgdXNlZCB0byBzZXBhcmF0ZSBkaXJlY3RvcmllcyAoJy8nIG9yICdcJykuIFRpcDogdXNlCi0gICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbigpIHRvIGJ1aWxkIHBvcnRhYmxlIHBhdGhzLgotYWx0c2VwICAgICAgICAgICAgICBBbHRlcm5hdGUgc2VwCi1pZiBhcHBsaWNhYmxlIChOb25lCi1vdGhlcndpc2UpCi1wYXRoc2VwICAgICAgICAgICAgIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgKGFzIGluCi0gICAgICAgICAgICAgICAgICAgICRQQVRIKSwgZWcuICc7JyBmb3Igd2luZG93cy4KLWxpbmVzZXAgICAgICAgICAgICAgbGluZSBzZXBhcmF0b3IgYXMgdXNlZCBpbiBiaW5hcnkgZmlsZXMsIGllICdcbicgb24gVW5peCwgJ1wKLSAgICAgICAgICAgICAgICAgICAgclxuJyBvbiBEb3MvV2luLCAnXHInCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIG9zIGZ1bmN0aW9ucwotICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotbWFrZWRpcnMocGF0aFssICAgICBSZWN1cnNpdmUgZGlyZWN0b3J5IGNyZWF0aW9uIChjcmVhdGUgcmVxdWlyZWQgaW50ZXJtZWRpYXJ5Ci1tb2RlPTA3NzddKSAgICAgICAgIGRpcnMpOyBvcy5lcnJvciBpZiBmYWlscy4KLXJlbW92ZWRpcnMocGF0aCkgICAgUmVjdXJzaXZlIGRpcmVjdG9yeSBkZWxldGUgKGRlbGV0ZSBpbnRlcm1lZGlhcnkgZW1wdHkKLSAgICAgICAgICAgICAgICAgICAgZGlycyk7IGlmIGZhaWxzLgotcmVuYW1lcyhvbGQsIG5ldykgICBSZWN1cnNpdmUgZGlyZWN0b3J5IG9yIGZpbGUgcmVuYW1pbmc7IG9zLmVycm9yIGlmIGZhaWxzLgotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4Ci1kb24ndCBpbXBvcnQgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGltcG9ydCBvcyBpbnN0ZWFkICEKLShzZWUgYWxzbyBtb2R1bGU6IHNodXRpbCBmb3IgZmlsZSBjb3B5ICYgcmVtb3ZlIGZjdHMpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpeCBWYXJpYWJsZXMKLVZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWFuaW5nCi1lbnZpcm9uICBkaWN0aW9uYXJ5IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcywgZS5nLnBvc2l4LmVudmlyb25bJ0hPTUUnXS4KLWVycm9yICAgIGV4Y2VwdGlvbiByYWlzZWQgb24gUE9TSVgtcmVsYXRlZCBlcnJvci4KLSAgICAgICAgIENvcnJlc3BvbmRpbmcgdmFsdWUgaXMgdHVwbGUgb2YgZXJybm8gY29kZSBhbmQgcGVycm9yKCkgc3RyaW5nLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcG9zaXggZnVuY3Rpb25zCi0gICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotY2hkaXIocGF0aCkgICAgIENoYW5nZXMgY3VycmVudCBkaXJlY3RvcnkgdG8gcGF0aC4KLWNobW9kKHBhdGgsICAgICBDaGFuZ2VzIHRoZSBtb2RlIG9mIHBhdGggdG8gdGhlIG51bWVyaWMgbW9kZQotbW9kZSkKLWNsb3NlKGZkKSAgICAgICBDbG9zZXMgZmlsZSBkZXNjcmlwdG9yIGZkIG9wZW5lZCB3aXRoIHBvc2l4Lm9wZW4uCi1fZXhpdChuKSAgICAgICAgSW1tZWRpYXRlIGV4aXQsIHdpdGggbm8gY2xlYW51cHMsIG5vIFN5c3RlbUV4aXQsZXRjLiBTaG91bGQgdXNlCi0gICAgICAgICAgICAgICAgdGhpcyB0byBleGl0IGEgY2hpbGQgcHJvY2Vzcy4KLWV4ZWN2KHAsIGFyZ3MpICAiQmVjb21lIiBleGVjdXRhYmxlIHAgd2l0aCBhcmdzIGFyZ3MKLWdldGN3ZCgpICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQotZ2V0cGlkKCkgICAgICAgIFJldHVybnMgdGhlIGN1cnJlbnQgcHJvY2VzcyBpZAotZm9yaygpICAgICAgICAgIExpa2UgQydzIGZvcmsoKS4gUmV0dXJucyAwIHRvIGNoaWxkLCBjaGlsZCBwaWQgdG8gcGFyZW50LltOb3QKLSAgICAgICAgICAgICAgICBvbiBXaW5kb3dzXQota2lsbChwaWQsICAgICAgIExpa2UgQydzIGtpbGwgW05vdCBvbiBXaW5kb3dzXQotc2lnbmFsKQotbGlzdGRpcihwYXRoKSAgIExpc3RzIChiYXNlKW5hbWVzIG9mIGVudHJpZXMgaW4gZGlyZWN0b3J5IHBhdGgsIGV4Y2x1ZGluZyAnLicKLSAgICAgICAgICAgICAgICBhbmQgJy4uJwotbHNlZWsoZmQsIHBvcywgIFNldHMgY3VycmVudCBwb3NpdGlvbiBpbiBmaWxlIGZkIHRvIHBvc2l0aW9uIHBvcywgZXhwcmVzc2VkYXMKLWhvdykgICAgICAgICAgICBhbiBvZmZzZXQgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIGZpbGUgKGhvdz0wKSwgdG9jdXJyZW50Ci0gICAgICAgICAgICAgICAgcG9zaXRpb24gKGhvdz0xKSwgb3IgdG8gZW5kIG9mIGZpbGUgKGhvdz0yKQotbWtkaXIocGF0aFssICAgIENyZWF0ZXMgYSBkaXJlY3RvcnkgbmFtZWQgcGF0aCB3aXRoIG51bWVyaWMgbW9kZSAoZGVmYXVsdCAwNzc3KQotbW9kZV0pCi1vcGVuKGZpbGUsICAgICAgTGlrZSBDJ3Mgb3BlbigpLiBSZXR1cm5zIGZpbGUgZGVzY3JpcHRvci4gVXNlIGZpbGUgb2JqZWN0Ci1mbGFncywgbW9kZSkgICAgZmN0c3JhdGhlciB0aGFuIHRoaXMgbG93IGxldmVsIG9uZXMuCi1waXBlKCkgICAgICAgICAgQ3JlYXRlcyBhIHBpcGUuIFJldHVybnMgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIChyLCB3KSBbTm90IG9uCi0gICAgICAgICAgICAgICAgV2luZG93c10uCi1wb3Blbihjb21tYW5kLCAgT3BlbnMgYSBwaXBlIHRvIG9yIGZyb20gY29tbWFuZC4gUmVzdWx0IGlzIGEgZmlsZSBvYmplY3QgdG8KLW1vZGU9J3InLCAgICAgICByZWFkIHRvIG9yd3JpdGUgZnJvbSwgYXMgaW5kaWNhdGVkIGJ5IG1vZGUgYmVpbmcgJ3InIG9yICd3Jy4KLWJ1ZlNpemU9MCkgICAgICBVc2UgaXQgdG8gY2F0Y2ggYWNvbW1hbmQgb3V0cHV0ICgncicgbW9kZSkgb3IgdG8gZmVlZCBpdCAoJ3cnCi0gICAgICAgICAgICAgICAgbW9kZSkuCi1yZW1vdmUocGF0aCkgICAgU2VlIHVubGluay4KLXJlbmFtZShzcmMsIGRzdCBSZW5hbWVzL21vdmVzIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBzcmMgdG8gZHN0LiBbZXJyb3IgaWZ0YXJnZXQKLSkgICAgICAgICAgICAgICBuYW1lIGFscmVhZHkgZXhpc3RzXQotcm1kaXIocGF0aCkgICAgIFJlbW92ZXMgdGhlIGVtcHR5IGRpcmVjdG9yeSBwYXRoCi1yZWFkKGZkLCBuKSAgICAgUmVhZHMgbiBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciBmZCBhbmQgcmV0dXJuIGFzIHN0cmluZy4KLSAgICAgICAgICAgICAgICBSZXR1cm5zIHN0X21vZGUsIHN0X2lubywgc3RfZGV2LCBzdF9ubGluaywgc3RfdWlkLHN0X2dpZCwKLXN0YXQocGF0aCkgICAgICBzdF9zaXplLCBzdF9hdGltZSwgc3RfbXRpbWUsIHN0X2N0aW1lLltzdF9pbm8sIHN0X3VpZCwgc3RfZ2lkCi0gICAgICAgICAgICAgICAgYXJlIGR1bW15IG9uIFdpbmRvd3NdCi1zeXN0ZW0oY29tbWFuZCkgRXhlY3V0ZXMgc3RyaW5nIGNvbW1hbmQgaW4gYSBzdWJzaGVsbC4gUmV0dXJucyBleGl0c3RhdHVzIG9mCi0gICAgICAgICAgICAgICAgc3Vic2hlbGwgKHVzdWFsbHkgMCBtZWFucyBPSykuCi0gICAgICAgICAgICAgICAgUmV0dXJucyBhY2N1bXVsYXRlZCBDUFUgdGltZXMgaW4gc2VjICh1c2VyLCBzeXN0ZW0sIGNoaWxkcmVuJ3MKLXRpbWVzKCkgICAgICAgICB1c2VyLGNoaWxkcmVuJ3Mgc3lzLCBlbGFwc2VkIHJlYWwgdGltZSkuIFszIGxhc3Qgbm90IG9uCi0gICAgICAgICAgICAgICAgV2luZG93c10KLXVubGluayhwYXRoKSAgICBVbmxpbmtzICgiZGVsZXRlcyIpIHRoZSBmaWxlIChub3QgZGlyISkgcGF0aC4gc2FtZSBhczogcmVtb3ZlCi11dGltZShwYXRoLCAoICAgU2V0cyB0aGUgYWNjZXNzICYgbW9kaWZpZWQgdGltZSBvZiB0aGUgZmlsZSB0byB0aGUgZ2l2ZW4gdHVwbGUKLWFUaW1lLCBtVGltZSkpICBvZiB2YWx1ZXMuCi13YWl0KCkgICAgICAgICAgV2FpdHMgZm9yIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbi4gUmV0dXJucyB0dXBsZSBvZnBpZCwKLSAgICAgICAgICAgICAgICBleGl0X3N0YXR1cyBbTm90IG9uIFdpbmRvd3NdCi13YWl0cGlkKHBpZCwgICAgV2FpdHMgZm9yIHByb2Nlc3MgcGlkIHRvIGNvbXBsZXRlLiBSZXR1cm5zIHR1cGxlIG9mcGlkLAotb3B0aW9ucykgICAgICAgIGV4aXRfc3RhdHVzIFtOb3Qgb24gV2luZG93c10KLXdyaXRlKGZkLCBzdHIpICBXcml0ZXMgc3RyIHRvIGZpbGUgZmQuIFJldHVybnMgbmIgb2YgYnl0ZXMgd3JpdHRlbi4KLQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoCi1EbyBub3QgaW1wb3J0IHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBpbXBvcnQgb3MgaW5zdGVhZCBhbmQgcmVmZXIgdG8gdGhpcyBtb2R1bGUKLWFzIG9zLnBhdGguIChlLmcuIG9zLnBhdGguZXhpc3RzKHApKSAhCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgcG9zaXhwYXRoIGZ1bmN0aW9ucwotIEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ci1hYnNwYXRoKHApIFJldHVybnMgYWJzb2x1dGUgcGF0aCBmb3IgcGF0aCBwLCB0YWtpbmcgY3VycmVudCB3b3JraW5nIGRpciBpbgotICAgICAgICAgICBhY2NvdW50LgotZGlybmFtZS8KLWJhc2VuYW1lKHAgZGlyZWN0b3J5IGFuZCBuYW1lIHBhcnRzIG9mIHRoZSBwYXRoIHAuIFNlZSBhbHNvIHNwbGl0LgotKQotZXhpc3RzKHApICBUcnVlIGlmIHN0cmluZyBwIGlzIGFuIGV4aXN0aW5nIHBhdGggKGZpbGUgb3IgZGlyZWN0b3J5KQotZXhwYW5kdXNlciBSZXR1cm5zIHN0cmluZyB0aGF0IGlzIChhIGNvcHkgb2YpIHAgd2l0aCAifiIgZXhwYW5zaW9uIGRvbmUuCi0ocCkKLWV4cGFuZHZhcnMgUmV0dXJucyBzdHJpbmcgdGhhdCBpcyAoYSBjb3B5IG9mKSBwIHdpdGggZW52aXJvbm1lbnQgdmFycyBleHBhbmRlZC4KLShwKSAgICAgICAgW1dpbmRvd3M6IGNhc2Ugc2lnbmlmaWNhbnQ7IG11c3QgdXNlIFVuaXg6ICR2YXIgbm90YXRpb24sIG5vdCAldmFyJV0KLWdldHNpemUoICAgcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGZpbGVuYW1lLiByYWlzZSBvcy5lcnJvci4KLWZpbGVuYW1lKQotZ2V0bXRpbWUoICByZXR1cm4gbGFzdCBtb2RpZmljYXRpb24gdGltZSBvZiBmaWxlbmFtZSAoaW50ZWdlciBuYiBvZiBzZWNvbmRzCi1maWxlbmFtZSkgIHNpbmNlIGVwb2NoKS4KLWdldGF0aW1lKCAgcmV0dXJuIGxhc3QgYWNjZXNzIHRpbWUgb2YgZmlsZW5hbWUgKGludGVnZXIgbmIgb2Ygc2Vjb25kcyBzaW5jZQotZmlsZW5hbWUpICBlcG9jaCkuCi1pc2FicyhwKSAgIFRydWUgaWYgc3RyaW5nIHAgaXMgYW4gYWJzb2x1dGUgcGF0aC4KLWlzZGlyKHApICAgVHJ1ZSBpZiBzdHJpbmcgcCBpcyBhIGRpcmVjdG9yeS4KLWlzbGluayhwKSAgVHJ1ZSBpZiBzdHJpbmcgcCBpcyBhIHN5bWJvbGljIGxpbmsuCi1pc21vdW50KHApIFRydWUgaWYgc3RyaW5nIHAgaXMgYSBtb3VudCBwb2ludCBbdHJ1ZSBmb3IgYWxsIGRpcnMgb24gV2luZG93c10uCi1qb2luKHBbLHEgIEpvaW5zIG9uZSBvciBtb3JlIHBhdGggY29tcG9uZW50cyBpbnRlbGxpZ2VudGx5LgotWywuLi5dXSkKLSAgICAgICAgICAgU3BsaXRzIHAgaW50byAoaGVhZCwgdGFpbCkgd2hlcmUgdGFpbCBpcyBsYXN0cGF0aG5hbWUgY29tcG9uZW50IGFuZAotc3BsaXQocCkgICA8aGVhZD4gaXMgZXZlcnl0aGluZyBsZWFkaW5ndXAgdG8gdGhhdC4gPD0+IChkaXJuYW1lKHApLCBiYXNlbmFtZQotICAgICAgICAgICAocCkpCi1zcGxpdGRyaXZlIFNwbGl0cyBwYXRoIHAgaW4gYSBwYWlyICgnZHJpdmU6JywgdGFpbCkgW1dpbmRvd3NdCi0ocCkKLXNwbGl0ZXh0KHAgU3BsaXRzIGludG8gKHJvb3QsIGV4dCkgd2hlcmUgbGFzdCBjb21wIG9mIHJvb3QgY29udGFpbnMgbm8gcGVyaW9kcwotKSAgICAgICAgICBhbmQgZXh0IGlzIGVtcHR5IG9yIHN0YXJ0c3dpdGggYSBwZXJpb2QuCi0gICAgICAgICAgIENhbGxzIHRoZSBmdW5jdGlvbiB2aXNpdCB3aXRoIGFyZ3VtZW50cyhhcmcsIGRpcm5hbWUsIG5hbWVzKSBmb3IKLSAgICAgICAgICAgZWFjaCBkaXJlY3RvcnkgcmVjdXJzaXZlbHkgaW50aGUgZGlyZWN0b3J5IHRyZWUgcm9vdGVkIGF0IHAKLXdhbGsocCwgICAgKGluY2x1ZGluZyBwIGl0c2VsZiBpZiBpdCdzIGEgZGlyKVRoZSBhcmd1bWVudCBkaXJuYW1lIHNwZWNpZmllcyB0aGUKLXZpc2l0LCBhcmcgdmlzaXRlZCBkaXJlY3RvcnksIHRoZSBhcmd1bWVudG5hbWVzIGxpc3RzIHRoZSBmaWxlcyBpbiB0aGUKLSkgICAgICAgICAgZGlyZWN0b3J5LiBUaGUgdmlzaXQgZnVuY3Rpb24gbWF5bW9kaWZ5IG5hbWVzIHRvIGluZmx1ZW5jZSB0aGUgc2V0Ci0gICAgICAgICAgIG9mIGRpcmVjdG9yaWVzIHZpc2l0ZWQgYmVsb3dkaXJuYW1lLCBlLmcuLCB0byBhdm9pZCB2aXNpdGluZyBjZXJ0YWluCi0gICAgICAgICAgIHBhcnRzIG9mIHRoZSB0cmVlLgotCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsCi1oaWdoLWxldmVsIGZpbGUgb3BlcmF0aW9ucyAoY29weWluZywgZGVsZXRpbmcpLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1haW4gc2h1dGlsIGZ1bmN0aW9ucwotICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotY29weShzcmMsIGRzdCkgICAgIENvcGllcyB0aGUgY29udGVudHMgb2YgZmlsZSBzcmMgdG8gZmlsZSBkc3QsIHJldGFpbmluZyBmaWxlCi0gICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbnMuCi1jb3B5dHJlZShzcmMsIGRzdCAgUmVjdXJzaXZlbHkgY29waWVzIGFuIGVudGlyZSBkaXJlY3RvcnkgdHJlZSByb290ZWQgYXQgc3JjCi1bLCBzeW1saW5rc10pICAgICAgaW50byBkc3QgKHdoaWNoIHNob3VsZCBub3QgYWxyZWFkeSBleGlzdCkuIElmIHN5bWxpbmtzIGlzCi0gICAgICAgICAgICAgICAgICAgdHJ1ZSwgbGlua3MgaW5zcmMgYXJlIGtlcHQgYXMgc3VjaCBpbiBkc3QuCi1ybXRyZWUocGF0aFssICAgICAgRGVsZXRlcyBhbiBlbnRpcmUgZGlyZWN0b3J5IHRyZWUsIGlnbm9yaW5nIGVycm9ycyBpZgotaWdub3JlX2Vycm9yc1ssICAgIGlnbm9yZV9lcnJvcnMgdHJ1ZSxvciBjYWxsaW5nIG9uZXJyb3IoZnVuYywgcGF0aCwKLW9uZXJyb3JdXSkgICAgICAgICBzeXMuZXhjX2luZm8oKSkgaWYgc3VwcGxpZWQgd2l0aAotCi0oYW5kIGFsc286IGNvcHlmaWxlLCBjb3B5bW9kZSwgY29weXN0YXQsIGNvcHkyKQotCi10aW1lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZXMKLVZhcmlhYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYW5pbmcKLWFsdHpvbmUgIHNpZ25lZCBvZmZzZXQgb2YgbG9jYWwgRFNUIHRpbWV6b25lIGluIHNlYyB3ZXN0IG9mIHRoZSAwdGggbWVyaWRpYW4uCi1kYXlsaWdodCBub256ZXJvIGlmIGEgRFNUIHRpbWV6b25lIGlzIHNwZWNpZmllZAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucwotICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotdGltZSgpICAgICAgICByZXR1cm4gYSBmbG9hdCByZXByZXNlbnRpbmcgVVRDIHRpbWUgaW4gc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2guCi1nbXRpbWUoc2VjcyksIHJldHVybiBhIHR1cGxlIHJlcHJlc2VudGluZyB0aW1lIDogKHllYXIgYWFhYSwgbW9udGgoMS0xMiksZGF5Ci1sb2NhbHRpbWUoICAgICgxLTMxKSwgaG91cigwLTIzKSwgbWludXRlKDAtNTkpLCBzZWNvbmQoMC01OSksIHdlZWtkYXkoMC02LCAwIGlzCi1zZWNzKSAgICAgICAgIG1vbmRheSksIEp1bGlhbiBkYXkoMS0zNjYpLCBkYXlsaWdodCBmbGFnKC0xLDAgb3IgMSkpCi1hc2N0aW1lKAotdGltZVR1cGxlKSwKLXN0cmZ0aW1lKAotZm9ybWF0LCAgICAgICByZXR1cm4gYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aW1lLgotdGltZVR1cGxlKQotbWt0aW1lKHR1cGxlKSBpbnZlcnNlIG9mIGxvY2FsdGltZSgpLiBSZXR1cm4gYSBmbG9hdC4KLXN0cnB0aW1lKCAgICAgcGFyc2UgYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aW1lLCByZXR1cm4gdHVwbGUgYXMgaW4KLXN0cmluZ1ssICAgICAgZ210aW1lKCkuCi1mb3JtYXRdKQotc2xlZXAoc2VjcykgICBTdXNwZW5kIGV4ZWN1dGlvbiBmb3IgPHNlY3M+IHNlY29uZHMuIDxzZWNzPiBjYW4gYmUgYSBmbG9hdC4KLQotYW5kIGFsc286IGNsb2NrLCBjdGltZS4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nCi0KLUFzIG9mIFB5dGhvbiAyLjAsIG11Y2ggKHRob3VnaCBub3QgYWxsKSBvZiB0aGUgZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBieSB0aGUKLXN0cmluZyBtb2R1bGUgaGF2ZSBiZWVuIHN1cGVyc2VkZWQgYnkgYnVpbHQtaW4gc3RyaW5nIG1ldGhvZHMgLSBzZWUgT3BlcmF0aW9ucwotb24gc3RyaW5ncyBmb3IgZGV0YWlscy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lIHN0cmluZyB2YXJpYWJsZXMKLSAgICAgICAgICAgICAgVmFyaWFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lYW5pbmcKLWRpZ2l0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgc3RyaW5nICcwMTIzNDU2Nzg5JwotaGV4ZGlnaXRzLCBvY3RkaWdpdHMgICAgICAgICAgICAgICAgIGxlZ2FsIGhleGFkZWNpbWFsICYgb2N0YWwgZGlnaXRzCi1sZXR0ZXJzLCB1cHBlcmNhc2UsIGxvd2VyY2FzZSwgICAgICAgU3RyaW5ncyBjb250YWluaW5nIHRoZSBhcHByb3ByaWF0ZQotd2hpdGVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMKLWluZGV4X2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkIGJ5IGluZGV4KCkgaWYgc3Vic3RyIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvbWUgc3RyaW5nIGZ1bmN0aW9ucwotICAgICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotZXhwYW5kdGFicyhzLCAgICAgIHJldHVybnMgYSBjb3B5IG9mIHN0cmluZyA8cz4gd2l0aCB0YWJzIGV4cGFuZGVkLgotdGFiU2l6ZSkKLWZpbmQvcmZpbmQocywgc3ViICBSZXR1cm4gdGhlIGxvd2VzdC9oaWdoZXN0IGluZGV4IGluIDxzPiB3aGVyZSB0aGUgc3Vic3RyaW5nCi1bLCBzdGFydD0wWywgZW5kPSAgPHN1Yj4gaXMgZm91bmQgc3VjaCB0aGF0IDxzdWI+IGlzIHdob2xseSBjb250YWluZWQgaW5zCi0wXSkgICAgICAgICAgICAgICAgW3N0YXJ0OmVuZF0uIFJldHVybiAtMSBpZiA8c3ViPiBub3QgZm91bmQuCi1sanVzdC9yanVzdC9jZW50ZXIgUmV0dXJuIGEgY29weSBvZiBzdHJpbmcgPHM+IGxlZnQvcmlnaHQganVzdGlmaWVkL2NlbnRlcmQgaW4KLShzLCB3aWR0aCkgICAgICAgICBhZmllbGQgb2YgZ2l2ZW4gd2lkdGgsIHBhZGRlZCB3aXRoIHNwYWNlcy4gPHM+IGlzCi0gICAgICAgICAgICAgICAgICAgbmV2ZXJ0cnVuY2F0ZWQuCi1sb3dlci91cHBlcihzKSAgICAgUmV0dXJuIGEgc3RyaW5nIHRoYXQgaXMgKGEgY29weSBvZikgPHM+IGluIGxvd2VyY2FzZS8KLSAgICAgICAgICAgICAgICAgICB1cHBlcmNhc2UKLXNwbGl0KHNbLCBzZXA9ICAgICBSZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHdvcmRzIG9mIHRoZSBzdHJpbmcgPHM+LHVzaW5nCi13aGl0ZXNwYWNlWywgICAgICAgdGhlIHN0cmluZyA8c2VwPiBhcyBhIHNlcGFyYXRvci4KLW1heHNwbGl0PTBdXSkKLWpvaW4od29yZHNbLCBzZXA9JyBDb25jYXRlbmF0ZSBhIGxpc3Qgb3IgdHVwbGUgb2Ygd29yZHMgd2l0aAotJ10pICAgICAgICAgICAgICAgIGludGVydmVuaW5nc2VwYXJhdG9yczsgaW52ZXJzZSBvZiBzcGxpdC4KLXJlcGxhY2Uocywgb2xkLCAgICBSZXR1cm5zIGEgY29weSBvZiBzdHJpbmcgPHM+IHdpdGggYWxsIG9jY3VycmVuY2VzIG9mCi1uZXdbLCBtYXhzcGxpdD0wXSAgc3Vic3RyaW5nPG9sZD4gcmVwbGFjZWQgYnkgPG5ldz4uIExpbWl0cyB0byA8bWF4c3BsaXQ+Ci0gICAgICAgICAgICAgICAgICAgZmlyc3RzdWJzdGl0dXRpb25zIGlmIHNwZWNpZmllZC4KLXN0cmlwKHMpICAgICAgICAgICBSZXR1cm4gYSBzdHJpbmcgdGhhdCBpcyAoYSBjb3B5IG9mKSA8cz4gd2l0aG91dCBsZWFkaW5nYW5kCi0gICAgICAgICAgICAgICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZS4gc2VlIGFsc28gbHN0cmlwLCByc3RyaXAuCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlIChzcmUpCi0KLUhhbmRsZXMgVW5pY29kZSBzdHJpbmdzLiBJbXBsZW1lbnRlZCBpbiBuZXcgbW9kdWxlIHNyZSwgcmUgbm93IGEgbWVyZSBmcm9udC1lbmQKLWZvciBjb21wYXRpYmlsaXR5LgotUGF0dGVybnMgYXJlIHNwZWNpZmllZCBhcyBzdHJpbmdzLiBUaXA6IFVzZSByYXcgc3RyaW5ncyAoZS5nLiByJ1x3KicpIHRvCi1saXR0ZXJhbGl6ZSBiYWNrc2xhc2hlcy4KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBSZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4Ci0gICBGb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotLiAgICAgICAgICBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgKGluY2x1ZGluZyBuZXdsaW5lIGlmIERPVEFMTCBmbGFnIHNwZWNpZmllZCkKLV4gICAgICAgICAgbWF0Y2hlcyBzdGFydCBvZiB0aGUgc3RyaW5nIChvZiBldmVyeSBsaW5lIGluIE1VTFRJTElORSBtb2RlKQotJCAgICAgICAgICBtYXRjaGVzIGVuZCBvZiB0aGUgc3RyaW5nIChvZiBldmVyeSBsaW5lIGluIE1VTFRJTElORSBtb2RlKQotKiAgICAgICAgICAwIG9yIG1vcmUgb2YgcHJlY2VkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiAoYXMgbWFueSBhcyBwb3NzaWJsZSkKLSsgICAgICAgICAgMSBvciBtb3JlIG9mIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24gKGFzIG1hbnkgYXMgcG9zc2libGUpCi0/ICAgICAgICAgIDAgb3IgMSBvY2N1cnJlbmNlIG9mIHByZWNlZGluZyByZWd1bGFyIGV4cHJlc3Npb24KLSo/LCArPywgPz8gU2FtZSBhcyAqLCArIGFuZCA/IGJ1dCBtYXRjaGVzIGFzIGZldyBjaGFyYWN0ZXJzIGFzIHBvc3NpYmxlCi17bSxufSAgICAgIG1hdGNoZXMgZnJvbSBtIHRvIG4gcmVwZXRpdGlvbnMgb2YgcHJlY2VkaW5nIFJFCi17bSxufT8gICAgIGlkZW0sIGF0dGVtcHRpbmcgdG8gbWF0Y2ggYXMgZmV3IHJlcGV0aXRpb25zIGFzIHBvc3NpYmxlCi1bIF0gICAgICAgIGRlZmluZXMgY2hhcmFjdGVyIHNldDogZS5nLiAnW2EtekEtWl0nIHRvIG1hdGNoIGFsbCBsZXR0ZXJzKHNlZSBhbHNvCi0gICAgICAgICAgIFx3IFxTKQotW14gXSAgICAgICBkZWZpbmVzIGNvbXBsZW1lbnRlZCBjaGFyYWN0ZXIgc2V0OiBtYXRjaGVzIGlmIGNoYXIgaXMgTk9UIGluIHNldAotICAgICAgICAgICBlc2NhcGVzIHNwZWNpYWwgY2hhcnMgJyo/KyYkfCgpJyBhbmQgaW50cm9kdWNlcyBzcGVjaWFsIHNlcXVlbmNlcwotXCAgICAgICAgICAoc2VlIGJlbG93KS4gRHVlIHRvIFB5dGhvbiBzdHJpbmcgcnVsZXMsIHdyaXRlIGFzICdcXCcgb3JyJ1wnIGluIHRoZQotICAgICAgICAgICBwYXR0ZXJuIHN0cmluZy4KLVxcICAgICAgICAgbWF0Y2hlcyBhIGxpdHRlcmFsICdcJzsgZHVlIHRvIFB5dGhvbiBzdHJpbmcgcnVsZXMsIHdyaXRlIGFzICdcXFxcCi0gICAgICAgICAgICdpbiBwYXR0ZXJuIHN0cmluZywgb3IgYmV0dGVyIHVzaW5nIHJhdyBzdHJpbmc6IHInXFwnLgotfCAgICAgICAgICBzcGVjaWZpZXMgYWx0ZXJuYXRpdmU6ICdmb298YmFyJyBtYXRjaGVzICdmb28nIG9yICdiYXInCi0oLi4uKSAgICAgIG1hdGNoZXMgYW55IFJFIGluc2lkZSAoKSwgYW5kIGRlbGltaXRzIGEgZ3JvdXAuCi0oPzouLi4pICAgIGlkZW0gYnV0IGRvZXNuJ3QgZGVsaW1pdCBhIGdyb3VwLgotICAgICAgICAgICBtYXRjaGVzIGlmIC4uLiBtYXRjaGVzIG5leHQsIGJ1dCBkb2Vzbid0IGNvbnN1bWUgYW55IG9mIHRoZSBzdHJpbmcKLSg/PS4uLikgICAgZS5nLiAnSXNhYWMgKD89QXNpbW92KScgbWF0Y2hlcyAnSXNhYWMnIG9ubHkgaWYgZm9sbG93ZWQgYnkKLSAgICAgICAgICAgJ0FzaW1vdicuCi0oPyEuLi4pICAgIG1hdGNoZXMgaWYgLi4uIGRvZXNuJ3QgbWF0Y2ggbmV4dC4gTmVnYXRpdmUgb2YgKD89Li4uKQotKD9QPG5hbWUgICBtYXRjaGVzIGFueSBSRSBpbnNpZGUgKCksIGFuZCBkZWxpbWl0cyBhIG5hbWVkIGdyb3VwLiAoZS5nLiByJyg/UAotPi4uLikgICAgICA8aWQ+W2EtekEtWl9dXHcqKScgZGVmaW5lcyBhIGdyb3VwIG5hbWVkIGlkKQotKD9QPW5hbWUpICBtYXRjaGVzIHdoYXRldmVyIHRleHQgd2FzIG1hdGNoZWQgYnkgdGhlIGVhcmxpZXIgZ3JvdXAgbmFtZWQgbmFtZS4KLSg/Iy4uLikgICAgQSBjb21tZW50OyBpZ25vcmVkLgotKD9sZXR0ZXIpICBsZXR0ZXIgaXMgb25lIG9mICdpJywnTCcsICdtJywgJ3MnLCAneCcuIFNldCB0aGUgY29ycmVzcG9uZGluZyBmbGFncwotICAgICAgICAgICAocmUuSSwgcmUuTCwgcmUuTSwgcmUuUywgcmUuWCkgZm9yIHRoZSBlbnRpcmUgUkUuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcGVjaWFsIHNlcXVlbmNlcwotU2VxdWVuY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbgotbnVtYmVyICAgbWF0Y2hlcyBjb250ZW50IG9mIHRoZSBncm91cCBvZiB0aGUgc2FtZSBudW1iZXI7IGdyb3VwcyBhcmUgbnVtYmVyZWQKLSAgICAgICAgIHN0YXJ0aW5nIGZyb20gMQotXEEgICAgICAgbWF0Y2hlcyBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCi1cYiAgICAgICBlbXB0eSBzdHIgYXQgYmVnIG9yIGVuZCBvZiB3b3JkOiAnXGJpc1xiJyBtYXRjaGVzICdpcycsIGJ1dCBub3QgJ2hpcycKLVxCICAgICAgIGVtcHR5IHN0ciBOT1QgYXQgYmVnaW5uaW5nIG9yIGVuZCBvZiB3b3JkCi1cZCAgICAgICBhbnkgZGVjaW1hbCBkaWdpdCAoPD0+IFswLTldKQotXEQgICAgICAgYW55IG5vbi1kZWNpbWFsIGRpZ2l0IGNoYXIgKDw9PiBbXk8tOV0pCi1ccyAgICAgICBhbnkgd2hpdGVzcGFjZSBjaGFyICg8PT4gWyBcdFxuXHJcZlx2XSkKLVxTICAgICAgIGFueSBub24td2hpdGVzcGFjZSBjaGFyICg8PT4gW14gXHRcblxyXGZcdl0pCi1cdyAgICAgICBhbnkgYWxwaGFOdW1lcmljIGNoYXIgKGRlcGVuZHMgb24gTE9DQUxFIGZsYWcpCi1cVyAgICAgICBhbnkgbm9uLWFscGhhTnVtZXJpYyBjaGFyIChkZXBlbmRzIG9uIExPQ0FMRSBmbGFnKQotXFogICAgICAgbWF0Y2hlcyBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVzCi1WYXJpYWJsZSAgICAgICAgICAgICAgICAgICAgICAgTWVhbmluZwotZXJyb3IgICAgRXhjZXB0aW9uIHdoZW4gcGF0dGVybiBzdHJpbmcgaXNuJ3QgYSB2YWxpZCByZWdleHAuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zCi0gICBGdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotICAgICAgICAgICAgICAgQ29tcGlsZSBhIFJFIHBhdHRlcm4gc3RyaW5nIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24gb2JqZWN0LgotICAgICAgICAgICAgICAgRmxhZ3MgKGNvbWJpbmFibGUgYnkgfCk6Ci0KLSAgICAgICAgICAgICAgIEkgb3IgSUdOT1JFQ0FTRSBvciAoP2kpCi0gICAgICAgICAgICAgICAgICAgY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZwotY29tcGlsZSggICAgICAgTCBvciBMT0NBTEUgb3IgKD9MKQotcGF0dGVyblssICAgICAgICAgIG1ha2UgXHcsIFxXLCBcYiwgXEIgZGVwZW5kZW50IG9uIHRoZWN1cnJlbnQgbG9jYWxlCi1mbGFncz0wXSkgICAgICBNIG9yIE1VTFRJTElORSBvciAoP20pCi0gICAgICAgICAgICAgICAgICAgbWF0Y2hlcyBldmVyeSBuZXcgbGluZSBhbmQgbm90IG9ubHlzdGFydC9lbmQgb2YgdGhlIHdob2xlCi0gICAgICAgICAgICAgICAgICAgc3RyaW5nCi0gICAgICAgICAgICAgICBTIG9yIERPVEFMTCBvciAoP3MpCi0gICAgICAgICAgICAgICAgICAgJy4nIG1hdGNoZXMgQUxMIGNoYXJzLCBpbmNsdWRpbmcgbmV3bGluZQotICAgICAgICAgICAgICAgWCBvciBWRVJCT1NFIG9yICg/eCkKLSAgICAgICAgICAgICAgICAgICBJZ25vcmVzIHdoaXRlc3BhY2Ugb3V0c2lkZSBjaGFyYWN0ZXIgc2V0cwotZXNjYXBlKHN0cmluZykgcmV0dXJuIChhIGNvcHkgb2YpIHN0cmluZyB3aXRoIGFsbCBub24tYWxwaGFudW1lcmljcwotICAgICAgICAgICAgICAgYmFja3NsYXNoZWQuCi1tYXRjaChwYXR0ZXJuLCBpZiAwIG9yIG1vcmUgY2hhcnMgYXQgYmVnaW5uaW5nIG9mIDxzdHJpbmc+IG1hdGNoIHRoZSBSRSBwYXR0ZXJuCi1zdHJpbmdbLCBmbGFncyBzdHJpbmcscmV0dXJuIGEgY29ycmVzcG9uZGluZyBNYXRjaE9iamVjdCBpbnN0YW5jZSwgb3IgTm9uZSBpZgotXSkgICAgICAgICAgICAgbm8gbWF0Y2guCi1zZWFyY2gocGF0dGVybiBzY2FuIHRocnUgPHN0cmluZz4gZm9yIGEgbG9jYXRpb24gbWF0Y2hpbmcgPHBhdHRlcm4+LCByZXR1cm4KLSwgc3RyaW5nWywgICAgIGFjb3JyZXNwb25kaW5nIE1hdGNoT2JqZWN0IGluc3RhbmNlLCBvciBOb25lIGlmIG5vIG1hdGNoLgotZmxhZ3NdKQotc3BsaXQocGF0dGVybiwgc3BsaXQgPHN0cmluZz4gYnkgb2NjdXJyZW5jZXMgb2YgPHBhdHRlcm4+LiBJZiBjYXB0dXJpbmcgKCkgYXJlCi1zdHJpbmdbLCAgICAgICB1c2VkIGlucGF0dGVybiwgdGhlbiBvY2N1cnJlbmNlcyBvZiBwYXR0ZXJucyBvciBzdWJwYXR0ZXJucyBhcmUKLW1heHNwbGl0PTBdKSAgIGFsc28gcmV0dXJuZWQuCi1maW5kYWxsKCAgICAgICByZXR1cm4gYSBsaXN0IG9mIG5vbi1vdmVybGFwcGluZyBtYXRjaGVzIGluIDxwYXR0ZXJuPiwgZWl0aGVyIGEKLXBhdHRlcm4sICAgICAgIGxpc3Qgb2Zncm91cHMgb3IgYSBsaXN0IG9mIHR1cGxlcyBpZiB0aGUgcGF0dGVybiBoYXMgbW9yZSB0aGFuIDEKLXN0cmluZykgICAgICAgIGdyb3VwLgotICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZyBvYnRhaW5lZCBieSByZXBsYWNpbmcgdGhlICg8Y291bnQ+IGZpcnN0KSBsZWZtb3N0Ci1zdWIocGF0dGVybiwgICBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2YgPHBhdHRlcm4+IChhIHN0cmluZyBvciBhIFJFCi1yZXBsLCBzdHJpbmdbLCBvYmplY3QpIGluIDxzdHJpbmc+YnkgPHJlcGw+OyA8cmVwbD4gY2FuIGJlIGEgc3RyaW5nIG9yIGEgZmN0Ci1jb3VudD0wXSkgICAgICBjYWxsZWQgd2l0aCBhIHNpbmdsZSBNYXRjaE9iaiBhcmcsIHdoaWNoIG11c3QgcmV0dXJuIHRoZQotICAgICAgICAgICAgICAgcmVwbGFjZW1lbnQgc3RyaW5nLgotc3VibihwYXR0ZXJuLAotcmVwbCwgc3RyaW5nWywgc2FtZSBhcyBzdWIoKSwgYnV0IHJldHVybnMgYSB0dXBsZSAobmV3U3RyaW5nLCBudW1iZXJPZlN1YnNNYWRlKQotY291bnQ9MF0pCi0KLVJlZ3VsYXIgRXhwcmVzc2lvbiBPYmplY3RzCi0KLQotKFJFIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IHRoZSBjb21waWxlIGZjdCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICByZSBvYmplY3QgYXR0cmlidXRlcwotQXR0cmlidXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXRpb24KLWZsYWdzICAgICAgZmxhZ3MgYXJnIHVzZWQgd2hlbiBSRSBvYmogd2FzIGNvbXBpbGVkLCBvciAwIGlmIG5vbmUgcHJvdmlkZWQKLWdyb3VwaW5kZXggZGljdGlvbmFyeSBvZiB7Z3JvdXAgbmFtZTogZ3JvdXAgbnVtYmVyfSBpbiBwYXR0ZXJuCi1wYXR0ZXJuICAgIHBhdHRlcm4gc3RyaW5nIGZyb20gd2hpY2ggUkUgb2JqIHdhcyBjb21waWxlZAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmUgb2JqZWN0IG1ldGhvZHMKLSAgTWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotICAgICAgICAgICAgSWYgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmcgbWF0Y2ggdGhpcwotICAgICAgICAgICAgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nIE1hdGNoT2JqZWN0IGluc3RhbmNlLgotICAgICAgICAgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0Ci0gICAgICAgICAgICB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGEgemVyby1sZW5ndGggbWF0Y2guCi0gICAgICAgICAgICBUaGUgb3B0aW9uYWwgc2Vjb25kIHBhcmFtZXRlciBwb3MgZ2l2ZXMgYW4gaW5kZXggaW4gdGhlIHN0cmluZwotbWF0Y2goICAgICAgd2hlcmUgdGhlIHNlYXJjaCBpcyB0byBzdGFydDsgaXQgZGVmYXVsdHMgdG8gMC4gVGhpcyBpcyBub3QKLXN0cmluZ1ssICAgIGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0byBzbGljaW5nIHRoZSBzdHJpbmc7IHRoZSAnJyBwYXR0ZXJuCi1wb3NdWywgICAgICBjaGFyYWN0ZXIgbWF0Y2hlcyBhdCB0aGUgcmVhbCBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBhbmQgYXQKLWVuZHBvc10pICAgIHBvc2l0aW9ucyBqdXN0IGFmdGVyIGEgbmV3bGluZSwgYnV0IG5vdCBuZWNlc3NhcmlseSBhdCB0aGUgaW5kZXgKLSAgICAgICAgICAgIHdoZXJlIHRoZSBzZWFyY2ggaXMgdG8gc3RhcnQuCi0gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIGVuZHBvcyBsaW1pdHMgaG93IGZhciB0aGUgc3RyaW5nIHdpbGwgYmUKLSAgICAgICAgICAgIHNlYXJjaGVkOyBpdCB3aWxsIGJlIGFzIGlmIHRoZSBzdHJpbmcgaXMgZW5kcG9zIGNoYXJhY3RlcnMgbG9uZywgc28KLSAgICAgICAgICAgIG9ubHkgdGhlIGNoYXJhY3RlcnMgZnJvbSBwb3MgdG8gZW5kcG9zIHdpbGwgYmUgc2VhcmNoZWQgZm9yIGEKLSAgICAgICAgICAgIG1hdGNoLgotICAgICAgICAgICAgU2NhbiB0aHJvdWdoIHN0cmluZyBsb29raW5nIGZvciBhIGxvY2F0aW9uIHdoZXJlIHRoaXMgcmVndWxhcgotc2VhcmNoKCAgICAgZXhwcmVzc2lvbiBwcm9kdWNlcyBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyBNYXRjaE9iamVjdAotc3RyaW5nWywgICAgaW5zdGFuY2UuIFJldHVybiBOb25lIGlmIG5vIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcgbWF0Y2hlcyB0aGUKLXBvc11bLCAgICAgIHBhdHRlcm47IG5vdGUgdGhhdCB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIGZpbmRpbmcgYSB6ZXJvLWxlbmd0aAotZW5kcG9zXSkgICAgbWF0Y2ggYXQgc29tZSBwb2ludCBpbiB0aGUgc3RyaW5nLgotICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHBvcyBhbmQgZW5kcG9zIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvcgotICAgICAgICAgICAgdGhlIG1hdGNoKCkgbWV0aG9kLgotc3BsaXQoCi1zdHJpbmdbLCAgICBJZGVudGljYWwgdG8gdGhlIHNwbGl0KCkgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuLgotbWF4c3BsaXQ9Ci0wXSkKLWZpbmRhbGwoICAgIElkZW50aWNhbCB0byB0aGUgZmluZGFsbCgpIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KLXN0cmluZykKLXN1YihyZXBsLAotc3RyaW5nWywgICAgSWRlbnRpY2FsIHRvIHRoZSBzdWIoKSBmdW5jdGlvbiwgdXNpbmcgdGhlIGNvbXBpbGVkIHBhdHRlcm4uCi1jb3VudD0wXSkKLXN1Ym4ocmVwbCwKLXN0cmluZ1ssICAgIElkZW50aWNhbCB0byB0aGUgc3VibigpIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KLWNvdW50PTBdKQotCi1NYXRjaCBPYmplY3RzCi0KLQotKE1hdGNoIG9iamVjdHMgYXJlIHJldHVybmVkIGJ5IHRoZSBtYXRjaCAmIHNlYXJjaCBmdW5jdGlvbnMpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRjaCBvYmplY3QgYXR0cmlidXRlcwotQXR0cmlidXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24KLXBvcyAgICAgICB2YWx1ZSBvZiBwb3MgcGFzc2VkIHRvIHNlYXJjaCBvciBtYXRjaCBmdW5jdGlvbnM7IGluZGV4IGludG9zdHJpbmcgYXQKLSAgICAgICAgICB3aGljaCBSRSBlbmdpbmUgc3RhcnRlZCBzZWFyY2guCi1lbmRwb3MgICAgdmFsdWUgb2YgZW5kcG9zIHBhc3NlZCB0byBzZWFyY2ggb3IgbWF0Y2ggZnVuY3Rpb25zOyBpbmRleCBpbnRvc3RyaW5nCi0gICAgICAgICAgYmV5b25kIHdoaWNoIFJFIGVuZ2luZSB3b24ndCBnby4KLXJlICAgICAgICBSRSBvYmplY3Qgd2hvc2UgbWF0Y2ggb3Igc2VhcmNoIGZjdCBwcm9kdWNlZCB0aGlzIE1hdGNoT2JqIGluc3RhbmNlCi1zdHJpbmcgICAgc3RyaW5nIHBhc3NlZCB0byBtYXRjaCgpIG9yIHNlYXJjaCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRjaCBvYmplY3QgZnVuY3Rpb25zCi1GdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdAotICAgICAgICAgIHJldHVybnMgb25lIG9yIG1vcmUgZ3JvdXBzIG9mIHRoZSBtYXRjaC4gSWYgb25lIGFyZywgcmVzdWx0IGlzIGEKLWdyb3VwKFtnMSBzdHJpbmc7aWYgbXVsdGlwbGUgYXJncywgcmVzdWx0IGlzIGEgdHVwbGUgd2l0aCBvbmUgaXRlbSBwZXIgYXJnLiBJZgotLCBnMiwgICAgIGdpIGlzIDAscmV0dXJuIHZhbHVlIGlzIGVudGlyZSBtYXRjaGluZyBzdHJpbmc7IGlmIDEgPD0gZ2kgPD0gOTksCi0uLi5dKSAgICAgcmV0dXJuc3RyaW5nIG1hdGNoaW5nIGdyb3VwICNnaSAob3IgTm9uZSBpZiBubyBzdWNoIGdyb3VwKTsgZ2kgbWF5Ci0gICAgICAgICAgYWxzbyBiZWEgZ3JvdXAgbmFtZS4KLSAgICAgICAgICByZXR1cm5zIGEgdHVwbGUgb2YgYWxsIGdyb3VwcyBvZiB0aGUgbWF0Y2g7IGdyb3VwcyBub3QKLWdyb3VwcygpICBwYXJ0aWNpcGF0aW5ndG8gdGhlIG1hdGNoIGhhdmUgYSB2YWx1ZSBvZiBOb25lLiBSZXR1cm5zIGEgc3RyaW5nCi0gICAgICAgICAgaW5zdGVhZCBvZiB0dXBsZWlmIGxlbih0dXBsZSk9MQotc3RhcnQoCi1ncm91cCksICAgcmV0dXJucyBpbmRpY2VzIG9mIHN0YXJ0ICYgZW5kIG9mIHN1YnN0cmluZyBtYXRjaGVkIGJ5IGdyb3VwIChvcgotZW5kKGdyb3VwIE5vbmVpZiBncm91cCBleGlzdHMgYnV0IGRvZXNuJ3QgY29udHJpYnV0ZSB0byB0aGUgbWF0Y2gpCi0pCi1zcGFuKCAgICAgcmV0dXJucyB0aGUgMi10dXBsZSAoc3RhcnQoZ3JvdXApLCBlbmQoZ3JvdXApKTsgY2FuIGJlIChOb25lLCBOb25lKWlmCi1ncm91cCkgICAgZ3JvdXAgZGlkbid0IGNvbnRpYnV0ZSB0byB0aGUgbWF0Y2guCi0KLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aAotCi1WYXJpYWJsZXM6Ci1waQotZQotRnVuY3Rpb25zIChzZWUgb3JkaW5hcnkgQyBtYW4gcGFnZXMgZm9yIGluZm8pOgotYWNvcyh4KQotYXNpbih4KQotYXRhbih4KQotYXRhbjIoeCwgeSkKLWNlaWwoeCkKLWNvcyh4KQotY29zaCh4KQotZGVncmVlcyh4KQotZXhwKHgpCi1mYWJzKHgpCi1mbG9vcih4KQotZm1vZCh4LCB5KQotZnJleHAoeCkgICAgICAgIC0tIFVubGlrZSBDOiAoZmxvYXQsIGludCkgPSBmcmV4cChmbG9hdCkKLWxkZXhwKHgsIHkpCi1sb2coeCBbLGJhc2VdKQotbG9nMTAoeCkKLW1vZGYoeCkgICAgICAgICAtLSBVbmxpa2UgQzogKGZsb2F0LCBmbG9hdCkgPSBtb2RmKGZsb2F0KQotcG93KHgsIHkpCi1yYWRpYW5zKHgpCi1zaW4oeCkKLXNpbmgoeCkKLXNxcnQoeCkKLXRhbih4KQotdGFuaCh4KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRvcHQKLQotRnVuY3Rpb25zOgotZ2V0b3B0KGxpc3QsIG9wdHN0cikgICAgLS0gU2ltaWxhciB0byBDLiA8b3B0c3RyPiBpcyBvcHRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHRlcnMgdG8gbG9vayBmb3IuIFB1dCAnOicgYWZ0ZXIgbGV0dGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBvcHRpb24gdGFrZXMgYXJnLiBFLmcuCi0gICAgIyBpbnZvY2F0aW9uIHdhcyAicHl0aG9uIHRlc3QucHkgLWMgaGkgLWEgYXJnMSBhcmcyIgotICAgICAgIG9wdHMsIGFyZ3MgPSAgZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdhYjpjOicpCi0gICAgIyBvcHRzIHdvdWxkIGJlCi0gICAgICAgWygnLWMnLCAnaGknKSwgKCctYScsICcnKV0KLSAgICAjIGFyZ3Mgd291bGQgYmUKLSAgICAgICBbJ2FyZzEnLCAnYXJnMiddCi0KLQotTGlzdCBvZiBtb2R1bGVzIGFuZCBwYWNrYWdlcyBpbiBiYXNlIGRpc3RyaWJ1dGlvbgotCi0oYnVpbHQtaW5zIGFuZCBjb250ZW50IG9mIHB5dGhvbiBMaWIgZGlyZWN0b3J5KQotKFB5dGhvbiBOVCBkaXN0cmlidXRpb24sIG1heSBiZSBzbGlnaHRseSBkaWZmZXJlbnQgaW4gb3RoZXIgZGlzdHJpYnV0aW9ucykKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhbmRhcmQgbGlicmFyeSBtb2R1bGVzCi0gICBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHQKLWFpZmMgICAgICAgICAgICAgU3R1ZmYgdG8gcGFyc2UgQUlGRi1DIGFuZCBBSUZGIGZpbGVzLgotYXN5bmNoYXQgICAgICAgICBTdXBwb3J0IGZvciAnY2hhdCcgc3R5bGUgcHJvdG9jb2xzCi1hc3luY29yZSAgICAgICAgIEFzeW5jaHJvbm91cyBGaWxlIEkvTyAoaW4gc2VsZWN0IHN0eWxlKQotYXRleGl0ICAgICAgICAgICBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGF0IGV4aXQgb2YgUHl0aG9uIGludGVycHJldGVyLgotYmFzZTY0ICAgICAgICAgICBDb252ZXJzaW9ucyB0by9mcm9tIGJhc2U2NCBSRkMtTUlNRSB0cmFuc3BvcnQgZW5jb2RpbmcgLgotYmRiICAgICAgICAgICAgICBBIGdlbmVyaWMgUHl0aG9uIGRlYnVnZ2VyIGJhc2UgY2xhc3MuCi1iaW5oZXggICAgICAgICAgIE1hY2ludG9zaCBiaW5oZXggY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbi4KLWJpc2VjdCAgICAgICAgICAgTGlzdCBiaXNlY3Rpb24gYWxnb3JpdGhtcy4KLWJ6MiAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgYnoyIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24uCi1jYWxlbmRhciAgICAgICAgIENhbGVuZGFyIHByaW50aW5nIGZ1bmN0aW9ucy4KLWNnaSAgICAgICAgICAgICAgV3JhcHMgdGhlIFdXVyBGb3JtcyBDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UgKENHSSkuCi1jZ2l0YiAgICAgICAgICAgIFV0aWxpdHkgZm9yIGhhbmRsaW5nIENHSSB0cmFjZWJhY2tzLgotY21kICAgICAgICAgICAgICBBIGdlbmVyaWMgY2xhc3MgdG8gYnVpbGQgbGluZS1vcmllbnRlZCBjb21tYW5kIGludGVycHJldGVycy4KLWRhdGV0aW1lICAgICAgICAgQmFzaWMgZGF0ZSBhbmQgdGltZSB0eXBlcy4KLWNvZGUgICAgICAgICAgICAgVXRpbGl0aWVzIG5lZWRlZCB0byBlbXVsYXRlIFB5dGhvbidzIGludGVyYWN0aXZlIGludGVycHJldGVyCi1jb2RlY3MgICAgICAgICAgIExvb2t1cCBleGlzdGluZyBVbmljb2RlIGVuY29kaW5ncyBhbmQgcmVnaXN0ZXIgbmV3IG9uZXMuCi1jb2xvcnN5cyAgICAgICAgIENvbnZlcnNpb24gZnVuY3Rpb25zIGJldHdlZW4gUkdCIGFuZCBvdGhlciBjb2xvciBzeXN0ZW1zLgotY29tcGlsZWFsbCAgICAgICBGb3JjZSAiY29tcGlsYXRpb24iIG9mIGFsbCAucHkgZmlsZXMgaW4gYSBkaXJlY3RvcnkuCi1jb25maWdwYXJzZXIgICAgIENvbmZpZ3VyYXRpb24gZmlsZSBwYXJzZXIgKG11Y2ggbGlrZSB3aW5kb3dzIC5pbmkgZmlsZXMpCi1jb3B5ICAgICAgICAgICAgIEdlbmVyaWMgc2hhbGxvdyBhbmQgZGVlcCBjb3B5aW5nIG9wZXJhdGlvbnMuCi1jb3B5cmVnICAgICAgICAgIEhlbHBlciB0byBwcm92aWRlIGV4dGVuc2liaWxpdHkgZm9yIHBpY2tsZS9jUGlja2xlLgotY3N2ICAgICAgICAgICAgICBSZWFkIGFuZCB3cml0ZSBmaWxlcyB3aXRoIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMuCi1kYm0gICAgICAgICAgICAgIEdlbmVyaWMgaW50ZXJmYWNlIHRvIGFsbCBkYm0gY2xvbmVzIChkYm0uYnNkLCBkYm0uZ251LAotICAgICAgICAgICAgICAgICBkYm0ubmRibSwgZGJtLmR1bWIpLgotZGlyY2FjaGUgICAgICAgICBTb3J0ZWQgbGlzdCBvZiBmaWxlcyBpbiBhIGRpciwgdXNpbmcgYSBjYWNoZS4KLWRpZmZsaWIgICAgICAgICAgVG9vbCBmb3IgY3JlYXRpbmcgZGVsdGEgYmV0d2VlbiBzZXF1ZW5jZXMuCi1kaXMgICAgICAgICAgICAgIEJ5dGVjb2RlIGRpc2Fzc2VtYmxlci4KLWRpc3R1dGlscyAgICAgICAgUGFja2FnZSBpbnN0YWxsYXRpb24gc3lzdGVtLgotZG9jdGVzdCAgICAgICAgICBUb29sIGZvciBydW5uaW5nIGFuZCB2ZXJpZnlpbmcgdGVzdHMgaW5zaWRlIGRvYyBzdHJpbmdzLgotZG9zcGF0aCAgICAgICAgICBDb21tb24gb3BlcmF0aW9ucyBvbiBET1MgcGF0aG5hbWVzLgotZW1haWwgICAgICAgICAgICBDb21wcmVoZW5zaXZlIHN1cHBvcnQgZm9yIGludGVybmV0IGVtYWlsLgotZmlsZWNtcCAgICAgICAgICBGaWxlIGNvbXBhcmlzb24uCi1maWxlaW5wdXQgICAgICAgIEhlbHBlciBjbGFzcyB0byBxdWlja2x5IHdyaXRlIGEgbG9vcCBvdmVyIGFsbCBzdGFuZGFyZCBpbnB1dAotICAgICAgICAgICAgICAgICBmaWxlcy4KLWZubWF0Y2ggICAgICAgICAgRmlsZW5hbWUgbWF0Y2hpbmcgd2l0aCBzaGVsbCBwYXR0ZXJucy4KLWZvcm1hdHRlciAgICAgICAgQSB0ZXN0IGZvcm1hdHRlci4KLWZwZm9ybWF0ICAgICAgICAgR2VuZXJhbCBmbG9hdGluZyBwb2ludCBmb3JtYXR0aW5nIGZ1bmN0aW9ucy4KLWZ0cGxpYiAgICAgICAgICAgQW4gRlRQIGNsaWVudCBjbGFzcy4gQmFzZWQgb24gUkZDIDk1OS4KLWdjICAgICAgICAgICAgICAgUGVyZm9ybSBnYXJiYWNnZSBjb2xsZWN0aW9uLCBvYnRhaW4gR0MgZGVidWcgc3RhdHMsIGFuZCB0dW5lCi0gICAgICAgICAgICAgICAgIEdDIHBhcmFtZXRlcnMuCi1nZXRvcHQgICAgICAgICAgIFN0YW5kYXJkIGNvbW1hbmQgbGluZSBwcm9jZXNzaW5nLiBTZWUgYWxzbyBmdHA6Ly8KLSAgICAgICAgICAgICAgICAgd3d3LnBhdWFodHVuLm9yZy9wdWIvZ2V0YXJnc3B5LnppcAotZ2V0cGFzcyAgICAgICAgICBVdGlsaXRpZXMgdG8gZ2V0IGEgcGFzc3dvcmQgYW5kL29yIHRoZSBjdXJyZW50IHVzZXIgbmFtZS4KLWdsb2IgICAgICAgICAgICAgZmlsZW5hbWUgZ2xvYmJpbmcuCi1nemlwICAgICAgICAgICAgIFJlYWQgJiB3cml0ZSBnemlwcGVkIGZpbGVzLgotaGVhcHEgICAgICAgICAgICBQcmlvcml0eSBxdWV1ZSBpbXBsZW1lbnRlZCB1c2luZyBsaXN0cyBvcmdhbml6ZWQgYXMgaGVhcHMuCi1obWFjICAgICAgICAgICAgIEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gLS0gUkZDIDIxMDQuCi1odG1sLmVudGl0aWVzICAgIEhUTUwgZW50aXR5IGRlZmluaXRpb25zLgotaHRtbC5wYXJzZXIgICAgICBBIHBhcnNlciBmb3IgSFRNTCBhbmQgWEhUTUwuCi1odHRwLmNsaWVudCAgICAgIEhUVFAgY2xpZW50IGNsYXNzLgotaHR0cC5zZXJ2ZXIgICAgICBIVFRQIHNlcnZlciBzZXJ2aWNlcy4KLWlob29rcyAgICAgICAgICAgSG9va3MgaW50byB0aGUgImltcG9ydCIgbWVjaGFuaXNtLgotaW1hcGxpYiAgICAgICAgICBJTUFQNCBjbGllbnQuQmFzZWQgb24gUkZDIDIwNjAuCi1pbWdoZHIgICAgICAgICAgIFJlY29nbml6aW5nIGltYWdlIGZpbGVzIGJhc2VkIG9uIHRoZWlyIGZpcnN0IGZldyBieXRlcy4KLWltcHV0aWwgICAgICAgICAgUHJpdmlkZXMgYSB3YXkgb2Ygd3JpdGluZyBjdXN0b21pc2VkIGltcG9ydCBob29rcy4KLWluc3BlY3QgICAgICAgICAgVG9vbCBmb3IgcHJvYmluZyBsaXZlIFB5dGhvbiBvYmplY3RzLgota2V5d29yZCAgICAgICAgICBMaXN0IG9mIFB5dGhvbiBrZXl3b3Jkcy4KLWxpbmVjYWNoZSAgICAgICAgQ2FjaGUgbGluZXMgZnJvbSBmaWxlcy4KLWxvY2FsZSAgICAgICAgICAgU3VwcG9ydCBmb3IgbnVtYmVyIGZvcm1hdHRpbmcgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlCi0gICAgICAgICAgICAgICAgIHNldHRpbmdzLgotbG9nZ2luZyAgICAgICAgICBQeXRob24gbG9nZ2luZyBmYWNpbGl0eS4KLW1hY3BhdGggICAgICAgICAgUGF0aG5hbWUgKG9yIHJlbGF0ZWQpIG9wZXJhdGlvbnMgZm9yIHRoZSBNYWNpbnRvc2guCi1tYWN1cmwycGF0aCAgICAgIE1hYyBzcGVjaWZpYyBtb2R1bGUgZm9yIGNvbnZlcnNpb24gYmV0d2VlbiBwYXRobmFtZXMgYW5kIFVSTHMuCi1tYWlsYm94ICAgICAgICAgIEEgY2xhc3MgdG8gaGFuZGxlIGEgdW5peC1zdHlsZSBvciBtbWRmLXN0eWxlIG1haWxib3guCi1tYWlsY2FwICAgICAgICAgIE1haWxjYXAgZmlsZSBoYW5kbGluZyAoUkZDIDE1MjQpLgotbWhsaWIgICAgICAgICAgICBNSCAobWFpbGJveCkgaW50ZXJmYWNlLgotbWltZXR5cGVzICAgICAgICBHdWVzcyB0aGUgTUlNRSB0eXBlIG9mIGEgZmlsZS4KLW1tYXAgICAgICAgICAgICAgSW50ZXJmYWNlIHRvIG1lbW9yeS1tYXBwZWQgZmlsZXMgLSB0aGV5IGJlaGF2ZSBsaWtlIG11dGFibGUKLSAgICAgICAgICAgICAgICAgc3RyaW5ncy4vZm9udD4KLW11bHRpZmlsZSAgICAgICAgQ2xhc3MgdG8gbWFrZSBtdWx0aS1maWxlIG1lc3NhZ2VzIGVhc2llciB0byBoYW5kbGUuCi1tdXRleCAgICAgICAgICAgIE11dHVhbCBleGNsdXNpb24gLS0gZm9yIHVzZSB3aXRoIG1vZHVsZSBzY2hlZC4KLW5ldHJjCi1ubnRwbGliICAgICAgICAgIEFuIE5OVFAgY2xpZW50IGNsYXNzLiBCYXNlZCBvbiBSRkMgOTc3LgotbnRwYXRoICAgICAgICAgICBDb21tb24gb3BlcmF0aW9ucyBvbiBET1MgcGF0aG5hbWVzLgotbnR1cmwycGF0aCAgICAgICBNYWMgc3BlY2lmaWMgbW9kdWxlIGZvciBjb252ZXJzaW9uIGJldHdlZW4gcGF0aG5hbWVzIGFuZCBVUkxzLgotb3B0cGFyc2UgICAgICAgICBBIGNvbXByZWhlbnNpdmUgdG9vbCBmb3IgcHJvY2Vzc2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4KLW9zICAgICAgICAgICAgICAgRWl0aGVyIG1hYywgZG9zIG9yIHBvc2l4IGRlcGVuZGluZyBzeXN0ZW0uCi1wZGIgICAgICAgICAgICAgIEEgUHl0aG9uIGRlYnVnZ2VyLgotcGlja2xlICAgICAgICAgICBQaWNrbGluZyAoc2F2ZSBhbmQgcmVzdG9yZSkgb2YgUHl0aG9uIG9iamVjdHMgKGEgZmFzdGVyCi0gICAgICAgICAgICAgICAgIENpbXBsZW1lbnRhdGlvbiBleGlzdHMgaW4gYnVpbHQtaW4gbW9kdWxlOiBjUGlja2xlKS4KLXBpcGVzICAgICAgICAgICAgQ29udmVyc2lvbiBwaXBlbGluZSB0ZW1wbGF0ZXMuCi1wa2d1bmlsICAgICAgICAgIFV0aWxpdGllcyBmb3Igd29ya2luZyB3aXRoIFB5dGhvbiBwYWNrYWdlcy4KLXBvcGxpYiAgICAgICAgICAgQSBQT1AzIGNsaWVudCBjbGFzcy4gQmFzZWQgb24gdGhlIEouIE15ZXJzIFBPUDMgZHJhZnQuCi1wb3NpeHBhdGggICAgICAgIENvbW1vbiBvcGVyYXRpb25zIG9uIFBPU0lYIHBhdGhuYW1lcy4KLXBwcmludCAgICAgICAgICAgU3VwcG9ydCB0byBwcmV0dHktcHJpbnQgbGlzdHMsIHR1cGxlcywgJiBkaWN0aW9uYXJpZXMKLSAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHkuCi1wcm9maWxlICAgICAgICAgIENsYXNzIGZvciBwcm9maWxpbmcgcHl0aG9uIGNvZGUuCi1wc3RhdHMgICAgICAgICAgIENsYXNzIGZvciBwcmludGluZyByZXBvcnRzIG9uIHByb2ZpbGVkIHB5dGhvbiBjb2RlLgotcHlkb2MgICAgICAgICAgICBVdGlsaXR5IGZvciBnZW5lcmF0aW5nIGRvY3VtZW50YXRpb24gZnJvbSBzb3VyY2UgZmlsZXMuCi1wdHkgICAgICAgICAgICAgIFBzZXVkbyB0ZXJtaW5hbCB1dGlsaXRpZXMuCi1weWV4cGF0ICAgICAgICAgIEludGVyZmFjZSB0byB0aGUgRXhwYXkgWE1MIHBhcnNlci4KLXB5X2NvbXBpbGUgICAgICAgUm91dGluZSB0byAiY29tcGlsZSIgYSAucHkgZmlsZSB0byBhIC5weWMgZmlsZS4KLXB5Y2xiciAgICAgICAgICAgUGFyc2UgYSBQeXRob24gZmlsZSBhbmQgcmV0cmlldmUgY2xhc3NlcyBhbmQgbWV0aG9kcy4KLXF1ZXVlICAgICAgICAgICAgQSBtdWx0aS1wcm9kdWNlciwgbXVsdGktY29uc3VtZXIgcXVldWUuCi1xdW9wcmkgICAgICAgICAgIENvbnZlcnNpb25zIHRvL2Zyb20gcXVvdGVkLXByaW50YWJsZSB0cmFuc3BvcnQgZW5jb2RpbmcuCi1yYW5kb20gICAgICAgICAgIFJhbmRvbSB2YXJpYWJsZSBnZW5lcmF0b3JzCi1yZSAgICAgICAgICAgICAgIFJlZ3VsYXIgRXhwcmVzc2lvbnMuCi1yZXBybGliICAgICAgICAgIFJlZG8gcmVwcigpIGJ1dCB3aXRoIGxpbWl0cyBvbiBtb3N0IHNpemVzLgotcmxjb21wbGV0ZXIgICAgICBXb3JkIGNvbXBsZXRpb24gZm9yIEdOVSByZWFkbGluZSAyLjAuCi1zY2hlZCAgICAgICAgICAgIEEgZ2VuZXJhbGx5IHVzZWZ1bCBldmVudCBzY2hlZHVsZXIgY2xhc3MuCi1zaGVsdmUgICAgICAgICAgIE1hbmFnZSBzaGVsdmVzIG9mIHBpY2tsZWQgb2JqZWN0cy4KLXNobGV4ICAgICAgICAgICAgTGV4aWNhbCBhbmFseXplciBjbGFzcyBmb3Igc2ltcGxlIHNoZWxsLWxpa2Ugc3ludGF4ZXMuCi1zaHV0aWwgICAgICAgICAgIFV0aWxpdHkgZnVuY3Rpb25zIHVzYWJsZSBpbiBhIHNoZWxsLWxpa2UgcHJvZ3JhbS4KLXNpdGUgICAgICAgICAgICAgQXBwZW5kIG1vZHVsZSBzZWFyY2ggcGF0aHMgZm9yIHRoaXJkLXBhcnR5IHBhY2thZ2VzIHRvCi0gICAgICAgICAgICAgICAgIHN5cy5wYXRoLgotc210cGxpYiAgICAgICAgICBTTVRQIENsaWVudCBjbGFzcyAoUkZDIDgyMSkKLXNuZGhkciAgICAgICAgICAgU2V2ZXJhbCByb3V0aW5lcyB0aGF0IGhlbHAgcmVjb2duaXppbmcgc291bmQuCi1zb2NrZXRzZXJ2ZXIgICAgIEdlbmVyaWMgc29ja2V0IHNlcnZlciBjbGFzc2VzLgotc3RhdCAgICAgICAgICAgICBDb25zdGFudHMgYW5kIGZ1bmN0aW9ucyBmb3IgaW50ZXJwcmV0aW5nIHN0YXQvbHN0YXQgc3RydWN0Lgotc3RhdHZmcyAgICAgICAgICBDb25zdGFudHMgZm9yIGludGVycHJldGluZyBzdGF0dmZzIHN0cnVjdCBhcyByZXR1cm5lZCBieQotICAgICAgICAgICAgICAgICBvcy5zdGF0dmZzKClhbmQgb3MuZnN0YXR2ZnMoKSAoaWYgdGhleSBleGlzdCkuCi1zdHJpbmcgICAgICAgICAgIEEgY29sbGVjdGlvbiBvZiBzdHJpbmcgb3BlcmF0aW9ucy4KLXN1bmF1ICAgICAgICAgICAgU3R1ZmYgdG8gcGFyc2UgU3VuIGFuZCBOZVhUIGF1ZGlvIGZpbGVzLgotc3VuYXVkaW8gICAgICAgICBJbnRlcnByZXQgc3VuIGF1ZGlvIGhlYWRlcnMuCi1zeW1ib2wgICAgICAgICAgIE5vbi10ZXJtaW5hbCBzeW1ib2xzIG9mIFB5dGhvbiBncmFtbWFyIChmcm9tICJncmFtaW5pdC5oIikuCi10YWJuYW5ueSAgICAgICAgIENoZWNrIFB5dGhvbiBzb3VyY2UgZm9yIGFtYmlndW91cyBpbmRlbnRhdGlvbi4KLXRhcmZpbGUgICAgICAgICAgRmFjaWxpdHkgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcgdG8gdGhlICpuaXggdGFyZmlsZSBmb3JtYXQuCi10ZWxuZXRsaWIgICAgICAgIFRFTE5FVCBjbGllbnQgY2xhc3MuIEJhc2VkIG9uIFJGQyA4NTQuCi10ZW1wZmlsZSAgICAgICAgIFRlbXBvcmFyeSBmaWxlIG5hbWUgYWxsb2NhdGlvbi4KLXRleHR3cmFwICAgICAgICAgT2JqZWN0IGZvciB3cmFwcGluZyBhbmQgZmlsbGluZyB0ZXh0LgotdGhyZWFkaW5nICAgICAgICBQcm9wb3NlZCBuZXcgaGlnaGVyLWxldmVsIHRocmVhZGluZyBpbnRlcmZhY2VzCi10b2tlbiAgICAgICAgICAgIFRva2VucyAoZnJvbSAidG9rZW4uaCIpLgotdG9rZW5pemUgICAgICAgICBDb21waWxlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IHJlY29nbml6ZXMgUHl0aG9uIHRva2Vucy4KLXRyYWNlYmFjayAgICAgICAgRm9ybWF0IGFuZCBwcmludCBQeXRob24gc3RhY2sgdHJhY2VzLgotdHR5ICAgICAgICAgICAgICBUZXJtaW5hbCB1dGlsaXRpZXMuCi10dXJ0bGUgICAgICAgICAgIExvZ29NYXRpb24tbGlrZSB0dXJ0bGUgZ3JhcGhpY3MKLXR5cGVzICAgICAgICAgICAgRGVmaW5lIG5hbWVzIGZvciBhbGwgdHlwZSBzeW1ib2xzIGluIHRoZSBzdGQgaW50ZXJwcmV0ZXIuCi10enBhcnNlICAgICAgICAgIFBhcnNlIGEgdGltZXpvbmUgc3BlY2lmaWNhdGlvbi4KLXVuaWNvZGVkYXRhICAgICAgSW50ZXJmYWNlIHRvIHVuaWNvZGUgcHJvcGVydGllcy4KLXVybGxpYi5wYXJzZSAgICAgUGFyc2UgVVJMcyBhY2NvcmRpbmcgdG8gbGF0ZXN0IGRyYWZ0IG9mIHN0YW5kYXJkLgotdXJsbGliLnJlcXVlc3QgICBPcGVuIGFuIGFyYml0cmFyeSBVUkwuCi11cmxsaWIucm9ib3RwYXJzZXIgIFBhcnNlIHJvYm90cy50eHQgZmlsZXMsIHVzZWZ1bCBmb3Igd2ViIHNwaWRlcnMuCi11c2VyICAgICAgICAgICAgIEhvb2sgdG8gYWxsb3cgdXNlci1zcGVjaWZpZWQgY3VzdG9taXphdGlvbiBjb2RlIHRvIHJ1bi4KLXV1ICAgICAgICAgICAgICAgVVVlbmNvZGUvVVVkZWNvZGUuCi11bml0dGVzdCAgICAgICAgIFV0aWxpdGllcyBmb3IgaW1wbGVtZW50aW5nIHVuaXQgdGVzdGluZy4KLXdhdmUgICAgICAgICAgICAgU3R1ZmYgdG8gcGFyc2UgV0FWRSBmaWxlcy4KLXdlYWtyZWYgICAgICAgICAgVG9vbHMgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyB3ZWFrbHkgcmVmZXJlbmNlZCBvYmplY3RzLgotd2ViYnJvd3NlciAgICAgICBQbGF0Zm9ybSBpbmRlcGVuZGVudCBVUkwgbGF1bmNoZXIuCi14ZHJsaWIgICAgICAgICAgIEltcGxlbWVudHMgKGEgc3Vic2V0IG9mKSBTdW4gWERSIChlWHRlcm5hbCBEYXRhCi0gICAgICAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uKS4KLXhtbC5kb20gICAgICAgICAgQ2xhc3NlcyBmb3IgcHJvY2Vzc2luZyBYTUwgdXNpbmcgdGhlIERvY3VtZW50IE9iamVjdCBNb2RlbC4KLXhtbC5zYXggICAgICAgICAgQ2xhc3NlcyBmb3IgcHJvY2Vzc2luZyBYTUwgdXNpbmcgdGhlIFNBWCBBUEkuCi14bWxycGMuY2xpZW50ICAgIFN1cHBvcnQgZm9yIHJlbW90ZSBwcm9jZWR1cmUgY2FsbHMgdXNpbmcgWE1MLgoteG1scnBjLnNlcnZlciAgICBDcmVhdGUgWE1MUlBDIHNlcnZlcnMuCi16aXBmaWxlICAgICAgICAgIFJlYWQgJiB3cml0ZSBQSyB6aXBwZWQgZmlsZXMuCi0KLQotCi0qIEJ1aWx0LWlucyAqCi0KLSAgICAgICAgICAgIHN5cyAgICAgICAgICAgICAgICAgSW50ZXJwcmV0ZXIgc3RhdGUgdmFycyBhbmQgZnVuY3Rpb25zCi0gICAgICAgICAgICBfX2J1aWx0LWluX18gICAgICAgIEFjY2VzcyB0byBhbGwgYnVpbHQtaW4gcHl0aG9uIGlkZW50aWZpZXJzCi0gICAgICAgICAgICBfX21haW5fXyAgICAgICAgICAgIFNjb3BlIG9mIHRoZSBpbnRlcnByZXRlcnMgbWFpbiBwcm9ncmFtLCBzY3JpcHQgb3Igc3RkaW4KLSAgICAgICAgICAgIGFycmF5ICAgICAgICAgICAgICAgT2JqIGVmZmljaWVudGx5IHJlcHJlc2VudGluZyBhcnJheXMgb2YgYmFzaWMgdmFsdWVzCi0gICAgICAgICAgICBtYXRoICAgICAgICAgICAgICAgIE1hdGggZnVuY3Rpb25zIG9mIEMgc3RhbmRhcmQKLSAgICAgICAgICAgIHRpbWUgICAgICAgICAgICAgICAgVGltZS1yZWxhdGVkIGZ1bmN0aW9ucyAoYWxzbyB0aGUgbmV3ZXIgZGF0ZXRpbWUgbW9kdWxlKQotICAgICAgICAgICAgbWFyc2hhbCAgICAgICAgICAgICBSZWFkIGFuZCB3cml0ZSBzb21lIHB5dGhvbiB2YWx1ZXMgaW4gYmluYXJ5IGZvcm1hdAotICAgICAgICAgICAgc3RydWN0ICAgICAgICAgICAgICBDb252ZXJ0IGJldHdlZW4gcHl0aG9uIHZhbHVlcyBhbmQgQyBzdHJ1Y3RzCi0KLSogU3RhbmRhcmQgKgotCi0gICAgICAgICAgICBnZXRvcHQgICAgICAgICAgICAgIFBhcnNlIGNtZCBsaW5lIGFyZ3MgaW4gc3lzLmFyZ3YuICBBIGxhIFVOSVggJ2dldG9wdCcuCi0gICAgICAgICAgICBvcyAgICAgICAgICAgICAgICAgIEEgbW9yZSBwb3J0YWJsZSBpbnRlcmZhY2UgdG8gT1MgZGVwZW5kZW50IGZ1bmN0aW9uYWxpdHkKLSAgICAgICAgICAgIHJlICAgICAgICAgICAgICAgICAgRnVuY3Rpb25zIHVzZWZ1bCBmb3Igd29ya2luZyB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLSAgICAgICAgICAgIHN0cmluZyAgICAgICAgICAgICAgVXNlZnVsIHN0cmluZyBhbmQgY2hhcmFjdGVycyBmdW5jdGlvbnMgYW5kIGV4Y2VwdGlvbnMKLSAgICAgICAgICAgIHJhbmRvbSAgICAgICAgICAgICAgTWVyc2VubmUgVHdpc3RlciBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKLSAgICAgICAgICAgIF90aHJlYWQgICAgICAgICAgICAgTG93LWxldmVsIHByaW1pdGl2ZXMgZm9yIHdvcmtpbmcgd2l0aCBwcm9jZXNzIHRocmVhZHMKLSAgICAgICAgICAgIHRocmVhZGluZyAgICAgICAgICAgaWRlbSwgbmV3IHJlY29tbWVuZGVkIGludGVyZmFjZS4KLQotKiBVbml4L1Bvc2l4ICoKLQotICAgICAgICAgICAgZGJtICAgICAgICAgICAgICAgICBJbnRlcmZhY2UgdG8gVW5peCBkYm0gZGF0YWJhc2VzCi0gICAgICAgICAgICBncnAgICAgICAgICAgICAgICAgIEludGVyZmFjZSB0byBVbml4IGdyb3VwIGRhdGFiYXNlCi0gICAgICAgICAgICBwb3NpeCAgICAgICAgICAgICAgIE9TIGZ1bmN0aW9uYWxpdHkgc3RhbmRhcmRpemVkIGJ5IEMgYW5kIFBPU0lYIHN0YW5kYXJkcwotICAgICAgICAgICAgcG9zaXhwYXRoICAgICAgICAgICBQT1NJWCBwYXRobmFtZSBmdW5jdGlvbnMKLSAgICAgICAgICAgIHB3ZCAgICAgICAgICAgICAgICAgQWNjZXNzIHRvIHRoZSBVbml4IHBhc3N3b3JkIGRhdGFiYXNlCi0gICAgICAgICAgICBzZWxlY3QgICAgICAgICAgICAgIEFjY2VzcyB0byBVbml4IHNlbGVjdCBtdWx0aXBsZXggZmlsZSBzeW5jaHJvbml6YXRpb24KLSAgICAgICAgICAgIHNvY2tldCAgICAgICAgICAgICAgQWNjZXNzIHRvIEJTRCBzb2NrZXQgaW50ZXJmYWNlCi0KLSogVGsgVXNlci1pbnRlcmZhY2UgVG9vbGtpdCAqCi0KLSAgICAgICAgICAgIHRraW50ZXIgICAgICAgICAgICAgTWFpbiBpbnRlcmZhY2UgdG8gVGsKLQotKiBNdWx0aW1lZGlhICoKLQotICAgICAgICAgICAgYXVkaW9vcCAgICAgICAgICAgICBVc2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMKLSAgICAgICAgICAgIGltYWdlb3AgICAgICAgICAgICAgVXNlZnVsIG9wZXJhdGlvbnMgb24gaW1hZ2VzCi0gICAgICAgICAgICBqcGVnICAgICAgICAgICAgICAgIEFjY2VzcyB0byBqcGVnIGltYWdlIGNvbXByZXNzb3IgYW5kIGRlY29tcHJlc3NvcgotICAgICAgICAgICAgcmdiaW1nICAgICAgICAgICAgICBBY2Nlc3MgU0dJIGltZ2xpYiBpbWFnZSBmaWxlcwotCi0qIENyeXB0b2dyYXBoaWMgRXh0ZW5zaW9ucyAqCi0KLSAgICAgICAgICAgIG1kNSAgICAgICAgIEludGVyZmFjZSB0byBSU0EncyBNRDUgbWVzc2FnZSBkaWdlc3QgYWxnb3JpdGhtCi0gICAgICAgICAgICBzaGEgICAgICAgICBJbnRlcmZhY2UgdG8gdGhlIFNIQSBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0KLSAgICAgICAgICAgIEhNQUMgICAgICAgIEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gLS0gUkZDIDIxMDQuCi0KLSogU0dJIElSSVggKiAoNCAmIDUpCi0KLSAgICAgICAgICAgIGFsICAgICAgICAgIFNHSSBhdWRpbyBmYWNpbGl0aWVzCi0gICAgICAgICAgICBBTCAgICAgICAgICBhbCBjb25zdGFudHMKLSAgICAgICAgICAgIGZsICAgICAgICAgIEludGVyZmFjZSB0byBGT1JNUyBsaWJyYXJ5Ci0gICAgICAgICAgICBGTCAgICAgICAgICBmbCBjb25zdGFudHMKLSAgICAgICAgICAgIGZscCBGdW5jdGlvbnMgZm9yIGZvcm0gZGVzaWduZXIKLSAgICAgICAgICAgIGZtICAgICAgICAgIEFjY2VzcyB0byBmb250IG1hbmFnZXIgbGlicmFyeQotICAgICAgICAgICAgZ2wgICAgICAgICAgQWNjZXNzIHRvIGdyYXBoaWNzIGxpYnJhcnkKLSAgICAgICAgICAgIEdMICAgICAgICAgIENvbnN0YW50cyBmb3IgZ2wKLSAgICAgICAgICAgIERFVklDRSAgICAgIE1vcmUgY29uc3RhbnRzIGZvciBnbAotICAgICAgICAgICAgaW1nZmlsZSAgICAgSW1nbGliIGltYWdlIGZpbGUgaW50ZXJmYWNlCi0KLQotV29ya3NwYWNlIGV4cGxvcmF0aW9uIGFuZCBpZGlvbSBoaW50cwotCi0gICAgICAgIGRpcig8bW9kdWxlPikgICBsaXN0IGZ1bmN0aW9ucywgdmFyaWFibGVzIGluIDxtb2R1bGU+Ci0gICAgICAgIGRpcigpICAgICAgICAgICBnZXQgb2JqZWN0IGtleXMsIGRlZmF1bHRzIHRvIGxvY2FsIG5hbWUgc3BhY2UKLSAgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogbWFpbigpICAgICAgICAgICAgaW52b2tlIG1haW4gaWYgcnVubmluZyBhcyBzY3JpcHQKLSAgICAgICAgbWFwKE5vbmUsIGxzdDEsIGxzdDIsIC4uLikgICAgICAgICAgICAgICAgICAgbWVyZ2UgbGlzdHMKLSAgICAgICAgYiA9IGFbOl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlIGNvcHkgb2Ygc2VxIHN0cnVjdHVyZQotICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICBpbiBpbnRlcmFjdGl2ZSBtb2RlLCBpcyBsYXN0IHZhbHVlIHByaW50ZWQKLQotCi0KLQotCi0KLQotUHl0aG9uIE1vZGUgZm9yIEVtYWNzCi0KLShOb3QgcmV2aXNlZCwgcG9zc2libHkgbm90IHVwIHRvIGRhdGUpCi1UeXBlIEMtYyA/IHdoZW4gaW4gcHl0aG9uLW1vZGUgZm9yIGV4dGVuc2l2ZSBoZWxwLgotSU5ERU5UQVRJT04KLVByaW1hcmlseSBmb3IgZW50ZXJpbmcgbmV3IGNvZGU6Ci0gICAgICAgIFRBQiAgICAgIGluZGVudCBsaW5lIGFwcHJvcHJpYXRlbHkKLSAgICAgICAgTEZEICAgICAgaW5zZXJ0IG5ld2xpbmUsIHRoZW4gaW5kZW50Ci0gICAgICAgIERFTCAgICAgIHJlZHVjZSBpbmRlbnRhdGlvbiwgb3IgZGVsZXRlIHNpbmdsZSBjaGFyYWN0ZXIKLVByaW1hcmlseSBmb3IgcmVpbmRlbnRpbmcgZXhpc3RpbmcgY29kZToKLSAgICAgICAgQy1jIDogICAgZ3Vlc3MgcHktaW5kZW50LW9mZnNldCBmcm9tIGZpbGUgY29udGVudDsgY2hhbmdlIGxvY2FsbHkKLSAgICAgICAgQy11IEMtYyA6ICAgICAgICBkaXR0bywgYnV0IGNoYW5nZSBnbG9iYWxseQotICAgICAgICBDLWMgVEFCICByZWluZGVudCByZWdpb24gdG8gbWF0Y2ggaXRzIGNvbnRleHQKLSAgICAgICAgQy1jIDwgICAgc2hpZnQgcmVnaW9uIGxlZnQgYnkgcHktaW5kZW50LW9mZnNldAotICAgICAgICBDLWMgPiAgICBzaGlmdCByZWdpb24gcmlnaHQgYnkgcHktaW5kZW50LW9mZnNldAotTUFSS0lORyAmIE1BTklQVUxBVElORyBSRUdJT05TIE9GIENPREUKLUMtYyBDLWIgICAgICAgICBtYXJrIGJsb2NrIG9mIGxpbmVzCi1NLUMtaCAgICAgICAgICAgbWFyayBzbWFsbGVzdCBlbmNsb3NpbmcgZGVmCi1DLXUgTS1DLWggICAgICAgbWFyayBzbWFsbGVzdCBlbmNsb3NpbmcgY2xhc3MKLUMtYyAjICAgICAgICAgICBjb21tZW50IG91dCByZWdpb24gb2YgY29kZQotQy11IEMtYyAjICAgICAgIHVuY29tbWVudCByZWdpb24gb2YgY29kZQotTU9WSU5HIFBPSU5UCi1DLWMgQy1wICAgICAgICAgbW92ZSB0byBzdGF0ZW1lbnQgcHJlY2VkaW5nIHBvaW50Ci1DLWMgQy1uICAgICAgICAgbW92ZSB0byBzdGF0ZW1lbnQgZm9sbG93aW5nIHBvaW50Ci1DLWMgQy11ICAgICAgICAgbW92ZSB1cCB0byBzdGFydCBvZiBjdXJyZW50IGJsb2NrCi1NLUMtYSAgICAgICAgICAgbW92ZSB0byBzdGFydCBvZiBkZWYKLUMtdSBNLUMtYSAgICAgICBtb3ZlIHRvIHN0YXJ0IG9mIGNsYXNzCi1NLUMtZSAgICAgICAgICAgbW92ZSB0byBlbmQgb2YgZGVmCi1DLXUgTS1DLWUgICAgICAgbW92ZSB0byBlbmQgb2YgY2xhc3MKLUVYRUNVVElORyBQWVRIT04gQ09ERQotQy1jIEMtYyBzZW5kcyB0aGUgZW50aXJlIGJ1ZmZlciB0byB0aGUgUHl0aG9uIGludGVycHJldGVyCi1DLWMgfCAgIHNlbmRzIHRoZSBjdXJyZW50IHJlZ2lvbgotQy1jICEgICBzdGFydHMgYSBQeXRob24gaW50ZXJwcmV0ZXIgd2luZG93OyB0aGlzIHdpbGwgYmUgdXNlZCBieQotICAgICAgICBzdWJzZXF1ZW50IEMtYyBDLWMgb3IgQy1jIHwgY29tbWFuZHMKLUMtYyBDLXcgcnVucyBQeUNoZWNrZXIKLQotVkFSSUFCTEVTCi1weS1pbmRlbnQtb2Zmc2V0ICAgICAgICBpbmRlbnRhdGlvbiBpbmNyZW1lbnQKLXB5LWJsb2NrLWNvbW1lbnQtcHJlZml4IGNvbW1lbnQgc3RyaW5nIHVzZWQgYnkgcHktY29tbWVudC1yZWdpb24KLXB5LXB5dGhvbi1jb21tYW5kICAgICAgIHNoZWxsIGNvbW1hbmQgdG8gaW52b2tlIFB5dGhvbiBpbnRlcnByZXRlcgotcHktc2Nyb2xsLXByb2Nlc3MtYnVmZmVyICAgICAgICB0IG1lYW5zIGFsd2F5cyBzY3JvbGwgUHl0aG9uIHByb2Nlc3MgYnVmZmVyCi1weS10ZW1wLWRpcmVjdG9yeSAgICAgICBkaXJlY3RvcnkgdXNlZCBmb3IgdGVtcCBmaWxlcyAoaWYgbmVlZGVkKQotcHktYmVlcC1pZi10YWItY2hhbmdlICAgcmluZyB0aGUgYmVsbCBpZiB0YWItd2lkdGggaXMgY2hhbmdlZAotCi0KLVRoZSBQeXRob24gRGVidWdnZXIKLQotKE5vdCByZXZpc2VkLCBwb3NzaWJseSBub3QgdXAgdG8gZGF0ZSwgc2VlIDEuNS4yIExpYnJhcnkgUmVmIHNlY3Rpb24gOS4xOyBpbiAxLjUuMiwgeW91IG1heSBhbHNvIHVzZSBkZWJ1Z2dlciBpbnRlZ3JhdGVkIGluIElETEUpCi0KLUFjY2Vzc2luZwotCi1pbXBvcnQgcGRiICAgICAgKGl0J3MgYSBtb2R1bGUgd3JpdHRlbiBpbiBQeXRob24pCi0gICAgICAgIC0tIGRlZmluZXMgZnVuY3Rpb25zIDoKLSAgICAgICAgICAgcnVuKHN0YXRlbWVudFssZ2xvYmFsc1ssIGxvY2Fsc11dKQotICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXhlY3V0ZSBzdGF0ZW1lbnQgc3RyaW5nIHVuZGVyIGRlYnVnZ2VyIGNvbnRyb2wsIHdpdGggb3B0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCAmIGxvY2FsIGVudmlyb25tZW50LgotICAgICAgICAgICBydW5ldmFsKGV4cHJlc3Npb25bLGdsb2JhbHNbLCBsb2NhbHNdXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tIHNhbWUgYXMgcnVuLCBidXQgZXZhbHVhdGUgZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHZhbHVlLgotICAgICAgICAgICBydW5jYWxsKGZ1bmN0aW9uWywgYXJndW1lbnQsIC4uLl0pCi0gICAgICAgICAgICAgICAgICAgICAgICAtLSBydW4gZnVuY3Rpb24gb2JqZWN0IHdpdGggZ2l2ZW4gYXJnKHMpCi0gICAgICAgICAgIHBtKCkgICAgICAgICAtLSBydW4gcG9zdG1vcnRlbSBvbiBsYXN0IGV4Y2VwdGlvbiAobGlrZSBkZWJ1Z2dpbmcgYSBjb3JlIGZpbGUpCi0gICAgICAgICAgIHBvc3RfbW9ydGVtKHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLSBydW4gcG9zdG1vcnRlbSBvbiB0cmFjZWJhY2sgb2JqZWN0IDx0PgotCi0gICAgICAgIC0tIGRlZmluZXMgY2xhc3MgUGRiIDoKLSAgICAgICAgICAgdXNlIFBkYiB0byBjcmVhdGUgcmV1c2FibGUgZGVidWdnZXIgb2JqZWN0cy4gT2JqZWN0Ci0gICAgICAgICAgIHByZXNlcnZlcyBzdGF0ZSAoaS5lLiBicmVhayBwb2ludHMpIGJldHdlZW4gY2FsbHMuCi0KLSAgICAgICAgcnVucyB1bnRpbCBhIGJyZWFrcG9pbnQgaGl0LCBleGNlcHRpb24sIG9yIGVuZCBvZiBwcm9ncmFtCi0gICAgICAgIElmIGV4Y2VwdGlvbiwgdmFyaWFibGUgJ19fZXhjZXB0aW9uX18nIGhvbGRzIChleGNlcHRpb24sdmFsdWUpLgotCi1Db21tYW5kcwotCi1oLCBoZWxwCi0gICAgICAgIGJyaWVmIHJlbWluZGVyIG9mIGNvbW1hbmRzCi1iLCBicmVhayBbPGFyZz5dCi0gICAgICAgIGlmIDxhcmc+IG51bWVyaWMsIGJyZWFrIGF0IGxpbmUgPGFyZz4gaW4gY3VycmVudCBmaWxlCi0gICAgICAgIGlmIDxhcmc+IGlzIGZ1bmN0aW9uIG9iamVjdCwgYnJlYWsgb24gZW50cnkgdG8gZmNuIDxhcmc+Ci0gICAgICAgIGlmIG5vIGFyZywgbGlzdCBicmVha3BvaW50cwotY2wsIGNsZWFyIFs8YXJnPl0KLSAgICAgICAgaWYgPGFyZz4gbnVtZXJpYywgY2xlYXIgYnJlYWtwb2ludCBhdCA8YXJnPiBpbiBjdXJyZW50IGZpbGUKLSAgICAgICAgaWYgbm8gYXJnLCBjbGVhciBhbGwgYnJlYWtwb2ludHMgYWZ0ZXIgY29uZmlybWF0aW9uCi13LCB3aGVyZQotICAgICAgICBwcmludCBjdXJyZW50IGNhbGwgc3RhY2sKLXUsIHVwCi0gICAgICAgIG1vdmUgdXAgb25lIHN0YWNrIGZyYW1lICh0byB0b3AtbGV2ZWwgY2FsbGVyKQotZCwgZG93bgotICAgICAgICBtb3ZlIGRvd24gb25lIHN0YWNrIGZyYW1lCi1zLCBzdGVwCi0gICAgICAgIGFkdmFuY2Ugb25lIGxpbmUgaW4gdGhlIHByb2dyYW0sIHN0ZXBwaW5nIGludG8gY2FsbHMKLW4sIG5leHQKLSAgICAgICAgYWR2YW5jZSBvbmUgbGluZSwgc3RlcHBpbmcgb3ZlciBjYWxscwotciwgcmV0dXJuCi0gICAgICAgIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMKLSAgICAgICAgKHJldHVybiB2YWx1ZSBpcyBzYXZlZCBpbiB2YXJpYWJsZSAiX19yZXR1cm5fXyIsIHdoaWNoCi0gICAgICAgIGNhbiBiZSBwcmludGVkIG9yIG1hbmlwdWxhdGVkIGZyb20gZGVidWdnZXIpCi1jLCBjb250aW51ZQotICAgICAgICBjb250aW51ZSB1bnRpbCBuZXh0IGJyZWFrcG9pbnQKLWosIGp1bXAgbGluZW5vCi0gICAgICAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZAotYSwgYXJncwotICAgICAgICBwcmludCBhcmdzIHRvIGN1cnJlbnQgZnVuY3Rpb24KLXJ2LCByZXR2YWwKLSAgICAgICAgcHJpbnRzIHJldHVybiB2YWx1ZSBmcm9tIGxhc3QgZnVuY3Rpb24gdGhhdCByZXR1cm5lZAotcCwgcHJpbnQgPGFyZz4KLSAgICAgICAgcHJpbnRzIHZhbHVlIG9mIDxhcmc+IGluIGN1cnJlbnQgc3RhY2sgZnJhbWUKLWwsIGxpc3QgWzxmaXJzdD4gWywgPGxhc3Q+XV0KLSAgICAgICAgICAgICAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuCi0gICAgICAgICAgICAgICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZQotICAgICAgICAgICAgICAgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuCi0gICAgICAgICAgICAgICBXaXRoIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBzdGFydGluZyBhdCB0aGF0IGxpbmUuCi0gICAgICAgICAgICAgICBXaXRoIHR3byBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOwotICAgICAgICAgICAgICAgaWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBsZXNzIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBhIGNvdW50Lgotd2hhdGlzIDxhcmc+Ci0gICAgICAgIHByaW50cyB0eXBlIG9mIDxhcmc+Ci0hCi0gICAgICAgIGV4ZWN1dGVzIHJlc3Qgb2YgbGluZSBhcyBhIFB5dGhvbiBzdGF0ZW1lbnQgaW4gdGhlIGN1cnJlbnQgc3RhY2sgZnJhbWUKLXEgcXVpdAotICAgICAgICBpbW1lZGlhdGVseSBzdG9wIGV4ZWN1dGlvbiBhbmQgbGVhdmUgZGVidWdnZXIKLTxyZXR1cm4+Ci0gICAgICAgIGV4ZWN1dGVzIGxhc3QgY29tbWFuZCBhZ2FpbgotQW55IGlucHV0IGRlYnVnZ2VyIGRvZXNuJ3QgcmVjb2duaXplIGFzIGEgY29tbWFuZCBpcyBhc3N1bWVkIHRvIGJlIGEKLVB5dGhvbiBzdGF0ZW1lbnQgdG8gZXhlY3V0ZSBpbiB0aGUgY3VycmVudCBzdGFjayBmcmFtZSwgdGhlIHNhbWUgd2F5Ci10aGUgZXhjbGFtYXRpb24gbWFyayAoIiEiKSBjb21tYW5kIGRvZXMuCi0KLUV4YW1wbGUKLQotKDEzOTQpIHB5dGhvbgotUHl0aG9uIDEuMC4zIChTZXAgMjYgMTk5NCkKLUNvcHlyaWdodCAxOTkxLTE5OTQgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLCBBbXN0ZXJkYW0KLT4+PiBpbXBvcnQgcm0KLT4+PiBybS5ydW4oKQotVHJhY2ViYWNrIChpbm5lcm1vc3QgbGFzdCk6Ci0gICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxCi0gICAgICAgICBGaWxlICIuL3JtLnB5IiwgbGluZSA3Ci0gICAgICAgICAgIHggPSBkaXYoMykKLSAgICAgICAgIEZpbGUgIi4vcm0ucHkiLCBsaW5lIDIKLSAgICAgICAgICAgcmV0dXJuIGEgLyByCi1aZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8KLT4+PiBpbXBvcnQgcGRiCi0+Pj4gcGRiLnBtKCkKLT4gLi9ybS5weSgyKWRpdjogcmV0dXJuIGEgLyByCi0oUGRiKSBsaXN0Ci0gICAgICAgICAxICAgICBkZWYgZGl2KGEpOgotICAgICAgICAgMiAgLT4gICAgIHJldHVybiBhIC8gcgotICAgICAgICAgMwotICAgICAgICAgNCAgICAgZGVmIHJ1bigpOgotICAgICAgICAgNSAgICAgICAgIGdsb2JhbCByCi0gICAgICAgICA2ICAgICAgICAgciA9IDAKLSAgICAgICAgIDcgICAgICAgICB4ID0gZGl2KDMpCi0gICAgICAgICA4ICAgICAgICAgcHJpbnQgeAotW0VPRl0KLShQZGIpIHByaW50IHIKLTAKLShQZGIpIHEKLT4+PiBwZGIucnVuY2FsbChybS5ydW4pCi1ldGMuCi0KLVF1aXJrcwotCi1CcmVha3BvaW50cyBhcmUgc3RvcmVkIGFzIGZpbGVuYW1lLCBsaW5lIG51bWJlciB0dXBsZXMuIElmIGEgbW9kdWxlIGlzIHJlbG9hZGVkCi1hZnRlciBlZGl0aW5nLCBhbnkgcmVtZW1iZXJlZCBicmVha3BvaW50cyBhcmUgbGlrZWx5IHRvIGJlIHdyb25nLgotCi1BbHdheXMgc2luZ2xlLXN0ZXBzIHRocm91Z2ggdG9wLW1vc3Qgc3RhY2sgZnJhbWUuIFRoYXQgaXMsICJjIiBhY3RzIGxpa2UgIm4iLgpkaWZmIC0tZ2l0IGEvTWlzYy9kZXZlbG9wZXJzLnR4dCBiL01pc2MvZGV2ZWxvcGVycy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzQ2MTMuLjAwMDAwMDAKLS0tIGEvTWlzYy9kZXZlbG9wZXJzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0NiArMCwwIEBACi1EZXZlbG9wZXIgTG9nCi09PT09PT09PT09PT09Ci0KLVRoaXMgZmlsZSBpcyBhIHJ1bm5pbmcgbG9nIG9mIGRldmVsb3BlcnMgZ2l2ZW4gcGVybWlzc2lvbnMgb24gU291cmNlRm9yZ2UuCi0KLVRoZSBwdXJwb3NlIGlzIHRvIHByb3ZpZGUgc29tZSBpbnN0aXR1dGlvbmFsIG1lbW9yeSBvZiB3aG8gd2FzIGdpdmVuIGFjY2VzcwotYW5kIHdoeS4KLQotVGhlIGZpcnN0IGVudHJ5IHN0YXJ0cyBpbiBBcHJpbCAyMDA1LiAgSW4ga2VlcGluZyB3aXRoIHRoZSBzdHlsZSBvZgotTWlzYy9ORVdTLCBuZXdlciBlbnRyaWVzIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgdG9wLiAgQW55IG1hcmt1cCBzaG91bGQKLWJlIGluIHRoZSBmb3JtIG9mIFJlU1QuICBFbnRyaWVzIHNob3VsZCBpbmNsdWRlIHRoZSBpbml0aWFscyBvZiB0aGUKLXByb2plY3QgYWRtaW4gd2hvIG1hZGUgdGhlIGNoYW5nZSBvciBncmFudGVkIGFjY2Vzcy4gIEZlZWwgZnJlZSB0byByZXZpc2UKLXRoZSBmb3JtYXQgdG8gYWNjb21tb2RhdGUgZG9jdW1lbnRhdGlvbiBuZWVkcyBhcyB0aGV5IGFyaXNlLgotCi1Ob3RlLCB3aGVuIGdpdmluZyBuZXcgY29tbWl0IHBlcm1pc3Npb25zLCBiZSBzdXJlIHRvIGdldCBhIGNvbnRyaWJ1dG9yCi1hZ3JlZW1lbnQgZnJvbSB0aGUgY29tbWl0dGVyLiAgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvY29udHJpYi8KLWZvciBkZXRhaWxzLiAgV2hlbiB0aGUgYWdyZWVtZW50IGlzIHNpZ25lZCwgcGxlYXNlIG5vdGUgaXQgaW4gdGhpcyBsb2cuCi0KLVRoaXMgZmlsZSBpcyBlbmNvZGVkIGluIFVURi04LiAgSWYgdGhlIHVzdWFsIGZvcm0gZm9yIGEgbmFtZSBpcyBub3QgaW4KLWEgTGF0aW4gb3IgZXh0ZW5kZWQgTGF0aW4gYWxwaGFiZXQsIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGFuIEFTQ0lJCi10cmFuc2xpdGVyYXRpb24gdG9vLgotCi1QZXJtaXNzaW9ucyBIaXN0b3J5Ci0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gRGF2aWQgTWFsY29sbSB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBPY3QgMjcgMjAxMCBieSBHRkIsCi0gIGF0IHJlY29tbWVuZGF0aW9uIGJ5IEFudG9pbmUgUGl0cm91IGFuZCBSYXltb25kIEhldHRpbmdlci4KLQotLSBUYWwgRWluYXQgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gT2N0IDQgMjAxMCBieSBNdkwsCi0gIGZvciBpbXByb3ZpbmcgSURMRS4KLQotLSDFgXVrYXN6IExhbmdhIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIFNlcCAwOCAyMDEwIGJ5IEdGQiwKLSAgYXQgc3VnZ2VzdGlvbiBvZiBBbnRvaW5lIFBpdHJvdSwgZm9yIGdlbmVyYWwgYnVnIGZpeGluZy4KLQotLSBEYW5pZWwgU3R1dHpiYWNoIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEF1ZyAyMiAyMDEwIGJ5IE12TCwKLSAgZm9yIGdlbmVyYWwgYnVnIGZpeGluZy4KLQotLSBBc2sgU29sZW0gd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDE3IDIwMTAgYnkgTXZMLAotICBvbiByZWNvbW1lbmRhdGlvbiBieSBKZXNzZSBOb2xsZXIsIGZvciB3b3JrIG9uIHRoZSBtdWx0aXByb2Nlc3NpbmcKLSAgbGlicmFyeS4KLQotLSBHZW9yZ2UgQm91dHNpb3VraXMgd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXVnIDEwIDIwMTAKLSAgYnkgTXZMLCBmb3Igd29yayBvbiAydG8zLgotCi0tIMOJcmljIEFyYXVqbyB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBdWcgMTAgMjAxMCBieSBCQUMsCi0gIGF0IHN1Z2dlc3Rpb24gb2YgVGFyZWsgWmlhZMOpLgotCi0tIFRlcnJ5IFJlZWR5IHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEF1ZyAwNCAyMDEwIGJ5IE12TCwKLSAgYXQgc3VnZ2VzdGlvbiBvZiBOaWNrIENvZ2hsYW4uCi0KLS0gQnJpYW4gUXVpbmxhbiB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBKdWwgMjYgMjAxMCBieSBHRkIsCi0gIGZvciB3b3JrIHJlbGF0ZWQgdG8gUEVQIDMxNDguCi0KLS0gUmVpZCBLbGVja25lciB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBKdWwgMTEgMjAxMCBieSBHRkIsCi0gIGZvciB3b3JrIG9uIHRoZSBweTNrLWppdCBicmFuY2gsIGF0IHN1Z2dlc3Rpb24gb2YgdGhlIFVubGFkZW4KLSAgU3dhbGxvdyB0ZWFtLgotCi0tIEFsZXhhbmRlciBCZWxvcG9sc2t5IHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIE1heSAyNSAyMDEwCi0gIGJ5IE12TCBhdCBzdWdnZXN0aW9uIG9mIE1hcmsgRGlja2luc29uLgotCi0tIFRpbSBHb2xkZW4gd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gQXByaWwgMjEgMjAxMCBieSBNdkwsCi0gIGF0IHN1Z2dlc3Rpb24gb2YgTWljaGFlbCBGb29yZC4KLQotLSBHaWFtcGFvbG8gUm9kb2zDoCB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCAxNyAyMDEwIGJ5Ci0gIE12TCwgYXQgc3VnZ2VzdGlvbiBvZiBSLiBEYXZpZCBNdXJyYXkuCi0KLS0gSmVhbi1QYXVsIENhbGRlcm9uZSB3YXMgZ2l2ZW4gY29tbWl0IGFjY2VzcyBvbiBBcHJpbCA2IDIwMTAgYnkKLSAgR0ZCLCBhdCBzdWdnZXN0aW9uIG9mIE1pY2hhZWwgRm9vcmQgYW5kIG90aGVycy4KLQotLSBCcmlhbiBDdXJ0aW4gd2FzIGdpdmVuIGNvbW1pdCBhY2Nlc3Mgb24gTWFyY2ggMjQgMjAxMCBieSBNdkwuCi0KLS0gRmxvcmVudCBYaWNsdW5hIHdhcyBnaXZlbiBjb21taXQgYWNjZXNzIG9uIEZlYnJ1YXJ5IDI1IDIwMTAgYnkKLSAgTXZMLCBiYXNlZCBvbiBBbnRvaW5lIFBpdHJvdSdzIHJlY29tbWVuZGF0aW9uLgotCi0tIERpbm8gVmllaGxhbmQgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gRmVicnVhcnkgMjMgMjAxMCBieSBCcmV0dAotICBDYW5ub24sIGZvciBiYWNrcG9ydGluZyB0ZXN0cyBmcm9tIElyb25QeXRob24uCi0KLS0gTGFycnkgSGFzdGluZ3Mgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gRmVicnVhcnkgMjIgMjAxMCBieQotICBBbmRyZXcgS3VjaGxpbmcsIGJhc2VkIG9uIEJyZXR0IENhbm5vbidzIHJlY29tbWVuZGF0aW9uLgotCi0tIFZpY3RvciBTdGlubmVyIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIEphbnVhcnkgMzAgMjAxMCBieSBNdkwsCi0gIGF0IHJlY29tbWVuZGF0aW9uIGJ5IE1hcmsgRGlja2luc29uIGFuZCBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KLQotLSBTdGVmYW4gS3JhaCB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiBKYW51YXJ5IDUgMjAxMCBieSBHRkIsIGF0Ci0gIHN1Z2dlc3Rpb24gb2YgTWFyayBEaWNraW5zb24sIGZvciB3b3JrIG9uIHRoZSBkZWNpbWFsIG1vZHVsZS4KLQotLSBEb3VnIEhlbGxtYW5uIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIFNlcHRlbWJlciAxOSAyMDA5IGJ5IEdGQiwgYXQKLSAgc3VnZ2VzdGlvbiBvZiBKZXNzZSBOb2xsZXIsIGZvciBkb2N1bWVudGF0aW9uIHdvcmsuCi0KLS0gRXppbyBNZWxvdHRpIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIEp1bmUgNyAyMDA5IGJ5IEdGQiwgZm9yIHdvcmsgb24gYW5kCi0gIGZpeGVzIHRvIHRoZSBkb2N1bWVudGF0aW9uLgotCi0tIFBhdWwgS2lwcGVzIHdhcyBnaXZlbiBjb21taXQgcHJpdmlsZWdlcyBhdCBQeUNvbiAyMDA5IGJ5IEJBQyB0byB3b3JrIG9uIDN0bzIuCi0KLS0gUm9uIER1UGxhaW4gd2FzIGdpdmVuIGNvbW1pdCBwcml2aWxlZ2VzIGF0IFB5Q29uIDIwMDkgYnkgQkFDIHRvIHdvcmsgb24gM3RvMi4KLQotLSBTZXZlcmFsIGRldmVsb3BlcnMgb2YgYWx0ZXJuYXRpdmUgUHl0aG9uIGltcGxlbWVudGF0aW9ucyB3aGVyZQotICBnaXZlbiBhY2Nlc3MgZm9yIHRlc3Qgc3VpdGUgYW5kIGxpYnJhcnkgYWRhcHRpb25zIGJ5IE12TDoKLSAgQWxsaXNvbiBSYW5kYWwgKFBhcnJvdCksIE1pY2hhZWwgRm9vcmQgKElyb25QeXRob24pLAotICBKaW0gQmFrZXIsIFBoaWxpcCBKZW52ZXksIGFuZCBGcmFuayBXaWVyemJpY2tpIChhbGwgSnl0aG9uKS4KLQotLSBSLiBEYXZpZCBNdXJyYXkgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gTWFyY2ggMzAgMjAwOSBieSBNdkwsIGFmdGVyCi0gIHJlY29tbWVuZGF0aW9uIGJ5IEJBQy4KLQotLSBDaHJpcyBXaXRoZXJzIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIE1hcmNoIDggMjAwOSBieSBNdkwsCi0gIGFmdGVyIHJlY29tbWVuZGF0aW9uIGJ5IEd2Ui4KLQotLSBUYXJlayBaaWFkw6kgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gRGVjZW1iZXIgMjEgMjAwOCBieSBOQ04sCi0gIGZvciBtYWludGVuYW5jZSBvZiBkaXN0dXRpbHMuCi0KLS0gSGlyb2thenUgWWFtYW1vdG8gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gQXVndXN0IDEyIDIwMDggYnkgTXZMLAotICBmb3IgY29udHJpYnV0aW9ucyB0byB0aGUgV2luZG93cyBidWlsZC4KLQotLSBBbnRvaW5lIFBpdHJvdSB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiBKdWx5IDE2IDIwMDgsIGJ5IHJlY29tbWVuZGF0aW9uCi0gIGZyb20gR3ZSLCBmb3IgZ2VuZXJhbCBjb250cmlidXRpb25zIHRvIFB5dGhvbi4KLQotLSBKZXNzZSBOb2xsZXIgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMTYgSnVuZSAyMDA4IGJ5IEdGQiwKLSAgZm9yIHdvcmsgb24gdGhlIG11bHRpcHJvY2Vzc2luZyBtb2R1bGUuCi0KLS0gR3JlZ29yIExpbmdsIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDEwIEp1bmUgMjAwOCBieSBNdkwsCi0gIGZvciB3b3JrIG9uIHRoZSB0dXJ0bGUgbW9kdWxlLgotCi0tIFJvYmVydCBTY2h1cHBlbmllcyB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyMSBNYXkgMjAwOCBieSBNdkwsCi0gIGZvciBHU29DIGNvbnRyaWJ1dGlvbnMuCi0KLS0gUm9kcmlnbyBCZXJuYXJkbyBQaW1lbnRlbCB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyOSBBcHJpbCAyMDA4IGJ5IE12TCwKLSAgZm9yIEdTb0MgY29udHJpYnV0aW9ucy4KLQotLSBIZWlrbyBXZWluZW4gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMjkgQXByaWwgMjAwOCBieSBNdkwsCi0gIGZvciBHU29DIGNvbnRyaWJ1dGlvbnMuCi0KLS0gSmVzdXMgQ2VhIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDI0IEFwcmlsIDIwMDggYnkgTXZMLAotICBmb3IgbWFpbnRlbmFuY2Ugb2YgYnNkZGIuCi0KLS0gR3VpbGhlcm1lIFBvbG8gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMjQgQXByaWwgMjAwOCBieSBNdkwsCi0gIGZvciBHU29DIGNvbnRyaWJ1dGlvbnMuCi0KLS0gVGhvbWFzIExlZSB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyMSBBcHJpbCAyMDA4IGJ5IE5DTiwKLSAgZm9yIHdvcmsgb24gYnJhbmNoZXMgKGFzdC9vcHRpbWl6ZXIgcmVsYXRlZCkuCi0KLS0gSmVyb2VuIFJ1aWdyb2sgdmFuIGRlciBXZXJ2ZW4gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMTIgQXByaWwgMjAwOAotICBieSBHRkIsIGZvciBkb2N1bWVudGF0aW9uIHdvcmsuCi0KLS0gSm9zaWFoIENhcmxzb24gd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMjYgTWFyY2ggMjAwOCBieSBHRkIsCi0gIGZvciB3b3JrIG9uIGFzeW5jb3JlL2FzeW5jaGF0LgotCi0tIEJlbmphbWluIFBldGVyc29uIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDI1IE1hcmNoIDIwMDggYnkgR0ZCLAotICBmb3IgYnVnIHRyaWFnZSB3b3JrLgotCi0tIEplcnJ5IFNldXR0ZXIgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMjAgTWFyY2ggMjAwOCBieSBCQUMsIGZvcgotICBnZW5lcmFsIGNvbnRyaWJ1dGlvbnMgdG8gUHl0aG9uLgotCi0tIEplZmYgUnVzaCB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAxOCBNYXJjaCAyMDA4IGJ5IEFNSywgZm9yIERpc3R1dGlscyB3b3JrLgotCi0tIERhdmlkIFdvbGV2ZXIgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMTcgTWFyY2ggMjAwOCBieSBNdkwsCi0gIGZvciAydG8zIHdvcmsuCi0KLS0gVHJlbnQgTmVsc29uIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDE3IE1hcmNoIDIwMDggYnkgTXZMLAotICBmb3IgZ2VuZXJhbCBjb250cmlidXRpb25zIHRvIFB5dGhvbi4KLQotLSBNYXJrIERpY2tpbnNvbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiA2IEphbnVhcnkgMjAwOCBieSBGYWN1bmRvCi0gIEJhdGlzdGEgZm9yIGhpcyB3b3JrIG9uIG1hdGhlbWF0aGljcyBhbmQgbnVtYmVyIHJlbGF0ZWQgaXNzdWVzLgotCi0tIEFtYXVyeSBGb3JnZW90IGQnQXJjIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDkgTm92ZW1iZXIgMjAwNyBieSBNdkwsCi0gIGZvciBnZW5lcmFsIGNvbnRyaWJ1dGlvbnMgdG8gUHl0aG9uLgotCi0tIENocmlzdGlhbiBIZWltZXMgd2FzIGdpdmVuIFNWTiBhY2Nlc3Mgb24gMzEgT2N0b2JlciAyMDA3IGJ5IE12TCwKLSAgZm9yIGdlbmVyYWwgY29udHJpYnV0aW9ucyB0byBQeXRob24uCi0KLS0gQ2hyaXMgTW9uc29uIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDIwIE9jdG9iZXIgMjAwNyBieSBOQ04sCi0gIGZvciBoaXMgd29yayBvbiBlZGl0aW5nIFBFUHMuCi0KLS0gQmlsbCBKYW5zc2VuIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDI4IEF1Z3VzdCAyMDA3IGJ5IE5DTiwKLSAgZm9yIGhpcyB3b3JrIG9uIHRoZSBTU0wgbW9kdWxlIGFuZCBvdGhlciB0aGluZ3MgcmVsYXRlZCB0byAoU1NMKSBzb2NrZXRzLgotCi0tIEplZmZyZXkgWWFzc2tpbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiA5IEF1Z3VzdCAyMDA3IGJ5IE5DTiwKLSAgZm9yIGhpcyB3b3JrIG9uIFBFUHMgYW5kIG90aGVyIGdlbmVyYWwgcGF0Y2hlcy4KLQotLSBNYXJrIFN1bW1lcmZpZWxkIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDEgQXVndXN0IDIwMDcgYnkgR0ZCLAotICBmb3Igd29yayBvbiBkb2N1bWVudGF0aW9uLgotCi0tIEFybWluIFJvbmFjaGVyIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDIzIEp1bHkgMjAwNyBieSBHRkIsCi0gIGZvciB3b3JrIG9uIHRoZSBkb2N1bWVudGF0aW9uIHRvb2xzZXQuICBIZSBub3cgbWFpbnRhaW5zIHRoZQotICBhc3QgbW9kdWxlLgotCi0tIFNlbnRoaWwgS3VtYXJhbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAxNiBKdW5lIDIwMDcgYnkgTXZMLAotICBmb3IgaGlzIFN1bW1lci1vZi1Db2RlIHByb2plY3QsIG1lbnRvcmVkIGJ5IFNraXAgTW9udGFuYXJvLgotCi0tIEFsZXhhbmRyZSBWYXNzYWxvdHRpIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDIxIE1heSAyMDA3IGJ5IE12TCwKLSAgZm9yIGhpcyBTdW1tZXItb2YtQ29kZSBwcm9qZWN0LCBtZW50b3JlZCBieSBCcmV0dCBDYW5ub24uCi0KLS0gVHJhdmlzIE9saXBoYW50IHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDE3IEFwciAyMDA3IGJ5IE12TCwKLSAgZm9yIGltcGxlbWVudGluZyB0aGUgZXh0ZW5kZWQgYnVmZmVyIHByb3RvY29sLgotCi0tIFppZ2EgU2VpbG5hY2h0IHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDA5IE1hciAyMDA3IGJ5IE12TCwKLSAgZm9yIGdlbmVyYWwgbWFpbnRlbmFuY2UuCi0KLS0gUGV0ZSBTaGlubmVycyB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAwNCBNYXIgMjAwNyBieSBOQ04sCi0gIGZvciBQRVAgMzEwMSB3b3JrIGluIHRoZSBzYW5kYm94LgotCi0tIFBhdCBNYXVwaW4gYW5kIEVyaWMgVi4gU21pdGggd2VyZSBnaXZlbiBTVk4gYWNjZXNzIG9uIDI4IEZlYiAyMDA3IGJ5IE5DTiwKLSAgZm9yIFBFUCAzMTAxIHdvcmsgaW4gdGhlIHNhbmRib3guCi0KLS0gU3RldmVuIEJldGhhcmQgKFNGIG5hbWUgImJlZGl2aWVyZSIpIGFkZGVkIHRvIHRoZSBTb3VyY2VGb3JnZSBQeXRob24KLSAgcHJvamVjdCAyNiBGZWIgMjAwNywgYnkgTkNOLCBhcyBhIHRyYWNrZXIgdGVjaC4KLQotLSBKb3NpYWggQ2FybHNvbiAoU0YgbmFtZSAiam9zaWFoY2FybHNvbiIpIGFkZGVkIHRvIHRoZSBTb3VyY2VGb3JnZSBQeXRob24KLSAgcHJvamVjdCAwNiBKYW4gMjAwNywgYnkgTkNOLCBhcyBhIHRyYWNrZXIgdGVjaC4gIEhlIHdpbGwgbWFpbnRhaW4gYXN5bmNvcmUuCi0KLS0gQ29sbGluIFdpbnRlciB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAwNSBKYW4gMjAwNyBieSBOQ04sIGZvciBQRVAKLSAgdXBkYXRlIGFjY2Vzcy4KLQotLSBMYXJzIEd1c3RhZWJlbCB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyMCBEZWMgMjAwNiBieSBOQ04sIGZvciB0YXJmaWxlLnB5Ci0gIHJlbGF0ZWQgd29yay4KLQotLSAyMDA2IFN1bW1lciBvZiBDb2RlIGVudHJpZXM6IFNvQyBkZXZlbG9wZXJzIGFyZSBleHBlY3RlZCB0byB3b3JrCi0gIHByaW1hcmlseSBpbiBub25kaXN0L3NhbmRib3ggb3Igb24gYSBicmFuY2ggb2YgdGhlaXIgb3duLCBhbmQgd2lsbAotICBoYXZlIHRoZWlyIHdvcmsgcmV2aWV3ZWQgYmVmb3JlIGNoYW5nZXMgYXJlIGFjY2VwdGVkIGludG8gdGhlIHRydW5rLgotCi0gIC0gTWF0dCBGbGVtaW5nIHdhcyBhZGRlZCBvbiAyNSBNYXkgMjAwNiBieSBBTUs7IGhlJ2xsIGJlIHdvcmtpbmcgb24KLSAgICBlbmhhbmNpbmcgdGhlIFB5dGhvbiBkZWJ1Z2dlci4KLQotICAtIEphY2tpbHluIEhveHdvcnRoIHdhcyBhZGRlZCBvbiAyNSBNYXkgMjAwNiBieSBBTUs7IHNoZSdsbCBiZSBhZGRpbmcgbG9nZ2luZwotICAgIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgotCi0gIC0gTWF0ZXVzeiBSdWtvd2ljeiB3YXMgYWRkZWQgb24gMzAgTWF5IDIwMDYgYnkgQU1LOyBoZSdsbCBiZQotICAgIHRyYW5zbGF0aW5nIHRoZSBkZWNpbWFsIG1vZHVsZSBpbnRvIEMuCi0KLS0gU1ZOIGFjY2VzcyBncmFudGVkIHRvIHRoZSAiTmVlZCBmb3IgU3BlZWQiIEljZWxhbmQgc3ByaW50IGF0dGVuZGVlcywKLSAgYmV0d2VlbiBNYXkgMTcgYW5kIDIxLCAyMDA2LCBieSBUaW0gUGV0ZXJzLiAgQWxsIHdvcmsgaXMgdG8gYmUgZG9uZQotICBpbiBuZXcgc2FuZGJveCBwcm9qZWN0cyBvciBvbiBuZXcgYnJhbmNoZXMsIHdpdGggbWVyZ2luZyB0byB0aGUKLSAgdHJ1bmsgYXMgYXBwcm92ZWQ6Ci0KLSAgQW5kcmV3IERhbGtlCi0gIENocmlzdGlhbiBUaXNtZXIKLSAgSmFjayBEaWVkZXJpY2gKLSAgSm9obiBCZW5lZGlrdHNzb24KLSAgS3Jpc3Rqw6FuIFYuIErDs25zc29uCi0gIE1hcnRpbiBCbGFpcwotICBSaWNoYXJkIEVtc2xpZQotICBSaWNoYXJkIEpvbmVzCi0gIFJ1bmFyIFBldHVyc3NvbgotICBTdGV2ZSBIb2xkZW4KLSAgUmljaGFyZCBNLiBUZXcKLQotLSBTdGV2ZW4gQmV0aGFyZCB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyNyBBcHIgMjAwNiBieSBESkcsIGZvciBQRVAKLSAgdXBkYXRlIGFjY2Vzcy4KLQotLSBUYWxpbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAyNyBBcHIgMjAwNiBieSBESkcsIGZvciBQRVAgdXBkYXRlCi0gIGFjY2Vzcy4KLQotLSBHZW9yZ2UgWW9zaGlkYSAoU0YgbmFtZSAicXVpdmVyIikgYWRkZWQgdG8gdGhlIFNvdXJjZUZvcmdlIFB5dGhvbgotICBwcm9qZWN0IDE0IEFwciAyMDA2LCBieSBUaW0gUGV0ZXJzLCBhcyBhIHRyYWNrZXIgYWRtaW4uICBTZWUKLSAgY29udGVtcG9yYW5lb3VzIHB5dGhvbi1jaGVja2lucyB0aHJlYWQgd2l0aCB0aGUgdW5saWtlbHkgU3ViamVjdDoKLQotICAgICAgcjQ1MzI5IC0gcHl0aG9uL3RydW5rL0RvYy93aGF0c25ldy93aGF0c25ldzI1LnRleAotCi0tIFJvbmFsZCBPdXNzb3JlbiB3YXMgZ2l2ZW4gU1ZOIGFjY2VzcyBvbiAzIE1hciAyMDA2IGJ5IE5DTiwgZm9yIE1hYwotICByZWxhdGVkIHdvcmsuCi0KLS0gQm9iIElwcG9saXRvIHdhcyBnaXZlbiBTVk4gYWNjZXNzIG9uIDIgTWFyIDIwMDYgYnkgTkNOLCBmb3IgTWFjCi0gIHJlbGF0ZWQgd29yay4KLQotLSBOaWNrIENvZ2hsYW4gcmVxdWVzdGVkIENWUyBhY2Nlc3Mgc28gaGUgY291bGQgdXBkYXRlIGhpcyBQRVAgZGlyZWN0bHkuCi0gIEdyYW50ZWQgYnkgR3ZSIG9uIDE2IE9jdCAyMDA1LgotCi0tIEFkZGVkIHR3byBuZXcgZGV2ZWxvcGVycyBmb3IgdGhlIFN1bW1lciBvZiBDb2RlIHByb2plY3QuIDggSnVseSAyMDA1Ci0gIGJ5IFJESC4gIEFuZHJldyBLdWNobGluZyB3aWxsIGJlIG1lbnRvcmluZyBHcmVnb3J5IEsgSm9obnNvbiBmb3IgYQotICBwcm9qZWN0IHRvIGVuaGFuY2UgbWFpbGJveC4gIEJyZXR0IENhbm5vbiByZXF1ZXN0ZWQgYWNjZXNzIGZvciBGbG92aXMKLSAgQnJ1eW5vb2doZSAoc2lyb2xmKSB0byB3b3JrIG9uIHBzdGF0cywgcHJvZmlsZSwgYW5kIGhvdHNob3QuICBCb3RoIHVzZXJzCi0gIGFyZSBleHBlY3RlZCB0byB3b3JrIHByaW1hcmlseSBpbiBub25kaXN0L3NhbmRib3ggYW5kIGhhdmUgdGhlaXIgd29yawotICByZXZpZXdlZCBiZWZvcmUgbWFraW5nIHVwZGF0ZXMgdG8gYWN0aXZlIGNvZGUuCi0KLS0gR2VvcmcgQnJhbmRsIHdhcyBnaXZlbiBTRiB0cmFja2VyIHBlcm1pc3Npb25zIG9uIDI4IE1heSAyMDA1Ci0gIGJ5IFJESC4gIFNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgMjAwNSwgaGUgaGFzIGJlZW4gYWN0aXZlIGluIGRpc2N1c3Npb25zCi0gIG9uIHB5dGhvbi1kZXYgYW5kIGhhcyBzdWJtaXR0ZWQgYSBkb3plbiBwYXRjaCByZXZpZXdzLiAgVGhlIHBlcm1pc3Npb25zCi0gIGFkZCB0aGUgYWJpbGl0eSB0byBjaGFuZ2UgdHJhY2tlciBzdGF0dXMgYW5kIHRvIGF0dGFjaCBwYXRjaGVzLiAgT24KLSAgMyBKdW5lIDIwMDUsIHRoaXMgd2FzIGV4cGFuZGVkIGJ5IFJESCB0byBpbmNsdWRlIGNoZWNraW4gcGVybWlzc2lvbnMuCi0KLS0gVGVycnkgUmVlZHkgd2FzIGdpdmVuIFNGIHRyYWNrZXIgcGVybWlzc2lvbnMgb24gNyBBcHIgMjAwNSBieSBSREguCi0KLS0gTmljayBDb2dobGFuIHdhcyBnaXZlbiBTRiB0cmFja2VyIHBlcm1pc3Npb25zIG9uIDUgQXByIDIwMDUgYnkgUkRILgotICBGb3Igc2V2ZXJhbCBtb250aHMsIGhlIGhhcyBiZWVuIGFjdGl2ZSBpbiByZXZpZXdpbmcgYW5kIGNvbnRyaWJ1dGluZwotICBwYXRjaGVzLiAgVGhlIGFkZGVkIHBlcm1pc3Npb25zIGdpdmUgaGltIGdyZWF0ZXIgZmxleGliaWxpdHkgaW4KLSAgd29ya2luZyB3aXRoIHRoZSB0cmFja2VyLgotCi0tIEVyaWMgUHJpY2Ugd2FzIG1hZGUgYSBkZXZlbG9wZXIgb24gMiBNYXkgMjAwMyBieSBUR1AuICBUaGlzIHdhcwotICBzcGVjaWZpY2FsbHkgdG8gd29yayBvbiB0aGUgbmV3IGBgZGVjaW1hbGBgIHBhY2thZ2UsIHdoaWNoIGxpdmVkIGluCi0gIGBgbm9uZGlzdC9zYW5kYm94L2RlY2ltYWwvYGAgYXQgdGhlIHRpbWUuCi0KLS0gRXJpYyBTLiBSYXltb25kIHdhcyBtYWRlIGEgZGV2ZWxvcGVyIG9uIDIgSnVsIDIwMDAgYnkgVEdQLCBmb3IgZ2VuZXJhbAotICBsaWJyYXJ5IHdvcmsuICBIaXMgcmVxdWVzdCBpcyBhcmNoaXZlZCBoZXJlOgotCi0gICAgICBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtSnVseS8wMDUzMTQuaHRtbAotCi0KLVBlcm1pc3Npb25zIERyb3BwZWQgb24gUmVxdWVzdAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gUm95IFNtaXRoLCBNYXR0IEZsZW1pbmcgYW5kIFJpY2hhcmQgRW1zbGllIHNlbnQgZHJvcCByZXF1ZXN0cy4KLSAgNCBBdWcgMjAwOCBHRkIKLQotLSBQZXIgbm90ZSBmcm9tIEFuZHJldyBLdWNobGluZywgdGhlIHBlcm1pc3Npb25zIGZvciBHcmVnb3J5IEsgSm9obnNvbgotICBhbmQgdGhlIFN1bW1lciBPZiBDb2RlIHByb2plY3QgYXJlIG5vIGxvbmdlciBuZWVkZWQuICA0IEF1ZyAyMDA4IEdGQgotCi0tIFBlciBub3RlIGZyb20gQW5kcmV3IEt1Y2hsaW5nLCB0aGUgcGVybWlzc2lvbnMgZm9yIEdyZWdvcnkgSyBKb2huc29uCi0gIGFuZCB0aGUgU3VtbWVyIE9mIENvZGUgcHJvamVjdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4gIEFNSyB3aWxsIG1ha2UKLSAgYW55IGZ1dHVyZSBjaGVja2lucyBkaXJlY3RseS4gIDE2IE9jdCAyMDA1IFJESAotCi0tIEpvaGFubmVzIEdpanNiZXJzIHNlbnQgYSBkcm9wIHJlcXVlc3QuICAyNyBKdWx5IDIwMDUgUkRICi0KLS0gRmxvdmlzIEJydXlub29naGUgc2VudCBhIGRyb3AgcmVxdWVzdC4gIDE0IEp1bHkgMjAwNSBSREgKLQotLSBQYXVsIFByZXNjb2Qgc2VudCBhIGRyb3AgcmVxdWVzdC4gIDMwIEFwciAyMDA1IFJESAotCi0tIEZpbm4gQm9jayBzZW50IGEgZHJvcCByZXF1ZXN0LiAgMTMgQXByIDIwMDUgUkRICi0KLS0gRXJpYyBQcmljZSBzZW50IGEgZHJvcCByZXF1ZXN0LiAgMTAgQXByIDIwMDUgUkRICi0KLS0gSXJtZW4gZGUgSm9uZyByZXF1ZXN0ZWQgZHJvcHBpbmcgQ1ZTIGFjY2VzcyB3aGlsZSBrZWVwaW5nIHRyYWNrZXIKLSAgYWNjZXNzLiAgMTAgQXByIDIwMDUgUkRICi0KLS0gTW9zaGUgWmFka2EgYW5kIEtlbiBNYW5oZWltZXIgc2VudCBkcm9wIHJlcXVlc3RzLiAgOCBBcHIgMjAwNSBieSBSREgKLQotLSBTdGV2ZSBIb2xkZW4sIEdlcmhhcmQgSGFyaW5nLCBhbmQgRGF2aWQgQ29sZSBzZW50IGVtYWlsIHN0YXRpbmcgdGhhdAotICB0aGV5IG5vIGxvbmdlciB1c2UgdGhlaXIgYWNjZXNzLiAgIDcgQXByIDIwMDUgUkRICi0KLQotUGVybWlzc2lvbnMgRHJvcHBlZCBhZnRlciBMb3NzIG9mIENvbnRhY3QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gU2V2ZXJhbCB1bnN1Y2Nlc3NmdWwgZWZmb3J0cyB3ZXJlIG1hZGUgdG8gY29udGFjdCBDaGFybGVzIEcgV2FsZG1hbi4KLSAgUmVtb3ZlZCBvbiA4IEFwciAyMDA1IGJ5IFJESC4KLQotCi1Jbml0aWFscyBvZiBQcm9qZWN0IEFkbWlucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVEdQOiAgVGltIFBldGVycwotR0ZCOiAgR2VvcmcgQnJhbmRsCi1CQUM6ICBCcmV0dCBDYW5ub24KLU5DTjogIE5lYWwgTm9yd2l0egotREpHOiAgRGF2aWQgR29vZGdlcgotTXZMOiAgTWFydGluIHYuIExvZXdpcwotR3ZSOiAgR3VpZG8gdmFuIFJvc3N1bQotUkRIOiAgUmF5bW9uZCBIZXR0aW5nZXIKZGlmZiAtLWdpdCBhL01pc2MvZ2RiaW5pdCBiL01pc2MvZ2RiaW5pdAppbmRleCAyYzg5YTdhLi45NDg0YjUxIDEwMDY0NAotLS0gYS9NaXNjL2dkYmluaXQKKysrIGIvTWlzYy9nZGJpbml0CkBAIC0xMiw4ICsxMiw3IEBACiAjCiAjIE5PVEU6IElmIHlvdSBoYXZlIGdkYiA3IG9yIGxhdGVyLCBpdCBzdXBwb3J0cyBkZWJ1Z2dpbmcgb2YgUHl0aG9uIGRpcmVjdGx5CiAjIHdpdGggZW1iZWRkZWQgbWFjcm9zIHRoYXQgeW91IG1heSBmaW5kIHN1cGVyaW9yIHRvIHdoYXQgaXMgaW4gaGVyZS4KLSMgU2VlIGh0dHBzOi8vZmVkb3JhcHJvamVjdC5vcmcvd2lraS9GZWF0dXJlcy9FYXNpZXJQeXRob25EZWJ1Z2dpbmcKLSMgYW5kIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MDMyIGZvciBtb3JlIGdkYiA3IHB5dGhvbiBpbmZvcm1hdGlvbi4KKyMgU2VlIFRvb2xzL2dkYi9saWJweXRob24ucHkgYW5kIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4MDMyLgogCiAjIFByaW50cyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gc3RkZXJyLCBhbG9uZyB3aXRoIHRoZQogIyBudW1iZXIgb2YgcmVmZXJlbmNlIGNvdW50cyBpdCBjdXJyZW50IGhhcyBhbmQgdGhlIGhleCBhZGRyZXNzIHRoZQpAQCAtMTE5LDEyICsxMTgsMTggQEAKICMgaW50ZXJwcmV0ZXIsIGJ1dCB0aGUgdGVzdCBjYW4gYmUgZXh0ZW5kZWQgYnkgYW4gaW50ZXJlc3RlZCBwYXJ0eSkuICBJZgogIyBQeV9NYWluIDw9ICRwYyA8PSBQeV9HZXRBcmdjQXJ2IGlzIHRydWUsICRwYyBpcyBpbiBQeV9NYWluKCksIHNvIHRoZSB3aGlsZQogIyB0ZXN0cyBzdWNjZWVkcyBhcyBsb25nIGFzIGl0J3Mgbm90IHRydWUuICBJbiBhIHNpbWlsYXIgZmFzaGlvbiB0aGUgaWYKLSMgc3RhdGVtZW50IHRlc3RzIHRvIHNlZSBpZiB3ZSBhcmUgaW4gUHlFdmFsX0V2YWxGcmFtZSgpLgorIyBzdGF0ZW1lbnQgdGVzdHMgdG8gc2VlIGlmIHdlIGFyZSBpbiBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKworIyBOb3RlOiBUaGUgbmFtZSBvZiB0aGUgbWFpbiBpbnRlcnByZXRlciBmdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIHdoaWNoCisjIGZvbGxvdyBpdCBoYXMgY2hhbmdlZCBvdmVyIHRpbWUuICBUaGlzIHZlcnNpb24gb2YgcHlzdGFjayB3b3JrcyB3aXRoIHRoaXMKKyMgdmVyc2lvbiBvZiBQeXRob24uICBJZiB5b3UgdHJ5IHVzaW5nIGl0IHdpdGggb2xkZXIgb3IgbmV3ZXIgdmVyc2lvbnMgb2YKKyMgdGhlIGludGVycHJldGVyIHlvdSBtYXkgd2lsbCBoYXZlIHRvIGNoYW5nZSB0aGUgZnVuY3Rpb25zIHlvdSBjb21wYXJlIHdpdGgKKyMgJHBjLgogCiAjIHByaW50IHRoZSBlbnRpcmUgUHl0aG9uIGNhbGwgc3RhY2sKIGRlZmluZSBweXN0YWNrCiAgICAgd2hpbGUgJHBjIDwgUHlfTWFpbiB8fCAkcGMgPiBQeV9HZXRBcmdjQXJndgotICAgICAgICBpZiAkcGMgPiBQeUV2YWxfRXZhbEZyYW1lICYmICRwYyA8IFB5RXZhbF9FdmFsQ29kZUV4CisgICAgICAgIGlmICRwYyA+IFB5RXZhbF9FdmFsRnJhbWVFeCAmJiAkcGMgPCBQeUV2YWxfRXZhbENvZGVFeAogCSAgICBweWZyYW1lCiAgICAgICAgIGVuZAogICAgICAgICB1cC1zaWxlbnRseSAxCkBAIC0xMzUsNyArMTQwLDcgQEAKICMgcHJpbnQgdGhlIGVudGlyZSBQeXRob24gY2FsbCBzdGFjayAtIHZlcmJvc2UgbW9kZQogZGVmaW5lIHB5c3RhY2t2CiAgICAgd2hpbGUgJHBjIDwgUHlfTWFpbiB8fCAkcGMgPiBQeV9HZXRBcmdjQXJndgotICAgICAgICBpZiAkcGMgPiBQeUV2YWxfRXZhbEZyYW1lICYmICRwYyA8IFB5RXZhbF9FdmFsQ29kZUV4CisgICAgICAgIGlmICRwYyA+IFB5RXZhbF9FdmFsRnJhbWVFeCAmJiAkcGMgPCBQeUV2YWxfRXZhbENvZGVFeAogCSAgICBweWZyYW1ldgogICAgICAgICBlbmQKICAgICAgICAgdXAtc2lsZW50bHkgMQpkaWZmIC0tZ2l0IGEvTWlzYy9tYWludGFpbmVycy5yc3QgYi9NaXNjL21haW50YWluZXJzLnJzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5MWU0Yi4uMDAwMDAwMAotLS0gYS9NaXNjL21haW50YWluZXJzLnJzdAorKysgL2Rldi9udWxsCkBAIC0xLDMxNCArMCwwIEBACi1NYWludGFpbmVycyBJbmRleAotPT09PT09PT09PT09PT09PT0KLQotLi4gd2FybmluZzo6Ci0KLSAgIFRoaXMgZG9jdW1lbnQgaXMgb3V0IG9mIGRhdGUgYW5kIHJlcGxhY2VkIGJ5IGFub3RoZXIgdmVyc2lvbiBpbiB0aGUKLSAgIGRldmVsb3BlcidzIGd1aWRlIGF0IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvZXhwZXJ0cwotCi1UaGlzIGRvY3VtZW50IGhhcyB0YWJsZXMgdGhhdCBsaXN0IFB5dGhvbiBNb2R1bGVzLCBUb29scywgUGxhdGZvcm1zIGFuZAotSW50ZXJlc3QgQXJlYXMgYW5kIG5hbWVzIGZvciBlYWNoIGl0ZW0gdGhhdCBpbmRpY2F0ZSBhIG1haW50YWluZXIgb3IgYW4KLWV4cGVydCBpbiB0aGUgZmllbGQuICBUaGlzIGxpc3QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBieSBpc3N1ZSBzdWJtaXR0ZXJzLAotaXNzdWUgdHJpYWdlIHBlb3BsZSwgYW5kIG90aGVyIGlzc3VlIHBhcnRpY2lwYW50cyB0byBmaW5kIHBlb3BsZSB0byBhZGQgdG8KLXRoZSBub3N5IGxpc3Qgb3IgdG8gY29udGFjdCBkaXJlY3RseSBieSBlbWFpbCBmb3IgaGVscCBhbmQgZGVjaXNpb25zIG9uCi1mZWF0dXJlIHJlcXVlc3RzIGFuZCBidWcgZml4ZXMuICBQZW9wbGUgb24gdGhpcyBsaXN0IG1heSBiZSBhc2tlZCB0byByZW5kZXIKLWZpbmFsIGp1ZGdlbWVudCBvbiBhIGZlYXR1cmUgb3IgYnVnLiAgSWYgbm8gYWN0aXZlIG1haW50YWluZXIgaXMgbGlzdGVkIGZvcgotYSBnaXZlbiBtb2R1bGUsIHRoZW4gcXVlc3Rpb25hYmxlIGNoYW5nZXMgc2hvdWxkIGdvIHRvIHB5dGhvbi1kZXYsIHdoaWxlCi1hbnkgb3RoZXIgaXNzdWVzIGNhbiBhbmQgc2hvdWxkIGJlIGRlY2lkZWQgYnkgYW55IGNvbW1pdHRlci4KLQotVW5sZXNzIGEgbmFtZSBpcyBmb2xsb3dlZCBieSBhICcqJywgeW91IHNob3VsZCBuZXZlciBhc3NpZ24gYW4gaXNzdWUgdG8KLXRoYXQgcGVyc29uLCBvbmx5IG1ha2UgdGhlbSBub3N5LiAgTmFtZXMgZm9sbG93ZWQgYnkgYSAnKicgbWF5IGJlIGFzc2lnbmVkCi1pc3N1ZXMgaW52b2x2aW5nIHRoZSBtb2R1bGUgb3IgdG9waWMuCi0KLVRoZSBQbGF0Zm9ybSBhbmQgSW50ZXJlc3QgQXJlYSB0YWJsZXMgbGlzdCBicm9hZGVyIGZpZWxkcyBpbiB3aGljaCB2YXJpb3VzCi1wZW9wbGUgaGF2ZSBleHBlcnRpc2UuICBUaGVzZSBwZW9wbGUgY2FuIGFsc28gYmUgY29udGFjdGVkIGZvciBoZWxwLAotb3BpbmlvbnMsIGFuZCBkZWNpc2lvbnMgd2hlbiBpc3N1ZXMgaW52b2x2ZSB0aGVpciBhcmVhcy4KLQotSWYgYSBsaXN0ZWQgbWFpbnRhaW5lciBkb2VzIG5vdCByZXNwb25kIHRvIHJlcXVlc3RzIGZvciBjb21tZW50IGZvciBhbgotZXh0ZW5kZWQgcGVyaW9kICh0aHJlZSB3ZWVrcyBvciBtb3JlKSwgdGhleSBzaG91bGQgYmUgbWFya2VkIGFzIGluYWN0aXZlCi1pbiB0aGlzIGxpc3QgYnkgcGxhY2luZyB0aGUgd29yZCAnaW5hY3RpdmUnIGluIHBhcmVudGhlc2lzIGJlaGluZCB0aGVpcgotdHJhY2tlciBpZC4gIFRoZXkgYXJlIG9mIGNvdXJzZSBmcmVlIHRvIHJlbW92ZSB0aGF0IGluYWN0aXZlIG1hcmsgYXQKLWFueSB0aW1lLgotCi1Db21taXR0ZXJzIHNob3VsZCB1cGRhdGUgdGhlc2UgdGFibGVzIGFzIHRoZWlyIGFyZWFzIG9mIGV4cGVydGlzZSB3aWRlbi4KLU5ldyB0b3BpY3MgbWF5IGJlIGFkZGVkIHRvIHRoZSBJbnRlcmVzdCBBcmVhIHRhYmxlIGF0IHdpbGwuCi0KLVRoZSBleGlzdGVuY2Ugb2YgdGhpcyBsaXN0IGlzIG5vdCBtZWFudCB0byBpbmRpY2F0ZSB0aGF0IHRoZXNlIHBlb3BsZQotKm11c3QqIGJlIGNvbnRhY3RlZCBmb3IgZGVjaXNpb25zOyBpdCBpcywgcmF0aGVyLCBhIHJlc291cmNlIHRvIGJlIHVzZWQKLWJ5IG5vbi1jb21taXR0ZXJzIHRvIGZpbmQgcmVzcG9uc2libGUgcGFydGllcywgYW5kIGJ5IGNvbW1pdHRlcnMgd2hvIGRvCi1ub3QgZmVlbCBxdWFsaWZpZWQgdG8gbWFrZSBhIGRlY2lzaW9uIGluIGEgcGFydGljdWxhciBjb250ZXh0LgotCi1TZWUgYWxzbyBgUEVQIDI5MWBfIGFuZCBgUEVQIDM2MGBfIGZvciBpbmZvcm1hdGlvbiBhYm91dCBjZXJ0YWluIG1vZHVsZXMKLXdpdGggc3BlY2lhbCBydWxlcy4KLQotLi4gX2BQRVAgMjkxYDogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMjkxLwotLi4gX2BQRVAgMzYwYDogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzYwLwotCi0KLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KLU1vZHVsZSAgICAgICAgICAgICAgTWFpbnRhaW5lcnMKLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KLV9fZnV0dXJlX18KLV9fbWFpbl9fICAgICAgICAgICAgZ3ZhbnJvc3N1bQotX2R1bW15X3RocmVhZCAgICAgICBicmV0dC5jYW5ub24KLV90aHJlYWQgICAgICAgICAgICAgcGl0cm91Ci1hYmMKLWFpZmMgICAgICAgICAgICAgICAgci5kYXZpZC5tdXJyYXkKLWFyZ3BhcnNlICAgICAgICAgICAgYmV0aGFyZAotYXJyYXkKLWFzdAotYXN5bmNoYXQgICAgICAgICAgICBqb3NpYWhjYXJsc29uLCBnaWFtcGFvbG8ucm9kb2xhLCBzdHV0emJhY2gKLWFzeW5jb3JlICAgICAgICAgICAgam9zaWFoY2FybHNvbiwgZ2lhbXBhb2xvLnJvZG9sYSwgc3R1dHpiYWNoCi1hdGV4aXQKLWF1ZGlvb3AKLWJhc2U2NAotYmRiCi1iaW5hc2NpaQotYmluaGV4Ci1iaXNlY3QgICAgICAgICAgICAgIHJoZXR0aW5nZXIKLWJ1aWx0aW5zCi1iejIKLWNhbGVuZGFyICAgICAgICAgICAgcmhldHRpbmdlcgotY2dpCi1jZ2l0YgotY2h1bmsKLWNtYXRoICAgICAgICAgICAgICAgbWFyay5kaWNraW5zb24KLWNtZAotY29kZQotY29kZWNzICAgICAgICAgICAgICBsZW1idXJnLCBkb2Vyd2FsdGVyCi1jb2Rlb3AKLWNvbGxlY3Rpb25zICAgICAgICAgcmhldHRpbmdlcgotY29sbGVjdGlvbnMuX2FiY29sbCByaGV0dGluZ2VyLCBzdHV0emJhY2gKLWNvbG9yc3lzCi1jb21waWxlYWxsCi1jb25maWdwYXJzZXIgICAgICAgIGx1a2Fzei5sYW5nYQotY29udGV4dGxpYiAgICAgICAgICBuY29naGxhbgotY29weSAgICAgICAgICAgICAgICBhbGV4YW5kcmUudmFzc2Fsb3R0aQotY29weXJlZyAgICAgICAgICAgICBhbGV4YW5kcmUudmFzc2Fsb3R0aQotY1Byb2ZpbGUKLWNyeXB0ICAgICAgICAgICAgICAgamFmbyoKLWNzdiAgICAgICAgICAgICAgICAgc2tpcC5tb250YW5hcm8KLWN0eXBlcyAgICAgICAgICAgICAgdGhlbGxlcgotY3Vyc2VzCi1kYXRldGltZSAgICAgICAgICAgIGJlbG9wb2xza3kKLWRibQotZGVjaW1hbCAgICAgICAgICAgICBmYWN1bmRvYmF0aXN0YSwgcmhldHRpbmdlciwgbWFyay5kaWNraW5zb24KLWRpZmZsaWIgICAgICAgICAgICAgdGltX29uZSAoaW5hY3RpdmUpCi1kaXMKLWRpc3R1dGlscyAgICAgICAgICAgdGFyZWsqLCBlcmljLmFyYXVqbyoKLWRvY3Rlc3QgICAgICAgICAgICAgdGltX29uZSAoaW5hY3RpdmUpCi1kdW1teV90aHJlYWRpbmcgICAgIGJyZXR0LmNhbm5vbgotZW1haWwgICAgICAgICAgICAgICBiYXJyeSwgci5kYXZpZC5tdXJyYXkqCi1lbmNvZGluZ3MgICAgICAgICAgIGxlbWJ1cmcsIGxvZXdpcwotZXJybm8KLWV4Y2VwdGlvbnMKLWZjbnRsCi1maWxlY21wCi1maWxlaW5wdXQKLWZubWF0Y2gKLWZvcm1hdHRlcgotZnBlY3RsCi1mcmFjdGlvbnMgICAgICAgICAgIG1hcmsuZGlja2luc29uLCByaGV0dGluZ2VyCi1mdHBsaWIgICAgICAgICAgICAgIGdpYW1wYW9sby5yb2RvbGEKLWZ1bmN0b29scyAgICAgICAgICAgbmNvZ2hsYW4sIHJoZXR0aW5nZXIKLWdjICAgICAgICAgICAgICAgICAgcGl0cm91Ci1nZXRvcHQKLWdldHBhc3MKLWdldHRleHQgICAgICAgICAgICAgbG9ld2lzCi1nbG9iCi1ncnAKLWd6aXAKLWhhc2hsaWIKLWhlYXBxICAgICAgICAgICAgICAgcmhldHRpbmdlciwgc3R1dHpiYWNoCi1obWFjCi1odG1sCi1odHRwCi1pZGxlbGliICAgICAgICAgICAgIGtiawotaW1hcGxpYgotaW1naGRyCi1pbXAKLWltcG9ydGxpYiAgICAgICAgICAgYnJldHQuY2Fubm9uCi1pbnNwZWN0Ci1pbyAgICAgICAgICAgICAgICAgIHBpdHJvdSwgYmVuamFtaW4ucGV0ZXJzb24sIHN0dXR6YmFjaAotaXRlcnRvb2xzICAgICAgICAgICByaGV0dGluZ2VyCi1qc29uICAgICAgICAgICAgICAgIGJvYi5pcHBvbGl0byAoaW5hY3RpdmUpLCByaGV0dGluZ2VyCi1rZXl3b3JkCi1saWIydG8zICAgICAgICAgICAgIGJlbmphbWluLnBldGVyc29uCi1saW5lY2FjaGUKLWxvY2FsZSAgICAgICAgICAgICAgbG9ld2lzLCBsZW1idXJnCi1sb2dnaW5nICAgICAgICAgICAgIHZpbmF5LnNhamlwCi1tYWNwYXRoCi1tYWlsYm94Ci1tYWlsY2FwCi1tYXJzaGFsCi1tYXRoICAgICAgICAgICAgICAgIG1hcmsuZGlja2luc29uLCByaGV0dGluZ2VyLCBzdHV0emJhY2gKLW1pbWV0eXBlcwotbW1hcAotbW9kdWxlZmluZGVyICAgICAgICB0aGVsbGVyLCBqdnIKLW1zaWxpYiAgICAgICAgICAgICAgbG9ld2lzCi1tc3ZjcnQKLW11bHRpcHJvY2Vzc2luZyAgICAgam5vbGxlcgotbmV0cmMKLW5pcwotbm50cGxpYiAgICAgICAgICAgICBwaXRyb3UKLW51bWJlcnMKLW9wZXJhdG9yCi1vcHRwYXJzZSAgICAgICAgICAgIGFyb25hY2hlcgotb3MgICAgICAgICAgICAgICAgICBsb2V3aXMKLW9zc2F1ZGlvZGV2Ci1wYXJzZXIKLXBkYiAgICAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgotcGlja2xlICAgICAgICAgICAgICBhbGV4YW5kcmUudmFzc2Fsb3R0aSwgcGl0cm91Ci1waWNrbGV0b29scyAgICAgICAgIGFsZXhhbmRyZS52YXNzYWxvdHRpCi1waXBlcwotcGtndXRpbAotcGxhdGZvcm0gICAgICAgICAgICBsZW1idXJnCi1wbGlzdGxpYgotcG9wbGliCi1wb3NpeAotcHByaW50ICAgICAgICAgICAgICBmZHJha2UKLXByb2ZpbGUgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCi1wc3RhdHMgICAgICAgICAgICAgIGdlb3JnLmJyYW5kbAotcHR5Ci1wd2QKLXB5X2NvbXBpbGUKLXB5YmVuY2ggICAgICAgICAgICAgbGVtYnVyZywgcGl0cm91Ci1weWNsYnIKLXB5ZG9jCi1xdWV1ZSAgICAgICAgICAgICAgIHJoZXR0aW5nZXIKLXF1b3ByaQotcmFuZG9tICAgICAgICAgICAgICByaGV0dGluZ2VyCi1yZSAgICAgICAgICAgICAgICAgIGVmZmJvdCAoaW5hY3RpdmUpLCBwaXRyb3UsIGV6aW8ubWVsb3R0aQotcmVhZGxpbmUKLXJlcHJsaWIKLXJlc291cmNlCi1ybGNvbXBsZXRlcgotcnVucHkgICAgICAgICAgICAgICBuY29naGxhbgotc2NoZWQKLXNlbGVjdAotc2hlbHZlCi1zaGxleAotc2h1dGlsICAgICAgICAgICAgICB0YXJlawotc2lnbmFsCi1zaXRlCi1zbXRwZAotc210cGxpYgotc25kaGRyCi1zb2NrZXQKLXNvY2tldHNlcnZlcgotc3B3ZAotc3FsaXRlMyAgICAgICAgICAgICBnaGFlcmluZwotc3NsICAgICAgICAgICAgICAgICBqYW5zc2VuLCBwaXRyb3UsIGdpYW1wYW9sby5yb2RvbGEKLXN0YXQKLXN0cmluZyAgICAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgotc3RyaW5ncHJlcAotc3RydWN0ICAgICAgICAgICAgICBtYXJrLmRpY2tpbnNvbgotc3VicHJvY2VzcyAgICAgICAgICBhc3RyYW5kIChpbmFjdGl2ZSkKLXN1bmF1Ci1zeW1ib2wKLXN5bXRhYmxlICAgICAgICAgICAgYmVuamFtaW4ucGV0ZXJzb24KLXN5cwotc3lzY29uZmlnICAgICAgICAgICB0YXJlawotc3lzbG9nICAgICAgICAgICAgICBqYWZvKgotdGFibmFubnkgICAgICAgICAgICB0aW1fb25lIChpbmFjdGl2ZSkKLXRhcmZpbGUgICAgICAgICAgICAgbGFycy5ndXN0YWViZWwKLXRlbG5ldGxpYgotdGVtcGZpbGUgICAgICAgICAgICBnZW9yZy5icmFuZGwKLXRlcm1pb3MKLXRlc3QKLXRleHR3cmFwICAgICAgICAgICAgZ2VvcmcuYnJhbmRsCi10aHJlYWRpbmcgICAgICAgICAgIHBpdHJvdQotdGltZSAgICAgICAgICAgICAgICBiZWxvcG9sc2t5Ci10aW1laXQgICAgICAgICAgICAgIGdlb3JnLmJyYW5kbAotdGtpbnRlciAgICAgICAgICAgICBncG9sbwotdG9rZW4gICAgICAgICAgICAgICBnZW9yZy5icmFuZGwKLXRva2VuaXplCi10cmFjZSAgICAgICAgICAgICAgIGJlbG9wb2xza3kKLXRyYWNlYmFjayAgICAgICAgICAgZ2VvcmcuYnJhbmRsKgotdHR5Ci10dXJ0bGUgICAgICAgICAgICAgIGdyZWdvcmxpbmdsCi10eXBlcwotdW5pY29kZWRhdGEgICAgICAgICBsb2V3aXMsIGxlbWJ1cmcsIGV6aW8ubWVsb3R0aQotdW5pdHRlc3QgICAgICAgICAgICBtaWNoYWVsLmZvb3JkLCBlemlvLm1lbG90dGkKLXVybGxpYiAgICAgICAgICAgICAgb3JzZW50aGlsCi11dQotdXVpZAotd2FybmluZ3MgICAgICAgICAgICBicmV0dC5jYW5ub24KLXdhdmUKLXdlYWtyZWYgICAgICAgICAgICAgZmRyYWtlLCBwaXRyb3UKLXdlYmJyb3dzZXIgICAgICAgICAgZ2VvcmcuYnJhbmRsCi13aW5yZWcgICAgICAgICAgICAgIGJyaWFuLmN1cnRpbiosIHN0dXR6YmFjaAotd2luc291bmQgICAgICAgICAgICBlZmZib3QgKGluYWN0aXZlKQotd3NnaXJlZiAgICAgICAgICAgICBwamUKLXhkcmxpYgoteG1sLmRvbQoteG1sLmRvbS5taW5pZG9tCi14bWwuZG9tLnB1bGxkb20KLXhtbC5ldHJlZSAgICAgICAgICAgZWZmYm90IChpbmFjdGl2ZSkKLXhtbC5wYXJzZXJzLmV4cGF0Ci14bWwuc2F4Ci14bWwuc2F4LmhhbmRsZXIKLXhtbC5zYXguc2F4dXRpbHMKLXhtbC5zYXgueG1scmVhZGVyCi14bWxycGMgICAgICAgICAgICAgIGxvZXdpcwotemlwZmlsZSAgICAgICAgICAgICBhbGFubWNpbnR5cmUKLXppcGltcG9ydAotemxpYgotPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQotCi0KLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KLVRvb2wgICAgICAgICAgICAgICAgTWFpbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KLXB5YmVuY2ggICAgICAgICAgICAgbGVtYnVyZwotPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PQotCi0KLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KLVBsYXRmb3JtICAgICAgICAgICAgTWFpbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0KLUFJWAotQ3lnd2luICAgICAgICAgICAgICBqbHQ2Mywgc3R1dHpiYWNoCi1GcmVlQlNECi1IUC1VWAotTGludXgKLU1hYyAgICAgICAgICAgICAgICAgcm9uYWxkb3Vzc29yZW4sIG5lZC5kZWlseQotTmV0QlNEMQotT1MyL0VNWCAgICAgICAgICAgICBhaW1hY2ludHlyZQotU29sYXJpcwotV2luZG93cyAgICAgICAgICAgICB0aW0uZ29sZGVuLCBicmlhbi5jdXJ0aW4KLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KLQotCi09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09Ci1JbnRlcmVzdCBBcmVhICAgICAgIE1haW50YWluZXJzCi0tLS0tLS0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCi1hbGdvcml0aG1zCi1hc3QvY29tcGlsZXIgICAgICAgIG5jb2dobGFuLCBiZW5qYW1pbi5wZXRlcnNvbiwgYnJldHQuY2Fubm9uLCBnZW9yZy5icmFuZGwKLWF1dG9jb25mL21ha2VmaWxlcwotYnNkCi1idWcgdHJhY2tlciAgICAgICAgIGV6aW8ubWVsb3R0aQotYnVpbGRib3RzCi1ieXRlY29kZSAgICAgICAgICAgIHBpdHJvdQotZGF0YSBmb3JtYXRzICAgICAgICBtYXJrLmRpY2tpbnNvbiwgZ2VvcmcuYnJhbmRsCi1kYXRhYmFzZSAgICAgICAgICAgIGxlbWJ1cmcKLWRvY3VtZW50YXRpb24gICAgICAgZ2VvcmcuYnJhbmRsLCBlemlvLm1lbG90dGkKLUdVSQotaTE4biAgICAgICAgICAgICAgICBsZW1idXJnCi1pbXBvcnQgbWFjaGluZXJ5ICAgIGJyZXR0LmNhbm5vbiwgbmNvZ2hsYW4KLWlvICAgICAgICAgICAgICAgICAgcGl0cm91LCBiZW5qYW1pbi5wZXRlcnNvbiwgc3R1dHpiYWNoCi1sb2NhbGUgICAgICAgICAgICAgIGxlbWJ1cmcsIGxvZXdpcwotbWF0aGVtYXRpY3MgICAgICAgICBtYXJrLmRpY2tpbnNvbiwgZXJpYy5zbWl0aCwgbGVtYnVyZywgc3R1dHpiYWNoCi1tZW1vcnkgbWFuYWdlbWVudCAgIHRpbV9vbmUsIGxlbWJ1cmcKLW5ldHdvcmtpbmcgICAgICAgICAgZ2lhbXBhb2xvLnJvZG9sYQotcGFja2FnaW5nICAgICAgICAgICB0YXJlaywgbGVtYnVyZwotcHkzIHRyYW5zaXRpb24gICAgICBiZW5qYW1pbi5wZXRlcnNvbgotcmVsZWFzZSBtYW5hZ2VtZW50ICB0YXJlaywgbGVtYnVyZywgYmVuamFtaW4ucGV0ZXJzb24sIGJhcnJ5LCBsb2V3aXMsCi0gICAgICAgICAgICAgICAgICAgIGd2YW5yb3NzdW0sIGFudGhvbnliYXh0ZXIKLXN0ci5mb3JtYXQgICAgICAgICAgZXJpYy5zbWl0aAotdGVzdGluZyAgICAgICAgICAgICBtaWNoYWVsLmZvb3JkLCBwaXRyb3UsIGdpYW1wYW9sby5yb2RvbGEsIGV6aW8ubWVsb3R0aQotdGhyZWFkcyAgICAgICAgICAgICBwaXRyb3UKLXRpbWUgYW5kIGRhdGVzICAgICAgbGVtYnVyZywgYmVsb3BvbHNreQotdW5pY29kZSAgICAgICAgICAgICBsZW1idXJnLCBlemlvLm1lbG90dGksIGhheXBvCi12ZXJzaW9uIGNvbnRyb2wKLT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01pc2MvcHltZW1jb21wYXQuaCBiL01pc2MvcHltZW1jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc1N2UzYS4uMDAwMDAwMAotLS0gYS9NaXNjL3B5bWVtY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKiBUaGUgaWRlYSBvZiB0aGlzIGZpbGUgaXMgdGhhdCB5b3UgYnVuZGxlIGl0IHdpdGggeW91ciBleHRlbnNpb24sCi0gICAjaW5jbHVkZSBpdCwgcHJvZ3JhbSB0byBQeXRob24gMi4zJ3MgbWVtb3J5IEFQSSBhbmQgaGF2ZSB5b3VyCi0gICBleHRlbnNpb24gYnVpbGQgd2l0aCBhbnkgdmVyc2lvbiBvZiBQeXRob24gZnJvbSAxLjUuMiB0aHJvdWdoIHRvCi0gICAyLjMgKGFuZCBob3BlZnVsbHkgYmV5b25kKS4gKi8KLQotI2lmbmRlZiBQeV9QWU1FTUNPTVBBVF9ICi0jZGVmaW5lIFB5X1BZTUVNQ09NUEFUX0gKLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0vKiBUaGVyZSBhcmUgdGhyZWUgImZhbWlsaWVzIiBvZiBtZW1vcnkgQVBJOiB0aGUgInJhdyBtZW1vcnkiLCAib2JqZWN0Ci0gICBtZW1vcnkiIGFuZCAib2JqZWN0IiBmYW1pbGllcy4gIChUaGlzIGlzIGlnbm9yaW5nIHRoZSBtYXR0ZXIgb2YgdGhlCi0gICBjeWNsZSBjb2xsZWN0b3IsIGFib3V0IHdoaWNoIG1vcmUgaXMgc2FpZCBiZWxvdykuCi0KLSAgIFJhdyBNZW1vcnk6Ci0KLSAgICAgICBQeU1lbV9NYWxsb2MsIFB5TWVtX1JlYWxsb2MsIFB5TWVtX0ZyZWUKLQotICAgT2JqZWN0IE1lbW9yeToKLQotICAgICAgIFB5T2JqZWN0X01hbGxvYywgUHlPYmplY3RfUmVhbGxvYywgUHlPYmplY3RfRnJlZQotCi0gICBPYmplY3Q6Ci0KLSAgICAgICBQeU9iamVjdF9OZXcsIFB5T2JqZWN0X05ld1ZhciwgUHlPYmplY3RfRGVsCi0KLSAgIFRoZSByYXcgbWVtb3J5IGFuZCBvYmplY3QgbWVtb3J5IGFsbG9jYXRvcnMgYm90aCBtaW1pYyB0aGUKLSAgIG1hbGxvYy9yZWFsbG9jL2ZyZWUgaW50ZXJmYWNlIGZyb20gQU5TSSBDLCBidXQgdGhlIG9iamVjdCBtZW1vcnkKLSAgIGFsbG9jYXRvciBjYW4gKGFuZCwgc2luY2UgMi4zLCBkb2VzIGJ5IGRlZmF1bHQpIHVzZSBhIGRpZmZlcmVudAotICAgYWxsb2NhdGlvbiBzdHJhdGVneSBiaWFzZWQgdG93YXJkcyBsb3RzIG9mICJzbWFsbCIgYWxsb2NhdGlvbnMuCi0KLSAgIFRoZSBvYmplY3QgZmFtaWx5IGlzIHVzZWQgZm9yIGFsbG9jYXRpbmcgUHl0aG9uIG9iamVjdHMsIGFuZCB0aGUKLSAgIGluaXRpYWxpemVycyB0YWtlIGNhcmUgb2Ygc29tZSBiYXNpYyBpbml0aWFsaXphdGlvbiAoc2V0dGluZyB0aGUKLSAgIHJlZmNvdW50IHRvIDEgYW5kIGZpbGxpbmcgb3V0IHRoZSBvYl90eXBlIGZpZWxkKSBhcyB3ZWxsIGFzIGhhdmluZwotICAgYSBzb21ld2hhdCBkaWZmZXJlbnQgaW50ZXJmYWNlLgotCi0gICBEbyBub3QgbWl4IHRoZSBmYW1pbGllcyEgIEUuZy4gZG8gbm90IGFsbG9jYXRlIG1lbW9yeSB3aXRoCi0gICBQeU1lbV9NYWxsb2MgYW5kIGZyZWUgaXQgd2l0aCBQeU9iamVjdF9GcmVlLiAgWW91IG1heSBnZXQgYXdheSB3aXRoCi0gICBpdCBxdWl0ZSBhIGxvdCBvZiB0aGUgdGltZSwgYnV0IHRoZXJlICphcmUqIHNjZW5hcmlvcyB3aGVyZSB0aGlzCi0gICB3aWxsIGJyZWFrLiAgWW91IEhhdmUgQmVlbiBXYXJuZWQuIAotCi0gICBBbHNvLCBpbiBtYW55IHZlcnNpb25zIG9mIFB5dGhvbiB0aGVyZSBhcmUgYW4gaW5zYW5lIGFtb3VudCBvZgotICAgbWVtb3J5IGludGVyZmFjZXMgdG8gY2hvb3NlIGZyb20uICBVc2UgdGhlIG9uZXMgZGVzY3JpYmVkIGFib3ZlLiAqLwotCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAxMDYwMDAwCi0vKiByYXcgbWVtb3J5IGludGVyZmFjZSBhbHJlYWR5IHByZXNlbnQgKi8KLQotLyogdGhlcmUgaXMgbm8gb2JqZWN0IG1lbW9yeSBpbnRlcmZhY2UgaW4gMS41LjIgKi8KLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jCQlQeU1lbV9NYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYwlQeU1lbV9SZWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUJCVB5TWVtX0ZyZWUKLQotLyogdGhlIG9iamVjdCBpbnRlcmZhY2UgaXMgdGhlcmUsIGJ1dCB0aGUgbmFtZXMgaGF2ZSBjaGFuZ2VkICovCi0jZGVmaW5lIFB5T2JqZWN0X05ldwkJUHlPYmplY3RfTkVXCi0jZGVmaW5lIFB5T2JqZWN0X05ld1ZhcgkJUHlPYmplY3RfTkVXX1ZBUgotI2RlZmluZSBQeU9iamVjdF9EZWwJCVB5TWVtX0ZyZWUKLSNlbmRpZgotCi0vKiBJZiB5b3VyIG9iamVjdCBpcyBhIGNvbnRhaW5lciB5b3UgcHJvYmFibHkgd2FudCB0byBzdXBwb3J0IHRoZQotICAgY3ljbGUgY29sbGVjdG9yLCB3aGljaCB3YXMgbmV3IGluIFB5dGhvbiAyLjAuCi0KLSAgIFVuZm9ydHVuYXRlbHksIHRoZSBpbnRlcmZhY2UgdG8gdGhlIGNvbGxlY3RvciB0aGF0IHdhcyBwcmVzZW50IGluCi0gICBQeXRob24gMi4wIGFuZCAyLjEgcHJvdmVkIHRvIGJlIHRyaWNreSB0byB1c2UsIGFuZCBzbyBjaGFuZ2VkIGluCi0gICAyLjIgLS0gaW4gYSB3YXkgdGhhdCBjYW4ndCBlYXNpbHkgYmUgcGFwZXJlZCBvdmVyIHdpdGggbWFjcm9zLgotCi0gICBUaGlzIGZpbGUgY29udGFpbnMgbWFjcm9zIHRoYXQgbGV0IHlvdSBwcm9ncmFtIHRvIHRoZSAyLjIgR0MgQVBJLgotICAgWW91ciBtb2R1bGUgd2lsbCBjb21waWxlIGFnYWluc3QgYW55IFB5dGhvbiBzaW5jZSB2ZXJzaW9uIDEuNS4yLAotICAgYnV0IHRoZSB0eXBlIHdpbGwgb25seSBwYXJ0aWNpcGF0ZSBpbiB0aGUgR0MgaW4gdmVyc2lvbnMgMi4yIGFuZAotICAgdXAuICBTb21lIHdvcmsgaXMgc3RpbGwgbmVjZXNzYXJ5IG9uIHlvdXIgcGFydCB0byBvbmx5IGZpbGwgb3V0IHRoZQotICAgdHBfdHJhdmVyc2UgYW5kIHRwX2NsZWFyIGZpZWxkcyB3aGVuIHRoZXkgZXhpc3QgYW5kIHNldCB0cF9mbGFncwotICAgYXBwcm9wcmlhdGVseS4KLQotICAgSXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydCBib3RoIHRoZSAyLjAgYW5kIDIuMiBHQyBBUElzLCBidXQgaXQncwotICAgbm90IHByZXR0eSBhbmQgdGhpcyBjb21tZW50IGJsb2NrIGlzIHRvbyBuYXJyb3cgdG8gY29udGFpbiBhCi0gICBkZXNjaXB0aW9uIG9mIHdoYXQncyByZXF1aXJlZC4uLiAqLwotCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDIwMEIxCi0jZGVmaW5lIFB5T2JqZWN0X0dDX05ldyAgICAgICAgIFB5T2JqZWN0X05ldwotI2RlZmluZSBQeU9iamVjdF9HQ19OZXdWYXIgICAgICBQeU9iamVjdF9OZXdWYXIKLSNkZWZpbmUgUHlPYmplY3RfR0NfRGVsICAgICAgICAgUHlPYmplY3RfRGVsCi0jZGVmaW5lIFB5T2JqZWN0X0dDX1RyYWNrKG9wKQotI2RlZmluZSBQeU9iamVjdF9HQ19VblRyYWNrKG9wKQotI2VuZGlmCi0KLSNlbmRpZiAvKiAhUHlfUFlNRU1DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLmluIGIvTWlzYy9weXRob24tY29uZmlnLmluCmluZGV4IDQ3ZWE2NjkuLjFkNGE4MWQgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KQEAgLTEsMTIgKzEsMTMgQEAKICMhQEVYRU5BTUVACisjIC0qLSBweXRob24gLSotCiAKLWltcG9ydCBzeXMKLWltcG9ydCBvcwogaW1wb3J0IGdldG9wdAotZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3lzY29uZmlnCiAKIHZhbGlkX29wdHMgPSBbJ3ByZWZpeCcsICdleGVjLXByZWZpeCcsICdpbmNsdWRlcycsICdsaWJzJywgJ2NmbGFncycsCi0gICAgICAgICAgICAgICdsZGZsYWdzJywgJ2hlbHAnXQorICAgICAgICAgICAgICAnbGRmbGFncycsICdleHRlbnNpb24tc3VmZml4JywgJ2hlbHAnLCAnYWJpZmxhZ3MnXQogCiBkZWYgZXhpdF93aXRoX3VzYWdlKGNvZGU9MSk6CiAgICAgcHJpbnQoIlVzYWdlOiB7MH0gW3sxfV0iLmZvcm1hdCgKQEAgLTIxLDMzICsyMiw0MSBAQAogaWYgbm90IG9wdHM6CiAgICAgZXhpdF93aXRoX3VzYWdlKCkKIAotb3B0ID0gb3B0c1swXVswXQotCiBweXZlciA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignVkVSU0lPTicpCiBnZXR2YXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIKIAotaWYgb3B0ID09ICctLWhlbHAnOgotICAgIGV4aXRfd2l0aF91c2FnZSgwKQorb3B0X2ZsYWdzID0gW2ZsYWcgZm9yIChmbGFnLCB2YWwpIGluIG9wdHNdCiAKLWVsaWYgb3B0ID09ICctLXByZWZpeCc6Ci0gICAgcHJpbnQoc3lzY29uZmlnLlBSRUZJWCkKK2lmICctLWhlbHAnIGluIG9wdF9mbGFnczoKKyAgICBleGl0X3dpdGhfdXNhZ2UoY29kZT0wKQogCi1lbGlmIG9wdCA9PSAnLS1leGVjLXByZWZpeCc6Ci0gICAgcHJpbnQoc3lzY29uZmlnLkVYRUNfUFJFRklYKQorZm9yIG9wdCBpbiBvcHRfZmxhZ3M6CisgICAgaWYgb3B0ID09ICctLXByZWZpeCc6CisgICAgICAgIHByaW50KHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigncHJlZml4JykpCiAKLWVsaWYgb3B0IGluICgnLS1pbmNsdWRlcycsICctLWNmbGFncycpOgotICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSwKLSAgICAgICAgICAgICAnLUknICsgc3lzY29uZmlnLmdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9VHJ1ZSldCi0gICAgaWYgb3B0ID09ICctLWNmbGFncyc6Ci0gICAgICAgIGZsYWdzLmV4dGVuZChnZXR2YXIoJ0NGTEFHUycpLnNwbGl0KCkpCi0gICAgcHJpbnQoJyAnLmpvaW4oZmxhZ3MpKQorICAgIGVsaWYgb3B0ID09ICctLWV4ZWMtcHJlZml4JzoKKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdleGVjX3ByZWZpeCcpKQogCi1lbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxkZmxhZ3MnKToKLSAgICBsaWJzID0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKSArIGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKLSAgICBsaWJzLmFwcGVuZCgnLWxweXRob24nK3B5dmVyKQotICAgICMgYWRkIHRoZSBwcmVmaXgvbGliL3B5dGhvblguWS9jb25maWcgZGlyLCBidXQgb25seSBpZiB0aGVyZSBpcyBubwotICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCi0gICAgaWYgb3B0ID09ICctLWxkZmxhZ3MnIGFuZCBub3QgZ2V0dmFyKCdQeV9FTkFCTEVfU0hBUkVEJyk6Ci0gICAgICAgIGxpYnMuaW5zZXJ0KDAsICctTCcgKyBnZXR2YXIoJ0xJQlBMJykpCi0gICAgcHJpbnQoJyAnLmpvaW4obGlicykpCisgICAgZWxpZiBvcHQgaW4gKCctLWluY2x1ZGVzJywgJy0tY2ZsYWdzJyk6CisgICAgICAgIGZsYWdzID0gWyctSScgKyBzeXNjb25maWcuZ2V0X3BhdGgoJ2luY2x1ZGUnKSwKKyAgICAgICAgICAgICAgICAgJy1JJyArIHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnKV0KKyAgICAgICAgaWYgb3B0ID09ICctLWNmbGFncyc6CisgICAgICAgICAgICBmbGFncy5leHRlbmQoZ2V0dmFyKCdDRkxBR1MnKS5zcGxpdCgpKQorICAgICAgICBwcmludCgnICcuam9pbihmbGFncykpCiAKKyAgICBlbGlmIG9wdCBpbiAoJy0tbGlicycsICctLWxkZmxhZ3MnKToKKyAgICAgICAgbGlicyA9IGdldHZhcignTElCUycpLnNwbGl0KCkgKyBnZXR2YXIoJ1NZU0xJQlMnKS5zcGxpdCgpCisgICAgICAgIGxpYnMuYXBwZW5kKCctbHB5dGhvbicgKyBweXZlciArIHN5cy5hYmlmbGFncykKKyAgICAgICAgIyBhZGQgdGhlIHByZWZpeC9saWIvcHl0aG9uWC5ZL2NvbmZpZyBkaXIsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vCisgICAgICAgICMgc2hhcmVkIGxpYnJhcnkgaW4gcHJlZml4L2xpYi8uCisgICAgICAgIGlmIG9wdCA9PSAnLS1sZGZsYWdzJzoKKyAgICAgICAgICAgIGlmIG5vdCBnZXR2YXIoJ1B5X0VOQUJMRV9TSEFSRUQnKToKKyAgICAgICAgICAgICAgICBsaWJzLmluc2VydCgwLCAnLUwnICsgZ2V0dmFyKCdMSUJQTCcpKQorICAgICAgICAgICAgbGlicy5leHRlbmQoZ2V0dmFyKCdMSU5LRk9SU0hBUkVEJykuc3BsaXQoKSkKKyAgICAgICAgcHJpbnQoJyAnLmpvaW4obGlicykpCisKKyAgICBlbGlmIG9wdCA9PSAnLS1leHRlbnNpb24tc3VmZml4JzoKKyAgICAgICAgcHJpbnQoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTTycpKQorCisgICAgZWxpZiBvcHQgPT0gJy0tYWJpZmxhZ3MnOgorICAgICAgICBwcmludChzeXMuYWJpZmxhZ3MpCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi13aW5nLndwciBiL01pc2MvcHl0aG9uLXdpbmczLndwcgpzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBNaXNjL3B5dGhvbi13aW5nLndwcgpyZW5hbWUgdG8gTWlzYy9weXRob24td2luZzMud3ByCmluZGV4IGIxZDkwNWQuLmFiZTc4OTQgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLXdpbmcud3ByCisrKyBiL01pc2MvcHl0aG9uLXdpbmczLndwcgpAQCAtNSw3ICs1LDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogW3Byb2plY3QgYXR0cmlidXRlc10KIHByb2ouZGlyZWN0b3J5LWxpc3QgPSBbeydkaXJsb2MnOiBsb2MoJy4uJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZXMnOiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlcyc6IFt1J0xpYi9fX3B5Y2FjaGVfXyddLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlcic6ICcqJywKICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2hpZGRlbic6IEZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3JlY3Vyc2l2ZSc6IFRydWUsCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi13aW5nNC53cHIgYi9NaXNjL3B5dGhvbi13aW5nNC53cHIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FkZmRiZAotLS0gL2Rldi9udWxsCisrKyBiL01pc2MvcHl0aG9uLXdpbmc0LndwcgpAQCAtMCwwICsxLDE4IEBACisjIXdpbmcKKyMhdmVyc2lvbj00LjAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaW5nIElERSBwcm9qZWN0IGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1twcm9qZWN0IGF0dHJpYnV0ZXNdCitwcm9qLmRpcmVjdG9yeS1saXN0ID0gW3snZGlybG9jJzogbG9jKCcuLicpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2x1ZGVzJzogW3UnLmhnJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvdW5pdHRlc3QvdGVzdC9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdMaWIvX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnRG9jL2J1aWxkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAnZmlsdGVyJzogJyonLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncmVjdXJzaXZlJzogVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd3YXRjaF9mb3JfY2hhbmdlcyc6IFRydWV9XQorcHJvai5maWxlLXR5cGUgPSAnc2hhcmVkJwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ubWFuIGIvTWlzYy9weXRob24ubWFuCmluZGV4IDQxMWE0M2EuLjA5MjFlNGMgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLm1hbgorKysgYi9NaXNjL3B5dGhvbi5tYW4KQEAgLTI2LDYgKzI2LDkgQEAKIC5CIFwtbSAKIC5JIG1vZHVsZS1uYW1lCiBdCitbCisuQiBcLXEKK10KIC5icgogICAgICAgIFsKIC5CIFwtTwpAQCAtMTQ1LDYgKzE0OCwxMCBAQAogLkIgXC1PTwogRGlzY2FyZCBkb2NzdHJpbmdzIGluIGFkZGl0aW9uIHRvIHRoZSBcZkItT1xmUCBvcHRpbWl6YXRpb25zLgogLlRQCisuQiBcLXEKK0RvIG5vdCBwcmludCB0aGUgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzLiBUaGVzZSBtZXNzYWdlcyBhcmUgCithbHNvIHN1cHByZXNzZWQgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUuCisuVFAKIC5CSSAiXC1RICIgYXJndW1lbnQKIERpdmlzaW9uIGNvbnRyb2w7IHNlZSBQRVAgMjM4LiAgVGhlIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mICJvbGQiICh0aGUKIGRlZmF1bHQsIGludC9pbnQgYW5kIGxvbmcvbG9uZyByZXR1cm4gYW4gaW50IG9yIGxvbmcpLCAibmV3IiAobmV3CkBAIC00MDMsNiArNDEwLDkgQEAKIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZyBpdCBpcyBlcXVpdmFsZW50IHRvIHNwZWNpZnlpbmcKIHRoZSBcZkJcLXZcZlAgb3B0aW9uLiBJZiBzZXQgdG8gYW4gaW50ZWdlciwgaXQgaXMgZXF1aXZhbGVudCB0bwogc3BlY2lmeWluZyBcZkJcLXZcZlAgbXVsdGlwbGUgdGltZXMuIAorLklQIFBZVEhPTldBUk5JTkdTCitJZiB0aGlzIGlzIHNldCB0byBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0bworc3BlY2lmeWluZyB0aGUgXGZCXC1XXGZQIG9wdGlvbiBmb3IgZWFjaCBzZXBhcmF0ZSB2YWx1ZS4KIC5TSCBBVVRIT1IKIFRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjogaHR0cDovL3d3dy5weXRob24ub3JnL3BzZgogLlNIIElOVEVSTkVUIFJFU09VUkNFUwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24ucGMuaW4gYi9NaXNjL3B5dGhvbi5wYy5pbgppbmRleCAwODQ4MWE5Li5hZTY5ODY3IDEwMDY0NAotLS0gYS9NaXNjL3B5dGhvbi5wYy5pbgorKysgYi9NaXNjL3B5dGhvbi5wYy5pbgpAQCAtMSwzICsxLDQgQEAKKyMgU2VlOiBtYW4gcGtnLWNvbmZpZwogcHJlZml4PUBwcmVmaXhACiBleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBsaWJkaXI9QGxpYmRpckAKQEAgLTgsNiArOSw1IEBACiBSZXF1aXJlczogCiBWZXJzaW9uOiBAVkVSU0lPTkAKIExpYnMucHJpdmF0ZTogQExJQlNACi1MaWJzOiAtTCR7bGliZGlyfSAtbHB5dGhvbkBWRVJTSU9OQAotQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0vcHl0aG9uQFZFUlNJT05AIAotCitMaWJzOiAtTCR7bGliZGlyfSAtbHB5dGhvbkBWRVJTSU9OQEBBQklGTEFHU0AKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9L3B5dGhvbkBWRVJTSU9OQEBBQklGTEFHU0AKZGlmZiAtLWdpdCBhL01pc2Mvc2V0dWlkLXByb2cuYyBiL01pc2Mvc2V0dWlkLXByb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc4NWQ5OS4uMDAwMDAwMAotLS0gYS9NaXNjL3NldHVpZC1wcm9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzYgKzAsMCBAQAotLyoKLSAgIFRlbXBsYXRlIGZvciBhIHNldHVpZCBwcm9ncmFtIHRoYXQgY2FsbHMgYSBzY3JpcHQuCi0KLSAgIFRoZSBzY3JpcHQgc2hvdWxkIGJlIGluIGFuIHVud3JpdGFibGUgZGlyZWN0b3J5IGFuZCBzaG91bGQgaXRzZWxmCi0gICBiZSB1bndyaXRhYmxlLiAgSW4gZmFjdCBhbGwgcGFyZW50IGRpcmVjdG9yaWVzIHVwIHRvIHRoZSByb290Ci0gICBzaG91bGQgYmUgdW53cml0YWJsZS4gIFRoZSBzY3JpcHQgbXVzdCBub3QgYmUgc2V0dWlkLCB0aGF0J3Mgd2hhdAotICAgdGhpcyBwcm9ncmFtIGlzIGZvci4KLQotICAgVGhpcyBpcyBhIHRlbXBsYXRlIHByb2dyYW0uICBZb3UgbmVlZCB0byBmaWxsIGluIHRoZSBuYW1lIG9mIHRoZQotICAgc2NyaXB0IHRoYXQgbXVzdCBiZSBleGVjdXRlZC4gIFRoaXMgaXMgZG9uZSBieSBjaGFuZ2luZyB0aGUKLSAgIGRlZmluaXRpb24gb2YgRlVMTF9QQVRIIGJlbG93LgotCi0gICBUaGVyZSBhcmUgYWxzbyBzb21lIHJ1bGVzIHRoYXQgc2hvdWxkIGJlIGFkaGVyZWQgdG8gd2hlbiB3cml0aW5nCi0gICB0aGUgc2NyaXB0IGl0c2VsZi4KLQotICAgVGhlIGZpcnN0IGFuZCBtb3N0IGltcG9ydGFudCBydWxlIGlzIHRvIG5ldmVyLCBldmVyIHRydXN0IHRoYXQgdGhlCi0gICB1c2VyIG9mIHRoZSBwcm9ncmFtIHdpbGwgYmVoYXZlIHByb3Blcmx5LiAgUHJvZ3JhbSBkZWZlbnNpdmVseS4KLSAgIENoZWNrIHlvdXIgYXJndW1lbnRzIGZvciByZWFzb25hYmxlbmVzcy4gIElmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8KLSAgIGNyZWF0ZSBmaWxlcywgY2hlY2sgdGhlIG5hbWVzIG9mIHRoZSBmaWxlcy4gIElmIHRoZSBwcm9ncmFtIGRlcGVuZHMKLSAgIG9uIGFyZ3ZbMF0gZm9yIHRoZSBhY3Rpb24gaXQgc2hvdWxkIHBlcmZvcm0sIGNoZWNrIGl0LgotCi0gICBBc3N1bWluZyB0aGUgc2NyaXB0IGlzIGEgQm91cm5lIHNoZWxsIHNjcmlwdCwgdGhlIGZpcnN0IGxpbmUgb2YgdGhlCi0gICBzY3JpcHQgc2hvdWxkIGJlCi0gICAgIyEvYmluL3NoIC0KLSAgIFRoZSAtIGlzIGltcG9ydGFudCwgZG9uJ3Qgb21pdCBpdC4gIElmIHlvdSdyZSB1c2luZyBlc2gsIHRoZSBmaXJzdAotICAgbGluZSBzaG91bGQgYmUKLSAgICAjIS91c3IvbG9jYWwvYmluL2VzaCAtZgotICAgYW5kIGZvciBrc2gsIHRoZSBmaXJzdCBsaW5lIHNob3VsZCBiZQotICAgICMhL3Vzci9sb2NhbC9iaW4va3NoIC1wCi0gICBUaGUgc2NyaXB0IHNob3VsZCB0aGVuIHNldCB0aGUgdmFyaWFibGUgSUZTIHRvIHRoZSBzdHJpbmcKLSAgIGNvbnNpc3Rpbmcgb2YgPHNwYWNlPiwgPHRhYj4sIGFuZCA8bmV3bGluZT4uICBBZnRlciB0aGlzICgqbm90KgotICAgYmVmb3JlISksIHRoZSBQQVRIIHZhcmlhYmxlIHNob3VsZCBiZSBzZXQgdG8gYSByZWFzb25hYmxlIHZhbHVlIGFuZAotICAgZXhwb3J0ZWQuICBEbyBub3QgZXhwZWN0IHRoZSBQQVRIIHRvIGhhdmUgYSByZWFzb25hYmxlIHZhbHVlLCBzbyBkbwotICAgbm90IHRydXN0IHRoZSBvbGQgdmFsdWUgb2YgUEFUSC4gIFlvdSBzaG91bGQgdGhlbiBzZXQgdGhlIHVtYXNrIG9mCi0gICB0aGUgcHJvZ3JhbSBieSBjYWxsaW5nCi0gICAgdW1hc2sgMDc3ICMgb3IgMDIyIGlmIHlvdSB3YW50IHRoZSBmaWxlcyB0byBiZSByZWFkYWJsZQotICAgSWYgeW91IHBsYW4gdG8gY2hhbmdlIGRpcmVjdG9yaWVzLCB5b3Ugc2hvdWxkIGVpdGhlciB1bnNldCBDRFBBVEgKLSAgIG9yIHNldCBpdCB0byBhIGdvb2QgdmFsdWUuICBTZXR0aW5nIENEUEFUSCB0byBqdXN0IGBgLicnIChkb3QpIGlzIGEKLSAgIGdvb2QgaWRlYS4KLSAgIElmLCBmb3Igc29tZSByZWFzb24sIHlvdSB3YW50IHRvIHVzZSBjc2gsIHRoZSBmaXJzdCBsaW5lIHNob3VsZCBiZQotICAgICMhL2Jpbi9jc2ggLWZiCi0gICBZb3Ugc2hvdWxkIHRoZW4gc2V0IHRoZSBwYXRoIHZhcmlhYmxlIHRvIHNvbWV0aGluZyByZWFzb25hYmxlLAotICAgd2l0aG91dCB0cnVzdGluZyB0aGUgaW5oZXJpdGVkIHBhdGguICBIZXJlIHRvbywgeW91IHNob3VsZCBzZXQgdGhlCi0gICB1bWFzayB1c2luZyB0aGUgY29tbWFuZAotICAgIHVtYXNrIDA3NyAjIG9yIDAyMiBpZiB5b3Ugd2FudCB0aGUgZmlsZXMgdG8gYmUgcmVhZGFibGUKLSovCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIENPTkZJR1VSQVRJT04gU0VDVElPTiAqLwotCi0jaWZuZGVmIEZVTExfUEFUSCAgICAgICAvKiBzbyB0aGF0IHRoaXMgY2FuIGJlIHNwZWNpZmllZCBmcm9tIHRoZSBNYWtlZmlsZSAqLwotLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZToKLSNkZWZpbmUgRlVMTF9QQVRIICAgICAgICIvZnVsbC9wYXRoL29mL3NjcmlwdCIKLSogVGhlbiBjb21tZW50IG91dCB0aGUgI2Vycm9yIGxpbmUuICovCi0jZXJyb3IgIllvdSBtdXN0IGRlZmluZSBGVUxMX1BBVEggc29tZXdoZXJlIgotI2VuZGlmCi0jaWZuZGVmIFVNQVNLCi0jZGVmaW5lIFVNQVNLICAgICAgICAgICAwNzcKLSNlbmRpZgotCi0vKiBFTkQgT0YgQ09ORklHVVJBVElPTiBTRUNUSU9OICovCi0KLSNpZiBkZWZpbmVkKF9fU1REQ19fKSAmJiBkZWZpbmVkKF9fc2dpKQotI2RlZmluZSBlbnZpcm9uIF9lbnZpcm9uCi0jZW5kaWYKLQotLyogZG9uJ3QgY2hhbmdlIGRlZl9JRlMgKi8KLWNoYXIgZGVmX0lGU1tdID0gIklGUz0gXHRcbiI7Ci0vKiB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlIGRlZl9QQVRILCBidXQgeW91IHNob3VsZCByZWFsbHkgY2hhbmdlIGl0IGluICovCi0vKiB5b3VyIHNjcmlwdCAqLwotI2lmZGVmIF9fc2dpCi1jaGFyIGRlZl9QQVRIW10gPSAiUEFUSD0vdXNyL2JzZDovdXNyL2JpbjovYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbiI7Ci0jZWxzZQotY2hhciBkZWZfUEFUSFtdID0gIlBBVEg9L3Vzci91Y2I6L3Vzci9iaW46L2JpbjovdXNyL2xvY2FsL2JpbiI7Ci0jZW5kaWYKLS8qIGRvbid0IGNoYW5nZSBkZWZfQ0RQQVRIICovCi1jaGFyIGRlZl9DRFBBVEhbXSA9ICJDRFBBVEg9LiI7Ci0vKiBkb24ndCBjaGFuZ2UgZGVmX0VOViAqLwotY2hhciBkZWZfRU5WW10gPSAiRU5WPToiOwotCi0vKgotICAgVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIExEXwotICAgaW50byB2YXJpYWJsZXMgdGhhdCBzdGFydCB3aXRoIFhEXy4gIFRoaXMgaXMgaW1wb3J0YW50IHNpbmNlIHdlCi0gICBkb24ndCB3YW50IHRoZSBzY3JpcHQgdGhhdCBpcyBleGVjdXRlZCB0byB1c2UgYW55IGZ1bm55IHNoYXJlZAotICAgbGlicmFyaWVzLgotCi0gICBUaGUgb3RoZXIgY2hhbmdlcyB0byB0aGUgZW52aXJvbm1lbnQgYXJlLCBzdHJpY3RseSBzcGVha2luZywgbm90Ci0gICBuZWVkZWQgaGVyZS4gIFRoZXkgY2FuIHNhZmVseSBiZSBkb25lIGluIHRoZSBzY3JpcHQuICBUaGV5IGFyZSBkb25lCi0gICBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgdHJ1c3QgdGhlIHNjcmlwdCB3cml0ZXIgKGp1c3QgbGlrZSB0aGUgc2NyaXB0Ci0gICB3cml0ZXIgc2hvdWxkbid0IHRydXN0IHRoZSB1c2VyIG9mIHRoZSBzY3JpcHQpLgotICAgSWYgSUZTIGlzIHNldCBpbiB0aGUgZW52aXJvbm1lbnQsIHNldCBpdCB0byBzcGFjZSx0YWIsbmV3bGluZS4KLSAgIElmIENEUEFUSCBpcyBzZXQgaW4gdGhlIGVudmlyb25tZW50LCBzZXQgaXQgdG8gYGAuJycuCi0gICBTZXQgUEFUSCB0byBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSovCi12b2lkCi1jbGVhbl9lbnZpcm9uKHZvaWQpCi17Ci0gICAgY2hhciAqKnA7Ci0gICAgZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwotCi0gICAgZm9yIChwID0gZW52aXJvbjsgKnA7IHArKykgewotICAgICAgICBpZiAoc3RybmNtcCgqcCwgIkxEXyIsIDMpID09IDApCi0gICAgICAgICAgICAqKnAgPSAnWCc7Ci0gICAgICAgIGVsc2UgaWYgKHN0cm5jbXAoKnAsICJfUkxEIiwgNCkgPT0gMCkKLSAgICAgICAgICAgICoqcCA9ICdYJzsKLSAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgqcCwgIlBZVEhPTiIsIDYpID09IDApCi0gICAgICAgICAgICAqKnAgPSAnWCc7Ci0gICAgICAgIGVsc2UgaWYgKHN0cm5jbXAoKnAsICJJRlM9IiwgNCkgPT0gMCkKLSAgICAgICAgICAgICpwID0gZGVmX0lGUzsKLSAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgqcCwgIkNEUEFUSD0iLCA3KSA9PSAwKQotICAgICAgICAgICAgKnAgPSBkZWZfQ0RQQVRIOwotICAgICAgICBlbHNlIGlmIChzdHJuY21wKCpwLCAiRU5WPSIsIDQpID09IDApCi0gICAgICAgICAgICAqcCA9IGRlZl9FTlY7Ci0gICAgfQotICAgIHB1dGVudihkZWZfUEFUSCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgc3RydWN0IHN0YXQgc3RhdGI7Ci0gICAgZ2lkX3QgZWdpZCA9IGdldGVnaWQoKTsKLSAgICB1aWRfdCBldWlkID0gZ2V0ZXVpZCgpOwotCi0gICAgLyoKLSAgICAgICBTYW5pdHkgY2hlY2sgIzEuCi0gICAgICAgVGhpcyBjaGVjayBzaG91bGQgYmUgbWFkZSBjb21waWxlLXRpbWUsIGJ1dCB0aGF0J3Mgbm90IHBvc3NpYmxlLgotICAgICAgIElmIHlvdSdyZSBzdXJlIHRoYXQgeW91IHNwZWNpZmllZCBhIGZ1bGwgcGF0aCBuYW1lIGZvciBGVUxMX1BBVEgsCi0gICAgICAgeW91IGNhbiBvbWl0IHRoaXMgY2hlY2suCi0gICAgKi8KLSAgICBpZiAoRlVMTF9QQVRIWzBdICE9ICcvJykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiAlcyBpcyBub3QgYSBmdWxsIHBhdGggbmFtZVxuIiwgYXJndlswXSwKLSAgICAgICAgICAgIEZVTExfUEFUSCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGNhbiBvbmx5IHVzZSB0aGlzIHdyYXBwZXIgaWYgeW91XG4iKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJjb21waWxlIGl0IHdpdGggYW4gYWJzb2x1dGUgcGF0aC5cbiIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIC8qCi0gICAgICAgU2FuaXR5IGNoZWNrICMyLgotICAgICAgIENoZWNrIHRoYXQgdGhlIG93bmVyIG9mIHRoZSBzY3JpcHQgaXMgZXF1YWwgdG8gZWl0aGVyIHRoZQotICAgICAgIGVmZmVjdGl2ZSB1aWQgb3IgdGhlIHN1cGVyIHVzZXIuCi0gICAgKi8KLSAgICBpZiAoc3RhdChGVUxMX1BBVEgsICZzdGF0YikgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigic3RhdCIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBpZiAoc3RhdGIuc3RfdWlkICE9IDAgJiYgc3RhdGIuc3RfdWlkICE9IGV1aWQpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogJXMgaGFzIHRoZSB3cm9uZyBvd25lclxuIiwgYXJndlswXSwKLSAgICAgICAgICAgIEZVTExfUEFUSCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGhlIHNjcmlwdCBzaG91bGQgYmUgb3duZWQgYnkgcm9vdCxcbiIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImFuZCBzaG91bGRuJ3QgYmUgd3JpdGFibGUgYnkgYW55b25lLlxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKHNldHJlZ2lkKGVnaWQsIGVnaWQpIDwgMCkKLSAgICAgICAgcGVycm9yKCJzZXRyZWdpZCIpOwotICAgIGlmIChzZXRyZXVpZChldWlkLCBldWlkKSA8IDApCi0gICAgICAgIHBlcnJvcigic2V0cmV1aWQiKTsKLQotICAgIGNsZWFuX2Vudmlyb24oKTsKLQotICAgIHVtYXNrKFVNQVNLKTsKLQotICAgIHdoaWxlICgqKmFyZ3YgPT0gJy0nKSAgICAgICAvKiBkb24ndCBsZXQgYXJndlswXSBzdGFydCB3aXRoICctJyAqLwotICAgICAgICAoKmFyZ3YpKys7Ci0gICAgZXhlY3YoRlVMTF9QQVRILCBhcmd2KTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZCBub3QgZXhlY3V0ZSB0aGUgc2NyaXB0XG4iLCBhcmd2WzBdKTsKLSAgICBleGl0KDEpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IDlmMTg5ZGUuLmUxYzhmZTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTExMyw2ICsxMTMsOSBAQAogX2NvZGVjcyBfY29kZWNzbW9kdWxlLmMJCSMgYWNjZXNzIHRvIHRoZSBidWlsdGluIGNvZGVjcyBhbmQgY29kZWMgcmVnaXN0cnkKIF93ZWFrcmVmIF93ZWFrcmVmLmMJCSMgd2VhayByZWZlcmVuY2VzCiBfZnVuY3Rvb2xzIF9mdW5jdG9vbHNtb2R1bGUuYyAgICMgVG9vbHMgZm9yIHdvcmtpbmcgd2l0aCBmdW5jdGlvbnMgYW5kIGNhbGxhYmxlIG9iamVjdHMKK29wZXJhdG9yIG9wZXJhdG9yLmMJICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKK19jb2xsZWN0aW9ucyBfY29sbGVjdGlvbnNtb2R1bGUuYyAjIENvbnRhaW5lciB0eXBlcworaXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcgCiAKICMgYWNjZXNzIHRvIElTTyBDIGxvY2FsZSBzdXBwb3J0CiBfbG9jYWxlIF9sb2NhbGVtb2R1bGUuYyAgIyAtbGludGwKQEAgLTE1NywyMCArMTYwLDE3IEBACiAjIE1vZHVsZXMgdGhhdCBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgKG5vbiBVTklYIGRlcGVuZGVudCk6CiAKICNhcnJheSBhcnJheW1vZHVsZS5jCSMgYXJyYXkgb2JqZWN0cwotI2NtYXRoIGNtYXRobW9kdWxlLmMgIyAtbG0gIyBjb21wbGV4IG1hdGggbGlicmFyeSBmdW5jdGlvbnMKLSNtYXRoIG1hdGhtb2R1bGUuYyAjIC1sbSAjIG1hdGggbGlicmFyeSBmdW5jdGlvbnMsIGUuZy4gc2luKCkKKyNjbWF0aCBjbWF0aG1vZHVsZS5jIF9tYXRoLmMgIyAtbG0gIyBjb21wbGV4IG1hdGggbGlicmFyeSBmdW5jdGlvbnMKKyNtYXRoIG1hdGhtb2R1bGUuYyBfbWF0aC5jICMgLWxtICMgbWF0aCBsaWJyYXJ5IGZ1bmN0aW9ucywgZS5nLiBzaW4oKQogI19zdHJ1Y3QgX3N0cnVjdC5jCSMgYmluYXJ5IHN0cnVjdHVyZSBwYWNraW5nL3VucGFja2luZwogI3RpbWUgdGltZW1vZHVsZS5jICMgLWxtICMgdGltZSBvcGVyYXRpb25zIGFuZCB2YXJpYWJsZXMKLSNvcGVyYXRvciBvcGVyYXRvci5jCSMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcwogI193ZWFrcmVmIF93ZWFrcmVmLmMJIyBiYXNpYyB3ZWFrIHJlZmVyZW5jZSBzdXBwb3J0CiAjX3Rlc3RjYXBpIF90ZXN0Y2FwaW1vZHVsZS5jICAgICMgUHl0aG9uIEMgQVBJIHRlc3QgbW9kdWxlCiAjX3JhbmRvbSBfcmFuZG9tbW9kdWxlLmMJIyBSYW5kb20gbnVtYmVyIGdlbmVyYXRvcgotI19jb2xsZWN0aW9ucyBfY29sbGVjdGlvbnNtb2R1bGUuYyAjIENvbnRhaW5lciB0eXBlcwotI2l0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYwkjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nIAogI2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgogI19lbGVtZW50dHJlZSAtSSQoc3JjZGlyKS9Nb2R1bGVzL2V4cGF0IC1ESEFWRV9FWFBBVF9DT05GSUdfSCAtRFVTRV9QWUVYUEFUX0NBUEkgX2VsZW1lbnR0cmVlLmMJIyBlbGVtZW50dHJlZSBhY2NlbGVyYXRvcgogI19waWNrbGUgX3BpY2tsZS5jCSMgcGlja2xlIGFjY2VsZXJhdG9yCi0jZGF0ZXRpbWUgZGF0ZXRpbWVtb2R1bGUuYwkjIGRhdGUvdGltZSB0eXBlCisjX2RhdGV0aW1lIF9kYXRldGltZW1vZHVsZS5jCSMgZGF0ZXRpbWUgYWNjZWxlcmF0b3IKICNfYmlzZWN0IF9iaXNlY3Rtb2R1bGUuYwkjIEJpc2VjdGlvbiBhbGdvcml0aG1zCiAjX2hlYXBxIF9oZWFwcW1vZHVsZS5jCSMgSGVhcCBxdWV1ZSBhbGdvcml0aG0KIApAQCAtMjE3LDYgKzIxNyw3IEBACiAjdGVybWlvcyB0ZXJtaW9zLmMJIyBTdGVlbiBMdW1ob2x0J3MgdGVybWlvcyBtb2R1bGUKICNyZXNvdXJjZSByZXNvdXJjZS5jCSMgSmVyZW15IEh5bHRvbidzIHJsaW1pdCBpbnRlcmZhY2UKIAorI19wb3NpeHN1YnByb2Nlc3MgX3Bvc2l4c3VicHJvY2Vzcy5jICAjIFBPU0lYIHN1YnByb2Nlc3MgbW9kdWxlIGhlbHBlcgogCiAjIE11bHRpbWVkaWEgbW9kdWxlcyAtLSBvZmYgYnkgZGVmYXVsdC4KICMgVGhlc2UgZG9uJ3Qgd29yayBmb3IgNjQtYml0IHBsYXRmb3JtcyEhIQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwppbmRleCBmNjVhNTgzLi43ZmVjZmM2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL19iaXNlY3Rtb2R1bGUuYwpAQCAtODYsOCArODYsNyBAQAogICAgICAgICBpZiAoUHlMaXN0X0luc2VydChsaXN0LCBpbmRleCwgaXRlbSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChsaXN0LCAiaW5zZXJ0IiwgIm5PIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgaXRlbSk7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QobGlzdCwgImluc2VydCIsICJuTyIsIGluZGV4LCBpdGVtKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwpAQCAtMTg3LDggKzE4Niw3IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGxpc3QsICJpbnNlcnQiLCAiaU8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBpdGVtKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChsaXN0LCAiaW5zZXJ0IiwgImlPIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCmluZGV4IGFhYzQ0NzAuLmViNzQwZjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCkBAIC02MzksMjEgKzYzOSw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1jaGFyYnVmZmVyX2VuY29kZShQeU9iamVjdCAqc2VsZiwKLSAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNvbnN0IGNoYXIgKmRhdGE7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInQjfHo6Y2hhcmJ1ZmZlcl9lbmNvZGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YSwgJnNpemUsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBjb2RlY190dXBsZShQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGRhdGEsIHNpemUpLCBzaXplKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfaW50ZXJuYWxfZW5jb2RlKFB5T2JqZWN0ICpzZWxmLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MpCiB7CkBAIC0xMTE2LDcgKzExMDEsNiBAQAogICAgIHsiY2hhcm1hcF9kZWNvZGUiLCAgICAgICAgICBjaGFybWFwX2RlY29kZSwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJjaGFybWFwX2J1aWxkIiwgICAgICAgICAgIGNoYXJtYXBfYnVpbGQsICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InJlYWRidWZmZXJfZW5jb2RlIiwgICAgICAgcmVhZGJ1ZmZlcl9lbmNvZGUsICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgIHsiY2hhcmJ1ZmZlcl9lbmNvZGUiLCAgICAgICBjaGFyYnVmZmVyX2VuY29kZSwgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKEhBVkVfVVNBQkxFX1dDSEFSX1QpCiAgICAgeyJtYmNzX2VuY29kZSIsICAgICAgICAgICAgIG1iY3NfZW5jb2RlLCAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7Im1iY3NfZGVjb2RlIiwgICAgICAgICAgICAgbWJjc19kZWNvZGUsICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggYjVmMmE2OS4uNTU0NWQxZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC00NjIsNiArNDYyLDkxIEBACiBQeURvY19TVFJWQVIocm90YXRlX2RvYywKICJSb3RhdGUgdGhlIGRlcXVlIG4gc3RlcHMgdG8gdGhlIHJpZ2h0IChkZWZhdWx0IG49MSkuICBJZiBuIGlzIG5lZ2F0aXZlLCByb3RhdGVzIGxlZnQuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9yZXZlcnNlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICBibG9jayAqbGVmdGJsb2NrID0gZGVxdWUtPmxlZnRibG9jazsKKyAgICBibG9jayAqcmlnaHRibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXggPSBkZXF1ZS0+cmlnaHRpbmRleDsKKyAgICBQeV9zc2l6ZV90IG4gPSAoZGVxdWUtPmxlbikvMjsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKnRtcDsKKworICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CisgICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgcG9pbnRlcnMgaGF2ZW4ndCBtZXQgaW4gdGhlIG1pZGRsZSAqLworICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2sgfHwgbGVmdGluZGV4IDwgcmlnaHRpbmRleCk7CisKKyAgICAgICAgLyogU3dhcCAqLworICAgICAgICB0bXAgPSBsZWZ0YmxvY2stPmRhdGFbbGVmdGluZGV4XTsKKyAgICAgICAgbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF0gPSByaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXhdOworICAgICAgICByaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXhdID0gdG1wOworCisgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCisgICAgICAgIGxlZnRpbmRleCsrOworICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOworICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFN0ZXAgYmFja3dhcmRzIHdpdGggdGhlIHJpZ2h0IGJsb2NrL2luZGV4IHBhaXIgKi8KKyAgICAgICAgcmlnaHRpbmRleC0tOworICAgICAgICBpZiAocmlnaHRpbmRleCA9PSAtMSkgeworICAgICAgICAgICAgaWYgKHJpZ2h0YmxvY2stPmxlZnRsaW5rID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByaWdodGJsb2NrID0gcmlnaHRibG9jay0+bGVmdGxpbms7CisgICAgICAgICAgICByaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOworICAgICAgICB9CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIocmV2ZXJzZV9kb2MsCisiRC5yZXZlcnNlKCkgLS0gcmV2ZXJzZSAqSU4gUExBQ0UqIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkZXF1ZV9jb3VudChkZXF1ZW9iamVjdCAqZGVxdWUsIFB5T2JqZWN0ICp2KQoreworICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIFB5X3NzaXplX3QgbGVmdGluZGV4ID0gZGVxdWUtPmxlZnRpbmRleDsKKyAgICBQeV9zc2l6ZV90IG4gPSBkZXF1ZS0+bGVuOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGNvdW50ID0gMDsKKyAgICBQeU9iamVjdCAqaXRlbTsKKyAgICBsb25nIHN0YXJ0X3N0YXRlID0gZGVxdWUtPnN0YXRlOworICAgIGludCBjbXA7CisKKyAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgeworICAgICAgICBpdGVtID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2LCBQeV9FUSk7CisgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgZWxzZSBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmIChzdGFydF9zdGF0ZSAhPSBkZXF1ZS0+c3RhdGUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlcXVlIG11dGF0ZWQgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBBZHZhbmNlIGxlZnQgYmxvY2svaW5kZXggcGFpciAqLworICAgICAgICBsZWZ0aW5kZXgrKzsKKyAgICAgICAgaWYgKGxlZnRpbmRleCA9PSBCTE9DS0xFTikgeworICAgICAgICAgICAgaWYgKGxlZnRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpICAvKiBjYW4gb2NjdXIgd2hlbiBpPT1uLTEgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGxlZnRibG9jay0+cmlnaHRsaW5rOworICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGNvdW50KTsKK30KKworUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKKyJELmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUiKTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGRlcXVlX2xlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7CkBAIC04OTEsNiArOTc2LDggQEAKICAgICAgICAgTUVUSF9OT0FSR1MsICAgICAgICAgICAgIGNsZWFyX2RvY30sCiAgICAgeyJfX2NvcHlfXyIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9jb3B5LAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgY29weV9kb2N9LAorICAgIHsiY291bnQiLCAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfY291bnQsCisgICAgICAgIE1FVEhfTywgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfZG9jfSwKICAgICB7ImV4dGVuZCIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX2V4dGVuZCwKICAgICAgICAgTUVUSF9PLCAgICAgICAgICAgICAgICAgIGV4dGVuZF9kb2N9LAogICAgIHsiZXh0ZW5kbGVmdCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGVxdWVfZXh0ZW5kbGVmdCwKQEAgLTkwNSw2ICs5OTIsOCBAQAogICAgICAgICBNRVRIX08sICAgICAgICAgICAgICAgICAgcmVtb3ZlX2RvY30sCiAgICAgeyJfX3JldmVyc2VkX18iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9yZXZpdGVyLAogICAgICAgICBNRVRIX05PQVJHUywgICAgICAgICAgICAgcmV2ZXJzZWRfZG9jfSwKKyAgICB7InJldmVyc2UiLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRlcXVlX3JldmVyc2UsCisgICAgICAgIE1FVEhfTk9BUkdTLCAgICAgICAgICAgICByZXZlcnNlX2RvY30sCiAgICAgeyJyb3RhdGUiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilkZXF1ZV9yb3RhdGUsCiAgICAgICAgIE1FVEhfVkFSQVJHUywgICAgICAgICAgIHJvdGF0ZV9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtOTMwLDI0ICsxMDE5LDI0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgJmRlcXVlX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgKGhhc2hmdW5jKVB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAvKiB0cF9oYXNoICovCisgICAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkLCAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBkZXF1ZV9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWRlcXVlX3RyYXZlcnNlLCAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWRlcXVlX2NsZWFyLCAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgKHJpY2hjbXBmdW5jKWRlcXVlX3JpY2hjb21wYXJlLCAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICBvZmZzZXRvZihkZXF1ZW9iamVjdCwgd2Vha3JlZmxpc3QpLCAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICBvZmZzZXRvZihkZXF1ZW9iamVjdCwgd2Vha3JlZmxpc3QpLCAvKiB0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgKGdldGl0ZXJmdW5jKWRlcXVlX2l0ZXIsICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgZGVxdWVfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICBkZXF1ZV9nZXRzZXQsICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIGRlcXVlX2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCkBAIC0xNDMyLDYgKzE1MjEsOTUgQEAKICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCisvKiBoZWxwZXIgZnVuY3Rpb24gZm9yIENvdW50ZXIgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUHlEb2NfU1RSVkFSKF9jb3VudF9lbGVtZW50c19kb2MsCisiX2NvdW50X2VsZW1lbnRzKG1hcHBpbmcsIGl0ZXJhYmxlKSAtPiBOb25lXG5cCitcblwKK0NvdW50IGVsZW1lbnRzIGluIHRoZSBpdGVyYWJsZSwgdXBkYXRpbmcgdGhlIG1hcHBwaW5nIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfY291bnRfZWxlbWVudHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICppdCwgKml0ZXJhYmxlLCAqbWFwcGluZywgKm9sZHZhbDsKKyAgICBQeU9iamVjdCAqbmV3dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqa2V5ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb25lID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgIl9jb3VudF9lbGVtZW50cyIsIDIsIDIsICZtYXBwaW5nLCAmaXRlcmFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgaWYgKGl0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb25lID0gUHlMb25nX0Zyb21Mb25nKDEpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoaXQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QobWFwcGluZykpIHsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIGtleSA9IFB5SXRlcl9OZXh0KGl0KTsKKyAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3RvcEl0ZXJhdGlvbikpCisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG9sZHZhbCA9IFB5RGljdF9HZXRJdGVtKG1hcHBpbmcsIGtleSk7CisgICAgICAgICAgICBpZiAob2xkdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0obWFwcGluZywga2V5LCBvbmUpID09IC0xKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3dmFsID0gUHlOdW1iZXJfQWRkKG9sZHZhbCwgb25lKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3dmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShtYXBwaW5nLCBrZXksIG5ld3ZhbCkgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKG5ld3ZhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHdoaWxlICgxKSB7CisgICAgICAgICAgICBrZXkgPSBQeUl0ZXJfTmV4dChpdCk7CisgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvbGR2YWwgPSBQeU9iamVjdF9HZXRJdGVtKG1hcHBpbmcsIGtleSk7CisgICAgICAgICAgICBpZiAob2xkdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkgfHwgIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihvbmUpOworICAgICAgICAgICAgICAgIG5ld3ZhbCA9IG9uZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbmV3dmFsID0gUHlOdW1iZXJfQWRkKG9sZHZhbCwgb25lKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2xkdmFsKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3dmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0obWFwcGluZywga2V5LCBuZXd2YWwpID09IC0xKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfQ0xFQVIobmV3dmFsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICB9CisgICAgfQorCisgICAgUHlfREVDUkVGKGl0KTsKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRihuZXd2YWwpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwogLyogbW9kdWxlIGxldmVsIGNvZGUgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIFB5RG9jX1NUUlZBUihtb2R1bGVfZG9jLApAQCAtMTQ0MCwxMyArMTYxOCwxNyBAQAogLSBkZWZhdWx0ZGljdDogIGRpY3Qgc3ViY2xhc3Mgd2l0aCBhIGRlZmF1bHQgdmFsdWUgZmFjdG9yeVxuXAogIik7CiAKK3N0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgbW9kdWxlX2Z1bmN0aW9uc1tdID0geworICAgIHsiX2NvdW50X2VsZW1lbnRzIiwgX2NvdW50X2VsZW1lbnRzLCAgICBNRVRIX1ZBUkFSR1MsICAgX2NvdW50X2VsZW1lbnRzX2RvY30sCisgICAge05VTEwsICAgICAgIE5VTEx9ICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OwogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9jb2xsZWN0aW9uc21vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgIl9jb2xsZWN0aW9ucyIsCiAgICAgbW9kdWxlX2RvYywKICAgICAtMSwKLSAgICBOVUxMLAorICAgIG1vZHVsZV9mdW5jdGlvbnMsCiAgICAgTlVMTCwKICAgICBOVUxMLAogICAgIE5VTEwsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jc3YuYyBiL01vZHVsZXMvX2Nzdi5jCmluZGV4IDQ1ODRhYmMuLmE3NDljZWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2Nzdi5jCisrKyBiL01vZHVsZXMvX2Nzdi5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKIHN0YXRpYyBpbnQKIGRpYWxlY3RfY2hlY2tfcXVvdGluZyhpbnQgcXVvdGluZykKIHsKLSAgICBTdHlsZURlc2MgKnFzID0gcXVvdGVfc3R5bGVzOworICAgIFN0eWxlRGVzYyAqcXM7CiAKICAgICBmb3IgKHFzID0gcXVvdGVfc3R5bGVzOyBxcy0+bmFtZTsgcXMrKykgewogICAgICAgICBpZiAocXMtPnN0eWxlID09IHF1b3RpbmcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwppbmRleCBiZGY3YWI0Li44ZTg1OTgwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKQEAgLTEzMiw4ICsxMzIsNiBAQAogLyogYSBjYWxsYWJsZSBvYmplY3QgdXNlZCBmb3IgdW5waWNrbGluZyAqLwogc3RhdGljIFB5T2JqZWN0ICpfdW5waWNrbGU7CiAKLWNoYXIgKl9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IE5VTEw7Ci1jaGFyICpfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzID0gTlVMTDsKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwOTYsMTMgKzEwOTQsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmICghUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAic3RyL2J5dGVzIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSh2YWx1ZSktPnRwX25hbWUpOwpAQCAtMTE1NiwxMyArMTE0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewotICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZSBzdHJpbmcgZXhwZWN0ZWQgaW5zdGVhZCBvZiAlcyBpbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZSk7CkBAIC0xMTc1LDcgKzExNjEsNyBAQAogICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigoUHlVbmljb2RlT2JqZWN0ICopdmFsdWUsCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0FzV2lkZUNoYXIodmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdjaGFyX3QgKilzZWxmLT5iX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5iX3NpemUvc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAocmVzdWx0ID49IDAgJiYgKHNpemVfdClyZXN1bHQgPCBzZWxmLT5iX3NpemUvc2l6ZW9mKHdjaGFyX3QpKQpAQCAtMTUyMSw3ICsxNTA3LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpIHx8IFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKKyAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygieiIpOwogCkBAIC0yNTE5LDcgKzI1MDUsNyBAQAogLyoKICAqIENEYXRhIG9iamVjdHMgYXJlIG11dGFibGUsIHNvIHRoZXkgY2Fubm90IGJlIGhhc2hhYmxlIQogICovCi1zdGF0aWMgbG9uZworc3RhdGljIFB5X2hhc2hfdAogUHlDRGF0YV9ub2hhc2goUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVuaGFzaGFibGUgdHlwZSIpOwpAQCAtMzM5OCw3ICszMzg0LDcgQEAKICAgICBzZWxmLT5jYWxsYWJsZSA9IGNhbGxhYmxlOwogCiAgICAgc2VsZi0+dGh1bmsgPSB0aHVuazsKLSAgICAqKHZvaWQgKiopc2VsZi0+Yl9wdHIgPSAodm9pZCAqKXRodW5rLT5wY2w7CisgICAgKih2b2lkICoqKXNlbGYtPmJfcHRyID0gKHZvaWQgKil0aHVuay0+cGNsX2V4ZWM7CiAKICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopdGh1bmspOyAvKiBmb3IgS2VlcFJlZiAqLwogICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXNlbGYsIDAsIChQeU9iamVjdCAqKXRodW5rKSkgewpAQCAtMzk3MCwxNCArMzk1NiwxNCBAQAogCiAgIFJldHVybnMgLTEgb24gZXJyb3IsIG9yIHRoZSBpbmRleCBvZiBuZXh0IGFyZ3VtZW50IG9uIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBQeV9zc2l6ZV90CiBfaW5pdF9wb3NfYXJncyhQeU9iamVjdCAqc2VsZiwgUHlUeXBlT2JqZWN0ICp0eXBlLAogICAgICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzLAotICAgICAgICAgICAgICAgaW50IGluZGV4KQorICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpbmRleCkKIHsKICAgICBTdGdEaWN0T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICpmaWVsZHM7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgaWYgKFB5VHlwZV9zdGdkaWN0KChQeU9iamVjdCAqKXR5cGUtPnRwX2Jhc2UpKSB7CiAgICAgICAgIGluZGV4ID0gX2luaXRfcG9zX2FyZ3Moc2VsZiwgdHlwZS0+dHBfYmFzZSwKQEAgLTQyMTksNyArNDIwNSw3IEBACiAgICAgICAgIFB5T2JqZWN0ICpucDsKICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW4sIGN1ciwgaTsKIAotICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QgKilpdGVtLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmJfbGVuZ3RoLCAmc3RhcnQsICZzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQzNTMsNyArNDMzOSw3IEBACiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgewogICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgb3RoZXJsZW4sIGksIGN1cjsKIAotICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QgKilpdGVtLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmJfbGVuZ3RoLCAmc3RhcnQsICZzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC00NDk4LDcgKzQ0ODQsNyBAQAogI2VuZGlmCiAKICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopJlB5Q0FycmF5VHlwZV9UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVShPKXtzOm4sczpPfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzKE8pe3M6bixzOk99IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q0FycmF5X1R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfbGVuZ3RoXyIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggNDkwYWRhNi4uZDIzNTA5ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtMTYsOCArMTYsOCBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+Y29udmVydGVycyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jYWxsYWJsZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5yZXN0eXBlKTsKLSAgICBpZiAoc2VsZi0+cGNsKQotICAgICAgICBfY3R5cGVzX2ZyZWVfY2xvc3VyZShzZWxmLT5wY2wpOworICAgIGlmIChzZWxmLT5wY2xfd3JpdGUpCisgICAgICAgIGZmaV9jbG9zdXJlX2ZyZWUoc2VsZi0+cGNsX3dyaXRlKTsKICAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7CiB9CiAKQEAgLTk0LDQxICs5NCwxMyBAQAogLyogYWZ0ZXIgY29kZSB0aGF0IHB5cmV4IGdlbmVyYXRlcyAqLwogdm9pZCBfY3R5cGVzX2FkZF90cmFjZWJhY2soY2hhciAqZnVuY25hbWUsIGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogewotICAgIFB5T2JqZWN0ICpweV9zcmNmaWxlID0gMDsKLSAgICBQeU9iamVjdCAqcHlfZnVuY25hbWUgPSAwOwogICAgIFB5T2JqZWN0ICpweV9nbG9iYWxzID0gMDsKLSAgICBQeU9iamVjdCAqZW1wdHlfdHVwbGUgPSAwOwotICAgIFB5T2JqZWN0ICplbXB0eV9zdHJpbmcgPSAwOwogICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7CiAgICAgUHlGcmFtZU9iamVjdCAqcHlfZnJhbWUgPSAwOwogCi0gICAgcHlfc3JjZmlsZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgIGlmICghcHlfc3JjZmlsZSkgZ290byBiYWQ7Ci0gICAgcHlfZnVuY25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhmdW5jbmFtZSk7Ci0gICAgaWYgKCFweV9mdW5jbmFtZSkgZ290byBiYWQ7CiAgICAgcHlfZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoIXB5X2dsb2JhbHMpIGdvdG8gYmFkOwotICAgIGVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgaWYgKCFlbXB0eV90dXBsZSkgZ290byBiYWQ7Ci0gICAgZW1wdHlfc3RyaW5nID0gUHlCeXRlc19Gcm9tU3RyaW5nKCIiKTsKLSAgICBpZiAoIWVtcHR5X3N0cmluZykgZ290byBiYWQ7Ci0gICAgcHlfY29kZSA9IFB5Q29kZV9OZXcoCi0gICAgICAgIDAsICAgICAgICAgICAgLyppbnQgYXJnY291bnQsKi8KLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBrd29ubHlhcmdjb3VudCwqLwotICAgICAgICAwLCAgICAgICAgICAgIC8qaW50IG5sb2NhbHMsKi8KLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBzdGFja3NpemUsKi8KLSAgICAgICAgMCwgICAgICAgICAgICAvKmludCBmbGFncywqLwotICAgICAgICBlbXB0eV9zdHJpbmcsIC8qUHlPYmplY3QgKmNvZGUsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpjb25zdHMsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpuYW1lcywqLwotICAgICAgICBlbXB0eV90dXBsZSwgIC8qUHlPYmplY3QgKnZhcm5hbWVzLCovCi0gICAgICAgIGVtcHR5X3R1cGxlLCAgLypQeU9iamVjdCAqZnJlZXZhcnMsKi8KLSAgICAgICAgZW1wdHlfdHVwbGUsICAvKlB5T2JqZWN0ICpjZWxsdmFycywqLwotICAgICAgICBweV9zcmNmaWxlLCAgIC8qUHlPYmplY3QgKmZpbGVuYW1lLCovCi0gICAgICAgIHB5X2Z1bmNuYW1lLCAgLypQeU9iamVjdCAqbmFtZSwqLwotICAgICAgICBsaW5lbm8sICAgLyppbnQgZmlyc3RsaW5lbm8sKi8KLSAgICAgICAgZW1wdHlfc3RyaW5nICAvKlB5T2JqZWN0ICpsbm90YWIqLwotICAgICAgICApOworICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOwogICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7CiAgICAgcHlfZnJhbWUgPSBQeUZyYW1lX05ldygKICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQoKSwgLypQeVRocmVhZFN0YXRlICp0c3RhdGUsKi8KQEAgLTE0MSwxMCArMTEzLDYgQEAKICAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKICAgYmFkOgogICAgIFB5X1hERUNSRUYocHlfZ2xvYmFscyk7Ci0gICAgUHlfWERFQ1JFRihweV9zcmNmaWxlKTsKLSAgICBQeV9YREVDUkVGKHB5X2Z1bmNuYW1lKTsKLSAgICBQeV9YREVDUkVGKGVtcHR5X3R1cGxlKTsKLSAgICBQeV9YREVDUkVGKGVtcHR5X3N0cmluZyk7CiAgICAgUHlfWERFQ1JFRihweV9jb2RlKTsKICAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKIH0KQEAgLTM3MCw3ICszMzgsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBwLT5wY2wgPSBOVUxMOworICAgIHAtPnBjbF9leGVjID0gTlVMTDsKKyAgICBwLT5wY2xfd3JpdGUgPSBOVUxMOwogICAgIG1lbXNldCgmcC0+Y2lmLCAwLCBzaXplb2YocC0+Y2lmKSk7CiAgICAgcC0+Y29udmVydGVycyA9IE5VTEw7CiAgICAgcC0+Y2FsbGFibGUgPSBOVUxMOwpAQCAtNDAwLDggKzM2OSw5IEBACiAKICAgICBhc3NlcnQoQ1RodW5rX0NoZWNrRXhhY3QoKFB5T2JqZWN0ICopcCkpOwogCi0gICAgcC0+cGNsID0gX2N0eXBlc19hbGxvY19jbG9zdXJlKCk7Ci0gICAgaWYgKHAtPnBjbCA9PSBOVUxMKSB7CisgICAgcC0+cGNsX3dyaXRlID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwKKwkJCQkJCQkJCSAmcC0+cGNsX2V4ZWMpOworICAgIGlmIChwLT5wY2xfd3JpdGUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KQEAgLTQ0Niw3ICs0MTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICJmZmlfcHJlcF9jaWYgZmFpbGVkIHdpdGggJWQiLCByZXN1bHQpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICByZXN1bHQgPSBmZmlfcHJlcF9jbG9zdXJlKHAtPnBjbCwgJnAtPmNpZiwgY2xvc3VyZV9mY24sIHApOworI2lmIGRlZmluZWQoWDg2X0RBUldJTikgfHwgZGVmaW5lZChQT1dFUlBDX0RBUldJTikKKyAgICByZXN1bHQgPSBmZmlfcHJlcF9jbG9zdXJlKHAtPnBjbF93cml0ZSwgJnAtPmNpZiwgY2xvc3VyZV9mY24sIHApOworI2Vsc2UKKyAgICByZXN1bHQgPSBmZmlfcHJlcF9jbG9zdXJlX2xvYyhwLT5wY2xfd3JpdGUsICZwLT5jaWYsIGNsb3N1cmVfZmNuLAorCQkJCSAgcCwKKwkJCQkgIHAtPnBjbF9leGVjKTsKKyNlbmRpZgogICAgIGlmIChyZXN1bHQgIT0gRkZJX09LKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZmZpX3ByZXBfY2xvc3VyZSBmYWlsZWQgd2l0aCAlZCIsIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCmluZGV4IDQxYTkwZjYuLjFmM2MxYzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCkBAIC02NTgsMzEgKzY1OCwyMiBAQAogCiAjaWZkZWYgQ1RZUEVTX1VOSUNPREUKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG9iaikpIHsKLSNpZmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCisjaWYgUHlfVU5JQ09ERV9TSVpFID09IFNJWkVPRl9XQ0hBUl9UCiAgICAgICAgIHBhLT5mZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwogICAgICAgICBwYS0+dmFsdWUucCA9IFB5VW5pY29kZV9BU19VTklDT0RFKG9iaik7CiAgICAgICAgIFB5X0lOQ1JFRihvYmopOwogICAgICAgICBwYS0+a2VlcCA9IG9iajsKICAgICAgICAgcmV0dXJuIDA7CiAjZWxzZQotICAgICAgICBpbnQgc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShvYmopOwogICAgICAgICBwYS0+ZmZpX3R5cGUgPSAmZmZpX3R5cGVfcG9pbnRlcjsKLSAgICAgICAgc2l6ZSArPSAxOyAvKiB0ZXJtaW5hdGluZyBOVUwgKi8KLSAgICAgICAgc2l6ZSAqPSBzaXplb2Yod2NoYXJfdCk7Ci0gICAgICAgIHBhLT52YWx1ZS5wID0gUHlNZW1fTWFsbG9jKHNpemUpOwotICAgICAgICBpZiAoIXBhLT52YWx1ZS5wKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICBwYS0+dmFsdWUucCA9IFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKG9iaiwgTlVMTCk7CisgICAgICAgIGlmIChwYS0+dmFsdWUucCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIG1lbXNldChwYS0+dmFsdWUucCwgMCwgc2l6ZSk7CiAgICAgICAgIHBhLT5rZWVwID0gUHlDYXBzdWxlX05ldyhwYS0+dmFsdWUucCwgQ1RZUEVTX0NBUFNVTEVfTkFNRV9QWU1FTSwgcHltZW1fZGVzdHJ1Y3Rvcik7CiAgICAgICAgIGlmICghcGEtPmtlZXApIHsKICAgICAgICAgICAgIFB5TWVtX0ZyZWUocGEtPnZhbHVlLnApOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGlmICgtMSA9PSBQeVVuaWNvZGVfQXNXaWRlQ2hhcigoUHlVbmljb2RlT2JqZWN0ICopb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGEtPnZhbHVlLnAsIFB5VW5pY29kZV9HRVRfU0laRShvYmopKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKICAgICB9CkBAIC04MTQsNyArODA1LDcgQEAKICNlbmRpZgogICAgICAgICBkZWx0YSA9CiAjZW5kaWYKLSAgICAgICAgICAgIGZmaV9jYWxsKCZjaWYsICh2b2lkICopcFByb2MsIHJlc21lbSwgYXZhbHVlcyk7CisgICAgICAgICAgICAgICAgZmZpX2NhbGwoJmNpZiwgKHZvaWQgKilwUHJvYywgcmVzbWVtLCBhdmFsdWVzKTsKICNpZmRlZiBNU19XSU4zMgogI2lmbmRlZiBET05UX1VTRV9TRUgKICAgICB9CkBAIC04NDksMjkgKzg0MCwyOSBAQAogI2lmZGVmIE1TX1dJTjY0CiAgICAgaWYgKGRlbHRhICE9IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJmZmlfY2FsbCBmYWlsZWQgd2l0aCBjb2RlICVkIiwKLSAgICAgICAgICAgICAgICAgICAgIGRlbHRhKTsKKyAgICAgICAgICAgICAgICAgImZmaV9jYWxsIGZhaWxlZCB3aXRoIGNvZGUgJWQiLAorICAgICAgICAgICAgICAgICBkZWx0YSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAjZWxzZQogICAgIGlmIChkZWx0YSA8IDApIHsKICAgICAgICAgaWYgKGZsYWdzICYgRlVOQ0ZMQUdfQ0RFQ0wpCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIGNhbGxlZCB3aXRoIG5vdCBlbm91Z2ggIgotICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIG1pc3NpbmcpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAib3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAtZGVsdGEpOworICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoICIKKyAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIG1pc3NpbmcpICIKKyAgICAgICAgICAgICAgICAgICAgICJvciB3cm9uZyBjYWxsaW5nIGNvbnZlbnRpb24iLAorICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgLWRlbHRhKTsKKyAgICAgICAgICAgICAgICAgICAgICJQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnRzICglZCBieXRlcyBtaXNzaW5nKSIsCisgICAgICAgICAgICAgICAgICAgICAtZGVsdGEpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfSBlbHNlIGlmIChkZWx0YSA+IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55ICIKLSAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKCVkIGJ5dGVzIGluIGV4Y2VzcykiLAotICAgICAgICAgICAgICAgICAgICAgZGVsdGEpOworICAgICAgICAgICAgICAgICAiUHJvY2VkdXJlIHByb2JhYmx5IGNhbGxlZCB3aXRoIHRvbyBtYW55ICIKKyAgICAgICAgICAgICAgICAgImFyZ3VtZW50cyAoJWQgYnl0ZXMgaW4gZXhjZXNzKSIsCisgICAgICAgICAgICAgICAgIGRlbHRhKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICNlbmRpZgpAQCAtMTY0MSwzNyArMTYzMiw2IEBACiAgICAgcmV0dXJuIGFyZzsKIH0KIAotI2lmZGVmIENUWVBFU19VTklDT0RFCi0KLXN0YXRpYyBjaGFyIHNldF9jb252ZXJzaW9uX21vZGVfZG9jW10gPQotInNldF9jb252ZXJzaW9uX21vZGUoZW5jb2RpbmcsIGVycm9ycykgLT4gKHByZXZpb3VzLWVuY29kaW5nLCBwcmV2aW91cy1lcnJvcnMpXG5cCi1cblwKLVNldCB0aGUgZW5jb2RpbmcgYW5kIGVycm9yIGhhbmRsaW5nIGN0eXBlcyB1c2VzIHdoZW4gY29udmVydGluZ1xuXAotYmV0d2VlbiB1bmljb2RlIGFuZCBzdHJpbmdzLiAgUmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWVzLlxuIjsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXNldF9jb252ZXJzaW9uX21vZGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKmNvZGluZywgKm1vZGU7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAienM6c2V0X2NvbnZlcnNpb25fbW9kZSIsICZjb2RpbmcsICZtb2RlKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiKHp6KSIsIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgaWYgKGNvZGluZykgewotICAgICAgICBQeU1lbV9GcmVlKF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyk7Ci0gICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IFB5TWVtX01hbGxvYyhzdHJsZW4oY29kaW5nKSArIDEpOwotICAgICAgICBzdHJjcHkoX2N0eXBlc19jb252ZXJzaW9uX2VuY29kaW5nLCBjb2RpbmcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZyA9IE5VTEw7Ci0gICAgfQotICAgIFB5TWVtX0ZyZWUoX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyA9IFB5TWVtX01hbGxvYyhzdHJsZW4obW9kZSkgKyAxKTsKLSAgICBzdHJjcHkoX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycywgbW9kZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTE4NTIsOSArMTgxMiw2IEBACiAgICAgeyJfdW5waWNrbGUiLCB1bnBpY2tsZSwgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyJidWZmZXJfaW5mbyIsIGJ1ZmZlcl9pbmZvLCBNRVRIX08sICJSZXR1cm4gYnVmZmVyIGludGVyZmFjZSBpbmZvcm1hdGlvbiJ9LAogICAgIHsicmVzaXplIiwgcmVzaXplLCBNRVRIX1ZBUkFSR1MsICJSZXNpemUgdGhlIG1lbW9yeSBidWZmZXIgb2YgYSBjdHlwZXMgaW5zdGFuY2UifSwKLSNpZmRlZiBDVFlQRVNfVU5JQ09ERQotICAgIHsic2V0X2NvbnZlcnNpb25fbW9kZSIsIHNldF9jb252ZXJzaW9uX21vZGUsIE1FVEhfVkFSQVJHUywgc2V0X2NvbnZlcnNpb25fbW9kZV9kb2N9LAotI2VuZGlmCiAjaWZkZWYgTVNfV0lOMzIKICAgICB7ImdldF9sYXN0X2Vycm9yIiwgZ2V0X2xhc3RfZXJyb3IsIE1FVEhfTk9BUkdTfSwKICAgICB7InNldF9sYXN0X2Vycm9yIiwgc2V0X2xhc3RfZXJyb3IsIE1FVEhfVkFSQVJHU30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKaW5kZXggNDQxZWQ5ZS4uY2NhYTNjOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYwpAQCAtOSw2ICs5LDcgQEAKIAogI2RlZmluZSBDVFlQRVNfQ0ZJRUxEX0NBUFNVTEVfTkFNRV9QWU1FTSAiX2N0eXBlcy9jZmllbGQuYyBweW1lbSIKIAorI2lmIFB5X1VOSUNPREVfU0laRSAhPSBTSVpFT0ZfV0NIQVJfVAogc3RhdGljIHZvaWQgcHltZW1fZGVzdHJ1Y3RvcihQeU9iamVjdCAqcHRyKQogewogICAgIHZvaWQgKnAgPSBQeUNhcHN1bGVfR2V0UG9pbnRlcihwdHIsIENUWVBFU19DRklFTERfQ0FQU1VMRV9OQU1FX1BZTUVNKTsKQEAgLTE2LDYgKzE3LDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShwKTsKICAgICB9CiB9CisjZW5kaWYKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTE2OCwyMCArMTE3MCw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogY19zZXQodm9pZCAqcHRyLCBQeU9iamVjdCAqdmFsdWUsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZXJyb3JzKTsKLSAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodmFsdWUpICE9IDEpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgICooY2hhciAqKXB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHZhbHVlKVswXTsKLSAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgX1JFVCh2YWx1ZSk7Ci0gICAgfQogICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSAmJiBQeUJ5dGVzX0dFVF9TSVpFKHZhbHVlKSA9PSAxKSB7CiAgICAgICAgICooY2hhciAqKXB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHZhbHVlKVswXTsKICAgICAgICAgX1JFVCh2YWx1ZSk7CkBAIC0xMjE3LDEzICsxMjA1LDggQEAKIHVfc2V0KHZvaWQgKnB0ciwgUHlPYmplY3QgKnZhbHVlLCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgeworICAgIHdjaGFyX3QgY2hhcnNbMl07CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZSBzdHJpbmcgZXhwZWN0ZWQgaW5zdGVhZCBvZiAlcyBpbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+b2JfdHlwZS0+dHBfbmFtZSk7CkBAIC0xMjMxLDcgKzEyMTQsNyBAQAogICAgIH0gZWxzZQogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogCi0gICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHZhbHVlKTsKKyAgICBsZW4gPSBQeVVuaWNvZGVfQXNXaWRlQ2hhcih2YWx1ZSwgY2hhcnMsIDIpOwogICAgIGlmIChsZW4gIT0gMSkgewogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtMTIzOSw3ICsxMjIyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgKih3Y2hhcl90ICopcHRyID0gUHlVbmljb2RlX0FTX1VOSUNPREUodmFsdWUpWzBdOworICAgICood2NoYXJfdCAqKXB0ciA9IGNoYXJzWzBdOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAKICAgICBfUkVUKHZhbHVlKTsKQEAgLTEyOTIsMTMgKzEyNzUsNyBAQAogICAgIC8qIEl0J3MgZWFzaWVyIHRvIGNhbGN1bGF0ZSBpbiBjaGFyYWN0ZXJzIHRoYW4gaW4gYnl0ZXMgKi8KICAgICBsZW5ndGggLz0gc2l6ZW9mKHdjaGFyX3QpOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIHZhbHVlID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgeworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGUgc3RyaW5nIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPm9iX3R5cGUtPnRwX25hbWUpOwpAQCAtMTMxNSw3ICsxMjkyLDcgQEAKICAgICB9IGVsc2UgaWYgKHNpemUgPCBsZW5ndGgtMSkKICAgICAgICAgLyogY29weSB0ZXJtaW5hdGluZyBOVUwgY2hhcmFjdGVyIGlmIHRoZXJlIGlzIHNwYWNlICovCiAgICAgICAgIHNpemUgKz0gMTsKLSAgICBQeVVuaWNvZGVfQXNXaWRlQ2hhcigoUHlVbmljb2RlT2JqZWN0ICopdmFsdWUsICh3Y2hhcl90ICopcHRyLCBzaXplKTsKKyAgICBQeVVuaWNvZGVfQXNXaWRlQ2hhcih2YWx1ZSwgKHdjaGFyX3QgKilwdHIsIHNpemUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIApAQCAtMTMzMyw3ICsxMzEwLDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilwdHIsIChQeV9zc2l6ZV90KWkpOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopcHRyLCAoUHlfc3NpemVfdClpKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEzNDIsMTQgKzEzMTksNyBAQAogICAgIGNoYXIgKmRhdGE7CiAgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3R5cGVzX2NvbnZlcnNpb25fZW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lcnJvcnMpOwotICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayh2YWx1ZSkpOwotICAgIH0gZWxzZSBpZihQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgeworICAgIGlmKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKQEAgLTEzOTMsMTQgKzEzNjMsNiBAQAogICAgICAgICAqKGNoYXIgKiopcHRyID0gUHlCeXRlc19Bc1N0cmluZyh2YWx1ZSk7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAqKGNoYXIgKiopcHRyID0gUHlCeXRlc19BU19TVFJJTkcoc3RyKTsKLSAgICAgICAgcmV0dXJuIHN0cjsKICAgICB9IGVsc2UgaWYgKFB5TG9uZ19DaGVjayh2YWx1ZSkpIHsKICNpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9MT05HX0xPTkcKICAgICAgICAgKihjaGFyICoqKXB0ciA9IChjaGFyICopUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sodmFsdWUpOwpAQCAtMTQ1NCwyNSArMTQxNiwxOCBAQAogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAidW5pY29kZSBzdHJpbmcgb3IgaW50ZWdlciBhZGRyZXNzIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAogICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSNpZmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCi0gICAgLyogSEFWRV9VU0FCTEVfV0NIQVJfVCBtZWFucyB0aGF0IFB5X1VOSUNPREUgYW5kIHdjaGFyX3QgaXMgdGhlIHNhbWUKLSAgICAgICB0eXBlLiAgU28gd2UgY2FuIGNvcHkgZGlyZWN0bHkuICBIbSwgYXJlIHVuaWNvZGUgb2JqZWN0cyBhbHdheXMgTlVMCisjaWYgUHlfVU5JQ09ERV9TSVpFID09IFNJWkVPRl9XQ0hBUl9UCisgICAgLyogV2UgY2FuIGNvcHkgZGlyZWN0bHkuICBIbSwgYXJlIHVuaWNvZGUgb2JqZWN0cyBhbHdheXMgTlVMCiAgICAgICAgdGVybWluYXRlZCBpbiBQeXRob24sIGludGVybmFsbHk/CiAgICAgICovCi0gICAgKih3Y2hhcl90ICoqKXB0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHZhbHVlKTsKKyAgICAqKHdjaGFyX3QgKiopcHRyID0gKHdjaGFyX3QgKikgUHlVbmljb2RlX0FTX1VOSUNPREUodmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKICNlbHNlCiAgICAgewpAQCAtMTQ4MSwxNSArMTQzNiwxMSBAQAogICAgICAgICBQeU9iamVjdCAqa2VlcDsKICAgICAgICAgd2NoYXJfdCAqYnVmZmVyOwogCi0gICAgICAgIGludCBzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKHZhbHVlKTsKLSAgICAgICAgc2l6ZSArPSAxOyAvKiB0ZXJtaW5hdGluZyBOVUwgKi8KLSAgICAgICAgc2l6ZSAqPSBzaXplb2Yod2NoYXJfdCk7Ci0gICAgICAgIGJ1ZmZlciA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKHNpemUpOworICAgICAgICBidWZmZXIgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyh2YWx1ZSwgTlVMTCk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBtZW1zZXQoYnVmZmVyLCAwLCBzaXplKTsKICAgICAgICAga2VlcCA9IFB5Q2Fwc3VsZV9OZXcoYnVmZmVyLCBDVFlQRVNfQ0ZJRUxEX0NBUFNVTEVfTkFNRV9QWU1FTSwgcHltZW1fZGVzdHJ1Y3Rvcik7CiAgICAgICAgIGlmICgha2VlcCkgewogICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKQEAgLTE0OTcsMTIgKzE0NDgsNiBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgKih3Y2hhcl90ICoqKXB0ciA9ICh3Y2hhcl90ICopYnVmZmVyOwotICAgICAgICBpZiAoLTEgPT0gUHlVbmljb2RlX0FzV2lkZUNoYXIoKFB5VW5pY29kZU9iamVjdCAqKXZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBQeVVuaWNvZGVfR0VUX1NJWkUodmFsdWUpKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihrZWVwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIHJldHVybiBrZWVwOwogICAgIH0KQEAgLTE1NDAsMTIgKzE0ODUsNiBAQAogICAgIC8qIGNvbnZlcnQgdmFsdWUgaW50byBhIFB5VW5pY29kZU9iamVjdCBvciBOVUxMICovCiAgICAgaWYgKFB5X05vbmUgPT0gdmFsdWUpIHsKICAgICAgICAgdmFsdWUgPSBOVUxMOwotICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgdmFsdWUgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QodmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdHlwZXNfY29udmVyc2lvbl9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2N0eXBlc19jb252ZXJzaW9uX2Vycm9ycyk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsgLyogZm9yIHRoZSBkZXNjcmVmIGJlbG93ICovCiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaCBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaAppbmRleCAwYWY1ZmExLi4yN2FiZTY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCkBAIC01OCw3ICs1OCw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAotICAgIGZmaV9jbG9zdXJlICpwY2w7IC8qIHRoZSBDIGNhbGxhYmxlICovCisgICAgZmZpX2Nsb3N1cmUgKnBjbF93cml0ZTsgLyogdGhlIEMgY2FsbGFibGUsIHdyaXRlYWJsZSAqLworICAgIHZvaWQgKnBjbF9leGVjOyAgICAgICAgIC8qIHRoZSBDIGNhbGxhYmxlLCBleGVjdXRhYmxlICovCiAgICAgZmZpX2NpZiBjaWY7CiAgICAgaW50IGZsYWdzOwogICAgIFB5T2JqZWN0ICpjb252ZXJ0ZXJzOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCmluZGV4IDY3NjU5MDIuLjdhZmEwZWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKQEAgLTEsMTE3ICsxLDcgQEAKLVRoaXMgZmlsZSBjb250YWlucyB0aGUgZGlmZnMgYmV0d2VlbiB0aGUgZmlsZXMgaW4gdGhlIGxpYmZmaQotc3ViZGlyZWN0b3J5IGFuZCB0aGUgJ29mZmljaWFsJyBzb3VyY2UgZmlsZXMgZnJvbQotZnRwOi8vc291cmNld2FyZS5vcmcvcHViL2xpYmZmaS9saWJmZmktMy4wLjUudGFyLmd6Ci0KLUluZGV4OiBsaWJmZmkvYWNsb2NhbC5tNAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYmZmaS9hY2xvY2FsLm00CSh3b3JraW5nIGNvcHkpCi0rKysgbGliZmZpL2FjbG9jYWwubTQJKHJldmlzaW9uIDcyNDc1KQotQEAgLTExNTUsNyArMTE1NSw3IEBACi0gICAgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwgXAotICAgIHRlc3QgIlgkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCi0gCi0tICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCi0rICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKLSAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLUluZGV4OiBsaWJmZmkvY29uZmlndXJlLmFjCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliZmZpL2NvbmZpZ3VyZS5hYwkod29ya2luZyBjb3B5KQotKysrIGxpYmZmaS9jb25maWd1cmUuYWMJKHJldmlzaW9uIDcyNDc1KQotQEAgLTEsNCArMSw3IEBACi0gZG5sIFByb2Nlc3MgdGhpcyB3aXRoIGF1dG9jb25mIHRvIGNyZWF0ZSBjb25maWd1cmUKLSsjCi0rIyBmaWxlIGZyb20gbGliZmZpIC0gc2xpZ2h0bHkgcGF0Y2hlZCBmb3IgY3R5cGVzCi0rIwotIAotIEFDX1BSRVJFUSgyLjU5KQotIAotQEAgLTgzLDYgKzg2LDkgQEAKLSAgIGk/ODYtKi1zb2xhcmlzMi4xW1swLTldXSopCi0gCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKLSAJOzsKLSsgIGkqODYtKi1udG8tcW54KikgCi0rICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2Ci0rICAgICAgICA7OwotICAgaT84Ni0qLSopCi0gCVRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKLSAJOzsKLUBAIC0xMDAsMTAgKzEwNiwxMCBAQAotIAk7OwotIAotICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiopCi0tCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwotKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwotIAk7OwotICAgbWlwcyotKi1saW51eCopCi0tCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwotKwlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKLSAJOzsKLSAKLSAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQotQEAgLTE1Niw3ICsxNjIsNyBAQAotICAgQUNfTVNHX0VSUk9SKFsibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuIl0pCi0gZmkKLSAKLS1BTV9DT05ESVRJT05BTChNSVBTLCB0ZXN0IHgkVEFSR0VUID0geE1JUFMpCi0rQU1fQ09ORElUSU9OQUwoTUlQUyxbZXhwciB4JFRBUkdFVCA6ICd4TUlQUycgPiAvZGV2L251bGxdKQotIEFNX0NPTkRJVElPTkFMKFNQQVJDLCB0ZXN0IHgkVEFSR0VUID0geFNQQVJDKQotIEFNX0NPTkRJVElPTkFMKFg4NiwgdGVzdCB4JFRBUkdFVCA9IHhYODYpCi0gQU1fQ09ORElUSU9OQUwoWDg2X0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0ZSRUVCU0QpCi1AQCAtMzYwLDYgKzM2NiwxMCBAQAotIAotIEFDX0NPTkZJR19MSU5LUyhpbmNsdWRlL2ZmaXRhcmdldC5oOnNyYy8kVEFSR0VURElSL2ZmaXRhcmdldC5oKQotIAotLUFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMpCi0rQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvZmZpLmgpCi0gCi0rQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oKQotKwotK0FDX0NPTkZJR19GSUxFUyhmZmljb25maWcucHkpCi0rCi0gQUNfT1VUUFVUCi1JbmRleDogbGliZmZpL2NvbmZpZ3VyZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0tIGxpYmZmaS9jb25maWd1cmUJKHdvcmtpbmcgY29weSkKLSsrKyBsaWJmZmkvY29uZmlndXJlCShyZXZpc2lvbiA3MjQ3NSkKLUBAIC05NTQ2LDcgKzk1NDYsNyBAQAotICAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwgXAotICAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KLSAKLS0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KLSsgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmCi0gICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci1AQCAtMTM1MTQsNyArMTM1MTQsNyBAQAotICAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9DWFgiIHx8IFwKLSAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiID0gIlh5ZXMiIDsgdGhlbgotIAotLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICE9IG5vICYmCi0gICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci1AQCAtMTYxMTcsNyArMTYxMTcsNyBAQAotICAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9GNzciIHx8IFwKLSAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19GNzciID0gIlh5ZXMiIDsgdGhlbgotIAotLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9GNzciICE9IG5vICYmCi0gICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci1AQCAtMTg3MjAsNyArMTg3MjAsNyBAQAotICAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9HQ0oiIHx8IFwKLSAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oiID0gIlh5ZXMiIDsgdGhlbgotIAotLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9HQ0oiICE9IG5vICYmCi0gICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci1AQCAtMjA0MDYsNiArMjA0MDYsOSBAQAorZGlmZiAtdXJOIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZSBsaWJmZmkvY29uZmlndXJlCistLS0gbGliZmZpLm9yaWcvY29uZmlndXJlCTIwMTAtMDMtMTkgMTg6Mjk6NTQuNTg4NDk5ODYyICswMTAwCisrKysgbGliZmZpL2NvbmZpZ3VyZQkyMDEwLTAzLTE5IDE4OjMyOjA5LjExMzQ5OTQ3OSArMDEwMAorQEAgLTExMjI4LDYgKzExMjI4LDkgQEAKICAgIGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0qKQogIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CiAgCTs7CkBAIC0xMjEsNyArMTEsNyBAQAogICAgaT84Ni0qLSopCiAgCVRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKICAJOzsKLUBAIC0yMDQyMywxMCArMjA0MjYsMTAgQEAKK0BAIC0xMTI0NSwxMiArMTEyNDgsMTIgQEAKICAJOzsKICAKICAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qKQpAQCAtMTI5LDEzICsxOSwxNSBAQAogKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogIAk7OwogICAgbWlwcyotKi1saW51eCopCisgCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCisgCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJwogLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKLSsJVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAgCTs7CiAgCiAgICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKLUBAIC0yMDQ4MSw3ICsyMDQ4NCw3IEBACi0gICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitAQCAtMTEzMDcsNyArMTEzMTAsNyBAQAorICAgYXNfZm5fZXJyb3IgIlwibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuXCIiICIkTElORU5PIiA1CiAgZmkKICAKIC0gaWYgdGVzdCB4JFRBUkdFVCA9IHhNSVBTOyB0aGVuCkBAIC0xNDMsMTIgKzM1LDggQEAKICAgIE1JUFNfVFJVRT0KICAgIE1JUFNfRkFMU0U9JyMnCiAgZWxzZQotQEAgLTIyNzEyLDkgKzIyNzE1LDE1IEBACi0gYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgiCi0gCi0gCi0tYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYyIKLSthY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9mZmkuaCIKK0BAIC0xMjQyMiw2ICsxMjQyNSwxMiBAQAorIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMiCiAgCiAgCiArYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oIgpAQCAtMTYwLDQ4ICs0OCw2NiBAQAogIGNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgogICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQogICMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQotQEAgLTIzNDk4LDEyICsyMzUwNyw5IEBACi0gICAgICJpbmNsdWRlIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGluY2x1ZGUiIDs7Ci0gICAgICJzcmMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgc3JjIiA7OwotICAgICAiaW5jbHVkZS9mZml0YXJnZXQuaCIpIENPTkZJR19MSU5LUz0iJENPTkZJR19MSU5LUyBpbmNsdWRlL2ZmaXRhcmdldC5oOnNyYy8kVEFSR0VURElSL2ZmaXRhcmdldC5oIiA7OwotLSAgICAiaW5jbHVkZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL01ha2VmaWxlIiA7OwotICAgICAiaW5jbHVkZS9mZmkuaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL2ZmaS5oIiA7OwotLSAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7Ci0tICAgICJ0ZXN0c3VpdGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHN1aXRlL01ha2VmaWxlIiA7OwotLSAgICAibWFuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZSIgOzsKLS0gICAgImxpYmZmaS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJmZmkucGMiIDs7CitAQCAtMTM1MjEsNiArMTM1MzAsOCBAQAorICAgICAidGVzdHN1aXRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RzdWl0ZS9NYWtlZmlsZSIgOzsKKyAgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGUiIDs7CisgICAgICJsaWJmZmkucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGliZmZpLnBjIiA7OwogKyAgICAiaW5jbHVkZS9mZmlfY29tbW9uLmgiKSBDT05GSUdfTElOS1M9IiRDT05GSUdfTElOS1MgaW5jbHVkZS9mZmlfY29tbW9uLmg6aW5jbHVkZS9mZmlfY29tbW9uLmgiIDs7CiArICAgICJmZmljb25maWcucHkiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZmZpY29uZmlnLnB5IiA7OwogIAotICAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQotIGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQotSW5kZXg6IGxpYmZmaS9zcmMveDg2L2ZmaS5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliZmZpL3NyYy94ODYvZmZpLmMJKHdvcmtpbmcgY29weSkKLSsrKyBsaWJmZmkvc3JjL3g4Ni9mZmkuYwkocmV2aXNpb24gNzI0NzUpCi1AQCAtMzg4LDEwICszODgsMTAgQEAKLSAgICAgcmV0dXJuIEZGSV9CQURfQUJJOwotICAgfQorICAgKikgYXNfZm5fZXJyb3IgImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CisgICBlc2FjCitkaWZmIC11ck4gbGliZmZpLm9yaWcvY29uZmlndXJlLmFjIGxpYmZmaS9jb25maWd1cmUuYWMKKy0tLSBsaWJmZmkub3JpZy9jb25maWd1cmUuYWMJMjAxMC0wMy0xOSAxODoyNzo0NC45ODg0OTg1ODUgKzAxMDAKKysrKyBsaWJmZmkvY29uZmlndXJlLmFjCTIwMTAtMDMtMTkgMTg6MzE6MjkuMjUyNTA1MTc4ICswMTAwCitAQCAtMSw0ICsxLDcgQEAKKyBkbmwgUHJvY2VzcyB0aGlzIHdpdGggYXV0b2NvbmYgdG8gY3JlYXRlIGNvbmZpZ3VyZQorKyMKKysjIGZpbGUgZnJvbSBsaWJmZmkgLSBzbGlnaHRseSBwYXRjaGVkIGZvciBjdHlwZXMKKysjCiAgCi0tICAvLyB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBjZXJ0YWluIGtpbmRzIG9mIGFyZ3VtZW50cyBmb3IgcmF3Ci0rICAvKiB3ZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCBjZXJ0YWluIGtpbmRzIG9mIGFyZ3VtZW50cyBmb3IgcmF3Ci0gICAvLyBjbG9zdXJlcy4gIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGEgc2VwYXJhdGUgYXNzZW1ibHkgbGFuZ3VhZ2UKLSAgIC8vIHJvdXRpbmUsIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgYXJndW1lbnQgcHJvY2Vzc2luZywgc29tZXRoaW5nIHdlCi0tICAvLyBkb24ndCBkbyBub3cgZm9yIHBlcmZvcm1hbmNlLgotKyAgLy8gZG9uJ3QgZG8gbm93IGZvciBwZXJmb3JtYW5jZS4gKi8KKyBBQ19QUkVSRVEoMi42MykKICAKLSAgIGZvciAoaSA9IGNpZi0+bmFyZ3MtMTsgaSA+PSAwOyBpLS0pCi0gICAgIHsKLUluZGV4OiBsaWJmZmkvc3JjL3g4Ni9mZmk2NC5jCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLS0gbGliZmZpL3NyYy94ODYvZmZpNjQuYwkod29ya2luZyBjb3B5KQotKysrIGxpYmZmaS9zcmMveDg2L2ZmaTY0LmMJKHJldmlzaW9uIDcyNDc1KQotQEAgLTUyLDcgKzUyLDcgQEAKLSAvKiBSZWdpc3RlciBjbGFzcyB1c2VkIGZvciBwYXNzaW5nIGdpdmVuIDY0Yml0IHBhcnQgb2YgdGhlIGFyZ3VtZW50LgotICAgIFRoZXNlIHJlcHJlc2VudCBjbGFzc2VzIGFzIGRvY3VtZW50ZWQgYnkgdGhlIFBTIEFCSSwgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgb2YgU1NFU0YsIFNTRURGIGNsYXNzZXMsIHRoYXQgYXJlIGJhc2ljYWxseSBTU0UgY2xhc3MsIGp1c3QgZ2NjIHdpbGwKLS0gICB1c2UgU0Ygb3IgREZtb2RlIG1vdmUgaW5zdGVhZCBvZiBESW1vZGUgdG8gYXZvaWQgcmVmb3JtYXRpbmcgcGVuYWx0aWVzLgotKyAgIHVzZSBTRiBvciBERm1vZGUgbW92ZSBpbnN0ZWFkIG9mIERJbW9kZSB0byBhdm9pZCByZWZvcm1hdHRpbmcgcGVuYWx0aWVzLgorQEAgLTkxLDYgKzk0LDkgQEAKKyAgIGk/ODYtKi1zb2xhcmlzMi4xW1swLTldXSopCisgCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKyAJOzsKKysgIGkqODYtKi1udG8tcW54KikgCisrICAgICAgICBUQVJHRVQ9WDg2OyBUQVJHRVRESVI9eDg2CisrICAgICAgICA7OworICAgaT84Ni0qLSopCisgCVRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKKyAJOzsKK0BAIC0xMDgsMTIgKzExNCwxMiBAQAorIAk7OwogIAotICAgIFNpbWlsYXJ5IHdlIHBsYXkgZ2FtZXMgd2l0aCBJTlRFR0VSU0lfQ0xBU1MgdG8gdXNlIGNoZWFwZXIgU0ltb2RlIG1vdmVzCi0gICAgd2hlbmV2ZXIgcG9zc2libGUgKHVwcGVyIGhhbGYgZG9lcyBjb250YWluIHBhZGRpbmcpLiAgKi8KKyAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qKQorLQlUQVJHRVQ9TUlQUzsgVEFSR0VURElSPW1pcHMKKysJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKyAJOzsKKyAgIG1pcHMqLSotbGludXgqKQorIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorIAlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKKy0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCisrCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisgCTs7CisgCisgICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKK0BAIC0xNzAsNyArMTc2LDcgQEAKKyAgIEFDX01TR19FUlJPUihbImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LiJdKQorIGZpCisgCistQU1fQ09ORElUSU9OQUwoTUlQUywgdGVzdCB4JFRBUkdFVCA9IHhNSVBTKQorK0FNX0NPTkRJVElPTkFMKE1JUFMsW2V4cHIgeCRUQVJHRVQgOiAneE1JUFMnID4gL2Rldi9udWxsXSkKKyBBTV9DT05ESVRJT05BTChTUEFSQywgdGVzdCB4JFRBUkdFVCA9IHhTUEFSQykKKyBBTV9DT05ESVRJT05BTChYODYsIHRlc3QgeCRUQVJHRVQgPSB4WDg2KQorIEFNX0NPTkRJVElPTkFMKFg4Nl9GUkVFQlNELCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9GUkVFQlNEKQorQEAgLTQwMSw0ICs0MDcsOCBAQAorIAorIEFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvZmZpLmggTWFrZWZpbGUgdGVzdHN1aXRlL01ha2VmaWxlIG1hbi9NYWtlZmlsZSBsaWJmZmkucGMpCisgCisrQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oKQorKworK0FDX0NPTkZJR19GSUxFUyhmZmljb25maWcucHkpCisrCisgQUNfT1VUUFVUCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYmE3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZwpAQCAtMCwwICsxLDQxNDUgQEAKKzIwMTAtMDMtMTQgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L2ZmaS5jOiBVc2UgLyogLi4uICovIGNvbW1lbnQgc3R5bGUuCisKKzIwMTAtMDEtMDcgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAxCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIFtfX2FscGhhX18gJiYgX19vc2ZfX10gKFBSSWRMTCwKKwlQUkl1TEwsIFBSSWQ2NCwgUFJJdTY0LCBQUkl1UFRSKTogRGVmaW5lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogQWRkIC1Xbm8tZm9ybWF0IG9uCisJYWxwaGEqLWRlYy1vc2YqLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdAorCU1BUF9GQUlMRUQgdG8gY2hhciAqLgorCisyMDEwLTAxLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL21pcHMvbjMyLlM6IFVzZSAuYWJpY2FsbHMgYW5kIC5laF9mcmFtZSB3aXRoIF9fR05VQ19fLgorCisyMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgZm9yIGxpYmZmaSAzLjAuOS4KKworMjAwOS0xMi0yNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9MT05HX0RPVUJMRSk6IERlZmluZSBmb3IgbWlwcyB3aGVuCisJYXBwcm9wcmlhdGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogTWFyayBhcyB4ZmFpbCBmb3IKKwlhdnIzMiotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogRGl0dG8uCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IENvbmRpdGlvbmFsbHkgaW5jbHVkZSBzdGRpbnQuaAorCWFuZCBpbnR0eXBlcy5oLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IERpdHRvLgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLW9wZW5ic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBMaW5rCisJb3BlbmJzZCBwcm9ncmFtcyB3aXRoIC1scHRocmVhZC4KKworMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IFJlbW92ZSB4ZmFpbCBmb3IKKwltaXBzKi0qLSogYW5kIGFybSotKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogUmVtb3ZlIHhmYWlsIGZvciBhcm0qLSotKi4KKworMjAwOS0xMi0zMSAgS2F5IFRpZXR6ICA8a3RpZXR6NzBAZ29vZ2xlbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUnVMTCk6IEZpeAorCWRlZmluaXRpb25zLgorCisyMDA5LTEyLTMxICBDYXJsbyBCcmFtaW5pICA8Y2FybG8uYnJhbWl4QGxpYmVyby5pdD4KKworCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBEZWZpbmUgZm9yIHdpbmRvd3MgaG9zdHMuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgQU1fTFRMREZMQUdTLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMzEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBCbGFrZSBDaGFmZmluLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTmV3IHRlc3QgY2FzZSBmcm9tIEJsYWtlCisJQ2hhZmZpbiBAIEFwcGxlLgorCisyMDA5LTEyLTI4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IENvcHkgYWJpIGFuZCBuYXJncyB0bworCWxvY2FsIHZhcmlhYmxlcy4KKwkoYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBpdC4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBEZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKwkqIHNyYy9jbG9zdXJlcy5jOiBSZW1vdmUgdGhlIEZGSV9NTUFQX0VYRUNfV1JJVCBkZWZpbml0aW9uIGZvcgorCVNvbGFyaXMveDg2LgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFkdmFuY2UgaW50YXJnX2NvdW50CisJd2hlbiBhIGZsb2F0IGFyZ3VtZW50cyBpcyBwYXNzZWQgaW4gbWVtb3J5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IE1hcmsgZ2VuZXJhbCByZWdpc3RlcnMgYXMgdXNlZCB1cCB3aGVuCisJYSA2NGJpdCBvciBzb2Z0LWZsb2F0IGxvbmcgZG91YmxlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBtZW1vcnkuCisKKzIwMDktMTItMjUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBtYW4vZmZpX2NhbGwuMzogRml4ICNpbmNsdWRlIGluIGV4YW1wbGVzLgorCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgZGlyY2F0ZWdvcnkuCisKKzIwMDktMTItMjUgIEZyYW5rIEV2ZXJkaWogPGYucC54LmV2ZXJkaWpAdHVkZWxmdC5ubD4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUGxhY2VkICdfX0dOVUNfXycgaWZkZWYgYXJvdW5kCisJJ19fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKScgaW4gZmZpX2Nsb3N1cmUsIGZpeGVzIGNvbXBpbGUgZm9yCisJSVJJWCBNSVBTUHJvIGM5OS4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBBZGRlZCAnX19zZ2knIGRlZmluZSB0byBub24KKwknX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwKKwlmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkICdkZWZpbmVkKF9NSVBTRUIpJyB0byBCRSBjaGVjay4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQKKwlGRklfTE9OR0RPVUJMRSBzdXBwb3J0IGFuZCBhbGlnbm1lbnQoTjMyIG9ubHkpLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENvcnJlY3RlZCAnI2luY2x1ZGUgPHNnaWRlZnMuaD4nIGZvciBJUklYIGFuZAorCWZpeGVkIG5vbiAnX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgorCSogc3JjL21pcHMvbjMyLlM6IFB1dCAnI2lmZGVmIGxpbnV4JyBhcm91bmQgJy5hYmljYWxscycgYW5kICcuZWhfZnJhbWUnCisJc2luY2UgdGhleSBhcmUgTGludXgvR05VIEFzc2VtYmxlciBzcGVjaWZpYy4KKworMjAwOS0xMi0yNSAgQnJhZGxleSBTbWl0aCAgPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKworCSogY29uZmlndXJlLmFjLCBNYWtlZmlsZS5hbSwgc3JjL2F2cjMyL2ZmaS5jLAorCXNyYy9hdnIzMi9mZml0YXJnZXQuaCwKKwlzcmMvYXZyMzIvc3lzdi5TOiBBZGQgQVZSMzIgcG9ydC4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDktMTItMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogTWFrZSBpPzg2IGJ1aWxkIG9uIEZyZWVCU0QgYW5kIE9wZW5CU0QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMTItMTUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFBBIEhQLVVYLgorCisyMDA5LTEyLTEzICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiBzcmMvcGEvZmZpLmMgKGZmaV9jbG9zdXJlX2lubmVyX3BhMzIpOiBIYW5kbGUgRkZJX1RZUEVfTE9OR0RPVUJMRQorCXR5cGUgb24gSFAtVVguCisKKzIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBQcm9wZXJseSBhbGlnbiAnbG9uZworCWRvdWJsZScgYXJndW1lbnRzLgorCisyMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBTb2xhcmlzIDwgMTAuCisKKzIwMDktMTItMTAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQwNzAwCisJKiBzcmMvY2xvc3VyZXMuYyBbWDg2XzY0ICYmIF9fc3VuX18gJiYgX19zdnI0X19dCisJKEZGSV9NTUFQX0VYRUNfV1JJVCk6IERlZmluZS4KKworMjAwOS0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcyotKi0qCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogU2FtZS4KKworMjAwOS0xMi0wNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TIChsaWJmZmlfY2xvc3VyZV9BU00pOiBGaXggdGFibGVqdW1wCisJdHlwby4KKworMjAwOS0xMi0wNSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogVXBkYXRlIEFJWDMyIGNvZGUgdG8gYmUgY29uc2lzdGVudCB3aXRoIEFJWDY0CisJY29kZS4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFNhbWUuCisKKzIwMDktMTItMDUgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW9yZ2FuaXplIDY0LWJpdCBjb2RlIHRvIG1hdGNoCisJbGludXg2NF9jbG9zdXJlLlMuCisKKzIwMDktMTItMDQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHNyYy94ODYvZmZpNjQuYyAoY2xhc3NpZnlfYXJndW1lbnQpOiBVcGRhdGUgZnJvbQorCWdjYy9jb25maWcvaTM4Ni9pMzg2LmMuCisJKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IERvIG5vdCB1c2UgdGhlIGFkZHJlc3Mgb2YgdHdvIGNvbnNlY3V0aXZlCisJU1NFIHJlZ2lzdGVycyBkaXJlY3RseS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYyAobWFpbik6IFJlbW92ZSB4ZmFpbAorCWZvciB4ODZfNjQgbGludXggdGFyZ2V0cy4KKworMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBJbmNyZW1lbnQKKwlwZnIgZm9yIGxvbmcgZG91YmxlIHNwbGl0IGJldHdlZW4gZnByMTMgYW5kIHN0YWNrLgorCisyMDA5LTEyLTAzICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEluY3JlbWVudCBuZXh0X2FyZyBhbmQKKwlmcGFyZ19jb3VudCB0d2ljZSBmb3IgbG9uZyBkb3VibGUuCisKKzIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCVBSIGxpYmZmaS80MjI0MworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIGV4dHJhIHBhcmVudGhlc2VzLgorCisyMDA5LTEyLTAzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IEZpeCBmb3JtYXQgc3RyaW5nLgorCVJlbW92ZSB4ZmFpbHMgZm9yIHg4NiBsaW51eCB0YXJnZXRzLgorCisyMDA5LTEyLTAyICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEZpeCB0eXBvIGluIElOVDY0CisJY2FzZS4KKworMjAwOS0xMi0wMSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogQ29udmVydCB0byBtb3JlIHN0YW5kYXJkCisJcmVnaXN0ZXIgdXNhZ2UuICBDYWxsIGZmaV9wcmVwX2FyZ3MgZGlyZWN0bHkuICBBZGQgbG9uZyBkb3VibGUKKwlyZXR1cm4gdmFsdWUgc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERvdWJsZSBhcmcgaW5jcmVtZW50CisJYXBwbGllcyB0byBGRklfVFlQRV9ET1VCTEUuICBDb3JyZWN0IGZwcl9iYXNlIGluY3JlbWVudCB0eXBvLgorCVNlcGFyYXRlIEZGSV9UWVBFX1NJTlQzMiBhbmQgRkZJX1RZUEVfVUlOVDMyIGNhc2VzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IE9ubHkgMTYgYnl0ZSBzdGFjayBhbGlnbm1lbnQgaW4gNjQgYml0CisJbW9kZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFJlbW92ZSBuZiBhbmQgbmcgY291bnRlcnMuICBNb3ZlIHRlbXAKKwlpbnRvIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBNYWludGFpbiAxNiBieXRlIHN0YWNrIGFsaWdubWVudC4KKwlBbGxvY2F0ZSByZXN1bHQgYXJlYSBiZXR3ZWVuIHBhcmFtcyBhbmQgRlBScy4KKworMjAwOS0xMS0zMCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJUFIgdGFyZ2V0LzM1NDg0CisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQzY0KTogRGVmaW5lIGZvciBQUEM2NCBMaW51eCBhbmQKKwlBSVg2NC4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgorCShmZmlfY2xvc3VyZV9BU00pOiBVc2UgZXh0c2IsIGxoYSBhbmQgZGlzcGxhbWVudCBhZGRyZXNzZXMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbXBsZW1lbnQgQUlYNjQKKwlzdXBwb3J0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhbWUuCisJKGZmaV9jYWxsKTogU2FtZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IFNhbWUuCisKKzIwMDktMTEtMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvNDE5MDgKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBOZXcgdGVzdC4KKworMjAwOS0wOS0yOCAgS2FpIFRpZXR6ICA8a2FpLnRpZXR6QG9uZXZpc2lvbi5jb20+CisKKwkqIHNyYy94ODYvd2luNjQuUyAoX2ZmaV9jYWxsX3dpbjY0IHN0YWNrKTogUmVtb3ZlIGZvciBnbnUKKwlhc3NlbWJseSB2ZXJzaW9uIHVzZSBvZiBfX19jaGtzdGsuCisKKzIwMDktMDktMjMgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJUFIgbGliZmZpLzQwMjQyLCBQUiBsaWJmZmkvNDE0NDMKKwkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcnMKKwlfX0FSTV9BUkNIXzZUMl9fLCBfX0FSTV9BUkNIXzZNX18sIF9fQVJNX0FSQ0hfN19fLAorCV9fQVJNX0FSQ0hfN0FfXywgX19BUk1fQVJDSF83Ul9fLCBfX0FSTV9BUkNIXzdNX18uCisJQ2hhbmdlIHRoZSBjb25kaXRpb25hbHMgdG8gX19TT0ZURlBfXyB8fCBfX0FSTV9FQUJJX18KKwlmb3IgLW1mbG9hdC1hYmk9c29mdGZwIHRvIHdvcmsuCisKKzIwMDktMDktMTcgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMgKHN0cmlrZXMgYWdhaW4pCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfRlJFRUJTRCB0bworCWVuYWJsZSBwcm9wZXIgZXh0ZW5zaW9uIG9uIGNoYXIgYW5kIHNob3J0LgorCisyMDA5LTA5LTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFJlbW92ZSBzcGVjaWFsCisJaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQsCisJRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9TT0ZUKTogTmV3IGRlZmluZXMuCisJKEZGSV9OMzJfU09GVF9GTE9BVCwgRkZJX042NF9TT0ZUX0ZMT0FUKTogTmV3IGZmaV9hYmkgZW51bWVyYXRpb25zLgorCShlbnVtIGZmaV9hYmkpOiBTZXQgRkZJX0RFRkFVTFRfQUJJIGZvciBzb2Z0LWZsb2F0LgorCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBoYW5kbGluZyBmb3Igc29mdC1mbG9hdAorCXN0cnVjdHVyZSBhbmQgcG9pbnRlciByZXR1cm5zLgorCShmZmlfY2xvc3VyZV9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHBvaW50ZXIgcmV0dXJucy4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MsCisJY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IEhhbmRsZSBzb2Z0LWZsb2F0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6ICBIYW5kbGUgc29mdC1mbG9hdCwgZml4IHBvaW50ZXIgaGFuZGxpbmcuCisJKGZmaV9jYWxsX04zMik6IERlY2xhcmUgcHJvcGVyIGFyZ3VtZW50IHR5cGVzLgorCShmZmlfY2FsbCwgY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEhhbmRsZQorCXNvZnQtZmxvYXQuCisKKzIwMDktMDgtMjQgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJFUkVRKTogQnVtcCB0byAyLjY0LgorCisyMDA5LTA4LTIyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBNYWtlZmlsZS5hbSAoaW5zdGFsbC1odG1sLCBpbnN0YWxsLXBkZik6IFJlbW92ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDktMDctMzAgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZS5hYyAoX0FDX0FSR19WQVJfUFJFQ0lPVVMpOiBVc2UgbTRfcmVuYW1lX2ZvcmNlLgorCisyMDA5LTA3LTI0ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCVBSIGxpYmZmaS80MDgwNworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBbHNvIHVzZSBzaWduL3plcm8tZXh0ZW5kaW5nCisJcmV0dXJuIHR5cGVzIGZvciBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF9TWVNWKTogSGFuZGxlIG9taXR0ZWQgcmV0dXJuIHR5cGVzLgorCShfZmZpX2NhbGxfU1REQ0FMTCwgX2ZmaV9jbG9zdXJlX1NZU1YsIF9mZmlfY2xvc3VyZV9yYXdfU1lTViwKKwlfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6IExpa2V3aXNlLgorCisJKiBzcmMvY2xvc3VyZXMuYyAoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lIHRvIGNvbnN0IDAgZm9yIEN5Z3dpbi4KKwkoZGxtbWFwLCBkbG11bm1hcCk6IEFsc28gdXNlIHRoZXNlIGZ1bmN0aW9ucyBvbiBDeWd3aW4uCisKKzIwMDktMDctMTEgIFJpY2hhcmQgU2FuZGlmb3JkICA8cmRzYW5kaWZvcmRAZ29vZ2xlbWFpbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2OTkKKwlQUiB0ZXN0c3VpdGUvNDA3MDcKKwlQUiB0ZXN0c3VpdGUvNDA3MDkKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmV2ZXJ0IDIwMDktMDctMDIsIDIwMDktMDctMDEgYW5kCisJMjAwOS0wNi0zMCBjb21taXRzLgorCisyMDA5LTA3LTAxICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBTZXQgbGRfbGlicmFyeV9wYXRoCisJdG8gIiIgYmVmb3JlIGFkZGluZyBwYXRocy4gIChUaGlzIHJlaW5zdGF0ZXMgYW4gYXNzaWdubWVudCB0aGF0CisJd2FzIHJlbW92ZWQgYnkgbXkgMjAwOS0wNi0zMCBjb21taXQsIGJ1dCBjaGFuZ2VzIHRoZSBpbml0aWFsCisJdmFsdWUgZnJvbSAiLiIgdG8gIiIuKQorCisyMDA5LTA3LTAxICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvNDA2MDEKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBQcm9wZXJseSBzZXQKKwlnY2NkaXIuICBBZGp1c3QgbGRfbGlicmFyeV9wYXRoIGZvciBnY2Mgb25seSBpZiBnY2NkaXIgaXNuJ3QKKwllbXB0eS4KKworMjAwOS0wNi0zMCAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogRG9uJ3QgYWRkICIuIgorCXRvIGxkX2xpYnJhcnlfcGF0aC4gIFVzZSBhZGRfcGF0aC4gIEFkZCBqdXN0IGZpbmRfbGliZ2NjX3MKKwl0byBsZF9saWJyYXJ5X3BhdGgsIG5vdCBldmVyeSBsaWJnY2MgbXVsdGlsaWIgZGlyZWN0b3J5LgorCisyMDA5LTA2LTE2ICBXaW0gTGV3aXMgIDx3aW1sQGhoaGgub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQXZvaWQgY2xvYmJlcmluZyBjcjMgYW5kIGNyNCwgd2hpY2ggYXJlCisJc3VwcG9zZWQgdG8gYmUgY2FsbGVlLXNhdmVkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKTogRml4IG92ZXJydW4gb2YKKwlyZXR1cm4gYnVmZmVyIGZvciBvZGQtc2l6ZSBzdHJ1Y3RzLgorCisyMDA5LTA2LTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgbGliZmZpLzQwNDQ0CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEFkZAorCWFsbG93X3N0YWNrX2V4ZWN1dGUgZm9yIERhcndpbi4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoVEFSR0VURElSKTogQWRkIG1pc3NpbmcgYmxhbmsgbGluZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUkl1TEwpOiBEZWZpbmUuCisKKzIwMDktMDYtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IHhmYWlsIGV2ZXJ5d2hlcmUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGluZm9fVEVYSU5GT1MuCisKKzIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBDaGFuZ2VMb2cubGliZmZpOiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0CisJc3BlY2lmaWVycy4KKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogaW5jbHVkZSBzdGRpbnQuaC4KKworMjAwOS0wNi0xMSAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBNYWtlZmlsZS5hbSwKKwljb25maWd1cmUuYWMsCisJaW5jbHVkZS9mZmkuaC5pbiwKKwlpbmNsdWRlL2ZmaV9jb21tb24uaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvZGxtYWxsb2MuYywKKwlzcmMveDg2L2ZmaS5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW42NC5TIChuZXcpLAorCVJFQURNRTogQWRkZWQgd2luNjQgc3VwcG9ydCAobWluZ3cgb3IgTVNWQykKKwkqIE1ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW4sCisJbWFuL01ha2VmaWxlLmluLAorCXRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKKwljb25maWd1cmUsCisJYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQKKwkqIGx0Y2YtYy5zaDogcHJvcGVybHkgZXNjYXBlIGN5Z3dpbi93MzIgcGF0aAorCSogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogRml4IGZpbGVuYW1lIGluIGNvbW1lbnQuCisJKiBzcmMveDg2L3dpbjMyLlM6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZAorCW9mIGNoZWNraW5nIGZvciBNTUFQLiAgVXNlIGludHB0cl90IGluc3RlYWQgb2YgbG9uZyBjYXN0cy4KKworMjAwOS0wNi0xMSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWwgc2gqLSotbGludXgtKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWwgc2gqLSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCisKKzIwMDktMDYtMDkgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZyZWVic2QuUzogQWRkIG1pc3NpbmcgZmlsZS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjg6CisKKwkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCisJKiBkb2MvbGliZmZpLmluZm86IExpa2V3aXNlLgorCSogZG9jL3N0YW1wLXZ0aTogTGlrZXdpc2UuCisJKiBtYW4vTWFrZWZpbGUuYW06IE5ldyBmaWxlLgorCSogbWFuL2ZmaV9jYWxsLjM6IE5ldyBmaWxlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2RhcndpbjY0LlMsCisJc3JjL2RsbWFsbG9jLmMuCisJKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBYODZfRlJFRUJTRC4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjguCisJcGFyaXNjKi0qLWxpbnV4KjogQWRkLgorCWkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKjogQWRkLgorCXBvd2VycGMtKi1iZW9zKjogQWRkLgorCUFNX0NPTkRJVElPTkFMIFg4Nl9GUkVFQlNEOiBBZGQuCisJQUNfQ09ORklHX0ZJTEVTOiBBZGQgbWFuL01ha2VmaWxlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfRk4pOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogSW1wb3J0IGZyb20gbGliZmZpIDMuMC44LgorCisyMDA5LTA2LTA4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IEFkZCB4ZmFpbHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogQWRkIHhmYWlsIHg4Nl82NC0qLWxpbnV4LSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IEFkZCB4ZmFpbHMuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEFkZCBfX1VOVVNFRF9fIHRvIGFyZ3MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiAgTGlrZXdpc2UuCisKKzIwMDgtMTItMjYgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBtYXJrIGV4cGVjdGVkCisJZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKworMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCisJcG9pbnRlciB0byBpbnRlZ2VyIChpbnRwdHJfdCkuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogZGlzYWJsZSBmb3Igd2luNjQuCisKKzIwMDgtMDctMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQ2xlYW4gdXAgZmFpbHVyZXMgZnJvbQorCWNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgQmxha2UgQ2hhZmZpbgorCSAgICBob3NAdGFtYW5lZ2kub3JnCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCisKKzIwMDktMDYtMDUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L2ZmaS5jOiBNZXJnZSBzdGRjYWxsIGNoYW5nZXMgZnJvbQorCWxpYmZmaS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvd2luMzIuUywgc3JjL3g4Ni9mZmkuYzogQmFjayBvdXQKKwlzdGRjYWxsIGNoYW5nZXMuCisKKzIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCSAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKTogQ2hhbmdlIEMrKyBjb21tZW50IHRvIEMKKwljb21tZW50LgorCisyMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgorCSAgb2Zmc2V0IGJhc2VkIG9uIGNvZGUgcG9pbnRlciwgbm90IGRhdGEgcG9pbnRlci4KKworMjAwOC0wMS0zMSAgVGltb3RoeSBXYWxsIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYzogQWRkIHRlc3QgZm9yIHN0ZGNhbGwKKwljbG9zdXJlcy4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEluY3JlYXNlIHNpemUgb2YgdHJhbXBvbGluZSBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni93aW4zMi5TOiBBZGQgYXNzZW1ibHkgZm9yIHN0ZGNhbGwgY2xvc3VyZS4KKwkqIHNyYy94ODYvZmZpLmM6IEluaXRpYWxpemUgc3RkY2FsbCBjbG9zdXJlIHRyYW1wb2xpbmUuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogSW5zZXJ0IGxpY2VuY2UgaGVhZGVyLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKworCSogc3JjL3NoNjQvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCisJKiBzcmMvYWxwaGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2FscGhhL29zZi5TOiBMaWtld2lzZS4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3MzOTAvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9ocHV4MzIuUzogTGlrZXdpc2UuCisJKiBzcmMvaWE2NC91bml4LlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisJRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlpbmNsdWRlL2ZmaS5oLmluLAorCXNyYy9hcm0vZmZpdGFyZ2V0LmgsCisJc3JjL2FybS9mZmkuYywKKwlzcmMvYXJtL3N5c3YuUywKKwlzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvY2xvc3VyZXMuYywKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZmkuYywKKwlzcmMvc2g2NC9zeXN2LlMsCisJc3JjL3R5cGVzLmMsCisJc3JjL3g4Ni9mZmk2NC5jLAorCXNyYy94ODYvZmZpdGFyZ2V0LmgsCisJc3JjL3g4Ni93aW4zMi5TLAorCXNyYy94ODYvZGFyd2luLlMsCisJc3JjL3g4Ni9mZmkuYywKKwlzcmMveDg2L3N5c3YuUywKKwlzcmMveDg2L3VuaXg2NC5TLAorCXNyYy9hbHBoYS9mZml0YXJnZXQuaCwKKwlzcmMvYWxwaGEvZmZpLmMsCisJc3JjL2FscGhhL29zZi5TLAorCXNyYy9tNjhrL2ZmaXRhcmdldC5oLAorCXNyYy9mcnYvZmZpdGFyZ2V0LmgsCisJc3JjL2Zydi9mZmkuYywKKwlzcmMvczM5MC9mZml0YXJnZXQuaCwKKwlzcmMvczM5MC9zeXN2LlMsCisJc3JjL2NyaXMvZmZpdGFyZ2V0LmgsCisJc3JjL3BhL2xpbnV4LlMsCisJc3JjL3BhL2ZmaXRhcmdldC5oLAorCXNyYy9wYS9mZmkuYywKKwlzcmMvcmF3X2FwaS5jLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L3VuaXguUywKKwlzcmMvaWE2NC9mZmkuYywKKwlzcmMvaWE2NC9pYTY0X2ZsYWdzLmgsCisJc3JjL2phdmFfcmF3X2FwaS5jLAorCXNyYy9kZWJ1Zy5jLAorCXNyYy9zcGFyYy92OS5TLAorCXNyYy9zcGFyYy9mZml0YXJnZXQuaCwKKwlzcmMvc3BhcmMvZmZpLmMsCisJc3JjL3NwYXJjL3Y4LlMsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsCisJc3JjL21pcHMvbjMyLlMsCisJc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvZmZpLmMsCisJc3JjL3ByZXBfY2lmLmMsCisJc3JjL3NoL2ZmaXRhcmdldC5oLAorCXNyYy9zaC9mZmkuYywKKwlzcmMvc2gvc3lzdi5TOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgorCisyMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6ICBOZXcgZnVuY3Rpb24uCisJKC5laF9mcmFtZSk6ICBBZGQgRkRFIGZvciBpdC4KKworMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogIEFsc28gY2hlY2sgaWYgYXNzZW1ibGVyIHN1cHBvcnRzIHBjLXJlbGF0aXZlCisJcmVsb2NzIG9uIFg4Nl9XSU4zMiB0YXJnZXRzLgorCSogY29uZmlndXJlOiAgUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX3ByZXBfYXJncyk6ICBEZWNsYXJlIGV4dGVybiwgbm90IGdsb2JhbC4KKwkoX2ZmaV9jYWxsX1NZU1YpOiAgQWRkIG1pc3NpbmcgZnVuY3Rpb24gdHlwZSBzeW1ib2wgLmRlZiBhbmQKKwlhZGQgRUggbWFya3VwIGxhYmVscy4KKwkoX2ZmaV9jYWxsX1NURENBTEwpOiAgTGlrZXdpc2UuCisJKF9mZmlfY2xvc3VyZV9TWVNWKTogIExpa2V3aXNlLgorCShfZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiAgTGlrZXdpc2UuCisJKC5laF9mcmFtZSk6ICBBZGQgaGFuZC1jcmFmdGVkIEVIIGRhdGEuCisKKzIwMDktMDQtMDkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IENoYW5nZSBjb3B5cmlnaHQgaGVhZGVyIHRvIHJlZmVyIHRvCisJdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gcG9pbnQgcmVhZGVycworCWF0IHRoZSBDT1BZSU5HMyBmaWxlIGFuZCB0aGUgRlNGJ3MgbGljZW5zZSB3ZWIgcGFnZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorCisyMDA5LTAzLTAxICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMTItMTggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzI2MDQ4CisJKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfWDg2X1BDUkVMKTogTmV3IHRlc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy94ODYvc3lzdi5TIFshRkZJX05PX1JBV19BUEldOiBQcmVjYWxjdWxhdGUKKwlSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VULCBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VULAorCVJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgZm9yIHRoZSBTb2xhcmlzIDEwL3g4NiBhc3NlbWJsZXIuCisJKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKC5Mc3RvcmVfdGFibGUpOiBNb3ZlIHRvIC50ZXh0IHNlY3Rpb24uCisJKC5MbG9hZF90YWJsZSk6IExpa2V3aXNlLgorCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCisKKzIwMDgtMTItMTggIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0xMS0yMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBzdXBwb3J0IGZvcgorCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IHJldHVybiB2YWx1ZXMuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfdjgpOiBMaWtld2lzZS4KKworMjAwOC0wOS0yNiAgUGV0ZXIgTydHb3JtYW4gIDxwb2dtYUB0aGV3cml0dGVud29yZC5jb20+CisJICAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIG5ldyBsaWJ0b29sLgorCSogTWFrZWZpbGUuaW46IERpdHRvLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogRGl0dG8uCisJKiBhY2xvY2FsLm00OiBEaXR0by4KKworMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KKwlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKKwlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgorCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFR1cm4gSU5TTiBpbnRvIGFuIHVuc2lnbmVkCisJaW50LgorCisyMDA4LTA2LTE3ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA4LTA2LTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogY29uZmlndXJlLmFjIChwYXJpc2MqLSotbGludXgqLCBwb3dlcnBjLSotc3lzdiosCisJcG93ZXJwYy0qLWJlb3MqKTogUmVtb3ZlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTA1LTA5ICBKdWxpYW4gQnJvd24gIDxqdWxpYW5AY29kZXNvdXJjZXJ5LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKExUTERGTEFHUyk6IE5ldy4KKwkobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgYWJvdmUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOC0wNC0xOCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCVBSIGJvb3RzdHJhcC8zNTQ1NworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMy0yNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTAzLTI2ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgorCisJKiBzcmMvYXJtL3N5c3YuUzogRml4IEFSTSBjb21tZW50IG1hcmtlci4KKworMjAwOC0wMy0yNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKwkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDMtMTYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDA4LTAyLTEyICBCam9lcm4gS29lbmlnICA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1mcmVlYnNkKiB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDEtMzAgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmZmaS8zNDYxMgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBQb3AgNCBieXRlIGZyb20gc3RhY2sgd2hlbgorCXJldHVybmluZyBzdHJ1Y3QuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogQWRkICItTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIiCisJdGVzdHMuCisKKzIwMDgtMDEtMjQgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAxLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCB0aGlua28uCisKKzIwMDgtMDEtMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgZm9yIFg4Nl9EQVJXSU4uCisJVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKwlIYW5kbGUgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzIHdpdGggc3BlY2lhbCBjaWYtPmZsYWdzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIHNwZWNpYWwgdHlwZXMgZm9yIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cy4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCSogc3JjL3g4Ni9kYXJ3aW4uUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG8gdXNlIGEganVtcCB0YWJsZSBsaWtlCisJc3lzdi5TCisJUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KKwlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGZvciBpbnQ4LzE2LCBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKwlVcGRhdGVkIGNvcHlyaWdodCBpbmZvLgorCisyMDA3LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogIFJlcGxhY2UgZGFkZCB3aXRoIEFERFUsIGRzdWIgd2l0aAorCVNVQlUsIGFkZCB3aXRoIEFERFUgYW5kIHVzZSBzbWFsbGVyIGNvZGUgc2VxdWVuY2VzLgorCisyMDA3LTEyLTA3ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgbG9uZyBkb3VibGUgcmV0dXJuCisJdHlwZS4KKworMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBpZiBub3QJYWxyZWFkeQorCWRlZmluZWQuCisJKGZmaV9qYXZhX3Jhdyk6IE5ldyB0eXBlZGVmLgorCShmZmlfamF2YV9yYXdfY2FsbCwgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3LAorCWZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSBwYXJhbWV0ZXIgdHlwZXMgZnJvbSBmZmlfcmF3IHRvCisJZmZpX2phdmFfcmF3LgorCShmZmlfamF2YV9yYXdfY2xvc3VyZSkgOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiAgUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoCisJRkZJX1NJWkVPRl9KQVZBX1JBVy4KKwkoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwlSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGggRkZJX1NJWkVPRl9KQVZBX1JBVy4gVXNlCisJc2l6ZW9mKGZmaV9qYXZhX3JhdykgZm9yIGFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFNhbWUuCisJKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUgorCWlmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNC4KKwkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFNhbWUuCisJKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KKwkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBTYW1lLgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYywgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IENoYW5nZQorCXBhcmFtZXRlciB0eXBlcy4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGZvciBOMzIgQUJJLgorCisyMDA3LTEyLTA2ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2Nsb3N1cmVfTjMyKTogVXNlIDY0LWJpdCBhZGQgaW5zdHJ1Y3Rpb24gb24KKwlwb2ludGVyIHZhbHVlcy4KKworMjAwNy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS8zMTkzNworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEludHJvZHVjZSBuZXcgQUJJIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULgorCUFkZCBsb2NhbCBGRklfVFlQRV9VSU5UMTI4IHRvIGhhbmRsZSBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIF9fTk9fRlBSU19fIGFuZCBub3QgYW5kCisJc2V0IHRoZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgYWNjb3JkaW5nIHRvLgorCUFkZCBzdXBwb3J0IGZvciBwb3RlbnRpYWwgc29mdC1mbG9hdCBzdXBwb3J0IHVuZGVyIGhhcmQtZmxvYXQKKwlhcmNoaXRlY3R1cmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFNldCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgdG8gMCBpbiBjYXNlIG9mCisJRkZJX0xJTlVYX1NPRlRfRkxPQVQsIGhhbmRsZSBmbG9hdCwgZG91YmxlcyBhbmQgbG9uZy1kb3VibGVzIGFjY29yZGluZworCXRvIHRoZSBGRklfTElOVVhfU09GVF9GTE9BVCBBQkkuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBNYWtlIHN1cmUgbm90IHRvIHN0b3JlIGZsb2F0L2RvdWJsZQorCW9uIGFyY2hzIHdoZXJlIF9fTk9fRlBSU19fIGlzIHRydWUuCisJQWRkIEZGSV9UWVBFX1VJTlQxMjggc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA3LTExLTI1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvY2xvc3VyZXMuYzogTW92ZSBkZWZpbnRpb24gb2YgTUFZQkVfVU5VU0VEIGZyb20gaGVyZSB0byAuLi4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiAuLi4gaGVyZS4KKwlVcGRhdGUgY29weXJpZ2h0LgorCisyMDA3LTExLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExvYWQgY29ycmVjdCBjciB0byBjb21wYXJlIGlmIHdlIGhhdmUgbG9uZyBkb3VibGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBhIGNvbW1lbnQgdG8gc2hvdyB3aGljaCBwYXJ0IGdvZXMgaW50byBjcjYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jOiBOZXcgdGVzdC4KKworMjAwNy0wOS0wNCAgICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChVTldJTkQpOiBOZXcuCisJKFdob2xlIGZpbGUpOiBDb25kaXRpb25hbGx5IGNvbXBpbGUgdW53aW5kZXIgZGlyZWN0aXZlcy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBBZGQgdW53aW5kZXIgZGlyZWN0aXZlcy4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFsaWduIHN0cnVjdHMgYnkgYXQgbGVhc3QgNCBieXRlcy4KKwlPbmx5IHRyZWF0IHIwIGFzIGEgc3RydWN0IGFkZHJlc3MgaWYgd2UncmUgYWN0dWFsbHkgcmV0dXJuaW5nIGEKKwlzdHJ1Y3QgYnkgYWRkcmVzcy4KKwlPbmx5IGNvcHkgdGhlIGJ5dGVzIHRoYXQgYXJlIGFjdHVhbGx5IHdpdGhpbiBhIHN0cnVjdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBIENvbXBvc2l0ZSBUeXBlIG5vdCBsYXJnZXIgdGhhbiA0IGJ5dGVzCisJaXMgcmV0dXJuZWQgaW4gcjAsIG5vdCBwYXNzZWQgYnkgYWRkcmVzcy4KKwkoZmZpX2NhbGwpOiBBbGxvY2F0ZSBhIHdvcmQtc2l6ZWQgdGVtcG9yYXJ5IGZvciB0aGUgY2FzZSB3aGVyZQorCWEgY29tcG9zaXRlIGlzIHJldHVybmVkIGluIHIwLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBBbGlnbiBhcyBuZWNlc3NhcnkuCisKKzIwMDctMDgtMDUgIFN0ZXZlbiBOZXdidXJ5ICA8c19qX25ld2J1cnlAeWFob28uY28udWs+CisKKwkqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBVc2UgX19jbGVhcl9jYWNoZSBpbnN0ZWFkIG9mCisJZGlyZWN0bHkgdXNpbmcgdGhlIHN5c19jYWNoZWZsdXNoIHN5c2NhbGwuCisKKzIwMDctMDctMjcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBzb2Z0LWZsb2F0LgorCisyMDA3LTA5LTAzICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVW5pZnkgTUlQU19JUklYIGFuZCBNSVBTX0xJTlVYIGludG8gTUlQUy4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDctMDgtMjQgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2wuYzogTmV3IHRlc3QuCisKKzIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBSZW1vdmUgeGZhaWwgZm9yIG1pcHM2NCotKi0qLgorCisyMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZmZpLzI4MzEzCisJKiBjb25maWd1cmUuYWM6IERvbid0IHRyZWF0IG1pcHM2NCBhcyBhIHNwZWNpYWwgY2FzZS4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgbjMyLlMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUKKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKwkqIGZmaWNvbmZpZy5oLmluOiBEaXR0by4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChSRUdfTCwgUkVHX1MsIFNVQlUsIEFERFUsIFNSTCwgTEkpOiBJbmRlbnQuCisJKExBLCBFSF9GUkFNRV9BTElHTiwgRkRFX0FERFJfQllURVMpOiBOZXcgcHJlcHJvY2Vzc29yIG1hY3Jvcy4KKwkoRkZJX0RFRkFVTFRfQUJJKTogU2V0IGZvciBuNjQgY2FzZS4KKwkoRkZJX0NMT1NVUkVTLCBGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciBuMzIgYW5kIG42NCBjYXNlcy4KKwkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiBBZGQgZGVidWcgbWFjcm9zIGFuZCBsYWJlbHMgZm9yIEZERS4KKwkoZmZpX2Nsb3N1cmVfTjMyKTogTmV3IGZ1bmN0aW9uLgorCSguZWhfZnJhbWUpOiBOZXcgc2VjdGlvbgorCSogc3JjL21pcHMvbzMyLlM6IENsZWFuIHVwIGNvbW1lbnRzLgorCShmZmlfY2xvc3VyZV9PMzIpOiBQYXNzIGZmaV9jbG9zdXJlIHBhcmFtZXRlciBpbiAkMTIuCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIEZGSV9NSVBTX04zMiBpbnN0ZWFkIG9mCisJX01JUFNfU0lNID09IF9BQklOMzIgdGhyb3VnaG91dC4KKwkoRkZJX01JUFNfU1RPUF9IRVJFKTogTmV3LCB1c2UgaW4gcGxhY2Ugb2YKKwlmZmlfc3RvcF9oZXJlLgorCShmZmlfcHJlcF9hcmdzKTogVXNlIHVuc2lnbmVkIGxvbmcgdG8gaG9sZCBwb2ludGVyIHZhbHVlcy4gIFJld3JpdGUKKwl0byBzdXBwb3J0IG4zMi9uNjQgQUJJcy4KKwkoY2FsY19uMzJfc3RydWN0X2ZsYWdzKTogUmV3cml0ZS4KKwkoY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuICBSZXZlcnNlCisJcG9zaXRpb24gb2YgZmxhZyBiaXRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJld3JpdGUgbjMyIHBvcnRpb24uCisJKGZmaV9jYWxsKTogRW5hYmxlIGZvciBuNjQuICBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3Igc21hbGwgc3RydWN0dXJlCisJcmV0dXJuIHZhbHVlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgbjMyIGFuZCBuNjQgc3VwcG9ydC4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBBZGQgY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcuCisJKGNvcHlfc3RydWN0X04zMiwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBOZXcgZnVuY3Rpb25zLgorCisyMDA3LTA4LTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChmZmlfdHlwZV9teWxvbmcpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKG1haW4pOiBVc2UgY29ycmVjdCB0eXBlCisJc3BlY2lmaWVycy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAobWFpbik6IERpdHRvLgorCisyMDA3LTA4LTA3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRml4IHR5cG8gaW4gcHJldmlvdXMKKwljaGVja2luLgorCisyMDA3LTA4LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogSGFuZGxlIEZGSV9UWVBFX1VJTlQ4LAorCUZGSV9UWVBFX1NJTlQ4LCBGRklfVFlQRV9VSU5UMTYsIEZGSV9UWVBFX1NJTlQxNiwgRkZJX1RZUEVfVUlOVDMyLAorCUZGSV9UWVBFX1NJTlQzMi4KKworMjAwNy0wOC0wMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jIChtYWluKTogRGVmaW5lIHJldHVybiB0eXBlIGFzCisJZmZpX2FyZy4gIFVzZSBwcm9wZXIgcHJpbnRmIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorCisyMDA3LTA3LTMwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBpbiB4ODYgY2FzZSwgYWRkIGNvZGUgZm9yCisJc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFJld3JpdGUgdG86CisJVXNlIGEganVtcCB0YWJsZS4KKwlSZW1vdmUgY29kZSB0byBwb3AgYXJncyBmcm9tIHRoZSBzdGFjayBhZnRlciBjYWxsLgorCVNwZWNpYWwtY2FzZSBzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYyAobWFpbik6IFJldmVydC4KKworMjAwNy0wNy0yNiAgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNlLmRlPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBWZXJpZnkgY2FsbAorCXJlc3VsdCBhcyBzaWduZWQgY2hhciwgbm90IGZmaV9hcmcuCisKKzIwMDctMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGk/ODYtKi1zb2xhcmlzMi4xWzAtOV0pOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNy0xMSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmM6IERvbid0IGluY2x1ZGUgc3lzL2NhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIF9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlKCkgaW5zdGVhZCBvZgorCWNhY2hlZmx1c2goKS4KKworMjAwNy0wNS0xOCAgQXVyZWxpZW4gSmFybm8gIDxhdXJlbGllbkBhdXJlbDMyLm5ldD4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhanVzdGVkCisJZnJvbSAoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCisyMDA1LTEyLTMxICBQaGlsIEJsdW5kZWxsICA8cGJAcmVjaXZhLmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsIGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvYXJtL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisKKzIwMDctMDctMDMgIEFuZHJldyBIYWxleSAgPGFwaEBoZWRnZXMuYmlsbGdhdGxpZmYuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogRW5hYmxlIGZvciBBUk0uCisKKzIwMDctMDctMDUgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQuCisKKzIwMDctMDYtMDIgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNy0wNS0yMyAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAorCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KKwkqIHNyYy9tNjhrL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWLGZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0FTX0NGSV9QU0VVRE9fT1ApOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL202OGsvc3lzdi5TIChDRklfU1RBUlRQUk9DLENGSV9FTkRQUk9DLAorCUNGSV9PRkZTRVQsQ0ZJX0RFRl9DRkEpOiBOZXcgbWFjcm9zLgorCShmZmlfY2FsbF9TWVNWKTogQWRkIGNhbGxmcmFtZSBhbm5vdGF0aW9uLgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXgKKwludW1lcm91cyB0ZXN0IHN1aXRlIGZhaWx1cmVzLgorCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UuCisKKzIwMDctMDQtMTEgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQnJpbmcgdXAgdG8gZGF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL2Zydi9lYWJpLlM6IFJlbW92ZSBSQ1Mga2V5d29yZC4KKworMjAwNy0wNC0wNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBUaWR5IHRhcmdldCBjYXNlLgorCShIQVZFX0xPTkdfRE9VQkxFKTogQWxsb3cgdGhlIHRhcmdldCB0byBvdmVycmlkZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERvbid0IGRlZmluZSBmZmlfdHlwZV9mb28gaWYKKwlMSUJGRklfSElERV9CQVNJQ19UWVBFUyBpcyBkZWZpbmVkLgorCShmZmlfdHlwZV9sb25nZG91YmxlKTogSWYgbm90IEhBVkVfTE9OR19ET1VCTEUsIGRlZmluZQorCXRvIGZmaV90eXBlX2RvdWJsZS4KKwkqIHR5cGVzLmMgKExJQkZGSV9ISURFX0JBU0lDX1RZUEVTKTogRGVmaW5lLgorCShGRklfVFlQRURFRiwgZmZpX3R5cGVfdm9pZCk6IE1hcmsgdGhlIGRhdGEgY29uc3QuCisJKGZmaV90eXBlX2xvbmdkb3VibGUpOiBTcGVjaWFsIGNhc2UgZm9yIEFscGhhLiAgRG9uJ3QgZGVmaW5lCisJaWYgbG9uZyBkb3VibGUgPT0gZG91YmxlLgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBBc3NlcnQgdW5pcXVlIHZhbHVlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBpdCBhcyB0aGUgMTI4LWJpdCB0eXBlLgorCShmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLiAgTWFyayBoaWRkZW4uCisJKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCisJKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmggKEZGSV9MQVNUX0FCSSk6IFRpZHkgZGVmaW5pdGlvbi4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KKwkobG9hZF90YWJsZSk6IEhhbmRsZSAxMjgtYml0IGxvbmcgZG91YmxlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IEFkZCAtbWllZWUgZm9yIGFscGhhLgorCisyMDA3LTA0LTA2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMzE0OTE6CisJKiBSRUFETUU6IEZpeGVkIGJ1ZyBpbiBleGFtcGxlLgorCisyMDA3LTA0LTAzICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2Nsb3N1cmVzLmM6IEluY2x1ZGUgc3lzL3N0YXRmcy5oLgorCShfR05VX1NPVVJDRSk6IERlZmluZSBvbiBMaW51eC4KKwkoRkZJX01NQVBfRVhFQ19TRUxJTlVYKTogRGVmaW5lLgorCShzZWxpbnV4X2VuYWJsZWQpOiBOZXcgdmFyaWFibGUuCisJKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IE5ldyBmdW5jdGlvbi4KKwkoaXNfc2VsaW51eF9lbmFibGVkKTogRGVmaW5lLgorCShkbG1tYXApOiBVc2UgaXQuCisKKzIwMDctMDMtMjQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IE1hcmsgYXMgc3RhdGljLgorCVVzZSAndm9sYXRpbGUgZmxvYXQgc3VtJyB0byBjcmVhdGUgc3VtIG9mIGZsb2F0cyB0byBhdm9pZCBmYWxzZQorCW5lZ2F0aXZlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uIG9uIGl4ODYgdGFyZ2V0cy4KKwkobWFpbik6IERpdHRvLgorCisyMDA3LTAzLTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZsdXNoX2ljYWNoZSk6IEZpeCBsZWZ0LW92ZXIgZnJvbSBwcmV2aW91cworCXBhdGNoLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4gIEFkZCBuZWVkZWQgb25lcy4KKworMjAwNy0wMy0wNyAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9jbG9zdXJlX2FsbG9jLCBmZmlfY2xvc3VyZV9mcmVlKTogTmV3LgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IE5ldy4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogTmV3LgorCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KKwkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZmlsZS4KKwkqIHNyYy9kbG1hbGxvYy5jIFtGRklfTU1BUF9FWEVDX1dSSVRdIChzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpOgorCVJlcGxhY2Ugc2ZsYWdzIHdpdGggZXhlY19vZmZzZXQuCisJW0ZGSV9NTUFQX0VYRUNfV1JJVF0gKG1tYXBfZXhlY19vZmZzZXQsIGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0LAorCXN1Yl9zZWdtZW50X2V4ZWNfb2Zmc2V0KTogTmV3IG1hY3Jvcy4KKwkoZ2V0X3NlZ21lbnRfZmxhZ3MsIHNldF9zZWdtZW50X2ZsYWdzLCBjaGVja19zZWdtZW50X21lcmdlKTogTmV3CisJbWFjcm9zLgorCShpc19tbWFwcGVkX3NlZ21lbnQsIGlzX2V4dGVybl9zZWdtZW50KTogVXNlIGdldF9zZWdtZW50X2ZsYWdzLgorCShhZGRfc2VnbWVudCwgc3lzX2FsbG9jLCBjcmVhdGVfbXNwYWNlLCBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSwKKwlkZXN0cm95X21zcGFjZSk6IFVzZSBuZXcgbWFjcm9zLgorCShzeXNfYWxsb2MpOiBTaWxlbmNlIHdhcm5pbmcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgc3JjL2Nsb3N1cmVzLmMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIHNyYy9wcmVwX2NpZiBbRkZJX0NMT1NVUkVTXSAoZmZpX3ByZXBfY2xvc3VyZSk6IEltcGxlbWVudCBpbgorCXRlcm1zIG9mIGZmaV9wcmVwX2Nsb3N1cmVfbG9jLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQKKwlmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuICBSZS1pbXBsZW1lbnQgaW4gdGVybXMgb2YgdGhlCisJcmVuYW1lZCB2ZXJzaW9uLgorCSogc3JjL2phdmFfcmF3X2FwaSAoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZAorCWFkanVzdGVkIGZyb20uLi4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mCisJdGhlIHJlbmFtZWQgdmVyc2lvbi4KKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCSogc3JjL3BhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9jcmlzL2ZmaS5jOiBMaWtld2lzZS4gIEFkanVzdC4KKwkqIHNyYy9mcnYvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL21pcHMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9mZmk2NC5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogQWRqdXN0LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGFuZCBhZGp1c3RlZCBmcm9tLi4uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogLi4uIHRoaXMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW5hbWVkIGZyb20KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IC4uLiB0aGlzLgorCShmbHVzaF9pY2FjaGUpOiBBZGp1c3QuCisKKzIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBzcmMvZGxtYWxsb2MuYzogTmV3IGZpbGUsIGltcG9ydGVkIHZlcnNpb24gMi44LjMgb2YgRG91ZworCUxlYSdzIG1hbGxvYy4KKworMjAwNy0wMy0wMSAgQnJvb2tzIE1vc2VzICA8YnJvb2tzLm1vc2VzQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZHVtbXkgaW5zdGFsbC1wZGYgdGFyZ2V0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUKKworMjAwNy0wMi0xMyAgQW5kcmVhcyBLcmViYmVsICA8a3JlYmJlbDFAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2NpZl9tYWNoZGVwLAorCWZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCisyMDA3LTAyLTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogTW92ZSByZXN0b3JlIG9mIHIyCisJaW1tZWRpYXRlbHkgYWZ0ZXIgYmN0cmwgaW5zdHJ1Y3Rpb24uCisKKzIwMDctMDEtMTggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoYWxsLXJlY3Vyc2l2ZSwgaW5zdGFsbC1yZWN1cnNpdmUsCisJbW9zdGx5Y2xlYW4tcmVjdXJzaXZlLCBjbGVhbi1yZWN1cnNpdmUsIGRpc3RjbGVhbi1yZWN1cnNpdmUsCisJbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDYtMTItMTQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFRBUkdFVCBmb3IgeDg2XzY0LSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgcnVsZXMgZm9yIDY0LWJpdCBzb3VyY2VzCisJZm9yIFg4Nl9EQVJXSU4uCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBTZXQgdHJhbXBvbGluZSBzaXplIGZvciB4ODZfNjQtKi1kYXJ3aW4qLgorCSogc3JjL3g4Ni9kYXJ3aW42NC5TOiBOZXcgZmlsZSBmb3IgeDg2XzY0LSotZGFyd2luKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2M6IE5ldyB0ZXN0IGNhc2UgZm9yCisJZmZpX2NhbGwgb25seS4KKworMjAwNi0xMi0xMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlIHdpdGggYWNsb2NhbCAtSSAuLiBhcyB3cml0dGVuIGluIHRoZQorCU1ha2VmaWxlLmFtLgorCisyMDA2LTEwLTMxICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzIGZvcgorCURhcndpbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisKKzIwMDYtMTAtMTAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisJICAgIFNhbmRybyBUb2xhaW5pICA8dG9sYWluaUBsaWJlcm8uaXQ+CisKKwkqIGNvbmZpZ3VyZS5hYyBbaSo4Ni0qLWRhcndpbipdOiBTZXQgWDg2X0RBUldJTiBzeW1ib2wgYW5kCisJY29uZGl0aW9uYWwuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykgW1g4Nl9EQVJXSU5dOiBOZXcgY2FzZS4KKwkoRVhUUkFfRElTVCk6IEFkZCBzcmMveDg2L2Rhcndpbi5TLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCkgW1g4Nl9EQVJXSU5dOiBUcmVhdCBsaWtlCisJWDg2X1dJTjMyLCBhbmQgYWRkaXRpb25hbGx5IGFsaWduIHN0YWNrIHRvIDE2IGJ5dGVzLgorCSogc3JjL3g4Ni9kYXJ3aW4uUzogTmV3LCBiYXNlZCBvbiBzeXN2LlMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKSBbWDg2X0RBUldJTl06IEFsaWduID4gOC1ieXRlIHN0cnVjdHMuCisKKzIwMDYtMDktMTIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwlQUiBsaWJmZmkvMjM5MzUKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW06IEluc3RhbGwgYm90aCBmZmkuaCBhbmQgZmZpdGFyZ2V0LmggaW4KKwkkKGxpYmRpcikvZ2NjLyQodGFyZ2V0X2FsaWFzKS8kKGdjY192ZXJzaW9uKS9pbmNsdWRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZWQgZm9yIGF1dG9tYWtlIDEuOS42LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisyMDA2LTA4LTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChzdHJ1Y3QpOiBSZXZlcnQgYWNjaWRlbnRhbCBjb21taXQuCisKKzIwMDYtMDgtMTUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBMaWtld2lzZS4KKworMjAwNi0wNy0yNSAgVG9yc3RlbiBTY2hvZW5mZWxkICA8a2FmZmVldGlzY2hAZ214LmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfdHlwZV91bG9uZywgZmZpX3R5cGVfc2xvbmcpOiBEZWZpbmUgY29ycmVjdGx5CisJZm9yIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA2LTA3LTE5ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzLAorCXhmYWlsIHJlbWFpbnMgZm9yIG1pcHM2NC4KKworMjAwNi0wNS0yMyAgQ2FybG9zIE8nRG9uZWxsICA8Y2FybG9zQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgaW5zdGFsbC1odG1sIHRhcmdldC4gQWRkIGluc3RhbGwtaHRtbCB0byAuUEhPTlkKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDYtMDUtMTggIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHBhL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3BhMzIpOiBMb2FkIGZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyBmcm9tCisJc3RhY2sgc2xvdC4KKworMjAwNi0wNC0yMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBSRUFETUU6IFJlbW92ZSBub3RpY2UgYWJvdXQgJ0NyYXp5IENvbW1lbnRzJy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiBDbGVhbnVwIHdoaXRlIHNwYWNlcy4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTGlrZXdpc2UuCisJKiBzcmMvcHJlcF9jaWYuYzogTGlrZXdpc2UuCisJKiBzcmMvcmF3X2FwaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9mZml0ZXN0LmM6IERlbGV0ZS4gTm8gbG9uZ2VyIG5lZWRlZCwgYWxsIHRlc3QgY2FzZXMgbWlncmF0ZWQKKwl0byB0aGUgdGVzdHN1aXRlLgorCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCSogc3JjL3NoL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jOiBMaWtld2lzZS4KKworMjAwNi0wNC0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcGEvaHB1eDMyLlM6IENvcnJlY3QgdW53aW5kIG9mZnNldCBjYWxjdWxhdGlvbiBmb3IKKwlmZmlfY2xvc3VyZV9wYTMyLgorCSogc3JjL3BhL2xpbnV4LlM6IExpa2V3aXNlLgorCisyMDA2LTA0LTEyICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisKKwlQUiBsaWJnY2ovMjY0ODMKKwkqIHNyYy9pYTY0L2ZmaS5jIChzdGZfc3BpbGwsIGxkZl9maWxsKTogUmV3cml0ZSBhcyBtYWNyb3MuCisJKGhmYV90eXBlX2xvYWQpOiBDYWxsIHN0Zl9zcGlsbC4KKwkoaGZhX3R5cGVfc3RvcmUpOiBDYWxsIGxkZl9maWxsLgorCShmZmlfY2FsbCk6IEFkanVzdCBjYWxscyB0byBhYm92ZSByb3V0aW5lcy4gIEFkZCBsb2NhbCB0ZW1wcyBmb3IKKwltYWNybyByZXN1bHQuCisKKzIwMDYtMDQtMTAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUmVjb2duaXplIG11bHRpbGliCisJZGlyZWN0b3J5IG5hbWVzIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCisKKzIwMDYtMDQtMDcgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBOZXcgdGVzdGNhc2UuCisKKzIwMDYtMDQtMDUgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQV9IUFVYIHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBX0hQVVggcnVsZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IFJlbmFtZSBsaW51eCB0YXJnZXQgdG8gUEFfTElOVVguCisJQWRkIFBBX0hQVVggYW5kIFBBNjRfSFBVWC4KKwlSZW5hbWUgRkZJX0xJTlVYIEFCSSB0byBGRklfUEEzMiBBQkkuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIDMyLWJpdCBIUC1VWCB0YXJnZXRzLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogRGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDgpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMyk6IFJlZGVmaW5lLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYpOiBMaWtld2lzZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IExpa2V3aXNlLgorCSogc3JjL3BhL2ZmaS5jIChST1VORF9ET1dOKTogRGVsZXRlLgorCShmbGR3LCBmc3R3LCBmbGRkLCBmc3RkKTogVXNlICdfX2FzbV9fJy4KKwkoZmZpX3N0cnVjdF90eXBlKTogQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsCisJRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQgRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KKwkoZmZpX3ByZXBfYXJnc19MSU5VWCk6IFJlbmFtZSB0byBmZmlfcHJlcF9hcmdzX3BhMzIuIFVwZGF0ZSBjb21tZW50LgorCVNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90IHZhcmlhYmxlLiBDaGFuZ2UgdHlwZSBvZiBsb2NhbAorCSduJyB0byB1bnNpZ25lZCBpbnQuCisJKGZmaV9zaXplX3N0YWNrX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9zaXplX3N0YWNrX3BhMzIuIEhhbmRsZSBsb25nCisJZG91YmxlIG9uIFBBX0hQVVguCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuIENoYW5nZQorCXJldHVybiB0eXBlIHRvIGZmaV9zdGF0dXMuIFNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90CisJdmFyaWFibGUuIE9ubHkgY29weSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCByZWdpc3RlcnMgd2hlbiBQQV9MSU5VWAorCWlzIHRydWUuIFJlZm9ybWF0IGRlYnVnIHN0YXRlbWVudC4KKwlBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQKKwlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgorCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBBZGQgJ2V4dGVybicgdG8KKwlkZWNsYXJhdGlvbi4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IE1ha2UgbGludXggdHJhbXBvbGluZSBjb25kaXRpb25hbCBvbiBQQV9MSU5VWC4KKwlBZGQgbm9wcyB0byBjYWNoZSBmbHVzaC4gIEFkZCB0cmFtcG9saW5lIGZvciBQQV9IUFVYLgorCSogc3JjL3BhL2hwdXgzMi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9saW51eC5TIChmZmlfY2FsbF9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2FsbF9wYTMyLiBSZW5hbWUKKwlmZmlfcHJlcF9hcmdzX0xJTlVYIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4KKwlMb2NhbGl6ZSBsYWJlbHMuIEFkZCBzdXBwb3J0IGZvciAyLCA0IGFuZCA4LWJ5dGUgc21hbGwgc3RydWN0cy4gSGFuZGxlCisJdW5hbGlnbmVkIGRlc3RpbmF0aW9ucyBpbiAzLCA1LCA2IGFuZCA3LWJ5dGUgc21hbGwgc3RydWN0cy4gT3JkZXIKKwlhcmd1bWVudCB0eXBlIGNoZWNrcyBzbyB0aGF0IGNvbW1vbiBhcmd1bWVudCB0eXBlcyBhcHBlYXIgZmlyc3QuCisJKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIFJlbmFtZQorCWZmaV9jbG9zdXJlX2lubmVyX0xJTlVYIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuCisKKzIwMDYtMDMtMjQgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYLiAgRGVmYXVsdAorCWZvciAzMi1iaXQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZSBmb3JtYXQuICBGaXggRkZJX0xBU1RfQUJJLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEhhbmRsZSBsaW51eCB2YXJpYW50IG9mCisJRkZJX1RZUEVfTE9OR0RPVUJMRS4KKwkoZmZpX3ByZXBfYXJnczY0KTogQXNzZXJ0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3QgbXVuZ2UgRkZJX1RZUEVfTE9OR0RPVUJMRSB0eXBlLgorCUhhbmRsZSBGRklfTElOVVggRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9MSU5VWC4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBOb24gRkZJX0xJTlVYIGxvbmcgZG91YmxlIHJldHVybiBuZWVkcworCWdwcjMgcmV0dXJuIHBvaW50ZXIgYXMgZm9yIHN0cnVjdCByZXR1cm4uICBIYW5kbGUgRkZJX0xJTlVYCisJRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuICBEb24ndCBpbmNyZW1lbnQgIm5mIgorCXVubmVjZXNzYXJpbHkuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogTG9hZCBib3RoIGYxIGFuZCBmMgorCWZvciBGRklfVFlQRV9MT05HRE9VQkxFLiAgTW92ZSBlcGlsb2d1ZSBpbnNucyBpbnRvIGNhc2UgdGFibGUuCisJRG9uJ3QgdXNlIHI2IGFzIHBvaW50ZXIgdG8gcmVzdWx0cywgaW5zdGVhZCB1c2Ugc3Agb2Zmc2V0LiAgRG9uJ3QKKwltYWtlIGEgc3BlY2lhbCBjYWxsIHRvIGxvYWQgbHIgd2l0aCBjYXNlIHRhYmxlIGFkZHJlc3MsIGluc3RlYWQKKwl1c2Ugb2Zmc2V0IGZyb20gcHJldmlvdXMgY2FsbC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFNhdmUgbG9uZyBkb3VibGUgcmV0dXJuLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2ltcGxpZnkgbG9uZyBkb3VibGUKKwlyZXR1cm4uCisKKzIwMDYtMDMtMTUgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgZmxvYXQgYXJndW1lbnRzCisJcGFzc2VkIHdpdGggRlAgcmVnaXN0ZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDYtMDMtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbik6IE1hcmsgY2lmLAorCWFyZ3MgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkoY2xvc3VyZV90ZXN0X2ZuMSk6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKG1haW4pOiBSZW1vdmUgdW51c2VkIHJlcy4KKworMjAwNi0wMi0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkanVzdCBGU0YgYWRkcmVzcy4gQWRkIHRlc3QgcnVucyBmb3IKKwktTzIsIC1PMywgLU9zIGFuZCB0aGUgd2FybmluZyBmbGFncyAtVyAtV2FsbC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgYW4gX19VTlVTRURfXyBtYWNybyB0byBtYXJrCisJdW51c2VkIHBhcmFtZXRlciB1bnVzZWQgZm9yIGdjYyBvciBlbHNlIGRvIG5vdGhpbmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKGNsc19zdHJ1Y3RfMTJieXRlX2duKTogTWFyayBjaWYKKwlhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyAoY2xzX3N0cnVjdF8xNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMgKGNsc19zdHJ1Y3RfMThieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jIChjbHNfc3RydWN0XzE5Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgKGNsc19zdHJ1Y3RfMV8xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChjbHNfc3RydWN0XzIwYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAoY2xzX3N0cnVjdF8yNGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyAoY2xzX3N0cnVjdF8yYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgKGNsc19zdHJ1Y3RfM18xYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYyAoY2xzX3N0cnVjdF8zYnl0ZV9nbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jIChjbHNfc3RydWN0XzRfMWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyAoY2xzX3N0cnVjdF80Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgKGNsc19zdHJ1Y3RfNWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgKGNsc19zdHJ1Y3RfNjRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyAoY2xzX3N0cnVjdF82Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgKGNsc19zdHJ1Y3RfN2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyAoY2xzX3N0cnVjdF84Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAoY2xzX3N0cnVjdF85Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZm4pOiBDYXN0CisJdm9pZCogdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZy4KKwkobWFpbik6IExpa2V3aXNlLgorCShjbHNfc3RydWN0X2FsaWduX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIChjbHNfcmV0X2RvdWJsZV9mbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jIChjbHNfcmV0X2Zsb2F0X2ZuKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgKHRlc3RfZnVuY19nbik6IE1hcmsgY2lmIGFuZAorCWRhdGEgdW51c2VkLgorCShtYWluKTogQ2FzdCByZXNfY2FsbCB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZgorCWFuZCBkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgKGNsc19yZXRfc2NoYXJfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc2NoYXJfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAoY2xzX3JldF9zaW50X2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NpbnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChjbHNfcmV0X3NzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zc2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgKGNsc19yZXRfdWNoYXJfZm4pOiAgTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3VjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKGNsc19yZXRfdWludF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91aW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyAoY2xzX3JldF91bG9uZ2xvbmdfZm4pOiBNYXJrIGNpZgorCWFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIChjbHNfcmV0X3VzaG9ydF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91c2hvcnRfZm4pOiBDYXN0IHByaW50ZiBwYXJhbWV0ZXIgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyAoZmxvYXRpbmcpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jIChtYWluKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpLgorCUNsZWFudXAgd2hpdGUgc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jIChjaGVja2luZyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOiBNYXJrCisJY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAoY2xzX3N0cnVjdF9jb21iaW5lZF9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChCX2ZuKTogQWRqdXN0IHByaW50ZgorCWZvcm1hdHRlcnMgdG8gc2lsZW5jZSBnY2MuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTWVudGlvbiByZWxhdGVkIFBSLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgKHN0dWIpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyAobWFpbik6IENhc3QgdGhlIHJlc3VsdCB0byBzaWxlbmNlCisJZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyAocmV0dXJuX2ZsKTogQWRkIHRoZSBub3RlIG1lbnRpb25lZAorCWluIHRoZSBsYXN0IGNvbW1pdCBmb3IgdGhpcyB0ZXN0IGNhc2UgaW4gdGhlIHRlc3QgY2FzZSBpdHNlbGYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IE1hcmsgY2lmIGFzCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKGNsb3N1cmVfdGVzdF9mbjEpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jIChjbG9zdXJlX3Rlc3RfZm4yKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyAoY2xvc3VyZV90ZXN0X2ZuMyk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIChjbG9zdXJlX3Rlc3RfZm41KTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAoY2xvc3VyZV90ZXN0X2ZuMCk6IExpa2V3aXNlLgorCisyMDA2LTAyLTIyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogRml4IHJlZ2lzdGVyIG51bWJlcnMgaW4gdGhlIEZERSBmb3IKKwlmZmlfY2xvc3VyZV9TWVNWLgorCisyMDA2LTAyLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IFJlbW92ZSBzdGF0aWMKKwlkZWNsYXJhdGlvbiB0byBhdm9pZCBhIGZhbHNlIG5lZ2F0aXZlIG9uIGl4ODYuIFNlZSBQUjMyMy4KKworMjAwNi0wMi0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisJYW5kIGNhc3QgaW50ZWdlciB0byB2b2lkICogaWYgbmVlZGVkLiAgVXBkYXRlIHRoZSBwb2ludGVyIHRvCisJdGhlIEZQIHJlZ2lzdGVyIHNhdmVkIGFyZWEgY29ycmVjdGx5LgorCisyMDA2LTAyLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBYRkFJTCB0aGlzIHRlc3QgdW50aWwgUFIyNTYzMAorCWlzIGZpeGVkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCisyMDA2LTAyLTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogUmVtb3ZlIGZmaV90eXBlX215bG9uZworCWRlZmluaXRpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgZmZpX3R5cGVfbXlsb25nIGRlZmluaXRpb24KKwloZXJlIHRvIGJlIHVzZWQgYnkgb3RoZXIgdGVzdCBjYXNlcyB0b28uCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KKworMjAwNi0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuYWM6IEVuYWJsZSBsaWJmZmkgZm9yIHNwYXJjNjQtKi1mcmVlYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwNi0wMS0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21zdF90d29fcmVnaXN0ZXIpOiBEb24ndCBjYWxsIF9fYXNobGRpMywKKwlpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgY29tcHV0ZSAlcjUKKwlzaGlmdCBjb3VudCB1bmNvbmRpdGlvbmFsbHkuICBTaW1wbGlmeSBsb2FkIHNlcXVlbmNlcyBmb3IgMSwgMiwgMywgNAorCWFuZCA4IGJ5dGUgc3RydWN0cywgZm9yIHRoZSByZW1haW5pbmcgc3RydWN0IHNpemVzIGRvbid0IGNhbGwKKwlfX2xzaHJkaTMsIGluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KKworMjAwNS0xMi0wNyAgVGhpZW1vIFNldWZlciAgPHRoc0BuZXR3b3Jrbm8uZGU+CisKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZW1vdmUgb2Jzb2xldGUgc2dpZGVmcy5oIGluY2x1ZGUuIEFkZAorCW1pc3NpbmcgcGFyZW50aGVzZXMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyKTogQ29kZSBmb3JtYXR0aW5nLiBEZWZpbmUKKwlhbmQgdXNlIEEzX09GRiwgRlBfT0ZGLCBSQV9PRkYuIE1pY3JvLW9wdGltaXphdGlvbnMuCisJKGZmaV9jbG9zdXJlX08zMik6IExpa2V3aXNlLCBidXQgd2l0aCBuZXdseSBkZWZpbmVkIEEzX09GRjIsCisJQTJfT0ZGMiwgQTFfT0ZGMiwgQTBfT0ZGMiwgUkFfT0ZGMiwgRlBfT0ZGMiwgUzBfT0ZGMiwgR1BfT0ZGMiwKKwlWMV9PRkYyLCBWMF9PRkYyLCBGQV8xXzFfT0ZGMiwgRkFfMV8wX09GRjIsIEZBXzBfMV9PRkYyLAorCUZBXzBfMF9PRkYyLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb2RlIGZvcm1hdHRpbmcuIEZpeAorCWVuZGlhbm5lc3MgYnVncy4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IEltcHJvdmUgdHJhbXBvbGluZSBpbnN0cnVjdGlvbiBzY2hlZHVsaW5nLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEZpeCBlbmRpYW5uZXNzIGJ1Z3MuCisKKzIwMDUtMTItMDMgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBGb3JtYXR0aW5nLgorCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBBdm9pZCBwb3NzaWJsZSBhbGlhc2luZyBwcm9ibGVtcyBieSB1c2luZyB1bmlvbnMuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IExpa2V3aXNlLgorCisyMDA1LTA5LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBGb3IKKwlkYXJ3aW4sIHVzZSAtc2hhcmVkLWxpYmdjYyBub3QgLWxnY2NfcywgYW5kIGV4cGxhaW4gd2h5LgorCisyMDA1LTA5LTI2ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAodmFsdWVfdHlwZSk6IE5ldyB0eXBlZGVmLgorCShDQU5BUlkpOiBOZXcgZGVmaW5lLgorCShtYWluKTogQ2hlY2sgZm9yIHJlc3VsdCBidWZmZXIgb3ZlcmZsb3cuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoRkxBR19SRVRVUk5TXzEyOEJJVFMpOiBOZXcgY29uc3RhbnQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxpbnV4NjQgbG9uZyBkb3VibGUgcmV0dXJucy4KKworMjAwNS0wOC0yNSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCVBSIHRhcmdldC8yMzQwNAorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENvcnJlY3QgcGxhY2VtZW50IG9mIHN0YWNrCisJaG9tZWQgZnAgYXJncy4KKwkoZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENvcnJlY3Qgc3RhY2sgc2l6aW5nIGZvciBzYW1lLgorCisyMDA1LTA4LTExICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjIChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSk6IE5ldyB0ZXN0LgorCShBSF9CT1RUT00pOiBBZGQgRkZJX0hJRERFTiBkZWZpbml0aW9uLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogUmVtb3ZlLgorCShmZmlfY2xvc3VyZV9MSU5VWDY0LCBmZmlfcHJlcF9hcmdzNjQsIGZmaV9jYWxsX0xJTlVYNjQsCisJZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBVc2UgRkZJX0hJRERFTiBpbnN0ZWFkIG9mIGhpZGRlbi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0LAorCS5mZmlfY2xvc3VyZV9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiAuaGlkZGVuLgorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBSZW1vdmUsCisJYWRkIEZGSV9ISURERU4gdG8gaXRzIHByb3RvdHlwZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IE5ldy4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWLCBmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE5ldy4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCisKKzIwMDUtMDgtMTAgIEFsZnJlZCBNLiBTem1pZHQgIDxhbXNAZ251Lm9yZz4KKworCVBSIGxpYmZmaS8yMTgxOToKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogSGFuZGxlIGkqODYtKi1nbnUqLgorCisyMDA1LTA4LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZQorCURXX0NGQV9vZmZzZXRfZXh0ZW5kZWRfc2YgcmF0aGVyIHRoYW4KKwlEV19DRkFfR05VX25lZ2F0aXZlX29mZnNldF9leHRlbmRlZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorCisyMDA1LTA3LTIyICBTVUdJT0tBIFRvc2hpbm9idSAgPHN1Z2lva2FAaXRvbmV0LmNvLmpwPgorCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU3RvcCBhcmd1bWVudCBwb3BwaW5nIGNvcnJlY3RseQorCW9uIHNoMy4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IENoYW5nZSB0aGUgc3RhY2sgbGF5b3V0IGZvciBzaDMgc3RydWN0IGFyZ3VtZW50LgorCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IHNoMyBhcmd1bWVudCBjb3B5LCB3aGVuIGl0IGlzCisJcGFydGlhbGx5IG9uIHJlZ2lzdGVyLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IHNldCB0b28gbWFueSBjaWYtPmZsYWdzLgorCisyMDA1LTA3LTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfY2FsbCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KKwlSZW1vdmUgZW1wdHkgbGluZS4KKwkqIHNyYy9zaDY0L2ZmaS5jIChzaW1wbGVfdHlwZSk6IFJlbW92ZS4KKwkocmV0dXJuX3R5cGUpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCisJKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIHNyYy9zaDY0L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSAxLCAyIGFuZCA0LWJ5dGUgcmV0dXJuLgorCUVtaXQgcG9zaXRpb24gaW5kZXBlbmRlbnQgY29kZSBpZiBQSUMgYW5kIHJlbW92ZSB3cm9uZyBkYXRhbGFiZWwKKwlwcmVmaXhlcyBmcm9tIEVIIGRhdGEuCisKKzIwMDUtMDctMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBQT1dFUlBDX0ZSRUVCU0QuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgorCShGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCk6IERlZmluZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgZmxhZ3MgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zCisJaW4gZmZpX2NhbGxfU1lTVi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IgU1lTViA0IEFCSS4KKwlBa2EgRkZJX1NZU1YuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBBZGQgcmV0dXJuIHR5cGVzIGZvciBzbWFsbCBzdHJ1Y3R1cmVzLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgYml0cyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlcyBmb3IKKwlmaW5hbCBTWVNWIDQgQUJJLgorCisyMDA1LTA3LTEwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTmV3IHRlc3QgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmM6IExpa2V3aXNlLgorCisyMDA1LTA3LTA1ICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+CisKKwkqIHNyYy9wYS9mZmkuYyAoZmZpX3N0cnVjdF90eXBlKTogUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEKKwlhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLiAgQnJlYWsgb3V0IGhhbmRsaW5nIGZvciA1LTcgYnl0ZQorCXN0cnVjdHVyZXMuICBLaWxsIGNvbXBpbGF0aW9uIHdhcm5pbmdzLgorCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFByaW50IHJldHVybiB2YWx1ZXMgYXMgaGV4IGluIGRlYnVnCisJbWVzc2FnZS4gIFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxIGFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuCisJUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TTUFMTF9TVFJVQ1QxKQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogUmVtb3ZlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KQorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2LCBGRklfVFlQRV9TTUFMTF9TVFJVQ1Q3KTogRGVmaW5lLgorCSogc3JjL3BhL2xpbnV4LlM6IE1hcmsgc291cmNlIGZpbGUgYXMgdXNpbmcgUEExLjEgYXNzZW1ibHkuCisJKGNoZWNrc21zdDEsIGNoZWNrc21zdDIpOiBSZW1vdmUuCisJKGNoZWNrc21zdDMpOiBPcHRpbWl6ZSBoYW5kbGluZyBvZiAzLWJ5dGUgc3RydWN0IHJldHVybnMuCisJKGNoZWNrc21zdDU2Nyk6IFByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KKworMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJnY2ovMjE5NDMKKwkqIHNyYy9taXBzL24zMi5TOiBFbmZvcmNlIFBJQyBjb2RlLgorCSogc3JjL21pcHMvbzMyLlM6IExpa2V3aXNlLgorCisyMDA1LTA2LTE1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjOiBUcmVhdCBpKjg2LSotc29sYXJpczIuMTAgYW5kIHVwIGFzIFg4Nl82NC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNS0wNi0wMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IHVzZSBKVU1QVEFSR0VUCisJdG8gY2FsbCBmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVi4gIEFwcGVuZCBAbG9jYWwgaW5zdGVhZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlIGZvciBmZmlfcHJlcF9hcmdzX1NZU1YuCisKKzIwMDUtMDUtMTcgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXNlIEFDX0NfQklHRU5ESUFOIGluc3RlYWQgb2YgQUNfQ19CSUdFTkRJQU5fQ1JPU1MuCisJVXNlIEFDX0NIRUNLX1NJWkVPRiBpbnN0ZWFkIG9mIEFDX0NPTVBJTEVfQ0hFQ0tfU0laRU9GLgorCSogTWFrZWZpbGUuYW0gKEFDTE9DQUxfQU1GTEFHUyk6IFJlbW92ZSAtSSAuLi9jb25maWcuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluLCBNYWtlZmlsZS5pbiwKKwlpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDkgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDUtMDggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvMjEyODUKKwkqIHNyYy9hbHBoYS9vc2YuUzogVXBkYXRlIHVud2luZCBpbnRvIHRvIG1hdGNoIGNvZGUuCisKKzIwMDUtMDUtMDQgIEFuZHJlYXMgRGVnZXJ0IDxhZEBwYXB5cnVzLWdtYmguZGU+CisJICAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYXZlIHNzZS11c2VkIGZsYWcgaW4KKwliaXQgMTEgb2YgZmxhZ3MuCisJKGZmaV9jYWxsKTogTWFzayByZXR1cm4gdHlwZSBmaWVsZC4gIFBhc3Mgc3NlY291bnQgdG8gZmZpX2NhbGxfdW5peDY0LgorCShmZmlfcHJlcF9jbG9zdXJlKTogU2V0IGNhcnJ5IGJpdCBpZiBzc2UtdXNlZCBmbGFnIHNldC4KKwkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jYWxsX3VuaXg2NCk6IEFkZCBzc2Vjb3VudCBhcmd1bWVudC4KKwlPbmx5IGxvYWQgc3NlIHJlZ2lzdGVycyBpZiBzc2Vjb3VudCBub24temVyby4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0KTogT25seSBzYXZlIHNzZSByZWdpc3RlcnMgaWYgY2Fycnkgc2V0IG9uIGVudHJ5LgorCisyMDA1LTA0LTI5ICBSYWxmIENvcnNlcGl1cyAgPHJhbGYuY29yc2VwaXVzQHJ0ZW1zLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgaSo4Ni0qLXJ0ZW1zKiwgc3BhcmMqLSotcnRlbXMqLAorCXBvd2VycGMtKnJ0ZW1zKiwgYXJtKi0qLXJ0ZW1zKiwgc2gtKi1ydGVtcyouCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDQtMjAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBJbiByZWdzdWIgdXNlLAorCWhhdmUgVGNsOC4zLWNvbXBhdGlibGUgaW50ZXJtZWRpYXRlIHZhcmlhYmxlLgorCisyMDA1LTA0LTE4ICBTaW1vbiBQb3NuamFrIDxzaW1vbi5wb3NuamFrQHNpb2wubmV0PgorCSAgICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBDUklTIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluLAorCWluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvY3JpczogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9jcmlzL2ZmaS5jLCBzcmMvY3Jpcy9zeXN2LlMsIHNyYy9jcmlzL2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCisJKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogV3JhcCBpbiAjaWZuZGVmIF9fQ1JJU19fLgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBSZXBsYWNlIFxuIHdpdGgKKwlccj9cbiBpbiBvdXRwdXQgdGVzdHMuCisKKzIwMDUtMDQtMTIgIE1pa2UgU3R1bXAgIDxtcnNAYXBwbGUuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDMtMzAgIEhhbnMgQm9laG0gIDxIYW5zLkJvZWhtQGhwLmNvbT4KKworCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpOiBVc2UgbG9uZyBsb25nIGluc3RlYWQgb2YgREkuCisKKzIwMDUtMDMtMzAgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoZmZpX2FyZykgQUREIERJIGF0dHJpYnV0ZS4KKwkoZmZpX3NhcmcpIERpdHRvLgorCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2xvc3VyZV91bml4KTogRXh0ZW5kIGdwCisJdG8gNjQgYml0cyBpbiBJTFAzMiBtb2RlLgorCUxvYWQgNjQgYml0cyBldmVuIGZvciBzaG9ydCBkYXRhLgorCisyMDA1LTAzLTIzICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFVwZGF0ZSBmb3IgLW02NCBtdWx0aWxpYi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA1LTAzLTIxICBaYWNrIFdlaW5iZXJnICA8emFja0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBjb25maWd1cmUuYWM6IERvIG5vdCBpbnZva2UgVExfQUNfR0NDX1ZFUlNJT04uCisJRG8gbm90IHNldCB0b29sX2luY2x1ZGVfZGlyLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOgorCVJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBTZXQgZ2NjX3ZlcnNpb24gYW5kIHRvb2xsaWJmZmlkaXIuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA1LTAyLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQnVtcCBhbGlnbm1lbnQgdG8KKwlvZGQtbnVtYmVyZWQgcmVnaXN0ZXIgcGFpcnMgZm9yIDY0LWJpdCBpbnRlZ2VyIHR5cGVzLgorCisyMDA1LTAyLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwlQUiBsaWJmZmkvMjAxMDQKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDUtMDItMTEgIEphbmlzIEpvaG5zb24gIDxqYW5pczE4N0B1cy5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUmVtb3ZlIGRnLW9wdGlvbnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0My5jOiBEaXR0by4KKworMjAwNS0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvZnJ2L2ZmaXRhcmdldC5oOiBSZW1vdmUgUFBDIHN0dWZmIHdoaWNoIGRvZXMgbm90IGJlbG9uZyB0byBmcnYuCisKKzIwMDUtMDEtMTIgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCAoY3h4X29wdGlvbnMpOiBBZGQKKwktc2hhcmVkLWxpYmdjYy4KKworMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3R5cGVzLmMgKEZGSV9BR0dSRUdBVEVfVFlQRURFRik6IFJlbW92ZS4KKwkoRkZJX1RZUEVERUYpOiBSZW5hbWUgZnJvbSBGRklfSU5URUdSQUxfVFlQRURFRi4gIFJlcGxhY2Ugc2l6ZSBhbmQKKwlvZmZzZXQgcGFyYW1ldGVycyB3aXRoIGEgdHlwZSBwYXJhbWV0ZXI7IGRlZHVjZSBzaXplIGFuZCBzdHJ1Y3R1cmUKKwlhbGlnbm1lbnQuICBVcGRhdGUgYWxsIHVzZXJzLgorCisyMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IERlZmluZSB3aXRoIHNpemVvZi4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEZpeCBmb3IgaWE2NC4KKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChzdHJ1Y3QgZmZpX2lhNjRfdHJhbXBvbGluZV9zdHJ1Y3QpOiBNb3ZlCisJaW50byBmZmlfcHJlcF9jbG9zdXJlLgorCSogc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvdW5peC5TOiBSZXdyaXRlCisJZnJvbSBzY3JhdGNoLgorCisyMDA0LTEyLTI3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L3VuaXg2NC5TOiBGaXggdHlwbyBpbiB1bndpbmQgaW5mby4KKworMjAwNC0xMi0yNSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IFJlbmFtZSBmcm9tIHN0YWNrTGF5b3V0LgorCShlbnVtIHg4Nl82NF9yZWdfY2xhc3MpOiBBZGQgWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgorCShtZXJnZV9jbGFzc2VzKTogQ2hlY2sgZm9yIGl0LgorCShTU0VfQ0xBU1NfUCk6IE5ldy4KKwkoY2xhc3NpZnlfYXJndW1lbnQpOiBQYXNzIGJ5dGVfb2Zmc2V0IGJ5IHZhbHVlOyBwZXJmb3JtIGFsbCB1cGRhdGVzCisJaW5zaWRlIHN0cnVjdCBjYXNlLgorCShleGFtaW5lX2FyZ3VtZW50KTogQWRkIGNsYXNzZXMgYXJndW1lbnQ7IGhhbmRsZQorCVg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KKwkoZmZpX3ByZXBfYXJncyk6IE1lcmdlIGludG8gLi4uCisJKGZmaV9jYWxsKTogLi4uIGhlcmUuICBTaGFyZSBzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsX3VuaXg2NC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXR1cCBjaWYtPmZsYWdzIGZvciBwcm9wZXIgc3RydWN0dXJlIHJldHVybi4KKwkoZmZpX2ZpbGxfcmV0dXJuX3ZhbHVlKTogUmVtb3ZlLgorCShmZmlfcHJlcF9jbG9zdXJlKTogUmVtb3ZlIGRlYWQgYXNzZXJ0LgorCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIuCisJUmV3cml0ZSB0byB1c2Ugc3RydWN0IHJlZ2lzdGVyX2FyZ3MgaW5zdGVhZCBvZiB2YV9saXN0LiAgQ3JlYXRlCisJZmxhZ3MgZm9yIGhhbmRsaW5nIHN0cnVjdHVyZSByZXR1cm5zLgorCSogc3JjL3g4Ni91bml4NjQuUzogUmVtb3ZlIGRlYWQgc3RyaW5ncy4KKwkoZmZpX2NhbGxfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2NhbGxfVU5JWDY0LiAgUmV3cml0ZSB0byBzaGFyZQorCXN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGwuICBIYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisJKGZsb2F0MnNzZSwgZmxvYXRmbG9hdDJzc2UsIGRvdWJsZTJzc2UpOiBSZW1vdmUuCisJKHNzZTJmbG9hdCwgc3NlMmRvdWJsZSwgc3NlMmZsb2F0ZmxvYXQpOiBSZW1vdmUuCisJKGZmaV9jbG9zdXJlX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NC4gIFJld3JpdGUKKwl0byBoYW5kbGUgc3RydWN0dXJlIHJldHVybnMgcHJvcGVybHkuCisKKzIwMDQtMTItMDggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFJlbW92ZSBkdXBsaWNhdGUgTElCQ0ZMQUdTIGFuZAorCVBJQ0ZMQUcuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKzIwMDQtMTItMDIgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBVc2UgVExfQUNfR0NDX1ZFUlNJT04gdG8gc2V0IGdjY192ZXJzaW9uLgorCSogY29uZmlndXJlLCBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0xMS0yOSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yNSAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIHJldmVyc2lvbi4KKworMjAwNC0xMS0yNCAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBsaWJ0b29sIGNoYW5nZS4KKworMjAwNC0xMS0yMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBVc2UgbmV3IHByb2NzIGluIHRhcmdldC1saWJwYXRoLmV4cC4KKworMjAwNC0xMS0yMyAgUmljaGFyZCBTYW5kaWZvcmQgIDxyc2FuZGlmb0ByZWRoYXQuY29tPgorCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyLCBmZmlfY2xvc3VyZV9PMzIpOiBVc2UgamFsciBpbnN0ZWFkCisJb2YgamFsLiAgVXNlIGFuIGFic29sdXRlIGVuY29kaW5nIGZvciB0aGUgZnJhbWUgaW5mb3JtYXRpb24uCisKKzIwMDQtMTEtMjMgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgbm8tZGVwZW5kZW5jaWVzLiAgQWRkIEFDTE9DQUxfQU1GTEFHUy4KKwkqIGFjaW5jbHVkZS5tNDogRGVsZXRlIGxvZ2ljIGZvciBzaW5jbHVkZXMuCisJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGU6IExpa2V3aXNlLgorCisyMDA0LTExLTIyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBbGlnbiBkb3VibGVzIGFuZCA2NC1iaXQgaW50ZWdlcnMKKwlvbiBhIDgtYnl0ZSBib3VuZGFyeS4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IFJlc2VydmUgZnJhbWUgc3BhY2UgZm9yIGFyZ3VtZW50cy4KKworMjAwNC0xMC0yNyAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZ1bmN0aW9ucyB0aGF0IHJldHVybgorCWxvbmcgbG9uZyB2YWx1ZXMuICBSb3VuZCBzdGFjayBhbGxvY2F0aW9uIHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcworCWZvciBBVFBDUyBjb21wYXRpYmlsaXR5LgorCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdvcmsgdG8gYXZvaWQgdXNlIG9mIEFQQ1MgcmVnaXN0ZXIKKwluYW1lcy4gIEhhbmRsZSByZXR1cm5pbmcgbG9uZyBsb25nIHR5cGVzLiAgQWRkIFRodW1iIGFuZCBpbnRlcndvcmtpbmcKKwlzdXBwb3J0LiAgSW1wcm92ZSBzb2Z0LWZsb2F0IGNvZGUuCisKKzIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kYi5leHAgKGxvYWRfZ2NjX2xpYik6IE5ldyBmdW5jdGlvbi4KKwkobGliZmZpX2V4aXQpOiBOZXcgZnVuY3Rpb24uCisJKGxpYmZmaV9pbml0KTogQnVpbGQgdGhlIHRlc3RnbHVlIHdyYXBwZXIgaWYgbmVlZGVkLgorCisyMDA0LTEwLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJUFIgb3RoZXIvMTgxMzgKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWNjZXB0IG1vcmUgdGhhbiBvbmUgbXVsdGlsaWIgbGliZ2NjLgorCisyMDA0LTEwLTI1ICBLYXp1aGlybyBJbmFva2EgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KKworCSogc3JjL20zMnIvbGliZmZpdGFyZ2V0LmggKEZGSV9DTE9TVVJFUyk6IFNldCB0byAwLgorCisyMDA0LTEwLTIwICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvbid0IGFsaWduIGZvciBkb3VibGUgZGF0YS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNC0xMC0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBUIGJpdCBpbiB0cmFtcG9saW5lIGZvcgorCXRoZSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJ1Y3R1cmUgcG9pbnRlZCB3aXRoIFIyLgorCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZSBSMiBhcyB0aGUgcG9pbnRlciB0bworCXRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGlmIFQgYml0IHNldC4gIEVtaXQgcG9zaXRpb24KKwlpbmRlcGVuZGVudCBjb2RlIGFuZCBFSCBkYXRhIGlmIFBJQy4KKworMjAwNC0xMC0xMyAgS2F6dWhpcm8gSW5hb2thICA8aW5hb2thLmthenVoaXJvQHJlbmVzYXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIG0zMnIgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpdWdyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgbTMyciBwb3J0IHRvIEZGSV9JTlRFUk5BTF9UWVBFREVGCisJKHVpbnQ2NCwgc2ludDY0LCBkb3VibGUsIGxvbmdkb3VibGUpCisJKiBzcmMvbTMycjogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy9tMzJyL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9tMzJyL3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvbTMyci9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisKKzIwMDQtMTAtMDIgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVnaW50LmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDQtMDktMTQgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKworCVBSIGxpYmdjai8xNzQ2NQorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBEb24ndCB1c2UgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aC4KKwlTZXQgdXAgTERfTElCUkFSWV9QQVRILCBTSExJQl9QQVRILCBMRF9MSUJSQVJZTjMyX1BBVEgsCisJTERfTElCUkFSWTY0X1BBVEgsIExEX0xJQlJBUllfUEFUSF8zMiwgTERfTElCUkFSWV9QQVRIXzY0IGFuZAorCURZTERfTElCUkFSWV9QQVRILgorCisyMDA0LTA5LTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IFJlbW92ZSB1bnVzZWQgdmFyLiBDbGVhbnVwCisJd2hpdGVzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKworMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IGNvbW1lbnRzIGFuZCBpZGVudGF0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBBZGQgZmxhZyBmb3IgbG9uZ2RvdWJsZSByZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9hcmdzKTogSGFuZGxlIGxvbmdkb3VibGUgYXJndW1lbnRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldCBmbGFncyBmb3IgbG9uZ2RvdWJsZS4gQ2FsY3VsYXRlIHNwYWNlIGZvcgorCWxvbmdkb3VibGUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBBZGQgY2xvc3VyZSBoYW5kbGluZyBmb3IgbG9uZ2RvdWJsZS4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfREFSV0lOKTogQWRkIGhhbmRsaW5nIG9mIGxvbmdkb3VibGUKKwl2YWx1ZXMuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChfZmZpX2Nsb3N1cmVfQVNNKTogTGlrZXdpc2UuCisJKiBzcmMvdHlwZXMuYzogRGVmaW5lZCBsb25nZG91YmxlIHNpemUgYW5kIGFsaWdubWVudCBmb3IgZGFyd2luLgorCisyMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBSZW1vdmUgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2FzbS5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMzAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGZydiBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5pbjogUmVhZCBjb25maWd1cmUuaG9zdC4KKwkqIGNvbmZpZ3VyZS5ob3N0OiBOZXcgZmlsZS4gIGZydi1lbGYgbmVlZHMgbGliZ2xvc3MuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGb3JjZSBmZmlfY2xvc3VyZSB0byBoYXZlIGEgbmljZSBiaWcgKDgpCisJYWxpZ25tZW50LiAgVGhpcyBpcyBuZWVkZWQgdG8gZnJ2IGFuZCBzaG91bGRuJ3QgaGFybSB0aGUgb3RoZXJzLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKEFMSUdOX0RPV04pOiBOZXcgbWFjcm8uCisJKiBzcmMvZnJ2L2ZmaS5jLCBzcmMvZnJ2L2ZmaXRhcmdldC5oLCBzcmMvZnJ2L2VhYmkuUzogTmV3IGZpbGVzLgorCisyMDA0LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzNjQqIGluc3RlYWQgb2YgbWlwcyouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAgTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZSBhbmQgc2V0IHJldHVybiB2YWx1ZQorCXRvIHplcm8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisKKzIwMDQtMDgtMjMgIERhdmlkIERhbmV5IDxkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZ2NqLzEzMTQxCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX08zMl9TT0ZUX0ZMT0FUKTogTmV3IEFCSS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IGFsaWdubWVudCBjYWxjdWxhdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIGZsb2F0aW5nIHBvaW50CisJcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzLgorCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkksIGZpeAorCWFsaWdubWVudCBjYWxjdWxhdGlvbnMuCisJKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2Nsb3N1cmVfTzMyKTogRG9uJ3QgdXNlIGZsb2F0aW5nIHBvaW50CisJaW5zdHJ1Y3Rpb25zIGlmIEZGSV9PMzJfU09GVF9GTE9BVCwgbWFrZSBzdGFjayBmcmFtZSBBQkkgY29tcGxpYW50LgorCisyMDA0LTA4LTE0ICBDYXNleSBNYXJzaGFsbCA8Y3NtQGdudS5vcmc+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlZl9jaWZfbWFjaGRlcCk6IHNldCBgY2lmLT5mbGFncycgdG8KKwljb250YWluIGBGRklfVFlQRV9VSU5UNjQnIGFzIHJldHVybiB0eXBlIGZvciBhbnkgNjQtYml0CisJaW50ZWdlciAoTzMyIEFCSSBvbmx5KS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IG5ldyBmdW5jdGlvbi4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBuZXcgZnVuY3Rpb24uCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRGVmaW5lIGBGRklfQ0xPU1VSRVMnIGFuZAorCWBGRklfVFJBTVBPTElORV9TSVpFJyBhcHByb3ByaWF0ZWx5IGlmIHRoZSBBQkkgaXMgbzMyLgorCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IGFkZCBsYWJlbHMgZm9yIC5laF9mcmFtZS4gUmV0dXJuCisJNjQgYml0IGludGVnZXJzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogbmV3IGZ1bmN0aW9uLgorCUFkZGVkIERXQVJGLTIgdW53aW5kIGluZm8gZm9yIGJvdGggZnVuY3Rpb25zLgorCisyMDA0LTA4LTEwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzICk6IDgtYWxpZ24gYWxsIHN0YWNrIGFyZ3VtZW50cy4KKworMjAwNC0wOC0wMSAgUm9iZXJ0IE1pbGxhbiAgPHJvYmVydG1oQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRGV0ZWN0IGtuZXRic2QtZ251IGFuZCBrZnJlZWJzZC1nbnUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMzAgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19NTUFQX0JMQUNLTElTVCk6IENoZWNrIGZvciA8c3lzL21tYW4uaD4KKwlhbmQgbW1hcCgpIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHByZXNldCBhdXRvY29uZiBjYWNoZQorCXZhcmlhYmxlcy4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDctMTEgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXggQyBhbGlhc2luZyB2aW9sYXRpb24uCisJKGZmaV9jaGVja19mbG9hdF9zdHJ1Y3QpOiBSZW1vdmUgdW51c2VkIHByb3RvdHlwZS4KKworMjAwNC0wNi0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmx1c2hfaWNhY2hlKTogJzsnIGlzIGEgY29tbWVudAorCWNoYXJhY3RlciBvbiBEYXJ3aW4sIHVzZSAnXG5cdCcgaW5zdGVhZC4KKworMjAwNC0wNi0yNiAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIGxpYnRvb2wtdmVyc2lvbjogRml4IHR5cG8gaW4gcmV2aXNpb24vYWdlLgorCisyMDA0LTA2LTE3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogbGlidG9vbC12ZXJzaW9uOiBOZXcuCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBVc2UgLXZlcnNpb24taW5mbyBmb3Igc29uYW1lLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBydWxlcy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGF1dG9tYWtlIDEuOC41LgorCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBjb25maWd1cnkuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDYtMTUgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIC5jdnNpZ25vcmU6IE5ldyBmaWxlLgorCisyMDA0LTA2LTEwICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TIChmZmlfY2FsbF91bml4KTogSW5zZXJ0IGdyb3VwIGJhcnJpZXIgYnJlYWsKKwlmcF9kb25lLgorCShmZmlfY2xvc3VyZV9VTklYKTogRml4IGYxNC9mMTUgYWRqdXN0bWVudCBpZiBGTE9BVF9TWiBpcyBldmVyCisJY2hhbmdlZCBmcm9tIDguCisKKzIwMDQtMDYtMDYgIFNlYW4gTWNOZWlsICA8c2VhbkBtY25laWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB4ODZfNjQtKi1mcmVlYnNkKiBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBKb2UgQnVjayA8amJ1Y2tAd2Vsc2gtYnVjay5vcmc+CisKKwlCdWcgMTUwOTMKKwkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgZXhpc3RlbmNlIG9mIG1tYXAgYW5kIHN5cy9tbWFuLmggYmVmb3JlCisJY2hlY2tpbmcgYmxhY2tsaXN0LiAgRml4IHN1Z2dlc3RlZCBieSBKaW0gV2lsc29uLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA0LTI2ICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEdvIHRocm91Z2ggYSBub24tbGF6eSBwb2ludGVyIGZvciBpbml0aWFsCisJRkRFIGxvY2F0aW9uLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDQtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIChtYWluKTogRml4IGluaXRpYWxpemF0aW9uCisJZXJyb3IuIFJlcG9ydGVkIGJ5IFRob21hcyBIZWxsZXIgPHRoZWxsZXJAcHl0aG9uLm5ldD4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMDQtMDMtMjAgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBzcmMvcGEvbGludXguUzogRml4IHR5cG8uCisKKzIwMDQtMDMtMTkgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBNYWtlZmlsZS5hbTogVXBkYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMvcGEvZmZpLmguaW46IFJlbW92ZS4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaDogTmV3IGZpbGUuCisKKzIwMDQtMDItMTAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IEFkZCBQQSBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmFjOiBBZGQgUEEgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3BhL2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9wYS9mZmkuaC5pbjogQWRkIFBBIHN1cHBvcnQuCisJKiBzcmMvcGEvbGludXguUzogTmV3IGZpbGUuCisJKiBwcmVwX2NpZi5jOiBBZGQgUEEgc3VwcG9ydC4KKworMjAwNC0wMy0xNiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorCisJKiBzcmMvdHlwZXMuYzogRml4IGFsaWdubWVudCBzaXplIG9mIFg4Nl9XSU4zMiBjYXNlIGludDY0IGFuZAorCWRvdWJsZS4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZXBsYWNlIGVjaWYtPmNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGVjaWYtPmNpZi0+ZmxhZ3MuCisJKGZmaV9jYWxsLCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBSZXBsYWNlIGNpZi0+cnR5cGUtPnR5cGUKKwl3aXRoIGNpZi0+ZmxhZ3MuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9XSU4zMiBzdHJ1Y3QgY2FzZS4KKwkoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UgZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUyAocmV0c3RydWN0MWIsIHJldHN0cnVjdDJiLCBzY19yZXRzdHJ1Y3QxYiwKKwlzY19yZXRzdHJ1Y3QyYik6IEFkZCBmb3IgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlLgorCisyMDA0LTAzLTE1IEtlbGxleSBDb29rIDxrY29va0BnY2MuZ251Lm9yZz4KKworCSogY29uZmlndXJlLmluOiBSZW5hbWUgZmlsZSB0byAuLi4KKwkqIGNvbmZpZ3VyZS5hYzogLi4uIHRoaXMuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNC0wMy0xMiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggRUggaW5mb3JtYXRpb24gc28gaXQgY29ycmVzcG9uZHMgdG8KKwljaGFuZ2VzIGluIEVIIGZvcm1hdCByZXN1bHRpbmcgZnJvbSBhZGRpdGlvbiBvZiBsaW5rb25jZSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDQtMDMtMTEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKwkgICAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBTZXQgdGhlbS4KKwlSZW1vdmUgVlBBVEguIFJlbW92ZSBydWxlcyBmb3Igb2JqZWN0IGZpbGVzLiBSZW1vdmUgbXVsdGlsaWIgc3VwcG9ydC4KKwkoQU1fQ0NBU0ZMQUdTKTogQWRkLgorCSogY29uZmlndXJlLmluIChBQ19DT05GSUdfSEVBREVSUyk6IFJlbGFjZSBBTV9DT05GSUdfSEVBREVSLgorCShBQ19QUkVSRVEpOiBCdW1wIHZlcnNpb24gdG8gMi41OS4KKwkoQUNfSU5JVCk6IEZpbGwgd2l0aCB2ZXJzaW9uIGluZm8gYW5kIGJ1ZyBhZGRyZXNzLgorCShPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUmVtb3ZlLgorCShBTV9FTkFCTEVfTVVMVElMSUIpOiBVc2UgdGhpcyBpbnN0ZWFkIG9mIEFDX0FSR19FTkFCTEUuCisJRGUtcHJlY2lvdXMgQ0Mgc28gdGhhdCB0aGUgcmlnaHQgZmxhZ3MgYXJlIHBhc3NlZCBkb3duIHRvIG11bHRpbGlicy4KKwkoQUNfTVNHX0VSUk9SKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19FUlJPUi4KKwkoQUNfQ09ORklHX0ZJTEVTKTogUmVwbGFjZSBvYnNvbGV0ZSBtYWNybyBBQ19MSU5LX0ZJTEVTLgorCShBQ19PVVRQVVQpOiBSZW9yZ2FuaXplIHRoZSBvdXRwdXQgd2l0aCBBQ19DT05GSUdfQ09NTUFORFMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBhY2xvY2FsLm00OiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluLCBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDA0LTAzLTExICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19VTklYKTogR2V0IGZsb2F0aW5nIHBvaW50CisJYXJndW1lbnRzIGZyb20gZnAgcmVnaXN0ZXJzIG9ubHkgZm9yIHRoZSBmaXJzdCA4IHBhcmFtZXRlciBzbG90cy4KKwlEb24ndCBjb252ZXJ0IGEgZmxvYXQgcGFyYW1ldGVyIHdoZW4gcGFzc2VkIGluIG1lbW9yeS4KKworMjAwNC0wMy0wOSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgY29uZmlnL2FjY3Jvc3MubTQgY29ycmVjdGlvbi4KKworMjAwNC0wMi0yNSAgTWF0dCBLcmFhaSAgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ2hhbmdlCisJZWNpZi0+Y2lmLT5ieXRlcyB0byBieXRlcy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgYnJhY2VzIGFyb3VuZCBuZXN0ZWQgaWYgc3RhdGVtZW50LgorCisyMDA0LTAyLTA5ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAocG9pbnRlcik6IFBPV0VSUEM2NCBoYXMgOCBieXRlIHBvaW50ZXJzLgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGaXggdHlwby4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBQYXNzIC1tbG9uZy1kb3VibGUtMTI4CisJZm9yIHBvd2VycGM2NC0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCisyMDA0LTAyLTA4ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXAgPEZGSV9MSU5VWDY0Pik6IENvcnJlY3QKKwlsb25nIGRvdWJsZSBmdW5jdGlvbiByZXR1cm4gYW5kIGxvbmcgZG91YmxlIGFyZyBoYW5kbGluZy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBGb3JtYXR0aW5nLiAgRGVsZXRlIHVudXNlZCAibmciIHZhci4KKwlVc2UgImVuZF9wZnIiIGluc3RlYWQgb2YgIm5mIi4gIENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisJTG9jYWxpc2UgInRlbXAiLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2F2ZSBmMiBsb25nIGRvdWJsZQorCXJldHVybiB2YWx1ZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQWxsb2NhdGUKKwlzcGFjZSBmb3IgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlLiAgQWRqdXN0IHN0YWNrIGZyYW1lIGFuZCBvZmZzZXRzLgorCUxvYWQgZjIgbG9uZyBkb3VibGUgcmV0dXJuLgorCisyMDA0LTAyLTA3ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYzogVXNlIDE2IGJ5dGUgbG9uZyBkb3VibGUgZm9yIFBPV0VSUEM2NC4KKworMjAwNC0wMS0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y5KTogU2hpZnQgdGhlIHBhcmFtZXRlciBhcnJheQorCXdoZW4gdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcyBpcyBwYXNzZWQgaW4gJW8wLgorCShmZmlfVjlfcmV0dXJuX3N0cnVjdCk6IFJlbmFtZSBpbnRvIGZmaV92OV9sYXlvdXRfc3RydWN0LgorCShmZmlfdjlfbGF5b3V0X3N0cnVjdCk6IEFsaWduIHRoZSBmaWVsZCBmb2xsb3dpbmcgYSBuZXN0ZWQgc3RydWN0dXJlCisJb24gYSB3b3JkIGJvdW5kYXJ5LiAgVXNlIG1lbW1vdmUgaW5zdGVhZCBvZiBtZW1jcHkuCisJKGZmaV9jYWxsKTogVXBkYXRlIGNhbGwgdG8gZmZpX1Y5X3JldHVybl9zdHJ1Y3QuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWZpbmUgJ2N0eCcgb25seSBmb3IgVjguCisJKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogQ2xvbmUgaW50byBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OAorCWFuZCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgpOiBSZXR1cm4gbG9uZyBkb3VibGVzIGJ5IHJlZmVyZW5jZS4KKwlBbHdheXMgc2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAgRm9yIHN0cnVjdHVyZXMgYW5kIGxvbmcKKwlkb3VibGVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkpOiBTa2lwIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3Mgb25seQorCWlmIHJlcXVpcmVkLiAgU2hpZnQgdGhlIG1heGltdW0gZmxvYXRpbmctcG9pbnQgc2xvdCBhY2NvcmRpbmdseS4gIEZvcgorCWJpZyBzdHJ1Y3R1cmVzLCBjb3B5IHRoZSBhcmd1bWVudCBkaXJlY3RseTsgb3RoZXJ3aXNlLCBsZWZ0LWp1c3RpZnkgdGhlCisJYXJndW1lbnQgYW5kIGNhbGwgZmZpX3Y5X2xheW91dF9zdHJ1Y3QgdG8gbGF5IG91dCB0aGUgc3RydWN0dXJlIG9uCisJdGhlIHN0YWNrLgorCSogc3JjL3NwYXJjL3Y4LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OCk6IFBhc3MgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIFVwZGF0ZSBjYWxsIHRvCisJZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjguICBTaG9ydC1jaXJjdWl0IEZGSV9UWVBFX0lOVCBoYW5kbGluZy4KKwlTa2lwIHRoZSAndW5pbXAnIGluc24gd2hlbiByZXR1cm5pbmcgbG9uZyBkb3VibGVzIGFuZCBzdHJ1Y3R1cmVzLgorCSogc3JjL3NwYXJjL3Y5LlM6IFVuZGVmIFNUQUNLRlJBTUUgYmVmb3JlIGRlZmluaW5nIGl0LgorCShmZmlfY2xvc3VyZV92OSk6IEluY3JlYXNlIHRoZSBmcmFtZSBzaXplIGJ5IDIgd29yZHMuICBTaG9ydC1jaXJjdWl0CisJRkZJX1RZUEVfSU5UIGhhbmRsaW5nLiAgTG9hZCBzdHJ1Y3R1cmVzIGJvdGggaW4gaW50ZWdlcnMgYW5kCisJZmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIG9uIHJldHVybi4KKwkqIFJFQURNRTogVXBkYXRlIHN0YXR1cyBvZiB0aGUgU1BBUkMgcG9ydC4KKworMjAwNC0wMS0yNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBUcmVhdCByZXN1bHQgdmFsdWUKKwlhcyBvZiB0eXBlIGZmaV9hcmcuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIChtYWluKTogRml4IENIRUNLLgorCisyMDA0LTAxLTIyICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBUcmVhdCByZXN1bHQKKwl2YWx1ZSBhcyBvZiB0eXBlIGZmaV9hcmcsIG5vdCB1bnNpZ25lZCBpbnQuCisKKzIwMDQtMDEtMjEgIE1pY2hhZWwgUml0emVydCAgPHJpdHplcnRAdC1vbmxpbmUuZGU+CisKKwkqIGZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDYXN0IHRoZSBSSFMgb2YgYW4gYXNzaWdubWVudCBpbnN0ZWFkCisJb2YgdGhlIExIUy4KKworMjAwNC0wMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfMzIgZm9yCisJU29sYXJpcy4KKworMjAwNC0wMS0wOCAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBDYXN0IE1BUF9GQUlMRUQKKwl0byB2b2lkICouCisKKzIwMDMtMTItMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBDYXN0IHBvaW50ZXJzIHRvCisJc2l6ZV90IGluc3RlYWQgb2YgaW50LgorCisyMDAzLTEyLTA0ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IEluY2x1ZGUgPGZsb2F0Lmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYyAobWFpbik6IFJlcGxhY2UgdmFyaWFibGUKKwlpbnQgaSB3aXRoIHVuc2lnbmVkIGxvbmcgdWwuCisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCisyMDAzLTEyLTAyICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisKKwlQUiBvdGhlci8xMzIyMQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKToKKwlBbGlnbiBhcmd1bWVudHMgdG8gMzIgYml0cy4KKworMjAwMy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJUFIgb3RoZXIvMTMyMjEKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogQ29zbWV0aWNzLgorCisyMDAzLTExLTI2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEluY2x1ZGUgPGZjbnRsLmg+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvbnZlcnQgdGhlIG1tYXAgdG8KKwl0aGUgcmlnaHQgdHlwZS4KKworMjAwMy0xMS0yMSAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCisJKiBjb25maWd1cmUuaW46IENhbGwgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgaW5jbHVkZSBkaXIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgTU1BUCBkZWZpbml0aW9ucy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFVzZSBNTUFQIGZ1bmN0aW9uYWxpdHkKKwlmb3IgZmZpX2Nsb3N1cmUgaWYgYXZhaWxhYmxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMjAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYWtlIHRoZSAtbGdjY19zIGNvbmRpdGlvbmFsLgorCisyMDAzLTExLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIERZTERfTElCUkFSWV9QQVRIIGZvciBkYXJ3aW4uCisJQWRkIC1sZ2NjX3MgdG8gYWRkaXRpb25hbCBmbGFncy4KKworMjAwMy0xMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuYW06IFBSIGxpYmdjai8xMTE0NywgaW5zdGFsbAorCXRoZSBmZml0YXJnZXQuaCBoZWFkZXIgZmlsZSBpbiBhIGdjYyB2ZXJzaW9uZWQgYW5kIHRhcmdldAorCWRlcGVuZGVudCBwbGFjZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCisyMDAzLTExLTA5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBQcmludCByZXN1bHQgYW5kIGNoZWNrCisJd2l0aCBkZy1vdXRwdXQgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTWFrZSBmZmlfY2xvc3VyZQorCXN0YXRpYy4KKworMjAwMy0xMS0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisKKzIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYzogRG8gYSBjaGVjayBvbiB0aGUgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMTEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgdGhlIHZhbGlkaXR5IGNoZWNrIGFmdGVyCisJdGhlIGluaXRpYWxpemF0aW9uLgorCisyMDAzLTEwLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3KTogUmVwbGFjZQorCUZGSV9BU1NFUlQoRkFMU0UpIHdpdGggRkZJX0FTU0VSVCgwKS4KKworMjAwMy0xMC0yMiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlcGxhY2UgdW5kZWZpbmVkIFVJTlQzMiBhbmQgZnJpZW5kcyB3aXRoCisJX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpIGFuZCBmcmllbmRzLgorCisyMDAzLTEwLTIyICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBzcmMvaWE2NC9mZmkuYzogUmVwbGFjZSBGQUxTRS9UUlVFIHdpdGggZmFsc2UvdHJ1ZS4KKworMjAwMy0xMC0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBjb25maWd1cmUuaW46IEFDX0xJTktfRklMRVMoZmZpdGFyZ2V0LmgpLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgorCisyMDAzLTEwLTIxICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJQXZvaWQgdGhhdCBmZmkuaCBpbmNsdWRlcyBmZmljb25maWcuaC4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBJbmNsdWRlIGZmaXRhcmdldC5oIGZpbGVzCisJKFRBUkdFVF9TUkNfTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShUQVJHRVRfU1JDX01JUFNfU0dJKTogUmVtb3ZlZC4KKwkoTUlQU19HQ0MpOiBSZW5hbWVkIHRvIFRBUkdFVF9TUkNfTUlQU19JUklYLgorCShNSVBTX1NHSSk6IFJlbW92ZWQuCisJKENMRUFORklMRVMpOiBSZW1vdmVkLgorCShtb3N0bHljbGVhbi1hbSwgY2xlYW4tYW0sIG1vc3RseWNsZWFuLXN1YiwgY2xlYW4tc3ViKTogTmV3CisJdGFyZ2V0cy4KKwkqIGFjY29uZmlnLmg6IFJlbW92ZWQuCisJKiBjb25maWd1cmUuaW46IENvbXB1dGUgc2l6ZW9mcyBvbmx5IGZvciBkb3VibGUgYW5kIGxvbmcgZG91YmxlLgorCVVzZSB0aGVtIHRvIGRlZmluZSBhbmQgc3Vic3QgSEFWRV9MT05HX0RPVUJMRS4gIEluY2x1ZGUgY29tbWVudHMKKwlpbnRvIEFDX0RFRklORSBpbnN0ZWFkIG9mIHVzaW5nIGFjY29uZmlnLmguICBDcmVhdGUKKwlpbmNsdWRlL2ZmaXRhcmdldC5oIGluc3RlYWQgb2YgaW5jbHVkZS9mZmljb25maWcuaC4gIFJlbmFtZQorCU1JUFNfR0NDIHRvIE1JUFNfSVJJWCwgZHJvcCBNSVBTX1NHSSBzaW5jZSB3ZSBhcmUgaW4gZ2NjJ3MgdHJlZS4KKwlBQ19ERUZJTkUgRUhfRlJBTUVfRkxBR1MuCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtIChESVNUQ0xFQU5GSUxFUyk6IE5ldyBhdXRvbWFrZSBtYWNyby4KKwkoaGFja19EQVRBKTogQWRkIGZmaXRhcmdldC5oLgorCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIGFsbCBzeXN0ZW0gc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisJRGVjbGFyZSByYXcgQVBJIGV2ZW4gaWYgaXQgaXMgbm90IGluc3RhbGxlZCwgd2h5IGJvdGhlcj8KKwlVc2UgbGltaXRzLmggaW5zdGVhZCBvZiBTSVpFT0ZfKiB0byBkZWZpbmUgZmZpX3R5cGVfKi4gIERvCisJbm90IGRlZmluZSBFSF9GUkFNRV9GTEFHUywgaXQgaXMgaW4gZmZpY29uZmlnLmggbm93LiAgSW5jbHVkZQorCWZmaXRhcmdldC5oIGluc3RlYWQgb2YgZmZpY29uZmlnLmguICBSZW1vdmUgQUxJR04gbWFjcm8uCisJKFVJTlRfQVJHLCBJTlRfQVJHKTogUmVtb3ZlZCwgdXNlIGZmaV9hcmcgYW5kIGZmaV9zYXJnIGluc3RlYWQuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoYm9vbCk6IERvIG5vdCBkZWZpbmUuCisJKGZmaV9hc3NlcnQpOiBBY2NlcHQgZmFpbGVkIGFzc2VydGlvbi4KKwkoZmZpX3R5cGVfdGVzdCk6IFJldHVybiB2b2lkIGFuZCBhY2NlcHQgZmlsZS9saW5lLgorCShGRklfQVNTRVJUKTogUGFzcyBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCisJKEZGSV9BU1NFUlRfQVQpOiBOZXcgbWFjcm8uCisJKEZGSV9BU1NFUlRfVkFMSURfVFlQRSk6IE5ldyBtYWNyby4KKwkoVUlOVDgsIFNJTlQ4LCBVSU5UMTYsIFNJTlQxNiwgVUlOVDMyLCBTSU5UMzIsCisJVUlOVDY0LCBTSU5UNjQpOiBEZWZpbmUgaGVyZSB3aXRoIGdjYydzIF9fYXR0cmlidXRlX18gbWFjcm8KKwlpbnN0ZWFkIG9mIGluIGZmaS5oCisJKEZMT0FUMzIsIEFMSUdOKTogRGVmaW5lIGhlcmUgaW5zdGVhZCBvZiBpbiBmZmkuaAorCSogaW5jbHVkZS9mZmktbWlwcy5oOiBSZW1vdmVkLiAgSXRzIGNvbnRlbnQgbW92ZWQgdG8KKwlzcmMvbWlwcy9mZml0YXJnZXQuaCBhZnRlciBzZXBhcmF0aW5nIGFzc2VtYmx5IGFuZCBDIHNlY3Rpb25zLgorCSogc3JjL2FscGhhL2ZmaS5jLCBzcmMvYWxwaGEvZmZpLmMsIHNyYy9qYXZhX3Jhd19hcGkuYworCXNyYy9wcmVwX2NpZi5jLCBzcmMvcmF3X2FwaS5jLCBzcmMvaWE2NC9mZmkuYywKKwlzcmMvbWlwcy9mZmkuYywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpLmMsIHNyYy94ODYvZmZpNjQuYzoKKwlTSVpFT0ZfQVJHIC0+IEZGSV9TSVpFT0ZfQVJHLgorCSogc3JjL2lhNjQvZmZpLmM6IEluY2x1ZGUgc3RkYm9vbC5oIChwcm92aWRlZCBieSBHQ0MgMi45NSspLgorCSogc3JjL2RlYnVnLmMgKGZmaV9hc3NlcnQpOiBBY2NlcHQgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgorCShmZmlfdHlwZV90ZXN0KTogUmV3cml0dGVuLgorCSogc3JjL3ByZXAtY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlLCBmZmlfcHJlcF9jaWYpOiBDYWxsCisJRkZJX0FTU0VSVF9WQUxJRF9UWVBFLgorCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAorCXNyYy9pYTY0L2ZmaXRhcmdldC5oLCBzcmMvbTY4ay9mZml0YXJnZXQuaCwKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCisJc3JjL3MzOTAvZmZpdGFyZ2V0LmgsIHNyYy9zaC9mZml0YXJnZXQuaCwKKwlzcmMvc2g2NC9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaXRhcmdldC5oLAorCXNyYy94ODYvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KKwkqIHNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9zeXN2LlMsIHNyYy9pYTY0L3VuaXguUywKKwlzcmMvbTY4ay9zeXN2LlMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKKwlzcmMvcG93ZXJwYy9haXguUywgc3JjL3Bvd2VycGMvZGFyd2luLlMsCisJc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcG93ZXJwYy9saW51eDY0LlMsCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMsIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMsCisJc3JjL3Bvd2VycGMvc3lzdi5TLCBzcmMvczM5MC9zeXN2LlMsIHNyYy9zaC9zeXN2LlMsCisJc3JjL3NoNjQvc3lzdi5TLCBzcmMvc3BhcmMvdjguUywgc3JjL3NwYXJjL3Y5LlMsCisJc3JjL3g4Ni9zeXN2LlMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvd2luMzIuUzoKKwlpbmNsdWRlIGZmaWNvbmZpZy5oCisKKzIwMDMtMTAtMjAgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvbWlwcy9mZmkuYzogVXNlIF9BQklOMzIsIF9BQklPMzIgaW5zdGVhZCBvZiBleHRlcm5hbAorCV9NSVBTX1NJTV9OQUJJMzIsIF9NSVBTX1NJTV9BQkkzMi4KKworMjAwMy0xMC0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBEZWNsYXJlIGJ5dGVzIGFnYWluLgorCVVzZWQgd2hlbiBGRklfREVCVUcgPSAxLgorCisyMDAzLTEwLTE0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogRGVmYXVsdCBQT1dFUlBDNjQgdG8gOCBieXRlIHNpemUKKwlhbmQgYWxpZ24uCisKKzIwMDMtMTAtMDYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBpbmNsdWRlL2ZmaV9taXBzLmg6IERlZmluZSBGRklfTUlQU19OMzIgZm9yIE4zMi9ONjQgQUJJcywKKwlGRklfTUlQU19PMzIgZm9yIE8zMiBBQkkuCisKKzIwMDMtMTAtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzY0IGZvcgorCVNQQVJDNjQuIENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHMsIGFybSwKKwlzdHJvbmdhcm0sIHhzY2FsZS4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisKKzIwMDMtMDktMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvYWl4LlM6IENsZWFudXAgd2hpdGVzcGFjZXMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQ2xlYW51cCB3aGl0ZXNwYWNlcywgY29tbWVudCBmb3JtYXR0aW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCisyMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3R5cGVzLmMgKGRvdWJsZSk6IEFkZCBBSVggYW5kIERhcndpbiB0byB0aGUgcmlnaHQgVFlQRURFRi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlbW92ZSB0aGUgcG9pbnRlciB0byB0aGUgb3V0Z29pbmcKKwlwYXJhbWV0ZXIgc3RhY2suCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBzdHJ1Y3R1cmVzCisJYWNjb3JkaW5nIHRvIHRoZSBEYXJ3aW4vQUlYIEFCSS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IExpa2V3aXNlLgorCVJlbW92ZSB0aGUgb3V0Z29pbmcgcGFyYW1ldGVyIHN0YWNrIGxvZ2ljLiBTaW1wbGlmeSB0aGUgZXZhbHVhdGlvbgorCW9mIHRoZSBkaWZmZXJlbnQgQ0FTRSB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvdXN1cmUpOiBBdm9pZCB0aGUgY2FzdHMgb24gbHZhbHVlcy4gQ2hhbmdlIHRoZSBicmFuY2gKKwlzdGF0ZW1lbnQgaW4gdGhlIHRyYW1wb2xpbmUgY29kZS4KKworMjAwMy0wOS0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFRha2UgYWNjb3VudCBpbnRvIHRoZSBhbGlnbmVtZW50CisJZm9yIHRoZSByZWdpc3RlciBzaXplLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEhhbmRsZSB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZQorCWFkZHJlc3MgY29ycmVjdGx5LgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJldHVybiB0aGUgYXBwcm9wcmlhdGUgdHlwZSB3aGVuCisJdGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUuCisJKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRml4IHRoZSBzdGFjayBsYXlvdXQgZm9yCisJdGhlIDY0LWJpdCByZXR1cm4gdmFsdWUuICBVcGRhdGUgY29weXJpZ2h0IHllYXJzLgorCisyMDAzLTA5LTE3ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBTZWFyY2ggaW4KKwlzcmNkaXIgZm9yIGZmaV9taXBzLmguCisKKzIwMDMtMDktMTIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEluY2x1ZGUgdGFpbCBwYWRkaW5nIGluCisJc3RydWN0dXJlIHNpemUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IENvcnJlY3QKKwlwbGFjZW1lbnQgb2YgZmxvYXQgcmVzdWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgKGNsb3N1cmVfdGVzdF9mbjEpOiBDb3JyZWN0CisJY2FzdCBvZiAicmVzcCIgZm9yIGJpZy1lbmRpYW4gNjQgYml0IG1hY2hpbmVzLgorCisyMDAzLTA5LTExICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogTWVyZ2UgaWRlbnRpY2FsIFNIIGFuZCBBUk0KKwl0eXBlZGVmcywgYW5kIGFkZCBQT1dFUlBDNjQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBuZXh0X2FyZyBjYWxjIGZvcgorCXN0cnVjdCBzcGxpdCBvdmVyIGdwciBhbmQgcmVzdC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IGludGFyZ19jb3VudCBmb3Igc3RydWN0dXJlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IEZpeCBncHIgb2Zmc2V0cy4KKworMjAwMy0wOS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpIEhhbmRsZSBzdHJ1Y3QKKwlwYXNzaW5nIGNvcnJlY3RseS4KKworMjAwMy0wOS0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgYnVpbGQgcnVsZXMgZm9yIGZmaXRlc3QuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IEluY2x1ZGUgPHN0ZGxpYi5oPiB0byBmaXggY29tcGlsZXIgd2FybmluZworCWFib3V0IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGFib3J0KCkuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogTWFrZWZpbGUuYW06IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLiBGaXhlcyBQUiBvdGhlci8xMTQxMS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogQnVpbHQKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBOZXcgZmlsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCisKKzIwMDMtMDgtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKE9GU19JTlQxNik6IFNldCAwIGZvciBsaXR0bGUgZW5kaWFuIGNhc2UuICBVcGRhdGUKKwljb3B5cmlnaHQgeWVhcnMuCisKKzIwMDMtMDgtMDIgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBNb2RpZnkgZm9yIGNoYW5nZWQgZ2NjCisJc3RydWN0dXJlIHBhc3NpbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IFJlbW92ZSBjb2RlIHdyaXRpbmcgdG8gcGFybSBzYXZlIGFyZWEuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSByZXR1cm4KKwlhZGRyZXNzIGluIGxyIGZyb20gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgY2FsbCB0byBjYWxjdWxhdGUKKwl0YWJsZSBhZGRyZXNzLiAgT3B0aW1pemUgZnVuY3Rpb24gdGFpbC4KKworMjAwMy0wNy0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvc3BhcmMvZmZpLmM6IEhhbmRsZSBhbGwgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLiBGaXhlcyBzZWNvbmQgcGFydCBvZiBQUiB0YXJnZXQvMTE0MTAuCisKKzIwMDMtMDctMTEgIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KKworCSogUkVBRE1FOiBOb3RlIHRoYXQgbGliZmZpIGlzIG5vdCBwYXJ0IG9mIEdDQy4gIFVwZGF0ZSB0aGUgcHJvamVjdAorCVVSTCBhbmQgc3RhdHVzLgorCisyMDAzLTA2LTE5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDYtMTMgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLnVsZWIxMjgvLnNsZWIxMjggZGlyZWN0aXZlcy4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMy0wNi0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAcnIuaWlqNHUub3IuanA+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0htZWRpYSBzdXBwb3J0LiAgRml4IGEgdHlwbyBvZiBTSCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW4gKHNoNjQtKi1saW51eCosIHNoNSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIbWVkaWEgc3VwcG9ydC4KKwkqIHNyYy9zaDY0L2ZmaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9zaDY0L3N5c3YuUzogTmV3IGZpbGUuCisKKzIwMDMtMDUtMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKEhBVkVfUk9fRUhfRlJBTUUpOiBDaGVjayB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uCisJc2hvdWxkIGJlIHJlYWQtb25seS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRUhfRlJBTUVfRkxBR1MpOiBEZWZpbmUuCisJKiBzcmMvYWxwaGEvb3NmLlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuICBJbmNsdWRlIGZmaS5oLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBVc2UgcGNyZWwgZW5jb2RpbmcKKwlpZiAtZnBpYy8tZlBJQy8tbXJlbG9jYXRhYmxlLgorCSogc3JjL3Bvd2VycGMvcG93ZXJwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IElmIEhBVkVfUk9fRUhfRlJBTUUgaXMgZGVmaW5lZCwgZG9uJ3QgaW5jbHVkZQorCSN3cml0ZSBpbiAuZWhfZnJhbWUgZmxhZ3MuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3VuaXg2NC5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuICBVc2UgcGNyZWwgZW5jb2RpbmcgaWYgLWZwaWMvLWZQSUMuCisJKiBzcmMvczM5MC9zeXN2LlM6IFVzZSBFSF9GUkFNRV9GTEFHUy4gIEluY2x1ZGUgZmZpLmguCisKKzIwMDMtMDUtMDcgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCUZpeGVzIFBSIGJvb3RzdHJhcC8xMDY1NgorCSogY29uZmlndXJlLmluIChIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCk6IFRlc3QgYXNzZW1ibGVyCisJc3VwcG9ydCBmb3IgLnJlZ2lzdGVyIHBzZXVkby1vcC4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wNC0xOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKFBPV0VSUEM2NCk6IERlZmluZSBpZiA2NC1iaXQuCisJKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVg2NCBvbiBQT1dFUlBDLgorCU1ha2UgaXQgdGhlIGRlZmF1bHQgb24gUE9XRVJQQzY0LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIHRvIDI0IG9uIFBPV0VSUEM2NC4KKwkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHBvd2VycGMtKi1saW51eCogaW50byBwb3dlcnBjKi0qLWxpbnV4Ki4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBEZWZpbmUuCisJKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFJlbmFtZWQgZnJvbQorCWZmaV9wcmVwX2FyZ3MuICBDYXN0IHBvaW50ZXJzIHRvIHVuc2lnbmVkIGxvbmcgdG8gc2h1dCB1cCB3YXJuaW5ncy4KKwkoTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQsIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0LAorCUFTTV9ORUVEU19SRUdJU1RFUlM2NCk6IE5ldy4KKwkoZmZpX3ByZXBfYXJnczY0KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTElOVVg2NCBBQkkuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KKwkoZmx1c2hfaWNhY2hlKTogU3Vycm91bmQgYnkgI2lmbmRlZiBQT1dFUlBDNjQuCisJKGZmaV9kYmxmbCk6IE5ldyB1bmlvbiB0eXBlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFVzZSBpdCB0byBhdm9pZCBhbGlhc2luZyBwcm9ibGVtcy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBTdXJyb3VuZCB3aG9sZSBmaWxlIGJ5ICNpZm5kZWYKKwlfX3Bvd2VycGM2NF9fLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSBmZmlfcHJlcF9hcmdzIHRvIGZmaV9wcmVwX2FyZ3NfU1lTVi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMvcG93ZXJwYy9saW51eDY0LlMgYW5kCisJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorCisJKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4sIGNsb3N1cmVfdGVzdF9mbjEsIGNsb3N1cmVfdGVzdF9mbjIsCisJY2xvc3VyZV90ZXN0X2ZuMyk6IEZpeCByZXN1bHQgcHJpbnRpbmcgb24gYmlnLWVuZGlhbiA2NC1iaXQKKwltYWNoaW5lcy4KKwkobWFpbik6IFByaW50IHRzdDJfYXJnIGluc3RlYWQgb2YgdW5pbml0aWFsaXplZCB0c3QyX3Jlc3VsdC4KKworCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IEhpZGUgd2hhdCBjbG9zdXJlIHBvaW50ZXIgcmVhbGx5IHBvaW50cyB0bworCWZyb20gdGhlIGNvbXBpbGVyLgorCisyMDAzLTA0LTE2ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogY29uZmlndXJlLmluIChhcm0tKi1uZXRic2RlbGYqKTogQWRkIGNvbmZpZ3VyYXRpb24uCisJKGNvbmZpZ3VyZSk6IFJlZ2VuZXJhdGVkLgorCisyMDAzLTA0LTA0ICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDAzLTAzLTIxICBaZGVuZWsgRHZvcmFrICA8cmFrZHZlckBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3o+CisKKwkqIGxpYmZmaS9pbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgWDg2IGluc3RlYWQgb2YgWDg2XzY0IGluIDMyCisJYml0IG1vZGUuCisJKiBsaWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOgorCVJlY2VpdmUgY2xvc3VyZSBwb2ludGVyIHRocm91Z2ggcGFyYW1ldGVyLCByZWFkIGFyZ3MgdXNpbmcKKwlfX2J1aWx0aW5fZHdhcmZfY2ZhLgorCShGRklfSU5JVF9UUkFNUE9MSU5FKTogU2VuZCBjbG9zdXJlIHJlZmVyZW5jZSB0aHJvdWdoIGVheC4KKworMjAwMy0wMy0xMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogY29uZmlndXJlLmluOiBBdm9pZCB0cmFpbGluZyAvLiBpbiB0b29sZXhlY2xpYmRpci4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wMy0wMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IFJlY29kZSB0byBmaXQgZHluYW1pYyBsaWJyYXJpZXMuCisKKzIwMDMtMDItMDYgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzoKKwlGaXggYWxpZ25lbWVudCBidWcsIGFsbG9jYXRlIDggYnl0ZXMgZm9yIHRoZSByZXN1bHQuCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzoKKwlMaWtld2lzZS4KKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6CisJVXBkYXRlIHN0YWNrZnJhbWUgZGVzY3JpcHRpb24gZm9yIGFpeC9kYXJ3aW5fY2xvc3VyZS5TLgorCisyMDAzLTAyLTA2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGhpZGRlbiB2aXNpYmlsaXR5CisJYXR0cmlidXRlLgorCisyMDAzLTAxLTMxICBDaHJpc3RpYW4gQ29ybmVsc3NlbiAgPGNjb3JuQGNzLnR1LWJlcmxpbi5kZT4sCisJICAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRqdXN0IGNvbW1hbmQgdG8gc291cmNlIGNvbmZpZy1tbC5pbiB0byBhY2NvdW50CisJZm9yIGNoYW5nZXMgdG8gdGhlIGxpYmZmaV9iYXNlZGlyIGRlZmluaXRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogUmVtb3ZlICR7c3JjZGlyfSBmcm9tIHZhbHVlIGFuZCBpbmNsdWRlIHRyYWlsaW5nCisJc2xhc2ggaWYgbm9uZW1wdHkuCisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IHNoYXJlZCBsaWJzLgorCisyMDAzLTAxLTI4ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRW5hYmxlIEZGSV9DTE9TVVJFUyBmb3IgeDg2XzY0LgorCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3LgorCShmZmlfY2xvc3VyZV9VTklYNjRfaW5uZXIpOiBOZXcuCisJKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2xvc3VyZV9VTklYNjQpOiBOZXcuCisKKzIwMDMtMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCisJUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCisJKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAzLTAxMDI3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogRml4IHR5cG8uCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwMy0wMS0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogQWRkIEF1Z21lbnRhdGlvbiBzaXplIHRvCisJdW53aW5kIGluZm8uCisKKzIwMDMtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAzLTAxLTE0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2hlY2sgZm9yIHZvaWQgcmV0dmFsLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogQWRkIHVud2luZCBpbmZvLgorCisyMDAzLTAxLTE0ICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+CisKKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBPbmx5IHVzZSBmZmlfY2xvc3VyZXMgaWYgdGhvc2UgYXJlCisJc3VwcG9ydGVkLgorCisyMDAzLTAxLTEzIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBsaWJmZmkvc3JjL2ZmaXRlc3QuYworCSBhZGQgY2xvc3VyZSB0ZXN0Y2FzZXMKKworMjAwMy0wMS0xMyBLZXZpbiBCLiBIZW5kcmlja3MgPGtoZW5kcmlja3NAaXZleS51d28uY2E+CisKKwkqIGxpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYworCSBmaXggYWxpZ25tZW50IGJ1ZyBmb3IgZmxvYXQgKDQgYnl0ZSBhbGlnbmVkIGlzbyA4IGJ5dGUpCisKKzIwMDMtMDEtMDkgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KKworMjAwMy0wMS0wMyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgY2xvc3VyZSBkZWZpbmVzIGZvciBTUEFSQywgU1BBUkM2NC4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2Ugc3RhdGljIHN0b3JhZ2UgZm9yIGNsb3N1cmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyKTogTmV3LgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogTmV3LgorCSogc3JjL3NwYXJjL3Y5LlMgKGZmaV9jbG9zdXJlX3Y5KTogTmV3LgorCisyMDAyLTExLTEwICBSYW5qaXQgTWF0aGV3IDxybWF0aGV3QGhvdG1haWwuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBGRklfU1REQ0FMTCBmZmlfdHlwZQorCSAgZW51bWVyYXRpb24gZm9yIFg4Nl9XSU4zMi4KKwkqIHNyYy94ODYvd2luMzIuUzogQWRkZWQgZmZpX2NhbGxfU1REQ0FMTCBmdW5jdGlvbgorCSAgZGVmaW5pdGlvbi4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsL2ZmaV9yYXdfY2FsbCk6IEFkZGVkCisJICBzd2l0Y2ggY2FzZXMgZm9yIHJlY29nbmlzaW5nIEZGSV9TVERDQUxMIGFuZAorCSAgY2FsbGluZyBmZmlfY2FsbF9TVERDQUxMIGlmIHRhcmdldCBpcyBYODZfV0lOMzIuCisJKiBzcmMvZmZpdGVzdC5jIChteV9zdGRjYWxsX3N0cmxlbi9zdGRjYWxsX21hbnkpOgorCSAgc3RkY2FsbCB2ZXJzaW9ucyBvZiB0aGUgIm15X3N0cmxlbiIgYW5kICJtYW55IgorCSAgdGVzdCBmdW5jdGlvbnMgKGZvciBYODZfV0lOMzIpLgorCSAgQWRkZWQgdGVzdCBjYXNlcyB0byB0ZXN0IHN0ZGNhbGwgaW52b2NhdGlvbiB1c2luZworCSAgdGhlc2UgZnVuY3Rpb25zLgorCisyMDAyLTEyLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL3N5c3YuUzogQWRkIERXQVJGMiB1bndpbmQgaW5mby4KKworMjAwMi0xMS0yNyAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvczM5MC9zeXN2LlMgKC5laF9mcmFtZSBzZWN0aW9uKTogTWFrZSBzZWN0aW9uIHJlYWQtb25seS4KKworMjAwMi0xMS0yNiAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IEhhcyBzaXplIDggb24gSUE2NC4KKworMjAwMi0xMS0yMyAgSC5KLiBMdSA8aGpsQGdudS5vcmc+CisKKwkqIGFjaW5jbHVkZS5tNDogQWRkIGR1bW15IEFNX1BST0dfTElCVE9PTC4KKwlJbmNsdWRlIC4uL2NvbmZpZy9hY2Nyb3NzLm00LgorCSogYWNsb2NhbC5tNDsgUmVidWlsZC4KKwkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisKKzIwMDItMTEtMTUgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IEFkYXB0IHRvIHBjcmVsIEZERSBlbmNvZGluZy4KKworMjAwMi0xMS0xMSAgREogRGVsb3JpZSAgPGRqQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgY29tbW9uIGZpbGVzIGluIHRoZSByaWdodCBwbGFjZS4KKworMjAwMi0xMC0wOCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IEludGVycHJldAorCXJhdyBkYXRhIGFzIF9Kdl93b3JkIHZhbHVlcywgbm90IGZmaV9yYXcuCisJKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IExpa2V3aXNlLgorCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfamF2YV9yYXdfY2FsbCk6IENhbGwgaXQuCisJKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FsbCBpdC4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IEludGVycHJldCByZXR1cm4gdmFsdWUKKwlhcyBmZmlfYXJnLCBub3QgaW50LgorCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIG1pc3NpbmcKKwlGRklfVFlQRV9QT0lOVEVSIGNhc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuICBBbHNvLCBhc3N1bWUgcmV0dXJuCisJdmFsdWVzIGV4dGVuZGVkIHRvIHdvcmQgc2l6ZS4KKworMjAwMi0xMC0wMiAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmVtb3ZlIGRlYnVnIG91dHB1dC4KKworMjAwMi0xMC0wMSAgQm8gVGhvcnNlbiAgPGJvQHNtZXRhbmEuc3VzZS5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IGkzODYgd2luMzIgY29tcGlsYXRpb24uCisKKzIwMDItMDktMzAgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgczM5MHgtKi1saW51eC0qIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBTMzkwWCBmb3IgczM5MHggdGFyZ2V0cy4KKwkoRkZJX0NMT1NVUkVTKTogRGVmaW5lIGZvciBzMzkwL3MzOTB4LgorCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCisJKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvIG5vdCBjb21wdXRlIHN0YWNrIHNwYWNlIGZvciBzMzkwLgorCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBVc2UgOC1ieXRlIHBvaW50ZXJzIG9uIHMzOTB4LgorCSogc3JjL3MzOTAvZmZpLmM6IE1ham9yIHJld29yayBvZiBleGlzdGluZyBjb2RlLiAgQWRkIHN1cHBvcnQgZm9yCisJczM5MHggdGFyZ2V0cy4gIEFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDAyLTA5LTI5ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IEZpeCB0eXBvLgorCisyMDAyLTA5LTI4ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogc3JjL2FybS9zeXN2LlM6IElmIHdlIGRvbid0IGhhdmUgbWFjaGluZS9hc20uaCBhbmQgdGhlIHByZS1wcm9jZXNzb3IKKwloYXMgZGVmaW5lZCBfX1VTRVJfTEFCRUxfUFJFRklYX18sIHRoZW4gdXNlIGl0IGluIENOQU1FLgorCShmZmlfY2FsbF9TWVNWKTogSGFuZGxlIHNvZnQtZmxvYXQuCisKKzIwMDItMDktMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBGaXggbXVsdGlsaWIgeDg2LTY0IHN1cHBvcnQuCisKKzIwMDItMDktMjIgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KKworCSogTWFrZWZpbGUuYW0gKGFsbC1tdWx0aSk6IEZpeCBtdWx0aWxpYiBwYXJhbGxlbCBidWlsZC4KKworMjAwMi0wNy0xOSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCBicmFja2V0cy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNy0xOCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgU0ggc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluIChzaC0qLWxpbnV4Kiwgc2hbMzRdKi0qLWxpbnV4Kik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgU0ggc3VwcG9ydC4KKwkqIHNyYy9zaC9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvc2gvc3lzdi5TOiBOZXcgZmlsZS4KKwkqIHNyYy90eXBlcy5jOiBBZGQgU0ggc3VwcG9ydC4KKworMjAwMi0wNy0xNiAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy94ODYvZmZpNjQuYzogTmV3IGZpbGUgdGhhdCBhZGRzIHg4Ni02NCBzdXBwb3J0LgorCSogc3JjL3g4Ni91bml4NjQuUzogTmV3IGZpbGUgdGhhdCBoYW5kbGVzIGFyZ3VtZW50IHNldHVwIGZvcgorCXg4Ni02NC4KKwkqIHNyYy94ODYvc3lzdi5TOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJKiBzcmMveDg2L2ZmaS5jOiBEb24ndCB1c2UgdGhpcyBvbiB4ODYtNjQuCisJUmVtb3ZlIHVudXNlZCB2YXJzLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvbid0IGRvIHN0YWNrIHNpemUgY2FsY3VsYXRpb24KKwlmb3IgeDg2LTY0LgorCSogc3JjL2ZmaXRlc3QuYyAoc3RydWN0Nik6IE5ldyB0ZXN0IHRoYXQgdGVzdHMgYSBzcGVjaWFsIGNhc2UgaW4KKwl0aGUgeDg2LTY0IEFCSS4KKwkoc3RydWN0Nyk6IExpa2V3aXNlLgorCShzdHJ1Y3Q4KTogTGlrZXdpc2UuCisJKHN0cnVjdDkpOiBMaWtld2lzZS4KKwkoY2xvc3VyZV90ZXN0X2ZuKTogU2lsZW5jZSB3YXJuaW5nIGFib3V0IHRoaXMgd2hlbiBpdCdzIG5vdCB1c2VkLgorCShtYWluKTogQWRkIHRoZSBuZXcgdGVzdHMuCisJKG1haW4pOiBGaXggYSBjb3VwbGUgb2Ygd3JvbmcgY2FzdHMgYW5kIHNpbGVuY2Ugc29tZSBjb21waWxlciB3YXJuaW5ncy4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB4ODYtNjQgQUJJIGRlZmluaXRpb24uCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgeDg2LTY0IHN1cHBvcnQuCisJKiBjb25maWd1cmUuaW46IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCisyMDAyLTA2LTI0ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3R5cGVzLmM6IE1lcmdlIHNldHRpbmdzIGZvciBzaW1pbGFyIGFyY2hpdGVjdHVyZXMuCisJQWRkIHg4Ni02NCBzaXplcyBhbmQgYWxpZ25tZW50cy4KKworMjAwMi0wNi0yMyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgdW51c2VkIHZhcnMuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCisyMDAyLTA3LTE4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCisKKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX01JUFNfTElOVVgpOiBOZXcuCisJKGxpYmZmaV9sYV9TT1VSQ0VTKTogU3VwcG9ydCBNSVBTX0xJTlVYLgorCShsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyk6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisJKiBjb25maWd1cmUuaW4gKG1pcHM2NCotKik6IFNraXAuCisJKG1pcHMqLSotbGludXgqKTogTmV3LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL21pcHMvZmZpLmM6IEluY2x1ZGUgPHNnaWRlZnMuaD4uCisKKzIwMDItMDYtMDYgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TOiBTYXZlL3Jlc3RvcmUgJXI2LiAgQWRkIERXQVJGLTIgdW53aW5kIGluZm8uCisKKzIwMDItMDUtMjcgIFJvZ2VyIFNheWxlICA8cm9nZXJAZXllc29wZW4uY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHJlZmVyZW5jZSB0byBhdm4uCisKKzIwMDItMDUtMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBhbmQKKwlmaXggZm9ybWF0dGluZy4KKworMjAwMi0wNS0xMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBEZWNsYXJlIGZkIGF0CisJYmVnaW5uaW5nIG9mIGZ1bmN0aW9uIChmb3Igb2xkZXIgYXBwbGUgY2MpLgorCisyMDAyLTA1LTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUHJlc2VydmUgTEQgYXQKKwlzY3JpcHQgZW50cnksIGFuZCBzZXQgTEQgdG8gaXQgd2hlbiBjb25maWd1cmluZyBtdWx0aWxpYnMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDUtMDUgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoc3BhcmM2NC0qLW5ldGJzZCopOiBBZGQgdGFyZ2V0LgorCShzcGFyYy0qLW5ldGJzZGVsZiopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0yOCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluLCBjb25maWd1cmU6IEZpeCBTUEFSQyB0ZXN0IGluIHByZXZpb3VzIGNoYW5nZS4KKworMjAwMi0wNC0yOSAgR2VyaGFyZCBUb25uICA8R2VyaGFyZFRvbm5Ac3dvbC5kZT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBzcmMvczM5MC9mZmkuYzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCisJKiBzcmMvczM5MC9zeXN2LlM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgorCisyMDAyLTA0LTI4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChIQVZFX0FTX1NQQVJDX1VBX1BDUkVMKTogQ2hlY2sgZm9yIHdvcmtpbmcKKwklcl9kaXNwMzIoKS4KKwkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wNC0wOCAgSGFucyBCb2VobSAgPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogSGFuZGxlIEZGSV9UWVBFX0RPVUJMRQorCWNvcnJlY3RseS4KKwkqIHNyYy9pYTY0L3VuaXguUzogQWRkIHVud2luZCBpbmZvcm1hdGlvbi4gRml4IGNvbW1lbnRzLgorCVNhdmUgc3AgaW4gYSB3YXkgdGhhdCdzIGNvbXBhdGlibGUgd2l0aCB1bndpbmQgaW5mby4KKwkoZmZpX2NhbGxfdW5peCk6IENvcnJlY3RseSByZXN0b3JlIHNwIGluIGFsbCBjYXNlcy4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBBZGQsIGZpeCBjb21tZW50cy4KKworMjAwMi0wNC0wOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zcGFyYy92OC5TOiBNYWtlIC5laF9mcmFtZSBkZXBlbmRlbnQgb24gdGFyZ2V0IHdvcmQgc2l6ZS4KKworMjAwMi0wNC0wNiAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KKworCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMi0wNC0wNCAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBzcmMvc3BhcmMvdjguUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCisyMDAyLTAzLTMwICBLcmlzdGVyIFdhbGZyaWRzc29uICA8Y2F0b0BkZi5sdGguc2U+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGkqODYtKi1uZXRic2RlbGYqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTI5ICBEYXZpZCBCaWxsaW5naHVyc3QgPERhdmlkLkJpbGxpbmdodXJzdEByaW90aW50by5jb20+CisKKwlQUiBvdGhlci8yNjIwCisJKiBzcmMvbWlwcy9uMzIuczogRGVsZXRlCisJKiBzcmMvbWlwcy9vMzIuczogRGVsZXRlCisKKzIwMDItMDMtMjEgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGFscGhhKi0qLWZyZWVic2QqLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTAzLTE3ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CisKKwkqIE1ha2VmaWxlLmFtOiBsaWJmZmljb252ZW5pZW5jZSAtPiBsaWJmZmlfY29udmVuaWVuY2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IERlZmluZSBmZml0ZXN0X09CSkVDVFMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMi0wMy0wNyAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisJICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggY2xvc3VyZSBmaWxlcy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEFkZCBhaXhfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUENfREFSV0lOKTogQWRkIGRhcndpbl9jbG9zdXJlLlMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBBSVggYW5kIERhcndpbiBjbG9zdXJlIGRlZmluaXRpb25zLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgorCShmbHVzaF9pY2FjaGUsIGZsdXNoX3JhbmdlKTogTmV3IGZ1bmN0aW9ucy4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IE5ldyBmdW5jdGlvbi4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTmV3IGZpbGUuCisKKzIwMDItMDItMjQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIHR5cGVkZWYgZm9yIGZmaV9hcmcuCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogRGVjbGFyZSByaW50IHdpdGggZmZpX2FyZy4KKworMjAwMi0wMi0yMSAgQW5kcmVhcyBUb2JsZXIgIDx0b2FAcG9wLmFncmkuY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFNraXAgYXBwcm9wcmlhdGUKKwludW1iZXIgb2YgR1BScyBmb3IgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLgorCisyMDAyLTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBSZXBsYWNlIENIRUNLX1NJWkVPRiBhbmQgZW5kaWFuIHRlc3RzIHdpdGgKKwljcm9zcy1jb21waWxlciBmcmllbmRseSBtYWNyb3MuCisJKiBhY2xvY2FsLm00IChBQ19DT01QSUxFX0NIRUNLX1NJWkVPRiwgQUNfQ19CSUdFTkRJQU5fQ1JPU1MpOiBOZXcKKwltYWNyb3MuCisKKzIwMDItMDEtMTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9BSVgpOiBOZXcuCisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfREFSV0lOKTogTmV3LgorCisyMDAyLTAxLTE3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGZpbGVzLgorCShUQVJHRVRfU1JDX1BPV0VSUENfQUlYKTogTmV3LgorCShQT1dFUlBDX0FJWCk6IE5ldyBzdGFuemEuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIEFJWCBjYXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX2FiaSk6IEFkZCBGRklfQUlYLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfc3RhdHVzKTogVXNlICJsb25nIiB0byBzY2FsZSBmcmFtZQorCXNpemUuICBGaXggImxvbmcgZG91YmxlIiBzdXBwb3J0LgorCShmZmlfY2FsbCk6IEFkZCBGRklfQUlYIGNhc2UuCisJKiBzcmMvcG93ZXJwYy9haXguUzogTmV3LgorCisyMDAxLTEwLTA5ICBKb2huIEhvcm5rdmlzdCAgPGpvaG5AdG9hc3RlZG1hcnNobWFsbG93LmNvbT4KKworCUltcGxlbWVudCBEYXJ3aW4gUG93ZXJQQyBBQkkuCisJKiBjb25maWd1cmUuaW46IEhhbmRsZSBwb3dlcnBjLSotZGFyd2luKi4KKwkqIE1ha2VmaWxlLmFtOiBTZXQgc291cmNlIGZpbGVzIGZvciBQT1dFUlBDX0RBUldJTi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIEZGSV9EQVJXSU4gYW5kIEZGSV9ERUZBVUxUX0FCSSBmb3IKKwlQT1dFUlBDX0RBUldJTi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTmV3IGZpbGUuCisKKzIwMDEtMTAtMDcgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KKworCSogc3JjL3g4Ni9mZmkuYzogRml4IHNwZWxsaW5nIGVycm9yIG9mICJzZXBhcmF0ZSIgYXMgInNlcGVyYXRlIi4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAuYmFsaWduIGRpcmVjdGl2ZS4KKwlVc2UgQyBzdHlsZSBjb21tZW50cy4KKworMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IEF2b2lkIGdhcy1vbmx5IG1uZW1vbmljLgorCUZpeGVzIFBSIGJvb3RzdHJhcC8zNTYzLgorCisyMDAxLTA2LTI2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBVc2UgLnJkYXRhIGZvciBFQ09GRi4KKworMjAwMS0wNi0yNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIHNwYXJjKi1zdW4tKiBob3N0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDAxLTA2LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TIChfX0ZSQU1FX0JFR0lOX18pOiBDb25kaXRpb25hbGl6ZSBmb3IgRUxGLgorCisyMDAxLTA2LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL29zZi5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDAwLTA1LTMxICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogRml4IEFDX0FSR19FTkFCTEUgdXNhZ2UuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDUtMDYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKworCSogY29uZmlndXJlLmluOiBSZW1vdmUgd2FybmluZyBhYm91dCBiZXRhIGNvZGUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDQtMjUgIEhhbnMgQm9laG0gPEhhbnNfQm9laG1AaHAuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlM6IFJlc3RvcmUgc3RhY2sgcG9pbnRlciB3aGVuIHJldHVybmluZyBmcm9tCisJZmZpX2Nsb3N1cmVfVU5JWC4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBGaXggdHlwbyBpbiBjb21tZW50LgorCisyMDAxLTA0LTE4ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUzogRGVsZXRlIHVubmVjZXNzYXJ5IGluY3JlbWVudCBhbmQgZGVjcmVtZW50IG9mIGxvYzIKKwl0byBlbGltaW5hdGUgUkFXIERWLgorCisyMDAxLTA0LTEyICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogTWFrZWZpbGUuYW06IE1ha2UgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwMS0wMy0yOSAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogVXNlIGRpZmZlcmVudCBzeW50YXggZm9yIHN1YmRpcmVjdG9yeSBjcmVhdGlvbi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yNyAgSm9uIEJlbmlzdG9uICA8am9uQGJlbmlzdG9uLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IChXaW4zMiwgQ3lnV2luLCBNaW5nVykuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKworCSogc3JjL2ZmaXRlc3QuYzogRG9lc24ndCBydW4gc3RydWN0dXJlIHRlc3RzIGZvciBYODZfV0lOMzIgdGFyZ2V0cy4KKwkqIHNyYy90eXBlcy5jOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisKKwkqIHNyYy94ODYvd2luMzIuUzogTmV3IGZpbGUuIEJhc2VkIG9uIHN5c3YuUywgYnV0IHdpdGggRUgKKwlzdHVmZiByZW1vdmVkIGFuZCBtYWRlIHRvIHdvcmsgd2l0aCBDeWdXaW4ncyBnYXMuCisKKzIwMDEtMDMtMjYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWd1cmUuaW46IE1ha2UgdGFyZ2V0IHN1YmRpcmVjdG9yeSBpbiBidWlsZCBkaXIuCisJKiBNYWtlZmlsZS5hbTogT3ZlcnJpZGUgc3VmZml4IGJhc2VkIHJ1bGVzIHRvIHNwZWNpZnkgY29ycmVjdCBvdXRwdXQKKwlzdWJkaXJlY3RvcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMS0wMy0yMyAgS2V2aW4gQiBIZW5kcmlja3MgIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4ZWQgQUJJIGNvbXBhdGliaWxpdHkgYnVnCisJaW52b2x2aW5nIGxvbmcgbG9uZyBhbmQgcmVnaXN0ZXIgcGFpcnMuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcgZnVuY3Rpb24uCisJKGZsdXNoX2ljYWNoZSk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0NMT1NVUkVTKTogRGVmaW5lIG9uIFBQQy4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KKworMjAwMS0wMy0xOSAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChmZml0ZXN0X0xERkxBR1MpOiBOZXcgbWFjcm8uCisKKzIwMDEtMDMtMDIgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9kZWJ1Zy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9mZml0ZXN0LmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3ByZXBfY2lmLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3R5cGVzLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FscGhhL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hbHBoYS9vc2YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYXJtL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hcm0vc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL24zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9taXBzL28zMi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9zcGFyYy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjguUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvdjkuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMveDg2L2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy94ODYvc3lzdi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKworMjAwMS0wMi0wOCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugc291cmNld2FyZS5jeWdudXMuY29tIHJlZmVyZW5jZXMgdG8KKwlnY2MuZ251Lm9yZy4KKworMjAwMC0xMi0wOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfY2FsbCk6IFNpbXBsaWZ5IHN0cnVjdCByZXR1cm4gdGVzdC4KKwkoZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogSW5kZXggcmF0aGVyIHRoYW4gaW5jcmVtZW50IGF2YWx1ZQorCWFuZCBhcmdfdHlwZXMuICBHaXZlIGZmaV9jbG9zdXJlX29zZiB0aGUgcmF3IHJldHVybiB2YWx1ZSB0eXBlLgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2xvc3VyZV9vc2YpOiBIYW5kbGUgcmV0dXJuIHZhbHVlIHR5cGUKKwlwcm9tb3Rpb24uCisKKzIwMDAtMTItMDcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeCB0eXBvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gW0FMUEhBXTogRGVmaW5lIEZGSV9DTE9TVVJFUyBhbmQKKwlGRklfVFJBTVBPTElORV9TSVpFLgorCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkanVzdCBtaW5pbWFsCisJY2lmLT5ieXRlcyBmb3IgbmV3IGZmaV9jYWxsX29zZiBpbXBsZW1lbnRhdGlvbi4KKwkoZmZpX3ByZXBfYXJncyk6IEFic29yYiBpbnRvIC4uLgorCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgRG8gYWxsIHN0YWNrIGFsbG9jYXRpb24gaGVyZSBhbmQKKwlhdm9pZCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBOZXcuCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFJlaW1wbGVtZW50IHdpdGggbm8gY2FsbGJhY2suCisJKGZmaV9jbG9zdXJlX29zZik6IE5ldy4KKworMjAwMC0wOS0xMCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgaW5zdGFsbC1zaDogUmVtb3ZlZC4KKwkqIGx0Y29uZmlnLCBsdG1haW4uc2gsIG1pc3NpbmcsIG1raW5zdGFsbGRpcnM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGFjaW5jbHVkZS5tNDogSW5jbHVkZSBsaWJ0b29sIG1hY3JvcyBmcm9tIHRoZSB0b3AgbGV2ZWwuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDAtMDgtMjIgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gW2kqODYtKi1mcmVlYnNkKl0gKFRBUkdFVCwgVEFSR0VURElSKTogU2V0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAwLTA1LTExICBTY290dCBCYW1icm91Z2ggIDxzY290dGJAbmV0d2luZGVyLm9yZz4KKworCSogbGliZmZpL3NyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogRG91YmxlcyBhcmUgbm90IHNhdmVkIHRvCisJbWVtb3J5IGNvcnJlY3RseS4gIFVzZSBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vdCBicmFuY2hlcyB3aGVyZQorCXBvc3NpYmxlLgorCisyMDAwLTA1LTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogTWF0Y2ggYGFybSotKi1saW51eC0qJy4KKwlGcm9tIENocmlzIERvcm5hbiA8Y2Rvcm5hbkBhcm0uY29tPi4KKworMjAwMC0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogRGVmaW5lLgorCShBTV9NQUtFRkxBR1MpOiBMaWtld2lzZS4KKwkoTXVsdGlsaWIgc3VwcG9ydC4pOiBBZGQgc2VjdGlvbi4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogbHRjb25maWcgKGV4dHJhX2NvbXBpbGVyX2ZsYWdzLCBleHRyYV9jb21waWxlcl9mbGFnc192YWx1ZSk6CisJTmV3IHZhcmlhYmxlcy4gU2V0IGZvciBnY2MgdXNpbmcgLXByaW50LW11bHRpLWxpYi4gRXhwb3J0IHRoZW0KKwl0byBsaWJ0b29sLgorCShzcGFyYzY0LSotbGludXgtZ251Kik6IFVzZSBsaWJzdWZmIDY0IGZvciBzZWFyY2ggcGF0aHMuCisJKiBsdG1haW4uc2ggKEJ8YnxWKTogRG9uJ3QgdGhyb3cgYXdheSBnY2MncyAtQiwgLWIgYW5kIC1WIG9wdGlvbnMKKwlmb3IgLXNoYXJlZCBsaW5rcy4KKwkoZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUsIGV4dHJhX2NvbXBpbGVyX2ZsYWdzKTogQ2hlY2sgdGhlc2UKKwlmb3IgZXh0cmEgY29tcGlsZXIgb3B0aW9ucyB3aGljaCBuZWVkIHRvIGJlIHBhc3NlZCBkb3duIGluCisJY29tcGlsZXJfZmxhZ3MuCisKKzIwMDAtMDQtMTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSBpKjg2LXBjLWxpbnV4KiB0byBpKjg2LSotbGludXgqLgorCisyMDAwLTA0LTE0ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoU1BBUkM2NCk6IERlZmluZSBmb3IgNjRiaXQgU1BBUkMgYnVpbGRzLgorCVNldCBTUEFSQyBGRklfREVGQVVMVF9BQkkgYmFzZWQgb24gU1BBUkM2NCBkZWZpbmUuCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfdjgpOiBSZW5hbWVkIGZyb20gZmZpX3ByZXBfYXJncy4KKwlSZXBsYWNlIGFsbCB2b2lkICogc2l6ZW9mcyB3aXRoIHNpemVvZihpbnQpLgorCU9ubHkgY29tcGFyZSB0eXBlIHdpdGggRkZJX1RZUEVfTE9OR0RPVUJMRSBpZiBMT05HRE9VQkxFIGlzCisJZGlmZmVyZW50IHRoYW4gRE9VQkxFLgorCVJlbW92ZSBGRklfVFlQRV9TSU5UMzIgYW5kIEZGSV9UWVBFX1VJTlQzMiBjYXNlcyAoaGFuZGxlZCBlbHNld2hlcmUpLgorCShmZmlfcHJlcF9hcmdzX3Y5KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBWOSBBQkkgYW5kIGxvbmcgbG9uZyBvbiBWOC4KKwkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9WOSBBQkkgZnJvbSA2NGJpdCBjb2RlIGFuZCBGRklfVjggQUJJIGZyb20KKwkzMmJpdCBjb2RlIChub3QgeWV0IGNyb3NzLWFyY2ggY2FsbHMpLgorCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCBzdHJ1Y3QgcmV0dXJuIGRlbGF5IG5vcC4KKwlIYW5kbGUgbG9uZyBsb25nLgorCSogc3JjL3NwYXJjL3Y5LlM6IE5ldyBmaWxlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlcgorCWlzIHVzZWQgb24gc3BhcmM2NCBvbmx5IGZvciBzdHJ1Y3R1cmVzIGxhcmdlciB0aGFuIDMyIGJ5dGVzLgorCVBhc3MgYnkgcmVmZXJlbmNlIGZvciBzdHJ1Y3R1cmVzIGlzIGRvbmUgZm9yIHN0cnVjdHVyZSBhcmd1bWVudHMKKwlsYXJnZXIgdGhhbiAxNiBieXRlcy4KKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBVc2UgNjRiaXQgcmludCBvbiBzcGFyYzY0LgorCVJ1biBsb25nIGxvbmcgdGVzdHMgb24gc3BhcmMuCisJKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IFBvaW50ZXIgaXMgNjRiaXQgb24gYWxwaGEgYW5kCisJc3BhcmM2NC4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IGxvbmcgZG91YmxlIGlzIDEyOCBiaXQgYWxpZ25lZCB0byAxMjggYml0cworCW9uIHNwYXJjNjQuCisJKiBjb25maWd1cmUuaW4gKHNwYXJjLSotbGludXgqKTogTmV3IHN1cHBvcnRlZCB0YXJnZXQuCisJKHNwYXJjNjQtKi1saW51eCopOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtOiBBZGQgdjkuUyB0byBTUEFSQyBmaWxlcy4KKwkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkoTElOSyk6IFN1cnJvdW5kICQoQ0NMRCkgaW50byBkb3VibGUgcXVvdGVzLCBzbyB0aGF0IG11bHRpbGliCisJY29tcGlsZXMgd29yayBjb3JyZWN0bHkuCisKKzIwMDAtMDQtMDQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IChpKjg2LSotc29sYXJpcyopOiBOZXcgbGliZmZpIHRhcmdldC4gUGF0Y2gKKwlwcm9wb3NlZCBieSBCcnljZSBNY0tpbmxheS4KKworMjAwMC0wMy0yMCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogSGFuZCBlZGl0IGZvciBqYXZhX3Jhd19hcGkubG8uCisKKzIwMDAtMDMtMDggIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWI6IFVwZGF0ZSBmcm9tIHRoZSBnY2MgdHJlZS4KKwlGaXggZm9yIFBSIGxpYmdjai8xNjguCisKKzIwMDAtMDMtMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IEZpeGVkIGlhNjQgYnkgaGFuZC4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluICgtLWVuYWJsZS1tdWx0aWxpYik6IE5ldyBvcHRpb24uCisJKGxpYmZmaV9iYXNlZGlyKTogTmV3IHN1YnN0LgorCShBQ19PVVRQVVQpOiBBZGRlZCBtdWx0aWxpYiBjb2RlLgorCisyMDAwLTAzLTAyICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IFVzZSBgaWE2NCcsIG5vdCBgYWxwaGEnLCBhcworCWRpcmVjdG9yeSBuYW1lLgorCisyMDAwLTAyLTI1ICBIYW5zIEJvZWhtIDxib2VobUBhY20ub3JnPgorCisJKiBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC91bml4LlM6IE5ldworCWZpbGVzLgorCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4ZWQgdHlwbyBpbiBhcmd1bWVudAorCWxpc3QuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogVXNlIGZmaV90cmFuc2xhdGVfYXJncywgbm90CisJZmZpX2Nsb3N1cmVfdHJhbnNsYXRlLgorCSogc3JjL2phdmFfcmF3X2FwaS5jOiBOZXcgZmlsZS4KKwkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IE5ldyBmdW5jdGlvbi4KKwkobWFpbik6IERlZmluZSBgcmludCcgYXMgbG9uZyBsb25nIG9uIElBNjQuICBBZGRlZCBuZXcgdGVzdCB3aGVuCisJRkZJX0NMT1NVUkVTIGlzIGRlZmluZWQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIChBTElHTik6IFVzZSBzaXplX3QsIG5vdCB1bnNpZ25lZC4KKwkoZmZpX2FiaSk6IFJlY29nbml6ZSBJQTY0LgorCShmZmlfcmF3KTogQWRkZWQgYGZsdCcgZmllbGQuCisJQWRkZWQgIkphdmEgcmF3IEFQSSIgY29kZS4KKwkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlhNjQuCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogTmV3IG1hY3JvLgorCShsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCBqYXZhX3Jhd19hcGkuYy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBEZWZpbmUgaW4gSUE2NCBjYXNlLgorCisyMDAwLTAxLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0IHdpdGggbmV3ZXIgYXV0b21ha2UuCisKKzE5OTktMTItMzEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKElOQ0xVREVTKTogQWRkZWQgLUkkKHRvcF9zcmNkaXIpL3NyYy4KKworMTk5OS0wOS0wMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmVkIFBBQ0tBR0UgYW5kIFZFUlNJT04gZGVmaW5lcyBhbmQKKwl1bmRlZnMuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogUGFzcyAzcmQgYXJndW1lbnQgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKwlVc2UgQU1fUFJPR19MSUJUT09MIChhdXRvbWFrZSAxLjQgY29tcGF0aWJpbGl0eSkuCisJKiBhY2NvbmZpZy5oOiBEb24ndCAjdW5kZWYgUEFDS0FHRSBvciBWRVJTSU9OLgorCisxOTk5LTA4LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogVHJ5IHRvIHdvcmsgYXJvdW5kIG1lc3N5IGhlYWRlciBwcm9ibGVtCisJd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OLgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSB2ZXJzaW9uIHRvIDIuMDAtYmV0YS4KKworCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBhY2NvbmZpZy5oIChGRklfTk9fU1RSVUNUUywgRkZJX05PX1JBV19BUEkpOiBEZWZpbmUuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9yYXdfY2FsbCk6IFJlbmFtZS4KKworMTk5OS0wOC0wMiAgS3Jlc3RlbiBLcmFiIFRob3J1cCAgPGtyYWJAZG9taW5pcS5pcy5zLnUtdG9reW8uYWMuanA+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YpOiBOZXcgZnVuY3Rpb24uCisJKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IERpdHRvLgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogRGl0dG8uCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTW9yZSBkaXR0by4KKwkoZmZpX2NhbGxfcmF3KTogRmluYWwgZGl0dG8uCisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBkZWZpbml0aW9ucyBmb3IgY2xvc3VyZSBhbmQgcmF3IEFQSS4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGRlZCBjYXNlIGZvcgorCUZGSV9UWVBFX1VJTlQ2NC4KKworCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIHJhd19hcGkuYworCisJKiBzcmMvcmF3X2FwaS5jOiBOZXcgZmlsZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3Jhdyk6IE5ldyB0eXBlLgorCShVSU5UX0FSRywgU0lOVF9BUkcpOiBOZXcgZGVmaW5lcy4KKwkoZmZpX2Nsb3N1cmUsIGZmaV9yYXdfY2xvc3VyZSk6IE5ldyB0eXBlcy4KKwkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX3ByZXBfcmF3X2Nsb3N1cmUpOiBOZXcgZGVjbGFyYXRpb25zLgorCisJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgZW5kaWFubmVzcyBhbmQgc2l6ZW9mIHZvaWQqLgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENhbGwgZml4dXAgcm91dGluZSB2aWEgYXJndW1lbnQsCisJaW5zdGVhZCBvZiBkaXJlY3RseS4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUaHUgSnVsICA4IDE0OjI4OjQyIDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB4ODYgYW5kIHBvd2VycGMgQmVPUyBjb25maWd1cmF0aW9ucy4KKwlGcm9tIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4uCisKKzE5OTktMDUtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCB3YXJuaW5nIGFib3V0IHRoaXMgYmVpbmcgYmV0YSBjb2RlLgorCVJlbW92ZSBzcmMvTWFrZWZpbGUuYW0gZnJvbSB0aGUgcGljdHVyZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogTWFrZWZpbGUuYW06IE1vdmUgbG9naWMgZnJvbSBzcmMvTWFrZWZpbGUuYW0uICBBZGQgY2hhbmdlcworCXRvIHN1cHBvcnQgbGliZmZpIGFzIGEgdGFyZ2V0IGxpYnJhcnkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgorCVVwZ3JhZGVkIHRvIG5ldyBhdXRvY29uZiwgYXV0b21ha2UsIGxpYnRvb2wuCisKKwkqIFJFQURNRTogVHdlYWtzLgorCisJKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IGRhdGUuCisKKwkqIHNyYy9NYWtlZmlsZS5hbSwgc3JjL01ha2VmaWxlLmluOiBSZW1vdmVkLgorCisxOTk4LTExLTI5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9DaGFuZ2VMb2c6IFJlbW92ZWQuCisJKiBzcmMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL21pcHMvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL3NwYXJjL0NoYW5nZUxvZzogUmVtYm92ZWQuCisJKiBzcmMveDg2L0NoYW5nZUxvZzogUmVtb3ZlZC4KKworCSogQ2hhbmdlTG9nLnYxOiBDcmVhdGVkLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNzJmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmkKQEAgLTAsMCArMSw2MTMgQEAKKzIwMTAtMDEtMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IEFkZCBub3RlcyBvbiBidWlsZGluZyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorCisyMDEwLTAxLTE1ICBEYW5pZWwgV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIG1zdmNjLnNoOiBOZXcgZmlsZS4KKworCSogc3JjL3g4Ni93aW4zMi5TOiBQb3J0IGFzc2VtYmx5IHJvdXRpbmVzIHRvIE1TVkMgYW5kICNpZmRlZi4KKwkqIHNyYy94ODYvZmZpLmM6IFR3ZWFrIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgZXhjZXNzCisJcGFyZW5zLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIF9fZGVjbHNwZWMoYWxpZ24oOCkpIHRvIHR5cGVkZWYgc3RydWN0CisJZmZpX2Nsb3N1cmUuCisKKwkqIHNyYy94ODYvZmZpLmM6IE1lcmdlIGZmaV9jYWxsX1NZU1YgYW5kIGZmaV9jYWxsX1NURENBTEwgaW50byBuZXcKKwlmdW5jdGlvbiBmZmlfY2FsbF93aW4zMiBvbiBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgdG8gZmZpX2NhbGxfd2luMzIuCisJKGZmaV9jYWxsX1NURENBTEwpOiBSZW1vdmUuCisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gY29kZQorCXRvIGZmaV9wcmVwX2NpZl9tYWNoZGVwIGZvciB4ODYuCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFRvIGhlcmUuCisKKzIwMTAtMDEtMTUgIE9saXZlciBLaWRkbGUgIDxva2lkZGxlQHlhaG9vLmNvLnVrPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQ2hlY2sgZm9yIF9faTM4NiBhbmQgX19hbWQ2NCBmb3IKKwlTdW4gU3R1ZGlvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuIAorCisyMDEwLTAxLTEyICBDb25yYWQgSXJ3aW4gPGNvbnJhZC5pcndpbkBnbWFpbC5jb20+CisKKwkqIGRvYy9saWJmZmkudGV4aTogQWRkIGNsb3N1cmUgZXhhbXBsZS4KKwkqIGRvYy9saWJmZmkuaW5mbzogUmVidWlsdC4KKworMjAwOS0xMi0yNSAgU2FtdWxpIFN1b21pbmVuICA8c3N1b21pbmVuQGdlbnRvby5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogVW5kZWZpbmUgX0FDX0FSR19WQVJfUFJFQ0lPVVMgZm9yIGF1dG9jb25mIDIuNjQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IEFkIHg4NiBYRkFJTHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IEZpeCBkZy1leGNlc3MtZXJyb3JzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KKworMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKwlzcGVjaWZpZXJzLgorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgorCisyMDA5LTA2LTExICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIE1ha2VmaWxlLmFtLAorICAgICAgICBjb25maWd1cmUuYWMsCisgICAgICAgIGluY2x1ZGUvZmZpLmguaW4sCisgICAgICAgIGluY2x1ZGUvZmZpX2NvbW1vbi5oLAorICAgICAgICBzcmMvY2xvc3VyZXMuYywKKyAgICAgICAgc3JjL2RsbWFsbG9jLmMsCisgICAgICAgIHNyYy94ODYvZmZpLmMsCisgICAgICAgIHNyYy94ODYvZmZpdGFyZ2V0LmgsCisgICAgICAgIHNyYy94ODYvd2luNjQuUyAobmV3KSwKKwlSRUFETUU6IEFkZGVkIHdpbjY0IHN1cHBvcnQgKG1pbmd3IG9yIE1TVkMpCisgICAgICAgICogTWFrZWZpbGUuaW4sCisgICAgICAgIGluY2x1ZGUvTWFrZWZpbGUuaW4sCisgICAgICAgIG1hbi9NYWtlZmlsZS5pbiwKKyAgICAgICAgdGVzdHN1aXRlL01ha2VmaWxlLmluLAorICAgICAgICBjb25maWd1cmUsCisgICAgICAgIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkCisgICAgICAgICogbHRjZi1jLnNoOiBwcm9wZXJseSBlc2NhcGUgY3lnd2luL3czMiBwYXRoCisgICAgICAgICogbWFuL2ZmaV9jYWxsLjM6IENsYXJpZnkgc2l6ZSByZXF1aXJlbWVudHMgZm9yIHJldHVybiB2YWx1ZS4KKyAgICAgICAgKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCBmaWxlbmFtZSBpbiBjb21tZW50LgorICAgICAgICAqIHNyYy94ODYvd2luMzIuUzogUmVtb3ZlIHVudXNlZCBleHRlcm4uCisKKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogdXNlIGZmaV9jbG9zdXJlX2FsbG9jIGluc3RlYWQKKyAgICAgICAgb2YgY2hlY2tpbmcgZm9yIE1NQVAuICBVc2UgaW50cHRyX3QgaW5zdGVhZCBvZiBsb25nIGNhc3RzLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEZpeCBtaXNhcHBsaWVkIG1lcmdlIGZyb20gZ2NjLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL21pcHMvbzMyLlMsCisJc3JjL21pcHMvbjMyLlM6IEZpeCBsaWNlbmNlIGZvcm1hdHRpbmcuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2Rhcndpbi5TOiBGaXggbGljZW5jZSBmb3JtYXR0aW5nLgorCXNyYy94ODYvd2luMzIuUzogTGlrZXdpc2UuCisJc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKwlzcmMvc2gvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zaDY0L2ZmaS5jOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLiAgV2FzIG1pc3NpbmcgZnJvbSBtZXJnZQorCW9mIEFuZHJlYXMgVG9ibGVyJ3MgcGF0Y2ggZnJvbSAyMDA2LTA0LTIyLgorCQorMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zaC9mZmkuYzogQXBwbHkgbWlzc2luZyBodW5rIGZyb20gQWxleGFuZHJlIE9saXZhJ3MgcGF0Y2ggb2YKKwkyMDA3LTAzLTA3LgorCisyMDA4LTEyLTI2ICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IG1hcmsgZXhwZWN0ZWQKKyAgICAgICAgZmFpbHVyZXMgb24geDg2XzY0IGN5Z3dpbi9taW5ndy4KKworMjAwOC0xMi0yMiAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLCAgICAKKyAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsICAgIAorICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywgICAgCisgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiB1c2UgcG9ydGFibGUgY2FzdCBmcm9tCisgICAgICAgIHBvaW50ZXIgdG8gaW50ZWdlciAoaW50cHRyX3QpLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBkaXNhYmxlIGZvciB3aW42NC4KKwkKKzIwMDgtMTItMTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuOC4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTExLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjcuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYIGFuZAorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FUIHRvIHRoZSBQT1dFUlBDX0ZSRUVCU0QgZW51bS4KKwlBZGQgbm90ZSBhYm91dCBmbGFnIGJpdHMgdXNlZCBmb3IgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QuCisJQWRqdXN0IGNvcHlyaWdodCBub3RpY2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIHR3byBuZXcgZmxhZ3MgdG8gaW5kaWNhdGUgaWYgd2UgaGF2ZSBvbmUKKwlyZWdpc3RlciBvciB0d28gcmVnaXN0ZXIgdG8gdXNlIGZvciBGRklfU1lTViBzdHJ1Y3RzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFBhc3MgdGhlIHJpZ2h0IHJlZ2lzdGVyIGZsYWcgaW50cm9kdWNlZCBhYm92ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBGaXggdGhlIHJldHVybiB0eXBlIGZvcgorCUZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULiBDb21tZW50LgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTA3LTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IENsZWFuIHVwIGZhaWx1cmVzIGZyb20KKwljb21waWxlciB3YXJuaW5ncy4KKworMjAwOC0wNy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC42LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uICBBZGQgZG9jdW1lbnRhdGlvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUdXJuIElOU04gaW50byBhbiB1bnNpZ25lZAorCWludC4KKworMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTA0LTAzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogbGliZmZpLnBjLmluIChMaWJzKTogQWRkIC1MJHtsaWJkaXJ9LgorCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjUuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKwkqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKworMjAwOC0wNC0wMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIFhlcmNlcyBSYW5ieSAgPHhlcnhlc0B6YWZlbmEuc2U+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFdyYXAgZGVmaW5pdGlvbiBvZiB0YXJnZXQgYXJjaGl0ZWN0dXJlIHRvCisJcHJvdGVjdCBmcm9tIGRvdWJsZSBkZWZpbml0aW9ucy4KKworMjAwOC0wMy0yMiAgTW9yaXlvc2hpIEtvaXp1bWkgIDxtb3JpeW9zaGlAZ21haWwuY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBmb3IgYnVnIHJldmVhbGVkIGluCisJY2xvc3VyZV9sb2NfZm4wLmMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgKGNsb3N1cmVfbG9jX3Rlc3RfZm4wKToKKwlOZXcgdGVzdC4KKworMjAwOC0wMy0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIEJsYWtlIENoYWZmaW4KKwkgICAgaG9zQHRhbWFuZWdpLm9yZworCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCisgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYworICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKKyAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IE5ldyB0ZXN0cyBmcm9tIEFwcGxlLgorCisyMDA4LTAyLTI2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICAgICAgICAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL202OGsvc3lzdi5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisJKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgICAgICAgICAgVGhvbWFzIEhlbGxlciAgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IENoYW5nZSBDKysgY29tbWVudCB0byBDCisJY29tbWVudC4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5vcmc+CisgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKworMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5vcmc+CisgICAgICAgICAgICBUaG9tYXMgSGVsbGVyICA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBzcmMvYWxwaGEvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorCXNyYy9hbHBoYS9vc2YuUywgc3JjL2FybS9mZmkuYywgc3JjL2Zydi9mZmkuYywgc3JjL2lhNjQvZmZpLmMsCisJc3JjL2lhNjQvdW5peC5TLCBzcmMvamF2YV9yYXdfYXBpLmMsIHNyYy9tMzJyL2ZmaS5jLAorCXNyYy9taXBzL2ZmaS5jLCBzcmMvcGEvZmZpLmMsIHNyYy9wYS9ocHV4MzIuUywgc3JjL3BhL2xpbnV4LlMsCisJc3JjL3Bvd2VycGMvZmZpLmMsIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3Jhd19hcGkuYywKKwlzcmMvczM5MC9mZmkuYywgc3JjL3NoL2ZmaS5jLCBzcmMvc2g2NC9mZmkuYywgc3JjL3NwYXJjL2ZmaS5jLAorCXNyYy94ODYvZmZpLmMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvZGFyd2luNjQuUywKKwlzcmMveDg2L2ZmaTY0LmM6IERpdHRvLgorCisyMDA4LTAyLTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBY2NlcHQgb3BlbmJzZCosIG5vdCBqdXN0IG9wZW5ic2QuCisJQnVtcCB2ZXJzaW9uIHRvIDMuMC40LgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMDItMjIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IENsZWFuIHVwIGxpc3Qgb2YgdGVzdGVkIHBsYXRmb3Jtcy4KKworMjAwOC0wMi0yMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4zLgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuICBDbGVhbiB1cCB0ZXN0IGRvY3MuCisKKzIwMDgtMDItMjIgIEJqb2VybiBLb2VuaWcgIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMi0yMiAgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBjdHlwZXMub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCB4ODYgT3BlbkJTRCBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA4LTAyLTIxICBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisKKwkqIFJFQURNRTogQ2hhbmdlICJtYWtlIHRlc3QiIHRvICJtYWtlIGNoZWNrIi4KKworMjAwOC0wMi0yMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4yLgorCSogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCSogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuCisKKzIwMDgtMDItMjEgIEJqw7ZybiBLw7ZuaWcgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TOiBOZXcgZmlsZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4NiBGcmVlQlNEIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5hbTogRGl0dG8uCisKKzIwMDgtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMS4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorCSogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorCisyMDA4LTAyLTE1ICBEYXZpZCBEYW5leQkgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYzogUmVtb3ZlIGV4dHJhICc+JyBmcm9tIGluY2x1ZGUgZGlyZWN0aXZlLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBjbGVhcl9sb2NhdGlvbiBpbnN0ZWFkIG9mIHRyYW1wLgorCisyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjAuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMDgtMDItMTUgIERhdmlkIERhbmV5CSA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jIChVU0VfX0JVSUxUSU5fX19DTEVBUl9DQUNIRSk6CisJRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKF9BQklOMzIsIF9BQkk2NCwgX0FCSU8zMik6IERlZmluZS4KKworMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKyAgICAgICAgKiBtYW4vZmZpX2NhbGwuMywgbWFuL2ZmaV9wcmVwX2NpZi4zLCBtYW4vZmZpLjM6CisJVXBkYXRlIGRhdGVzIGFuZCByZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gZmZpX3ByZXBfY2xvc3VyZS4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuOS4KKwkqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKworMjAwOC0wMi0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIG1hbi9mZmlfcHJlcF9jbG9zdXJlLjM6IERlbGV0ZS4KKwkqIG1hbi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBmZmlfcHJlcF9jbG9zdXJlLjMuCisJKG1hbl9NQU5TKTogRGl0dG8uCisJKiBtYW4vTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjguCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjcuCisJKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisJKiBpbmNsdWRlL2ZmaS5oLmluIExJQ0VOU0Ugc3JjL2RlYnVnLmMgc3JjL2Nsb3N1cmVzLmMKKyAgICAgICAgICBzcmMvZmZpdGVzdC5jIHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy90eXBlcy5jIHNyYy9tNjhrL2ZmaXRhcmdldC5oIHNyYy9yYXdfYXBpLmMgc3JjL2Zydi9mZmkuYworICAgICAgICAgIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL3NoL2ZmaS5jIHNyYy9zaC9zeXN2LlMKKyAgICAgICAgICBzcmMvc2gvZmZpdGFyZ2V0Lmggc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmggc3JjL3BhL2ZmaS5jCisgICAgICAgICAgc3JjL3BhL2ZmaXRhcmdldC5oIHNyYy9wYS9saW51eC5TIHNyYy9qYXZhX3Jhd19hcGkuYworICAgICAgICAgIHNyYy9jcmlzL2ZmaXRhcmdldC5oIHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMKKyAgICAgICAgICBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L2ZmaXRhcmdldC5oCisgICAgICAgICAgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luLlMgc3JjL2lhNjQvZmZpLmMKKyAgICAgICAgICBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggc3JjL2lhNjQvdW5peC5TCisgICAgICAgICAgc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OS5TIHNyYy9zcGFyYy9mZml0YXJnZXQuaAorICAgICAgICAgIHNyYy9zcGFyYy92OC5TIHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgKKyAgICAgICAgICBzcmMvYWxwaGEvb3NmLlMgc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TCisgICAgICAgICAgc3JjL3NoNjQvZmZpdGFyZ2V0Lmggc3JjL21pcHMvZmZpLmMgc3JjL21pcHMvZmZpdGFyZ2V0LmgKKyAgICAgICAgICBzcmMvbWlwcy9uMzIuUyBzcmMvbWlwcy9vMzIuUyBzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TCisgICAgICAgICAgc3JjL2FybS9mZml0YXJnZXQuaCBzcmMvcHJlcF9jaWYuYzogVXBkYXRlIGxpY2Vuc2UgdGV4dC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlIHRlc3RlZCBwbGF0Zm9ybXMuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjYuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBkYXJ3aW42NC5TCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogUmVtb3ZlIGxpYnN0ZGMrKyBiaXRzIGZyb20gR0NDIHRyZWUuCisJKiBMSUNFTlNFOiBVcGRhdGUgV0FSUkFOVFkuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBsaWJmZmkucGMuaW4gKGxpYmRpcik6IEZpeCBsaWJkaXIgZGVmaW5pdGlvbi4KKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlLgorCSogbGliZmZpLmluZm86IE5ldyBmaWxlLgorCSogZG9jL3N0YW1wLXZ0aTogTmV3IGZpbGUuCisJKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBtYW4gZGlyLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IENyZWF0ZSBNYWtlZmlsZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICAgICAgKiBtYW4vZmZpX2NhbGwuMyBtYW4vZmZpX3ByZXBfY2lmLjMgbWFuL2ZmaV9wcmVwX2Nsb3N1cmUuMworICAgICAgICAgIG1hbi9NYWtlZmlsZS5hbSBtYW4vTWFrZWZpbGUuaW46IE5ldyBmaWxlcy4KKworMjAwOC0wMi0xNCAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiBhY2xvY2FsLm00LCBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIG1kYXRlLXNoLCB0ZXhpbmZvLnRleDogTmV3IGZpbGVzLgorCSogTWFrZWZpbGUuYW0gKGluZm9fVEVYSU5GT1MpOiBOZXcgdmFyaWFibGUuCisJKiBkb2MvbGliZmZpLnRleGk6IE5ldyBmaWxlLgorCSogZG9jL3ZlcnNpb24udGV4aTogTGlrZXdpc2UuCisKKzIwMDgtMDItMTQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogRG9uJ3QgY29tcGlsZSB3aXRoIC1EJChUQVJHRVQpLgorCShsaWJfTFRMSUJSQVJJRVMpOiBEZWZpbmUuCisJKHRvb2xleGVjbGliX0xJQlJBUklFUyk6IFVuZGVmaW5lLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IFJlc2V0IHZlcnNpb24gdG8gMi45OS4xLgorCSogY29uZmlndXJlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogbGliZmZpLnBjLmluOiBVc2UgQFBBQ0tBR0VfTkFNRUAgYW5kIEBQQUNLQUdFX1ZFUlNJT05ALgorCSogY29uZmlndXJlLmFjOiBSZXNldCB2ZXJzaW9uIHRvIDIuOTkuMS4KKwkqIGNvbmZpZ3VyZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIENoYW5nZUxvZy5saWJmZmkuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgbm90aWNlLgorCisyMDA4LTAyLTE0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpOiBEZWZpbmUuICBEb24ndAorCWRpc3RyaWJ1dGUgZmZpdGFyZ2V0Lmggb3IgZmZpLmggZnJvbSB0aGUgYnVpbGQgaW5jbHVkZSBkaXIuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAwOC0wMi0xNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKGluY2x1ZGVzZGlyKTogSW5zdGFsbCBoZWFkZXJzIHVuZGVyIGxpYmRpci4KKwkocGtnY29uZmlnZGlyKTogRGVmaW5lLiBJbnN0YWxsIGxpYmZmaS5wYy4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBsaWJmZmkucGMuaW46IENyZWF0ZS4KKwkqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IENVUlJFTlQKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGxpYmZmaS5wYy5pbgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA4LTAyLTAzICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAoaW5jbHVkZXNkaXIpOiBGaXggaGVhZGVyIGluc3RhbGwgd2l0aAorCURFU1RESVIuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAyLTAzICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgorICAgICAgICAgIG9mZnNldCBiYXNlZCBvbiBjb2RlIHBvaW50ZXIsIG5vdCBkYXRhIHBvaW50ZXIuCisKKzIwMDgtMDItMDEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBGaXggaGVhZGVyIGluc3RhbGxzLgorCSogTWFrZWZpbGUuYW06IERpdHRvLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKworMjAwOC0wMi0wMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCwKKwlGRklfSU5JVF9UUkFNUE9MSU5FKTogUmV2ZXJ0IG15IGJyb2tlbiBjaGFuZ2VzIHRvIHR3YWxsJ3MgbGFzdAorCXBhdGNoLgorCisyMDA4LTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyBmaWxlcy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogRGl0dG8uCisJKiBNYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA4LTAxLTMxICBUaW1vdGh5IFdhbGwgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBBZGQgdGVzdCBmb3Igc3RkY2FsbAorCWNsb3N1cmVzLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogSW5jcmVhc2Ugc2l6ZSBvZiB0cmFtcG9saW5lIGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L3dpbjMyLlM6IEFkZCBhc3NlbWJseSBmb3Igc3RkY2FsbCBjbG9zdXJlLgorCSogc3JjL3g4Ni9mZmkuYzogSW5pdGlhbGl6ZSBzdGRjYWxsIGNsb3N1cmUgdHJhbXBvbGluZS4KKworMjAwOC0wMS0zMCAgSC5KLiBMdSA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiBsaWJmZmkvMzQ2MTIKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogUG9wIDQgYnl0ZSBmcm9tIHN0YWNrIHdoZW4KKwlyZXR1cm5pbmcgc3RydWN0LgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkZCAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIgorCXRlc3RzLgorCisyMDA4LTAxLTMwICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0sIGluY2x1ZGUvTWFrZWZpbGUuYW06IE1vdmUgaGVhZGVycyB0bworCWxpYmZmaV9sYV9TT1VSQ0VTIGZvciBuZXcgYXV0b21ha2UuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKwkKKwkqIHRlc3RzdWl0ZS9saWIvd3JhcHBlci5leHA6IENvcGllZCBmcm9tIGdjYyB0cmVlIHRvIGFsbG93IGZvciAKKwlleGVjdXRpb24gb3V0c2lkZSBvZiBnY2MgdHJlZS4KKwkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwOiBEaXR0by4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBNYW55IGNoYW5nZXMgdG8gYWxsb3cgZm9yIGV4ZWN1dGlvbgorCW91dHNpZGUgb2YgZ2NjIHRyZWUuCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmdjaiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLmxpYmdjagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVkMDJmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZ2NqCkBAIC0wLDAgKzEsNDAgQEAKKzIwMDQtMDEtMTQgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIGluIEFDX1BSRVJFUSgyLjEzKQorCisyMDAzLTAyLTIwICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluOiBQcm9wYWdhdGUgT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyB0bworCWNvbmZpZy5zdGF0dXMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IFNldCBhbmQgQUNfU1VCU1QuCisJUmVtb3ZlIFVTRV9MSUJESVIgY29uZGl0aW9uYWwuCisJKiBNYWtlZmlsZS5hbSAodG9vbGV4ZWNkaXIsIHRvb2xleGVjbGliZGlyKTogRG9uJ3Qgb3ZlcnJpZGUuCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgorCitNb24gQXVnICA5IDE4OjMzOjM4IDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQKKwkqIE1ha2VmaWxlLmFtICh0b29sZXhlY2xpYmRpcik6IEFkZCAkKE1VTFRJU1VCRElSKSBldmVuIGZvciBuYXRpdmUKKwlidWlsZHMuCisJVXNlIFVTRV9MSUJESVIuCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbiAoVVNFX0xJQkRJUik6IERlZmluZSBmb3IgbmF0aXZlIGJ1aWxkcy4KKwlVc2UgbG93ZXJjYXNlIGluIGNvbmZpZ3VyZSAtLWhlbHAgZXhwbGFuYXRpb25zLgorCisxOTk5LTA4LTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0ZOKTogUmVtb3ZlIGAuLi4nLgorCisxOTk5LTA4LTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogQ29tcGlsZSB3aXRoIC1mZXhjZXB0aW9ucy4KKworCSogc3JjL3g4Ni9zeXN2LlM6IEFkZCBleGNlcHRpb24gaGFuZGxpbmcgbWV0YWRhdGEuCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5ODIwYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxCkBAIC0wLDAgKzEsNzY0IEBACitUaGUgbGliZmZpIHZlcnNpb24gMSBDaGFuZ2VMb2cgYXJjaGl2ZS4KKworVmVyc2lvbiAxIG9mIGxpYmZmaSBoYWQgcGVyLWRpcmVjdG9yeSBDaGFuZ2VMb2dzLiAgQ3VycmVudCBhbmQgZnV0dXJlCit2ZXJzaW9ucyBoYXZlIGEgc2luZ2xlIENoYW5nZUxvZyBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeS4gIFRoZQordmVyc2lvbiAxIENoYW5nZUxvZ3MgaGF2ZSBhbGwgYmVlbiBjb25jYXRvbmF0ZWQgaW50byB0aGlzIGZpbGUgZm9yCitmdXR1cmUgcmVmZXJlbmNlIG9ubHkuCisKKy0tLSBsaWJmZmkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitNb24gT2N0ICA1IDAyOjE3OjUwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEJvb3N0ZWQgcmV2LgorCSogY29uZmlndXJlLCBNYWtlZmlsZS5pbiwgYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIFJFQURNRTogQm9vc3RlZCByZXYgYW5kIHVwZGF0ZWQgcmVsZWFzZSBub3Rlcy4KKworTW9uIE9jdCAgNSAwMTowMzowMyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBCb29zdGVkIHJldi4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQ6IFJlYnVpbHQuCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IGFuZCB1cGRhdGVkIHJlbGVhc2Ugbm90ZXMuCisKKzE5OTgtMDctMjUgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBtNjhrL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFVzZSBiaXRtYXNrIGZvciBjaWYtPmZsYWdzLgorCUNvcnJlY3RseSBoYW5kbGUgc21hbGwgc3RydWN0dXJlcy4KKwkoZmZpX3ByZXBfYXJncyk6IEFsc28gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMuCisJKGZmaV9jYWxsKTogUGFzcyBzaXplIG9mIHJldHVybiB0eXBlIHRvIGZmaV9jYWxsX1NZU1YuCisJKiBtNjhrL3N5c3YuUzogQWRqdXN0IGZvciBhYm92ZSBjaGFuZ2VzLiAgQ29ycmVjdGx5IGFsaWduIHNtYWxsCisJc3RydWN0dXJlcyBpbiB0aGUgcmV0dXJuIHZhbHVlLgorCisJKiB0eXBlcy5jICh1aW50NjQsIHNpbnQ2NCkgW002OEtdOiBDaGFuZ2UgYWxpZ25tZW50IHRvIDQuCisKK0ZyaSBBcHIgMTcgMTc6MjY6NTggMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQm9vc3RlZCByZXYuCisJKiBjb25maWd1cmUsTWFrZWZpbGUuaW4sYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIFJFQURNRTogQm9vc3RlZCByZXYgYW5kIGFkZGVkIHJlbGVhc2Ugbm90ZXMuCisKK1N1biBGZWIgMjIgMDA6NTA6NDEgMTk5OCAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KKworCSogY29uZmlndXJlLmluOiBBZGQgUG93ZXJQQyBjb25maWcgYml0cy4KKworMTk5OC0wMi0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIG02OGsgY29uZmlnIGJpdHMuICBDaGFuZ2UgQUNfQ0FOT05JQ0FMX1NZU1RFTQorCXRvIEFDX0NBTk9OSUNBTF9IT1NULCB0aGlzIGlzIG5vdCBhIGNvbXBpbGVyLiAgVXNlICRob3N0IGluc3RlYWQKKwlvZiAkdGFyZ2V0LiAgUmVtb3ZlIEFDX0NIRUNLX1NJWkVPRihjaGFyKSwgd2UgYWxyZWFkeSBrbm93IHRoZQorCXJlc3VsdC4gIEZpeCBhcmd1bWVudCBvZiBBQ19BUkdfRU5BQkxFLgorCSogY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKworVHVlIEZlYiAxMCAyMDo1Mzo0MCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZCBBbHBoYSBjb25maWcgYml0cy4KKworVHVlIE1heSAxMyAxMzozOToyMCAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGVkIGRhdGVzIGFuZCByZXdvcmRlZCBJcml4IGNvbW1lbnRzLgorCisJKiBjb25maWd1cmUuaW46IFJlbW92ZWQgQUNfUFJPR19SQU5MSUIuCisKKwkqIE1ha2VmaWxlLmluLCBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwKKwlsdG1haW4uc2gsICovTWFrZWZpbGUuaW46IGxpYnRvb2xpemVkIGFnYWluIGFuZAlyZWJ1aWx0IHdpdGggCisJYXV0b21ha2UgYW5kIGF1dG9jb25mLgorCQorU2F0IE1heSAxMCAxODo0NDo1MCAxOTk3ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgY29tcHV0ZSBFWFRSQURJU1Q7IG5vdyBoYW5kbGVkIGluCisJc3JjL01ha2VmaWxlLmluLiAgUmVtb3ZlZCBtYWNyb3MgaW1wbGllZCBieSBBTV9JTklUX0FVVE9NQUtFLgorCURvbid0IHJ1biBBTV9NQUlOVEFJTkVSX01PREUuCisKK1RodSBNYXkgIDggMTQ6MzQ6MDUgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG1pc3NpbmcsIGx0bWFpbi5zaCwgbHRjb25maWcuc2g6IENyZWF0ZWQuIFRoZXNlIGFyZSBuZXcgZmlsZXMKKwlyZXF1aXJlZCBieSBhdXRvbWFrZSBhbmQgbGlidG9vbC4KKworCSogUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjE0LiBBZGRlZCBub3Rlcy4KKworCSogYWNjb25maWcuaDogTW92ZWQgUEFDS0FHRSBhbmQgVkVSU0lPTiBmb3IgbmV3IGF1dG9tYWtlLgorCQorCSogY29uZmlndXJlLmluOiBDaGFuZ2VzIGZvciBsaWJ0b29sLgorCQorCSogTWFrZWZpbGUuYW0gKGNoZWNrKTogbWFrZSB0ZXN0IG5vdyBtYWtlIGNoZWNrLiBVc2VzIGxpYnRvb2wgbm93LgorCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmluLCBhY2xvY2FsLmgsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCitUaHUgTWF5ICAxIDE2OjI3OjA3IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBtaXNzaW5nOiBBZGRlZCBmaWxlIHJlcXVpcmVkIGJ5IG5ldyBhdXRvbWFrZS4KKworVHVlIE5vdiAyNiAxNDoxMDo0MiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3NrMy5jeWdudXMuY29tPgorCisJKiBhY2NvbmZpZy5oOiBBZGRlZCBVU0lOR19QVVJJRlkgZmxhZy4gVGhpcyBpcyBkZWZpbmVkIHdoZW4KKwktLWVuYWJsZS1wdXJpZnktc2FmZXR5IHdhcyB1c2VkIGF0IGNvbmZpZ3VyZSB0aW1lLgorCisJKiBjb25maWd1cmUuaW4gKGFsbHNvdXJjZXMpOiBBZGRlZCAtLWVuYWJsZS1wdXJpZnktc2FmZXR5IHN3aXRjaC4KKwkoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMTMuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK0ZyaSBOb3YgMjIgMDY6NDY6MTIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjEyLgorCVJlbW92ZWQgc3BlY2lhbCBDRkxBR1MgaGFjayBmb3IgZ2NjLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMTIuIEFkZGVkIG5vdGVzLgorCisJKiBNYW55IGZpbGVzOiBDeWdudXMgU3VwcG9ydCBjaGFuZ2VkIHRvIEN5Z251cyBTb2x1dGlvbnMuCisKK1dlZCBPY3QgMzAgMTE6MTU6MjUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjExLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMTEuIEFkZGVkIG5vdGVzIGFib3V0IEdOVSBtYWtlLgorCitUdWUgT2N0IDI5IDEyOjI1OjEyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBGaXhlZCAtV2FsbCB0cmljay4KKwkoVkVSU0lPTik6IEJvb3N0ZWQgcmV2LgorCSogY29uZmlndXJlOiBSZWJ1aWx0CisKKwkqIGFjY29uZmlnLmg6IE5lZWRlZCBmb3IgLS1lbmFibGUtZGVidWcgY29uZmlndXJlIHN3aXRjaC4KKworCSogUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjA5LiBBZGRlZCBtb3JlIG5vdGVzIG9uIGJ1aWxkaW5nCisJbGliZmZpLCBhbmQgTENMaW50LgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIC0tZW5hYmxlLWRlYnVnIHN3aXRjaC4gQm9vc3RlZCByZXYgdG8KKwkxLjA5LgorCSogY29uZmlndXJlOiBSZWJ1aWx0CisKK1R1ZSBPY3QgMTUgMTM6MTE6MjggMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoVkVSU0lPTik6IEJvb3N0ZWQgcmV2IHRvIDEuMDgKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogUkVBRE1FOiBBZGRlZCBuMzIgYnVnIGZpeCBub3Rlcy4KKworCSogTWFrZWZpbGUuYW06IEFkZGVkICJtYWtlIGxpbnQiIHByb2R1Y3Rpb24uIAorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK01vbiBPY3QgMTQgMTA6NTQ6NDYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IEFkZGVkIHdlYiBwYWdlIHJlZmVyZW5jZS4KKworCSogY29uZmlndXJlLmluLCBSRUFETUU6IEJvb3N0ZWQgcmV2IHRvIDEuMDUKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogUkVBRE1FOiBGaXhlZCBuMzIgc2FtcGxlIGNvZGUuCisKK0ZyaSBPY3QgMTEgMTc6MDk6MjggMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBSRUFETUU6IEFkZGVkIHNwYXJjIG5vdGVzLgorCisJKiBjb25maWd1cmUuaW4sIFJFQURNRTogQm9vc3RlZCByZXYgdG8gMS4wNC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworVGh1IE9jdCAxMCAxMDozMTowMyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiwgUkVBRE1FOiBCb29zdGVkIHJldiB0byAxLjAzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBSRUFETUU6IEFkZGVkIHN0cnVjdCBub3Rlcy4gCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgTElDRU5TRSB0byBkaXN0cmlidXRpb24uCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogUkVBRE1FOiBSZW1vdmVkIExpbnV4IHNlY3Rpb24uIE5vIHNwZWNpYWwgbm90ZXMgbm93CisJYmVjYXVzZSBhZ2dyZWdhdGVzIGFyZy9yZXR1cm4gdHlwZXMgd29yay4KKworV2VkIE9jdCAgOSAxNjoxNjo0MiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIFJFQURNRSwgY29uZmlndXJlLmluIChWRVJTSU9OKTogQm9vc3RlZCByZXYgdG8gMS4wMgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCitUdWUgT2N0ICA4IDExOjU2OjMzIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FIChOT1RFKTogQWRkZWQgbjMyIG5vdGVzLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgdGVzdCBwcm9kdWN0aW9uLgorCSogTWFrZWZpbGU6IFJlYnVpbHQKKworCSogUkVBRE1FOiBzcGVsbCBjaGVja2VkIQorCisJKiBjb25maWd1cmUuaW4gKFZFUlNJT04pOiBCb29zdGVkIHJldiB0byAxLjAxCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKK01vbiBPY3QgIDcgMTU6NTA6MjIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBjb25maWd1cmUuaW46IEFkZGVkIG5hc3R5IGJpdCB0byBzdXBwb3J0IFNHSSB0b29scy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkKKwkqIFJFQURNRTogQWRkZWQgU0dJIG5vdGVzLiBBZGRlZCBub3RlIGFib3V0IGF1dG9tYWtlIGJ1Zy4KKworTW9uIE9jdCAgNyAxMTowMDoyOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FOiBSZXdyb3RlIGludHJvLCBhbmQgZml4ZWQgZXhhbXBsZXMuCisKK0ZyaSBPY3QgIDQgMTA6MTk6NTUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogLUQkVEFSR0VUIGlzIG5vIGxvbmdlciB1c2VkIGFzIGEgY29tcGlsZXIgc3dpdGNoLgorCUl0IGlzIG5vdyBpbnNlcnRlZCBpbnRvIGZmaS5oIGF0IGNvbmZpZ3VyZSB0aW1lLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisJKiBGRklfQUJJIGFuZCBGRklfU1RBVFVTIGFyZSBub3cgZmZpX2FiaSBhbmQgZmZpX3N0YXR1cy4KKworVGh1IE9jdCAgMyAxMzo0NzozNCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogUkVBRE1FLCBMSUNFTlNFOiBDcmVhdGVkLiBXcm90ZSBzb21lIGRvY3MuCisKKwkqIGNvbmZpZ3VyZS5pbjogRG9uJ3QgYmFyZiBvbiBpNTg2LXVua25vd24tbGludXhhb3V0LgorCUFkZGVkIEVYVFJBRElTVCBjb2RlIGZvciAibWFrZSBkaXN0Ii4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworCSogKi9NYWtlZmlsZS5pbjogUmVidWlsdCB3aXRoIHBhdGNoZWQgYXV0b21ha2UuIAorCitUdWUgT2N0ICAxIDE3OjEyOjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW0sIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKKwljb25maWd1cmUuaW4sIGZmaWNvbmZpZy5oLmluLCBpbnN0YWxsLXNoLCBta2luc3RhbGxkaXJzLCAKKwlzdGFtcC1oLmluOiBDcmVhdGVkCisJKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlOiBHZW5lcmF0ZWQKKworLS0tIGxpYmZmaS9pbmNsdWRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R1ZSBGZWIgMjQgMTM6MDk6MzYgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGdlcmJpbC5jeWdudXMuY29tPgorCisJKiBmZmlfbWlwcy5oOiBVcGRhdGVkIEZGSV9UWVBFX1NUUlVDVF8qIHZhbHVlcyBiYXNlZCBvbgorCWZmaS5oLmluIGNoYW5nZXMuICBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIFNHSSdzICJzaW1wbGUiCisJYXNzZW1ibGVyLgorCitTdW4gRmViIDIyIDAwOjUxOjU1IDE5OTggIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CisKKwkqIGZmaS5oLmluOiBQb3dlclBDIHN1cHBvcnQuCisKKzE5OTgtMDItMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgorCisJKiBmZmkuaC5pbjogQWRkIG02OGsgc3VwcG9ydC4KKwkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IE1ha2UgaXQgYSBzZXBhcmF0ZSB2YWx1ZS4KKworVHVlIEZlYiAxMCAyMDo1NToxNiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiAoU0laRU9GX0FSRyk6IFVzZSBhIHBvaW50ZXIgdHlwZSBieSBkZWZhdWx0LgorCisJKiBmZmkuaC5pbjogQWxwaGEgc3VwcG9ydC4KKworRnJpIE5vdiAyMiAwNjo0ODo0NSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluLCBmZmlfY29tbW9uLmg6IEN5Z251cyBTdXBwb3J0IC0+IEN5Z251cyBTb2x1dGlvbnMuCisKK1dlZCBOb3YgMjAgMjI6MzE6MDEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBBZGRlZCBmZmlfdHlwZV92b2lkIGRlZmluaXRpb24uCisKK1R1ZSBPY3QgMjkgMTI6MjI6NDAgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoaGFja19EQVRBKTogQWx3YXlzIGluc3RhbGwgZmZpX21pcHMuaC4KKworCSogZmZpLmguaW46IFJlbW92ZWQgRkZJX0RFQlVHLiBJdCdzIG5vdyBpbiB0aGUgY29ycmVjdAorCXBsYWNlIChhY2NvbmZpZy5oKS4KKwlBZGRlZCAjaW5jbHVkZSA8c3RkZGVmLmg+IGZvciBzaXplX3QgZGVmaW5pdGlvbi4KKworVHVlIE9jdCAxNSAxNzoyMzozNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaCwgZmZpX21pcHMuaDogTW9yZSBjbGVhbiB1cC4KKwlDb21tZW50ZWQgb3V0ICNkZWZpbmUgb2YgRkZJX0RFQlVHLgorCitUdWUgT2N0IDE1IDEzOjAxOjA2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpX2NvbW1vbi5oOiBBZGRlZCBib29sIGRlZmluaXRpb24uCisKKwkqIGZmaS5oLmluLCBmZmlfY29tbW9uLmg6IENsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuCisJQWRkZWQgZnVubnkgLypALi4uQCovIGNvbW1lbnRzIHRvIGFubm90YXRlIHNvdXJjZS4KKworTW9uIE9jdCAxNCAxMjoyOToyMyAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBJbnRlcmZhY2UgY2hhbmdlcyBiYXNlZCBvbiBmZWVkYmFjayBmcm9tIEppbQorCUJsYW5keS4KKworRnJpIE9jdCAxMSAxNjo0OTozNSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBTbWFsbCBjaGFuZ2UgZm9yIHNwYXJjIHN1cHBvcnQuCisKK1RodSBPY3QgMTAgMTQ6NTM6MzcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmlfbWlwcy5oOiBBZGRlZCBGRklfVFlQRV9TVFJVQ1RfKiBkZWZpbml0aW9ucyBmb3IgCisJc3BlY2lhbCBzdHJ1Y3R1cmUgcmV0dXJuIHR5cGVzLgorCitXZWQgT2N0ICA5IDEzOjU1OjU3IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW46IEFkZGVkIFNJWkVPRl9BUkcgZGVmaW5pdGlvbiBmb3IgWDg2CisKK1R1ZSBPY3QgIDggMTE6NDA6MzYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbiAoRkZJX0ZOKTogQWRkZWQgbWFjcm8gZm9yIGVsaW1pbmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCVVzZSBpdCB0byBjYXNlIHlvdXIgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIHByb3BlciB0eXBlLgorCisJKiBmZmlfbWlwcy5oIChTSVpFT0ZfQVJHKTogQWRkZWQgbWFnaWMgdG8gZml4IHR5cGUgcHJvbW90aW9uIGJ1Zy4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBmZmlfbWlwcy5oIHRvIEVYVFJBX0RJU1QuCisJKiBNYWtlZmlsZTogUmVidWlsdC4KKworCSogZmZpX21pcHMuaDogQ3JlYXRlZC4gTW92ZWQgYWxsIGNvbW1vbiBtaXBzIGRlZmluaXRpb25zIGhlcmUuCisKK01vbiBPY3QgIDcgMTA6NTg6MTIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5oLmluOiBUaGUgU0dJIGFzc2VtYmVyIGlzIHZlcnkgcGlja3kgYWJvdXQgcGFyZW5zLiBSZWRlZmluZWQKKyAJc29tZSBtYWNyb3MgdG8gYXZvaWQgcHJvYmxlbXMuCisKKwkqIGZmaS5oLmluOiBBZGRlZCBGRklfREVGQVVMVF9BQkkgZGVmaW5pdGlvbnMuIEFsc28gYWRkZWQKKwlleHRlcm5zIGZvciBwb2ludGVyLCBhbmQgNjRiaXQgaW50ZWdyYWwgZmZpX3R5cGVzLgorCitGcmkgT2N0ICA0IDA5OjUxOjM3IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbjogQWRkZWQgRkZJX0FCSSBtZW1iZXIgdG8gZmZpX2NpZiBhbmQgY2hhbmdlZAorCWZ1bmN0aW9uIHByb3RvdHlwZXMgYWNjb3JkaW5nbHkuCisJQWRkZWQgI2RlZmluZSBAVEFSR0VUQC4gTm93IHByb2dyYW1zIGluY2x1ZGluZyBmZmkuaCBkb24ndCAKKwloYXZlIHRvIHNwZWNpZnkgdGhpcyB0aGVtc2VsdmVzLgorCitUaHUgT2N0ICAzIDE1OjM2OjQ0IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuaC5pbjogQ2hhbmdlZCBmZmlfcHJlcF9jaWYncyB2YWx1ZXMgZnJvbSB2b2lkKiB0byB2b2lkKioKKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGRlZCBFWFRSQV9ESVNUIGZvciAibWFrZSBkaXN0IgorCXRvIHdvcmsuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1dlZCBPY3QgIDIgMTA6MTY6NTkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBDcmVhdGVkCisJKiBNYWtlZmlsZS5pbjogR2VuZXJhdGVkCisKKwkqIGZmaV9jb21tb24uaDogQWRkZWQgcmNzaWQgY29tbWVudAorCitUdWUgT2N0ICAxIDE3OjEzOjUxIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmguaW4sIGZmaV9jb21tb24uaDogQ3JlYXRlZAorCistLS0gbGliZmZpL3NyYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9uIE9jdCAgNSAwMjoxNzo1MCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogYXJtL2ZmaS5jLCBhcm0vc3lzdi5TOiBDcmVhdGVkLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgYXJtIGZpbGVzLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK01vbiBPY3QgIDUgMDE6NDE6MzggMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBJbmNyZW1lbnRlZCByZXZpc2lvbi4KKworU3VuIE9jdCAgNCAxNjoyNzoxNyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZik6IFBhdGNoIGZvciBEVSBhc3NlbWJsZXIuCisKKwkqIGZmaXRlc3QuYyAobWFpbik6IGxvbmcgbG9uZyBhbmQgbG9uZyBkb3VibGUgcmV0dXJuIHZhbHVlcyB3b3JrCisJZm9yIHg4Ni4KKworRnJpIEFwciAxNyAxMTo1MDo1OCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGZmaXRlc3QuYyAobWFpbik6IEZsb2F0aW5nIHBvaW50IHRlc3RzIG5vdCBleGVjdXRlZCBmb3Igc3lzdGVtcworIAl3aXRoIGJyb2tlbiBsb25kIGRvdWJsZSAoU3VuT1MgNCB3LyBHQ0MpLgorCisJKiB0eXBlcy5jOiBGaXhlZCB4ODYgYWxpZ25tZW50IGluZm8gZm9yIGxvbmcgbG9uZyB0eXBlcy4KKworVGh1IEFwciAxNiAwNzoxNToyOCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AYWRhLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYzogQWRkZWQgbW9yZSBub3RlcyBhYm91dCBHQ0MgYnVncyB1bmRlciBJcml4IDYuCisKK1dlZCBBcHIgMTUgMDg6NDI6MjIgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYyAoc3RydWN0NSk6IE5ldyB0ZXN0IGZ1bmN0aW9uLgorCShtYWluKTogTmV3IHRlc3Qgd2l0aCBzdHJ1Y3Q1LgorCitUaHUgTWFyICA1IDEwOjQ4OjExIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkB0b290aWUudG8uY3lnbnVzLmNvbT4KKworCSogcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBGaXggYXNzZXJ0aW9uIGZvcgorCW5lc3RlZCBzdHJ1Y3R1cmVzLgorCitUdWUgRmViIDI0IDE2OjMzOjQxIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBZGRlZCBsb25nIGRvdWJsZSBzdXBwb3J0IGZvciBzcGFyYy4KKworU3VuIEZlYiAyMiAwMDo1MjoxOCAxOTk4ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgorCisJKiBwb3dlcnBjL2FzbS5oOiBOZXcgZmlsZS4KKwkqIHBvd2VycGMvZmZpLmM6IE5ldyBmaWxlLgorCSogcG93ZXJwYy9zeXN2LlM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuYW06IFBvd2VyUEMgcG9ydC4KKwkqIGZmaXRlc3QuYyAobWFpbik6IEFsbG93IGFsbCB0ZXN0cyB0byBydW4gZXZlbiBpbiBwcmVzZW5jZSBvZiBnY2MKKyAJYnVnIG9uIFBvd2VyUEMuCisKKzE5OTgtMDItMTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBtaXBzL2ZmaS5jOiBGaXhlZCBjb21tZW50IHR5cG8uCisKKwkqIHg4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApLCB4ODYvc3lzdi5TIChyZXRmbG9hdCk6IAorCUZpeGVkIHg4NiBsb25nIGRvdWJsZSByZXR1cm4gaGFuZGxpbmcuCisKKwkqIHR5cGVzLmM6IEZpeGVkIHg4NiBsb25nIGRvdWJsZSBhbGlnbm1lbnQgaW5mby4KKworMTk5OC0wMi0xNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CisKKwkqIHR5cGVzLmM6IEFkZCBtNjhrIHN1cHBvcnQuCisKKwkqIGZmaXRlc3QuYyAoZmxvYXRpbmcpOiBBZGQgbG9uZyBkb3VibGUgcGFyYW1ldGVyLgorCShyZXR1cm5fbGwsIGxkYmxpdCk6IE5ldyBmdW5jdGlvbnMgdG8gdGVzdCBsb25nIGxvbmcgYW5kIGxvbmcKKwlkb3VibGUgcmV0dXJuIHZhbHVlLgorCShtYWluKTogRml4IHR5cGUgZXJyb3IgaW4gYXNzaWdubWVudCBvZiB0c1sxLTRdX3R5cGUuZWxlbWVudHMuCisJQWRkIHRlc3RzIGZvciBsb25nIGxvbmcgYW5kIGxvbmcgZG91YmxlIGFyZ3VtZW50cyBhbmQgcmV0dXJuCisJdmFsdWVzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpIFtNNjhLXTogRG9uJ3QgYWxsb2NhdGUgYXJndW1lbnQgZm9yCisJc3RydWN0IHZhbHVlIHBvaW50ZXIuCisKKwkqIG02OGsvZmZpLmMsIG02OGsvc3lzdi5TOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5hbTogQWRkIGJpdHMgZm9yIG02OGsgcG9ydC4gIEFkZCBrbHVkZ2UgdG8gd29yayBhcm91bmQKKwlhdXRvbWFrZSBkZWZpY2llbmN5LgorCSh0ZXN0KTogRG9uJ3QgcmVxdWlyZSAiLiIgaW4gJFBBVEguCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworV2VkIEZlYiAxMSAwNzozNjo1MCAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK1R1ZSBGZWIgMTAgMjA6NTY6MDAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KKworCSogYWxwaGEvZmZpLmMsIGFscGhhL29zZi5TOiBOZXcgZmlsZXMuCisJKiBNYWtlZmlsZS5hbTogQWxwaGEgcG9ydC4KKworVHVlIE5vdiAxOCAxNDoxMjowNyAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBJbml0aWFsaXplIHJzdHJ1Y3RfZmxhZworCWZvciBuMzIuCisKK1R1ZSBKdW4gIDMgMTc6MTg6MjAgMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYyAobWFpbik6IEFkZGVkIGhhY2sgdG8gZ2V0IHN0cnVjdHVyZSB0ZXN0cyB3b3JraW5nCisJY29ycmVjdGx5LgorCitTYXQgTWF5IDEwIDE5OjA2OjQyIDE5OTcgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEV4cGxpY2l0bHkgbGlzdCBhbGwgZGlzdHJpYnV0YWJsZQorCWZpbGVzIGluIHN1YmRpcnMuCisJKFZFUlNJT04sIENDKTogUmVtb3ZlZC4KKworVGh1IE1heSAgOCAxNzoxOTowMSAxOTk3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IE1hbnkgY2hhbmdlcyBmb3IgbmV3IGF1dG9tYWtlIGFuZCBsaWJ0b29sLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKK0ZyaSBOb3YgMjIgMDY6NTc6NTYgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZml0ZXN0LmMgKG1haW4pOiBGaXhlZCB0ZXN0IGNhc2UgZm9yIG5vbiBtaXBzIG1hY2hpbmVzLgorCitXZWQgTm92IDIwIDIyOjMxOjU5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiB0eXBlcy5jOiBBZGRlZCBmZmlfdHlwZV92b2lkIGRlY2xhcmF0aW9uLgorCitUdWUgT2N0IDI5IDEzOjA3OjE5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChtYWluKTogRml4ZWQgY2hhcmFjdGVyIGNvbnN0YW50cy4KKwkobWFpbik6IEVtaXQgd2FybmluZyBmb3Igc3RydWN0dXJlIHRlc3QgMyBmYWlsdXJlIG9uIFN1bi4KKworCSogTWFrZWZpbGUuYW0gKFZQQVRIKTogRml4ZWQgVlBBVEggZGVmJ24gc28gYXV0b21ha2Ugd29uJ3QKKwlzdHJpcCBpdCBvdXQuIAorCU1vdmVkIGRpc3RkaXIgaGFjayBmcm9tIGxpYmZmaSB0byBhdXRvbWFrZS4gCisJKGZmaXRlc3QpOiBBZGRlZCBtaXNzaW5nIC1jIGZvciAkKENPTVBJTEUpIChjaGFuZ2UgaW4gYXV0b21ha2UpLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJCitUdWUgT2N0IDE1IDEzOjA4OjIwIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgIm1ha2UgbGludCIgcHJvZHVjdGlvbi4gCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworCSogcHJlcF9jaWYuYyAoU1RBQ0tfQVJHX1NJWkUpOiBJbXByb3ZlZCBTVEFDS19BUkdfU0laRSBtYWNyby4KKyAgCUNsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuIEFkZGVkIGZ1bm55IC8qQC4uLkAqLyBjb21tZW50cyB0bworIAlhbm5vdGF0ZSBzb3VyY2UuCisKKwkqIGZmaXRlc3QuYywgZGVidWcuYzogQ2xlYW5lZCB1cCBjb2RlLgorCitNb24gT2N0IDE0IDEyOjI2OjU2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jOiBDaGFuZ2VzIGJhc2VkIG9uIGludGVyZmFjZSBjaGFuZ2VzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBDbGVhbmVkIHVwIGludGVyZmFjZSBiYXNlZCBvbgorCWZlZWRiYWNrIGZyb20gSmltIEJsYW5keS4KKworRnJpIE9jdCAxMSAxNTo1MzoxOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaXRlc3QuYzogUmVvcmRlcmVkIHRlc3RzIHdoaWxlIHBvcnRpbmcgdG8gc3BhcmMuCisJTWFkZSBjaGFuZ2VzIHRvIGhhbmRsZSBsYW1lIHN0cnVjdHVyZSBwYXNzaW5nIGZvciBzcGFyYy4KKwlSZW1vdmVkIGNhbGxzIHRvIGZmbHVzaCgpLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBZGRlZCBzcGVjaWFsIGNhc2UgZm9yIHNwYXJjCisJYWdncmVnYXRlIHR5cGUgYXJndW1lbnRzLgorCitUaHUgT2N0IDEwIDA5OjU2OjUxIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpdGVzdC5jIChtYWluKTogQWRkZWQgc3RydWN0dXJlIHBhc3NpbmcvcmV0dXJuaW5nIHRlc3RzLgorCisJKiBwcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBQZXJmb3JtIHByb3BlciBpbml0aWFsaXphdGlvbgorCW9mIHN0cnVjdHVyZSByZXR1cm4gdHlwZXMgaWYgbmVlZGVkLgorCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEJ1ZyBmaXgKKworV2VkIE9jdCAgOSAxNjowNDoyMCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIHR5cGVzLmM6IEFkZGVkIHNwZWNpYWwgZGVmaW5pdGlvbnMgZm9yIHg4NiAoZG91YmxlIGRvZXNuJ3QKKwluZWVkIGRvdWJsZSB3b3JkIGFsaWdubWVudCkuCisKKwkqIGZmaXRlc3QuYzogQWRkZWQgbWFueSB0ZXN0cworCitUdWUgT2N0ICA4IDA5OjE5OjIyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRml4ZWQgYXNzZXJ0aW9uLgorCisJKiBkZWJ1Zy5jIChmZmlfYXNzZXJ0KTogTXVzdCByZXR1cm4gYSBub24gdm9pZCBub3cuCisKKwkqIE1ha2VmaWxlLmFtOiBBZGRlZCB0ZXN0IHByb2R1Y3Rpb24uCisJKiBNYWtlZmlsZTogUmVidWlsdC4KKworCSogZmZpdGVzdC5jIChtYWluKTogQ3JlYXRlZC4gCisKKwkqIHR5cGVzLmM6IENyZWF0ZWQuIFN0cmlwcGVkIGNvbW1vbiBjb2RlIG91dCBvZiAqL2ZmaS5jLgorCisJKiBwcmVwX2NpZi5jOiBBZGRlZCBtaXNzaW5nIHN0ZGxpYi5oIGluY2x1ZGUuCisKKwkqIGRlYnVnLmMgKGZmaV90eXBlX3Rlc3QpOiBVc2VkICJhIiB0byBlbGltaW5hdGUgY29tcGlsZXIKKwl3YXJuaW5ncyBpbiBub24tZGVidWcgYnVpbGRzLiBJbmNsdWRlZCBmZmlfY29tbW9uLmguCisKK01vbiBPY3QgIDcgMTU6MzY6NDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgYSBydWxlIGZvciAucyAtPiAubworCVRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIFNHSSBjb21waWxlci4KKwkqIE1ha2VmaWxlOiBSZWJ1aWx0LgorCitGcmkgT2N0ICA0IDA5OjUxOjA4IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBwcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IE1vdmVkIGFiaSBzcGVjaWZpY2F0aW9uCisJdG8gZmZpX3ByZXBfY2lmKCkuCisKK1RodSBPY3QgIDMgMTU6Mzc6MzcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIHByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IENoYW5nZWQgdmFsdWVzIGZyb20gdm9pZCogdG8gdm9pZCoqLgorCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEZpeGVkIGFnZ3JlZ2F0ZSB0eXBlIGluaXRpYWxpemF0aW9uLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIHN1cHBvcnQgY29kZSBmb3IgIm1ha2UgZGlzdCIuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1dlZCBPY3QgIDIgMTE6NDE6NTcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGRlYnVnLmMsIHByZXBfY2lmOiBDcmVhdGVkLgorCisJKiBNYWtlZmlsZS5hbTogQWRkZWQgZGVidWcubyBhbmQgcHJlcF9jaWYubyB0byBPQkouCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKKwkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZGVkIG1pc3NpbmcgLUkuLi9pbmNsdWRlCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisKK1R1ZSBPY3QgIDEgMTc6MTE6NTEgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBlcnJvci5jLCBNYWtlZmlsZS5hbTogQ3JlYXRlZC4KKwkqIE1ha2VmaWxlLmluOiBHZW5lcmF0ZWQuCisKKy0tLSBsaWJmZmkvc3JjL3g4NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdW4gT2N0ICA0IDE2OjI3OjE3IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorCisJKiBzeXN2LlMgKHJldGxvbmdkb3VibGUpOiBGaXhlZCBsb25nIGxvbmcgcmV0dXJuIHZhbHVlIHN1cHBvcnQuCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEaXR0by4KKworV2VkIE1heSAxMyAwNDozMDozMyAxOTk4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmFmdC5wcHAudHNvZnQubmV0PgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUKKwlzdXBwb3J0LgorCitXZWQgQXByIDE1IDA4OjQzOjIwIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IHNtYWxsIHN0cnVjdCBzdXBwb3J0IHdhcyBtaXNzaW5nLgorCitUaHUgTWF5ICA4IDE2OjUzOjU4IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBvYmplY3RzLm1hazogUmVtb3ZlZC4KKworTW9uIERlYyAgMiAxNToxMjo1OCAxOTk2ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIHN5c3YuUzogVXNlIC5iYWxpZ24sIGZvciBhLm91dCBMaW51eCBib3hlcy4KKworVHVlIE9jdCAxNSAxMzowNjo1MCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AaG9zZXIuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IENsZWFuIHVwIGJhc2VkIG9uIExDTGludCBvdXRwdXQuCisJQWRkZWQgZnVubnkgLypALi4uQCovIGNvbW1lbnRzIHRvIGFubm90YXRlIHNvdXJjZS4KKworRnJpIE9jdCAxMSAxNjo0MzozOCAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IEFkZGVkIGFzc2VydGlvbiBmb3IgYmFkIEFCSXMuCisKK1dlZCBPY3QgIDkgMTM6NTc6MjcgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBzeXN2LlMgKHJldGRvdWJsZSk6IEZpeGVkIGRvdWJsZSByZXR1cm4gcHJvYmxlbXMuCisKKwkqIGZmaS5jCShmZmlfY2FsbCk6IENvcnJlY3RlZCBmbiBhcmcgZGVmaW5pdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBkb3VibGUgcmV0dXJuIHByb2JsZW1zCisKK1R1ZSBPY3QgIDggMTI6MTI6NDkgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYzogTW92ZWQgZmZpX3R5cGUgZGVmaW5pdGlvbnMgdG8gdHlwZXMuYy4KKwkoZmZpX3ByZXBfYXJncyk6IEZpeGVkIHR5cGUgcHJvbW90aW9uIGJ1Zy4KKworTW9uIE9jdCAgNyAxNTo1MzowNiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChGRklfKl9UWVBFREVGKTogUmVtb3ZlZCByZWR1bmRhbnQgJzsnCisKK0ZyaSBPY3QgIDQgMDk6NTQ6NTMgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IFJlbW92ZWQgRkZJX0FCSSBhcmcsIGFuZCBzd2FwcGVkCisJcmVtYWluaW5nIGFyZ3MuCisKK1dlZCBPY3QgIDIgMTA6MDc6MDUgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIGZmaS5jLCBzeXN2LlMsIG9iamVjdHMubWFrOiBDcmVhdGVkLgorCShmZmlfcHJlcF9jaWYpOiBjaWYtPnJ2YWx1ZSBubyBsb25nZXIgaW5pdGlhbGl6ZWQgdG8gTlVMTC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBNb3ZlZCBtYWNoaW5lIGluZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nCisJdG8gc3JjL3ByZXBfY2lmLmMuIEludHJvZHVjZWQgZmZpX3ByZXBfY2lmX21hY2hkZXAoKS4KKworLS0tIGxpYmZmaS9zcmMvbWlwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1R1ZSBGZWIgMTcgMTc6MTg6MDcgMTk5OCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG8zMi5TOiBGaXhlZCB0eXBvIGluIGNvbW1lbnQuCisKKwkqIGZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeGVkIGFyZ3VtZW50IHByb2Nlc3NpbmcuCisKK1RodSBNYXkgIDggMTY6NTM6NTggMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG8zMi5zLCBuMzIuczogV3JhcHBlcnMgZm9yIFNHSSB0b29sIHN1cHBvcnQuCisKKwkqIG9iamVjdHMubWFrOiBSZW1vdmVkLgorCitUdWUgT2N0IDI5IDE0OjM3OjQ1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBDaGFuZ2VkIGludCB6IHRvIHNpemVfdCB6LgorCitUdWUgT2N0IDE1IDEzOjE3OjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBuMzIuUzogRml4ZWQgYmFkIHN0YWNrIG11bmdpbmcuIAorCisJKiBmZmkuYzogTW92ZWQgcHJvdG90eXBlcyBmb3IgZmZpX2NhbGxfPzMyKCkgdG8gaGVyZSBmcm9tCisJZmZpX21pcHMuaCBiZWNhdXNlIGV4dGVuZGVkX2NpZiBpcyBub3QgZGVmaW5lZCBpbiBmZmlfbWlwcy5oLgorCitNb24gT2N0IDE0IDEyOjQyOjAyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IEludGVyZmFjZSBjaGFuZ2VzIGJhc2VkIG9uIGZlZWRiYWNrIGZyb20gSmltIEJsYW5keS4KKworVGh1IE9jdCAxMCAxMToyMjoxNiAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIG4zMi5TLCBmZmkuYzogTG90cyBvZiBjaGFuZ2VzIHRvIHN1cHBvcnQgcGFzc2luZyBhbmQgCisJcmV0dXJuaW5nIHN0cnVjdHVyZXMgd2l0aCB0aGUgbjMyIGNhbGxpbmcgY29udmVudGlvbi4KKworCSogbjMyLlM6IEZpeGVkIGZuIHBvaW50ZXIgYnVnLgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggZm9yIG8zMiBzdHJ1Y3R1cmUKKwlyZXR1cm4gdmFsdWVzLgorCShmZmlfcHJlcF9hcmdzKTogRml4ZWQgbjMyIHN0cnVjdHVyZSBwYXNzaW5nIHdoZW4gc3RydWN0dXJlcworCXBhcnRpYWxseSBmaXQgaW4gcmVnaXN0ZXJzLgorCitXZWQgT2N0ICA5IDEzOjQ5OjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogb2JqZWN0cy5tYWs6IEFkZGVkIG4zMi5vLgorCisJKiBuMzIuUzogQ3JlYXRlZC4KKworCSogZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGRlZCBtYWdpYyB0byBzdXBwb3J0IHByb3BlcgorCW4zMiBwcm9jZXNzaW5nLgorCitUdWUgT2N0ICA4IDEwOjM3OjM1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmM6IE1vdmVkIGZmaV90eXBlIGRlZmluaXRpb25zIHRvIHR5cGVzLmMuCisJKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCB0eXBlIHByb21vdGlvbiBidWcuCisKKwkqIG8zMi5TOiBUaGlzIGNvZGUgaXMgb25seSBidWlsdCBmb3IgbzMyIGNvbXBpbGVzLgorCUEgbG90IG9mIHRoZSAjZGVmaW5lIGNydWZ0IGhhcyBtb3ZlZCB0byBmZmlfbWlwcy5oLgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXhlZCBhcmcgZmxhZ3MuIFNlY29uZCBhcmcKKwlpcyBvbmx5IHByb2Nlc3NlZCBpZiB0aGUgZmlyc3QgaXMgZWl0aGVyIGEgZmxvYXQgb3IgZG91YmxlLgorCitNb24gT2N0ICA3IDE1OjMzOjU5IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogbzMyLlM6IE1vZGlmaWVkIHRvIGNvbXBpbGUgdW5kZXIgZWFjaCBvZiBvMzIsIG4zMiBhbmQgbjY0LgorCisJKiBmZmkuYyAoRkZJXypfVFlQRURFRik6IFJlbW92ZWQgcmVkdW5kYW50ICc7JworCitGcmkgT2N0ICA0IDA5OjUzOjI1IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX2NhbGwpOiBSZW1vdmVkIEZGSV9BQkkgYXJnLCBhbmQgc3dhcHBlZAorCXJlbWFpbmluZyBhcmdzLgorCitXZWQgT2N0ICAyIDE3OjQxOjIyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogbzMyLlM6IFJlbW92ZWQgY3J1ZnR5IGRlZmluaXRpb25zLgorCitXZWQgT2N0ICAyIDEyOjUzOjQyIDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfY2lmKTogY2lmLT5ydmFsdWUgbm8gbG9uZ2VyIGluaXRpYWxpemVkIHRvIE5VTEwuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTW92ZWQgYWxsIG1hY2hpbmUgaW5kZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcKKwl0byBzcmMvcHJlcF9jaWYuYy4gSW50cm9kdWNlZCBmZmlfcHJlcF9jaWZfbWFjaGRlcC4gUmV0dXJuIHR5cGVzCisJb2YgRkZJX1RZUEVfU1RSVUNUIGFyZSBubyBkaWZmZXJlbnQgdGhhbiBGRklfVFlQRV9JTlQuCisKK1R1ZSBPY3QgIDEgMTc6MTE6MDIgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJ0bC5jeWdudXMuY29tPgorCisJKiBmZmkuYywgbzMyLlMsIG9iamVjdC5tYWs6IENyZWF0ZWQKKwkKKy0tLSBsaWJmZmkvc3JjL3NwYXJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUdWUgRmViIDI0IDE2OjMzOjE4IDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IEFkZGVkIGxvbmcgZG91YmxlIHN1cHBvcnQuCisKK1RodSBNYXkgIDggMTY6NTM6NTggMTk5NyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGhvc2VyLmN5Z251cy5jb20+CisKKwkqIG9iamVjdHMubWFrOiBSZW1vdmVkLgorCitUaHUgTWF5ICAxIDE2OjA3OjU2IDE5OTcgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBob3Nlci5jeWdudXMuY29tPgorCisJKiB2OC5TOiBGaXhlZCBtaW5vciBwb3J0YWJpbGl0eSBwcm9ibGVtIHJlcG9ydGVkIGJ5IAorCVJ1c3MgTWNNYW51cyA8bWNtYW5yQGVxLmdzLmNvbT4uCisKK1R1ZSBOb3YgMjYgMTQ6MTI6NDMgMTk5NiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGNzazMuY3lnbnVzLmNvbT4KKworCSogdjguUzogVXNlZCBTVEFDS0ZSQU1FIGRlZmluZSBlbHNld2hlcmUuIAorCisJKiBmZmkuYyAoZmZpX3ByZXBfYXJncyk6IFplcm8gb3V0IHNwYWNlIHdoZW4gVVNJTkdfUFVSSUZZCisJaXMgc2V0LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsbG9jYXRlIHRoZSBjb3JyZWN0IHN0YWNrIGZyYW1lIAorCXNwYWNlIGZvciBmdW5jdGlvbnMgd2l0aCA8IDYgYXJncy4KKworVHVlIE9jdCAyOSAxNTowODo1NSAxOTk2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcnRsLmN5Z251cy5jb20+CisKKwkqIGZmaS5jIChmZmlfcHJlcF9hcmdzKTogaW50IHogaXMgbm93IHNpemVfdCB6LgorCitNb24gT2N0IDE0IDEzOjMxOjI0IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogdjguUyAoZmZpX2NhbGxfVjgpOiBHb3Jkb24gcmV3cml0ZXMgdGhpcyBhZ2Fpbi4gSXQgbG9va3MKKwlncmVhdCBub3cuCisKKwkqIGZmaS5jIChmZmlfY2FsbCk6IFRoZSBjb21tZW50IGFib3V0IGhpamFja2VkIHJlZ2lzdGVycworCWlzIG5vIGxvbmdlciB2YWxpZCBhZnRlciBnb3Jkb25pIGhhY2tlZCB2OC5TLgorCisgICAgICAgICogdjguUyAoZmZpX2NhbGxfVjgpOiBSZXdyb3RlIHdpdGggZ29yZG9uaS4gTXVjaCBzaW1wbGVyLgorCQorCSogdjguUywgZmZpLmM6IGZmaV9jYWxsKCkgaGFkIGNoYW5nZWQgdG8gYWNjZXB0IG1vcmUgdGhhbgorCXR3byBhcmdzLCBzbyB2OC5TIGhhZCB0byBjaGFuZ2UgKGJlY2F1c2UgaXQgaGlqYWNrcyBpbmNvbWluZworCWFyZyByZWdpc3RlcnMpLgorCisJKiBmZmkuYzogSW50ZXJmYWNlIGNoYW5nZXMgYmFzZWQgb24gZmVlZGJhY2sgZnJvbSBKaW0gQmxhbmR5LgorCitUaHUgT2N0IDEwIDE3OjQ4OjE2IDE5OTYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBydGwuY3lnbnVzLmNvbT4KKworCSogZmZpLmMsIHY4LlMsIG9iamVjdHMubWFrOiBDcmVhdGVkLgorCQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKaW5kZXggMDY0ZjRmYS4uZWMyZmQ2OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQpAQCAtMSw0ICsxLDQgQEAKLWxpYmZmaSAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDA4ICBSZWQgSGF0LCBJbmMgYW5kIG90aGVycy4gIAorbGliZmZpIC0gQ29weXJpZ2h0IChjKSAxOTk2LTIwMDkgIEFudGhvbnkgR3JlZW4sIFJlZCBIYXQsIEluYyBhbmQgb3RoZXJzLiAgCiBTZWUgc291cmNlIGZpbGVzIGZvciBkZXRhaWxzLgogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCmluZGV4IDBkYjUyY2EuLmY0N2RkMWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQpAQCAtNyw2ICs3LDcgQEAKIEVYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqIGNvbmZpZ3VyZS5ob3N0IFwKIAlzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TIHNyYy9hbHBoYS9mZml0YXJnZXQuaCBcCiAJc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaXRhcmdldC5oIFwKKwlzcmMvYXZyMzIvZmZpLmMgc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpdGFyZ2V0LmggXAogCXNyYy9jcmlzL2ZmaS5jIHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZml0YXJnZXQuaCBcCiAJc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvZmZpdGFyZ2V0Lmggc3JjL2lhNjQvaWE2NF9mbGFncy5oIFwKIAlzcmMvaWE2NC91bml4LlMgXApAQCAtMjUsMTIgKzI2LDEzIEBACiAJc3JjL3NoNjQvZmZpLmMgc3JjL3NoNjQvc3lzdi5TIHNyYy9zaDY0L2ZmaXRhcmdldC5oIFwKIAlzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUyBzcmMvc3BhcmMvZmZpdGFyZ2V0LmggXAogCXNyYy9zcGFyYy9mZmkuYyBzcmMveDg2L2RhcndpbjY0LlMgXAotCXNyYy94ODYvZmZpLmMgc3JjL3g4Ni9zeXN2LlMgc3JjL3g4Ni93aW4zMi5TIHNyYy94ODYvZGFyd2luLlMgXAotCXNyYy94ODYvZnJlZWJzZC5TIFwKKwlzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L3dpbjY0LlMgXAorCXNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mcmVlYnNkLlMgXAogCXNyYy94ODYvZmZpNjQuYyBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvZmZpdGFyZ2V0LmggXAogCXNyYy9wYS9mZml0YXJnZXQuaCBzcmMvcGEvZmZpLmMgc3JjL3BhL2xpbnV4LlMgc3JjL3BhL2hwdXgzMi5TIFwKIAlzcmMvZnJ2L2ZmaS5jIHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL2RsbWFsbG9jLmMgXAotCWxpYnRvb2wtdmVyc2lvbiBDaGFuZ2VMb2cubGliZmZpCisJbGlidG9vbC12ZXJzaW9uIENoYW5nZUxvZy5saWJmZmkgbTQvbGlidG9vbC5tNCBcCisJbTQvbHR+b2Jzb2xldGUubTQgbTQvbHRvcHRpb25zLm00IG00L2x0c3VnYXIubTQgbTQvbHR2ZXJzaW9uLm00CiAKIGluZm9fVEVYSU5GT1MgPSBkb2MvbGliZmZpLnRleGkKIApAQCAtNzksNiArODEsOCBAQAogCiBNQUtFT1ZFUlJJREVTPQogCitBQ0xPQ0FMX0FNRkxBR1M9JChBQ0xPQ0FMX0FNRkxBR1MpIC1JIG00CisKIGxpYl9MVExJQlJBUklFUyA9IGxpYmZmaS5sYQogbm9pbnN0X0xUTElCUkFSSUVTID0gbGliZmZpX2NvbnZlbmllbmNlLmxhCiAKQEAgLTEwMiw2ICsxMDYsOSBAQAogaWYgWDg2X1dJTjMyCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKIGVuZGlmCitpZiBYODZfV0lONjQKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luNjQuUworZW5kaWYKIGlmIFg4Nl9EQVJXSU4KIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUwogZW5kaWYKQEAgLTEzNSw2ICsxNDIsOSBAQAogaWYgQVJNCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwogZW5kaWYKK2lmIEFWUjMyCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL2F2cjMyL3N5c3YuUyBzcmMvYXZyMzIvZmZpLmMKK2VuZGlmCiBpZiBMSUJGRklfQ1JJUwogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYwogZW5kaWYKQEAgLTE2NSw3ICsxNzUsNyBAQAogCiBBTV9DRkxBR1MgPSAtV2FsbCAtZyAtZmV4Y2VwdGlvbnMKIAotbGliZmZpX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvIGBncmVwIC12ICdeXCMnICQoc3JjZGlyKS9saWJ0b29sLXZlcnNpb25gCitsaWJmZmlfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAgJChMVExERkxBR1MpICQoQU1fTFRMREZMQUdTKQogCiBBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSWluY2x1ZGUgLUkkKHRvcF9zcmNkaXIpL3NyYwogQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKQEAgLTE3NCw0ICsxODQsMyBAQAogLlBIT05ZOiBpbnN0YWxsLWh0bWwgaW5zdGFsbC1wZGYKIGluc3RhbGwtaHRtbDoKIGluc3RhbGwtcGRmOgotCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgppbmRleCA5MDUyM2ZiLi40OWFmY2MxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KQEAgLTEsOCArMSw5IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEwIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExIGZyb20gTWFrZWZpbGUuYW0uCiAjIEBjb25maWd1cmVfaW5wdXRACiAKICMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAotIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCiAjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xNyw4ICsxOCw5IEBACiAKIFZQQVRIID0gQHNyY2RpckAKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dsaWJleGVjZGlyID0gJChsaWJleGVjZGlyKS9AUEFDS0FHRUAKIGFtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKIGluc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CiBpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCkBAIC0zOCwzMyArNDAsMzQgQEAKIEBYODZfVFJVRUBhbV9fYXBwZW5kXzIgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCiBAWDg2X0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzMgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TCiBAWDg2X1dJTjMyX1RSVUVAYW1fX2FwcGVuZF80ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKLUBYODZfREFSV0lOX1RSVUVAYW1fX2FwcGVuZF81ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L2RhcndpbjY0LlMKLUBTUEFSQ19UUlVFQGFtX19hcHBlbmRfNiA9IHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUwotQEFMUEhBX1RSVUVAYW1fX2FwcGVuZF83ID0gc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwotQElBNjRfVFJVRUBhbV9fYXBwZW5kXzggPSBzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC91bml4LlMKLUBNMzJSX1RSVUVAYW1fX2FwcGVuZF85ID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCi1ATTY4S19UUlVFQGFtX19hcHBlbmRfMTAgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKLUBQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xMSA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwotQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzEzID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKLUBQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKLUBBUk1fVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYwotQExJQkZGSV9DUklTX1RSVUVAYW1fX2FwcGVuZF8xNiA9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYwotQEZSVl9UUlVFQGFtX19hcHBlbmRfMTcgPSBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaS5jCi1AUzM5MF9UUlVFQGFtX19hcHBlbmRfMTggPSBzcmMvczM5MC9zeXN2LlMgc3JjL3MzOTAvZmZpLmMKLUBYODZfNjRfVFJVRUBhbV9fYXBwZW5kXzE5ID0gc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUwotQFNIX1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9zaC9zeXN2LlMgc3JjL3NoL2ZmaS5jCi1AU0g2NF9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMvc2g2NC9zeXN2LlMgc3JjL3NoNjQvZmZpLmMKLUBQQV9MSU5VWF9UUlVFQGFtX19hcHBlbmRfMjIgPSBzcmMvcGEvbGludXguUyBzcmMvcGEvZmZpLmMKLUBQQV9IUFVYX1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9wYS9ocHV4MzIuUyBzcmMvcGEvZmZpLmMKK0BYODZfV0lONjRfVFJVRUBhbV9fYXBwZW5kXzUgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luNjQuUworQFg4Nl9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzYgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUworQFNQQVJDX1RSVUVAYW1fX2FwcGVuZF83ID0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCitAQUxQSEFfVFJVRUBhbV9fYXBwZW5kXzggPSBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL29zZi5TCitASUE2NF9UUlVFQGFtX19hcHBlbmRfOSA9IHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L3VuaXguUworQE0zMlJfVFJVRUBhbV9fYXBwZW5kXzEwID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCitATTY4S19UUlVFQGFtX19hcHBlbmRfMTEgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKK0BQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8xMyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCitAUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzE0ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKK0BQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzE1ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKK0BBUk1fVFJVRUBhbV9fYXBwZW5kXzE2ID0gc3JjL2FybS9zeXN2LlMgc3JjL2FybS9mZmkuYworQEFWUjMyX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHNyYy9hdnIzMi9zeXN2LlMgc3JjL2F2cjMyL2ZmaS5jCitATElCRkZJX0NSSVNfVFJVRUBhbV9fYXBwZW5kXzE4ID0gc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaS5jCitARlJWX1RSVUVAYW1fX2FwcGVuZF8xOSA9IHNyYy9mcnYvZWFiaS5TIHNyYy9mcnYvZmZpLmMKK0BTMzkwX1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZmkuYworQFg4Nl82NF9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCitAU0hfVFJVRUBhbV9fYXBwZW5kXzIyID0gc3JjL3NoL3N5c3YuUyBzcmMvc2gvZmZpLmMKK0BTSDY0X1RSVUVAYW1fX2FwcGVuZF8yMyA9IHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZmkuYworQFBBX0xJTlVYX1RSVUVAYW1fX2FwcGVuZF8yNCA9IHNyYy9wYS9saW51eC5TIHNyYy9wYS9mZmkuYworQFBBX0hQVVhfVFJVRUBhbV9fYXBwZW5kXzI1ID0gc3JjL3BhL2hwdXgzMi5TIHNyYy9wYS9mZmkuYwogc3ViZGlyID0gLgogRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCiAJJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9kb2Mvc3RhbXAtdnRpIFwKIAkkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSAkKHNyY2RpcikvZmZpY29uZmlnLmguaW4gXAotCSQoc3JjZGlyKS9saWJmZmkucGMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQ2hhbmdlTG9nIFRPRE8gXAotCWNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgZGVwY29tcCBpbnN0YWxsLXNoIGx0Y2YtYy5zaCBcCi0JbHRjZi1jeHguc2ggbHRjZi1nY2ouc2ggbHRjb25maWcgbHRtYWluLnNoIG1kYXRlLXNoIG1pc3NpbmcgXAotCW1raW5zdGFsbGRpcnMgdGV4aW5mby50ZXgKKwkkKHNyY2RpcikvbGliZmZpLnBjLmluICQodG9wX3NyY2RpcikvY29uZmlndXJlIENoYW5nZUxvZyBcCisJY29tcGlsZSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBkZXBjb21wIGluc3RhbGwtc2ggbHRtYWluLnNoIFwKKwltZGF0ZS1zaCBtaXNzaW5nIHRleGluZm8udGV4CiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9hY2luY2x1ZGUubTQgXAogCSQodG9wX3NyY2RpcikvY29uZmlndXJlLmFjCkBAIC03MiwxOCArNzUsMzMgQEAKIAkkKEFDTE9DQUxfTTQpCiBhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAogIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KLW1raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL21raW5zdGFsbGRpcnMKK21raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCiBDT05GSUdfSEVBREVSID0gZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGxpYmZmaS5wYworQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KIGFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwogYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKICAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAogICAgICopIGY9JCRwOzsgXAogICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCiBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobGliZGlyKSIgIiQoREVTVERJUikkKGluZm9kaXIpIiBcCiAJIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCi1saWJMVExJQlJBUklFU19JTlNUQUxMID0gJChJTlNUQUxMKQogTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykgJChub2luc3RfTFRMSUJSQVJJRVMpCiBsaWJmZmlfbGFfTElCQUREID0KIGFtX19kaXJzdGFtcCA9ICQoYW1fX2xlYWRpbmdfZG90KWRpcnN0YW1wCkBAIC05NCwzNyArMTEyLDM5IEBACiBAWDg2X1RSVUVAYW1fX29iamVjdHNfMiA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwogQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMyA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZnJlZWJzZC5sbwogQFg4Nl9XSU4zMl9UUlVFQGFtX19vYmplY3RzXzQgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3dpbjMyLmxvCi1AWDg2X0RBUldJTl9UUlVFQGFtX19vYmplY3RzXzUgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L2Rhcndpbi5sbyBcCitAWDg2X1dJTjY0X1RSVUVAYW1fX29iamVjdHNfNSA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvd2luNjQubG8KK0BYODZfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfNiA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZGFyd2luLmxvIFwKIEBYODZfREFSV0lOX1RSVUVACXNyYy94ODYvZmZpNjQubG8gc3JjL3g4Ni9kYXJ3aW42NC5sbwotQFNQQVJDX1RSVUVAYW1fX29iamVjdHNfNiA9IHNyYy9zcGFyYy9mZmkubG8gc3JjL3NwYXJjL3Y4LmxvIFwKK0BTUEFSQ19UUlVFQGFtX19vYmplY3RzXzcgPSBzcmMvc3BhcmMvZmZpLmxvIHNyYy9zcGFyYy92OC5sbyBcCiBAU1BBUkNfVFJVRUAJc3JjL3NwYXJjL3Y5LmxvCi1AQUxQSEFfVFJVRUBhbV9fb2JqZWN0c183ID0gc3JjL2FscGhhL2ZmaS5sbyBzcmMvYWxwaGEvb3NmLmxvCi1ASUE2NF9UUlVFQGFtX19vYmplY3RzXzggPSBzcmMvaWE2NC9mZmkubG8gc3JjL2lhNjQvdW5peC5sbwotQE0zMlJfVFJVRUBhbV9fb2JqZWN0c185ID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KLUBNNjhLX1RSVUVAYW1fX29iamVjdHNfMTAgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbwotQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xMSA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKK0BBTFBIQV9UUlVFQGFtX19vYmplY3RzXzggPSBzcmMvYWxwaGEvZmZpLmxvIHNyYy9hbHBoYS9vc2YubG8KK0BJQTY0X1RSVUVAYW1fX29iamVjdHNfOSA9IHNyYy9pYTY0L2ZmaS5sbyBzcmMvaWE2NC91bml4LmxvCitATTMyUl9UUlVFQGFtX19vYmplY3RzXzEwID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KK0BNNjhLX1RSVUVAYW1fX29iamVjdHNfMTEgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbworQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2xpbnV4NjQubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19BSVhfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfQUlYX1RSVUVAYW1fX29iamVjdHNfMTMgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0FJWF9UUlVFQAlzcmMvcG93ZXJwYy9haXgubG8gXAogQFBPV0VSUENfQUlYX1RSVUVACXNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c18xMyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0RBUldJTl9UUlVFQAlzcmMvcG93ZXJwYy9kYXJ3aW4ubG8gXAogQFBPV0VSUENfREFSV0lOX1RSVUVACXNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLmxvCi1AUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAorQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzE1ID0gc3JjL3Bvd2VycGMvZmZpLmxvIFwKIEBQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvc3lzdi5sbyBcCiBAUE9XRVJQQ19GUkVFQlNEX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvCi1AQVJNX1RSVUVAYW1fX29iamVjdHNfMTUgPSBzcmMvYXJtL3N5c3YubG8gc3JjL2FybS9mZmkubG8KLUBMSUJGRklfQ1JJU19UUlVFQGFtX19vYmplY3RzXzE2ID0gc3JjL2NyaXMvc3lzdi5sbyBzcmMvY3Jpcy9mZmkubG8KLUBGUlZfVFJVRUBhbV9fb2JqZWN0c18xNyA9IHNyYy9mcnYvZWFiaS5sbyBzcmMvZnJ2L2ZmaS5sbwotQFMzOTBfVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9zMzkwL3N5c3YubG8gc3JjL3MzOTAvZmZpLmxvCi1AWDg2XzY0X1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvdW5peDY0LmxvIFwKK0BBUk1fVFJVRUBhbV9fb2JqZWN0c18xNiA9IHNyYy9hcm0vc3lzdi5sbyBzcmMvYXJtL2ZmaS5sbworQEFWUjMyX1RSVUVAYW1fX29iamVjdHNfMTcgPSBzcmMvYXZyMzIvc3lzdi5sbyBzcmMvYXZyMzIvZmZpLmxvCitATElCRkZJX0NSSVNfVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9jcmlzL3N5c3YubG8gc3JjL2NyaXMvZmZpLmxvCitARlJWX1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMvZnJ2L2VhYmkubG8gc3JjL2Zydi9mZmkubG8KK0BTMzkwX1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvczM5MC9zeXN2LmxvIHNyYy9zMzkwL2ZmaS5sbworQFg4Nl82NF9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L3VuaXg2NC5sbyBcCiBAWDg2XzY0X1RSVUVACXNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwotQFNIX1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvc2gvc3lzdi5sbyBzcmMvc2gvZmZpLmxvCi1AU0g2NF9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL3NoNjQvc3lzdi5sbyBzcmMvc2g2NC9mZmkubG8KLUBQQV9MSU5VWF9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL3BhL2xpbnV4LmxvIHNyYy9wYS9mZmkubG8KLUBQQV9IUFVYX1RSVUVAYW1fX29iamVjdHNfMjMgPSBzcmMvcGEvaHB1eDMyLmxvIHNyYy9wYS9mZmkubG8KK0BTSF9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL3NoL3N5c3YubG8gc3JjL3NoL2ZmaS5sbworQFNINjRfVFJVRUBhbV9fb2JqZWN0c18yMyA9IHNyYy9zaDY0L3N5c3YubG8gc3JjL3NoNjQvZmZpLmxvCitAUEFfTElOVVhfVFJVRUBhbV9fb2JqZWN0c18yNCA9IHNyYy9wYS9saW51eC5sbyBzcmMvcGEvZmZpLmxvCitAUEFfSFBVWF9UUlVFQGFtX19vYmplY3RzXzI1ID0gc3JjL3BhL2hwdXgzMi5sbyBzcmMvcGEvZmZpLmxvCiBub2Rpc3RfbGliZmZpX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAogCSQoYW1fX29iamVjdHNfMykgJChhbV9fb2JqZWN0c180KSAkKGFtX19vYmplY3RzXzUpIFwKIAkkKGFtX19vYmplY3RzXzYpICQoYW1fX29iamVjdHNfNykgJChhbV9fb2JqZWN0c184KSBcCkBAIC0xMzIsMzAgKzE1MiwzMyBAQAogCSQoYW1fX29iamVjdHNfMTIpICQoYW1fX29iamVjdHNfMTMpICQoYW1fX29iamVjdHNfMTQpIFwKIAkkKGFtX19vYmplY3RzXzE1KSAkKGFtX19vYmplY3RzXzE2KSAkKGFtX19vYmplY3RzXzE3KSBcCiAJJChhbV9fb2JqZWN0c18xOCkgJChhbV9fb2JqZWN0c18xOSkgJChhbV9fb2JqZWN0c18yMCkgXAotCSQoYW1fX29iamVjdHNfMjEpICQoYW1fX29iamVjdHNfMjIpICQoYW1fX29iamVjdHNfMjMpCisJJChhbV9fb2JqZWN0c18yMSkgJChhbV9fb2JqZWN0c18yMikgJChhbV9fb2JqZWN0c18yMykgXAorCSQoYW1fX29iamVjdHNfMjQpICQoYW1fX29iamVjdHNfMjUpCiBsaWJmZmlfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfbGFfT0JKRUNUUykKIGxpYmZmaV9sYV9MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAogCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAogCSQobGliZmZpX2xhX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9MSUJBREQgPQotYW1fX29iamVjdHNfMjQgPSBzcmMvZGVidWcubG8gc3JjL3ByZXBfY2lmLmxvIHNyYy90eXBlcy5sbyBcCithbV9fb2JqZWN0c18yNiA9IHNyYy9kZWJ1Zy5sbyBzcmMvcHJlcF9jaWYubG8gc3JjL3R5cGVzLmxvIFwKIAlzcmMvcmF3X2FwaS5sbyBzcmMvamF2YV9yYXdfYXBpLmxvIHNyYy9jbG9zdXJlcy5sbwotYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzI0KQotYW1fX29iamVjdHNfMjUgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBcCithbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMjYpCithbV9fb2JqZWN0c18yNyA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzMpIFwKIAkkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgJChhbV9fb2JqZWN0c182KSBcCiAJJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpICQoYW1fX29iamVjdHNfOSkgXAogCSQoYW1fX29iamVjdHNfMTApICQoYW1fX29iamVjdHNfMTEpICQoYW1fX29iamVjdHNfMTIpIFwKIAkkKGFtX19vYmplY3RzXzEzKSAkKGFtX19vYmplY3RzXzE0KSAkKGFtX19vYmplY3RzXzE1KSBcCiAJJChhbV9fb2JqZWN0c18xNikgJChhbV9fb2JqZWN0c18xNykgJChhbV9fb2JqZWN0c18xOCkgXAogCSQoYW1fX29iamVjdHNfMTkpICQoYW1fX29iamVjdHNfMjApICQoYW1fX29iamVjdHNfMjEpIFwKLQkkKGFtX19vYmplY3RzXzIyKSAkKGFtX19vYmplY3RzXzIzKQotbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTID0gJChhbV9fb2JqZWN0c18yNSkKKwkkKGFtX19vYmplY3RzXzIyKSAkKGFtX19vYmplY3RzXzIzKSAkKGFtX19vYmplY3RzXzI0KSBcCisJJChhbV9fb2JqZWN0c18yNSkKK25vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMjcpCiBsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpIFwKIAkkKG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykKIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNACiBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCiBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworYW1fX212ID0gbXYgLWYKIENQUEFTQ09NUElMRSA9ICQoQ0NBUykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKIAkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCiBMVENQUEFTQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCkBAIC0xOTMsMTAgKzIxNiwxMiBAQAogCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCiAJaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCiAJcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKLXBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCA9ICQoSU5TVEFMTF9EQVRBKQogREFUQSA9ICQocGtnY29uZmlnX0RBVEEpCiBSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUyA9IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUJXAogICBkaXN0Y2xlYW4tcmVjdXJzaXZlIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlCitBTV9SRUNVUlNJVkVfVEFSR0VUUyA9ICQoUkVDVVJTSVZFX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIFwKKwkkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTOi1yZWN1cnNpdmU9KSB0YWdzIFRBR1MgY3RhZ3MgQ1RBR1MgXAorCWRpc3RkaXIgZGlzdCBkaXN0LWFsbCBkaXN0Y2hlY2sKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKIERJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKQEAgLTIwNCw5ICsyMjksMzQgQEAKIGRpc3RkaXIgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKIHRvcF9kaXN0ZGlyID0gJChkaXN0ZGlyKQogYW1fX3JlbW92ZV9kaXN0ZGlyID0gXAotICB7IHRlc3QgISAtZCAkKGRpc3RkaXIpIFwKLSAgICB8fCB7IGZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKLSAgICAgICAgICYmIHJtIC1mciAkKGRpc3RkaXIpOyB9OyB9CisgIHsgdGVzdCAhIC1kICIkKGRpc3RkaXIpIiBcCisgICAgfHwgeyBmaW5kICIkKGRpc3RkaXIpIiAtdHlwZSBkICEgLXBlcm0gLTIwMCAtZXhlYyBjaG1vZCB1K3cge30gJzsnIFwKKyAgICAgICAgICYmIHJtIC1mciAiJChkaXN0ZGlyKSI7IH07IH0KK2FtX19yZWxhdGl2aXplID0gXAorICBkaXIwPWBwd2RgOyBcCisgIHNlZF9maXJzdD0ncyxeXChbXi9dKlwpLy4qJCQsXDEsJzsgXAorICBzZWRfcmVzdD0ncyxeW14vXSovKiwsJzsgXAorICBzZWRfbGFzdD0ncyxeLiovXChbXi9dKlwpJCQsXDEsJzsgXAorICBzZWRfYnV0bGFzdD0ncywvKlteL10qJCQsLCc7IFwKKyAgd2hpbGUgdGVzdCAtbiAiJCRkaXIxIjsgZG8gXAorICAgIGZpcnN0PWBlY2hvICIkJGRpcjEiIHwgc2VkIC1lICIkJHNlZF9maXJzdCJgOyBcCisgICAgaWYgdGVzdCAiJCRmaXJzdCIgIT0gIi4iOyB0aGVuIFwKKyAgICAgIGlmIHRlc3QgIiQkZmlyc3QiID0gIi4uIjsgdGhlbiBcCisgICAgICAgIGRpcjI9YGVjaG8gIiQkZGlyMCIgfCBzZWQgLWUgIiQkc2VkX2xhc3QiYC8iJCRkaXIyIjsgXAorICAgICAgICBkaXIwPWBlY2hvICIkJGRpcjAiIHwgc2VkIC1lICIkJHNlZF9idXRsYXN0ImA7IFwKKyAgICAgIGVsc2UgXAorICAgICAgICBmaXJzdDI9YGVjaG8gIiQkZGlyMiIgfCBzZWQgLWUgIiQkc2VkX2ZpcnN0ImA7IFwKKyAgICAgICAgaWYgdGVzdCAiJCRmaXJzdDIiID0gIiQkZmlyc3QiOyB0aGVuIFwKKyAgICAgICAgICBkaXIyPWBlY2hvICIkJGRpcjIiIHwgc2VkIC1lICIkJHNlZF9yZXN0ImA7IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgZGlyMj0iLi4vJCRkaXIyIjsgXAorICAgICAgICBmaTsgXAorICAgICAgICBkaXIwPSIkJGRpcjAiLyIkJGZpcnN0IjsgXAorICAgICAgZmk7IFwKKyAgICBmaTsgXAorICAgIGRpcjE9YGVjaG8gIiQkZGlyMSIgfCBzZWQgLWUgIiQkc2VkX3Jlc3QiYDsgXAorICBkb25lOyBcCisgIHJlbGRpcj0iJCRkaXIyIgogRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6CiBHWklQX0VOViA9IC0tYmVzdAogZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludApAQCAtMjE0LDYgKzI2NCw3IEBACiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAogQU1fUlVOVEVTVEZMQUdTID0gQEFNX1JVTlRFU1RGTEFHU0AKIEFSID0gQEFSQAogQVVUT0NPTkYgPSBAQVVUT0NPTkZACkBAIC0yMjgsMjEgKzI3OSwxNyBAQAogQ0ZMQUdTID0gQENGTEFHU0AKIENQUCA9IEBDUFBACiBDUFBGTEFHUyA9IEBDUFBGTEFHU0AKLUNYWCA9IEBDWFhACi1DWFhDUFAgPSBAQ1hYQ1BQQAotQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAotQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACiBDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAogREVGUyA9IEBERUZTQAogREVQRElSID0gQERFUERJUkAKLUVDSE8gPSBARUNIT0AKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAogRUNIT19DID0gQEVDSE9fQ0AKIEVDSE9fTiA9IEBFQ0hPX05ACiBFQ0hPX1QgPSBARUNIT19UQAogRUdSRVAgPSBARUdSRVBACiBFWEVFWFQgPSBARVhFRVhUQAotRjc3ID0gQEY3N0AKLUZGTEFHUyA9IEBGRkxBR1NACitGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKIElOU1RBTEwgPSBASU5TVEFMTEAKQEAgLTI1MCwxNiArMjk3LDIzIEBACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAogSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACiBJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACiBMREZMQUdTID0gQExERkxBR1NACiBMSUJPQkpTID0gQExJQk9CSlNACiBMSUJTID0gQExJQlNACiBMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACiBMTl9TID0gQExOX1NACiBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAogTUFJTlQgPSBATUFJTlRACiBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKIE1LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKIE9CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKIFBBQ0tBR0UgPSBAUEFDS0FHRUAKIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAogUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKQEAgLTI4MCw4ICszMzQsNyBAQAogYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTMxMiw2ICszNjUsNyBAQAogbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAogbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKIG1hbmRpciA9IEBtYW5kaXJACiBta2Rpcl9wID0gQG1rZGlyX3BACiBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACkBAIC0zMzAsNiArMzg0LDcgQEAKIHRhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKIHRvb2xleGVjZGlyID0gQHRvb2xleGVjZGlyQAogdG9vbGV4ZWNsaWJkaXIgPSBAdG9vbGV4ZWNsaWJkaXJACit0b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACiB0b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAogdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAogQVVUT01BS0VfT1BUSU9OUyA9IGZvcmVpZ24gc3ViZGlyLW9iamVjdHMKQEAgLTMzNyw2ICszOTIsNyBAQAogRVhUUkFfRElTVCA9IExJQ0VOU0UgQ2hhbmdlTG9nLnYxIENoYW5nZUxvZy5saWJnY2ogY29uZmlndXJlLmhvc3QgXAogCXNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMgc3JjL2FscGhhL2ZmaXRhcmdldC5oIFwKIAlzcmMvYXJtL2ZmaS5jIHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpdGFyZ2V0LmggXAorCXNyYy9hdnIzMi9mZmkuYyBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZml0YXJnZXQuaCBcCiAJc3JjL2NyaXMvZmZpLmMgc3JjL2NyaXMvc3lzdi5TIHNyYy9jcmlzL2ZmaXRhcmdldC5oIFwKIAlzcmMvaWE2NC9mZmkuYyBzcmMvaWE2NC9mZml0YXJnZXQuaCBzcmMvaWE2NC9pYTY0X2ZsYWdzLmggXAogCXNyYy9pYTY0L3VuaXguUyBcCkBAIC0zNTUsMTIgKzQxMSwxMyBAQAogCXNyYy9zaDY0L2ZmaS5jIHNyYy9zaDY0L3N5c3YuUyBzcmMvc2g2NC9mZml0YXJnZXQuaCBcCiAJc3JjL3NwYXJjL3Y4LlMgc3JjL3NwYXJjL3Y5LlMgc3JjL3NwYXJjL2ZmaXRhcmdldC5oIFwKIAlzcmMvc3BhcmMvZmZpLmMgc3JjL3g4Ni9kYXJ3aW42NC5TIFwKLQlzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L2Rhcndpbi5TIFwKLQlzcmMveDg2L2ZyZWVic2QuUyBcCisJc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUyBzcmMveDg2L3dpbjMyLlMgc3JjL3g4Ni93aW42NC5TIFwKKwlzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZnJlZWJzZC5TIFwKIAlzcmMveDg2L2ZmaTY0LmMgc3JjL3g4Ni91bml4NjQuUyBzcmMveDg2L2ZmaXRhcmdldC5oIFwKIAlzcmMvcGEvZmZpdGFyZ2V0Lmggc3JjL3BhL2ZmaS5jIHNyYy9wYS9saW51eC5TIHNyYy9wYS9ocHV4MzIuUyBcCiAJc3JjL2Zydi9mZmkuYyBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaXRhcmdldC5oIHNyYy9kbG1hbGxvYy5jIFwKLQlsaWJ0b29sLXZlcnNpb24gQ2hhbmdlTG9nLmxpYmZmaQorCWxpYnRvb2wtdmVyc2lvbiBDaGFuZ2VMb2cubGliZmZpIG00L2xpYnRvb2wubTQgXAorCW00L2x0fm9ic29sZXRlLm00IG00L2x0b3B0aW9ucy5tNCBtNC9sdHN1Z2FyLm00IG00L2x0dmVyc2lvbi5tNAogCiBpbmZvX1RFWElORk9TID0gZG9jL2xpYmZmaS50ZXhpCiAKQEAgLTQwMiw2ICs0NTksNyBAQAogCSJERVNURElSPSQoREVTVERJUikiCiAKIE1BS0VPVkVSUklERVMgPSAKK0FDTE9DQUxfQU1GTEFHUyA9ICQoQUNMT0NBTF9BTUZMQUdTKSAtSSBtNAogbGliX0xUTElCUkFSSUVTID0gbGliZmZpLmxhCiBub2luc3RfTFRMSUJSQVJJRVMgPSBsaWJmZmlfY29udmVuaWVuY2UubGEKIGxpYmZmaV9sYV9TT1VSQ0VTID0gc3JjL2RlYnVnLmMgc3JjL3ByZXBfY2lmLmMgc3JjL3R5cGVzLmMgXApAQCAtNDE2LDExICs0NzQsMTIgQEAKIAkkKGFtX19hcHBlbmRfMTIpICQoYW1fX2FwcGVuZF8xMykgJChhbV9fYXBwZW5kXzE0KSBcCiAJJChhbV9fYXBwZW5kXzE1KSAkKGFtX19hcHBlbmRfMTYpICQoYW1fX2FwcGVuZF8xNykgXAogCSQoYW1fX2FwcGVuZF8xOCkgJChhbV9fYXBwZW5kXzE5KSAkKGFtX19hcHBlbmRfMjApIFwKLQkkKGFtX19hcHBlbmRfMjEpICQoYW1fX2FwcGVuZF8yMikgJChhbV9fYXBwZW5kXzIzKQorCSQoYW1fX2FwcGVuZF8yMSkgJChhbV9fYXBwZW5kXzIyKSAkKGFtX19hcHBlbmRfMjMpIFwKKwkkKGFtX19hcHBlbmRfMjQpICQoYW1fX2FwcGVuZF8yNSkKIGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykKIG5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKQogQU1fQ0ZMQUdTID0gLVdhbGwgLWcgLWZleGNlcHRpb25zCi1saWJmZmlfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gYGdyZXAgLXYgJ15cIycgJChzcmNkaXIpL2xpYnRvb2wtdmVyc2lvbmAKK2xpYmZmaV9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYCAkKEFNX0xUTERGTEFHUykKIEFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQodG9wX3NyY2Rpcikvc3JjCiBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQogYWxsOiBmZmljb25maWcuaApAQCAtNDM0LDE1ICs0OTMsMTUgQEAKIAlAZm9yIGRlcCBpbiAkPzsgZG8gXAogCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCiAJICAgICokJGRlcCopIFwKLQkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAnOyBcCi0JICAgICAgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiAgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduJzsgXAorCSAgICAgICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIFwKIAkJJiYgZXhpdCAwOyBcCiAJICAgICAgZXhpdCAxOzsgXAogCSAgZXNhYzsgXAogCWRvbmU7IFwKLQllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gIE1ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBNYWtlZmlsZQorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTQ1OCw5ICs1MTcsMTAgQEAKIAkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCiAKICQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKICQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCWNkICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CiAKIGZmaWNvbmZpZy5oOiBzdGFtcC1oMQogCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXApAQCAtNDcyLDcgKzUzMiw3IEBACiAJQHJtIC1mIHN0YW1wLWgxCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyBmZmljb25maWcuaAogJChzcmNkaXIpL2ZmaWNvbmZpZy5oLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKLQljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwkoJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgJChBVVRPSEVBREVSKSkKIAlybSAtZiBzdGFtcC1oMQogCXRvdWNoICRACiAKQEAgLTQ4MywyMCArNTQzLDI0IEBACiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKGxpYmRpcikiIHx8IGxpc3Q9OyBcCisJbGlzdDI9OyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgJCRwOyB0aGVuIFwKLQkgICAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgICAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChsaWJMVExJQlJBUklFU19JTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgJyQkcCcgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKLQkgICAgJChMSUJUT09MKSAtLW1vZGU9aW5zdGFsbCAkKGxpYkxUTElCUkFSSUVTX0lOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAiJCRwIiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCisJICAgIGxpc3QyPSIkJGxpc3QyICQkcCI7IFwKIAkgIGVsc2UgOjsgZmk7IFwKLQlkb25lCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAorCX0KIAogdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgcD0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKExJQlRPT0wpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRwJyI7IFwKLQkgICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJHAiOyBcCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgICQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCiAJZG9uZQogCiBjbGVhbi1saWJMVExJQlJBUklFUzoKQEAgLTU1NCw2ICs2MTgsOCBAQAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni93aW4zMi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3g4Ni93aW42NC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni9kYXJ3aW4ubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy94ODYvZmZpNjQubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKQEAgLTY0OCw2ICs3MTQsMTYgQEAKIAlzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9hcm0vZmZpLmxvOiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL2FybS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9hdnIzMgorCUA6ID4gc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKQorc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL2F2cjMyLyQoREVQRElSKQorCUA6ID4gc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hdnIzMi9zeXN2LmxvOiBzcmMvYXZyMzIvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2F2cjMyL2ZmaS5sbzogc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9jcmlzLyQoYW1fX2RpcnN0YW1wKToKIAlAJChNS0RJUl9QKSBzcmMvY3JpcwogCUA6ID4gc3JjL2NyaXMvJChhbV9fZGlyc3RhbXApCkBAIC03MjUsNiArODAxLDEwIEBACiAJLXJtIC1mIHNyYy9hcm0vZmZpLmxvCiAJLXJtIC1mIHNyYy9hcm0vc3lzdi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2FybS9zeXN2LmxvCisJLXJtIC1mIHNyYy9hdnIzMi9mZmkuJChPQkpFWFQpCisJLXJtIC1mIHNyYy9hdnIzMi9mZmkubG8KKwktcm0gLWYgc3JjL2F2cjMyL3N5c3YuJChPQkpFWFQpCisJLXJtIC1mIHNyYy9hdnIzMi9zeXN2LmxvCiAJLXJtIC1mIHNyYy9jbG9zdXJlcy4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2Nsb3N1cmVzLmxvCiAJLXJtIC1mIHNyYy9jcmlzL2ZmaS4kKE9CSkVYVCkKQEAgLTgyMyw2ICs5MDMsOCBAQAogCS1ybSAtZiBzcmMveDg2L3VuaXg2NC5sbwogCS1ybSAtZiBzcmMveDg2L3dpbjMyLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMveDg2L3dpbjMyLmxvCisJLXJtIC1mIHNyYy94ODYvd2luNjQuJChPQkpFWFQpCisJLXJtIC1mIHNyYy94ODYvd2luNjQubG8KIAogZGlzdGNsZWFuLWNvbXBpbGU6CiAJLXJtIC1mICoudGFiLmMKQEAgLTgzNyw2ICs5MTksOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hbHBoYS8kKERFUERJUikvb3NmLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FybS8kKERFUERJUikvc3lzdi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hdnIzMi8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2F2cjMyLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2NyaXMvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9jcmlzLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2Zydi8kKERFUERJUikvZWFiaS5QbG9AYW1fX3F1b3RlQApAQCAtODgwLDExICs5NjQsMTIgQEAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvdW5peDY0LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3g4Ni8kKERFUERJUikvd2luMzIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS93aW42NC5QbG9AYW1fX3F1b3RlQAogCiAuUy5vOgogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtODkyLDcgKzk3Nyw3IEBACiAuUy5vYmo6CiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCkBAIC05MDAsNyArOTg1LDcgQEAKIC5TLmxvOgogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5sbyQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoTFRDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoTFRDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CkBAIC05MDgsNyArOTkzLDcgQEAKIC5jLm86CiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAltdiAtZiAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACiBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtOTE2LDcgKzEwMDEsNyBAQAogLmMub2JqOgogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKLUBhbV9fZmFzdGRlcENDX1RSVUVACW12IC1mICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBvCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKIEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKQEAgLTkyNCw3ICsxMDA5LDcgQEAKIC5jLmxvOgogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJbXYgLWYgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUGxvCiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAogQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPApAQCAtOTM3LDYgKzEwMjIsNyBAQAogCS1ybSAtcmYgc3JjLy5saWJzIHNyYy9fbGlicwogCS1ybSAtcmYgc3JjL2FscGhhLy5saWJzIHNyYy9hbHBoYS9fbGlicwogCS1ybSAtcmYgc3JjL2FybS8ubGlicyBzcmMvYXJtL19saWJzCisJLXJtIC1yZiBzcmMvYXZyMzIvLmxpYnMgc3JjL2F2cjMyL19saWJzCiAJLXJtIC1yZiBzcmMvY3Jpcy8ubGlicyBzcmMvY3Jpcy9fbGlicwogCS1ybSAtcmYgc3JjL2Zydi8ubGlicyBzcmMvZnJ2L19saWJzCiAJLXJtIC1yZiBzcmMvaWE2NC8ubGlicyBzcmMvaWE2NC9fbGlicwpAQCAtOTUyLDE0ICsxMDM4LDE0IEBACiAJLXJtIC1yZiBzcmMveDg2Ly5saWJzIHNyYy94ODYvX2xpYnMKIAogZGlzdGNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mIGxpYnRvb2wKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKIGRvYy8kKGFtX19kaXJzdGFtcCk6CiAJQCQoTUtESVJfUCkgZG9jCiAJQDogPiBkb2MvJChhbV9fZGlyc3RhbXApCiAKICQoc3JjZGlyKS9kb2MvbGliZmZpLmluZm86IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aQogCXJlc3RvcmU9OiAmJiBiYWNrdXBkaXI9IiQoYW1fX2xlYWRpbmdfZG90KWFtJCQkJCIgJiYgXAotCWFtX19jd2Q9YHB3ZGAgJiYgY2QgJChzcmNkaXIpICYmIFwKKwlhbV9fY3dkPWBwd2RgICYmICQoYW1fX2NkKSAkKHNyY2RpcikgJiYgXAogCXJtIC1yZiAkJGJhY2t1cGRpciAmJiBta2RpciAkJGJhY2t1cGRpciAmJiBcCiAJaWYgKCQoTUFLRUlORk8pIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKIAkgIGZvciBmIGluICRAICRALVswLTldICRALVswLTldWzAtOV0gJChAOi5pbmZvPSkuaVswLTldICQoQDouaW5mbz0pLmlbMC05XVswLTldOyBkbyBcCkBAIC05NzEsMTAgKzEwNTcsMTAgQEAKIAkgLW8gJEAgJChzcmNkaXIpL2RvYy9saWJmZmkudGV4aTsgXAogCXRoZW4gXAogCSAgcmM9MDsgXAotCSAgY2QgJChzcmNkaXIpOyBcCisJICAkKGFtX19jZCkgJChzcmNkaXIpOyBcCiAJZWxzZSBcCiAJICByYz0kJD87IFwKLQkgIGNkICQoc3JjZGlyKSAmJiBcCisJICAkKGFtX19jZCkgJChzcmNkaXIpICYmIFwKIAkgICQkcmVzdG9yZSAkJGJhY2t1cGRpci8qIGBlY2hvICIuLyRAIiB8IHNlZCAnc3xbXi9dKiQkfHwnYDsgXAogCWZpOyBcCiAJcm0gLXJmICQkYmFja3VwZGlyOyBleGl0ICQkcmMKQEAgLTEwMjgsMTYgKzExMTQsMTggQEAKIAogdW5pbnN0YWxsLWR2aS1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKERWSVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKERWSVMpJzsgdGVzdCAtbiAiJChkdmlkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKGR2aWRpcikvJCRmJyI7IFwKIAkgIHJtIC1mICIkKERFU1RESVIpJChkdmlkaXIpLyQkZiI7IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1odG1sLWFtOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQoSFRNTFMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKEhUTUxTKSc7IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICAkKGFtX19zdHJpcF9kaXIpIFwKIAkgIGVjaG8gIiBybSAtcmYgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCiAJICBybSAtcmYgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKIAlkb25lCkBAIC0xMDUxLDcgKzExMzksOCBAQAogCSAgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCiAJICAgIHJlbGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8Xi4qL3x8J2A7IFwKIAkgICAgZWNobyAiIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSckKERFU1RESVIpJChpbmZvZGlyKScgLS1yZW1vdmUgJyQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSciOyBcCi0JICAgIGluc3RhbGwtaW5mbyAtLWluZm8tZGlyPSIkKERFU1RESVIpJChpbmZvZGlyKSIgLS1yZW1vdmUgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgaWYgaW5zdGFsbC1pbmZvIC0taW5mby1kaXI9IiQoREVTVERJUikkKGluZm9kaXIpIiAtLXJlbW92ZSAiJChERVNURElSKSQoaW5mb2RpcikvJCRyZWxmaWxlIjsgXAorCSAgICB0aGVuIDo7IGVsc2UgdGVzdCAhIC1mICIkKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUiIHx8IGV4aXQgMTsgZmk7IFwKIAkgIGRvbmU7IFwKIAllbHNlIDo7IGZpCiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKQEAgLTEwNjcsMTYgKzExNTYsMTggQEAKIAogdW5pbnN0YWxsLXBkZi1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKFBERlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBkZmRpcikvJCRmJyI7IFwKIAkgIHJtIC1mICIkKERFU1RESVIpJChwZGZkaXIpLyQkZiI7IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1wcy1hbToKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKFBTUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJQGxpc3Q9JyQoUFNTKSc7IHRlc3QgLW4gIiQocHNkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBlY2hvICIgcm0gLWYgJyQoREVTVERJUikkKHBzZGlyKS8kJGYnIjsgXAogCSAgcm0gLWYgIiQoREVTVERJUikkKHBzZGlyKS8kJGYiOyBcCiAJZG9uZQpAQCAtMTA5MywxNiArMTE4NCwxOSBAQAogCSAgZm9yIGZpbGUgaW4gJCRkLyQkYmFzZSAkJGQvJCRiYXNlLVswLTldICQkZC8kJGJhc2UtWzAtOV1bMC05XSAkJGQvJCRiYXNlX2lbMC05XSAkJGQvJCRiYXNlX2lbMC05XVswLTldOyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgJCRmaWxlOyB0aGVuIFwKIAkgICAgICByZWxmaWxlPWBleHByICIkJGZpbGUiIDogIiQkZC9cKC4qXCkiYDsgXAotCSAgICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJHJlbGZpbGUgfHwgXAotCQljcCAtcCAkJGZpbGUgJChkaXN0ZGlyKS8kJHJlbGZpbGU7IFwKKwkgICAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkcmVsZmlsZSIgfHwgXAorCQljcCAtcCAkJGZpbGUgIiQoZGlzdGRpcikvJCRyZWxmaWxlIjsgXAogCSAgICBlbHNlIDo7IGZpOyBcCiAJICBkb25lOyBcCiAJZG9uZQogCiBtb3N0bHljbGVhbi1hbWluZm86CiAJLXJtIC1yZiBsaWJmZmkuYXV4IGxpYmZmaS5jcCBsaWJmZmkuY3BzIGxpYmZmaS5mbiBsaWJmZmkua3kgbGliZmZpLmxvZyBcCi0JICBsaWJmZmkucGcgbGliZmZpLnRtcCBsaWJmZmkudG9jIGxpYmZmaS50cCBsaWJmZmkudnIgXAotCSAgZG9jL2xpYmZmaS5kdmkgZG9jL2xpYmZmaS5wZGYgZG9jL2xpYmZmaS5wcyBkb2MvbGliZmZpLmh0bWwKKwkgIGxpYmZmaS5wZyBsaWJmZmkudG1wIGxpYmZmaS50b2MgbGliZmZpLnRwIGxpYmZmaS52cgorCitjbGVhbi1hbWluZm86CisJLXRlc3QgLXogImRvYy9saWJmZmkuZHZpIGRvYy9saWJmZmkucGRmIGRvYy9saWJmZmkucHMgZG9jL2xpYmZmaS5odG1sIiBcCisJfHwgcm0gLXJmIGRvYy9saWJmZmkuZHZpIGRvYy9saWJmZmkucGRmIGRvYy9saWJmZmkucHMgZG9jL2xpYmZmaS5odG1sCiAKIG1haW50YWluZXItY2xlYW4tYW1pbmZvOgogCUBsaXN0PSckKElORk9fREVQUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKQEAgLTExMTMsMjAgKzEyMDcsMjMgQEAKIGluc3RhbGwtcGtnY29uZmlnREFUQTogJChwa2djb25maWdfREFUQSkKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKHBrZ2NvbmZpZ2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiCi0JQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChwa2djb25maWdEQVRBX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCi0JICAkKHBrZ2NvbmZpZ0RBVEFfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikvJCRmIjsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKIAlkb25lCiAKIHVuaW5zdGFsbC1wa2djb25maWdEQVRBOgogCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiIHJtIC1mICckKERFU1RESVIpJChwa2djb25maWdkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKS8kJGYiOyBcCi0JZG9uZQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAorCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgJiYgcm0gLWYgJCRmaWxlcwogCiAjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAogIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCkBAIC0xMTUyLDcgKzEyNDksNyBAQAogCSAgZWxzZSBcCiAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCiAJICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCiAJICB8fCBldmFsICQkZmFpbGNvbTsgXAogCWRvbmU7IFwKIAlpZiB0ZXN0ICIkJGRvdF9zZWVuIiA9ICJubyI7IHRoZW4gXApAQCAtMTE4NiwxNiArMTI4MywxNiBAQAogCSAgZWxzZSBcCiAJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCiAJICBmaTsgXAotCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCiAJICB8fCBldmFsICQkZmFpbGNvbTsgXAogCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgogdGFncy1yZWN1cnNpdmU6CiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCi0JICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoJChhbV9fY2QpICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHRhZ3MpOyBcCiAJZG9uZQogY3RhZ3MtcmVjdXJzaXZlOgogCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAotCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8ICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY3RhZ3MpOyBcCiAJZG9uZQogCiBJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQpAQCAtMTIwMywxNCArMTMwMCwxNCBAQAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAogCW1raWQgLWZJRCAkJHVuaXF1ZQogdGFnczogVEFHUwogCiBUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgZmZpY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWlmICgkKEVUQUdTKSAtLWV0YWdzLWluY2x1ZGUgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCSAgaW5jbHVkZV9vcHRpb249LS1ldGFncy1pbmNsdWRlOyBcCkBAIC0xMjIyLDQ2ICsxMzE5LDUwIEBACiAJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCi0JICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICAgICAgc2V0ICIkJEAiICIkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAogCSAgZmk7IFwKIAlkb25lOyBcCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpIGZmaWNvbmZpZy5oLmluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKLQlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXNoaWZ0OyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkKiQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKIAkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKLQkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKIAlmaQogY3RhZ3M6IENUQUdTCiBDVEFHUzogY3RhZ3MtcmVjdXJzaXZlICQoSEVBREVSUykgJChTT1VSQ0VTKSBmZmljb25maWcuaC5pbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBmZmljb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCiAJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCiAJICBkb25lIHwgXAotCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCi0JICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCi0JdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCiAJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCi0JICAgICAkJHRhZ3MgJCR1bmlxdWUKKwkgICAgICQkdW5pcXVlCiAKIEdUQUdTOgogCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCi0JICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisJICAmJiAkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICIkJGhlcmUiCiAKIGRpc3RjbGVhbi10YWdzOgogCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCiAKIGRpc3RkaXI6ICQoRElTVEZJTEVTKQogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQotCXRlc3QgLWQgJChkaXN0ZGlyKSB8fCBta2RpciAkKGRpc3RkaXIpCisJdGVzdCAtZCAiJChkaXN0ZGlyKSIgfHwgbWtkaXIgIiQoZGlzdGRpcikiCiAJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAogCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKIAlsaXN0PSckKERJU1RGSUxFUyknOyBcCkBAIC0xMjc3LDI5ICsxMzc4LDQ0IEBACiAJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCiAJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAogCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAotCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKLQkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCiAJICAgIGZpOyBcCi0JICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCiAJICBlbHNlIFwKLQkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCi0JICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAogCSAgICB8fCBleGl0IDE7IFwKIAkgIGZpOyBcCiAJZG9uZQotCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJQGxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAogCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCiAJICAgIHx8ICQoTUtESVJfUCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKIAkgICAgfHwgZXhpdCAxOyBcCi0JICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKLQkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCi0JICAgIChjZCAkJHN1YmRpciAmJiBcCisJICBmaTsgXAorCWRvbmUKKwlAbGlzdD0nJChESVNUX1NVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9IC47IHRoZW4gOjsgZWxzZSBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQoZGlzdGRpcikvJCRzdWJkaXIiOyBcCisJICAgICQoYW1fX3JlbGF0aXZpemUpOyBcCisJICAgIG5ld19kaXN0ZGlyPSQkcmVsZGlyOyBcCisJICAgIGRpcjE9JCRzdWJkaXI7IGRpcjI9IiQodG9wX2Rpc3RkaXIpIjsgXAorCSAgICAkKGFtX19yZWxhdGl2aXplKTsgXAorCSAgICBuZXdfdG9wX2Rpc3RkaXI9JCRyZWxkaXI7IFwKKwkgICAgZWNobyAiIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0b3BfZGlzdGRpcj0iJCRuZXdfdG9wX2Rpc3RkaXIiIGRpc3RkaXI9IiQkbmV3X2Rpc3RkaXIiIFxcIjsgXAorCSAgICBlY2hvICIgICAgIGFtX19yZW1vdmVfZGlzdGRpcj06IGFtX19za2lwX2xlbmd0aF9jaGVjaz06IGFtX19za2lwX21vZGVfZml4PTogZGlzdGRpcikiOyBcCisJICAgICgkKGFtX19jZCkgJCRzdWJkaXIgJiYgXAogCSAgICAgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKLQkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJHRvcF9kaXN0ZGlyIiBcCi0JICAgICAgICBkaXN0ZGlyPSIkJGRpc3RkaXIvJCRzdWJkaXIiIFwKKwkgICAgICAgIHRvcF9kaXN0ZGlyPSIkJG5ld190b3BfZGlzdGRpciIgXAorCSAgICAgICAgZGlzdGRpcj0iJCRuZXdfZGlzdGRpciIgXAogCQlhbV9fcmVtb3ZlX2Rpc3RkaXI9OiBcCiAJCWFtX19za2lwX2xlbmd0aF9jaGVjaz06IFwKKwkJYW1fX3NraXBfbW9kZV9maXg9OiBcCiAJICAgICAgICBkaXN0ZGlyKSBcCiAJICAgICAgfHwgZXhpdCAxOyBcCiAJICBmaTsgXApAQCAtMTMwNywxMSArMTQyMywxMiBAQAogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKIAkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAogCSAgZGlzdC1pbmZvCi0JLWZpbmQgJChkaXN0ZGlyKSAtdHlwZSBkICEgLXBlcm0gLTc3NyAtZXhlYyBjaG1vZCBhK3J3eCB7fSBcOyAtbyBcCisJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCisJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NzcgLWV4ZWMgY2htb2QgYStyd3gge30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAogCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCi0JfHwgY2htb2QgLVIgYStyICQoZGlzdGRpcikKKwl8fCBjaG1vZCAtUiBhK3IgIiQoZGlzdGRpcikiCiBkaXN0LWd6aXA6IGRpc3RkaXIKIAl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negogCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQpAQCAtMTMyMCw2ICsxNDM3LDE0IEBACiAJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKIAkkKGFtX19yZW1vdmVfZGlzdGRpcikKIAorZGlzdC1sem1hOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGx6bWEgLTkgLWMgPiQoZGlzdGRpcikudGFyLmx6bWEKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC14ejogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCB4eiAtYyA+JChkaXN0ZGlyKS50YXIueHoKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwogZGlzdC10YXJaOiBkaXN0ZGlyCiAJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCiAJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCkBAIC0xMzQ2LDYgKzE0NzEsMTAgQEAKIAkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAogCSoudGFyLmJ6MiopIFwKIAkgIGJ1bnppcDIgLWMgJChkaXN0ZGlyKS50YXIuYnoyIHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmx6bWEqKSBcCisJICB1bmx6bWEgLWMgJChkaXN0ZGlyKS50YXIubHptYSB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKIAkqLnRhci5aKikgXAogCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAogCSouc2hhci5neiopIFwKQEAgLTEzNTcsOSArMTQ4NiwxMSBAQAogCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCiAJbWtkaXIgJChkaXN0ZGlyKS9faW5zdAogCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKIAlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKIAkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAotCSAgJiYgY2QgJChkaXN0ZGlyKS9fYnVpbGQgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQgXAogCSAgJiYgLi4vY29uZmlndXJlIC0tc3JjZGlyPS4uIC0tcHJlZml4PSIkJGRjX2luc3RhbGxfYmFzZSIgXAogCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKIAkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKQEAgLTEzODEsMTMgKzE1MTIsMTUgQEAKIAkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCiAJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKIAkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKLQkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjayBcCisJICAmJiBjZCAiJCRhbV9fY3dkIiBcCisJICB8fCBleGl0IDEKIAkkKGFtX19yZW1vdmVfZGlzdGRpcikKIAlAKGVjaG8gIiQoZGlzdGRpcikgYXJjaGl2ZXMgcmVhZHkgZm9yIGRpc3RyaWJ1dGlvbjogIjsgXAogCSAgbGlzdD0nJChESVNUX0FSQ0hJVkVTKSc7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAkJGk7IGRvbmUpIHwgXAogCSAgc2VkIC1lIDFoIC1lIDFzLy4vPS9nIC1lIDFwIC1lIDF4IC1lICckJHAnIC1lICckJHgnCiBkaXN0dW5pbnN0YWxsY2hlY2s6Ci0JQGNkICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpcikgXAorCUAkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIFwKIAkmJiB0ZXN0IGAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1sZSAxIFwKIAkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAogCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXApAQCAtMTQzMiw2ICsxNTY1LDcgQEAKIAogZGlzdGNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCiAJLXJtIC1mIGRvYy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTQzOSw2ICsxNTczLDggQEAKIAktcm0gLWYgc3JjL2FscGhhLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXJtLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL2FybS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2F2cjMyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2F2cjMyLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvY3Jpcy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9jcmlzLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvZnJ2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE0NzEsMTIgKzE2MDcsMTIgQEAKIAlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCiBjbGVhbjogY2xlYW4tcmVjdXJzaXZlCiAKLWNsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgXAotCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIG1vc3RseWNsZWFuLWFtCitjbGVhbi1hbTogY2xlYW4tYW1pbmZvIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgbW9zdGx5Y2xlYW4tYW0KIAogZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCiAJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hbHBoYS8kKERFUERJUikgc3JjL2FybS8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQorCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2NyaXMvJChERVBESVIpIHNyYy9mcnYvJChERVBESVIpIHNyYy9pYTY0LyQoREVQRElSKSBzcmMvbTMyci8kKERFUERJUikgc3JjL202OGsvJChERVBESVIpIHNyYy9taXBzLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMveDg2LyQoREVQRElSKQogCS1ybSAtZiBNYWtlZmlsZQogZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCiAJZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncwpAQCAtMTUwMCwzNyArMTYzNiw0NSBAQAogaW5zdGFsbC1kdmktYW06ICQoRFZJUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGR2aWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGR2aWRpcikiCi0JQGxpc3Q9JyQoRFZJUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChEVklTKSc7IHRlc3QgLW4gIiQoZHZpZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRkJCRwJyAnJChERVNURElSKSQoZHZpZGlyKS8kJGYnIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiICIkKERFU1RESVIpJChkdmlkaXIpLyQkZiI7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGR2aWRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGR2aWRpcikiIHx8IGV4aXQgJCQ/OyBcCiAJZG9uZQogaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCiAKIGluc3RhbGwtaHRtbC1hbTogJChIVE1MUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKGh0bWxkaXIpIiB8fCAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKSIKLQlAbGlzdD0nJChIVE1MUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChIVE1MUyknOyBsaXN0Mj07IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiIHx8IHRlc3QgLWQgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCiAJICBpZiB0ZXN0IC1kICIkJGQkJHAiOyB0aGVuIFwKIAkgICAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGh0bWxkaXIpLyQkZiciOyBcCiAJICAgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiIgfHwgZXhpdCAxOyBcCiAJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcvKiAnJChERVNURElSKSQoaHRtbGRpcikvJCRmJyI7IFwKLQkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiLyogIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiLyogIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiIgfHwgZXhpdCAkJD87IFwKIAkgIGVsc2UgXAotCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChodG1sZGlyKS8kJGYnIjsgXAotCSAgICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKGh0bWxkaXIpLyQkZiI7IFwKKwkgICAgbGlzdDI9IiQkbGlzdDIgJCRkJCRwIjsgXAogCSAgZmk7IFwKLQlkb25lCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgZWNobyAiJCRsaXN0MiIgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQoaHRtbGRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGh0bWxkaXIpIiB8fCBleGl0ICQkPzsgXAorCWRvbmU7IH0KIGluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQogCiBpbnN0YWxsLWluZm8tYW06ICQoSU5GT19ERVBTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQoaW5mb2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluZm9kaXIpIgogCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCi0JbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCWxpc3Q9JyQoSU5GT19ERVBTKSc7IHRlc3QgLW4gIiQoaW5mb2RpcikiIHx8IGxpc3Q9OyBcCiAJZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCiAJICBjYXNlICQkZmlsZSBpbiBcCiAJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCkBAIC0xNTM4LDE4ICsxNjgyLDE5IEBACiAJICBpZiB0ZXN0IC1mICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCiAJICBmaWxlX2k9YGVjaG8gIiQkZmlsZSIgfCBzZWQgJ3N8XC5pbmZvJCR8fDtzfCQkfC5pfCdgOyBcCiAJICBmb3IgaWZpbGUgaW4gJCRkLyQkZmlsZSAkJGQvJCRmaWxlLVswLTldICQkZC8kJGZpbGUtWzAtOV1bMC05XSBcCi0gICAgICAgICAgICAgICAgICAgICAgICQkZC8kJGZpbGVfaVswLTldICQkZC8kJGZpbGVfaVswLTldWzAtOV0gOyBkbyBcCisJICAgICAgICAgICAgICAgJCRkLyQkZmlsZV9pWzAtOV0gJCRkLyQkZmlsZV9pWzAtOV1bMC05XSA7IGRvIFwKIAkgICAgaWYgdGVzdCAtZiAkJGlmaWxlOyB0aGVuIFwKLQkgICAgICByZWxmaWxlPWBlY2hvICIkJGlmaWxlIiB8IHNlZCAnc3xeLiovfHwnYDsgXAotCSAgICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkaWZpbGUnICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjsgXAotCSAgICAgICQoSU5TVEFMTF9EQVRBKSAiJCRpZmlsZSIgIiQoREVTVERJUikkKGluZm9kaXIpLyQkcmVsZmlsZSI7IFwKKwkgICAgICBlY2hvICIkJGlmaWxlIjsgXAogCSAgICBlbHNlIDogOyBmaTsgXAogCSAgZG9uZTsgXAotCWRvbmUKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGluZm9kaXIpJyI7IFwKKwkgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmZvZGlyKSIgfHwgZXhpdCAkJD87IGRvbmUKIAlAJChQT1NUX0lOU1RBTEwpCiAJQGlmIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uICYmIFwKIAkgICAgIGluc3RhbGwtaW5mbyAtLXZlcnNpb24gMj4mMSB8IHNlZCAxcSB8IGdyZXAgLWkgLXYgZGViaWFuKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gXAotCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgXAorCSAgbGlzdD0nJChJTkZPX0RFUFMpJzsgdGVzdCAtbiAiJChpbmZvZGlyKSIgfHwgbGlzdD07IFwKIAkgIGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAogCSAgICByZWxmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICdzfF4uKi98fCdgOyBcCiAJICAgIGVjaG8gIiBpbnN0YWxsLWluZm8gLS1pbmZvLWRpcj0nJChERVNURElSKSQoaW5mb2RpciknICckKERFU1RESVIpJChpbmZvZGlyKS8kJHJlbGZpbGUnIjtcCkBAIC0xNTYxLDI5ICsxNzA2LDMzIEBACiBpbnN0YWxsLXBkZi1hbTogJChQREZTKQogCUAkKE5PUk1BTF9JTlNUQUxMKQogCXRlc3QgLXogIiQocGRmZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocGRmZGlyKSIKLQlAbGlzdD0nJChQREZTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCUBsaXN0PSckKFBERlMpJzsgdGVzdCAtbiAiJChwZGZkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAogCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGY9JChhbV9fc3RyaXBfZGlyKSBcCi0JICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICckJGQkJHAnICckKERFU1RESVIpJChwZGZkaXIpLyQkZiciOyBcCi0JICAkKElOU1RBTExfREFUQSkgIiQkZCQkcCIgIiQoREVTVERJUikkKHBkZmRpcikvJCRmIjsgXAotCWRvbmUKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBkZmRpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKHBkZmRpcikiIHx8IGV4aXQgJCQ/OyBkb25lCiBpbnN0YWxsLXBzOiBpbnN0YWxsLXBzLXJlY3Vyc2l2ZQogCiBpbnN0YWxsLXBzLWFtOiAkKFBTUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAl0ZXN0IC16ICIkKHBzZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQocHNkaXIpIgotCUBsaXN0PSckKFBTUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChQU1MpJzsgdGVzdCAtbiAiJChwc2RpcikiIHx8IGxpc3Q9OyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCiAJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZCQkcCcgJyQoREVTVERJUikkKHBzZGlyKS8kJGYnIjsgXAotCSAgJChJTlNUQUxMX0RBVEEpICIkJGQkJHAiICIkKERFU1RESVIpJChwc2RpcikvJCRmIjsgXAotCWRvbmUKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKHBzZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocHNkaXIpIiB8fCBleGl0ICQkPzsgZG9uZQogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQogCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQogCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQotCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikKKwktcm0gLXJmIHNyYy8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbWlwcy8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikKIAktcm0gLWYgTWFrZWZpbGUKIG1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCiAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tdnRpCkBAIC0xNjA1LDM2ICsxNzU0LDM4IEBACiAJdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wZGYtYW0gXAogCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbQogCi0uTUFLRTogJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgJChSRUNVUlNJVkVfVEFSR0VUUykgaW5zdGFsbC1hbSBcCi0JaW5zdGFsbC1zdHJpcAorLk1BS0U6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIGFsbCBcCisJY3RhZ3MtcmVjdXJzaXZlIGluc3RhbGwtYW0gaW5zdGFsbC1zdHJpcCB0YWdzLXJlY3Vyc2l2ZQogCiAuUEhPTlk6ICQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFMpICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIFwKLQlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0TFRMSUJSQVJJRVMgXAotCWN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIFwKLQlkaXN0LWluZm8gZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXppcCBkaXN0Y2hlY2sgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0Y2xlYW5jaGVjayBkaXN0ZGlyIFwKLQlkaXN0dW5pbnN0YWxsY2hlY2sgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIFwKLQlpbnN0YWxsLWxpYkxUTElCUkFSSUVTIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIFwKLQlpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgaW5zdGFsbC1wcyBpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tYW1pbmZvIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kdmktYW0gXAotCXVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCi0JdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSB1bmluc3RhbGwtcHMtYW0KKwlhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWFtaW5mbyBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwljbGVhbi1ub2luc3RMVExJQlJBUklFUyBjdGFncyBjdGFncy1yZWN1cnNpdmUgZGlzdCBkaXN0LWFsbCBcCisJZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1pbmZvIGRpc3QtbHptYSBkaXN0LXNoYXIgZGlzdC10YXJaIFwKKwlkaXN0LXh6IGRpc3QtemlwIGRpc3RjaGVjayBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgXAorCWRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2djb25maWdEQVRBIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgXAorCWluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBpbnN0YWxsZGlycy1hbSBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWFtaW5mbyBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1haW50YWluZXItY2xlYW4tdnRpIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWFtaW5mbyBcCisJbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXZ0aSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWR2aS1hbSB1bmluc3RhbGwtaHRtbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0gdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC1wZGYtYW0gXAorCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbQogCiAKICMgTm8gaW5zdGFsbC1odG1sIG9yIGluc3RhbGwtcGRmIHN1cHBvcnQgaW4gYXV0b21ha2UgeWV0CiAuUEhPTlk6IGluc3RhbGwtaHRtbCBpbnN0YWxsLXBkZgogaW5zdGFsbC1odG1sOgogaW5zdGFsbC1wZGY6CisKICMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCiAjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KIC5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvUkVBRE1FIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKaW5kZXggYTkzNjk2Mi4uMTY3ZGU0MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUKQEAgLTEsNyArMSw3IEBACiBTdGF0dXMKID09PT09PQogCi1saWJmZmktMy4wLjUgd2FzIHJlbGVhc2VkIG9uIEFwcmlsIDMsIDIwMDguIENoZWNrIHRoZSBsaWJmZmkgd2ViCitsaWJmZmktMy4wLjEwIHdhcyByZWxlYXNlZCBvbiBYWFhYWFhYWFhYLCAyMDEwLiBDaGVjayB0aGUgbGliZmZpIHdlYgogcGFnZSBmb3IgdXBkYXRlczogPFVSTDpodHRwOi8vc291cmNld2FyZS5vcmcvbGliZmZpLz4uCiAKIApAQCAtOSwyNyArOSwyNyBAQAogPT09PT09PT09PT09PT09CiAKIENvbXBpbGVycyBmb3IgaGlnaCBsZXZlbCBsYW5ndWFnZXMgZ2VuZXJhdGUgY29kZSB0aGF0IGZvbGxvdyBjZXJ0YWluCi1jb252ZW50aW9ucy4gIFRoZXNlIGNvbnZlbnRpb25zIGFyZSBuZWNlc3NhcnksIGluIHBhcnQsIGZvciBzZXBhcmF0ZQotY29tcGlsYXRpb24gdG8gd29yay4gIE9uZSBzdWNoIGNvbnZlbnRpb24gaXMgdGhlICJjYWxsaW5nIGNvbnZlbnRpb24iLgotVGhlICJjYWxsaW5nIGNvbnZlbnRpb24iIGlzIGEgc2V0IG9mIGFzc3VtcHRpb25zIG1hZGUgYnkgdGhlIGNvbXBpbGVyCi1hYm91dCB3aGVyZSBmdW5jdGlvbiBhcmd1bWVudHMgd2lsbCBiZSBmb3VuZCBvbiBlbnRyeSB0byBhIGZ1bmN0aW9uLgotQSAiY2FsbGluZyBjb252ZW50aW9uIiBhbHNvIHNwZWNpZmllcyB3aGVyZSB0aGUgcmV0dXJuIHZhbHVlIGZvciBhCi1mdW5jdGlvbiBpcyBmb3VuZC4KK2NvbnZlbnRpb25zLiBUaGVzZSBjb252ZW50aW9ucyBhcmUgbmVjZXNzYXJ5LCBpbiBwYXJ0LCBmb3Igc2VwYXJhdGUKK2NvbXBpbGF0aW9uIHRvIHdvcmsuIE9uZSBzdWNoIGNvbnZlbnRpb24gaXMgdGhlICJjYWxsaW5nCitjb252ZW50aW9uIi4gVGhlICJjYWxsaW5nIGNvbnZlbnRpb24iIGlzIGVzc2VudGlhbGx5IGEgc2V0IG9mCithc3N1bXB0aW9ucyBtYWRlIGJ5IHRoZSBjb21waWxlciBhYm91dCB3aGVyZSBmdW5jdGlvbiBhcmd1bWVudHMgd2lsbAorYmUgZm91bmQgb24gZW50cnkgdG8gYSBmdW5jdGlvbi4gQSAiY2FsbGluZyBjb252ZW50aW9uIiBhbHNvIHNwZWNpZmllcword2hlcmUgdGhlIHJldHVybiB2YWx1ZSBmb3IgYSBmdW5jdGlvbiBpcyBmb3VuZC4KIAogU29tZSBwcm9ncmFtcyBtYXkgbm90IGtub3cgYXQgdGhlIHRpbWUgb2YgY29tcGlsYXRpb24gd2hhdCBhcmd1bWVudHMKLWFyZSB0byBiZSBwYXNzZWQgdG8gYSBmdW5jdGlvbi4gIEZvciBpbnN0YW5jZSwgYW4gaW50ZXJwcmV0ZXIgbWF5IGJlCithcmUgdG8gYmUgcGFzc2VkIHRvIGEgZnVuY3Rpb24uIEZvciBpbnN0YW5jZSwgYW4gaW50ZXJwcmV0ZXIgbWF5IGJlCiB0b2xkIGF0IHJ1bi10aW1lIGFib3V0IHRoZSBudW1iZXIgYW5kIHR5cGVzIG9mIGFyZ3VtZW50cyB1c2VkIHRvIGNhbGwKLWEgZ2l2ZW4gZnVuY3Rpb24uICBMaWJmZmkgY2FuIGJlIHVzZWQgaW4gc3VjaCBwcm9ncmFtcyB0byBwcm92aWRlIGEKK2EgZ2l2ZW4gZnVuY3Rpb24uIExpYmZmaSBjYW4gYmUgdXNlZCBpbiBzdWNoIHByb2dyYW1zIHRvIHByb3ZpZGUgYQogYnJpZGdlIGZyb20gdGhlIGludGVycHJldGVyIHByb2dyYW0gdG8gY29tcGlsZWQgY29kZS4KIAogVGhlIGxpYmZmaSBsaWJyYXJ5IHByb3ZpZGVzIGEgcG9ydGFibGUsIGhpZ2ggbGV2ZWwgcHJvZ3JhbW1pbmcKLWludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgY29udmVudGlvbnMuICBUaGlzIGFsbG93cyBhIHByb2dyYW1tZXIgdG8KK2ludGVyZmFjZSB0byB2YXJpb3VzIGNhbGxpbmcgY29udmVudGlvbnMuIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0bwogY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuCi10aW1lLgordGltZS4gIAogCiBGRkkgc3RhbmRzIGZvciBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZS4gIEEgZm9yZWlnbiBmdW5jdGlvbgogaW50ZXJmYWNlIGlzIHRoZSBwb3B1bGFyIG5hbWUgZm9yIHRoZSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgY29kZQotd3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gIFRoZQord3JpdHRlbiBpbiBvbmUgbGFuZ3VhZ2UgdG8gY2FsbCBjb2RlIHdyaXR0ZW4gaW4gYW5vdGhlciBsYW5ndWFnZS4gVGhlCiBsaWJmZmkgbGlicmFyeSByZWFsbHkgb25seSBwcm92aWRlcyB0aGUgbG93ZXN0LCBtYWNoaW5lIGRlcGVuZGVudAogbGF5ZXIgb2YgYSBmdWxseSBmZWF0dXJlZCBmb3JlaWduIGZ1bmN0aW9uIGludGVyZmFjZS4gQSBsYXllciBtdXN0CiBleGlzdCBhYm92ZSBsaWJmZmkgdGhhdCBoYW5kbGVzIHR5cGUgY29udmVyc2lvbnMgZm9yIHZhbHVlcyBwYXNzZWQKQEAgLTM5LDM2ICszOSw1OCBAQAogU3VwcG9ydGVkIFBsYXRmb3JtcwogPT09PT09PT09PT09PT09PT09PQogCi1MaWJmZmkgaGFzIGJlZW4gcG9ydGVkIHRvIG1hbnkgZGlmZmVyZW50IHBsYXRmb3JtcywgYWx0aG91Z2ggdGhpcwotcmVsZWFzZSB3YXMgb25seSB0ZXN0ZWQgb246CitMaWJmZmkgaGFzIGJlZW4gcG9ydGVkIHRvIG1hbnkgZGlmZmVyZW50IHBsYXRmb3Jtcy4KK0ZvciBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGRldGFpbHMgYW5kIHRlc3Rpbmcgc3RhdHVzLCBwbGVhc2UKK3JlZmVyIHRvIHRoZSB3aWtpIHBhZ2UgaGVyZToKIAotICAgICBhcm0gb2FiaSBsaW51eAotICAgICBhcm0gZWFiaSBsaW51eAotICAgICBocHBhIGxpbnV4Ci0gICAgIG1pcHMgbzMyIGxpbnV4IChsaXR0bGUgZW5kaWFuKQotICAgICBwb3dlcnBjIGRhcndpbgotICAgICBwb3dlcnBjNjQgbGludXgKLSAgICAgc3BhcmMgc29sYXJpcwotICAgICBzcGFyYzY0IHNvbGFyaXMKLSAgICAgeDg2IGN5Z3dpbgotICAgICB4ODYgZGFyd2luCi0gICAgIHg4NiBmcmVlYnNkCi0gICAgIHg4NiBsaW51eAotICAgICB4ODYgb3BlbmJzZAotICAgICB4ODYtNjQgZGFyd2luCi0gICAgIHg4Ni02NCBsaW51eAotICAgICB4ODYtNjQgT1MgWAotICAgICB4ODYtNjQgZnJlZWJzZAotICAgICAKKyBodHRwOi8vd3d3Lm1veGllbG9naWMub3JnL3dpa2kvaW5kZXgucGhwP3RpdGxlPUxpYmZmaV8zLjAuMTAKKworQXQgdGhlIHRpbWUgb2YgcmVsZWFzZSwgdGhlIGZvbGxvd2luZyBiYXNpYyBjb25maWd1cmF0aW9ucyBoYXZlIGJlZW4KK3Rlc3RlZDoKKworfC0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLXwKK3wgQXJjaGl0ZWN0dXJlIHwgT3BlcmF0aW5nIFN5c3RlbSB8Cit8LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBBbHBoYSAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgQWxwaGEgICAgICAgIHwgVHJ1NjQgICAgICAgICAgICB8Cit8IEFSTSAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBBVlIzMiAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgSFBQQSAgICAgICAgIHwgSFBVWCAgICAgICAgICAgICB8Cit8IElBLTY0ICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBNSVBTICAgICAgICAgfCBJUklYICAgICAgICAgICAgIHwKK3wgTUlQUyAgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IE1JUFM2NCAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBQb3dlclBDICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgUG93ZXJQQyAgICAgIHwgTWFjIE9TWCAgICAgICAgICB8Cit8IFBvd2VyUEMgICAgICB8IEZyZWVCU0QgICAgICAgICAgfAorfCBQb3dlclBDNjQgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgUzM5MCAgICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFMzOTBYICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTUEFSQyAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgU1BBUkMgICAgICAgIHwgU29sYXJpcyAgICAgICAgICB8Cit8IFNQQVJDNjQgICAgICB8IExpbnV4ICAgICAgICAgICAgfAorfCBTUEFSQzY0ICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgRnJlZUJTRCAgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IGtGcmVlQlNEICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgTWFjIE9TWCAgICAgICAgICB8Cit8IFg4NiAgICAgICAgICB8IE9wZW5CU0QgICAgICAgICAgfAorfCBYODYgICAgICAgICAgfCBTb2xhcmlzICAgICAgICAgIHwKK3wgWDg2ICAgICAgICAgIHwgV2luZG93cy9DeWd3aW4gICB8Cit8IFg4NiAgICAgICAgICB8IFdpbmRvd3MvTWluZ1cgICAgfAorfCBYODYtNjQgICAgICAgfCBGcmVlQlNEICAgICAgICAgIHwKK3wgWDg2LTY0ICAgICAgIHwgTGludXggICAgICAgICAgICB8Cit8IFg4Ni02NCAgICAgICB8IE9wZW5CU0QgICAgICAgICAgfAorfCBYODYtNjQgICAgICAgfCBXaW5kb3dzL01pbmdXICAgIHwKK3wtLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS18CisKIFBsZWFzZSBzZW5kIGFkZGl0aW9uYWwgcGxhdGZvcm0gdGVzdCByZXN1bHRzIHRvCi1saWJmZmktZGlzY3Vzc0Bzb3VyY2V3YXJlLm9yZy4KK2xpYmZmaS1kaXNjdXNzQHNvdXJjZXdhcmUub3JnIGFuZCBmZWVsIGZyZWUgdG8gdXBkYXRlIHRoZSB3aWtpIHBhZ2UKK2Fib3ZlLgogCiBJbnN0YWxsaW5nIGxpYmZmaQogPT09PT09PT09PT09PT09PT0KIAotW05vdGU6IGJlZm9yZSBhY3R1YWxseSBwZXJmb3JtaW5nIGFueSBvZiB0aGVzZSBpbnN0YWxsYXRpb24gc3RlcHMsCi0geW91IG1heSB3aXNoIHRvIHJlYWQgdGhlICJQbGF0Zm9ybSBTcGVjaWZpYyBOb3RlcyIgYmVsb3cuXQotCiBGaXJzdCB5b3UgbXVzdCBjb25maWd1cmUgdGhlIGRpc3RyaWJ1dGlvbiBmb3IgeW91ciBwYXJ0aWN1bGFyCiBzeXN0ZW0uIEdvIHRvIHRoZSBkaXJlY3RvcnkgeW91IHdpc2ggdG8gYnVpbGQgbGliZmZpIGluIGFuZCBydW4gdGhlCiAiY29uZmlndXJlIiBwcm9ncmFtIGZvdW5kIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgbGliZmZpIHNvdXJjZQpAQCAtODcsNiArMTA5LDE0IEBACiBhcmUgdXNpbmcgUHVyaWZ5IHdpdGggbGliZmZpLiBPbmx5IHVzZSB0aGlzIHN3aXRjaCB3aGVuIHVzaW5nIAogUHVyaWZ5LCBhcyBpdCB3aWxsIHNsb3cgZG93biB0aGUgbGlicmFyeS4KIAorSXQncyBhbHNvIHBvc3NpYmxlIHRvIGJ1aWxkIGxpYmZmaSBvbiBXaW5kb3dzIHBsYXRmb3JtcyB3aXRoCitNaWNyb3NvZnQncyBWaXN1YWwgQysrIGNvbXBpbGVyLiAgSW4gdGhpcyBjYXNlLCB1c2UgdGhlIG1zdmNjLnNoCit3cmFwcGVyIHNjcmlwdCBkdXJpbmcgY29uZmlndXJhdGlvbiBsaWtlIHNvOgorCitwYXRoL3RvL2NvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQgLS1lbmFibGUtc3RhdGljIFwKKwlDQz1wYXRoL3RvL21zdmNjLnNoIExEPWxpbmsgXAorCUNQUD1cImNsIC1ub2xvZ28gLUVQXCIKKwogQ29uZmlndXJlIGhhcyBtYW55IG90aGVyIG9wdGlvbnMuIFVzZSAiY29uZmlndXJlIC0taGVscCIgdG8gc2VlIHRoZW0gYWxsLgogCiBPbmNlIGNvbmZpZ3VyZSBoYXMgZmluaXNoZWQsIHR5cGUgIm1ha2UiLiBOb3RlIHRoYXQgeW91IG11c3QgYmUgdXNpbmcKQEAgLTk4LDY2ICsxMjgsMzUgQEAKIFRvIGluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcywgdHlwZSAibWFrZSBpbnN0YWxsIi4KIAogCi1QbGF0Zm9ybSBTcGVjaWZpYyBOb3RlcwotPT09PT09PT09PT09PT09PT09PT09PT0KLQotCU1JUFMgLSBJcml4IDUuMyAmIDYueAotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Jcml4IDYuMiBhbmQgYmV0dGVyIHN1cHBvcnRzIHRocmVlIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zOiBvMzIsCi1uMzIgYW5kIG42NC4gQ3VycmVudGx5LCBsaWJmZmkgb25seSBzdXBwb3J0cyBib3RoIG8zMiBhbmQgbjMyIHVuZGVyCi1Jcml4IDYueCwgYnV0IG9ubHkgbzMyIHVuZGVyIElyaXggNS4zLiBMaWJmZmkgd2lsbCBhdXRvbWF0aWNhbGx5IGJlCi1jb25maWd1cmVkIGZvciB3aGljaGV2ZXIgY2FsbGluZyBjb252ZW50aW9uIGl0IHdhcyBidWlsdCBmb3IuCi0KLUJ5IGRlZmF1bHQsIHRoZSBjb25maWd1cmUgc2NyaXB0IHdpbGwgdHJ5IHRvIGJ1aWxkIGxpYmZmaSB3aXRoIHRoZSBHTlUKLWRldmVsb3BtZW50IHRvb2xzLiBUbyBidWlsZCBsaWJmZmkgd2l0aCB0aGUgU0dJIGRldmVsb3BtZW50IHRvb2xzLCBzZXQKLXRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBDQyB0byBlaXRoZXIgImNjIC0zMiIgb3IgImNjIC1uMzIiIGJlZm9yZQotcnVubmluZyBjb25maWd1cmUgdW5kZXIgSXJpeCA2LnggKGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSB3YW50IGFuIG8zMgotb3IgbjMyIGxpYnJhcnkpLCBvciBqdXN0ICJjYyIgZm9yIElyaXggNS4zLgotCi1XaXRoIHRoZSBuMzIgY2FsbGluZyBjb252ZW50aW9uLCB3aGVuIHJldHVybmluZyBzdHJ1Y3R1cmVzIHNtYWxsZXIKLXRoYW4gMTYgYnl0ZXMsIGJlIHN1cmUgdG8gcHJvdmlkZSBhbiBSVkFMVUUgdGhhdCBpcyA4IGJ5dGUgYWxpZ25lZC4KLUhlcmUncyBvbmUgd2F5IG9mIGZvcmNpbmcgdGhpczoKLQotCWRvdWJsZSBzdHJ1Y3Rfc3RvcmFnZVsyXTsKLQlteV9zbWFsbF9zdHJ1Y3QgKnMgPSAobXlfc21hbGxfc3RydWN0ICopIHN0cnVjdF9zdG9yYWdlOyAgCi0JLyogVXNlIHMgZm9yIFJWQUxVRSAqLwotCi1JZiB5b3UgZG9uJ3QgZG8gdGhpcyB5b3UgYXJlIGxpYWJsZSB0byBnZXQgc3B1cmlvdXMgYnVzIGVycm9ycy4gCi0KLSJsb25nIGxvbmciIHZhbHVlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCi0KLVlvdSBtdXN0IHVzZSBHTlUgTWFrZSB0byBidWlsZCBsaWJmZmkgb24gU0dJIHBsYXRmb3Jtcy4KLQotCi0JUG93ZXJQQyBTeXN0ZW0gViBBQkkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVyZSBhcmUgdHdvIGBTeXN0ZW0gViBBQkkncyB3aGljaCBsaWJmZmkgaW1wbGVtZW50cyBmb3IgUG93ZXJQQy4KLVRoZXkgZGlmZmVyIG9ubHkgaW4gaG93IHNtYWxsIHN0cnVjdHVyZXMgYXJlIHJldHVybmVkIGZyb20gZnVuY3Rpb25zLgotCi1JbiB0aGUgRkZJX1NZU1YgdmVyc2lvbiwgc3RydWN0dXJlcyB0aGF0IGFyZSA4IGJ5dGVzIG9yIHNtYWxsZXIgYXJlCi1yZXR1cm5lZCBpbiByZWdpc3RlcnMuICBUaGlzIGlzIHdoYXQgR0NDIGRvZXMgd2hlbiBpdCBpcyBjb25maWd1cmVkCi1mb3Igc29sYXJpcywgYW5kIGlzIHdoYXQgdGhlIFN5c3RlbSBWIEFCSSBJIGhhdmUgKGRhdGVkIFNlcHRlbWJlcgotMTk5NSkgc2F5cy4KLQotSW4gdGhlIEZGSV9HQ0NfU1lTViB2ZXJzaW9uLCBhbGwgc3RydWN0dXJlcyBhcmUgcmV0dXJuZWQgdGhlIHNhbWUgd2F5OgotYnkgcGFzc2luZyBhIHBvaW50ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbi4gIFRoaXMgaXMKLXdoYXQgR0NDIGRvZXMgd2hlbiBpdCBpcyBjb25maWd1cmVkIGZvciBsaW51eCBvciBhIGdlbmVyaWMgc3lzdgotdGFyZ2V0LgotCi1FR0NTIDEuMC4xIChhbmQgcHJvYmFibHkgb3RoZXIgdmVyc2lvbnMgb2YgRUdDUy9HQ0MpIGFsc28gaGFzIGEKLWluY29uc2lzdGVuY3kgd2l0aCB0aGUgU3lzViBBQkk6IFdoZW4gYSBwcm9jZWR1cmUgaXMgY2FsbGVkIHdpdGggbWFueQotZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLCBzb21lIG9mIHRoZW0gZ2V0IHB1dCBvbiB0aGUgc3RhY2suICBUaGV5IGFyZQotYWxsIHN1cHBvc2VkIHRvIGJlIHN0b3JlZCBpbiBkb3VibGUtcHJlY2lzaW9uIGZvcm1hdCwgZXZlbiBpZiB0aGV5IGFyZQotb25seSBzaW5nbGUtcHJlY2lzaW9uLCBidXQgRUdDUyBzdG9yZXMgc2luZ2xlLXByZWNpc2lvbiBhcmd1bWVudHMgYXMKLXNpbmdsZS1wcmVjaXNpb24gYW55d2F5LiAgVGhpcyBjYXVzZXMgb25lIHRlc3QgdG8gZmFpbCAodGhlIGBtYW55Ci1hcmd1bWVudHMnIHRlc3QpLgotCi0KIEhpc3RvcnkKID09PT09PT0KIAorU2VlIHRoZSBDaGFuZ2VMb2cgZmlsZXMgZm9yIGRldGFpbHMuCisKKzMuMC4xMCA/Pz8tPz8tPz8KKyAgICAgICAgRml4IHRoZSBONjQgYnVpbGQgb24gbWlwcy1zZ2ktaXJpeDYuNS4KKwlUZXN0c3VpdGUgZml4ZXMgZm9yIFRydTY0IFVuaXguCisJRW5hYmxlIGJ1aWxkcyB3aXRoIE1pY3Jvc29mdCdzIGNvbXBpbGVyLgorCUVuYWJsZSB4ODYgYnVpbGRzIHdpdGggU3VuJ3MgY29tcGlsZXIuCisKKzMuMC45IERlYy0zMS0wOQorICAgICAgICBBZGQgQVZSMzIgYW5kIHdpbjY0IHBvcnRzLiAgQWRkIEFSTSBzb2Z0ZnAgc3VwcG9ydC4KKwlNYW55IGZpeGVzIGZvciBBSVgsIFNvbGFyaXMsIEhQLVVYLCAqQlNELgorCVNldmVyYWwgUG93ZXJQQyBhbmQgeDg2LTY0IGJ1ZyBmaXhlcy4KKwlCdWlsZCBETEwgZm9yIHdpbmRvd3MuCisKKzMuMC44IERlYy0xOS0wOAorICAgICAgICBBZGQgKkJTRCwgQmVPUywgYW5kIFBBLUxpbnV4IHN1cHBvcnQuCisKKzMuMC43IE5vdi0xMS0wOAorICAgICAgICBGaXggZm9yIHBwYyBGcmVlQlNELgorCSh0aGFua3MgdG8gQW5kcmVhcyBUb2JsZXIpCisKKzMuMC42IEp1bC0xNy0wOAorICAgICAgICBGaXggZm9yIGNsb3N1cmVzIG9uIHNoLgorCU1hcmsgdGhlIHNoL3NoNjQgc3RhY2sgYXMgbm9uLWV4ZWN1dGFibGUuCisJKGJvdGggdGhhbmtzIHRvIEtheiBLb2ppbWEpCisKIDMuMC41IEFwci0zLTA4CiAgICAgICAgIEZpeCBsaWJmZmkucGMgZmlsZS4KIAlGaXggI2RlZmluZSBBUk0gZm9yIEljZWRUZWEgdXNlcnMuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKaW5kZXggNmIzODMyNC4uYzhlNTI2ZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNApAQCAtMSw3ICsxLDcgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjEwIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExLjEgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSMgMjAwNSwgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCkBAIC0xMSw2NTgwICsxMSwxNSBAQAogIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCiAjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KIAotbTRfaWYobTRfUEFDS0FHRV9WRVJTSU9OLCBbMi42MV0sLAotW200X2ZhdGFsKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42MS4KLVlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGF0LAoteW91IHNob3VsZCByZWdlbmVyYXRlIHRoZSBidWlsZCBzeXN0ZW0gZW50aXJlbHkuXSwgWzYzXSldKQorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42NV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY1LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSBgYXV0b3JlY29uZicuXSldKQogCi0jIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQotCi0jIHNlcmlhbCA1MSBBQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX1BST1ZJREVfSUZFTFNFKE1BQ1JPLU5BTUUsIElGLVBST1ZJREVELCBJRi1OT1QtUFJPVklERUQpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIHRoaXMgbWFjcm8gaXMgbm90IGRlZmluZWQgYnkgQXV0b2NvbmYsIGRlZmluZSBpdCBoZXJlLgotbTRfaWZkZWYoW0FDX1BST1ZJREVfSUZFTFNFXSwKLSAgICAgICAgIFtdLAotICAgICAgICAgW200X2RlZmluZShbQUNfUFJPVklERV9JRkVMU0VdLAotCSAgICAgICAgIFttNF9pZmRlZihbQUNfUFJPVklERV8kMV0sCi0JCSAgICAgICAgICAgWyQyXSwgWyQzXSldKV0pCi0KLQotIyBBQ19QUk9HX0xJQlRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtfQUNfUFJPR19MSUJUT09MXSlkbmwKLWRubCBJZiBBQ19QUk9HX0NYWCBoYXMgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLCBydW4gQUNfTElCVE9PTF9DWFgKLWRubCBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlLCBob29rIGl0IGluIGF0IHRoZSBlbmQgb2YgQUNfUFJPR19DWFguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gICAgW0FDX0xJQlRPT0xfQ1hYXSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0NYWF0sIGRlZm4oW0FDX1BST0dfQ1hYXSlbQUNfTElCVE9PTF9DWFgKLSAgXSldKQotZG5sIEFuZCBhIHNpbWlsYXIgc2V0dXAgZm9yIEZvcnRyYW4gNzcgc3VwcG9ydAotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GNzddLAotICAgIFtBQ19MSUJUT09MX0Y3N10sCi0gICAgW2RlZmluZShbQUNfUFJPR19GNzddLCBkZWZuKFtBQ19QUk9HX0Y3N10pW0FDX0xJQlRPT0xfRjc3Ci1dKV0pCi0KLWRubCBRdW90ZSBBXVtNX1BST0dfR0NKIHNvIHRoYXQgYWNsb2NhbCBkb2Vzbid0IGJyaW5nIGl0IGluIG5lZWRsZXNzbHkuCi1kbmwgSWYgZWl0aGVyIEFDX1BST0dfR0NKIG9yIEFdW01fUFJPR19HQ0ogaGF2ZSBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1bgotZG5sIEFDX0xJQlRPT0xfR0NKIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBib3RoLgotICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAotICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKLSAgICAgIFtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSwKLQlbQUNfTElCVE9PTF9HQ0pdLAotICAgICAgW2lmZGVmKFtBQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBQ19QUk9HX0dDSl0sIGRlZm4oW0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pCi0gICAgICAgaWZkZWYoW0FdW01fUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbTFRfQUNfUFJPR19HQ0pdLAotCSAgICAgW2RlZmluZShbTFRfQUNfUFJPR19HQ0pdLAotCQlkZWZuKFtMVF9BQ19QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKV0pXSkKLV0pXSkjIEFDX1BST0dfTElCVE9PTAotCi0KLSMgX0FDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0sCi1bQUNfUkVRVUlSRShbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9DWFhdKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfRjc3XSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0dDSl0pZG5sCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi1BQ19TVUJTVChMSUJUT09MKWRubAotCi0jIFByZXZlbnQgbXVsdGlwbGUgZXhwYW5zaW9uCi1kZWZpbmUoW0FDX1BST0dfTElCVE9PTF0sIFtdKQotXSkjIF9BQ19QUk9HX0xJQlRPT0wKLQotCi0jIEFDX0xJQlRPT0xfU0VUVVAKLSMgLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdLAotW0FDX1BSRVJFUSgyLjUwKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NIQVJFRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU1RBVElDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19MRF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTk1dKWRubAotCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAotQUNfUkVRVUlSRShbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKWRubAotIyBBdXRvY29uZiAyLjEzJ3MgQUNfT0JKRVhUIGFuZCBBQ19FWEVFWFQgbWFjcm9zIG9ubHkgd29ya3MgZm9yIEMgY29tcGlsZXJzIQotQUNfUkVRVUlSRShbQUNfT0JKRVhUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VYRUVYVF0pZG5sCi1kbmwKLQotQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLUFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotQUNfTElCVE9PTF9PQkpESVIKLQotQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCi1fTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSAxcy9eWC8vJwotW3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLVtkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgotCi1BQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCi0KLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKLQotIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Ci10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLXRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCi0KLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi1maQotCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLWZpbGVfbWFnaWMqKQotICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCi0gICAgQUNfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9ETE9QRU5dLCBlbmFibGVfZGxvcGVuPXllcywgZW5hYmxlX2Rsb3Blbj1ubykKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1lbmFibGVfd2luMzJfZGxsPXllcywgZW5hYmxlX3dpbjMyX2RsbD1ubykKLQotQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotQUNfQVJHX1dJVEgoW3BpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKLQlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAotICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9Ci1BQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLV9MVF9BQ19UQUdDT05GSUcKLV0pIyBBQ19MSUJUT09MX1NFVFVQCi0KLQotIyBfTFRfQUNfU1lTX0NPTVBJTEVSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotXSkjIF9MVF9BQ19TWVNfQ09NUElMRVIKLQotCi0jIF9MVF9DQ19CQVNFTkFNRShDQykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1BQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSwKLVtmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLV0pCi0KLQotIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi1BQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmldLFtdKQotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi1dKSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCi0KLSMgX0xUX0FDX1NIRUxMX0lOSVQoQVJHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdLAotW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwKLQkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCi0JIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKLSQxCi1BQ19ESVZFUlRfUE9QCi1dKSMgX0xUX0FDX1NIRUxMX0lOSVQKLQotCi0jIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAotIyB3aWxsIGZpbmQgYW4gZWNobyBjb21tYW5kIHdoaWNoIGRvZXNuJ3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwKLVtfTFRfQUNfU0hFTExfSU5JVChbCi0jIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi1jYXNlIFgkRUNITyBpbgotWCotLWZhbGxiYWNrLWVjaG8pCi0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCi0gIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKLSAgOzsKLWVzYWMKLQotZWNobz0ke0VDSE8tZWNob30KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCi0gIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCi0gIDoKLWVsc2UKLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgotICBleGVjICRTSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLWZpCi0KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KLSAgc2hpZnQKLSAgY2F0IDw8RU9GCi1bJF0qCi1FT0YKLSAgZXhpdCAwCi1maQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAyS2IsIDFLYiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKLQlleHBvcnQgQ09ORklHX1NIRUxMCi0JU0hFTEw9IiRDT05GSUdfU0hFTEwiCi0JZXhwb3J0IFNIRUxMCi0JZWNobz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbHNlCi0JIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KLQlwcmV2PToKLQotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFxbJF0wIC0tZmFsbGJhY2stZWNobyIKLWZpCi0KLUFDX1NVQlNUKEVDSE8pCi1dKV0pIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi0KLSMgX0xUX0FDX0xPQ0sKLSMgLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTE9DS10sCi1bQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqMzItYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLSAgICAgICAgICA7OwotICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTB4LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBsaWJzdWZmPTY0Ci0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkwKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCi0gICAgW0FDX0xBTkdfUFVTSChDKQotICAgICBBQ19UUllfTElOSyhbXSxbXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKLSAgICAgQUNfTEFOR19QT1BdKQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgotICBmaQotICA7Owotc3BhcmMqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKSAgICBMRD0iJHtMRC1sZH0gLTY0IiA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVsqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiopCi0gIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCi0gIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKLSAgOzsKLSAgXSkKLWVzYWMKLQotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLV0pIyBfTFRfQUNfTE9DSwotCi0KLSMgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgaWZlbHNlKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQotZmkKLV0pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICQyPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQ0XSwgLCA6LCBbJDRdKQotZWxzZQotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi1maQotXSkjIEFDX0xJQlRPT0xfTElOS0VSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sCi1bIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWyAJXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm9uZSkKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLQotCi0jIF9MVF9BQ19DSEVDS19ETEZDTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAotW0FDX0NIRUNLX0hFQURFUlMoZGxmY24uaClkbmwKLV0pIyBfTFRfQUNfQ0hFQ0tfRExGQ04KLQotCi0jIF9MVF9BQ19UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIFskNF0KLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICAgIGV4aXQgKHN0YXR1cyk7Ci19XQotRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICAkMwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLV0pIyBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGCi0KLQotIyBBQ19MSUJUT09MX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKWRubAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICA7OwotCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICBdKQotICAgOzsKLQotICAqKQotICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKLQkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSwKLQlbQUNfQ0hFQ0tfRlVOQyhbZGxvcGVuXSwKLQkgICAgICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iXSwKLQkgIFtBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCi0JCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSwKLQkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAotCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAotCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCi0JCSAgICBbbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiXSkKLQkgICAgICBdKQotCSAgICBdKQotCSAgXSkKLQldKQotICAgICAgXSkKLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KLSAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLSAgICAJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMsCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubywgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcykKLSAgICAgIF0pCi0gICAgZmkKLQotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DQ19DX08oW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgZWNobyAiJGFzX21lOl9fb2xpbmVfXzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAkcm0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRybSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRybSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICBybWRpciBjb25mdGVzdAotICAgJHJtIGNvbmZ0ZXN0KgotXSkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ0NfQ19PCi0KLQotIyBBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xPQ0tdKWRubAotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCi0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUwotCi0KLSMgQUNfTElCVE9PTF9PQkpESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKLVtybSAtZiAubGlicyAyPi9kZXYvbnVsbAotbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLmxpYnM7IHRoZW4KLSAgbHRfY3Zfb2JqZGlyPS5saWJzCi1lbHNlCi0gICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCi0gIGx0X2N2X29iamRpcj1fbGlicwotZmkKLXJtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi1dKSMgQUNfTElCVE9PTF9PQkpESVIKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLAotW0FDX01TR19DSEVDS0lORyhbaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtc10pCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQotaWYgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fCBcCi0gICB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fCBcCi0gICB0ZXN0ICJYJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAotZmkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKLQotaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotXSkjIEFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRICi0KLQotIyBBQ19MSUJUT09MX1NZU19MSUJfU1RSSVAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwKLVtzdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KLSAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKLSAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCi0gIEFDX01TR19SRVNVTFQoW3llc10pCi1lbHNlCi0jIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgZGFyd2luKikKLSAgICAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICAgICBlbHNlCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLWZpCi0gICAgICAgOzsKLSAgICopCi0gIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICA7OwotICBlc2FjCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotCi0KLSMgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUE9SVE1FIEZpbGwgaW4geW91ciBsZC5zbyBjaGFyYWN0ZXJpc3RpY3MKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3NdKQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1tNF9pZigkMSxbXSxbCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OwotICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7Ci0gIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgZmkKLSAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKLSAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuCi0gIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQotICBsdF9tdWx0aV9vc19kaXI9YCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAotICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsc2UKLSAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAotCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgotICAgIGZpCi0gIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJwotQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewotICBsdF9mb289IiI7Ci0gIGx0X2NvdW50PTA7Ci0gIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7Ci0gICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewotICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKLSAgICAgICAgbHRfY291bnQrKzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbHRfY291bnQtLTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KLSAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Ci19J2AKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF9zZWFyY2hfcGF0aF9zcGVjYAotZWxzZQotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi1maV0pCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotICBtNF9pZihbJDFdLCBbXSxbCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKSAKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKLSAgOzsKLQotb3MyKikKLSAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJwotICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIHZlcnNpb25fdHlwZT1vc2YKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCi0gIDs7Ci0KLXJkb3MqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1zb2xhcmlzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJwotICA7OwotCi1zdW5vczQqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGZpCi0gIG5lZWRfdmVyc2lvbj15ZXMKLSAgOzsKLQotc3lzdjQgfCBzeXN2NC4zKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICAgIHNuaSkKLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGVsc2UKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc2NvMy4ydjUqKQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwotICA7OwotCi11dHM0KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi0qKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLV0pIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotCi0KLSMgX0xUX0FDX1RBR0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQVJHX1dJVEgoW3RhZ3NdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXRhZ3NAPDpAPVRBR1NAOj5AXSwKLSAgICAgICAgW2luY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBAPDpAYXV0b21hdGljQDo+QF0pXSwKLSAgICBbdGFnbmFtZXM9IiR3aXRodmFsIl0pCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbb3V0cHV0IGZpbGUgYCRvZmlsZScgZG9lcyBub3QgZXhpc3RdKQotICBmaQotCi0gIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDQz0nYCIKLSAgICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KLSAgICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBsb29rIGxpa2UgYSBsaWJ0b29sIHNjcmlwdF0pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1dBUk4oW3VzaW5nIGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gYCRvZmlsZSddKQotICAgIGZpCi0gIGZpCi0gIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KLSAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgotICBmaQotCi0gICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgotICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgotICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKLQotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycwotICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6W1stX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dXTo6ZydgIGluCi0gICAgIiIpIDs7Ci0gICAgKikgIEFDX01TR19FUlJPUihbaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgZXNhYwotCi0gICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKLSAgICB0aGVuCi0gICAgICBBQ19NU0dfRVJST1IoW3RhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0c10pCi0gICAgZmkKLQotICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgotICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQotCi0gICAgICBjYXNlICR0YWduYW1lIGluCi0gICAgICBDWFgpCi0JaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLQkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0JICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBGNzcpCi0JaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0JQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCTs7Ci0KLSAgICAgICopCi0JQUNfTVNHX0VSUk9SKFtVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWVdKQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICBBQ19NU0dfRVJST1IoW3VuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLl0pCi0gIGZpCi1maQotXSkjIF9MVF9BQ19UQUdDT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfRExPUEVOCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIGVuYWJsZSBjaGVja3MgZm9yIGRsb3BlbiBzdXBwb3J0Ci1BQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAotIFtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9ETE9QRU4KLQotCi0jIEFDX0xJQlRPT0xfV0lOMzJfRExMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGRlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBETExzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAotW0FDX0JFRk9SRShbJDBdLCBbQUNfTElCVE9PTF9TRVRVUF0pCi1dKSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLQotCi0jIEFDX0VOQUJMRV9TSEFSRUQoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3NoYXJlZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zaGFyZWQ9XUFDX0VOQUJMRV9TSEFSRURfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU0hBUkVECi0KLQotIyBBQ19ESVNBQkxFX1NIQVJFRAotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc2hhcmVkIGZsYWcgdG8gLS1kaXNhYmxlLXNoYXJlZAotQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU0hBUkVEKG5vKQotXSkjIEFDX0RJU0FCTEVfU0hBUkVECi0KLQotIyBBQ19FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAotW2RlZmluZShbQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zdGF0aWM9XUFDX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfU1RBVElDCi0KLQotIyBBQ19ESVNBQkxFX1NUQVRJQwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgc3RhdGljIGZsYWcgdG8gLS1kaXNhYmxlLXN0YXRpYwotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfU1RBVElDKG5vKQotXSkjIEFDX0RJU0FCTEVfU1RBVElDCi0KLQotIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcKLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAotW2RlZmluZShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgaWZlbHNlKCQxLCBubywgbm8sIHllcykpZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9mYXN0X2luc3RhbGw9XUFDX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKLV0pIyBBQ19FTkFCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBzZXQgdGhlIGRlZmF1bHQgdG8gLS1kaXNhYmxlLWZhc3QtaW5zdGFsbAotQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMKG5vKQotXSkjIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0KLQotIyBBQ19MSUJUT09MX1BJQ01PREUoW01PREVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0td2l0aC1waWMgZmxhZwotIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAotcGljX21vZGU9aWZlbHNlKCQjLDEsJDEsZGVmYXVsdCkKLV0pIyBBQ19MSUJUT09MX1BJQ01PREUKLQotCi0jIEFDX1BST0dfRUdSRVAKLSMgLS0tLS0tLS0tLS0tLQotIyBUaGlzIGlzIHByZWRlZmluZWQgc3RhcnRpbmcgd2l0aCBBdXRvY29uZiAyLjU0LCBzbyB0aGlzIGNvbmRpdGlvbmFsCi0jIGRlZmluaXRpb24gY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSByZXF1aXJlIEF1dG9jb25mIDIuNTQgb3IgbGF0ZXIuCi1tNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLCBbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgZWdyZXBdLCBbYWNfY3ZfcHJvZ19lZ3JlcF0sCi0gICBbaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmldKQotIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCi0gQUNfU1VCU1QoW0VHUkVQXSkKLV0pXSkKLQotCi0jIEFDX1BBVEhfVE9PTF9QUkVGSVgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX01TR19DSEVDS0lORyhbZm9yICQxXSkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX01BR0lDX0NNRCwKLVtjYXNlICRNQUdJQ19DTUQgaW4KLVtbXFwvKl0gfCAgPzpbXFwvXSpdKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1kbmwgJGFjX2R1bW15IGZvcmNlcyBzcGxpdHRpbmcgb24gY29uc3RhbnQgdXNlci1zdXBwbGllZCBwYXRocy4KLWRubCBQT1NJWC4yIHdvcmQgc3BsaXR0aW5nIGlzIGRvbmUgb25seSBvbiB0aGUgb3V0cHV0IG9mIHdvcmQgZXhwYW5zaW9ucywKLWRubCBub3QgZXZlcnkgd29yZC4gIFRoaXMgY2xvc2VzIGEgbG9uZ3N0YW5kaW5nIHNoIHNlY3VyaXR5IGhvbGUuCi0gIGFjX2R1bW15PSJpZmVsc2UoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLQkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotRU9GCi0JICBmaSA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgotICA7OwotZXNhY10pCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLWlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi1dKSMgQUNfUEFUSF9UT09MX1BSRUZJWAotCi0KLSMgQUNfUEFUSF9NQUdJQwotIyAtLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5Ci1BQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10sCi1bQUNfUEFUSF9UT09MX1BSRUZJWCgke2FjX3Rvb2xfcHJlZml4fWZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi1pZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICBBQ19QQVRIX1RPT0xfUFJFRklYKGZpbGUsIC91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgpCi0gIGVsc2UKLSAgICBNQUdJQ19DTUQ9OgotICBmaQotZmkKLV0pIyBBQ19QQVRIX01BR0lDCi0KLQotIyBBQ19QUk9HX0xECi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgotQUNfREVGVU4oW0FDX1BST0dfTERdLAotW0FDX0FSR19XSVRIKFtnbnUtbGRdLAotICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCi0JW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCi0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCi0gICAgW3dpdGhfZ251X2xkPW5vXSkKLUFDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQotICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKLSAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAotICAgICAgYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAncyVcXFxcJS8lZydgCi0gICAgICB3aGlsZSBlY2hvICRhY19wcm9nIHwgZ3JlcCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICJzJSRyZV9kaXJlbHQlLyUiYAotICAgICAgZG9uZQotICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0iJGFjX3Byb2ciCi0gICAgICA7OwotICAiIikKLSAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KLSAgICBhY19wcm9nPWxkCi0gICAgOzsKLSAgKikKLSAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCi0gICAgd2l0aF9nbnVfbGQ9dW5rbm93bgotICAgIDs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQotZWxzZQotICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKLWZpCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKLVtpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX0xEPSIkYWNfZGlyLyRhY19wcm9nIgotICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAotICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KLSAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgotICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0gICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCi0JOzsKLSAgICAgICopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSB5ZXMgJiYgYnJlYWsKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi1lbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi1maV0pCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoJExEKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLXRlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCi1BQ19QUk9HX0xEX0dOVQotXSkjIEFDX1BST0dfTEQKLQotCi0jIEFDX1BST0dfTERfR05VCi0jIC0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIEFDX1BST0dfTERfR05VCi0KLQotIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAotICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCi1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi1dKSMgQUNfUFJPR19MRF9SRUxPQURfRkxBRwotCi0KLSMgQUNfREVQTElCU19DSEVDS19NRVRIT0QKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGNoZWNrIGZvciBsaWJyYXJ5IGRlcGVuZGVuY2llcwotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwKLVtBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAotW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDQqIHwgYWl4NSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJlb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ic2RpW1s0NV1dKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotICA7OwotCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotXSkKLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLV0pIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotCi0KLSMgQUNfUFJPR19OTQotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtBQ19QUk9HX05NXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC1jb21wYXRpYmxlIG5tXSwgbHRfY3ZfcGF0aF9OTSwKLVtpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCi0gICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKLSAgZmkKLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQotCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhawotCSAgICA7OwotCSAgKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKLQkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KLWZpXSkKLU5NPSIkbHRfY3ZfcGF0aF9OTSIKLV0pIyBBQ19QUk9HX05NCi0KLQotIyBBQ19DSEVDS19MSUJNCi0jIC0tLS0tLS0tLS0tLS0KLSMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQotQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQotICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKLSAgOzsKLSotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfQ0hFQ0tfTElCTQotCi0KLSMgQUNfTElCTFRETF9DT05WRU5JRU5DRShbRElSRUNUT1JZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBjb252ZW5pZW5jZSBsaWJyYXJ5IGFuZAotIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCi0jIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAotIyAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nCi0jIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QKLSMgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbgotIyB0aGUgTWFrZWZpbGVzLgotQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KLSAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7Ci0gICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKLSAgZXNhYwotICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGxjLmxhCi0gIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCi0gICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KLSAgSU5DTFRETD0iJExURExJTkNMIgotXSkjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UKLQotCi0jIEFDX0xJQkxURExfSU5TVEFMTEFCTEUoW0RJUkVDVE9SWV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaW5zdGFsbGFibGUgbGlicmFyeSBhbmQKLSMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcwotIyAtLWVuYWJsZS1sdGRsLWluc3RhbGwgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgYW5kIGFuIGluc3RhbGxlZCBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuCi0jIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9idWlsZGRpcn0vJyMgYW5kIExURExJTkNMIHdpdGgKLSMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAotIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyCi0jIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KLSMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgQUNfUFJPR19MSUJUT09MLgotQUNfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2RsaW5pdCwKLSAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKLSAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KLSAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCi0gICBlbHNlCi0gICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCi0gICBmaQotICBdKQotICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCi0gICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCi0gICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCi0gICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKLSAgZWxzZQotICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgotICAgIExJQkxUREw9Ii1sbHRkbCIKLSAgICBMVERMSU5DTD0KLSAgZmkKLSAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgotICBJTkNMVERMPSIkTFRETElOQ0wiCi1dKSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRQotCi0KLSMgQUNfTElCVE9PTF9DWFgKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEMrKyBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfQ1hYXSkKLV0pIyBBQ19MSUJUT09MX0NYWAotCi0KLSMgX0xUX0FDX0xBTkdfQ1hYCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFhdKQotXSkjIF9MVF9BQ19MQU5HX0NYWAotCi0jIF9MVF9BQ19QUk9HX0NYWENQUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdLAotWwotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWZpCi1dKSMgX0xUX0FDX1BST0dfQ1hYQ1BQCi0KLSMgQUNfTElCVE9PTF9GNzcKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEZvcnRyYW4gNzcgbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0Y3N10pCi1dKSMgQUNfTElCVE9PTF9GNzcKLQotCi0jIF9MVF9BQ19MQU5HX0Y3NwotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzddKQotXSkjIF9MVF9BQ19MQU5HX0Y3NwotCi0KLSMgQUNfTElCVE9PTF9HQ0oKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEdDSiBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfR0NKXSkKLV0pIyBBQ19MSUJUT09MX0dDSgotCi0KLSMgX0xUX0FDX0xBTkdfR0NKCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSxbXSwKLSAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSxbXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSxbXSwKLSAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBQ19QUk9HX0dDSl0pXSwKLQkgW2lmZGVmKFtBXVtNX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQV1bTV9QUk9HX0dDSl0pXSwKLQkgICBbQUNfUkVRVUlSRShbQV1bQ19QUk9HX0dDSl9PUl9BXVtNX1BST0dfR0NKXSldKV0pXSldKV0pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9R0NKXSkKLV0pIyBfTFRfQUNfTEFOR19HQ0oKLQotCi0jIEFDX0xJQlRPT0xfUkMKLSMgLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgV2luZG93cyByZXNvdXJjZSBmaWxlcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfUkNdKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfVJDXSkKLV0pIyBBQ19MSUJUT09MX1JDCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NfQ09ORklHXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCi1bbHRfc2F2ZV9DQz0iJENDIgotQUNfTEFOR19QVVNIKEMpCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKLQotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLUFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0jIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLQotYWl4NCogfCBhaXg1KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gICAgOzsKLWVzYWMKLUFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLUFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NYWF9DT05GSUcoQ1hYKV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCi1bQUNfTEFOR19QVVNIKEMrKykKLUFDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKLUFDX1JFUVVJUkUoW19MVF9BQ19QUk9HX0NYWENQUF0pCi0KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKLV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1fTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQotX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotICBBQ19QUk9HX0xECi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBhaXg0KiB8IGFpeDUqKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXg1KikKLQlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICotYnJ0bCopCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgZmkKLQotICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCV9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgZmkKLSAgICBmaQotICAgIDs7Ci0KLSAgYmVvcyopCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLSAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotCi0gIGNob3J1cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuW1swMTJdXSkKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuW1swMTJdXSkKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgOyB0aGVuCi0gICAgICBsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubwotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICBpZiAkQ0MgLWR1bXBzcGVjcyAyPiYxIHwgJEVHUkVQICdzaW5nbGVfbW9kdWxlJyA+L2Rldi9udWxsIDsgdGhlbgotICAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPXllcwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KLSAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgLXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIGVsc2UKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgICBmaQotICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIGlmIHRlc3QgIlgkbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gWHllcyA7IHRoZW4KLSAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyAke2xpYn0tbWFzdGVyLm8gJGxpYm9ianN+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICR7bGlifS1tYXN0ZXIubyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBmaQotICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBmaQotICAgICAgICA7OwotCi0gIGRndXgqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBlYysrKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGdoY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBmcmVlYnNkW1sxMl1dKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgZnJlZWJzZC1lbGYqKQotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICMgY29udmVudGlvbnMKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgIDs7Ci0gIGdudSopCi0gICAgOzsKLSAgaHB1eDkqKQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBDQyopCi0gICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgYUNDKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICMKLSAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLSAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0gICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0gICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbWy1dXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0gICAgICA7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBocHV4MTAqfGhwdXgxMSopCi0gICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopIDs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgYUNDKikKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KikKLQkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgaWE2NCopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGludGVyaXhbWzMtOV1dKikKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICA7OwotICBpcml4NSogfCBpcml4NiopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFNHSSBDKysKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgLW8gJGxpYicKLQkgIGZpCi0JZmkKLQlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQk7OwotICAgIGVzYWMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251KQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgaWNwYyopCi0JIyBJbnRlbCBDKysKLQl3aXRoX2dudV9sZD15ZXMKLQkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scwotCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCi0JIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KLQkqIlZlcnNpb24gNy4iKikKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKLQkgIHRtcF9pZHluPQotCSAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCSAgZXNhYwotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQllc2FjCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JOzsKLSAgICAgIHBnQ0MqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotICAJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICAgIDs7Ci0gICAgICBjeHgqKQotCSMgQ29tcGFxIEMrKwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQysrIDUuOQotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0KLQkgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKLQkgICMgd291bGQgYmUgYmV0dGVyLgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICMgaW4gdGhlIGFyY2hpdmUuCi0JICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGx5bnhvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG04OGsqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBtdnMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBjeHgqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbmV0YnNkKikKLSAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIGZpCi0gICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJwotICAgIDs7Ci0gIG9wZW5ic2QyKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGZpCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotICBvc2YzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBjeHgqKQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBvc2Y0KiB8IG9zZjUqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgY3h4KikKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIC1XbCwtaW5wdXQgLVdsLCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24JJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgJHJtICRsaWIuZXhwJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBwc29zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgc3Vub3M0KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LngKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGxjYyopCi0JIyBMdWNpZAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc29sYXJpcyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcwotCV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLQkgICopCi0JICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCi0JICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQllc2FjCi0JX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGdjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJwotCSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZWxzZQotCSAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCi0JICAgICMgcGxhdGZvcm0uCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBmaQotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJwotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLQkgICopCi0JICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCSAgZXNhYwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAjIGFzIC16IGRlZnMuCi0gICAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cwotICAgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0gICAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLSAgICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgotICAgICMgU28gdGhhdCBiZWhhdmlvdXIgaXMgb25seSBlbmFibGVkIGlmIFNDT0FCU1BBVEggaXMgc2V0IHRvIGEKLSAgICAjIG5vbi1lbXB0eSB2YWx1ZSBpbiB0aGUgZW52aXJvbm1lbnQuICBNb3N0IGxpa2VseSBvbmx5IHVzZWZ1bCBmb3IKLSAgICAjIGNyZWF0aW5nIG9mZmljaWFsIGRpc3RyaWJ1dGlvbnMgb2YgcGFja2FnZXMuCi0gICAgIyBUaGlzIGlzIGEgaGFjayB1bnRpbCBsaWJ0b29sIG9mZmljaWFsbHkgc3VwcG9ydHMgYWJzb2x1dGUgcGF0aAotICAgICMgbmFtZXMgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdGFuZGVtKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgTkNDKikKLQkjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHZ4d29ya3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICAqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1fTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgotX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLUFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAoJDEpCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDKCQxKQotQUNfTElCVE9PTF9QUk9HX0NDX0NfTygkMSkKLUFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUygkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMoJDEpCi1BQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLUFDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIKCQxKQotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19QT1AKLUNDPSRsdF9zYXZlX0NDCi1MRENYWD0kTEQKLUxEPSRsdF9zYXZlX0xECi1HQ0M9JGx0X3NhdmVfR0NDCi13aXRoX2dudV9sZGN4eD0kd2l0aF9nbnVfbGQKLXdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1sdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECi1sdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKLWx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAotbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLV0pIyBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotCi0jIEFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKLSMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLFsKLWRubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAotZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKLWRubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKLWRubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCi1kbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KLWlmZWxzZShbJDFdLFtdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1pbnQgYTsKLXZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9Ci1FT0YKLV0sWyQxXSxbQ1hYXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotY2xhc3MgRm9vCi17Ci1wdWJsaWM6Ci0gIEZvbyAodm9pZCkgeyBhID0gMDsgfQotcHJpdmF0ZToKLSAgaW50IGE7Ci19OwotRU9GCi1dLFskMV0sW0Y3N10sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSAgICAgIHN1YnJvdXRpbmUgZm9vCi0gICAgICBpbXBsaWNpdCBub25lCi0gICAgICBpbnRlZ2VyKjQgYQotICAgICAgYT0wCi0gICAgICByZXR1cm4KLSAgICAgIGVuZAotRU9GCi1dLFskMV0sW0dDSl0sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLXB1YmxpYyBjbGFzcyBmb28gewotICBwcml2YXRlIGludCBhOwotICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKLSAgICBhID0gMDsKLSAgfQotfTsKLUVPRgotXSkKLWRubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLWRubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi1pZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLQotICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCi0gICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgotICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCi0KLSAgIyBUaGUgYConIGluIHRoZSBjYXNlIG1hdGNoZXMgZm9yIGFyY2hpdGVjdHVyZXMgdGhhdCB1c2UgYGNhc2UnIGluCi0gICMgJG91dHB1dF92ZXJib3NlX2NtZCBjYW4gdHJpZ2dlciBnbG9iIGV4cGFuc2lvbiBkdXJpbmcgdGhlIGxvb3AKLSAgIyBldmFsIHdpdGhvdXQgdGhpcyBzdWJzdGl0dXRpb24uCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWAkZWNobyAiWCRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCIgfCAkWHNlZCAtZSAiJG5vX2dsb2Jfc3Vic3QiYAotCi0gIGZvciBwIGluIGBldmFsICRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZGA7IGRvCi0gICAgY2FzZSAkcCBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIFwKLQkgIHx8IHRlc3QgJHAgPSAiLVIiOyB0aGVuCi0JIHByZXY9JHAKLQkgY29udGludWUKLSAgICAgICBlbHNlCi0JIHByZXY9Ci0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHAgaW4KLQkgLUwqIHwgLVIqKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCi0JICAgZWxzZQotCSAgICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqLiRvYmpleHQpCi0gICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCi0gICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCi0gICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCi0JIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCi0JIGNvbnRpbnVlCi0gICAgICAgZmkKLQotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBlbHNlCi0JIGlmIHRlc3QgLXogIiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCi0KLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIENsZWFuIHVwLgotICBybSAtZiBhLm91dCBhLmV4ZQotZWxzZQotICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgotZmkKLQotJHJtIC1mIGNvbmZlc3QuJG9iamV4dAotCi0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotaWZlbHNlKFskMV0sW0NYWF0sCi1bY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeFtbMy05XV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQotICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci1lc2FjCi1dKQotCi1jYXNlICIgJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCi0qIiAtbGMgIiopIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OwotZXNhYwotXSkjIEFDX0xJQlRPT0xfUE9TVERFUF9QUkVERVAKLQotIyBBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwgW19MVF9BQ19MQU5HX0Y3N19DT05GSUcoRjc3KV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19GNzddKQotQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCi0KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAotICAgICAgc3Vicm91dGluZSB0Ci0gICAgICByZXR1cm4KLSAgICAgIGVuZAotIgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7Rjc3LSJmNzcifQotY29tcGlsZXI9JENDCi1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLWFpeDQqIHwgYWl4NSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICA7OwotZXNhYwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCi0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQotCi1fTFRfQUNfVEFHVkFSKEdDQywgJDEpPSIkRzc3IgotX0xUX0FDX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKLSMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwgW19MVF9BQ19MQU5HX0dDSl9DT05GSUcoR0NKKV0pCi1BQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBKYXZhIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1qYXZhCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBKYXZhIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iY2xhc3MgZm9vIHt9IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwdWJsaWMgY2xhc3MgY29uZnRlc3QgeyBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbW11dIGFyZ3YpIHt9OyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi1fTFRfQUNfU1lTX0NPTVBJTEVSCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1fTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLV9MVF9MSU5LRVJfQk9JTEVSUExBVEUKLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWx0X3NhdmVfQ0M9IiRDQyIKLUNDPSR7R0NKLSJnY2oifQotY29tcGlsZXI9JENDCi1fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCi1fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotCi1BQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCi1BQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQotQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKLUFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQotQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSIkbHRfc2F2ZV9DQyIKLV0pIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sIFtfTFRfQUNfTEFOR19SQ19DT05GSUcoUkMpXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAotW0FDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtSQy0id2luZHJlcyJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19SQ19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfQ09ORklHKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZiBUQUdOQU1FIGlzIG5vdCBwYXNzZWQsIHRoZW4gY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQKLSMgd2l0aCBhIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZQotIyBhZGQgY29kZSB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkKLSMgVEFHTkFNRSBmcm9tIHRoZSBtYXRjaGluZyB0YWdnZWQgY29uZmlnIHZhcnMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddLAotWyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoQ0MsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihMRCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3RpbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0dW5pbnN0YWxsX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKTsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpIHwgXAotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcWyRdMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFxbJF0wIC0tZmFsbGJhY2stZWNobyJbJF0vWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1pZmVsc2UoWyQxXSwgW10sCi0gIFtjZmdmaWxlPSIke29maWxlfVQiCi0gIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICRybSAtZiAiJGNmZ2ZpbGUiCi0gIEFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pXSwKLSAgW2NmZ2ZpbGU9IiRvZmlsZSJdKQotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotaWZlbHNlKFskMV0sIFtdLAotWyMhICRTSEVMTAotCi0jIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNwotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6Ci0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECi0KLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9Ci0KLSMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXSkKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKQotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9bXV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKQotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kX0xUX0FDX1RBR1ZBUihHQ0MsICQxKQotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9bXV9MVF9BQ19UQUdWQVIoTEQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKQotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKQotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSkKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKQotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKQotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSkKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSkKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKQotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKQotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSkKLQotaWZlbHNlKFskMV0sW10sCi1bIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZV0pCi0KLV9fRU9GX18KLQotaWZlbHNlKFskMV0sW10sIFsKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi1dKQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi1dKSMgQUNfTElCVE9PTF9DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0KLSAgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKLSAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQotZmkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLUFDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCi1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAotWwotIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCi0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQotCi0jIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCi1zeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0KLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCi1jYXNlICRob3N0X29zIGluCi1haXgqKQotICBzeW1jb2RlPSdbW0JDRFRdXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKLSAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgOzsKLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tbQkRSVF1dJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW1tBQkRUXV0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW1tERk5TVFVdXScKLSAgOzsKLWVzYWMKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKLWVzYWMKLQotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmMoKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgotCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi1jb25zdCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHJfdCBhZGRyZXNzOwotfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKLQkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0KiBjb25mdHN0KgotCi0gICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCi0gICAgYnJlYWsKLSAgZWxzZQotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9Ci0gIGZpCi1kb25lCi1dKQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQotZmkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChvaykKLWZpCi1dKSAjIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLAotW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKLSBpZmVsc2UoWyQxXSxbQ1hYXSxbCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBvczIqIHwgcHczMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQotICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJwotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0KiB8IGFpeDUqKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi1dLAotWwotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLSAgICAgIGRhcndpbiopCi0gICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICB4bGMqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcW5vY29tbW9uJwotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9JycKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHVuaWNvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotXSkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgotICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKSwKLSAgICBbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAotICAgIFtjYXNlICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KLSAgICAgIiIgfCAiICIqKSA7OwotICAgICAqKSBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OwotICAgICBlc2FjXSwKLSAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKLWZpCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLSAgICA7OwotICAqKQotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKLSAgICA7OwotZXNhYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKLUFDX0xJQlRPT0xfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCi0gICRsdF90bXBfc3RhdGljX2ZsYWcsCi0gIFtdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCi1dKQotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLWlmZWxzZShbJDFdLFtDWFhdLFsKLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXg0KiB8IGFpeDUqKQotICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLSAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgotICA7OwotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotXSxbCi0gIHJ1bnBhdGhfdmFyPQotICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIF9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCi0gICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgotICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICBmaQotICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCi0KLSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgotICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXg1KikKLQkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotICAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0gIAkgICAgYnJlYWsKLSAgCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgotCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLSAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLSAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLSAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQkgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYnNkaVtbNDVdXSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLltbMDEyXV0pCi0gICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKLSAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIGZyZWVic2QxKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKLSAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKLSAgICAjIGV4dHJhIHNwYWNlKS4KLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0KLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0nK2IgJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCi0JICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCi0KLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IHRleHQnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZWxzZQotCXdsYXJjPScnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotXSkKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLXRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAgc29uYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYj1jb25mdGVzdAotICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgICAgICAgZGVwbGlicz0KLSAgICAgICAgd2w9JF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCi0JcGljX2ZsYWc9JF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotICAgICAgICBpZiBBQ19UUllfRVZBTChfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCi0gICAgICAgIHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgICBlbHNlCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgZWxzZQotICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgIGZpCi0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpXSkKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotXSkjIEFDX0xJQlRPT0xfUFJPR19MRF9TSExJQlMKLQotCi0jIF9MVF9BQ19GSUxFX0xURExMX0MKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBCZSBjYXJlZnVsIHRoYXQgdGhlIHN0YXJ0IG1hcmtlciBhbHdheXMgZm9sbG93cyBhIG5ld2xpbmUuCi1BQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10sIFsKLSMgLyogbHRkbGwuYyBzdGFydHMgaGVyZSAqLwotIyAjZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMgI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSMgI3VuZGVmIFdJTjMyX0xFQU5fQU5EX01FQU4KLSMgI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jCi0jICNpZm5kZWYgX19DWUdXSU5fXwotIyAjICBpZmRlZiBfX0NZR1dJTjMyX18KLSMgIyAgICBkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KLSMgIyAgZW5kaWYKLSMgI2VuZGlmCi0jCi0jICNpZmRlZiBfX2NwbHVzcGx1cwotIyBleHRlcm4gIkMiIHsKLSMgI2VuZGlmCi0jIEJPT0wgQVBJRU5UUlkgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCk7Ci0jICNpZmRlZiBfX2NwbHVzcGx1cwotIyB9Ci0jICNlbmRpZgotIwotIyAjaWZkZWYgX19DWUdXSU5fXwotIyAjaW5jbHVkZSA8Y3lnd2luL2N5Z3dpbl9kbGwuaD4KLSMgREVDTEFSRV9DWUdXSU5fRExMKCBEbGxNYWluICk7Ci0jICNlbmRpZgotIyBISU5TVEFOQ0UgX19oRGxsSW5zdGFuY2VfYmFzZTsKLSMKLSMgQk9PTCBBUElFTlRSWQotIyBEbGxNYWluIChISU5TVEFOQ0UgaEluc3QsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKQotIyB7Ci0jICAgX19oRGxsSW5zdGFuY2VfYmFzZSA9IGhJbnN0OwotIyAgIHJldHVybiBUUlVFOwotIyB9Ci0jIC8qIGx0ZGxsLmMgZW5kcyBoZXJlICovCi1dKSMgX0xUX0FDX0ZJTEVfTFRETExfQwotCi0KLSMgX0xUX0FDX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdLCBbaWZlbHNlKFskMl0sIFtdLCBbJDFdLCBbJDFfJDJdKV0pCi0KLQotIyBvbGQgbmFtZXMKLUFDX0RFRlVOKFtBTV9QUk9HX0xJQlRPT0xdLCAgIFtBQ19QUk9HX0xJQlRPT0xdKQotQUNfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCAgW0FDX0VOQUJMRV9TSEFSRUQoJEApXSkKLUFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCi1BQ19ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKLUFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtBQ19ESVNBQkxFX1NUQVRJQygkQCldKQotQUNfREVGVU4oW0FNX1BST0dfTERdLCAgICAgICAgW0FDX1BST0dfTERdKQotQUNfREVGVU4oW0FNX1BST0dfTk1dLCAgICAgICAgW0FDX1BST0dfTk1dKQotCi0jIFRoaXMgaXMganVzdCB0byBzaWxlbmNlIGFjbG9jYWwgYWJvdXQgdGhlIG1hY3JvIG5vdCBiZWluZyB1c2VkCi1pZmVsc2UoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSkKLQotQUNfREVGVU4oW0xUX0FDX1BST0dfR0NKXSwKLVtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCBubykKLSAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCi0gIEFDX1NVQlNUKEdDSkZMQUdTKQotXSkKLQotQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLAotW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsIG5vKQotXSkKLQotCi0jIENoZWFwIGJhY2twb3J0IG9mIEFTX0VYRUNVVEFCTEVfUCBhbmQgcmVxdWlyZWQgbWFjcm9zCi0jIGZyb20gQXV0b2NvbmYgMi41OTsgd2Ugc2hvdWxkIG5vdCB1c2UgJGFzX2V4ZWN1dGFibGVfcCBkaXJlY3RseS4KLQotIyBfQVNfVEVTVF9QUkVQQVJFCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2lmbmRlZihbX0FTX1RFU1RfUFJFUEFSRV0sCi1bbTRfZGVmdW4oW19BU19URVNUX1BSRVBBUkVdLAotW2lmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhlY3V0YWJsZV9wPSd0ZXN0IC14JwotZWxzZQotICBhc19leGVjdXRhYmxlX3A9J3Rlc3QgLWYnCi1maQotXSldKSMgX0FTX1RFU1RfUFJFUEFSRQotCi0jIEFTX0VYRUNVVEFCTEVfUAotIyAtLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciBhIGZpbGUgaXMgZXhlY3V0YWJsZS4KLW00X2lmbmRlZihbQVNfRVhFQ1VUQUJMRV9QXSwKLVttNF9kZWZ1bihbQVNfRVhFQ1VUQUJMRV9QXSwKLVtBU19SRVFVSVJFKFtfQVNfVEVTVF9QUkVQQVJFXSlkbmwKLSRhc19leGVjdXRhYmxlX3AgJDFbXWRubAotXSldKSMgQVNfRVhFQ1VUQUJMRV9QCi0KLSMgTk9URTogVGhpcyBtYWNybyBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbnRvICAgIwotIyAgR05VIEF1dG9jb25mIGFzIEFDX1BST0dfU0VELiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAjCi0jICBhIHJlbGVhc2VkIHZlcnNpb24gb2YgQXV0b2NvbmYgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzICAgICMKLSMgIG1hY3JvIGFuZCB1c2UgaXQgaW5zdGVhZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwotIyBMVF9BQ19QUk9HX1NFRAotIyAtLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcwotIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgotQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCi1bIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCi0jIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgaWYgQVNfRVhFQ1VUQUJMRV9QKFsiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCJdKTsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQotICAgIGRvbmUKLSAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCi0gIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgotICBsdF9hY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgotICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgYnJlYWsKLSAgZmkKLSAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAotICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCi0gICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKLSAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCi0gICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgotICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAotICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGZpCi0gIGRvbmUKLWRvbmUKLV0pCi1TRUQ9JGx0X2N2X3BhdGhfU0VECi1BQ19TVUJTVChbU0VEXSkKLUFDX01TR19SRVNVTFQoWyRTRURdKQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LApAQCAtNjU5NiwxMCArMzEsMTAgQEAKICMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCiAjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQogQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xMCcKK1thbV9fYXBpX3ZlcnNpb249JzEuMTEnCiBkbmwgU29tZSB1c2VycyBmaW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIG1pc3Rha2UgaXQgZm9yIGEgd2F5IHRvCiBkbmwgcmVxdWlyZSBzb21lIG1pbmltdW0gdmVyc2lvbi4gIFBvaW50IHRoZW0gdG8gdGhlIHJpZ2h0IG1hY3JvLgotbTRfaWYoWyQxXSwgWzEuMTBdLCBbXSwKK200X2lmKFskMV0sIFsxLjExLjFdLCBbXSwKICAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKIF0pCiAKQEAgLTY2MTMsMTAgKzQ4LDEyIEBACiAjIEFNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT04KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDYWxsIEFNX0FVVE9NQUtFX1ZFUlNJT04gYW5kIEFNX0FVVE9NQUtFX1ZFUlNJT04gc28gdGhleSBjYW4gYmUgdHJhY2VkLgotIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFDX0lOSVRfQVVUT01BS0UuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KIEFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLVtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjEwXSlkbmwKLV9BTV9BVVRPQ09ORl9WRVJTSU9OKG00X1BBQ0tBR0VfVkVSU0lPTildKQorW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTEuMV0pZG5sCittNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAorICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCitfQU1fQVVUT0NPTkZfVkVSU0lPTihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSkpXSkKIAogIyBGaWd1cmUgb3V0IGhvdyB0byBydW4gdGhlIGFzc2VtYmxlci4gICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCkBAIC02Njk1LDE0ICsxMzIsMTQgQEAKIAogIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOAorIyBzZXJpYWwgOQogCiAjIEFNX0NPTkRJVElPTkFMKE5BTUUsIFNIRUxMLUNPTkRJVElPTikKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcxNSw2ICsxNTIsNyBAQAogQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKIF9BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKIF9BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCittNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKIGlmICQyOyB0aGVuCiAgICQxX1RSVUU9CiAgICQxX0ZBTFNFPScjJwpAQCAtNjcyOCwxNCArMTY2LDE0IEBACiBVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKIGZpXSldKQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNgorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOQorIyBzZXJpYWwgMTAKIAogIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKICMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCkBAIC02NzkyLDYgKzIzMCwxNiBAQAogICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgogICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gWydzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJ10gPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKyAgbTRfY2FzZShbJDFdLCBbQ0NdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10sCisgICAgW0NYWF0sCisgICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjXSkKKwogICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KICAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKICAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCkBAIC02ODA5LDcgKzI1NywxNyBAQAogICAgIGRvbmUKICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCiAKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCiAgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKICAgICBub3NpZGVlZmZlY3QpCiAgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKICAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKQEAgLTY4MTksMTkgKzI3NywyMyBAQAogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC02ODg4LDU3ICszNTAsNjggQEAKIAogIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotI3NlcmlhbCAzCisjc2VyaWFsIDUKIAogIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKLVtmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAotICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gIGlmIHNlZCAxMHEgIiRtZiIgfCBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCi0gIGVsc2UKLSAgICBjb250aW51ZQotICBmaQotICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQotICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCi0gIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCi0gIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCi0gIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKLSAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKLSAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAotICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQotICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQotICAjIGV4cGFuc2lvbi4KLSAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCi0gICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCi0gICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCi0gICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCi0gICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCi0gICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAotICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKLSAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgotICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorW3sKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAorICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQorICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKKyAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICAgIGRvbmUKICAgZG9uZQotZG9uZQorfQogXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwogCiAKQEAgLTY5NTgsMTMgKzQzMSwxMyBAQAogIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSMgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxMgorIyBzZXJpYWwgMTYKIAogIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKICMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KQEAgLTY5ODEsNyArNDU0LDcgQEAKICMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgogIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgogQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAotW0FDX1BSRVJFUShbMi42MF0pZG5sCitbQUNfUFJFUkVRKFsyLjYyXSlkbmwKIGRubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CiBkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KIG00X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubApAQCAtNzAzMiw4ICs1MDUsOCBAQAogQU1fTUlTU0lOR19QUk9HKEFVVE9NQUtFLCBhdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0pCiBBTV9NSVNTSU5HX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKIEFNX01JU1NJTkdfUFJPRyhNQUtFSU5GTywgbWFrZWluZm8pCi1BTV9QUk9HX0lOU1RBTExfU0gKLUFNX1BST0dfSU5TVEFMTF9TVFJJUAorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCiBBQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubAogIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KICMgc29tZSBwbGF0Zm9ybXMuCkBAIC03MDQxLDI0ICs1MTQsMzcgQEAKIEFDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAogQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKIF9BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAotICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKKwkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKIF9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAogW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCi0gICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DQ10sCisJCQkgIGRlZm4oW0FDX1BST0dfQ0NdKVtfQU1fREVQRU5ERU5DSUVTKENDKV0pXSlkbmwKIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NYWF0sCi0gICAgICAgICAgICAgICAgICBbX0FNX0RFUEVOREVOQ0lFUyhDWFgpXSwKLSAgICAgICAgICAgICAgICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKENYWCldKV0pZG5sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNdLAotICAgICAgICAgICAgICAgICAgW19BTV9ERVBFTkRFTkNJRVMoT0JKQyldLAotICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCisJCSAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKKwkJCSAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKIF0pCitfQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAorZG5sIFRoZSBgcGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQorZG5sIGBhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybworZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCitbbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCisgIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAogXSkKIAorZG5sIEhvb2sgaW50byBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgorZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCittNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKKwogCiAjIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCiAjIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgpAQCAtNzA2OSwxOCArNTU1LDE5IEBACiAjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KIEFDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKIFsjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fYXJnPSQxCiBfYW1fc3RhbXBfY291bnQ9MQogZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkMSB8ICQxOiogKQorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCiAgICAgICBicmVhayA7OwogICAgICogKQogICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OwogICBlc2FjCiBkb25lCi1lY2hvICJ0aW1lc3RhbXAgZm9yICQxIiA+YEFTX0RJUk5BTUUoWyQxXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQorZWNobyAidGltZXN0YW1wIGZvciAkX2FtX2FyZyIgPmBBU19ESVJOQU1FKFsiJF9hbV9hcmciXSlgL3N0YW1wLWhbXSRfYW1fc3RhbXBfY291bnRdKQogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC03MDkxLDcgKzU3OCwxNCBAQAogIyBEZWZpbmUgJGluc3RhbGxfc2guCiBBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iXCQoU0hFTEwpICRhbV9hdXhfZGlyL2luc3RhbGwtc2gifQoraWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQogQUNfU1VCU1QoaW5zdGFsbF9zaCldKQogCiAjIENvcHlyaWdodCAoQykgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC03MTE4LDI3ICs2MTIsMzggQEAKICMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KICMgRnJvbSBKaW0gTWV5ZXJpbmcKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk4LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4CiAjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDQKKyMgc2VyaWFsIDUKIAorIyBBTV9NQUlOVEFJTkVSX01PREUoW0RFRkFVTFQtTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29udHJvbCBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4KKyMgRGVmYXVsdCBpcyB0byBkaXNhYmxlIHRoZW0sIHVubGVzcyBgZW5hYmxlJyBpcyBwYXNzZWQgbGl0ZXJhbGx5LgorIyBGb3Igc3ltbWV0cnksIGBkaXNhYmxlJyBtYXkgYmUgcGFzc2VkIGFzIHdlbGwuICBBbnl3YXksIHRoZSB1c2VyCisjIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCB3aXRoIHRoZSAtLWVuYWJsZS8tLWRpc2FibGUgc3dpdGNoLgogQUNfREVGVU4oW0FNX01BSU5UQUlORVJfTU9ERV0sCi1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCi0gIGRubCBtYWludGFpbmVyLW1vZGUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdAotICBBQ19BUkdfRU5BQkxFKG1haW50YWluZXItbW9kZSwKLVsgIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSAgZW5hYmxlIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCitbbTRfY2FzZShtNF9kZWZhdWx0KFskMV0sIFtkaXNhYmxlXSksCisgICAgICAgW2VuYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZGlzYWJsZV0pXSwKKyAgICAgICBbZGlzYWJsZV0sIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSldLAorICAgICAgIFttNF9kZWZpbmUoW2FtX21haW50YWluZXJfb3RoZXJdLCBbZW5hYmxlXSkKKyAgICAgICAgbTRfd2Fybihbc3ludGF4XSwgW3VuZXhwZWN0ZWQgYXJndW1lbnQgdG8gQU1AJnRAX01BSU5UQUlORVJfTU9ERTogJDFdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYW1fbWFpbnRhaW5lcl9vdGhlciBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlc10pCisgIGRubCBtYWludGFpbmVyLW1vZGUncyBkZWZhdWx0IGlzICdkaXNhYmxlJyB1bmxlc3MgJ2VuYWJsZScgaXMgcGFzc2VkCisgIEFDX0FSR19FTkFCTEUoW21haW50YWluZXItbW9kZV0sCitbICAtLV1bYW1fbWFpbnRhaW5lcl9vdGhlcl1bLW1haW50YWluZXItbW9kZSAgYW1fbWFpbnRhaW5lcl9vdGhlciBtYWtlIHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgbm90IHVzZWZ1bAogCQkJICAoYW5kIHNvbWV0aW1lcyBjb25mdXNpbmcpIHRvIHRoZSBjYXN1YWwgaW5zdGFsbGVyXSwKLSAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbCwKLSAgICAgIFVTRV9NQUlOVEFJTkVSX01PREU9bm8pCisgICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT0kZW5hYmxldmFsXSwKKyAgICAgIFtVU0VfTUFJTlRBSU5FUl9NT0RFPV1tNF9pZihhbV9tYWludGFpbmVyX290aGVyLCBbZW5hYmxlXSwgW25vXSwgW3llc10pKQogICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCi0gIEFNX0NPTkRJVElPTkFMKE1BSU5UQUlORVJfTU9ERSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQogICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKLSAgQUNfU1VCU1QoTUFJTlQpZG5sCisgIEFDX1NVQlNUKFtNQUlOVF0pZG5sCiBdCiApCiAKQEAgLTcxNDYsMTMgKzY1MSwxMyBAQAogCiAjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMworIyBzZXJpYWwgNAogCiAjIEFNX01BS0VfSU5DTFVERSgpCiAjIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MTYxLDcgKzY2Niw3IEBACiBbYW1fbWFrZT0ke01BS0UtbWFrZX0KIGNhdCA+IGNvbmZpbmMgPDwgJ0VORCcKIGFtX19kb2l0OgotCUBlY2hvIGRvbmUKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKIC5QSE9OWTogYW1fX2RvaXQKIEVORAogIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgpAQCAtNzE3MSwyNCArNjc2LDI0IEBACiBfYW1fcmVzdWx0PW5vbmUKICMgRmlyc3QgdHJ5IEdOVSBtYWtlIHN0eWxlIGluY2x1ZGUuCiBlY2hvICJpbmNsdWRlIGNvbmZpbmMiID4gY29uZm1mCi0jIFdlIGdyZXAgb3V0IGBFbnRlcmluZyBkaXJlY3RvcnknIGFuZCBgTGVhdmluZyBkaXJlY3RvcnknCi0jIG1lc3NhZ2VzIHdoaWNoIGNhbiBvY2N1ciBpZiBgdycgZW5kcyB1cCBpbiBNQUtFRkxBR1MuCi0jIEluIHBhcnRpY3VsYXIgd2UgZG9uJ3QgbG9vayBhdCBgXm1ha2U6JyBiZWNhdXNlIEdOVSBtYWtlIG1pZ2h0Ci0jIGJlIGludm9rZWQgdW5kZXIgc29tZSBvdGhlciBuYW1lICh1c3VhbGx5ICJnbWFrZSIpLCBpbiB3aGljaAotIyBjYXNlIGl0IHByaW50cyBpdHMgbmV3IG5hbWUgaW5zdGVhZCBvZiBgbWFrZScuCi1pZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbCB8IGdyZXAgLXYgJ2luZyBkaXJlY3RvcnknYCIgPSAiZG9uZSI7IHRoZW4KLSAgIGFtX19pbmNsdWRlPWluY2x1ZGUKLSAgIGFtX19xdW90ZT0KLSAgIF9hbV9yZXN1bHQ9R05VCi1maQorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gYG1ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKICMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgogaWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgogICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgotICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgotICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKLSAgICAgIGFtX19xdW90ZT0iXCIiCi0gICAgICBfYW1fcmVzdWx0PUJTRAotICAgZmkKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKIGZpCiBBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQogQUNfU1VCU1QoW2FtX19xdW90ZV0pCkBAIC03MTk2LDE0ICs3MDEsMTQgQEAKIHJtIC1mIGNvbmZpbmMgY29uZm1mCiBdKQogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQorIyBzZXJpYWwgNgogCiAjIEFNX1BST0dfQ0NfQ19PCiAjIC0tLS0tLS0tLS0tLS0tCkBAIC03MjE1LDggKzcyMCw5IEBACiAjIEZJWE1FOiB3ZSByZWx5IG9uIHRoZSBjYWNoZSB2YXJpYWJsZSBuYW1lIGJlY2F1c2UKICMgdGhlcmUgaXMgbm8gb3RoZXIgd2F5Lgogc2V0IGR1bW15ICRDQwotYWNfY2M9YGVjaG8gJFsyXSB8IHNlZCBbJ3MvW15hLXpBLVowLTlfXS9fL2c7cy9eWzAtOV0vXy8nXWAKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCithbV9jYz1gZWNobyAkWzJdIHwgc2VkIFsncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLyddYAorZXZhbCBhbV90PVwkYWNfY3ZfcHJvZ19jY18ke2FtX2NjfV9jX28KK2lmIHRlc3QgIiRhbV90IiAhPSB5ZXM7IHRoZW4KICAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCiAgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgogICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCkBAIC03MjMyLDE0ICs3MzgsMTQgQEAKIAogIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTcsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNQorIyBzZXJpYWwgNgogCiAjIEFNX01JU1NJTkdfUFJPRyhOQU1FLCBQUk9HUkFNKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyNTYsNyArNzYyLDE0IEBACiBBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKIFtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCiBBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKLXRlc3QgeCIke01JU1NJTkcrc2V0fSIgPSB4c2V0IHx8IE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgoraWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCisgIGNhc2UgJGFtX2F1eF9kaXIgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OworICAqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OworICBlc2FjCitmaQogIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCiBpZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgogICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgpAQCAtNzI5NCwxMyArODA3LDEzIEBACiAKICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDMKKyMgc2VyaWFsIDQKIAogIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzMxNyw3ICs4MzAsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgogQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCi1bQUNfRk9SRUFDSChbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKK1ttNF9mb3JlYWNoX3coW19BTV9PcHRpb25dLCBbJDFdLCBbX0FNX1NFVF9PUFRJT04oX0FNX09wdGlvbildKV0pCiAKICMgX0FNX0lGX09QVElPTihPUFRJT04sIElGLVNFVCwgW0lGLU5PVC1TRVRdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03MzI3LDE0ICs4NDAsMTQgQEAKIAogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDgKICMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNAorIyBzZXJpYWwgNQogCiAjIEFNX1NBTklUWV9DSEVDSwogIyAtLS0tLS0tLS0tLS0tLS0KQEAgLTczNDMsMTYgKzg1NiwyOSBAQAogIyBKdXN0IGluIGNhc2UKIHNsZWVwIDEKIGVjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltbXFxcIlwjXCRcJlwnXGAkYW1fbGZdXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZV0pOzsKK2VzYWMKK2Nhc2UgJHNyY2RpciBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldXSopCisgICAgQUNfTVNHX0VSUk9SKFt1bnNhZmUgc3JjZGlyIHZhbHVlOiBgJHNyY2RpciddKTs7Citlc2FjCisKICMgRG8gYHNldCcgaW4gYSBzdWJzaGVsbCBzbyB3ZSBkb24ndCBjbG9iYmVyIHRoZSBjdXJyZW50IHNoZWxsJ3MKICMgYXJndW1lbnRzLiAgTXVzdCB0cnkgLUwgZmlyc3QgaW4gY2FzZSBjb25maWd1cmUgaXMgYWN0dWFsbHkgYQogIyBzeW1saW5rOyBzb21lIHN5c3RlbXMgcGxheSB3ZWlyZCBnYW1lcyB3aXRoIHRoZSBtb2QgdGltZSBvZiBzeW1saW5rcwogIyAoZWcgRnJlZUJTRCByZXR1cm5zIHRoZSBtb2QgdGltZSBvZiB0aGUgc3ltbGluaydzIGNvbnRhaW5pbmcKICMgZGlyZWN0b3J5KS4KIGlmICgKLSAgIHNldCBYIGBscyAtTHQgJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCisgICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCiAgICBpZiB0ZXN0ICIkWypdIiA9ICJYIjsgdGhlbgogICAgICAgIyAtTCBkaWRuJ3Qgd29yay4KLSAgICAgIHNldCBYIGBscyAtdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlYAorICAgICAgc2V0IFggYGxzIC10ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZWAKICAgIGZpCiAgICBybSAtZiBjb25mdGVzdC5maWxlCiAgICBpZiB0ZXN0ICIkWypdIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCkBAIC03NDA1LDE4ICs5MzEsMjUgQEAKIElOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCiBBQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQogCi0jIENvcHlyaWdodCAoQykgMjAwNiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAorIyBzZXJpYWwgMgorCiAjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dGluZyBWQVJJQUJMRSA9IEBWQVJJQUJMRUAgaW4gTWFrZWZpbGUuaW4uCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KICMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCiBBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQogCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQdWJsaWMgc2lzdGVyIG9mIF9BTV9TVUJTVF9OT1RNQUtFLgorQUNfREVGVU4oW0FNX1NVQlNUX05PVE1BS0VdLCBbX0FNX1NVQlNUX05PVE1BS0UoJEApXSkKKwogIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCiAjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC03NTEzLDQgKzEwNDYsOSBAQAogQUNfU1VCU1QoW2FtX191bnRhcl0pCiBdKSAjIF9BTV9QUk9HX1RBUgogCittNF9pbmNsdWRlKFttNC9saWJ0b29sLm00XSkKK200X2luY2x1ZGUoW200L2x0b3B0aW9ucy5tNF0pCittNF9pbmNsdWRlKFttNC9sdHN1Z2FyLm00XSkKK200X2luY2x1ZGUoW200L2x0dmVyc2lvbi5tNF0pCittNF9pbmNsdWRlKFttNC9sdH5vYnNvbGV0ZS5tNF0pCiBtNF9pbmNsdWRlKFthY2luY2x1ZGUubTRdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFiMWQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKQEAgLTAsMCArMSwxNDIgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCisKK3NjcmlwdHZlcnNpb249MjAwNS0wNS0xNC4yMgorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBjb21waWxlIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1dyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorUmVtb3ZlIGAtbyBkZXN0Lm8nIGZyb20gQVJHUywgcnVuIFBST0dSQU0gd2l0aCB0aGUgcmVtYWluaW5nCithcmd1bWVudHMsIGFuZCByZW5hbWUgdGhlIG91dHB1dCBhcyBleHBlY3RlZC4KKworSWYgeW91IGFyZSB0cnlpbmcgdG8gYnVpbGQgYSB3aG9sZSBwYWNrYWdlIHRoaXMgaXMgbm90IHRoZQorcmlnaHQgc2NyaXB0IHRvIHJ1bjogcGxlYXNlIHN0YXJ0IGJ5IHJlYWRpbmcgdGhlIGZpbGUgYElOU1RBTEwnLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCitvZmlsZT0KK2NmaWxlPQorZWF0PQorCitmb3IgYXJnCitkbworICBpZiB0ZXN0IC1uICIkZWF0IjsgdGhlbgorICAgIGVhdD0KKyAgZWxzZQorICAgIGNhc2UgJDEgaW4KKyAgICAgIC1vKQorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCWVhdD0xCisJY2FzZSAkMiBpbgorCSAgKi5vIHwgKi5vYmopCisJICAgIG9maWxlPSQyCisJICAgIDs7CisJICAqKQorCSAgICBzZXQgeCAiJEAiIC1vICIkMiIKKwkgICAgc2hpZnQKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICouYykKKwljZmlsZT0kMQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICAgICopCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJG9maWxlIiB8fCB0ZXN0IC16ICIkY2ZpbGUiOyB0aGVuCisgICMgSWYgbm8gYC1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKKyAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQorICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCisgICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyBvay4KKyAgZXhlYyAiJEAiCitmaQorCisjIE5hbWUgb2YgZmlsZSB3ZSBleHBlY3QgY29tcGlsZXIgdG8gY3JlYXRlLgorY29maWxlPWBlY2hvICIkY2ZpbGUiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5jJC8uby8nYAorCisjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCisjIE5vdGU6IHVzZSBgWy8uLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKKyMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgorbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy8uLV18X3xnJ2AuZAord2hpbGUgdHJ1ZTsgZG8KKyAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBicmVhaworICBmaQorICBzbGVlcCAxCitkb25lCisjIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KK3RyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1CisKKyMgUnVuIHRoZSBjb21waWxlLgorIiRAIgorcmV0PSQ/CisKK2lmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCisgIG12ICIkY29maWxlIiAiJG9maWxlIgorZWxpZiB0ZXN0IC1mICIke2NvZmlsZX1iaiI7IHRoZW4KKyAgbXYgIiR7Y29maWxlfWJqIiAiJG9maWxlIgorZmkKKworcm1kaXIgIiRsb2NrZGlyIgorZXhpdCAkcmV0CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKaW5kZXggOTUxMzgzZS4uZDUzZTMwOSAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKQEAgLTEsMTAgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KICMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jICAgSW5jLgorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDA3LTA1LTE3JwordGltZXN0YW1wPScyMDA5LTExLTE5JwogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNywxNiArMjcsMTYgQEAKICMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCiAKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyIDxwZXJAYm90aG5lci5jb20+LgotIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuICBQbGVhc2Ugc2VuZCBwYXRjaGVzIChjb250ZXh0CisjIGRpZmYgZm9ybWF0KSB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gYW5kIGluY2x1ZGUgYSBDaGFuZ2VMb2cKKyMgZW50cnkuCiAjCiAjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KICMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCiAjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgogIwotIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKLSMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKyMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206CisjIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAogCiBtZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKIApAQCAtNTYsOCArNTYsOCBAQAogR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKIAogT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1Ci1GcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0xNzAsNyArMTcwLDcgQEAKIAkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCiAJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLQkJCXwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCiAJCXRoZW4KIAkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KIAkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwpAQCAtMzI0LDE0ICszMjQsMzAgQEAKIAljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KIAkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OwogCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40SDpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OwotICAgIGk4NnBjOlN1bk9TOjUuKjoqIHwgaXg4NnhlbjpTdW5PUzo1Lio6KikKLQllY2hvIGkzODYtcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKyAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJU1VOX0FSQ0g9ImkzODYiCisJIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCisJIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgorCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KKwlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KKwkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlTVU5fQVJDSD0ieDg2XzY0IgorCSAgICBmaQorCWZpCisJZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo2KjoqKQogCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCkBAIC01MzIsNyArNTQ4LDcgQEAKIAkJZWNobyByczYwMDAtaWJtLWFpeDMuMgogCWZpCiAJZXhpdCA7OwotICAgICo6QUlYOio6WzQ1XSkKKyAgICAqOkFJWDoqOls0NTZdKQogCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAogCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKQEAgLTY0MCw3ICs2NTYsNyBAQAogCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKIAogCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8Ci0JCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCQlncmVwIC1xIF9fTFA2NF9fCiAJICAgIHRoZW4KIAkJSFBfQVJDSD0iaHBwYTIuMHciCiAJICAgIGVsc2UKQEAgLTc5MSwxOCArODA3LDI0IEBACiAgICAgaSo6UFcqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKIAlleGl0IDs7Ci0gICAgKjpJbnRlcml4KjpbMzQ1Nl0qKQorICAgICo6SW50ZXJpeCo6KikKICAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCi0JICAgIHg4NikgCisJICAgIHg4NikKIAkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKLQkgICAgRU02NFQgfCBhdXRoZW50aWNhbWQpCisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQogCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OwogCWVzYWMgOzsKICAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCiAJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKIAlleGl0IDs7CisgICAgODY2NDpXaW5kb3dzX05UOiopCisJZWNobyB4ODZfNjQtcGMtbWtzCisJZXhpdCA7OwogICAgIGkqOldpbmRvd3NfTlQqOiogfCBQZW50aXVtKjpXaW5kb3dzX05UKjoqKQogCSMgSG93IGRvIHdlIGtub3cgaXQncyBJbnRlcml4IHJhdGhlciB0aGFuIHRoZSBnZW5lcmljIFBPU0lYIHN1YnN5c3RlbT8KIAkjIEl0IGFsc28gY29uZmxpY3RzIHdpdGggcHJlLTIuMCB2ZXJzaW9ucyBvZiBBVCZUIFVXSU4uIFNob3VsZCB3ZQpAQCAtODMyLDggKzg1NCwyOSBAQAogICAgIGkqODY6TWluaXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5peAogCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworICAgICAgICBlc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCAtcSBsZC5zby4xCisJaWYgdGVzdCAiJD8iID0gMCA7IHRoZW4gTElCQz0ibGliYzEiIDsgZWxzZSBMSUJDPSIiIDsgZmkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUke0xJQkN9CisJZXhpdCA7OwogICAgIGFybSo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCiAJZXhpdCA7OwogICAgIGF2cjMyKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CkBAIC04NDcsNiArODkwLDE3IEBACiAgICAgZnJ2OkxpbnV4Oio6KikKICAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CisgICAgaSo4NjpMaW51eDoqOiopCisJTElCQz1nbnUKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaWZkZWYgX19kaWV0bGliY19fCisJTElCQz1kaWV0bGliYworCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZXhpdCA7OwogICAgIGlhNjQ6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKQEAgLTg1Niw3NCArOTEwLDMzIEBACiAgICAgbTY4KjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqKQorICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCiAJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKIAkjdW5kZWYgQ1BVCi0JI3VuZGVmIG1pcHMKLQkjdW5kZWYgbWlwc2VsCisJI3VuZGVmICR7VU5BTUVfTUFDSElORX0KKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCiAJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwc2VsCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAogCSNlbHNlCiAJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKLQlDUFU9bWlwcworCUNQVT0ke1VOQU1FX01BQ0hJTkV9CiAJI2Vsc2UKIAlDUFU9CiAJI2VuZGlmCiAJI2VuZGlmCiBFT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eQ1BVL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgotCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9Ci0JOzsKLSAgICBtaXBzNjQ6TGludXg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSN1bmRlZiBDUFUKLQkjdW5kZWYgbWlwczY0Ci0JI3VuZGVmIG1pcHM2NGVsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9bWlwczY0ZWwKLQkjZWxzZQotCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCi0JQ1BVPW1pcHM2NAotCSNlbHNlCi0JQ1BVPQotCSNlbmRpZgotCSNlbmRpZgotRU9GCi0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJwotCSAgICAvXkNQVS97Ci0JCXM6IDo6ZwotCQlwCi0JICAgIH0nYCIKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCiAJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KIAk7OwogICAgIG9yMzI6TGludXg6KjoqKQogCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBwcGM6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLWxpbnV4LWdudQorICAgIHBhZHJlOkxpbnV4Oio6KikKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHBwYzY0OkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBhbHBoYTpMaW51eDoqOiopCi0JY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KLQkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7Ci0JICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKLQkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKLQkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7Ci0JICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKLQkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwotICAgICAgICBlc2FjCi0Jb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKyAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQorCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKIAkjIExvb2sgZm9yIENQVSBsZXZlbApAQCAtOTMzLDggKzk0NiwxMSBAQAogCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CiAJZXNhYwogCWV4aXQgOzsKLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwogICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgKQEAgLTk1NCw3MiArOTcwLDkgQEAKICAgICB4ODZfNjQ6TGludXg6KjoqKQogCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHh0ZW5zYTpMaW51eDoqOiopCi0gICAgCWVjaG8geHRlbnNhLXVua25vd24tbGludXgtZ251CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKLSAgICBpKjg2OkxpbnV4Oio6KikKLQkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbwotCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4gY2QgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXZlbnQKLQkjIHByb2JsZW1zIHdpdGggb3RoZXIgcHJvZ3JhbXMgb3IgZGlyZWN0b3JpZXMgY2FsbGVkIGBsZCcgaW4gdGhlIHBhdGguCi0JIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KLQlsZF9zdXBwb3J0ZWRfdGFyZ2V0cz1gY2QgLzsgTENfQUxMPUMgbGQgLS1oZWxwIDI+JjEgXAotCQkJIHwgc2VkIC1uZSAnL3N1cHBvcnRlZCB0YXJnZXRzOi8hZAotCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKLQkJCQkgICAgcy8uKnN1cHBvcnRlZCB0YXJnZXRzOiAqLy8KLQkJCQkgICAgcy8gLiovLwotCQkJCSAgICBwJ2AKLSAgICAgICAgY2FzZSAiJGxkX3N1cHBvcnRlZF90YXJnZXRzIiBpbgotCSAgZWxmMzItaTM4NikKLQkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKLQkJOzsKLQkgIGEub3V0LWkzODYtbGludXgpCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKLQkJZXhpdCA7OwotCSAgY29mZi1pMzg2KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWNvZmYiCi0JCWV4aXQgOzsKLQkgICIiKQotCQkjIEVpdGhlciBhIHByZS1CRkQgYS5vdXQgbGlua2VyIChsaW51eC1nbnVvbGRsZCkgb3IKLQkJIyBvbmUgdGhhdCBkb2VzIG5vdCBnaXZlIHVzIHVzZWZ1bCAtLWhlbHAuCi0JCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251b2xkbGQiCi0JCWV4aXQgOzsKLQllc2FjCi0JIyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZGVmYXVsdCBjb21waWxlciBpcyBhLm91dCBvciBlbGYKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KLQkjaWZkZWYgX19FTEZfXwotCSMgaWZkZWYgX19HTElCQ19fCi0JIyAgaWYgX19HTElCQ19fID49IDIKLQlMSUJDPWdudQotCSMgIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyAgZW5kaWYKLQkjIGVsc2UKLQlMSUJDPWdudWxpYmMxCi0JIyBlbmRpZgotCSNlbHNlCi0JI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX1BHSSkgfHwgZGVmaW5lZChfX1NVTlBST19DKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0NDKQotCUxJQkM9Z251Ci0JI2Vsc2UKLQlMSUJDPWdudWFvdXQKLQkjZW5kaWYKLQkjZW5kaWYKLQkjaWZkZWYgX19kaWV0bGliY19fCi0JTElCQz1kaWV0bGliYwotCSNlbmRpZgotRU9GCi0JZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJwotCSAgICAvXkxJQkMvewotCQlzOiA6OmcKLQkJcAotCSAgICB9J2AiCi0JdGVzdCB4IiR7TElCQ30iICE9IHggJiYgewotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCi0JCWV4aXQKLQl9Ci0JdGVzdCB4IiR7VEVOVEFUSVZFfSIgIT0geCAmJiB7IGVjaG8gIiR7VEVOVEFUSVZFfSI7IGV4aXQ7IH0KLQk7OwogICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCiAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KIAkjIGVhcmxpZXIgdmVyc2lvbnMgYXJlIG1lc3NlZCB1cCBhbmQgcHV0IHRoZSBub2RlbmFtZSBpbiBib3RoCkBAIC0xMDQ4LDcgKzEwMDEsNyBAQAogICAgIGkqODY6c3lsbGFibGU6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQogCWV4aXQgOzsKLSAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuMCo6KikKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKIAllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgIGkqODY6KkRPUzoqOiopCkBAIC0xMDkyLDggKzEwNDUsMTEgQEAKICAgICBwYzoqOio6KikKIAkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKICAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKLSAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KLQllY2hvIGkzODYtcGMtbXNkb3NkamdwcAorICAgICAgICAjIHRoZSBwcm9jZXNzb3IsIHNvIHdlIHBsYXkgc2FmZSBieSBhc3N1bWluZyBpNTg2LgorCSMgTm90ZTogd2hhdGV2ZXIgdGhpcyBpcywgaXQgTVVTVCBiZSB0aGUgc2FtZSBhcyB3aGF0IGNvbmZpZy5zdWIKKwkjIHByaW50cyBmb3IgdGhlICJkamdwcCIgaG9zdCwgb3IgZWxzZSBHREIgY29uZmlndXJ5IHdpbGwgZGVjaWRlIHRoYXQKKwkjIHRoaXMgaXMgYSBjcm9zcy1idWlsZC4KKwllY2hvIGk1ODYtcGMtbXNkb3NkamdwcAogICAgICAgICBleGl0IDs7CiAgICAgSW50ZWw6TWFjaDozKjoqKQogCWVjaG8gaTM4Ni1wYy1tYWNoMwpAQCAtMTEzMSw2ICsxMDg3LDE2IEBACiAgICAgM1szNF0/PzoqOjQuMDoqIHwgM1szNF0/PywqOio6NC4wOiopCiAgICAgICAgIC9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAogICAgICAgICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CiAgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCiAJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKQEAgLTExNDMsNyArMTEwOSw3IEBACiAgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKIAllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7Ci0gICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LjAqOiopCisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCiAJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQpAQCAtMTIwNiw2ICsxMTcyLDkgQEAKICAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgogCWVjaG8gaTU4Ni1wYy1iZW9zCiAJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CiAgICAgU1gtNDpTVVBFUi1VWDoqOiopCiAJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwpAQCAtMTIzMyw2ICsxMjAyLDE2IEBACiAgICAgKjpEYXJ3aW46KjoqKQogCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCiAJY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCisJICAgIGkzODYpCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCSAgdGhlbgorCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKKwkJICBmaQorCQlmaSA7OwogCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OwogCWVzYWMKIAllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CkBAIC0xMzE0LDYgKzEyOTMsOSBAQAogICAgIGkqODY6cmRvczoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKIAlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKIGVzYWMKIAogI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCkBAIC0xNDc0LDkgKzE0NTYsOSBAQAogdGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQogZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCiAKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuZ3Vlc3MKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECiBhbmQKLSAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuc3ViCisgIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKIAogSWYgdGhlIHZlcnNpb24geW91IHJ1biAoJDApIGlzIGFscmVhZHkgdXAgdG8gZGF0ZSwgcGxlYXNlCiBzZW5kIHRoZSBmb2xsb3dpbmcgZGF0YSBhbmQgYW55IGluZm9ybWF0aW9uIHlvdSB0aGluayBtaWdodCBiZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCmluZGV4IGMwNjBmNDQuLjE3YzkxNDUgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKQEAgLTEsMTAgKzEsMTAgQEAKICMhIC9iaW4vc2gKICMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgogIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICBJbmMuCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOQorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMDctMDQtMjknCit0aW1lc3RhbXA9JzIwMDktMTEtMDcnCiAKICMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgogIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCkBAIC0zMiwxMyArMzIsMTYgQEAKIAogCiAjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAotIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIEdOVSBDaGFuZ2VMb2cgZW50cnkuCiAjCiAjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgogIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCiAjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgogIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgogCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKICMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCiAjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcwogIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgpAQCAtNzIsOCArNzUsOCBAQAogdmVyc2lvbj0iXAogR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCiAKLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQotRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTIyLDYgKzEyNSw3IEBACiBjYXNlICRtYXliZV9vcyBpbgogICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAogICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKICAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQogICAgIG9zPS0kbWF5YmVfb3MKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYApAQCAtMTQ4LDEwICsxNTIsMTMgQEAKIAktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAogCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCiAJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCiAJCTs7CisgICAgICAgIC1ibHVlZ2VuZSopCisJICAgICAgICBvcz0tY25rCisJCTs7CiAJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCkBAIC0yNDksMTMgKzI1NiwxNiBAQAogCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKIAl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAogCXwgaXAyayB8IGlxMjAwMCBcCisJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKIAl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAogCXwgbWlwczE2IFwKIAl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKLQl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCiAJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCiAJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCiAJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCiAJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCkBAIC0yNjgsNiArMjc4LDcgQEAKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzdHgzOSB8IG1pcHN0eDM5ZWwgXAogCXwgbW4xMDIwMCB8IG1uMTAzMDAgXAorCXwgbW94aWUgXAogCXwgbXQgXAogCXwgbXNwNDMwIFwKIAl8IG5pb3MgfCBuaW9zMiBcCkBAIC0yNzYsMjAgKzI4NywyMiBAQAogCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKIAl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSB8IHBwY2JlIFwKIAl8IHB5cmFtaWQgXAorCXwgcnggXAogCXwgc2NvcmUgXAotCXwgc2ggfCBzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyM11lIHwgc2hbMzRdZWIgfCBzaGViIHwgc2hiZSB8IHNobGUgfCBzaFsxMjM0XWxlIHwgc2gzZWxlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCiAJfCBzaDY0IHwgc2g2NGxlIFwKIAl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKIAl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCiAJfCBzcHUgfCBzdHJvbmdhcm0gXAogCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKKwl8IHViaWNvbTMyIFwKIAl8IHY4NTAgfCB2ODUwZSBcCiAJfCB3ZTMyayBcCiAJfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKLQl8IHo4aykKKwl8IHo4ayB8IHo4MCkKIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyKQorCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IHBpY29jaGlwKQogCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KIAkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCiAJCW9zPS1ub25lCkBAIC0zMjksMTQgKzM0MiwxNyBAQAogCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKIAl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCiAJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAogCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAogCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKIAl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKIAl8IG1pcHMxNi0qIFwKIAl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCiAJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCiAJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAogCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKIAl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCkBAIC0zNTcsMjEgKzM3MywyNiBAQAogCXwgcGRwMTAtKiB8IHBkcDExLSogfCBwai0qIHwgcGpsLSogfCBwbi0qIHwgcG93ZXItKiBcCiAJfCBwb3dlcnBjLSogfCBwb3dlcnBjNjQtKiB8IHBvd2VycGM2NGxlLSogfCBwb3dlcnBjbGUtKiB8IHBwY2JlLSogXAogCXwgcHlyYW1pZC0qIFwKLQl8IHJvbXAtKiB8IHJzNjAwMC0qIFwKLQl8IHNoLSogfCBzaFsxMjM0XS0qIHwgc2hbMjRdYS0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCisJfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAogCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCiAJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCiAJfCBzcGFyY2xpdGUtKiBcCiAJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCiAJfCB0YWhvZS0qIHwgdGh1bWItKiBcCi0JfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiB8IHRpbGUtKiBcCiAJfCB0cm9uLSogXAorCXwgdWJpY29tMzItKiBcCiAJfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAogCXwgd2UzMmstKiBcCiAJfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKLQl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhLSogXAorCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAogCXwgeW1wLSogXAotCXwgejhrLSopCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJOzsKIAkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCiAJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KQEAgLTQzNSw2ICs0NTYsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwogCQlvcz0tYnNkCiAJCTs7CisJYXJvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1hcm9zCisJCTs7CiAJYXV4KQogCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKIAkJb3M9LWF1eApAQCAtNDQzLDEwICs0NjgsMjYgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CiAJCW9zPS1keW5peAogCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKIAljOTApCiAJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKIAkJb3M9LXVuaWNvcwogCQk7OworICAgICAgICBjZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKIAljb252ZXgtYzEpCiAJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CiAJCW9zPS1ic2QKQEAgLTQ3NSw4ICs1MTYsOCBAQAogCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CiAJCW9zPS11bmljb3NtcAogCQk7OwotCWNyMTZjKQotCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwljcjE2KQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgogCQlvcz0tZWxmCiAJCTs7CiAJY3JkcyB8IHVub3MpCkBAIC01MTQsNiArNTU1LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQogCQlvcz0tc3lzdjMKIAkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OwogCWRqZ3BwKQogCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKIAkJb3M9LW1zZG9zZGpncHAKQEAgLTY2OCw2ICs3MTMsMTQgQEAKIAkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQogCQlvcz0tc3lzdgogCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKIAltODhrLW9tcm9uKikKIAkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCiAJCTs7CkBAIC02NzksNiArNzMyLDkgQEAKIAkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCiAJCW9zPS1zeXN2CiAJCTs7CisgICAgICAgIG1pY3JvYmxhemUpCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKIAltaW5ndzMyKQogCQliYXNpY19tYWNoaW5lPWkzODYtcGMKIAkJb3M9LW1pbmd3MzIKQEAgLTgxMyw2ICs4NjksMTQgQEAKIAkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCiAJCW9zPS1vc2YKIAkJOzsKKwlwYXJpc2MpCisJCWJhc2ljX21hY2hpbmU9aHBwYS11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCXBhcmlzYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGEtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CiAJcGJkKQogCQliYXNpY19tYWNoaW5lPXNwYXJjLXR0aQogCQk7OwpAQCAtMTAyMSw2ICsxMDg1LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgogCQlvcz0tY29mZgogCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CiAJdHgzOSkKIAkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCiAJCTs7CkBAIC0xMDk2LDYgKzExNjQsMTAgQEAKIAkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgogCQlvcz0tc2ltCiAJCTs7CisJejgwLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16ODAtdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CiAJbm9uZSkKIAkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKIAkJb3M9LW5vbmUKQEAgLTExMzQsNyArMTIwNiw3IEBACiAJd2UzMmspCiAJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CiAJCTs7Ci0Jc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKIAkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCiAJCTs7CiAJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCkBAIC0xMjA0LDEwICsxMjc2LDExIEBACiAJIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KIAkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCiAJLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAogCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAta29wZW5zb2xhcmlzKiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCi0JICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKIAkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKIAkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCkBAIC0xMjE2LDcgKzEyODksNyBAQAogCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKIAkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCiAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCiAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAogCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKIAkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCkBAIC0xMjI2LDcgKzEyOTksNyBAQAogCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKIAkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKIAkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAotCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqKQorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKIAkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCiAJCTs7CiAJLXFueCopCkBAIC0xMzU2LDYgKzE0MjksOSBAQAogCS16dm1vZSkKIAkJb3M9LXp2bW9lCiAJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CiAJLW5vbmUpCiAJCTs7CiAJKikKQEAgLTE1NTMsNyArMTYyOSw3IEBACiAJCQktc3Vub3MqKQogCQkJCXZlbmRvcj1zdW4KIAkJCQk7OwotCQkJLWFpeCopCisJCQktY25rKnwtYWl4KikKIAkJCQl2ZW5kb3I9aWJtCiAJCQkJOzsKIAkJCS1iZW9zKikKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKaW5kZXggNjk4NGZjNi4uYzVjNzBiMSAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUKQEAgLTEsNjIgKzEsODUgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxIGZvciBsaWJmZmkgMy4wLjUuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSBmb3IgbGliZmZpIDMuMC4xMHJjMC4KICMKICMgUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+LgogIworIwogIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0jIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyBJbmMuCisjCisjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCiBEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwogICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7CisgIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAorICAqcG9zaXgqKSA6CisgICAgc2V0IC1vIHBvc2l4IDs7ICMoCisgICopIDoKKyAgICAgOzsKIGVzYWMKLQogZmkKIAogCi0KLQotIyBQQVRIIG5lZWRzIENSCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKIAogIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCiBpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCi0gIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKLSAgY2htb2QgK3ggY29uZiQkLnNoCi0gIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIGVsc2UKLSAgICBQQVRIX1NFUEFSQVRPUj06Ci0gIGZpCi0gIHJtIC1mIGNvbmYkJC5zaAotZmkKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKLWVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CiBmaQogCiAKQEAgLTY1LDIwICs4OCwxOCBAQAogIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCiAjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKICMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKLWFzX25sPScKLScKIElGUz0iICIiCSRhc19ubCIKIAogIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KLWNhc2UgJDAgaW4KK2Nhc2UgJDAgaW4gIygoCiAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotZG9uZQorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogICAgICA7OwpAQCAtODksMzIgKzExMCwyNzEgQEAKICAgYXNfbXlzZWxmPSQwCiBmaQogaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICBlY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKIGZpCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotZm9yIGFzX3ZhciBpbiBFTlYgTUFJTCBNQUlMUEFUSAotZG8gKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKIGRvbmUKIFBTMT0nJCAnCiBQUzI9Jz4gJwogUFM0PScrICcKIAogIyBOTFMgbnVpc2FuY2VzLgotZm9yIGFzX3ZhciBpbiBcCi0gIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCi0gIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCi0gIExDX1RFTEVQSE9ORSBMQ19USU1FCi1kbwotICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgotICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgotICBlbHNlCi0gICAgKCRhc191bnNldCAkYXNfdmFyKSA+L2Rldi9udWxsIDI+JjEgJiYgJGFzX3Vuc2V0ICRhc192YXIKLSAgZmkKLWRvbmUKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKIAotIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiID0geDsgdGhlbgorICBhc19ib3VybmVfY29tcGF0aWJsZT0iaWYgdGVzdCAtbiBcIlwke1pTSF9WRVJTSU9OK3NldH1cIiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKyIKKyAgYXNfcmVxdWlyZWQ9ImFzX2ZuX3JldHVybiAoKSB7IChleGl0IFwkMSk7IH0KK2FzX2ZuX3N1Y2Nlc3MgKCkgeyBhc19mbl9yZXR1cm4gMDsgfQorYXNfZm5fZmFpbHVyZSAoKSB7IGFzX2ZuX3JldHVybiAxOyB9Cithc19mbl9yZXRfc3VjY2VzcyAoKSB7IHJldHVybiAwOyB9Cithc19mbl9yZXRfZmFpbHVyZSAoKSB7IHJldHVybiAxOyB9CisKK2V4aXRjb2RlPTAKK2FzX2ZuX3N1Y2Nlc3MgfHwgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fZmFpbHVyZSBzdWNjZWVkZWQuOyB9Cithc19mbl9yZXRfc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X3N1Y2Nlc3MgZmFpbGVkLjsgfQorYXNfZm5fcmV0X2ZhaWx1cmUgJiYgeyBleGl0Y29kZT0xOyBlY2hvIGFzX2ZuX3JldF9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2lmICggc2V0IHg7IGFzX2ZuX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gXCJcJDFcIiApOyB0aGVuIDoKKworZWxzZQorICBleGl0Y29kZT0xOyBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KK2ZpCit0ZXN0IHhcJGV4aXRjb2RlID0geDAgfHwgZXhpdCAxIgorICBhc19zdWdnZXN0ZWQ9IiAgYXNfbGluZW5vXzE9Ijthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCRMSU5FTk87YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQiIGFzX2xpbmVub18xYT1cJExJTkVOTworICBhc19saW5lbm9fMj0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzJhPVwkTElORU5PCisgIGV2YWwgJ3Rlc3QgXCJ4XCRhc19saW5lbm9fMSdcJGFzX3J1bidcIiAhPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiICYmCisgIHRlc3QgXCJ4XGBleHByIFwkYXNfbGluZW5vXzEnXCRhc19ydW4nICsgMVxgXCIgPSBcInhcJGFzX2xpbmVub18yJ1wkYXNfcnVuJ1wiJyB8fCBleGl0IDEKK3Rlc3QgXCQoKCAxICsgMSApKSA9IDIgfHwgZXhpdCAxIgorICBpZiAoZXZhbCAiJGFzX3JlcXVpcmVkIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBhc19oYXZlX3JlcXVpcmVkPXllcworZWxzZQorICBhc19oYXZlX3JlcXVpcmVkPW5vCitmaQorICBpZiB0ZXN0IHgkYXNfaGF2ZV9yZXF1aXJlZCA9IHh5ZXMgJiYgKGV2YWwgIiRhc19zdWdnZXN0ZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorYXNfZm91bmQ9ZmFsc2UKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgYXNfZm91bmQ9OgorICBjYXNlICRhc19kaXIgaW4gIygKKwkgLyopCisJICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSAgICAgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgorCSAgICAgYXNfc2hlbGw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgaWYgeyB0ZXN0IC1mICIkYXNfc2hlbGwiIHx8IHRlc3QgLWYgIiRhc19zaGVsbC5leGUiOyB9ICYmCisJCSAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJGFzX3NoZWxsIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kYXNfc2hlbGwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKKwkJICAgaWYgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfc3VnZ2VzdGVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgYnJlYWsgMgorZmkKK2ZpCisJICAgZG9uZTs7CisgICAgICAgZXNhYworICBhc19mb3VuZD1mYWxzZQorZG9uZQorJGFzX2ZvdW5kIHx8IHsgaWYgeyB0ZXN0IC1mICIkU0hFTEwiIHx8IHRlc3QgLWYgIiRTSEVMTC5leGUiOyB9ICYmCisJICAgICAgeyAkYXNfZWNobyAiJGFzX2JvdXJuZV9jb21wYXRpYmxlIiIkYXNfcmVxdWlyZWQiIHwgYXNfcnVuPWEgIiRTSEVMTCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBDT05GSUdfU0hFTEw9JFNIRUxMIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitmaTsgfQorSUZTPSRhc19zYXZlX0lGUworCisKKyAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuIDoKKyAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKwkjIG5ldXRyYWxpemF0aW9uIHZhbHVlIGZvciBzaGVsbHMgd2l0aG91dCB1bnNldDsgYW5kIHRoaXMgYWxzbworCSMgd29ya3MgYXJvdW5kIHNoZWxscyB0aGF0IGNhbm5vdCB1bnNldCBub25leGlzdGVudCB2YXJpYWJsZXMuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwlleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9CitmaQorCisgICAgaWYgdGVzdCB4JGFzX2hhdmVfcmVxdWlyZWQgPSB4bm87IHRoZW4gOgorICAkYXNfZWNobyAiJDA6IFRoaXMgc2NyaXB0IHJlcXVpcmVzIGEgc2hlbGwgbW9yZSBtb2Rlcm4gdGhhbiBhbGwiCisgICRhc19lY2hvICIkMDogdGhlIHNoZWxscyB0aGF0IEkgZm91bmQgb24geW91ciBzeXN0ZW0uIgorICBpZiB0ZXN0IHgke1pTSF9WRVJTSU9OK3NldH0gPSB4c2V0IDsgdGhlbgorICAgICRhc19lY2hvICIkMDogSW4gcGFydGljdWxhciwgenNoICRaU0hfVkVSU0lPTiBoYXMgYnVncyBhbmQgc2hvdWxkIgorICAgICRhc19lY2hvICIkMDogYmUgdXBncmFkZWQgdG8genNoIDQuMy40IG9yIGxhdGVyLiIKKyAgZWxzZQorICAgICRhc19lY2hvICIkMDogUGxlYXNlIHRlbGwgYnVnLWF1dG9jb25mQGdudS5vcmcgYW5kCiskMDogaHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbCBhYm91dCB5b3VyIHN5c3RlbSwKKyQwOiBpbmNsdWRpbmcgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcworJDA6IG1lc3NhZ2UuIFRoZW4gaW5zdGFsbCBhIG1vZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuCiskMDogdGhlIHNjcmlwdCB1bmRlciBzdWNoIGEgc2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiIKKyAgZmkKKyAgZXhpdCAxCitmaQorZmkKK2ZpCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorZXhwb3J0IFNIRUxMCisjIFVuc2V0IG1vcmUgdmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29scy4KK0NMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9Cit1bnNldCBDTElDT0xPUl9GT1JDRSBHUkVQX09QVElPTlMKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIFNoZWxsIEZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCisjIGFzX2ZuX2Vycm9yIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggc3RhdHVzICQ/LCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JD87IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkMyI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQyIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQxIiA+JiQzCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMSIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKIGlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCiAgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKQEAgLTEyOCwxMyArMzg4LDE3IEBACiAgIGFzX2Jhc2VuYW1lPWZhbHNlCiBmaQogCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCiAKLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KIGFzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgvIiQwIiB8CiskYXNfZWNobyBYLyIkMCIgfAogICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMTQ5LDI5NCArNDEzLDE5IEBACiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKIAotIyBDRFBBVEguCi0kYXNfdW5zZXQgQ0RQQVRICisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKIAogCi1pZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCi0gIGlmIChldmFsICI6IikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLWVsc2UKLSAgYXNfaGF2ZV9yZXF1aXJlZD1ubwotZmkKLQotICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0geWVzICYmIAkgKGV2YWwgIjoKLShhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0IFwkMSkKLX0KLWFzX2Z1bmNfc3VjY2VzcyAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDAKLX0KLWFzX2Z1bmNfZmFpbHVyZSAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDEKLX0KLWFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgewotICByZXR1cm4gMAotfQotYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Ci0gIHJldHVybiAxCi19Ci0KLWV4aXRjb2RlPTAKLWlmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCi1maQotCi10ZXN0IFwkZXhpdGNvZGUgPSAwKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLQotKAotICBhc19saW5lbm9fMT1cJExJTkVOTwotICBhc19saW5lbm9fMj1cJExJTkVOTwotICB0ZXN0IFwieFwkYXNfbGluZW5vXzFcIiAhPSBcInhcJGFzX2xpbmVub18yXCIgJiYKLSAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSArIDFcYFwiID0gXCJ4XCRhc19saW5lbm9fMlwiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLSIpIDI+IC9kZXYvbnVsbDsgdGhlbgotICA6Ci1lbHNlCi0gIGFzX2NhbmRpZGF0ZV9zaGVsbHM9Ci0gICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSAgICAgYXNfY2FuZGlkYXRlX3NoZWxscz0iJGFzX2NhbmRpZGF0ZV9zaGVsbHMgJGFzX2Rpci8kYXNfYmFzZSIKLQkgICBkb25lOzsKLSAgICAgICBlc2FjCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLQotICAgICAgZm9yIGFzX3NoZWxsIGluICRhc19jYW5kaWRhdGVfc2hlbGxzICRTSEVMTDsgZG8KLQkgIyBUcnkgb25seSBzaGVsbHMgdGhhdCBleGlzdCwgdG8gc2F2ZSBzZXZlcmFsIGZvcmtzLgotCSBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKLQkJeyAoIiRhc19zaGVsbCIpIDI+IC9kZXYvbnVsbCA8PFxfQVNFT0YKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4KLSAgKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7Ci1lc2FjCi0KLWZpCi0KLQotOgotX0FTRU9GCi19OyB0aGVuCi0gIENPTkZJR19TSEVMTD0kYXNfc2hlbGwKLQkgICAgICAgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLQkgICAgICAgaWYgeyAiJGFzX3NoZWxsIiAyPiAvZGV2L251bGwgPDxcX0FTRU9GCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluCi0gICpwb3NpeCopIHNldCAtbyBwb3NpeCA7OwotZXNhYwotCi1maQotCi0KLToKLShhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0ICQxKQotfQotYXNfZnVuY19zdWNjZXNzICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMAotfQotYXNfZnVuY19mYWlsdXJlICgpIHsKLSAgYXNfZnVuY19yZXR1cm4gMQotfQotYXNfZnVuY19yZXRfc3VjY2VzcyAoKSB7Ci0gIHJldHVybiAwCi19Ci1hc19mdW5jX3JldF9mYWlsdXJlICgpIHsKLSAgcmV0dXJuIDEKLX0KLQotZXhpdGNvZGU9MAotaWYgYXNfZnVuY19zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfc3VjY2VzcyBmYWlsZWQuCi1maQotCi1pZiBhc19mdW5jX2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiBhc19mdW5jX3JldF9zdWNjZXNzOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfZmFpbHVyZTsgdGhlbgotICBleGl0Y29kZT0xCi0gIGVjaG8gYXNfZnVuY19yZXRfZmFpbHVyZSBzdWNjZWVkZWQuCi1maQotCi1pZiAoIHNldCB4OyBhc19mdW5jX3JldF9zdWNjZXNzIHkgJiYgdGVzdCB4ID0gIiQxIiApOyB0aGVuCi0gIDoKLWVsc2UKLSAgZXhpdGNvZGU9MQotICBlY2hvIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIG5vdCBzYXZlZC4KLWZpCi0KLXRlc3QgJGV4aXRjb2RlID0gMCkgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0KLSgKLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xICsgMWAiID0gIngkYXNfbGluZW5vXzIiKSB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KLQotX0FTRU9GCi19OyB0aGVuCi0gIGJyZWFrCi1maQotCi1maQotCi0gICAgICBkb25lCi0KLSAgICAgIGlmIHRlc3QgIngkQ09ORklHX1NIRUxMIiAhPSB4OyB0aGVuCi0gIGZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WCi0gICAgICAgIGRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCi0gICAgICAgIGRvbmUKLSAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotICAgICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJGFzX215c2VsZiIgJHsxKyIkQCJ9Ci1maQotCi0KLSAgICBpZiB0ZXN0ICRhc19oYXZlX3JlcXVpcmVkID0gbm87IHRoZW4KLSAgZWNobyBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIHRoZQotICAgICAgZWNobyBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiAgUGxlYXNlIGluc3RhbGwgYQotICAgICAgZWNobyBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1biB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYQotICAgICAgZWNobyBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuCi0gICAgICB7IChleGl0IDEpOyBleGl0IDE7IH0KLWZpCi0KLQotZmkKLQotZmkKLQotCi0KLShldmFsICJhc19mdW5jX3JldHVybiAoKSB7Ci0gIChleGl0IFwkMSkKLX0KLWFzX2Z1bmNfc3VjY2VzcyAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDAKLX0KLWFzX2Z1bmNfZmFpbHVyZSAoKSB7Ci0gIGFzX2Z1bmNfcmV0dXJuIDEKLX0KLWFzX2Z1bmNfcmV0X3N1Y2Nlc3MgKCkgewotICByZXR1cm4gMAotfQotYXNfZnVuY19yZXRfZmFpbHVyZSAoKSB7Ci0gIHJldHVybiAxCi19Ci0KLWV4aXRjb2RlPTAKLWlmIGFzX2Z1bmNfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3N1Y2Nlc3MgZmFpbGVkLgotZmkKLQotaWYgYXNfZnVuY19mYWlsdXJlOyB0aGVuCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgYXNfZnVuY19yZXRfc3VjY2VzczsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBhc19mdW5jX3JldF9zdWNjZXNzIGZhaWxlZC4KLWZpCi0KLWlmIGFzX2Z1bmNfcmV0X2ZhaWx1cmU7IHRoZW4KLSAgZXhpdGNvZGU9MQotICBlY2hvIGFzX2Z1bmNfcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLgotZmkKLQotaWYgKCBzZXQgeDsgYXNfZnVuY19yZXRfc3VjY2VzcyB5ICYmIHRlc3QgeCA9IFwiXCQxXCIgKTsgdGhlbgotICA6Ci1lbHNlCi0gIGV4aXRjb2RlPTEKLSAgZWNobyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgd2VyZSBub3Qgc2F2ZWQuCi1maQotCi10ZXN0IFwkZXhpdGNvZGUgPSAwIikgfHwgewotICBlY2hvIE5vIHNoZWxsIGZvdW5kIHRoYXQgc3VwcG9ydHMgc2hlbGwgZnVuY3Rpb25zLgotICBlY2hvIFBsZWFzZSB0ZWxsIGF1dG9jb25mQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sCi0gIGVjaG8gaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKLSAgZWNobyBtZXNzYWdlCi19Ci0KLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSArIDFgIiA9ICJ4JGFzX2xpbmVub18yIiB8fCB7Ci0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBhZnRlciBlYWNoIGxpbmUgdXNpbmcgJExJTkVOTzsgdGhlIHNlY29uZCAnc2VkJwotICAjIGRvZXMgdGhlIHJlYWwgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaAotICAjIGxpbmUtbnVtYmVyIGxpbmUgd2l0aCB0aGUgbGluZSBjb250YWluaW5nICRMSU5FTk8sIGFuZCBhcHBlbmRzCi0gICMgdHJhaWxpbmcgJy0nIGR1cmluZyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwKLSAgIyBjYXNlIGF0IGxpbmUgZW5kLgotICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKLSAgIyBzY3JpcHRzIHdpdGggb3B0aW1pemF0aW9uIGhlbHAgZnJvbSBQYW9sbyBCb256aW5pLiAgQmxhbWUgTGVlCi0gICMgRS4gTWNNYWhvbiAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKICAgc2VkIC1uICcKICAgICBwCiAgICAgL1skXUxJTkVOTy89CkBAIC00NTMsOCArNDQyLDcgQEAKICAgICAgIHMvLVxuLiovLwogICAgICcgPiRhc19tZS5saW5lbm8gJiYKICAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8Ci0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKQEAgLTQ2NCw0OSArNDUyLDQwIEBACiAgIGV4aXQKIH0KIAotCi1pZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZGlybmFtZT1kaXJuYW1lCi1lbHNlCi0gIGFzX2Rpcm5hbWU9ZmFsc2UKLWZpCi0KIEVDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9Ci1jYXNlIGBlY2hvIC1uIHhgIGluCitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAogLW4qKQotICBjYXNlIGBlY2hvICd4XGMnYCBpbgorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KICAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCi0gICopICAgRUNIT19DPSdcYyc7OworICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OwogICBlc2FjOzsKICopCiAgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKLSAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCi0gIGFzX2V4cHI9ZXhwcgotZWxzZQotICBhc19leHByPWZhbHNlCi1maQotCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQogaWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCiAgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKIGVsc2UKICAgcm0gLWYgY29uZiQkLmRpcgotICBta2RpciBjb25mJCQuZGlyCisgIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIGZpCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9J2xuIC1zJwotICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgotICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgotICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KLSAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KLSAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKICAgICBhc19sbl9zPSdjcCAtcCcKLWVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9bG4KKyAgZmkKIGVsc2UKICAgYXNfbG5fcz0nY3AgLXAnCiBmaQpAQCAtNTE0LDcgKzQ5Myw3IEBACiBybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQpAQCAtNTMxLDEyICs1MTAsMTIgQEAKICAgYXNfdGVzdF94PScKICAgICBldmFsIHNoIC1jICdcJycKICAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgotICAgICAgICB0ZXN0IC1kICIkMS8uIjsKKwl0ZXN0IC1kICIkMS8uIjsKICAgICAgIGVsc2UKLQljYXNlICQxIGluCi0gICAgICAgIC0qKXNldCAiLi8kMSI7OworCWNhc2UgJDEgaW4gIygKKwktKilzZXQgIi4vJDEiOzsKIAllc2FjOwotCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluCisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCiAJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQogICAgICdcJycgc2gKICAgJwpAQCAtNTUxLDI2ICs1MzAsMjUgQEAKIAogCiAKLQogIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgogU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KIAotY2FzZSBYJEVDSE8gaW4KK2Nhc2UgWCRsdF9FQ0hPIGluCiBYKi0tZmFsbGJhY2stZWNobykKICAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KLSAgRUNITz1gZWNobyAiJEVDSE8iIHwgc2VkICdzLFxcXFxcJFxcJDAsJyQwJywnYAorICBFQ0hPPWBlY2hvICIkbHRfRUNITyIgfCBzZWQgJ3MsXFxcXFwkXFwkMCwnJDAnLCdgCiAgIDs7CiBlc2FjCiAKLWVjaG89JHtFQ0hPLWVjaG99CitFQ0hPPSR7bHRfRUNITy1lY2hvfQogaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgogICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KICAgc2hpZnQKIGVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KICAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgogICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKICAgOgogZWxzZQogICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCkBAIC01ODAsOSArNTU4LDkgQEAKIGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCiAgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCiAgIHNoaWZ0Ci0gIGNhdCA8PEVPRgorICBjYXQgPDxfTFRfRU9GCiAkKgotRU9GCitfTFRfRU9GCiAgIGV4aXQgMAogZmkKIApAQCAtNTkwLDEyMiArNTY4LDExOCBAQAogIyBpZiBDRFBBVEggaXMgc2V0LgogKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAycSAiJDAiJyAnZWNobyB0ZXN0JzsgZG8KLSAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgotICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgotICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKLSAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotZmkKK2lmIHRlc3QgLXogIiRsdF9FQ0hPIjsgdGhlbgorICBpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICAjIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKKyAgICBmb3IgY21kIGluICdzZWQgNTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMnEgIiQwIicgJ2VjaG8gdGVzdCc7IGRvCisgICAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgICAgaWYgeyBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgOyB9IDI+L2Rldi9udWxsICYmCisJIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsCisgICAgICB0aGVuCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKKyAgZmkKIAotaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgOgotZWxzZQotICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKLSAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZwotICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJwotICAjCi0gICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKyAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCisgICAgIworICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KIAotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRkaXIvZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgICBFQ0hPPSIkZGlyL2VjaG8iCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGRvbmUKICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgotICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgZWNobz0iJGRpci9lY2hvIgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgogCi0gIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgotICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgotICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLSAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCi0gICAgICBlY2hvPSdwcmludCAtcicKLSAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgotCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCi0gICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KLSAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAotICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCi0gICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0gICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQlDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAotCWV4cG9ydCBDT05GSUdfU0hFTEwKLQlTSEVMTD0iJENPTkZJR19TSEVMTCIKLQlleHBvcnQgU0hFTEwKLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCi0JICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JZWNobz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCisgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICAgIGlmIHRlc3QgIlhgeyBwcmludCAtciAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICAgIEVDSE89J3ByaW50IC1yJworICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKwkgICB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KICAgICAgIGVsc2UKLQkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgotCXByZXY9OgorICAgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICAgIEVDSE89J3ByaW50ZiAlc1xuJworICAgICAgICBpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWB7ICRFQ0hPICIkZWNob190ZXN0X3N0cmluZyI7IH0gMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJICAjIENvb2wsIHByaW50ZiB3b3JrcworCSAgOgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgorCSAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbHNlCisJICAjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgorCSAgcHJldj06CiAKLQlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCA1MHEgIiQwIic7IGRvCi0JICBpZiAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiKSAyPi9kZXYvbnVsbAotCSAgdGhlbgotCSAgICBicmVhaworCSAgZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgNTBxICIkMCInOyBkbworCSAgICBpZiB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIjsgfSAyPi9kZXYvbnVsbAorCSAgICB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgcHJldj0iJGNtZCIKKwkgIGRvbmUKKworCSAgaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCisJICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCisJICAgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICAgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9CisJICBlbHNlCisJICAgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCisJICAgIEVDSE89ZWNobwogCSAgZmkKLQkgIHByZXY9IiRjbWQiCi0JZG9uZQotCi0JaWYgdGVzdCAiJHByZXYiICE9ICdzZWQgNTBxICIkMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICIkMCIgJHsxKyIkQCJ9Ci0JZWxzZQotCSAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KLQkgIGVjaG89ZWNobwotCWZpCisgICAgICAgIGZpCiAgICAgICBmaQogICAgIGZpCiAgIGZpCiBmaQotZmkKIAogIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQogIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCi1FQ0hPPSRlY2hvCi1pZiB0ZXN0ICJYJEVDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFwkMCAtLWZhbGxiYWNrLWVjaG8iCitsdF9FQ0hPPSRFQ0hPCitpZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KKyAgIGx0X0VDSE89IiRDT05GSUdfU0hFTEwgXFxcJFwkMCAtLWZhbGxiYWNrLWVjaG8iCiBmaQogCiAKIAogCi10YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFgKLQotdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Rjc3Ci0KLWV4ZWMgNzwmMCA8L2Rldi9udWxsIDY+JjEKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQogCiAjIE5hbWUgb2YgdGhlIGhvc3QuCiAjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBMaW51eCkgcmV0dXJucyBhIGJvZ3VzIGV4aXQgc3RhdHVzLApAQCAtNzIzLDE0ICs2OTcsMTQgQEAKIHN1YmRpcnM9CiBNRkxBR1M9CiBNQUtFRkxBR1M9Ci1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQogCiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0nbGliZmZpJwogUEFDS0FHRV9UQVJOQU1FPSdsaWJmZmknCi1QQUNLQUdFX1ZFUlNJT049JzMuMC41JwotUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjAuNScKK1BBQ0tBR0VfVkVSU0lPTj0nMy4wLjEwcmMwJworUEFDS0FHRV9TVFJJTkc9J2xpYmZmaSAzLjAuMTByYzAnCiBQQUNLQUdFX0JVR1JFUE9SVD0naHR0cDovL2djYy5nbnUub3JnL2J1Z3MuaHRtbCcKK1BBQ0tBR0VfVVJMPScnCiAKICMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KIGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKQEAgLTc2OCwyMDAgKzc0MiwyMTkgQEAKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAKLWFjX3N1YnN0X3ZhcnM9J1NIRUxMCi1QQVRIX1NFUEFSQVRPUgotUEFDS0FHRV9OQU1FCi1QQUNLQUdFX1RBUk5BTUUKLVBBQ0tBR0VfVkVSU0lPTgotUEFDS0FHRV9TVFJJTkcKLVBBQ0tBR0VfQlVHUkVQT1JUCi1leGVjX3ByZWZpeAotcHJlZml4Ci1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lCi1iaW5kaXIKLXNiaW5kaXIKLWxpYmV4ZWNkaXIKLWRhdGFyb290ZGlyCi1kYXRhZGlyCi1zeXNjb25mZGlyCi1zaGFyZWRzdGF0ZWRpcgotbG9jYWxzdGF0ZWRpcgotaW5jbHVkZWRpcgotb2xkaW5jbHVkZWRpcgotZG9jZGlyCi1pbmZvZGlyCi1odG1sZGlyCi1kdmlkaXIKLXBkZmRpcgotcHNkaXIKLWxpYmRpcgotbG9jYWxlZGlyCi1tYW5kaXIKLURFRlMKLUVDSE9fQwotRUNIT19OCi1FQ0hPX1QKLUxJQlMKLWJ1aWxkX2FsaWFzCi1ob3N0X2FsaWFzCi10YXJnZXRfYWxpYXMKLWJ1aWxkCi1idWlsZF9jcHUKLWJ1aWxkX3ZlbmRvcgotYnVpbGRfb3MKLWhvc3QKLWhvc3RfY3B1Ci1ob3N0X3ZlbmRvcgotaG9zdF9vcwotdGFyZ2V0Ci10YXJnZXRfY3B1Ci10YXJnZXRfdmVuZG9yCi10YXJnZXRfb3MKLUlOU1RBTExfUFJPR1JBTQotSU5TVEFMTF9TQ1JJUFQKLUlOU1RBTExfREFUQQotYW1fX2lzcmMKLUNZR1BBVEhfVwotUEFDS0FHRQotVkVSU0lPTgotQUNMT0NBTAotQVVUT0NPTkYKLUFVVE9NQUtFCi1BVVRPSEVBREVSCi1NQUtFSU5GTwotaW5zdGFsbF9zaAotU1RSSVAKLUlOU1RBTExfU1RSSVBfUFJPR1JBTQotbWtkaXJfcAotQVdLCi1TRVRfTUFLRQotYW1fX2xlYWRpbmdfZG90Ci1BTVRBUgotYW1fX3RhcgotYW1fX3VudGFyCi1DQwotQ0ZMQUdTCi1MREZMQUdTCi1DUFBGTEFHUwotYWNfY3RfQ0MKLUVYRUVYVAotT0JKRVhUCi1ERVBESVIKLWFtX19pbmNsdWRlCi1hbV9fcXVvdGUKLUFNREVQX1RSVUUKLUFNREVQX0ZBTFNFCi1BTURFUEJBQ0tTTEFTSAotQ0NERVBNT0RFCi1hbV9fZmFzdGRlcENDX1RSVUUKLWFtX19mYXN0ZGVwQ0NfRkFMU0UKLUNDQVMKLUNDQVNGTEFHUwotQ0NBU0RFUE1PREUKLWFtX19mYXN0ZGVwQ0NBU19UUlVFCi1hbV9fZmFzdGRlcENDQVNfRkFMU0UKLVNFRAotR1JFUAotRUdSRVAKLUxOX1MKLUVDSE8KLUFSCi1SQU5MSUIKLUNQUAotQ1hYCi1DWFhGTEFHUwotYWNfY3RfQ1hYCi1DWFhERVBNT0RFCi1hbV9fZmFzdGRlcENYWF9UUlVFCi1hbV9fZmFzdGRlcENYWF9GQUxTRQotQ1hYQ1BQCi1GNzcKLUZGTEFHUwotYWNfY3RfRjc3Ci1MSUJUT09MCi1NQUlOVEFJTkVSX01PREVfVFJVRQotTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCi1NQUlOVAotVEVTVFNVQkRJUl9UUlVFCi1URVNUU1VCRElSX0ZBTFNFCi1BTV9SVU5URVNURkxBR1MKLU1JUFNfVFJVRQotTUlQU19GQUxTRQotU1BBUkNfVFJVRQotU1BBUkNfRkFMU0UKLVg4Nl9UUlVFCi1YODZfRkFMU0UKLVg4Nl9GUkVFQlNEX1RSVUUKLVg4Nl9GUkVFQlNEX0ZBTFNFCi1YODZfV0lOMzJfVFJVRQotWDg2X1dJTjMyX0ZBTFNFCi1YODZfREFSV0lOX1RSVUUKLVg4Nl9EQVJXSU5fRkFMU0UKLUFMUEhBX1RSVUUKLUFMUEhBX0ZBTFNFCi1JQTY0X1RSVUUKLUlBNjRfRkFMU0UKLU0zMlJfVFJVRQotTTMyUl9GQUxTRQotTTY4S19UUlVFCi1NNjhLX0ZBTFNFCi1QT1dFUlBDX1RSVUUKLVBPV0VSUENfRkFMU0UKLVBPV0VSUENfQUlYX1RSVUUKLVBPV0VSUENfQUlYX0ZBTFNFCi1QT1dFUlBDX0RBUldJTl9UUlVFCi1QT1dFUlBDX0RBUldJTl9GQUxTRQotUE9XRVJQQ19GUkVFQlNEX1RSVUUKLVBPV0VSUENfRlJFRUJTRF9GQUxTRQotQVJNX1RSVUUKLUFSTV9GQUxTRQotTElCRkZJX0NSSVNfVFJVRQotTElCRkZJX0NSSVNfRkFMU0UKLUZSVl9UUlVFCi1GUlZfRkFMU0UKLVMzOTBfVFJVRQotUzM5MF9GQUxTRQotWDg2XzY0X1RSVUUKLVg4Nl82NF9GQUxTRQotU0hfVFJVRQotU0hfRkFMU0UKLVNINjRfVFJVRQotU0g2NF9GQUxTRQotUEFfTElOVVhfVFJVRQotUEFfTElOVVhfRkFMU0UKLVBBX0hQVVhfVFJVRQotUEFfSFBVWF9GQUxTRQotUEE2NF9IUFVYX1RSVUUKLVBBNjRfSFBVWF9GQUxTRQotQUxMT0NBCi1IQVZFX0xPTkdfRE9VQkxFCi1UQVJHRVQKLVRBUkdFVERJUgotdG9vbGV4ZWNkaXIKLXRvb2xleGVjbGliZGlyCithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUwogTElCT0JKUwotTFRMSUJPQkpTJwordG9vbGV4ZWNsaWJkaXIKK3Rvb2xleGVjZGlyCitUQVJHRVRESVIKK1RBUkdFVAorSEFWRV9MT05HX0RPVUJMRQorQUxMT0NBCitQQTY0X0hQVVhfRkFMU0UKK1BBNjRfSFBVWF9UUlVFCitQQV9IUFVYX0ZBTFNFCitQQV9IUFVYX1RSVUUKK1BBX0xJTlVYX0ZBTFNFCitQQV9MSU5VWF9UUlVFCitTSDY0X0ZBTFNFCitTSDY0X1RSVUUKK1NIX0ZBTFNFCitTSF9UUlVFCitYODZfNjRfRkFMU0UKK1g4Nl82NF9UUlVFCitTMzkwX0ZBTFNFCitTMzkwX1RSVUUKK0ZSVl9GQUxTRQorRlJWX1RSVUUKK0xJQkZGSV9DUklTX0ZBTFNFCitMSUJGRklfQ1JJU19UUlVFCitBVlIzMl9GQUxTRQorQVZSMzJfVFJVRQorQVJNX0ZBTFNFCitBUk1fVFJVRQorUE9XRVJQQ19GUkVFQlNEX0ZBTFNFCitQT1dFUlBDX0ZSRUVCU0RfVFJVRQorUE9XRVJQQ19EQVJXSU5fRkFMU0UKK1BPV0VSUENfREFSV0lOX1RSVUUKK1BPV0VSUENfQUlYX0ZBTFNFCitQT1dFUlBDX0FJWF9UUlVFCitQT1dFUlBDX0ZBTFNFCitQT1dFUlBDX1RSVUUKK002OEtfRkFMU0UKK002OEtfVFJVRQorTTMyUl9GQUxTRQorTTMyUl9UUlVFCitJQTY0X0ZBTFNFCitJQTY0X1RSVUUKK0FMUEhBX0ZBTFNFCitBTFBIQV9UUlVFCitYODZfREFSV0lOX0ZBTFNFCitYODZfREFSV0lOX1RSVUUKK1g4Nl9XSU42NF9GQUxTRQorWDg2X1dJTjY0X1RSVUUKK1g4Nl9XSU4zMl9GQUxTRQorWDg2X1dJTjMyX1RSVUUKK1g4Nl9GUkVFQlNEX0ZBTFNFCitYODZfRlJFRUJTRF9UUlVFCitYODZfRkFMU0UKK1g4Nl9UUlVFCitTUEFSQ19GQUxTRQorU1BBUkNfVFJVRQorTUlQU19GQUxTRQorTUlQU19UUlVFCitBTV9MVExERkxBR1MKK0FNX1JVTlRFU1RGTEFHUworVEVTVFNVQkRJUl9GQUxTRQorVEVTVFNVQkRJUl9UUlVFCitNQUlOVAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCitNQUlOVEFJTkVSX01PREVfVFJVRQorQ1BQCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorbHRfRUNITworUkFOTElCCitBUgorT0JKRFVNUAorTE5fUworTk0KK2FjX2N0X0RVTVBCSU4KK0RVTVBCSU4KK0xECitGR1JFUAorRUdSRVAKK0dSRVAKK1NFRAorTElCVE9PTAorYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFCithbV9fZmFzdGRlcENDQVNfVFJVRQorQ0NBU0RFUE1PREUKK0NDQVNGTEFHUworQ0NBUworYW1fX2Zhc3RkZXBDQ19GQUxTRQorYW1fX2Zhc3RkZXBDQ19UUlVFCitDQ0RFUE1PREUKK0FNREVQQkFDS1NMQVNICitBTURFUF9GQUxTRQorQU1ERVBfVFJVRQorYW1fX3F1b3RlCithbV9faW5jbHVkZQorREVQRElSCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCithbV9fdW50YXIKK2FtX190YXIKK0FNVEFSCithbV9fbGVhZGluZ19kb3QKK1NFVF9NQUtFCitBV0sKK21rZGlyX3AKK01LRElSX1AKK0lOU1RBTExfU1RSSVBfUFJPR1JBTQorU1RSSVAKK2luc3RhbGxfc2gKK01BS0VJTkZPCitBVVRPSEVBREVSCitBVVRPTUFLRQorQVVUT0NPTkYKK0FDTE9DQUwKK1ZFUlNJT04KK1BBQ0tBR0UKK0NZR1BBVEhfVworYW1fX2lzcmMKK0lOU1RBTExfREFUQQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfUFJPR1JBTQordGFyZ2V0X29zCit0YXJnZXRfdmVuZG9yCit0YXJnZXRfY3B1Cit0YXJnZXQKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAordGFyZ2V0X2FsaWFzCitob3N0X2FsaWFzCitidWlsZF9hbGlhcworTElCUworRUNIT19UCitFQ0hPX04KK0VDSE9fQworREVGUworbWFuZGlyCitsb2NhbGVkaXIKK2xpYmRpcgorcHNkaXIKK3BkZmRpcgorZHZpZGlyCitodG1sZGlyCitpbmZvZGlyCitkb2NkaXIKK29sZGluY2x1ZGVkaXIKK2luY2x1ZGVkaXIKK2xvY2Fsc3RhdGVkaXIKK3NoYXJlZHN0YXRlZGlyCitzeXNjb25mZGlyCitkYXRhZGlyCitkYXRhcm9vdGRpcgorbGliZXhlY2Rpcgorc2JpbmRpcgorYmluZGlyCitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lCitwcmVmaXgKK2V4ZWNfcHJlZml4CitQQUNLQUdFX1VSTAorUEFDS0FHRV9CVUdSRVBPUlQKK1BBQ0tBR0VfU1RSSU5HCitQQUNLQUdFX1ZFUlNJT04KK1BBQ0tBR0VfVEFSTkFNRQorUEFDS0FHRV9OQU1FCitQQVRIX1NFUEFSQVRPUgorU0hFTEwnCiBhY19zdWJzdF9maWxlcz0nJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCitlbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljCit3aXRoX3BpYworZW5hYmxlX2Zhc3RfaW5zdGFsbAord2l0aF9nbnVfbGQKK2VuYWJsZV9saWJ0b29sX2xvY2sKK2VuYWJsZV9tYWludGFpbmVyX21vZGUKK2VuYWJsZV9kZWJ1ZworZW5hYmxlX3N0cnVjdHMKK2VuYWJsZV9yYXdfYXBpCitlbmFibGVfcHVyaWZ5X3NhZmV0eQorJwogICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKIGhvc3RfYWxpYXMKIHRhcmdldF9hbGlhcwogQ0NBUwogQ0NBU0ZMQUdTCiBDUFAKLUNQUEZMQUdTCi1DWFgKLUNYWEZMQUdTCi1MREZMQUdTCi1MSUJTCi1DQ0MKLUNYWENQUAotRjc3Ci1GRkxBR1MnCitDUFBGTEFHUycKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCiBhY19pbml0X2hlbHA9CiBhY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCiAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCiBjYWNoZV9maWxlPS9kZXYvbnVsbApAQCAtMTA2MCwxMyArMTA1MywyMCBAQAogICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCi0gICAgYWNfZmVhdHVyZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIGVuYWJsZV8kYWNfZmVhdHVyZT1ubyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsKIAogICAtZG9jZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQogICAgIGFjX3ByZXY9ZG9jZGlyIDs7CkBAIC0xMDc5LDEzICsxMDc5LDIwIEBACiAgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvWy0uXS9fL2cnYAotICAgIGV2YWwgZW5hYmxlXyRhY19mZWF0dXJlPVwkYWNfb3B0YXJnIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAogICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCkBAIC0xMjc2LDIyICsxMjgzLDM2IEBACiAgICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKIAogICAtd2l0aC0qIHwgLS13aXRoLSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9XCRhY19vcHRhcmcgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzL1stLl0vXy9nJ2AKLSAgICBldmFsIHdpdGhfJGFjX3BhY2thZ2U9bm8gOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsKIAogICAtLXgpCiAgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14LgpAQCAtMTMxMSwyNSArMTMzMiwyNSBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIC0qKSBhc19mbl9lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCiAgICAgOzsKIAogICAqPSopCiAgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYwogICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwogICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CiAKICAgKikKICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgogICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KICAgICA7OwogCkBAIC0xMzM4LDIzICsxMzU5LDM2IEBACiAKIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgogICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCi0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogbWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgogZmkKIAotIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgoraWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgorICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCisgICAgbm8pIDs7CisgICAgZmF0YWwpIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OworICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKKyAgZXNhYworZmkKKworIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCiBmb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKIAkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCiAJCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKIAkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKIGRvCiAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CisgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgogICBjYXNlICRhY192YWwgaW4KICAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OwogICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKICAgZXNhYwotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgogZG9uZQogCiAjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCkBAIC0xMzY4LDcgKzE0MDIsNyBAQAogaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCiAgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgogICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCiAgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KICAgICBjcm9zc19jb21waWxpbmc9eWVzCkBAIC0xMzg0LDIzICsxNDE4LDIxIEBACiBhY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKIGFjX2xzX2RpPWBscyAtZGkgLmAgJiYKIGFjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IFdvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCiB0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKLSAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCiAKIAogIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgogaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKICAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkMCIgfAorICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKKyRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19teXNlbGYiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMTQyNywxMyArMTQ1OSwxMSBAQAogZmkKIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCiAgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIKIGZpCiBhY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRzcmNkaXInIGRvZXMgbm90IHdvcmsiCiBhY19hYnNfY29uZmRpcj1gKAotCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgeyBlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfbXNnIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCWNkICIkc3JjZGlyIiAmJiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgIiRhY19tc2ciCiAJcHdkKWAKICMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uCiBpZiB0ZXN0ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuCkBAIC0xNDU5LDcgKzE0ODksNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmZmaSAzLjAuNSB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsaWJmZmkgMy4wLjEwcmMwIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTE0ODEsOSArMTUxMSw5IEBACiAKIEluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKICAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCi0JCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCiAgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCi0JCQkgIFtQUkVGSVhdCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCiAKIEJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgogXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKQEAgLTE0OTMsMjUgKzE1MjMsMjUgQEAKIEZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgogCiBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWRhdGFyb290ZGlyPURJUiAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KLSAgLS1sb2NhbGVkaXI9RElSICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KLSAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQotICAtLWRvY2Rpcj1ESVIgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYmZmaV0KLSAgLS1odG1sZGlyPURJUiAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1kdmlkaXI9RElSICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQotICAtLXBkZmRpcj1ESVIgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCi0gIC0tcHNkaXI9RElSICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWJpbmRpcj1ESVIgICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KKyAgLS1zeXNjb25mZGlyPURJUiAgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KKyAgLS1saWJkaXI9RElSICAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQorICAtLWRhdGFyb290ZGlyPURJUiAgICAgICByZWFkLW9ubHkgYXJjaC4taW5kZXBlbmRlbnQgZGF0YSByb290IFtQUkVGSVgvc2hhcmVdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVJdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvaW5mb10KKyAgLS1sb2NhbGVkaXI9RElSICAgICAgICAgbG9jYWxlLWRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUi9sb2NhbGVdCisgIC0tbWFuZGlyPURJUiAgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9tYW5dCisgIC0tZG9jZGlyPURJUiAgICAgICAgICAgIGRvY3VtZW50YXRpb24gcm9vdCBbREFUQVJPT1RESVIvZG9jL2xpYmZmaV0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KIF9BQ0VPRgogCiAgIGNhdCA8PFxfQUNFT0YKQEAgLTE1MzAsMTEgKzE1NjAsMTIgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4wLjU6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4wLjEwcmMwOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKIE9wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5yZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zCiAgIC0tZGlzYWJsZS1GRUFUVVJFICAgICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykKICAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQogICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZyAgc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkCkBAIC0xNTU0LDEwICsxNTg1LDkgQEAKIE9wdGlvbmFsIFBhY2thZ2VzOgogICAtLXdpdGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10KICAgLS13aXRob3V0LVBBQ0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5vKQotICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCiAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQotICAtLXdpdGgtdGFnc1s9VEFHU10gICAgICBpbmNsdWRlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgW2F1dG9tYXRpY10KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCkBAIC0xNTY1LDE2ICsxNTk1LDExIEBACiAgIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQogICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+CiAgIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KLSAgQ1BQRkxBR1MgICAgQy9DKysvT2JqZWN0aXZlIEMgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCiAgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgogICBDQ0FTICAgICAgICBhc3NlbWJsZXIgY29tcGlsZXIgY29tbWFuZCAoZGVmYXVsdHMgdG8gQ0MpCiAgIENDQVNGTEFHUyAgIGFzc2VtYmxlciBjb21waWxlciBmbGFncyAoZGVmYXVsdHMgdG8gQ0ZMQUdTKQogICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgotICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAotICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKLSAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgotICBGNzcgICAgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGNvbW1hbmQKLSAgRkZMQUdTICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBmbGFncwogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgpAQCAtMTU4NywxNSArMTYxMiwxNyBAQAogaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgogICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgogICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8IGNvbnRpbnVlCisgICAgdGVzdCAtZCAiJGFjX2RpciIgfHwKKyAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1gcHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fAorICAgICAgY29udGludWUKICAgICBhY19idWlsZGRpcj0uCiAKIGNhc2UgIiRhY19kaXIiIGluCiAuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICopCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKICAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgogICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CiAgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwpAQCAtMTYzMSw3ICsxNjU4LDcgQEAKICAgICAgIGVjaG8gJiYKICAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNpdmUKICAgICBlbHNlCi0gICAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgogICAgIGZpIHx8IGFjX3N0YXR1cz0kPwogICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0KICAgZG9uZQpAQCAtMTY0MCwyMiArMTY2Nyw1NTcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1saWJmZmkgY29uZmlndXJlIDMuMC41Ci1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEKK2xpYmZmaSBjb25maWd1cmUgMy4wLjEwcmMwCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjUKIAotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCiBfQUNFT0YKICAgZXhpdAogZmkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KK2FjX2ZuX2NfdHJ5X2xpbmsgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBpbmNsdWRlIGZpbGVzIGluCisjIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiB7IGFzX3Zhcj0kMzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUKKworIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY3BwICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+L2Rldi9udWxsICYmIHsKKwkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgIGFjX3JldHZhbD0xCitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7IHRlc3QgIngkYXNfbGluZW5vX3N0YWNrIiA9IHggJiYgeyBhc19saW5lbm89OyB1bnNldCBhc19saW5lbm87fQorICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X2NwcAorCisjIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKKyMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCithY19mbl9jX3RyeV9ydW4gKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKK2ZpCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZVTkMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5CithY19mbl9jX2NoZWNrX2Z1bmMgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKworfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYworCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMsIGdpdmluZyBhIHdhcm5pbmcgaWYgaXQgY2Fubm90IGJlIGNvbXBpbGVkIHVzaW5nCisjIHRoZSBpbmNsdWRlIGZpbGVzIGluIElOQ0xVREVTIGFuZCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIHsgYXNfdmFyPSQzOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CiskYXNfZWNobyAiJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjY7IH0KKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICMoKAorICB5ZXM6bm86ICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorKCBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgeyBhc192YXI9JDM7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgdGVzdCAieCRhc19saW5lbm9fc3RhY2siID0geCAmJiB7IGFzX2xpbmVubz07IHVuc2V0IGFzX2xpbmVubzt9CisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsCisKKyMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKKyMgSU5DTFVERVMsIHNldHRpbmcgVkFSIGFjY29yZGluZ2x5LiBSZXR1cm5zIHdoZXRoZXIgdGhlIHZhbHVlIGNvdWxkIGJlCisjIGNvbXB1dGVkCithY19mbl9jX2NvbXB1dGVfaW50ICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJGFjX21pZCArIDEgJiYgYWNfbG89JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgKyAxICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyAtIDEgJiYgYWNfaGk9JGFzX3ZhbAorCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSAgYWNfbG89IGFjX2hpPQorCQkJICBicmVhaworCQkJZmkKKwkJCWFzX2ZuX2FyaXRoIDIgJyonICRhY19taWQgJiYgYWNfbWlkPSRhc192YWwKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBhY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhc19mbl9hcml0aCAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG8gJiYgYWNfbWlkPSRhc192YWwKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknICsgMSAmJiBhY19sbz0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbiAjKCgKKz8qKSBldmFsICIkMz1cJGFjX2xvIjsgYWNfcmV0dmFsPTAgOzsKKycnKSBhY19yZXR2YWw9MSA7OworZXNhYworICBlbHNlCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK3N0YXRpYyBsb25nIGludCBsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CitzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmd2YWwgKCkgeyByZXR1cm4gJDI7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICByZXR1cm4gMTsKKyAgaWYgKCgkMikgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaW50IGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbGQiLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoJDIpKQorCXJldHVybiAxOworICAgICAgZnByaW50ZiAoZiwgIiVsdSIsIGkpOworICAgIH0KKyAgLyogRG8gbm90IG91dHB1dCBhIHRyYWlsaW5nIG5ld2xpbmUsIGFzIHRoaXMgY2F1c2VzIFxyXG4gY29uZnVzaW9uCisgICAgIG9uIHNvbWUgcGxhdGZvcm1zLiAgKi8KKyAgcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorICBlY2hvID4+Y29uZnRlc3QudmFsOyByZWFkICQzIDxjb25mdGVzdC52YWw7IGFjX3JldHZhbD0wCitlbHNlCisgIGFjX3JldHZhbD0xCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QudmFsCisKKyAgZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyB0ZXN0ICJ4JGFzX2xpbmVub19zdGFjayIgPSB4ICYmIHsgYXNfbGluZW5vPTsgdW5zZXQgYXNfbGluZW5vO30KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX2NvbXB1dGVfaW50CiBjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBsaWJmZmkgJGFzX21lIDMuMC41LCB3aGljaCB3YXMKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42MS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgbGliZmZpICRhc19tZSAzLjAuMTByYzAsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY1LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQAogCkBAIC0xNjkxLDggKzIyNTMsOCBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBlY2hvICJQQVRIOiAkYXNfZGlyIgotZG9uZQorICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgorICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKIH0gPiY1CkBAIC0xNzI2LDEyICsyMjg4LDEyIEBACiAgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCiAgICAgICBjb250aW51ZSA7OwogICAgICpcJyopCi0gICAgICBhY19hcmc9YGVjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgIGVzYWMKICAgICBjYXNlICRhY19wYXNzIGluCi0gICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwogICAgIDIpCi0gICAgICBhY19jb25maWd1cmVfYXJnczE9IiRhY19jb25maWd1cmVfYXJnczEgJyRhY19hcmcnIgorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKICAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgogCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KICAgICAgIGVsc2UKQEAgLTE3NDcsMTMgKzIzMDksMTMgQEAKIAkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKICAgICAgIDs7CiAgICAgZXNhYwogICBkb25lCiBkb25lCi0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQogCiAjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCiAjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQpAQCAtMTc3OCwxMiArMjM0MCwxMyBAQAogICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAogICAgICoke2FzX25sfSopCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwogICAgICAgZXNhYwogICAgICAgY2FzZSAkYWNfdmFyIGluICMoCiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CiAgICAgICBlc2FjIDs7CiAgICAgZXNhYwogICBkb25lCkBAIC0xODEyLDkgKzIzNzUsOSBAQAogICAgIGRvCiAgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKICAgICAgIGNhc2UgJGFjX3ZhbCBpbgotICAgICAgKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisgICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CiAgICAgICBlc2FjCi0gICAgICBlY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgICRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKICAgICBkb25lIHwgc29ydAogICAgIGVjaG8KIApAQCAtMTgyOSw5ICsyMzkyLDkgQEAKICAgICAgIGRvCiAJZXZhbCBhY192YWw9XCQkYWNfdmFyCiAJY2FzZSAkYWNfdmFsIGluCi0JKlwnXCcnKikgYWNfdmFsPWBlY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OwogCWVzYWMKLQllY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCiAgICAgICBkb25lIHwgc29ydAogICAgICAgZWNobwogICAgIGZpCkBAIC0xODQ3LDgzICsyNDEwLDg4IEBACiAgICAgICBlY2hvCiAgICAgZmkKICAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICBlY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKLSAgICBlY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgogICB9ID4mNQogICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKICAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKICcgMAogZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCi0gIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IHsgKGV4aXQgMSk7IGV4aXQgMTsgfScgJGFjX3NpZ25hbAorICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyBhc19mbl9leGl0IDEnICRhY19zaWduYWwKIGRvbmUKIGFjX3NpZ25hbD0wCiAKICMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCiBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAogCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCisKICMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiJFBBQ0tBR0VfTkFNRSIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfU1RSSU5HICIkUEFDS0FHRV9TVFJJTkciCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCiBfQUNFT0YKIAorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKIAogIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCi0jIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCiBpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCi0gIHNldCB4ICIkQ09ORklHX1NJVEUiCisgIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFCiBlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgotICBzZXQgeCAiJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSIgIiRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQogZWxzZQotICBzZXQgeCAiJGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlIiBcCi0JIiRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUiCisgIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQogZmkKLXNoaWZ0Ci1mb3IgYWNfc2l0ZV9maWxlCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgogZG8KLSAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KICAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKICAgICAuICIkYWNfc2l0ZV9maWxlIgogICBmaQogZG9uZQogCiBpZiB0ZXN0IC1yICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgIyBTb21lIHZlcnNpb25zIG9mIGJhc2ggd2lsbCBmYWlsIHRvIHNvdXJjZSAvZGV2L251bGwgKHNwZWNpYWwKLSAgIyBmaWxlcyBhY3R1YWxseSksIHNvIHdlIGF2b2lkIGRvaW5nIHRoYXQuCi0gIGlmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KICAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKICAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKICAgICBlc2FjCiAgIGZpCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgID4kY2FjaGVfZmlsZQogZmkKIApAQCAtMTkzNyw2OCArMjUwNSw1NiBAQAogICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCiAgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KICAgICBzZXQsKQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsc2V0KQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KICAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CiAgICAgLCk7OwogICAgICopCiAgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0JeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKLWVjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KLQlhY19jYWNoZV9jb3JydXB0ZWQ9OgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQogICAgICAgZmk7OwogICBlc2FjCiAgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KICAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCiAgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgotICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWBlY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKSBhY19hcmc9JGFjX3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwogICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CiAgICAgZXNhYwogICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgogICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCi0gICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKICAgICBlc2FjCiAgIGZpCiBkb25lCiBpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KKyAgYXNfZm5fZXJyb3IgInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1CiBmaQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTIwMTIsMjQgKzI1NjgsMTYgQEAKIAogYWNfYXV4X2Rpcj0KIGZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCi0gIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgotICAgIGJyZWFrCi0gIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCi0gICAgYnJlYWsKLSAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKLSAgICBicmVhawotICBmaQorICBmb3IgYWNfdCBpbiBpbnN0YWxsLXNoIGluc3RhbGwuc2ggc2h0b29sOyBkbworICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3QiOyB0aGVuCisgICAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyLyRhY190IC1jIgorICAgICAgYnJlYWsgMgorICAgIGZpCisgIGRvbmUKIGRvbmUKIGlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluIFwiJHNyY2RpclwiIFwiJHNyY2Rpci8uLlwiIFwiJHNyY2Rpci8uLi8uLlwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CiBmaQogCiAjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKQEAgLTIwNDMsMzUgKzI1OTEsMjcgQEAKIAogIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgogJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCiB0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKICAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKIHRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1CiBhY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9idWlsZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2J1aWxkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQogY2FzZSAkYWNfY3ZfYnVpbGQgaW4KICotKi0qKSA7OwotKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworKikgYXNfZm5fZXJyb3IgImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7CiBlc2FjCiBidWlsZD0kYWNfY3ZfYnVpbGQKIGFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKQEAgLTIwODcsMjggKzI2MjcsMjQgQEAKIGNhc2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgogICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAogZWxzZQogICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hvc3QiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9CiBjYXNlICRhY19jdl9ob3N0IGluCiAqLSotKikgOzsKLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisqKSBhc19mbl9lcnJvciAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OwogZXNhYwogaG9zdD0kYWNfY3ZfaG9zdAogYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJwpAQCAtMjEyNCwyOCArMjY2MCwyNCBAQAogY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KICAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CiBlbHNlCiAgIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICR0YXJnZXRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdGFyZ2V0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdGFyZ2V0IiA+JjY7IH0KIGNhc2UgJGFjX2N2X3RhcmdldCBpbgogKi0qLSopIDs7Ci0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgdGFyZ2V0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyopIGFzX2ZuX2Vycm9yICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCB0YXJnZXQiICIkTElORU5PIiA1OzsKIGVzYWMKIHRhcmdldD0kYWNfY3ZfdGFyZ2V0CiBhY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCkBAIC0yMTY3LDExICsyNjk5LDEyIEBACiAgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKICAgICBOT05FTk9ORXMseCx4LCAmJgogICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisKIHRhcmdldF9hbGlhcz0ke3RhcmdldF9hbGlhcy0kaG9zdF9hbGlhc30KIAogLiAke3NyY2Rpcn0vY29uZmlndXJlLmhvc3QKIAotYW1fX2FwaV92ZXJzaW9uPScxLjEwJworYW1fX2FwaV92ZXJzaW9uPScxLjExJwogCiAjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKICMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgpAQCAtMjE4NiwyMiArMjcxOSwyMyBAQAogIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgogIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCiAjIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNjsgfQorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KLWNhc2UgJGFzX2Rpci8gaW4KLSAgLi8gfCAuLy8gfCAvY0MvKiB8IFwKKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKICAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCi0gID86XFwvb3MyXFwvaW5zdGFsbFxcLyogfCA/OlxcL09TMlxcL0lOU1RBTExcXC8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKICAgL3Vzci91Y2IvKiApIDs7CiAgICopCiAgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KQEAgLTIyMTksMTcgKzI3NTMsMjkgQEAKIAkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgotCSAgICBicmVhayAzCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKIAkgIGZpCiAJZmkKICAgICAgIGRvbmUKICAgICBkb25lCiAgICAgOzsKIGVzYWMKLWRvbmUKKworICBkb25lCiBJRlM9JGFzX3NhdmVfSUZTCiAKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgogCiBmaQogICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgpAQCAtMjI0Miw4ICsyNzg4LDggQEAKICAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCiAgIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQorJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KIAogIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgogIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KQEAgLTIyNTMsMjEgKzI3OTksMzQgQEAKIAogdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9CiAjIEp1c3QgaW4gY2FzZQogc2xlZXAgMQogZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCisgICAgYXNfZm5fZXJyb3IgInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Citlc2FjCitjYXNlICRzcmNkaXIgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKKyAgICBhc19mbl9lcnJvciAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7OworZXNhYworCiAjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCiAjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKICMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKICMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCiAjIGRpcmVjdG9yeSkuCiBpZiAoCi0gICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAogICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCiAgICAgICAjIC1MIGRpZG4ndCB3b3JrLgotICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAogICAgZmkKICAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKICAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCkBAIC0yMjc3LDExICsyODM2LDggQEAKICAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKICAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKICAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgYXNfZm5fZXJyb3IgImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1CiAgICBmaQogCiAgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCkBAIC0yMjkwLDUyICsyODQ2LDE2MiBAQAogICAgIyBPay4KICAgIDoKIGVsc2UKLSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCi1DaGVjayB5b3VyIHN5c3RlbSBjbG9jayIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgYXNfZm5fZXJyb3IgIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCiAjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KIHRlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgogICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCi0jIERvdWJsZSBhbnkgXCBvciAkLiAgZWNobyBtaWdodCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCisjIERvdWJsZSBhbnkgXCBvciAkLgogIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KLWNhdCA8PFxfQUNFT0YgPmNvbmZ0ZXN0LnNlZAotcy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLwotX0FDRU9GCi1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lPWBlY2hvICRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIHwgc2VkIC1mIGNvbmZ0ZXN0LnNlZGAKLXJtIC1mIGNvbmZ0ZXN0LnNlZAorYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJworcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCiAKICMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKIGFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKIAotdGVzdCB4IiR7TUlTU0lORytzZXR9IiA9IHhzZXQgfHwgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCitpZiB0ZXN0IHgiJHtNSVNTSU5HK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gXCIkYW1fYXV4X2Rpci9taXNzaW5nXCIiIDs7CisgICopCisgICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciIDs7CisgIGVzYWMKK2ZpCiAjIFVzZSBldmFsIHRvIGV4cGFuZCAkU0hFTEwKIGlmIGV2YWwgIiRNSVNTSU5HIC0tcnVuIHRydWUiOyB0aGVuCiAgIGFtX21pc3NpbmdfcnVuPSIkTUlTU0lORyAtLXJ1biAiCiBlbHNlCiAgIGFtX21pc3NpbmdfcnVuPQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gJEVDSE9fQyIgPiY2OyB9CitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKworZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdGhyZWFkLXNhZmUgbWtkaXIgLXAuLi4gIiA+JjY7IH0KIGlmIHRlc3QgLXogIiRNS0RJUl9QIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvCisgICAgZm9yIGFjX3Byb2cgaW4gbWtkaXIgZ21rZGlyOyBkbwogCSBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KIAkgICB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB9IHx8IGNvbnRpbnVlCiAJICAgY2FzZSBgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC0tdmVyc2lvbiAyPiYxYCBpbiAjKApAQCAtMjM0NywxMSArMzAxMywxMiBAQAogCSAgIGVzYWMKIAkgZG9uZQogICAgICAgIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogCisgIHRlc3QgLWQgLi8tLXZlcnNpb24gJiYgcm1kaXIgLi8tLXZlcnNpb24KICAgaWYgdGVzdCAiJHthY19jdl9wYXRoX21rZGlyK3NldH0iID0gc2V0OyB0aGVuCiAgICAgTUtESVJfUD0iJGFjX2N2X3BhdGhfbWtkaXIgLXAiCiAgIGVsc2UKQEAgLTIzNTksMTIgKzMwMjYsMTEgQEAKICAgICAjIHZhbHVlIGZvciBNS0RJUl9QIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCiAgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKICAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCi0gICAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbgogICAgIE1LRElSX1A9IiRhY19pbnN0YWxsX3NoIC1kIgogICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1LRElSX1AiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1LRElSX1AiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNS0RJUl9QIiA+JjUKKyRhc19lY2hvICIkTUtESVJfUCIgPiY2OyB9CiAKIG1rZGlyX3A9IiRNS0RJUl9QIgogY2FzZSAkbWtkaXJfcCBpbgpAQCAtMjM3NiwxMCArMzA0MiwxMCBAQAogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BV0src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FXSytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCiAgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTIzODksMzYgKzMwNTUsMzcgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIEFXSz0kYWNfY3ZfcHJvZ19BV0sKIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVdLIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQorJGFzX2VjaG8gIiRBV0siID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKICAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKIGRvbmUKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1zZXQgeCAke01BS0UtbWFrZX07IGFjX21ha2U9YGVjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi1pZiB7IGFzX3Zhcj1hY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICIgPiY2OyB9CitzZXQgeCAke01BS0UtbWFrZX0KK2FjX21ha2U9YCRhc19lY2hvICIkMiIgfCBzZWQgJ3MvKy9wL2c7IHMvW15hLXpBLVowLTlfXS9fL2cnYAoraWYgeyBhc192YXI9YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0OyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgogU0hFTEwgPSAvYmluL3NoCkBAIC0yNDM1LDEyICszMTAyLDEyIEBACiBybSAtZiBjb25mdGVzdC5tYWtlCiBmaQogaWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiAgIFNFVF9NQUtFPQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKIGZpCiAKQEAgLTI0NTksOSArMzEyNiw3IEBACiAgIGFtX19pc3JjPScgLUkkKHNyY2RpciknCiAgICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAogICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQogICBmaQogZmkKIApAQCAtMjQ3Nyw3ICszMTQyLDcgQEAKIAogIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgogIFBBQ0tBR0U9J2xpYmZmaScKLSBWRVJTSU9OPSczLjAuNScKKyBWRVJTSU9OPSczLjAuMTByYzAnCiAKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMjUwNSwxMTIgKzMxNzAsNiBAQAogCiBNQUtFSU5GTz0ke01BS0VJTkZPLSIke2FtX21pc3NpbmdfcnVufW1ha2VpbmZvIn0KIAotaW5zdGFsbF9zaD0ke2luc3RhbGxfc2gtIlwkKFNIRUxMKSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIn0KLQotIyBJbnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVuIHRoZSB1c2VyCi0jIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0Ci0jIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9uIGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlCi0jIHdpbGwgaG9ub3IgdGhlIGBTVFJJUCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVNUUklQPSRhY19jdl9wcm9nX1NUUklQCi1pZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCi0gIGFjX2N0X1NUUklQPSRTVFJJUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCi1pZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KLSAgICBTVFJJUD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIFNUUklQPSRhY19jdF9TVFJJUAotICBmaQotZWxzZQotICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCi1maQotCi1maQotSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKLQogIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KICMgc29tZSBwbGF0Zm9ybXMuCiAjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCkBAIC0yNjM5LDEwICszMTk4LDEwIEBACiBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjY1MiwyNSArMzIxMSwyNSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBDQz0kYWNfY3ZfcHJvZ19DQwogaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKQEAgLTI2NzksMTAgKzMyMzgsMTAgQEAKICAgYWNfY3RfQ0M9JENDCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yNjkyLDI1ICszMjUxLDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKIAogZmkKIGZpCiBhY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwogaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAgIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgpAQCAtMjcxOCwxMiArMzI3Nyw4IEBACiAgIGVsc2UKICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMKICAgICBDQz0kYWNfY3RfQ0MKQEAgLTI3MzYsMTAgKzMyOTEsMTAgQEAKICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMjc0OSwyNSArMzMwNCwyNSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjc3NiwxMCArMzMzMSwxMCBAQAogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSBjYzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTI3OTAsMTggKzMzNDUsMTggQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCiAgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KICAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwogICAgICAgIGNvbnRpbnVlCiAgICAgIGZpCiAgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBpZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCkBAIC0yODIwLDExICszMzc1LDExIEBACiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAogCkBAIC0yODM1LDEwICszMzkwLDEwIEBACiAgIGRvCiAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yODQ4LDI1ICszNDAzLDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjg3OSwxMCArMzQzNCwxMCBAQAogZG8KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0yODkyLDI1ICszNDQ3LDI1IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwogICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMjkyMiwxMiArMzQ3Nyw4IEBACiAgIGVsc2UKICAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCiB5ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CiBhY190b29sX3dhcm5lZD15ZXMgOzsKIGVzYWMKICAgICBDQz0kYWNfY3RfQ0MKQEAgLTI5MzcsNTEgKzM0ODgsMzcgQEAKIGZpCiAKIAotdGVzdCAteiAiJENDIiAmJiB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KIAogIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKKyRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IikgMj4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC12ID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtdiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtViA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLVYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMjk5Myw0MiArMzUzMCwzOCBAQAogfQogX0FDRU9GCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLmV4ZSBiLm91dCIKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KICMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KICMgb2YgZXhlZXh0LgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNjsgfQotYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotIwotIyBMaXN0IG9mIHBvc3NpYmxlIG91dHB1dCBmaWxlcywgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuCi0jIFRoZSBhbGdvcml0aG0gaXMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopCi0jIG9ubHkgYXMgYSBsYXN0IHJlc29ydC4gIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCi1hY19maWxlcz0nYV9vdXQuZXhlIGEuZXhlIGNvbmZ0ZXN0LmV4ZSBhLm91dCBjb25mdGVzdCBhLiogY29uZnRlc3QuKiBiLm91dCcKLSMKLSMgVGhlIElSSVggNiBsaW5rZXIgd3JpdGVzIGludG8gZXhpc3RpbmcgZmlsZXMgd2hpY2ggbWF5IG5vdCBiZQotIyBleGVjdXRhYmxlLCByZXRhaW5pbmcgdGhlaXIgcGVybWlzc2lvbnMuICBSZW1vdmUgdGhlbSBmaXJzdCBzbyBhCi0jIHN1YnNlcXVlbnQgZXhlY3V0aW9uIHRlc3Qgd29ya3MuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKwogYWNfcm1maWxlcz0KIGZvciBhY19maWxlIGluICRhY19maWxlcwogZG8KICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CiAgICAgKiApIGFjX3JtZmlsZXM9IiRhY19ybWZpbGVzICRhY19maWxlIjs7CiAgIGVzYWMKIGRvbmUKIHJtIC1mICRhY19ybWZpbGVzCiAKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2lmIHsgeyBhY190cnk9IiRhY19saW5rX2RlZmF1bHQiCiBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgQXV0b2NvbmYtMi4xMyBjb3VsZCBzZXQgdGhlIGFjX2N2X2V4ZWV4dCB2YXJpYWJsZSB0byBgbm8nLgogIyBTbyBpZ25vcmUgYSB2YWx1ZSBvZiBgbm8nLCBvdGhlcndpc2UgdGhpcyB3b3VsZCBsZWFkIHRvIGBFWEVFWFQgPSBubycKICMgaW4gYSBNYWtlZmlsZS4gIFdlIHNob3VsZCBub3Qgb3ZlcnJpZGUgYWNfY3ZfZXhlZXh0IGlmIGl0IHdhcyBjYWNoZWQsCkBAIC0zMDM4LDE0ICszNTcxLDE0IEBACiBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICoubyB8ICoub2JqICkKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApCiAJOzsKICAgICBbYWJdLm91dCApCiAJIyBXZSBmb3VuZCB0aGUgZGVmYXVsdCBleGVjdXRhYmxlLCBidXQgZXhlZXh0PScnIGlzIG1vc3QKIAkjIGNlcnRhaW5seSByaWdodC4KIAlicmVhazs7CiAgICAgKi4qICkKLSAgICAgICAgaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CisJaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87CiAJdGhlbiA6OyBlbHNlCiAJICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCiAJZmkKQEAgLTMwNjQsNzggKzM1OTcsNDIgQEAKIGVsc2UKICAgYWNfZmlsZT0nJwogZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK2lmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CiBzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CiBmaQotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQogYWNfZXhlZXh0PSRhY19jdl9leGVleHQKIAotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAotIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgotICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bm8KLSAgZWxzZQotICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0gbWF5YmU7IHRoZW4KLQljcm9zc19jb21waWxpbmc9eWVzCi0gICAgZWxzZQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KLUlmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0gIGZpCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjY7IH0KLQotcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLSMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCi0jIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2OyB9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICIgPiY2OyB9CitpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKIGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY19saW5rIikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CiAgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQogIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCiAjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aApAQCAtMzE0MywzNyArMzY0MCw5MCBAQAogZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKIAkgIGJyZWFrOzsKICAgICAqICkgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQogZmkKLQotcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2OyB9CitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KIAogcm0gLWYgY29uZnRlc3QuJGFjX2V4dAogRVhFRVhUPSRhY19jdl9leGVleHQKIGFjX2V4ZWV4dD0kRVhFRVhUCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgorIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMTg1LDUxICszNzM1LDQ2IEBACiB9CiBfQUNFT0YKIHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCi1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgoraWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCiBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgogICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7CiAgIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSApIDs7CiAgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCiAgICAgICAgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9CiBmaQotCiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29iamV4dCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29iamV4dCIgPiY2OyB9CiBPQkpFWFQ9JGFjX2N2X29iamV4dAogYWNfb2JqZXh0PSRPQkpFWFQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfY19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzI0Myw1NCArMzc4OCwzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jb21waWxlcl9nbnU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jb21waWxlcl9nbnU9bm8KKyAgYWNfY29tcGlsZXJfZ251PW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQogYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQogYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCiAgICBhY19jX3dlcnJvcl9mbGFnPXllcwogICAgYWNfY3ZfcHJvZ19jY19nPW5vCiAgICBDRkxBR1M9Ii1nIgotICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzMwMSwzNCArMzgyNiwxMSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9wcm9nX2NjX2c9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlDRkxBR1M9IiIKLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMzM5LDM1ICszODQxLDEyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAotCWFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworZWxzZQorICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKIAkgQ0ZMQUdTPSItZyIKLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0zMzc4LDQyICszODU3LDE4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAgICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9CiBpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCiAgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKIGVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCkBAIC0zNDI5LDE4ICszODg0LDE0IEBACiAgICAgQ0ZMQUdTPQogICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2NfYzg5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY3ZfcHJvZ19jY19jODk9bm8KIGFjX3NhdmVfQ0M9JENDCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzQ5NywzMSArMzk0OCw5IEBACiAJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKIGRvCiAgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCisgIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKICAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKIGRvbmUKQEAgLTM1MzIsMTcgKzM5NjEsMTkgQEAKICMgQUNfQ0FDSEVfVkFMCiBjYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgogICB4KQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNjsgfSA7OworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CiskYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwogICB4bm8pCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH11bnN1cHBvcnRlZCIgPiY2OyB9IDs7CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKKyRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7CiAgICopCiAgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OwogZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKIAorZmkKIAogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC0zNTU3LDQ0ICszOTg4LDQ0IEBACiBhbV9tYWtlPSR7TUFLRS1tYWtlfQogY2F0ID4gY29uZmluYyA8PCAnRU5EJwogYW1fX2RvaXQ6Ci0JQGVjaG8gZG9uZQorCUBlY2hvIHRoaXMgaXMgdGhlIGFtX19kb2l0IHRhcmdldAogLlBIT05ZOiBhbV9fZG9pdAogRU5ECiAjIElmIHdlIGRvbid0IGZpbmQgYW4gaW5jbHVkZSBkaXJlY3RpdmUsIGp1c3QgY29tbWVudCBvdXQgdGhlIGNvZGUuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CiBhbV9faW5jbHVkZT0iIyIKIGFtX19xdW90ZT0KIF9hbV9yZXN1bHQ9bm9uZQogIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KIGVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgV2UgZ3JlcCBvdXQgYEVudGVyaW5nIGRpcmVjdG9yeScgYW5kIGBMZWF2aW5nIGRpcmVjdG9yeScKLSMgbWVzc2FnZXMgd2hpY2ggY2FuIG9jY3VyIGlmIGB3JyBlbmRzIHVwIGluIE1BS0VGTEFHUy4KLSMgSW4gcGFydGljdWxhciB3ZSBkb24ndCBsb29rIGF0IGBebWFrZTonIGJlY2F1c2UgR05VIG1ha2UgbWlnaHQKLSMgYmUgaW52b2tlZCB1bmRlciBzb21lIG90aGVyIG5hbWUgKHVzdWFsbHkgImdtYWtlIiksIGluIHdoaWNoCi0jIGNhc2UgaXQgcHJpbnRzIGl0cyBuZXcgbmFtZSBpbnN0ZWFkIG9mIGBtYWtlJy4KLWlmIHRlc3QgImAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsIHwgZ3JlcCAtdiAnaW5nIGRpcmVjdG9yeSdgIiA9ICJkb25lIjsgdGhlbgotICAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICAgYW1fX3F1b3RlPQotICAgX2FtX3Jlc3VsdD1HTlUKLWZpCisjIElnbm9yZSBhbGwga2luZHMgb2YgYWRkaXRpb25hbCBvdXRwdXQgZnJvbSBgbWFrZScuCitjYXNlIGAkYW1fbWFrZSAtcyAtZiBjb25mbWYgMj4gL2Rldi9udWxsYCBpbiAjKAorKnRoZVwgYW1fX2RvaXRcIHRhcmdldCopCisgIGFtX19pbmNsdWRlPWluY2x1ZGUKKyAgYW1fX3F1b3RlPQorICBfYW1fcmVzdWx0PUdOVQorICA7OworZXNhYwogIyBOb3cgdHJ5IEJTRCBtYWtlIHN0eWxlIGluY2x1ZGUuCiBpZiB0ZXN0ICIkYW1fX2luY2x1ZGUiID0gIiMiOyB0aGVuCiAgICBlY2hvICcuaW5jbHVkZSAiY29uZmluYyInID4gY29uZm1mCi0gICBpZiB0ZXN0ICJgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAiID0gImRvbmUiOyB0aGVuCi0gICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQotICAgICAgYW1fX3F1b3RlPSJcIiIKLSAgICAgIF9hbV9yZXN1bHQ9QlNECi0gICBmaQorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYwogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRfYW1fcmVzdWx0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkX2FtX3Jlc3VsdCIgPiY1CiskYXNfZWNobyAiJF9hbV9yZXN1bHQiID4mNjsgfQogcm0gLWYgY29uZmluYyBjb25mbWYKIAogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmc7CiBmaQogCkBAIC0zNjE0LDEwICs0MDQ1LDEwIEBACiAKIGRlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCiAgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKQEAgLTM2NDIsNiArNDA3MywxMSBAQAogICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgogICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAogICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKICAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCiAgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCiAgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZApAQCAtMzY1OSw3ICs0MDk1LDE3IEBACiAgICAgZG9uZQogICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKIAorICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCisgICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKICAgICBjYXNlICRkZXBtb2RlIGluCisgICAgZ2NjKQorICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KKyAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCisgICAgICA7OwogICAgIG5vc2lkZWVmZmVjdCkKICAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAogICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZApAQCAtMzY2OSwxOSArNDExNSwyMyBAQAogCWJyZWFrCiAgICAgICBmaQogICAgICAgOzsKKyAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQorICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKKyAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAorICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KKyAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KKyAgICAgIGFtX19taW51c19vYmo9CisgICAgICA7OwogICAgIG5vbmUpIGJyZWFrIDs7CiAgICAgZXNhYwotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCiAgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCi0gICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAogICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCiAgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCiAgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKICAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCkBAIC0zNzA1LDggKzQxNTUsOCBAQAogZmkKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQogQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCiAKICBpZgpAQCAtMzcyNCw2ICs0MTc0LDcgQEAKIAogCiAKKwogIyBCeSBkZWZhdWx0IHdlIHNpbXBseSB1c2UgdGhlIEMgY29tcGlsZXIgdG8gYnVpbGQgYXNzZW1ibHkgY29kZS4KIAogdGVzdCAiJHtDQ0FTK3NldH0iID0gc2V0IHx8IENDQVM9JENDCkBAIC0zNzMzLDEwICs0MTg0LDEwIEBACiAKIGRlcGNjPSIkQ0NBUyIgICBhbV9jb21waWxlcl9saXN0PQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCiAgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKQEAgLTM3NjEsNiArNDIxMiw5IEBACiAgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCiAgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCiAgIGZpCisgIGFtX191bml2ZXJzYWw9ZmFsc2UKKworCiAgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwogICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwogICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKQEAgLTM3NzgsNyArNDIzMiwxNyBAQAogICAgIGRvbmUKICAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCiAKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLiAgQWxzbywgc29tZSBJbnRlbAorICAgICMgdmVyc2lvbnMgaGFkIHRyb3VibGUgd2l0aCBvdXRwdXQgaW4gc3ViZGlycworICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCiAgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKICAgICBub3NpZGVlZmZlY3QpCiAgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKICAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKQEAgLTM3ODgsMTkgKzQyNTIsMjMgQEAKIAlicmVhawogICAgICAgZmkKICAgICAgIDs7CisgICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKKyAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCisgICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKKyAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCisgICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgICBhbV9fbWludXNfb2JqPQorICAgICAgOzsKICAgICBub25lKSBicmVhayA7OwogICAgIGVzYWMKLSAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKLSAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQotICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgogICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKICAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAogICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgogICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKICAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCiAgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCiAgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQpAQCAtMzgyNCw4ICs0MjkyLDggQEAKIGZpCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DQ0FTX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CiskYXNfZWNobyAiJGFtX2N2X0NDQVNfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQogQ0NBU0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NBU19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQogCiAgaWYKQEAgLTM4NDAsMjIgKzQzMDgsMTggQEAKIAogCiBpZiB0ZXN0ICJ4JENDIiAhPSB4Y2M7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYW5kIGNjIHVuZGVyc3RhbmQgLWMgYW5kIC1vIHRvZ2V0aGVyLi4uICRFQ0hPX0MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBjYyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlci4uLiAiID4mNjsgfQogZmkKLXNldCBkdW1teSAkQ0M7IGFjX2NjPWBlY2hvICQyIHwKK3NldCBkdW1teSAkQ0M7IGFjX2NjPWAkYXNfZWNobyAiJDIiIHwKIAkJICAgICAgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKLWlmIHsgYXNfdmFyPWFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vOyBldmFsICJ0ZXN0IFwiXCR7JGFzX3ZhcitzZXR9XCIgPSBzZXQiOyB9OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB7IGFzX3Zhcj1hY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbzsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludApAQCAtMzg3MSw1OCArNDMzNSw2MyBAQAogIyBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KIGFjX3RyeT0nJENDIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1Jwogcm0gLWYgY29uZnRlc3QyLioKLWlmIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KK2lmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotICAgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisgICB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07CiB0aGVuCiAgIGV2YWwgYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX289eWVzCiAgIGlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbgogICAgICMgVGVzdCBmaXJzdCB0aGF0IGNjIGV4aXN0cyBhdCBhbGwuCiAgICAgaWYgeyBhY190cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCiAgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwogICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKIGVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1CitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CiAgIChldmFsICIkYWNfdHJ5IikgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgogICAgICAgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4mNScKICAgICAgIHJtIC1mIGNvbmZ0ZXN0Mi4qCi0gICAgICBpZiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICAgICBpZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgogICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKICAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7CiBlc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQorZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQogICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dCAmJiB7IChjYXNlICIoKCRhY190cnkiIGluCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmCisJIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KICAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CiAgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwogZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKICAgKGV2YWwgIiRhY190cnkiKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsKICAgICAgIHRoZW4KIAkjIGNjIHdvcmtzIHRvby4KIAk6CkBAIC0zOTM5LDIzICs0NDA4LDIyIEBACiAKIGZpCiBpZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX2NjXyR7YWNfY2N9X2NfbyA9IHllczsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogIyBGSVhNRTogd2UgcmVseSBvbiB0aGUgY2FjaGUgdmFyaWFibGUgbmFtZSBiZWNhdXNlCiAjIHRoZXJlIGlzIG5vIG90aGVyIHdheS4KIHNldCBkdW1teSAkQ0MKLWFjX2NjPWBlY2hvICQyIHwgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AKLWlmIGV2YWwgInRlc3QgXCJgZWNobyAnJGFjX2N2X3Byb2dfY2NfJyR7YWNfY2N9X2Nfb2BcIiAhPSB5ZXMiOyB0aGVuCithbV9jYz1gZWNobyAkMiB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZztzL15bMC05XS9fLydgCitldmFsIGFtX3Q9XCRhY19jdl9wcm9nX2NjXyR7YW1fY2N9X2NfbworaWYgdGVzdCAiJGFtX3QiICE9IHllczsgdGhlbgogICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KICAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCiAgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KQEAgLTM5NjUsMTc2ICs0NDMzLDE0NyBAQAogZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYworY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IExpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBcYHB3ZFxgIiA+JjI7fSA7OworZXNhYworCisKKworbWFjcm9fdmVyc2lvbj0nMi4yLjYnCittYWNyb19yZXZpc2lvbj0nMS4zMDEyJworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZW5hYmxlX3NoYXJlZD15ZXMKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSRlbmFibGVfc3RhdGljOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfc3RhdGljPXllcwotZmkKLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9JGVuYWJsZV9mYXN0X2luc3RhbGw7IHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotZmkKLQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgICAgICAgICAgYWNfc2NyaXB0PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiLworICAgICBmb3IgYWNfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbworICAgICAgIGFjX3NjcmlwdD0iJGFjX3NjcmlwdCRhc19ubCRhY19zY3JpcHQiCisgICAgIGRvbmUKKyAgICAgZWNobyAiJGFjX3NjcmlwdCIgMj4vZGV2L251bGwgfCBzZWQgOTlxID5jb25mdGVzdC5zZWQKKyAgICAgeyBhY19zY3JpcHQ9OyB1bnNldCBhY19zY3JpcHQ7fQorICAgICBpZiB0ZXN0IC16ICIkU0VEIjsgdGhlbgorICBhY19wYXRoX1NFRF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwogICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICBmaQorICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKICAgICBkb25lCiAgIGRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLWx0X2FjX21heD0wCi1sdF9hY19jb3VudD0wCi0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwotIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQotICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KLSAgbHRfYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGJyZWFrCi0gIGZpCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAotICAgIGVjaG8gPj5jb25mdGVzdC5ubAotICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCi0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawotICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBmaQogICBkb25lCi1kb25lCi0KK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKIGZpCiAKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTRUQiID4mNjsgfQordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9HUkVQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJncmVwIGdncmVwIiB0byB1c2UgaW4gbXNnIG91dHB1dAotaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi1zZXQgZHVtbXkgZ3JlcCBnZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KICAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCi0jIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbwotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQotICAgICMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgogICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAogY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgogKkdOVSopCiAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OwogKikKICAgYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKICAgd2hpbGUgOgogICBkbwogICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCiAgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgogICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgIGVjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgogICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCiAgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgogICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCiAgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCkBAIC00MTQ2LDc3ICs0NTg1LDYxIEBACiAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwogZXNhYwogCi0KLSAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKICAgZG9uZQotZG9uZQotCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKLQotCi1maQotCi1HUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgotaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQorICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQogZWxzZQogICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKIGZpCiAKLQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KICBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgogCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9FR1JFUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQogICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKICAgIGVsc2UKLSAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJlZ3JlcCIgdG8gdXNlIGluIG1zZyBvdXRwdXQKLWlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KLXNldCBkdW1teSBlZ3JlcDsgYWNfcHJvZ19uYW1lPSQyCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfRUdSRVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgogICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCi0jIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKLSAgICAjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRUdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0VHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRUdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KICAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0VHUkVQCiBjYXNlIGAiJGFjX3BhdGhfRUdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgogKkdOVSopCiAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIiBhY19wYXRoX0VHUkVQX2ZvdW5kPTo7OwogKikKICAgYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+ImNvbmZ0ZXN0LmluIgorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKICAgd2hpbGUgOgogICBkbwogICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCiAgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgogICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgIGVjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCiAgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCiAgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFjX2NvdW50PWBleHByICRhY19jb3VudCArIDFgCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCiAgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KICAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQogICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCkBAIC00MjI4LDM5ICs0NjUxLDExNCBAQAogICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKIGVzYWMKIAotCi0gICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKICAgZG9uZQotZG9uZQotCi1kb25lCisgIGRvbmUKIElGUz0kYXNfc2F2ZV9JRlMKLQotCi1maQotCi1FR1JFUD0iJGFjX2N2X3BhdGhfRUdSRVAiCi1pZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgJGFjX3Byb2dfbmFtZSBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSAkYWNfcHJvZ19uYW1lIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQorICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCiBlbHNlCiAgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCiBmaQogCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmdyZXAuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcGF0aF9GR1JFUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gJ2FiKmMnIHwgJEdSRVAgLUYgJ2FiKmMnID4vZGV2L251bGwgMj4mMQorICAgdGhlbiBhY19jdl9wYXRoX0ZHUkVQPSIkR1JFUCAtRiIKKyAgIGVsc2UKKyAgICAgaWYgdGVzdCAteiAiJEZHUkVQIjsgdGhlbgorICBhY19wYXRoX0ZHUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZmdyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0ZHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9GR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRkdSRVAiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9GR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRkdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9GR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9GR1JFUD0iJGFjX3BhdGhfRkdSRVAiIGFjX3BhdGhfRkdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0ZHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0ZHUkVQIiBGR1JFUCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRkdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIgorICAgICAgYWNfcGF0aF9GR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0ZHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9GR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAibm8gYWNjZXB0YWJsZSBmZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRkdSRVA9JEZHUkVQCitmaQogCiAgICBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BhdGhfRUdSRVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQotIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9GR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRkdSRVAiID4mNjsgfQorIEZHUkVQPSIkYWNfY3ZfcGF0aF9GR1JFUCIKKworCit0ZXN0IC16ICIkR1JFUCIgJiYgR1JFUD1ncmVwCisKKworCisKKworCisKKworCisKKworCisKKworCisKIAogCiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzCiBlbHNlCiAgIHdpdGhfZ251X2xkPW5vCkBAIC00MjY5LDggKzQ3NjcsOCBAQAogYWNfcHJvZz1sZAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CiAgIGNhc2UgJGhvc3QgaW4KICAgKi0qLW1pbmd3KikKICAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CkBAIC00MjgzLDkgKzQ3ODEsOSBAQAogICAgIFtcXC9dKiB8ID86W1xcL10qKQogICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwogICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKICAgICAgIGRvbmUKICAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgogICAgICAgOzsKQEAgLTQyOTksMTQgKzQ3OTcsMTQgQEAKICAgICA7OwogICBlc2FjCiBlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+JjY7IH0KIGZpCi1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCkBAIC00MzM2LDE5ICs0ODM0LDE3IEBACiAKIExEPSIkbHRfY3ZfcGF0aF9MRCIKIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit0ZXN0IC16ICIkTEQiICYmIGFzX2ZuX2Vycm9yICJubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCiBjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgpAQCAtNDM2MCw0MCArNDg1NiwyMiBAQAogICA7OwogZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQogd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBlbHNlCi0gICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZmkKLSAgICA7OwotZXNhYwogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX05NK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgogICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTQ0MzYsMjggKzQ5MTQsNDkzIEBACiAgICAgZG9uZQogICAgIElGUz0iJGx0X3NhdmVfaWZzIgogICBkb25lCi0gIHRlc3QgLXogIiRsdF9jdl9wYXRoX05NIiAmJiBsdF9jdl9wYXRoX05NPW5tCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQogZmkKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjY7IH0KLU5NPSIkbHRfY3ZfcGF0aF9OTSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RVTVBCSU4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiAiZHVtcGJpbiAtc3ltYm9scyIgImxpbmsgLWR1bXAgLXN5bWJvbHMiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19jdF9EVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFVNUEJJTj0kYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOCitpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EVU1QQklOIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFVNUEJJTiIgPSB4OyB0aGVuCisgICAgRFVNUEJJTj0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEVU1QQklOPSRhY19jdF9EVU1QQklOCisgIGZpCitmaQorCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9ubV9pbnRlcmZhY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDQ1OiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDQ4OiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTo1MDUxOiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQogTE5fUz0kYXNfbG5fcwogaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgJGkgIT0gMTcgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKworCisKKworCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzLi4uICIgPiY2OyB9CisjIFRyeSBzb21lIFhTSSBmZWF0dXJlcworeHNpX3NoZWxsPW5vCisoIF9sdF9kdW1teT0iYS9iL2MiCisgIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCisgICAgICA9IGMsYS9iLCwgXAorICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKKyAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAorICAmJiB4c2lfc2hlbGw9eWVzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHhzaV9zaGVsbCIgPiY1CiskYXNfZWNobyAiJHhzaV9zaGVsbCIgPiY2OyB9CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiLi4uICIgPiY2OyB9CitsdF9zaGVsbF9hcHBlbmQ9bm8KKyggZm9vPWJhcjsgc2V0IGZvbyBiYXo7IGV2YWwgIiQxKz1cJDIiICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAorICAgID4vZGV2L251bGwgMj4mMSBcCisgICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfc2hlbGxfYXBwZW5kIiA+JjUKKyRhc19lY2hvICIkbHRfc2hlbGxfYXBwZW5kIiA+JjY7IH0KKworCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCiBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KQEAgLTQ0NzQsNyArNTQxNyw3IEBACiAjIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgogCiBjYXNlICRob3N0X29zIGluCi1haXg0KiB8IGFpeDUqKQorYWl4WzQtOV0qKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwogCkBAIC00NTA3LDEyICs1NDUwLDE4IEBACiAgIGZpCiAgIDs7CiAKK2NlZ2NjKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKIGRhcndpbiogfCByaGFwc29keSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCiAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICBpKjg2ICkKICAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCkBAIC00NTcwLDcgKzU1MTksNyBAQAogICA7OwogCiBuZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwogICBlbHNlCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJwpAQCAtNDU4MywxMiArNTUzMiwxMiBAQAogICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KICAgOzsKIAotbnRvLXFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKIG9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKICAgZWxzZQogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCkBAIC00NjA3LDYgKzU1NTYsMTAgQEAKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAorc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKIHN5c3Y0IHwgc3lzdjQuMyopCiAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCiAgIG1vdG9yb2xhKQpAQCAtNDYzNCwxNCArNTU4NywxNCBAQAogICBlc2FjCiAgIDs7CiAKLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQordHBmKikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIGVzYWMKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNjsgfQogZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCiBkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKIHRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgpAQCAtNDY0OSw2ICs1NjAyLDM2NyBAQAogCiAKIAorCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCitpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FSIiA9IHg7IHRoZW4KKyAgICBBUj0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVI9JGFjX2N0X0FSCisgIGZpCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK3Rlc3QgLXogIiRBUiIgJiYgQVI9YXIKK3Rlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1CisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAoraWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKKyRhc19lY2hvICIkU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgorICBhY19jdF9TVFJJUD0kU1RSSVAKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgorICAgIFNUUklQPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFNUUklQPSRhY19jdF9TVFJJUAorICBmaQorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCit0ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1CiskYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKK2lmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KKyAgICBSQU5MSUI9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUkFOTElCPSRhY19jdF9SQU5MSUIKKyAgZmkKK2Vsc2UKKyAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCitmaQorCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgorCisKKworCisKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKICMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCiBMVENDPSR7TFRDQy0iJENDIn0KIApAQCAtNDY1OSw4ICs1OTczLDI1OCBAQAogY29tcGlsZXI9JENDCiAKIAorIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tCQ0RFR1JTVF0nCisKKyMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgorc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tCQ0RUXScKKyAgOzsKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tCRFJUXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW0FCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKK2VzYWMKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXD4gJG5saXN0XCIiOyB9ID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICAgICAgICphZGRyZXNzOworfQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKwkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCisJICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1CisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKKworZmkKKworaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKKyRhc19lY2hvICJmYWlsZWQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwogIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKIGZpCiAKQEAgLTQ2NzIsMTA4ICs2MjM2LDEwNyBAQAogaWE2NC0qLWhwdXgqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0gICAgKkVMRi0zMiopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCi0gICAgICA7OwotICAgICpFTEYtNjQqKQotICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgotICAgICAgOzsKKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CiAgICAgZXNhYwogICBmaQogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAqLSotaXJpeDYqKQogICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJyNsaW5lIDQ2OTMgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgZWNobyAnI2xpbmUgNjI1NyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZWxzZQotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqMzItYml0KikKLSAgICAgIExEPSIke0xELWxkfSAtMzIiCi0gICAgICA7OwotICAgICpOMzIqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKIAogeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKICAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICozMi1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MHgtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICAqNjQtYml0KikKLSAgICAgIGxpYnN1ZmY9NjQKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCi0gICAgICAgICAgOzsKLSAgICAgICAgeDg2XzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTAqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCi0gICAgICAgICAgOzsKLSAgICAgICAgc3BhcmMqLSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OworICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKQEAgLTQ3ODMsMTAgKzYzNDYsMTAgQEAKICAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgogICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfY2NfbmVlZHNfYmVsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC00Nzk0LDExICs2MzU3LDcgQEAKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKLSAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC00ODA5LDM0ICs2MzY4LDEzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWx0X2N2X2NjX25lZWRzX2JlbGY9bm8KKyAgbHRfY3ZfY2NfbmVlZHNfYmVsZj1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogICAgICBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTQ4NDQsOCArNjM4Miw4IEBACiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNjsgfQogICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgogICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgogICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgpAQCAtNDg1NCw0MyArNjM5Miw2MjkgQEAKIHNwYXJjKi0qc29sYXJpcyopCiAgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KICAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KICAgICAqNjQtYml0KikKICAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCiAgICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKSAgICBMRD0iJHtMRC1sZH0gLTY0IiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OwogICAgICAgZXNhYwogICAgICAgOzsKICAgICBlc2FjCiAgIGZpCiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKLQotCiBlc2FjCiAKIG5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgogCiAKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitEU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAoraWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKKyRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgorICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgorICAgIERTWU1VVElMPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAorICBmaQorZWxzZQorICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK05NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKK2lmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKKyRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCisgIGFjX2N0X05NRURJVD0kTk1FRElUCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAoraWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQorJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgorICAgIE5NRURJVD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBOTUVESVQ9JGFjX2N0X05NRURJVAorICBmaQorZWxzZQorICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKK2ZpCisKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX0xJUE8rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitMSVBPPSRhY19jdl9wcm9nX0xJUE8KK2lmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQorJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgorICBhY19jdF9MSVBPPSRMSVBPCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfTElQTytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KK2lmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQorJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCisgICAgTElQTz0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBMSVBPPSRhY19jdF9MSVBPCisgIGZpCitlbHNlCisgIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAoraWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKKyRhc19lY2hvICIkT1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgorICBhY19jdF9PVE9PTD0kT1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgorICAgIE9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MPSRhY19jdF9PVE9PTAorICBmaQorZWxzZQorICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19PVE9PTDY0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0CitpZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0CitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgorICAgIE9UT09MNjQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAorICBmaQorZWxzZQorICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KKyAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1CisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKwogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCiBhY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwogYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KICMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCiBpZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgogICBDUFA9CiBmaQogaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgdGVzdCAiJHthY19jdl9wcm9nX0NQUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAogICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCkBAIC00OTA0LDExICs3MDI4LDcgQEAKICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fU1REQ19fCiAjIGluY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNDkxNyw3NiArNzAzNywzNCBAQAogI2VuZGlmCiAJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKIAorZWxzZQogICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCiBjb250aW51ZQogZmkKLQogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKIAogICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwogICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiBfQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgogICBicmVhawogZmkKIApAQCAtNDk5OCw4ICs3MDc2LDggQEAKIGVsc2UKICAgYWNfY3ZfcHJvZ19DUFA9JENQUAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1BQIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KIGFjX3ByZXByb2Nfb2s9ZmFsc2UKIGZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwogZG8KQEAgLTUwMDksMTEgKzcwODcsNyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CkBAIC01MDIyLDgzICs3MDk2LDQwIEBACiAjZW5kaWYKIAkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotCiBybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAogCiAgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCiAgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KIF9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi0KIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CiAKIGRvbmUKICMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIDoKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKKwogZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDU7IH0KIGZpCiAKIGFjX2V4dD1jCkBAIC01MTA4LDE2ICs3MTM5LDEyIEBACiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtNTEzMiw0NyArNzE1OSwyMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0cmluZy5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCiBlbHNlCiAgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQpAQCAtNTE4MiwxOCArNzE4NSwxNCBAQAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICA6CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKwogZWxzZQogICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKQEAgLTUyMDMsMTQgKzcyMDIsMTAgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIDoKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNTIzNywxMTMgKzcyMzIsMzYgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9oZWFkZXJfc3RkYz1ubworICBhY19jdl9oZWFkZXJfc3RkYz1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotCiBmaQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCiAjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgotCi0KLQotCi0KLQotCi0KLQogZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCiAJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY19IZWFkZXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgorZXZhbCBhc192YWw9XCQkYXNfYWNfSGVhZGVyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTUzNTEsMTQ2MiArNzI2OSwxOTYgQEAKIGRvbmUKIAogCi0KIGZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKCBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHgiInllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCiBfQUNFT0YKIAogZmkKIAogZG9uZQogCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotaWYgdGVzdCAteiAiJENYWCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJENDQyI7IHRoZW4KLSAgICBDWFg9JENDQwotICBlbHNlCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wuZXhlIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQwotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0NYWD0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKIAotZmkKLWZpCi1DWFg9JGFjX2N2X3Byb2dfQ1hYCi1pZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKIAorIyBTZXQgb3B0aW9ucwogCi0gICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCi0gIGFjX2N0X0NYWD0kQ1hYCi0gIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX2N0X0NYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCiAKLWZpCi1maQotYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAotaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCiAKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubwogCi0gIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCi1kb25lCiAKLSAgaWYgdGVzdCAieCRhY19jdF9DWFgiID0geDsgdGhlbgotICAgIENYWD0iZysrIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ1hYPSRhY19jdF9DWFgKLSAgZmkKLWZpCisgIGVuYWJsZV93aW4zMl9kbGw9bm8KIAotICBmaQotZmkKLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLS12ZXJzaW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLXYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC12ID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGFjX3RyeT0iJGFjX2NvbXBpbGVyIC1WID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlciAtViA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY29tcGlsZXJfZ251PW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1HWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9Ci1hY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDWFggYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jeHhfZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCi0gICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCi0gICBhY19jdl9wcm9nX2N4eF9nPW5vCi0gICBDWFhGTEFHUz0iLWciCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3Byb2dfY3h4X2c9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlDWFhGTEFHUz0iIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCi0JIENYWEZMQUdTPSItZyIKLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgotICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ci0gIGZpCi1maQotYWNfZXh0PWNwcAotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotZGVwY2M9IiRDWFgiICBhbV9jb21waWxlcl9saXN0PQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEJy4KLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCi0gICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCi0gIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKLSAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKLSAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCi0gICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAotICAjIGRpcmVjdG9yeS4KLSAgbWtkaXIgc3ViCi0KLSAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCi0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgY2FzZSAkZGVwbW9kZSBpbgotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbm9uZSkgYnJlYWsgOzsKLSAgICBlc2FjCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCi0gICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKLSAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCi0gICAgICAgIGJyZWFrCi0gICAgICBmaQotICAgIGZpCi0gIGRvbmUKLQotICBjZCAuLgotICBybSAtcmYgY29uZnRlc3QuZGlyCi1lbHNlCi0gIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQotQ1hYREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgotICBhbV9fZmFzdGRlcENYWF9UUlVFPQotICBhbV9fZmFzdGRlcENYWF9GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0nIycKLSAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9Ci1maQotCi0KLQotCi1pZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotICBhY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLWRvbmUKLSMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuCi0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKLQotZmkKLSAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAotZWxzZQotICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ1hYQ1BQIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDWFhDUFAiID4mNjsgfQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQkJICAgICBTeW50YXggZXJyb3IKLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbCAmJiB7Ci0JIHRlc3QgLXogIiRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWckYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgotY29udGludWUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1hY19leHQ9Y3BwCi1hY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQotCi1maQotCi0KLWFjX2V4dD1mCi1hY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgotICBkbwotICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRGNzciOyB0aGVuCi0gIGFjX2N2X3Byb2dfRjc3PSIkRjc3IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0Y3Nz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1GNzc9JGFjX2N2X3Byb2dfRjc3Ci1pZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JEY3NyIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotCi0gICAgdGVzdCAtbiAiJEY3NyIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRGNzciOyB0aGVuCi0gIGFjX2N0X0Y3Nz0kRjc3Ci0gIGZvciBhY19wcm9nIGluIGc3NyB4bGYgZjc3IGZydCBwZ2Y3NyBjZjc3IGZvcnQ3NyBmbDMyIGFmNzcgeGxmOTAgZjkwIHBnZjkwIHBnaHBmIGVwY2Y5MCBnZm9ydHJhbiBnOTUgeGxmOTUgZjk1IGZvcnQgaWZvcnQgaWZjIGVmYyBwZ2Y5NSBsZjk1IGZ0bgotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0Y3NyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9GNzc9IiRhY19jdF9GNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0Y3Nz0kYWNfY3ZfcHJvZ19hY19jdF9GNzcKLWlmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfRjc3IiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0Y3NyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0Y3NyIgPSB4OyB0aGVuCi0gICAgRjc3PSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogSW4gdGhlIGZ1dHVyZSwgQXV0b2NvbmYgd2lsbCBub3QgZGV0ZWN0IGNyb3NzLXRvb2xzCi13aG9zZSBuYW1lIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIGhvc3QgdHJpcGxldC4gIElmIHlvdSB0aGluayB0aGlzCi1jb25maWd1cmF0aW9uIGlzIHVzZWZ1bCB0byB5b3UsIHBsZWFzZSB3cml0ZSB0byBhdXRvY29uZkBnbnUub3JnLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBGNzc9JGFjX2N0X0Y3NwotICBmaQotZmkKLQotCi0jIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEZvcnRyYW4gNzcgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChhY190cnk9IiRhY19jb21waWxlciAtLXZlcnNpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA+JjUiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChhY190cnk9IiRhY19jb21waWxlciAtdiA+JjUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgLXYgPiY1IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoYWNfdHJ5PSIkYWNfY29tcGlsZXIgLVYgPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyIC1WID4mNSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXJtIC1mIGEub3V0Ci0KLSMgSWYgd2UgZG9uJ3QgdXNlIGAuRicgYXMgZXh0ZW5zaW9uLCB0aGUgcHJlcHJvY2Vzc29yIGlzIG5vdCBydW4gb24gdGhlCi0jIGlucHV0IGZpbGUuICAoTm90ZSB0aGF0IHRoaXMgb25seSBuZWVkcyB0byB3b3JrIGZvciBHTlUgY29tcGlsZXJzLikKLWFjX3NhdmVfZXh0PSRhY19leHQKLWFjX2V4dD1GCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Y3N19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLSNpZm5kZWYgX19HTlVDX18KLSAgICAgICBjaG9rZSBtZQotI2VuZGlmCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY29tcGlsZXJfZ251PW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2Y3N19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1hY19leHQ9JGFjX3NhdmVfZXh0Ci1hY190ZXN0X0ZGTEFHUz0ke0ZGTEFHUytzZXR9Ci1hY19zYXZlX0ZGTEFHUz0kRkZMQUdTCi1GRkxBR1M9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX2Y3N19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIEZGTEFHUz0tZwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19mNzdfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19jdl9wcm9nX2Y3N19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfcHJvZ19mNzdfZz1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2Y3N19nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2Y3N19nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0ZGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgRkZMQUdTPSRhY19zYXZlX0ZGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2Y3N19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCi0gICAgRkZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBGRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgotICAgIEZGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgRkZMQUdTPQotICBmaQotZmkKLQotRzc3PWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCi0KLSMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX21heF9jbWRfbGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgaT0wCi0gIHRlc3RzdHJpbmc9IkFCQ0QiCi0KLSAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgbXNkb3NkamdwcCopCi0gICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYwotICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KLSAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcwotICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKLSAgICA7OwotCi0gIGdudSopCi0gICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCi0gICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCi0gICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7Ci0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCi0gICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KLSAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAotICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKLSAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCi0gICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5Ci0gICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIGFtaWdhb3MqKQotICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KLSAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKLSAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKLSAgICBmaQotICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIDs7Ci0KLSAgaW50ZXJpeCopCi0gICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAotICAgIDs7Ci0KLSAgb3NmKikKLSAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKLSAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAotICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCi0gICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0Ci0gICAgIwotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCi0gICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgotICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgOzsKLSAgc2NvMy4ydjUqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKLSAgICA7OwotICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCi0gICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWyAJXS8vJ2AKLSAgICBlbHNlCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKLSAgICBmaQotICAgIDs7Ci0gICopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAotICAgIGVsc2UKLSAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICB3aGlsZSAodGVzdCAiWCJgJFNIRUxMICQwIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLWZpCi0KLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2OyB9Ci1maQotCi0KLQotCi0KLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tCQ0RFR1JTVF0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eLiAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tCQ0RUXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCi0gIDs7Ci1ocHV4KikgIyBJdHMgbGlua2VyIGRpc3Rpbmd1aXNoZXMgZGF0YSBmcm9tIGNvZGUgc3ltYm9scwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJwotICBmaQotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICA7OwotbGludXgqIHwgaypic2QqLWdudSkKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbQUJDREdJUlNUV10nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbQkNERUdSU1RdJwotICA7Owotb3NmKikKLSAgc3ltY29kZT0nW0JDREVHUVJTVF0nCi0gIDs7Ci1zb2xhcmlzKikKLSAgc3ltY29kZT0nW0JEUlRdJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbRFRdJwotICA7Owotc3lzdjQuMnV3MiopCi0gIHN5bWNvZGU9J1tEVF0nCi0gIDs7Ci1zeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICBzeW1jb2RlPSdbQUJEVF0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW0RGTlNUVV0nCi0gIDs7Ci1lc2FjCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCi0gIDs7Ci1lc2FjCi0KLSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgotY2FzZSBgJE5NIC1WIDI+JjFgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyY29yZSwgdGhlbiB3aXRoIGl0LgotZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotCi0gICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCi0gIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCi0KLSAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWyAJXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsgCV1bIAldKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLWNoYXIgbm1fdGVzdF92YXI7Ci12b2lkIG5tX3Rlc3RfZnVuYygpe30KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi1pbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQotRU9GCi0KLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdFwiIikgPiY1Ci0gIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCi0gICAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgotICAgICAgaWYgc29ydCAiJG5saXN0IiB8IHVuaXEgPiAiJG5saXN0IlQ7IHRoZW4KLQltdiAtZiAiJG5saXN0IlQgIiRubGlzdCIKLSAgICAgIGVsc2UKLQlybSAtZiAiJG5saXN0IlQKLSAgICAgIGZpCi0KLSAgICAgICMgTWFrZSBzdXJlIHRoYXQgd2Ugc25hZ2dlZCBhbGwgdGhlIHN5bWJvbHMgd2UgbmVlZC4KLSAgICAgIGlmIGdyZXAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiBncmVwICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCSAgY2F0IDw8RU9GID4gY29uZnRlc3QuJGFjX2V4dAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi1FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKLQotCSAgY2F0IDw8RU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KLSMgZGVmaW5lIGx0X3B0cl90IHZvaWQgKgotI2Vsc2UKLSMgZGVmaW5lIGx0X3B0cl90IGNoYXIgKgotIyBkZWZpbmUgY29uc3QKLSNlbmRpZgotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gKi8KLWNvbnN0IHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGx0X3B0cl90IGFkZHJlc3M7Ci19Ci1sdF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgotCSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiY1CisgICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCiAJZmkKLSAgICAgIGVsc2UKLQllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mNQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JjUKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLSAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLQotZmkKLQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQotZmkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGZhaWxlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1mYWlsZWQiID4mNjsgfQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvayIgPiY1Ci1lY2hvICIke0VDSE9fVH1vayIgPiY2OyB9CisgIGVuYWJsZV9zaGFyZWQ9eWVzCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgorZWxzZQorICBwaWNfbW9kZT1kZWZhdWx0CitmaQorCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAorCisKKworCisKKworCisgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkbHRtYWluIgorCisjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgorTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X29iamRpcitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCiBta2RpciAubGlicyAyPi9kZXYvbnVsbApAQCAtNjgxOCwxNCArNzQ3MCwzNCBAQAogZmkKIHJtZGlyIC5saWJzIDI+L2Rldi9udWxsCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9vYmpkaXIiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQogb2JqZGlyPSRsdF9jdl9vYmpkaXIKIAogCiAKIAogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX09CSkRJUiAiJGx0X2N2X29iamRpci8iCitfQUNFT0YKKworCisKKworCisKKworCisKKworCisKKworCisKKworCiBjYXNlICRob3N0X29zIGluCiBhaXgzKikKICAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCkBAIC02ODQwLDM2MCArNzUxMiw0MSBAQAogCiAjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCiAjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0nc2VkIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKIAogIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCiAKICMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCiAjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCiBkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJwogCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKwogIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCiBub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKIAotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KICMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAorb2ZpbGU9bGlidG9vbAogY2FuX2J1aWxkX3NoYXJlZD15ZXMKIAogIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCiAjIHdoaWNoIG5lZWRzICcubGliJykuCiBsaWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCisKIHdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCiAKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVI9IiR7YWNfdG9vbF9wcmVmaXh9YXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1BUj0kYWNfY3ZfcHJvZ19BUgotaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVIiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FSIjsgdGhlbgotICBhY19jdF9BUj0kQVIKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhciIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgotaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNjsgfQotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgQVI9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQVI9JGFjX2N0X0FSCi0gIGZpCi1lbHNlCi0gIEFSPSIkYWNfY3ZfcHJvZ19BUiIKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCi0gIGFjX2N0X1JBTkxJQj0kUkFOTElCCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCi1pZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCi0gICAgUkFOTElCPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgUkFOTElCPSRhY19jdF9SQU5MSUIKLSAgZmkKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKLWlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KLSAgYWNfY3RfU1RSSVA9JFNUUklQCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgotICAgIFNUUklQPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IEluIHRoZSBmdXR1cmUsIEF1dG9jb25mIHdpbGwgbm90IGRldGVjdCBjcm9zcy10b29scwotd2hvc2UgbmFtZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBob3N0IHRyaXBsZXQuICBJZiB5b3UgdGhpbmsgdGhpcwotY29uZmlndXJhdGlvbiBpcyB1c2VmdWwgdG8geW91LCBwbGVhc2Ugd3JpdGUgdG8gYXV0b2NvbmZAZ251Lm9yZy4iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJbiB0aGUgZnV0dXJlLCBBdXRvY29uZiB3aWxsIG5vdCBkZXRlY3QgY3Jvc3MtdG9vbHMKLXdob3NlIG5hbWUgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgaG9zdCB0cmlwbGV0LiAgSWYgeW91IHRoaW5rIHRoaXMKLWNvbmZpZ3VyYXRpb24gaXMgdXNlZnVsIHRvIHlvdSwgcGxlYXNlIHdyaXRlIHRvIGF1dG9jb25mQGdudS5vcmcuIiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgU1RSSVA9JGFjX2N0X1NUUklQCi0gIGZpCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLQogb2xkX0NDPSIkQ0MiCiBvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgogCiAjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwotdGVzdCAteiAiJEFSIiAmJiBBUj1hcgotdGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKLXRlc3QgLXogIiRBUyIgJiYgQVM9YXMKIHRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKIHRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwogdGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCi10ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCiB0ZXN0IC16ICIkTEQiICYmIExEPWxkCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi10ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotdGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLXRlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgogdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KIAotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLWZpCi0KIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwogICBjYXNlICRjY190ZW1wIGluCiAgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwpAQCAtNzIwMiwxNyArNzU1NSwxOCBAQAogICAgICopIGJyZWFrOzsKICAgZXNhYwogZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitjY19iYXNlbmFtZT1gJEVDSE8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogCiAjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCiBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogZmlsZV9tYWdpYyopCiAgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQpAQCAtNzIzNiw3ICs3NTkwLDcgQEAKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgogCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKICoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KQEAgLTcyNDcsNyArNzYwMSw3IEBACiAqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCiAqKiogYnVnLWxpYnRvb2xAZ251Lm9yZwogCi1FT0YKK19MVF9FT0YKIAkgIGZpIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTcyNjIsMTkgKzc2MTYsMjMgQEAKIAogTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCisKKworCiBpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmaWxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX01BR0lDX0NNRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZpbGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKQEAgLTcyOTgsNyArNzY1Niw3IEBACiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKIAkgIGVsc2UKLQkgICAgY2F0IDw8RU9GIDE+JjIKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCiAqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCkBAIC03MzA5LDcgKzc2NjcsNyBAQAogKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwogKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKIAotRU9GCitfTFRfRU9GCiAJICBmaSA7OwogCWVzYWMKICAgICAgIGZpCkBAIC03MzI0LDEzICs3NjgyLDE0IEBACiAKIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiskYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICBlbHNlCiAgICAgTUFHSUNfQ01EPToKICAgZmkKQEAgLTczNDAsMjggKzc2OTksOCBAQAogICA7OwogZXNhYwogCi1lbmFibGVfZGxvcGVuPW5vCi1lbmFibGVfd2luMzJfZGxsPW5vCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKLWZpCi0KLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1waWMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BpYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgotZWxzZQotICBwaWNfbW9kZT1kZWZhdWx0Ci1maQotCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQogIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9CisKIGx0X3NhdmVfQ0M9IiRDQyIKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwpAQCAtNzM4NCw2ICs3NzIzLDExIEBACiBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCiAKIAorCisKKworCisKICMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCiBMVENDPSR7TFRDQy0iJENDIn0KIApAQCAtNzM5MywzNSArNzczNyw0MiBAQAogIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KIGNvbXBpbGVyPSRDQwogCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKIAogIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgorJFJNIGNvbmZ0ZXN0KgogCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCiskUk0gLXIgY29uZnRlc3QqCiAKIAorIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCiAKIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQogCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKIAotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC03NDMzLDI1ICs3Nzg0LDI1IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc0MzY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3Nzg3OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjc0NDA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjc3OTE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQogCiBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCkBAIC03NDYxLDEyICs3ODEyLDE3IEBACiAKIGZpCiAKLWx0X3Byb2dfY29tcGlsZXJfd2w9CisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQogbHRfcHJvZ19jb21waWxlcl9waWM9CiBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KIAogICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCkBAIC03NDgyLDE3ICs3ODM4LDI1IEBACiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgogICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQpAQCAtNzUwNiw2ICs3ODcwLDIwIEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZuby1jb21tb24nCiAgICAgICA7OwogCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgNjQtYml0IFBBIEhQLVVYLCBidXQgbm90IGZvciAzMi1iaXQKKyAgICAgICMgUEEgSFAtVVguICBPbiBJQTY0IEhQLVVYLCBQSUMgaXMgdGhlIGRlZmF1bHQgYnV0IHRoZSBwaWMgZmxhZworICAgICAgIyBzZXRzIHRoZSBkZWZhdWx0IFRMUyBtb2RlbCBhbmQgYWZmZWN0cyBpbmxpbmluZy4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCiAgICAgaW50ZXJpeFszLTldKikKICAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCiAgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KQEAgLTc1MTgsMjUgKzc4OTYsMTggQEAKICAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKwogICAgIHN5c3Y0Kk1QKikKICAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0tS2NvbmZvcm1fcGljCiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQogICAgICopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCiAgICAgICA7OwpAQCAtNzU1MywxOCArNzkyNCw4IEBACiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKICAgICAgIGZpCiAgICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICAgICA7OwotICAgICAgIGVzYWMKLSAgICAgICA7OwogCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctRERMTF9FWFBPUlQnCkBAIC03NTkyLDE4ICs3OTUzLDI3IEBACiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICA7OwogCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KICAgICBsaW51eCogfCBrKmJzZCotZ251KQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwogICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CiAgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQpAQCAtNzYxNiw4ICs3OTg2LDE0IEBACiAgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgogICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCiAgICAgICAgIDs7CisgICAgICB4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xIG9uIFBQQworCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctcXN0YXRpY2xpbmsnCisJOzsKICAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQogCSAgIyBTdW4gQyA1LjkKIAkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKQEAgLTc2MzUsNiArODAxMSwxNyBAQAogICAgICAgZXNhYwogICAgICAgOzsKIAorICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCkBAIC03Njk3LDIxICs4MDg0LDM0IEBACiAgICAgZXNhYwogICBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWMiID4mNjsgfQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CisKKworCisKKwogCiAjCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCiAjCiBpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CiAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC03NzIzLDI3ICs4MTIzLDI3IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc3MjY6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MTI2OiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjc3MzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOjgxMzA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcworICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgogICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCiAgICAgICIiIHwgIiAiKikgOzsKICAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CkBAIC03NzU0LDI2ICs4MTU0LDIyIEBACiBmaQogCiBmaQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KLSAgICA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCi0gICAgOzsKLWVzYWMKKworCisKKworCiAKICMKICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KICMKIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgogICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CkBAIC03NzgzLDM2ICs4MTc5LDQxIEBACiAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCiAgICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkRUNITyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKICAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKICAgICAgICBmaQogICAgICBlbHNlCi0gICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIC1yIGNvbmZ0ZXN0KgogICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgogICAgIDoKIGVsc2UKICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAogICAgbWtkaXIgY29uZnRlc3QKICAgIGNkIGNvbmZ0ZXN0CiAgICBta2RpciBvdXQKQEAgLTc4MjcsODMgKzgyMjgsMTQ4IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc4MzA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MjMxOiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6NzgzNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6ODIzNTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAogICAgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAogICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCiAgICAgIGZpCiAgICBmaQogICAgY2htb2QgdSt3IC4gMj4mNQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgogICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CiAgICBjZCAuLgotICAgcm1kaXIgY29uZnRlc3QKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6ODI4NjogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjgyOTA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKIAogCiBoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCiBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCiAgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQogICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCisgICRSTSBjb25mdGVzdCoKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KICAgdG91Y2ggY29uZnRlc3QuYQogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRfbGlua3MiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQorJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KICAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KICAgICBuZWVkX2xvY2tzPXdhcm4KICAgZmkKIGVsc2UKICAgbmVlZF9sb2Nrcz1ubwogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAKICAgcnVucGF0aF92YXI9CiAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICBhcmNoaXZlX2NtZHM9CiAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9Ci0gIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubwogICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgIGhhcmRjb2RlX21pbnVzX0w9bm8KICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCiAgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KICAgbW9kdWxlX2NtZHM9CiAgIG1vZHVsZV9leHBzeW1fY21kcz0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKICAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKICAgaW5jbHVkZV9leHBzeW1zPQpAQCAtNzkxMSwyNiArODM3NywxNyBAQAogICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCiAgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKICAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKICAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CiAgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgogICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKICAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCiAgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KICAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0gICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KLSAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogICBjYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCkBAIC03OTU2LDE2ICs4NDEzLDE2IEBACiAgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCiAgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgogICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCiAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogICAgIGZpCiAgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgorICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgogICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQogICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KICAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KQEAgLTc5NzUsMTEgKzg0MzIsMTEgQEAKIAogICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzMtOV0qKQogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCiAJbGRfc2hsaWJzPW5vCi0JY2F0IDw8RU9GIDE+JjIKKwljYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAogKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCkBAIC03OTg3LDI2ICs4NDQ0LDI3IEBACiAqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICiAqKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgogCi1FT0YKK19MVF9FT0YKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKQEAgLTgwMTYsMTYgKzg0NzQsMTYgQEAKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCiAgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKICAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwogCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKIAkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCiAJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KQEAgLTgwNTYsNDggKzg1MTQsNzggQEAKICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAgICAgICA7OwogCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCiAJdG1wX2FkZGZsYWc9CisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCiAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0JcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCSAgOzsKIAlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwotCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKIAkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKIAllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwogCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCiAJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKKwl4bFtjQ10qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CiAJZXNhYwogCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgogCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKIAkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqKQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnIDs7CiAJZXNhYwogCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAotCWlmIHRlc3QgJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyA9IHllczsgdGhlbgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQorICAgICAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYwogICAgICAgZWxzZQotCWxkX3NobGlicz1ubworICAgICAgICBsZF9zaGxpYnM9bm8KICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwogCXdsYXJjPQogICAgICAgZWxzZQpAQCAtODEwNyw5ICs4NTk1LDkgQEAKICAgICAgIDs7CiAKICAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KIAlsZF9zaGxpYnM9bm8KLQljYXQgPDxFT0YgMT4mMgorCWNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQogKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbApAQCAtODExOCw4ICs4NjA2LDggQEAKICoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCiAqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KIAotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKQEAgLTgxNDMsMTAgKzg2MzEsMTQgQEAKIF9MVF9FT0YKIAk7OwogCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJwotCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgIGVsc2UKIAkgICAgbGRfc2hsaWJzPW5vCiAJICBmaQpAQCAtODE2Miw3ICs4NjU0LDcgQEAKICAgICAgIDs7CiAKICAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCiAJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKQEAgLTgxOTQsNyArODY4Niw3IEBACiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGFpeDQqIHwgYWl4NSopCisgICAgYWl4WzQtOV0qKQogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KIAkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CiAJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCkBAIC04MjA0LDIyICs4Njk2LDIyIEBACiAgICAgICBlbHNlCiAJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCiAJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKIAlmaQogCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KIAogCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAogCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQogCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQogCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQorCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCiAJICBkb25lCiAJICA7OwogCWVzYWMKQEAgLTgyMzYsMjggKzg3MjgsMzAgQEAKIAogICAgICAgYXJjaGl2ZV9jbWRzPScnCiAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIGZpbGVfbGlzdF9zcGVjPScke3dsfS1mLCcKIAogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQogCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwogCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgotICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLSAgCSAgOgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CiAJICBlbHNlCi0gIAkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLSAgCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTD15ZXMKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CiAJICBmaQogCSAgOzsKIAllc2FjCkBAIC04MjY4LDggKzg3NjIsOCBAQAogICAgICAgZWxzZQogCSMgbm90IHVzaW5nIGdjYwogCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CiAJICBzaGFyZWRfZmxhZz0nLUcnCiAJZWxzZQogCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCkBAIC04MjgwLDYgKzg3NzQsNyBAQAogCWZpCiAgICAgICBmaQogCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LWJleHBhbGwnCiAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCkBAIC04Mjg3LDEyICs4NzgyLDkgQEAKIAkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKIAkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKLSAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTgzMDMsMjQgKzg3OTUsNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKIGx0X2FpeF9saWJwYXRoX3NlZD0nCiAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewpAQCAtODMzNCwzMSArODgwOSwyMiBAQAogaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgogICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKIGZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCiAKLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQorICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKIAlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgogCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgogCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKIAllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTgzNjksMjQgKzg4MzUsNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKIGx0X2FpeF9saWJwYXRoX3NlZD0nCiAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewpAQCAtODQwMCwxNSArODg0OSw5IEBACiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCiAgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAogZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKIAogCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgpAQCAtODQyNiwxOCArODg2OSwyNSBAQAogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlicz1ubworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgYnNkaVs0NV0qKQogICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPS1yZHluYW1pYwogICAgICAgOzsKIAotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwogICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KICAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKQEAgLTg0NDksOSArODg5OSw5IEBACiAgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KICAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgogICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGAkRUNITyAiWCRkZXBsaWJzIiB8ICRYc2VkIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCiAgICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0ndHJ1ZScKKyAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCiAgICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgogICAgICAgb2xkX2FyY2hpdmVfY21kcz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwogICAgICAgZml4X3NyY2ZpbGVfcGF0aD0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCkBAIC04NDU5LDUzICs4OTA5LDMwIEBACiAgICAgICA7OwogCiAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBtb2R1bGVfY21kcz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJworICBsaW5rX2FsbF9kZXBsaWJzPXllcworICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCiAgICAgICA7OwogCiAgICAgZGd1eCopCkBAIC04NTQ3LDkgKzg5NzQsOSBAQAogCiAgICAgaHB1eDkqKQogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgpAQCAtODU2OSwxMSArODk5NiwxMSBAQAogICAgICAgZmkKICAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0KIAloYXJkY29kZV9kaXJlY3Q9eWVzCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKLQogCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAJaGFyZGNvZGVfbWludXNfTD15ZXMKQEAgLTg1ODcsNyArOTAxNCw3IEBACiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwpAQCAtODYxMiwxMiArOTAzOSwxMiBAQAogCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJICBoYXJkY29kZV9kaXJlY3Q9bm8KIAkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KIAkgIDs7CiAJKikKIAkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKIAkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKIAogCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKQEAgLTg2MzAsMTggKzkwNTcsMzYgQEAKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisgICAgICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgICAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyh2b2lkKSB7fQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSctcnBhdGggJGxpYmRpcicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBpbmhlcml0X3JwYXRoPXllcwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIDs7CiAKICAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKQEAgLTg2NTksMTEgKzkxMDQsMTUgQEAKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KICAgICAgIDs7CiAKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgOzsKKwogICAgIG9wZW5ic2QqKQogICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KIAloYXJkY29kZV9kaXJlY3Q9eWVzCiAJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKIAkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCkBAIC04Njc5LDcgKzkxMjgsNyBAQAogCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKIAkgICAgIDs7CiAJICBlc2FjCi0gICAgICAgIGZpCisJZmkKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC04Njg5LDE4ICs5MTM4LDE5IEBACiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCiAgICAgICA7OwogCiAgICAgb3NmMyopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBlbHNlCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIDs7CkBAIC04NzA4LDMyICs5MTU4LDQzIEBACiAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwogCiAJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQogCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwogICAgICAgZmkKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKIAogICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCkBAIC04NzQzLDcgKzkyMDQsNyBAQAogCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCiAJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAogCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCiAJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJZWxzZQpAQCAtODgzMiwxOCArOTI5MywxOCBAQAogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJwogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIApAQCAtODg1NywxMiArOTMxOCwzNiBAQAogICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICA7OwogICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCiAgIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzIiA+JjUKKyRhc19lY2hvICIkbGRfc2hsaWJzIiA+JjY7IH0KIHRlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCit3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKworCisKKworCisKKworCisKKworCisKKworCisKICMKICMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KICMKQEAgLTg4ODAsMTYgKzkzNjUsMTYgQEAKICAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKICAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwogICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KKyAgICAgICRSTSBjb25mdGVzdCoKICAgICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogCi0gICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgogICAgICAgICBzb25hbWU9Y29uZnRlc3QKICAgICAgICAgbGliPWNvbmZ0ZXN0CiAgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dApAQCAtODkwMywxMSArOTM4OCwxMSBAQAogICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CiAgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCiAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQorICAgICAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CiAgICAgICAgIHRoZW4KIAkgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCiAgICAgICAgIGVsc2UKQEAgLTg5MTcsMzAgKzk0MDIsMTczIEBACiAgICAgICBlbHNlCiAgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQogICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY2OyB9CisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQogICAgICAgOzsKICAgICBlc2FjCiAgIGZpCiAgIDs7CiBlc2FjCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KIAogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtODk0OCwxNCArOTU3NiwxNCBAQAogICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CiAgIGVzYWMKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgaWYgZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgogICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKICAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKICAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKICAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCiAgIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCiAgIGZpCiAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CiAgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgpAQCAtODk2OSw3ICs5NTk3LDcgQEAKIAlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKICAgICBmaQogICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIHwgYXdrICcKIEJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKICAgbHRfZm9vPSIiOwogICBsdF9jb3VudD0wOwpAQCAtODk4OSwxMCArOTYxNywyMyBAQAogICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbbHRfZm9vXSsrOyB9CiAgIGlmIChsdF9mcmVxW2x0X2Zvb10gPT0gMSkgeyBwcmludCBsdF9mb287IH0KIH0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCiBlbHNlCiAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKIGZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKIG5lZWRfbGliX3ByZWZpeD11bmtub3duCiBoYXJkY29kZV9pbnRvX2xpYnM9bm8KIApAQCAtOTAxMCw3ICs5NjUxLDcgQEAKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgOzsKIAotYWl4NCogfCBhaXg1KikKK2FpeFs0LTldKikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KQEAgLTkwMjksNyArOTY3MCw3IEBACiAgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCiAgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwogCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgogCToKICAgICAgIGVsc2UKIAljYW5fYnVpbGRfc2hhcmVkPW5vCkBAIC05MDU1LDkgKzk2OTYsMTggQEAKICAgOzsKIAogYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkRUNITyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYwogICA7OwogCiBiZW9zKikKQEAgLTkwODAsMjUgKzk3MzAsMjggQEAKICAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCiAgIDs7CiAKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgdmVyc2lvbl90eXBlPXdpbmRvd3MKICAgc2hyZXh0X2NtZHM9Ii5kbGwiCiAgIG5lZWRfdmVyc2lvbj1ubwogICBuZWVkX2xpYl9wcmVmaXg9bm8KIAogICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwogICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBpZiB0ZXN0IC1uICdcJyckc3RyaXBtZSdcJycgJiYgdGVzdCAtbiAnXCcnJHN0cmlwbGliJ1wnJzsgdGhlbgorICAgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICAgIGZpJwogICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKKyAgICAgICAkUk0gXCRkbHBhdGgnCiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtOTEwNywyMCArOTc2MCwyMCBAQAogICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgogICAgICAgOzsKLSAgICBtaW5ndyopCisgICAgbWluZ3cqIHwgY2VnY2MqKQogICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKICAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8ICRHUkVQICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CiAgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKICAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQogICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCiAgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKICAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCiAgICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgICAgIGZpCiAgICAgICA7OwogICAgIHB3MzIqKQpAQCAtOTE0NCw3ICs5Nzk3LDcgQEAKICAgdmVyc2lvbl90eXBlPWRhcndpbgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSApAQCAtOTI0MywxOCArOTg5NiwxOCBAQAogICAgIGZpCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQorICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKICAgICBzaHJleHRfY21kcz0nLnNsJwogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICkBAIC05MzMxLDE2ICs5OTg0LDQzIEBACiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgIHNhdmVfbGliZGlyPSRsaWJkaXIKKyAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorICAgICAgIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIExERkxBR1M9JHNhdmVfTERGTEFHUworICBsaWJkaXI9JHNhdmVfbGliZGlyCisKICAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCiAgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAogICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKworICAjIEFkZCBBQkktc3BlY2lmaWMgZGlyZWN0b3JpZXMgdG8gdGhlIHN5c3RlbSBsaWJyYXJ5IHBhdGguCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliNjQgL3Vzci9saWI2NCAvbGliIC91c3IvbGliIgogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKICAgZmkKIApAQCAtOTM1Nyw3ICsxMDAzNyw3IEBACiAgIHZlcnNpb25fdHlwZT1zdW5vcwogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwogICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwpAQCAtOTM3OCwxNCArMTAwNTgsMTYgQEAKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwogCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4CisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwogICA7OwogCiBvcGVuYnNkKikKQEAgLTkzOTQsMTMgKzEwMDc2LDEzIEBACiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OworICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CiAgIGVzYWMKICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQogCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtOTQ3Miw3ICsxMDE1NCw2IEBACiAgICAgc25pKQogICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwogICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKICAgICAgIDs7CiAgICAgc2llbWVucykKQEAgLTk1MDMsMTMgKzEwMTg0LDEyIEBACiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBlbHNlCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIHNjbzMuMnY1KikKICAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCkBAIC05NTE5LDYgKzEwMTk5LDE3IEBACiAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKICAgOzsKIAordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwogdXRzNCopCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKQEAgLTk1MzAsOCArMTAyMjEsOCBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogZXNhYwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9CiB0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCkBAIC05NTM5LDExICsxMDIzMCwxMDQgQEAKICAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAiID4mNjsgfQogaGFyZGNvZGVfYWN0aW9uPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwgXAoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8CisgICB0ZXN0IC1uICIkcnVucGF0aF92YXIiIHx8CiAgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSAiWHllcyIgOyB0aGVuCiAKICAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgpAQCAtOTU1MSw3ICsxMDMzNSw3IEBACiAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKICAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQogICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCiAgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgogICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCiAgICAgaGFyZGNvZGVfYWN0aW9uPXJlbGluawpAQCAtOTU2NCwxMCArMTAzNDgsMTEgQEAKICAgIyBkaXJlY3Rvcmllcy4KICAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQogCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluazsgdGhlbgoraWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbmsgfHwKKyAgIHRlc3QgIiRpbmhlcml0X3JwYXRoIiA9IHllczsgdGhlbgogICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwogZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fApAQCAtOTU3NiwzNyArMTAzNjEsMTIgQEAKICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwogZmkKIAotc3RyaXBsaWI9Ci1vbGRfc3RyaXBsaWI9Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgZ3JlcCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCi0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCi0gIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNjsgfQotZWxzZQotIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgIGRhcndpbiopCi0gICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KLSAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2OyB9Ci0gICAgICAgZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjY7IH0KLWZpCi0gICAgICAgOzsKLSAgICopCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotICAgIDs7Ci0gIGVzYWMKLWZpCiAKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorCisKKworCisgIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgogICBlbmFibGVfZGxvcGVuPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCkBAIC05NjIxLDMwICsxMDM4MSwyNiBAQAogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIDs7CiAKLSAgbWluZ3cqIHwgcHczMiopCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OworICAgIDs7CiAKICAgY3lnd2luKikKICAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7CisgICAgOzsKIAogICBkYXJ3aW4qKQogICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC05NjYyLDM5ICsxMDQxOCwxOCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9saWJfZGxfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHgiInllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKIGVsc2UKIApAQCAtOTcwNCwxMDUgKzEwNDM5LDIxIEBACiAKIGZpCiAKLSAgIDs7CisgICAgOzsKIAogICAqKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBzaGxfbG9hZCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHNobF9sb2FkLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIHNobF9sb2FkIGlubm9jdW91c19zaGxfbG9hZAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBzaGxfbG9hZCAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBzaGxfbG9hZAotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyIHNobF9sb2FkICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfc2hsX2xvYWQgfHwgZGVmaW5lZCBfX3N0dWJfX19zaGxfbG9hZAotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBzaGxfbG9hZCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9mdW5jX3NobF9sb2FkPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2Z1bmNfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geCIieWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtOTgyMCwxMzcgKzEwNDcxLDMyIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KKyAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCA9IHllczsgdGhlbgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGRsb3BlbiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGRsb3Blbi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBkbG9wZW4gaW5ub2N1b3VzX2Rsb3BlbgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBkbG9wZW4gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZGxvcGVuCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfZGxvcGVuIHx8IGRlZmluZWQgX19zdHViX19fZGxvcGVuCi1jaG9rZSBtZQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZnVuY19kbG9wZW49bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJkbG9wZW4iICJhY19jdl9mdW5jX2Rsb3BlbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19kbG9wZW4iID0geCIieWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtOTk2OCw1MyArMTA1MTQsMjggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCiBlbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sc3ZsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCkBAIC0xMDAzMiw1MyArMTA1NTMsMjggQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KKyAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKIGVsc2UKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIC8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgpAQCAtMTAwOTYsNDAgKzEwNTkyLDE5IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgotICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA9IHgiInllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGZpCiAKIApAQCAtMTAxNjcsMTggKzEwNjQyLDE4IEBACiAgICAgc2F2ZV9MSUJTPSIkTElCUyIKICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCiAKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAxODEgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDEwNjU2ICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAyMTksMTAgKzEwNjk0LDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKLSNlbmRpZgotCiB2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CiBpbnQgbWFpbiAoKQogewpAQCAtMTAyMzgsMTQgKzEwNzA5LDE0IEBACiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMDI2MiwyMyArMTA3MzMsMjMgQEAKIAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CiAKICAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTAyODEgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lIDEwNzUyICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTAzMTksMTAgKzEwNzkwLDYgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKLSNlbmRpZgotCiB2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CiBpbnQgbWFpbiAoKQogewpAQCAtMTAzMzgsMTQgKzEwODA1LDE0IEBACiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMDM2Miw4ICsxMDgyOSw4IEBACiAKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KICAgICBmaQogCiAgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgpAQCAtMTAzODQsNjE3OSArMTA4NTEsMTAzIEBACiBmaQogCiAKLSMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwogCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7CiAKLWFpeDQqIHwgYWl4NSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQorCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQogICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjY7IH0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNjsgfQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXIgXAotICAgIENDIFwKLSAgICBMRCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWMgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKLSAgICBwcmVkZXBfb2JqZWN0cyBcCi0gICAgcG9zdGRlcF9vYmplY3RzIFwKLSAgICBwcmVkZXBzIFwKLSAgICBwb3N0ZGVwcyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKLSAgICBhcmNoaXZlX2NtZHMgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgXAotICAgIHBvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnIFwKLSAgICBub191bmRlZmluZWRfZmxhZyBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljIFwKLSAgICBtb2R1bGVfY21kcyBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aCBcCi0gICAgZXhjbHVkZV9leHBzeW1zIFwKLSAgICBpbmNsdWRlX2V4cHN5bXM7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgfCBcCi0gICAgYXJjaGl2ZV9jbWRzIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgfCBcCi0gICAgbW9kdWxlX2NtZHMgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCisgICopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgICAgOzsKICAgZXNhYworZmkKIAotY2ZnZmlsZT0iJHtvZmlsZX1UIgotICB0cmFwICIkcm0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQotICAkcm0gLWYgIiRjZmdmaWxlIgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkb2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkb2ZpbGUiID4mNjt9CiAKLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jISAkU0hFTEwKIAotIyBgJGVjaG8gIiRjZmdmaWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCkKLSMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sOgotIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIwotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0jIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgogCi0jIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCi1TRUQ9JGx0X1NFRAogCi0jIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgotWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAogCi0jIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWF2YWlsYWJsZV90YWdzPQogCi0jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRwogCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CiAKLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKIAotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKyAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNhbl9idWlsZF9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRjYW5fYnVpbGRfc2hhcmVkIiA+JjY7IH0KIAotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0MKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTEQKLQotIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KLU5NPSRsdF9OTQotCi0jIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgotTUFHSUNfQ01EPSRNQUdJQ19DTUQKLQotIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCi1ETExUT09MPSIkRExMVE9PTCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KLU9CSkRVTVA9IiRPQkpEVU1QIgotCi0jIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCi1BUz0iJEFTIgotCi0jIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KLW9iamRpcj0kb2JqZGlyCi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KLXdsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KLQotIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KLW5lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKLQotIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcwotYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCi0KLSMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgotb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKLXN0cmlwbGliPSRsdF9zdHJpcGxpYgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBzPSRsdF9wb3N0ZGVwcwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKLQotIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCi0KLV9fRU9GX18KLQotCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYWl4MyopCi0gICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCi0KLSMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0jIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKLSAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICBjaG1vZCAreCAiJG9maWxlIgotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRhZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0kd2l0aF90YWdzOyB0YWduYW1lcz0iJHdpdGh2YWwiCi1maQotCi0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mMjt9Ci0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjI7fQotICAgIGVsc2UKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiYyO30KLSAgICBmaQotICBmaQotICBpZiB0ZXN0IC16ICIkTFRDRkxBR1MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENGTEFHUz0nYCIKLSAgZmkKLQotICAjIEV4dHJhY3QgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIGluICRvZmlsZS4KLSAgIyBOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIHRoZSBlbnRpcmUgbGlzdCBpcyBvbiBvbmUgbGluZS4KLSAgYXZhaWxhYmxlX3RhZ3M9YGdyZXAgIl5hdmFpbGFibGVfdGFncz0iICIke29maWxlfSIgfCAkU0VEIC1lICdzL2F2YWlsYWJsZV90YWdzPVwoLiokXCkvXDEvJyAtZSAncy9cIi8vZydgCi0KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gIGZvciB0YWduYW1lIGluICR0YWduYW1lczsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGFnbmFtZSBjb250YWlucyBvbmx5IHZhbGlkIGNoYXJhY3RlcnMKLSAgICBjYXNlIGAkZWNobyAiWCR0YWduYW1lIiB8ICRYc2VkIC1lICdzOlstX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQk7OwotICAgIGVzYWMKLQotICAgIGlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJCIgPCAiJHtvZmlsZX0iID4gL2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHRhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0cyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0KLSAgICAjIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSI7IHRoZW4KLSAgICAgIGVjaG8gYXBwZW5kaW5nIGNvbmZpZ3VyYXRpb24gdGFnIFwiJHRhZ25hbWVcIiB0byAkb2ZpbGUKLQotICAgICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgQ1hYKQotCWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0JICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotCSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLQkgIGFjX2V4dD1jcHAKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPQotaGFyZGNvZGVfZGlyZWN0X0NYWD1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotaGFyZGNvZGVfbWludXNfTF9DWFg9bm8KLWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCi1oYXJkY29kZV9hdXRvbWF0aWNfQ1hYPW5vCi1tb2R1bGVfY21kc19DWFg9Ci1tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQotbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgotb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKLW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0KLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6Ci1wcmVkZXBfb2JqZWN0c19DWFg9Ci1wb3N0ZGVwX29iamVjdHNfQ1hYPQotcHJlZGVwc19DWFg9Ci1wb3N0ZGVwc19DWFg9Ci1jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0NYWD0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0NYWD0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9JHdpdGhfZ251X2xkOyB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpCi0KLWFjX3Byb2c9bGQKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2OyB9Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEdOVSBsZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1maQotaWYgdGVzdCAiJHtsdF9jdl9wYXRoX0xEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxkX3NobGlic19DWFg9eWVzCi1jYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBhaXg0KiB8IGFpeDUqKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCWZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotCSAgY2FzZSAkbGRfZmxhZyBpbgotCSAgKi1icnRsKikKLQkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgIGVzYWMKLQlkb25lCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLSAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICBmaQotCi0gICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgIGFyY2hpdmVfY21kc19DWFg9JycKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCi0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCi0gICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLSAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAotCXRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCWVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9dW5zdXBwb3J0ZWQKLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0Jc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgICMgbm90IHVzaW5nIGdjYwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0Jc2hhcmVkX2ZsYWc9Jy1HJwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JZWxzZQotCSAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQlmaQotICAgICAgZmkKLSAgICBmaQotCi0gICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPXllcwotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0gICAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Jy1iZXJvaycKLSAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iLXogbm9kZWZzIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm9rJwotCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICBmaQotICAgIGZpCi0gICAgOzsKLQotICBiZW9zKikKLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGVsc2UKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICBmaQotICAgIDs7Ci0KLSAgY2hvcnVzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJwotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAotICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KLSAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgIGlmICRDQyAtZHVtcHNwZWNzIDI+JjEgfCAkRUdSRVAgJ3NpbmdsZV9tb2R1bGUnID4vZGV2L251bGwgOyB0aGVuCi0gICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgZWxzZQotICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICAgIGZpCi0gICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIGZpCi0gICAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICAgbW9kdWxlX2NtZHNfQ1hYPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGZpCi0gICAgICAgIDs7Ci0KLSAgZGd1eCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGVjKysqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgZ2hjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGZyZWVic2RbMTJdKikKLSAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgZnJlZWJzZC1lbGYqKQotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIDs7Ci0gIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICMgY29udmVudGlvbnMKLSAgICBsZF9zaGxpYnNfQ1hYPXllcwotICAgIDs7Ci0gIGdudSopCi0gICAgOzsKLSAgaHB1eDkqKQotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBDQyopCi0gICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICAgIDs7Ci0gICAgYUNDKikKLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSAgICAgICMKLSAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLSAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0gICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0gICAgICAjIGRlcGVuZGVuY2llcy4KLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbLV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaHB1eDEwKnxocHV4MTEqKQotICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwotICAgICAgKikKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGFDQyopCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCopCi0JICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGlhNjQqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBpbnRlcml4WzMtOV0qKQotICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgIDs7Ci0gIGlyaXg1KiB8IGlyaXg2KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU0dJIEMrKwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgZWxzZQotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJwotCSAgZmkKLQlmaQotCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCTs7Ci0gICAgZXNhYwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgIDs7Ci0gIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGljcGMqKQotCSMgSW50ZWwgQysrCi0Jd2l0aF9nbnVfbGQ9eWVzCi0JIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAotCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJWZXJzaW9uIDcuIiopCi0gIAkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICB0bXBfaWR5bj0KLQkgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkgIGVzYWMKLSAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JZXNhYwotCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCTs7Ci0gICAgICBwZ0NDKikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSAgCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICA7OwotICAgICAgY3h4KikKLQkjIENvbXBhcSBDKysKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLXJwYXRoICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMrKyA1LjkKLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCi0JICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCi0JICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAjIHdvdWxkIGJlIGJldHRlci4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAjIGluIHRoZSBhcmNoaXZlLgotCSAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBseW54b3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBtODhrKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgbXZzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgY3h4KikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBmaQotICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLSAgICA7OwotICBvcGVuYnNkMiopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBmaQotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gICAgOzsKLSAgb3NmMyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLQllbHNlCi0JICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgIGxkX3NobGlic19DWFg9bm8KLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG9zZjQqIHwgb3NmNSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCWFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCi0KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgY3h4KikKLQlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KLQkgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIC1XbCwtaW5wdXQgLVdsLCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24JJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgotCSAgJHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCIgfCBncmVwIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBwc29zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgc3Vub3M0KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCSMgU3VuIEMrKyA0LngKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGxjYyopCi0JIyBMdWNpZAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc29sYXJpcyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0gICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLQlub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotCWNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLQkgICopCi0JICAgICMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JICAgICMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCi0JICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQllc2FjCi0JbGlua19hbGxfZGVwbGlic19DWFg9eWVzCi0KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSMgaW4gdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGdjeCopCi0JIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgICopCi0JIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LXogJHt3bH1kZWZzJwotCSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9IiRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZWxzZQotCSAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCi0JICAgICMgcGxhdGZvcm0uCi0JICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIFwiXC1MXCIiCi0JICBmaQotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tUiAkd2wkbGliZGlyJwotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotCSAgKikKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICMgYXMgLXogZGVmcy4KLSAgICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0gICAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKLSAgICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbwotICAgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0gICAgIyBTbyB0aGF0IGJlaGF2aW91ciBpcyBvbmx5IGVuYWJsZWQgaWYgU0NPQUJTUEFUSCBpcyBzZXQgdG8gYQotICAgICMgbm9uLWVtcHR5IHZhbHVlIGluIHRoZSBlbnZpcm9ubWVudC4gIE1vc3QgbGlrZWx5IG9ubHkgdXNlZnVsIGZvcgotICAgICMgY3JlYXRpbmcgb2ZmaWNpYWwgZGlzdHJpYnV0aW9ucyBvZiBwYWNrYWdlcy4KLSAgICAjIFRoaXMgaXMgYSBoYWNrIHVudGlsIGxpYnRvb2wgb2ZmaWNpYWxseSBzdXBwb3J0cyBhYnNvbHV0ZSBwYXRoCi0gICAgIyBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcmllcy4KLSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosbm9kZWZzJwotICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubwotICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JwotICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUJleHBvcnQnCi0gICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB0YW5kZW0qKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBOQ0MqKQotCSMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdnh3b3JrcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gICopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotR0NDX0NYWD0iJEdYWCIKLUxEX0NYWD0iJExEIgotCi0KLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLUVPRgotCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgotICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCi0gICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKLQotICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbwotICAgIGNhc2UgJHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCi0JICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZWxzZQotCSBwcmV2PQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICRwIGluCi0JIC1MKiB8IC1SKikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgotCSAgIGVsc2UKLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgotCSBlbHNlCi0JICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCi0JIGVsc2UKLQkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKLQkgZWxzZQotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCi1maQotCi0kcm0gLWYgY29uZmVzdC4kb2JqZXh0Ci0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1jYXNlICRob3N0X29zIGluCi1pbnRlcml4WzMtOV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIHByZWRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcF9vYmplY3RzX0NYWD0KLSAgcG9zdGRlcHNfQ1hYPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zb2xhcmlzKikKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgQ0MqKQotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgotICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKLSAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgotICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCi0gICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLWVzYWMKLQotCi1jYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCi0qIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OwotZXNhYwotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZuby1jb21tb24nCi0gICAgICA7OwotICAgICpkamdwcCopCi0gICAgICAjIERKR1BQIGRvZXMgbm90IHN1cHBvcnQgc2hhcmVkIGxpYnJhcmllcyBhdCBhbGwKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgIDs7Ci0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQqIHwgYWl4NSopCi0JIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQllbHNlCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLQlmaQotCTs7Ci0gICAgICBjaG9ydXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JY3hjaDY4KikKLQkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFub2NvbW1vbicKLSAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCAtRFBJQyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTI3MDE6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI3MDU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyODA1OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTI4MDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDQqIHwgYWl4NSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotICAgIGlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGVsc2UKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZmkKLSAgICA7OwotICBwdzMyKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0iJGx0ZGxsX2NtZHMiCi0gIDs7Ci0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvOy9eLipbIF1fX25tX18vcy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19DWFggaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0NYWCAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0NYWD0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfQ1hYIFwKLSAgICBDQ19DWFggXAotICAgIExEX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFggXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCi0gICAgcHJlZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfQ1hYIFwKLSAgICBwcmVkZXBzX0NYWCBcCi0gICAgcG9zdGRlcHNfQ1hYIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCi0gICAgcG9zdGluc3RhbGxfY21kc19DWFggXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19DWFggXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19DWFggXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIFwKLSAgICBtb2R1bGVfY21kc19DWFggXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9DWFggXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFggXAotICAgIGluY2x1ZGVfZXhwc3ltc19DWFg7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCB8IFwKLSAgICBhcmNoaXZlX2NtZHNfQ1hYIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG1vZHVsZV9jbWRzX0NYWCB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9DWFgKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19DWFgKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0NYWAotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19DWFgKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0NYWAotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfQ1hYCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9JGx0X3NhdmVfQ0MKLUxEQ1hYPSRMRAotTEQ9JGx0X3NhdmVfTEQKLUdDQz0kbHRfc2F2ZV9HQ0MKLXdpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAotd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLWx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAotbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi1sdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgRjc3KQotCWlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgotCi1hY19leHQ9ZgotYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KLWhhcmRjb2RlX2F1dG9tYXRpY19GNzc9bm8KLW1vZHVsZV9jbWRzX0Y3Nz0KLW1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci1saW5rX2FsbF9kZXBsaWJzX0Y3Nz11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0kb2xkX2FyY2hpdmVfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfRjc3PSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAotICAgICAgc3Vicm91dGluZSB0Ci0gICAgICByZXR1cm4KLSAgICAgIGVuZAotIgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtGNzctImY3NyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0Y3Nz0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNjsgfQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1haXg0KiB8IGFpeDUqKQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCiAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgZmkKLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNjsgfQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2OyB9Ci0KLUdDQ19GNzc9IiRHNzciCi1MRF9GNzc9IiRMRCIKLQotbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3Nz1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQzNjk6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTQzNzM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NyBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzdcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE0NDczOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTQ0Nzc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubwotICBhcmNoaXZlX2NtZHNfRjc3PQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3Nz0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3PQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfRjc3PW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubwotICBtb2R1bGVfY21kc19GNzc9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfRjc3PQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19GNzc9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKICAgICBmaQogICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCiAKLSAgbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGVuYWJsZV9zaGFyZWQiID4mNjsgfQogCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqIHwgYWl4NCogfCBhaXg1KikKLSAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KIAotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCiAKLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBGNzcpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfRjc3PW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0Y3Nz1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAogCiBmaQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotICAgICAgcHJvZ3JhbSBtYWluCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJub3RvaycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyRjb252ZW5pZW5jZScKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScgJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3PSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBmaXhfc3JjZmlsZV9wYXRoX0Y3Nz0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bMDEyXSkKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJwotICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHNfRjc3PSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLQotCWhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PScrYiAkbGliZGlyJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLQkgIDs7Ci0JKikKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLQkgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICByZWxvYWRfY21kc19GNzc9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LG5vZGVmcycKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0Y3NyIgPiY2OyB9Ci10ZXN0ICIkbGRfc2hsaWJzX0Y3NyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHNfRjc3IGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNjsgfQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3Ci0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19GNzcgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjY7IH0KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLQotbmVlZF9saWJfcHJlZml4PXVua25vd24KLWhhcmRjb2RlX2ludG9fbGlicz1ubwotCi0jIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KLSMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cwotbmVlZF92ZXJzaW9uPXVua25vd24KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0KLSAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICA7OwotCi1haXg0KiB8IGFpeDUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsgCV0qaHdjYXBbIAldL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNjsgfQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcy4uLiAkRUNIT19DIiA+JjY7IH0KLWhhcmRjb2RlX2FjdGlvbl9GNzc9Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzciIHx8IFwKLSAgIHRlc3QgLW4gIiRydW5wYXRoX3Zhcl9GNzciIHx8IFwKLSAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljX0Y3NyIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X0Y3NyIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgRjc3KSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0xfRjc3IiAhPSBubzsgdGhlbgotICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1yZWxpbmsKLSAgZWxzZQotICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCi0gICAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uX0Y3Nz11bnN1cHBvcnRlZAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNjsgfQotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX0Y3NyBcCi0gICAgQ0NfRjc3IFwKLSAgICBMRF9GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3IFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3IFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgXAotICAgIHByZWRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcG9zdGRlcF9vYmplY3RzX0Y3NyBcCi0gICAgcHJlZGVwc19GNzcgXAotICAgIHBvc3RkZXBzX0Y3NyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NyBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NyBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3NyBcCi0gICAgbW9kdWxlX2NtZHNfRjc3IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfRjc3IFwKLSAgICBleGNsdWRlX2V4cHN5bXNfRjc3IFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfRjc3OyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19GNzcgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgfCBcCi0gICAgYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBtb2R1bGVfY21kc19GNzcgfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzcgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfRjc3Ci0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfRjc3Ci0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfRjc3Ci0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0Y3NwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfRjc3Ci1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfRjc3Ci1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NwotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfRjc3Ci1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19GNzcKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0Y3NwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9GNzcKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfRjc3Ci0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbl9GNzcKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3NwotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9GNzcKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX0Y3NwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19GNzcKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX0Y3NwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXNfRjc3Ci0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTE2NTY1LDMxNjAgKzEwOTU2LDQwIEBACiAKIENDPSIkbHRfc2F2ZV9DQyIKIAotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7CiAKLSAgICAgIEdDSikKLQlpZiB0ZXN0IC1uICIkR0NKIiAmJiB0ZXN0ICJYJEdDSiIgIT0gIlhubyI7IHRoZW4KIAogCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9amF2YQogCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0dDSj0kb2JqZXh0CiAKLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKIAotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikge307IH0nCiAKLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KIAotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQogCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KIAotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwogCiAKLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCiAKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKIAogCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0dDSj0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCiAKKyMgT25seSBleHBhbmQgb25jZToKIAotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCiAKLW9sZF9hcmNoaXZlX2NtZHNfR0NKPSRvbGRfYXJjaGl2ZV9jbWRzCiAKIAotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9JyAtZm5vLWJ1aWx0aW4nCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE2NjYyOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjE2NjY2OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCi1lbHNlCi0gICAgOgotZmkKLQotZmkKLQotbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Ci0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2OyB9Ci0KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjY7IH0KLQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiI7IHRoZW4KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSj1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY5NTI6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTY5NTY6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0pcIgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKLSAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjY7IH0KLQotaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Ci1maQotCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE3MDU2OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTcwNjA6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY2OyB9Ci0KLQotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAkRUNIT19DIiA+JjY7IH0KLSAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB0b3VjaCBjb25mdGVzdC5hCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjY7IH0KLQotICBydW5wYXRoX3Zhcj0KLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj1ubwotICBhcmNoaXZlX2NtZHNfR0NKPQotICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0KLSAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSj0KLSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKPQotICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQotICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gIGhhcmRjb2RlX21pbnVzX0xfR0NKPW5vCi0gIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXVua25vd24KLSAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj1ubwotICBtb2R1bGVfY21kc19HQ0o9Ci0gIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9Ci0gIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBpbmNsdWRlX2V4cHN5bXNfR0NKPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIGV4Y2x1ZGVfZXhwc3ltc19HQ0o9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIGxkX3NobGlic19HQ0o9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBHQ0opIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0dDSj1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeDQqIHwgYWl4NSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKLQkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0JZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCi0gICAgICBlbHNlCi0JIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0JIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotCWlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZmkKLQlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCi0KLQkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLQkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKLQkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgotCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJGNvbnZlbmllbmNlJwotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLQotICAgIGJzZGlbNDVdKikKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyAnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0gICAgICBsaWJleHQ9bGliCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLSAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgotICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J3RydWUnCi0gICAgICAjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgotICAgICAgb2xkX2FyY2hpdmVfY21kc19HQ0o9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKLSAgICAgIGZpeF9zcmNmaWxlX3BhdGhfR0NKPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgOzsKLSAgICAgICAqKSAjIERhcndpbiAxLjMgb24KLSAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgotICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JycKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCi0gICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBtb2R1bGVfY21kc19HQ0o9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotCi0JaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9JytiICRsaWJkaXInCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotCSAgOzsKLQkqKQotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JbGRfc2hsaWJzX0dDSj1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0dDSj0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLSAgICAgICopCi0JIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCi0JIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCi0gCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIHJlbG9hZF9jbWRzX0dDSj0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCWhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnNfR0NKPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosbm9kZWZzJwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfR0NKIiA+JjY7IH0KLXRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19HQ0ogaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0dDSiAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNjsgfQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjY7IH0KLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeDQqIHwgYWl4NSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKLSAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCi0JICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVs0NV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KLSAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJwotICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgotICAgICAgICRybSBcJGRscGF0aCcKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgY3lnd2luKikKLSAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgotICAgICAgOzsKLSAgICBtaW5ndyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgcHczMiopCi0gICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJwotICA7OwotCi1kZ3V4KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICA7OwotCi1mcmVlYnNkMSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldwotICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KLSAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KLSAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OwotICAgICopIG9iamZvcm1hdD1lbGYgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKLSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0gICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICAgIG5lZWRfdmVyc2lvbj15ZXMKLSAgICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBmcmVlYnNkMiopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCi0gIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgotICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNjsgfQotaGFyZGNvZGVfYWN0aW9uX0dDSj0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0dDSiIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfR0NKIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfR0NKIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBHQ0opIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9HQ0oiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fR0NKPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fR0NKPXVuc3VwcG9ydGVkCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fR0NKIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfR0NKIFwKLSAgICBDQ19HQ0ogXAotICAgIExEX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0ogXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0ogXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSiBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiBcCi0gICAgcHJlZGVwX29iamVjdHNfR0NKIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfR0NKIFwKLSAgICBwcmVkZXBzX0dDSiBcCi0gICAgcG9zdGRlcHNfR0NKIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKIFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiBcCi0gICAgcG9zdGluc3RhbGxfY21kc19HQ0ogXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKIFwKLSAgICBtb2R1bGVfY21kc19HQ0ogXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9HQ0ogXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19HQ0ogXAotICAgIGluY2x1ZGVfZXhwc3ltc19HQ0o7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSiB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiB8IFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG1vZHVsZV9jbWRzX0dDSiB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSiB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSgotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9HQ0oKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19HQ0oKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0dDSgotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19HQ0oKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSgotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19HQ0oKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfR0NKCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19HQ0oKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0dDSgotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfR0NKCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0dDSgotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0dDSgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfR0NKCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0dDSgotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfR0NKCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19HQ0oKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19HQ0oKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9IiRsdF9zYXZlX0NDIgotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgUkMpCi0KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1yYwotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLW9iamV4dF9SQz0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotCi0KLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfUkM9JENDCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkZWNobyAiWCRjY190ZW1wIiB8ICRYc2VkIC1lICdzJS4qLyUlJyAtZSAicyVeJGhvc3RfYWxpYXMtJSUiYAotCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQz15ZXMKLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX1JDIFwKLSAgICBDQ19SQyBcCi0gICAgTERfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19SQyBcCi0gICAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX1JDIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19SQyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyBcCi0gICAgcHJlZGVwX29iamVjdHNfUkMgXAotICAgIHBvc3RkZXBfb2JqZWN0c19SQyBcCi0gICAgcHJlZGVwc19SQyBcCi0gICAgcG9zdGRlcHNfUkMgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9SQyBcCi0gICAgYXJjaGl2ZV9jbWRzX1JDIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX1JDIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfUkMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19SQyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMgXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19SQyBcCi0gICAgbW9kdWxlX2NtZHNfUkMgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfUkMgXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19SQyBcCi0gICAgaW5jbHVkZV9leHBzeW1zX1JDOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIHwgXAotICAgIGFyY2hpdmVfY21kc19SQyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9SQwotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX1JDCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX1JDCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9SQwotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfUkMKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19SQwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfUkMKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfUkMKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfUkMKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX1JDCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19SQwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfUkMKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMKLQotIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KLWRlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAotCi0jIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPT0gZmlsZV9tYWdpYy4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgotYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX1JDCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19SQwotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fUkMKLQotIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgotaGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9SQwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9SQwotCi0jIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQotIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KLWhhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljX1JDCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX1JDCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQwotCi0jIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCi1leHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19SQwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX1JDCi0KLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLV9fRU9GX18KLQotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCTs7Ci0KLSAgICAgICopCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCi0gICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgotICAgIGZpCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLQotICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCi0gICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKLSAgICBjaG1vZCAreCAiJG9maWxlIgotICBlbHNlCi0gICAgcm0gLWYgIiR7b2ZpbGV9VCIKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi1maQotCi0KLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLQotIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gIiA+JjY7IH0KICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbgoraWYgdGVzdCAiJHtlbmFibGVfbWFpbnRhaW5lcl9tb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfbWFpbnRhaW5lcl9tb2RlOyBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwKIGVsc2UKICAgVVNFX01BSU5UQUlORVJfTU9ERT1ubwogZmkKIAotICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKKyRhc19lY2hvICIkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY2OyB9CiAgICBpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCiAgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQogICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCkBAIC0xOTczMSw0NjUgKzExMDAyLDQwIEBACiAKIAogCi0KIGZvciBhY19oZWFkZXIgaW4gc3lzL21tYW4uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWFjX3Jlcz1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYAotCSAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19yZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX3JlcyIgPiY2OyB9Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2OyB9Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2OyB9Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsICYmIHsKLQkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH07IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi0KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKCBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICAgKSB8IHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgeyBhc192YXI9JGFzX2FjX0hlYWRlcjsgZXZhbCAidGVzdCBcIlwkeyRhc192YXIrc2V0fVwiID0gc2V0IjsgfTsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotYWNfcmVzPWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgCi0JICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfcmVzIiA+JjY7IH0KLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9tbWFuLmgiICJhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQogX0FDRU9GCiAKIGZpCiAKIGRvbmUKIAotCiBmb3IgYWNfZnVuYyBpbiBtbWFwCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21tYXAiID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfTU1BUCAxCiBfQUNFT0YKIAogZmkKIGRvbmUKIAogCi1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvbW1hbi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmguLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N5c19tbWFuX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzeXMvbW1hbi5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHN5cy9tbWFuLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNjsgfQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzeXMvbW1hbi5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc3lzL21tYW4uaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjY7IH0KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci1fQUNFT0YKLWlmIHsgKGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGwgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc3lzL21tYW4uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzeXMvbW1hbi5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc3lzL21tYW4uaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzeXMvbW1hbi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHN5cy9tbWFuLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHN5cy9tbWFuLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWwgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzeXMvbW1hbi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN5cy9tbWFuLmguLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zeXNfbW1hbl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfbW1hbl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPiY2OyB9Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX21tYW5faCA9IHllczsgdGhlbgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9tbWFuLmgiICJhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21tYW5faCIgPSB4IiJ5ZXM7IHRoZW4gOgogICBsaWJmZmlfaGVhZGVyX3N5c19tbWFuX2g9eWVzCiBlbHNlCiAgIGxpYmZmaV9oZWFkZXJfc3lzX21tYW5faD1ubwogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW1hcCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtbWFwLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgbW1hcCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIG1tYXAuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgbW1hcCBpbm5vY3VvdXNfbW1hcAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBtbWFwICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIG1tYXAKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBtbWFwICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfbW1hcCB8fCBkZWZpbmVkIF9fc3R1Yl9fX21tYXAKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gbW1hcCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gIGFjX2N2X2Z1bmNfbW1hcD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X2Z1bmNfbW1hcD1ubwotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX21tYXAiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwID0geWVzOyB0aGVuCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX21tYXAiID0geCIieWVzOyB0aGVuIDoKICAgbGliZmZpX2Z1bmNfbW1hcD15ZXMKIGVsc2UKICAgbGliZmZpX2Z1bmNfbW1hcD1ubwpAQCAtMjAyMDEsMTAgKzExMDQ3LDEwIEBACiAgICBhY19jdl9mdW5jX21tYXBfZGV2X3plcm89bm8KICAgIGFjX2N2X2Z1bmNfbW1hcF9hbm9uPW5vCiBlbHNlCi0gICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgcmVhZC1vbmx5IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZmlsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3Jrcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZmlsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICMgQWRkIGEgc3lzdGVtIHRvIHRoaXMgYmxhY2tsaXN0IGlmCiAgICAjIG1tYXAoMCwgc3RhdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZCwgMCkgZG9lc24ndCByZXR1cm4gYQpAQCAtMjAyMTgsMTIgKzExMDY0LDEyIEBACiAJYWNfY3ZfZnVuY19tbWFwX2ZpbGU9eWVzOzsKICAgIGVzYWMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2ZpbGUiID4mNjsgfQotICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtbWFwIGZyb20gL2Rldi96ZXJvIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtbWFwIGZyb20gL2Rldi96ZXJvIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfZGV2X3plcm8rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9mdW5jX21tYXBfZmlsZSIgPiY2OyB9CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbW1hcCBmcm9tIC9kZXYvemVybyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1tYXAgZnJvbSAvZGV2L3plcm8gd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgIyBBZGQgYSBzeXN0ZW0gdG8gdGhpcyBibGFja2xpc3QgaWYgaXQgaGFzIG1tYXAoKSBidXQgL2Rldi96ZXJvCiAgICAjIGRvZXMgbm90IGV4aXN0LCBvciBpZiBtbWFwcGluZyAvZGV2L3plcm8gZG9lcyBub3QgZ2l2ZSBhbm9ueW1vdXMKQEAgLTIwMjQyLDIwICsxMTA4OCwxNiBAQAogCWFjX2N2X2Z1bmNfbW1hcF9kZXZfemVybz15ZXM7OwogICAgZXNhYwogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbW1hcF9kZXZfemVybyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvIiA+JjY7IH0KIAogICAgIyBVbmxpa2UgL2Rldi96ZXJvLCB0aGUgTUFQX0FOT04oWU1PVVMpIGRlZmluZXMgY2FuIGJlIHByb2JlZCBmb3IuCi0gICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgTUFQX0FOT04oWU1PVVMpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OKFlNT1VTKS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZGVjbF9tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTUFQX0FOT04oWU1PVVMpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBNQVBfQU5PTihZTU9VUykuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZGVjbF9tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KQEAgLTIwMjczLDQzICsxMTExNSwyMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9kZWNsX21hcF9hbm9uPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZGVjbF9tYXBfYW5vbj1ubworICBhY19jdl9kZWNsX21hcF9hbm9uPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9kZWNsX21hcF9hbm9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9kZWNsX21hcF9hbm9uIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZGVjbF9tYXBfYW5vbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2RlY2xfbWFwX2Fub24iID4mNjsgfQogCiAgICBpZiB0ZXN0ICRhY19jdl9kZWNsX21hcF9hbm9uID0gbm87IHRoZW4KICAgICAgYWNfY3ZfZnVuY19tbWFwX2Fub249bm8KICAgIGVsc2UKLSAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtzLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9mdW5jX21tYXBfYW5vbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbW1hcCB3aXRoIE1BUF9BTk9OKFlNT1VTKSB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1tYXAgd2l0aCBNQVBfQU5PTihZTU9VUykgd29ya3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19tbWFwX2Fub24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAjIEFkZCBhIHN5c3RlbSB0byB0aGlzIGJsYWNrbGlzdCBpZiBpdCBoYXMgbW1hcCgpIGFuZCBNQVBfQU5PTiBvcgogICAgIyBNQVBfQU5PTllNT1VTLCBidXQgdXNpbmcgbW1hcCguLi4sIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKQpAQCAtMjAzMjMsMzAgKzExMTQ1LDI0IEBACiAJYWNfY3ZfZnVuY19tbWFwX2Fub249eWVzOzsKICAgIGVzYWMKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfYW5vbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tbWFwX2Fub24iID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21tYXBfYW5vbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbW1hcF9hbm9uIiA+JjY7IH0KICAgIGZpCiBmaQogCiBpZiB0ZXN0ICRhY19jdl9mdW5jX21tYXBfZmlsZSA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX01NQVBfRklMRSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUF9GSUxFIDEiID4+Y29uZmRlZnMuaAogCiBmaQogaWYgdGVzdCAkYWNfY3ZfZnVuY19tbWFwX2Rldl96ZXJvID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTU1BUF9ERVZfWkVSTyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTU1BUF9ERVZfWkVSTyAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbW1hcF9hbm9uID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTU1BUF9BTk9OIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NTUFQX0FOT04gMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKQEAgLTIwMzcyLDEwICsxMTE4OCwxOCBAQAogCVRBUkdFVD1BUk07IFRBUkdFVERJUj1hcm0KIAk7OwogCi0gIGFtZDY0LSotZnJlZWJzZCopCisgIGFtZDY0LSotZnJlZWJzZCogfCBhbWQ2NC0qLW9wZW5ic2QqKQogCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKICAgCTs7CiAKKyAgYW1kNjQtKi1mcmVlYnNkKikKKwlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CisJOzsKKworICBhdnIzMiotKi0qKQorCVRBUkdFVD1BVlIzMjsgVEFSR0VURElSPWF2cjMyCisJOzsKKwogICBjcmlzLSotKikKIAlUQVJHRVQ9TElCRkZJX0NSSVM7IFRBUkdFVERJUj1jcmlzCiAJOzsKQEAgLTIwMzk0LDExICsxMTIxOCwxMyBAQAogCVRBUkdFVD1QQV9IUFVYOyBUQVJHRVRESVI9cGEKIAk7OwogCi0gIGkzODYtKi1mcmVlYnNkKiB8IGkzODYtKi1vcGVuYnNkKikKKyAgaT84Ni0qLWZyZWVic2QqIHwgaT84Ni0qLW9wZW5ic2QqKQogCVRBUkdFVD1YODZfRlJFRUJTRDsgVEFSR0VURElSPXg4NgogCTs7CiAgIGk/ODYtd2luMzIqIHwgaT84Ni0qLWN5Z3dpbiogfCBpPzg2LSotbWluZ3cqKQogCVRBUkdFVD1YODZfV0lOMzI7IFRBUkdFVERJUj14ODYKKwkjIEFsbCBtaW5ndy9jeWd3aW4vd2luMzIgYnVpbGRzIHJlcXVpcmUgdGhpcyBmb3Igc2hhcmVkbGliCisJQU1fTFRMREZMQUdTPSItbm8tdW5kZWZpbmVkIgogCTs7CiAgIGk/ODYtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CkBAIC0yMDQyOSw3ICsxMTI1NSw5IEBACiAJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwogICBtaXBzKi0qLWxpbnV4KikKLQlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKKwkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgorCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJworCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKIAogICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKQEAgLTIwNDY5LDggKzExMjk3LDExIEBACiAgIHg4Nl82NC0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKIAk7OworCiAgIHg4Nl82NC0qLWN5Z3dpbiogfCB4ODZfNjQtKi1taW5ndyopCisJVEFSR0VUPVg4Nl9XSU42NDsgVEFSR0VURElSPXg4NgogCTs7CisKICAgeDg2XzY0LSotKikKIAlUQVJHRVQ9WDg2XzY0OyBUQVJHRVRESVI9eDg2CiAJOzsKQEAgLTIwNDc4LDEwICsxMTMwOSw5IEBACiAKIAogCisKIGlmIHRlc3QgJFRBUkdFVERJUiA9IHVua25vd247IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXCJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC5cIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGFzX2ZuX2Vycm9yICJcImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LlwiIiAiJExJTkVOTyIgNQogZmkKIAogIGlmIGV4cHIgeCRUQVJHRVQgOiAneE1JUFMnID4gL2Rldi9udWxsOyB0aGVuCkBAIC0yMDUyNCw2ICsxMTM1NCwxNCBAQAogICBYODZfV0lOMzJfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQ7IHRoZW4KKyAgWDg2X1dJTjY0X1RSVUU9CisgIFg4Nl9XSU42NF9GQUxTRT0nIycKK2Vsc2UKKyAgWDg2X1dJTjY0X1RSVUU9JyMnCisgIFg4Nl9XSU42NF9GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU47IHRoZW4KICAgWDg2X0RBUldJTl9UUlVFPQogICBYODZfREFSV0lOX0ZBTFNFPScjJwpAQCAtMjA2MDQsNiArMTE0NDIsMTQgQEAKICAgQVJNX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4QVZSMzI7IHRoZW4KKyAgQVZSMzJfVFJVRT0KKyAgQVZSMzJfRkFMU0U9JyMnCitlbHNlCisgIEFWUjMyX1RSVUU9JyMnCisgIEFWUjMyX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4TElCRkZJX0NSSVM7IHRoZW4KICAgTElCRkZJX0NSSVNfVFJVRT0KICAgTElCRkZJX0NSSVNfRkFMU0U9JyMnCkBAIC0yMDY3NywxNiArMTE1MjMsMTIgQEAKIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgpAQCAtMjA3MDEsNDcgKzExNTQzLDIzIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogICAjIFN1bk9TIDQueCBzdHJpbmcuaCBkb2VzIG5vdCBkZWNsYXJlIG1lbSosIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIDoKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0yMDc1MSwxOCArMTE1NjksMTQgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKIGVsc2UKICAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCkBAIC0yMDc3MiwxNCArMTE1ODYsMTAgQEAKIAogaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KICAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIDoKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMjA4MDYsMTQwICsxMTYxNiwzMSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgOgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0KIGZpCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVERDX0hFQURFUlMgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLQogZm9yIGFjX2Z1bmMgaW4gbWVtY3B5Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtZW1jcHkiICJhY19jdl9mdW5jX21lbWNweSIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19tZW1jcHkiID0geCIieWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfTUVNQ1BZIDEKIF9BQ0VPRgogCiBmaQpAQCAtMjA5NDcsMTYgKzExNjQ4LDEyIEBACiAKICMgVGhlIFVsdHJpeCA0LjIgbWlwcyBidWlsdGluIGFsbG9jYSBkZWNsYXJlZCBieSBhbGxvY2EuaCBvbmx5IHdvcmtzCiAjIGZvciBjb25zdGFudCBhcmd1bWVudHMuICBVc2VsZXNzIQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl93b3JraW5nX2FsbG9jYV9oK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhbGxvY2EuaD4KIGludApAQCAtMjA5NjgsNTUgKzExNjY1LDI4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmCi0gICAgICAgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubwogZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vIFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQUxMT0NBX0ggMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFsbG9jYS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFsbG9jYSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZmRlZiBfX0dOVUNfXwogIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKQEAgLTIxMDQ4LDQzICsxMTcxOCwyMCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KKyAgYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3M9bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjY7IH0KIAogaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogZWxzZQogICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucwpAQCAtMjEwOTQsMjEgKzExNzQxLDE1IEBACiAKIEFMTE9DQT1cJHtMSUJPQkpESVJ9YWxsb2NhLiRhY19vYmpleHQKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgQ19BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X29zX2NyYXkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9vc19jcmF5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpZiBkZWZpbmVkIENSQVkgJiYgISBkZWZpbmVkIENSQVkyCiB3ZWJlY3JheQpAQCAtMjExMTgsNyArMTE3NTksNyBAQAogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X29zX2NyYXk9eWVzCiBlbHNlCiAgIGFjX2N2X29zX2NyYXk9bm8KQEAgLTIxMTI2LDk0ICsxMTc2NywxNCBAQAogcm0gLWYgY29uZnRlc3QqCiAKIGZpCi17IGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9vc19jcmF5IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb3NfY3JheSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X29zX2NyYXkiID4mNjsgfQogaWYgdGVzdCAkYWNfY3Zfb3NfY3JheSA9IHllczsgdGhlbgogICBmb3IgYWNfZnVuYyBpbiBfZ2V0YjY3IEdFVEI2NyBnZXRiNjc7IGRvCi0gICAgYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHsgYXNfdmFyPSRhc19hY192YXI7IGV2YWwgInRlc3QgXCJcJHskYXNfdmFyK3NldH1cIiA9IHNldCI7IH07IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgX19zdHViXyRhY19mdW5jIHx8IGRlZmluZWQgX19zdHViX19fJGFjX2Z1bmMKLWNob2tlIG1lCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gJGFjX2Z1bmMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQgJiYKLSAgICAgICAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28gXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1hY19yZXM9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AKLQkgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19yZXMiID4mNjsgfQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgorZXZhbCBhc192YWw9XCQkYXNfYWNfdmFyCisgICBpZiB0ZXN0ICJ4JGFzX3ZhbCIgPSB4IiJ5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIENSQVlfU1RBQ0tTRUdfRU5EICRhY19mdW5jCkBAIC0yMTIyNSwxOSArMTE3ODYsMTUgQEAKICAgZG9uZQogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9uIGZvciBDIGFsbG9jYS4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MAogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludApAQCAtMjEyNjAsNDMgKzExODE3LDE4IEBACiAgIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249MQogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKKyAgYWNfY3ZfY19zdGFja19kaXJlY3Rpb249LTEKIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLQogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9Ci0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KIF9BQ0VPRgpAQCAtMjEzMDUsNDAzICsxMTgzNywzMiBAQAogZmkKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZG91YmxlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRvdWJsZS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfbmV3XzsKLWludAotbWFpbiAoKQotewotaWYgKChhY19fdHlwZV9uZXdfICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoYWNfX3R5cGVfbmV3XykpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2N2X3R5cGVfZG91YmxlPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfdHlwZV9kb3VibGU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfZG91YmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2RvdWJsZSIgPiY2OyB9Ci0KICMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCiAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCiAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGRvdWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgZG91YmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAoZG91YmxlKSkiICJhY19jdl9zaXplb2ZfZG91YmxlIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19sbz0wIGFjX21pZD0wCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAotCQkJaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KLQkJCSAgYWNfbG89IGFjX2hpPQotCQkJICBicmVhawotCQkJZmkKLQkJCWFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2xvPSBhY19oaT0KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfZG91YmxlPSRhY19sbzs7Ci0nJykgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgotICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQotICAgZWxzZQotICAgICBhY19jdl9zaXplb2ZfZG91YmxlPTAKLSAgIGZpIDs7Ci1lc2FjCi1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1zdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgcmV0dXJuIDE7Ci0gIGlmICgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2RvdWJsZT1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWlmIHRlc3QgIiRhY19jdl90eXBlX2RvdWJsZSIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZG91YmxlIiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK3sgYXNfZm5fc2V0X3N0YXR1cyA3NworYXNfZm5fZXJyb3IgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9kb3VibGU9MAogICAgZmkKIGZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwogZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9kb3VibGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2RvdWJsZSIgPiY2OyB9CiAKIAogCkBAIC0yMTcxMCw0MDMgKzExODcxLDMyIEBACiBfQUNFT0YKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9uZyBkb3VibGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9uZyBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZ19kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9uZXdfOwotaW50Ci1tYWluICgpCi17Ci1pZiAoKGFjX190eXBlX25ld18gKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChhY19fdHlwZV9uZXdfKSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfY3ZfdHlwZV9sb25nX2RvdWJsZT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWFjX2N2X3R5cGVfbG9uZ19kb3VibGU9bm8KLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID4mNjsgfQotCiAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgogIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cwogIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCiAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGRvdWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9sb25nX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmcgZG91YmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKKyAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIihsb25nIGludCkgKHNpemVvZiAobG9uZyBkb3VibGUpKSIgImFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSAgIHR5cGVkZWYgbG9uZyBkb3VibGUgYWNfX3R5cGVfc2l6ZW9mXzsKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCi1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkgPj0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBhY19sbz0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgIGFjX2xvPSBhY19oaT0KLQkJCSAgYnJlYWsKLQkJCWZpCi0JCQlhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlhY19sbz0gYWNfaGk9Ci1maQotCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotICAgdHlwZWRlZiBsb25nIGRvdWJsZSBhY19fdHlwZV9zaXplb2ZfOwotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQ7IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotY2FzZSAkYWNfbG8gaW4KLT8qKSBhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JGFjX2xvOzsKLScnKSBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KLSAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nIGRvdWJsZSkKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgNzcpOyBleGl0IDc3OyB9OyB9Ci0gICBlbHNlCi0gICAgIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0wCi0gICBmaSA7OwotZXNhYwotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0gICB0eXBlZGVmIGxvbmcgZG91YmxlIGFjX190eXBlX3NpemVvZl87Ci1zdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKTsgfQotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nIGludCkgKHNpemVvZiAoYWNfX3R5cGVfc2l6ZW9mXykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgcmV0dXJuIDE7Ci0gIGlmICgoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZyBpbnQpIChzaXplb2YgKGFjX190eXBlX3NpemVvZl8pKSkpCi0JcmV0dXJuIDE7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gdWxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcgaW50KSAoc2l6ZW9mIChhY19fdHlwZV9zaXplb2ZfKSkpKQotCXJldHVybiAxOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPWBjYXQgY29uZnRlc3QudmFsYAotZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID0geWVzOyB0aGVuCi0gICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2RvdWJsZSIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cit7IGFzX2ZuX3NldF9zdGF0dXMgNzcKK2FzX2ZuX2Vycm9yICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iICIkTElORU5PIiA1OyB9OyB9CiAgICBlbHNlCiAgICAgIGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZT0wCiAgICBmaQogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiBmaQotcm0gLWYgY29uZnRlc3QudmFsCi1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUiID4mNjsgfQogCiAKIApAQCAtMjIxMjMsMjY0ICsxMTkxMywyNDYgQEAKICAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgogICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTE9OR19ET1VCTEUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKICAgZmkKIGZpCiAKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2FjX2N2X2NfYmlnZW5kaWFuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKyAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZuZGVmIF9fQVBQTEVfQ0NfXworCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcgorCSAgICAgI2VuZGlmCisJICAgICB0eXBlZGVmIGludCBkdW1teTsKKwogX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJjaCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzCisJIyB0aGVyZSBhcmUgYXQgbGVhc3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKwlhY19hcmNoPQorCWFjX3ByZXY9CisJZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBkbworCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKwkgICBjYXNlICRhY193b3JkIGluCisJICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpCisJICAgICAgIGlmIHRlc3QgLXogIiRhY19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuCisJCSBhY19hcmNoPSRhY193b3JkCisJICAgICAgIGVsc2UKKwkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbAorCQkgYnJlYWsKKwkgICAgICAgZmkKKwkgICAgICAgOzsKKwkgICBlc2FjCisJICAgYWNfcHJldj0KKwkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4KKwkgICBhY19wcmV2PWFyY2gKKwkgZmkKKyAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVzIHRoZSBCWVRFX09SREVSIG1hY3JvLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKLSNpZiAgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gXAotCSYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiAmJiBMSVRUTEVfRU5ESUFOKQotIGJvZ3VzIGVuZGlhbiBtYWNyb3MKLSNlbmRpZgorI2lmICEgKGRlZmluZWQgQllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXAorCQkgICAgICYmIGRlZmluZWQgTElUVExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXAorCQkgICAgICYmIExJVFRMRV9FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJR19FTkRJQU4gb3Igbm90LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKwkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogCiBpbnQKIG1haW4gKCkKIHsKICNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4KLSBub3QgYmlnIGVuZGlhbgotI2VuZGlmCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfY3ZfY19iaWdlbmRpYW49bm8KKyAgYWNfY3ZfY19iaWdlbmRpYW49bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi1zaG9ydCBpbnQgYXNjaWlfbW1bXSA9IHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Owotc2hvcnQgaW50IGFzY2lpX2lpW10gPSB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKLXZvaWQgX2FzY2lpICgpIHsgY2hhciAqcyA9IChjaGFyICopIGFzY2lpX21tOyBzID0gKGNoYXIgKikgYXNjaWlfaWk7IH0KLXNob3J0IGludCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Owotc2hvcnQgaW50IGViY2RpY19tbVtdID0geyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07Ci12b2lkIF9lYmNkaWMgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgZWJjZGljX21tOyBzID0gKGNoYXIgKikgZWJjZGljX2lpOyB9CisjaW5jbHVkZSA8bGltaXRzLmg+CisKIGludAogbWFpbiAoKQogewotIF9hc2NpaSAoKTsgX2ViY2RpYyAoKTsKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgotICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfQklHX0VORElBTgorCQkgbm90IGJpZyBlbmRpYW4KKwkJI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKLWZpCi1pZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCi0gICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KLSAgZWxzZQotICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPwotICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KLSAgZmkKLWZpCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQorICBhY19jdl9jX2JpZ2VuZGlhbj1ubwogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIENvbXBpbGUgYSB0ZXN0IHByb2dyYW0uCisgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBpbnQgYXNjaWlfbW1bXSA9CisJCSAgeyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CisJCXNob3J0IGludCBhc2NpaV9paVtdID0KKwkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAweDZFNjEsIDAgfTsKKwkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsKKwkJICByZXR1cm4gYXNjaWlfbW1baV0gKyBhc2NpaV9paVtpXTsKKwkJfQorCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQorCQkgIHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9OworCQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQorCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwgMHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9OworCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsKKwkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOworCQl9CisJCWV4dGVybiBpbnQgZm9vOwogCitpbnQKK21haW4gKCkKK3sKK3JldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNlX2ViY2RpYyAoZm9vKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4KKwkgICAgICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKKwkgICAgZmkKKwkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisJCWFjX2N2X2NfYmlnZW5kaWFuPW5vCisJICAgICAgZWxzZQorCQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBrbm93cz8KKwkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgorCSAgICAgIGZpCisJICAgIGZpCitmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBtYWluICgpCiB7CiAKLSAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLwotICB1bmlvbgotICB7Ci0gICAgbG9uZyBpbnQgbDsKLSAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOwotICB9IHU7Ci0gIHUubCA9IDE7Ci0gIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBIYXJiaXNvbiZTdGVlbGUuICAqLworCSAgICAgdW5pb24KKwkgICAgIHsKKwkgICAgICAgbG9uZyBpbnQgbDsKKwkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsKKwkgICAgIH0gdTsKKwkgICAgIHUubCA9IDE7CisJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0gMTsKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfdHJ5IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9jX2JpZ2VuZGlhbj15ZXMKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0KKyAgICBmaQogZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9CisgY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygKKyAgIHllcykKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMuaAorOzsgIygKKyAgIG5vKQorICAgICAgOzsgIygKKyAgIHVuaXZlcnNhbCkKIAotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfYmlnZW5kaWFuIiA+JjY7IH0KLWNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluCi0gIHllcykKKyRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKLV9BQ0VPRgotIDs7Ci0gIG5vKQotICAgICA7OwotICAqKQotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcwotcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCi1wcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYworICAgICA7OyAjKAorICAgKikKKyAgICAgYXNfZm5fZXJyb3IgInVua25vd24gZW5kaWFubmVzcworIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiAiJExJTkVOTyIgNSA7OworIGVzYWMKIAogCi17IGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGFzc2VtYmxlciAuY2ZpIHBzZXVkby1vcCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBhc3NlbWJsZXIgLmNmaSBwc2V1ZG8tb3Agc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKICAgICBsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcD11bmtub3duCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLmNmaV9zdGFydHByb2Ncblx0LmNmaV9lbmRwcm9jIik7CiBpbnQKQEAgLTIyMzkxLDYwICsxMjE2MywzNCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoYWNfdHJ5PSIkYWNfY29tcGlsZSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCAiZWNobyBcIlwkYXNfbWU6JExJTkVOTzogJGFjX3RyeV9lY2hvXCIiKSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPW5vCisgIGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wPW5vCiBmaQotCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc19jZmlfcHNldWRvX29wIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2FzX2NmaV9wc2V1ZG9fb3AiID4mNjsgfQogaWYgdGVzdCAieCRsaWJmZmlfY3ZfYXNfY2ZpX3BzZXVkb19vcCIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQVNfQ0ZJX1BTRVVET19PUCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfQ0ZJX1BTRVVET19PUCAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogaWYgdGVzdCB4JFRBUkdFVCA9IHhTUEFSQzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFzc2VtYmxlciBhbmQgbGlua2VyIHN1cHBvcnQgdW5hbGlnbmVkIHBjIHJlbGF0ZWQgcmVsb2NzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgcGMgcmVsYXRlZCByZWxvY3MuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgogCXNhdmVfTERGTEFHUz0iJExERkxBR1MiCiAJQ0ZMQUdTPSIkQ0ZMQUdTIC1mcGljIgogCUxERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQiCi0JY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLnRleHQ7IGZvbzogbm9wOyAuZGF0YTsgLmFsaWduIDQ7IC5ieXRlIDA7IC51YXdvcmQgJXJfZGlzcDMyKGZvbyk7IC50ZXh0Iik7CiBpbnQKQEAgLTIyNDU1LDYwICsxMjIwMSwzMyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgImVjaG8gXCJcJGFzX21lOiRMSU5FTk86ICRhY190cnlfZWNob1wiIikgPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJgotICAgICAgICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotCWxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbD1ubworICBsaWJmZmlfY3ZfYXNfc3BhcmNfdWFfcGNyZWw9bm8KIGZpCi0KLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKIAlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2FzX3NwYXJjX3VhX3BjcmVsIiA+JjY7IH0KICAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc19zcGFyY191YV9wY3JlbCIgPSB4eWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQVNfU1BBUkNfVUFfUENSRUwgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKIAotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBhc3NlbWJsZXIgLnJlZ2lzdGVyIHBzZXVkby1vcCBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNjsgfQotaWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhc3NlbWJsZXIgLnJlZ2lzdGVyIHBzZXVkby1vcCBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciAucmVnaXN0ZXIgcHNldWRvLW9wIHN1cHBvcnQuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCtzZXR9IiA9IHNldDsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKICAgICAgICBsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wPXVua25vd24KICAgICAgICAjIENoZWNrIGlmIHdlIGhhdmUgLnJlZ2lzdGVyCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogYXNtICgiLnJlZ2lzdGVyICVnMiwgI3NjcmF0Y2giKTsKIGludApAQCAtMjI1MTksNDkgKzEyMjM4LDU4IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsICJlY2hvIFwiXCRhc19tZTokTElORU5POiAkYWNfdHJ5X2VjaG9cIiIpID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgewotCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKLQkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgotICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLQlsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wPW5vCisgIGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3A9bm8KIGZpCi0KIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbGliZmZpX2N2X2FzX3JlZ2lzdGVyX3BzZXVkb19vcCIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3AiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfcmVnaXN0ZXJfcHNldWRvX29wIiA+JjY7IH0KICAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc19yZWdpc3Rlcl9wc2V1ZG9fb3AiID0geHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQVNfUkVHSVNURVJfUFNFVURPX09QIDEiID4+Y29uZmRlZnMuaAogCiAgICAgZmkKIGZpCiAKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seS4uLiAkRUNIT19DIiA+JjY7IH0KLWlmIHRlc3QgIiR7bGliZmZpX2N2X3JvX2VoX2ZyYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitpZiB0ZXN0IHgkVEFSR0VUID0geFg4NiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYXNzZW1ibGVyIHN1cHBvcnRzIHBjIHJlbGF0ZWQgcmVsb2NzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBzdXBwb3J0cyBwYyByZWxhdGVkIHJlbG9jcy4uLiAiID4mNjsgfQoraWYgdGVzdCAiJHtsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCWxpYmZmaV9jdl9hc194ODZfcGNyZWw9eWVzCisJZWNobyAnLnRleHQ7IGZvbzogbm9wOyAuZGF0YTsgLmxvbmcgZm9vLS47IC50ZXh0JyA+IGNvbmZ0ZXN0LnMKKwlpZiAkQ0MgJENGTEFHUyAtYyBjb25mdGVzdC5zIDI+JjEgfCBncmVwIC1pIHdhcm5pbmcgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgbGliZmZpX2N2X2FzX3g4Nl9wY3JlbD1ubworCWZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JGxpYmZmaV9jdl9hc194ODZfcGNyZWwiID0geHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FTX1g4Nl9QQ1JFTCAxIiA+PmNvbmZkZWZzLmgKKworICAgIGZpCitmaQorCitjYXNlICIkdGFyZ2V0IiBpbgorICAgICAqLWFwcGxlLWRhcndpbjEwKiB8ICotKi1mcmVlYnNkKiB8ICotKi1vcGVuYnNkKiB8ICotcGMtc29sYXJpcyopCisKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCAxIiA+PmNvbmZkZWZzLmgKKworICAgICA7OworZXNhYworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC5laF9mcmFtZSBzZWN0aW9uIHNob3VsZCBiZSByZWFkLW9ubHkuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiR7bGliZmZpX2N2X3JvX2VoX2ZyYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKIAogCWxpYmZmaV9jdl9yb19laF9mcmFtZT1ubwpAQCAtMjI1NzcsNDEgKzEyMzA1LDM1IEBACiAJcm0gLWYgY29uZnRlc3QuKgogCiBmaQoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGliZmZpX2N2X3JvX2VoX2ZyYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNQorJGFzX2VjaG8gIiRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID4mNjsgfQogaWYgdGVzdCAieCRsaWJmZmlfY3Zfcm9fZWhfZnJhbWUiID0geHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1JPX0VIX0ZSQU1FIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ST19FSF9GUkFNRSAxIiA+PmNvbmZkZWZzLmgKIAogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBFSF9GUkFNRV9GTEFHUyAiYSIKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgXCJhXCIiID4+Y29uZmRlZnMuaAogCiBlbHNlCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTICJhdyIKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgXCJhd1wiIiA+PmNvbmZkZWZzLmgKIAogZmkKIAoteyBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJoaWRkZW5cIikpKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KFwiaGlkZGVuXCIpKSkuLi4gJEVDSE9fQyIgPiY2OyB9Ci1pZiB0ZXN0ICIke2xpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoXCJoaWRkZW5cIikpKSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eShcImhpZGRlblwiKSkpLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIke2xpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAJZWNobyAnaW50IF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKSBmb28gKHZvaWQpIHsgcmV0dXJuIDE7IH0nID4gY29uZnRlc3QuYwogCWxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGU9bm8KIAlpZiB7IGFjX3RyeT0nJHtDQy1jY30gLVdlcnJvciAtUyBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0LnMgMT4mNScKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX3RyeVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX3RyeSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgogCSAgICBpZiBncmVwICdcLmhpZGRlbi4qZm9vJyBjb25mdGVzdC5zID4vZGV2L251bGw7IHRoZW4KIAkJbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZT15ZXMKIAkgICAgZmkKQEAgLTIyNjE5LDEzICsxMjM0MSwxMSBAQAogCXJtIC1mIGNvbmZ0ZXN0LioKIAogZmkKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxpYmZmaV9jdl9oaWRkZW5fdmlzaWJpbGl0eV9hdHRyaWJ1dGUiID4mNjsgfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvICIkbGliZmZpX2N2X2hpZGRlbl92aXNpYmlsaXR5X2F0dHJpYnV0ZSIgPiY2OyB9CiBpZiB0ZXN0ICRsaWJmZmlfY3ZfaGlkZGVuX3Zpc2liaWxpdHlfYXR0cmlidXRlID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKQEAgLTIyNjM2LDUwICsxMjM1Niw0MSBAQAogCiAKIAotCiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKICAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7IGlmIHRlc3QgIiRlbmFibGVfZGVidWciID0gInllcyI7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgRkZJX0RFQlVHIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgRkZJX0RFQlVHIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdHJ1Y3RzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0cnVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N0cnVjdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9zdHJ1Y3RzOyBpZiB0ZXN0ICIkZW5hYmxlX3N0cnVjdHMiID0gIm5vIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBGRklfTk9fU1RSVUNUUyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9OT19TVFJVQ1RTIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yYXctYXBpIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3Jhd19hcGkrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Jhd19hcGkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9yYXdfYXBpOyBpZiB0ZXN0ICIkZW5hYmxlX3Jhd19hcGkiID0gIm5vIjsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBGRklfTk9fUkFXX0FQSSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEZGSV9OT19SQVdfQVBJIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wdXJpZnktc2FmZXR5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3B1cmlmeV9zYWZldHkrc2V0fSIgPSBzZXQ7IHRoZW4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B1cmlmeV9zYWZldHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICBlbmFibGV2YWw9JGVuYWJsZV9wdXJpZnlfc2FmZXR5OyBpZiB0ZXN0ICIkZW5hYmxlX3B1cmlmeV9zYWZldHkiID0gInllcyI7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgVVNJTkdfUFVSSUZZIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgVVNJTkdfUFVSSUZZIDEiID4+Y29uZmRlZnMuaAogCiAgIGZpCiBmaQpAQCAtMjI3MTUsNyArMTI0MjYsNyBAQAogYWNfY29uZmlnX2xpbmtzPSIkYWNfY29uZmlnX2xpbmtzIGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgiCiAKIAotYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGluY2x1ZGUvZmZpLmgiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjIgogCiAKIGFjX2NvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyBpbmNsdWRlL2ZmaV9jb21tb24uaDppbmNsdWRlL2ZmaV9jb21tb24uaCIKQEAgLTIyNzUxLDEyICsxMjQ2MiwxMyBAQAogICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAogICAgICoke2FzX25sfSopCiAgICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogQ2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUuIiA+JjI7fSA7OworICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwogICAgICAgZXNhYwogICAgICAgY2FzZSAkYWNfdmFyIGluICMoCiAgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICAqKSAkYXNfdW5zZXQgJGFjX3ZhciA7OworICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CiAgICAgICBlc2FjIDs7CiAgICAgZXNhYwogICBkb25lCkBAIC0yMjc2NCw4ICsxMjQ3Niw4IEBACiAgIChzZXQpIDI+JjEgfAogICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKICAgICAqJHthc19ubH1hY19zcGFjZT1cICopCi0gICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCi0gICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCiAgICAgICBzZWQgLW4gXAogCSJzLycvJ1xcXFwnJy9nOwogCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgpAQCAtMjI3ODgsMTIgKzEyNTAwLDEyIEBACiBpZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCiAgIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhlbgogICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KICAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQogICBlbHNlCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICBmaQogZmkKIHJtIC1mIGNvbmZjYWNoZQpAQCAtMjI4MDksMjM0ICsxMjUyMSwxNTkgQEAKIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQogICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCiAgIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJwotICBhY19pPWBlY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKICAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgogICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCi0gIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKIGRvbmUKIExJQk9CSlM9JGFjX2xpYm9ianMKIAogTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKIAogCi1pZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NBU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ0FTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ1hYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDWFhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7VEVTVFNVQkRJUl9UUlVFfSIgJiYgdGVzdCAteiAiJHtURVNUU1VCRElSX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJURVNUU1VCRElSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJURVNUU1VCRElSXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7TUlQU19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUlQU1wiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtTUEFSQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtTUEFSQ19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlNQQVJDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1g4Nl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlg4NlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2X0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X1dJTjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9XSU4zMl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiWDg2X1dJTjMyXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7WDg2X0RBUldJTl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfREFSV0lOX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FMUEhBX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7SUE2NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtJQTY0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJJQTY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJJQTY0XCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke00zMlJfVFJVRX0iICYmIHRlc3QgLXogIiR7TTMyUl9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTMyUlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTTMyUlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtNNjhLX1RSVUV9IiAmJiB0ZXN0IC16ICIke002OEtfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UE9XRVJQQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0FJWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUE9XRVJQQ19BSVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLWlmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19EQVJXSU5fRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfREFSV0lOXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQT1dFUlBDX0ZSRUVCU0RfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQT1dFUlBDX0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBPV0VSUENfRlJFRUJTRFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtBUk1fVFJVRX0iICYmIHRlc3QgLXogIiR7QVJNX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkFSTVwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtMSUJGRklfQ1JJU19UUlVFfSIgJiYgdGVzdCAteiAiJHtMSUJGRklfQ1JJU19GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTElCRkZJX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkxJQkZGSV9DUklTXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke0ZSVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtGUlZfRkFMU0V9IjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkZSVlwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiRlJWXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7UzM5MF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUzM5MFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtYODZfNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2XzY0X0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJYODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlg4Nl82NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtTSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtTSF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlNIXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1NINjRfVFJVRX0iICYmIHRlc3QgLXogIiR7U0g2NF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiU0g2NFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQQV9MSU5VWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQV9MSU5VWF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfTElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBBX0xJTlVYXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0IC16ICIke1BBX0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEFfSFBVWF9GQUxTRX0iOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmRpdGlvbmFsIFwiUEFfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotaWYgdGVzdCAteiAiJHtQQTY0X0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEE2NF9IUFVYX0ZBTFNFfSI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZGl0aW9uYWwgXCJQQTY0X0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KLVVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIlBBNjRfSFBVWFwiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CiBmaQogCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19UUlVFfSIgJiYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDQVNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDQVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1RFU1RTVUJESVJfVFJVRX0iICYmIHRlc3QgLXogIiR7VEVTVFNVQkRJUl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlRFU1RTVUJESVJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke01JUFNfVFJVRX0iICYmIHRlc3QgLXogIiR7TUlQU19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk1JUFNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NQQVJDX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NQQVJDX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiU1BBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9GUkVFQlNEX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiWDg2X0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9XSU4zMl9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfV0lOMzJfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfV0lOMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9XSU42NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfV0lONjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfV0lONjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl9EQVJXSU5fVFJVRX0iICYmIHRlc3QgLXogIiR7WDg2X0RBUldJTl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FMUEhBX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FMUEhBX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQUxQSEFcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0lBNjRfVFJVRX0iICYmIHRlc3QgLXogIiR7SUE2NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIklBNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke00zMlJfVFJVRX0iICYmIHRlc3QgLXogIiR7TTMyUl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk0zMlJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke002OEtfVFJVRX0iICYmIHRlc3QgLXogIiR7TTY4S19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIk02OEtcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBPV0VSUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfQUlYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUE9XRVJQQ19BSVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfREFSV0lOX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BPV0VSUENfREFSV0lOX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUE9XRVJQQ19EQVJXSU5cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BPV0VSUENfRlJFRUJTRF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQT1dFUlBDX0ZSRUVCU0RfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQT1dFUlBDX0ZSRUVCU0RcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtBUk1fRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0FWUjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FWUjMyX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiQVZSMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX1RSVUV9IiAmJiB0ZXN0IC16ICIke0xJQkZGSV9DUklTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiTElCRkZJX0NSSVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke0ZSVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtGUlZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJGUlZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1MzOTBfVFJVRX0iICYmIHRlc3QgLXogIiR7UzM5MF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlMzOTBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1g4Nl82NF9UUlVFfSIgJiYgdGVzdCAteiAiJHtYODZfNjRfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJYODZfNjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NIX1RSVUV9IiAmJiB0ZXN0IC16ICIke1NIX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiU0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1NINjRfVFJVRX0iICYmIHRlc3QgLXogIiR7U0g2NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlNINjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBX0xJTlVYX1RSVUV9IiAmJiB0ZXN0IC16ICIke1BBX0xJTlVYX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgImNvbmRpdGlvbmFsIFwiUEFfTElOVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBX0hQVVhfVFJVRX0iICYmIHRlc3QgLXogIiR7UEFfSFBVWF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICJjb25kaXRpb25hbCBcIlBBX0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1BBNjRfSFBVWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtQQTY0X0hQVVhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAiY29uZGl0aW9uYWwgXCJQQTY0X0hQVVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKKwogOiAke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfQorYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQogIyEgJFNIRUxMCiAjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTIzMDQ2LDU5ICsxMjY4Myw3OSBAQAogZGVidWc9ZmFsc2UKIGFjX2NzX3JlY2hlY2s9ZmFsc2UKIGFjX2NzX3NpbGVudD1mYWxzZQotU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KLV9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwogCiAjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKIERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgZW11bGF0ZSBzaAogICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKICAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCiAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBlbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbgotICAqcG9zaXgqKSBzZXQgLW8gcG9zaXggOzsKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OwogZXNhYwotCiBmaQogCiAKLQotCi0jIFBBVEggbmVlZHMgQ1IKLSMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KLWFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JwotYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCi1hc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKLWFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKLWFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQogCiAjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KIGlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAotZWxzZQotICBhc191bnNldD1mYWxzZQorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KIGZpCiAKIApAQCAtMjMxMDcsMjAgKzEyNzY0LDE4IEBACiAjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KICMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAogIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQotYXNfbmw9JwotJwogSUZTPSIgIiIJJGFzX25sIgogCiAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgotY2FzZSAkMCBpbgorY2FzZSAkMCBpbiAjKCgKICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwogICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiBmb3IgYXNfZGlyIGluICRQQVRICiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQogSUZTPSRhc19zYXZlX0lGUwogCiAgICAgIDs7CkBAIC0yMzEzMSwzMiArMTI3ODYsMTExIEBACiAgIGFzX215c2VsZj0kMAogZmkKIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KLSAgZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgotICB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCiBmaQogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLWZvciBhc192YXIgaW4gRU5WIE1BSUwgTUFJTFBBVEgKLWRvICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6CiBkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICgkYXNfdW5zZXQgJGFzX3ZhcikgPi9kZXYvbnVsbCAyPiYxICYmICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQorIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCisjIHNjcmlwdCB3aXRoIHN0YXR1cyAkPywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgorYXNfZm5fZXJyb3IgKCkKK3sKKyAgYXNfc3RhdHVzPSQ/OyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKKyAgaWYgdGVzdCAiJDMiOyB0aGVuCisgICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMiJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMSIgPiYkMworICBmaQorICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDEiID4mMgorICBhc19mbl9leGl0ICRhc19zdGF0dXMKK30gIyBhc19mbl9lcnJvcgorCisKKyMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgorYXNfZm5fc2V0X3N0YXR1cyAoKQoreworICByZXR1cm4gJDEKK30gIyBhc19mbl9zZXRfc3RhdHVzCisKKyMgYXNfZm5fZXhpdCBTVEFUVVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgorYXNfZm5fZXhpdCAoKQoreworICBzZXQgK2UKKyAgYXNfZm5fc2V0X3N0YXR1cyAkMQorICBleGl0ICQxCit9ICMgYXNfZm5fZXhpdAorCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKyMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKKyMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgorIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQorIyBpbXBsZW1lbnRhdGlvbnMuCitpZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMSs9XCQyCisgIH0nCitlbHNlCisgIGFzX2ZuX2FwcGVuZCAoKQorICB7CisgICAgZXZhbCAkMT1cJCQxXCQyCisgIH0KK2ZpICMgYXNfZm5fYXBwZW5kCisKKyMgYXNfZm5fYXJpdGggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCisjIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKKyMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCitpZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXJpdGggKCkKKyAgeworICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCisgIH0KK2ZpICMgYXNfZm5fYXJpdGgKKworCiBpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgogICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KICAgYXNfZXhwcj1leHByCkBAIC0yMzE3MCwxMyArMTI5MDQsMTcgQEAKICAgYXNfYmFzZW5hbWU9ZmFsc2UKIGZpCiAKK2lmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19kaXJuYW1lPWRpcm5hbWUKK2Vsc2UKKyAgYXNfZGlybmFtZT1mYWxzZQorZmkKIAotIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgogYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKKyRhc19lY2hvIFgvIiQwIiB8CiAgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yMzE5MSwxMDQgKzEyOTI5LDEwMyBAQAogCSAgfQogCSAgcy8uKi8uLzsgcSdgCiAKLSMgQ0RQQVRILgotJGFzX3Vuc2V0IENEUEFUSAotCi0KLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEgKyAxYCIgPSAieCRhc19saW5lbm9fMiIgfHwgewotCi0gICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KLSAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQotICAjIGxpbmUtbnVtYmVyIGxpbmUgYWZ0ZXIgZWFjaCBsaW5lIHVzaW5nICRMSU5FTk87IHRoZSBzZWNvbmQgJ3NlZCcKLSAgIyBkb2VzIHRoZSByZWFsIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2gKLSAgIyBsaW5lLW51bWJlciBsaW5lIHdpdGggdGhlIGxpbmUgY29udGFpbmluZyAkTElORU5PLCBhbmQgYXBwZW5kcwotICAjIHRyYWlsaW5nICctJyBkdXJpbmcgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsCi0gICMgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2NyaXB0cyB3aXRoIG9wdGltaXphdGlvbiBoZWxwIGZyb20gUGFvbG8gQm9uemluaS4gIEJsYW1lIExlZQotICAjIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQotICBzZWQgLW4gJwotICAgIHAKLSAgICAvWyRdTElORU5PLz0KLSAgJyA8JGFzX215c2VsZiB8Ci0gICAgc2VkICcKLSAgICAgIHMvWyRdTElORU5PLiovJi0vCi0gICAgICB0IGxpbmVubwotICAgICAgYgotICAgICAgOmxpbmVubwotICAgICAgTgotICAgICAgOmxvb3AKLSAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLwotICAgICAgdCBsb29wCi0gICAgICBzLy1cbi4qLy8KLSAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAotICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuCi0gIC4gIi4vJGFzX21lLmxpbmVubyIKLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCi0gIGV4aXQKLX0KLQotCi1pZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZGlybmFtZT1kaXJuYW1lCi1lbHNlCi0gIGFzX2Rpcm5hbWU9ZmFsc2UKLWZpCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKIAogRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KLWNhc2UgYGVjaG8gLW4geGAgaW4KK2Nhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCiAtbiopCi0gIGNhc2UgYGVjaG8gJ3hcYydgIGluCisgIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgogICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KLSAgKikgICBFQ0hPX0M9J1xjJzs7CisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CiAgIGVzYWM7OwogKikKICAgRUNIT19OPSctbic7OwogZXNhYwogCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCiBpZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KICAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQogZWxzZQogICBybSAtZiBjb25mJCQuZGlyCi0gIG1rZGlyIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAogZmkKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz0nbG4gLXMnCi0gICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6Ci0gICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCi0gICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgotICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CitpZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9J2xuIC1zJworICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6CisgICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KKyAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KKyAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQogICAgIGFzX2xuX3M9J2NwIC1wJwotZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbG5fcz1sbgorICBmaQogZWxzZQogICBhc19sbl9zPSdjcCAtcCcKIGZpCiBybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCiBybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCiBpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9OgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCiBlbHNlCiAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCiAgIGFzX21rZGlyX3A9ZmFsc2UKQEAgLTIzMzA1LDEyICsxMzA0MiwxMiBAQAogICBhc190ZXN0X3g9JwogICAgIGV2YWwgc2ggLWMgJ1wnJwogICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCi0gICAgICAgIHRlc3QgLWQgIiQxLy4iOworCXRlc3QgLWQgIiQxLy4iOwogICAgICAgZWxzZQotCWNhc2UgJDEgaW4KLSAgICAgICAgLSopc2V0ICIuLyQxIjs7CisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OwogCWVzYWM7Ci0JY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4KKwljYXNlIGBscyAtbGQnJGFzX2xzX0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgKIAk/Pz9bc3hdKik6OzsqKWZhbHNlOztlc2FjO2ZpCiAgICAgJ1wnJyBzaAogICAnCkBAIC0yMzMyNSwxMyArMTMwNjIsMTkgQEAKIAogCiBleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCiAKLSMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFNhdmUgdGhlIGxvZyBtZXNzYWdlLCB0byBrZWVwICQwIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjUsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjYxLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjEwcmMwLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCkBAIC0yMzM0NCw3ICsxMzA4NywxNiBAQAogCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2Nhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfZmlsZXM7IHNoaWZ0OyBhY19jb25maWdfZmlsZXM9JCo7OworZXNhYworCitjYXNlICRhY19jb25maWdfaGVhZGVycyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKK2VzYWMKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KIGNvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKIGNvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCkBAIC0yMzM1MywyMiArMTMxMDUsMjUgQEAKIAogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQotY3VycmVudCBjb25maWd1cmF0aW9uLgorXGAkYXNfbWUnIGluc3RhbnRpYXRlcyBmaWxlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiBhY3Rpb25zCitmcm9tIHRlbXBsYXRlcyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFVubGVzcyB0aGUgZmlsZXMKK2FuZCBhY3Rpb25zIGFyZSBzcGVjaWZpZWQgYXMgVEFHcywgYWxsIGFyZSBpbnN0YW50aWF0ZWQgYnkgZGVmYXVsdC4KIAotVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgogCiAgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKICAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudAorICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwogICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKICAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCi0JCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCiAKIENvbmZpZ3VyYXRpb24gZmlsZXM6CiAkY29uZmlnX2ZpbGVzCkBAIC0yMzM4MiwxNiArMTMxMzcsMTcgQEAKIENvbmZpZ3VyYXRpb24gY29tbWFuZHM6CiAkY29uZmlnX2NvbW1hbmRzCiAKLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorUmVwb3J0IGJ1Z3MgdG8gPGh0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWw+LiIKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLWxpYmZmaSBjb25maWcuc3RhdHVzIDMuMC41Ci1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjEsCi0gIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgXFwiCitsaWJmZmkgY29uZmlnLnN0YXR1cyAzLjAuMTByYzAKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42NSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKLUNvcHlyaWdodCAoQykgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKIApAQCAtMjMzOTksMTEgKzEzMTU1LDEyIEBACiBzcmNkaXI9JyRzcmNkaXInCiBJTlNUQUxMPSckSU5TVEFMTCcKIE1LRElSX1A9JyRNS0RJUl9QJworQVdLPSckQVdLJwordGVzdCAtbiAiXCRBV0siIHx8IEFXSz1hd2sKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0Ci0jIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgogYWNfbmVlZF9kZWZhdWx0cz06CiB3aGlsZSB0ZXN0ICQjICE9IDAKIGRvCkBAIC0yMzQyNSwzNCArMTMxODIsNDAgQEAKICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCiAgICAgYWNfY3NfcmVjaGVjaz06IDs7CiAgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKLSAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CiAgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCiAgICAgZGVidWc9OiA7OwogICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OwogICAtLWhlIHwgLS1oKQogICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgICBhc19mbl9lcnJvciAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7CiAgIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSB7IGVjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKyAgLSopIGFzX2ZuX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7CiAKLSAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIKKyAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCiAgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKIAogICBlc2FjCkBAIC0yMzQ2NywzNiArMTMyMzAsMjkzIEBACiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGlmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgotICBlY2hvICJydW5uaW5nIENPTkZJR19TSEVMTD0kU0hFTEwgJFNIRUxMICQwICIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKLSAgQ09ORklHX1NIRUxMPSRTSEVMTAorICBzZXQgWCAnJFNIRUxMJyAnJDAnICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCisgIHNoaWZ0CisgIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9JFNIRUxMIFwkKiIgPiY2CisgIENPTkZJR19TSEVMTD0nJFNIRUxMJwogICBleHBvcnQgQ09ORklHX1NIRUxMCi0gIGV4ZWMgJFNIRUxMICIkMCIkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZXhlYyA1Pj5jb25maWcubG9nCiB7CiAgIGVjaG8KICAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKICMjIFJ1bm5pbmcgJGFzX21lLiAjIwogX0FTQk9YCi0gIGVjaG8gIiRhY19sb2ciCisgICRhc19lY2hvICIkYWNfbG9nIgogfSA+JjUKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAjCiAjIElOSVQtQ09NTUFORFMKICMKIEFNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICJYJG1hY3JvX3ZlcnNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21hY3JvX3JldmlzaW9uPSdgJEVDSE8gIlgkbWFjcm9fcmV2aXNpb24iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWQ9J2AkRUNITyAiWCRlbmFibGVfc2hhcmVkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc3RhdGljPSdgJEVDSE8gIlgkZW5hYmxlX3N0YXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiWCRwaWNfbW9kZSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Zhc3RfaW5zdGFsbD0nYCRFQ0hPICJYJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3RfYWxpYXM9J2AkRUNITyAiWCRob3N0X2FsaWFzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIlgkaG9zdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9vcz0nYCRFQ0hPICJYJGhvc3Rfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX2FsaWFzPSdgJEVDSE8gIlgkYnVpbGRfYWxpYXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIlgkYnVpbGQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX29zPSdgJEVDSE8gIlgkYnVpbGRfb3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NFRD0nYCRFQ0hPICJYJFNFRCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICJYJFhzZWQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dSRVA9J2AkRUNITyAiWCRHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFR1JFUD0nYCRFQ0hPICJYJEVHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICJYJEZHUkVQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRD0nYCRFQ0hPICJYJExEIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTT0nYCRFQ0hPICJYJE5NIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIlgkTE5fUyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWF4X2NtZF9sZW49J2AkRUNITyAiWCRtYXhfY21kX2xlbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWNfb2JqZXh0PSdgJEVDSE8gIlgkYWNfb2JqZXh0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiWCRleGVleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Vuc2V0PSdgJEVDSE8gIlgkbHRfdW5zZXQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X1NQMk5MPSdgJEVDSE8gIlgkbHRfU1AyTkwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIlgkbHRfTkwyU1AiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9mbGFnPSdgJEVDSE8gIlgkcmVsb2FkX2ZsYWciIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIlgkcmVsb2FkX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09CSkRVTVA9J2AkRUNITyAiWCRPQkpEVU1QIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICJYJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICJYJGZpbGVfbWFnaWNfY21kIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICJYJEFSIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUl9GTEFHUz0nYCRFQ0hPICJYJEFSX0ZMQUdTIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTVFJJUD0nYCRFQ0hPICJYJFNUUklQIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiWCRSQU5MSUIiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIlgkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9J2AkRUNITyAiWCRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0M9J2AkRUNITyAiWCRDQyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0ZMQUdTPSdgJEVDSE8gIlgkQ0ZMQUdTIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICJYJGNvbXBpbGVyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0M9J2AkRUNITyAiWCRHQ0MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9J2AkRUNITyAiWCRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICJYJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSdgJEVDSE8gIlgkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIlgkb2JqZGlyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTSEVMTD0nYCRFQ0hPICJYJFNIRUxMIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIlgkRUNITyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIlgkTUFHSUNfQ01EIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICJYJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIlgkbHRfcHJvZ19jb21waWxlcl93bCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiWCRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX289J2AkRUNITyAiWCRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICJYJG5lZWRfbG9ja3MiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIlgkRFNZTVVUSUwiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NRURJVD0nYCRFQ0hPICJYJE5NRURJVCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTElQTz0nYCRFQ0hPICJYJExJUE8iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIlgkT1RPT0wiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MNjQ9J2AkRUNITyAiWCRPVE9PTDY0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJleHQ9J2AkRUNITyAiWCRsaWJleHQiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIlgkc2hyZXh0X2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIlgkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kc19uZWVkX2xjPSdgJEVDSE8gIlgkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiWCRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiWCRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgJEVDSE8gIlgkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICJYJGNvbXBpbGVyX25lZWRzX29iamVjdCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICJYJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSdgJEVDSE8gIlgkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICJYJGFyY2hpdmVfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICJYJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9jbWRzPSdgJEVDSE8gIlgkbW9kdWxlX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICJYJG1vZHVsZV9leHBzeW1fY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGQ9J2AkRUNITyAiWCR3aXRoX2dudV9sZCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWxsb3dfdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiWCRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiWCRub191bmRlZmluZWRfZmxhZyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9J2AkRUNITyAiWCRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIlgkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0PSdgJEVDSE8gIlgkaGFyZGNvZGVfZGlyZWN0IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9J2AkRUNITyAiWCRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiWCRoYXJkY29kZV9taW51c19MIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSdgJEVDSE8gIlgkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYXV0b21hdGljPSdgJEVDSE8gIlgkaGFyZGNvZGVfYXV0b21hdGljIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIlgkaW5oZXJpdF9ycGF0aCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlua19hbGxfZGVwbGlicz0nYCRFQ0hPICJYJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpeF9zcmNmaWxlX3BhdGg9J2AkRUNITyAiWCRmaXhfc3JjZmlsZV9wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHM9J2AkRUNITyAiWCRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHM9J2AkRUNITyAiWCRleHBvcnRfc3ltYm9sc19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiWCRleGNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltcz0nYCRFQ0hPICJYJGluY2x1ZGVfZXhwc3ltcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzPSdgJEVDSE8gIlgkcHJlbGlua19jbWRzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICJYJGZpbGVfbGlzdF9zcGVjIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICJYJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xpYl9wcmVmaXg9J2AkRUNITyAiWCRuZWVkX2xpYl9wcmVmaXgiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK25lZWRfdmVyc2lvbj0nYCRFQ0hPICJYJG5lZWRfdmVyc2lvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIlgkdmVyc2lvbl90eXBlIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitydW5wYXRoX3Zhcj0nYCRFQ0hPICJYJHJ1bnBhdGhfdmFyIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzaGxpYnBhdGhfdmFyPSdgJEVDSE8gIlgkc2hsaWJwYXRoX3ZhciIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIlgkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsaWJuYW1lX3NwZWM9J2AkRUNITyAiWCRsaWJuYW1lX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYnJhcnlfbmFtZXNfc3BlYz0nYCRFQ0hPICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiWCRzb25hbWVfc3BlYyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICJYJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICJYJHBvc3R1bmluc3RhbGxfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiWCRmaW5pc2hfY21kcyIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2V2YWw9J2AkRUNITyAiWCRmaW5pc2hfZXZhbCIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfaW50b19saWJzPSdgJEVDSE8gIlgkaGFyZGNvZGVfaW50b19saWJzIiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiWCRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSdgJEVDSE8gIlgkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2FjdGlvbj0nYCRFQ0hPICJYJGhhcmRjb2RlX2FjdGlvbiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW4iIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9kbG9wZW5fc2VsZj0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0nYCRFQ0hPICJYJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFhzZWQgLWUgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICJYJG9sZF9zdHJpcGxpYiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc3RyaXBsaWI9J2AkRUNITyAiWCRzdHJpcGxpYiIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIFNFRCBcCitHUkVQIFwKK0VHUkVQIFwKK0ZHUkVQIFwKK0xEIFwKK05NIFwKK0xOX1MgXAorbHRfU1AyTkwgXAorbHRfTkwyU1AgXAorcmVsb2FkX2ZsYWcgXAorT0JKRFVNUCBcCitkZXBsaWJzX2NoZWNrX21ldGhvZCBcCitmaWxlX21hZ2ljX2NtZCBcCitBUiBcCitBUl9GTEFHUyBcCitTVFJJUCBcCitSQU5MSUIgXAorQ0MgXAorQ0ZMQUdTIFwKK2NvbXBpbGVyIFwKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitTSEVMTCBcCitFQ0hPIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9waWMgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitEU1lNVVRJTCBcCitOTUVESVQgXAorTElQTyBcCitPVE9PTCBcCitPVE9PTDY0IFwKK3NocmV4dF9jbWRzIFwKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyBcCitjb21waWxlcl9uZWVkc19vYmplY3QgXAord2l0aF9nbnVfbGQgXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAorbm9fdW5kZWZpbmVkX2ZsYWcgXAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZml4X3NyY2ZpbGVfcGF0aCBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAorZmluaXNoX2V2YWwgXAorb2xkX3N0cmlwbGliIFwKK3N0cmlwbGliOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gIlhcXFxcXCRcJHZhciJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0aW5zdGFsbF9jbWRzIFwKK3Bvc3R1bmluc3RhbGxfY21kcyBcCitmaW5pc2hfY21kcyBcCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiWFxcXCRcJHZhclxcIiB8IFxcXCRYc2VkIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRml4LXVwIGZhbGxiYWNrIGVjaG8gaWYgaXQgd2FzIG1hbmdsZWQgYnkgdGhlIGFib3ZlIHF1b3RpbmcgcnVsZXMuCitjYXNlIFwkbHRfRUNITyBpbgorKidcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJykgIGx0X0VDSE89XGBcJEVDSE8gIlhcJGx0X0VDSE8iIHwgXCRYc2VkIC1lICdzL1xcXFxcXFxcXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyJcJC9cJDAgLS1mYWxsYmFjay1lY2hvIi8nXGAKKyAgOzsKK2VzYWMKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCit4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCitsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJworCisKKwogVEFSR0VURElSPSIkVEFSR0VURElSIgogCiBfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiAKICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgogZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCkBAIC0yMzUwNCwxNiArMTM1MjQsMjAgQEAKICAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgogICAgICJmZmljb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgZmZpY29uZmlnLmgiIDs7CiAgICAgImRlcGZpbGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlcGZpbGVzIiA7OworICAgICJsaWJ0b29sIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGxpYnRvb2wiIDs7CiAgICAgImluY2x1ZGUiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgaW5jbHVkZSIgOzsKICAgICAic3JjIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHNyYyIgOzsKICAgICAiaW5jbHVkZS9mZml0YXJnZXQuaCIpIENPTkZJR19MSU5LUz0iJENPTkZJR19MSU5LUyBpbmNsdWRlL2ZmaXRhcmdldC5oOnNyYy8kVEFSR0VURElSL2ZmaXRhcmdldC5oIiA7OworICAgICJpbmNsdWRlL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvTWFrZWZpbGUiIDs7CiAgICAgImluY2x1ZGUvZmZpLmgiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgaW5jbHVkZS9mZmkuaCIgOzsKKyAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICAgInRlc3RzdWl0ZS9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0c3VpdGUvTWFrZWZpbGUiIDs7CisgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGUiIDs7CisgICAgImxpYmZmaS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJmZmkucGMiIDs7CiAgICAgImluY2x1ZGUvZmZpX2NvbW1vbi5oIikgQ09ORklHX0xJTktTPSIkQ09ORklHX0xJTktTIGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oIiA7OwogICAgICJmZmljb25maWcucHkiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZmZpY29uZmlnLnB5IiA7OwogCi0gICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgKikgYXNfZm5fZXJyb3IgImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7CiAgIGVzYWMKIGRvbmUKIApAQCAtMjM1NDEsNyArMTM1NjUsNyBAQAogICB0cmFwICdleGl0X3N0YXR1cz0kPwogICB7IHRlc3QgLXogIiR0bXAiIHx8IHRlc3QgISAtZCAiJHRtcCIgfHwgcm0gLWZyICIkdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cwogJyAwCi0gIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1CisgIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1CiB9CiAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KIApAQCAtMjM1NTIsMjgxICsxMzU3NiwxNDAgQEAKIHsKICAgdG1wPS4vY29uZiQkLSRSQU5ET00KICAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCi19IHx8Ci17Ci0gICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci19Cit9IHx8IGFzX2ZuX2Vycm9yICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQogCi0jCi0jIFNldCB1cCB0aGUgc2VkIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgotIwotCi0jIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHNjcmlwdHMgaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KLSMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgogaWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KIAorCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiR0bXAvc3ViczEuYXdrIiAmJgogX0FDRU9GCiAKIAotCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJyQnYAogYWNfZGVsaW09JyUhXyEjICcKIGZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbwotICBjYXQgPmNvbmYkJHN1YnMuc2VkIDw8X0FDRU9GCi1TSEVMTCEkU0hFTEwkYWNfZGVsaW0KLVBBVEhfU0VQQVJBVE9SISRQQVRIX1NFUEFSQVRPUiRhY19kZWxpbQotUEFDS0FHRV9OQU1FISRQQUNLQUdFX05BTUUkYWNfZGVsaW0KLVBBQ0tBR0VfVEFSTkFNRSEkUEFDS0FHRV9UQVJOQU1FJGFjX2RlbGltCi1QQUNLQUdFX1ZFUlNJT04hJFBBQ0tBR0VfVkVSU0lPTiRhY19kZWxpbQotUEFDS0FHRV9TVFJJTkchJFBBQ0tBR0VfU1RSSU5HJGFjX2RlbGltCi1QQUNLQUdFX0JVR1JFUE9SVCEkUEFDS0FHRV9CVUdSRVBPUlQkYWNfZGVsaW0KLWV4ZWNfcHJlZml4ISRleGVjX3ByZWZpeCRhY19kZWxpbQotcHJlZml4ISRwcmVmaXgkYWNfZGVsaW0KLXByb2dyYW1fdHJhbnNmb3JtX25hbWUhJHByb2dyYW1fdHJhbnNmb3JtX25hbWUkYWNfZGVsaW0KLWJpbmRpciEkYmluZGlyJGFjX2RlbGltCi1zYmluZGlyISRzYmluZGlyJGFjX2RlbGltCi1saWJleGVjZGlyISRsaWJleGVjZGlyJGFjX2RlbGltCi1kYXRhcm9vdGRpciEkZGF0YXJvb3RkaXIkYWNfZGVsaW0KLWRhdGFkaXIhJGRhdGFkaXIkYWNfZGVsaW0KLXN5c2NvbmZkaXIhJHN5c2NvbmZkaXIkYWNfZGVsaW0KLXNoYXJlZHN0YXRlZGlyISRzaGFyZWRzdGF0ZWRpciRhY19kZWxpbQotbG9jYWxzdGF0ZWRpciEkbG9jYWxzdGF0ZWRpciRhY19kZWxpbQotaW5jbHVkZWRpciEkaW5jbHVkZWRpciRhY19kZWxpbQotb2xkaW5jbHVkZWRpciEkb2xkaW5jbHVkZWRpciRhY19kZWxpbQotZG9jZGlyISRkb2NkaXIkYWNfZGVsaW0KLWluZm9kaXIhJGluZm9kaXIkYWNfZGVsaW0KLWh0bWxkaXIhJGh0bWxkaXIkYWNfZGVsaW0KLWR2aWRpciEkZHZpZGlyJGFjX2RlbGltCi1wZGZkaXIhJHBkZmRpciRhY19kZWxpbQotcHNkaXIhJHBzZGlyJGFjX2RlbGltCi1saWJkaXIhJGxpYmRpciRhY19kZWxpbQotbG9jYWxlZGlyISRsb2NhbGVkaXIkYWNfZGVsaW0KLW1hbmRpciEkbWFuZGlyJGFjX2RlbGltCi1ERUZTISRERUZTJGFjX2RlbGltCi1FQ0hPX0MhJEVDSE9fQyRhY19kZWxpbQotRUNIT19OISRFQ0hPX04kYWNfZGVsaW0KLUVDSE9fVCEkRUNIT19UJGFjX2RlbGltCi1MSUJTISRMSUJTJGFjX2RlbGltCi1idWlsZF9hbGlhcyEkYnVpbGRfYWxpYXMkYWNfZGVsaW0KLWhvc3RfYWxpYXMhJGhvc3RfYWxpYXMkYWNfZGVsaW0KLXRhcmdldF9hbGlhcyEkdGFyZ2V0X2FsaWFzJGFjX2RlbGltCi1idWlsZCEkYnVpbGQkYWNfZGVsaW0KLWJ1aWxkX2NwdSEkYnVpbGRfY3B1JGFjX2RlbGltCi1idWlsZF92ZW5kb3IhJGJ1aWxkX3ZlbmRvciRhY19kZWxpbQotYnVpbGRfb3MhJGJ1aWxkX29zJGFjX2RlbGltCi1ob3N0ISRob3N0JGFjX2RlbGltCi1ob3N0X2NwdSEkaG9zdF9jcHUkYWNfZGVsaW0KLWhvc3RfdmVuZG9yISRob3N0X3ZlbmRvciRhY19kZWxpbQotaG9zdF9vcyEkaG9zdF9vcyRhY19kZWxpbQotdGFyZ2V0ISR0YXJnZXQkYWNfZGVsaW0KLXRhcmdldF9jcHUhJHRhcmdldF9jcHUkYWNfZGVsaW0KLXRhcmdldF92ZW5kb3IhJHRhcmdldF92ZW5kb3IkYWNfZGVsaW0KLXRhcmdldF9vcyEkdGFyZ2V0X29zJGFjX2RlbGltCi1JTlNUQUxMX1BST0dSQU0hJElOU1RBTExfUFJPR1JBTSRhY19kZWxpbQotSU5TVEFMTF9TQ1JJUFQhJElOU1RBTExfU0NSSVBUJGFjX2RlbGltCi1JTlNUQUxMX0RBVEEhJElOU1RBTExfREFUQSRhY19kZWxpbQotYW1fX2lzcmMhJGFtX19pc3JjJGFjX2RlbGltCi1DWUdQQVRIX1chJENZR1BBVEhfVyRhY19kZWxpbQotUEFDS0FHRSEkUEFDS0FHRSRhY19kZWxpbQotVkVSU0lPTiEkVkVSU0lPTiRhY19kZWxpbQotQUNMT0NBTCEkQUNMT0NBTCRhY19kZWxpbQotQVVUT0NPTkYhJEFVVE9DT05GJGFjX2RlbGltCi1BVVRPTUFLRSEkQVVUT01BS0UkYWNfZGVsaW0KLUFVVE9IRUFERVIhJEFVVE9IRUFERVIkYWNfZGVsaW0KLU1BS0VJTkZPISRNQUtFSU5GTyRhY19kZWxpbQotaW5zdGFsbF9zaCEkaW5zdGFsbF9zaCRhY19kZWxpbQotU1RSSVAhJFNUUklQJGFjX2RlbGltCi1JTlNUQUxMX1NUUklQX1BST0dSQU0hJElOU1RBTExfU1RSSVBfUFJPR1JBTSRhY19kZWxpbQotbWtkaXJfcCEkbWtkaXJfcCRhY19kZWxpbQotQVdLISRBV0skYWNfZGVsaW0KLVNFVF9NQUtFISRTRVRfTUFLRSRhY19kZWxpbQotYW1fX2xlYWRpbmdfZG90ISRhbV9fbGVhZGluZ19kb3QkYWNfZGVsaW0KLUFNVEFSISRBTVRBUiRhY19kZWxpbQotYW1fX3RhciEkYW1fX3RhciRhY19kZWxpbQotYW1fX3VudGFyISRhbV9fdW50YXIkYWNfZGVsaW0KLUNDISRDQyRhY19kZWxpbQotQ0ZMQUdTISRDRkxBR1MkYWNfZGVsaW0KLUxERkxBR1MhJExERkxBR1MkYWNfZGVsaW0KLUNQUEZMQUdTISRDUFBGTEFHUyRhY19kZWxpbQotYWNfY3RfQ0MhJGFjX2N0X0NDJGFjX2RlbGltCi1FWEVFWFQhJEVYRUVYVCRhY19kZWxpbQotT0JKRVhUISRPQkpFWFQkYWNfZGVsaW0KLURFUERJUiEkREVQRElSJGFjX2RlbGltCi1hbV9faW5jbHVkZSEkYW1fX2luY2x1ZGUkYWNfZGVsaW0KLWFtX19xdW90ZSEkYW1fX3F1b3RlJGFjX2RlbGltCi1BTURFUF9UUlVFISRBTURFUF9UUlVFJGFjX2RlbGltCi1BTURFUF9GQUxTRSEkQU1ERVBfRkFMU0UkYWNfZGVsaW0KLUFNREVQQkFDS1NMQVNIISRBTURFUEJBQ0tTTEFTSCRhY19kZWxpbQotQ0NERVBNT0RFISRDQ0RFUE1PREUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NfVFJVRSEkYW1fX2Zhc3RkZXBDQ19UUlVFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENDX0ZBTFNFISRhbV9fZmFzdGRlcENDX0ZBTFNFJGFjX2RlbGltCi1DQ0FTISRDQ0FTJGFjX2RlbGltCi1DQ0FTRkxBR1MhJENDQVNGTEFHUyRhY19kZWxpbQotQ0NBU0RFUE1PREUhJENDQVNERVBNT0RFJGFjX2RlbGltCi1hbV9fZmFzdGRlcENDQVNfVFJVRSEkYW1fX2Zhc3RkZXBDQ0FTX1RSVUUkYWNfZGVsaW0KLWFtX19mYXN0ZGVwQ0NBU19GQUxTRSEkYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFJGFjX2RlbGltCi1TRUQhJFNFRCRhY19kZWxpbQotR1JFUCEkR1JFUCRhY19kZWxpbQotRUdSRVAhJEVHUkVQJGFjX2RlbGltCi1MTl9TISRMTl9TJGFjX2RlbGltCi1FQ0hPISRFQ0hPJGFjX2RlbGltCi1fQUNFT0YKKyAgLiAuL2NvbmYkJHN1YnMuc2ggfHwKKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CiAKLSAgaWYgdGVzdCBgc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLnNlZCB8IGdyZXAgLWMgWGAgPSA5NzsgdGhlbgorICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgogICAgIGJyZWFrCiAgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CiAgIGVsc2UKICAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgogICBmaQogZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAogCi1hY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKLWlmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCi0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCi0gIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi1jYXQgPiJcJHRtcC9zdWJzLTEuc2VkIiA8PFxDRU9GJGFjX2VvZgotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCiBfQUNFT0YKLXNlZCAnCi1zL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nCi1zL14vcyxALzsgcy8hL0AsfCNfISFfI3wvCi06bgotdCBuCi1zLyciJGFjX2RlbGltIickLyxnLzsgdAotcy8kL1xcLzsgcAotTjsgcy9eLipcbi8vOyBzL1ssXFwmXS9cXCYvZzsgcy9AL0B8I18hIV8jfC9nOyBiIG4KLScgPj4kQ09ORklHX1NUQVRVUyA8Y29uZiQkc3Vicy5zZWQKLXJtIC1mIGNvbmYkJHN1YnMuc2VkCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotQ0VPRiRhY19lb2YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCR0bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorCit9Cit7CisgIGxpbmUgPSAkIDAKKyAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCisgIHN1YnN0ZWQgPSAwCisgIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKKyAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgeworICAgIGtleSA9IGZpZWxkW2ldCisgICAga2V5bGVuID0gbGVuZ3RoKGtleSkKKyAgICBpZiAoU19pc19zZXRba2V5XSkgeworICAgICAgdmFsdWUgPSBTW2tleV0KKyAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKKyAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCisgICAgICBzdWJzdGVkID0gMQorICAgIH0gZWxzZQorICAgICAgbGVuICs9IDEgKyBrZXlsZW4KKyAgfQorCisgIHByaW50IGxpbmUKK30KKworX0FDQVdLCiBfQUNFT0YKLQotCi1hY19kZWxpbT0nJSFfISMgJwotZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCi0gIGNhdCA+Y29uZiQkc3Vicy5zZWQgPDxfQUNFT0YKLUFSISRBUiRhY19kZWxpbQotUkFOTElCISRSQU5MSUIkYWNfZGVsaW0KLUNQUCEkQ1BQJGFjX2RlbGltCi1DWFghJENYWCRhY19kZWxpbQotQ1hYRkxBR1MhJENYWEZMQUdTJGFjX2RlbGltCi1hY19jdF9DWFghJGFjX2N0X0NYWCRhY19kZWxpbQotQ1hYREVQTU9ERSEkQ1hYREVQTU9ERSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDWFhfVFJVRSEkYW1fX2Zhc3RkZXBDWFhfVFJVRSRhY19kZWxpbQotYW1fX2Zhc3RkZXBDWFhfRkFMU0UhJGFtX19mYXN0ZGVwQ1hYX0ZBTFNFJGFjX2RlbGltCi1DWFhDUFAhJENYWENQUCRhY19kZWxpbQotRjc3ISRGNzckYWNfZGVsaW0KLUZGTEFHUyEkRkZMQUdTJGFjX2RlbGltCi1hY19jdF9GNzchJGFjX2N0X0Y3NyRhY19kZWxpbQotTElCVE9PTCEkTElCVE9PTCRhY19kZWxpbQotTUFJTlRBSU5FUl9NT0RFX1RSVUUhJE1BSU5UQUlORVJfTU9ERV9UUlVFJGFjX2RlbGltCi1NQUlOVEFJTkVSX01PREVfRkFMU0UhJE1BSU5UQUlORVJfTU9ERV9GQUxTRSRhY19kZWxpbQotTUFJTlQhJE1BSU5UJGFjX2RlbGltCi1URVNUU1VCRElSX1RSVUUhJFRFU1RTVUJESVJfVFJVRSRhY19kZWxpbQotVEVTVFNVQkRJUl9GQUxTRSEkVEVTVFNVQkRJUl9GQUxTRSRhY19kZWxpbQotQU1fUlVOVEVTVEZMQUdTISRBTV9SVU5URVNURkxBR1MkYWNfZGVsaW0KLU1JUFNfVFJVRSEkTUlQU19UUlVFJGFjX2RlbGltCi1NSVBTX0ZBTFNFISRNSVBTX0ZBTFNFJGFjX2RlbGltCi1TUEFSQ19UUlVFISRTUEFSQ19UUlVFJGFjX2RlbGltCi1TUEFSQ19GQUxTRSEkU1BBUkNfRkFMU0UkYWNfZGVsaW0KLVg4Nl9UUlVFISRYODZfVFJVRSRhY19kZWxpbQotWDg2X0ZBTFNFISRYODZfRkFMU0UkYWNfZGVsaW0KLVg4Nl9GUkVFQlNEX1RSVUUhJFg4Nl9GUkVFQlNEX1RSVUUkYWNfZGVsaW0KLVg4Nl9GUkVFQlNEX0ZBTFNFISRYODZfRlJFRUJTRF9GQUxTRSRhY19kZWxpbQotWDg2X1dJTjMyX1RSVUUhJFg4Nl9XSU4zMl9UUlVFJGFjX2RlbGltCi1YODZfV0lOMzJfRkFMU0UhJFg4Nl9XSU4zMl9GQUxTRSRhY19kZWxpbQotWDg2X0RBUldJTl9UUlVFISRYODZfREFSV0lOX1RSVUUkYWNfZGVsaW0KLVg4Nl9EQVJXSU5fRkFMU0UhJFg4Nl9EQVJXSU5fRkFMU0UkYWNfZGVsaW0KLUFMUEhBX1RSVUUhJEFMUEhBX1RSVUUkYWNfZGVsaW0KLUFMUEhBX0ZBTFNFISRBTFBIQV9GQUxTRSRhY19kZWxpbQotSUE2NF9UUlVFISRJQTY0X1RSVUUkYWNfZGVsaW0KLUlBNjRfRkFMU0UhJElBNjRfRkFMU0UkYWNfZGVsaW0KLU0zMlJfVFJVRSEkTTMyUl9UUlVFJGFjX2RlbGltCi1NMzJSX0ZBTFNFISRNMzJSX0ZBTFNFJGFjX2RlbGltCi1NNjhLX1RSVUUhJE02OEtfVFJVRSRhY19kZWxpbQotTTY4S19GQUxTRSEkTTY4S19GQUxTRSRhY19kZWxpbQotUE9XRVJQQ19UUlVFISRQT1dFUlBDX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfRkFMU0UhJFBPV0VSUENfRkFMU0UkYWNfZGVsaW0KLVBPV0VSUENfQUlYX1RSVUUhJFBPV0VSUENfQUlYX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfQUlYX0ZBTFNFISRQT1dFUlBDX0FJWF9GQUxTRSRhY19kZWxpbQotUE9XRVJQQ19EQVJXSU5fVFJVRSEkUE9XRVJQQ19EQVJXSU5fVFJVRSRhY19kZWxpbQotUE9XRVJQQ19EQVJXSU5fRkFMU0UhJFBPV0VSUENfREFSV0lOX0ZBTFNFJGFjX2RlbGltCi1QT1dFUlBDX0ZSRUVCU0RfVFJVRSEkUE9XRVJQQ19GUkVFQlNEX1RSVUUkYWNfZGVsaW0KLVBPV0VSUENfRlJFRUJTRF9GQUxTRSEkUE9XRVJQQ19GUkVFQlNEX0ZBTFNFJGFjX2RlbGltCi1BUk1fVFJVRSEkQVJNX1RSVUUkYWNfZGVsaW0KLUFSTV9GQUxTRSEkQVJNX0ZBTFNFJGFjX2RlbGltCi1MSUJGRklfQ1JJU19UUlVFISRMSUJGRklfQ1JJU19UUlVFJGFjX2RlbGltCi1MSUJGRklfQ1JJU19GQUxTRSEkTElCRkZJX0NSSVNfRkFMU0UkYWNfZGVsaW0KLUZSVl9UUlVFISRGUlZfVFJVRSRhY19kZWxpbQotRlJWX0ZBTFNFISRGUlZfRkFMU0UkYWNfZGVsaW0KLVMzOTBfVFJVRSEkUzM5MF9UUlVFJGFjX2RlbGltCi1TMzkwX0ZBTFNFISRTMzkwX0ZBTFNFJGFjX2RlbGltCi1YODZfNjRfVFJVRSEkWDg2XzY0X1RSVUUkYWNfZGVsaW0KLVg4Nl82NF9GQUxTRSEkWDg2XzY0X0ZBTFNFJGFjX2RlbGltCi1TSF9UUlVFISRTSF9UUlVFJGFjX2RlbGltCi1TSF9GQUxTRSEkU0hfRkFMU0UkYWNfZGVsaW0KLVNINjRfVFJVRSEkU0g2NF9UUlVFJGFjX2RlbGltCi1TSDY0X0ZBTFNFISRTSDY0X0ZBTFNFJGFjX2RlbGltCi1QQV9MSU5VWF9UUlVFISRQQV9MSU5VWF9UUlVFJGFjX2RlbGltCi1QQV9MSU5VWF9GQUxTRSEkUEFfTElOVVhfRkFMU0UkYWNfZGVsaW0KLVBBX0hQVVhfVFJVRSEkUEFfSFBVWF9UUlVFJGFjX2RlbGltCi1QQV9IUFVYX0ZBTFNFISRQQV9IUFVYX0ZBTFNFJGFjX2RlbGltCi1QQTY0X0hQVVhfVFJVRSEkUEE2NF9IUFVYX1RSVUUkYWNfZGVsaW0KLVBBNjRfSFBVWF9GQUxTRSEkUEE2NF9IUFVYX0ZBTFNFJGFjX2RlbGltCi1BTExPQ0EhJEFMTE9DQSRhY19kZWxpbQotSEFWRV9MT05HX0RPVUJMRSEkSEFWRV9MT05HX0RPVUJMRSRhY19kZWxpbQotVEFSR0VUISRUQVJHRVQkYWNfZGVsaW0KLVRBUkdFVERJUiEkVEFSR0VURElSJGFjX2RlbGltCi10b29sZXhlY2RpciEkdG9vbGV4ZWNkaXIkYWNfZGVsaW0KLXRvb2xleGVjbGliZGlyISR0b29sZXhlY2xpYmRpciRhY19kZWxpbQotTElCT0JKUyEkTElCT0JKUyRhY19kZWxpbQotTFRMSUJPQkpTISRMVExJQk9CSlMkYWNfZGVsaW0KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiR0bXAvc3ViczEuYXdrIiA+ICIkdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKIF9BQ0VPRgogCi0gIGlmIHRlc3QgYHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5zZWQgfCBncmVwIC1jIFhgID0gNzY7IHRoZW4KLSAgICBicmVhawotICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgotICBmaQotZG9uZQotCi1hY19lb2Y9YHNlZCAtbiAnL15DRU9GWzAtOV0qJC9zL0NFT0YvMC9wJyBjb25mJCRzdWJzLnNlZGAKLWlmIHRlc3QgLW4gIiRhY19lb2YiOyB0aGVuCi0gIGFjX2VvZj1gZWNobyAiJGFjX2VvZiIgfCBzb3J0IC1ucnUgfCBzZWQgMXFgCi0gIGFjX2VvZj1gZXhwciAkYWNfZW9mICsgMWAKLWZpCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi1jYXQgPiJcJHRtcC9zdWJzLTIuc2VkIiA8PFxDRU9GJGFjX2VvZgotL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYiBlbmQKLV9BQ0VPRgotc2VkICcKLXMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2cKLXMvXi9zLEAvOyBzLyEvQCx8I18hIV8jfC8KLTpuCi10IG4KLXMvJyIkYWNfZGVsaW0iJyQvLGcvOyB0Ci1zLyQvXFwvOyBwCi1OOyBzL14uKlxuLy87IHMvWyxcXCZdL1xcJi9nOyBzL0AvQHwjXyEhXyN8L2c7IGIgbgotJyA+PiRDT05GSUdfU1RBVFVTIDxjb25mJCRzdWJzLnNlZAotcm0gLWYgY29uZiQkc3Vicy5zZWQKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi06ZW5kCi1zL3wjXyEhXyN8Ly9nCi1DRU9GJGFjX2VvZgotX0FDRU9GCi0KLQogIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCiAjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAogIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKQEAgLTIzODQyLDIwICsxMzcyNSwxMjggQEAKIH0nCiBmaQogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKIAorIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4KK2lmIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyI7IHRoZW4KK2NhdCA+IiR0bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FXSyB8fAorQkVHSU4geworX0FDRU9GCiAKLWZvciBhY190YWcgaW4gIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgOkwgJENPTkZJR19MSU5LUyAgOkMgJENPTkZJR19DT01NQU5EUworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKKyMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KKworIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQorIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbworICBhY190PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3QiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgIDpMICRDT05GSUdfTElOS1MgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZwogZG8KICAgY2FzZSAkYWNfdGFnIGluCiAgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OwogICBlc2FjCiAgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCiAgIDpbRkhMXSo6Kik7OwotICA6TCogfCA6Qyo6KikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSW52YWxpZCB0YWcgJGFjX3RhZy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKICAgOltGSF0tKSBhY190YWc9LTotOzsKICAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKICAgZXNhYwpAQCAtMjM4ODMsMjYgKzEzODc0LDM0IEBACiAJICAgW1xcLyRdKikgZmFsc2U7OwogCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKIAkgICBlc2FjIHx8Ci0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGFjX2YiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworCSAgIGFzX2ZuX2Vycm9yICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OwogICAgICAgZXNhYwotICAgICAgYWNfZmlsZV9pbnB1dHM9IiRhY19maWxlX2lucHV0cyAkYWNfZiIKKyAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCiAgICAgZG9uZQogCiAgICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKICAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CiAgICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgICBjb25maWd1cmVfaW5wdXQ9IkdlbmVyYXRlZCBmcm9tICJgSUZTPToKLQkgIGVjaG8gJCogfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJ2AiIGJ5IGNvbmZpZ3VyZS4iCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKICAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCiAgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQogICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKIAogICAgIGNhc2UgJGFjX3RhZyBpbgotICAgICo6LToqIHwgKjotKSBjYXQgPiIkdG1wL3N0ZGluIjs7CisgICAgKjotOiogfCAqOi0pIGNhdCA+IiR0bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OwogICAgIGVzYWMKICAgICA7OwogICBlc2FjCkBAIC0yMzkxMiw3ICsxMzkxMSw3IEBACiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCiAJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CiAgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKIAkgICAgcy8vXDEvCiAJICAgIHEKQEAgLTIzOTMwLDU1ICsxMzkyOSwxNSBAQAogCSAgICBxCiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKLSAgeyBhc19kaXI9IiRhY19kaXIiCi0gIGNhc2UgJGFzX2RpciBpbiAjKAotICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7Ci0gIGVzYWMKLSAgdGVzdCAtZCAiJGFzX2RpciIgfHwgeyAkYXNfbWtkaXJfcCAmJiBta2RpciAtcCAiJGFzX2RpciI7IH0gfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjKAotICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKLSAgICAgIGVzYWMKLSAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAotJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAogICBhY19idWlsZGRpcj0uCiAKIGNhc2UgIiRhY19kaXIiIGluCiAuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKICopCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKICAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgotICBhY190b3BfYnVpbGRkaXJfc3ViPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLy4uLGc7cywvLCwnYAorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKICAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgogICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CiAgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OwpAQCAtMjQwMjMsMTIgKzEzOTgyLDEyIEBACiAgIGVzYWMKIF9BQ0VPRgogCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMgSWYgdGhlIHRlbXBsYXRlIGRvZXMgbm90IGtub3cgYWJvdXQgZGF0YXJvb3RkaXIsIGV4cGFuZCBpdC4KICMgRklYTUU6IFRoaXMgaGFjayBzaG91bGQgYmUgcmVtb3ZlZCBhIGZldyB5ZWFycyBhZnRlciAyLjYwLgogYWNfZGF0YXJvb3RkaXJfaGFjaz07IGFjX2RhdGFyb290ZGlyX3NlZW49Ci0KLWNhc2UgYHNlZCAtbiAnL2RhdGFyb290ZGlyLyB7CithY19zZWRfZGF0YXJvb3Q9JworL2RhdGFyb290ZGlyLyB7CiAgIHAKICAgcQogfQpAQCAtMjQwMzYsMzYgKzEzOTk1LDM3IEBACiAvQGRvY2RpckAvcAogL0BpbmZvZGlyQC9wCiAvQGxvY2FsZWRpckAvcAotL0BtYW5kaXJAL3AKLScgJGFjX2ZpbGVfaW5wdXRzYCBpbgorL0BtYW5kaXJAL3AnCitjYXNlIGBldmFsICJzZWQgLW4gXCJcJGFjX3NlZF9kYXRhcm9vdFwiICRhY19maWxlX2lucHV0cyJgIGluCiAqZGF0YXJvb3RkaXIqKSBhY19kYXRhcm9vdGRpcl9zZWVuPXllczs7CiAqQGRhdGFkaXJAKnwqQGRvY2RpckAqfCpAaW5mb2RpckAqfCpAbG9jYWxlZGlyQCp8KkBtYW5kaXJAKikKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjI7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9CiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICAgYWNfZGF0YXJvb3RkaXJfaGFjaz0nCiAgIHMmQGRhdGFkaXJAJiRkYXRhZGlyJmcKICAgcyZAZG9jZGlyQCYkZG9jZGlyJmcKICAgcyZAaW5mb2RpckAmJGluZm9kaXImZwogICBzJkBsb2NhbGVkaXJAJiRsb2NhbGVkaXImZwogICBzJkBtYW5kaXJAJiRtYW5kaXImZwotICAgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7CisgIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7CiBlc2FjCiBfQUNFT0YKIAogIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgogIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCiAjIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/Ci1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotICBzZWQgIiRhY192cHN1YgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19zZWRfZXh0cmE9IiRhY192cHN1YgogJGV4dHJhc3ViCiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogOnQKIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKLXMmQGNvbmZpZ3VyZV9pbnB1dEAmJGNvbmZpZ3VyZV9pbnB1dCY7dCB0CitzfEBjb25maWd1cmVfaW5wdXRAfCRhY19zZWRfY29uZl9pbnB1dHw7dCB0CiBzJkB0b3BfYnVpbGRkaXJAJiRhY190b3BfYnVpbGRkaXJfc3ViJjt0IHQKK3MmQHRvcF9idWlsZF9wcmVmaXhAJiRhY190b3BfYnVpbGRfcHJlZml4Jjt0IHQKIHMmQHNyY2RpckAmJGFjX3NyY2RpciY7dCB0CiBzJkBhYnNfc3JjZGlyQCYkYWNfYWJzX3NyY2RpciY7dCB0CiBzJkB0b3Bfc3JjZGlyQCYkYWNfdG9wX3NyY2RpciY7dCB0CkBAIC0yNDA3NiwxMzUgKzE0MDM2LDY1IEBACiBzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CiBzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiAkYWNfZGF0YXJvb3RkaXJfaGFjawotIiAkYWNfZmlsZV9pbnB1dHMgfCBzZWQgLWYgIiR0bXAvc3Vicy0xLnNlZCIgfCBzZWQgLWYgIiR0bXAvc3Vicy0yLnNlZCIgPiR0bXAvb3V0CisiCitldmFsIHNlZCBcIlwkYWNfc2VkX2V4dHJhXCIgIiRhY19maWxlX2lucHV0cyIgfCAkQVdLIC1mICIkdG1wL3N1YnMuYXdrIiA+JHRtcC9vdXQgXAorICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKIAogdGVzdCAteiAiJGFjX2RhdGFyb290ZGlyX2hhY2skYWNfZGF0YXJvb3RkaXJfc2VlbiIgJiYKICAgeyBhY19vdXQ9YHNlZCAtbiAnL1wke2RhdGFyb290ZGlyfS9wJyAiJHRtcC9vdXQiYDsgdGVzdCAtbiAiJGFjX291dCI7IH0gJiYKICAgeyBhY19vdXQ9YHNlZCAtbiAnL15bCSBdKmRhdGFyb290ZGlyWwkgXSo6Kj0vcCcgIiR0bXAvb3V0ImA7IHRlc3QgLXogIiRhY19vdXQiOyB9ICYmCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJwogd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJworJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2ZpbGUgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHZhcmlhYmxlIFxgZGF0YXJvb3RkaXInCiB3aGljaCBzZWVtcyB0byBiZSB1bmRlZmluZWQuICBQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQuIiA+JjI7fQogCiAgIHJtIC1mICIkdG1wL3N0ZGluIgogICBjYXNlICRhY19maWxlIGluCi0gIC0pIGNhdCAiJHRtcC9vdXQiOyBybSAtZiAiJHRtcC9vdXQiOzsKLSAgKikgcm0gLWYgIiRhY19maWxlIjsgbXYgIiR0bXAvb3V0IiAkYWNfZmlsZTs7Ci0gIGVzYWMKKyAgLSkgY2F0ICIkdG1wL291dCIgJiYgcm0gLWYgIiR0bXAvb3V0Ijs7CisgICopIHJtIC1mICIkYWNfZmlsZSIgJiYgbXYgIiR0bXAvb3V0IiAiJGFjX2ZpbGUiOzsKKyAgZXNhYyBcCisgIHx8IGFzX2ZuX2Vycm9yICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogIDs7CiAgIDpIKQogICAjCiAgICMgQ09ORklHX0hFQURFUgogICAjCi1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGEgc2VkIHNjcmlwdCBgY29uZnRlc3QuZGVmaW5lcycsIHRoYXQKLSMgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50byBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCi0jIEZpcnN0LCBhcHBlbmQgYSBzcGFjZSB0byBldmVyeSB1bmRlZi9kZWZpbmUgbGluZSwgdG8gZWFzZSBtYXRjaGluZy4KLWVjaG8gJ3MvJC8gLycgPmNvbmZ0ZXN0LmRlZmluZXMKLSMgVGhlbiwgcHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0LCBvciBpbgotIyBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50LCBpbiBjb25maWcuc3RhdHVzLiAgSWYgc29tZSBtYWNyb3Mgd2VyZQotIyBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsICNkZWZpbmVzIGZvciB0aGUgc2FtZQotIyBzeW1ib2wsIHdoaWNoIGlzIHVzZWxlc3MuICBCdXQgZG8gbm90IHNvcnQgdGhlbSwgc2luY2UgdGhlIGxhc3QKLSMgQUNfREVGSU5FIG11c3QgYmUgaG9ub3JlZC4KLWFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCi0jIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgUEFSQU1TIEMgVkFMVUUgRCIsIHdoZXJlCi0jIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkLCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCi0jIFBBUkFNUyBpcyB0aGUgcGFyYW1ldGVyIGxpc3QgaW4gdGhlIG1hY3JvIGRlZmluaXRpb24tLWluIG1vc3QgY2FzZXMsIGl0J3MKLSMganVzdCBhbiBlbXB0eSBzdHJpbmcuCi1hY19kQT0ncyxeXFwoWwkgI10qXFwpW14JIF0qXFwoWwkgXSonCi1hY19kQj0nXFwpWwkgKF0uKixcXDFkZWZpbmVcXDInCi1hY19kQz0nICcKLWFjX2REPScgLCcKLQotdW5pcSBjb25mZGVmcy5oIHwKLSAgc2VkIC1uICcKLQl0IHJzZXQKLQk6cnNldAotCXMvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLy8KLQl0IG9rCi0JZAotCTpvawotCXMvW1xcJixdL1xcJi9nCi0Jcy9eXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpLyAnIiRhY19kQSInXDEnIiRhY19kQiInXDInIiR7YWNfZEN9IidcMyciJGFjX2REIicvcAotCXMvXlwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS8nIiRhY19kQSInXDEnIiRhY19kQiRhY19kQyInXDInIiRhY19kRCInL3AKLSAgJyA+PmNvbmZ0ZXN0LmRlZmluZXMKLQotIyBSZW1vdmUgdGhlIHNwYWNlIHRoYXQgd2FzIGFwcGVuZGVkIHRvIGVhc2UgbWF0Y2hpbmcuCi0jIFRoZW4gcmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKLSMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKLSMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgotIyAoVGhlIHJlZ2V4cCBjYW4gYmUgc2hvcnQsIHNpbmNlIHRoZSBsaW5lIGNvbnRhaW5zIGVpdGhlciAjZGVmaW5lIG9yICN1bmRlZi4pCi1lY2hvICdzLyAkLy8KLXMsXlsJICNdKnUuKiwvKiAmICovLCcgPj5jb25mdGVzdC5kZWZpbmVzCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lczoKLWFjX21heF9zZWRfbGluZXM9NTAKLQotIyBGaXJzdCBzZWQgY29tbWFuZCBpczoJIHNlZCAtZiBkZWZpbmVzLnNlZCAkYWNfZmlsZV9pbnB1dHMgPiIkdG1wL291dDEiCi0jIFNlY29uZCBvbmUgaXM6CSBzZWQgLWYgZGVmaW5lcy5zZWQgIiR0bXAvb3V0MSIgPiIkdG1wL291dDIiCi0jIFRoaXJkIG9uZSB3aWxsIGJlOgkgc2VkIC1mIGRlZmluZXMuc2VkICIkdG1wL291dDIiID4iJHRtcC9vdXQxIgotIyBldCBjZXRlcmEuCi1hY19pbj0nJGFjX2ZpbGVfaW5wdXRzJwotYWNfb3V0PSciJHRtcC9vdXQxIicKLWFjX254dD0nIiR0bXAvb3V0MiInCi0KLXdoaWxlIDoKLWRvCi0gICMgV3JpdGUgYSBoZXJlIGRvY3VtZW50OgotICAgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCi0gICAgIyBGaXJzdCwgY2hlY2sgdGhlIGZvcm1hdCBvZiB0aGUgbGluZToKLSAgICBjYXQgPiJcJHRtcC9kZWZpbmVzLnNlZCIgPDxcXENFT0YKLS9eWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKiRhY193b3JkX3JlWwkgXSpcJC9iIGRlZgotL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKiRhY193b3JkX3JlWygJIF0vYiBkZWYKLWIKLTpkZWYKLV9BQ0VPRgotICBzZWQgJHthY19tYXhfc2VkX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgICBzZWQgLWYgIiR0bXAvZGVmaW5lcy5zZWQiJyAiJGFjX2luID4kYWNfb3V0IiA+PiRDT05GSUdfU1RBVFVTCi0gIGFjX2luPSRhY19vdXQ7IGFjX291dD0kYWNfbnh0OyBhY19ueHQ9JGFjX2luCi0gIHNlZCAxLCR7YWNfbWF4X3NlZF9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKLSAgZ3JlcCAuIGNvbmZ0ZXN0LnRhaWwgPi9kZXYvbnVsbCB8fCBicmVhawotICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCi0gIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QuZGVmaW5lcwotZG9uZQotcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC50YWlsCi0KLWVjaG8gImFjX3Jlc3VsdD0kYWNfaW4iID4+JENPTkZJR19TVEFUVVMKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgogICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iID4iJHRtcC9jb25maWcuaCIKLSAgICBjYXQgIiRhY19yZXN1bHQiID4+IiR0bXAvY29uZmlnLmgiCi0gICAgaWYgZGlmZiAkYWNfZmlsZSAiJHRtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQotZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJHRtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KICAgICBlbHNlCi0gICAgICBybSAtZiAkYWNfZmlsZQotICAgICAgbXYgIiR0bXAvY29uZmlnLmgiICRhY19maWxlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJHRtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CiAgICAgZmkKICAgZWxzZQotICAgIGVjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIgotICAgIGNhdCAiJGFjX3Jlc3VsdCIKKyAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKKyAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiR0bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQogICBmaQotICBybSAtZiAiJHRtcC9vdXQxMiIKLSMgQ29tcHV0ZSAkYWNfZmlsZSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KKyMgQ29tcHV0ZSAiJGFjX2ZpbGUiJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgorX2FtX2FyZz0iJGFjX2ZpbGUiCiBfYW1fc3RhbXBfY291bnQ9MQogZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCiAgIGNhc2UgJF9hbV9oZWFkZXIgaW4KLSAgICAkYWNfZmlsZSB8ICRhY19maWxlOiogKQorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCiAgICAgICBicmVhayA7OwogICAgICogKQogICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OwogICBlc2FjCiBkb25lCi1lY2hvICJ0aW1lc3RhbXAgZm9yICRhY19maWxlIiA+YCRhc19kaXJuYW1lIC0tICRhY19maWxlIHx8Ci0kYXNfZXhwciBYJGFjX2ZpbGUgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCRhY19maWxlIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgkYWNfZmlsZSA6ICdYXCgvL1wpJCcgXHwgXAotCSBYJGFjX2ZpbGUgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgkYWNfZmlsZSB8CitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YCRhc19kaXJuYW1lIC0tICIkX2FtX2FyZyIgfHwKKyRhc19leHByIFgiJF9hbV9hcmciIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJF9hbV9hcmciIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAogICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CiAJICAgIHMvL1wxLwogCSAgICBxCkBAIC0yNDIyOCw1MiArMTQxMTgsNjcgQEAKICAgIyBDT05GSUdfTElOSwogICAjCiAKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbGlua2luZyAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBsaW5raW5nICRzcmNkaXIvJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgPiY2O30KKyAgaWYgdGVzdCAiJGFjX3NvdXJjZSIgPSAiJGFjX2ZpbGUiICYmIHRlc3QgIiRzcmNkaXIiID0gJy4nOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBQcmVmZXIgdGhlIGZpbGUgZnJvbSB0aGUgc291cmNlIHRyZWUgaWYgbmFtZXMgYXJlIGlkZW50aWNhbC4KKyAgICBpZiB0ZXN0ICIkYWNfc291cmNlIiA9ICIkYWNfZmlsZSIgfHwgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYWNfc291cmNlPSRzcmNkaXIvJGFjX3NvdXJjZQorICAgIGZpCiAKLSAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY19zb3VyY2UiOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJHNyY2Rpci8kYWNfc291cmNlOiBmaWxlIG5vdCBmb3VuZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkc3JjZGlyLyRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsaW5raW5nICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbGlua2luZyAkYWNfc291cmNlIHRvICRhY19maWxlIiA+JjY7fQorCisgICAgaWYgdGVzdCAhIC1yICIkYWNfc291cmNlIjsgdGhlbgorICAgICAgYXNfZm5fZXJyb3IgIiRhY19zb3VyY2U6IGZpbGUgbm90IGZvdW5kIiAiJExJTkVOTyIgNQorICAgIGZpCisgICAgcm0gLWYgIiRhY19maWxlIgorCisgICAgIyBUcnkgYSByZWxhdGl2ZSBzeW1saW5rLCB0aGVuIGEgaGFyZCBsaW5rLCB0aGVuIGEgY29weS4KKyAgICBjYXNlICRzcmNkaXIgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRhY19zb3VyY2UgOzsKKwkqKSBhY19yZWxfc291cmNlPSRhY190b3BfYnVpbGRfcHJlZml4JGFjX3NvdXJjZSA7OworICAgIGVzYWMKKyAgICBsbiAtcyAiJGFjX3JlbF9zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKKyAgICAgIGxuICIkYWNfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8CisgICAgICBjcCAtcCAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiB8fAorICAgICAgYXNfZm5fZXJyb3IgImNhbm5vdCBsaW5rIG9yIGNvcHkgJGFjX3NvdXJjZSB0byAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICAgZmkKLSAgcm0gLWYgIiRhY19maWxlIgotCi0gICMgVHJ5IGEgcmVsYXRpdmUgc3ltbGluaywgdGhlbiBhIGhhcmQgbGluaywgdGhlbiBhIGNvcHkuCi0gIGNhc2UgJHNyY2RpciBpbgotICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19yZWxfc291cmNlPSRzcmNkaXIvJGFjX3NvdXJjZSA7OwotICAgICAgKikgYWNfcmVsX3NvdXJjZT0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIvJGFjX3NvdXJjZSA7OwotICBlc2FjCi0gIGxuIC1zICIkYWNfcmVsX3NvdXJjZSIgIiRhY19maWxlIiAyPi9kZXYvbnVsbCB8fAotICAgIGxuICIkc3JjZGlyLyRhY19zb3VyY2UiICIkYWNfZmlsZSIgMj4vZGV2L251bGwgfHwKLSAgICBjcCAtcCAiJHNyY2Rpci8kYWNfc291cmNlIiAiJGFjX2ZpbGUiIHx8Ci0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGxpbmsgb3IgY29weSAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGxpbmsgb3IgY29weSAkc3JjZGlyLyRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KICA7OwotICA6QykgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1Ci1lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9CiAgOzsKICAgZXNhYwogCiAKICAgY2FzZSAkYWNfZmlsZSRhY19tb2RlIGluCi0gICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KLSAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KLSAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KLSAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAotICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKLSAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KLSAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgIyBsaW1pdCBvZiAyMDQ4LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuCi0gIGlmIHNlZCAxMHEgIiRtZiIgfCBncmVwICdeIy4qZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlJyA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgZGlycGFydD1gJGFzX2Rpcm5hbWUgLS0gIiRtZiIgfHwKKyAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKKyAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAogJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCiAJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAogCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRtZiIgfAorJGFzX2VjaG8gWCIkbWYiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMjQyOTEsMzMgKzE0MTk2LDMzIEBACiAJICAgIHEKIAkgIH0KIAkgIHMvLiovLi87IHEnYAotICBlbHNlCi0gICAgY29udGludWUKLSAgZmkKLSAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKLSAgIyBmcm9tIHRoZSBNYWtlZmlsZSB3aXRob3V0IHJ1bm5pbmcgYG1ha2UnLgotICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAotICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQotICBhbV9faW5jbHVkZT1gc2VkIC1uICdzL15hbV9faW5jbHVkZSA9IC8vcCcgPCAiJG1mImAKLSAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCi0gICMgV2hlbiB1c2luZyBhbnNpMmtuciwgVSBtYXkgYmUgZW1wdHkgb3IgYW4gdW5kZXJzY29yZTsgZXhwYW5kIGl0Ci0gIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKLSAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAotICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKLSAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgIyBleHBhbnNpb24uCi0gIGZvciBmaWxlIGluIGBzZWQgLW4gIgotICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotICAgICAgIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnIC1lICdzL1wkVS8nIiRVIicvZydgOyBkbwotICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgotICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KKyAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQorICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRmaWxlIiB8fAogJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKIAkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGZpbGUiIHwKKyRhc19lY2hvIFgiJGZpbGUiIHwKICAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewogCSAgICBzLy9cMS8KIAkgICAgcQpAQCAtMjQzMzUsNTEgKzE0MjQwLDY0NyBAQAogCSAgICBxCiAJICB9CiAJICBzLy4qLy4vOyBxJ2AKLSAgICB7IGFzX2Rpcj0kZGlycGFydC8kZmRpcgotICBjYXNlICRhc19kaXIgaW4gIygKLSAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OwotICBlc2FjCi0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IHsgJGFzX21rZGlyX3AgJiYgbWtkaXIgLXAgIiRhc19kaXIiOyB9IHx8IHsKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIDo7IGRvCi0gICAgICBjYXNlICRhc19kaXIgaW4gIygKLSAgICAgICpcJyopIGFzX3FkaXI9YGVjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIygKLSAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7Ci0gICAgICBlc2FjCi0gICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJGFzX2RpciIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyOyBhc19mbl9ta2Rpcl9wCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCiAgICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLSAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgotICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgogICBkb25lCi1kb25lCit9CisgOzsKKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKworIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0iIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXIuCitPQkpEVU1QPSRsdF9PQkpEVU1QCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCitTVFJJUD0kbHRfU1RSSVAKKworIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFguCitEU1lNVVRJTD0kbHRfRFNZTVVUSUwKKworIyBUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWC4KK05NRURJVD0kbHRfTk1FRElUCisKKyMgVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWC4KK0xJUE89JGx0X0xJUE8KKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWC4KK09UT09MPSRsdF9PVE9PTAorCisjIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40LgorT1RPT0w2ND0kbHRfT1RPT0w2NAorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0kbGliZXh0CisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0kbHRfc2hyZXh0X2NtZHMKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IGxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSRsdF92YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaworCisjIERvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIFNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KK2xpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCisKKyMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRQorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworCisjIENvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIEFzICJmaW5pc2hfY21kcyIsIGV4Y2VwdCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dAorIyBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeQorIyBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JGhhcmRjb2RlX2RpcmVjdAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCitwcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICcvXiMgR2VuZXJhdGVkIHNoZWxsIGZ1bmN0aW9ucyBpbnNlcnRlZCBoZXJlL3EnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIGNhc2UgJHhzaV9zaGVsbCBpbgorICB5ZXMpCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfYmFzZW5hbWUgZmlsZQorZnVuY19iYXNlbmFtZSAoKQoreworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgIGVzYWMKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IgorfQorCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LgorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQorICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifQorfQorCisjIGZ1bmNfb3B0X3NwbGl0CitmdW5jX29wdF9zcGxpdCAoKQoreworICBmdW5jX29wdF9zcGxpdF9vcHQ9JHsxJSU9Kn0KKyAgZnVuY19vcHRfc3BsaXRfYXJnPSR7MSMqPX0KK30KKworIyBmdW5jX2xvMm8gb2JqZWN0CitmdW5jX2xvMm8gKCkKK3sKKyAgY2FzZSAkezF9IGluCisgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKKyAgICAqKSAgICBmdW5jX2xvMm9fcmVzdWx0PSR7MX0gOzsKKyAgZXNhYworfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KK30KKworX0xUX0VPRgorICAgIDs7CisgICopICMgQm91cm5lIGNvbXBhdGlibGUgZnVuY3Rpb25zLgorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19kaXJuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LAorIyBvdGhlcndpc2Ugc2V0IHJlc3VsdCB0byBOT05ESVJfUkVQTEFDRU1FTlQuCitmdW5jX2Rpcm5hbWUgKCkKK3sKKyAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKyAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkZGlybmFtZSJgCisgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgZWxzZQorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKKyAgZmkKK30KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGJhc2VuYW1lImAKK30KKworCisjIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KKyMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCisjIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKKyMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KKyMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKK2Z1bmNfc3RyaXBuYW1lICgpCit7CisgIGNhc2UgJHsyfSBpbgorICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJVxcXFwkezJ9XCQlJSJgOzsKKyAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiWCR7M30iIFwKKyAgICAgICAgICAgfCAkWHNlZCAtZSAicyVeJHsxfSUlIiAtZSAicyUkezJ9XCQlJSJgOzsKKyAgZXNhYworfQorCisjIHNlZCBzY3JpcHRzOgorbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtW149XSpcKT0uKi9cMS87cScKK215X3NlZF9sb25nX2FyZz0nMXMvXi1bXj1dKj0vLycKKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW14uXSokLy5sby8nYAorfQorCisjIGZ1bmNfYXJpdGggYXJpdGhtZXRpYy10ZXJtLi4uCitmdW5jX2FyaXRoICgpCit7CisgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIkQCJgCit9CisKKyMgZnVuY19sZW4gc3RyaW5nCisjIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCitmdW5jX2xlbiAoKQoreworICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiQxIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9CisKK19MVF9FT0YKK2VzYWMKKworY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkMSs9XCQyIgorfQorX0xUX0VPRgorICAgIDs7CisgICopCisgICAgY2F0IDw8IFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKworIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKKyMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgorZnVuY19hcHBlbmQgKCkKK3sKKyAgZXZhbCAiJDE9XCQkMVwkMiIKK30KKworX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCisgIHNlZCAtbiAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS8sJHAnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCiAgOzsKICAgICAiaW5jbHVkZSI6QykgdGVzdCAtZCBpbmNsdWRlIHx8IG1rZGlyIGluY2x1ZGUgOzsKICAgICAic3JjIjpDKQpAQCAtMjQzOTEsMTEgKzE0ODkyLDEzIEBACiBkb25lICMgZm9yIGFjX3RhZwogCiAKLXsgKGV4aXQgMCk7IGV4aXQgMDsgfQorYXNfZm5fZXhpdCAwCiBfQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQogCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKwogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCiAjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KQEAgLTI0NDE1LDYgKzE0OTE4LDEwIEBACiAgIGV4ZWMgNT4+Y29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgJD8KK2ZpCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KIGZpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKaW5kZXggOTQ3MDUzNi4uODdjNjNlMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuYWMKQEAgLTMsOSArMyw5IEBACiAjIGZpbGUgZnJvbSBsaWJmZmkgLSBzbGlnaHRseSBwYXRjaGVkIGZvciBjdHlwZXMKICMKIAotQUNfUFJFUkVRKDIuNTkpCitBQ19QUkVSRVEoMi42MykKIAotQUNfSU5JVChbbGliZmZpXSwgWzMuMC41XSwgW2h0dHA6Ly9nY2MuZ251Lm9yZy9idWdzLmh0bWxdKQorQUNfSU5JVChbbGliZmZpXSwgWzMuMC4xMHJjMF0sIFtodHRwOi8vZ2NjLmdudS5vcmcvYnVncy5odG1sXSkKIEFDX0NPTkZJR19IRUFERVJTKFtmZmljb25maWcuaF0pCiAKIEFDX0NBTk9OSUNBTF9TWVNURU0KQEAgLTIzLDYgKzIzLDcgQEAKIG00X3JlbmFtZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLFtyZWFsX1BSRUNJT1VTXSkKIG00X2RlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLFtdKQogQUNfUFJPR19DQworbTRfdW5kZWZpbmUoW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKIG00X3JlbmFtZShbcmVhbF9QUkVDSU9VU10sW19BQ19BUkdfVkFSX1BSRUNJT1VTXSkKIAogQUNfU1VCU1QoQ0ZMQUdTKQpAQCAtMzAsNiArMzEsNyBAQAogQU1fUFJPR19BUwogQU1fUFJPR19DQ19DX08KIEFDX1BST0dfTElCVE9PTAorQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQogCiBBTV9NQUlOVEFJTkVSX01PREUKIApAQCAtNTIsMTAgKzU0LDE4IEBACiAJVEFSR0VUPUFSTTsgVEFSR0VURElSPWFybQogCTs7CiAKLSAgYW1kNjQtKi1mcmVlYnNkKikKKyAgYW1kNjQtKi1mcmVlYnNkKiB8IGFtZDY0LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgogICAJOzsKIAorICBhbWQ2NC0qLWZyZWVic2QqKQorCVRBUkdFVD1YODZfNjQ7IFRBUkdFVERJUj14ODYKKwk7OworCisgIGF2cjMyKi0qLSopCisJVEFSR0VUPUFWUjMyOyBUQVJHRVRESVI9YXZyMzIKKwk7OworCiAgIGNyaXMtKi0qKQogCVRBUkdFVD1MSUJGRklfQ1JJUzsgVEFSR0VURElSPWNyaXMKIAk7OwpAQCAtNzQsMTEgKzg0LDEzIEBACiAJVEFSR0VUPVBBX0hQVVg7IFRBUkdFVERJUj1wYQogCTs7CiAKLSAgaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqKQorICBpPzg2LSotZnJlZWJzZCogfCBpPzg2LSotb3BlbmJzZCopCiAJVEFSR0VUPVg4Nl9GUkVFQlNEOyBUQVJHRVRESVI9eDg2CiAJOzsKICAgaT84Ni13aW4zMiogfCBpPzg2LSotY3lnd2luKiB8IGk/ODYtKi1taW5ndyopCiAJVEFSR0VUPVg4Nl9XSU4zMjsgVEFSR0VURElSPXg4NgorCSMgQWxsIG1pbmd3L2N5Z3dpbi93aW4zMiBidWlsZHMgcmVxdWlyZSB0aGlzIGZvciBzaGFyZWRsaWIKKwlBTV9MVExERkxBR1M9Ii1uby11bmRlZmluZWQiCiAJOzsKICAgaT84Ni0qLWRhcndpbiopCiAJVEFSR0VUPVg4Nl9EQVJXSU47IFRBUkdFVERJUj14ODYKQEAgLTEwOSw3ICsxMjEsOSBAQAogCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKICAgbWlwcyotKi1saW51eCopCi0JVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCisJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KKwlIQVZFX0xPTkdfRE9VQkxFPSdkZWZpbmVkKF9fbWlwczY0KScKKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcwogCTs7CiAKICAgcG93ZXJwYyotKi1saW51eCogfCBwb3dlcnBjLSotc3lzdiopCkBAIC0xNDksMTQgKzE2MywxOCBAQAogICB4ODZfNjQtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAJOzsKKwogICB4ODZfNjQtKi1jeWd3aW4qIHwgeDg2XzY0LSotbWluZ3cqKQorCVRBUkdFVD1YODZfV0lONjQ7IFRBUkdFVERJUj14ODYKIAk7OworCiAgIHg4Nl82NC0qLSopCiAJVEFSR0VUPVg4Nl82NDsgVEFSR0VURElSPXg4NgogCTs7CiBlc2FjCiAKIEFDX1NVQlNUKEFNX1JVTlRFU1RGTEFHUykKK0FDX1NVQlNUKEFNX0xUTERGTEFHUykKIAogaWYgdGVzdCAkVEFSR0VURElSID0gdW5rbm93bjsgdGhlbgogICBBQ19NU0dfRVJST1IoWyJsaWJmZmkgaGFzIG5vdCBiZWVuIHBvcnRlZCB0byAkaG9zdC4iXSkKQEAgLTE2Nyw2ICsxODUsNyBAQAogQU1fQ09ORElUSU9OQUwoWDg2LCB0ZXN0IHgkVEFSR0VUID0geFg4NikKIEFNX0NPTkRJVElPTkFMKFg4Nl9GUkVFQlNELCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9GUkVFQlNEKQogQU1fQ09ORElUSU9OQUwoWDg2X1dJTjMyLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMikKK0FNX0NPTkRJVElPTkFMKFg4Nl9XSU42NCwgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQpCiBBTV9DT05ESVRJT05BTChYODZfREFSV0lOLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4pCiBBTV9DT05ESVRJT05BTChBTFBIQSwgdGVzdCB4JFRBUkdFVCA9IHhBTFBIQSkKIEFNX0NPTkRJVElPTkFMKElBNjQsIHRlc3QgeCRUQVJHRVQgPSB4SUE2NCkKQEAgLTE3Nyw2ICsxOTYsNyBAQAogQU1fQ09ORElUSU9OQUwoUE9XRVJQQ19EQVJXSU4sIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19EQVJXSU4pCiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0ZSRUVCU0QsIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19GUkVFQlNEKQogQU1fQ09ORElUSU9OQUwoQVJNLCB0ZXN0IHgkVEFSR0VUID0geEFSTSkKK0FNX0NPTkRJVElPTkFMKEFWUjMyLCB0ZXN0IHgkVEFSR0VUID0geEFWUjMyKQogQU1fQ09ORElUSU9OQUwoTElCRkZJX0NSSVMsIHRlc3QgeCRUQVJHRVQgPSB4TElCRkZJX0NSSVMpCiBBTV9DT05ESVRJT05BTChGUlYsIHRlc3QgeCRUQVJHRVQgPSB4RlJWKQogQU1fQ09ORElUSU9OQUwoUzM5MCwgdGVzdCB4JFRBUkdFVCA9IHhTMzkwKQpAQCAtMjUxLDYgKzI3MSwyOSBAQAogICAgIGZpCiBmaQogCitpZiB0ZXN0IHgkVEFSR0VUID0geFg4NiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9XSU4zMiB8fCB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFthc3NlbWJsZXIgc3VwcG9ydHMgcGMgcmVsYXRlZCByZWxvY3NdLAorCWxpYmZmaV9jdl9hc194ODZfcGNyZWwsIFsKKwlsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsPXllcworCWVjaG8gJy50ZXh0OyBmb286IG5vcDsgLmRhdGE7IC5sb25nIGZvby0uOyAudGV4dCcgPiBjb25mdGVzdC5zCisJaWYgJENDICRDRkxBR1MgLWMgY29uZnRlc3QucyAyPiYxIHwgZ3JlcCAtaSB3YXJuaW5nID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGxpYmZmaV9jdl9hc194ODZfcGNyZWw9bm8KKwlmaQorCV0pCisgICAgaWYgdGVzdCAieCRsaWJmZmlfY3ZfYXNfeDg2X3BjcmVsIiA9IHh5ZXM7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9BU19YODZfUENSRUwsIDEsCisJCSAgW0RlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuXSkKKyAgICBmaQorZmkKKworY2FzZSAiJHRhcmdldCIgaW4KKyAgICAgKi1hcHBsZS1kYXJ3aW4xMCogfCAqLSotZnJlZWJzZCogfCAqLSotb3BlbmJzZCogfCAqLXBjLXNvbGFyaXMqKQorICAgICAgIEFDX0RFRklORShGRklfTU1BUF9FWEVDX1dSSVQsIDEsCisgICAgICAgICAgICAgICAgIFtDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJldmVydCB0bworICAgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlIG1lYW5zXSkKKyAgICAgOzsKK2VzYWMKKwogQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgLmVoX2ZyYW1lIHNlY3Rpb24gc2hvdWxkIGJlIHJlYWQtb25seV0sCiAgICAgbGliZmZpX2N2X3JvX2VoX2ZyYW1lLCBbCiAJbGliZmZpX2N2X3JvX2VoX2ZyYW1lPW5vCkBAIC0zNjYsNyArNDA5LDcgQEAKIAogQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpdGFyZ2V0Lmg6c3JjLyRUQVJHRVRESVIvZmZpdGFyZ2V0LmgpCiAKLUFDX0NPTkZJR19GSUxFUyhpbmNsdWRlL2ZmaS5oKQorQUNfQ09ORklHX0ZJTEVTKGluY2x1ZGUvTWFrZWZpbGUgaW5jbHVkZS9mZmkuaCBNYWtlZmlsZSB0ZXN0c3VpdGUvTWFrZWZpbGUgbWFuL01ha2VmaWxlIGxpYmZmaS5wYykKIAogQUNfQ09ORklHX0xJTktTKGluY2x1ZGUvZmZpX2NvbW1vbi5oOmluY2x1ZGUvZmZpX2NvbW1vbi5oKQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2E1ZWE0ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcApAQCAtMCwwICsxLDU4NCBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAwNi0xMC0xNS4xOAorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitSdW4gUFJPR1JBTVMgQVJHUyB0byBjb21waWxlIGEgZmlsZSwgZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMKK2FzIHNpZGUtZWZmZWN0cy4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzOgorICBkZXBtb2RlICAgICBEZXBlbmRlbmN5IHRyYWNraW5nIG1vZGUuCisgIHNvdXJjZSAgICAgIFNvdXJjZSBmaWxlIHJlYWQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBvYmplY3QgICAgICBPYmplY3QgZmlsZSBvdXRwdXQgYnkgYFBST0dSQU1TIEFSR1MnLgorICBERVBESVIgICAgICBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgZGVwZW5kZW5jaWVzLgorICBkZXBmaWxlICAgICBEZXBlbmRlbmN5IGZpbGUgdG8gb3V0cHV0LgorICB0bXBkZXBmaWxlICBUZW1wb3JhcnkgZmlsZSB0byB1c2Ugd2hlbiBvdXRwdXRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAteiAiJGRlcG1vZGUiIHx8IHRlc3QgLXogIiRzb3VyY2UiIHx8IHRlc3QgLXogIiRvYmplY3QiOyB0aGVuCisgIGVjaG8gImRlcGNvbXA6IFZhcmlhYmxlcyBzb3VyY2UsIG9iamVjdCBhbmQgZGVwbW9kZSBtdXN0IGJlIHNldCIgMT4mMgorICBleGl0IDEKK2ZpCisKKyMgRGVwZW5kZW5jaWVzIGZvciBzdWIvYmFyLm8gb3Igc3ViL2Jhci5vYmogZ28gaW50byBzdWIvLmRlcHMvYmFyLlBvLgorZGVwZmlsZT0ke2RlcGZpbGUtYGVjaG8gIiRvYmplY3QiIHwKKyAgc2VkICdzfFteXFwvXSokfCcke0RFUERJUi0uZGVwc30nLyZ8O3N8XC5cKFteLl0qXCkkfC5QXDF8O3N8UG9iaiR8UG98J2B9Cit0bXBkZXBmaWxlPSR7dG1wZGVwZmlsZS1gZWNobyAiJGRlcGZpbGUiIHwgc2VkICdzL1wuXChbXi5dKlwpJC8uVFwxLydgfQorCitybSAtZiAiJHRtcGRlcGZpbGUiCisKKyMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQorIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKKyMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKKyMgaGVyZSwgYmVjYXVzZSB0aGlzIGZpbGUgY2FuIG9ubHkgY29udGFpbiBvbmUgY2FzZSBzdGF0ZW1lbnQuCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBocDsgdGhlbgorICAjIEhQIGNvbXBpbGVyIHVzZXMgLU0gYW5kIG5vIGV4dHJhIGFyZy4KKyAgZ2NjZmxhZz0tTQorICBkZXBtb2RlPWdjYworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0gZGFzaFhtc3Rkb3V0OyB0aGVuCisgICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgICBkYXNobWZsYWc9LXhNCisgICBkZXBtb2RlPWRhc2htc3Rkb3V0CitmaQorCitjYXNlICIkZGVwbW9kZSIgaW4KK2djYzMpCisjIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAorIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKKyMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KKyMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCisjIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKKyMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCisjIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7CisgICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OworICAgIGVzYWMKKyAgICBzaGlmdCAjIGZub3JkCisgICAgc2hpZnQgIyAkYXJnCisgIGRvbmUKKyAgIiRAIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCisjIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKKyMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCisjIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCisjIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQorIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgorIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQorIyMgICB0aGFuIHJlbmFtaW5nKS4KKyAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCisgICAgZ2NjZmxhZz0tTUQsCisgIGZpCisgICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisjIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCisgIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAorICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCisjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQorIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCisjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZworIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbworIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8CisjIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcworIyMgd2VsbC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcworICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKKyAgICB0ciAnCisnICcgJyA+PiAkZGVwZmlsZQorICAgIGVjaG8gPj4gJGRlcGZpbGUKKworICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgorICAgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiBcCisgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgPj4gJGRlcGZpbGUKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2FpeCkKKyAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcworICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQorICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCisgICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgorICBzdHJpcHBlZD1gZWNobyAiJG9iamVjdCIgfCBzZWQgJ3MvXCguKlwpXC4uKiQvXDEvJ2AKKyAgdG1wZGVwZmlsZT0iJHN0cmlwcGVkLnUiCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgICIkQCIgLVdjLC1NCisgIGVsc2UKKyAgICAiJEAiIC1NCisgIGZpCisgIHN0YXQ9JD8KKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gOgorICBlbHNlCisgICAgc3RyaXBwZWQ9YGVjaG8gIiRzdHJpcHBlZCIgfCBzZWQgJ3MsXi4qLywsJ2AKKyAgICB0bXBkZXBmaWxlPSIkc3RyaXBwZWQudSIKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgb3V0bmFtZT0iJHN0cmlwcGVkLm8iCisgICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCisgICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCisgICAgc2VkIC1lICJzLF4kb3V0bmFtZTosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgIHNlZCAtZSAicyxeJG91dG5hbWU6IFwoLipcKSQsXDE6LCIgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0CisgICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCisgICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KKyAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBmaQorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2ljYykKKyAgIyBJbnRlbCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgYC1NRCAtTUYgZmlsZScuICBIb3dldmVyIG9uCisgICMgICAgaWNjIC1NRCAtTUYgZm9vLmQgLWMgLW8gc3ViL2Zvby5vIHN1Yi9mb28uYworICAjIElDQyA3LjAgd2lsbCBmaWxsIGZvby5kIHdpdGggc29tZXRoaW5nIGxpa2UKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jCisgICMgICAgZm9vLm86IHN1Yi9mb28uaAorICAjIHdoaWNoIGlzIHdyb25nLiAgV2Ugd2FudDoKKyAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uYworICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5oCisgICMgICAgc3ViL2Zvby5jOgorICAjICAgIHN1Yi9mb28uaDoKKyAgIyBJQ0MgNy4xIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgXCA6CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyAuLi4gXAorICAjICAgICBzdWIvZm9vLmggLi4uIFwKKyAgIyAgICAgLi4uCisKKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcsCisgICMgb3IgYGZvby5vOiBkZXAxLmggZGVwMi5oIFwnLCBvciBgIGRlcDMuaCBkZXA0LmggXCcuCisgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KKyAgc2VkICJzLF5bXjpdKjosJG9iamVjdCA6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgc2VkICdzLF5bXjpdKjogXCguKlwpJCxcMSw7cy9eXFwkLy87L14kL2Q7LzokL2QnIDwgIiR0bXBkZXBmaWxlIiB8CisgICAgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaHAyKQorICAjIFRoZSAiaHAiIHN0YW56YSBhYm92ZSBkb2VzIG5vdCB3b3JrIHdpdGggYUNDIChDKyspIGFuZCBIUCdzIGlhNjQKKyAgIyBjb21waWxlcnMsIHdoaWNoIGhhdmUgaW50ZWdyYXRlZCBwcmVwcm9jZXNzb3JzLiAgVGhlIGNvcnJlY3Qgb3B0aW9uCisgICMgdG8gdXNlIHdpdGggdGhlc2UgaXMgK01ha2VkOyBpdCB3cml0ZXMgZGVwZW5kZW5jaWVzIHRvIGEgZmlsZSBuYW1lZAorICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CisgICMgaGFwcGVucyB0byBiZS4KKyAgIyBNdWNoIG9mIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgdHJ1NjQgY2FzZTsgc2VlIGNvbW1lbnRzIHRoZXJlLgorICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAorICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5kCisgICAgIiRAIiAtV2MsK01ha2VkCisgIGVsc2UKKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgIiRAIiArTWFrZWQKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCBgZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7OyBzL14gKi8vOyBzLyBcXCokLy87IHMvJC86LzsgcDt9JyAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgZWxzZQorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICAjIGVmZmVjdC4gIGBjYyAtTUQgLW8gZm9vLm8gLi4uJyBwdXRzIHRoZSBkZXBlbmRlbmNpZXMgaW50byBgZm9vLm8uZCcuCisgICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICAjIGRlcGVuZGVuY2llcyBpbiBgZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgICMgU3ViZGlyZWN0b3JpZXMgYXJlIHJlc3BlY3RlZC4KKyAgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KKyAgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKworICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgICAjIFdpdGggVHJ1NjQgY2MsIHNoYXJlZCBvYmplY3RzIGNhbiBhbHNvIGJlIHVzZWQgdG8gbWFrZSBhCisgICAgICAjIHN0YXRpYyBsaWJyYXJ5LiAgVGhpcyBtZWNoYW5pc20gaXMgdXNlZCBpbiBsaWJ0b29sIDEuNCBzZXJpZXMgdG8KKyAgICAgICMgaGFuZGxlIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGluIGEgc2luZ2xlIGNvbXBpbGF0aW9uLgorICAgICAgIyBXaXRoIGxpYnRvb2wgMS40LCBkZXBlbmRlbmNpZXMgd2VyZSBvdXRwdXQgaW4gJGRpci5saWJzLyRiYXNlLmxvLmQuCisgICAgICAjCisgICAgICAjIFdpdGggbGlidG9vbCAxLjUgdGhpcyBleGNlcHRpb24gd2FzIHJlbW92ZWQsIGFuZCBsaWJ0b29sIG5vdworICAgICAgIyBnZW5lcmF0ZXMgMiBzZXBhcmF0ZSBvYmplY3RzIGZvciB0aGUgMiBsaWJyYXJpZXMuICBUaGVzZSB0d28KKyAgICAgICMgY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAgICMgb25lIG9mIHRoZSB0d28gY29tcGlsYXRpb25zIGNhbiBiZSBkaXNhYmxlZC4gIFdlIHNob3VsZCBwcmVmZXIKKyAgICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICAgIyB0aGUgZm9ybWVyIHdvdWxkIGNhdXNlIGEgZGlzdGNsZWFuY2hlY2sgcGFuaWMuCisgICAgICB0bXBkZXBmaWxlMT0kZGlyLmxpYnMvJGJhc2UubG8uZCAgICMgbGlidG9vbCAxLjQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLm8uZCAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlND0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICAgIiRAIiAtV2MsLU1ECisgICBlbHNlCisgICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kCisgICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLmQKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIkYmFzZS5kCisgICAgICAiJEAiIC1NRAorICAgZmkKKworICAgc3RhdD0kPworICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgICBlbHNlCisgICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgICAgZXhpdCAkc3RhdAorICAgZmkKKworICAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKKyAgIGRvCisgICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICAgZG9uZQorICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCisgICAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICBlbHNlCisgICAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgZmkKKyAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgIDs7CisKKyNub3NpZGVlZmZlY3QpCisgICMgVGhpcyBjb21tZW50IGFib3ZlIGlzIHVzZWQgYnkgYXV0b21ha2UgdG8gdGVsbCBzaWRlLWVmZmVjdAorICAjIGRlcGVuZGVuY3kgdHJhY2tpbmcgbWVjaGFuaXNtcyBmcm9tIHNsb3dlciBvbmVzLgorCitkYXNobXN0ZG91dCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8uCisgICIkQCIgfHwgZXhpdCAkPworCisgICMgUmVtb3ZlIHRoZSBjYWxsIHRvIExpYnRvb2wuCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciBgOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHRyICcgJyAnCisnIDwgIiR0bXBkZXBmaWxlIiB8IFwKKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2Rhc2hYbXN0ZG91dCkKKyAgIyBUaGlzIGNhc2Ugb25seSBleGlzdHMgdG8gc2F0aXNmeSBkZXBlbmQubTQuICBJdCBpcyBuZXZlciBhY3R1YWxseQorICAjIHJ1biwgYXMgdGhpcyBtb2RlIGlzIHNwZWNpYWxseSByZWNvZ25pemVkIGluIHRoZSBwcmVhbWJsZS4KKyAgZXhpdCAxCisgIDs7CisKK21ha2VkZXBlbmQpCisgICIkQCIgfHwgZXhpdCAkPworICAjIFJlbW92ZSBhbnkgTGlidG9vbCBjYWxsCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHdoaWxlIHRlc3QgJDEgIT0gJy0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisgICMgWCBtYWtlZGVwZW5kCisgIHNoaWZ0CisgIGNsZWFyZWQ9bm8KKyAgZm9yIGFyZyBpbiAiJEAiOyBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGNhc2UgIiRhcmciIGluCisgICAgLUQqfC1JKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKKyAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQorICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KKyAgICAtKnwkb2JqZWN0KQorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgIGVzYWMKKyAgZG9uZQorICBvYmpfc3VmZml4PSJgZWNobyAkb2JqZWN0IHwgc2VkICdzL14uKlwuLy4vJ2AiCisgIHRvdWNoICIkdG1wZGVwZmlsZSIKKyAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCisnIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKKyAgOzsKKworY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIHwKKyAgICBzZWQgLW4gLWUgJy9eIyBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgICAgIC1lICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyB8CisgICAgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAnL14kL2Q7cy9eIC8vO3MvIFxcJC8vO3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3Zpc3VhbGNwcCkKKyAgIyBJbXBvcnRhbnQgbm90ZTogaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGlzIG1vZGUsIGEgY29tcGlsZXIgKm11c3QqCisgICMgYWx3YXlzIHdyaXRlIHRoZSBwcmVwcm9jZXNzZWQgZmlsZSB0byBzdGRvdXQsIHJlZ2FyZGxlc3Mgb2YgLW8sCisgICMgYmVjYXVzZSB3ZSBtdXN0IHVzZSAtbyB3aGVuIHJ1bm5pbmcgbGlidG9vbC4KKyAgIiRAIiB8fCBleGl0ICQ/CisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgIiRhcmciIGluCisgICAgIi1HbSJ8Ii9HbSJ8Ii1HaSJ8Ii9HaSJ8Ii1aSSJ8Ii9aSSIpCisJc2V0IGZub3JkICIkQCIKKwlzaGlmdAorCXNoaWZ0CisJOzsKKyAgICAqKQorCXNldCBmbm9yZCAiJEAiICIkYXJnIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjplY2hvICJgY3lncGF0aCAtdSBcXCJcMVxcImAiOnAnIHwgc29ydCB8IHVuaXEgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKKyAgLiAiJHRtcGRlcGZpbGUiIHwgc2VkICdzJSAlXFwgJWcnIHwgc2VkIC1uICcvXlwoLipcKSQvIHM6OlwxXDo6cCcgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NmE1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkuaW5mbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS50ZXhpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYTViMTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aQpAQCAtMCwwICsxLDU5OCBAQAorXGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCitAYyAlKipzdGFydCBvZiBoZWFkZXIKK0BzZXRmaWxlbmFtZSBsaWJmZmkuaW5mbworQHNldHRpdGxlIGxpYmZmaQorQHNldGNoYXB0ZXJuZXdwYWdlIG9mZgorQGMgJSoqZW5kIG9mIGhlYWRlcgorCitAYyBNZXJnZSB0aGUgc3RhbmRhcmQgaW5kZXhlcyBpbnRvIGEgc2luZ2xlIG9uZS4KK0BzeW5jb2RlaW5kZXggZm4gY3AKK0BzeW5jb2RlaW5kZXggdnIgY3AKK0BzeW5jb2RlaW5kZXgga3kgY3AKK0BzeW5jb2RlaW5kZXggcGcgY3AKK0BzeW5jb2RlaW5kZXggdHAgY3AKKworQGluY2x1ZGUgdmVyc2lvbi50ZXhpCisKK0Bjb3B5aW5nCisKK1RoaXMgbWFudWFsIGlzIGZvciBMaWJmZmksIGEgcG9ydGFibGUgZm9yZWlnbi1mdW5jdGlvbiBpbnRlcmZhY2UKK2xpYnJhcnkuCisKK0NvcHlyaWdodCBAY29weXJpZ2h0e30gMjAwOCwgMjAxMCBSZWQgSGF0LCBJbmMuCisKK0BxdW90YXRpb24KK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAordW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55CitsYXRlciB2ZXJzaW9uLiAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCBgYEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlJycuCisKK0BlbmQgcXVvdGF0aW9uCitAZW5kIGNvcHlpbmcKKworQGRpcmNhdGVnb3J5IERldmVsb3BtZW50CitAZGlyZW50cnkKKyogbGliZmZpOiAobGliZmZpKS4gICAgICAgICAgICAgUG9ydGFibGUgZm9yZWlnbi1mdW5jdGlvbiBpbnRlcmZhY2UgbGlicmFyeS4KK0BlbmQgZGlyZW50cnkKKworQHRpdGxlcGFnZQorQHRpdGxlIExpYmZmaQorQHBhZ2UKK0B2c2tpcCAwcHQgcGx1cyAxZmlsbGwKK0BpbnNlcnRjb3B5aW5nCitAZW5kIHRpdGxlcGFnZQorCisKK0BpZm5vdHRleAorQG5vZGUgVG9wCitAdG9wIGxpYmZmaQorCitAaW5zZXJ0Y29weWluZworCitAbWVudQorKiBJbnRyb2R1Y3Rpb246OiAgICAgICAgICAgICAgICBXaGF0IGlzIGxpYmZmaT8KKyogVXNpbmcgbGliZmZpOjogICAgICAgICAgICAgICAgSG93IHRvIHVzZSBsaWJmZmkuCisqIE1pc3NpbmcgRmVhdHVyZXM6OiAgICAgICAgICAgIFRoaW5ncyBsaWJmZmkgY2FuJ3QgZG8uCisqIEluZGV4OjogICAgICAgICAgICAgICAgICAgICAgIEluZGV4LgorQGVuZCBtZW51CisKK0BlbmQgaWZub3R0ZXgKKworCitAbm9kZSBJbnRyb2R1Y3Rpb24KK0BjaGFwdGVyIFdoYXQgaXMgbGliZmZpPworCitDb21waWxlcnMgZm9yIGhpZ2ggbGV2ZWwgbGFuZ3VhZ2VzIGdlbmVyYXRlIGNvZGUgdGhhdCBmb2xsb3cgY2VydGFpbgorY29udmVudGlvbnMuICBUaGVzZSBjb252ZW50aW9ucyBhcmUgbmVjZXNzYXJ5LCBpbiBwYXJ0LCBmb3Igc2VwYXJhdGUKK2NvbXBpbGF0aW9uIHRvIHdvcmsuICBPbmUgc3VjaCBjb252ZW50aW9uIGlzIHRoZSBAZGZue2NhbGxpbmcKK2NvbnZlbnRpb259LiAgVGhlIGNhbGxpbmcgY29udmVudGlvbiBpcyBhIHNldCBvZiBhc3N1bXB0aW9ucyBtYWRlIGJ5Cit0aGUgY29tcGlsZXIgYWJvdXQgd2hlcmUgZnVuY3Rpb24gYXJndW1lbnRzIHdpbGwgYmUgZm91bmQgb24gZW50cnkgdG8KK2EgZnVuY3Rpb24uICBBIGNhbGxpbmcgY29udmVudGlvbiBhbHNvIHNwZWNpZmllcyB3aGVyZSB0aGUgcmV0dXJuCit2YWx1ZSBmb3IgYSBmdW5jdGlvbiBpcyBmb3VuZC4gIFRoZSBjYWxsaW5nIGNvbnZlbnRpb24gaXMgYWxzbworc29tZXRpbWVzIGNhbGxlZCB0aGUgQGRmbntBQkl9IG9yIEBkZm57QXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZX0uCitAY2luZGV4IGNhbGxpbmcgY29udmVudGlvbgorQGNpbmRleCBBQkkKK0BjaW5kZXggQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorCitTb21lIHByb2dyYW1zIG1heSBub3Qga25vdyBhdCB0aGUgdGltZSBvZiBjb21waWxhdGlvbiB3aGF0IGFyZ3VtZW50cworYXJlIHRvIGJlIHBhc3NlZCB0byBhIGZ1bmN0aW9uLiAgRm9yIGluc3RhbmNlLCBhbiBpbnRlcnByZXRlciBtYXkgYmUKK3RvbGQgYXQgcnVuLXRpbWUgYWJvdXQgdGhlIG51bWJlciBhbmQgdHlwZXMgb2YgYXJndW1lbnRzIHVzZWQgdG8gY2FsbAorYSBnaXZlbiBmdW5jdGlvbi4gIEBzYW1we0xpYmZmaX0gY2FuIGJlIHVzZWQgaW4gc3VjaCBwcm9ncmFtcyB0bworcHJvdmlkZSBhIGJyaWRnZSBmcm9tIHRoZSBpbnRlcnByZXRlciBwcm9ncmFtIHRvIGNvbXBpbGVkIGNvZGUuCisKK1RoZSBAc2FtcHtsaWJmZml9IGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWluZworaW50ZXJmYWNlIHRvIHZhcmlvdXMgY2FsbGluZyBjb252ZW50aW9ucy4gIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1lciB0bworY2FsbCBhbnkgZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRlcmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuCit0aW1lLgorCitAYWNyb255bXtGRkl9IHN0YW5kcyBmb3IgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UuICBBIGZvcmVpZ24KK2Z1bmN0aW9uIGludGVyZmFjZSBpcyB0aGUgcG9wdWxhciBuYW1lIGZvciB0aGUgaW50ZXJmYWNlIHRoYXQgYWxsb3dzCitjb2RlIHdyaXR0ZW4gaW4gb25lIGxhbmd1YWdlIHRvIGNhbGwgY29kZSB3cml0dGVuIGluIGFub3RoZXIgbGFuZ3VhZ2UuCitUaGUgQHNhbXB7bGliZmZpfSBsaWJyYXJ5IHJlYWxseSBvbmx5IHByb3ZpZGVzIHRoZSBsb3dlc3QsIG1hY2hpbmUKK2RlcGVuZGVudCBsYXllciBvZiBhIGZ1bGx5IGZlYXR1cmVkIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlLiAgQQorbGF5ZXIgbXVzdCBleGlzdCBhYm92ZSBAc2FtcHtsaWJmZml9IHRoYXQgaGFuZGxlcyB0eXBlIGNvbnZlcnNpb25zIGZvcgordmFsdWVzIHBhc3NlZCBiZXR3ZWVuIHRoZSB0d28gbGFuZ3VhZ2VzLgorQGNpbmRleCBGRkkKK0BjaW5kZXggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworCitAbm9kZSBVc2luZyBsaWJmZmkKK0BjaGFwdGVyIFVzaW5nIGxpYmZmaQorCitAbWVudQorKiBUaGUgQmFzaWNzOjogICAgICAgICAgICAgICAgICBUaGUgYmFzaWMgbGliZmZpIEFQSS4KKyogU2ltcGxlIEV4YW1wbGU6OiAgICAgICAgICAgICAgQSBzaW1wbGUgZXhhbXBsZS4KKyogVHlwZXM6OiAgICAgICAgICAgICAgICAgICAgICAgbGliZmZpIHR5cGUgZGVzY3JpcHRpb25zLgorKiBNdWx0aXBsZSBBQklzOjogICAgICAgICAgICAgICBEaWZmZXJlbnQgcGFzc2luZyBzdHlsZXMgb24gb25lIHBsYXRmb3JtLgorKiBUaGUgQ2xvc3VyZSBBUEk6OiAgICAgICAgICAgICBXcml0aW5nIGEgZ2VuZXJpYyBmdW5jdGlvbi4KKyogQ2xvc3VyZSBFeGFtcGxlOjogICAgICAgICAgICAgQSBjbG9zdXJlIGV4YW1wbGUuCitAZW5kIG1lbnUKKworCitAbm9kZSBUaGUgQmFzaWNzCitAc2VjdGlvbiBUaGUgQmFzaWNzCisKK0BzYW1we0xpYmZmaX0gYXNzdW1lcyB0aGF0IHlvdSBoYXZlIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24geW91IHdpc2gKK3RvIGNhbGwgYW5kIHRoYXQgeW91IGtub3cgdGhlIG51bWJlciBhbmQgdHlwZXMgb2YgYXJndW1lbnRzIHRvIHBhc3MKK2l0LCBhcyB3ZWxsIGFzIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24uCisKK1RoZSBmaXJzdCB0aGluZyB5b3UgbXVzdCBkbyBpcyBjcmVhdGUgYW4gQGNvZGV7ZmZpX2NpZn0gb2JqZWN0IHRoYXQKK21hdGNoZXMgdGhlIHNpZ25hdHVyZSBvZiB0aGUgZnVuY3Rpb24geW91IHdpc2ggdG8gY2FsbC4gIFRoaXMgaXMgYQorc2VwYXJhdGUgc3RlcCBiZWNhdXNlIGl0IGlzIGNvbW1vbiB0byBtYWtlIG11bHRpcGxlIGNhbGxzIHVzaW5nIGEKK3NpbmdsZSBAY29kZXtmZmlfY2lmfS4gIFRoZSBAZGZue2NpZn0gaW4gQGNvZGV7ZmZpX2NpZn0gc3RhbmRzIGZvcgorQ2FsbCBJbnRlckZhY2UuICBUbyBwcmVwYXJlIGEgY2FsbCBpbnRlcmZhY2Ugb2JqZWN0LCB1c2UgdGhlIGZ1bmN0aW9uCitAY29kZXtmZmlfcHJlcF9jaWZ9LgorQGNpbmRleCBjaWYKKworQGZpbmRleCBmZmlfcHJlcF9jaWYKK0BkZWZ1biBmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZiAoZmZpX2NpZiAqQHZhcntjaWZ9LCBmZmlfYWJpIEB2YXJ7YWJpfSwgdW5zaWduZWQgaW50IEB2YXJ7bmFyZ3N9LCBmZmlfdHlwZSAqQHZhcntydHlwZX0sIGZmaV90eXBlICoqQHZhcnthcmd0eXBlc30pCitUaGlzIGluaXRpYWxpemVzIEB2YXJ7Y2lmfSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIHBhcmFtZXRlcnMuCisKK0B2YXJ7YWJpfSBpcyB0aGUgQUJJIHRvIHVzZTsgbm9ybWFsbHkgQGNvZGV7RkZJX0RFRkFVTFRfQUJJfSBpcyB3aGF0Cit5b3Ugd2FudC4gIEByZWZ7TXVsdGlwbGUgQUJJc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0B2YXJ7bmFyZ3N9IGlzIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHRoYXQgdGhpcyBmdW5jdGlvbiBhY2NlcHRzLgorQHNhbXB7bGliZmZpfSBkb2VzIG5vdCB5ZXQgaGFuZGxlIHZhcmFyZ3MgZnVuY3Rpb25zOyBzZWUgQHJlZntNaXNzaW5nCitGZWF0dXJlc30gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK0B2YXJ7cnR5cGV9IGlzIGEgcG9pbnRlciB0byBhbiBAY29kZXtmZmlfdHlwZX0gc3RydWN0dXJlIHRoYXQKK2Rlc2NyaWJlcyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uLiAgQHhyZWZ7VHlwZXN9LgorCitAdmFye2FyZ3R5cGVzfSBpcyBhIHZlY3RvciBvZiBAY29kZXtmZmlfdHlwZX0gcG9pbnRlcnMuCitAdmFye2FyZ3R5cGVzfSBtdXN0IGhhdmUgQHZhcntuYXJnc30gZWxlbWVudHMuICBJZiBAdmFye25hcmdzfSBpcyAwLAordGhpcyBhcmd1bWVudCBpcyBpZ25vcmVkLgorCitAY29kZXtmZmlfcHJlcF9jaWZ9IHJldHVybnMgYSBAY29kZXtsaWJmZml9IHN0YXR1cyBjb2RlLCBvZiB0eXBlCitAY29kZXtmZmlfc3RhdHVzfS4gIFRoaXMgd2lsbCBiZSBlaXRoZXIgQGNvZGV7RkZJX09LfSBpZiBldmVyeXRoaW5nCit3b3JrZWQgcHJvcGVybHk7IEBjb2Rle0ZGSV9CQURfVFlQRURFRn0gaWYgb25lIG9mIHRoZSBAY29kZXtmZmlfdHlwZX0KK29iamVjdHMgaXMgaW5jb3JyZWN0OyBvciBAY29kZXtGRklfQkFEX0FCSX0gaWYgdGhlIEB2YXJ7YWJpfSBwYXJhbWV0ZXIKK2lzIGludmFsaWQuCitAZW5kIGRlZnVuCisKKworVG8gY2FsbCBhIGZ1bmN0aW9uIHVzaW5nIGFuIGluaXRpYWxpemVkIEBjb2Rle2ZmaV9jaWZ9LCB1c2UgdGhlCitAY29kZXtmZmlfY2FsbH0gZnVuY3Rpb246CisKK0BmaW5kZXggZmZpX2NhbGwKK0BkZWZ1biB2b2lkIGZmaV9jYWxsIChmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKkB2YXJ7Zm59LCB2b2lkICpAdmFye3J2YWx1ZX0sIHZvaWQgKipAdmFye2F2YWx1ZXN9KQorVGhpcyBjYWxscyB0aGUgZnVuY3Rpb24gQHZhcntmbn0gYWNjb3JkaW5nIHRvIHRoZSBkZXNjcmlwdGlvbiBnaXZlbiBpbgorQHZhcntjaWZ9LiAgQHZhcntjaWZ9IG11c3QgaGF2ZSBhbHJlYWR5IGJlZW4gcHJlcGFyZWQgdXNpbmcKK0Bjb2Rle2ZmaV9wcmVwX2NpZn0uCisKK0B2YXJ7cnZhbHVlfSBpcyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBtZW1vcnkgdGhhdCB3aWxsIGhvbGQgdGhlCityZXN1bHQgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGlzIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlCityZXN1bHQgYW5kIG11c3QgYmUgc3VpdGFibHkgYWxpZ25lZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5Cit0byBlbnN1cmUgdGhpcy4gIElmIEB2YXJ7Y2lmfSBkZWNsYXJlcyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zCitAY29kZXt2b2lkfSAodXNpbmcgQGNvZGV7ZmZpX3R5cGVfdm9pZH0pLCB0aGVuIEB2YXJ7cnZhbHVlfSBpcworaWdub3JlZC4gIElmIEB2YXJ7cnZhbHVlfSBpcyBAc2FtcHtOVUxMfSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCitkaXNjYXJkZWQuCisKK0B2YXJ7YXZhbHVlc30gaXMgYSB2ZWN0b3Igb2YgQGNvZGV7dm9pZCAqfSBwb2ludGVycyB0aGF0IHBvaW50IHRvIHRoZQorbWVtb3J5IGxvY2F0aW9ucyBob2xkaW5nIHRoZSBhcmd1bWVudCB2YWx1ZXMgZm9yIGEgY2FsbC4gIElmIEB2YXJ7Y2lmfQorZGVjbGFyZXMgdGhhdCB0aGUgZnVuY3Rpb24gaGFzIG5vIGFyZ3VtZW50cyAoaS5lLiwgQHZhcntuYXJnc30gd2FzIDApLAordGhlbiBAdmFye2F2YWx1ZXN9IGlzIGlnbm9yZWQuCitAZW5kIGRlZnVuCisKKworQG5vZGUgU2ltcGxlIEV4YW1wbGUKK0BzZWN0aW9uIFNpbXBsZSBFeGFtcGxlCisKK0hlcmUgaXMgYSB0cml2aWFsIGV4YW1wbGUgdGhhdCBjYWxscyBAY29kZXtwdXRzfSBhIGZldyB0aW1lcy4KKworQGV4YW1wbGUKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZmaS5oPgorCitpbnQgbWFpbigpCitAeworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbMV07CisgIHZvaWQgKnZhbHVlc1sxXTsKKyAgY2hhciAqczsKKyAgaW50IHJjOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgaW5mbyB2ZWN0b3JzICovICAgIAorICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICZzOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIGlmIChmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisgICAgQHsKKyAgICAgIHMgPSAiSGVsbG8gV29ybGQhIjsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIHB1dHMsICZyYywgdmFsdWVzKTsKKyAgICAgIC8qIHJjIG5vdyBob2xkcyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIHB1dHMgKi8KKyAgICAgIAorICAgICAgLyogdmFsdWVzIGhvbGRzIGEgcG9pbnRlciB0byB0aGUgZnVuY3Rpb24ncyBhcmcsIHNvIHRvIAorICAgICAgICAgY2FsbCBwdXRzKCkgYWdhaW4gYWxsIHdlIG5lZWQgdG8gZG8gaXMgY2hhbmdlIHRoZSAKKyAgICAgICAgIHZhbHVlIG9mIHMgKi8KKyAgICAgIHMgPSAiVGhpcyBpcyBjb29sISI7CisgICAgICBmZmlfY2FsbCgmY2lmLCBwdXRzLCAmcmMsIHZhbHVlcyk7CisgICAgQH0KKyAgCisgIHJldHVybiAwOworQH0KK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIFR5cGVzCitAc2VjdGlvbiBUeXBlcworCitAbWVudQorKiBQcmltaXRpdmUgVHlwZXM6OiAgICAgICAgICAgICBCdWlsdC1pbiB0eXBlcy4KKyogU3RydWN0dXJlczo6ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlIHR5cGVzLgorKiBUeXBlIEV4YW1wbGU6OiAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUgdHlwZSBleGFtcGxlLgorQGVuZCBtZW51CisKK0Bub2RlIFByaW1pdGl2ZSBUeXBlcworQHN1YnNlY3Rpb24gUHJpbWl0aXZlIFR5cGVzCisKK0Bjb2Rle0xpYmZmaX0gcHJvdmlkZXMgYSBudW1iZXIgb2YgYnVpbHQtaW4gdHlwZSBkZXNjcmlwdG9ycyB0aGF0IGNhbgorYmUgdXNlZCB0byBkZXNjcmliZSBhcmd1bWVudCBhbmQgcmV0dXJuIHR5cGVzOgorCitAdGFibGUgQGNvZGUKK0BpdGVtIGZmaV90eXBlX3ZvaWQKK0B0aW5kZXggZmZpX3R5cGVfdm9pZAorVGhlIHR5cGUgQGNvZGV7dm9pZH0uICBUaGlzIGNhbm5vdCBiZSB1c2VkIGZvciBhcmd1bWVudCB0eXBlcywgb25seQorZm9yIHJldHVybiB2YWx1ZXMuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQ4CitAdGluZGV4IGZmaV90eXBlX3VpbnQ4CitBbiB1bnNpZ25lZCwgOC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50OAorQHRpbmRleCBmZmlfdHlwZV9zaW50OAorQSBzaWduZWQsIDgtYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWludDE2CitAdGluZGV4IGZmaV90eXBlX3VpbnQxNgorQW4gdW5zaWduZWQsIDE2LWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3NpbnQxNgorQHRpbmRleCBmZmlfdHlwZV9zaW50MTYKK0Egc2lnbmVkLCAxNi1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV91aW50MzIKK0B0aW5kZXggZmZpX3R5cGVfdWludDMyCitBbiB1bnNpZ25lZCwgMzItYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc2ludDMyCitAdGluZGV4IGZmaV90eXBlX3NpbnQzMgorQSBzaWduZWQsIDMyLWJpdCBpbnRlZ2VyIHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQ2NAorQHRpbmRleCBmZmlfdHlwZV91aW50NjQKK0FuIHVuc2lnbmVkLCA2NC1iaXQgaW50ZWdlciB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50NjQKK0B0aW5kZXggZmZpX3R5cGVfc2ludDY0CitBIHNpZ25lZCwgNjQtYml0IGludGVnZXIgdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfZmxvYXQKK0B0aW5kZXggZmZpX3R5cGVfZmxvYXQKK1RoZSBDIEBjb2Rle2Zsb2F0fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9kb3VibGUKK0B0aW5kZXggZmZpX3R5cGVfZG91YmxlCitUaGUgQyBAY29kZXtkb3VibGV9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VjaGFyCitAdGluZGV4IGZmaV90eXBlX3VjaGFyCitUaGUgQyBAY29kZXt1bnNpZ25lZCBjaGFyfSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zY2hhcgorQHRpbmRleCBmZmlfdHlwZV9zY2hhcgorVGhlIEMgQGNvZGV7c2lnbmVkIGNoYXJ9IHR5cGUuICAoTm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBhbiBleGFjdAorZXF1aXZhbGVudCB0byB0aGUgQyBAY29kZXtjaGFyfSB0eXBlIGluIEBjb2Rle2xpYmZmaX07IG9yZGluYXJpbHkgeW91CitzaG91bGQgZWl0aGVyIHVzZSBAY29kZXtmZmlfdHlwZV9zY2hhcn0gb3IgQGNvZGV7ZmZpX3R5cGVfdWNoYXJ9CitkZXBlbmRpbmcgb24gd2hldGhlciBAY29kZXtjaGFyfSBpcyBzaWduZWQuKQorCitAaXRlbSBmZmlfdHlwZV91c2hvcnQKK0B0aW5kZXggZmZpX3R5cGVfdXNob3J0CitUaGUgQyBAY29kZXt1bnNpZ25lZCBzaG9ydH0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfc3Nob3J0CitAdGluZGV4IGZmaV90eXBlX3NzaG9ydAorVGhlIEMgQGNvZGV7c2hvcnR9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3VpbnQKK0B0aW5kZXggZmZpX3R5cGVfdWludAorVGhlIEMgQGNvZGV7dW5zaWduZWQgaW50fSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9zaW50CitAdGluZGV4IGZmaV90eXBlX3NpbnQKK1RoZSBDIEBjb2Rle2ludH0gdHlwZS4KKworQGl0ZW0gZmZpX3R5cGVfdWxvbmcKK0B0aW5kZXggZmZpX3R5cGVfdWxvbmcKK1RoZSBDIEBjb2Rle3Vuc2lnbmVkIGxvbmd9IHR5cGUuCisKK0BpdGVtIGZmaV90eXBlX3Nsb25nCitAdGluZGV4IGZmaV90eXBlX3Nsb25nCitUaGUgQyBAY29kZXtsb25nfSB0eXBlLgorCitAaXRlbSBmZmlfdHlwZV9sb25nZG91YmxlCitAdGluZGV4IGZmaV90eXBlX2xvbmdkb3VibGUKK09uIHBsYXRmb3JtcyB0aGF0IGhhdmUgYSBDIEBjb2Rle2xvbmcgZG91YmxlfSB0eXBlLCB0aGlzIGlzIGRlZmluZWQuCitPbiBvdGhlciBwbGF0Zm9ybXMsIGl0IGlzIG5vdC4KKworQGl0ZW0gZmZpX3R5cGVfcG9pbnRlcgorQHRpbmRleCBmZmlfdHlwZV9wb2ludGVyCitBIGdlbmVyaWMgQGNvZGV7dm9pZCAqfSBwb2ludGVyLiAgWW91IHNob3VsZCB1c2UgdGhpcyBmb3IgYWxsCitwb2ludGVycywgcmVnYXJkbGVzcyBvZiB0aGVpciByZWFsIHR5cGUuCitAZW5kIHRhYmxlCisKK0VhY2ggb2YgdGhlc2UgaXMgb2YgdHlwZSBAY29kZXtmZmlfdHlwZX0sIHNvIHlvdSBtdXN0IHRha2UgdGhlIGFkZHJlc3MKK3doZW4gcGFzc2luZyB0byBAY29kZXtmZmlfcHJlcF9jaWZ9LgorCisKK0Bub2RlIFN0cnVjdHVyZXMKK0BzdWJzZWN0aW9uIFN0cnVjdHVyZXMKKworQWx0aG91Z2ggQHNhbXB7bGliZmZpfSBoYXMgbm8gc3BlY2lhbCBzdXBwb3J0IGZvciB1bmlvbnMgb3IKK2JpdC1maWVsZHMsIGl0IGlzIHBlcmZlY3RseSBoYXBweSBwYXNzaW5nIHN0cnVjdHVyZXMgYmFjayBhbmQgZm9ydGguCitZb3UgbXVzdCBmaXJzdCBkZXNjcmliZSB0aGUgc3RydWN0dXJlIHRvIEBzYW1we2xpYmZmaX0gYnkgY3JlYXRpbmcgYQorbmV3IEBjb2Rle2ZmaV90eXBlfSBvYmplY3QgZm9yIGl0LgorCitAdGluZGV4IGZmaV90eXBlCitAZGVmdHAgZmZpX3R5cGUKK1RoZSBAY29kZXtmZmlfdHlwZX0gaGFzIHRoZSBmb2xsb3dpbmcgbWVtYmVyczoKK0B0YWJsZSBAY29kZQorQGl0ZW0gc2l6ZV90IHNpemUKK1RoaXMgaXMgc2V0IGJ5IEBjb2Rle2xpYmZmaX07IHlvdSBzaG91bGQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvLgorCitAaXRlbSB1bnNpZ25lZCBzaG9ydCBhbGlnbm1lbnQKK1RoaXMgaXMgc2V0IGJ5IEBjb2Rle2xpYmZmaX07IHlvdSBzaG91bGQgaW5pdGlhbGl6ZSBpdCB0byB6ZXJvLgorCitAaXRlbSB1bnNpZ25lZCBzaG9ydCB0eXBlCitGb3IgYSBzdHJ1Y3R1cmUsIHRoaXMgc2hvdWxkIGJlIHNldCB0byBAY29kZXtGRklfVFlQRV9TVFJVQ1R9LgorCitAaXRlbSBmZmlfdHlwZSAqKmVsZW1lbnRzCitUaGlzIGlzIGEgQHNhbXB7TlVMTH0tdGVybWluYXRlZCBhcnJheSBvZiBwb2ludGVycyB0byBAY29kZXtmZmlfdHlwZX0KK29iamVjdHMuICBUaGVyZSBpcyBvbmUgZWxlbWVudCBwZXIgZmllbGQgb2YgdGhlIHN0cnVjdC4KK0BlbmQgdGFibGUKK0BlbmQgZGVmdHAKKworCitAbm9kZSBUeXBlIEV4YW1wbGUKK0BzdWJzZWN0aW9uIFR5cGUgRXhhbXBsZQorCitUaGUgZm9sbG93aW5nIGV4YW1wbGUgaW5pdGlhbGl6ZXMgYSBAY29kZXtmZmlfdHlwZX0gb2JqZWN0CityZXByZXNlbnRpbmcgdGhlIEBjb2Rle3RtfSBzdHJ1Y3QgZnJvbSBMaW51eCdzIEBmaWxle3RpbWUuaH0uCisKK0hlcmUgaXMgaG93IHRoZSBzdHJ1Y3QgaXMgZGVmaW5lZDoKKworQGV4YW1wbGUKK3N0cnVjdCB0bSBAeworICAgIGludCB0bV9zZWM7CisgICAgaW50IHRtX21pbjsKKyAgICBpbnQgdG1faG91cjsKKyAgICBpbnQgdG1fbWRheTsKKyAgICBpbnQgdG1fbW9uOworICAgIGludCB0bV95ZWFyOworICAgIGludCB0bV93ZGF5OworICAgIGludCB0bV95ZGF5OworICAgIGludCB0bV9pc2RzdDsKKyAgICAvKiBUaG9zZSBhcmUgZm9yIGZ1dHVyZSB1c2UuICovCisgICAgbG9uZyBpbnQgX190bV9nbXRvZmZfXzsKKyAgICBfX2NvbnN0IGNoYXIgKl9fdG1fem9uZV9fOworQH07CitAZW5kIGV4YW1wbGUKKworSGVyZSBpcyB0aGUgY29ycmVzcG9uZGluZyBjb2RlIHRvIGRlc2NyaWJlIHRoaXMgc3RydWN0IHRvCitAY29kZXtsaWJmZml9OgorCitAZXhhbXBsZQorICAgIEB7CisgICAgICBmZmlfdHlwZSB0bV90eXBlOworICAgICAgZmZpX3R5cGUgKnRtX3R5cGVfZWxlbWVudHNbMTJdOworICAgICAgaW50IGk7CisKKyAgICAgIHRtX3R5cGUuc2l6ZSA9IHRtX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgICAgIHRtX3R5cGUuZWxlbWVudHMgPSAmdG1fdHlwZV9lbGVtZW50czsKKyAgICAKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisgICAgICAgICAgdG1fdHlwZV9lbGVtZW50c1tpXSA9ICZmZmlfdHlwZV9zaW50OworCisgICAgICB0bV90eXBlX2VsZW1lbnRzWzldID0gJmZmaV90eXBlX3Nsb25nOworICAgICAgdG1fdHlwZV9lbGVtZW50c1sxMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKyAgICAgIHRtX3R5cGVfZWxlbWVudHNbMTFdID0gTlVMTDsKKworICAgICAgLyogdG1fdHlwZSBjYW4gbm93IGJlIHVzZWQgdG8gcmVwcmVzZW50IHRtIGFyZ3VtZW50IHR5cGVzIGFuZAorCSByZXR1cm4gdHlwZXMgZm9yIGZmaV9wcmVwX2NpZigpICovCisgICAgQH0KK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIE11bHRpcGxlIEFCSXMKK0BzZWN0aW9uIE11bHRpcGxlIEFCSXMKKworQSBnaXZlbiBwbGF0Zm9ybSBtYXkgcHJvdmlkZSBtdWx0aXBsZSBkaWZmZXJlbnQgQUJJcyBhdCBvbmNlLiAgRm9yCitpbnN0YW5jZSwgdGhlIHg4NiBwbGF0Zm9ybSBoYXMgYm90aCBAc2FtcHtzdGRjYWxsfSBhbmQgQHNhbXB7ZmFzdGNhbGx9CitmdW5jdGlvbnMuCisKK0Bjb2Rle2xpYmZmaX0gcHJvdmlkZXMgc29tZSBzdXBwb3J0IGZvciB0aGlzLiAgSG93ZXZlciwgdGhpcyBpcworbmVjZXNzYXJpbHkgcGxhdGZvcm0tc3BlY2lmaWMuCisKK0BjIEZJWE1FOiBkb2N1bWVudCB0aGUgcGxhdGZvcm1zCisKK0Bub2RlIFRoZSBDbG9zdXJlIEFQSQorQHNlY3Rpb24gVGhlIENsb3N1cmUgQVBJCisKK0Bjb2Rle2xpYmZmaX0gYWxzbyBwcm92aWRlcyBhIHdheSB0byB3cml0ZSBhIGdlbmVyaWMgZnVuY3Rpb24gLS0gYQorZnVuY3Rpb24gdGhhdCBjYW4gYWNjZXB0IGFuZCBkZWNvZGUgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cy4KK1RoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHdyaXRpbmcgYW4gaW50ZXJwcmV0ZXIsIG9yIHRvIHByb3ZpZGUgd3JhcHBlcnMKK2ZvciBhcmJpdHJhcnkgZnVuY3Rpb25zLgorCitUaGlzIGZhY2lsaXR5IGlzIGNhbGxlZCB0aGUgQGRmbntjbG9zdXJlIEFQSX0uICBDbG9zdXJlcyBhcmUgbm90CitzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtczsgeW91IGNhbiBjaGVjayB0aGUgQGNvZGV7RkZJX0NMT1NVUkVTfQorZGVmaW5lIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZXkgYXJlIHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudAorcGxhdGZvcm0uCitAY2luZGV4IGNsb3N1cmVzCitAY2luZGV4IGNsb3N1cmUgQVBJCitAZmluZGV4IEZGSV9DTE9TVVJFUworCitCZWNhdXNlIGNsb3N1cmVzIHdvcmsgYnkgYXNzZW1ibGluZyBhIHRpbnkgZnVuY3Rpb24gYXQgcnVudGltZSwgdGhleQorcmVxdWlyZSBzcGVjaWFsIGFsbG9jYXRpb24gb24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBhIG5vbi1leGVjdXRhYmxlCitoZWFwLiAgTWVtb3J5IG1hbmFnZW1lbnQgZm9yIGNsb3N1cmVzIGlzIGhhbmRsZWQgYnkgYSBwYWlyIG9mCitmdW5jdGlvbnM6CisKK0BmaW5kZXggZmZpX2Nsb3N1cmVfYWxsb2NhCitAZGVmdW4gdm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBAdmFye3NpemV9LCB2b2lkICoqQHZhcntjb2RlfSkKK0FsbG9jYXRlIGEgY2h1bmsgb2YgbWVtb3J5IGhvbGRpbmcgQHZhcntzaXplfSBieXRlcy4gIFRoaXMgcmV0dXJucyBhCitwb2ludGVyIHRvIHRoZSB3cml0YWJsZSBhZGRyZXNzLCBhbmQgc2V0cyAqQHZhcntjb2RlfSB0byB0aGUKK2NvcnJlc3BvbmRpbmcgZXhlY3V0YWJsZSBhZGRyZXNzLgorCitAdmFye3NpemV9IHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGhvbGQgYSBAY29kZXtmZmlfY2xvc3VyZX0gb2JqZWN0LgorQGVuZCBkZWZ1bgorCitAZmluZGV4IGZmaV9jbG9zdXJlX2ZyZWUKK0BkZWZ1biB2b2lkIGZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQgKkB2YXJ7d3JpdGFibGV9KQorRnJlZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIEBjb2Rle2ZmaV9jbG9zdXJlX2FsbG9jfS4gIFRoZSBhcmd1bWVudCBpcwordGhlIHdyaXRhYmxlIGFkZHJlc3MgdGhhdCB3YXMgcmV0dXJuZWQuCitAZW5kIGRlZnVuCisKKworT25jZSB5b3UgaGF2ZSBhbGxvY2F0ZWQgdGhlIG1lbW9yeSBmb3IgYSBjbG9zdXJlLCB5b3UgbXVzdCBjb25zdHJ1Y3QgYQorQGNvZGV7ZmZpX2NpZn0gZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIEZpbmFsbHkgeW91IGNhbiBwcmVwYXJlCit0aGUgY2xvc3VyZSBmdW5jdGlvbjoKKworQGZpbmRleCBmZmlfcHJlcF9jbG9zdXJlX2xvYworQGRlZnVuIGZmaV9zdGF0dXMgZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICpAdmFye2Nsb3N1cmV9LCBmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKCpAdmFye2Z1bn0pIChmZmlfY2lmICpAdmFye2NpZn0sIHZvaWQgKkB2YXJ7cmV0fSwgdm9pZCAqKkB2YXJ7YXJnc30sIHZvaWQgKkB2YXJ7dXNlcl9kYXRhfSksIHZvaWQgKkB2YXJ7dXNlcl9kYXRhfSwgdm9pZCAqQHZhcntjb2RlbG9jfSkKK1ByZXBhcmUgYSBjbG9zdXJlIGZ1bmN0aW9uLgorCitAdmFye2Nsb3N1cmV9IGlzIHRoZSBhZGRyZXNzIG9mIGEgQGNvZGV7ZmZpX2Nsb3N1cmV9IG9iamVjdDsgdGhpcyBpcwordGhlIHdyaXRhYmxlIGFkZHJlc3MgcmV0dXJuZWQgYnkgQGNvZGV7ZmZpX2Nsb3N1cmVfYWxsb2N9LgorCitAdmFye2NpZn0gaXMgdGhlIEBjb2Rle2ZmaV9jaWZ9IGRlc2NyaWJpbmcgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCisKK0B2YXJ7dXNlcl9kYXRhfSBpcyBhbiBhcmJpdHJhcnkgZGF0dW0gdGhhdCBpcyBwYXNzZWQsIHVuaW50ZXJwcmV0ZWQsCit0byB5b3VyIGNsb3N1cmUgZnVuY3Rpb24uCisKK0B2YXJ7Y29kZWxvY30gaXMgdGhlIGV4ZWN1dGFibGUgYWRkcmVzcyByZXR1cm5lZCBieQorQGNvZGV7ZmZpX2Nsb3N1cmVfYWxsb2N9LgorCitAdmFye2Z1bn0gaXMgdGhlIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGNsb3N1cmUgaXMKK2ludm9rZWQuICBJdCBpcyBjYWxsZWQgd2l0aCB0aGUgYXJndW1lbnRzOgorQHRhYmxlIEB2YXIKK0BpdGVtIGNpZgorVGhlIEBjb2Rle2ZmaV9jaWZ9IHBhc3NlZCB0byBAY29kZXtmZmlfcHJlcF9jbG9zdXJlX2xvY30uCisKK0BpdGVtIHJldAorQSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgdXNlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlLgorQHZhcntmdW59IG11c3QgZmlsbCB0aGlzLCB1bmxlc3MgdGhlIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHJldHVybmluZworQGNvZGV7dm9pZH0uCitAYyBGSVhNRTogaXMgdGhpcyBOVUxMIGZvciB2b2lkLXJldHVybmluZyBmdW5jdGlvbnM/CisKK0BpdGVtIGFyZ3MKK0EgdmVjdG9yIG9mIHBvaW50ZXJzIHRvIG1lbW9yeSBob2xkaW5nIHRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLgorCitAaXRlbSB1c2VyX2RhdGEKK1RoZSBzYW1lIEB2YXJ7dXNlcl9kYXRhfSB0aGF0IHdhcyBwYXNzZWQgdG8KK0Bjb2Rle2ZmaV9wcmVwX2Nsb3N1cmVfbG9jfS4KK0BlbmQgdGFibGUKKworQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZV9sb2N9IHdpbGwgcmV0dXJuIEBjb2Rle0ZGSV9PS30gaWYgZXZlcnl0aGluZword2VudCBvaywgYW5kIHNvbWV0aGluZyBlbHNlIG9uIGVycm9yLgorQGMgRklYTUU6IHdoYXQ/CisKK0FmdGVyIGNhbGxpbmcgQGNvZGV7ZmZpX3ByZXBfY2xvc3VyZV9sb2N9LCB5b3UgY2FuIGNhc3QgQHZhcntjb2RlbG9jfQordG8gdGhlIGFwcHJvcHJpYXRlIHBvaW50ZXItdG8tZnVuY3Rpb24gdHlwZS4KK0BlbmQgZGVmdW4KKworWW91IG1heSBzZWUgb2xkIGNvZGUgcmVmZXJyaW5nIHRvIEBjb2Rle2ZmaV9wcmVwX2Nsb3N1cmV9LiAgVGhpcworZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgYXMgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmVlZCBmb3Igc2VwYXJhdGUKK3dyaXRhYmxlIGFuZCBleGVjdXRhYmxlIGFkZHJlc3Nlcy4KKworQG5vZGUgQ2xvc3VyZSBFeGFtcGxlCitAc2VjdGlvbiBDbG9zdXJlIEV4YW1wbGUKKworQSB0cml2aWFsIGV4YW1wbGUgdGhhdCBjcmVhdGVzIGEgbmV3IEBjb2Rle3B1dHN9IGJ5IGJpbmRpbmcgCitAY29kZXtmcHV0c30gd2l0aCBAY29kZXtzdGRpbn0uCisKK0BleGFtcGxlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworLyogQWN0cyBsaWtlIHB1dHMgd2l0aCB0aGUgZmlsZSBnaXZlbiBhdCB0aW1lIG9mIGVuY2xvc3VyZS4gKi8KK3ZvaWQgcHV0c19iaW5kaW5nKGZmaV9jaWYgKmNpZiwgdW5zaWduZWQgaW50ICpyZXQsIHZvaWQqIGFyZ3NbXSwgCisgICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0pCitAeworICAqcmV0ID0gZnB1dHMoKihjaGFyICoqKWFyZ3NbMF0sIHN0cmVhbSk7CitAfQorCitpbnQgbWFpbigpCitAeworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbMV07CisgIGZmaV9jbG9zdXJlICpjbG9zdXJlOworCisgIGludCAoKmJvdW5kX3B1dHMpKGNoYXIgKik7CisgIGludCByYzsKKyAgCisgIC8qIEFsbG9jYXRlIGNsb3N1cmUgYW5kIGJvdW5kX3B1dHMgKi8KKyAgY2xvc3VyZSA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZib3VuZF9wdXRzKTsKKworICBpZiAoY2xvc3VyZSkKKyAgICBAeworICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgYXJndW1lbnQgaW5mbyB2ZWN0b3JzICovCisgICAgICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICAgICAgaWYgKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisgICAgICAgICAgICAgICAgICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisgICAgICAgIEB7CisgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2xvc3VyZSwgc2V0dGluZyBzdHJlYW0gdG8gc3Rkb3V0ICovCisgICAgICAgICAgaWYgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKGNsb3N1cmUsICZjaWYsIHB1dHNfYmluZGluZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dCwgYm91bmRfcHV0cykgPT0gRkZJX09LKQorICAgICAgICAgICAgQHsKKyAgICAgICAgICAgICAgcmMgPSBib3VuZF9wdXRzKCJIZWxsbyBXb3JsZCEiKTsKKyAgICAgICAgICAgICAgLyogcmMgbm93IGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gZnB1dHMgKi8KKyAgICAgICAgICAgIEB9CisgICAgICAgIEB9CisgICAgQH0KKworICAvKiBEZWFsbG9jYXRlIGJvdGggY2xvc3VyZSwgYW5kIGJvdW5kX3B1dHMgKi8KKyAgZmZpX2Nsb3N1cmVfZnJlZShjbG9zdXJlKTsKKworICByZXR1cm4gMDsKK0B9CisKK0BlbmQgZXhhbXBsZQorCisKK0Bub2RlIE1pc3NpbmcgRmVhdHVyZXMKK0BjaGFwdGVyIE1pc3NpbmcgRmVhdHVyZXMKKworQGNvZGV7bGliZmZpfSBpcyBtaXNzaW5nIGEgZmV3IGZlYXR1cmVzLiAgV2Ugd2VsY29tZSBwYXRjaGVzIHRvIGFkZAorc3VwcG9ydCBmb3IgdGhlc2UuCisKK0BpdGVtaXplIEBidWxsZXQKK0BpdGVtCitUaGVyZSBpcyBubyBzdXBwb3J0IGZvciBjYWxsaW5nIHZhcmFyZ3MgZnVuY3Rpb25zLiAgVGhpcyBtYXkgd29yayBvbgorc29tZSBwbGF0Zm9ybXMsIGRlcGVuZGluZyBvbiBob3cgdGhlIEFCSSBpcyBkZWZpbmVkLCBidXQgaXQgaXMgbm90CityZWxpYWJsZS4KKworQGl0ZW0KK1RoZXJlIGlzIG5vIHN1cHBvcnQgZm9yIGJpdCBmaWVsZHMgaW4gc3RydWN0dXJlcy4KKworQGl0ZW0KK1RoZSBjbG9zdXJlIEFQSSBpcworCitAYyBGSVhNRTogLi4uCisKK0BpdGVtCitUaGUgYGByYXcnJyBBUEkgaXMgdW5kb2N1bWVudGVkLgorQGMgYXJndW1lbnQgcHJvbW90aW9uPworQGMgdW5pb25zPworQGMgYW55dGhpbmcgZWxzZT8KK0BlbmQgaXRlbWl6ZQorCisKK0Bub2RlIEluZGV4CitAdW5udW1iZXJlZCBJbmRleAorCitAcHJpbnRpbmRleCBjcAorCitAYnllCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkMGI3OQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQpAQCAtMCwwICsxLDQgQEAKK0BzZXQgVVBEQVRFRCAxNCBGZWJydWFyeSAyMDA4CitAc2V0IFVQREFURUQtTU9OVEggRmVicnVhcnkgMjAwOAorQHNldCBFRElUSU9OIDMuMC44CitAc2V0IFZFUlNJT04gMy4wLjgKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQwYjc5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCkBAIC0wLDAgKzEsNCBAQAorQHNldCBVUERBVEVEIDE0IEZlYnJ1YXJ5IDIwMDgKK0BzZXQgVVBEQVRFRC1NT05USCBGZWJydWFyeSAyMDA4CitAc2V0IEVESVRJT04gMy4wLjgKK0BzZXQgVkVSU0lPTiAzLjAuOApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KaW5kZXggMDdmYTUzNy4uZTAzYmJmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCkBAIC0xLDUgKzEsOCBAQAogLyogZmZpY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCiAKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKwogLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAogICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCiAgICAqLwpAQCAtMTQsNiArMTcsOSBAQAogLyogRGVmaW5lIHRoaXMgaWYgeW91IHdhbnQgZXh0cmEgZGVidWdnaW5nLiAqLwogI3VuZGVmIEZGSV9ERUJVRwogCisvKiBDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJldmVydCB0byBhbHRlcm5hdGl2ZSBtZWFucyAqLworI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJVAorCiAvKiBEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhlIHJhdyBBUEkuICovCiAjdW5kZWYgRkZJX05PX1JBV19BUEkKIApAQCAtMzcsNiArNDMsOSBAQAogICAgKi8KICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMCiAKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuICovCisjdW5kZWYgSEFWRV9BU19YODZfUENSRUwKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0RMRkNOX0gKIApAQCAtOTQsNiArMTAzLDEwIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VOSVNURF9ICiAKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI3VuZGVmIExUX09CSkRJUgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIEMgY29tcGlsZXIgZG9lc24ndCBhY2NlcHQgLWMgYW5kIC1vIHRvZ2V0aGVyLiAqLwogI3VuZGVmIE5PX01JTlVTX0NfTUlOVVNfTwogCkBAIC0xMTIsNiArMTI1LDkgQEAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KICN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKIAorLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyN1bmRlZiBQQUNLQUdFX1VSTAorCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgogCkBAIC0xMzksOSArMTU1LDE3IEBACiAvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCiAjdW5kZWYgVkVSU0lPTgogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlCi0gICBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQgVkFYKS4gKi8KLSN1bmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qIERlZmluZSBXT1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgZW5kaWYKKyNlbmRpZgogCiAKICNpZmRlZiBIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgppbmRleCAxMDI5MzI3Li4yN2M5NzFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgpAQCAtMSwxMiArMSwxNCBAQAogZmZpX3NvdXJjZXMgPSAiIiIKIHNyYy9wcmVwX2NpZi5jCitzcmMvY2xvc3VyZXMuYworc3JjL2RsbWFsbG9jLmMKICIiIi5zcGxpdCgpCiAKIGZmaV9wbGF0Zm9ybXMgPSB7CiAgICAgJ01JUFNfSVJJWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnLCAnc3JjL21pcHMvbjMyLlMnXSwKICAgICAnTUlQU19MSU5VWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnXSwKICAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCi0gICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCisgICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvZnJlZWJzZC5TJ10sCiAgICAgJ1g4Nl9XSU4zMic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3dpbjMyLlMnXSwKICAgICAnU1BBUkMnOiBbJ3NyYy9zcGFyYy9mZmkuYycsICdzcmMvc3BhcmMvdjguUycsICdzcmMvc3BhcmMvdjkuUyddLAogICAgICdBTFBIQSc6IFsnc3JjL2FscGhhL2ZmaS5jJywgJ3NyYy9hbHBoYS9vc2YuUyddLApAQCAtMjgsOCArMzAsNiBAQAogICAgICdQQV9IUFVYJzogWydzcmMvcGEvaHB1eDMyLlMnLCAnc3JjL3BhL2ZmaS5jJ10sCiB9CiAKLWZmaV9zcmNkaXIgPSAnQHNyY2RpckAnCiBmZmlfc291cmNlcyArPSBmZmlfcGxhdGZvcm1zWydAVEFSR0VUQCddCi1mZmlfc291cmNlcyA9IFtvcy5wYXRoLmpvaW4oJ0BzcmNkaXJAJywgZikgZm9yIGYgaW4gZmZpX3NvdXJjZXNdCiAKIGZmaV9jZmxhZ3MgPSAnQENGTEFHU0AnCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuYW0KaW5kZXggNmI3MTMxOC4uZmQyODAyNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmFtCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5hbQpAQCAtNiw0ICs2LDQgQEAKIEVYVFJBX0RJU1Q9ZmZpLmguaW4gZmZpX2NvbW1vbi5oCiAKIGluY2x1ZGVzZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFX05BTUVALUBQQUNLQUdFX1ZFUlNJT05AL2luY2x1ZGUKLW5vZGlzdF9pbmNsdWRlc19IRUFERVJTID0gZmZpLmggZmZpdGFyZ2V0LmggCitub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyA9IGZmaS5oIGZmaXRhcmdldC5oCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KaW5kZXggZjBjOWZlMi4uMTM2ZjM2YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtMSw4ICsxLDkgQEAKLSMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTAgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAogIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4KICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KQEAgLTE2LDggKzE3LDkgQEAKIAogVlBBVEggPSBAc3JjZGlyQAogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACi1wa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAogYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAogaW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKIGluc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKQEAgLTQxLDkgKzQzLDEwIEBACiAJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKIGFtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCiAJJChBQ0xPQ0FMX000KQotbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKIENPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKIENPTkZJR19DTEVBTl9GSUxFUyA9IGZmaS5oIGZmaXRhcmdldC5oCitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQogYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CkBAIC01MSw5ICs1NCwyMyBAQAogICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCiAgICAgKikgZj0kJHA7OyBcCiAgIGVzYWM7Ci1hbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxfbWF4ID0gNDAKK2FtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCisgIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKK2FtX19ub2Jhc2Vfc3RyaXAgPSBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgorYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAorICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAorICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCisgICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAorICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAorICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKK2FtX19iYXNlX2xpc3QgPSBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCisgIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiCi1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTX0lOU1RBTEwgPSAkKElOU1RBTExfSEVBREVSKQogSEVBREVSUyA9ICQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpCiBFVEFHUyA9IGV0YWdzCiBDVEFHUyA9IGN0YWdzCkBAIC03NSwyMSArOTIsMTcgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWFggPSBAQ1hYQAotQ1hYQ1BQID0gQENYWENQUEAKLUNYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKLUNYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACi1FQ0hPID0gQEVDSE9ACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKIEVDSE9fQyA9IEBFQ0hPX0NACiBFQ0hPX04gPSBARUNIT19OQAogRUNIT19UID0gQEVDSE9fVEAKIEVHUkVQID0gQEVHUkVQQAogRVhFRVhUID0gQEVYRUVYVEAKLUY3NyA9IEBGNzdACi1GRkxBR1MgPSBARkZMQUdTQAorRkdSRVAgPSBARkdSRVBACiBHUkVQID0gQEdSRVBACiBIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACiBJTlNUQUxMID0gQElOU1RBTExACkBAIC05NywxNiArMTEwLDIzIEBACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAogSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACiBJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTEQgPSBATERACiBMREZMQUdTID0gQExERkxBR1NACiBMSUJPQkpTID0gQExJQk9CSlNACiBMSUJTID0gQExJQlNACiBMSUJUT09MID0gQExJQlRPT0xACitMSVBPID0gQExJUE9ACiBMTl9TID0gQExOX1NACiBMVExJQk9CSlMgPSBATFRMSUJPQkpTQAogTUFJTlQgPSBATUFJTlRACiBNQUtFSU5GTyA9IEBNQUtFSU5GT0AKIE1LRElSX1AgPSBATUtESVJfUEAKK05NID0gQE5NQAorTk1FRElUID0gQE5NRURJVEAKK09CSkRVTVAgPSBAT0JKRFVNUEAKIE9CSkVYVCA9IEBPQkpFWFRACitPVE9PTCA9IEBPVE9PTEAKK09UT09MNjQgPSBAT1RPT0w2NEAKIFBBQ0tBR0UgPSBAUEFDS0FHRUAKIFBBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAogUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKQEAgLTEyNyw4ICsxNDcsNyBAQAogYWJzX3RvcF9idWlsZGRpciA9IEBhYnNfdG9wX2J1aWxkZGlyQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9DQyA9IEBhY19jdF9DQ0AKLWFjX2N0X0NYWCA9IEBhY19jdF9DWFhACi1hY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAogYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKQEAgLTE1OSw2ICsxNzgsNyBAQAogbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAogbG9jYWxlZGlyID0gQGxvY2FsZWRpckAKIGxvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK2x0X0VDSE8gPSBAbHRfRUNIT0AKIG1hbmRpciA9IEBtYW5kaXJACiBta2Rpcl9wID0gQG1rZGlyX3BACiBvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACkBAIC0xNzcsMTMgKzE5NywxNCBAQAogdGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAogdG9vbGV4ZWNkaXIgPSBAdG9vbGV4ZWNkaXJACiB0b29sZXhlY2xpYmRpciA9IEB0b29sZXhlY2xpYmRpckAKK3RvcF9idWlsZF9wcmVmaXggPSBAdG9wX2J1aWxkX3ByZWZpeEAKIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACiB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbgogRElTVENMRUFORklMRVMgPSBmZml0YXJnZXQuaAogRVhUUkFfRElTVCA9IGZmaS5oLmluIGZmaV9jb21tb24uaAogaW5jbHVkZXNkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VfTkFNRUAtQFBBQ0tBR0VfVkVSU0lPTkAvaW5jbHVkZQotbm9kaXN0X2luY2x1ZGVzX0hFQURFUlMgPSBmZmkuaCBmZml0YXJnZXQuaCAKK25vZGlzdF9pbmNsdWRlc19IRUFERVJTID0gZmZpLmggZmZpdGFyZ2V0LmgKIGFsbDogYWxsLWFtCiAKIC5TVUZGSVhFUzoKQEAgLTE5MSwxNCArMjEyLDE0IEBACiAJQGZvciBkZXAgaW4gJD87IGRvIFwKIAkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAogCSAgICAqJCRkZXAqKSBcCi0JICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKLQkJJiYgZXhpdCAwOyBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAogCSAgICAgIGV4aXQgMTs7IFwKIAkgIGVzYWM7IFwKIAlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduICBpbmNsdWRlL01ha2VmaWxlJzsgXAotCWNkICQodG9wX3NyY2RpcikgJiYgXAotCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduICBpbmNsdWRlL01ha2VmaWxlCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluY2x1ZGUvTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1mb3JlaWduIGluY2x1ZGUvTWFrZWZpbGUKIC5QUkVDSU9VUzogTWFrZWZpbGUKIE1ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKIAlAY2FzZSAnJD8nIGluIFwKQEAgLTIxNiw2ICsyMzcsNyBAQAogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAogJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCiAJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgogZmZpLmg6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9mZmkuaC5pbgogCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRACiAKQEAgLTIyNyw2NSArMjQ5LDcyIEBACiBpbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlM6ICQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpCiAJQCQoTk9STUFMX0lOU1RBTEwpCiAJdGVzdCAteiAiJChpbmNsdWRlc2RpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKSIKLQlAbGlzdD0nJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwlAbGlzdD0nJChub2Rpc3RfaW5jbHVkZXNfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVzZGlyKSIgfHwgbGlzdD07IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKIAkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBmPSQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQobm9kaXN0X2luY2x1ZGVzSEVBREVSU19JTlNUQUxMKSAnJCRkJCRwJyAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiciOyBcCi0JICAkKG5vZGlzdF9pbmNsdWRlc0hFQURFUlNfSU5TVEFMTCkgIiQkZCQkcCIgIiQoREVTVERJUikkKGluY2x1ZGVzZGlyKS8kJGYiOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9IRUFERVIpICQkZmlsZXMgJyQoREVTVERJUikkKGluY2x1ZGVzZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmNsdWRlc2RpcikiIHx8IGV4aXQgJCQ/OyBcCiAJZG9uZQogCiB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUzoKIAlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKG5vZGlzdF9pbmNsdWRlc19IRUFERVJTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKLQkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiciOyBcCi0JICBybSAtZiAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpLyQkZiI7IFwKLQlkb25lCisJQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlc2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwl0ZXN0IC1uICIkJGZpbGVzIiB8fCBleGl0IDA7IFwKKwllY2hvICIgKCBjZCAnJChERVNURElSKSQoaW5jbHVkZXNkaXIpJyAmJiBybSAtZiIgJCRmaWxlcyAiKSI7IFwKKwljZCAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpIiAmJiBybSAtZiAkJGZpbGVzCiAKIElEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCiAJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKIAl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAogCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKIAkgIGRvbmUgfCBcCi0JICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKLQkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKKwkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKIAlta2lkIC1mSUQgJCR1bmlxdWUKIHRhZ3M6IFRBR1MKIAogVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAogCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQl0YWdzPTsgXAorCXNldCB4OyBcCiAJaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisJICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCisJc2hpZnQ7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCQqJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAogCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAotCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAotCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwkgIGlmIHRlc3QgJCQjIC1ndCAwOyB0aGVuIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICIkJEAiICQkdW5pcXVlOyBcCisJICBlbHNlIFwKKwkgICAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAgICQkdW5pcXVlOyBcCisJICBmaTsgXAogCWZpCiBjdGFnczogQ1RBR1MKIENUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCiAJCSQoVEFHU19GSUxFUykgJChMSVNQKQotCXRhZ3M9OyBcCi0JaGVyZT1gcHdkYDsgXAogCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAogCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCiAJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAogCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAotCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR0YWdzICQkdW5pcXVlCisJICAgICAkJHVuaXF1ZQogCiBHVEFHUzoKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAotCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCi0JICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgogCiBkaXN0Y2xlYW4tdGFnczoKIAktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncwpAQCAtMzA2LDEzICszMzUsMTcgQEAKIAkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKIAkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCiAJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCi0JICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAotCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKIAkgICAgZmk7IFwKLQkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKIAkgIGVsc2UgXAotCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKLQkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCiAJICAgIHx8IGV4aXQgMTsgXAogCSAgZmk7IFwKIAlkb25lCkBAIC0zNDMsNiArMzc2LDcgQEAKIAogZGlzdGNsZWFuLWdlbmVyaWM6CiAJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCiAJLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQogCiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CkBAIC0zNjIsNiArMzk2LDggQEAKIAogaHRtbDogaHRtbC1hbQogCitodG1sLWFtOgorCiBpbmZvOiBpbmZvLWFtCiAKIGluZm8tYW06CkBAIC0zNzAsMTggKzQwNiwyOCBAQAogCiBpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KIAoraW5zdGFsbC1kdmktYW06CisKIGluc3RhbGwtZXhlYy1hbToKIAogaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KIAoraW5zdGFsbC1odG1sLWFtOgorCiBpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQogCitpbnN0YWxsLWluZm8tYW06CisKIGluc3RhbGwtbWFuOgogCiBpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KIAoraW5zdGFsbC1wZGYtYW06CisKIGluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KIAoraW5zdGFsbC1wcy1hbToKKwogaW5zdGFsbGNoZWNrLWFtOgogCiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCkBAIC00MTcsNiArNDYzLDcgQEAKIAltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCiAJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTCiAKKwogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgogLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCmluZGV4IDdkZjNiMDYuLmRmN2QyY2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KQEAgLTU3LDkgKzU3LDcgQEAKICNlbmRpZgogCiAvKiBTcGVjaWZ5IHdoaWNoIGFyY2hpdGVjdHVyZSBsaWJmZmkgaXMgY29uZmlndXJlZCBmb3IuICovCi0jaWZuZGVmIEBUQVJHRVRACiAjZGVmaW5lIEBUQVJHRVRACi0jZW5kaWYKIAogLyogLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNjcsNiArNjUsMTAgQEAKIAogI2lmbmRlZiBMSUJGRklfQVNNCiAKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBfX2F0dHJpYnV0ZV9fKFgpCisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCkBAIC0yNDksMTIgKzI1MSwxOSBAQAogCiAjaWYgRkZJX0NMT1NVUkVTCiAKKyNpZmRlZiBfTVNDX1ZFUgorX19kZWNsc3BlYyhhbGlnbig4KSkKKyNlbmRpZgogdHlwZWRlZiBzdHJ1Y3QgewogICBjaGFyIHRyYW1wW0ZGSV9UUkFNUE9MSU5FX1NJWkVdOwogICBmZmlfY2lmICAgKmNpZjsKICAgdm9pZCAgICAgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKik7CiAgIHZvaWQgICAgICAqdXNlcl9kYXRhOworI2lmZGVmIF9fR05VQ19fCiB9IGZmaV9jbG9zdXJlIF9fYXR0cmlidXRlX18oKGFsaWduZWQgKDgpKSk7CisjZWxzZQorfSBmZmlfY2xvc3VyZTsKKyNlbmRpZgogCiB2b2lkICpmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKTsKIHZvaWQgZmZpX2Nsb3N1cmVfZnJlZSAodm9pZCAqKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCmluZGV4IDZhZjRiNWYuLjQyY2FjZTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaApAQCAtMTgsNyArMTgsMTAgQEAKIC8qIERvIG5vdCBtb3ZlIHRoaXMuIFNvbWUgdmVyc2lvbnMgb2YgQUlYIGFyZSB2ZXJ5IHBpY2t5IGFib3V0IHdoZXJlCiAgICB0aGlzIGlzIHBvc2l0aW9uZWQuICovCiAjaWZkZWYgX19HTlVDX18KKy8qIG1pbmd3NjQgZGVmaW5lcyB0aGlzIGFscmVhZHkgaW4gbWFsbG9jLmguICovCisjaWZuZGVmIGFsbG9jYQogIyBkZWZpbmUgYWxsb2NhIF9fYnVpbHRpbl9hbGxvY2EKKyNlbmRpZgogIyBkZWZpbmUgTUFZQkVfVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKICMgZGVmaW5lIE1BWUJFX1VOVVNFRApAQCAtMjksNyArMzIsMTEgQEAKICAjcHJhZ21hIGFsbG9jYQogIyAgZWxzZQogIyAgIGlmbmRlZiBhbGxvY2EgLyogcHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovCisjICAgIGlmZGVmIF9NU0NfVkVSCisjICAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICAgZWxzZQogY2hhciAqYWxsb2NhICgpOworIyAgICBlbmRpZgogIyAgIGVuZGlmCiAjICBlbmRpZgogIyBlbmRpZgpAQCAtNzcsNiArODQsMjIgQEAKIH0gZXh0ZW5kZWRfY2lmOwogCiAvKiBUZXJzZSBzaXplZCB0eXBlIGRlZmluaXRpb25zLiAgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fc2dpKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVJTlQ4OwordHlwZWRlZiBzaWduZWQgY2hhciAgIFNJTlQ4OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVSU5UMTY7Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCAgIFNJTlQxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQzMjsKK3R5cGVkZWYgc2lnbmVkIGludCAgIFNJTlQzMjsKKyMgaWZkZWYgX01TQ19WRVIKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBVSU5UNjQ7Cit0eXBlZGVmIHNpZ25lZCBfX2ludDY0ICAgU0lOVDY0OworIyBlbHNlCisjIGluY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIHVpbnQ2NF90IFVJTlQ2NDsKK3R5cGVkZWYgaW50NjRfdCAgU0lOVDY0OworIyBlbmRpZgorI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgaW50IFVJTlQ4ICBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1FJX18pKSk7CiB0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UOCAgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19RSV9fKSkpOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDE2IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKQEAgLTg1LDYgKzEwOCw3IEBACiB0eXBlZGVmIHNpZ25lZCBpbnQgICBTSU5UMzIgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUlOVDY0IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKIHR5cGVkZWYgc2lnbmVkIGludCAgIFNJTlQ2NCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0RJX18pKSk7CisjZW5kaWYKIAogdHlwZWRlZiBmbG9hdCBGTE9BVDMyOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZTFjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgpAQCAtMCwwICsxLDEwIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj0ke2xpYmRpcn0vQFBBQ0tBR0VfTkFNRUAtQFBBQ0tBR0VfVkVSU0lPTkAvaW5jbHVkZQorCitOYW1lOiBAUEFDS0FHRV9OQU1FQAorRGVzY3JpcHRpb246IExpYnJhcnkgc3VwcG9ydGluZyBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZXMKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbGZmaQorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiODBlMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGlidG9vbC12ZXJzaW9uCkBAIC0wLDAgKzEsMjkgQEAKKyMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gbWFpbnRhaW4gbGlidG9vbCB2ZXJzaW9uIGluZm8gZm9yIGxpYmZmaS4gIFNlZQorIyB0aGUgbGlidG9vbCBtYW51YWwgdG8gdW5kZXJzdGFuZCB0aGUgbWVhbmluZyBvZiB0aGUgZmllbGRzLiAgVGhpcyBpcworIyBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdCB2ZXJzaW9uIHVwZGF0ZXMgZG9uJ3QgaW52b2x2ZSByZS1ydW5uaW5nCisjIGF1dG9tYWtlLgorIworIyBIZXJlIGFyZSBhIHNldCBvZiBydWxlcyB0byBoZWxwIHlvdSB1cGRhdGUgeW91ciBsaWJyYXJ5IHZlcnNpb24KKyMgaW5mb3JtYXRpb246CisjIAorIyAxLiBTdGFydCB3aXRoIHZlcnNpb24gaW5mb3JtYXRpb24gb2YgYDA6MDowJyBmb3IgZWFjaCBsaWJ0b29sIGxpYnJhcnkuCisjCisjIDIuIFVwZGF0ZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbmx5IGltbWVkaWF0ZWx5IGJlZm9yZSBhIHB1YmxpYworIyAgICByZWxlYXNlIG9mIHlvdXIgc29mdHdhcmUuIE1vcmUgZnJlcXVlbnQgdXBkYXRlcyBhcmUgdW5uZWNlc3NhcnksCisjICAgIGFuZCBvbmx5IGd1YXJhbnRlZSB0aGF0IHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgZ2V0cyBsYXJnZXIKKyMgICAgZmFzdGVyLgorIworIyAzLiBJZiB0aGUgbGlicmFyeSBzb3VyY2UgY29kZSBoYXMgY2hhbmdlZCBhdCBhbGwgc2luY2UgdGhlIGxhc3QKKyMgICAgdXBkYXRlLCB0aGVuIGluY3JlbWVudCByZXZpc2lvbiAoYGM6cjphJyBiZWNvbWVzIGBjOnIrMTphJykuCisjCisjIDQuIElmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgb3IgY2hhbmdlZCBzaW5jZSB0aGUKKyMgICAgbGFzdCB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50LCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuCisjCisjIDUuIElmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSwKKyMgICAgdGhlbiBpbmNyZW1lbnQgYWdlLgorIworIyA2LiBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gcmVtb3ZlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMKKyMgICAgcmVsZWFzZSwgdGhlbiBzZXQgYWdlIHRvIDAuCisjCisjIENVUlJFTlQ6UkVWSVNJT046QUdFCis1OjEwOjAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjkzOWRjYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbHRtYWluLnNoCkBAIC0wLDAgKzEsODQwNiBAQAorIyBHZW5lcmF0ZWQgZnJvbSBsdG1haW4ubTRzaC4KKworIyBsdG1haW4uc2ggKEdOVSBsaWJ0b29sKSAyLjIuNgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorIworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMKKyMgICAgIC0tY29uZmlnICAgICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisjICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisjIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworIyAgICAgLS1mZWF0dXJlcyAgICAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisjICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorIyAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcworIyAgICAgLS1xdWlldCwgLS1zaWxlbnQgICAgZG9uJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAtdiwgLS12ZXJib3NlICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKyMgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgLWgsIC0taGVscCAgICAgICAgICAgICAgIHByaW50IHNob3J0IG9yIGxvbmcgaGVscCBtZXNzYWdlCisjCisjIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyMKKyMgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgY29tcGlsZSAgICAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyMgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCisjICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgIGluc3RhbGwgICAgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworIyAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCisjICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuCisjIFRyeSBgJHByb2duYW1lIC0taGVscCAtLW1vZGU9TU9ERScgZm9yIGEgbW9yZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiBNT0RFLgorIworIyBXaGVuIHJlcG9ydGluZyBhIGJ1ZywgcGxlYXNlIGRlc2NyaWJlIGEgdGVzdCBjYXNlIHRvIHJlcHJvZHVjZSBpdCBhbmQKKyMgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorIworIyAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0CisjICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgIGNvbXBpbGVyOgkJJExUQ0MKKyMgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKKyMgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgJHByb2duYW1lOgkJKEdOVSBsaWJ0b29sKSAyLjIuNgorIyAgICAgICBhdXRvbWFrZToJCSRhdXRvbWFrZV92ZXJzaW9uCisjICAgICAgIGF1dG9jb25mOgkJJGF1dG9jb25mX3ZlcnNpb24KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorCitQUk9HUkFNPWx0bWFpbi5zaAorUEFDS0FHRT1saWJ0b29sCitWRVJTSU9OPTIuMi42CitUSU1FU1RBTVA9IiIKK3BhY2thZ2VfcmV2aXNpb249MS4zMDEyCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworZmkKK0JJTl9TSD14cGc0OyBleHBvcnQgQklOX1NIICMgZm9yIFRydTY0CitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCisjIE9ubHkgc2V0IExBTkcgYW5kIExDX0FMTCB0byBDIGlmIGFscmVhZHkgc2V0LgorIyBUaGVzZSBtdXN0IG5vdCBiZSBzZXQgdW5jb25kaXRpb25hbGx5IGJlY2F1c2Ugbm90IGFsbCBzeXN0ZW1zIHVuZGVyc3RhbmQKKyMgZS5nLiBMQU5HPUMgKG5vdGFibHkgU0NPKS4KK2x0X3VzZXJfbG9jYWxlPQorbHRfc2FmZV9sb2NhbGU9Citmb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKK2RvCisgIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKKwkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgorCWZpIgorZG9uZQorCiskbHRfdW5zZXQgQ0RQQVRICisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7RUNITz0iZWNobyJ9Cis6ICR7RUdSRVA9Ii9iaW4vZ3JlcCAtRSJ9Cis6ICR7RkdSRVA9Ii9iaW4vZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iL2Jpbi9ncmVwIn0KKzogJHtMTl9TPSJsbiAtcyJ9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0VEPSIvYmluL3NlZCJ9Cis6ICR7U0hFTEw9IiR7Q09ORklHX1NIRUxMLS9iaW4vc2h9In0KKzogJHtYc2VkPSIkU0VEIC1lIDFzL15YLy8ifQorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKK0VYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KK0VYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitsdF9ubD0nCisnCitJRlM9IiAJJGx0X25sIgorCitkaXJuYW1lPSJzLC9bXi9dKiQsLCIKK2Jhc2VuYW1lPSJzLF4uKi8sLCIKKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgorICBlbHNlCisgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgorICBmaQorICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorfQorCisjIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS4KKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CisjIEluIHRoZSB1bmxpa2VseSBldmVudCAkcHJvZ25hbWUgYmVnYW4gd2l0aCBhICctJywgaXQgd291bGQgcGxheSBoYXZvYyB3aXRoCisjIGZ1bmNfZWNobyAoaW1hZ2luZSBwcm9nbmFtZT0tbiksIHNvIHdlIHByZXBlbmQgLi8gaW4gdGhhdCBjYXNlOgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJHByb2dwYXRoIgorcHJvZ25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CitjYXNlICRwcm9nbmFtZSBpbgorICAtKikgcHJvZ25hbWU9Li8kcHJvZ25hbWUgOzsKK2VzYWMKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgUmUtYFwnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBkb3VibGVfcXVvdGVfc3Vic3QgdGhhdCB3ZXJlCisjIGBcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgYFwnIHByZWNlZGVkIGEgJyQnCisjIGluIGlucHV0IHRvIGRvdWJsZV9xdW90ZV9zdWJzdCwgdGhhdCAnJCcgd2FzIHByb3RlY3RlZCBmcm9tIGV4cGFuc2lvbi4KKyMgU2luY2UgZWFjaCBpbnB1dCBgXCcgaXMgbm93IHR3byBgXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyIG9mIHJ1bnMgb2YKKyMgZm91ciBgXCdzIGZvbGxvd2VkIGJ5IHR3byBgXCdzIGFuZCB0aGVuIGEgJyQnLiAgYFwnIHRoYXQgJyQnLgorYnM9J1xcJworYnMyPSdcXFxcJworYnM0PSdcXFxcXFxcXCcKK2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRiczQvJlxcCisvZworICBzL14kYnMyJGRvbGxhci8kYnMmLworICBzL1xcKFteJGJzXVxcKSRiczIkZG9sbGFyL1xcMSRiczIkYnMkZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworIyBTdGFuZGFyZCBvcHRpb25zOgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfcXVpZXQ9ZmFsc2UKK29wdF92ZXJib3NlPWZhbHNlCitvcHRfd2FybmluZz06CisKKyMgZnVuY19lY2hvIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlLCBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IG1vZGUKKyMgbmFtZSBpZiBpdCBoYXMgYmVlbiBzZXQgeWV0LgorZnVuY19lY2hvICgpCit7CisgICAgJEVDSE8gIiRwcm9nbmFtZSR7bW9kZSs6IH0kbW9kZTogJCoiCit9CisKKyMgZnVuY192ZXJib3NlIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgorZnVuY192ZXJib3NlICgpCit7CisgICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworIyBmdW5jX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY19lcnJvciAoKQoreworICAgICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6ICIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWUke21vZGUrOiB9JG1vZGU6IHdhcm5pbmc6ICIkezErIiRAIn0gMT4mMgorCisgICAgIyBiYXNoIGJ1ZyBhZ2FpbjoKKyAgICA6Cit9CisKKyMgZnVuY19mYXRhbF9lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworIyBmdW5jX2ZhdGFsX2hlbHAgYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19mYXRhbF9lcnJvciAiJGhlbHAiCit9CitoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iICAjIyBkZWZhdWx0CisKKworIyBmdW5jX2dyZXAgZXhwcmVzc2lvbiBmaWxlbmFtZQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX21rZGlyX3AgZGlyZWN0b3J5LXBhdGgKKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICBteV9kaXJlY3RvcnlfcGF0aD0iJDEiCisgICAgbXlfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgIiRvcHRfZHJ5X3J1biIgIT0gIjoiOyB0aGVuCisKKyAgICAgICMgUHJvdGVjdCBkaXJlY3RvcnkgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScKKyAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluCisgICAgICAgIC0qKSBteV9kaXJlY3RvcnlfcGF0aD0iLi8kbXlfZGlyZWN0b3J5X3BhdGgiIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJG15X2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBteV9kaXJfbGlzdD0iJG15X2RpcmVjdG9yeV9wYXRoOiRteV9kaXJfbGlzdCIKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJG15X2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBteV9kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIlgkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFhzZWQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiWCRteV9kaXJfbGlzdCIgfCAkWHNlZCAtZSAncyw6KiQsLCdgCisKKyAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCisgICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KKwlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCisKKyAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KKyAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgorICAgIGZpCit9CisKKworIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCitmdW5jX21rdGVtcGRpciAoKQoreworICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKKworICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgorICAgIGVsc2UKKworICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAorICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzaworICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCisgICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgorICAgIGZpCisKKyAgICAkRUNITyAiWCRteV90bXBkaXIiIHwgJFhzZWQKK30KKworCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KKyMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCisjIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcworIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCisjIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCitmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJcJF0qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiWCQxIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgYW5kIHZhcmlhYmxlCisgICAgICAjIGV4cGFuc2lvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iXCIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHRcIiIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSIkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQiCisgICAgZXNhYworfQorCisKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIGFyZworIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSRyB0byBiZSBldmFsZWQgbGF0ZXI7IHNhbWUgYXMgYWJvdmUsCisjIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2Z1bmNfcXVvdGVfZm9yX2V4cGFuZCAoKQoreworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXSopCisJbXlfYXJnPWAkRUNITyAiWCQxIiB8ICRYc2VkIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKworCisKKworIyBmdW5jX3ZlcnNpb24KKyMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY192ZXJzaW9uICgpCit7CisgICAgJFNFRCAtbiAnL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgLWgvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgICRFQ0hPCisgICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19oZWxwCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY19oZWxwICgpCit7CisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sLyMgUmVwb3J0IGJ1Z3MgdG8vIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMqXCRwcm9nbmFtZSonJHByb2duYW1lJyoKKwlzKlwkaG9zdConIiRob3N0IicqCisJcypcJFNIRUxMKiciJFNIRUxMIicqCisJcypcJExUQ0MqJyIkTFRDQyInKgorCXMqXCRMVENGTEFHUyonIiRMVENGTEFHUyInKgorCXMqXCRMRConIiRMRCInKgorCXMvXCR3aXRoX2dudV9sZC8nIiR3aXRoX2dudV9sZCInLworCXMvXCRhdXRvbWFrZV92ZXJzaW9uLyciYChhdXRvbWFrZSAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXMvXCRhdXRvY29uZl92ZXJzaW9uLyciYChhdXRvY29uZiAtLXZlcnNpb24pIDI+L2Rldi9udWxsIHwkU0VEIDFxYCInLworCXAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAorIyBleGl0X2NtZC4KK2Z1bmNfbWlzc2luZ19hcmcgKCkKK3sKKyAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMSIKKyAgICBleGl0X2NtZD1leGl0Cit9CisKK2V4aXRfY21kPToKKworCisKKworCisjIENoZWNrIHRoYXQgd2UgaGF2ZSBhIHdvcmtpbmcgJEVDSE8uCitpZiB0ZXN0ICJYJDEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCisgIDoKK2VsaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlICRFQ0hPIHdpbGwgd29yay4KKyAgZXhlYyAkU0hFTEwgIiRwcm9ncGF0aCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAkRVhJVF9TVUNDRVNTCitmaQorCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCittYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKworIyBHbG9iYWwgdmFyaWFibGVzLgorIyAkbW9kZSBpcyB1bnNldAorbm9ub3B0PQorZXhlY3V0ZV9kbGZpbGVzPQorcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2R1cGxpY2F0ZV9kZXBzPWZhbHNlCitvcHRfc2lsZW50PWZhbHNlCitvcHRfZGVidWc9OgorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKK30KKworCisjIGZ1bmNfY29uZmlnCisjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KK2Z1bmNfY29uZmlnICgpCit7CisgICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCisgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKworICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKworICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCisgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisgICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKKyAgICBkb25lCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19mZWF0dXJlcworIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgJEVDSE8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkRUNITyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJEVDSE8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRFQ0hPICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkRUNITyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgIyBHbG9iYWwgdmFyaWFibGU6CisgIHRhZ25hbWU9IiQxIgorCisgIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisKKyAgIyBWYWxpZGF0ZSB0YWduYW1lLgorICBjYXNlICR0YWduYW1lIGluCisgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCisgICAgICA7OworICBlc2FjCisKKyAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKKyAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICBDQykgOzsKKyAgICAqKQorICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKworCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCisJIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCisJIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgorCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwlldmFsICIkZXh0cmFjdGVkY2YiCisgICAgICBlbHNlCisJZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICBmaQorICAgICAgOzsKKyAgZXNhYworfQorCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbgorIyB0aGUgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYGxpYnRvb2wgLS12ZXJzaW9uJyBoYXBwZW4gcXVpY2tseS4KK3sKKworICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgY2FzZSAkMSBpbgorICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICA7OworICBsaW5rfGxpbnxsaXxsKQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICAgIDs7CisgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgICMgUGFyc2Ugbm9uLW1vZGUgc3BlY2lmaWMgYXJndW1lbnRzOgorICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorCisgICAgY2FzZSAkb3B0IGluCisgICAgICAtLWNvbmZpZykJCWZ1bmNfY29uZmlnCQkJCQk7OworCisgICAgICAtLWRlYnVnKQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCIKKwkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKwkJCW9wdF9kZWJ1Zz0nc2V0IC14JworCQkJJG9wdF9kZWJ1ZworCQkJOzsKKworICAgICAgLWRsb3BlbikJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJZXhlY3V0ZV9kbGZpbGVzPSIkZXhlY3V0ZV9kbGZpbGVzICQxIgorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tZHJ5LXJ1biB8IC1uKQlvcHRfZHJ5X3J1bj06CQkJCQk7OworICAgICAgLS1mZWF0dXJlcykgICAgICAgZnVuY19mZWF0dXJlcwkJCQkJOzsKKyAgICAgIC0tZmluaXNoKQkJbW9kZT0iZmluaXNoIgkJCQkJOzsKKworICAgICAgLS1tb2RlKQkJdGVzdCAiJCMiIC1lcSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgIiRvcHQiICYmIGJyZWFrCisJCQljYXNlICQxIGluCisJCQkgICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6CisJCQkgIGNsZWFuKQk7OworCQkJICBjb21waWxlKQk7OworCQkJICBleGVjdXRlKQk7OworCQkJICBmaW5pc2gpCTs7CisJCQkgIGluc3RhbGwpCTs7CisJCQkgIGxpbmspCQk7OworCQkJICByZWxpbmspCTs7CisJCQkgIHVuaW5zdGFsbCkJOzsKKworCQkJICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKwkJCSAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJG9wdCIKKwkJCSAgICAgZXhpdF9jbWQ9ZXhpdAorCQkJICAgICBicmVhaworCQkJICAgICA7OworCQkgICAgICAgIGVzYWMKKworCQkJbW9kZT0iJDEiCisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9kdXBsaWNhdGVfZGVwcz06CQkJCTs7CisKKyAgICAgIC0tcXVpZXR8LS1zaWxlbnQpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PToKKwkJCTs7CisKKyAgICAgIC0tdmVyYm9zZXwgLXYpCXByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRvcHQiCisJCQlvcHRfc2lsZW50PWZhbHNlCisJCQk7OworCisgICAgICAtLXRhZykJCXRlc3QgIiQjIiAtZXEgMCAmJiBmdW5jX21pc3NpbmdfYXJnICIkb3B0IiAmJiBicmVhaworCQkJcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJG9wdCAkMSIKKwkJCWZ1bmNfZW5hYmxlX3RhZyAiJDEiCSMgdGFnbmFtZSBpcyBzZXQgaGVyZQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtZGxvcGVuPSp8LS1tb2RlPSp8LS10YWc9KikKKwkJCWZ1bmNfb3B0X3NwbGl0ICIkb3B0IgorCQkJc2V0IGR1bW15ICIkZnVuY19vcHRfc3BsaXRfb3B0IiAiJGZ1bmNfb3B0X3NwbGl0X2FyZyIgJHsxKyIkQCJ9CisJCQlzaGlmdAorCQkJOzsKKworICAgICAgLVw/fC1oKQkJZnVuY191c2FnZQkJCQkJOzsKKyAgICAgIC0taGVscCkJCW9wdF9oZWxwPToJCQkJCTs7CisgICAgICAtLXZlcnNpb24pCWZ1bmNfdmVyc2lvbgkJCQkJOzsKKworICAgICAgLSopCQlmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXplZCBvcHRpb24gXGAkb3B0JyIJOzsKKworICAgICAgKikJCW5vbm9wdD0iJG9wdCIKKwkJCWJyZWFrCisJCQk7OworICAgIGVzYWMKKyAgZG9uZQorCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfZHVwbGljYXRlX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAjIEhhdmluZyB3YXJuZWQgYWJvdXQgYWxsIG1pcy1zcGVjaWZpZWQgb3B0aW9ucywgYmFpbCBvdXQgaWYKKyAgIyBhbnl0aGluZyB3YXMgd3JvbmcuCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIEVuc3VyZSB0aGF0IHdlIGFyZSB1c2luZyBtNCBtYWNyb3MsIGFuZCBsaWJ0b29sIHNjcmlwdCBmcm9tIHRoZSBzYW1lCisjIHJlbGVhc2Ugb2YgbGlidG9vbC4KK2Z1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaCAoKQoreworICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkVkVSU0lPTiIgIT0gIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAorJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgorJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgIGZpCisKKyAgICBleGl0ICRFWElUX01JU01BVENICisgIGZpCit9CisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCiskb3B0X2hlbHAgfHwgeworICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAorCisgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKKyAgZmkKKworICB0ZXN0IC16ICIkbW9kZSIgJiYgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFLiIKKworCisgICMgRGFyd2luIHN1Y2tzCisgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKworICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAkRUNITyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKKworICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCisgIGdlbmVyaWNfaGVscD0iJGhlbHAiCisgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRtb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCit9CisKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIiCisgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSI7IHRoZW4KKwlmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisJZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0LyRvYmpkaXIvJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9X2x0c2h3cmFwcGVyIgorICAgIGZpCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorICAgICAgQ0NfcXVvdGVkPQorICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgIGRvbmUKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKSA7OworICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKKyAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KKyAgICAgICopCisJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbworCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgorCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBDQ19xdW90ZWQ9CisJICAgIGZvciBhcmcgaW4gJENDOyBkbworCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKwkgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCSAgICAgIENDX3F1b3RlZD0iJENDX3F1b3RlZCAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICAgIGRvbmUKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRFQ0hPICRDQ2AgIiogfCAiYCRFQ0hPICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJEVDSE8gJENDX3F1b3RlZGAgIiogfCAiYCRFQ0hPICRDQ19xdW90ZWRgICIqKQorCSAgICAgICMgVGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUgY29tbWFuZCBtYXRjaGVzCisJICAgICAgIyB0aGUgb25lIGluIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbi4KKwkgICAgICAjIEFzc3VtZSB0aGlzIGlzIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbiB3ZSB3YW50LgorCSAgICAgIHRhZ25hbWU9JHoKKwkgICAgICBicmVhaworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisJZG9uZQorCSMgSWYgJHRhZ25hbWUgc3RpbGwgaXNuJ3Qgc2V0LCB0aGVuIG5vIHRhZ2dlZCBjb25maWd1cmF0aW9uCisJIyB3YXMgZm91bmQgYW5kIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlICItLXRhZyIgY29tbWFuZAorCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgorCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JHsxfQorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCisgICAgZWxzZQorICAgICAgd3JpdGVfbG9iaj1ub25lCisgICAgZmkKKworICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHdyaXRlX29sZG9iaj1cJyR7M31cJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIE5hbWUgb2YgdGhlIFBJQyBvYmplY3QuCitwaWNfb2JqZWN0PSR3cml0ZV9sb2JqCisKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QKK25vbl9waWNfb2JqZWN0PSR3cml0ZV9vbGRvYmoKKworRU9GCisgICAgICAkTVYgIiR7d3JpdGVfbGlib2JqfVQiICIke3dyaXRlX2xpYm9ian0iCisgICAgfQorfQorCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHN1cHByZXNzX29wdD15ZXMKKyAgICBzdXBwcmVzc19vdXRwdXQ9CisgICAgYXJnX21vZGU9bm9ybWFsCisgICAgbGlib2JqPQorICAgIGxhdGVyPQorICAgIHBpZV9mbGFnPQorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmdfbW9kZSBpbgorICAgICAgYXJnICApCisJIyBkbyBub3QgImNvbnRpbnVlIi4gIEluc3RlYWQsIGFkZCB0aGlzIHRvIGJhc2VfY29tcGlsZQorCWxhc3Rhcmc9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJOzsKKworICAgICAgdGFyZ2V0ICkKKwlsaWJvYmo9IiRhcmciCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5IFxgLW8nIG1vcmUgdGhhbiBvbmNlIgorCSAgYXJnX21vZGU9dGFyZ2V0CisJICBjb250aW51ZQorCSAgOzsKKworCS1waWUgfCAtZnBpZSB8IC1mUElFKQorICAgICAgICAgIHBpZV9mbGFnPSIkcGllX2ZsYWcgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXNoYXJlZCB8IC1zdGF0aWMgfCAtcHJlZmVyLXBpYyB8IC1wcmVmZXItbm9uLXBpYykKKwkgIGxhdGVyPSIkbGF0ZXIgJGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJLW5vLXN1cHByZXNzKQorCSAgc3VwcHJlc3Nfb3B0PW5vCisJICBjb250aW51ZQorCSAgOzsKKworCS1YY29tcGlsZXIpCisJICBhcmdfbW9kZT1hcmcgICMgIHRoZSBuZXh0IG9uZSBnb2VzIGludG8gdGhlICJiYXNlX2NvbXBpbGUiIGFyZyBsaXN0CisJICBjb250aW51ZSAgICAgICMgIFRoZSBjdXJyZW50ICJzcmNmaWxlIiB3aWxsIGVpdGhlciBiZSByZXRhaW5lZCBvcgorCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KKworCS1XYywqKQorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgYXJnIGluICRhcmdzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgorCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgorCSAgYmFzZV9jb21waWxlPSIkYmFzZV9jb21waWxlICRsYXN0YXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwkqKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGFzdGFyZyIKKyAgICAgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgOzsKKyAgICB0YXJnZXQpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGEgdGFyZ2V0IHdpdGggXGAtbyciCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CisgICAgICA7OworICAgIGVzYWMKKworICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCisgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KKyAgICBjYXNlICRsaWJvYmogaW4KKyAgICAqLltjQ0ZTaWZtc29dIHwgXAorICAgICouYWRhIHwgKi5hZGIgfCAqLmFkcyB8ICouYXNtIHwgXAorICAgICouYysrIHwgKi5jYyB8ICouaWkgfCAqLmNsYXNzIHwgKi5jcHAgfCAqLmN4eCB8IFwKKyAgICAqLltmRl1bMDldPyB8ICouZm9yIHwgKi5qYXZhIHwgKi5vYmogfCAqLnN4KQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciCisgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb2JqIiAiLyIgIiIKKyAgICBvYmpuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgdGVzdCAteiAiJGJhc2VfY29tcGlsZSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgY29tcGlsYXRpb24gY29tbWFuZCIKKworICAgICMgRGVsZXRlIGFueSBsZWZ0b3ZlciBsaWJyYXJ5IG9iamVjdHMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgcmVtb3ZlbGlzdD0iJG9iaiAkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZWxzZQorICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGZpCisKKyAgICAjIE9uIEN5Z3dpbiB0aGVyZSdzIG5vICJyZWFsIiBQSUMgZmxhZyBzbyB3ZSBtdXN0IGJ1aWxkIGJvdGggb2JqZWN0IHR5cGVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICA7OworICAgIGVzYWMKKyAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgICAgIyBub24tUElDIGNvZGUgaW4gc2hhcmVkIGxpYnJhcmllcyBpcyBub3Qgc3VwcG9ydGVkCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgZmkKKworICAgICMgQ2FsY3VsYXRlIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3V0cHV0IG9iamVjdCBpZiBjb21waWxlciBkb2VzCisgICAgIyBub3Qgc3VwcG9ydCAtbyB3aXRoIC1jCisgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSBubzsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnIC1lICdzJVwuW14uXSokJSUnYC4ke29iamV4dH0KKyAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgorICAgIGVsc2UKKyAgICAgIG91dHB1dF9vYmo9CisgICAgICBuZWVkX2xvY2tzPW5vCisgICAgICBsb2NrZmlsZT0KKyAgICBmaQorCisgICAgIyBMb2NrIHRoaXMgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCBpcyBuZWVkZWQKKyAgICAjIFdlIHVzZSB0aGlzIHNjcmlwdCBmaWxlIHRvIG1ha2UgdGhlIGxpbmssIGl0IGF2b2lkcyBjcmVhdGluZyBhIG5ldyBmaWxlCisgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0geWVzOyB0aGVuCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKKwlzbGVlcCAyCisgICAgICBkb25lCisgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCisgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGV4aXN0cyBhbmQgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJGxvY2tmaWxlIgorICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1CisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJY29tbWFuZD0iJGNvbW1hbmQgLW8gJGxvYmoiCisgICAgICBmaQorCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKKworICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgorCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKK2BjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAorCitidXQgaXQgc2hvdWxkIGNvbnRhaW46Ciskc3JjZmlsZQorCitUaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCit0ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCit5b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCisgICAgICBmaQorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KKyAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgorCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKKyAgICAgIGVsc2UKKwljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKwljb21tYW5kPSIkY29tbWFuZCAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBjb21tYW5kPSIkY29tbWFuZCRzdXBwcmVzc19vdXRwdXQiCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIiBcCisgICAgICAgICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgICMgSnVzdCBtb3ZlIHRoZSBvYmplY3QgaWYgbmVlZGVkCisgICAgICBpZiB0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgdGVzdCAiWCRvdXRwdXRfb2JqIiAhPSAiWCRvYmoiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICIkbGlib2JqIiAiJG9iamRpci8kb2JqbmFtZSIgIiRvYmpuYW1lIgorCisgICAgICAjIFVubG9jayB0aGUgY3JpdGljYWwgc2VjdGlvbiBpZiBpdCB3YXMgbG9ja2VkCisgICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKwlyZW1vdmVsaXN0PSRsb2NrZmlsZQorICAgICAgICAkUk0gIiRsb2NrZmlsZSIKKyAgICAgIGZpCisgICAgfQorCisgICAgZXhpdCAkRVhJVF9TVUNDRVNTCit9CisKKyRvcHRfaGVscCB8fCB7Cit0ZXN0ICIkbW9kZSIgPSBjb21waWxlICYmIGZ1bmNfbW9kZV9jb21waWxlICR7MSsiJEAifQorfQorCitmdW5jX21vZGVfaGVscCAoKQoreworICAgICMgV2UgbmVlZCB0byBkaXNwbGF5IGhlbHAgZm9yIGVhY2ggb2YgdGhlIG1vZGVzLgorICAgIGNhc2UgJG1vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisKK0NPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQorbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorICAgICAgICA7OworCisgICAgICBleGVjdXRlKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9ZXhlY3V0ZSBDT01NQU5EIFtBUkdTXS4uLgorCitBdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbS4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLWRsb3BlbiBGSUxFICAgICAgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBGSUxFIHRvIHRoZSBsaWJyYXJ5IHBhdGgKKworVGhpcyBtb2RlIHNldHMgdGhlIGxpYnJhcnkgcGF0aCBlbnZpcm9ubWVudCB2YXJpYWJsZSBhY2NvcmRpbmcgdG8gXGAtZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKKyAgICAgICAgOzsKKworICAgICAgaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWluc3RhbGwgSU5TVEFMTC1DT01NQU5ELi4uCisKK0luc3RhbGwgZXhlY3V0YWJsZXMgb3IgbGlicmFyaWVzLgorCitJTlNUQUxMLUNPTU1BTkQgaXMgdGhlIGluc3RhbGxhdGlvbiBjb21tYW5kLiAgVGhlIGZpcnN0IGNvbXBvbmVudCBzaG91bGQgYmUKK2VpdGhlciB0aGUgXGBpbnN0YWxsJyBvciBcYGNwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXggUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1kbG9wZW4gRklMRSAgICAgIFxgLWRscHJlb3BlbicgRklMRSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQgYXQgcnVudGltZQorICAtZGxwcmVvcGVuIEZJTEUgICBsaW5rIGluIEZJTEUgYW5kIGFkZCBpdHMgc3ltYm9scyB0byBsdF9wcmVsb2FkZWRfc3ltYm9scworICAtZXhwb3J0LWR5bmFtaWMgICBhbGxvdyBzeW1ib2xzIGZyb20gT1VUUFVULUZJTEUgdG8gYmUgcmVzb2x2ZWQgd2l0aCBkbHN5bSgzKQorICAtZXhwb3J0LXN5bWJvbHMgU1lNRklMRQorICAgICAgICAgICAgICAgICAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBtYXRjaGluZyBSRUdFWAorICAtTExJQkRJUiAgICAgICAgICBzZWFyY2ggTElCRElSIGZvciByZXF1aXJlZCBpbnN0YWxsZWQgbGlicmFyaWVzCisgIC1sTkFNRSAgICAgICAgICAgIE9VVFBVVC1GSUxFIHJlcXVpcmVzIHRoZSBpbnN0YWxsZWQgbGlicmFyeSBsaWJOQU1FCisgIC1tb2R1bGUgICAgICAgICAgIGJ1aWxkIGEgbGlicmFyeSB0aGF0IGNhbiBkbG9wZW5lZAorICAtbm8tZmFzdC1pbnN0YWxsICBkaXNhYmxlIHRoZSBmYXN0LWluc3RhbGwgbW9kZQorICAtbm8taW5zdGFsbCAgICAgICBsaW5rIGEgbm90LWluc3RhbGxhYmxlIGV4ZWN1dGFibGUKKyAgLW5vLXVuZGVmaW5lZCAgICAgZGVjbGFyZSB0aGF0IGEgbGlicmFyeSBkb2VzIG5vdCByZWZlciB0byBleHRlcm5hbCBzeW1ib2xzCisgIC1vIE9VVFBVVC1GSUxFICAgIGNyZWF0ZSBPVVRQVVQtRklMRSBmcm9tIHRoZSBzcGVjaWZpZWQgb2JqZWN0cworICAtb2JqZWN0bGlzdCBGSUxFICBVc2UgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyBmb3VuZCBpbiBGSUxFIHRvIHNwZWNpZnkgb2JqZWN0cworICAtcHJlY2lvdXMtZmlsZXMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgZG9uJ3QgcmVtb3ZlIG91dHB1dCBmaWxlcyBtYXRjaGluZyBSRUdFWAorICAtcmVsZWFzZSBSRUxFQVNFICBzcGVjaWZ5IHBhY2thZ2UgcmVsZWFzZSBpbmZvcm1hdGlvbgorICAtcnBhdGggTElCRElSICAgICB0aGUgY3JlYXRlZCBsaWJyYXJ5IHdpbGwgZXZlbnR1YWxseSBiZSBpbnN0YWxsZWQgaW4gTElCRElSCisgIC1SWyBdTElCRElSICAgICAgIGFkZCBMSUJESVIgdG8gdGhlIHJ1bnRpbWUgcGF0aCBvZiBwcm9ncmFtcyBhbmQgbGlicmFyaWVzCisgIC1zaGFyZWQgICAgICAgICAgIG9ubHkgZG8gZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zaHJleHQgU1VGRklYICAgIG92ZXJyaWRlIHRoZSBzdGFuZGFyZCBzaGFyZWQgbGlicmFyeSBmaWxlIGV4dGVuc2lvbgorICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAtc3RhdGljLWxpYnRvb2wtbGlicworICAgICAgICAgICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGxpYnJhcnkgdmVyc2lvbiBpbmZvIFtlYWNoIHZhcmlhYmxlIGRlZmF1bHRzIHRvIDBdCisgIC13ZWFrIExJQk5BTUUgICAgIGRlY2xhcmUgdGhhdCB0aGUgdGFyZ2V0IHByb3ZpZGVzIHRoZSBMSUJOQU1FIGludGVyZmFjZQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgICAgICAgOzsKKworICAgICAgdW5pbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgJEVDSE8KKyAgICAkRUNITyAiVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgorCisgICAgZXhpdCAkPworfQorCisgICMgTm93IHRoYXQgd2UndmUgY29sbGVjdGVkIGEgcG9zc2libGUgLS1tb2RlIGFyZywgc2hvdyBoZWxwIGlmIG5lY2Vzc2FyeQorICAkb3B0X2hlbHAgJiYgZnVuY19tb2RlX2hlbHAKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJGV4ZWN1dGVfZGxmaWxlczsgZG8KKyAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCisJfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIFNraXAgdGhpcyBsaWJyYXJ5IGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZC4KKwlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgorCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKKwkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJOzsKKworICAgICAgKikKKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSIkYWJzZGlyIgorCisgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgorICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KKwlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyXCIiCisgICAgICBlbHNlCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpcjpcJCRzaGxpYnBhdGhfdmFyXCIiCisgICAgICBmaQorICAgIGRvbmUKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgc2hsaWJwYXRoX3ZhcgorICAgICMgcmF0aGVyIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2V4ZWN1dGVfbWFnaWM9IiRtYWdpYyIKKworICAgICMgQ2hlY2sgaWYgYW55IG9mIHRoZSBhcmd1bWVudHMgaXMgYSB3cmFwcGVyIHNjcmlwdC4KKyAgICBhcmdzPQorICAgIGZvciBmaWxlCisgICAgZG8KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgIC0qKSA7OworICAgICAgKikKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgIiRmaWxlIgorCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KKwkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAjIFF1b3RlIGFyZ3VtZW50cyAodG8gcHJlc2VydmUgc2hlbGwgbWV0YWNoYXJhY3RlcnMpLgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZpbGUiCisgICAgICBhcmdzPSIkYXJncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiWCRvcHRfZHJ5X3J1biIgPSBYZmFsc2U7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgRXhwb3J0IHRoZSBzaGxpYnBhdGhfdmFyLgorCWV2YWwgImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisKKyAgICAgICMgUmVzdG9yZSBzYXZlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgIGZvciBsdF92YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworICAgICAgZG8KKwlldmFsICJpZiB0ZXN0IFwiXCR7c2F2ZV8kbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgorICAgICAgICAgICAgICAgICRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCisJICAgICAgZWxzZQorCQkkbHRfdW5zZXQgJGx0X3ZhcgorCSAgICAgIGZpIgorICAgICAgZG9uZQorCisgICAgICAjIE5vdyBwcmVwYXJlIHRvIGFjdHVhbGx5IGV4ZWMgdGhlIGNvbW1hbmQuCisgICAgICBleGVjX2NtZD0iXCRjbWQkYXJncyIKKyAgICBlbHNlCisgICAgICAjIERpc3BsYXkgd2hhdCB3b3VsZCBiZSBkb25lLgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJZXZhbCAiXCRFQ0hPIFwiXCRzaGxpYnBhdGhfdmFyPVwkJHNobGlicGF0aF92YXJcIiIKKwkkRUNITyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0ICIkbW9kZSIgPSBleGVjdXRlICYmIGZ1bmNfbW9kZV9leGVjdXRlICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2ZpbmlzaCBhcmcuLi4KK2Z1bmNfbW9kZV9maW5pc2ggKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbGliZGlycz0iJG5vbm9wdCIKKyAgICBhZG1pbmNtZHM9CisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZm9yIGRpcgorICAgICAgZG8KKwlsaWJkaXJzPSIkbGliZGlycyAkZGlyIgorICAgICAgZG9uZQorCisgICAgICBmb3IgbGliZGlyIGluICRsaWJkaXJzOyBkbworCWlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyI7IHRoZW4KKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBmaW5pc2ggY29tbWFuZHMuCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJGZpbmlzaF9jbWRzIiAnYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisnIiRjbWQiJyInCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWRzIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kcyIKKwlmaQorICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KKyAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgICRFQ0hPICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorICAgICRFQ0hPICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAgICAgICRFQ0hPICIgICAkbGliZGlyIgorICAgIGRvbmUKKyAgICAkRUNITworICAgICRFQ0hPICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAkRUNITyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgJEVDSE8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgJEVDSE8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgJEVDSE8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRFQ0hPICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgICAgICBsaWJkaXI9TElCRElSCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKyAgICAgICRFQ0hPICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorICAgICAgJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgIGZpCisgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICAgICRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICBmaQorICAgICRFQ0hPCisKKyAgICAkRUNITyAiU2VlIGFueSBvcGVyYXRpbmcgc3lzdGVtIGRvY3VtZW50YXRpb24gYWJvdXQgc2hhcmVkIGxpYnJhcmllcyBmb3IiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc29sYXJpczIuWzY3ODldfHNvbGFyaXMyLjFbMC05XSkKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpLCBjcmxlKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwiCisJJEVDSE8gInBhZ2VzLiIKKwk7OworICAgICAgKikKKyAgICAgICAgJEVDSE8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorICAgICAgICA7OworICAgIGVzYWMKKyAgICAkRUNITyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG1vZGUiID0gZmluaXNoICYmIGZ1bmNfbW9kZV9maW5pc2ggJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfaW5zdGFsbCBhcmcuLi4KK2Z1bmNfbW9kZV9pbnN0YWxsICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgICRFQ0hPICJYJG5vbm9wdCIgfCAkR1JFUCBzaHRvb2wgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJG5vbm9wdCIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIKKyAgICAgIGFyZz0kMQorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmaWxlcz0iJGZpbGVzICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKwkqW1xcXCAvXWNwXCAqKSA7OworCSopIHByZXY9JGFyZyA7OworCWVzYWMKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgcHJldj0KKwllbHNlCisJICBkZXN0PSRhcmcKKwkgIGNvbnRpbnVlCisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgdGhlIGFyZ3VtZW50LgorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJGluc3RhbGxfcHJvZyIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisKKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCXJlbGlua19jb21tYW5kPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZGlyPSIkZGlyJG9iamRpciIKKworCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCisJICBpbnN0X3ByZWZpeF9kaXI9YCRFQ0hPICJYJGRlc3RkaXIiIHwgJFhzZWQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQGluc3RfcHJlZml4X2RpckAlLWluc3QtcHJlZml4LWRpciAkaW5zdF9wcmVmaXhfZGlyJSJgCisJICBlbHNlCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY19zaG93X2V2YWwgIiRyZWxpbmtfY29tbWFuZCIgXAorCSAgICAnZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IHJlbGluayBcYCRmaWxlJ1wnJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IicKKwlmaQorCisJIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KKwlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXM7IHNoaWZ0CisJaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisJICByZWFsbmFtZT0iJDEiCisJICBzaGlmdAorCisJICBzcmNuYW1lPSIkcmVhbG5hbWUiCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKKwk7OworCisgICAgICAqLmxvKQorCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgorCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIGRlc3RpbmF0aW9uIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwljYXNlICRkZXN0ZmlsZSBpbgorCSoubG8pCisJICBmdW5jX2xvMm8gIiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIDs7CisJKi4kb2JqZXh0KQorCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gXGAkZGVzdGZpbGUnIgorCSAgOzsKKwllc2FjCisKKwkjIEluc3RhbGwgdGhlIGxpYnRvb2wgb2JqZWN0IGlmIHJlcXVlc3RlZC4KKwl0ZXN0IC1uICIkZGVzdGZpbGUiICYmIFwKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisKKwkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KKwlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCSAgZnVuY19sbzJvICIkZmlsZSIKKwkgIHN0YXRpY29iaj0kZnVuY19sbzJvX3Jlc3VsdAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiAnZXhpdCAkPycKKwlmaQorCWV4aXQgJEVYSVRfU1VDQ0VTUworCTs7CisKKyAgICAgICopCisJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgorCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PSIuZXhlIgorCSAgICBmaQorCSAgICA7OworCWVzYWMKKworCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqKQorCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIGVsc2UKKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIHdyYXBwZXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmaQorCSAgICA7OworCSopCisJICAgIHdyYXBwZXI9JGZpbGUKKwkgICAgOzsKKwllc2FjCisJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiR3cmFwcGVyIjsgdGhlbgorCSAgbm90aW5zdF9kZXBsaWJzPQorCSAgcmVsaW5rX2NvbW1hbmQ9CisKKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCisJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisKKwkgIGZpbmFsaXplPXllcworCSAgZm9yIGxpYiBpbiAkbm90aW5zdF9kZXBsaWJzOyBkbworCSAgICAjIENoZWNrIHRvIHNlZSB0aGF0IGVhY2ggbGlicmFyeSBpcyBpbnN0YWxsZWQuCisJICAgIGxpYmRpcj0KKwkgICAgaWYgdGVzdCAtZiAiJGxpYiI7IHRoZW4KKwkgICAgICBmdW5jX3NvdXJjZSAiJGxpYiIKKwkgICAgZmkKKwkgICAgbGliZmlsZT0iJGxpYmRpci8iYCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSVnJ2AgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGlmIHRlc3QgLW4gIiRsaWJkaXIiICYmIHRlc3QgISAtZiAiJGxpYmZpbGUiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1ubworCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0gbm8gJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKKwkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwkgICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgInMlXChbXi9dKlwpJCUkb2JqZGlyL1wxJSJgCisJICBmaQorCWZpCisKKwkjIHJlbW92ZSAuZXhlIHNpbmNlIGN5Z3dpbiAvdXNyL2Jpbi9pbnN0YWxsIHdpbGwgYXBwZW5kIGFub3RoZXIKKwkjIG9uZSBhbnl3YXkKKwljYXNlICRpbnN0YWxsX3Byb2csJGhvc3QgaW4KKwkqL3Vzci9iaW4vaW5zdGFsbCosKmN5Z3dpbiopCisJICBjYXNlICRmaWxlOiRkZXN0ZmlsZSBpbgorCSAgKi5leGU6Ki5leGUpCisJICAgICMgdGhpcyBpcyBvaworCSAgICA7OworCSAgKi5leGU6KikKKwkgICAgZGVzdGZpbGU9JGRlc3RmaWxlLmV4ZQorCSAgICA7OworCSAgKjoqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZGVzdGZpbGUiCisJICAgIGRlc3RmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiAnZXhpdCAkPycKKwkkb3B0X2RyeV9ydW4gfHwgaWYgdGVzdCAtbiAiJG91dHB1dG5hbWUiOyB0aGVuCisJICAke1JNfXIgIiR0bXBkaXIiCisJZmkKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKyAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KKyAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzdHJpcG1lIiAmJiB0ZXN0IC1uICIkb2xkX3N0cmlwbGliIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICIkb2xkX3N0cmlwbGliICRvbGRsaWIiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCisgICAgZG9uZQorCisgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLWZpbmlzaCRjdXJyZW50X2xpYmRpcnMnCisgICAgZWxzZQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG1vZGUiID0gaW5zdGFsbCAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIG15X291dHB1dG5hbWU9IiQxIgorICAgIG15X29yaWdpbmF0b3I9IiQyIgorICAgIG15X3BpY19wPSIkezMtbm99IgorICAgIG15X3ByZWZpeD1gJEVDSE8gIiRteV9vcmlnaW5hdG9yIiB8IHNlZCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0iJHtteV9vdXRwdXRuYW1lfVMuYyIKKyAgICAgIGVsc2UKKwlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkbXlfZGxzeW1zIjsgdGhlbgorICAgICAgY2FzZSAkbXlfZGxzeW1zIGluCisgICAgICAiIikgOzsKKyAgICAgICouYykKKwkjIERpc2NvdmVyIHRoZSBubGlzdCBvZiBlYWNoIG9mIHRoZSBkbGZpbGVzLgorCW5saXN0PSIkb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Lm5tIgorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yIFxgJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gXCJDXCIgeworI2VuZGlmCisKKy8qIEV4dGVybmFsIHN5bWJvbCBkZWNsYXJhdGlvbnMgZm9yIHRoZSBjb21waWxlci4gKi9cCisiCisKKwlpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgorCSAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRvdXRwdXQnIgorCisJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCisKKwkgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgIHByb2dmaWxlcz1gJEVDSE8gIlgkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCSAgZm9yIHByb2dmaWxlIGluICRwcm9nZmlsZXM7IGRvCisJICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkcHJvZ2ZpbGUnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRwcm9nZmlsZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRSTSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICBldmFsICIke1NFRH0gLW4gLWUgJy9eOiBAUFJPR1JBTUAgJC9kJyAtZSAncy9eLiogXCguKlwpJC9cMS9wJyAiJzwgIiRubGlzdCIgPiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisgICAgICAgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKyAgICAgICAgICAgICAgICBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZWxzZQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBmaQorCWZpCisKKwlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbworCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgIGV2YWwgIiROTSAkZGxwcmVmaWxlIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgIH0KKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICAkRUNITyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CisiCisJICBjYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlCisgICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgorICAgb24gcHNldWRvLXJlbG9jcy4gICovIgorCSAgICBsdF9kbHN5bV9jb25zdD0gOzsKKwkgICpvc2Y1KikKKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEgKi8iCisJICAgIGx0X2Rsc3ltX2NvbnN0PSA7OworCSAgKikKKwkgICAgbHRfZGxzeW1fY29uc3Q9Y29uc3QgOzsKKwkgIGVzYWMKKworCSAgJEVDSE8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitleHRlcm4gJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdOworJGx0X2Rsc3ltX2NvbnN0IGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICAkRUNITyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAgezAsICh2b2lkICopIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzOworfQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmXAorIgorCX0gIyAhJG9wdF9kcnlfcnVuCisKKwlwaWNfZmxhZ19mb3Jfc3ltdGFibGU9CisJY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCisJKiIgLXN0YXRpYyAiKikgOzsKKwkqKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCisJICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKKwkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKKwkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgorCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KKwkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKKwkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIC1ERlJFRUJTRF9XT1JLQVJPVU5EIiA7OworCSAgKi0qLWhwdXgqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiWCRteV9waWNfcCIgIT0gWG5vOyB0aGVuCisJICAgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBzeW10YWJfY2ZsYWdzPSIkc3ltdGFiX2NmbGFncyAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgZWxzZQorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgICRvcHRfZGVidWcKKyAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKKyAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKKyAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCisgICAgOzsKKyAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYworICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwKKyAgICAgICAkRUdSRVAgJ2ZpbGUgZm9ybWF0IHBlLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSAkMSB8CisJJFNFRCAtbiAtZSAnCisJICAgIDEsMTAweworCQkvIEkgL3sKKwkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgcAorCQkgICAgcQorCQl9CisJICAgIH0nYAorICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgZl9leF9hbl9hcl9kaXI9IiQxIjsgc2hpZnQKKyAgICBmX2V4X2FuX2FyX29sZGxpYj0iJDEiCisgICAgZnVuY19zaG93X2V2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwiXCRmX2V4X2FuX2FyX29sZGxpYlwiKSIgJ2V4aXQgJD8nCisgICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgOgorICAgIGVsc2UKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9iamVjdCBuYW1lIGNvbmZsaWN0cyBpbiBhcmNoaXZlOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIgorICAgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgZ2VudG9wIG9sZGxpYiAuLi4KK2Z1bmNfZXh0cmFjdF9hcmNoaXZlcyAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKKyAgICBteV9vbGRsaWJzPSR7MSsiJEAifQorICAgIG15X29sZG9ianM9IiIKKyAgICBteV94bGliPSIiCisgICAgbXlfeGFicz0iIgorICAgIG15X3hkaXI9IiIKKworICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbworICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgorICAgICAgY2FzZSAkbXlfeGxpYiBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgorICAgICAgd2hpbGUgOjsgZG8KKyAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgorCSoiICRteV94bGliX3UgIiopCisJICBmdW5jX2FyaXRoICRleHRyYWN0ZWRfc2VyaWFsICsgMQorCSAgZXh0cmFjdGVkX3NlcmlhbD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIG15X3hsaWJfdT1sdCRleHRyYWN0ZWRfc2VyaWFsLSRteV94bGliIDs7CisJKikgYnJlYWsgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKworICAgICAgZnVuY19ta2Rpcl9wICIkbXlfeGRpciIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCWZ1bmNfdmVyYm9zZSAiRXh0cmFjdGluZyAkbXlfeGFicyIKKwkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCisJICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/CisJICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicworCSAgZGFyd2luX2N1cmRpcj1gcHdkYAorCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSJgCisJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKKwkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgorCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCisJICAgIGRhcndpbl9hcmNoPQorCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgorCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkYmFzZW5hbWUiIHwgc29ydCAtdWAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisJICAgICAgJExJUE8gLWNyZWF0ZSAtb3V0cHV0ICIkZGFyd2luX2ZpbGUiICRkYXJ3aW5fZmlsZXMKKwkgICAgZG9uZSAjICRkYXJ3aW5fZmlsZWxpc3QKKwkgICAgJFJNIC1yZiB1bmZhdC0kJAorCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKKwkgIGVsc2UKKwkgICAgY2QgJGRhcndpbl9vcmlnX2RpcgorCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwkgIGZpICMgJGRhcndpbl9hcmNoZXMKKwl9ICMgISRvcHRfZHJ5X3J1bgorCTs7CisgICAgICAqKQorICAgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKKwk7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisKKyMgZnVuY19lbWl0X3dyYXBwZXJfcGFydDEgW2FyZz1ub10KKyMKKyMgRW1pdCB0aGUgZmlyc3QgcGFydCBvZiBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBkZXNjcmlwdGlvbiBhc3NvY2lhdGVkIHdpdGgKKyMgZnVuY19lbWl0X3dyYXBwZXIoKSwgYmVsb3cuCitmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxX2FyZzE9bm8KKwlpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisJICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MV9hcmcxPSQxCisJZmkKKworCSRFQ0hPICJcCisjISAkU0hFTEwKKworIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisjIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKyMKKyMgVGhpcyB3cmFwcGVyIHNjcmlwdCBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCisjIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9JyR7U0VEfSAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gXCR7MStcIlwkQFwifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJ1wkezErXCJcJEBcIn0nPSdcIlwkQFwiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIFxgKHNldCAtbykgMj4vZGV2L251bGxcYCBpbiAqcG9zaXgqKSBzZXQgLW8gcG9zaXg7OyBlc2FjCitmaQorQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIgorCisjIFRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgZGV0ZXJtaW5lcyBvdXIgb3BlcmF0aW9uIG1vZGUuCitpZiB0ZXN0IFwiXCRsaWJ0b29sX2luc3RhbGxfbWFnaWNcIiA9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgIyBpbnN0YWxsIG1vZGUgbmVlZHMgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXM6CisgIGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb249JyRtYWNyb192ZXJzaW9uJworICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCitlbHNlCisgICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRFQ0hPIGFyZSBhbHJlYWR5IHNldC4KKyAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgIEVDSE89XCIkcWVjaG9cIgorICAgIGZpbGU9XCJcJDBcIgorICAgICMgTWFrZSBzdXJlIGVjaG8gd29ya3MuCisgICAgaWYgdGVzdCBcIlhcJDFcIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgorICAgICAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgICAgICBzaGlmdAorICAgIGVsaWYgdGVzdCBcIlhcYHsgXCRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxcYFwiID0gJ1hcdCc7IHRoZW4KKyAgICAgICMgWWlwcGVlLCBcJEVDSE8gd29ya3MhCisgICAgICA6CisgICAgZWxzZQorICAgICAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSBcJEVDSE8gd2lsbCB3b3JrLgorICAgICAgZXhlYyAkU0hFTEwgXCJcJDBcIiAtLW5vLXJlZXhlYyBcJHsxK1wiXCRAXCJ9CisgICAgZmkKKyAgZmlcCisiCisJJEVDSE8gIlwKKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICB3aGlsZSB0ZXN0IC1uIFwiXCRmaWxlXCI7IGRvCisgICAgZGVzdGRpcj1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSpcJCUlJ1xgCisKKyAgICAjIElmIHRoZXJlIHdhcyBhIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gY2hhbmdlIHRoaXNkaXIuCisgICAgaWYgdGVzdCBcInhcJGRlc3RkaXJcIiAhPSBcInhcJGZpbGVcIjsgdGhlbgorICAgICAgY2FzZSBcIlwkZGVzdGRpclwiIGluCisgICAgICBbXFxcXC9dKiB8IFtBLVphLXpdOltcXFxcL10qKSB0aGlzZGlyPVwiXCRkZXN0ZGlyXCIgOzsKKyAgICAgICopIHRoaXNkaXI9XCJcJHRoaXNkaXIvXCRkZXN0ZGlyXCIgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorCisgICAgZmlsZT1cYFwkRUNITyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyVeLiovJSUnXGAKKyAgICBmaWxlPVxgbHMgLWxkIFwiXCR0aGlzZGlyL1wkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MQorCisjIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyIFthcmc9bm9dCisjCisjIEVtaXQgdGhlIHNlY29uZCBwYXJ0IG9mIGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIGRlc2NyaXB0aW9uIGFzc29jaWF0ZWQgd2l0aAorIyBmdW5jX2VtaXRfd3JhcHBlcigpLCBiZWxvdy4KK2Z1bmNfZW1pdF93cmFwcGVyX3BhcnQyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfcGFydDJfYXJnMT1ubworCWlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKwkgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQyX2FyZzE9JDEKKwlmaQorCisJJEVDSE8gIlwKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0Ml9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJYXCR0aGlzZGlyXCIgfCBcJFhzZWQgLWUgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkkRUNITyAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisiCisJY2FzZSAkaG9zdCBpbgorCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworCSotKi1taW5ndyB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICAkRUNITyAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRFQ0hPICJcCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKwkgIDs7CisJZXNhYworCSRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICAkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKyMgZW5kOiBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MgorCisKKyMgZnVuY19lbWl0X3dyYXBwZXIgW2FyZz1ub10KKyMKKyMgRW1pdCBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb24gc3Rkb3V0LgorIyBEb24ndCBkaXJlY3RseSBvcGVuIGEgZmlsZSBiZWNhdXNlIHdlIG1heSB3YW50IHRvCisjIGluY29ycG9yYXRlIHRoZSBzY3JpcHQgY29udGVudHMgd2l0aGluIGEgY3lnd2luL21pbmd3CisjIHdyYXBwZXIgZXhlY3V0YWJsZS4gIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4KKyMgZnVuY19tb2RlX2xpbmsgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlcworIyBzZXQgdGhlcmVpbi4KKyMKKyMgQVJHIGlzIHRoZSB2YWx1ZSB0aGF0IHRoZSBXUkFQUEVSX1NDUklQVF9CRUxPTkdTX0lOX09CSkRJUgorIyB2YXJpYWJsZSB3aWxsIHRha2UuICBJZiAneWVzJywgdGhlbiB0aGUgZW1pdHRlZCBzY3JpcHQKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIGl0IGlzIHN0b3JlZCBpcworIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCisjIGJlaGF2aW9yLgorZnVuY19lbWl0X3dyYXBwZXIgKCkKK3sKKwlmdW5jX2VtaXRfd3JhcHBlcl9hcmcxPW5vCisJaWYgdGVzdCAtbiAiJDEiIDsgdGhlbgorCSAgZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kMQorCWZpCisKKwkjIHNwbGl0IHRoaXMgdXAgc28gdGhhdCBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisJIyBjYW4gY2FsbCBlYWNoIHBhcnQgaW5kZXBlbmRlbnRseS4KKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MSAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKKwlmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiAiJHtmdW5jX2VtaXRfd3JhcHBlcl9hcmcxfSIKK30KKworCisjIGZ1bmNfdG9faG9zdF9wYXRoIGFyZworIworIyBDb252ZXJ0IHBhdGhzIHRvIGhvc3QgZm9ybWF0IHdoZW4gdXNlZCB3aXRoIGJ1aWxkIHRvb2xzLgorIyBJbnRlbmRlZCBmb3IgdXNlIHdpdGggIm5hdGl2ZSIgbWluZ3cgKHdoZXJlIGxpYnRvb2wgaXRzZWxmCisjIGlzIHJ1bm5pbmcgdW5kZXIgdGhlIG1zeXMgc2hlbGwpLCBvciBpbiB0aGUgZm9sbG93aW5nIGNyb3NzLQorIyBidWlsZCBlbnZpcm9ubWVudHM6CisjICAgICRidWlsZCAgICAgICAgICAkaG9zdAorIyAgICBtaW5ndyAobXN5cykgICAgbWluZ3cgIFtlLmcuIG5hdGl2ZV0KKyMgICAgY3lnd2luICAgICAgICAgIG1pbmd3CisjICAgICpuaXggKyB3aW5lICAgICBtaW5ndworIyB3aGVyZSB3aW5lIGlzIGVxdWlwcGVkIHdpdGggdGhlIGB3aW5lcGF0aCcgZXhlY3V0YWJsZS4KKyMgSW4gdGhlIG5hdGl2ZSBtaW5ndyBjYXNlLCB0aGUgKG1zeXMpIHNoZWxsIGF1dG9tYXRpY2FsbHkKKyMgY29udmVydHMgcGF0aHMgZm9yIGFueSBub24tbXN5cyBhcHBsaWNhdGlvbnMgaXQgbGF1bmNoZXMsCisjIGJ1dCB0aGF0IGZhY2lsaXR5IGlzbid0IGF2YWlsYWJsZSBmcm9tIGluc2lkZSB0aGUgY3dyYXBwZXIuCisjIFNpbWlsYXIgYWNjb21tb2RhdGlvbnMgYXJlIG5lY2Vzc2FyeSBmb3IgJGhvc3QgbWluZ3cgYW5kCisjICRidWlsZCBjeWd3aW4uICBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gZG9lcyBubyBoYXJtIGZvciBvdGhlcgorIyAkaG9zdC8kYnVpbGQgY29tYmluYXRpb25zIG5vdCBsaXN0ZWQgYWJvdmUuCisjCisjIEFSRyBpcyB0aGUgcGF0aCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBmb3IgJGhvc3QuIFRoZSByZXN1bHQgaXMgc3RvcmVkCisjIGluICRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSIgOyB0aGVuCisgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKm1pbmd3KiApCisgICAgICAgIGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKyAgICAgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICAgICAqbWluZ3cqICkgIyBhY3R1YWxseSwgbXN5cworICAgICAgICAgICAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0CisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT1gKCBjbWQgLy9jIGVjaG8gIiQxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX3N0cmlwX3RyYWlsaW5nX3NwYWNlcyIgKSAyPi9kZXYvbnVsbCB8fCBlY2hvICIiYAorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgfFwKKyAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqY3lnd2luKiApCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWBjeWdwYXRoIC13ICIkMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiB8XAorICAgICAgICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgICAgICAgICA7OworICAgICAgICAgICogKQorICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybworICAgICAgICAgICAgIyBlcnJvciBjb2RlLCBzbyB3ZSBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZgorICAgICAgICAgICAgIyBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUgY29tbWFuZCBpcyBub3QKKyAgICAgICAgICAgICMgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICAgICAgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoCisgICAgICAgICAgICAjIGVycm9yIGNvZGUgb2YgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMKKyAgICAgICAgICAgICMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246CisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY190b19ob3N0X3BhdGhfdG1wMX0iOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiIHxcCisgICAgICAgICAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEFsbG93IHdhcm5pbmcgYmVsb3cuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjazoKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICAgICAgICBmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgZmkKK30KKyMgZW5kOiBmdW5jX3RvX2hvc3RfcGF0aAorCisjIGZ1bmNfdG9faG9zdF9wYXRobGlzdCBhcmcKKyMKKyMgQ29udmVydCBwYXRobGlzdHMgdG8gaG9zdCBmb3JtYXQgd2hlbiB1c2VkIHdpdGggYnVpbGQgdG9vbHMuCisjIFNlZSBmdW5jX3RvX2hvc3RfcGF0aCgpLCBhYm92ZS4gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyB0aGUKKyMgZm9sbG93aW5nICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMgKGJ1dCBkb2VzIG5vIGhhcm0gZm9yCisjIGNvbWJpbmF0aW9ucyBub3QgbGlzdGVkIGhlcmUpOgorIyAgICAkYnVpbGQgICAgICAgICAgJGhvc3QKKyMgICAgbWluZ3cgKG1zeXMpICAgIG1pbmd3ICBbZS5nLiBuYXRpdmVdCisjICAgIGN5Z3dpbiAgICAgICAgICBtaW5ndworIyAgICAqbml4ICsgd2luZSAgICAgbWluZ3cKKyMKKyMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8KKyMgJGhvc3QgZm9ybWF0LiBJZiBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yCisjIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkKKyMgb24gb3V0cHV0LgorIworIyBBUkcgaXMgYSBwYXRobGlzdCAob24gJGJ1aWxkKSB0aGF0IHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8KKyMgdGhlIHByb3BlciByZXByZXNlbnRhdGlvbiBvbiAkaG9zdC4gVGhlIHJlc3VsdCBpcyBzdG9yZWQKKyMgaW4gJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQuCitmdW5jX3RvX2hvc3RfcGF0aGxpc3QgKCkKK3sKKyAgZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBjYXNlICRob3N0IGluCisgICAgICAqbWluZ3cqICkKKyAgICAgICAgbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJworICAgICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICAgICAjIGludG8gJy47JyBhbmQgJzsuJywgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMj0iJDEiCisgICAgICAgICMgT25jZSBzZXQgZm9yIHRoaXMgY2FsbCwgdGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlCisgICAgICAgICMgcmVhc3NpZ25lZC4gSXQgaXMgdXNlZCBpbiB0aGEgZmFsbGJhY2sgY2FzZS4KKyAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDE9YGVjaG8gIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMiIgfFwKKyAgICAgICAgICAkU0VEIC1lICdzfF46Knx8JyAtZSAnc3w6KiR8fCdgCisgICAgICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAgICAgKm1pbmd3KiApICMgQWN0dWFsbHksIG1zeXMuCisgICAgICAgICAgICAjIEF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQuCisgICAgICAgICAgICBsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzPSJzL1sgXSpcJC8vIgorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YCggY21kIC8vYyBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfc3RyaXBfdHJhaWxpbmdfc3BhY2VzIiApIDI+L2Rldi9udWxsIHx8IGVjaG8gIiJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKmN5Z3dpbiogKQorICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDI9YGN5Z3BhdGggLXcgLXAgIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfdG1wMSJgCisgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDIiIHxcCisgICAgICAgICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRobGlzdHMKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IiIKKyAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlM9JElGUworICAgICAgICAgICAgSUZTPToKKyAgICAgICAgICAgIGZvciBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfZiBpbiAkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEgOyBkbworICAgICAgICAgICAgICBJRlM9JGZ1bmNfdG9faG9zdF9wYXRobGlzdF9vbGRJRlMKKyAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIiA7IHRoZW4KKyAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9mIgorICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQiIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDskZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICBJRlM9OgorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgSUZTPSRmdW5jX3RvX2hvc3RfcGF0aGxpc3Rfb2xkSUZTCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0IiA7IHRoZW4KKyAgICAgICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGgocykgY29ycmVzcG9uZGluZyB0byIKKyAgICAgICAgICBmdW5jX2Vycm9yICIgICckMSciCisgICAgICAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgICAgICAgIyBGYWxsYmFjay4gVGhpcyBtYXkgYnJlYWsgaWYgJDEgY29udGFpbnMgRE9TLXN0eWxlIGRyaXZlCisgICAgICAgICAgIyBzcGVjaWZpY2F0aW9ucy4gVGhlIGZpeCBpcyBub3QgdG8gY29tcGxpY2F0ZSB0aGUgZXhwcmVzc2lvbgorICAgICAgICAgICMgYmVsb3csIGJ1dCBmb3IgdGhlIHVzZXIgdG8gcHJvdmlkZSBhIHdvcmtpbmcgd2luZSBpbnN0YWxsYXRpb24KKyAgICAgICAgICAjIHdpdGggd2luZXBhdGggc28gdGhhdCBwYXRoIHRyYW5zbGF0aW9uIGluIHRoZSBjcm9zcy10by1taW5ndworICAgICAgICAgICMgY2FzZSB3b3JrcyBwcm9wZXJseS4KKyAgICAgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfbml4X3RvX2Rvcz0ic3w6fDt8ZyIKKyAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PWBlY2hvICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3RtcDEiIHxcCisgICAgICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX25peF90b19kb3MiYAorICAgICAgICBmaQorICAgICAgICAjIE5vdywgYWRkIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMgYmFjaworICAgICAgICBjYXNlICIkMSIgaW4KKyAgICAgICAgICA6KiApIGZ1bmNfdG9faG9zdF9wYXRobGlzdF9yZXN1bHQ9IjskZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCIKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgY2FzZSAiJDEiIGluCisgICAgICAgICAgKjogKSBmdW5jX3RvX2hvc3RfcGF0aGxpc3RfcmVzdWx0PSIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdDsiCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorfQorIyBlbmQ6IGZ1bmNfdG9faG9zdF9wYXRobGlzdAorCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisgICBDdXJyZW50bHksIGl0IHNpbXBseSBleGVjcyB0aGUgd3JhcHBlciAqc2NyaXB0KiAiJFNIRUxMICRvdXRwdXQiLAorICAgYnV0IGNvdWxkIGV2ZW50dWFsbHkgYWJzb3JiIGFsbCBvZiB0aGUgc2NyaXB0cyBmdW5jdGlvbmFsaXR5IGFuZAorICAgZXhlYyAkb2JqZGlyLyRvdXRwdXRuYW1lIGRpcmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWZkZWYgX01TQ19WRVIKKyMgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjIGluY2x1ZGUgPHByb2Nlc3MuaD4KKyMgaW5jbHVkZSA8aW8uaD4KKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyNlbHNlCisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgaWZkZWYgX19DWUdXSU5fXworIyAgaW5jbHVkZSA8aW8uaD4KKyMgIGRlZmluZSBIQVZFX1NFVEVOVgorIyAgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBTX0lYT1RICisjIGRlZmluZSBTX0lYT1RIIDAKKyNlbmRpZgorI2lmbmRlZiBTX0lYR1JQCisjIGRlZmluZSBTX0lYR1JQIDAKKyNlbmRpZgorCisjaWZkZWYgX01TQ19WRVIKKyMgZGVmaW5lIFNfSVhVU1IgX1NfSUVYRUMKKyMgZGVmaW5lIHN0YXQgX3N0YXQKKyMgaWZuZGVmIF9JTlRQVFJfVF9ERUZJTkVECisjICBkZWZpbmUgaW50cHRyX3QgaW50CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZmRlZiBfX0NZR1dJTl9fCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjZW5kaWYKKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI3VuZGVmIExUV1JBUFBFUl9ERUJVR1BSSU5URgorI2lmIGRlZmluZWQgREVCVUdXUkFQUEVSCisjIGRlZmluZSBMVFdSQVBQRVJfREVCVUdQUklOVEYoYXJncykgbHR3cmFwcGVyX2RlYnVncHJpbnRmIGFyZ3MKK3N0YXRpYyB2b2lkCitsdHdyYXBwZXJfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydCAoYXJncywgZm10KTsKKyAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworfQorI2Vsc2UKKyMgZGVmaW5lIExUV1JBUFBFUl9ERUJVR1BSSU5URihhcmdzKQorI2VuZGlmCisKK2NvbnN0IGNoYXIgKnByb2dyYW1fbmFtZSA9IE5VTEw7CisKK3ZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOworY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CitjaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOworY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKK2ludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOwordm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK2NoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKGNvbnN0IGNoYXIgKmFyZyk7Cit2b2lkIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpOwordm9pZCBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChjb25zdCBjaGFyICphcmcpOworaW50IGx0X3NwbGl0X25hbWVfdmFsdWUgKGNvbnN0IGNoYXIgKmFyZywgY2hhcioqIG5hbWUsIGNoYXIqKiB2YWx1ZSk7Cit2b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwordm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQxID0KK0VPRgorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyX3BhcnQxIHllcyB8CisJICAgICAgICAkU0VEIC1lICdzL1woW1xcIl1cKS9cXFwxL2cnIFwKKwkgICAgICAgICAgICAgLWUgJ3MvXi8gICIvJyAtZSAncy8kL1xcbiIvJworCSAgICBlY2hvICI7IgorCSAgICBjYXQgPDxFT0YKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjcmlwdF90ZXh0X3BhcnQyID0KK0VPRgorCSAgICBmdW5jX2VtaXRfd3JhcHBlcl9wYXJ0MiB5ZXMgfAorCSAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCisJICAgICAgICAgICAgIC1lICdzL14vICAiLycgLWUgJ3MvJC9cXG4iLycKKwkgICAgZWNobyAiOyIKKworCSAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRobGlzdCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhsaXN0X3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisjZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYX0xFTkdUSCAgNQorCitzdGF0aWMgY29uc3Qgc2l6ZV90IG9wdF9wcmVmaXhfbGVuICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEg7CitzdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKKworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfc2V0X29wdF9sZW4gICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgNzsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfc2V0X29wdCAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtc2V0IjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgdmFsdWUgb2YgZm9vIGlzIHNldCB0byBiYXIgKi8KKworc3RhdGljIGNvbnN0IHNpemVfdCBlbnZfcHJlcGVuZF9vcHRfbGVuID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVhfTEVOR1RIICsgMTE7CitzdGF0aWMgY29uc3QgY2hhciAqZW52X3ByZXBlbmRfb3B0ICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZW52LXByZXBlbmQiOworICAvKiBhcmd1bWVudCBpcyBwdXRlbnYtc3R5bGUgImZvbz1iYXIiLCBuZXcgdmFsdWUgb2YgZm9vIGlzIGJhciR7Zm9vfSAqLworCitzdGF0aWMgY29uc3Qgc2l6ZV90IGVudl9hcHBlbmRfb3B0X2xlbiAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWF9MRU5HVEggKyAxMDsKK3N0YXRpYyBjb25zdCBjaGFyICplbnZfYXBwZW5kX29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJlbnYtYXBwZW5kIjsKKyAgLyogYXJndW1lbnQgaXMgcHV0ZW52LXN0eWxlICJmb289YmFyIiwgbmV3IHZhbHVlIG9mIGZvbyBpcyAke2Zvb31iYXIgKi8KKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIiwgYXJndlswXSkpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIHByb2dyYW1fbmFtZSA6ICVzXG4iLCBwcm9ncmFtX25hbWUpKTsKKworICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdCAqLworICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorCXsKK0VPRgorCSAgICBjYXNlICIkaG9zdCIgaW4KKwkgICAgICAqbWluZ3cqIHwgKmN5Z3dpbiogKQorCQkjIG1ha2Ugc3Rkb3V0IHVzZSAidW5peCIgbGluZSBlbmRpbmdzCisJCWVjaG8gIiAgICAgICAgICBzZXRtb2RlKDEsX09fQklOQVJZKTsiCisJCTs7CisJICAgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisJICBwcmludGYgKCIlcyIsIHNjcmlwdF90ZXh0X3BhcnQxKTsKKwkgIHByaW50ZiAoIiVzIiwgc2NyaXB0X3RleHRfcGFydDIpOworCSAgcmV0dXJuIDA7CisJfQorICAgIH0KKworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdCA6ICVzXG4iLAorCQkJICB0bXBfcGF0aHNwZWMpKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIGZvdW5kIGV4ZSAoYWZ0ZXIgc3ltbGluayBjaGFzZSkgYXQgOiAlc1xuIiwKKwkJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB4c3RyZHVwKCBiYXNlX25hbWUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSk7CisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX3BhdGgsIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiB3cmFwcGVyIG5hbWUgdHJhbnNmb3JtcyAqLworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKyAgYWN0dWFsX2N3cmFwcGVyX25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgLyogdGFyZ2V0X25hbWUgdHJhbnNmb3JtcyAtLSB1c2UgYWN0dWFsIHRhcmdldCBwcm9ncmFtIG5hbWU7IG1pZ2h0IGhhdmUgbHQtIHByZWZpeCAqLworICB0YXJnZXRfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoVEFSR0VUX1BST0dSQU1fTkFNRSkpOworICBzdHJlbmR6YXAgKHRhcmdldF9uYW1lLCAiLmV4ZSIpOworICB0bXBfcGF0aHNwZWMgPSBsdF9leHRlbmRfc3RyICh0YXJnZXRfbmFtZSwgIi5leGUiLCAxKTsKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgdGFyZ2V0X25hbWUgPSB0bXBfcGF0aHNwZWM7CisgIHRtcF9wYXRoc3BlYyA9IDA7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJCSAgdGFyZ2V0X25hbWUpKTsKK0VPRgorCisJICAgIGNhdCA8PEVPRgorICBuZXdhcmd6WzBdID0KKyAgICBYTUFMTE9DIChjaGFyLCAoc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkgKworCQkgICAgc3RybGVuICgiJG9iamRpciIpICsgMSArIHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX25hbWUpICsgMSkpOworICBzdHJjcHkgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiJG9iamRpciIpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIvIik7CitFT0YKKworCSAgICBjYXQgPDwiRU9GIgorICAvKiBzdG9wIGhlcmUsIGFuZCBjb3B5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcyB0d2ljZSAqLworICB0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChuZXdhcmd6WzBdKTsKKworICAvKiBkbyBOT1Qgd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlLCBzbyB1c2UgYWN0dWFsX2N3cmFwcGVyX25hbWUgKi8KKyAgc3RyY2F0IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogRE8gd2FudCB0aGUgbHQtIHByZWZpeCBoZXJlIGlmIGl0IGV4aXN0cywgc28gdXNlIHRhcmdldF9uYW1lICovCisgIGx0X2FyZ3ZfemVybyA9IGx0X2V4dGVuZF9zdHIgKHRtcF9wYXRoc3BlYywgdGFyZ2V0X25hbWUsIDEpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKyAgdG1wX3BhdGhzcGVjID0gTlVMTDsKK0VPRgorCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBtaW5ndyopCisJICAgIGNhdCA8PCJFT0YiCisgIHsKKyAgICBjaGFyKiBwOworICAgIHdoaWxlICgocCA9IHN0cmNociAobmV3YXJnelswXSwgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChsdF9hcmd2X3plcm8sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICB9CitFT0YKKwkgICAgOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgbHRfc2V0ZW52ICgiQklOX1NIIiwgInhwZzQiKTsgLyogZm9yIFRydTY0ICovCisgIGx0X3NldGVudiAoIkRVQUxDQVNFIiwgIjEiKTsgIC8qIGZvciBNU0sgc2ggKi8KKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9leGVfcGF0aCAoRVhFX1BBVEhfVkFSTkFNRSwgRVhFX1BBVEhfVkFMVUUpOworCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoc3RybmNtcCAoYXJndltpXSwgZW52X3NldF9vcHQsIGVudl9zZXRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9zZXRfb3B0X2xlbl0gPT0gJz0nKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjb25zdCBjaGFyICpwID0gYXJndltpXSArIGVudl9zZXRfb3B0X2xlbiArIDE7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9zZXQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3NldF9vcHRfbGVuXSA9PSAnXDAnICYmIGkgKyAxIDwgYXJnYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3NldCAoYXJndlsrK2ldKTsgLyogZG9uJ3QgY29weSAqLworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGx0X2ZhdGFsICgiJXMgbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCIsIGVudl9zZXRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9wcmVwZW5kX29wdCwgZW52X3ByZXBlbmRfb3B0X2xlbikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChhcmd2W2ldW2Vudl9wcmVwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfcHJlcGVuZF9vcHRfbGVuICsgMTsKKyAgICAgICAgICAgICAgbHRfb3B0X3Byb2Nlc3NfZW52X3ByZXBlbmQgKHApOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbaV1bZW52X3ByZXBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChhcmd2WysraV0pOyAvKiBkb24ndCBjb3B5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgbHRfZmF0YWwgKCIlcyBtaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50IiwgZW52X3ByZXBlbmRfb3B0KTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgaWYgKHN0cm5jbXAgKGFyZ3ZbaV0sIGVudl9hcHBlbmRfb3B0LCBlbnZfYXBwZW5kX29wdF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAoYXJndltpXVtlbnZfYXBwZW5kX29wdF9sZW5dID09ICc9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV0gKyBlbnZfYXBwZW5kX29wdF9sZW4gKyAxOworICAgICAgICAgICAgICBsdF9vcHRfcHJvY2Vzc19lbnZfYXBwZW5kIChwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmIChhcmd2W2ldW2Vudl9hcHBlbmRfb3B0X2xlbl0gPT0gJ1wwJyAmJiBpICsgMSA8IGFyZ2MpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGx0X29wdF9wcm9jZXNzX2Vudl9hcHBlbmQgKGFyZ3ZbKytpXSk7IC8qIGRvbid0IGNvcHkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsdF9mYXRhbCAoIiVzIG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQiLCBlbnZfYXBwZW5kX29wdCk7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGlmIChzdHJuY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgb3B0X3ByZWZpeF9sZW4pID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoIlVucmVjb2duaXplZCBvcHRpb24gaW4gJXMgbmFtZXNwYWNlOiAnJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgsIGFyZ3ZbaV0pOworICAgICAgICB9CisgICAgICAvKiBvdGhlcndpc2UgLi4uICovCisgICAgICBuZXdhcmd6WysrbmV3YXJnY10gPSB4c3RyZHVwIChhcmd2W2ldKTsKKyAgICB9CisgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IE5VTEw7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICAgICAoKCIobWFpbikgbHRfYXJndl96ZXJvIDogJXNcbiIsIChsdF9hcmd2X3plcm8gPyBsdF9hcmd2X3plcm8gOiAiPE5VTEw+IikpKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKG1haW4pIG5ld2FyZ3pbJWRdICAgOiAlc1xuIiwgaSwgKG5ld2FyZ3pbaV0gPyBuZXdhcmd6W2ldIDogIjxOVUxMPiIpKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6IGVycm5vID0gJWRcbiIsIGx0X2FyZ3ZfemVybywgZXJybm8pKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoIk1lbW9yeSBleGhhdXN0ZWQiKTsKKworICByZXR1cm4gcDsKK30KKworY2hhciAqCit4c3RyZHVwIChjb25zdCBjaGFyICpzdHJpbmcpCit7CisgIHJldHVybiBzdHJpbmcgPyBzdHJjcHkgKChjaGFyICopIHhtYWxsb2MgKHN0cmxlbiAoc3RyaW5nKSArIDEpLAorCQkJICBzdHJpbmcpIDogTlVMTDsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIG5hbWVbMF0pICYmIG5hbWVbMV0gPT0gJzonKQorICAgIG5hbWUgKz0gMjsKKyNlbmRpZgorCisgIGZvciAoYmFzZSA9IG5hbWU7ICpuYW1lOyBuYW1lKyspCisgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKCpuYW1lKSkKKyAgICAgIGJhc2UgPSBuYW1lICsgMTsKKyAgcmV0dXJuIGJhc2U7Cit9CisKK2ludAorY2hlY2tfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKK3sKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihjaGVja19leGVjdXRhYmxlKSAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihtYWtlX2V4ZWN1dGFibGUpICAgOiAlc1xuIiwKKwkJCSAgcGF0aCA/ICgqcGF0aCA/IHBhdGggOiAiRU1QVFkhIikgOiAiTlVMTCEiKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIExUV1JBUFBFUl9ERUJVR1BSSU5URiAoKCIoZmluZF9leGVjdXRhYmxlKSAgIDogJXNcbiIsCisJCQkgIHdyYXBwZXIgPyAoKndyYXBwZXIgPyB3cmFwcGVyIDogIkVNUFRZISIpIDogIk5VTEwhIikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsICgiZ2V0Y3dkIGZhaWxlZCIpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoImdldGN3ZCBmYWlsZWQiKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJCSAgICAgIHRtcF9wYXRoc3BlYykpOworICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQorCXsKKwkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCisJICAgIHsKKwkgICAgICBoYXNfc3ltbGlua3MgPSAxOworCSAgICAgIGJyZWFrOworCSAgICB9CisKKwkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLworCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7CisJICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgcC0tOworCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICB7CisJICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCisJICAgICAgYnJlYWs7CisJICAgIH0KKwkgICpwID0gJ1wwJzsKKwl9CisgICAgICBlbHNlCisJeworCSAgY2hhciAqZXJyc3RyID0gc3RyZXJyb3IgKGVycm5vKTsKKwkgIGx0X2ZhdGFsICgiRXJyb3IgYWNjZXNzaW5nIGZpbGUgJXMgKCVzKSIsIHRtcF9wYXRoc3BlYywgZXJyc3RyKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoIkNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoc3RyY21wIChzdHIsIHBhdCkgPT0gMCkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyB2b2lkCitsdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisgIHsKKyNpZmRlZiBIQVZFX1NFVEVOVgorICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCisgICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOworICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKKyNlbHNlCisgICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOworICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7CisgICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7CisgICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCisgICAgICB7CisgICAgICAgIFhGUkVFIChzdHIpOworICAgICAgfQorI2VuZGlmCisgIH0KK30KKworY2hhciAqCitsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCit7CisgIGNoYXIgKm5ld192YWx1ZTsKKyAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCisgICAgeworICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CisgICAgICBpZiAodG9fZW5kKQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOworICAgIH0KKyAgcmV0dXJuIG5ld192YWx1ZTsKK30KKworaW50CitsdF9zcGxpdF9uYW1lX3ZhbHVlIChjb25zdCBjaGFyICphcmcsIGNoYXIqKiBuYW1lLCBjaGFyKiogdmFsdWUpCit7CisgIGNvbnN0IGNoYXIgKnA7CisgIGludCBsZW47CisgIGlmICghYXJnIHx8ICEqYXJnKQorICAgIHJldHVybiAxOworCisgIHAgPSBzdHJjaHIgKGFyZywgKGludCknPScpOworCisgIGlmICghcCkKKyAgICByZXR1cm4gMTsKKworICAqdmFsdWUgPSB4c3RyZHVwICgrK3ApOworCisgIGxlbiA9IHN0cmxlbiAoYXJnKSAtIHN0cmxlbiAoKnZhbHVlKTsKKyAgKm5hbWUgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICBzdHJuY3B5ICgqbmFtZSwgYXJnLCBsZW4tMSk7CisgICgqbmFtZSlbbGVuIC0gMV0gPSAnXDAnOworCisgIHJldHVybiAwOworfQorCit2b2lkCitsdF9vcHRfcHJvY2Vzc19lbnZfc2V0IChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3NldF9vcHQsIGFyZyk7CisgICAgfQorCisgIGx0X3NldGVudiAobmFtZSwgdmFsdWUpOworICBYRlJFRSAobmFtZSk7CisgIFhGUkVFICh2YWx1ZSk7Cit9CisKK3ZvaWQKK2x0X29wdF9wcm9jZXNzX2Vudl9wcmVwZW5kIChjb25zdCBjaGFyICphcmcpCit7CisgIGNoYXIgKm5hbWUgPSBOVUxMOworICBjaGFyICp2YWx1ZSA9IE5VTEw7CisgIGNoYXIgKm5ld192YWx1ZSA9IE5VTEw7CisKKyAgaWYgKGx0X3NwbGl0X25hbWVfdmFsdWUgKGFyZywgJm5hbWUsICZ2YWx1ZSkgIT0gMCkKKyAgICB7CisgICAgICBYRlJFRSAobmFtZSk7CisgICAgICBYRlJFRSAodmFsdWUpOworICAgICAgbHRfZmF0YWwgKCJiYWQgYXJndW1lbnQgZm9yICVzOiAnJXMnIiwgZW52X3ByZXBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfb3B0X3Byb2Nlc3NfZW52X2FwcGVuZCAoY29uc3QgY2hhciAqYXJnKQoreworICBjaGFyICpuYW1lID0gTlVMTDsKKyAgY2hhciAqdmFsdWUgPSBOVUxMOworICBjaGFyICpuZXdfdmFsdWUgPSBOVUxMOworCisgIGlmIChsdF9zcGxpdF9uYW1lX3ZhbHVlIChhcmcsICZuYW1lLCAmdmFsdWUpICE9IDApCisgICAgeworICAgICAgWEZSRUUgKG5hbWUpOworICAgICAgWEZSRUUgKHZhbHVlKTsKKyAgICAgIGx0X2ZhdGFsICgiYmFkIGFyZ3VtZW50IGZvciAlczogJyVzJyIsIGVudl9hcHBlbmRfb3B0LCBhcmcpOworICAgIH0KKworICBuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMSk7CisgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgWEZSRUUgKG5ld192YWx1ZSk7CisgIFhGUkVFIChuYW1lKTsKKyAgWEZSRUUgKHZhbHVlKTsKK30KKwordm9pZAorbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgTFRXUkFQUEVSX0RFQlVHUFJJTlRGICgoIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUgPyBuYW1lIDogIjxOVUxMPiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgPyB2YWx1ZSA6ICI8TlVMTD4iKSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBMVFdSQVBQRVJfREVCVUdQUklOVEYgKCgiKGx0X3VwZGF0ZV9saWJfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZSA/IG5hbWUgOiAiPE5VTEw+IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA/IHZhbHVlIDogIjxOVUxMPiIpKSk7CisKKyAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQorICAgIHsKKyAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKKyAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKKyAgICAgIFhGUkVFIChuZXdfdmFsdWUpOworICAgIH0KK30KKworCitFT0YKK30KKyMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICRob3N0IGluCisgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKKyAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKKyAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgZmxhZyBmb3IgZXZlcnkgbGlidG9vbCBpbnZvY2F0aW9uLgorICAgICAgIyBhbGxvd191bmRlZmluZWQ9bm8KKworICAgICAgIyBGSVhNRTogVW5mb3J0dW5hdGVseSwgdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggdGhlIGFib3ZlIHdoZW4gdHJ5aW5nCisgICAgICAjIHRvIG1ha2UgYSBkbGwgd2hpY2ggaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgZGxmaWxlcz0KKyAgICBkbHByZWZpbGVzPQorICAgIGRsc2VsZj1ubworICAgIGV4cG9ydF9keW5hbWljPW5vCisgICAgZXhwb3J0X3N5bWJvbHM9CisgICAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9CisgICAgZ2VuZXJhdGVkPQorICAgIGxpYm9ianM9CisgICAgbHRsaWJzPQorICAgIG1vZHVsZT1ubworICAgIG5vX2luc3RhbGw9bm8KKyAgICBvYmpzPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPW5vCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgorICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKKworICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXNoYXJlZCkKKwl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCisJYnVpbGRfb2xkX2xpYnM9bm8KKwlicmVhaworCTs7CisgICAgICAtYWxsLXN0YXRpYyB8IC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwljYXNlICRhcmcgaW4KKwktYWxsLXN0YXRpYykKKwkgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgLXogIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwktc3RhdGljKQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCSAgOzsKKwktc3RhdGljLWxpYnRvb2wtbGlicykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJICA7OworCWVzYWMKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwlicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBTZWUgaWYgb3VyIHNoYXJlZCBhcmNoaXZlcyBkZXBlbmQgb24gc3RhdGljIGFyY2hpdmVzLgorICAgIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiBidWlsZF9vbGRfbGlicz15ZXMKKworICAgICMgR28gdGhyb3VnaCB0aGUgYXJndW1lbnRzLCB0cmFuc2Zvcm1pbmcgdGhlbSBvbiB0aGUgd2F5LgorICAgIHdoaWxlIHRlc3QgIiQjIiAtZ3QgMDsgZG8KKyAgICAgIGFyZz0iJDEiCisgICAgICBzaGlmdAorICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKyAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisgICAgICBmdW5jX2FwcGVuZCBsaWJ0b29sX2FyZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisKKyAgICAgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICAgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJY2FzZSAkcHJldiBpbgorCW91dHB1dCkKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgOzsKKwllc2FjCisKKwljYXNlICRwcmV2IGluCisJZGxmaWxlc3xkbHByZWZpbGVzKQorCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPXllcworCSAgZmkKKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICBlbHNlCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXhwc3ltcykKKwkgIGV4cG9ydF9zeW1ib2xzPSIkYXJnIgorCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWV4cHN5bXNfcmVnZXgpCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGRlcGxpYnM9IiRkZXBsaWJzICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKKwkJICAgOzsKKwkgICAgICBlc2FjCisJICAgICAgOzsKKwkgIGVzYWMKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlpbnN0X3ByZWZpeCkKKwkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlvYmplY3RsaXN0KQorCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KKwkgICAgc2F2ZV9hcmc9JGFyZworCSAgICBtb3JlYXJncz0KKwkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAorCSAgICBkbworIwkgICAgICBtb3JlYXJncz0iJG1vcmVhcmdzICRmaWwiCisJICAgICAgYXJnPSRmaWwKKwkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCQlwaWNfb2JqZWN0PQorCQlub25fcGljX29iamVjdD0KKworCQkjIFJlYWQgdGhlIC5sbyBmaWxlCisJCWZ1bmNfc291cmNlICIkYXJnIgorCisJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKworCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICAgICAgZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkJICAgIHByZXY9CisJCSAgZmkKKworCQkgICMgQSBQSUMgb2JqZWN0LgorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCQkgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJZmkKKwkgICAgICBlbHNlCisJCSMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgorCQlpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkJICBmdW5jX2xvMm8gIiRhcmciCisJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgICAgIGVsc2UKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXByZWNpb3VzX3JlZ2V4KQorCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcmVsZWFzZSkKKwkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlzaHJleHQpCisJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgd2Vha19saWJzPSIkd2Vha19saWJzICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJeGNjbGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCXhjb21waWxlcikKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4bGlua2VyKQorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRxYXJnIgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0iJGFyZyIKKworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtYWxsLXN0YXRpYykKKwlpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICMgU2VlIGNvbW1lbnQgZm9yIC1zdGF0aWMgZmxhZyBiZWxvdywgZm9yIG1vcmUgZGV0YWlscy4KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRsaW5rX3N0YXRpY19mbGFnIgorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtYWxsb3ctdW5kZWZpbmVkKQorCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KKwlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCisJICBwcmV2PWV4cHN5bXMKKwllbHNlCisJICBwcmV2PWV4cHN5bXNfcmVnZXgKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yaworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWluc3QtcHJlZml4LWRpcikKKwlwcmV2PWluc3RfcHJlZml4CisJY29udGludWUKKwk7OworCisgICAgICAjIFRoZSBuYXRpdmUgSVJJWCBsaW5rZXIgdW5kZXJzdGFuZHMgLUxBTkc6KiwgLUxJU1Q6KiBhbmQgLUxOTzoqCisgICAgICAjIHNvLCBpZiB3ZSBzZWUgdGhlc2UgZmxhZ3MgYmUgY2FyZWZ1bCBub3QgdG8gdHJlYXQgdGhlbSBsaWtlIC1MCisgICAgICAtTFtBLVpdW0EtWl0qOiopCisJY2FzZSAkd2l0aF9nY2MvJGhvc3QgaW4KKwluby8qLSotaXJpeCogfCAvKi0qLWlyaXgqKQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtTCopCisJZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWlmIHRlc3QgLXogIiRkaXIiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJICB0ZXN0IC16ICIkYWJzZGlyIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiopIDs7CisJKikKKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKwkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiWCRkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIFN5c3RlbS5sdGZyYW1ld29yayIKKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKKwkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKwkgY2FzZSAkaG9zdCBpbgorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAjIERvIG5vdCBpbmNsdWRlIGxpYmNfciBkaXJlY3RseSwgdXNlIC1wdGhyZWFkIGZsYWcuCisJICAgY29udGludWUKKwkgICA7OworCSBlc2FjCisJZmkKKwlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdCkKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwlwcmV2PXhjb21waWxlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWZhc3QtaW5zdGFsbCkKKwlmYXN0X2luc3RhbGw9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1pbnN0YWxsKQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW8pIHByZXY9b3V0cHV0IDs7CisKKyAgICAgIC1wcmVjaW91cy1maWxlcy1yZWdleCkKKwlwcmV2PXByZWNpb3VzX3JlZ2V4CisJY29udGludWUKKwk7OworCisgICAgICAtcmVsZWFzZSkKKwlwcmV2PXJlbGVhc2UKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1ycGF0aCkKKwlwcmV2PXJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUikKKwlwcmV2PXhycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIqKQorCWZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRhcmciCisJZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtc2hhcmVkKQorCSMgVGhlIGVmZmVjdHMgb2YgLXNoYXJlZCBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCisJY29udGludWUKKwk7OworCisgICAgICAtc2hyZXh0KQorCXByZXY9c2hyZXh0CisJY29udGludWUKKwk7OworCisgICAgICAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24tbnVtYmVyKQorCXByZXY9dmluZm8KKwl2aW5mb19udW1iZXI9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCisgICAgICAtV2MsKikKKwlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBhcmc9IiRhcmcgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1XbCwqKQorCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGFyZz0iJGFyZyAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgIC1YY29tcGlsZXIpCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YbGlua2VyKQorCXByZXY9eGxpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVhDQ2xpbmtlcikKKwlwcmV2PXhjY2xpbmtlcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtbXNnXyogZm9yIG9zZiBjYworICAgICAgLW1zZ18qKQorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKworICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qLCAtdFs0NV0qLCAtdHhzY2FsZSogcGFzcyB0aHJvdWdoIGFyY2hpdGVjdHVyZS1zcGVjaWZpYworICAgICAgIyBjb21waWxlciBhcmdzIGZvciBHQ0MKKyAgICAgICMgLUYvcGF0aCBnaXZlcyBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogcGFzcyB0aHJvdWdoIHByb2ZpbGluZyBmbGFnIGZvciBHQ0MKKyAgICAgICMgQGZpbGUgR0NDIHJlc3BvbnNlIGZpbGVzCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCTs7CisKKyAgICAgICouJG9iamV4dCkKKwkjIEEgc3RhbmRhcmQgb2JqZWN0LgorCW9ianM9IiRvYmpzICRhcmciCisJOzsKKworICAgICAgKi5sbykKKwkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICBmdW5jX3NvdXJjZSAiJGFyZyIKKworCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8CisJICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgIGlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJZGxmaWxlcz0iJGRsZmlsZXMgJHBpY19vYmplY3QiCisJCXByZXY9CisJCWNvbnRpbnVlCisJICAgICAgZWxzZQorCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQlwcmV2PWRscHJlZmlsZXMKKwkgICAgICBmaQorCSAgICBmaQorCisJICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCisJICAgICAgYXJnPSIkbm9uX3BpY19vYmplY3QiCisJICAgIGZpCisJICBlbHNlCisJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkgIGZpCisJZWxzZQorCSAgIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKwkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJOzsKKyAgICAgIGVzYWMgIyBhcmcKKworICAgICAgIyBOb3cgYWN0dWFsbHkgc3Vic3RpdHV0ZSB0aGUgYXJndW1lbnQgaW50byB0aGUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkYXJnIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICBmaQorICAgIGRvbmUgIyBhcmd1bWVudCBwYXJzaW5nIGxvb3AKKworICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICAjIENyZWF0ZSB0aGUgb2JqZWN0IGRpcmVjdG9yeS4KKyAgICBmdW5jX21rZGlyX3AgIiRvdXRwdXRfb2JqZGlyIgorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCisgICAgICA7OworICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CisgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CisgICAgKi5sYSkgbGlua21vZGU9bGliIDs7CisgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KKyAgICBlc2FjCisKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2RlcHMgOyB0aGVuCisJY2FzZSAiJGxpYnMgIiBpbgorCSoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgbGlicz0iJGxpYnMgJGRlcGxpYiIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKKworICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKKyAgICAgICMgJHBvc3RkZXBzIGFuZCBtYXJrIHRoZW0gYXMgc3BlY2lhbCAoaS5lLiwgd2hvc2UgZHVwbGljYXRlcyBhcmUKKyAgICAgICMgbm90IHRvIGJlIGVsaW1pbmF0ZWQpLgorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICAgIGlmICRvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgcHJvZykKKwljb21waWxlX2RlcGxpYnM9CisJZmluYWxpemVfZGVwbGlicz0KKwlhbGxkZXBsaWJzPW5vCisJbmV3ZGxmaWxlcz0KKwluZXdkbHByZWZpbGVzPQorCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKKwk7OworICAgICopICBwYXNzZXM9ImNvbnYiCisJOzsKKyAgICBlc2FjCisKKyAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbworICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCisgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCisJbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWNhc2UgJHBhc3MgaW4KKwlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OworCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KKwkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCisJZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKKwkgIGRlcGVuZGVuY3lfbGlicz0KKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRsaWIiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisgICAgICAgICAgICBkZXBsaWJfYmFzZT1gJEVDSE8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCisJICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKKwkgICAgKikgZGVwbGlicz0iJGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKworICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KKwlsaWI9CisJZm91bmQ9bm8KKwljYXNlICRkZXBsaWIgaW4KKwktbXR8LW10aHJlYWRzfC1rdGhyZWFkfC1LdGhyZWFkfC1wdGhyZWFkfC1wdGhyZWFkc3wtLXRocmVhZC1zYWZlfC10aHJlYWRzKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWIiCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCisJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJCSAgICAqIiAkZGVwbGliICIqKSA7OworCQkgICAgKiApIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGRlcGxpYiIgOzsKKwkJZXNhYworCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCS1sKikKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZzsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgZnVuY19zdHJpcG5hbWUgJy1sJyAnJyAiJGRlcGxpYiIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycyAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBlbHNlCisJICAgIHNlYXJjaGRpcnM9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGgiCisJICBmaQorCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KKwkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KKwkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5CisJICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJCWlmIHRlc3QgIiRzZWFyY2hfZXh0IiA9ICIubGEiOyB0aGVuCisJCSAgZm91bmQ9eWVzCisJCWVsc2UKKwkJICBmb3VuZD1ubworCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgdGVzdCAiJGZvdW5kIiAhPSB5ZXM7IHRoZW4KKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICBlbHNlICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikKKwkJaWYgZnVuY19sYWxpYl9wICIkbGliIjsgdGhlbgorCQkgIGxpYnJhcnlfbmFtZXM9CisJCSAgb2xkX2xpYnJhcnk9CisJCSAgZnVuY19zb3VyY2UgIiRsaWIiCisJCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCQkgICAgbGw9IiRsIgorCQkgIGRvbmUKKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQorCQkgICAgZm91bmQ9bm8KKwkJICAgIGZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJCSAgICBsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGZpCisJICA7OyAjIC1sCisJKi5sdGZyYW1ld29yaykKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLUwqKQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgdGVzdCAiJHBhc3MiID0gY29udiAmJiBjb250aW51ZQorCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICA7OworCSAgKikKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICBjb250aW51ZQorCSAgOzsgIyAtTAorCS1SKikKKwkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGRlcGxpYiIKKwkgICAgZGlyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgICAgY2FzZSAiJHhycGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgIGNvbnRpbnVlCisJICA7OworCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPW5vCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiWCRkZXBsaWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgXAorCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCisJCSAgdmFsaWRfYV9saWI9eWVzCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCSRFQ0hPICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkRUNITyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJEVDSE8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCQkkRUNITyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZSBoZXJlLiIKKwkgICAgICBlbHNlCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwklREVQTElCUyUpCisJICBhbGxkZXBsaWJzPXllcworCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJaWYgdGVzdCAiJGZvdW5kIiA9IHllcyB8fCB0ZXN0IC1mICIkbGliIjsgdGhlbiA6CisJZWxzZQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCisJbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIlgkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCisJICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCisJICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OworCSAgICAgICopIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiWCAkZGVwZW5kZW5jeV9saWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CisJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CisJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KKwkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKKwkgICAgZmkKKwkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgorCSAgICBjb252ZW5pZW5jZT0iJGNvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgb2xkX2NvbnZlbmllbmNlPSIkb2xkX2NvbnZlbmllbmNlICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKKwkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9kdXBsaWNhdGVfZGVwcyA7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgIGRvbmUKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgbGlua2xpYj0iJGwiCisJZG9uZQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJZmkKKworCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgorCSAgZmkKKwkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CisJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAorCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgorCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZworCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQorCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAorCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCisJICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIgJGRlcGVuZGVuY3lfbGlicyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9IiRsYWRpciIgOzsKKwkqKQorCSAgYWJzX2xhZGlyPWBjZCAiJGxhZGlyIiAmJiBwd2RgCisJICBpZiB0ZXN0IC16ICIkYWJzX2xhZGlyIjsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0iJGxhZGlyIgorCSAgZmkKKwkgIDs7CisJZXNhYworCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisKKwkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KKwlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAibGlicmFyeSBcYCRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0iJGxhZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCisJICAgIGxpYmRpcj0iJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGliZGlyIgorCSAgICBhYnNkaXI9IiRsaWJkaXIiCisJICBmaQorCSAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gWHllcyAmJiBhdm9pZHRlbXBycGF0aD15ZXMKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRsYWRpci8kb2JqZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgorCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGZpCisJZmkgIyAkaW5zdGFsbGVkID0geWVzCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKKwkgIGZpCisJICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKKwkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCWRscHJlY29udmVuaWVuY2VsaWJzPSIkZGxwcmVjb252ZW5pZW5jZWxpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCisJICBlbHNlCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCisJICBmaQorCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCSA7OworCSAgICBlc2FjCisJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KKwkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICAjIE5lZWQgdG8gaGFyZGNvZGUgc2hhcmVkIGxpYnJhcnkgcGF0aHMKKwkgICAgICAjIG9yL2FuZCBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnJhcmllcworCSAgICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB7IHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMiID0gbm8gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAorCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgICoiJGFic2RpcjoiKikgOzsKKwkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiCisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCisKKwkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgorCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKKwkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgbm90aW5zdF9kZXBsaWJzPSIkbm90aW5zdF9kZXBsaWJzICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9bm8KKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KKwkgICAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0iIgorCSAgZm9yIGRscHJlbW9kdWxldGVzdCBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgaWYgdGVzdCAiWCRkbHByZW1vZHVsZXRlc3QiID0gIlgkbGliIjsgdGhlbgorCSAgICAgIGRsb3Blbm1vZHVsZT0iJGRscHJlbW9kdWxldGVzdCIKKwkgICAgICBicmVhaworCSAgICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCAteiAiJGRsb3Blbm1vZHVsZSIgJiYgdGVzdCAiJHNob3VsZG5vdGxpbmsiID0geWVzICYmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9IiRkbG5hbWUiCisJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgICAgICMgYmxlaCB3aW5kb3dzCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9Ii0kbWFqb3IiCisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwkgICAgZWxzZQorCSAgICAgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgICBmaQorCisJICAgICMgTWFrZSBhIG5ldyBuYW1lIGZvciB0aGUgZXh0cmFjdF9leHBzeW1zX2NtZHMgdG8gdXNlCisJICAgIHNvcm9vdD0iJHNvbmFtZSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKKworCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdworCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgorCSAgICBlbHNlCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yIFxgJHNvbmFtZSciCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIgJ2V4aXQgJD8nCisJICAgIGZpCisJICAgICMgbWFrZSBzdXJlIHRoZSBsaWJyYXJ5IHZhcmlhYmxlcyBhcmUgcG9pbnRpbmcgdG8gdGhlIG5ldyBsaWJyYXJ5CisJICAgIGRpcj0kb3V0cHV0X29iamRpcgorCSAgICBsaW5rbGliPSRuZXdsaWIKKwkgIGZpICMgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIgorCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCQljYXNlICRob3N0IGluCisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLWRhcndpbiogKQorCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KKwkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKKwkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQkgICRFQ0hPCisJCQkgICRFQ0hPICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgJEVDSE8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgorCQkJZWxzZQorCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJZmkKKwkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCisJCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OworCQllc2FjCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgcmVsaW5rKQorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgorCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJCSAgY2FzZSAkbGliZGlyIGluCisJCSAgICBbXFwvXSopCisJCSAgICAgIGFkZF9kaXI9IiRhZGRfZGlyIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICAgIDs7CisJCSAgZXNhYworCQlmaQorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0iJGRpciIKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsc2UKKwkJbGliX2xpbmtlZD1ubworCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikgbGliX2xpbmtlZD1ubyA7OworCSAgICBlc2FjCisKKwkgICAgaWYgdGVzdCAiJGxpYl9saW5rZWQiICE9IHllczsgdGhlbgorCSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkYWRkX3NobGlicGF0aCI7IHRoZW4KKwkgICAgICBjYXNlIDokY29tcGlsZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGFkZF9zaGxpYnBhdGg6IiopIDs7CisJICAgICAgKikgY29tcGlsZV9zaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRhZGRfc2hsaWJwYXRoOiIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZF9kaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGQgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBkZXBsaWJzPSIkYWRkX2RpciAkZGVwbGlicyIKKwkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBkZXBsaWJzPSIkYWRkICRkZXBsaWJzIgorCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJgorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCisJICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KKwkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgorCSAgICAgICoiOiRsaWJkaXI6IiopIDs7CisJICAgICAgKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJICAgICAgZXNhYworCSAgICAgIGFkZD0iLWwkbmFtZSIKKwkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCisJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCisJCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZWxzZQorCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgICRFQ0hPICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICAkRUNITyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCSRFQ0hPICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCSRFQ0hPICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCQkgICBjYXNlICIgJHhycGF0aCAiIGluCisJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKKwkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSB0ZW1wX2RlcGxpYnM9IiR0ZW1wX2RlcGxpYnMgJGxpYmRpciI7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICBmaQorCisJICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggJGFic2RpciIKKwkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQorCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBpZiAkb3B0X2R1cGxpY2F0ZV9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAgIC1MKikgcGF0aD0iJGRlcGxpYiIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJCWNhc2UgJGRpciBpbgorCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKKwkJKikKKwkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCisJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgorCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgIGZpCisJCSAgOzsKKwkJZXNhYworCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgIGRlcGRlcGw9CisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzIC1keWxpYl9maWxlICR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKKwkJICAgICAgcGF0aD0KKwkJICAgIGZpCisJCSAgZmkKKwkJICA7OworCQkqKQorCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCSAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiXGAkZGVwbGliJyBzZWVtcyB0byBiZSBtb3ZlZCIKKworCQkgIHBhdGg9Ii1MJGFic2RpciIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9ICJwcm9nIjsgdGhlbgorCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKKwkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIlggJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCWZpCisgICAgICBmaQorICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgIGZpCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKworICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKworCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCisJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwllbHNlCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgICRFQ0hPCisJICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCisJICAkRUNITyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKworICAgICAgb2xkbGlicz0KKyAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KKwkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KKwkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KKwkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCisJICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKKwkgIGJ1aWxkX29sZF9saWJzPXllcworCWZpCisKKwl0ZXN0IC1uICIkdmluZm8iICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorICAgICAgZWxzZQorCisJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KKwlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKKwlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKKwlJRlM9IiRzYXZlX2lmcyIKKworCXRlc3QgLW4gIiQ3IiAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKKworCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCisJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKKwkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQorCisJY2FzZSAkdmluZm9fbnVtYmVyIGluCisJeWVzKQorCSAgbnVtYmVyX21ham9yPSIkMSIKKwkgIG51bWJlcl9taW5vcj0iJDIiCisJICBudW1iZXJfcmV2aXNpb249IiQzIgorCSAgIworCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKKwkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCisJICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcworCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAorCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGFnZT0iJG51bWJlcl9taW5vciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCisJICAgIDs7CisJICBlc2FjCisJICA7OworCW5vKQorCSAgY3VycmVudD0iJDEiCisJICByZXZpc2lvbj0iJDIiCisJICBhZ2U9IiQzIgorCSAgOzsKKwllc2FjCisKKwkjIENoZWNrIHRoYXQgZWFjaCBvZiB0aGUgdGhpbmdzIGFyZSB2YWxpZCBudW1iZXJzLgorCWNhc2UgJGN1cnJlbnQgaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJHJldmlzaW9uIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwlmaQorCisJIyBDYWxjdWxhdGUgdGhlIHZlcnNpb24gdmFyaWFibGVzLgorCW1ham9yPQorCXZlcnN1ZmZpeD0KKwl2ZXJzdHJpbmc9CisJY2FzZSAkdmVyc2lvbl90eXBlIGluCisJbm9uZSkgOzsKKworCWRhcndpbikKKwkgICMgTGlrZSBMaW51eCwgYnV0IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiBhdmFpbGFibGUgaW4KKwkgICMgdmVyc3RyaW5nIGZvciBjb2RpbmcgaXQgaW50byB0aGUgbGlicmFyeSBoZWFkZXIKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgICMgRGFyd2luIGxkIGRvZXNuJ3QgbGlrZSAwIGZvciB0aGVzZSBvcHRpb25zLi4uCisJICBmdW5jX2FyaXRoICRjdXJyZW50ICsgMQorCSAgbWlub3JfY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHhsY3ZlcnN0cmluZz0iJHt3bH0tY29tcGF0aWJpbGl0eV92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQgJHt3bH0tY3VycmVudF92ZXJzaW9uICR7d2x9JG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgOzsKKworCWZyZWVic2QtYW91dCkKKwkgIG1ham9yPSIuJGN1cnJlbnQiCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBpZiB0ZXN0ICJYJGx0X2lyaXhfaW5jcmVtZW50IiA9ICJYbm8iOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICBkb25lCisKKwkgICMgQmVmb3JlIHRoaXMgcG9pbnQsICRtYWpvciBtdXN0IG5vdCBjb250YWluIGAuJy4KKwkgIG1ham9yPS4kbWFqb3IKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlsaW51eCkKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIDs7CisKKwlvc2YpCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCisJICAjIEFkZCBpbiBhbGwgdGhlIGludGVyZmFjZXMgdGhhdCB3ZSBhcmUgY29tcGF0aWJsZSB3aXRoLgorCSAgbG9vcD0kYWdlCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCisJICA7OworCWVzYWMKKworCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCisJaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgIG1ham9yPQorCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisJICBkYXJ3aW4pCisJICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZworCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5CisJICAgIHZlcnN0cmluZz0KKwkgICAgOzsKKwkgICopCisJICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0iLjAuMCIKKwkgIGZpCisJZmkKKworCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAorCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBtYWpvcj0KKwkgIHZlcnN1ZmZpeD0KKwkgIHZlcnN0cmluZz0iIgorCWZpCisKKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCisJaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCisJICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBidWlsZF9vbGRfbGlicz15ZXMKKwkgIGZpCisJZWxzZQorCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBsaWJvYmpzPSIkbGlib2JqcyAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKyAgICAgIGlmIHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkjIFJlbW92ZSBvdXIgb3V0cHV0cywgYnV0IGRvbid0IHJlbW92ZSBvYmplY3QgZmlsZXMgc2luY2UgdGhleQorCSMgbWF5IGhhdmUgYmVlbiBjcmVhdGVkIHdoZW4gY29tcGlsaW5nIFBJQyBvYmplY3RzLgorCXJlbW92ZWxpc3Q9CisJdGVtcHJlbW92ZWxpc3Q9YCRFQ0hPICIkb3V0cHV0X29iamRpci8qImAKKwlmb3IgcCBpbiAkdGVtcHJlbW92ZWxpc3Q7IGRvCisJICBjYXNlICRwIGluCisJICAgICouJG9iamV4dCB8ICouZ2NubykKKwkgICAgICAgOzsKKwkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKKwkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQorCQkgdGhlbgorCQkgICBjb250aW51ZQorCQkgZmkKKwkgICAgICAgZmkKKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIlgkbGliX3NlYXJjaF9wYXRoICIgfCAkWHNlZCAtZSAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICJYJGRlcGxpYnMgIiB8ICRYc2VkIC1lICJzJSAtTCRwYXRoICUgJWciYAorICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICJYJGRlcGVuZGVuY3lfbGlicyAiIHwgJFhzZWQgLWUgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjZG9uZQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwl0ZW1wX3hycGF0aD0KKwlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCisJICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKwlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF94cnBhdGggJGRlcGVuZGVuY3lfbGlicyIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgZGxmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcyB0aGF0IHdvbid0IGJlIGRscHJlb3BlbmVkCisgICAgICBvbGRfZGxmaWxlcz0iJGRsZmlsZXMiCisgICAgICBkbGZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCisJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRsZmlsZXM9IiRkbGZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMiCisgICAgICBkbHByZWZpbGVzPQorICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCisJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBkZXBsaWJzPSIkZGVwbGlicyBTeXN0ZW0ubHRmcmFtZXdvcmsiCisJICAgIDs7CisJICAqLSotbmV0YnNkKikKKwkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCisJICAgIDs7CisJICAqLSotc2NvMy4ydjUqIHwgKi0qLXNjbzV2NiopCisJICAgICMgQ2F1c2VzIHByb2JsZW1zIHdpdGggX19jdHlwZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIDs7CisJICAqKQorCSAgICAjIEFkZCBsaWJjIHRvIGRlcGxpYnMgb24gYWxsIG90aGVyIHN5c3RlbXMgaWYgbmVjZXNzYXJ5LgorCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9uZWVkX2xjIiA9ICJ5ZXMiOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYnMgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPSIiCisJdmVyc3VmZml4PSIiCisJbWFqb3I9IiIKKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJICAqIiAkaSAiKikKKwkJICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgorCQkgICAgaT0iIgorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICBlbHNlCisJCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICRFQ0hPCisJCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgJEVDSE8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKKwkJICAgICRFQ0hPICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICAkRUNITyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgIGZpCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgICAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAorCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICAgIGRlcGxpYl9tYXRjaD0kMQorCQkgICAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGVsc2UKKwkJICAgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAgICRFQ0hPCisJCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKKwkJICAgICAgJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgICRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgICAkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgICRFQ0hPICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgICBmaQorCQkgIGZpCisJCWVsc2UKKwkJICBkcm9wcGVkZGVwcz15ZXMKKwkJICAkRUNITworCQkgICRFQ0hPICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCisJCSAgJEVDSE8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICAkRUNITyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKwkJICAkRUNITyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpCisJICA7OworCWZpbGVfbWFnaWMqKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8CisJCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KKwkJCWNvbnRpbnVlCisJCSAgICAgIGZpCisJCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgorCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCisJCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKKwkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAorCQkgICAgICAjIGJ1dCBzbyB3aGF0PworCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgorCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiWCRwb3RsaWIiIHwgJFhzZWQgLWUgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJZXNhYworCQkgICAgICBkb25lCisJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CisJCQkgJFNFRCAtZSAxMHEgfAorCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCQluZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0iIgorCQkJYnJlYWsgMgorCQkgICAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRFQ0hPCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJEVDSE8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRFQ0hPICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkRUNITyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkRUNITyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0iJHBvdGVudF9saWIiICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CisJCSAgICBpZiBldmFsICJcJEVDSE8gXCJYJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkWHNlZCAtZSAxMHEgfCBcCisJCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPSIiCisJCSAgICAgIGJyZWFrIDIKKwkJICAgIGZpCisJCSAgZG9uZQorCQlkb25lCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJJEVDSE8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQkkRUNITyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJJEVDSE8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSRFQ0hPICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSRFQ0hPICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIlggJGRlcGxpYnMiIHwgJFhzZWQgXAorCSAgICAgIC1lICdzLyAtbGMkLy8nIC1lICdzLyAtW0xSXVteIF0qLy9nJ2AKKwkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KKwkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGlmICRFQ0hPICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bCSBdLy9nJyB8CisJICAgICAkR1JFUCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgJEVDSE8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgICRFQ0hPICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgZmkKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICRFQ0hPCisJICAgICRFQ0hPICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICAkRUNITyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgICRFQ0hPICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgJEVDSE8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgJEVDSE8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICAkRUNITyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgICRFQ0hPICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICAkRUNITyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgJEVDSE8KKwkgICAgICAkRUNITyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICAkRUNITyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgJEVDSE8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICAkRUNITyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICJYICRuZXdkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICJYICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkWHNlZCAtZSAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIGRlcGxpYnM9YCRFQ0hPICJYICRkZXBsaWJzIiB8ICRYc2VkIC1lICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CisgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdAorICAgICAgbmV3X2xpYnM9CisgICAgICBmb3IgcGF0aCBpbiAkbm90aW5zdF9wYXRoOyBkbworCWNhc2UgIiAkbmV3X2xpYnMgIiBpbgorCSoiIC1MJHBhdGgvJG9iamRpciAiKikgOzsKKwkqKQorCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZGVwbGlicz0iJG5ld19saWJzIgorCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKwkgIGhhcmRjb2RlX2xpYmRpcnM9CisJICBkZXBfcnBhdGg9CisJICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgorCSAgdGVzdCAiJG1vZGUiICE9IHJlbGluayAmJiBycGF0aD0iJGNvbXBpbGVfcnBhdGgkcnBhdGgiCisJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBoYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJICAgIDs7CisJCSAgZXNhYworCQlmaQorCSAgICAgIGVsc2UKKwkJZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCQlkZXBfcnBhdGg9IiRkZXBfcnBhdGggJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBkb25lCisJICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCisJICAgIGVsc2UKKwkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkgICAgZmkKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgICBycGF0aD0KKwkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIGRvbmUKKwkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCisJICBmaQorCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKKwlmaQorCisJc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgorCXRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkc2hsaWJwYXRoIgorCWlmIHRlc3QgLW4gIiRzaGxpYnBhdGgiOyB0aGVuCisJICBldmFsICIkc2hsaWJwYXRoX3Zhcj0nJHNobGlicGF0aFwkJHNobGlicGF0aF92YXInOyBleHBvcnQgJHNobGlicGF0aF92YXIiCisJZmkKKworCSMgR2V0IHRoZSByZWFsIGFuZCBsaW5rIG5hbWVzIG9mIHRoZSBsaWJyYXJ5LgorCWV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCisJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJc2hpZnQKKwlyZWFsbmFtZT0iJDEiCisJc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisJICAgICAgZnVuY19sZW4gIiAkY21kIgorCSAgICAgIGxlbj0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFhzZWQgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KKwkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKKwkgICopCisJICAgIHRtcF9kZXBsaWJzPSIkdG1wX2RlcGxpYnMgJHRlc3RfZGVwbGliIgorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisKKwlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCisJICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgorCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KKwkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgZWxzZQorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCisJICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICBmaQorCWVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgZmkKKwlmaQorCisJaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgOgorCWVsc2UKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KKworCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KKwkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQorCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQorCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKKwkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCisJICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55CisJICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCisJICAjIHRoZSBzcGVjLgorCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgZmkKKwkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKKwkgIG91dHB1dF9sYT1gJEVDSE8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkYmFzZW5hbWUiYAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rc2NyaXB0CisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgR05VIGxkIHNjcmlwdDogJG91dHB1dCIKKwkgICAgJEVDSE8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICAkRUNITyAiJG9iaiIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgICRFQ0hPICcpJyA+PiAkb3V0cHV0CisJICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBsaW5rZXIgaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCSAgICA6ID4gJG91dHB1dAorCSAgICBzZXQgeCAkc2F2ZV9saWJvYmpzCisJICAgIHNoaWZ0CisJICAgIGZpcnN0b2JqPQorCSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiA9IHllczsgdGhlbgorCSAgICAgIGZpcnN0b2JqPSIkMSAiCisJICAgICAgc2hpZnQKKwkgICAgZmkKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgICRFQ0hPICIkb2JqIiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0IgorCSAgICBvdXRwdXQ9JGZpcnN0b2JqXCIkZmlsZV9saXN0X3NwZWMkb3V0cHV0XCIKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyI7IHRoZW4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCSAgICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAorCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKKwkJZWxzZQorCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0kb2JqCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dCIKKworCSAgICBlbHNlCisJICAgICAgb3V0cHV0PQorCSAgICBmaQorCisJICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYKKwkgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICAgIyBMb29wIHRocm91Z2ggdGhlIGNvbW1hbmRzIGdlbmVyYXRlZCBhYm92ZSBhbmQgZXhlY3V0ZSB0aGVtLgorCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgJG9wdF9zaWxlbnQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKworICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKKwkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIlgkaW5jbHVkZV9leHBzeW1zIiB8ICRYc2VkIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgorCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgZmkKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCisJICAgIGVsc2UKKwkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgICAgZmkKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzIHx8IHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXM7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSIkc29uYW1lIgorCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9iaikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICJcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDs7CisgICAgICBlc2FjCisKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiCisKKwlsaWJvYmo9JG91dHB1dAorCWZ1bmNfbG8ybyAiJGxpYm9iaiIKKwlvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwk7OworICAgICAgKikKKwlsaWJvYmo9CisJb2JqPSIkb3V0cHV0IgorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIGFuZCBob3BlIHdlIGNhbiBnZXQgYnkgd2l0aAorICAgICAgIyB0dXJuaW5nIGNvbW1hIGludG8gc3BhY2UuLgorICAgICAgd2w9CisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICBldmFsIHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPVwiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgIHJlbG9hZF9jb252X29ianM9JHJlbG9hZF9vYmpzXCBgJEVDSE8gIlgkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFhzZWQgLWUgJ3N8LHwgfGcnYAorCWVsc2UKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKKwkgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBDcmVhdGUgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisgICAgICByZWxvYWRfb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMgImAkRUNITyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICcvXC4nJHtsaWJleHR9JCcvZCcgLWUgJy9cLmxpYiQvZCcgLWUgIiRsbzJvIiB8ICROTDJTUGAiICRyZWxvYWRfY29udl9vYmpzIiAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKworICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0ICIkcGljX21vZGUiICE9IGRlZmF1bHQ7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9IiRsaWJvYmoiCisJZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCWZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJworICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OworICAgICAgZXNhYworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCisKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKKworICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCisJICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCisJICAgIDEwLlswMTIzXSkKKwkgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKwljb21waWxlX2RlcGxpYnM9YCRFQ0hPICJYICRjb21waWxlX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmluYWxpemVfZGVwbGlicz1gJEVDSE8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkZmluYWxpemVfZGVwbGlicyIKKworICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJZm9yIGxpYmRpciBpbiAkcnBhdGggJHhycGF0aDsgZG8KKwkgICMgVGhpcyBpcyB0aGUgbWFnaWMgdG8gdXNlIC1ycGF0aC4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRjb21waWxlX3JwYXRoICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBwZXJtX3JwYXRoPSIkcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAke0VDSE99ICIkbGliZGlyIiB8ICR7U0VEfSAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRsaWJkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBycGF0aD0KKyAgICAgIGhhcmRjb2RlX2xpYmRpcnM9CisgICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KKwlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQk7OworCSAgICAgICopCisJCWhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisgICAgICBkb25lCisgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCisJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJG91dHB1dG5hbWUiICJAUFJPR1JBTUAiICJubyIKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKmNlZ2NjKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCisJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisJZmkKKworCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJG5vX2luc3RhbGwiID0geWVzOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCisJIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKworCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgorCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiWCRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorCSAgZWxzZQorCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICBmaQorCWVsc2UKKwkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiWCRsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnYAorCisgICAgICAjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlcy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgUXVvdGUgJEVDSE8gZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisJY2FzZSAkcHJvZ3BhdGggaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCWVzYWMKKwlxZWNobz1gJEVDSE8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZWxzZQorCXFlY2hvPWAkRUNITyAiWCRFQ0hPIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCisJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KKwljYXNlICRvdXRwdXQgaW4KKwkgICouZXhlKSBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXQiCisJICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwllc2FjCisJIyB0ZXN0IGZvciBjeWd3aW4gYmVjYXVzZSBtdiBmYWlscyB3L28gLmV4ZSBleHRlbnNpb25zCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiopCisJICAgIGV4ZWV4dD0uZXhlCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dG5hbWUiCisJICAgIG91dHB1dG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworCSAgKikgZXhlZXh0PSA7OworCWVzYWMKKwljYXNlICRob3N0IGluCisJICAqY3lnd2luKiB8ICptaW5ndyogKQorCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKKwkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKKwkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiIDsgdGhlbgorCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGVsc2UKKwkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmaQorCSAgICB9CisJICA7OworCSAgKiApCisJICAgICRSTSAkb3V0cHV0CisJICAgIHRyYXAgIiRSTSAkb3V0cHV0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CisJICA7OworCWVzYWMKKyAgICAgIH0KKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiB3ZSBuZWVkIHRvIGJ1aWxkIGFuIG9sZC1mYXNoaW9uZWQgYXJjaGl2ZS4KKyAgICBmb3Igb2xkbGliIGluICRvbGRsaWJzOyBkbworCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IGNvbnZlbmllbmNlOyB0aGVuCisJb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwlhZGRsaWJzPSIkY29udmVuaWVuY2UiCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBtb2R1bGU7IHRoZW4KKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUiCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwllbHNlCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KKwkgICAgb2xkb2Jqcz0iJG9sZG9ianMgJHN5bWZpbGVvYmoiCisJICBmaQorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIG9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKKwkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKKwkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQorCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCisJIyBzdGF0aWMgYXJjaGl2ZSBvdXQgb2YgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LCBvciB3aGVuIGxpbmtpbmcKKwkjIHRoZSBlbnRpcmV0eSBvZiBhIGxpYnRvb2wgYXJjaGl2ZSBpbnRvIGFub3RoZXIgKGN1cnJlbnRseQorCSMgbm90IHN1cHBvcnRlZCBieSBsaWJ0b29sKS4KKwlpZiAoZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgICBkbworCSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgZG9uZSB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisJICA6CisJZWxzZQorCSAgJEVDSE8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCisJICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7CisJICAgICpbXCAvXSIkb2JqYmFzZSAiKikKKwkgICAgICB3aGlsZSA6OyBkbworCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbworCQkjIG92ZXJsYXBzLgorCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQljYXNlICIgJG9sZG9ianMgIiBpbgorCQkqW1wgL10iJG5ld29iaiAiKikgOzsKKwkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OworCQllc2FjCisJICAgICAgZG9uZQorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZXZhbCBjbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCisJZnVuY19sZW4gIiAkY21kcyIKKwlsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCWlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KKwkJUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgICAgIGZpCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc1wiCisJICBlbHNlCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHN+XCRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgIGZpCisJZmkKKyAgICAgIGZpCisgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGNtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgorCisgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgKi5sYSkKKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKKyAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgJG91dHB1dCIKKworICAgICAgIyBQcmVzZXJ2ZSBhbnkgdmFyaWFibGVzIHRoYXQgbWF5IGFmZmVjdCBjb21waWxlciBiZWhhdmlvcgorICAgICAgZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJaWYgZXZhbCB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCI7IHRoZW4KKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWVsc2UKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgUXVvdGUgdGhlIGxpbmsgY29tbWFuZCBmb3Igc2hpcHBpbmcuCisgICAgICByZWxpbmtfY29tbWFuZD0iKGNkIGBwd2RgOyAkU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgICopIG5ld2RlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCW5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkJIyBPbmx5IHBhc3MgcHJlb3BlbmVkIGZpbGVzIHRvIHRoZSBwc2V1ZG8tYXJjaGl2ZSAoZm9yCisJCSMgZXZlbnR1YWwgbGlua2luZyB3aXRoIHRoZSBhcHAuIHRoYXQgbGlua3MgaXQpIGlmIHdlCisJCSMgZGlkbid0IGFscmVhZHkgbGluayB0aGUgcHJlb3BlbmVkIG9iamVjdHMgZGlyZWN0bHkgaW50bworCQkjIHRoZSBsaWJyYXJ5OgorCQlmdW5jX2Jhc2VuYW1lICIkbGliIgorCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQkqKSBhYnM9YHB3ZGAiLyRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRhYnMiCisJICAgIGRvbmUKKwkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgdGRsbmFtZT0kZGxuYW1lCisJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KKwkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsIHwgKmNlZ2NjKiwqbGFpLHllcyxubywqLmRsbCkgdGRsbmFtZT0uLi9iaW4vJGRsbmFtZSA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKKyMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgorCisjIFRoZSBuYW1lIHRoYXQgd2UgY2FuIGRsb3BlbigzKS4KK2RsbmFtZT0nJHRkbG5hbWUnCisKKyMgTmFtZXMgb2YgdGhpcyBsaWJyYXJ5LgorbGlicmFyeV9uYW1lcz0nJGxpYnJhcnlfbmFtZXMnCisKKyMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgorb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKKworIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KK2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKKworIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCitkZXBlbmRlbmN5X2xpYnM9JyRkZXBlbmRlbmN5X2xpYnMnCisKKyMgTmFtZXMgb2YgYWRkaXRpb25hbCB3ZWFrIGxpYnJhcmllcyBwcm92aWRlZCBieSB0aGlzIGxpYnJhcnkKK3dlYWtfbGlicmFyeV9uYW1lcz0nJHdlYWtfbGlicycKKworIyBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciAkbGlibmFtZS4KK2N1cnJlbnQ9JGN1cnJlbnQKK2FnZT0kYWdlCityZXZpc2lvbj0kcmV2aXNpb24KKworIyBJcyB0aGlzIGFuIGFscmVhZHkgaW5zdGFsbGVkIGxpYnJhcnk/CitpbnN0YWxsZWQ9JGluc3RhbGxlZAorCisjIFNob3VsZCB3ZSB3YXJuIGFib3V0IHBvcnRhYmlsaXR5IHdoZW4gbGlua2luZyBhZ2FpbnN0IC1tb2R1bGVzPworc2hvdWxkbm90bGluaz0kbW9kdWxlCisKKyMgRmlsZXMgdG8gZGxvcGVuL2RscHJlb3BlbgorZGxvcGVuPSckZGxmaWxlcycKK2RscHJlb3Blbj0nJGRscHJlZmlsZXMnCisKKyMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKK2xpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKKwkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgorCSAgICAkRUNITyA+PiAkb3V0cHV0ICJcCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiIgorCSAgZmkKKwlkb25lCisgICAgICB9CisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKKyAgICAgIDs7CisgICAgZXNhYworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworfQorCit7IHRlc3QgIiRtb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB9ICYmCisgICAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBSTT0iJG5vbm9wdCIKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPQorICAgIGV4aXRfc3RhdHVzPTAKKworICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgorICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBSTT0iJFJNICRhcmciOyBybWZvcmNlPXllcyA7OworICAgICAgLSopIFJNPSIkUk0gJGFyZyIgOzsKKyAgICAgICopIGZpbGVzPSIkZmlsZXMgJGFyZyIgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkUk0iICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBSTSBwcm9ncmFtIgorCisgICAgcm1kaXJzPQorCisgICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9iamRpcj0iJG9yaWdvYmpkaXIiCisgICAgICBlbHNlCisJb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgdGVzdCAiJG1vZGUiID0gdW5pbnN0YWxsICYmIG9iamRpcj0iJGRpciIKKworICAgICAgIyBSZW1lbWJlciBvYmpkaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG1vZGUiID0gY2xlYW47IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2JqZGlyICIqKSA7OworCSAgKikgcm1kaXJzPSIkcm1kaXJzICRvYmpkaXIiIDs7CisJZXNhYworICAgICAgZmkKKworICAgICAgIyBEb24ndCBlcnJvciBpZiB0aGUgZmlsZSBkb2Vzbid0IGV4aXN0IGFuZCBybSAtZiB3YXMgdXNlZC4KKyAgICAgIGlmIHsgdGVzdCAtTCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB7IHRlc3QgLWggIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCisJOgorICAgICAgZWxpZiB0ZXN0IC1kICIkZmlsZSI7IHRoZW4KKwlleGl0X3N0YXR1cz0xCisJY29udGludWUKKyAgICAgIGVsaWYgdGVzdCAiJHJtZm9yY2UiID0geWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9IiRmaWxlIgorCisgICAgICBjYXNlICRuYW1lIGluCisgICAgICAqLmxhKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIGFyY2hpdmUsIHNvIHZlcmlmeSBpdC4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyLyRuYW1lICRvYmpkaXIvJHtuYW1lfWkiCisJICAgIDs7CisJICB1bmluc3RhbGwpCisJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKKwkgICAgZmkKKwkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCisJICAgIDs7CisJICBlc2FjCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgorCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJHBpY19vYmplY3QiCisJICBmaQorCisJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kbm9uX3BpY19vYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKikKKwlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwkgIG5vZXhlbmFtZT0kbmFtZQorCSAgY2FzZSAkZmlsZSBpbgorCSAgKi5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgorCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisgICAgb2JqZGlyPSIkb3JpZ29iamRpciIKKworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCit7IHRlc3QgIiRtb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgfSAmJgorICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9CisKK3Rlc3QgLXogIiRtb2RlIiAmJiB7CisgIGhlbHA9IiRnZW5lcmljX2hlbHAiCisgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIE1PREUiCit9CisKK3Rlc3QgLXogIiRleGVjX2NtZCIgJiYgXAorICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkbW9kZSciCisKK2lmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KKyAgZXZhbCBleGVjICIkZXhlY19jbWQiCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworZXhpdCAkZXhpdF9zdGF0dXMKKworCisjIFRoZSBUQUdzIGJlbG93IGFyZSBkZWZpbmVkIHN1Y2ggdGhhdCB3ZSBuZXZlciBnZXQgaW50byBhIHNpdHVhdGlvbgorIyBpbiB3aGljaCB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKKyMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCisjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQorIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKKyMgdGhlbS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBvbiBBSVgsIGJlY2F1c2Ugd2UgZG9uJ3QKKyMgc3VwcG9ydCBoYXZpbmcgYm90aCBzdGF0aWMgYW5kIHNoYXJlZCBsaWJyYXJpZXMgZW5hYmxlZCBhdCB0aGUgc2FtZQorIyB0aW1lIG9uIHRoYXQgcGxhdGZvcm0sIHNvIHdlIGRlZmF1bHQgdG8gYSBzaGFyZWQtb25seSBjb25maWd1cmF0aW9uLgorIyBJZiBhIGRpc2FibGUtc2hhcmVkIHRhZyBpcyBnaXZlbiwgd2UnbGwgZmFsbGJhY2sgdG8gYSBzdGF0aWMtb25seQorIyBjb25maWd1cmF0aW9uLiAgQnV0IHdlJ2xsIG5ldmVyIGdvIGZyb20gc3RhdGljLW9ubHkgdG8gc2hhcmVkLW9ubHkuCisKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKK2J1aWxkX2xpYnRvb2xfbGlicz1ubworYnVpbGRfb2xkX2xpYnM9eWVzCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOnNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjoyCisjIEVuZDoKKyMgdmk6c3c9MgorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcxY2RlMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNApAQCAtMCwwICsxLDczNjAgQEAKKyMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCisjCisjICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAorIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbC4KKyMKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisjIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisjIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyMgaWYgeW91IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdAorIyBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUKKyMgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjCisjIEdOVSBMaWJ0b29sIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHTlUgTGlidG9vbDsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIGEgY29weQorIyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCwgb3IKKyMgb2J0YWluZWQgYnkgd3JpdGluZyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorIyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KK10pCisKKyMgc2VyaWFsIDU2IExUX0lOSVQKKworCisjIExUX1BSRVJFUShWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gYW5kIGV4aXQgaWYgdGhpcyBsaWJ0b29sIHZlcnNpb24gaXMgbGVzcyB0aGF0IFZFUlNJT04uCittNF9kZWZ1bihbTFRfUFJFUkVRXSwKK1ttNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUobTRfZGVmbihbTFRfUEFDS0FHRV9WRVJTSU9OXSksIFskMV0pLCAtMSwKKyAgICAgICBbbTRfZGVmYXVsdChbJDNdLAorCQkgICBbbTRfZmF0YWwoW0xpYnRvb2wgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWRdLAorCQkgICAgICAgICAgICAgNjMpXSldLAorICAgICAgIFskMl0pXSkKKworCisjIF9MVF9DSEVDS19CVUlMRERJUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcGxhaW4gaWYgdGhlIGFic29sdXRlIGJ1aWxkIGRpcmVjdG9yeSBuYW1lIGNvbnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycworbTRfZGVmdW4oW19MVF9DSEVDS19CVUlMRERJUl0sCitbY2FzZSBgcHdkYCBpbgorICAqXCAqIHwgKlwJKikKKyAgICBBQ19NU0dfV0FSTihbTGlidG9vbCBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCB3aGl0ZXNwYWNlIGluIGBwd2RgXSkgOzsKK2VzYWMKK10pCisKKworIyBMVF9JTklUKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfSU5JVF0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwgV2UgdXNlIEFDX0lOQ0xVREVTX0RFRkFVTFQKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworX0xUX1NFVFVQCisKKyMgT25seSBleHBhbmQgb25jZToKK200X2RlZmluZShbTFRfSU5JVF0pCitdKSMgTFRfSU5JVAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbCisjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZmkKK10pCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK19MVF9DSEVDS19PQkpESVIKKworbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK29sZF9DQz0iJENDIgorb2xkX0NGTEFHUz0iJENGTEFHUyIKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAordGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIF9MVF9QQVRIX01BR0lDCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitMVF9TVVBQT1JURURfVEFHKFtDQ10pCitfTFRfTEFOR19DX0NPTkZJRworX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKK19MVF9DT05GSUdfQ09NTUFORFMKK10pIyBfTFRfU0VUVVAKKworCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIlgkXVskMSIgfCAkWHNlZCAtZSAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICJYJDx2YXI+IiB8ICRYc2VkIC1lICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittNF9kZWZ1bihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF9hbGxfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdTCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0IGNvbW1lbnQgYW5kIGxpc3Qgb2YgdGFncyBzdXBwb3J0ZWQgYnkgdGhlIHNjcmlwdAorbTRfZGVmdW4oW19MVF9MSUJUT09MX1RBR1NdLAorW19MVF9GT1JNQVRfQ09NTUVOVChbVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0XSlkbmwKK2F2YWlsYWJsZV90YWdzPSJfTFRfVEFHUyJkbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9ERUNMQVJFKFZBUk5BTUUsIFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeHRyYWN0IHRoZSBkaWN0aW9uYXJ5IHZhbHVlcyBmb3IgVkFSTkFNRSAob3B0aW9uYWxseSB3aXRoIFRBRykgYW5kCisjIGV4cGFuZCB0byBhIGNvbW1lbnRlZCBzaGVsbCB2YXJpYWJsZSBzZXR0aW5nOgorIworIyAgICAjIFNvbWUgY29tbWVudCBhYm91dCB3aGF0IFZBUiBpcyBmb3IuCisjICAgIHZpc2libGVfbmFtZT0kbHRfaW50ZXJuYWxfbmFtZQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9ERUNMQVJFXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwKKwkJCQkJICAgW2Rlc2NyaXB0aW9uXSkpKVtdZG5sCittNF9wdXNoZGVmKFtfbGlidG9vbF9uYW1lXSwKKyAgICBtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbbGlidG9vbF9uYW1lXSkpKVtdZG5sCittNF9jYXNlKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pKSwKKyAgICBbMF0sIFtfbGlidG9vbF9uYW1lPVskXSQxXSwKKyAgICBbMV0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbMl0sIFtfbGlidG9vbF9uYW1lPSRsdF9bXSQxXSwKKyAgICBbX2xpYnRvb2xfbmFtZT1sdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKV0pW11kbmwKK200X2lmdmFsKFskMl0sIFtfJDJdKVtdbTRfcG9wZGVmKFtfbGlidG9vbF9uYW1lXSlbXWRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0NPTkZJR19WQVJTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgY29tbWVudGVkIGRlY2xhcmF0aW9ucyBvZiBub24tdGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcworIyBzdWl0YWJsZSBmb3IgaW5zZXJ0aW9uIGluIHRoZSBMSUJUT09MIENPTkZJRyBzZWN0aW9uIG9mIHRoZSBgbGlidG9vbCcKKyMgc2NyaXB0LiAgVGFnZ2VkIGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyAoZXZlbiBmb3IgdGhlIExJQlRPT0wgQ09ORklHCisjIHNlY3Rpb24pIGFyZSBwcm9kdWNlZCBieSBfTFRfTElCVE9PTF9UQUdfVkFSUy4KK200X2RlZnVuKFtfTFRfTElCVE9PTF9DT05GSUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sCisgICAgbTRfcXVvdGUoX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW25vXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHX1ZBUlMoVEFHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9MSUJUT09MX1RBR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwgbTRfcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIsIFskMV0pXSldKV0pCisKKworIyBfTFRfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdWQVJdLCBbbTRfaWZ2YWwoWyQyXSwgWyQxXyQyXSwgWyQxXSldKQorCisKKyMgX0xUX0NPTkZJR19DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlbmQgYWNjdW11bGF0ZWQgb3V0cHV0IHRvICRDT05GSUdfU1RBVFVTLiAgVGhhbmtzIHRvIHRoZSBsaXN0cyBvZgorIyB2YXJpYWJsZXMgZm9yIHNpbmdsZSBhbmQgZG91YmxlIHF1b3RlIGVzY2FwaW5nIHdlIHNhdmVkIGZyb20gY2FsbHMKKyMgdG8gX0xUX0RFQ0wsIHdlIGNhbiBwdXQgcXVvdGUgZXNjYXBlZCB2YXJpYWJsZXMgZGVjbGFyYXRpb25zCisjIGludG8gYGNvbmZpZy5zdGF0dXMnLCBhbmQgdGhlbiB0aGUgc2hlbGwgY29kZSB0byBxdW90ZSBlc2NhcGUgdGhlbSBpbgorIyBmb3IgbG9vcHMgaW4gYGNvbmZpZy5zdGF0dXMnLiAgRmluYWxseSwgYW55IGFkZGl0aW9uYWwgY29kZSBhY2N1bXVsYXRlZAorIyBmcm9tIGNhbGxzIHRvIF9MVF9DT05GSUdfTElCVE9PTF9JTklUIGlzIGV4cGFuZGVkLgorbTRfZGVmdW4oW19MVF9DT05GSUdfQ09NTUFORFNdLAorW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9PVVRQVVRdLAorCWRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaGFzIGJlZW4gcGxhY2VkIGluICRDT05GSUdfTFQsCisJZG5sIGluc3RlYWQgb2YgZHVwbGljYXRpbmcgaXQgYWxsIG92ZXIgYWdhaW4gaW50byBjb25maWcuc3RhdHVzLAorCWRubCB0aGVuIHdlIHdpbGwgaGF2ZSBjb25maWcuc3RhdHVzIHJ1biAkQ09ORklHX0xUIGxhdGVyLCBzbyBpdAorCWRubCBuZWVkcyB0byBrbm93IHdoYXQgbmFtZSBpcyBzdG9yZWQgdGhlcmU6CisgICAgICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICAgICAgWyRTSEVMTCAkQ09ORklHX0xUIHx8IEFTX0VYSVQoMSldLCBbQ09ORklHX0xUPSckQ09ORklHX0xUJ10pXSwKKyAgICBkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGlzIGRlc3RpbmVkIGZvciBjb25maWcuc3RhdHVzLAorICAgIGRubCBleHBhbmQgdGhlIGFjY3VtdWxhdGVkIGNvbW1hbmRzIGFuZCBpbml0IGNvZGUgbm93OgorICAgIFtBQ19DT05GSUdfQ09NTUFORFMoW2xpYnRvb2xdLAorICAgICAgICBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSldKQorXSkjX0xUX0NPTkZJR19DT01NQU5EUworCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdLAorWworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCitMVENDPSckTFRDQycKK0xUQ0ZMQUdTPSckTFRDRkxBR1MnCitjb21waWxlcj0nJGNvbXBpbGVyX0RFRkFVTFQnCisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPICJYXFxcXFwkXCR2YXIiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlhcXFwkXCR2YXJcXCIgfCBcXFwkWHNlZCAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyAiWFxcXFxcJFwkdmFyIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJYXFxcJFwkdmFyXFwiIHwgXFxcJFhzZWQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBGaXgtdXAgZmFsbGJhY2sgZWNobyBpZiBpdCB3YXMgbWFuZ2xlZCBieSB0aGUgYWJvdmUgcXVvdGluZyBydWxlcy4KK2Nhc2UgXCRsdF9FQ0hPIGluCisqJ1xcXFskXTAgLS1mYWxsYmFjay1lY2hvIicpZG5sICIKKyAgbHRfRUNITz1cYFwkRUNITyAiWFwkbHRfRUNITyIgfCBcJFhzZWQgLWUgJ3MvXFxcXFxcXFxcXFxcXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iXFskXS9cWyRdMCAtLWZhbGxiYWNrLWVjaG8iLydcYAorICA7OworZXNhYworCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworCisjIExUX09VVFBVVAorIyAtLS0tLS0tLS0KKyMgVGhpcyBtYWNybyBhbGxvd3MgZWFybHkgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQgKGJlZm9yZQorIyBBQ19PVVRQVVQgaXMgY2FsbGVkKSwgaW5jYXNlIGl0IGlzIHVzZWQgaW4gY29uZmlndXJlIGZvciBjb21waWxhdGlvbgorIyB0ZXN0cy4KK0FDX0RFRlVOKFtMVF9PVVRQVVRdLAorWzogJHtDT05GSUdfTFQ9Li9jb25maWcubHR9CitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkQ09ORklHX0xUXSkKK2NhdCA+IiRDT05GSUdfTFQiIDw8X0xURU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSBhIGxpYnRvb2wgc3R1YiB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisKK2x0X2NsX3NpbGVudD1mYWxzZQorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKKworZXhlYyBBU19NRVNTQUdFX0ZEPiYxCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgQVNfQk9YKFtSdW5uaW5nICRhc19tZS5dKQorfSA+JkFTX01FU1NBR0VfTE9HX0ZECisKK2x0X2NsX2hlbHA9IlwKK1xgJGFzX21lJyBjcmVhdGVzIGEgbG9jYWwgbGlidG9vbCBzdHViIGZyb20gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwKK2ZvciB1c2UgaW4gZnVydGhlciBjb25maWd1cmUgdGltZSB0ZXN0cyBiZWZvcmUgdGhlIHJlYWwgbGlidG9vbCBpcworZ2VuZXJhdGVkLgorCitVc2FnZTogJFswXSBbW09QVElPTlNdXQorCisgIC1oLCAtLWhlbHAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtViwgLS12ZXJzaW9uICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisKK2x0X2NsX3ZlcnNpb249IlwKK200X2lmc2V0KFtBQ19QQUNLQUdFX05BTUVdLCBbQUNfUEFDS0FHRV9OQU1FIF0pY29uZmlnLmx0W11kbmwKK200X2lmc2V0KFtBQ19QQUNLQUdFX1ZFUlNJT05dLCBbIEFDX1BBQ0tBR0VfVkVSU0lPTl0pCitjb25maWd1cmVkIGJ5ICRbMF0sIGdlbmVyYXRlZCBieSBtNF9QQUNLQUdFX1NUUklORy4KKworQ29weXJpZ2h0IChDKSAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcubHQgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNpb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKword2hpbGUgdGVzdCAkWyNdICE9IDAKK2RvCisgIGNhc2UgJFsxXSBpbgorICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCisgICAgICBlY2hvICIkbHRfY2xfdmVyc2lvbiI7IGV4aXQgMCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICBlY2hvICIkbHRfY2xfaGVscCI7IGV4aXQgMCA7OworICAgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgICAgZGVidWc9OiA7OworICAgIC0tcXVpZXQgfCAtLXEqIHwgLS1zaWxlbnQgfCAtLXMqIHwgLXEgKQorICAgICAgbHRfY2xfc2lsZW50PTogOzsKKworICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmICRsdF9jbF9zaWxlbnQ7IHRoZW4KKyAgZXhlYyBBU19NRVNTQUdFX0ZEPi9kZXYvbnVsbAorZmkKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxfTFRFT0YKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8XF9MVEVPRgorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSkKK19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EUworQVNfRVhJVCgwKQorX0xURU9GCitjaG1vZCAreCAiJENPTkZJR19MVCIKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBidXQgY29uZmlnLmx0IGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwKKyMgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2csIHdoaWNoIGZhaWxzIG9uIERPUywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0CisjIG9wZW4gYnkgY29uZmlndXJlLiAgSGVyZSB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsIGVmZmVjdGl2ZWx5IGNsb3NpbmcKKyMgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5sdC4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBsdF9jbF9zdWNjZXNzPToKKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCisgIGV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCisgICRTSEVMTCAiJENPTkZJR19MVCIgJGx0X2NvbmZpZ19sdF9hcmdzIHx8IGx0X2NsX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworICAkbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitmaQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgICAgZmkKKworICAgIGNmZ2ZpbGU9IiR7b2ZpbGV9VCIKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworX0xUX0NPUFlJTkcKK19MVF9MSUJUT09MX1RBR1MKKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKK19MVF9MSUJUT09MX0NPTkZJR19WQVJTCitfTFRfTElCVE9PTF9UQUdfVkFSUworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnL14jIEdlbmVyYXRlZCBzaGVsbCBmdW5jdGlvbnMgaW5zZXJ0ZWQgaGVyZS9xJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBfTFRfUFJPR19YU0lfU0hFTExGTlMKKworICBzZWQgLW4gJy9eIyBHZW5lcmF0ZWQgc2hlbGwgZnVuY3Rpb25zIGluc2VydGVkIGhlcmUvLCRwJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CisgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKKyAgY2htb2QgK3ggIiRvZmlsZSIKK10sCitbY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCitkbmwgVW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIHVzZSAkMSBoZXJlLCBzaW5jZSBfTFRfVEFHIGlzIG5vdCBleHBhbmRlZAorZG5sIGluIGEgY29tbWVudCAoaWUgYWZ0ZXIgYSAjKS4KKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9MSUJUT09MX1RBR19WQVJTKF9MVF9UQUcpCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkMQorX0xUX0VPRgorXSlkbmwgL200X2lmCitdLAorW200X2lmKFskMV0sIFtdLCBbCisgICAgUEFDS0FHRT0nJFBBQ0tBR0UnCisgICAgVkVSU0lPTj0nJFZFUlNJT04nCisgICAgVElNRVNUQU1QPSckVElNRVNUQU1QJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbTFRfUFJPR19SQ10sCisgIFtMVF9MQU5HKFJDKV0sCisgIFttNF9kZWZpbmUoW0xUX1BST0dfUkNdLCBkZWZuKFtMVF9QUk9HX1JDXSlbTFRfTEFORyhSQyldKV0pCitdKSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKworIyBPYnNvbGV0ZSBtYWNyb3M6CitBVV9ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbTFRfTEFORyhDKyspXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtMVF9MQU5HKEZvcnRyYW4gNzcpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW0xUX0xBTkcoRm9ydHJhbildKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW0xUX0xBTkcoSmF2YSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisJJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKwkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCisgICAgICAgIF9sdF9yZXN1bHQ9JD8KKwlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KKwkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmldKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuW1swMTJdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKyAgICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZmkKKyAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQorCisKKyMgX0xUX0RBUldJTl9MSU5LRVJfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2tzIGZvciBsaW5rZXIgYW5kIGNvbXBpbGVyIGZlYXR1cmVzIG9uIGRhcndpbgorbTRfZGVmdW4oW19MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTXSwKK1sKKyAgbTRfcmVxdWlyZShbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdKQorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIiA9ICJ5ZXMiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgbTRfaWYoWyQxXSwgW0NYWF0sCitbICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgZmkKK10sW10pCisgIGVsc2UKKyAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICBmaQorXSkKKworIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorbTRfZGVmdW4oW19MVF9TWVNfTU9EVUxFX1BBVEhfQUlYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKK2x0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCS9eMC8geworCSAgICBzL14wICAqXCguKlwpJC9cMS8KKwkgICAgcAorCX0KKyAgICB9JworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCisgIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorZmldLFtdKQoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCitdKSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKworCisjIF9MVF9TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfU0hFTExfSU5JVF0sCitbaWZkZWYoW0FDX0RJVkVSU0lPTl9OT1RJQ0VdLAorCSAgICAgW0FDX0RJVkVSVF9QVVNIKEFDX0RJVkVSU0lPTl9OT1RJQ0UpXSwKKwkgW0FDX0RJVkVSVF9QVVNIKE5PVElDRSldKQorJDEKK0FDX0RJVkVSVF9QT1AKK10pIyBfTFRfU0hFTExfSU5JVAorCisKKyMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoCisjIHdpbGwgZmluZCBhbiBlY2hvIGNvbW1hbmQgd2hpY2ggZG9lc24ndCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCittNF9kZWZ1bihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAorW19MVF9TSEVMTF9JTklUKFsKKyMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKK2Nhc2UgWCRsdF9FQ0hPIGluCitYKi0tZmFsbGJhY2stZWNobykKKyAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KKyAgRUNITz1gZWNobyAiJGx0X0VDSE8iIHwgc2VkICdzLFxcXFxcWyRdXFxbJF0wLCdbJF0wJywnYAorICA7OworZXNhYworCitFQ0hPPSR7bHRfRUNITy1lY2hvfQoraWYgdGVzdCAiWFskXTEiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICMgRGlzY2FyZCB0aGUgLS1uby1yZWV4ZWMgZmxhZywgYW5kIGNvbnRpbnVlLgorICBzaGlmdAorZWxpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYHsgJEVDSE8gJ1x0JzsgfSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkRUNITyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICJbJF0wIiAtLW5vLXJlZXhlYyAkezErIlskXUAifQorZmkKKworaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxfTFRfRU9GCitbJF0qCitfTFRfRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJGx0X0VDSE8iOyB0aGVuCisgIGlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgICMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICAgIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbworICAgICAgIyBleHBlY3RlZCBzaXplczogbGVzcyB0aGFuIDJLYiwgMUtiLCA1MTIgYnl0ZXMsIDE2IGJ5dGVzLCAuLi4KKyAgICAgIGlmIHsgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYDsgfSAyPi9kZXYvbnVsbCAmJgorCSB7IHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbAorICAgICAgdGhlbgorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBkb25lCisgIGZpCisKKyAgaWYgdGVzdCAiWGB7ICRFQ0hPICdcdCc7IH0gMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgIyBUaGUgU29sYXJpcywgQUlYLCBhbmQgRGlnaXRhbCBVbml4IGRlZmF1bHQgZWNobyBwcm9ncmFtcyB1bnF1b3RlCisgICAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAgICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCisgICAgIworICAgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBkaXIgaW4gJFBBVEggL3Vzci91Y2I7IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCisgICAgICAgICB0ZXN0ICJYYCgkZGlyL2VjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgIEVDSE89IiRkaXIvZWNobyIKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgICAgaWYgdGVzdCAiWCRFQ0hPIiA9IFhlY2hvOyB0aGVuCisgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgYmV0dGVyIGVjaG8sIHNvIGxvb2sgZm9yIGFsdGVybmF0aXZlcy4KKyAgICAgIGlmIHRlc3QgIlhgeyBwcmludCAtciAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1geyBwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciOyB9IDI+L2Rldi9udWxsYCAmJgorICAgICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisgICAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICAgIEVDSE89J3ByaW50IC1yJworICAgICAgZWxpZiB7IHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQ7IH0gJiYKKwkgICB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgorICAgICAgICBPUklHSU5BTF9DT05GSUdfU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKyAgICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKKyAgICAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorICAgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgICBlbHNlCisgICAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KKyAgICAgICAgRUNITz0ncHJpbnRmICVzXG4nCisgICAgICAgIGlmIHRlc3QgIlhgeyAkRUNITyAnXHQnOyB9IDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YHsgJEVDSE8gIiRlY2hvX3Rlc3Rfc3RyaW5nIjsgfSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgICMgQ29vbCwgcHJpbnRmIHdvcmtzCisJICA6CisgICAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgorCSAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSAgQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKKwkgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgIFNIRUxMPSIkQ09ORklHX1NIRUxMIgorCSAgZXhwb3J0IFNIRUxMCisJICBFQ0hPPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkgIEVDSE89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICAgIGVsc2UKKwkgICMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJICBwcmV2PToKKworCSAgZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICJbJF0wIicgJ3NlZCAxMHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgNTBxICJbJF0wIic7IGRvCisJICAgIGlmIHsgdGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYYGV2YWwgJGNtZGAiOyB9IDI+L2Rldi9udWxsCisJICAgIHRoZW4KKwkgICAgICBicmVhaworCSAgICBmaQorCSAgICBwcmV2PSIkY21kIgorCSAgZG9uZQorCisJICBpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAorCSAgICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwkgIGVsc2UKKwkgICAgIyBPb3BzLiAgV2UgbG9zdCBjb21wbGV0ZWx5LCBzbyBqdXN0IHN0aWNrIHdpdGggZWNoby4KKwkgICAgRUNITz1lY2hvCisJICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgICBmaQorICBmaQorZmkKKworIyBDb3B5IGVjaG8gYW5kIHF1b3RlIHRoZSBjb3B5IHN1aXRhYmx5IGZvciBwYXNzaW5nIHRvIGxpYnRvb2wgZnJvbQorIyB0aGUgTWFrZWZpbGUsIGluc3RlYWQgb2YgcXVvdGluZyB0aGUgb3JpZ2luYWwsIHdoaWNoIGlzIHVzZWQgbGF0ZXIuCitsdF9FQ0hPPSRFQ0hPCitpZiB0ZXN0ICJYJGx0X0VDSE8iID0gIlgkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgbHRfRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXFskXTAgLS1mYWxsYmFjay1lY2hvIgorZmkKKworQUNfU1VCU1QobHRfRUNITykKK10pCitfTFRfREVDTChbXSwgW1NIRUxMXSwgWzFdLCBbU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0c10pCitfTFRfREVDTChbXSwgW0VDSE9dLCBbMV0sCisgICAgW0FuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlc10pCitdKSMgX0xUX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9FTkFCTEVfTE9DSworIyAtLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfRU5BQkxFX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCisgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKkVMRi0zMiopCisJSFBVWF9JQTY0X01PREU9IjMyIgorCTs7CisgICAgICAqRUxGLTY0KikKKwlIUFVYX0lBNjRfTU9ERT0iNjQiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKwkqMzItYml0KikKKwkgIExEPSIke0xELWxkfSAtMzIiCisJICA7OworCSpOMzIqKQorCSAgTEQ9IiR7TEQtbGR9IC1uMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC02NCIKKwkgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgICAqMzItYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkgICAgOzsKKwkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKKyAgICBbQUNfTEFOR19QVVNIKEMpCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCitdKSMgX0xUX0VOQUJMRV9MT0NLCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tBQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQorX0xUX0RFQ0woW10sIFtBUl0sIFsxXSwgW1RoZSBhcmNoaXZlcl0pCitfTFRfREVDTChbXSwgW0FSX0ZMQUdTXSwgWzFdKQorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCitfTFRfREVDTChbXSwgW29sZF9wb3N0aW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX0RFQ0woW10sIFtvbGRfcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZWxzZQorICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKK2ZpCitdKSMgX0xUX0NPTVBJTEVSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW19MVF9DT01QSUxFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtdKQorCisKKyMgX0xUX0xJTktFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCisjICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsaW5rZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0xJTktFUl9PUFRJT05dLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFskMV0sIFskMl0sCisgIFskMj1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICAkMj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgJDI9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9IkFCQ0QiCisKKyAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgbXNkb3NkamdwcCopCisgICAgIyBPbiBESkdQUCwgdGhpcyB0ZXN0IGNhbiBibG93IHVwIHByZXR0eSBiYWRseSBkdWUgdG8gcHJvYmxlbXMgaW4gbGliYworICAgICMgKGFueSBzaW5nbGUgYXJndW1lbnQgZXhjZWVkaW5nIDIwMDAgYnl0ZXMgY2F1c2VzIGEgYnVmZmVyIG92ZXJydW4KKyAgICAjIGR1cmluZyBnbG9iIGV4cGFuc2lvbikuICBFdmVuIGlmIGl0IHdlcmUgZml4ZWQsIHRoZSByZXN1bHQgb2YgdGhpcworICAgICMgY2hlY2sgd291bGQgYmUgbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMjI4ODsgICAgIyAxMksgaXMgYWJvdXQgcmlnaHQKKyAgICA7OworCisgIGdudSopCisgICAgIyBVbmRlciBHTlUgSHVyZCwgdGhpcyB0ZXN0IGlzIG5vdCByZXF1aXJlZCBiZWNhdXNlIHRoZXJlIGlzCisgICAgIyBubyBsaW1pdCB0byB0aGUgbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgIyBMaWJ0b29sIHdpbGwgaW50ZXJwcmV0IC0xIGFzIG5vIGxpbWl0IHdoYXRzb2V2ZXIKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTE7CisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgICMgT24gV2luOXgvTUUsIHRoaXMgdGVzdCBibG93cyB1cCAtLSBpdCBzdWNjZWVkcywgYnV0IHRha2VzCisgICAgIyBhYm91dCA1IG1pbnV0ZXMgYXMgdGhlIHRlc3RzdHJpbmcgZ3Jvd3MgZXhwb25lbnRpYWxseS4KKyAgICAjIFdvcnNlLCBzaW5jZSA5eC9NRSBhcmUgbm90IHByZS1lbXB0aXZlbHkgbXVsdGl0YXNraW5nLAorICAgICMgeW91IGVuZCB1cCB3aXRoIGEgImZyb3plbiIgY29tcHV0ZXIsIGV2ZW4gdGhvdWdoIHdpdGggcGF0aWVuY2UKKyAgICAjIHRoZSB0ZXN0IGV2ZW50dWFsbHkgc3VjY2VlZHMgKHdpdGggYSBtYXggbGluZSBsZW5ndGggb2YgMjU2aykuCisgICAgIyBJbnN0ZWFkLCBsZXQncyBqdXN0IHB1bnQ6IHVzZSB0aGUgbWluaW11bSBsaW5lbGVuZ3RoIHJlcG9ydGVkIGJ5CisgICAgIyBhbGwgb2YgdGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXM6IDgxOTIgKG9uIE5ULzJLL1hQKS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGFtaWdhb3MqKQorICAgICMgT24gQW1pZ2FPUyB3aXRoIHBka3NoLCB0aGlzIHRlc3QgdGFrZXMgaG91cnMsIGxpdGVyYWxseS4KKyAgICAjIFNvIHdlIGp1c3QgcHVudCBhbmQgdXNlIGEgbWluaW11bSBsaW5lIGxlbmd0aCBvZiA4MTkyLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbmV0YnNkKiB8IGZyZWVic2QqIHwgb3BlbmJzZCogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KikKKyAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxpZiB0ZXN0IC14IC91c3Ivc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3Vzci9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49NjU1MzYJIyB1c2FibGUgZGVmYXVsdCBmb3IgYWxsIEJTRHMKKyAgICBmaQorICAgICMgQW5kIGFkZCBhIHNhZmV0eSB6b25lCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAorICAgIDs7CisKKyAgaW50ZXJpeCopCisgICAgIyBXZSBrbm93IHRoZSB2YWx1ZSAyNjIxNDQgYW5kIGhhcmRjb2RlIGl0IHdpdGggYSBzYWZldHkgem9uZSAobGlrZSBCU0QpCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE5NjYwOAorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDsgZG8KKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWFgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKK3ZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCisgIGVuYWJsZV9kbG9wZW49dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgorICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KK2Vsc2UKKyAgbHRfY3ZfZGxvcGVuPW5vCisgIGx0X2N2X2Rsb3Blbl9saWJzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYmVvcyopCisgICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAorCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKKwkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAorCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCisgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCisgIGhhcmRfbGlua3M9eWVzCisgICRSTSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCitfTFRfREVDTChbXSwgW25lZWRfbG9ja3NdLCBbMV0sIFtNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj9dKQorXSkjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTCisKKworIyBfTFRfQ0hFQ0tfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ0hFQ0tfT0JKRElSXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAorW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKK19MVF9ERUNMKFtdLCBbb2JqZGlyXSwgWzBdLAorICAgICAgICAgW1RoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlc10pZG5sCittNF9wYXR0ZXJuX2FsbG93KFtMVF9PQkpESVJdKWRubAorQUNfREVGSU5FX1VOUVVPVEVEKExUX09CSkRJUiwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0ICJYJF9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSkiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIiAhPSBubzsgdGhlbgorICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT11bnN1cHBvcnRlZAorZmkKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKKworaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8CisgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hY3Rpb25dLCBbMF0sCisgICAgW0hvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlXSkKK10pIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgKKworCisjIF9MVF9DTURfU1RSSVBMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfU1RSSVBMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQoraWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8ICRHUkVQICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIEFDX01TR19SRVNVTFQoW3llc10pCitlbHNlCisjIEZJWE1FIC0gaW5zZXJ0IHNvbWUgcmVhbCB0ZXN0cywgaG9zdF9vcyBpc24ndCByZWFsbHkgZ29vZCBlbm91Z2gKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCittNF9pZihbJDFdLAorCVtdLCBbCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LywvTFIvIiA7OworICAgICopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8iIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCitCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CisgIGx0X2Zvbz0iIjsKKyAgbHRfY291bnQ9MDsKKyAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKKyAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7CisgICAgICBpZiAoJGx0X2kgPT0gIi4uIikgeworICAgICAgICBsdF9jb3VudCsrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKKyAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQorICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KK30nYAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICRsdF9zZWFyY2hfcGF0aF9zcGVjYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4W1s0LTldXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIHBvd2VycGMpCisgICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgorICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRFQ0hPICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiogfCB5ZXMsY2VnY2MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgICAgZmknCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgJEdSRVAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICBzYXZlX2xpYmRpcj0kbGliZGlyCisgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisgICAgICAgTERGTEFHUz1cIlwkTERGTEFHUyAkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSlcIiIKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgIFtBU19JRihbICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbF0sCisgICAgICAgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCisgIExERkxBR1M9JHNhdmVfTERGTEFHUworICBsaWJkaXI9JHNhdmVfbGliZGlyCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorX0xUX1BBVEhfTERfR05VCitBQ19TVUJTVChbTERdKQorCitfTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCitdKSMgTFRfUEFUSF9MRAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTERfR05VCisjLSAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkjIF9MVF9QQVRIX0xEX0dOVQorCisKKyMgX0xUX0NNRF9SRUxPQUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAorICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworX0xUX0RFQ0woW10sIFtyZWxvYWRfZmxhZ10sIFsxXSwgW0hvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXNdKWRubAorX0xUX0RFQ0woW10sIFtyZWxvYWRfY21kc10sIFsyXSlkbmwKK10pIyBfTFRfQ01EX1JFTE9BRAorCisKKyMgX0xUX0NIRUNLX01BR0lDX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGhvdyB0byBjaGVjayBmb3IgbGlicmFyeSBkZXBlbmRlbmNpZXMKKyMgIC0tIFBPUlRNRSBmaWxsIGluIHdpdGggdGhlIGR5bmFtaWMgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MKK200X2RlZnVuKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298X3BpY1wuYSkkJworICBmaQorICA7OworCituZXdvczYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK29wZW5ic2QqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCityZG9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICBtb3Rvcm9sYSkKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVtbMC05XV1bWzAtOV1dKiBWZXJzaW9uIFtbMC05XV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCisgICAgOzsKKyAgbmNyKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgc2VxdWVudCkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCisgICAgOzsKKyAgc25pKQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgZHluYW1pYyBsaWIiCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCisgICAgOzsKKyAgc2llbWVucykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHBjKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgZXNhYworICA7OworCit0cGYqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworXSkKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworX0xUX0RFQ0woW10sIFtkZXBsaWJzX2NoZWNrX21ldGhvZF0sIFsxXSwKKyAgICBbTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHNdKQorX0xUX0RFQ0woW10sIFtmaWxlX21hZ2ljX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSAiZmlsZV9tYWdpYyJdKQorXSkjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKworCisjIExUX1BBVEhfTk0KKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byBhIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0xUX1BBVEhfTk1dLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2ZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKV0sIGx0X2N2X3BhdGhfTk0sCitbaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgorICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorZWxzZQorICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhaworCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsKKwkgICAgOzsKKwkgICopCisJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CisJICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmldKQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgQUNfQ0hFQ0tfVE9PTFMoRFVNUEJJTiwgWyJkdW1wYmluIC1zeW1ib2xzIiAibGluayAtZHVtcCAtc3ltYm9scyJdLCA6KQorICBBQ19TVUJTVChbRFVNUEJJTl0pCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorQUNfU1VCU1QoW05NXSkKK19MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCisKK0FDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCisgIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTpfX29saW5lX186ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkTk0gXCJjb25mdGVzdC4kYWNfb2JqZXh0XCIiIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0KQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK10pIyBMVF9QQVRIX05NCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitBVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX0xUX0VPRgorCSAgIyBOb3cgZ2VuZXJhdGUgdGhlIHN5bWJvbCBmaWxlLgorCSAgZXZhbCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dCcKKworCSAgY2F0IDw8X0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAgKi8KK2NvbnN0IHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK19MVF9FT0YKKwkgICMgTm93IHRyeSBsaW5raW5nIHRoZSB0d28gZmlsZXMuCisJICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0c3RtLiRhY19vYmpleHQKKwkgIGx0X3NhdmVfTElCUz0iJExJQlMiCisJICBsdF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKwkgIExJQlM9ImNvbmZ0c3RtLiRhY19vYmpleHQiCisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgICBwaXBlX3dvcmtzPXllcworCSAgZmkKKwkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCisJICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwllbHNlCisJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisJZmkKKyAgICAgIGVsc2UKKwllY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X3ZhciBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGZpCisgIGVsc2UKKyAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBjYXQgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK0FDX01TR19DSEVDS0lORyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdKQorbTRfaWYoWyQxXSwgW0NYWF0sIFsKKyAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSkKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGVjcGMqICkKKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKikKKwkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSBvbiBQUEMKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworCSpTdW5cIEYqKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCisgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgcmRvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgIDs7CisgICopCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSkiCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCisgICAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKV0sCisgICAgWyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitfTFRfVEFHREVDTChbcGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9waWNdLCBbMV0sCisJW0FkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0c10pCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgorX0xUX0xJTktFUl9PUFRJT04oW2lmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzXSwKKyAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcywgJDEpLAorICAkbHRfdG1wX3N0YXRpY19mbGFnLAorICBbXSwKKyAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT1dKQorX0xUX1RBR0RFQ0woW2xpbmtfc3RhdGljX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9zdGF0aWNdLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmddKQorXSkjIF9MVF9DT01QSUxFUl9QSUMKKworCisjIF9MVF9MSU5LRVJfU0hMSUJTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfU0hMSUJTXSwKK1tBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4W1s0LTldXSopCisgICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisgICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0iJGx0ZGxsX2NtZHMiCisgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87L14uKltbIF1dX19ubV9fL3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICAqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGVzYWMKKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCitdLCBbCisgIHJ1bnBhdGhfdmFyPQorICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorICBfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIodGhyZWFkX3NhZmVfZmxhZ19zcGVjLCAkMSk9CisgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgorZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7CisgIGVzYWMKKworICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4W1szLTldXSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICisqKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaW50ZXJpeFtbMy05XV0qKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgOzsKKworICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0KKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKyAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkRUNITyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qKQkJCSMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCWVzYWMKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKyAgICAgICAgZmkKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKwkgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCisJICAjIERUX1JVTlBBVEggdGFnIGZyb20gZXhlY3V0YWJsZXMgYW5kIGxpYnJhcmllcy4gIEJ1dCBkb2luZyBzbworCSAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwllbHNlCisJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAjIGVtcHR5IGV4ZWN1dGFibGUuCisJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisJIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCisJICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJZmkKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbWzQ1XV0qKQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICAgIGxpYmV4dD1saWIKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYCRFQ0hPICJYJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKyAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgX0xUX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICA7OworCisgICAgaHB1eDEwKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPScrYiAkbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKKwkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCisJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KKyAgICAgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorICAgICAgICBBQ19MSU5LX0lGRUxTRShpbnQgZm9vKHZvaWQpIHt9LAorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgICApCisgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKwllbHNlCisJICBjYXNlICRob3N0X29zIGluCisJICAgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgOzsKKwkgICAqKQorCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgICA7OworCSAgZXNhYworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nIiB8ICRYc2VkYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCisgICAgICAkUk0gY29uZnRlc3QqCisgICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisJcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKyAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICAgICAgICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorICAgICAgICB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgZWxzZQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworICAgICAgICBmaQorICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICBmaQorICAgICAgJFJNIGNvbmZ0ZXN0KgorICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCitfTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisgICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKK19MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKK19MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRdLCBbMV0sCisgICAgW1tJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSAkbGliZGlyIGludG8gYSBiaW5hcnkKKyAgICBkdXJpbmcgbGlua2luZy4gIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF1dKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAorICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworICAgICJhYnNvbHV0ZSIsIGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nICR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisgICAgbGlicmFyeSBpcyByZWxvY2F0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9taW51c19MXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9zaGxpYnBhdGhfdmFyXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnldKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9hdXRvbWF0aWNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorICAgIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisgICAgYWdhaW5zdCBpdF0pCitfTFRfVEFHREVDTChbXSwgW2luaGVyaXRfcnBhdGhdLCBbMF0sCisgICAgW1NldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisgICAgdG8gcnVudGltZSBwYXRoIGxpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtsaW5rX2FsbF9kZXBsaWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaXhfc3JjZmlsZV9wYXRoXSwgWzFdLAorICAgIFtGaXggdGhlIHNoZWxsIHZhcmlhYmxlICRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXJdKQorX0xUX1RBR0RFQ0woW10sIFthbHdheXNfZXhwb3J0X3N5bWJvbHNdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZF0pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9zeW1ib2xzX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtleGNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtpbmNsdWRlX2V4cHN5bXNdLCBbMV0sCisgICAgW1N5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZF0pCitfTFRfVEFHREVDTChbXSwgW3ByZWxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQorXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisKKworIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbHRfc2F2ZV9DQz0iJENDIgorQUNfTEFOR19QVVNIKEMpCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKKworX0xUX1RBR19DT01QSUxFUgorIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKyAgTFRfU1lTX0RMT1BFTl9TRUxGCisgIF9MVF9DTURfU1RSSVBMSUIKKworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4W1s0LTldXSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0NfQ09ORklHCisKKworIyBfTFRfUFJPR19DWFgKKyMgLS0tLS0tLS0tLS0tCisjIFNpbmNlIEFDX1BST0dfQ1hYIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIGcrKyBpZiB0aGVyZSBpcyBubyBjKysKKyMgY29tcGlsZXIsIHdlIGhhdmUgb3VyIG93biB2ZXJzaW9uIGhlcmUuCittNF9kZWZ1bihbX0xUX1BST0dfQ1hYXSwKK1sKK3B1c2hkZWYoW0FDX01TR19FUlJPUl0sIFtfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXNdKQorQUNfUFJPR19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIEFDX1BST0dfQ1hYQ1BQCitlbHNlCisgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19DWFgKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19DWFhdLCBbXSkKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0NYWF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKKworQUNfTEFOR19QVVNIKEMrKykKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisgICAgZmkKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgorCisgICAgICBMVF9QQVRIX0xECisKKyAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgICAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8CisJICAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKyAgICBlbHNlCisgICAgICBHWFg9bm8KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICB3bGFyYz0KKyAgICBmaQorCisgICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgICAgICBjYXNlICRsZF9mbGFnIGluCisJICAgICAgKi1icnRsKikKKwkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgICBicmVhaworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisKKyAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgICAgZmkKKworICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKKworICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwkgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIGZpCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKKyAgICAgICAgICAjIGV4ZWN1dGFibGUuCisgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiAkRUNITyAiWCR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iIHwgJFhzZWQ7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkCisJICAgICMgbGlicmFyaWVzLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisgICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICAgICAgICMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICBlbHNlCisJICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICAgICAgZWxzZQorICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZFtbMTJdXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKyAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgorICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyAkRUNITyAiWCRsaXN0IiB8ICRYc2VkJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGFDQyopCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgaHBwYSo2NCopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgICopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbWzMtOV1dKikKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTR0kgQysrCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyIgfCAkWHNlZGAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICJYJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAtbyAkbGliJworCSAgICAgIGZpCisJICAgIGZpCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbWzEtNV1dKiB8ICpwZ2NwcFwgW1sxLTVdXSopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKwkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAiJworCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorCQlybSAtcmYgJHRwbGRpcn4KKwkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKwkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKwkJcm0gLXJmICR0cGxkaXJ+CisJCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgd2lsbCB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJEVDSE8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7ICRFQ0hPICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIDs7CisJICB4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCQllY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRFQ0hPIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZWNobworCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiWCR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmciIHwgJFhzZWRgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJCTs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKwkgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAke3dsfS1pbnB1dCAke3dsfSRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyIgfCAkWHNlZGAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifgorCSAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YCRFQ0hPICJYJHRlbXBsaXN0IiB8ICRYc2VkIC1lICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgJEVDSE8gIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIlgke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciIHwgJFhzZWRgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nIiB8ICRYc2VkYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgIlwtTCInCisKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBwc29zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgc3Vub3M0KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBzb2xhcmlzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcworCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgICAgaWYgJENDIC0tdmVyc2lvbiB8ICRHUkVQIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJcLUwiJworCSAgICAgIGVsc2UKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgcGxhdGZvcm0uCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLUcgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJCSopCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgQ0MqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgorICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBDQz0kbHRfc2F2ZV9DQworICBMRENYWD0kTEQKKyAgTEQ9JGx0X3NhdmVfTEQKKyAgR0NDPSRsdF9zYXZlX0dDQworICB3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorICBsdF9jdl9wYXRoX0xEQ1hYPSRsdF9jdl9wYXRoX0xECisgIGx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAorICBsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKK2ZpICMgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19DWFhfQ09ORklHCisKKworIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK200X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCittNF9pZihbJDFdLCBbXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitpbnQgYTsKK3ZvaWQgZm9vICh2b2lkKSB7IGEgPSAwOyB9CitfTFRfRU9GCitdLCBbJDFdLCBbQ1hYXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCitjbGFzcyBGb28KK3sKK3B1YmxpYzoKKyAgRm9vICh2b2lkKSB7IGEgPSAwOyB9Citwcml2YXRlOgorICBpbnQgYTsKK307CitfTFRfRU9GCitdLCBbJDFdLCBbRjc3XSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtGQ10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIgYQorICAgICAgYT0wCisgICAgICByZXR1cm4KKyAgICAgIGVuZAorX0xUX0VPRgorXSwgWyQxXSwgW0dDSl0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcHVibGljIGNsYXNzIGZvbyB7CisgIHByaXZhdGUgaW50IGE7CisgIHB1YmxpYyB2b2lkIGJhciAodm9pZCkgeworICAgIGEgPSAwOworICB9Cit9OworX0xUX0VPRgorXSkKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiB8fAorICAgICAgICAgIHRlc3QgJHAgPSAiLVIiOyB0aGVuCisJIHByZXY9JHAKKwkgY29udGludWUKKyAgICAgICBlbHNlCisJIHByZXY9CisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGNhc2UgJHAgaW4KKwkgLUwqIHwgLVIqKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICBmaQorCSAgIDs7CisJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCisJICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgorCSBlc2FjCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSBlbHNlCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKikgOzsgIyBJZ25vcmUgdGhlIHJlc3QuCisKKyAgICBlc2FjCisgIGRvbmUKKworICAjIENsZWFuIHVwLgorICBybSAtZiBhLm91dCBhLmV4ZQorZWxzZQorICBlY2hvICJsaWJ0b29sLm00OiBlcnJvcjogcHJvYmxlbSBjb21waWxpbmcgJDEgdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorbTRfaWYoWyQxXSwgW0NYWF0sCitbY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFtbMy05XV0qKQorICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCisgICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCisgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPQorICA7OworCitsaW51eCopCisgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAqU3VuXCBDKikKKyAgICAjIFN1biBDKysgNS45CisKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCisgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAorICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCisgICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKK2ZpCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc10sIFsxXSwKKyAgICBbVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwX29iamVjdHNdLCBbMV0sCisgICAgW0RlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0bworICAgIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcF9vYmplY3RzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBzXSwgWzFdKQorX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoXSwgWzFdLAorICAgIFtUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworICAgIGEgc2hhcmVkIGxpYnJhcnldKQorXSkjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMKKworCisjIF9MVF9QUk9HX0Y3NworIyAtLS0tLS0tLS0tLS0KKyMgU2luY2UgQUNfUFJPR19GNzcgaXMgYnJva2VuLCBpbiB0aGF0IGl0IHJldHVybnMgdGhlIGVtcHR5IHN0cmluZworIyBpZiB0aGVyZSBpcyBubyBmb3J0cmFuIGNvbXBpbGVyLCB3ZSBoYXZlIG91ciBvd24gdmVyc2lvbiBoZXJlLgorbTRfZGVmdW4oW19MVF9QUk9HX0Y3N10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRjc3PXllc10pCitBQ19QUk9HX0Y3NworaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRjc3PXllcworZmkKK3BvcGRlZihbQUNfTVNHX0VSUk9SXSkKK10pIyBfTFRfUFJPR19GNzcKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GNzddLCBbXSkKKworCisjIF9MVF9MQU5HX0Y3N19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIDc3IGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtfTFRfUFJPR19GNzddKWRubAorQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KK19MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCitfTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWYKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEY3NyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAorICAgICAgc3Vicm91dGluZSB0CisgICAgICByZXR1cm4KKyAgICAgIGVuZAorIgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAorICAgICAgcHJvZ3JhbSB0CisgICAgICBlbmQKKyIKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9IiRDQyIKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBDQz0ke0Y3Ny0iZjc3In0KKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXMKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GNzdfQ09ORklHCisKKworIyBfTFRfUFJPR19GQworIyAtLS0tLS0tLS0tLQorIyBTaW5jZSBBQ19QUk9HX0ZDIGlzIGJyb2tlbiwgaW4gdGhhdCBpdCByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcKKyMgaWYgdGhlcmUgaXMgbm8gZm9ydHJhbiBjb21waWxlciwgd2UgaGF2ZSBvdXIgb3duIHZlcnNpb24gaGVyZS4KK200X2RlZnVuKFtfTFRfUFJPR19GQ10sCitbCitwdXNoZGVmKFtBQ19NU0dfRVJST1JdLCBbX2x0X2Rpc2FibGVfRkM9eWVzXSkKK0FDX1BST0dfRkMKK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCAiWCRGQyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCitwb3BkZWYoW0FDX01TR19FUlJPUl0pCitdKSMgX0xUX1BST0dfRkMKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtfTFRfUFJPR19GQ10sIFtdKQorCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW19MVF9QUk9HX0ZDXSlkbmwKK0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9eWVzCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX0dDSl9DT05GSUcKKworCisjIF9MVF9MQU5HX1JDX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19SQ19DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfUkNdKWRubAorQUNfTEFOR19TQVZFCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitfTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKK2x0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9CitDQz0ke1JDLSJ3aW5kcmVzIn0KK2NvbXBpbGVyPSRDQworX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIDoKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0FDX0xBTkdfUkVTVE9SRQorQ0M9IiRsdF9zYXZlX0NDIgorXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sIiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19YU0lfU0hFTExGTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJvdXJuZSBhbmQgWFNJIGNvbXBhdGlibGUgdmFyaWFudHMgb2Ygc29tZSB1c2VmdWwgc2hlbGwgZnVuY3Rpb25zLgorbTRfZGVmdW4oW19MVF9QUk9HX1hTSV9TSEVMTEZOU10sCitbY2FzZSAkeHNpX3NoZWxsIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgIGNhc2UgJHsxfSBpbgorICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OworICBlc2FjCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSIKK30KKworIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAorIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgorIyBjYWxsOgorIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKKyMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAorIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKyMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisjIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKKyMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KKyMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OworICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgZXNhYworICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iCit9CisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9Cit9CisKKyMgZnVuY19vcHRfc3BsaXQKK2Z1bmNfb3B0X3NwbGl0ICgpCit7CisgIGZ1bmNfb3B0X3NwbGl0X29wdD0kezElJT0qfQorICBmdW5jX29wdF9zcGxpdF9hcmc9JHsxIyo9fQorfQorCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICBjYXNlICR7MX0gaW4KKyAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OworICBlc2FjCit9CisKKyMgZnVuY194Zm9ybSBsaWJvYmotb3Itc291cmNlCitmdW5jX3hmb3JtICgpCit7CisgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG8KK30KKworIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgorZnVuY19hcml0aCAoKQoreworICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJFsqXSApKQorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PSR7IzF9Cit9CisKK19MVF9FT0YKKyAgICA7OworICAqKSAjIEJvdXJuZSBjb21wYXRpYmxlIGZ1bmN0aW9ucy4KKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZnVuY19kaXJuYW1lICgpCit7CisgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGRpcm5hbWUiYAorICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCisgIGVsc2UKKyAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgIGZpCit9CisKKyMgZnVuY19iYXNlbmFtZSBmaWxlCitmdW5jX2Jhc2VuYW1lICgpCit7CisgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCit9CisKK2RubCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lCitkbmwgQSBwb3J0YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkIGluIGdlbmVyYWwubTRzaAorZG5sIHNvIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0IGhlcmUuCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgY2FzZSAkezJ9IGluCisgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIlgkezN9IiBcCisgICAgICAgICAgIHwgJFhzZWQgLWUgInMlXiR7MX0lJSIgLWUgInMlXFxcXCR7Mn1cJCUlImA7OworICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJYJHszfSIgXAorICAgICAgICAgICB8ICRYc2VkIC1lICJzJV4kezF9JSUiIC1lICJzJSR7Mn1cJCUlImA7OworICBlc2FjCit9CisKKyMgc2VkIHNjcmlwdHM6CitteV9zZWRfbG9uZ19vcHQ9JzFzL15cKC1bW149XV0qXCk9LiovXDEvO3EnCitteV9zZWRfbG9uZ19hcmc9JzFzL14tW1tePV1dKj0vLycKKworIyBmdW5jX29wdF9zcGxpdAorZnVuY19vcHRfc3BsaXQgKCkKK3sKKyAgZnVuY19vcHRfc3BsaXRfb3B0PWAkRUNITyAiWCR7MX0iIHwgJFhzZWQgLWUgIiRteV9zZWRfbG9uZ19vcHQiYAorICBmdW5jX29wdF9zcGxpdF9hcmc9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJG15X3NlZF9sb25nX2FyZyJgCit9CisKKyMgZnVuY19sbzJvIG9iamVjdAorZnVuY19sbzJvICgpCit7CisgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICJYJHsxfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorfQorCisjIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQorZnVuY194Zm9ybSAoKQoreworICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIlgkezF9IiB8ICRYc2VkIC1lICdzL1wuW1teLl1dKiQvLmxvLydgCit9CisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRbQF0iYAorfQorCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkWzFdIiA6ICIuKiIgMj4vZGV2L251bGwgfHwgZWNobyAkbWF4X2NtZF9sZW5gCit9CisKK19MVF9FT0YKK2VzYWMKKworY2FzZSAkbHRfc2hlbGxfYXBwZW5kIGluCisgIHllcykKKyAgICBjYXQgPDwgXF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorCisjIGZ1bmNfYXBwZW5kIHZhciB2YWx1ZQorIyBBcHBlbmQgVkFMVUUgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIuCitmdW5jX2FwcGVuZCAoKQoreworICBldmFsICIkWzFdKz1cJFsyXSIKK30KK19MVF9FT0YKKyAgICA7OworICAqKQorICAgIGNhdCA8PCBcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgIGV2YWwgIiRbMV09XCQkWzFdXCRbMl0iCit9CisKK19MVF9FT0YKKyAgICA7OworICBlc2FjCitdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDE1MWEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzNjggQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRvcHRpb25zLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPUFRJT05TX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKKworIyBfTFRfTUFOR0xFX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfT1BUSU9OXSwKK1tbX0xUX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxX18kMiwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworCisjIF9MVF9TRVRfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IG9wdGlvbiBPUFRJT04tTkFNRSBmb3IgbWFjcm8gTUFDUk8tTkFNRSwgYW5kIGlmIHRoZXJlIGlzIGEKKyMgbWF0Y2hpbmcgaGFuZGxlciBkZWZpbmVkLCBkaXNwYXRjaCB0byBpdC4gIE90aGVyIE9QVElPTi1OQU1FcyBhcmUKKyMgc2F2ZWQgYXMgYSBmbGFnLgorbTRfZGVmaW5lKFtfTFRfU0VUX09QVElPTl0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pKWRubAorbTRfaWZkZWYoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICAgICAgX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gYCQyJ10pXSlbXWRubAorXSkKKworCisjIF9MVF9JRl9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIElGLVNFVCwgW0lGLU5PVC1TRVRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCittNF9kZWZpbmUoW19MVF9JRl9PUFRJT05dLAorW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIFskMl0pLCBbJDNdLCBbJDRdKV0pCisKKworIyBfTFRfVU5MRVNTX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QsIElGLU5PVC1TRVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1OT1QtU0VUIHVubGVzcyBhbGwgb3B0aW9ucyBpbiBPUFRJT04tTElTVCBmb3IgTUFDUk8tTkFNRQorIyBhcmUgc2V0LgorbTRfZGVmaW5lKFtfTFRfVU5MRVNTX09QVElPTlNdLAorW200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorCSAgICBbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgX0xUX09wdGlvbiksCisJCSAgICAgIFttNF9kZWZpbmUoWyQwX2ZvdW5kXSldKV0pW11kbmwKK200X2lmZGVmKFskMF9mb3VuZF0sIFttNF91bmRlZmluZShbJDBfZm91bmRdKV0sIFskMworXSlbXWRubAorXSkKKworCisjIF9MVF9TRVRfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT04tTElTVCBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIExpYnRvb2wgb3B0aW9ucyBhc3NvY2lhdGVkCisjIHdpdGggTUFDUk8tTkFNRS4gIElmIGFueSBPUFRJT04gaGFzIGEgbWF0Y2hpbmcgaGFuZGxlciBkZWNsYXJlZCB3aXRoCisjIExUX09QVElPTl9ERUZJTkUsIGRpc3BhdGNoIHRvIHRoYXQgbWFjcm87IG90aGVyd2lzZSBjb21wbGFpbiBhYm91dAorIyB0aGUgdW5rbm93biBvcHRpb24gYW5kIGV4aXQuCittNF9kZWZ1bihbX0xUX1NFVF9PUFRJT05TXSwKK1sjIFNldCBvcHRpb25zCittNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKKyAgICBbX0xUX1NFVF9PUFRJT04oWyQxXSwgX0xUX09wdGlvbildKQorCittNF9pZihbJDFdLFtMVF9JTklUXSxbCisgIGRubAorICBkbmwgU2ltcGx5IHNldCBzb21lIGRlZmF1bHQgdmFsdWVzIChpLmUgb2ZmKSBpZiBib29sZWFuIG9wdGlvbnMgd2VyZSBub3QKKyAgZG5sIHNwZWNpZmllZDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPW5vCisgIF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLCBbZW5hYmxlX3dpbjMyX2RsbD1ubworICBdKQorICBkbmwKKyAgZG5sIElmIG5vIHJlZmVyZW5jZSB3YXMgbWFkZSB0byB2YXJpb3VzIHBhaXJzIG9mIG9wcG9zaW5nIG9wdGlvbnMsIHRoZW4KKyAgZG5sIHdlIHJ1biB0aGUgZGVmYXVsdCBtb2RlIGhhbmRsZXIgZm9yIHRoZSBwYWlyLiAgRm9yIGV4YW1wbGUsIGlmIG5laXRoZXIKKyAgZG5sIGBzaGFyZWQnIG5vciBgZGlzYWJsZS1zaGFyZWQnIHdhcyBwYXNzZWQsIHdlIGVuYWJsZSBidWlsZGluZyBvZiBzaGFyZWQKKyAgZG5sIGFyY2hpdmVzIGJ5IGRlZmF1bHQ6CisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzaGFyZWQgZGlzYWJsZS1zaGFyZWRdLCBbX0xUX0VOQUJMRV9TSEFSRURdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc3RhdGljIGRpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3BpYy1vbmx5IG5vLXBpY10sIFtfTFRfV0lUSF9QSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsIGRpc2FibGUtZmFzdC1pbnN0YWxsXSwKKyAgCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBdKQorXSkjIF9MVF9TRVRfT1BUSU9OUworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFjcm9zIHRvIGhhbmRsZSBMVF9JTklUIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBfTFRfTUFOR0xFX0RFRlVOKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTUFOR0xFX0RFRlVOXSwKK1tbX0xUX09QVElPTl9ERUZVTl9dbTRfYnBhdHN1YnN0KG00X3RvdXBwZXIoWyQxX18kMl0pLCBbW15BLVowLTlfXV0sIFtfXSldKQorCisKKyMgTFRfT1BUSU9OX0RFRklORShNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgQ09ERSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbTFRfT1BUSU9OX0RFRklORV0sCitbbTRfZGVmaW5lKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksIFskM10pW11kbmwKK10pIyBMVF9PUFRJT05fREVGSU5FCisKKworIyBkbG9wZW4KKyMgLS0tLS0tCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rsb3Blbl0sIFtlbmFibGVfZGxvcGVuPXllcworXSkKKworQVVfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkbG9wZW5dKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYGRsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sIFtdKQorCisKKyMgd2luMzItZGxsCisjIC0tLS0tLS0tLQorIyBEZWNsYXJlIHBhY2thZ2Ugc3VwcG9ydCBmb3IgYnVpbGRpbmcgd2luMzIgZGxsJ3MuCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sCitbZW5hYmxlX3dpbjMyX2RsbD15ZXMKKworY2FzZSAkaG9zdCBpbgorKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi1jZWdjYyopCisgIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKKyAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzBdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMF0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKK19MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFswXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCitdKSMgd2luMzItZGxsCisKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKKworCisjIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAorIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCisjIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU1RBVElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKKyMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCisgICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKKyAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorCitfTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCisJIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAorXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKK3RoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKKwlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAorICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKKyAgICBbcGljX21vZGU9ZGVmYXVsdF0pCisKK3Rlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCisKK19MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCitdKSMgX0xUX1dJVEhfUElDCisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQorCisjIE9sZCBuYW1lOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKK3B1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTFRETF9JTklUIE9wdGlvbnMgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKK200X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCisKK200X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00CkBAIC0wLDAgKzEsMTIzIEBACisjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQorIworIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNiBsdHN1Z2FyLm00CisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRTVUdBUl9WRVJTSU9OXSwgW200X2lmKFswLjFdKV0pCisKKworIyBsdF9qb2luKFNFUCwgQVJHMSwgW0FSRzIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIEFSRzFTRVBBUkcyLi4uU0VQQVJHbiwgb21pdHRpbmcgW10gYXJndW1lbnRzIGFuZCB0aGVpcgorIyBhc3NvY2lhdGVkIHNlcGFyYXRvci4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2pvaW4gZnJvbSBBdXRvY29uZiAyLjYyLCBzaW5jZSBhbGwgZWFybGllcgorIyB2ZXJzaW9ucyBpbiBtNHN1Z2FyIGhhZCBidWdzLgorbTRfZGVmaW5lKFtsdF9qb2luXSwKK1ttNF9pZihbJCNdLCBbMV0sIFtdLAorICAgICAgIFskI10sIFsyXSwgW1skMl1dLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDJdX10pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCittNF9kZWZpbmUoW19sdF9qb2luXSwKK1ttNF9pZihbJCMkMl0sIFsyXSwgW10sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMSQyXV0pJDAoWyQxXSwgbTRfc2hpZnQobTRfc2hpZnQoJEApKSldKV0pCisKKworIyBsdF9jYXIoTElTVCkKKyMgbHRfY2RyKExJU1QpCisjIC0tLS0tLS0tLS0tLQorIyBNYW5pcHVsYXRlIG00IGxpc3RzLgorIyBUaGVzZSBtYWNyb3MgYXJlIG5lY2Vzc2FyeSBhcyBsb25nIGFzIHdpbGwgc3RpbGwgbmVlZCB0byBzdXBwb3J0CisjIEF1dG9jb25mLTIuNTkgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzIGBTRVBBUkFUT1InYFNUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGUxNTRmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEdlbmVyYXRlZCBmcm9tIGx0dmVyc2lvbi5pbi4KKworIyBzZXJpYWwgMzAxMiBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi4yLjZdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzAxMl0pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi4yLjYnCittYWNyb19yZXZpc2lvbj0nMS4zMDEyJworX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCitfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQorXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzN2JiMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00CkBAIC0wLDAgKzEsOTIgQEAKKyMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNCBsdH5vYnNvbGV0ZS5tNAorCisjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KKyMKKyMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIHdoaWNoIGhhdmUgbGF0ZXIgYmVlbiBjaGFuZ2VkIHRvIG00X2RlZmluZSBhcyB0aGV5IGFyZW4ndCBwYXJ0IG9mIHRoZQorIyBleHBvcnRlZCBBUEksIG9yIG1vdmVkIHRvIEF1dG9jb25mIG9yIEF1dG9tYWtlIHdoZXJlIHRoZXkgYmVsb25nLgorIworIyBUaGUgdHJvdWJsZSBpcywgYWNsb2NhbCBpcyBhIGJpdCB0aGljay4gIEl0J2xsIHNlZSB0aGUgb2xkIEFDX0RFRlVOCisjIGluIC91c3Ivc2hhcmUvYWNsb2NhbC9saWJ0b29sLm00IGFuZCByZW1lbWJlciBpdCwgdGhlbiB3aGVuIGl0IHNlZXMgdXMKKyMgdXNpbmcgYSBtYWNybyB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gb3VyIGxvY2FsIG00L2xpYnRvb2wubTQgaXQnbGwKKyMgcHVsbCB0aGUgb2xkIGxpYnRvb2wubTQgaW4gKGl0IGRvZXNuJ3Qgc2VlIG91ciBzaGlueSBuZXcgbTRfZGVmaW5lCisjIGFuZCBkb2Vzbid0IGtub3cgYWJvdXQgQXV0b2NvbmYgbWFjcm9zIGF0IGFsbC4pCisjCisjIFNvIHdlIHByb3ZpZGUgdGhpcyBmaWxlLCB3aGljaCBoYXMgYSBzaWxseSBmaWxlbmFtZSBzbyBpdCdzIGFsd2F5cworIyBpbmNsdWRlZCBhZnRlciBldmVyeXRoaW5nIGVsc2UuICBUaGlzIHByb3ZpZGVzIGFjbG9jYWwgd2l0aCB0aGUKKyMgQUNfREVGVU5zIGl0IHdhbnRzLCBidXQgd2hlbiBtNCBwcm9jZXNzZXMgaXQsIGl0IGRvZXNuJ3QgZG8gYW55dGhpbmcKKyMgYmVjYXVzZSB0aG9zZSBtYWNyb3MgYWxyZWFkeSBleGlzdCwgb3Igd2lsbCBiZSBvdmVyd3JpdHRlbiBsYXRlci4KKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4gCisjCisjIEFueXRpbWUgd2Ugd2l0aGRyYXcgYW4gQUNfREVGVU4gb3IgQVVfREVGVU4sIHJlbWVtYmVyIHRvIGFkZCBpdCBoZXJlLgorIyBZZXMsIHRoYXQgbWVhbnMgZXZlcnkgbmFtZSBvbmNlIHRha2VuIHdpbGwgbmVlZCB0byByZW1haW4gaGVyZSB1bnRpbAorIyB3ZSBnaXZlIHVwIGNvbXBhdGliaWxpdHkgd2l0aCB2ZXJzaW9ucyBiZWZvcmUgMS43LCBhdCB3aGljaCBwb2ludAorIyB3ZSBuZWVkIHRvIGtlZXAgb25seSB0aG9zZSBuYW1lcyB3aGljaCB3ZSBzdGlsbCByZWZlciB0by4KKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9CU09MRVRFX1ZFUlNJT05dLCBbbTRfaWYoWzFdKV0pCisKK200X2lmbmRlZihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dKV0pCittNF9pZm5kZWYoW0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TSEVMTF9JTklUXSwJCVtBQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfTElCUEFUSF9BSVhdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0xUTUFJTl0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0xUTUFJTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RBR1ZBUl0sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdWQVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfRU5BQkxFX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0xURExfRU5BQkxFX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW0FDX0xURExfUFJFT1BFTl0sCQlbQUNfREVGVU4oW0FDX0xURExfUFJFT1BFTl0pXSkKK200X2lmbmRlZihbX0xUX0FDX1NZU19DT01QSUxFUl0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xPQ0tdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTE9DS10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSwJW0FDX0RFRlVOKFtfTFRfQUNfVFJZX0RMT1BFTl9TRUxGXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ0NfQ19PXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTFRETF9PQkpESVJdLAkJW0FDX0RFRlVOKFtBQ19MVERMX09CSkRJUl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0pXSkKK200X2lmbmRlZihbQUNfUEFUSF9NQUdJQ10sCQlbQUNfREVGVU4oW0FDX1BBVEhfTUFHSUNdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfR05VXSwJCVtBQ19ERUZVTihbQUNfUFJPR19MRF9HTlVdKV0pCittNF9pZm5kZWYoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAlbQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKV0pCittNF9pZm5kZWYoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSwJW0FDX0RFRlVOKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQ10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUF0pXSkKK200X2lmbmRlZihbTFRfQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfRUdSRVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfU0VEXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19TRURdKV0pCittNF9pZm5kZWYoW19MVF9DQ19CQVNFTkFNRV0sCQlbQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0pXSkKK200X2lmbmRlZihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdKV0pCittNF9pZm5kZWYoW19BQ19QUk9HX0xJQlRPT0xdLAkJW0FDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NFVFVQXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0NIRUNLX0RMRkNOXSwJCVtBQ19ERUZVTihbX0xUX0FDX0NIRUNLX0RMRkNOXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdDT05GSUddLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3XSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3XSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUkNdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9DT05GSUddLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0ZJTEVfTFRETExfQ10sCVtBQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10pXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUxOTI3NwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOCBAQAorIyMgUHJvY2VzcyB0aGlzIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCisKK0FVVE9NQUtFX09QVElPTlM9Zm9yZWlnbgorCitFWFRSQV9ESVNUID0gZmZpLjMgZmZpX2NhbGwuMyBmZmlfcHJlcF9jaWYuMworCittYW5fTUFOUyA9IGZmaS4zIGZmaV9jYWxsLjMgZmZpX3ByZXBfY2lmLjMKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTQwYmUyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NDggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorc3ViZGlyID0gbWFuCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gZj1gZWNobyAkJHAgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7CithbV9faW5zdGFsbF9tYXggPSA0MAorYW1fX25vYmFzZV9zdHJpcF9zZXR1cCA9IFwKKyAgc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKnxdL1xcXFwmL2cnYAorYW1fX25vYmFzZV9zdHJpcCA9IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgc2VkIC1lICJzfCQkc3JjZGlyc3RyaXAvfHwiCithbV9fbm9iYXNlX2xpc3QgPSAkKGFtX19ub2Jhc2Vfc3RyaXBfc2V0dXApOyBcCisgIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisgIHNlZCAic3wgJCRzcmNkaXJzdHJpcC98IHw7IicgLyAuKlwvLyFzLyAuKi8gLi87IHMsXCggLipcKS9bXi9dKiQkLFwxLCcgfCBcCisgICQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiIgfSB7IGZpbGVzWyQkMl0gPSBmaWxlc1skJDJdICIgIiAkJDE7IFwKKyAgICBpZiAoKytuWyQkMl0gPT0gJChhbV9faW5zdGFsbF9tYXgpKSBcCisgICAgICB7IHByaW50ICQkMiwgZmlsZXNbJCQyXTsgblskJDJdID0gMDsgZmlsZXNbJCQyXSA9ICIiIH0gfSBcCisgICAgRU5EIHsgZm9yIChkaXIgaW4gZmlsZXMpIHByaW50IGRpciwgZmlsZXNbZGlyXSB9JworYW1fX2Jhc2VfbGlzdCA9IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJyB8IFwKKyAgc2VkICckJCFOOyQkIU47JCQhTjskJCFOO3MvXG4vIC9nJworbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCithbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQobWFuM2RpcikiCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChtYW5fTUFOUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTExPQ0EgPSBAQUxMT0NBQAorQU1UQVIgPSBAQU1UQVJACitBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1RBUkdFVCA9IEBUQVJHRVRACitUQVJHRVRESVIgPSBAVEFSR0VURElSQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACit0b29sZXhlY2RpciA9IEB0b29sZXhlY2RpckAKK3Rvb2xleGVjbGliZGlyID0gQHRvb2xleGVjbGliZGlyQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduCitFWFRSQV9ESVNUID0gZmZpLjMgZmZpX2NhbGwuMyBmZmlfcHJlcF9jaWYuMworbWFuX01BTlMgPSBmZmkuMyBmZmlfY2FsbC4zIGZmaV9wcmVwX2NpZi4zCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICAoIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCApIFwKKwkgICAgICAgICYmIHsgaWYgdGVzdCAtZiAkQDsgdGhlbiBleGl0IDA7IGVsc2UgYnJlYWs7IGZpOyB9OyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gbWFuL01ha2VmaWxlJzsgXAorCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBtYW4vTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCitpbnN0YWxsLW1hbjM6ICQobWFuX01BTlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJdGVzdCAteiAiJChtYW4zZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobWFuM2RpcikiCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuM2RpcikiIHx8IGV4aXQgMDsgXAorCXsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKKwkgIHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCisJZG9uZSB8IFwKKwlzZWQgLWUgJ247cywuKi8sLDtwO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCisJc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCisJbGlzdD07IHdoaWxlIHJlYWQgZmlsZSBiYXNlIGluc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkYmFzZSIgPSAiJCRpbnN0IjsgdGhlbiBsaXN0PSIkJGxpc3QgJCRmaWxlIjsgZWxzZSBcCisJICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjNkaXIpLyQkaW5zdCciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuM2RpcikvJCRpbnN0IiB8fCBleGl0ICQkPzsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW4zZGlyKSciOyBcCisJICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW4zZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKKwlkb25lOyB9CisKK3VuaW5zdGFsbC1tYW4zOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuM2RpcikiIHx8IGV4aXQgMDsgXAorCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAorCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCisJICBzZWQgLW4gJy9cLjNbYS16XSokJC9wJzsgXAorCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKKwl0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgIGVjaG8gIiAoIGNkICckKERFU1RESVIpJChtYW4zZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisJICBjZCAiJChERVNURElSKSQobWFuM2RpcikiICYmIHJtIC1mICQkZmlsZXM7IH0KK3RhZ3M6IFRBR1MKK1RBR1M6CisKK2N0YWdzOiBDVEFHUworQ1RBR1M6CisKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQGxpc3Q9JyQoTUFOUyknOyBpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgICAgaWYgdGVzdCAtZiAiJCRkJCRwIjsgdGhlbiBlY2hvICIkJGQkJHAiOyBlbHNlIDo7IGZpOyBkb25lYDsgXAorCSAgaWYgdGVzdCAtbiAiJCRsaXN0IiAmJiBcCisJICAgIGdyZXAgJ2FiIGhlbHAybWFuIGlzIHJlcXVpcmVkIHRvIGdlbmVyYXRlIHRoaXMgcGFnZScgJCRsaXN0ID4vZGV2L251bGw7IHRoZW4gXAorCSAgICBlY2hvICJlcnJvcjogZm91bmQgbWFuIHBhZ2VzIGNvbnRhaW5pbmcgdGhlIFxgbWlzc2luZyBoZWxwMm1hbicgcmVwbGFjZW1lbnQgdGV4dDoiID4mMjsgXAorCSAgICBncmVwIC1sICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCB8IHNlZCAncy9eLyAgICAgICAgIC8nID4mMjsgXAorCSAgICBlY2hvICIgICAgICAgdG8gZml4IHRoZW0sIGluc3RhbGwgaGVscDJtYW4sIHJlbW92ZSBhbmQgcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzOyIgPiYyOyBcCisJICAgIGVjaG8gIiAgICAgICB0eXBpY2FsbHkgXGBtYWtlIG1haW50YWluZXItY2xlYW4nIHdpbGwgcmVtb3ZlIHRoZW0iID4mMjsgXAorCSAgICBleGl0IDE7IFwKKwkgIGVsc2UgOjsgZmk7IFwKKwllbHNlIDo7IGZpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBcCisJICBkaXN0X2ZpbGVzPWBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRmaWxlOyBkb25lIHwgXAorCSAgc2VkIC1lICJzfF4kJHNyY2RpcnN0cmlwL3x8O3QiIFwKKwkgICAgICAtZSAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3w7dCJgOyBcCisJY2FzZSAkJGRpc3RfZmlsZXMgaW4gXAorCSAgKi8qKSAkKE1LRElSX1ApIGBlY2hvICIkJGRpc3RfZmlsZXMiIHwgXAorCQkJICAgc2VkICcvXC8vIWQ7c3xefCQoZGlzdGRpcikvfDtzLC9bXi9dKiQkLCwnIHwgXAorCQkJICAgc29ydCAtdWAgOzsgXAorCWVzYWM7IFwKKwlmb3IgZmlsZSBpbiAkJGRpc3RfZmlsZXM7IGRvIFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGRpcj1gZWNobyAiLyQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICAgIGlmIHRlc3QgLWQgIiQoZGlzdGRpcikvJCRmaWxlIjsgdGhlbiBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1mcFIgJChzcmNkaXIpLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLWZwUiAkJGQvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgIiQoZGlzdGRpcikvJCRmaWxlIiBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChNQU5TKQoraW5zdGFsbGRpcnM6CisJZm9yIGRpciBpbiAiJChERVNURElSKSQobWFuM2RpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIG1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1tYW4KKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4zCisKK2luc3RhbGwtcGRmOiBpbnN0YWxsLXBkZi1hbQorCitpbnN0YWxsLXBkZi1hbToKKworaW5zdGFsbC1wczogaW5zdGFsbC1wcy1hbQorCitpbnN0YWxsLXBzLWFtOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLW1hbgorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMworCisuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCisJZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKKwlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKKwlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4zIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjMKKworCisjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgorIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCisuTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmkuMyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YjVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9mZmkuMwpAQCAtMCwwICsxLDMxIEBACisuRGQgRmVicnVhcnkgMTUsIDIwMDgKKy5EdCBGRkkgMworLlNoIE5BTUUKKy5ObSBGRkkKKy5OZCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorLlNoIExJQlJBUlkKK2xpYmZmaSwgLWxmZmkKKy5TaCBTWU5PUFNJUworLkluIGZmaS5oCisuRnQgZmZpX3N0YXR1cworLkZvIGZmaV9wcmVwX2NpZgorLkZhICJmZmlfY2lmICpjaWYiCisuRmEgImZmaV9hYmkgYWJpIgorLkZhICJ1bnNpZ25lZCBpbnQgbmFyZ3MiCisuRmEgImZmaV90eXBlICpydHlwZSIKKy5GYSAiZmZpX3R5cGUgKiphdHlwZXMiCisuRmMKKy5GdCB2b2lkCisuRm8gZmZpX2NhbGwKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJ2b2lkICgqZm4pKHZvaWQpIgorLkZhICJ2b2lkICpydmFsdWUiCisuRmEgInZvaWQgKiphdmFsdWUiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlIGZvcmVpZ24gZnVuY3Rpb24gaW50ZXJmYWNlIHByb3ZpZGVzIGEgbWVjaGFuaXNtIGJ5IHdoaWNoIGEgZnVuY3Rpb24gY2FuCitnZW5lcmF0ZSBhIGNhbGwgdG8gYW5vdGhlciBmdW5jdGlvbiBhdCBydW50aW1lIHdpdGhvdXQgcmVxdWlyaW5nIGtub3dsZWRnZSBvZgordGhlIGNhbGxlZCBmdW5jdGlvbidzIGludGVyZmFjZSBhdCBjb21waWxlIHRpbWUuCisuU2ggU0VFIEFMU08KKy5YciBmZmlfcHJlcF9jaWYgMyAsCisuWHIgZmZpX2NhbGwgMwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpX2NhbGwuMyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9jYWxsLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1MTUxMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9jYWxsLjMKQEAgLTAsMCArMSwxMDMgQEAKKy5EZCBGZWJydWFyeSAxNSwgMjAwOAorLkR0IGZmaV9jYWxsIDMKKy5TaCBOQU1FCisuTm0gZmZpX2NhbGwKKy5OZCBJbnZva2UgYSBmb3JlaWduIGZ1bmN0aW9uLgorLlNoIFNZTk9QU0lTCisuSW4gZmZpLmgKKy5GdCB2b2lkCisuRm8gZmZpX2NhbGwKKy5GYSAiZmZpX2NpZiAqY2lmIgorLkZhICJ2b2lkICgqZm4pKHZvaWQpIgorLkZhICJ2b2lkICpydmFsdWUiCisuRmEgInZvaWQgKiphdmFsdWUiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0gZmZpX2NhbGwKK2Z1bmN0aW9uIHByb3ZpZGVzIGEgc2ltcGxlIG1lY2hhbmlzbSBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiB3aXRob3V0CityZXF1aXJpbmcga25vd2xlZGdlIG9mIHRoZSBmdW5jdGlvbidzIGludGVyZmFjZSBhdCBjb21waWxlIHRpbWUuCisuRmEgZm4KK2lzIGNhbGxlZCB3aXRoIHRoZSB2YWx1ZXMgcmV0cmlldmVkIGZyb20gdGhlIHBvaW50ZXJzIGluIHRoZQorLkZhIGF2YWx1ZQorYXJyYXkuIFRoZSByZXR1cm4gdmFsdWUgZnJvbQorLkZhIGZuCitpcyBwbGFjZWQgaW4gc3RvcmFnZSBwb2ludGVkIHRvIGJ5CisuRmEgcnZhbHVlIC4KKy5GYSBjaWYKK2NvbnRhaW5zIGluZm9ybWF0aW9uIGRlc2NyaWJpbmcgdGhlIGRhdGEgdHlwZXMsIHNpemVzIGFuZCBhbGlnbm1lbnRzIG9mIHRoZQorYXJndW1lbnRzIHRvIGFuZCByZXR1cm4gdmFsdWUgZnJvbQorLkZhIGZuICwKK2FuZCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGgKKy5ObSBmZmlfcHJlcF9jaWYKK2JlZm9yZSBpdCBpcyB1c2VkIHdpdGgKKy5ObSBmZmlfY2FsbCAuCisuUHAKKy5GYSBydmFsdWUKK211c3QgcG9pbnQgdG8gc3RvcmFnZSB0aGF0IGlzIHNpemVvZihmZmlfYXJnKSBvciBsYXJnZXIgZm9yIG5vbi1mbG9hdGluZyBwb2ludAordHlwZXMuIEZvciBzbWFsbGVyLXNpemVkIHJldHVybiB2YWx1ZSB0eXBlcywgdGhlCisuTm0gZmZpX2FyZworb3IKKy5ObSBmZmlfc2FyZworaW50ZWdyYWwgdHlwZSBtdXN0IGJlIHVzZWQgdG8gaG9sZAordGhlIHJldHVybiB2YWx1ZS4KKy5TaCBFWEFNUExFUworLkJkIC1saXRlcmFsCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwordW5zaWduZWQgY2hhcgorZm9vKHVuc2lnbmVkIGludCwgZmxvYXQpOworCitpbnQKK21haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworICAgIGZmaV9jaWYgY2lmOworICAgIGZmaV90eXBlICphcmdfdHlwZXNbMl07CisgICAgdm9pZCAqYXJnX3ZhbHVlc1syXTsKKyAgICBmZmlfc3RhdHVzIHN0YXR1czsKKworICAgIC8vIEJlY2F1c2UgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGZvbygpIGlzIHNtYWxsZXIgdGhhbiBzaXplb2YobG9uZyksIGl0CisgICAgLy8gbXVzdCBiZSBwYXNzZWQgYXMgZmZpX2FyZyBvciBmZmlfc2FyZy4KKyAgICBmZmlfYXJnIHJlc3VsdDsKKworICAgIC8vIFNwZWNpZnkgdGhlIGRhdGEgdHlwZSBvZiBlYWNoIGFyZ3VtZW50LiBBdmFpbGFibGUgdHlwZXMgYXJlIGRlZmluZWQKKyAgICAvLyBpbiA8ZmZpL2ZmaS5oPi4KKyAgICBhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgICBhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisKKyAgICAvLyBQcmVwYXJlIHRoZSBmZmlfY2lmIHN0cnVjdHVyZS4KKyAgICBpZiAoKHN0YXR1cyA9IGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksCisgICAgICAgIDIsICZmZmlfdHlwZV91aW50OCwgYXJnX3R5cGVzKSkgIT0gRkZJX09LKQorICAgIHsKKyAgICAgICAgLy8gSGFuZGxlIHRoZSBmZmlfc3RhdHVzIGVycm9yLgorICAgIH0KKworICAgIC8vIFNwZWNpZnkgdGhlIHZhbHVlcyBvZiBlYWNoIGFyZ3VtZW50LgorICAgIHVuc2lnbmVkIGludCBhcmcxID0gNDI7CisgICAgZmxvYXQgYXJnMiA9IDUuMTsKKworICAgIGFyZ192YWx1ZXNbMF0gPSAmYXJnMTsKKyAgICBhcmdfdmFsdWVzWzFdID0gJmFyZzI7CisKKyAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uLgorICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihmb28pLCAmcmVzdWx0LCBhcmdfdmFsdWVzKTsKKworICAgIC8vIFRoZSBmZmlfYXJnICdyZXN1bHQnIG5vdyBjb250YWlucyB0aGUgdW5zaWduZWQgY2hhciByZXR1cm5lZCBmcm9tIGZvbygpLAorICAgIC8vIHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBieSBhIHR5cGVjYXN0LgorICAgIHByaW50ZigicmVzdWx0IGlzICVoaHUiLCAodW5zaWduZWQgY2hhcilyZXN1bHQpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8vIFRoZSB0YXJnZXQgZnVuY3Rpb24uCit1bnNpZ25lZCBjaGFyCitmb28odW5zaWduZWQgaW50IHgsIGZsb2F0IHkpCit7CisgICAgdW5zaWduZWQgY2hhciByZXN1bHQgPSB4IC0geTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLkVkCisuU2ggU0VFIEFMU08KKy5YciBmZmkgMyAsCisuWHIgZmZpX3ByZXBfY2lmIDMKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9wcmVwX2NpZi4zIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tYW4vZmZpX3ByZXBfY2lmLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzNmIzMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL2ZmaV9wcmVwX2NpZi4zCkBAIC0wLDAgKzEsNjYgQEAKKy5EZCBGZWJydWFyeSAxNSwgMjAwOAorLkR0IGZmaV9wcmVwX2NpZiAzCisuU2ggTkFNRQorLk5tIGZmaV9wcmVwX2NpZgorLk5kIFByZXBhcmUgYQorLk5tIGZmaV9jaWYKK3N0cnVjdHVyZSBmb3IgdXNlIHdpdGgKKy5ObSBmZmlfY2FsbCAKKy4KKy5TaCBTWU5PUFNJUworLkluIGZmaS5oCisuRnQgZmZpX3N0YXR1cworLkZvIGZmaV9wcmVwX2NpZgorLkZhICJmZmlfY2lmICpjaWYiCisuRmEgImZmaV9hYmkgYWJpIgorLkZhICJ1bnNpZ25lZCBpbnQgbmFyZ3MiCisuRmEgImZmaV90eXBlICpydHlwZSIKKy5GYSAiZmZpX3R5cGUgKiphdHlwZXMiCisuRmMKKy5TaCBERVNDUklQVElPTgorVGhlCisuTm0gZmZpX3ByZXBfY2lmCitmdW5jdGlvbiBwcmVwYXJlcyBhCisuTm0gZmZpX2NpZgorc3RydWN0dXJlIGZvciB1c2Ugd2l0aCAKKy5ObSBmZmlfY2FsbAorLgorLkZhIGFiaQorc3BlY2lmaWVzIGEgc2V0IG9mIGNhbGxpbmcgY29udmVudGlvbnMgdG8gdXNlLgorLkZhIGF0eXBlcworaXMgYW4gYXJyYXkgb2YKKy5GYSBuYXJncworcG9pbnRlcnMgdG8KKy5ObSBmZmlfdHlwZQorc3RydWN0cyB0aGF0IGRlc2NyaWJlIHRoZSBkYXRhIHR5cGUsIHNpemUgYW5kIGFsaWdubWVudCBvZiBlYWNoIGFyZ3VtZW50LgorLkZhIHJ0eXBlCitwb2ludHMgdG8gYW4KKy5ObSBmZmlfdHlwZQordGhhdCBkZXNjcmliZXMgdGhlIGRhdGEgdHlwZSwgc2l6ZSBhbmQgYWxpZ25tZW50IG9mIHRoZQorcmV0dXJuIHZhbHVlLgorLlNoIFJFVFVSTiBWQUxVRVMKK1Vwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLAorLk5tIGZmaV9wcmVwX2NpZgorcmV0dXJucworLk5tIEZGSV9PSyAuCitJdCB3aWxsIHJldHVybgorLk5tIEZGSV9CQURfVFlQRURFRgoraWYKKy5GYSBjaWYKK2lzCisuTm0gTlVMTAorb3IKKy5GYSBhdHlwZXMKK29yCisuRmEgcnR5cGUKK2lzIG1hbGZvcm1lZC4gSWYKKy5GYSBhYmkKK2RvZXMgbm90IHJlZmVyIHRvIGEgdmFsaWQgQUJJLAorLk5tIEZGSV9CQURfQUJJCit3aWxsIGJlIHJldHVybmVkLiBBdmFpbGFibGUgQUJJcyBhcmUKK2RlZmluZWQgaW4KKy5ObSA8ZmZpdGFyZ2V0Lmg+CisuCisuU2ggU0VFIEFMU08KKy5YciBmZmkgMyAsCisuWHIgZmZpX2NhbGwgMyAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNkOTE2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCkBAIC0wLDAgKzEsMjAxIEBACisjIS9iaW4vc2gKKyMgR2V0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHByZXR0eS1wcmludCBpdC4KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA2LTI5LjIyCisKKyMgQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCAyMDAzLCAyMDA0LCAyMDA1IEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLgorIyB3cml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgSnVuZSAxOTk1CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gZmlsZS4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGV4aXQgMTsKKyAgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBtZGF0ZS1zaCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBGSUxFCisKK1ByZXR0eS1wcmludCB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgb2YgRklMRS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAibWRhdGUtc2ggJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKKyMgUHJldmVudCBkYXRlIGdpdmluZyByZXNwb25zZSBpbiBhbm90aGVyIGxhbmd1YWdlLgorTEFORz1DCitleHBvcnQgTEFORworTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xDX1RJTUU9QworZXhwb3J0IExDX1RJTUUKKworIyBHTlUgbHMgY2hhbmdlcyBpdHMgdGltZSBmb3JtYXQgaW4gcmVzcG9uc2UgdG8gdGhlIFRJTUVfU1RZTEUKKyMgdmFyaWFibGUuICBTaW5jZSB3ZSBjYW5ub3QgYXNzdW1lIGB1bnNldCcgd29ya3MsIHJldmVydCB0aGlzCisjIHZhcmlhYmxlIHRvIGl0cyBkb2N1bWVudGVkIGRlZmF1bHQuCitpZiB0ZXN0ICIke1RJTUVfU1RZTEUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgVElNRV9TVFlMRT1wb3NpeC1sb25nLWlzbworICBleHBvcnQgVElNRV9TVFlMRQorZmkKKworc2F2ZV9hcmcxPSQxCisKKyMgRmluZCBvdXQgaG93IHRvIGdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkuCitpZiBscyAtTCAvZGV2L251bGwgMT4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsc19jb21tYW5kPSdscyAtTCAtbCAtZCcKK2Vsc2UKKyAgbHNfY29tbWFuZD0nbHMgLWwgLWQnCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGBscyAtbCAtZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZwppbmRleCA2NGI1ZjkwLi44OTRlNzg2IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCkBAIC0xLDkgKzEsOSBAQAogIyEgL2Jpbi9zaAogIyBDb21tb24gc3R1YiBmb3IgYSBmZXcgbWlzc2luZyBHTlUgcHJvZ3JhbXMgd2hpbGUgaW5zdGFsbGluZy4KIAotc2NyaXB0dmVyc2lvbj0yMDA0LTA5LTA3LjA4CitzY3JpcHR2ZXJzaW9uPTIwMDUtMDYtMDguMjEKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk5LCAyMDAwLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1CiAjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgogCkBAIC0xOSw4ICsxOSw4IEBACiAKICMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCi0jIDAyMTExLTEzMDcsIFVTQS4KKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCiAKICMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQogIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKQEAgLTg3LDEyICs4NywxMiBAQAogICB5YWNjICAgICAgICAgY3JlYXRlIFxgeS50YWIuW2NoXScsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5bY2hdCiAKIFNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCi0gICAgZXhpdCAwCisgICAgZXhpdCAkPwogICAgIDs7CiAKICAgLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJzfC0tdmVyc2l8LS12ZXJzaW98LS12ZXJzaW9uKQogICAgIGVjaG8gIm1pc3NpbmcgJHNjcmlwdHZlcnNpb24gKEdOVSBBdXRvbWFrZSkiCi0gICAgZXhpdCAwCisgICAgZXhpdCAkPwogICAgIDs7CiAKICAgLSopCkBAIC0yODgsMTEgKzI4OCwxOCBAQAogICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKICAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgogICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCiAgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICdzLy4qLW8gXChbXiBdKlwpLiovXDEvcCdgCiAgICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCi0gICAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCi0gICAgICBmaWxlPWBzZWQgLW4gJy9eQHNldGZpbGVuYW1lLyB7IHMvLiogXChbXiBdKlwpICokL1wxLzsgcDsgcTsgfScgJGZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KKyAgICAgIGluZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAorICAgICAgZmlsZT1gc2VkIC1uICcvXkBzZXRmaWxlbmFtZS8geyBzLy4qIFwoW14gXSpcKSAqJC9cMS87IHA7IHE7IH0nICRpbmZpbGVgCisgICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQorICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbwogICAgIGZpCisgICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOworICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgorICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCiAgICAgdG91Y2ggJGZpbGUKICAgICA7OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzAxODM5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaApAQCAtMCwwICsxLDE4NSBAQAorIyEvYmluL3NoCisKKyMgKioqKiogQkVHSU4gTElDRU5TRSBCTE9DSyAqKioqKgorIyBWZXJzaW9uOiBNUEwgMS4xL0dQTCAyLjAvTEdQTCAyLjEKKyMKKyMgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uCisjIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorIyB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworIworIyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLAorIyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKKyMgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyMgTGljZW5zZS4KKyMKKyMgVGhlIE9yaWdpbmFsIENvZGUgaXMgdGhlIE1TVkMgd3JhcHBpZmljYXRvci4KKyMKKyMgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzCisjIFRpbW90aHkgV2FsbCA8dHdhbGxqYXZhQGRldi5qYXZhLm5ldD4uCisjIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDkKKyMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIworIyBDb250cmlidXRvcihzKToKKyMgICBEYW5pZWwgV2l0dGUgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyMKKyMgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YKKyMgZWl0aGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgb3IgbGF0ZXIgKHRoZSAiR1BMIiksIG9yCisjIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQTCIpLAorIyBpbiB3aGljaCBjYXNlIHRoZSBwcm92aXNpb25zIG9mIHRoZSBHUEwgb3IgdGhlIExHUEwgYXJlIGFwcGxpY2FibGUgaW5zdGVhZAorIyBvZiB0aG9zZSBhYm92ZS4gSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorIyB1bmRlciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvCisjIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTVBMLCBpbmRpY2F0ZSB5b3VyCisjIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgbm90aWNlCisjIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElmIHlvdSBkbyBub3QgZGVsZXRlCisjIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIKKyMgdGhlIHRlcm1zIG9mIGFueSBvbmUgb2YgdGhlIE1QTCwgdGhlIEdQTCBvciB0aGUgTEdQTC4KKyMKKyMgKioqKiogRU5EIExJQ0VOU0UgQkxPQ0sgKioqKioKKworIworIyBHQ0MtY29tcGF0aWJsZSB3cmFwcGVyIGZvciBjbC5leGUgYW5kIG1sLmV4ZS4gQXJndW1lbnRzIGFyZSBnaXZlbiBpbiBHQ0MKKyMgZm9ybWF0IGFuZCB0cmFuc2xhdGVkIGludG8gc29tZXRoaW5nIHNlbnNpYmxlIGZvciBjbCBvciBtbC4KKyMKKworIyBEaXNhYmxlIHNwZWNpZmljIHdhcm5pbmdzLCBhbmQgZW5hYmxlIHdhcm5pbmdzLWFzLWVycm9ycyBzbyB3ZSBjYXRjaCBhbnkKKyMgbWlzdHJhbnNsYXRlZCBhcmdzLgorbm93YXJuPSItd2Q0MTI3IC13ZDQ4MjAgLXdkNDcwNiAtd2Q0MTAwIC13ZDQyNTUgLXdkNDY2OCAtd2Q0MDUzIC13ZDQzMjQiCithcmdzPSItbm9sb2dvIC1XMyAtV1ggJG5vd2FybiIKK21kPS1NRAorY2w9ImNsIgorbWw9Im1sIgorb3V0cHV0PQorCit3aGlsZSBbICQjIC1ndCAwIF0KK2RvCisgIGNhc2UgJDEKKyAgaW4KKyAgICAtZmV4Y2VwdGlvbnMpCisgICAgICAjIERvbid0IGVuYWJsZSBleGNlcHRpb25zIGZvciBub3cuCisgICAgICAjYXJncz0iJGFyZ3MgLUVIYWMiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtbTMyKQorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLW02NCkKKyAgICAgIGNsPSJjbCIgICAjICIkTVNWQy94ODZfYW1kNjQvY2wiCisgICAgICBtbD0ibWw2NCIgIyAiJE1TVkMveDg2X2FtZDY0L21sNjQiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtTyopCisgICAgICBhcmdzPSIkYXJncyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1nKQorICAgICAgIyBDYW4ndCBzcGVjaWZ5IC1SVEMxIG9yIC1aaSBpbiBvcHQuIC1HeSBpcyBvay4gVXNlIC1PUFQ6UkVGPworICAgICAgYXJncz0iJGFyZ3MgLURfREVCVUcgLVJUQzEgLVppIgorICAgICAgbWQ9LU1EZAorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLWMpCisgICAgICBhcmdzPSIkYXJncyAtYyIKKyAgICAgIGFyZ3M9IiQoZWNobyAkYXJncyB8IHNlZCAncyUvRmUlL0ZvJWcnKSIKKyAgICAgIHNpbmdsZT0iLWMiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtRCo9KikKKyAgICAgIG5hbWU9IiQoZWNobyAkMXxzZWQgJ3MvLURcKFtePV1bXj1dKlwpPS4qL1wxL2cnKSIKKyAgICAgIHZhbHVlPSIkKGVjaG8gJDF8c2VkICdzLy1EW149XVtePV0qPS8vZycpIgorICAgICAgYXJncz0iJGFyZ3MgLUQke25hbWV9PSckdmFsdWUnIgorICAgICAgZGVmaW5lcz0iJGRlZmluZXMgLUQke25hbWV9PSckdmFsdWUnIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLUQqKQorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBkZWZpbmVzPSIkZGVmaW5lcyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1JKQorICAgICAgYXJncz0iJGFyZ3MgLUkkMiIKKyAgICAgIGluY2x1ZGVzPSIkaW5jbHVkZXMgLUkkMiIKKyAgICAgIHNoaWZ0IDIKKyAgICA7OworICAgIC1JKikKKyAgICAgIGFyZ3M9IiRhcmdzICQxIgorICAgICAgaW5jbHVkZXM9IiRpbmNsdWRlcyAkMSIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1XfC1XZXh0cmEpCisgICAgICAjIFRPRE8gbWFwIGV4dHJhIHdhcm5pbmdzCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAtV2FsbCkKKyAgICAgIGFyZ3M9IiRhcmdzIC1XYWxsIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgLVdlcnJvcikKKyAgICAgIGFyZ3M9IiRhcmdzIC1XWCIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1XKikKKyAgICAgICMgVE9ETyBtYXAgc3BlY2lmaWMgd2FybmluZ3MKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1TKQorICAgICAgYXJncz0iJGFyZ3MgLUZBcyIKKyAgICAgIHNoaWZ0IDEKKyAgICA7OworICAgIC1vKQorICAgICAgb3V0ZGlyPSIkKGRpcm5hbWUgJDIpIgorICAgICAgYmFzZT0iJChiYXNlbmFtZSAkMnxzZWQgJ3MvXC5bXi5dKi8vZycpIgorICAgICAgaWYgWyAtbiAiJHNpbmdsZSIgXTsgdGhlbiAKKyAgICAgICAgb3V0cHV0PSItRm8kMiIKKyAgICAgIGVsc2UKKyAgICAgICAgb3V0cHV0PSItRmUkMiIKKyAgICAgIGZpCisgICAgICBpZiBbIC1uICIkYXNzZW1ibHkiIF07IHRoZW4KKyAgICAgICAgYXJncz0iJGFyZ3MgJG91dHB1dCIKKyAgICAgIGVsc2UKKyAgICAgICAgYXJncz0iJGFyZ3MgJG91dHB1dCAtRmQkb3V0ZGlyLyRiYXNlIC1GcCRvdXRkaXIvJGJhc2UgLUZhJG91dGRpci8kYmFzZSIKKyAgICAgIGZpCisgICAgICBzaGlmdCAyCisgICAgOzsKKyAgICAqLlMpCisgICAgICBzcmM9JDEKKyAgICAgIGFzc2VtYmx5PSJ0cnVlIgorICAgICAgc2hpZnQgMQorICAgIDs7CisgICAgKi5jKQorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgICAqKQorICAgICAgIyBBc3N1bWUgaXQncyBhbiBNU1ZDIGFyZ3VtZW50LCBhbmQgcGFzcyBpdCB0aHJvdWdoLgorICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICBzaGlmdCAxCisgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiBbIC1uICIkYXNzZW1ibHkiIF07IHRoZW4KKyAgICBpZiBbIC16ICIkb3V0ZGlyIiBdOyB0aGVuCisgICAgICBvdXRkaXI9Ii4iCisgICAgZmkKKyAgICBwcHNyYz0iJG91dGRpci8kKGJhc2VuYW1lICRzcmN8c2VkICdzLy5TJC8uYXNtL2cnKSIKKyAgICBlY2hvICIkY2wgLW5vbG9nbyAtRVAgJGluY2x1ZGVzICRkZWZpbmVzICRzcmMgPiAkcHBzcmMiCisgICAgIiRjbCIgLW5vbG9nbyAtRVAgJGluY2x1ZGVzICRkZWZpbmVzICRzcmMgPiAkcHBzcmMgfHwgZXhpdCAkPworICAgIG91dHB1dD0iJChlY2hvICRvdXRwdXQgfCBzZWQgJ3MlL0ZbZHBhXVteIF0qJSVnJykiCisgICAgYXJncz0iLW5vbG9nbyAtc2FmZXNlaCAkc2luZ2xlICRvdXRwdXQgJHBwc3JjIgorCisgICAgZWNobyAiJG1sICRhcmdzIgorICAgIGV2YWwgIlwiJG1sXCIgJGFyZ3MiCisgICAgcmVzdWx0PSQ/CisKKyAgICAjIHJlcXVpcmVkIHRvIGZpeCBtbDY0IGJyb2tlbiBvdXRwdXQ/CisgICAgI212ICoub2JqICRvdXRkaXIKK2Vsc2UKKyAgICBhcmdzPSIkbWQgJGFyZ3MiCisgICAgZWNobyAiJGNsICRhcmdzIgorICAgIGV2YWwgIlwiJGNsXCIgJGFyZ3MiCisgICAgcmVzdWx0PSQ/CitmaQorCitleGl0ICRyZXN1bHQKKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKaW5kZXggMzQ0ODFjOC4uOTA2NDMxOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCkBAIC02NywxMSArNjcsMTkgQEAKIAogI2lmIGRlZmluZWQoX19BUk1fQVJDSF82X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF82Sl9fKSBcCiAgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82S19fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpfXykgXAotICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpLX18pCisgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82WktfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZUMl9fKSBcCisJfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZNX18pCiAjIHVuZGVmIF9fQVJNX0FSQ0hfXwogIyBkZWZpbmUgX19BUk1fQVJDSF9fIDYKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX0FSTV9BUkNIXzdfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIFwKKyAgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdSX18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83TV9fKSBcCisJfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdFTV9fKQorIyB1bmRlZiBfX0FSTV9BUkNIX18KKyMgZGVmaW5lIF9fQVJNX0FSQ0hfXyA3CisjZW5kaWYKKwogI2lmIF9fQVJNX0FSQ0hfXyA+PSA1CiAjIGRlZmluZSBjYWxsX3JlZyh4KQlibHgJeAogI2VsaWYgZGVmaW5lZCAoX19BUk1fQVJDSF80VF9fKQpAQCAtMTg5LDcgKzE5Nyw3IEBACiAKIEAgcmV0dXJuIElOVAogCWNtcAlyMywgI0ZGSV9UWVBFX0lOVAotI2lmZGVmIF9fU09GVEZQX18KKyNpZiBkZWZpbmVkKF9fU09GVEZQX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogCWNtcG5lCXIzLCAjRkZJX1RZUEVfRkxPQVQKICNlbmRpZgogCXN0cmVxCXIwLCBbcjJdCkBAIC0xOTcsMTIgKzIwNSwxMiBAQAogCiAJQCByZXR1cm4gSU5UNjQKIAljbXAJcjMsICNGRklfVFlQRV9TSU5UNjQKLSNpZmRlZiBfX1NPRlRGUF9fCisjaWYgZGVmaW5lZChfX1NPRlRGUF9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKIAljbXBuZQlyMywgI0ZGSV9UWVBFX0RPVUJMRQogI2VuZGlmCiAJc3RtZXFpYQlyMiwge3IwLCByMX0KIAotI2lmbmRlZiBfX1NPRlRGUF9fCisjaWYgIWRlZmluZWQoX19TT0ZURlBfXykgJiYgIWRlZmluZWQoX19BUk1fRUFCSV9fKQogCWJlcQlMU1lNKExlcGlsb2d1ZSkKIAogQCByZXR1cm4gRkxPQVQKQEAgLTI0NSwyMSArMjUzLDIxIEBACiAJYmVxCS5McmV0aW50CiAKIAljbXAJcjAsICNGRklfVFlQRV9GTE9BVAotI2lmZGVmIF9fU09GVEZQX18KKyNpZiBkZWZpbmVkKF9fU09GVEZQX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogCWJlcQkuTHJldGludAogI2Vsc2UKIAliZXEJLkxyZXRmbG9hdAogI2VuZGlmCiAKIAljbXAJcjAsICNGRklfVFlQRV9ET1VCTEUKLSNpZmRlZiBfX1NPRlRGUF9fCisjaWYgZGVmaW5lZChfX1NPRlRGUF9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKIAliZXEJLkxyZXRsb25nbG9uZwogI2Vsc2UKIAliZXEJLkxyZXRkb3VibGUKICNlbmRpZgogCiAJY21wCXIwLCAjRkZJX1RZUEVfTE9OR0RPVUJMRQotI2lmZGVmIF9fU09GVEZQX18KKyNpZiBkZWZpbmVkKF9fU09GVEZQX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQogCWJlcQkuTHJldGxvbmdsb25nCiAjZWxzZQogCWJlcQkuTHJldGxvbmdkb3VibGUKQEAgLTI3OCw3ICsyODYsNyBAQAogCWxkcglyMSwgW3NwLCAjNF0KIAliCS5MY2xvc3VyZV9lcGlsb2d1ZQogCi0jaWZuZGVmIF9fU09GVEZQX18KKyNpZiAhZGVmaW5lZChfX1NPRlRGUF9fKSAmJiAhZGVmaW5lZChfX0FSTV9FQUJJX18pCiAuTHJldGZsb2F0OgogCWxkZnMJZjAsIFtzcF0KIAliCS5MY2xvc3VyZV9lcGlsb2d1ZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWZiYTJiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvZmZpLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwOSAgQnJhZGxleSBTbWl0aCA8YnJhZEBicmFkLXNtaXRoLmNvLnVrPgorCisgICBBVlIzMiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKy8qICNkZWZpbmUgREVCVUcgKi8KKworZXh0ZXJuIHZvaWQgZmZpX2NhbGxfU1lTVih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCisgICAgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCosIHVuc2lnbmVkIGludCwKKyAgICB2b2lkICgqZm4pKHZvaWQpKTsKK2V4dGVybiB2b2lkIGZmaV9jbG9zdXJlX1NZU1YgKGZmaV9jbG9zdXJlICopOworCit1bnNpZ25lZCBpbnQgcGFzc19zdHJ1Y3Rfb25fc3RhY2soZmZpX3R5cGUgKnR5cGUpCit7CisgICAgaWYodHlwZS0+dHlwZSAhPSBGRklfVFlQRV9TVFJVQ1QpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYodHlwZS0+YWxpZ25tZW50IDwgdHlwZS0+c2l6ZSAmJgorICAgICAgICAhKHR5cGUtPnNpemUgPT0gNCB8fCB0eXBlLT5zaXplID09IDgpICYmCisgICAgICAgICEodHlwZS0+c2l6ZSA9PSA4ICYmIHR5cGUtPmFsaWdubWVudCA+PSA0KSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpZih0eXBlLT5zaXplID09IDMgfHwgdHlwZS0+c2l6ZSA9PSA1IHx8IHR5cGUtPnNpemUgPT0gNiB8fAorICAgICAgICB0eXBlLT5zaXplID09IDcpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKKyAqIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzCisgKgorICogVGhpcyBpcyBhbm5veWluZ2x5IGNvbXBsZXggc2luY2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHVzZWQKKyAqIHJlZ2lzdGVycy4KKyAqLworCit2b2lkIGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB2b2lkICoqcF9hcmd2OworICAgIGZmaV90eXBlICoqcF9hcmc7CisgICAgY2hhciAqcmVnX2Jhc2UgPSBzdGFjazsKKyAgICBjaGFyICpzdGFja19iYXNlID0gc3RhY2sgKyAyMDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhY2tfb2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgcmVnX21hc2sgPSAwOworCisgICAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworCisgICAgLyogSWYgY2lmLT5mbGFncyBpcyBzdHJ1Y3QgdGhlbiB3ZSBrbm93IGl0J3Mgbm90IHBhc3NlZCBpbiByZWdpc3RlcnMgKi8KKyAgICBpZihlY2lmLT5jaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICB7CisgICAgICAgICoodm9pZCoqKXJlZ19iYXNlID0gZWNpZi0+cnZhbHVlOworICAgICAgICByZWdfbWFzayB8PSAxOworICAgIH0KKworICAgIGZvcihpID0gMCwgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsgaSA8IGVjaWYtPmNpZi0+bmFyZ3M7CisgICAgICAgIGkrKywgcF9hcmcrKykKKyAgICB7CisgICAgICAgIHNpemVfdCB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICAgIGludCBhbGlnbm1lbnQgPSAoKnBfYXJnKS0+YWxpZ25tZW50OworICAgICAgICBpbnQgdHlwZSA9ICgqcF9hcmcpLT50eXBlOworICAgICAgICBjaGFyICphZGRyID0gMDsKKworICAgICAgICBpZih6ICUgNCAhPSAwKQorICAgICAgICAgICAgeiArPSAoNCAtIHogJSA0KTsKKworICAgICAgICBpZihyZWdfbWFzayAhPSAweDFmKQorICAgICAgICB7CisgICAgICAgICAgICBpZihwYXNzX3N0cnVjdF9vbl9zdGFjaygqcF9hcmcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFkZHIgPSBzdGFja19iYXNlICsgc3RhY2tfb2Zmc2V0OworICAgICAgICAgICAgICAgIHN0YWNrX29mZnNldCArPSB6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih6ID09IHNpemVvZihpbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXIgaW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgd2hpbGUoKHJlZ19tYXNrID4+IGluZGV4KSAmIDEpCisgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7CisKKyAgICAgICAgICAgICAgICBhZGRyID0gcmVnX2Jhc2UgKyAoaW5kZXggKiA0KTsKKyAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMSA8PCBpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmKHogPT0gMiAqIHNpemVvZihpbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmKCEoKHJlZ19tYXNrID4+IDEpICYgMSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhZGRyID0gcmVnX2Jhc2UgKyA0OworICAgICAgICAgICAgICAgICAgICByZWdfbWFzayB8PSAoMyA8PCAxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZighKChyZWdfbWFzayA+PiAzKSAmIDEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkciA9IHJlZ19iYXNlICsgMTI7CisgICAgICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgzIDw8IDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCFhZGRyKQorICAgICAgICB7CisgICAgICAgICAgICBhZGRyID0gc3RhY2tfYmFzZSArIHN0YWNrX29mZnNldDsKKyAgICAgICAgICAgIHN0YWNrX29mZnNldCArPSB6OworICAgICAgICB9CisKKyAgICAgICAgaWYodHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgKCpwX2FyZyktPmVsZW1lbnRzWzFdID09IE5VTEwpCisgICAgICAgICAgICB0eXBlID0gKCpwX2FyZyktPmVsZW1lbnRzWzBdLT50eXBlOworCisgICAgICAgIHN3aXRjaCh0eXBlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgICAgICAgICAqKHVuc2lnbmVkIGludCAqKWFkZHIgPSAodW5zaWduZWQgaW50KSooVUlOVDggKikoKnBfYXJndik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICAgICAgICAgICooc2lnbmVkIGludCAqKWFkZHIgPSAoc2lnbmVkIGludCkqKFNJTlQ4ICopKCpwX2FyZ3YpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgICAgICAgICAgKih1bnNpZ25lZCBpbnQgKilhZGRyID0gKHVuc2lnbmVkIGludCkqKFVJTlQxNiAqKSgqcF9hcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICAgICAgICAgICooc2lnbmVkIGludCAqKWFkZHIgPSAoc2lnbmVkIGludCkqKFNJTlQxNiAqKSgqcF9hcmd2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWVtY3B5KGFkZHIsICpwX2FyZ3YsIHopOworICAgICAgICB9CisKKyAgICAgICAgcF9hcmd2Kys7CisgICAgfQorCisjaWZkZWYgREVCVUcKKyAgICAvKiBEZWJ1Z2dpbmcgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCA1OyBpKyspCisgICAgeworICAgICAgICBpZigocmVnX21hc2sgJiAoMSA8PCBpKSkgPT0gMCkKKyAgICAgICAgICAgIHByaW50ZigiciVkOiAodW51c2VkKVxuIiwgMTIgLSBpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCJyJWQ6IDB4JTA4eFxuIiwgMTIgLSBpLCAoKHVuc2lnbmVkIGludCopcmVnX2Jhc2UpW2ldKTsKKyAgICB9CisKKyAgICBmb3IoaSA9IDA7IGkgPCBzdGFja19vZmZzZXQgLyA0OyBpKyspCisgICAgeworICAgICAgICBwcmludGYoInNwKyVkOiAweCUwOHhcbiIsIGkqNCwgKCh1bnNpZ25lZCBpbnQqKXN0YWNrX2Jhc2UpW2ldKTsKKyAgICB9CisjZW5kaWYKK30KKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLworZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcChmZmlfY2lmICpjaWYpCit7CisgICAgLyogUm91bmQgdGhlIHN0YWNrIHVwIHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcy4gIFRoaXMgaXNuJ3QgbmVlZGVkCisgICAgICogZXZlcnl3aGVyZSwgYnV0IGl0IGlzIG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgaXQgZG9lc24ndCBoYXJtCisgICAgICogYW55dGhpbmcgd2hlbiBpdCBpc24ndCBuZWVkZWQuICovCisgICAgY2lmLT5ieXRlcyA9IChjaWYtPmJ5dGVzICsgNykgJiB+NzsKKworICAgIC8qIEZsYWcgdG8gaW5kaWNhdGUgdGhhdCBoZSByZXR1cm4gdmFsdWUgaXMgaW4gZmFjdCBhIHN0cnVjdCAqLworICAgIGNpZi0+cnN0cnVjdF9mbGFnID0gMDsKKworICAgIC8qIFNldCB0aGUgcmV0dXJuIHR5cGUgZmxhZyAqLworICAgIHN3aXRjaChjaWYtPnJ0eXBlLT50eXBlKQorICAgIHsKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDg7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQxNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDMyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UNjQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgICBjaWYtPnJzdHJ1Y3RfZmxhZyA9IDE7CisgICAgICAgIGlmKCFwYXNzX3N0cnVjdF9vbl9zdGFjayhjaWYtPnJ0eXBlKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYoY2lmLT5ydHlwZS0+c2l6ZSA8PSAxKQorICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDg7CisgICAgICAgICAgICBlbHNlIGlmKGNpZi0+cnR5cGUtPnNpemUgPD0gMikKKyAgICAgICAgICAgICAgICBjaWYtPmZsYWdzID0gKHVuc2lnbmVkKUZGSV9UWVBFX1VJTlQxNjsKKyAgICAgICAgICAgIGVsc2UgaWYoY2lmLT5ydHlwZS0+c2l6ZSA8PSA0KQorICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpRkZJX1RZUEVfVUlOVDMyOworICAgICAgICAgICAgZWxzZSBpZihjaWYtPnJ0eXBlLT5zaXplIDw9IDgpCisgICAgICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZClGRklfVFlQRV9VSU5UNjQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCljaWYtPnJ0eXBlLT50eXBlOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCljaWYtPnJ0eXBlLT50eXBlOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gRkZJX09LOworfQorCit2b2lkIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQoreworICAgIGV4dGVuZGVkX2NpZiBlY2lmOworCisgICAgdW5zaWduZWQgaW50IHNpemUgPSAwLCBpID0gMDsKKyAgICBmZmlfdHlwZSAqKnBfYXJnOworCisgICAgZWNpZi5jaWYgPSBjaWY7CisgICAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisKKyAgICBmb3IoaSA9IDAsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHBfYXJnKyspCisgICAgICAgIHNpemUgKz0gKCpwX2FyZyktPnNpemUgKyAoNCAtICgqcF9hcmcpLT5zaXplICUgNCk7CisKKyAgICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuIHZhbHVlCisgICAgICogYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUgKi8KKworICAgIC8qIElmIGNpZi0+ZmxhZ3MgaXMgc3RydWN0IHRoZW4gaXQncyBub3Qgc3VpdGFibGUgZm9yIHJlZ2lzdGVycyAqLworICAgIGlmKChydmFsdWUgPT0gTlVMTCkgJiYgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKSkKKyAgICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgZWxzZQorICAgICAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKworICAgIHN3aXRjaChjaWYtPmFiaSkKKyAgICB7CisgICAgY2FzZSBGRklfU1lTVjoKKyAgICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgc2l6ZSwgY2lmLT5mbGFncywKKyAgICAgICAgICAgIGVjaWYucnZhbHVlLCBjaWYtPnJzdHJ1Y3RfZmxhZywgZm4pOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBGRklfQVNTRVJUKDApOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihjaGFyICpzdGFjaywgdm9pZCAqKnJ2YWx1ZSwKKyAgICB2b2lkICoqYXZhbHVlLCBmZmlfY2lmICpjaWYpCit7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHJlZ19tYXNrID0gMDsKKyAgICByZWdpc3RlciB2b2lkICoqcF9hcmd2OworICAgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CisgICAgcmVnaXN0ZXIgY2hhciAqcmVnX2Jhc2UgPSBzdGFjazsKKyAgICByZWdpc3RlciBjaGFyICpzdGFja19iYXNlID0gc3RhY2sgKyAyMDsKKyAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgc3RhY2tfb2Zmc2V0ID0gMDsKKworI2lmZGVmIERFQlVHCisgICAgLyogRGVidWdnaW5nICovCisgICAgZm9yKGkgPSAwOyBpIDwgY2lmLT5uYXJncyArIDc7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50Zigic3ArJWQ6IDB4JTA4eFxuIiwgaSo0LCAoKHVuc2lnbmVkIGludCopc3RhY2spW2ldKTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIElmIGNpZi0+ZmxhZ3MgaXMgc3RydWN0IHRoZW4gd2Uga25vdyBpdCdzIG5vdCBwYXNzZWQgaW4gcmVnaXN0ZXJzICovCisgICAgaWYoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgeworICAgICAgICAqcnZhbHVlID0gKih2b2lkICoqKXJlZ19iYXNlOworICAgICAgICByZWdfbWFzayB8PSAxOworICAgIH0KKworICAgIHBfYXJndiA9IGF2YWx1ZTsKKworICAgIGZvcihpID0gMCwgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgcF9hcmcrKykKKyAgICB7CisgICAgICAgIHNpemVfdCB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICAgIGludCBhbGlnbm1lbnQgPSAoKnBfYXJnKS0+YWxpZ25tZW50OworCisgICAgICAgICpwX2FyZ3YgPSAwOworCisgICAgICAgIGlmKHogJSA0ICE9IDApCisgICAgICAgICAgICB6ICs9ICg0IC0geiAlIDQpOworCisgICAgICAgIGlmKHJlZ19tYXNrICE9IDB4MWYpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKHBhc3Nfc3RydWN0X29uX3N0YWNrKCpwX2FyZykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKilzdGFja19iYXNlICsgc3RhY2tfb2Zmc2V0OworICAgICAgICAgICAgICAgIHN0YWNrX29mZnNldCArPSB6OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih6IDw9IHNpemVvZihpbnQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXIgaW5kZXggPSAwOworCisgICAgICAgICAgICAgICAgd2hpbGUoKHJlZ19tYXNrID4+IGluZGV4KSAmIDEpCisgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7CisKKyAgICAgICAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKXJlZ19iYXNlICsgKGluZGV4ICogNCk7CisgICAgICAgICAgICAgICAgcmVnX21hc2sgfD0gKDEgPDwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZih6ID09IDIgKiBzaXplb2YoaW50KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZighKChyZWdfbWFzayA+PiAxKSAmIDEpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKilyZWdfYmFzZSArIDQ7CisgICAgICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgzIDw8IDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmKCEoKHJlZ19tYXNrID4+IDMpICYgMSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKXJlZ19iYXNlICsgMTI7CisgICAgICAgICAgICAgICAgICAgIHJlZ19tYXNrIHw9ICgzIDw8IDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmKCEqcF9hcmd2KQorICAgICAgICB7CisgICAgICAgICAgICAqcF9hcmd2ID0gKHZvaWQqKXN0YWNrX2Jhc2UgKyBzdGFja19vZmZzZXQ7CisgICAgICAgICAgICBzdGFja19vZmZzZXQgKz0gejsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCgqcF9hcmcpLT50eXBlICE9IEZGSV9UWVBFX1NUUlVDVCB8fAorICAgICAgICAgICAgKCpwX2FyZyktPmVsZW1lbnRzWzFdID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmKGFsaWdubWVudCA9PSAxKQorICAgICAgICAgICAgICAgICoqKHVuc2lnbmVkIGludCoqKXBfYXJndiA8PD0gMjQ7CisgICAgICAgICAgICBlbHNlIGlmKGFsaWdubWVudCA9PSAyKQorICAgICAgICAgICAgICAgICoqKHVuc2lnbmVkIGludCoqKXBfYXJndiA8PD0gMTY7CisgICAgICAgIH0KKworICAgICAgICBwX2FyZ3YrKzsKKyAgICB9CisKKyNpZmRlZiBERUJVRworICAgIC8qIERlYnVnZ2luZyAqLworICAgIGZvcihpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKykKKyAgICB7CisgICAgICAgIHByaW50Zigic3ArJWQ6IDB4JTA4eFxuIiwgaSo0LCAqKCgodW5zaWduZWQgaW50KiopYXZhbHVlKVtpXSkpOworICAgIH0KKyNlbmRpZgorfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGp1bXBlZCB0byBieSB0aGUgdHJhbXBvbGluZSAqLworCit1bnNpZ25lZCBpbnQgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcihmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqKnJlc3BwLAorICAgIHZvaWQgKmFyZ3MpCit7CisgICAgZmZpX2NpZiAqY2lmOworICAgIHZvaWQgKiphcmdfYXJlYTsKKyAgICB1bnNpZ25lZCBpbnQgaSwgc2l6ZSA9IDA7CisgICAgZmZpX3R5cGUgKipwX2FyZzsKKworICAgIGNpZiA9IGNsb3N1cmUtPmNpZjsKKworICAgIGZvcihpID0gMCwgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgcF9hcmcrKykKKyAgICAgICAgc2l6ZSArPSAoKnBfYXJnKS0+c2l6ZSArICg0IC0gKCpwX2FyZyktPnNpemUgJSA0KTsKKworICAgIGFyZ19hcmVhID0gKHZvaWQgKiopYWxsb2NhKHNpemUpOworCisgICAgLyogdGhpcyBjYWxsIHdpbGwgaW5pdGlhbGl6ZSBBUkdfQVJFQSwgc3VjaCB0aGF0IGVhY2ggZWxlbWVudCBpbiB0aGF0CisgICAgICogYXJyYXkgcG9pbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG9uIHRoZSBzdGFjazsgYW5kIGlmIHRoZQorICAgICAqIGZ1bmN0aW9uIHJldHVybnMgYSBzdHJ1Y3R1cmUsIGl0IHdpbGwgcmUtc2V0IFJFU1AgdG8gcG9pbnQgdG8gdGhlCisgICAgICogc3RydWN0dXJlIHJldHVybiBhZGRyZXNzLiAqLworCisgICAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGFyZ3MsIHJlc3BwLCBhcmdfYXJlYSwgY2lmKTsKKworICAgIChjbG9zdXJlLT5mdW4pKGNpZiwgKnJlc3BwLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICAgIHJldHVybiBjaWYtPmZsYWdzOworfQorCitmZmlfc3RhdHVzIGZmaV9wcmVwX2Nsb3N1cmVfbG9jKGZmaV9jbG9zdXJlKiBjbG9zdXJlLCBmZmlfY2lmKiBjaWYsCisgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosIHZvaWQqLCB2b2lkKiosIHZvaWQqKSwgdm9pZCAqdXNlcl9kYXRhLAorICAgIHZvaWQgKmNvZGVsb2MpCit7CisgICAgRkZJX0FTU0VSVChjaWYtPmFiaSA9PSBGRklfU1lTVik7CisKKyAgICB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKSgmY2xvc3VyZS0+dHJhbXBbMF0pOworICAgIHVuc2lnbmVkIGludCAgX19mdW4gPSAodW5zaWduZWQgaW50KSgmZmZpX2Nsb3N1cmVfU1lTVik7CisgICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKGNvZGVsb2MpOworICAgIHVuc2lnbmVkIGludCAgX19yc3RydWN0X2ZsYWcgPSAodW5zaWduZWQgaW50KShjaWYtPnJzdHJ1Y3RfZmxhZyk7CisgICAgdW5zaWduZWQgaW50ICBfX2lubmVyID0gKHVuc2lnbmVkIGludCkoJmZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMF0gPSAweGViY2QxZjAwOyAgICAvKiBwdXNobSAgcjgtcjEyICovCisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFs0XSA9IDB4ZmVmYzAwMTA7ICAgIC8qIGxkLncgICByMTIsIHBjWzE2XSAqLworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbOF0gPSAweGZlZmIwMDEwOyAgICAvKiBsZC53ICAgcjExLCBwY1sxNl0gKi8KKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzEyXSA9IDB4ZmVmYTAwMTA7ICAgLyogbGQudyAgIHIxMCwgcGNbMTZdICovCisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsxNl0gPSAweGZlZmYwMDEwOyAgIC8qIGxkLncgICBwYywgcGNbMTZdICovCisgICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsyMF0gPSBfX2N0eDsKKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzI0XSA9IF9fcnN0cnVjdF9mbGFnOworICAgICoodW5zaWduZWQgaW50KikgJl9fdHJhbXBbMjhdID0gX19pbm5lcjsKKyAgICAqKHVuc2lnbmVkIGludCopICZfX3RyYW1wWzMyXSA9IF9fZnVuOworICAgIHN5c2NhbGwoX19OUl9jYWNoZWZsdXNoLCAwLCAoJl9fdHJhbXBbMF0pLCAzNik7CisKKyAgICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgICAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICAgIGNsb3N1cmUtPmZ1biAgPSBmdW47CisKKyAgICByZXR1cm4gRkZJX09LOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2F2cjMyL2ZmaXRhcmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzk5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9mZml0YXJnZXQuaApAQCAtMCwwICsxLDUwIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQorICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDIwMDkgIEJyYWRsZXkgU21pdGggPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKyAgIFRhcmdldCBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgQVZSMzIuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICAgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9TWVNWLAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTViwKKyAgRkZJX0xBU1RfQUJJID0gRkZJX0RFRkFVTFRfQUJJICsgMQorfSBmZmlfYWJpOworI2VuZGlmCisKKyNkZWZpbmUgRkZJX0VYVFJBX0NJRl9GSUVMRFMgdW5zaWduZWQgaW50IHJzdHJ1Y3RfZmxhZworCisvKiBEZWZpbml0aW9ucyBmb3IgY2xvc3VyZXMgKi8KKworI2RlZmluZSBGRklfQ0xPU1VSRVMgMQorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDM2CisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXZyMzIvc3lzdi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODRiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hdnIzMi9zeXN2LlMKQEAgLTAsMCArMSwyMDggQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDkgIEJyYWRsZXkgU21pdGggPGJyYWRAYnJhZC1zbWl0aC5jby51az4KKworICAgQVZSMzIgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgICBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIExJQkZGSV9BU00KKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworICAgIC8qIHIxMjogIGZmaV9wcmVwX2FyZ3MKKyAgICAgKiByMTE6ICAmZWNpZgorICAgICAqIHIxMDogIHNpemUKKyAgICAgKiByOTogICBjaWYtPmZsYWdzCisgICAgICogcjg6ICAgZWNpZi5ydmFsdWUKKyAgICAgKiBzcCswOiBjaWYtPnJzdHJ1Y3RfZmxhZworICAgICAqIHNwKzQ6IGZuICovCisKKyAgICAudGV4dAorICAgIC5hbGlnbiAgMQorICAgIC5nbG9ibCAgZmZpX2NhbGxfU1lTVgorICAgIC50eXBlICAgZmZpX2NhbGxfU1lTViwgQGZ1bmN0aW9uCitmZmlfY2FsbF9TWVNWOgorICAgIHN0bSAgICAgLS1zcCwgcjAscjEsbHIKKyAgICBzdG0gICAgIC0tc3AsIHI4LXIxMgorICAgIG1vdiAgICAgcjAsIHNwCisKKyAgICAvKiBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuICovCisgICAgc3ViICAgICBzcCwgcjEwCisgICAgLyogUGFkIHRvIG1ha2Ugd2F5IGZvciBwb3RlbnRpYWwgc2tpcHBlZCByZWdpc3RlcnMgKi8KKyAgICBzdWIgICAgIHNwLCAyMAorCisgICAgLyogQ2FsbCBmZmlfcHJlcF9hcmdzKHN0YWNrLCAmZWNpZikuICovCisgICAgLyogcjExIGFscmVhZHkgc2V0ICovCisgICAgbW92ICAgICByMSwgcjEyCisgICAgbW92ICAgICByMTIsIHNwCisgICAgaWNhbGwgICByMQorCisgICAgLyogU2F2ZSBuZXcgYXJndW1lbnQgc2l6ZSAqLworICAgIG1vdiAgICAgcjEsIHIxMgorCisgICAgLyogTW92ZSBmaXJzdCA1IHBhcmFtZXRlcnMgaW4gcmVnaXN0ZXJzLiAqLworICAgIGxkbSAgICAgc3ArKywgcjgtcjEyCisKKyAgICAvKiBjYWxsIChmbikgKC4uLikuICovCisgICAgbGQudyAgICByMSwgcjBbMzZdCisgICAgaWNhbGwgICByMQorCisgICAgLyogUmVtb3ZlIHRoZSBzcGFjZSB3ZSBwdXNoZWQgZm9yIHRoZSBhcmdzLiAqLworICAgIG1vdiAgICAgc3AsIHIwCisKKyAgICAvKiBMb2FkIHIxIHdpdGggdGhlIHJzdHJ1Y3QgZmxhZy4gKi8KKyAgICBsZC53ICAgIHIxLCBzcFszMl0KKworICAgIC8qIExvYWQgcjkgd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZS4gKi8KKyAgICBsZC53ICAgIHI5LCBzcFsxMl0KKworICAgIC8qIExvYWQgcjggd2l0aCB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIuICovCisgICAgbGQudyAgICByOCwgc3BbMTZdCisKKyAgICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4gKi8KKyAgICBjcC53ICAgIHI4LCAwCisgICAgYnJlcSAgICAuTGVuZAorCisgICAgLyogQ2hlY2sgaWYgcmV0dXJuIHR5cGUgaXMgYWN0dWFsbHkgYSBzdHJ1Y3QgKi8KKyAgICBjcC53ICAgIHIxLCAwCisgICAgYnJlcSAgICAxZgorCisgICAgLyogUmV0dXJuIDhiaXQgKi8KKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UOAorICAgIGJyZXEgICAgLkxzdG9yZTgKKworICAgIC8qIFJldHVybiAxNmJpdCAqLworICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQxNgorICAgIGJyZXEgICAgLkxzdG9yZTE2CisKKzE6CisgICAgLyogUmV0dXJuIDMyYml0ICovCisgICAgY3AudyAgICByOSwgRkZJX1RZUEVfVUlOVDMyCisgICAgYnJlcSAgICAuTHN0b3JlMzIKKyAgICBjcC53ICAgIHI5LCBGRklfVFlQRV9VSU5UMTYKKyAgICBicmVxICAgIC5Mc3RvcmUzMgorICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQ4CisgICAgYnJlcSAgICAuTHN0b3JlMzIKKworICAgIC8qIFJldHVybiA2NGJpdCAqLworICAgIGNwLncgICAgcjksIEZGSV9UWVBFX1VJTlQ2NAorICAgIGJyZXEgICAgLkxzdG9yZTY0CisKKyAgICAvKiBEaWRuJ3QgbWF0Y2ggYW55dGhpbmcgKi8KKyAgICBicmFsICAgIC5MZW5kCisKKy5Mc3RvcmU2NDoKKyAgICBzdC53ICAgIHI4WzBdLCByMTEKKyAgICBzdC53ICAgIHI4WzRdLCByMTAKKyAgICBicmFsICAgIC5MZW5kCisKKy5Mc3RvcmUzMjoKKyAgICBzdC53ICAgIHI4WzBdLCByMTIKKyAgICBicmFsICAgIC5MZW5kCisKKy5Mc3RvcmUxNjoKKyAgICBzdC5oICAgIHI4WzBdLCByMTIKKyAgICBicmFsICAgIC5MZW5kCisKKy5Mc3RvcmU4OgorICAgIHN0LmIgICAgcjhbMF0sIHIxMgorICAgIGJyYWwgICAgLkxlbmQKKworLkxlbmQ6CisgICAgc3ViICAgICBzcCwgLTIwCisgICAgbGRtICAgICBzcCsrLCByMCxyMSxwYworCisgICAgLnNpemUgICBmZmlfY2FsbF9TWVNWLCAuIC0gZmZpX2NhbGxfU1lTVgorCisKKyAgICAvKiByMTI6ICBfX2N0eAorICAgICAqIHIxMTogIF9fcnN0cnVjdF9mbGFnCisgICAgICogcjEwOiAgX19pbm5lciAqLworCisgICAgLmFsaWduICAxCisgICAgLmdsb2JsICBmZmlfY2xvc3VyZV9TWVNWCisgICAgLnR5cGUgICBmZmlfY2xvc3VyZV9TWVNWLCBAZnVuY3Rpb24KK2ZmaV9jbG9zdXJlX1NZU1Y6CisgICAgc3RtICAgICAtLXNwLCByMCxscgorICAgIG1vdiAgICAgcjAsIHIxMQorICAgIG1vdiAgICAgcjgsIHIxMAorICAgIHN1YiAgICAgcjEwLCBzcCwgLTgKKyAgICBzdWIgICAgIHNwLCAxMgorICAgIHN0LncgICAgc3BbOF0sIHNwCisgICAgc3ViICAgICByMTEsIHNwLCAtOAorICAgIGljYWxsICAgcjgKKworICAgIC8qIENoZWNrIGlmIHJldHVybiB0eXBlIGlzIGFjdHVhbGx5IGEgc3RydWN0ICovCisgICAgY3AudyAgICByMCwgMAorICAgIGJyZXEgICAgMWYKKworICAgIC8qIFJldHVybiA4Yml0ICovCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQ4CisgICAgYnJlcSAgICAuTGdldDgKKworICAgIC8qIFJldHVybiAxNmJpdCAqLworICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UMTYKKyAgICBicmVxICAgIC5MZ2V0MTYKKworMToKKyAgICAvKiBSZXR1cm4gMzJiaXQgKi8KKyAgICBjcC53ICAgIHIxMiwgRkZJX1RZUEVfVUlOVDMyCisgICAgYnJlcSAgICAuTGdldDMyCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQxNgorICAgIGJyZXEgICAgLkxnZXQzMgorICAgIGNwLncgICAgcjEyLCBGRklfVFlQRV9VSU5UOAorICAgIGJyZXEgICAgLkxnZXQzMgorCisgICAgLyogUmV0dXJuIDY0Yml0ICovCisgICAgY3AudyAgICByMTIsIEZGSV9UWVBFX1VJTlQ2NAorICAgIGJyZXEgICAgLkxnZXQ2NAorCisgICAgLyogRGlkbid0IG1hdGNoIGFueXRoaW5nICovCisgICAgYnJhbCAgICAuTGNsZW5kCisKKy5MZ2V0NjQ6CisgICAgbGQudyAgICByMTEsIHNwWzBdCisgICAgbGQudyAgICByMTAsIHNwWzRdCisgICAgYnJhbCAgICAuTGNsZW5kCisKKy5MZ2V0MzI6CisgICAgbGQudyAgICByMTIsIHNwWzBdCisgICAgYnJhbCAgICAuTGNsZW5kCisKKy5MZ2V0MTY6CisgICAgbGQudWggICByMTIsIHNwWzBdCisgICAgYnJhbCAgICAuTGNsZW5kCisKKy5MZ2V0ODoKKyAgICBsZC51YiAgIHIxMiwgc3BbMF0KKyAgICBicmFsICAgIC5MY2xlbmQKKworLkxjbGVuZDoKKyAgICBzdWIgICAgIHNwLCAtMTIKKyAgICBsZG0gICAgIHNwKyssIHIwLGxyCisgICAgc3ViICAgICBzcCwgLTIwCisgICAgbW92ICAgICBwYywgbHIKKworICAgIC5zaXplICAgZmZpX2Nsb3N1cmVfU1lTViwgLiAtIGZmaV9jbG9zdXJlX1NZU1YKKworI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworICAgIC5zZWN0aW9uICAgIC5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxNTZlMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMKQEAgLTAsMCArMSw2MTAgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBjbG9zdXJlcy5jIC0gQ29weXJpZ2h0IChjKSAyMDA3ICBSZWQgSGF0LCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKworICAgQ29kZSB0byBhbGxvY2F0ZSBhbmQgZGVhbGxvY2F0ZSBtZW1vcnkgZm9yIGNsb3N1cmVzLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgZGVmaW5lZCBfX2xpbnV4X18gJiYgIWRlZmluZWQgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpZm5kZWYgRkZJX01NQVBfRVhFQ19XUklUCisjIGlmIF9fZ251X2xpbnV4X18KKy8qIFRoaXMgbWFjcm8gaW5kaWNhdGVzIGl0IG1heSBiZSBmb3JiaWRkZW4gdG8gbWFwIGFub255bW91cyBtZW1vcnkKKyAgIHdpdGggYm90aCB3cml0ZSBhbmQgZXhlY3V0ZSBwZXJtaXNzaW9uLiAgQ29kZSBjb21waWxlZCB3aGVuIHRoaXMKKyAgIG9wdGlvbiBpcyBkZWZpbmVkIHdpbGwgYXR0ZW1wdCB0byBtYXAgc3VjaCBwYWdlcyBvbmNlLCBidXQgaWYgaXQKKyAgIGZhaWxzLCBpdCBmYWxscyBiYWNrIHRvIGNyZWF0aW5nIGEgdGVtcG9yYXJ5IGZpbGUgaW4gYSB3cml0YWJsZSBhbmQKKyAgIGV4ZWN1dGFibGUgZmlsZXN5c3RlbSBhbmQgbWFwcGluZyBwYWdlcyBmcm9tIGl0IGludG8gc2VwYXJhdGUKKyAgIGxvY2F0aW9ucyBpbiB0aGUgdmlydHVhbCBtZW1vcnkgc3BhY2UsIG9uZSBsb2NhdGlvbiB3cml0YWJsZSBhbmQKKyAgIGFub3RoZXIgZXhlY3V0YWJsZS4gICovCisjICBkZWZpbmUgRkZJX01NQVBfRVhFQ19XUklUIDEKKyMgIGRlZmluZSBIQVZFX01OVEVOVCAxCisjIGVuZGlmCisjIGlmIGRlZmluZWQoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkKKy8qIFdpbmRvd3Mgc3lzdGVtcyBtYXkgaGF2ZSBEYXRhIEV4ZWN1dGlvbiBQcm90ZWN0aW9uIChERVApIGVuYWJsZWQsIAorICAgd2hpY2ggcmVxdWlyZXMgdGhlIHVzZSBvZiBWaXJ0dWFsTWFsbG9jL1ZpcnR1YWxGcmVlIHRvIGFsbG9jL2ZyZWUKKyAgIGV4ZWN1dGFibGUgbWVtb3J5LiAqLworIyAgZGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCAxCisjIGVuZGlmCisjZW5kaWYKKworI2lmIEZGSV9NTUFQX0VYRUNfV1JJVCAmJiAhZGVmaW5lZCBGRklfTU1BUF9FWEVDX1NFTElOVVgKKyMgaWZkZWYgX19saW51eF9fCisvKiBXaGVuIGRlZmluZWQgdG8gMSBjaGVjayBmb3IgU0VMaW51eCBhbmQgaWYgU0VMaW51eCBpcyBhY3RpdmUsCisgICBkb24ndCBhdHRlbXB0IFBST1RfRVhFQ3xQUk9UX1dSSVRFIG1hcHBpbmcgYXQgYWxsLCBhcyB0aGF0CisgICBtaWdodCBjYXVzZSBhdWRpdCBtZXNzYWdlcy4gICovCisjICBkZWZpbmUgRkZJX01NQVBfRVhFQ19TRUxJTlVYIDEKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgRkZJX0NMT1NVUkVTCisKKyMgaWYgRkZJX01NQVBfRVhFQ19XUklUCisKKyNkZWZpbmUgVVNFX0xPQ0tTIDEKKyNkZWZpbmUgVVNFX0RMX1BSRUZJWCAxCisjaWZkZWYgX19HTlVDX18KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAxCisjZW5kaWYKKyNlbmRpZgorCisvKiBXZSBuZWVkIHRvIHVzZSBtbWFwLCBub3Qgc2Jyay4gICovCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorCisvKiBXZSBjb3VsZCwgaW4gdGhlb3J5LCBzdXBwb3J0IG1yZW1hcCwgYnV0IGl0IHdvdWxkbid0IGJ1eSB1cyBhbnl0aGluZy4gICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKworLyogV2UgaGF2ZSBubyB1c2UgZm9yIHRoaXMsIHNvIHNhdmUgc29tZSBjb2RlIGFuZCBkYXRhLiAgKi8KKyNkZWZpbmUgTk9fTUFMTElORk8gMQorCisvKiBXZSBuZWVkIGFsbCBhbGxvY2F0aW9ucyB0byBiZSBpbiByZWd1bGFyIHNlZ21lbnRzLCBvdGhlcndpc2Ugd2UKKyAgIGxvc2UgdHJhY2sgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29kZSBhZGRyZXNzLiAgKi8KKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCBNQVhfU0laRV9UCisKKy8qIERvbid0IGFsbG9jYXRlIG1vcmUgdGhhbiBhIHBhZ2UgdW5sZXNzIG5lZWRlZC4gICovCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpbWFsbG9jX2dldHBhZ2VzaXplKQorCisjaWYgRkZJX0NMT1NVUkVfVEVTVAorLyogRG9uJ3QgcmVsZWFzZSBzaW5nbGUgcGFnZXMsIHRvIGF2b2lkIGEgd29yc3QtY2FzZSBzY2VuYXJpbyBvZgorICAgY29udGludW91c2x5IGFsbG9jYXRpbmcgYW5kIHJlbGVhc2luZyBzaW5nbGUgcGFnZXMsIGJ1dCByZWxlYXNlCisgICBwYWlycyBvZiBwYWdlcywgd2hpY2ggc2hvdWxkIGRvIGp1c3QgYXMgd2VsbCBnaXZlbiB0aGF0IGFsbG9jYXRpb25zCisgICBhcmUgbGlrZWx5IHRvIGJlIHNtYWxsLiAgKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCltYWxsb2NfZ2V0cGFnZXNpemUpCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmbmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiAhZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKFg4Nl9XSU42NCkKKyNpZmRlZiBIQVZFX01OVEVOVAorI2luY2x1ZGUgPG1udGVudC5oPgorI2VuZGlmIC8qIEhBVkVfTU5URU5UICovCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisvKiBXZSBkb24ndCB3YW50IHN5cy9tbWFuLmggdG8gYmUgaW5jbHVkZWQgYWZ0ZXIgd2UgcmVkZWZpbmUgbW1hcCBhbmQKKyAgIGRsbXVubWFwLiAgKi8KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2RlZmluZSBMQUNLU19TWVNfTU1BTl9IIDEKKworI2lmIEZGSV9NTUFQX0VYRUNfU0VMSU5VWAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworc3RhdGljIGludCBzZWxpbnV4X2VuYWJsZWQgPSAtMTsKKworc3RhdGljIGludAorc2VsaW51eF9lbmFibGVkX2NoZWNrICh2b2lkKQoreworICBzdHJ1Y3Qgc3RhdGZzIHNmczsKKyAgRklMRSAqZjsKKyAgY2hhciAqYnVmID0gTlVMTDsKKyAgc2l6ZV90IGxlbiA9IDA7CisKKyAgaWYgKHN0YXRmcyAoIi9zZWxpbnV4IiwgJnNmcykgPj0gMAorICAgICAgJiYgKHVuc2lnbmVkIGludCkgc2ZzLmZfdHlwZSA9PSAweGY5N2NmZjhjVSkKKyAgICByZXR1cm4gMTsKKyAgZiA9IGZvcGVuICgiL3Byb2MvbW91bnRzIiwgInIiKTsKKyAgaWYgKGYgPT0gTlVMTCkKKyAgICByZXR1cm4gMDsKKyAgd2hpbGUgKGdldGxpbmUgKCZidWYsICZsZW4sIGYpID49IDApCisgICAgeworICAgICAgY2hhciAqcCA9IHN0cmNociAoYnVmLCAnICcpOworICAgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgYnJlYWs7CisgICAgICBwID0gc3RyY2hyIChwICsgMSwgJyAnKTsKKyAgICAgIGlmIChwID09IE5VTEwpCisgICAgICAgIGJyZWFrOworICAgICAgaWYgKHN0cm5jbXAgKHAgKyAxLCAic2VsaW51eGZzICIsIDEwKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgZnJlZSAoYnVmKTsKKyAgICAgICAgICBmY2xvc2UgKGYpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgfQorICBmcmVlIChidWYpOworICBmY2xvc2UgKGYpOworICByZXR1cm4gMDsKK30KKworI2RlZmluZSBpc19zZWxpbnV4X2VuYWJsZWQoKSAoc2VsaW51eF9lbmFibGVkID49IDAgPyBzZWxpbnV4X2VuYWJsZWQgXAorCQkJICAgICAgOiAoc2VsaW51eF9lbmFibGVkID0gc2VsaW51eF9lbmFibGVkX2NoZWNrICgpKSkKKworI2Vsc2UKKworI2RlZmluZSBpc19zZWxpbnV4X2VuYWJsZWQoKSAwCisKKyNlbmRpZiAvKiAhRkZJX01NQVBfRVhFQ19TRUxJTlVYICovCisKKyNlbGlmIGRlZmluZWQgKF9fQ1lHV0lOX18pCisKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisvKiBDeWd3aW4gaXMgTGludXgtbGlrZSwgYnV0IG5vdCBxdWl0ZSB0aGF0IExpbnV4LWxpa2UuICAqLworI2RlZmluZSBpc19zZWxpbnV4X2VuYWJsZWQoKSAwCisKKyNlbmRpZiAvKiAhZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKFg4Nl9XSU42NCkgKi8KKworLyogRGVjbGFyZSBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gZGxtYWxsb2MuYyBhcyBzdGF0aWMuICAqLworc3RhdGljIHZvaWQgKmRsbWFsbG9jKHNpemVfdCk7CitzdGF0aWMgdm9pZCBkbGZyZWUodm9pZCopOworc3RhdGljIHZvaWQgKmRsY2FsbG9jKHNpemVfdCwgc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCAqZGxyZWFsbG9jKHZvaWQgKiwgc2l6ZV90KSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCAqZGxtZW1hbGlnbihzaXplX3QsIHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQgKmRsdmFsbG9jKHNpemVfdCkgTUFZQkVfVU5VU0VEOworc3RhdGljIGludCBkbG1hbGxvcHQoaW50LCBpbnQpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyBzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyBzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSBNQVlCRV9VTlVTRUQ7CitzdGF0aWMgdm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKikgTUFZQkVfVU5VU0VEOworc3RhdGljIHZvaWQgKmRscHZhbGxvYyhzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyBpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QpIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyBzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopIE1BWUJFX1VOVVNFRDsKK3N0YXRpYyB2b2lkIGRsbWFsbG9jX3N0YXRzKHZvaWQpIE1BWUJFX1VOVVNFRDsKKworI2lmICEoZGVmaW5lZChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X1dJTjY0KSkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykKKy8qIFVzZSB0aGVzZSBmb3IgbW1hcCBhbmQgbXVubWFwIHdpdGhpbiBkbG1hbGxvYy5jLiAgKi8KK3N0YXRpYyB2b2lkICpkbG1tYXAodm9pZCAqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZl90KTsKK3N0YXRpYyBpbnQgZGxtdW5tYXAodm9pZCAqLCBzaXplX3QpOworI2VuZGlmIC8qICEoZGVmaW5lZChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X1dJTjY0KSkgfHwgZGVmaW5lZCAoX19DWUdXSU5fXykgKi8KKworI2RlZmluZSBtbWFwIGRsbW1hcAorI2RlZmluZSBtdW5tYXAgZGxtdW5tYXAKKworI2luY2x1ZGUgImRsbWFsbG9jLmMiCisKKyN1bmRlZiBtbWFwCisjdW5kZWYgbXVubWFwCisKKyNpZiAhKGRlZmluZWQoWDg2X1dJTjMyKSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkpIHx8IGRlZmluZWQgKF9fQ1lHV0lOX18pCisKKy8qIEEgbXV0ZXggdXNlZCB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gKmV4ZWMqIHZhcmlhYmxlcyBpbiB0aGlzIGZpbGUuICAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBvcGVuX3RlbXBfZXhlY19maWxlX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworLyogQSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZW1wb3JhcnkgZmlsZSBmcm9tIHdoaWNoIHdlJ2xsIG1hcAorICAgZXhlY3V0YWJsZSBwYWdlcy4gICovCitzdGF0aWMgaW50IGV4ZWNmZCA9IC0xOworCisvKiBUaGUgYW1vdW50IG9mIHNwYWNlIGFscmVhZHkgYWxsb2NhdGVkIGZyb20gdGhlIHRlbXBvcmFyeSBmaWxlLiAgKi8KK3N0YXRpYyBzaXplX3QgZXhlY3NpemUgPSAwOworCisvKiBPcGVuIGEgdGVtcG9yYXJ5IGZpbGUgbmFtZSwgYW5kIGltbWVkaWF0ZWx5IHVubGluayBpdC4gICovCitzdGF0aWMgaW50CitvcGVuX3RlbXBfZXhlY19maWxlX25hbWUgKGNoYXIgKm5hbWUpCit7CisgIGludCBmZCA9IG1rc3RlbXAgKG5hbWUpOworCisgIGlmIChmZCAhPSAtMSkKKyAgICB1bmxpbmsgKG5hbWUpOworCisgIHJldHVybiBmZDsKK30KKworLyogT3BlbiBhIHRlbXBvcmFyeSBmaWxlIGluIHRoZSBuYW1lZCBkaXJlY3RvcnkuICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIgKGNvbnN0IGNoYXIgKmRpcikKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSAiL2ZmaVhYWFhYWCI7CisgIGludCBsZW5kaXIgPSBzdHJsZW4gKGRpcik7CisgIGNoYXIgKnRlbXBuYW1lID0gX19idWlsdGluX2FsbG9jYSAobGVuZGlyICsgc2l6ZW9mIChzdWZmaXgpKTsKKworICBpZiAoIXRlbXBuYW1lKQorICAgIHJldHVybiAtMTsKKworICBtZW1jcHkgKHRlbXBuYW1lLCBkaXIsIGxlbmRpcik7CisgIG1lbWNweSAodGVtcG5hbWUgKyBsZW5kaXIsIHN1ZmZpeCwgc2l6ZW9mIChzdWZmaXgpKTsKKworICByZXR1cm4gb3Blbl90ZW1wX2V4ZWNfZmlsZV9uYW1lICh0ZW1wbmFtZSk7Cit9CisKKy8qIE9wZW4gYSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGUgZGlyZWN0b3J5IGluIHRoZSBuYW1lZCBlbnZpcm9ubWVudAorICAgdmFyaWFibGUuICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZV9lbnYgKGNvbnN0IGNoYXIgKmVudnZhcikKK3sKKyAgY29uc3QgY2hhciAqdmFsdWUgPSBnZXRlbnYgKGVudnZhcik7CisKKyAgaWYgKCF2YWx1ZSkKKyAgICByZXR1cm4gLTE7CisKKyAgcmV0dXJuIG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyICh2YWx1ZSk7Cit9CisKKyNpZmRlZiBIQVZFX01OVEVOVAorLyogT3BlbiBhIHRlbXBvcmFyeSBmaWxlIGluIGFuIGV4ZWN1dGFibGUgYW5kIHdyaXRhYmxlIG1vdW50IHBvaW50CisgICBsaXN0ZWQgaW4gdGhlIG1vdW50cyBmaWxlLiAgU3Vic2VxdWVudCBjYWxscyB3aXRoIHRoZSBzYW1lIG1vdW50cworICAga2VlcCBzZWFyY2hpbmcgZm9yIG1vdW50IHBvaW50cyBpbiB0aGUgc2FtZSBmaWxlLiAgUHJvdmlkaW5nIE5VTEwKKyAgIGFzIHRoZSBtb3VudHMgZmlsZSBjbG9zZXMgdGhlIGZpbGUuICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZV9tbnQgKGNvbnN0IGNoYXIgKm1vdW50cykKK3sKKyAgc3RhdGljIGNvbnN0IGNoYXIgKmxhc3RfbW91bnRzOworICBzdGF0aWMgRklMRSAqbGFzdF9tbnRlbnQ7CisKKyAgaWYgKG1vdW50cyAhPSBsYXN0X21vdW50cykKKyAgICB7CisgICAgICBpZiAobGFzdF9tbnRlbnQpCisJZW5kbW50ZW50IChsYXN0X21udGVudCk7CisKKyAgICAgIGxhc3RfbW91bnRzID0gbW91bnRzOworCisgICAgICBpZiAobW91bnRzKQorCWxhc3RfbW50ZW50ID0gc2V0bW50ZW50IChtb3VudHMsICJyIik7CisgICAgICBlbHNlCisJbGFzdF9tbnRlbnQgPSBOVUxMOworICAgIH0KKworICBpZiAoIWxhc3RfbW50ZW50KQorICAgIHJldHVybiAtMTsKKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIGludCBmZDsKKyAgICAgIHN0cnVjdCBtbnRlbnQgbW50OworICAgICAgY2hhciBidWZbTUFYUEFUSExFTiAqIDNdOworCisgICAgICBpZiAoZ2V0bW50ZW50X3IgKGxhc3RfbW50ZW50LCAmbW50LCBidWYsIHNpemVvZiAoYnVmKSkpCisJcmV0dXJuIC0xOworCisgICAgICBpZiAoaGFzbW50b3B0ICgmbW50LCAicm8iKQorCSAgfHwgaGFzbW50b3B0ICgmbW50LCAibm9leGVjIikKKwkgIHx8IGFjY2VzcyAobW50Lm1udF9kaXIsIFdfT0spKQorCWNvbnRpbnVlOworCisgICAgICBmZCA9IG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyIChtbnQubW50X2Rpcik7CisKKyAgICAgIGlmIChmZCAhPSAtMSkKKwlyZXR1cm4gZmQ7CisgICAgfQorfQorI2VuZGlmIC8qIEhBVkVfTU5URU5UICovCisKKy8qIEluc3RydWN0aW9ucyB0byBsb29rIGZvciBhIGxvY2F0aW9uIHRvIGhvbGQgYSB0ZW1wb3JhcnkgZmlsZSB0aGF0CisgICBjYW4gYmUgbWFwcGVkIGluIGZvciBleGVjdXRpb24uICAqLworc3RhdGljIHN0cnVjdAoreworICBpbnQgKCpmdW5jKShjb25zdCBjaGFyICopOworICBjb25zdCBjaGFyICphcmc7CisgIGludCByZXBlYXQ7Cit9IG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tdID0geworICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfZW52LCAiVE1QRElSIiwgMCB9LAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyLCAiL3RtcCIsIDAgfSwKKyAgeyBvcGVuX3RlbXBfZXhlY19maWxlX2RpciwgIi92YXIvdG1wIiwgMCB9LAorICB7IG9wZW5fdGVtcF9leGVjX2ZpbGVfZGlyLCAiL2Rldi9zaG0iLCAwIH0sCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9lbnYsICJIT01FIiwgMCB9LAorI2lmZGVmIEhBVkVfTU5URU5UCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9tbnQsICIvZXRjL210YWIiLCAxIH0sCisgIHsgb3Blbl90ZW1wX2V4ZWNfZmlsZV9tbnQsICIvcHJvYy9tb3VudHMiLCAxIH0sCisjZW5kaWYgLyogSEFWRV9NTlRFTlQgKi8KK307CisKKy8qIEN1cnJlbnQgaW5kZXggaW50byBvcGVuX3RlbXBfZXhlY19maWxlX29wdHMuICAqLworc3RhdGljIGludCBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4ID0gMDsKKworLyogUmVzZXQgYSBjdXJyZW50IG11bHRpLWNhbGwgZnVuYywgdGhlbiBhZHZhbmNlcyB0byB0aGUgbmV4dCBlbnRyeS4KKyAgIElmIHdlJ3JlIGF0IHRoZSBsYXN0LCBnbyBiYWNrIHRvIHRoZSBmaXJzdCBhbmQgcmV0dXJuIG5vbnplcm8sCisgICBvdGhlcndpc2UgcmV0dXJuIHplcm8uICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX25leHQgKHZvaWQpCit7CisgIGlmIChvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0ucmVwZWF0KQorICAgIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c1tvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4XS5mdW5jIChOVUxMKTsKKworICBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4Kys7CisgIGlmIChvcGVuX3RlbXBfZXhlY19maWxlX29wdHNfaWR4CisgICAgICA9PSAoc2l6ZW9mIChvcGVuX3RlbXBfZXhlY19maWxlX29wdHMpCisJICAvIHNpemVvZiAoKm9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0cykpKQorICAgIHsKKyAgICAgIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHggPSAwOworICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgIHJldHVybiAwOworfQorCisvKiBSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3Igb2YgYSB0ZW1wb3JhcnkgemVyby1zaXplZCBmaWxlIGluIGEKKyAgIHdyaXRhYmxlIGFuZCBleGV4dXRhYmxlIGZpbGVzeXN0ZW0uICAqLworc3RhdGljIGludAorb3Blbl90ZW1wX2V4ZWNfZmlsZSAodm9pZCkKK3sKKyAgaW50IGZkOworCisgIGRvCisgICAgeworICAgICAgZmQgPSBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0uZnVuYworCShvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0uYXJnKTsKKworICAgICAgaWYgKCFvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0ucmVwZWF0CisJICB8fCBmZCA9PSAtMSkKKwl7CisJICBpZiAob3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX25leHQgKCkpCisJICAgIGJyZWFrOworCX0KKyAgICB9CisgIHdoaWxlIChmZCA9PSAtMSk7CisKKyAgcmV0dXJuIGZkOworfQorCisvKiBNYXAgaW4gYSBjaHVuayBvZiBtZW1vcnkgZnJvbSB0aGUgdGVtcG9yYXJ5IGV4ZWMgZmlsZSBpbnRvIHNlcGFyYXRlCisgICBsb2NhdGlvbnMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UsIG9uZSB3cml0YWJsZSBhbmQgb25lCisgICBleGVjdXRhYmxlLiAgUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgd3JpdGFibGUgcG9ydGlvbiwgYWZ0ZXIKKyAgIHN0b3JpbmcgYW4gb2Zmc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGV4ZWN1dGFibGUgcG9ydGlvbiBhdCB0aGUKKyAgIGxhc3Qgd29yZCBvZiB0aGUgcmVxdWVzdGVkIGNodW5rLiAgKi8KK3N0YXRpYyB2b2lkICoKK2RsbW1hcF9sb2NrZWQgKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBvZmZfdCBvZmZzZXQpCit7CisgIHZvaWQgKnB0cjsKKworICBpZiAoZXhlY2ZkID09IC0xKQorICAgIHsKKyAgICAgIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19pZHggPSAwOworICAgIHJldHJ5X29wZW46CisgICAgICBleGVjZmQgPSBvcGVuX3RlbXBfZXhlY19maWxlICgpOworICAgICAgaWYgKGV4ZWNmZCA9PSAtMSkKKwlyZXR1cm4gTUZBSUw7CisgICAgfQorCisgIG9mZnNldCA9IGV4ZWNzaXplOworCisgIGlmIChmdHJ1bmNhdGUgKGV4ZWNmZCwgb2Zmc2V0ICsgbGVuZ3RoKSkKKyAgICByZXR1cm4gTUZBSUw7CisKKyAgZmxhZ3MgJj0gfihNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMpOworICBmbGFncyB8PSBNQVBfU0hBUkVEOworCisgIHB0ciA9IG1tYXAgKE5VTEwsIGxlbmd0aCwgKHByb3QgJiB+UFJPVF9XUklURSkgfCBQUk9UX0VYRUMsCisJICAgICAgZmxhZ3MsIGV4ZWNmZCwgb2Zmc2V0KTsKKyAgaWYgKHB0ciA9PSBNRkFJTCkKKyAgICB7CisgICAgICBpZiAoIW9mZnNldCkKKwl7CisJICBjbG9zZSAoZXhlY2ZkKTsKKwkgIGdvdG8gcmV0cnlfb3BlbjsKKwl9CisgICAgICBmdHJ1bmNhdGUgKGV4ZWNmZCwgb2Zmc2V0KTsKKyAgICAgIHJldHVybiBNRkFJTDsKKyAgICB9CisgIGVsc2UgaWYgKCFvZmZzZXQKKwkgICAmJiBvcGVuX3RlbXBfZXhlY19maWxlX29wdHNbb3Blbl90ZW1wX2V4ZWNfZmlsZV9vcHRzX2lkeF0ucmVwZWF0KQorICAgIG9wZW5fdGVtcF9leGVjX2ZpbGVfb3B0c19uZXh0ICgpOworCisgIHN0YXJ0ID0gbW1hcCAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIGV4ZWNmZCwgb2Zmc2V0KTsKKworICBpZiAoc3RhcnQgPT0gTUZBSUwpCisgICAgeworICAgICAgbXVubWFwIChwdHIsIGxlbmd0aCk7CisgICAgICBmdHJ1bmNhdGUgKGV4ZWNmZCwgb2Zmc2V0KTsKKyAgICAgIHJldHVybiBzdGFydDsKKyAgICB9CisKKyAgbW1hcF9leGVjX29mZnNldCAoKGNoYXIgKilzdGFydCwgbGVuZ3RoKSA9IChjaGFyKilwdHIgLSAoY2hhciopc3RhcnQ7CisKKyAgZXhlY3NpemUgKz0gbGVuZ3RoOworCisgIHJldHVybiBzdGFydDsKK30KKworLyogTWFwIGluIGEgd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUgY2h1bmsgb2YgbWVtb3J5IGlmIHBvc3NpYmxlLgorICAgRmFpbGluZyB0aGF0LCBmYWxsIGJhY2sgdG8gZGxtbWFwX2xvY2tlZC4gICovCitzdGF0aWMgdm9pZCAqCitkbG1tYXAgKHZvaWQgKnN0YXJ0LCBzaXplX3QgbGVuZ3RoLCBpbnQgcHJvdCwKKwlpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KQoreworICB2b2lkICpwdHI7CisKKyAgYXNzZXJ0IChzdGFydCA9PSBOVUxMICYmIGxlbmd0aCAlIG1hbGxvY19nZXRwYWdlc2l6ZSA9PSAwCisJICAmJiBwcm90ID09IChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQorCSAgJiYgZmxhZ3MgPT0gKE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUykKKwkgICYmIGZkID09IC0xICYmIG9mZnNldCA9PSAwKTsKKworI2lmIEZGSV9DTE9TVVJFX1RFU1QKKyAgcHJpbnRmICgibWFwcGluZyBpbiAlemlcbiIsIGxlbmd0aCk7CisjZW5kaWYKKworICBpZiAoZXhlY2ZkID09IC0xICYmICFpc19zZWxpbnV4X2VuYWJsZWQgKCkpCisgICAgeworICAgICAgcHRyID0gbW1hcCAoc3RhcnQsIGxlbmd0aCwgcHJvdCB8IFBST1RfRVhFQywgZmxhZ3MsIGZkLCBvZmZzZXQpOworCisgICAgICBpZiAocHRyICE9IE1GQUlMIHx8IChlcnJubyAhPSBFUEVSTSAmJiBlcnJubyAhPSBFQUNDRVMpKQorCS8qIENvb2wsIG5vIG5lZWQgdG8gbWVzcyB3aXRoIHNlcGFyYXRlIHNlZ21lbnRzLiAgKi8KKwlyZXR1cm4gcHRyOworCisgICAgICAvKiBJZiBNUkVNQVBfRFVQIGlzIGV2ZXIgaW50cm9kdWNlZCBhbmQgaW1wbGVtZW50ZWQsIHRyeSBtbWFwCisJIHdpdGggKChwcm90ICYgflBST1RfV1JJVEUpIHwgUFJPVF9FWEVDKSBhbmQgbXJlbWFwIHdpdGgKKwkgTVJFTUFQX0RVUCBhbmQgcHJvdCBhdCB0aGlzIHBvaW50LiAgKi8KKyAgICB9CisKKyAgaWYgKGV4ZWNzaXplID09IDAgfHwgZXhlY2ZkID09IC0xKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayAoJm9wZW5fdGVtcF9leGVjX2ZpbGVfbXV0ZXgpOworICAgICAgcHRyID0gZGxtbWFwX2xvY2tlZCAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIG9mZnNldCk7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJm9wZW5fdGVtcF9leGVjX2ZpbGVfbXV0ZXgpOworCisgICAgICByZXR1cm4gcHRyOworICAgIH0KKworICByZXR1cm4gZGxtbWFwX2xvY2tlZCAoc3RhcnQsIGxlbmd0aCwgcHJvdCwgZmxhZ3MsIG9mZnNldCk7Cit9CisKKy8qIFJlbGVhc2UgbWVtb3J5IGF0IHRoZSBnaXZlbiBhZGRyZXNzLCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nCisgICBleGVjdXRhYmxlIHBhZ2UgaWYgaXQncyBzZXBhcmF0ZS4gICovCitzdGF0aWMgaW50CitkbG11bm1hcCAodm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpCit7CisgIC8qIFdlIGRvbid0IGJvdGhlciBkZWNyZWFzaW5nIGV4ZWNzaXplIG9yIHRydW5jYXRpbmcgdGhlIGZpbGUsIHNpbmNlCisgICAgIHdlIGNhbid0IHF1aXRlIHRlbGwgd2hldGhlciB3ZSdyZSB1bm1hcHBpbmcgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKyAgICAgV2UgZG9uJ3QgZXhwZWN0IGZyZXF1ZW50IGRlYWxsb2NhdGlvbiBhbnl3YXkuICBJZiB3ZSBkaWQsIHdlCisgICAgIGNvdWxkIGxvY2F0ZSBwYWdlcyBpbiB0aGUgZmlsZSBieSB3cml0aW5nIHRvIHRoZSBwYWdlcyBiZWluZworICAgICBkZWFsbG9jYXRlZCBhbmQgY2hlY2tpbmcgdGhhdCB0aGUgZmlsZSBjb250ZW50cyBjaGFuZ2UuCisgICAgIFl1Y2suICAqLworICBtc2VnbWVudHB0ciBzZWcgPSBzZWdtZW50X2hvbGRpbmcgKGdtLCBzdGFydCk7CisgIHZvaWQgKmNvZGU7CisKKyNpZiBGRklfQ0xPU1VSRV9URVNUCisgIHByaW50ZiAoInVubWFwcGluZyAlemlcbiIsIGxlbmd0aCk7CisjZW5kaWYKKworICBpZiAoc2VnICYmIChjb2RlID0gYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQgKHN0YXJ0LCBzZWcpKSAhPSBzdGFydCkKKyAgICB7CisgICAgICBpbnQgcmV0ID0gbXVubWFwIChjb2RlLCBsZW5ndGgpOworICAgICAgaWYgKHJldCkKKwlyZXR1cm4gcmV0OworICAgIH0KKworICByZXR1cm4gbXVubWFwIChzdGFydCwgbGVuZ3RoKTsKK30KKworI2lmIEZGSV9DTE9TVVJFX0ZSRUVfQ09ERQorLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBjb2RlIGFkZHJlc3MuICAqLworc3RhdGljIG1zZWdtZW50cHRyCitzZWdtZW50X2hvbGRpbmdfY29kZSAobXN0YXRlIG0sIGNoYXIqIGFkZHIpCit7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0IChzcC0+YmFzZSwgc3ApCisJJiYgYWRkciA8IGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0IChzcC0+YmFzZSwgc3ApICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKyNlbmRpZgorCisjZW5kaWYgLyogIShkZWZpbmVkKFg4Nl9XSU4zMikgfHwgZGVmaW5lZChYODZfV0lONjQpKSB8fCBkZWZpbmVkIChfX0NZR1dJTl9fKSAqLworCisvKiBBbGxvY2F0ZSBhIGNodW5rIG9mIG1lbW9yeSB3aXRoIHRoZSBnaXZlbiBzaXplLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAgIHRvIHRoZSB3cml0YWJsZSBhZGRyZXNzLCBhbmQgc2V0cyAqQ09ERSB0byB0aGUgZXhlY3V0YWJsZQorICAgY29ycmVzcG9uZGluZyB2aXJ0dWFsIGFkZHJlc3MuICAqLwordm9pZCAqCitmZmlfY2xvc3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKQoreworICB2b2lkICpwdHI7CisKKyAgaWYgKCFjb2RlKQorICAgIHJldHVybiBOVUxMOworCisgIHB0ciA9IGRsbWFsbG9jIChzaXplKTsKKworICBpZiAocHRyKQorICAgIHsKKyAgICAgIG1zZWdtZW50cHRyIHNlZyA9IHNlZ21lbnRfaG9sZGluZyAoZ20sIHB0cik7CisKKyAgICAgICpjb2RlID0gYWRkX3NlZ21lbnRfZXhlY19vZmZzZXQgKHB0ciwgc2VnKTsKKyAgICB9CisKKyAgcmV0dXJuIHB0cjsKK30KKworLyogUmVsZWFzZSBhIGNodW5rIG9mIG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCBmZmlfY2xvc3VyZV9hbGxvYy4gIElmCisgICBGRklfQ0xPU1VSRV9GUkVFX0NPREUgaXMgbm9uemVybywgdGhlIGdpdmVuIGFkZHJlc3MgY2FuIGJlIHRoZQorICAgd3JpdGFibGUgb3IgdGhlIGV4ZWN1dGFibGUgYWRkcmVzcyBnaXZlbi4gIE90aGVyd2lzZSwgb25seSB0aGUKKyAgIHdyaXRhYmxlIGFkZHJlc3MgY2FuIGJlIHByb3ZpZGVkIGhlcmUuICAqLwordm9pZAorZmZpX2Nsb3N1cmVfZnJlZSAodm9pZCAqcHRyKQoreworI2lmIEZGSV9DTE9TVVJFX0ZSRUVfQ09ERQorICBtc2VnbWVudHB0ciBzZWcgPSBzZWdtZW50X2hvbGRpbmdfY29kZSAoZ20sIHB0cik7CisKKyAgaWYgKHNlZykKKyAgICBwdHIgPSBzdWJfc2VnbWVudF9leGVjX29mZnNldCAocHRyLCBzZWcpOworI2VuZGlmCisKKyAgZGxmcmVlIChwdHIpOworfQorCisKKyNpZiBGRklfQ0xPU1VSRV9URVNUCisvKiBEbyBzb21lIGludGVybmFsIHNhbml0eSB0ZXN0aW5nIHRvIG1ha2Ugc3VyZSBhbGxvY2F0aW9uIGFuZAorICAgZGVhbGxvY2F0aW9uIG9mIHBhZ2VzIGFyZSB3b3JraW5nIGFzIGludGVuZGVkLiAgKi8KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnBbM107CisjZGVmaW5lIEdFVChpZHgsIGxlbikgZG8geyBwW2lkeF0gPSBkbG1hbGxvYyAobGVuKTsgcHJpbnRmICgiYWxsb2NhdGVkICV6aSBmb3IgcFslaV1cbiIsIChsZW4pLCAoaWR4KSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVChpZHgpIGRvIHsgcHJpbnRmICgiZnJlZWluZyBwWyVpXVxuIiwgKGlkeCkpOyBkbGZyZWUgKHBbaWR4XSk7IH0gd2hpbGUgKDApCisgIEdFVCAoMCwgbWFsbG9jX2dldHBhZ2VzaXplIC8gMik7CisgIEdFVCAoMSwgMiAqIG1hbGxvY19nZXRwYWdlc2l6ZSAtIDY0ICogc2l6ZW9mICh2b2lkKikpOworICBQVVQgKDEpOworICBHRVQgKDEsIDIgKiBtYWxsb2NfZ2V0cGFnZXNpemUpOworICBHRVQgKDIsIG1hbGxvY19nZXRwYWdlc2l6ZSAvIDIpOworICBQVVQgKDEpOworICBQVVQgKDApOworICBQVVQgKDIpOworICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBGRklfQ0xPU1VSRV9URVNUICovCisjIGVsc2UgLyogISBGRklfTU1BUF9FWEVDX1dSSVQgKi8KKworLyogT24gbWFueSBzeXN0ZW1zLCBtZW1vcnkgcmV0dXJuZWQgYnkgbWFsbG9jIGlzIHdyaXRhYmxlIGFuZAorICAgZXhlY3V0YWJsZSwgc28ganVzdCB1c2UgaXQuICAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQgKgorZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSkKK3sKKyAgaWYgKCFjb2RlKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVybiAqY29kZSA9IG1hbGxvYyAoc2l6ZSk7Cit9CisKK3ZvaWQKK2ZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQgKnB0cikKK3sKKyAgZnJlZSAocHRyKTsKK30KKworIyBlbmRpZiAvKiAhIEZGSV9NTUFQX0VYRUNfV1JJVCAqLworI2VuZGlmIC8qIEZGSV9DTE9TVVJFUyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGFyd2luL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGFyd2luL2ZmaXRhcmdldC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGMzMDhhLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Rhcndpbi9mZml0YXJnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgZm9yIE1hY09TWCBvbmx5LiBEaXNwYXRjaCB0byB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIGluY2x1ZGUKLSAqIGZpbGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgYXJjaGljdGVjdHVyZSAoaW5zdGVhZCBvZiByZWx5aW5nIG9uIGEgc3ltbGluawotICogY3JlYXRlZCBieSBjb25maWd1cmUpLiBUaGlzIG1ha2VzIGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGEgdW5pdmVyYWwgYmluYXJ5Ci0gKiBvZiBjdHlwZXMgaW4gb25lIGdvLgotICovCi0jaWYgZGVmaW5lZChfX2kzODZfXykKLQotI2lmbmRlZiBYODZfREFSV0lOCi0jZGVmaW5lIFg4Nl9EQVJXSU4KLSNlbmRpZgotI3VuZGVmIFBPV0VSUENfREFSV0lOCi0KLSNpbmNsdWRlICIuLi9zcmMveDg2L2ZmaXRhcmdldC5oIgotCi0jZWxpZiBkZWZpbmVkKF9fcHBjX18pCi0KLSNpZm5kZWYgUE9XRVJQQ19EQVJXSU4KLSNkZWZpbmUgUE9XRVJQQ19EQVJXSU4KLSNlbmRpZgotI3VuZGVmIFg4Nl9EQVJXSU4KLQotI2luY2x1ZGUgIi4uL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RlYnVnLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZGNmY2YKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kZWJ1Zy5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBkZWJ1Zy5jIC0gQ29weXJpZ2h0IChjKSAxOTk2IFJlZCBIYXQsIEluYy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBHZW5lcmFsIGRlYnVnZ2luZyByb3V0aW5lcyAqLworCit2b2lkIGZmaV9zdG9wX2hlcmUodm9pZCkKK3sKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorICAgICBQbGFjZSBhIGJyZWFrcG9pbnQgb24gZmZpX3N0b3BfaGVyZSB0byBiZSBub3RpZmllZCBvZgorICAgICBzaWduaWZpY2FudCBldmVudHMuICovCit9CisKKy8qIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHZpYSB0aGUgRkZJX0FTU0VSVCgpIG1hY3JvICovCisKK3ZvaWQgZmZpX2Fzc2VydChjaGFyICpleHByLCBjaGFyICpmaWxlLCBpbnQgbGluZSkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJBU1NFUlRJT04gRkFJTFVSRTogJXMgYXQgJXM6JWRcbiIsIGV4cHIsIGZpbGUsIGxpbmUpOworICBmZmlfc3RvcF9oZXJlKCk7CisgIGFib3J0KCk7Cit9CisKKy8qIFBlcmZvcm0gYSBzYW5pdHkgY2hlY2sgb24gYW4gZmZpX3R5cGUgc3RydWN0dXJlICovCisKK3ZvaWQgZmZpX3R5cGVfdGVzdChmZmlfdHlwZSAqYSwgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgIEZGSV9BU1NFUlRfQVQoYSAhPSBOVUxMLCBmaWxlLCBsaW5lKTsKKworICBGRklfQVNTRVJUX0FUKGEtPnR5cGUgPD0gRkZJX1RZUEVfTEFTVCwgZmlsZSwgbGluZSk7CisgIEZGSV9BU1NFUlRfQVQoYS0+dHlwZSA9PSBGRklfVFlQRV9WT0lEIHx8IGEtPnNpemUgPiAwLCBmaWxlLCBsaW5lKTsKKyAgRkZJX0FTU0VSVF9BVChhLT50eXBlID09IEZGSV9UWVBFX1ZPSUQgfHwgYS0+YWxpZ25tZW50ID4gMCwgZmlsZSwgbGluZSk7CisgIEZGSV9BU1NFUlRfQVQoYS0+dHlwZSAhPSBGRklfVFlQRV9TVFJVQ1QgfHwgYS0+ZWxlbWVudHMgIT0gTlVMTCwgZmlsZSwgbGluZSk7CisKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4M2M1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCkBAIC0wLDAgKzEsNTA5OSBAQAorLyoKKyAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5CisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0CisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKKworKiBWZXJzaW9uIDIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MTUgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisKKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAorICAgICAgICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworICAgICAgICAgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisKKyogUXVpY2tzdGFydAorCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgorICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PMyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwgb2YKKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbgorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzCisgIGNvbXBpbGUtdGltZSBhbmQgZHluYW1pYyB0dW5pbmcgb3B0aW9ucy4KKworICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoKKyAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuOC4zLmgKKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdAorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQorICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQgZm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0CisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cgorICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1dHRpbmcgYXQgdGhlIHBvaW50CisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQworICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcworICBtYWxsb2MgKGZvciBleGFtcGxlIGluIGxpbnV4KS4gWW91IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUKKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZAorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuCisKKyogVml0YWwgc3RhdGlzdGljczoKKworICBTdXBwb3J0ZWQgcG9pbnRlci9zaXplX3QgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcworICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcworICAgICAgIHNpemVfdCBhcyBhIHNpZ25lZCB0eXBlLCBvciBuZWVkIGl0IHRvIGJlIGEgZGlmZmVyZW50IHdpZHRoCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQorCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAoZGVmYXVsdCkKKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLgorICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIgdGhhbiB0aGlzCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuCisKKyAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgIDggYnl0ZXMgKGlmIDRieXRlIHNpemVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgcHRtYWxsb2MsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbQorICAgICAgIGEgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYy4gKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSkuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4KKworV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQKKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKQorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuICBTZWUKKyAgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgZ3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20KKyAgdmVyc2lvbiBvZiBNT1JFQ09SRS4KKworTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gdW5peAorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8uCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkKKyAgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pCisKK21hbGxvY19nZXRwYWdlc2l6ZSAgICAgICAgIGRlZmF1bHQ6IGRlcml2ZSBmcm9tIHN5c3RlbSBpbmNsdWRlcywgb3IgNDA5Ni4KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kCisgIHVzdWFsbHkgaXMpIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhpcyBpcyBpZ25vcmVkCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZworICBpbml0aWFsaXphdGlvbi4KKworVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yCisgIHN0YW1waW5nIGZvb3RlcnMuIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLgorCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxpbmZvIi4gVGhpcyBjYW4gYmUgYSBzaW1wbGUgd2F5CisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQKKyAgdGhvc2UgaW4gdGhpcyBmaWxlLgorCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QKKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgIGRlZmluZWQgYXMgImludCIgaW4gU1ZJRCBldGMsIGJ1dCBpcyBtb3JlIHVzZWZ1bGx5IGRlZmluZWQgYXMKKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQKKworUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkIAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsIAorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcyAKKyAgcmVhbGxvYyhwLCAwKS4KKworTEFDS1NfVU5JU1REX0gsIExBQ0tTX0ZDTlRMX0gsIExBQ0tTX1NZU19QQVJBTV9ILCBMQUNLU19TWVNfTU1BTl9ICitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gKK0xBQ0tTX1NURExJQl9IICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkIHVubGVzcyBvbiBXSU4zMgorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLgorCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSA2NEsuCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkKKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24KKyAgbW9zdCBzeXN0ZW1zIHdpdGggY29udGlndW91cyBNT1JFQ09SRSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UKKyAgdGhpcyB2YWx1ZSB0byBwcmV2ZW50IHN5c3RlbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgc28KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbgorICB0byBlaXRoZXIgcGFnZSBzaXplIG9yIHdpbjMyIHJlZ2lvbiBzaXplLiAgKE5vdGU6IEluIHByZXZpb3VzCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZAorICAiVE9QX1BBRCIpCisKK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkKKyAgVGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkgdG8ga2VlcCBiZWZvcmUKKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5CisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlCisgIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBzbG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbiBzb21ldGltZXMgYmUKKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXIKKyAgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieSByZWxlYXNpbmcgdGhpcyBtdWNoCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUKKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KKyAgUmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8gcnVuIGluCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGEKKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQKKyAgYW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzIHN0b3JhZ2UsIHBlcmhhcHMKKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbworICBkaXNhYmxlIHRyaW1taW5nIGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvIE1BWF9TSVpFX1QuIE5vdGUgdGhhdCB0aGUgdHJpY2sKKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdAorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0CisgIGhhdmUgdGhlIGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsIHNpbmNlIHRoYXQgbWVtb3J5CisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKworREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgICBkZWZhdWx0OiAyNTZLCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkKKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhCisgIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaAorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXAKKyAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdCB0aGV5IGNhbiBiZQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QKKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QKKyAgbm90IGRpcmVjdGx5OyB0aGUgc3lzdGVtIG1heSBqdXN0IHNvIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMKKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQKKyAgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMKKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZAorICBjaHVua3MsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90CisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyCisgIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAKKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4KKyAgZW1waXJpY2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdCBzeXN0ZW1zLiBZb3UgY2FuCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuCisKKyovCisKKyNpZm5kZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmICAvKiBfV0lOMzIgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMCAvKiBXSU5DRSBhbmQgc29tZSBvdGhlcnMgYXBwYXJlbnRseSBkb24ndCBjbGVhciAqLworI2VuZGlmICAvKiBXSU4zMiAqLworCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikKKy8qIE1hYyBPU1ggZG9jcyBhZHZpc2Ugbm90IHRvIHVzZSBzYnJrOyBpdCBzZWVtcyBiZXR0ZXIgdG8gdXNlIG1tYXAgKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2VuZGlmICAvKiBEQVJXSU4gKi8KKworI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLworI2VuZGlmICAvKiBMQUNLU19TWVNfVFlQRVNfSCAqLworCisvKiBUaGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgdmFsdWUgaGFzIGFsbCBiaXRzIHNldCAqLworI2RlZmluZSBNQVhfU0laRV9UICAgICAgICAgICAofihzaXplX3QpMCkKKworI2lmbmRlZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgQUJPUlQKKyNkZWZpbmUgQUJPUlQgIGFib3J0KCkKKyNlbmRpZiAgLyogQUJPUlQgKi8KKyNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQorI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisjZGVmaW5lIFBST0NFRURfT05fRVJST1IgMAorI2VuZGlmICAvKiBQUk9DRUVEX09OX0VSUk9SICovCisjaWZuZGVmIFVTRV9MT0NLUworI2RlZmluZSBVU0VfTE9DS1MgMAorI2VuZGlmICAvKiBVU0VfTE9DS1MgKi8KKyNpZm5kZWYgSU5TRUNVUkUKKyNkZWZpbmUgSU5TRUNVUkUgMAorI2VuZGlmICAvKiBJTlNFQ1VSRSAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZWxzZSAgIC8qIGxpbnV4ICovCisjZGVmaW5lIEhBVkVfTVJFTUFQIDAKKyNlbmRpZiAgLyogbGludXggKi8KKyNlbmRpZiAgLyogSEFWRV9NUkVNQVAgKi8KKyNpZm5kZWYgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCisjZGVmaW5lIE1BTExPQ19GQUlMVVJFX0FDVElPTiAgZXJybm8gPSBFTk9NRU07CisjZW5kaWYgIC8qIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAxCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWYgIUhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAwCisjZWxzZSAgIC8qICFIQVZFX01PUkVDT1JFICovCisjaWZuZGVmIE1PUkVDT1JFCisjZGVmaW5lIE1PUkVDT1JFIHNicmsKKyNlbmRpZiAgLyogTU9SRUNPUkUgKi8KKyNpZm5kZWYgTU9SRUNPUkVfQ09OVElHVU9VUworI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDEKKyNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2VuZGlmICAvKiBIQVZFX01PUkVDT1JFICovCisjaWZuZGVmIERFRkFVTFRfR1JBTlVMQVJJVFkKKyNpZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDApICAvKiAwIG1lYW5zIHRvIGNvbXB1dGUgaW4gaW5pdF9tcGFyYW1zICovCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoKHNpemVfdCk2NFUgKiAoc2l6ZV90KTEwMjRVKQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIERFRkFVTFRfR1JBTlVMQVJJVFkgKi8KKyNpZm5kZWYgREVGQVVMVF9UUklNX1RIUkVTSE9MRAorI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KTJVICogKHNpemVfdCkxMDI0VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2VuZGlmICAvKiBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICovCisjaWZuZGVmIERFRkFVTFRfTU1BUF9USFJFU0hPTEQKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAoKHNpemVfdCkyNTZVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogSEFWRV9NTUFQICovCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAqLworI2lmbmRlZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAKKyNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWZuZGVmIFVTRV9ERVZfUkFORE9NCisjZGVmaW5lIFVTRV9ERVZfUkFORE9NIDAKKyNlbmRpZiAgLyogVVNFX0RFVl9SQU5ET00gKi8KKyNpZm5kZWYgTk9fTUFMTElORk8KKyNkZWZpbmUgTk9fTUFMTElORk8gMAorI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLworI2lmbmRlZiBNQUxMSU5GT19GSUVMRF9UWVBFCisjZGVmaW5lIE1BTExJTkZPX0ZJRUxEX1RZUEUgc2l6ZV90CisjZW5kaWYgIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KKworLyoKKyAgbWFsbG9wdCB0dW5pbmcgb3B0aW9ucy4gIFNWSUQvWFBHIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXIKKyAgbnVtYmVycyBmb3IgbWFsbG9wdCwgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UKKyAgYXJlIHVzZWQgaW4gdGhpcyBtYWxsb2MsIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcworICBtYWxsb2MgZG9lcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKyovCisKKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQorI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbGxpbmZvIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KKyAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFuZAorICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gIFRoZSBtYWluCisgIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRoYXQgaXMgcmV0dXJuZWQgKGJ5LWNvcHkpCisgIGJ5IG1hbGxpbmZvKCkuICBUaGUgbWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhIGJ1bmNoIG9mIGZpZWxkcyB0aGF0CisgIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZiBtYWxsb2MuICBUaGVzZSBmaWVsZHMgYXJlCisgIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGggb3RoZXIgbnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mCisgIGludGVyZXN0LgorCisgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKKyAgbWFsbGluZm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYSBjb21wbGlhbnQgdmVyc2lvbiBpcworICBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRoZSBzYW1lIGZvciBtYWxsaW5mbygpIHRvCisgIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0LCBkZWZpbmVkIG9uIG1vc3QKKyAgc3lzdGVtcyB3aXRoIG1hbGxpbmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzIGludHMuIEJ1dCBzb21lIG90aGVycworICBkZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgZmllbGRzIHVzaW5nIGEKKyAgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwgeW91IE1VU1QgI2luY2x1ZGUgeW91cgorICBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ILgorKi8KKworLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCitzdHJ1Y3QgbWFsbGluZm8geworICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2lmICFPTkxZX01TUEFDRVMKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWNsYXJhdGlvbnMgb2YgcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBVU0VfRExfUFJFRklYCisjZGVmaW5lIGRsY2FsbG9jICAgICAgICAgICAgICAgY2FsbG9jCisjZGVmaW5lIGRsZnJlZSAgICAgICAgICAgICAgICAgZnJlZQorI2RlZmluZSBkbG1hbGxvYyAgICAgICAgICAgICAgIG1hbGxvYworI2RlZmluZSBkbG1lbWFsaWduICAgICAgICAgICAgIG1lbWFsaWduCisjZGVmaW5lIGRscmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworI2RlZmluZSBkbHZhbGxvYyAgICAgICAgICAgICAgIHZhbGxvYworI2RlZmluZSBkbHB2YWxsb2MgICAgICAgICAgICAgIHB2YWxsb2MKKyNkZWZpbmUgZGxtYWxsaW5mbyAgICAgICAgICAgICBtYWxsaW5mbworI2RlZmluZSBkbG1hbGxvcHQgICAgICAgICAgICAgIG1hbGxvcHQKKyNkZWZpbmUgZGxtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCBtYWxsb2NfbWF4X2Zvb3RwcmludAorI2RlZmluZSBkbGluZGVwZW5kZW50X2NhbGxvYyAgIGluZGVwZW5kZW50X2NhbGxvYworI2RlZmluZSBkbGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisjZW5kaWYgLyogVVNFX0RMX1BSRUZJWCAqLworCisKKy8qCisgIG1hbGxvYyhzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3IKKyAgbnVsbCBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgZXJybm8gaXMgc2V0IHRvIEVOT01FTQorICBvbiBBTlNJIEMgc3lzdGVtcy4KKworICBJZiBuIGlzIHplcm8sIG1hbGxvYyByZXR1cm5zIGEgbWluaW11bS1zaXplZCBjaHVuay4gKFRoZSBtaW5pbXVtCisgIHNpemUgaXMgMTYgYnl0ZXMgb24gbW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMzIgYnl0ZXMgb24gNjRiaXQKKyAgc3lzdGVtcy4pICBOb3RlIHRoYXQgc2l6ZV90IGlzIGFuIHVuc2lnbmVkIHR5cGUsIHNvIGNhbGxzIHdpdGgKKyAgYXJndW1lbnRzIHRoYXQgd291bGQgYmUgbmVnYXRpdmUgaWYgc2lnbmVkIGFyZSBpbnRlcnByZXRlZCBhcworICByZXF1ZXN0cyBmb3IgaHVnZSBhbW91bnRzIG9mIHNwYWNlLCB3aGljaCB3aWxsIG9mdGVuIGZhaWwuIFRoZQorICBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBuIGRpZmZlcnMgYWNyb3NzIHN5c3RlbXMsIGJ1dCBpcyBpbiBhbGwKKyAgY2FzZXMgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgdmFsdWUgb2YgYSBzaXplX3QuCisqLwordm9pZCogZGxtYWxsb2Moc2l6ZV90KTsKKworLyoKKyAgZnJlZSh2b2lkKiBwKQorICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5CisgIGFsbG9jYXRlZCB1c2luZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLgorICBJdCBoYXMgbm8gZWZmZWN0IGlmIHAgaXMgbnVsbC4gSWYgcCB3YXMgbm90IG1hbGxvY2VkIG9yIGFscmVhZHkKKyAgZnJlZWQsIGZyZWUocCkgd2lsbCBieSBkZWZhdWx0IGNhdXNlIHRoZSBjdXJyZW50IHByb2dyYW0gdG8gYWJvcnQuCisqLwordm9pZCAgZGxmcmVlKHZvaWQqKTsKKworLyoKKyAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZSBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCisgIHNldCB0byB6ZXJvLgorKi8KK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgcmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBkYXRhCisgIGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUpIGJ5dGVzLCBvciBudWxsCisgIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4KKworICBUaGUgcmV0dXJuZWQgcG9pbnRlciBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBwLiBUaGUgYWxnb3JpdGhtCisgIHByZWZlcnMgZXh0ZW5kaW5nIHAgaW4gbW9zdCBjYXNlcyB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQKKyAgZW1wbG95cyB0aGUgZXF1aXZhbGVudCBvZiBhIG1hbGxvYy1jb3B5LWZyZWUgc2VxdWVuY2UuCisKKyAgSWYgcCBpcyBudWxsLCByZWFsbG9jIGlzIGVxdWl2YWxlbnQgdG8gbWFsbG9jLgorCisgIElmIHNwYWNlIGlzIG5vdCBhdmFpbGFibGUsIHJlYWxsb2MgcmV0dXJucyBudWxsLCBlcnJubyBpcyBzZXQgKGlmIG9uCisgIEFOU0kpIGFuZCBwIGlzIE5PVCBmcmVlZC4KKworICBpZiBuIGlzIGZvciBmZXdlciBieXRlcyB0aGFuIGFscmVhZHkgaGVsZCBieSBwLCB0aGUgbmV3bHkgdW51c2VkCisgIHNwYWNlIGlzIGxvcHBlZCBvZmYgYW5kIGZyZWVkIGlmIHBvc3NpYmxlLiAgcmVhbGxvYyB3aXRoIGEgc2l6ZQorICBhcmd1bWVudCBvZiB6ZXJvIChyZSlhbGxvY2F0ZXMgYSBtaW5pbXVtLXNpemVkIGNodW5rLgorCisgIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2YgYWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rCisgIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLgorKi8KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqLCBzaXplX3QpOworCisvKgorICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQKKyAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4KKworICBUaGUgYWxpZ25tZW50IGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCisgIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgorICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QKKyAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9yIGxlc3MuCisKKyAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuCisqLwordm9pZCogZGxtZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gbWVtYWxpZ24ocGFnZXNpemUsIG4pLCB3aGVyZSBwYWdlc2l6ZSBpcyB0aGUgcGFnZQorICBzaXplIG9mIHRoZSBzeXN0ZW0uIElmIHRoZSBwYWdlc2l6ZSBpcyB1bmtub3duLCA0MDk2IGlzIHVzZWQuCisqLwordm9pZCogZGx2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9wdChpbnQgcGFyYW1ldGVyX251bWJlciwgaW50IHBhcmFtZXRlcl92YWx1ZSkKKyAgU2V0cyB0dW5hYmxlIHBhcmFtZXRlcnMgVGhlIGZvcm1hdCBpcyB0byBwcm92aWRlIGEKKyAgKHBhcmFtZXRlci1udW1iZXIsIHBhcmFtZXRlci12YWx1ZSkgcGFpci4gIG1hbGxvcHQgdGhlbiBzZXRzIHRoZQorICBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgYXJndW1lbnQgdmFsdWUgaWYgaXQgY2FuIChpLmUuLCBzbworICBsb25nIGFzIHRoZSB2YWx1ZSBpcyBtZWFuaW5nZnVsKSwgYW5kIHJldHVybnMgMSBpZiBzdWNjZXNzZnVsIGVsc2UKKyAgMC4gIFNWSUQvWFBHL0FOU0kgZGVmaW5lcyBmb3VyIHN0YW5kYXJkIHBhcmFtIG51bWJlcnMgZm9yIG1hbGxvcHQsCisgIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlIGFyZSB1c2UgaW4gdGhpcyBtYWxsb2MsCisgIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcyBtYWxsb2MgYWxzbyBzdXBwb3J0cyBvdGhlcgorICBvcHRpb25zIGluIG1hbGxvcHQuIFNlZSBiZWxvdyBmb3IgZGV0YWlscy4gIEJyaWVmbHksIHN1cHBvcnRlZAorICBwYXJhbWV0ZXJzIGFyZSBhcyBmb2xsb3dzIChsaXN0ZWQgZGVmYXVsdHMgYXJlIGZvciAidHlwaWNhbCIKKyAgY29uZmlndXJhdGlvbnMpLgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgIChNQVhfU0laRV9UIGRpc2FibGVzKQorICBNX0dSQU5VTEFSSVRZICAgICAgICAtMiAgICAgcGFnZSBzaXplICAgYW55IHBvd2VyIG9mIDIgPj0gcGFnZSBzaXplCisgIE1fTU1BUF9USFJFU0hPTEQgICAgIC0zICAgICAgMjU2KjEwMjQgICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpCisqLworaW50IGRsbWFsbG9wdChpbnQsIGludCk7CisKKy8qCisgIG1hbGxvY19mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcworICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLgorICBFdmVuIGlmIGxvY2tzIGFyZSBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwKKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpOworCisvKgorICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMKKyAgdmFsdWUgd2lsbCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBmb290cHJpbnQgaWYgZGVhbGxvY2F0ZWQgc3BhY2UKKyAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQKKyAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sCisgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkCisgIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQorICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodAorICBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKTsKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBwKTsKKworICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgeW91IGNhbiBhY3R1YWxseSB1c2UgaW4KKyAgYW4gYWxsb2NhdGVkIGNodW5rLCB3aGljaCBtYXkgYmUgbW9yZSB0aGFuIHlvdSByZXF1ZXN0ZWQgKGFsdGhvdWdoCisgIG9mdGVuIG5vdCkgZHVlIHRvIGFsaWdubWVudCBhbmQgbWluaW11bSBzaXplIGNvbnN0cmFpbnRzLgorICBZb3UgY2FuIHVzZSB0aGlzIG1hbnkgYnl0ZXMgd2l0aG91dCB3b3JyeWluZyBhYm91dAorICBvdmVyd3JpdGluZyBvdGhlciBhbGxvY2F0ZWQgb2JqZWN0cy4gVGhpcyBpcyBub3QgYSBwYXJ0aWN1bGFybHkgZ3JlYXQKKyAgcHJvZ3JhbW1pbmcgcHJhY3RpY2UuIG1hbGxvY191c2FibGVfc2l6ZSBjYW4gYmUgbW9yZSB1c2VmdWwgaW4KKyAgZGVidWdnaW5nIGFuZCBhc3NlcnRpb25zLCBmb3IgZXhhbXBsZToKKworICBwID0gbWFsbG9jKG4pOworICBhc3NlcnQobWFsbG9jX3VzYWJsZV9zaXplKHApID49IDI1Nik7CisqLworc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqKTsKKworLyoKKyAgbWFsbG9jX3N0YXRzKCk7CisgIFByaW50cyBvbiBzdGRlcnIgdGhlIGFtb3VudCBvZiBzcGFjZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0gKGJvdGgKKyAgdmlhIHNicmsgYW5kIG1tYXApLCB0aGUgbWF4aW11bSBhbW91bnQgKHdoaWNoIG1heSBiZSBtb3JlIHRoYW4KKyAgY3VycmVudCBpZiBtYWxsb2NfdHJpbSBhbmQvb3IgbXVubWFwIGdvdCBjYWxsZWQpLCBhbmQgdGhlIGN1cnJlbnQKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCB2aWEgbWFsbG9jIChvciByZWFsbG9jLCBldGMpIGJ1dCBub3QgeWV0CisgIGZyZWVkLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCwgbm90IHRoZQorICBudW1iZXIgcmVxdWVzdGVkLiBJdCB3aWxsIGJlIGxhcmdlciB0aGFuIHRoZSBudW1iZXIgcmVxdWVzdGVkCisgIGJlY2F1c2Ugb2YgYWxpZ25tZW50IGFuZCBib29ra2VlcGluZyBvdmVyaGVhZC4gQmVjYXVzZSBpdCBpbmNsdWRlcworICBhbGlnbm1lbnQgd2FzdGFnZSBhcyBiZWluZyBpbiB1c2UsIHRoaXMgZmlndXJlIG1heSBiZSBncmVhdGVyIHRoYW4KKyAgemVybyBldmVuIHdoZW4gbm8gdXNlci1sZXZlbCBjaHVua3MgYXJlIGFsbG9jYXRlZC4KKworICBUaGUgcmVwb3J0ZWQgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5IGNhbiBiZSBpbmFjY3VyYXRlIGlmCisgIGEgcHJvZ3JhbSBtYWtlcyBvdGhlciBjYWxscyB0byBzeXN0ZW0gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zCisgIChub3JtYWxseSBzYnJrKSBvdXRzaWRlIG9mIG1hbGxvYy4KKworICBtYWxsb2Nfc3RhdHMgcHJpbnRzIG9ubHkgdGhlIG1vc3QgY29tbW9ubHkgaW50ZXJlc3Rpbmcgc3RhdGlzdGljcy4KKyAgTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyBtYWxsaW5mby4KKyovCit2b2lkICBkbG1hbGxvY19zdGF0cyh2b2lkKTsKKworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisjaWYgTVNQQUNFUworCisvKgorICBtc3BhY2UgaXMgYW4gb3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGFuIGluZGVwZW5kZW50CisgIHJlZ2lvbiBvZiBzcGFjZSB0aGF0IHN1cHBvcnRzIG1zcGFjZV9tYWxsb2MsIGV0Yy4KKyovCit0eXBlZGVmIHZvaWQqIG1zcGFjZTsKKworLyoKKyAgY3JlYXRlX21zcGFjZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGluZGVwZW5kZW50IHNwYWNlIHdpdGggdGhlCisgIGdpdmVuIGluaXRpYWwgY2FwYWNpdHksIG9yLCBpZiAwLCB0aGUgZGVmYXVsdCBncmFudWxhcml0eSBzaXplLiAgSXQKKyAgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlIHRvIGNyZWF0ZSB0aGUKKyAgc3BhY2UuICBJZiBhcmd1bWVudCBsb2NrZWQgaXMgbm9uLXplcm8sIHRoZSBzcGFjZSB1c2VzIGEgc2VwYXJhdGUKKyAgbG9jayB0byBjb250cm9sIGFjY2Vzcy4gVGhlIGNhcGFjaXR5IG9mIHRoZSBzcGFjZSB3aWxsIGdyb3cKKyAgZHluYW1pY2FsbHkgYXMgbmVlZGVkIHRvIHNlcnZpY2UgbXNwYWNlX21hbGxvYyByZXF1ZXN0cy4gIFlvdSBjYW4KKyAgY29udHJvbCB0aGUgc2l6ZXMgb2YgaW5jcmVtZW50YWwgaW5jcmVhc2VzIG9mIHRoaXMgc3BhY2UgYnkKKyAgY29tcGlsaW5nIHdpdGggYSBkaWZmZXJlbnQgREVGQVVMVF9HUkFOVUxBUklUWSBvciBkeW5hbWljYWxseQorICBzZXR0aW5nIHdpdGggbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB2YWx1ZSkuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgZGVzdHJveV9tc3BhY2UgZGVzdHJveXMgdGhlIGdpdmVuIHNwYWNlLCBhbmQgYXR0ZW1wdHMgdG8gcmV0dXJuIGFsbAorICBvZiBpdHMgbWVtb3J5IGJhY2sgdG8gdGhlIHN5c3RlbSwgcmV0dXJuaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YKKyAgYnl0ZXMgZnJlZWQuIEFmdGVyIGRlc3RydWN0aW9uLCB0aGUgcmVzdWx0cyBvZiBhY2Nlc3MgdG8gYWxsIG1lbW9yeQorICB1c2VkIGJ5IHRoZSBzcGFjZSBiZWNvbWUgdW5kZWZpbmVkLgorKi8KK3NpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKTsKKworLyoKKyAgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgdXNlcyB0aGUgbWVtb3J5IHN1cHBsaWVkIGFzIHRoZSBpbml0aWFsIGJhc2UKKyAgb2YgYSBuZXcgbXNwYWNlLiBQYXJ0IChsZXNzIHRoYW4gMTI4KnNpemVvZihzaXplX3QpIGJ5dGVzKSBvZiB0aGlzCisgIHNwYWNlIGlzIHVzZWQgZm9yIGJvb2trZWVwaW5nLCBzbyB0aGUgY2FwYWNpdHkgbXVzdCBiZSBhdCBsZWFzdCB0aGlzCisgIGxhcmdlLiAoT3RoZXJ3aXNlIDAgaXMgcmV0dXJuZWQuKSBXaGVuIHRoaXMgaW5pdGlhbCBzcGFjZSBpcworICBleGhhdXN0ZWQsIGFkZGl0aW9uYWwgbWVtb3J5IHdpbGwgYmUgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLgorICBEZXN0cm95aW5nIHRoaXMgc3BhY2Ugd2lsbCBkZWFsbG9jYXRlIGFsbCBhZGRpdGlvbmFsbHkgYWxsb2NhdGVkCisgIHNwYWNlIChpZiBwb3NzaWJsZSkgYnV0IG5vdCB0aGUgaW5pdGlhbCBiYXNlLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9mcmVlIGJlaGF2ZXMgYXMgZnJlZSwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfZnJlZSBpcyBub3QgYWN0dWFsbHkgbmVlZGVkLgorICBmcmVlIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfZnJlZSBiZWNhdXNlIGZyZWVkIGNodW5rcyBmcm9tCisgIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZyBzcGFjZXMuCisqLwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pOworCisvKgorICBtc3BhY2VfcmVhbGxvYyBiZWhhdmVzIGFzIHJlYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX3JlYWxsb2MgaXMgbm90IGFjdHVhbGx5CisgIG5lZWRlZC4gIHJlYWxsb2MgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9yZWFsbG9jIGJlY2F1c2UKKyAgcmVhbGxvY2VkIGNodW5rcyBmcm9tIGFueSBzcGFjZSBhcmUgaGFuZGxlZCBieSB0aGVpciBvcmlnaW5hdGluZworICBzcGFjZXMuCisqLwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOworCisvKgorICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jb21hbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2Zvb3RwcmludCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV9tYXhfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmIC8qIE1TUEFDRVMgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworCisvKgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgVG8gbWFrZSBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBtYWxsb2MuaCBoZWFkZXIgZmlsZSwgY3V0IGV2ZXJ5dGhpbmcKKyAgYWJvdmUgdGhpcyBsaW5lLCBwdXQgaW50byBmaWxlIG1hbGxvYy5oLCBlZGl0IHRvIHN1aXQsIGFuZCAjaW5jbHVkZSBpdAorICBvbiB0aGUgbmV4dCBsaW5lLCBhcyB3ZWxsIGFzIGluIHByb2dyYW1zIHRoYXQgdXNlIHRoaXMgbWFsbG9jLgorICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyovCisKKy8qICNpbmNsdWRlICJtYWxsb2MuaCIgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gaW50ZXJuYWwgI2luY2x1ZGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoIGRpc2FibGUgOiA0MTQ2ICkgLyogbm8gInVuc2lnbmVkIiB3YXJuaW5ncyAqLworI2VuZGlmIC8qIF9NU0NfVkVSICovCisKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAvKiBmb3IgcHJpbnRpbmcgaW4gbWFsbG9jX3N0YXRzICovCisKKyNpZm5kZWYgTEFDS1NfRVJSTk9fSAorI2luY2x1ZGUgPGVycm5vLmg+ICAgICAgIC8qIGZvciBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNlbmRpZiAvKiBMQUNLU19FUlJOT19IICovCisjaWYgRk9PVEVSUworI2luY2x1ZGUgPHRpbWUuaD4gICAgICAgIC8qIGZvciBtYWdpYyBpbml0aWFsaXphdGlvbiAqLworI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgTEFDS1NfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAvKiBmb3IgYWJvcnQoKSAqLworI2VuZGlmIC8qIExBQ0tTX1NURExJQl9IICovCisjaWZkZWYgREVCVUcKKyNpZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBhc3NlcnQoeCkgaWYoISh4KSkgQUJPUlQKKyNlbHNlIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNlbHNlICAvKiBERUJVRyAqLworI2RlZmluZSBhc3NlcnQoeCkKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmbmRlZiBMQUNLU19TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgIC8qIGZvciBtZW1zZXQgZXRjICovCisjZW5kaWYgIC8qIExBQ0tTX1NUUklOR19IICovCisjaWYgVVNFX0JVSUxUSU5fRkZTCisjaWZuZGVmIExBQ0tTX1NUUklOR1NfSAorI2luY2x1ZGUgPHN0cmluZ3MuaD4gICAgIC8qIGZvciBmZnMgKi8KKyNlbmRpZiAvKiBMQUNLU19TVFJJTkdTX0ggKi8KKyNlbmRpZiAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KKyNpZiBIQVZFX01NQVAKKyNpZm5kZWYgTEFDS1NfU1lTX01NQU5fSAorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovCisjZW5kaWYgLyogTEFDS1NfU1lTX01NQU5fSCAqLworI2lmbmRlZiBMQUNLU19GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZiAvKiBMQUNLU19GQ05UTF9IICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisjaWYgSEFWRV9NT1JFQ09SRQorI2lmbmRlZiBMQUNLU19VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgICAgLyogZm9yIHNicmsgKi8KKyNlbHNlIC8qIExBQ0tTX1VOSVNURF9IICovCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pICYmICFkZWZpbmVkKF9fT3BlbkJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorZXh0ZXJuIHZvaWQqICAgICBzYnJrKHB0cmRpZmZfdCk7CisjZW5kaWYgLyogRnJlZUJTRCBldGMgKi8KKyNlbmRpZiAvKiBMQUNLU19VTklTVERfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisjaWZuZGVmIFdJTjMyCisjaWZuZGVmIG1hbGxvY19nZXRwYWdlc2l6ZQorIyAgaWZkZWYgX1NDX1BBR0VTSVpFICAgICAgICAgLyogc29tZSBTVlI0IHN5c3RlbXMgb21pdCBhbiB1bmRlcnNjb3JlICovCisjICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFCisjICAgICAgZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX1NDX1BBR0VfU0laRQorIyAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKKyMgIGVsc2UKKyMgICAgaWYgZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQorICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKKyMgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KKyMgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICAgIGVsc2UKKyMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFSQU1fSAorIyAgICAgICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICAgICAgIGVuZGlmCisjICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgRVhFQ19QQUdFU0laRQorIyAgICAgICAgZWxzZQorIyAgICAgICAgICBpZmRlZiBOQlBHCisjICAgICAgICAgICAgaWZuZGVmIENMU0laRQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBHCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgaWZkZWYgTkJQQworIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQorIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1ZXNzICovCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKChzaXplX3QpNDA5NlUpCisjICAgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVuZGlmCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhZnRvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFRXT19TSVpFX1RfU0laRVMgICAgKFNJWkVfVF9TSVpFPDwxKQorI2RlZmluZSBGT1VSX1NJWkVfVF9TSVpFUyAgIChTSVpFX1RfU0laRTw8MikKKyNkZWZpbmUgU0lYX1NJWkVfVF9TSVpFUyAgICAoRk9VUl9TSVpFX1RfU0laRVMrVFdPX1NJWkVfVF9TSVpFUykKKyNkZWZpbmUgSEFMRl9NQVhfU0laRV9UICAgICAoTUFYX1NJWkVfVCAvIDJVKQorCisvKiBUaGUgYml0IG1hc2sgdmFsdWUgY29ycmVzcG9uZGluZyB0byBNQUxMT0NfQUxJR05NRU5UICovCisjZGVmaW5lIENIVU5LX0FMSUdOX01BU0sgICAgKE1BTExPQ19BTElHTk1FTlQgLSBTSVpFX1RfT05FKQorCisvKiBUcnVlIGlmIGFkZHJlc3MgYSBoYXMgYWNjZXB0YWJsZSBhbGlnbm1lbnQgKi8KKyNkZWZpbmUgaXNfYWxpZ25lZChBKSAgICAgICAoKChzaXplX3QpKChBKSkgJiAoQ0hVTktfQUxJR05fTUFTSykpID09IDApCisKKy8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gb2Zmc2V0IGFuIGFkZHJlc3MgdG8gYWxpZ24gaXQgKi8KKyNkZWZpbmUgYWxpZ25fb2Zmc2V0KEEpXAorICgoKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk/IDAgOlwKKyAgKChNQUxMT0NfQUxJR05NRU5UIC0gKChzaXplX3QpKEEpICYgQ0hVTktfQUxJR05fTUFTSykpICYgQ0hVTktfQUxJR05fTUFTSykpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1NQVAgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBJZiBIQVZFX01PUkVDT1JFIG9yIEhBVkVfTU1BUCBhcmUgZmFsc2UsIHdlIGp1c3QgZGVmaW5lIGNhbGxzIGFuZAorICAgY2hlY2tzIHRvIGZhaWwgc28gY29tcGlsZXIgb3B0aW1pemVyIGNhbiBkZWxldGUgY29kZSByYXRoZXIgdGhhbgorICAgdXNpbmcgc28gbWFueSAiI2lmInMuCisqLworCisKKy8qIE1PUkVDT1JFIGFuZCBNTUFQIG11c3QgcmV0dXJuIE1GQUlMIG9uIGZhaWx1cmUgKi8KKyNkZWZpbmUgTUZBSUwgICAgICAgICAgICAgICAgKCh2b2lkKikoTUFYX1NJWkVfVCkpCisjZGVmaW5lIENNRkFJTCAgICAgICAgICAgICAgICgoY2hhciopKE1GQUlMKSkgLyogZGVmaW5lZCBmb3IgY29udmVuaWVuY2UgKi8KKworI2lmICFIQVZFX01NQVAKKyNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgKFNJWkVfVF9aRVJPKQorI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAoU0laRV9UX1pFUk8pCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIE1GQUlMCisjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgICgtMSkKKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgTUZBSUwKKworI2Vsc2UgLyogSEFWRV9NTUFQICovCisjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgIChTSVpFX1RfT05FKQorI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAoU0laRV9UX09ORSkKKworI2lmbmRlZiBXSU4zMgorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICBtdW5tYXAoKGEpLCAocykpCisjZGVmaW5lIE1NQVBfUFJPVCAgICAgICAgICAgIChQUk9UX1JFQUR8UFJPVF9XUklURSkKKyNpZiAhZGVmaW5lZChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkKE1BUF9BTk9OKQorI2RlZmluZSBNQVBfQU5PTllNT1VTICAgICAgICBNQVBfQU5PTgorI2VuZGlmIC8qIE1BUF9BTk9OICovCisjaWZkZWYgTUFQX0FOT05ZTU9VUworI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUykKKyNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIENBTExfTU1BUChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisgICAgICAgICAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKKyAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkgOiBcCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgIENBTExfTU1BUChzKQorI2Vsc2UgLyogV0lOMzIgKi8KKworLyogV2luMzIgTU1BUCB2aWEgVmlydHVhbEFsbG9jICovCitzdGF0aWMgdm9pZCogd2luMzJtbWFwKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRXxNRU1fQ09NTUlULCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKTsKKyAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7Cit9CisKKy8qIEZvciBkaXJlY3QgTU1BUCwgdXNlIE1FTV9UT1BfRE9XTiB0byBtaW5pbWl6ZSBpbnRlcmZlcmVuY2UgKi8KK3N0YXRpYyB2b2lkKiB3aW4zMmRpcmVjdF9tbWFwKHNpemVfdCBzaXplKSB7CisgIHZvaWQqIHB0ciA9IFZpcnR1YWxBbGxvYygwLCBzaXplLCBNRU1fUkVTRVJWRXxNRU1fQ09NTUlUfE1FTV9UT1BfRE9XTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBR0VfRVhFQ1VURV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSBwdHI7CisgIHdoaWxlIChzaXplKSB7CisgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAorICAgICAgICBtaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIHdpbjMybW1hcChzKQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworI2lmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTU9SRUNPUkUoUykKKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKyNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKKworLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCisjZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBhcmUgdXAgdG8gdHdvIGdsb2JhbCBsb2NrczoKKworICAqIElmIEhBVkVfTU9SRUNPUkUsIG1vcmVjb3JlX211dGV4IHByb3RlY3RzIHNlcXVlbmNlcyBvZiBjYWxscyB0bworICAgIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMgdHdvIGNhbGxzLCB0aGF0IHNob3VsZAorICAgIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyIHRocmVhZHMuICBUaGlzIGRvZXMgbm90CisgICAgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBieSBvdGhlciB0aHJlYWRzIG5vdAorICAgIHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0byBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbgorICAgIGludGVyZmVyZW5jZS4KKworICAqIG1hZ2ljX2luaXRfbXV0ZXggZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyCisgICAgdW5pcXVlIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCisqLworCisjaWZuZGVmIFdJTjMyCisvKiBCeSBkZWZhdWx0IHVzZSBwb3NpeCBsb2NrcyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNkZWZpbmUgTUxPQ0tfVCBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF9pbml0KGwsIE5VTEwpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsKQorCisjaWYgSEFWRV9NT1JFQ09SRQorc3RhdGljIE1MT0NLX1QgbW9yZWNvcmVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKyNlbHNlIC8qIFdJTjMyICovCisvKgorICAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGhhdmUgYm91bmRlZCB0aW1lcywgYW5kIHRoZXJlCisgICBhcmUgbm8gcmVjdXJzaXZlIGxvY2sgY2FsbHMsIHdlIGNhbiB1c2Ugc2ltcGxlIHNwaW5sb2Nrcy4KKyovCisKKyNkZWZpbmUgTUxPQ0tfVCBsb25nCitzdGF0aWMgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgZm9yICg7OykgeworI2lmZGVmIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcgorICAgIGlmICghSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2Uoc2wsIDEsIDApKQorICAgICAgcmV0dXJuIDA7CisjZWxzZSAgLyogVXNlIG9sZGVyIHZvaWQqIHZlcnNpb24gKi8KKyAgICBpZiAoIUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCh2b2lkKiopc2wsICh2b2lkKikxLCAodm9pZCopMCkpCisgICAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIgKi8KKyAgICBTbGVlcCAoMCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Cit9CisKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgKihsKT0wCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICB3aW4zMl9yZWxlYXNlX2xvY2sobCkKKyNpZiBIQVZFX01PUkVDT1JFCitzdGF0aWMgTUxPQ0tfVCBtb3JlY29yZV9tdXRleDsKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCitzdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4OworI2VuZGlmIC8qIFdJTjMyICovCisKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkgICAgQUNRVUlSRV9MT0NLKCZtb3JlY29yZV9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpICAgIFJFTEVBU0VfTE9DSygmbW9yZWNvcmVfbXV0ZXgpOworI2Vsc2UgLyogVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRSAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rCisgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoKKworICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueQorICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLAorICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcgorICBpbnVzZSBjaHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgorCisgIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkCisgIGFzIHRoZSBwcmV2X2Zvb3Qgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvCisgIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCisgIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuCisKKyAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCisKKyAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcgaXMgdGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwKKyAgICAgICAgdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorICAgICAgICBzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisgICAgICAgIG5vIG90aGVyIGNodW5rIGlzIGF2YWlsYWJsZSwgYW5kIGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlCisgICAgICAgIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisgICAgICAgIHRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorICAgICAgICBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsuICBUaGUgdG9wIGNodW5rCisgICAgICAgIGRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKyAgICAgICAgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorICAgICAgICBzcGFjZSBpcyBzdGlsbCBhbGxvY2F0ZWQgZm9yIGl0IChUT1BfRk9PVF9TSVpFKSB0byBlbmFibGUKKyAgICAgICAgc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorICAgICAgICAoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorICAgICAgICBQSU5VU0VfQklUIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQKKyAgICAgICAgb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworICAgICAgICBhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorICAgICAgICByZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZAorICAgICAgICBjaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisgICAgICAgIGZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihJTlVTRV9CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5JTlVTRV9CSVRTKSkpCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQorCisjZGVmaW5lIGlzX21tYXBwZWQocClcCisgICghKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpICYmICgocCktPnByZXZfZm9vdCAmIElTX01NQVBQRURfQklUKSkKKworLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLworI2RlZmluZSBvdmVyaGVhZF9mb3IocClcCisgKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkKKworLyogUmV0dXJuIHRydWUgaWYgbWFsbG9jZWQgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IGNsZWFyZWQgKi8KKyNpZiBNTUFQX0NMRUFSUworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpCisjZWxzZSAvKiBNTUFQX0NMRUFSUyAqLworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkKKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXIKKyAgbGlzdHMgb3IgdHJlZXMuCisKKyAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sKKyAgbGlrZSB0aGlzOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIEVhY2ggdHJlZSBob2xkaW5nIHRyZWVub2RlcyBpcyBhIHRyZWUgb2YgdW5pcXVlIGNodW5rIHNpemVzLiAgQ2h1bmtzCisgIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5CisgIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQorICBhY3R1YWxseSBpbiB0aGUgdHJlZS4gIChUcmVlIG1lbWJlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBub24tbnVsbAorICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlCisgIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQKKyAgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgZmQvYmsgcG9pbnRlcnMgb2Ygc21hbGwgY2h1bmtzLgorCisgIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQorICBzbWFsbGVzdCBpcyAweDEwMCA8PSB4IDwgMHgxODApLCB3aGljaCBpcyBpcyBkaXZpZGVkIGluIGhhbGYgYXQgZWFjaAorICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwCisgIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyCisgIGhhbGYgKDB4MTQwIDw9IHggPCAweDE4MCkgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsCisgIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuCisKKyAgVXNpbmcgdGhlc2UgcnVsZXMsIGVhY2ggbm9kZSdzIGxlZnQgc3VidHJlZSBjb250YWlucyBhbGwgc21hbGxlcgorICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaAorICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlCisgIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiB0aGUgc3VidHJlZSBzaXplcyBpcyBiYXNlZCBvbiB0cmllIHJlbGF0aW9uLikKKyAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUKKyAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZworICBydWxlcyBwZXJtaXQgYSBub2RlIHRvIGJlIHJlcGxhY2VkIGJ5IGFueSBsZWFmIGJlbG93IGl0LgorCisgIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0CisgIGFsbG9jYXRvcikgY2FuIGJlIGZvdW5kIGJ5IHdhbGtpbmcgYSBwYXRoIHRvIHRoZSBsZWZ0bW9zdCBsZWFmIGluCisgIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkCisgIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkCisgIHBvaW50ZXIgYW55IHRpbWUgdGhlIGxlZnQgb25lIGlzIG51bGwsIHVudGlsIHdlIHJlYWNoIGEgbGVhZiB3aXRoCisgIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUKKyAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4KKworICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzCisgIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluCisgIGJpbnMuIFVuZGVyIGN1cnJlbnQgYmluIGNhbGN1bGF0aW9ucywgdGhpcyByYW5nZXMgZnJvbSA2IHVwIHRvIDIxCisgIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UKKyAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLgorKi8KKworc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKKyAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGZkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGJrOworCisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogY2hpbGRbMl07CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogcGFyZW50OworICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0Y2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLworCisvKiBBIGxpdHRsZSBoZWxwZXIgbWFjcm8gZm9yIHRyZWVzICovCisjZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBFYWNoIG1hbGxvYyBzcGFjZSBtYXkgaW5jbHVkZSBub24tY29udGlndW91cyBzZWdtZW50cywgaGVsZCBpbiBhCisgIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlCisgIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBzcGFjZS4gTGFyZ2UgY2h1bmtzIHRoYXQgYXJlIGRpcmVjdGx5IGFsbG9jYXRlZCBieSBtbWFwIGFyZSBub3QKKyAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQKKyAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4KKworICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQorICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzCisgIGFkamFjZW50IHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuICBNT1JFQ09SRSBub3JtYWxseSBjb250aWd1b3VzbHkKKyAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LAorICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMKKyAgdXNlZCBwcmVmZXJlbnRpYWxseSB0byBNTUFQIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlIC0tIHNlZQorICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlCisgIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzCisgIGltcGxlbWVudGF0aW9ucyBvZiB1bml4IG1tYXAsIG9yIGRpc3Rpbmd1aXNoIHJlc2VydmluZyBmcm9tCisgIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0CisgIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbworICBiZXR0ZXIgdGhhbiB0aGlzIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vIGdlbmVyYWwgc2NoZW1lIHNlZW1zCisgIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLgorCisgIE1hbmFnZW1lbnQgZW50YWlscyBhIHNpbXBsZXIgdmFyaWFudCBvZiB0aGUgY29uc29saWRhdGlvbiBzY2hlbWUKKyAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMKKyAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsCisgIHRoZXJlIGFyZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byBjaHVuayBjb25zb2xpZGF0aW9uIHRoYXQgbW9zdGx5CisgIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50CisgIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQorICBkb24ndCBleHBlY3QgdG8gaGF2ZSBodWdlIG51bWJlcnMgb2Ygc2VnbWVudHM6CisKKyAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQKKyAgICB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbmRleCB0aGVzZSwgYnV0IGlzIG5vdCB3b3J0aCB0aGUgZXh0cmEKKyAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pCisgICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdAorICAgIG1lbW9yeTsgaWYgdGhleSBjYW5ub3QgYmUgcHJlcGVuZGVkIHRvIG90aGVycywgdGhleSBhcmUgaGVsZCBpbgorICAgIGRpZmZlcmVudCBzZWdtZW50cy4KKworICBFeGNlcHQgZm9yIHRoZSB0b3AtbW9zdCBzZWdtZW50IG9mIGFuIG1zdGF0ZSwgZWFjaCBzZWdtZW50IHJlY29yZAorICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZworICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQorICBjb250YWluaW5nIG1zdGF0ZS4KKworICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6CisgICogSWYgRVhURVJOX0JJVCBzZXQsIHRoZW4gd2UgZGlkIG5vdCBhbGxvY2F0ZSB0aGlzIHNlZ21lbnQsCisgICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuCisgICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkCisgICAgaW50byBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZS4pCisgICogSWYgSVNfTU1BUFBFRF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKKyAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAorICAgIHVzaW5nIG11bm1hcC4KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCisgICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyovCisKK3N0cnVjdCBtYWxsb2Nfc2VnbWVudCB7CisgIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisjaWYgRkZJX01NQVBfRVhFQ19XUklUCisgIC8qIFRoZSBtbWFwIG1hZ2ljIGlzIHN1cHBvc2VkIHRvIHN0b3JlIHRoZSBhZGRyZXNzIG9mIHRoZSBleGVjdXRhYmxlCisgICAgIHNlZ21lbnQgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSByZXF1ZXN0ZWQgYmxvY2suICAqLworCisjIGRlZmluZSBtbWFwX2V4ZWNfb2Zmc2V0KGIscykgKCoocHRyZGlmZl90KikoKGIpKyhzKS1zaXplb2YocHRyZGlmZl90KSkpCisKKyAgLyogV2UgY2FuIG9ubHkgbWVyZ2Ugc2VnbWVudHMgaWYgdGhlaXIgY29ycmVzcG9uZGluZyBleGVjdXRhYmxlCisgICAgIHNlZ21lbnRzIGFyZSBhdCBpZGVudGljYWwgb2Zmc2V0cy4gICovCisjIGRlZmluZSBjaGVja19zZWdtZW50X21lcmdlKFMsYixzKSBcCisgIChtbWFwX2V4ZWNfb2Zmc2V0KChiKSwocykpID09IChTKS0+ZXhlY19vZmZzZXQpCisKKyMgZGVmaW5lIGFkZF9zZWdtZW50X2V4ZWNfb2Zmc2V0KHAsUykgKChjaGFyKikocCkgKyAoUyktPmV4ZWNfb2Zmc2V0KQorIyBkZWZpbmUgc3ViX3NlZ21lbnRfZXhlY19vZmZzZXQocCxTKSAoKGNoYXIqKShwKSAtIChTKS0+ZXhlY19vZmZzZXQpCisKKyAgLyogVGhlIHJlbW92YWwgb2Ygc2ZsYWdzIG9ubHkgd29ya3Mgd2l0aCBIQVZFX01PUkVDT1JFID09IDAuICAqLworCisjIGRlZmluZSBnZXRfc2VnbWVudF9mbGFncyhTKSAgIChJU19NTUFQUEVEX0JJVCkKKyMgZGVmaW5lIHNldF9zZWdtZW50X2ZsYWdzKFMsdikgXAorICAoKCh2KSAhPSBJU19NTUFQUEVEX0JJVCkgPyAoQUJPUlQsICh2KSkgOgkJCQlcCisgICAoKChTKS0+ZXhlY19vZmZzZXQgPQkJCQkJCQlcCisgICAgIG1tYXBfZXhlY19vZmZzZXQoKFMpLT5iYXNlLCAoUyktPnNpemUpKSwJCQkJXAorICAgIChtbWFwX2V4ZWNfb2Zmc2V0KChTKS0+YmFzZSArIChTKS0+ZXhlY19vZmZzZXQsIChTKS0+c2l6ZSkgIT0JXAorICAgICAoUyktPmV4ZWNfb2Zmc2V0KSA/IChBQk9SVCwgKHYpKSA6CQkJCQlcCisgICAobW1hcF9leGVjX29mZnNldCgoUyktPmJhc2UsIChTKS0+c2l6ZSkgPSAwKSwgKHYpKSkKKworICAvKiBXZSB1c2UgYW4gb2Zmc2V0IGhlcmUsIGluc3RlYWQgb2YgYSBwb2ludGVyLCBiZWNhdXNlIHRoZW4sIHdoZW4KKyAgICAgYmFzZSBjaGFuZ2VzLCB3ZSBkb24ndCBoYXZlIHRvIG1vZGlmeSB0aGlzLiAgT24gYXJjaGl0ZWN0dXJlcworICAgICB3aXRoIHNlZ21lbnRlZCBhZGRyZXNzZXMsIHRoaXMgbWlnaHQgbm90IHdvcmsuICAqLworICBwdHJkaWZmX3QgICAgZXhlY19vZmZzZXQ7CisjZWxzZQorCisjIGRlZmluZSBnZXRfc2VnbWVudF9mbGFncyhTKSAgICgoUyktPnNmbGFncykKKyMgZGVmaW5lIHNldF9zZWdtZW50X2ZsYWdzKFMsdikgKChTKS0+c2ZsYWdzID0gKHYpKQorIyBkZWZpbmUgY2hlY2tfc2VnbWVudF9tZXJnZShTLGIscykgKDEpCisKKyAgZmxhZ190ICAgICAgIHNmbGFnczsgICAgICAgICAgIC8qIG1tYXAgYW5kIGV4dGVybiBmbGFnICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgaXNfbW1hcHBlZF9zZWdtZW50KFMpICAoZ2V0X3NlZ21lbnRfZmxhZ3MoUykgJiBJU19NTUFQUEVEX0JJVCkKKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoZ2V0X3NlZ21lbnRfZmxhZ3MoUykgJiBFWFRFUk5fQklUKQorCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAgbXNlZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbXNlZ21lbnRwdHI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBBIG1hbGxvY19zdGF0ZSBob2xkcyBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIGZvciBhIHNwYWNlLgorICAgVGhlIG1haW4gZmllbGRzIGFyZToKKworICBUb3AKKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcworICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMKKyAgICB0b3BzaXplK1RPUF9GT09UX1NJWkUsIHdoaWNoIGluY2x1ZGVzIHNwYWNlIHJlc2VydmVkIGZvciBhZGRpbmcKKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzCisgICAgY2FjaGVkIGZyb20gbXBhcmFtcyBpbiB0cmltX2NoZWNrLCBleGNlcHQgdGhhdCBpdCBpcyBkaXNhYmxlZCBpZgorICAgIGFuIGF1dG90cmltIGZhaWxzLgorCisgIERlc2lnbmF0ZWQgdmljdGltIChkdikKKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0CisgICAgcmVjZW50bHkgdG8gc2VydmljZSBhbm90aGVyIHNtYWxsIHJlcXVlc3QuICBJdHMgc2l6ZSBpcyBjYWNoZWQgaW4KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdAorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLgorCisgIFNtYWxsQmlucworICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MKKyAgICB3aXRoIHNpemVzIGxlc3MgdGhhbiBNSU5fTEFSR0VfU0laRSBieXRlcy4gRWFjaCBiaW4gY29udGFpbnMKKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkKKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsKKyAgICBwb2ludGluZyB0byB0aGUgcmVhbCBmaXJzdCBub2RlLCBpZiBpdCBleGlzdHMgKGVsc2UgcG9pbnRpbmcgdG8KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQKKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlCisgICAgcmVwb3NpdGlvbmluZyB0cmlja3MgdG8gdHJlYXQgdGhlc2UgYXMgdGhlIGZpZWxkcyBvZiBhIGNodW5rLgorCisgIFRyZWVCaW5zCisgICAgVHJlZWJpbnMgYXJlIHBvaW50ZXJzIHRvIHRoZSByb290cyBvZiB0cmVlcyBob2xkaW5nIGEgcmFuZ2Ugb2YKKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZworICAgIGxhcmdlci4KKworICBCaW4gbWFwcworICAgIFRoZXJlIGlzIG9uZSBiaXQgbWFwIGZvciBzbWFsbCBiaW5zICgic21hbGxtYXAiKSBhbmQgb25lIGZvcgorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZAorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkCisgICAgYmluLWJ5LWJpbiBzZWFyY2hpbmcgLS0gbmVhcmx5IGFsbCAic2VhcmNoIiBpcyBkb25lIHdpdGhvdXQgZXZlcgorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4KKyAgICBGb3IgYSBnb29kIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGJpdC1iYXNlZCB0ZWNobmlxdWVzIHVzZWQKKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZAorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQorICAgIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgYnJhbmNoaW5lc3Mgb2YgcGF0aHMgdGhyb3VnaCBtYWxsb2MgZXRjLCBhcworICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uCisKKyAgU2VnbWVudHMKKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZAorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4KKworICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQKKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20KKyAgICBNT1JFQ09SRSBvciBNTUFQLiBBdHRlbXB0ZWQgZnJlZXMgYW5kIHJlYWxsb2NzIG9mIGFueSBhZGRyZXNzIGxlc3MKKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4KKworICBNYWdpYyB0YWcKKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4KKworICBGbGFncworICAgIEJpdHMgcmVjb3JkaW5nIHdoZXRoZXIgdG8gdXNlIE1NQVAsIGxvY2tzLCBvciBjb250aWd1b3VzIE1PUkVDT1JFCisKKyAgU3RhdGlzdGljcworICAgIEVhY2ggc3BhY2Uga2VlcHMgdHJhY2sgb2YgY3VycmVudCBhbmQgbWF4aW11bSBzeXN0ZW0gbWVtb3J5CisgICAgb2J0YWluZWQgdmlhIE1PUkVDT1JFIG9yIE1NQVAuCisKKyAgTG9ja2luZworICAgIElmIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCB0aGUgIm11dGV4IiBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZAorICAgIGFyb3VuZCBldmVyeSBwdWJsaWMgY2FsbCB1c2luZyB0aGlzIG1zcGFjZS4KKyovCisKKy8qIEJpbiB0eXBlcywgd2lkdGhzIGFuZCBzaXplcyAqLworI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQorI2RlZmluZSBTTUFMTEJJTl9TSElGVCAgICAoM1UpCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpCisjZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIChTSVpFX1RfT05FIDw8IFRSRUVCSU5fU0hJRlQpCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkKKworc3RydWN0IG1hbGxvY19zdGF0ZSB7CisgIGJpbm1hcF90ICAgc21hbGxtYXA7CisgIGJpbm1hcF90ICAgdHJlZW1hcDsKKyAgc2l6ZV90ICAgICBkdnNpemU7CisgIHNpemVfdCAgICAgdG9wc2l6ZTsKKyAgY2hhciogICAgICBsZWFzdF9hZGRyOworICBtY2h1bmtwdHIgIGR2OworICBtY2h1bmtwdHIgIHRvcDsKKyAgc2l6ZV90ICAgICB0cmltX2NoZWNrOworICBzaXplX3QgICAgIG1hZ2ljOworICBtY2h1bmtwdHIgIHNtYWxsYmluc1soTlNNQUxMQklOUysxKSoyXTsKKyAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOworICBzaXplX3QgICAgIGZvb3RwcmludDsKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLgorKi8KKworc3RydWN0IG1hbGxvY19wYXJhbXMgeworICBzaXplX3QgbWFnaWM7CisgIHNpemVfdCBwYWdlX3NpemU7CisgIHNpemVfdCBncmFudWxhcml0eTsKKyAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOworICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7CisgIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOworCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fOworI2RlZmluZSBnbSAgICAgICAgICAgICAgICAgKCZfZ21fKQorI2RlZmluZSBpc19nbG9iYWwoTSkgICAgICAgKChNKSA9PSAmX2dtXykKKyNkZWZpbmUgaXNfaW5pdGlhbGl6ZWQoTSkgICgoTSktPnRvcCAhPSAwKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzeXN0ZW0gYWxsb2Mgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBPcGVyYXRpb25zIG9uIG1mbGFncyAqLworCisjZGVmaW5lIHVzZV9sb2NrKE0pICAgICAgICAgICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9MT0NLX0JJVCkKKyNkZWZpbmUgZW5hYmxlX2xvY2soTSkgICAgICAgICgoTSktPm1mbGFncyB8PSAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBkaXNhYmxlX2xvY2soTSkgICAgICAgKChNKS0+bWZsYWdzICY9IH5VU0VfTE9DS19CSVQpCisKKyNkZWZpbmUgdXNlX21tYXAoTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX01NQVBfQklUKQorI2RlZmluZSBlbmFibGVfbW1hcChNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGRpc2FibGVfbW1hcChNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9NTUFQX0JJVCkKKworI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKworI2RlZmluZSBzZXRfbG9jayhNLEwpXAorICgoTSktPm1mbGFncyA9IChMKT9cCisgICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOlwKKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUpKSAmIH4obXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkKKworLyogZ3JhbnVsYXJpdHktYWxpZ24gYSBzaXplICovCisjZGVmaW5lIGdyYW51bGFyaXR5X2FsaWduKFMpXAorICAoKChTKSArIChtcGFyYW1zLmdyYW51bGFyaXR5KSkgJiB+KG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkKKworI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXAorICAoKGNoYXIqKShBKSA+PSBTLT5iYXNlICYmIChjaGFyKikoQSkgPCBTLT5iYXNlICsgUy0+c2l6ZSkKKworLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgbXNlZ21lbnRwdHIgc2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8KK3N0YXRpYyBpbnQgaGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKChjaGFyKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgcmV0dXJuIDE7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5kIGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuCisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFXAorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbgorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvCisgIGFueXRoaW5nIHlvdSBsaWtlLgorKi8KKworI2lmIFVTRV9MT0NLUworCisvKiBFbnN1cmUgbG9ja3MgYXJlIGluaXRpYWxpemVkICovCisjZGVmaW5lIEdMT0JBTExZX0lOSVRJQUxJWkUoKSAobXBhcmFtcy5wYWdlX3NpemUgPT0gMCAmJiBpbml0X21wYXJhbXMoKSkKKworI2RlZmluZSBQUkVBQ1RJT04oTSkgICgoR0xPQkFMTFlfSU5JVElBTElaRSgpIHx8IHVzZV9sb2NrKE0pKT8gQUNRVUlSRV9MT0NLKCYoTSktPm11dGV4KSA6IDApCisjZGVmaW5lIFBPU1RBQ1RJT04oTSkgeyBpZiAodXNlX2xvY2soTSkpIFJFTEVBU0VfTE9DSygmKE0pLT5tdXRleCk7IH0KKyNlbHNlIC8qIFVTRV9MT0NLUyAqLworCisjaWZuZGVmIFBSRUFDVElPTgorI2RlZmluZSBQUkVBQ1RJT04oTSkgKDApCisjZW5kaWYgIC8qIFBSRUFDVElPTiAqLworCisjaWZuZGVmIFBPU1RBQ1RJT04KKyNkZWZpbmUgUE9TVEFDVElPTihNKQorI2VuZGlmICAvKiBQT1NUQUNUSU9OICovCisKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyoKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIHVwb24gZGV0ZWN0ZWQgYmFkIGFkZHJlc3Nlcy4KKyAgVVNBR0VfRVJST1JfQUNUSU9OIGlzIHRyaWdnZXJlZCBvbiBkZXRlY3RlZCBiYWQgZnJlZXMgYW5kCisgIHJlYWxsb2NzLiBUaGUgYXJndW1lbnQgcCBpcyBhbiBhZGRyZXNzIHRoYXQgbWlnaHQgaGF2ZSB0cmlnZ2VyZWQgdGhlCisgIGZhdWx0LiBJdCBpcyBpZ25vcmVkIGJ5IHRoZSB0d28gcHJlZGVmaW5lZCBhY3Rpb25zLCBidXQgbWlnaHQgYmUKKyAgdXNlZnVsIGluIGN1c3RvbSBhY3Rpb25zIHRoYXQgdHJ5IHRvIGhlbHAgZGlhZ25vc2UgZXJyb3JzLgorKi8KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogQSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGNvcnJ1cHRpb24gZXJyb3JzIGNhdXNpbmcgcmVzZXRzICovCitpbnQgbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisKKy8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KK3N0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKTsKKworI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSAgcmVzZXRfb25fZXJyb3IobSkKKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0sIHApCisKKyNlbHNlIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworI2lmbmRlZiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTgorI2RlZmluZSBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKSBBQk9SVAorI2VuZGlmIC8qIENPUlJVUFRJT05fRVJST1JfQUNUSU9OICovCisKKyNpZm5kZWYgVVNBR0VfRVJST1JfQUNUSU9OCisjZGVmaW5lIFVTQUdFX0VSUk9SX0FDVElPTihtLHApIEFCT1JUCisjZW5kaWYgLyogVVNBR0VfRVJST1JfQUNUSU9OICovCisKKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhIERFQlVHCisKKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkKKworI2Vsc2UgLyogREVCVUcgKi8KKyNkZWZpbmUgY2hlY2tfZnJlZV9jaHVuayhNLFApICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKSAgICAgICAgZG9fY2hlY2tfdG9wX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKSAgICAgICBkb19jaGVja19tYWxsb2Nfc3RhdGUoTSkKKworc3RhdGljIHZvaWQgICBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3Qgcyk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKTsKK3N0YXRpYyBpbnQgICAgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KTsKK3N0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKTsKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEluZGV4aW5nIEJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIGlzX3NtYWxsKHMpICAgICAgICAgKCgocykgPj4gU01BTExCSU5fU0hJRlQpIDwgTlNNQUxMQklOUykKKyNkZWZpbmUgc21hbGxfaW5kZXgocykgICAgICAoKHMpICA+PiBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgc21hbGxfaW5kZXgyc2l6ZShpKSAoKGkpICA8PCBTTUFMTEJJTl9TSElGVCkKKyNkZWZpbmUgTUlOX1NNQUxMX0lOREVYICAgICAoc21hbGxfaW5kZXgoTUlOX0NIVU5LX1NJWkUpKQorCisvKiBhZGRyZXNzaW5nIGJ5IGluZGV4LiBTZWUgYWJvdmUgYWJvdXQgc21hbGxiaW4gcmVwb3NpdGlvbmluZyAqLworI2RlZmluZSBzbWFsbGJpbl9hdChNLCBpKSAgICgoc2JpbnB0cikoKGNoYXIqKSYoKE0pLT5zbWFsbGJpbnNbKGkpPDwxXSkpKQorI2RlZmluZSB0cmVlYmluX2F0KE0saSkgICAgICgmKChNKS0+dHJlZWJpbnNbaV0pKQorCisvKiBhc3NpZ24gdHJlZSBpbmRleCBmb3Igc2l6ZSBTIHRvIHZhcmlhYmxlIEkgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKGkzODYpCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IEs7XAorICAgIF9fYXNtX18oImJzcmwgJTEsJTBcblx0IiA6ICI9ciIgKEspIDogInJtIiAgKFgpKTtcCisgICAgSSA9ICAoYmluZGV4X3QpKChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpKTtcCisgIH1cCit9CisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKVwKK3tcCisgIHNpemVfdCBYID0gUyA+PiBUUkVFQklOX1NISUZUO1wKKyAgaWYgKFggPT0gMClcCisgICAgSSA9IDA7XAorICBlbHNlIGlmIChYID4gMHhGRkZGKVwKKyAgICBJID0gTlRSRUVCSU5TLTE7XAorICBlbHNlIHtcCisgICAgdW5zaWduZWQgaW50IFkgPSAodW5zaWduZWQgaW50KVg7XAorICAgIHVuc2lnbmVkIGludCBOID0gKChZIC0gMHgxMDApID4+IDE2KSAmIDg7XAorICAgIHVuc2lnbmVkIGludCBLID0gKCgoWSA8PD0gTikgLSAweDEwMDApID4+IDE2KSAmIDQ7XAorICAgIE4gKz0gSztcCisgICAgTiArPSBLID0gKCgoWSA8PD0gSykgLSAweDQwMDApID4+IDE2KSAmIDI7XAorICAgIEsgPSAxNCAtIE4gKyAoKFkgPDw9IEspID4+IDE1KTtcCisgICAgSSA9IChLIDw8IDEpICsgKChTID4+IChLICsgKFRSRUVCSU5fU0hJRlQtMSkpICYgMSkpO1wKKyAgfVwKK30KKyNlbmRpZiAvKiBHTlVDICovCisKKy8qIEJpdCByZXByZXNlbnRpbmcgbWF4aW11bSByZXNvbHZlZCBzaXplIGluIGEgdHJlZWJpbiBhdCBpICovCisjZGVmaW5lIGJpdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoaSA9PSBOVFJFRUJJTlMtMSk/IChTSVpFX1RfQklUU0laRS0xKSA6ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpCisKKy8qIFNoaWZ0IHBsYWNpbmcgbWF4aW11bSByZXNvbHZlZCBiaXQgaW4gYSB0cmVlYmluIGF0IGkgYXMgc2lnbiBiaXQgKi8KKyNkZWZpbmUgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoaSA9PSBOVFJFRUJJTlMtMSk/IDAgOiBcCisgICAgKChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSAtICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDIpKSkKKworLyogVGhlIHNpemUgb2YgdGhlIHNtYWxsZXN0IGNodW5rIGhlbGQgaW4gYmluIHdpdGggaW5kZXggaSAqLworI2RlZmluZSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgICgoU0laRV9UX09ORSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQpKSB8ICBcCisgICAoKChzaXplX3QpKChpKSAmIFNJWkVfVF9PTkUpKSA8PCAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAxKSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gYmluIG1hcHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYml0IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgaWR4MmJpdChpKSAgICAgICAgICAgICAgKChiaW5tYXBfdCkoMSkgPDwgKGkpKQorCisvKiBNYXJrL0NsZWFyIGJpdHMgd2l0aCBnaXZlbiBpbmRleCAqLworI2RlZmluZSBtYXJrX3NtYWxsbWFwKE0saSkgICAgICAoKE0pLT5zbWFsbG1hcCB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfc21hbGxtYXAoTSxpKSAgICAgKChNKS0+c21hbGxtYXAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHNtYWxsbWFwX2lzX21hcmtlZChNLGkpICgoTSktPnNtYWxsbWFwICYgICBpZHgyYml0KGkpKQorCisjZGVmaW5lIG1hcmtfdHJlZW1hcChNLGkpICAgICAgICgoTSktPnRyZWVtYXAgIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl90cmVlbWFwKE0saSkgICAgICAoKE0pLT50cmVlbWFwICAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgdHJlZW1hcF9pc19tYXJrZWQoTSxpKSAgKChNKS0+dHJlZW1hcCAgJiAgIGlkeDJiaXQoaSkpCisKKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0ICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKGkzODYpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX19hc21fXygiYnNmbCAlMSwlMFxuXHQiIDogIj1yIiAoSikgOiAicm0iIChYKSk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxzZSAvKiBHTlVDICovCisjaWYgIFVTRV9CVUlMVElOX0ZGUworI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSkgSSA9IGZmcyhYKS0xCisKKyNlbHNlIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWSA9IFggLSAxO1wKKyAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2O1wKKyAgdW5zaWduZWQgaW50IE4gPSBLOyAgICAgICAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDgtMykgJiAgODsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMi0xKSAmICAyOyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDEtMCkgJiAgMTsgIFkgPj49IEs7XAorICBJID0gKGJpbmRleF90KShOICsgWSk7XAorfQorI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2VuZGlmIC8qIEdOVUMgKi8KKworLyogaXNvbGF0ZSB0aGUgbGVhc3Qgc2V0IGJpdCBvZiBhIGJpdG1hcCAqLworI2RlZmluZSBsZWFzdF9iaXQoeCkgICAgICAgICAoKHgpICYgLSh4KSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2YgbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgbGVmdF9iaXRzKHgpICAgICAgICAgKCh4PDwxKSB8IC0oeDw8MSkpCisKKy8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIG9yIGVxdWFsIHRvIGxlYXN0IGJpdCBvZiB4IG9uICovCisjZGVmaW5lIHNhbWVfb3JfbGVmdF9iaXRzKHgpICgoeCkgfCAtKHgpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJ1bnRpbWUgQ2hlY2sgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEZvciBzZWN1cml0eSwgdGhlIG1haW4gaW52YXJpYW50IGlzIHRoYXQgbWFsbG9jL2ZyZWUvZXRjIG5ldmVyCisgIHdyaXRlcyB0byBhIHN0YXRpYyBhZGRyZXNzIG90aGVyIHRoYW4gbWFsbG9jX3N0YXRlLCB1bmxlc3Mgc3RhdGljCisgIG1hbGxvY19zdGF0ZSBpdHNlbGYgaGFzIGJlZW4gY29ycnVwdGVkLCB3aGljaCBjYW5ub3Qgb2NjdXIgdmlhCisgIG1hbGxvYyAoYmVjYXVzZSBvZiB0aGVzZSBjaGVja3MpLiBJbiBlc3NlbmNlIHRoaXMgbWVhbnMgdGhhdCB3ZQorICBiZWxpZXZlIGFsbCBwb2ludGVycywgc2l6ZXMsIG1hcHMgZXRjIGhlbGQgaW4gbWFsbG9jX3N0YXRlLCBidXQKKyAgY2hlY2sgYWxsIG9mIHRob3NlIGxpbmtlZCBvciBvZmZzZXR0ZWQgZnJvbSBvdGhlciBlbWJlZGRlZCBkYXRhCisgIHN0cnVjdHVyZXMuICBUaGVzZSBjaGVja3MgYXJlIGludGVyc3BlcnNlZCB3aXRoIG1haW4gY29kZSBpbiBhIHdheQorICB0aGF0IHRlbmRzIHRvIG1pbmltaXplIHRoZWlyIHJ1bi10aW1lIGNvc3QuCisKKyAgV2hlbiBGT09URVJTIGlzIGRlZmluZWQsIGluIGFkZGl0aW9uIHRvIHJhbmdlIGNoZWNraW5nLCB3ZSBhbHNvCisgIHZlcmlmeSBmb290ZXIgZmllbGRzIG9mIGludXNlIGNodW5rcywgd2hpY2ggY2FuIGJlIHVzZWQgZ3VhcmFudGVlCisgIHRoYXQgdGhlIG1zdGF0ZSBjb250cm9sbGluZyBtYWxsb2MvZnJlZSBpcyBpbnRhY3QuICBUaGlzIGlzIGEKKyAgc3RyZWFtbGluZWQgdmVyc2lvbiBvZiB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGJ5IFdpbGxpYW0gUm9iZXJ0c29uCisgIGV0IGFsIGluICJSdW4tdGltZSBEZXRlY3Rpb24gb2YgSGVhcC1iYXNlZCBPdmVyZmxvd3MiIExJU0EnMDMKKyAgaHR0cDovL3d3dy51c2VuaXgub3JnL2V2ZW50cy9saXNhMDMvdGVjaC9yb2JlcnRzb24uaHRtbCBUaGUgZm9vdGVyCisgIG9mIGFuIGludXNlIGNodW5rIGhvbGRzIHRoZSB4b3Igb2YgaXRzIG1zdGF0ZSBhbmQgYSByYW5kb20gc2VlZCwKKyAgdGhhdCBpcyBjaGVja2VkIHVwb24gY2FsbHMgdG8gZnJlZSgpIGFuZCByZWFsbG9jKCkuICBUaGlzIGlzCisgIChwcm9iYWJsaXN0aWNhbGx5KSB1bmd1ZXNzYWJsZSBmcm9tIG91dHNpZGUgdGhlIHByb2dyYW0sIGJ1dCBjYW4gYmUKKyAgY29tcHV0ZWQgYnkgYW55IGNvZGUgc3VjY2Vzc2Z1bGx5IG1hbGxvYydpbmcgYW55IGNodW5rLCBzbyBkb2VzIG5vdAorICBpdHNlbGYgcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgY29kZSB0aGF0IGhhcyBhbHJlYWR5IGJyb2tlbgorICBzZWN1cml0eSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuICBVbmxpa2UgUm9iZXJ0c29uIGV0IGFsLCB3ZQorICBhbHdheXMgZHluYW1pY2FsbHkgY2hlY2sgYWRkcmVzc2VzIG9mIGFsbCBvZmZzZXQgY2h1bmtzIChwcmV2aW91cywKKyAgbmV4dCwgZXRjKS4gVGhpcyB0dXJucyBvdXQgdG8gYmUgY2hlYXBlciB0aGFuIHJlbHlpbmcgb24gaGFzaGVzLgorKi8KKworI2lmICFJTlNFQ1VSRQorLyogQ2hlY2sgaWYgYWRkcmVzcyBhIGlzIGF0IGxlYXN0IGFzIGhpZ2ggYXMgYW55IGZyb20gTU9SRUNPUkUgb3IgTU1BUCAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgoY2hhciopKGEpID49IChNKS0+bGVhc3RfYWRkcikKKy8qIENoZWNrIGlmIGFkZHJlc3Mgb2YgbmV4dCBjaHVuayBuIGlzIGhpZ2hlciB0aGFuIGJhc2UgY2h1bmsgcCAqLworI2RlZmluZSBva19uZXh0KHAsIG4pICAgICgoY2hhciopKHApIDwgKGNoYXIqKShuKSkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBjaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgY2ludXNlKHApCisvKiBDaGVjayBpZiBwIGhhcyBpdHMgcGludXNlIGJpdCBvbiAqLworI2RlZmluZSBva19waW51c2UocCkgICAgIHBpbnVzZShwKQorCisjZWxzZSAvKiAhSU5TRUNVUkUgKi8KKyNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoMSkKKyNkZWZpbmUgb2tfbmV4dChiLCBuKSAgICAoMSkKKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICAoMSkKKyNkZWZpbmUgb2tfcGludXNlKHApICAgICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKy8qIENoZWNrIGlmIChhbGxlZ2VkKSBtc3RhdGUgbSBoYXMgZXhwZWN0ZWQgbWFnaWMgZmllbGQgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoKE0pLT5tYWdpYyA9PSBtcGFyYW1zLm1hZ2ljKQorI2Vsc2UgIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyNkZWZpbmUgb2tfbWFnaWMoTSkgICAgICAoMSkKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisKKworLyogSW4gZ2NjLCB1c2UgX19idWlsdGluX2V4cGVjdCB0byBtaW5pbWl6ZSBpbXBhY3Qgb2YgY2hlY2tzICovCisjaWYgIUlOU0VDVVJFCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMworI2RlZmluZSBSVENIRUNLKGUpICBfX2J1aWx0aW5fZXhwZWN0KGUsIDEpCisjZWxzZSAvKiBHTlVDICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgIChlKQorI2VuZGlmIC8qIEdOVUMgKi8KKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBSVENIRUNLKGUpICAoMSkKKyNlbmRpZiAvKiAhSU5TRUNVUkUgKi8KKworLyogbWFjcm9zIHRvIHNldCB1cCBpbnVzZSBjaHVua3Mgd2l0aCBvciB3aXRob3V0IGZvb3RlcnMgKi8KKworI2lmICFGT09URVJTCisKKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKQorCisvKiBTZXQgY2ludXNlIGJpdCBhbmQgcGludXNlIGJpdCBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IGNpbnVzZSBhbmQgcGludXNlIG9mIHRoaXMgY2h1bmsgYW5kIHBpbnVzZSBvZiBuZXh0IGNodW5rICovCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCkKKworLyogU2V0IHNpemUsIGNpbnVzZSBhbmQgcGludXNlIGJpdCBvZiB0aGlzIGNodW5rICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpKQorCisjZWxzZSAvKiBGT09URVJTICovCisKKy8qIFNldCBmb290IG9mIGludXNlIGNodW5rIHRvIGJlIHhvciBvZiBtc3RhdGUgYW5kIHNlZWQgKi8KKyNkZWZpbmUgbWFya19pbnVzZV9mb290KE0scCxzKVwKKyAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9ICgoc2l6ZV90KShNKSBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIGdldF9tc3RhdGVfZm9yKHApXAorICAoKG1zdGF0ZSkoKChtY2h1bmtwdHIpKChjaGFyKikocCkgK1wKKyAgICAoY2h1bmtzaXplKHApKSkpLT5wcmV2X2Zvb3QgXiBtcGFyYW1zLm1hZ2ljKSkKKworI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKKyAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSwgXAorICBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9pbnVzZV9hbmRfcGludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLFwKKyBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpKQorCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoTSwgcCwgcylcCisgICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKKyAgbWFya19pbnVzZV9mb290KE0sIHAsIHMpKQorCisjZW5kaWYgLyogIUZPT1RFUlMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBzZXR0aW5nIG1wYXJhbXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSBtcGFyYW1zICovCitzdGF0aWMgaW50IGluaXRfbXBhcmFtcyh2b2lkKSB7CisgIGlmIChtcGFyYW1zLnBhZ2Vfc2l6ZSA9PSAwKSB7CisgICAgc2l6ZV90IHM7CisKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gREVGQVVMVF9NTUFQX1RIUkVTSE9MRDsKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gREVGQVVMVF9UUklNX1RIUkVTSE9MRDsKKyNpZiBNT1JFQ09SRV9DT05USUdVT1VTCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVQ7CisjZWxzZSAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUfFVTRV9OT05DT05USUdVT1VTX0JJVDsKKyNlbmRpZiAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisgICAgeworI2lmIFVTRV9ERVZfUkFORE9NCisgICAgICBpbnQgZmQ7CisgICAgICB1bnNpZ25lZCBjaGFyIGJ1ZltzaXplb2Yoc2l6ZV90KV07CisgICAgICAvKiBUcnkgdG8gdXNlIC9kZXYvdXJhbmRvbSwgZWxzZSBmYWxsIGJhY2sgb24gdXNpbmcgdGltZSAqLworICAgICAgaWYgKChmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKSkgPj0gMCAmJgorICAgICAgICAgIHJlYWQoZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7CisgICAgICAgIHMgPSAqKChzaXplX3QgKikgYnVmKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFVTRV9ERVZfUkFORE9NICovCisgICAgICAgIHMgPSAoc2l6ZV90KSh0aW1lKDApIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisKKyAgICAgIHMgfD0gKHNpemVfdCk4VTsgICAgLyogZW5zdXJlIG5vbnplcm8gKi8KKyAgICAgIHMgJj0gfihzaXplX3QpN1U7ICAgLyogaW1wcm92ZSBjaGFuY2VzIG9mIGZhdWx0IGZvciBiYWQgdmFsdWVzICovCisKKyAgICB9CisjZWxzZSAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgcyA9IChzaXplX3QpMHg1ODU4NTg1OFU7CisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworICAgIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCk7CisgICAgaWYgKG1wYXJhbXMubWFnaWMgPT0gMCkgeworICAgICAgbXBhcmFtcy5tYWdpYyA9IHM7CisgICAgICAvKiBTZXQgdXAgbG9jayBmb3IgbWFpbiBtYWxsb2MgYXJlYSAqLworICAgICAgSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOworICAgICAgZ20tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgICAgfQorICAgIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCk7CisKKyNpZm5kZWYgV0lOMzIKKyAgICBtcGFyYW1zLnBhZ2Vfc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gKChERUZBVUxUX0dSQU5VTEFSSVRZICE9IDApPworICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9HUkFOVUxBUklUWSA6IG1wYXJhbXMucGFnZV9zaXplKTsKKyNlbHNlIC8qIFdJTjMyICovCisgICAgeworICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87CisgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAgICBtcGFyYW1zLnBhZ2Vfc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHk7CisgICAgfQorI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBTYW5pdHktY2hlY2sgY29uZmlndXJhdGlvbjoKKyAgICAgICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuCisgICAgICAgaW50cyBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMuCisgICAgICAgYWxpZ25tZW50IG11c3QgYmUgYXQgbGVhc3QgOC4KKyAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVuayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLgorICAgICovCisgICAgaWYgKChzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YoY2hhciopKSB8fAorICAgICAgICAoTUFYX1NJWkVfVCA8IE1JTl9DSFVOS19TSVpFKSAgfHwKKyAgICAgICAgKHNpemVvZihpbnQpIDwgNCkgIHx8CisgICAgICAgIChNQUxMT0NfQUxJR05NRU5UIDwgKHNpemVfdCk4VSkgfHwKKyAgICAgICAgKChNQUxMT0NfQUxJR05NRU5UICAgICYgKE1BTExPQ19BTElHTk1FTlQtU0laRV9UX09ORSkpICAgICE9IDApIHx8CisgICAgICAgICgoTUNIVU5LX1NJWkUgICAgICAgICAmIChNQ0hVTktfU0laRS1TSVpFX1RfT05FKSkgICAgICAgICAhPSAwKSB8fAorICAgICAgICAoKG1wYXJhbXMuZ3JhbnVsYXJpdHkgJiAobXBhcmFtcy5ncmFudWxhcml0eS1TSVpFX1RfT05FKSkgIT0gMCkgfHwKKyAgICAgICAgKChtcGFyYW1zLnBhZ2Vfc2l6ZSAgICYgKG1wYXJhbXMucGFnZV9zaXplLVNJWkVfVF9PTkUpKSAgICE9IDApKQorICAgICAgQUJPUlQ7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIHN1cHBvcnQgZm9yIG1hbGxvcHQgKi8KK3N0YXRpYyBpbnQgY2hhbmdlX21wYXJhbShpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgc2l6ZV90IHZhbCA9IChzaXplX3QpdmFsdWU7CisgIGluaXRfbXBhcmFtcygpOworICBzd2l0Y2gocGFyYW1fbnVtYmVyKSB7CisgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBjYXNlIE1fR1JBTlVMQVJJVFk6CisgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwtMSkpID09IDApKSB7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWYgREVCVUcKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKXApOworICBzaXplX3QgIHN6ID0gY2h1bmtzaXplKHApOworICBhc3NlcnQoc3AgIT0gMCk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydChzeiA9PSBtLT50b3BzaXplKTsKKyAgYXNzZXJ0KHN6ID4gMCk7CisgIGFzc2VydChzeiA9PSAoKHNwLT5iYXNlICsgc3AtPnNpemUpIC0gKGNoYXIqKXApIC0gVE9QX0ZPT1RfU0laRSk7CisgIGFzc2VydChwaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiAoaW51c2UpIG1tYXBwZWQgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3QgIHN6ID0gY2h1bmtzaXplKHApOworICBzaXplX3QgbGVuID0gKHN6ICsgKHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVCkgKyBNTUFQX0ZPT1RfUEFEKTsKKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkpOworICBhc3NlcnQodXNlX21tYXAobSkpOworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworICBhc3NlcnQoIWlzX3NtYWxsKHN6KSk7CisgIGFzc2VydCgobGVuICYgKG1wYXJhbXMucGFnZV9zaXplLVNJWkVfVF9PTkUpKSA9PSAwKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KS0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCk7CisgIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeitTSVpFX1RfU0laRSktPmhlYWQgPT0gMCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgaW51c2UgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOworICBhc3NlcnQoY2ludXNlKHApKTsKKyAgYXNzZXJ0KG5leHRfcGludXNlKHApKTsKKyAgLyogSWYgbm90IHBpbnVzZSBhbmQgbm90IG1tYXBwZWQsIHByZXZpb3VzIGNodW5rIGhhcyBPSyBvZmZzZXQgKi8KKyAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgcGludXNlKHApIHx8IG5leHRfY2h1bmsocHJldl9jaHVuayhwKSkgPT0gcCk7CisgIGlmIChpc19tbWFwcGVkKHApKQorICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgZnJlZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc3opOworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydCghY2ludXNlKHApKTsKKyAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7CisgIGFzc2VydCAoIWlzX21tYXBwZWQocCkpOworICBpZiAocCAhPSBtLT5kdiAmJiBwICE9IG0tPnRvcCkgeworICAgIGlmIChzeiA+PSBNSU5fQ0hVTktfU0laRSkgeworICAgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7CisgICAgICBhc3NlcnQobmV4dC0+cHJldl9mb290ID09IHN6KTsKKyAgICAgIGFzc2VydChwaW51c2UocCkpOworICAgICAgYXNzZXJ0IChuZXh0ID09IG0tPnRvcCB8fCBjaW51c2UobmV4dCkpOworICAgICAgYXNzZXJ0KHAtPmZkLT5iayA9PSBwKTsKKyAgICAgIGFzc2VydChwLT5iay0+ZmQgPT0gcCk7CisgICAgfQorICAgIGVsc2UgIC8qIG1hcmtlcnMgYXJlIGFsd2F5cyBvZiBzaXplIFNJWkVfVF9TSVpFICovCisgICAgICBhc3NlcnQoc3ogPT0gU0laRV9UX1NJWkUpOworICB9Cit9CisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgbWFsbG9jZWQgY2h1bmtzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBtYWxsb2NlZCAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfihQSU5VU0VfQklUfENJTlVTRV9CSVQpOworICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICBhc3NlcnQoc3ogPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChzeiA+PSBzKTsKKyAgICAvKiB1bmxlc3MgbW1hcHBlZCwgc2l6ZSBpcyBsZXNzIHRoYW4gTUlOX0NIVU5LX1NJWkUgbW9yZSB0aGFuIHJlcXVlc3QgKi8KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBzeiA8IChzICsgTUlOX0NIVU5LX1NJWkUpKTsKKyAgfQorfQorCisvKiBDaGVjayBhIHRyZWUgYW5kIGl0cyBzdWJ0cmVlcy4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCkgeworICB0Y2h1bmtwdHIgaGVhZCA9IDA7CisgIHRjaHVua3B0ciB1ID0gdDsKKyAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7CisgIHNpemVfdCB0c2l6ZSA9IGNodW5rc2l6ZSh0KTsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgodHNpemUsIGlkeCk7CisgIGFzc2VydCh0aW5kZXggPT0gaWR4KTsKKyAgYXNzZXJ0KHRzaXplID49IE1JTl9MQVJHRV9TSVpFKTsKKyAgYXNzZXJ0KHRzaXplID49IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaWR4KSk7CisgIGFzc2VydCgoaWR4ID09IE5UUkVFQklOUy0xKSB8fCAodHNpemUgPCBtaW5zaXplX2Zvcl90cmVlX2luZGV4KChpZHgrMSkpKSk7CisKKyAgZG8geyAvKiB0cmF2ZXJzZSB0aHJvdWdoIGNoYWluIG9mIHNhbWUtc2l6ZWQgbm9kZXMgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgKChtY2h1bmtwdHIpdSkpOworICAgIGFzc2VydCh1LT5pbmRleCA9PSB0aW5kZXgpOworICAgIGFzc2VydChjaHVua3NpemUodSkgPT0gdHNpemUpOworICAgIGFzc2VydCghY2ludXNlKHUpKTsKKyAgICBhc3NlcnQoIW5leHRfcGludXNlKHUpKTsKKyAgICBhc3NlcnQodS0+ZmQtPmJrID09IHUpOworICAgIGFzc2VydCh1LT5iay0+ZmQgPT0gdSk7CisgICAgaWYgKHUtPnBhcmVudCA9PSAwKSB7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gPT0gMCk7CisgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gPT0gMCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KGhlYWQgPT0gMCk7IC8qIG9ubHkgb25lIG5vZGUgb24gY2hhaW4gaGFzIHBhcmVudCAqLworICAgICAgaGVhZCA9IHU7CisgICAgICBhc3NlcnQodS0+cGFyZW50ICE9IHUpOworICAgICAgYXNzZXJ0ICh1LT5wYXJlbnQtPmNoaWxkWzBdID09IHUgfHwKKyAgICAgICAgICAgICAgdS0+cGFyZW50LT5jaGlsZFsxXSA9PSB1IHx8CisgICAgICAgICAgICAgICooKHRiaW5wdHIqKSh1LT5wYXJlbnQpKSA9PSB1KTsKKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwKSB7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXS0+cGFyZW50ID09IHUpOworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0gIT0gdSk7CisgICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMF0pOworICAgICAgfQorICAgICAgaWYgKHUtPmNoaWxkWzFdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdLT5wYXJlbnQgPT0gdSk7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSAhPSB1KTsKKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFsxXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCAmJiB1LT5jaGlsZFsxXSAhPSAwKSB7CisgICAgICAgIGFzc2VydChjaHVua3NpemUodS0+Y2hpbGRbMF0pIDwgY2h1bmtzaXplKHUtPmNoaWxkWzFdKSk7CisgICAgICB9CisgICAgfQorICAgIHUgPSB1LT5mZDsKKyAgfSB3aGlsZSAodSAhPSB0KTsKKyAgYXNzZXJ0KGhlYWQgIT0gMCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHRyZWViaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZWJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgeworICB0YmlucHRyKiB0YiA9IHRyZWViaW5fYXQobSwgaSk7CisgIHRjaHVua3B0ciB0ID0gKnRiOworICBpbnQgZW1wdHkgPSAobS0+dHJlZW1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHQgPT0gMCkKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KQorICAgIGRvX2NoZWNrX3RyZWUobSwgdCk7Cit9CisKKy8qICBDaGVjayBhbGwgdGhlIGNodW5rcyBpbiBhIHNtYWxsYmluLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3NtYWxsYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIGkpOworICBtY2h1bmtwdHIgcCA9IGItPmJrOworICB1bnNpZ25lZCBpbnQgZW1wdHkgPSAobS0+c21hbGxtYXAgJiAoMVUgPDwgaSkpID09IDA7CisgIGlmIChwID09IGIpCisgICAgYXNzZXJ0KGVtcHR5KTsKKyAgaWYgKCFlbXB0eSkgeworICAgIGZvciAoOyBwICE9IGI7IHAgPSBwLT5iaykgeworICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICBtY2h1bmtwdHIgcTsKKyAgICAgIC8qIGVhY2ggY2h1bmsgY2xhaW1zIHRvIGJlIGZyZWUgKi8KKyAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcCk7CisgICAgICAvKiBjaHVuayBiZWxvbmdzIGluIGJpbiAqLworICAgICAgYXNzZXJ0KHNtYWxsX2luZGV4KHNpemUpID09IGkpOworICAgICAgYXNzZXJ0KHAtPmJrID09IGIgfHwgY2h1bmtzaXplKHAtPmJrKSA9PSBjaHVua3NpemUocCkpOworICAgICAgLyogY2h1bmsgaXMgZm9sbG93ZWQgYnkgYW4gaW51c2UgY2h1bmsgKi8KKyAgICAgIHEgPSBuZXh0X2NodW5rKHApOworICAgICAgaWYgKHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpCisgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgIH0KKyAgfQorfQorCisvKiBGaW5kIHggaW4gYSBiaW4uIFVzZWQgaW4gb3RoZXIgY2hlY2sgZnVuY3Rpb25zLiAqLworc3RhdGljIGludCBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpIHsKKyAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUoeCk7CisgIGlmIChpc19zbWFsbChzaXplKSkgeworICAgIGJpbmRleF90IHNpZHggPSBzbWFsbF9pbmRleChzaXplKTsKKyAgICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBzaWR4KTsKKyAgICBpZiAoc21hbGxtYXBfaXNfbWFya2VkKG0sIHNpZHgpKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGI7CisgICAgICBkbyB7CisgICAgICAgIGlmIChwID09IHgpCisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9IHdoaWxlICgocCA9IHAtPmZkKSAhPSBiKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgYmluZGV4X3QgdGlkeDsKKyAgICBjb21wdXRlX3RyZWVfaW5kZXgoc2l6ZSwgdGlkeCk7CisgICAgaWYgKHRyZWVtYXBfaXNfbWFya2VkKG0sIHRpZHgpKSB7CisgICAgICB0Y2h1bmtwdHIgdCA9ICp0cmVlYmluX2F0KG0sIHRpZHgpOworICAgICAgc2l6ZV90IHNpemViaXRzID0gc2l6ZSA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgodGlkeCk7CisgICAgICB3aGlsZSAodCAhPSAwICYmIGNodW5rc2l6ZSh0KSAhPSBzaXplKSB7CisgICAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgICBzaXplYml0cyA8PD0gMTsKKyAgICAgIH0KKyAgICAgIGlmICh0ICE9IDApIHsKKyAgICAgICAgdGNodW5rcHRyIHUgPSB0OworICAgICAgICBkbyB7CisgICAgICAgICAgaWYgKHUgPT0gKHRjaHVua3B0cil4KQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gd2hpbGUgKCh1ID0gdS0+ZmQpICE9IHQpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogVHJhdmVyc2UgZWFjaCBjaHVuayBhbmQgY2hlY2sgaXQ7IHJldHVybiB0b3RhbCAqLworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHN1bSA9IDA7CisgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgIHN1bSArPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgbWNodW5rcHRyIGxhc3RxID0gMDsKKyAgICAgIGFzc2VydChwaW51c2UocSkpOworICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKyAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgIHN1bSArPSBjaHVua3NpemUocSk7CisgICAgICAgIGlmIChjaW51c2UocSkpIHsKKyAgICAgICAgICBhc3NlcnQoIWJpbl9maW5kKG0sIHEpKTsKKyAgICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBhc3NlcnQocSA9PSBtLT5kdiB8fCBiaW5fZmluZChtLCBxKSk7CisgICAgICAgICAgYXNzZXJ0KGxhc3RxID09IDAgfHwgY2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8KKyAgICAgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHEpOworICAgICAgICB9CisgICAgICAgIGxhc3RxID0gcTsKKyAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICB9CisgICAgICBzID0gcy0+bmV4dDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN1bTsKK30KKworLyogQ2hlY2sgYWxsIHByb3BlcnRpZXMgb2YgbWFsbG9jX3N0YXRlLiAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKG1zdGF0ZSBtKSB7CisgIGJpbmRleF90IGk7CisgIHNpemVfdCB0b3RhbDsKKyAgLyogY2hlY2sgYmlucyAqLworICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKQorICAgIGRvX2NoZWNrX3NtYWxsYmluKG0sIGkpOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfdHJlZWJpbihtLCBpKTsKKworICBpZiAobS0+ZHZzaXplICE9IDApIHsgLyogY2hlY2sgZHYgY2h1bmsgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgbS0+ZHYpOworICAgIGFzc2VydChtLT5kdnNpemUgPT0gY2h1bmtzaXplKG0tPmR2KSk7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPmR2KSA9PSAwKTsKKyAgfQorCisgIGlmIChtLT50b3AgIT0gMCkgeyAgIC8qIGNoZWNrIHRvcCBjaHVuayAqLworICAgIGRvX2NoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgIGFzc2VydChtLT50b3BzaXplID09IGNodW5rc2l6ZShtLT50b3ApKTsKKyAgICBhc3NlcnQobS0+dG9wc2l6ZSA+IDApOworICAgIGFzc2VydChiaW5fZmluZChtLCBtLT50b3ApID09IDApOworICB9CisKKyAgdG90YWwgPSB0cmF2ZXJzZV9hbmRfY2hlY2sobSk7CisgIGFzc2VydCh0b3RhbCA8PSBtLT5mb290cHJpbnQpOworICBhc3NlcnQobS0+Zm9vdHByaW50IDw9IG0tPm1heF9mb290cHJpbnQpOworfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pIHsKKyAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBzdW0gKz0gc3o7CisgICAgICAgICAgaWYgKCFjaW51c2UocSkpIHsKKyAgICAgICAgICAgIG1mcmVlICs9IHN6OworICAgICAgICAgICAgKytuZnJlZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIHNpemVfdCBtYXhmcCA9IDA7CisgICAgc2l6ZV90IGZwID0gMDsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBmcCA9IG0tPmZvb3RwcmludDsKKyAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7CisKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKyAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShxKSkKKyAgICAgICAgICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKSh1c2VkKSk7CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAqLworI2RlZmluZSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIG1jaHVua3B0ciBCID0gUC0+Yms7XAorICBiaW5kZXhfdCBJID0gc21hbGxfaW5kZXgoUyk7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChGID09IEIpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSygoRiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgRikpICYmXAorICAgICAgICAgICAgICAgICAgIChCID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBCKSkpKSB7XAorICAgIEYtPmJrID0gQjtcCisgICAgQi0+ZmQgPSBGO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogVW5saW5rIHRoZSBmaXJzdCBjaHVuayBmcm9tIGEgc21hbGxiaW4gKi8KKyNkZWZpbmUgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKE0sIEIsIFAsIEkpIHtcCisgIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChCID09IEYpXAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICBCLT5mZCA9IEY7XAorICAgIEYtPmJrID0gQjtcCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKy8qIFJlcGxhY2UgZHYgbm9kZSwgYmlubmluZyB0aGUgb2xkIG9uZSAqLworLyogVXNlZCBvbmx5IHdoZW4gZHZzaXplIGtub3duIHRvIGJlIHNtYWxsICovCisjZGVmaW5lIHJlcGxhY2VfZHYoTSwgUCwgUykge1wKKyAgc2l6ZV90IERWUyA9IE0tPmR2c2l6ZTtcCisgIGlmIChEVlMgIT0gMCkge1wKKyAgICBtY2h1bmtwdHIgRFYgPSBNLT5kdjtcCisgICAgYXNzZXJ0KGlzX3NtYWxsKERWUykpO1wKKyAgICBpbnNlcnRfc21hbGxfY2h1bmsoTSwgRFYsIERWUyk7XAorICB9XAorICBNLT5kdnNpemUgPSBTO1wKKyAgTS0+ZHYgPSBQO1wKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5zZXJ0IGNodW5rIGludG8gdHJlZSAqLworI2RlZmluZSBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgWCwgUykge1wKKyAgdGJpbnB0ciogSDtcCisgIGJpbmRleF90IEk7XAorICBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSk7XAorICBIID0gdHJlZWJpbl9hdChNLCBJKTtcCisgIFgtPmluZGV4ID0gSTtcCisgIFgtPmNoaWxkWzBdID0gWC0+Y2hpbGRbMV0gPSAwO1wKKyAgaWYgKCF0cmVlbWFwX2lzX21hcmtlZChNLCBJKSkge1wKKyAgICBtYXJrX3RyZWVtYXAoTSwgSSk7XAorICAgICpIID0gWDtcCisgICAgWC0+cGFyZW50ID0gKHRjaHVua3B0cilIO1wKKyAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIgVCA9ICpIO1wKKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KEkpO1wKKyAgICBmb3IgKDs7KSB7XAorICAgICAgaWYgKGNodW5rc2l6ZShUKSAhPSBTKSB7XAorICAgICAgICB0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XAorICAgICAgICBLIDw8PSAxO1wKKyAgICAgICAgaWYgKCpDICE9IDApXAorICAgICAgICAgIFQgPSAqQztcCisgICAgICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDKSkpIHtcCisgICAgICAgICAgKkMgPSBYO1wKKyAgICAgICAgICBYLT5wYXJlbnQgPSBUO1wKKyAgICAgICAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgICBlbHNlIHtcCisgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgIH1cCisgICAgICBlbHNlIHtcCisgICAgICAgIHRjaHVua3B0ciBGID0gVC0+ZmQ7XAorICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFQpICYmIG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgICAgIFQtPmZkID0gRi0+YmsgPSBYO1wKKyAgICAgICAgICBYLT5mZCA9IEY7XAorICAgICAgICAgIFgtPmJrID0gVDtcCisgICAgICAgICAgWC0+cGFyZW50ID0gMDtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgICBlbHNlIHtcCisgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKK30KKworLyoKKyAgVW5saW5rIHN0ZXBzOgorCisgIDEuIElmIHggaXMgYSBjaGFpbmVkIG5vZGUsIHVubGluayBpdCBmcm9tIGl0cyBzYW1lLXNpemVkIGZkL2JrIGxpbmtzCisgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50LgorICAyLiBJZiB4IHdhcyB0aGUgbGFzdCBub2RlIG9mIGl0cyBzaXplLCBidXQgbm90IGEgbGVhZiBub2RlLCBpdCBtdXN0CisgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yCisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kZW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRlbnQKKyAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCisgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKKyAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaAorICAgICBiZWNhdXNlIG9uIGF2ZXJhZ2UgYSBub2RlIGluIGEgdHJlZSBpcyBuZWFyIHRoZSBib3R0b20uCisgIDMuIElmIHggaXMgdGhlIGJhc2Ugb2YgYSBjaGFpbiAoaS5lLiwgaGFzIHBhcmVudCBsaW5rcykgcmVsaW5rCisgICAgIHgncyBwYXJlbnQgYW5kIGNoaWxkcmVuIHRvIHgncyByZXBsYWNlbWVudCAob3IgbnVsbCBpZiBub25lKS4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKKyAgICAgIEYtPmJrID0gUjtcCisgICAgICBSLT5mZCA9IEY7XAorICAgIH1cCisgICAgZWxzZSB7XAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIqIFJQO1wKKyAgICBpZiAoKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMV0pKSkgIT0gMCkgfHxcCisgICAgICAgICgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzBdKSkpICE9IDApKSB7XAorICAgICAgdGNodW5rcHRyKiBDUDtcCisgICAgICB3aGlsZSAoKCooQ1AgPSAmKFItPmNoaWxkWzFdKSkgIT0gMCkgfHxcCisgICAgICAgICAgICAgKCooQ1AgPSAmKFItPmNoaWxkWzBdKSkgIT0gMCkpIHtcCisgICAgICAgIFIgPSAqKFJQID0gQ1ApO1wKKyAgICAgIH1cCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFJQKSkpXAorICAgICAgICAqUlAgPSAwO1wKKyAgICAgIGVsc2Uge1wKKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgfVwKKyAgICB9XAorICB9XAorICBpZiAoWFAgIT0gMCkge1wKKyAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XAorICAgIGlmIChYID09ICpIKSB7XAorICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwKKyAgICAgICAgY2xlYXJfdHJlZW1hcChNLCBYLT5pbmRleCk7XAorICAgIH1cCisgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFhQKSkpIHtcCisgICAgICBpZiAoWFAtPmNoaWxkWzBdID09IFgpIFwKKyAgICAgICAgWFAtPmNoaWxkWzBdID0gUjtcCisgICAgICBlbHNlIFwKKyAgICAgICAgWFAtPmNoaWxkWzFdID0gUjtcCisgICAgfVwKKyAgICBlbHNlXAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIGlmIChSICE9IDApIHtcCisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wKKyAgICAgICAgdGNodW5rcHRyIEMwLCBDMTtcCisgICAgICAgIFItPnBhcmVudCA9IFhQO1wKKyAgICAgICAgaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XAorICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzApKSkge1wKKyAgICAgICAgICAgIFItPmNoaWxkWzBdID0gQzA7XAorICAgICAgICAgICAgQzAtPnBhcmVudCA9IFI7XAorICAgICAgICAgIH1cCisgICAgICAgICAgZWxzZVwKKyAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgICAgfVwKKyAgICAgICAgaWYgKChDMSA9IFgtPmNoaWxkWzFdKSAhPSAwKSB7XAorICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wKKyAgICAgICAgICAgIFItPmNoaWxkWzFdID0gQzE7XAorICAgICAgICAgICAgQzEtPnBhcmVudCA9IFI7XAorICAgICAgICAgIH1cCisgICAgICAgICAgZWxzZVwKKyAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgICAgfVwKKyAgICAgIH1cCisgICAgICBlbHNlXAorICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgfVwKKyAgfVwKK30KKworLyogUmVsYXlzIHRvIGxhcmdlIHZzIHNtYWxsIGJpbiBvcGVyYXRpb25zICovCisKKyNkZWZpbmUgaW5zZXJ0X2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgVFAsIFMpOyB9CisKKyNkZWZpbmUgdW5saW5rX2NodW5rKE0sIFAsIFMpXAorICBpZiAoaXNfc21hbGwoUykpIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKVwKKyAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgVFApOyB9CisKKworLyogUmVsYXlzIHRvIGludGVybmFsIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZyb20gcmVhbGxvYywgbWVtYWxpZ24gZXRjICovCisKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmIE1TUEFDRVMKKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpXAorICAgKG0gPT0gZ20pPyBkbG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pXAorICAgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVlKG0sbWVtKTsKKyNlbHNlIC8qIE1TUEFDRVMgKi8KKyNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIGRsbWFsbG9jKGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBkbGZyZWUobWVtKQorI2VuZGlmIC8qIE1TUEFDRVMgKi8KKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERpcmVjdC1tbWFwcGluZyBjaHVua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRGlyZWN0bHkgbW1hcHBlZCBjaHVua3MgYXJlIHNldCB1cCB3aXRoIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YKKyAgdGhlIG1tYXBwZWQgcmVnaW9uIHN0b3JlZCBpbiB0aGUgcHJldl9mb290IGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcworICBhbGxvd3MgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHRvIE1VTk1BUCB3aGVuIGZyZWVkLAorICBhbmQgYWxzbyBhbGxvd3MgYWRqdXN0bWVudCBvZiB0aGUgcmV0dXJuZWQgY2h1bmsgdG8gbWVldCBhbGlnbm1lbnQKKyAgcmVxdWlyZW1lbnRzIChlc3BlY2lhbGx5IGluIG1lbWFsaWduKS4gIFRoZXJlIGlzIGFsc28gZW5vdWdoIHNwYWNlCisgIGFsbG9jYXRlZCB0byBob2xkIGEgZmFrZSBuZXh0IGNodW5rIG9mIHNpemUgU0laRV9UX1NJWkUgdG8gbWFpbnRhaW4KKyAgdGhlIFBJTlVTRSBiaXQgc28gZnJlZXMgY2FuIGJlIGNoZWNrZWQuCisqLworCisvKiBNYWxsb2MgdXNpbmcgbW1hcCAqLworc3RhdGljIHZvaWQqIG1tYXBfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgeworICBzaXplX3QgbW1zaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIGlmIChtbXNpemUgPiBuYikgeyAgICAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KKyAgICBjaGFyKiBtbSA9IChjaGFyKikoRElSRUNUX01NQVAobW1zaXplKSk7CisgICAgaWYgKG1tICE9IENNRkFJTCkgeworICAgICAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0obW0pKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG1tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBtY2h1bmtwdHIgcCA9IChtY2h1bmtwdHIpKG1tICsgb2Zmc2V0KTsKKyAgICAgIHAtPnByZXZfZm9vdCA9IG9mZnNldCB8IElTX01NQVBQRURfQklUOworICAgICAgKHApLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIHAsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKG1tIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgbS0+bGVhc3RfYWRkciA9IG1tOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogUmVhbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgbWNodW5rcHRyIG1tYXBfcmVzaXplKG1zdGF0ZSBtLCBtY2h1bmtwdHIgb2xkcCwgc2l6ZV90IG5iKSB7CisgIHNpemVfdCBvbGRzaXplID0gY2h1bmtzaXplKG9sZHApOworICBpZiAoaXNfc21hbGwobmIpKSAvKiBDYW4ndCBzaHJpbmsgbW1hcCByZWdpb25zIGJlbG93IHNtYWxsIHNpemUgKi8KKyAgICByZXR1cm4gMDsKKyAgLyogS2VlcCBvbGQgY2h1bmsgaWYgYmlnIGVub3VnaCBidXQgbm90IHRvbyBiaWcgKi8KKyAgaWYgKG9sZHNpemUgPj0gbmIgKyBTSVpFX1RfU0laRSAmJgorICAgICAgKG9sZHNpemUgLSBuYikgPD0gKG1wYXJhbXMuZ3JhbnVsYXJpdHkgPDwgMSkpCisgICAgcmV0dXJuIG9sZHA7CisgIGVsc2UgeworICAgIHNpemVfdCBvZmZzZXQgPSBvbGRwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQ7CisgICAgc2l6ZV90IG9sZG1tc2l6ZSA9IG9sZHNpemUgKyBvZmZzZXQgKyBNTUFQX0ZPT1RfUEFEOworICAgIHNpemVfdCBuZXdtbXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDSFVOS19BTElHTl9NQVNLKTsKKyAgICBjaGFyKiBjcCA9IChjaGFyKilDQUxMX01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRtbXNpemUsIG5ld21tc2l6ZSwgMSk7CisgICAgaWYgKGNwICE9IENNRkFJTCkgeworICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKShjcCArIG9mZnNldCk7CisgICAgICBzaXplX3QgcHNpemUgPSBuZXdtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbmV3cC0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgIG0tPmxlYXN0X2FkZHIgPSBjcDsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG5ld21tc2l6ZSAtIG9sZG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbXNwYWNlIG1hbmFnZW1lbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5pdGlhbGl6ZSB0b3AgY2h1bmsgYW5kIGl0cyBzaXplICovCitzdGF0aWMgdm9pZCBpbml0X3RvcChtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkgeworICAvKiBFbnN1cmUgYWxpZ25tZW50ICovCisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHApKTsKKyAgcCA9IChtY2h1bmtwdHIpKChjaGFyKilwICsgb2Zmc2V0KTsKKyAgcHNpemUgLT0gb2Zmc2V0OworCisgIG0tPnRvcCA9IHA7CisgIG0tPnRvcHNpemUgPSBwc2l6ZTsKKyAgcC0+aGVhZCA9IHBzaXplIHwgUElOVVNFX0JJVDsKKyAgLyogc2V0IHNpemUgb2YgZmFrZSB0cmFpbGluZyBjaHVuayBob2xkaW5nIG92ZXJoZWFkIHNwYWNlIG9ubHkgb25jZSAqLworICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBUT1BfRk9PVF9TSVpFOworICBtLT50cmltX2NoZWNrID0gbXBhcmFtcy50cmltX3RocmVzaG9sZDsgLyogcmVzZXQgb24gZWFjaCB1cGRhdGUgKi8KK30KKworLyogSW5pdGlhbGl6ZSBiaW5zIGZvciBhIG5ldyBtc3RhdGUgdGhhdCBpcyBvdGhlcndpc2UgemVyb2VkIG91dCAqLworc3RhdGljIHZvaWQgaW5pdF9iaW5zKG1zdGF0ZSBtKSB7CisgIC8qIEVzdGFibGlzaCBjaXJjdWxhciBsaW5rcyBmb3Igc21hbGxiaW5zICovCisgIGJpbmRleF90IGk7CisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpIHsKKyAgICBzYmlucHRyIGJpbiA9IHNtYWxsYmluX2F0KG0saSk7CisgICAgYmluLT5mZCA9IGJpbi0+YmsgPSBiaW47CisgIH0KK30KKworI2lmIFBST0NFRURfT05fRVJST1IKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pIHsKKyAgaW50IGk7CisgICsrbWFsbG9jX2NvcnJ1cHRpb25fZXJyb3JfY291bnQ7CisgIC8qIFJlaW5pdGlhbGl6ZSBmaWVsZHMgdG8gZm9yZ2V0IGFib3V0IGFsbCBtZW1vcnkgKi8KKyAgbS0+c21hbGxiaW5zID0gbS0+dHJlZWJpbnMgPSAwOworICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsKKyAgbS0+c2VnLmJhc2UgPSAwOworICBtLT5zZWcuc2l6ZSA9IDA7CisgIG0tPnNlZy5uZXh0ID0gMDsKKyAgbS0+dG9wID0gbS0+ZHYgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgKnRyZWViaW5fYXQobSwgaSkgPSAwOworICBpbml0X2JpbnMobSk7Cit9CisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiBBbGxvY2F0ZSBjaHVuayBhbmQgcHJlcGVuZCByZW1haW5kZXIgd2l0aCBjaHVuayBpbiBzdWNjZXNzb3IgYmFzZS4gKi8KK3N0YXRpYyB2b2lkKiBwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyKiBuZXdiYXNlLCBjaGFyKiBvbGRiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5iKSB7CisgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7CisgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOworICBzaXplX3QgcHNpemUgPSAoY2hhciopb2xkZmlyc3QgLSAoY2hhciopcDsKKyAgbWNodW5rcHRyIHEgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgIHNpemVfdCBxc2l6ZSA9IHBzaXplIC0gbmI7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworCisgIGFzc2VydCgoY2hhciopb2xkZmlyc3QgPiAoY2hhciopcSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9CisgIGVsc2UgaWYgKG9sZGZpcnN0ID09IG0tPmR2KSB7CisgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOworICAgIG0tPmR2ID0gcTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocSwgZHNpemUpOworICB9CisgIGVsc2UgeworICAgIGlmICghY2ludXNlKG9sZGZpcnN0KSkgeworICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG9sZGZpcnN0KTsKKyAgICAgIHVubGlua19jaHVuayhtLCBvbGRmaXJzdCwgbnNpemUpOworICAgICAgb2xkZmlyc3QgPSBjaHVua19wbHVzX29mZnNldChvbGRmaXJzdCwgbnNpemUpOworICAgICAgcXNpemUgKz0gbnNpemU7CisgICAgfQorICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHFzaXplLCBvbGRmaXJzdCk7CisgICAgaW5zZXJ0X2NodW5rKG0sIHEsIHFzaXplKTsKKyAgICBjaGVja19mcmVlX2NodW5rKG0sIHEpOworICB9CisKKyAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgIHJldHVybiBjaHVuazJtZW0ocCk7Cit9CisKKworLyogQWRkIGEgc2VnbWVudCB0byBob2xkIGEgbmV3IG5vbmNvbnRpZ3VvdXMgcmVnaW9uICovCitzdGF0aWMgdm9pZCBhZGRfc2VnbWVudChtc3RhdGUgbSwgY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpIHsKKyAgLyogRGV0ZXJtaW5lIGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLworICBjaGFyKiBvbGRfdG9wID0gKGNoYXIqKW0tPnRvcDsKKyAgbXNlZ21lbnRwdHIgb2xkc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgb2xkX3RvcCk7CisgIGNoYXIqIG9sZF9lbmQgPSBvbGRzcC0+YmFzZSArIG9sZHNwLT5zaXplOworICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7CisgIGNoYXIqIHJhd3NwID0gb2xkX2VuZCAtIChzc2l6ZSArIEZPVVJfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHJhd3NwKSk7CisgIGNoYXIqIGFzcCA9IHJhd3NwICsgb2Zmc2V0OworICBjaGFyKiBjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5fQ0hVTktfU0laRSkpPyBvbGRfdG9wIDogYXNwOworICBtY2h1bmtwdHIgc3AgPSAobWNodW5rcHRyKWNzcDsKKyAgbXNlZ21lbnRwdHIgc3MgPSAobXNlZ21lbnRwdHIpKGNodW5rMm1lbShzcCkpOworICBtY2h1bmtwdHIgdG5leHQgPSBjaHVua19wbHVzX29mZnNldChzcCwgc3NpemUpOworICBtY2h1bmtwdHIgcCA9IHRuZXh0OworICBpbnQgbmZlbmNlcyA9IDA7CisKKyAgLyogcmVzZXQgdG9wIHRvIG5ldyBzcGFjZSAqLworICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworCisgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLworICBhc3NlcnQoaXNfYWxpZ25lZChzcykpOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHNwLCBzc2l6ZSk7CisgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBtbWFwcGVkKTsKKyAgbS0+c2VnLm5leHQgPSBzczsKKworICAvKiBJbnNlcnQgdHJhaWxpbmcgZmVuY2Vwb3N0cyAqLworICBmb3IgKDs7KSB7CisgICAgbWNodW5rcHRyIG5leHRwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOworICAgIHAtPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICArK25mZW5jZXM7CisgICAgaWYgKChjaGFyKikoJihuZXh0cC0+aGVhZCkpIDwgb2xkX2VuZCkKKyAgICAgIHAgPSBuZXh0cDsKKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgfQorICBhc3NlcnQobmZlbmNlcyA+PSAyKTsKKworICAvKiBJbnNlcnQgdGhlIHJlc3Qgb2Ygb2xkIHRvcCBpbnRvIGEgYmluIGFzIGFuIG9yZGluYXJ5IGZyZWUgY2h1bmsgKi8KKyAgaWYgKGNzcCAhPSBvbGRfdG9wKSB7CisgICAgbWNodW5rcHRyIHEgPSAobWNodW5rcHRyKW9sZF90b3A7CisgICAgc2l6ZV90IHBzaXplID0gY3NwIC0gb2xkX3RvcDsKKyAgICBtY2h1bmtwdHIgdG4gPSBjaHVua19wbHVzX29mZnNldChxLCBwc2l6ZSk7CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcHNpemUsIHRuKTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcHNpemUpOworICB9CisKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gdXNpbmcgTU9SRUNPUkUgb3IgTU1BUCAqLworc3RhdGljIHZvaWQqIHN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIGNoYXIqIHRiYXNlID0gQ01GQUlMOworICBzaXplX3QgdHNpemUgPSAwOworICBmbGFnX3QgbW1hcF9mbGFnID0gMDsKKworICBpbml0X21wYXJhbXMoKTsKKworICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzICovCisgIGlmICh1c2VfbW1hcChtKSAmJiBuYiA+PSBtcGFyYW1zLm1tYXBfdGhyZXNob2xkKSB7CisgICAgdm9pZCogbWVtID0gbW1hcF9hbGxvYyhtLCBuYik7CisgICAgaWYgKG1lbSAhPSAwKQorICAgICAgcmV0dXJuIG1lbTsKKyAgfQorCisgIC8qCisgICAgVHJ5IGdldHRpbmcgbWVtb3J5IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bworICAgIGxlYXN0LXByZWZlcnJlZCBvcmRlcik6CisgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1hbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgTU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcgorICAgICAgIG9yIG1haW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQpCisgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NTUFQKS4KKyAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1PUkVDT1JFIGlzIHVuYWJsZSB0bworICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcworICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3VzIHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwCisgICAgICAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2UKKyAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0bworICAgICAgIGZpbmQgc3BhY2UuCisgICAgMy4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQorICAqLworCisgIGlmIChNT1JFQ09SRV9DT05USUdVT1VTICYmICF1c2Vfbm9uY29udGlndW91cyhtKSkgeworICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgIG1zZWdtZW50cHRyIHNzID0gKG0tPnRvcCA9PSAwKT8gMCA6IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKyAgICBzaXplX3QgYXNpemUgPSAwOworICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOworCisgICAgaWYgKHNzID09IDApIHsgIC8qIEZpcnN0IHRpbWUgdGhyb3VnaCBvciByZWNvdmVyeSAqLworICAgICAgY2hhciogYmFzZSA9IChjaGFyKilDQUxMX01PUkVDT1JFKDApOworICAgICAgaWYgKGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICAgIGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgICAgIC8qIEFkanVzdCB0byBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5ICovCisgICAgICAgIGlmICghaXNfcGFnZV9hbGlnbmVkKGJhc2UpKQorICAgICAgICAgIGFzaXplICs9IChwYWdlX2FsaWduKChzaXplX3QpYmFzZSkgLSAoc2l6ZV90KWJhc2UpOworICAgICAgICAvKiBDYW4ndCBjYWxsIE1PUkVDT1JFIGlmIHNpemUgaXMgbmVnYXRpdmUgd2hlbiB0cmVhdGVkIGFzIHNpZ25lZCAqLworICAgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBiYXNlKSB7CisgICAgICAgICAgdGJhc2UgPSBiYXNlOworICAgICAgICAgIHRzaXplID0gYXNpemU7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3RpbmcgYXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovCisgICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iIC0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLworICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IHNzLT5iYXNlK3NzLT5zaXplKSB7CisgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgIHRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKHRiYXNlID09IENNRkFJTCkgeyAgICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovCisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFRyeSB0byB1c2UvZXh0ZW5kIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisgICAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgICAgYXNpemUgPCBuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKSB7CisgICAgICAgICAgc2l6ZV90IGVzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSAtIGFzaXplKTsKKyAgICAgICAgICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgICAgICAgIGNoYXIqIGVuZCA9IChjaGFyKilDQUxMX01PUkVDT1JFKGVzaXplKTsKKyAgICAgICAgICAgIGlmIChlbmQgIT0gQ01GQUlMKQorICAgICAgICAgICAgICBhc2l6ZSArPSBlc2l6ZTsKKyAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIC8qIENhbid0IHVzZTsgdHJ5IHRvIHJlbGVhc2UgKi8KKyAgICAgICAgICAgICAgKHZvaWQpQ0FMTF9NT1JFQ09SRSgtYXNpemUpOworICAgICAgICAgICAgICBiciA9IENNRkFJTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgIHRzaXplID0gYXNpemU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGRpc2FibGVfY29udGlndW91cyhtKTsgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovCisgICAgfQorCisgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgIH0KKworICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgeyAgLyogVHJ5IE1NQVAgKi8KKyAgICBzaXplX3QgcmVxID0gbmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORTsKKyAgICBzaXplX3QgcnNpemUgPSBncmFudWxhcml0eV9hbGlnbihyZXEpOworICAgIGlmIChyc2l6ZSA+IG5iKSB7IC8qIEZhaWwgaWYgd3JhcHMgYXJvdW5kIHplcm8gKi8KKyAgICAgIGNoYXIqIG1wID0gKGNoYXIqKShDQUxMX01NQVAocnNpemUpKTsKKyAgICAgIGlmIChtcCAhPSBDTUZBSUwpIHsKKyAgICAgICAgdGJhc2UgPSBtcDsKKyAgICAgICAgdHNpemUgPSByc2l6ZTsKKyAgICAgICAgbW1hcF9mbGFnID0gSVNfTU1BUFBFRF9CSVQ7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSB7IC8qIFRyeSBub25jb250aWd1b3VzIE1PUkVDT1JFICovCisgICAgc2l6ZV90IGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICBjaGFyKiBiciA9IENNRkFJTDsKKyAgICAgIGNoYXIqIGVuZCA9IENNRkFJTDsKKyAgICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOworICAgICAgYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKTsKKyAgICAgIGVuZCA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkgeworICAgICAgICBzaXplX3Qgc3NpemUgPSBlbmQgLSBicjsKKyAgICAgICAgaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7CisgICAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgICB0c2l6ZSA9IHNzaXplOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworCisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisKKyAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBfZmxhZyk7CisgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgICAgICBpbml0X2JpbnMobSk7CisgICAgICBpZiAoaXNfZ2xvYmFsKG0pKSAKKyAgICAgICAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgIGVsc2UgeworICAgICAgICAvKiBPZmZzZXQgdG9wIGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLworICAgICAgICBtY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgICAgICAgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC1UT1BfRk9PVF9TSVpFKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21lbnQgKi8KKyAgICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgICAgIHdoaWxlIChzcCAhPSAwICYmIHRiYXNlICE9IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICBpZiAoc3AgIT0gMCAmJgorICAgICAgICAgICFpc19leHRlcm5fc2VnbWVudChzcCkgJiYKKwkgIGNoZWNrX3NlZ21lbnRfbWVyZ2Uoc3AsIHRiYXNlLCB0c2l6ZSkgJiYKKyAgICAgICAgICAoZ2V0X3NlZ21lbnRfZmxhZ3Moc3ApICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZyAmJgorICAgICAgICAgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCisgICAgICAgIHNwLT5zaXplICs9IHRzaXplOworICAgICAgICBpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgKyB0c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICAgIHNwID0gJm0tPnNlZzsKKyAgICAgICAgd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKKyAgICAgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgICBpZiAoc3AgIT0gMCAmJgorICAgICAgICAgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgorCSAgICBjaGVja19zZWdtZW50X21lcmdlKHNwLCB0YmFzZSwgdHNpemUpICYmCisgICAgICAgICAgICAoZ2V0X3NlZ21lbnRfZmxhZ3Moc3ApICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZykgeworICAgICAgICAgIGNoYXIqIG9sZGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgICAgICBzcC0+YmFzZSA9IHRiYXNlOworICAgICAgICAgIHNwLT5zaXplICs9IHRzaXplOworICAgICAgICAgIHJldHVybiBwcmVwZW5kX2FsbG9jKG0sIHRiYXNlLCBvbGRiYXNlLCBuYik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGFkZF9zZWdtZW50KG0sIHRiYXNlLCB0c2l6ZSwgbW1hcF9mbGFnKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPCBtLT50b3BzaXplKSB7IC8qIEFsbG9jYXRlIGZyb20gbmV3IG9yIGV4dGVuZGVkIHRvcCBzcGFjZSAqLworICAgICAgc2l6ZV90IHJzaXplID0gbS0+dG9wc2l6ZSAtPSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOworICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKKyAgICB9CisgIH0KKworICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgc3lzdGVtIGRlYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVbm1hcCBhbmQgdW5saW5rIGFueSBtbWFwcGVkIHNlZ21lbnRzIHRoYXQgZG9uJ3QgY29udGFpbiB1c2VkIGNodW5rcyAqLworc3RhdGljIHNpemVfdCByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhtc3RhdGUgbSkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBtc2VnbWVudHB0ciBwcmVkID0gJm0tPnNlZzsKKyAgbXNlZ21lbnRwdHIgc3AgPSBwcmVkLT5uZXh0OworICB3aGlsZSAoc3AgIT0gMCkgeworICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgIG1zZWdtZW50cHRyIG5leHQgPSBzcC0+bmV4dDsKKyAgICBpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSAmJiAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKGJhc2UpOworICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgLyogQ2FuIHVubWFwIGlmIGZpcnN0IGNodW5rIGhvbGRzIGVudGlyZSBzZWdtZW50IGFuZCBub3QgcGlubmVkICovCisgICAgICBpZiAoIWNpbnVzZShwKSAmJiAoY2hhciopcCArIHBzaXplID49IGJhc2UgKyBzaXplIC0gVE9QX0ZPT1RfU0laRSkgeworICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisgICAgICAgIGFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoY2hhciopc3ApKTsKKyAgICAgICAgaWYgKHAgPT0gbS0+ZHYpIHsKKyAgICAgICAgICBtLT5kdiA9IDA7CisgICAgICAgICAgbS0+ZHZzaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdHApOworICAgICAgICB9CisgICAgICAgIGlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKSB7CisgICAgICAgICAgcmVsZWFzZWQgKz0gc2l6ZTsKKyAgICAgICAgICBtLT5mb290cHJpbnQgLT0gc2l6ZTsKKyAgICAgICAgICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLworICAgICAgICAgIHNwID0gcHJlZDsKKyAgICAgICAgICBzcC0+bmV4dCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7IC8qIGJhY2sgb3V0IGlmIGNhbm5vdCB1bm1hcCAqLworICAgICAgICAgIGluc2VydF9sYXJnZV9jaHVuayhtLCB0cCwgcHNpemUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIHByZWQgPSBzcDsKKyAgICBzcCA9IG5leHQ7CisgIH0KKyAgcmV0dXJuIHJlbGVhc2VkOworfQorCitzdGF0aWMgaW50IHN5c190cmltKG1zdGF0ZSBtLCBzaXplX3QgcGFkKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGlmIChwYWQgPCBNQVhfUkVRVUVTVCAmJiBpc19pbml0aWFsaXplZChtKSkgeworICAgIHBhZCArPSBUT1BfRk9PVF9TSVpFOyAvKiBlbnN1cmUgZW5vdWdoIHJvb20gZm9yIHNlZ21lbnQgb3ZlcmhlYWQgKi8KKworICAgIGlmIChtLT50b3BzaXplID4gcGFkKSB7CisgICAgICAvKiBTaHJpbmsgdG9wIHNwYWNlIGluIGdyYW51bGFyaXR5LXNpemUgdW5pdHMsIGtlZXBpbmcgYXQgbGVhc3Qgb25lICovCisgICAgICBzaXplX3QgdW5pdCA9IG1wYXJhbXMuZ3JhbnVsYXJpdHk7CisgICAgICBzaXplX3QgZXh0cmEgPSAoKG0tPnRvcHNpemUgLSBwYWQgKyAodW5pdCAtIFNJWkVfVF9PTkUpKSAvIHVuaXQgLQorICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpICogdW5pdDsKKyAgICAgIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworCisgICAgICBpZiAoIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgICBpZiAoaXNfbW1hcHBlZF9zZWdtZW50KHNwKSkgeworICAgICAgICAgIGlmIChIQVZFX01NQVAgJiYKKyAgICAgICAgICAgICAgc3AtPnNpemUgPj0gZXh0cmEgJiYKKyAgICAgICAgICAgICAgIWhhc19zZWdtZW50X2xpbmsobSwgc3ApKSB7IC8qIGNhbid0IHNocmluayBpZiBwaW5uZWQgKi8KKyAgICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gc3AtPnNpemUgLSBleHRyYTsKKyAgICAgICAgICAgIC8qIFByZWZlciBtcmVtYXAsIGZhbGwgYmFjayB0byBtdW5tYXAgKi8KKyAgICAgICAgICAgIGlmICgoQ0FMTF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBuZXdzaXplLCAwKSAhPSBNRkFJTCkgfHwKKyAgICAgICAgICAgICAgICAoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgcmVsZWFzZWQgPSBleHRyYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkgeworICAgICAgICAgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisgICAgICAgICAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIHVuaXQ7CisgICAgICAgICAgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICAgICAgeworICAgICAgICAgICAgLyogTWFrZSBzdXJlIGVuZCBvZiBtZW1vcnkgaXMgd2hlcmUgd2UgbGFzdCBzZXQgaXQuICovCisgICAgICAgICAgICBjaGFyKiBvbGRfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgICAgICAgaWYgKG9sZF9iciA9PSBzcC0+YmFzZSArIHNwLT5zaXplKSB7CisgICAgICAgICAgICAgIGNoYXIqIHJlbF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgtZXh0cmEpKTsKKyAgICAgICAgICAgICAgY2hhciogbmV3X2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgICAgaWYgKHJlbF9iciAhPSBDTUZBSUwgJiYgbmV3X2JyIDwgb2xkX2JyKQorICAgICAgICAgICAgICAgIHJlbGVhc2VkID0gb2xkX2JyIC0gbmV3X2JyOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocmVsZWFzZWQgIT0gMCkgeworICAgICAgICBzcC0+c2l6ZSAtPSByZWxlYXNlZDsKKyAgICAgICAgbS0+Zm9vdHByaW50IC09IHJlbGVhc2VkOworICAgICAgICBpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgLSByZWxlYXNlZCk7CisgICAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgfQorICAgIH0KKworICAgIC8qIFVubWFwIGFueSB1bnVzZWQgbW1hcHBlZCBzZWdtZW50cyAqLworICAgIGlmIChIQVZFX01NQVApIAorICAgICAgcmVsZWFzZWQgKz0gcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobSk7CisKKyAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmltIHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8KKyAgICBpZiAocmVsZWFzZWQgPT0gMCkKKyAgICAgIG0tPnRyaW1fY2hlY2sgPSBNQVhfU0laRV9UOworICB9CisKKyAgcmV0dXJuIChyZWxlYXNlZCAhPSAwKT8gMSA6IDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGFsbG9jYXRlIGEgbGFyZ2UgcmVxdWVzdCBmcm9tIHRoZSBiZXN0IGZpdHRpbmcgY2h1bmsgaW4gYSB0cmVlYmluICovCitzdGF0aWMgdm9pZCogdG1hbGxvY19sYXJnZShtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIHRjaHVua3B0ciB2ID0gMDsKKyAgc2l6ZV90IHJzaXplID0gLW5iOyAvKiBVbnNpZ25lZCBuZWdhdGlvbiAqLworICB0Y2h1bmtwdHIgdDsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgobmIsIGlkeCk7CisKKyAgaWYgKCh0ID0gKnRyZWViaW5fYXQobSwgaWR4KSkgIT0gMCkgeworICAgIC8qIFRyYXZlcnNlIHRyZWUgZm9yIHRoaXMgYmluIGxvb2tpbmcgZm9yIG5vZGUgd2l0aCBzaXplID09IG5iICovCisgICAgc2l6ZV90IHNpemViaXRzID0gbmIgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7CisgICAgdGNodW5rcHRyIHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICB0Y2h1bmtwdHIgcnQ7CisgICAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgICB2ID0gdDsKKyAgICAgICAgaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBydCA9IHQtPmNoaWxkWzFdOworICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICBpZiAocnQgIT0gMCAmJiBydCAhPSB0KQorICAgICAgICByc3QgPSBydDsKKyAgICAgIGlmICh0ID09IDApIHsKKyAgICAgICAgdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzaXplYml0cyA8PD0gMTsKKyAgICB9CisgIH0KKworICBpZiAodCA9PSAwICYmIHYgPT0gMCkgeyAvKiBzZXQgdCB0byByb290IG9mIG5leHQgbm9uLWVtcHR5IHRyZWViaW4gKi8KKyAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IGxlZnRfYml0cyhpZHgyYml0KGlkeCkpICYgbS0+dHJlZW1hcDsKKyAgICBpZiAobGVmdGJpdHMgIT0gMCkgeworICAgICAgYmluZGV4X3QgaTsKKyAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgICAgfQorICB9CisKKyAgd2hpbGUgKHQgIT0gMCkgeyAvKiBmaW5kIHNtYWxsZXN0IG9mIHRyZWUgb3Igc3VidHJlZSAqLworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICAgIHQgPSBsZWZ0bW9zdF9jaGlsZCh0KTsKKyAgfQorCisgIC8qICBJZiBkdiBpcyBhIGJldHRlciBmaXQsIHJldHVybiAwIHNvIG1hbGxvYyB3aWxsIHVzZSBpdCAqLworICBpZiAodiAhPSAwICYmIHJzaXplIDwgKHNpemVfdCkobS0+ZHZzaXplIC0gbmIpKSB7CisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsgLyogc3BsaXQgKi8KKyAgICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKyAgICAgICAgaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICBpbnNlcnRfY2h1bmsobSwgciwgcnNpemUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaHVuazJtZW0odik7CisgICAgICB9CisgICAgfQorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICB9CisgIHJldHVybiAwOworfQorCisvKiBhbGxvY2F0ZSBhIHNtYWxsIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2Nfc21hbGwobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdCwgdjsKKyAgc2l6ZV90IHJzaXplOworICBiaW5kZXhfdCBpOworICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChtLT50cmVlbWFwKTsKKyAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKKworICB2ID0gdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICByc2l6ZSA9IGNodW5rc2l6ZSh0KSAtIG5iOworCisgIHdoaWxlICgodCA9IGxlZnRtb3N0X2NoaWxkKHQpKSAhPSAwKSB7CisgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICBpZiAodHJlbSA8IHJzaXplKSB7CisgICAgICByc2l6ZSA9IHRyZW07CisgICAgICB2ID0gdDsKKyAgICB9CisgIH0KKworICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHYpKSkgeworICAgIG1jaHVua3B0ciByID0gY2h1bmtfcGx1c19vZmZzZXQodiwgbmIpOworICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dCh2LCByKSkpIHsKKyAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB2KTsKKyAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtLCB2LCAocnNpemUgKyBuYikpOworICAgICAgZWxzZSB7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICByZXBsYWNlX2R2KG0sIHIsIHJzaXplKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0odik7CisgICAgfQorICB9CisKKyAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcmVhbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfcmVhbGxvYyhtc3RhdGUgbSwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyAgICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKKyAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZHAsIG9sZHNpemUpOworICAgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgICB2b2lkKiBleHRyYSA9IDA7CisKKyAgICAvKiBUcnkgdG8gZWl0aGVyIHNocmluayBvciBleHRlbmQgaW50byB0b3AuIEVsc2UgbWFsbG9jLWNvcHktZnJlZSAqLworCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCBvbGRwKSAmJiBva19jaW51c2Uob2xkcCkgJiYKKyAgICAgICAgICAgICAgICBva19uZXh0KG9sZHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBpZiAoaXNfbW1hcHBlZChvbGRwKSkKKyAgICAgICAgbmV3cCA9IG1tYXBfcmVzaXplKG0sIG9sZHAsIG5iKTsKKyAgICAgIGVsc2UgaWYgKG9sZHNpemUgPj0gbmIpIHsgLyogYWxyZWFkeSBiaWcgZW5vdWdoICovCisgICAgICAgIHNpemVfdCByc2l6ZSA9IG9sZHNpemUgLSBuYjsKKyAgICAgICAgbmV3cCA9IG9sZHA7CisgICAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeworICAgICAgICAgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChuZXdwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIG5ld3AsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByc2l6ZSk7CisgICAgICAgICAgZXh0cmEgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKKyAgICAgICAgfQorICAgICAgfQorICAgICAgZWxzZSBpZiAobmV4dCA9PSBtLT50b3AgJiYgb2xkc2l6ZSArIG0tPnRvcHNpemUgPiBuYikgeworICAgICAgICAvKiBFeHBhbmQgaW50byB0b3AgKi8KKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgbS0+dG9wc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld3RvcHNpemUgPSBuZXdzaXplIC0gbmI7CisgICAgICAgIG1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBuYik7CisgICAgICAgIHNldF9pbnVzZShtLCBvbGRwLCBuYik7CisgICAgICAgIG5ld3RvcC0+aGVhZCA9IG5ld3RvcHNpemUgfFBJTlVTRV9CSVQ7CisgICAgICAgIG0tPnRvcCA9IG5ld3RvcDsKKyAgICAgICAgbS0+dG9wc2l6ZSA9IG5ld3RvcHNpemU7CisgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFBPU1RBQ1RJT04obSk7CisKKyAgICBpZiAobmV3cCAhPSAwKSB7CisgICAgICBpZiAoZXh0cmEgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIGV4dHJhKTsKKyAgICAgIH0KKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIGNodW5rMm1lbShuZXdwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICB2b2lkKiBuZXdtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICAgICAgaWYgKG5ld21lbSAhPSAwKSB7CisgICAgICAgIHNpemVfdCBvYyA9IG9sZHNpemUgLSBvdmVyaGVhZF9mb3Iob2xkcCk7CisgICAgICAgIG1lbWNweShuZXdtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBvbGRtZW0pOworICAgICAgfQorICAgICAgcmV0dXJuIG5ld21lbTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtZW1hbGlnbiBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBpbnRlcm5hbF9tZW1hbGlnbihtc3RhdGUgbSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgICAgLyogQ2FuIGp1c3QgdXNlIG1hbGxvYyAqLworICAgIHJldHVybiBpbnRlcm5hbF9tYWxsb2MobSwgYnl0ZXMpOworICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovCisgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudC1TSVpFX1RfT05FKSkgIT0gMCkgey8qIEVuc3VyZSBhIHBvd2VyIG9mIDIgKi8KKyAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICB9CisgIAorICBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpIHsKKyAgICBpZiAobSAhPSAwKSAgeyAvKiBUZXN0IGlzbid0IG5lZWRlZCBidXQgYXZvaWRzIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyAgICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICBzaXplX3QgcmVxID0gbmIgKyBhbGlnbm1lbnQgKyBNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEOworICAgIGNoYXIqIG1lbSA9IChjaGFyKilpbnRlcm5hbF9tYWxsb2MobSwgcmVxKTsKKyAgICBpZiAobWVtICE9IDApIHsKKyAgICAgIHZvaWQqIGxlYWRlciA9IDA7CisgICAgICB2b2lkKiB0cmFpbGVyID0gMDsKKyAgICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisKKyAgICAgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICAgICAgaWYgKCgoKHNpemVfdCkobWVtKSkgJSBhbGlnbm1lbnQpICE9IDApIHsgLyogbWlzYWxpZ25lZCAqLworICAgICAgICAvKgorICAgICAgICAgIEZpbmQgYW4gYWxpZ25lZCBzcG90IGluc2lkZSBjaHVuay4gIFNpbmNlIHdlIG5lZWQgdG8gZ2l2ZQorICAgICAgICAgIGJhY2sgbGVhZGluZyBzcGFjZSBpbiBhIGNodW5rIG9mIGF0IGxlYXN0IE1JTl9DSFVOS19TSVpFLCBpZgorICAgICAgICAgIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBwbGFjZXMgdXMgYXQgYSBzcG90IHdpdGggbGVzcyB0aGFuCisgICAgICAgICAgTUlOX0NIVU5LX1NJWkUgbGVhZGVyLCB3ZSBjYW4gbW92ZSB0byB0aGUgbmV4dCBhbGlnbmVkIHNwb3QuCisgICAgICAgICAgV2UndmUgYWxsb2NhdGVkIGVub3VnaCB0b3RhbCByb29tIHNvIHRoYXQgdGhpcyBpcyBhbHdheXMKKyAgICAgICAgICBwb3NzaWJsZS4KKyAgICAgICAgKi8KKyAgICAgICAgY2hhciogYnIgPSAoY2hhciopbWVtMmNodW5rKChzaXplX3QpKCgoc2l6ZV90KShtZW0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRV9UX09ORSkpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1hbGlnbm1lbnQpKTsKKyAgICAgICAgY2hhciogcG9zID0gKChzaXplX3QpKGJyIC0gKGNoYXIqKShwKSkgPj0gTUlOX0NIVU5LX1NJWkUpPworICAgICAgICAgIGJyIDogYnIrYWxpZ25tZW50OworICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpcG9zOworICAgICAgICBzaXplX3QgbGVhZHNpemUgPSBwb3MgLSAoY2hhciopKHApOworICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IGNodW5rc2l6ZShwKSAtIGxlYWRzaXplOworCisgICAgICAgIGlmIChpc19tbWFwcGVkKHApKSB7IC8qIEZvciBtbWFwcGVkIGNodW5rcywganVzdCBhZGp1c3Qgb2Zmc2V0ICovCisgICAgICAgICAgbmV3cC0+cHJldl9mb290ID0gcC0+cHJldl9mb290ICsgbGVhZHNpemU7CisgICAgICAgICAgbmV3cC0+aGVhZCA9IChuZXdzaXplfENJTlVTRV9CSVQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBPdGhlcndpc2UsIGdpdmUgYmFjayBsZWFkZXIsIHVzZSB0aGUgcmVzdCAqLworICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbGVhZHNpemUpOworICAgICAgICAgIGxlYWRlciA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgfQorICAgICAgICBwID0gbmV3cDsKKyAgICAgIH0KKworICAgICAgLyogR2l2ZSBiYWNrIHNwYXJlIHJvb20gYXQgdGhlIGVuZCAqLworICAgICAgaWYgKCFpc19tbWFwcGVkKHApKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBpZiAoc2l6ZSA+IG5iICsgTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgICAgICBzaXplX3QgcmVtYWluZGVyX3NpemUgPSBzaXplIC0gbmI7CisgICAgICAgICAgbWNodW5rcHRyIHJlbWFpbmRlciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCByZW1haW5kZXIsIHJlbWFpbmRlcl9zaXplKTsKKyAgICAgICAgICB0cmFpbGVyID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgYXNzZXJ0IChjaHVua3NpemUocCkgPj0gbmIpOworICAgICAgYXNzZXJ0KCgoKHNpemVfdCkoY2h1bmsybWVtKHApKSkgJSBhbGlnbm1lbnQpID09IDApOworICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgICBQT1NUQUNUSU9OKG0pOworICAgICAgaWYgKGxlYWRlciAhPSAwKSB7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgbGVhZGVyKTsKKyAgICAgIH0KKyAgICAgIGlmICh0cmFpbGVyICE9IDApIHsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCB0cmFpbGVyKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY29tYWxsb2MvY29hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCoqIGlhbGxvYyhtc3RhdGUgbSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KiBzaXplcywKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRzLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgLyoKKyAgICBUaGlzIHByb3ZpZGVzIGNvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZworICAgIGFsbCBvZiB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4KKworICAgIFRoZSBvcHRzIGFyZyBoYXM6CisgICAgYml0IDAgc2V0IGlmIGFsbCBlbGVtZW50cyBhcmUgc2FtZSBzaXplICh1c2luZyBzaXplc1swXSkKKyAgICBiaXQgMSBzZXQgaWYgZWxlbWVudHMgc2hvdWxkIGJlIHplcm9lZAorICAqLworCisgIHNpemVfdCAgICBlbGVtZW50X3NpemU7ICAgLyogY2h1bmtzaXplIG9mIGVhY2ggZWxlbWVudCwgaWYgYWxsIHNhbWUgKi8KKyAgc2l6ZV90ICAgIGNvbnRlbnRzX3NpemU7ICAvKiB0b3RhbCBzaXplIG9mIGVsZW1lbnRzICovCisgIHNpemVfdCAgICBhcnJheV9zaXplOyAgICAgLyogcmVxdWVzdCBzaXplIG9mIHBvaW50ZXIgYXJyYXkgKi8KKyAgdm9pZCogICAgIG1lbTsgICAgICAgICAgICAvKiBtYWxsb2NlZCBhZ2dyZWdhdGUgc3BhY2UgKi8KKyAgbWNodW5rcHRyIHA7ICAgICAgICAgICAgICAvKiBjb3JyZXNwb25kaW5nIGNodW5rICovCisgIHNpemVfdCAgICByZW1haW5kZXJfc2l6ZTsgLyogcmVtYWluaW5nIGJ5dGVzIHdoaWxlIHNwbGl0dGluZyAqLworICB2b2lkKiogICAgbWFycmF5OyAgICAgICAgIC8qIGVpdGhlciAiY2h1bmtzIiBvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgbWNodW5rcHRyIGFycmF5X2NodW5rOyAgICAvKiBjaHVuayBmb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIGZsYWdfdCAgICB3YXNfZW5hYmxlZDsgICAgLyogdG8gZGlzYWJsZSBtbWFwICovCisgIHNpemVfdCAgICBzaXplOworICBzaXplX3QgICAgaTsKKworICAvKiBjb21wdXRlIGFycmF5IGxlbmd0aCwgaWYgbmVlZGVkICovCisgIGlmIChjaHVua3MgIT0gMCkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCisgICAgbWFycmF5ID0gY2h1bmtzOworICAgIGFycmF5X3NpemUgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVtcHR5IGFycmF5ICovCisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiAodm9pZCoqKWludGVybmFsX21hbGxvYyhtLCAwKTsKKyAgICBtYXJyYXkgPSAwOworICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCopKSk7CisgIH0KKworICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLworICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwtc2FtZS1zaXplICovCisgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7CisgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7CisgIH0KKyAgZWxzZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCisgICAgZWxlbWVudF9zaXplID0gMDsKKyAgICBjb250ZW50c19zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgfQorCisgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsKKworICAvKgorICAgICBBbGxvY2F0ZSB0aGUgYWdncmVnYXRlIGNodW5rLiAgRmlyc3QgZGlzYWJsZSBkaXJlY3QtbW1hcHBpbmcgc28KKyAgICAgbWFsbG9jIHdvbid0IHVzZSBpdCwgc2luY2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gbGF0ZXIKKyAgICAgZnJlZS9yZWFsbG9jIHNwYWNlIGludGVybmFsIHRvIGEgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KKyAgKi8KKyAgd2FzX2VuYWJsZWQgPSB1c2VfbW1hcChtKTsKKyAgZGlzYWJsZV9tbWFwKG0pOworICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgc2l6ZSAtIENIVU5LX09WRVJIRUFEKTsKKyAgaWYgKHdhc19lbmFibGVkKQorICAgIGVuYWJsZV9tbWFwKG0pOworICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7CisKKyAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsKKworICBpZiAob3B0cyAmIDB4MikgeyAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLworICAgIG1lbXNldCgoc2l6ZV90KiltZW0sIDAsIHJlbWFpbmRlcl9zaXplIC0gU0laRV9UX1NJWkUgLSBhcnJheV9zaXplKTsKKyAgfQorCisgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLworICBpZiAobWFycmF5ID09IDApIHsKKyAgICBzaXplX3QgIGFycmF5X2NodW5rX3NpemU7CisgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsKKyAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOworICAgIG1hcnJheSA9ICh2b2lkKiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmspKTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsKKyAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7CisgIH0KKworICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KKyAgZm9yIChpID0gMDsgOyArK2kpIHsKKyAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7CisgICAgaWYgKGkgIT0gbl9lbGVtZW50cy0xKSB7CisgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApCisgICAgICAgIHNpemUgPSBlbGVtZW50X3NpemU7CisgICAgICBlbHNlCisgICAgICAgIHNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICAgICAgcmVtYWluZGVyX3NpemUgLT0gc2l6ZTsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgc2l6ZSk7CisgICAgICBwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeyAvKiB0aGUgZmluYWwgZWxlbWVudCBhYnNvcmJzIGFueSBvdmVyYWxsb2NhdGlvbiBzbG9wICovCisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHJlbWFpbmRlcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisjaWYgREVCVUcKKyAgaWYgKG1hcnJheSAhPSBjaHVua3MpIHsKKyAgICAvKiBmaW5hbCBlbGVtZW50IG11c3QgaGF2ZSBleGFjdGx5IGV4aGF1c3RlZCBjaHVuayAqLworICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkpOworICAgIH0KKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5KSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheVtpXSkpOworCisjZW5kaWYgLyogREVCVUcgKi8KKworICBQT1NUQUNUSU9OKG0pOworICByZXR1cm4gbWFycmF5OworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAvKgorICAgICBCYXNpYyBhbGdvcml0aG06CisgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92ZXJoZWFkKToKKyAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNodW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uCisgICAgICAgICAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8KKyAgICAgICAgICByZXByZXNlbnQgYXMgYSBjaHVuay4pCisgICAgICAgMi4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSBkdiBjaHVuaywgd2hpY2ggaXMgbm9ybWFsbHkgdGhlCisgICAgICAgICAgY2h1bmsgYWRqYWNlbnQgdG8gdGhlIG9uZSB1c2VkIGZvciB0aGUgbW9zdCByZWNlbnQgc21hbGwgcmVxdWVzdC4KKyAgICAgICAzLiBJZiBvbmUgZXhpc3RzLCBzcGxpdCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGNodW5rIGluIGEgYmluLAorICAgICAgICAgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuCisgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKyAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0OgorICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0CisgICAgICAgICAgaWYgaXQgaXMgYmV0dGVyIGZpdHRpbmcgdGhhbiBkdiBjaHVuaywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAyLiBJZiBiZXR0ZXIgZml0dGluZyB0aGFuIGFueSBiaW5uZWQgY2h1bmssIHVzZSB0aGUgZHYgY2h1bmsuCisgICAgICAgMy4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNC4gSWYgcmVxdWVzdCBzaXplID49IG1tYXAgdGhyZXNob2xkLCB0cnkgdG8gZGlyZWN0bHkgbW1hcCB0aGlzIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisKKyAgICAgVGhlIHVnbHkgZ290bydzIGhlcmUgZW5zdXJlIHRoYXQgcG9zdGFjdGlvbiBvY2N1cnMgYWxvbmcgYWxsIHBhdGhzLgorICAqLworCisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKyAgICAgICAgbWNodW5rcHRyIGIsIHA7CisgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKyAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpZHgpOworICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBnbS0+ZHZzaXplKSB7CisgICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOworICAgICAgICAgIHNpemVfdCByc2l6ZTsKKyAgICAgICAgICBiaW5kZXhfdCBpOworICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsKKyAgICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGkpOworICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICAgICAgcmVwbGFjZV9kdihnbSwgciwgcnNpemUpOworICAgICAgICAgIH0KKyAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkgeworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkgeworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gZ20tPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKyAgICAgICAgbWNodW5rcHRyIHIgPSBnbS0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgIGdtLT5kdnNpemUgPSByc2l6ZTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKyAgICAgICAgc2l6ZV90IGR2cyA9IGdtLT5kdnNpemU7CisgICAgICAgIGdtLT5kdnNpemUgPSAwOworICAgICAgICBnbS0+ZHYgPSAwOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IGdtLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IGdtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKGdtLCBnbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MoZ20sIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04oZ20pOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBkbGZyZWUodm9pZCogbWVtKSB7CisgIC8qCisgICAgIENvbnNvbGlkYXRlIGZyZWVkIGNodW5rcyB3aXRoIHByZWNlZWRpbmcgb3Igc3VjY2VlZGluZyBib3JkZXJpbmcKKyAgICAgZnJlZSBjaHVua3MsIGlmIHRoZXkgZXhpc3QsIGFuZCB0aGVuIHBsYWNlIGluIGEgYmluLiAgSW50ZXJtaXhlZAorICAgICB3aXRoIHNwZWNpYWwgY2FzZXMgZm9yIHRvcCwgZHYsIG1tYXBwZWQgY2h1bmtzLCBhbmQgdXNhZ2UgZXJyb3JzLgorICAqLworCisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyAgICBpZiAoIW9rX21hZ2ljKGZtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIGZtIGdtCisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgICAgICBpZiAoIXBpbnVzZShwKSkgeworICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKyAgICAgICAgICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikgeworICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT50b3AgPSBwOworICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPmR2ID0gcDsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICBpbnNlcnRfY2h1bmsoZm0sIHAsIHBzaXplKTsKKyAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorI2lmICFGT09URVJTCisjdW5kZWYgZm0KKyNlbmRpZiAvKiBGT09URVJTICovCit9CisKK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorICAgICAgICAocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gZGxtYWxsb2MocmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBkbHJlYWxsb2Modm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBkbG1hbGxvYyhieXRlcyk7CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGlmIChieXRlcyA9PSAwKSB7CisgICAgZGxmcmVlKG9sZG1lbSk7CisgICAgcmV0dXJuIDA7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisjaWYgISBGT09URVJTCisgICAgbXN0YXRlIG0gPSBnbTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgbSA9IGdldF9tc3RhdGVfZm9yKG1lbTJjaHVuayhvbGRtZW0pKTsKKyAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobSwgb2xkbWVtLCBieXRlcyk7CisgIH0KK30KKwordm9pZCogZGxtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpIHsKKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKGdtLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgeworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKK30KKwordm9pZCogZGx2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGluaXRfbXBhcmFtcygpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCBieXRlcyk7Cit9CisKK3ZvaWQqIGRscHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHBhZ2VzejsKKyAgaW5pdF9tcGFyYW1zKCk7CisgIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOworICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7Cit9CisKK2ludCBkbG1hbGxvY190cmltKHNpemVfdCBwYWQpIHsKKyAgaW50IHJlc3VsdCA9IDA7CisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHJlc3VsdCA9IHN5c190cmltKGdtLCBwYWQpOworICAgIFBPU1RBQ1RJT04oZ20pOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3NpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPmZvb3RwcmludDsKK30KKworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCkgeworICByZXR1cm4gZ20tPm1heF9mb290cHJpbnQ7Cit9CisKKyNpZiAhTk9fTUFMTElORk8KK3N0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpIHsKKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKGdtKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCit2b2lkIGRsbWFsbG9jX3N0YXRzKCkgeworICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMoZ20pOworfQorCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgaWYgKGNpbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1c2VyIG1zcGFjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgTVNQQUNFUworCitzdGF0aWMgbXN0YXRlIGluaXRfdXNlcl9tc3RhdGUoY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSkgeworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBtY2h1bmtwdHIgbW47CisgIG1jaHVua3B0ciBtc3AgPSBhbGlnbl9hc19jaHVuayh0YmFzZSk7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSkoY2h1bmsybWVtKG1zcCkpOworICBtZW1zZXQobSwgMCwgbXNpemUpOworICBJTklUSUFMX0xPQ0soJm0tPm11dGV4KTsKKyAgbXNwLT5oZWFkID0gKG1zaXplfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IG0tPmZvb3RwcmludCA9IG0tPm1heF9mb290cHJpbnQgPSB0c2l6ZTsKKyAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICBtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7CisgIGluaXRfYmlucyhtKTsKKyAgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC0gVE9QX0ZPT1RfU0laRSk7CisgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICByZXR1cm4gbTsKK30KKworbXNwYWNlIGNyZWF0ZV9tc3BhY2Uoc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaW5pdF9tcGFyYW1zKCk7IC8qIEVuc3VyZSBwYWdlc2l6ZSBldGMgaW5pdGlhbGl6ZWQgKi8KKworICBpZiAoY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIHNpemVfdCBycyA9ICgoY2FwYWNpdHkgPT0gMCk/IG1wYXJhbXMuZ3JhbnVsYXJpdHkgOgorICAgICAgICAgICAgICAgICAoY2FwYWNpdHkgKyBUT1BfRk9PVF9TSVpFICsgbXNpemUpKTsKKyAgICBzaXplX3QgdHNpemUgPSBncmFudWxhcml0eV9hbGlnbihycyk7CisgICAgY2hhciogdGJhc2UgPSAoY2hhciopKENBTExfTU1BUCh0c2l6ZSkpOworICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7CisgICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgIH0KKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKKyAgaW5pdF9tcGFyYW1zKCk7IC8qIEVuc3VyZSBwYWdlc2l6ZSBldGMgaW5pdGlhbGl6ZWQgKi8KKworICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOworICAgIHNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIEVYVEVSTl9CSVQpOworICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IGZyZWVkID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBtc2VnbWVudHB0ciBzcCA9ICZtcy0+c2VnOworICAgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgICAgZmxhZ190IGZsYWcgPSBnZXRfc2VnbWVudF9mbGFncyhzcCk7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisgICAgICAgICAgQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkKKyAgICAgICAgZnJlZWQgKz0gc2l6ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gZnJlZWQ7Cit9CisKKy8qCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbAorICB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc28gbmljZSBidXQgYmV0dGVyIHRoYW4gdGhlIGFsdGVybmF0aXZlcy4KKyovCisKKwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gbXMtPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gbXMtPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBtcy0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworICAgICAgICBtcy0+ZHZzaXplID0gMDsKKyAgICAgICAgbXMtPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgICAgICBpZiAoIXBpbnVzZShwKSkgeworICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKyAgICAgICAgICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikgeworICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT50b3AgPSBwOworICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPmR2ID0gcDsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICBpbnNlcnRfY2h1bmsoZm0sIHAsIHBzaXplKTsKKyAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG5fZWxlbWVudHMgIT0gMCkgeworICAgIHJlcSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgaWYgKCgobl9lbGVtZW50cyB8IGVsZW1fc2l6ZSkgJiB+KHNpemVfdCkweGZmZmYpICYmCisgICAgICAgIChyZXEgLyBuX2VsZW1lbnRzICE9IGVsZW1fc2l6ZSkpCisgICAgICByZXEgPSBNQVhfU0laRV9UOyAvKiBmb3JjZSBkb3duc3RyZWFtIGZhaWx1cmUgb24gb3ZlcmZsb3cgKi8KKyAgfQorICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobXMsIHJlcSk7CisgIGlmIChtZW0gIT0gMCAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgcmVxKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiBGT09URVJTCisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgbXN0YXRlIG1zID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG1zLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7CisgIH0KKyAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5tYXhfZm9vdHByaW50OworICB9CisgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorICAgICAgICAgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQorICAgICAgICAgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7CisgICAgICBpZiAocHRyID09IDApCisgICAgICB7CisgICAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisgICAgICAgICBQb29sRGVhbGxvY2F0ZSgqcHRyKTsKKyAgICAgICAgICpwdHIgPSAwOworICAgICAgfQorICB9CisKKyovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hpc3Rvcnk6CisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorICAgICAgICBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzCisgICAgICAqIFVzZSBleHBsaWNpdCBsb2NrIGluaXRpYWxpemF0aW9uLgorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQorICAgICAgKiBSZWluc3RhdGUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIG9wdGlvbiBmcm9tIDIuNy54CisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4KKworICAgIFYyLjguMiBTdW4gSnVuIDEyIDE2OjAxOjEwIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuCisKKyAgICBWMi44LjEgV2VkIEp1biAgOCAxNjoxMTo0NiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKworICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysKKworICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMKKyAgICAgICogU3VwcG9ydCBtc3BhY2VzCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLAorICAgICAgICByZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLgorICAgICAgKiBEZWZhdWx0IHNhZmV0eSBjaGVja3MKKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZworICAgICAgKiBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcy4KKyAgICAgICAgVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisgICAgICAgIEFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLgorICAgICAgKiBTcGVlZCB1cCBub24tZmFzdGJpbiBwcm9jZXNzaW5nIGVub3VnaCB0byByZW1vdmUgZmFzdGJpbnMuCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4KKyAgICAgICogUmVtb3ZlIHNvbWUgb3B0aW9ucyB0aGF0IG5vIG9uZSBldmVyIHVzZWQgYW5kIHJlbmFtZSBvdGhlcnMuCisKKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KKworICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLgorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuCisgICAgICAgIFRoYW5rcyB0byBBbmRyZWFzIE11ZWxsZXIsIENvbmFsIFdhbHNoLCBhbmQgV29sZnJhbSBHbG9nZXIKKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLgorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4KKyAgICAgICogUmFpc2VkIGRlZmF1bHQgdHJpbSBhbmQgbWFwIHRocmVzaG9sZHMgdG8gMjU2Sy4KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLgorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLgorICAgICAgKiBCcmFuY2gtZnJlZSBiaW4gY2FsY3VsYXRpb24KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuCisKKyAgICBWMi43LjAgU3VuIE1hciAxMSAxNDoxNDowNiAyMDAxICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuCisgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisgICAgICAgIFRoYW5rcyBhbHNvIHRvIEFuZHJlYXMgTXVlbGxlciA8YS5tdWVsbGVyIGF0IHBhcmFkYXRlYy5kZT4sCisgICAgICAgIGFuZCBBbm9ueW1vdXMuCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yCisgICAgICAgIGhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKyAgICAgICAgbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MKKyAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCisgICAgICAqIE1hbnkgbWlub3IgdHVuaW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKyAgICAgICAgICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisgICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQorICAgICAgICAgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisgICAgICAgICAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisgICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZworICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisgICAgICAgICAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisgICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworICAgICAgICAgICBhdm9pZCBpbmZpbml0ZSBsb29wCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCisKKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nCisKKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUKKyAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgorICAgICAgKiBtYWxsb2NfZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgorICAgICAgICBmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisgICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgorICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAorICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KKyAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KKyAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKyAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20KKyAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAorCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KKyAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCisgICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKyAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMgc2luY2UKKyAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKKyAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4KKworICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKworICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMKKyAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKKyAgICAgICogVXNlIGJpbiBjb3VudHMgYXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKworICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCisgICAgICAqIG1lcmdlZCBhbGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgorICAgICAgICAgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKyAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisKKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaworICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCisgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCisgICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKyAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorICAgICAgICAgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQorIAorKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Zydi9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Zydi9mZmkuYwppbmRleCBjZWM1NzgxLi41Njk4Yzg5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9mcnYvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZnJ2L2ZmaS5jCkBAIC0xLDYgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZmaS5jIC0gQ29weXJpZ2h0IChDKSAyMDA0ICBBbnRob255IEdyZWVuCi0gICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwNyAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCSAgIENvcHlyaWdodCAoQykgMjAwOCAgUmVkIEhhdCwgSW5jLgogICAgCiAgICBGUi1WIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvamF2YV9yYXdfYXBpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9qYXZhX3Jhd19hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzUzODNlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvamF2YV9yYXdfYXBpLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBqYXZhX3Jhd19hcGkuYyAtIENvcHlyaWdodCAoYykgMTk5OSwgMjAwNywgMjAwOCAgUmVkIEhhdCwgSW5jLgorCisgICBDbG9uZWQgZnJvbSByYXdfYXBpLmMKKworICAgUmF3X2FwaS5jIGF1dGhvcjogS3Jlc3RlbiBLcmFiIFRob3J1cCA8a3JhYkBnbnUub3JnPgorICAgSmF2YV9yYXdfYXBpLmMgYXV0aG9yOiBIYW5zLUouIEJvZWhtIDxoYm9laG1AaHBsLmhwLmNvbT4KKworICAgJElkICQKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhpcyBkZWZpbmVzIGEgSmF2YS0gYW5kIDY0LWJpdCBzcGVjaWZpYyB2YXJpYW50IG9mIHRoZSByYXcgQVBJLgkqLworLyogSXQgYXNzdW1lcyB0aGF0ICJyYXciIGFyZ3VtZW50IGJsb2NrcyBsb29rIGxpa2UgSmF2YSBzdGFja3Mgb24gYQkqLworLyogNjQtYml0IG1hY2hpbmUuICBBcmd1bWVudHMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIGEgc2luZ2xlIHN0YWNrCSovCisvKiBzdGFjayBzbG90cyAobG9uZ3MsIGRvdWJsZXMpIG9jY3VweSAxMjggYml0cywgYnV0IG9ubHkgdGhlIGZpcnN0CSovCisvKiA2NCBiaXRzIGFyZSBhY3R1YWxseSB1c2VkLgkJCQkJCSovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZiAhZGVmaW5lZChOT19KQVZBX1JBV19BUEkpICYmICFkZWZpbmVkKEZGSV9OT19SQVdfQVBJKQorCitzaXplX3QKK2ZmaV9qYXZhX3Jhd19zaXplIChmZmlfY2lmICpjaWYpCit7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBpbnQgaTsKKworICBmZmlfdHlwZSAqKmF0ID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgZm9yIChpID0gY2lmLT5uYXJncy0xOyBpID49IDA7IGktLSwgYXQrKykKKyAgICB7CisgICAgICBzd2l0Y2goKCphdCkgLT4gdHlwZSkgeworCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgcmVzdWx0ICs9IDIgKiBGRklfU0laRU9GX0pBVkFfUkFXOworCSAgYnJlYWs7CisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAvKiBObyBzdHJ1Y3R1cmUgcGFyYW1ldGVycyBpbiBKYXZhLgkqLworCSAgYWJvcnQoKTsKKwlkZWZhdWx0OgorCSAgcmVzdWx0ICs9IEZGSV9TSVpFT0ZfSkFWQV9SQVc7CisgICAgICB9CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZAorZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5IChmZmlfY2lmICpjaWYsIGZmaV9qYXZhX3JhdyAqcmF3LCB2b2lkICoqYXJncykKK3sKKyAgdW5zaWduZWQgaTsKKyAgZmZpX3R5cGUgKip0cCA9IGNpZi0+YXJnX3R5cGVzOworCisjaWYgV09SRFNfQklHRU5ESUFOCisKKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsKKyAgICAgIHN3aXRjaCAoKCp0cCktPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICphcmdzID0gKHZvaWQqKSAoKGNoYXIqKShyYXcrKykgKyAzKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAqYXJncyA9ICh2b2lkKikgKChjaGFyKikocmF3KyspICsgMik7CisJICBicmVhazsKKworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gOAorCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgKmFyZ3MgPSAodm9pZCAqKXJhdzsKKwkgIHJhdyArPSAyOworCSAgYnJlYWs7CisjZW5kaWYKKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgICphcmdzID0gKHZvaWQqKSAmKHJhdysrKS0+cHRyOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgKmFyZ3MgPSByYXc7CisJICByYXcgKz0KKwkgICAgQUxJR04gKCgqdHApLT5zaXplLCBzaXplb2YoZmZpX2phdmFfcmF3KSkgLyBzaXplb2YoZmZpX2phdmFfcmF3KTsKKwl9CisgICAgfQorCisjZWxzZSAvKiBXT1JEU19CSUdFTkRJQU4gKi8KKworI2lmICFQRFAKKworICAvKiB0aGVuIGFzc3VtZSBsaXR0bGUgZW5kaWFuICovCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CisjaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA4CisgICAgICBzd2l0Y2goKCp0cCktPnR5cGUpIHsKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkgICphcmdzID0gKHZvaWQqKSByYXc7CisJICByYXcgKz0gMjsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICAqYXJncyA9ICh2b2lkKikgcmF3Kys7CisgICAgICB9CisjZWxzZSAvKiBGRklfU0laRU9GX0pBVkFfUkFXICE9IDggKi8KKwkqYXJncyA9ICh2b2lkKikgcmF3OworCXJhdyArPQorCSAgQUxJR04gKCgqdHApLT5zaXplLCBzaXplb2YoZmZpX2phdmFfcmF3KSkgLyBzaXplb2YoZmZpX2phdmFfcmF3KTsKKyNlbmRpZiAvKiBGRklfU0laRU9GX0pBVkFfUkFXID09IDggKi8KKyAgICB9CisKKyNlbHNlCisjZXJyb3IgInBkcCBlbmRpYW4gbm90IHN1cHBvcnRlZCIKKyNlbmRpZiAvKiAhIFBEUCAqLworCisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCit9CisKK3ZvaWQKK2ZmaV9qYXZhX3B0cmFycmF5X3RvX3JhdyAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX2phdmFfcmF3ICpyYXcpCit7CisgIHVuc2lnbmVkIGk7CisgIGZmaV90eXBlICoqdHAgPSBjaWYtPmFyZ190eXBlczsKKworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgeworICAgICAgc3dpdGNoICgoKnRwKS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooVUlOVDMyKikocmF3KyspID0gKihVSU5UOCopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDgqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFNJTlQzMiopKHJhdysrKSA9ICooU0lOVDgqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQ4KikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooVUlOVDMyKikocmF3KyspID0gKihVSU5UMTYqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQxNiopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisjaWYgV09SRFNfQklHRU5ESUFOCisJICAqKFNJTlQzMiopKHJhdysrKSA9ICooU0lOVDE2KikgKCphcmdzKTsKKyNlbHNlCisJICAocmF3KyspLT5zaW50ID0gKihTSU5UMTYqKSAoKmFyZ3MpOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorI2lmIFdPUkRTX0JJR0VORElBTgorCSAgKihVSU5UMzIqKShyYXcrKykgPSAqKFVJTlQzMiopICgqYXJncyk7CisjZWxzZQorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDMyKikgKCphcmdzKTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyNpZiBXT1JEU19CSUdFTkRJQU4KKwkgICooU0lOVDMyKikocmF3KyspID0gKihTSU5UMzIqKSAoKmFyZ3MpOworI2Vsc2UKKwkgIChyYXcrKyktPnNpbnQgPSAqKFNJTlQzMiopICgqYXJncyk7CisjZW5kaWYKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIChyYXcrKyktPmZsdCA9ICooRkxPQVQzMiopICgqYXJncyk7CisJICBicmVhazsKKworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gOAorCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgcmF3LT51aW50ID0gKihVSU5UNjQqKSAoKmFyZ3MpOworCSAgcmF3ICs9IDI7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgKHJhdysrKS0+cHRyID0gKioodm9pZCoqKikgYXJnczsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKyNpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDgKKwkgIEZGSV9BU1NFUlQoMCk7CS8qIFNob3VsZCBoYXZlIGNvdmVyZWQgYWxsIGNhc2VzICovCisjZWxzZQorCSAgbWVtY3B5ICgodm9pZCopIHJhdy0+ZGF0YSwgKHZvaWQqKSphcmdzLCAoKnRwKS0+c2l6ZSk7CisJICByYXcgKz0KKwkgICAgQUxJR04gKCgqdHApLT5zaXplLCBzaXplb2YoZmZpX2phdmFfcmF3KSkgLyBzaXplb2YoZmZpX2phdmFfcmF3KTsKKyNlbmRpZgorCX0KKyAgICB9Cit9CisKKyNpZiAhRkZJX05BVElWRV9SQVdfQVBJCisKK3N0YXRpYyB2b2lkCitmZmlfamF2YV9ydmFsdWVfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKnJ2YWx1ZSkKK3sKKyNpZiBXT1JEU19CSUdFTkRJQU4gJiYgRkZJX1NJWkVPRl9BUkcgPT0gOAorICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CisgICAgICAqKFVJTlQ2NCAqKXJ2YWx1ZSA8PD0gMzI7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisgICAgY2FzZSBGRklfVFlQRV9JTlQ6CisjaWYgRkZJX1NJWkVPRl9KQVZBX1JBVyA9PSA0CisgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorI2VuZGlmCisgICAgICAqKFNJTlQ2NCAqKXJ2YWx1ZSA8PD0gMzI7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK2ZmaV9qYXZhX3Jhd190b19ydmFsdWUgKGZmaV9jaWYgKmNpZiwgdm9pZCAqcnZhbHVlKQoreworI2lmIFdPUkRTX0JJR0VORElBTiAmJiBGRklfU0laRU9GX0FSRyA9PSA4CisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICAgICooVUlOVDY0ICopcnZhbHVlID4+PSAzMjsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyAgICBjYXNlIEZGSV9UWVBFX0lOVDoKKyAgICAgICooU0lOVDY0ICopcnZhbHVlID4+PSAzMjsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorfQorCisvKiBUaGlzIGlzIGEgZ2VuZXJpYyBkZWZpbml0aW9uIG9mIGZmaV9yYXdfY2FsbCwgdG8gYmUgdXNlZCBpZiB0aGUKKyAqIG5hdGl2ZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBhIG1hY2hpbmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgKiBIYXZpbmcgdGhpcywgYWxsb3dzIGNvZGUgdG8gYmUgd3JpdHRlbiBmb3IgdGhlIHJhdyBBUEksIHdpdGhvdXQKKyAqIHRoZSBuZWVkIGZvciBzeXN0ZW0tc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgaW5wdXQgaW4gdGhhdCBmb3JtYXQ7CisgKiB0aGVzZSBmb2xsb3dpbmcgY291cGxlIG9mIGZ1bmN0aW9ucyB3aWxsIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24gZm9ydGgKKyAqIGFuZCBiYWNrIGF1dG9tYXRpY2FsbHkuICovCisKK3ZvaWQgZmZpX2phdmFfcmF3X2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLAorCQkJZmZpX2phdmFfcmF3ICpyYXcpCit7CisgIHZvaWQgKiphdmFsdWUgPSAodm9pZCoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQqKSk7CisgIGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSAoY2lmLCByYXcsIGF2YWx1ZSk7CisgIGZmaV9jYWxsIChjaWYsIGZuLCBydmFsdWUsIGF2YWx1ZSk7CisgIGZmaV9qYXZhX3J2YWx1ZV90b19yYXcgKGNpZiwgcnZhbHVlKTsKK30KKworI2lmIEZGSV9DTE9TVVJFUwkJLyogYmFzZSBzeXN0ZW0gcHJvdmlkZXMgY2xvc3VyZXMgKi8KKworc3RhdGljIHZvaWQKK2ZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzIChmZmlfY2lmICpjaWYsIHZvaWQgKnJ2YWx1ZSwKKwkJICAgIHZvaWQgKiphdmFsdWUsIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgZmZpX2phdmFfcmF3ICpyYXcgPSAoZmZpX2phdmFfcmF3KilhbGxvY2EgKGZmaV9qYXZhX3Jhd19zaXplIChjaWYpKTsKKyAgZmZpX3Jhd19jbG9zdXJlICpjbCA9IChmZmlfcmF3X2Nsb3N1cmUqKXVzZXJfZGF0YTsKKworICBmZmlfamF2YV9wdHJhcnJheV90b19yYXcgKGNpZiwgYXZhbHVlLCByYXcpOworICAoKmNsLT5mdW4pIChjaWYsIHJ2YWx1ZSwgcmF3LCBjbC0+dXNlcl9kYXRhKTsKKyAgZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSAoY2lmLCBydmFsdWUpOworfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyAoZmZpX2phdmFfcmF3X2Nsb3N1cmUqIGNsLAorCQkJICAgICAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJCSAgICAgICB2b2lkICp1c2VyX2RhdGEsCisJCQkgICAgICAgdm9pZCAqY29kZWxvYykKK3sKKyAgZmZpX3N0YXR1cyBzdGF0dXM7CisKKyAgc3RhdHVzID0gZmZpX3ByZXBfY2xvc3VyZV9sb2MgKChmZmlfY2xvc3VyZSopIGNsLAorCQkJCSBjaWYsCisJCQkJICZmZmlfamF2YV90cmFuc2xhdGVfYXJncywKKwkJCQkgY29kZWxvYywKKwkJCQkgY29kZWxvYyk7CisgIGlmIChzdGF0dXMgPT0gRkZJX09LKQorICAgIHsKKyAgICAgIGNsLT5mdW4gICAgICAgPSBmdW47CisgICAgICBjbC0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICAgIH0KKworICByZXR1cm4gc3RhdHVzOworfQorCisvKiBBZ2FpbiwgaGVyZSBpcyB0aGUgZ2VuZXJpYyB2ZXJzaW9uIG9mIGZmaV9wcmVwX3Jhd19jbG9zdXJlLCB3aGljaAorICogd2lsbCBpbnN0YWxsIGFuIGludGVybWVkaWF0ZSAiaHViIiBmb3IgdHJhbnNsYXRpb24gb2YgYXJndW1lbnRzIGZyb20KKyAqIHRoZSBwb2ludGVyLWFycmF5IGZvcm1hdCwgdG8gdGhlIHJhdyBmb3JtYXQgKi8KKworZmZpX3N0YXR1cworZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSAoZmZpX2phdmFfcmF3X2Nsb3N1cmUqIGNsLAorCQkJICAgZmZpX2NpZiAqY2lmLAorCQkJICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX2phdmFfcmF3Kix2b2lkKiksCisJCQkgICB2b2lkICp1c2VyX2RhdGEpCit7CisgIHJldHVybiBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyAoY2wsIGNpZiwgZnVuLCB1c2VyX2RhdGEsIGNsKTsKK30KKworI2VuZGlmIC8qIEZGSV9DTE9TVVJFUyAqLworI2VuZGlmIC8qICFGRklfTkFUSVZFX1JBV19BUEkgKi8KKyNlbmRpZiAvKiAhRkZJX05PX1JBV19BUEkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCmluZGV4IGI2ODg3YmUuLmQ3MTRjYzkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYwpAQCAtOTksNyArOTksNyBAQAogCiAgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKIAotICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOyBpOyBpLS0sIHBfYXJnKyspCisgIGZvciAoaSA9IDAsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7IGkgPCBlY2lmLT5jaWYtPm5hcmdzOyBpKyssIHBfYXJnKyspCiAgICAgewogICAgICAgc2l6ZV90IHo7CiAgICAgICB1bnNpZ25lZCBpbnQgYTsKQEAgLTEyMyw5ICsxMjMsMjUgQEAKIAogICAgICAgICAgIC8qIFRoZSBzaXplIG9mIGEgcG9pbnRlciBkZXBlbmRzIG9uIHRoZSBBQkkgKi8KICAgICAgICAgICBpZiAodHlwZSA9PSBGRklfVFlQRV9QT0lOVEVSKQotICAgICAgICAgICAgdHlwZSA9Ci0gICAgICAgICAgICAgIChlY2lmLT5jaWYtPmFiaSA9PSBGRklfTjY0KSA/IEZGSV9UWVBFX1NJTlQ2NCA6IEZGSV9UWVBFX1NJTlQzMjsKKyAgICAgICAgICAgIHR5cGUgPSAoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX042NAorCQkgICAgfHwgZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUKQorCSAgICAgID8gRkZJX1RZUEVfU0lOVDY0IDogRkZJX1RZUEVfU0lOVDMyOwogCisJaWYgKGkgPCA4ICYmIChlY2lmLT5jaWYtPmFiaSA9PSBGRklfTjMyX1NPRlRfRkxPQVQKKwkJICAgICAgfHwgZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX042NF9TT0ZUX0ZMT0FUKSkKKwkgIHsKKwkgICAgc3dpdGNoICh0eXBlKQorCSAgICAgIHsKKwkgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorCQl0eXBlID0gRkZJX1RZUEVfVUlOVDMyOworCQlicmVhazsKKwkgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkJdHlwZSA9IEZGSV9UWVBFX1VJTlQ2NDsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQogCSAgc3dpdGNoICh0eXBlKQogCSAgICB7CiAJICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKQEAgLTIwNSwxMyArMjIxLDE3IEBACiAgICBkZWZpbml0aW9ucyBhbmQgZ2VuZXJhdGVzIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gKi8KIAogc3RhdGljIHVuc2lnbmVkCi1jYWxjX24zMl9zdHJ1Y3RfZmxhZ3MoZmZpX3R5cGUgKmFyZywgdW5zaWduZWQgKmxvYywgdW5zaWduZWQgKmFyZ19yZWcpCitjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MoaW50IHNvZnRfZmxvYXQsIGZmaV90eXBlICphcmcsCisJCSAgICAgIHVuc2lnbmVkICpsb2MsIHVuc2lnbmVkICphcmdfcmVnKQogewogICB1bnNpZ25lZCBmbGFncyA9IDA7CiAgIHVuc2lnbmVkIGluZGV4ID0gMDsKIAogICBmZmlfdHlwZSAqZTsKIAorICBpZiAoc29mdF9mbG9hdCkKKyAgICByZXR1cm4gMDsKKwogICB3aGlsZSAoKGUgPSBhcmctPmVsZW1lbnRzW2luZGV4XSkpCiAgICAgewogICAgICAgLyogQWxpZ24gdGhpcyBvYmplY3QuICAqLwpAQCAtMjM2LDcgKzI1Niw3IEBACiB9CiAKIHN0YXRpYyB1bnNpZ25lZAotY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyhmZmlfdHlwZSAqYXJnKQorY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyhpbnQgc29mdF9mbG9hdCwgZmZpX3R5cGUgKmFyZykKIHsKICAgdW5zaWduZWQgZmxhZ3MgPSAwOwogICB1bnNpZ25lZCBzbWFsbCA9IEZGSV9UWVBFX1NNQUxMU1RSVUNUOwpAQCAtMjU2LDYgKzI3Niw3IEBACiAgICAgc21hbGwgPSBGRklfVFlQRV9TTUFMTFNUUlVDVDI7CiAKICAgZSA9IGFyZy0+ZWxlbWVudHNbMF07CisKICAgaWYgKGUtPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQogICAgIGZsYWdzID0gRkZJX1RZUEVfRE9VQkxFOwogICBlbHNlIGlmIChlLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQpAQCAtMjc2LDYgKzI5Nyw4IEBACiAJICAgICBmbG9hdHMhIFRoaXMgbXVzdCBiZSBwYXNzZWQgdGhlIG9sZCB3YXkuICovCiAJICByZXR1cm4gc21hbGw7CiAJfQorICAgICAgaWYgKHNvZnRfZmxvYXQpCisJZmxhZ3MgKz0gRkZJX1RZUEVfU1RSVUNUX1NPRlQ7CiAgICAgfQogICBlbHNlCiAgICAgaWYgKCFmbGFncykKQEAgLTM4MiwxNiArNDA1LDE5IEBACiAjaWZkZWYgRkZJX01JUFNfTjMyCiAgIC8qIFNldCB0aGUgZmxhZ3MgbmVjZXNzYXJ5IGZvciBOMzIgcHJvY2Vzc2luZyAqLwogICB7CisgICAgaW50IHR5cGU7CiAgICAgdW5zaWduZWQgYXJnX3JlZyA9IDA7CiAgICAgdW5zaWduZWQgbG9jID0gMDsKICAgICB1bnNpZ25lZCBjb3VudCA9IChjaWYtPm5hcmdzIDwgOCkgPyBjaWYtPm5hcmdzIDogODsKICAgICB1bnNpZ25lZCBpbmRleCA9IDA7CiAKICAgICB1bnNpZ25lZCBzdHJ1Y3RfZmxhZ3MgPSAwOworICAgIGludCBzb2Z0X2Zsb2F0ID0gKGNpZi0+YWJpID09IEZGSV9OMzJfU09GVF9GTE9BVAorCQkgICAgICB8fCBjaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQpOwogCiAgICAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQogICAgICAgewotCXN0cnVjdF9mbGFncyA9IGNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MoY2lmLT5ydHlwZSk7CisJc3RydWN0X2ZsYWdzID0gY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyhzb2Z0X2Zsb2F0LCBjaWYtPnJ0eXBlKTsKIAogCWlmIChzdHJ1Y3RfZmxhZ3MgPT0gMCkKIAkgIHsKQEAgLTQxMSw3ICs0MzcsMjIgQEAKIAogICAgIHdoaWxlIChjb3VudC0tID4gMCAmJiBhcmdfcmVnIDwgOCkKICAgICAgIHsKLQlzd2l0Y2ggKChjaWYtPmFyZ190eXBlcylbaW5kZXhdLT50eXBlKQorCXR5cGUgPSAoY2lmLT5hcmdfdHlwZXMpW2luZGV4XS0+dHlwZTsKKwlpZiAoc29mdF9mbG9hdCkKKwkgIHsKKwkgICAgc3dpdGNoICh0eXBlKQorCSAgICAgIHsKKwkgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorCQl0eXBlID0gRkZJX1RZUEVfVUlOVDMyOworCQlicmVhazsKKwkgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKwkJdHlwZSA9IEZGSV9UWVBFX1VJTlQ2NDsKKwkJYnJlYWs7CisJICAgICAgZGVmYXVsdDoKKwkJYnJlYWs7CisJICAgICAgfQorCSAgfQorCXN3aXRjaCAodHlwZSkKIAkgIHsKIAkgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAJICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKQEAgLTQyMywxNyArNDY0LDI1IEBACiAgICAgICAgICAgICAvKiBBbGlnbiBpdC4gICovCiAgICAgICAgICAgICBhcmdfcmVnID0gQUxJR04oYXJnX3JlZywgMik7CiAgICAgICAgICAgICAvKiBUcmVhdCBpdCBhcyB0d28gYWRqYWNlbnQgZG91Ymxlcy4gICovCi0JICAgIGNpZi0+ZmxhZ3MgKz0KLSAgICAgICAgICAgICAgKEZGSV9UWVBFX0RPVUJMRSA8PCAoYXJnX3JlZyAqIEZGSV9GTEFHX0JJVFMpKTsKLSAgICAgICAgICAgIGFyZ19yZWcrKzsKLQkgICAgY2lmLT5mbGFncyArPQotICAgICAgICAgICAgICAoRkZJX1RZUEVfRE9VQkxFIDw8IChhcmdfcmVnICogRkZJX0ZMQUdfQklUUykpOwotICAgICAgICAgICAgYXJnX3JlZysrOworCSAgICBpZiAoc29mdF9mbG9hdCkgCisJICAgICAgeworCQlhcmdfcmVnICs9IDI7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQljaWYtPmZsYWdzICs9CisJCSAgKEZGSV9UWVBFX0RPVUJMRSA8PCAoYXJnX3JlZyAqIEZGSV9GTEFHX0JJVFMpKTsKKwkJYXJnX3JlZysrOworCQljaWYtPmZsYWdzICs9CisJCSAgKEZGSV9UWVBFX0RPVUJMRSA8PCAoYXJnX3JlZyAqIEZGSV9GTEFHX0JJVFMpKTsKKwkJYXJnX3JlZysrOworCSAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAJICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKICAgICAgICAgICAgIGxvYyA9IGFyZ19yZWcgKiBGRklfU0laRU9GX0FSRzsKLQkgICAgY2lmLT5mbGFncyArPSBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MoKGNpZi0+YXJnX3R5cGVzKVtpbmRleF0sCisJICAgIGNpZi0+ZmxhZ3MgKz0gY2FsY19uMzJfc3RydWN0X2ZsYWdzKHNvZnRfZmxvYXQsCisJCQkJCQkoY2lmLT5hcmdfdHlwZXMpW2luZGV4XSwKIAkJCQkJCSZsb2MsICZhcmdfcmVnKTsKIAkgICAgYnJlYWs7CiAKQEAgLTQ2OSwxNyArNTE4LDQzIEBACiAgICAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CiAJLyogRG8gbm90aGluZywgJ2NhdXNlIEZGSV9UWVBFX1ZPSUQgaXMgMCAqLwogCWJyZWFrOwotCQotICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKLSAgICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCWNpZi0+ZmxhZ3MgKz0gY2lmLT5ydHlwZS0+dHlwZSA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCisgICAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJaWYgKGNpZi0+YWJpID09IEZGSV9OMzJfU09GVF9GTE9BVCB8fCBjaWYtPmFiaSA9PSBGRklfTjMyKQorCSAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9TSU5UMzIgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwllbHNlCisJICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX0lOVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOwogCWJyZWFrOworCisgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorCWlmIChzb2Z0X2Zsb2F0KQorCSAgeworCSAgICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NJTlQzMiA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCSAgICBicmVhazsKKwkgIH0KKwkvKiBlbHNlIGZhbGwgdGhyb3VnaCAqLworICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJaWYgKHNvZnRfZmxvYXQpCisJICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX0lOVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCWVsc2UKKwkgIGNpZi0+ZmxhZ3MgKz0gY2lmLT5ydHlwZS0+dHlwZSA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCWJyZWFrOworCiAgICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAJLyogTG9uZyBkb3VibGUgaXMgcmV0dXJuZWQgYXMgaWYgaXQgd2VyZSBhIHN0cnVjdCBjb250YWluaW5nCiAJICAgdHdvIGRvdWJsZXMuICAqLwotCWNpZi0+ZmxhZ3MgKz0gRkZJX1RZUEVfU1RSVUNUIDw8IChGRklfRkxBR19CSVRTICogOCk7Ci0JY2lmLT5mbGFncyArPSAoRkZJX1RZUEVfRE9VQkxFICsgKEZGSV9UWVBFX0RPVUJMRSA8PCBGRklfRkxBR19CSVRTKSkKLQkJICAgICAgPDwgKDQgKyAoRkZJX0ZMQUdfQklUUyAqIDgpKTsKKwlpZiAoc29mdF9mbG9hdCkKKwkgIHsKKwkgICAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9TVFJVQ1QgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKKwkgICAgY2lmLT5mbGFncyArPSBGRklfVFlQRV9TTUFMTFNUUlVDVDIgPDwgKDQgKyAoRkZJX0ZMQUdfQklUUyAqIDgpKTsKKyAJICB9CisJZWxzZQorCSAgeworCSAgICBjaWYtPmZsYWdzICs9IEZGSV9UWVBFX1NUUlVDVCA8PCAoRkZJX0ZMQUdfQklUUyAqIDgpOworCSAgICBjaWYtPmZsYWdzICs9IChGRklfVFlQRV9ET1VCTEUKKwkJCSAgICsgKEZGSV9UWVBFX0RPVUJMRSA8PCBGRklfRkxBR19CSVRTKSkKKwkJCQkJICAgICAgPDwgKDQgKyAoRkZJX0ZMQUdfQklUUyAqIDgpKTsKKwkgIH0KIAlicmVhazsKICAgICAgIGRlZmF1bHQ6CiAJY2lmLT5mbGFncyArPSBGRklfVFlQRV9JTlQgPDwgKEZGSV9GTEFHX0JJVFMgKiA4KTsKQEAgLTQ5OSw3ICs1NzQsNyBAQAogLyogTG93IGxldmVsIHJvdXRpbmUgZm9yIGNhbGxpbmcgTjMyIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCBmZmlfY2FsbF9OMzIodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiwgaW50LCBpbnQpLCAKIAkJCWV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgCi0JCQl1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKikodm9pZCkpOworCQkJdW5zaWduZWQsIHZvaWQgKiwgdm9pZCAoKikodm9pZCkpOwogCiB2b2lkIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQogewpAQCAtNTI5LDEwICs2MDQsMTMgQEAKIAogI2lmZGVmIEZGSV9NSVBTX04zMgogICAgIGNhc2UgRkZJX04zMjoKKyAgICBjYXNlIEZGSV9OMzJfU09GVF9GTE9BVDoKICAgICBjYXNlIEZGSV9ONjQ6CisgICAgY2FzZSBGRklfTjY0X1NPRlRfRkxPQVQ6CiAgICAgICB7CiAgICAgICAgIGludCBjb3B5X3J2YWx1ZSA9IDA7Ci0gICAgICAgIHZvaWQgKnJ2YWx1ZV9jb3B5ID0gZWNpZi5ydmFsdWU7CisJaW50IGNvcHlfb2Zmc2V0ID0gMDsKKyAgICAgICAgY2hhciAqcnZhbHVlX2NvcHkgPSBlY2lmLnJ2YWx1ZTsKICAgICAgICAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUICYmIGNpZi0+cnR5cGUtPnNpemUgPCAxNikKICAgICAgICAgICB7CiAgICAgICAgICAgICAvKiBGb3Igc3RydWN0dXJlcyBzbWFsbGVyIHRoYW4gMTYgYnl0ZXMgd2UgY2xvYmJlciBtZW1vcnkKQEAgLTU0MSwxMCArNjE5LDIwIEBACiAgICAgICAgICAgICBydmFsdWVfY29weSA9IGFsbG9jYSgxNik7CiAgICAgICAgICAgICBjb3B5X3J2YWx1ZSA9IDE7CiAgICAgICAgICAgfQorCWVsc2UgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQKKwkJICYmIChjaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQKKwkJICAgICB8fCBjaWYtPmFiaSA9PSBGRklfTjMyX1NPRlRfRkxPQVQpKQorCSAgeworCSAgICBydmFsdWVfY29weSA9IGFsbG9jYSAoOCk7CisJICAgIGNvcHlfcnZhbHVlID0gMTsKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX01JUFNFQikKKwkgICAgY29weV9vZmZzZXQgPSA0OworI2VuZGlmCisJICB9CiAgICAgICAgIGZmaV9jYWxsX04zMihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MsIHJ2YWx1ZV9jb3B5LCBmbik7CiAgICAgICAgIGlmIChjb3B5X3J2YWx1ZSkKLSAgICAgICAgICBtZW1jcHkoZWNpZi5ydmFsdWUsIHJ2YWx1ZV9jb3B5LCBjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICAgICAgICBtZW1jcHkoZWNpZi5ydmFsdWUsIHJ2YWx1ZV9jb3B5ICsgY29weV9vZmZzZXQsIGNpZi0+cnR5cGUtPnNpemUpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAjZW5kaWYKQEAgLTY4NCw5ICs3NzIsMTAgQEAKICAgICB7CiAgICAgICBpZiAoaSA8IDIgJiYgIXNlZW5faW50ICYmCiAJICAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUIHx8Ci0JICAgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkpCisJICAgYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSB8fAorCSAgIGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKSkKIAl7Ci0jaWZkZWYgX19NSVBTRUJfXworI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfTUlQU0VCKQogCSAgaWYgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKIAkgICAgYXZhbHVlcFtpXSA9ICgoY2hhciAqKSAmZnByW2ldKSArIHNpemVvZiAoZmxvYXQpOwogCSAgZWxzZQpAQCAtNzU1LDcgKzg0NCw3IEBACiBzdGF0aWMgdm9pZAogY29weV9zdHJ1Y3RfTjMyKGNoYXIgKnRhcmdldCwgdW5zaWduZWQgb2Zmc2V0LCBmZmlfYWJpIGFiaSwgZmZpX3R5cGUgKnR5cGUsCiAgICAgICAgICAgICAgICAgaW50IGFyZ24sIHVuc2lnbmVkIGFyZ19vZmZzZXQsIGZmaV9hcmcgKmFyLAotICAgICAgICAgICAgICAgIGZmaV9hcmcgKmZwcikKKyAgICAgICAgICAgICAgICBmZmlfYXJnICpmcHIsIGludCBzb2Z0X2Zsb2F0KQogewogICBmZmlfdHlwZSAqKmVsdF90eXBlcCA9IHR5cGUtPmVsZW1lbnRzOwogICB3aGlsZSgqZWx0X3R5cGVwKQpAQCAtNzc3LDcgKzg2Niw3IEBACiAKICAgICAgIHRwID0gdGFyZ2V0ICsgb2Zmc2V0OwogCi0gICAgICBpZiAoZWx0X3R5cGUtPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorICAgICAgaWYgKGVsdF90eXBlLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSAmJiAhc29mdF9mbG9hdCkKICAgICAgICAgKihkb3VibGUgKil0cCA9ICooZG91YmxlICopZnBwOwogICAgICAgZWxzZQogICAgICAgICBtZW1jcHkodHAsIGFyZ3AgKyBhcmdfb2Zmc2V0LCBlbHRfdHlwZS0+c2l6ZSk7CkBAIC04MTUsOCArOTA0LDEyIEBACiAgIGZmaV9hcmcgKmF2YWx1ZTsKICAgZmZpX3R5cGUgKiphcmdfdHlwZXM7CiAgIGludCBpLCBhdm4sIGFyZ247CisgIGludCBzb2Z0X2Zsb2F0OworICBmZmlfYXJnICphcmdwOwogCiAgIGNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgc29mdF9mbG9hdCA9IGNpZi0+YWJpID09IEZGSV9ONjRfU09GVF9GTE9BVAorICAgIHx8IGNpZi0+YWJpID09IEZGSV9OMzJfU09GVF9GTE9BVDsKICAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mIChmZmlfYXJnKSk7CiAgIGF2YWx1ZXAgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKGZmaV9hcmcpKTsKIApAQCAtODM5LDEwICs5MzIsMTYgQEAKICAgd2hpbGUgKGkgPCBhdm4pCiAgICAgewogICAgICAgaWYgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVAotICAgICAgICAgIHx8IGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisJICB8fCBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFCisJICB8fCBhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKICAgICAgICAgewotICAgICAgICAgIGZmaV9hcmcgKmFyZ3AgPSBhcmduID49IDggPyBhciArIGFyZ24gOiBmcHIgKyBhcmduOwotI2lmZGVmIF9fTUlQU0VCX18KKyAgICAgICAgICBhcmdwID0gKGFyZ24gPj0gOCB8fCBzb2Z0X2Zsb2F0KSA/IGFyICsgYXJnbiA6IGZwciArIGFyZ247CisgICAgICAgICAgaWYgKChhcmdfdHlwZXNbaV0tPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkgJiYgKCh1bnNpZ25lZClhcmdwICYgKGFyZ190eXBlc1tpXS0+YWxpZ25tZW50LTEpKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYXJncD0oZmZpX2FyZyopQUxJR04oYXJncCxhcmdfdHlwZXNbaV0tPmFsaWdubWVudCk7CisgICAgICAgICAgICAgIGFyZ24rKzsKKyAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX01JUFNFQikKICAgICAgICAgICBpZiAoYXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUICYmIGFyZ24gPCA4KQogICAgICAgICAgICAgYXZhbHVlcFtpXSA9ICgoY2hhciAqKSBhcmdwKSArIHNpemVvZiAoZmxvYXQpOwogICAgICAgICAgIGVsc2UKQEAgLTg1NiwxMSArOTU1LDE1IEBACiAgICAgICAgICAgaWYgKGFyZ190eXBlc1tpXS0+YWxpZ25tZW50ID4gc2l6ZW9mKGZmaV9hcmcpKQogICAgICAgICAgICAgYXJnbiA9IEFMSUdOKGFyZ24sIGFyZ190eXBlc1tpXS0+YWxpZ25tZW50IC8gc2l6ZW9mKGZmaV9hcmcpKTsKIAotICAgICAgICAgIGZmaV9hcmcgKmFyZ3AgPSBhciArIGFyZ247CisgICAgICAgICAgYXJncCA9IGFyICsgYXJnbjsKIAogICAgICAgICAgIC8qIFRoZSBzaXplIG9mIGEgcG9pbnRlciBkZXBlbmRzIG9uIHRoZSBBQkkgKi8KICAgICAgICAgICBpZiAodHlwZSA9PSBGRklfVFlQRV9QT0lOVEVSKQotICAgICAgICAgICAgdHlwZSA9IChjaWYtPmFiaSA9PSBGRklfTjY0KSA/IEZGSV9UWVBFX1NJTlQ2NCA6IEZGSV9UWVBFX1NJTlQzMjsKKyAgICAgICAgICAgIHR5cGUgPSAoY2lmLT5hYmkgPT0gRkZJX042NCB8fCBjaWYtPmFiaSA9PSBGRklfTjY0X1NPRlRfRkxPQVQpCisJICAgICAgPyBGRklfVFlQRV9TSU5UNjQgOiBGRklfVFlQRV9TSU5UMzI7CisKKwkgIGlmIChzb2Z0X2Zsb2F0ICYmIHR5cGUgPT0gIEZGSV9UWVBFX0ZMT0FUKQorCSAgICB0eXBlID0gRkZJX1RZUEVfVUlOVDMyOwogCiAgICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICAgewpAQCAtOTAxLDcgKzEwMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgaXQgd2FzIHBhc3NlZCBpbiByZWdpc3RlcnMuICAqLwogICAgICAgICAgICAgICAgICAgYXZhbHVlcFtpXSA9IGFsbG9jYShhcmdfdHlwZXNbaV0tPnNpemUpOwogICAgICAgICAgICAgICAgICAgY29weV9zdHJ1Y3RfTjMyKGF2YWx1ZXBbaV0sIDAsIGNpZi0+YWJpLCBhcmdfdHlwZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnbiwgMCwgYXIsIGZwcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnbiwgMCwgYXIsIGZwciwgc29mdF9mbG9hdCk7CiAKICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaXRhcmdldC5oCmluZGV4IDIxNGFmZTQuLmM1ZjRlMDUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpdGFyZ2V0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZml0YXJnZXQuaApAQCAtMjgsNyArMjgsMTAgQEAKICNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICiAKICNpZmRlZiBsaW51eAotI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisjIGluY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxzZ2lkZWZzLmg+CisjZW5kaWYKICMgIGlmbmRlZiBfQUJJTjMyCiAjICAgIGRlZmluZSBfQUJJTjMyIF9NSVBTX1NJTV9OQUJJMzIKICMgIGVuZGlmCkBAIC0zOCw3ICs0MSw2IEBACiAjICBpZm5kZWYgX0FCSU8zMgogIyAgICBkZWZpbmUgX0FCSU8zMiBfTUlQU19TSU1fQUJJMzIKICMgIGVuZGlmCi0jZW5kaWYKIAogI2lmICFkZWZpbmVkKF9NSVBTX1NJTSkKIC0tIHNvbWV0aGluZyBpcyB2ZXJ5IHdyb25nIC0tCkBAIC05NSw2ICs5NywxNSBAQAogI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfREYgICAgIDE4OQogI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfU01BTEwgIDkzCiAjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9TTUFMTDIgMTA5CisKKy8qIGFuZCBmb3IgbjMyIHNvZnQgZmxvYXQsIGFkZCAxNiAqIDJeNCAqLworI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfRF9TT0ZUICAgICAgMzE3CisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9GX1NPRlQgICAgICAzMDEKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0REX1NPRlQgICAgIDUwOQorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCAgICAgNDI5CisjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVF9GRF9TT0ZUICAgICA0OTMKKyNkZWZpbmUgRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQgICAgIDQ0NQorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1RfU09GVCAgICAgICAgMTYKICNlbmRpZgogCiAjaWZkZWYgTElCRkZJX0FTTQpAQCAtMTQ1LDcgKzE1Niw4IEBACiAjIGVuZGlmIC8qIF9NSVBTX1NJTT09X0FCSTY0ICovCiAjZW5kaWYgLyogIUZGSV9NSVBTX08zMiAqLwogI2Vsc2UgLyogIUxJQkZGSV9BU00gKi8KLSNpZmRlZiBGRklfTUlQU19PMzIKKyMgaWZkZWYgX19HTlVDX18KKyMgIGlmZGVmIEZGSV9NSVBTX08zMgogLyogTzMyIHN0YWNrIGZyYW1lcyBoYXZlIDMyYml0IGludGVnZXIgYXJncyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIGZmaV9hcmcgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOwogdHlwZWRlZiBzaWduZWQgICBpbnQgICAgIGZmaV9zYXJnIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKQEAgLTE1Myw3ICsxNjUsMTggQEAKIC8qIE4zMiBhbmQgTjY0IGZyYW1lcyBoYXZlIDY0Yml0IGludGVnZXIgYXJncyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIGZmaV9hcmcgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ESV9fKSkpOwogdHlwZWRlZiBzaWduZWQgICBpbnQgICAgIGZmaV9zYXJnIF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fRElfXykpKTsKLSNlbmRpZgorIyAgZW5kaWYKKyMgZWxzZQorIyAgaWZkZWYgRkZJX01JUFNfTzMyCisvKiBPMzIgc3RhY2sgZnJhbWVzIGhhdmUgMzJiaXQgaW50ZWdlciBhcmdzICovCit0eXBlZGVmIF9fdWludDMyX3QgZmZpX2FyZzsKK3R5cGVkZWYgX19pbnQzMl90IGZmaV9zYXJnOworIyAgZWxzZQorLyogTjMyIGFuZCBONjQgZnJhbWVzIGhhdmUgNjRiaXQgaW50ZWdlciBhcmdzICovCit0eXBlZGVmIF9fdWludDY0X3QgZmZpX2FyZzsKK3R5cGVkZWYgX19pbnQ2NF90IGZmaV9zYXJnOworIyAgZW5kaWYKKyMgZW5kaWYgLyogX19HTlVDX18gKi8KIAogdHlwZWRlZiBlbnVtIGZmaV9hYmkgewogICBGRklfRklSU1RfQUJJID0gMCwKQEAgLTE2MSw2ICsxODQsOCBAQAogICBGRklfTjMyLAogICBGRklfTjY0LAogICBGRklfTzMyX1NPRlRfRkxPQVQsCisgIEZGSV9OMzJfU09GVF9GTE9BVCwKKyAgRkZJX042NF9TT0ZUX0ZMT0FULAogCiAjaWZkZWYgRkZJX01JUFNfTzMyCiAjaWZkZWYgX19taXBzX3NvZnRfZmxvYXQKQEAgLTE3MCw5ICsxOTUsMTcgQEAKICNlbmRpZgogI2Vsc2UKICMgaWYgX01JUFNfU0lNPT1fQUJJNjQKKyMgIGlmZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9ONjRfU09GVF9GTE9BVCwKKyMgIGVsc2UKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX042NCwKKyMgIGVuZGlmCiAjIGVsc2UKKyMgIGlmZGVmIF9fbWlwc19zb2Z0X2Zsb2F0CisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9OMzJfU09GVF9GTE9BVCwKKyMgIGVsc2UKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX04zMiwKKyMgIGVuZGlmCiAjIGVuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKaW5kZXggMjg2MDdiMC4uYWUyMzA5NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIG4zMi5TIC0gQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk4LCAyMDA1ICBSZWQgSGF0LCBJbmMuCisgICBuMzIuUyAtIENvcHlyaWdodCAoYykgMTk5NiwgMTk5OCwgMjAwNSwgMjAwNywgMjAwOSwgMjAxMCAgUmVkIEhhdCwgSW5jLgogICAgCiAgICBNSVBTIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAogCkBAIC0xNCwxNCArMTQsMTQgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIExJQkZGSV9BU00JCkBAIC00MCw3ICs0MCw5IEBACiAKICNkZWZpbmUgU0laRU9GX0ZSQU1FCSggOCAqIEZGSV9TSVpFT0ZfQVJHICkKIAorI2lmZGVmIF9fR05VQ19fCiAJLmFiaWNhbGxzCisjZW5kaWYKIAkudGV4dAogCS5hbGlnbgkyCiAJLmdsb2JsCWZmaV9jYWxsX04zMgpAQCAtMjE3LDggKzIxOSwxMCBAQAogCiAJIyBTaGlmdCB0aGUgcmV0dXJuIHR5cGUgZmxhZyBvdmVyCiAJU1JMCXQ2LCA4KkZGSV9GTEFHX0JJVFMKLQkKKworCWJlcQl0NiwgRkZJX1RZUEVfU0lOVDMyLCByZXRpbnQJCiAJYm5lICAgICB0NiwgRkZJX1RZUEVfSU5ULCByZXRmbG9hdAorcmV0aW50OgogCWphbAl0OQogCVJFR19MCXQ0LCA0KkZGSV9TSVpFT0ZfQVJHKCRmcCkKIAlSRUdfUwl2MCwgMCh0NCkKQEAgLTI3NywxMiArMjgxLDU4IEBACiAJYgllcGlsb2d1ZQogCQogcmV0c3RydWN0X2ZfZDoJCi0JYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRkQsIHJldHN0cnVjdF9zbWFsbAorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0ZELCByZXRzdHJ1Y3RfZF9zb2Z0CiAJamFsCXQ5CiAJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQogCXMucwkkZjAsIDAodDQpCiAJcy5kCSRmMiwgOCh0NCkKIAliCWVwaWxvZ3VlCisKK3JldHN0cnVjdF9kX3NvZnQ6CisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRF9TT0ZULCByZXRzdHJ1Y3RfZl9zb2Z0CisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXNkCXYwLCAwKHQ0KQorCWIJZXBpbG9ndWUKKwkKK3JldHN0cnVjdF9mX3NvZnQ6CQorCWJuZQl0NiwgRkZJX1RZUEVfU1RSVUNUX0ZfU09GVCwgcmV0c3RydWN0X2RfZF9zb2Z0CisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXN3CXYwLCAwKHQ0KQorCWIJZXBpbG9ndWUKKwkKK3JldHN0cnVjdF9kX2Rfc29mdDoJCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCwgcmV0c3RydWN0X2ZfZl9zb2Z0CisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXNkCXYwLCAwKHQ0KQorCXNkCXYxLCA4KHQ0KQorCWIJZXBpbG9ndWUKKwkKK3JldHN0cnVjdF9mX2Zfc29mdDoJCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCwgcmV0c3RydWN0X2RfZl9zb2Z0CisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXN3CXYwLCAwKHQ0KQorCXN3CXYxLCA0KHQ0KQorCWIJZXBpbG9ndWUKKwkKK3JldHN0cnVjdF9kX2Zfc29mdDoJCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfREZfU09GVCwgcmV0c3RydWN0X2ZfZF9zb2Z0CisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXNkCXYwLCAwKHQ0KQorCXN3CXYxLCA4KHQ0KQorCWIJZXBpbG9ndWUKKwkKK3JldHN0cnVjdF9mX2Rfc29mdDoJCisJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfRkRfU09GVCwgcmV0c3RydWN0X3NtYWxsCisJamFsCXQ5CisJUkVHX0wJdDQsIDQqRkZJX1NJWkVPRl9BUkcoJGZwKQorCXN3CXYwLCAwKHQ0KQorCXNkCXYxLCA4KHQ0KQorCWIJZXBpbG9ndWUKIAkKIHJldHN0cnVjdF9zbWFsbDoJCiAJYm5lCXQ2LCBGRklfVFlQRV9TVFJVQ1RfU01BTEwsIHJldHN0cnVjdF9zbWFsbDIKQEAgLTQxMyw2ICs0NjMsMTEgQEAKIAlqYWxyCXQ5CiAKIAkjIFJldHVybiBmbGFncyBhcmUgaW4gdjAKKwlibmUgICAgIHYwLCBGRklfVFlQRV9TSU5UMzIsIGNsc19yZXRpbnQKKwlsdwl2MCwgVjBfT0ZGMigkc3ApCisJYgljbHNfZXBpbG9ndWUKKworY2xzX3JldGludDoKIAlibmUgICAgIHYwLCBGRklfVFlQRV9JTlQsIGNsc19yZXRmbG9hdAogCVJFR19MCXYwLCBWMF9PRkYyKCRzcCkKIAliCWNsc19lcGlsb2d1ZQpAQCAtNDc0LDYgKzUyOSw3IEBACiAuTEZFMjoJCiAJLmVuZAlmZmlfY2xvc3VyZV9OMzIKIAorI2lmZGVmIF9fR05VQ19fCiAgICAgICAgIC5zZWN0aW9uICAgICAgICAuZWhfZnJhbWUsImF3IixAcHJvZ2JpdHMKIC5MZnJhbWUxOgogICAgICAgICAuNGJ5dGUgIC5MRUNJRTEtLkxTQ0lFMQkJIyBsZW5ndGgKQEAgLTUzMCw1ICs1ODYsNiBAQAogCS51bGViMTI4IChTSVpFT0ZfRlJBTUUyIC0gUkFfT0ZGMikvNAogCS5hbGlnbglFSF9GUkFNRV9BTElHTgogLkxFRkRFMzoKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwkKIAkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9vMzIuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbzMyLlMKaW5kZXggMmU4MGU5Yy4uZWIyNzk4MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9vMzIuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL28zMi5TCkBAIC0xNCwxNCArMTQsMTQgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIExJQkZGSV9BU00JCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9lYWJpLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9lYWJpLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5ZWE0YgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2VhYmkuUwpAQCAtMCwwICsxLDEyOCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGVhYmkuUyAtIENvcHlyaWdodCAoYykgMjAwNCAgQW50aG9ueSBHcmVlbgorICAgCisgICBGUi1WIEFzc2VtYmx5IGdsdWUuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTElCRkZJX0FTTQkKKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworCS5nbG9ibCBmZmlfcHJlcF9hcmdzX0VBQkkKKworCS50ZXh0CisJLnAyYWxpZ24gNAorCS5nbG9ibCBmZmlfY2FsbF9FQUJJCisJLnR5cGUgZmZpX2NhbGxfRUFCSSwgQGZ1bmN0aW9uCisKKwkjIGdyOCA6ICAgZmZpX3ByZXBfYXJncworCSMgZ3I5IDogICAmZWNpZgorCSMgZ3IxMDogICBjaWYtPmJ5dGVzCisJIyBncjExOiAgIGZpZy0+ZmxhZ3MKKwkjIGdyMTI6ICAgZWNpZi5ydmFsdWUKKwkjIGdyMTM6ICAgZm4KKwkKK2ZmaV9jYWxsX0VBQkk6CQorCWFkZGkJc3AsICMtODAsIHNwCisJc3RpCWZwLCBAKHNwLCAjMjQpCisJYWRkaQlzcCwgIzI0LCBmcAorCW1vdnNnCWxyLCBncjUKKworCS8qIE1ha2Ugcm9vbSBmb3IgdGhlIG5ldyBhcmd1bWVudHMuICAqLworCS8qIHN1YmkJc3AsIGZwLCBncjEwICovCisJCisJLyogU3RvcmUgcmV0dXJuIGFkZHJlc3MgYW5kIGluY29taW5nIGFyZ3Mgb24gc3RhY2suICAqLworCXN0aQlncjUsIEAoZnAsICM4KQorCXN0aQlncjgsIEAoZnAsICMtNCkKKwlzdGkJZ3I5LCBAKGZwLCAjLTgpCisJc3RpCWdyMTAsIEAoZnAsICMtMTIpCisJc3RpCWdyMTEsIEAoZnAsICMtMTYpCisJc3RpCWdyMTIsIEAoZnAsICMtMjApCisJc3RpCWdyMTMsIEAoZnAsICMtMjQpCisKKwlzdWIgICAgIHNwLCBncjEwLCBzcAorCQorCS8qIENhbGwgZmZpX3ByZXBfYXJncy4gICovCisJbGRpCUAoZnAsICMtNCksIGdyNAorCWFkZGkJc3AsICMwLCBncjgKKwlsZGkJQChmcCwgIy04KSwgZ3I5CisjaWZkZWYgX19GUlZfRkRQSUNfXworCWxkZAlAKGdyNCwgZ3IwKSwgZ3IxNAorCWNhbGxsCUAoZ3IxNCwgZ3IwKQorI2Vsc2UKKwljYWxsbAlAKGdyNCwgZ3IwKQorI2VuZGlmCQorCisJLyogZmZpX3ByZXBfYXJncyByZXR1cm5zIHRoZSBuZXcgc3RhY2sgcG9pbnRlci4gICovCisJbW92CWdyOCwgZ3I0CisJCQorCWxkaQlAKHNwLCAjMCksIGdyOAorCWxkaQlAKHNwLCAjNCksIGdyOQorCWxkaQlAKHNwLCAjOCksIGdyMTAKKwlsZGkJQChzcCwgIzEyKSwgZ3IxMQorCWxkaQlAKHNwLCAjMTYpLCBncjEyCisJbGRpCUAoc3AsICMyMCksIGdyMTMKKworCS8qIEFsd2F5cyBjb3B5IHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpbnRvIHRoZSBoaWRkZW4KKwkgICBwYXJhbWV0ZXIgcmVnaXN0ZXIuICBUaGlzIGlzIG9ubHkgc3RyaWN0bHkgbmVjZXNzYXJ5CisJICAgd2hlbiB3ZSdyZSByZXR1cm5pbmcgYW4gYWdncmVnYXRlIHR5cGUsIGJ1dCBpdCBkb2Vzbid0CisJICAgaHVydCB0byBkbyB0aGlzIGFsbCB0aGUgdGltZSwgYW5kIGl0IHNhdmVzIGEgYnJhbmNoLiAgKi8KKwlsZGkJQChmcCwgIy0yMCksIGdyMworCisJLyogVXNlIHRoZSBmZmlfcHJlcF9hcmdzIHJldHVybiB2YWx1ZSBmb3IgdGhlIG5ldyBzcC4gICovCisJbW92CWdyNCwgc3AKKwkKKwkvKiBDYWxsIHRoZSB0YXJnZXQgZnVuY3Rpb24uICAqLworCWxkaQlAKGZwLCAtMjQpLCBncjQKKyNpZmRlZiBfX0ZSVl9GRFBJQ19fCisJbGRkCUAoZ3I0LCBncjApLCBncjE0CisJY2FsbGwJQChncjE0LCBncjApCisjZWxzZQorCWNhbGxsCUAoZ3I0LCBncjApCisjZW5kaWYJCisKKwkvKiBTdG9yZSB0aGUgcmVzdWx0LiAqLworCWxkaQlAKGZwLCAjLTE2KSwgZ3IxMCAgLyogZmlnLT5mbGFncyAqLworCWxkaQlAKGZwLCAjLTIwKSwgZ3I0ICAgLyogZWNpZi5ydmFsdWUgKi8KKworCS8qIElzIHRoZSByZXR1cm4gdmFsdWUgc3RvcmVkIGluIHR3byByZWdpc3RlcnM/ICAqLworCWNtcGkJZ3IxMCwgIzgsIGljYzAKKwlibmUJaWNjMCwgMCwgLkwyCisJLyogICBZZXMsIHNhdmUgdGhlbS4gICovCisJc3RpCWdyOCwgQChncjQsICMwKQorCXN0aQlncjksIEAoZ3I0LCAjNCkKKwlicmEJLkwzCisuTDI6CisJLyogSXMgdGhlIHJldHVybiB2YWx1ZSBhIHN0cnVjdHVyZT8gICovCisJY21waQlncjEwLCAjLTEsIGljYzAKKwliZXEJaWNjMCwgMCwgLkwzCisJLyogICBObywgc2F2ZSBhIDQgYnl0ZSByZXR1cm4gdmFsdWUuICAqLworCXN0aQlncjgsIEAoZ3I0LCAjMCkKKy5MMzoJCisKKwkvKiBSZXN0b3JlIHRoZSBzdGFjaywgYW5kIHJldHVybi4gICovCisJbGRpCUAoZnAsIDgpLCBncjUKKwlsZAlAKGZwLCBncjApLCBmcAorCWFkZGkJc3AsIzgwLHNwCisJam1wbAlAKGdyNSxncjApCisJLnNpemUgZmZpX2NhbGxfRUFCSSwgLi1mZmlfY2FsbF9FQUJJCisJCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21veGllL2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Y2JiYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZmkuYwpAQCAtMCwwICsxLDI3NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChDKSAyMDA5ICBBbnRob255IEdyZWVuCisgICAKKyAgIE1veGllIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKKyAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzICovCisKK3ZvaWQgKmZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZikKK3sKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CisgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CisgIHJlZ2lzdGVyIGNoYXIgKmFyZ3A7CisgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CisgIHJlZ2lzdGVyIGludCBjb3VudCA9IDA7CisKKyAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworICBhcmdwID0gc3RhY2s7CisKKyAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKKyAgICAgICAoaSAhPSAwKTsKKyAgICAgICBpLS0sIHBfYXJnKyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisgICAgICAKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKworICAgICAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKwl7CisJICB6ID0gc2l6ZW9mKHZvaWQqKTsKKwkgICoodm9pZCAqKikgYXJncCA9ICpwX2FyZ3Y7CisJfSAKKyAgICAgIC8qICAgICAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQorCXsKKwkgIGlmIChjb3VudCA+IDI0KQorCSAgICB7CisJICAgICAgLy8gVGhpcyBpcyBnb2luZyBvbiB0aGUgc3RhY2suICBUdXJuIGl0IGludG8gYSBkb3VibGUuICAKKwkgICAgICAqKGRvdWJsZSAqKSBhcmdwID0gKGRvdWJsZSkgKihmbG9hdCopKCogcF9hcmd2KTsKKwkgICAgICB6ID0gc2l6ZW9mKGRvdWJsZSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgKih2b2lkICoqKSBhcmdwID0gKih2b2lkICoqKSgqIHBfYXJndik7CisJfSAgKi8KKyAgICAgIGVsc2UgaWYgKHogPCBzaXplb2YoaW50KSkKKwl7CisJICB6ID0gc2l6ZW9mKGludCk7CisJICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQorCSAgICB7CisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQ4ICopKCogcF9hcmd2KTsKKwkgICAgICBicmVhazsKKwkgICAgICAKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQ4ICopKCogcF9hcmd2KTsKKwkgICAgICBicmVhazsKKwkgICAgICAKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQxNiAqKSgqIHBfYXJndik7CisJICAgICAgYnJlYWs7CisJCSAgCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDE2ICopKCogcF9hcmd2KTsKKwkgICAgICBicmVhazsKKwkJICAKKwkgICAgZGVmYXVsdDoKKwkgICAgICBGRklfQVNTRVJUKDApOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoeiA9PSBzaXplb2YoaW50KSkKKwl7CisJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQzMiAqKSgqIHBfYXJndik7CisJfQorICAgICAgZWxzZQorCXsKKwkgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKKwl9CisgICAgICBwX2FyZ3YrKzsKKyAgICAgIGFyZ3AgKz0gejsKKyAgICAgIGNvdW50ICs9IHo7CisgICAgfQorCisgIHJldHVybiAoc3RhY2sgKyAoKGNvdW50ID4gMjQpID8gMjQgOiBBTElHTl9ET1dOKGNvdW50LCA4KSkpOworfQorCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCitmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKGZmaV9jaWYgKmNpZikKK3sKKyAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIGNpZi0+ZmxhZ3MgPSAtMTsKKyAgZWxzZQorICAgIGNpZi0+ZmxhZ3MgPSBjaWYtPnJ0eXBlLT5zaXplOworCisgIGNpZi0+Ynl0ZXMgPSBBTElHTiAoY2lmLT5ieXRlcywgOCk7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworZXh0ZXJuIHZvaWQgZmZpX2NhbGxfRUFCSSh2b2lkICooKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIAorCQkJICBleHRlbmRlZF9jaWYgKiwgCisJCQkgIHVuc2lnbmVkLCB1bnNpZ25lZCwgCisJCQkgIHVuc2lnbmVkICosIAorCQkJICB2b2lkICgqZm4pKHZvaWQpKTsKKwordm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsIAorCSAgICAgIHZvaWQgKCpmbikodm9pZCksIAorCSAgICAgIHZvaWQgKnJ2YWx1ZSwgCisJICAgICAgdm9pZCAqKmF2YWx1ZSkKK3sKKyAgZXh0ZW5kZWRfY2lmIGVjaWY7CisKKyAgZWNpZi5jaWYgPSBjaWY7CisgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworICAKKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybgkqLworICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZQkJICAgICAgICAqLworCisgIGlmICgocnZhbHVlID09IE5VTEwpICYmIAorICAgICAgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKSkKKyAgICB7CisgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB9CisgIGVsc2UKKyAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKKyAgICAKKyAgCisgIHN3aXRjaCAoY2lmLT5hYmkpIAorICAgIHsKKyAgICBjYXNlIEZGSV9FQUJJOgorICAgICAgZmZpX2NhbGxfRUFCSShmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgCisJCSAgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIEZGSV9BU1NFUlQoMCk7CisgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgZmZpX2Nsb3N1cmVfZWFiaSAodW5zaWduZWQgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJnMywKKwkJICAgICAgIHVuc2lnbmVkIGFyZzQsIHVuc2lnbmVkIGFyZzUsIHVuc2lnbmVkIGFyZzYpCit7CisgIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGEgdHJhbXBvbGluZS4gIFRoZSB0cmFtcG9saW5lIHN0b3dzIGEKKyAgICAgcG9pbnRlciB0byB0aGUgZmZpX2Nsb3N1cmUgb2JqZWN0IGluIGdyNy4gIFdlIG11c3Qgc2F2ZSB0aGlzCisgICAgIHBvaW50ZXIgaW4gYSBwbGFjZSB0aGF0IHdpbGwgcGVyc2lzdCB3aGlsZSB3ZSBkbyBvdXIgd29yay4gICovCisgIHJlZ2lzdGVyIGZmaV9jbG9zdXJlICpjcmVnIF9fYXNtX18gKCJncjciKTsKKyAgZmZpX2Nsb3N1cmUgKmNsb3N1cmUgPSBjcmVnOworCisgIC8qIEFyZ3VtZW50cyB0aGF0IGRvbid0IGZpdCBpbiByZWdpc3RlcnMgYXJlIGZvdW5kIG9uIHRoZSBzdGFjaworICAgICBhdCBhIGZpeGVkIG9mZnNldCBhYm92ZSB0aGUgY3VycmVudCBmcmFtZSBwb2ludGVyLiAgKi8KKyAgcmVnaXN0ZXIgY2hhciAqZnJhbWVfcG9pbnRlciBfX2FzbV9fICgiZnAiKTsKKyAgY2hhciAqc3RhY2tfYXJncyA9IGZyYW1lX3BvaW50ZXIgKyAxNjsKKworICAvKiBMYXkgdGhlIHJlZ2lzdGVyIGFyZ3VtZW50cyBkb3duIGluIGEgY29udGludW91cyBjaHVuayBvZiBtZW1vcnkuICAqLworICB1bnNpZ25lZCByZWdpc3Rlcl9hcmdzWzZdID0KKyAgICB7IGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYgfTsKKworICBmZmlfY2lmICpjaWYgPSBjbG9zdXJlLT5jaWY7CisgIGZmaV90eXBlICoqYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7CisgIHZvaWQgKiphdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2Yodm9pZCAqKSk7CisgIGNoYXIgKnB0ciA9IChjaGFyICopIHJlZ2lzdGVyX2FyZ3M7CisgIGludCBpOworCisgIC8qIEZpbmQgdGhlIGFkZHJlc3Mgb2YgZWFjaCBhcmd1bWVudC4gICovCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyspCisgICAgeworICAgICAgc3dpdGNoIChhcmdfdHlwZXNbaV0tPnR5cGUpCisJeworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgIGF2YWx1ZVtpXSA9IHB0ciArIDM7CisJICBicmVhazsKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgIGF2YWx1ZVtpXSA9IHB0ciArIDI7CisJICBicmVhazsKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgYXZhbHVlW2ldID0gcHRyOworCSAgYnJlYWs7CisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBhdmFsdWVbaV0gPSAqKHZvaWQqKilwdHI7CisJICBicmVhazsKKwlkZWZhdWx0OgorCSAgLyogVGhpcyBpcyBhbiA4LWJ5dGUgdmFsdWUuICAqLworCSAgYXZhbHVlW2ldID0gcHRyOworCSAgcHRyICs9IDQ7CisJICBicmVhazsKKwl9CisgICAgICBwdHIgKz0gNDsKKworICAgICAgLyogSWYgd2UndmUgaGFuZGxlZCBtb3JlIGFyZ3VtZW50cyB0aGFuIGZpdCBpbiByZWdpc3RlcnMsCisJIHN0YXJ0IGxvb2tpbmcgYXQgdGhlIHRob3NlIHBhc3NlZCBvbiB0aGUgc3RhY2suICAqLworICAgICAgaWYgKHB0ciA9PSAoKGNoYXIgKilyZWdpc3Rlcl9hcmdzICsgKDYqNCkpKQorCXB0ciA9IHN0YWNrX2FyZ3M7CisgICAgfQorCisgIC8qIEludm9rZSB0aGUgY2xvc3VyZS4gICovCisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKyAgICB7CisgICAgICAvKiBUaGUgY2FsbGVyIGFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHJldHVybiBzdHJ1Y3R1cmUsIGFuZAorICAgICAgIHBhc3NlcyBhIHBvaW50ZXIgdG8gdGhpcyBzcGFjZSBpbiBncjMuICBVc2UgdGhpcyB2YWx1ZSBkaXJlY3RseQorICAgICAgIGFzIHRoZSByZXR1cm4gdmFsdWUuICAqLworICAgICAgcmVnaXN0ZXIgdm9pZCAqcmV0dXJuX3N0cnVjdF9wdHIgX19hc21fXygiZ3IzIik7CisgICAgICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCByZXR1cm5fc3RydWN0X3B0ciwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbi4gICovCisgICAgICBsb25nIGxvbmcgcnZhbHVlOworICAgICAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgJnJ2YWx1ZSwgYXZhbHVlLCBjbG9zdXJlLT51c2VyX2RhdGEpOworCisgICAgICAvKiBGdW5jdGlvbnMgcmV0dXJuIDQtYnl0ZSBvciBzbWFsbGVyIHJlc3VsdHMgaW4gZ3I4LiAgOC1ieXRlCisJIHZhbHVlcyBhbHNvIHVzZSBncjkuICBXZSBmaWxsIHRoZSBib3RoLCBldmVuIGZvciBzbWFsbCByZXR1cm4KKwkgdmFsdWVzLCBqdXN0IHRvIGF2b2lkIGEgYnJhbmNoLiAgKi8gCisgICAgICBhc20gKCJsZGkgIEAoJTAsICMwKSwgZ3I4IiA6IDogInIiICgmcnZhbHVlKSk7CisgICAgICBhc20gKCJsZGkgIEAoJTAsICMwKSwgZ3I5IiA6IDogInIiICgmKChpbnQgKikgJnJ2YWx1ZSlbMV0pKTsKKyAgICB9Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSogY2xvc3VyZSwKKwkJICAgICAgZmZpX2NpZiogY2lmLAorCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsCisJCSAgICAgIHZvaWQgKmNvZGVsb2MpCit7CisgIHVuc2lnbmVkIGludCAqdHJhbXAgPSAodW5zaWduZWQgaW50ICopICZjbG9zdXJlLT50cmFtcFswXTsKKyAgdW5zaWduZWQgbG9uZyBmbiA9IChsb25nKSBmZmlfY2xvc3VyZV9lYWJpOworICB1bnNpZ25lZCBsb25nIGNscyA9IChsb25nKSBjb2RlbG9jOworICBpbnQgaTsKKworICBmbiA9ICh1bnNpZ25lZCBsb25nKSBmZmlfY2xvc3VyZV9lYWJpOworCisgIHRyYW1wWzBdID0gMHg4Y2ZjMDAwMCArIChmbiAgJiAweGZmZmYpOyAvKiBzZXRsb3MgbG8oZm4pLCBncjYgICAgKi8KKyAgdHJhbXBbMV0gPSAweDhlZmMwMDAwICsgKGNscyAmIDB4ZmZmZik7IC8qIHNldGxvcyBsbyhjbHMpLCBncjcgICAqLworICB0cmFtcFsyXSA9IDB4OGNmODAwMDAgKyAoZm4gID4+IDE2KTsJICAvKiBzZXRoaSBoaShmbiksIGdyNiAgICAgKi8KKyAgdHJhbXBbM10gPSAweDhlZjgwMDAwICsgKGNscyA+PiAxNik7ICAgIC8qIHNldGhpIGhpKGNscyksIGdyNyAgICAqLworICB0cmFtcFs0XSA9IDB4ODAzMDAwMDY7ICAgICAgICAgICAgICAgICAgLyogam1wbCBAKGdyMCwgZ3I2KSAgICAgICovCisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICAvKiBDYWNoZSBmbHVzaGluZy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBGRklfVFJBTVBPTElORV9TSVpFOyBpKyspCisgICAgX19hc21fXyB2b2xhdGlsZSAoImRjZiBAKCUwLCUxKVxuXHRpY2kgQCglMiwlMSkiIDo6ICJyIiAodHJhbXApLCAiciIgKGkpLAorCQkgICAgICAiciIgKGNvZGVsb2MpKTsKKworICByZXR1cm4gRkZJX09LOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tb3hpZS9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTMwNWQxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbW94aWUvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw1NiBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KKyAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAyMDA5IEFudGhvbnkgR3JlZW4KKyAgIFRhcmdldCBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgTW94aWUKKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworLyogLS0tLSBTeXN0ZW0gc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKwordHlwZWRlZiBlbnVtIGZmaV9hYmkgeworICBGRklfRklSU1RfQUJJID0gMCwKKworI2lmZGVmIE1PWElFCisgIEZGSV9FQUJJLAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfRUFCSSwKKyNlbmRpZgorCisgIEZGSV9MQVNUX0FCSSA9IEZGSV9ERUZBVUxUX0FCSSArIDEKK30gZmZpX2FiaTsKKyNlbmRpZgorCisvKiAtLS0tIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAwCisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisKKy8qIFRyYW1wb2xpbmVzIGFyZSA1IDQtYnl0ZSBpbnN0cnVjdGlvbnMgbG9uZy4gICovCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgKDUqNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wYS9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3BhL2ZmaS5jCmluZGV4IGM3YTE0MzUuLjZkNzYwNmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3BhL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3BhL2ZmaS5jCkBAIC00OTIsNiArNDkyLDEzIEBACiAJICBhdmFsdWVbaV0gPSAodm9pZCAqKShzdGFjayAtIHNsb3QpOwogCSAgYnJlYWs7CiAKKyNpZmRlZiBQQV9IUFVYCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgLyogTG9uZyBkb3VibGVzIGFyZSB0cmVhdGVkIGxpa2UgYSBiaWcgc3RydWN0dXJlLiAgKi8KKwkgIGF2YWx1ZVtpXSA9ICh2b2lkICopICooc3RhY2sgLSBzbG90KTsKKwkgIGJyZWFrOworI2VuZGlmCisKIAljYXNlIEZGSV9UWVBFX1NUUlVDVDoKIAkgIC8qIFN0cnVjdHMgc21hbGxlciBvciBlcXVhbCB0aGFuIDQgYnl0ZXMgYXJlIHBhc3NlZCBpbiBvbmUKIAkgICAgIHJlZ2lzdGVyLiBTdHJ1Y3RzIHNtYWxsZXIgb3IgZXF1YWwgOCBieXRlcyBhcmUgcGFzc2VkIGluIHR3bwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXguUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4LlMKaW5kZXggNDU1MDJmNy4uYzZmODc2NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXguUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeC5TCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGFpeC5TIC0gQ29weXJpZ2h0IChjKSAyMDAyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgYWl4LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICAgIGJhc2VkIG9uIGRhcndpbi5TIGJ5IEpvaG4gSG9ybmt2aXN0CiAKICAgIFBvd2VyUEMgQXNzZW1ibHkgZ2x1ZS4KQEAgLTg2LDkgKzg2LDEzIEBACiAjZGVmaW5lIEwoeCkgeAogCS5maWxlICJhaXguUyIKIAkudG9jCi0JLmNzZWN0IC50ZXh0W1BSXQotCS5hbGlnbiAyCi0uZ2xvYmwgZmZpX3ByZXBfYXJncworCisJLyogdm9pZCBmZmlfY2FsbF9BSVgoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCBsb25nIGJ5dGVzLAorCSAqCQkgICAgIHVuc2lnbmVkIGludCBmbGFncywgdW5zaWduZWQgaW50ICpydmFsdWUsCisJICoJCSAgICAgdm9pZCAoKmZuKSgpLAorCSAqCQkgICAgIHZvaWQgKCpwcmVwX2FyZ3MpKGV4dGVuZGVkX2NpZiosIHVuc2lnbmVkICpjb25zdCkpOworCSAqIHIzPWVjaWYsIHI0PWJ5dGVzLCByNT1mbGFncywgcjY9cnZhbHVlLCByNz1mbiwgcjg9cHJlcF9hcmdzCisJICovCiAKIC5jc2VjdCAudGV4dFtQUl0KIAkuYWxpZ24gMgpAQCAtOTYsNjEgKzEwMCwxNTEgQEAKIAkuZ2xvYmwgLmZmaV9jYWxsX0FJWAogLmNzZWN0IGZmaV9jYWxsX0FJWFtEU10KIGZmaV9jYWxsX0FJWDoKKyNpZmRlZiBfXzY0QklUX18KKwkubGxvbmcgLmZmaV9jYWxsX0FJWCwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgLnRleHRbUFJdCisuZmZpX2NhbGxfQUlYOgorCS8qIFNhdmUgcmVnaXN0ZXJzIHdlIHVzZS4gICovCisJbWZscglyMAorCisJc3RkCXIyOCwtMzIocjEpCisJc3RkCXIyOSwtMjQocjEpCisJc3RkCXIzMCwtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisKKwlzdGQJcjAsIDE2KHIxKQorCW1yCXIyOCwgcjEJCS8qIG91ciBBUC4gICovCisJc3RkdXgJcjEsIHIxLCByNAorCisJLyogU2F2ZSBhcmd1bWVudHMgb3ZlciBjYWxsLi4uICAqLworCW1yCXIzMSwgcjUJLyogZmxhZ3MsICovCisJbXIJcjMwLCByNgkvKiBydmFsdWUsICovCisJbXIJcjI5LCByNwkvKiBmdW5jdGlvbiBhZGRyZXNzLiAgKi8KKwlzdGQJcjIsIDQwKHIxKQorCisJLyogQ2FsbCBmZmlfcHJlcF9hcmdzLiAgKi8KKwltcglyNCwgcjEKKwlibAkuZmZpX3ByZXBfYXJncworCisJLyogTm93IGRvIHRoZSBjYWxsLiAgKi8KKwlsZAlyMCwgMChyMjkpCisJbGQJcjIsIDgocjI5KQorCWxkCXIxMSwgMTYocjI5KQorCS8qIFNldCB1cCBjcjEgd2l0aCBiaXRzIDQtNyBvZiB0aGUgZmxhZ3MuICAqLworCW10Y3JmCTB4NDAsIHIzMQorCW10Y3RyCXIwCisJLyogTG9hZCBhbGwgdGhvc2UgYXJndW1lbnQgcmVnaXN0ZXJzLiAgKi8KKwkvLyBXZSBoYXZlIHNldCB1cCBhIG5pY2Ugc3RhY2sgZnJhbWUsIGp1c3QgbG9hZCBpdCBpbnRvIHJlZ2lzdGVycy4KKwlsZAlyMywgNDArKDEqOCkocjEpCisJbGQJcjQsIDQwKygyKjgpKHIxKQorCWxkCXI1LCA0MCsoMyo4KShyMSkKKwlsZAlyNiwgNDArKDQqOCkocjEpCisJbm9wCisJbGQJcjcsIDQwKyg1KjgpKHIxKQorCWxkCXI4LCA0MCsoNio4KShyMSkKKwlsZAlyOSwgNDArKDcqOCkocjEpCisJbGQJcjEwLDQwKyg4KjgpKHIxKQorCitMMToKKwkvKiBMb2FkIGFsbCB0aGUgRlAgcmVnaXN0ZXJzLiAgKi8KKwliZgk2LEwyIC8vIDJmICsgMHgxOAorCWxmZAlmMSwtMzItKDEzKjgpKHIyOCkKKwlsZmQJZjIsLTMyLSgxMio4KShyMjgpCisJbGZkCWYzLC0zMi0oMTEqOCkocjI4KQorCWxmZAlmNCwtMzItKDEwKjgpKHIyOCkKKwlub3AKKwlsZmQJZjUsLTMyLSg5KjgpKHIyOCkKKwlsZmQJZjYsLTMyLSg4KjgpKHIyOCkKKwlsZmQJZjcsLTMyLSg3KjgpKHIyOCkKKwlsZmQJZjgsLTMyLSg2KjgpKHIyOCkKKwlub3AKKwlsZmQJZjksLTMyLSg1KjgpKHIyOCkKKwlsZmQJZjEwLC0zMi0oNCo4KShyMjgpCisJbGZkCWYxMSwtMzItKDMqOCkocjI4KQorCWxmZAlmMTIsLTMyLSgyKjgpKHIyOCkKKwlub3AKKwlsZmQJZjEzLC0zMi0oMSo4KShyMjgpCisKK0wyOgorCS8qIE1ha2UgdGhlIGNhbGwuICAqLworCWJjdHJsCisJbGQJcjIsIDQwKHIxKQorCisJLyogTm93LCBkZWFsIHdpdGggdGhlIHJldHVybiB2YWx1ZS4gICovCisJbXRjcmYJMHgwMSwgcjMxCisKKwlidAkzMCwgTChkb25lX3JldHVybl92YWx1ZSkKKwlidAkyOSwgTChmcF9yZXR1cm5fdmFsdWUpCisJc3RkCXIzLCAwKHIzMCkKKworCS8qIEZhbGwgdGhyb3VnaC4uLiAgKi8KKworTChkb25lX3JldHVybl92YWx1ZSk6CisJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzIHdlIHVzZWQgYW5kIHJldHVybi4gICovCisJbXIJcjEsIHIyOAorCWxkCXIwLCAxNihyMjgpCisJbGQJcjI4LCAtMzIocjEpCisJbXRscglyMAorCWxkCXIyOSwgLTI0KHIxKQorCWxkCXIzMCwgLTE2KHIxKQorCWxkCXIzMSwgLTgocjEpCisJYmxyCisKK0woZnBfcmV0dXJuX3ZhbHVlKToKKwliZgkyOCwgTChmbG9hdF9yZXR1cm5fdmFsdWUpCisJc3RmZAlmMSwgMChyMzApCisJYmYJMzEsIEwoZG9uZV9yZXR1cm5fdmFsdWUpCisJc3RmZAlmMiwgOChyMzApCisJYglMKGRvbmVfcmV0dXJuX3ZhbHVlKQorTChmbG9hdF9yZXR1cm5fdmFsdWUpOgorCXN0ZnMJZjEsIDAocjMwKQorCWIJTChkb25lX3JldHVybl92YWx1ZSkKKworI2Vsc2UgLyogISBfXzY0QklUX18gKi8KKwkKIAkubG9uZyAuZmZpX2NhbGxfQUlYLCBUT0NbdGMwXSwgMAogCS5jc2VjdCAudGV4dFtQUl0KIC5mZmlfY2FsbF9BSVg6Ci0JbXIgICAgICByMTIscjggLy8gV2Ugb25seSBuZWVkIHIxMiB1bnRpbCB0aGUgY2FsbCwgc28gaXQgZG9lc24ndCBoYXZlIHRvIGJlIHNhdmVkLi4uCi0JLyogU2F2ZSB0aGUgb2xkIHN0YWNrIHBvaW50ZXIgYXMgQVAuICAqLwotCW1yCXI4LHIxCi0KLQkvKiBBbGxvY2F0ZSB0aGUgc3RhY2sgc3BhY2Ugd2UgbmVlZC4gICovCi0Jc3R3dXgJcjEscjEscjQKLQogCS8qIFNhdmUgcmVnaXN0ZXJzIHdlIHVzZS4gICovCi0JbWZscglyOQorCW1mbHIJcjAKIAotCXN0dwlyMjgsLTE2KHI4KQotCXN0dwlyMjksLTEyKHI4KQotCXN0dwlyMzAsIC04KHI4KQotCXN0dwlyMzEsIC00KHI4KQorCXN0dwlyMjgsLTE2KHIxKQorCXN0dwlyMjksLTEyKHIxKQorCXN0dwlyMzAsIC04KHIxKQorCXN0dwlyMzEsIC00KHIxKQogCi0Jc3R3CXI5LCAgOChyOCkKLQlzdHcJcjIsIDIwKHIxKQorCXN0dwlyMCwgOChyMSkKKwltcglyMjgsIHIxCQkvKiBvdXQgQVAuICAqLworCXN0d3V4CXIxLCByMSwgcjQKIAogCS8qIFNhdmUgYXJndW1lbnRzIG92ZXIgY2FsbC4uLiAgKi8KLQltcglyMzEscjUJLyogZmxhZ3MsICovCi0JbXIJcjMwLHI2CS8qIHJ2YWx1ZSwgKi8KLQltcglyMjkscjcJLyogZnVuY3Rpb24gYWRkcmVzcywgKi8KLQltcglyMjgscjgJLyogb3VyIEFQLiAqLworCW1yCXIzMSwgcjUJLyogZmxhZ3MsICovCisJbXIJcjMwLCByNgkvKiBydmFsdWUsICovCisJbXIJcjI5LCByNwkvKiBmdW5jdGlvbiBhZGRyZXNzLCAqLworCXN0dwlyMiwgMjAocjEpCiAKIAkvKiBDYWxsIGZmaV9wcmVwX2FyZ3MuICAqLwotCW1yCXI0LHIxCi0JbGkJcjksMAotCi0JbHd6CXIyLDQocjEyKQotCWx3eglyMTIsMChyMTIpCi0JbXRjdHIJcjEyIC8vIHIxMiBob2xkcyBhZGRyZXNzIG9mIF9mZmlfcHJlcF9hcmdzCi0JYmN0cmwKLQlsd3ogICAgIHIyLDIwKHIxKQorCW1yCXI0LCByMQorCWJsCS5mZmlfcHJlcF9hcmdzCiAKIAkvKiBOb3cgZG8gdGhlIGNhbGwuICAqLwotCWx3eglyMTIsMChyMjkpCisJbHd6CXIwLCAwKHIyOSkKKwlsd3oJcjIsIDQocjI5KQorCWx3eglyMTEsIDgocjI5KQogCS8qIFNldCB1cCBjcjEgd2l0aCBiaXRzIDQtNyBvZiB0aGUgZmxhZ3MuICAqLwotCW10Y3JmCTB4NDAscjMxCi0Jc3R3CXIyLDIwKHIxKQotCW10Y3RyCXIxMgotCWx3eglyMiw0KHIyOSkKKwltdGNyZgkweDQwLCByMzEKKwltdGN0cglyMAogCS8qIExvYWQgYWxsIHRob3NlIGFyZ3VtZW50IHJlZ2lzdGVycy4gICovCiAJLy8gV2UgaGF2ZSBzZXQgdXAgYSBuaWNlIHN0YWNrIGZyYW1lLCBqdXN0IGxvYWQgaXQgaW50byByZWdpc3RlcnMuCi0JbHd6ICAgICByMywgMjArKDEqNCkocjEpCi0JbHd6ICAgICByNCwgMjArKDIqNCkocjEpCi0JbHd6ICAgICByNSwgMjArKDMqNCkocjEpCi0JbHd6ICAgICByNiwgMjArKDQqNCkocjEpCisJbHd6CXIzLCAyMCsoMSo0KShyMSkKKwlsd3oJcjQsIDIwKygyKjQpKHIxKQorCWx3eglyNSwgMjArKDMqNCkocjEpCisJbHd6CXI2LCAyMCsoNCo0KShyMSkKIAlub3AKLQlsd3ogICAgIHI3LCAyMCsoNSo0KShyMSkKLQlsd3ogICAgIHI4LCAyMCsoNio0KShyMSkKLQlsd3ogICAgIHI5LCAyMCsoNyo0KShyMSkKLQlsd3ogICAgIHIxMCwyMCsoOCo0KShyMSkKKwlsd3oJcjcsIDIwKyg1KjQpKHIxKQorCWx3eglyOCwgMjArKDYqNCkocjEpCisJbHd6CXI5LCAyMCsoNyo0KShyMSkKKwlsd3oJcjEwLDIwKyg4KjQpKHIxKQogCiBMMToKIAkvKiBMb2FkIGFsbCB0aGUgRlAgcmVnaXN0ZXJzLiAgKi8KQEAgLTE2NSw0NyArMjU5LDQ4IEBACiAJbGZkCWY3LC0xNi0oNyo4KShyMjgpCiAJbGZkCWY4LC0xNi0oNio4KShyMjgpCiAJbm9wCi0JbGZkICAgICBmOSwtMTYtKDUqOCkocjI4KQotCWxmZCAgICAgZjEwLC0xNi0oNCo4KShyMjgpCi0JbGZkICAgICBmMTEsLTE2LSgzKjgpKHIyOCkKLQlsZmQgICAgIGYxMiwtMTYtKDIqOCkocjI4KQorCWxmZAlmOSwtMTYtKDUqOCkocjI4KQorCWxmZAlmMTAsLTE2LSg0KjgpKHIyOCkKKwlsZmQJZjExLC0xNi0oMyo4KShyMjgpCisJbGZkCWYxMiwtMTYtKDIqOCkocjI4KQogCW5vcAotCWxmZCAgICAgZjEzLC0xNi0oMSo4KShyMjgpCisJbGZkCWYxMywtMTYtKDEqOCkocjI4KQogCiBMMjoKIAkvKiBNYWtlIHRoZSBjYWxsLiAgKi8KIAliY3RybAotCWx3eiByMiwyMChyMSkKKwlsd3oJcjIsIDIwKHIxKQogCiAJLyogTm93LCBkZWFsIHdpdGggdGhlIHJldHVybiB2YWx1ZS4gICovCi0JbXRjcmYJMHgwMSxyMzEKKwltdGNyZgkweDAxLCByMzEKIAotCWJ0CTMwLEwoZG9uZV9yZXR1cm5fdmFsdWUpCi0JYnQJMjksTChmcF9yZXR1cm5fdmFsdWUpCi0Jc3R3CXIzLDAocjMwKQotCWJmCTI4LEwoZG9uZV9yZXR1cm5fdmFsdWUpCi0Jc3R3CXI0LDQocjMwKQorCWJ0CTMwLCBMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCWJ0CTI5LCBMKGZwX3JldHVybl92YWx1ZSkKKwlzdHcJcjMsIDAocjMwKQorCWJmCTI4LCBMKGRvbmVfcmV0dXJuX3ZhbHVlKQorCXN0dwlyNCwgNChyMzApCiAKIAkvKiBGYWxsIHRocm91Z2guLi4gICovCiAKIEwoZG9uZV9yZXR1cm5fdmFsdWUpOgogCS8qIFJlc3RvcmUgdGhlIHJlZ2lzdGVycyB3ZSB1c2VkIGFuZCByZXR1cm4uICAqLwotCWx3eglyOSwgICA4KHIyOCkKLQlsd3oJcjMxLCAgLTQocjI4KQotCW10bHIJcjkKLQlsd3oJcjMwLCAtOChyMjgpCi0JbHd6CXIyOSwtMTIocjI4KQotCWx3eglyMjgsLTE2KHIyOCkKLQlsd3oJcjEsMChyMSkKKwltcglyMSwgcjI4CisJbHd6CXIwLCA4KHIyOCkKKwlsd3oJcjI4LC0xNihyMSkKKwltdGxyCXIwCisJbHd6CXIyOSwtMTIocjEpCisJbHd6CXIzMCwgLTgocjEpCisJbHd6CXIzMSwgLTQocjEpCiAJYmxyCiAKIEwoZnBfcmV0dXJuX3ZhbHVlKToKLQliZgkyOCxMKGZsb2F0X3JldHVybl92YWx1ZSkKLQlzdGZkCWYxLDAocjMwKQorCWJmCTI4LCBMKGZsb2F0X3JldHVybl92YWx1ZSkKKwlzdGZkCWYxLCAwKHIzMCkKIAliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCiBMKGZsb2F0X3JldHVybl92YWx1ZSk6Ci0Jc3RmcwlmMSwwKHIzMCkKKwlzdGZzCWYxLCAwKHIzMCkKIAliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCisjZW5kaWYKIAkubG9uZyAwCiAJLmJ5dGUgMCwwLDAsMSwxMjgsNCwwLDAKIC8vRU5EKGZmaV9jYWxsX0FJWCkKQEAgLTIxNiw3ICszMTEsMTEgQEAKIAkuZ2xvYmwgLmZmaV9jYWxsX0RBUldJTgogLmNzZWN0IGZmaV9jYWxsX0RBUldJTltEU10KIGZmaV9jYWxsX0RBUldJTjoKKyNpZmRlZiBfXzY0QklUX18KKwkubGxvbmcgLmZmaV9jYWxsX0RBUldJTiwgVE9DW3RjMF0sIDAKKyNlbHNlCiAJLmxvbmcgLmZmaV9jYWxsX0RBUldJTiwgVE9DW3RjMF0sIDAKKyNlbmRpZgogCS5jc2VjdCAudGV4dFtQUl0KIC5mZmlfY2FsbF9EQVJXSU46CiAJYmxyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMKaW5kZXggN2JmNWM2NS4uNWM3NDQ0OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBhaXhfY2xvc3VyZS5TIC0gQ29weXJpZ2h0IChjKSAyMDAyIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBhaXhfY2xvc3VyZS5TIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAgYmFzZWQgb24gZGFyd2luX2Nsb3N1cmUuUwogCiAgICBQb3dlclBDIEFzc2VtYmx5IGdsdWUuCkBAIC05NCw2NSArOTQsNjYgQEAKIAkuZ2xvYmwgZmZpX2Nsb3N1cmVfQVNNCiAJLmdsb2JsIC5mZmlfY2xvc3VyZV9BU00KIC5jc2VjdCBmZmlfY2xvc3VyZV9BU01bRFNdCi0KIGZmaV9jbG9zdXJlX0FTTToKLQkubG9uZyAuZmZpX2Nsb3N1cmVfQVNNLCBUT0NbdGMwXSwgMAorI2lmZGVmIF9fNjRCSVRfXworCS5sbG9uZyAuZmZpX2Nsb3N1cmVfQVNNLCBUT0NbdGMwXSwgMAogCS5jc2VjdCAudGV4dFtQUl0KIC5mZmlfY2xvc3VyZV9BU006Ci0KLQltZmxyIHIwCQkJLyogZXh0cmFjdCByZXR1cm4gYWRkcmVzcyAqLwotCXN0dyByMCwgOChyMSkJCS8qIHNhdmUgdGhlIHJldHVybiBhZGRyZXNzICovCi0KLQkvKiAyNCBCeXRlcyAoTGlua2FnZSBBcmVhKSAqLwotCS8qIDMyIEJ5dGVzIChwYXJhbXMpICovCi0JLyogMTA0IEJ5dGVzICgxMyo4IGZyb20gRlBSKSAqLwotCS8qIDggQnl0ZXMgKHJlc3VsdCkgKi8KLQkvKiAxNjggQnl0ZXMgKi8KLQotCXN0d3UgcjEsLTE3NihyMSkJLyogc2tpcCBvdmVyIGNhbGxlciBzYXZlIGFyZWEKLQkJCQlrZWVwIHN0YWNrIGFsaWduZWQgdG8gMTYgICovCi0KIC8qIHdlIHdhbnQgdG8gYnVpbGQgdXAgYW4gYXJlYSBmb3IgdGhlIHBhcmFtZXRlcnMgcGFzc2VkICovCiAvKiBpbiByZWdpc3RlcnMgKGJvdGggZmxvYXRpbmcgcG9pbnQgYW5kIGludGVnZXIpICovCiAKIAkvKiB3ZSBzdG9yZSBncHIgMyB0byBncHIgMTAgKGFsaWduZWQgdG8gNCkKIAlpbiB0aGUgcGFyZW50cyBvdXRnb2luZyBhcmVhICAqLwotCXN0dyAgIHIzLCAyMDAocjEpCi0Jc3R3ICAgcjQsIDIwNChyMSkKLQlzdHcgICByNSwgMjA4KHIxKQotCXN0dyAgIHI2LCAyMTIocjEpCi0Jc3R3ICAgcjcsIDIxNihyMSkKLQlzdHcgICByOCwgMjIwKHIxKQotCXN0dyAgIHI5LCAyMjQocjEpCi0Jc3R3ICAgcjEwLCAyMjgocjEpCisJc3RkICAgcjMsIDQ4KygwKjgpKHIxKQorCXN0ZCAgIHI0LCA0OCsoMSo4KShyMSkKKwlzdGQgICByNSwgNDgrKDIqOCkocjEpCisJc3RkICAgcjYsIDQ4KygzKjgpKHIxKQorCW1mbHIgIHIwCisKKwlzdGQgICByNywgNDgrKDQqOCkocjEpCisJc3RkICAgcjgsIDQ4Kyg1KjgpKHIxKQorCXN0ZCAgIHI5LCA0OCsoNio4KShyMSkKKwlzdGQgICByMTAsIDQ4Kyg3KjgpKHIxKQorCXN0ZCAgIHIwLCAxNihyMSkJLyogc2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KKworCisJLyogNDggIEJ5dGVzIChMaW5rYWdlIEFyZWEpICovCisJLyogNjQgIEJ5dGVzIChwYXJhbXMpICovCisJLyogMTYgIEJ5dGVzIChyZXN1bHQpICovCisJLyogMTA0IEJ5dGVzICgxMyo4IGZyb20gRlBSKSAqLworCS8qIDggICBCeXRlcyAoYWxpZ25tZW50KSAqLworCS8qIDI0MCBCeXRlcyAqLworCisJc3RkdSAgcjEsIC0yNDAocjEpCS8qIHNraXAgb3ZlciBjYWxsZXIgc2F2ZSBhcmVhCisJCQkJICAga2VlcCBzdGFjayBhbGlnbmVkIHRvIDE2ICAqLwogCiAJLyogbmV4dCBzYXZlIGZwciAxIHRvIGZwciAxMyAoYWxpZ25lZCB0byA4KSAqLwotCXN0ZmQgIGYxLCA1NihyMSkKLQlzdGZkICBmMiwgNjQocjEpCi0Jc3RmZCAgZjMsIDcyKHIxKQotCXN0ZmQgIGY0LCA4MChyMSkKLQlzdGZkICBmNSwgODgocjEpCi0Jc3RmZCAgZjYsIDk2KHIxKQotCXN0ZmQgIGY3LCAxMDQocjEpCi0Jc3RmZCAgZjgsIDExMihyMSkKLQlzdGZkICBmOSwgMTIwKHIxKQotCXN0ZmQgIGYxMCwgMTI4KHIxKQotCXN0ZmQgIGYxMSwgMTM2KHIxKQotCXN0ZmQgIGYxMiwgMTQ0KHIxKQotCXN0ZmQgIGYxMywgMTUyKHIxKQorCXN0ZmQgIGYxLCAxMjgrKDAqOCkocjEpCisJc3RmZCAgZjIsIDEyOCsoMSo4KShyMSkKKwlzdGZkICBmMywgMTI4KygyKjgpKHIxKQorCXN0ZmQgIGY0LCAxMjgrKDMqOCkocjEpCisJc3RmZCAgZjUsIDEyOCsoNCo4KShyMSkKKwlzdGZkICBmNiwgMTI4Kyg1KjgpKHIxKQorCXN0ZmQgIGY3LCAxMjgrKDYqOCkocjEpCisJc3RmZCAgZjgsIDEyOCsoNyo4KShyMSkKKwlzdGZkICBmOSwgMTI4Kyg4KjgpKHIxKQorCXN0ZmQgIGYxMCwgMTI4Kyg5KjgpKHIxKQorCXN0ZmQgIGYxMSwgMTI4KygxMCo4KShyMSkKKwlzdGZkICBmMTIsIDEyOCsoMTEqOCkocjEpCisJc3RmZCAgZjEzLCAxMjgrKDEyKjgpKHIxKQogCiAJLyogc2V0IHVwIHJlZ2lzdGVycyBmb3IgdGhlIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrICovCiAJLyogZ2V0IHRoZSBjb250ZXh0IHBvaW50ZXIgZnJvbSB0aGUgdHJhbXBvbGluZSAqLwotCW1yIHIzLHIxMQorCW1yIHIzLCByMTEKIAogCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RvcmFnZSAqLwotCWFkZGkgcjQscjEsMTYwCisJYWRkaSByNCwgcjEsIDExMgogCiAJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGdwciByZWdpc3RlcnMgKi8KLQlhZGRpIHI1LHIxLDIwMAorCWFkZGkgcjUsIHIxLCAyODgKIAogCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSBzYXZlZCBmcHIgcmVnaXN0ZXJzICovCi0JYWRkaSByNixyMSw1NgorCWFkZGkgcjYsIHIxLCAxMjgKIAogCS8qIG1ha2UgdGhlIGNhbGwgKi8KIAlibCAuZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTgpAQCAtMTY0LDg0ICsxNjUsMjc5IEBACiAKIAkvKiBsb29rIHVwIHRoZSBwcm9wZXIgc3RhcnRpbmcgcG9pbnQgaW4gdGFibGUgICovCiAJLyogYnkgdXNpbmcgcmV0dXJuIHR5cGUgYXMgb2Zmc2V0ICovCi0JYWRkaSByNSxyMSwxNjAJCS8qIGdldCBwb2ludGVyIHRvIHJlc3VsdHMgYXJlYSAqLwotCWx3eiByNCxMQy4uNjAoMikJLyogZ2V0IGFkZHJlc3Mgb2YganVtcCB0YWJsZSAqLwotCXNsd2kgcjMscjMsMgkJLyogbm93IG11bHRpcGx5IHJldHVybiB0eXBlIGJ5IDQgKi8KLQlsd3p4IHIzLHI0LHIzCQkvKiBnZXQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgdGFibGUgdmFsdWUgKi8KLQlhZGQgcjMscjMscjQJCS8qIGFkZCBjb250ZW50cyBvZiB0YWJsZSB0byB0YWJsZSBhZGRyZXNzICovCi0JbXRjdHIgcjMKKwlsZAlyNCwgTEMuLjYwKDIpCS8qIGdldCBhZGRyZXNzIG9mIGp1bXAgdGFibGUgKi8KKwlzbGRpCXIzLCByMywgNAkvKiBub3cgbXVsdGlwbHkgcmV0dXJuIHR5cGUgYnkgMTYgKi8KKwlsZAlyMCwgMjQwKzE2KHIxKQkvKiBsb2FkIHJldHVybiBhZGRyZXNzICovCisJYWRkCXIzLCByMywgcjQJLyogYWRkIGNvbnRlbnRzIG9mIHRhYmxlIHRvIHRhYmxlIGFkZHJlc3MgKi8KKwltdGN0cglyMwogCWJjdHIJCQkvKiBqdW1wIHRvIGl0ICovCiAKKy8qIEVhY2ggZnJhZ21lbnQgbXVzdCBiZSBleGFjdGx5IDE2IGJ5dGVzIGxvbmcgKDQgaW5zdHJ1Y3Rpb25zKS4KKyAgIEFsaWduIHRvIDE2IGJ5dGUgYm91bmRhcnkgZm9yIGNhY2hlIGFuZCBkaXNwYXRjaCBlZmZpY2llbmN5LiAgKi8KKwkuYWxpZ24gNAorCiBMLi42MDoKLQkubG9uZyBMLi40NC1MLi42MCAgICAvKiBGRklfVFlQRV9WT0lEICovCi0JLmxvbmcgTC4uNTAtTC4uNjAgICAgLyogRkZJX1RZUEVfSU5UICovCi0JLmxvbmcgTC4uNDctTC4uNjAgICAgLyogRkZJX1RZUEVfRkxPQVQgKi8KLQkubG9uZyBMLi40Ni1MLi42MCAgICAvKiBGRklfVFlQRV9ET1VCTEUgKi8KLQkubG9uZyBMLi40Ni1MLi42MCAgICAvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCi0JLmxvbmcgTC4uNTYtTC4uNjAgICAgLyogRkZJX1RZUEVfVUlOVDggKi8KLQkubG9uZyBMLi41NS1MLi42MCAgICAvKiBGRklfVFlQRV9TSU5UOCAqLwotCS5sb25nIEwuLjU4LUwuLjYwICAgIC8qIEZGSV9UWVBFX1VJTlQxNiAqLwotCS5sb25nIEwuLjU3LUwuLjYwICAgIC8qIEZGSV9UWVBFX1NJTlQxNiAqLwotCS5sb25nIEwuLjUwLUwuLjYwICAgIC8qIEZGSV9UWVBFX1VJTlQzMiAqLwotCS5sb25nIEwuLjUwLUwuLjYwICAgIC8qIEZGSV9UWVBFX1NJTlQzMiAqLwotCS5sb25nIEwuLjQ4LUwuLjYwICAgIC8qIEZGSV9UWVBFX1VJTlQ2NCAqLwotCS5sb25nIEwuLjQ4LUwuLjYwICAgIC8qIEZGSV9UWVBFX1NJTlQ2NCAqLwotCS5sb25nIEwuLjQ0LUwuLjYwICAgIC8qIEZGSV9UWVBFX1NUUlVDVCAqLwotCS5sb25nIEwuLjUwLUwuLjYwICAgIC8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKy8qIGNhc2UgRkZJX1RZUEVfVk9JRCAqLworCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisJbm9wCiAKLQotLyogY2FzZSBkb3VibGUgKi8KLUwuLjQ2OgotCWxmZCBmMSwwKHI1KQotCWIgTC4uNDQKLQotLyogY2FzZSBmbG9hdCAqLwotTC4uNDc6Ci0JbGZzIGYxLDAocjUpCi0JYiBMLi40NAotCi0vKiBjYXNlIGxvbmcgbG9uZyAqLwotTC4uNDg6Ci0JbHd6IHIzLDAocjUpCi0JbHd6IHI0LDQocjUpCi0JYiBMLi40NAotCi0vKiBjYXNlIGRlZmF1bHQgLyBpbnQzMiAvIHBvaW50ZXIgKi8KLUwuLjUwOgotCWx3eiByMywwKHI1KQotCWIgTC4uNDQKLQotLyogY2FzZSBzaWduZWQgaW50OAkgKi8KLUwuLjU1OgotCWFkZGkgcjUscjUsMwotCWxieiByMywwKHI1KQotCXNsd2kgcjMscjMsMjQKLQlzcmF3aSByMyxyMywyNAotCWIgTC4uNDQKLQotLyogY2FzZSB1bnNpZ25lZCBpbnQ4CSAqLwotTC4uNTY6Ci0JYWRkaSByNSxyNSwzCi0JbGJ6IHIzLDAocjUpCi0JYiBMLi40NAotCi0vKiBjYXNlIHNpZ25lZCBpbnQxNiAqLwotTC4uNTc6Ci0JYWRkaSByNSxyNSwyCi0JbGh6IHIzLDAocjUpCi0JZXh0c2ggcjMscjMKLQliIEwuLjQ0Ci0KLS8qIGNhc2UgdW5zaWduZWQgaW50MTYgKi8KLUwuLjU4OgotCWFkZGkgcjUscjUsMgotCWxoeiByMywwKHI1KQotCi0vKiBjYXNlIHZvaWQgLyBkb25lCSAqLwotTC4uNDQ6Ci0JYWRkaSByMSxyMSwxNzYJCS8qIHJlc3RvcmUgc3RhY2sgcG9pbnRlciAqLwotCWx3eiByMCw4KHIxKQkJLyogZ2V0IHJldHVybiBhZGRyZXNzICovCi0JbXRsciByMAkJCS8qIHJlc2V0IGxpbmsgcmVnaXN0ZXIgKi8KKy8qIGNhc2UgRkZJX1RZUEVfSU5UICovCisJbHdhIHIzLCAxMTIrNChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAogCWJscgogCisvKiBjYXNlIEZGSV9UWVBFX0ZMT0FUICovCisJbGZzIGYxLCAxMTIrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX0RPVUJMRSAqLworCWxmZCBmMSwgMTEyKzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFICovCisJbGZkIGYxLCAxMTIrMChyMSkKKwltdGxyIHIwCisJbGZkIGYyLCAxMTIrOChyMSkKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQ4ICovCisJbGJ6IHIzLCAxMTIrNyhyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQ4ICovCisJbGJ6IHIzLCAxMTIrNyhyMSkKKwltdGxyIHIwCisJZXh0c2IgcjMsIHIzCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9VSU5UMTYgKi8KKwlsaHogcjMsIDExMis2KHIxKQorCW10bHIgcjAKK0wuLmZpbmlzaDoKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDE2ICovCisJbGhhIHIzLCAxMTIrNihyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDI0MAorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQzMiAqLworCWx3eiByMywgMTEyKzQocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9TSU5UMzIgKi8KKwlsd2EgcjMsIDExMis0KHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfVUlOVDY0ICovCisJbGQgcjMsIDExMiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDY0ICovCisJbGQgcjMsIDExMiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfU1RSVUNUICovCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAyNDAKKwlibHIKKwlub3AKKworLyogY2FzZSBGRklfVFlQRV9QT0lOVEVSICovCisJbGQgcjMsIDExMiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMjQwCisJYmxyCisKKyNlbHNlIC8qICEgX182NEJJVF9fICovCisJCisJLmxvbmcgLmZmaV9jbG9zdXJlX0FTTSwgVE9DW3RjMF0sIDAKKwkuY3NlY3QgLnRleHRbUFJdCisuZmZpX2Nsb3N1cmVfQVNNOgorLyogd2Ugd2FudCB0byBidWlsZCB1cCBhbiBhcmVhIGZvciB0aGUgcGFyYW1ldGVycyBwYXNzZWQgKi8KKy8qIGluIHJlZ2lzdGVycyAoYm90aCBmbG9hdGluZyBwb2ludCBhbmQgaW50ZWdlcikgKi8KKworCS8qIHdlIHN0b3JlIGdwciAzIHRvIGdwciAxMCAoYWxpZ25lZCB0byA0KQorCWluIHRoZSBwYXJlbnRzIG91dGdvaW5nIGFyZWEgICovCisJc3R3ICAgcjMsIDI0KygwKjQpKHIxKQorCXN0dyAgIHI0LCAyNCsoMSo0KShyMSkKKwlzdHcgICByNSwgMjQrKDIqNCkocjEpCisJc3R3ICAgcjYsIDI0KygzKjQpKHIxKQorCW1mbHIgIHIwCisKKwlzdHcgICByNywgMjQrKDQqNCkocjEpCisJc3R3ICAgcjgsIDI0Kyg1KjQpKHIxKQorCXN0dyAgIHI5LCAyNCsoNio0KShyMSkKKwlzdHcgICByMTAsIDI0Kyg3KjQpKHIxKQorCXN0dyAgIHIwLCA4KHIxKQorCisJLyogMjQgQnl0ZXMgKExpbmthZ2UgQXJlYSkgKi8KKwkvKiAzMiBCeXRlcyAocGFyYW1zKSAqLworCS8qIDE2ICBCeXRlcyAocmVzdWx0KSAqLworCS8qIDEwNCBCeXRlcyAoMTMqOCBmcm9tIEZQUikgKi8KKwkvKiAxNzYgQnl0ZXMgKi8KKworCXN0d3UgIHIxLCAtMTc2KHIxKQkvKiBza2lwIG92ZXIgY2FsbGVyIHNhdmUgYXJlYQorCQkJCSAgIGtlZXAgc3RhY2sgYWxpZ25lZCB0byAxNiAgKi8KKworCS8qIG5leHQgc2F2ZSBmcHIgMSB0byBmcHIgMTMgKGFsaWduZWQgdG8gOCkgKi8KKwlzdGZkICBmMSwgNzIrKDAqOCkocjEpCisJc3RmZCAgZjIsIDcyKygxKjgpKHIxKQorCXN0ZmQgIGYzLCA3MisoMio4KShyMSkKKwlzdGZkICBmNCwgNzIrKDMqOCkocjEpCisJc3RmZCAgZjUsIDcyKyg0KjgpKHIxKQorCXN0ZmQgIGY2LCA3MisoNSo4KShyMSkKKwlzdGZkICBmNywgNzIrKDYqOCkocjEpCisJc3RmZCAgZjgsIDcyKyg3KjgpKHIxKQorCXN0ZmQgIGY5LCA3MisoOCo4KShyMSkKKwlzdGZkICBmMTAsIDcyKyg5KjgpKHIxKQorCXN0ZmQgIGYxMSwgNzIrKDEwKjgpKHIxKQorCXN0ZmQgIGYxMiwgNzIrKDExKjgpKHIxKQorCXN0ZmQgIGYxMywgNzIrKDEyKjgpKHIxKQorCisJLyogc2V0IHVwIHJlZ2lzdGVycyBmb3IgdGhlIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBkb2VzIHRoZSB3b3JrICovCisJLyogZ2V0IHRoZSBjb250ZXh0IHBvaW50ZXIgZnJvbSB0aGUgdHJhbXBvbGluZSAqLworCW1yIHIzLCByMTEKKworCS8qIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RvcmFnZSAqLworCWFkZGkgcjQsIHIxLCA1NgorCisJLyogbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGdwciByZWdpc3RlcnMgKi8KKwlhZGRpIHI1LCByMSwgMjAwCisKKwkvKiBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgc2F2ZWQgZnByIHJlZ2lzdGVycyAqLworCWFkZGkgcjYsIHIxLCA3MgorCisJLyogbWFrZSB0aGUgY2FsbCAqLworCWJsIC5mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOCisJbm9wCisKKwkvKiBub3cgcjMgY29udGFpbnMgdGhlIHJldHVybiB0eXBlICovCisJLyogc28gdXNlIGl0IHRvIGxvb2sgdXAgaW4gYSB0YWJsZSAqLworCS8qIHNvIHdlIGtub3cgaG93IHRvIGRlYWwgd2l0aCBlYWNoIHR5cGUgKi8KKworCS8qIGxvb2sgdXAgdGhlIHByb3BlciBzdGFydGluZyBwb2ludCBpbiB0YWJsZSAgKi8KKwkvKiBieSB1c2luZyByZXR1cm4gdHlwZSBhcyBvZmZzZXQgKi8KKwlsd3oJcjQsIExDLi42MCgyKQkvKiBnZXQgYWRkcmVzcyBvZiBqdW1wIHRhYmxlICovCisJc2x3aQlyMywgcjMsIDQJLyogbm93IG11bHRpcGx5IHJldHVybiB0eXBlIGJ5IDQgKi8KKwlsd3oJcjAsIDE3Nis4KHIxKQkvKiBsb2FkIHJldHVybiBhZGRyZXNzICovCisJYWRkCXIzLCByMywgcjQJLyogYWRkIGNvbnRlbnRzIG9mIHRhYmxlIHRvIHRhYmxlIGFkZHJlc3MgKi8KKwltdGN0cglyMworCWJjdHIJCQkvKiBqdW1wIHRvIGl0ICovCisKKy8qIEVhY2ggZnJhZ21lbnQgbXVzdCBiZSBleGFjdGx5IDE2IGJ5dGVzIGxvbmcgKDQgaW5zdHJ1Y3Rpb25zKS4KKyAgIEFsaWduIHRvIDE2IGJ5dGUgYm91bmRhcnkgZm9yIGNhY2hlIGFuZCBkaXNwYXRjaCBlZmZpY2llbmN5LiAgKi8KKwkuYWxpZ24gNAorCitMLi42MDoKKy8qIGNhc2UgRkZJX1RZUEVfVk9JRCAqLworCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisJbm9wCisKKy8qIGNhc2UgRkZJX1RZUEVfSU5UICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKKwlhZGRpIHIxLCByMSwgMTc2CisJYmxyCisKKy8qIGNhc2UgRkZJX1RZUEVfRkxPQVQgKi8KKwlsZnMgZjEsIDU2KzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9ET1VCTEUgKi8KKwlsZmQgZjEsIDU2KzAocjEpCisJbXRsciByMAorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKworLyogY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFICovCisJbGZkIGYxLCA1NiswKHIxKQorCW10bHIgcjAKKwlsZmQgZjIsIDU2KzgocjEpCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9VSU5UOCAqLworCWxieiByMywgNTYrMyhyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQ4ICovCisJbGJ6IHIzLCA1NiszKHIxKQorCW10bHIgcjAKKwlleHRzYiByMywgcjMKKwliIEwuLmZpbmlzaAorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQxNiAqLworCWxoeiByMywgNTYrMihyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQxNiAqLworCWxoYSByMywgNTYrMihyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQzMiAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1NJTlQzMiAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCisvKiBjYXNlIEZGSV9UWVBFX1VJTlQ2NCAqLworCWx3eiByMywgNTYrMChyMSkKKwltdGxyIHIwCisJbHd6IHI0LCA1Nis0KHIxKQorCWIgTC4uZmluaXNoCisKKy8qIGNhc2UgRkZJX1RZUEVfU0lOVDY0ICovCisJbHd6IHIzLCA1NiswKHIxKQorCW10bHIgcjAKKwlsd3ogcjQsIDU2KzQocjEpCisJYiBMLi5maW5pc2gKKworLyogY2FzZSBGRklfVFlQRV9TVFJVQ1QgKi8KKwltdGxyIHIwCisJYWRkaSByMSwgcjEsIDE3NgorCWJscgorCW5vcAorCisvKiBjYXNlIEZGSV9UWVBFX1BPSU5URVIgKi8KKwlsd3ogcjMsIDU2KzAocjEpCisJbXRsciByMAorTC4uZmluaXNoOgorCWFkZGkgcjEsIHIxLCAxNzYKKwlibHIKKyNlbmRpZgogLyogRU5EKGZmaV9jbG9zdXJlX0FTTSkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCmluZGV4IGMyZDI1MzAuLjc1Nzg0YTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmZmkuYyAtIENvcHlyaWdodCAoYykgMTk5OCBHZW9mZnJleSBLZWF0aW5nCi0gICBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYwogICAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYwogCiAgICBQb3dlclBDIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCkBAIC00Myw2ICs0MywxMSBAQAogICBGTEFHX1JFVFVSTlNfNjRCSVRTICAgPSAxIDw8ICgzMS0yOCksCiAKICAgRkxBR19SRVRVUk5TXzEyOEJJVFMgID0gMSA8PCAoMzEtMjcpLCAvKiBjcjYgICovCisgIEZMQUdfU1lTVl9TTVNUX1I0ICAgICA9IDEgPDwgKDMxLTI2KSwgLyogdXNlIHI0IGZvciBGRklfU1lTViA4IGJ5dGUKKwkJCQkJICAgc3RydWN0cy4gICovCisgIEZMQUdfU1lTVl9TTVNUX1IzICAgICA9IDEgPDwgKDMxLTI1KSwgLyogdXNlIHIzIGZvciBGRklfU1lTViA0IGJ5dGUKKwkJCQkJICAgc3RydWN0cy4gICovCisgIC8qIEJpdHMgKDMxLTI0KSB0aHJvdWdoICgzMS0xOSkgc3RvcmUgc2hpZnQgdmFsdWUgZm9yIFNNU1QgKi8KIAogICBGTEFHX0FSR19ORUVEU19DT1BZICAgPSAxIDw8ICgzMS0gNyksCiAgIEZMQUdfRlBfQVJHVU1FTlRTICAgICA9IDEgPDwgKDMxLSA2KSwgLyogY3IxLmVxOyBzcGVjaWZpZWQgYnkgQUJJICovCkBAIC0xODAsNiArMTg1LDcgQEAKIAkgICAgewogCSAgICAgICpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOwogCSAgICAgIG5leHRfYXJnLnUgKz0gMTsKKwkgICAgICBpbnRhcmdfY291bnQrKzsKIAkgICAgfQogCSAgZWxzZQogCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKQEAgLTY4MCwxNSArNjg2LDE1IEBACiAJCSBUaGUgc2FtZSBhcHBsaWVzIGZvciB0aGUgc3RydWN0cyByZXR1cm5lZCBpbiByMy9yNC4gICovCiAJICAgICAgaWYgKHNpemUgPD0gNCkKIAkJewotCQkgIGZsYWdzIHw9IDEgPDwgKDMxIC0gRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxKTsKLQkJICBmbGFncyB8PSA4ICogKDQgLSBzaXplKSA8PCA0OworCQkgIGZsYWdzIHw9IEZMQUdfU1lTVl9TTVNUX1IzOworCQkgIGZsYWdzIHw9IDggKiAoNCAtIHNpemUpIDw8IDg7CiAJCSAgYnJlYWs7CiAJCX0KIAkgICAgICAvKiBUaGVzZSBzdHJ1Y3RzIGFyZSByZXR1cm5lZCBpbiByMyBhbmQgcjQuIFNlZSBhYm92ZS4gICAqLwogCSAgICAgIGlmICAoc2l6ZSA8PSA4KQogCQl7Ci0JCSAgZmxhZ3MgfD0gMSA8PCAoMzEgLSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDIpOwotCQkgIGZsYWdzIHw9IDggKiAoOCAtIHNpemUpIDw8IDQ7CisJCSAgZmxhZ3MgfD0gRkxBR19TWVNWX1NNU1RfUjMgfCBGTEFHX1NZU1ZfU01TVF9SNDsKKwkJICBmbGFncyB8PSA4ICogKDggLSBzaXplKSA8PCA4OwogCQkgIGJyZWFrOwogCQl9CiAJICAgIH0KQEAgLTExNDQsNiArMTE1MCw3IEBACiAJCXBzdCsrOwogCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKIAkgICAgICBwc3QgKz0gMjsKKwkgICAgICBuZyA9IDg7CiAJICAgIH0KIAkgIGJyZWFrOwogCkBAIC0xMjE3LDYgKzEyMjQsNyBAQAogCQl7CiAJCSAgYXZhbHVlW2ldID0gcHN0OwogCQkgIHBzdCArPSA0OworCQkgIG5nID0gODsKIAkJfQogCSAgICAgIGJyZWFrOwogCSAgICB9CkBAIC0xMjQ5LDEwICsxMjU3LDE1IEBACiAKICAgLyogVGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byBwZXJmb3JtIHJldHVybiB0eXBlIHByb21vdGlvbnMuCiAgICAgIEJlY2F1c2UgdGhlIEZGSV9TWVNWIEFCSSByZXR1cm5zIHRoZSBzdHJ1Y3R1cmVzIDw9IDggYnl0ZXMgaW4gcjMvcjQKLSAgICAgd2UgaGF2ZSB0byB0ZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHRyZWF0IHRoZW0uICAqLworICAgICB3ZSBoYXZlIHRvIHRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gdHJlYXQgdGhlbS4gV2UgY29tYmluZSB0aGUgYmFzZQorICAgICB0eXBlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSAgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgc3RydWN0LgorICAgICBTbyBhIG9uZSBieXRlIHN0cnVjdCBnZXRzIHRoZSByZXR1cm4gdHlwZSAxNi4gUmV0dXJuIHR5cGUgMSB0byAxNSBhcmUKKyAgICAgYWxyZWFkeSB1c2VkIGFuZCB3ZSBuZXZlciBoYXZlIGEgc3RydWN0IHdpdGggc2l6ZSB6ZXJvLiBUaGF0IGlzIHRoZSByZWFzb24KKyAgICAgZm9yIHRoZSBzdWJ0cmFjdGlvbiBvZiAxLiBTZWUgdGhlIGNvbW1lbnQgaW4gZmZpdGFyZ2V0LmggYWJvdXQgb3JkZXJpbmcuCisgICovCiAgIGlmIChjaWYtPmFiaSA9PSBGRklfU1lTViAmJiBjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAogICAgICAgJiYgc2l6ZSA8PSA4KQotICAgIHJldHVybiBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIHNpemU7CisgICAgcmV0dXJuIChGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEpICsgc2l6ZTsKICNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQogICBlbHNlIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUKIAkgICAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVggJiYgY2lmLT5hYmkgIT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCmluZGV4IDUwMTAzNWQuLmQ4NGYxYzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jCkBAIC0zLDcgKzMsNyBAQAogCiAgICBDb3B5cmlnaHQgKEMpIDE5OTggR2VvZmZyZXkgS2VhdGluZwogICAgQ29weXJpZ2h0IChDKSAyMDAxIEpvaG4gSG9ybmt2aXN0Ci0gICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIEZGSSBzdXBwb3J0IGZvciBEYXJ3aW4gYW5kIEFJWC4KICAgIApAQCAtMzIsNyArMzIsNyBAQAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLWV4dGVybiB2b2lkIGZmaV9jbG9zdXJlX0FTTSh2b2lkKTsKK2V4dGVybiB2b2lkIGZmaV9jbG9zdXJlX0FTTSAodm9pZCk7CiAKIGVudW0gewogICAvKiBUaGUgYXNzZW1ibHkgZGVwZW5kcyBvbiB0aGVzZSBleGFjdCBmbGFncy4gICovCkBAIC04MCwzNCArODAsMzcgQEAKIAogICAgKi8KIAotdm9pZCBmZmlfcHJlcF9hcmdzKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgKmNvbnN0IHN0YWNrKQordm9pZAorZmZpX3ByZXBfYXJncyAoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCBsb25nICpjb25zdCBzdGFjaykKIHsKICAgY29uc3QgdW5zaWduZWQgYnl0ZXMgPSBlY2lmLT5jaWYtPmJ5dGVzOwogICBjb25zdCB1bnNpZ25lZCBmbGFncyA9IGVjaWYtPmNpZi0+ZmxhZ3M7CisgIGNvbnN0IHVuc2lnbmVkIG5hcmdzID0gZWNpZi0+Y2lmLT5uYXJnczsKKyAgY29uc3QgZmZpX2FiaSBhYmkgPSBlY2lmLT5jaWYtPmFiaTsKIAogICAvKiAnc3RhY2t0b3AnIHBvaW50cyBhdCB0aGUgcHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIuICAqLwotICB1bnNpZ25lZCAqY29uc3Qgc3RhY2t0b3AgPSBzdGFjayArIChieXRlcyAvIHNpemVvZih1bnNpZ25lZCkpOworICB1bnNpZ25lZCBsb25nICpjb25zdCBzdGFja3RvcCA9IHN0YWNrICsgKGJ5dGVzIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKIAogICAvKiAnZnByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGZwcjEsIGFuZCBncm93cyB1cHdhcmRzIGFzCiAgICAgIHdlIHVzZSBGUFIgcmVnaXN0ZXJzLiAgKi8KLSAgZG91YmxlICpmcHJfYmFzZSA9IChkb3VibGUqKSAoc3RhY2t0b3AgLSBBU01fTkVFRFNfUkVHSVNURVJTKSAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKKyAgZG91YmxlICpmcHJfYmFzZSA9IChkb3VibGUgKikgKHN0YWNrdG9wIC0gQVNNX05FRURTX1JFR0lTVEVSUykgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7CiAgIGludCBmcGFyZ19jb3VudCA9IDA7CiAKIAogICAvKiAnbmV4dF9hcmcnIGdyb3dzIHVwIGFzIHdlIHB1dCBwYXJhbWV0ZXJzIGluIGl0LiAgKi8KLSAgdW5zaWduZWQgKm5leHRfYXJnID0gc3RhY2sgKyA2OyAvKiA2IHJlc2VydmVkIHBvc2l0aW9ucy4gICovCisgIHVuc2lnbmVkIGxvbmcgKm5leHRfYXJnID0gc3RhY2sgKyA2OyAvKiA2IHJlc2VydmVkIHBvc2l0aW9ucy4gICovCiAKLSAgaW50IGkgPSBlY2lmLT5jaWYtPm5hcmdzOworICBpbnQgaTsKICAgZG91YmxlIGRvdWJsZV90bXA7CiAgIHZvaWQgKipwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7Ci0gIHVuc2lnbmVkIGdwcnZhbHVlOworICB1bnNpZ25lZCBsb25nIGdwcnZhbHVlOwogICBmZmlfdHlwZSoqIHB0ciA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOwogICBjaGFyICpkZXN0X2NweTsKICAgdW5zaWduZWQgc2l6ZV9hbCA9IDA7CiAKICAgLyogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIHN0YXJ0cyBhbGlnbmVkIHByb3Blcmx5LiAgKi8KLSAgRkZJX0FTU0VSVCgoKHVuc2lnbmVkKShjaGFyICopc3RhY2sgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUKCgodW5zaWduZWQpKGNoYXIgKilzdGFja3RvcCAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQoKCh1bnNpZ25lZCkgKGNoYXIgKikgc3RhY2sgJiAweEYpID09IDApOworICBGRklfQVNTRVJUKCgodW5zaWduZWQpIChjaGFyICopIHN0YWNrdG9wICYgMHhGKSA9PSAwKTsKICAgRkZJX0FTU0VSVCgoYnl0ZXMgJiAweEYpID09IDApOwogCiAgIC8qIERlYWwgd2l0aCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IHBhc3MtYnktcmVmZXJlbmNlLgpAQCAtMTE1LDEyICsxMTgsMTAgQEAKICAgICAgUmV0dXJuIHZhbHVlcyBhcmUgcmVmZXJlbmNlZCBieSByMywgc28gcjQgaXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gICovCiAKICAgaWYgKGZsYWdzICYgRkxBR19SRVRWQUxfUkVGRVJFTkNFKQotICAgICpuZXh0X2FyZysrID0gKHVuc2lnbmVkKShjaGFyICopZWNpZi0+cnZhbHVlOworICAgICpuZXh0X2FyZysrID0gKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIGVjaWYtPnJ2YWx1ZTsKIAogICAvKiBOb3cgZm9yIHRoZSBhcmd1bWVudHMuICAqLwotICBmb3IgKDsKLSAgICAgICBpID4gMDsKLSAgICAgICBpLS0sIHB0cisrLCBwX2FyZ3YrKykKKyAgZm9yIChpID0gbmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrLCBwX2FyZ3YrKykKICAgICB7CiAgICAgICBzd2l0Y2ggKCgqcHRyKS0+dHlwZSkKIAl7CkBAIC0xMjgsNyArMTI5LDcgQEAKIAkgICBwdXJwb3NlIHJlZ2lzdGVycyBhcmUgZmlsbGVkLCB0aGUgY29ycmVzcG9uZGluZyBHUFJzIHRoYXQgbWF0Y2gKIAkgICB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmctcG9pbnQgcGFyYW1ldGVyIGFyZSBza2lwcGVkLiAgKi8KIAljYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgZG91YmxlX3RtcCA9ICooZmxvYXQgKikqcF9hcmd2OworCSAgZG91YmxlX3RtcCA9ICooZmxvYXQgKikgKnBfYXJndjsKIAkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCiAJICAgICooZG91YmxlICopbmV4dF9hcmcgPSBkb3VibGVfdG1wOwogCSAgZWxzZQpAQCAtMTM5LDEyICsxNDAsMTYgQEAKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICBkb3VibGVfdG1wID0gKihkb3VibGUgKikqcF9hcmd2OworCSAgZG91YmxlX3RtcCA9ICooZG91YmxlICopICpwX2FyZ3Y7CiAJICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQogCSAgICAqKGRvdWJsZSAqKW5leHRfYXJnID0gZG91YmxlX3RtcDsKIAkgIGVsc2UKIAkgICAgKmZwcl9iYXNlKysgPSBkb3VibGVfdG1wOworI2lmZGVmIFBPV0VSUEM2NAorCSAgbmV4dF9hcmcrKzsKKyNlbHNlCiAJICBuZXh0X2FyZyArPSAyOworI2VuZGlmCiAJICBmcGFyZ19jb3VudCsrOwogCSAgRkZJX0FTU0VSVChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKIAkgIGJyZWFrOwpAQCAtMTUyLDQyICsxNTcsNzEgQEAKICNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQogCiAJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgZG91YmxlX3RtcCA9ICgoZG91YmxlICopKnBfYXJndilbMF07Ci0JICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotCSAgICAqKGRvdWJsZSAqKW5leHRfYXJnID0gZG91YmxlX3RtcDsKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgKihsb25nIGRvdWJsZSAqKSBmcHJfYmFzZSsrID0gKihsb25nIGRvdWJsZSAqKSAqcF9hcmd2OwogCSAgZWxzZQorCSAgICAqKGxvbmcgZG91YmxlICopIG5leHRfYXJnID0gKihsb25nIGRvdWJsZSAqKSAqcF9hcmd2OworCSAgbmV4dF9hcmcgKz0gMjsKKwkgIGZwYXJnX2NvdW50ICs9IDI7CisjZWxzZQorCSAgZG91YmxlX3RtcCA9ICgoZG91YmxlICopICpwX2FyZ3YpWzBdOworCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQogCSAgICAqZnByX2Jhc2UrKyA9IGRvdWJsZV90bXA7CisJICBlbHNlCisJICAgICooZG91YmxlICopIG5leHRfYXJnID0gZG91YmxlX3RtcDsKIAkgIG5leHRfYXJnICs9IDI7CiAJICBmcGFyZ19jb3VudCsrOwotCSAgZG91YmxlX3RtcCA9ICgoZG91YmxlICopKnBfYXJndilbMV07Ci0JICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQotCSAgICAqKGRvdWJsZSAqKW5leHRfYXJnID0gZG91YmxlX3RtcDsKLQkgIGVsc2UKKworCSAgZG91YmxlX3RtcCA9ICgoZG91YmxlICopICpwX2FyZ3YpWzFdOworCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQogCSAgICAqZnByX2Jhc2UrKyA9IGRvdWJsZV90bXA7CisJICBlbHNlCisJICAgICooZG91YmxlICopIG5leHRfYXJnID0gZG91YmxlX3RtcDsKIAkgIG5leHRfYXJnICs9IDI7CiAJICBmcGFyZ19jb3VudCsrOworI2VuZGlmCiAJICBGRklfQVNTRVJUKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOwogCSAgYnJlYWs7CiAjZW5kaWYKIAljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKIAljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQkgICoobG9uZyBsb25nICopbmV4dF9hcmcgPSAqKGxvbmcgbG9uZyAqKSpwX2FyZ3Y7Ci0JICBuZXh0X2FyZys9MjsKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGdwcnZhbHVlID0gKihsb25nIGxvbmcgKikgKnBfYXJndjsKKwkgIGdvdG8gcHV0Z3ByOworI2Vsc2UKKwkgICoobG9uZyBsb25nICopIG5leHRfYXJnID0gKihsb25nIGxvbmcgKikgKnBfYXJndjsKKwkgIG5leHRfYXJnICs9IDI7CisjZW5kaWYKIAkgIGJyZWFrOworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBsb25nICopICpwX2FyZ3Y7CisJICBnb3RvIHB1dGdwcjsKIAljYXNlIEZGSV9UWVBFX1VJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIGNoYXIgKikqcF9hcmd2OworCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIGNoYXIgKikgKnBfYXJndjsKIAkgIGdvdG8gcHV0Z3ByOwogCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JICBncHJ2YWx1ZSA9ICooc2lnbmVkIGNoYXIgKikqcF9hcmd2OworCSAgZ3BydmFsdWUgPSAqKHNpZ25lZCBjaGFyICopICpwX2FyZ3Y7CiAJICBnb3RvIHB1dGdwcjsKIAljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGdwcnZhbHVlID0gKih1bnNpZ25lZCBzaG9ydCAqKSpwX2FyZ3Y7CisJICBncHJ2YWx1ZSA9ICoodW5zaWduZWQgc2hvcnQgKikgKnBfYXJndjsKIAkgIGdvdG8gcHV0Z3ByOwogCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgZ3BydmFsdWUgPSAqKHNpZ25lZCBzaG9ydCAqKSpwX2FyZ3Y7CisJICBncHJ2YWx1ZSA9ICooc2lnbmVkIHNob3J0ICopICpwX2FyZ3Y7CiAJICBnb3RvIHB1dGdwcjsKIAogCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorI2lmZGVmIFBPV0VSUEM2NAorCSAgZGVzdF9jcHkgPSAoY2hhciAqKSBuZXh0X2FyZzsKKwkgIHNpemVfYWwgPSAoKnB0ciktPnNpemU7CisJICBpZiAoKCpwdHIpLT5lbGVtZW50c1swXS0+dHlwZSA9PSAzKQorCSAgICBzaXplX2FsID0gQUxJR04oKCpwdHIpLT5zaXplLCA4KTsKKwkgIGlmIChzaXplX2FsIDwgMyAmJiBhYmkgPT0gRkZJX0RBUldJTikKKwkgICAgZGVzdF9jcHkgKz0gNCAtIHNpemVfYWw7CisKKwkgIG1lbWNweSAoKGNoYXIgKikgZGVzdF9jcHksIChjaGFyICopICpwX2FyZ3YsIHNpemVfYWwpOworCSAgbmV4dF9hcmcgKz0gKHNpemVfYWwgKyA3KSAvIDg7CisjZWxzZQogCSAgZGVzdF9jcHkgPSAoY2hhciAqKSBuZXh0X2FyZzsKIAogCSAgLyogU3RydWN0dXJlcyB0aGF0IG1hdGNoIHRoZSBiYXNpYyBtb2RlcyAoUUkgMSBieXRlLCBISSAyIGJ5dGVzLApAQCAtMTk1LDIyICsyMjksMjQgQEAKIAkgICAgIFN0cnVjdHVyZXMgd2l0aCAzIGJ5dGUgaW4gc2l6ZSBhcmUgcGFkZGVkIHVwd2FyZHMuICAqLwogCSAgc2l6ZV9hbCA9ICgqcHRyKS0+c2l6ZTsKIAkgIC8qIElmIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhlIHN0cnVjdCBpcyBhIGRvdWJsZSwgdGhlbiBhbGlnbgotCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4KLQkgICAgIFR5cGUgMyBpcyBkZWZpbmVkIGluIGluY2x1ZGUvZmZpLmguICNkZWZpbmUgRkZJX1RZUEVfRE9VQkxFIDMuICAqLwotCSAgaWYgKCgqcHRyKS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gMykKKwkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuICAqLworCSAgaWYgKCgqcHRyKS0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQogCSAgICBzaXplX2FsID0gQUxJR04oKCpwdHIpLT5zaXplLCA4KTsKLQkgIGlmIChzaXplX2FsIDwgMyAmJiBlY2lmLT5jaWYtPmFiaSA9PSBGRklfREFSV0lOKQorCSAgaWYgKHNpemVfYWwgPCAzICYmIGFiaSA9PSBGRklfREFSV0lOKQogCSAgICBkZXN0X2NweSArPSA0IC0gc2l6ZV9hbDsKIAotCSAgbWVtY3B5KChjaGFyICopZGVzdF9jcHksIChjaGFyICopKnBfYXJndiwgc2l6ZV9hbCk7CisJICBtZW1jcHkoKGNoYXIgKikgZGVzdF9jcHksIChjaGFyICopICpwX2FyZ3YsIHNpemVfYWwpOwogCSAgbmV4dF9hcmcgKz0gKHNpemVfYWwgKyAzKSAvIDQ7CisjZW5kaWYKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9JTlQ6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMzI6CiAJY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkICopKnBfYXJndjsKKwkgIGdwcnZhbHVlID0gKihzaWduZWQgaW50ICopICpwX2FyZ3Y7CisJICBnb3RvIHB1dGdwcjsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCSAgZ3BydmFsdWUgPSAqKHVuc2lnbmVkIGludCAqKSAqcF9hcmd2OwogCXB1dGdwcjoKIAkgICpuZXh0X2FyZysrID0gZ3BydmFsdWU7CiAJICBicmVhazsKQEAgLTI2OCw4ICszMDQsNDQgQEAKICAgLyogRG8gbm90IGFkZCBhZGRpdGlvbmFsIHRhaWwgcGFkZGluZy4gICovCiB9CiAKKy8qIEFkanVzdCB0aGUgc2l6ZSBvZiBTIHRvIGJlIGNvcnJlY3QgZm9yIEFJWC4KKyAgIFdvcmQtYWxpZ24gZG91YmxlIHVubGVzcyBpdCBpcyB0aGUgZmlyc3QgbWVtYmVyIG9mIGEgc3RydWN0dXJlLiAgKi8KKworc3RhdGljIHZvaWQKK2FpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzIChmZmlfdHlwZSAqcykKK3sKKyAgaW50IGk7CisKKyAgaWYgKHMtPnR5cGUgIT0gRkZJX1RZUEVfU1RSVUNUKQorICAgIHJldHVybjsKKworICBzLT5zaXplID0gMDsKKyAgZm9yIChpID0gMDsgcy0+ZWxlbWVudHNbaV0gIT0gTlVMTDsgaSsrKQorICAgIHsKKyAgICAgIGZmaV90eXBlICpwOworICAgICAgaW50IGFsaWduOworICAgICAgCisgICAgICBwID0gcy0+ZWxlbWVudHNbaV07CisgICAgICBhaXhfYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyAocCk7CisgICAgICBhbGlnbiA9IHAtPmFsaWdubWVudDsKKyAgICAgIGlmIChpICE9IDAgJiYgcC0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisJYWxpZ24gPSA0OworICAgICAgcy0+c2l6ZSA9IEFMSUdOKHMtPnNpemUsIGFsaWduKSArIHAtPnNpemU7CisgICAgfQorICAKKyAgcy0+c2l6ZSA9IEFMSUdOKHMtPnNpemUsIHMtPmFsaWdubWVudCk7CisgIAorICBpZiAocy0+ZWxlbWVudHNbMF0tPnR5cGUgPT0gRkZJX1RZUEVfVUlOVDY0CisgICAgICB8fCBzLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9TSU5UNjQKKyAgICAgIHx8IHMtPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRQorICAgICAgfHwgcy0+ZWxlbWVudHNbMF0tPmFsaWdubWVudCA9PSA4KQorICAgIHMtPmFsaWdubWVudCA9IHMtPmFsaWdubWVudCA+IDggPyBzLT5hbGlnbm1lbnQgOiA4OworICAvKiBEbyBub3QgYWRkIGFkZGl0aW9uYWwgdGFpbCBwYWRkaW5nLiAgKi8KK30KKwogLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZy4gICovCi1mZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKGZmaV9jaWYgKmNpZikKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCiB7CiAgIC8qIEFsbCB0aGlzIGlzIGZvciB0aGUgREFSV0lOIEFCSS4gICovCiAgIGludCBpOwpAQCAtMjkwLDYgKzM2MiwxMyBAQAogCWRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzIChjaWYtPmFyZ190eXBlc1tpXSk7CiAgICAgfQogCisgIGlmIChjaWYtPmFiaSA9PSBGRklfQUlYKQorICAgIHsKKyAgICAgIGFpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzIChjaWYtPnJ0eXBlKTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyspCisJYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMgKGNpZi0+YXJnX3R5cGVzW2ldKTsKKyAgICB9CisKICAgLyogU3BhY2UgZm9yIHRoZSBmcmFtZSBwb2ludGVyLCBjYWxsZWUncyBMUiwgQ1IsIGV0YywgYW5kIGZvcgogICAgICB0aGUgYXNtJ3MgdGVtcCByZWdzLiAgKi8KIApAQCAtMzI0LDYgKzQwMyw5IEBACiAKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyNpZmRlZiBQT1dFUlBDNjQKKyAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CisjZW5kaWYKICAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CiAgICAgICBicmVhazsKIApAQCAtMzg3LDExICs0NjksMTQgQEAKIAljYXNlIEZGSV9UWVBFX1NUUlVDVDoKIAkgIHNpemVfYWwgPSAoKnB0ciktPnNpemU7CiAJICAvKiBJZiB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdHJ1Y3QgaXMgYSBkb3VibGUsIHRoZW4gYWxpZ24KLQkgICAgIHRoZSBzdHJ1Y3QgdG8gZG91YmxlLXdvcmQuCi0JICAgICBUeXBlIDMgaXMgZGVmaW5lZCBpbiBpbmNsdWRlL2ZmaS5oLiAjZGVmaW5lIEZGSV9UWVBFX0RPVUJMRSAzLiAgKi8KLQkgIGlmICgoKnB0ciktPmVsZW1lbnRzWzBdLT50eXBlID09IDMpCisJICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLiAgKi8KKwkgIGlmICgoKnB0ciktPmVsZW1lbnRzWzBdLT50eXBlID09IEZGSV9UWVBFX0RPVUJMRSkKIAkgICAgc2l6ZV9hbCA9IEFMSUdOKCgqcHRyKS0+c2l6ZSwgOCk7CisjaWZkZWYgUE9XRVJQQzY0CisJICBpbnRhcmdfY291bnQgKz0gKHNpemVfYWwgKyA3KSAvIDg7CisjZWxzZQogCSAgaW50YXJnX2NvdW50ICs9IChzaXplX2FsICsgMykgLyA0OworI2VuZGlmCiAJICBicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00MTAsOCArNDk1LDEzIEBACiAgICAgYnl0ZXMgKz0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mKGRvdWJsZSk7CiAKICAgLyogU3RhY2sgc3BhY2UuICAqLworI2lmZGVmIFBPV0VSUEM2NAorICBpZiAoKGludGFyZ19jb3VudCArIGZwYXJnX2NvdW50KSA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKyAgICBieXRlcyArPSAoaW50YXJnX2NvdW50ICsgZnBhcmdfY291bnQpICogc2l6ZW9mKGxvbmcpOworI2Vsc2UKICAgaWYgKChpbnRhcmdfY291bnQgKyAyICogZnBhcmdfY291bnQpID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQogICAgIGJ5dGVzICs9IChpbnRhcmdfY291bnQgKyAyICogZnBhcmdfY291bnQpICogc2l6ZW9mKGxvbmcpOworI2VuZGlmCiAgIGVsc2UKICAgICBieXRlcyArPSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YobG9uZyk7CiAKQEAgLTQyNCwxMiArNTE0LDEzIEBACiAgIHJldHVybiBGRklfT0s7CiB9CiAKLWV4dGVybiB2b2lkIGZmaV9jYWxsX0FJWChleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLAorZXh0ZXJuIHZvaWQgZmZpX2NhbGxfQUlYKGV4dGVuZGVkX2NpZiAqLCBsb25nLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKIAkJCSB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICgqZm4yKSh2b2lkKSk7Ci1leHRlcm4gdm9pZCBmZmlfY2FsbF9EQVJXSU4oZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwKK2V4dGVybiB2b2lkIGZmaV9jYWxsX0RBUldJTihleHRlbmRlZF9jaWYgKiwgbG9uZywgdW5zaWduZWQsIHVuc2lnbmVkICosCiAJCQkgICAgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAoKmZuMikodm9pZCkpOwogCi12b2lkIGZmaV9jYWxsKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQordm9pZAorZmZpX2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQogewogICBleHRlbmRlZF9jaWYgZWNpZjsKIApAQCAtNDQyLDcgKzUzMyw3IEBACiAgIGlmICgocnZhbHVlID09IE5VTEwpICYmCiAgICAgICAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpKQogICAgIHsKLSAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOworICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOwogICAgIH0KICAgZWxzZQogICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOwpAQCAtNDUwLDExICs1NDEsMTEgQEAKICAgc3dpdGNoIChjaWYtPmFiaSkKICAgICB7CiAgICAgY2FzZSBGRklfQUlYOgotICAgICAgZmZpX2NhbGxfQUlYKCZlY2lmLCAtY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuLAorICAgICAgZmZpX2NhbGxfQUlYKCZlY2lmLCAtKGxvbmcpY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuLAogCQkgICBmZmlfcHJlcF9hcmdzKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgRkZJX0RBUldJTjoKLSAgICAgIGZmaV9jYWxsX0RBUldJTigmZWNpZiwgLWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbiwKKyAgICAgIGZmaV9jYWxsX0RBUldJTigmZWNpZiwgLShsb25nKWNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbiwKIAkJICAgICAgZmZpX3ByZXBfYXJncyk7CiAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtNjE3LDggKzcwOCw5IEBACiAgIGRvdWJsZSBkOwogfSBmZmlfZGJsZmw7CiAKLWludCBmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOIChmZmlfY2xvc3VyZSosIHZvaWQqLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcqLCBmZmlfZGJsZmwqKTsKK2ludAorZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLAorCQkJICAgdW5zaWduZWQgbG9uZyAqLCBmZmlfZGJsZmwgKik7CiAKIC8qIEJhc2ljYWxseSB0aGUgdHJhbXBvbGluZSBpbnZva2VzIGZmaV9jbG9zdXJlX0FTTSwgYW5kIG9uCiAgICBlbnRyeSwgcjExIGhvbGRzIHRoZSBhZGRyZXNzIG9mIHRoZSBjbG9zdXJlLgpAQCAtNjI3LDggKzcxOSw5IEBACiAgICB1cCBzcGFjZSBmb3IgYSByZXR1cm4gdmFsdWUsIGZmaV9jbG9zdXJlX0FTTSBpbnZva2VzIHRoZQogICAgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbiB0byBkbyBtb3N0IG9mIHRoZSB3b3JrLiAgKi8KIAotaW50IGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gKGZmaV9jbG9zdXJlKiBjbG9zdXJlLCB2b2lkICogcnZhbHVlLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKiBwZ3IsIGZmaV9kYmxmbCAqIHBmcikKK2ludAorZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKnJ2YWx1ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgKnBnciwgZmZpX2RibGZsICpwZnIpCiB7CiAgIC8qIHJ2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGluIGNsb3N1cmUgYXNzZW1ibHkKICAgICAgcGdyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIHIzLXIxMCBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX0FTTQpAQCAtNjQ1LDE4ICs3MzgsMTIgQEAKICAgdm9pZCAqKiAgICAgICAgICBhdmFsdWU7CiAgIGZmaV90eXBlICoqICAgICAgYXJnX3R5cGVzOwogICBsb25nICAgICAgICAgICAgIGksIGF2bjsKLSAgbG9uZyAgICAgICAgICAgICBuZjsgICAvKiBudW1iZXIgb2YgZmxvYXRpbmcgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZC4gICovCi0gIGxvbmcgICAgICAgICAgICAgbmc7ICAgLyogbnVtYmVyIG9mIGdlbmVyYWwgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZC4gICovCiAgIGZmaV9jaWYgKiAgICAgICAgY2lmOwotICBkb3VibGUgICAgICAgICAgIHRlbXA7CisgIGZmaV9kYmxmbCAqICAgICAgZW5kX3BmciA9IHBmciArIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKICAgdW5zaWduZWQgICAgICAgICBzaXplX2FsOwotICB1bmlvbiBsZHUgICAgICAgIHRlbXBfbGQ7CiAKICAgY2lmID0gY2xvc3VyZS0+Y2lmOwotICBhdmFsdWUgPSBhbGxvY2EoY2lmLT5uYXJncyAqIHNpemVvZih2b2lkICopKTsKLQotICBuZiA9IDA7Ci0gIG5nID0gMDsKKyAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mKHZvaWQgKikpOwogCiAgIC8qIENvcHkgdGhlIGNhbGxlcidzIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgYWRkcmVzcyBzbyB0aGF0IHRoZSBjbG9zdXJlCiAgICAgIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4gICovCkBAIC02NjQsNyArNzUxLDYgQEAKICAgICB7CiAgICAgICBydmFsdWUgPSAodm9pZCAqKSAqcGdyOwogICAgICAgcGdyKys7Ci0gICAgICBuZysrOwogICAgIH0KIAogICBpID0gMDsKQEAgLTY3OCw1OCArNzY0LDgyIEBACiAJewogCWNhc2UgRkZJX1RZUEVfU0lOVDg6CiAJY2FzZSBGRklfVFlQRV9VSU5UODoKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDc7CisjZWxzZQogCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMzsKLQkgIG5nKys7CisjZW5kaWYKIAkgIHBncisrOwogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX1NJTlQxNjoKIAljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDY7CisjZWxzZQogCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMjsKLQkgIG5nKys7CisjZW5kaWYKIAkgIHBncisrOwogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX1NJTlQzMjoKIAljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDQ7CisjZWxzZQogCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKIAkgIGF2YWx1ZVtpXSA9IHBncjsKLQkgIG5nKys7CisjZW5kaWYKIAkgIHBncisrOwogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIHNpemVfYWwgPSBhcmdfdHlwZXNbaV0tPnNpemU7CisJICBpZiAoYXJnX3R5cGVzW2ldLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisJICAgIHNpemVfYWwgPSBBTElHTiAoYXJnX3R5cGVzW2ldLT5zaXplLCA4KTsKKwkgIGlmIChzaXplX2FsIDwgMyAmJiBjaWYtPmFiaSA9PSBGRklfREFSV0lOKQorCSAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSBwZ3IgKyA4IC0gc2l6ZV9hbDsKKwkgIGVsc2UKKwkgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgcGdyOworCSAgcGdyICs9IChzaXplX2FsICsgNykgLyA4OworI2Vsc2UKIAkgIC8qIFN0cnVjdHVyZXMgdGhhdCBtYXRjaCB0aGUgYmFzaWMgbW9kZXMgKFFJIDEgYnl0ZSwgSEkgMiBieXRlcywKIAkgICAgIFNJIDQgYnl0ZXMpIGFyZSBhbGlnbmVkIGFzIGlmIHRoZXkgd2VyZSB0aG9zZSBtb2Rlcy4gICovCiAJICBzaXplX2FsID0gYXJnX3R5cGVzW2ldLT5zaXplOwogCSAgLyogSWYgdGhlIGZpcnN0IG1lbWJlciBvZiB0aGUgc3RydWN0IGlzIGEgZG91YmxlLCB0aGVuIGFsaWduCi0JICAgICB0aGUgc3RydWN0IHRvIGRvdWJsZS13b3JkLgotCSAgICAgVHlwZSAzIGlzIGRlZmluZWQgaW4gaW5jbHVkZS9mZmkuaC4gI2RlZmluZSBGRklfVFlQRV9ET1VCTEUgMy4gICovCi0JICBpZiAoYXJnX3R5cGVzW2ldLT5lbGVtZW50c1swXS0+dHlwZSA9PSAzKQorCSAgICAgdGhlIHN0cnVjdCB0byBkb3VibGUtd29yZC4gICovCisJICBpZiAoYXJnX3R5cGVzW2ldLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCiAJICAgIHNpemVfYWwgPSBBTElHTihhcmdfdHlwZXNbaV0tPnNpemUsIDgpOwogCSAgaWYgKHNpemVfYWwgPCAzICYmIGNpZi0+YWJpID09IEZGSV9EQVJXSU4pCiAJICAgIGF2YWx1ZVtpXSA9ICh2b2lkKikgcGdyICsgNCAtIHNpemVfYWw7CiAJICBlbHNlCiAJICAgIGF2YWx1ZVtpXSA9ICh2b2lkKikgcGdyOwotCSAgbmcgKz0gKHNpemVfYWwgKyAzKSAvIDQ7CiAJICBwZ3IgKz0gKHNpemVfYWwgKyAzKSAvIDQ7CisjZW5kaWYKIAkgIGJyZWFrOwogCiAJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisjaWZkZWYgUE9XRVJQQzY0CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgYXZhbHVlW2ldID0gcGdyOworCSAgcGdyKys7CisJICBicmVhazsKKyNlbHNlCiAJICAvKiBMb25nIGxvbmcgaW50cyBhcmUgcGFzc2VkIGluIHR3byBncHIncy4gICovCiAJICBhdmFsdWVbaV0gPSBwZ3I7Ci0JICBuZyArPSAyOwogCSAgcGdyICs9IDI7CiAJICBicmVhazsKKyNlbmRpZgogCiAJY2FzZSBGRklfVFlQRV9GTE9BVDoKIAkgIC8qIEEgZmxvYXQgdmFsdWUgY29uc3VtZXMgYSBHUFIuCiAJICAgICBUaGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgKi8KLQkgIGlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgIGlmIChwZnIgPCBlbmRfcGZyKQogCSAgICB7Ci0JICAgICAgdGVtcCA9IHBmci0+ZDsKLQkgICAgICBwZnItPmYgPSAoZmxvYXQpdGVtcDsKKwkgICAgICBkb3VibGUgdGVtcCA9IHBmci0+ZDsKKwkgICAgICBwZnItPmYgPSAoZmxvYXQpIHRlbXA7CiAJICAgICAgYXZhbHVlW2ldID0gcGZyOwogCSAgICAgIHBmcisrOwogCSAgICB9CkBAIC03MzcsMTUgKzg0NywxMyBAQAogCSAgICB7CiAJICAgICAgYXZhbHVlW2ldID0gcGdyOwogCSAgICB9Ci0JICBuZisrOwotCSAgbmcrKzsKIAkgIHBncisrOwogCSAgYnJlYWs7CiAKIAljYXNlIEZGSV9UWVBFX0RPVUJMRToKIAkgIC8qIEEgZG91YmxlIHZhbHVlIGNvbnN1bWVzIHR3byBHUFJzLgogCSAgICAgVGhlcmUgYXJlIDEzIDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4gICovCi0JICBpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICBpZiAocGZyIDwgZW5kX3BmcikKIAkgICAgewogCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKIAkgICAgICBwZnIrKzsKQEAgLTc1NCwxNyArODYyLDM2IEBACiAJICAgIHsKIAkgICAgICBhdmFsdWVbaV0gPSBwZ3I7CiAJICAgIH0KLQkgIG5mKys7Ci0JICBuZyArPSAyOworI2lmZGVmIFBPV0VSUEM2NAorCSAgcGdyKys7CisjZWxzZQogCSAgcGdyICs9IDI7CisjZW5kaWYKIAkgIGJyZWFrOwogCiAjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKIAogCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNpZmRlZiBQT1dFUlBDNjQKKwkgIGlmIChwZnIgKyAxIDwgZW5kX3BmcikKKwkgICAgeworCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKKwkgICAgICBwZnIgKz0gMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaWYgKHBmciA8IGVuZF9wZnIpCisJCXsKKwkJICAqcGdyID0gKih1bnNpZ25lZCBsb25nICopIHBmcjsKKwkJICBwZnIrKzsKKwkJfQorCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKKwkgICAgfQorCSAgcGdyICs9IDI7CisjZWxzZSAgLyogUE9XRVJQQzY0ICovCiAJICAvKiBBIGxvbmcgZG91YmxlIHZhbHVlIGNvbnN1bWVzIGZvdXIgR1BScyBhbmQgdHdvIEZQUnMuCiAJICAgICBUaGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzLiAgKi8KLQkgIGlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAtIDEpCisJICBpZiAocGZyICsgMSA8IGVuZF9wZnIpCiAJICAgIHsKIAkgICAgICBhdmFsdWVbaV0gPSBwZnI7CiAJICAgICAgcGZyICs9IDI7CkBAIC03NzIsMTkgKzg5OSwyMCBAQAogCSAgLyogSGVyZSB3ZSBoYXZlIHRoZSBzaXR1YXRpb24gd2hlcmUgb25lIHBhcnQgb2YgdGhlIGxvbmcgZG91YmxlCiAJICAgICBpcyBzdG9yZWQgaW4gZnByMTMgYW5kIHRoZSBvdGhlciBwYXJ0IGlzIGFscmVhZHkgb24gdGhlIHN0YWNrLgogCSAgICAgV2UgdXNlIGEgdW5pb24gdG8gcGFzcyB0aGUgbG9uZyBkb3VibGUgdG8gYXZhbHVlW2ldLiAgKi8KLQkgIGVsc2UgaWYgKG5mID09IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAtIDEpCisJICBlbHNlIGlmIChwZnIgKyAxID09IGVuZF9wZnIpCiAJICAgIHsKKwkgICAgICB1bmlvbiBsZHUgdGVtcF9sZDsKIAkgICAgICBtZW1jcHkgKCZ0ZW1wX2xkLmxiWzBdLCBwZnIsIHNpemVvZihsZGJpdHMpKTsKIAkgICAgICBtZW1jcHkgKCZ0ZW1wX2xkLmxiWzFdLCBwZ3IgKyAyLCBzaXplb2YobGRiaXRzKSk7CiAJICAgICAgYXZhbHVlW2ldID0gJnRlbXBfbGQubGQ7CisJICAgICAgcGZyKys7CiAJICAgIH0KIAkgIGVsc2UKIAkgICAgewogCSAgICAgIGF2YWx1ZVtpXSA9IHBncjsKIAkgICAgfQotCSAgbmYgKz0gMjsKLQkgIG5nICs9IDQ7CiAJICBwZ3IgKz0gNDsKKyNlbmRpZiAgLyogUE9XRVJQQzY0ICovCiAJICBicmVhazsKICNlbmRpZgogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaAppbmRleCBmNDk5YWMzLi5iNGY5OTJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKQEAgLTEsNiArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQogICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMyAgUmVkIEhhdCwgSW5jLgotICAgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jCisgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKICAgIFRhcmdldCBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgUG93ZXJQQy4KIAogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCkBAIC0zMCw3ICszMCwxMSBAQAogCiAvKiAtLS0tIFN5c3RlbSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaWYgZGVmaW5lZCAoUE9XRVJQQykgJiYgZGVmaW5lZCAoX19wb3dlcnBjNjRfXykKKyNpZiBkZWZpbmVkIChQT1dFUlBDKSAmJiBkZWZpbmVkIChfX3Bvd2VycGM2NF9fKQkvKiBsaW51eDY0ICovCisjZGVmaW5lIFBPV0VSUEM2NAorI2VsaWYgZGVmaW5lZCAoUE9XRVJQQ19EQVJXSU4pICYmIGRlZmluZWQgKF9fcHBjNjRfXykJLyogRGFyd2luICovCisjZGVmaW5lIFBPV0VSUEM2NAorI2VsaWYgZGVmaW5lZCAoUE9XRVJQQ19BSVgpICYmIGRlZmluZWQgKF9fNjRCSVRfXykJLyogQUlYNjQgKi8KICNkZWZpbmUgUE9XRVJQQzY0CiAjZW5kaWYKIApAQCAtNzgsNiArODIsOCBAQAogICBGRklfU1lTViwKICAgRkZJX0dDQ19TWVNWLAogICBGRklfTElOVVg2NCwKKyAgRkZJX0xJTlVYLAorICBGRklfTElOVVhfU09GVF9GTE9BVCwKICAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YsCiAjZW5kaWYKIApAQCAtOTYsNyArMTAyLDkgQEAKIC8qIE5lZWRlZCBmb3Igc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjggc3VwcG9ydC4gICovCiAjZGVmaW5lIEZGSV9UWVBFX1VJTlQxMjggKEZGSV9UWVBFX0xBU1QgKyAxKQogCi0vKiBOZWVkZWQgZm9yIEZGSV9TWVNWIHNtYWxsIHN0cnVjdHVyZSByZXR1cm5zLiAgKi8KKy8qIE5lZWRlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0dXJlIHJldHVybnMuCisgICBXZSB1c2UgdHdvIGZsYWcgYml0cywgKEZMQUdfU1lTVl9TTVNUX1IzLCBGTEFHX1NZU1ZfU01TVF9SNCkgd2hpY2ggYXJlCisgICBkZWZpbmVkIGluIGZmaS5jLCB0byBkZXRlcm1pbmUgdGhlIGV4YWN0IHJldHVybiB0eXBlIGFuZCBpdHMgc2l6ZS4gICovCiAjZGVmaW5lIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIChGRklfVFlQRV9MQVNUICsgMikKIAogI2lmIGRlZmluZWQoUE9XRVJQQzY0KSB8fCBkZWZpbmVkKFBPV0VSUENfQUlYKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwppbmRleCBjMDYzMTFmLi45NmVhMjJiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3N5c3YuUwpAQCAtMTM2LDI5ICsxMzYsMTggQEAKIAliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCiAKIEwoc21hbGxfc3RydWN0X3JldHVybl92YWx1ZSk6Ci0JbXRjcmYJMHgxMCwlcjMxCS8qIGNyMyAgKi8KLQlidC0JMTUsTChzbXN0X29uZV9yZWdpc3RlcikKLQltdGNyZgkweDA4LCVyMzEJLyogY3I0ICAqLwotCWJ0LQkxNixMKHNtc3RfdHdvX3JlZ2lzdGVyKQotCWIgICAgICAgTChkb25lX3JldHVybl92YWx1ZSkKLQotTChzbXN0X29uZV9yZWdpc3Rlcik6Ci0Jcmx3aW5tICAlcjUsJXIzMSw1KzIzLDMyLTUsMzEgLyogRXh0cmFjdCB0aGUgdmFsdWUgdG8gc2hpZnQuICAqLwotCXNsdwklcjMsJXIzLCVyNQotCXN0dwklcjMsMCglcjMwKQotCWIJTChkb25lX3JldHVybl92YWx1ZSkKLUwoc21zdF90d29fcmVnaXN0ZXIpOgotCXJsd2lubSAgJXI1LCVyMzEsNSsyMywzMi01LDMxIC8qIEV4dHJhY3QgdGhlIHZhbHVlIHRvIHNoaWZ0LiAgKi8KLQljbXB3aQklcjUsMAotCXN1YmZpYwklcjksJXI1LDMyCi0Jc2x3CSVyMjksJXIzLCVyNQotCXNydwklcjksJXI0LCVyOQotCWJlcS0JTChzbXN0XzhieXRlKQotCW9yCSVyMywlcjksJXIyOQotCXNsdwklcjQsJXI0LCVyNQotTChzbXN0XzhieXRlKToKLQlzdHcJJXIzLDAoJXIzMCkKLQlzdHcJJXI0LDQoJXIzMCkKKwlleHRyd2kJJXI2LCVyMzEsMiwxOSAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBwYWRkaW5nID0gc2hpZnQvOCAqLworCW10Y3JmCTB4MDIsJXIzMQkgICAgICAvKiBjb3B5IGZsYWdzIHRvIGNyWzI0OjI3XSAoY3I2KSAqLworCWV4dHJ3aQklcjUsJXIzMSw1LDE5ICAgICAgICAgLyogcjUgPC0gbnVtYmVyIG9mIGJpdHMgb2YgcGFkZGluZyAqLworCXN1YmZpYyAgJXI2LCVyNiw0ICAgICAgICAgICAgIC8qIHI2IDwtIG51bWJlciBvZiB1c2VmdWwgYnl0ZXMgaW4gcjMgKi8KKwliZi0JMjUsTChkb25lX3JldHVybl92YWx1ZSkgLyogc3RydWN0IGluIHIzID8gaWYgbm90LCBkb25lLiAqLworLyogc21zdF9vbmVfcmVnaXN0ZXI6ICovCisJc2x3CSVyMywlcjMsJXI1ICAgICAgICAgICAvKiBMZWZ0LWp1c3RpZnkgdmFsdWUgaW4gcjMgKi8KKwltdHhlcgklcjYgICAgICAgICAgICAgICAgICAgLyogbW92ZSBieXRlIGNvdW50IHRvIFhFUiAuLi4gKi8KKwlzdHN3eAklcjMsMCwlcjMwICAgICAgICAgICAgLyogLi4uIGFuZCBzdG9yZSB0aGF0IG1hbnkgYnl0ZXMgKi8KKwliZisJMjYsTChkb25lX3JldHVybl92YWx1ZSkgIC8qIHN0cnVjdCBpbiByMzpyNCA/ICovCisJYWRkCSVyNiwlcjYsJXIzMCAgICAgICAgICAvKiBhZGp1c3QgcG9pbnRlciAqLworCXN0c3dpCSVyNCwlcjYsNCAgICAgICAgICAgICAvKiBzdG9yZSBsYXN0IGZvdXIgYnl0ZXMgKi8KIAliCUwoZG9uZV9yZXR1cm5fdmFsdWUpCiAKIC5MRkUxOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKaW5kZXggZWI3OGY5YS4uYzFjM2I5YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCkBAIC0xMDksMTYgKzEwOSwxMyBAQAogICAvKiBQZXJmb3JtIGEgc2FuaXR5IGNoZWNrIG9uIHRoZSByZXR1cm4gdHlwZSAqLwogICBGRklfQVNTRVJUX1ZBTElEX1RZUEUoY2lmLT5ydHlwZSk7CiAKLSAgLyogeDg2LTY0IGFuZCBzMzkwIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gaXMgaGFuZGxlZCBpbiBwcmVwX21hY2hkZXAuICAqLwotI2lmICFkZWZpbmVkIE02OEsgJiYgIWRlZmluZWQgX194ODZfNjRfXyAmJiAhZGVmaW5lZCBTMzkwICYmICFkZWZpbmVkIFBBCisgIC8qIHg4NiwgeDg2LTY0IGFuZCBzMzkwIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gaXMgaGFuZGxlZCBpbiBwcmVwX21hY2hkZXAuICovCisjaWYgIWRlZmluZWQgTTY4SyAmJiAhZGVmaW5lZCBfX2kzODZfXyAmJiAhZGVmaW5lZCBfX3g4Nl82NF9fICYmICFkZWZpbmVkIFMzOTAgJiYgIWRlZmluZWQgUEEKICAgLyogTWFrZSBzcGFjZSBmb3IgdGhlIHJldHVybiBzdHJ1Y3R1cmUgcG9pbnRlciAqLwogICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKICNpZmRlZiBTUEFSQwogICAgICAgJiYgKGNpZi0+YWJpICE9IEZGSV9WOSB8fCBjaWYtPnJ0eXBlLT5zaXplID4gMzIpCiAjZW5kaWYKLSNpZmRlZiBYODZfREFSV0lOCi0gICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSA+IDgpCi0jZW5kaWYKICAgICAgKQogICAgIGJ5dGVzID0gU1RBQ0tfQVJHX1NJWkUoc2l6ZW9mKHZvaWQqKSk7CiAjZW5kaWYKQEAgLTEzNCw3ICsxMzEsNyBAQAogCSBjaGVjayBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24uICAqLwogICAgICAgRkZJX0FTU0VSVF9WQUxJRF9UWVBFKCpwdHIpOwogCi0jaWYgIWRlZmluZWQgX194ODZfNjRfXyAmJiAhZGVmaW5lZCBTMzkwICYmICFkZWZpbmVkIFBBCisjaWYgIWRlZmluZWQgX19pMzg2X18gJiYgIWRlZmluZWQgX194ODZfNjRfXyAmJiAhZGVmaW5lZCBTMzkwICYmICFkZWZpbmVkIFBBCiAjaWZkZWYgU1BBUkMKICAgICAgIGlmICgoKCpwdHIpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAogCSAgICYmICgoKnB0ciktPnNpemUgPiAxNiB8fCBjaWYtPmFiaSAhPSBGRklfVjkpKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcmF3X2FwaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcmF3X2FwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMjEzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9yYXdfYXBpLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICByYXdfYXBpLmMgLSBDb3B5cmlnaHQgKGMpIDE5OTksIDIwMDggIFJlZCBIYXQsIEluYy4KKworICAgQXV0aG9yOiBLcmVzdGVuIEtyYWIgVGhvcnVwIDxrcmFiQGdudS5vcmc+CisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoaXMgZmlsZSBkZWZpbmVzIGdlbmVyaWMgZnVuY3Rpb25zIGZvciB1c2Ugd2l0aCB0aGUgcmF3IGFwaS4gKi8KKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworI2lmICFGRklfTk9fUkFXX0FQSQorCitzaXplX3QKK2ZmaV9yYXdfc2l6ZSAoZmZpX2NpZiAqY2lmKQoreworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgaW50IGk7CisKKyAgZmZpX3R5cGUgKiphdCA9IGNpZi0+YXJnX3R5cGVzOworCisgIGZvciAoaSA9IGNpZi0+bmFyZ3MtMTsgaSA+PSAwOyBpLS0sIGF0KyspCisgICAgeworI2lmICFGRklfTk9fU1RSVUNUUworICAgICAgaWYgKCgqYXQpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKwlyZXN1bHQgKz0gQUxJR04gKHNpemVvZiAodm9pZCopLCBGRklfU0laRU9GX0FSRyk7CisgICAgICBlbHNlCisjZW5kaWYKKwlyZXN1bHQgKz0gQUxJR04gKCgqYXQpLT5zaXplLCBGRklfU0laRU9GX0FSRyk7CisgICAgfQorCisgIHJldHVybiByZXN1bHQ7Cit9CisKKwordm9pZAorZmZpX3Jhd190b19wdHJhcnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfcmF3ICpyYXcsIHZvaWQgKiphcmdzKQoreworICB1bnNpZ25lZCBpOworICBmZmlfdHlwZSAqKnRwID0gY2lmLT5hcmdfdHlwZXM7CisKKyNpZiBXT1JEU19CSUdFTkRJQU4KKworICBmb3IgKGkgPSAwOyBpIDwgY2lmLT5uYXJnczsgaSsrLCB0cCsrLCBhcmdzKyspCisgICAgewkgIAorICAgICAgc3dpdGNoICgoKnRwKS0+dHlwZSkKKwl7CisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgKmFyZ3MgPSAodm9pZCopICgoY2hhciopKHJhdysrKSArIEZGSV9TSVpFT0ZfQVJHIC0gMSk7CisJICBicmVhazsKKwkgIAorCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgKmFyZ3MgPSAodm9pZCopICgoY2hhciopKHJhdysrKSArIEZGSV9TSVpFT0ZfQVJHIC0gMik7CisJICBicmVhazsKKworI2lmIEZGSV9TSVpFT0ZfQVJHID49IDQJICAKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwkgICphcmdzID0gKHZvaWQqKSAoKGNoYXIqKShyYXcrKykgKyBGRklfU0laRU9GX0FSRyAtIDQpOworCSAgYnJlYWs7CisjZW5kaWYKKwkKKyNpZiAhRkZJX05PX1NUUlVDVFMgIAorCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgKmFyZ3MgPSAocmF3KyspLT5wdHI7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgKmFyZ3MgPSAodm9pZCopICYocmF3KyspLT5wdHI7CisJICBicmVhazsKKwkgIAorCWRlZmF1bHQ6CisJICAqYXJncyA9IHJhdzsKKwkgIHJhdyArPSBBTElHTiAoKCp0cCktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKSAvIEZGSV9TSVpFT0ZfQVJHOworCX0KKyAgICB9CisKKyNlbHNlIC8qIFdPUkRTX0JJR0VORElBTiAqLworCisjaWYgIVBEUAorCisgIC8qIHRoZW4gYXNzdW1lIGxpdHRsZSBlbmRpYW4gKi8KKyAgZm9yIChpID0gMDsgaSA8IGNpZi0+bmFyZ3M7IGkrKywgdHArKywgYXJncysrKQorICAgIHsJICAKKyNpZiAhRkZJX05PX1NUUlVDVFMKKyAgICAgIGlmICgoKnRwKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisJeworCSAgKmFyZ3MgPSAocmF3KyspLT5wdHI7CisJfQorICAgICAgZWxzZQorI2VuZGlmCisJeworCSAgKmFyZ3MgPSAodm9pZCopIHJhdzsKKwkgIHJhdyArPSBBTElHTiAoKCp0cCktPnNpemUsIHNpemVvZiAodm9pZCopKSAvIHNpemVvZiAodm9pZCopOworCX0KKyAgICB9CisKKyNlbHNlCisjZXJyb3IgInBkcCBlbmRpYW4gbm90IHN1cHBvcnRlZCIKKyNlbmRpZiAvKiAhIFBEUCAqLworCisjZW5kaWYgLyogV09SRFNfQklHRU5ESUFOICovCit9CisKK3ZvaWQKK2ZmaV9wdHJhcnJheV90b19yYXcgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmFyZ3MsIGZmaV9yYXcgKnJhdykKK3sKKyAgdW5zaWduZWQgaTsKKyAgZmZpX3R5cGUgKip0cCA9IGNpZi0+YXJnX3R5cGVzOworCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyssIHRwKyssIGFyZ3MrKykKKyAgICB7CSAgCisgICAgICBzd2l0Y2ggKCgqdHApLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDgqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDgqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwkgIChyYXcrKyktPnVpbnQgPSAqKFVJTlQxNiopICgqYXJncyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgKHJhdysrKS0+c2ludCA9ICooU0lOVDE2KikgKCphcmdzKTsKKwkgIGJyZWFrOworCisjaWYgRkZJX1NJWkVPRl9BUkcgPj0gNAorCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgorCSAgKHJhdysrKS0+dWludCA9ICooVUlOVDMyKikgKCphcmdzKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJICAocmF3KyspLT5zaW50ID0gKihTSU5UMzIqKSAoKmFyZ3MpOworCSAgYnJlYWs7CisjZW5kaWYKKworI2lmICFGRklfTk9fU1RSVUNUUworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgKHJhdysrKS0+cHRyID0gKmFyZ3M7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgKHJhdysrKS0+cHRyID0gKioodm9pZCoqKikgYXJnczsKKwkgIGJyZWFrOworCisJZGVmYXVsdDoKKwkgIG1lbWNweSAoKHZvaWQqKSByYXctPmRhdGEsICh2b2lkKikqYXJncywgKCp0cCktPnNpemUpOworCSAgcmF3ICs9IEFMSUdOICgoKnRwKS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpIC8gRkZJX1NJWkVPRl9BUkc7CisJfQorICAgIH0KK30KKworI2lmICFGRklfTkFUSVZFX1JBV19BUEkKKworCisvKiBUaGlzIGlzIGEgZ2VuZXJpYyBkZWZpbml0aW9uIG9mIGZmaV9yYXdfY2FsbCwgdG8gYmUgdXNlZCBpZiB0aGUKKyAqIG5hdGl2ZSBzeXN0ZW0gZG9lcyBub3QgcHJvdmlkZSBhIG1hY2hpbmUtc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uCisgKiBIYXZpbmcgdGhpcywgYWxsb3dzIGNvZGUgdG8gYmUgd3JpdHRlbiBmb3IgdGhlIHJhdyBBUEksIHdpdGhvdXQKKyAqIHRoZSBuZWVkIGZvciBzeXN0ZW0tc3BlY2lmaWMgY29kZSB0byBoYW5kbGUgaW5wdXQgaW4gdGhhdCBmb3JtYXQ7CisgKiB0aGVzZSBmb2xsb3dpbmcgY291cGxlIG9mIGZ1bmN0aW9ucyB3aWxsIGhhbmRsZSB0aGUgdHJhbnNsYXRpb24gZm9ydGgKKyAqIGFuZCBiYWNrIGF1dG9tYXRpY2FsbHkuICovCisKK3ZvaWQgZmZpX3Jhd19jYWxsIChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgZmZpX3JhdyAqcmF3KQoreworICB2b2lkICoqYXZhbHVlID0gKHZvaWQqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkKikpOworICBmZmlfcmF3X3RvX3B0cmFycmF5IChjaWYsIHJhdywgYXZhbHVlKTsKKyAgZmZpX2NhbGwgKGNpZiwgZm4sIHJ2YWx1ZSwgYXZhbHVlKTsKK30KKworI2lmIEZGSV9DTE9TVVJFUwkJLyogYmFzZSBzeXN0ZW0gcHJvdmlkZXMgY2xvc3VyZXMgKi8KKworc3RhdGljIHZvaWQKK2ZmaV90cmFuc2xhdGVfYXJncyAoZmZpX2NpZiAqY2lmLCB2b2lkICpydmFsdWUsCisJCSAgICB2b2lkICoqYXZhbHVlLCB2b2lkICp1c2VyX2RhdGEpCit7CisgIGZmaV9yYXcgKnJhdyA9IChmZmlfcmF3KilhbGxvY2EgKGZmaV9yYXdfc2l6ZSAoY2lmKSk7CisgIGZmaV9yYXdfY2xvc3VyZSAqY2wgPSAoZmZpX3Jhd19jbG9zdXJlKil1c2VyX2RhdGE7CisKKyAgZmZpX3B0cmFycmF5X3RvX3JhdyAoY2lmLCBhdmFsdWUsIHJhdyk7CisgICgqY2wtPmZ1bikgKGNpZiwgcnZhbHVlLCByYXcsIGNsLT51c2VyX2RhdGEpOworfQorCitmZmlfc3RhdHVzCitmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MgKGZmaV9yYXdfY2xvc3VyZSogY2wsCisJCQkgIGZmaV9jaWYgKmNpZiwKKwkJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9pZCopLAorCQkJICB2b2lkICp1c2VyX2RhdGEsCisJCQkgIHZvaWQgKmNvZGVsb2MpCit7CisgIGZmaV9zdGF0dXMgc3RhdHVzOworCisgIHN0YXR1cyA9IGZmaV9wcmVwX2Nsb3N1cmVfbG9jICgoZmZpX2Nsb3N1cmUqKSBjbCwKKwkJCQkgY2lmLAorCQkJCSAmZmZpX3RyYW5zbGF0ZV9hcmdzLAorCQkJCSBjb2RlbG9jLAorCQkJCSBjb2RlbG9jKTsKKyAgaWYgKHN0YXR1cyA9PSBGRklfT0spCisgICAgeworICAgICAgY2wtPmZ1biAgICAgICA9IGZ1bjsKKyAgICAgIGNsLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgfQorCisgIHJldHVybiBzdGF0dXM7Cit9CisKKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8KKyNlbmRpZiAvKiAhRkZJX05BVElWRV9SQVdfQVBJICovCisKKyNpZiBGRklfQ0xPU1VSRVMKKworLyogQWdhaW4sIGhlcmUgaXMgdGhlIGdlbmVyaWMgdmVyc2lvbiBvZiBmZmlfcHJlcF9yYXdfY2xvc3VyZSwgd2hpY2gKKyAqIHdpbGwgaW5zdGFsbCBhbiBpbnRlcm1lZGlhdGUgImh1YiIgZm9yIHRyYW5zbGF0aW9uIG9mIGFyZ3VtZW50cyBmcm9tCisgKiB0aGUgcG9pbnRlci1hcnJheSBmb3JtYXQsIHRvIHRoZSByYXcgZm9ybWF0ICovCisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1cmUqIGNsLAorCQkgICAgICBmZmlfY2lmICpjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhKQoreworICByZXR1cm4gZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jIChjbCwgY2lmLCBmdW4sIHVzZXJfZGF0YSwgY2wpOworfQorCisjZW5kaWYgLyogRkZJX0NMT1NVUkVTICovCisKKyNlbmRpZiAvKiAhRkZJX05PX1JBV19BUEkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3MzOTAvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMKaW5kZXggYjRjMWRkNS4uNDczMWEzMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvczM5MC9zeXN2LlMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDAwIFNvZnR3YXJlIEFHCiAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggUmVkIEhhdCwgSW5jLgotCQorIAogICAgUzM5MCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogIAogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCmluZGV4IGQ3ZmExZDQuLjY5YmQwMjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEtheiBLb2ppbWEKKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEtheiBLb2ppbWEKICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4IFJlZCBIYXQsIEluYy4KICAgIAogICAgU3VwZXJIIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIApAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCSAgICAgIHZvaWQgKmNvZGVsb2MpCiB7CiAgIHVuc2lnbmVkIGludCAqdHJhbXA7Ci0gIHVuc2lnbmVkIHNob3J0IGluc247CisgIHVuc2lnbmVkIGludCBpbnNuOwogCiAgIEZGSV9BU1NFUlQgKGNpZi0+YWJpID09IEZGSV9HQ0NfU1lTVik7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL3N5c3YuUwppbmRleCBlYTc5OGY3Li41YmU3NTE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaC9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvc3lzdi5TCkBAIC0xLDUgKzEsNSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNiBLYXogS29qaW1hCisgICBzeXN2LlMgLSBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDggS2F6IEtvamltYQogICAgCiAgICBTdXBlckggRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCiAKQEAgLTE0LDE0ICsxNCwxNCBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogCi0gICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCi0gICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCi0gICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SCi0JQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gICBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAgIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgotICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNkZWZpbmUgTElCRkZJX0FTTQkKQEAgLTcwMiw2ICs3MDIsMTAgQEAKIC5mZmlfY2xvc3VyZV9TWVNWX2VuZDoKICAgICAgICAgLnNpemUgICAgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksLmZmaV9jbG9zdXJlX1NZU1ZfZW5kLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCiAKKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjZW5kaWYKKwogCS5zZWN0aW9uCSIuZWhfZnJhbWUiLCJhdyIsQHByb2diaXRzCiBfX0ZSQU1FX0JFR0lOX186CiAJLjRieXRlCS5MRUNJRTEtLkxTQ0lFMQkvKiBMZW5ndGggb2YgQ29tbW9uIEluZm9ybWF0aW9uIEVudHJ5ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9mZmkuYwppbmRleCBiMTdjZjJjLi44ZmJjMDVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zaDY0L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvZmZpLmMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQgS2F6IEtvamltYQorICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMDMsIDIwMDQsIDIwMDYsIDIwMDcgS2F6IEtvamltYQogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDggQW50aG9ueSBHcmVlbgogICAgCiAgICBTdXBlckggU0htZWRpYSBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKQEAgLTU2LDkgKzU2LDcgQEAKIC8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKICAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzICovCiAKLS8qQC1leHBvcnRoZWFkZXJAKi8KIHZvaWQgZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQotLypAPWV4cG9ydGhlYWRlckAqLwogewogICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGF2bjsKQEAgLTE2Miw2ICsxNjAsNyBAQAogICBpbnQgbiwgbTsKICAgaW50IGdyZWc7CiAgIGludCBmcmVnOworICBpbnQgZnBhaXIgPSAtMTsKIAogICBncmVnID0gKHJldHVybl90eXBlIChjaWYtPnJ0eXBlKSA9PSBGRklfVFlQRV9TVFJVQ1QgPyAxIDogMCk7CiAgIGZyZWcgPSAwOwpAQCAtMTc3LDcgKzE3NiwxMyBAQAogCSAgY2lmLT5ieXRlcyArPSBzaXplb2YgKFVJTlQ2NCkgLSBzaXplb2YgKGZsb2F0KTsKIAkgIGlmIChmcmVnID49IE5GUkVHQVJHIC0gMSkKIAkgICAgY29udGludWU7Ci0JICBmcmVnKys7CisJICBpZiAoZnBhaXIgPCAwKQorCSAgICB7CisJICAgICAgZnBhaXIgPSBmcmVnOworCSAgICAgIGZyZWcgKz0gMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICBmcGFpciA9IC0xOwogCSAgY2lmLT5mbGFnczIgKz0gKChjaWYtPmFyZ190eXBlcylbaV0tPnR5cGUpIDw8ICgyICogaisrKTsKIAkgIGJyZWFrOwogCkBAIC0xODYsNyArMTkxLDYgQEAKIAkgICAgY29udGludWU7CiAJICBpZiAoKGZyZWcgKyAxKSA8IE5GUkVHQVJHKQogCSAgICB7Ci0JICAgICAgZnJlZyA9IChmcmVnICsgMSkgJiB+MTsKIAkgICAgICBmcmVnICs9IDI7CiAJICAgICAgY2lmLT5mbGFnczIgKz0gKChjaWYtPmFyZ190eXBlcylbaV0tPnR5cGUpIDw8ICgyICogaisrKTsKIAkgICAgfQpAQCAtMjY0LDkgKzI2OCw3IEBACiAgIGVsc2UgaWYgKChydmFsdWUgPT0gTlVMTCkgJiYgCiAgICAgICAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpKQogICAgIHsKLSAgICAgIC8qQC1zeXN1bnJlY29nQCovCiAgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShjaWYtPnJ0eXBlLT5zaXplKTsKLSAgICAgIC8qQD1zeXN1bnJlY29nQCovCiAgICAgfQogICBlbHNlCiAgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CkBAIC0yNzQsMTAgKzI3Niw4IEBACiAgIHN3aXRjaCAoY2lmLT5hYmkpIAogICAgIHsKICAgICBjYXNlIEZGSV9TWVNWOgotICAgICAgLypALXVzZWRlZkAqLwotICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgCi0JCSAgICBjaWYtPmZsYWdzLCBjaWYtPmZsYWdzMiwgZWNpZi5ydmFsdWUsIGZuKTsKLSAgICAgIC8qQD11c2VkZWZAKi8KKyAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGNpZi0+ZmxhZ3MyLAorCQkgICAgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUKDApOwpAQCAtMjk0LDEwICsyOTQsMTEgQEAKIGV4dGVybiB2b2lkIF9faWNfaW52YWxpZGF0ZSAodm9pZCAqbGluZSk7CiAKIGZmaV9zdGF0dXMKLWZmaV9wcmVwX2Nsb3N1cmUgKGZmaV9jbG9zdXJlICpjbG9zdXJlLAotCQkgIGZmaV9jaWYgKmNpZiwKLQkJICB2b2lkICgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAotCQkgIHZvaWQgKnVzZXJfZGF0YSkKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwKKwkJICAgICAgZmZpX2NpZiAqY2lmLAorCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKiwgdm9pZCosIHZvaWQqKiwgdm9pZCopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsCisJCSAgICAgIHZvaWQgKmNvZGVsb2MpCiB7CiAgIHVuc2lnbmVkIGludCAqdHJhbXA7CiAKQEAgLTMyMSw4ICszMjIsOCBAQAogICB0cmFtcFsyXSA9IDB4Y2MwMDAwMTAgfCAoKChVSU5UMzIpIGZmaV9jbG9zdXJlX1NZU1YpID4+IDE2KSA8PCAxMDsKICAgdHJhbXBbM10gPSAweGM4MDAwMDEwIHwgKCgoVUlOVDMyKSBmZmlfY2xvc3VyZV9TWVNWKSAmIDB4ZmZmZikgPDwgMTA7CiAgIHRyYW1wWzRdID0gMHg2YmYxMDYwMDsKLSAgdHJhbXBbNV0gPSAweGNjMDAwMDEwIHwgKCgoVUlOVDMyKSBjbG9zdXJlKSA+PiAxNikgPDwgMTA7Ci0gIHRyYW1wWzZdID0gMHhjODAwMDAxMCB8ICgoKFVJTlQzMikgY2xvc3VyZSkgJiAweGZmZmYpIDw8IDEwOworICB0cmFtcFs1XSA9IDB4Y2MwMDAwMTAgfCAoKChVSU5UMzIpIGNvZGVsb2MpID4+IDE2KSA8PCAxMDsKKyAgdHJhbXBbNl0gPSAweGM4MDAwMDEwIHwgKCgoVUlOVDMyKSBjb2RlbG9jKSAmIDB4ZmZmZikgPDwgMTA7CiAgIHRyYW1wWzddID0gMHg0NDAxZmZmMDsKIAogICBjbG9zdXJlLT5jaWYgPSBjaWY7CkBAIC0zMzAsNyArMzMxLDggQEAKICAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwogCiAgIC8qIEZsdXNoIHRoZSBpY2FjaGUuICAqLwotICBhc20gdm9sYXRpbGUgKCJvY2J3YiAlMCwwOyBzeW5jbzsgaWNiaSAlMCwwOyBzeW5jaSIgOiA6ICJyIiAodHJhbXApKTsKKyAgYXNtIHZvbGF0aWxlICgib2Nid2IgJTAsMDsgc3luY287IGljYmkgJTEsMDsgc3luY2kiIDogOiAiciIgKHRyYW1wKSwKKwkJInIiKGNvZGVsb2MpKTsKIAogICByZXR1cm4gRkZJX09LOwogfQpAQCAtMzUyLDYgKzM1NCw3IEBACiAgIGludCBpLCBhdm47CiAgIGludCBncmVnLCBmcmVnOwogICBmZmlfY2lmICpjaWY7CisgIGludCBmcGFpciA9IC0xOwogCiAgIGNpZiA9IGNsb3N1cmUtPmNpZjsKICAgYXZhbHVlID0gYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkICopKTsKQEAgLTM2MCw3ICszNjMsNyBAQAogICAgICByZXR1cm5zIHRoZSBkYXRhIGRpcmVjdGx5IHRvIHRoZSBjYWxsZXIuICAqLwogICBpZiAocmV0dXJuX3R5cGUgKGNpZi0+cnR5cGUpID09IEZGSV9UWVBFX1NUUlVDVCkKICAgICB7Ci0gICAgICBydmFsdWUgPSAqcGdyOworICAgICAgcnZhbHVlID0gKFVJTlQ2NCAqKSAqcGdyOwogICAgICAgZ3JlZyA9IDE7CiAgICAgfQogICBlbHNlCkBAIC00MDQsMTEgKzQwNywyNCBAQAogCSAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUKQogCSAgICB7CiAJICAgICAgaWYgKGZyZWcgPCBORlJFR0FSRyAtIDEpCisJCXsKKwkJICBpZiAoZnBhaXIgPj0gMCkKKwkJICAgIHsKKwkJICAgICAgYXZhbHVlW2ldID0gKFVJTlQzMiAqKSBwZnIgKyBmcGFpcjsKKwkJICAgICAgZnBhaXIgPSAtMTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KLQkJYXZhbHVlW2ldID0gKFVJTlQzMiAqKSBwZnIgKyAoMSBeIGZyZWcrKyk7CisJCSAgICAgIGZwYWlyID0gZnJlZzsKKwkJICAgICAgYXZhbHVlW2ldID0gKFVJTlQzMiAqKSBwZnIgKyAoMSBeIGZyZWcpOwogI2Vsc2UKLQkJYXZhbHVlW2ldID0gKFVJTlQzMiAqKSBwZnIgKyBmcmVnKys7CisJCSAgICAgIGZwYWlyID0gMSBeIGZyZWc7CisJCSAgICAgIGF2YWx1ZVtpXSA9IChVSU5UMzIgKikgcGZyICsgZnJlZzsKICNlbmRpZgorCQkgICAgICBmcmVnICs9IDI7CisJCSAgICB9CisJCX0KIAkgICAgICBlbHNlCiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KIAkJYXZhbHVlW2ldID0gcGdyICsgZ3JlZzsKQEAgLTQzMCw3ICs0NDYsNiBAQAogCSAgICBhdmFsdWVbaV0gPSBwZ3IgKyBncmVnOwogCSAgZWxzZQogCSAgICB7Ci0JICAgICAgZnJlZyA9IChmcmVnICsgMSkgJiB+MTsKIAkgICAgICBhdmFsdWVbaV0gPSBwZnIgKyAoZnJlZyA+PiAxKTsKIAkgICAgICBmcmVnICs9IDI7CiAJICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoNjQvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9zeXN2LlMKaW5kZXggYjZhMjQ4ZC4uYzQ1ODdkNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2g2NC9zeXN2LlMKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IEtheiBLb2ppbWEKKyAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAwMywgMjAwNCwgMjAwNiwgMjAwOCBLYXogS29qaW1hCiAgICAKICAgIFN1cGVySCBTSG1lZGlhIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAogCkBAIC0xNCwxNCArMTQsMTUgQEAKICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCiAgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQKKyAgIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLAorICAgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgICBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjZGVmaW5lIExJQkZGSV9BU00JCkBAIC04NSw2ICs4Niw3IEBACiAJYWRkaQlyMTUsIDY0LCByMjIKIAltb3ZpCTAsIHIwCiAJbW92aQkwLCByMQorCW1vdmkJLTEsIHIyMwogCiAJcHQvbAkxZiwgdHIxCiAJYm5laS9sCXIyOSwgRkZJX1RZUEVfU1RSVUNULCB0cjEKQEAgLTEwNyw5ICsxMDksNiBAQAogCiAuTF9wYXNzX2Q6CiAJYWRkaQlyMCwgMSwgcjAKLQlhZGRpCXIxLCAxLCByMQotCWFuZGkJcjEsIH4xLCByMQotCiAJcHQvbAkzZiwgdHIwCiAJbW92aQkxMiwgcjIwCiAJYmdlL2wJcjEsIHIyMCwgdHIwCkBAIC0xNTksMTMgKzE1OCwyMyBAQAogCWFkZGkubAlyMTUsIDgsIHIxNQogMzoKIAlwdC9sCS5MX3Bhc3MsIHRyMAotCWFkZGkJcjEsIDEsIHIxCiAJYmxpbmsJdHIwLCByNjMKIAogLkxfcG9wX2Y6CiAJcHQvbAkuTF9wb3BfZl90YmwsIHRyMQorCXB0L2wJNWYsIHRyMgogCWdldHRyCXRyMSwgcjIwCisJYmdlL2wJcjIzLCByNjMsIHRyMgorCWFkZAlyMSwgcjYzLCByMjMgCiAJc2hsbGkJcjEsIDMsIHIyMQorCWFkZGkJcjEsIDIsIHIxCisJYWRkCXIyMCwgcjIxLCByMjAKKwlwdGFicy9sCXIyMCwgdHIxCisJYmxpbmsJdHIxLCByNjMKKzU6CisJYWRkaQlyMjMsIDEsIHIyMQorCW1vdmkJLTEsIHIyMworCXNobGxpCXIyMSwgMywgcjIxCiAJYWRkCXIyMCwgcjIxLCByMjAKIAlwdGFicy9sCXIyMCwgdHIxCiAJYmxpbmsJdHIxLCByNjMKQEAgLTQzMCw2ICs0MzksMTAgQEAKIC5mZmlfY2xvc3VyZV9TWVNWX2VuZDoKIAkuc2l6ZQkgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksLmZmaV9jbG9zdXJlX1NZU1ZfZW5kLUNOQU1FKGZmaV9jbG9zdXJlX1NZU1YpCiAKKyNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKwkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjZW5kaWYKKwogCS5zZWN0aW9uCSIuZWhfZnJhbWUiLCJhdyIsQHByb2diaXRzCiBfX0ZSQU1FX0JFR0lOX186CiAJLjRieXRlCS5MRUNJRTEtLkxTQ0lFMQkvKiBMZW5ndGggb2YgQ29tbW9uIEluZm9ybWF0aW9uIEVudHJ5ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL2ZmaS5jCmluZGV4IDRjZGQxYjkuLjFkMDFmNTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL2ZmaS5jCkBAIC0zMDgsMTQgKzMwOCwyNCBAQAogCWNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TVFJVQ1Q7CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKKyAgICAgIGlmIChjaWYtPmFiaSA9PSBGRklfVjkpCisJY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsKKyAgICAgIGVsc2UKKwljaWYtPmZsYWdzID0gY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0gICAgICBpZiAoY2lmLT5hYmkgIT0gRkZJX1Y5KQotCXsKLQkgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7Ci0JICBicmVhazsKLQl9Ci0gICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgICAgaWYgKGNpZi0+YWJpID09IEZGSV9WOSkKKwljaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOworICAgICAgZWxzZQorCWNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7CisgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOwogICAgICAgYnJlYWs7CkBAIC01ODksNiArNTk5LDExIEBACiAJICAvKiBSaWdodC1qdXN0aWZ5LiAgKi8KIAkgIGFyZ24gKz0gQUxJR04oYXJnX3R5cGVzW2ldLT5zaXplLCBGRklfU0laRU9GX0FSRykgLyBGRklfU0laRU9GX0FSRzsKIAorCSAgLyogQWxpZ24gb24gYSAxNi1ieXRlIGJvdW5kYXJ5LiAgKi8KKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCSAgaWYgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFICYmIChhcmduICUgMikgIT0gMCkKKwkgICAgYXJnbisrOworI2VuZGlmCiAJICBpZiAoaSA8IGZwX3Nsb3RfbWF4CiAJICAgICAgJiYgKGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVAogCQkgIHx8IGFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9zcGFyYy92OC5TCmluZGV4IDllYjU0NjcuLmJlZjFiNjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NwYXJjL3Y4LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc3BhcmMvdjguUwpAQCAtNzMsMjEgKzczLDYzIEBACiAJYmUsYQlkb25lCiAJc3QJJWYwLCBbJWk0KzBdCSEgKGRlbGF5KQogCi0JY21wCSVpMywgRkZJX1RZUEVfU0lOVDY0Ci0JYmUJbG9uZ2xvbmcKLQogCWNtcAklaTMsIEZGSV9UWVBFX0RPVUJMRQotCWJuZQlkb25lCi0Jbm9wCi0Jc3QJJWYwLCBbJWk0KzBdCi0Jc3QJJWYxLCBbJWk0KzRdCi0JCisJYmUsYQlkb3VibGUKKwlzdAklZjAsIFslaTQrMF0JISAoZGVsYXkpCisKKwljbXAJJWkzLCBGRklfVFlQRV9TSU5UOAorCWJlLGEJc2ludDgKKwlzbGwJJW8wLCAyNCwgJW8wCSEgKGRlbGF5KQorCisJY21wCSVpMywgRkZJX1RZUEVfVUlOVDgKKwliZSxhCXVpbnQ4CisJc2xsCSVvMCwgMjQsICVvMAkhIChkZWxheSkKKworCWNtcAklaTMsIEZGSV9UWVBFX1NJTlQxNgorCWJlLGEJc2ludDE2CisJc2xsCSVvMCwgMTYsICVvMAkhIChkZWxheSkKKworCWNtcAklaTMsIEZGSV9UWVBFX1VJTlQxNgorCWJlLGEJdWludDE2CisJc2xsCSVvMCwgMTYsICVvMAkhIChkZWxheSkKKworCWNtcAklaTMsIEZGSV9UWVBFX1NJTlQ2NAorCWJlLGEJbG9uZ2xvbmcKKwlzdAklbzAsIFslaTQrMF0JISAoZGVsYXkpCiBkb25lOgogCXJldAogCXJlc3RvcmUKIAotbG9uZ2xvbmc6Citkb3VibGU6CisJc3QJJWYxLCBbJWk0KzRdCisJcmV0CisJcmVzdG9yZQorCitzaW50ODoKKwlzcmEJJW8wLCAyNCwgJW8wCiAJc3QJJW8wLCBbJWk0KzBdCisJcmV0CisJcmVzdG9yZQorCit1aW50ODoKKwlzcmwJJW8wLCAyNCwgJW8wCisJc3QJJW8wLCBbJWk0KzBdCisJcmV0CisJcmVzdG9yZQorCitzaW50MTY6CisJc3JhCSVvMCwgMTYsICVvMAorCXN0CSVvMCwgWyVpNCswXQorCXJldAorCXJlc3RvcmUKKwordWludDE2OgorCXNybAklbzAsIDE2LCAlbzAKKwlzdAklbzAsIFslaTQrMF0KKwlyZXQKKwlyZXN0b3JlCisKK2xvbmdsb25nOgogCXN0CSVvMSwgWyVpNCs0XQogCXJldAogCXJlc3RvcmUKQEAgLTE0OCw3ICsxOTAsOCBAQAogCWJlCWRvbmUxCiAKIAljbXAJJW8wLCBGRklfVFlQRV9JTlQKLQliZQlpbnRlZ2VyCisJYmUJZG9uZTEKKwkgbGQJWyVmcC04XSwgJWkwCiAKIAljbXAJJW8wLCBGRklfVFlQRV9GTE9BVAogCWJlLGEJZG9uZTEKQEAgLTE2NiwxMyArMjA5LDE1IEBACiAJY21wCSVvMCwgRkZJX1RZUEVfU1RSVUNUCiAJYmUJZG9uZTIKIAotCSEgRkZJX1RZUEVfU0lOVDY0Ci0JISBGRklfVFlQRV9VSU5UNjQKLQlsZAlbJWZwLTRdLCAlaTEKKwljbXAJJW8wLCBGRklfVFlQRV9TSU5UNjQKKwliZSxhCWRvbmUxCisJIGxkZAlbJWZwLThdLCAlaTAKIAotaW50ZWdlcjoKKwljbXAJJW8wLCBGRklfVFlQRV9VSU5UNjQKKwliZSxhCWRvbmUxCisJIGxkZAlbJWZwLThdLCAlaTAKKwogCWxkCVslZnAtOF0sICVpMAotCiBkb25lMToKIAlqbXAJJWk3KzgKIAkgcmVzdG9yZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExMWViMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMKQEAgLTAsMCArMSw3NyBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIHR5cGVzLmMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTggIFJlZCBIYXQsIEluYy4KKyAgIAorICAgUHJlZGVmaW5lZCBmZmlfdHlwZXMgbmVlZGVkIGJ5IGxpYmZmaS4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSGlkZSB0aGUgYmFzaWMgdHlwZSBkZWZpbml0aW9ucyBmcm9tIHRoZSBoZWFkZXIgZmlsZSwgc28gdGhhdCB3ZQorICAgY2FuIHJlZGVmaW5lIHRoZW0gaGVyZSBhcyAiY29uc3QiLiAgKi8KKyNkZWZpbmUgTElCRkZJX0hJREVfQkFTSUNfVFlQRVMKKworI2luY2x1ZGUgPGZmaS5oPgorI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KKworLyogVHlwZSBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lIEZGSV9UWVBFREVGKG5hbWUsIHR5cGUsIGlkKQkJXAorc3RydWN0IHN0cnVjdF9hbGlnbl8jI25hbWUgewkJCVwKKyAgY2hhciBjOwkJCQkJXAorICB0eXBlIHg7CQkJCQlcCit9OwkJCQkJCVwKK2NvbnN0IGZmaV90eXBlIGZmaV90eXBlXyMjbmFtZSA9IHsJCVwKKyAgc2l6ZW9mKHR5cGUpLAkJCQkJXAorICBvZmZzZXRvZihzdHJ1Y3Qgc3RydWN0X2FsaWduXyMjbmFtZSwgeCksCVwKKyAgaWQsIE5VTEwJCQkJCVwKK30KKworLyogU2l6ZSBhbmQgYWxpZ25tZW50IGFyZSBmYWtlIGhlcmUuIFRoZXkgbXVzdCBub3QgYmUgMC4gKi8KK2NvbnN0IGZmaV90eXBlIGZmaV90eXBlX3ZvaWQgPSB7CisgIDEsIDEsIEZGSV9UWVBFX1ZPSUQsIE5VTEwKK307CisKK0ZGSV9UWVBFREVGKHVpbnQ4LCBVSU5UOCwgRkZJX1RZUEVfVUlOVDgpOworRkZJX1RZUEVERUYoc2ludDgsIFNJTlQ4LCBGRklfVFlQRV9TSU5UOCk7CitGRklfVFlQRURFRih1aW50MTYsIFVJTlQxNiwgRkZJX1RZUEVfVUlOVDE2KTsKK0ZGSV9UWVBFREVGKHNpbnQxNiwgU0lOVDE2LCBGRklfVFlQRV9TSU5UMTYpOworRkZJX1RZUEVERUYodWludDMyLCBVSU5UMzIsIEZGSV9UWVBFX1VJTlQzMik7CitGRklfVFlQRURFRihzaW50MzIsIFNJTlQzMiwgRkZJX1RZUEVfU0lOVDMyKTsKK0ZGSV9UWVBFREVGKHVpbnQ2NCwgVUlOVDY0LCBGRklfVFlQRV9VSU5UNjQpOworRkZJX1RZUEVERUYoc2ludDY0LCBTSU5UNjQsIEZGSV9UWVBFX1NJTlQ2NCk7CisKK0ZGSV9UWVBFREVGKHBvaW50ZXIsIHZvaWQqLCBGRklfVFlQRV9QT0lOVEVSKTsKKworRkZJX1RZUEVERUYoZmxvYXQsIGZsb2F0LCBGRklfVFlQRV9GTE9BVCk7CitGRklfVFlQRURFRihkb3VibGUsIGRvdWJsZSwgRkZJX1RZUEVfRE9VQkxFKTsKKworI2lmZGVmIF9fYWxwaGFfXworLyogRXZlbiBpZiB3ZSdyZSBub3QgY29uZmlndXJlZCB0byBkZWZhdWx0IHRvIDEyOC1iaXQgbG9uZyBkb3VibGUsIAorICAgbWFpbnRhaW4gYmluYXJ5IGNvbXBhdGliaWxpdHksIGFzIC1tbG9uZy1kb3VibGUtMTI4IGNhbiBiZSB1c2VkCisgICBhdCBhbnkgdGltZS4gICovCisvKiBWYWxpZGF0ZSB0aGUgaGFyZC1jb2RlZCBudW1iZXIgYmVsb3cuICAqLworIyBpZiBkZWZpbmVkKF9fTE9OR19ET1VCTEVfMTI4X18pICYmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gNAorIyAgZXJyb3IgRkZJX1RZUEVfTE9OR0RPVUJMRSBvdXQgb2YgZGF0ZQorIyBlbmRpZgorY29uc3QgZmZpX3R5cGUgZmZpX3R5cGVfbG9uZ2RvdWJsZSA9IHsgMTYsIDE2LCA0LCBOVUxMIH07CisjZWxpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorRkZJX1RZUEVERUYobG9uZ2RvdWJsZSwgbG9uZyBkb3VibGUsIEZGSV9UWVBFX0xPTkdET1VCTEUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luLlMKaW5kZXggYjBiOGNkZi4uOGYwZjA3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2Rhcndpbi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9kYXJ3aW4uUwpAQCAtMTUsMTUgKzE1LDE2IEBACiAgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAogICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCiAKLSAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KLSAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IKLQlBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAgIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICAgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi0gICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAqLwogCiAjaWZuZGVmIF9feDg2XzY0X18KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCmluZGV4IDYwZDdmNDcuLjgwNDk2NTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKQEAgLTMsNyArMyw3IEBACiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiAgUmFuaml0IE1hdGhldwogICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgIEJvIFRob3JzZW4KICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyICBSb2dlciBTYXlsZQotCSAgIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICAgIHg4NiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCkBAIC0yOCw3ICsyOCwxMSBAQAogICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2lmbmRlZiBfX3g4Nl82NF9fCisjaWYgIWRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfV0lONjQpCisKKyNpZmRlZiBfV0lONjQKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGZmaS5oPgogI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KQEAgLTQ3LDEwICs1MSwxNSBAQAogCiAgIGFyZ3AgPSBzdGFjazsKIAotICBpZiAoZWNpZi0+Y2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpCisgIGlmIChlY2lmLT5jaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVAorI2lmZGVmIFg4Nl9XSU42NAorICAgICAgJiYgKGVjaWYtPmNpZi0+cnR5cGUtPnNpemUgIT0gMSAmJiBlY2lmLT5jaWYtPnJ0eXBlLT5zaXplICE9IDIKKyAgICAgICAgICAmJiBlY2lmLT5jaWYtPnJ0eXBlLT5zaXplICE9IDQgJiYgZWNpZi0+Y2lmLT5ydHlwZS0+c2l6ZSAhPSA4KQorI2VuZGlmCisgICAgICApCiAgICAgewogICAgICAgKih2b2lkICoqKSBhcmdwID0gZWNpZi0+cnZhbHVlOwotICAgICAgYXJncCArPSA0OworICAgICAgYXJncCArPSBzaXplb2Yodm9pZCopOwogICAgIH0KIAogICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CkBAIC02Miw1MyArNzEsNzUgQEAKICAgICAgIHNpemVfdCB6OwogCiAgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgIGlmICgoc2l6ZW9mKGludCkgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKLQlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgc2l6ZW9mKGludCkpOworICAgICAgaWYgKChzaXplb2Yodm9pZCopIC0gMSkgJiAoc2l6ZV90KSBhcmdwKQorICAgICAgICBhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgc2l6ZW9mKHZvaWQqKSk7CiAKICAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKLSAgICAgIGlmICh6IDwgc2l6ZW9mKGludCkpCi0JewotCSAgeiA9IHNpemVvZihpbnQpOwotCSAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKLQkgICAgewotCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgICAgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UOCAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQ4ICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDE2ICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQxNiAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6Ci0JICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQzMiAqKSgqIHBfYXJndik7Ci0JICAgICAgYnJlYWs7Ci0KLQkgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6Ci0JICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UMzIgKikoKiBwX2FyZ3YpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDMyICopKCogcF9hcmd2KTsKLQkgICAgICBicmVhazsKLQotCSAgICBkZWZhdWx0OgotCSAgICAgIEZGSV9BU1NFUlQoMCk7Ci0JICAgIH0KLQl9CisjaWZkZWYgWDg2X1dJTjY0CisgICAgICBpZiAoeiA+IHNpemVvZihmZmlfYXJnKQorICAgICAgICAgIHx8ICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgICAgICAgJiYgKHogIT0gMSAmJiB6ICE9IDIgJiYgeiAhPSA0ICYmIHogIT0gOCkpCisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICAgICB8fCAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKKyNlbmRpZgorICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgIHogPSBzaXplb2YoZmZpX2FyZyk7CisgICAgICAgICAgKih2b2lkICoqKWFyZ3AgPSAqcF9hcmd2OworICAgICAgICB9CisgICAgICBlbHNlIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKKyAgICAgICAgeworICAgICAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKKyAgICAgICAgfQogICAgICAgZWxzZQotCXsKLQkgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKLQl9CisjZW5kaWYKKyAgICAgIGlmICh6IDwgc2l6ZW9mKGZmaV9hcmcpKQorICAgICAgICB7CisgICAgICAgICAgeiA9IHNpemVvZihmZmlfYXJnKTsKKyAgICAgICAgICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICAgICAgICAgICAgKihmZmlfc2FyZyAqKSBhcmdwID0gKGZmaV9zYXJnKSooU0lOVDggKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICAgICAgICAgICAgKihmZmlfYXJnICopIGFyZ3AgPSAoZmZpX2FyZykqKFVJTlQ4ICopKCogcF9hcmd2KTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgICAgICAgICAgICAqKGZmaV9zYXJnICopIGFyZ3AgPSAoZmZpX3NhcmcpKihTSU5UMTYgKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgICAgICAgICAgICooZmZpX2FyZyAqKSBhcmdwID0gKGZmaV9hcmcpKihVSU5UMTYgKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9TSU5UMzI6CisgICAgICAgICAgICAgICooZmZpX3NhcmcgKikgYXJncCA9IChmZmlfc2FyZykqKFNJTlQzMiAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICAgICAgICAgICAgKihmZmlfYXJnICopIGFyZ3AgPSAoZmZpX2FyZykqKFVJTlQzMiAqKSgqIHBfYXJndik7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgICAgICAgICAgKihmZmlfYXJnICopIGFyZ3AgPSAqKGZmaV9hcmcgKikoKiBwX2FyZ3YpOworICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgRkZJX0FTU0VSVCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgbWVtY3B5KGFyZ3AsICpwX2FyZ3YsIHopOworICAgICAgICB9CiAgICAgICBwX2FyZ3YrKzsKKyNpZmRlZiBYODZfV0lONjQKKyAgICAgIGFyZ3AgKz0gKHogKyBzaXplb2Yodm9pZCopIC0gMSkgJiB+KHNpemVvZih2b2lkKikgLSAxKTsKKyNlbHNlCiAgICAgICBhcmdwICs9IHo7CisjZW5kaWYKICAgICB9CiAgIAogICByZXR1cm47CkBAIC0xMTcsMzMgKzE0OCw0MyBAQAogLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLwogZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcChmZmlfY2lmICpjaWYpCiB7CisgIHVuc2lnbmVkIGludCBpOworICBmZmlfdHlwZSAqKnB0cjsKKwogICAvKiBTZXQgdGhlIHJldHVybiB0eXBlIGZsYWcgKi8KICAgc3dpdGNoIChjaWYtPnJ0eXBlLT50eXBlKQogICAgIHsKICAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6Ci0jaWZkZWYgWDg2Ci0gICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFg4NikgfHwgZGVmaW5lZChYODZfREFSV0lOKQorI2lmIGRlZmluZWQoWDg2KSB8fCBkZWZpbmVkIChYODZfV0lOMzIpIHx8IGRlZmluZWQoWDg2X0ZSRUVCU0QpIHx8IGRlZmluZWQoWDg2X0RBUldJTikgfHwgZGVmaW5lZChYODZfV0lONjQpCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgogI2VuZGlmCi0KKyNpZmRlZiBYODZfV0lONjQKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisjaWZuZGVmIFg4Nl9XSU42NAorI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2VuZGlmCisjZW5kaWYKICAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpIGNpZi0+cnR5cGUtPnR5cGU7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorI2lmZGVmIFg4Nl9XSU42NAorICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKyNlbmRpZgogICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQ2NDsKICAgICAgIGJyZWFrOwogCi0jaWZuZGVmIFg4NgogICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorI2lmbmRlZiBYODYKICAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IDEpCiAgICAgICAgIHsKICAgICAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCOyAvKiBzYW1lIGFzIGNoYXIgc2l6ZSAqLwpAQCAtMTU0LDI0ICsxOTUsNDkgQEAKICAgICAgICAgfQogICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSA0KQogICAgICAgICB7CisjaWZkZWYgWDg2X1dJTjY0CisgICAgICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QjsKKyNlbHNlCiAgICAgICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX0lOVDsgLyogc2FtZSBhcyBpbnQgdHlwZSAqLworI2VuZGlmCiAgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gOCkKICAgICAgICAgewogICAgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7IC8qIHNhbWUgYXMgaW50NjQgdHlwZSAqLwogICAgICAgICB9CiAgICAgICBlbHNlCisjZW5kaWYKICAgICAgICAgewogICAgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TVFJVQ1Q7CisgICAgICAgICAgLy8gYWxsb2NhdGUgc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBwb2ludGVyCisgICAgICAgICAgY2lmLT5ieXRlcyArPSBBTElHTihzaXplb2Yodm9pZCopLCBGRklfU0laRU9GX0FSRyk7CiAgICAgICAgIH0KICAgICAgIGJyZWFrOwotI2VuZGlmCiAKICAgICBkZWZhdWx0OgorI2lmZGVmIFg4Nl9XSU42NAorICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQ2NDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfSU5UOgorICAgICAgY2lmLT5mbGFncyA9IEZGSV9UWVBFX1NJTlQzMjsKKyNlbHNlCiAgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOworI2VuZGlmCiAgICAgICBicmVhazsKICAgICB9CiAKKyAgZm9yIChwdHIgPSBjaWYtPmFyZ190eXBlcywgaSA9IGNpZi0+bmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrKQorICAgIHsKKyAgICAgIGlmICgoKCpwdHIpLT5hbGlnbm1lbnQgLSAxKSAmIGNpZi0+Ynl0ZXMpCisgICAgICAgIGNpZi0+Ynl0ZXMgPSBBTElHTihjaWYtPmJ5dGVzLCAoKnB0ciktPmFsaWdubWVudCk7CisgICAgICBjaWYtPmJ5dGVzICs9IEFMSUdOKCgqcHRyKS0+c2l6ZSwgRkZJX1NJWkVPRl9BUkcpOworICAgIH0KKworI2lmZGVmIFg4Nl9XSU42NAorICAvLyBlbnN1cmUgc3BhY2UgZm9yIHN0b3JpbmcgZm91ciByZWdpc3RlcnMKKyAgY2lmLT5ieXRlcyArPSA0ICogc2l6ZW9mKGZmaV9hcmcpOworI2VuZGlmCisKICNpZmRlZiBYODZfREFSV0lOCiAgIGNpZi0+Ynl0ZXMgPSAoY2lmLT5ieXRlcyArIDE1KSAmIH4weEY7CiAjZW5kaWYKQEAgLTE3OSwxNCArMjQ1LDE4IEBACiAgIHJldHVybiBGRklfT0s7CiB9CiAKKyNpZmRlZiBYODZfV0lONjQKK2V4dGVybiBpbnQKK2ZmaV9jYWxsX3dpbjY0KHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKKyAgICAgICAgICAgICAgIHVuc2lnbmVkLCB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7CisjZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKK2V4dGVybiB2b2lkCitmZmlfY2FsbF93aW4zMih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosCisgICAgICAgICAgICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOworI2Vsc2UKIGV4dGVybiB2b2lkIGZmaV9jYWxsX1NZU1Yodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksIGV4dGVuZGVkX2NpZiAqLAotCQkJICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOwotCi0jaWZkZWYgWDg2X1dJTjMyCi1leHRlcm4gdm9pZCBmZmlfY2FsbF9TVERDQUxMKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwKLQkJCSAgdW5zaWduZWQsIHVuc2lnbmVkLCB1bnNpZ25lZCAqLCB2b2lkICgqZm4pKHZvaWQpKTsKLQotI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosIHZvaWQgKCpmbikodm9pZCkpOworI2VuZGlmCiAKIHZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCiB7CkBAIC0xOTUsMzAgKzI2NSw2NiBAQAogICBlY2lmLmNpZiA9IGNpZjsKICAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CiAgIAotICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuCSovCi0gIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lCQkgICAgICAgICovCisgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gKi8KKyAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUgICAgICAgICAgICAgICAgICAgICAqLwogCi0gIGlmICgocnZhbHVlID09IE5VTEwpICYmIAotICAgICAgKGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKSkKKyNpZmRlZiBYODZfV0lONjQKKyAgaWYgKHJ2YWx1ZSA9PSBOVUxMCisgICAgICAmJiBjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSAxICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gMgorICAgICAgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSA0ICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gOCkKKyAgICB7CisgICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYSgoY2lmLT5ydHlwZS0+c2l6ZSArIDB4RikgJiB+MHhGKTsKKyAgICB9CisjZWxzZQorICBpZiAocnZhbHVlID09IE5VTEwKKyAgICAgICYmIGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUKQogICAgIHsKICAgICAgIGVjaWYucnZhbHVlID0gYWxsb2NhKGNpZi0+cnR5cGUtPnNpemUpOwogICAgIH0KKyNlbmRpZgogICBlbHNlCiAgICAgZWNpZi5ydmFsdWUgPSBydmFsdWU7CiAgICAgCiAgIAogICBzd2l0Y2ggKGNpZi0+YWJpKSAKICAgICB7CisjaWZkZWYgWDg2X1dJTjY0CisgICAgY2FzZSBGRklfV0lONjQ6CisgICAgICB7CisgICAgICAgIC8vIE1ha2UgY29waWVzIG9mIGFsbCBzdHJ1Y3QgYXJndW1lbnRzCisgICAgICAgIC8vIE5PVEU6IG5vdCBzdXJlIGlmIHJlc3BvbnNpYmlsaXR5IHNob3VsZCBiZSBoZXJlIG9yIGluIGNhbGxlcgorICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICAgICAgZm9yIChpPTA7IGkgPCBjaWYtPm5hcmdzO2krKykgeworICAgICAgICAgIHNpemVfdCBzaXplID0gY2lmLT5hcmdfdHlwZXNbaV0tPnNpemU7CisgICAgICAgICAgaWYgKChjaWYtPmFyZ190eXBlc1tpXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgICAgICAgICYmIChzaXplICE9IDEgJiYgc2l6ZSAhPSAyICYmIHNpemUgIT0gNCAmJiBzaXplICE9IDgpKQorI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisgICAgICAgICAgICAgIHx8IGNpZi0+YXJnX3R5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX0xPTkdET1VCTEUKKyNlbmRpZgorICAgICAgICAgICAgICApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHZvaWQgKmxvY2FsID0gYWxsb2NhKHNpemUpOworICAgICAgICAgICAgICBtZW1jcHkobG9jYWwsIGF2YWx1ZVtpXSwgc2l6ZSk7CisgICAgICAgICAgICAgIGF2YWx1ZVtpXSA9IGxvY2FsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZmaV9jYWxsX3dpbjY0KGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgfQorICAgICAgYnJlYWs7CisjZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKKyAgICBjYXNlIEZGSV9TWVNWOgorICAgIGNhc2UgRkZJX1NURENBTEw6CisgICAgICBmZmlfY2FsbF93aW4zMihmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKyNlbHNlCiAgICAgY2FzZSBGRklfU1lTVjoKICAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLAotCQkgICAgZm4pOworICAgICAgICAgICAgICAgICAgICBmbik7CiAgICAgICBicmVhazsKLSNpZmRlZiBYODZfV0lOMzIKLSAgICBjYXNlIEZGSV9TVERDQUxMOgotICAgICAgZmZpX2NhbGxfU1REQ0FMTChmZmlfcHJlcF9hcmdzLCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKLQkJICAgICAgIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICBicmVhazsKLSNlbmRpZiAvKiBYODZfV0lOMzIgKi8KKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUKDApOwogICAgICAgYnJlYWs7CkBAIC0yMjgsOCArMzM0LDEwIEBACiAKIC8qKiBwcml2YXRlIG1lbWJlcnMgKiovCiAKKy8qIFRoZSBmb2xsb3dpbmcgX19hdHRyaWJ1dGVfXygocmVncGFybSgxKSkpIGRlY29yYXRpb25zIHdpbGwgaGF2ZSBubyBlZmZlY3QKKyAgIG9uIE1TVkMgLSBzdGFuZGFyZCBjZGVjbCBjb252ZW50aW9uIGFwcGxpZXMuICovCiBzdGF0aWMgdm9pZCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YgKGNoYXIgKnN0YWNrLCB2b2lkICoqcmV0LAotCQkJCQkgdm9pZCoqIGFyZ3MsIGZmaV9jaWYqIGNpZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiBhcmdzLCBmZmlfY2lmKiBjaWYpOwogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX1NZU1YgKGZmaV9jbG9zdXJlICopCiAgICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSk7CiB1bnNpZ25lZCBpbnQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9TWVNWX2lubmVyIChmZmlfY2xvc3VyZSAqLCB2b2lkICoqLCB2b2lkICopCkBAIC0yNDAsMTQgKzM0OCw0NCBAQAogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX1NURENBTEwgKGZmaV9jbG9zdXJlICopCiAgICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSk7CiAjZW5kaWYKKyNpZmRlZiBYODZfV0lONjQKK3ZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV93aW42NCAoZmZpX2Nsb3N1cmUgKik7CisjZW5kaWYKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBqdW1wZWQgdG8gYnkgdGhlIHRyYW1wb2xpbmUgKi8KIAotdW5zaWduZWQgaW50IEZGSV9ISURERU4KLWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgKGNsb3N1cmUsIHJlc3BwLCBhcmdzKQotICAgICBmZmlfY2xvc3VyZSAqY2xvc3VyZTsKLSAgICAgdm9pZCAqKnJlc3BwOwotICAgICB2b2lkICphcmdzOworI2lmZGVmIFg4Nl9XSU42NAordm9pZCAqIEZGSV9ISURERU4KK2ZmaV9jbG9zdXJlX3dpbjY0X2lubmVyIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqYXJncykgeworICBmZmlfY2lmICAgICAgICpjaWY7CisgIHZvaWQgICAgICAgICAqKmFyZ19hcmVhOworICB2b2lkICAgICAgICAgICpyZXN1bHQ7CisgIHZvaWQgICAgICAgICAgKnJlc3AgPSAmcmVzdWx0OworCisgIGNpZiAgICAgICAgID0gY2xvc3VyZS0+Y2lmOworICBhcmdfYXJlYSAgICA9ICh2b2lkKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCopKTsgIAorCisgIC8qIHRoaXMgY2FsbCB3aWxsIGluaXRpYWxpemUgQVJHX0FSRUEsIHN1Y2ggdGhhdCBlYWNoCisgICAqIGVsZW1lbnQgaW4gdGhhdCBhcnJheSBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgCisgICAqIHZhbHVlIG9uIHRoZSBzdGFjazsgYW5kIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zCisgICAqIGEgc3RydWN0dXJlLCBpdCB3aWxsIGNoYW5nZSBSRVNQIHRvIHBvaW50IHRvIHRoZQorICAgKiBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICAqLworCisgIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihhcmdzLCAmcmVzcCwgYXJnX2FyZWEsIGNpZik7CisgIAorICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCByZXNwLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICAvKiBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGluIHJheC4gIFRoaXMgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yCisgICAgIHJlc3VsdCB0eXBlcyBleGNlcHQgZm9yIGZsb2F0czsgd2UgaGF2ZSB0byAnbW92IHhtbTAsIHJheCcgaW4gdGhlCisgICAgIGNhbGxlciB0byBjb3JyZWN0IHRoaXMuCisgICAgIFRPRE86IHN0cnVjdHVyZSBzaXplcyBvZiAzIDUgNiA3IGFyZSByZXR1cm5lZCBieSByZWZlcmVuY2UsIHRvbyEhIQorICAqLworICByZXR1cm4gY2lmLT5ydHlwZS0+c2l6ZSA+IHNpemVvZih2b2lkICopID8gcmVzcCA6ICoodm9pZCAqKilyZXNwOworfQorCisjZWxzZQordW5zaWduZWQgaW50IEZGSV9ISURERU4gX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKQorZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIHZvaWQgKipyZXNwcCwgdm9pZCAqYXJncykKIHsKICAgLyogb3VyIHZhcmlvdXMgdGhpbmdzLi4uICAqLwogICBmZmlfY2lmICAgICAgICpjaWY7CkBAIC0yNTksNyArMzk3LDcgQEAKICAgLyogdGhpcyBjYWxsIHdpbGwgaW5pdGlhbGl6ZSBBUkdfQVJFQSwgc3VjaCB0aGF0IGVhY2gKICAgICogZWxlbWVudCBpbiB0aGF0IGFycmF5IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyAKICAgICogdmFsdWUgb24gdGhlIHN0YWNrOyBhbmQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMKLSAgICogYSBzdHJ1Y3R1cmUsIGl0IHdpbGwgcmUtc2V0IFJFU1AgdG8gcG9pbnQgdG8gdGhlCisgICAqIGEgc3RydWN0dXJlLCBpdCB3aWxsIGNoYW5nZSBSRVNQIHRvIHBvaW50IHRvIHRoZQogICAgKiBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICAqLwogCiAgIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihhcmdzLCByZXNwcCwgYXJnX2FyZWEsIGNpZik7CkBAIC0yNjgsMTAgKzQwNiwxMSBAQAogCiAgIHJldHVybiBjaWYtPmZsYWdzOwogfQorI2VuZGlmIC8qICFYODZfV0lONjQgKi8KIAogc3RhdGljIHZvaWQKIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVihjaGFyICpzdGFjaywgdm9pZCAqKnJ2YWx1ZSwgdm9pZCAqKmF2YWx1ZSwKLQkJCSAgICBmZmlfY2lmICpjaWYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmZpX2NpZiAqY2lmKQogewogICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKQEAgLTI4MCwxMCArNDE5LDIwIEBACiAKICAgYXJncCA9IHN0YWNrOwogCisjaWZkZWYgWDg2X1dJTjY0CisgIGlmIChjaWYtPnJ0eXBlLT5zaXplID4gc2l6ZW9mKGZmaV9hcmcpCisgICAgICB8fCAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSAhPSAxICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gMgorICAgICAgICAgICAgICAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDQgJiYgY2lmLT5ydHlwZS0+c2l6ZSAhPSA4KSkpIHsKKyAgICAqcnZhbHVlID0gKih2b2lkICoqKSBhcmdwOworICAgIGFyZ3AgKz0gc2l6ZW9mKHZvaWQgKik7CisgIH0KKyNlbHNlCiAgIGlmICggY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QgKSB7CiAgICAgKnJ2YWx1ZSA9ICoodm9pZCAqKikgYXJncDsKLSAgICBhcmdwICs9IDQ7CisgICAgYXJncCArPSBzaXplb2Yodm9pZCAqKTsKICAgfQorI2VuZGlmCiAKICAgcF9hcmd2ID0gYXZhbHVlOwogCkBAIC0yOTIsMzggKzQ0MSw3MyBAQAogICAgICAgc2l6ZV90IHo7CiAKICAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLwotICAgICAgaWYgKChzaXplb2YoaW50KSAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKSB7Ci0JYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIHNpemVvZihpbnQpKTsKKyAgICAgIGlmICgoc2l6ZW9mKHZvaWQqKSAtIDEpICYgKHNpemVfdCkgYXJncCkgeworICAgICAgICBhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgc2l6ZW9mKHZvaWQqKSk7CiAgICAgICB9CiAKLSAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKLQotICAgICAgLyogYmVjYXVzZSB3ZSdyZSBsaXR0bGUgZW5kaWFuLCB0aGlzIGlzIHdoYXQgaXQgdHVybnMgaW50by4gICAqLwotCi0gICAgICAqcF9hcmd2ID0gKHZvaWQqKSBhcmdwOwotCisjaWZkZWYgWDg2X1dJTjY0CisgICAgICBpZiAoKCpwX2FyZyktPnNpemUgPiBzaXplb2YoZmZpX2FyZykKKyAgICAgICAgICB8fCAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAgICAgICAgICYmICgoKnBfYXJnKS0+c2l6ZSAhPSAxICYmICgqcF9hcmcpLT5zaXplICE9IDIKKyAgICAgICAgICAgICAgICAgICYmICgqcF9hcmcpLT5zaXplICE9IDQgJiYgKCpwX2FyZyktPnNpemUgIT0gOCkpKQorICAgICAgICB7CisgICAgICAgICAgeiA9IHNpemVvZih2b2lkICopOworICAgICAgICAgICpwX2FyZ3YgPSAqKHZvaWQgKiopYXJncDsKKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICAgICAgCisgICAgICAgICAgLyogYmVjYXVzZSB3ZSdyZSBsaXR0bGUgZW5kaWFuLCB0aGlzIGlzIHdoYXQgaXQgdHVybnMgaW50by4gICAqLworICAgICAgICAgIAorICAgICAgICAgICpwX2FyZ3YgPSAodm9pZCopIGFyZ3A7CisgICAgICAgIH0KKyAgICAgICAgICAKICAgICAgIHBfYXJndisrOworI2lmZGVmIFg4Nl9XSU42NAorICAgICAgYXJncCArPSAoeiArIHNpemVvZih2b2lkKikgLSAxKSAmIH4oc2l6ZW9mKHZvaWQqKSAtIDEpOworI2Vsc2UKICAgICAgIGFyZ3AgKz0gejsKKyNlbmRpZgogICAgIH0KICAgCiAgIHJldHVybjsKIH0KIAorI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1dJTjY0KFRSQU1QLEZVTixDVFgsTUFTSykgXAoreyB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKShUUkFNUCk7IFwKKyAgIHZvaWQqICBfX2Z1biA9ICh2b2lkKikoRlVOKTsgXAorICAgdm9pZCogIF9fY3R4ID0gKHZvaWQqKShDVFgpOyBcCisgICAqKHVuc2lnbmVkIGNoYXIqKSAmX190cmFtcFswXSA9IDB4NDE7IFwKKyAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzFdID0gMHhiYjsgXAorICAgKih1bnNpZ25lZCBpbnQqKSAmX190cmFtcFsyXSA9IE1BU0s7IC8qIG1vdiAkbWFzaywgJXIxMSAqLyBcCisgICAqKHVuc2lnbmVkIGNoYXIqKSAmX190cmFtcFs2XSA9IDB4NDg7IFwKKyAgICoodW5zaWduZWQgY2hhciopICZfX3RyYW1wWzddID0gMHhiODsgXAorICAgKih2b2lkKiopICZfX3RyYW1wWzhdID0gX19jdHg7IC8qIG1vdiBfX2N0eCwgJXJheCAqLyBcCisgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzE2XSA9IDB4NDk7IFwKKyAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMTddID0gMHhiYTsgXAorICAgKih2b2lkKiopICZfX3RyYW1wWzE4XSA9IF9fZnVuOyAvKiBtb3YgX19mdW4sICVyMTAgKi8gXAorICAgKih1bnNpZ25lZCBjaGFyICopICAmX190cmFtcFsyNl0gPSAweDQxOyBcCisgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzI3XSA9IDB4ZmY7IFwKKyAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbMjhdID0gMHhlMjsgLyogam1wICVyMTAgKi8gXAorIH0KKwogLyogSG93IHRvIG1ha2UgYSB0cmFtcG9saW5lLiAgRGVyaXZlZCBmcm9tIGdjYy9jb25maWcvaTM4Ni9pMzg2LmMuICovCiAKICNkZWZpbmUgRkZJX0lOSVRfVFJBTVBPTElORShUUkFNUCxGVU4sQ1RYKSBcCi0oeyB1bnNpZ25lZCBjaGFyICpfX3RyYW1wID0gKHVuc2lnbmVkIGNoYXIqKShUUkFNUCk7IFwKK3sgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoRlVOKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKENUWCk7IFwKLSAgIHVuc2lnbmVkIGludCAgX19kaXMgPSBfX2Z1biAtIChfX2N0eCArIDEwKTsJXAorICAgdW5zaWduZWQgaW50ICBfX2RpcyA9IF9fZnVuIC0gKF9fY3R4ICsgMTApOyAgXAogICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbMF0gPSAweGI4OyBcCiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFsxXSA9IF9fY3R4OyAvKiBtb3ZsIF9fY3R4LCAlZWF4ICovIFwKICAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbNV0gPSAweGU5OyBcCiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFs2XSA9IF9fZGlzOyAvKiBqbXAgX19mdW4gICovIFwKLSB9KQorIH0KIAogI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwoVFJBTVAsRlVOLENUWCxTSVpFKSAgXAotKHsgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCit7IHVuc2lnbmVkIGNoYXIgKl9fdHJhbXAgPSAodW5zaWduZWQgY2hhciopKFRSQU1QKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2Z1biA9ICh1bnNpZ25lZCBpbnQpKEZVTik7IFwKICAgIHVuc2lnbmVkIGludCAgX19jdHggPSAodW5zaWduZWQgaW50KShDVFgpOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZGlzID0gX19mdW4gLSAoX19jdHggKyAxMCk7IFwKQEAgLTMzNCwxNyArNTE4LDI5IEBACiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFs2XSA9IF9fZGlzOyAvKiBjYWxsIF9fZnVuICAqLyBcCiAgICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzEwXSA9IDB4YzI7IFwKICAgICoodW5zaWduZWQgc2hvcnQqKSAgJl9fdHJhbXBbMTFdID0gX19zaXplOyAvKiByZXQgX19zaXplICAqLyBcCi0gfSkKKyB9CiAKIC8qIHRoZSBjaWYgbXVzdCBhbHJlYWR5IGJlIHByZXAnZWQgKi8KIAogZmZpX3N0YXR1cwogZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLAotCQkgICAgICBmZmlfY2lmKiBjaWYsCi0JCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCi0JCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwKLQkJICAgICAgdm9pZCAqY29kZWxvYykKKyAgICAgICAgICAgICAgICAgICAgICBmZmlfY2lmKiBjaWYsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWxvYykKIHsKKyNpZmRlZiBYODZfV0lONjQKKyNkZWZpbmUgSVNGTE9BVChJRFgpIChjaWYtPmFyZ190eXBlc1tJRFhdLT50eXBlID09IEZGSV9UWVBFX0ZMT0FUIHx8IGNpZi0+YXJnX3R5cGVzW0lEWF0tPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorI2RlZmluZSBGTEFHKElEWCkgKGNpZi0+bmFyZ3M+KElEWCkmJklTRkxPQVQoSURYKT8oMTw8KElEWCkpOjApCisgIGlmIChjaWYtPmFiaSA9PSBGRklfV0lONjQpIAorICAgIHsKKyAgICAgIGludCBtYXNrID0gRkxBRygwKXxGTEFHKDEpfEZMQUcoMil8RkxBRygzKTsKKyAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfV0lONjQgKCZjbG9zdXJlLT50cmFtcFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZmlfY2xvc3VyZV93aW42NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVsb2MsIG1hc2spOworICAgICAgLyogbWFrZSBzdXJlIHdlIGNhbiBleGVjdXRlIGhlcmUgKi8KKyAgICB9CisjZWxzZQogICBpZiAoY2lmLT5hYmkgPT0gRkZJX1NZU1YpCiAgICAgewogICAgICAgRkZJX0lOSVRfVFJBTVBPTElORSAoJmNsb3N1cmUtPnRyYW1wWzBdLApAQCAtMzU4LDcgKzU1NCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmZmlfY2xvc3VyZV9TVERDQUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopY29kZWxvYywgY2lmLT5ieXRlcyk7CiAgICAgfQotI2VuZGlmCisjZW5kaWYgLyogWDg2X1dJTjMyICovCisjZW5kaWYgLyogIVg4Nl9XSU42NCAqLwogICBlbHNlCiAgICAgewogICAgICAgcmV0dXJuIEZGSV9CQURfQUJJOwpAQCAtMzc3LDEwICs1NzQsMTAgQEAKIAogZmZpX3N0YXR1cwogZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqIGNsb3N1cmUsCi0JCQkgIGZmaV9jaWYqIGNpZiwKLQkJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9pZCopLAotCQkJICB2b2lkICp1c2VyX2RhdGEsCi0JCQkgIHZvaWQgKmNvZGVsb2MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZmaV9jaWYqIGNpZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvZGVsb2MpCiB7CiAgIGludCBpOwogCkBAIC0zODksOSArNTg2LDkgQEAKICAgfQogCiAgIC8qIHdlIGN1cnJlbnRseSBkb24ndCBzdXBwb3J0IGNlcnRhaW4ga2luZHMgb2YgYXJndW1lbnRzIGZvciByYXcKLSAgLy8gY2xvc3VyZXMuICBUaGlzIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHNlcGFyYXRlIGFzc2VtYmx5IGxhbmd1YWdlCi0gIC8vIHJvdXRpbmUsIHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgYXJndW1lbnQgcHJvY2Vzc2luZywgc29tZXRoaW5nIHdlCi0gIC8vIGRvbid0IGRvIG5vdyBmb3IgcGVyZm9ybWFuY2UuICovCisgICAgIGNsb3N1cmVzLiAgVGhpcyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYSBzZXBhcmF0ZSBhc3NlbWJseQorICAgICBsYW5ndWFnZSByb3V0aW5lLCBzaW5jZSBpdCB3b3VsZCByZXF1aXJlIGFyZ3VtZW50IHByb2Nlc3NpbmcsCisgICAgIHNvbWV0aGluZyB3ZSBkb24ndCBkbyBub3cgZm9yIHBlcmZvcm1hbmNlLiAgKi8KIAogICBmb3IgKGkgPSBjaWYtPm5hcmdzLTE7IGkgPj0gMDsgaS0tKQogICAgIHsKQEAgLTQwMSw3ICs1OTgsNyBAQAogICAKIAogICBGRklfSU5JVF9UUkFNUE9MSU5FICgmY2xvc3VyZS0+dHJhbXBbMF0sICZmZmlfY2xvc3VyZV9yYXdfU1lTViwKLQkJICAgICAgIGNvZGVsb2MpOworICAgICAgICAgICAgICAgICAgICAgICBjb2RlbG9jKTsKICAgICAKICAgY2xvc3VyZS0+Y2lmICA9IGNpZjsKICAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwpAQCAtNDIxLDE2ICs2MTgsNiBAQAogICogbGliZmZpLTEuMjAsIHRoaXMgaXMgbm90IHRoZSBjYXNlLikKICAqLwogCi1leHRlcm4gdm9pZAotZmZpX2NhbGxfU1lTVih2b2lkICgqKShjaGFyICosIGV4dGVuZGVkX2NpZiAqKSwgZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCAKLQkgICAgICB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7Ci0KLSNpZmRlZiBYODZfV0lOMzIKLWV4dGVybiB2b2lkCi1mZmlfY2FsbF9TVERDQUxMKHZvaWQgKCopKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLCBleHRlbmRlZF9jaWYgKiwgdW5zaWduZWQsCi0JCSB1bnNpZ25lZCwgdW5zaWduZWQgKiwgdm9pZCAoKmZuKSh2b2lkKSk7Ci0jZW5kaWYgLyogWDg2X1dJTjMyICovCi0KIHZvaWQKIGZmaV9yYXdfY2FsbChmZmlfY2lmICpjaWYsIHZvaWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwgZmZpX3JhdyAqZmFrZV9hdmFsdWUpCiB7CkBAIC00NDAsOCArNjI3LDggQEAKICAgZWNpZi5jaWYgPSBjaWY7CiAgIGVjaWYuYXZhbHVlID0gYXZhbHVlOwogICAKLSAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybgkqLwotICAvKiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZQkJICAgICAgICAqLworICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuICovCisgIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lICAgICAgICAgICAgICAgICAgICAgKi8KIAogICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAKICAgICAgIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkpCkBAIC00NTQsMTYgKzY0MSwxOCBAQAogICAKICAgc3dpdGNoIChjaWYtPmFiaSkgCiAgICAgeworI2lmZGVmIFg4Nl9XSU4zMgorICAgIGNhc2UgRkZJX1NZU1Y6CisgICAgY2FzZSBGRklfU1REQ0FMTDoKKyAgICAgIGZmaV9jYWxsX3dpbjMyKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKKyAgICAgICAgICAgICAgICAgICAgIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKyNlbHNlCiAgICAgY2FzZSBGRklfU1lTVjoKICAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAotCQkgICAgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgICAgICAgICAgICAgICAgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIGJyZWFrOwotI2lmZGVmIFg4Nl9XSU4zMgotICAgIGNhc2UgRkZJX1NURENBTEw6Ci0gICAgICBmZmlfY2FsbF9TVERDQUxMKGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKLQkJICAgICAgIGVjaWYucnZhbHVlLCBmbik7Ci0gICAgICBicmVhazsKLSNlbmRpZiAvKiBYODZfV0lOMzIgKi8KKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICBGRklfQVNTRVJUKDApOwogICAgICAgYnJlYWs7CkBAIC00NzIsNCArNjYxLDUgQEAKIAogI2VuZGlmCiAKLSNlbmRpZiAvKiBfX3g4Nl82NF9fICAqLworI2VuZGlmIC8qICFfX3g4Nl82NF9fICB8fCBYODZfV0lONjQgKi8KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaTY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwppbmRleCBmYTk5MjU1Li4wN2EyNjI3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmkuYyAtIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyAgQm8gVGhvcnNlbiA8Ym9Ac3VzZS5kZT4KLSAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA4ICBSZWQgSGF0LCBJbmMuCisgICBmZmk2NC5jIC0gQ29weXJpZ2h0IChjKSAyMDAyLCAyMDA3ICBCbyBUaG9yc2VuIDxib0BzdXNlLmRlPgorICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCAgUmVkIEhhdCwgSW5jLgogICAgCiAgICB4ODYtNjQgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgCiAKQEAgLTUwLDkgKzUwLDEwIEBACiAgICBnY2MvY29uZmlnL2kzODYvaTM4Ni5jLiBEbyAqbm90KiBjaGFuZ2Ugb25lIHdpdGhvdXQgdGhlIG90aGVyLiAgKi8KIAogLyogUmVnaXN0ZXIgY2xhc3MgdXNlZCBmb3IgcGFzc2luZyBnaXZlbiA2NGJpdCBwYXJ0IG9mIHRoZSBhcmd1bWVudC4KLSAgIFRoZXNlIHJlcHJlc2VudCBjbGFzc2VzIGFzIGRvY3VtZW50ZWQgYnkgdGhlIFBTIEFCSSwgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICBvZiBTU0VTRiwgU1NFREYgY2xhc3NlcywgdGhhdCBhcmUgYmFzaWNhbGx5IFNTRSBjbGFzcywganVzdCBnY2Mgd2lsbAotICAgdXNlIFNGIG9yIERGbW9kZSBtb3ZlIGluc3RlYWQgb2YgREltb2RlIHRvIGF2b2lkIHJlZm9ybWF0dGluZyBwZW5hbHRpZXMuCisgICBUaGVzZSByZXByZXNlbnQgY2xhc3NlcyBhcyBkb2N1bWVudGVkIGJ5IHRoZSBQUyBBQkksIHdpdGggdGhlCisgICBleGNlcHRpb24gb2YgU1NFU0YsIFNTRURGIGNsYXNzZXMsIHRoYXQgYXJlIGJhc2ljYWxseSBTU0UgY2xhc3MsCisgICBqdXN0IGdjYyB3aWxsIHVzZSBTRiBvciBERm1vZGUgbW92ZSBpbnN0ZWFkIG9mIERJbW9kZSB0byBhdm9pZAorICAgcmVmb3JtYXR0aW5nIHBlbmFsdGllcy4KIAogICAgU2ltaWxhcnkgd2UgcGxheSBnYW1lcyB3aXRoIElOVEVHRVJTSV9DTEFTUyB0byB1c2UgY2hlYXBlciBTSW1vZGUgbW92ZXMKICAgIHdoZW5ldmVyIHBvc3NpYmxlICh1cHBlciBoYWxmIGRvZXMgY29udGFpbiBwYWRkaW5nKS4gICovCkBAIC0xNDUsMTMgKzE0NiwzNSBAQAogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLSAgICAgIGlmIChieXRlX29mZnNldCArIHR5cGUtPnNpemUgPD0gNCkKLQljbGFzc2VzWzBdID0gWDg2XzY0X0lOVEVHRVJTSV9DTEFTUzsKLSAgICAgIGVsc2UKLQljbGFzc2VzWzBdID0gWDg2XzY0X0lOVEVHRVJfQ0xBU1M7Ci0gICAgICByZXR1cm4gMTsKKyAgICAgIHsKKwlpbnQgc2l6ZSA9IGJ5dGVfb2Zmc2V0ICsgdHlwZS0+c2l6ZTsKKworCWlmIChzaXplIDw9IDQpCisJICB7CisJICAgIGNsYXNzZXNbMF0gPSBYODZfNjRfSU5URUdFUlNJX0NMQVNTOworCSAgICByZXR1cm4gMTsKKwkgIH0KKwllbHNlIGlmIChzaXplIDw9IDgpCisJICB7CisJICAgIGNsYXNzZXNbMF0gPSBYODZfNjRfSU5URUdFUl9DTEFTUzsKKwkgICAgcmV0dXJuIDE7CisJICB9CisJZWxzZSBpZiAoc2l6ZSA8PSAxMikKKwkgIHsKKwkgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9JTlRFR0VSX0NMQVNTOworCSAgICBjbGFzc2VzWzFdID0gWDg2XzY0X0lOVEVHRVJTSV9DTEFTUzsKKwkgICAgcmV0dXJuIDI7CisJICB9CisJZWxzZSBpZiAoc2l6ZSA8PSAxNikKKwkgIHsKKwkgICAgY2xhc3Nlc1swXSA9IGNsYXNzZXNbMV0gPSBYODZfNjRfSU5URUdFUlNJX0NMQVNTOworCSAgICByZXR1cm4gMjsKKwkgIH0KKwllbHNlCisJICBGRklfQVNTRVJUICgwKTsKKyAgICAgIH0KICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgotICAgICAgaWYgKGJ5dGVfb2Zmc2V0ID09IDApCisgICAgICBpZiAoIShieXRlX29mZnNldCAlIDgpKQogCWNsYXNzZXNbMF0gPSBYODZfNjRfU1NFU0ZfQ0xBU1M7CiAgICAgICBlbHNlCiAJY2xhc3Nlc1swXSA9IFg4Nl82NF9TU0VfQ0xBU1M7CkBAIC0xNzEsMTMgKzE5NCwyMSBAQAogCWludCBpOwogCWVudW0geDg2XzY0X3JlZ19jbGFzcyBzdWJjbGFzc2VzW01BWF9DTEFTU0VTXTsKIAotCS8qIElmIHRoZSBzdHJ1Y3QgaXMgbGFyZ2VyIHRoYW4gMTYgYnl0ZXMsIHBhc3MgaXQgb24gdGhlIHN0YWNrLiAgKi8KLQlpZiAodHlwZS0+c2l6ZSA+IDE2KQorCS8qIElmIHRoZSBzdHJ1Y3QgaXMgbGFyZ2VyIHRoYW4gMzIgYnl0ZXMsIHBhc3MgaXQgb24gdGhlIHN0YWNrLiAgKi8KKwlpZiAodHlwZS0+c2l6ZSA+IDMyKQogCSAgcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgd29yZHM7IGkrKykKIAkgIGNsYXNzZXNbaV0gPSBYODZfNjRfTk9fQ0xBU1M7CiAKKwkvKiBaZXJvIHNpemVkIGFycmF5cyBvciBzdHJ1Y3R1cmVzIGFyZSBOT19DTEFTUy4gIFdlIHJldHVybiAwIHRvCisJICAgc2lnbmFsaXplIG1lbW9yeSBjbGFzcywgc28gaGFuZGxlIGl0IGFzIHNwZWNpYWwgY2FzZS4gICovCisJaWYgKCF3b3JkcykKKwkgIHsKKwkgICAgY2xhc3Nlc1swXSA9IFg4Nl82NF9OT19DTEFTUzsKKwkgICAgcmV0dXJuIDE7CisJICB9CisKIAkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJZm9yIChwdHIgPSB0eXBlLT5lbGVtZW50czsgKnB0ciAhPSBOVUxMOyBwdHIrKykKIAkgIHsKQEAgLTE5OCw2ICsyMjksMjAgQEAKIAkgICAgYnl0ZV9vZmZzZXQgKz0gKCpwdHIpLT5zaXplOwogCSAgfQogCisJaWYgKHdvcmRzID4gMikKKwkgIHsKKwkgICAgLyogV2hlbiBzaXplID4gMTYgYnl0ZXMsIGlmIHRoZSBmaXJzdCBvbmUgaXNuJ3QKKwkgICAgICAgWDg2XzY0X1NTRV9DTEFTUyBvciBhbnkgb3RoZXIgb25lcyBhcmVuJ3QKKwkgICAgICAgWDg2XzY0X1NTRVVQX0NMQVNTLCBldmVyeXRoaW5nIHNob3VsZCBiZSBwYXNzZWQgaW4KKwkgICAgICAgbWVtb3J5LiAgKi8KKwkgICAgaWYgKGNsYXNzZXNbMF0gIT0gWDg2XzY0X1NTRV9DTEFTUykKKwkgICAgICByZXR1cm4gMDsKKworCSAgICBmb3IgKGkgPSAxOyBpIDwgd29yZHM7IGkrKykKKwkgICAgICBpZiAoY2xhc3Nlc1tpXSAhPSBYODZfNjRfU1NFVVBfQ0xBU1MpCisJCXJldHVybiAwOworCSAgfQorCiAJLyogRmluYWwgbWVyZ2VyIGNsZWFudXAuICAqLwogCWZvciAoaSA9IDA7IGkgPCB3b3JkczsgaSsrKQogCSAgewpAQCAtMjA3LDE1ICsyNTIsMjUgQEAKIAkgICAgICByZXR1cm4gMDsKIAogCSAgICAvKiBUaGUgWDg2XzY0X1NTRVVQX0NMQVNTIHNob3VsZCBiZSBhbHdheXMgcHJlY2VkZWQgYnkKLQkgICAgICAgWDg2XzY0X1NTRV9DTEFTUy4gICovCisJICAgICAgIFg4Nl82NF9TU0VfQ0xBU1Mgb3IgWDg2XzY0X1NTRVVQX0NMQVNTLiAgKi8KIAkgICAgaWYgKGNsYXNzZXNbaV0gPT0gWDg2XzY0X1NTRVVQX0NMQVNTCi0JCSYmIChpID09IDAgfHwgY2xhc3Nlc1tpIC0gMV0gIT0gWDg2XzY0X1NTRV9DTEFTUykpCi0JICAgICAgY2xhc3Nlc1tpXSA9IFg4Nl82NF9TU0VfQ0xBU1M7CisJCSYmIGNsYXNzZXNbaSAtIDFdICE9IFg4Nl82NF9TU0VfQ0xBU1MKKwkJJiYgY2xhc3Nlc1tpIC0gMV0gIT0gWDg2XzY0X1NTRVVQX0NMQVNTKQorCSAgICAgIHsKKwkJLyogVGhlIGZpcnN0IG9uZSBzaG91bGQgbmV2ZXIgYmUgWDg2XzY0X1NTRVVQX0NMQVNTLiAgKi8KKwkJRkZJX0FTU0VSVCAoaSAhPSAwKTsKKwkJY2xhc3Nlc1tpXSA9IFg4Nl82NF9TU0VfQ0xBU1M7CisJICAgICAgfQogCi0JICAgIC8qICBYODZfNjRfWDg3VVBfQ0xBU1Mgc2hvdWxkIGJlIHByZWNlZGVkIGJ5IFg4Nl82NF9YODdfQ0xBU1MuICAqLworCSAgICAvKiAgSWYgWDg2XzY0X1g4N1VQX0NMQVNTIGlzbid0IHByZWNlZGVkIGJ5IFg4Nl82NF9YODdfQ0xBU1MsCisJCWV2ZXJ5dGhpbmcgc2hvdWxkIGJlIHBhc3NlZCBpbiBtZW1vcnkuICAqLwogCSAgICBpZiAoY2xhc3Nlc1tpXSA9PSBYODZfNjRfWDg3VVBfQ0xBU1MKLQkJJiYgKGkgPT0gMCB8fCBjbGFzc2VzW2kgLSAxXSAhPSBYODZfNjRfWDg3X0NMQVNTKSkKLQkgICAgICBjbGFzc2VzW2ldID0gWDg2XzY0X1NTRV9DTEFTUzsKKwkJJiYgKGNsYXNzZXNbaSAtIDFdICE9IFg4Nl82NF9YODdfQ0xBU1MpKQorCSAgICAgIHsKKwkJLyogVGhlIGZpcnN0IG9uZSBzaG91bGQgbmV2ZXIgYmUgWDg2XzY0X1g4N1VQX0NMQVNTLiAgKi8KKwkJRkZJX0FTU0VSVCAoaSAhPSAwKTsKKwkJcmV0dXJuIDA7CisJICAgICAgfQogCSAgfQogCXJldHVybiB3b3JkczsKICAgICAgIH0KQEAgLTUyOCwxMCArNTgzLDEwIEBACiAJICBhcmdwICs9IGFyZ190eXBlc1tpXS0+c2l6ZTsKIAl9CiAgICAgICAvKiBJZiB0aGUgYXJndW1lbnQgaXMgaW4gYSBzaW5nbGUgcmVnaXN0ZXIsIG9yIHR3byBjb25zZWN1dGl2ZQotCSByZWdpc3RlcnMsIHRoZW4gd2UgY2FuIHVzZSB0aGF0IGFkZHJlc3MgZGlyZWN0bHkuICAqLworCSBpbnRlZ2VyIHJlZ2lzdGVycywgdGhlbiB3ZSBjYW4gdXNlIHRoYXQgYWRkcmVzcyBkaXJlY3RseS4gICovCiAgICAgICBlbHNlIGlmIChuID09IDEKLQkgICAgICAgfHwgKG4gPT0gMgotCQkgICAmJiBTU0VfQ0xBU1NfUCAoY2xhc3Nlc1swXSkgPT0gU1NFX0NMQVNTX1AgKGNsYXNzZXNbMV0pKSkKKwkgICAgICAgfHwgKG4gPT0gMiAmJiAhKFNTRV9DTEFTU19QIChjbGFzc2VzWzBdKQorCQkJICAgICAgIHx8IFNTRV9DTEFTU19QIChjbGFzc2VzWzFdKSkpKQogCXsKIAkgIC8qIFRoZSBhcmd1bWVudCBpcyBpbiBhIHNpbmdsZSByZWdpc3Rlci4gICovCiAJICBpZiAoU1NFX0NMQVNTX1AgKGNsYXNzZXNbMF0pKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCmluZGV4IDgxNzhkMDYuLjg5YTg5ODMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQotICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMyAgUmVkIEhhdCwgSW5jLgorICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMywgMjAxMCAgUmVkIEhhdCwgSW5jLgogICAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciB4ODYgYW5kIHg4Ni02NC4KQEAgLTM2LDExICszNiwyNiBAQAogI2RlZmluZSBYODYKICNlbmRpZgogCisjaWZkZWYgWDg2X1dJTjY0CisjZGVmaW5lIEZGSV9TSVpFT0ZfQVJHIDgKKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAgLy8gbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtaW5ndy02NCAKKyNlbmRpZgorCiAvKiAtLS0tIEdlbmVyaWMgdHlwZSBkZWZpbml0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWZuZGVmIExJQkZGSV9BU00KKyNpZmRlZiBYODZfV0lONjQKKyNpZmRlZiBfTVNDX1ZFUgordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgICAgIGZmaV9hcmc7Cit0eXBlZGVmIF9faW50NjQgICAgICAgICAgICAgICAgZmZpX3Nhcmc7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgICAgIGZmaV9hcmc7Cit0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgZmZpX3Nhcmc7CisjZW5kaWYKKyNlbHNlCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAgZmZpX2FyZzsKIHR5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRpZgogCiB0eXBlZGVmIGVudW0gZmZpX2FiaSB7CiAgIEZGSV9GSVJTVF9BQkkgPSAwLApAQCAtNTMsMTYgKzY4LDIyIEBACiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAogI2VuZGlmCiAKKyNpZmRlZiBYODZfV0lONjQKKyAgRkZJX1dJTjY0LAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfV0lONjQsCisjZWxzZQorCiAgIC8qIC0tLS0gSW50ZWwgeDg2IGFuZCBBTUQgeDg2LTY0IC0gKi8KLSNpZiAhZGVmaW5lZChYODZfV0lOMzIpICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKQorI2lmICFkZWZpbmVkKFg4Nl9XSU4zMikgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19hbWQ2NCkpCiAgIEZGSV9TWVNWLAogICBGRklfVU5JWDY0LCAgIC8qIFVuaXggdmFyaWFudHMgYWxsIHVzZSB0aGUgc2FtZSBBQkkgZm9yIHg4Ni02NCAgKi8KLSNpZmRlZiBfX2kzODZfXworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KQogICBGRklfREVGQVVMVF9BQkkgPSBGRklfU1lTViwKICNlbHNlCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9VTklYNjQsCiAjZW5kaWYKICNlbmRpZgorI2VuZGlmIC8qIFg4Nl9XSU42NCAqLwogCiAgIEZGSV9MQVNUX0FCSSA9IEZGSV9ERUZBVUxUX0FCSSArIDEKIH0gZmZpX2FiaTsKQEAgLTczLDYgKzk0LDcgQEAKICNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKICNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCIChGRklfVFlQRV9MQVNUICsgMSkKICNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCIChGRklfVFlQRV9MQVNUICsgMikKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCIChGRklfVFlQRV9MQVNUICsgMykKIAogI2lmIGRlZmluZWQgKFg4Nl82NCkgfHwgKGRlZmluZWQgKF9feDg2XzY0X18pICYmIGRlZmluZWQgKFg4Nl9EQVJXSU4pKQogI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI0CkBAIC04MSwxMCArMTAzLDE4IEBACiAjaWZkZWYgWDg2X1dJTjMyCiAjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMTMKICNlbHNlCisjaWZkZWYgWDg2X1dJTjY0CisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMjkKKyNkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDAKKyNkZWZpbmUgRkZJX05PX1JBV19BUEkgMQorI2Vsc2UKICNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAxMAogI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgWDg2X1dJTjY0CiAjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAxCS8qIHg4NiBoYXMgbmF0aXZlIHJhdyBhcGkgc3VwcG9ydCAqLwogI2VuZGlmCisjZW5kaWYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvc3lzdi5TCmluZGV4IDI3MTFmZGUuLmY0YjZjMWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3N5c3YuUwpAQCAtMjQyLDkgKzI0MiwyMCBAQAogCiAjaWYgIUZGSV9OT19SQVdfQVBJCiAKKy8qIFByZWNhbGN1bGF0ZSBmb3IgZS5nLiB0aGUgU29sYXJpcyAxMC94ODYgYXNzZW1ibGVyLiAgKi8KKyNpZiBGRklfVFJBTVBPTElORV9TSVpFID09IDEwCisjZGVmaW5lIFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgMTIKKyNkZWZpbmUgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCAxNgorI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIDIwCisjZWxpZiBGRklfVFJBTVBPTElORV9TSVpFID09IDI0CisjZGVmaW5lIFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgMjQKKyNkZWZpbmUgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCAyOAorI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIDMyCisjZWxzZQogI2RlZmluZSBSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUICgoRkZJX1RSQU1QT0xJTkVfU0laRSArIDMpICYgfjMpCiAjZGVmaW5lIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgKyA0KQogI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIChSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUICsgNCkKKyNlbmRpZgogI2RlZmluZSBDSUZfRkxBR1NfT0ZGU0VUIDIwCiAKIAkuYWxpZ24JNApAQCAtMzQzLDEwICszNTQsMTIgQEAKIAkubG9uZwkuTEVGREUxLS5MQVNGREUxCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUxOgogCS5sb25nCS5MQVNGREUxLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCi0jaWZkZWYgX19QSUNfXworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCiAJLmxvbmcJLkxGQjEtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2VsaWYgZGVmaW5lZCBfX1BJQ19fCisJLmxvbmcJLkxGQjFAcmVsCiAjZWxzZQotCS5sb25nCS5MRkIxCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisJLmxvbmcJLkxGQjEKICNlbmRpZgogCS5sb25nCS5MRkUxLS5MRkIxCS8qIEZERSBhZGRyZXNzIHJhbmdlICovCiAjaWZkZWYgX19QSUNfXwpAQCAtMzY4LDggKzM4MSwxMCBAQAogCS5sb25nCS5MRUZERTItLkxBU0ZERTIJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTI6CiAJLmxvbmcJLkxBU0ZERTItLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KLSNpZmRlZiBfX1BJQ19fCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKIAkubG9uZwkuTEZCMi0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxpZiBkZWZpbmVkIF9fUElDX18KKwkubG9uZwkuTEZCMkByZWwKICNlbHNlCiAJLmxvbmcJLkxGQjIKICNlbmRpZgpAQCAtNDAyLDggKzQxNywxMCBAQAogCS5sb25nCS5MRUZERTMtLkxBU0ZERTMJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTM6CiAJLmxvbmcJLkxBU0ZERTMtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KLSNpZmRlZiBfX1BJQ19fCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKIAkubG9uZwkuTEZCMy0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxpZiBkZWZpbmVkIF9fUElDX18KKwkubG9uZwkuTEZCM0ByZWwKICNlbHNlCiAJLmxvbmcJLkxGQjMKICNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCmluZGV4IDA0NjU2NGQuLmZlM2Y0ZmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKQEAgLTg5LDcgKzg5LDYgQEAKIAlhZGRxCSVyMTEsICVyMTAKIAlqbXAJKiVyMTAKIAotCS5zZWN0aW9uIC5yb2RhdGEKIC5Mc3RvcmVfdGFibGU6CiAJLmxvbmcJLkxzdF92b2lkLS5Mc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KIAkubG9uZwkuTHN0X3NpbnQzMi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0lOVCAqLwpAQCAtMTA3LDcgKzEwNiw2IEBACiAJLmxvbmcJLkxzdF9zdHJ1Y3QtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KIAkubG9uZwkuTHN0X2ludDY0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwogCi0JLnRleHQKIAkuYWxpZ24gMgogLkxzdF92b2lkOgogCXJldApAQCAtMjQwLDcgKzIzOCw2IEBACiAJYWRkcQklcjExLCAlcjEwCiAJam1wCSolcjEwCiAKLQkuc2VjdGlvbiAucm9kYXRhCiAuTGxvYWRfdGFibGU6CiAJLmxvbmcJLkxsZF92b2lkLS5MbG9hZF90YWJsZQkJLyogRkZJX1RZUEVfVk9JRCAqLwogCS5sb25nCS5MbGRfaW50MzItLkxsb2FkX3RhYmxlCQkvKiBGRklfVFlQRV9JTlQgKi8KQEAgLTI1OCw3ICsyNTUsNiBAQAogCS5sb25nCS5MbGRfc3RydWN0LS5MbG9hZF90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KIAkubG9uZwkuTGxkX2ludDY0LS5MbG9hZF90YWJsZQkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLwogCi0JLnRleHQKIAkuYWxpZ24gMgogLkxsZF92b2lkOgogCXJldApAQCAtMzUxLDcgKzM0NywxMSBAQAogCS5sb25nCS5MRUZERTEtLkxBU0ZERTEJLyogRkRFIExlbmd0aCAqLwogLkxBU0ZERTE6CiAJLmxvbmcJLkxBU0ZERTEtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBIQVZFX0FTX1g4Nl9QQ1JFTAogCS5sb25nCS5MVVcwLS4JCQkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTFVXMEByZWwKKyNlbmRpZgogCS5sb25nCS5MVVc0LS5MVVcwCQkvKiBGREUgYWRkcmVzcyByYW5nZSAqLwogCS51bGViMTI4IDB4MAkJCS8qIEF1Z21lbnRhdGlvbiBzaXplICovCiAKQEAgLTM4OSw3ICszODksMTEgQEAKIAkubG9uZwkuTEVGREUzLS5MQVNGREUzCS8qIEZERSBMZW5ndGggKi8KIC5MQVNGREUzOgogCS5sb25nCS5MQVNGREUzLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgSEFWRV9BU19YODZfUENSRUwKIAkubG9uZwkuTFVXNS0uCQkJLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxVVzVAcmVsCisjZW5kaWYKIAkubG9uZwkuTFVXOS0uTFVXNQkJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KIAkudWxlYjEyOCAweDAJCQkvKiBBdWdtZW50YXRpb24gc2l6ZSAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCmluZGV4IGViYTExYzEuLmFjMWVkNmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCkBAIC0xLDcgKzEsOCBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHdpbjMyLlMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTgsIDIwMDEsIDIwMDIgIFJlZCBIYXQsIEluYy4KKyAgIHdpbjMyLlMgLSBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTgsIDIwMDEsIDIwMDIsIDIwMDkgIFJlZCBIYXQsIEluYy4KIAkgICAgIENvcHlyaWdodCAoYykgMjAwMSAgSm9obiBCZW5pdG9uCiAJICAgICBDb3B5cmlnaHQgKGMpIDIwMDIgIFJhbmppdCBNYXRoZXcKKwkgICAgIENvcHlyaWdodCAoYykgMjAwOSAgRGFuaWVsIFdpdHRlCiAJCQkKICAKICAgIFg4NiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQpAQCAtMTcsMzIgKzE4LDM5MCBAQAogICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKICAgIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogIAotICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUgotCUFOWSBDTEFJTSwgREFNQUdFUyBPUgotICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKLSAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICovCiAgCiAjZGVmaW5lIExJQkZGSV9BU00KICNpbmNsdWRlIDxmZmljb25maWcuaD4KICNpbmNsdWRlIDxmZmkuaD4KLSAKLS50ZXh0Ci0gCi0uZ2xvYmwgZmZpX3ByZXBfYXJncworCisjaWZkZWYgX01TQ19WRVIKKworLjM4NgorLk1PREVMIEZMQVQsIEMKKworRVhUUk4gZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcjpORUFSCisKK19URVhUIFNFR01FTlQKKworZmZpX2NhbGxfd2luMzIgUFJPQyBORUFSLAorICAgIGZmaV9wcmVwX2FyZ3MgOiBORUFSIFBUUiBEV09SRCwKKyAgICBlY2lmICAgICAgICAgIDogTkVBUiBQVFIgRFdPUkQsCisgICAgY2lmX2J5dGVzICAgICA6IERXT1JELAorICAgIGNpZl9mbGFncyAgICAgOiBEV09SRCwKKyAgICBydmFsdWUgICAgICAgIDogTkVBUiBQVFIgRFdPUkQsCisgICAgZm4gICAgICAgICAgICA6IE5FQVIgUFRSIERXT1JECisKKyAgICAgICAgOzsgTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLgorICAgICAgICBtb3YgIGVjeCwgY2lmX2J5dGVzCisgICAgICAgIHN1YiAgZXNwLCBlY3gKKworICAgICAgICBtb3YgIGVheCwgZXNwCisKKyAgICAgICAgOzsgUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uCisgICAgICAgIHB1c2ggZWNpZgorICAgICAgICBwdXNoIGVheAorICAgICAgICBjYWxsIGZmaV9wcmVwX2FyZ3MKKworICAgICAgICA7OyBSZXR1cm4gc3RhY2sgdG8gcHJldmlvdXMgc3RhdGUgYW5kIGNhbGwgdGhlIGZ1bmN0aW9uCisgICAgICAgIGFkZCAgZXNwLCA4CisKKyAgICAgICAgY2FsbCBmbgorCisgICAgICAgIDs7IGNkZWNsOiAgIHdlIHJlc3RvcmUgZXNwIGluIHRoZSBlcGlsb2d1ZSwgc28gdGhlcmUncyBubyBuZWVkIHRvCisgICAgICAgIDs7ICAgICAgICAgIHJlbW92ZSB0aGUgc3BhY2Ugd2UgcHVzaGVkIGZvciB0aGUgYXJncy4KKyAgICAgICAgOzsgc3RkY2FsbDogdGhlIGNhbGxlZSBoYXMgYWxyZWFkeSBjbGVhbmVkIHRoZSBzdGFjay4KKworICAgICAgICA7OyBMb2FkIGVjeCB3aXRoIHRoZSByZXR1cm4gdHlwZSBjb2RlCisgICAgICAgIG1vdiAgZWN4LCBjaWZfZmxhZ3MKKworICAgICAgICA7OyBJZiB0aGUgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaXMgTlVMTCwgYXNzdW1lIG5vIHJldHVybiB2YWx1ZS4KKyAgICAgICAgY21wICBydmFsdWUsIDAKKyAgICAgICAgam5lICBjYV9qdW1wdGFibGUKKworICAgICAgICA7OyBFdmVuIGlmIHRoZXJlIGlzIG5vIHNwYWNlIGZvciB0aGUgcmV0dXJuIHZhbHVlLCB3ZSBhcmUKKyAgICAgICAgOzsgb2JsaWdlZCB0byBoYW5kbGUgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgorICAgICAgICBjbXAgIGVjeCwgRkZJX1RZUEVfRkxPQVQKKyAgICAgICAgam5lICBjYV9lcGlsb2d1ZQorICAgICAgICBmc3RwIHN0KDApCisKKyAgICAgICAgam1wICBjYV9lcGlsb2d1ZQorCitjYV9qdW1wdGFibGU6CisgICAgICAgIGptcCAgW2NhX2p1bXBkYXRhICsgNCAqIGVjeF0KK2NhX2p1bXBkYXRhOgorICAgICAgICA7OyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiBsYWJlbCBhbmQganVtcCB0YWJsZS4KKyAgICAgICAgZGQgb2Zmc2V0IGNhX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1ZPSUQKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX0lOVAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0ZmxvYXQgICAgICAgOzsgRkZJX1RZUEVfRkxPQVQKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGRvdWJsZSAgICAgIDs7IEZGSV9UWVBFX0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0bG9uZ2RvdWJsZSAgOzsgRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9VSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDMyCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfU0lOVDY0CisgICAgICAgIGRkIG9mZnNldCBjYV9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1BPSU5URVIKKyAgICAgICAgZGQgb2Zmc2V0IGNhX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQgorICAgICAgICBkZCBvZmZzZXQgY2FfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCCisgICAgICAgIGRkIG9mZnNldCBjYV9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIKKworY2FfcmV0aW50ODoKKyAgICAgICAgOzsgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3YgICBlY3gsIHJ2YWx1ZQorICAgICAgICBtb3YgICBbZWN4ICsgMF0sIGFsCisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGludDE2OgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIG1vdiAgIFtlY3ggKyAwXSwgYXgKKyAgICAgICAgam1wICAgY2FfZXBpbG9ndWUKKworY2FfcmV0aW50OgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIG1vdiAgIFtlY3ggKyAwXSwgZWF4CisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGludDY0OgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIG1vdiAgIFtlY3ggKyAwXSwgZWF4CisgICAgICAgIG1vdiAgIFtlY3ggKyA0XSwgZWR4CisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGZsb2F0OgorICAgICAgICA7OyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCisgICAgICAgIG1vdiAgIGVjeCwgcnZhbHVlCisgICAgICAgIGZzdHAgIERXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjYV9lcGlsb2d1ZQorCitjYV9yZXRkb3VibGU6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgZnN0cCAgUVdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX3JldGxvbmdkb3VibGU6CisgICAgICAgIDs7IExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgbW92ICAgZWN4LCBydmFsdWUKKyAgICAgICAgZnN0cCAgVEJZVEUgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNhX2VwaWxvZ3VlCisKK2NhX2VwaWxvZ3VlOgorICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCisgICAgICAgIHJldAorZmZpX2NhbGxfd2luMzIgRU5EUAorCitmZmlfY2xvc3VyZV9TWVNWIFBST0MgTkVBUiBGT1JDRUZSQU1FCisgICAgOzsgdGhlIGZmaV9jbG9zdXJlIGN0eCBpcyBwYXNzZWQgaW4gZWF4IGJ5IHRoZSB0cmFtcG9saW5lLgorCisgICAgICAgIHN1YiAgZXNwLCA0MAorICAgICAgICBsZWEgIGVkeCwgW2VicCAtIDI0XQorICAgICAgICBtb3YgIFtlYnAgLSAxMl0sIGVkeCAgICAgICAgIDs7IHJlc3AKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgKyA4XQorICAgICAgICBtb3YgIFtlc3AgKyA4XSwgZWR4ICAgICAgICAgIDs7IGFyZ3MKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgLSAxMl0KKyAgICAgICAgbW92ICBbZXNwICsgNF0sIGVkeCAgICAgICAgICA7OyAmcmVzcAorICAgICAgICBtb3YgIFtlc3BdLCBlYXggICAgICAgICAgICAgIDs7IGNsb3N1cmUKKyAgICAgICAgY2FsbCBmZmlfY2xvc3VyZV9TWVNWX2lubmVyCisgICAgICAgIG1vdiAgZWN4LCBbZWJwIC0gMTJdCisKK2NzX2p1bXB0YWJsZToKKyAgICAgICAgam1wICBbY3NfanVtcGRhdGEgKyA0ICogZWF4XQorY3NfanVtcGRhdGE6CisgICAgICAgIDs7IERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBsYWJlbCBhbmQganVtcCB0YWJsZS4KKyAgICAgICAgZGQgb2Zmc2V0IGNzX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1ZPSUQKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX0lOVAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0ZmxvYXQgICAgICAgOzsgRkZJX1RZUEVfRkxPQVQKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGRvdWJsZSAgICAgIDs7IEZGSV9UWVBFX0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0bG9uZ2RvdWJsZSAgOzsgRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9VSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfVUlOVDMyCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfU0lOVDY0CisgICAgICAgIGRkIG9mZnNldCBjc19yZXRzdHJ1Y3QgICAgICA7OyBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1BPSU5URVIKKyAgICAgICAgZGQgb2Zmc2V0IGNzX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQgorICAgICAgICBkZCBvZmZzZXQgY3NfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCCisgICAgICAgIGRkIG9mZnNldCBjc19yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIKKworY3NfcmV0aW50ODoKKyAgICAgICAgbW92ICAgYWwsIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGludDE2OgorICAgICAgICBtb3YgICBheCwgW2VjeF0KKyAgICAgICAgam1wICAgY3NfZXBpbG9ndWUKKworY3NfcmV0aW50OgorICAgICAgICBtb3YgICBlYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGludDY0OgorICAgICAgICBtb3YgICBlYXgsIFtlY3ggKyAwXQorICAgICAgICBtb3YgICBlZHgsIFtlY3ggKyA0XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRmbG9hdDoKKyAgICAgICAgZmxkICAgRFdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGRvdWJsZToKKyAgICAgICAgZmxkICAgUVdPUkQgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNzX2VwaWxvZ3VlCisKK2NzX3JldGxvbmdkb3VibGU6CisgICAgICAgIGZsZCAgIFRCWVRFIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjc19lcGlsb2d1ZQorCitjc19yZXRzdHJ1Y3Q6CisgICAgICAgIDs7IENhbGxlciBleHBlY3RzIHVzIHRvIHBvcCBzdHJ1Y3QgcmV0dXJuIHZhbHVlIHBvaW50ZXIgaGlkZGVuIGFyZy4KKyAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgorICAgICAgICByZXQJNAorCitjc19lcGlsb2d1ZToKKyAgICAgICAgOzsgRXBpbG9ndWUgY29kZSBpcyBhdXRvZ2VuZXJhdGVkLgorICAgICAgICByZXQKK2ZmaV9jbG9zdXJlX1NZU1YgRU5EUAorCisjaWYgIUZGSV9OT19SQVdfQVBJCisKKyNkZWZpbmUgUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCAoKEZGSV9UUkFNUE9MSU5FX1NJWkUgKyAzKSBBTkQgTk9UIDMpCisjZGVmaW5lIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgKyA0KQorI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIChSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUICsgNCkKKyNkZWZpbmUgQ0lGX0ZMQUdTX09GRlNFVCAyMAorCitmZmlfY2xvc3VyZV9yYXdfU1lTViBQUk9DIE5FQVIgVVNFUyBlc2kKKyAgICA7OyB0aGUgZmZpX2Nsb3N1cmUgY3R4IGlzIHBhc3NlZCBpbiBlYXggYnkgdGhlIHRyYW1wb2xpbmUuCisKKyAgICAgICAgc3ViICBlc3AsIDQwCisgICAgICAgIG1vdiAgZXNpLCBbZWF4ICsgUkFXX0NMT1NVUkVfQ0lGX09GRlNFVF0gICAgICAgIDs7IGNsb3N1cmUtPmNpZgorICAgICAgICBtb3YgIGVkeCwgW2VheCArIFJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVRdICA7OyBjbG9zdXJlLT51c2VyX2RhdGEKKyAgICAgICAgbW92ICBbZXNwICsgMTJdLCBlZHggICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgdXNlcl9kYXRhCisgICAgICAgIGxlYSAgZWR4LCBbZWJwICsgOF0KKyAgICAgICAgbW92ICBbZXNwICsgOF0sIGVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgcmF3X2FyZ3MKKyAgICAgICAgbGVhICBlZHgsIFtlYnAgLSAyNF0KKyAgICAgICAgbW92ICBbZXNwICsgNF0sIGVkeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgJnJlcworICAgICAgICBtb3YgIFtlc3BdLCBlc2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBjaWYKKyAgICAgICAgY2FsbCBEV09SRCBQVFIgW2VheCArIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVRdICAgOzsgY2xvc3VyZS0+ZnVuCisgICAgICAgIG1vdiAgZWF4LCBbZXNpICsgQ0lGX0ZMQUdTX09GRlNFVF0gICAgICAgICAgICAgIDs7IGNpZi0+ZmxhZ3MKKyAgICAgICAgbGVhICBlY3gsIFtlYnAgLSAyNF0KKworY3JfanVtcHRhYmxlOgorICAgICAgICBqbXAgIFtjcl9qdW1wZGF0YSArIDQgKiBlYXhdCitjcl9qdW1wZGF0YToKKyAgICAgICAgOzsgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGxhYmVsIGFuZCBqdW1wIHRhYmxlLgorICAgICAgICBkZCBvZmZzZXQgY3JfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfVk9JRAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfSU5UCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRmbG9hdCAgICAgICA7OyBGRklfVFlQRV9GTE9BVAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0ZG91YmxlICAgICAgOzsgRkZJX1RZUEVfRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRsb25nZG91YmxlICA7OyBGRklfVFlQRV9MT05HRE9VQkxFCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9VSU5UOAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDgKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1VJTlQxNgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfU0lOVDE2CisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9VSU5UMzIKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50NjQgICAgICAgOzsgRkZJX1RZUEVfVUlOVDY0CisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9TSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNyX2VwaWxvZ3VlICAgICAgIDs7IEZGSV9UWVBFX1NUUlVDVAorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfUE9JTlRFUgorICAgICAgICBkZCBvZmZzZXQgY3JfcmV0aW50OCAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCCisgICAgICAgIGRkIG9mZnNldCBjcl9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIKKyAgICAgICAgZGQgb2Zmc2V0IGNyX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QgorCitjcl9yZXRpbnQ4OgorICAgICAgICBtb3YgICBhbCwgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0aW50MTY6CisgICAgICAgIG1vdiAgIGF4LCBbZWN4XQorICAgICAgICBqbXAgICBjcl9lcGlsb2d1ZQorCitjcl9yZXRpbnQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0aW50NjQ6CisgICAgICAgIG1vdiAgIGVheCwgW2VjeCArIDBdCisgICAgICAgIG1vdiAgIGVkeCwgW2VjeCArIDRdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX3JldGZsb2F0OgorICAgICAgICBmbGQgICBEV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0ZG91YmxlOgorICAgICAgICBmbGQgICBRV09SRCBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY3JfZXBpbG9ndWUKKworY3JfcmV0bG9uZ2RvdWJsZToKKyAgICAgICAgZmxkICAgVEJZVEUgUFRSIFtlY3hdCisgICAgICAgIGptcCAgIGNyX2VwaWxvZ3VlCisKK2NyX2VwaWxvZ3VlOgorICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCisgICAgICAgIHJldAorZmZpX2Nsb3N1cmVfcmF3X1NZU1YgRU5EUAorCisjZW5kaWYgLyogIUZGSV9OT19SQVdfQVBJICovCisKK2ZmaV9jbG9zdXJlX1NURENBTEwgUFJPQyBORUFSIEZPUkNFRlJBTUUKKyAgICA7OyB0aGUgZmZpX2Nsb3N1cmUgY3R4IGlzIHBhc3NlZCBpbiBlYXggYnkgdGhlIHRyYW1wb2xpbmUuCisKKyAgICAgICAgc3ViICBlc3AsIDQwCisgICAgICAgIGxlYSAgZWR4LCBbZWJwIC0gMjRdCisgICAgICAgIG1vdiAgW2VicCAtIDEyXSwgZWR4ICAgICAgICAgOzsgcmVzcAorICAgICAgICBsZWEgIGVkeCwgW2VicCArIDEyXSAgICAgICAgIDs7IGFjY291bnQgZm9yIHN0dWIgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2sKKyAgICAgICAgbW92ICBbZXNwICsgOF0sIGVkeCAgICAgICAgICA7OyBhcmdzCisgICAgICAgIGxlYSAgZWR4LCBbZWJwIC0gMTJdCisgICAgICAgIG1vdiAgW2VzcCArIDRdLCBlZHggICAgICAgICAgOzsgJnJlc3AKKyAgICAgICAgbW92ICBbZXNwXSwgZWF4ICAgICAgICAgICAgICA7OyBjbG9zdXJlCisgICAgICAgIGNhbGwgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorICAgICAgICBtb3YgIGVjeCwgW2VicCAtIDEyXQorCitjZF9qdW1wdGFibGU6CisgICAgICAgIGptcCAgW2NkX2p1bXBkYXRhICsgNCAqIGVheF0KK2NkX2p1bXBkYXRhOgorICAgICAgICA7OyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgbGFiZWwgYW5kIGp1bXAgdGFibGUuCisgICAgICAgIGRkIG9mZnNldCBjZF9lcGlsb2d1ZSAgICAgICA7OyBGRklfVFlQRV9WT0lECisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9JTlQKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGZsb2F0ICAgICAgIDs7IEZGSV9UWVBFX0ZMT0FUCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRkb3VibGUgICAgICA7OyBGRklfVFlQRV9ET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGxvbmdkb3VibGUgIDs7IEZGSV9UWVBFX0xPTkdET1VCTEUKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDggICAgICAgIDs7IEZGSV9UWVBFX1VJTlQ4CisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TSU5UOAorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50MTYgICAgICAgOzsgRkZJX1RZUEVfVUlOVDE2CisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQxNiAgICAgICA7OyBGRklfVFlQRV9TSU5UMTYKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludCAgICAgICAgIDs7IEZGSV9UWVBFX1VJTlQzMgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU0lOVDMyCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQ2NCAgICAgICA7OyBGRklfVFlQRV9VSU5UNjQKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDY0ICAgICAgIDs7IEZGSV9UWVBFX1NJTlQ2NAorICAgICAgICBkZCBvZmZzZXQgY2RfZXBpbG9ndWUgICAgICAgOzsgRkZJX1RZUEVfU1RSVUNUCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQgICAgICAgICA7OyBGRklfVFlQRV9QT0lOVEVSCisgICAgICAgIGRkIG9mZnNldCBjZF9yZXRpbnQ4ICAgICAgICA7OyBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIKKyAgICAgICAgZGQgb2Zmc2V0IGNkX3JldGludDE2ICAgICAgIDs7IEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQgorICAgICAgICBkZCBvZmZzZXQgY2RfcmV0aW50ICAgICAgICAgOzsgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCCisKK2NkX3JldGludDg6CisgICAgICAgIG1vdiAgIGFsLCBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRpbnQxNjoKKyAgICAgICAgbW92ICAgYXgsIFtlY3hdCisgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCisKK2NkX3JldGludDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRpbnQ2NDoKKyAgICAgICAgbW92ICAgZWF4LCBbZWN4ICsgMF0KKyAgICAgICAgbW92ICAgZWR4LCBbZWN4ICsgNF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfcmV0ZmxvYXQ6CisgICAgICAgIGZsZCAgIERXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRkb3VibGU6CisgICAgICAgIGZsZCAgIFFXT1JEIFBUUiBbZWN4XQorICAgICAgICBqbXAgICBjZF9lcGlsb2d1ZQorCitjZF9yZXRsb25nZG91YmxlOgorICAgICAgICBmbGQgICBUQllURSBQVFIgW2VjeF0KKyAgICAgICAgam1wICAgY2RfZXBpbG9ndWUKKworY2RfZXBpbG9ndWU6CisgICAgICAgIDs7IEVwaWxvZ3VlIGNvZGUgaXMgYXV0b2dlbmVyYXRlZC4KKyAgICAgICAgcmV0CitmZmlfY2xvc3VyZV9TVERDQUxMIEVORFAKKworX1RFWFQgRU5EUworRU5ECisKKyNlbHNlCisKKwkudGV4dAogIAogICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgogICAgICAgICAuYmFsaWduIDE2Ci0uZ2xvYmwgX2ZmaV9jYWxsX1NZU1YKLSAKLV9mZmlfY2FsbF9TWVNWOgorCS5nbG9ibAlfZmZpX2NhbGxfd2luMzIKKwkuZGVmCV9mZmlfY2FsbF93aW4zMjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCitfZmZpX2NhbGxfd2luMzI6CisuTEZCMToKICAgICAgICAgcHVzaGwgJWVicAorLkxDRkkwOgogICAgICAgICBtb3ZsICAlZXNwLCVlYnAKLSAKKy5MQ0ZJMToKICAgICAgICAgIyBNYWtlIHJvb20gZm9yIGFsbCBvZiB0aGUgbmV3IGFyZ3MuCiAgICAgICAgIG1vdmwgIDE2KCVlYnApLCVlY3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBzdWJsICAlZWN4LCVlc3AKQEAgLTYwLDIyNSArNDE5LDE0MSBAQAogICAgICAgICAjIEZJWE1FOiBBbGlnbiB0aGUgc3RhY2sgdG8gYSAxMjgtYml0IGJvdW5kYXJ5IHRvIGF2b2lkCiAgICAgICAgICMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGhpdHMuCiAKLQljYWxsICAqMjgoJWVicCkKLSAKLSAgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlIHdlIHB1c2hlZCBmb3IgdGhlIGFyZ3MKLSAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeAotICAgICAgICBhZGRsICAlZWN4LCVlc3AKLSAKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcmV0dXJuIHR5cGUgY29kZQotICAgICAgICBtb3ZsICAyMCglZWJwKSwlZWN4Ci0gCi0gICAgICAgICMgSWYgdGhlIHJldHVybiB2YWx1ZSBwb2ludGVyIGlzIE5VTEwsIGFzc3VtZSBubyByZXR1cm4gdmFsdWUuCi0gICAgICAgIGNtcGwgICQwLDI0KCVlYnApCi0gICAgICAgIGpuZSAgIHJldGludAotIAotICAgICAgICAjIEV2ZW4gaWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUsIHdlIGFyZQotICAgICAgICAjIG9ibGlnZWQgdG8gaGFuZGxlIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgbm9yZXR2YWwKLSAgICAgICAgZnN0cCAgJXN0KDApCi0gCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRpbnQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9JTlQsJWVjeAotICAgICAgICBqbmUgICByZXRmbG9hdAotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGZsb2F0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRkxPQVQsJWVjeAotICAgICAgICBqbmUgICByZXRkb3VibGUgICAKLSAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIGZzdHBzICglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0ZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgcmV0bG9uZ2RvdWJsZQotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBmc3RwbCAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldGxvbmdkb3VibGU6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9MT05HRE9VQkxFLCVlY3gKLSAgICAgICAgam5lICAgcmV0aW50NjQKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgZnN0cHQgKCVlY3gpCi0gICAgICAgIGptcCAgIGVwaWxvZ3VlCi0gCi1yZXRpbnQ2NDoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQ2NCwlZWN4Ci0gICAgICAgIGpuZSAgIHJldHN0cnVjdDFiCi0gICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQotICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4Ci0gICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQotICAgICAgICBtb3ZsICAlZWR4LDQoJWVjeCkKLSAKLXJldHN0cnVjdDFiOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDgsJWVjeAotICAgICAgICBqbmUgICByZXRzdHJ1Y3QyYgotICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKLSAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAotICAgICAgICBtb3ZiICAlYWwsMCglZWN4KQotICAgICAgICBqbXAgICBlcGlsb2d1ZQotIAotcmV0c3RydWN0MmI6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UMTYsJWVjeAotICAgICAgICBqbmUgICByZXRzdHJ1Y3QKLSAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCi0gICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKLSAgICAgICAgbW92dyAgJWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgZXBpbG9ndWUKLSAKLXJldHN0cnVjdDoKLSAgICAgICAgIyBOb3RoaW5nIHRvIGRvIQotIAotbm9yZXR2YWw6Ci1lcGlsb2d1ZToKLSAgICAgICAgbW92bCAlZWJwLCVlc3AKLSAgICAgICAgcG9wbCAlZWJwCi0gICAgICAgIHJldAotIAotLmZmaV9jYWxsX1NZU1ZfZW5kOgotCi0gICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCi0gICAgICAgIC5iYWxpZ24gMTYKLS5nbG9ibCBfZmZpX2NhbGxfU1REQ0FMTAotCi1fZmZpX2NhbGxfU1REQ0FMTDoKLSAgICAgICAgcHVzaGwgJWVicAotICAgICAgICBtb3ZsICAlZXNwLCVlYnAKLQotICAgICAgICAjIE1ha2Ugcm9vbSBmb3IgYWxsIG9mIHRoZSBuZXcgYXJncy4KLSAgICAgICAgbW92bCAgMTYoJWVicCksJWVjeCAKLSAgICAgICAgc3VibCAgJWVjeCwlZXNwCi0KLSAgICAgICAgbW92bCAgJWVzcCwlZWF4Ci0KLSAgICAgICAgIyBQbGFjZSBhbGwgb2YgdGhlIGZmaV9wcmVwX2FyZ3MgaW4gcG9zaXRpb24KLSAgICAgICAgcHVzaGwgMTIoJWVicCkKLSAgICAgICAgcHVzaGwgJWVheAotICAgICAgICBjYWxsICAqOCglZWJwKQotCi0gICAgICAgICMgUmV0dXJuIHN0YWNrIHRvIHByZXZpb3VzIHN0YXRlIGFuZCBjYWxsIHRoZSBmdW5jdGlvbgotICAgICAgICBhZGRsICAkOCwlZXNwCi0KLSAgICAgICAgIyBGSVhNRTogQWxpZ24gdGhlIHN0YWNrIHRvIGEgMTI4LWJpdCBib3VuZGFyeSB0byBhdm9pZAotICAgICAgICAjIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBoaXRzLgotCiAgICAgICAgIGNhbGwgICoyOCglZWJwKQotCisgCiAgICAgICAgICMgc3RkY2FsbCBmdW5jdGlvbnMgcG9wIGFyZ3VtZW50cyBvZmYgdGhlIHN0YWNrIHRoZW1zZWx2ZXMKIAogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSByZXR1cm4gdHlwZSBjb2RlCiAgICAgICAgIG1vdmwgIDIwKCVlYnApLCVlY3gKLQorIAogICAgICAgICAjIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLgogICAgICAgICBjbXBsICAkMCwyNCglZWJwKQotICAgICAgICBqbmUgICBzY19yZXRpbnQKLQorICAgICAgICBqbmUgICAwZgorIAogICAgICAgICAjIEV2ZW4gaWYgdGhlcmUgaXMgbm8gc3BhY2UgZm9yIHRoZSByZXR1cm4gdmFsdWUsIHdlIGFyZQogICAgICAgICAjIG9ibGlnZWQgdG8gaGFuZGxlIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KICAgICAgICAgY21wbCAgJEZGSV9UWVBFX0ZMT0FULCVlY3gKLSAgICAgICAgam5lICAgc2Nfbm9yZXR2YWwKKyAgICAgICAgam5lICAgLkxub3JldHZhbAogICAgICAgICBmc3RwICAlc3QoMCkKKyAKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQogCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCiswOgorCWNhbGwJMWYKKwkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KKy5Mc3RvcmVfdGFibGU6CisJLmxvbmcJLkxub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHJldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5McmV0ZG91YmxlCQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHJldGxvbmdkb3VibGUJCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHJldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5McmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxyZXR1aW50MTYJCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5McmV0c2ludDE2CQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5McmV0aW50NjQJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5McmV0aW50NjQJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5McmV0c3RydWN0CQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5McmV0c3RydWN0MWIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5McmV0c3RydWN0MmIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5McmV0c3RydWN0NGIJCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworMToKKwlhZGQJJWVjeCwgJWVjeAorCWFkZAklZWN4LCAlZWN4CisJYWRkCSglZXNwKSwlZWN4CisJYWRkCSQ0LCAlZXNwCisJam1wCSooJWVjeCkKIAotc2NfcmV0aW50OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfSU5ULCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0ZmxvYXQKKwkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KKy5McmV0c2ludDg6CisJbW92c2JsCSVhbCwgJWVheAorCWptcAkuTHJldGludAorCisuTHJldHNpbnQxNjoKKwltb3Zzd2wJJWF4LCAlZWF4CisJam1wCS5McmV0aW50CisKKy5McmV0dWludDg6CisJbW92emJsCSVhbCwgJWVheAorCWptcAkuTHJldGludAorCisuTHJldHVpbnQxNjoKKwltb3Z6d2wJJWF4LCAlZWF4CisJam1wCS5McmV0aW50CisKKy5McmV0aW50OgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBtb3ZsICAlZWF4LDAoJWVjeCkKLSAgICAgICAgam1wICAgc2NfZXBpbG9ndWUKLQotc2NfcmV0ZmxvYXQ6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9GTE9BVCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGRvdWJsZQorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisgCisuTHJldGZsb2F0OgogICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgZnN0cHMgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGRvdWJsZToKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGxvbmdkb3VibGUKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorIAorLkxyZXRkb3VibGU6CiAgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQogICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CiAgICAgICAgIGZzdHBsICglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRsb25nZG91YmxlOgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfTE9OR0RPVUJMRSwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldGludDY0CisgICAgICAgIGptcCAgIC5MZXBpbG9ndWUKKyAKKy5McmV0bG9uZ2RvdWJsZToKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgZnN0cHQgKCVlY3gpCi0gICAgICAgIGptcCAgIHNjX2VwaWxvZ3VlCi0KLXNjX3JldGludDY0OgotICAgICAgICBjbXBsICAkRkZJX1RZUEVfU0lOVDY0LCVlY3gKLSAgICAgICAgam5lICAgc2NfcmV0c3RydWN0MWIKKyAgICAgICAgam1wICAgLkxlcGlsb2d1ZQorIAorLkxyZXRpbnQ2NDoKICAgICAgICAgIyBMb2FkICVlY3ggd2l0aCB0aGUgcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmV0dXJuIHZhbHVlCiAgICAgICAgIG1vdmwgIDI0KCVlYnApLCVlY3gKICAgICAgICAgbW92bCAgJWVheCwwKCVlY3gpCiAgICAgICAgIG1vdmwgICVlZHgsNCglZWN4KQorCWptcCAgIC5MZXBpbG9ndWUKIAotc2NfcmV0c3RydWN0MWI6Ci0gICAgICAgIGNtcGwgICRGRklfVFlQRV9TSU5UOCwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldHN0cnVjdDJiCisuTHJldHN0cnVjdDFiOgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBtb3ZiICAlYWwsMCglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQotCi1zY19yZXRzdHJ1Y3QyYjoKLSAgICAgICAgY21wbCAgJEZGSV9UWVBFX1NJTlQxNiwlZWN4Ci0gICAgICAgIGpuZSAgIHNjX3JldHN0cnVjdAorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisgCisuTHJldHN0cnVjdDJiOgogICAgICAgICAjIExvYWQgJWVjeCB3aXRoIHRoZSBwb2ludGVyIHRvIHN0b3JhZ2UgZm9yIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAgbW92bCAgMjQoJWVicCksJWVjeAogICAgICAgICBtb3Z3ICAlYXgsMCglZWN4KQotICAgICAgICBqbXAgICBzY19lcGlsb2d1ZQorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCiAKLXNjX3JldHN0cnVjdDoKKy5McmV0c3RydWN0NGI6CisgICAgICAgICMgTG9hZCAlZWN4IHdpdGggdGhlIHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBtb3ZsICAyNCglZWJwKSwlZWN4CisgICAgICAgIG1vdmwgICVlYXgsMCglZWN4KQorICAgICAgICBqbXAgICAuTGVwaWxvZ3VlCisKKy5McmV0c3RydWN0OgogICAgICAgICAjIE5vdGhpbmcgdG8gZG8hCi0KLXNjX25vcmV0dmFsOgotc2NfZXBpbG9ndWU6CisgCisuTG5vcmV0dmFsOgorLkxlcGlsb2d1ZToKICAgICAgICAgbW92bCAlZWJwLCVlc3AKICAgICAgICAgcG9wbCAlZWJwCiAgICAgICAgIHJldAorLmZmaV9jYWxsX3dpbjMyX2VuZDoKKy5MRkUxOgogCi0uZmZpX2NhbGxfU1REQ0FMTF9lbmQ6Ci0KLQkuZ2xvYmwgX2ZmaV9jbG9zdXJlX1NURENBTEwKLV9mZmlfY2xvc3VyZV9TVERDQUxMOgotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsICVlYnAKLQlzdWJsCSQ0MCwgJWVzcAotCWxlYWwJLTI0KCVlYnApLCAlZWR4Ci0JbW92bAklZWR4LCAtMTIoJWVicCkJLyogcmVzcCAqLwotCWxlYWwJMTIoJWVicCksICVlZHggIC8qIGFjY291bnQgZm9yIHN0dWIgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2sgKi8KLQltb3ZsCSVlZHgsIDQoJWVzcCkJLyogYXJncyAqLwotCWxlYWwJLTEyKCVlYnApLCAlZWR4Ci0JbW92bAklZWR4LCAoJWVzcCkJLyogJnJlc3AgKi8KLQljYWxsCV9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCi0JbW92bAktMTIoJWVicCksICVlY3gKLQlqbXAgICAgIC5MY2xzX3JldHVybl9yZXN1bHQKLS5mZmlfY2xvc3VyZV9TVERDQUxMX2VuZDoKLQotCS5nbG9ibCBfZmZpX2Nsb3N1cmVfU1lTVgorICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgorICAgICAgICAuYmFsaWduIDE2CisJLmdsb2JsCV9mZmlfY2xvc3VyZV9TWVNWCisJLmRlZglfZmZpX2Nsb3N1cmVfU1lTVjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiBfZmZpX2Nsb3N1cmVfU1lTVjoKKy5MRkIzOgogCXB1c2hsCSVlYnAKKy5MQ0ZJNDoKIAltb3ZsCSVlc3AsICVlYnAKKy5MQ0ZJNToKIAlzdWJsCSQ0MCwgJWVzcAogCWxlYWwJLTI0KCVlYnApLCAlZWR4CiAJbW92bAklZWR4LCAtMTIoJWVicCkJLyogcmVzcCAqLwpAQCAtMjg4LDQ4ICs1NjMsMTAwIEBACiAJbW92bAklZWR4LCAoJWVzcCkJLyogJnJlc3AgKi8KIAljYWxsCV9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCiAJbW92bAktMTIoJWVicCksICVlY3gKLS5MY2xzX3JldHVybl9yZXN1bHQ6Ci0JY21wbAkkRkZJX1RZUEVfSU5ULCAlZWF4Ci0JamUJLkxjbHNfcmV0aW50Ci0JY21wbAkkRkZJX1RZUEVfRkxPQVQsICVlYXgKLQlqZQkuTGNsc19yZXRmbG9hdAotCWNtcGwJJEZGSV9UWVBFX0RPVUJMRSwgJWVheAotCWplCS5MY2xzX3JldGRvdWJsZQotCWNtcGwJJEZGSV9UWVBFX0xPTkdET1VCTEUsICVlYXgKLQlqZQkuTGNsc19yZXRsZG91YmxlCi0JY21wbAkkRkZJX1RZUEVfU0lOVDY0LCAlZWF4Ci0JamUJLkxjbHNfcmV0bGxvbmcKLQljbXBsCSRGRklfVFlQRV9TSU5UOCwgJWVheAkvKiAxLWJ5dGUgc3RydWN0ICovCi0JamUJLkxjbHNfcmV0c3RydWN0MQotCWNtcGwJJEZGSV9UWVBFX1NJTlQxNiwgJWVheAkvKiAyLWJ5dGVzIHN0cnVjdCAqLwotCWplCS5MY2xzX3JldHN0cnVjdDIKLS5MY2xzX2VwaWxvZ3VlOgotCW1vdmwJJWVicCwgJWVzcAotCXBvcGwJJWVicAotCXJldAorCiswOgorCWNhbGwJMWYKKwkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KKy5MY2xzX3N0b3JlX3RhYmxlOgorCS5sb25nCS5MY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTGNsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTGNsc19yZXRkb3VibGUJCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5MY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5MY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5MY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5MY2xzX3JldHVpbnQxNgkJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxjbHNfcmV0c2ludDE2CQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5MY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3QJCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworCisxOgorCWFkZAklZWF4LCAlZWF4CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwlhZGQJJDQsICVlc3AKKwlqbXAJKiglZWF4KQorCisJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCisuTGNsc19yZXRzaW50ODoKKwltb3ZzYmwJKCVlY3gpLCAlZWF4CisJam1wCS5MY2xzX2VwaWxvZ3VlCisKKy5MY2xzX3JldHNpbnQxNjoKKwltb3Zzd2wJKCVlY3gpLCAlZWF4CisJam1wCS5MY2xzX2VwaWxvZ3VlCisKKy5MY2xzX3JldHVpbnQ4OgorCW1vdnpibAkoJWVjeCksICVlYXgKKwlqbXAJLkxjbHNfZXBpbG9ndWUKKworLkxjbHNfcmV0dWludDE2OgorCW1vdnp3bAkoJWVjeCksICVlYXgKKwlqbXAJLkxjbHNfZXBpbG9ndWUKKwogLkxjbHNfcmV0aW50OgogCW1vdmwJKCVlY3gpLCAlZWF4CiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldGZsb2F0OgogCWZsZHMJKCVlY3gpCiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldGRvdWJsZToKIAlmbGRsCSglZWN4KQogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRsZG91YmxlOgogCWZsZHQJKCVlY3gpCiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldGxsb25nOgogCW1vdmwJKCVlY3gpLCAlZWF4CiAJbW92bAk0KCVlY3gpLCAlZWR4CiAJam1wCS5MY2xzX2VwaWxvZ3VlCisKIC5MY2xzX3JldHN0cnVjdDE6CiAJbW92c2JsCSglZWN4KSwgJWVheAogCWptcAkuTGNsc19lcGlsb2d1ZQorCiAuTGNsc19yZXRzdHJ1Y3QyOgogCW1vdnN3bAkoJWVjeCksICVlYXgKIAlqbXAJLkxjbHNfZXBpbG9ndWUKKworLkxjbHNfcmV0c3RydWN0NDoKKwltb3ZsCSglZWN4KSwgJWVheAorCWptcAkuTGNsc19lcGlsb2d1ZQorCisuTGNsc19yZXRzdHJ1Y3Q6CisgICAgICAgICMgQ2FsbGVyIGV4cGVjdHMgdXMgdG8gcG9wIHN0cnVjdCByZXR1cm4gdmFsdWUgcG9pbnRlciBoaWRkZW4gYXJnLgorCW1vdmwJJWVicCwgJWVzcAorCXBvcGwJJWVicAorCXJldAkkMHg0CisKKy5MY2xzX25vcmV0dmFsOgorLkxjbHNfZXBpbG9ndWU6CisJbW92bAklZWJwLCAlZXNwCisJcG9wbAklZWJwCisJcmV0CiAuZmZpX2Nsb3N1cmVfU1lTVl9lbmQ6CisuTEZFMzoKIAogI2lmICFGRklfTk9fUkFXX0FQSQogCkBAIC0zMzgsMTIgKzY2NSwxOCBAQAogI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIChSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUICsgNCkKICNkZWZpbmUgQ0lGX0ZMQUdTX09GRlNFVCAyMAogCi0JLmJhbGlnbgkxNgotCS5nbG9ibCBfZmZpX2Nsb3N1cmVfcmF3X1NZU1YKKyAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KKyAgICAgICAgLmJhbGlnbiAxNgorCS5nbG9ibAlfZmZpX2Nsb3N1cmVfcmF3X1NZU1YKKwkuZGVmCV9mZmlfY2xvc3VyZV9yYXdfU1lTVjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiBfZmZpX2Nsb3N1cmVfcmF3X1NZU1Y6CisuTEZCNDoKIAlwdXNobAklZWJwCisuTENGSTY6CiAJbW92bAklZXNwLCAlZWJwCisuTENGSTc6CiAJcHVzaGwJJWVzaQorLkxDRkk4OgogCXN1YmwJJDM2LCAlZXNwCiAJbW92bAlSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VUKCVlYXgpLCAlZXNpCSAvKiBjbG9zdXJlLT5jaWYgKi8KIAltb3ZsCVJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQoJWVheCksICVlZHggLyogY2xvc3VyZS0+dXNlcl9kYXRhICovCkBAIC0zNTUsMzcgKzY4OCwzNjggQEAKIAltb3ZsCSVlc2ksICglZXNwKQkvKiBjaWYgKi8KIAljYWxsCSpSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUKCVlYXgpCQkgLyogY2xvc3VyZS0+ZnVuICovCiAJbW92bAlDSUZfRkxBR1NfT0ZGU0VUKCVlc2kpLCAlZWF4CQkgLyogcnR5cGUgKi8KLQljbXBsCSRGRklfVFlQRV9JTlQsICVlYXgKLQlqZQkuTHJjbHNfcmV0aW50Ci0JY21wbAkkRkZJX1RZUEVfRkxPQVQsICVlYXgKLQlqZQkuTHJjbHNfcmV0ZmxvYXQKLQljbXBsCSRGRklfVFlQRV9ET1VCTEUsICVlYXgKLQlqZQkuTHJjbHNfcmV0ZG91YmxlCi0JY21wbAkkRkZJX1RZUEVfTE9OR0RPVUJMRSwgJWVheAotCWplCS5McmNsc19yZXRsZG91YmxlCi0JY21wbAkkRkZJX1RZUEVfU0lOVDY0LCAlZWF4Ci0JamUJLkxyY2xzX3JldGxsb25nCiswOgorCWNhbGwJMWYKKwkjIERvIG5vdCBpbnNlcnQgYW55dGhpbmcgaGVyZSBiZXR3ZWVuIHRoZSBjYWxsIGFuZCB0aGUganVtcCB0YWJsZS4KKy5McmNsc19zdG9yZV90YWJsZToKKwkubG9uZwkuTHJjbHNfbm9yZXR2YWwJCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHJjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHJjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxyY2xzX3JldGRvdWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGRvdWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxyY2xzX3JldHVpbnQ4CQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5McmNsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KKwkubG9uZwkuTHJjbHNfcmV0dWludDE2CS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5McmNsc19yZXRzaW50MTYJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxyY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QJLyogRkZJX1RZUEVfU1RSVUNUICovCisJLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QyCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3Q0CS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworMToKKwlhZGQJJWVheCwgJWVheAorCWFkZAklZWF4LCAlZWF4CisJYWRkCSglZXNwKSwlZWF4CisJYWRkCSQ0LCAlZXNwCisJam1wCSooJWVheCkKKworCS8qIFNpZ24vemVybyBleHRlbmQgYXMgYXBwcm9wcmlhdGUuICAqLworLkxyY2xzX3JldHNpbnQ4OgorCW1vdnNibAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRzaW50MTY6CisJbW92c3dsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldHVpbnQ4OgorCW1vdnpibAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXR1aW50MTY6CisJbW92endsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldGludDoKKwltb3ZsCS0yNCglZWJwKSwgJWVheAorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldGZsb2F0OgorCWZsZHMJLTI0KCVlYnApCisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0ZG91YmxlOgorCWZsZGwJLTI0KCVlYnApCisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0bGRvdWJsZToKKwlmbGR0CS0yNCglZWJwKQorCWptcAkuTHJjbHNfZXBpbG9ndWUKKworLkxyY2xzX3JldGxsb25nOgorCW1vdmwJLTI0KCVlYnApLCAlZWF4CisJbW92bAktMjAoJWVicCksICVlZHgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRzdHJ1Y3QxOgorCW1vdnNibAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRzdHJ1Y3QyOgorCW1vdnN3bAktMjQoJWVicCksICVlYXgKKwlqbXAJLkxyY2xzX2VwaWxvZ3VlCisKKy5McmNsc19yZXRzdHJ1Y3Q0OgorCW1vdmwJLTI0KCVlYnApLCAlZWF4CisJam1wCS5McmNsc19lcGlsb2d1ZQorCisuTHJjbHNfcmV0c3RydWN0OgorCSMgTm90aGluZyB0byBkbyEKKworLkxyY2xzX25vcmV0dmFsOgogLkxyY2xzX2VwaWxvZ3VlOgogCWFkZGwJJDM2LCAlZXNwCiAJcG9wbAklZXNpCiAJcG9wbAklZWJwCiAJcmV0Ci0uTHJjbHNfcmV0aW50OgotCW1vdmwJLTI0KCVlYnApLCAlZWF4Ci0Jam1wCS5McmNsc19lcGlsb2d1ZQotLkxyY2xzX3JldGZsb2F0OgotCWZsZHMJLTI0KCVlYnApCi0Jam1wCS5McmNsc19lcGlsb2d1ZQotLkxyY2xzX3JldGRvdWJsZToKLQlmbGRsCS0yNCglZWJwKQotCWptcAkuTHJjbHNfZXBpbG9ndWUKLS5McmNsc19yZXRsZG91YmxlOgotCWZsZHQJLTI0KCVlYnApCi0Jam1wCS5McmNsc19lcGlsb2d1ZQotLkxyY2xzX3JldGxsb25nOgotCW1vdmwJLTI0KCVlYnApLCAlZWF4Ci0JbW92bAktMjAoJWVicCksICVlZHgKLQlqbXAJLkxyY2xzX2VwaWxvZ3VlCiAuZmZpX2Nsb3N1cmVfcmF3X1NZU1ZfZW5kOgorLkxGRTQ6CiAKKyNlbmRpZiAvKiAhRkZJX05PX1JBV19BUEkgKi8KKworICAgICAgICAjIFRoaXMgYXNzdW1lcyB3ZSBhcmUgdXNpbmcgZ2FzLgorCS5iYWxpZ24JMTYKKwkuZ2xvYmwJX2ZmaV9jbG9zdXJlX1NURENBTEwKKwkuZGVmCV9mZmlfY2xvc3VyZV9TVERDQUxMOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKK19mZmlfY2xvc3VyZV9TVERDQUxMOgorLkxGQjU6CisJcHVzaGwJJWVicAorLkxDRkk5OgorCW1vdmwJJWVzcCwgJWVicAorLkxDRkkxMDoKKwlzdWJsCSQ0MCwgJWVzcAorCWxlYWwJLTI0KCVlYnApLCAlZWR4CisJbW92bAklZWR4LCAtMTIoJWVicCkJLyogcmVzcCAqLworCWxlYWwJMTIoJWVicCksICVlZHggIC8qIGFjY291bnQgZm9yIHN0dWIgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2sgKi8KKwltb3ZsCSVlZHgsIDQoJWVzcCkJLyogYXJncyAqLworCWxlYWwJLTEyKCVlYnApLCAlZWR4CisJbW92bAklZWR4LCAoJWVzcCkJLyogJnJlc3AgKi8KKwljYWxsCV9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCisJbW92bAktMTIoJWVicCksICVlY3gKKzA6CisJY2FsbAkxZgorCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgorLkxzY2xzX3N0b3JlX3RhYmxlOgorCS5sb25nCS5Mc2Nsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5Mc2Nsc19yZXRmbG9hdAkJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHNjbHNfcmV0ZG91YmxlCS8qIEZGSV9UWVBFX0RPVUJMRSAqLworCS5sb25nCS5Mc2Nsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHNjbHNfcmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxzY2xzX3JldHNpbnQ4CQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5Mc2Nsc19yZXR1aW50MTYJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxzY2xzX3JldHNpbnQxNgkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9TSU5UMzIgKi8KKwkubG9uZwkuTHNjbHNfcmV0bGxvbmcJCS8qIEZGSV9UWVBFX1VJTlQ2NCAqLworCS5sb25nCS5Mc2Nsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdAkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDEJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDQJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisxOgorCWFkZAklZWF4LCAlZWF4CisJYWRkCSVlYXgsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwlhZGQJJDQsICVlc3AKKwlqbXAJKiglZWF4KQorCisJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCisuTHNjbHNfcmV0c2ludDg6CisJbW92c2JsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHNpbnQxNjoKKwltb3Zzd2wJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0dWludDg6CisJbW92emJsCSglZWN4KSwgJWVheAorCWptcAkuTHNjbHNfZXBpbG9ndWUKKworLkxzY2xzX3JldHVpbnQxNjoKKwltb3Z6d2wJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0aW50OgorCW1vdmwJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0ZmxvYXQ6CisJZmxkcwkoJWVjeCkKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRkb3VibGU6CisJZmxkbAkoJWVjeCkKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRsZG91YmxlOgorCWZsZHQJKCVlY3gpCisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0bGxvbmc6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCTQoJWVjeCksICVlZHgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRzdHJ1Y3QxOgorCW1vdnNibAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRzdHJ1Y3QyOgorCW1vdnN3bAkoJWVjeCksICVlYXgKKwlqbXAJLkxzY2xzX2VwaWxvZ3VlCisKKy5Mc2Nsc19yZXRzdHJ1Y3Q0OgorCW1vdmwJKCVlY3gpLCAlZWF4CisJam1wCS5Mc2Nsc19lcGlsb2d1ZQorCisuTHNjbHNfcmV0c3RydWN0OgorCSMgTm90aGluZyB0byBkbyEKKworLkxzY2xzX25vcmV0dmFsOgorLkxzY2xzX2VwaWxvZ3VlOgorCW1vdmwJJWVicCwgJWVzcAorCXBvcGwJJWVicAorCXJldAorLmZmaV9jbG9zdXJlX1NURENBTExfZW5kOgorLkxGRTU6CisKKwkuc2VjdGlvbgkuZWhfZnJhbWUsInciCisuTGZyYW1lMToKKy5MU0NJRTE6CisJLmxvbmcJLkxFQ0lFMS0uTEFTQ0lFMSAgLyogTGVuZ3RoIG9mIENvbW1vbiBJbmZvcm1hdGlvbiBFbnRyeSAqLworLkxBU0NJRTE6CisJLmxvbmcJMHgwCS8qIENJRSBJZGVudGlmaWVyIFRhZyAqLworCS5ieXRlCTB4MQkvKiBDSUUgVmVyc2lvbiAqLworI2lmZGVmIF9fUElDX18KKwkuYXNjaWkgInpSXDAiCS8qIENJRSBBdWdtZW50YXRpb24gKi8KKyNlbHNlCisJLmFzY2lpICJcMCIJLyogQ0lFIEF1Z21lbnRhdGlvbiAqLwogI2VuZGlmCisJLmJ5dGUJMHgxCS8qIC51bGViMTI4IDB4MTsgQ0lFIENvZGUgQWxpZ25tZW50IEZhY3RvciAqLworCS5ieXRlCTB4N2MJLyogLnNsZWIxMjggLTQ7IENJRSBEYXRhIEFsaWdubWVudCBGYWN0b3IgKi8KKwkuYnl0ZQkweDgJLyogQ0lFIFJBIENvbHVtbiAqLworI2lmZGVmIF9fUElDX18KKwkuYnl0ZQkweDEJLyogLnVsZWIxMjggMHgxOyBBdWdtZW50YXRpb24gc2l6ZSAqLworCS5ieXRlCTB4MWIJLyogRkRFIEVuY29kaW5nIChwY3JlbCBzZGF0YTQpICovCisjZW5kaWYKKwkuYnl0ZQkweGMJLyogRFdfQ0ZBX2RlZl9jZmEgQ0ZBID0gcjQgKyA0ID0gNCglZXNwKSAqLworCS5ieXRlCTB4NAkvKiAudWxlYjEyOCAweDQgKi8KKwkuYnl0ZQkweDQJLyogLnVsZWIxMjggMHg0ICovCisJLmJ5dGUJMHg4OAkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg4ICVlaXAgYXQgQ0ZBICsgMSAqIC00ICovCisJLmJ5dGUJMHgxCS8qIC51bGViMTI4IDB4MSAqLworCS5hbGlnbiA0CisuTEVDSUUxOgorCisuTFNGREUxOgorCS5sb25nCS5MRUZERTEtLkxBU0ZERTEJLyogRkRFIExlbmd0aCAqLworLkxBU0ZERTE6CisJLmxvbmcJLkxBU0ZERTEtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAorCS5sb25nCS5MRkIxLS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxGQjEKKyNlbmRpZgorCS5sb25nCS5MRkUxLS5MRkIxCS8qIEZERSBhZGRyZXNzIHJhbmdlICovCisjaWZkZWYgX19QSUNfXworCS5ieXRlCTB4MAkvKiAudWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplICovCisjZW5kaWYKKwkvKiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMgZ28gaGVyZS4gICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJMC0uTEZCMQorCS5ieXRlCTB4ZQkvKiBEV19DRkFfZGVmX2NmYV9vZmZzZXQgQ0ZBID0gcjQgKyA4ID0gOCglZXNwKSAqLworCS5ieXRlCTB4OAkvKiAudWxlYjEyOCAweDggKi8KKwkuYnl0ZQkweDg1CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDUgJWVicCBhdCBDRkEgKyAyICogLTQgKi8KKwkuYnl0ZQkweDIJLyogLnVsZWIxMjggMHgyICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJMS0uTENGSTAKKwkuYnl0ZQkweGQJLyogRFdfQ0ZBX2RlZl9jZmFfcmVnaXN0ZXIgQ0ZBID0gcjUgPSAlZWJwICovCisJLmJ5dGUJMHg1CS8qIC51bGViMTI4IDB4NSAqLworCisJLyogRW5kIG9mIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucy4gICovCisJLmFsaWduIDQKKy5MRUZERTE6CisKKworLkxTRkRFMzoKKwkubG9uZwkuTEVGREUzLS5MQVNGREUzCS8qIEZERSBMZW5ndGggKi8KKy5MQVNGREUzOgorCS5sb25nCS5MQVNGREUzLS5MZnJhbWUxCS8qIEZERSBDSUUgb2Zmc2V0ICovCisjaWYgZGVmaW5lZCBfX1BJQ19fICYmIGRlZmluZWQgSEFWRV9BU19YODZfUENSRUwKKwkubG9uZwkuTEZCMy0uCS8qIEZERSBpbml0aWFsIGxvY2F0aW9uICovCisjZWxzZQorCS5sb25nCS5MRkIzCisjZW5kaWYKKwkubG9uZwkuTEZFMy0uTEZCMwkvKiBGREUgYWRkcmVzcyByYW5nZSAqLworI2lmZGVmIF9fUElDX18KKwkuYnl0ZQkweDAJLyogLnVsZWIxMjggMHgwOyBBdWdtZW50YXRpb24gc2l6ZSAqLworI2VuZGlmCisJLyogRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zIGdvIGhlcmUuICAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTQtLkxGQjMKKwkuYnl0ZQkweGUJLyogRFdfQ0ZBX2RlZl9jZmFfb2Zmc2V0IENGQSA9IHI0ICsgOCA9IDgoJWVzcCkgKi8KKwkuYnl0ZQkweDgJLyogLnVsZWIxMjggMHg4ICovCisJLmJ5dGUJMHg4NQkvKiBEV19DRkFfb2Zmc2V0LCBjb2x1bW4gMHg1ICVlYnAgYXQgQ0ZBICsgMiAqIC00ICovCisJLmJ5dGUJMHgyCS8qIC51bGViMTI4IDB4MiAqLworCisJLmJ5dGUJMHg0CS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KKwkubG9uZwkuTENGSTUtLkxDRkk0CisJLmJ5dGUJMHhkCS8qIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyIENGQSA9IHI1ID0gJWVicCAqLworCS5ieXRlCTB4NQkvKiAudWxlYjEyOCAweDUgKi8KKworCS8qIEVuZCBvZiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMuICAqLworCS5hbGlnbiA0CisuTEVGREUzOgorCisjaWYgIUZGSV9OT19SQVdfQVBJCisKKy5MU0ZERTQ6CisJLmxvbmcJLkxFRkRFNC0uTEFTRkRFNAkvKiBGREUgTGVuZ3RoICovCisuTEFTRkRFNDoKKwkubG9uZwkuTEFTRkRFNC0uTGZyYW1lMQkvKiBGREUgQ0lFIG9mZnNldCAqLworI2lmIGRlZmluZWQgX19QSUNfXyAmJiBkZWZpbmVkIEhBVkVfQVNfWDg2X1BDUkVMCisJLmxvbmcJLkxGQjQtLgkvKiBGREUgaW5pdGlhbCBsb2NhdGlvbiAqLworI2Vsc2UKKwkubG9uZwkuTEZCNAorI2VuZGlmCisJLmxvbmcJLkxGRTQtLkxGQjQJLyogRkRFIGFkZHJlc3MgcmFuZ2UgKi8KKyNpZmRlZiBfX1BJQ19fCisJLmJ5dGUJMHgwCS8qIC51bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUgKi8KKyNlbmRpZgorCS8qIERXX0NGQV94eHggQ0ZJIGluc3RydWN0aW9ucyBnbyBoZXJlLiAgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk2LS5MRkI0CisJLmJ5dGUJMHhlCS8qIERXX0NGQV9kZWZfY2ZhX29mZnNldCBDRkEgPSByNCArIDggPSA4KCVlc3ApICovCisJLmJ5dGUJMHg4CS8qIC51bGViMTI4IDB4OCAqLworCS5ieXRlCTB4ODUJLyogRFdfQ0ZBX29mZnNldCwgY29sdW1uIDB4NSAlZWJwIGF0IENGQSArIDIgKiAtNCAqLworCS5ieXRlCTB4MgkvKiAudWxlYjEyOCAweDIgKi8KKworCS5ieXRlCTB4NAkvKiBEV19DRkFfYWR2YW5jZV9sb2M0ICovCisJLmxvbmcJLkxDRkk3LS5MQ0ZJNgorCS5ieXRlCTB4ZAkvKiBEV19DRkFfZGVmX2NmYV9yZWdpc3RlciBDRkEgPSByNSA9ICVlYnAgKi8KKwkuYnl0ZQkweDUJLyogLnVsZWIxMjggMHg1ICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJOC0uTENGSTcKKwkuYnl0ZQkweDg2CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDYgJWVzaSBhdCBDRkEgKyAzICogLTQgKi8KKwkuYnl0ZQkweDMJLyogLnVsZWIxMjggMHgzICovCisKKwkvKiBFbmQgb2YgRFdfQ0ZBX3h4eCBDRkkgaW5zdHJ1Y3Rpb25zLiAgKi8KKwkuYWxpZ24gNAorLkxFRkRFNDoKKworI2VuZGlmIC8qICFGRklfTk9fUkFXX0FQSSAqLworCisuTFNGREU1OgorCS5sb25nCS5MRUZERTUtLkxBU0ZERTUJLyogRkRFIExlbmd0aCAqLworLkxBU0ZERTU6CisJLmxvbmcJLkxBU0ZERTUtLkxmcmFtZTEJLyogRkRFIENJRSBvZmZzZXQgKi8KKyNpZiBkZWZpbmVkIF9fUElDX18gJiYgZGVmaW5lZCBIQVZFX0FTX1g4Nl9QQ1JFTAorCS5sb25nCS5MRkI1LS4JLyogRkRFIGluaXRpYWwgbG9jYXRpb24gKi8KKyNlbHNlCisJLmxvbmcJLkxGQjUKKyNlbmRpZgorCS5sb25nCS5MRkU1LS5MRkI1CS8qIEZERSBhZGRyZXNzIHJhbmdlICovCisjaWZkZWYgX19QSUNfXworCS5ieXRlCTB4MAkvKiAudWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplICovCisjZW5kaWYKKwkvKiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMgZ28gaGVyZS4gICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJOS0uTEZCNQorCS5ieXRlCTB4ZQkvKiBEV19DRkFfZGVmX2NmYV9vZmZzZXQgQ0ZBID0gcjQgKyA4ID0gOCglZXNwKSAqLworCS5ieXRlCTB4OAkvKiAudWxlYjEyOCAweDggKi8KKwkuYnl0ZQkweDg1CS8qIERXX0NGQV9vZmZzZXQsIGNvbHVtbiAweDUgJWVicCBhdCBDRkEgKyAyICogLTQgKi8KKwkuYnl0ZQkweDIJLyogLnVsZWIxMjggMHgyICovCisKKwkuYnl0ZQkweDQJLyogRFdfQ0ZBX2FkdmFuY2VfbG9jNCAqLworCS5sb25nCS5MQ0ZJMTAtLkxDRkk5CisJLmJ5dGUJMHhkCS8qIERXX0NGQV9kZWZfY2ZhX3JlZ2lzdGVyIENGQSA9IHI1ID0gJWVicCAqLworCS5ieXRlCTB4NQkvKiAudWxlYjEyOCAweDUgKi8KKworCS8qIEVuZCBvZiBEV19DRkFfeHh4IENGSSBpbnN0cnVjdGlvbnMuICAqLworCS5hbGlnbiA0CisuTEVGREU1OgorCisjZW5kaWYgLyogIV9NU0NfVkVSICovCisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW42NC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3dpbjY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU5MTgxOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW42NC5TCkBAIC0wLDAgKzEsNDYwIEBACisjZGVmaW5lIExJQkZGSV9BU00KKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKwkKKy8qIENvbnN0YW50cyBmb3IgZmZpX2NhbGxfd2luNjQgKi8JCisjZGVmaW5lIFNUQUNLIDAKKyNkZWZpbmUgUFJFUF9BUkdTX0ZOIDMyCisjZGVmaW5lIEVDSUYgNDAKKyNkZWZpbmUgQ0lGX0JZVEVTIDQ4CisjZGVmaW5lIENJRl9GTEFHUyA1NgorI2RlZmluZSBSVkFMVUUgNjQKKyNkZWZpbmUgRk4gNzIKKworLyogZmZpX2NhbGxfd2luNjQgKHZvaWQgKCpwcmVwX2FyZ3NfZm4pKGNoYXIgKiwgZXh0ZW5kZWRfY2lmICopLAorICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgYnl0ZXMsIHVuc2lnbmVkIGZsYWdzLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkICpydmFsdWUsIHZvaWQgKCpmbikoKSk7CisgKi8KKworI2lmZGVmIF9NU0NfVkVSCitQVUJMSUMJZmZpX2NhbGxfd2luNjQKKworRVhUUk4JX19jaGtzdGs6TkVBUgorRVhUUk4JZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXI6TkVBUgorCitfVEVYVAlTRUdNRU5UCisKKzs7OyBmZmlfY2xvc3VyZV93aW42NCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZXNlIHJlZ2lzdGVycyBzZXQ6Cis7OzsgICAgcmF4IHBvaW50cyB0byAnY2xvc3VyZScKKzs7OyAgICByMTEgY29udGFpbnMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBvZiB0aGUKKzs7OyAgICBmaXJzdCBmb3VyIHBhcmFtZXRlcnMgYXJlIGZsb2F0IG9yIGRvdWJsZQorOzs7Cis7OzsgSXQgbXVzdCBtb3ZlIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCBpbiByZWdpc3RlcnMgdG8gdGhlaXIgc3RhY2sgbG9jYXRpb24sCis7OzsgY2FsbCBmZmlfY2xvc3VyZV93aW42NF9pbm5lciBmb3IgdGhlIGFjdHVhbCB3b3JrLCB0aGVuIHJldHVybiB0aGUgcmVzdWx0LgorOzs7IAorZmZpX2Nsb3N1cmVfd2luNjQgUFJPQyBGUkFNRQorCTs7IGNvcHkgcmVnaXN0ZXIgYXJndW1lbnRzIG9udG8gc3RhY2sKKwl0ZXN0CXIxMSwgMQorCWpuZQlmaXJzdF9pc19mbG9hdAkKKwltb3YJUVdPUkQgUFRSIFtyc3ArOF0sIHJjeAorCWptcAlzZWNvbmQKK2ZpcnN0X2lzX2Zsb2F0OgorCW1vdmxwZAlRV09SRCBQVFIgW3JzcCs4XSwgeG1tMAorCitzZWNvbmQ6CisJdGVzdAlyMTEsIDIKKwlqbmUJc2Vjb25kX2lzX2Zsb2F0CQorCW1vdglRV09SRCBQVFIgW3JzcCsxNl0sIHJkeAorCWptcAl0aGlyZAorc2Vjb25kX2lzX2Zsb2F0OgorCW1vdmxwZAlRV09SRCBQVFIgW3JzcCsxNl0sIHhtbTEKKwordGhpcmQ6CisJdGVzdAlyMTEsIDQKKwlqbmUJdGhpcmRfaXNfZmxvYXQJCisJbW92CVFXT1JEIFBUUiBbcnNwKzI0XSwgcjgKKwlqbXAJZm91cnRoCit0aGlyZF9pc19mbG9hdDoKKwltb3ZscGQJUVdPUkQgUFRSIFtyc3ArMjRdLCB4bW0yCisKK2ZvdXJ0aDoKKwl0ZXN0CXIxMSwgOAorCWpuZQlmb3VydGhfaXNfZmxvYXQJCisJbW92CVFXT1JEIFBUUiBbcnNwKzMyXSwgcjkKKwlqbXAJZG9uZQorZm91cnRoX2lzX2Zsb2F0OgorCW1vdmxwZAlRV09SRCBQVFIgW3JzcCszMl0sIHhtbTMKKworZG9uZToKKyAgICAgICAgLkFMTE9DU1RBQ0sgNDAKKwlzdWIJcnNwLCA0MAorICAgICAgICAuRU5EUFJPTE9HCisJbW92CXJjeCwgcmF4CTsgY29udGV4dCBpcyBmaXJzdCBwYXJhbWV0ZXIKKwltb3YJcmR4LCByc3AJOyBzdGFjayBpcyBzZWNvbmQgcGFyYW1ldGVyCisJYWRkCXJkeCwgNDgJCTsgcG9pbnQgdG8gc3RhcnQgb2YgYXJndW1lbnRzCisJbW92CXJheCwgZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIKKwljYWxsCXJheAkJOyBjYWxsIHRoZSByZWFsIGNsb3N1cmUgZnVuY3Rpb24KKwlhZGQJcnNwLCA0MAorCW1vdmQJeG1tMCwgcmF4CTsgSWYgdGhlIGNsb3N1cmUgcmV0dXJuZWQgYSBmbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmZmlfY2xvc3VyZV93aW42NF9pbm5lciB3cm90ZSBpdCB0byByYXgKKwlyZXQJMAorZmZpX2Nsb3N1cmVfd2luNjQgRU5EUAorCitmZmlfY2FsbF93aW42NCBQUk9DIEZSQU1FCisgICAgICAgIDs7IGNvcHkgcmVnaXN0ZXJzIG9udG8gc3RhY2sKKwltb3YJUVdPUkQgUFRSIFtyc3ArMzJdLCByOQorCW1vdglRV09SRCBQVFIgW3JzcCsyNF0sIHI4CisJbW92CVFXT1JEIFBUUiBbcnNwKzE2XSwgcmR4CisJbW92CVFXT1JEIFBUUiBbcnNwKzhdLCByY3gKKyAgICAgICAgLlBVU0hSRUcgcmJwCisJcHVzaAlyYnAKKyAgICAgICAgLkFMTE9DU1RBQ0sgNDgKKwlzdWIJcnNwLCA0OAkJCQkJOyAwMDAwMDAzMEgKKyAgICAgICAgLlNFVEZSQU1FIHJicCwgMzIKKwlsZWEJcmJwLCBRV09SRCBQVFIgW3JzcCszMl0KKyAgICAgICAgLkVORFBST0xPRworCisJbW92CWVheCwgRFdPUkQgUFRSIENJRl9CWVRFU1tyYnBdCisJYWRkCXJheCwgMTUKKwlhbmQJcmF4LCAtMTYKKwljYWxsCV9fY2hrc3RrCisJc3ViCXJzcCwgcmF4CisJbGVhCXJheCwgUVdPUkQgUFRSIFtyc3ArMzJdCisJbW92CVFXT1JEIFBUUiBTVEFDS1tyYnBdLCByYXgKKworCW1vdglyZHgsIFFXT1JEIFBUUiBFQ0lGW3JicF0KKwltb3YJcmN4LCBRV09SRCBQVFIgU1RBQ0tbcmJwXQorCWNhbGwJUVdPUkQgUFRSIFBSRVBfQVJHU19GTltyYnBdCisKKwltb3YJcnNwLCBRV09SRCBQVFIgU1RBQ0tbcmJwXQorCisJbW92bHBkCXhtbTMsIFFXT1JEIFBUUiBbcnNwKzI0XQorCW1vdmQJcjksIHhtbTMKKworCW1vdmxwZAl4bW0yLCBRV09SRCBQVFIgW3JzcCsxNl0KKwltb3ZkCXI4LCB4bW0yCisKKwltb3ZscGQJeG1tMSwgUVdPUkQgUFRSIFtyc3ArOF0KKwltb3ZkCXJkeCwgeG1tMQorCisJbW92bHBkCXhtbTAsIFFXT1JEIFBUUiBbcnNwXQorCW1vdmQJcmN4LCB4bW0wCisKKwljYWxsCVFXT1JEIFBUUiBGTltyYnBdCityZXRfc3RydWN0NGIkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIKKyAJam5lCXJldF9zdHJ1Y3QyYiQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdglEV09SRCBQVFIgW3JjeF0sIGVheAorCWptcAlyZXRfdm9pZCQKKworcmV0X3N0cnVjdDJiJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCCisgCWpuZQlyZXRfc3RydWN0MWIkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3YJV09SRCBQVFIgW3JjeF0sIGF4CisJam1wCXJldF92b2lkJAorCityZXRfc3RydWN0MWIkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIKKyAJam5lCXJldF91aW50OCQKKworCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorCW1vdglCWVRFIFBUUiBbcmN4XSwgYWwKKwlqbXAJcmV0X3ZvaWQkCisKK3JldF91aW50OCQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1VJTlQ4CisgCWpuZQlyZXRfc2ludDgkCisKKwltb3YJcmN4LCBRV09SRCBQVFIgUlZBTFVFW3JicF0KKwltb3Z6eCAgIHJheCwgYWwKKwltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKwlqbXAJcmV0X3ZvaWQkCisKK3JldF9zaW50OCQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NJTlQ4CisgCWpuZQlyZXRfdWludDE2JAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92c3ggICByYXgsIGFsCisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCXJldF92b2lkJAorCityZXRfdWludDE2JDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfVUlOVDE2CisgCWpuZQlyZXRfc2ludDE2JAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92enggICByYXgsIGF4CisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfc2ludDE2JDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfU0lOVDE2CisgCWpuZQlyZXRfdWludDMyJAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92c3ggICByYXgsIGF4CisJbW92CVFXT1JEIFBUUiBbcmN4XSwgcmF4CisJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfdWludDMyJDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfVUlOVDMyCisgCWpuZQlyZXRfc2ludDMyJAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJbW92ICAgICBlYXgsIGVheAorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X3NpbnQzMiQ6CisgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NJTlQzMgorIAlqbmUJcmV0X2Zsb2F0JAorCisJbW92CXJjeCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisJY2RxZQorCW1vdglRV09SRCBQVFIgW3JjeF0sIHJheAorCWptcAlTSE9SVCByZXRfdm9pZCQKKworcmV0X2Zsb2F0JDoKKyAJY21wCURXT1JEIFBUUiBDSUZfRkxBR1NbcmJwXSwgRkZJX1RZUEVfRkxPQVQKKyAJam5lCVNIT1JUIHJldF9kb3VibGUkCisKKyAJbW92CXJheCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisgCW1vdnNzCURXT1JEIFBUUiBbcmF4XSwgeG1tMAorIAlqbXAJU0hPUlQgcmV0X3ZvaWQkCisKK3JldF9kb3VibGUkOgorIAljbXAJRFdPUkQgUFRSIENJRl9GTEFHU1tyYnBdLCBGRklfVFlQRV9ET1VCTEUKKyAJam5lCVNIT1JUIHJldF9zaW50NjQkCisKKyAJbW92CXJheCwgUVdPUkQgUFRSIFJWQUxVRVtyYnBdCisgCW1vdmxwZAlRV09SRCBQVFIgW3JheF0sIHhtbTAKKyAJam1wCVNIT1JUIHJldF92b2lkJAorCityZXRfc2ludDY0JDoKKyAgCWNtcAlEV09SRCBQVFIgQ0lGX0ZMQUdTW3JicF0sIEZGSV9UWVBFX1NJTlQ2NAorICAJam5lCXJldF92b2lkJAorCisgCW1vdglyY3gsIFFXT1JEIFBUUiBSVkFMVUVbcmJwXQorIAltb3YJUVdPUkQgUFRSIFtyY3hdLCByYXgKKyAJam1wCVNIT1JUIHJldF92b2lkJAorCQorcmV0X3ZvaWQkOgorCXhvcglyYXgsIHJheAorCisJbGVhCXJzcCwgUVdPUkQgUFRSIFtyYnArMTZdCisJcG9wCXJicAorCXJldAkwCitmZmlfY2FsbF93aW42NCBFTkRQCitfVEVYVAlFTkRTCitFTkQKKyNlbHNlICAgICAgICAKKy50ZXh0CisKKy5leHRlcm4gX2ZmaV9jbG9zdXJlX3dpbjY0X2lubmVyCisKKyMgZmZpX2Nsb3N1cmVfd2luNjQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGVzZSByZWdpc3RlcnMgc2V0OgorIyAgICByYXggcG9pbnRzIHRvICdjbG9zdXJlJworIyAgICByMTEgY29udGFpbnMgYSBiaXQgbWFzayB0aGF0IHNwZWNpZmllcyB3aGljaCBvZiB0aGUKKyMgICAgZmlyc3QgZm91ciBwYXJhbWV0ZXJzIGFyZSBmbG9hdCBvciBkb3VibGUKKyMKKyMgSXQgbXVzdCBtb3ZlIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCBpbiByZWdpc3RlcnMgdG8gdGhlaXIgc3RhY2sgbG9jYXRpb24sCisjIGNhbGwgZmZpX2Nsb3N1cmVfd2luNjRfaW5uZXIgZm9yIHRoZSBhY3R1YWwgd29yaywgdGhlbiByZXR1cm4gdGhlIHJlc3VsdC4KKyMgCisJLmJhbGlnbiAxNgorICAgICAgICAuZ2xvYmwgX2ZmaV9jbG9zdXJlX3dpbjY0CQorX2ZmaV9jbG9zdXJlX3dpbjY0OiAgICAgCisJIyBjb3B5IHJlZ2lzdGVyIGFyZ3VtZW50cyBvbnRvIHN0YWNrCisJdGVzdAkkMSwlcjExCisJam5lCS5MZmlyc3RfaXNfZmxvYXQJCisJbW92CSVyY3gsIDgoJXJzcCkKKwlqbXAJLkxzZWNvbmQKKy5MZmlyc3RfaXNfZmxvYXQ6CisJbW92bHBkCSV4bW0wLCA4KCVyc3ApCisKKy5Mc2Vjb25kOgorCXRlc3QJJDIsICVyMTEKKwlqbmUJLkxzZWNvbmRfaXNfZmxvYXQJCisJbW92CSVyZHgsIDE2KCVyc3ApCisJam1wCS5MdGhpcmQKKy5Mc2Vjb25kX2lzX2Zsb2F0OgorCW1vdmxwZAkleG1tMSwgMTYoJXJzcCkKKworLkx0aGlyZDoKKwl0ZXN0CSQ0LCAlcjExCisJam5lCS5MdGhpcmRfaXNfZmxvYXQJCisJbW92CSVyOCwyNCglcnNwKQorCWptcAkuTGZvdXJ0aAorLkx0aGlyZF9pc19mbG9hdDoKKwltb3ZscGQJJXhtbTIsIDI0KCVyc3ApCisKKy5MZm91cnRoOgorCXRlc3QJJDgsICVyMTEKKwlqbmUJLkxmb3VydGhfaXNfZmxvYXQJCisJbW92CSVyOSwgMzIoJXJzcCkKKwlqbXAJLkxkb25lCisuTGZvdXJ0aF9pc19mbG9hdDoKKwltb3ZscGQJJXhtbTMsIDMyKCVyc3ApCisKKy5MZG9uZToKKyMuQUxMT0NTVEFDSyA0MAorCXN1YgkkNDAsICVyc3AKKyMuRU5EUFJPTE9HCisJbW92CSVyYXgsICVyY3gJIyBjb250ZXh0IGlzIGZpcnN0IHBhcmFtZXRlcgorCW1vdgklcnNwLCAlcmR4CSMgc3RhY2sgaXMgc2Vjb25kIHBhcmFtZXRlcgorCWFkZAkkNDgsICVyZHgJIyBwb2ludCB0byBzdGFydCBvZiBhcmd1bWVudHMKKwltb3YJJF9mZmlfY2xvc3VyZV93aW42NF9pbm5lciwgJXJheAorCWNhbGxxCSolcmF4CQkjIGNhbGwgdGhlIHJlYWwgY2xvc3VyZSBmdW5jdGlvbgorCWFkZAkkNDAsICVyc3AKKwltb3ZxCSVyYXgsICV4bW0wCSMgSWYgdGhlIGNsb3N1cmUgcmV0dXJuZWQgYSBmbG9hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmZmlfY2xvc3VyZV93aW42NF9pbm5lciB3cm90ZSBpdCB0byByYXgKKwlyZXRxCisuZmZpX2Nsb3N1cmVfd2luNjRfZW5kOgorCisJLmJhbGlnbiAxNgorICAgICAgICAuZ2xvYmwJX2ZmaV9jYWxsX3dpbjY0CitfZmZpX2NhbGxfd2luNjQ6ICAgICAgICAKKyAgICAgICAgIyBjb3B5IHJlZ2lzdGVycyBvbnRvIHN0YWNrCisJbW92CSVyOSwzMiglcnNwKQorCW1vdgklcjgsMjQoJXJzcCkKKwltb3YJJXJkeCwxNiglcnNwKQorCW1vdgklcmN4LDgoJXJzcCkKKyAgICAgICAgIy5QVVNIUkVHIHJicAorCXB1c2gJJXJicAorICAgICAgICAjLkFMTE9DU1RBQ0sgNDgKKwlzdWIJJDQ4LCVyc3AKKyAgICAgICAgIy5TRVRGUkFNRSByYnAsIDMyCisJbGVhCTMyKCVyc3ApLCVyYnAKKyAgICAgICAgIy5FTkRQUk9MT0cKKworCW1vdglDSUZfQllURVMoJXJicCksJWVheAorCWFkZAkkMTUsICVyYXgKKwlhbmQJJC0xNiwgJXJheAorCWNtcHEJJDB4MTAwMCwgJXJheAorCWpiCUxjaF9kb25lCitMY2hfcHJvYmU6CisJc3VicQkkMHgxMDAwLCVyc3AKKwlvcmwJJDB4MCwgKCVyc3ApCisJc3VicQkkMHgxMDAwLCVyYXgKKwljbXBxCSQweDEwMDAsJXJheAorCWphCUxjaF9wcm9iZQorTGNoX2RvbmU6CisJc3VicQklcmF4LCAlcnNwCisJb3JsCSQweDAsICglcnNwKQorCWxlYQkzMiglcnNwKSwgJXJheAorCW1vdgklcmF4LCBTVEFDSyglcmJwKQorCisJbW92CUVDSUYoJXJicCksICVyZHgKKwltb3YJU1RBQ0soJXJicCksICVyY3gKKwljYWxscQkqUFJFUF9BUkdTX0ZOKCVyYnApCisKKwltb3YJU1RBQ0soJXJicCksICVyc3AKKworCW1vdmxwZAkyNCglcnNwKSwgJXhtbTMKKwltb3ZkCSV4bW0zLCAlcjkKKworCW1vdmxwZAkxNiglcnNwKSwgJXhtbTIKKwltb3ZkCSV4bW0yLCAlcjgKKworCW1vdmxwZAk4KCVyc3ApLCAleG1tMQorCW1vdmQJJXhtbTEsICVyZHgKKworCW1vdmxwZAkoJXJzcCksICV4bW0wCisJbW92ZAkleG1tMCwgJXJjeAorCisJY2FsbHEJKkZOKCVyYnApCisuTHJldF9zdHJ1Y3Q0YjoKKyAJY21wbAkkRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCLCBDSUZfRkxBR1MoJXJicCkKKyAJam5lIC5McmV0X3N0cnVjdDJiCisKKwltb3YJUlZBTFVFKCVyYnApLCAlcmN4CisJbW92CSVlYXgsICglcmN4KQorCWptcAkuTHJldF92b2lkCisKKy5McmV0X3N0cnVjdDJiOgorCWNtcGwJJEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3N0cnVjdDFiCisJCisJbW92CVJWQUxVRSglcmJwKSwgJXJjeAorCW1vdgklYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisJCisuTHJldF9zdHJ1Y3QxYjoKKwljbXBsCSRGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIsIENJRl9GTEFHUyglcmJwKQorCWpuZSAuTHJldF91aW50OAorCQorCW1vdglSVkFMVUUoJXJicCksICVyY3gKKwltb3YJJWFsLCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF91aW50ODoKKwljbXBsCSRGRklfVFlQRV9VSU5UOCwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3NpbnQ4CisJCisgICAgICAgIG1vdiAgICAgUlZBTFVFKCVyYnApLCAlcmN4CisgICAgICAgIG1vdnpicSAgJWFsLCAlcmF4CisJbW92cSAgICAlcmF4LCAoJXJjeCkKKwlqbXAgLkxyZXRfdm9pZAorCisuTHJldF9zaW50ODoKKwljbXBsCSRGRklfVFlQRV9TSU5UOCwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3VpbnQxNgorCQorICAgICAgICBtb3YgICAgIFJWQUxVRSglcmJwKSwgJXJjeAorICAgICAgICBtb3ZzYnEgICVhbCwgJXJheAorCW1vdnEgICAgJXJheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfdWludDE2OgorCWNtcGwJJEZGSV9UWVBFX1VJTlQxNiwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3NpbnQxNgorCQorICAgICAgICBtb3YgICAgIFJWQUxVRSglcmJwKSwgJXJjeAorICAgICAgICBtb3Z6d3EgICVheCwgJXJheAorCW1vdnEgICAgJXJheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfc2ludDE2OgorCWNtcGwJJEZGSV9UWVBFX1NJTlQxNiwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3VpbnQzMgorCQorICAgICAgICBtb3YgICAgIFJWQUxVRSglcmJwKSwgJXJjeAorICAgICAgICBtb3Zzd3EgICVheCwgJXJheAorCW1vdnEgICAgJXJheCwgKCVyY3gpCisJam1wIC5McmV0X3ZvaWQKKworLkxyZXRfdWludDMyOgorCWNtcGwJJEZGSV9UWVBFX1VJTlQzMiwgQ0lGX0ZMQUdTKCVyYnApCisJam5lIC5McmV0X3NpbnQzMgorCQorICAgICAgICBtb3YgICAgIFJWQUxVRSglcmJwKSwgJXJjeAorICAgICAgICBtb3ZsICAgICVlYXgsICVlYXgKKwltb3ZxICAgICVyYXgsICglcmN4KQorCWptcCAuTHJldF92b2lkCisKKy5McmV0X3NpbnQzMjoKKyAJY21wbAkkRkZJX1RZUEVfU0lOVDMyLCBDSUZfRkxBR1MoJXJicCkKKyAJam5lCS5McmV0X2Zsb2F0CisKKwltb3YJUlZBTFVFKCVyYnApLCAlcmN4CisJY2x0cQorCW1vdnEJJXJheCwgKCVyY3gpCisJam1wCS5McmV0X3ZvaWQKKworLkxyZXRfZmxvYXQ6CisgCWNtcGwJJEZGSV9UWVBFX0ZMT0FULCBDSUZfRkxBR1MoJXJicCkKKyAJam5lCS5McmV0X2RvdWJsZQorCisgCW1vdglSVkFMVUUoJXJicCksICVyYXgKKyAJbW92c3MJJXhtbTAsICglcmF4KQorIAlqbXAJLkxyZXRfdm9pZAorCisuTHJldF9kb3VibGU6CisgCWNtcGwJJEZGSV9UWVBFX0RPVUJMRSwgQ0lGX0ZMQUdTKCVyYnApCisgCWpuZQkuTHJldF9zaW50NjQKKworIAltb3YJUlZBTFVFKCVyYnApLCAlcmF4CisgCW1vdmxwZAkleG1tMCwgKCVyYXgpCisgCWptcAkuTHJldF92b2lkCisKKy5McmV0X3NpbnQ2NDoKKyAgCWNtcGwJJEZGSV9UWVBFX1NJTlQ2NCwgQ0lGX0ZMQUdTKCVyYnApCisgIAlqbmUJLkxyZXRfdm9pZAorCisgCW1vdglSVkFMVUUoJXJicCksICVyY3gKKyAJbW92CSVyYXgsICglcmN4KQorIAlqbXAJLkxyZXRfdm9pZAorCQorLkxyZXRfdm9pZDoKKwl4b3IJJXJheCwgJXJheAorCisJbGVhCTE2KCVyYnApLCAlcnNwCisJcG9wCSVyYnAKKwlyZXRxCisuZmZpX2NhbGxfd2luNjRfZW5kOgorI2VuZGlmIC8qICFfTVNDX1ZFUiAqLworCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZTNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDgwIEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4uCisKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGRlamFnbnUKKworIyBTZXR1cCB0aGUgdGVzdGluZyBmcmFtZXdvcmssIGlmIHlvdSBoYXZlIG9uZQorRVhQRUNUID0gYGlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgXSA7IHRoZW4gXAorICAgICAgICAgICAgZWNobyAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCA7IFwKKyAgICAgICAgICBlbHNlIGVjaG8gZXhwZWN0IDsgZmlgCisKK1JVTlRFU1QgPSBgaWYgWyAtZiAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCBdIDsgdGhlbiBcCisJICAgICAgIGVjaG8gJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgOyBcCisJICAgIGVsc2UgZWNobyBydW50ZXN0OyBmaWAKKworQU1fUlVOVEVTVEZMQUdTID0KKworQ0xFQU5GSUxFUyA9ICouZXhlIGNvcmUqICoubG9nICouc3VtCisKK0VYVFJBX0RJU1QgPSBsaWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cAlcCitsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgXAorbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGNvbmZpZy9kZWZhdWx0LmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwIFwKK2xpYi9saWJmZmktZGcuZXhwIGxpYi93cmFwcGVyLmV4cCBsaWJmZmkuY2FsbC9mbG9hdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIGxpYmZmaS5jYWxsL2Zsb2F0My5jIFwKK2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMgbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgXAorbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmMgXAorbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgXAorbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfZmxvYXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jIFwKK2xpYmZmaS5jYWxsL2Nsc191aW50LmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jIFwKK2xpYmZmaS5jYWxsL2Zsb2F0MS5jIGxpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIGxpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q3LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyBcCitsaWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jIFwKK2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMgXAorbGliZmZpLmNhbGwvdGVzdGNsb3N1cmUuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgXAorbGliZmZpLmNhbGwvc3RydWN0Ni5jIGxpYmZmaS5jYWxsL3JldHVybl91Yy5jIGxpYmZmaS5jYWxsL3JldHVybl9sbDEuYyBcCitsaWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMgbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyBsaWJmZmkuY2FsbC9yZXR1cm5fc2MuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIGxpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jCVwKK2xpYmZmaS5jYWxsL3JldHVybl9sbC5jIGxpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgXAorbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYyBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIFwKK2xpYmZmaS5jYWxsL2NhbGwuZXhwIGxpYmZmaS5jYWxsL2ZmaXRlc3QuaCBsaWJmZmkuY2FsbC9zdHJsZW4uYwlcCitsaWJmZmkuY2FsbC9yZXR1cm5fc2wuYyBsaWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgXAorbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jIGxpYmZmaS5jYWxsL21hbnlfd2luMzIuYyBcCitsaWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jCVwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYyBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMJXAorbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmMgXAorbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIGxpYmZmaS5jYWxsL3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9jbHNfdWNoYXIuYyBsaWJmZmkuY2FsbC9jbHNfc2ludC5jIGxpYmZmaS5jYWxsL2Zsb2F0Mi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMgXAorbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyBsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMgXAorbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9jbHNfNWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIFwKK2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIGxpYmZmaS5jYWxsL3B5b2JqYy10Yy5jCVwKK2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyBsaWJmZmkuY2FsbC9jbHNfc2NoYXIuYyBcCitsaWJmZmkuY2FsbC9jbHNfMThieXRlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyBcCitsaWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCVwKK2xpYmZmaS5jYWxsL3N0cnVjdDIuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMJXAorbGliZmZpLmNhbGwvcHJvYmxlbTEuYyBsaWJmZmkuY2FsbC9mbG9hdDQuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgbGliZmZpLmNhbGwvc3RydWN0OS5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfNmJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfN2J5dGUuYyBsaWJmZmkuY2FsbC9tYW55LmMgXAorbGliZmZpLmNhbGwvc3RydWN0OC5jIGxpYmZmaS5jYWxsL25lZ2ludC5jIGxpYmZmaS5jYWxsL3N0cnVjdDUuYyBcCitsaWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIFwKK2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgXAorbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OThjNDYxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0ODIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTEgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmV4ZWNkaXIgPSAkKGxpYmV4ZWNkaXIpL0BQQUNLQUdFQAorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorc3ViZGlyID0gdGVzdHN1aXRlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2FjaW5jbHVkZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvZmZpY29uZmlnLmgKK0NPTkZJR19DTEVBTl9GSUxFUyA9CitDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorREVKQVRPT0wgPSAkKFBBQ0tBR0UpCitSVU5URVNUREVGQVVMVEZMQUdTID0gLS10b29sICQkdG9vbCAtLXNyY2RpciAkJHNyY2RpcgorRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FMTE9DQSA9IEBBTExPQ0FACitBTVRBUiA9IEBBTVRBUkAKK0FNX1JVTlRFU1RGTEFHUyA9IAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NBUyA9IEBDQ0FTQAorQ0NBU0RFUE1PREUgPSBAQ0NBU0RFUE1PREVACitDQ0FTRkxBR1MgPSBAQ0NBU0ZMQUdTQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0RTWU1VVElMID0gQERTWU1VVElMQAorRFVNUEJJTiA9IEBEVU1QQklOQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRkdSRVAgPSBARkdSRVBACitHUkVQID0gQEdSRVBACitIQVZFX0xPTkdfRE9VQkxFID0gQEhBVkVfTE9OR19ET1VCTEVACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK01BSU5UID0gQE1BSU5UQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitNS0RJUl9QID0gQE1LRElSX1BACitOTSA9IEBOTUAKK05NRURJVCA9IEBOTUVESVRACitPQkpEVU1QID0gQE9CSkRVTVBACitPQkpFWFQgPSBAT0JKRVhUQAorT1RPT0wgPSBAT1RPT0xACitPVE9PTDY0ID0gQE9UT09MNjRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VEID0gQFNFREAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1RBUkdFVCA9IEBUQVJHRVRACitUQVJHRVRESVIgPSBAVEFSR0VURElSQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWJzX2J1aWxkZGlyID0gQGFic19idWlsZGRpckAKK2Fic19zcmNkaXIgPSBAYWJzX3NyY2RpckAKK2Fic190b3BfYnVpbGRkaXIgPSBAYWJzX3RvcF9idWlsZGRpckAKK2Fic190b3Bfc3JjZGlyID0gQGFic190b3Bfc3JjZGlyQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2J1aWxkZGlyID0gQGJ1aWxkZGlyQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACitkb2NkaXIgPSBAZG9jZGlyQAorZHZpZGlyID0gQGR2aWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbHRfRUNITyA9IEBsdF9FQ0hPQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACit0b29sZXhlY2RpciA9IEB0b29sZXhlY2RpckAKK3Rvb2xleGVjbGliZGlyID0gQHRvb2xleGVjbGliZGlyQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSBmb3JlaWduIGRlamFnbnUKKworIyBTZXR1cCB0aGUgdGVzdGluZyBmcmFtZXdvcmssIGlmIHlvdSBoYXZlIG9uZQorRVhQRUNUID0gYGlmIFsgLWYgJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgXSA7IHRoZW4gXAorICAgICAgICAgICAgZWNobyAkKHRvcF9idWlsZGRpcikvLi4vZXhwZWN0L2V4cGVjdCA7IFwKKyAgICAgICAgICBlbHNlIGVjaG8gZXhwZWN0IDsgZmlgCisKK1JVTlRFU1QgPSBgaWYgWyAtZiAkKHRvcF9zcmNkaXIpLy4uL2RlamFnbnUvcnVudGVzdCBdIDsgdGhlbiBcCisJICAgICAgIGVjaG8gJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgOyBcCisJICAgIGVsc2UgZWNobyBydW50ZXN0OyBmaWAKKworQ0xFQU5GSUxFUyA9ICouZXhlIGNvcmUqICoubG9nICouc3VtCitFWFRSQV9ESVNUID0gbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAJXAorbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYyBsaWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIFwKK2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBjb25maWcvZGVmYXVsdC5leHAgbGliL3RhcmdldC1saWJwYXRoLmV4cCBcCitsaWIvbGliZmZpLWRnLmV4cCBsaWIvd3JhcHBlci5leHAgbGliZmZpLmNhbGwvZmxvYXQuYyBcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyBsaWJmZmkuY2FsbC9mbG9hdDMuYyBcCitsaWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jIGxpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jIFwKK2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jIGxpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIFwKK2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMgXAorbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYyBcCitsaWJmZmkuY2FsbC9jbHNfdWludC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyBcCitsaWJmZmkuY2FsbC9mbG9hdDEuYyBsaWJmZmkuY2FsbC9jbHNfMTlieXRlLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyBsaWJmZmkuY2FsbC9jbHNfNGJ5dGUuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvc3RydWN0Ny5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgXAorbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIGxpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYyBcCitsaWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jIFwKK2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgXAorbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYyBcCitsaWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jIGxpYmZmaS5jYWxsL3JldHVybl9kYmwyLmMgXAorbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgXAorbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYyBsaWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYwlcCitsaWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIFwKK2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMgbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyBcCitsaWJmZmkuY2FsbC9jYWxsLmV4cCBsaWJmZmkuY2FsbC9mZml0ZXN0LmggbGliZmZpLmNhbGwvc3RybGVuLmMJXAorbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMgbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYyBcCitsaWJmZmkuY2FsbC9zdHJ1Y3QxLmMgbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIGxpYmZmaS5jYWxsL3JldHVybl91bC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYyBsaWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgXAorbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwlcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jCVwKK2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jIFwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGxpYmZmaS5jYWxsL3JldHVybl9mbC5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jIGxpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3QzLmMgXAorbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMgbGliZmZpLmNhbGwvY2xzX3NpbnQuYyBsaWJmZmkuY2FsbC9mbG9hdDIuYyBcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jIFwKK2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jIFwKK2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIFwKK2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvY2xzXzVieXRlLmMgXAorbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYyBcCitsaWJmZmkuY2FsbC9jbHNfOGJ5dGUuYyBsaWJmZmkuY2FsbC9weW9iamMtdGMuYwlcCitsaWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMgXAorbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMgbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMgXAorbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgXAorbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYwlcCitsaWJmZmkuY2FsbC9zdHJ1Y3QyLmMgbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIFwKK2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyBcCitsaWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jCVwKK2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMgbGliZmZpLmNhbGwvZmxvYXQ0LmMgXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jIGxpYmZmaS5jYWxsL3N0cnVjdDkuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgXAorbGliZmZpLmNhbGwvc3RydWN0NC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMgXAorbGliZmZpLmNhbGwvY2xzXzZieXRlLmMgbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgbGliZmZpLmNhbGwvbWFueS5jIFwKK2xpYmZmaS5jYWxsL3N0cnVjdDguYyBsaWJmZmkuY2FsbC9uZWdpbnQuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q1LmMgXAorbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIGxpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBcCitsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyBcCitsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBsaWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jIFwKK2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKKworYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgKCBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggKSBcCisJICAgICAgICAmJiB7IGlmIHRlc3QgLWYgJEA7IHRoZW4gZXhpdCAwOyBlbHNlIGJyZWFrOyBmaTsgfTsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIHRlc3RzdWl0ZS9NYWtlZmlsZSc7IFwKKwkkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWZvcmVpZ24gdGVzdHN1aXRlL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKGFtX19hY2xvY2FsX200X2RlcHMpOgorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicwordGFnczogVEFHUworVEFHUzoKKworY3RhZ3M6IENUQUdTCitDVEFHUzoKKworCitjaGVjay1ERUpBR05VOiBzaXRlLmV4cAorCXNyY2Rpcj1gJChhbV9fY2QpICQoc3JjZGlyKSAmJiBwd2RgOyBleHBvcnQgc3JjZGlyOyBcCisJRVhQRUNUPSQoRVhQRUNUKTsgZXhwb3J0IEVYUEVDVDsgXAorCXJ1bnRlc3Q9JChSVU5URVNUKTsgXAorCWlmICQoU0hFTEwpIC1jICIkJHJ1bnRlc3QgLS12ZXJzaW9uIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGV4aXRfc3RhdHVzPTA7IGw9JyQoREVKQVRPT0wpJzsgZm9yIHRvb2wgaW4gJCRsOyBkbyBcCisJICAgIGlmICQkcnVudGVzdCAkKEFNX1JVTlRFU1RGTEFHUykgJChSVU5URVNUREVGQVVMVEZMQUdTKSAkKFJVTlRFU1RGTEFHUyk7IFwKKwkgICAgdGhlbiA6OyBlbHNlIGV4aXRfc3RhdHVzPTE7IGZpOyBcCisJICBkb25lOyBcCisJZWxzZSBlY2hvICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCBcYHJ1bnRlc3QnIiAxPiYyOyA6O1wKKwlmaTsgXAorCWV4aXQgJCRleGl0X3N0YXR1cworc2l0ZS5leHA6IE1ha2VmaWxlCisJQGVjaG8gJ01ha2luZyBhIG5ldyBzaXRlLmV4cCBmaWxlLi4uJworCUBlY2hvICcjIyB0aGVzZSB2YXJpYWJsZXMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IG1ha2UgIyMnID5zaXRlLnRtcAorCUBlY2hvICcjIERvIG5vdCBlZGl0IGhlcmUuICBJZiB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGVzZSB2YWx1ZXMnID4+c2l0ZS50bXAKKwlAZWNobyAnIyBlZGl0IHRoZSBsYXN0IHNlY3Rpb24nID4+c2l0ZS50bXAKKwlAZWNobyAnc2V0IHNyY2RpciAkKHNyY2RpciknID4+c2l0ZS50bXAKKwlAZWNobyAic2V0IG9iamRpciBgcHdkYCIgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgYnVpbGRfYWxpYXMgIiQoYnVpbGRfYWxpYXMpIicgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgYnVpbGRfdHJpcGxldCAkKGJ1aWxkX3RyaXBsZXQpJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCBob3N0X2FsaWFzICIkKGhvc3RfYWxpYXMpIicgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgaG9zdF90cmlwbGV0ICQoaG9zdF90cmlwbGV0KScgPj5zaXRlLnRtcAorCUBlY2hvICdzZXQgdGFyZ2V0X2FsaWFzICIkKHRhcmdldF9hbGlhcykiJyA+PnNpdGUudG1wCisJQGVjaG8gJ3NldCB0YXJnZXRfdHJpcGxldCAkKHRhcmdldF90cmlwbGV0KScgPj5zaXRlLnRtcAorCUBlY2hvICcjIyBBbGwgdmFyaWFibGVzIGFib3ZlIGFyZSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiBEbyBOb3QgRWRpdCAjIycgPj5zaXRlLnRtcAorCUB0ZXN0ICEgLWYgc2l0ZS5leHAgfHwgXAorCSAgc2VkICcxLC9eIyMgQWxsIHZhcmlhYmxlcyBhYm92ZSBhcmUuKiMjLyBkJyBzaXRlLmV4cCA+PiBzaXRlLnRtcAorCUAtcm0gLWYgc2l0ZS5iYWsKKwlAdGVzdCAhIC1mIHNpdGUuZXhwIHx8IG12IHNpdGUuZXhwIHNpdGUuYmFrCisJQG12IHNpdGUudG1wIHNpdGUuZXhwCisKK2Rpc3RjbGVhbi1ERUpBR05VOgorCS1ybSAtZiBzaXRlLmV4cCBzaXRlLmJhaworCS1sPSckKERFSkFUT09MKSc7IGZvciB0b29sIGluICQkbDsgZG8gXAorCSAgcm0gLWYgJCR0b29sLnN1bSAkJHRvb2wubG9nOyBcCisJZG9uZQorCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKKwkgIGRpc3RfZmlsZXM9YGZvciBmaWxlIGluICQkbGlzdDsgZG8gZWNobyAkJGZpbGU7IGRvbmUgfCBcCisJICBzZWQgLWUgInN8XiQkc3JjZGlyc3RyaXAvfHw7dCIgXAorCSAgICAgIC1lICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfDt0ImA7IFwKKwljYXNlICQkZGlzdF9maWxlcyBpbiBcCisJICAqLyopICQoTUtESVJfUCkgYGVjaG8gIiQkZGlzdF9maWxlcyIgfCBcCisJCQkgICBzZWQgJy9cLy8hZDtzfF58JChkaXN0ZGlyKS98O3MsL1teL10qJCQsLCcgfCBcCisJCQkgICBzb3J0IC11YCA7OyBcCisJZXNhYzsgXAorCWZvciBmaWxlIGluICQkZGlzdF9maWxlczsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgZGlyPWBlY2hvICIvJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgICAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKS8kJGZpbGUiOyB0aGVuIFwKKwkgICAgICBmaW5kICIkKGRpc3RkaXIpLyQkZmlsZSIgLXR5cGUgZCAhIC1wZXJtIC03MDAgLWV4ZWMgY2htb2QgdStyd3gge30gXDs7IFwKKwkgICAgZmk7IFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLWZwUiAkKHNyY2RpcikvJCRmaWxlICIkKGRpc3RkaXIpJCRkaXIiIHx8IGV4aXQgMTsgXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtZnBSICQkZC8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKS8kJGZpbGUiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1ERUpBR05VCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUKK2luc3RhbGxkaXJzOgoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisJLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLURFSkFHTlUgZGlzdGNsZWFuLWdlbmVyaWMKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2h0bWwtYW06CisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWR2aTogaW5zdGFsbC1kdmktYW0KKworaW5zdGFsbC1kdmktYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1odG1sOiBpbnN0YWxsLWh0bWwtYW0KKworaW5zdGFsbC1odG1sLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1hbQorCitpbnN0YWxsLWluZm8tYW06CisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06CisKKy5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKKworLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLURFSkFHTlUgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4gZGlzdGNsZWFuLURFSkFHTlUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCisJaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAorCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKKwl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOTY3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9jb25maWcvZGVmYXVsdC5leHAKQEAgLTAsMCArMSBAQAorbG9hZF9saWIgInN0YW5kYXJkLmV4cCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM4YTMwNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwCkBAIC0wLDAgKzEsMzAwIEBACisjICAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisKK3Byb2MgbG9hZF9nY2NfbGliIHsgZmlsZW5hbWUgfSB7CisgICAgZ2xvYmFsIHNyY2RpcgorICAgIGxvYWRfZmlsZSAkc3JjZGlyL2xpYi8kZmlsZW5hbWUKK30KKworbG9hZF9saWIgZGcuZXhwCitsb2FkX2xpYiBsaWJnbG9zcy5leHAKK2xvYWRfZ2NjX2xpYiB0YXJnZXQtbGlicGF0aC5leHAKK2xvYWRfZ2NjX2xpYiB3cmFwcGVyLmV4cAorCisKKyMgRGVmaW5lIGxpYmZmaSBjYWxsYmFja3MgZm9yIGRnLmV4cC4KKworcHJvYyBsaWJmZmktZGctdGVzdC0xIHsgdGFyZ2V0X2NvbXBpbGUgcHJvZyBkb193aGF0IGV4dHJhX3Rvb2xfZmxhZ3MgfSB7CisKKyAgICAjIFRvIGdldCBhbGwgXG4gaW4gZGctb3V0cHV0IHRlc3Qgc3RyaW5ncyB0byBtYXRjaCBwcmludGYgb3V0cHV0CisgICAgIyBpbiBhIHN5c3RlbSB0aGF0IG91dHB1dHMgaXQgYXMgXDAxNVwwMTIgKGkuZS4gbm90IGp1c3QgXDAxMiksIHdlCisgICAgIyBuZWVkIHRvIGNoYW5nZSBhbGwgXG4gaW50byBccj9cbi4gIEFzIHRoZXJlIGlzIG5vIGRlamFnbnUgZmxhZworICAgICMgb3IgaG9vayB0byBkbyB0aGF0LCB3ZSBzaW1wbHkgY2hhbmdlIHRoZSB0ZXh0IGJlaW5nIHRlc3RlZC4KKyAgICAjIFVuZm9ydHVuYXRlbHksIHdlIGhhdmUgdG8ga25vdyB0aGF0IHRoZSB2YXJpYWJsZSBpcyBjYWxsZWQKKyAgICAjIGRnLW91dHB1dC10ZXh0IGFuZCBsaXZlcyBpbiB0aGUgY2FsbGVyIG9mIGxpYmZmaS1kZy10ZXN0LCB3aGljaAorICAgICMgaXMgdHdvIGNhbGxzIHVwLiAgT3ZlcnJpZGluZyBwcm9jIGRnLW91dHB1dCB3b3VsZCBiZSBsb25nZXIgYW5kCisgICAgIyB3b3VsZCBuZWNlc3NhcmlseSBoYXZlIHRoZSBzYW1lIGFzc3VtcHRpb24uCisgICAgdXB2YXIgMiBkZy1vdXRwdXQtdGV4dCBvdXRwdXRfbWF0Y2gKKworICAgIGlmIHsgW2xsZW5ndGggJG91dHB1dF9tYXRjaF0gPiAxIH0geworCXJlZ3N1YiAtYWxsICJcbiIgW2xpbmRleCAkb3V0cHV0X21hdGNoIDFdICJccj9cbiIgeAorCXNldCBvdXRwdXRfbWF0Y2ggW2xyZXBsYWNlICRvdXRwdXRfbWF0Y2ggMSAxICR4XQorICAgIH0KKworICAgICMgU2V0IHVwIHRoZSBjb21waWxlciBmbGFncywgYmFzZWQgb24gd2hhdCB3ZSdyZSBnb2luZyB0byBkby4KKworICAgIHNldCBvcHRpb25zIFtsaXN0XQorICAgIHN3aXRjaCAkZG9fd2hhdCB7CisJImNvbXBpbGUiIHsKKwkgICAgc2V0IGNvbXBpbGVfdHlwZSAiYXNzZW1ibHkiCisJICAgIHNldCBvdXRwdXRfZmlsZSAiW2ZpbGUgcm9vdG5hbWUgW2ZpbGUgdGFpbCAkcHJvZ11dLnMiCisJfQorCSJsaW5rIiB7CisJICAgIHNldCBjb21waWxlX3R5cGUgImV4ZWN1dGFibGUiCisJICAgIHNldCBvdXRwdXRfZmlsZSAiW2ZpbGUgcm9vdG5hbWUgW2ZpbGUgdGFpbCAkcHJvZ11dLmV4ZSIKKwkgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgaXMgbmVlZGVkIGZvciB0YXJnZXRzIGxpa2UgdGhlIGk5NjAgd2hlcmUKKwkgICAgIyB0aGUgZGVmYXVsdCBvdXRwdXQgZmlsZSBpcyBiLm91dC4gIFNpZ2guCisJfQorCSJydW4iIHsKKwkgICAgc2V0IGNvbXBpbGVfdHlwZSAiZXhlY3V0YWJsZSIKKwkgICAgIyBGSVhNRTogIi4vIiBpcyB0byBjb3BlIHdpdGggIi4iIG5vdCBiZWluZyBpbiAkUEFUSC4KKwkgICAgIyBTaG91bGQgdGhpcyBiZSBoYW5kbGVkIGVsc2V3aGVyZT8KKwkgICAgIyBZRVMuCisJICAgIHNldCBvdXRwdXRfZmlsZSAiLi9bZmlsZSByb290bmFtZSBbZmlsZSB0YWlsICRwcm9nXV0uZXhlIgorCSAgICAjIFRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2hlcmUgd2UgY2FyZSBpZiBhbiBleGVjdXRhYmxlIHdhcworCSAgICAjIGNyZWF0ZWQgb3Igbm90LiAgSWYgaXQgd2FzLCBkZy5leHAgd2lsbCB0cnkgdG8gcnVuIGl0LgorCSAgICByZW1vdGVfZmlsZSBidWlsZCBkZWxldGUgJG91dHB1dF9maWxlOworCX0KKwlkZWZhdWx0IHsKKwkgICAgcGVycm9yICIkZG9fd2hhdDogbm90IGEgdmFsaWQgZGctZG8ga2V5d29yZCIKKwkgICAgcmV0dXJuICIiCisJfQorICAgIH0KKworICAgIGlmIHsgJGV4dHJhX3Rvb2xfZmxhZ3MgIT0gIiIgfSB7CisJbGFwcGVuZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPSRleHRyYV90b29sX2ZsYWdzIgorICAgIH0KKworICAgIHNldCBjb21wX291dHB1dCBbbGliZmZpX3RhcmdldF9jb21waWxlICIkcHJvZyIgIiRvdXRwdXRfZmlsZSIgIiRjb21waWxlX3R5cGUiICRvcHRpb25zXTsKKworCisgICAgcmV0dXJuIFtsaXN0ICRjb21wX291dHB1dCAkb3V0cHV0X2ZpbGVdCit9CisKKworcHJvYyBsaWJmZmktZGctdGVzdCB7IHByb2cgZG9fd2hhdCBleHRyYV90b29sX2ZsYWdzIH0geworICAgIHJldHVybiBbbGliZmZpLWRnLXRlc3QtMSB0YXJnZXRfY29tcGlsZSAkcHJvZyAkZG9fd2hhdCAkZXh0cmFfdG9vbF9mbGFnc10KK30KKworcHJvYyBsaWJmZmktaW5pdCB7IGFyZ3MgfSB7CisgICAgZ2xvYmFsIGdsdWVmaWxlIHdyYXBfZmxhZ3M7CisgICAgZ2xvYmFsIHNyY2RpcgorICAgIGdsb2JhbCBibGRkaXJmZmkKKyAgICBnbG9iYWwgb2JqZGlyCisgICAgZ2xvYmFsIFRPT0xfT1BUSU9OUworICAgIGdsb2JhbCB0b29sCisgICAgZ2xvYmFsIGxpYmZmaV9pbmNsdWRlCisgICAgZ2xvYmFsIGxpYmZmaV9saW5rX2ZsYWdzCisgICAgZ2xvYmFsIHRvb2xfcm9vdF9kaXIKKyAgICBnbG9iYWwgbGRfbGlicmFyeV9wYXRoCisKKyAgICBzZXQgYmxkZGlyZmZpIFtwd2RdLy4uCisgICAgdmVyYm9zZSAibGliZmZpICRibGRkaXJmZmkiCisKKyAgICBzZXQgZ2NjZGlyIFtsb29rZm9yX2ZpbGUgJHRvb2xfcm9vdF9kaXIgZ2NjL2xpYmdjYy5hXQorICAgIGlmIHskZ2NjZGlyICE9ICIifSB7CisJc2V0IGdjY2RpciBbZmlsZSBkaXJuYW1lICRnY2NkaXJdCisgICAgfQorICAgIHZlcmJvc2UgImdjY2RpciAkZ2NjZGlyIgorCisgICAgc2V0IGxkX2xpYnJhcnlfcGF0aCAiLiIKKyAgICBhcHBlbmQgbGRfbGlicmFyeV9wYXRoICI6JHtnY2NkaXJ9IgorCisgICAgc2V0IGNvbXBpbGVyICIke2djY2Rpcn0veGdjYyIKKyAgICBpZiB7IFtpc19yZW1vdGUgaG9zdF0gPT0gMCAmJiBbd2hpY2ggJGNvbXBpbGVyXSAhPSAwIH0geworCWZvcmVhY2ggaSAiW2V4ZWMgJGNvbXBpbGVyIC0tcHJpbnQtbXVsdGktbGliXSIgeworCSAgICBzZXQgbWxkaXIgIiIKKwkgICAgcmVnZXhwIC0tICJcW2EtejAtOT1fL1wuLVxdKjsiICRpIG1sZGlyCisJICAgIHNldCBtbGRpciBbc3RyaW5nIHRyaW1yaWdodCAkbWxkaXIgIlw7QCJdCisJICAgIGlmIHsgIiRtbGRpciIgPT0gIi4iIH0geworCQljb250aW51ZQorCSAgICB9CisJICAgIGlmIHsgW2xsZW5ndGggW2dsb2IgLW5vY29tcGxhaW4gJHtnY2NkaXJ9LyR7bWxkaXJ9L2xpYmdjY19zKi5zby4qXV0gPj0gMSB9IHsKKwkJYXBwZW5kIGxkX2xpYnJhcnlfcGF0aCAiOiR7Z2NjZGlyfS8ke21sZGlyfSIKKwkgICAgfQorCX0KKyAgICB9CisgICAgIyBhZGQgdGhlIGxpYnJhcnkgcGF0aCBmb3IgbGliZmZpLgorICAgIGFwcGVuZCBsZF9saWJyYXJ5X3BhdGggIjoke2JsZGRpcmZmaX0vLmxpYnMiCisKKyAgICB2ZXJib3NlICJsZF9saWJyYXJ5X3BhdGg6ICRsZF9saWJyYXJ5X3BhdGgiCisKKyAgICAjIFBvaW50IHRvIHRoZSBMaWJmZmkgaGVhZGVycyBpbiBsaWJmZmkuCisgICAgc2V0IGxpYmZmaV9pbmNsdWRlICIke2JsZGRpcmZmaX0vaW5jbHVkZSIKKyAgICB2ZXJib3NlICJsaWJmZmlfaW5jbHVkZSAkbGliZmZpX2luY2x1ZGUiCisKKyAgICBzZXQgbGliZmZpX2RpciAgIiR7YmxkZGlyZmZpfS8ubGlicyIKKyAgICB2ZXJib3NlICJsaWJmZmlfZGlyICRsaWJmZmlfZGlyIgorICAgIGlmIHsgJGxpYmZmaV9kaXIgIT0gIiIgfSB7CisJc2V0IGxpYmZmaV9kaXIgW2ZpbGUgZGlybmFtZSAke2xpYmZmaV9kaXJ9XQorCXNldCBsaWJmZmlfbGlua19mbGFncyAiLUwke2xpYmZmaV9kaXJ9Ly5saWJzIgorICAgIH0KKworICAgIHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMKKyAgICBsaWJmZmlfbWF5YmVfYnVpbGRfd3JhcHBlciAiJHtvYmpkaXJ9L3Rlc3RnbHVlLm8iCit9CisKK3Byb2MgbGliZmZpX2V4aXQgeyB9IHsKKyAgICBnbG9iYWwgZ2x1ZWZpbGU7CisKKyAgICBpZiBbaW5mbyBleGlzdHMgZ2x1ZWZpbGVdIHsKKwlmaWxlX29uX2J1aWxkIGRlbGV0ZSAkZ2x1ZWZpbGU7CisJdW5zZXQgZ2x1ZWZpbGU7CisgICAgfQorfQorCitwcm9jIGxpYmZmaV90YXJnZXRfY29tcGlsZSB7IHNvdXJjZSBkZXN0IHR5cGUgb3B0aW9ucyB9IHsKKyAgICBnbG9iYWwgZ2x1ZWZpbGUgd3JhcF9mbGFnczsKKyAgICBnbG9iYWwgc3JjZGlyCisgICAgZ2xvYmFsIGJsZGRpcmZmaQorICAgIGdsb2JhbCBUT09MX09QVElPTlMKKyAgICBnbG9iYWwgbGliZmZpX2xpbmtfZmxhZ3MKKyAgICBnbG9iYWwgbGliZmZpX2luY2x1ZGUKKyAgICBnbG9iYWwgdGFyZ2V0X3RyaXBsZXQKKworCisgICAgaWYgeyBbdGFyZ2V0X2luZm8gbmVlZHNfc3RhdHVzX3dyYXBwZXJdIT0iIiAmJiBbaW5mbyBleGlzdHMgZ2x1ZWZpbGVdIH0geworCWxhcHBlbmQgb3B0aW9ucyAibGlicz0ke2dsdWVmaWxlfSIKKwlsYXBwZW5kIG9wdGlvbnMgImxkZmxhZ3M9JHdyYXBfZmxhZ3MiCisgICAgfQorCisgICAgIyBUT09MX09QVElPTlMgbXVzdCBjb21lIGZpcnN0LCBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcnJpZGUgdGVzdGNhc2UKKyAgICAjIHNwZWNpZmljIG9wdGlvbnMuCisgICAgaWYgW2luZm8gZXhpc3RzIFRPT0xfT1BUSU9OU10geworCWxhcHBlbmQgIG9wdGlvbnMgW2NvbmNhdCAiYWRkaXRpb25hbF9mbGFncz0kVE9PTF9PUFRJT05TIiAkb3B0aW9uc107CisgICAgfQorCisgICAgIyBzZWFyY2ggZm9yIGZmaV9taXBzLmggaW4gc3JjZGlyLCB0b28KKyAgICBsYXBwZW5kIG9wdGlvbnMgImFkZGl0aW9uYWxfZmxhZ3M9LUkke2xpYmZmaV9pbmNsdWRlfSAtSSR7c3JjZGlyfS8uLi9pbmNsdWRlICAtSSR7bGliZmZpX2luY2x1ZGV9Ly4uIgorICAgIGxhcHBlbmQgb3B0aW9ucyAiYWRkaXRpb25hbF9mbGFncz0ke2xpYmZmaV9saW5rX2ZsYWdzfSIKKworICAgICMgRGFyd2luIG5lZWRzIGEgc3RhY2sgZXhlY3V0aW9uIGFsbG93ZWQgZmxhZy4KKworICAgIGlmIHsgW2lzdGFyZ2V0ICIqLSotZGFyd2luOSoiXSB8fCBbaXN0YXJnZXQgIiotKi1kYXJ3aW4xKiJdCisJIHx8IFtpc3RhcmdldCAiKi0qLWRhcndpbjIqIl0gfSB7CisJbGFwcGVuZCBvcHRpb25zICJhZGRpdGlvbmFsX2ZsYWdzPS1XbCwtYWxsb3dfc3RhY2tfZXhlY3V0ZSIKKyAgICB9CisKKyAgICAjIElmIHlvdSdyZSBidWlsZGluZyB0aGUgY29tcGlsZXIgd2l0aCAtLXByZWZpeCBzZXQgdG8gYSBwbGFjZQorICAgICMgd2hlcmUgaXQncyBub3QgeWV0IGluc3RhbGxlZCwgdGhlbiB0aGUgbGlua2VyIHdvbid0IGJlIGFibGUgdG8KKyAgICAjIGZpbmQgdGhlIGxpYmdjYyB1c2VkIGJ5IGxpYmZmaS5keWxpYi4gIFdlIGNvdWxkIHBhc3MgdGhlCisgICAgIyAtZHlsaWJfZmlsZSBvcHRpb24sIGJ1dCB0aGF0J3MgY29tcGxpY2F0ZWQsIGFuZCBpdCdzIG11Y2ggZWFzaWVyCisgICAgIyB0byBqdXN0IG1ha2UgdGhlIGxpbmtlciBmaW5kIGxpYmdjYyB1c2luZyAtTCBvcHRpb25zLgorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKi0qLWRhcndpbioiICR0YXJnZXRfdHJpcGxldF0gfSB7CisJbGFwcGVuZCBvcHRpb25zICJsaWJzPSAtc2hhcmVkLWxpYmdjYyIKKyAgICB9CisKKyAgICBpZiB7IFtzdHJpbmcgbWF0Y2ggIiotKi1vcGVuYnNkKiIgJHRhcmdldF90cmlwbGV0XSB9IHsKKwlsYXBwZW5kIG9wdGlvbnMgImxpYnM9IC1scHRocmVhZCIKKyAgICB9CisKKyAgICBsYXBwZW5kIG9wdGlvbnMgImxpYnM9IC1sZmZpIgorCisgICAgdmVyYm9zZSAib3B0aW9uczogJG9wdGlvbnMiCisgICAgcmV0dXJuIFt0YXJnZXRfY29tcGlsZSAkc291cmNlICRkZXN0ICR0eXBlICRvcHRpb25zXQorfQorCisjIFV0aWxpdHkgcm91dGluZXMuCisKKyMKKyMgc2VhcmNoX2ZvciAtLSBsb29rcyBmb3IgYSBzdHJpbmcgbWF0Y2ggaW4gYSBmaWxlCisjCitwcm9jIHNlYXJjaF9mb3IgeyBmaWxlIHBhdHRlcm4gfSB7CisgICAgc2V0IGZkIFtvcGVuICRmaWxlIHJdCisgICAgd2hpbGUgeyBbZ2V0cyAkZmQgY3VyX2xpbmVdPj0wIH0geworCWlmIFtzdHJpbmcgbWF0Y2ggIiokcGF0dGVybioiICRjdXJfbGluZV0gdGhlbiB7CisJICAgIGNsb3NlICRmZAorCSAgICByZXR1cm4gMQorCX0KKyAgICB9CisgICAgY2xvc2UgJGZkCisgICAgcmV0dXJuIDAKK30KKworIyBNb2RpZmllZCBkZy1ydW50ZXN0IHRoYXQgY2FuIGN5Y2xlIHRocm91Z2ggYSBsaXN0IG9mIG9wdGltaXphdGlvbiBvcHRpb25zCisjIGFzIGMtdG9ydHVyZSBkb2VzLgorcHJvYyBsaWJmZmktZGctcnVudGVzdCB7IHRlc3RjYXNlcyBkZWZhdWx0LWV4dHJhLWZsYWdzIH0geworICAgIGdsb2JhbCBydW50ZXN0cworCisgICAgZm9yZWFjaCB0ZXN0ICR0ZXN0Y2FzZXMgeworCSMgSWYgd2UncmUgb25seSB0ZXN0aW5nIHNwZWNpZmljIGZpbGVzIGFuZCB0aGlzIGlzbid0IG9uZSBvZgorCSMgdGhlbSwgc2tpcCBpdC4KKwlpZiAhW3J1bnRlc3RfZmlsZV9wICRydW50ZXN0cyAkdGVzdF0geworCSAgICBjb250aW51ZQorCX0KKworCSMgTG9vayBmb3IgYSBsb29wIHdpdGhpbiB0aGUgc291cmNlIGNvZGUgLSBpZiB3ZSBkb24ndCBmaW5kIG9uZSwKKwkjIGRvbid0IHBhc3MgLWZ1bnJvbGxbLWFsbF0tbG9vcHMuCisJZ2xvYmFsIHRvcnR1cmVfd2l0aF9sb29wcyB0b3J0dXJlX3dpdGhvdXRfbG9vcHMKKwlpZiBbZXhwciBbc2VhcmNoX2ZvciAkdGVzdCAiZm9yKigiXStbc2VhcmNoX2ZvciAkdGVzdCAid2hpbGUqKCJdXSB7CisJICAgIHNldCBvcHRpb25fbGlzdCAkdG9ydHVyZV93aXRoX2xvb3BzCisJfSBlbHNlIHsKKwkgICAgc2V0IG9wdGlvbl9saXN0ICR0b3J0dXJlX3dpdGhvdXRfbG9vcHMKKwl9CisKKwlzZXQgbnNob3J0IFtmaWxlIHRhaWwgW2ZpbGUgZGlybmFtZSAkdGVzdF1dL1tmaWxlIHRhaWwgJHRlc3RdCisKKwlmb3JlYWNoIGZsYWdzICRvcHRpb25fbGlzdCB7CisJICAgIHZlcmJvc2UgIlRlc3RpbmcgJG5zaG9ydCwgJGZsYWdzIiAxCisJICAgIGRnLXRlc3QgJHRlc3QgJGZsYWdzICR7ZGVmYXVsdC1leHRyYS1mbGFnc30KKwl9CisgICAgfQorfQorCisKKyMgTGlrZSBjaGVja19jb25kaXRpb25hbF94ZmFpbCwgYnV0IGNhbGxhYmxlIGZyb20gYSBkZyB0ZXN0LgorCitwcm9jIGRnLXhmYWlsLWlmIHsgYXJncyB9IHsKKyAgICBzZXQgYXJncyBbbHJlcGxhY2UgJGFyZ3MgMCAwXQorICAgIHNldCBzZWxlY3RvciAidGFyZ2V0IFtqb2luIFtsaW5kZXggJGFyZ3MgMV1dIgorICAgIGlmIHsgW2RnLXByb2Nlc3MtdGFyZ2V0ICRzZWxlY3Rvcl0gPT0gIlMiIH0geworCWdsb2JhbCBjb21waWxlcl9jb25kaXRpb25hbF94ZmFpbF9kYXRhCisJc2V0IGNvbXBpbGVyX2NvbmRpdGlvbmFsX3hmYWlsX2RhdGEgJGFyZ3MKKyAgICB9Cit9CisKKworIyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFkZGl0aW9uYWxfZmlsZXMgYW5kIGFkZGl0aW9uYWxfc291cmNlcworIyBhcmUgYm90aCBjbGVhcmVkIG91dCBhZnRlciBldmVyeSB0ZXN0LiAgSXQgaXMgbm90IGVub3VnaCB0byBjbGVhcgorIyB0aGVtIG91dCAqYmVmb3JlKiB0aGUgbmV4dCB0ZXN0IHJ1biBiZWNhdXNlIGdjYy10YXJnZXQtY29tcGlsZSBnZXRzCisjIHJ1biBkaXJlY3RseSBmcm9tIHNvbWUgLmV4cCBmaWxlcyAob3V0c2lkZSBvZiBhbnkgdGVzdCkuICAoVGhvc2UKKyMgdXNlcyBzaG91bGQgZXZlbnR1YWxseSBiZSBlbGltaW5hdGVkLikKKworIyBCZWNhdXNlIHRoZSBERyBmcmFtZXdvcmsgZG9lc24ndCBwcm92aWRlIGEgaG9vayB0aGF0IGlzIHJ1biBhdCB0aGUKKyMgZW5kIG9mIGEgdGVzdCwgd2UgbXVzdCByZXBsYWNlIGRnLXRlc3Qgd2l0aCBhIHdyYXBwZXIuCisKK2lmIHsgW2luZm8gcHJvY3Mgc2F2ZWQtZGctdGVzdF0gPT0gW2xpc3RdIH0geworICAgIHJlbmFtZSBkZy10ZXN0IHNhdmVkLWRnLXRlc3QKKworICAgIHByb2MgZGctdGVzdCB7IGFyZ3MgfSB7CisJZ2xvYmFsIGFkZGl0aW9uYWxfZmlsZXMKKwlnbG9iYWwgYWRkaXRpb25hbF9zb3VyY2VzCisJZ2xvYmFsIGVycm9ySW5mbworCisJaWYgeyBbIGNhdGNoIHsgZXZhbCBzYXZlZC1kZy10ZXN0ICRhcmdzIH0gZXJybXNnIF0gfSB7CisJICAgIHNldCBzYXZlZF9pbmZvICRlcnJvckluZm8KKwkgICAgc2V0IGFkZGl0aW9uYWxfZmlsZXMgIiIKKwkgICAgc2V0IGFkZGl0aW9uYWxfc291cmNlcyAiIgorCSAgICBlcnJvciAkZXJybXNnICRzYXZlZF9pbmZvCisJfQorCXNldCBhZGRpdGlvbmFsX2ZpbGVzICIiCisJc2V0IGFkZGl0aW9uYWxfc291cmNlcyAiIgorICAgIH0KK30KKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIHRjbC1pbmRlbnQtbGV2ZWw6NAorIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTk5YWE0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cApAQCAtMCwwICsxLDI2MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSB3YXMgY29udHJpYnV0ZWQgYnkgSm9obiBEYXZpZCBBbmdsaW4gKGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhKQorCitzZXQgb3JpZ19lbnZpcm9ubWVudF9zYXZlZCAwCitzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgMAorc2V0IG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQgMAorc2V0IG9yaWdfc2hsaWJfcGF0aF9zYXZlZCAwCitzZXQgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQgMAorc2V0IG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQgMAorc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkIDAKK3NldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZCAwCitzZXQgb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZCAwCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHByb2Mgc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyB7IH0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMgeyB9IHsKKyAgZ2xvYmFsIGxkX2xpYnJhcnlfcGF0aAorICBnbG9iYWwgb3JpZ19lbnZpcm9ubWVudF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfc2hsaWJfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZAorICBnbG9iYWwgb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfcnVuX3BhdGgKKyAgZ2xvYmFsIG9yaWdfc2hsaWJfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeTY0X3BhdGgKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NAorICBnbG9iYWwgb3JpZ19keWxkX2xpYnJhcnlfcGF0aAorICBnbG9iYWwgR0NDX0VYRUNfUFJFRklYCisKKyAgIyBTZXQgdGhlIHJlbG9jYXRlZCBjb21waWxlciBwcmVmaXgsIGJ1dCBvbmx5IGlmIHRoZSB1c2VyIGhhc24ndCBzcGVjaWZpZWQgb25lLgorICBpZiB7IFtpbmZvIGV4aXN0cyBHQ0NfRVhFQ19QUkVGSVhdICYmICFbaW5mbyBleGlzdHMgZW52KEdDQ19FWEVDX1BSRUZJWCldIH0geworICAgIHNldGVudiBHQ0NfRVhFQ19QUkVGSVggIiRHQ0NfRVhFQ19QUkVGSVgiCisgIH0KKworICAjIFNldHRpbmcgdGhlIGxkIGxpYnJhcnkgcGF0aCBjYXVzZXMgdHJvdWJsZSB3aGVuIHRlc3RpbmcgY3Jvc3MtY29tcGlsZXJzLgorICBpZiB7IFtpc19yZW1vdGUgdGFyZ2V0XSB9IHsKKyAgICByZXR1cm4KKyAgfQorCisgIGlmIHsgJG9yaWdfZW52aXJvbm1lbnRfc2F2ZWQgPT0gMCB9IHsKKyAgICBnbG9iYWwgZW52CisKKyAgICBzZXQgb3JpZ19lbnZpcm9ubWVudF9zYXZlZCAxCisKKyAgICAjIFNhdmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LgorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIKV0geworICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoICIkZW52KExEX0xJQlJBUllfUEFUSCkiCisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX1JVTl9QQVRIKV0geworICAgICAgc2V0IG9yaWdfbGRfcnVuX3BhdGggIiRlbnYoTERfUlVOX1BBVEgpIgorICAgICAgc2V0IG9yaWdfbGRfcnVuX3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KFNITElCX1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19zaGxpYl9wYXRoICIkZW52KFNITElCX1BBVEgpIgorICAgICAgc2V0IG9yaWdfc2hsaWJfcGF0aF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWU4zMl9QQVRIKV0geworICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoICIkZW52KExEX0xJQlJBUllOMzJfUEFUSCkiCisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUlk2NF9QQVRIKV0geworICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeTY0X3BhdGggIiRlbnYoTERfTElCUkFSWTY0X1BBVEgpIgorICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQgMQorICAgIH0KKyAgICBpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSF8zMildIHsKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMiAiJGVudihMRF9MSUJSQVJZX1BBVEhfMzIpIgorICAgICAgc2V0IG9yaWdfbGRfbGlicmFyeV9wYXRoXzMyX3NhdmVkIDEKKyAgICB9CisgICAgaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEhfNjQpXSB7CisgICAgICBzZXQgb3JpZ19sZF9saWJyYXJ5X3BhdGhfNjQgIiRlbnYoTERfTElCUkFSWV9QQVRIXzY0KSIKKyAgICAgIHNldCBvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZCAxCisgICAgfQorICAgIGlmIFtpbmZvIGV4aXN0cyBlbnYoRFlMRF9MSUJSQVJZX1BBVEgpXSB7CisgICAgICBzZXQgb3JpZ19keWxkX2xpYnJhcnlfcGF0aCAiJGVudihEWUxEX0xJQlJBUllfUEFUSCkiCisgICAgICBzZXQgb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZCAxCisgICAgfQorICB9CisKKyAgIyBXZSBuZWVkIHRvIHNldCBsZCBsaWJyYXJ5IHBhdGggaW4gdGhlIGVudmlyb25tZW50LiAgQ3VycmVudGx5LAorICAjIHVuaXguZXhwIGRvZXNuJ3Qgc2V0IHRoZSBlbnZpcm9ubWVudCBjb3JyZWN0bHkgZm9yIGFsbCBzeXN0ZW1zLgorICAjIEl0IG9ubHkgc2V0cyBTSExJQl9QQVRIIGFuZCBMRF9MSUJSQVJZX1BBVEggd2hlbiBpdCBleGVjdXRlcyBhCisgICMgcHJvZ3JhbS4gIFdlIGFsc28gbmVlZCB0aGUgZW52aXJvbm1lbnQgc2V0IGZvciBjb21waWxhdGlvbnMsIGV0Yy4KKyAgIworICAjIE9uIElSSVggNiwgd2UgaGF2ZSB0byBzZXQgdmFyaWFibGVzIGFraW4gdG8gTERfTElCUkFSWV9QQVRILCBidXQKKyAgIyBjYWxsZWQgTERfTElCUkFSWU4zMl9QQVRIIChmb3IgdGhlIE4zMiBBQkkpIGFuZCBMRF9MSUJSQVJZNjRfUEFUSAorICAjIChmb3IgdGhlIDY0LWJpdCBBQkkpLiAgVGhlIHNhbWUgYXBwbGllcyB0byBEYXJ3aW4gKERZTERfTElCUkFSWV9QQVRIKSwKKyAgIyBTb2xhcmlzIDMyIGJpdCAoTERfTElCUkFSWV9QQVRIXzMyKSwgU29sYXJpcyA2NCBiaXQgKExEX0xJQlJBUllfUEFUSF82NCksCisgICMgYW5kIEhQLVVYIChTSExJQl9QQVRIKS4gIEluIHNvbWUgY2FzZXMsIHRoZSB2YXJpYWJsZXMgYXJlIGluZGVwZW5kZW50CisgICMgb2YgTERfTElCUkFSWV9QQVRILCBhbmQgaW4gb3RoZXIgY2FzZXMgTERfTElCUkFSWV9QQVRIIGlzIHVzZWQgaWYgdGhlCisgICMgdmFyaWFibGUgaXMgbm90IGRlZmluZWQuCisgICMKKyAgIyBEb2luZyB0aGlzIGlzIHNvbWV3aGF0IG9mIGEgaGFjayBhcyBsZF9saWJyYXJ5X3BhdGggZ2V0cyByZXBlYXRlZCBpbgorICAjIFNITElCX1BBVEggYW5kIExEX0xJQlJBUllfUEFUSCB3aGVuIHVuaXhfbG9hZCBzZXRzIHRoZXNlIHZhcmlhYmxlcy4KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2xkX3J1bl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9SVU5fUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9ydW5fcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfUlVOX1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKyAgIyBUaGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBkeW5hbWljIHBhdGggc2VhcmNoIGZvciA2NC1iaXQKKyAgIyBIUC1VWCBleGVjdXRhYmxlcyBzZWFyY2hlcyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIFNITElCX1BBVEguCisgICMgTERfTElCUkFSWV9QQVRIIGlzbid0IHVzZWQgZm9yIDMyLWJpdCBleGVjdXRhYmxlcy4gIFRodXMsIHdlCisgICMgc2V0IExEX0xJQlJBUllfUEFUSCBhbmQgU0hMSUJfUEFUSCBhcyBpZiB0aGV5IHdlcmUgaW5kZXBlbmRlbnQuCisgIGlmIHsgJG9yaWdfc2hsaWJfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgU0hMSUJfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19zaGxpYl9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBTSExJQl9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZTjMyX1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoIgorICB9IGVsc2VpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWU4zMl9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgTERfTElCUkFSWU4zMl9QQVRIICIkbGRfbGlicmFyeV9wYXRoIgorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeTY0X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUlk2NF9QQVRIICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnk2NF9wYXRoIgorICB9IGVsc2VpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWTY0X1BBVEggIiRsZF9saWJyYXJ5X3BhdGg6JG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2UgeworICAgIHNldGVudiBMRF9MSUJSQVJZNjRfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzMyICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMiIKKyAgfSBlbHNlaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF8zMiAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF8zMiAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF82NF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzY0ICIkbGRfbGlicmFyeV9wYXRoOiRvcmlnX2xkX2xpYnJhcnlfcGF0aF82NCIKKyAgfSBlbHNlaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF82NCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19sZF9saWJyYXJ5X3BhdGgiCisgIH0gZWxzZSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSF82NCAiJGxkX2xpYnJhcnlfcGF0aCIKKyAgfQorICBpZiB7ICRvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBEWUxEX0xJQlJBUllfUEFUSCAiJGxkX2xpYnJhcnlfcGF0aDokb3JpZ19keWxkX2xpYnJhcnlfcGF0aCIKKyAgfSBlbHNlIHsKKyAgICBzZXRlbnYgRFlMRF9MSUJSQVJZX1BBVEggIiRsZF9saWJyYXJ5X3BhdGgiCisgIH0KKworICB2ZXJib3NlIC1sb2cgInNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnM6IGxkX2xpYnJhcnlfcGF0aD0kbGRfbGlicmFyeV9wYXRoIgorfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgcHJvYyByZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyB7IH0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzIHsgfSB7CisgIGdsb2JhbCBvcmlnX2Vudmlyb25tZW50X3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9ydW5fcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19zaGxpYl9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aF9zYXZlZAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzJfc2F2ZWQKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkCisgIGdsb2JhbCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoX3NhdmVkCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnlfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9ydW5fcGF0aAorICBnbG9iYWwgb3JpZ19zaGxpYl9wYXRoCisgIGdsb2JhbCBvcmlnX2xkX2xpYnJhcnluMzJfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5NjRfcGF0aAorICBnbG9iYWwgb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzIKKyAgZ2xvYmFsIG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0CisgIGdsb2JhbCBvcmlnX2R5bGRfbGlicmFyeV9wYXRoCisKKyAgaWYgeyAkb3JpZ19lbnZpcm9ubWVudF9zYXZlZCA9PSAwIH0geworICAgIHJldHVybgorICB9CisKKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5X3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllfUEFUSCAiJG9yaWdfbGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllfUEFUSCldIHsKKyAgICB1bnNldGVudiBMRF9MSUJSQVJZX1BBVEgKKyAgfQorICBpZiB7ICRvcmlnX2xkX3J1bl9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9SVU5fUEFUSCAiJG9yaWdfbGRfcnVuX3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfUlVOX1BBVEgpXSB7CisgICAgdW5zZXRlbnYgTERfUlVOX1BBVEgKKyAgfQorICBpZiB7ICRvcmlnX3NobGliX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IFNITElCX1BBVEggIiRvcmlnX3NobGliX3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoU0hMSUJfUEFUSCldIHsKKyAgICB1bnNldGVudiBTSExJQl9QQVRICisgIH0KKyAgaWYgeyAkb3JpZ19sZF9saWJyYXJ5bjMyX3BhdGhfc2F2ZWQgfSB7CisgICAgc2V0ZW52IExEX0xJQlJBUllOMzJfUEFUSCAiJG9yaWdfbGRfbGlicmFyeW4zMl9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KExEX0xJQlJBUllOMzJfUEFUSCldIHsKKyAgICB1bnNldGVudiBMRF9MSUJSQVJZTjMyX1BBVEgKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnk2NF9wYXRoX3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZNjRfUEFUSCAiJG9yaWdfbGRfbGlicmFyeTY0X3BhdGgiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWTY0X1BBVEgpXSB7CisgICAgdW5zZXRlbnYgTERfTElCUkFSWTY0X1BBVEgKKyAgfQorICBpZiB7ICRvcmlnX2xkX2xpYnJhcnlfcGF0aF8zMl9zYXZlZCB9IHsKKyAgICBzZXRlbnYgTERfTElCUkFSWV9QQVRIXzMyICIkb3JpZ19sZF9saWJyYXJ5X3BhdGhfMzIiCisgIH0gZWxzZWlmIFtpbmZvIGV4aXN0cyBlbnYoTERfTElCUkFSWV9QQVRIXzMyKV0geworICAgIHVuc2V0ZW52IExEX0xJQlJBUllfUEFUSF8zMgorICB9CisgIGlmIHsgJG9yaWdfbGRfbGlicmFyeV9wYXRoXzY0X3NhdmVkIH0geworICAgIHNldGVudiBMRF9MSUJSQVJZX1BBVEhfNjQgIiRvcmlnX2xkX2xpYnJhcnlfcGF0aF82NCIKKyAgfSBlbHNlaWYgW2luZm8gZXhpc3RzIGVudihMRF9MSUJSQVJZX1BBVEhfNjQpXSB7CisgICAgdW5zZXRlbnYgTERfTElCUkFSWV9QQVRIXzY0CisgIH0KKyAgaWYgeyAkb3JpZ19keWxkX2xpYnJhcnlfcGF0aF9zYXZlZCB9IHsKKyAgICBzZXRlbnYgRFlMRF9MSUJSQVJZX1BBVEggIiRvcmlnX2R5bGRfbGlicmFyeV9wYXRoIgorICB9IGVsc2VpZiBbaW5mbyBleGlzdHMgZW52KERZTERfTElCUkFSWV9QQVRIKV0geworICAgIHVuc2V0ZW52IERZTERfTElCUkFSWV9QQVRICisgIH0KK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHByb2MgZ2V0X3NobGliX2V4dGVuc2lvbiB7IH0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitwcm9jIGdldF9zaGxpYl9leHRlbnNpb24geyB9IHsKKyAgICBnbG9iYWwgc2hsaWJfZXh0CisKKyAgICBpZiB7IFsgaXN0YXJnZXQgKi0qLWRhcndpbiogXSB9IHsKKwlzZXQgc2hsaWJfZXh0ICJkeWxpYiIKKyAgICB9IGVsc2VpZiB7IFsgaXN0YXJnZXQgKi0qLWN5Z3dpbiogXSB8fCBbIGlzdGFyZ2V0ICotKi1taW5ndyogXSB9IHsKKwlzZXQgc2hsaWJfZXh0ICJkbGwiCisgICAgfSBlbHNlaWYgeyBbIGlzdGFyZ2V0IGhwcGEqLSotaHB1eCogXSB9IHsKKwlzZXQgc2hsaWJfZXh0ICJzbCIKKyAgICB9IGVsc2UgeworCXNldCBzaGxpYl9leHQgInNvIgorICAgIH0KKyAgICByZXR1cm4gJHNobGliX2V4dAorfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvd3JhcHBlci5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvd3JhcHBlci5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU1YWU0MwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYi93cmFwcGVyLmV4cApAQCAtMCwwICsxLDQ1IEBACisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjIAorIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIyAKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKyMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIFRoaXMgZmlsZSBjb250YWlucyBHQ0Mtc3BlY2lmaWNzIGZvciBzdGF0dXMgd3JhcHBlcnMgZm9yIHRlc3QgcHJvZ3JhbXMuCisKKyMgJHt0b29sfV9tYXliZV9idWlsZF93cmFwcGVyIC0tIEJ1aWxkIHdyYXBwZXIgb2JqZWN0IGlmIHRoZSB0YXJnZXQKKyMgbmVlZHMgaXQuICBGSUxFTkFNRSBpcyB0aGUgcGF0aCB0byB0aGUgd3JhcHBlciBmaWxlLiAgSWYgdGhlcmUgYXJlCisjIGFkZGl0aW9uYWwgYXJndW1lbnRzLCB0aGV5IGFyZSBjb21tYW5kLWxpbmUgb3B0aW9ucyB0byBwcm92aWRlIHRvCisjIHRoZSBjb21waWxlciB3aGVuIGNvbXBpbGluZyBGSUxFTkFNRS4KKworcHJvYyAke3Rvb2x9X21heWJlX2J1aWxkX3dyYXBwZXIgeyBmaWxlbmFtZSBhcmdzIH0geworICAgIGdsb2JhbCBnbHVlZmlsZSB3cmFwX2ZsYWdzCisKKyAgICBpZiB7IFt0YXJnZXRfaW5mbyBuZWVkc19zdGF0dXNfd3JhcHBlcl0gIT0gIiIgXAorIAkgJiYgW3RhcmdldF9pbmZvIG5lZWRzX3N0YXR1c193cmFwcGVyXSAhPSAiMCIgXAorCSAmJiAhW2luZm8gZXhpc3RzIGdsdWVmaWxlXSB9IHsKKwlzZXQgc2F2ZWRfd3JhcF9jb21waWxlX2ZsYWdzIFt0YXJnZXRfaW5mbyB3cmFwX2NvbXBpbGVfZmxhZ3NdCisJc2V0IGZsYWdzIFtqb2luICRhcmdzICIgIl0KKwkjIFRoZSB3cmFwcGVyIGNvZGUgbWF5IGNvbnRhaW4gY29kZSB0aGF0IGdjYyBvYmplY3RzIG9uLiAgVGhpcworCSMgYmVjYW1lIHRydWUgZm9yIGRlamFnbnUtMS40LjQuICBUaGUgc2V0IG9mIHdhcm5pbmdzIGFuZCBjb2RlCisJIyB0aGF0IGdjYyBvYmplY3RzIG9uIG1heSBjaGFuZ2UsIHNvIGp1c3QgbWFrZSBzdXJlIC13IGlzIGFsd2F5cworCSMgcGFzc2VkIHRvIHR1cm4gb2ZmIGFsbCB3YXJuaW5ncy4KKwlzZXRfY3VycnRhcmdldF9pbmZvIHdyYXBfY29tcGlsZV9mbGFncyBcCisJICAgICIkc2F2ZWRfd3JhcF9jb21waWxlX2ZsYWdzIC13ICRmbGFncyIKKwlzZXQgcmVzdWx0IFtidWlsZF93cmFwcGVyICRmaWxlbmFtZV0KKwlzZXRfY3VycnRhcmdldF9pbmZvIHdyYXBfY29tcGlsZV9mbGFncyAiJHNhdmVkX3dyYXBfY29tcGlsZV9mbGFncyIKKwlpZiB7ICRyZXN1bHQgIT0gIiIgfSB7CisJICAgIHNldCBnbHVlZmlsZSBbbGluZGV4ICRyZXN1bHQgMF0KKwkgICAgc2V0IHdyYXBfZmxhZ3MgW2xpbmRleCAkcmVzdWx0IDFdCisJfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5OTg1ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwCkBAIC0wLDAgKzEsMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBsaWJmZmkgdGVzdHN1aXRlIHRoYXQgdXNlcyB0aGUgJ2RnLmV4cCcgZHJpdmVyLgorCitsb2FkX2xpYiBsaWJmZmktZGcuZXhwCisKK2RnLWluaXQKK2xpYmZmaS1pbml0CisKK2dsb2JhbCBzcmNkaXIgc3ViZGlyCisKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItTzAgLVcgLVdhbGwiICIiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8yIiAiIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouXFtjU1xdXV0gIi1PMyIgIiIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICItT3MiICIiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIiAiIgorCitkZy1maW5pc2gKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIHRjbC1pbmRlbnQtbGV2ZWw6NAorIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTc5ZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYwpAQCAtMCwwICsxLDg5IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisKKworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0X2ZuMChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkgKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSkgKyAoaW50KSooaW50ICopYXJnc1szXSArCisgICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihpbnQgKilhcmdzWzEzXSkgKworICAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pICsgICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0pLAorCSAoaW50KSooaW50ICopYXJnc1szXSwgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1s4XSksIChpbnQpKihpbnQgKilhcmdzWzldLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzE0XSksKihpbnQgKilhcmdzWzE1XSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTApKHVuc2lnbmVkIGxvbmcgbG9uZywgaW50LCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICBpbnQsIHNpZ25lZCBzaG9ydCwgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQsCisJCQkJICBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LCBpbnQsIGludCwKKwkJCQkgIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICogY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2ZuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUwKWNvZGUpKQorICAgICgxTEwsIDIsIDNMTCwgNCwgMTI3LCA0MjlMTCwgNywgOCwgOS41LCAxMCwgMTEsIDEyLCAxMywKKyAgICAgMTksIDIxLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDQyOSA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDY4MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2ODAiIH0gKi8KKyAgICAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMjMxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbC4KKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIHZhbHVlcyBwYXNzaW5nIGZyb20gZGlmZmVyZW50IHR5cGUuCisJCUFsc28sIGV4Y2VlZCB0aGUgbGltaXQgb2YgZ3ByIGFuZCBmcHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCisKK3N0YXRpYyB2b2lkIGNsb3N1cmVfdGVzdF9mbjEoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSooZmxvYXQgKilhcmdzWzBdICsoaW50KSgqKGZsb2F0ICopYXJnc1sxXSkgKworICAgIChpbnQpKCooZmxvYXQgKilhcmdzWzJdKSArIChpbnQpKihmbG9hdCAqKWFyZ3NbM10gKworICAgIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSkgKworICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAoaW50KSgqKGRvdWJsZSopYXJnc1s4XSkgKyAoaW50KSooaW50ICopYXJnc1s5XSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzE0XSkgKyAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSooZmxvYXQgKilhcmdzWzBdLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxXSksCisJIChpbnQpKCooZmxvYXQgKilhcmdzWzJdKSwgKGludCkqKGZsb2F0ICopYXJnc1szXSwKKwkgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pLAorCSAoaW50KSooZmxvYXQgKilhcmdzWzZdLCAoaW50KSgqKGludCAqKWFyZ3NbN10pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooaW50ICopYXJnc1s5XSwKKwkgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihpbnQgKilhcmdzWzEzXSksCisJIChpbnQpKCooaW50ICopYXJnc1sxNF0pLCAqKGludCAqKWFyZ3NbMTVdLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTEpKGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBzaWduZWQgc2hvcnQsCisJCQkJICBmbG9hdCwgZmxvYXQsIGludCwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQsCisJCQkJICBpbnQsIGludCwgaW50LCBpbnQpOworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTRdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xvc3VyZV90ZXN0X3R5cGUxKWNvZGUpKQorICAgICgxLjEsIDIuMiwgMy4zLCA0LjQsIDEyNywgNS41LCA2LjYsIDgsIDksIDEwLCAxMSwgMTIuMCwgMTMsCisgICAgIDE5LCAyMSwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA1IDYgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1NSIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhmZjlkOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMKQEAgLTAsMCArMSw4MSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xvc3VyZV90ZXN0X2ZuMihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKihkb3VibGUgKilhcmdzWzBdICsoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMV0pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMl0pICsgKGludCkqKGRvdWJsZSAqKWFyZ3NbM10gKworICAgIChpbnQpKCooc2lnbmVkIHNob3J0ICopYXJnc1s0XSkgKyAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbNV0pICsKKyAgICAoaW50KSooZG91YmxlICopYXJnc1s2XSArIChpbnQpKCooaW50ICopYXJnc1s3XSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1s4XSkgKyAoaW50KSooaW50ICopYXJnc1s5XSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzEwXSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxM10pICsKKyAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKihkb3VibGUgKilhcmdzWzBdLCAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMl0pLCAoaW50KSooZG91YmxlICopYXJnc1szXSwKKwkgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwgKGludCkoKihkb3VibGUgKilhcmdzWzVdKSwKKwkgKGludCkqKGRvdWJsZSAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJIChpbnQpKCooZG91YmxlKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJIChpbnQpKCooaW50ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAoaW50KSooaW50ICopYXJnc1sxMl0sIChpbnQpKCooZmxvYXQgKilhcmdzWzEzXSksCisJIChpbnQpKCooaW50ICopYXJnc1sxNF0pLCAqKGludCAqKWFyZ3NbMTVdLCAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwKKwkgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTIpKGRvdWJsZSwgZG91YmxlLCBkb3VibGUsIGRvdWJsZSwgc2lnbmVkIHNob3J0LAorCQkJCSAgZG91YmxlLCBkb3VibGUsIGludCwgZG91YmxlLCBpbnQsIGludCwgZmxvYXQsCisJCQkJICBpbnQsIGZsb2F0LCBpbnQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s2XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMiljb2RlKSkKKyAgICAoMSwgMiwgMywgNCwgMTI3LCA1LCA2LCA4LCA5LCAxMCwgMTEsIDEyLjAsIDEzLAorICAgICAxOS4wLCAyMSwgMSk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDEyNyA1IDYgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1NSIgfSAqLworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1NGQ4MAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMKQEAgLTAsMCArMSw4MiBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDCisJCURhcndpbi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xvc3VyZV90ZXN0X2ZuMyhmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhKQorIHsKKyAgICooZmZpX2FyZyopcmVzcCA9CisgICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0gKyhpbnQpKCooZmxvYXQgKilhcmdzWzFdKSArCisgICAgIChpbnQpKCooZmxvYXQgKilhcmdzWzJdKSArIChpbnQpKihmbG9hdCAqKWFyZ3NbM10gKworICAgICAoaW50KSgqKGZsb2F0ICopYXJnc1s0XSkgKyAoaW50KSgqKGZsb2F0ICopYXJnc1s1XSkgKworICAgICAoaW50KSooZmxvYXQgKilhcmdzWzZdICsgKGludCkoKihmbG9hdCAqKWFyZ3NbN10pICsKKyAgICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMTBdKSArIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSkgKworICAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGZsb2F0ICopYXJnc1sxM10pICsKKyAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMTRdKSArICAqKGludCAqKWFyZ3NbMTVdICsgKGludHB0cl90KXVzZXJkYXRhOworCisgICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0sIChpbnQpKCooZmxvYXQgKilhcmdzWzFdKSwKKwkgIChpbnQpKCooZmxvYXQgKilhcmdzWzJdKSwgKGludCkqKGZsb2F0ICopYXJnc1szXSwKKwkgIChpbnQpKCooZmxvYXQgKilhcmdzWzRdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pLAorCSAgKGludCkqKGZsb2F0ICopYXJnc1s2XSwgKGludCkoKihmbG9hdCAqKWFyZ3NbN10pLAorCSAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJICAoaW50KSgqKGZsb2F0ICopYXJnc1sxMF0pLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxMV0pLAorCSAgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGZsb2F0ICopYXJnc1sxM10pLAorCSAgKGludCkoKihmbG9hdCAqKWFyZ3NbMTRdKSwgKihpbnQgKilhcmdzWzE1XSwgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsCisJICAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCisgfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMykoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwKKwkJCQkgIGZsb2F0LCBmbG9hdCwgZG91YmxlLCBpbnQsIGZsb2F0LCBmbG9hdCwgaW50LAorCQkJCSAgZmxvYXQsIGZsb2F0LCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzhdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1sxMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTMpY29kZSkpCisgICAgKDEuMSwgMi4yLCAzLjMsIDQuNCwgNS41LCA2LjYsIDcuNywgOC44LCA5LCAxMCwgMTEuMTEsIDEyLjAsIDEzLAorICAgICAxOS4xOSwgMjEuMjEsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiAxMzUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM1IiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGExNTMwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYwpAQCAtMCwwICsxLDg5IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIGxvbmcgbG9uZyB2YWx1ZXMgcGFzc2luZy4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzEwMjYJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdF9mbjAoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1szXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNl0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s3XSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOF0gKyAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s5XSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTBdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMV0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEyXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTNdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxNF0gKworICAgICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzNdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s0XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNV0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzZdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s3XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzldLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzExXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTJdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxM10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzE0XSwKKwkgKihpbnQgKilhcmdzWzE1XSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTApKHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCBpbnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKKyAgaW50IGksIHJlczsKKworICBmb3IgKGkgPSAwOyBpIDwgMTU7IGkrKykgeworICAgIGNsX2FyZ190eXBlc1tpXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIH0KKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSkKKyAgICAoMUxMLCAyTEwsIDNMTCwgNExMLCAxMjdMTCwgNDI5TEwsIDdMTCwgOExMLCA5TEwsIDEwTEwsIDExTEwsIDEyTEwsCisgICAgIDEzTEwsIDE5TEwsIDIxTEwsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNDI5IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogNjgwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY4MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTA3NDQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYwpAQCAtMCwwICsxLDkyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIG11bHRpcGxlIGxvbmcgbG9uZyB2YWx1ZXMgcGFzc2luZy4KKwkJRXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgcmVnaXN0ZXJzIG9uIFBvd2VyUEMKKwkJRGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMDI2CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0X2ZuNShmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzFdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzNdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s0XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s2XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzddICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s4XSArIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzldICsKKyAgICAoaW50KSooaW50ICopYXJnc1sxMF0gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzExXSArCisgICAgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTJdICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxM10gKworICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzE0XSArCisgICAgKihpbnQgKilhcmdzWzE1XSArIChpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMF0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzFdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbM10sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzRdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s1XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbNl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzddLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1s4XSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbOV0sCisJIChpbnQpKihpbnQgKilhcmdzWzEwXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTFdLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1sxMl0sCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzEzXSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMTRdLAorCSAqKGludCAqKWFyZ3NbMTVdLAorCSAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcgKilyZXNwKTsKKworfQorCit0eXBlZGVmIGludCAoKmNsb3N1cmVfdGVzdF90eXBlMCkodW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgdW5zaWduZWQgbG9uZyBsb25nLCB1bnNpZ25lZCBsb25nIGxvbmcsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvbmcsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgaSwgcmVzOworCisgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgY2xfYXJnX3R5cGVzW2ldID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgfQorICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGZvciAoaSA9IDExOyBpIDwgMTU7IGkrKykgeworICAgIGNsX2FyZ190eXBlc1tpXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIH0KKyAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTZdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSkKKyAgICAoMUxMLCAyTEwsIDNMTCwgNExMLCAxMjdMTCwgNDI5TEwsIDdMTCwgOExMLCA5TEwsIDEwTEwsIDExLCAxMkxMLAorICAgICAxM0xMLCAxOUxMLCAyMUxMLCAxKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDQyOSA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDY4MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2ODAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjNTRmZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBtdWx0aXBsZSB2YWx1ZXMgcGFzc2luZyBmcm9tIGRpZmZlcmVudCB0eXBlLgorCQlBbHNvLCBleGNlZWQgdGhlIGxpbWl0IG9mIGdwciBhbmQgZnByIHJlZ2lzdGVycyBvbiBQb3dlclBDLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMjM0MDQKKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTA4MzAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX3Rlc3RfZm4wKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMV0pICsKKyAgICAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0pICsKKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1szXSArCisgICAgKGludCkoKihpbnQgKilhcmdzWzRdKSArIChpbnQpKCooZG91YmxlICopYXJnc1s1XSkgKworICAgIChpbnQpKihkb3VibGUgKilhcmdzWzZdICsgKGludCkoKihmbG9hdCAqKWFyZ3NbN10pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pICsgKGludCkqKGRvdWJsZSAqKWFyZ3NbOV0gKworICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihpbnQgKilhcmdzWzEzXSkgKworICAgIChpbnQpKCooZG91YmxlICopYXJnc1sxNF0pICsgIChpbnQpKihkb3VibGUgKilhcmdzWzE1XSArCisgICAgKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICAqKWFyZ3NbMF0sCisJIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAgKilhcmdzWzJdKSwKKwkgKGludCkqKHVuc2lnbmVkIGxvbmcgbG9uZyAgKilhcmdzWzNdLAorCSAoaW50KSgqKGludCAqKWFyZ3NbNF0pLCAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbNV0pLAorCSAoaW50KSooZG91YmxlICopYXJnc1s2XSwgKGludCkoKihmbG9hdCAqKWFyZ3NbN10pLAorCSAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pLCAoaW50KSooZG91YmxlICopYXJnc1s5XSwKKwkgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJIChpbnQpKihpbnQgKilhcmdzWzEyXSwgKGludCkoKihpbnQgKilhcmdzWzEzXSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1sxNF0pLCAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbMTVdKSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX3Rlc3RfdHlwZTApKHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgbG9uZywKKwkJCQkgIGludCwgZG91YmxlLCBkb3VibGUsIGZsb2F0LCBkb3VibGUsIGRvdWJsZSwKKwkJCQkgIGludCwgZmxvYXQsIGludCwgaW50LCBkb3VibGUsIGRvdWJsZSk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1s0XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbN10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsX2FyZ190eXBlc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1s5XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsX2FyZ190eXBlc1sxMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzExXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTNdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDE2LAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbG9zdXJlX3Rlc3RfdHlwZTApY29kZSkpCisgICAgKDEsIDIsIDMsIDQsIDEyNywgNDI5LiwgNy4sIDguLCA5LjUsIDEwLiwgMTEsIDEyLiwgMTMsCisgICAgIDE5LCAyMS4sIDEuKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgMTI3IDQyOSA3IDggOSAxMCAxMSAxMiAxMyAxOSAyMSAxIDM6IDY4MCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2ODAiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNhZmEwYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgbXVsdGlwbGUgdmFsdWVzIHBhc3NpbmcgZnJvbSBkaWZmZXJlbnQgdHlwZS4KKwkJQWxzbywgZXhjZWVkIHRoZSBsaW1pdCBvZiBncHIgYW5kIGZwciByZWdpc3RlcnMgb24gUG93ZXJQQworCQlEYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkCitjbG9zdXJlX2xvY190ZXN0X2ZuMChmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSB2b2lkKiB1c2VyZGF0YSkKK3sKKyAgKihmZmlfYXJnKilyZXNwID0KKyAgICAoaW50KSoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSArIChpbnQpKCooaW50ICopYXJnc1sxXSkgKworICAgIChpbnQpKCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1syXSkgKyAoaW50KSooaW50ICopYXJnc1szXSArCisgICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSArCisgICAgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAoaW50KSgqKGRvdWJsZSAqKWFyZ3NbOF0pICsgKGludCkqKGludCAqKWFyZ3NbOV0gKworICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgKGludCkqKGludCAqKWFyZ3NbMTJdICsgKGludCkoKihpbnQgKilhcmdzWzEzXSkgKworICAgIChpbnQpKCooaW50ICopYXJnc1sxNF0pICsgICooaW50ICopYXJnc1sxNV0gKyAoaW50cHRyX3QpdXNlcmRhdGE7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWRcbiIsCisJIChpbnQpKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdLCAoaW50KSgqKGludCAqKWFyZ3NbMV0pLAorCSAoaW50KSgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWFyZ3NbMl0pLAorCSAoaW50KSooaW50ICopYXJnc1szXSwgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwKKwkgKGludCkoKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzVdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJIChpbnQpKCooZG91YmxlICopYXJnc1s4XSksIChpbnQpKihpbnQgKilhcmdzWzldLAorCSAoaW50KSgqKGludCAqKWFyZ3NbMTBdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSwKKwkgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzE0XSksKihpbnQgKilhcmdzWzE1XSwKKwkgKGludCkoaW50cHRyX3QpdXNlcmRhdGEsIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKCpjbG9zdXJlX2xvY190ZXN0X3R5cGUwKSh1bnNpZ25lZCBsb25nIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAorCQkJCSAgaW50LCBzaWduZWQgc2hvcnQsIHVuc2lnbmVkIGxvbmcgbG9uZywgaW50LAorCQkJCSAgaW50LCBkb3VibGUsIGludCwgaW50LCBmbG9hdCwgaW50LCBpbnQsCisJCQkJICBpbnQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX2Nsb3N1cmUgKnBjbDsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworICB2b2lkICpjb2RlbG9jOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1s3XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbF9hcmdfdHlwZXNbOV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzEwXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMTJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxM10gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMTVdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsX2FyZ190eXBlc1sxNl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxNiwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIHBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlbG9jKTsKKyAgQ0hFQ0socGNsICE9IE5VTEwpOworICBDSEVDSyhjb2RlbG9jICE9IE5VTEwpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV9sb2NfdGVzdF9mbjAsCisJCQkgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZWxvYykgPT0gRkZJX09LKTsKKyAgCisgIENIRUNLKG1lbWNtcChwY2wsIGNvZGVsb2MsIHNpemVvZigqcGNsKSkgPT0gMCk7CisKKyAgcmVzID0gKCooKGNsb3N1cmVfbG9jX3Rlc3RfdHlwZTApY29kZWxvYykpCisgICAgKDFMTCwgMiwgM0xMLCA0LCAxMjcsIDQyOUxMLCA3LCA4LCA5LjUsIDEwLCAxMSwgMTIsIDEzLAorICAgICAxOSwgMjEsIDEpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCAxMjcgNDI5IDcgOCA5IDEwIDExIDEyIDEzIDE5IDIxIDEgMzogNjgwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY4MCIgfSAqLworICAgICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmZjYzFmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMKQEAgLTAsMCArMSw2NCBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsIChzdGRjYWxsIGNvbnZlbnRpb24pCisgICBQdXJwb3NlOglDaGVjayBoYW5kbGluZyB3aGVuIGNhbGxlciBleHBlY3RzIHN0ZGNhbGwgY2FsbGVlCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTx0d2FsbGphdmFAZGV2LmphdmEubmV0PiAqLworCisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2Nsb3N1cmVfdGVzdF9zdGRjYWxsKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJIHZvaWQqIHVzZXJkYXRhKQoreworICAqKGZmaV9hcmcqKXJlc3AgPQorICAgIChpbnQpKihpbnQgKilhcmdzWzBdICsgKGludCkoKihpbnQgKilhcmdzWzFdKQorICAgICsgKGludCkoKihpbnQgKilhcmdzWzJdKSAgKyAoaW50KSgqKGludCAqKWFyZ3NbM10pCisgICAgKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwKKwkgKGludCkqKGludCAqKWFyZ3NbMF0sIChpbnQpKCooaW50ICopYXJnc1sxXSksCisJIChpbnQpKCooaW50ICopYXJnc1syXSksIChpbnQpKCooaW50ICopYXJnc1szXSksCisgICAgICAgICAoaW50KSooZmZpX2FyZyAqKXJlc3ApOworCit9CisKK3R5cGVkZWYgaW50IChfX3N0ZGNhbGwgKmNsb3N1cmVfdGVzdF90eXBlMCkoaW50LCBpbnQsIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisgIGludCByZXM7CisgIHZvaWQqIHNwX3ByZTsKKyAgdm9pZCogc3BfcG9zdDsKKyAgY2hhciBidWZbMTAyNF07CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfU1REQ0FMTCwgNCwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X3N0ZGNhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIDMgLyogdXNlcmRhdGEgKi8sIGNvZGUpID09IEZGSV9PSyk7CisKKyAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcHJlKSk7CisgIHJlcyA9ICgqKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSgwLCAxLCAyLCAzKTsKKyAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcG9zdCkpOworICAvKiB7IGRnLW91dHB1dCAiMCAxIDIgMzogOSIgfSAqLworCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkiIH0gKi8KKworICBzcHJpbnRmKGJ1ZiwgIm1pc21hdGNoOiBwcmU9JXAgdnMgcG9zdD0lcCIsIHNwX3ByZSwgc3BfcG9zdCk7CisgIHByaW50Zigic3RhY2sgcG9pbnRlciAlc1xuIiwgKHNwX3ByZSA9PSBzcF9wb3N0ID8gIm1hdGNoIiA6IGJ1ZikpOworICAvKiB7IGRnLW91dHB1dCAiXG5zdGFjayBwb2ludGVyIG1hdGNoIiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBhMzM0ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYwpAQCAtMCwwICsxLDk0IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgeworICBpbnQgYTsKKyAgaW50IGI7CisgIGludCBjOworfSBjbHNfc3RydWN0XzEyYnl0ZTsKKworY2xzX3N0cnVjdF8xMmJ5dGUgY2xzX3N0cnVjdF8xMmJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIxLmEgKyBiMi5hOworICByZXN1bHQuYiA9IGIxLmIgKyBiMi5iOworICByZXN1bHQuYyA9IGIxLmMgKyBiMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBiMS5hLCBiMS5iLCBiMS5jLCBiMi5hLCBiMi5iLCBiMi5jLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjbHNfc3RydWN0XzEyYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwKKwkJCQkgdm9pZCoqIGFyZ3MgLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgYjEsIGIyOworCisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUqKShhcmdzWzBdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8xMmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzEyYnl0ZV9mbihiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzEyYnl0ZSBoX2RibCA9IHsgNywgNCwgOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xMmJ5dGUgal9kYmwgPSB7IDEsIDUsIDMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTJieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmhfZGJsOworICBhcmdzX2RibFsxXSA9ICZqX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzEyYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI3IDQgOSAxIDUgMzogOCA5IDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCA5IDEyIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzEyYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsLmEgPSAwOworICByZXNfZGJsLmIgPSAwOworICByZXNfZGJsLmMgPSAwOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMTJieXRlKCopKGNsc19zdHJ1Y3RfMTJieXRlLCBjbHNfc3RydWN0XzEyYnl0ZSkpKGNvZGUpKShoX2RibCwgal9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG43IDQgOSAxIDUgMzogOCA5IDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCA5IDEyIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjkyOTJhCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlIHsKKyAgaW50IGE7CisgIGRvdWJsZSBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xNmJ5dGU7CisKK2Nsc19zdHJ1Y3RfMTZieXRlIGNsc19zdHJ1Y3RfMTZieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgYjIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBiMS5hICsgYjIuYTsKKyAgcmVzdWx0LmIgPSBiMS5iICsgYjIuYjsKKyAgcmVzdWx0LmMgPSBiMS5jICsgYjIuYzsKKworICBwcmludGYoIiVkICVnICVkICVkICVnICVkOiAlZCAlZyAlZFxuIiwgYjEuYSwgYjEuYiwgYjEuYywgYjIuYSwgYjIuYiwgYjIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgY2xzX3N0cnVjdF8xNmJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUgYjEsIGIyOworCisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUqKShhcmdzWzBdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8xNmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzE2Ynl0ZV9mbihiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSBoX2RibCA9IHsgNywgOC4wLCA5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSBqX2RibCA9IHsgMSwgOS4wLCAzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmhfZGJsOworICBhcmdzX2RibFsxXSA9ICZqX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzE2Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI3IDggOSAxIDkgMzogOCAxNyAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggMTcgMTIiIH0gKi8KKworICByZXNfZGJsLmEgPSAwOworICByZXNfZGJsLmIgPSAwLjA7CisgIHJlc19kYmwuYyA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzE2Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzE2Ynl0ZSgqKShjbHNfc3RydWN0XzE2Ynl0ZSwgY2xzX3N0cnVjdF8xNmJ5dGUpKShjb2RlKSkoaF9kYmwsIGpfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuNyA4IDkgMSA5IDM6IDggMTcgMTIiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IDEyIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGM4YzZkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gRG91YmxlIGFsaWdubWVudCBjaGVjayBvbiBkYXJ3aW4uCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTUJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIHsKKyAgZG91YmxlIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKKyAgdW5zaWduZWQgY2hhciBjOworICBkb3VibGUgZDsKK30gY2xzX3N0cnVjdF8xOGJ5dGU7CisKK2Nsc19zdHJ1Y3RfMThieXRlIGNsc19zdHJ1Y3RfMThieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE4Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworCisgIHByaW50ZigiJWcgJWQgJWQgJWcgJWcgJWQgJWQgJWc6ICVnICVkICVkICVnXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzE4Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMThieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMThieXRlKilyZXNwID0gY2xzX3N0cnVjdF8xOGJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgZ19kYmwgPSB7IDEuMCwgMTI3LCAxMjYsIDMuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgZl9kYmwgPSB7IDQuMCwgMTI1LCAxMjQsIDUuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOGJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMThieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMTI3IDEyNiAzIDQgMTI1IDEyNCA1OiA1IDI1MiAyNTAgOCIgfSAqLworICBwcmludGYoInJlczogJWcgJWQgJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSAyNTIgMjUwIDgiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMThieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMThieXRlKCopKGNsc19zdHJ1Y3RfMThieXRlLCBjbHNfc3RydWN0XzE4Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDEyNyAxMjYgMyA0IDEyNSAxMjQgNTogNSAyNTIgMjUwIDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgMjUyIDI1MCA4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY0MjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jCkBAIC0wLDAgKzEsMTAyIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIERvdWJsZSBhbGlnbm1lbnQgY2hlY2sgb24gZGFyd2luLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTE1CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSB7CisgIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gY2xzX3N0cnVjdF8xOWJ5dGU7CisKK2Nsc19zdHJ1Y3RfMTlieXRlIGNsc19zdHJ1Y3RfMTlieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKyAgcmVzdWx0LmUgPSBhMS5lICsgYTIuZTsKKworCisgIHByaW50ZigiJWcgJWQgJWQgJWcgJWQgJWcgJWQgJWQgJWcgJWQ6ICVnICVkICVkICVnICVkXG4iLAorCSBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLCBhMS5lLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLCBhMi5lLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCwgcmVzdWx0LmUpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xOWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzE5Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTlieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s2XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTlieXRlIGdfZGJsID0geyAxLjAsIDEyNywgMTI2LCAzLjAsIDEyMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xOWJ5dGUgZl9kYmwgPSB7IDQuMCwgMTI1LCAxMjQsIDUuMCwgMTE5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE5Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s1XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMTlieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMTI3IDEyNiAzIDEyMCA0IDEyNSAxMjQgNSAxMTk6IDUgMjUyIDI1MCA4IDIzOSIgfSAqLworICBwcmludGYoInJlczogJWcgJWQgJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDI1MiAyNTAgOCAyMzkiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMTlieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMTlieXRlKCopKGNsc19zdHJ1Y3RfMTlieXRlLCBjbHNfc3RydWN0XzE5Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDEyNyAxMjYgMyAxMjAgNCAxMjUgMTI0IDUgMTE5OiA1IDI1MiAyNTAgOCAyMzkiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSAyNTIgMjUwIDggMjM5IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDAyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MDIJICovCisKKworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7Cit9IGNsc19zdHJ1Y3RfMV8xYnl0ZTsKKworY2xzX3N0cnVjdF8xXzFieXRlIGNsc19zdHJ1Y3RfMV8xYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisKKyAgcHJpbnRmKCIlZCAlZDogJWRcbiIsIGExLmEsIGEyLmEsIHJlc3VsdC5hKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMV8xYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMV8xYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfMV8xYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMV8xYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbMl07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgZ19kYmwgPSB7IDEyIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzFfMWJ5dGUgZl9kYmwgPSB7IDE3OCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xXzFieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xXzFieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDE3ODogMTkwIiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzX2RibC5hKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxOTAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMV8xYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzFfMWJ5dGUoKikoY2xzX3N0cnVjdF8xXzFieXRlLCBjbHNfc3RydWN0XzFfMWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgMTc4OiAxOTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfZGJsLmEpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBkZDdhYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSB7CisgIGRvdWJsZSBhOworICBkb3VibGUgYjsKKyAgaW50IGM7Cit9IGNsc19zdHJ1Y3RfMjBieXRlOworCitjbHNfc3RydWN0XzIwYnl0ZSBjbHNfc3RydWN0XzIwYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZyAlZyAlZCAlZyAlZyAlZDogJWcgJWcgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8yMGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzIwYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMjBieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGdfZGJsID0geyAxLjAsIDIuMCwgMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgZl9kYmwgPSB7IDQuMCwgNS4wLCA3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMjBieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA3OiA1IDcgMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDcgMTAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMjBieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMjBieXRlKCopKGNsc19zdHJ1Y3RfMjBieXRlLCBjbHNfc3RydWN0XzIwYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNzogNSA3IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSA3IDEwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmNiYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSB7CisgIGludCBhOworICBkb3VibGUgYjsKKyAgZG91YmxlIGM7Cit9IGNsc19zdHJ1Y3RfMjBieXRlOworCitjbHNfc3RydWN0XzIwYnl0ZSBjbHNfc3RydWN0XzIwYnl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZyAlZCAlZyAlZzogJWQgJWcgJWdcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8yMGJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzIwYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMjBieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjBieXRlIGdfZGJsID0geyAxLCAyLjAsIDMuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yMGJ5dGUgZl9kYmwgPSB7IDQsIDUuMCwgNy4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzIwYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMjBieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA3OiA1IDcgMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDcgMTAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfMjBieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfMjBieXRlKCopKGNsc19zdHJ1Y3RfMjBieXRlLCBjbHNfc3RydWN0XzIwYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNzogNSA3IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogNSA3IDEwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmE2ZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSB7CisgIGRvdWJsZSBhOworICBkb3VibGUgYjsKKyAgaW50IGM7CisgIGZsb2F0IGQ7Cit9IGNsc19zdHJ1Y3RfMjRieXRlOworCitjbHNfc3RydWN0XzI0Ynl0ZSBjbHNfc3RydWN0XzI0Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgYjAsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGIxLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBiMiwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgYjMpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworICByZXN1bHQuYiA9IGIwLmIgKyBiMS5iICsgYjIuYiArIGIzLmI7CisgIHJlc3VsdC5jID0gYjAuYyArIGIxLmMgKyBiMi5jICsgYjMuYzsKKyAgcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCisgIHByaW50ZigiJWcgJWcgJWQgJWcgJWcgJWcgJWQgJWcgJWcgJWcgJWQgJWcgJWcgJWcgJWQgJWc6ICVnICVnICVkICVnXG4iLAorCSBiMC5hLCBiMC5iLCBiMC5jLCBiMC5kLAorCSBiMS5hLCBiMS5iLCBiMS5jLCBiMS5kLAorCSBiMi5hLCBiMi5iLCBiMi5jLCBiMi5kLAorCSBiMy5hLCBiMy5iLCBiMy5jLCBiMi5kLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMjRieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgYjAsIGIxLCBiMiwgYjM7CisKKyAgYjAgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUqKShhcmdzWzJdKTsKKyAgYjMgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSopKGFyZ3NbM10pOworCisgICooY2xzX3N0cnVjdF8yNGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzI0Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNiwgNS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMsIDcuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yNGJ5dGUgZ19kYmwgPSB7IDQuMCwgNS4wLCA3LCA5LjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMjRieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMSwgNC4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzI0Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbM10gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzRdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8yNGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiOSAyIDYgNSAxIDIgMyA3IDQgNSA3IDkgOCA2IDEgOTogMjIgMTUgMTcgMjUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzI0Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzI0Ynl0ZSgqKShjbHNfc3RydWN0XzI0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzI0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzI0Ynl0ZSwKKwkJCQkgICBjbHNfc3RydWN0XzI0Ynl0ZSkpCisJICAgICAoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuOSAyIDYgNSAxIDIgMyA3IDQgNSA3IDkgOCA2IDEgOTogMjIgMTUgMTcgMjUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxZTEzMAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gY2xzX3N0cnVjdF8yYnl0ZTsKKworY2xzX3N0cnVjdF8yYnl0ZSBjbHNfc3RydWN0XzJieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzJieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTIuYSwgYTIuYiwgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfMmJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzJieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF8yYnl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMmJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSBnX2RibCA9IHsgMTIsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8yYnl0ZSBmX2RibCA9IHsgMSwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMmJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8yYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiAxMjcgMSAxMzogMTMgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8yYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzJieXRlKCopKGNsc19zdHJ1Y3RfMmJ5dGUsIGNsc19zdHJ1Y3RfMmJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgMTI3IDEgMTM6IDEzIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3ODBjMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMKQEAgLTAsMCArMSw5NSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkwMgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF8zXzFieXRlOworCitjbHNfc3RydWN0XzNfMWJ5dGUgY2xzX3N0cnVjdF8zXzFieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywKKwkgYTIuYSwgYTIuYiwgYTIuYywKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzNfMWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzNfMWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzNfMWJ5dGVfZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zXzFieXRlIGdfZGJsID0geyAxMiwgMTMsIDE0IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNfMWJ5dGUgZl9kYmwgPSB7IDE3OCwgMTc5LCAxODAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM18xYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8zXzFieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDEzIDE0IDE3OCAxNzkgMTgwOiAxOTAgMTkyIDE5NCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCAxOTIgMTk0IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzNfMWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8zXzFieXRlKCopKGNsc19zdHJ1Y3RfM18xYnl0ZSwgY2xzX3N0cnVjdF8zXzFieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDEzIDE0IDE3OCAxNzkgMTgwOiAxOTAgMTkyIDE5NCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCAxOTIgMTk0IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzA1Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIHsKKyAgdW5zaWduZWQgc2hvcnQgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBjbHNfc3RydWN0XzNieXRlOworCitjbHNfc3RydWN0XzNieXRlIGNsc19zdHJ1Y3RfM2J5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8zYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzNieXRlKilyZXNwID0gY2xzX3N0cnVjdF8zYnl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIGdfZGJsID0geyAxMiwgMTE5IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzNieXRlIGZfZGJsID0geyAxLCAxNSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8zYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiAxMTkgMSAxNTogMTMgMTM0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDEzNCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8zYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzNieXRlKCopKGNsc19zdHJ1Y3RfM2J5dGUsIGNsc19zdHJ1Y3RfM2J5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgMTE5IDEgMTU6IDEzIDEzNCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxMzQiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNzcwYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUVzcGVjaWFsbHkgd2l0aCBzbWFsbCBzdHJ1Y3R1cmVzIHdoaWNoIG1heSBmaXQgaW4gb25lCisJCXJlZ2lzdGVyLiBEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgc2hvcnQgYjsKK30gY2xzX3N0cnVjdF8zYnl0ZV8xOworCitjbHNfc3RydWN0XzNieXRlXzEgY2xzX3N0cnVjdF8zYnl0ZV9mbjEoc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8zYnl0ZV9nbjEoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzNieXRlXzEqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfM2J5dGVfMSopcmVzcCA9IGNsc19zdHJ1Y3RfM2J5dGVfZm4xKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfM2J5dGVfMSBnX2RibCA9IHsgMTUsIDEyNSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIGZfZGJsID0geyA5LCAxOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF8zYnl0ZV8xIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzNieXRlX2ZuMSksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxNSAxMjUgOSAxOTogMjQgMTQ0IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI0IDE0NCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8zYnl0ZV9nbjEsIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF8zYnl0ZV8xKCopKGNsc19zdHJ1Y3RfM2J5dGVfMSwgY2xzX3N0cnVjdF8zYnl0ZV8xKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjE1IDEyNSA5IDE5OiAyNCAxNDQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjQgMTQ0IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzODA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlFc3BlY2lhbGx5IHdpdGggc21hbGwgc3RydWN0dXJlcyB3aGljaCBtYXkgZml0IGluIG9uZQorCQlyZWdpc3Rlci4gRGVwZW5kaW5nIG9uIHRoZSBBQkkuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MDIJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHVuc2lnbmVkIGNoYXIgZDsKK30gY2xzX3N0cnVjdF80XzFieXRlOworCitjbHNfc3RydWN0XzRfMWJ5dGUgY2xzX3N0cnVjdF80XzFieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF80XzFieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF80XzFieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF80XzFieXRlKilyZXNwID0gY2xzX3N0cnVjdF80XzFieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s1XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSBnX2RibCA9IHsgMTIsIDEzLCAxNCwgMTUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNF8xYnl0ZSBmX2RibCA9IHsgMTc4LCAxNzksIDE4MCwgMTgxIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzRfMWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzRfMWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgMTMgMTQgMTUgMTc4IDE3OSAxODAgMTgxOiAxOTAgMTkyIDE5NCAxOTYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLCByZXNfZGJsLmQpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDE5MCAxOTIgMTk0IDE5NiIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF80XzFieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNF8xYnl0ZSgqKShjbHNfc3RydWN0XzRfMWJ5dGUsIGNsc19zdHJ1Y3RfNF8xYnl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiAxMyAxNCAxNSAxNzggMTc5IDE4MCAxODE6IDE5MCAxOTIgMTk0IDE5NiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTkwIDE5MiAxOTQgMTk2IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFhYmEzYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIHNob3J0IGI7Cit9IGNsc19zdHJ1Y3RfNGJ5dGU7CisKK2Nsc19zdHJ1Y3RfNGJ5dGUgY2xzX3N0cnVjdF80Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWQgJWRcbiIsIGExLmEsIGExLmIsIGEyLmEsIGEyLmIsIHJlc3VsdC5hLCByZXN1bHQuYik7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzRieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF80Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNGJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzRieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNGJ5dGUgZ19kYmwgPSB7IDEyNywgMTIwIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIGZfZGJsID0geyAxMiwgMTI4IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzRieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF80Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMjcgMTIwIDEyIDEyODogMTM5IDI0OCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzRieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNGJ5dGUoKikoY2xzX3N0cnVjdF80Ynl0ZSwgY2xzX3N0cnVjdF80Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEyIDEyODogMTM5IDI0OCIgfSAqLworICBwcmludGYoInJlczogJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlYmEzZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jCkBAIC0wLDAgKzEsMTA5IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwNzA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworICB1bnNpZ25lZCBjaGFyIGU7Cit9IGNsc19zdHJ1Y3RfNWJ5dGU7CisKK2Nsc19zdHJ1Y3RfNWJ5dGUgY2xzX3N0cnVjdF81Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisgIHJlc3VsdC5lID0gYTEuZSArIGEyLmU7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWQgJWQgJWRcbiIsCisJIGExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kLCByZXN1bHQuZSk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzVieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfNWJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzVieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s2XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAzLCA0IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAzLCA0IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIHJlc19kYmwgPSB7IDAsIDAsIDAsIDAsIDAgfTsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF81Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMjcgMTIwIDEgMyA0IDEyIDEyOCA5IDMgNDogMTM5IDI0OCAxMCA2IDgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDgiIH0gKi8KKworICByZXNfZGJsLmEgPSAwOworICByZXNfZGJsLmIgPSAwOworICByZXNfZGJsLmMgPSAwOworICByZXNfZGJsLmQgPSAwOworICByZXNfZGJsLmUgPSAwOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF81Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzVieXRlKCopKGNsc19zdHJ1Y3RfNWJ5dGUsIGNsc19zdHJ1Y3RfNWJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDMgNCAxMiAxMjggOSAzIDQ6IDEzOSAyNDggMTAgNiA4IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzOSAyNDggMTAgNiA4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNTk1YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgb3ZlcmxhcHBpbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgeworICB1bnNpZ25lZCBzaG9ydCBhOworICB1bnNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfNWJ5dGU7CisKK2Nsc19zdHJ1Y3RfNWJ5dGUgY2xzX3N0cnVjdF81Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsCisJIGEyLmEsIGEyLmIsIGEyLmMsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF81Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNWJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzVieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzVieXRlKilyZXNwID0gY2xzX3N0cnVjdF81Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzVieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSBmX2RibCA9IHsgMTIsIDEyOCwgOSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF81Ynl0ZSByZXNfZGJsID0geyAwLCAwLCAwIH07CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDEyIDEyOCA5OiAxMzkgMjQ4IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzVieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNWJ5dGUoKikoY2xzX3N0cnVjdF81Ynl0ZSwgY2xzX3N0cnVjdF81Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMTIgMTI4IDk6IDEzOSAyNDggMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzZlYmUwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jCkBAIC0wLDAgKzEsMTI0IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIGJpZ2dlciBzdHJ1Y3Qgd2hpY2ggb3ZlcmxhcHMKKwkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSB7CisgIGRvdWJsZSBhOworICBkb3VibGUgYjsKKyAgZG91YmxlIGM7CisgIGRvdWJsZSBkOworICBkb3VibGUgZTsKKyAgZG91YmxlIGY7CisgIGRvdWJsZSBnOworICBkb3VibGUgaDsKK30gY2xzX3N0cnVjdF82NGJ5dGU7CisKK2Nsc19zdHJ1Y3RfNjRieXRlIGNsc19zdHJ1Y3RfNjRieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBiMCwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGIyLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBiMykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIwLmEgKyBiMS5hICsgYjIuYSArIGIzLmE7CisgIHJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKyAgcmVzdWx0LmMgPSBiMC5jICsgYjEuYyArIGIyLmMgKyBiMy5jOworICByZXN1bHQuZCA9IGIwLmQgKyBiMS5kICsgYjIuZCArIGIzLmQ7CisgIHJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKyAgcmVzdWx0LmYgPSBiMC5mICsgYjEuZiArIGIyLmYgKyBiMy5mOworICByZXN1bHQuZyA9IGIwLmcgKyBiMS5nICsgYjIuZyArIGIzLmc7CisgIHJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKworICBwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCSByZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzY0Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGIwLCBiMSwgYjIsIGIzOworCisgIGIwID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlKikoYXJnc1syXSk7CisgIGIzID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUqKShhcmdzWzNdKTsKKworICAqKGNsc19zdHJ1Y3RfNjRieXRlKilyZXNwID0gY2xzX3N0cnVjdF82NGJ5dGVfZm4oYjAsIGIxLCBiMiwgYjMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbOV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDQuMCwgOC4wLCAxLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIGZfZGJsID0geyAxLjAsIDIuMCwgMy4wLCA3LjAsIDIuMCwgNS4wLCA2LjAsIDcuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82NGJ5dGUgZ19kYmwgPSB7IDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCAxLjAsIDIuMCwgOS4wIH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzY0Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMuMCwgMy4wLCAxLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNjRieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1s3XSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzhdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gJmhfZGJsOworICBhcmdzX2RibFs0XSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNjRieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjIyIDE1IDE3IDI1IDYgMTMgMTkgMTgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF82NGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF82NGJ5dGUoKikoY2xzX3N0cnVjdF82NGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF82NGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF82NGJ5dGUsCisJCQkJICAgY2xzX3N0cnVjdF82NGJ5dGUpKQorCSAgICAgKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMmVmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYwpAQCAtMCwwICsxLDExMyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDcwOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdW5zaWduZWQgY2hhciBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHVuc2lnbmVkIGNoYXIgZDsKKyAgdW5zaWduZWQgY2hhciBlOworICB1bnNpZ25lZCBjaGFyIGY7Cit9IGNsc19zdHJ1Y3RfNmJ5dGU7CisKK2Nsc19zdHJ1Y3RfNmJ5dGUgY2xzX3N0cnVjdF82Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisgIHJlc3VsdC5kID0gYTEuZCArIGEyLmQ7CisgIHJlc3VsdC5lID0gYTEuZSArIGEyLmU7CisgIHJlc3VsdC5mID0gYTEuZiArIGEyLmY7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJIGExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsCisJIGEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsCisJIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsIHJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF82Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzZieXRlKilyZXNwID0gY2xzX3N0cnVjdF82Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbN107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMywgNCwgNSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSBmX2RibCA9IHsgMTIsIDEyOCwgOSwgMywgNCwgNSB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSByZXNfZGJsID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNl0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzZieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAzIDQgNSAxMiAxMjggOSAzIDQgNTogMTM5IDI0OCAxMCA2IDggMTAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCSByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCAxMCIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisgIHJlc19kYmwuZCA9IDA7CisgIHJlc19kYmwuZSA9IDA7CisgIHJlc19kYmwuZiA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzZieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfNmJ5dGUoKikoY2xzX3N0cnVjdF82Ynl0ZSwgY2xzX3N0cnVjdF82Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMyA0IDUgMTIgMTI4IDkgMyA0IDU6IDEzOSAyNDggMTAgNiA4IDEwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDggMTAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzI1N2IwOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYwpAQCAtMCwwICsxLDk5IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgeworICB1bnNpZ25lZCBzaG9ydCBhOworICB1bnNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7CisgIHVuc2lnbmVkIGNoYXIgZDsKK30gY2xzX3N0cnVjdF82Ynl0ZTsKKworY2xzX3N0cnVjdF82Ynl0ZSBjbHNfc3RydWN0XzZieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF82Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF82Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzZieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzZieXRlKilyZXNwID0gY2xzX3N0cnVjdF82Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMTI4IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzZieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfNmJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s0XSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNmJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTI3IDEyMCAxIDEyOCAxMiAxMjggOSAxMjc6IDEzOSAyNDggMTAgMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDI1NSIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF82Ynl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0XzZieXRlKCopKGNsc19zdHJ1Y3RfNmJ5dGUsIGNsc19zdHJ1Y3RfNmJ5dGUpKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTI3IDEyMCAxIDEyOCAxMiAxMjggOSAxMjc6IDEzOSAyNDggMTAgMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywgcmVzX2RibC5kKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDI1NSIgfSAqLworCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBkMDljOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIENoZWNrIG92ZXJsYXBwaW5nLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwNzA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBjaGFyIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgY2hhciBkOworICB1bnNpZ25lZCBjaGFyIGU7CisgIHVuc2lnbmVkIGNoYXIgZjsKKyAgdW5zaWduZWQgY2hhciBnOworfSBjbHNfc3RydWN0XzdieXRlOworCitjbHNfc3RydWN0XzdieXRlIGNsc19zdHJ1Y3RfN2J5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworICByZXN1bHQuZCA9IGExLmQgKyBhMi5kOworICByZXN1bHQuZSA9IGExLmUgKyBhMi5lOworICByZXN1bHQuZiA9IGExLmYgKyBhMi5mOworICByZXN1bHQuZyA9IGExLmcgKyBhMi5nOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkICVkICVkICVkICVkXG4iLAorCSBhMS5hLCBhMS5iLCBhMS5jLCBhMS5kLCBhMS5lLCBhMS5mLCBhMS5nLAorCSBhMi5hLCBhMi5iLCBhMi5jLCBhMi5kLCBhMi5lLCBhMi5mLCBhMi5nLAorCSByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLCByZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzdieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUqKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfN2J5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzdieXRlX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s4XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgZ19kYmwgPSB7IDEyNywgMTIwLCAxLCAzLCA0LCA1LCA2IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAzLCA0LCA1LCA2IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIHJlc19kYmwgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzVdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbN10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzdieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAzIDQgNSA2IDEyIDEyOCA5IDMgNCA1IDY6IDEzOSAyNDggMTAgNiA4IDEwIDEyIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZCAlZCAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMzkgMjQ4IDEwIDYgOCAxMCAxMiIgfSAqLworCisgIHJlc19kYmwuYSA9IDA7CisgIHJlc19kYmwuYiA9IDA7CisgIHJlc19kYmwuYyA9IDA7CisgIHJlc19kYmwuZCA9IDA7CisgIHJlc19kYmwuZSA9IDA7CisgIHJlc19kYmwuZiA9IDA7CisgIHJlc19kYmwuZyA9IDA7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzdieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfN2J5dGUoKikoY2xzX3N0cnVjdF83Ynl0ZSwgY2xzX3N0cnVjdF83Ynl0ZSkpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMjcgMTIwIDEgMyA0IDUgNiAxMiAxMjggOSAzIDQgNSA2OiAxMzkgMjQ4IDEwIDYgOCAxMCAxMiIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJIHJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA2IDggMTAgMTIiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWMwMDAwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMKQEAgLTAsMCArMSw5NyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSB7CisgIHVuc2lnbmVkIHNob3J0IGE7CisgIHVuc2lnbmVkIHNob3J0IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKKyAgdW5zaWduZWQgc2hvcnQgZDsKK30gY2xzX3N0cnVjdF83Ynl0ZTsKKworY2xzX3N0cnVjdF83Ynl0ZSBjbHNfc3RydWN0XzdieXRlX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF83Ynl0ZSByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKyAgcmVzdWx0LmQgPSBhMS5kICsgYTIuZDsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTEuZCwKKwkgYTIuYSwgYTIuYiwgYTIuYywgYTIuZCwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywgcmVzdWx0LmQpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF83Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzdieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzdieXRlKilyZXNwID0gY2xzX3N0cnVjdF83Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGdfZGJsID0geyAxMjcsIDEyMCwgMSwgMjU0IH07CisgIHN0cnVjdCBjbHNfc3RydWN0XzdieXRlIGZfZGJsID0geyAxMiwgMTI4LCA5LCAyNTUgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfN2J5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzdieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNyAxMjAgMSAyNTQgMTIgMTI4IDkgMjU1OiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA1MDkiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfN2J5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF83Ynl0ZSgqKShjbHNfc3RydWN0XzdieXRlLCBjbHNfc3RydWN0XzdieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyNyAxMjAgMSAyNTQgMTIgMTI4IDkgMjU1OiAxMzkgMjQ4IDEwIDUwOSIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsIHJlc19kYmwuZCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTM5IDI0OCAxMCA1MDkiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWE5OWQxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMKQEAgLTAsMCArMSw4OCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBvdmVybGFwcGluZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSB7CisgIGludCBhOworICBmbG9hdCBiOworfSBjbHNfc3RydWN0XzhieXRlOworCitjbHNfc3RydWN0XzhieXRlIGNsc19zdHJ1Y3RfOGJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworCisgIHByaW50ZigiJWQgJWcgJWQgJWc6ICVkICVnXG4iLCBhMS5hLCBhMS5iLCBhMi5hLCBhMi5iLCByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF84Ynl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUqKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzhieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzhieXRlKilyZXNwID0gY2xzX3N0cnVjdF84Ynl0ZV9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzhieXRlIGdfZGJsID0geyAxLCAyLjAgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOGJ5dGUgZl9kYmwgPSB7IDQsIDUuMCB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF84Ynl0ZSByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfOGJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDQgNTogNSA3IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDUgNyIgfSAqLworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOGJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF84Ynl0ZSgqKShjbHNfc3RydWN0XzhieXRlLCBjbHNfc3RydWN0XzhieXRlKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiA0IDU6IDUgNyIgfSAqLworICBwcmludGYoInJlczogJWQgJWdcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA1IDciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWU5ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMKQEAgLTAsMCArMSw5MCBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBEYXJ3aW4vQUlYIGRvIGRvdWJsZS13b3JkCisJCWFsaWdubWVudCBvZiB0aGUgc3RydWN0IGlmIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZG91YmxlLgorCQlDaGVjayB0aGF0IGl0IGRvZXMgbm90IGhlcmUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTQJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgeworICBpbnQgYTsKKyAgZG91YmxlIGI7Cit9IGNsc19zdHJ1Y3RfOWJ5dGU7CisKK2Nsc19zdHJ1Y3RfOWJ5dGUgY2xzX3N0cnVjdF85Ynl0ZV9mbihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzdWx0OworCisgIHJlc3VsdC5hID0gYjEuYSArIGIyLmE7CisgIHJlc3VsdC5iID0gYjEuYiArIGIyLmI7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZzogJWQgJWdcbiIsIGIxLmEsIGIxLmIsICBiMi5hLCBiMi5iLAorCSByZXN1bHQuYSwgcmVzdWx0LmIpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIGNsc19zdHJ1Y3RfOWJ5dGVfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsCisJCQkJdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGIxLCBiMjsKKworICBiMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUqKShhcmdzWzBdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0XzlieXRlKilyZXNwID0gY2xzX3N0cnVjdF85Ynl0ZV9mbihiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIGhfZGJsID0geyA3LCA4LjB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBqX2RibCA9IHsgMSwgOS4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmal9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF85Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICI3IDggMSA5OiA4IDE3IiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDggMTciIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF85Ynl0ZSgqKShjbHNfc3RydWN0XzlieXRlLCBjbHNfc3RydWN0XzlieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgOCAxIDk6IDggMTciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMwYmEwZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJRGVwZW5kaW5nIG9uIHRoZSBBQkkuIERhcndpbi9BSVggZG8gZG91YmxlLXdvcmQKKwkJYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3QgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBkb3VibGUuCisJCUNoZWNrIHRoYXQgaXQgZG9lcyBoZXJlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwOTE0CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHsKKyAgZG91YmxlIGE7CisgIGludCBiOworfSBjbHNfc3RydWN0XzlieXRlOworCitjbHNfc3RydWN0XzlieXRlIGNsc19zdHJ1Y3RfOWJ5dGVfZm4oc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgYjEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgYjIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGIxLmEgKyBiMi5hOworICByZXN1bHQuYiA9IGIxLmIgKyBiMi5iOworCisgIHByaW50ZigiJWcgJWQgJWcgJWQ6ICVnICVkXG4iLCBiMS5hLCBiMS5iLCAgYjIuYSwgYjIuYiwKKwkgcmVzdWx0LmEsIHJlc3VsdC5iKTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBjbHNfc3RydWN0XzlieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCXZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBiMSwgYjI7CisKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzlieXRlKikoYXJnc1swXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF85Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfOWJ5dGVfZm4oYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF85Ynl0ZSBoX2RibCA9IHsgNy4wLCA4fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfOWJ5dGUgal9kYmwgPSB7IDEuMCwgOX07CisgIHN0cnVjdCBjbHNfc3RydWN0XzlieXRlIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmaF9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmpfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfOWJ5dGVfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiNyA4IDEgOTogOCAxNyIgfSAqLworICBwcmludGYoInJlczogJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA4IDE3IiB9ICovCisKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfOWJ5dGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF85Ynl0ZSgqKShjbHNfc3RydWN0XzlieXRlLCBjbHNfc3RydWN0XzlieXRlKSkoY29kZSkpKGhfZGJsLCBqX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjcgOCAxIDk6IDggMTciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYik7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOCAxNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiOTRkNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwpAQCAtMCwwICsxLDkzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisKKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgZG91YmxlIGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVnICVkICVkICVnICVkOiAlZCAlZyAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2FsaWduKCopKGNsc19zdHJ1Y3RfYWxpZ24sIGNsc19zdHJ1Y3RfYWxpZ24pKShjb2RlKSkoZ19kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjYzN2YyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMKQEAgLTAsMCArMSw5MSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIGFsaWdubWVudCBvZiBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBmbG9hdCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZCAlZyAlZDogJWQgJWcgJWRcbiIsIGExLmEsIChkb3VibGUpYTEuYiwgYTEuYywgYTIuYSwgKGRvdWJsZSlhMi5iLCBhMi5jLCByZXN1bHQuYSwgKGRvdWJsZSlyZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZjbHNfc3RydWN0X3R5cGUsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF9hbGlnbl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgKGRvdWJsZSlyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWcgJWRcbiIsIHJlc19kYmwuYSwgKGRvdWJsZSlyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMzgwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBsb25nIGRvdWJsZSBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZyAlZCAlZCAlZyAlZDogJWQgJWcgJWRcbiIsIGExLmEsIChkb3VibGUpYTEuYiwgYTEuYywgYTIuYSwgKGRvdWJsZSlhMi5iLCBhMi5jLCByZXN1bHQuYSwgKGRvdWJsZSlyZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZyAlZFxuIiwgcmVzX2RibC5hLCAoZG91YmxlKXJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI3NGFmMQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKQEAgLTAsMCArMSwxMzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1leGNlc3MtZXJyb3JzICJubyBsb25nIGRvdWJsZSBmb3JtYXQiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworLyogeyBkZy1vcHRpb25zIC1tbG9uZy1kb3VibGUtMTI4IHsgdGFyZ2V0IHBvd2VycGM2NCotKi0qIH0gfSAqLworLyogeyBkZy1vdXRwdXQgIiIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIGxvbmcgZG91YmxlIGE7CisgIGxvbmcgZG91YmxlIGI7CisgIGxvbmcgZG91YmxlIGM7CisgIGxvbmcgZG91YmxlIGQ7CisgIGxvbmcgZG91YmxlIGU7CisgIGxvbmcgZG91YmxlIGY7CisgIGxvbmcgZG91YmxlIGc7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbigKKwljbHNfc3RydWN0X2FsaWduCWExLAorCWNsc19zdHJ1Y3RfYWxpZ24JYTIpCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcjsKKworCXIuYSA9IGExLmEgKyBhMi5hOworCXIuYiA9IGExLmIgKyBhMi5iOworCXIuYyA9IGExLmMgKyBhMi5jOworCXIuZCA9IGExLmQgKyBhMi5kOworCXIuZSA9IGExLmUgKyBhMi5lOworCXIuZiA9IGExLmYgKyBhMi5mOworCXIuZyA9IGExLmcgKyBhMi5nOworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAiCisJCSIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCWEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsIGEyLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuMigKKwljbHNfc3RydWN0X2FsaWduCWExKQoreworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHI7CisKKwlyLmEgPSBhMS5hICsgMTsKKwlyLmIgPSBhMS5iICsgMTsKKwlyLmMgPSBhMS5jICsgMTsKKwlyLmQgPSBhMS5kICsgMTsKKwlyLmUgPSBhMS5lICsgMTsKKwlyLmYgPSBhMS5mICsgMTsKKwlyLmcgPSBhMS5nICsgMTsKKworCXByaW50ZigiJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAiCisJCSIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCAKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisJYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisJYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKwkqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbM107CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzhdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCB9OworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s2XSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gTlVMTDsKKworCWRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NfZGJsWzBdID0gJmdfZGJsOworCWFyZ3NfZGJsWzFdID0gJmZfZGJsOworCWFyZ3NfZGJsWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQ6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKwlwcmludGYoInJlczogJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQ6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKwlwcmludGYoInJlczogJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OGYwZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYwpAQCAtMCwwICsxLDExNyBAQAorLyoJQXJlYToJCQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisJUHVycG9zZToJCUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgbG9uZyBkb3VibGUuCisJTGltaXRhdGlvbnM6CW5vbmUuCisJUFI6CQkJCW5vbmUuCisJT3JpZ2luYXRvcjoJCUJsYWtlIENoYWZmaW4JNi8xOC8yMDA3CisqLworCisvKiB7IGRnLWV4Y2Vzcy1lcnJvcnMgIm5vIGxvbmcgZG91YmxlIGZvcm1hdCIgeyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgLW1sb25nLWRvdWJsZS0xMjggeyB0YXJnZXQgcG93ZXJwYzY0Ki0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgbG9uZyBkb3VibGUgYTsKKyAgbG9uZyBkb3VibGUgYjsKKyAgbG9uZyBkb3VibGUgYzsKKyAgbG9uZyBkb3VibGUgZDsKKyAgbG9uZyBkb3VibGUgZTsKKyAgZG91YmxlIGY7CisgIGxvbmcgZG91YmxlIGc7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbigKKwljbHNfc3RydWN0X2FsaWduCWExLAorCWNsc19zdHJ1Y3RfYWxpZ24JYTIpCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcjsKKworCXIuYSA9IGExLmEgKyBhMi5hOworCXIuYiA9IGExLmIgKyBhMi5iOworCXIuYyA9IGExLmMgKyBhMi5jOworCXIuZCA9IGExLmQgKyBhMi5kOworCXIuZSA9IGExLmUgKyBhMi5lOworCXIuZiA9IGExLmYgKyBhMi5mOworCXIuZyA9IGExLmcgKyBhMi5nOworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZzogIgorCQkiJUxnICVMZyAlTGcgJUxnICVMZyAlZyAlTGdcbiIsCisJCWExLmEsIGExLmIsIGExLmMsIGExLmQsIGExLmUsIGExLmYsIGExLmcsCisJCWEyLmEsIGEyLmIsIGEyLmMsIGEyLmQsIGEyLmUsIGEyLmYsIGEyLmcsCisJCXIuYSwgci5iLCByLmMsIHIuZCwgci5lLCByLmYsIHIuZyk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLCAKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisJYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisJYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKwkqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbM107CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzhdOworCWZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKwlmZmlfdHlwZSogZGJsX2FyZ190eXBlc1szXTsKKworCWNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKwljbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKwljbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwljbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3IH07CisJc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCB9OworCXN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKwljbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbN10gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZ19kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworCS8qIHsgZGctb3V0cHV0ICIxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNDogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCXByaW50ZigicmVzOiAlTGcgJUxnICVMZyAlTGcgJUxnICVnICVMZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDkgMTEgMTMgMTUgMTcgMTkgMjEiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9hbGlnbl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0OiA5IDExIDEzIDE1IDE3IDE5IDIxIiB9ICovCisJcHJpbnRmKCJyZXM6ICVMZyAlTGcgJUxnICVMZyAlTGcgJWcgJUxnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogOSAxMSAxMyAxNSAxNyAxOSAyMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CisKKworCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM0Zjk1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwpAQCAtMCwwICsxLDk1IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHBvaW50ZXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxob3NAdGFtYW5lZ2kub3JnPiAyMDAzMTIwMwkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiB7CisgIHVuc2lnbmVkIGNoYXIgYTsKKyAgdm9pZCAqYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9ICh2b2lkICopKCh1aW50cHRyX3QpYTEuYiArICh1aW50cHRyX3QpYTIuYik7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlIiBQUkl1UFRSICIgJWQgJWQgJSIgUFJJdVBUUiAiICVkOiAlZCAlIiBQUkl1UFRSICIgJWRcbiIsIAorICAgICAgICAgYTEuYSwgKHVpbnRwdHJfdClhMS5iLCBhMS5jLAorCSBhMi5hLCAodWludHB0cl90KWEyLmIsIGEyLmMsCisgICAgICAgICByZXN1bHQuYSwgKHVpbnRwdHJfdClyZXN1bHQuYiwKKwkgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCAodm9pZCAqKTQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgKHZvaWQgKik5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUkl1UFRSICIgJWRcbiIsIHJlc19kYmwuYSwgKHVpbnRwdHJfdClyZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJSIgUFJJdVBUUiAiICVkXG4iLCByZXNfZGJsLmEsICh1aW50cHRyX3QpcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzZWE0MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHNpbnQxNi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBzaWduZWQgc2hvcnQgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1ZDc4YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHNpbnQzMi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICBzaWduZWQgaW50IGI7CisgIHVuc2lnbmVkIGNoYXIgYzsKK30gY2xzX3N0cnVjdF9hbGlnbjsKKworY2xzX3N0cnVjdF9hbGlnbiBjbHNfc3RydWN0X2FsaWduX2ZuKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLAorCQkJICAgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGEyKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXN1bHQ7CisKKyAgcmVzdWx0LmEgPSBhMS5hICsgYTIuYTsKKyAgcmVzdWx0LmIgPSBhMS5iICsgYTIuYjsKKyAgcmVzdWx0LmMgPSBhMS5jICsgYTIuYzsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYTEuYSwgYTEuYiwgYTEuYywgYTIuYSwgYTIuYiwgYTIuYywgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYyk7CisKKyAgcmV0dXJuICByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2FsaWduX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsIGEyOworCisgIGExID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMF0pOworICBhMiA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzFdKTsKKworICAqKGNsc19zdHJ1Y3RfYWxpZ24qKXJlc3AgPSBjbHNfc3RydWN0X2FsaWduX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNV07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1s0XTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s1XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZ19kYmwgPSB7IDEyLCA0OTUxLCAxMjcgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gZl9kYmwgPSB7IDEsIDkzMjAsIDEzIH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWQ1M2FmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2Ygc2ludDY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHNpZ25lZCBsb25nIGxvbmcgYjsKKyAgdW5zaWduZWQgY2hhciBjOworfSBjbHNfc3RydWN0X2FsaWduOworCitjbHNfc3RydWN0X2FsaWduIGNsc19zdHJ1Y3RfYWxpZ25fZm4oc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTEsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gYTIpCit7CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHJlc3VsdDsKKworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisgIHByaW50ZigiJWQgJSIgUFJJZExMICIgJWQgJWQgJSIgUFJJZExMICIgJWQ6ICVkICUiIFBSSWRMTCAiICVkXG4iLCBhMS5hLCBhMS5iLCBhMS5jLCBhMi5hLCBhMi5iLCBhMi5jLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jKTsKKworICByZXR1cm4gIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfYWxpZ25fZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiopKGFyZ3NbMV0pOworCisgICooY2xzX3N0cnVjdF9hbGlnbiopcmVzcCA9IGNsc19zdHJ1Y3RfYWxpZ25fZm4oYTEsIGEyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzRdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBnX2RibCA9IHsgMTIsIDQ5NTEsIDEyNyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBmX2RibCA9IHsgMSwgOTMyMCwgMTMgfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfc2ludDY0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJSIgUFJJZExMICIgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I2Yjc0OAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwpAQCAtMCwwICsxLDkxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHVpbnQxNi4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIHsKKyAgdW5zaWduZWQgY2hhciBhOworICB1bnNpZ25lZCBzaG9ydCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICVkICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDUzZDNlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBhbGlnbm1lbnQgb2YgdWludDMyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzEyMDMJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGludCBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91aW50OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmdfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2FsaWduX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlZCAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2FsaWduX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfYWxpZ24oKikoY2xzX3N0cnVjdF9hbGlnbiwgY2xzX3N0cnVjdF9hbGlnbikpKGNvZGUpKShnX2RibCwgZl9kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xMiA0OTUxIDEyNyAxIDkzMjAgMTM6IDEzIDE0MjcxIDE0MCIgfSAqLworICBwcmludGYoInJlczogJWQgJWQgJWRcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEzIDE0MjcxIDE0MCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1Yzc5ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYwpAQCAtMCwwICsxLDkzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgYWxpZ25tZW50IG9mIHVpbnQ2NC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGhvc0B0YW1hbmVnaS5vcmc+IDIwMDMxMjAzCSAqLworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24geworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBiOworICB1bnNpZ25lZCBjaGFyIGM7Cit9IGNsc19zdHJ1Y3RfYWxpZ247CisKK2Nsc19zdHJ1Y3RfYWxpZ24gY2xzX3N0cnVjdF9hbGlnbl9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiBhMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24gcmVzdWx0OworCisgIHJlc3VsdC5hID0gYTEuYSArIGEyLmE7CisgIHJlc3VsdC5iID0gYTEuYiArIGEyLmI7CisgIHJlc3VsdC5jID0gYTEuYyArIGEyLmM7CisKKyAgcHJpbnRmKCIlZCAlIiBQUklkTEwgIiAlZCAlZCAlIiBQUklkTEwgIiAlZDogJWQgJSIgUFJJZExMICIgJWRcbiIsIGExLmEsIGExLmIsIGExLmMsIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiAgcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF9hbGlnbl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCSAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGExLCBhMjsKKworICBhMSA9ICooc3RydWN0IGNsc19zdHJ1Y3RfYWxpZ24qKShhcmdzWzBdKTsKKyAgYTIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2FsaWduKikoYXJnc1sxXSk7CisKKyAgKihjbHNfc3RydWN0X2FsaWduKilyZXNwID0gY2xzX3N0cnVjdF9hbGlnbl9mbihhMSwgYTIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGdfZGJsID0geyAxMiwgNDk1MSwgMTI3IH07CisgIHN0cnVjdCBjbHNfc3RydWN0X2FsaWduIGZfZGJsID0geyAxLCA5MzIwLCAxMyB9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9hbGlnbiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfYWxpZ25fZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMTIgNDk1MSAxMjcgMSA5MzIwIDEzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkICUiIFBSSWRMTCAiICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMyAxNDI3MSAxNDAiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfYWxpZ25fZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoY2xzX3N0cnVjdF9hbGlnbigqKShjbHNfc3RydWN0X2FsaWduLCBjbHNfc3RydWN0X2FsaWduKSkoY29kZSkpKGdfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEyIDQ5NTEgMTI3IDEgOTMyMCAxMzogMTMgMTQyNzEgMTQwIiB9ICovCisgIHByaW50ZigicmVzOiAlZCAlIiBQUklkTEwgIiAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTMgMTQyNzEgMTQwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYwZGFiYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgZG91YmxlIGFyZ3VtZW50cyBpbiBzdHJ1Y3RzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzIzLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBEYmxzIHsKKwlkb3VibGUgeDsKKwlkb3VibGUgeTsKK30gRGJsczsKKwordm9pZAorY2xvc3VyZV90ZXN0X2ZuKERibHMgcCkKK3sKKwlwcmludGYoIiUuMWYgJS4xZlxuIiwgcC54LCBwLnkpOworfQorCit2b2lkCitjbG9zdXJlX3Rlc3RfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKKwkJdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJY2xvc3VyZV90ZXN0X2ZuKCooRGJscyopYXJnc1swXSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjIF9fVU5VU0VEX18sIGNoYXIqKiBhcmd2IF9fVU5VU0VEX18pCit7CisJZmZpX2NpZiBjaWY7CisKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSoJcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCWZmaV90eXBlKgkJY2xfYXJnX3R5cGVzWzFdOworCisJZmZpX3R5cGUJdHMxX3R5cGU7CisJZmZpX3R5cGUqCXRzMV90eXBlX2VsZW1lbnRzWzRdOworCisJdHMxX3R5cGUuc2l6ZSA9IDA7CisJdHMxX3R5cGUuYWxpZ25tZW50ID0gMDsKKwl0czFfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXRzMV90eXBlLmVsZW1lbnRzID0gdHMxX3R5cGVfZWxlbWVudHM7CisKKwl0czFfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJdHMxX3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCXRzMV90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworCWNsX2FyZ190eXBlc1swXSA9ICZ0czFfdHlwZTsKKworCURibHMgYXJnID0geyAxLjAsIDIuMCB9OworCisJLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJCQkgJmZmaV90eXBlX3ZvaWQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0X2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJKCh2b2lkKigqKShEYmxzKSkoY29kZSkpKGFyZyk7CisJLyogeyBkZy1vdXRwdXQgIjEuMCAyLjBcbiIgfSAqLworCisJY2xvc3VyZV90ZXN0X2ZuKGFyZyk7CisJLyogeyBkZy1vdXRwdXQgIjEuMCAyLjBcbiIgfSAqLworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhZDRjYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfZG91YmxlX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgKihkb3VibGUgKilyZXNwID0gKihkb3VibGUgKilhcmdzWzBdOworCisgICBwcmludGYoIiVmOiAlZlxuIiwqKGRvdWJsZSAqKWFyZ3NbMF0sCisJICAqKGRvdWJsZSAqKXJlc3ApOworIH0KK3R5cGVkZWYgZG91YmxlICgqY2xzX3JldF9kb3VibGUpKGRvdWJsZSk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIGRvdWJsZSByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X2RvdWJsZV9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzID0gKCooKGNsc19yZXRfZG91YmxlKWNvZGUpKSgyMTQ3NC43ODkpOworICAvKiB7IGRnLW91dHB1dCAiMjE0NzQuNzg5MDAwOiAyMTQ3NC43ODkwMDAiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICUuNmZcbiIsIHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjE0NzQuNzg5MDAwIiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk1ODc0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJVGVzdCBkb3VibGVzIHBhc3NlZCBpbiB2YXJpYWJsZSBhcmd1bWVudCBsaXN0cy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIGF2cjMyKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xzX2RvdWJsZV92YV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgCisJCSB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwljaGFyKglmb3JtYXQJCT0gKihjaGFyKiopYXJnc1swXTsKKwlkb3VibGUJZG91YmxlVmFsdWUJPSAqKGRvdWJsZSopYXJnc1sxXTsKKworCSooZmZpX2FyZyopcmVzcCA9IHByaW50Zihmb3JtYXQsIGRvdWJsZVZhbHVlKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzWzNdOworCWZmaV90eXBlKiBhcmdfdHlwZXNbM107CisKKwljaGFyKglmb3JtYXQJCT0gIiUuMWZcbiI7CisJZG91YmxlCWRvdWJsZUFyZwk9IDc7CisJZmZpX2FyZwlyZXMJCQk9IDA7CisKKwlhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKwlhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfc2ludCwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZmb3JtYXQ7CisJYXJnc1sxXSA9ICZkb3VibGVBcmc7CisJYXJnc1syXSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJpbnRmKSwgJnJlcywgYXJncyk7CisJLy8geyBkZy1vdXRwdXQgIjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2RvdWJsZV92YV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcwk9ICgoaW50KCopKGNoYXIqLCBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBkb3VibGVBcmcpOworCS8vIHsgZGctb3V0cHV0ICJcbjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwOTBmZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF9mbG9hdF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgKihmbG9hdCAqKXJlc3AgPSAqKGZsb2F0ICopYXJnc1swXTsKKworICAgcHJpbnRmKCIlZzogJWdcbiIsKihmbG9hdCAqKWFyZ3NbMF0sCisJICAqKGZsb2F0ICopcmVzcCk7CisgfQorCit0eXBlZGVmIGZsb2F0ICgqY2xzX3JldF9mbG9hdCkoZmxvYXQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICBmbG9hdCByZXM7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF9mbG9hdF9mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisgIHJlcyA9ICgoKChjbHNfcmV0X2Zsb2F0KWNvZGUpKC0yMTIyLjEyKSkpOworICAvKiB7IGRnLW91dHB1dCAiXFwtMjEyMi4xMjogXFwtMjEyMi4xMiIgfSAqLworICBwcmludGYoInJlczogJS42ZlxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiBcLTIxMjIuMTIwMTE3IiB9ICovCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmFmNmNmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBsb25nIGRvdWJsZSBhcmd1bWVudHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluCSovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAibm8gbG9uZyBkb3VibGUgZm9ybWF0IiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBhcm0qLSotKiBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAtbWxvbmctZG91YmxlLTEyOCB7IHRhcmdldCBwb3dlcnBjNjQqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK2xvbmcgZG91YmxlIGNsc19sZG91YmxlX2ZuKAorCWxvbmcgZG91YmxlCWExLAorCWxvbmcgZG91YmxlCWEyLAorCWxvbmcgZG91YmxlCWEzLAorCWxvbmcgZG91YmxlCWE0LAorCWxvbmcgZG91YmxlCWE1LAorCWxvbmcgZG91YmxlCWE2LAorCWxvbmcgZG91YmxlCWE3LAorCWxvbmcgZG91YmxlCWE4KQoreworCWxvbmcgZG91YmxlCXIgPSBhMSArIGEyICsgYTMgKyBhNCArIGE1ICsgYTYgKyBhNyArIGE4OworCisJcHJpbnRmKCIlTGcgJUxnICVMZyAlTGcgJUxnICVMZyAlTGcgJUxnOiAlTGdcbiIsCisJCWExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgcik7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQKK2Nsc19sZG91YmxlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJbG9uZyBkb3VibGUJYTEJPSAqKGxvbmcgZG91YmxlKilhcmdzWzBdOworCWxvbmcgZG91YmxlCWEyCT0gKihsb25nIGRvdWJsZSopYXJnc1sxXTsKKwlsb25nIGRvdWJsZQlhMwk9ICoobG9uZyBkb3VibGUqKWFyZ3NbMl07CisJbG9uZyBkb3VibGUJYTQJPSAqKGxvbmcgZG91YmxlKilhcmdzWzNdOworCWxvbmcgZG91YmxlCWE1CT0gKihsb25nIGRvdWJsZSopYXJnc1s0XTsKKwlsb25nIGRvdWJsZQlhNgk9ICoobG9uZyBkb3VibGUqKWFyZ3NbNV07CisJbG9uZyBkb3VibGUJYTcJPSAqKGxvbmcgZG91YmxlKilhcmdzWzZdOworCWxvbmcgZG91YmxlCWE4CT0gKihsb25nIGRvdWJsZSopYXJnc1s3XTsKKworCSoobG9uZyBkb3VibGUqKXJlc3AgPSBjbHNfbGRvdWJsZV9mbigKKwkJYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KTsKK30KKworaW50IG1haW4odm9pZCkKK3sKKwlmZmlfY2lmCWNpZjsKKyAgICAgICAgdm9pZCogY29kZTsKKwlmZmlfY2xvc3VyZSoJcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCXZvaWQqCQkJYXJnc1s5XTsKKwlmZmlfdHlwZSoJCWFyZ190eXBlc1s5XTsKKwlsb25nIGRvdWJsZQkJcmVzCT0gMDsKKworCWxvbmcgZG91YmxlCWFyZzEJPSAxOworCWxvbmcgZG91YmxlCWFyZzIJPSAyOworCWxvbmcgZG91YmxlCWFyZzMJPSAzOworCWxvbmcgZG91YmxlCWFyZzQJPSA0OworCWxvbmcgZG91YmxlCWFyZzUJPSA1OworCWxvbmcgZG91YmxlCWFyZzYJPSA2OworCWxvbmcgZG91YmxlCWFyZzcJPSA3OworCWxvbmcgZG91YmxlCWFyZzgJPSA4OworCisJYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzRdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJYXJnX3R5cGVzWzhdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDgsICZmZmlfdHlwZV9sb25nZG91YmxlLAorCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzWzBdID0gJmFyZzE7CisJYXJnc1sxXSA9ICZhcmcyOworCWFyZ3NbMl0gPSAmYXJnMzsKKwlhcmdzWzNdID0gJmFyZzQ7CisJYXJnc1s0XSA9ICZhcmc1OworCWFyZ3NbNV0gPSAmYXJnNjsKKwlhcmdzWzZdID0gJmFyZzc7CisJYXJnc1s3XSA9ICZhcmc4OworCWFyZ3NbOF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19sZG91YmxlX2ZuKSwgJnJlcywgYXJncyk7CisJLyogeyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgODogMzYiIH0gKi8KKwlwcmludGYoInJlczogJUxnXG4iLCByZXMpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMzYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xkb3VibGVfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXMgPSAoKGxvbmcgZG91YmxlKCopKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLAorCQlsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkpKGNvZGUpKShhcmcxLCBhcmcyLAorCQlhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4KTsKKwkvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNiA3IDg6IDM2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVMZ1xuIiwgcmVzKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDM2IiB9ICovCisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTY0Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJVGVzdCBsb25nIGRvdWJsZXMgcGFzc2VkIGluIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3RzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzYvMjAwNwkgKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiB9IH0gKi8KKy8qIHsgZGctb3V0cHV0ICIiIHsgeGZhaWwgYXZyMzIqLSotKiB4ODZfNjQtKi1taW5ndyogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xzX2xvbmdkb3VibGVfdmFfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIAorCQkgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCWNoYXIqCQlmb3JtYXQJPSAqKGNoYXIqKilhcmdzWzBdOworCWxvbmcgZG91YmxlCWxkVmFsdWUJPSAqKGxvbmcgZG91YmxlKilhcmdzWzFdOworCisJKihmZmlfYXJnKilyZXNwID0gcHJpbnRmKGZvcm1hdCwgbGRWYWx1ZSk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc1szXTsKKwlmZmlfdHlwZSogYXJnX3R5cGVzWzNdOworCisJY2hhcioJCWZvcm1hdAk9ICIlLjFMZlxuIjsKKwlsb25nIGRvdWJsZQlsZEFyZwk9IDc7CisJZmZpX2FyZwkJcmVzCQk9IDA7CisKKwlhcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKKwlhcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdfdHlwZXNbMl0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmZmaV90eXBlX3NpbnQsCisJCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NbMF0gPSAmZm9ybWF0OworCWFyZ3NbMV0gPSAmbGRBcmc7CisJYXJnc1syXSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJpbnRmKSwgJnJlcywgYXJncyk7CisJLy8geyBkZy1vdXRwdXQgIjcuMCIgfQorCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xvbmdkb3VibGVfdmFfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKwlyZXMJPSAoKGludCgqKShjaGFyKiwgbG9uZyBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBsZEFyZyk7CisJLy8geyBkZy1vdXRwdXQgIlxuNy4wIiB9CisJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfQorCisJZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFkZjdiNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgc2lnbmVkIGNoYXIgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8aG9zQHRhbWFuZWdpLm9yZz4gMjAwMzExMjkgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3NpZ25lZCBjaGFyIHRlc3RfZnVuY19mbihzaWduZWQgY2hhciBhMSwgc2lnbmVkIGNoYXIgYTIpCit7CisgIHNpZ25lZCBjaGFyIHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHNpZ25lZCBjaGFyIGExLCBhMjsKKworICBhMSA9ICooc2lnbmVkIGNoYXIgKilhdmFsc1swXTsKKyAgYTIgPSAqKHNpZ25lZCBjaGFyICopYXZhbHNbMV07CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIpOworCit9CisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCp0ZXN0X3R5cGUpKHNpZ25lZCBjaGFyLCBzaWduZWQgY2hhcik7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1szXTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgc2lnbmVkIGNoYXIgYSwgYiwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDI7CisgIGIgPSAxMjU7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbMl0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9zY2hhciwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjIgMTI1OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAoc2lnbmVkIGNoYXIpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEyNyIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDIsIDEyNSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjIgMTI1OiAxMjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMTI3IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzM5MTUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgc2lnbmVkIHNob3J0IHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc2lnbmVkIHNob3J0IHRlc3RfZnVuY19mbihzaWduZWQgc2hvcnQgYTEsIHNpZ25lZCBzaG9ydCBhMikKK3sKKyAgc2lnbmVkIHNob3J0IHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyOworCisgIHByaW50ZigiJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHNpZ25lZCBzaG9ydCBhMSwgYTI7CisKKyAgYTEgPSAqKHNpZ25lZCBzaG9ydCAqKWF2YWxzWzBdOworICBhMiA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIpOworCit9CisKK3R5cGVkZWYgc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKShzaWduZWQgc2hvcnQsIHNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1szXTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgc2hvcnQgYSwgYiwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDI7CisgIGIgPSAzMjc2NTsKKworICBhcmdzX2RibFswXSA9ICZhOworICBhcmdzX2RibFsxXSA9ICZiOworICBhcmdzX2RibFsyXSA9IE5VTEw7CisKKyAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfc3Nob3J0LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMiAzMjc2NTogMzI3NjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCAodW5zaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY3IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMiwgMzI3NjUpOworICAvKiB7IGRnLW91dHB1dCAiXG4yIDMyNzY1OiAzMjc2NyIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIHJlc19jbG9zdXJlKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzMjc2NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNhZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYwpAQCAtMCwwICsxLDg2IEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBwYXNzaW5nIG9mIG11bHRpcGxlIHNpZ25lZCBzaG9ydC9jaGFyIHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc2lnbmVkIHNob3J0IHRlc3RfZnVuY19mbihzaWduZWQgY2hhciBhMSwgc2lnbmVkIHNob3J0IGEyLAorCQkJICBzaWduZWQgY2hhciBhMywgc2lnbmVkIHNob3J0IGE0KQoreworICBzaWduZWQgc2hvcnQgcmVzdWx0OworCisgIHJlc3VsdCA9IGExICsgYTIgKyBhMyArIGE0OworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLCBhMSwgYTIsIGEzLCBhNCwgcmVzdWx0KTsKKworICByZXR1cm4gcmVzdWx0OworCit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZnVuY19nbihmZmlfY2lmICpjaWYgX19VTlVTRURfXywgdm9pZCAqcnZhbCwgdm9pZCAqKmF2YWxzLAorCQkJIHZvaWQgKmRhdGEgX19VTlVTRURfXykKK3sKKyAgc2lnbmVkIGNoYXIgYTEsIGEzOworICBzaWduZWQgc2hvcnQgYTIsIGE0OworCisgIGExID0gKihzaWduZWQgY2hhciAqKWF2YWxzWzBdOworICBhMiA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbMV07CisgIGEzID0gKihzaWduZWQgY2hhciAqKWF2YWxzWzJdOworICBhNCA9ICooc2lnbmVkIHNob3J0ICopYXZhbHNbM107CisKKyAgKihmZmlfYXJnICopcnZhbCA9IHRlc3RfZnVuY19mbihhMSwgYTIsIGEzLCBhNCk7CisKK30KKwordHlwZWRlZiBzaWduZWQgc2hvcnQgKCp0ZXN0X3R5cGUpKHNpZ25lZCBjaGFyLCBzaWduZWQgc2hvcnQsCisJCQkJICBzaWduZWQgY2hhciwgc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkICogYXJnc19kYmxbNV07CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzVdOworICBmZmlfYXJnIHJlc19jYWxsOworICBzaWduZWQgY2hhciBhLCBjOworICBzaWduZWQgc2hvcnQgYiwgZCwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDE7CisgIGIgPSAzMjc2NTsKKyAgYyA9IDEyNzsKKyAgZCA9IC0xMjg7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSAmYzsKKyAgYXJnc19kYmxbM10gPSAmZDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3NjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfc3Nob3J0OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9zc2hvcnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDMyNzY1IDEyNyAtMTI4OiAzMjc2NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsIChzaWduZWQgc2hvcnQpcmVzX2NhbGwpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY1IiB9ICovCisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCB0ZXN0X2Z1bmNfZ24sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlc19jbG9zdXJlID0gKCooKHRlc3RfdHlwZSljb2RlKSkoMSwgMzI3NjUsIDEyNywgLTEyOCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMzI3NjUgMTI3IC0xMjg6IDMyNzY1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzX2Nsb3N1cmUpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDMyNzY1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA5YzAyYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgdW5zaWduZWQgY2hhciB2YWx1ZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJUFIxMzIyMS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMjkgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3Vuc2lnbmVkIGNoYXIgdGVzdF9mdW5jX2ZuKHVuc2lnbmVkIGNoYXIgYTEsIHVuc2lnbmVkIGNoYXIgYTIsCisJCQkgICB1bnNpZ25lZCBjaGFyIGEzLCB1bnNpZ25lZCBjaGFyIGE0KQoreworICB1bnNpZ25lZCBjaGFyIHJlc3VsdDsKKworICByZXN1bHQgPSBhMSArIGEyICsgYTMgKyBhNDsKKworICBwcmludGYoIiVkICVkICVkICVkOiAlZFxuIiwgYTEsIGEyLCBhMywgYTQsIHJlc3VsdCk7CisKKyAgcmV0dXJuIHJlc3VsdDsKKworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2Z1bmNfZ24oZmZpX2NpZiAqY2lmIF9fVU5VU0VEX18sIHZvaWQgKnJ2YWwsIHZvaWQgKiphdmFscywKKwkJCSB2b2lkICpkYXRhIF9fVU5VU0VEX18pCit7CisgIHVuc2lnbmVkIGNoYXIgYTEsIGEyLCBhMywgYTQ7CisKKyAgYTEgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1swXTsKKyAgYTIgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1sxXTsKKyAgYTMgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1syXTsKKyAgYTQgPSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1szXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMiwgYTMsIGE0KTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgKCp0ZXN0X3R5cGUpKHVuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIGNoYXIsCisJCQkJICAgdW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhcik7CisKK3ZvaWQgdGVzdF9mdW5jKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsIF9fVU5VU0VEX18sIHZvaWQgKiphdmFscywKKwkgICAgICAgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICBwcmludGYoIiVkICVkICVkICVkXG4iLCAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1swXSwKKwkgKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMV0sICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzJdLAorCSAqKHVuc2lnbmVkIGNoYXIgKilhdmFsc1szXSk7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQgKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbNV07CisgIGZmaV9hcmcgcmVzX2NhbGw7CisgIHVuc2lnbmVkIGNoYXIgYSwgYiwgYywgZCwgcmVzX2Nsb3N1cmU7CisKKyAgYSA9IDE7CisgIGIgPSAyOworICBjID0gMTI3OworICBkID0gMTI1OworCisgIGFyZ3NfZGJsWzBdID0gJmE7CisgIGFyZ3NfZGJsWzFdID0gJmI7CisgIGFyZ3NfZGJsWzJdID0gJmM7CisgIGFyZ3NfZGJsWzNdID0gJmQ7CisgIGFyZ3NfZGJsWzRdID0gTlVMTDsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3VjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHRlc3RfZnVuY19mbiksICZyZXNfY2FsbCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSAyIDEyNyAxMjU6IDI1NSIgfSAqLworICBwcmludGYoInJlczogJWRcbiIsICh1bnNpZ25lZCBjaGFyKXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTUiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgxLCAyLCAxMjcsIDEyNSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAxMjcgMTI1OiAyNTUiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDEwY2E3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHBhc3Npbmcgb2YgbXVsdGlwbGUgdW5zaWduZWQgc2hvcnQgdmFsdWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMTMyMjEuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTI5ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit1bnNpZ25lZCBzaG9ydCB0ZXN0X2Z1bmNfZm4odW5zaWduZWQgc2hvcnQgYTEsIHVuc2lnbmVkIHNob3J0IGEyKQoreworICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CisKKyAgcmVzdWx0ID0gYTEgKyBhMjsKKworICBwcmludGYoIiVkICVkOiAlZFxuIiwgYTEsIGEyLCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9mdW5jX2duKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsLCB2b2lkICoqYXZhbHMsCisJCQkgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICB1bnNpZ25lZCBzaG9ydCBhMSwgYTI7CisKKyAgYTEgPSAqKHVuc2lnbmVkIHNob3J0ICopYXZhbHNbMF07CisgIGEyID0gKih1bnNpZ25lZCBzaG9ydCAqKWF2YWxzWzFdOworCisgICooZmZpX2FyZyAqKXJ2YWwgPSB0ZXN0X2Z1bmNfZm4oYTEsIGEyKTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKSh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQgKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbM107CisgIGZmaV9hcmcgcmVzX2NhbGw7CisgIHVuc2lnbmVkIHNob3J0IGEsIGIsIHJlc19jbG9zdXJlOworCisgIGEgPSAyOworICBiID0gMzI3NjU7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsCisJCSAgICAgJmZmaV90eXBlX3VzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTih0ZXN0X2Z1bmNfZm4pLCAmcmVzX2NhbGwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjIgMzI3NjU6IDMyNzY3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHVuc2lnbmVkIHNob3J0KXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAzMjc2NyIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgdGVzdF9mdW5jX2duLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXNfY2xvc3VyZSA9ICgqKCh0ZXN0X3R5cGUpY29kZSkpKDIsIDMyNzY1KTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMiAzMjc2NTogMzI3NjciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMzI3NjciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4OGU5NwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMKQEAgLTAsMCArMSw4NiBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcGFzc2luZyBvZiBtdWx0aXBsZSB1bnNpZ25lZCBzaG9ydC9jaGFyIHZhbHVlcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUjEzMjIxLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEyOSAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordW5zaWduZWQgc2hvcnQgdGVzdF9mdW5jX2ZuKHVuc2lnbmVkIGNoYXIgYTEsIHVuc2lnbmVkIHNob3J0IGEyLAorCQkJICAgIHVuc2lnbmVkIGNoYXIgYTMsIHVuc2lnbmVkIHNob3J0IGE0KQoreworICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CisKKyAgcmVzdWx0ID0gYTEgKyBhMiArIGEzICsgYTQ7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZDogJWRcbiIsIGExLCBhMiwgYTMsIGE0LCByZXN1bHQpOworCisgIHJldHVybiByZXN1bHQ7CisKK30KKworc3RhdGljIHZvaWQgdGVzdF9mdW5jX2duKGZmaV9jaWYgKmNpZiBfX1VOVVNFRF9fLCB2b2lkICpydmFsLCB2b2lkICoqYXZhbHMsCisJCQkgdm9pZCAqZGF0YSBfX1VOVVNFRF9fKQoreworICB1bnNpZ25lZCBjaGFyIGExLCBhMzsKKyAgdW5zaWduZWQgc2hvcnQgYTIsIGE0OworCisgIGExID0gKih1bnNpZ25lZCBjaGFyICopYXZhbHNbMF07CisgIGEyID0gKih1bnNpZ25lZCBzaG9ydCAqKWF2YWxzWzFdOworICBhMyA9ICoodW5zaWduZWQgY2hhciAqKWF2YWxzWzJdOworICBhNCA9ICoodW5zaWduZWQgc2hvcnQgKilhdmFsc1szXTsKKworICAqKGZmaV9hcmcgKilydmFsID0gdGVzdF9mdW5jX2ZuKGExLCBhMiwgYTMsIGE0KTsKKworfQorCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqdGVzdF90eXBlKSh1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBzaG9ydCwKKwkJCQkgICB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBzaG9ydCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCAqIGFyZ3NfZGJsWzVdOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1s1XTsKKyAgZmZpX2FyZyByZXNfY2FsbDsKKyAgdW5zaWduZWQgY2hhciBhLCBjOworICB1bnNpZ25lZCBzaG9ydCBiLCBkLCByZXNfY2xvc3VyZTsKKworICBhID0gMTsKKyAgYiA9IDI7CisgIGMgPSAxMjc7CisgIGQgPSAxMjg7CisKKyAgYXJnc19kYmxbMF0gPSAmYTsKKyAgYXJnc19kYmxbMV0gPSAmYjsKKyAgYXJnc19kYmxbMl0gPSAmYzsKKyAgYXJnc19kYmxbM10gPSAmZDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VzaG9ydDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VjaGFyOworICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdXNob3J0OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV91c2hvcnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9mdW5jX2ZuKSwgJnJlc19jYWxsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMTI3IDEyODogMjU4IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgKHVuc2lnbmVkIHNob3J0KXJlc19jYWxsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyNTgiIH0gKi8KKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIHRlc3RfZnVuY19nbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisKKyAgcmVzX2Nsb3N1cmUgPSAoKigodGVzdF90eXBlKWNvZGUpKSgxLCAyLCAxMjcsIDEyOCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAxMjcgMTI4OiAyNTgiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLCByZXNfY2xvc3VyZSk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjU4IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhZGQzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgcG9pbnRlciBhcmd1bWVudHMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNi8yMDA3CSovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit2b2lkKiBjbHNfcG9pbnRlcl9mbih2b2lkKiBhMSwgdm9pZCogYTIpCit7CisJdm9pZCoJcmVzdWx0CT0gKHZvaWQqKSgoaW50cHRyX3QpYTEgKyAoaW50cHRyX3QpYTIpOworCisJcHJpbnRmKCIweCUwOHggMHglMDh4OiAweCUwOHhcbiIsIAorCSAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIGExLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSBhMiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfcG9pbnRlcl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgCisJICAgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworCXZvaWQqCWExCT0gKih2b2lkKiopKGFyZ3NbMF0pOworCXZvaWQqCWEyCT0gKih2b2lkKiopKGFyZ3NbMV0pOworCisJKih2b2lkKiopcmVzcCA9IGNsc19wb2ludGVyX2ZuKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYJY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCoJCQlhcmdzWzNdOworLy8JZmZpX3R5cGUJCWNsc19wb2ludGVyX3R5cGU7CisJZmZpX3R5cGUqCQlhcmdfdHlwZXNbM107CisKKy8qCWNsc19wb2ludGVyX3R5cGUuc2l6ZSA9IHNpemVvZih2b2lkKik7CisJY2xzX3BvaW50ZXJfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19wb2ludGVyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1BPSU5URVI7CisJY2xzX3BvaW50ZXJfdHlwZS5lbGVtZW50cyA9IE5VTEw7Ki8KKworCXZvaWQqCWFyZzEJPSAodm9pZCopMHgxMjM0NTY3ODsKKwl2b2lkKglhcmcyCT0gKHZvaWQqKTB4ODlhYmNkZWY7CisJZmZpX2FyZwlyZXMJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfcG9pbnRlciwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZhcmcxOworCWFyZ3NbMV0gPSAmYXJnMjsKKwlhcmdzWzJdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfcG9pbnRlcl9mbiksICZyZXMsIGFyZ3MpOworCS8qIHsgZGctb3V0cHV0ICIweDEyMzQ1Njc4IDB4ODlhYmNkZWY6IDB4OWJlMDI0NjciIH0gKi8KKwlwcmludGYoInJlczogMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSByZXMpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMHg5YmUwMjQ2NyIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcG9pbnRlcl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcyA9IChmZmlfYXJnKSgodm9pZCooKikodm9pZCosIHZvaWQqKSkoY29kZSkpKGFyZzEsIGFyZzIpOworCS8qIHsgZGctb3V0cHV0ICJcbjB4MTIzNDU2NzggMHg4OWFiY2RlZjogMHg5YmUwMjQ2NyIgfSAqLworCXByaW50ZigicmVzOiAweCUwOHhcbiIsICh1bnNpZ25lZCBpbnQpIHJlcyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAweDliZTAyNDY3IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3ZjI3MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgcG9pbnRlciBhcmd1bWVudHMgYWNyb3NzIG11bHRpcGxlIGhpZGVvdXMgc3RhY2sgZnJhbWVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbiA2LzcvMjAwNwkqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsIHN0cm9uZ2FybSotKi0qIHhzY2FsZSotKi0qIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljCWxvbmcgZHVtbXlWYXI7CisKK2xvbmcgZHVtbXlfZnVuYygKKwlsb25nIGRvdWJsZSBhMSwgY2hhciBiMSwKKwlsb25nIGRvdWJsZSBhMiwgY2hhciBiMiwKKwlsb25nIGRvdWJsZSBhMywgY2hhciBiMywKKwlsb25nIGRvdWJsZSBhNCwgY2hhciBiNCkKK3sKKwlyZXR1cm4gYTEgKyBiMSArIGEyICsgYjIgKyBhMyArIGIzICsgYTQgKyBiNDsKK30KKwordm9pZCogY2xzX3BvaW50ZXJfZm4yKHZvaWQqIGExLCB2b2lkKiBhMikKK3sKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwl2b2lkKglyZXN1bHQJPSAodm9pZCopKChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMik7CisKKwlwcmludGYoIjB4JTA4eCAweCUwOHg6IDB4JTA4eFxuIiwgCisJICAgICAgICh1bnNpZ25lZCBpbnQpKHVpbnRwdHJfdCkgYTEsCisgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSh1aW50cHRyX3QpIGEyLAorICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkodWludHB0cl90KSByZXN1bHQpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogY2xzX3BvaW50ZXJfZm4xKHZvaWQqIGExLCB2b2lkKiBhMikKK3sKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwl2b2lkKglyZXN1bHQJPSAodm9pZCopKChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMik7CisKKwlwcmludGYoIjB4JTA4eCAweCUwOHg6IDB4JTA4eFxuIiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSBhMSwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSBhMiwKKyAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGludHB0cl90KSByZXN1bHQpOworCisJcmVzdWx0CT0gY2xzX3BvaW50ZXJfZm4yKHJlc3VsdCwgYTEpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19wb2ludGVyX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCAKKwkgICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJdm9pZCoJYTEJPSAqKHZvaWQqKikoYXJnc1swXSk7CisJdm9pZCoJYTIJPSAqKHZvaWQqKikoYXJnc1sxXSk7CisKKwlsb25nIGRvdWJsZQl0cmFtcGxlMQk9IChpbnRwdHJfdClhMSArIChpbnRwdHJfdClhMjsKKwljaGFyCQl0cmFtcGxlMgk9ICgoY2hhciopJmExKVswXSArICgoY2hhciopJmEyKVswXTsKKwlsb25nIGRvdWJsZQl0cmFtcGxlMwk9IChpbnRwdHJfdCl0cmFtcGxlMSArIChpbnRwdHJfdClhMTsKKwljaGFyCQl0cmFtcGxlNAk9IHRyYW1wbGUyICsgKChjaGFyKikmYTEpWzFdOworCWxvbmcgZG91YmxlCXRyYW1wbGU1CT0gKGludHB0cl90KXRyYW1wbGUzICsgKGludHB0cl90KWEyOworCWNoYXIJCXRyYW1wbGU2CT0gdHJhbXBsZTQgKyAoKGNoYXIqKSZhMilbMV07CisJbG9uZyBkb3VibGUJdHJhbXBsZTcJPSAoaW50cHRyX3QpdHJhbXBsZTUgKyAoaW50cHRyX3QpdHJhbXBsZTE7CisJY2hhcgkJdHJhbXBsZTgJPSB0cmFtcGxlNiArIHRyYW1wbGUyOworCisJZHVtbXlWYXIJPSBkdW1teV9mdW5jKHRyYW1wbGUxLCB0cmFtcGxlMiwgdHJhbXBsZTMsIHRyYW1wbGU0LAorCQl0cmFtcGxlNSwgdHJhbXBsZTYsIHRyYW1wbGU3LCB0cmFtcGxlOCk7CisKKwkqKHZvaWQqKilyZXNwID0gY2xzX3BvaW50ZXJfZm4xKGExLCBhMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYJY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlKglwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCoJCQlhcmdzWzNdOworLy8JZmZpX3R5cGUJCWNsc19wb2ludGVyX3R5cGU7CisJZmZpX3R5cGUqCQlhcmdfdHlwZXNbM107CisKKy8qCWNsc19wb2ludGVyX3R5cGUuc2l6ZSA9IHNpemVvZih2b2lkKik7CisJY2xzX3BvaW50ZXJfdHlwZS5hbGlnbm1lbnQgPSAwOworCWNsc19wb2ludGVyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1BPSU5URVI7CisJY2xzX3BvaW50ZXJfdHlwZS5lbGVtZW50cyA9IE5VTEw7Ki8KKworCXZvaWQqCWFyZzEJPSAodm9pZCopMHgwMTIzNDU2NzsKKwl2b2lkKglhcmcyCT0gKHZvaWQqKTB4ODlhYmNkZWY7CisJZmZpX2FyZwlyZXMJCT0gMDsKKworCWFyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ190eXBlc1syXSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfcG9pbnRlciwKKwkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc1swXSA9ICZhcmcxOworCWFyZ3NbMV0gPSAmYXJnMjsKKwlhcmdzWzJdID0gTlVMTDsKKworCXByaW50ZigiXG4iKTsKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3BvaW50ZXJfZm4xKSwgJnJlcywgYXJncyk7CisKKwlwcmludGYoInJlczogMHglMDh4XG4iLCAodW5zaWduZWQgaW50KSByZXMpOworCS8vIHsgZGctb3V0cHV0ICJcbjB4MDEyMzQ1NjcgMHg4OWFiY2RlZjogMHg4YWNmMTM1NiIgfQorCS8vIHsgZGctb3V0cHV0ICJcbjB4OGFjZjEzNTYgMHgwMTIzNDU2NzogMHg4YmYyNThiZCIgfQorCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMHg4YmYyNThiZCIgfQorCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcG9pbnRlcl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlcyA9IChmZmlfYXJnKSgodm9pZCooKikodm9pZCosIHZvaWQqKSkoY29kZSkpKGFyZzEsIGFyZzIpOworCisJcHJpbnRmKCJyZXM6IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGludCkgcmVzKTsKKwkvLyB7IGRnLW91dHB1dCAiXG4weDAxMjM0NTY3IDB4ODlhYmNkZWY6IDB4OGFjZjEzNTYiIH0KKwkvLyB7IGRnLW91dHB1dCAiXG4weDhhY2YxMzU2IDB4MDEyMzQ1Njc6IDB4OGJmMjU4YmQiIH0KKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDB4OGJmMjU4YmQiIH0KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyOTg2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzY2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMTEwOAkgKi8KKworCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfc2NoYXJfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICAqKGZmaV9hcmcqKXJlc3AgPSAqKHNpZ25lZCBjaGFyICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKihzaWduZWQgY2hhciAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCpjbHNfcmV0X3NjaGFyKShzaWduZWQgY2hhcik7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHNpZ25lZCBjaGFyIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3NjaGFyX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF9zY2hhciljb2RlKSkoMTI3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNzogMTI3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIiwgcmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAxMjciIH0gKi8KKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlMTNiNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMKQEAgLTAsMCArMSw0MiBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgc2ludDMyLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMxMTA4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X3NpbnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICooc2lnbmVkIGludCAqKWFyZ3NbMF07CisgIHByaW50ZigiJWQ6ICVkXG4iLCooc2lnbmVkIGludCAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgc2lnbmVkIGludCAoKmNsc19yZXRfc2ludCkoc2lnbmVkIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMl07CisgIHNpZ25lZCBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zaW50OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3NpbnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3NpbnQpY29kZSkpKDY1NTM0KTsKKyAgLyogeyBkZy1vdXRwdXQgIjY1NTM0OiA2NTUzNCIgfSAqLworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA2NTUzNCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2ZDU3ZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBzc2hvcnQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzExMDgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfc3Nob3J0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICooc2lnbmVkIHNob3J0ICopYXJnc1swXTsKKyAgcHJpbnRmKCIlZDogJWRcbiIsKihzaWduZWQgc2hvcnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHNpZ25lZCBzaG9ydCAoKmNsc19yZXRfc3Nob3J0KShzaWduZWQgc2hvcnQpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICBzaWduZWQgc2hvcnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3NzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF9zc2hvcnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3NzaG9ydCljb2RlKSkoMjU1KTsKKyAgLyogeyBkZy1vdXRwdXQgIjI1NTogMjU1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDI1NSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMzE3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1Y2hhci4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQgY2xzX3JldF91Y2hhcl9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJCQkgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICoodW5zaWduZWQgY2hhciAqKWFyZ3NbMF07CisgIHByaW50ZigiJWQ6ICVkXG4iLCoodW5zaWduZWQgY2hhciAqKWFyZ3NbMF0sCisJIChpbnQpKihmZmlfYXJnICopKHJlc3ApKTsKK30KK3R5cGVkZWYgdW5zaWduZWQgY2hhciAoKmNsc19yZXRfdWNoYXIpKHVuc2lnbmVkIGNoYXIpOworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzJdOworICB1bnNpZ25lZCBjaGFyIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3VjaGFyLCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3VjaGFyX2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF91Y2hhciljb2RlKSkoMTI3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjEyNzogMTI3IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDEyNyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODVjZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1aW50LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDMwODI4CSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZCBjbHNfcmV0X3VpbnRfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkJICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyAqKXJlc3AgPSAqKHVuc2lnbmVkIGludCAqKWFyZ3NbMF07CisKKyAgcHJpbnRmKCIlZDogJWRcbiIsKih1bnNpZ25lZCBpbnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHVuc2lnbmVkIGludCAoKmNsc19yZXRfdWludCkodW5zaWduZWQgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgaW50IHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzFdID0gTlVMTDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdWludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF91aW50X2ZuLCBOVUxMLCBjb2RlKSAgPT0gRkZJX09LKTsKKworICByZXMgPSAoKigoY2xzX3JldF91aW50KWNvZGUpKSgyMTQ3NDgzNjQ3KTsKKyAgLyogeyBkZy1vdXRwdXQgIjIxNDc0ODM2NDc6IDIxNDc0ODM2NDciIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogMjE0NzQ4MzY0NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1YWI0NAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYwpAQCAtMCwwICsxLDQ3IEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBsb25nIGxvbmcuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLVduby1mb3JtYXQiIHsgdGFyZ2V0IGFscGhhKi1kZWMtb3NmKiB9IH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfdWxvbmdsb25nX2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLAorCQkJCSB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilyZXNwPSAgKih1bnNpZ25lZCBsb25nIGxvbmcgKilhcmdzWzBdOworCisgIHByaW50ZigiJSIgUFJJdUxMICI6ICUiIFBSSXVMTCAiXG4iLCoodW5zaWduZWQgbG9uZyBsb25nICopYXJnc1swXSwKKwkgKih1bnNpZ25lZCBsb25nIGxvbmcgKikocmVzcCkpOworfQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgKCpjbHNfcmV0X3Vsb25nbG9uZykodW5zaWduZWQgbG9uZyBsb25nKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgbG9uZyBsb25nIHJlczsKKworICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbF9hcmdfdHlwZXNbMV0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV91aW50NjQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfcmV0X3Vsb25nbG9uZ19mbiwgTlVMTCwgY29kZSkgID09IEZGSV9PSyk7CisgIHJlcyA9ICgqKChjbHNfcmV0X3Vsb25nbG9uZyljb2RlKSkoMjE0TEwpOworICAvKiB7IGRnLW91dHB1dCAiMjE0OiAyMTQiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICUiIFBSSWRMTCAiXG4iLCByZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIxNCIgfSAqLworCisgIHJlcyA9ICgqKChjbHNfcmV0X3Vsb25nbG9uZyljb2RlKSkoOTIyMzM3MjAzNTg1NDc3NTgwOExMKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuOTIyMzM3MjAzNTg1NDc3NTgwODogOTIyMzM3MjAzNTg1NDc3NTgwOCIgfSAqLworICBwcmludGYoInJlczogJSIgUFJJZExMICJcbiIsIHJlcyk7CisgIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOTIyMzM3MjAzNTg1NDc3NTgwOCIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAwMTAwZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOgljbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSB1c2hvcnQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyB2b2lkIGNsc19yZXRfdXNob3J0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJCSAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgICooZmZpX2FyZyopcmVzcCA9ICoodW5zaWduZWQgc2hvcnQgKilhcmdzWzBdOworCisgIHByaW50ZigiJWQ6ICVkXG4iLCoodW5zaWduZWQgc2hvcnQgKilhcmdzWzBdLAorCSAoaW50KSooZmZpX2FyZyAqKShyZXNwKSk7Cit9Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0ICgqY2xzX3JldF91c2hvcnQpKHVuc2lnbmVkIHNob3J0KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1syXTsKKyAgdW5zaWduZWQgc2hvcnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX3VzaG9ydCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3JldF91c2hvcnRfZm4sIE5VTEwsIGNvZGUpICA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKChjbHNfcmV0X3VzaG9ydCljb2RlKSkoNjU1MzUpOworICAvKiB7IGRnLW91dHB1dCAiNjU1MzU6IDY1NTM1IiB9ICovCisgIHByaW50ZigicmVzOiAlZFxuIixyZXMpOworICAvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDY1NTM1IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMWEzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qIEFyZWE6CQlmZmlfcHJlcF9jaWYsIGZmaV9wcmVwX2Nsb3N1cmUKKyAgIFB1cnBvc2U6CQlUZXN0IGVycm9yIHJldHVybiBmb3IgYmFkIEFCSXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJCW5vbmUuCisgICBPcmlnaW5hdG9yOglCbGFrZSBDaGFmZmluIDYvNi8yMDA3CSAqLworCisvKiB7IGRnLWRvIHJ1biB7IHhmYWlsICotKi0qIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHZvaWQKK2R1bW15X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwIF9fVU5VU0VEX18sIAorCSB2b2lkKiogYXJncyBfX1VOVVNFRF9fLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQore30KKworaW50IG1haW4gKHZvaWQpCit7CisJZmZpX2NpZiBjaWY7CisgICAgICAgIHZvaWQgKmNvZGU7CisJZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKwl2b2lkKiBhcmdzWzFdOworCWZmaV90eXBlKiBhcmdfdHlwZXNbMV07CisKKwlhcmdfdHlwZXNbMF0gPSBOVUxMOworCWFyZ3NbMF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIDI1NSwgMCwgJmZmaV90eXBlX3ZvaWQsCisJCWFyZ190eXBlcykgPT0gRkZJX0JBRF9BQkkpOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMCwgJmZmaV90eXBlX3ZvaWQsCisJCWFyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWNpZi5hYmk9IDI1NTsKKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgZHVtbXlfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9CQURfQUJJKTsKKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmZjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYwpAQCAtMCwwICsxLDI1IEBACisvKiBBcmVhOgkJZmZpX3ByZXBfY2lmCisgICBQdXJwb3NlOgkJVGVzdCBlcnJvciByZXR1cm4gZm9yIGJhZCB0eXBlZGVmcy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4gNi82LzIwMDcJICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgKi0qLSogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlmZmlfY2lmIGNpZjsKKwlmZmlfdHlwZSogYXJnX3R5cGVzWzFdOworCisJYXJnX3R5cGVzWzBdID0gTlVMTDsKKworCWZmaV90eXBlCWJhZFR5cGUJPSBmZmlfdHlwZV92b2lkOworCisJYmFkVHlwZS5zaXplID0gMDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDAsICZiYWRUeXBlLAorCQlhcmdfdHlwZXMpID09IEZGSV9CQURfVFlQRURFRik7CisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjYjk4NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKQEAgLTAsMCArMSwxMjkgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSAiZmZpY29uZmlnLmgiCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0FSR1MgMjU2CisKKyNkZWZpbmUgQ0hFQ0soeCkgISh4KSA/IGFib3J0KCkgOiAwCisKKy8qIERlZmluZSBfX1VOVVNFRF9fIHRoYXQgYWxzbyBvdGhlciBjb21waWxlcnMgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLworI3VuZGVmIF9fVU5VU0VEX18KKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBfX1VOVVNFRF9fIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorI2Vsc2UKKyNkZWZpbmUgX19VTlVTRURfXworI2VuZGlmCisKKy8qIFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQorICAgZmlsZSBvcGVuLiAgKi8KKyNpZmRlZiBIQVZFX01NQVBfQU5PTgorIyB1bmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgaWYgIWRlZmluZWQgKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQgKE1BUF9BTk9OKQorIyAgZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKworIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgorIyBpZm5kZWYgTUFQX0ZBSUxFRAorIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKKyMgZW5kaWYKKyMgZGVmaW5lIFVTSU5HX01NQVAKKworI2VuZGlmCisKKy8qIE1pbkdXIGtsdWRnZS4gICovCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIFBSSWRMTCAiSTY0ZCIKKyNkZWZpbmUgUFJJdUxMICJJNjR1IgorI2Vsc2UKKyNkZWZpbmUgUFJJZExMICJsbGQiCisjZGVmaW5lIFBSSXVMTCAibGx1IgorI2VuZGlmCisKKy8qIFRydTY0IFVOSVgga2x1ZGdlLiAgKi8KKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX29zZl9fKQorLyogVHJ1NjQgVU5JWCBWNC4wIGRvZXNuJ3Qgc3VwcG9ydCAlbGxkLyVsbGQsIGJ1dCBsb25nIGlzIDY0LWJpdC4gICovCisjdW5kZWYgUFJJZExMCisjZGVmaW5lIFBSSWRMTCAibGQiCisjdW5kZWYgUFJJdUxMCisjZGVmaW5lIFBSSXVMTCAibHUiCisjZGVmaW5lIFBSSWQ2NCAibGQiCisjZGVmaW5lIFBSSXU2NCAibHUiCisjZGVmaW5lIFBSSXVQVFIgImx1IgorI2VuZGlmCisKKy8qIFBBIEhQLVVYIGtsdWRnZS4gICovCisjaWYgZGVmaW5lZChfX2hwcGFfXykgJiYgZGVmaW5lZChfX2hwdXhfXykgJiYgIWRlZmluZWQoUFJJdVBUUikKKyNkZWZpbmUgUFJJdVBUUiAibHUiCisjZW5kaWYKKworLyogU29sYXJpcyA8IDEwIGtsdWRnZS4gICovCisjaWYgZGVmaW5lZChfX3N1bl9fKSAmJiBkZWZpbmVkKF9fc3ZyNF9fKSAmJiAhZGVmaW5lZChQUkl1UFRSKQorI2lmIGRlZmluZWQoX19hcmNoNjRfXykgfHwgZGVmaW5lZCAoX194ODZfNjRfXykKKyNkZWZpbmUgUFJJdVBUUiAibHUiCisjZWxzZQorI2RlZmluZSBQUkl1UFRSICJ1IgorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVTSU5HX01NQVAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqCithbGxvY2F0ZV9tbWFwIChzaXplX3Qgc2l6ZSkKK3sKKyAgdm9pZCAqcGFnZTsKKyNpZiBkZWZpbmVkIChIQVZFX01NQVBfREVWX1pFUk8pCisgIHN0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisgIGlmIChkZXZfemVyb19mZCA9PSAtMSkKKyAgICB7CisgICAgICBkZXZfemVyb19mZCA9IG9wZW4gKCIvZGV2L3plcm8iLCBPX1JET05MWSk7CisgICAgICBpZiAoZGV2X3plcm9fZmQgPT0gLTEpCisJeworCSAgcGVycm9yICgib3BlbiAvZGV2L3plcm86ICVtIik7CisJICBleGl0ICgxKTsKKwl9CisgICAgfQorI2VuZGlmCisKKworI2lmZGVmIEhBVkVfTU1BUF9BTk9OCisgIHBhZ2UgPSBtbWFwIChOVUxMLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFIHwgUFJPVF9FWEVDLAorCSAgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworICBwYWdlID0gbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgICAgTUFQX1BSSVZBVEUsIGRldl96ZXJvX2ZkLCAwKTsKKyNlbmRpZgorCisgIGlmIChwYWdlID09ICh2b2lkICopIE1BUF9GQUlMRUQpCisgICAgeworICAgICAgcGVycm9yICgidmlydHVhbCBtZW1vcnkgZXhoYXVzdGVkIik7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgcmV0dXJuIHBhZ2U7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjMjcyZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBpbnQgZmxvYXRpbmcoaW50IGEsIGZsb2F0IGIsIGRvdWJsZSBjLCBsb25nIGRvdWJsZSBkKQoreworICBpbnQgaTsKKworICBpID0gKGludCkgKChmbG9hdClhL2IgKyAoKGZsb2F0KWMvKGZsb2F0KWQpKTsKKworICByZXR1cm4gaTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICBmbG9hdCBmOworICBzaWduZWQgaW50IHNpMTsKKyAgZG91YmxlIGQ7CisgIGxvbmcgZG91YmxlIGxkOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJnNpMTsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzFdID0gJmY7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMl0gPSAmZDsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbM10gPSAmbGQ7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgc2kxID0gNjsKKyAgZiA9IDMuMTQxNTk7CisgIGQgPSAoZG91YmxlKTEuMC8oZG91YmxlKTMuMDsKKyAgbGQgPSAyLjcxODI4MTgyODQ2TDsKKworICBmbG9hdGluZyAoc2kxLCBmLCBkLCBsZCk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZsb2F0aW5nKSwgJnJpbnQsIHZhbHVlcyk7CisKKyAgcHJpbnRmICgiJWQgdnMgJWRcbiIsIChpbnQpcmludCwgZmxvYXRpbmcgKHNpMSwgZiwgZCwgbGQpKTsKKworICBDSEVDSygoaW50KXJpbnQgPT0gZmxvYXRpbmcoc2kxLCBmLCBkLCBsZCkpOworCisgIGV4aXQgKDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTFkMDU5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMKQEAgLTAsMCArMSw1OCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSBkOworICB1bnNpZ25lZCBjaGFyIGNbc2l6ZW9mIChkb3VibGUpXTsKK30gdmFsdWVfdHlwZTsKKworI2RlZmluZSBDQU5BUlkgMHhiYQorCitzdGF0aWMgZG91YmxlIGRibGl0KGZsb2F0IGYpCit7CisgIHJldHVybiBmLzMuMDsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGY7CisgIHZhbHVlX3R5cGUgcmVzdWx0WzJdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGYgPSAzLjE0MTU5OworCisgIC8qIFB1dCBhIGNhbmFyeSBpbiB0aGUgcmV0dXJuIGFycmF5LiAgVGhpcyBpcyBhIHJlZ3Jlc3Npb24gdGVzdCBmb3IKKyAgICAgYSBidWZmZXIgb3ZlcnJ1bi4gICovCisgIG1lbXNldChyZXN1bHRbMV0uYywgQ0FOQVJZLCBzaXplb2YgKGRvdWJsZSkpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihkYmxpdCksICZyZXN1bHRbMF0uZCwgdmFsdWVzKTsKKworICAvKiBUaGVzZSBhcmUgbm90IGFsd2F5cyB0aGUgc2FtZSEhIENoZWNrIGZvciBhIHJlYXNvbmFibGUgZGVsdGEgKi8KKworICBDSEVDSyhyZXN1bHRbMF0uZCAtIGRibGl0KGYpIDwgREJMX0VQU0lMT04pOworCisgIC8qIENoZWNrIHRoZSBjYW5hcnkuICAqLworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIChkb3VibGUpOyArK2kpCisgICAgQ0hFQ0socmVzdWx0WzFdLmNbaV0gPT0gQ0FOQVJZKTsKKworICBleGl0KDApOworCit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjI5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYwpAQCAtMCwwICsxLDU4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGxvbmcgZG91YmxlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAiZmFpbHMiIHsgdGFyZ2V0IHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworLyogeyBkZy1kbyBydW4geyB4ZmFpbCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgorCitzdGF0aWMgbG9uZyBkb3VibGUgbGRibGl0KGZsb2F0IGYpCit7CisgIHJldHVybiAobG9uZyBkb3VibGUpICgoKGxvbmcgZG91YmxlKSBmKS8gKGxvbmcgZG91YmxlKSAzLjApOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZjsKKyAgbG9uZyBkb3VibGUgbGQ7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2xvbmdkb3VibGUsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZiA9IDMuMTQxNTk7CisKKyNpZiAxCisgIC8qIFRoaXMgaXMgaWZkZWYnZCBvdXQgZm9yIG5vdy4gbG9uZyBkb3VibGUgc3VwcG9ydCB1bmRlciBTdW5PUy9nY2MKKyAgICAgaXMgcHJldHR5IG11Y2ggbm9uLWV4aXN0ZW50LiAgWW91J2xsIGdldCB0aGUgb2RkIGJ1cyBlcnJvciBpbiBsaWJyYXJ5CisgICAgIHJvdXRpbmVzIGxpa2UgcHJpbnRmKCkuICAqLworICBwcmludGYgKCIlTGZcbiIsIGxkYmxpdChmKSk7CisjZW5kaWYKKyAgbGQgPSA2NjY7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihsZGJsaXQpLCAmbGQsIHZhbHVlcyk7CisKKyNpZiAxCisgIC8qIFRoaXMgaXMgaWZkZWYnZCBvdXQgZm9yIG5vdy4gbG9uZyBkb3VibGUgc3VwcG9ydCB1bmRlciBTdW5PUy9nY2MKKyAgICAgaXMgcHJldHR5IG11Y2ggbm9uLWV4aXN0ZW50LiAgWW91J2xsIGdldCB0aGUgb2RkIGJ1cyBlcnJvciBpbiBsaWJyYXJ5CisgICAgIHJvdXRpbmVzIGxpa2UgcHJpbnRmKCkuICAqLworICBwcmludGYgKCIlTGYsICVMZiwgJUxmLCAlTGZcbiIsIGxkLCBsZGJsaXQoZiksIGxkIC0gbGRibGl0KGYpLCBMREJMX0VQU0lMT04pOworI2VuZGlmCisKKyAgLyogVGhlc2UgYXJlIG5vdCBhbHdheXMgdGhlIHNhbWUhISBDaGVjayBmb3IgYSByZWFzb25hYmxlIGRlbHRhICovCisgIGlmIChsZCAtIGxkYmxpdChmKSA8IExEQkxfRVBTSUxPTikKKyAgICBwdXRzKCJsb25nIGRvdWJsZSByZXR1cm4gdmFsdWUgdGVzdHMgb2shIik7CisgIGVsc2UKKyAgICBDSEVDSygwKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmJkNWYyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmMKQEAgLTAsMCArMSw3MiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGZsb2F0IGFyZ3VtZW50cyB3aXRoIGRpZmZlcmVudCBvcmRlcnMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3N0YXRpYyBkb3VibGUgZmxvYXRpbmdfMShmbG9hdCBhLCBkb3VibGUgYiwgbG9uZyBkb3VibGUgYykKK3sKKyAgcmV0dXJuIChkb3VibGUpIGEgKyBiICsgKGRvdWJsZSkgYzsKK30KKworc3RhdGljIGRvdWJsZSBmbG9hdGluZ18yKGxvbmcgZG91YmxlIGEsIGRvdWJsZSBiLCBmbG9hdCBjKQoreworICByZXR1cm4gKGRvdWJsZSkgYSArIGIgKyAoZG91YmxlKSBjOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIHJkOworCisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworICBsb25nIGRvdWJsZSBsZDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZjsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1sxXSA9ICZkOworICBhcmdzWzJdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIHZhbHVlc1syXSA9ICZsZDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGYgPSAzLjE0MTU5OworICBkID0gKGRvdWJsZSkxLjAvKGRvdWJsZSkzLjA7CisgIGxkID0gMi43MTgyODE4Mjg0Nkw7CisKKyAgZmxvYXRpbmdfMSAoZiwgZCwgbGQpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihmbG9hdGluZ18xKSwgJnJkLCB2YWx1ZXMpOworCisgIENIRUNLKHJkIC0gZmxvYXRpbmdfMShmLCBkLCBsZCkgPCBEQkxfRVBTSUxPTik7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbMF0gPSAmbGQ7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICB2YWx1ZXNbMV0gPSAmZDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzJdID0gJmY7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsCisJCSAgICAgJmZmaV90eXBlX2RvdWJsZSwgYXJncykgPT0gRkZJX09LKTsKKworICBmbG9hdGluZ18yIChsZCwgZCwgZik7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZsb2F0aW5nXzIpLCAmcmQsIHZhbHVlcyk7CisKKyAgQ0hFQ0socmQgLSBmbG9hdGluZ18yKGxkLCBkLCBmKSA8IERCTF9FUFNJTE9OKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkNmQ4NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBkZW5vcm0gZG91YmxlIHZhbHVlLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSMjY0ODMuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLW1pZWVlIiB7IHRhcmdldCBhbHBoYSotKi0qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGNoYXIgY1tzaXplb2YgKGRvdWJsZSldOworfSB2YWx1ZV90eXBlOworCisjZGVmaW5lIENBTkFSWSAweGJhCisKK3N0YXRpYyBkb3VibGUgZGJsaXQoZG91YmxlIGQpCit7CisgIHJldHVybiBkOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGQ7CisgIHZhbHVlX3R5cGUgcmVzdWx0WzJdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmQ7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgZCA9IERCTF9NSU4gLyAyOworICAKKyAgLyogUHV0IGEgY2FuYXJ5IGluIHRoZSByZXR1cm4gYXJyYXkuICBUaGlzIGlzIGEgcmVncmVzc2lvbiB0ZXN0IGZvcgorICAgICBhIGJ1ZmZlciBvdmVycnVuLiAgKi8KKyAgbWVtc2V0KHJlc3VsdFsxXS5jLCBDQU5BUlksIHNpemVvZiAoZG91YmxlKSk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGRibGl0KSwgJnJlc3VsdFswXS5kLCB2YWx1ZXMpOworICAKKyAgLyogVGhlIHN0YW5kYXJkIGRlbHRhIGNoZWNrIGRvZXNuJ3Qgd29yayBmb3IgZGVub3Jtcy4gIFNpbmNlIHdlIGRpZG4ndCBkbworICAgICBhbnkgYXJpdGhtZXRpYywgd2Ugc2hvdWxkIGdldCB0aGUgb3JpZ2luYWwgcmVzdWx0IGJhY2ssIGFuZCBoZW5jZSBhbgorICAgICBleGFjdCBjaGVjayBzaG91bGQgYmUgT0sgaGVyZS4gICovCisgCisgIENIRUNLKHJlc3VsdFswXS5kID09IGRibGl0KGQpKTsKKworICAvKiBDaGVjayB0aGUgY2FuYXJ5LiAgKi8KKyAgZm9yIChpID0gMDsgaSA8IHNpemVvZiAoZG91YmxlKTsgKytpKQorICAgIENIRUNLKHJlc3VsdFsxXS5jW2ldID09IENBTkFSWSk7CisKKyAgZXhpdCgwKTsKKworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmZmI3MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMKQEAgLTAsMCArMSwzNDIgQEAKKy8qCUFyZWE6CQkJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorCVB1cnBvc2U6CQlDaGVjayBsYXJnZSBzdHJ1Y3R1cmUgcmV0dXJucy4KKwlMaW1pdGF0aW9uczoJbm9uZS4KKwlQUjoJCQkJbm9uZS4KKwlPcmlnaW5hdG9yOgkJQmxha2UgQ2hhZmZpbgk2LzE4LzIwMDcKKyovCisKKy8qIHsgZGctZXhjZXNzLWVycm9ycyAiIiB7IHRhcmdldCB4ODZfNjQtKi1taW5ndyogeDg2XzY0LSotY3lnd2luKiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgLW1sb25nLWRvdWJsZS0xMjggeyB0YXJnZXQgcG93ZXJwYzY0Ki0qLSogfSB9ICovCisvKiB7IGRnLW91dHB1dCAiIiB7IHhmYWlsIHg4Nl82NC0qLW1pbmd3KiB4ODZfNjQtKi1jeWd3aW4qIH0gfSAqLworCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmCXN0cnVjdCBCaWdTdHJ1Y3R7CisJdWludDhfdAkJYTsKKwlpbnQ4X3QJCWI7CisJdWludDE2X3QJYzsKKwlpbnQxNl90CQlkOworCXVpbnQzMl90CWU7CisJaW50MzJfdAkJZjsKKwl1aW50NjRfdAlnOworCWludDY0X3QJCWg7CisJZmxvYXQJCWk7CisJZG91YmxlCQlqOworCWxvbmcgZG91YmxlCWs7CisJY2hhcioJCWw7CisJdWludDhfdAkJbTsKKwlpbnQ4X3QJCW47CisJdWludDE2X3QJbzsKKwlpbnQxNl90CQlwOworCXVpbnQzMl90CXE7CisJaW50MzJfdAkJcjsKKwl1aW50NjRfdAlzOworCWludDY0X3QJCXQ7CisJZmxvYXQJCXU7CisJZG91YmxlCQl2OworCWxvbmcgZG91YmxlCXc7CisJY2hhcioJCXg7CisJdWludDhfdAkJeTsKKwlpbnQ4X3QJCXo7CisJdWludDE2X3QJYWE7CisJaW50MTZfdAkJYmI7CisJdWludDMyX3QJY2M7CisJaW50MzJfdAkJZGQ7CisJdWludDY0X3QJZWU7CisJaW50NjRfdAkJZmY7CisJZmxvYXQJCWdnOworCWRvdWJsZQkJaGg7CisJbG9uZyBkb3VibGUJaWk7CisJY2hhcioJCWpqOworCXVpbnQ4X3QJCWtrOworCWludDhfdAkJbGw7CisJdWludDE2X3QJbW07CisJaW50MTZfdAkJbm47CisJdWludDMyX3QJb287CisJaW50MzJfdAkJcHA7CisJdWludDY0X3QJcXE7CisJaW50NjRfdAkJcnI7CisJZmxvYXQJCXNzOworCWRvdWJsZQkJdHQ7CisJbG9uZyBkb3VibGUJdXU7CisJY2hhcioJCXZ2OworCXVpbnQ4X3QJCXd3OworCWludDhfdAkJeHg7Cit9IEJpZ1N0cnVjdDsKKworQmlnU3RydWN0Cit0ZXN0X2xhcmdlX2ZuKAorCXVpbnQ4X3QJCXVpOF8xLAorCWludDhfdAkJc2k4XzEsCisJdWludDE2X3QJdWkxNl8xLAorCWludDE2X3QJCXNpMTZfMSwKKwl1aW50MzJfdAl1aTMyXzEsCisJaW50MzJfdAkJc2kzMl8xLAorCXVpbnQ2NF90CXVpNjRfMSwKKwlpbnQ2NF90CQlzaTY0XzEsCisJZmxvYXQJCWZfMSwKKwlkb3VibGUJCWRfMSwKKwlsb25nIGRvdWJsZQlsZF8xLAorCWNoYXIqCQlwXzEsCisJdWludDhfdAkJdWk4XzIsCisJaW50OF90CQlzaThfMiwKKwl1aW50MTZfdAl1aTE2XzIsCisJaW50MTZfdAkJc2kxNl8yLAorCXVpbnQzMl90CXVpMzJfMiwKKwlpbnQzMl90CQlzaTMyXzIsCisJdWludDY0X3QJdWk2NF8yLAorCWludDY0X3QJCXNpNjRfMiwKKwlmbG9hdAkJZl8yLAorCWRvdWJsZQkJZF8yLAorCWxvbmcgZG91YmxlCWxkXzIsCisJY2hhcioJCXBfMiwKKwl1aW50OF90CQl1aThfMywKKwlpbnQ4X3QJCXNpOF8zLAorCXVpbnQxNl90CXVpMTZfMywKKwlpbnQxNl90CQlzaTE2XzMsCisJdWludDMyX3QJdWkzMl8zLAorCWludDMyX3QJCXNpMzJfMywKKwl1aW50NjRfdAl1aTY0XzMsCisJaW50NjRfdAkJc2k2NF8zLAorCWZsb2F0CQlmXzMsCisJZG91YmxlCQlkXzMsCisJbG9uZyBkb3VibGUJbGRfMywKKwljaGFyKgkJcF8zLAorCXVpbnQ4X3QJCXVpOF80LAorCWludDhfdAkJc2k4XzQsCisJdWludDE2X3QJdWkxNl80LAorCWludDE2X3QJCXNpMTZfNCwKKwl1aW50MzJfdAl1aTMyXzQsCisJaW50MzJfdAkJc2kzMl80LAorCXVpbnQ2NF90CXVpNjRfNCwKKwlpbnQ2NF90CQlzaTY0XzQsCisJZmxvYXQJCWZfNCwKKwlkb3VibGUJCWRfNCwKKwlsb25nIGRvdWJsZQlsZF80LAorCWNoYXIqCQlwXzQsCisJdWludDhfdAkJdWk4XzUsCisJaW50OF90CQlzaThfNSkKK3sKKwlCaWdTdHJ1Y3QJcmV0VmFsCT0geworCQl1aThfMSArIDEsIHNpOF8xICsgMSwgdWkxNl8xICsgMSwgc2kxNl8xICsgMSwgdWkzMl8xICsgMSwgc2kzMl8xICsgMSwKKwkJCXVpNjRfMSArIDEsIHNpNjRfMSArIDEsIGZfMSArIDEsIGRfMSArIDEsIGxkXzEgKyAxLCAoY2hhciopKChpbnRwdHJfdClwXzEgKyAxKSwgCisJCXVpOF8yICsgMiwgc2k4XzIgKyAyLCB1aTE2XzIgKyAyLCBzaTE2XzIgKyAyLCB1aTMyXzIgKyAyLCBzaTMyXzIgKyAyLAorCQkJdWk2NF8yICsgMiwgc2k2NF8yICsgMiwgZl8yICsgMiwgZF8yICsgMiwgbGRfMiArIDIsIChjaGFyKikoKGludHB0cl90KXBfMiArIDIpLCAKKwkJdWk4XzMgKyAzLCBzaThfMyArIDMsIHVpMTZfMyArIDMsIHNpMTZfMyArIDMsIHVpMzJfMyArIDMsIHNpMzJfMyArIDMsCisJCQl1aTY0XzMgKyAzLCBzaTY0XzMgKyAzLCBmXzMgKyAzLCBkXzMgKyAzLCBsZF8zICsgMywgKGNoYXIqKSgoaW50cHRyX3QpcF8zICsgMyksIAorCQl1aThfNCArIDQsIHNpOF80ICsgNCwgdWkxNl80ICsgNCwgc2kxNl80ICsgNCwgdWkzMl80ICsgNCwgc2kzMl80ICsgNCwKKwkJCXVpNjRfNCArIDQsIHNpNjRfNCArIDQsIGZfNCArIDQsIGRfNCArIDQsIGxkXzQgKyA0LCAoY2hhciopKChpbnRwdHJfdClwXzQgKyA0KSwgCisJCXVpOF81ICsgNSwgc2k4XzUgKyA1fTsKKworCXByaW50ZigiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggJWhodSAlaGhkOiAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAiCisJCSIlaGh1ICVoaGQgJWh1ICVoZCAldSAlZCAlIiBQUkl1NjQgIiAlIiBQUklkNjQgIiAlLjBmICUuMGYgJS4wTGYgJSNseCAlaGh1ICVoaGRcbiIsCisJICAgICAgIHVpOF8xLCBzaThfMSwgdWkxNl8xLCBzaTE2XzEsIHVpMzJfMSwgc2kzMl8xLCB1aTY0XzEsIHNpNjRfMSwgZl8xLCBkXzEsIGxkXzEsICh1bnNpZ25lZCBsb25nKXBfMSwKKwkJdWk4XzIsIHNpOF8yLCB1aTE2XzIsIHNpMTZfMiwgdWkzMl8yLCBzaTMyXzIsIHVpNjRfMiwgc2k2NF8yLCBmXzIsIGRfMiwgbGRfMiwgKHVuc2lnbmVkIGxvbmcpcF8yLAorCQl1aThfMywgc2k4XzMsIHVpMTZfMywgc2kxNl8zLCB1aTMyXzMsIHNpMzJfMywgdWk2NF8zLCBzaTY0XzMsIGZfMywgZF8zLCBsZF8zLCAodW5zaWduZWQgbG9uZylwXzMsCisJCXVpOF80LCBzaThfNCwgdWkxNl80LCBzaTE2XzQsIHVpMzJfNCwgc2kzMl80LCB1aTY0XzQsIHNpNjRfNCwgZl80LCBkXzQsIGxkXzQsICh1bnNpZ25lZCBsb25nKXBfNCwgdWk4XzUsIHNpOF81LAorCQlyZXRWYWwuYSwgcmV0VmFsLmIsIHJldFZhbC5jLCByZXRWYWwuZCwgcmV0VmFsLmUsIHJldFZhbC5mLAorCSAgICAgICByZXRWYWwuZywgcmV0VmFsLmgsIHJldFZhbC5pLCByZXRWYWwuaiwgcmV0VmFsLmssICh1bnNpZ25lZCBsb25nKXJldFZhbC5sLAorCQlyZXRWYWwubSwgcmV0VmFsLm4sIHJldFZhbC5vLCByZXRWYWwucCwgcmV0VmFsLnEsIHJldFZhbC5yLAorCSAgICAgICByZXRWYWwucywgcmV0VmFsLnQsIHJldFZhbC51LCByZXRWYWwudiwgcmV0VmFsLncsICh1bnNpZ25lZCBsb25nKXJldFZhbC54LAorCQlyZXRWYWwueSwgcmV0VmFsLnosIHJldFZhbC5hYSwgcmV0VmFsLmJiLCByZXRWYWwuY2MsIHJldFZhbC5kZCwKKwkgICAgICAgcmV0VmFsLmVlLCByZXRWYWwuZmYsIHJldFZhbC5nZywgcmV0VmFsLmhoLCByZXRWYWwuaWksICh1bnNpZ25lZCBsb25nKXJldFZhbC5qaiwKKwkJcmV0VmFsLmtrLCByZXRWYWwubGwsIHJldFZhbC5tbSwgcmV0VmFsLm5uLCByZXRWYWwub28sIHJldFZhbC5wcCwKKwkgICAgICAgcmV0VmFsLnFxLCByZXRWYWwucnIsIHJldFZhbC5zcywgcmV0VmFsLnR0LCByZXRWYWwudXUsICh1bnNpZ25lZCBsb25nKXJldFZhbC52diwgcmV0VmFsLnd3LCByZXRWYWwueHgpOworCisJcmV0dXJuCXJldFZhbDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19sYXJnZV9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJdWludDhfdAkJdWk4XzEJPSAqKHVpbnQ4X3QqKWFyZ3NbMF07CisJaW50OF90CQlzaThfMQk9ICooaW50OF90KilhcmdzWzFdOworCXVpbnQxNl90CXVpMTZfMQk9ICoodWludDE2X3QqKWFyZ3NbMl07CisJaW50MTZfdAkJc2kxNl8xCT0gKihpbnQxNl90KilhcmdzWzNdOworCXVpbnQzMl90CXVpMzJfMQk9ICoodWludDMyX3QqKWFyZ3NbNF07CisJaW50MzJfdAkJc2kzMl8xCT0gKihpbnQzMl90KilhcmdzWzVdOworCXVpbnQ2NF90CXVpNjRfMQk9ICoodWludDY0X3QqKWFyZ3NbNl07CisJaW50NjRfdAkJc2k2NF8xCT0gKihpbnQ2NF90KilhcmdzWzddOworCWZsb2F0CQlmXzEJCT0gKihmbG9hdCopYXJnc1s4XTsKKwlkb3VibGUJCWRfMQkJPSAqKGRvdWJsZSopYXJnc1s5XTsKKwlsb25nIGRvdWJsZQlsZF8xCT0gKihsb25nIGRvdWJsZSopYXJnc1sxMF07CisJY2hhcioJCXBfMQkJPSAqKGNoYXIqKilhcmdzWzExXTsKKwl1aW50OF90CQl1aThfMgk9ICoodWludDhfdCopYXJnc1sxMl07CisJaW50OF90CQlzaThfMgk9ICooaW50OF90KilhcmdzWzEzXTsKKwl1aW50MTZfdAl1aTE2XzIJPSAqKHVpbnQxNl90KilhcmdzWzE0XTsKKwlpbnQxNl90CQlzaTE2XzIJPSAqKGludDE2X3QqKWFyZ3NbMTVdOworCXVpbnQzMl90CXVpMzJfMgk9ICoodWludDMyX3QqKWFyZ3NbMTZdOworCWludDMyX3QJCXNpMzJfMgk9ICooaW50MzJfdCopYXJnc1sxN107CisJdWludDY0X3QJdWk2NF8yCT0gKih1aW50NjRfdCopYXJnc1sxOF07CisJaW50NjRfdAkJc2k2NF8yCT0gKihpbnQ2NF90KilhcmdzWzE5XTsKKwlmbG9hdAkJZl8yCQk9ICooZmxvYXQqKWFyZ3NbMjBdOworCWRvdWJsZQkJZF8yCQk9ICooZG91YmxlKilhcmdzWzIxXTsKKwlsb25nIGRvdWJsZQlsZF8yCT0gKihsb25nIGRvdWJsZSopYXJnc1syMl07CisJY2hhcioJCXBfMgkJPSAqKGNoYXIqKilhcmdzWzIzXTsKKwl1aW50OF90CQl1aThfMwk9ICoodWludDhfdCopYXJnc1syNF07CisJaW50OF90CQlzaThfMwk9ICooaW50OF90KilhcmdzWzI1XTsKKwl1aW50MTZfdAl1aTE2XzMJPSAqKHVpbnQxNl90KilhcmdzWzI2XTsKKwlpbnQxNl90CQlzaTE2XzMJPSAqKGludDE2X3QqKWFyZ3NbMjddOworCXVpbnQzMl90CXVpMzJfMwk9ICoodWludDMyX3QqKWFyZ3NbMjhdOworCWludDMyX3QJCXNpMzJfMwk9ICooaW50MzJfdCopYXJnc1syOV07CisJdWludDY0X3QJdWk2NF8zCT0gKih1aW50NjRfdCopYXJnc1szMF07CisJaW50NjRfdAkJc2k2NF8zCT0gKihpbnQ2NF90KilhcmdzWzMxXTsKKwlmbG9hdAkJZl8zCQk9ICooZmxvYXQqKWFyZ3NbMzJdOworCWRvdWJsZQkJZF8zCQk9ICooZG91YmxlKilhcmdzWzMzXTsKKwlsb25nIGRvdWJsZQlsZF8zCT0gKihsb25nIGRvdWJsZSopYXJnc1szNF07CisJY2hhcioJCXBfMwkJPSAqKGNoYXIqKilhcmdzWzM1XTsKKwl1aW50OF90CQl1aThfNAk9ICoodWludDhfdCopYXJnc1szNl07CisJaW50OF90CQlzaThfNAk9ICooaW50OF90KilhcmdzWzM3XTsKKwl1aW50MTZfdAl1aTE2XzQJPSAqKHVpbnQxNl90KilhcmdzWzM4XTsKKwlpbnQxNl90CQlzaTE2XzQJPSAqKGludDE2X3QqKWFyZ3NbMzldOworCXVpbnQzMl90CXVpMzJfNAk9ICoodWludDMyX3QqKWFyZ3NbNDBdOworCWludDMyX3QJCXNpMzJfNAk9ICooaW50MzJfdCopYXJnc1s0MV07CisJdWludDY0X3QJdWk2NF80CT0gKih1aW50NjRfdCopYXJnc1s0Ml07CisJaW50NjRfdAkJc2k2NF80CT0gKihpbnQ2NF90KilhcmdzWzQzXTsKKwlmbG9hdAkJZl80CQk9ICooZmxvYXQqKWFyZ3NbNDRdOworCWRvdWJsZQkJZF80CQk9ICooZG91YmxlKilhcmdzWzQ1XTsKKwlsb25nIGRvdWJsZQlsZF80CT0gKihsb25nIGRvdWJsZSopYXJnc1s0Nl07CisJY2hhcioJCXBfNAkJPSAqKGNoYXIqKilhcmdzWzQ3XTsKKwl1aW50OF90CQl1aThfNQk9ICoodWludDhfdCopYXJnc1s0OF07CisJaW50OF90CQlzaThfNQk9ICooaW50OF90KilhcmdzWzQ5XTsKKworCSooQmlnU3RydWN0KilyZXNwID0gdGVzdF9sYXJnZV9mbigKKwkJdWk4XzEsIHNpOF8xLCB1aTE2XzEsIHNpMTZfMSwgdWkzMl8xLCBzaTMyXzEsIHVpNjRfMSwgc2k2NF8xLCBmXzEsIGRfMSwgbGRfMSwgcF8xLAorCQl1aThfMiwgc2k4XzIsIHVpMTZfMiwgc2kxNl8yLCB1aTMyXzIsIHNpMzJfMiwgdWk2NF8yLCBzaTY0XzIsIGZfMiwgZF8yLCBsZF8yLCBwXzIsCisJCXVpOF8zLCBzaThfMywgdWkxNl8zLCBzaTE2XzMsIHVpMzJfMywgc2kzMl8zLCB1aTY0XzMsIHNpNjRfMywgZl8zLCBkXzMsIGxkXzMsIHBfMywKKwkJdWk4XzQsIHNpOF80LCB1aTE2XzQsIHNpMTZfNCwgdWkzMl80LCBzaTMyXzQsIHVpNjRfNCwgc2k2NF80LCBmXzQsIGRfNCwgbGRfNCwgcF80LAorCQl1aThfNSwgc2k4XzUpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MgX19VTlVTRURfXywgY29uc3QgY2hhcioqIGFyZ3YgX19VTlVTRURfXykKK3sKKyAgICAgICAgdm9pZCAqY29kZTsKKwlmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworCisJZmZpX2NpZgkJY2lmOworCWZmaV90eXBlKglhcmdUeXBlc1s1MV07CisJdm9pZCoJCWFyZ1ZhbHVlc1s1MV07CisKKwlmZmlfdHlwZQlyZXRfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqCXN0X2ZpZWxkc1s1MV07CisJQmlnU3RydWN0CXJldFZhbDsKKworCW1lbXNldCAoJnJldFZhbCwgMCwgc2l6ZW9mKHJldFZhbCkpOworCisJcmV0X3N0cnVjdF90eXBlLnNpemUgPSAwOworCXJldF9zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworCXJldF9zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXJldF9zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IHN0X2ZpZWxkczsKKworCXN0X2ZpZWxkc1swXQk9IHN0X2ZpZWxkc1sxMl0JPSBzdF9maWVsZHNbMjRdCT0gc3RfZmllbGRzWzM2XQk9IHN0X2ZpZWxkc1s0OF0JPSAmZmZpX3R5cGVfdWludDg7CisJc3RfZmllbGRzWzFdCT0gc3RfZmllbGRzWzEzXQk9IHN0X2ZpZWxkc1syNV0JPSBzdF9maWVsZHNbMzddCT0gc3RfZmllbGRzWzQ5XQk9ICZmZmlfdHlwZV9zaW50ODsKKwlzdF9maWVsZHNbMl0JPSBzdF9maWVsZHNbMTRdCT0gc3RfZmllbGRzWzI2XQk9IHN0X2ZpZWxkc1szOF0JPSAmZmZpX3R5cGVfdWludDE2OworCXN0X2ZpZWxkc1szXQk9IHN0X2ZpZWxkc1sxNV0JPSBzdF9maWVsZHNbMjddCT0gc3RfZmllbGRzWzM5XQk9ICZmZmlfdHlwZV9zaW50MTY7CisJc3RfZmllbGRzWzRdCT0gc3RfZmllbGRzWzE2XQk9IHN0X2ZpZWxkc1syOF0JPSBzdF9maWVsZHNbNDBdCT0gJmZmaV90eXBlX3VpbnQzMjsKKwlzdF9maWVsZHNbNV0JPSBzdF9maWVsZHNbMTddCT0gc3RfZmllbGRzWzI5XQk9IHN0X2ZpZWxkc1s0MV0JPSAmZmZpX3R5cGVfc2ludDMyOworCXN0X2ZpZWxkc1s2XQk9IHN0X2ZpZWxkc1sxOF0JPSBzdF9maWVsZHNbMzBdCT0gc3RfZmllbGRzWzQyXQk9ICZmZmlfdHlwZV91aW50NjQ7CisJc3RfZmllbGRzWzddCT0gc3RfZmllbGRzWzE5XQk9IHN0X2ZpZWxkc1szMV0JPSBzdF9maWVsZHNbNDNdCT0gJmZmaV90eXBlX3NpbnQ2NDsKKwlzdF9maWVsZHNbOF0JPSBzdF9maWVsZHNbMjBdCT0gc3RfZmllbGRzWzMyXQk9IHN0X2ZpZWxkc1s0NF0JPSAmZmZpX3R5cGVfZmxvYXQ7CisJc3RfZmllbGRzWzldCT0gc3RfZmllbGRzWzIxXQk9IHN0X2ZpZWxkc1szM10JPSBzdF9maWVsZHNbNDVdCT0gJmZmaV90eXBlX2RvdWJsZTsKKwlzdF9maWVsZHNbMTBdCT0gc3RfZmllbGRzWzIyXQk9IHN0X2ZpZWxkc1szNF0JPSBzdF9maWVsZHNbNDZdCT0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisJc3RfZmllbGRzWzExXQk9IHN0X2ZpZWxkc1syM10JPSBzdF9maWVsZHNbMzVdCT0gc3RfZmllbGRzWzQ3XQk9ICZmZmlfdHlwZV9wb2ludGVyOworCisJc3RfZmllbGRzWzUwXSA9IE5VTEw7CisKKwl1aW50OF90CQl1aTgJCT0gMTsKKwlpbnQ4X3QJCXNpOAkJPSAyOworCXVpbnQxNl90CXVpMTYJPSAzOworCWludDE2X3QJCXNpMTYJPSA0OworCXVpbnQzMl90CXVpMzIJPSA1OworCWludDMyX3QJCXNpMzIJPSA2OworCXVpbnQ2NF90CXVpNjQJPSA3OworCWludDY0X3QJCXNpNjQJPSA4OworCWZsb2F0CQlmCQk9IDk7CisJZG91YmxlCQlkCQk9IDEwOworCWxvbmcgZG91YmxlCWxkCQk9IDExOworCWNoYXIqCQlwCQk9IChjaGFyKikweDEyMzQ1Njc4OworCisJYXJnVHlwZXNbMF0JCT0gYXJnVHlwZXNbMTJdCT0gYXJnVHlwZXNbMjRdCT0gYXJnVHlwZXNbMzZdCT0gYXJnVHlwZXNbNDhdCT0gJmZmaV90eXBlX3VpbnQ4OworCWFyZ1ZhbHVlc1swXQk9IGFyZ1ZhbHVlc1sxMl0JPSBhcmdWYWx1ZXNbMjRdCT0gYXJnVmFsdWVzWzM2XQk9IGFyZ1ZhbHVlc1s0OF0JPSAmdWk4OworCWFyZ1R5cGVzWzFdCQk9IGFyZ1R5cGVzWzEzXQk9IGFyZ1R5cGVzWzI1XQk9IGFyZ1R5cGVzWzM3XQk9IGFyZ1R5cGVzWzQ5XQk9ICZmZmlfdHlwZV9zaW50ODsKKwlhcmdWYWx1ZXNbMV0JPSBhcmdWYWx1ZXNbMTNdCT0gYXJnVmFsdWVzWzI1XQk9IGFyZ1ZhbHVlc1szN10JPSBhcmdWYWx1ZXNbNDldCT0gJnNpODsKKwlhcmdUeXBlc1syXQkJPSBhcmdUeXBlc1sxNF0JPSBhcmdUeXBlc1syNl0JPSBhcmdUeXBlc1szOF0JPSAmZmZpX3R5cGVfdWludDE2OworCWFyZ1ZhbHVlc1syXQk9IGFyZ1ZhbHVlc1sxNF0JPSBhcmdWYWx1ZXNbMjZdCT0gYXJnVmFsdWVzWzM4XQk9ICZ1aTE2OworCWFyZ1R5cGVzWzNdCQk9IGFyZ1R5cGVzWzE1XQk9IGFyZ1R5cGVzWzI3XQk9IGFyZ1R5cGVzWzM5XQk9ICZmZmlfdHlwZV9zaW50MTY7CisJYXJnVmFsdWVzWzNdCT0gYXJnVmFsdWVzWzE1XQk9IGFyZ1ZhbHVlc1syN10JPSBhcmdWYWx1ZXNbMzldCT0gJnNpMTY7CisJYXJnVHlwZXNbNF0JCT0gYXJnVHlwZXNbMTZdCT0gYXJnVHlwZXNbMjhdCT0gYXJnVHlwZXNbNDBdCT0gJmZmaV90eXBlX3VpbnQzMjsKKwlhcmdWYWx1ZXNbNF0JPSBhcmdWYWx1ZXNbMTZdCT0gYXJnVmFsdWVzWzI4XQk9IGFyZ1ZhbHVlc1s0MF0JPSAmdWkzMjsKKwlhcmdUeXBlc1s1XQkJPSBhcmdUeXBlc1sxN10JPSBhcmdUeXBlc1syOV0JPSBhcmdUeXBlc1s0MV0JPSAmZmZpX3R5cGVfc2ludDMyOworCWFyZ1ZhbHVlc1s1XQk9IGFyZ1ZhbHVlc1sxN10JPSBhcmdWYWx1ZXNbMjldCT0gYXJnVmFsdWVzWzQxXQk9ICZzaTMyOworCWFyZ1R5cGVzWzZdCQk9IGFyZ1R5cGVzWzE4XQk9IGFyZ1R5cGVzWzMwXQk9IGFyZ1R5cGVzWzQyXQk9ICZmZmlfdHlwZV91aW50NjQ7CisJYXJnVmFsdWVzWzZdCT0gYXJnVmFsdWVzWzE4XQk9IGFyZ1ZhbHVlc1szMF0JPSBhcmdWYWx1ZXNbNDJdCT0gJnVpNjQ7CisJYXJnVHlwZXNbN10JCT0gYXJnVHlwZXNbMTldCT0gYXJnVHlwZXNbMzFdCT0gYXJnVHlwZXNbNDNdCT0gJmZmaV90eXBlX3NpbnQ2NDsKKwlhcmdWYWx1ZXNbN10JPSBhcmdWYWx1ZXNbMTldCT0gYXJnVmFsdWVzWzMxXQk9IGFyZ1ZhbHVlc1s0M10JPSAmc2k2NDsKKwlhcmdUeXBlc1s4XQkJPSBhcmdUeXBlc1syMF0JPSBhcmdUeXBlc1szMl0JPSBhcmdUeXBlc1s0NF0JPSAmZmZpX3R5cGVfZmxvYXQ7CisJYXJnVmFsdWVzWzhdCT0gYXJnVmFsdWVzWzIwXQk9IGFyZ1ZhbHVlc1szMl0JPSBhcmdWYWx1ZXNbNDRdCT0gJmY7CisJYXJnVHlwZXNbOV0JCT0gYXJnVHlwZXNbMjFdCT0gYXJnVHlwZXNbMzNdCT0gYXJnVHlwZXNbNDVdCT0gJmZmaV90eXBlX2RvdWJsZTsKKwlhcmdWYWx1ZXNbOV0JPSBhcmdWYWx1ZXNbMjFdCT0gYXJnVmFsdWVzWzMzXQk9IGFyZ1ZhbHVlc1s0NV0JPSAmZDsKKwlhcmdUeXBlc1sxMF0JPSBhcmdUeXBlc1syMl0JPSBhcmdUeXBlc1szNF0JPSBhcmdUeXBlc1s0Nl0JPSAmZmZpX3R5cGVfbG9uZ2RvdWJsZTsKKwlhcmdWYWx1ZXNbMTBdCT0gYXJnVmFsdWVzWzIyXQk9IGFyZ1ZhbHVlc1szNF0JPSBhcmdWYWx1ZXNbNDZdCT0gJmxkOworCWFyZ1R5cGVzWzExXQk9IGFyZ1R5cGVzWzIzXQk9IGFyZ1R5cGVzWzM1XQk9IGFyZ1R5cGVzWzQ3XQk9ICZmZmlfdHlwZV9wb2ludGVyOworCWFyZ1ZhbHVlc1sxMV0JPSBhcmdWYWx1ZXNbMjNdCT0gYXJnVmFsdWVzWzM1XQk9IGFyZ1ZhbHVlc1s0N10JPSAmcDsKKworCWFyZ1R5cGVzWzUwXQk9IE5VTEw7CisJYXJnVmFsdWVzWzUwXQk9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA1MCwgJnJldF9zdHJ1Y3RfdHlwZSwgYXJnVHlwZXMpID09IEZGSV9PSyk7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4odGVzdF9sYXJnZV9mbiksICZyZXRWYWwsIGFyZ1ZhbHVlcyk7CisJLy8geyBkZy1vdXRwdXQgIjEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyOiAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMHgxMjM0NTY3OSAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDB4MTIzNDU2N2EgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMHgxMjM0NTY3YiA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMHgxMjM0NTY3YyA2IDciIH0KKwlwcmludGYoInJlczogJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggIgorCQkiJWhodSAlaGhkICVodSAlaGQgJXUgJWQgJSIgUFJJdTY0ICIgJSIgUFJJZDY0ICIgJS4wZiAlLjBmICUuMExmICUjbHggJWhodSAlaGhkXG4iLAorCQlyZXRWYWwuYSwgcmV0VmFsLmIsIHJldFZhbC5jLCByZXRWYWwuZCwgcmV0VmFsLmUsIHJldFZhbC5mLAorCSAgICAgICByZXRWYWwuZywgcmV0VmFsLmgsIHJldFZhbC5pLCByZXRWYWwuaiwgcmV0VmFsLmssICh1bnNpZ25lZCBsb25nKXJldFZhbC5sLAorCQlyZXRWYWwubSwgcmV0VmFsLm4sIHJldFZhbC5vLCByZXRWYWwucCwgcmV0VmFsLnEsIHJldFZhbC5yLAorCSAgICAgICByZXRWYWwucywgcmV0VmFsLnQsIHJldFZhbC51LCByZXRWYWwudiwgcmV0VmFsLncsICh1bnNpZ25lZCBsb25nKXJldFZhbC54LAorCQlyZXRWYWwueSwgcmV0VmFsLnosIHJldFZhbC5hYSwgcmV0VmFsLmJiLCByZXRWYWwuY2MsIHJldFZhbC5kZCwKKwkgICAgICAgcmV0VmFsLmVlLCByZXRWYWwuZmYsIHJldFZhbC5nZywgcmV0VmFsLmhoLCByZXRWYWwuaWksICh1bnNpZ25lZCBsb25nKXJldFZhbC5qaiwKKwkJcmV0VmFsLmtrLCByZXRWYWwubGwsIHJldFZhbC5tbSwgcmV0VmFsLm5uLCByZXRWYWwub28sIHJldFZhbC5wcCwKKwkgICAgICAgcmV0VmFsLnFxLCByZXRWYWwucnIsIHJldFZhbC5zcywgcmV0VmFsLnR0LCByZXRWYWwudXUsICh1bnNpZ25lZCBsb25nKXJldFZhbC52diwgcmV0VmFsLnd3LCByZXRWYWwueHgpOworCS8vIHsgZGctb3V0cHV0ICJcbnJlczogMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDB4MTIzNDU2NzkgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAweDEyMzQ1NjdhIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDB4MTIzNDU2N2IgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDB4MTIzNDU2N2MgNiA3IiB9CisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19sYXJnZV9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJldFZhbAk9ICgoQmlnU3RydWN0KCopKAorCQl1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90LCBpbnQxNl90LCB1aW50MzJfdCwgaW50MzJfdCwgdWludDY0X3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlLCBjaGFyKiwKKwkJdWludDhfdCwgaW50OF90LCB1aW50MTZfdCwgaW50MTZfdCwgdWludDMyX3QsIGludDMyX3QsIHVpbnQ2NF90LCBpbnQ2NF90LCBmbG9hdCwgZG91YmxlLCBsb25nIGRvdWJsZSwgY2hhciosCisJCXVpbnQ4X3QsIGludDhfdCwgdWludDE2X3QsIGludDE2X3QsIHVpbnQzMl90LCBpbnQzMl90LCB1aW50NjRfdCwgaW50NjRfdCwgZmxvYXQsIGRvdWJsZSwgbG9uZyBkb3VibGUsIGNoYXIqLAorCQl1aW50OF90LCBpbnQ4X3QsIHVpbnQxNl90LCBpbnQxNl90LCB1aW50MzJfdCwgaW50MzJfdCwgdWludDY0X3QsIGludDY0X3QsIGZsb2F0LCBkb3VibGUsIGxvbmcgZG91YmxlLCBjaGFyKiwKKwkJdWludDhfdCwgaW50OF90KSkoY29kZSkpKAorCQl1aTgsIHNpOCwgdWkxNiwgc2kxNiwgdWkzMiwgc2kzMiwgdWk2NCwgc2k2NCwgZiwgZCwgbGQsIHAsCisJCXVpOCwgc2k4LCB1aTE2LCBzaTE2LCB1aTMyLCBzaTMyLCB1aTY0LCBzaTY0LCBmLCBkLCBsZCwgcCwKKwkJdWk4LCBzaTgsIHVpMTYsIHNpMTYsIHVpMzIsIHNpMzIsIHVpNjQsIHNpNjQsIGYsIGQsIGxkLCBwLAorCQl1aTgsIHNpOCwgdWkxNiwgc2kxNiwgdWkzMiwgc2kzMiwgdWk2NCwgc2k2NCwgZiwgZCwgbGQsIHAsCisJCXVpOCwgc2k4KTsKKwkvLyB7IGRnLW91dHB1dCAiXG4xIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDB4MTIzNDU2NzggMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMHgxMjM0NTY3OCAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAweDEyMzQ1Njc4IDEgMjogMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDB4MTIzNDU2NzkgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAweDEyMzQ1NjdhIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDB4MTIzNDU2N2IgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDB4MTIzNDU2N2MgNiA3IiB9CisJcHJpbnRmKCJyZXM6ICVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICIKKwkJIiVoaHUgJWhoZCAlaHUgJWhkICV1ICVkICUiIFBSSXU2NCAiICUiIFBSSWQ2NCAiICUuMGYgJS4wZiAlLjBMZiAlI2x4ICVoaHUgJWhoZFxuIiwKKwkJcmV0VmFsLmEsIHJldFZhbC5iLCByZXRWYWwuYywgcmV0VmFsLmQsIHJldFZhbC5lLCByZXRWYWwuZiwKKwkgICAgICAgcmV0VmFsLmcsIHJldFZhbC5oLCByZXRWYWwuaSwgcmV0VmFsLmosIHJldFZhbC5rLCAodW5zaWduZWQgbG9uZylyZXRWYWwubCwKKwkJcmV0VmFsLm0sIHJldFZhbC5uLCByZXRWYWwubywgcmV0VmFsLnAsIHJldFZhbC5xLCByZXRWYWwuciwKKwkgICAgICAgcmV0VmFsLnMsIHJldFZhbC50LCByZXRWYWwudSwgcmV0VmFsLnYsIHJldFZhbC53LCAodW5zaWduZWQgbG9uZylyZXRWYWwueCwKKwkJcmV0VmFsLnksIHJldFZhbC56LCByZXRWYWwuYWEsIHJldFZhbC5iYiwgcmV0VmFsLmNjLCByZXRWYWwuZGQsCisJICAgICAgIHJldFZhbC5lZSwgcmV0VmFsLmZmLCByZXRWYWwuZ2csIHJldFZhbC5oaCwgcmV0VmFsLmlpLCAodW5zaWduZWQgbG9uZylyZXRWYWwuamosCisJCXJldFZhbC5raywgcmV0VmFsLmxsLCByZXRWYWwubW0sIHJldFZhbC5ubiwgcmV0VmFsLm9vLCByZXRWYWwucHAsCisJICAgICAgIHJldFZhbC5xcSwgcmV0VmFsLnJyLCByZXRWYWwuc3MsIHJldFZhbC50dCwgcmV0VmFsLnV1LCAodW5zaWduZWQgbG9uZylyZXRWYWwudnYsIHJldFZhbC53dywgcmV0VmFsLnh4KTsKKwkvLyB7IGRnLW91dHB1dCAiXG5yZXM6IDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAweDEyMzQ1Njc5IDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMHgxMjM0NTY3YSA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAweDEyMzQ1NjdiIDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAweDEyMzQ1NjdjIDYgNyIgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2OWJhOQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYwpAQCAtMCwwICsxLDY5IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LCB3aXRoIG1hbnkgYXJndW1lbnRzCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKK3N0YXRpYyBmbG9hdCBtYW55KGZsb2F0IGYxLAorCQkgIGZsb2F0IGYyLAorCQkgIGZsb2F0IGYzLAorCQkgIGZsb2F0IGY0LAorCQkgIGZsb2F0IGY1LAorCQkgIGZsb2F0IGY2LAorCQkgIGZsb2F0IGY3LAorCQkgIGZsb2F0IGY4LAorCQkgIGZsb2F0IGY5LAorCQkgIGZsb2F0IGYxMCwKKwkJICBmbG9hdCBmMTEsCisJCSAgZmxvYXQgZjEyLAorCQkgIGZsb2F0IGYxMykKK3sKKyNpZiAwCisgIHByaW50ZigiJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWYgJWZcbiIsCisJIChkb3VibGUpIGYxLCAoZG91YmxlKSBmMiwgKGRvdWJsZSkgZjMsIChkb3VibGUpIGY0LCAoZG91YmxlKSBmNSwgCisJIChkb3VibGUpIGY2LCAoZG91YmxlKSBmNywgKGRvdWJsZSkgZjgsIChkb3VibGUpIGY5LCAoZG91YmxlKSBmMTAsCisJIChkb3VibGUpIGYxMSwgKGRvdWJsZSkgZjEyLCAoZG91YmxlKSBmMTMpOworI2VuZGlmCisKKyAgcmV0dXJuICgoZjEvZjIrZjMvZjQrZjUvZjYrZjcvZjgrZjkvZjEwK2YxMS9mMTIpICogZjEzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1sxM107CisgIHZvaWQgKnZhbHVlc1sxM107CisgIGZsb2F0IGZhWzEzXTsKKyAgZmxvYXQgZiwgZmY7CisgIGludCBpOworCisgIGZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQorICAgIHsKKyAgICAgIGFyZ3NbaV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICB2YWx1ZXNbaV0gPSAmZmFbaV07CisgICAgICBmYVtpXSA9IChmbG9hdCkgaTsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxMywgCisJCSAgICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obWFueSksICZmLCB2YWx1ZXMpOworCisgICAgZmYgPSAgbWFueShmYVswXSwgZmFbMV0sCisJICAgICAgIGZhWzJdLCBmYVszXSwKKwkgICAgICAgZmFbNF0sIGZhWzVdLAorCSAgICAgICBmYVs2XSwgZmFbN10sCisJICAgICAgIGZhWzhdLCBmYVs5XSwKKwkgICAgICAgZmFbMTBdLGZhWzExXSxmYVsxMl0pOworCisgICAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQorICAgICAgZXhpdCgwKTsKKyAgICBlbHNlCisgICAgICBhYm9ydCgpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMjYzMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMKQEAgLTAsMCArMSw2MyBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgbWFueSBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCisKKyNpbmNsdWRlICJmZml0ZXN0LmgiCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworc3RhdGljIGZsb2F0IF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSBzdGRjYWxsX21hbnkoZmxvYXQgZjEsCisJCQkJCQkgICBmbG9hdCBmMiwKKwkJCQkJCSAgIGZsb2F0IGYzLAorCQkJCQkJICAgZmxvYXQgZjQsCisJCQkJCQkgICBmbG9hdCBmNSwKKwkJCQkJCSAgIGZsb2F0IGY2LAorCQkJCQkJICAgZmxvYXQgZjcsCisJCQkJCQkgICBmbG9hdCBmOCwKKwkJCQkJCSAgIGZsb2F0IGY5LAorCQkJCQkJICAgZmxvYXQgZjEwLAorCQkJCQkJICAgZmxvYXQgZjExLAorCQkJCQkJICAgZmxvYXQgZjEyLAorCQkJCQkJICAgZmxvYXQgZjEzKQoreworICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzWzEzXTsKKyAgdm9pZCAqdmFsdWVzWzEzXTsKKyAgZmxvYXQgZmFbMTNdOworICBmbG9hdCBmLCBmZjsKKyAgdW5zaWduZWQgbG9uZyB1bDsKKworICBmb3IgKHVsID0gMDsgdWwgPCAxMzsgdWwrKykKKyAgICB7CisgICAgICBhcmdzW3VsXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgICAgIHZhbHVlc1t1bF0gPSAmZmFbdWxdOworCWZhW3VsXSA9IChmbG9hdCkgdWw7CisgICAgfQorCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDEzLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKworICBmZiA9ICBzdGRjYWxsX21hbnkoZmFbMF0sIGZhWzFdLAorCQkgICAgIGZhWzJdLCBmYVszXSwKKwkJICAgICBmYVs0XSwgZmFbNV0sCisJCSAgICAgZmFbNl0sIGZhWzddLAorCQkgICAgIGZhWzhdLCBmYVs5XSwKKwkJICAgICBmYVsxMF0sIGZhWzExXSwgZmFbMTJdKTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RkY2FsbF9tYW55KSwgJmYsIHZhbHVlcyk7CisKKyAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQorICAgIHByaW50Zigic3RkY2FsbCBtYW55IGFyZyB0ZXN0cyBvayFcbiIpOworICBlbHNlCisgICAgQ0hFQ0soMCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNjgxMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYwpAQCAtMCwwICsxLDUzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgdGhhdCBuZWdhdGl2ZSBpbnRlZ2VycyBhcmUgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgLU8yIH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGludCBjaGVja2luZyhpbnQgYSwgc2hvcnQgYiwgc2lnbmVkIGNoYXIgYykKK3sKKworICByZXR1cm4gKGEgPCAwICYmIGIgPCAwICYmIGMgPCAwKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICBzaWduZWQgaW50IHNpOworICBzaWduZWQgc2hvcnQgc3M7CisgIHNpZ25lZCBjaGFyIHNjOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJnNpOworICBhcmdzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgdmFsdWVzWzFdID0gJnNzOworICBhcmdzWzJdID0gJmZmaV90eXBlX3NjaGFyOworICB2YWx1ZXNbMl0gPSAmc2M7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgc2kgPSAtNjsKKyAgc3MgPSAtMTI7CisgIHNjID0gLTE7CisKKyAgY2hlY2tpbmcgKHNpLCBzcywgc2MpOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjaGVja2luZyksICZyaW50LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVkIHZzICVkXG4iLCAoaW50KXJpbnQsIGNoZWNraW5nIChzaSwgc3MsIHNjKSk7CisKKyAgQ0hFQ0socmludCAhPSAwKTsKKworICBleGl0ICgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWE1MjdlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jCkBAIC0wLDAgKzEsMTUyIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSB7CisgIGRvdWJsZSBhOworICBmbG9hdCBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xNmJ5dGUxOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgeworICBpbnQgaWk7CisgIGRvdWJsZSBkZDsKKyAgZmxvYXQgZmY7Cit9IGNsc19zdHJ1Y3RfMTZieXRlMjsKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGNsc19zdHJ1Y3RfMTZieXRlMSBkOworICBjbHNfc3RydWN0XzE2Ynl0ZTIgZTsKK30gY2xzX3N0cnVjdF9jb21iaW5lZDsKKworY2xzX3N0cnVjdF9jb21iaW5lZCBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjAsCisJCQkgICAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMSwKKwkJCSAgICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBiMikKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgcmVzdWx0OworCisgIHJlc3VsdC5kLmEgPSBiMC5hICsgYjEuZGQgKyBiMi5kLmE7CisgIHJlc3VsdC5kLmIgPSBiMC5iICsgYjEuZmYgKyBiMi5kLmI7CisgIHJlc3VsdC5kLmMgPSBiMC5jICsgYjEuaWkgKyBiMi5kLmM7CisgIHJlc3VsdC5lLmlpID0gYjAuYyArIGIxLmlpICsgYjIuZS5paTsKKyAgcmVzdWx0LmUuZGQgPSBiMC5hICsgYjEuZGQgKyBiMi5lLmRkOworICByZXN1bHQuZS5mZiA9IGIwLmIgKyBiMS5mZiArIGIyLmUuZmY7CisKKyAgcHJpbnRmKCIlZyAlZyAlZCAlZCAlZyAlZyAlZyAlZyAlZCAlZCAlZyAlZzogJWcgJWcgJWQgJWQgJWcgJWdcbiIsCisJIGIwLmEsIGIwLmIsIGIwLmMsCisJIGIxLmlpLCBiMS5kZCwgYjEuZmYsCisJIGIyLmQuYSwgYjIuZC5iLCBiMi5kLmMsCisJIGIyLmUuaWksIGIyLmUuZGQsIGIyLmUuZmYsCisJIHJlc3VsdC5kLmEsIHJlc3VsdC5kLmIsIHJlc3VsdC5kLmMsCisJIHJlc3VsdC5lLmlpLCByZXN1bHQuZS5kZCwgcmVzdWx0LmUuZmYpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2NvbWJpbmVkX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKwkJICAgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjA7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgYjE7CisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGIyOworCisgIGIwID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUyKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCopKGFyZ3NbMl0pOworCisKKyAgKihjbHNfc3RydWN0X2NvbWJpbmVkKilyZXNwID0gY2xzX3N0cnVjdF9jb21iaW5lZF9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGVfZGJsID0geyA5LjAsIDIuMCwgNn07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgZl9kYmwgPSB7IDEsIDIuMCwgMy4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgZ19kYmwgPSB7ezQuMCwgNS4wLCA2fSwKKwkJCQkgICAgICB7MywgMS4wLCA4LjB9fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9zaW50OworICBjbHNfc3RydWN0X2ZpZWxkc1szXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzNdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczJbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczJbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTIsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfY29tYmluZWRfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiOSAyIDYgMSAyIDMgNCA1IDYgMyAxIDg6IDE1IDEwIDEzIDEwIDEyIDEzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLmQuYSA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZC5hKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZC5iKSk7CisgIENIRUNLKCByZXNfZGJsLmQuYyA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZC5jKSk7CisgIENIRUNLKCByZXNfZGJsLmUuaWkgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmUuaWkpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5kZCA9PSAoZV9kYmwuYSArIGZfZGJsLmRkICsgZ19kYmwuZS5kZCkpOworICBDSEVDSyggcmVzX2RibC5lLmZmID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5lLmZmKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0X2NvbWJpbmVkX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKGNsc19zdHJ1Y3RfY29tYmluZWQoKikoY2xzX3N0cnVjdF8xNmJ5dGUxLAorCQkJCSAgICAgY2xzX3N0cnVjdF8xNmJ5dGUyLAorCQkJCSAgICAgY2xzX3N0cnVjdF9jb21iaW5lZCkpCisJICAgICAoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG45IDIgNiAxIDIgMyA0IDUgNiAzIDEgODogMTUgMTAgMTMgMTAgMTIgMTMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwuZC5hID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5kLmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5iID09IChlX2RibC5iICsgZl9kYmwuZmYgKyBnX2RibC5kLmIpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZC5jID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5kLmMpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5paSA9PSAoZV9kYmwuYyArIGZfZGJsLmlpICsgZ19kYmwuZS5paSkpOworICBDSEVDSyggcmVzX2RibC5lLmRkID09IChlX2RibC5hICsgZl9kYmwuZGQgKyBnX2RibC5lLmRkKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZmYgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmUuZmYpKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOWY1MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jCkBAIC0wLDAgKzEsMTYxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA4MjgJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSB7CisgIGRvdWJsZSBhOworICBmbG9hdCBiOworICBpbnQgYzsKK30gY2xzX3N0cnVjdF8xNmJ5dGUxOworCit0eXBlZGVmIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgeworICBpbnQgaWk7CisgIGRvdWJsZSBkZDsKKyAgZmxvYXQgZmY7Cit9IGNsc19zdHJ1Y3RfMTZieXRlMjsKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGNsc19zdHJ1Y3RfMTZieXRlMSBkOworICBjbHNfc3RydWN0XzE2Ynl0ZTIgZTsKK30gY2xzX3N0cnVjdF9jb21iaW5lZDsKKworY2xzX3N0cnVjdF9jb21iaW5lZCBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjAsCisJCQkJCSAgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgYjEsCisJCQkJCSAgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGIyLAorCQkJCQkgICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGIzKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXN1bHQ7CisKKyAgcmVzdWx0LmQuYSA9IGIwLmEgKyBiMS5kZCArIGIyLmQuYTsKKyAgcmVzdWx0LmQuYiA9IGIwLmIgKyBiMS5mZiArIGIyLmQuYjsKKyAgcmVzdWx0LmQuYyA9IGIwLmMgKyBiMS5paSArIGIyLmQuYzsKKyAgcmVzdWx0LmUuaWkgPSBiMC5jICsgYjEuaWkgKyBiMi5lLmlpOworICByZXN1bHQuZS5kZCA9IGIwLmEgKyBiMS5kZCArIGIyLmUuZGQ7CisgIHJlc3VsdC5lLmZmID0gYjAuYiArIGIxLmZmICsgYjIuZS5mZjsKKworICBwcmludGYoIiVnICVnICVkICVkICVnICVnICVnICVnICVkICVkICVnICVnICVnICVnICVkOiAlZyAlZyAlZCAlZCAlZyAlZ1xuIiwKKwkgYjAuYSwgYjAuYiwgYjAuYywKKwkgYjEuaWksIGIxLmRkLCBiMS5mZiwKKwkgYjIuZC5hLCBiMi5kLmIsIGIyLmQuYywKKwkgYjIuZS5paSwgYjIuZS5kZCwgYjIuZS5mZiwKKwkgYjMuYSwgYjMuYiwgYjMuYywKKwkgcmVzdWx0LmQuYSwgcmVzdWx0LmQuYiwgcmVzdWx0LmQuYywKKwkgcmVzdWx0LmUuaWksIHJlc3VsdC5lLmRkLCByZXN1bHQuZS5mZik7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK2Nsc19zdHJ1Y3RfY29tYmluZWRfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorCQkgICAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBiMDsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMiBiMTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgYjI7CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEgYjM7CisKKyAgYjAgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkKikoYXJnc1syXSk7CisgIGIzID0gKihzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxKikoYXJnc1szXSk7CisKKworICAqKGNsc19zdHJ1Y3RfY29tYmluZWQqKXJlc3AgPSBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKGIwLCBiMSwgYjIsIGIzKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs1XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzVdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzVdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgY2xzX3N0cnVjdF8xNmJ5dGUxIGVfZGJsID0geyA5LjAsIDIuMCwgNn07CisgIHN0cnVjdCBjbHNfc3RydWN0XzE2Ynl0ZTIgZl9kYmwgPSB7IDEsIDIuMCwgMy4wfTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQgZ19kYmwgPSB7ezQuMCwgNS4wLCA2fSwKKwkJCQkgICAgICB7MywgMS4wLCA4LjB9fTsKKyAgc3RydWN0IGNsc19zdHJ1Y3RfMTZieXRlMSBoX2RibCA9IHsgMy4wLCAyLjAsIDR9OworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX3NpbnQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzNdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczFbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZTIsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9ICZoX2RibDsKKyAgYXJnc19kYmxbNF0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjkgMiA2IDEgMiAzIDQgNSA2IDMgMSA4IDMgMiA0OiAxNSAxMCAxMyAxMCAxMiAxMyIgfSAqLworICBDSEVDSyggcmVzX2RibC5kLmEgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmQuYSkpOworICBDSEVDSyggcmVzX2RibC5kLmIgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmQuYikpOworICBDSEVDSyggcmVzX2RibC5kLmMgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmQuYykpOworICBDSEVDSyggcmVzX2RibC5lLmlpID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5lLmlpKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZGQgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmUuZGQpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5mZiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZS5mZikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF9jb21iaW5lZF9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChjbHNfc3RydWN0X2NvbWJpbmVkKCopKGNsc19zdHJ1Y3RfMTZieXRlMSwKKwkJCQkgICAgIGNsc19zdHJ1Y3RfMTZieXRlMiwKKwkJCQkgICAgIGNsc19zdHJ1Y3RfY29tYmluZWQsCisJCQkJICAgICBjbHNfc3RydWN0XzE2Ynl0ZTEpKQorCSAgICAgKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjkgMiA2IDEgMiAzIDQgNSA2IDMgMSA4IDMgMiA0OiAxNSAxMCAxMyAxMCAxMiAxMyIgfSAqLworICBDSEVDSyggcmVzX2RibC5kLmEgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmQuYSkpOworICBDSEVDSyggcmVzX2RibC5kLmIgPT0gKGVfZGJsLmIgKyBmX2RibC5mZiArIGdfZGJsLmQuYikpOworICBDSEVDSyggcmVzX2RibC5kLmMgPT0gKGVfZGJsLmMgKyBmX2RibC5paSArIGdfZGJsLmQuYykpOworICBDSEVDSyggcmVzX2RibC5lLmlpID09IChlX2RibC5jICsgZl9kYmwuaWkgKyBnX2RibC5lLmlpKSk7CisgIENIRUNLKCByZXNfZGJsLmUuZGQgPT0gKGVfZGJsLmEgKyBmX2RibC5kZCArIGdfZGJsLmUuZGQpKTsKKyAgQ0hFQ0soIHJlc19kYmwuZS5mZiA9PSAoZV9kYmwuYiArIGZfZGJsLmZmICsgZ19kYmwuZS5mZikpOworICAvLyAgQ0hFQ0soIDEgPT0gMCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2YTcxOGIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYwpAQCAtMCwwICsxLDEzMyBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICB1bnNpZ25lZCBjaGFyIHk7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGludCB6OworfSBCOworCit0eXBlZGVmIHN0cnVjdCBDIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gQzsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMsIHN0cnVjdCBDIGI0KQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmEgKyBiMy56ICsgYjQuZDsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55ICsgYjQuZTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iICsgYjQuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LCBiMy56LCAoaW50KWI0LmQsIGI0LmUsCisJIChpbnQpcmVzdWx0LnguYSwgcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworICBzdHJ1Y3QgQyBiMjsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgQyopKGFyZ3NbMl0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNF07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMlszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxLCBjbHNfc3RydWN0X3R5cGUyOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s0XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgY2xzX3N0cnVjdF90eXBlMi5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTIuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczI7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDFMTCwgN307CisgIHN0cnVjdCBCIGZfZGJsID0geyA5OSwgezEyTEwgLCAxMjd9LCAyNTV9OworICBzdHJ1Y3QgQyBnX2RibCA9IHsgMkxMLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX3VpbnQ2NDsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9ICZmZmlfdHlwZV91aW50OworICBjbHNfc3RydWN0X2ZpZWxkczFbM10gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OSAyNTUgMiA5OiAyNzAgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBmX2RibC56ICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIsIEMpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTkgMjU1IDIgOTogMjcwIDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZl9kYmwueiArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUxNTg0YwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwMzA5MTEJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICB1bnNpZ25lZCBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKworQiBCX2ZuKHN0cnVjdCBBIGIwLCBzdHJ1Y3QgQiBiMSkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMC5hICsgYjEueC5hOworICByZXN1bHQueC5iID0gYjAuYiArIGIxLnguYiArIGIxLnk7CisgIHJlc3VsdC55ID0gYjAuYiArIGIxLnguYjsKKworICBwcmludGYoIiVsdSAlZCAlbHUgJWQgJWQ6ICVsdSAlZCAlZFxuIiwgYjAuYSwgYjAuYiwgYjEueC5hLCBiMS54LmIsIGIxLnksCisJIHJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyICwgMTI3fSwgOTl9OworCisgIHN0cnVjdCBCIHJlc19kYmw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCKSkoY29kZSkpKGVfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFhODUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYwpAQCAtMCwwICsxLDExMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDkxMQkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK0IgQl9mbihzdHJ1Y3QgQSBiMCwgc3RydWN0IEIgYjEpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjAuYSArIGIxLnguYTsKKyAgcmVzdWx0LnguYiA9IGIwLmIgKyBiMS54LmIgKyBiMS55OworICByZXN1bHQueSA9IGIwLmIgKyBiMS54LmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjAuYSwgYjAuYiwKKwkgKGludCliMS54LmEsIGIxLnguYiwgYjEueSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTE7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMUxMLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyTEwgLCAxMjd9LCA5OX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGU0OTFlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYwpAQCAtMCwwICsxLDExMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlQUiAyNTYzMC4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMykKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnk7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLjAsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZTM1MzcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgbG9uZyBkb3VibGUgYTsKKyAgdW5zaWduZWQgY2hhciBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMykKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnk7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYjsKKworICBwcmludGYoIiVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgKGludCliMi5hLCBiMi5iLAorCSAoaW50KWIzLnguYSwgYjMueC5iLCBiMy55LAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMTsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbM107CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxLjAsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTIuMCAsIDEyN30sIDk5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2xvbmdkb3VibGU7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIpKShjb2RlKSkoZV9kYmwsIGZfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OTogMTMgMjMzIDEzNCIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMmIyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jCkBAIC0wLDAgKzEsMTMxIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCVBSIDI1NjMwLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIGRvdWJsZSBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICBsb25nIGQ7CisgIHVuc2lnbmVkIGNoYXIgZTsKK30gQzsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMsIHN0cnVjdCBDIGI0KQoreworICBzdHJ1Y3QgQiByZXN1bHQ7CisKKyAgcmVzdWx0LnguYSA9IGIyLmEgKyBiMy54LmEgKyBiNC5kOworICByZXN1bHQueC5iID0gYjIuYiArIGIzLnguYiArIGIzLnkgKyBiNC5lOworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmIgKyBiNC5lOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkICVkICVkXG4iLCAoaW50KWIyLmEsIGIyLmIsCisJIChpbnQpYjMueC5hLCBiMy54LmIsIGIzLnksIChpbnQpYjQuZCwgYjQuZSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisgIHN0cnVjdCBDIGIyOworCisgIGIwID0gKihzdHJ1Y3QgQSopKGFyZ3NbMF0pOworICBiMSA9ICooc3RydWN0IEIqKShhcmdzWzFdKTsKKyAgYjIgPSAqKHN0cnVjdCBDKikoYXJnc1syXSk7CisKKyAgKihCKilyZXNwID0gQl9mbihiMCwgYjEsIGIyKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFs0XTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMyWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTEsIGNsc19zdHJ1Y3RfdHlwZTI7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzRdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBjbHNfc3RydWN0X3R5cGUyLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMi5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMjsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMS4wLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyLjAgLCAxMjd9LCA5OX07CisgIHN0cnVjdCBDIGdfZGJsID0geyAyLCA5fTsKKworICBzdHJ1Y3QgQiByZXNfZGJsOworCisgIGNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzJdID0gTlVMTDsKKworICBjbHNfc3RydWN0X2ZpZWxkczFbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBjbHNfc3RydWN0X2ZpZWxkczFbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMVsyXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzBdID0gJmZmaV90eXBlX3Nsb25nOworICBjbHNfc3RydWN0X2ZpZWxkczJbMV0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsyXSA9IE5VTEw7CisKKworICBkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGUxOworICBkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTI7CisgIGRibF9hcmdfdHlwZXNbM10gPSBOVUxMOworCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDMsICZjbHNfc3RydWN0X3R5cGUxLAorCQkgICAgIGRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc19kYmxbMF0gPSAmZV9kYmw7CisgIGFyZ3NfZGJsWzFdID0gJmZfZGJsOworICBhcmdzX2RibFsyXSA9ICZnX2RibDsKKyAgYXJnc19kYmxbM10gPSBOVUxMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihCX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCLCBDKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YzcwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jCkBAIC0wLDAgKzEsMTExIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJQ29udGFpbnMgc3RydWN0cyBhcyBwYXJhbWV0ZXIgb2YgdGhlIHN0cnVjdCBpdHNlbGYuCisJCVNhbXBsZSB0YWtlbiBmcm9tIEFsYW4gTW9kcmFzIHBhdGNoIHRvIHNyYy9wcmVwX2NpZi5jLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUxMDEwCSAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBBIHsKKyAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgIHVuc2lnbmVkIGNoYXIgYjsKK30gQTsKKwordHlwZWRlZiBzdHJ1Y3QgQiB7CisgIHN0cnVjdCBBIHg7CisgIHVuc2lnbmVkIGNoYXIgeTsKK30gQjsKKworc3RhdGljIEIgQl9mbihzdHJ1Y3QgQSBiMiwgc3RydWN0IEIgYjMpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYTsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55OworICByZXN1bHQueSA9IGIyLmIgKyBiMy54LmI7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjIuYSwgYjIuYiwKKwkgKGludCliMy54LmEsIGIzLnguYiwgYjMueSwKKwkgKGludClyZXN1bHQueC5hLCByZXN1bHQueC5iLCByZXN1bHQueSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQKK0JfZ24oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAorICAgICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgQSBiMDsKKyAgc3RydWN0IEIgYjE7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICB2b2lkKiBhcmdzX2RibFszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzNdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHMxWzNdOworICBmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGUsIGNsc19zdHJ1Y3RfdHlwZTE7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzNdOworCisgIGNsc19zdHJ1Y3RfdHlwZS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczsKKworICBjbHNfc3RydWN0X3R5cGUxLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLmFsaWdubWVudCA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlMS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzMTsKKworICBzdHJ1Y3QgQSBlX2RibCA9IHsgMUxMLCA3fTsKKyAgc3RydWN0IEIgZl9kYmwgPSB7ezEyLjAgLCAxMjd9LCA5OX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5OiAxMyAyMzMgMTM0IiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55KSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIpKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIEJfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgcmVzX2RibCA9ICgoQigqKShBLCBCKSkoY29kZSkpKGVfZGJsLCBmX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTk6IDEzIDIzMyAxMzQiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYikpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjc3ZWFkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwpAQCAtMCwwICsxLDEzMSBAQAorLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlIHBhc3Npbmcgd2l0aCBkaWZmZXJlbnQgc3RydWN0dXJlIHNpemUuCisJCUNvbnRhaW5zIHN0cnVjdHMgYXMgcGFyYW1ldGVyIG9mIHRoZSBzdHJ1Y3QgaXRzZWxmLgorCQlTYW1wbGUgdGFrZW4gZnJvbSBBbGFuIE1vZHJhcyBwYXRjaCB0byBzcmMvcHJlcF9jaWYuYy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MTAxMAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgQSB7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBhOworICB1bnNpZ25lZCBjaGFyIGI7Cit9IEE7CisKK3R5cGVkZWYgc3RydWN0IEIgeworICBzdHJ1Y3QgQSB4OworICB1bnNpZ25lZCBjaGFyIHk7Cit9IEI7CisKK3R5cGVkZWYgc3RydWN0IEMgeworICB1bnNpZ25lZCBsb25nIGxvbmcgZDsKKyAgdW5zaWduZWQgY2hhciBlOworfSBDOworCitzdGF0aWMgQiBCX2ZuKHN0cnVjdCBBIGIyLCBzdHJ1Y3QgQiBiMywgc3RydWN0IEMgYjQpCit7CisgIHN0cnVjdCBCIHJlc3VsdDsKKworICByZXN1bHQueC5hID0gYjIuYSArIGIzLnguYSArIGI0LmQ7CisgIHJlc3VsdC54LmIgPSBiMi5iICsgYjMueC5iICsgYjMueSArIGI0LmU7CisgIHJlc3VsdC55ID0gYjIuYiArIGIzLnguYiArIGI0LmU7CisKKyAgcHJpbnRmKCIlZCAlZCAlZCAlZCAlZCAlZCAlZDogJWQgJWQgJWRcbiIsIChpbnQpYjIuYSwgYjIuYiwKKwkgKGludCliMy54LmEsIGIzLnguYiwgYjMueSwgKGludCliNC5kLCBiNC5lLAorCSAoaW50KXJlc3VsdC54LmEsIHJlc3VsdC54LmIsIHJlc3VsdC55KTsKKworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorQl9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisgICAgIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisgIHN0cnVjdCBBIGIwOworICBzdHJ1Y3QgQiBiMTsKKyAgc3RydWN0IEMgYjI7CisKKyAgYjAgPSAqKHN0cnVjdCBBKikoYXJnc1swXSk7CisgIGIxID0gKihzdHJ1Y3QgQiopKGFyZ3NbMV0pOworICBiMiA9ICooc3RydWN0IEMqKShhcmdzWzJdKTsKKworICAqKEIqKXJlc3AgPSBCX2ZuKGIwLCBiMSwgYjIpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NfZGJsWzRdOworICBmZmlfdHlwZSogY2xzX3N0cnVjdF9maWVsZHNbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczFbM107CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczJbM107CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZSwgY2xzX3N0cnVjdF90eXBlMSwgY2xzX3N0cnVjdF90eXBlMjsKKyAgZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNF07CisKKyAgY2xzX3N0cnVjdF90eXBlLnNpemUgPSAwOworICBjbHNfc3RydWN0X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZS5lbGVtZW50cyA9IGNsc19zdHJ1Y3RfZmllbGRzOworCisgIGNsc19zdHJ1Y3RfdHlwZTEuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTEuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUxLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMxOworCisgIGNsc19zdHJ1Y3RfdHlwZTIuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTIuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUyLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMyOworCisgIHN0cnVjdCBBIGVfZGJsID0geyAxTEwsIDd9OworICBzdHJ1Y3QgQiBmX2RibCA9IHt7MTJMTCAsIDEyN30sIDk5fTsKKyAgc3RydWN0IEMgZ19kYmwgPSB7IDJMTCwgOX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91aW50NjQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMlsxXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzJdID0gTlVMTDsKKworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworICBkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTE7CisgIGRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlMjsKKyAgZGJsX2FyZ190eXBlc1szXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywgJmNsc19zdHJ1Y3RfdHlwZTEsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBhcmdzX2RibFswXSA9ICZlX2RibDsKKyAgYXJnc19kYmxbMV0gPSAmZl9kYmw7CisgIGFyZ3NfZGJsWzJdID0gJmdfZGJsOworICBhcmdzX2RibFszXSA9IE5VTEw7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKEJfZm4pLCAmcmVzX2RibCwgYXJnc19kYmwpOworICAvKiB7IGRnLW91dHB1dCAiMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgQl9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXNfZGJsID0gKChCKCopKEEsIEIsIEMpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICJcbjEgNyAxMiAxMjcgOTkgMiA5OiAxNSAyNDIgMTQzIiB9ICovCisgIENIRUNLKCByZXNfZGJsLnguYSA9PSAoZV9kYmwuYSArIGZfZGJsLnguYSArIGdfZGJsLmQpKTsKKyAgQ0hFQ0soIHJlc19kYmwueC5iID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZl9kYmwueSArIGdfZGJsLmUpKTsKKyAgQ0hFQ0soIHJlc19kYmwueSA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGdfZGJsLmUpKTsKKworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmNTQxYwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMKQEAgLTAsMCArMSwxMzEgQEAKKy8qIEFyZWE6CWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZSBwYXNzaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQlDb250YWlucyBzdHJ1Y3RzIGFzIHBhcmFtZXRlciBvZiB0aGUgc3RydWN0IGl0c2VsZi4KKwkJU2FtcGxlIHRha2VuIGZyb20gQWxhbiBNb2RyYXMgcGF0Y2ggdG8gc3JjL3ByZXBfY2lmLmMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTEwMTAJICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IEEgeworICB1bnNpZ25lZCBjaGFyIGE7CisgIHVuc2lnbmVkIGxvbmcgbG9uZyBiOworfSBBOworCit0eXBlZGVmIHN0cnVjdCBCIHsKKyAgc3RydWN0IEEgeDsKKyAgdW5zaWduZWQgY2hhciB5OworfSBCOworCit0eXBlZGVmIHN0cnVjdCBDIHsKKyAgdW5zaWduZWQgbG9uZyBkOworICB1bnNpZ25lZCBjaGFyIGU7Cit9IEM7CisKK3N0YXRpYyBCIEJfZm4oc3RydWN0IEEgYjIsIHN0cnVjdCBCIGIzLCBzdHJ1Y3QgQyBiNCkKK3sKKyAgc3RydWN0IEIgcmVzdWx0OworCisgIHJlc3VsdC54LmEgPSBiMi5hICsgYjMueC5hICsgYjQuZDsKKyAgcmVzdWx0LnguYiA9IGIyLmIgKyBiMy54LmIgKyBiMy55ICsgYjQuZTsKKyAgcmVzdWx0LnkgPSBiMi5iICsgYjMueC5iICsgYjQuZTsKKworICBwcmludGYoIiVkICVkICVkICVkICVkICVkICVkOiAlZCAlZCAlZFxuIiwgYjIuYSwgKGludCliMi5iLAorCSBiMy54LmEsIChpbnQpYjMueC5iLCBiMy55LCAoaW50KWI0LmQsIGI0LmUsCisJIHJlc3VsdC54LmEsIChpbnQpcmVzdWx0LnguYiwgcmVzdWx0LnkpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitCX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKKyAgICAgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgc3RydWN0IEEgYjA7CisgIHN0cnVjdCBCIGIxOworICBzdHJ1Y3QgQyBiMjsKKworICBiMCA9ICooc3RydWN0IEEqKShhcmdzWzBdKTsKKyAgYjEgPSAqKHN0cnVjdCBCKikoYXJnc1sxXSk7CisgIGIyID0gKihzdHJ1Y3QgQyopKGFyZ3NbMl0pOworCisgICooQiopcmVzcCA9IEJfZm4oYjAsIGIxLCBiMik7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgdm9pZCogYXJnc19kYmxbNF07CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkc1szXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMVszXTsKKyAgZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzMlszXTsKKyAgZmZpX3R5cGUgY2xzX3N0cnVjdF90eXBlLCBjbHNfc3RydWN0X3R5cGUxLCBjbHNfc3RydWN0X3R5cGUyOworICBmZmlfdHlwZSogZGJsX2FyZ190eXBlc1s0XTsKKworICBjbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKyAgY2xzX3N0cnVjdF90eXBlMS5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMS5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUxLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTEuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczE7CisKKyAgY2xzX3N0cnVjdF90eXBlMi5zaXplID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMi5hbGlnbm1lbnQgPSAwOworICBjbHNfc3RydWN0X3R5cGUyLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIGNsc19zdHJ1Y3RfdHlwZTIuZWxlbWVudHMgPSBjbHNfc3RydWN0X2ZpZWxkczI7CisKKyAgc3RydWN0IEEgZV9kYmwgPSB7IDEsIDdMTH07CisgIHN0cnVjdCBCIGZfZGJsID0ge3sxMi4wICwgMTI3fSwgOTl9OworICBzdHJ1Y3QgQyBnX2RibCA9IHsgMiwgOX07CisKKyAgc3RydWN0IEIgcmVzX2RibDsKKworICBjbHNfc3RydWN0X2ZpZWxkc1swXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgY2xzX3N0cnVjdF9maWVsZHNbMV0gPSAmZmZpX3R5cGVfdWludDY0OworICBjbHNfc3RydWN0X2ZpZWxkc1syXSA9IE5VTEw7CisKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKyAgY2xzX3N0cnVjdF9maWVsZHMxWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczFbMl0gPSBOVUxMOworCisgIGNsc19zdHJ1Y3RfZmllbGRzMlswXSA9ICZmZmlfdHlwZV91bG9uZzsKKyAgY2xzX3N0cnVjdF9maWVsZHMyWzFdID0gJmZmaV90eXBlX3VjaGFyOworICBjbHNfc3RydWN0X2ZpZWxkczJbMl0gPSBOVUxMOworCisKKyAgZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisgIGRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlMTsKKyAgZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGUyOworICBkYmxfYXJnX3R5cGVzWzNdID0gTlVMTDsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLCAmY2xzX3N0cnVjdF90eXBlMSwKKwkJICAgICBkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIGFyZ3NfZGJsWzBdID0gJmVfZGJsOworICBhcmdzX2RibFsxXSA9ICZmX2RibDsKKyAgYXJnc19kYmxbMl0gPSAmZ19kYmw7CisgIGFyZ3NfZGJsWzNdID0gTlVMTDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oQl9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDcgMTIgMTI3IDk5IDIgOTogMTUgMjQyIDE0MyIgfSAqLworICBDSEVDSyggcmVzX2RibC54LmEgPT0gKGVfZGJsLmEgKyBmX2RibC54LmEgKyBnX2RibC5kKSk7CisgIENIRUNLKCByZXNfZGJsLnguYiA9PSAoZV9kYmwuYiArIGZfZGJsLnguYiArIGZfZGJsLnkgKyBnX2RibC5lKSk7CisgIENIRUNLKCByZXNfZGJsLnkgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBnX2RibC5lKSk7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBCX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlc19kYmwgPSAoKEIoKikoQSwgQiwgQykpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxuMSA3IDEyIDEyNyA5OSAyIDk6IDE1IDI0MiAxNDMiIH0gKi8KKyAgQ0hFQ0soIHJlc19kYmwueC5hID09IChlX2RibC5hICsgZl9kYmwueC5hICsgZ19kYmwuZCkpOworICBDSEVDSyggcmVzX2RibC54LmIgPT0gKGVfZGJsLmIgKyBmX2RibC54LmIgKyBmX2RibC55ICsgZ19kYmwuZSkpOworICBDSEVDSyggcmVzX2RibC55ID09IChlX2RibC5iICsgZl9kYmwueC5iICsgZ19kYmwuZSkpOworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTkxNTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYwpAQCAtMCwwICsxLDkwIEBACisvKiBBcmVhOglmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmUgcGFzc2luZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDAzMDgyOAkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCB7CisgIGRvdWJsZSBhOworICBkb3VibGUgYjsKKyAgZG91YmxlIGM7Cit9IG15X2ZmaV9zdHJ1Y3Q7CisKK215X2ZmaV9zdHJ1Y3QgY2FsbGVlKHN0cnVjdCBteV9mZmlfc3RydWN0IGExLCBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBhMikKK3sKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgcmVzdWx0OworICByZXN1bHQuYSA9IGExLmEgKyBhMi5hOworICByZXN1bHQuYiA9IGExLmIgKyBhMi5iOworICByZXN1bHQuYyA9IGExLmMgKyBhMi5jOworCisKKyAgcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZzogJWcgJWcgJWdcbiIsIGExLmEsIGExLmIsIGExLmMsCisJIGEyLmEsIGEyLmIsIGEyLmMsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMpOworCisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgc3R1YihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCisJICB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBhMTsKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgYTI7CisKKyAgYTEgPSAqKHN0cnVjdCBteV9mZmlfc3RydWN0KikoYXJnc1swXSk7CisgIGEyID0gKihzdHJ1Y3QgbXlfZmZpX3N0cnVjdCopKGFyZ3NbMV0pOworCisgICoobXlfZmZpX3N0cnVjdCAqKXJlc3AgPSBjYWxsZWUoYTEsIGEyKTsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworICBmZmlfdHlwZSogbXlfZmZpX3N0cnVjdF9maWVsZHNbNF07CisgIGZmaV90eXBlIG15X2ZmaV9zdHJ1Y3RfdHlwZTsKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIHZvaWQqIGFyZ3NbNF07CisgIGZmaV90eXBlKiBhcmdfdHlwZXNbM107CisKKyAgc3RydWN0IG15X2ZmaV9zdHJ1Y3QgZyA9IHsgMS4wLCAyLjAsIDMuMCB9OworICBzdHJ1Y3QgbXlfZmZpX3N0cnVjdCBmID0geyAxLjAsIDIuMCwgMy4wIH07CisgIHN0cnVjdCBteV9mZmlfc3RydWN0IHJlczsKKworICBteV9mZmlfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisgIG15X2ZmaV9zdHJ1Y3RfdHlwZS5hbGlnbm1lbnQgPSAwOworICBteV9mZmlfc3RydWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgbXlfZmZpX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gbXlfZmZpX3N0cnVjdF9maWVsZHM7CisKKyAgbXlfZmZpX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBteV9mZmlfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIG15X2ZmaV9zdHJ1Y3RfZmllbGRzWzJdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgbXlfZmZpX3N0cnVjdF9maWVsZHNbM10gPSBOVUxMOworCisgIGFyZ190eXBlc1swXSA9ICZteV9mZmlfc3RydWN0X3R5cGU7CisgIGFyZ190eXBlc1sxXSA9ICZteV9mZmlfc3RydWN0X3R5cGU7CisgIGFyZ190eXBlc1syXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJm15X2ZmaV9zdHJ1Y3RfdHlwZSwKKwkJICAgICBhcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKyAgYXJnc1swXSA9ICZnOworICBhcmdzWzFdID0gJmY7CisgIGFyZ3NbMl0gPSBOVUxMOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2FsbGVlKSwgJnJlcywgYXJncyk7CisgIC8qIHsgZGctb3V0cHV0ICIxIDIgMyAxIDIgMzogMiA0IDYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnXG4iLCByZXMuYSwgcmVzLmIsIHJlcy5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyIDQgNiIgfSAqLworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgc3R1YiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICByZXMgPSAoKG15X2ZmaV9zdHJ1Y3QoKikoc3RydWN0IG15X2ZmaV9zdHJ1Y3QsIHN0cnVjdCBteV9mZmlfc3RydWN0KSkoY29kZSkpKGcsIGYpOworICAvKiB7IGRnLW91dHB1dCAiXG4xIDIgMyAxIDIgMzogMiA0IDYiIH0gKi8KKyAgcHJpbnRmKCJyZXM6ICVnICVnICVnXG4iLCByZXMuYSwgcmVzLmIsIHJlcy5jKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyIDQgNiIgfSAqLworCisgIGV4aXQoMCk7OworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDU2MTYxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CVByb21vdGlvbiB0ZXN0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCitzdGF0aWMgaW50IHByb21vdGlvbihzaWduZWQgY2hhciBzYywgc2lnbmVkIHNob3J0IHNzLAorCQkgICAgIHVuc2lnbmVkIGNoYXIgdWMsIHVuc2lnbmVkIHNob3J0IHVzKQoreworICBpbnQgciA9IChpbnQpIHNjICsgKGludCkgc3MgKyAoaW50KSB1YyArIChpbnQpIHVzOworCisgIHJldHVybiByOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBzaWduZWQgY2hhciBzYzsKKyAgdW5zaWduZWQgY2hhciB1YzsKKyAgc2lnbmVkIHNob3J0IHNzOworICB1bnNpZ25lZCBzaG9ydCB1czsKKyAgdW5zaWduZWQgbG9uZyB1bDsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NjaGFyOworICBhcmdzWzFdID0gJmZmaV90eXBlX3NzaG9ydDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91Y2hhcjsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV91c2hvcnQ7CisgIHZhbHVlc1swXSA9ICZzYzsKKyAgdmFsdWVzWzFdID0gJnNzOworICB2YWx1ZXNbMl0gPSAmdWM7CisgIHZhbHVlc1szXSA9ICZ1czsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKKworICB1cyA9IDA7CisgIHVsID0gMDsKKworICBmb3IgKHNjID0gKHNpZ25lZCBjaGFyKSAtMTI3OworICAgICAgIHNjIDw9IChzaWduZWQgY2hhcikgMTIwOyBzYyArPSAxKQorICAgIGZvciAoc3MgPSAtMzAwMDA7IHNzIDw9IDMwMDAwOyBzcyArPSAxMDAwMCkKKyAgICAgIGZvciAodWMgPSAodW5zaWduZWQgY2hhcikgMDsKKwkgICB1YyA8PSAodW5zaWduZWQgY2hhcikgMjAwOyB1YyArPSAyMCkKKwlmb3IgKHVzID0gMDsgdXMgPD0gNjAwMDA7IHVzICs9IDEwMDAwKQorCSAgeworCSAgICB1bCsrOworCSAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocHJvbW90aW9uKSwgJnJpbnQsIHZhbHVlcyk7CisJICAgIENIRUNLKChpbnQpcmludCA9PSAoc2lnbmVkIGNoYXIpIHNjICsgKHNpZ25lZCBzaG9ydCkgc3MgKworCQkgICh1bnNpZ25lZCBjaGFyKSB1YyArICh1bnNpZ25lZCBzaG9ydCkgdXMpOworCSAgfQorICBwcmludGYoIiVsdSBwcm9tb3Rpb24gdGVzdHMgcnVuXG4iLCB1bCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyOWJkNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9weW9iamMtdGMuYwpAQCAtMCwwICsxLDExNCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglSb25hbGQgT3Vzc29yZW4gPG91c3NvcmVuQGNpc3Ryb24ubmw+IDIwMDMwODI0CSovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0IFBvaW50IHsKKwlmbG9hdCB4OworCWZsb2F0IHk7Cit9IFBvaW50OworCit0eXBlZGVmIHN0cnVjdCBTaXplIHsKKwlmbG9hdCBoOworCWZsb2F0IHc7Cit9IFNpemU7CisKK3R5cGVkZWYgc3RydWN0IFJlY3QgeworCVBvaW50IG87CisJU2l6ZSAgczsKK30gUmVjdDsKKworaW50IGRvaXQoaW50IG8sIGNoYXIqIHMsIFBvaW50IHAsIFJlY3QgciwgaW50IGxhc3QpCit7CisJcHJpbnRmKCJDQUxMRUQgV0lUSCAlZCAlcyB7JWYgJWZ9IHt7JWYgJWZ9IHslZiAlZn19ICVkXG4iLAorCQlvLCBzLCBwLngsIHAueSwgci5vLngsIHIuby55LCByLnMuaCwgci5zLncsIGxhc3QpOworCXJldHVybiA0MjsKK30KKworCitpbnQgbWFpbih2b2lkKQoreworCWZmaV90eXBlIHBvaW50X3R5cGU7CisJZmZpX3R5cGUgc2l6ZV90eXBlOworCWZmaV90eXBlIHJlY3RfdHlwZTsKKwlmZmlfY2lmIGNpZjsKKwlmZmlfdHlwZSogYXJnbGlzdFs2XTsKKwl2b2lkKiB2YWx1ZXNbNl07CisJaW50IHI7CisKKwkvKgorCSAqICBGaXJzdCBzZXQgdXAgRkZJIHR5cGVzIGZvciB0aGUgMyBzdHJ1Y3QgdHlwZXMKKwkgKi8KKworCXBvaW50X3R5cGUuc2l6ZSA9IDA7IC8qc2l6ZW9mKFBvaW50KTsqLworCXBvaW50X3R5cGUuYWxpZ25tZW50ID0gMDsgLypfX2FsaWdub2ZfXyhQb2ludCk7Ki8KKwlwb2ludF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJcG9pbnRfdHlwZS5lbGVtZW50cyA9IG1hbGxvYygzICogc2l6ZW9mKGZmaV90eXBlKikpOworCXBvaW50X3R5cGUuZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisJcG9pbnRfdHlwZS5lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlwb2ludF90eXBlLmVsZW1lbnRzWzJdID0gTlVMTDsKKworCXNpemVfdHlwZS5zaXplID0gMDsvKiBzaXplb2YoU2l6ZSk7Ki8KKwlzaXplX3R5cGUuYWxpZ25tZW50ID0gMDsvKiBfX2FsaWdub2ZfXyhTaXplKTsqLworCXNpemVfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworCXNpemVfdHlwZS5lbGVtZW50cyA9IG1hbGxvYygzICogc2l6ZW9mKGZmaV90eXBlKikpOworCXNpemVfdHlwZS5lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKwlzaXplX3R5cGUuZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisJc2l6ZV90eXBlLmVsZW1lbnRzWzJdID0gTlVMTDsKKworCXJlY3RfdHlwZS5zaXplID0gMDsvKnNpemVvZihSZWN0KTsqLworCXJlY3RfdHlwZS5hbGlnbm1lbnQgPTA7LyogX19hbGlnbm9mX18oUmVjdCk7Ki8KKwlyZWN0X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKwlyZWN0X3R5cGUuZWxlbWVudHMgPSBtYWxsb2MoMyAqIHNpemVvZihmZmlfdHlwZSopKTsKKwlyZWN0X3R5cGUuZWxlbWVudHNbMF0gPSAmcG9pbnRfdHlwZTsKKwlyZWN0X3R5cGUuZWxlbWVudHNbMV0gPSAmc2l6ZV90eXBlOworCXJlY3RfdHlwZS5lbGVtZW50c1syXSA9IE5VTEw7CisKKwkvKgorCSAqIENyZWF0ZSBhIENJRgorCSAqLworCWFyZ2xpc3RbMF0gPSAmZmZpX3R5cGVfc2ludDsKKwlhcmdsaXN0WzFdID0gJmZmaV90eXBlX3BvaW50ZXI7CisJYXJnbGlzdFsyXSA9ICZwb2ludF90eXBlOworCWFyZ2xpc3RbM10gPSAmcmVjdF90eXBlOworCWFyZ2xpc3RbNF0gPSAmZmZpX3R5cGVfc2ludDsKKwlhcmdsaXN0WzVdID0gTlVMTDsKKworCXIgPSBmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLAorCQkJNSwgJmZmaV90eXBlX3NpbnQsIGFyZ2xpc3QpOworCWlmIChyICE9IEZGSV9PSykgeworCQlhYm9ydCgpOworCX0KKworCisJLyogQW5kIGNhbGwgdGhlIGZ1bmN0aW9uIHRocm91Z2ggdGhlIENJRiAqLworCisJeworCVBvaW50IHAgPSB7IDEuMCwgMi4wIH07CisJUmVjdCAgciA9IHsgeyA5LjAsIDEwLjB9LCB7IC0xLjAsIC0yLjAgfSB9OworCWludCAgIG8gPSAwOworCWludCAgIGwgPSA0MjsKKwljaGFyKiBtID0gIm15TWV0aG9kIjsKKwlmZmlfYXJnIHJlc3VsdDsKKworCXZhbHVlc1swXSA9ICZvOworCXZhbHVlc1sxXSA9ICZtOworCXZhbHVlc1syXSA9ICZwOworCXZhbHVlc1szXSA9ICZyOworCXZhbHVlc1s0XSA9ICZsOworCXZhbHVlc1s1XSA9IE5VTEw7CisKKwlwcmludGYoIkNBTExJTkcgV0lUSCAlZCAlcyB7JWYgJWZ9IHt7JWYgJWZ9IHslZiAlZn19ICVkXG4iLAorCQlvLCBtLCBwLngsIHAueSwgci5vLngsIHIuby55LCByLnMuaCwgci5zLncsIGwpOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGRvaXQpLCAmcmVzdWx0LCB2YWx1ZXMpOworCisJcHJpbnRmICgiVGhlIHJlc3VsdCBpcyAlZFxuIiwgKGludClyZXN1bHQpOworCisJfQorCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhYjQwMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwuYwpAQCAtMCwwICsxLDM1IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwpCit7CisgIHJldHVybiAyICogZGJsOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGRvdWJsZSBkYmwsIHJkYmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1swXSA9ICZkYmw7CisKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCisJCSAgICAgJmZmaV90eXBlX2RvdWJsZSwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKGRibCA9IC0xMjcuMzsgZGJsIDwgIDEyNzsgZGJsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9kYmwpLCAmcmRibCwgdmFsdWVzKTsKKyAgICAgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZGJsLCByZXR1cm5fZGJsKGRibCkpOworICAgICAgQ0hFQ0socmRibCA9PSAyICogZGJsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWE1ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwxLCBmbG9hdCBmbDIsIHVuc2lnbmVkIGludCBpbjMsIGRvdWJsZSBkYmw0KQoreworICByZXR1cm4gZGJsMSArIGZsMiArIGluMyArIGRibDQ7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGRibDEsIGRibDQsIHJkYmw7CisgIGZsb2F0IGZsMjsKKyAgdW5zaWduZWQgaW50IGluMzsKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgYXJnc1szXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHZhbHVlc1swXSA9ICZkYmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZGJsNDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICBkYmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBpbjMgPSAyNTU7CisgIGRibDQgPSA1MTIuNzsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2RibCksICZyZGJsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmRibCwgcmV0dXJuX2RibChkYmwxLCBmbDIsIGluMywgZGJsNCkpOworICBDSEVDSyhyZGJsID09ICBkYmwxICsgZmwyICsgaW4zICsgZGJsNCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzgxOGY4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYwpAQCAtMCwwICsxLDQyIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGRvdWJsZS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGRvdWJsZSByZXR1cm5fZGJsKGRvdWJsZSBkYmwxLCBkb3VibGUgZGJsMiwgdW5zaWduZWQgaW50IGluMywgZG91YmxlIGRibDQpCit7CisgIHJldHVybiBkYmwxICsgZGJsMiArIGluMyArIGRibDQ7Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZG91YmxlIGRibDEsIGRibDIsIGRibDQsIHJkYmw7CisgIHVuc2lnbmVkIGludCBpbjM7CisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICBhcmdzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91aW50OworICBhcmdzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKyAgdmFsdWVzWzBdID0gJmRibDE7CisgIHZhbHVlc1sxXSA9ICZkYmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZGJsNDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwKKwkJICAgICAmZmZpX3R5cGVfZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworICBkYmwxID0gMTI3LjA7CisgIGRibDIgPSAxMjguMDsKKyAgaW4zID0gMjU1OworICBkYmw0ID0gNTEyLjc7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9kYmwpLCAmcmRibCwgdmFsdWVzKTsKKyAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJkYmwsIHJldHVybl9kYmwoZGJsMSwgZGJsMiwgaW4zLCBkYmw0KSk7CisgIENIRUNLKHJkYmwgPT0gIGRibDEgKyBkYmwyICsgaW4zICsgZGJsNCk7CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGEwOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwuYwpAQCAtMCwwICsxLDM1IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsKQoreworICByZXR1cm4gMiAqIGZsOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsLCByZmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmZsOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKGZsID0gLTEyNy4wOyBmbCA8ICAxMjc7IGZsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9mbCksICZyZmwsIHZhbHVlcyk7CisgICAgICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmZsLCByZXR1cm5fZmwoZmwpKTsKKyAgICAgIENIRUNLKHJmbCA9PSAgMiAqIGZsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNkOTJjMgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYwpAQCAtMCwwICsxLDM2IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjEyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgZmxvYXQgcmV0dXJuX2ZsKGZsb2F0IGZsMSwgZmxvYXQgZmwyKQoreworICByZXR1cm4gZmwxICsgZmwyOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsMSwgZmwyLCByZmw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdmFsdWVzWzBdID0gJmZsMTsKKyAgdmFsdWVzWzFdID0gJmZsMjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7CisgIGZsMSA9IDEyNy4wOworICBmbDIgPSAxMjguMDsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2ZsKSwgJnJmbCwgdmFsdWVzKTsKKyAgcHJpbnRmICgiJWYgdnMgJWZcbiIsIHJmbCwgcmV0dXJuX2ZsKGZsMSwgZmwyKSk7CisgIENIRUNLKHJmbCA9PSAgZmwxICsgZmwyKTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGI5NzZjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgZmxvYXQuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNTAyMTIgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKKy8qIFVzZSB2b2xhdGlsZSBmbG9hdCB0byBhdm9pZCBmYWxzZSBuZWdhdGl2ZSBvbiBpeDg2LiAgU2VlIFBSIHRhcmdldC8zMjMuICAqLworc3RhdGljIGZsb2F0IHJldHVybl9mbChmbG9hdCBmbDEsIGZsb2F0IGZsMiwgZmxvYXQgZmwzLCBmbG9hdCBmbDQpCit7CisgIHZvbGF0aWxlIGZsb2F0IHN1bTsKKworICBzdW0gPSBmbDEgKyBmbDIgKyBmbDMgKyBmbDQ7CisgIHJldHVybiBzdW07Cit9CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmxvYXQgZmwxLCBmbDIsIGZsMywgZmw0LCByZmw7CisgIHZvbGF0aWxlIGZsb2F0IHN1bTsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzFdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICBhcmdzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmZmwzOworICB2YWx1ZXNbM10gPSAmZmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKyAgZmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBmbDMgPSAyNTUuMTsKKyAgZmw0ID0gNTEyLjc7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9mbCksICZyZmwsIHZhbHVlcyk7CisgIHByaW50ZiAoIiVmIHZzICVmXG4iLCByZmwsIHJldHVybl9mbChmbDEsIGZsMiwgZmwzLCBmbDQpKTsKKworICBzdW0gPSBmbDEgKyBmbDIgKyBmbDMgKyBmbDQ7CisgIENIRUNLKHJmbCA9PSBzdW0pOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzNzg3N2IKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmMKQEAgLTAsMCArMSw0MiBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHJldHVybiB2YWx1ZSBmbG9hdC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA1MDIxMiAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIGZsb2F0IHJldHVybl9mbChmbG9hdCBmbDEsIGZsb2F0IGZsMiwgdW5zaWduZWQgaW50IGluMywgZmxvYXQgZmw0KQoreworICByZXR1cm4gZmwxICsgZmwyICsgaW4zICsgZmw0OworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZsb2F0IGZsMSwgZmwyLCBmbDQsIHJmbDsKKyAgdW5zaWduZWQgaW50IGluMzsKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV91aW50OworICBhcmdzWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICB2YWx1ZXNbMF0gPSAmZmwxOworICB2YWx1ZXNbMV0gPSAmZmwyOworICB2YWx1ZXNbMl0gPSAmaW4zOworICB2YWx1ZXNbM10gPSAmZmw0OworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LAorCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKKyAgZmwxID0gMTI3LjA7CisgIGZsMiA9IDEyOC4wOworICBpbjMgPSAyNTU7CisgIGZsNCA9IDUxMi43OworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fZmwpLCAmcmZsLCB2YWx1ZXMpOworICBwcmludGYgKCIlZiB2cyAlZlxuIiwgcmZsLCByZXR1cm5fZmwoZmwxLCBmbDIsIGluMywgZmw0KSk7CisgIENIRUNLKHJmbCA9PSAgZmwxICsgZmwyICsgaW4zICsgZmw0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzJmZTY1Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgbG9uZyBkb3VibGUuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTxhbmRyZWFzdEBnY2MuZ251Lm9yZz4gMjAwNzExMTMgICovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgeDg2XzY0LSotbWluZ3cqIHg4Nl82NC0qLWN5Z3dpbiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgbG9uZyBkb3VibGUgcmV0dXJuX2xkbChsb25nIGRvdWJsZSBsZGwpCit7CisgIHJldHVybiAyKmxkbDsKK30KK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBsb25nIGRvdWJsZSBsZGwsIHJsZGw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9sb25nZG91YmxlOworICB2YWx1ZXNbMF0gPSAmbGRsOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9sb25nZG91YmxlLCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAobGRsID0gLTEyNy4wOyBsZGwgPCAgMTI3LjA7IGxkbCsrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fbGRsKSwgJnJsZGwsIHZhbHVlcyk7CisgICAgICBDSEVDSyhybGRsID09ICAyICogbGRsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNGExZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYwpAQCAtMCwwICsxLDQxIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGxvbmcgbG9uZy4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIGxvbmcgbG9uZyByZXR1cm5fbGwobG9uZyBsb25nIGxsKQoreworICByZXR1cm4gbGw7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBsb25nIGxvbmcgcmxvbmdsb25nOworICBsb25nIGxvbmcgbGw7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zaW50NjQ7CisgIHZhbHVlc1swXSA9ICZsbDsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfc2ludDY0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGZvciAobGwgPSAwTEw7IGxsIDwgMTAwTEw7IGxsKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9sbCksICZybG9uZ2xvbmcsIHZhbHVlcyk7CisgICAgICBDSEVDSyhybG9uZ2xvbmcgPT0gbGwpOworICAgIH0KKworICBmb3IgKGxsID0gNTU1NTU1NTU1NTUwMDBMTDsgbGwgPCA1NTU1NTU1NTU1NTEwMExMOyBsbCsrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fbGwpLCAmcmxvbmdsb25nLCB2YWx1ZXMpOworICAgICAgQ0hFQ0socmxvbmdsb25nID09IGxsKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZThhMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYwpAQCAtMCwwICsxLDQzIEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgaWYgbG9uZyBsb25nIGFyZSBwYXNzZWQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgcmVncyBvbiBwcGMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJMjAxMDQuCisgICBPcmlnaW5hdG9yOgk8YW5kcmVhc3RAZ2NjLmdudS5vcmc+IDIwMDUwMjIyICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1Xbm8tZm9ybWF0IiB7IHRhcmdldCBhbHBoYSotZGVjLW9zZiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIGxvbmcgbG9uZyByZXR1cm5fbGwoaW50IGxsMCwgbG9uZyBsb25nIGxsMSwgaW50IGxsMikKK3sKKyAgcmV0dXJuIGxsMCArIGxsMSArIGxsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGxvbmcgbG9uZyBybG9uZ2xvbmc7CisgIGxvbmcgbG9uZyBsbDE7CisgIHVuc2lnbmVkIGxsMCwgbGwyOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfc2ludDsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9zaW50NjQ7CisgIGFyZ3NbMl0gPSAmZmZpX3R5cGVfc2ludDsKKyAgdmFsdWVzWzBdID0gJmxsMDsKKyAgdmFsdWVzWzFdID0gJmxsMTsKKyAgdmFsdWVzWzJdID0gJmxsMjsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMywKKwkJICAgICAmZmZpX3R5cGVfc2ludDY0LCBhcmdzKSA9PSBGRklfT0spOworCisgIGxsMCA9IDExMTExMTExOworICBsbDEgPSAxMTExMTExMTExMTAwMExMOworICBsbDIgPSAxMTExMTExMTsKKworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4ocmV0dXJuX2xsKSwgJnJsb25nbG9uZywgdmFsdWVzKTsKKyAgcHJpbnRmKCJyZXM6ICUiIFBSSWRMTCAiLCAlIiBQUklkTEwgIlxuIiwgcmxvbmdsb25nLCBsbDAgKyBsbDEgKyBsbDIpOworICAvKiB7IGRnLW91dHB1dCAicmVzOiAxMTExMTEzMzMzMzIyMiwgMTExMTExMzMzMzMyMjIiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk2MDhlZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayByZXR1cm4gdmFsdWUgc2lnbmVkIGNoYXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHNpZ25lZCBjaGFyIHJldHVybl9zYyhzaWduZWQgY2hhciBzYykKK3sKKyAgcmV0dXJuIHNjOworfQoraW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKyAgc2lnbmVkIGNoYXIgc2M7CisKKyAgYXJnc1swXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgdmFsdWVzWzBdID0gJnNjOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLAorCQkgICAgICZmZmlfdHlwZV9zY2hhciwgYXJncykgPT0gRkZJX09LKTsKKworICBmb3IgKHNjID0gKHNpZ25lZCBjaGFyKSAtMTI3OworICAgICAgIHNjIDwgKHNpZ25lZCBjaGFyKSAxMjc7IHNjKyspCisgICAgeworICAgICAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHJldHVybl9zYyksICZyaW50LCB2YWx1ZXMpOworICAgICAgQ0hFQ0socmludCA9PSAoZmZpX2FyZykgc2MpOworICAgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBmZDM0NQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zbC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBpZiBsb25nIGFzIHJldHVybiB0eXBlIGlzIGhhbmRsZWQgY29ycmVjdGx5LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3N0YXRpYyBsb25nIHJldHVybl9zbChsb25nIGwxLCBsb25nIGwyKQoreworICByZXR1cm4gbDEgLSBsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmVzOworICB1bnNpZ25lZCBsb25nIGwxLCBsMjsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3Nsb25nOworICBhcmdzWzFdID0gJmZmaV90eXBlX3Nsb25nOworICB2YWx1ZXNbMF0gPSAmbDE7CisgIHZhbHVlc1sxXSA9ICZsMjsKKworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLAorCQkgICAgICZmZmlfdHlwZV9zbG9uZywgYXJncykgPT0gRkZJX09LKTsKKworICBsMSA9IDEwNzM3NDE4MjNMOworICBsMiA9IDEwNzM3NDE4MjRMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fc2wpLCAmcmVzLCB2YWx1ZXMpOworICBwcmludGYoInJlczogJWxkLCAlbGRcbiIsIChsb25nKXJlcywgbDEgLSBsMik7CisgIC8qIHsgZGctb3V0cHV0ICJyZXM6IC0xLCAtMSIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzQ1ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYwpAQCAtMCwwICsxLDM4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIHVuc2lnbmVkIGNoYXIuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHVuc2lnbmVkIGNoYXIgcmV0dXJuX3VjKHVuc2lnbmVkIGNoYXIgdWMpCit7CisgIHJldHVybiB1YzsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKworICB1bnNpZ25lZCBjaGFyIHVjOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfdWNoYXI7CisgIHZhbHVlc1swXSA9ICZ1YzsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwKKwkJICAgICAmZmZpX3R5cGVfdWNoYXIsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgZm9yICh1YyA9ICh1bnNpZ25lZCBjaGFyKSAnXHgwMCc7CisgICAgICAgdWMgPCAodW5zaWduZWQgY2hhcikgJ1x4ZmYnOyB1YysrKQorICAgIHsKKyAgICAgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fdWMpLCAmcmludCwgdmFsdWVzKTsKKyAgICAgIENIRUNLKHJpbnQgPT0gKHNpZ25lZCBpbnQpIHVjKTsKKyAgICB9CisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjI2NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYwpAQCAtMCwwICsxLDM4IEBACisvKiBBcmVhOglmZmlfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgaWYgdW5zaWduZWQgbG9uZyBhcyByZXR1cm4gdHlwZSBpcyBoYW5kbGVkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJPGthZmZlZXRpc2NoIGF0IGdteCBkb3QgZGU+IDIwMDYwNzI0ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorc3RhdGljIHVuc2lnbmVkIGxvbmcgcmV0dXJuX3VsKHVuc2lnbmVkIGxvbmcgdWwxLCB1bnNpZ25lZCBsb25nIHVsMikKK3sKKyAgcmV0dXJuIHVsMSArIHVsMjsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmVzOworICB1bnNpZ25lZCBsb25nIHVsMSwgdWwyOworCisgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIGFyZ3NbMV0gPSAmZmZpX3R5cGVfdWxvbmc7CisgIHZhbHVlc1swXSA9ICZ1bDE7CisgIHZhbHVlc1sxXSA9ICZ1bDI7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwKKwkJICAgICAmZmZpX3R5cGVfdWxvbmcsIGFyZ3MpID09IEZGSV9PSyk7CisKKyAgdWwxID0gMTA3Mzc0MTgyM0w7CisgIHVsMiA9IDEwNzM3NDE4MjRMOworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihyZXR1cm5fdWwpLCAmcmVzLCB2YWx1ZXMpOworICBwcmludGYoInJlczogJWx1LCAlbHVcbiIsICh1bnNpZ25lZCBsb25nKXJlcywgdWwxICsgdWwyKTsKKyAgLyogeyBkZy1vdXRwdXQgInJlczogMjE0NzQ4MzY0NywgMjE0NzQ4MzY0NyIgfSAqLworCisgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2E5M2I5Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYwpAQCAtMCwwICsxLDE0NSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCisvLyAxMyBGUFJzOiAxMDQgYnl0ZXMKKy8vIDE0IEZQUnM6IDExMiBieXRlcworCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfMTA4Ynl0ZSB7CisJZG91YmxlIGE7CisJZG91YmxlIGI7CisJZG91YmxlIGM7CisJZG91YmxlIGQ7CisJZG91YmxlIGU7CisJZG91YmxlIGY7CisJZG91YmxlIGc7CisJZG91YmxlIGg7CisJZG91YmxlIGk7CisJZG91YmxlIGo7CisJZG91YmxlIGs7CisJZG91YmxlIGw7CisJZG91YmxlIG07CisJaW50IG47Cit9IHN0cnVjdF8xMDhieXRlOworCitzdHJ1Y3RfMTA4Ynl0ZSBjbHNfc3RydWN0XzEwOGJ5dGVfZm4oCisJc3RydWN0XzEwOGJ5dGUgYjAsCisJc3RydWN0XzEwOGJ5dGUgYjEsCisJc3RydWN0XzEwOGJ5dGUgYjIsCisJc3RydWN0XzEwOGJ5dGUgYjMpCit7CisJc3RydWN0XzEwOGJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisJcmVzdWx0LmogPSBiMC5qICsgYjEuaiArIGIyLmogKyBiMy5qOworCXJlc3VsdC5rID0gYjAuayArIGIxLmsgKyBiMi5rICsgYjMuazsKKwlyZXN1bHQubCA9IGIwLmwgKyBiMS5sICsgYjIubCArIGIzLmw7CisJcmVzdWx0Lm0gPSBiMC5tICsgYjEubSArIGIyLm0gKyBiMy5tOworCXJlc3VsdC5uID0gYjAubiArIGIxLm4gKyBiMi5uICsgYjMubjsKKworCXByaW50ZigiJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWRcbiIsIHJlc3VsdC5hLCByZXN1bHQuYiwgcmVzdWx0LmMsCisJCXJlc3VsdC5kLCByZXN1bHQuZSwgcmVzdWx0LmYsIHJlc3VsdC5nLCByZXN1bHQuaCwgcmVzdWx0LmksCisJCXJlc3VsdC5qLCByZXN1bHQuaywgcmVzdWx0LmwsIHJlc3VsdC5tLCByZXN1bHQubik7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xMDhieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfMTA4Ynl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMF0pOworCWIxID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfMTA4Ynl0ZSopKGFyZ3NbM10pOworCisJKihzdHJ1Y3RfMTA4Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTA4Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzE1XTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfMTA4Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDQuMCwgOC4wLCAxLjAsIDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA3IH07CisJc3RydWN0XzEwOGJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDYuMCwgNy4wLCA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgNCB9OworCXN0cnVjdF8xMDhieXRlIGdfZGJsID0geyA0LjAsIDUuMCwgNy4wLCA5LjAsIDEuMCwgMS4wLCAyLjAsIDkuMCwgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMgfTsKKwlzdHJ1Y3RfMTA4Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMuMCwgMy4wLCAxLjAsIDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCAyIH07CisJc3RydWN0XzEwOGJ5dGUgcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s3XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzldID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzExXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTJdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxM10gPSAmZmZpX3R5cGVfc2ludDMyOworCWNsc19zdHJ1Y3RfZmllbGRzWzE0XSA9IE5VTEw7CisKKwlkYmxfYXJnX3R5cGVzWzBdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzFdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzJdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzNdID0gJmNsc19zdHJ1Y3RfdHlwZTsKKwlkYmxfYXJnX3R5cGVzWzRdID0gTlVMTDsKKworCUNIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDQsICZjbHNfc3RydWN0X3R5cGUsCisJCWRibF9hcmdfdHlwZXMpID09IEZGSV9PSyk7CisKKwlhcmdzX2RibFswXSA9ICZlX2RibDsKKwlhcmdzX2RibFsxXSA9ICZmX2RibDsKKwlhcmdzX2RibFsyXSA9ICZnX2RibDsKKwlhcmdzX2RibFszXSA9ICZoX2RibDsKKwlhcmdzX2RibFs0XSA9IE5VTEw7CisKKwlmZmlfY2FsbCgmY2lmLCBGRklfRk4oY2xzX3N0cnVjdF8xMDhieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVnICVkXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwKKwkJcmVzX2RibC5jLCByZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pLAorCQlyZXNfZGJsLmosIHJlc19kYmwuaywgcmVzX2RibC5sLCByZXNfZGJsLm0sIHJlc19kYmwubik7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMTYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xMDhieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzEwOGJ5dGUoKikoc3RydWN0XzEwOGJ5dGUsIHN0cnVjdF8xMDhieXRlLAorCQlzdHJ1Y3RfMTA4Ynl0ZSwgc3RydWN0XzEwOGJ5dGUpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4pOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAyMiAxNSAxNyAyNSA2IDE2IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjU5OWQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qIEFyZWE6CQlmZmlfY2FsbCwgY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOgkJQ2hlY2sgc3RydWN0dXJlIHJldHVybmluZyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUgc2l6ZS4KKwkJCQlEZXBlbmRpbmcgb24gdGhlIEFCSS4gQ2hlY2sgYmlnZ2VyIHN0cnVjdCB3aGljaCBvdmVybGFwcworCQkJCXRoZSBncCBhbmQgZnAgcmVnaXN0ZXIgY291bnQgb24gRGFyd2luL0FJWC9wcGM2NC4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUJsYWtlIENoYWZmaW4JNi8yMS8yMDA3CSovCisKKy8qIHsgZGctZG8gcnVuIHsgeGZhaWwgc3Ryb25nYXJtKi0qLSogeHNjYWxlKi0qLSogIH0gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworLy8gMTMgRlBSczogMTA0IGJ5dGVzCisvLyAxNCBGUFJzOiAxMTIgYnl0ZXMKKwordHlwZWRlZiBzdHJ1Y3Qgc3RydWN0XzExNmJ5dGUgeworCWRvdWJsZSBhOworCWRvdWJsZSBiOworCWRvdWJsZSBjOworCWRvdWJsZSBkOworCWRvdWJsZSBlOworCWRvdWJsZSBmOworCWRvdWJsZSBnOworCWRvdWJsZSBoOworCWRvdWJsZSBpOworCWRvdWJsZSBqOworCWRvdWJsZSBrOworCWRvdWJsZSBsOworCWRvdWJsZSBtOworCWRvdWJsZSBuOworCWludCBvOworfSBzdHJ1Y3RfMTE2Ynl0ZTsKKworc3RydWN0XzExNmJ5dGUgY2xzX3N0cnVjdF8xMTZieXRlX2ZuKAorCXN0cnVjdF8xMTZieXRlIGIwLAorCXN0cnVjdF8xMTZieXRlIGIxLAorCXN0cnVjdF8xMTZieXRlIGIyLAorCXN0cnVjdF8xMTZieXRlIGIzKQoreworCXN0cnVjdF8xMTZieXRlCXJlc3VsdDsKKworCXJlc3VsdC5hID0gYjAuYSArIGIxLmEgKyBiMi5hICsgYjMuYTsKKwlyZXN1bHQuYiA9IGIwLmIgKyBiMS5iICsgYjIuYiArIGIzLmI7CisJcmVzdWx0LmMgPSBiMC5jICsgYjEuYyArIGIyLmMgKyBiMy5jOworCXJlc3VsdC5kID0gYjAuZCArIGIxLmQgKyBiMi5kICsgYjMuZDsKKwlyZXN1bHQuZSA9IGIwLmUgKyBiMS5lICsgYjIuZSArIGIzLmU7CisJcmVzdWx0LmYgPSBiMC5mICsgYjEuZiArIGIyLmYgKyBiMy5mOworCXJlc3VsdC5nID0gYjAuZyArIGIxLmcgKyBiMi5nICsgYjMuZzsKKwlyZXN1bHQuaCA9IGIwLmggKyBiMS5oICsgYjIuaCArIGIzLmg7CisJcmVzdWx0LmkgPSBiMC5pICsgYjEuaSArIGIyLmkgKyBiMy5pOworCXJlc3VsdC5qID0gYjAuaiArIGIxLmogKyBiMi5qICsgYjMuajsKKwlyZXN1bHQuayA9IGIwLmsgKyBiMS5rICsgYjIuayArIGIzLms7CisJcmVzdWx0LmwgPSBiMC5sICsgYjEubCArIGIyLmwgKyBiMy5sOworCXJlc3VsdC5tID0gYjAubSArIGIxLm0gKyBiMi5tICsgYjMubTsKKwlyZXN1bHQubiA9IGIwLm4gKyBiMS5uICsgYjIubiArIGIzLm47CisJcmVzdWx0Lm8gPSBiMC5vICsgYjEubyArIGIyLm8gKyBiMy5vOworCisJcHJpbnRmKCIlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzdWx0LmEsIHJlc3VsdC5iLCByZXN1bHQuYywKKwkJcmVzdWx0LmQsIHJlc3VsdC5lLCByZXN1bHQuZiwgcmVzdWx0LmcsIHJlc3VsdC5oLCByZXN1bHQuaSwKKwkJcmVzdWx0LmosIHJlc3VsdC5rLCByZXN1bHQubCwgcmVzdWx0Lm0sIHJlc3VsdC5uLCByZXN1bHQubyk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZAorY2xzX3N0cnVjdF8xMTZieXRlX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKwlzdHJ1Y3RfMTE2Ynl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMF0pOworCWIxID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMV0pOworCWIyID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfMTE2Ynl0ZSopKGFyZ3NbM10pOworCisJKihzdHJ1Y3RfMTE2Ynl0ZSopcmVzcCA9IGNsc19zdHJ1Y3RfMTE2Ynl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzE2XTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfMTE2Ynl0ZSBlX2RibCA9IHsgOS4wLCAyLjAsIDYuMCwgNS4wLCAzLjAsIDQuMCwgOC4wLCAxLjAsIDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDcgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCA2LjAsIDQgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAsIDguMCwgNi4wLCAxLjAsIDQuMCwgMC4wLCA3LjAsIDMgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSBoX2RibCA9IHsgOC4wLCA2LjAsIDEuMCwgNC4wLCAwLjAsIDMuMCwgMy4wLCAxLjAsIDkuMCwgMi4wLCA2LjAsIDUuMCwgMy4wLCA4LjAsIDIgfTsKKwlzdHJ1Y3RfMTE2Ynl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEwXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzEzXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMTRdID0gJmZmaV90eXBlX3NpbnQzMjsKKwljbHNfc3RydWN0X2ZpZWxkc1sxNV0gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZV9kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSAmZ19kYmw7CisJYXJnc19kYmxbM10gPSAmaF9kYmw7CisJYXJnc19kYmxbNF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfMTE2Ynl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4sIHJlc19kYmwubyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMjYgMTYiIH0gKi8KKworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX3N0cnVjdF8xMTZieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzExNmJ5dGUoKikoc3RydWN0XzExNmJ5dGUsIHN0cnVjdF8xMTZieXRlLAorCQlzdHJ1Y3RfMTE2Ynl0ZSwgc3RydWN0XzExNmJ5dGUpKShjb2RlKSkoZV9kYmwsIGZfZGJsLCBnX2RibCwgaF9kYmwpOworCS8qIHsgZGctb3V0cHV0ICJcbjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMjIgMTUgMTcgMjUgNiAyNiAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZFxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsCisJCXJlc19kYmwuYywgcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSwKKwkJcmVzX2RibC5qLCByZXNfZGJsLmssIHJlc19kYmwubCwgcmVzX2RibC5tLCByZXNfZGJsLm4sIHJlc19kYmwubyk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDIyIDE1IDE3IDI1IDYgMjYgMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYzZhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYwpAQCAtMCwwICsxLDEyNCBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfNzJieXRlIHsKKwlkb3VibGUgYTsKKwlkb3VibGUgYjsKKwlkb3VibGUgYzsKKwlkb3VibGUgZDsKKwlkb3VibGUgZTsKKwlkb3VibGUgZjsKKwlkb3VibGUgZzsKKwlkb3VibGUgaDsKKwlkb3VibGUgaTsKK30gc3RydWN0XzcyYnl0ZTsKKworc3RydWN0XzcyYnl0ZSBjbHNfc3RydWN0XzcyYnl0ZV9mbigKKwlzdHJ1Y3RfNzJieXRlIGIwLAorCXN0cnVjdF83MmJ5dGUgYjEsCisJc3RydWN0XzcyYnl0ZSBiMiwKKwlzdHJ1Y3RfNzJieXRlIGIzKQoreworCXN0cnVjdF83MmJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisKKwlwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCQlyZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgsIHJlc3VsdC5pKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzcyYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0XzcyYnl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzFdKTsKKwliMiA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF83MmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzcyYnl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzEwXTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfNzJieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgNy4wIH07CisJc3RydWN0XzcyYnl0ZSBmX2RibCA9IHsgMS4wLCAyLjAsIDMuMCwgNy4wLCAyLjAsIDUuMCwgNi4wLCA3LjAsIDQuMCB9OworCXN0cnVjdF83MmJ5dGUgZ19kYmwgPSB7IDQuMCwgNS4wLCA3LjAsIDkuMCwgMS4wLCAxLjAsIDIuMCwgOS4wLCAzLjAgfTsKKwlzdHJ1Y3RfNzJieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgMi4wIH07CisJc3RydWN0XzcyYnl0ZSByZXNfZGJsOworCisJY2xzX3N0cnVjdF9maWVsZHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1syXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbM10gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzRdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s1XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzddID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s4XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOV0gPSBOVUxMOworCisJZGJsX2FyZ190eXBlc1swXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1sxXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1syXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1szXSA9ICZjbHNfc3RydWN0X3R5cGU7CisJZGJsX2FyZ190eXBlc1s0XSA9IE5VTEw7CisKKwlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCA0LCAmY2xzX3N0cnVjdF90eXBlLAorCQlkYmxfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisJYXJnc19kYmxbMF0gPSAmZV9kYmw7CisJYXJnc19kYmxbMV0gPSAmZl9kYmw7CisJYXJnc19kYmxbMl0gPSAmZ19kYmw7CisJYXJnc19kYmxbM10gPSAmaF9kYmw7CisJYXJnc19kYmxbNF0gPSBOVUxMOworCisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNsc19zdHJ1Y3RfNzJieXRlX2ZuKSwgJnJlc19kYmwsIGFyZ3NfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZ1xuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkJcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisKKwlDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfNzJieXRlX2duLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOworCisJcmVzX2RibCA9ICgoc3RydWN0XzcyYnl0ZSgqKShzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlLAorCQlzdHJ1Y3RfNzJieXRlLCBzdHJ1Y3RfNzJieXRlKSkoY29kZSkpKGVfZGJsLCBmX2RibCwgZ19kYmwsIGhfZGJsKTsKKwkvKiB7IGRnLW91dHB1dCAiXG4yMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisJcHJpbnRmKCJyZXM6ICVnICVnICVnICVnICVnICVnICVnICVnICVnXG4iLCByZXNfZGJsLmEsIHJlc19kYmwuYiwgcmVzX2RibC5jLAorCQlyZXNfZGJsLmQsIHJlc19kYmwuZSwgcmVzX2RibC5mLCByZXNfZGJsLmcsIHJlc19kYmwuaCwgcmVzX2RibC5pKTsKKwkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKworCWV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IyZjJmYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYwpAQCAtMCwwICsxLDEyNSBAQAorLyogQXJlYToJCWZmaV9jYWxsLCBjbG9zdXJlX2NhbGwKKyAgIFB1cnBvc2U6CQlDaGVjayBzdHJ1Y3R1cmUgcmV0dXJuaW5nIHdpdGggZGlmZmVyZW50IHN0cnVjdHVyZSBzaXplLgorCQkJCURlcGVuZGluZyBvbiB0aGUgQUJJLiBDaGVjayBiaWdnZXIgc3RydWN0IHdoaWNoIG92ZXJsYXBzCisJCQkJdGhlIGdwIGFuZCBmcCByZWdpc3RlciBjb3VudCBvbiBEYXJ3aW4vQUlYL3BwYzY0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCQlub25lLgorICAgT3JpZ2luYXRvcjoJQmxha2UgQ2hhZmZpbgk2LzIxLzIwMDcJKi8KKworLyogeyBkZy1kbyBydW4geyB4ZmFpbCBzdHJvbmdhcm0qLSotKiB4c2NhbGUqLSotKiAgfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1Xbm8tZm9ybWF0IiB7IHRhcmdldCBhbHBoYSotZGVjLW9zZiogfSB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCit0eXBlZGVmIHN0cnVjdCBzdHJ1Y3RfNzJieXRlIHsKKwlkb3VibGUgYTsKKwlkb3VibGUgYjsKKwlkb3VibGUgYzsKKwlkb3VibGUgZDsKKwlkb3VibGUgZTsKKwlkb3VibGUgZjsKKwlkb3VibGUgZzsKKwlkb3VibGUgaDsKKwlsb25nIGxvbmcgaTsKK30gc3RydWN0XzcyYnl0ZTsKKworc3RydWN0XzcyYnl0ZSBjbHNfc3RydWN0XzcyYnl0ZV9mbigKKwlzdHJ1Y3RfNzJieXRlIGIwLAorCXN0cnVjdF83MmJ5dGUgYjEsCisJc3RydWN0XzcyYnl0ZSBiMiwKKwlzdHJ1Y3RfNzJieXRlIGIzKQoreworCXN0cnVjdF83MmJ5dGUJcmVzdWx0OworCisJcmVzdWx0LmEgPSBiMC5hICsgYjEuYSArIGIyLmEgKyBiMy5hOworCXJlc3VsdC5iID0gYjAuYiArIGIxLmIgKyBiMi5iICsgYjMuYjsKKwlyZXN1bHQuYyA9IGIwLmMgKyBiMS5jICsgYjIuYyArIGIzLmM7CisJcmVzdWx0LmQgPSBiMC5kICsgYjEuZCArIGIyLmQgKyBiMy5kOworCXJlc3VsdC5lID0gYjAuZSArIGIxLmUgKyBiMi5lICsgYjMuZTsKKwlyZXN1bHQuZiA9IGIwLmYgKyBiMS5mICsgYjIuZiArIGIzLmY7CisJcmVzdWx0LmcgPSBiMC5nICsgYjEuZyArIGIyLmcgKyBiMy5nOworCXJlc3VsdC5oID0gYjAuaCArIGIxLmggKyBiMi5oICsgYjMuaDsKKwlyZXN1bHQuaSA9IGIwLmkgKyBiMS5pICsgYjIuaSArIGIzLmk7CisKKwlwcmludGYoIiVnICVnICVnICVnICVnICVnICVnICVnICUiIFBSSWRMTCAiXG4iLCByZXN1bHQuYSwgcmVzdWx0LmIsIHJlc3VsdC5jLAorCQlyZXN1bHQuZCwgcmVzdWx0LmUsIHJlc3VsdC5mLCByZXN1bHQuZywgcmVzdWx0LmgsIHJlc3VsdC5pKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0XzcyYnl0ZV9nbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCit7CisJc3RydWN0XzcyYnl0ZQliMCwgYjEsIGIyLCBiMzsKKworCWIwID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1swXSk7CisJYjEgPSAqKHN0cnVjdF83MmJ5dGUqKShhcmdzWzFdKTsKKwliMiA9ICooc3RydWN0XzcyYnl0ZSopKGFyZ3NbMl0pOworCWIzID0gKihzdHJ1Y3RfNzJieXRlKikoYXJnc1szXSk7CisKKwkqKHN0cnVjdF83MmJ5dGUqKXJlc3AgPSBjbHNfc3RydWN0XzcyYnl0ZV9mbihiMCwgYjEsIGIyLCBiMyk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworCWZmaV9jaWYgY2lmOworICAgICAgICB2b2lkICpjb2RlOworCWZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisJdm9pZCogYXJnc19kYmxbNV07CisJZmZpX3R5cGUqIGNsc19zdHJ1Y3RfZmllbGRzWzEwXTsKKwlmZmlfdHlwZSBjbHNfc3RydWN0X3R5cGU7CisJZmZpX3R5cGUqIGRibF9hcmdfdHlwZXNbNV07CisKKwljbHNfc3RydWN0X3R5cGUuc2l6ZSA9IDA7CisJY2xzX3N0cnVjdF90eXBlLmFsaWdubWVudCA9IDA7CisJY2xzX3N0cnVjdF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisJY2xzX3N0cnVjdF90eXBlLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHM7CisKKwlzdHJ1Y3RfNzJieXRlIGVfZGJsID0geyA5LjAsIDIuMCwgNi4wLCA1LjAsIDMuMCwgNC4wLCA4LjAsIDEuMCwgNyB9OworCXN0cnVjdF83MmJ5dGUgZl9kYmwgPSB7IDEuMCwgMi4wLCAzLjAsIDcuMCwgMi4wLCA1LjAsIDYuMCwgNy4wLCA0IH07CisJc3RydWN0XzcyYnl0ZSBnX2RibCA9IHsgNC4wLCA1LjAsIDcuMCwgOS4wLCAxLjAsIDEuMCwgMi4wLCA5LjAsIDMgfTsKKwlzdHJ1Y3RfNzJieXRlIGhfZGJsID0geyA4LjAsIDYuMCwgMS4wLCA0LjAsIDAuMCwgMy4wLCAzLjAsIDEuMCwgMiB9OworCXN0cnVjdF83MmJ5dGUgcmVzX2RibDsKKworCWNsc19zdHJ1Y3RfZmllbGRzWzBdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzNdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s0XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbNV0gPSAmZmZpX3R5cGVfZG91YmxlOworCWNsc19zdHJ1Y3RfZmllbGRzWzZdID0gJmZmaV90eXBlX2RvdWJsZTsKKwljbHNfc3RydWN0X2ZpZWxkc1s3XSA9ICZmZmlfdHlwZV9kb3VibGU7CisJY2xzX3N0cnVjdF9maWVsZHNbOF0gPSAmZmZpX3R5cGVfc2ludDY0OworCWNsc19zdHJ1Y3RfZmllbGRzWzldID0gTlVMTDsKKworCWRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMV0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbMl0gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbM10gPSAmY2xzX3N0cnVjdF90eXBlOworCWRibF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisJQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgNCwgJmNsc19zdHJ1Y3RfdHlwZSwKKwkJZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworCWFyZ3NfZGJsWzBdID0gJmVfZGJsOworCWFyZ3NfZGJsWzFdID0gJmZfZGJsOworCWFyZ3NfZGJsWzJdID0gJmdfZGJsOworCWFyZ3NfZGJsWzNdID0gJmhfZGJsOworCWFyZ3NfZGJsWzRdID0gTlVMTDsKKworCWZmaV9jYWxsKCZjaWYsIEZGSV9GTihjbHNfc3RydWN0XzcyYnl0ZV9mbiksICZyZXNfZGJsLCBhcmdzX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIjIyIDE1IDE3IDI1IDYgMTMgMTkgMTggMTYiIH0gKi8KKwlwcmludGYoInJlczogJWcgJWcgJWcgJWcgJWcgJWcgJWcgJWcgJSIgUFJJZExMICJcbiIsIHJlc19kYmwuYSwgcmVzX2RibC5iLCByZXNfZGJsLmMsCisJCXJlc19kYmwuZCwgcmVzX2RibC5lLCByZXNfZGJsLmYsIHJlc19kYmwuZywgcmVzX2RibC5oLCByZXNfZGJsLmkpOworCS8qIHsgZGctb3V0cHV0ICJcbnJlczogMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCisJQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfc3RydWN0XzcyYnl0ZV9nbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworCXJlc19kYmwgPSAoKHN0cnVjdF83MmJ5dGUoKikoc3RydWN0XzcyYnl0ZSwgc3RydWN0XzcyYnl0ZSwKKwkJc3RydWN0XzcyYnl0ZSwgc3RydWN0XzcyYnl0ZSkpKGNvZGUpKShlX2RibCwgZl9kYmwsIGdfZGJsLCBoX2RibCk7CisJLyogeyBkZy1vdXRwdXQgIlxuMjIgMTUgMTcgMjUgNiAxMyAxOSAxOCAxNiIgfSAqLworCXByaW50ZigicmVzOiAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlZyAlIiBQUklkTEwgIlxuIiwgcmVzX2RibC5hLCByZXNfZGJsLmIsIHJlc19kYmwuYywKKwkJcmVzX2RibC5kLCByZXNfZGJsLmUsIHJlc19kYmwuZiwgcmVzX2RibC5nLCByZXNfZGJsLmgsIHJlc19kYmwuaSk7CisJLyogeyBkZy1vdXRwdXQgIlxucmVzOiAyMiAxNSAxNyAyNSA2IDEzIDE5IDE4IDE2IiB9ICovCisKKwlleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGU0NWRlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMKQEAgLTAsMCArMSw0NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cmxlbiBmdW5jdGlvbiBjYWxsLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3N0YXRpYyBzaXplX3QgbXlfc3RybGVuKGNoYXIgKnMpCit7CisgIHJldHVybiAoc3RybGVuKHMpKTsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV9hcmcgcmludDsKKyAgY2hhciAqczsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgCisJCSAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICBzID0gImEiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMSk7CisgIAorICBzID0gIjEyMzQ1NjciOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gNyk7CisgIAorICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMjUpOworICAKKyAgZXhpdCAoMCk7Cit9CisgIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZmJjYzg3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMKQEAgLTAsMCArMSw0NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgc3RybGVuIGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKworI2luY2x1ZGUgImZmaXRlc3QuaCIKKworc3RhdGljIHNpemVfdCBfX2F0dHJpYnV0ZV9fKChzdGRjYWxsKSkgbXlfc3RkY2FsbF9zdHJsZW4oY2hhciAqcykKK3sKKyAgcmV0dXJuIChzdHJsZW4ocykpOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX2FyZyByaW50OworICBjaGFyICpzOworICBhcmdzWzBdID0gJmZmaV90eXBlX3BvaW50ZXI7CisgIHZhbHVlc1swXSA9ICh2b2lkKikgJnM7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCAxLAorCQkgICAgICAgJmZmaV90eXBlX3NpbnQsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICBzID0gImEiOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKKyAgQ0hFQ0socmludCA9PSAxKTsKKyAgCisgIHMgPSAiMTIzNDU2NyI7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOworICBDSEVDSyhyaW50ID09IDcpOworICAKKyAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7CisgIENIRUNLKHJpbnQgPT0gMjUpOworICAKKyAgcHJpbnRmKCJzdGRjYWxsIHN0cmxlbiB0ZXN0cyBwYXNzZWRcbiIpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNzZjODUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKQEAgLTAsMCArMSw2NSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgdW5zaWduZWQgY2hhciB1YzsKKyAgZG91YmxlIGQ7CisgIHVuc2lnbmVkIGludCB1aTsKK30gdGVzdF9zdHJ1Y3R1cmVfMTsKKworc3RhdGljIHRlc3Rfc3RydWN0dXJlXzEgc3RydWN0MSh0ZXN0X3N0cnVjdHVyZV8xIHRzKQoreworICB0cy51YysrOworICB0cy5kLS07CisgIHRzLnVpKys7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHMxX3R5cGU7CisgIGZmaV90eXBlICp0czFfdHlwZV9lbGVtZW50c1s0XTsKKyAgdHMxX3R5cGUuc2l6ZSA9IDA7CisgIHRzMV90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzMV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzMV90eXBlLmVsZW1lbnRzID0gdHMxX3R5cGVfZWxlbWVudHM7CisgIHRzMV90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX3VjaGFyOworICB0czFfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzMV90eXBlX2VsZW1lbnRzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIHRzMV90eXBlX2VsZW1lbnRzWzNdID0gTlVMTDsKKyAgCisgIHRlc3Rfc3RydWN0dXJlXzEgdHMxX2FyZzsKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzEgKnRzMV9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMSAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8xKSk7CisgIAorICBhcmdzWzBdID0gJnRzMV90eXBlOworICB2YWx1ZXNbMF0gPSAmdHMxX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAmdHMxX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czFfYXJnLnVjID0gJ1x4MDEnOworICB0czFfYXJnLmQgPSAzLjE0MTU5OworICB0czFfYXJnLnVpID0gNTU1OworCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QxKSwgdHMxX3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIENIRUNLKHRzMV9yZXN1bHQtPnVpID09IDU1Nik7CisgIENIRUNLKHRzMV9yZXN1bHQtPmQgPT0gMy4xNDE1OSAtIDEpOworIAorICBmcmVlICh0czFfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGJjOWZkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGRvdWJsZSBkMTsKKyAgZG91YmxlIGQyOworfSB0ZXN0X3N0cnVjdHVyZV8yOworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMiBzdHJ1Y3QyKHRlc3Rfc3RydWN0dXJlXzIgdHMpCit7CisgIHRzLmQxLS07CisgIHRzLmQyLS07CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgdGVzdF9zdHJ1Y3R1cmVfMiB0czJfYXJnOworICBmZmlfdHlwZSB0czJfdHlwZTsKKyAgZmZpX3R5cGUgKnRzMl90eXBlX2VsZW1lbnRzWzNdOworICB0czJfdHlwZS5zaXplID0gMDsKKyAgdHMyX3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHMyX3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHMyX3R5cGUuZWxlbWVudHMgPSB0czJfdHlwZV9lbGVtZW50czsKKyAgdHMyX3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czJfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7CisgIHRzMl90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworICAKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzIgKnRzMl9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMiAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8yKSk7CisgIAorICBhcmdzWzBdID0gJnRzMl90eXBlOworICB2YWx1ZXNbMF0gPSAmdHMyX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHMyX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czJfYXJnLmQxID0gNS41NTsKKyAgdHMyX2FyZy5kMiA9IDYuNjY7CisgIAorICBwcmludGYgKCIlZ1xuIiwgdHMyX2FyZy5kMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czJfYXJnLmQyKTsKKyAgCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3QyKSwgdHMyX3Jlc3VsdCwgdmFsdWVzKTsKKyAgCisgIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czJfcmVzdWx0LT5kMik7CisgIAorICBDSEVDSyh0czJfcmVzdWx0LT5kMSA9PSA1LjU1IC0gMSk7CisgIENIRUNLKHRzMl9yZXN1bHQtPmQyID09IDYuNjYgLSAxKTsKKyAgCisgIGZyZWUgKHRzMl9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYmIwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKQEAgLTAsMCArMSw1OSBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgaW50IHNpOworfSB0ZXN0X3N0cnVjdHVyZV8zOworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMyBzdHJ1Y3QzKHRlc3Rfc3RydWN0dXJlXzMgdHMpCit7CisgIHRzLnNpID0gLSh0cy5zaSoyKTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBpbnQgY29tcGFyZV92YWx1ZTsKKyAgZmZpX3R5cGUgdHMzX3R5cGU7CisgIGZmaV90eXBlICp0czNfdHlwZV9lbGVtZW50c1syXTsKKyAgdHMzX3R5cGUuc2l6ZSA9IDA7CisgIHRzM190eXBlLmFsaWdubWVudCA9IDA7CisgIHRzM190eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzM190eXBlLmVsZW1lbnRzID0gdHMzX3R5cGVfZWxlbWVudHM7CisgIHRzM190eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIHRzM190eXBlX2VsZW1lbnRzWzFdID0gTlVMTDsKKworICB0ZXN0X3N0cnVjdHVyZV8zIHRzM19hcmc7CisgIHRlc3Rfc3RydWN0dXJlXzMgKnRzM19yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfMyAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8zKSk7CisgIAorICBhcmdzWzBdID0gJnRzM190eXBlOworICB2YWx1ZXNbMF0gPSAmdHMzX2FyZzsKKyAgCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKKwkJICAgICAmdHMzX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIAorICB0czNfYXJnLnNpID0gLTEyMzsKKyAgY29tcGFyZV92YWx1ZSA9IHRzM19hcmcuc2k7CisgIAorICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RydWN0MyksIHRzM19yZXN1bHQsIHZhbHVlcyk7CisgIAorICBwcmludGYgKCIlZCAlZFxuIiwgdHMzX3Jlc3VsdC0+c2ksIC0oY29tcGFyZV92YWx1ZSoyKSk7CisgIAorICBDSEVDSyh0czNfcmVzdWx0LT5zaSA9PSAtKGNvbXBhcmVfdmFsdWUqMikpOworIAorICBmcmVlICh0czNfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQwYTgzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVuc2lnbmVkIHVpMTsKKyAgdW5zaWduZWQgdWkyOworICB1bnNpZ25lZCB1aTM7Cit9IHRlc3Rfc3RydWN0dXJlXzQ7CisKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV80IHN0cnVjdDQodGVzdF9zdHJ1Y3R1cmVfNCB0cykKK3sKKyAgdHMudWkzID0gdHMudWkxICogdHMudWkyICogdHMudWkzOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzNF90eXBlOworICBmZmlfdHlwZSAqdHM0X3R5cGVfZWxlbWVudHNbNF07ICAKKyAgdHM0X3R5cGUuc2l6ZSA9IDA7CisgIHRzNF90eXBlLmFsaWdubWVudCA9IDA7CisgIHRzNF90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRlc3Rfc3RydWN0dXJlXzQgdHM0X2FyZzsKKyAgdHM0X3R5cGUuZWxlbWVudHMgPSB0czRfdHlwZV9lbGVtZW50czsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfdWludDsKKyAgdHM0X3R5cGVfZWxlbWVudHNbM10gPSBOVUxMOworCisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNCAqdHM0X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV80ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzQpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM0X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czRfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czRfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzNF9hcmcudWkxID0gMjsKKyAgdHM0X2FyZy51aTIgPSAzOworICB0czRfYXJnLnVpMyA9IDQ7CisgIAorICBmZmlfY2FsbCAoJmNpZiwgRkZJX0ZOKHN0cnVjdDQpLCB0czRfcmVzdWx0LCB2YWx1ZXMpOworICAKKyAgQ0hFQ0sodHM0X3Jlc3VsdC0+dWkzID09IDJVICogM1UgKiA0VSk7CisgCisgIAorICBmcmVlICh0czRfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDNjYzk3Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCit0eXBlZGVmIHN0cnVjdAoreworICBjaGFyIGMxOworICBjaGFyIGMyOworfSB0ZXN0X3N0cnVjdHVyZV81OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNSBzdHJ1Y3Q1KHRlc3Rfc3RydWN0dXJlXzUgdHMxLCB0ZXN0X3N0cnVjdHVyZV81IHRzMikKK3sKKyAgdHMxLmMxICs9IHRzMi5jMTsKKyAgdHMxLmMyIC09IHRzMi5jMjsKKyAgCisgIHJldHVybiB0czE7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czVfdHlwZTsKKyAgZmZpX3R5cGUgKnRzNV90eXBlX2VsZW1lbnRzWzNdOworICB0czVfdHlwZS5zaXplID0gMDsKKyAgdHM1X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM1X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHM1X3R5cGUuZWxlbWVudHMgPSB0czVfdHlwZV9lbGVtZW50czsKKyAgdHM1X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfc2NoYXI7CisgIHRzNV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX3NjaGFyOworICB0czVfdHlwZV9lbGVtZW50c1syXSA9IE5VTEw7CisKKyAgdGVzdF9zdHJ1Y3R1cmVfNSB0czVfYXJnMSwgdHM1X2FyZzI7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNSAqdHM1X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV81ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzUpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM1X3R5cGU7CisgIGFyZ3NbMV0gPSAmdHM1X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czVfYXJnMTsKKyAgdmFsdWVzWzFdID0gJnRzNV9hcmcyOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDIsICZ0czVfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzNV9hcmcxLmMxID0gMjsKKyAgdHM1X2FyZzEuYzIgPSA2OworICB0czVfYXJnMi5jMSA9IDU7CisgIHRzNV9hcmcyLmMyID0gMzsKKyAgCisgIGZmaV9jYWxsICgmY2lmLCBGRklfRk4oc3RydWN0NSksIHRzNV9yZXN1bHQsIHZhbHVlcyk7CisgIAorICBDSEVDSyh0czVfcmVzdWx0LT5jMSA9PSA3KTsgCisgIENIRUNLKHRzNV9yZXN1bHQtPmMyID09IDMpOworICAKKyAgCisgIGZyZWUgKHRzNV9yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZGI5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKQEAgLTAsMCArMSw2NCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworfSB0ZXN0X3N0cnVjdHVyZV82OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNiBzdHJ1Y3Q2ICh0ZXN0X3N0cnVjdHVyZV82IHRzKQoreworICB0cy5mICs9IDE7CisgIHRzLmQgKz0gMTsKKyAgCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzNl90eXBlOworICBmZmlfdHlwZSAqdHM2X3R5cGVfZWxlbWVudHNbM107CisgIHRzNl90eXBlLnNpemUgPSAwOworICB0czZfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czZfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czZfdHlwZS5lbGVtZW50cyA9IHRzNl90eXBlX2VsZW1lbnRzOworICB0czZfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM2X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czZfdHlwZV9lbGVtZW50c1syXSA9IE5VTEw7CisKKworICB0ZXN0X3N0cnVjdHVyZV82IHRzNl9hcmc7CisKKyAgLyogVGhpcyBpcyBhIGhhY2sgdG8gZ2V0IGEgcHJvcGVybHkgYWxpZ25lZCByZXN1bHQgYnVmZmVyICovCisgIHRlc3Rfc3RydWN0dXJlXzYgKnRzNl9yZXN1bHQgPSAKKyAgICAodGVzdF9zdHJ1Y3R1cmVfNiAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV82KSk7CisgIAorICBhcmdzWzBdID0gJnRzNl90eXBlOworICB2YWx1ZXNbMF0gPSAmdHM2X2FyZzsKKworICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzNl90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM2X2FyZy5mID0gNS41NWY7CisgIHRzNl9hcmcuZCA9IDYuNjY7CisgIAorICBwcmludGYgKCIlZ1xuIiwgdHM2X2FyZy5mKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzNl9hcmcuZCk7CisKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDYpLCB0czZfcmVzdWx0LCB2YWx1ZXMpOworICAgIAorICBDSEVDSyh0czZfcmVzdWx0LT5mID09IDUuNTVmICsgMSk7CisgIENIRUNLKHRzNl9yZXN1bHQtPmQgPT0gNi42NiArIDEpOworICAgIAorICBmcmVlICh0czZfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGFhYzRjCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCit0eXBlZGVmIHN0cnVjdAoreworICBmbG9hdCBmMTsKKyAgZmxvYXQgZjI7CisgIGRvdWJsZSBkOworfSB0ZXN0X3N0cnVjdHVyZV83OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNyBzdHJ1Y3Q3ICh0ZXN0X3N0cnVjdHVyZV83IHRzKQoreworICB0cy5mMSArPSAxOworICB0cy5mMiArPSAxOworICB0cy5kICs9IDE7CisKKyAgcmV0dXJuIHRzOworfQorCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIGZmaV90eXBlICphcmdzW01BWF9BUkdTXTsKKyAgdm9pZCAqdmFsdWVzW01BWF9BUkdTXTsKKyAgZmZpX3R5cGUgdHM3X3R5cGU7CisgIGZmaV90eXBlICp0czdfdHlwZV9lbGVtZW50c1s0XTsKKyAgdHM3X3R5cGUuc2l6ZSA9IDA7CisgIHRzN190eXBlLmFsaWdubWVudCA9IDA7CisgIHRzN190eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisgIHRzN190eXBlLmVsZW1lbnRzID0gdHM3X3R5cGVfZWxlbWVudHM7CisgIHRzN190eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czdfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM3X3R5cGVfZWxlbWVudHNbMl0gPSAmZmZpX3R5cGVfZG91YmxlOworICB0czdfdHlwZV9lbGVtZW50c1szXSA9IE5VTEw7CisKKworICB0ZXN0X3N0cnVjdHVyZV83IHRzN19hcmc7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfNyAqdHM3X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV83ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzcpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM3X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czdfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czdfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzN19hcmcuZjEgPSA1LjU1ZjsKKyAgdHM3X2FyZy5mMiA9IDU1LjVmOworICB0czdfYXJnLmQgPSA2LjY2OworCisgIHByaW50ZiAoIiVnXG4iLCB0czdfYXJnLmYxKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzN19hcmcuZjIpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X2FyZy5kKTsKKyAgCisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihzdHJ1Y3Q3KSwgdHM3X3Jlc3VsdCwgdmFsdWVzKTsKKworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZjEpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZjIpOworICBwcmludGYgKCIlZ1xuIiwgdHM3X3Jlc3VsdC0+ZCk7CisgIAorICBDSEVDSyh0czdfcmVzdWx0LT5mMSA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czdfcmVzdWx0LT5mMiA9PSA1NS41ZiArIDEpOworICBDSEVDSyh0czdfcmVzdWx0LT5kID09IDYuNjYgKyAxKTsKKyAgCisgIGZyZWUgKHRzN19yZXN1bHQpOworICBleGl0KDApOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzNhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKQEAgLTAsMCArMSw4MCBAQAorLyogQXJlYToJZmZpX2NhbGwKKyAgIFB1cnBvc2U6CUNoZWNrIHN0cnVjdHVyZXMuCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGYxOworICBmbG9hdCBmMjsKKyAgZmxvYXQgZjM7CisgIGZsb2F0IGY0OworfSB0ZXN0X3N0cnVjdHVyZV84OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOCBzdHJ1Y3Q4ICh0ZXN0X3N0cnVjdHVyZV84IHRzKQoreworICB0cy5mMSArPSAxOworICB0cy5mMiArPSAxOworICB0cy5mMyArPSAxOworICB0cy5mNCArPSAxOworCisgIHJldHVybiB0czsKK30KKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107CisgIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107CisgIGZmaV90eXBlIHRzOF90eXBlOworICBmZmlfdHlwZSAqdHM4X3R5cGVfZWxlbWVudHNbNV07CisgIHRzOF90eXBlLnNpemUgPSAwOworICB0czhfdHlwZS5hbGlnbm1lbnQgPSAwOworICB0czhfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICB0czhfdHlwZS5lbGVtZW50cyA9IHRzOF90eXBlX2VsZW1lbnRzOworICB0czhfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM4X3R5cGVfZWxlbWVudHNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzOF90eXBlX2VsZW1lbnRzWzJdID0gJmZmaV90eXBlX2Zsb2F0OworICB0czhfdHlwZV9lbGVtZW50c1szXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgdHM4X3R5cGVfZWxlbWVudHNbNF0gPSBOVUxMOworCisgIHRlc3Rfc3RydWN0dXJlXzggdHM4X2FyZzsKKyAgCisgIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLworICB0ZXN0X3N0cnVjdHVyZV84ICp0czhfcmVzdWx0ID0gCisgICAgKHRlc3Rfc3RydWN0dXJlXzggKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfOCkpOworICAKKyAgYXJnc1swXSA9ICZ0czhfdHlwZTsKKyAgdmFsdWVzWzBdID0gJnRzOF9hcmc7CisgIAorICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzOF90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICAKKyAgdHM4X2FyZy5mMSA9IDUuNTVmOworICB0czhfYXJnLmYyID0gNTUuNWY7CisgIHRzOF9hcmcuZjMgPSAtNS41NWY7CisgIHRzOF9hcmcuZjQgPSAtNTUuNWY7CisKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9hcmcuZjEpOworICBwcmludGYgKCIlZ1xuIiwgdHM4X2FyZy5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfYXJnLmYzKTsKKyAgcHJpbnRmICgiJWdcbiIsIHRzOF9hcmcuZjQpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDgpLCB0czhfcmVzdWx0LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMSk7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMik7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mMyk7CisgIHByaW50ZiAoIiVnXG4iLCB0czhfcmVzdWx0LT5mNCk7CisgIAorICBDSEVDSyh0czhfcmVzdWx0LT5mMSA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czhfcmVzdWx0LT5mMiA9PSA1NS41ZiArIDEpOworICBDSEVDSyh0czhfcmVzdWx0LT5mMyA9PSAtNS41NWYgKyAxKTsKKyAgQ0hFQ0sodHM4X3Jlc3VsdC0+ZjQgPT0gLTU1LjVmICsgMSk7CisgIAorICBmcmVlICh0czhfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzAwOTFmCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEFyZWE6CWZmaV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzLgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCW5vbmUuCisgICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCisKKy8qIHsgZGctZG8gcnVuIH0gKi8KKyNpbmNsdWRlICJmZml0ZXN0LmgiCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIGZsb2F0IGY7CisgIGludCBpOworfSB0ZXN0X3N0cnVjdHVyZV85OworCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOSBzdHJ1Y3Q5ICh0ZXN0X3N0cnVjdHVyZV85IHRzKQoreworICB0cy5mICs9IDE7CisgIHRzLmkgKz0gMTsKKworICByZXR1cm4gdHM7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfdHlwZSB0czlfdHlwZTsKKyAgZmZpX3R5cGUgKnRzOV90eXBlX2VsZW1lbnRzWzNdOworICB0czlfdHlwZS5zaXplID0gMDsKKyAgdHM5X3R5cGUuYWxpZ25tZW50ID0gMDsKKyAgdHM5X3R5cGUudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKKyAgdHM5X3R5cGUuZWxlbWVudHMgPSB0czlfdHlwZV9lbGVtZW50czsKKyAgdHM5X3R5cGVfZWxlbWVudHNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIHRzOV90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX3NpbnQ7CisgIHRzOV90eXBlX2VsZW1lbnRzWzJdID0gTlVMTDsKKworICB0ZXN0X3N0cnVjdHVyZV85IHRzOV9hcmc7CisgIAorICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KKyAgdGVzdF9zdHJ1Y3R1cmVfOSAqdHM5X3Jlc3VsdCA9IAorICAgICh0ZXN0X3N0cnVjdHVyZV85ICopIG1hbGxvYyAoc2l6ZW9mKHRlc3Rfc3RydWN0dXJlXzkpKTsKKyAgCisgIGFyZ3NbMF0gPSAmdHM5X3R5cGU7CisgIHZhbHVlc1swXSA9ICZ0czlfYXJnOworICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czlfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgCisgIHRzOV9hcmcuZiA9IDUuNTVmOworICB0czlfYXJnLmkgPSA1OworICAKKyAgcHJpbnRmICgiJWdcbiIsIHRzOV9hcmcuZik7CisgIHByaW50ZiAoIiVkXG4iLCB0czlfYXJnLmkpOworICAKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDkpLCB0czlfcmVzdWx0LCB2YWx1ZXMpOworCisgIHByaW50ZiAoIiVnXG4iLCB0czlfcmVzdWx0LT5mKTsKKyAgcHJpbnRmICgiJWRcbiIsIHRzOV9yZXN1bHQtPmkpOworICAKKyAgQ0hFQ0sodHM5X3Jlc3VsdC0+ZiA9PSA1LjU1ZiArIDEpOworICBDSEVDSyh0czlfcmVzdWx0LT5pID09IDUgKyAxKTsKKworICBmcmVlICh0czlfcmVzdWx0KTsKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MWNjODkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qIEFyZWE6CWNsb3N1cmVfY2FsbAorICAgUHVycG9zZToJQ2hlY2sgcmV0dXJuIHZhbHVlIGZsb2F0LgorICAgTGltaXRhdGlvbnM6CW5vbmUuCisgICBQUjoJCTQxOTA4LgorICAgT3JpZ2luYXRvcjoJPHJmbUBnbnUub3JnPiAyMDA5MTEwMgkgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3QuaCIKKwordHlwZWRlZiBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCB7CisgIGZsb2F0IGE7CisgIGZsb2F0IGI7CisgIGZsb2F0IGM7CisgIGZsb2F0IGQ7Cit9IGNsc19zdHJ1Y3RfY29tYmluZWQ7CisKK3ZvaWQgY2xzX3N0cnVjdF9jb21iaW5lZF9mbihzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBhcmcpCit7CisgIHByaW50ZigiJWcgJWcgJWcgJWdcbiIsCisJIGFyZy5hLCBhcmcuYiwKKwkgYXJnLmMsIGFyZy5kKTsKKyAgZmZsdXNoKHN0ZG91dCk7Cit9CisKK3N0YXRpYyB2b2lkCitjbHNfc3RydWN0X2NvbWJpbmVkX2duKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwIF9fVU5VU0VEX18sCisgICAgICAgIHZvaWQqKiBhcmdzLCB2b2lkKiB1c2VyZGF0YSBfX1VOVVNFRF9fKQoreworICBzdHJ1Y3QgY2xzX3N0cnVjdF9jb21iaW5lZCBhMDsKKworICBhMCA9ICooc3RydWN0IGNsc19zdHJ1Y3RfY29tYmluZWQqKShhcmdzWzBdKTsKKworICBjbHNfc3RydWN0X2NvbWJpbmVkX2ZuKGEwKTsKK30KKworCitpbnQgbWFpbiAodm9pZCkKK3sKKyAgZmZpX2NpZiBjaWY7CisgIHZvaWQgKmNvZGU7CisgIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7CisgIGZmaV90eXBlKiBjbHNfc3RydWN0X2ZpZWxkczBbNV07CisgIGZmaV90eXBlIGNsc19zdHJ1Y3RfdHlwZTA7CisgIGZmaV90eXBlKiBkYmxfYXJnX3R5cGVzWzVdOworCisgIGNsc19zdHJ1Y3RfdHlwZTAuc2l6ZSA9IDA7CisgIGNsc19zdHJ1Y3RfdHlwZTAuYWxpZ25tZW50ID0gMDsKKyAgY2xzX3N0cnVjdF90eXBlMC50eXBlID0gRkZJX1RZUEVfU1RSVUNUOworICBjbHNfc3RydWN0X3R5cGUwLmVsZW1lbnRzID0gY2xzX3N0cnVjdF9maWVsZHMwOworCisgIHN0cnVjdCBjbHNfc3RydWN0X2NvbWJpbmVkIGdfZGJsID0gezQuMCwgNS4wLCAxLjAsIDguMH07CisKKyAgY2xzX3N0cnVjdF9maWVsZHMwWzBdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczBbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgIGNsc19zdHJ1Y3RfZmllbGRzMFsyXSA9ICZmZmlfdHlwZV9mbG9hdDsKKyAgY2xzX3N0cnVjdF9maWVsZHMwWzNdID0gJmZmaV90eXBlX2Zsb2F0OworICBjbHNfc3RydWN0X2ZpZWxkczBbNF0gPSBOVUxMOworCisgIGRibF9hcmdfdHlwZXNbMF0gPSAmY2xzX3N0cnVjdF90eXBlMDsKKyAgZGJsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJmZmaV90eXBlX3ZvaWQsCisJCSAgICAgZGJsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsc19zdHJ1Y3RfY29tYmluZWRfZ24sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7CisKKyAgKCh2b2lkKCopKGNsc19zdHJ1Y3RfY29tYmluZWQpKSAoY29kZSkpKGdfZGJsKTsKKyAgLyogeyBkZy1vdXRwdXQgIjQgNSAxIDgiIH0gKi8KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Y1NDQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oCkBAIC0wLDAgKzEsOTYgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSAiZmZpY29uZmlnLmgiCisKKyNkZWZpbmUgTUFYX0FSR1MgMjU2CisKKworLyogRGVmaW5lIF9fVU5VU0VEX18gdGhhdCBhbHNvIG90aGVyIGNvbXBpbGVycyB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCisjdW5kZWYgX19VTlVTRURfXworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZSBfX1VOVVNFRF9fCisjZW5kaWYKKworI2RlZmluZSBDSEVDSyh4KSAoISh4KSA/IGFib3J0KCkgOiAodm9pZCkwKQorCisvKiBQcmVmZXIgTUFQX0FOT04oWU1PVVMpIHRvIC9kZXYvemVybywgc2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBrZWVwIGEKKyAgIGZpbGUgb3Blbi4gICovCisjaWZkZWYgSEFWRV9NTUFQX0FOT04KKyMgdW5kZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisKKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIE1BUF9GQUlMRUQKKyMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCisjIGVuZGlmCisjIGlmICFkZWZpbmVkIChNQVBfQU5PTllNT1VTKSAmJiBkZWZpbmVkIChNQVBfQU5PTikKKyMgIGRlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OCisjIGVuZGlmCisjIGRlZmluZSBVU0lOR19NTUFQCisKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9NTUFQX0RFVl9aRVJPCisKKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaWZuZGVmIE1BUF9GQUlMRUQKKyMgIGRlZmluZSBNQVBfRkFJTEVEIC0xCisjIGVuZGlmCisjIGRlZmluZSBVU0lOR19NTUFQCisKKyNlbmRpZgorCisKKy8qIE1pbkdXIGtsdWRnZS4gICovCisjaWZkZWYgX1dJTjY0CisjZGVmaW5lIFBSSWRMTCAiSTY0ZCIKKyNkZWZpbmUgUFJJdUxMICJJNjR1IgorI2Vsc2UKKyNkZWZpbmUgUFJJZExMICJsbGQiCisjZGVmaW5lIFBSSXVMTCAibGx1IgorI2VuZGlmCisKKyNpZmRlZiBVU0lOR19NTUFQCitzdGF0aWMgaW5saW5lIHZvaWQgKgorYWxsb2NhdGVfbW1hcCAoc2l6ZV90IHNpemUpCit7CisgIHZvaWQgKnBhZ2U7CisjaWYgZGVmaW5lZCAoSEFWRV9NTUFQX0RFVl9aRVJPKQorICBzdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTU1BUF9ERVZfWkVSTworICBpZiAoZGV2X3plcm9fZmQgPT0gLTEpCisgICAgeworICAgICAgZGV2X3plcm9fZmQgPSBvcGVuICgiL2Rldi96ZXJvIiwgT19SRE9OTFkpOworICAgICAgaWYgKGRldl96ZXJvX2ZkID09IC0xKQorCXsKKwkgIHBlcnJvciAoIm9wZW4gL2Rldi96ZXJvOiAlbSIpOworCSAgZXhpdCAoMSk7CisJfQorICAgIH0KKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX01NQVBfQU5PTgorICBwYWdlID0gbW1hcCAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywKKwkgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KKyAgcGFnZSA9IG1tYXAgKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCisJICAgICAgIE1BUF9QUklWQVRFLCBkZXZfemVyb19mZCwgMCk7CisjZW5kaWYKKworICBpZiAocGFnZSA9PSAoY2hhciAqKSBNQVBfRkFJTEVEKQorICAgIHsKKyAgICAgIHBlcnJvciAoInZpcnR1YWwgbWVtb3J5IGV4aGF1c3RlZCIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIHJldHVybiBwYWdlOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2N2U4NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworbG9hZF9saWIgbGliZmZpLWRnLmV4cAorCitkZy1pbml0CitsaWJmZmktaW5pdAorCitnbG9iYWwgc3JjZGlyIHN1YmRpcgorCitnbG9iYWwgY3h4X29wdGlvbnMKKworc2V0IGN4eF9vcHRpb25zICIgLXNoYXJlZC1saWJnY2MgLWxzdGRjKysiCisKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItTzAgLVcgLVdhbGwiCitkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5jY11dICRjeHhfb3B0aW9ucyAiLU8yIgorZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMyIKK2RnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLmNjXV0gJGN4eF9vcHRpb25zICItT3MiCisKK2RnLWZpbmlzaAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgdGNsLWluZGVudC1sZXZlbDo0CisjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2MgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZmZkNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjCkBAIC0wLDAgKzEsMTI0IEBACisvKiBBcmVhOglmZmlfY2xvc3VyZSwgdW53aW5kIGluZm8KKyAgIFB1cnBvc2U6CUNoZWNrIGlmIHRoZSB1bndpbmQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJSmVmZiBTdHVybSA8anN0dXJtQG9uZS1wb2ludC5jb20+ICAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdGN4eC5oIgorCisjaWYgZGVmaW5lZCBIQVZFX1NURElOVF9ICisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCit2b2lkCitjbG9zdXJlX3Rlc3RfZm4oZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AgX19VTlVTRURfXywKKwkJdm9pZCoqIGFyZ3MgX19VTlVTRURfXywgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKK3sKKyAgdGhyb3cgOTsKK30KKwordHlwZWRlZiB2b2lkICgqY2xvc3VyZV90ZXN0X3R5cGUpKCk7CisKK3ZvaWQgY2xvc3VyZV90ZXN0X2ZuMShmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwKKwkJICAgICAgdm9pZCoqIGFyZ3MsIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCisgeworICAgICooZmZpX2FyZyopcmVzcCA9CisgICAgICAoaW50KSooZmxvYXQgKilhcmdzWzBdICsoaW50KSgqKGZsb2F0ICopYXJnc1sxXSkgKworICAgICAgKGludCkoKihmbG9hdCAqKWFyZ3NbMl0pICsgKGludCkqKGZsb2F0ICopYXJnc1szXSArCisgICAgICAoaW50KSgqKHNpZ25lZCBzaG9ydCAqKWFyZ3NbNF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pICsKKyAgICAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0gKyAoaW50KSgqKGludCAqKWFyZ3NbN10pICsKKyAgICAgIChpbnQpKCooZG91YmxlKilhcmdzWzhdKSArIChpbnQpKihpbnQgKilhcmdzWzldICsKKyAgICAgIChpbnQpKCooaW50ICopYXJnc1sxMF0pICsgKGludCkoKihmbG9hdCAqKWFyZ3NbMTFdKSArCisgICAgICAoaW50KSooaW50ICopYXJnc1sxMl0gKyAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSArCisgICAgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSArICooaW50ICopYXJnc1sxNV0gKyAoaW50KShpbnRwdHJfdCl1c2VyZGF0YTsKKworICAgIHByaW50ZigiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAgIChpbnQpKihmbG9hdCAqKWFyZ3NbMF0sIChpbnQpKCooZmxvYXQgKilhcmdzWzFdKSwKKwkgICAoaW50KSgqKGZsb2F0ICopYXJnc1syXSksIChpbnQpKihmbG9hdCAqKWFyZ3NbM10sCisJICAgKGludCkoKihzaWduZWQgc2hvcnQgKilhcmdzWzRdKSwgKGludCkoKihmbG9hdCAqKWFyZ3NbNV0pLAorCSAgIChpbnQpKihmbG9hdCAqKWFyZ3NbNl0sIChpbnQpKCooaW50ICopYXJnc1s3XSksCisJICAgKGludCkoKihkb3VibGUgKilhcmdzWzhdKSwgKGludCkqKGludCAqKWFyZ3NbOV0sCisJICAgKGludCkoKihpbnQgKilhcmdzWzEwXSksIChpbnQpKCooZmxvYXQgKilhcmdzWzExXSksCisJICAgKGludCkqKGludCAqKWFyZ3NbMTJdLCAoaW50KSgqKGludCAqKWFyZ3NbMTNdKSwKKwkgICAoaW50KSgqKGludCAqKWFyZ3NbMTRdKSwgKihpbnQgKilhcmdzWzE1XSwKKwkgICAoaW50KShpbnRwdHJfdCl1c2VyZGF0YSwgKGludCkqKGZmaV9hcmcqKXJlc3ApOworCisgICAgdGhyb3cgKGludCkqKGZmaV9hcmcqKXJlc3A7Cit9CisKK3R5cGVkZWYgaW50ICgqY2xvc3VyZV90ZXN0X3R5cGUxKShmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgc2lnbmVkIHNob3J0LAorCQkJCSAgZmxvYXQsIGZsb2F0LCBpbnQsIGRvdWJsZSwgaW50LCBpbnQsIGZsb2F0LAorCQkJCSAgaW50LCBpbnQsIGludCwgaW50KTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGZmaV9jaWYgY2lmOworICB2b2lkICpjb2RlOworICBmZmlfY2xvc3VyZSAqcGNsID0gKGZmaV9jbG9zdXJlICopZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOworICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107CisKKyAgeworICAgIGNsX2FyZ190eXBlc1sxXSA9IE5VTEw7CisKKyAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAwLAorCQkgICAgICAgJmZmaV90eXBlX3ZvaWQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKyAgICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF9mbiwgTlVMTCwgY29kZSkgPT0gRkZJX09LKTsKKworICAgIHRyeQorICAgICAgeworCSgqKChjbG9zdXJlX3Rlc3RfdHlwZSkoY29kZSkpKSgpOworICAgICAgfSBjYXRjaCAoaW50IGV4Y2VwdGlvbl9jb2RlKQorICAgICAgeworCUNIRUNLKGV4Y2VwdGlvbl9jb2RlID09IDkpOworICAgICAgfQorCisgICAgcHJpbnRmKCJwYXJ0IG9uZSBPS1xuIik7CisgICAgLyogeyBkZy1vdXRwdXQgInBhcnQgb25lIE9LIiB9ICovCisgICAgfQorCisgICAgeworCisgICAgICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfZmxvYXQ7CisgICAgICBjbF9hcmdfdHlwZXNbNF0gPSAmZmZpX3R5cGVfc3Nob3J0OworICAgICAgY2xfYXJnX3R5cGVzWzVdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzZdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzddID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbOF0gPSAmZmZpX3R5cGVfZG91YmxlOworICAgICAgY2xfYXJnX3R5cGVzWzldID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTBdID0gJmZmaV90eXBlX3VpbnQ7CisgICAgICBjbF9hcmdfdHlwZXNbMTFdID0gJmZmaV90eXBlX2Zsb2F0OworICAgICAgY2xfYXJnX3R5cGVzWzEyXSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzEzXSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE0XSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE1XSA9ICZmZmlfdHlwZV91aW50OworICAgICAgY2xfYXJnX3R5cGVzWzE2XSA9IE5VTEw7CisKKyAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICAgICAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMTYsCisJCQkgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKKworICAgICAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3RfZm4xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgID09IEZGSV9PSyk7CisgICAgICB0cnkKKwl7CisJICAoKigoY2xvc3VyZV90ZXN0X3R5cGUxKWNvZGUpKQorCSAgICAoMS4xLCAyLjIsIDMuMywgNC40LCAxMjcsIDUuNSwgNi42LCA4LCA5LCAxMCwgMTEsIDEyLjAsIDEzLAorCSAgICAgMTksIDIxLCAxKTsKKwkgIC8qIHsgZGctb3V0cHV0ICJcbjEgMiAzIDQgMTI3IDUgNiA4IDkgMTAgMTEgMTIgMTMgMTkgMjEgMSAzOiAyNTUiIH0gKi8KKwl9IGNhdGNoIChpbnQgZXhjZXB0aW9uX2NvZGUpCisJeworCSAgQ0hFQ0soZXhjZXB0aW9uX2NvZGUgPT0gMjU1KTsKKwl9CisgICAgICBwcmludGYoInBhcnQgdHdvIE9LXG4iKTsKKyAgICAgIC8qIHsgZGctb3V0cHV0ICJcbnBhcnQgdHdvIE9LIiB9ICovCisgICAgfQorICAgIGV4aXQoMCk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTczOWNkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpAQCAtMCwwICsxLDUzIEBACisvKiBBcmVhOglmZmlfY2FsbCwgdW53aW5kIGluZm8KKyAgIFB1cnBvc2U6CUNoZWNrIGlmIHRoZSB1bndpbmQgaW5mb3JtYXRpb24gaXMgcGFzc2VkIGNvcnJlY3RseS4KKyAgIExpbWl0YXRpb25zOglub25lLgorICAgUFI6CQlub25lLgorICAgT3JpZ2luYXRvcjoJQW5kcmVhcyBUb2JsZXIgPGFuZHJlYXN0QGdjYy5nbnUub3JnPiAyMDA2MTIxMyAgKi8KKworLyogeyBkZy1kbyBydW4gfSAqLworI2luY2x1ZGUgImZmaXRlc3RjeHguaCIKKworc3RhdGljIGludCBjaGVja2luZyhpbnQgYSBfX1VOVVNFRF9fLCBzaG9ydCBiIF9fVU5VU0VEX18sCisJCSAgICBzaWduZWQgY2hhciBjIF9fVU5VU0VEX18pCit7CisgIHRocm93IDk7Cit9CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgZmZpX3R5cGUgKmFyZ3NbTUFYX0FSR1NdOworICB2b2lkICp2YWx1ZXNbTUFYX0FSR1NdOworICBmZmlfYXJnIHJpbnQ7CisKKyAgc2lnbmVkIGludCBzaTsKKyAgc2lnbmVkIHNob3J0IHNzOworICBzaWduZWQgY2hhciBzYzsKKworICBhcmdzWzBdID0gJmZmaV90eXBlX3NpbnQ7CisgIHZhbHVlc1swXSA9ICZzaTsKKyAgYXJnc1sxXSA9ICZmZmlfdHlwZV9zc2hvcnQ7CisgIHZhbHVlc1sxXSA9ICZzczsKKyAgYXJnc1syXSA9ICZmZmlfdHlwZV9zY2hhcjsKKyAgdmFsdWVzWzJdID0gJnNjOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAzLAorCQkgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOworCisgIHNpID0gLTY7CisgIHNzID0gLTEyOworICBzYyA9IC0xOworICB7CisgICAgdHJ5CisgICAgICB7CisJZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGNoZWNraW5nKSwgJnJpbnQsIHZhbHVlcyk7CisgICAgICB9IGNhdGNoIChpbnQgZXhjZXB0aW9uX2NvZGUpCisgICAgICB7CisJQ0hFQ0soZXhjZXB0aW9uX2NvZGUgPT0gOSk7CisgICAgICB9CisgICAgcHJpbnRmKCJwYXJ0IG9uZSBPS1xuIik7CisgICAgLyogeyBkZy1vdXRwdXQgInBhcnQgb25lIE9LIiB9ICovCisgIH0KKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmM0MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4CkBAIC0wLDAgKzEsNzIxMCBAQAorJSB0ZXhpbmZvLnRleCAtLSBUZVggbWFjcm9zIHRvIGhhbmRsZSBUZXhpbmZvIGZpbGVzLgorJQorJSBMb2FkIHBsYWluIGlmIG5lY2Vzc2FyeSwgaS5lLiwgaWYgcnVubmluZyB1bmRlciBpbml0ZXguCitcZXhwYW5kYWZ0ZXJcaWZ4XGNzbmFtZSBmbXRuYW1lXGVuZGNzbmFtZVxyZWxheFxpbnB1dCBwbGFpblxmaQorJQorXGRlZlx0ZXhpbmZvdmVyc2lvbnsyMDA1LTA3LTA1LjE5fQorJQorJSBDb3B5cmlnaHQgKEMpIDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCislIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQorJSBGb3VuZGF0aW9uLCBJbmMuCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyUgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdAorJSB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCislCislIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKKyUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorJSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorJSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCislCislIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCislIGFsb25nIHdpdGggdGhpcyB0ZXhpbmZvLnRleCBmaWxlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUKKyUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyUgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCislCislIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHdoZW4gdGhpcyBmaWxlIGlzIHJlYWQgYnkgVGVYIHdoZW4gcHJvY2Vzc2luZworJSBhIFRleGluZm8gc291cmNlIGRvY3VtZW50LCB5b3UgbWF5IHVzZSB0aGUgcmVzdWx0IHdpdGhvdXQKKyUgcmVzdHJpY3Rpb24uICAoVGhpcyBoYXMgYmVlbiBvdXIgaW50ZW50IHNpbmNlIFRleGluZm8gd2FzIGludmVudGVkLikKKyUKKyUgUGxlYXNlIHRyeSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGV4aW5mby50ZXggYmVmb3JlIHN1Ym1pdHRpbmcgYnVnCislIHJlcG9ydHM7IHlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tOgorJSAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90ZXhpbmZvLyAodGhlIFRleGluZm8gaG9tZSBwYWdlKSwgb3IKKyUgICBmdHA6Ly90dWcub3JnL3RleC90ZXhpbmZvLnRleAorJSAgICAgKGFuZCBhbGwgQ1RBTiBtaXJyb3JzLCBzZWUgaHR0cDovL3d3dy5jdGFuLm9yZykuCislIFRoZSB0ZXhpbmZvLnRleCBpbiBhbnkgZ2l2ZW4gZGlzdHJpYnV0aW9uIGNvdWxkIHdlbGwgYmUgb3V0CislIG9mIGRhdGUsIHNvIGlmIHRoYXQncyB3aGF0IHlvdSdyZSB1c2luZywgcGxlYXNlIGNoZWNrLgorJQorJSBTZW5kIGJ1ZyByZXBvcnRzIHRvIGJ1Zy10ZXhpbmZvQGdudS5vcmcuICBQbGVhc2UgaW5jbHVkZSBpbmNsdWRpbmcgYQorJSBjb21wbGV0ZSBkb2N1bWVudCBpbiBlYWNoIGJ1ZyByZXBvcnQgd2l0aCB3aGljaCB3ZSBjYW4gcmVwcm9kdWNlIHRoZQorJSBwcm9ibGVtLiAgUGF0Y2hlcyBhcmUsIG9mIGNvdXJzZSwgZ3JlYXRseSBhcHByZWNpYXRlZC4KKyUKKyUgVG8gcHJvY2VzcyBhIFRleGluZm8gbWFudWFsIHdpdGggVGVYLCBpdCdzIG1vc3QgcmVsaWFibGUgdG8gdXNlIHRoZQorJSB0ZXhpMmR2aSBzaGVsbCBzY3JpcHQgdGhhdCBjb21lcyB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgYSBzaW1wbGUKKyUgbWFudWFsIGZvby50ZXhpLCBob3dldmVyLCB5b3UgY2FuIGdldCBhd2F5IHdpdGggdGhpczoKKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXhpbmRleCBmb28uPz8KKyUgICB0ZXggZm9vLnRleGkKKyUgICB0ZXggZm9vLnRleGkKKyUgICBkdmlwcyBmb28uZHZpIC1vICAjIG9yIHdoYXRldmVyOyB0aGlzIG1ha2VzIGZvby5wcy4KKyUgVGhlIGV4dHJhIFRlWCBydW5zIGdldCB0aGUgY3Jvc3MtcmVmZXJlbmNlIGluZm9ybWF0aW9uIGNvcnJlY3QuCislIFNvbWV0aW1lcyBvbmUgcnVuIGFmdGVyIHRleGluZGV4IHN1ZmZpY2VzLCBhbmQgc29tZXRpbWVzIHlvdSBuZWVkIG1vcmUKKyUgdGhhbiB0d287IHRleGkyZHZpIGRvZXMgaXQgYXMgbWFueSB0aW1lcyBhcyBuZWNlc3NhcnkuCislCislIEl0IGlzIHBvc3NpYmxlIHRvIGFkYXB0IHRleGluZm8udGV4IGZvciBvdGhlciBsYW5ndWFnZXMsIHRvIHNvbWUKKyUgZXh0ZW50LiAgWW91IGNhbiBnZXQgdGhlIGV4aXN0aW5nIGxhbmd1YWdlLXNwZWNpZmljIGZpbGVzIGZyb20gdGhlCislIGZ1bGwgVGV4aW5mbyBkaXN0cmlidXRpb24uCislCislIFRoZSBHTlUgVGV4aW5mbyBob21lIHBhZ2UgaXMgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3RleGluZm8uCisKKworXG1lc3NhZ2V7TG9hZGluZyB0ZXhpbmZvIFt2ZXJzaW9uIFx0ZXhpbmZvdmVyc2lvbl06fQorCislIElmIGluIGEgLmZtdCBmaWxlLCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIKKyUgYW5kIHR1cm4gb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCB3ZSBjb3VsZG4ndCBkbyBlYXJsaWVyIGJlY2F1c2UKKyUgdGhleSBtaWdodCBoYXZlIGFwcGVhcmVkIGluIHRoZSBpbnB1dCBmaWxlIG5hbWUuCitcZXZlcnlqb2J7XG1lc3NhZ2V7W1RleGluZm8gdmVyc2lvbiBcdGV4aW5mb3ZlcnNpb25dfSUKKyAgXGNhdGNvZGVgKz1cYWN0aXZlIFxjYXRjb2RlYFxfPVxhY3RpdmV9CisKK1xtZXNzYWdle0Jhc2ljcyx9CitcY2hhcmRlZlxvdGhlcj0xMgorCislIFdlIG5ldmVyIHdhbnQgcGxhaW4ncyBcb3V0ZXIgZGVmaW5pdGlvbiBvZiBcKyBpbiBUZXhpbmZvLgorJSBGb3IgQHRleCwgd2UgY2FuIHVzZSBcdGFiYWxpZ24uCitcbGV0XCsgPSBccmVsYXgKKworJSBTYXZlIHNvbWUgcGxhaW4gdGV4IG1hY3JvcyB3aG9zZSBuYW1lcyB3ZSB3aWxsIHJlZGVmaW5lLgorXGxldFxwdGV4Yj1cYgorXGxldFxwdGV4YnVsbGV0PVxidWxsZXQKK1xsZXRccHRleGM9XGMKK1xsZXRccHRleGNvbW1hPVwsCitcbGV0XHB0ZXhkb3Q9XC4KK1xsZXRccHRleGRvdHM9XGRvdHMKK1xsZXRccHRleGVuZD1cZW5kCitcbGV0XHB0ZXhlcXVpdj1cZXF1aXYKK1xsZXRccHRleGV4Y2xhbT1cIQorXGxldFxwdGV4Zm9vdG5vdGU9XGZvb3Rub3RlCitcbGV0XHB0ZXhndHI9PgorXGxldFxwdGV4aGF0PV4KK1xsZXRccHRleGk9XGkKK1xsZXRccHRleGluZGVudD1caW5kZW50CitcbGV0XHB0ZXhpbnNlcnQ9XGluc2VydAorXGxldFxwdGV4bGJyYWNlPVx7CitcbGV0XHB0ZXhsZXNzPTwKK1xsZXRccHRleG5ld3dyaXRlXG5ld3dyaXRlCitcbGV0XHB0ZXhub2luZGVudD1cbm9pbmRlbnQKK1xsZXRccHRleHBsdXM9KworXGxldFxwdGV4cmJyYWNlPVx9CitcbGV0XHB0ZXhzbGFzaD1cLworXGxldFxwdGV4c3Rhcj1cKgorXGxldFxwdGV4dD1cdAorCislIElmIHRoaXMgY2hhcmFjdGVyIGFwcGVhcnMgaW4gYW4gZXJyb3IgbWVzc2FnZSBvciBoZWxwIHN0cmluZywgaXQKKyUgc3RhcnRzIGEgbmV3IGxpbmUgaW4gdGhlIG91dHB1dC4KK1xuZXdsaW5lY2hhciA9IGBeXkoKKworJSBVc2UgVGVYIDMuMCdzIFxpbnB1dGxpbmVubyB0byBnZXQgdGhlIGxpbmUgbnVtYmVyLCBmb3IgYmV0dGVyIGVycm9yCislIG1lc3NhZ2VzLCBidXQgaWYgd2UncmUgdXNpbmcgYW4gb2xkIHZlcnNpb24gb2YgVGVYLCBkb24ndCBkbyBhbnl0aGluZy4KKyUKK1xpZnhcaW5wdXRsaW5lbm9cdGhpc2lzdW5kZWZpbmVkCisgIFxsZXRcbGluZW51bWJlciA9IFxlbXB0eSAlIFByZS0zLjAuCitcZWxzZQorICBcZGVmXGxpbmVudW1iZXJ7bC5cdGhlXGlucHV0bGluZW5vOlxzcGFjZX0KK1xmaQorCislIFNldCB1cCBmaXhlZCB3b3JkcyBmb3IgRW5nbGlzaCBpZiBub3QgYWxyZWFkeSBzZXQuCitcaWZ4XHB1dHdvcmRBcHBlbmRpeFx1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRBcHBlbmRpeHtBcHBlbmRpeH1cZmkKK1xpZnhccHV0d29yZENoYXB0ZXJcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZENoYXB0ZXJ7Q2hhcHRlcn1cZmkKK1xpZnhccHV0d29yZGZpbGVcdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZGZpbGV7ZmlsZX1cZmkKK1xpZnhccHV0d29yZGluXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZGlue2lufVxmaQorXGlmeFxwdXR3b3JkSW5kZXhJc0VtcHR5XHVuZGVmaW5lZCAgICAgXGdkZWZccHV0d29yZEluZGV4SXNFbXB0eXsoSW5kZXggaXMgZW1wdHkpfVxmaQorXGlmeFxwdXR3b3JkSW5kZXhOb25leGlzdGVudFx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluZGV4Tm9uZXhpc3RlbnR7KEluZGV4IGlzIG5vbmV4aXN0ZW50KX1cZmkKK1xpZnhccHV0d29yZEluZm9cdW5kZWZpbmVkICAgICAgXGdkZWZccHV0d29yZEluZm97SW5mb31cZmkKK1xpZnhccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZlx1bmRlZmluZWQgXGdkZWZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZntJbnN0YW5jZSBWYXJpYWJsZSBvZn1cZmkKK1xpZnhccHV0d29yZE1ldGhvZG9uXHVuZGVmaW5lZCAgXGdkZWZccHV0d29yZE1ldGhvZG9ue01ldGhvZCBvbn1cZmkKK1xpZnhccHV0d29yZE5vVGl0bGVcdW5kZWZpbmVkICAgXGdkZWZccHV0d29yZE5vVGl0bGV7Tm8gVGl0bGV9XGZpCitcaWZ4XHB1dHdvcmRvZlx1bmRlZmluZWQgICAgICAgIFxnZGVmXHB1dHdvcmRvZntvZn1cZmkKK1xpZnhccHV0d29yZG9uXHVuZGVmaW5lZCAgICAgICAgXGdkZWZccHV0d29yZG9ue29ufVxmaQorXGlmeFxwdXR3b3JkcGFnZVx1bmRlZmluZWQgICAgICBcZ2RlZlxwdXR3b3JkcGFnZXtwYWdlfVxmaQorXGlmeFxwdXR3b3Jkc2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3Jkc2VjdGlvbntzZWN0aW9ufVxmaQorXGlmeFxwdXR3b3JkU2VjdGlvblx1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkU2VjdGlvbntTZWN0aW9ufVxmaQorXGlmeFxwdXR3b3Jkc2VlXHVuZGVmaW5lZCAgICAgICBcZ2RlZlxwdXR3b3Jkc2Vle3NlZX1cZmkKK1xpZnhccHV0d29yZFNlZVx1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFNlZXtTZWV9XGZpCitcaWZ4XHB1dHdvcmRTaG9ydFRPQ1x1bmRlZmluZWQgIFxnZGVmXHB1dHdvcmRTaG9ydFRPQ3tTaG9ydCBDb250ZW50c31cZmkKK1xpZnhccHV0d29yZFRPQ1x1bmRlZmluZWQgICAgICAgXGdkZWZccHV0d29yZFRPQ3tUYWJsZSBvZiBDb250ZW50c31cZmkKKyUKK1xpZnhccHV0d29yZE1KYW5cdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNSmFue0phbnVhcnl9XGZpCitcaWZ4XHB1dHdvcmRNRmViXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUZlYntGZWJydWFyeX1cZmkKK1xpZnhccHV0d29yZE1NYXJcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNTWFye01hcmNofVxmaQorXGlmeFxwdXR3b3JkTUFwclx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1BcHJ7QXByaWx9XGZpCitcaWZ4XHB1dHdvcmRNTWF5XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU1heXtNYXl9XGZpCitcaWZ4XHB1dHdvcmRNSnVuXHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTUp1bntKdW5lfVxmaQorXGlmeFxwdXR3b3JkTUp1bFx1bmRlZmluZWQgXGdkZWZccHV0d29yZE1KdWx7SnVseX1cZmkKK1xpZnhccHV0d29yZE1BdWdcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNQXVne0F1Z3VzdH1cZmkKK1xpZnhccHV0d29yZE1TZXBcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNU2Vwe1NlcHRlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1PY3RcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNT2N0e09jdG9iZXJ9XGZpCitcaWZ4XHB1dHdvcmRNTm92XHVuZGVmaW5lZCBcZ2RlZlxwdXR3b3JkTU5vdntOb3ZlbWJlcn1cZmkKK1xpZnhccHV0d29yZE1EZWNcdW5kZWZpbmVkIFxnZGVmXHB1dHdvcmRNRGVje0RlY2VtYmVyfVxmaQorJQorXGlmeFxwdXR3b3JkRGVmbWFjXHVuZGVmaW5lZCAgICBcZ2RlZlxwdXR3b3JkRGVmbWFje01hY3JvfVxmaQorXGlmeFxwdXR3b3JkRGVmc3BlY1x1bmRlZmluZWQgICBcZ2RlZlxwdXR3b3JkRGVmc3BlY3tTcGVjaWFsIEZvcm19XGZpCitcaWZ4XHB1dHdvcmREZWZ2YXJcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZ2YXJ7VmFyaWFibGV9XGZpCitcaWZ4XHB1dHdvcmREZWZvcHRcdW5kZWZpbmVkICAgIFxnZGVmXHB1dHdvcmREZWZvcHR7VXNlciBPcHRpb259XGZpCitcaWZ4XHB1dHdvcmREZWZmdW5jXHVuZGVmaW5lZCAgIFxnZGVmXHB1dHdvcmREZWZmdW5je0Z1bmN0aW9ufVxmaQorCislIEluIHNvbWUgbWFjcm9zLCB3ZSBjYW5ub3QgdXNlIHRoZSBgXD8gbm90YXRpb24tLS10aGUgbGVmdCBxdW90ZSBpcworJSBpbiBzb21lIGNhc2VzIHRoZSBlc2NhcGUgY2hhci4KK1xjaGFyZGVmXGJhY2tDaGFyICA9IGBcXAorXGNoYXJkZWZcY29sb25DaGFyID0gYFw6CitcY2hhcmRlZlxjb21tYUNoYXIgPSBgXCwKK1xjaGFyZGVmXGRvdENoYXIgICA9IGBcLgorXGNoYXJkZWZcZXhjbGFtQ2hhcj0gYFwhCitcY2hhcmRlZlxwbHVzQ2hhciAgPSBgXCsKK1xjaGFyZGVmXHF1ZXN0Q2hhciA9IGBcPworXGNoYXJkZWZcc2VtaUNoYXIgID0gYFw7CitcY2hhcmRlZlx1bmRlckNoYXIgPSBgXF8KKworXGNoYXJkZWZcc3BhY2VDaGFyID0gYFwgJQorXGNoYXJkZWZcc3BhY2VjYXQgPSAxMAorXGRlZlxzcGFjZWlzc3BhY2V7XGNhdGNvZGVcc3BhY2VDaGFyPVxzcGFjZWNhdH0KKworeyUgZm9yIGhlbHAgd2l0aCBkZWJ1Z2dpbmcuCisgJSBleGFtcGxlIHVzYWdlOiBcZXhwYW5kYWZ0ZXJcc2hvd1xhY3RpdmViYWNrc2xhc2gKKyBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcYWN0aXZlCisgIWdsb2JhbCFkZWYhYWN0aXZlYmFja3NsYXNoe1x9Cit9CisKKyUgSWdub3JlIGEgdG9rZW4uCislCitcZGVmXGdvYmJsZSMxe30KKworJSBUaGUgZm9sbG93aW5nIGlzIHVzZWQgaW5zaWRlIHNldmVyYWwgXGVkZWYncy4KK1xkZWZcbWFrZWNzbmFtZSMxe1xleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWUjMVxlbmRjc25hbWV9CisKKyUgSHlwaGVuYXRpb24gZml4ZXMuCitcaHlwaGVuYXRpb257CisgIEZsb3ItaS1kYSBHaG9zdC1zY3JpcHQgR2hvc3QtdmlldyBNYWMtT1MgUG9zdC1TY3JpcHQKKyAgYXAtcGVuLWRpeCBiaXQtbWFwIGJpdC1tYXBzCisgIGRhdGEtYmFzZSBkYXRhLWJhc2VzIGVzaGVsbCBmYWxsLWluZyBoYWxmLXdheSBsb25nLWVzdCBtYW4tdS1zY3JpcHQKKyAgbWFuLXUtc2NyaXB0cyBtaW5pLWJ1Zi1mZXIgbWluaS1idWYtZmVycyBvdmVyLXZpZXcgcGFyLWEtZGlnbQorICBwYXItYS1kaWdtcyByYXRoLWVyIHJlYy10YW4tZ3UtbGFyIHJvLWJvdC1pY3Mgc2UtdmVyZS1seSBzZXQtdXAgc3BhLWNlcworICBzcGVsbC1pbmcgc3BlbGwtaW5ncworICBzdGFuZC1hbG9uZSBzdHJvbmctZXN0IHRpbWUtc3RhbXAgdGltZS1zdGFtcHMgd2hpY2gtZXZlciB3aGl0ZS1zcGFjZQorICB3aWRlLXNwcmVhZCB3cmFwLWFyb3VuZAorfQorCislIE1hcmdpbiB0byBhZGQgdG8gcmlnaHQgb2YgZXZlbiBwYWdlcywgdG8gbGVmdCBvZiBvZGQgcGFnZXMuCitcbmV3ZGltZW5cYmluZGluZ29mZnNldAorXG5ld2RpbWVuXG5vcm1hbG9mZnNldAorXG5ld2RpbWVuXHBhZ2V3aWR0aCBcbmV3ZGltZW5ccGFnZWhlaWdodAorCislIEZvciBhIGZpbmFsIGNvcHksIHRha2Ugb3V0IHRoZSByZWN0YW5nbGVzCislIHRoYXQgbWFyayBvdmVyZnVsbCBib3hlcyAoaW4gY2FzZSB5b3UgaGF2ZSBkZWNpZGVkCislIHRoYXQgdGhlIHRleHQgbG9va3Mgb2sgZXZlbiB0aG91Z2ggaXQgcGFzc2VzIHRoZSBtYXJnaW4pLgorJQorXGRlZlxmaW5hbG91dHtcb3ZlcmZ1bGxydWxlPTBwdH0KKworJSBAfCBpbnNlcnRzIGEgY2hhbmdlYmFyIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IGxpbmUuICBJdCBzaG91bGQKKyUgc3Vycm91bmQgYW55IGNoYW5nZWQgdGV4dC4gIFRoaXMgYXBwcm9hY2ggZG9lcyAqbm90KiB3b3JrIGlmIHRoZQorJSBjaGFuZ2Ugc3BhbnMgbW9yZSB0aGFuIHR3byBsaW5lcyBvZiBvdXRwdXQuICBUbyBoYW5kbGUgdGhhdCwgd2Ugd291bGQKKyUgaGF2ZSBhZG9wdCBhIG11Y2ggbW9yZSBkaWZmaWN1bHQgYXBwcm9hY2ggKHB1dHRpbmcgbWFya3MgaW50byB0aGUgbWFpbgorJSB2ZXJ0aWNhbCBsaXN0IGZvciB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgZWFjaCBjaGFuZ2UpLgorJQorXGRlZlx8eyUKKyAgJSBcdmFkanVzdCBjYW4gb25seSBiZSB1c2VkIGluIGhvcml6b250YWwgbW9kZS4KKyAgXGxlYXZldm1vZGUKKyAgJQorICAlIEFwcGVuZCB0aGlzIHZlcnRpY2FsIG1vZGUgbWF0ZXJpYWwgYWZ0ZXIgdGhlIGN1cnJlbnQgbGluZSBpbiB0aGUgb3V0cHV0LgorICBcdmFkanVzdHslCisgICAgJSBXZSB3YW50IHRvIGluc2VydCBhIHJ1bGUgd2l0aCB0aGUgaGVpZ2h0IGFuZCBkZXB0aCBvZiB0aGUgY3VycmVudAorICAgICUgbGVhZGluZzsgdGhhdCBpcyBleGFjdGx5IHdoYXQgXHN0cnV0Ym94IGlzIHN1cHBvc2VkIHRvIHJlY29yZC4KKyAgICBcdnNraXAtXGJhc2VsaW5lc2tpcAorICAgICUKKyAgICAlIFx2YWRqdXN0LWl0ZW1zIGFyZSBpbnNlcnRlZCBhdCB0aGUgbGVmdCBlZGdlIG9mIHRoZSB0eXBlLiAgU28KKyAgICAlIHRoZSBcbGxhcCBoZXJlIG1vdmVzIG91dCBpbnRvIHRoZSBsZWZ0LWhhbmQgbWFyZ2luLgorICAgIFxsbGFweyUKKyAgICAgICUKKyAgICAgICUgRm9yIGEgdGhpY2tlciBvciB0aGlubmVyIGJhciwgY2hhbmdlIHRoZSBgMXB0Jy4KKyAgICAgIFx2cnVsZSBoZWlnaHRcYmFzZWxpbmVza2lwIHdpZHRoMXB0CisgICAgICAlCisgICAgICAlIFRoaXMgaXMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGJhciBhbmQgdGhlIHRleHQuCisgICAgICBcaHNraXAgMTJwdAorICAgIH0lCisgIH0lCit9CisKKyUgU29tZXRpbWVzIGl0IGlzIGNvbnZlbmllbnQgdG8gaGF2ZSBldmVyeXRoaW5nIGluIHRoZSB0cmFuc2NyaXB0IGZpbGUKKyUgYW5kIG5vdGhpbmcgb24gdGhlIHRlcm1pbmFsLiAgV2UgZG9uJ3QganVzdCBjYWxsIFx0cmFjaW5nYWxsIGhlcmUsCislIHNpbmNlIHRoYXQgcHJvZHVjZXMgc29tZSB1c2VsZXNzIG91dHB1dCBvbiB0aGUgdGVybWluYWwuICBXZSBhbHNvIG1ha2UKKyUgc29tZSBlZmZvcnQgdG8gb3JkZXIgdGhlIHRyYWNpbmcgY29tbWFuZHMgdG8gcmVkdWNlIG91dHB1dCBpbiB0aGUgbG9nCislIGZpbGU7IGNmLiB0cmFjZS5zdHkgaW4gTGFUZVguCislCitcZGVmXGdsb2dnaW5nYWxse1xiZWdpbmdyb3VwIFxnbG9iYWxkZWZzID0gMSBcbG9nZ2luZ2FsbCBcZW5kZ3JvdXB9JQorXGRlZlxsb2dnaW5nYWxseyUKKyAgXHRyYWNpbmdzdGF0czIKKyAgXHRyYWNpbmdwYWdlczEKKyAgXHRyYWNpbmdsb3N0Y2hhcnMyICAlIDIgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFx0cmFjaW5ncGFyYWdyYXBoczEKKyAgXHRyYWNpbmdvdXRwdXQxCisgIFx0cmFjaW5nbWFjcm9zMgorICBcdHJhY2luZ3Jlc3RvcmVzMQorICBcc2hvd2JveGJyZWFkdGhcbWF4ZGltZW4gXHNob3dib3hkZXB0aFxtYXhkaW1lbgorICBcaWZ4XGVUZVh2ZXJzaW9uXHVuZGVmaW5lZFxlbHNlICUgZXRleCBnaXZlcyB1cyBtb3JlIGxvZ2dpbmcKKyAgICBcdHJhY2luZ3NjYW50b2tlbnMxCisgICAgXHRyYWNpbmdpZnMxCisgICAgXHRyYWNpbmdncm91cHMxCisgICAgXHRyYWNpbmduZXN0aW5nMgorICAgIFx0cmFjaW5nYXNzaWduczEKKyAgXGZpCisgIFx0cmFjaW5nY29tbWFuZHMzICAlIDMgZ2l2ZXMgdXMgbW9yZSBpbiBldGV4CisgIFxlcnJvcmNvbnRleHRsaW5lczE2Cit9JQorCislIGFkZCBjaGVjayBmb3IgXGxhc3RwZW5hbHR5IHRvIHBsYWluJ3MgZGVmaW5pdGlvbnMuICBJZiB0aGUgbGFzdCB0aGluZworJSB3ZSBkaWQgd2FzIGEgXG5vYnJlYWssIHdlIGRvbid0IHdhbnQgdG8gaW5zZXJ0IG1vcmUgc3BhY2UuCislCitcZGVmXHNtYWxsYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcc21hbGxza2lwYW1vdW50CisgIFxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5LTUwXHNtYWxsc2tpcFxmaVxmaX0KK1xkZWZcbWVkYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcbWVkc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0xMDBcbWVkc2tpcFxmaVxmaX0KK1xkZWZcYmlnYnJlYWt7XGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwXHBhclxpZmRpbVxsYXN0c2tpcDxcYmlnc2tpcGFtb3VudAorICBccmVtb3ZlbGFzdHNraXBccGVuYWx0eS0yMDBcYmlnc2tpcFxmaVxmaX0KKworJSBGb3IgQGNyb3BtYXJrcyBjb21tYW5kLgorJSBEbyBAY3JvcG1hcmtzIHRvIGdldCBjcm9wIG1hcmtzLgorJQorXG5ld2lmXGlmY3JvcG1hcmtzCitcbGV0XGNyb3BtYXJrcyA9IFxjcm9wbWFya3N0cnVlCislCislIERpbWVuc2lvbnMgdG8gYWRkIGNyb3BtYXJrcyBhdCBjb3JuZXJzLgorJSBBZGRlZCBieSBQLiBBLiBNYWNLYXksIDEyIE5vdi4gMTk4NgorJQorXG5ld2RpbWVuXG91dGVyaHNpemUgXG5ld2RpbWVuXG91dGVydnNpemUgJSBzZXQgYnkgdGhlIHBhcGVyIHNpemUgcm91dGluZXMKK1xuZXdkaW1lblxjb3JuZXJsb25nICBcY29ybmVybG9uZz0xcGMKK1xuZXdkaW1lblxjb3JuZXJ0aGljayBcY29ybmVydGhpY2s9LjNwdAorXG5ld2RpbWVuXHRvcGFuZGJvdHRvbW1hcmdpbiBcdG9wYW5kYm90dG9tbWFyZ2luPS43NWluCisKKyUgTWFpbiBvdXRwdXQgcm91dGluZS4KK1xjaGFyZGVmXFBBR0UgPSAyNTUKK1xvdXRwdXQgPSB7XG9uZXBhZ2VvdXR7XHBhZ2Vjb250ZW50c1xQQUdFfX0KKworXG5ld2JveFxoZWFkbGluZWJveAorXG5ld2JveFxmb290bGluZWJveAorCislIFxvbmVwYWdlb3V0IHRha2VzIGEgdmJveCBhcyBhbiBhcmd1bWVudC4gIE5vdGUgdGhhdCBccGFnZWNvbnRlbnRzCislIGRvZXMgaW5zZXJ0aW9ucywgYnV0IHlvdSBoYXZlIHRvIGNhbGwgaXQgeW91cnNlbGYuCitcZGVmXG9uZXBhZ2VvdXQjMXslCisgIFxpZmNyb3BtYXJrcyBcaG9mZnNldD0wcHQgXGVsc2UgXGhvZmZzZXQ9XG5vcm1hbG9mZnNldCBcZmkKKyAgJQorICBcaWZvZGRccGFnZW5vICBcYWR2YW5jZVxob2Zmc2V0IGJ5IFxiaW5kaW5nb2Zmc2V0CisgIFxlbHNlIFxhZHZhbmNlXGhvZmZzZXQgYnkgLVxiaW5kaW5nb2Zmc2V0XGZpCisgICUKKyAgJSBEbyB0aGlzIG91dHNpZGUgb2YgdGhlIFxzaGlwb3V0IHNvIEBjb2RlIGV0Yy4gd2lsbCBiZSBleHBhbmRlZCBpbgorICAlIHRoZSBoZWFkbGluZSBhcyB0aGV5IHNob3VsZCBiZSwgbm90IHRha2VuIGxpdGVyYWxseSAob3V0cHV0dGluZyAnJ2NvZGUpLgorICBcc2V0Ym94XGhlYWRsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlaGVhZGxpbmV9JQorICBcc2V0Ym94XGZvb3RsaW5lYm94ID0gXHZib3h7XGxldFxoc2l6ZT1ccGFnZXdpZHRoIFxtYWtlZm9vdGxpbmV9JQorICAlCisgIHslCisgICAgJSBIYXZlIHRvIGRvIHRoaXMgc3R1ZmYgb3V0c2lkZSB0aGUgXHNoaXBvdXQgYmVjYXVzZSB3ZSB3YW50IGl0IHRvCisgICAgJSB0YWtlIGVmZmVjdCBpbiBcd3JpdGUncywgeWV0IHRoZSBncm91cCBkZWZpbmVkIGJ5IHRoZSBcdmJveCBlbmRzCisgICAgJSBiZWZvcmUgdGhlIFxzaGlwb3V0IHJ1bnMuCisgICAgJQorICAgIFxpbmRleGR1bW1pZXMgICAgICAgICAlIGRvbid0IGV4cGFuZCBjb21tYW5kcyBpbiB0aGUgb3V0cHV0LgorICAgIFxzaGlwb3V0XHZib3h7JQorICAgICAgJSBEbyB0aGlzIGVhcmx5IHNvIHBkZiByZWZlcmVuY2VzIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhZ2UuCisgICAgICBcaWZwZGZtYWtlcGFnZWRlc3QgXHBkZmRlc3QgbmFtZXtcdGhlXHBhZ2Vub30geHl6XGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MgXHZib3ggdG8gXG91dGVydnNpemVcYmdyb3VwCisgICAgICAgIFxoc2l6ZSA9IFxvdXRlcmhzaXplCisgICAgICAgIFx2c2tpcC1cdG9wYW5kYm90dG9tbWFyZ2luCisgICAgICAgIFx2dG9wIHRvMHB0eyUKKyAgICAgICAgICBcbGluZXtcZXd0b3BcaGZpbFxld3RvcH0lCisgICAgICAgICAgXG5vaW50ZXJsaW5lc2tpcAorICAgICAgICAgIFxsaW5leyUKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlbGVmdFxjb3JuZXJ0aGlja1xuc3RvcH0lCisgICAgICAgICAgICBcaGZpbGwKKyAgICAgICAgICAgIFx2Ym94e1xtb3ZlcmlnaHRcY29ybmVydGhpY2tcbnN0b3B9JQorICAgICAgICAgIH0lCisgICAgICAgICAgXHZzc30lCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4KKyAgICAgICAgXGxpbmVcYmdyb3VwCisgICAgICAgICAgXGhmaWwgJSBjZW50ZXIgdGhlIHBhZ2Ugd2l0aGluIHRoZSBvdXRlciAocGFnZSkgaHNpemUuCisgICAgICAgICAgXGlmb2RkXHBhZ2Vub1xoc2tpcFxiaW5kaW5nb2Zmc2V0XGZpCisgICAgICAgICAgXHZib3hcYmdyb3VwCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgIFx1bnZib3hcaGVhZGxpbmVib3gKKyAgICAgIFxwYWdlYm9keXsjMX0lCisgICAgICBcaWZkaW1caHRcZm9vdGxpbmVib3ggPiAwcHQKKyAgICAgICAgJSBPbmx5IGxlYXZlIHRoaXMgc3BhY2UgaWYgdGhlIGZvb3RsaW5lIGlzIG5vbmVtcHR5LgorICAgICAgICAlIChXZSBsZXNzZW5lZCBcdnNpemUgZm9yIGl0IGluIFxvZGRmb290aW5neHh4LikKKyAgICAgICAgJSBUaGUgXGJhc2VsaW5lc2tpcD0yNHB0IGluIHBsYWluJ3MgXG1ha2Vmb290bGluZSBoYXMgbm8gZWZmZWN0LgorICAgICAgICBcdnNraXAgMlxiYXNlbGluZXNraXAKKyAgICAgICAgXHVudmJveFxmb290bGluZWJveAorICAgICAgXGZpCisgICAgICAlCisgICAgICBcaWZjcm9wbWFya3MKKyAgICAgICAgICBcZWdyb3VwICUgZW5kIG9mIFx2Ym94XGJncm91cAorICAgICAgICBcaGZpbFxlZ3JvdXAgJSBlbmQgb2YgKGNlbnRlcmluZykgXGxpbmVcYmdyb3VwCisgICAgICAgIFx2c2tpcFx0b3BhbmRib3R0b21tYXJnaW4gcGx1czFmaWxsIG1pbnVzMWZpbGwKKyAgICAgICAgXGJveG1heGRlcHRoID0gXGNvcm5lcnRoaWNrCisgICAgICAgIFx2Ym94IHRvMHB0e1x2c3MKKyAgICAgICAgICBcbGluZXslCisgICAgICAgICAgICBcdmJveHtcbW92ZWxlZnRcY29ybmVydGhpY2tcbnNib3R9JQorICAgICAgICAgICAgXGhmaWxsCisgICAgICAgICAgICBcdmJveHtcbW92ZXJpZ2h0XGNvcm5lcnRoaWNrXG5zYm90fSUKKyAgICAgICAgICB9JQorICAgICAgICAgIFxub2ludGVybGluZXNraXAKKyAgICAgICAgICBcbGluZXtcZXdib3RcaGZpbFxld2JvdH0lCisgICAgICAgIH0lCisgICAgICBcZWdyb3VwICUgXHZib3ggZnJvbSBmaXJzdCBjcm9wbWFya3MgY2xhdXNlCisgICAgICBcZmkKKyAgICB9JSBlbmQgb2YgXHNoaXBvdXRcdmJveAorICB9JSBlbmQgb2YgZ3JvdXAgd2l0aCBcaW5kZXhkdW1taWVzCisgIFxhZHZhbmNlcGFnZW5vCisgIFxpZm51bVxvdXRwdXRwZW5hbHR5Pi0yMDAwMCBcZWxzZVxkb3N1cGVyZWplY3RcZmkKK30KKworXG5ld2luc2VydFxtYXJnaW4gXGRpbWVuXG1hcmdpbj1cbWF4ZGltZW4KKworXGRlZlxwYWdlYm9keSMxe1x2Ym94IHRvXHBhZ2VoZWlnaHR7XGJveG1heGRlcHRoPVxtYXhkZXB0aCAjMX19Cit7XGNhdGNvZGVgXEAgPTExCitcZ2RlZlxwYWdlY29udGVudHMjMXtcaWZ2b2lkXHRvcGluc1xlbHNlXHVudmJveFx0b3BpbnNcZmkKKyUgbWFyZ2luYWwgaGFja3MsIGp1aGFAdmlpc2EudXVjcCAoSnVoYSBUYWthbGEpCitcaWZ2b2lkXG1hcmdpblxlbHNlICUgbWFyZ2luYWwgaW5mbyBpcyBwcmVzZW50CisgIFxybGFwe1xrZXJuXGhzaXplXHZib3ggdG9cekB7XGtlcm4xcHRcYm94XG1hcmdpbiBcdnNzfX1cZmkKK1xkaW1lbkA9XGRwIzEgXHVudmJveCMxCitcaWZ2b2lkXGZvb3RpbnNcZWxzZVx2c2tpcFxza2lwXGZvb3RpbnNcZm9vdG5vdGVydWxlIFx1bnZib3hcZm9vdGluc1xmaQorXGlmckBnZ2VkYm90dG9tIFxrZXJuLVxkaW1lbkAgXHZmaWwgXGZpfQorfQorCislIEhlcmUgYXJlIHRoZSBydWxlcyBmb3IgdGhlIGNyb3BtYXJrcy4gIE5vdGUgdGhhdCB0aGV5IGFyZQorJSBvZmZzZXQgc28gdGhhdCB0aGUgc3BhY2UgYmV0d2VlbiB0aGVtIGlzIHRydWx5IFxvdXRlcmhzaXplIG9yIFxvdXRlcnZzaXplCislIChQLiBBLiBNYWNLYXksIDEyIE5vdmVtYmVyLCAxOTg2KQorJQorXGRlZlxld3RvcHtcdnJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoMHB0IHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zdG9we1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcnRoaWNrIGRlcHRoXGNvcm5lcmxvbmcgd2lkdGhcY29ybmVydGhpY2t9fQorXGRlZlxld2JvdHtcdnJ1bGUgaGVpZ2h0MHB0IGRlcHRoXGNvcm5lcnRoaWNrIHdpZHRoXGNvcm5lcmxvbmd9CitcZGVmXG5zYm90e1x2Ym94CisgIHtcaHJ1bGUgaGVpZ2h0XGNvcm5lcmxvbmcgZGVwdGhcY29ybmVydGhpY2sgd2lkdGhcY29ybmVydGhpY2t9fQorCislIFBhcnNlIGFuIGFyZ3VtZW50LCB0aGVuIHBhc3MgaXQgdG8gIzEuICBUaGUgYXJndW1lbnQgaXMgdGhlIHJlc3Qgb2YKKyUgdGhlIGlucHV0IGxpbmUgKGV4Y2VwdCB3ZSByZW1vdmUgYSB0cmFpbGluZyBjb21tZW50KS4gICMxIHNob3VsZCBiZSBhCislIG1hY3JvIHdoaWNoIGV4cGVjdHMgYW4gb3JkaW5hcnkgdW5kZWxpbWl0ZWQgVGVYIGFyZ3VtZW50LgorJQorXGRlZlxwYXJzZWFyZ3tccGFyc2Vhcmd1c2luZ3t9fQorXGRlZlxwYXJzZWFyZ3VzaW5nIzEjMnslCisgIFxkZWZcbmV4dHsjMn0lCisgIFxiZWdpbmdyb3VwCisgICAgXG9iZXlsaW5lcworICAgIFxzcGFjZWlzc3BhY2UKKyAgICAjMSUKKyAgICBccGFyc2VhcmdsaW5lXGVtcHR5JSBJbnNlcnQgdGhlIFxlbXB0eSB0b2tlbiwgc2VlIFxmaW5pc2hwYXJzZWFyZyBiZWxvdy4KK30KKwore1xvYmV5bGluZXMgJQorICBcZ2RlZlxwYXJzZWFyZ2xpbmUjMV5eTXslCisgICAgXGVuZGdyb3VwICUgRW5kIG9mIHRoZSBncm91cCBzdGFydGVkIGluIFxwYXJzZWFyZy4KKyAgICBcYXJncmVtb3ZlY29tbWVudCAjMVxjb21tZW50XEFyZ1Rlcm0lCisgIH0lCit9CisKKyUgRmlyc3QgcmVtb3ZlIGFueSBAY29tbWVudCwgdGhlbiBhbnkgQGMgY29tbWVudC4KK1xkZWZcYXJncmVtb3ZlY29tbWVudCMxXGNvbW1lbnQjMlxBcmdUZXJte1xhcmdyZW1vdmVjICMxXGNcQXJnVGVybX0KK1xkZWZcYXJncmVtb3ZlYyMxXGMjMlxBcmdUZXJte1xhcmdjaGVja3NwYWNlcyMxXF5eTVxBcmdUZXJtfQorCislIEVhY2ggb2NjdXJlbmNlIG9mIGBcXl5NJyBvciBgPHNwYWNlPlxeXk0nIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHNwYWNlLgorJQorJSBcYXJncmVtb3ZlYyBtaWdodCBsZWF2ZSB1cyB3aXRoIHRyYWlsaW5nIHNwYWNlLCBlLmcuLAorJSAgICBAZW5kIGl0ZW1pemUgIEBjIGZvbworJSBUaGlzIHNwYWNlIHRva2VuIHVuZGVyZ29lcyB0aGUgc2FtZSBwcm9jZWR1cmUgYW5kIGlzIGV2ZW50dWFsbHkgcmVtb3ZlZAorJSBieSBcZmluaXNocGFyc2VhcmcuCislCitcZGVmXGFyZ2NoZWNrc3BhY2VzIzFcXl5Ne1xhcmdjaGVja3NwYWNlc1gjMVxeXk0gXF5eTX0KK1xkZWZcYXJnY2hlY2tzcGFjZXNYIzEgXF5eTXtcYXJnY2hlY2tzcGFjZXNZIzFcXl5NfQorXGRlZlxhcmdjaGVja3NwYWNlc1kjMVxeXk0jMlxeXk0jM1xBcmdUZXJteyUKKyAgXGRlZlx0ZW1weyMzfSUKKyAgXGlmeFx0ZW1wXGVtcHR5CisgICAgJSBXZSBjYW5ub3QgdXNlIFxuZXh0IGhlcmUsIGFzIGl0IGhvbGRzIHRoZSBtYWNybyB0byBydW47CisgICAgJSB0aHVzIHdlIHJldXNlIFx0ZW1wLgorICAgIFxsZXRcdGVtcFxmaW5pc2hwYXJzZWFyZworICBcZWxzZQorICAgIFxsZXRcdGVtcFxhcmdjaGVja3NwYWNlcworICBcZmkKKyAgJSBQdXQgdGhlIHNwYWNlIHRva2VuIGluOgorICBcdGVtcCMxICMzXEFyZ1Rlcm0KK30KKworJSBJZiBhIF9kZWxpbWl0ZWRfIGFyZ3VtZW50IGlzIGVuY2xvc2VkIGluIGJyYWNlcywgdGhleSBnZXQgc3RyaXBwZWQ7IHNvCislIHRvIGdldCBfZXhhY3RseV8gdGhlIHJlc3Qgb2YgdGhlIGxpbmUsIHdlIGhhZCB0byBwcmV2ZW50IHN1Y2ggc2l0dWF0aW9uLgorJSBXZSBwcmVwZW5kZWQgYW4gXGVtcHR5IHRva2VuIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBhbmQgd2UgZXhwYW5kIGl0IG5vdywKKyUganVzdCBiZWZvcmUgcGFzc2luZyB0aGUgY29udHJvbCB0byBcbmV4dC4KKyUgKFNpbWlsYXJpbHksIHdlIGhhdmUgdG8gdGhpbmsgYWJvdXQgIzMgb2YgXGFyZ2NoZWNrc3BhY2VzWSBhYm92ZTogaXQgaXMKKyUgZWl0aGVyIHRoZSBudWxsIHN0cmluZywgb3IgaXQgZW5kcyB3aXRoIFxeXk0tLS10aHVzIHRoZXJlIGlzIG5vIGRhbmdlcgorJSB0aGF0IGEgcGFpciBvZiBicmFjZXMgd291bGQgYmUgc3RyaXBwZWQuCislCislIEJ1dCBmaXJzdCwgd2UgaGF2ZSB0byByZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIHRva2VuLgorJQorXGRlZlxmaW5pc2hwYXJzZWFyZyMxIFxBcmdUZXJte1xleHBhbmRhZnRlclxuZXh0XGV4cGFuZGFmdGVyeyMxfX0KKworJSBccGFyc2VhcmdkZWZcZm9vey4uLn0KKyUJaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvCislIFxkZWZcZm9ve1xwYXJzZWFyZ1xYZm9vfQorJSBcZGVmXFhmb28jMXsuLi59CislCislIEFjdHVhbGx5LCBJIHVzZSBcY3NuYW1lXHN0cmluZ1xmb29cZW5kY3NuYW1lLCBpZS4gXFxmb28sIGFzIGl0IGlzIG15CislIGZhdm91cml0ZSBUZVggdHJpY2suICAtLWthc2FsLCAxNm5vdjAzCisKK1xkZWZccGFyc2VhcmdkZWYjMXslCisgIFxleHBhbmRhZnRlciBcZG9wYXJzZWFyZ2RlZiBcY3NuYW1lXHN0cmluZyMxXGVuZGNzbmFtZSAjMSUKK30KK1xkZWZcZG9wYXJzZWFyZ2RlZiMxIzJ7JQorICBcZGVmIzJ7XHBhcnNlYXJnIzF9JQorICBcZGVmIzEjIzElCit9CisKKyUgU2V2ZXJhbCB1dGlsaXR5IGRlZmluaXRpb25zIHdpdGggYWN0aXZlIHNwYWNlOgoreworICBcb2JleXNwYWNlcworICBcZ2RlZlxvYmV5ZWRzcGFjZXsgfQorCisgICUgTWFrZSBlYWNoIHNwYWNlIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQgcHJvZHVjZSBhIG5vcm1hbCBpbnRlcndvcmQKKyAgJSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgRG9uJ3QgYWxsb3cgYSBsaW5lIGJyZWFrIGF0IHRoaXMgc3BhY2UsIGFzIHRoaXMKKyAgJSBpcyB1c2VkIG9ubHkgaW4gZW52aXJvbm1lbnRzIGxpa2UgQGV4YW1wbGUsIHdoZXJlIGVhY2ggbGluZSBvZiBpbnB1dAorICAlIHNob3VsZCBwcm9kdWNlIGEgbGluZSBvZiBvdXRwdXQgYW55d2F5LgorICAlCisgIFxnZGVmXHNlcHNwYWNlc3tcb2JleXNwYWNlc1xsZXQgPVx0aWV9CisKKyAgJSBJZiBhbiBpbmRleCBjb21tYW5kIGlzIHVzZWQgaW4gYW4gQGV4YW1wbGUgZW52aXJvbm1lbnQsIGFueSBzcGFjZXMKKyAgJSB0aGVyZWluIHNob3VsZCBiZWNvbWUgcmVndWxhciBzcGFjZXMgaW4gdGhlIHJhdyBpbmRleCBmaWxlLCBub3QgdGhlCisgICUgZXhwYW5zaW9uIG9mIFx0aWUgKFxsZWF2ZXZtb2RlIFxwZW5hbHR5IFxATSBcICkuCisgIFxnZGVmXHVuc2Vwc3BhY2Vze1xsZXQgPVxzcGFjZX0KK30KKworCitcZGVmXGZsdXNoY3J7XGlmeFxwYXJcbGlzcHBhciBcZGVmXG5leHQjIzF7fVxlbHNlIFxsZXRcbmV4dD1ccmVsYXggXGZpIFxuZXh0fQorCislIERlZmluZSB0aGUgZnJhbWV3b3JrIGZvciBlbnZpcm9ubWVudHMgaW4gdGV4aW5mby50ZXguICBJdCdzIHVzZWQgbGlrZSB0aGlzOgorJQorJSAgIFxlbnZkZWZcZm9vey4uLn0KKyUgICBcZGVmXEVmb297Li4ufQorJQorJSBJdCdzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBcZW52ZGVmIHRvIGluc2VydCBcYmVnaW5ncm91cCBiZWZvcmUgdGhlCislIGFjdHVhbCBib2R5OyBAZW5kIGNsb3NlcyB0aGUgZ3JvdXAgYWZ0ZXIgY2FsbGluZyBcRWZvby4gIFxlbnZkZWYgYWxzbworJSBkZWZpbmVzIFx0aGlzZW52LCBzbyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBrbm93bjsgQGVuZCBjaGVja3MKKyUgd2hldGhlciB0aGUgZW52aXJvbm1lbnQgbmFtZSBtYXRjaGVzLiAgVGhlIFxjaGVja2VudiBtYWNybyBjYW4gYWxzbyBiZQorJSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgdGhlIG9uZSBleHBlY3RlZC4KKyUKKyUgTm9uLWZhbHNlIGNvbmRpdGlvbmFscyAoQGlmdGV4LCBAaWZzZXQpIGRvbid0IGZpdCBpbnRvIHRoaXMsIHNvIHRoZXkKKyUgYXJlIG5vdCB0cmVhdGVkIGFzIGVudmlyb21lbnRzOyB0aGV5IGRvbid0IG9wZW4gYSBncm91cC4gIChUaGUKKyUgaW1wbGVtZW50YXRpb24gb2YgQGVuZCB0YWtlcyBjYXJlIG5vdCB0byBjYWxsIFxlbmRncm91cCBpbiB0aGlzCislIHNwZWNpYWwgY2FzZS4pCisKKworJSBBdCBydW50aW1lLCBlbnZpcm9ubWVudHMgc3RhcnQgd2l0aCB0aGlzOgorXGRlZlxzdGFydGVudmlyb25tZW50IzF7XGJlZ2luZ3JvdXBcZGVmXHRoaXNlbnZ7IzF9fQorJSBpbml0aWFsaXplCitcbGV0XHRoaXNlbnZcZW1wdHkKKworJSAuLi4gYnV0IHRoZXkgZ2V0IGRlZmluZWQgdmlhIGBgXGVudmRlZlxmb297Li4ufScnOgorXGxvbmdcZGVmXGVudmRlZiMxIzJ7XGRlZiMxe1xzdGFydGVudmlyb25tZW50IzEjMn19CitcZGVmXGVudnBhcnNlYXJnZGVmIzEjMntccGFyc2VhcmdkZWYjMXtcc3RhcnRlbnZpcm9ubWVudCMxIzJ9fQorCislIENoZWNrIHdoZXRoZXIgd2UncmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorXGRlZlxjaGVja2VudiMxeyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0aGlzZW52XHRlbXAKKyAgXGVsc2UKKyAgICBcYmFkZW52ZXJyCisgIFxmaQorfQorCislIEV2aXJvbm1lbnQgbWlzbWF0Y2gsICMxIGV4cGVjdGVkOgorXGRlZlxiYWRlbnZlcnJ7JQorICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICBcZXJybWVzc2FnZXtUaGlzIGNvbW1hbmQgY2FuIGFwcGVhciBvbmx5IFxpbmVudmlyb25tZW50XHRlbXAsCisgICAgbm90IFxpbmVudmlyb25tZW50XHRoaXNlbnZ9JQorfQorXGRlZlxpbmVudmlyb25tZW50IzF7JQorICBcaWZ4IzFcZW1wdHkKKyAgICBvdXQgb2YgYW55IGVudmlyb25tZW50JQorICBcZWxzZQorICAgIGluIGVudmlyb25tZW50IFxleHBhbmRhZnRlclxzdHJpbmcjMSUKKyAgXGZpCit9CisKKyUgQGVuZCBmb28gZXhlY3V0ZXMgdGhlIGRlZmluaXRpb24gb2YgXEVmb28uCislIEJ1dCBmaXJzdCwgaXQgZXhlY3V0ZXMgYSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIFxjaGVja2VudgorJQorXHBhcnNlYXJnZGVmXGVuZHslCisgIFxpZiAxXGNzbmFtZSBpc2NvbmQuIzFcZW5kY3NuYW1lCisgIFxlbHNlCisgICAgJSBUaGUgZ2VuZXJhbCB3b3JkaW5nIG9mIFxiYWRlbnZlcnIgbWF5IG5vdCBiZSBpZGVhbCwgYnV0Li4uIC0ta2FzYWwsIDA2bm92MDMKKyAgICBcZXhwYW5kYWZ0ZXJcY2hlY2tlbnZcY3NuYW1lIzFcZW5kY3NuYW1lCisgICAgXGNzbmFtZSBFIzFcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCitcbmV3aGVscFxFTXNpbXBsZXtQcmVzcyBSRVRVUk4gdG8gY29udGludWUufQorCisKKyUlIFNpbXBsZSBzaW5nbGUtY2hhcmFjdGVyIEAgY29tbWFuZHMKKworJSBAQCBwcmludHMgYW4gQAorJSBLbHVkZ2UgdGhpcyB1bnRpbCB0aGUgZm9udHMgYXJlIHJpZ2h0IChncnIpLgorXGRlZlxAe3tcdHRcY2hhcjY0fX0KKworJSBUaGlzIGlzIHR1cm5lZCBvZmYgYmVjYXVzZSBpdCB3YXMgbmV2ZXIgZG9jdW1lbnRlZAorJSBhbmQgeW91IGNhbiB1c2UgQHd7Li4ufSBhcm91bmQgYSBxdW90ZSB0byBzdXBwcmVzcyBsaWdhdHVyZXMuCislJSBEZWZpbmUgQGAgYW5kIEAnIHRvIGJlIHRoZSBzYW1lIGFzIGAgYW5kICcKKyUlIGJ1dCBzdXBwcmVzc2luZyBsaWdhdHVyZXMuCislXGRlZlxge3tgfX0KKyVcZGVmXCd7eyd9fQorCislIFVzZWQgdG8gZ2VuZXJhdGUgcXVvdGVkIGJyYWNlcy4KK1xkZWZcbXlsYnJhY2Uge3tcdHRcY2hhcjEyM319CitcZGVmXG15cmJyYWNlIHt7XHR0XGNoYXIxMjV9fQorXGxldFx7PVxteWxicmFjZQorXGxldFx9PVxteXJicmFjZQorXGJlZ2luZ3JvdXAKKyAgJSBEZWZpbml0aW9ucyB0byBwcm9kdWNlIFx7IGFuZCBcfSBjb21tYW5kcyBmb3IgaW5kaWNlcywKKyAgJSBhbmQgQHsgYW5kIEB9IGZvciB0aGUgYXV4L3RvYyBmaWxlcy4KKyAgXGNhdGNvZGVgXHsgPSBcb3RoZXIgXGNhdGNvZGVgXH0gPSBcb3RoZXIKKyAgXGNhdGNvZGVgXFsgPSAxIFxjYXRjb2RlYFxdID0gMgorICBcY2F0Y29kZWBcISA9IDAgXGNhdGNvZGVgXFwgPSBcb3RoZXIKKyAgIWdkZWYhbGJyYWNlY21kW1x7XSUKKyAgIWdkZWYhcmJyYWNlY21kW1x9XSUKKyAgIWdkZWYhbGJyYWNlYXRjbWRbQHtdJQorICAhZ2RlZiFyYnJhY2VhdGNtZFtAfV0lCishZW5kZ3JvdXAKKworJSBAY29tbWF7fSB0byBhdm9pZCAsIHBhcnNpbmcgcHJvYmxlbXMuCitcbGV0XGNvbW1hID0gLAorCislIEFjY2VudHM6IEAsIEBkb3RhY2NlbnQgQHJpbmdhY2NlbnQgQHViYXJhY2NlbnQgQHVkb3RhY2NlbnQKKyUgT3RoZXJzIGFyZSBkZWZpbmVkIGJ5IHBsYWluIFRlWDogQGAgQCcgQCIgQF4gQH4gQD0gQHUgQHYgQEguCitcbGV0XCwgPSBcYworXGxldFxkb3RhY2NlbnQgPSBcLgorXGRlZlxyaW5nYWNjZW50IzF7e1xhY2NlbnQyMyAjMX19CitcbGV0XHRpZWFjY2VudCA9IFx0CitcbGV0XHViYXJhY2NlbnQgPSBcYgorXGxldFx1ZG90YWNjZW50ID0gXGQKKworJSBPdGhlciBzcGVjaWFsIGNoYXJhY3RlcnM6IEBxdWVzdGlvbmRvd24gQGV4Y2xhbWRvd24gQG9yZGYgQG9yZG0KKyUgUGxhaW4gVGVYIGRlZmluZXM6IEBBQSBAQUUgQE8gQE9FIEBMIChwbHVzIGxvd2VyY2FzZSB2ZXJzaW9ucykgQHNzLgorXGRlZlxxdWVzdGlvbmRvd257P2B9CitcZGVmXGV4Y2xhbWRvd257IWB9CitcZGVmXG9yZGZ7XGxlYXZldm1vZGVccmFpc2UxZXhcaGJveHtcc2VsZWN0Zm9udHNcbGxsc2l6ZSBcdW5kZXJiYXJ7YX19fQorXGRlZlxvcmRte1xsZWF2ZXZtb2RlXHJhaXNlMWV4XGhib3h7XHNlbGVjdGZvbnRzXGxsbHNpemUgXHVuZGVyYmFye299fX0KKworJSBEb3RsZXNzIGkgYW5kIGRvdGxlc3MgaiwgdXNlZCBmb3IgYWNjZW50cy4KK1xkZWZcaW1hY3Jve2l9CitcZGVmXGptYWNyb3tqfQorXGRlZlxkb3RsZXNzIzF7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcaW1hY3JvIFxwdGV4aQorICBcZWxzZVxpZnhcdGVtcFxqbWFjcm8gXGoKKyAgXGVsc2UgXGVycm1lc3NhZ2V7QGRvdGxlc3MgY2FuIGJlIHVzZWQgb25seSB3aXRoIGkgb3Igan0lCisgIFxmaVxmaQorfQorCislIFRoZSBcVGVYe30gbG9nbywgYXMgaW4gcGxhaW4sIGJ1dCByZXNldHRpbmcgdGhlIHNwYWNpbmcgc28gdGhhdCBhCislIHBlcmlvZCBmb2xsb3dpbmcgY291bnRzIGFzIGVuZGluZyBhIHNlbnRlbmNlLiAgKElkZWEgZm91bmQgaW4gbGF0ZXguKQorJQorXGVkZWZcVGVYe1xUZVggXHNwYWNlZmFjdG9yPTEwMDAgfQorCislIEBMYVRlWHt9IGxvZ28uICBOb3QgcXVpdGUgdGhlIHNhbWUgcmVzdWx0cyBhcyB0aGUgZGVmaW5pdGlvbiBpbgorJSBsYXRleC5sdHgsIHNpbmNlIHdlIHVzZSBhIGRpZmZlcmVudCBmb250IGZvciB0aGUgcmFpc2VkIEE7IGl0J3MgbW9zdAorJSBjb252ZW5pZW50IGZvciB1cyB0byB1c2UgYW4gZXhwbGljaXRseSBzbWFsbGVyIGZvbnQsIHJhdGhlciB0aGFuIHVzaW5nCislIHRoZSBcc2NyaXB0c3R5bGUgZm9udCAoc2luY2Ugd2UgZG9uJ3QgcmVzZXQgXHNjcmlwdHN0eWxlIGFuZAorJSBcc2NyaXB0c2NyaXB0c3R5bGUpLgorJQorXGRlZlxMYVRlWHslCisgIExca2Vybi0uMzZlbQorICB7XHNldGJveDA9XGhib3h7VH0lCisgICBcdmJveCB0byBcaHQwe1xoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIEF9XHZzc319JQorICBca2Vybi0uMTVlbQorICBcVGVYCit9CisKKyUgQmUgc3VyZSB3ZSdyZSBpbiBob3Jpem9udGFsIG1vZGUgd2hlbiBkb2luZyBhIHRpZSwgc2luY2Ugd2UgbWFrZSBzcGFjZQorJSBlcXVpdmFsZW50IHRvIHRoaXMgaW4gQGV4YW1wbGUtbGlrZSBlbnZpcm9ubWVudHMuIE90aGVyd2lzZSwgYSBzcGFjZQorJSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aWxsIHN0YXJ0IHdpdGggXHBlbmFsdHkgLS0gYW5kCislIHNpbmNlIFxwZW5hbHR5IGlzIHZhbGlkIGluIHZlcnRpY2FsIG1vZGUsIHdlJ2QgZW5kIHVwIHB1dHRpbmcgdGhlCislIHBlbmFsdHkgb24gdGhlIHZlcnRpY2FsIGxpc3QgaW5zdGVhZCBvZiBpbiB0aGUgbmV3IHBhcmFncmFwaC4KK3tcY2F0Y29kZWBAID0gMTEKKyAlIEF2b2lkIHVzaW5nIFxATSBkaXJlY3RseSwgYmVjYXVzZSB0aGF0IGNhdXNlcyB0cm91YmxlCisgJSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB3cml0dGVuIGludG8gYW4gaW5kZXggZmlsZS4KKyBcZ2xvYmFsXGxldFx0aWVwZW5hbHR5ID0gXEBNCisgXGdkZWZcdGlle1xsZWF2ZXZtb2RlXHBlbmFsdHlcdGllcGVuYWx0eVwgfQorfQorCislIEA6IGZvcmNlcyBub3JtYWwgc2l6ZSB3aGl0ZXNwYWNlIGZvbGxvd2luZy4KK1xkZWZcOntcc3BhY2VmYWN0b3I9MTAwMCB9CisKKyUgQCogZm9yY2VzIGEgbGluZSBicmVhay4KK1xkZWZcKntcaGZpbFxicmVha1xoYm94e31caWdub3Jlc3BhY2VzfQorCislIEAvIGFsbG93cyBhIGxpbmUgYnJlYWsuCitcbGV0XC89XGFsbG93YnJlYWsKKworJSBALiBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgcGVyaW9kLgorXGRlZlwuey5cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAISBpcyBhbiBlbmQtb2Ytc2VudGVuY2UgYmFuZy4KK1xkZWZcIXshXHNwYWNlZmFjdG9yPVxlbmRvZnNlbnRlbmNlc3BhY2VmYWN0b3Jcc3BhY2V9CisKKyUgQD8gaXMgYW4gZW5kLW9mLXNlbnRlbmNlIHF1ZXJ5LgorXGRlZlw/ez9cc3BhY2VmYWN0b3I9XGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvclxzcGFjZX0KKworJSBAZnJlbmNoc3BhY2luZyBvbnxvZmYgIHNheXMgd2hldGhlciB0byBwdXQgZXh0cmEgc3BhY2UgYWZ0ZXIgcHVuY3R1YXRpb24uCislIAorXGRlZlxvbndvcmR7b259CitcZGVmXG9mZndvcmR7b2ZmfQorJQorXHBhcnNlYXJnZGVmXGZyZW5jaHNwYWNpbmd7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcb253b3JkIFxwbGFpbmZyZW5jaHNwYWNpbmcKKyAgXGVsc2VcaWZ4XHRlbXBcb2Zmd29yZCBccGxhaW5ub25mcmVuY2hzcGFjaW5nCisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmcmVuY2hzcGFjaW5nIG9wdGlvbiBgXHRlbXAnLCBtdXN0IGJlIG9uL29mZn0lCisgIFxmaVxmaQorfQorCislIEB3IHByZXZlbnRzIGEgd29yZCBicmVhay4gIFdpdGhvdXQgdGhlIFxsZWF2ZXZtb2RlLCBAdyBhdCB0aGUKKyUgYmVnaW5uaW5nIG9mIGEgcGFyYWdyYXBoLCB3aGVuIFRlWCBpcyBzdGlsbCBpbiB2ZXJ0aWNhbCBtb2RlLCB3b3VsZAorJSBwcm9kdWNlIGEgd2hvbGUgbGluZSBvZiBvdXRwdXQgaW5zdGVhZCBvZiBzdGFydGluZyB0aGUgcGFyYWdyYXBoLgorXGRlZlx3IzF7XGxlYXZldm1vZGVcaGJveHsjMX19CisKKyUgQGdyb3VwIC4uLiBAZW5kIGdyb3VwIGZvcmNlcyAuLi4gdG8gYmUgYWxsIG9uIG9uZSBwYWdlLCBieSBlbmNsb3NpbmcKKyUgaXQgaW4gYSBUZVggdmJveC4gIFdlIHVzZSBcdnRvcCBpbnN0ZWFkIG9mIFx2Ym94IHRvIGNvbnN0cnVjdCB0aGUgYm94CislIHRvIGtlZXAgaXRzIGhlaWdodCB0aGF0IG9mIGEgbm9ybWFsIGxpbmUuICBBY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvcgorJSBcdG9wc2tpcCAocC4xMTQgb2YgdGhlIFRlWGJvb2spLCB0aGUgZ2x1ZSBpbnNlcnRlZCBpcworJSBtYXggKFx0b3Bza2lwIC0gXGh0IChmaXJzdCBpdGVtKSwgMCkuICBJZiB0aGF0IGhlaWdodCBpcyBsYXJnZSwKKyUgdGhlcmVmb3JlLCBubyBnbHVlIGlzIGluc2VydGVkLCBhbmQgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGhlYWRsaW5lIGFuZAorJSB0aGUgdGV4dCBpcyBzbWFsbCwgd2hpY2ggbG9va3MgYmFkLgorJQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbiBpcyB0aGF0IHRoZSBncm91cCBtaWdodCBiZSB2ZXJ5IGxhcmdlLiAgVGhpcyBjYW4KKyUgY2F1c2UgdGhlIGdsdWUgb24gdGhlIHByZXZpb3VzIHBhZ2UgdG8gYmUgdW5kdWx5IHN0cmV0Y2hlZCwgYmVjYXVzZSBpdAorJSBkb2VzIG5vdCBoYXZlIG11Y2ggbWF0ZXJpYWwuICBJbiB0aGlzIGNhc2UsIGl0J3MgYmV0dGVyIHRvIGFkZCBhbgorJSBleHBsaWNpdCBcdmZpbGwgc28gdGhhdCB0aGUgZXh0cmEgc3BhY2UgaXMgYXQgdGhlIGJvdHRvbS4gIFRoZQorJSB0aHJlc2hvbGQgZm9yIGRvaW5nIHRoaXMgaXMgaWYgdGhlIGdyb3VwIGlzIG1vcmUgdGhhbiBcdmZpbGxsaW1pdAorJSBwZXJjZW50IG9mIGEgcGFnZSAoXHZmaWxsbGltaXQgY2FuIGJlIGNoYW5nZWQgaW5zaWRlIG9mIEB0ZXgpLgorJQorXG5ld2JveFxncm91cGJveAorXGRlZlx2ZmlsbGxpbWl0ezAuN30KKyUKK1xlbnZkZWZcZ3JvdXB7JQorICBcaWZudW1cY2F0Y29kZWBcXl5NPVxhY3RpdmUgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxncm91cGludmFsaWRoZWxwCisgICAgXGVycm1lc3NhZ2V7QGdyb3VwIGludmFsaWQgaW4gY29udGV4dCB3aGVyZSBmaWxsaW5nIGlzIGVuYWJsZWR9JQorICBcZmkKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgIFxzZXRib3hcZ3JvdXBib3ggPSBcdnRvcFxiZ3JvdXAKKyAgICAlIERvIEBjb21tZW50IHNpbmNlIHdlIGFyZSBjYWxsZWQgaW5zaWRlIGFuIGVudmlyb25tZW50IHN1Y2ggYXMKKyAgICAlIEBleGFtcGxlLCB3aGVyZSBlYWNoIGVuZC1vZi1saW5lIGluIHRoZSBpbnB1dCBjYXVzZXMgYW4KKyAgICAlIGVuZC1vZi1saW5lIGluIHRoZSBvdXRwdXQuICBXZSBkb24ndCB3YW50IHRoZSBlbmQtb2YtbGluZSBhZnRlcgorICAgICUgdGhlIGBAZ3JvdXAnIHRvIHB1dCBleHRyYSBzcGFjZSBpbiB0aGUgb3V0cHV0LiAgU2luY2UgQGdyb3VwCisgICAgJSBzaG91bGQgYXBwZWFyIG9uIGEgbGluZSBieSBpdHNlbGYgKGFjY29yZGluZyB0byB0aGUgVGV4aW5mbworICAgICUgbWFudWFsKSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgZWF0aW5nIGFueSB1c2VyIHRleHQuCisgICAgXGNvbW1lbnQKK30KKyUKKyUgVGhlIFx2dG9wIHByb2R1Y2VzIGEgYm94IHdpdGggbm9ybWFsIGhlaWdodCBhbmQgbGFyZ2UgZGVwdGg7IHRodXMsIFRlWCBwdXRzCislIFxiYXNlbGluZXNraXAgZ2x1ZSBiZWZvcmUgaXQsIGFuZCAod2hlbiB0aGUgbmV4dCBsaW5lIG9mIHRleHQgaXMgZG9uZSkKKyUgXGxpbmVza2lwIGdsdWUgYWZ0ZXIgaXQuICBUaHVzLCBzcGFjZSBiZWxvdyBpcyBub3QgcXVpdGUgZXF1YWwgdG8gc3BhY2UKKyUgYWJvdmUuICBCdXQgaXQncyBwcmV0dHkgY2xvc2UuCitcZGVmXEVncm91cHslCisgICAgJSBUbyBnZXQgY29ycmVjdCBpbnRlcmxpbmUgc3BhY2UgYmV0d2VlbiB0aGUgbGFzdCBsaW5lIG9mIHRoZSBncm91cAorICAgICUgYW5kIHRoZSBmaXJzdCBsaW5lIGFmdGVyd2FyZHMsIHdlIGhhdmUgdG8gcHJvcGFnYXRlIFxwcmV2ZGVwdGguCisgICAgXGVuZGdyYWYgJSBOb3QgXHBhciwgYXMgaXQgbWF5IGhhdmUgYmVlbiBzZXQgdG8gXGxpc3BwYXIuCisgICAgXGdsb2JhbFxkaW1lbjEgPSBccHJldmRlcHRoCisgIFxlZ3JvdXAgICAgICAgICAgICUgRW5kIHRoZSBcdnRvcC4KKyAgJSBcZGltZW4wIGlzIHRoZSB2ZXJ0aWNhbCBzaXplIG9mIHRoZSBncm91cCdzIGJveC4KKyAgXGRpbWVuMCA9IFxodFxncm91cGJveCAgXGFkdmFuY2VcZGltZW4wIGJ5IFxkcFxncm91cGJveAorICAlIFxkaW1lbjIgaXMgaG93IG11Y2ggc3BhY2UgaXMgbGVmdCBvbiB0aGUgcGFnZSAobW9yZSBvciBsZXNzKS4KKyAgXGRpbWVuMiA9IFxwYWdlaGVpZ2h0ICAgXGFkdmFuY2VcZGltZW4yIGJ5IC1ccGFnZXRvdGFsCisgICUgaWYgdGhlIGdyb3VwIGRvZXNuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIGFuZCBpdCdzIGEgYmlnIGJpZworICAlIGdyb3VwLCBmb3JjZSBhIHBhZ2UgYnJlYWsuCisgIFxpZmRpbSBcZGltZW4wID4gXGRpbWVuMgorICAgIFxpZmRpbSBccGFnZXRvdGFsIDwgXHZmaWxsbGltaXRccGFnZWhlaWdodAorICAgICAgXHBhZ2UKKyAgICBcZmkKKyAgXGZpCisgIFxib3hcZ3JvdXBib3gKKyAgXHByZXZkZXB0aCA9IFxkaW1lbjEKKyAgXGNoZWNraW5zZXJ0cworfQorJQorJSBUZVggcHV0cyBpbiBhbiBcZXNjYXBlY2hhciAoaS5lLiwgYEAnKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBoZWxwCislIG1lc3NhZ2UsIHNvIHRoaXMgZW5kcyB1cCBwcmludGluZyBgQGdyb3VwIGNhbiBvbmx5IC4uLicuCislCitcbmV3aGVscFxncm91cGludmFsaWRoZWxweyUKK2dyb3VwIGNhbiBvbmx5IGJlIHVzZWQgaW4gZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUsXl5KJQord2hlcmUgZWFjaCBsaW5lIG9mIGlucHV0IHByb2R1Y2VzIGEgbGluZSBvZiBvdXRwdXQufQorCislIEBuZWVkIHNwYWNlLWluLW1pbHMKKyUgZm9yY2VzIGEgcGFnZSBicmVhayBpZiB0aGVyZSBpcyBub3Qgc3BhY2UtaW4tbWlscyByZW1haW5pbmcuCisKK1xuZXdkaW1lblxtaWwgIFxtaWw9MC4wMDFpbgorCislIE9sZCBkZWZpbml0aW9uLS1kaWRuJ3Qgd29yay4KKyVccGFyc2VhcmdkZWZcbmVlZHtccGFyICUKKyUlIFRoaXMgbWV0aG9kIHRyaWVzIHRvIG1ha2UgVGVYIGJyZWFrIHRoZSBwYWdlIG5hdHVyYWxseQorJSUgaWYgdGhlIGRlcHRoIG9mIHRoZSBib3ggZG9lcyBub3QgZml0LgorJXtcYmFzZWxpbmVza2lwPTBwdCUKKyVcdnRvcCB0byAjMVxtaWx7XHZmaWx9XGtlcm4gLSMxXG1pbFxub2JyZWFrCislXHByZXZkZXB0aD0tMTAwMHB0CislfX0KKworXHBhcnNlYXJnZGVmXG5lZWR7JQorICAlIEVuc3VyZSB2ZXJ0aWNhbCBtb2RlLCBzbyB3ZSBkb24ndCBtYWtlIGEgYmlnIGJveCBpbiB0aGUgbWlkZGxlIG9mIGEKKyAgJSBwYXJhZ3JhcGguCisgIFxwYXIKKyAgJQorICAlIElmIHRoZSBAbmVlZCB2YWx1ZSBpcyBsZXNzIHRoYW4gb25lIGxpbmUgc3BhY2UsIGl0J3MgdXNlbGVzcy4KKyAgXGRpbWVuMCA9ICMxXG1pbAorICBcZGltZW4yID0gXGh0XHN0cnV0Ym94CisgIFxhZHZhbmNlXGRpbWVuMiBieSBcZHBcc3RydXRib3gKKyAgXGlmZGltXGRpbWVuMCA+IFxkaW1lbjIKKyAgICAlCisgICAgJSBEbyBhIFxzdHJ1dCBqdXN0IHRvIG1ha2UgdGhlIGhlaWdodCBvZiB0aGlzIGJveCBiZSBub3JtYWwsIHNvIHRoZQorICAgICUgbm9ybWFsIGxlYWRpbmcgaXMgaW5zZXJ0ZWQgcmVsYXRpdmUgdG8gdGhlIHByZWNlZGluZyBsaW5lLgorICAgICUgQW5kIGEgcGFnZSBicmVhayBoZXJlIGlzIGZpbmUuCisgICAgXHZ0b3AgdG8gIzFcbWlse1xzdHJ1dFx2ZmlsfSUKKyAgICAlCisgICAgJSBUZVggZG9lcyBub3QgZXZlbiBjb25zaWRlciBwYWdlIGJyZWFrcyBpZiBhIHBlbmFsdHkgYWRkZWQgdG8gdGhlCisgICAgJSBtYWluIHZlcnRpY2FsIGxpc3QgaXMgMTAwMDAgb3IgbW9yZS4gIEJ1dCBpbiBvcmRlciB0byBzZWUgaWYgdGhlCisgICAgJSBlbXB0eSBib3ggd2UganVzdCBhZGRlZCBmaXRzIG9uIHRoZSBwYWdlLCB3ZSBtdXN0IG1ha2UgaXQgY29uc2lkZXIKKyAgICAlIHBhZ2UgYnJlYWtzLiAgT24gdGhlIG90aGVyIGhhbmQsIHdlIGRvbid0IHdhbnQgdG8gYWN0dWFsbHkgYnJlYWsgdGhlCisgICAgJSBwYWdlIGFmdGVyIHRoZSBlbXB0eSBib3guICBTbyB3ZSB1c2UgYSBwZW5hbHR5IG9mIDk5OTkuCisgICAgJQorICAgICUgVGhlcmUgaXMgYW4gZXh0cmVtZWx5IHNtYWxsIGNoYW5jZSB0aGF0IFRlWCB3aWxsIGFjdHVhbGx5IGJyZWFrIHRoZQorICAgICUgcGFnZSBhdCB0aGlzIFxwZW5hbHR5LCBpZiB0aGVyZSBhcmUgbm8gb3RoZXIgZmVhc2libGUgYnJlYWtwb2ludHMgaW4KKyAgICAlIHNpZ2h0LiAgKElmIHRoZSB1c2VyIGlzIHVzaW5nIGxvdHMgb2YgYmlnIEBncm91cCBjb21tYW5kcywgd2hpY2gKKyAgICAlIGFsbW9zdC1idXQtbm90LXF1aXRlIGZpbGwgdXAgYSBwYWdlLCBUZVggd2lsbCBoYXZlIGEgaGFyZCB0aW1lIGRvaW5nCisgICAgJSBnb29kIHBhZ2UgYnJlYWtpbmcsIGZvciBleGFtcGxlLikgIEhvd2V2ZXIsIEkgY291bGQgbm90IGNvbnN0cnVjdCBhbgorICAgICUgZXhhbXBsZSB3aGVyZSBhIHBhZ2UgYnJva2UgYXQgdGhpcyBccGVuYWx0eTsgaWYgaXQgaGFwcGVucyBpbiBhIHJlYWwKKyAgICAlIGRvY3VtZW50LCB0aGVuIHdlIGNhbiByZWNvbnNpZGVyIG91ciBzdHJhdGVneS4KKyAgICBccGVuYWx0eTk5OTkKKyAgICAlCisgICAgJSBCYWNrIHVwIGJ5IHRoZSBzaXplIG9mIHRoZSBib3gsIHdoZXRoZXIgd2UgZGlkIGEgcGFnZSBicmVhayBvciBub3QuCisgICAgXGtlcm4gLSMxXG1pbAorICAgICUKKyAgICAlIERvIG5vdCBhbGxvdyBhIHBhZ2UgYnJlYWsgcmlnaHQgYWZ0ZXIgdGhpcyBrZXJuLgorICAgIFxub2JyZWFrCisgIFxmaQorfQorCislIEBiciAgIGZvcmNlcyBwYXJhZ3JhcGggYnJlYWsgKGFuZCBpcyB1bmRvY3VtZW50ZWQpLgorCitcbGV0XGJyID0gXHBhcgorCislIEBwYWdlIGZvcmNlcyB0aGUgc3RhcnQgb2YgYSBuZXcgcGFnZS4KKyUKK1xkZWZccGFnZXtccGFyXHZmaWxsXHN1cGVyZWplY3R9CisKKyUgQGV4ZGVudCB0ZXh0Li4uLgorJSBvdXRwdXRzIHRleHQgb24gc2VwYXJhdGUgbGluZSBpbiByb21hbiBmb250LCBzdGFydGluZyBhdCBzdGFuZGFyZCBwYWdlIG1hcmdpbgorCislIFRoaXMgcmVjb3JkcyB0aGUgYW1vdW50IG9mIGluZGVudCBpbiB0aGUgaW5uZXJtb3N0IGVudmlyb25tZW50LgorJSBUaGF0J3MgaG93IG11Y2ggXGV4ZGVudCBzaG91bGQgdGFrZSBvdXQuCitcbmV3c2tpcFxleGRlbnRhbW91bnQKKworJSBUaGlzIGRlZm4gaXMgdXNlZCBpbnNpZGUgZmlsbCBlbnZpcm9ubWVudHMgc3VjaCBhcyBAZGVmdW4uCitccGFyc2VhcmdkZWZcZXhkZW50e1xoZmlsXGJyZWFrXGhib3h7XGtlcm4gLVxleGRlbnRhbW91bnR7XHJtIzF9fVxoZmlsXGJyZWFrfQorCislIFRoaXMgZGVmbiBpcyB1c2VkIGluc2lkZSBub2ZpbGwgZW52aXJvbm1lbnRzIHN1Y2ggYXMgQGV4YW1wbGUuCitccGFyc2VhcmdkZWZcbm9maWxsZXhkZW50e3tcYWR2YW5jZSBcbGVmdHNraXAgYnkgLVxleGRlbnRhbW91bnQKKyAgXGxlZnRsaW5le1xoc2tpcFxsZWZ0c2tpcHtccm0jMX19fX0KKworJSBAaW5tYXJnaW57V0hJQ0h9e1RFWFR9IHB1dHMgVEVYVCBpbiB0aGUgV0hJQ0ggbWFyZ2luIG5leHQgdG8gdGhlIGN1cnJlbnQKKyUgcGFyYWdyYXBoLiAgRm9yIG1vcmUgZ2VuZXJhbCBwdXJwb3NlcywgdXNlIHRoZSBcbWFyZ2luIGluc2VydGlvbgorJSBjbGFzcy4gIFdISUNIIGlzIGBsJyBvciBgcicuCislCitcbmV3c2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlubWFyZ2luc3BhY2luZz0xY20KK1xkZWZcc3RydXRkZXB0aHtcZHBcc3RydXRib3h9CislCitcZGVmXGRvaW5tYXJnaW4jMSMye1xzdHJ1dFx2YWRqdXN0eyUKKyAgXG5vYnJlYWsKKyAgXGtlcm4tXHN0cnV0ZGVwdGgKKyAgXHZ0b3AgdG8gXHN0cnV0ZGVwdGh7JQorICAgIFxiYXNlbGluZXNraXA9XHN0cnV0ZGVwdGgKKyAgICBcdnNzCisgICAgJSBpZiB5b3UgaGF2ZSBtdWx0aXBsZSBsaW5lcyBvZiBzdHVmZiB0byBwdXQgaGVyZSwgeW91J2xsIG5lZWQgdG8KKyAgICAlIG1ha2UgdGhlIHZib3ggeW91cnNlbGYgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUuCisgICAgXGlmeCMxbCUKKyAgICAgIFxsbGFwe1xpZ25vcmVzcGFjZXMgIzJcaHNraXBcaW5tYXJnaW5zcGFjaW5nfSUKKyAgICBcZWxzZQorICAgICAgXHJsYXB7XGhza2lwXGhzaXplIFxoc2tpcFxpbm1hcmdpbnNwYWNpbmcgXGlnbm9yZXNwYWNlcyAjMn0lCisgICAgXGZpCisgICAgXG51bGwKKyAgfSUKK319CitcZGVmXGlubGVmdG1hcmdpbntcZG9pbm1hcmdpbiBsfQorXGRlZlxpbnJpZ2h0bWFyZ2lue1xkb2lubWFyZ2luIHJ9CislCislIEBpbm1hcmdpbntURVhUIFssIFJJR0hULVRFWFRdfQorJSAoaWYgUklHSFQtVEVYVCBpcyBnaXZlbiwgdXNlIFRFWFQgZm9yIGxlZnQgcGFnZSwgUklHSFQtVEVYVCBmb3IgcmlnaHQ7CislIGVsc2UgdXNlIFRFWFQgZm9yIGJvdGgpLgorJQorXGRlZlxpbm1hcmdpbiMxe1xwYXJzZWlubWFyZ2luICMxLCxcZmluaXNofQorXGRlZlxwYXJzZWlubWFyZ2luIzEsIzIsIzNcZmluaXNoeyUgbm90IHBlcmZlY3QsIGJ1dCBiZXR0ZXIgdGhhbiBub3RoaW5nLgorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICBcaWZkaW1cd2QwID4gMHB0CisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIGJvdGggdGV4dHMKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMn0lCisgIFxlbHNlCisgICAgXGRlZlxsZWZ0dGV4dHsjMX0lICBoYXZlIG9ubHkgb25lIHRleHQKKyAgICBcZGVmXHJpZ2h0dGV4dHsjMX0lCisgIFxmaQorICAlCisgIFxpZm9kZFxwYWdlbm8KKyAgICBcZGVmXHRlbXB7XGlucmlnaHRtYXJnaW5ccmlnaHR0ZXh0fSUgb2RkIHBhZ2UgLT4gb3V0c2lkZSBpcyByaWdodCBtYXJnaW4KKyAgXGVsc2UKKyAgICBcZGVmXHRlbXB7XGlubGVmdG1hcmdpblxsZWZ0dGV4dH0lCisgIFxmaQorICBcdGVtcAorfQorCislIEBpbmNsdWRlIGZpbGUgICAgaW5zZXJ0IHRleHQgb2YgdGhhdCBmaWxlIGFzIGlucHV0LgorJQorXGRlZlxpbmNsdWRle1xwYXJzZWFyZ3VzaW5nXGZpbGVuYW1lY2F0Y29kZXNcaW5jbHVkZXp6en0KK1xkZWZcaW5jbHVkZXp6eiMxeyUKKyAgXHB1c2h0aGlzZmlsZXN0YWNrCisgIFxkZWZcdGhpc2ZpbGV7IzF9JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGRlZlx0ZW1we1xpbnB1dCAjMSB9JQorICAgIFxleHBhbmRhZnRlcgorICB9XHRlbXAKKyAgXHBvcHRoaXNmaWxlc3RhY2sKK30KK1xkZWZcZmlsZW5hbWVjYXRjb2Rlc3slCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICBcY2F0Y29kZWB+PVxvdGhlcgorICBcY2F0Y29kZWBePVxvdGhlcgorICBcY2F0Y29kZWBfPVxvdGhlcgorICBcY2F0Y29kZWB8PVxvdGhlcgorICBcY2F0Y29kZWA8PVxvdGhlcgorICBcY2F0Y29kZWA+PVxvdGhlcgorICBcY2F0Y29kZWArPVxvdGhlcgorICBcY2F0Y29kZWAtPVxvdGhlcgorfQorCitcZGVmXHB1c2h0aGlzZmlsZXN0YWNreyUKKyAgXGV4cGFuZGFmdGVyXHB1c2h0aGlzZmlsZXN0YWNrWFxwb3B0aGlzZmlsZXN0YWNrXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1h7JQorICBcZXhwYW5kYWZ0ZXJccHVzaHRoaXNmaWxlc3RhY2tZXHRoaXNmaWxlXFN0YWNrVGVybQorfQorXGRlZlxwdXNodGhpc2ZpbGVzdGFja1kgIzFcU3RhY2tUZXJtICMyXFN0YWNrVGVybSB7JQorICBcZ2RlZlxwb3B0aGlzZmlsZXN0YWNre1xnZGVmXHRoaXNmaWxleyMxfVxnZGVmXHBvcHRoaXNmaWxlc3RhY2t7IzJ9fSUKK30KKworXGRlZlxwb3B0aGlzZmlsZXN0YWNre1xlcnJ0aGlzZmlsZXN0YWNrZW1wdHl9CitcZGVmXGVycnRoaXNmaWxlc3RhY2tlbXB0eXtcZXJybWVzc2FnZXtJbnRlcm5hbCBlcnJvcjoKKyAgdGhlIHN0YWNrIG9mIGZpbGVuYW1lcyBpcyBlbXB0eS59fQorCitcZGVmXHRoaXNmaWxle30KKworJSBAY2VudGVyIGxpbmUKKyUgb3V0cHV0cyB0aGF0IGxpbmUsIGNlbnRlcmVkLgorJQorXHBhcnNlYXJnZGVmXGNlbnRlcnslCisgIFxpZmhtb2RlCisgICAgXGxldFxuZXh0XGNlbnRlckgKKyAgXGVsc2UKKyAgICBcbGV0XG5leHRcY2VudGVyVgorICBcZmkKKyAgXG5leHR7XGhmaWwgXGlnbm9yZXNwYWNlcyMxXHVuc2tpcCBcaGZpbH0lCit9CitcZGVmXGNlbnRlckgjMXslCisgIHslCisgICAgXGhmaWxcYnJlYWsKKyAgICBcYWR2YW5jZVxoc2l6ZSBieSAtXGxlZnRza2lwCisgICAgXGFkdmFuY2VcaHNpemUgYnkgLVxyaWdodHNraXAKKyAgICBcbGluZXsjMX0lCisgICAgXGJyZWFrCisgIH0lCit9CitcZGVmXGNlbnRlclYjMXtcbGluZXtca2VyblxsZWZ0c2tpcCAjMVxrZXJuXHJpZ2h0c2tpcH19CisKKyUgQHNwIG4gICBvdXRwdXRzIG4gbGluZXMgb2YgdmVydGljYWwgc3BhY2UKKworXHBhcnNlYXJnZGVmXHNwe1x2c2tpcCAjMVxiYXNlbGluZXNraXB9CisKKyUgQGNvbW1lbnQgLi4ubGluZSB3aGljaCBpcyBpZ25vcmVkLi4uCislIEBjIGlzIHRoZSBzYW1lIGFzIEBjb21tZW50CislIEBpZ25vcmUgLi4uIEBlbmQgaWdub3JlICBpcyBhbm90aGVyIHdheSB0byB3cml0ZSBhIGNvbW1lbnQKKworXGRlZlxjb21tZW50e1xiZWdpbmdyb3VwIFxjYXRjb2RlYFxeXk09XG90aGVyJQorXGNhdGNvZGVgXEA9XG90aGVyIFxjYXRjb2RlYFx7PVxvdGhlciBcY2F0Y29kZWBcfT1cb3RoZXIlCitcY29tbWVudHh4eH0KK3tcY2F0Y29kZWBcXl5NPVxvdGhlciBcZ2RlZlxjb21tZW50eHh4IzFeXk17XGVuZGdyb3VwfX0KKworXGxldFxjPVxjb21tZW50CisKKyUgQHBhcmFncmFwaGluZGVudCBOQ0hBUlMKKyUgV2UnbGwgdXNlIGVtcyBmb3IgTkNIQVJTLCBjbG9zZSBlbm91Z2guCislIE5DSEFSUyBjYW4gYWxzbyBiZSB0aGUgd29yZCBgYXNpcycgb3IgYG5vbmUnLgorJSBXZSBjYW5ub3QgZmVhc2libHkgaW1wbGVtZW50IEBwYXJhZ3JhcGhpbmRlbnQgYXNpcywgdGhvdWdoLgorJQorXGRlZlxhc2lzd29yZHthc2lzfSAlIG5vIHRyYW5zbGF0aW9uLCB0aGVzZSBhcmUga2V5d29yZHMKK1xkZWZcbm9uZXdvcmR7bm9uZX0KKyUKK1xwYXJzZWFyZ2RlZlxwYXJhZ3JhcGhpbmRlbnR7JQorICBcZGVmXHRlbXB7IzF9JQorICBcaWZ4XHRlbXBcYXNpc3dvcmQKKyAgXGVsc2UKKyAgICBcaWZ4XHRlbXBcbm9uZXdvcmQKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gMHB0CisgICAgXGVsc2UKKyAgICAgIFxkZWZhdWx0cGFyaW5kZW50ID0gIzFlbQorICAgIFxmaQorICBcZmkKKyAgXHBhcmluZGVudCA9IFxkZWZhdWx0cGFyaW5kZW50Cit9CisKKyUgQGV4YW1wbGVpbmRlbnQgTkNIQVJTCislIFdlJ2xsIHVzZSBlbXMgZm9yIE5DSEFSUyBsaWtlIEBwYXJhZ3JhcGhpbmRlbnQuCislIEl0IHNlZW1zIEBleGFtcGxlaW5kZW50IGFzaXMgaXNuJ3QgbmVjZXNzYXJ5LCBidXQKKyUgSSBwcmVzZXJ2ZSBpdCB0byBtYWtlIGl0IHNpbWlsYXIgdG8gQHBhcmFncmFwaGluZGVudC4KK1xwYXJzZWFyZ2RlZlxleGFtcGxlaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXGFzaXN3b3JkCisgIFxlbHNlCisgICAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgICBcbGlzcG5hcnJvd2luZyA9IDBwdAorICAgIFxlbHNlCisgICAgICBcbGlzcG5hcnJvd2luZyA9ICMxZW0KKyAgICBcZmkKKyAgXGZpCit9CisKKyUgQGZpcnN0cGFyYWdyYXBoaW5kZW50IFdPUkQKKyUgSWYgV09SRCBpcyBgbm9uZScsIHRoZW4gc3VwcHJlc3MgaW5kZW50YXRpb24gb2YgdGhlIGZpcnN0IHBhcmFncmFwaAorJSBhZnRlciBhIHNlY3Rpb24gaGVhZGluZy4gIElmIFdPUkQgaXMgYGluc2VydCcsIHRoZW4gZG8gaW5kZW50IGF0IHN1Y2gKKyUgcGFyYWdyYXBocy4KKyUKKyUgVGhlIHBhcmFncmFwaCBpbmRlbnRhdGlvbiBpcyBzdXBwcmVzc2VkIG9yIG5vdCBieSBjYWxsaW5nCislIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50LCB3aGljaCB0aGUgc2VjdGlvbmluZyBjb21tYW5kcyBkby4KKyUgV2Ugc3dpdGNoIHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgYmFjayBhbmQgZm9ydGggYWNjb3JkaW5nIHRvIFdPUkQuCislIEJ5IGRlZmF1bHQsIHdlIHN1cHByZXNzIGluZGVudGF0aW9uLgorJQorXGRlZlxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50e1xkb3N1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitcZGVmXGluc2VydHdvcmR7aW5zZXJ0fQorJQorXHBhcnNlYXJnZGVmXGZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGRlZlx0ZW1weyMxfSUKKyAgXGlmeFx0ZW1wXG5vbmV3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXGRvc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorICBcZWxzZVxpZnhcdGVtcFxpbnNlcnR3b3JkCisgICAgXGxldFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50ID0gXHJlbGF4CisgIFxlbHNlCisgICAgXGVycmhlbHAgPSBcRU1zaW1wbGUKKyAgICBcZXJybWVzc2FnZXtVbmtub3duIEBmaXJzdHBhcmFncmFwaGluZGVudCBvcHRpb24gYFx0ZW1wJ30lCisgIFxmaVxmaQorfQorCislIEhlcmUgaXMgaG93IHdlIGFjdHVhbGx5IHN1cHByZXNzIGluZGVudGF0aW9uLiAgUmVkZWZpbmUgXGV2ZXJ5cGFyIHRvCislIFxrZXJuIGJhY2t3YXJkcyBieSBccGFyaW5kZW50LCBhbmQgdGhlbiByZXNldCBpdHNlbGYgdG8gZW1wdHkuCislCislIFdlIGFsc28gbWFrZSBcaW5kZW50IGl0c2VsZiBub3QgYWN0dWFsbHkgZG8gYW55dGhpbmcgdW50aWwgdGhlIG5leHQKKyUgcGFyYWdyYXBoLgorJQorXGdkZWZcZG9zdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdkZWZcaW5kZW50eyUKKyAgICBccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50CisgICAgXGluZGVudAorICB9JQorICBcZ2RlZlxub2luZGVudHslCisgICAgXHJlc3RvcmVmaXJzdHBhcmFncmFwaGluZGVudAorICAgIFxub2luZGVudAorICB9JQorICBcZ2xvYmFsXGV2ZXJ5cGFyID0geyUKKyAgICBca2VybiAtXHBhcmluZGVudAorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKKyAgfSUKK30KKworXGdkZWZccmVzdG9yZWZpcnN0cGFyYWdyYXBoaW5kZW50eyUKKyAgXGdsb2JhbCBcbGV0IFxpbmRlbnQgPSBccHRleGluZGVudAorICBcZ2xvYmFsIFxsZXQgXG5vaW5kZW50ID0gXHB0ZXhub2luZGVudAorICBcZ2xvYmFsIFxldmVyeXBhciA9IHt9JQorfQorCisKKyUgQGFzaXMganVzdCB5aWVsZHMgaXRzIGFyZ3VtZW50LiAgVXNlZCB3aXRoIEB0YWJsZSwgZm9yIGV4YW1wbGUuCislCitcZGVmXGFzaXMjMXsjMX0KKworJSBAbWF0aCBvdXRwdXRzIGl0cyBhcmd1bWVudCBpbiBtYXRoIG1vZGUuCislCislIE9uZSBjb21wbGljYXRpb246IF8gdXN1YWxseSBtZWFucyBzdWJzY3JpcHRzLCBidXQgaXQgY291bGQgYWxzbyBtZWFuCislIGFuIGFjdHVhbCBfIGNoYXJhY3RlciwgYXMgaW4gQG1hdGh7QHZhcntzb21lX3ZhcmlhYmxlfSArIDF9LiAgU28gbWFrZQorJSBfIGFjdGl2ZSwgYW5kIGRpc3Rpbmd1aXNoIGJ5IHNlZWluZyBpZiB0aGUgY3VycmVudCBmYW1pbHkgaXMgXHNsZmFtLAorJSB3aGljaCBpcyB3aGF0IEB2YXIgdXNlcy4KK3sKKyAgXGNhdGNvZGVcdW5kZXJDaGFyID0gXGFjdGl2ZQorICBcZ2RlZlxtYXRodW5kZXJzY29yZXslCisgICAgXGNhdGNvZGVcdW5kZXJDaGFyPVxhY3RpdmUKKyAgICBcZGVmX3tcaWZudW1cZmFtPVxzbGZhbSBcX1xlbHNlXHNiXGZpfSUKKyAgfQorfQorJSBBbm90aGVyIGNvbXBsaWNhdGlvbjogd2Ugd2FudCBcXCAoYW5kIEBcKSB0byBvdXRwdXQgYSBcIGNoYXJhY3Rlci4KKyUgRllJLCBwbGFpbi50ZXggdXNlcyBcXCBhcyBhIHRlbXBvcmFyeSBjb250cm9sIHNlcXVlbmNlICh3aHk/KSwgYnV0CislIHRoaXMgaXMgbm90IGFkdmVydGlzZWQgYW5kIHdlIGRvbid0IGNhcmUuICBUZXhpbmZvIGRvZXMgbm90CislIG90aGVyd2lzZSBkZWZpbmUgQFwuCislCislIFRoZSBcbWF0aGNoYXIgaXMgY2xhc3M9MD1vcmRpbmFyeSwgZmFtaWx5PTc9dHRmYW0sIHBvc2l0aW9uPTVDPVwuCitcZGVmXG1hdGhiYWNrc2xhc2h7XGlmbnVtXGZhbT1cdHRmYW0gXG1hdGhjaGFyIjA3NUMgXGVsc2VcYmFja3NsYXNoIFxmaX0KKyUKK1xkZWZcbWF0aHslCisgIFx0ZXgKKyAgXG1hdGh1bmRlcnNjb3JlCisgIFxsZXRcXCA9IFxtYXRoYmFja3NsYXNoCisgIFxtYXRoYWN0aXZlCisgICRcZmluaXNobWF0aAorfQorXGRlZlxmaW5pc2htYXRoIzF7IzEkXGVuZGdyb3VwfSAgJSBDbG9zZSB0aGUgZ3JvdXAgb3BlbmVkIGJ5IFx0ZXguCisKKyUgU29tZSBhY3RpdmUgY2hhcmFjdGVycyAoc3VjaCBhcyA8KSBhcmUgc3BhY2VkIGRpZmZlcmVudGx5IGluIG1hdGguCislIFdlIGhhdmUgdG8gcmVzZXQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gY2FzZSB0aGUgQG1hdGggd2FzIGFuIGFyZ3VtZW50CislIHRvIGEgY29tbWFuZCB3aGljaCBzZXRzIHRoZSBjYXRjb2RlcyAoc3VjaCBhcyBAaXRlbSBvciBAc2VjdGlvbikuCislCit7CisgIFxjYXRjb2RlYF4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYDwgPSBcYWN0aXZlCisgIFxjYXRjb2RlYD4gPSBcYWN0aXZlCisgIFxjYXRjb2RlYCsgPSBcYWN0aXZlCisgIFxnZGVmXG1hdGhhY3RpdmV7JQorICAgIFxsZXReID0gXHB0ZXhoYXQKKyAgICBcbGV0PCA9IFxwdGV4bGVzcworICAgIFxsZXQ+ID0gXHB0ZXhndHIKKyAgICBcbGV0KyA9IFxwdGV4cGx1cworICB9Cit9CisKKyUgQGJ1bGxldCBhbmQgQG1pbnVzIG5lZWQgdGhlIHNhbWUgdHJlYXRtZW50IGFzIEBtYXRoLCBqdXN0IGFib3ZlLgorXGRlZlxidWxsZXR7JFxwdGV4YnVsbGV0JH0KK1xkZWZcbWludXN7JC0kfQorCislIEBkb3Rze30gb3V0cHV0cyBhbiBlbGxpcHNpcyB1c2luZyB0aGUgY3VycmVudCBmb250LgorJSBXZSBkbyAuNWVtIHBlciBwZXJpb2Qgc28gdGhhdCBpdCBoYXMgdGhlIHNhbWUgc3BhY2luZyBpbiBhIHR5cGV3cml0ZXIKKyUgZm9udCBhcyB0aHJlZSBhY3R1YWwgcGVyaW9kIGNoYXJhY3RlcnMuCislCitcZGVmXGRvdHN7JQorICBcbGVhdmV2bW9kZQorICBcaGJveCB0byAxLjVlbXslCisgICAgXGhza2lwIDBwdCBwbHVzIDAuMjVmaWwKKyAgICAuXGhmaWwuXGhmaWwuJQorICAgIFxoc2tpcCAwcHQgcGx1cyAwLjVmaWwKKyAgfSUKK30KKworJSBAZW5kZG90c3t9IGlzIGFuIGVuZC1vZi1zZW50ZW5jZSBlbGxpcHNpcy4KKyUKK1xkZWZcZW5kZG90c3slCisgIFxkb3RzCisgIFxzcGFjZWZhY3Rvcj1cZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yCit9CisKKyUgQGNvbW1he30gaXMgc28gY29tbWFzIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRleHQgd2l0aG91dCBtZXNzaW5nIHVwCislIFRleGluZm8ncyBwYXJzaW5nLgorJQorXGxldFxjb21tYSA9ICwKKworJSBAcmVmaWxsIGlzIGEgbm8tb3AuCitcbGV0XHJlZmlsbD1ccmVsYXgKKworJSBJZiB3b3JraW5nIG9uIGEgbGFyZ2UgZG9jdW1lbnQgaW4gY2hhcHRlcnMsIGl0IGlzIGNvbnZlbmllbnQgdG8KKyUgYmUgYWJsZSB0byBkaXNhYmxlIGluZGV4aW5nLCBjcm9zcy1yZWZlcmVuY2luZywgYW5kIGNvbnRlbnRzLCBmb3IgdGVzdCBydW5zLgorJSBUaGlzIGlzIGRvbmUgd2l0aCBAbm92YWxpZGF0ZSAoYmVmb3JlIEBzZXRmaWxlbmFtZSkuCislCitcbmV3aWZcaWZsaW5rcyBcbGlua3N0cnVlICUgYnkgZGVmYXVsdCB3ZSB3YW50IHRoZSBhdXggZmlsZXMuCitcbGV0XG5vdmFsaWRhdGUgPSBcbGlua3NmYWxzZQorCislIEBzZXRmaWxlbmFtZSBpcyBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgdGV4aW5mbyBmaWxlLgorJSBTbyBvcGVuIGhlcmUgdGhlIGZpbGVzIHdlIG5lZWQgdG8gaGF2ZSBvcGVuIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0LgorJSBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIG1ha2UgYSAuZm10IGZpbGUgZm9yIHRleGluZm8uCitcZGVmXHNldGZpbGVuYW1leyUKKyAgIFxmaXhiYWNrc2xhc2ggICUgVHVybiBvZmYgaGFjayB0byBzd2FsbG93IGBcaW5wdXQgdGV4aW5mbycuCisgICBcaWZsaW5rcworICAgICBcdHJ5YXV4ZmlsZQorICAgICAlIE9wZW4gdGhlIG5ldyBhdXggZmlsZS4gIFRlWCB3aWxsIGNsb3NlIGl0IGF1dG9tYXRpY2FsbHkgYXQgZXhpdC4KKyAgICAgXGltbWVkaWF0ZVxvcGVub3V0XGF1eGZpbGU9XGpvYm5hbWUuYXV4CisgICBcZmkgJSBcb3BlbmluZGljZXMgbmVlZHMgdG8gZG8gc29tZSB3b3JrIGluIGFueSBjYXNlLgorICAgXG9wZW5pbmRpY2VzCisgICBcbGV0XHNldGZpbGVuYW1lPVxjb21tZW50ICUgSWdub3JlIGV4dHJhIEBzZXRmaWxlbmFtZSBjbWRzLgorICAgJQorICAgJSBJZiB0ZXhpbmZvLmNuZiBpcyBwcmVzZW50IG9uIHRoZSBzeXN0ZW0sIHJlYWQgaXQuCisgICAlIFVzZWZ1bCBmb3Igc2l0ZS13aWRlIEBhZm91cnBhcGVyLCBldGMuCisgICBcb3BlbmluIDEgdGV4aW5mby5jbmYKKyAgIFxpZmVvZiAxIFxlbHNlIFxpbnB1dCB0ZXhpbmZvLmNuZiBcZmkKKyAgIFxjbG9zZWluIDEKKyAgICUKKyAgIFxjb21tZW50ICUgSWdub3JlIHRoZSBhY3R1YWwgZmlsZW5hbWUuCit9CisKKyUgQ2FsbGVkIGZyb20gXHNldGZpbGVuYW1lLgorJQorXGRlZlxvcGVuaW5kaWNlc3slCisgIFxuZXdpbmRleHtjcH0lCisgIFxuZXdjb2RlaW5kZXh7Zm59JQorICBcbmV3Y29kZWluZGV4e3ZyfSUKKyAgXG5ld2NvZGVpbmRleHt0cH0lCisgIFxuZXdjb2RlaW5kZXh7a3l9JQorICBcbmV3Y29kZWluZGV4e3BnfSUKK30KKworJSBAYnllLgorXG91dGVyXGRlZlxieWV7XHBhZ2VhbGlnbm1hY3JvXHRyYWNpbmdzdGF0cz0xXHB0ZXhlbmR9CisKKworXG1lc3NhZ2V7cGRmLH0KKyUgYWRvYmUgYHBvcnRhYmxlJyBkb2N1bWVudCBmb3JtYXQKK1xuZXdjb3VudFx0ZW1wbnVtCitcbmV3Y291bnRcbG5rY291bnQKK1xuZXd0b2tzXGZpbGVuYW1lCitcbmV3Y291bnRcZmlsZW5hbWVsZW5ndGgKK1xuZXdjb3VudFxwZ24KK1xuZXd0b2tzXHRva3NBCitcbmV3dG9rc1x0b2tzQgorXG5ld3Rva3NcdG9rc0MKK1xuZXd0b2tzXHRva3NECitcbmV3Ym94XGJveEEKK1xuZXdjb3VudFxjb3VudEEKK1xuZXdpZlxpZnBkZgorXG5ld2lmXGlmcGRmbWFrZXBhZ2VkZXN0CisKKyUgd2hlbiBwZGZ0ZXggaXMgcnVuIGluIGR2aSBtb2RlLCBccGRmb3V0cHV0IGlzIGRlZmluZWQgKHNvIFxwZGZvdXRwdXQ9MQorJSBjYW4gYmUgc2V0KS4gIFNvIHdlIHRlc3QgZm9yIFxyZWxheCBhbmQgMCBhcyB3ZWxsIGFzIFx1bmRlZmluZWQsCislIGJvcnJvd2VkIGZyb20gaWZwZGYuc3R5LgorXGlmeFxwZGZvdXRwdXRcdW5kZWZpbmVkCitcZWxzZQorICBcaWZ4XHBkZm91dHB1dFxyZWxheAorICBcZWxzZQorICAgIFxpZmNhc2VccGRmb3V0cHV0CisgICAgXGVsc2UKKyAgICAgIFxwZGZ0cnVlCisgICAgXGZpCisgIFxmaQorXGZpCisKKyUgUERGIHVzZXMgUG9zdFNjcmlwdCBzdHJpbmcgY29uc3RhbnRzIGZvciB0aGUgbmFtZXMgb2YgeHJlZiB0YXJnZXRzLCB0bworJSBmb3IgZGlzcGxheSBpbiB0aGUgb3V0bGluZXMsIGFuZCBpbiBvdGhlciBwbGFjZXMuICBUaHVzLCB3ZSBoYXZlIHRvCislIGRvdWJsZSBhbnkgYmFja3NsYXNoZXMuICBPdGhlcndpc2UsIGEgbmFtZSBsaWtlICJcbm9kZSIgd2lsbCBiZQorJSBpbnRlcnByZXRlZCBhcyBhIG5ld2xpbmUgKFxuKSwgZm9sbG93ZWQgYnkgbywgZCwgZS4gIE5vdCBnb29kLgorJSBodHRwOi8vd3d3Lm50Zy5ubC9waXBlcm1haWwvbnRnLXBkZnRleC8yMDA0LUp1bHkvMDAwNjU0Lmh0bWwKKyUgKGFuZCByZWxhdGVkIG1lc3NhZ2VzLCB0aGUgZmluYWwgb3V0Y29tZSBpcyB0aGF0IGl0IGlzIHVwIHRvIHRoZSBUZVgKKyUgdXNlciB0byBkb3VibGUgdGhlIGJhY2tzbGFzaGVzIGFuZCBvdGhlcndpc2UgbWFrZSB0aGUgc3RyaW5nIHZhbGlkLCBzbworJSB0aGF0J3Mgd2UgZG8pLgorCislIGRvdWJsZSBhY3RpdmUgYmFja3NsYXNoZXMuCislIAore1xjYXRjb2RlYFxAPTAgXGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQGFjdGl2ZWJhY2tzbGFzaHtAY2F0Y29kZWBAXD1AYWN0aXZlIEBvdGhlcmJhY2tzbGFzaH0KKyBAZ2RlZkBhY3RpdmViYWNrc2xhc2hkb3VibGV7JQorICAgQGNhdGNvZGVAYmFja0NoYXI9QGFjdGl2ZQorICAgQGxldFw9QGRvdWJsZWJhY2tzbGFzaH0KK30KKworJSBUbyBoYW5kbGUgcGFyZW5zLCB3ZSBtdXN0IGFkb3B0IGEgZGlmZmVyZW50IGFwcHJvYWNoLCBzaW5jZSBwYXJlbnMgYXJlCislIG5vdCBhY3RpdmUgY2hhcmFjdGVycy4gIGh5cGVycmVmLmR0eCAod2hpY2ggaGFzIHRoZSBzYW1lIHByb2JsZW0gYXMKKyUgdXMpIGhhbmRsZXMgaXQgd2l0aCB0aGlzIGFtYXppbmcgbWFjcm8gdG8gcmVwbGFjZSB0b2tlbnMuICBJJ3ZlCislIHRpbmtlcmVkIHdpdGggaXQgYSBsaXR0bGUgZm9yIHRleGluZm8sIGJ1dCBpdCdzIGRlZmluaXRlbHkgZnJvbSB0aGVyZS4KKyUgCislICMxIGlzIHRoZSB0b2tlbnMgdG8gcmVwbGFjZS4KKyUgIzIgaXMgdGhlIHJlcGxhY2VtZW50LgorJSAjMyBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSB3aXRoIHRoZSBzdHJpbmcuCislIAorXGRlZlxIeVBzZFN1YnN0IzEjMiMzeyUKKyAgXGRlZlxIeVBzZFJlcGxhY2UjIzEjMSMjMlxFTkR7JQorICAgICMjMSUKKyAgICBcaWZ4XFwjIzJcXCUKKyAgICBcZWxzZQorICAgICAgIzIlCisgICAgICBcSHlSZXR1cm5BZnRlckZpeyUKKyAgICAgICAgXEh5UHNkUmVwbGFjZSMjMlxFTkQKKyAgICAgIH0lCisgICAgXGZpCisgIH0lCisgIFx4ZGVmIzN7XGV4cGFuZGFmdGVyXEh5UHNkUmVwbGFjZSMzIzFcRU5EfSUKK30KK1xsb25nXGRlZlxIeVJldHVybkFmdGVyRmkjMVxmaXtcZmkjMX0KKworJSAjMSBpcyBhIGNvbnRyb2wgc2VxdWVuY2UgaW4gd2hpY2ggdG8gZG8gdGhlIHJlcGxhY2VtZW50cy4KK1xkZWZcYmFja3NsYXNocGFyZW5zIzF7JQorICBceGRlZiMxeyMxfSUgcmVkZWZpbmUgaXQgYXMgaXRzIGV4cGFuc2lvbjsgdGhlIGRlZmluaXRpb24gaXMgc2ltcGx5CisgICAgICAgICAgICAgJSBcbGFzdG5vZGUgd2hlbiBjYWxsZWQgZnJvbSBcc2V0cmVmIC0+IFxwZGZta2Rlc3QuCisgIFxIeVBzZFN1YnN0eyh9e1xiYWNrc2xhc2hscGFyZW59eyMxfSUKKyAgXEh5UHNkU3Vic3R7KX17XGJhY2tzbGFzaHJwYXJlbn17IzF9JQorfQorCit7XGNhdGNvZGVcZXhjbGFtQ2hhciA9IDAgXGNhdGNvZGVcYmFja0NoYXIgPSBcb3RoZXIKKyAhZ2RlZiFiYWNrc2xhc2hscGFyZW57XCh9JQorICFnZGVmIWJhY2tzbGFzaHJwYXJlbntcKX0lCit9CisKK1xpZnBkZgorICBcaW5wdXQgcGRmY29sb3IKKyAgXHBkZmNhdGFsb2d7L1BhZ2VNb2RlIC9Vc2VPdXRsaW5lc30lCisgIFxkZWZcZG9wZGZpbWFnZSMxIzIjM3slCisgICAgXGRlZlxpbWFnZXdpZHRoeyMyfSUKKyAgICBcZGVmXGltYWdlaGVpZ2h0eyMzfSUKKyAgICAlIHdpdGhvdXQgXGltbWVkaWF0ZSwgcGRmdGV4IHNlZyBmYXVsdHMgd2hlbiB0aGUgc2FtZSBpbWFnZSBpcworICAgICUgaW5jbHVkZWQgdHdpY2UuICAoVmVyc2lvbiAzLjE0MTU5LXByZS0xLjAtdW5vZmZpY2lhbC0yMDAxMDcwNC4pCisgICAgXGlmbnVtXHBkZnRleHZlcnNpb24gPCAxNAorICAgICAgXGltbWVkaWF0ZVxwZGZpbWFnZQorICAgIFxlbHNlCisgICAgICBcaW1tZWRpYXRlXHBkZnhpbWFnZQorICAgIFxmaQorICAgICAgXGlmeFxlbXB0eVxpbWFnZXdpZHRoXGVsc2Ugd2lkdGggXGltYWdld2lkdGggXGZpCisgICAgICBcaWZ4XGVtcHR5XGltYWdlaGVpZ2h0XGVsc2UgaGVpZ2h0IFxpbWFnZWhlaWdodCBcZmkKKyAgICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uPDEzCisgICAgICAgICAjMS5wZGYlCisgICAgICAgXGVsc2UKKyAgICAgICAgIHsjMS5wZGZ9JQorICAgICAgIFxmaQorICAgIFxpZm51bVxwZGZ0ZXh2ZXJzaW9uIDwgMTQgXGVsc2UKKyAgICAgIFxwZGZyZWZ4aW1hZ2UgXHBkZmxhc3R4aW1hZ2UKKyAgICBcZml9CisgIFxkZWZccGRmbWtkZXN0IzF7eyUKKyAgICAlIFdlIGhhdmUgdG8gc2V0IGR1bW1pZXMgc28gY29tbWFuZHMgc3VjaCBhcyBAY29kZSwgYW5kIGNoYXJhY3RlcnMKKyAgICAlIHN1Y2ggYXMgXCwgYXJlbid0IGV4cGFuZGVkIHdoZW4gcHJlc2VudCBpbiBhIHNlY3Rpb24gdGl0bGUuCisgICAgXGF0ZHVtbWllcworICAgIFxhY3RpdmViYWNrc2xhc2hkb3VibGUKKyAgICBcZGVmXHBkZmRlc3RuYW1leyMxfSUKKyAgICBcYmFja3NsYXNocGFyZW5zXHBkZmRlc3RuYW1lCisgICAgXHBkZmRlc3QgbmFtZXtccGRmZGVzdG5hbWV9IHh5eiUKKyAgfX0lCisgICUKKyAgJSB1c2VkIHRvIG1hcmsgdGFyZ2V0IG5hbWVzOyBtdXN0IGJlIGV4cGFuZGFibGUuCisgIFxkZWZccGRmbWtwZ24jMXsjMX0lCisgICUKKyAgXGxldFxsaW5rY29sb3IgPSBcQmx1ZSAgJSB3YXMgQ3lhbiwgYnV0IHRoYXQgc2VlbXMgbGlnaHQ/CisgIFxkZWZcZW5kbGlua3tcQmxhY2tccGRmZW5kbGlua30KKyAgJSBBZGRpbmcgb3V0bGluZXMgdG8gUERGOyBtYWNyb3MgZm9yIGNhbGN1bGF0aW5nIHN0cnVjdHVyZSBvZiBvdXRsaW5lcworICAlIGNvbWUgZnJvbSBQZXRyIE9sc2FrCisgIFxkZWZcZXhwbnVtYmVyIzF7XGV4cGFuZGFmdGVyXGlmeFxjc25hbWUjMVxlbmRjc25hbWVccmVsYXggMCUKKyAgICBcZWxzZSBcY3NuYW1lIzFcZW5kY3NuYW1lIFxmaX0KKyAgXGRlZlxhZHZhbmNlbnVtYmVyIzF7XHRlbXBudW09XGV4cG51bWJlcnsjMX1ccmVsYXgKKyAgICBcYWR2YW5jZVx0ZW1wbnVtIGJ5IDEKKyAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUjMVxlbmRjc25hbWV7XHRoZVx0ZW1wbnVtfX0KKyAgJQorICAlICMxIGlzIHRoZSBzZWN0aW9uIHRleHQsIHdoaWNoIGlzIHdoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlCisgICUgb3V0bGluZSBieSB0aGUgcGRmIHZpZXdlci4gICMyIGlzIHRoZSBwZGYgZXhwcmVzc2lvbiBmb3IgdGhlIG51bWJlcgorICAlIG9mIHN1YmVudHJpZXMgKG9yIGVtcHR5LCBmb3Igc3Vic3Vic2VjdGlvbnMpLiAgIzMgaXMgdGhlIG5vZGUgdGV4dCwKKyAgJSB3aGljaCBtaWdodCBiZSBlbXB0eSBpZiB0aGlzIHRvYyBlbnRyeSBoYWQgbm8gY29ycmVzcG9uZGluZyBub2RlLgorICAlICM0IGlzIHRoZSBwYWdlIG51bWJlcgorICAlCisgIFxkZWZcZG9wZGZvdXRsaW5lIzEjMiMzIzR7JQorICAgICUgR2VuZXJhdGUgYSBsaW5rIHRvIHRoZSBub2RlIHRleHQgaWYgdGhhdCBleGlzdHM7IGVsc2UsIHVzZSB0aGUKKyAgICAlIHBhZ2UgbnVtYmVyLiAgV2UgY291bGQgZ2VuZXJhdGUgYSBkZXN0aW5hdGlvbiBmb3IgdGhlIHNlY3Rpb24KKyAgICAlIHRleHQgaW4gdGhlIGNhc2Ugd2hlcmUgYSBzZWN0aW9uIGhhcyBubyBub2RlLCBidXQgaXQgZG9lc24ndAorICAgICUgc2VlbSB3b3J0aCB0aGUgdHJvdWJsZSwgc2luY2UgbW9zdCBkb2N1bWVudHMgYXJlIG5vcm1hbGx5IHN0cnVjdHVyZWQuCisgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjM30lCisgICAgXGlmeFxwZGZvdXRsaW5lZGVzdFxlbXB0eQorICAgICAgXGRlZlxwZGZvdXRsaW5lZGVzdHsjNH0lCisgICAgXGVsc2UKKyAgICAgICUgRG91YmxlZCBiYWNrc2xhc2hlcyBpbiB0aGUgbmFtZS4KKyAgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmVkZXN0eyMzfSUKKyAgICAgICBcYmFja3NsYXNocGFyZW5zXHBkZm91dGxpbmVkZXN0fSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBBbHNvIGRvdWJsZSB0aGUgYmFja3NsYXNoZXMgaW4gdGhlIGRpc3BsYXkgc3RyaW5nLgorICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZm91dGxpbmV0ZXh0eyMxfSUKKyAgICAgXGJhY2tzbGFzaHBhcmVuc1xwZGZvdXRsaW5ldGV4dH0lCisgICAgJQorICAgIFxwZGZvdXRsaW5lIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZm91dGxpbmVkZXN0fX0jMntccGRmb3V0bGluZXRleHR9JQorICB9CisgICUKKyAgXGRlZlxwZGZtYWtlb3V0bGluZXN7JQorICAgIFxiZWdpbmdyb3VwCisgICAgICAlIFRoYW5oJ3MgaGFjayAvIHByb3BlciBicmFjZXMgaW4gYm9va21hcmtzCisgICAgICBcZWRlZlxteWxicmFjZXtcaWZ0cnVlIFxzdHJpbmd7XGVsc2V9XGZpfVxsZXRcez1cbXlsYnJhY2UKKyAgICAgIFxlZGVmXG15cmJyYWNle1xpZmZhbHNle1xlbHNlXHN0cmluZ31cZml9XGxldFx9PVxteXJicmFjZQorICAgICAgJQorICAgICAgJSBSZWFkIHRvYyBzaWxlbnRseSwgdG8gZ2V0IGNvdW50cyBvZiBzdWJlbnRyaWVzIGZvciBccGRmb3V0bGluZS4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKwlcZGVmXHRoaXNjaGFwbnVteyMjMn0lCisJXGRlZlx0aGlzc2VjbnVtezB9JQorCVxkZWZcdGhpc3N1YnNlY251bXswfSUKKyAgICAgIH0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKwlcYWR2YW5jZW51bWJlcntjaGFwXHRoaXNjaGFwbnVtfSUKKwlcZGVmXHRoaXNzZWNudW17IyMyfSUKKwlcZGVmXHRoaXNzdWJzZWNudW17MH0lCisgICAgICB9JQorICAgICAgXGRlZlxudW1zdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslCisJXGFkdmFuY2VudW1iZXJ7c2VjXHRoaXNzZWNudW19JQorCVxkZWZcdGhpc3N1YnNlY251bXsjIzJ9JQorICAgICAgfSUKKyAgICAgIFxkZWZcbnVtc3Vic3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorCVxhZHZhbmNlbnVtYmVye3N1YnNlY1x0aGlzc3Vic2VjbnVtfSUKKyAgICAgIH0lCisgICAgICBcZGVmXHRoaXNjaGFwbnVtezB9JQorICAgICAgXGRlZlx0aGlzc2VjbnVtezB9JQorICAgICAgXGRlZlx0aGlzc3Vic2VjbnVtezB9JQorICAgICAgJQorICAgICAgJSB1c2UgXGRlZiByYXRoZXIgdGhhbiBcbGV0IGhlcmUgYmVjYXVzZSB3ZSByZWRlZmluZSBcY2hhcGVudHJ5IGV0CisgICAgICAlIGFsLiBhIHNlY29uZCB0aW1lLCBiZWxvdy4KKyAgICAgIFxkZWZcYXBwZW50cnl7XG51bWNoYXBlbnRyeX0lCisgICAgICBcZGVmXGFwcHNlY2VudHJ5e1xudW1zZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnNlY2VudHJ5e1xudW1zdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXGFwcHN1YnN1YnNlY2VudHJ5e1xudW1zdWJzdWJzZWNlbnRyeX0lCisgICAgICBcZGVmXHVubmNoYXBlbnRyeXtcbnVtY2hhcGVudHJ5fSUKKyAgICAgIFxkZWZcdW5uc2VjZW50cnl7XG51bXNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic2VjZW50cnl7XG51bXN1YnNlY2VudHJ5fSUKKyAgICAgIFxkZWZcdW5uc3Vic3Vic2VjZW50cnl7XG51bXN1YnN1YnNlY2VudHJ5fSUKKyAgICAgIFxyZWFkZGF0YWZpbGV7dG9jfSUKKyAgICAgICUKKyAgICAgICUgUmVhZCB0b2Mgc2Vjb25kIHRpbWUsIHRoaXMgdGltZSBhY3R1YWxseSBwcm9kdWNpbmcgdGhlIG91dGxpbmVzLgorICAgICAgJSBUaGUgYC0nIG1lYW5zIHRha2UgdGhlIFxleHBudW1iZXIgYXMgdGhlIGFic29sdXRlIG51bWJlciBvZgorICAgICAgJSBzdWJlbnRyaWVzLCB3aGljaCB3ZSBjYWxjdWxhdGVkIG9uIG91ciBmaXJzdCByZWFkIG9mIHRoZSAudG9jIGFib3ZlLgorICAgICAgJQorICAgICAgJSBXZSB1c2UgdGhlIG5vZGUgbmFtZXMgYXMgdGhlIGRlc3RpbmF0aW9ucy4KKyAgICAgIFxkZWZcbnVtY2hhcGVudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7Y2hhcCMjMn19eyMjM317IyM0fX0lCisgICAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0eyUKKyAgICAgICAgXGRvcGRmb3V0bGluZXsjIzF9e2NvdW50LVxleHBudW1iZXJ7c2VjIyMyfX17IyMzfXsjIzR9fSUKKyAgICAgIFxkZWZcbnVtc3Vic2VjZW50cnkjIzEjIzIjIzMjIzR7JQorICAgICAgICBcZG9wZGZvdXRsaW5leyMjMX17Y291bnQtXGV4cG51bWJlcntzdWJzZWMjIzJ9fXsjIzN9eyMjNH19JQorICAgICAgXGRlZlxudW1zdWJzdWJzZWNlbnRyeSMjMSMjMiMjMyMjNHslIGNvdW50IGlzIGFsd2F5cyB6ZXJvCisgICAgICAgIFxkb3BkZm91dGxpbmV7IyMxfXt9eyMjM317IyM0fX0lCisgICAgICAlCisgICAgICAlIFBERiBvdXRsaW5lcyBhcmUgZGlzcGxheWVkIHVzaW5nIHN5c3RlbSBmb250cywgaW5zdGVhZCBvZgorICAgICAgJSBkb2N1bWVudCBmb250cy4gIFRoZXJlZm9yZSB3ZSBjYW5ub3QgdXNlIHNwZWNpYWwgY2hhcmFjdGVycywKKyAgICAgICUgc2luY2UgdGhlIGVuY29kaW5nIGlzIHVua25vd24uICBGb3IgZXhhbXBsZSwgdGhlIGVvZ29uZWsgZnJvbQorICAgICAgJSBMYXRpbiAyICgweGVhKSBnZXRzIHRyYW5zbGF0ZWQgdG8gYSB8IGNoYXJhY3Rlci4gIEluZm8gZnJvbQorICAgICAgJSBTdGFzemVrIFdhd3J5a2lld2ljeiwgMTkgSmFuIDIwMDQgMDQ6MDk6MjQgKzAxMDAuCisgICAgICAlCisgICAgICAlIHh4IHRvIGRvIHRoaXMgcmlnaHQsIHdlIGhhdmUgdG8gdHJhbnNsYXRlIDgtYml0IGNoYXJhY3RlcnMgdG8KKyAgICAgICUgdGhlaXIgImJlc3QiIGVxdWl2YWxlbnQsIGJhc2VkIG9uIHRoZSBAZG9jdW1lbnRlbmNvZGluZy4gIFJpZ2h0CisgICAgICAlIG5vdywgSSBndWVzcyB3ZSdsbCBqdXN0IGxldCB0aGUgcGRmIHJlYWRlciBoYXZlIGl0cyB3YXkuCisgICAgICBcaW5kZXhub2ZvbnRzCisgICAgICBcc2V0dXBkYXRhZmlsZQorICAgICAgXGFjdGl2ZWJhY2tzbGFzaAorICAgICAgXGlucHV0IFxqb2JuYW1lLnRvYworICAgIFxlbmRncm91cAorICB9CisgICUKKyAgXGRlZlxza2lwc3BhY2VzIzF7XGRlZlxQUHsjMX1cZGVmXER7fH0lCisgICAgXGlmeFxQUFxEXGxldFxuZXh0c3BccmVsYXgKKyAgICBcZWxzZVxsZXRcbmV4dHNwXHNraXBzcGFjZXMKKyAgICAgIFxpZnhccFxzcGFjZVxlbHNlXGFkZHRva2Vuc3tcZmlsZW5hbWV9e1xQUH0lCisgICAgICAgIFxhZHZhbmNlXGZpbGVuYW1lbGVuZ3RoIGJ5IDEKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxuZXh0c3B9CisgIFxkZWZcZ2V0ZmlsZW5hbWUjMXtcZmlsZW5hbWVsZW5ndGg9MFxleHBhbmRhZnRlclxza2lwc3BhY2VzIzF8XHJlbGF4fQorICBcaWZudW1ccGRmdGV4dmVyc2lvbiA8IDE0CisgICAgXGxldCBcc3RhcnRsaW5rIFxwZGZhbm5vdGxpbmsKKyAgXGVsc2UKKyAgICBcbGV0IFxzdGFydGxpbmsgXHBkZnN0YXJ0bGluaworICBcZmkKKyAgXGRlZlxwZGZ1cmwjMXslCisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxub3JtYWx0dXJub2ZmYWN0aXZlXGRlZlxAe0B9JQorICAgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICAgIFxsZWF2ZXZtb2RlXFJlZAorICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgIHVzZXJ7L1N1YnR5cGUgL0xpbmsgL0EgPDwgL1MgL1VSSSAvVVJJICgjMSkgPj59JQorICAgIFxlbmRncm91cH0KKyAgXGRlZlxwZGZnZXR0b2tzIzEue1xzZXRib3hcYm94QT1caGJveHtcdG9rc0E9eyMxLn1cdG9rc0I9e31cbWFrZXRva3N9fQorICBcZGVmXGFkZHRva2VucyMxIzJ7XGVkZWZcYWRkdG9rc3tcbm9leHBhbmQjMT17XHRoZSMxIzJ9fVxhZGR0b2tzfQorICBcZGVmXGFkbiMxe1xhZGR0b2tlbnN7XHRva3NDfXsjMX1cZ2xvYmFsXGNvdW50QT0xXGxldFxuZXh0PVxtYWtldG9rc30KKyAgXGRlZlxwb3B0b2tzIzEjMnxFTkRUT0tTfHtcbGV0XGZpcnN0PSMxXHRva3NEPXsjMX1cdG9rc0E9eyMyfX0KKyAgXGRlZlxtYWtldG9rc3slCisgICAgXGV4cGFuZGFmdGVyXHBvcHRva3NcdGhlXHRva3NBfEVORFRPS1N8XHJlbGF4CisgICAgXGlmeFxmaXJzdDBcYWRuMAorICAgIFxlbHNlXGlmeFxmaXJzdDFcYWRuMSBcZWxzZVxpZnhcZmlyc3QyXGFkbjIgXGVsc2VcaWZ4XGZpcnN0M1xhZG4zCisgICAgXGVsc2VcaWZ4XGZpcnN0NFxhZG40IFxlbHNlXGlmeFxmaXJzdDVcYWRuNSBcZWxzZVxpZnhcZmlyc3Q2XGFkbjYKKyAgICBcZWxzZVxpZnhcZmlyc3Q3XGFkbjcgXGVsc2VcaWZ4XGZpcnN0OFxhZG44IFxlbHNlXGlmeFxmaXJzdDlcYWRuOQorICAgIFxlbHNlCisgICAgICBcaWZudW0wPVxjb3VudEFcZWxzZVxtYWtlbGlua1xmaQorICAgICAgXGlmeFxmaXJzdC5cbGV0XG5leHQ9XGRvbmVcZWxzZQorICAgICAgICBcbGV0XG5leHQ9XG1ha2V0b2tzCisgICAgICAgIFxhZGR0b2tlbnN7XHRva3NCfXtcdGhlXHRva3NEfQorICAgICAgICBcaWZ4XGZpcnN0LFxhZGR0b2tlbnN7XHRva3NCfXtcc3BhY2V9XGZpCisgICAgICBcZmkKKyAgICBcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmlcZmkKKyAgICBcbmV4dH0KKyAgXGRlZlxtYWtlbGlua3tcYWRkdG9rZW5ze1x0b2tzQn0lCisgICAge1xub2V4cGFuZFxwZGZsaW5re1x0aGVcdG9rc0N9fVx0b2tzQz17fVxnbG9iYWxcY291bnRBPTB9CisgIFxkZWZccGRmbGluayMxeyUKKyAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSBnb3RvIG5hbWV7XHBkZm1rcGdueyMxfX0KKyAgICBcbGlua2NvbG9yICMxXGVuZGxpbmt9CisgIFxkZWZcZG9uZXtcZWRlZlxzdHtcZ2xvYmFsXG5vZXhwYW5kXHRva3NBPXtcdGhlXHRva3NCfX1cc3R9CitcZWxzZQorICBcbGV0XHBkZm1rZGVzdCA9IFxnb2JibGUKKyAgXGxldFxwZGZ1cmwgPSBcZ29iYmxlCisgIFxsZXRcZW5kbGluayA9IFxyZWxheAorICBcbGV0XGxpbmtjb2xvciA9IFxyZWxheAorICBcbGV0XHBkZm1ha2VvdXRsaW5lcyA9IFxyZWxheAorXGZpICAlIFxpZnhccGRmb3V0cHV0CisKKworXG1lc3NhZ2V7Zm9udHMsfQorCislIENoYW5nZSB0aGUgY3VycmVudCBmb250IHN0eWxlIHRvICMxLCByZW1lbWJlcmluZyBpdCBpbiBcY3VyZm9udHN0eWxlLgorJSBGb3Igbm93LCB3ZSBkbyBub3QgYWNjdW11bGF0ZSBmb250IHN0eWxlczogQGJ7QGl7Zm9vfX0gcHJpbnRzIGZvbyBpbgorJSBpdGFsaWNzLCBub3QgYm9sZCBpdGFsaWNzLgorJQorXGRlZlxzZXRmb250c3R5bGUjMXslCisgIFxkZWZcY3VyZm9udHN0eWxleyMxfSUgbm90IGFzIGEgY29udHJvbCBzZXF1ZW5jZSwgYmVjYXVzZSB3ZSBhcmUgXGVkZWYnZC4KKyAgXGNzbmFtZSB0ZW4jMVxlbmRjc25hbWUgICUgY2hhbmdlIHRoZSBjdXJyZW50IGZvbnQKK30KKworJSBTZWxlY3QgIzEgZm9udHMgd2l0aCB0aGUgY3VycmVudCBzdHlsZS4KKyUKK1xkZWZcc2VsZWN0Zm9udHMjMXtcY3NuYW1lICMxZm9udHNcZW5kY3NuYW1lIFxjc25hbWVcY3VyZm9udHN0eWxlXGVuZGNzbmFtZX0KKworXGRlZlxybXtcZmFtPTAgXHNldGZvbnRzdHlsZXtybX19CitcZGVmXGl0e1xmYW09XGl0ZmFtIFxzZXRmb250c3R5bGV7aXR9fQorXGRlZlxzbHtcZmFtPVxzbGZhbSBcc2V0Zm9udHN0eWxle3NsfX0KK1xkZWZcYmZ7XGZhbT1cYmZmYW0gXHNldGZvbnRzdHlsZXtiZn19XGRlZlxiZnN0eWxlbmFtZXtiZn0KK1xkZWZcdHR7XGZhbT1cdHRmYW0gXHNldGZvbnRzdHlsZXt0dH19CisKKyUgVGV4aW5mbyBzb3J0IG9mIHN1cHBvcnRzIHRoZSBzYW5zIHNlcmlmIGZvbnQgc3R5bGUsIHdoaWNoIHBsYWluIFRlWCBkb2VzIG5vdC4KKyUgU28gd2Ugc2V0IHVwIGEgXHNmLgorXG5ld2ZhbVxzZmZhbQorXGRlZlxzZntcZmFtPVxzZmZhbSBcc2V0Zm9udHN0eWxle3NmfX0KK1xsZXRcbGkgPSBcc2YgJSBTb21ldGltZXMgd2UgY2FsbCBpdCBcbGksIG5vdCBcc2YuCisKKyUgV2UgZG9uJ3QgbmVlZCBtYXRoIGZvciB0aGlzIGZvbnQgc3R5bGUuCitcZGVmXHR0c2x7XHNldGZvbnRzdHlsZXt0dHNsfX0KKworJSBEZWZhdWx0IGxlYWRpbmcuCitcbmV3ZGltZW5cdGV4dGxlYWRpbmcgIFx0ZXh0bGVhZGluZyA9IDEzLjJwdAorCislIFNldCB0aGUgYmFzZWxpbmVza2lwIHRvICMxLCBhbmQgdGhlIGxpbmVza2lwIGFuZCBzdHJ1dCBzaXplCislIGNvcnJlc3BvbmRpbmdseS4gIFRoZXJlIGlzIG5vIGRlZXAgbWVhbmluZyBiZWhpbmQgdGhlc2UgbWFnaWMgbnVtYmVycworJSB1c2VkIGFzIGZhY3RvcnM7IHRoZXkganVzdCBtYXRjaCAoY2xvc2VseSBlbm91Z2gpIHdoYXQgS251dGggZGVmaW5lZC4KKyUKK1xkZWZcbGluZXNraXBmYWN0b3J7LjA4MzMzfQorXGRlZlxzdHJ1dGhlaWdodHBlcmNlbnR7LjcwODMzfQorXGRlZlxzdHJ1dGRlcHRocGVyY2VudCB7LjI5MTY3fQorJQorXGRlZlxzZXRsZWFkaW5nIzF7JQorICBcbm9ybWFsYmFzZWxpbmVza2lwID0gIzFccmVsYXgKKyAgXG5vcm1hbGxpbmVza2lwID0gXGxpbmVza2lwZmFjdG9yXG5vcm1hbGJhc2VsaW5lc2tpcAorICBcbm9ybWFsYmFzZWxpbmVzCisgIFxzZXRib3hcc3RydXRib3ggPVxoYm94eyUKKyAgICBcdnJ1bGUgd2lkdGgwcHQgaGVpZ2h0XHN0cnV0aGVpZ2h0cGVyY2VudFxiYXNlbGluZXNraXAKKyAgICAgICAgICAgICAgICAgICAgZGVwdGggXHN0cnV0ZGVwdGhwZXJjZW50IFxiYXNlbGluZXNraXAKKyAgfSUKK30KKworJSBTZXQgdGhlIGZvbnQgbWFjcm8gIzEgdG8gdGhlIGZvbnQgbmFtZWQgIzIsIGFkZGluZyBvbiB0aGUKKyUgc3BlY2lmaWVkIGZvbnQgcHJlZml4IChub3JtYWxseSBgY20nKS4KKyUgIzMgaXMgdGhlIGZvbnQncyBkZXNpZ24gc2l6ZSwgIzQgaXMgYSBzY2FsZSBmYWN0b3IKK1xkZWZcc2V0Zm9udCMxIzIjMyM0e1xmb250IzE9XGZvbnRwcmVmaXgjMiMzIHNjYWxlZCAjNH0KKworJSBVc2UgY20gYXMgdGhlIGRlZmF1bHQgZm9udCBwcmVmaXguCislIFRvIHNwZWNpZnkgdGhlIGZvbnQgcHJlZml4LCB5b3UgbXVzdCBkZWZpbmUgXGZvbnRwcmVmaXgKKyUgYmVmb3JlIHlvdSByZWFkIGluIHRleGluZm8udGV4LgorXGlmeFxmb250cHJlZml4XHVuZGVmaW5lZAorXGRlZlxmb250cHJlZml4e2NtfQorXGZpCislIFN1cHBvcnQgZm9udCBmYW1pbGllcyB0aGF0IGRvbid0IHVzZSB0aGUgc2FtZSBuYW1pbmcgc2NoZW1lIGFzIENNLgorXGRlZlxybXNoYXBle3J9CitcZGVmXHJtYnNoYXBle2J4fSAgICAgICAgICAgICAgICV3aGVyZSB0aGUgbm9ybWFsIGZhY2UgaXMgYm9sZAorXGRlZlxiZnNoYXBle2J9CitcZGVmXGJ4c2hhcGV7Ynh9CitcZGVmXHR0c2hhcGV7dHR9CitcZGVmXHR0YnNoYXBle3R0fQorXGRlZlx0dHNsc2hhcGV7c2x0dH0KK1xkZWZcaXRzaGFwZXt0aX0KK1xkZWZcaXRic2hhcGV7Ynh0aX0KK1xkZWZcc2xzaGFwZXtzbH0KK1xkZWZcc2xic2hhcGV7YnhzbH0KK1xkZWZcc2ZzaGFwZXtzc30KK1xkZWZcc2Zic2hhcGV7c3N9CitcZGVmXHNjc2hhcGV7Y3NjfQorXGRlZlxzY2JzaGFwZXtjc2N9CisKKyUgVGV4dCBmb250cyAoMTEuMnB0LCBtYWdzdGVwMSkuCitcZGVmXHRleHRub21pbmFsc2l6ZXsxMXB0fQorXGVkZWZcbWFpbm1hZ3N0ZXB7XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcdGV4dHJtXHJtc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dFx0dHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0YmZcYmZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dGl0XGl0c2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHRzbFxzbHNoYXBlezEwfXtcbWFpbm1hZ3N0ZXB9Citcc2V0Zm9udFx0ZXh0c2Zcc2ZzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXHNldGZvbnRcdGV4dHNjXHNjc2hhcGV7MTB9e1xtYWlubWFnc3RlcH0KK1xzZXRmb250XHRleHR0dHNsXHR0c2xzaGFwZXsxMH17XG1haW5tYWdzdGVwfQorXGZvbnRcdGV4dGk9Y21taTEwIHNjYWxlZCBcbWFpbm1hZ3N0ZXAKK1xmb250XHRleHRzeT1jbXN5MTAgc2NhbGVkIFxtYWlubWFnc3RlcAorCislIEEgZmV3IGZvbnRzIGZvciBAZGVmdW4gbmFtZXMgYW5kIGFyZ3MuCitcc2V0Zm9udFxkZWZiZlxiZnNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dFx0dHNoYXBlezEwfXtcbWFnc3RlcDF9Citcc2V0Zm9udFxkZWZ0dHNsXHR0c2xzaGFwZXsxMH17XG1hZ3N0ZXAxfQorXGRlZlxkZntcbGV0XHRlbnR0PVxkZWZ0dCBcbGV0XHRlbmJmID0gXGRlZmJmIFxsZXRcdGVudHRzbD1cZGVmdHRzbCBcYmZ9CisKKyUgRm9udHMgZm9yIGluZGljZXMsIGZvb3Rub3Rlcywgc21hbGwgZXhhbXBsZXMgKDlwdCkuCitcZGVmXHNtYWxsbm9taW5hbHNpemV7OXB0fQorXHNldGZvbnRcc21hbGxybVxybXNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHR0XHR0c2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsYmZcYmZzaGFwZXsxMH17OTAwfQorXHNldGZvbnRcc21hbGxpdFxpdHNoYXBlezl9ezEwMDB9Citcc2V0Zm9udFxzbWFsbHNsXHNsc2hhcGV7OX17MTAwMH0KK1xzZXRmb250XHNtYWxsc2Zcc2ZzaGFwZXs5fXsxMDAwfQorXHNldGZvbnRcc21hbGxzY1xzY3NoYXBlezEwfXs5MDB9Citcc2V0Zm9udFxzbWFsbHR0c2xcdHRzbHNoYXBlezEwfXs5MDB9CitcZm9udFxzbWFsbGk9Y21taTkKK1xmb250XHNtYWxsc3k9Y21zeTkKKworJSBGb250cyBmb3Igc21hbGwgZXhhbXBsZXMgKDhwdCkuCitcZGVmXHNtYWxsZXJub21pbmFsc2l6ZXs4cHR9Citcc2V0Zm9udFxzbWFsbGVycm1ccm1zaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnR0XHR0c2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJiZlxiZnNoYXBlezEwfXs4MDB9Citcc2V0Zm9udFxzbWFsbGVyaXRcaXRzaGFwZXs4fXsxMDAwfQorXHNldGZvbnRcc21hbGxlcnNsXHNsc2hhcGV7OH17MTAwMH0KK1xzZXRmb250XHNtYWxsZXJzZlxzZnNoYXBlezh9ezEwMDB9Citcc2V0Zm9udFxzbWFsbGVyc2Ncc2NzaGFwZXsxMH17ODAwfQorXHNldGZvbnRcc21hbGxlcnR0c2xcdHRzbHNoYXBlezEwfXs4MDB9CitcZm9udFxzbWFsbGVyaT1jbW1pOAorXGZvbnRcc21hbGxlcnN5PWNtc3k4CisKKyUgRm9udHMgZm9yIHRpdGxlIHBhZ2UgKDIwLjRwdCk6CitcZGVmXHRpdGxlbm9taW5hbHNpemV7MjBwdH0KK1xzZXRmb250XHRpdGxlcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxlaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2xcc2xic2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxldHRcdHRic2hhcGV7MTJ9e1xtYWdzdGVwM30KK1xzZXRmb250XHRpdGxldHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwNH0KK1xzZXRmb250XHRpdGxlc2Zcc2Zic2hhcGV7MTd9e1xtYWdzdGVwMX0KK1xsZXRcdGl0bGViZj1cdGl0bGVybQorXHNldGZvbnRcdGl0bGVzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXA0fQorXGZvbnRcdGl0bGVpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXAzCitcZm9udFx0aXRsZXN5PWNtc3kxMCBzY2FsZWQgXG1hZ3N0ZXA0CitcZGVmXGF1dGhvcnJte1xzZWNybX0KK1xkZWZcYXV0aG9ydHR7XHNlY3R0fQorCislIENoYXB0ZXIgKGFuZCB1bm51bWJlcmVkKSBmb250cyAoMTcuMjhwdCkuCitcZGVmXGNoYXBub21pbmFsc2l6ZXsxN3B0fQorXHNldGZvbnRcY2hhcHJtXHJtYnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzbFxzbGJzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXHNldGZvbnRcY2hhcHR0XHR0YnNoYXBlezEyfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxjaGFwdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwM30KK1xzZXRmb250XGNoYXBzZlxzZmJzaGFwZXsxN317MTAwMH0KK1xsZXRcY2hhcGJmPVxjaGFwcm0KK1xzZXRmb250XGNoYXBzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAzfQorXGZvbnRcY2hhcGk9Y21taTEyIHNjYWxlZCBcbWFnc3RlcDIKK1xmb250XGNoYXBzeT1jbXN5MTAgc2NhbGVkIFxtYWdzdGVwMworCislIFNlY3Rpb24gZm9udHMgKDE0LjRwdCkuCitcZGVmXHNlY25vbWluYWxzaXplezE0cHR9Citcc2V0Zm9udFxzZWNybVxybWJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjaXRcaXRic2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NsXHNsYnNoYXBlezEwfXtcbWFnc3RlcDJ9Citcc2V0Zm9udFxzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXAxfQorXHNldGZvbnRcc2VjdHRzbFx0dHNsc2hhcGV7MTB9e1xtYWdzdGVwMn0KK1xzZXRmb250XHNlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcDF9CitcbGV0XHNlY2JmXHNlY3JtCitcc2V0Zm9udFxzZWNzY1xzY2JzaGFwZXsxMH17XG1hZ3N0ZXAyfQorXGZvbnRcc2VjaT1jbW1pMTIgc2NhbGVkIFxtYWdzdGVwMQorXGZvbnRcc2Vjc3k9Y21zeTEwIHNjYWxlZCBcbWFnc3RlcDIKKworJSBTdWJzZWN0aW9uIGZvbnRzICgxMy4xNXB0KS4KK1xkZWZcc3NlY25vbWluYWxzaXplezEzcHR9Citcc2V0Zm9udFxzc2Vjcm1ccm1ic2hhcGV7MTJ9e1xtYWdzdGVwaGFsZn0KK1xzZXRmb250XHNzZWNpdFxpdGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWNzbFxzbGJzaGFwZXsxMH17MTMxNX0KK1xzZXRmb250XHNzZWN0dFx0dGJzaGFwZXsxMn17XG1hZ3N0ZXBoYWxmfQorXHNldGZvbnRcc3NlY3R0c2xcdHRzbHNoYXBlezEwfXsxMzE1fQorXHNldGZvbnRcc3NlY3NmXHNmYnNoYXBlezEyfXtcbWFnc3RlcGhhbGZ9CitcbGV0XHNzZWNiZlxzc2Vjcm0KK1xzZXRmb250XHNzZWNzY1xzY2JzaGFwZXsxMH17MTMxNX0KK1xmb250XHNzZWNpPWNtbWkxMiBzY2FsZWQgXG1hZ3N0ZXBoYWxmCitcZm9udFxzc2Vjc3k9Y21zeTEwIHNjYWxlZCAxMzE1CisKKyUgUmVkdWNlZCBmb250cyBmb3IgQGFjcm8gaW4gdGV4dCAoMTBwdCkuCitcZGVmXHJlZHVjZWRub21pbmFsc2l6ZXsxMHB0fQorXHNldGZvbnRccmVkdWNlZHJtXHJtc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRcdHRzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRiZlxiZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZGl0XGl0c2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2Vkc2xcc2xzaGFwZXsxMH17MTAwMH0KK1xzZXRmb250XHJlZHVjZWRzZlxzZnNoYXBlezEwfXsxMDAwfQorXHNldGZvbnRccmVkdWNlZHNjXHNjc2hhcGV7MTB9ezEwMDB9Citcc2V0Zm9udFxyZWR1Y2VkdHRzbFx0dHNsc2hhcGV7MTB9ezEwMDB9CitcZm9udFxyZWR1Y2VkaT1jbW1pMTAKK1xmb250XHJlZHVjZWRzeT1jbXN5MTAKKworJSBJbiBvcmRlciBmb3IgdGhlIGZvbnQgY2hhbmdlcyB0byBhZmZlY3QgbW9zdCBtYXRoIHN5bWJvbHMgYW5kIGxldHRlcnMsCislIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBcdGV4dGZvbnQgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiAgU2luY2UKKyUgdGV4aW5mbyBkb2Vzbid0IGFsbG93IGZvciBwcm9kdWNpbmcgc3Vic2NyaXB0cyBhbmQgc3VwZXJzY3JpcHRzIGV4Y2VwdAorJSBpbiB0aGUgbWFpbiB0ZXh0LCB3ZSBkb24ndCBib3RoZXIgdG8gcmVzZXQgXHNjcmlwdGZvbnQgYW5kCislIFxzY3JpcHRzY3JpcHRmb250ICh3aGljaCB3b3VsZCBhbHNvIHJlcXVpcmUgbG9hZGluZyBhIGxvdCBtb3JlIGZvbnRzKS4KKyUKK1xkZWZccmVzZXRtYXRoZm9udHN7JQorICBcdGV4dGZvbnQwPVx0ZW5ybSBcdGV4dGZvbnQxPVx0ZW5pIFx0ZXh0Zm9udDI9XHRlbnN5CisgIFx0ZXh0Zm9udFxpdGZhbT1cdGVuaXQgXHRleHRmb250XHNsZmFtPVx0ZW5zbCBcdGV4dGZvbnRcYmZmYW09XHRlbmJmCisgIFx0ZXh0Zm9udFx0dGZhbT1cdGVudHQgXHRleHRmb250XHNmZmFtPVx0ZW5zZgorfQorCislIFRoZSBmb250LWNoYW5naW5nIGNvbW1hbmRzIHJlZGVmaW5lIHRoZSBtZWFuaW5ncyBvZiBcdGVuU1RZTEUsIGluc3RlYWQKKyUgb2YganVzdCBcU1RZTEUuICBXZSBkbyB0aGlzIGJlY2F1c2UgXFNUWUxFIG5lZWRzIHRvIGFsc28gc2V0IHRoZQorJSBjdXJyZW50IFxmYW0gZm9yIG1hdGggbW9kZS4gIE91ciBcU1RZTEUgKGUuZy4sIFxybSkgY29tbWFuZHMgaGFyZHdpcmUKKyUgXHRlblNUWUxFIHRvIHNldCB0aGUgY3VycmVudCBmb250LgorJQorJSBFYWNoIGZvbnQtY2hhbmdpbmcgY29tbWFuZCBhbHNvIHNldHMgdGhlIG5hbWVzIFxsc2l6ZSAob25lIHNpemUgbG93ZXIpCislIGFuZCBcbGxsc2l6ZSAodGhyZWUgc2l6ZXMgbG93ZXIpLiAgVGhlc2UgcmVsYXRpdmUgY29tbWFuZHMgYXJlIHVzZWQgaW4KKyUgdGhlIExhVGVYIGxvZ28gYW5kIGFjcm9ueW1zLgorJQorJSBUaGlzIGFsbCBuZWVkcyBnZW5lcmFsaXppbmcsIGJhZGx5LgorJQorXGRlZlx0ZXh0Zm9udHN7JQorICBcbGV0XHRlbnJtPVx0ZXh0cm0gXGxldFx0ZW5pdD1cdGV4dGl0IFxsZXRcdGVuc2w9XHRleHRzbAorICBcbGV0XHRlbmJmPVx0ZXh0YmYgXGxldFx0ZW50dD1cdGV4dHR0IFxsZXRcc21hbGxjYXBzPVx0ZXh0c2MKKyAgXGxldFx0ZW5zZj1cdGV4dHNmIFxsZXRcdGVuaT1cdGV4dGkgXGxldFx0ZW5zeT1cdGV4dHN5CisgIFxsZXRcdGVudHRzbD1cdGV4dHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXt0ZXh0fSUKKyAgXGRlZlxsc2l6ZXtyZWR1Y2VkfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5ne1x0ZXh0bGVhZGluZ319CitcZGVmXHRpdGxlZm9udHN7JQorICBcbGV0XHRlbnJtPVx0aXRsZXJtIFxsZXRcdGVuaXQ9XHRpdGxlaXQgXGxldFx0ZW5zbD1cdGl0bGVzbAorICBcbGV0XHRlbmJmPVx0aXRsZWJmIFxsZXRcdGVudHQ9XHRpdGxldHQgXGxldFxzbWFsbGNhcHM9XHRpdGxlc2MKKyAgXGxldFx0ZW5zZj1cdGl0bGVzZiBcbGV0XHRlbmk9XHRpdGxlaSBcbGV0XHRlbnN5PVx0aXRsZXN5CisgIFxsZXRcdGVudHRzbD1cdGl0bGV0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7dGl0bGV9JQorICBcZGVmXGxzaXple2NoYXB9XGRlZlxsbGxzaXple3N1YnNlY30lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3syNXB0fX0KK1xkZWZcdGl0bGVmb250IzF7e1x0aXRsZWZvbnRzXHJtICMxfX0KK1xkZWZcY2hhcGZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cY2hhcHJtIFxsZXRcdGVuaXQ9XGNoYXBpdCBcbGV0XHRlbnNsPVxjaGFwc2wKKyAgXGxldFx0ZW5iZj1cY2hhcGJmIFxsZXRcdGVudHQ9XGNoYXB0dCBcbGV0XHNtYWxsY2Fwcz1cY2hhcHNjCisgIFxsZXRcdGVuc2Y9XGNoYXBzZiBcbGV0XHRlbmk9XGNoYXBpIFxsZXRcdGVuc3k9XGNoYXBzeQorICBcbGV0XHRlbnR0c2w9XGNoYXB0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7Y2hhcH0lCisgIFxkZWZcbHNpemV7c2VjfVxkZWZcbGxsc2l6ZXt0ZXh0fSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezE5cHR9fQorXGRlZlxzZWNmb250c3slCisgIFxsZXRcdGVucm09XHNlY3JtIFxsZXRcdGVuaXQ9XHNlY2l0IFxsZXRcdGVuc2w9XHNlY3NsCisgIFxsZXRcdGVuYmY9XHNlY2JmIFxsZXRcdGVudHQ9XHNlY3R0IFxsZXRcc21hbGxjYXBzPVxzZWNzYworICBcbGV0XHRlbnNmPVxzZWNzZiBcbGV0XHRlbmk9XHNlY2kgXGxldFx0ZW5zeT1cc2Vjc3kKKyAgXGxldFx0ZW50dHNsPVxzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c2VjfSUKKyAgXGRlZlxsc2l6ZXtzdWJzZWN9XGRlZlxsbGxzaXple3JlZHVjZWR9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTZwdH19CitcZGVmXHN1YnNlY2ZvbnRzeyUKKyAgXGxldFx0ZW5ybT1cc3NlY3JtIFxsZXRcdGVuaXQ9XHNzZWNpdCBcbGV0XHRlbnNsPVxzc2Vjc2wKKyAgXGxldFx0ZW5iZj1cc3NlY2JmIFxsZXRcdGVudHQ9XHNzZWN0dCBcbGV0XHNtYWxsY2Fwcz1cc3NlY3NjCisgIFxsZXRcdGVuc2Y9XHNzZWNzZiBcbGV0XHRlbmk9XHNzZWNpIFxsZXRcdGVuc3k9XHNzZWNzeQorICBcbGV0XHRlbnR0c2w9XHNzZWN0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7c3NlY30lCisgIFxkZWZcbHNpemV7dGV4dH1cZGVmXGxsbHNpemV7c21hbGx9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTVwdH19CitcbGV0XHN1YnN1YnNlY2ZvbnRzID0gXHN1YnNlY2ZvbnRzCitcZGVmXHJlZHVjZWRmb250c3slCisgIFxsZXRcdGVucm09XHJlZHVjZWRybSBcbGV0XHRlbml0PVxyZWR1Y2VkaXQgXGxldFx0ZW5zbD1ccmVkdWNlZHNsCisgIFxsZXRcdGVuYmY9XHJlZHVjZWRiZiBcbGV0XHRlbnR0PVxyZWR1Y2VkdHQgXGxldFxyZWR1Y2VkY2Fwcz1ccmVkdWNlZHNjCisgIFxsZXRcdGVuc2Y9XHJlZHVjZWRzZiBcbGV0XHRlbmk9XHJlZHVjZWRpIFxsZXRcdGVuc3k9XHJlZHVjZWRzeQorICBcbGV0XHRlbnR0c2w9XHJlZHVjZWR0dHNsCisgIFxkZWZcY3VyZm9udHNpemV7cmVkdWNlZH0lCisgIFxkZWZcbHNpemV7c21hbGx9XGRlZlxsbGxzaXple3NtYWxsZXJ9JQorICBccmVzZXRtYXRoZm9udHMgXHNldGxlYWRpbmd7MTAuNXB0fX0KK1xkZWZcc21hbGxmb250c3slCisgIFxsZXRcdGVucm09XHNtYWxscm0gXGxldFx0ZW5pdD1cc21hbGxpdCBcbGV0XHRlbnNsPVxzbWFsbHNsCisgIFxsZXRcdGVuYmY9XHNtYWxsYmYgXGxldFx0ZW50dD1cc21hbGx0dCBcbGV0XHNtYWxsY2Fwcz1cc21hbGxzYworICBcbGV0XHRlbnNmPVxzbWFsbHNmIFxsZXRcdGVuaT1cc21hbGxpIFxsZXRcdGVuc3k9XHNtYWxsc3kKKyAgXGxldFx0ZW50dHNsPVxzbWFsbHR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbH0lCisgIFxkZWZcbHNpemV7c21hbGxlcn1cZGVmXGxsbHNpemV7c21hbGxlcn0lCisgIFxyZXNldG1hdGhmb250cyBcc2V0bGVhZGluZ3sxMC41cHR9fQorXGRlZlxzbWFsbGVyZm9udHN7JQorICBcbGV0XHRlbnJtPVxzbWFsbGVycm0gXGxldFx0ZW5pdD1cc21hbGxlcml0IFxsZXRcdGVuc2w9XHNtYWxsZXJzbAorICBcbGV0XHRlbmJmPVxzbWFsbGVyYmYgXGxldFx0ZW50dD1cc21hbGxlcnR0IFxsZXRcc21hbGxjYXBzPVxzbWFsbGVyc2MKKyAgXGxldFx0ZW5zZj1cc21hbGxlcnNmIFxsZXRcdGVuaT1cc21hbGxlcmkgXGxldFx0ZW5zeT1cc21hbGxlcnN5CisgIFxsZXRcdGVudHRzbD1cc21hbGxlcnR0c2wKKyAgXGRlZlxjdXJmb250c2l6ZXtzbWFsbGVyfSUKKyAgXGRlZlxsc2l6ZXtzbWFsbGVyfVxkZWZcbGxsc2l6ZXtzbWFsbGVyfSUKKyAgXHJlc2V0bWF0aGZvbnRzIFxzZXRsZWFkaW5nezkuNXB0fX0KKworJSBTZXQgdGhlIGZvbnRzIHRvIHVzZSB3aXRoIHRoZSBAc21hbGwuLi4gZW52aXJvbm1lbnRzLgorXGxldFxzbWFsbGV4YW1wbGVmb250cyA9IFxzbWFsbGZvbnRzCisKKyUgQWJvdXQgXHNtYWxsZXhhbXBsZWZvbnRzLiAgSWYgd2UgdXNlIFxzbWFsbGZvbnRzICg5cHQpLCBAc21hbGxleGFtcGxlCislIGNhbiBmaXQgdGhpcyBtYW55IGNoYXJhY3RlcnM6CislICAgOC41eDExPTg2ICAgc21hbGxib29rPTcyICBhND05MCAgYTU9NjkKKyUgSWYgd2UgdXNlIFxzY3JpcHRmb250cyAoOHB0KSwgdGhlbiB3ZSBjYW4gZml0IHRoaXMgbWFueSBjaGFyYWN0ZXJzOgorJSAgIDguNXgxMT05MCsgIHNtYWxsYm9vaz04MCAgYTQ9OTArICBhNT03NworJSBGb3IgbWUsIHN1YmplY3RpdmVseSwgdGhlIGZldyBleHRyYSBjaGFyYWN0ZXJzIHRoYXQgZml0IGFyZW4ndCB3b3J0aAorJSB0aGUgYWRkaXRpb25hbCBzbWFsbG5lc3Mgb2YgOHB0LiAgU28gSSdtIG1ha2luZyB0aGUgZGVmYXVsdCA5cHQuCislCislIEJ5IHRoZSB3YXksIGZvciBjb21wYXJpc29uLCBoZXJlJ3Mgd2hhdCBmaXRzIHdpdGggQGV4YW1wbGUgKDEwcHQpOgorJSAgIDguNXgxMT03MSAgc21hbGxib29rPTYwICBhND03NSAgYTU9NTgKKyUKKyUgSSB3aXNoIHRoZSBVU0EgdXNlZCBBNCBwYXBlci4KKyUgLS1rYXJsLCAyNGphbjAzLgorCisKKyUgU2V0IHVwIHRoZSBkZWZhdWx0IGZvbnRzLCBzbyB3ZSBjYW4gdXNlIHRoZW0gZm9yIGNyZWF0aW5nIGJveGVzLgorJQorXHRleHRmb250cyBccm0KKworJSBEZWZpbmUgdGhlc2Ugc28gdGhleSBjYW4gYmUgZWFzaWx5IGNoYW5nZWQgZm9yIG90aGVyIGZvbnRzLgorXGRlZlxhbmdsZWxlZnR7JFxsYW5nbGUkfQorXGRlZlxhbmdsZXJpZ2h0eyRccmFuZ2xlJH0KKworJSBDb3VudCBkZXB0aCBpbiBmb250LWNoYW5nZXMsIGZvciBlcnJvciBjaGVja3MKK1xuZXdjb3VudFxmb250ZGVwdGggXGZvbnRkZXB0aD0wCisKKyUgRm9udHMgZm9yIHNob3J0IHRhYmxlIG9mIGNvbnRlbnRzLgorXHNldGZvbnRcc2hvcnRjb250cm1ccm1zaGFwZXsxMn17MTAwMH0KK1xzZXRmb250XHNob3J0Y29udGJmXGJmc2hhcGV7MTB9e1xtYWdzdGVwMX0gICUgbm8gY21iMTIKK1xzZXRmb250XHNob3J0Y29udHNsXHNsc2hhcGV7MTJ9ezEwMDB9Citcc2V0Zm9udFxzaG9ydGNvbnR0dFx0dHNoYXBlezEyfXsxMDAwfQorCislJSBBZGQgc2NyaWJlLWxpa2UgZm9udCBlbnZpcm9ubWVudHMsIHBsdXMgQGwgZm9yIGlubGluZSBsaXNwICh1c3VhbGx5IHNhbnMKKyUlIHNlcmlmKSBhbmQgQGlpIGZvciBUZVggaXRhbGljCisKKyUgXHNtYXJ0aXRhbGlje0FSR30gb3V0cHV0cyBhcmcgaW4gaXRhbGljcywgZm9sbG93ZWQgYnkgYW4gaXRhbGljIGNvcnJlY3Rpb24KKyUgdW5sZXNzIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIGlzIHN1Y2ggYXMgbm90IHRvIG5lZWQgb25lLgorXGRlZlxzbWFydGl0YWxpY3h7XGlmeFxuZXh0LFxlbHNlXGlmeFxuZXh0LVxlbHNlXGlmeFxuZXh0LlxlbHNlCisgICAgICAgICAgICAgICAgICAgIFxwdGV4c2xhc2hcZmlcZmlcZml9CitcZGVmXHNtYXJ0c2xhbnRlZCMxe3tcaWZ1c2luZ3R0XHR0c2xcc2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KK1xkZWZcc21hcnRpdGFsaWMjMXt7XGlmdXNpbmd0dFx0dHNsXGl0ICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKKyUgbGlrZSBcc21hcnRzbGFudGVkIGV4Y2VwdCB1bmNvbmRpdGlvbmFsbHkgdXNlcyBcdHRzbC4KKyUgQHZhciBpcyBzZXQgdG8gdGhpcyBmb3IgZGVmdW4gYXJndW1lbnRzLgorXGRlZlx0dHNsYW50ZWQjMXt7XHR0c2wgIzF9XGZ1dHVyZWxldFxuZXh0XHNtYXJ0aXRhbGljeH0KKworJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudAorJSB0dHNsIGZvciBib29rIHRpdGxlcywgZG8gd2U/CitcZGVmXGNpdGUjMXt7XHNsICMxfVxmdXR1cmVsZXRcbmV4dFxzbWFydGl0YWxpY3h9CisKK1xsZXRcaT1cc21hcnRpdGFsaWMKK1xsZXRcc2xhbnRlZD1cc21hcnRzbGFudGVkCitcbGV0XHZhcj1cc21hcnRzbGFudGVkCitcbGV0XGRmbj1cc21hcnRzbGFudGVkCitcbGV0XGVtcGg9XHNtYXJ0aXRhbGljCisKKyUgQGIsIGV4cGxpY2l0IGJvbGQuCitcZGVmXGIjMXt7XGJmICMxfX0KK1xsZXRcc3Ryb25nPVxiCisKKyUgQHNhbnNzZXJpZiwgZXhwbGljaXQgc2Fucy4KK1xkZWZcc2Fuc3NlcmlmIzF7e1xzZiAjMX19CisKKyUgV2UgY2FuJ3QganVzdCB1c2UgXGV4aHlwaGVucGVuYWx0eSwgYmVjYXVzZSB0aGF0IG9ubHkgaGFzIGVmZmVjdCBhdAorJSB0aGUgZW5kIG9mIGEgcGFyYWdyYXBoLiAgUmVzdG9yZSBub3JtYWwgaHlwaGVuYXRpb24gYXQgdGhlIGVuZCBvZiB0aGUKKyUgZ3JvdXAgd2l0aGluIHdoaWNoIFxub2h5cGhlbmF0aW9uIGlzIHByZXN1bWFibHkgY2FsbGVkLgorJQorXGRlZlxub2h5cGhlbmF0aW9ue1xoeXBoZW5jaGFyXGZvbnQgPSAtMSAgXGFmdGVyZ3JvdXBccmVzdG9yZWh5cGhlbmF0aW9ufQorXGRlZlxyZXN0b3JlaHlwaGVuYXRpb257XGh5cGhlbmNoYXJcZm9udCA9IGAtIH0KKworJSBTZXQgc2Zjb2RlIHRvIG5vcm1hbCBmb3IgdGhlIGNoYXJzIHRoYXQgdXN1YWxseSBoYXZlIGFub3RoZXIgdmFsdWUuCislIENhbid0IHVzZSBwbGFpbidzIFxmcmVuY2hzcGFjaW5nIGJlY2F1c2UgaXQgdXNlcyB0aGUgYFx4IG5vdGF0aW9uLCBhbmQKKyUgc29tZXRpbWVzIFx4IGhhcyBhbiBhY3RpdmUgZGVmaW5pdGlvbiB0aGF0IG1lc3NlcyB0aGluZ3MgdXAuCislCitcY2F0Y29kZWBAPTExCisgIFxkZWZccGxhaW5mcmVuY2hzcGFjaW5neyUKKyAgICBcc2Zjb2RlXGRvdENoYXIgID1cQG0gXHNmY29kZVxxdWVzdENoYXI9XEBtIFxzZmNvZGVcZXhjbGFtQ2hhcj1cQG0KKyAgICBcc2Zjb2RlXGNvbG9uQ2hhcj1cQG0gXHNmY29kZVxzZW1pQ2hhciA9XEBtIFxzZmNvZGVcY29tbWFDaGFyID1cQG0KKyAgICBcZGVmXGVuZG9mc2VudGVuY2VzcGFjZWZhY3RvcnsxMDAwfSUgZm9yIEAuIGFuZCBmcmllbmRzCisgIH0KKyAgXGRlZlxwbGFpbm5vbmZyZW5jaHNwYWNpbmd7JQorICAgIFxzZmNvZGVgXC4zMDAwXHNmY29kZWBcPzMwMDBcc2Zjb2RlYFwhMzAwMAorICAgIFxzZmNvZGVgXDoyMDAwXHNmY29kZWBcOzE1MDBcc2Zjb2RlYFwsMTI1MAorICAgIFxkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBmb3IgQC4gYW5kIGZyaWVuZHMKKyAgfQorXGNhdGNvZGVgQD1cb3RoZXIKK1xkZWZcZW5kb2ZzZW50ZW5jZXNwYWNlZmFjdG9yezMwMDB9JSBkZWZhdWx0CisKK1xkZWZcdCMxeyUKKyAge1x0dCBccmF3YmFja3NsYXNoIFxwbGFpbmZyZW5jaHNwYWNpbmcgIzF9JQorICBcbnVsbAorfQorXGRlZlxzYW1wIzF7YFx0Y2xvc2V7IzF9J1xudWxsfQorXHNldGZvbnRca2V5cm1ccm1zaGFwZXs4fXsxMDAwfQorXGZvbnRca2V5c3k9Y21zeTkKK1xkZWZca2V5IzF7e1xrZXlybVx0ZXh0Zm9udDI9XGtleXN5IFxsZWF2ZXZtb2RlXGhib3h7JQorICBccmFpc2UwLjRwdFxoYm94e1xhbmdsZWxlZnR9XGtlcm4tLjA4ZW1cdnRvcHslCisgICAgXHZib3h7XGhydWxlXGtlcm4tMC40cHQKKyAgICAgXGhib3h7XHJhaXNlMC40cHRcaGJveHtcdnBoYW50b217XGFuZ2xlbGVmdH19IzF9fSUKKyAgICBca2Vybi0wLjRwdFxocnVsZX0lCisgIFxrZXJuLS4wNmVtXHJhaXNlMC40cHRcaGJveHtcYW5nbGVyaWdodH19fX0KKyUgVGhlIG9sZCBkZWZpbml0aW9uLCB3aXRoIG5vIGxvemVuZ2U6CislXGRlZlxrZXkgIzF7e1x0dHNsIFxub2h5cGhlbmF0aW9uIFx1cHBlcmNhc2V7IzF9fVxudWxsfQorXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQorCislIEBmaWxlLCBAb3B0aW9uIGFyZSB0aGUgc2FtZSBhcyBAc2FtcC4KK1xsZXRcZmlsZT1cc2FtcAorXGxldFxvcHRpb249XHNhbXAKKworJSBAY29kZSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBAdCwKKyUgd2hpY2ggbWFrZXMgc3BhY2VzIHRoZSBzYW1lIHNpemUgYXMgbm9ybWFsIGluIHRoZSBzdXJyb3VuZGluZyB0ZXh0LgorXGRlZlx0Y2xvc2UjMXslCisgIHslCisgICAgJSBDaGFuZ2Ugbm9ybWFsIGludGVyd29yZCBzcGFjZSB0byBiZSBzYW1lIGFzIGZvciB0aGUgY3VycmVudCBmb250LgorICAgIFxzcGFjZXNraXAgPSBcZm9udGRpbWVuMlxmb250CisgICAgJQorICAgICUgU3dpdGNoIHRvIHR5cGV3cml0ZXIuCisgICAgXHR0CisgICAgJQorICAgICUgQnV0IGBcICcgcHJvZHVjZXMgdGhlIGxhcmdlIHR5cGV3cml0ZXIgaW50ZXJ3b3JkIHNwYWNlLgorICAgIFxkZWZcIHt7XHNwYWNlc2tpcCA9IDBwdHt9IH19JQorICAgICUKKyAgICAlIFR1cm4gb2ZmIGh5cGhlbmF0aW9uLgorICAgIFxub2h5cGhlbmF0aW9uCisgICAgJQorICAgIFxyYXdiYWNrc2xhc2gKKyAgICBccGxhaW5mcmVuY2hzcGFjaW5nCisgICAgIzElCisgIH0lCisgIFxudWxsCit9CisKKyUgV2UgKm11c3QqIHR1cm4gb24gaHlwaGVuYXRpb24gYXQgYC0nIGFuZCBgXycgaW4gQGNvZGUuCislIE90aGVyd2lzZSwgaXQgaXMgdG9vIGhhcmQgdG8gYXZvaWQgb3ZlcmZ1bGwgaGJveGVzCislIGluIHRoZSBFbWFjcyBtYW51YWwsIHRoZSBMaWJyYXJ5IG1hbnVhbCwgZXRjLgorCislIFVuZm9ydHVuYXRlbHksIFRlWCB1c2VzIG9uZSBwYXJhbWV0ZXIgKFxoeXBoZW5jaGFyKSB0byBjb250cm9sCislIGJvdGggaHlwaGVuYXRpb24gYXQgLSBhbmQgaHlwaGVuYXRpb24gd2l0aGluIHdvcmRzLgorJSBXZSBtdXN0IHRoZXJlZm9yZSB0dXJuIHRoZW0gYm90aCBvZmYgKFx0Y2xvc2UgZG9lcyB0aGF0KQorJSBhbmQgYXJyYW5nZSBleHBsaWNpdGx5IHRvIGh5cGhlbmF0ZSBhdCBhIGRhc2guCislICAtLSBybXMuCit7CisgIFxjYXRjb2RlYFwtPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF89XGFjdGl2ZQorICAlCisgIFxnbG9iYWxcZGVmXGNvZGV7XGJlZ2luZ3JvdXAKKyAgICBcY2F0Y29kZWBcLT1cYWN0aXZlICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgICAgXGlmYWxsb3djb2RlYnJlYWtzCisgICAgIFxsZXQtXGNvZGVkYXNoCisgICAgIFxsZXRfXGNvZGV1bmRlcgorICAgIFxlbHNlCisgICAgIFxsZXQtXHJlYWxkYXNoCisgICAgIFxsZXRfXHJlYWx1bmRlcgorICAgIFxmaQorICAgIFxjb2RleAorICB9Cit9CisKK1xkZWZccmVhbGRhc2h7LX0KK1xkZWZcY29kZWRhc2h7LVxkaXNjcmV0aW9uYXJ5e317fXt9fQorXGRlZlxjb2RldW5kZXJ7JQorICAlIHRoaXMgaXMgYWxsIHNvIEBtYXRoe0Bjb2Rle3Zhcl9uYW1lfSsxfSBjYW4gd29yay4gIEluIG1hdGggbW9kZSwgXworICAlIGlzICJhY3RpdmUiIChtYXRoY29kZSI4MDAwKSBhbmQgXG5vcm1hbHVuZGVyc2NvcmUgKG9yIFxjaGFyOTUsIGV0Yy4pCisgICUgd2lsbCB0aGVyZWZvcmUgZXhwYW5kIHRoZSBhY3RpdmUgZGVmaW5pdGlvbiBvZiBfLCB3aGljaCBpcyB1cworICAlIChpbnNpZGUgQGNvZGUgdGhhdCBpcyksIHRoZXJlZm9yZSBhbiBlbmRsZXNzIGxvb3AuCisgIFxpZnVzaW5ndHR7XGlmbW1vZGUKKyAgICAgICAgICAgICAgIFxtYXRoY2hhciIwNzVGICUgY2xhc3MgMD1vcmRpbmFyeSwgZmFtaWx5IDc9dHRmYW0sIHBvcyAweDVGPV8uCisgICAgICAgICAgICAgXGVsc2Vcbm9ybWFsdW5kZXJzY29yZSBcZmkKKyAgICAgICAgICAgICBcZGlzY3JldGlvbmFyeXt9e317fX0lCisgICAgICAgICAgICB7XF99JQorfQorXGRlZlxjb2RleCAjMXtcdGNsb3NleyMxfVxlbmRncm91cH0KKworJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAorJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCislIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgorJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCislIAorXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorCitcZGVmXGtleXdvcmR0cnVle3RydWV9CitcZGVmXGtleXdvcmRmYWxzZXtmYWxzZX0KKworXHBhcnNlYXJnZGVmXGFsbG93Y29kZWJyZWFrc3slCisgIFxkZWZcdHhpYXJneyMxfSUKKyAgXGlmeFx0eGlhcmdca2V5d29yZHRydWUKKyAgICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQorICBcZWxzZVxpZnhcdHhpYXJnXGtleXdvcmRmYWxzZQorICAgIFxhbGxvd2NvZGVicmVha3NmYWxzZQorICBcZWxzZQorICAgIFxlcnJoZWxwID0gXEVNc2ltcGxlCisgICAgXGVycm1lc3NhZ2V7VW5rbm93biBAYWxsb3djb2RlYnJlYWtzIG9wdGlvbiBgXHR4aWFyZyd9JQorICBcZmlcZmkKK30KKworJSBAa2JkIGlzIGxpa2UgQGNvZGUsIGV4Y2VwdCB0aGF0IGlmIHRoZSBhcmd1bWVudCBpcyBqdXN0IG9uZSBAa2V5IGNvbW1hbmQsCislIHRoZW4gQGtiZCBoYXMgbm8gZWZmZWN0LgorCislIEBrYmRpbnB1dHN0eWxlIC0tIGFyZyBpcyBgZGlzdGluY3QnIChAa2JkIHVzZXMgc2xhbnRlZCB0dHkgZm9udCBhbHdheXMpLAorJSAgIGBleGFtcGxlJyAoQGtiZCB1c2VzIHR0c2wgb25seSBpbnNpZGUgb2YgQGV4YW1wbGUgYW5kIGZyaWVuZHMpLAorJSAgIG9yIGBjb2RlJyAoQGtiZCB1c2VzIG5vcm1hbCB0dHkgZm9udCBhbHdheXMpLgorXHBhcnNlYXJnZGVmXGtiZGlucHV0c3R5bGV7JQorICBcZGVmXHR4aWFyZ3sjMX0lCisgIFxpZnhcdHhpYXJnXHdvcmRkaXN0aW5jdAorICAgIFxnZGVmXGtiZGV4YW1wbGVmb250e1x0dHNsfVxnZGVmXGtiZGZvbnR7XHR0c2x9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRleGFtcGxlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0c2x9XGdkZWZca2JkZm9udHtcdHR9JQorICBcZWxzZVxpZnhcdHhpYXJnXHdvcmRjb2RlCisgICAgXGdkZWZca2JkZXhhbXBsZWZvbnR7XHR0fVxnZGVmXGtiZGZvbnR7XHR0fSUKKyAgXGVsc2UKKyAgICBcZXJyaGVscCA9IFxFTXNpbXBsZQorICAgIFxlcnJtZXNzYWdle1Vua25vd24gQGtiZGlucHV0c3R5bGUgb3B0aW9uIGBcdHhpYXJnJ30lCisgIFxmaVxmaVxmaQorfQorXGRlZlx3b3JkZGlzdGluY3R7ZGlzdGluY3R9CitcZGVmXHdvcmRleGFtcGxle2V4YW1wbGV9CitcZGVmXHdvcmRjb2Rle2NvZGV9CisKKyUgRGVmYXVsdCBpcyBgZGlzdGluY3QuJworXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKKworXGRlZlx4a2V5e1xrZXl9CitcZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCitcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCitcZWxzZXtcdGNsb3Nle1xrYmRmb250XGxvb2t9fVxmaQorXGVsc2V7XHRjbG9zZXtca2JkZm9udFxsb29rfX1cZml9CisKKyUgRm9yIEBpbmRpY2F0ZXVybCwgQGVudiwgQGNvbW1hbmQgcXVvdGVzIHNlZW0gdW5uZWNlc3NhcnksIHNvIHVzZSBcY29kZS4KK1xsZXRcaW5kaWNhdGV1cmw9XGNvZGUKK1xsZXRcZW52PVxjb2RlCitcbGV0XGNvbW1hbmQ9XGNvZGUKKworJSBAdXJlZiAoYWJicmV2aWF0aW9uIGZvciBgdXJscmVmJykgdGFrZXMgYW4gb3B0aW9uYWwgKGNvbW1hLXNlcGFyYXRlZCkKKyUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZnlpbmcgdGhlIHRleHQgdG8gZGlzcGxheSBhbmQgYW4gb3B0aW9uYWwgdGhpcmQKKyUgYXJnIGFzIHRleHQgdG8gZGlzcGxheSBpbnN0ZWFkIG9mIChyYXRoZXIgdGhhbiBpbiBhZGRpdGlvbiB0bykgdGhlIHVybAorJSBpdHNlbGYuICBGaXJzdCAobWFuZGF0b3J5KSBhcmcgaXMgdGhlIHVybC4gIFBlcmhhcHMgZXZlbnR1YWxseSBwdXQgaW4KKyUgYSBoeXBlcnRleCBcc3BlY2lhbCBoZXJlLgorJQorXGRlZlx1cmVmIzF7XGRvdXJlZiAjMSwsLFxmaW5pc2h9CitcZGVmXGRvdXJlZiMxLCMyLCMzLCM0XGZpbmlzaHtcYmVnaW5ncm91cAorICBcdW5zZXBzcGFjZXMKKyAgXHBkZnVybHsjMX0lCisgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICBcdW5oYm94MCAlIHRoaXJkIGFyZyBnaXZlbiwgc2hvdyBvbmx5IHRoYXQKKyAgXGVsc2UKKyAgICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9JQorICAgIFxpZmRpbVx3ZDAgPiAwcHQKKyAgICAgIFxpZnBkZgorICAgICAgICBcdW5oYm94MCAgICAgICAgICAgICAlIFBERjogMm5kIGFyZyBnaXZlbiwgc2hvdyBvbmx5IGl0CisgICAgICBcZWxzZQorICAgICAgICBcdW5oYm94MFwgKFxjb2RleyMxfSklIERWSTogMm5kIGFyZyBnaXZlbiwgc2hvdyBib3RoIGl0IGFuZCB1cmwKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcY29kZXsjMX0lIG9ubHkgdXJsIGdpdmVuLCBzbyBzaG93IGl0CisgICAgXGZpCisgIFxmaQorICBcZW5kbGluaworXGVuZGdyb3VwfQorCislIEB1cmwgc3lub255bSBmb3IgQHVyZWYsIHNpbmNlIHRoYXQncyBob3cgZXZlcnlvbmUgdXNlcyBpdC4KKyUKK1xsZXRcdXJsPVx1cmVmCisKKyUgcm1zIGRvZXMgbm90IGxpa2UgYW5nbGUgYnJhY2tldHMgLS1rYXJsLCAxN21heTk3LgorJSBTbyBub3cgQGVtYWlsIGlzIGp1c3QgbGlrZSBAdXJlZiwgdW5sZXNzIHdlIGFyZSBwZGYuCislCislXGRlZlxlbWFpbCMxe1xhbmdsZWxlZnR7XHR0ICMxfVxhbmdsZXJpZ2h0fQorXGlmcGRmCisgIFxkZWZcZW1haWwjMXtcZG9lbWFpbCMxLCxcZmluaXNofQorICBcZGVmXGRvZW1haWwjMSwjMiwjM1xmaW5pc2h7XGJlZ2luZ3JvdXAKKyAgICBcdW5zZXBzcGFjZXMKKyAgICBccGRmdXJse21haWx0bzojMX0lCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMyfSUKKyAgICBcaWZkaW1cd2QwPjBwdFx1bmhib3gwXGVsc2VcY29kZXsjMX1cZmkKKyAgICBcZW5kbGluaworICBcZW5kZ3JvdXB9CitcZWxzZQorICBcbGV0XGVtYWlsPVx1cmVmCitcZmkKKworJSBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgdHlwZXdyaXRlciBmb250LiAgU2luY2UgYWxsIHRoZQorJSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8gaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZAorJSBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZQorJSB0aGlzIHByb3BlcnR5LCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZtb25vc3BhY2V7XGlmZGltXGZvbnRkaW1lbjNcZm9udD0wcHQgfQorCislIFR5cGVzZXQgYSBkaW1lbnNpb24sIGUuZy4sIGBpbicgb3IgYHB0Jy4gIFRoZSBvbmx5IHJlYXNvbiBmb3IgdGhlCislIGFyZ3VtZW50IGlzIHRvIG1ha2UgdGhlIGlucHV0IGxvb2sgcmlnaHQ6IEBkbW57cHR9IGluc3RlYWQgb2YgQGRtbnt9cHQuCislCitcZGVmXGRtbiMxe1x0aGluc3BhY2UgIzF9CisKK1xkZWZca2JkIzF7XGRlZlxsb29reyMxfVxleHBhbmRhZnRlclxrYmRmb29cbG9vaz8/XHBhcn0KKworJSBAbCB3YXMgbmV2ZXIgZG9jdW1lbnRlZCB0byBtZWFuIGBgc3dpdGNoIHRvIHRoZSBMaXNwIGZvbnQnJywKKyUgYW5kIGl0IGlzIG5vdCB1c2VkIGFzIHN1Y2ggaW4gYW55IG1hbnVhbCBJIGNhbiBmaW5kLiAgV2UgbmVlZCBpdCBmb3IKKyUgUG9saXNoIHN1cHByZXNzZWQtbC4gIC0ta2FybCwgMjJzZXA5Ni4KKyVcZGVmXGwjMXt7XGxpICMxfVxudWxsfQorCislIEV4cGxpY2l0IGZvbnQgY2hhbmdlczogQHIsIEBzYywgdW5kb2N1bWVudGVkIEBpaS4KK1xkZWZcciMxe3tccm0gIzF9fSAgICAgICAgICAgICAgJSByb21hbiBmb250CitcZGVmXHNjIzF7e1xzbWFsbGNhcHMjMX19ICAgICAgICUgc21hbGxjYXBzIGZvbnQKK1xkZWZcaWkjMXt7XGl0ICMxfX0gICAgICAgICAgICAgJSBpdGFsaWMgZm9udAorCislIEBhY3JvbnltIGZvciAiRkJJIiwgIk5BVE8iLCBhbmQgdGhlIGxpa2UuCislIFdlIHByaW50IHRoaXMgb25lIHBvaW50IHNpemUgc21hbGxlciwgc2luY2UgaXQncyBpbnRlbmRlZCBmb3IKKyUgYWxsLXVwcGVyY2FzZS4KKyUgCitcZGVmXGFjcm9ueW0jMXtcZG9hY3JvbnltICMxLCxcZmluaXNofQorXGRlZlxkb2Fjcm9ueW0jMSwjMiwjM1xmaW5pc2h7JQorICB7XHNlbGVjdGZvbnRzXGxzaXplICMxfSUKKyAgXGRlZlx0ZW1weyMyfSUKKyAgXGlmeFx0ZW1wXGVtcHR5IFxlbHNlCisgICAgXHNwYWNlICh7XHVuc2Vwc3BhY2VzIFxpZ25vcmVzcGFjZXMgXHRlbXAgXHVuc2tpcH0pJQorICBcZmkKK30KKworJSBAYWJiciBmb3IgIkNvbXB1dC4gSi4iIGFuZCB0aGUgbGlrZS4KKyUgTm8gZm9udCBjaGFuZ2UsIGJ1dCBkb24ndCBkbyBlbmQtb2Ytc2VudGVuY2Ugc3BhY2luZy4KKyUgCitcZGVmXGFiYnIjMXtcZG9hYmJyICMxLCxcZmluaXNofQorXGRlZlxkb2FiYnIjMSwjMiwjM1xmaW5pc2h7JQorICB7XHBsYWluZnJlbmNoc3BhY2luZyAjMX0lCisgIFxkZWZcdGVtcHsjMn0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIFxzcGFjZSAoe1x1bnNlcHNwYWNlcyBcaWdub3Jlc3BhY2VzIFx0ZW1wIFx1bnNraXB9KSUKKyAgXGZpCit9CisKKyUgQHBvdW5kc3t9IGlzIGEgc3Rlcmxpbmcgc2lnbiwgd2hpY2ggS251dGggcHV0IGluIHRoZSBDTSBpdGFsaWMgZm9udC4KKyUKK1xkZWZccG91bmRze3tcaXRcJH19CisKKyUgQGV1cm97fSBjb21lcyBmcm9tIGEgc2VwYXJhdGUgZm9udCwgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0eWxlLgorJSBXZSB1c2UgdGhlIGZyZWUgZmV5bSogZm9udHMgZnJvbSB0aGUgZXVyb3N5bSBwYWNrYWdlIGJ5IEhlbnJpaworJSBUaGVpbGluZywgd2hpY2ggc3VwcG9ydCByZWd1bGFyLCBzbGFudGVkLCBib2xkIGFuZCBib2xkIHNsYW50ZWQgKGFuZAorJSAib3V0bGluZWQiIChibGFja2JvYXJkIGJvYXJkLCBzb3J0IG9mKSB2ZXJzaW9ucywgd2hpY2ggd2UgZG9uJ3QgbmVlZCkuCislIEl0IGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cuY3Rhbi5vcmcvdGV4LWFyY2hpdmUvZm9udHMvZXVyb3N5bS4KKyUgCislIEFsdGhvdWdoIG9ubHkgcmVndWxhciBpcyB0aGUgdHJ1bHkgb2ZmaWNpYWwgRXVybyBzeW1ib2wsIHdlIGlnbm9yZQorJSB0aGF0LiAgVGhlIEV1cm8gaXMgZGVzaWduZWQgdG8gYmUgc2xpZ2h0bHkgdGFsbGVyIHRoYW4gdGhlIHJlZ3VsYXIKKyUgZm9udCBoZWlnaHQuCislIAorJSBmZXltciAtIHJlZ3VsYXIKKyUgZmV5bW8gLSBzbGFudGVkCislIGZleWJyIC0gYm9sZAorJSBmZXlibyAtIGJvbGQgc2xhbnRlZAorJSAKKyUgVGhlcmUgaXMgbm8gZ29vZCAoZnJlZSkgdHlwZXdyaXRlciB2ZXJzaW9uLCB0byBteSBrbm93bGVkZ2UuCislIEEgZmV5bXIxMCBldXJvIGlzIH43LjNwdCB3aWRlLCB3aGlsZSBhIG5vcm1hbCBjbXR0MTAgY2hhciBpcyB+NS4yNXB0IHdpZGUuCislIEhtbS4KKyUgCislIEFsc28gZG9lc24ndCB3b3JrIGluIG1hdGguICBEbyB3ZSBuZWVkIHRvIGRvIG1hdGggd2l0aCBldXJvIHN5bWJvbHM/CislIEhvcGUgbm90LgorJSAKKyUgCitcZGVmXGV1cm97e1xldXJvZm9udCBlfX0KK1xkZWZcZXVyb2ZvbnR7JQorICAlIFdlIHNldCB0aGUgZm9udCBhdCBlYWNoIGNvbW1hbmQsIHJhdGhlciB0aGFuIHByZWRlZmluaW5nIGl0IGluCisgICUgXHRleHRmb250cyBhbmQgdGhlIG90aGVyIGZvbnQtc3dpdGNoaW5nIGNvbW1hbmRzLCBzbyB0aGF0CisgICUgaW5zdGFsbGF0aW9ucyB3aGljaCBuZXZlciBuZWVkIHRoZSBzeW1ib2wgZG9uJ3QgaGF2ZSB0byBoYXZlIHRoZQorICAlIGZvbnQgaW5zdGFsbGVkLgorICAlIAorICAlIFRoZXJlIGlzIG9ubHkgb25lIGRlc2lnbmVkIHNpemUgKG5vbWluYWwgMTBwdCksIHNvIHdlIGFsd2F5cyBzY2FsZQorICAlIHRoYXQgdG8gdGhlIGN1cnJlbnQgbm9taW5hbCBzaXplLgorICAlIAorICAlIEJ5IHRoZSB3YXksIHNpbXBseSB1c2luZyAiYXQgMWVtIiB3b3JrcyBmb3IgY21yMTAgYW5kIHRoZSBsaWtlLCBidXQKKyAgJSBkb2VzIG5vdCB3b3JrIGZvciBjbWJ4MTAgYW5kIG90aGVyIGV4dGVuZGVkL3NocnVua2VuIGZvbnRzLgorICAlIAorICBcZGVmXGV1cm9zaXple1xjc25hbWVcY3VyZm9udHNpemUgbm9taW5hbHNpemVcZW5kY3NuYW1lfSUKKyAgJQorICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZSAKKyAgICAlIGJvbGQ6CisgICAgXGZvbnRcdGhpc2V1cm9mb250ID0gXGlmdXNpbmdpdHtmZXlibzEwfXtmZXlicjEwfSBhdCBcZXVyb3NpemUKKyAgXGVsc2UgCisgICAgJSByZWd1bGFyOgorICAgIFxmb250XHRoaXNldXJvZm9udCA9IFxpZnVzaW5naXR7ZmV5bW8xMH17ZmV5bXIxMH0gYXQgXGV1cm9zaXplCisgIFxmaQorICBcdGhpc2V1cm9mb250Cit9CisKKyUgQHJlZ2lzdGVyZWRzeW1ib2wgLSBSIGluIGEgY2lyY2xlLiAgVGhlIGZvbnQgZm9yIHRoZSBSIHNob3VsZCByZWFsbHkKKyUgYmUgc21hbGxlciB5ZXQsIGJ1dCBsbGxzaXplIGlzIHRoZSBiZXN0IHdlIGNhbiBkbyBmb3Igbm93LgorJSBBZGFwdGVkIGZyb20gdGhlIHBsYWluLnRleCBkZWZpbml0aW9uIG9mIFxjb3B5cmlnaHQuCislCitcZGVmXHJlZ2lzdGVyZWRzeW1ib2x7JQorICAkXnt7XG9vYWxpZ257XGhmaWxccmFpc2UuMDdleFxoYm94e1xzZWxlY3Rmb250c1xsbGxzaXplIFJ9JQorICAgICAgICAgICAgICAgXGhmaWxcY3JjclxPcmJ9fSUKKyAgICB9JCUKK30KKworJSBMYXVyZW50IFNpZWJlbm1hbm4gcmVwb3J0cyBcT3JiIHVuZGVmaW5lZCB3aXRoOgorJSAgVGV4dHVyZXMgMS43LjcgKHByZWxvYWRlZCBmb3JtYXQ9cGxhaW4gOTMuMTAuMTQpICAoNjhLKSAgMTYgQVBSIDIwMDQgMDI6MzgKKyUgc28gd2UnbGwgZGVmaW5lIGl0IGlmIG5lY2Vzc2FyeS4KKyUgCitcaWZ4XE9yYlx1bmRlZmluZWQKK1xkZWZcT3Jie1xtYXRoaGV4Ym94MjBEfQorXGZpCisKKworXG1lc3NhZ2V7cGFnZSBoZWFkaW5ncyx9CisKK1xuZXdza2lwXHRpdGxlcGFnZXRvcGdsdWUgXHRpdGxlcGFnZXRvcGdsdWUgPSAxLjVpbgorXG5ld3NraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZSBcdGl0bGVwYWdlYm90dG9tZ2x1ZSA9IDJwYworCislIEZpcnN0IHRoZSB0aXRsZSBwYWdlLiAgTXVzdCBkbyBAc2V0dGl0bGUgYmVmb3JlIEB0aXRsZXBhZ2UuCitcbmV3aWZcaWZzZWVuYXV0aG9yCitcbmV3aWZcaWZmaW5pc2hlZHRpdGxlcGFnZQorCislIERvIGFuIGltcGxpY2l0IEBjb250ZW50cyBvciBAc2hvcnRjb250ZW50cyBhZnRlciBAZW5kIHRpdGxlcGFnZSBpZiB0aGUKKyUgdXNlciBzYXlzIEBzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlIG9yIEBzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UuCislCitcbmV3aWZcaWZzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlCisgXGxldFxzZXRjb250ZW50c2FmdGVydGl0bGVwYWdlID0gXHNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCitcbmV3aWZcaWZzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyBcbGV0XHNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZSA9IFxzZXRzaG9ydGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2V0cnVlCisKK1xwYXJzZWFyZ2RlZlxzaG9ydHRpdGxlcGFnZXtcYmVnaW5ncm91cFxoYm94e31cdnNraXAgMS41aW4gXGNoYXBybSBcY2VudGVybGluZXsjMX0lCisgICAgICAgIFxlbmRncm91cFxwYWdlXGhib3h7fVxwYWdlfQorCitcZW52ZGVmXHRpdGxlcGFnZXslCisgICUgT3BlbiBvbmUgZXh0cmEgZ3JvdXAsIGFzIHdlIHdhbnQgdG8gY2xvc2UgaXQgaW4gdGhlIG1pZGRsZSBvZiBcRXRpdGxlcGFnZS4KKyAgXGJlZ2luZ3JvdXAKKyAgICBccGFyaW5kZW50PTBwdCBcdGV4dGZvbnRzCisgICAgJSBMZWF2ZSBzb21lIHNwYWNlIGF0IHRoZSB2ZXJ5IHRvcCBvZiB0aGUgcGFnZS4KKyAgICBcdmdsdWVcdGl0bGVwYWdldG9wZ2x1ZQorICAgICUgTm8gcnVsZSBhdCBwYWdlIGJvdHRvbSB1bmxlc3Mgd2UgcHJpbnQgb25lIGF0IHRoZSB0b3Agd2l0aCBAdGl0bGUuCisgICAgXGZpbmlzaGVkdGl0bGVwYWdldHJ1ZQorICAgICUKKyAgICAlIE1vc3QgdGl0bGUgYGBwYWdlcycnIGFyZSBhY3R1YWxseSB0d28gcGFnZXMgbG9uZywgd2l0aCBzcGFjZQorICAgICUgYXQgdGhlIHRvcCBvZiB0aGUgc2Vjb25kLiAgV2UgZG9uJ3Qgd2FudCB0aGUgcmFnZ2VkIGxlZnQgb24gdGhlIHNlY29uZC4KKyAgICBcbGV0XG9sZHBhZ2UgPSBccGFnZQorICAgIFxkZWZccGFnZXslCisgICAgICBcaWZmaW5pc2hlZHRpdGxlcGFnZVxlbHNlCisJIFxmaW5pc2h0aXRsZXBhZ2UKKyAgICAgIFxmaQorICAgICAgXGxldFxwYWdlID0gXG9sZHBhZ2UKKyAgICAgIFxwYWdlCisgICAgICBcbnVsbAorICAgIH0lCit9CisKK1xkZWZcRXRpdGxlcGFnZXslCisgICAgXGlmZmluaXNoZWR0aXRsZXBhZ2VcZWxzZQorCVxmaW5pc2h0aXRsZXBhZ2UKKyAgICBcZmkKKyAgICAlIEl0IGlzIGltcG9ydGFudCB0byBkbyB0aGUgcGFnZSBicmVhayBiZWZvcmUgZW5kaW5nIHRoZSBncm91cCwKKyAgICAlIGJlY2F1c2UgdGhlIGhlYWRsaW5lIGFuZCBmb290bGluZSBhcmUgb25seSBlbXB0eSBpbnNpZGUgdGhlIGdyb3VwLgorICAgICUgSWYgd2UgdXNlIHRoZSBuZXcgZGVmaW5pdGlvbiBvZiBccGFnZSwgd2UgYWx3YXlzIGdldCBhIGJsYW5rIHBhZ2UKKyAgICAlIGFmdGVyIHRoZSB0aXRsZSBwYWdlLCB3aGljaCB3ZSBjZXJ0YWlubHkgZG9uJ3Qgd2FudC4KKyAgICBcb2xkcGFnZQorICBcZW5kZ3JvdXAKKyAgJQorICAlIE5lZWQgdGhpcyBiZWZvcmUgdGhlIFwuLi5hZnRlcnRpdGxlcGFnZSBjaGVja3Mgc28gdGhhdCBpZiB0aGV5IGFyZQorICAlIGluIGVmZmVjdCB0aGUgdG9jIHBhZ2VzIHdpbGwgY29tZSBvdXQgd2l0aCBwYWdlIG51bWJlcnMuCisgIFxIRUFESU5HU29uCisgICUKKyAgJSBJZiB0aGV5IHdhbnQgc2hvcnQsIHRoZXkgY2VydGFpbmx5IHdhbnQgbG9uZyB0b28uCisgIFxpZnNldHNob3J0Y29udGVudHNhZnRlcnRpdGxlcGFnZQorICAgIFxzaG9ydGNvbnRlbnRzCisgICAgXGNvbnRlbnRzCisgICAgXGdsb2JhbFxsZXRcc2hvcnRjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XGNvbnRlbnRzID0gXHJlbGF4CisgIFxmaQorICAlCisgIFxpZnNldGNvbnRlbnRzYWZ0ZXJ0aXRsZXBhZ2UKKyAgICBcY29udGVudHMKKyAgICBcZ2xvYmFsXGxldFxjb250ZW50cyA9IFxyZWxheAorICAgIFxnbG9iYWxcbGV0XHNob3J0Y29udGVudHMgPSBccmVsYXgKKyAgXGZpCit9CisKK1xkZWZcZmluaXNodGl0bGVwYWdleyUKKyAgXHZza2lwNHB0IFxocnVsZSBoZWlnaHQgMnB0IHdpZHRoIFxoc2l6ZQorICBcdnNraXBcdGl0bGVwYWdlYm90dG9tZ2x1ZQorICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCit9CisKKyUlJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKKworXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQorXGRlZlxzdWJ0aXRsZWZvbnR7XHN1YnRpdGxlcm0gXG5vcm1hbGJhc2VsaW5lc2tpcCA9IDEzcHQgXG5vcm1hbGJhc2VsaW5lc30KKworXGRlZlxhdXRob3Jmb250e1xhdXRob3JybSBcbm9ybWFsYmFzZWxpbmVza2lwID0gMTZwdCBcbm9ybWFsYmFzZWxpbmVzCisJCVxsZXRcdHQ9XGF1dGhvcnR0fQorCitccGFyc2VhcmdkZWZcdGl0bGV7JQorICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgIFxsZWZ0bGluZXtcdGl0bGVmb250c1xybSAjMX0KKyAgJSBwcmludCBhIHJ1bGUgYXQgdGhlIHBhZ2UgYm90dG9tIGFsc28uCisgIFxmaW5pc2hlZHRpdGxlcGFnZWZhbHNlCisgIFx2c2tpcDRwdCBcaHJ1bGUgaGVpZ2h0IDRwdCB3aWR0aCBcaHNpemUgXHZza2lwNHB0Cit9CisKK1xwYXJzZWFyZ2RlZlxzdWJ0aXRsZXslCisgIFxjaGVja2Vudlx0aXRsZXBhZ2UKKyAge1xzdWJ0aXRsZWZvbnQgXHJpZ2h0bGluZXsjMX19JQorfQorCislIEBhdXRob3Igc2hvdWxkIGNvbWUgbGFzdCwgYnV0IG1heSBjb21lIG1hbnkgdGltZXMuCislIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW5zaWRlIEBxdW90YXRpb24uCislCitccGFyc2VhcmdkZWZcYXV0aG9yeyUKKyAgXGRlZlx0ZW1we1xxdW90YXRpb259JQorICBcaWZ4XHRoaXNlbnZcdGVtcAorICAgIFxkZWZccXVvdGF0aW9uYXV0aG9yeyMxfSUgcHJpbnRlZCBpbiBcRXF1b3RhdGlvbi4KKyAgXGVsc2UKKyAgICBcY2hlY2tlbnZcdGl0bGVwYWdlCisgICAgXGlmc2VlbmF1dGhvclxlbHNlIFx2c2tpcCAwcHQgcGx1cyAxZmlsbGwgXHNlZW5hdXRob3J0cnVlIFxmaQorICAgIHtcYXV0aG9yZm9udCBcbGVmdGxpbmV7IzF9fSUKKyAgXGZpCit9CisKKworJSUlIFNldCB1cCBwYWdlIGhlYWRpbmdzIGFuZCBmb290aW5ncy4KKworXGxldFx0aGlzcGFnZT1cZm9saW8KKworXG5ld3Rva3NcZXZlbmhlYWRsaW5lICAgICUgaGVhZGxpbmUgb24gZXZlbiBwYWdlcworXG5ld3Rva3Ncb2RkaGVhZGxpbmUgICAgICUgaGVhZGxpbmUgb24gb2RkIHBhZ2VzCitcbmV3dG9rc1xldmVuZm9vdGxpbmUgICAgJSBmb290bGluZSBvbiBldmVuIHBhZ2VzCitcbmV3dG9rc1xvZGRmb290bGluZSAgICAgJSBmb290bGluZSBvbiBvZGQgcGFnZXMKKworJSBOb3cgbWFrZSBUZVggdXNlIHRob3NlIHZhcmlhYmxlcworXGhlYWRsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkaGVhZGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5oZWFkbGluZSBcZml9fQorXGZvb3RsaW5lPXt7XHRleHRmb250c1xybSBcaWZvZGRccGFnZW5vIFx0aGVcb2RkZm9vdGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcZWxzZSBcdGhlXGV2ZW5mb290bGluZSBcZml9XEhFQURJTkdTaG9va30KK1xsZXRcSEVBRElOR1Nob29rPVxyZWxheAorCislIENvbW1hbmRzIHRvIHNldCB0aG9zZSB2YXJpYWJsZXMuCislIEZvciBleGFtcGxlLCB0aGlzIGlzIHdoYXQgIEBoZWFkaW5ncyBvbiAgZG9lcworJSBAZXZlbmhlYWRpbmcgQHRoaXN0aXRsZXxAdGhpc3BhZ2V8QHRoaXNjaGFwdGVyCislIEBvZGRoZWFkaW5nIEB0aGlzY2hhcHRlcnxAdGhpc3BhZ2V8QHRoaXN0aXRsZQorJSBAZXZlbmZvb3RpbmcgQHRoaXNmaWxlfHwKKyUgQG9kZGZvb3RpbmcgfHxAdGhpc2ZpbGUKKworCitcZGVmXGV2ZW5oZWFkaW5ne1xwYXJzZWFyZ1xldmVuaGVhZGluZ3h4eH0KK1xkZWZcZXZlbmhlYWRpbmd4eHggIzF7XGV2ZW5oZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxldmVuaGVhZGluZ3l5eSAjMVx8IzJcfCMzXHwjNFxmaW5pc2h7JQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xybGFwe1xjZW50ZXJsaW5leyMyfX1cbGluZXsjMVxoZmlsIzN9fX0KKworXGRlZlxvZGRoZWFkaW5ne1xwYXJzZWFyZ1xvZGRoZWFkaW5neHh4fQorXGRlZlxvZGRoZWFkaW5neHh4ICMxe1xvZGRoZWFkaW5neXl5ICMxXHxcfFx8XHxcZmluaXNofQorXGRlZlxvZGRoZWFkaW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX19CisKK1xwYXJzZWFyZ2RlZlxldmVyeWhlYWRpbmd7XG9kZGhlYWRpbmd4eHh7IzF9XGV2ZW5oZWFkaW5neHh4eyMxfX0lCisKK1xkZWZcZXZlbmZvb3Rpbmd7XHBhcnNlYXJnXGV2ZW5mb290aW5neHh4fQorXGRlZlxldmVuZm9vdGluZ3h4eCAjMXtcZXZlbmZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXGV2ZW5mb290aW5neXl5ICMxXHwjMlx8IzNcfCM0XGZpbmlzaHslCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XHJsYXB7XGNlbnRlcmxpbmV7IzJ9fVxsaW5leyMxXGhmaWwjM319fQorCitcZGVmXG9kZGZvb3Rpbmd7XHBhcnNlYXJnXG9kZGZvb3Rpbmd4eHh9CitcZGVmXG9kZGZvb3Rpbmd4eHggIzF7XG9kZGZvb3Rpbmd5eXkgIzFcfFx8XHxcfFxmaW5pc2h9CitcZGVmXG9kZGZvb3Rpbmd5eXkgIzFcfCMyXHwjM1x8IzRcZmluaXNoeyUKKyAgXGdsb2JhbFxvZGRmb290bGluZSA9IHtccmxhcHtcY2VudGVybGluZXsjMn19XGxpbmV7IzFcaGZpbCMzfX0lCisgICUKKyAgJSBMZWF2ZSBzb21lIHNwYWNlIGZvciB0aGUgZm9vdGxpbmUuICBIb3BlZnVsbHkgb2sgdG8gYXNzdW1lCisgICUgQGV2ZW5mb290aW5nIHdpbGwgbm90IGJlIHVzZWQgYnkgaXRzZWxmLgorICBcZ2xvYmFsXGFkdmFuY2VccGFnZWhlaWdodCBieSAtXGJhc2VsaW5lc2tpcAorICBcZ2xvYmFsXGFkdmFuY2VcdnNpemUgYnkgLVxiYXNlbGluZXNraXAKK30KKworXHBhcnNlYXJnZGVmXGV2ZXJ5Zm9vdGluZ3tcb2RkZm9vdGluZ3h4eHsjMX1cZXZlbmZvb3Rpbmd4eHh7IzF9fQorCisKKyUgQGhlYWRpbmdzIGRvdWJsZSAgICAgIHR1cm5zIGhlYWRpbmdzIG9uIGZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcuCislIEBoZWFkaW5ncyBzaW5nbGUgICAgICB0dXJucyBoZWFkaW5ncyBvbiBmb3Igc2luZ2xlLXNpZGVkIHByaW50aW5nLgorJSBAaGVhZGluZ3Mgb2ZmICAgICAgICAgdHVybnMgdGhlbSBvZmYuCislIEBoZWFkaW5ncyBvbiAgICAgICAgICBzYW1lIGFzIEBoZWFkaW5ncyBkb3VibGUsIHJldGFpbmVkIGZvciBjb21wYXRpYmlsaXR5LgorJSBAaGVhZGluZ3MgYWZ0ZXIgICAgICAgdHVybnMgb24gZG91YmxlLXNpZGVkIGhlYWRpbmdzIGFmdGVyIHRoaXMgcGFnZS4KKyUgQGhlYWRpbmdzIGRvdWJsZWFmdGVyIHR1cm5zIG9uIGRvdWJsZS1zaWRlZCBoZWFkaW5ncyBhZnRlciB0aGlzIHBhZ2UuCislIEBoZWFkaW5ncyBzaW5nbGVhZnRlciB0dXJucyBvbiBzaW5nbGUtc2lkZWQgaGVhZGluZ3MgYWZ0ZXIgdGhpcyBwYWdlLgorJSBCeSBkZWZhdWx0LCB0aGV5IGFyZSBvZmYgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQsCislIGFuZCB0dXJuZWQgYG9uJyBhZnRlciBAZW5kIHRpdGxlcGFnZS4KKworXGRlZlxoZWFkaW5ncyAjMSB7XGNzbmFtZSBIRUFESU5HUyMxXGVuZGNzbmFtZX0KKworXGRlZlxIRUFESU5HU29mZnslCitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGhmaWx9IFxnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xoZmlsfSBcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH19CitcSEVBRElOR1NvZmYKKyUgV2hlbiB3ZSB0dXJuIGhlYWRpbmdzIG9uLCBzZXQgdGhlIHBhZ2UgbnVtYmVyIHRvIDEuCislIEZvciBkb3VibGUtc2lkZWQgcHJpbnRpbmcsIHB1dCBjdXJyZW50IGZpbGUgbmFtZSBpbiBsb3dlciBsZWZ0IGNvcm5lciwKKyUgY2hhcHRlciBuYW1lIG9uIGluc2lkZSB0b3Agb2YgcmlnaHQgaGFuZCBwYWdlcywgZG9jdW1lbnQKKyUgdGl0bGUgb24gaW5zaWRlIHRvcCBvZiBsZWZ0IGhhbmQgcGFnZXMsIGFuZCBwYWdlIG51bWJlcnMgb24gb3V0c2lkZSB0b3AKKyUgZWRnZSBvZiBhbGwgcGFnZXMuCitcZGVmXEhFQURJTkdTZG91YmxleyUKK1xnbG9iYWxccGFnZW5vPTEKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1xmb2xpb1xoZmlsXHRoaXN0aXRsZX19CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK30KK1xsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorCislIEZvciBzaW5nbGUtc2lkZWQgcHJpbnRpbmcsIGNoYXB0ZXIgdGl0bGUgZ29lcyBhY3Jvc3MgdG9wIGxlZnQgb2YgcGFnZSwKKyUgcGFnZSBudW1iZXIgb24gdG9wIHJpZ2h0LgorXGRlZlxIRUFESU5HU3NpbmdsZXslCitcZ2xvYmFsXHBhZ2Vubz0xCitcZ2xvYmFsXGV2ZW5mb290bGluZT17XGhmaWx9CitcZ2xvYmFsXG9kZGZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcZXZlbmhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXG9kZGhlYWRsaW5lPXtcbGluZXtcdGhpc2NoYXB0ZXJcaGZpbFxmb2xpb319CitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcHBhZ2VyCit9CitcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfQorCitcZGVmXEhFQURJTkdTYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTZG91YmxleH0KK1xsZXRcSEVBRElOR1Nkb3VibGVhZnRlcj1cSEVBRElOR1NhZnRlcgorXGRlZlxIRUFESU5HU2RvdWJsZXh7JQorXGdsb2JhbFxldmVuZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxvZGRmb290bGluZT17XGhmaWx9CitcZ2xvYmFsXGV2ZW5oZWFkbGluZT17XGxpbmV7XGZvbGlvXGhmaWxcdGhpc3RpdGxlfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwb2RkcGFnZQorfQorCitcZGVmXEhFQURJTkdTc2luZ2xlYWZ0ZXJ7XGxldFxIRUFESU5HU2hvb2s9XEhFQURJTkdTc2luZ2xleH0KK1xkZWZcSEVBRElOR1NzaW5nbGV4eyUKK1xnbG9iYWxcZXZlbmZvb3RsaW5lPXtcaGZpbH0KK1xnbG9iYWxcb2RkZm9vdGxpbmU9e1xoZmlsfQorXGdsb2JhbFxldmVuaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcb2RkaGVhZGxpbmU9e1xsaW5le1x0aGlzY2hhcHRlclxoZmlsXGZvbGlvfX0KK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK30KKworJSBTdWJyb3V0aW5lcyB1c2VkIGluIGdlbmVyYXRpbmcgaGVhZGluZ3MKKyUgVGhpcyBwcm9kdWNlcyBEYXkgTW9udGggWWVhciBzdHlsZSBvZiBvdXRwdXQuCislIE9ubHkgZGVmaW5lIGlmIG5vdCBhbHJlYWR5IGRlZmluZWQsIGluIGNhc2UgYSB0eGktPz8udGV4IGZpbGUgaGFzIHNldAorJSB1cCBhIGRpZmZlcmVudCBmb3JtYXQgKGUuZy4sIHR4aS1jcy50ZXggZG9lcyB0aGlzKS4KK1xpZnhcdG9kYXlcdW5kZWZpbmVkCitcZGVmXHRvZGF5eyUKKyAgXG51bWJlclxkYXlcc3BhY2UKKyAgXGlmY2FzZVxtb250aAorICBcb3JccHV0d29yZE1KYW5cb3JccHV0d29yZE1GZWJcb3JccHV0d29yZE1NYXJcb3JccHV0d29yZE1BcHIKKyAgXG9yXHB1dHdvcmRNTWF5XG9yXHB1dHdvcmRNSnVuXG9yXHB1dHdvcmRNSnVsXG9yXHB1dHdvcmRNQXVnCisgIFxvclxwdXR3b3JkTVNlcFxvclxwdXR3b3JkTU9jdFxvclxwdXR3b3JkTU5vdlxvclxwdXR3b3JkTURlYworICBcZmkKKyAgXHNwYWNlXG51bWJlclx5ZWFyfQorXGZpCisKKyUgQHNldHRpdGxlIGxpbmUuLi4gIHNwZWNpZmllcyB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LCBmb3IgaGVhZGluZ3MuCislIEl0IGdlbmVyYXRlcyBubyBvdXRwdXQgb2YgaXRzIG93bi4KK1xkZWZcdGhpc3RpdGxle1xwdXR3b3JkTm9UaXRsZX0KK1xkZWZcc2V0dGl0bGV7XHBhcnNlYXJne1xnZGVmXHRoaXN0aXRsZX19CisKKworXG1lc3NhZ2V7dGFibGVzLH0KKyUgVGFibGVzIC0tIEB0YWJsZSwgQGZ0YWJsZSwgQHZ0YWJsZSwgQGl0ZW0oeCkuCisKKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiB0YWJsZSB0ZXh0CitcbmV3ZGltZW5cdGFibGVpbmRlbnQgXHRhYmxlaW5kZW50PS44aW4KKyUgZGVmYXVsdCBpbmRlbnRhdGlvbiBvZiBAaXRlbWl6ZSBhbmQgQGVudW1lcmF0ZSB0ZXh0CitcbmV3ZGltZW5caXRlbWluZGVudCAgXGl0ZW1pbmRlbnQ9LjNpbgorJSBtYXJnaW4gYmV0d2VlbiBlbmQgb2YgdGFibGUgaXRlbSBhbmQgc3RhcnQgb2YgdGFibGUgdGV4dC4KK1xuZXdkaW1lblxpdGVtbWFyZ2luICBcaXRlbW1hcmdpbj0uMWluCisKKyUgdXNlZCBpbnRlcm5hbGx5IGZvciBcaXRlbWluZGVudCBtaW51cyBcaXRlbW1hcmdpbgorXG5ld2RpbWVuXGl0ZW1tYXgKKworJSBOb3RlIEB0YWJsZSwgQGZ0YWJsZSwgYW5kIEB2dGFibGUgZGVmaW5lIEBpdGVtLCBAaXRlbXgsIGV0Yy4sIHdpdGgKKyUgdGhlc2UgZGVmcy4KKyUgVGhleSBhbHNvIGRlZmluZSBcaXRlbWluZGV4CislIHRvIGluZGV4IHRoZSBpdGVtIG5hbWUgaW4gd2hhdGV2ZXIgbWFubmVyIGlzIGRlc2lyZWQgKHBlcmhhcHMgbm9uZSkuCisKK1xuZXdpZlxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwCisKK1xkZWZcaXRlbXhwYXJ7XHBhclxpZml0ZW14bmVlZHNuZWdhdGl2ZXZza2lwXG5vYnJlYWtcdnNraXAtXHBhcnNraXBcbm9icmVha1xmaX0KKworXGRlZlxpbnRlcm5hbEJpdGVte1xzbWFsbGJyZWFrIFxwYXJzZWFyZ1xpdGVtenp6fQorXGRlZlxpbnRlcm5hbEJpdGVteHtcaXRlbXhwYXIgXHBhcnNlYXJnXGl0ZW16enp9CisKK1xkZWZcaXRlbXp6eiAjMXtcYmVnaW5ncm91cCAlCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1ccmlnaHRza2lwCisgIFxhZHZhbmNlXGhzaXplIGJ5IC1cdGFibGVpbmRlbnQKKyAgXHNldGJveDA9XGhib3h7XGl0ZW1pbmRpY2F0ZXsjMX19JQorICBcaXRlbWluZGV4eyMxfSUKKyAgXG5vYnJlYWsgJSBUaGlzIHByZXZlbnRzIGEgYnJlYWsgYmVmb3JlIEBpdGVteC4KKyAgJQorICAlIElmIHRoZSBpdGVtIHRleHQgZG9lcyBub3QgZml0IGluIHRoZSBzcGFjZSB3ZSBoYXZlLCBwdXQgaXQgb24gYSBsaW5lCisgICUgYnkgaXRzZWxmLCBhbmQgZG8gbm90IGFsbG93IGEgcGFnZSBicmVhayBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoYXQKKyAgJSBsaW5lLiAgV2UgZG8gbm90IHN0YXJ0IGEgcGFyYWdyYXBoIGhlcmUgYmVjYXVzZSB0aGVuIGlmIHRoZSBuZXh0CisgICUgY29tbWFuZCBpcywgZS5nLiwgQGtpbmRleCwgdGhlIHdoYXRzaXQgd291bGQgZ2V0IHB1dCBpbnRvIHRoZQorICAlIGhvcml6b250YWwgbGlzdCBvbiBhIGxpbmUgYnkgaXRzZWxmLCByZXN1bHRpbmcgaW4gZXh0cmEgYmxhbmsgc3BhY2UuCisgIFxpZmRpbSBcd2QwPlxpdGVtbWF4CisgICAgJQorICAgICUgTWFrZSB0aGlzIGEgcGFyYWdyYXBoIHNvIHdlIGdldCB0aGUgXHBhcnNraXAgZ2x1ZSBhbmQgd3JhcHBpbmcsCisgICAgJSBidXQgbGVhdmUgaXQgcmFnZ2VkLXJpZ2h0LgorICAgIFxiZWdpbmdyb3VwCisgICAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieS1cdGFibGVpbmRlbnQKKyAgICAgIFxhZHZhbmNlXGhzaXplIGJ5XHRhYmxlaW5kZW50CisgICAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkwcHQgcGx1czFmaWwKKyAgICAgIFxsZWF2ZXZtb2RlXHVuaGJveDBccGFyCisgICAgXGVuZGdyb3VwCisgICAgJQorICAgICUgV2UncmUgZ29pbmcgdG8gYmUgc3RhcnRpbmcgYSBwYXJhZ3JhcGgsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZQorICAgICUgXHBhcnNraXAgZ2x1ZSAtLSBsb2dpY2FsbHkgaXQncyBwYXJ0IG9mIHRoZSBAaXRlbSB3ZSBqdXN0IHN0YXJ0ZWQuCisgICAgXG5vYnJlYWsgXHZza2lwLVxwYXJza2lwCisgICAgJQorICAgICUgU3RvcCBhIHBhZ2UgYnJlYWsgYXQgdGhlIFxwYXJza2lwIGdsdWUgY29taW5nIHVwLiAgSG93ZXZlciwgaWYKKyAgICAlIHdoYXQgZm9sbG93cyBpcyBhbiBlbnZpcm9ubWVudCBzdWNoIGFzIEBleGFtcGxlLCB0aGVyZSB3aWxsIGJlIG5vCisgICAgJSBccGFyc2tpcCBnbHVlOyB0aGVuIHRoZSBuZWdhdGl2ZSB2c2tpcCB3ZSBqdXN0IGluc2VydGVkIHdvdWxkCisgICAgJSBjYXVzZSB0aGUgZXhhbXBsZSBhbmQgdGhlIGl0ZW0gdG8gY3Jhc2ggdG9nZXRoZXIuICBTbyB3ZSB1c2UgdGhpcworICAgICUgYml6YXJyZSB2YWx1ZSBvZiAxMDAwMSBhcyBhIHNpZ25hbCB0byBcYWJvdmVlbnZicmVhayB0byBpbnNlcnQKKyAgICAlIFxwYXJza2lwIGdsdWUgYWZ0ZXIgYWxsLiAgU2VjdGlvbiB0aXRsZXMgYXJlIGhhbmRsZWQgdGhpcyB3YXkgYWxzby4KKyAgICAlIAorICAgIFxwZW5hbHR5IDEwMDAxCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwZmFsc2UKKyAgXGVsc2UKKyAgICAlIFRoZSBpdGVtIHRleHQgZml0cyBpbnRvIHRoZSBzcGFjZS4gIFN0YXJ0IGEgcGFyYWdyYXBoLCBzbyB0aGF0IHRoZQorICAgICUgZm9sbG93aW5nIHRleHQgKGlmIGFueSkgd2lsbCBlbmQgdXAgb24gdGhlIHNhbWUgbGluZS4KKyAgICBcbm9pbmRlbnQKKyAgICAlIERvIHRoaXMgd2l0aCBrZXJucyBhbmQgXHVuaGJveCBzbyB0aGF0IGlmIHRoZXJlIGlzIGEgZm9vdG5vdGUgaW4KKyAgICAlIHRoZSBpdGVtIHRleHQsIGl0IGNhbiBtaWdyYXRlIHRvIHRoZSBtYWluIHZlcnRpY2FsIGxpc3QgYW5kCisgICAgJSBldmVudHVhbGx5IGJlIHByaW50ZWQuCisgICAgXG5vYnJlYWtca2Vybi1cdGFibGVpbmRlbnQKKyAgICBcZGltZW4wID0gXGl0ZW1tYXggIFxhZHZhbmNlXGRpbWVuMCBieSBcaXRlbW1hcmdpbiBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAKKyAgICBcdW5oYm94MAorICAgIFxub2JyZWFrXGtlcm5cZGltZW4wCisgICAgXGVuZGdyb3VwCisgICAgXGl0ZW14bmVlZHNuZWdhdGl2ZXZza2lwdHJ1ZQorICBcZmkKK30KKworXGRlZlxpdGVte1xlcnJtZXNzYWdle0BpdGVtIHdoaWxlIG5vdCBpbiBhIGxpc3QgZW52aXJvbm1lbnR9fQorXGRlZlxpdGVteHtcZXJybWVzc2FnZXtAaXRlbXggd2hpbGUgbm90IGluIGEgbGlzdCBlbnZpcm9ubWVudH19CisKKyUgQHRhYmxlLCBAZnRhYmxlLCBAdnRhYmxlLgorXGVudmRlZlx0YWJsZXslCisgIFxsZXRcaXRlbWluZGV4XGdvYmJsZQorICBcdGFibGVjaGVja3t0YWJsZX0lCit9CitcZW52ZGVmXGZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge2ZufXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre2Z0YWJsZX0lCit9CitcZW52ZGVmXHZ0YWJsZXslCisgIFxkZWZcaXRlbWluZGV4ICMjMXtcZG9pbmQge3ZyfXtcY29kZXsjIzF9fX0lCisgIFx0YWJsZWNoZWNre3Z0YWJsZX0lCit9CitcZGVmXHRhYmxlY2hlY2sjMXslCisgIFxpZm51bSBcdGhlXGNhdGNvZGVgXF5eTT1cYWN0aXZlCisgICAgXGVuZGdyb3VwCisgICAgXGVycm1lc3NhZ2V7VGhpcyBjb21tYW5kIHdvbid0IHdvcmsgaW4gdGhpcyBjb250ZXh0OyBwZXJoYXBzIHRoZSBwcm9ibGVtIGlzCisgICAgICB0aGF0IHdlIGFyZSBcaW5lbnZpcm9ubWVudFx0aGlzZW52fSUKKyAgICBcZGVmXG5leHR7XGRvaWdub3JleyMxfX0lCisgIFxlbHNlCisgICAgXGxldFxuZXh0XHRhYmxleAorICBcZmkKKyAgXG5leHQKK30KK1xkZWZcdGFibGV4IzF7JQorICBcZGVmXGl0ZW1pbmRpY2F0ZXsjMX0lCisgIFxwYXJzZWFyZ1x0YWJsZXkKK30KK1xkZWZcdGFibGV5IzF7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGVkZWZcdGVtcHtcbm9leHBhbmRcdGFibGV6ICMxXHNwYWNlXHNwYWNlXHNwYWNlfSUKKyAgICBcZXhwYW5kYWZ0ZXIKKyAgfVx0ZW1wIFxlbmR0YWJsZXoKK30KK1xkZWZcdGFibGV6ICMxICMyICMzICM0XGVuZHRhYmxlenslCisgIFxhYm92ZWVudmJyZWFrCisgIFxpZm51bSAwIzE+MCBcYWR2YW5jZSBcbGVmdHNraXAgYnkgIzFcbWlsIFxmaQorICBcaWZudW0gMCMyPjAgXHRhYmxlaW5kZW50PSMyXG1pbCBcZmkKKyAgXGlmbnVtIDAjMz4wIFxhZHZhbmNlIFxyaWdodHNraXAgYnkgIzNcbWlsIFxmaQorICBcaXRlbW1heD1cdGFibGVpbmRlbnQKKyAgXGFkdmFuY2UgXGl0ZW1tYXggYnkgLVxpdGVtbWFyZ2luCisgIFxhZHZhbmNlIFxsZWZ0c2tpcCBieSBcdGFibGVpbmRlbnQKKyAgXGV4ZGVudGFtb3VudD1cdGFibGVpbmRlbnQKKyAgXHBhcmluZGVudCA9IDBwdAorICBccGFyc2tpcCA9IFxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltIFxwYXJza2lwPTBwdCBccGFyc2tpcD0ycHQgXGZpCisgIFxsZXRcaXRlbSA9IFxpbnRlcm5hbEJpdGVtCisgIFxsZXRcaXRlbXggPSBcaW50ZXJuYWxCaXRlbXgKK30KK1xkZWZcRXRhYmxle1xlbmRncmFmXGFmdGVyZW52YnJlYWt9CitcbGV0XEVmdGFibGVcRXRhYmxlCitcbGV0XEV2dGFibGVcRXRhYmxlCitcbGV0XEVpdGVtaXplXEV0YWJsZQorXGxldFxFZW51bWVyYXRlXEV0YWJsZQorCislIFRoaXMgaXMgdGhlIGNvdW50ZXIgdXNlZCBieSBAZW51bWVyYXRlLCB3aGljaCBpcyByZWFsbHkgQGl0ZW1pemUKKworXG5ld2NvdW50IFxpdGVtbm8KKworXGVudmRlZlxpdGVtaXple1xwYXJzZWFyZ1xkb2l0ZW1pemV9CisKK1xkZWZcZG9pdGVtaXplIzF7JQorICBcYWJvdmVlbnZicmVhaworICBcaXRlbW1heD1caXRlbWluZGVudAorICBcYWR2YW5jZVxpdGVtbWF4IGJ5IC1caXRlbW1hcmdpbgorICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcaXRlbWluZGVudAorICBcZXhkZW50YW1vdW50PVxpdGVtaW5kZW50CisgIFxwYXJpbmRlbnQ9MHB0CisgIFxwYXJza2lwPVxzbWFsbHNraXBhbW91bnQKKyAgXGlmZGltXHBhcnNraXA9MHB0IFxwYXJza2lwPTJwdCBcZmkKKyAgXGRlZlxpdGVtY29udGVudHN7IzF9JQorICAlIEBpdGVtaXplIHdpdGggbm8gYXJnIGlzIGVxdWl2YWxlbnQgdG8gQGl0ZW1pemUgQGJ1bGxldC4KKyAgXGlmeFxpdGVtY29udGVudHNcZW1wdHlcZGVmXGl0ZW1jb250ZW50c3tcYnVsbGV0fVxmaQorICBcbGV0XGl0ZW09XGl0ZW1pemVpdGVtCit9CisKKyUgRGVmaW5pdGlvbiBvZiBAaXRlbSB3aGlsZSBpbnNpZGUgQGl0ZW1pemUgYW5kIEBlbnVtZXJhdGUuCislCitcZGVmXGl0ZW1pemVpdGVteyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IDEgICUgZm9yIGVudW1lcmF0aW9ucworICB7XGxldFxwYXI9XGVuZGdyYWYgXHNtYWxsYnJlYWt9JSByZWFzb25hYmxlIHBsYWNlIHRvIGJyZWFrCisgIHslCisgICAlIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gQGl0ZW1pemUgZGlyZWN0bHkgYWZ0ZXIgYSBzZWN0aW9uIHRpdGxlLCBhCisgICAlIFxub2JyZWFrIHdpbGwgYmUgbGFzdCBvbiB0aGUgbGlzdCwgYW5kIFxzZWN0aW9uaGVhZGluZyB3aWxsIGhhdmUKKyAgICUgZG9uZSBhIFx2c2tpcC1ccGFyc2tpcC4gIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byB6ZXJvCisgICAlIHBhcnNraXAsIG9yIHRoZSBpdGVtIHRleHQgd2lsbCBjcmFzaCB3aXRoIHRoZSBoZWFkaW5nLiAgT24gdGhlCisgICAlIG90aGVyIGhhbmQsIHdoZW4gdGhlcmUgaXMgbm9ybWFsIHRleHQgcHJlY2VkaW5nIHRoZSBpdGVtIChhcyB0aGVyZQorICAgJSB1c3VhbGx5IGlzKSwgd2UgZG8gd2FudCB0byB6ZXJvIHBhcnNraXAsIG9yIHRoZXJlIHdvdWxkIGJlIHRvbyBtdWNoCisgICAlIHNwYWNlLiAgSW4gdGhhdCBjYXNlLCB3ZSB3b24ndCBoYXZlIGEgXG5vYnJlYWsgYmVmb3JlLiAgQXQgbGVhc3QKKyAgICUgdGhhdCdzIHRoZSB0aGVvcnkuCisgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBhcnNraXA9MGluIFxmaQorICAgXG5vaW5kZW50CisgICBcaGJveCB0byAwcHR7XGhzcyBcaXRlbWNvbnRlbnRzIFxrZXJuXGl0ZW1tYXJnaW59JQorICAgXHZhZGp1c3R7XHBlbmFsdHkgMTIwMH19JSBub3QgZ29vZCB0byBicmVhayBhZnRlciBmaXJzdCBsaW5lIG9mIGl0ZW0uCisgIFxmbHVzaGNyCit9CisKKyUgXHNwbGl0b2ZmIFRPS0VOU1xlbmRtYXJrIGRlZmluZXMgXGZpcnN0IHRvIGJlIHRoZSBmaXJzdCB0b2tlbiBpbgorJSBUT0tFTlMsIGFuZCBccmVzdCB0byBiZSB0aGUgcmVtYWluZGVyLgorJQorXGRlZlxzcGxpdG9mZiMxIzJcZW5kbWFya3tcZGVmXGZpcnN0eyMxfVxkZWZccmVzdHsjMn19JQorCislIEFsbG93IGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGxvd2VyY2FzZSBsZXR0ZXIsCislIG9yIG51bWJlciwgdG8gc3BlY2lmeSB0aGUgZmlyc3QgbGFiZWwgaW4gdGhlIGVudW1lcmF0ZWQgbGlzdC4gIE5vCislIGFyZ3VtZW50IGlzIHRoZSBzYW1lIGFzIGAxJy4KKyUKK1xlbnZwYXJzZWFyZ2RlZlxlbnVtZXJhdGV7XGVudW1lcmF0ZXkgIzEgIFxlbmRlbnVtZXJhdGV5fQorXGRlZlxlbnVtZXJhdGV5ICMxICMyXGVuZGVudW1lcmF0ZXl7JQorICAlIElmIHdlIHdlcmUgZ2l2ZW4gbm8gYXJndW1lbnQsIHByZXRlbmQgd2Ugd2VyZSBnaXZlbiBgMScuCisgIFxkZWZcdGhlYXJneyMxfSUKKyAgXGlmeFx0aGVhcmdcZW1wdHkgXGRlZlx0aGVhcmd7MX1cZmkKKyAgJQorICAlIERldGVjdCBpZiB0aGUgYXJndW1lbnQgaXMgYSBzaW5nbGUgdG9rZW4uICBJZiBzbywgaXQgbWlnaHQgYmUgYQorICAlIGxldHRlci4gIE90aGVyd2lzZSwgdGhlIG9ubHkgdmFsaWQgdGhpbmcgaXQgY2FuIGJlIGlzIGEgbnVtYmVyLgorICAlIChXZSB3aWxsIGFsd2F5cyBoYXZlIG9uZSB0b2tlbiwgYmVjYXVzZSBvZiB0aGUgdGVzdCB3ZSBqdXN0IG1hZGUuCisgICUgVGhpcyBpcyBhIGdvb2QgdGhpbmcsIHNpbmNlIFxzcGxpdG9mZiBkb2Vzbid0IHdvcmsgZ2l2ZW4gbm90aGluZyBhdAorICAlIGFsbCAtLSB0aGUgZmlyc3QgcGFyYW1ldGVyIGlzIHVuZGVsaW1pdGVkLikKKyAgXGV4cGFuZGFmdGVyXHNwbGl0b2ZmXHRoZWFyZ1xlbmRtYXJrCisgIFxpZnhccmVzdFxlbXB0eQorICAgICUgT25seSBvbmUgdG9rZW4gaW4gdGhlIGFyZ3VtZW50LiAgSXQgY291bGQgc3RpbGwgYmUgYW55dGhpbmcuCisgICAgJSBBIGBgbG93ZXJjYXNlIGxldHRlcicnIGlzIG9uZSB3aG9zZSBcbGNjb2RlIGlzIG5vbnplcm8uCisgICAgJSBBbiBgYHVwcGVyY2FzZSBsZXR0ZXInJyBpcyBvbmUgd2hvc2UgXGxjY29kZSBpcyBib3RoIG5vbnplcm8sIGFuZAorICAgICUgICBub3QgZXF1YWwgdG8gaXRzZWxmLgorICAgICUgT3RoZXJ3aXNlLCB3ZSBhc3N1bWUgaXQncyBhIG51bWJlci4KKyAgICAlCisgICAgJSBXZSBuZWVkIHRoZSBccmVsYXggYXQgdGhlIGVuZCBvZiB0aGUgXGlmbnVtIGxpbmVzIHRvIHN0b3AgVGVYIGZyb20KKyAgICAlIGNvbnRpbnVpbmcgdG8gbG9vayBmb3IgYSA8bnVtYmVyPi4KKyAgICAlCisgICAgXGlmbnVtXGxjY29kZVxleHBhbmRhZnRlcmBcdGhlYXJnPTBccmVsYXgKKyAgICAgIFxudW1lcmljZW51bWVyYXRlICUgYSBudW1iZXIgKHdlIGhvcGUpCisgICAgXGVsc2UKKyAgICAgICUgSXQncyBhIGxldHRlci4KKyAgICAgIFxpZm51bVxsY2NvZGVcZXhwYW5kYWZ0ZXJgXHRoZWFyZz1cZXhwYW5kYWZ0ZXJgXHRoZWFyZ1xyZWxheAorICAgICAgICBcbG93ZXJjYXNlZW51bWVyYXRlICUgbG93ZXJjYXNlIGxldHRlcgorICAgICAgXGVsc2UKKyAgICAgICAgXHVwcGVyY2FzZWVudW1lcmF0ZSAlIHVwcGVyY2FzZSBsZXR0ZXIKKyAgICAgIFxmaQorICAgIFxmaQorICBcZWxzZQorICAgICUgTXVsdGlwbGUgdG9rZW5zIGluIHRoZSBhcmd1bWVudC4gIFdlIGhvcGUgaXQncyBhIG51bWJlci4KKyAgICBcbnVtZXJpY2VudW1lcmF0ZQorICBcZmkKK30KKworJSBBbiBAZW51bWVyYXRlIHdob3NlIGxhYmVscyBhcmUgaW50ZWdlcnMuICBUaGUgc3RhcnRpbmcgaW50ZWdlciBpcworJSBnaXZlbiBpbiBcdGhlYXJnLgorJQorXGRlZlxudW1lcmljZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFx0aGVhcmcKKyAgXHN0YXJ0ZW51bWVyYXRpb257XHRoZVxpdGVtbm99JQorfQorCislIFRoZSBzdGFydGluZyAobG93ZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcbG93ZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgbG93ZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0lCisgICAgXGZpCisgICAgXGNoYXJcbGNjb2RlXGl0ZW1ubworICB9JQorfQorCislIFRoZSBzdGFydGluZyAodXBwZXJjYXNlKSBsZXR0ZXIgaXMgaW4gXHRoZWFyZy4KK1xkZWZcdXBwZXJjYXNlZW51bWVyYXRleyUKKyAgXGl0ZW1ubyA9IFxleHBhbmRhZnRlcmBcdGhlYXJnCisgIFxzdGFydGVudW1lcmF0aW9ueyUKKyAgICAlIEJlIHN1cmUgd2UncmUgbm90IGJleW9uZCB0aGUgZW5kIG9mIHRoZSBhbHBoYWJldC4KKyAgICBcaWZudW1caXRlbW5vPTAKKyAgICAgIFxlcnJtZXNzYWdle05vIG1vcmUgdXBwZXJjYXNlIGxldHRlcnMgaW4gQGVudW1lcmF0ZTsgZ2V0IGEgYmlnZ2VyCisgICAgICAgICAgICAgICAgICBhbHBoYWJldH0KKyAgICBcZmkKKyAgICBcY2hhclx1Y2NvZGVcaXRlbW5vCisgIH0lCit9CisKKyUgQ2FsbCBcZG9pdGVtaXplLCBhZGRpbmcgYSBwZXJpb2QgdG8gdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzdXBwbHlpbmcgdGhlCislIGNvbW1vbiBsYXN0IHR3byBhcmd1bWVudHMuICBBbHNvIHN1YnRyYWN0IG9uZSBmcm9tIHRoZSBpbml0aWFsIHZhbHVlIGluCislIFxpdGVtbm8sIHNpbmNlIEBpdGVtIGluY3JlbWVudHMgXGl0ZW1uby4KKyUKK1xkZWZcc3RhcnRlbnVtZXJhdGlvbiMxeyUKKyAgXGFkdmFuY2VcaXRlbW5vIGJ5IC0xCisgIFxkb2l0ZW1pemV7IzEufVxmbHVzaGNyCit9CisKKyUgQGFscGhhZW51bWVyYXRlIGFuZCBAY2Fwc2VudW1lcmF0ZSBhcmUgYWJicmV2aWF0aW9ucyBmb3IgZ2l2aW5nIGFuIGFyZworJSB0byBAZW51bWVyYXRlLgorJQorXGRlZlxhbHBoYWVudW1lcmF0ZXtcZW51bWVyYXRle2F9fQorXGRlZlxjYXBzZW51bWVyYXRle1xlbnVtZXJhdGV7QX19CitcZGVmXEVhbHBoYWVudW1lcmF0ZXtcRWVudW1lcmF0ZX0KK1xkZWZcRWNhcHNlbnVtZXJhdGV7XEVlbnVtZXJhdGV9CisKKworJSBAbXVsdGl0YWJsZSBtYWNyb3MKKyUgQW15IEhlbmRyaWNrc29uLCA4LzE4Lzk0LCAzLzYvOTYKKyUKKyUgQG11bHRpdGFibGUgLi4uIEBlbmQgbXVsdGl0YWJsZSB3aWxsIG1ha2UgYXMgbWFueSBjb2x1bW5zIGFzIGRlc2lyZWQuCislIENvbnRlbnRzIG9mIGVhY2ggY29sdW1uIHdpbGwgd3JhcCBhdCB3aWR0aCBnaXZlbiBpbiBwcmVhbWJsZS4gIFdpZHRoCislIGNhbiBiZSBzcGVjaWZpZWQgZWl0aGVyIHdpdGggc2FtcGxlIHRleHQgZ2l2ZW4gaW4gYSB0ZW1wbGF0ZSBsaW5lLAorJSBvciBpbiBwZXJjZW50IG9mIFxoc2l6ZSwgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGV4dCBvbiBwYWdlLgorCislIFRhYmxlIGNhbiBjb250aW51ZSBvdmVyIHBhZ2VzIGJ1dCB3aWxsIG9ubHkgYnJlYWsgYmV0d2VlbiBsaW5lcy4KKworJSBUbyBtYWtlIHByZWFtYmxlOgorJQorJSBFaXRoZXIgZGVmaW5lIHdpZHRocyBvZiBjb2x1bW5zIGluIHRlcm1zIG9mIHBlcmNlbnQgb2YgXGhzaXplOgorJSAgIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjI1IC4zIC40NQorJSAgIEBpdGVtIC4uLgorJQorJSAgIE51bWJlcnMgZm9sbG93aW5nIEBjb2x1bW5mcmFjdGlvbnMgYXJlIHRoZSBwZXJjZW50IG9mIHRoZSB0b3RhbAorJSAgIGN1cnJlbnQgaHNpemUgdG8gYmUgdXNlZCBmb3IgZWFjaCBjb2x1bW4uIFlvdSBtYXkgdXNlIGFzIG1hbnkKKyUgICBjb2x1bW5zIGFzIGRlc2lyZWQuCisKKworJSBPciB1c2UgYSB0ZW1wbGF0ZToKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIC4uLgorJSAgIHVzaW5nIHRoZSB3aWRlc3QgdGVybSBkZXNpcmVkIGluIGVhY2ggY29sdW1uLgorCislIEVhY2ggbmV3IHRhYmxlIGxpbmUgc3RhcnRzIHdpdGggQGl0ZW0sIGVhY2ggc3Vic2VxdWVudCBuZXcgY29sdW1uCislIHN0YXJ0cyB3aXRoIEB0YWIuIEVtcHR5IGNvbHVtbnMgbWF5IGJlIHByb2R1Y2VkIGJ5IHN1cHBseWluZyBAdGFiJ3MKKyUgd2l0aCBub3RoaW5nIGJldHdlZW4gdGhlbSBmb3IgYXMgbWFueSB0aW1lcyBhcyBlbXB0eSBjb2x1bW5zIGFyZSBuZWVkZWQsCislIGllLCBAdGFiQHRhYkB0YWIgd2lsbCBwcm9kdWNlIHR3byBlbXB0eSBjb2x1bW5zLgorCislIEBpdGVtLCBAdGFiIGRvIG5vdCBuZWVkIHRvIGJlIG9uIHRoZWlyIG93biBsaW5lcywgYnV0IGl0IHdpbGwgbm90IGh1cnQKKyUgaWYgdGhleSBhcmUuCisKKyUgU2FtcGxlIG11bHRpdGFibGU6CisKKyUgICBAbXVsdGl0YWJsZSB7Q29sdW1uIDEgdGVtcGxhdGV9IHtDb2x1bW4gMiB0ZW1wbGF0ZX0ge0NvbHVtbiAzIHRlbXBsYXRlfQorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYgQHRhYiB0aGlyZCBjb2wKKyUgICBAaXRlbQorJSAgIGZpcnN0IGNvbCBzdHVmZgorJSAgIEB0YWIKKyUgICBzZWNvbmQgY29sIHN0dWZmCislICAgQHRhYgorJSAgIHRoaXJkIGNvbAorJSAgIEBpdGVtIGZpcnN0IGNvbCBzdHVmZiBAdGFiIHNlY29uZCBjb2wgc3R1ZmYKKyUgICBAdGFiIE1hbnkgcGFyYWdyYXBocyBvZiB0ZXh0IG1heSBiZSB1c2VkIGluIGFueSBjb2x1bW4uCislCislICAgICAgICAgVGhleSB3aWxsIHdyYXAgYXQgdGhlIHdpZHRoIGRldGVybWluZWQgYnkgdGhlIHRlbXBsYXRlLgorJSAgIEBpdGVtQHRhYkB0YWIgVGhpcyB3aWxsIGJlIGluIHRoaXJkIGNvbHVtbi4KKyUgICBAZW5kIG11bHRpdGFibGUKKworJSBEZWZhdWx0IGRpbWVuc2lvbnMgbWF5IGJlIHJlc2V0IGJ5IHVzZXIuCislIEBtdWx0aXRhYmxlcGFyc2tpcCBpcyB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIHBhcmFncmFwaHMgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlcGFyaW5kZW50IGlzIHBhcmFncmFwaCBpbmRlbnQgaW4gdGFibGUuCislIEBtdWx0aXRhYmxlY29sbWFyZ2luIGlzIGhvcml6b250YWwgc3BhY2UgdG8gYmUgbGVmdCBiZXR3ZWVuIGNvbHVtbnMuCislIEBtdWx0aXRhYmxlbGluZXNwYWNlIGlzIHNwYWNlIHRvIGxlYXZlIGJldHdlZW4gdGFibGUgaXRlbXMsIGJhc2VsaW5lCislICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmFzZWxpbmUuCislICAgMHB0IG1lYW5zIGl0IGRlcGVuZHMgb24gY3VycmVudCBub3JtYWwgbGluZSBzcGFjaW5nLgorJQorXG5ld3NraXBcbXVsdGl0YWJsZXBhcnNraXAKK1xuZXdza2lwXG11bHRpdGFibGVwYXJpbmRlbnQKK1xuZXdkaW1lblxtdWx0aXRhYmxlY29sc3BhY2UKK1xuZXdza2lwXG11bHRpdGFibGVsaW5lc3BhY2UKK1xtdWx0aXRhYmxlcGFyc2tpcD0wcHQKK1xtdWx0aXRhYmxlcGFyaW5kZW50PTZwdAorXG11bHRpdGFibGVjb2xzcGFjZT0xMnB0CitcbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKKworJSBNYWNyb3MgdXNlZCB0byBzZXQgdXAgaGFsaWduIHByZWFtYmxlOgorJQorXGxldFxlbmRzZXR1cHRhYmxlXHJlbGF4CitcZGVmXHhlbmRzZXR1cHRhYmxle1xlbmRzZXR1cHRhYmxlfQorXGxldFxjb2x1bW5mcmFjdGlvbnNccmVsYXgKK1xkZWZceGNvbHVtbmZyYWN0aW9uc3tcY29sdW1uZnJhY3Rpb25zfQorXG5ld2lmXGlmc2V0cGVyY2VudAorCislICMxIGlzIHRoZSBAY29sdW1uZnJhY3Rpb24sIHVzdWFsbHkgYSBkZWNpbWFsIG51bWJlciBsaWtlIC41LCBidXQgbWlnaHQKKyUgYmUganVzdCAxLiAgV2UganVzdCB1c2UgaXQsIHdoYXRldmVyIGl0IGlzLgorJQorXGRlZlxwaWNrdXB3aG9sZWZyYWN0aW9uIzEgeyUKKyAgXGdsb2JhbFxhZHZhbmNlXGNvbGNvdW50IGJ5IDEKKyAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGNvbFx0aGVcY29sY291bnRcZW5kY3NuYW1leyMxXGhzaXplfSUKKyAgXHNldHVwdGFibGUKK30KKworXG5ld2NvdW50XGNvbGNvdW50CitcZGVmXHNldHVwdGFibGUjMXslCisgIFxkZWZcZmlyc3Rhcmd7IzF9JQorICBcaWZ4XGZpcnN0YXJnXHhlbmRzZXR1cHRhYmxlCisgICAgXGxldFxnbyA9IFxyZWxheAorICBcZWxzZQorICAgIFxpZnhcZmlyc3RhcmdceGNvbHVtbmZyYWN0aW9ucworICAgICAgXGdsb2JhbFxzZXRwZXJjZW50dHJ1ZQorICAgIFxlbHNlCisgICAgICBcaWZzZXRwZXJjZW50CisgICAgICAgICBcbGV0XGdvXHBpY2t1cHdob2xlZnJhY3Rpb24KKyAgICAgIFxlbHNlCisgICAgICAgICBcZ2xvYmFsXGFkdmFuY2VcY29sY291bnQgYnkgMQorICAgICAgICAgXHNldGJveDA9XGhib3h7IzFcdW5za2lwXHNwYWNlfSUgQWRkIGEgbm9ybWFsIHdvcmQgc3BhY2UgYXMgYQorICAgICAgICAgICAgICAgICAgICUgc2VwYXJhdG9yOyB0eXBpY2FsbHkgdGhhdCBpcyBhbHdheXMgaW4gdGhlIGlucHV0LCBhbnl3YXkuCisgICAgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWUgY29sXHRoZVxjb2xjb3VudFxlbmRjc25hbWV7XHRoZVx3ZDB9JQorICAgICAgXGZpCisgICAgXGZpCisgICAgXGlmeFxnb1xwaWNrdXB3aG9sZWZyYWN0aW9uCisgICAgICAlIFB1dCB0aGUgYXJndW1lbnQgYmFjayBmb3IgdGhlIFxwaWNrdXB3aG9sZWZyYWN0aW9uIGNhbGwsIHNvCisgICAgICAlIHdlJ2xsIGFsd2F5cyBoYXZlIGEgcGVyaW9kIHRoZXJlIHRvIGJlIHBhcnNlZC4KKyAgICAgIFxkZWZcZ297XHBpY2t1cHdob2xlZnJhY3Rpb24jMX0lCisgICAgXGVsc2UKKyAgICAgIFxsZXRcZ28gPSBcc2V0dXB0YWJsZQorICAgIFxmaSUKKyAgXGZpCisgIFxnbworfQorCislIG11bHRpdGFibGUtb25seSBjb21tYW5kcy4KKyUKKyUgQGhlYWRpdGVtIHN0YXJ0cyBhIGhlYWRpbmcgcm93LCB3aGljaCB3ZSB0eXBlc2V0IGluIGJvbGQuCislIEFzc2lnbm1lbnRzIGhhdmUgdG8gYmUgZ2xvYmFsIHNpbmNlIHdlIGFyZSBpbnNpZGUgdGhlIGltcGxpY2l0IGdyb3VwCislIG9mIGFuIGFsaWdubWVudCBlbnRyeS4gIE5vdGUgdGhhdCBcZXZlcnljciByZXNldHMgXGV2ZXJ5dGFiLgorXGRlZlxoZWFkaXRlbXtcY2hlY2tlbnZcbXVsdGl0YWJsZSBcY3JjciBcZ2xvYmFsXGV2ZXJ5dGFiPXtcYmZ9XHRoZVxldmVyeXRhYn0lCislCislIEEgXHRhYiB1c2VkIHRvIGluY2x1ZGUgXGhza2lwMXNwLiAgQnV0IHRoZW4gdGhlIHNwYWNlIGluIGEgdGVtcGxhdGUKKyUgbGluZSBpcyBub3QgZW5vdWdoLiAgVGhhdCBpcyBiYWQuICBTbyBsZXQncyBnbyBiYWNrIHRvIGp1c3QgYCYnIHVudGlsCislIHdlIGVuY291bnRlciB0aGUgcHJvYmxlbSBpdCB3YXMgaW50ZW5kZWQgdG8gc29sdmUgYWdhaW4uCislCQkJCQktLWthcmwsIG5hdGhhbkBhY20ub3JnLCAyMGFwcjk5LgorXGRlZlx0YWJ7XGNoZWNrZW52XG11bHRpdGFibGUgJlx0aGVcZXZlcnl0YWJ9JQorCislIEBtdWx0aXRhYmxlIC4uLiBAZW5kIG11bHRpdGFibGUgZGVmaW5pdGlvbnM6CislCitcbmV3dG9rc1xldmVyeXRhYiAgJSBpbnNlcnQgYWZ0ZXIgZXZlcnkgdGFiLgorJQorXGVudmRlZlxtdWx0aXRhYmxleyUKKyAgXHZza2lwXHBhcnNraXAKKyAgXHN0YXJ0c2F2aW5naW5zZXJ0cworICAlCisgICUgQGl0ZW0gd2l0aGluIGEgbXVsdGl0YWJsZSBzdGFydHMgYSBub3JtYWwgcm93LgorICAlIFdlIHVzZSBcZGVmIGluc3RlYWQgb2YgXGxldCBzbyB0aGF0IGlmIG9uZSBvZiB0aGUgbXVsdGl0YWJsZSBlbnRyaWVzCisgICUgY29udGFpbnMgYW4gQGl0ZW1pemUsIHdlIGRvbid0IGNob2tlIG9uIHRoZSBcaXRlbSAoc2VlbiBhcyBcY3JjciBha2EKKyAgJSBcZW5kdGVtcGxhdGUpIGV4cGFuZGluZyBcZG9pdGVtaXplLgorICBcZGVmXGl0ZW17XGNyY3J9JQorICAlCisgIFx0b2xlcmFuY2U9OTUwMAorICBcaGJhZG5lc3M9OTUwMAorICBcc2V0bXVsdGl0YWJsZXNwYWNpbmcKKyAgXHBhcnNraXA9XG11bHRpdGFibGVwYXJza2lwCisgIFxwYXJpbmRlbnQ9XG11bHRpdGFibGVwYXJpbmRlbnQKKyAgXG92ZXJmdWxscnVsZT0wcHQKKyAgXGdsb2JhbFxjb2xjb3VudD0wCisgICUKKyAgXGV2ZXJ5Y3IgPSB7JQorICAgIFxub2FsaWdueyUKKyAgICAgIFxnbG9iYWxcZXZlcnl0YWI9e30lCisgICAgICBcZ2xvYmFsXGNvbGNvdW50PTAgJSBSZXNldCB0aGUgY29sdW1uIGNvdW50ZXIuCisgICAgICAlIENoZWNrIGZvciBzYXZlZCBmb290bm90ZXMsIGV0Yy4KKyAgICAgIFxjaGVja2luc2VydHMKKyAgICAgICUgS2VlcHMgdW5kZXJmdWxsIGJveCBtZXNzYWdlcyBvZmYgd2hlbiB0YWJsZSBicmVha3Mgb3ZlciBwYWdlcy4KKyAgICAgICVcZmlsYnJlYWsKKwklIE1heWJlIHNvLCBidXQgaXQgYWxzbyBjcmVhdGVzIHJlYWxseSB3ZWlyZCBwYWdlIGJyZWFrcyB3aGVuIHRoZQorCSUgdGFibGUgYnJlYWtzIG92ZXIgcGFnZXMuIFdvdWxkbid0IFx2ZmlsIGJlIGJldHRlcj8gIFdhaXQgdW50aWwgdGhlCisJJSBwcm9ibGVtIG1hbmlmZXN0cyBpdHNlbGYsIHNvIGl0IGNhbiBiZSBmaXhlZCBmb3IgcmVhbCAtLWthcmwuCisgICAgfSUKKyAgfSUKKyAgJQorICBccGFyc2VhcmdcZG9tdWx0aXRhYmxlCit9CitcZGVmXGRvbXVsdGl0YWJsZSMxeyUKKyAgJSBUbyBwYXJzZSBldmVyeXRoaW5nIGJldHdlZW4gQG11bHRpdGFibGUgYW5kIEBpdGVtOgorICBcc2V0dXB0YWJsZSMxIFxlbmRzZXR1cHRhYmxlCisgICUKKyAgJSBUaGlzIHByZWFtYmxlIHNldHMgdXAgYSBnZW5lcmljIGNvbHVtbiBkZWZpbml0aW9uLCB3aGljaCB3aWxsCisgICUgYmUgdXNlZCBhcyBtYW55IHRpbWVzIGFzIHVzZXIgY2FsbHMgZm9yIGNvbHVtbnMuCisgICUgXHZ0b3Agd2lsbCBzZXQgYSBzaW5nbGUgbGluZSBhbmQgd2lsbCBhbHNvIGxldCB0ZXh0IHdyYXAgYW5kCisgICUgY29udGludWUgZm9yIG1hbnkgcGFyYWdyYXBocyBpZiBkZXNpcmVkLgorICBcaGFsaWduXGJncm91cCAmJQorICAgIFxnbG9iYWxcYWR2YW5jZVxjb2xjb3VudCBieSAxCisgICAgXG11bHRpc3RydXQKKyAgICBcdnRvcHslCisgICAgICAlIFVzZSB0aGUgY3VycmVudCBcY29sY291bnQgdG8gZmluZCB0aGUgY29ycmVjdCBjb2x1bW4gd2lkdGg6CisgICAgICBcaHNpemU9XGV4cGFuZGFmdGVyXGNzbmFtZSBjb2xcdGhlXGNvbGNvdW50XGVuZGNzbmFtZQorICAgICAgJQorICAgICAgJSBJbiBvcmRlciB0byBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlcgorICAgICAgJSB3ZSB3aWxsIGFkZCBhIFxsZWZ0c2tpcCBvZiBcbXVsdGl0YWJsZWNvbHNwYWNlIHRvIGFsbCBjb2x1bW5zIGFmdGVyCisgICAgICAlIHRoZSBmaXJzdCBvbmUuCisgICAgICAlCisgICAgICAlIElmIGEgdGVtcGxhdGUgaGFzIGJlZW4gdXNlZCwgd2Ugd2lsbCBhZGQgXG11bHRpdGFibGVjb2xzcGFjZQorICAgICAgJSB0byB0aGUgd2lkdGggb2YgZWFjaCB0ZW1wbGF0ZSBlbnRyeS4KKyAgICAgICUKKyAgICAgICUgSWYgdGhlIHVzZXIgaGFzIHNldCBwcmVhbWJsZSBpbiB0ZXJtcyBvZiBwZXJjZW50IG9mIFxoc2l6ZSB3ZSB3aWxsCisgICAgICAlIHVzZSB0aGF0IGRpbWVuc2lvbiBhcyB0aGUgd2lkdGggb2YgdGhlIGNvbHVtbiwgYW5kIHRoZSBcbGVmdHNraXAKKyAgICAgICUgd2lsbCBrZWVwIGVudHJpZXMgZnJvbSBidW1waW5nIGludG8gZWFjaCBvdGhlci4gIFRhYmxlIHdpbGwgc3RhcnQgYXQKKyAgICAgICUgbGVmdCBtYXJnaW4gYW5kIGZpbmFsIGNvbHVtbiB3aWxsIGp1c3RpZnkgYXQgcmlnaHQgbWFyZ2luLgorICAgICAgJQorICAgICAgJSBNYWtlIHN1cmUgd2UgZG9uJ3QgaW5oZXJpdCBccmlnaHRza2lwIGZyb20gdGhlIG91dGVyIGVudmlyb25tZW50LgorICAgICAgXHJpZ2h0c2tpcD0wcHQKKyAgICAgIFxpZm51bVxjb2xjb3VudD0xCisJJSBUaGUgZmlyc3QgY29sdW1uIHdpbGwgYmUgaW5kZW50ZWQgd2l0aCB0aGUgc3Vycm91bmRpbmcgdGV4dC4KKwlcYWR2YW5jZVxoc2l6ZSBieVxsZWZ0c2tpcAorICAgICAgXGVsc2UKKwlcaWZzZXRwZXJjZW50IFxlbHNlCisJICAlIElmIHVzZXIgaGFzIG5vdCBzZXQgcHJlYW1ibGUgaW4gdGVybXMgb2YgcGVyY2VudCBvZiBcaHNpemUKKwkgICUgd2Ugd2lsbCBhZHZhbmNlIFxoc2l6ZSBieSBcbXVsdGl0YWJsZWNvbHNwYWNlLgorCSAgXGFkdmFuY2VcaHNpemUgYnkgXG11bHRpdGFibGVjb2xzcGFjZQorCVxmaQorICAgICAgICUgSW4gZWl0aGVyIGNhc2Ugd2Ugd2lsbCBtYWtlIFxsZWZ0c2tpcD1cbXVsdGl0YWJsZWNvbHNwYWNlOgorICAgICAgXGxlZnRza2lwPVxtdWx0aXRhYmxlY29sc3BhY2UKKyAgICAgIFxmaQorICAgICAgJSBJZ25vcmluZyBzcGFjZSBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgYXZvaWRzIGFuIG9jY2FzaW9uYWwgc3B1cmlvdXMKKyAgICAgICUgYmxhbmsgbGluZSwgd2hlbiBUZVggZGVjaWRlcyB0byBicmVhayB0aGUgbGluZSBhdCB0aGUgc3BhY2UgYmVmb3JlIHRoZQorICAgICAgJSBib3ggZnJvbSB0aGUgbXVsdGlzdHJ1dCwgc28gdGhlIHN0cnV0IGVuZHMgdXAgb24gYSBsaW5lIGJ5IGl0c2VsZi4KKyAgICAgICUgRm9yIGV4YW1wbGU6CisgICAgICAlIEBtdWx0aXRhYmxlIEBjb2x1bW5mcmFjdGlvbnMgLjExIC44OQorICAgICAgJSBAaXRlbSBAY29kZXsjfQorICAgICAgJSBAdGFiIExlZ2FsIGhvbGlkYXkgd2hpY2ggaXMgdmFsaWQgaW4gbWFqb3IgcGFydHMgb2YgdGhlIHdob2xlIGNvdW50cnkuCisgICAgICAlIElzIGF1dG9tYXRpY2FsbHkgcHJvdmlkZWQgd2l0aCBoaWdobGlnaHRpbmcgc2VxdWVuY2VzIHJlc3BlY3RpdmVseQorICAgICAgJSBtYXJraW5nIGNoYXJhY3RlcnMuCisgICAgICBcbm9pbmRlbnRcaWdub3Jlc3BhY2VzIyNcdW5za2lwXG11bHRpc3RydXQKKyAgICB9XGNyCit9CitcZGVmXEVtdWx0aXRhYmxleyUKKyAgXGNyY3IKKyAgXGVncm91cCAlIGVuZCB0aGUgXGhhbGlnbgorICBcZ2xvYmFsXHNldHBlcmNlbnRmYWxzZQorfQorCitcZGVmXHNldG11bHRpdGFibGVzcGFjaW5neyUKKyAgXGRlZlxtdWx0aXN0cnV0e1xzdHJ1dH0lIGp1c3QgdXNlIHRoZSBzdGFuZGFyZCBsaW5lIHNwYWNpbmcKKyAgJQorICAlIENvbXB1dGUgXG11bHRpdGFibGVsaW5lc3BhY2UgKGlmIG5vdCBkZWZpbmVkIGJ5IHVzZXIpIGZvciB1c2UgaW4KKyAgJSBcbXVsdGl0YWJsZXBhcnNraXAgY2FsY3VsYXRpb24uICBXZSB1c2VkIGRlZmluZSBcbXVsdGlzdHJ1dCBiYXNlZCBvbgorICAlIHRoaXMsIGJ1dCAoaXJvbmljYWxseSkgdGhhdCBjYXVzZWQgdGhlIHNwYWNpbmcgdG8gYmUgb2ZmLgorICAlIFNlZSBidWctdGV4aW5mbyByZXBvcnQgZnJvbSBXZXJuZXIgTGVtYmVyZywgMzEgT2N0IDIwMDQgMTI6NTI6MjAgKzAxMDAuCitcaWZkaW1cbXVsdGl0YWJsZWxpbmVzcGFjZT0wcHQKK1xzZXRib3gwPVx2Ym94e1h9XGdsb2JhbFxtdWx0aXRhYmxlbGluZXNwYWNlPVx0aGVcYmFzZWxpbmVza2lwCitcZ2xvYmFsXGFkdmFuY2VcbXVsdGl0YWJsZWxpbmVzcGFjZSBieS1caHQwCitcZmkKKyUlIFRlc3QgdG8gc2VlIGlmIHBhcnNraXAgaXMgbGFyZ2VyIHRoYW4gc3BhY2UgYmV0d2VlbiBsaW5lcyBvZgorJSUgdGFibGUuIElmIG5vdCwgZG8gbm90aGluZy4KKyUlICAgICAgICBJZiBzbywgc2V0IHRvIHNhbWUgZGltZW5zaW9uIGFzIG11bHRpdGFibGVsaW5lc3BhY2UuCitcaWZkaW1cbXVsdGl0YWJsZXBhcnNraXA+XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcbXVsdGl0YWJsZXBhcnNraXA9XG11bHRpdGFibGVsaW5lc3BhY2UKK1xnbG9iYWxcYWR2YW5jZVxtdWx0aXRhYmxlcGFyc2tpcC03cHQgJSUgdG8ga2VlcCBwYXJza2lwIHNvbWV3aGF0IHNtYWxsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSUgdGhhbiBza2lwIGJldHdlZW4gbGluZXMgaW4gdGhlIHRhYmxlLgorXGZpJQorXGlmZGltXG11bHRpdGFibGVwYXJza2lwPTBwdAorXGdsb2JhbFxtdWx0aXRhYmxlcGFyc2tpcD1cbXVsdGl0YWJsZWxpbmVzcGFjZQorXGdsb2JhbFxhZHZhbmNlXG11bHRpdGFibGVwYXJza2lwLTdwdCAlJSB0byBrZWVwIHBhcnNraXAgc29tZXdoYXQgc21hbGxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlJSB0aGFuIHNraXAgYmV0d2VlbiBsaW5lcyBpbiB0aGUgdGFibGUuCitcZml9CisKKworXG1lc3NhZ2V7Y29uZGl0aW9uYWxzLH0KKworJSBAaWZ0ZXgsIEBpZm5vdGRvY2Jvb2ssIEBpZm5vdGh0bWwsIEBpZm5vdGluZm8sIEBpZm5vdHBsYWludGV4dCwKKyUgQGlmbm90eG1sIGFsd2F5cyBzdWNjZWVkLiAgVGhleSBjdXJyZW50bHkgZG8gbm90aGluZzsgd2UgZG9uJ3QKKyUgYXR0ZW1wdCB0byBjaGVjayB3aGV0aGVyIHRoZSBjb25kaXRpb25hbHMgYXJlIHByb3Blcmx5IG5lc3RlZC4gIEJ1dCB3ZQorJSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWxzLCBzbyB0aGF0IEBlbmQgZG9lc24ndAorJSBhdHRlbXB0IHRvIGNsb3NlIGFuIGVudmlyb25tZW50IGdyb3VwLgorJQorXGRlZlxtYWtlY29uZCMxeyUKKyAgXGV4cGFuZGFmdGVyXGxldFxjc25hbWUgIzFcZW5kY3NuYW1lID0gXHJlbGF4CisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzY29uZC4jMVxlbmRjc25hbWUgPSAxCit9CitcbWFrZWNvbmR7aWZ0ZXh9CitcbWFrZWNvbmR7aWZub3Rkb2Nib29rfQorXG1ha2Vjb25ke2lmbm90aHRtbH0KK1xtYWtlY29uZHtpZm5vdGluZm99CitcbWFrZWNvbmR7aWZub3RwbGFpbnRleHR9CitcbWFrZWNvbmR7aWZub3R4bWx9CisKKyUgSWdub3JlIEBpZ25vcmUsIEBpZmh0bWwsIEBpZmluZm8sIGFuZCB0aGUgbGlrZS4KKyUKK1xkZWZcZGlyZW50cnl7XGRvaWdub3Jle2RpcmVudHJ5fX0KK1xkZWZcZG9jdW1lbnRkZXNjcmlwdGlvbntcZG9pZ25vcmV7ZG9jdW1lbnRkZXNjcmlwdGlvbn19CitcZGVmXGRvY2Jvb2t7XGRvaWdub3Jle2RvY2Jvb2t9fQorXGRlZlxodG1se1xkb2lnbm9yZXtodG1sfX0KK1xkZWZcaWZkb2Nib29re1xkb2lnbm9yZXtpZmRvY2Jvb2t9fQorXGRlZlxpZmh0bWx7XGRvaWdub3Jle2lmaHRtbH19CitcZGVmXGlmaW5mb3tcZG9pZ25vcmV7aWZpbmZvfX0KK1xkZWZcaWZub3R0ZXh7XGRvaWdub3Jle2lmbm90dGV4fX0KK1xkZWZcaWZwbGFpbnRleHR7XGRvaWdub3Jle2lmcGxhaW50ZXh0fX0KK1xkZWZcaWZ4bWx7XGRvaWdub3Jle2lmeG1sfX0KK1xkZWZcaWdub3Jle1xkb2lnbm9yZXtpZ25vcmV9fQorXGRlZlxtZW51e1xkb2lnbm9yZXttZW51fX0KK1xkZWZceG1se1xkb2lnbm9yZXt4bWx9fQorCislIElnbm9yZSB0ZXh0IHVudGlsIGEgbGluZSBgQGVuZCAjMScsIGtlZXBpbmcgdHJhY2sgb2YgbmVzdGVkIGNvbmRpdGlvbmFscy4KKyUKKyUgQSBjb3VudCB0byByZW1lbWJlciB0aGUgZGVwdGggb2YgbmVzdGluZy4KK1xuZXdjb3VudFxkb2lnbm9yZWNvdW50CisKK1xkZWZcZG9pZ25vcmUjMXtcYmVnaW5ncm91cAorICAlIFNjYW4gaW4gYGB2ZXJiYXRpbScnIG1vZGU6CisgIFxjYXRjb2RlYFxAID0gXG90aGVyCisgIFxjYXRjb2RlYFx7ID0gXG90aGVyCisgIFxjYXRjb2RlYFx9ID0gXG90aGVyCisgICUKKyAgJSBNYWtlIHN1cmUgdGhhdCBzcGFjZXMgdHVybiBpbnRvIHRva2VucyB0aGF0IG1hdGNoIHdoYXQgXGRvaWdub3JldGV4dCB3YW50cy4KKyAgXHNwYWNlaXNzcGFjZQorICAlCisgICUgQ291bnQgbnVtYmVyIG9mICMxJ3MgdGhhdCB3ZSd2ZSBzZWVuLgorICBcZG9pZ25vcmVjb3VudCA9IDAKKyAgJQorICAlIFN3YWxsb3cgdGV4dCB1bnRpbCB3ZSByZWFjaCB0aGUgbWF0Y2hpbmcgYEBlbmQgIzEnLgorICBcZG9kb2lnbm9yZXsjMX0lCit9CisKK3sgXGNhdGNvZGVgXz0xMSAlIFdlIHdhbnQgdG8gdXNlIFxfU1RPUF8gd2hpY2ggY2Fubm90IGFwcGVhciBpbiB0ZXhpbmZvIHNvdXJjZS4KKyAgXG9iZXlsaW5lcyAlCisgICUKKyAgXGdkZWZcZG9kb2lnbm9yZSMxeyUKKyAgICAlICMxIGNvbnRhaW5zIHRoZSBjb21tYW5kIG5hbWUgYXMgYSBzdHJpbmcsIGUuZy4sIGBpZmluZm8nLgorICAgICUKKyAgICAlIERlZmluZSBhIGNvbW1hbmQgdG8gZmluZCB0aGUgbmV4dCBgQGVuZCAjMScsIHdoaWNoIG11c3QgYmUgb24gYSBsaW5lCisgICAgJSBieSBpdHNlbGYuCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dCMjMV5eTUBlbmQgIzF7XGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMVxfU1RPUF99JQorICAgICUgQW5kIHRoaXMgY29tbWFuZCB0byBmaW5kIGFub3RoZXIgIzEgY29tbWFuZCwgYXQgdGhlIGJlZ2lubmluZyBvZiBhCisgICAgJSBsaW5lLiAgKE90aGVyd2lzZSwgd2Ugd291bGQgY29uc2lkZXIgYSBsaW5lIGBAYyBAaWZzZXQnLCBmb3IKKyAgICAlIGV4YW1wbGUsIHRvIGNvdW50IGFzIGFuIEBpZnNldCBmb3IgbmVzdGluZy4pCisgICAgXGxvbmdcZGVmXGRvaWdub3JldGV4dHl5eSMjMV5eTUAjMSMjMlxfU1RPUF97XGRvaWdub3JleXl5eyMjMn1cX1NUT1BffSUKKyAgICAlCisgICAgJSBBbmQgbm93IGV4cGFuZCB0aGF0IGNvbW1hbmQuCisgICAgXG9iZXlsaW5lcyAlCisgICAgXGRvaWdub3JldGV4dCBeXk0lCisgIH0lCit9CisKK1xkZWZcZG9pZ25vcmV5eXkjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eQkJCSUgTm90aGluZyBmb3VuZC4KKyAgICBcbGV0XG5leHRcZG9pZ25vcmV0ZXh0enp6CisgIFxlbHNlCQkJCQklIEZvdW5kIGEgbmVzdGVkIGNvbmRpdGlvbiwgLi4uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAxCisgICAgXGxldFxuZXh0XGRvaWdub3JldGV4dHl5eQkJJSAuLi4sIGxvb2sgZm9yIGFub3RoZXIuCisgICAgJSBJZiB3ZSdyZSBoZXJlLCAjMSBlbmRzIHdpdGggXl5NXGlmaW5mbyAoZm9yIGV4YW1wbGUpLgorICBcZmkKKyAgXG5leHQgIzElIHRoZSB0b2tlbiBcX1NUT1BfIGlzIHByZXNlbnQganVzdCBhZnRlciB0aGlzIG1hY3JvLgorfQorCislIFdlIGhhdmUgdG8gc3dhbGxvdyB0aGUgcmVtYWluaW5nICJcX1NUT1BfIi4KKyUKK1xkZWZcZG9pZ25vcmV0ZXh0enp6IzF7JQorICBcaWZudW1cZG9pZ25vcmVjb3VudCA9IDAJJSBXZSBoYXZlIGp1c3QgZm91bmQgdGhlIG91dGVybW9zdCBAZW5kLgorICAgIFxsZXRcbmV4dFxlbmRkb2lnbm9yZQorICBcZWxzZQkJCQklIFN0aWxsIGluc2lkZSBhIG5lc3RlZCBjb25kaXRpb24uCisgICAgXGFkdmFuY2VcZG9pZ25vcmVjb3VudCBieSAtMQorICAgIFxsZXRcbmV4dFxkb2lnbm9yZXRleHQgICAgICAlIExvb2sgZm9yIHRoZSBuZXh0IEBlbmQuCisgIFxmaQorICBcbmV4dAorfQorCislIEZpbmlzaCBvZmYgaWdub3JlZCB0ZXh0LgorXGRlZlxlbmRkb2lnbm9yZXtcZW5kZ3JvdXBcaWdub3Jlc3BhY2VzfQorCisKKyUgQHNldCBWQVIgc2V0cyB0aGUgdmFyaWFibGUgVkFSIHRvIGFuIGVtcHR5IHZhbHVlLgorJSBAc2V0IFZBUiBSRVNULU9GLUxJTkUgc2V0cyBWQVIgdG8gdGhlIHZhbHVlIFJFU1QtT0YtTElORS4KKyUKKyUgU2luY2Ugd2Ugd2FudCB0byBzZXBhcmF0ZSBWQVIgZnJvbSBSRVNULU9GLUxJTkUgKHdoaWNoIG1pZ2h0IGJlCislIGVtcHR5KSwgd2UgY2FuJ3QganVzdCB1c2UgXHBhcnNlYXJnOyB3ZSBoYXZlIHRvIGluc2VydCBhIHNwYWNlIG9mIG91cgorJSBvd24gdG8gZGVsaW1pdCB0aGUgcmVzdCBvZiB0aGUgbGluZSwgYW5kIHRoZW4gdGFrZSBpdCBvdXQgYWdhaW4gaWYgd2UKKyUgZGlkbid0IG5lZWQgaXQuCislIFdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBccGFyc2Vhcmcgc2V0cyBcY2F0Y29kZWBcID0xMC4KKyUKK1xwYXJzZWFyZ2RlZlxzZXR7XHNldHl5eSMxIFxlbmRzZXR5eXl9CitcZGVmXHNldHl5eSMxICMyXGVuZHNldHl5eXslCisgIHslCisgICAgXG1ha2V2YWx1ZWV4cGFuZGFibGUKKyAgICBcZGVmXHRlbXB7IzJ9JQorICAgIFxlZGVmXG5leHR7XGdkZWZcbWFrZWNzbmFtZXtTRVQjMX19JQorICAgIFxpZnhcdGVtcFxlbXB0eQorICAgICAgXG5leHR7fSUKKyAgICBcZWxzZQorICAgICAgXHNldHp6eiMyXGVuZHNldHp6egorICAgIFxmaQorICB9JQorfQorJSBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlIFxzZXR4eHggaW5zZXJ0ZWQuCitcZGVmXHNldHp6eiMxIFxlbmRzZXR6enp7XG5leHR7IzF9fQorCislIEBjbGVhciBWQVIgY2xlYXJzIChpLmUuLCB1bnNldHMpIHRoZSB2YXJpYWJsZSBWQVIuCislCitccGFyc2VhcmdkZWZcY2xlYXJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZT1ccmVsYXgKKyAgfSUKK30KKworJSBAdmFsdWV7Zm9vfSBnZXRzIHRoZSB0ZXh0IHNhdmVkIGluIHZhcmlhYmxlIGZvby4KK1xkZWZcdmFsdWV7XGJlZ2luZ3JvdXBcbWFrZXZhbHVlZXhwYW5kYWJsZVx2YWx1ZXh4eH0KK1xkZWZcdmFsdWV4eHgjMXtcZXhwYW5kYWJsZXZhbHVleyMxfVxlbmRncm91cH0KK3sKKyAgXGNhdGNvZGVgXC0gPSBcYWN0aXZlIFxjYXRjb2RlYFxfID0gXGFjdGl2ZQorICAlCisgIFxnZGVmXG1ha2V2YWx1ZWV4cGFuZGFibGV7JQorICAgIFxsZXRcdmFsdWUgPSBcZXhwYW5kYWJsZXZhbHVlCisgICAgJSBXZSBkb24ndCB3YW50IHRoZXNlIGNoYXJhY3RlcnMgYWN0aXZlLCAuLi4KKyAgICBcY2F0Y29kZWBcLT1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyCisgICAgJSAuLi4sIGJ1dCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBhY3RpdmUgb25lcyBpbiB0aGUgYXJndW1lbnQgaWYKKyAgICAlIHdlJ3JlIGNhbGxlZCBmcm9tIEBjb2RlLCBhcyBAY29kZXtAdmFsdWV7Zm9vLWJhcl99fSwgdGhvdWdoLgorICAgICUgU28gXGxldCB0aGVtIHRvIHRoZWlyIG5vcm1hbCBlcXVpdmFsZW50cy4KKyAgICBcbGV0LVxyZWFsZGFzaCBcbGV0X1xub3JtYWx1bmRlcnNjb3JlCisgIH0KK30KKworJSBXZSBoYXZlIHRoaXMgc3Vicm91dGluZSBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgYXQgbGVhc3Qgc29tZSBAdmFsdWUncworJSBwcm9wZXJseSBpbiBpbmRleGVzICh3ZSBjYWxsIFxtYWtldmFsdWVleHBhbmRhYmxlIGluIFxpbmRleGR1bW1pZXMpLgorJSBUaGUgY29tbWFuZCBoYXMgdG8gYmUgZnVsbHkgZXhwYW5kYWJsZSAoaWYgdGhlIHZhcmlhYmxlIGlzIHNldCksIHNpbmNlCislIHRoZSByZXN1bHQgd2luZHMgdXAgaW4gdGhlIGluZGV4IGZpbGUuICBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlCislIHZhcmlhYmxlJ3MgdmFsdWUgY29udGFpbnMgb3RoZXIgVGV4aW5mbyBjb21tYW5kcywgaXQncyBhbG1vc3QgY2VydGFpbgorJSBpdCB3aWxsIGZhaWwgKGFsdGhvdWdoIHBlcmhhcHMgd2UgY291bGQgZml4IHRoYXQgd2l0aCBzdWZmaWNpZW50IHdvcmsKKyUgdG8gZG8gYSBvbmUtbGV2ZWwgZXhwYW5zaW9uIG9uIHRoZSByZXN1bHQsIGluc3RlYWQgb2YgY29tcGxldGUpLgorJQorXGRlZlxleHBhbmRhYmxldmFsdWUjMXslCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMxXGVuZGNzbmFtZVxyZWxheAorICAgIHtbTm8gdmFsdWUgZm9yIGBgIzEnJ119JQorICAgIFxtZXNzYWdle1ZhcmlhYmxlIGAjMScsIHVzZWQgaW4gQHZhbHVlLCBpcyBub3Qgc2V0Ln0lCisgIFxlbHNlCisgICAgXGNzbmFtZSBTRVQjMVxlbmRjc25hbWUKKyAgXGZpCit9CisKKyUgQGlmc2V0IFZBUiAuLi4gQGVuZCBpZnNldCByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgYmVlbiBkZWZpbmVkCislIHdpdGggQHNldC4KKyUKKyUgVG8gZ2V0IHNwZWNpYWwgdHJlYXRtZW50IG9mIGBAZW5kIGlmc2V0LCcgY2FsbCBcbWFrZW9uZCBhbmQgdGhlIHJlZGVmaW5lLgorJQorXG1ha2Vjb25ke2lmc2V0fQorXGRlZlxpZnNldHtccGFyc2Vhcmd7XGRvaWZzZXR7XGxldFxuZXh0PVxpZnNldGZhaWx9fX0KK1xkZWZcZG9pZnNldCMxIzJ7JQorICB7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGxldFxuZXh0PVxlbXB0eQorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFNFVCMyXGVuZGNzbmFtZVxyZWxheAorICAgICAgIzElIElmIG5vdCBzZXQsIHJlZGVmaW5lIFxuZXh0LgorICAgIFxmaQorICAgIFxleHBhbmRhZnRlcgorICB9XG5leHQKK30KK1xkZWZcaWZzZXRmYWlse1xkb2lnbm9yZXtpZnNldH19CisKKyUgQGlmY2xlYXIgVkFSIC4uLiBAZW5kIGlmY2xlYXIgcmVhZHMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KKyUgZGVmaW5lZCB3aXRoIEBzZXQsIG9yIGhhcyBiZWVuIHVuZGVmaW5lZCB3aXRoIEBjbGVhci4KKyUKKyUgVGhlIGBcZWxzZScgaW5zaWRlIHRoZSBgXGRvaWZzZXQnIHBhcmFtZXRlciBpcyBhIHRyaWNrIHRvIHJldXNlIHRoZQorJSBhYm92ZSBjb2RlOiBpZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgZG8gbm90aGluZywgaWYgaXQgaXMgc2V0LAorJSB0aGVuIHJlZGVmaW5lIFxuZXh0IHRvIFxpZmNsZWFyZmFpbC4KKyUKK1xtYWtlY29uZHtpZmNsZWFyfQorXGRlZlxpZmNsZWFye1xwYXJzZWFyZ3tcZG9pZnNldHtcZWxzZSBcbGV0XG5leHQ9XGlmY2xlYXJmYWlsfX19CitcZGVmXGlmY2xlYXJmYWlse1xkb2lnbm9yZXtpZmNsZWFyfX0KKworJSBAZGlyY2F0ZWdvcnkgQ0FURUdPUlkgIC0tIHNwZWNpZnkgYSBjYXRlZ29yeSBvZiB0aGUgZGlyIGZpbGUKKyUgd2hpY2ggdGhpcyBmaWxlIHNob3VsZCBiZWxvbmcgdG8uICBJZ25vcmUgdGhpcyBpbiBUZVguCitcbGV0XGRpcmNhdGVnb3J5PVxjb21tZW50CisKKyUgQGRlZmluaW5mb2VuY2xvc2UuCitcbGV0XGRlZmluZm9lbmNsb3NlPVxjb21tZW50CisKKworXG1lc3NhZ2V7aW5kZXhpbmcsfQorJSBJbmRleCBnZW5lcmF0aW9uIGZhY2lsaXRpZXMKKworJSBEZWZpbmUgXG5ld3dyaXRlIHRvIGJlIGlkZW50aWNhbCB0byBwbGFpbiB0ZXgncyBcbmV3d3JpdGUKKyUgZXhjZXB0IG5vdCBcb3V0ZXIsIHNvIGl0IGNhbiBiZSB1c2VkIHdpdGhpbiBtYWNyb3MgYW5kIFxpZidzLgorXGVkZWZcbmV3d3JpdGV7XG1ha2Vjc25hbWV7cHRleG5ld3dyaXRlfX0KKworJSBcbmV3aW5kZXgge2Zvb30gZGVmaW5lcyBhbiBpbmRleCBuYW1lZCBmb28uCislIEl0IGF1dG9tYXRpY2FsbHkgZGVmaW5lcyBcZm9vaW5kZXggc3VjaCB0aGF0CislIFxmb29pbmRleCAuLi5yZXN0IG9mIGxpbmUuLi4gcHV0cyBhbiBlbnRyeSBpbiB0aGUgaW5kZXggZm9vLgorJSBJdCBhbHNvIGRlZmluZXMgXGZvb2luZGZpbGUgdG8gYmUgdGhlIG51bWJlciBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgZm9yCislIHRoZSBmaWxlIHRoYXQgYWNjdW11bGF0ZXMgdGhpcyBpbmRleC4gIFRoZSBmaWxlJ3MgZXh0ZW5zaW9uIGlzIGZvby4KKyUgVGhlIG5hbWUgb2YgYW4gaW5kZXggc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyIGNoYXJhY3RlcnMgbG9uZworJSBmb3IgdGhlIHNha2Ugb2Ygdm1zLgorJQorXGRlZlxuZXdpbmRleCMxeyUKKyAgXGlmbGlua3MKKyAgICBcZXhwYW5kYWZ0ZXJcbmV3d3JpdGUgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUKKyAgICBcb3Blbm91dCBcY3NuYW1lIzFpbmRmaWxlXGVuZGNzbmFtZSBcam9ibmFtZS4jMSAlIE9wZW4gdGhlIGZpbGUKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUgICAgICUgRGVmaW5lIEAjMWluZGV4CisgICAgXG5vZXhwYW5kXGRvaW5kZXh7IzF9fQorfQorCislIEBkZWZpbmRleCBmb28gID09ICBcbmV3aW5kZXh7Zm9vfQorJQorXGRlZlxkZWZpbmRleHtccGFyc2VhcmdcbmV3aW5kZXh9CisKKyUgRGVmaW5lIEBkZWZjb2RlaW5kZXgsIGxpa2UgQGRlZmluZGV4IGV4Y2VwdCBwdXQgYWxsIGVudHJpZXMgaW4gQGNvZGUuCislCitcZGVmXGRlZmNvZGVpbmRleHtccGFyc2VhcmdcbmV3Y29kZWluZGV4fQorJQorXGRlZlxuZXdjb2RlaW5kZXgjMXslCisgIFxpZmxpbmtzCisgICAgXGV4cGFuZGFmdGVyXG5ld3dyaXRlIFxjc25hbWUjMWluZGZpbGVcZW5kY3NuYW1lCisgICAgXG9wZW5vdXQgXGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWUgXGpvYm5hbWUuIzEKKyAgXGZpCisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMxaW5kZXhcZW5kY3NuYW1leyUKKyAgICBcbm9leHBhbmRcZG9jb2RlaW5kZXh7IzF9fSUKK30KKworCislIEBzeW5pbmRleCBmb28gYmFyICAgIG1ha2VzIGluZGV4IGZvbyBmZWVkIGludG8gaW5kZXggYmFyLgorJSBEbyB0aGlzIGluc3RlYWQgb2YgQGRlZmluZGV4IGZvbyBpZiB5b3UgZG9uJ3Qgd2FudCBpdCBhcyBhIHNlcGFyYXRlIGluZGV4LgorJQorJSBAc3luY29kZWluZGV4IGZvbyBiYXIgICBzaW1pbGFyLCBidXQgcHV0IGFsbCBlbnRyaWVzIG1hZGUgZm9yIGluZGV4IGZvbworJSBpbnNpZGUgQGNvZGUuCislCitcZGVmXHN5bmluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvaW5kZXh7IzF9eyMyfX0KK1xkZWZcc3luY29kZWluZGV4IzEgIzIge1xkb3N5bmluZGV4XGRvY29kZWluZGV4eyMxfXsjMn19CisKKyUgIzEgaXMgXGRvaW5kZXggb3IgXGRvY29kZWluZGV4LCAjMiB0aGUgaW5kZXggZ2V0dGluZyByZWRlZmluZWQgKGZvbyksCislICMzIHRoZSB0YXJnZXQgaW5kZXggKGJhcikuCitcZGVmXGRvc3luaW5kZXgjMSMyIzN7JQorICAlIE9ubHkgZG8gXGNsb3Nlb3V0IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBkb25lIGl0LCBlbHNlIHdlJ2xsIGVuZCB1cAorICAlIGNsb3NpbmcgdGhlIHRhcmdldCBpbmRleC4KKyAgXGV4cGFuZGFmdGVyIFxpZnhcY3NuYW1lIGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSBcdW5kZWZpbmVkCisgICAgJSBUaGUgXGNsb3Nlb3V0IGhlbHBzIHJlZHVjZSB1bm5lY2Vzc2FyeSBvcGVuIGZpbGVzOyB0aGUgbGltaXQgb24gdGhlCisgICAgJSBBY29ybiBSSVNDIE9TIGlzIGEgbWVyZSAxNiBmaWxlcy4KKyAgICBcZXhwYW5kYWZ0ZXJcY2xvc2VvdXRcY3NuYW1lIzJpbmRmaWxlXGVuZGNzbmFtZQorICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lXGRvbmVzeW5pbmRleCMyXGVuZGNzbmFtZSA9IDEKKyAgXGZpCisgICUgcmVkZWZpbmUgXGZvb2luZGZpbGU6CisgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcdGVtcFxleHBhbmRhZnRlcj1cY3NuYW1lIzNpbmRmaWxlXGVuZGNzbmFtZQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSMyaW5kZmlsZVxlbmRjc25hbWU9XHRlbXAKKyAgJSByZWRlZmluZSBcZm9vaW5kZXg6CisgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZSMyaW5kZXhcZW5kY3NuYW1le1xub2V4cGFuZCMxeyMzfX0lCit9CisKKyUgRGVmaW5lIFxkb2luZGV4LCB0aGUgZHJpdmVyIGZvciBhbGwgXGZvb2luZGV4IG1hY3Jvcy4KKyUgQXJndW1lbnQgIzEgaXMgZ2VuZXJhdGVkIGJ5IHRoZSBjYWxsaW5nIFxmb29pbmRleCBtYWNybywKKyUgIGFuZCBpdCBpcyAiZm9vIiwgdGhlIG5hbWUgb2YgdGhlIGluZGV4LgorCislIFxkb2luZGV4IGp1c3QgdXNlcyBccGFyc2Vhcmc7IGl0IGNhbGxzIFxkb2luZCBmb3IgdGhlIGFjdHVhbCB3b3JrLgorJSBUaGlzIGlzIGJlY2F1c2UgXGRvaW5kIGlzIG1vcmUgdXNlZnVsIHRvIGNhbGwgZnJvbSBvdGhlciBtYWNyb3MuCisKKyUgVGhlcmUgaXMgYWxzbyBcZG9zdWJpbmQge2luZGV4fXt0b3BpY317c3VidG9waWN9CislIHdoaWNoIG1ha2VzIGFuIGVudHJ5IGluIGEgdHdvLWxldmVsIGluZGV4IHN1Y2ggYXMgdGhlIG9wZXJhdGlvbiBpbmRleC4KKworXGRlZlxkb2luZGV4IzF7XGVkZWZcaW5kZXhuYW1leyMxfVxwYXJzZWFyZ1xzaW5nbGVpbmRleGVyfQorXGRlZlxzaW5nbGVpbmRleGVyICMxe1xkb2luZHtcaW5kZXhuYW1lfXsjMX19CisKKyUgbGlrZSB0aGUgcHJldmlvdXMgdHdvLCBidXQgdGhleSBwdXQgQGNvZGUgYXJvdW5kIHRoZSBhcmd1bWVudC4KK1xkZWZcZG9jb2RlaW5kZXgjMXtcZWRlZlxpbmRleG5hbWV7IzF9XHBhcnNlYXJnXHNpbmdsZWNvZGVpbmRleGVyfQorXGRlZlxzaW5nbGVjb2RlaW5kZXhlciAjMXtcZG9pbmR7XGluZGV4bmFtZX17XGNvZGV7IzF9fX0KKworJSBUYWtlIGNhcmUgb2YgVGV4aW5mbyBjb21tYW5kcyB0aGF0IGNhbiBhcHBlYXIgaW4gYW4gaW5kZXggZW50cnkuCislIFNpbmNlIHRoZXJlIGFyZSBzb21lIGNvbW1hbmRzIHdlIHdhbnQgdG8gZXhwYW5kLCBhbmQgb3RoZXJzIHdlIGRvbid0LAorJSB3ZSBoYXZlIHRvIGxhYm9yaW91c2x5IHByZXZlbnQgZXhwYW5zaW9uIGZvciB0aG9zZSB0aGF0IHdlIGRvbid0LgorJQorXGRlZlxpbmRleGR1bW1pZXN7JQorICBcZXNjYXBlY2hhciA9IGBcXCAgICAgJSB1c2UgYmFja3NsYXNoIGluIG91dHB1dCBmaWxlcy4KKyAgXGRlZlxAe0B9JSBjaGFuZ2UgdG8gQEAgd2hlbiB3ZSBzd2l0Y2ggdG8gQCBhcyBlc2NhcGUgY2hhciBpbiBpbmRleCBmaWxlcy4KKyAgXGRlZlwge1xyZWFsYmFja3NsYXNoXHNwYWNlIH0lCisgICUgTmVlZCB0aGVzZSBpbiBjYXNlIFx0ZXggaXMgaW4gZWZmZWN0IGFuZCBceyBpcyBhIFxkZWxpbWl0ZXIgYWdhaW4uCisgICUgQnV0IGNhbid0IHVzZSBcbGJyYWNlY21kIGFuZCBccmJyYWNlY21kIGJlY2F1c2UgdGV4aW5kZXggYXNzdW1lcworICAlIGJyYWNlcyBhbmQgYmFja3NsYXNoZXMgYXJlIHVzZWQgb25seSBhcyBkZWxpbWl0ZXJzLgorICBcbGV0XHsgPSBcbXlsYnJhY2UKKyAgXGxldFx9ID0gXG15cmJyYWNlCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKK30KKworJSBGb3IgdGhlIGF1eCBhbmQgdG9jIGZpbGVzLCBAIGlzIHRoZSBlc2NhcGUgY2hhcmFjdGVyLiAgU28gd2Ugd2FudCB0bworJSByZWRlZmluZSBldmVyeXRoaW5nIHVzaW5nIEAgYXMgdGhlIGVzY2FwZSBjaGFyYWN0ZXIgKGluc3RlYWQgb2YKKyUgXHJlYWxiYWNrc2xhc2gsIHN0aWxsIHVzZWQgZm9yIGluZGV4IGZpbGVzKS4gIFdoZW4gZXZlcnl0aGluZyB1c2VzIEAsCislIHRoaXMgd2lsbCBiZSBzaW1wbGVyLgorJQorXGRlZlxhdGR1bW1pZXN7JQorICBcZGVmXEB7QEB9JQorICBcZGVmXCB7QCB9JQorICBcbGV0XHsgPSBcbGJyYWNlYXRjbWQKKyAgXGxldFx9ID0gXHJicmFjZWF0Y21kCisgICUKKyAgJSBEbyB0aGUgcmVkZWZpbml0aW9ucy4KKyAgXGNvbW1vbmR1bW1pZXMKK30KKworJSBDYWxsZWQgZnJvbSBcaW5kZXhkdW1taWVzIGFuZCBcYXRkdW1taWVzLgorJQorXGRlZlxjb21tb25kdW1taWVzeyUKKyAgJQorICAlIFxkZWZpbmVkdW1teXdvcmQgZGVmaW5lcyBcIzEgYXMgXHN0cmluZ1wjMVxzcGFjZSwgdGh1cyBlZmZlY3RpdmVseQorICAlIHByZXZlbnRpbmcgaXRzIGV4cGFuc2lvbi4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBjb250cm9sJSB3b3JkcywKKyAgJSBub3QgY29udHJvbCBsZXR0ZXJzLCBiZWNhdXNlIHRoZSBcc3BhY2Ugd291bGQgYmUgaW5jb3JyZWN0IGZvcgorICAlIGNvbnRyb2wgY2hhcmFjdGVycywgYnV0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgY29udHJvbCB3b3JkCisgICUgZnJvbSB3aGF0ZXZlciBmb2xsb3dzLgorICAlCisgICUgRm9yIGNvbnRyb2wgbGV0dGVycywgd2UgaGF2ZSBcZGVmaW5lZHVtbXlsZXR0ZXIsIHdoaWNoIG9taXRzIHRoZQorICAlIHNwYWNlLgorICAlCisgICUgVGhlc2UgY2FuIGJlIHVzZWQgYm90aCBmb3IgY29udHJvbCB3b3JkcyB0aGF0IHRha2UgYW4gYXJndW1lbnQgYW5kCisgICUgdGhvc2UgdGhhdCBkbyBub3QuICBJZiBpdCBpcyBmb2xsb3dlZCBieSB7YXJnfSBpbiB0aGUgaW5wdXQsIHRoZW4KKyAgJSB0aGF0IHdpbGwgZHV0aWZ1bGx5IGdldCB3cml0dGVuIHRvIHRoZSBpbmRleCAob3Igd2hlcmV2ZXIpLgorICAlCisgIFxkZWZcZGVmaW5lZHVtbXl3b3JkICAjIzF7XGRlZiMjMXtcc3RyaW5nIyMxXHNwYWNlfX0lCisgIFxkZWZcZGVmaW5lZHVtbXlsZXR0ZXIjIzF7XGRlZiMjMXtcc3RyaW5nIyMxfX0lCisgIFxsZXRcZGVmaW5lZHVtbXlhY2NlbnRcZGVmaW5lZHVtbXlsZXR0ZXIKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICBcZGVmaW5lZHVtbXlsZXR0ZXJcXyUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZpbmVkdW1teXdvcmRcQUEKKyAgXGRlZmluZWR1bW15d29yZFxBRQorICBcZGVmaW5lZHVtbXl3b3JkXEwKKyAgXGRlZmluZWR1bW15d29yZFxPRQorICBcZGVmaW5lZHVtbXl3b3JkXE8KKyAgXGRlZmluZWR1bW15d29yZFxhYQorICBcZGVmaW5lZHVtbXl3b3JkXGFlCisgIFxkZWZpbmVkdW1teXdvcmRcbAorICBcZGVmaW5lZHVtbXl3b3JkXG9lCisgIFxkZWZpbmVkdW1teXdvcmRcbworICBcZGVmaW5lZHVtbXl3b3JkXHNzCisgIFxkZWZpbmVkdW1teXdvcmRcZXhjbGFtZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXHF1ZXN0aW9uZG93bgorICBcZGVmaW5lZHVtbXl3b3JkXG9yZGYKKyAgXGRlZmluZWR1bW15d29yZFxvcmRtCisgICUKKyAgJSBBbHRob3VnaCB0aGVzZSBpbnRlcm5hbCBjb21tYW5kcyBzaG91bGRuJ3Qgc2hvdyB1cCwgc29tZXRpbWVzIHRoZXkgZG8uCisgIFxkZWZpbmVkdW1teXdvcmRcYmYKKyAgXGRlZmluZWR1bW15d29yZFxndHIKKyAgXGRlZmluZWR1bW15d29yZFxoYXQKKyAgXGRlZmluZWR1bW15d29yZFxsZXNzCisgIFxkZWZpbmVkdW1teXdvcmRcc2YKKyAgXGRlZmluZWR1bW15d29yZFxzbAorICBcZGVmaW5lZHVtbXl3b3JkXHRjbG9zZQorICBcZGVmaW5lZHVtbXl3b3JkXHR0CisgICUKKyAgXGRlZmluZWR1bW15d29yZFxMYVRlWAorICBcZGVmaW5lZHVtbXl3b3JkXFRlWAorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcZGVmaW5lZHVtbXl3b3JkXGJ1bGxldAorICBcZGVmaW5lZHVtbXl3b3JkXGNvbW1hCisgIFxkZWZpbmVkdW1teXdvcmRcY29weXJpZ2h0CisgIFxkZWZpbmVkdW1teXdvcmRccmVnaXN0ZXJlZHN5bWJvbAorICBcZGVmaW5lZHVtbXl3b3JkXGRvdHMKKyAgXGRlZmluZWR1bW15d29yZFxlbmRkb3RzCisgIFxkZWZpbmVkdW1teXdvcmRcZXF1aXYKKyAgXGRlZmluZWR1bW15d29yZFxlcnJvcgorICBcZGVmaW5lZHVtbXl3b3JkXGV1cm8KKyAgXGRlZmluZWR1bW15d29yZFxleHBhbnNpb24KKyAgXGRlZmluZWR1bW15d29yZFxtaW51cworICBcZGVmaW5lZHVtbXl3b3JkXHBvdW5kcworICBcZGVmaW5lZHVtbXl3b3JkXHBvaW50CisgIFxkZWZpbmVkdW1teXdvcmRccHJpbnQKKyAgXGRlZmluZWR1bW15d29yZFxyZXN1bHQKKyAgJQorICAlIFdlIHdhbnQgdG8gZGlzYWJsZSBhbGwgbWFjcm9zIHNvIHRoYXQgdGhleSBhcmUgbm90IGV4cGFuZGVkIGJ5IFx3cml0ZS4KKyAgXG1hY3JvbGlzdAorICAlCisgIFxub3JtYWx0dXJub2ZmYWN0aXZlCisgICUKKyAgJSBIYW5kbGUgc29tZSBjYXNlcyBvZiBAdmFsdWUgLS0gd2hlcmUgaXQgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgJSAobm9uLWZ1bGx5LWV4cGFuZGFibGUpIGNvbW1hbmRzLgorICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorfQorCislIFxjb21tb25kdW1taWVzbm9mb250czogY29tbW9uIHRvIFxjb21tb25kdW1taWVzIGFuZCBcaW5kZXhub2ZvbnRzLgorJQorJSBCZXR0ZXIgaGF2ZSB0aGlzIHdpdGhvdXQgYWN0aXZlIGNoYXJzLgoreworICBcY2F0Y29kZWBcfj1cb3RoZXIKKyAgXGdkZWZcY29tbW9uZHVtbWllc25vZm9udHN7JQorICAgICUgQ29udHJvbCBsZXR0ZXJzIGFuZCBhY2NlbnRzLgorICAgIFxkZWZpbmVkdW1teWxldHRlclwhJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwiJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwnJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwqJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFwsJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwuJQorICAgIFxkZWZpbmVkdW1teWxldHRlclwvJQorICAgIFxkZWZpbmVkdW1teWxldHRlclw6JQorICAgIFxkZWZpbmVkdW1teWFjY2VudFw9JQorICAgIFxkZWZpbmVkdW1teWxldHRlclw/JQorICAgIFxkZWZpbmVkdW1teWFjY2VudFxeJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFxgJQorICAgIFxkZWZpbmVkdW1teWFjY2VudFx+JQorICAgIFxkZWZpbmVkdW1teXdvcmRcdQorICAgIFxkZWZpbmVkdW1teXdvcmRcdgorICAgIFxkZWZpbmVkdW1teXdvcmRcSAorICAgIFxkZWZpbmVkdW1teXdvcmRcZG90YWNjZW50CisgICAgXGRlZmluZWR1bW15d29yZFxyaW5nYWNjZW50CisgICAgXGRlZmluZWR1bW15d29yZFx0aWVhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHViYXJhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVkb3RhY2NlbnQKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGRvdGxlc3MKKyAgICAlCisgICAgJSBUZXhpbmZvIGZvbnQgY29tbWFuZHMuCisgICAgXGRlZmluZWR1bW15d29yZFxiCisgICAgXGRlZmluZWR1bW15d29yZFxpCisgICAgXGRlZmluZWR1bW15d29yZFxyCisgICAgXGRlZmluZWR1bW15d29yZFxzYworICAgIFxkZWZpbmVkdW1teXdvcmRcdAorICAgICUKKyAgICAlIENvbW1hbmRzIHRoYXQgdGFrZSBhcmd1bWVudHMuCisgICAgXGRlZmluZWR1bW15d29yZFxhY3JvbnltCisgICAgXGRlZmluZWR1bW15d29yZFxjaXRlCisgICAgXGRlZmluZWR1bW15d29yZFxjb2RlCisgICAgXGRlZmluZWR1bW15d29yZFxjb21tYW5kCisgICAgXGRlZmluZWR1bW15d29yZFxkZm4KKyAgICBcZGVmaW5lZHVtbXl3b3JkXGVtcGgKKyAgICBcZGVmaW5lZHVtbXl3b3JkXGVudgorICAgIFxkZWZpbmVkdW1teXdvcmRcZmlsZQorICAgIFxkZWZpbmVkdW1teXdvcmRca2JkCisgICAgXGRlZmluZWR1bW15d29yZFxrZXkKKyAgICBcZGVmaW5lZHVtbXl3b3JkXG1hdGgKKyAgICBcZGVmaW5lZHVtbXl3b3JkXG9wdGlvbgorICAgIFxkZWZpbmVkdW1teXdvcmRcc2FtcAorICAgIFxkZWZpbmVkdW1teXdvcmRcc3Ryb25nCisgICAgXGRlZmluZWR1bW15d29yZFx0aWUKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVyZWYKKyAgICBcZGVmaW5lZHVtbXl3b3JkXHVybAorICAgIFxkZWZpbmVkdW1teXdvcmRcdmFyCisgICAgXGRlZmluZWR1bW15d29yZFx2ZXJiCisgICAgXGRlZmluZWR1bW15d29yZFx3CisgIH0KK30KKworJSBcaW5kZXhub2ZvbnRzIGlzIHVzZWQgd2hlbiBvdXRwdXR0aW5nIHRoZSBzdHJpbmdzIHRvIHNvcnQgdGhlIGluZGV4CislIGJ5LCBhbmQgd2hlbiBjb25zdHJ1Y3RpbmcgY29udHJvbCBzZXF1ZW5jZSBuYW1lcy4gIEl0IGVsaW1pbmF0ZXMgYWxsCislIGNvbnRyb2wgc2VxdWVuY2VzIGFuZCBqdXN0IHdyaXRlcyB3aGF0ZXZlciB0aGUgYmVzdCBBU0NJSSBzb3J0IHN0cmluZworJSB3b3VsZCBiZSBmb3IgYSBnaXZlbiBjb21tYW5kICh1c3VhbGx5IGl0cyBhcmd1bWVudCkuCislCitcZGVmXGluZGV4bm9mb250c3slCisgICUgQWNjZW50IGNvbW1hbmRzIHNob3VsZCBiZWNvbWUgQGFzaXMuCisgIFxkZWZcZGVmaW5lZHVtbXlhY2NlbnQjIzF7XGxldCMjMVxhc2lzfSUKKyAgJSBXZSBjYW4ganVzdCBpZ25vcmUgb3RoZXIgY29udHJvbCBsZXR0ZXJzLgorICBcZGVmXGRlZmluZWR1bW15bGV0dGVyIyMxe1xsZXQjIzFcZW1wdHl9JQorICAlIEhvcGVmdWxseSwgYWxsIGNvbnRyb2wgd29yZHMgY2FuIGJlY29tZSBAYXNpcy4KKyAgXGxldFxkZWZpbmVkdW1teXdvcmRcZGVmaW5lZHVtbXlhY2NlbnQKKyAgJQorICBcY29tbW9uZHVtbWllc25vZm9udHMKKyAgJQorICAlIERvbid0IG5vLW9wIFx0dCwgc2luY2UgaXQgaXNuJ3QgYSB1c2VyLWxldmVsIGNvbW1hbmQKKyAgJSBhbmQgaXMgdXNlZCBpbiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGFjdGl2ZSBjaGFycyBsaWtlIDwsID4sIHwsIGV0Yy4KKyAgJSBMaWtld2lzZSB3aXRoIHRoZSBvdGhlciBwbGFpbiB0ZXggZm9udCBjb21tYW5kcy4KKyAgJVxsZXRcdHQ9XGFzaXMKKyAgJQorICBcZGVmXCB7IH0lCisgIFxkZWZcQHtAfSUKKyAgJSBob3cgdG8gaGFuZGxlIGJyYWNlcz8KKyAgXGRlZlxfe1xub3JtYWx1bmRlcnNjb3JlfSUKKyAgJQorICAlIE5vbi1FbmdsaXNoIGxldHRlcnMuCisgIFxkZWZcQUF7QUF9JQorICBcZGVmXEFFe0FFfSUKKyAgXGRlZlxMe0x9JQorICBcZGVmXE9Fe09FfSUKKyAgXGRlZlxPe099JQorICBcZGVmXGFhe2FhfSUKKyAgXGRlZlxhZXthZX0lCisgIFxkZWZcbHtsfSUKKyAgXGRlZlxvZXtvZX0lCisgIFxkZWZcb3tvfSUKKyAgXGRlZlxzc3tzc30lCisgIFxkZWZcZXhjbGFtZG93bnshfSUKKyAgXGRlZlxxdWVzdGlvbmRvd257P30lCisgIFxkZWZcb3JkZnthfSUKKyAgXGRlZlxvcmRte299JQorICAlCisgIFxkZWZcTGFUZVh7TGFUZVh9JQorICBcZGVmXFRlWHtUZVh9JQorICAlCisgICUgQXNzb3J0ZWQgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICAlIChUaGUgZm9sbG93aW5nIHt9IHdpbGwgZW5kIHVwIGluIHRoZSBzb3J0IHN0cmluZywgYnV0IHRoYXQncyBvay4pCisgIFxkZWZcYnVsbGV0e2J1bGxldH0lCisgIFxkZWZcY29tbWF7LH0lCisgIFxkZWZcY29weXJpZ2h0e2NvcHlyaWdodH0lCisgIFxkZWZccmVnaXN0ZXJlZHN5bWJvbHtSfSUKKyAgXGRlZlxkb3Rzey4uLn0lCisgIFxkZWZcZW5kZG90c3suLi59JQorICBcZGVmXGVxdWl2ez09fSUKKyAgXGRlZlxlcnJvcntlcnJvcn0lCisgIFxkZWZcZXVyb3tldXJvfSUKKyAgXGRlZlxleHBhbnNpb257PT0+fSUKKyAgXGRlZlxtaW51c3stfSUKKyAgXGRlZlxwb3VuZHN7cG91bmRzfSUKKyAgXGRlZlxwb2ludHsufSUKKyAgXGRlZlxwcmludHstfH0lCisgIFxkZWZccmVzdWx0ez0+fSUKKyAgJQorICAlIFdlIG5lZWQgdG8gZ2V0IHJpZCBvZiBhbGwgbWFjcm9zLCBsZWF2aW5nIG9ubHkgdGhlIGFyZ3VtZW50cyAoaWYgcHJlc2VudCkuCisgICUgT2YgY291cnNlIHRoaXMgaXMgbm90IG5lYXJseSBjb3JyZWN0LCBidXQgaXQgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvIGZvciBub3cuCisgICUgbWFrZWluZm8gZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiB0aGUgYXJndW1lbnQgdG8gQGRlZmZuLCB3aGljaCBlbmRzIHVwCisgICUgd3JpdGluZyBhbiBpbmRleCBlbnRyeSwgYW5kIHRleGluZGV4IGlzbid0IHByZXBhcmVkIGZvciBhbiBpbmRleCBzb3J0IGVudHJ5CisgICUgdGhhdCBzdGFydHMgd2l0aCBcLgorICAlIAorICAlIFNpbmNlIG1hY3JvIGludm9jYXRpb25zIGFyZSBmb2xsb3dlZCBieSBicmFjZXMsIHdlIGNhbiBqdXN0IHJlZGVmaW5lIHRoZW0KKyAgJSB0byB0YWtlIGEgc2luZ2xlIFRlWCBhcmd1bWVudC4gIFRoZSBjYXNlIG9mIGEgbWFjcm8gaW52b2NhdGlvbiB0aGF0CisgICUgZ29lcyB0byBlbmQtb2YtbGluZSBpcyBub3QgaGFuZGxlZC4KKyAgJSAKKyAgXG1hY3JvbGlzdAorfQorCitcbGV0XGluZGV4YmFja3NsYXNoPTAgICVvdmVycmlkZGVuIGR1cmluZyBccHJpbnRpbmRleC4KK1xsZXRcU0VUbWFyZ2luaW5kZXg9XHJlbGF4ICUgcHV0IGluZGV4IGVudHJpZXMgaW4gbWFyZ2luICh1bmRvY3VtZW50ZWQpPworCislIE1vc3QgaW5kZXggZW50cmllcyBnbyB0aHJvdWdoIGhlcmUsIGJ1dCBcZG9zdWJpbmQgaXMgdGhlIGdlbmVyYWwgY2FzZS4KKyUgIzEgaXMgdGhlIGluZGV4IG5hbWUsICMyIGlzIHRoZSBlbnRyeSB0ZXh0LgorXGRlZlxkb2luZCMxIzJ7XGRvc3ViaW5keyMxfXsjMn17fX0KKworJSBXb3JraG9yc2UgZm9yIGFsbCBcZm9vaW5kZXhlcy4KKyUgIzEgaXMgbmFtZSBvZiBpbmRleCwgIzIgaXMgc3R1ZmYgdG8gcHV0IHRoZXJlLCAjMyBpcyBzdWJlbnRyeSAtLQorJSBlbXB0eSBpZiBjYWxsZWQgZnJvbSBcZG9pbmQsIGFzIHdlIHVzdWFsbHkgYXJlICh0aGUgbWFpbiBleGNlcHRpb24KKyUgaXMgd2l0aCBtb3N0IGRlZnVucywgd2hpY2ggY2FsbCB1cyBkaXJlY3RseSkuCislCitcZGVmXGRvc3ViaW5kIzEjMiMzeyUKKyAgXGlmbGlua3MKKyAgeyUKKyAgICAlIFN0b3JlIHRoZSBtYWluIGluZGV4IGVudHJ5IHRleHQgKGluY2x1ZGluZyB0aGUgdGhpcmQgYXJnKS4KKyAgICBcdG9rczAgPSB7IzJ9JQorICAgICUgSWYgdGhpcmQgYXJnIGlzIHByZXNlbnQsIHByZWNlZGUgaXQgd2l0aCBhIHNwYWNlLgorICAgIFxkZWZcdGhpcmRhcmd7IzN9JQorICAgIFxpZnhcdGhpcmRhcmdcZW1wdHkgXGVsc2UKKyAgICAgIFx0b2tzMCA9IFxleHBhbmRhZnRlcntcdGhlXHRva3MwIFxzcGFjZSAjM30lCisgICAgXGZpCisgICAgJQorICAgIFxlZGVmXHdyaXRldG97XGNzbmFtZSMxaW5kZmlsZVxlbmRjc25hbWV9JQorICAgICUKKyAgICBcaWZ2bW9kZQorICAgICAgXGRvc3ViaW5kc2FuaXRpemUKKyAgICBcZWxzZQorICAgICAgXGRvc3ViaW5kd3JpdGUKKyAgICBcZmkKKyAgfSUKKyAgXGZpCit9CisKKyUgV3JpdGUgdGhlIGVudHJ5IGluIFx0b2tzMCB0byB0aGUgaW5kZXggZmlsZToKKyUKK1xkZWZcZG9zdWJpbmR3cml0ZXslCisgICUgUHV0IHRoZSBpbmRleCBlbnRyeSBpbiB0aGUgbWFyZ2luIGlmIGRlc2lyZWQuCisgIFxpZnhcU0VUbWFyZ2luaW5kZXhccmVsYXhcZWxzZQorICAgIFxpbnNlcnRcbWFyZ2lue1xoYm94e1x2cnVsZSBoZWlnaHQ4cHQgZGVwdGgzcHQgd2lkdGgwcHQgXHRoZVx0b2tzMH19JQorICBcZmkKKyAgJQorICAlIFJlbWVtYmVyLCB3ZSBhcmUgd2l0aGluIGEgZ3JvdXAuCisgIFxpbmRleGR1bW1pZXMgJSBNdXN0IGRvIHRoaXMgaGVyZSwgc2luY2UgXGJmLCBldGMgZXhwYW5kIGF0IHRoaXMgc3RhZ2UKKyAgXGRlZlxiYWNrc2xhc2hjdXJmb250e1xpbmRleGJhY2tzbGFzaH0lIFxpbmRleGJhY2tzbGFzaCBpc24ndCBkZWZpbmVkIG5vdworICAgICAgJSBzbyBpdCB3aWxsIGJlIG91dHB1dCBhcyBpczsgYW5kIGl0IHdpbGwgcHJpbnQgYXMgYmFja3NsYXNoLgorICAlCisgICUgUHJvY2VzcyB0aGUgaW5kZXggZW50cnkgd2l0aCBhbGwgZm9udCBjb21tYW5kcyB0dXJuZWQgb2ZmLCB0bworICAlIGdldCB0aGUgc3RyaW5nIHRvIHNvcnQgYnkuCisgIHtcaW5kZXhub2ZvbnRzCisgICBcZWRlZlx0ZW1we1x0aGVcdG9rczB9JSBuZWVkIGZ1bGwgZXhwYW5zaW9uCisgICBceGRlZlxpbmRleHNvcnR0bXB7XHRlbXB9JQorICB9JQorICAlCisgICUgU2V0IHVwIHRoZSBjb21wbGV0ZSBpbmRleCBlbnRyeSwgd2l0aCBib3RoIHRoZSBzb3J0IGtleSBhbmQKKyAgJSB0aGUgb3JpZ2luYWwgdGV4dCwgaW5jbHVkaW5nIGFueSBmb250IGNvbW1hbmRzLiAgV2Ugd3JpdGUKKyAgJSB0aHJlZSBhcmd1bWVudHMgdG8gXGVudHJ5IHRvIHRoZSAuPz8gZmlsZSAoZm91ciBpbiB0aGUKKyAgJSBzdWJlbnRyeSBjYXNlKSwgdGV4aW5kZXggcmVkdWNlcyB0byB0d28gd2hlbiB3cml0aW5nIHRoZSAuPz9zCisgICUgc29ydGVkIHJlc3VsdC4KKyAgXGVkZWZcdGVtcHslCisgICAgXHdyaXRlXHdyaXRldG97JQorICAgICAgXHN0cmluZ1xlbnRyeXtcaW5kZXhzb3J0dG1wfXtcbm9leHBhbmRcZm9saW99e1x0aGVcdG9rczB9fSUKKyAgfSUKKyAgXHRlbXAKK30KKworJSBUYWtlIGNhcmUgb2YgdW53YW50ZWQgcGFnZSBicmVha3M6CislCislIElmIGEgc2tpcCBpcyB0aGUgbGFzdCB0aGluZyBvbiB0aGUgbGlzdCBub3csIHByZXNlcnZlIGl0CislIGJ5IGJhY2tpbmcgdXAgYnkgXGxhc3Rza2lwLCBkb2luZyB0aGUgXHdyaXRlLCB0aGVuIGluc2VydGluZworJSB0aGUgc2tpcCBhZ2Fpbi4gIE90aGVyd2lzZSwgdGhlIHdoYXRzaXQgZ2VuZXJhdGVkIGJ5IHRoZQorJSBcd3JpdGUgd2lsbCBtYWtlIFxsYXN0c2tpcCB6ZXJvLiAgVGhlIHJlc3VsdCBpcyB0aGF0IHNlcXVlbmNlcworJSBsaWtlIHRoaXM6CislIEBlbmQgZGVmdW4KKyUgQHRpbmRleCB3aGF0ZXZlcgorJSBAZGVmdW4gLi4uCislIHdpbGwgaGF2ZSBleHRyYSBzcGFjZSBpbnNlcnRlZCwgYmVjYXVzZSB0aGUgXG1lZGJyZWFrIGluIHRoZQorJSBzdGFydCBvZiB0aGUgQGRlZnVuIHdvbid0IHNlZSB0aGUgc2tpcCBpbnNlcnRlZCBieSB0aGUgQGVuZCBvZgorJSB0aGUgcHJldmlvdXMgZGVmdW4uCislCislIEJ1dCBkb24ndCBkbyBhbnkgb2YgdGhpcyBpZiB3ZSdyZSBub3QgaW4gdmVydGljYWwgbW9kZS4gIFdlCislIGRvbid0IHdhbnQgdG8gZG8gYSBcdnNraXAgYW5kIHByZW1hdHVyZWx5IGVuZCBhIHBhcmFncmFwaC4KKyUKKyUgQXZvaWQgcGFnZSBicmVha3MgZHVlIHRvIHRoZXNlIGV4dHJhIHNraXBzLCB0b28uCislCislIEJ1dCB3YWl0LCB0aGVyZSBpcyBhIGNhdGNoIHRoZXJlOgorJSBXZSdsbCBoYXZlIHRvIGNoZWNrIHdoZXRoZXIgXGxhc3Rza2lwIGlzIHplcm8gc2tpcC4gIFxpZmRpbSBpcyBub3QKKyUgc3VmZmljaWVudCBmb3IgdGhpcyBwdXJwb3NlLCBhcyBpdCBpZ25vcmVzIHN0cmV0Y2ggYW5kIHNocmluayBwYXJ0cworJSBvZiB0aGUgc2tpcC4gIFRoZSBvbmx5IHdheSBzZWVtcyB0byBiZSB0byBjaGVjayB0aGUgdGV4dHVhbAorJSByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2tpcC4KKyUKKyUgVGhlIGZvbGxvd2luZyBpcyBhbG1vc3QgbGlrZSBcZGVmXHplcm9za2lwbWFjcm97MC4wcHR9IGV4Y2VwdCB0aGF0CislIHRoZSBgYHAnJyBhbmQgYGB0JycgY2hhcmFjdGVycyBoYXZlIGNhdGNvZGUgXG90aGVyLCBub3QgMTEgKGxldHRlcikuCislCitcZWRlZlx6ZXJvc2tpcG1hY3Jve1xleHBhbmRhZnRlclx0aGVcY3NuYW1lIHpAc2tpcFxlbmRjc25hbWV9CislCislIC4uLiwgcmVhZHksIEdPOgorJQorXGRlZlxkb3N1YmluZHNhbml0aXpleyUKKyAgJSBcbGFzdHNraXAgYW5kIFxsYXN0cGVuYWx0eSBjYW5ub3QgYm90aCBiZSBub256ZXJvIHNpbXVsdGFuZW91c2x5LgorICBcc2tpcDAgPSBcbGFzdHNraXAKKyAgXGVkZWZcbGFzdHNraXBtYWNyb3tcdGhlXGxhc3Rza2lwfSUKKyAgXGNvdW50MjU1ID0gXGxhc3RwZW5hbHR5CisgICUKKyAgJSBJZiBcbGFzdHNraXAgaXMgbm9uemVybywgdGhhdCBtZWFucyB0aGUgbGFzdCBpdGVtIHdhcyBhCisgICUgc2tpcC4gIEFuZCBzaW5jZSBhIHNraXAgaXMgZGlzY2FyZGFibGUsIHRoYXQgbWVhbnMgdGhpcworICAlIC1cc2tpcDAgZ2x1ZSB3ZSdyZSBpbnNlcnRpbmcgaXMgcHJlY2VkZWQgYnkgYQorICAlIG5vbi1kaXNjYXJkYWJsZSBpdGVtLCB0aGVyZWZvcmUgaXQgaXMgbm90IGEgcG90ZW50aWFsCisgICUgYnJlYWtwb2ludCwgdGhlcmVmb3JlIG5vIFxub2JyZWFrIG5lZWRlZC4KKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgXGVsc2UKKyAgICBcdnNraXAtXHNraXAwCisgIFxmaQorICAlCisgIFxkb3N1YmluZHdyaXRlCisgICUKKyAgXGlmeFxsYXN0c2tpcG1hY3JvXHplcm9za2lwbWFjcm8KKyAgICAlIElmIFxsYXN0c2tpcCB3YXMgemVybywgcGVyaGFwcyB0aGUgbGFzdCBpdGVtIHdhcyBhIHBlbmFsdHksIGFuZAorICAgICUgcGVyaGFwcyBpdCB3YXMgPj0xMDAwMCwgZS5nLiwgYSBcbm9icmVhay4gIEluIHRoYXQgY2FzZSwgd2Ugd2FudAorICAgICUgdG8gcmUtaW5zZXJ0IHRoZSBzYW1lIHBlbmFsdHkgKHZhbHVlcyA+MTAwMDAgYXJlIHVzZWQgZm9yIHZhcmlvdXMKKyAgICAlIHNpZ25hbHMpOyBzaW5jZSB3ZSBqdXN0IGluc2VydGVkIGEgbm9uLWRpc2NhcmRhYmxlIGl0ZW0sIGFueQorICAgICUgZm9sbG93aW5nIGdsdWUgKHN1Y2ggYXMgYSBccGFyc2tpcCkgd291bGQgYmUgYSBicmVha3BvaW50LiAgRm9yIGV4YW1wbGU6CisgICAgJSAKKyAgICAlICAgQGRlZmZuIGRlZmZuLXdoYXRldmVyCisgICAgJSAgIEB2aW5kZXggaW5kZXgtd2hhdGV2ZXIKKyAgICAlICAgRGVzY3JpcHRpb24uCisgICAgJSB3b3VsZCBhbGxvdyBhIGJyZWFrIGJldHdlZW4gdGhlIGluZGV4LXdoYXRldmVyIHdoYXRzaXQKKyAgICAlIGFuZCB0aGUgIkRlc2NyaXB0aW9uLiIgcGFyYWdyYXBoLgorICAgIFxpZm51bVxjb3VudDI1NT45OTk5IFxwZW5hbHR5XGNvdW50MjU1IFxmaQorICBcZWxzZQorICAgICUgT24gdGhlIG90aGVyIGhhbmQsIGlmIHdlIGhhZCBhIG5vbnplcm8gXGxhc3Rza2lwLAorICAgICUgdGhpcyBtYWtlLXVwIGdsdWUgd291bGQgYmUgcHJlY2VkZWQgYnkgYSBub24tZGlzY2FyZGFibGUgaXRlbQorICAgICUgKHRoZSB3aGF0c2l0IGZyb20gdGhlIFx3cml0ZSksIHNvIHdlIG11c3QgaW5zZXJ0IGEgXG5vYnJlYWsuCisgICAgXG5vYnJlYWtcdnNraXBcc2tpcDAKKyAgXGZpCit9CisKKyUgVGhlIGluZGV4IGVudHJ5IHdyaXR0ZW4gaW4gdGhlIGZpbGUgYWN0dWFsbHkgbG9va3MgbGlrZQorJSAgXGVudHJ5IHtzb3J0c3RyaW5nfXtwYWdlfXt0b3BpY30KKyUgb3IKKyUgIFxlbnRyeSB7c29ydHN0cmluZ317cGFnZX17dG9waWN9e3N1YnRvcGljfQorJSBUaGUgdGV4aW5kZXggcHJvZ3JhbSByZWFkcyBpbiB0aGVzZSBmaWxlcyBhbmQgd3JpdGVzIGZpbGVzCislIGNvbnRhaW5pbmcgdGhlc2Uga2luZHMgb2YgbGluZXM6CislICBcaW5pdGlhbCB7Y30KKyUgICAgIGJlZm9yZSB0aGUgZmlyc3QgdG9waWMgd2hvc2UgaW5pdGlhbCBpcyBjCislICBcZW50cnkge3RvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBhIHRvcGljIHRoYXQgaXMgdXNlZCB3aXRob3V0IHN1YnRvcGljcworJSAgXHByaW1hcnkge3RvcGljfQorJSAgICAgZm9yIHRoZSBiZWdpbm5pbmcgb2YgYSB0b3BpYyB0aGF0IGlzIHVzZWQgd2l0aCBzdWJ0b3BpY3MKKyUgIFxzZWNvbmRhcnkge3N1YnRvcGljfXtwYWdlbGlzdH0KKyUgICAgIGZvciBlYWNoIHN1YnRvcGljLgorCislIERlZmluZSB0aGUgdXNlci1hY2Nlc3NpYmxlIGluZGV4aW5nIGNvbW1hbmRzCislIEBmaW5kZXgsIEB2aW5kZXgsIEBraW5kZXgsIEBjaW5kZXguCisKK1xkZWZcZmluZGV4IHtcZm5pbmRleH0KK1xkZWZca2luZGV4IHtca3lpbmRleH0KK1xkZWZcY2luZGV4IHtcY3BpbmRleH0KK1xkZWZcdmluZGV4IHtcdnJpbmRleH0KK1xkZWZcdGluZGV4IHtcdHBpbmRleH0KK1xkZWZccGluZGV4IHtccGdpbmRleH0KKworXGRlZlxjaW5kZXhzdWIge1xiZWdpbmdyb3VwXG9iZXlsaW5lc1xjaW5kZXhzdWJ9Cit7XG9iZXlsaW5lcyAlCitcZ2RlZlxjaW5kZXhzdWIgIiMxIiAjMl5eTXtcZW5kZ3JvdXAgJQorXGRvc3ViaW5ke2NwfXsjMn17IzF9fX0KKworJSBEZWZpbmUgdGhlIG1hY3JvcyB1c2VkIGluIGZvcm1hdHRpbmcgb3V0cHV0IG9mIHRoZSBzb3J0ZWQgaW5kZXggbWF0ZXJpYWwuCisKKyUgQHByaW50aW5kZXggY2F1c2VzIGEgcGFydGljdWxhciBpbmRleCAodGhlID8/cyBmaWxlKSB0byBnZXQgcHJpbnRlZC4KKyUgSXQgZG9lcyBub3QgcHJpbnQgYW55IGNoYXB0ZXIgaGVhZGluZyAodXN1YWxseSBhbiBAdW5udW1iZXJlZCkuCislCitccGFyc2VhcmdkZWZccHJpbnRpbmRleHtcYmVnaW5ncm91cAorICBcZG9icmVhayBcY2hhcGhlYWRpbmdza2lwezEwMDAwfSUKKyAgJQorICBcc21hbGxmb250cyBccm0KKyAgXHRvbGVyYW5jZSA9IDk1MDAKKyAgXGV2ZXJ5cGFyID0ge30lIGRvbid0IHdhbnQgdGhlIFxrZXJuXC1wYXJpbmRlbnQgZnJvbSBpbmRlbnRhdGlvbiBzdXBwcmVzc2lvbi4KKyAgJQorICAlIFNlZSBpZiB0aGUgaW5kZXggZmlsZSBleGlzdHMgYW5kIGlzIG5vbmVtcHR5LgorICAlIENoYW5nZSBjYXRjb2RlIG9mIEAgaGVyZSBzbyB0aGF0IGlmIHRoZSBpbmRleCBmaWxlIGNvbnRhaW5zCisgICUgXGluaXRpYWwge0B9CisgICUgYXMgaXRzIGZpcnN0IGxpbmUsIFRlWCBkb2Vzbid0IGNvbXBsYWluIGFib3V0IG1pc21hdGNoZWQgYnJhY2VzCisgICUgKGJlY2F1c2UgaXQgdGhpbmtzIEB9IGlzIGEgY29udHJvbCBzZXF1ZW5jZSkuCisgIFxjYXRjb2RlYFxAID0gMTEKKyAgXG9wZW5pbiAxIFxqb2JuYW1lLiMxcworICBcaWZlb2YgMQorICAgICUgXGVuZGRvdWJsZWNvbHVtbnMgZ2V0cyBjb25mdXNlZCBpZiB0aGVyZSBpcyBubyB0ZXh0IGluIHRoZSBpbmRleCwKKyAgICAlIGFuZCBpdCBsb3NlcyB0aGUgY2hhcHRlciB0aXRsZSBhbmQgdGhlIGF1eCBmaWxlIGVudHJpZXMgZm9yIHRoZQorICAgICUgaW5kZXguICBUaGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIHByb2JsZW0gaXMgdG8gbWFrZSBzdXJlCisgICAgJSB0aGVyZSBpcyBzb21lIHRleHQuCisgICAgXHB1dHdvcmRJbmRleE5vbmV4aXN0ZW50CisgIFxlbHNlCisgICAgJQorICAgICUgSWYgdGhlIGluZGV4IGZpbGUgZXhpc3RzIGJ1dCBpcyBlbXB0eSwgdGhlbiBcb3BlbmluIGxlYXZlcyBcaWZlb2YKKyAgICAlIGZhbHNlLiAgV2UgaGF2ZSB0byBtYWtlIFRlWCB0cnkgdG8gcmVhZCBzb21ldGhpbmcgZnJvbSB0aGUgZmlsZSwgc28KKyAgICAlIGl0IGNhbiBkaXNjb3ZlciBpZiB0aGVyZSBpcyBhbnl0aGluZyBpbiBpdC4KKyAgICBccmVhZCAxIHRvIFx0ZW1wCisgICAgXGlmZW9mIDEKKyAgICAgIFxwdXR3b3JkSW5kZXhJc0VtcHR5CisgICAgXGVsc2UKKyAgICAgICUgSW5kZXggZmlsZXMgYXJlIGFsbW9zdCBUZXhpbmZvIHNvdXJjZSwgYnV0IHdlIHVzZSBcIGFzIHRoZSBlc2NhcGUKKyAgICAgICUgY2hhcmFjdGVyLiAgSXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBALCBidXQgdGhhdCdzIHRvbyBiaWcgYSBjaGFuZ2UKKyAgICAgICUgdG8gbWFrZSByaWdodCBub3cuCisgICAgICBcZGVmXGluZGV4YmFja3NsYXNoe1xiYWNrc2xhc2hjdXJmb250fSUKKyAgICAgIFxjYXRjb2RlYFxcID0gMAorICAgICAgXGVzY2FwZWNoYXIgPSBgXFwKKyAgICAgIFxiZWdpbmRvdWJsZWNvbHVtbnMKKyAgICAgIFxpbnB1dCBcam9ibmFtZS4jMXMKKyAgICAgIFxlbmRkb3VibGVjb2x1bW5zCisgICAgXGZpCisgIFxmaQorICBcY2xvc2VpbiAxCitcZW5kZ3JvdXB9CisKKyUgVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGJ5IHRoZSBzb3J0ZWQgaW5kZXggZmlsZSBpdHNlbGYuCislIENoYW5nZSB0aGVtIHRvIGNvbnRyb2wgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIGluZGV4LgorCitcZGVmXGluaXRpYWwjMXt7JQorICAlIFNvbWUgbWlub3IgZm9udCBjaGFuZ2VzIGZvciB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzLgorICBcbGV0XHRlbnR0PVxzZWN0dCBcbGV0XHR0PVxzZWN0dCBcbGV0XHNmPVxzZWN0dAorICAlCisgICUgUmVtb3ZlIGFueSBnbHVlIHdlIG1heSBoYXZlLCB3ZSdsbCBiZSBpbnNlcnRpbmcgb3VyIG93bi4KKyAgXHJlbW92ZWxhc3Rza2lwCisgICUKKyAgJSBXZSBsaWtlIGJyZWFrcyBiZWZvcmUgdGhlIGluZGV4IGluaXRpYWxzLCBzbyBpbnNlcnQgYSBib251cy4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIDBwdCBwbHVzIDNcYmFzZWxpbmVza2lwCisgIFxwZW5hbHR5IDAKKyAgXHZza2lwIDBwdCBwbHVzIC0zXGJhc2VsaW5lc2tpcAorICAlCisgICUgVHlwZXNldCB0aGUgaW5pdGlhbC4gIE1ha2luZyB0aGlzIGFkZCB1cCB0byBhIHdob2xlIG51bWJlciBvZgorICAlIGJhc2VsaW5lc2tpcHMgaW5jcmVhc2VzIHRoZSBjaGFuY2Ugb2YgdGhlIGRvdHMgbGluaW5nIHVwIGZyb20gY29sdW1uCisgICUgdG8gY29sdW1uLiAgSXQgc3RpbGwgd29uJ3Qgb2Z0ZW4gYmUgcGVyZmVjdCwgYmVjYXVzZSBvZiB0aGUgc3RyZXRjaAorICAlIHdlIG5lZWQgYmVmb3JlIGVhY2ggZW50cnksIGJ1dCBpdCdzIGJldHRlci4KKyAgJQorICAlIE5vIHNocmluayBiZWNhdXNlIGl0IGNvbmZ1c2VzIFxiYWxhbmNlY29sdW1ucy4KKyAgXHZza2lwIDEuNjdcYmFzZWxpbmVza2lwIHBsdXMgLjVcYmFzZWxpbmVza2lwCisgIFxsZWZ0bGluZXtcc2VjYmYgIzF9JQorICAlIERvIG91ciBiZXN0IG5vdCB0byBicmVhayBhZnRlciB0aGUgaW5pdGlhbC4KKyAgXG5vYnJlYWsKKyAgXHZza2lwIC4zM1xiYXNlbGluZXNraXAgcGx1cyAuMVxiYXNlbGluZXNraXAKK319CisKKyUgXGVudHJ5IHR5cGVzZXRzIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgdGhlIHRleHQgKCMxKSwgZG90IGxlYWRlcnMsIGFuZAorJSB0aGVuIHBhZ2UgbnVtYmVyICgjMikgZmx1c2hlZCB0byB0aGUgcmlnaHQgbWFyZ2luLiAgSXQgaXMgdXNlZCBmb3IgaW5kZXgKKyUgYW5kIHRhYmxlIG9mIGNvbnRlbnRzIGVudHJpZXMuICBUaGUgcGFyYWdyYXBoIGlzIGluZGVudGVkIGJ5IFxsZWZ0c2tpcC4KKyUKKyUgQSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gd291bGQgc3RhcnQgbGlrZSB0aGlzOgorJQlcZGVmXGVudHJ5IzEjMnsuLi4KKyUgQnV0IHRoaXMgZnJvemVzIHRoZSBjYXRjb2RlcyBpbiB0aGUgYXJndW1lbnQsIGFuZCBjYW4gY2F1c2UgcHJvYmxlbXMgdG8KKyUgQGNvZGUsIHdoaWNoIHNldHMgLSBhY3RpdmUuICBUaGlzIHByb2JsZW0gd2FzIGZpeGVkIGJ5IGEga2x1ZGdlLS0tCislIGBgLScnIHdhcyBhY3RpdmUgdGhyb3VnaG91dCB3aG9sZSBpbmRleCwgYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IHJpZ2h0LgorJQorJSBUaGUgcmlnaHQgc29sdXRpb24gaXMgdG8gcHJldmVudCBcZW50cnkgZnJvbSBzd2FsbG93aW5nIHRoZSB3aG9sZSB0ZXh0LgorJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0ta2FzYWwsIDIxbm92MDMKK1xkZWZcZW50cnl7JQorICBcYmVnaW5ncm91cAorICAgICUKKyAgICAlIFN0YXJ0IGEgbmV3IHBhcmFncmFwaCBpZiBuZWNlc3NhcnksIHNvIG91ciBhc3NpZ25tZW50cyBiZWxvdyBjYW4ndAorICAgICUgYWZmZWN0IHByZXZpb3VzIHRleHQuCisgICAgXHBhcgorICAgICUKKyAgICAlIERvIG5vdCBmaWxsIG91dCB0aGUgbGFzdCBsaW5lIHdpdGggd2hpdGUgc3BhY2UuCisgICAgXHBhcmZpbGxza2lwID0gMGluCisgICAgJQorICAgICUgTm8gZXh0cmEgc3BhY2UgYWJvdmUgdGhpcyBwYXJhZ3JhcGguCisgICAgXHBhcnNraXAgPSAwaW4KKyAgICAlCisgICAgJSBEbyBub3QgcHJlZmVyIGEgc2VwYXJhdGUgbGluZSBlbmRpbmcgd2l0aCBhIGh5cGhlbiB0byBmZXdlciBsaW5lcy4KKyAgICBcZmluYWxoeXBoZW5kZW1lcml0cyA9IDAKKyAgICAlCisgICAgJSBcaGFuZ2luZGVudCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gdGhlIGVudHJ5IHRleHQgYW5kIHBhZ2UgbnVtYmVyCisgICAgJSBkb24ndCBib3RoIGZpdCBvbiBvbmUgbGluZS4gIEluIHRoYXQgY2FzZSwgYm9iIHN1Z2dlc3RzIHN0YXJ0aW5nIHRoZQorICAgICUgZG90cyBwcmV0dHkgZmFyIG92ZXIgb24gdGhlIGxpbmUuICBVbmZvcnR1bmF0ZWx5LCBhIGxhcmdlCisgICAgJSBpbmRlbnRhdGlvbiBsb29rcyB3cm9uZyB3aGVuIHRoZSBlbnRyeSB0ZXh0IGl0c2VsZiBpcyBicm9rZW4gYWNyb3NzCisgICAgJSBsaW5lcy4gIFNvIHdlIHVzZSBhIHNtYWxsIGluZGVudGF0aW9uIGFuZCBwdXQgdXAgd2l0aCBsb25nIGxlYWRlcnMuCisgICAgJQorICAgICUgXGhhbmdhZnRlciBpcyByZXNldCB0byAxICh3aGljaCBpcyB0aGUgdmFsdWUgd2Ugd2FudCkgYXQgdGhlIHN0YXJ0CisgICAgJSBvZiBlYWNoIHBhcmFncmFwaCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGF0LgorICAgIFxoYW5naW5kZW50ID0gMmVtCisgICAgJQorICAgICUgV2hlbiB0aGUgZW50cnkgdGV4dCBuZWVkcyB0byBiZSBicm9rZW4sIGp1c3QgZmlsbCBvdXQgdGhlIGZpcnN0IGxpbmUKKyAgICAlIHdpdGggYmxhbmsgc3BhY2UuCisgICAgXHJpZ2h0c2tpcCA9IDBwdCBwbHVzMWZpbAorICAgICUKKyAgICAlIEEgYml0IG9mIHN0cmV0Y2ggYmVmb3JlIGVhY2ggZW50cnkgZm9yIHRoZSBiZW5lZml0IG9mIGJhbGFuY2luZworICAgICUgY29sdW1ucy4KKyAgICBcdnNraXAgMHB0IHBsdXMxcHQKKyAgICAlCisgICAgJSBTd2FsbG93IHRoZSBsZWZ0IGJyYWNlIG9mIHRoZSB0ZXh0IChmaXJzdCBwYXJhbWV0ZXIpOgorICAgIFxhZnRlcmFzc2lnbm1lbnRcZG9lbnRyeQorICAgIFxsZXRcdGVtcCA9Cit9CitcZGVmXGRvZW50cnl7JQorICAgIFxiZ3JvdXAgJSBJbnN0ZWFkIG9mIHRoZSBzd2FsbG93ZWQgYnJhY2UuCisgICAgICBcbm9pbmRlbnQKKyAgICAgIFxhZnRlcmdyb3VwXGZpbmlzaGVudHJ5CisgICAgICAlIEFuZCBub3cgY29tZXMgdGhlIHRleHQgb2YgdGhlIGVudHJ5LgorfQorXGRlZlxmaW5pc2hlbnRyeSMxeyUKKyAgICAlICMxIGlzIHRoZSBwYWdlIG51bWJlci4KKyAgICAlCisgICAgJSBUaGUgZm9sbG93aW5nIGlzIGtsdWRnZWQgdG8gbm90IG91dHB1dCBhIGxpbmUgb2YgZG90cyBpbiB0aGUgaW5kZXggaWYKKyAgICAlIHRoZXJlIGFyZSBubyBwYWdlIG51bWJlcnMuICBUaGUgbmV4dCBwZXJzb24gd2hvIGJyZWFrcyB0aGlzIHdpbGwgYmUKKyAgICAlIGN1cnNlZCBieSBhIFVuaXggZGFlbW9uLgorICAgIFxkZWZcdGVtcGF7e1xybSB9fSUKKyAgICBcZGVmXHRlbXBieyMxfSUKKyAgICBcZWRlZlx0ZW1wY3tcdGVtcGF9JQorICAgIFxlZGVmXHRlbXBke1x0ZW1wYn0lCisgICAgXGlmeFx0ZW1wY1x0ZW1wZAorICAgICAgXCAlCisgICAgXGVsc2UKKyAgICAgICUKKyAgICAgICUgSWYgd2UgbXVzdCwgcHV0IHRoZSBwYWdlIG51bWJlciBvbiBhIGxpbmUgb2YgaXRzIG93biwgYW5kIGZpbGwgb3V0CisgICAgICAlIHRoaXMgbGluZSB3aXRoIGJsYW5rIHNwYWNlLiAgKFRoZSBcaGZpbCBpcyBvdmVyd2hlbG1lZCB3aXRoIHRoZQorICAgICAgJSBmaWxsIGxlYWRlcnMgZ2x1ZSBpbiBcaW5kZXhkb3RmaWxsIGlmIHRoZSBwYWdlIG51bWJlciBkb2VzIGZpdC4pCisgICAgICBcaGZpbFxwZW5hbHR5NTAKKyAgICAgIFxudWxsXG5vYnJlYWtcaW5kZXhkb3RmaWxsICUgSGF2ZSBsZWFkZXJzIGJlZm9yZSB0aGUgcGFnZSBudW1iZXIuCisgICAgICAlCisgICAgICAlIFRoZSBgXCAnIGhlcmUgaXMgcmVtb3ZlZCBieSB0aGUgaW1wbGljaXQgXHVuc2tpcCB0aGF0IFRlWCBkb2VzIGFzCisgICAgICAlIHBhcnQgb2YgKHRoZSBwcmltaXRpdmUpIFxwYXIuICBXaXRob3V0IGl0LCBhIHNwdXJpb3VzIHVuZGVyZnVsbAorICAgICAgJSBcaGJveCBlbnN1ZXMuCisgICAgICBcaWZwZGYKKwlccGRmZ2V0dG9rcyMxLiUKKwlcIFx0aGVcdG9rc0EKKyAgICAgIFxlbHNlCisJXCAjMSUKKyAgICAgIFxmaQorICAgIFxmaQorICAgIFxwYXIKKyAgXGVuZGdyb3VwCit9CisKKyUgTGlrZSBcZG90ZmlsbCBleGNlcHQgdGFrZXMgYXQgbGVhc3QgMSBlbS4KK1xkZWZcaW5kZXhkb3RmaWxse1xjbGVhZGVycworICBcaGJveHskXG1hdGhzdXJyb3VuZD0wcHQgXG1rZXJuMS41bXUgJHtcaXQgLn0kIFxta2VybjEuNW11JH1caHNraXAgMWVtIHBsdXMgMWZpbGx9CisKK1xkZWZccHJpbWFyeSAjMXtcbGluZXsjMVxoZmlsfX0KKworXG5ld3NraXBcc2Vjb25kYXJ5aW5kZW50IFxzZWNvbmRhcnlpbmRlbnQ9MC41Y20KK1xkZWZcc2Vjb25kYXJ5IzEjMnt7JQorICBccGFyZmlsbHNraXA9MGluCisgIFxwYXJza2lwPTBpbgorICBcaGFuZ2luZGVudD0xaW4KKyAgXGhhbmdhZnRlcj0xCisgIFxub2luZGVudFxoc2tpcFxzZWNvbmRhcnlpbmRlbnRcaGJveHsjMX1caW5kZXhkb3RmaWxsCisgIFxpZnBkZgorICAgIFxwZGZnZXR0b2tzIzIuXCBcdGhlXHRva3NBICUgVGhlIHBhZ2UgbnVtYmVyIGVuZHMgdGhlIHBhcmFncmFwaC4KKyAgXGVsc2UKKyAgICAjMgorICBcZmkKKyAgXHBhcgorfX0KKworJSBEZWZpbmUgdHdvLWNvbHVtbiBtb2RlLCB3aGljaCB3ZSB1c2UgdG8gdHlwZXNldCBpbmRleGVzLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2ssIHBhZ2UgNDE2LCB3aGljaCBpcyB0byBzYXksCislIHRoZSBtYW5tYWMudGV4IGZvcm1hdCB1c2VkIHRvIHByaW50IHRoZSBUZVhib29rIGl0c2VsZi4KK1xjYXRjb2RlYFxAPTExCisKK1xuZXdib3hccGFydGlhbHBhZ2UKK1xuZXdkaW1lblxkb3VibGVjb2x1bW5oc2l6ZQorCitcZGVmXGJlZ2luZG91YmxlY29sdW1uc3tcYmVnaW5ncm91cCAlIGVuZGVkIGJ5IFxlbmRkb3VibGVjb2x1bW5zCisgICUgR3JhYiBhbnkgc2luZ2xlLWNvbHVtbiBtYXRlcmlhbCBhYm92ZSB1cy4KKyAgXG91dHB1dCA9IHslCisgICAgJQorICAgICUgSGVyZSBpcyBhIHBvc3NpYmlsaXR5IG5vdCBmb3Jlc2VlbiBpbiBtYW5tYWM6IGlmIHdlIGFjY3VtdWxhdGUgYQorICAgICUgd2hvbGUgbG90IG9mIG1hdGVyaWFsLCB3ZSBtaWdodCBlbmQgdXAgY2FsbGluZyB0aGlzIFxvdXRwdXQKKyAgICAlIHJvdXRpbmUgdHdpY2UgaW4gYSByb3cgKHNlZSB0aGUgZG91YmxlY29sLWxvc2UgdGVzdCwgd2hpY2ggaXMKKyAgICAlIGVzc2VudGlhbGx5IGEgY291cGxlIG9mIGluZGV4ZXMgd2l0aCBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2ZmKS4gIEluCisgICAgJSB0aGF0IGNhc2Ugd2UganVzdCBzaGlwIG91dCB3aGF0IGlzIGluIFxwYXJ0aWFscGFnZSB3aXRoIHRoZSBub3JtYWwKKyAgICAlIG91dHB1dCByb3V0aW5lLiAgR2VuZXJhbGx5LCBccGFydGlhbHBhZ2Ugd2lsbCBiZSBlbXB0eSB3aGVuIHRoaXMKKyAgICAlIHJ1bnMgYW5kIHRoaXMgd2lsbCBiZSBhIG5vLW9wLiAgU2VlIHRoZSBpbmRleHNwcmVhZC50ZXggdGVzdCBjYXNlLgorICAgIFxpZnZvaWRccGFydGlhbHBhZ2UgXGVsc2UKKyAgICAgIFxvbmVwYWdlb3V0e1xwYWdlY29udGVudHNccGFydGlhbHBhZ2V9JQorICAgIFxmaQorICAgICUKKyAgICBcZ2xvYmFsXHNldGJveFxwYXJ0aWFscGFnZSA9IFx2Ym94eyUKKyAgICAgICUgVW52Ym94IHRoZSBtYWluIG91dHB1dCBwYWdlLgorICAgICAgXHVudmJveFxQQUdFCisgICAgICBca2Vybi1cdG9wc2tpcCBca2VyblxiYXNlbGluZXNraXAKKyAgICB9JQorICB9JQorICBcZWplY3QgJSBydW4gdGhhdCBvdXRwdXQgcm91dGluZSB0byBzZXQgXHBhcnRpYWxwYWdlCisgICUKKyAgJSBVc2UgdGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIHN1YnNlcXVlbnQgcGFnZXMuCisgIFxvdXRwdXQgPSB7XGRvdWJsZWNvbHVtbm91dH0lCisgICUKKyAgJSBDaGFuZ2UgdGhlIHBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLiAgV2UgY291bGQgZG8gdGhpcyBvbmNlIG91dHNpZGUgdGhpcworICAlIHJvdXRpbmUsIGluIGVhY2ggb2YgQHNtYWxsYm9vaywgQGFmb3VycGFwZXIsIGFuZCB0aGUgZGVmYXVsdCA4LjV4MTEKKyAgJSBmb3JtYXQsIGJ1dCB0aGVuIHdlIHJlcGVhdCB0aGUgc2FtZSBjb21wdXRhdGlvbi4gIFJlcGVhdGluZyBhIGNvdXBsZQorICAlIG9mIGFzc2lnbm1lbnRzIG9uY2UgcGVyIGluZGV4IGlzIGNsZWFybHkgbWVhbmluZ2xlc3MgZm9yIHRoZQorICAlIGV4ZWN1dGlvbiB0aW1lLCBzbyB3ZSBtYXkgYXMgd2VsbCBkbyBpdCBpbiBvbmUgcGxhY2UuCisgICUKKyAgJSBGaXJzdCB3ZSBoYWx2ZSB0aGUgbGluZSBsZW5ndGgsIGxlc3MgYSBsaXR0bGUgZm9yIHRoZSBndXR0ZXIgYmV0d2VlbgorICAlIHRoZSBjb2x1bW5zLiAgV2UgY29tcHV0ZSB0aGUgZ3V0dGVyIGJhc2VkIG9uIHRoZSBsaW5lIGxlbmd0aCwgc28gaXQKKyAgJSBjaGFuZ2VzIGF1dG9tYXRpY2FsbHkgd2l0aCB0aGUgcGFwZXIgZm9ybWF0LiAgVGhlIG1hZ2ljIGNvbnN0YW50CisgICUgYmVsb3cgaXMgY2hvc2VuIHNvIHRoYXQgdGhlIGd1dHRlciBoYXMgdGhlIHNhbWUgdmFsdWUgKHdlbGwsICstPDFwdCkKKyAgJSBhcyBpdCBkaWQgd2hlbiB3ZSBoYXJkLWNvZGVkIGl0LgorICAlCisgICUgV2UgcHV0IHRoZSByZXN1bHQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlciwgXGRvdWJsZWNvbHVtaHNpemUsIHNvIHdlCisgICUgY2FuIHJlc3RvcmUgaXQgaW4gXHBhZ2Vzb2ZhciwgYWZ0ZXIgXGhzaXplIGl0c2VsZiBoYXMgKHBvdGVudGlhbGx5KQorICAlIGJlZW4gY2xvYmJlcmVkLgorICAlCisgIFxkb3VibGVjb2x1bW5oc2l6ZSA9IFxoc2l6ZQorICAgIFxhZHZhbmNlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IC0uMDQxNTRcaHNpemUKKyAgICBcZGl2aWRlXGRvdWJsZWNvbHVtbmhzaXplIGJ5IDIKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgICUKKyAgJSBEb3VibGUgdGhlIFx2c2l6ZSBhcyB3ZWxsLiAgKFdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSByZWdpc3RlciBoZXJlLAorICAlIHNpbmNlIG5vYm9keSBjbG9iYmVycyBcdnNpemUuKQorICBcdnNpemUgPSAyXHZzaXplCit9CisKKyUgVGhlIGRvdWJsZS1jb2x1bW4gb3V0cHV0IHJvdXRpbmUgZm9yIGFsbCBkb3VibGUtY29sdW1uIHBhZ2VzIGV4Y2VwdAorJSB0aGUgbGFzdC4KKyUKK1xkZWZcZG91YmxlY29sdW1ub3V0eyUKKyAgXHNwbGl0dG9wc2tpcD1cdG9wc2tpcCBcc3BsaXRtYXhkZXB0aD1cbWF4ZGVwdGgKKyAgJSBHZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb2x1bW5zIC0tIHRoZSBub3JtYWwKKyAgJSAodW5kb3VibGVkKSBwYWdlIGhlaWdodCBtaW51cyBhbnkgbWF0ZXJpYWwgbGVmdCBvdmVyIGZyb20gdGhlCisgICUgcHJldmlvdXMgcGFnZS4KKyAgXGRpbWVuQCA9IFx2c2l6ZQorICBcZGl2aWRlXGRpbWVuQCBieSAyCisgIFxhZHZhbmNlXGRpbWVuQCBieSAtXGh0XHBhcnRpYWxwYWdlCisgICUKKyAgJSBib3gwIHdpbGwgYmUgdGhlIGxlZnQtaGFuZCBjb2x1bW4sIGJveDIgdGhlIHJpZ2h0LgorICBcc2V0Ym94MD1cdnNwbGl0MjU1IHRvXGRpbWVuQCBcc2V0Ym94Mj1cdnNwbGl0MjU1IHRvXGRpbWVuQAorICBcb25lcGFnZW91dFxwYWdlc29mYXIKKyAgXHVudmJveDI1NQorICBccGVuYWx0eVxvdXRwdXRwZW5hbHR5Cit9CislCislIFJlLW91dHB1dCB0aGUgY29udGVudHMgb2YgdGhlIG91dHB1dCBwYWdlIC0tIGFueSBwcmV2aW91cyBtYXRlcmlhbCwKKyUgZm9sbG93ZWQgYnkgdGhlIHR3byBib3hlcyB3ZSBqdXN0IHNwbGl0LCBpbiBib3gwIGFuZCBib3gyLgorXGRlZlxwYWdlc29mYXJ7JQorICBcdW52Ym94XHBhcnRpYWxwYWdlCisgICUKKyAgXGhzaXplID0gXGRvdWJsZWNvbHVtbmhzaXplCisgIFx3ZDA9XGhzaXplIFx3ZDI9XGhzaXplCisgIFxoYm94IHRvXHBhZ2V3aWR0aHtcYm94MFxoZmlsXGJveDJ9JQorfQorJQorJSBBbGwgZG9uZSB3aXRoIGRvdWJsZSBjb2x1bW5zLgorXGRlZlxlbmRkb3VibGVjb2x1bW5zeyUKKyAgXG91dHB1dCA9IHslCisgICAgJSBTcGxpdCB0aGUgbGFzdCBvZiB0aGUgZG91YmxlLWNvbHVtbiBtYXRlcmlhbC4gIExlYXZlIGl0IG9uIHRoZQorICAgICUgY3VycmVudCBwYWdlLCBubyBhdXRvbWF0aWMgcGFnZSBicmVhay4KKyAgICBcYmFsYW5jZWNvbHVtbnMKKyAgICAlCisgICAgJSBJZiB3ZSBlbmQgdXAgc3BsaXR0aW5nIHRvbyBtdWNoIG1hdGVyaWFsIGZvciB0aGUgY3VycmVudCBwYWdlLAorICAgICUgdGhvdWdoLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgcGFnZSBicmVhayByaWdodCBhZnRlciB0aGlzIFxvdXRwdXQKKyAgICAlIGludm9jYXRpb24gZW5kcy4gIEhhdmluZyBjYWxsZWQgXGJhbGFuY2Vjb2x1bW5zIG9uY2UsIHdlIGRvIG5vdAorICAgICUgd2FudCB0byBjYWxsIGl0IGFnYWluLiAgVGhlcmVmb3JlLCByZXNldCBcb3V0cHV0IHRvIGl0cyBub3JtYWwKKyAgICAlIGRlZmluaXRpb24gcmlnaHQgYXdheS4gIChXZSBob3BlIFxiYWxhbmNlY29sdW1ucyB3aWxsIG5ldmVyIGJlCisgICAgJSBjYWxsZWQgb24gdG8gYmFsYW5jZSB0b28gbXVjaCBtYXRlcmlhbCwgYnV0IGlmIGl0IGlzLCB0aGlzIG1ha2VzCisgICAgJSB0aGUgb3V0cHV0IHNvbWV3aGF0IG1vcmUgcGFsYXRhYmxlLikKKyAgICBcZ2xvYmFsXG91dHB1dCA9IHtcb25lcGFnZW91dHtccGFnZWNvbnRlbnRzXFBBR0V9fSUKKyAgfSUKKyAgXGVqZWN0CisgIFxlbmRncm91cCAlIHN0YXJ0ZWQgaW4gXGJlZ2luZG91YmxlY29sdW1ucworICAlCisgICUgXHBhZ2Vnb2FsIHdhcyBzZXQgdG8gdGhlIGRvdWJsZWQgXHZzaXplIGFib3ZlLCBzaW5jZSB3ZSByZXN0YXJ0ZWQKKyAgJSB0aGUgY3VycmVudCBwYWdlLiAgV2UncmUgbm93IGJhY2sgdG8gbm9ybWFsIHNpbmdsZS1jb2x1bW4KKyAgJSB0eXBlc2V0dGluZywgc28gcmVzZXQgXHBhZ2Vnb2FsIHRvIHRoZSBub3JtYWwgXHZzaXplIChhZnRlciB0aGUKKyAgJSBcZW5kZ3JvdXAgd2hlcmUgXHZzaXplIGdvdCByZXN0b3JlZCkuCisgIFxwYWdlZ29hbCA9IFx2c2l6ZQorfQorJQorJSBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgZG91YmxlIGNvbHVtbiBtYXRlcmlhbC4KK1xkZWZcYmFsYW5jZWNvbHVtbnN7JQorICBcc2V0Ym94MCA9IFx2Ym94e1x1bnZib3gyNTV9JSBsaWtlIFxib3gyNTUgYnV0IG1vcmUgZWZmaWNpZW50LCBzZWUgcC4xMjAuCisgIFxkaW1lbkAgPSBcaHQwCisgIFxhZHZhbmNlXGRpbWVuQCBieSBcdG9wc2tpcAorICBcYWR2YW5jZVxkaW1lbkAgYnktXGJhc2VsaW5lc2tpcAorICBcZGl2aWRlXGRpbWVuQCBieSAyICUgdGFyZ2V0IHRvIHNwbGl0IHRvCisgICVkZWJ1Z1xtZXNzYWdle2ZpbmFsIDItY29sdW1uIG1hdGVyaWFsIGhlaWdodD1cdGhlXGh0MCwgdGFyZ2V0PVx0aGVcZGltZW5ALn0lCisgIFxzcGxpdHRvcHNraXAgPSBcdG9wc2tpcAorICAlIExvb3AgdW50aWwgd2UgZ2V0IGEgZGVjZW50IGJyZWFrcG9pbnQuCisgIHslCisgICAgXHZiYWRuZXNzID0gMTAwMDAKKyAgICBcbG9vcAorICAgICAgXGdsb2JhbFxzZXRib3gzID0gXGNvcHkwCisgICAgICBcZ2xvYmFsXHNldGJveDEgPSBcdnNwbGl0MyB0byBcZGltZW5ACisgICAgXGlmZGltXGh0Mz5cZGltZW5ACisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZGltZW5AIGJ5IDFwdAorICAgIFxyZXBlYXQKKyAgfSUKKyAgJWRlYnVnXG1lc3NhZ2V7c3BsaXQgdG8gXHRoZVxkaW1lbkAsIGNvbHVtbiBoZWlnaHRzOiBcdGhlXGh0MSwgXHRoZVxodDMufSUKKyAgXHNldGJveDA9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gxfSUKKyAgXHNldGJveDI9XHZib3ggdG9cZGltZW5Ae1x1bnZib3gzfSUKKyAgJQorICBccGFnZXNvZmFyCit9CitcY2F0Y29kZWBcQCA9IFxvdGhlcgorCisKK1xtZXNzYWdle3NlY3Rpb25pbmcsfQorJSBDaGFwdGVycywgc2VjdGlvbnMsIGV0Yy4KKworJSBcdW5udW1iZXJlZG5vIGlzIGFuIG94eW1vcm9uLCBvZiBjb3Vyc2UuICBCdXQgd2UgY291bnQgdGhlIHVubnVtYmVyZWQKKyUgc2VjdGlvbnMgc28gdGhhdCB3ZSBjYW4gcmVmZXIgdG8gdGhlbSB1bmFtYmlndW91c2x5IGluIHRoZSBwZGYKKyUgb3V0bGluZXMgYnkgdGhlaXIgInNlY3Rpb24gbnVtYmVyIi4gIFdlIGF2b2lkIGNvbGxpc2lvbnMgd2l0aCBjaGFwdGVyCislIG51bWJlcnMgYnkgc3RhcnRpbmcgdGhlbSBhdCAxMDAwMC4gIChJZiBhIGRvY3VtZW50IGV2ZXIgaGFzIDEwMDAwCislIGNoYXB0ZXJzLCB3ZSdyZSBpbiB0cm91YmxlIGFueXdheSwgSSdtIHN1cmUuKQorXG5ld2NvdW50XHVubnVtYmVyZWRubyBcdW5udW1iZXJlZG5vID0gMTAwMDAKK1xuZXdjb3VudFxjaGFwbm8KK1xuZXdjb3VudFxzZWNubyAgICAgICAgXHNlY25vPTAKK1xuZXdjb3VudFxzdWJzZWNubyAgICAgXHN1YnNlY25vPTAKK1xuZXdjb3VudFxzdWJzdWJzZWNubyAgXHN1YnN1YnNlY25vPTAKKworJSBUaGlzIGNvdW50ZXIgaXMgZnVubnkgc2luY2UgaXQgY291bnRzIHRocm91Z2ggY2hhcmNvZGVzIG9mIGxldHRlcnMgQSwgQiwgLi4uCitcbmV3Y291bnRcYXBwZW5kaXhubyAgXGFwcGVuZGl4bm8gPSBgXEAKKyUKKyUgXGRlZlxhcHBlbmRpeGxldHRlcntcY2hhclx0aGVcYXBwZW5kaXhub30KKyUgV2UgZG8gdGhlIGZvbGxvd2luZyB1Z2x5IGNvbmRpdGlvbmFsIGluc3RlYWQgb2YgdGhlIGFib3ZlIHNpbXBsZQorJSBjb25zdHJ1Y3QgZm9yIHRoZSBzYWtlIG9mIHBkZnRleCwgd2hpY2ggbmVlZHMgdGhlIGFjdHVhbAorJSBsZXR0ZXIgaW4gdGhlIGV4cGFuc2lvbiwgbm90IGp1c3QgdHlwZXNldC4KKyUKK1xkZWZcYXBwZW5kaXhsZXR0ZXJ7JQorICBcaWZudW1cYXBwZW5kaXhubz1gQSBBJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBCIEIlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEMgQyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRCBEJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBFIEUlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEYgRiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gRyBHJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBIIEglCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEkgSSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gSiBKJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBLIEslCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YEwgTCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gTSBNJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBOIE4lCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YE8gTyUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUCBQJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBRIFElCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFIgUiUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gUyBTJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBUIFQlCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFUgVSUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gViBWJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBXIFclCisgIFxlbHNlXGlmbnVtXGFwcGVuZGl4bm89YFggWCUKKyAgXGVsc2VcaWZudW1cYXBwZW5kaXhubz1gWSBZJQorICBcZWxzZVxpZm51bVxhcHBlbmRpeG5vPWBaIFolCisgICUgVGhlIFx0aGUgaXMgbmVjZXNzYXJ5LCBkZXNwaXRlIGFwcGVhcmFuY2VzLCBiZWNhdXNlIFxhcHBlbmRpeGxldHRlciBpcworICAlIGV4cGFuZGVkIHdoaWxlIHdyaXRpbmcgdGhlIC50b2MgZmlsZS4gIFxjaGFyXGFwcGVuZGl4bm8gaXMgbm90CisgICUgZXhwYW5kYWJsZSwgdGh1cyBpdCBpcyB3cml0dGVuIGxpdGVyYWxseSwgdGh1cyBhbGwgYXBwZW5kaXhlcyBjb21lIG91dAorICAlIHdpdGggdGhlIHNhbWUgbGV0dGVyIChvciBAKSBpbiB0aGUgdG9jIHdpdGhvdXQgaXQuCisgIFxlbHNlXGNoYXJcdGhlXGFwcGVuZGl4bm8KKyAgXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpXGZpCisgIFxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaVxmaX0KKworJSBFYWNoIEBjaGFwdGVyIGRlZmluZXMgdGhpcyBhcyB0aGUgbmFtZSBvZiB0aGUgY2hhcHRlci4KKyUgcGFnZSBoZWFkaW5ncyBhbmQgZm9vdGluZ3MgY2FuIHVzZSBpdC4gIEBzZWN0aW9uIGRvZXMgbGlrZXdpc2UuCislIEhvd2V2ZXIsIHRoZXkgYXJlIG5vdCByZWxpYWJsZSwgYmVjYXVzZSB3ZSBkb24ndCB1c2UgbWFya3MuCitcZGVmXHRoaXNjaGFwdGVye30KK1xkZWZcdGhpc3NlY3Rpb257fQorCitcbmV3Y291bnRcYWJzc2VjbGV2ZWwgJSB1c2VkIHRvIGNhbGN1bGF0ZSBwcm9wZXIgaGVhZGluZyBsZXZlbAorXG5ld2NvdW50XHNlY2Jhc2Vcc2VjYmFzZT0wICUgQHJhaXNlc2VjdGlvbnMvQGxvd2Vyc2VjdGlvbnMgbW9kaWZ5IHRoaXMgY291bnQKKworJSBAcmFpc2VzZWN0aW9uczogdHJlYXQgQHNlY3Rpb24gYXMgY2hhcHRlciwgQHN1YnNlY3Rpb24gYXMgc2VjdGlvbiwgZXRjLgorXGRlZlxyYWlzZXNlY3Rpb25ze1xnbG9iYWxcYWR2YW5jZVxzZWNiYXNlIGJ5IC0xfQorXGxldFx1cD1ccmFpc2VzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIEBsb3dlcnNlY3Rpb25zOiB0cmVhdCBAY2hhcHRlciBhcyBzZWN0aW9uLCBAc2VjdGlvbiBhcyBzdWJzZWN0aW9uLCBldGMuCitcZGVmXGxvd2Vyc2VjdGlvbnN7XGdsb2JhbFxhZHZhbmNlXHNlY2Jhc2UgYnkgMX0KK1xsZXRcZG93bj1cbG93ZXJzZWN0aW9ucyAlIG9yaWdpbmFsIEJGb3ggbmFtZQorCislIHdlIG9ubHkgaGF2ZSBzdWJzdWIuCitcY2hhcmRlZlxtYXhzZWNsZXZlbCA9IDMKKyUKKyUgQSBudW1iZXJlZCBzZWN0aW9uIHdpdGhpbiBhbiB1bm51bWJlcmVkIGNoYW5nZXMgdG8gdW5udW1iZXJlZCB0b28uCislIFRvIGFjaGl2ZSB0aGlzLCByZW1lbWJlciB0aGUgImJpZ2dlc3QiIHVubnVtLiBzZWMuIHdlIGFyZSBjdXJyZW50bHkgaW46CitcY2hhcmRlZlx1bm1sZXZlbCA9IFxtYXhzZWNsZXZlbAorJQorJSBUcmFjZSB3aGV0aGVyIHRoZSBjdXJyZW50IGNoYXB0ZXIgaXMgYW4gYXBwZW5kaXggb3Igbm90OgorJSBcY2hhcGhlYWR0eXBlIGlzICJOIiBvciAiQSIsIHVubnVtYmVyZWQgY2hhcHRlcnMgYXJlIGlnbm9yZWQuCitcZGVmXGNoYXBoZWFkdHlwZXtOfQorCislIENob29zZSBhIGhlYWRpbmcgbWFjcm8KKyUgIzEgaXMgaGVhZGluZyB0eXBlCislICMyIGlzIGhlYWRpbmcgbGV2ZWwKKyUgIzMgaXMgdGV4dCBmb3IgaGVhZGluZworXGRlZlxnZW5oZWFkIzEjMiMzeyUKKyAgJSBDb21wdXRlIHRoZSBhYnMuIHNlYy4gbGV2ZWw6CisgIFxhYnNzZWNsZXZlbD0jMgorICBcYWR2YW5jZVxhYnNzZWNsZXZlbCBieSBcc2VjYmFzZQorICAlIE1ha2Ugc3VyZSBcYWJzc2VjbGV2ZWwgZG9lc24ndCBmYWxsIG91dHNpZGUgdGhlIHJhbmdlOgorICBcaWZudW0gXGFic3NlY2xldmVsIDwgMAorICAgIFxhYnNzZWNsZXZlbCA9IDAKKyAgXGVsc2UKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gMworICAgICAgXGFic3NlY2xldmVsID0gMworICAgIFxmaQorICBcZmkKKyAgJSBUaGUgaGVhZGluZyB0eXBlOgorICBcZGVmXGhlYWR0eXBleyMxfSUKKyAgXGlmIFxoZWFkdHlwZSBVJQorICAgIFxpZm51bSBcYWJzc2VjbGV2ZWwgPCBcdW5tbGV2ZWwKKyAgICAgIFxjaGFyZGVmXHVubWxldmVsID0gXGFic3NlY2xldmVsCisgICAgXGZpCisgIFxlbHNlCisgICAgJSBDaGVjayBmb3IgYXBwZW5kaXggc2VjdGlvbnM6CisgICAgXGlmbnVtIFxhYnNzZWNsZXZlbCA9IDAKKyAgICAgIFxlZGVmXGNoYXBoZWFkdHlwZXtcaGVhZHR5cGV9JQorICAgIFxlbHNlCisgICAgICBcaWYgXGhlYWR0eXBlIEFcaWYgXGNoYXBoZWFkdHlwZSBOJQorCVxlcnJtZXNzYWdle0BhcHBlbmRpeC4uLiB3aXRoaW4gYSBub24tYXBwZW5kaXggY2hhcHRlcn0lCisgICAgICBcZmlcZmkKKyAgICBcZmkKKyAgICAlIENoZWNrIGZvciBudW1iZXJlZCB3aXRoaW4gdW5udW1iZXJlZDoKKyAgICBcaWZudW0gXGFic3NlY2xldmVsID4gXHVubWxldmVsCisgICAgICBcZGVmXGhlYWR0eXBle1V9JQorICAgIFxlbHNlCisgICAgICBcY2hhcmRlZlx1bm1sZXZlbCA9IDMKKyAgICBcZmkKKyAgXGZpCisgICUgTm93IHByaW50IHRoZSBoZWFkaW5nOgorICBcaWYgXGhlYWR0eXBlIFUlCisgICAgXGlmY2FzZVxhYnNzZWNsZXZlbAorCVx1bm51bWJlcmVkenp6eyMzfSUKKyAgICBcb3IgXHVubnVtYmVyZWRzZWN6enp7IzN9JQorICAgIFxvciBcdW5udW1iZXJlZHN1YnNlY3p6ensjM30lCisgICAgXG9yIFx1bm51bWJlcmVkc3Vic3Vic2Vjenp6eyMzfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWYgXGhlYWR0eXBlIEElCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcYXBwZW5kaXh6enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHNlY3Rpb256enp7IzN9JQorICAgICAgXG9yIFxhcHBlbmRpeHN1YnNlY3p6ensjM30lCisgICAgICBcb3IgXGFwcGVuZGl4c3Vic3Vic2Vjenp6eyMzfSUKKyAgICAgIFxmaQorICAgIFxlbHNlCisgICAgICBcaWZjYXNlXGFic3NlY2xldmVsCisJICBcY2hhcHRlcnp6ensjM30lCisgICAgICBcb3IgXHNlY3p6ensjM30lCisgICAgICBcb3IgXG51bWJlcmVkc3Vic2Vjenp6eyMzfSUKKyAgICAgIFxvciBcbnVtYmVyZWRzdWJzdWJzZWN6enp7IzN9JQorICAgICAgXGZpCisgICAgXGZpCisgIFxmaQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudAorfQorCislIGFuIGludGVyZmFjZToKK1xkZWZcbnVtaGVhZHtcZ2VuaGVhZCBOfQorXGRlZlxhcHBoZWFke1xnZW5oZWFkIEF9CitcZGVmXHVubm1oZWFke1xnZW5oZWFkIFV9CisKKyUgQGNoYXB0ZXIsIEBhcHBlbmRpeCwgQHVubnVtYmVyZWQuICBJbmNyZW1lbnQgdG9wLWxldmVsIGNvdW50ZXIsIHJlc2V0CislIGFsbCBsb3dlci1sZXZlbCBzZWN0aW9uaW5nIGNvdW50ZXJzIHRvIHplcm8uCislCislIEFsc28gc2V0IFxjaGFwbGV2ZWxwcmVmaXgsIHdoaWNoIHdlIHByZXBlbmQgdG8gQGZsb2F0IHNlcXVlbmNlIG51bWJlcnMKKyUgKGUuZy4sIGZpZ3VyZXMpLCBxLnYuICBCeSBkZWZhdWx0IChiZWZvcmUgYW55IGNoYXB0ZXIpLCB0aGF0IGlzIGVtcHR5LgorXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyUKK1xvdXRlclxwYXJzZWFyZ2RlZlxjaGFwdGVye1xudW1oZWFkMHsjMX19ICUgbm9ybWFsbHkgbnVtaGVhZDAgY2FsbHMgY2hhcHRlcnp6egorXGRlZlxjaGFwdGVyenp6IzF7JQorICAlIHNlY3Rpb24gcmVzZXR0aW5nIGlzIFxnbG9iYWwgaW4gY2FzZSB0aGUgY2hhcHRlciBpcyBpbiBhIGdyb3VwLCBzdWNoCisgICUgYXMgYW4gQGluY2x1ZGUgZmlsZS4KKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcY2hhcG5vIGJ5IDEKKyAgJQorICAlIFVzZWQgZm9yIFxmbG9hdC4KKyAgXGdkZWZcY2hhcGxldmVscHJlZml4e1x0aGVcY2hhcG5vLn0lCisgIFxyZXNldGFsbGZsb2F0bm9zCisgICUKKyAgXG1lc3NhZ2V7XHB1dHdvcmRDaGFwdGVyXHNwYWNlIFx0aGVcY2hhcG5vfSUKKyAgJQorICAlIFdyaXRlIHRoZSBhY3R1YWwgaGVhZGluZy4KKyAgXGNoYXBtYWNyb3sjMX17WW51bWJlcmVkfXtcdGhlXGNoYXBub30lCisgICUKKyAgJSBTbyBAc2VjdGlvbiBhbmQgdGhlIGxpa2UgYXJlIG51bWJlcmVkIHVuZGVybmVhdGggdGhpcyBjaGFwdGVyLgorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCisgIFxnbG9iYWxcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXh7XGFwcGhlYWQweyMxfX0gJSBub3JtYWxseSBhcHBoZWFkMCBjYWxscyBhcHBlbmRpeHp6egorXGRlZlxhcHBlbmRpeHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcYXBwZW5kaXhubyBieSAxCisgIFxnZGVmXGNoYXBsZXZlbHByZWZpeHtcYXBwZW5kaXhsZXR0ZXIufSUKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICBcZGVmXGFwcGVuZGl4bnVte1xwdXR3b3JkQXBwZW5kaXhcc3BhY2UgXGFwcGVuZGl4bGV0dGVyfSUKKyAgXG1lc3NhZ2V7XGFwcGVuZGl4bnVtfSUKKyAgJQorICBcY2hhcG1hY3JveyMxfXtZYXBwZW5kaXh9e1xhcHBlbmRpeGxldHRlcn0lCisgICUKKyAgXGdsb2JhbFxsZXRcc2VjdGlvbiA9IFxhcHBlbmRpeHNlYworICBcZ2xvYmFsXGxldFxzdWJzZWN0aW9uID0gXGFwcGVuZGl4c3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcYXBwZW5kaXhzdWJzdWJzZWMKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWR7XHVubm1oZWFkMHsjMX19ICUgbm9ybWFsbHkgdW5ubWhlYWQwIGNhbGxzIHVubnVtYmVyZWR6enoKK1xkZWZcdW5udW1iZXJlZHp6eiMxeyUKKyAgXGdsb2JhbFxzZWNubz0wIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAKKyAgICBcZ2xvYmFsXGFkdmFuY2VcdW5udW1iZXJlZG5vIGJ5IDEKKyAgJQorICAlIFNpbmNlIGFuIHVubnVtYmVyZWQgaGFzIG5vIG51bWJlciwgbm8gcHJlZml4IGZvciBmaWd1cmVzLgorICBcZ2xvYmFsXGxldFxjaGFwbGV2ZWxwcmVmaXggPSBcZW1wdHkKKyAgXHJlc2V0YWxsZmxvYXRub3MKKyAgJQorICAlIFRoaXMgdXNlZCB0byBiZSBzaW1wbHkgXG1lc3NhZ2V7IzF9LCBidXQgVGVYIGZ1bGx5IGV4cGFuZHMgdGhlCisgICUgYXJndW1lbnQgdG8gXG1lc3NhZ2UuICBUaGVyZWZvcmUsIGlmICMxIGNvbnRhaW5lZCBALWNvbW1hbmRzLCBUZVgKKyAgJSBleHBhbmRlZCB0aGVtLiAgRm9yIGV4YW1wbGUsIGluIGBAdW5udW1iZXJlZCBUaGUgQGNpdGV7Qm9va30nLCBUZVgKKyAgJSBleHBhbmRlZCBAY2l0ZSAod2hpY2ggdHVybnMgb3V0IHRvIGNhdXNlIGVycm9ycyBiZWNhdXNlIFxjaXRlIGlzIG1lYW50CisgICUgdG8gYmUgZXhlY3V0ZWQsIG5vdCBleHBhbmRlZCkuCisgICUKKyAgJSBBbnl3YXksIHdlIGRvbid0IHdhbnQgdGhlIGZ1bGx5LWV4cGFuZGVkIGRlZmluaXRpb24gb2YgQGNpdGUgdG8gYXBwZWFyCisgICUgYXMgYSByZXN1bHQgb2YgdGhlIFxtZXNzYWdlLCB3ZSBqdXN0IHdhbnQgYEBjaXRlJyBpdHNlbGYuICBXZSB1c2UKKyAgJSBcdGhlPHRva3MgcmVnaXN0ZXI+IHRvIGFjaGlldmUgdGhpczogVGVYIGV4cGFuZHMgXHRoZTx0b2tzPiBvbmx5IG9uY2UsCisgICUgc2ltcGx5IHlpZWxkaW5nIHRoZSBjb250ZW50cyBvZiA8dG9rcyByZWdpc3Rlcj4uICAoV2UgYWxzbyBkbyB0aGlzIGZvcgorICAlIHRoZSB0b2MgZW50cmllcy4pCisgIFx0b2tzMCA9IHsjMX0lCisgIFxtZXNzYWdleyhcdGhlXHRva3MwKX0lCisgICUKKyAgXGNoYXBtYWNyb3sjMX17WW5vdGhpbmd9e1x0aGVcdW5udW1iZXJlZG5vfSUKKyAgJQorICBcZ2xvYmFsXGxldFxzZWN0aW9uID0gXHVubnVtYmVyZWRzZWMKKyAgXGdsb2JhbFxsZXRcc3Vic2VjdGlvbiA9IFx1bm51bWJlcmVkc3Vic2VjCisgIFxnbG9iYWxcbGV0XHN1YnN1YnNlY3Rpb24gPSBcdW5udW1iZXJlZHN1YnN1YnNlYworfQorCislIEBjZW50ZXJjaGFwIGlzIGxpa2UgQHVubnVtYmVyZWQsIGJ1dCB0aGUgaGVhZGluZyBpcyBjZW50ZXJlZC4KK1xvdXRlclxwYXJzZWFyZ2RlZlxjZW50ZXJjaGFweyUKKyAgJSBXZWxsLCB3ZSBjb3VsZCBkbyB0aGUgZm9sbG93aW5nIGluIGEgZ3JvdXAsIGJ1dCB0aGF0IHdvdWxkIGJyZWFrCisgICUgYW4gYXNzdW1wdGlvbiB0aGF0IFxjaGFwbWFjcm8gaXMgY2FsbGVkIGF0IHRoZSBvdXRlcm1vc3QgbGV2ZWwuCisgICUgVGh1cyB3ZSBhcmUgc2FmZXIgdGhpcyB3YXk6CQktLWthc2FsLCAyNGZlYjA0CisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXGNlbnRlcnBhcmFtZXRlcnMKKyAgXHVubm1oZWFkMHsjMX0lCisgIFxsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4Cit9CisKKyUgQHRvcCBpcyBsaWtlIEB1bm51bWJlcmVkLgorXGxldFx0b3BcdW5udW1iZXJlZAorCislIFNlY3Rpb25zLgorXG91dGVyXHBhcnNlYXJnZGVmXG51bWJlcmVkc2Vje1xudW1oZWFkMXsjMX19ICUgbm9ybWFsbHkgY2FsbHMgc2Vjenp6CitcZGVmXHNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzZWNubz0wIFxnbG9iYWxcc3Vic3Vic2Vjbm89MCAgXGdsb2JhbFxhZHZhbmNlXHNlY25vIGJ5IDEKKyAgXHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1ludW1iZXJlZH17XHRoZVxjaGFwbm8uXHRoZVxzZWNub30lCit9CisKK1xvdXRlclxwYXJzZWFyZ2RlZlxhcHBlbmRpeHNlY3Rpb257XGFwcGhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHNlY3Rpb256enoKK1xkZWZcYXBwZW5kaXhzZWN0aW9uenp6IzF7JQorICBcZ2xvYmFsXHN1YnNlY25vPTAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3NlY317WWFwcGVuZGl4fXtcYXBwZW5kaXhsZXR0ZXIuXHRoZVxzZWNub30lCit9CitcbGV0XGFwcGVuZGl4c2VjXGFwcGVuZGl4c2VjdGlvbgorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHNlY3tcdW5ubWhlYWQxeyMxfX0gJSBub3JtYWxseSBjYWxscyB1bm51bWJlcmVkc2Vjenp6CitcZGVmXHVubnVtYmVyZWRzZWN6enojMXslCisgIFxnbG9iYWxcc3Vic2Vjbm89MCBcZ2xvYmFsXHN1YnN1YnNlY25vPTAgIFxnbG9iYWxcYWR2YW5jZVxzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c2VjfXtZbm90aGluZ317XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNub30lCit9CisKKyUgU3Vic2VjdGlvbnMuCitcb3V0ZXJccGFyc2VhcmdkZWZcbnVtYmVyZWRzdWJzZWN7XG51bWhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBudW1iZXJlZHN1YnNlY3p6egorXGRlZlxudW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW51bWJlcmVkfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcYXBwZW5kaXhzdWJzZWN7XGFwcGhlYWQyeyMxfX0gJSBub3JtYWxseSBjYWxscyBhcHBlbmRpeHN1YnNlY3p6egorXGRlZlxhcHBlbmRpeHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WWFwcGVuZGl4fSUKKyAgICAgICAgICAgICAgICAge1xhcHBlbmRpeGxldHRlci5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm99JQorfQorCitcb3V0ZXJccGFyc2VhcmdkZWZcdW5udW1iZXJlZHN1YnNlY3tcdW5ubWhlYWQyeyMxfX0gJW5vcm1hbGx5IGNhbGxzIHVubnVtYmVyZWRzdWJzZWN6enoKK1xkZWZcdW5udW1iZXJlZHN1YnNlY3p6eiMxeyUKKyAgXGdsb2JhbFxzdWJzdWJzZWNubz0wICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnNlY317WW5vdGhpbmd9JQorICAgICAgICAgICAgICAgICB7XHRoZVx1bm51bWJlcmVkbm8uXHRoZVxzZWNuby5cdGhlXHN1YnNlY25vfSUKK30KKworJSBTdWJzdWJzZWN0aW9ucy4KK1xvdXRlclxwYXJzZWFyZ2RlZlxudW1iZXJlZHN1YnN1YnNlY3tcbnVtaGVhZDN7IzF9fSAlIG5vcm1hbGx5IG51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXG51bWJlcmVkc3Vic3Vic2Vjenp6IzF7JQorICBcZ2xvYmFsXGFkdmFuY2Vcc3Vic3Vic2Vjbm8gYnkgMQorICBcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW51bWJlcmVkfSUKKyAgICAgICAgICAgICAgICAge1x0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXGFwcGVuZGl4c3Vic3Vic2Vje1xhcHBoZWFkM3sjMX19ICUgbm9ybWFsbHkgYXBwZW5kaXhzdWJzdWJzZWN6enoKK1xkZWZcYXBwZW5kaXhzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZYXBwZW5kaXh9JQorICAgICAgICAgICAgICAgICB7XGFwcGVuZGl4bGV0dGVyLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vfSUKK30KKworXG91dGVyXHBhcnNlYXJnZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN7XHVubm1oZWFkM3sjMX19ICVub3JtYWxseSB1bm51bWJlcmVkc3Vic3Vic2Vjenp6CitcZGVmXHVubnVtYmVyZWRzdWJzdWJzZWN6enojMXslCisgIFxnbG9iYWxcYWR2YW5jZVxzdWJzdWJzZWNubyBieSAxCisgIFxzZWN0aW9uaGVhZGluZ3sjMX17c3Vic3Vic2VjfXtZbm90aGluZ30lCisgICAgICAgICAgICAgICAgIHtcdGhlXHVubnVtYmVyZWRuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8uXHRoZVxzdWJzdWJzZWNub30lCit9CisKKyUgVGhlc2UgbWFjcm9zIGNvbnRyb2wgd2hhdCB0aGUgc2VjdGlvbiBjb21tYW5kcyBkbywgYWNjb3JkaW5nCislIHRvIHdoYXQga2luZCBvZiBjaGFwdGVyIHdlIGFyZSBpbiAob3JkaW5hcnksIGFwcGVuZGl4LCBvciB1bm51bWJlcmVkKS4KKyUgRGVmaW5lIHRoZW0gYnkgZGVmYXVsdCBmb3IgYSBudW1iZXJlZCBjaGFwdGVyLgorXGxldFxzZWN0aW9uID0gXG51bWJlcmVkc2VjCitcbGV0XHN1YnNlY3Rpb24gPSBcbnVtYmVyZWRzdWJzZWMKK1xsZXRcc3Vic3Vic2VjdGlvbiA9IFxudW1iZXJlZHN1YnN1YnNlYworCislIERlZmluZSBAbWFqb3JoZWFkaW5nLCBAaGVhZGluZyBhbmQgQHN1YmhlYWRpbmcKKworJSBOT1RFIG9uIHVzZSBvZiBcdmJveCBmb3IgY2hhcHRlciBoZWFkaW5ncywgc2VjdGlvbiBoZWFkaW5ncywgYW5kIHN1Y2g6CislICAgICAgIDEpIFdlIHVzZSBcdmJveCByYXRoZXIgdGhhbiB0aGUgZWFybGllciBcbGluZSB0byBwZXJtaXQKKyUgICAgICAgICAgb3ZlcmxvbmcgaGVhZGluZ3MgdG8gZm9sZC4KKyUgICAgICAgMikgXGh5cGhlbnBlbmFsdHkgaXMgc2V0IHRvIDEwMDAwIGJlY2F1c2UgaHlwaGVuYXRpb24gaW4gYQorJSAgICAgICAgICBoZWFkaW5nIGlzIG9ibm94aW91czsgdGhpcyBmb3JiaWRzIGl0LgorJSAgICAgICAzKSBMaWtld2lzZSwgaGVhZGluZ3MgbG9vayBiZXN0IGlmIG5vIFxwYXJpbmRlbnQgaXMgdXNlZCwgYW5kCislICAgICAgICAgIGlmIGp1c3RpZmljYXRpb24gaXMgbm90IGF0dGVtcHRlZC4gIEhlbmNlIFxyYWdnZWRyaWdodC4KKworCitcZGVmXG1ham9yaGVhZGluZ3slCisgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCisgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egorfQorCitcZGVmXGNoYXBoZWFkaW5ne1xjaGFwYnJlYWsgXHBhcnNlYXJnXGNoYXBoZWFkaW5nenp6fQorXGRlZlxjaGFwaGVhZGluZ3p6eiMxeyUKKyAge1xjaGFwZm9udHMgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDBcdG9sZXJhbmNlPTUwMDAKKyAgICAgICAgICAgICAgICAgICAgXHBhcmluZGVudD0wcHRccmFnZ2VkcmlnaHQKKyAgICAgICAgICAgICAgICAgICAgXHJtICMxXGhmaWxsfX0lCisgIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSBAaGVhZGluZywgQHN1YmhlYWRpbmcsIEBzdWJzdWJoZWFkaW5nLgorXHBhcnNlYXJnZGVmXGhlYWRpbmd7XHNlY3Rpb25oZWFkaW5neyMxfXtzZWN9e1lvbWl0ZnJvbXRvY317fQorICBcc3VwcHJlc3NmaXJzdHBhcmFncmFwaGluZGVudH0KK1xwYXJzZWFyZ2RlZlxzdWJoZWFkaW5ne1xzZWN0aW9uaGVhZGluZ3sjMX17c3Vic2VjfXtZb21pdGZyb210b2N9e30KKyAgXHN1cHByZXNzZmlyc3RwYXJhZ3JhcGhpbmRlbnR9CitccGFyc2VhcmdkZWZcc3Vic3ViaGVhZGluZ3tcc2VjdGlvbmhlYWRpbmd7IzF9e3N1YnN1YnNlY317WW9taXRmcm9tdG9jfXt9CisgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50fQorCislIFRoZXNlIG1hY3JvcyBnZW5lcmF0ZSBhIGNoYXB0ZXIsIHNlY3Rpb24sIGV0Yy4gaGVhZGluZyBvbmx5CislIChpbmNsdWRpbmcgd2hpdGVzcGFjZSwgbGluZWJyZWFraW5nLCBldGMuIGFyb3VuZCBpdCksCislIGdpdmVuIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gY29udmVuaWVudCwgcGFyc2VkIGZvcm0uCisKKyUlJSBBcmdzIGFyZSB0aGUgc2tpcCBhbmQgcGVuYWx0eSAodXN1YWxseSBuZWdhdGl2ZSkKK1xkZWZcZG9icmVhayMxIzJ7XHBhclxpZmRpbVxsYXN0c2tpcDwjMVxyZW1vdmVsYXN0c2tpcFxwZW5hbHR5IzJcdnNraXAjMVxmaX0KKworJSUlIERlZmluZSBwbGFpbiBjaGFwdGVyIHN0YXJ0cywgYW5kIHBhZ2Ugb24vb2ZmIHN3aXRjaGluZyBmb3IgaXQKKyUgUGFyYW1ldGVyIGNvbnRyb2xsaW5nIHNraXAgYmVmb3JlIGNoYXB0ZXIgaGVhZGluZ3MgKGlmIG5lZWRlZCkKKworXG5ld3NraXBcY2hhcGhlYWRpbmdza2lwCisKK1xkZWZcY2hhcGJyZWFre1xkb2JyZWFrIFxjaGFwaGVhZGluZ3NraXAgey00MDAwfX0KK1xkZWZcY2hhcHBhZ2Vye1xwYXJcdmZpbGxcc3VwZXJlamVjdH0KK1xkZWZcY2hhcG9kZHBhZ2V7XGNoYXBwYWdlciBcaWZvZGRccGFnZW5vIFxlbHNlIFxoYm94IHRvIDBwdHt9IFxjaGFwcGFnZXJcZml9CisKK1xkZWZcc2V0Y2hhcHRlcm5ld3BhZ2UgIzEge1xjc25hbWUgQ0hBUFBBRyMxXGVuZGNzbmFtZX0KKworXGRlZlxDSEFQUEFHb2ZmeyUKK1xnbG9iYWxcbGV0XGNvbnRlbnRzYWxpZ25tYWNybyA9IFxjaGFwcGFnZXIKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBicmVhaworXGdsb2JhbFxsZXRccGFnZWFsaWdubWFjcm89XGNoYXBwYWdlcn0KKworXGRlZlxDSEFQUEFHb257JQorXGdsb2JhbFxsZXRcY29udGVudHNhbGlnbm1hY3JvID0gXGNoYXBwYWdlcgorXGdsb2JhbFxsZXRccGNoYXBzZXBtYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcHBhZ2VyCitcZ2xvYmFsXGRlZlxIRUFESU5HU29ue1xIRUFESU5HU3NpbmdsZX19CisKK1xkZWZcQ0hBUFBBR29kZHslCitcZ2xvYmFsXGxldFxjb250ZW50c2FsaWdubWFjcm8gPSBcY2hhcG9kZHBhZ2UKK1xnbG9iYWxcbGV0XHBjaGFwc2VwbWFjcm89XGNoYXBvZGRwYWdlCitcZ2xvYmFsXGxldFxwYWdlYWxpZ25tYWNybz1cY2hhcG9kZHBhZ2UKK1xnbG9iYWxcZGVmXEhFQURJTkdTb257XEhFQURJTkdTZG91YmxlfX0KKworXENIQVBQQUdvbgorCislIENoYXB0ZXIgb3BlbmluZy4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIHR5cGUgKFludW1iZXJlZCwgWW5vdGhpbmcsCislIFlhcHBlbmRpeCwgWW9taXRmcm9tdG9jKSwgIzMgdGhlIGNoYXB0ZXIgbnVtYmVyLgorJQorJSBUbyB0ZXN0IGFnYWluc3Qgb3VyIGFyZ3VtZW50LgorXGRlZlxZbm90aGluZ2tleXdvcmR7WW5vdGhpbmd9CitcZGVmXFlvbWl0ZnJvbXRvY2tleXdvcmR7WW9taXRmcm9tdG9jfQorXGRlZlxZYXBwZW5kaXhrZXl3b3Jke1lhcHBlbmRpeH0KKyUKK1xkZWZcY2hhcG1hY3JvIzEjMiMzeyUKKyAgXHBjaGFwc2VwbWFjcm8KKyAgeyUKKyAgICBcY2hhcGZvbnRzIFxybQorICAgICUKKyAgICAlIEhhdmUgdG8gZGVmaW5lIFx0aGlzc2VjdGlvbiBiZWZvcmUgY2FsbGluZyBcZG9ub2RlcmVmLCBiZWNhdXNlIHRoZQorICAgICUgeHJlZiBjb2RlIGV2ZW50dWFsbHkgdXNlcyBpdC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpdCBoYXMgdG8gYmUgY2FsbGVkCisgICAgJSBhZnRlciBccGNoYXBzZXBtYWNybywgb3IgdGhlIGhlYWRsaW5lIHdpbGwgY2hhbmdlIHRvbyBzb29uLgorICAgIFxnZGVmXHRoaXNzZWN0aW9ueyMxfSUKKyAgICBcZ2RlZlx0aGlzY2hhcHRlcm5hbWV7IzF9JQorICAgICUKKyAgICAlIE9ubHkgaW5zZXJ0IHRoZSBzZXBhcmF0aW5nIHNwYWNlIGlmIHdlIGhhdmUgYSBjaGFwdGVyL2FwcGVuZGl4CisgICAgJSBudW1iZXIsIGFuZCBkb24ndCBwcmludCB0aGUgdW5udW1iZXJlZCBgYG51bWJlcicnLgorICAgIFxkZWZcdGVtcHR5cGV7IzJ9JQorICAgIFxpZnhcdGVtcHR5cGVcWW5vdGhpbmdrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7dW5uY2hhcH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgIFxzZXRib3gwID0gXGhib3h7fSUgY29udGVudHMgbGlrZSB1bm51bWJlcmVkLCBidXQgbm8gdG9jIGVudHJ5CisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcZ2RlZlx0aGlzY2hhcHRlcnt9JQorICAgIFxlbHNlXGlmeFx0ZW1wdHlwZVxZYXBwZW5kaXhrZXl3b3JkCisgICAgICBcc2V0Ym94MCA9IFxoYm94e1xwdXR3b3JkQXBwZW5kaXh7fSAjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgJSBXZSBkb24ndCBzdWJzdGl0dXRlIHRoZSBhY3R1YWwgY2hhcHRlciBuYW1lIGludG8gXHRoaXNjaGFwdGVyCisgICAgICAlIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCBpdHMgbWFjcm9zIGV2YWx1YXRlZCBub3cuICBBbmQgd2UgZG9uJ3QKKyAgICAgICUgdXNlIFx0aGlzc2VjdGlvbiBiZWNhdXNlIHRoYXQgY2hhbmdlcyB3aXRoIGVhY2ggc2VjdGlvbi4KKyAgICAgICUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQXBwZW5kaXh7fSBcYXBwZW5kaXhsZXR0ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICBcbm9leHBhbmRcdGhpc2NoYXB0ZXJuYW1lfSUKKyAgICBcZWxzZQorICAgICAgXHNldGJveDAgPSBcaGJveHsjM1xlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXtudW1jaGFwfSUKKyAgICAgIFx4ZGVmXHRoaXNjaGFwdGVye1xwdXR3b3JkQ2hhcHRlcnt9IFx0aGVcY2hhcG5vOgorICAgICAgICAgICAgICAgICAgICAgICAgXG5vZXhwYW5kXHRoaXNjaGFwdGVybmFtZX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSBmb3IgdGhpcyBjaGFwdGVyLiAgTXVzdCBjb21lIGJlZm9yZSB0aGUKKyAgICAlIFxkb25vZGVyZWYsIGJlY2F1c2Ugd2UgaW5jbHVkZSB0aGUgY3VycmVudCBub2RlIG5hbWUgaW4gdGhlIHRvYworICAgICUgZW50cnksIGFuZCBcZG9ub2RlcmVmIHJlc2V0cyBpdCB0byBlbXB0eS4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZX17IzF9eyMzfSUKKyAgICAlCisgICAgJSBGb3IgcGRmdGV4LCB3ZSBoYXZlIHRvIHdyaXRlIG91dCB0aGUgbm9kZSBkZWZpbml0aW9uIChha2EsIG1ha2UKKyAgICAlIHRoZSBwZGZkZXN0KSBhZnRlciBhbnkgcGFnZSBicmVhaywgYnV0IGJlZm9yZSB0aGUgYWN0dWFsIHRleHQgaGFzCisgICAgJSBiZWVuIHR5cGVzZXQuICBJZiB0aGUgZGVzdGluYXRpb24gZm9yIHRoZSBwZGYgb3V0bGluZSBpcyBhZnRlciB0aGUKKyAgICAlIHRleHQsIHRoZW4ganVtcGluZyBmcm9tIHRoZSBvdXRsaW5lIG1heSB3aW5kIHVwIHdpdGggdGhlIHRleHQgbm90CisgICAgJSBiZWluZyB2aXNpYmxlLCBmb3IgaW5zdGFuY2UgdW5kZXIgaGlnaCBtYWduaWZpY2F0aW9uLgorICAgIFxkb25vZGVyZWZ7IzJ9JQorICAgICUKKyAgICAlIFR5cGVzZXQgdGhlIGFjdHVhbCBoZWFkaW5nLgorICAgIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwIFx0b2xlcmFuY2U9NTAwMCBccGFyaW5kZW50PTBwdCBccmFnZ2VkcmlnaHQKKyAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKKyAgICAgICAgICBcdW5oYm94MCAjMVxwYXJ9JQorICB9JQorICBcbm9icmVha1xiaWdza2lwICUgbm8gcGFnZSBicmVhayBhZnRlciBhIGNoYXB0ZXIgdGl0bGUKKyAgXG5vYnJlYWsKK30KKworJSBAY2VudGVyY2hhcCAtLSBjZW50ZXJlZCBhbmQgdW5udW1iZXJlZC4KK1xsZXRcY2VudGVycGFyYW1ldGVyc21heWJlID0gXHJlbGF4CitcZGVmXGNlbnRlcnBhcmFtZXRlcnN7JQorICBcYWR2YW5jZVxyaWdodHNraXAgYnkgM1xyaWdodHNraXAKKyAgXGxlZnRza2lwID0gXHJpZ2h0c2tpcAorICBccGFyZmlsbHNraXAgPSAwcHQKK30KKworCislIEkgZG9uJ3QgdGhpbmsgdGhpcyBjaGFwdGVyIHN0eWxlIGlzIHN1cHBvcnRlZCBhbnkgbW9yZSwgc28gSSdtIG5vdAorJSB1cGRhdGluZyBpdCB3aXRoIHRoZSBuZXcgbm9kZXJlZiBzdHVmZi4gIFdlJ2xsIHNlZS4gIC0ta2FybCwgMTFhdWcwMy4KKyUKK1xkZWZcc2V0Y2hhcHRlcnN0eWxlICMxIHtcY3NuYW1lIENIQVBGIzFcZW5kY3NuYW1lfQorJQorXGRlZlx1bm5jaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxyYWdnZWRyaWdodAorICAgICAgICAgICAgICAgICAgICAgICBccm0gIzFcaGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxjaGZvcGVuICMxIzJ7XGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzCitcdmJveCB0byAzaW57XHZmaWwgXGhib3ggdG9caHNpemV7XGhmaWwgIzJ9IFxoYm94IHRvXGhzaXple1xoZmlsICMxfSBcdmZpbH19JQorXHBhclxwZW5hbHR5IDUwMDAgJQorfQorXGRlZlxjZW50ZXJjaGZvcGVuICMxeyUKK1xjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAorICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdAorICAgICAgICAgICAgICAgICAgICAgICBcaGZpbGwge1xybSAjMX1caGZpbGx9fVxiaWdza2lwIFxwYXJcbm9icmVhaworfQorXGRlZlxDSEFQRm9wZW57JQorICBcZ2xvYmFsXGxldFxjaGFwbWFjcm89XGNoZm9wZW4KKyAgXGdsb2JhbFxsZXRcY2VudGVyY2hhcG1hY3JvPVxjZW50ZXJjaGZvcGVufQorCisKKyUgU2VjdGlvbiB0aXRsZXMuICBUaGVzZSBtYWNyb3MgY29tYmluZSB0aGUgc2VjdGlvbiBudW1iZXIgcGFydHMgYW5kCislIGNhbGwgdGhlIGdlbmVyaWMgXHNlY3Rpb25oZWFkaW5nIHRvIGRvIHRoZSBwcmludGluZy4KKyUKK1xuZXdza2lwXHNlY2hlYWRpbmdza2lwCitcZGVmXHNlY2hlYWRpbmdicmVha3tcZG9icmVhayBcc2VjaGVhZGluZ3NraXB7LTEwMDB9fQorCislIFN1YnNlY3Rpb24gdGl0bGVzLgorXG5ld3NraXBcc3Vic2VjaGVhZGluZ3NraXAKK1xkZWZcc3Vic2VjaGVhZGluZ2JyZWFre1xkb2JyZWFrIFxzdWJzZWNoZWFkaW5nc2tpcHstNTAwfX0KKworJSBTdWJzdWJzZWN0aW9uIHRpdGxlcy4KK1xkZWZcc3Vic3Vic2VjaGVhZGluZ3NraXB7XHN1YnNlY2hlYWRpbmdza2lwfQorXGRlZlxzdWJzdWJzZWNoZWFkaW5nYnJlYWt7XHN1YnNlY2hlYWRpbmdicmVha30KKworCislIFByaW50IGFueSBzaXplLCBhbnkgdHlwZSwgc2VjdGlvbiB0aXRsZS4KKyUKKyUgIzEgaXMgdGhlIHRleHQsICMyIGlzIHRoZSBzZWN0aW9uIGxldmVsIChzZWMvc3Vic2VjL3N1YnN1YnNlYyksICMzIGlzCislIHRoZSBzZWN0aW9uIHR5cGUgZm9yIHhyZWZzIChZbnVtYmVyZWQsIFlub3RoaW5nLCBZYXBwZW5kaXgpLCAjNCBpcyB0aGUKKyUgc2VjdGlvbiBudW1iZXIuCislCitcZGVmXHNlY3Rpb25oZWFkaW5nIzEjMiMzIzR7JQorICB7JQorICAgICUgU3dpdGNoIHRvIHRoZSByaWdodCBzZXQgb2YgZm9udHMuCisgICAgXGNzbmFtZSAjMmZvbnRzXGVuZGNzbmFtZSBccm0KKyAgICAlCisgICAgJSBJbnNlcnQgc3BhY2UgYWJvdmUgdGhlIGhlYWRpbmcuCisgICAgXGNzbmFtZSAjMmhlYWRpbmdicmVha1xlbmRjc25hbWUKKyAgICAlCisgICAgJSBPbmx5IGluc2VydCB0aGUgc3BhY2UgYWZ0ZXIgdGhlIG51bWJlciBpZiB3ZSBoYXZlIGEgc2VjdGlvbiBudW1iZXIuCisgICAgXGRlZlxzZWN0aW9ubGV2ZWx7IzJ9JQorICAgIFxkZWZcdGVtcHR5cGV7IzN9JQorICAgICUKKyAgICBcaWZ4XHRlbXB0eXBlXFlub3RoaW5na2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHt9JQorICAgICAgXGRlZlx0b2N0eXBle3Vubn0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGVsc2VcaWZ4XHRlbXB0eXBlXFlvbWl0ZnJvbXRvY2tleXdvcmQKKyAgICAgICUgZm9yIEBoZWFkaW5ncyAtLSBubyBzZWN0aW9uIG51bWJlciwgZG9uJ3QgaW5jbHVkZSBpbiB0b2MsCisgICAgICAlIGFuZCBkb24ndCByZWRlZmluZSBcdGhpc3NlY3Rpb24uCisgICAgICBcc2V0Ym94MCA9IFxoYm94e30lCisgICAgICBcZGVmXHRvY3R5cGV7b21pdH0lCisgICAgICBcbGV0XHNlY3Rpb25sZXZlbD1cZW1wdHkKKyAgICBcZWxzZVxpZnhcdGVtcHR5cGVcWWFwcGVuZGl4a2V5d29yZAorICAgICAgXHNldGJveDAgPSBcaGJveHsjNFxlbnNwYWNlfSUKKyAgICAgIFxkZWZcdG9jdHlwZXthcHB9JQorICAgICAgXGdkZWZcdGhpc3NlY3Rpb257IzF9JQorICAgIFxlbHNlCisgICAgICBcc2V0Ym94MCA9IFxoYm94eyM0XGVuc3BhY2V9JQorICAgICAgXGRlZlx0b2N0eXBle251bX0lCisgICAgICBcZ2RlZlx0aGlzc2VjdGlvbnsjMX0lCisgICAgXGZpXGZpXGZpCisgICAgJQorICAgICUgV3JpdGUgdGhlIHRvYyBlbnRyeSAoYmVmb3JlIFxkb25vZGVyZWYpLiAgU2VlIGNvbW1lbnRzIGluIFxjaGZwbGFpbi4KKyAgICBcd3JpdGV0b2NlbnRyeXtcdG9jdHlwZVxzZWN0aW9ubGV2ZWx9eyMxfXsjNH0lCisgICAgJQorICAgICUgV3JpdGUgdGhlIG5vZGUgcmVmZXJlbmNlICg9IHBkZiBkZXN0aW5hdGlvbiBmb3IgcGRmdGV4KS4KKyAgICAlIEFnYWluLCBzZWUgY29tbWVudHMgaW4gXGNoZnBsYWluLgorICAgIFxkb25vZGVyZWZ7IzN9JQorICAgICUKKyAgICAlIE91dHB1dCB0aGUgYWN0dWFsIHNlY3Rpb24gaGVhZGluZy4KKyAgICBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMCBcdG9sZXJhbmNlPTUwMDAgXHBhcmluZGVudD0wcHQgXHJhZ2dlZHJpZ2h0CisgICAgICAgICAgXGhhbmdpbmRlbnQ9XHdkMCAgJSB6ZXJvIGlmIG5vIHNlY3Rpb24gbnVtYmVyCisgICAgICAgICAgXHVuaGJveDAgIzF9JQorICB9JQorICAlIEFkZCBleHRyYSBzcGFjZSBhZnRlciB0aGUgaGVhZGluZyAtLSBoYWxmIG9mIHdoYXRldmVyIGNhbWUgYWJvdmUgaXQuCisgICUgRG9uJ3QgYWxsb3cgc3RyZXRjaCwgdGhvdWdoLgorICBca2VybiAuNSBcY3NuYW1lICMyaGVhZGluZ3NraXBcZW5kY3NuYW1lCisgICUKKyAgJSBEbyBub3QgbGV0IHRoZSBrZXJuIGJlIGEgcG90ZW50aWFsIGJyZWFrcG9pbnQsIGFzIGl0IHdvdWxkIGJlIGlmIGl0CisgICUgd2FzIGZvbGxvd2VkIGJ5IGdsdWUuCisgIFxub2JyZWFrCisgICUKKyAgJSBXZSdsbCBhbG1vc3QgY2VydGFpbmx5IHN0YXJ0IGEgcGFyYWdyYXBoIG5leHQsIHNvIGRvbid0IGxldCB0aGF0CisgICUgZ2x1ZSBhY2N1bXVsYXRlLiAgKE5vdCBhIGJyZWFrcG9pbnQgYmVjYXVzZSBpdCdzIHByZWNlZGVkIGJ5IGEKKyAgJSBkaXNjYXJkYWJsZSBpdGVtLikKKyAgXHZza2lwLVxwYXJza2lwCisgICUgCisgICUgVGhpcyBpcyBwdXJlbHkgc28gdGhlIGxhc3QgaXRlbSBvbiB0aGUgbGlzdCBpcyBhIGtub3duIFxwZW5hbHR5ID4KKyAgJSAxMDAwMC4gIFRoaXMgaXMgc28gXHN0YXJ0ZGVmdW4gY2FuIGF2b2lkIGFsbG93aW5nIGJyZWFrcG9pbnRzIGFmdGVyCisgICUgc2VjdGlvbiBoZWFkaW5ncy4gIE90aGVyd2lzZSwgaXQgd291bGQgaW5zZXJ0IGEgdmFsaWQgYnJlYWtwb2ludCBiZXR3ZWVuOgorICAlIAorICAlICAgQHNlY3Rpb24gc2VjLXdoYXRldmVyCisgICUgICBAZGVmZm4gZGVmLXdoYXRldmVyCisgIFxwZW5hbHR5IDEwMDAxCit9CisKKworXG1lc3NhZ2V7dG9jLH0KKyUgVGFibGUgb2YgY29udGVudHMuCitcbmV3d3JpdGVcdG9jZmlsZQorCislIFdyaXRlIGFuIGVudHJ5IHRvIHRoZSB0b2MgZmlsZSwgb3BlbmluZyBpdCBpZiBuZWNlc3NhcnkuCislIENhbGxlZCBmcm9tIEBjaGFwdGVyLCBldGMuCislCislIEV4YW1wbGUgdXNhZ2U6IFx3cml0ZXRvY2VudHJ5e3NlY317U2VjdGlvbiBOYW1lfXtcdGhlXGNoYXBuby5cdGhlXHNlY25vfQorJSBXZSBhcHBlbmQgdGhlIGN1cnJlbnQgbm9kZSBuYW1lIChpZiBhbnkpIGFuZCBwYWdlIG51bWJlciBhcyBhZGRpdGlvbmFsCislIGFyZ3VtZW50cyBmb3IgdGhlIFx7Y2hhcCxzZWMsLi4ufWVudHJ5IG1hY3JvcyB3aGljaCB3aWxsIGV2ZW50dWFsbHkKKyUgcmVhZCB0aGlzLiAgVGhlIG5vZGUgbmFtZSBpcyB1c2VkIGluIHRoZSBwZGYgb3V0bGluZXMgYXMgdGhlCislIGRlc3RpbmF0aW9uIHRvIGp1bXAgdG8uCislCislIFdlIG9wZW4gdGhlIC50b2MgZmlsZSBmb3Igd3JpdGluZyBoZXJlIGluc3RlYWQgb2YgYXQgQHNldGZpbGVuYW1lIChvcgorJSBhbnkgb3RoZXIgZml4ZWQgdGltZSkgc28gdGhhdCBAY29udGVudHMgY2FuIGJlIGFueXdoZXJlIGluIHRoZSBkb2N1bWVudC4KKyUgQnV0IGlmICMxIGlzIGBvbWl0JywgdGhlbiB3ZSBkb24ndCBkbyBhbnl0aGluZy4gIFRoaXMgaXMgdXNlZCBmb3IgdGhlCislIHRhYmxlIG9mIGNvbnRlbnRzIGNoYXB0ZXIgb3BlbmluZ3MgdGhlbXNlbHZlcy4KKyUKK1xuZXdpZlxpZnRvY2ZpbGVvcGVuZWQKK1xkZWZcb21pdGtleXdvcmR7b21pdH0lCislCitcZGVmXHdyaXRldG9jZW50cnkjMSMyIzN7JQorICBcZWRlZlx3cml0ZXRvY3R5cGV7IzF9JQorICBcaWZ4XHdyaXRldG9jdHlwZVxvbWl0a2V5d29yZCBcZWxzZQorICAgIFxpZnRvY2ZpbGVvcGVuZWRcZWxzZQorICAgICAgXGltbWVkaWF0ZVxvcGVub3V0XHRvY2ZpbGUgPSBcam9ibmFtZS50b2MKKyAgICAgIFxnbG9iYWxcdG9jZmlsZW9wZW5lZHRydWUKKyAgICBcZmkKKyAgICAlCisgICAgXGlmbGlua3MKKyAgICAgIHtcYXRkdW1taWVzCisgICAgICAgXGVkZWZcdGVtcHslCisgICAgICAgICBcd3JpdGVcdG9jZmlsZXtAIzFlbnRyeXsjMn17IzN9e1xsYXN0bm9kZX17XG5vZXhwYW5kXGZvbGlvfX19JQorICAgICAgIFx0ZW1wCisgICAgICB9CisgICAgXGZpCisgIFxmaQorICAlCisgICUgVGVsbCBcc2hpcG91dCB0byBjcmVhdGUgYSBwZGYgZGVzdGluYXRpb24gb24gZWFjaCBwYWdlLCBpZiB3ZSdyZQorICAlIHdyaXRpbmcgcGRmLiAgVGhlc2UgYXJlIHVzZWQgaW4gdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgV2UgY2FuJ3QKKyAgJSBqdXN0IHdyaXRlIG9uZSBvbiBldmVyeSBwYWdlIGJlY2F1c2UgdGhlIHRpdGxlIHBhZ2VzIGFyZSBudW1iZXJlZAorICAlIDEgYW5kIDIgKHRoZSBwYWdlIG51bWJlcnMgYXJlbid0IHByaW50ZWQpLCBhbmQgc28gYXJlIHRoZSBmaXJzdAorICAlIHR3byBwYWdlcyBvZiB0aGUgZG9jdW1lbnQuICBUaHVzLCB3ZSdkIGhhdmUgdHdvIGRlc3RpbmF0aW9ucyBuYW1lZAorICAlIGAxJywgYW5kIHR3byBuYW1lZCBgMicuCisgIFxpZnBkZiBcZ2xvYmFsXHBkZm1ha2VwYWdlZGVzdHRydWUgXGZpCit9CisKKworJSBUaGVzZSBjaGFyYWN0ZXJzIGRvIG5vdCBwcmludCBwcm9wZXJseSBpbiB0aGUgQ29tcHV0ZXIgTW9kZXJuIHJvbWFuCislIGZvbnRzLCBzbyB3ZSBtdXN0IHRha2Ugc3BlY2lhbCBjYXJlLiAgVGhpcyBpcyBtb3JlIG9yIGxlc3MgcmVkdW5kYW50CislIHdpdGggdGhlIFRleGluZm8gaW5wdXQgZm9ybWF0IHNldHVwIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlLgorJSAKK1xkZWZcYWN0aXZlY2F0Y29kZXN7JQorICBcY2F0Y29kZWBcIj1cYWN0aXZlCisgIFxjYXRjb2RlYFwkPVxhY3RpdmUKKyAgXGNhdGNvZGVgXDw9XGFjdGl2ZQorICBcY2F0Y29kZWBcPj1cYWN0aXZlCisgIFxjYXRjb2RlYFxcPVxhY3RpdmUKKyAgXGNhdGNvZGVgXF49XGFjdGl2ZQorICBcY2F0Y29kZWBcXz1cYWN0aXZlCisgIFxjYXRjb2RlYFx8PVxhY3RpdmUKKyAgXGNhdGNvZGVgXH49XGFjdGl2ZQorfQorCisKKyUgUmVhZCB0aGUgdG9jIGZpbGUsIHdoaWNoIGlzIGVzc2VudGlhbGx5IFRleGluZm8gaW5wdXQuCitcZGVmXHJlYWR0b2NmaWxleyUKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGFjdGl2ZWNhdGNvZGVzCisgIFxpbnB1dCBcam9ibmFtZS50b2MKK30KKworXG5ld3NraXBcY29udGVudHNyaWdodG1hcmdpbiBcY29udGVudHNyaWdodG1hcmdpbj0xaW4KK1xuZXdjb3VudFxzYXZlcGFnZW5vCitcbmV3Y291bnRcbGFzdG5lZ2F0aXZlcGFnZW5vIFxsYXN0bmVnYXRpdmVwYWdlbm8gPSAtMQorCislIFByZXBhcmUgdG8gcmVhZCB3aGF0IHdlJ3ZlIHdyaXR0ZW4gdG8gXHRvY2ZpbGUuCislCitcZGVmXHN0YXJ0Y29udGVudHMjMXslCisgICUgSWYgQHNldGNoYXB0ZXJuZXdwYWdlIG9uLCBhbmQgQGhlYWRpbmdzIGRvdWJsZSwgdGhlIGNvbnRlbnRzIHNob3VsZAorICAlIHN0YXJ0IG9uIGFuIG9kZCBwYWdlLCB1bmxpa2UgY2hhcHRlcnMuICBUaHVzLCB3ZSBtYWludGFpbgorICAlIFxjb250ZW50c2FsaWdubWFjcm8gaW4gcGFyYWxsZWwgd2l0aCBccGFnZWFsaWdubWFjcm8uCisgICUgRnJvbTogVG9yYmpvcm4gR3Jhbmx1bmQgPHRlZ2VAbWF0ZW1hdGlrLnN1LnNlPgorICBcY29udGVudHNhbGlnbm1hY3JvCisgIFxpbW1lZGlhdGVcY2xvc2VvdXRcdG9jZmlsZQorICAlCisgICUgRG9uJ3QgbmVlZCB0byBwdXQgYENvbnRlbnRzJyBvciBgU2hvcnQgQ29udGVudHMnIGluIHRoZSBoZWFkbGluZS4KKyAgJSBJdCBpcyBhYnVuZGFudGx5IGNsZWFyIHdoYXQgdGhleSBhcmUuCisgIFxkZWZcdGhpc2NoYXB0ZXJ7fSUKKyAgXGNoYXBtYWNyb3sjMX17WW9taXRmcm9tdG9jfXt9JQorICAlCisgIFxzYXZlcGFnZW5vID0gXHBhZ2VubworICBcYmVnaW5ncm91cCAgICAgICAgICAgICAgICAgICUgU2V0IHVwIHRvIGhhbmRsZSBjb250ZW50cyBmaWxlcyBwcm9wZXJseS4KKyAgICBccmFnZ2VkYm90dG9tICAgICAgICAgICAgICAlIFdvcnJ5IG1vcmUgYWJvdXQgYnJlYWtwb2ludHMgdGhhbiB0aGUgYm90dG9tLgorICAgIFxhZHZhbmNlXGhzaXplIGJ5IC1cY29udGVudHNyaWdodG1hcmdpbiAlIERvbid0IHVzZSB0aGUgZnVsbCBsaW5lIGxlbmd0aC4KKyAgICAlCisgICAgJSBSb21hbiBudW1lcmFscyBmb3IgcGFnZSBudW1iZXJzLgorICAgIFxpZm51bSBccGFnZW5vPjAgXGdsb2JhbFxwYWdlbm8gPSBcbGFzdG5lZ2F0aXZlcGFnZW5vIFxmaQorfQorCisKKyUgTm9ybWFsIChsb25nKSB0b2MuCitcZGVmXGNvbnRlbnRzeyUKKyAgXHN0YXJ0Y29udGVudHN7XHB1dHdvcmRUT0N9JQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXHZmaWxsIFxlamVjdAorICAgIFxjb250ZW50c2FsaWdubWFjcm8gJSBpbiBjYXNlIEBzZXRjaGFwdGVybmV3cGFnZSBvZGQgaXMgaW4gZWZmZWN0CisgICAgXGlmZW9mIDEgXGVsc2UKKyAgICAgIFxwZGZtYWtlb3V0bGluZXMKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorICBcbGFzdG5lZ2F0aXZlcGFnZW5vID0gXHBhZ2VubworICBcZ2xvYmFsXHBhZ2VubyA9IFxzYXZlcGFnZW5vCit9CisKKyUgQW5kIGp1c3QgdGhlIGNoYXB0ZXJzLgorXGRlZlxzdW1tYXJ5Y29udGVudHN7JQorICBcc3RhcnRjb250ZW50c3tccHV0d29yZFNob3J0VE9DfSUKKyAgICAlCisgICAgXGxldFxudW1jaGFwZW50cnkgPSBcc2hvcnRjaGFwZW50cnkKKyAgICBcbGV0XGFwcGVudHJ5ID0gXHNob3J0Y2hhcGVudHJ5CisgICAgXGxldFx1bm5jaGFwZW50cnkgPSBcc2hvcnR1bm5jaGFwZW50cnkKKyAgICAlIFdlIHdhbnQgYSB0cnVlIHJvbWFuIGhlcmUgZm9yIHRoZSBwYWdlIG51bWJlcnMuCisgICAgXHNlY2ZvbnRzCisgICAgXGxldFxybT1cc2hvcnRjb250cm0gXGxldFxiZj1cc2hvcnRjb250YmYKKyAgICBcbGV0XHNsPVxzaG9ydGNvbnRzbCBcbGV0XHR0PVxzaG9ydGNvbnR0dAorICAgIFxybQorICAgIFxoeXBoZW5wZW5hbHR5ID0gMTAwMDAKKyAgICBcYWR2YW5jZVxiYXNlbGluZXNraXAgYnkgMXB0ICUgT3BlbiBpdCB1cCBhIGxpdHRsZS4KKyAgICBcZGVmXG51bXNlY2VudHJ5IyMxIyMyIyMzIyM0e30KKyAgICBcbGV0XGFwcHNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxsZXRcbnVtc3Vic3Vic2VjZW50cnkgPSBcbnVtc2VjZW50cnkKKyAgICBcbGV0XGFwcHN1YnN1YnNlY2VudHJ5ID0gXG51bXNlY2VudHJ5CisgICAgXGxldFx1bm5zdWJzdWJzZWNlbnRyeSA9IFxudW1zZWNlbnRyeQorICAgIFxvcGVuaW4gMSBcam9ibmFtZS50b2MKKyAgICBcaWZlb2YgMSBcZWxzZQorICAgICAgXHJlYWR0b2NmaWxlCisgICAgXGZpCisgICAgXGNsb3NlaW4gMQorICAgIFx2ZmlsbCBcZWplY3QKKyAgICBcY29udGVudHNhbGlnbm1hY3JvICUgaW4gY2FzZSBAc2V0Y2hhcHRlcm5ld3BhZ2Ugb2RkIGlzIGluIGVmZmVjdAorICBcZW5kZ3JvdXAKKyAgXGxhc3RuZWdhdGl2ZXBhZ2VubyA9IFxwYWdlbm8KKyAgXGdsb2JhbFxwYWdlbm8gPSBcc2F2ZXBhZ2VubworfQorXGxldFxzaG9ydGNvbnRlbnRzID0gXHN1bW1hcnljb250ZW50cworCislIFR5cGVzZXQgdGhlIGxhYmVsIGZvciBhIGNoYXB0ZXIgb3IgYXBwZW5kaXggZm9yIHRoZSBzaG9ydCBjb250ZW50cy4KKyUgVGhlIGFyZyBpcywgZS5nLiwgYEEnIGZvciBhbiBhcHBlbmRpeCwgb3IgYDMnIGZvciBhIGNoYXB0ZXIuCislCitcZGVmXHNob3J0Y2hhcGxhYmVsIzF7JQorICAlIFRoaXMgc3BhY2Ugc2hvdWxkIGJlIGVub3VnaCwgc2luY2UgYSBzaW5nbGUgbnVtYmVyIGlzIC41ZW0sIGFuZCB0aGUKKyAgJSB3aWRlc3QgbGV0dGVyIChNKSBpcyAxZW0sIGF0IGxlYXN0IGluIHRoZSBDb21wdXRlciBNb2Rlcm4gZm9udHMuCisgICUgQnV0IHVzZSBcaHNzIGp1c3QgaW4gY2FzZS4KKyAgJSAoVGhpcyBzcGFjZSBkb2Vzbid0IGluY2x1ZGUgdGhlIGV4dHJhIHNwYWNlIHRoYXQgZ2V0cyBhZGRlZCBhZnRlcgorICAlIHRoZSBsYWJlbDsgdGhhdCBnZXRzIHB1dCBpbiBieSBcc2hvcnRjaGFwZW50cnkgYWJvdmUuKQorICAlCisgICUgV2UnZCBsaWtlIHRvIHJpZ2h0LWp1c3RpZnkgY2hhcHRlciBudW1iZXJzLCBidXQgdGhhdCBsb29rcyBzdHJhbmdlCisgICUgd2l0aCBhcHBlbmRpeCBsZXR0ZXJzLiAgQW5kIHJpZ2h0LWp1c3RpZnlpbmcgbnVtYmVycyBhbmQKKyAgJSBsZWZ0LWp1c3RpZnlpbmcgbGV0dGVycyBsb29rcyBzdHJhbmdlIHdoZW4gdGhlcmUgaXMgbGVzcyB0aGFuIDEwCisgICUgY2hhcHRlcnMuICBIYXZlIHRvIHJlYWQgdGhlIHdob2xlIHRvYyBvbmNlIHRvIGtub3cgaG93IG1hbnkgY2hhcHRlcnMKKyAgJSB0aGVyZSBhcmUgYmVmb3JlIGRlY2lkaW5nIC4uLgorICBcaGJveCB0byAxZW17IzFcaHNzfSUKK30KKworJSBUaGVzZSBtYWNyb3MgZ2VuZXJhdGUgaW5kaXZpZHVhbCBlbnRyaWVzIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4KKyUgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjaGFwdGVyIG9yIHNlY3Rpb24gbmFtZS4KKyUgVGhlIGxhc3QgYXJndW1lbnQgaXMgdGhlIHBhZ2UgbnVtYmVyLgorJSBUaGUgYXJndW1lbnRzIGluIGJldHdlZW4gYXJlIHRoZSBjaGFwdGVyIG51bWJlciwgc2VjdGlvbiBudW1iZXIsIC4uLgorCislIENoYXB0ZXJzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KK1xkZWZcbnVtY2hhcGVudHJ5IzEjMiMzIzR7XGRvY2hhcGVudHJ5eyMyXGxhYmVsc3BhY2UjMX17IzR9fQorJQorJSBDaGFwdGVycywgaW4gdGhlIHNob3J0IHRvYy4KKyUgU2VlIGNvbW1lbnRzIGluIFxkb2NoYXBlbnRyeSByZSB2Ym94IGFuZCByZWxhdGVkIHNldHRpbmdzLgorXGRlZlxzaG9ydGNoYXBlbnRyeSMxIzIjMyM0eyUKKyAgXHRvY2VudHJ5e1xzaG9ydGNoYXBsYWJlbHsjMn1cbGFiZWxzcGFjZSAjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfSUKK30KKworJSBBcHBlbmRpY2VzLCBpbiB0aGUgbWFpbiBjb250ZW50cy4KKyUgTmVlZCB0aGUgd29yZCBBcHBlbmRpeCwgYW5kIGEgZml4ZWQtc2l6ZSBib3guCislCitcZGVmXGFwcGVuZGl4Ym94IzF7JQorICAlIFdlIHVzZSBNIHNpbmNlIGl0J3MgcHJvYmFibHkgdGhlIHdpZGVzdCBsZXR0ZXIuCisgIFxzZXRib3gwID0gXGhib3h7XHB1dHdvcmRBcHBlbmRpeHt9IE19JQorICBcaGJveCB0byBcd2Qwe1xwdXR3b3JkQXBwZW5kaXh7fSAjMVxoc3N9fQorJQorXGRlZlxhcHBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXtcYXBwZW5kaXhib3h7IzJ9XGxhYmVsc3BhY2UjMX17IzR9fQorCislIFVubnVtYmVyZWQgY2hhcHRlcnMuCitcZGVmXHVubmNoYXBlbnRyeSMxIzIjMyM0e1xkb2NoYXBlbnRyeXsjMX17IzR9fQorXGRlZlxzaG9ydHVubmNoYXBlbnRyeSMxIzIjMyM0e1x0b2NlbnRyeXsjMX17XGRvc2hvcnRwYWdlbm9cYmdyb3VwIzRcZWdyb3VwfX0KKworJSBTZWN0aW9ucy4KK1xkZWZcbnVtc2VjZW50cnkjMSMyIzMjNHtcZG9zZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc2VjZW50cnk9XG51bXNlY2VudHJ5CitcZGVmXHVubnNlY2VudHJ5IzEjMiMzIzR7XGRvc2VjZW50cnl7IzF9eyM0fX0KKworJSBTdWJzZWN0aW9ucy4KK1xkZWZcbnVtc3Vic2VjZW50cnkjMSMyIzMjNHtcZG9zdWJzZWNlbnRyeXsjMlxsYWJlbHNwYWNlIzF9eyM0fX0KK1xsZXRcYXBwc3Vic2VjZW50cnk9XG51bXN1YnNlY2VudHJ5CitcZGVmXHVubnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic2VjZW50cnl7IzF9eyM0fX0KKworJSBBbmQgc3Vic3Vic2VjdGlvbnMuCitcZGVmXG51bXN1YnN1YnNlY2VudHJ5IzEjMiMzIzR7XGRvc3Vic3Vic2VjZW50cnl7IzJcbGFiZWxzcGFjZSMxfXsjNH19CitcbGV0XGFwcHN1YnN1YnNlY2VudHJ5PVxudW1zdWJzdWJzZWNlbnRyeQorXGRlZlx1bm5zdWJzdWJzZWNlbnRyeSMxIzIjMyM0e1xkb3N1YnN1YnNlY2VudHJ5eyMxfXsjNH19CisKKyUgVGhpcyBwYXJhbWV0ZXIgY29udHJvbHMgdGhlIGluZGVudGF0aW9uIG9mIHRoZSB2YXJpb3VzIGxldmVscy4KKyUgU2FtZSBhcyBcZGVmYXVsdHBhcmluZGVudC4KK1xuZXdkaW1lblx0b2NpbmRlbnQgXHRvY2luZGVudCA9IDE1cHQKKworJSBOb3cgZm9yIHRoZSBhY3R1YWwgdHlwZXNldHRpbmcuIEluIGFsbCB0aGVzZSwgIzEgaXMgdGhlIHRleHQgYW5kICMyIGlzIHRoZQorJSBwYWdlIG51bWJlci4KKyUKKyUgSWYgdGhlIHRvYyBoYXMgdG8gYmUgYnJva2VuIG92ZXIgcGFnZXMsIHdlIHdhbnQgaXQgdG8gYmUgYXQgY2hhcHRlcnMKKyUgaWYgYXQgYWxsIHBvc3NpYmxlOyBoZW5jZSB0aGUgXHBlbmFsdHkuCitcZGVmXGRvY2hhcGVudHJ5IzEjMnslCisgICBccGVuYWx0eS0zMDAgXHZza2lwMVxiYXNlbGluZXNraXAgcGx1cy4zM1xiYXNlbGluZXNraXAgbWludXMuMjVcYmFzZWxpbmVza2lwCisgICBcYmVnaW5ncm91cAorICAgICBcY2hhcGVudHJ5Zm9udHMKKyAgICAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKKyAgIFxlbmRncm91cAorICAgXG5vYnJlYWtcdnNraXAgLjI1XGJhc2VsaW5lc2tpcCBwbHVzLjFcYmFzZWxpbmVza2lwCit9CisKK1xkZWZcZG9zZWNlbnRyeSMxIzJ7XGJlZ2luZ3JvdXAKKyAgXHNlY2VudHJ5Zm9udHMgXGxlZnRza2lwPVx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9Mlx0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworXGRlZlxkb3N1YnN1YnNlY2VudHJ5IzEjMntcYmVnaW5ncm91cAorICBcc3Vic3Vic2VjZW50cnlmb250cyBcbGVmdHNraXA9M1x0b2NpbmRlbnQKKyAgXHRvY2VudHJ5eyMxfXtcZG9wYWdlbm9cYmdyb3VwIzJcZWdyb3VwfSUKK1xlbmRncm91cH0KKworJSBXZSB1c2UgdGhlIHNhbWUgXGVudHJ5IG1hY3JvIGFzIGZvciB0aGUgaW5kZXggZW50cmllcy4KK1xsZXRcdG9jZW50cnkgPSBcZW50cnkKKworJSBTcGFjZSBiZXR3ZWVuIGNoYXB0ZXIgKG9yIHdoYXRldmVyKSBudW1iZXIgYW5kIHRoZSB0aXRsZS4KK1xkZWZcbGFiZWxzcGFjZXtcaHNraXAxZW0gXHJlbGF4fQorCitcZGVmXGRvcGFnZW5vIzF7e1xybSAjMX19CitcZGVmXGRvc2hvcnRwYWdlbm8jMXt7XHJtICMxfX0KKworXGRlZlxjaGFwZW50cnlmb250c3tcc2VjZm9udHMgXHJtfQorXGRlZlxzZWNlbnRyeWZvbnRze1x0ZXh0Zm9udHN9CitcZGVmXHN1YnNlY2VudHJ5Zm9udHN7XHRleHRmb250c30KK1xkZWZcc3Vic3Vic2VjZW50cnlmb250c3tcdGV4dGZvbnRzfQorCisKK1xtZXNzYWdle2Vudmlyb25tZW50cyx9CislIEBmb28gLi4uIEBlbmQgZm9vLgorCislIEBwb2ludHt9LCBAcmVzdWx0e30sIEBleHBhbnNpb257fSwgQHByaW50e30sIEBlcXVpdnt9LgorJQorJSBTaW5jZSB0aGVzZSBjaGFyYWN0ZXJzIGFyZSB1c2VkIGluIGV4YW1wbGVzLCBpdCBzaG91bGQgYmUgYW4gZXZlbiBudW1iZXIgb2YKKyUgXHR0IHdpZHRocy4gRWFjaCBcdHQgY2hhcmFjdGVyIGlzIDFlbiwgc28gdHdvIG1ha2VzIGl0IDFlbS4KKyUKK1xkZWZccG9pbnR7JFxzdGFyJH0KK1xkZWZccmVzdWx0e1xsZWF2ZXZtb2RlXHJhaXNlLjE1ZXhcaGJveCB0byAxZW17XGhmaWwkXFJpZ2h0YXJyb3ckXGhmaWx9fQorXGRlZlxleHBhbnNpb257XGxlYXZldm1vZGVccmFpc2UuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxtYXBzdG8kXGhmaWx9fQorXGRlZlxwcmludHtcbGVhdmV2bW9kZVxsb3dlci4xZXhcaGJveCB0byAxZW17XGhmaWwkXGRhc2h2JFxoZmlsfX0KK1xkZWZcZXF1aXZ7XGxlYXZldm1vZGVcbG93ZXIuMWV4XGhib3ggdG8gMWVte1xoZmlsJFxwdGV4ZXF1aXYkXGhmaWx9fQorCislIFRoZSBAZXJyb3J7fSBjb21tYW5kLgorJSBBZGFwdGVkIGZyb20gdGhlIFRlWGJvb2sncyBcYm94aXQuCislCitcbmV3Ym94XGVycm9yYm94CislCit7XHRlbnR0IFxnbG9iYWxcZGltZW4wID0gM2VtfSUgV2lkdGggb2YgdGhlIGJveC4KK1xkaW1lbjIgPSAuNTVwdCAlIFRoaWNrbmVzcyBvZiBydWxlcworJSBUaGUgdGV4dC4gKGByJyBpcyBvcGVuIG9uIHRoZSByaWdodCwgYGUnIHNvbWV3aGF0IGxlc3Mgc28gb24gdGhlIGxlZnQuKQorXHNldGJveDAgPSBcaGJveHtca2Vybi0uNzVwdCBcdGVuc2YgZXJyb3Jca2Vybi0xLjVwdH0KKyUKK1xzZXRib3hcZXJyb3Jib3g9XGhib3ggdG8gXGRpbWVuMHtcaGZpbAorICAgXGhzaXplID0gXGRpbWVuMCBcYWR2YW5jZVxoc2l6ZSBieSAtNS44cHQgJSBTcGFjZSB0byBsZWZ0K3JpZ2h0LgorICAgXGFkdmFuY2VcaHNpemUgYnkgLTJcZGltZW4yICUgUnVsZXMuCisgICBcdmJveHslCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMgorICAgICAgXGhib3h7XHZydWxlIHdpZHRoXGRpbWVuMiBca2VybjNwdCAgICAgICAgICAlIFNwYWNlIHRvIGxlZnQgb2YgdGV4dC4KKyAgICAgICAgIFx2dG9we1xrZXJuMi40cHQgXGJveDAgXGtlcm4yLjRwdH0lIFNwYWNlIGFib3ZlL2JlbG93LgorICAgICAgICAgXGtlcm4zcHRcdnJ1bGUgd2lkdGhcZGltZW4yfSUgU3BhY2UgdG8gcmlnaHQuCisgICAgICBcaHJ1bGUgaGVpZ2h0XGRpbWVuMn0KKyAgICBcaGZpbH0KKyUKK1xkZWZcZXJyb3J7XGxlYXZldm1vZGVcbG93ZXIuN2V4XGNvcHlcZXJyb3Jib3h9CisKKyUgQHRleCAuLi4gQGVuZCB0ZXggICAgZXNjYXBlcyBpbnRvIHJhdyBUZXggdGVtcG9yYXJpbHkuCislIE9uZSBleGNlcHRpb246IEAgaXMgc3RpbGwgYW4gZXNjYXBlIGNoYXJhY3Rlciwgc28gdGhhdCBAZW5kIHRleCB3b3Jrcy4KKyUgQnV0IFxAIG9yIEBAIHdpbGwgZ2V0IGEgcGxhaW4gdGV4IEAgY2hhcmFjdGVyLgorCitcZW52ZGVmXHRleHslCisgIFxjYXRjb2RlIGBcXD0wIFxjYXRjb2RlIGBcez0xIFxjYXRjb2RlIGBcfT0yCisgIFxjYXRjb2RlIGBcJD0zIFxjYXRjb2RlIGBcJj00IFxjYXRjb2RlIGBcIz02CisgIFxjYXRjb2RlIGBcXj03IFxjYXRjb2RlIGBcXz04IFxjYXRjb2RlIGBcfj1cYWN0aXZlIFxsZXR+PVx0aWUKKyAgXGNhdGNvZGUgYFwlPTE0CisgIFxjYXRjb2RlIGBcKz1cb3RoZXIKKyAgXGNhdGNvZGUgYFwiPVxvdGhlcgorICBcY2F0Y29kZSBgXHw9XG90aGVyCisgIFxjYXRjb2RlIGBcPD1cb3RoZXIKKyAgXGNhdGNvZGUgYFw+PVxvdGhlcgorICBcZXNjYXBlY2hhcj1gXFwKKyAgJQorICBcbGV0XGI9XHB0ZXhiCisgIFxsZXRcYnVsbGV0PVxwdGV4YnVsbGV0CisgIFxsZXRcYz1ccHRleGMKKyAgXGxldFwsPVxwdGV4Y29tbWEKKyAgXGxldFwuPVxwdGV4ZG90CisgIFxsZXRcZG90cz1ccHRleGRvdHMKKyAgXGxldFxlcXVpdj1ccHRleGVxdWl2CisgIFxsZXRcIT1ccHRleGV4Y2xhbQorICBcbGV0XGk9XHB0ZXhpCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcbGV0XHs9XHB0ZXhsYnJhY2UKKyAgXGxldFwrPVx0YWJhbGlnbgorICBcbGV0XH09XHB0ZXhyYnJhY2UKKyAgXGxldFwvPVxwdGV4c2xhc2gKKyAgXGxldFwqPVxwdGV4c3RhcgorICBcbGV0XHQ9XHB0ZXh0CisgIFxsZXRcZnJlbmNoc3BhY2luZz1ccGxhaW5mcmVuY2hzcGFjaW5nCisgICUKKyAgXGRlZlxlbmRsZG90c3tcbWF0aGlubmVye1xsZG90c1xsZG90c1xsZG90c1xsZG90c319JQorICBcZGVmXGVuZGRvdHN7XHJlbGF4XGlmbW1vZGVcZW5kbGRvdHNcZWxzZSRcbWF0aHN1cnJvdW5kPTBwdCBcZW5kbGRvdHNcLCRcZml9JQorICBcZGVmXEB7QH0lCit9CislIFRoZXJlIGlzIG5vIG5lZWQgdG8gZGVmaW5lIFxFdGV4LgorCislIERlZmluZSBAbGlzcCAuLi4gQGVuZCBsaXNwLgorJSBAbGlzcCBlbnZpcm9ubWVudCBmb3JtcyBhIGdyb3VwIHNvIGl0IGNhbiByZWJpbmQgdGhpbmdzLAorJSBpbmNsdWRpbmcgdGhlIGRlZmluaXRpb24gb2YgQGVuZCBsaXNwICh3aGljaCBub3JtYWxseSBpcyBlcnJvbmVvdXMpLgorCislIEFtb3VudCB0byBuYXJyb3cgdGhlIG1hcmdpbnMgYnkgZm9yIEBsaXNwLgorXG5ld3NraXBcbGlzcG5hcnJvd2luZyBcbGlzcG5hcnJvd2luZz0wLjRpbgorCislIFRoaXMgaXMgdGhlIGRlZmluaXRpb24gdGhhdCBeXk0gZ2V0cyBpbnNpZGUgQGxpc3AsIEBleGFtcGxlLCBhbmQgb3RoZXIKKyUgc3VjaCBlbnZpcm9ubWVudHMuICBcbnVsbCBpcyBiZXR0ZXIgdGhhbiBhIHNwYWNlLCBzaW5jZSBpdCBkb2Vzbid0CislIGhhdmUgYW55IHdpZHRoLgorXGRlZlxsaXNwcGFye1xudWxsXGVuZGdyYWZ9CisKKyUgVGhpcyBzcGFjZSBpcyBhbHdheXMgcHJlc2VudCBhYm92ZSBhbmQgYmVsb3cgZW52aXJvbm1lbnRzLgorXG5ld3NraXBcZW52c2tpcGFtb3VudCBcZW52c2tpcGFtb3VudCA9IDBwdAorCislIE1ha2Ugc3BhY2luZyBhbmQgYmVsb3cgZW52aXJvbm1lbnQgc3ltbWV0cmljYWwuICBXZSB1c2UgXHBhcnNraXAgaGVyZQorJSB0byBoZWxwIGluIGRvaW5nIHRoYXQsIHNpbmNlIGluIEBleGFtcGxlLWxpa2UgZW52aXJvbm1lbnRzIFxwYXJza2lwCislIGlzIHJlc2V0IHRvIHplcm87IHRodXMgdGhlIFxhZnRlcmVudmJyZWFrIGluc2VydHMgbm8gc3BhY2UgLS0gYnV0IHRoZQorJSBzdGFydCBvZiB0aGUgbmV4dCBwYXJhZ3JhcGggd2lsbCBpbnNlcnQgXHBhcnNraXAuCislCitcZGVmXGFib3ZlZW52YnJlYWt7eyUKKyAgJSA9MTAwMDAgaW5zdGVhZCBvZiA8MTAwMDAgYmVjYXVzZSBvZiBhIHNwZWNpYWwgY2FzZSBpbiBcaXRlbXp6eiBhbmQKKyAgJSBcc2VjdGlvbmhlYWRpbmcsIHEudi4KKyAgXGlmbnVtIFxsYXN0cGVuYWx0eT0xMDAwMCBcZWxzZQorICAgIFxhZHZhbmNlXGVudnNraXBhbW91bnQgYnkgXHBhcnNraXAKKyAgICBcZW5kZ3JhZgorICAgIFxpZmRpbVxsYXN0c2tpcDxcZW52c2tpcGFtb3VudAorICAgICAgXHJlbW92ZWxhc3Rza2lwCisgICAgICAlIGl0J3Mgbm90IGEgZ29vZCBwbGFjZSB0byBicmVhayBpZiB0aGUgbGFzdCBwZW5hbHR5IHdhcyBcbm9icmVhaworICAgICAgJSBvciBiZXR0ZXIgLi4uCisgICAgICBcaWZudW1cbGFzdHBlbmFsdHk8MTAwMDAgXHBlbmFsdHktNTAgXGZpCisgICAgICBcdnNraXBcZW52c2tpcGFtb3VudAorICAgIFxmaQorICBcZmkKK319CisKK1xsZXRcYWZ0ZXJlbnZicmVhayA9IFxhYm92ZWVudmJyZWFrCisKKyUgXG5vbmFycm93aW5nIGlzIGEgZmxhZy4gIElmICJzZXQiLCBAbGlzcCBldGMgZG9uJ3QgbmFycm93IG1hcmdpbnM7IGl0IHdpbGwKKyUgYWxzbyBjbGVhciBpdCwgc28gdGhhdCBpdHMgZW1iZWRkZWQgZW52aXJvbm1lbnRzIGRvIHRoZSBuYXJyb3dpbmcgYWdhaW4uCitcbGV0XG5vbmFycm93aW5nPVxyZWxheAorCislIEBjYXJ0b3VjaGUgLi4uIEBlbmQgY2FydG91Y2hlOiBkcmF3IHJlY3RhbmdsZSB3L3JvdW5kZWQgY29ybmVycyBhcm91bmQKKyUgZW52aXJvbm1lbnQgY29udGVudHMuCitcZm9udFxjaXJjbGU9bGNpcmNsZTEwCitcbmV3ZGltZW5cY2lyY3RoaWNrCitcbmV3ZGltZW5cY2FydG91dGVyXG5ld2RpbWVuXGNhcnRpbm5lcgorXG5ld3NraXBcbm9ybWJza2lwXG5ld3NraXBcbm9ybXBza2lwXG5ld3NraXBcbm9ybWxza2lwCitcY2lyY3RoaWNrPVxmb250ZGltZW44XGNpcmNsZQorJQorXGRlZlxjdGx7e1xjaXJjbGVcY2hhcicwMTNcaHNraXAgLTZwdH19JSA2cHQgZnJvbSBwbCBmaWxlOiAxLzJjaGFyd2lkdGgKK1xkZWZcY3Rye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMH19CitcZGVmXGNibHt7XGNpcmNsZVxjaGFyJzAxMlxoc2tpcCAtNnB0fX0KK1xkZWZcY2Jye3tcaHNraXAgNnB0XGNpcmNsZVxjaGFyJzAxMX19CitcZGVmXGNhcnR0b3B7XGhib3ggdG8gXGNhcnRvdXRlcntcaHNraXBcbHNraXAKKyAgICAgICAgXGN0bFxsZWFkZXJzXGhydWxlIGhlaWdodFxjaXJjdGhpY2tcaGZpbFxjdHIKKyAgICAgICAgXGhza2lwXHJza2lwfX0KK1xkZWZcY2FydGJvdHtcaGJveCB0byBcY2FydG91dGVye1xoc2tpcFxsc2tpcAorICAgICAgICBcY2JsXGxlYWRlcnNcaHJ1bGUgaGVpZ2h0XGNpcmN0aGlja1xoZmlsXGNicgorICAgICAgICBcaHNraXBccnNraXB9fQorJQorXG5ld3NraXBcbHNraXBcbmV3c2tpcFxyc2tpcAorCitcZW52ZGVmXGNhcnRvdWNoZXslCisgIFxpZmhtb2RlXHBhclxmaSAgJSBjYW4ndCBiZSBpbiB0aGUgbWlkc3Qgb2YgYSBwYXJhZ3JhcGguCisgIFxzdGFydHNhdmluZ2luc2VydHMKKyAgXGxza2lwPVxsZWZ0c2tpcCBccnNraXA9XHJpZ2h0c2tpcAorICBcbGVmdHNraXA9MHB0XHJpZ2h0c2tpcD0wcHQgJSB3ZSB3YW50IHRoZXNlICpvdXRzaWRlKi4KKyAgXGNhcnRpbm5lcj1caHNpemUgXGFkdmFuY2VcY2FydGlubmVyIGJ5LVxsc2tpcAorICBcYWR2YW5jZVxjYXJ0aW5uZXIgYnktXHJza2lwCisgIFxjYXJ0b3V0ZXI9XGhzaXplCisgIFxhZHZhbmNlXGNhcnRvdXRlciBieSAxOC40cHQJJSBhbGxvdyBmb3IgM3B0IGtlcm5zIG9uIGVpdGhlcgorCQkJCSUgc2lkZSwgYW5kIGZvciA2cHQgd2FzdGUgZnJvbQorCQkJCSUgZWFjaCBjb3JuZXIgY2hhciwgYW5kIHJ1bGUgdGhpY2tuZXNzCisgIFxub3JtYnNraXA9XGJhc2VsaW5lc2tpcCBcbm9ybXBza2lwPVxwYXJza2lwIFxub3JtbHNraXA9XGxpbmVza2lwCisgICUgRmxhZyB0byB0ZWxsIEBsaXNwLCBldGMuLCBub3QgdG8gbmFycm93IG1hcmdpbi4KKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFx2Ym94XGJncm91cAorICAgICAgXGJhc2VsaW5lc2tpcD0wcHRccGFyc2tpcD0wcHRcbGluZXNraXA9MHB0CisgICAgICBcY2FydHRvcAorICAgICAgXGhib3hcYmdyb3VwCisJICBcaHNraXBcbHNraXAKKwkgIFx2cnVsZVxrZXJuM3B0CisJICBcdmJveFxiZ3JvdXAKKwkgICAgICBca2VybjNwdAorCSAgICAgIFxoc2l6ZT1cY2FydGlubmVyCisJICAgICAgXGJhc2VsaW5lc2tpcD1cbm9ybWJza2lwCisJICAgICAgXGxpbmVza2lwPVxub3JtbHNraXAKKwkgICAgICBccGFyc2tpcD1cbm9ybXBza2lwCisJICAgICAgXHZza2lwIC1ccGFyc2tpcAorCSAgICAgIFxjb21tZW50ICUgRm9yIGV4cGxhbmF0aW9uLCBzZWUgdGhlIGVuZCBvZiBcZGVmXGdyb3VwLgorfQorXGRlZlxFY2FydG91Y2hleyUKKyAgICAgICAgICAgICAgXGlmaG1vZGVccGFyXGZpCisJICAgICAgXGtlcm4zcHQKKwkgIFxlZ3JvdXAKKwkgIFxrZXJuM3B0XHZydWxlCisJICBcaHNraXBccnNraXAKKyAgICAgIFxlZ3JvdXAKKyAgICAgIFxjYXJ0Ym90CisgIFxlZ3JvdXAKKyAgXGNoZWNraW5zZXJ0cworfQorCisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhbGwgdGhlIEBleGFtcGxlIHZhcmlhbnRzLAorJSBpbnNpZGUgYSBncm91cC4KK1xkZWZcbm9uZmlsbHN0YXJ0eyUKKyAgXGFib3ZlZW52YnJlYWsKKyAgXGhmdXp6ID0gMTJwdCAlIERvbid0IGJlIGZ1c3N5CisgIFxzZXBzcGFjZXMgJSBNYWtlIHNwYWNlcyBiZSB3b3JkLXNlcGFyYXRvcnMgcmF0aGVyIHRoYW4gc3BhY2UgdG9rZW5zLgorICBcbGV0XHBhciA9IFxsaXNwcGFyICUgZG9uJ3QgaWdub3JlIGJsYW5rIGxpbmVzCisgIFxvYmV5bGluZXMgJSBlYWNoIGxpbmUgb2YgaW5wdXQgaXMgYSBsaW5lIG9mIG91dHB1dAorICBccGFyc2tpcCA9IDBwdAorICBccGFyaW5kZW50ID0gMHB0CisgIFxlbWVyZ2VuY3lzdHJldGNoID0gMHB0ICUgZG9uJ3QgdHJ5IHRvIGF2b2lkIG92ZXJmdWxsIGJveGVzCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZSBcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKKyAgICBcZXhkZW50YW1vdW50PVxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXGxldFxleGRlbnQ9XG5vZmlsbGV4ZGVudAorfQorCislIElmIHlvdSB3YW50IGFsbCBleGFtcGxlcyBldGMuIHNtYWxsOiBAc2V0IGRpc3BlbnZzaXplIHNtYWxsLgorJSBJZiB5b3Ugd2FudCBldmVuIHNtYWxsIGV4YW1wbGVzIHRoZSBmdWxsIHNpemU6IEBzZXQgZGlzcGVudnNpemUgbm9zbWFsbC4KKyUgVGhpcyBhZmZlY3RzIHRoZSBmb2xsb3dpbmcgZGlzcGxheWVkIGVudmlyb25tZW50czoKKyUgICAgQGV4YW1wbGUsIEBkaXNwbGF5LCBAZm9ybWF0LCBAbGlzcAorJQorXGRlZlxzbWFsbHdvcmR7c21hbGx9CitcZGVmXG5vc21hbGx3b3Jke25vc21hbGx9CitcbGV0XFNFVGRpc3BlbnZzaXplXHJlbGF4CitcZGVmXHNldG5vcm1hbGRpc3BlbnZ7JQorICBcaWZ4XFNFVGRpc3BlbnZzaXplXHNtYWxsd29yZAorICAgIFxzbWFsbGV4YW1wbGVmb250cyBccm0KKyAgXGZpCit9CitcZGVmXHNldHNtYWxsZGlzcGVudnslCisgIFxpZnhcU0VUZGlzcGVudnNpemVcbm9zbWFsbHdvcmQKKyAgXGVsc2UKKyAgICBcc21hbGxleGFtcGxlZm9udHMgXHJtCisgIFxmaQorfQorCislIFdlIG9mdGVuIGRlZmluZSB0d28gZW52aXJvbm1lbnRzLCBAZm9vIGFuZCBAc21hbGxmb28uCislIExldCdzIGRvIGl0IGJ5IG9uZSBjb21tYW5kOgorXGRlZlxtYWtlZGlzcGVudiAjMSMyeworICBcZXhwYW5kYWZ0ZXJcZW52ZGVmXGNzbmFtZSMxXGVuZGNzbmFtZSB7XHNldG5vcm1hbGRpc3BlbnYgIzJ9CisgIFxleHBhbmRhZnRlclxlbnZkZWZcY3NuYW1lIHNtYWxsIzFcZW5kY3NuYW1lIHtcc2V0c21hbGxkaXNwZW52ICMyfQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lIFxhZnRlcmVudmJyZWFrCisgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIEVzbWFsbCMxXGVuZGNzbmFtZSBcYWZ0ZXJlbnZicmVhaworfQorCislIERlZmluZSB0d28gc3lub255bXM6CitcZGVmXG1ha2V0d29kaXNwZW52cyAjMSMyIzN7CisgIFxtYWtlZGlzcGVudnsjMX17IzN9CisgIFxtYWtlZGlzcGVudnsjMn17IzN9Cit9CisKKyUgQGxpc3A6IGluZGVudGVkLCBuYXJyb3dlZCwgdHlwZXdyaXRlciBmb250OyBAZXhhbXBsZTogc2FtZSBhcyBAbGlzcC4KKyUKKyUgQHNtYWxsZXhhbXBsZSBhbmQgQHNtYWxsbGlzcDogdXNlIHNtYWxsZXIgZm9udHMuCislIE9yaWdpbmFsbHkgY29udHJpYnV0ZWQgYnkgUGF2ZWxAeGVyb3guCislCitcbWFrZXR3b2Rpc3BlbnZzIHtsaXNwfXtleGFtcGxlfXslCisgIFxub25maWxsc3RhcnQKKyAgXHR0CisgIFxsZXRca2JkZm9udCA9IFxrYmRleGFtcGxlZm9udCAlIEFsbG93IEBrYmQgdG8gZG8gc29tZXRoaW5nIHNwZWNpYWwuCisgIFxnb2JibGUgICAgICAgJSBlYXQgcmV0dXJuCit9CisKKyUgQGRpc3BsYXkvQHNtYWxsZGlzcGxheTogc2FtZSBhcyBAbGlzcCBleGNlcHQga2VlcCBjdXJyZW50IGZvbnQuCislCitcbWFrZWRpc3BlbnYge2Rpc3BsYXl9eyUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZvcm1hdC9Ac21hbGxmb3JtYXQ6IHNhbWUgYXMgQGRpc3BsYXkgZXhjZXB0IGRvbid0IG5hcnJvdyBtYXJnaW5zLgorJQorXG1ha2VkaXNwZW52e2Zvcm1hdH17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICBcZ29iYmxlCit9CisKKyUgQGZsdXNobGVmdDogc2FtZSBhcyBAZm9ybWF0LCBidXQgZG9lc24ndCBvYmV5IFxTRVRkaXNwZW52c2l6ZS4KK1xlbnZkZWZcZmx1c2hsZWZ0eyUKKyAgXGxldFxub25hcnJvd2luZyA9IHQlCisgIFxub25maWxsc3RhcnQKKyAgXGdvYmJsZQorfQorXGxldFxFZmx1c2hsZWZ0ID0gXGFmdGVyZW52YnJlYWsKKworJSBAZmx1c2hyaWdodC4KKyUKK1xlbnZkZWZcZmx1c2hyaWdodHslCisgIFxsZXRcbm9uYXJyb3dpbmcgPSB0JQorICBcbm9uZmlsbHN0YXJ0CisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IDBwdCBwbHVzIDFmaWxsCisgIFxnb2JibGUKK30KK1xsZXRcRWZsdXNocmlnaHQgPSBcYWZ0ZXJlbnZicmVhaworCisKKyUgQHF1b3RhdGlvbiBkb2VzIG5vcm1hbCBsaW5lYnJlYWtpbmcgKGhlbmNlIHdlIGNhbid0IHVzZSBcbm9uZmlsbHN0YXJ0KQorJSBhbmQgbmFycm93cyB0aGUgbWFyZ2lucy4gIFdlIGtlZXAgXHBhcnNraXAgbm9uemVybyBpbiBnZW5lcmFsLCBzaW5jZQorJSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4gIFNvLCB3aGVuIHVzaW5nIFxhYm92ZWVudmJyZWFrIGFuZAorJSBcYWZ0ZXJlbnZicmVhaywgdGVtcG9yYXJpbHkgbWFrZSBccGFyc2tpcCAwLgorJQorXGVudmRlZlxxdW90YXRpb257JQorICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCisgIFxwYXJpbmRlbnQ9MHB0CisgICUKKyAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGlmeFxub25hcnJvd2luZ1xyZWxheAorICAgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IFxsaXNwbmFycm93aW5nCisgICAgXGV4ZGVudGFtb3VudCA9IFxsaXNwbmFycm93aW5nCisgIFxlbHNlCisgICAgXGxldFxub25hcnJvd2luZyA9IFxyZWxheAorICBcZmkKKyAgXHBhcnNlYXJnXHF1b3RhdGlvbmxhYmVsCit9CisKKyUgV2UgaGF2ZSByZXRhaW5lZCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZQorJSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRXF1b3RhdGlvbnslCisgIFxwYXIKKyAgXGlmeFxxdW90YXRpb25hdXRob3JcdW5kZWZpbmVkXGVsc2UKKyAgICAlIGluZGVudCBhIGJpdC4KKyAgICBcbGVmdGxpbmV7XGtlcm4gMlxsZWZ0c2tpcCBcc2wgLS0tXHF1b3RhdGlvbmF1dGhvcn0lCisgIFxmaQorICB7XHBhcnNraXA9MHB0IFxhZnRlcmVudmJyZWFrfSUKK30KKworJSBJZiB3ZSdyZSBnaXZlbiBhbiBhcmd1bWVudCwgdHlwZXNldCBpdCBpbiBib2xkIHdpdGggYSBjb2xvbiBhZnRlci4KK1xkZWZccXVvdGF0aW9ubGFiZWwjMXslCisgIFxkZWZcdGVtcHsjMX0lCisgIFxpZnhcdGVtcFxlbXB0eSBcZWxzZQorICAgIHtcYmYgIzE6IH0lCisgIFxmaQorfQorCisKKyUgTGFUZVgtbGlrZSBAdmVyYmF0aW0uLi5AZW5kIHZlcmJhdGltIGFuZCBAdmVyYns8Y2hhcj4uLi48Y2hhcj59CislIElmIHdlIHdhbnQgdG8gYWxsb3cgYW55IDxjaGFyPiBhcyBkZWxpbWl0ZXIsCislIHdlIG5lZWQgdGhlIGN1cmx5IGJyYWNlcyBzbyB0aGF0IG1ha2VpbmZvIHNlZXMgdGhlIEB2ZXJiIGNvbW1hbmQsIGVnOgorJSBgQHZlcmJ4Li4ueCcgd291bGQgbG9vayBsaWtlIHRoZSAnQHZlcmJ4JyBjb21tYW5kLiAgLS1qYW5uZWtlQGdudS5vcmcKKyUKKyUgW0tudXRoXTogRG9uYWxkIEVydmluIEtudXRoLCAxOTk2LiAgVGhlIFRlWGJvb2suCislCislIFtLbnV0aF0gcC4zNDQ7IG9ubHkgd2UgbmVlZCB0byBkbyB0aGUgb3RoZXIgY2hhcmFjdGVycyBUZXhpbmZvIHNldHMKKyUgYWN0aXZlIHRvby4gIE90aGVyd2lzZSwgdGhleSBnZXQgbG9zdCBhcyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9uIGEKKyUgdmVyYmF0aW0gbGluZS4KK1xkZWZcZG9zcGVjaWFsc3slCisgIFxkb1wgXGRvXFxcZG9ce1xkb1x9XGRvXCRcZG9cJiUKKyAgXGRvXCNcZG9cXlxkb1xeXktcZG9cX1xkb1xeXkFcZG9cJVxkb1x+JQorICBcZG9cPFxkb1w+XGRvXHxcZG9cQFxkbytcZG9cIiUKK30KKyUKKyUgW0tudXRoXSBwLiAzODAKK1xkZWZcdW5jYXRjb2Rlc3BlY2lhbHN7JQorICBcZGVmXGRvIyMxe1xjYXRjb2RlYCMjMT1cb3RoZXJ9XGRvc3BlY2lhbHN9CislCislIFtLbnV0aF0gcHAuIDM4MCwzODEsMzkxCislIERpc2FibGUgU3BhbmlzaCBsaWdhdHVyZXMgP2AgYW5kICFgIG9mIFx0dCBmb250CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcYD1cYWN0aXZlXGdkZWZge1xyZWxheFxscX0KK1xlbmRncm91cAorJQorJSBTZXR1cCBmb3IgdGhlIEB2ZXJiIGNvbW1hbmQuCislCislIEVpZ2h0IHNwYWNlcyBmb3IgYSB0YWIKK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXkk9XGFjdGl2ZQorICBcZ2RlZlx0YWJlaWdodHNwYWNlc3tcY2F0Y29kZWBcXl5JPVxhY3RpdmVcZGVmXl5Je1wgXCBcIFwgXCBcIFwgXCB9fQorXGVuZGdyb3VwCislCitcZGVmXHNldHVwdmVyYnslCisgIFx0dCAgJSBlYXNpZXN0IChhbmQgY29udmVudGlvbmFsbHkgdXNlZCkgZm9udCBmb3IgdmVyYmF0aW0KKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmVpZ2h0c3BhY2VzCisgICUgUmVzcGVjdCBsaW5lIGJyZWFrcywKKyAgJSBwcmludCBzcGVjaWFsIHN5bWJvbHMgYXMgdGhlbXNlbHZlcywgYW5kCisgICUgbWFrZSBlYWNoIHNwYWNlIGNvdW50CisgICUgbXVzdCBkbyBpbiB0aGlzIG9yZGVyOgorICBcb2JleWxpbmVzIFx1bmNhdGNvZGVzcGVjaWFscyBcc2Vwc3BhY2VzCit9CisKKyUgU2V0dXAgZm9yIHRoZSBAdmVyYmF0aW0gZW52aXJvbm1lbnQKKyUKKyUgUmVhbCB0YWIgZXhwYW5zaW9uCitcbmV3ZGltZW5cdGFidyBcc2V0Ym94MD1caGJveHtcdHRcc3BhY2V9IFx0YWJ3PThcd2QwICUgdGFiIGFtb3VudAorJQorXGRlZlxzdGFydHRhYmJveHtcc2V0Ym94MD1caGJveFxiZ3JvdXB9CitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgXGdkZWZcdGFiZXhwYW5keyUKKyAgICBcY2F0Y29kZWBcXl5JPVxhY3RpdmUKKyAgICBcZGVmXl5Je1xsZWF2ZXZtb2RlXGVncm91cAorICAgICAgXGRpbWVuMD1cd2QwICUgdGhlIHdpZHRoIHNvIGZhciwgb3Igc2luY2UgdGhlIHByZXZpb3VzIHRhYgorICAgICAgXGRpdmlkZVxkaW1lbjAgYnlcdGFidworICAgICAgXG11bHRpcGx5XGRpbWVuMCBieVx0YWJ3ICUgY29tcHV0ZSBwcmV2aW91cyBtdWx0aXBsZSBvZiBcdGFidworICAgICAgXGFkdmFuY2VcZGltZW4wIGJ5XHRhYncgICUgYWR2YW5jZSB0byBuZXh0IG11bHRpcGxlIG9mIFx0YWJ3CisgICAgICBcd2QwPVxkaW1lbjAgXGJveDAgXHN0YXJ0dGFiYm94CisgICAgfSUKKyAgfQorXGVuZGdyb3VwCitcZGVmXHNldHVwdmVyYmF0aW17JQorICBcbGV0XG5vbmFycm93aW5nID0gdCUKKyAgXG5vbmZpbGxzdGFydAorICAlIEVhc2llc3QgKGFuZCBjb252ZW50aW9uYWxseSB1c2VkKSBmb250IGZvciB2ZXJiYXRpbQorICBcdHQKKyAgXGRlZlxwYXJ7XGxlYXZldm1vZGVcZWdyb3VwXGJveDBcZW5kZ3JhZn0lCisgIFxjYXRjb2RlYFxgPVxhY3RpdmUKKyAgXHRhYmV4cGFuZAorICAlIFJlc3BlY3QgbGluZSBicmVha3MsCisgICUgcHJpbnQgc3BlY2lhbCBzeW1ib2xzIGFzIHRoZW1zZWx2ZXMsIGFuZAorICAlIG1ha2UgZWFjaCBzcGFjZSBjb3VudAorICAlIG11c3QgZG8gaW4gdGhpcyBvcmRlcjoKKyAgXG9iZXlsaW5lcyBcdW5jYXRjb2Rlc3BlY2lhbHMgXHNlcHNwYWNlcworICBcZXZlcnlwYXJ7XHN0YXJ0dGFiYm94fSUKK30KKworJSBEbyB0aGUgQHZlcmIgbWFnaWM6IHZlcmJhdGltIHRleHQgaXMgcXVvdGVkIGJ5IHVuaXF1ZQorJSBkZWxpbWl0ZXIgY2hhcmFjdGVycy4gIEJlZm9yZSBmaXJzdCBkZWxpbWl0ZXIgZXhwZWN0IGEKKyUgcmlnaHQgYnJhY2UsIGFmdGVyIGxhc3QgZGVsaW1pdGVyIGV4cGVjdCBjbG9zaW5nIGJyYWNlOgorJQorJSAgICBcZGVmXGRvdmVyYid7JzxjaGFyPiMxPGNoYXI+J30neyMxfQorJQorJSBbS251dGhdIHAuIDM4Mjsgb25seSBlYXQgb3V0ZXIge30KK1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFs9MVxjYXRjb2RlYF09MlxjYXRjb2RlYFx7PVxvdGhlclxjYXRjb2RlYFx9PVxvdGhlcgorICBcZ2RlZlxkb3ZlcmJ7IzFbXGRlZlxuZXh0IyMxIzF9WyMjMVxlbmRncm91cF1cbmV4dF0KK1xlbmRncm91cAorJQorXGRlZlx2ZXJie1xiZWdpbmdyb3VwXHNldHVwdmVyYlxkb3ZlcmJ9CislCislCislIERvIHRoZSBAdmVyYmF0aW0gbWFnaWM6IGRlZmluZSB0aGUgbWFjcm8gXGRvdmVyYmF0aW0gc28gdGhhdAorJSB0aGUgKGZpcnN0KSBhcmd1bWVudCBlbmRzIHdoZW4gJ0BlbmQgdmVyYmF0aW0nIGlzIHJlYWNoZWQsIGllOgorJQorJSAgICAgXGRlZlxkb3ZlcmJhdGltIzFAZW5kIHZlcmJhdGlteyMxfQorJQorJSBGb3IgVGV4aW5mbyBpdCdzIGEgbG90IGVhc2llciB0aGFuIGZvciBMYVRlWCwKKyUgYmVjYXVzZSB0ZXhpbmZvJ3MgXHZlcmJhdGltIGRvZXNuJ3Qgc3RvcCBhdCAnXGVuZHt2ZXJiYXRpbX0nOgorJSB3ZSBuZWVkIG5vdCByZWRlZmluZSAnXCcsICd7JyBhbmQgJ30nLgorJQorJSBJbnNwaXJlZCBieSBMYVRlWCdzIHZlcmJhdGltIGNvbW1hbmQgc2V0IFtsYXRleC5sdHhdCislCitcYmVnaW5ncm91cAorICBcY2F0Y29kZWBcID1cYWN0aXZlCisgIFxvYmV5bGluZXMgJQorICAlIGlnbm9yZSBldmVyeXRoaW5nIHVwIHRvIHRoZSBmaXJzdCBeXk0sIHRoYXQncyB0aGUgbmV3bGluZSBhdCB0aGUgZW5kCisgICUgb2YgdGhlIEB2ZXJiYXRpbSBpbnB1dCBsaW5lIGl0c2VsZi4gIE90aGVyd2lzZSB3ZSBnZXQgYW4gZXh0cmEgYmxhbmsKKyAgJSBsaW5lIGluIHRoZSBvdXRwdXQuCisgIFx4ZGVmXGRvdmVyYmF0aW0jMV5eTSMyQGVuZCB2ZXJiYXRpbXsjMlxub2V4cGFuZFxlbmRcZ29iYmxlIHZlcmJhdGltfSUKKyAgJSBXZSByZWFsbHkgd2FudCB7Li4uXGVuZCB2ZXJiYXRpbX0gaW4gdGhlIGJvZHkgb2YgdGhlIG1hY3JvLCBidXQKKyAgJSB3aXRob3V0IHRoZSBhY3RpdmUgc3BhY2U7IHRodXMgd2UgaGF2ZSB0byB1c2UgXHhkZWYgYW5kIFxnb2JibGUuCitcZW5kZ3JvdXAKKyUKK1xlbnZkZWZcdmVyYmF0aW17JQorICAgIFxzZXR1cHZlcmJhdGltXGRvdmVyYmF0aW0KK30KK1xsZXRcRXZlcmJhdGltID0gXGFmdGVyZW52YnJlYWsKKworCislIEB2ZXJiYXRpbWluY2x1ZGUgRklMRSAtIGluc2VydCB0ZXh0IG9mIGZpbGUgaW4gdmVyYmF0aW0gZW52aXJvbm1lbnQuCislCitcZGVmXHZlcmJhdGltaW5jbHVkZXtccGFyc2Vhcmd1c2luZ1xmaWxlbmFtZWNhdGNvZGVzXGRvdmVyYmF0aW1pbmNsdWRlfQorJQorXGRlZlxkb3ZlcmJhdGltaW5jbHVkZSMxeyUKKyAgeyUKKyAgICBcbWFrZXZhbHVlZXhwYW5kYWJsZQorICAgIFxzZXR1cHZlcmJhdGltCisgICAgXGlucHV0ICMxCisgICAgXGFmdGVyZW52YnJlYWsKKyAgfSUKK30KKworJSBAY29weWluZyAuLi4gQGVuZCBjb3B5aW5nLgorJSBTYXZlIHRoZSB0ZXh0IGF3YXkgZm9yIEBpbnNlcnRjb3B5aW5nIGxhdGVyLgorJQorJSBXZSBzYXZlIHRoZSB1bmludGVycHJldGVkIHRva2VucywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYSBib3guCislIFNhdmluZyB0aGUgdGV4dCBpbiBhIGJveCB3b3VsZCBiZSBtdWNoIGVhc2llciwgYnV0IHRoZW4gYWxsIHRoZQorJSB0eXBlc2V0dGluZyBjb21tYW5kcyAoQHNtYWxsYm9vaywgZm9udCBjaGFuZ2VzLCBldGMuKSBoYXZlIHRvIGJlIGRvbmUKKyUgYmVmb3JlaGFuZCAtLSBhbmQgYSkgd2Ugd2FudCBAY29weWluZyB0byBiZSBkb25lIGZpcnN0IGluIHRoZSBzb3VyY2UKKyUgZmlsZTsgYikgbGV0dGluZyB1c2VycyBkZWZpbmUgdGhlIGZyb250bWF0dGVyIGluIGFzIGZsZXhpYmxlIG9yZGVyIGFzCislIHBvc3NpYmxlIGlzIHZlcnkgZGVzaXJhYmxlLgorJQorXGRlZlxjb3B5aW5ne1xjaGVja2Vudnt9XGJlZ2luZ3JvdXBcc2NhbmFyZ2N0eHRcZG9jb3B5aW5nfQorXGRlZlxkb2NvcHlpbmcjMUBlbmQgY29weWluZ3tcZW5kZ3JvdXBcZGVmXGNvcHlpbmd0ZXh0eyMxfX0KKyUKK1xkZWZcaW5zZXJ0Y29weWluZ3slCisgIFxiZWdpbmdyb3VwCisgICAgXHBhcmluZGVudCA9IDBwdCAgJSBwYXJhZ3JhcGggaW5kZW50YXRpb24gbG9va3Mgd3Jvbmcgb24gdGl0bGUgcGFnZQorICAgIFxzY2FuZXhwXGNvcHlpbmd0ZXh0CisgIFxlbmRncm91cAorfQorCitcbWVzc2FnZXtkZWZ1bnMsfQorJSBAZGVmdW4gZXRjLgorCitcbmV3c2tpcFxkZWZib2R5aW5kZW50IFxkZWZib2R5aW5kZW50PS40aW4KK1xuZXdza2lwXGRlZmFyZ3NpbmRlbnQgXGRlZmFyZ3NpbmRlbnQ9NTBwdAorXG5ld3NraXBcZGVmbGFzdGFyZ21hcmdpbiBcZGVmbGFzdGFyZ21hcmdpbj0xOHB0CisKKyUgU3RhcnQgdGhlIHByb2Nlc3Npbmcgb2YgQGRlZmZuOgorXGRlZlxzdGFydGRlZnVueyUKKyAgXGlmbnVtXGxhc3RwZW5hbHR5PDEwMDAwCisgICAgXG1lZGJyZWFrCisgIFxlbHNlCisgICAgJSBJZiB0aGVyZSBhcmUgdHdvIEBkZWYgY29tbWFuZHMgaW4gYSByb3csIHdlJ2xsIGhhdmUgYSBcbm9icmVhaywKKyAgICAlIHdoaWNoIGlzIHRoZXJlIHRvIGtlZXAgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0aW9uIHRvZ2V0aGVyIHdpdGggaXRzCisgICAgJSBoZWFkZXIuICBCdXQgaWYgdGhlcmUncyBub3RoaW5nIGJ1dCBoZWFkZXJzLCB3ZSBuZWVkIHRvIGFsbG93IGEKKyAgICAlIGJyZWFrIHNvbWV3aGVyZS4gIENoZWNrIHNwZWNpZmljYWxseSBmb3IgcGVuYWx0eSAxMDAwMiwgaW5zZXJ0ZWQKKyAgICAlIGJ5IFxkZWZhcmdzY29tbW9uZW5kaW5nLCBpbnN0ZWFkIG9mIDEwMDAwLCBzaW5jZSB0aGUgc2VjdGlvbmluZworICAgICUgY29tbWFuZHMgYWxzbyBpbnNlcnQgYSBub2JyZWFrIHBlbmFsdHksIGFuZCB3ZSBkb24ndCB3YW50IHRvIGFsbG93CisgICAgJSBhIGJyZWFrIGJldHdlZW4gYSBzZWN0aW9uIGhlYWRpbmcgYW5kIGEgZGVmdW4uCisgICAgJSAKKyAgICBcaWZudW1cbGFzdHBlbmFsdHk9MTAwMDIgXHBlbmFsdHkyMDAwIFxmaQorICAgICUKKyAgICAlIFNpbWlsYXJseSwgYWZ0ZXIgYSBzZWN0aW9uIGhlYWRpbmcsIGRvIG5vdCBhbGxvdyBhIGJyZWFrLgorICAgICUgQnV0IGRvIGluc2VydCB0aGUgZ2x1ZS4KKyAgICBcbWVkc2tpcCAgJSBwcmVjZWRlZCBieSBkaXNjYXJkYWJsZSBwZW5hbHR5LCBzbyBub3QgYSBicmVha3BvaW50CisgIFxmaQorICAlCisgIFxwYXJpbmRlbnQ9MGluCisgIFxhZHZhbmNlXGxlZnRza2lwIGJ5IFxkZWZib2R5aW5kZW50CisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKK30KKworXGRlZlxkb2RlZnVueCMxeyUKKyAgJSBGaXJzdCwgY2hlY2sgd2hldGhlciB3ZSBhcmUgaW4gdGhlIHJpZ2h0IGVudmlyb25tZW50OgorICBcY2hlY2tlbnYjMSUKKyAgJQorICAlIEFzIGFib3ZlLCBhbGxvdyBsaW5lIGJyZWFrIGlmIHdlIGhhdmUgbXVsdGlwbGUgeCBoZWFkZXJzIGluIGEgcm93LgorICAlIEl0J3Mgbm90IGEgZ3JlYXQgcGxhY2UsIHRob3VnaC4KKyAgXGlmbnVtXGxhc3RwZW5hbHR5PTEwMDAyIFxwZW5hbHR5MzAwMCBcZmkKKyAgJQorICAlIEFuZCBub3csIGl0J3MgdGltZSB0byByZXVzZSB0aGUgYm9keSBvZiB0aGUgb3JpZ2luYWwgZGVmdW46CisgIFxleHBhbmRhZnRlclxnb2JibGVkZWZ1biMxJQorfQorXGRlZlxnb2JibGVkZWZ1biMxXHN0YXJ0ZGVmdW57fQorCislIFxwcmludGRlZnVubGluZSBcZGVmZm5oZWFkZXJ7dGV4dH0KKyUKK1xkZWZccHJpbnRkZWZ1bmxpbmUjMSMyeyUKKyAgXGJlZ2luZ3JvdXAKKyAgICAlIGNhbGwgXGRlZmZuaGVhZGVyOgorICAgICMxIzIgXGVuZGhlYWRlcgorICAgICUgY29tbW9uIGVuZGluZzoKKyAgICBcaW50ZXJsaW5lcGVuYWx0eSA9IDEwMDAwCisgICAgXGFkdmFuY2VccmlnaHRza2lwIGJ5IDBwdCBwbHVzIDFmaWwKKyAgICBcZW5kZ3JhZgorICAgIFxub2JyZWFrXHZza2lwIC1ccGFyc2tpcAorICAgIFxwZW5hbHR5IDEwMDAyICAlIHNpZ25hbCB0byBcc3RhcnRkZWZ1biBhbmQgXGRvZGVmdW54CisgICAgJSBTb21lIG9mIHRoZSBAZGVmdW4tdHlwZSB0YWdzIGRvIG5vdCBlbmFibGUgbWFnaWMgcGFyZW50aGVzZXMsCisgICAgJSByZW5kZXJpbmcgdGhlIGZvbGxvd2luZyBjaGVjayByZWR1bmRhbnQuICBCdXQgd2UgZG9uJ3Qgb3B0aW1pemUuCisgICAgXGNoZWNrcGFyZW5jb3VudHMKKyAgXGVuZGdyb3VwCit9CisKK1xkZWZcRWRlZnVue1xlbmRncmFmXG1lZGJyZWFrfQorCislIFxtYWtlZGVmdW57ZGVmZm59IGNyZWF0ZXMgXGRlZmZuLCBcZGVmZm54IGFuZCBcRWRlZmZuOworJSB0aGUgb25seSB0aGluZyByZW1haW5uaWcgaXMgdG8gZGVmaW5lIFxkZWZmbmhlYWRlci4KKyUKK1xkZWZcbWFrZWRlZnVuIzF7JQorICBcZXhwYW5kYWZ0ZXJcbGV0XGNzbmFtZSBFIzFcZW5kY3NuYW1lID0gXEVkZWZ1bgorICBcZWRlZlx0ZW1we1xub2V4cGFuZFxkb21ha2VkZWZ1bgorICAgIFxtYWtlY3NuYW1leyMxfVxtYWtlY3NuYW1leyMxeH1cbWFrZWNzbmFtZXsjMWhlYWRlcn19JQorICBcdGVtcAorfQorCislIFxkb21ha2VkZWZ1biBcZGVmZm4gXGRlZmZueCBcZGVmZm5oZWFkZXIKKyUKKyUgRGVmaW5lIFxkZWZmbiBhbmQgXGRlZmZueCwgd2l0aG91dCBwYXJhbWV0ZXJzLgorJSBcZGVmZm5oZWFkZXIgaGFzIHRvIGJlIGRlZmluZWQgZXhwbGljaXRseS4KKyUKK1xkZWZcZG9tYWtlZGVmdW4jMSMyIzN7JQorICBcZW52ZGVmIzF7JQorICAgIFxzdGFydGRlZnVuCisgICAgXHBhcnNlYXJndXNpbmdcYWN0aXZlcGFyZW5ze1xwcmludGRlZnVubGluZSMzfSUKKyAgfSUKKyAgXGRlZiMye1xkb2RlZnVueCMxfSUKKyAgXGRlZiMzJQorfQorCislJSUgVW50eXBlZCBmdW5jdGlvbnM6CisKKyUgQGRlZmZuIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZmbn17XGRlZmZuZ2VuZXJhbHt9fQorCislIEBkZWZmbiBjYXRlZ29yeSBjbGFzcyBuYW1lIGFyZ3MKK1xtYWtlZGVmdW57ZGVmb3B9IzEge1xkZWZvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmb3BvbiB7Y2F0ZWdvcnkgb259Y2xhc3MgbmFtZSBhcmdzCitcZGVmXGRlZm9wb24jMSMyIHtcZGVmZm5nZW5lcmFse1xwdXR3b3Jkb25cIFxjb2RleyMyfX17IzFcIFxjb2RleyMyfX0gfQorCislIFxkZWZmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSBuYW1lIGFyZ3MKKyUKK1xkZWZcZGVmZm5nZW5lcmFsIzEjMiAjMyAjNFxlbmRoZWFkZXJ7JQorICAlIFJlbWVtYmVyIHRoYXQgXGRvc3ViaW5ke2ZufXtmb299e30gaXMgZXF1aXZhbGVudCB0byBcZG9pbmR7Zm59e2Zvb30uCisgIFxkb3N1YmluZHtmbn17XGNvZGV7IzN9fXsjMX0lCisgIFxkZWZuYW1leyMyfXt9eyMzfVxtYWdpY2FtcFxkZWZ1bmFyZ3N7IzRcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIGZ1bmN0aW9uczoKKworJSBAZGVmdHlwZWZuIGNhdGVnb3J5IHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVmbn17XGRlZnR5cGVmbmdlbmVyYWx7fX0KKworJSBAZGVmdHlwZW9wIGNhdGVnb3J5IGNsYXNzIHR5cGUgbmFtZSBhcmdzCitcbWFrZWRlZnVue2RlZnR5cGVvcH0jMSB7XGRlZnR5cGVvcG9ueyMxXCBccHV0d29yZG9ufX0KKworJSBcZGVmdHlwZW9wb24ge2NhdGVnb3J5IG9ufWNsYXNzIHR5cGUgbmFtZSBhcmdzCitcZGVmXGRlZnR5cGVvcG9uIzEjMiB7XGRlZnR5cGVmbmdlbmVyYWx7XHB1dHdvcmRvblwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVmbmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIG5hbWUgYXJncworJQorXGRlZlxkZWZ0eXBlZm5nZW5lcmFsIzEjMiAjMyAjNCAjNVxlbmRoZWFkZXJ7JQorICBcZG9zdWJpbmR7Zm59e1xjb2RleyM0fX17IzF9JQorICBcZGVmbmFtZXsjMn17IzN9eyM0fVxkZWZ1bmFyZ3N7IzVcdW5za2lwfSUKK30KKworJSUlIFR5cGVkIHZhcmlhYmxlczoKKworJSBAZGVmdHlwZXZyIGNhdGVnb3J5IHR5cGUgdmFyIGFyZ3MKK1xtYWtlZGVmdW57ZGVmdHlwZXZyfXtcZGVmdHlwZWN2Z2VuZXJhbHt9fQorCislIEBkZWZ0eXBlY3YgY2F0ZWdvcnkgY2xhc3MgdHlwZSB2YXIgYXJncworXG1ha2VkZWZ1bntkZWZ0eXBlY3Z9IzEge1xkZWZ0eXBlY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZnR5cGVjdm9mIHtjYXRlZ29yeSBvZn1jbGFzcyB0eXBlIHZhciBhcmdzCitcZGVmXGRlZnR5cGVjdm9mIzEjMiB7XGRlZnR5cGVjdmdlbmVyYWx7XHB1dHdvcmRvZlwgXGNvZGV7IzJ9fXsjMVwgXGNvZGV7IzJ9fSB9CisKKyUgXGRlZnR5cGVjdmdlbmVyYWwge3N1YmluZH1jYXRlZ29yeSB0eXBlIHZhciBhcmdzCislCitcZGVmXGRlZnR5cGVjdmdlbmVyYWwjMSMyICMzICM0ICM1XGVuZGhlYWRlcnslCisgIFxkb3N1YmluZHt2cn17XGNvZGV7IzR9fXsjMX0lCisgIFxkZWZuYW1leyMyfXsjM317IzR9XGRlZnVuYXJnc3sjNVx1bnNraXB9JQorfQorCislJSUgVW50eXBlZCB2YXJpYWJsZXM6CisKKyUgQGRlZnZyIGNhdGVnb3J5IHZhciBhcmdzCitcbWFrZWRlZnVue2RlZnZyfSMxIHtcZGVmdHlwZXZyaGVhZGVyeyMxfSB7fSB9CisKKyUgQGRlZmN2IGNhdGVnb3J5IGNsYXNzIHZhciBhcmdzCitcbWFrZWRlZnVue2RlZmN2fSMxIHtcZGVmY3ZvZnsjMVwgXHB1dHdvcmRvZn19CisKKyUgXGRlZmN2b2Yge2NhdGVnb3J5IG9mfWNsYXNzIHZhciBhcmdzCitcZGVmXGRlZmN2b2YjMSMyIHtcZGVmdHlwZWN2b2Z7IzF9IzIge30gfQorCislJSUgVHlwZToKKyUgQGRlZnRwIGNhdGVnb3J5IG5hbWUgYXJncworXG1ha2VkZWZ1bntkZWZ0cH0jMSAjMiAjM1xlbmRoZWFkZXJ7JQorICBcZG9pbmR7dHB9e1xjb2RleyMyfX0lCisgIFxkZWZuYW1leyMxfXt9eyMyfVxkZWZ1bmFyZ3N7IzNcdW5za2lwfSUKK30KKworJSBSZW1haW5pbmcgQGRlZnVuLWxpa2Ugc2hvcnRjdXRzOgorXG1ha2VkZWZ1bntkZWZ1bn17XGRlZmZuaGVhZGVye1xwdXR3b3JkRGVmZnVuY30gfQorXG1ha2VkZWZ1bntkZWZtYWN9e1xkZWZmbmhlYWRlcntccHV0d29yZERlZm1hY30gfQorXG1ha2VkZWZ1bntkZWZzcGVjfXtcZGVmZm5oZWFkZXJ7XHB1dHdvcmREZWZzcGVjfSB9CitcbWFrZWRlZnVue2RlZnR5cGVmdW59e1xkZWZ0eXBlZm5oZWFkZXJ7XHB1dHdvcmREZWZmdW5jfSB9CitcbWFrZWRlZnVue2RlZnZhcn17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmdmFyfSB9CitcbWFrZWRlZnVue2RlZm9wdH17XGRlZnZyaGVhZGVye1xwdXR3b3JkRGVmb3B0fSB9CitcbWFrZWRlZnVue2RlZnR5cGV2YXJ9e1xkZWZ0eXBldnJoZWFkZXJ7XHB1dHdvcmREZWZ2YXJ9IH0KK1xtYWtlZGVmdW57ZGVmbWV0aG9kfXtcZGVmb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZnR5cGVtZXRob2R9e1xkZWZ0eXBlb3BvblxwdXR3b3JkTWV0aG9kb259CitcbWFrZWRlZnVue2RlZml2YXJ9e1xkZWZjdm9mXHB1dHdvcmRJbnN0YW5jZVZhcmlhYmxlb2Z9CitcbWFrZWRlZnVue2RlZnR5cGVpdmFyfXtcZGVmdHlwZWN2b2ZccHV0d29yZEluc3RhbmNlVmFyaWFibGVvZn0KKworJSBcZGVmbmFtZSwgd2hpY2ggZm9ybWF0cyB0aGUgbmFtZSBvZiB0aGUgQGRlZiAobm90IHRoZSBhcmdzKS4KKyUgIzEgaXMgdGhlIGNhdGVnb3J5LCBzdWNoIGFzICJGdW5jdGlvbiIuCislICMyIGlzIHRoZSByZXR1cm4gdHlwZSwgaWYgYW55LgorJSAjMyBpcyB0aGUgZnVuY3Rpb24gbmFtZS4KKyUKKyUgV2UgYXJlIGZvbGxvd2VkIGJ5IChidXQgbm90IHBhc3NlZCkgdGhlIGFyZ3VtZW50cywgaWYgYW55LgorJQorXGRlZlxkZWZuYW1lIzEjMiMzeyUKKyAgJSBHZXQgdGhlIHZhbHVlcyBvZiBcbGVmdHNraXAgYW5kIFxyaWdodHNraXAgYXMgdGhleSB3ZXJlIG91dHNpZGUgdGhlIEBkZWYuLi4KKyAgXGFkdmFuY2VcbGVmdHNraXAgYnkgLVxkZWZib2R5aW5kZW50CisgICUKKyAgJSBIb3cgd2UnbGwgZm9ybWF0IHRoZSB0eXBlIG5hbWUuICBQdXR0aW5nIGl0IGluIGJyYWNrZXRzIGhlbHBzCisgICUgZGlzdGluZ3Vpc2ggaXQgZnJvbSB0aGUgYm9keSB0ZXh0IHRoYXQgbWF5IGVuZCB1cCBvbiB0aGUgbmV4dCBsaW5lCisgICUganVzdCBiZWxvdyBpdC4KKyAgXGRlZlx0ZW1weyMxfSUKKyAgXHNldGJveDA9XGhib3h7XGtlcm5cZGVmbGFzdGFyZ21hcmdpbiBcaWZ4XHRlbXBcZW1wdHlcZWxzZSBbXHJtXHRlbXBdXGZpfQorICAlCisgICUgRmlndXJlIG91dCBsaW5lIHNpemVzIGZvciB0aGUgcGFyYWdyYXBoIHNoYXBlLgorICAlIFRoZSBmaXJzdCBsaW5lIG5lZWRzIHNwYWNlIGZvciBcYm94MDsgYnV0IGlmIFxyaWdodHNraXAgaXMgbm9uemVybywKKyAgJSB3ZSBuZWVkIG9ubHkgc3BhY2UgZm9yIHRoZSBwYXJ0IG9mIFxib3gwIHdoaWNoIGV4Y2VlZHMgaXQ6CisgIFxkaW1lbjA9XGhzaXplICBcYWR2YW5jZVxkaW1lbjAgYnkgLVx3ZDAgIFxhZHZhbmNlXGRpbWVuMCBieSBccmlnaHRza2lwCisgICUgVGhlIGNvbnRpbnVhdGlvbnM6CisgIFxkaW1lbjI9XGhzaXplICBcYWR2YW5jZVxkaW1lbjIgYnkgLVxkZWZhcmdzaW5kZW50CisgICUgKHBsYWluLnRleCBzYXlzIHRoYXQgXGRpbWVuMSBzaG91bGQgYmUgdXNlZCBvbmx5IGFzIGdsb2JhbC4pCisgIFxwYXJzaGFwZSAyIDBpbiBcZGltZW4wIFxkZWZhcmdzaW5kZW50IFxkaW1lbjIKKyAgJQorICAlIFB1dCB0aGUgdHlwZSBuYW1lIHRvIHRoZSByaWdodCBtYXJnaW4uCisgIFxub2luZGVudAorICBcaGJveCB0byAwcHR7JQorICAgIFxoZmlsXGJveDAgXGtlcm4tXGhzaXplCisgICAgJSBcaHNpemUgaGFzIHRvIGJlIHNob3J0ZW5lZCB0aGlzIHdheToKKyAgICBca2VyblxsZWZ0c2tpcAorICAgICUgSW50ZW50aW9uYWxseSBkbyBub3QgcmVzcGVjdCBccmlnaHRza2lwLCBzaW5jZSB3ZSBuZWVkIHRoZSBzcGFjZS4KKyAgfSUKKyAgJQorICAlIEFsbG93IGFsbCBsaW5lcyB0byBiZSB1bmRlcmZ1bGwgd2l0aG91dCBjb21wbGFpbnQ6CisgIFx0b2xlcmFuY2U9MTAwMDAgXGhiYWRuZXNzPTEwMDAwCisgIFxleGRlbnRhbW91bnQ9XGRlZmJvZHlpbmRlbnQKKyAgeyUKKyAgICAlIGRlZnVuIGZvbnRzLiBXZSB1c2UgdHlwZXdyaXRlciBieSBkZWZhdWx0ICh1c2VkIHRvIGJlIGJvbGQpIGJlY2F1c2U6CisgICAgJSAuIHdlJ3JlIHByaW50aW5nIGlkZW50aWZpZXJzLCB0aGV5IHNob3VsZCBiZSBpbiB0dCBpbiBwcmluY2lwbGUuCisgICAgJSAuIGluIGxhbmd1YWdlcyB3aXRoIG1hbnkgYWNjZW50cywgc3VjaCBhcyBDemVjaCBvciBGcmVuY2gsIGl0J3MKKyAgICAlICAgY29tbW9uIHRvIGxlYXZlIGFjY2VudHMgb2ZmIGlkZW50aWZpZXJzLiAgVGhlIHJlc3VsdCBsb29rcyBvayBpbgorICAgICUgICB0dCwgYnV0IGV4Y2VlZGluZ2x5IHN0cmFuZ2UgaW4gcm0uCisgICAgJSAuIHdlIGRvbid0IHdhbnQgLS0gYW5kIC0tLSB0byBiZSB0cmVhdGVkIGFzIGxpZ2F0dXJlcy4KKyAgICAlIC4gdGhpcyBzdGlsbCBkb2VzIG5vdCBmaXggdGhlID9gIGFuZCAhYCBsaWdhdHVyZXMsIGJ1dCBzbyBmYXIgbm8KKyAgICAlICAgb25lIGhhcyBtYWRlIGlkZW50aWZpZXJzIHVzaW5nIHRoZW0gOikuCisgICAgXGRmIFx0dAorICAgIFxkZWZcdGVtcHsjMn0lIHJldHVybiB2YWx1ZSB0eXBlCisgICAgXGlmeFx0ZW1wXGVtcHR5XGVsc2UgXHRjbG9zZXtcdGVtcH0gXGZpCisgICAgIzMlIG91dHB1dCBmdW5jdGlvbiBuYW1lCisgIH0lCisgIHtccm1cZW5za2lwfSUgaHNraXAgMC41IGVtIG9mIFx0ZW5ybQorICAlCisgIFxib2xkYnJheAorICAlIGFyZ3VtZW50cyB3aWxsIGJlIG91dHB1dCBuZXh0LCBpZiBhbnkuCit9CisKKyUgUHJpbnQgYXJndW1lbnRzIGluIHNsYW50ZWQgcm9tYW4gKG5vdCB0dHNsKSwgaW5jb25zaXN0ZW50bHkgd2l0aCB1c2luZworJSB0dCBmb3IgdGhlIG5hbWUuICBUaGlzIGlzIGJlY2F1c2UgbGl0ZXJhbCB0ZXh0IGlzIHNvbWV0aW1lcyBuZWVkZWQgaW4KKyUgdGhlIGFyZ3VtZW50IGxpc3QgKGdyb2ZmIG1hbnVhbCksIGFuZCB0dHNsIGFuZCB0dCBhcmUgbm90IHZlcnkKKyUgZGlzdGluZ3Vpc2hhYmxlLiAgUHJldmVudCBoeXBoZW5hdGlvbiBhdCBgLScgY2hhcnMuCislCitcZGVmXGRlZnVuYXJncyMxeyUKKyAgJSB1c2Ugc2wgYnkgZGVmYXVsdCAobm90IHR0c2wpLAorICAlIHR0IGZvciB0aGUgbmFtZXMuCisgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCisgICUKKyAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCisgICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICBcbGV0XHZhcj1cdHRzbGFudGVkCisgICMxJQorICBcc2xcaHlwaGVuY2hhclxmb250PTQ1Cit9CisKKyUgV2Ugd2FudCAoKSZbXSB0byBwcmludCBzcGVjaWFsbHkgb24gdGhlIGRlZnVuIGxpbmUuCislCitcZGVmXGFjdGl2ZXBhcmVuc3slCisgIFxjYXRjb2RlYFwoPVxhY3RpdmUgXGNhdGNvZGVgXCk9XGFjdGl2ZQorICBcY2F0Y29kZWBcWz1cYWN0aXZlIFxjYXRjb2RlYFxdPVxhY3RpdmUKKyAgXGNhdGNvZGVgXCY9XGFjdGl2ZQorfQorCislIE1ha2UgY29udHJvbCBzZXF1ZW5jZXMgd2hpY2ggYWN0IGxpa2Ugbm9ybWFsIHBhcmVudGhlc2lzIGNoYXJzLgorXGxldFxscGFyZW4gPSAoIFxsZXRccnBhcmVuID0gKQorCislIEJlIHN1cmUgdGhhdCB3ZSBhbHdheXMgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGAoJywgZXRjLiAgRm9yIGV4YW1wbGUsCislIGlmIHRoZSBmbiBuYW1lIGhhcyBwYXJlbnMgaW4gaXQsIFxib2xkYnJheCB3aWxsIG5vdCBiZSBpbiBlZmZlY3QgeWV0LAorJSBzbyBUZVggd291bGQgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0IHVuZGVmaW5lZCBjb250cm9sIHNlcXVlbmNlLgoreworICBcYWN0aXZlcGFyZW5zCisgIFxnbG9iYWxcbGV0KD1cbHBhcmVuIFxnbG9iYWxcbGV0KT1ccnBhcmVuCisgIFxnbG9iYWxcbGV0Wz1cbGJyYWNrIFxnbG9iYWxcbGV0XT1ccmJyYWNrCisgIFxnbG9iYWxcbGV0JiA9IFwmCisKKyAgXGdkZWZcYm9sZGJyYXh7XGxldCg9XG9wbnJcbGV0KT1cY2xuclxsZXRbPVxsYnJiXGxldF09XHJicmJ9CisgIFxnZGVmXG1hZ2ljYW1we1xsZXQmPVxhbXBybX0KK30KKworXG5ld2NvdW50XHBhcmVuY291bnQKKworJSBJZiB3ZSBlbmNvdW50ZXIgJmZvbywgdGhlbiB0dXJuIG9uICgpLWhhY2tpbmcgYWZ0ZXJ3YXJkcworXG5ld2lmXGlmYW1wc2VlbgorXGRlZlxhbXBybSMxIHtcYW1wc2VlbnRydWV7XGJmXCYjMSB9fQorCitcZGVmXHBhcmVuZm9udHslCisgIFxpZmFtcHNlZW4KKyAgICAlIEF0IHRoZSBmaXJzdCBsZXZlbCwgcHJpbnQgcGFyZW5zIGluIHJvbWFuLAorICAgICUgb3RoZXJ3aXNlIHVzZSB0aGUgZGVmYXVsdCBmb250LgorICAgIFxpZm51bSBccGFyZW5jb3VudD0xIFxybSBcZmkKKyAgXGVsc2UKKyAgICAlIFRoZSBcc2YgcGFyZW5zIChpbiBcYm9sZGJyYXgpIGFjdHVhbGx5IGFyZSBhIGxpdHRsZSBib2xkZXIgdGhhbgorICAgICUgdGhlIGNvbnRhaW5lZCB0ZXh0LiAgVGhpcyBpcyBlc3BlY2lhbGx5IG5lZWRlZCBmb3IgWyBhbmQgXSAuCisgICAgXHNmCisgIFxmaQorfQorXGRlZlxpbmZpcnN0bGV2ZWwjMXslCisgIFxpZmFtcHNlZW4KKyAgICBcaWZudW1ccGFyZW5jb3VudD0xCisgICAgICAjMSUKKyAgICBcZmkKKyAgXGZpCit9CitcZGVmXGJmYWZ0ZXJ3b3JkIzEgeyMxIFxiZn0KKworXGRlZlxvcG5yeyUKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgMQorICB7XHBhcmVuZm9udCh9JQorICBcaW5maXJzdGxldmVsIFxiZmFmdGVyd29yZAorfQorXGRlZlxjbG5yeyUKKyAge1xwYXJlbmZvbnQpfSUKKyAgXGluZmlyc3RsZXZlbCBcc2wKKyAgXGdsb2JhbFxhZHZhbmNlXHBhcmVuY291bnQgYnkgLTEKK30KKworXG5ld2NvdW50XGJyYWNrY291bnQKK1xkZWZcbGJyYnslCisgIFxnbG9iYWxcYWR2YW5jZVxicmFja2NvdW50IGJ5IDEKKyAge1xiZlt9JQorfQorXGRlZlxyYnJieyUKKyAge1xiZl19JQorICBcZ2xvYmFsXGFkdmFuY2VcYnJhY2tjb3VudCBieSAtMQorfQorCitcZGVmXGNoZWNrcGFyZW5jb3VudHN7JQorICBcaWZudW1ccGFyZW5jb3VudD0wIFxlbHNlIFxiYWRwYXJlbmNvdW50IFxmaQorICBcaWZudW1cYnJhY2tjb3VudD0wIFxlbHNlIFxiYWRicmFja2NvdW50IFxmaQorfQorXGRlZlxiYWRwYXJlbmNvdW50eyUKKyAgXGVycm1lc3NhZ2V7VW5iYWxhbmNlZCBwYXJlbnRoZXNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxwYXJlbmNvdW50PTAKK30KK1xkZWZcYmFkYnJhY2tjb3VudHslCisgIFxlcnJtZXNzYWdle1VuYmFsYW5jZWQgc3F1YXJlIGJyYWNlcyBpbiBAZGVmfSUKKyAgXGdsb2JhbFxicmFja2NvdW50PTAKK30KKworCitcbWVzc2FnZXttYWNyb3MsfQorJSBAbWFjcm8uCisKKyUgVG8gZG8gdGhpcyByaWdodCB3ZSBuZWVkIGEgZmVhdHVyZSBvZiBlLVRlWCwgXHNjYW50b2tlbnMsCislIHdoaWNoIHdlIGFycmFuZ2UgdG8gZW11bGF0ZSB3aXRoIGEgdGVtcG9yYXJ5IGZpbGUgaW4gb3JkaW5hcnkgVGVYLgorXGlmeFxlVGVYdmVyc2lvblx1bmRlZmluZWQKKyAgXG5ld3dyaXRlXG1hY3NjcmliYmxlCisgIFxkZWZcc2NhbnRva2VucyMxeyUKKyAgICBcdG9rczA9eyMxfSUKKyAgICBcaW1tZWRpYXRlXG9wZW5vdXRcbWFjc2NyaWJibGU9XGpvYm5hbWUudG1wCisgICAgXGltbWVkaWF0ZVx3cml0ZVxtYWNzY3JpYmJsZXtcdGhlXHRva3MwfSUKKyAgICBcaW1tZWRpYXRlXGNsb3Nlb3V0XG1hY3NjcmliYmxlCisgICAgXGlucHV0IFxqb2JuYW1lLnRtcAorICB9CitcZmkKKworXGRlZlxzY2FubWFjcm8jMXslCisgIFxiZWdpbmdyb3VwCisgICAgXG5ld2xpbmVjaGFyYFxeXk0KKyAgICBcbGV0XHhlYXRzcGFjZXNcZWF0c3BhY2VzCisgICAgJSBVbmRvIGNhdGNvZGUgY2hhbmdlcyBvZiBcc3RhcnRjb250ZW50cyBhbmQgXGRvcHJpbnRpbmRleAorICAgICUgV2hlbiBjYWxsZWQgZnJvbSBAaW5zZXJ0Y29weWluZyBvciAoc2hvcnQpY2FwdGlvbiwgd2UgbmVlZCBhY3RpdmUKKyAgICAlIGJhY2tzbGFzaCB0byBnZXQgaXQgcHJpbnRlZCBjb3JyZWN0bHkuICBQcmV2aW91c2x5LCB3ZSBoYWQKKyAgICAlIFxjYXRjb2RlYFxcPVxvdGhlciBpbnN0ZWFkLiAgV2UnbGwgc2VlIHdoZXRoZXIgYSBwcm9ibGVtIGFwcGVhcnMKKyAgICAlIHdpdGggbWFjcm8gZXhwYW5zaW9uLgkJCQktLWthc2FsLCAxOWF1ZzA0CisgICAgXGNhdGNvZGVgXEA9MCBcY2F0Y29kZWBcXD1cYWN0aXZlIFxlc2NhcGVjaGFyPWBcQAorICAgICUgLi4uIGFuZCBcZXhhbXBsZQorICAgIFxzcGFjZWlzc3BhY2UKKyAgICAlCisgICAgJSBBcHBlbmQgXGVuZGlucHV0IHRvIG1ha2Ugc3VyZSB0aGF0IFRlWCBkb2VzIG5vdCBzZWUgdGhlIGVuZGluZyBuZXdsaW5lLgorICAgICUKKyAgICAlIEkndmUgdmVyaWZpZWQgdGhhdCBpdCBpcyBuZWNlc3NhcnkgYm90aCBmb3IgZS1UZVggYW5kIGZvciBvcmRpbmFyeSBUZVgKKyAgICAlCQkJCQkJCS0ta2FzYWwsIDI5bm92MDMKKyAgICBcc2NhbnRva2Vuc3sjMVxlbmRpbnB1dH0lCisgIFxlbmRncm91cAorfQorCitcZGVmXHNjYW5leHAjMXslCisgIFxlZGVmXHRlbXB7XG5vZXhwYW5kXHNjYW5tYWNyb3sjMX19JQorICBcdGVtcAorfQorCitcbmV3Y291bnRccGFyYW1ubyAgICUgQ291bnQgb2YgcGFyYW1ldGVycworXG5ld3Rva3NcbWFjbmFtZSAgICAlIE1hY3JvIG5hbWUKK1xuZXdpZlxpZnJlY3Vyc2l2ZSAgJSBJcyBpdCByZWN1cnNpdmU/CisKKyUgTGlzdCBvZiBhbGwgZGVmaW5lZCBtYWNyb3MgaW4gdGhlIGZvcm0KKyUgICAgXGRlZmluZWR1bW15d29yZFxtYWNybzFcZGVmaW5lZHVtbXl3b3JkXG1hY3JvMi4uLgorJSBDdXJyZW50bHkgaXMgYWxzbyBjb250YWlucyBhbGwgQGFsaWFzZXM7IHRoZSBsaXN0IGNhbiBiZSBzcGxpdAorJSBpZiB0aGVyZSBpcyBhIG5lZWQuCitcZGVmXG1hY3JvbGlzdHt9CisKKyUgQWRkIHRoZSBtYWNybyB0byBcbWFjcm9saXN0CitcZGVmXGFkZHRvbWFjcm9saXN0IzF7XGV4cGFuZGFmdGVyIFxhZGR0b21hY3JvbGlzdHh4eCBcY3NuYW1lIzFcZW5kY3NuYW1lfQorXGRlZlxhZGR0b21hY3JvbGlzdHh4eCMxeyUKKyAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1xtYWNyb2xpc3RcZGVmaW5lZHVtbXl3b3JkIzF9JQorICAgICBceGRlZlxtYWNyb2xpc3R7XHRoZVx0b2tzMH0lCit9CisKKyUgVXRpbGl0eSByb3V0aW5lcy4KKyUgVGhpcyBkb2VzIFxsZXQgIzEgPSAjMiwgd2l0aCBcY3NuYW1lczsgdGhhdCBpcywKKyUgICBcbGV0IFxjc25hbWUjMVxlbmRjc25hbWUgPSBcY3NuYW1lIzJcZW5kY3NuYW1lCislIChleGNlcHQgb2YgY291cnNlIHdlIGhhdmUgdG8gcGxheSBleHBhbnNpb24gZ2FtZXMpLgorJSAKK1xkZWZcY3NsZXQjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGxldAorICBcY3NuYW1lIzFcZXhwYW5kYWZ0ZXJcZW5kY3NuYW1lCisgIFxjc25hbWUjMlxlbmRjc25hbWUKK30KKworJSBUcmltIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlcyBvZmYgYSBzdHJpbmcuCislIENvbmNlcHRzIGZyb20gYXJvLWJlbmQgcHJvYmxlbSAxNSAoc2VlIENUQU4pLgore1xjYXRjb2RlYFxAPTExCitcZ2RlZlxlYXRzcGFjZXMgIzF7XGV4cGFuZGFmdGVyXHRyaW1AXGV4cGFuZGFmdGVyeyMxIH19CitcZ2RlZlx0cmltQCAjMXtcdHJpbUBAIEAjMSBAICMxIEAgQEB9CitcZ2RlZlx0cmltQEAgIzFAICMyQCAjM0BAe1x0cmltQEBAXGVtcHR5ICMyIEB9CitcZGVmXHVuYnJhY2UjMXsjMX0KK1x1bmJyYWNle1xnZGVmXHRyaW1AQEAgIzEgfSAjMkB7IzF9Cit9CisKKyUgVHJpbSBhIHNpbmdsZSB0cmFpbGluZyBeXk0gb2ZmIGEgc3RyaW5nLgore1xjYXRjb2RlYFxeXk09XG90aGVyIFxjYXRjb2RlYFxRPTMlCitcZ2RlZlxlYXRjciAjMXtcZWF0Y3JhICMxUV5eTVF9JQorXGdkZWZcZWF0Y3JhIzFeXk1Re1xlYXRjcmIjMVF9JQorXGdkZWZcZWF0Y3JiIzFRIzJReyMxfSUKK30KKworJSBNYWNybyBib2RpZXMgYXJlIGFic29yYmVkIGFzIGFuIGFyZ3VtZW50IGluIGEgY29udGV4dCB3aGVyZQorJSBhbGwgY2hhcmFjdGVycyBhcmUgY2F0Y29kZSAxMCwgMTEgb3IgMTIsIGV4Y2VwdCBcIHdoaWNoIGlzIGFjdGl2ZQorJSAoYXMgaW4gbm9ybWFsIHRleGluZm8pLiBJdCBpcyBuZWNlc3NhcnkgdG8gY2hhbmdlIHRoZSBkZWZpbml0aW9uIG9mIFwuCisKKyUgSXQncyBuZWNlc3NhcnkgdG8gaGF2ZSBoYXJkIENScyB3aGVuIHRoZSBtYWNybyBpcyBleGVjdXRlZC4gVGhpcyBpcworJSBkb25lIGJ5ICBtYWtpbmcgXl5NIChcZW5kbGluZWNoYXIpIGNhdGNvZGUgMTIgd2hlbiByZWFkaW5nIHRoZSBtYWNybworJSBib2R5LCBhbmQgdGhlbiBtYWtpbmcgaXQgdGhlIFxuZXdsaW5lY2hhciBpbiBcc2Nhbm1hY3JvLgorCitcZGVmXHNjYW5jdHh0eyUKKyAgXGNhdGNvZGVgXCI9XG90aGVyCisgIFxjYXRjb2RlYFwrPVxvdGhlcgorICBcY2F0Y29kZWBcPD1cb3RoZXIKKyAgXGNhdGNvZGVgXD49XG90aGVyCisgIFxjYXRjb2RlYFxAPVxvdGhlcgorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgXGNhdGNvZGVgXF89XG90aGVyCisgIFxjYXRjb2RlYFx8PVxvdGhlcgorICBcY2F0Y29kZWBcfj1cb3RoZXIKK30KKworXGRlZlxzY2FuYXJnY3R4dHslCisgIFxzY2FuY3R4dAorICBcY2F0Y29kZWBcXD1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKK30KKworXGRlZlxtYWNyb2JvZHljdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFx7PVxvdGhlcgorICBcY2F0Y29kZWBcfT1cb3RoZXIKKyAgXGNhdGNvZGVgXF5eTT1cb3RoZXIKKyAgXHVzZW1ib2R5YmFja3NsYXNoCit9CisKK1xkZWZcbWFjcm9hcmdjdHh0eyUKKyAgXHNjYW5jdHh0CisgIFxjYXRjb2RlYFxcPVxvdGhlcgorfQorCislIFxtYm9keWJhY2tzbGFzaCBpcyB0aGUgZGVmaW5pdGlvbiBvZiBcIGluIEBtYWNybyBib2RpZXMuCislIEl0IG1hcHMgXGZvb1wgPT4gXGNzbmFtZSBtYWNhcmcuZm9vXGVuZGNzbmFtZSA9PiAjTgorJSB3aGVyZSBOIGlzIHRoZSBtYWNybyBwYXJhbWV0ZXIgbnVtYmVyLgorJSBXZSBkZWZpbmUgXGNzbmFtZSBtYWNhcmcuXGVuZGNzbmFtZSB0byBiZSBccmVhbGJhY2tzbGFzaCwgc28KKyUgXFwgaW4gbWFjcm8gcmVwbGFjZW1lbnQgdGV4dCBnZXRzIHlvdSBhIGJhY2tzbGFzaC4KKwore1xjYXRjb2RlYEA9MCBAY2F0Y29kZWBAXD1AYWN0aXZlCisgQGdkZWZAdXNlbWJvZHliYWNrc2xhc2h7QGxldFw9QG1ib2R5YmFja3NsYXNofQorIEBnZGVmQG1ib2R5YmFja3NsYXNoIzFce0Bjc25hbWUgbWFjYXJnLiMxQGVuZGNzbmFtZX0KK30KK1xleHBhbmRhZnRlclxkZWZcY3NuYW1lIG1hY2FyZy5cZW5kY3NuYW1le1xyZWFsYmFja3NsYXNofQorCitcZGVmXG1hY3Jve1xyZWN1cnNpdmVmYWxzZVxwYXJzZWFyZ1xtYWNyb3h4eH0KK1xkZWZccm1hY3Jve1xyZWN1cnNpdmV0cnVlXHBhcnNlYXJnXG1hY3JveHh4fQorCitcZGVmXG1hY3JveHh4IzF7JQorICBcZ2V0YXJnc3sjMX0lICAgICAgICAgICBub3cgXG1hY25hbWUgaXMgdGhlIG1hY25hbWUgYW5kIFxhcmdsIHRoZSBhcmdsaXN0CisgIFxpZnhcYXJnbFxlbXB0eSAgICAgICAlIG5vIGFyZ3VtZW50cworICAgICBccGFyYW1ubz0wJQorICBcZWxzZQorICAgICBcZXhwYW5kYWZ0ZXJccGFyc2VtYXJnZGVmIFxhcmdsOyUKKyAgXGZpCisgIFxpZjFcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZQorICAgICBcbWVzc2FnZXtXYXJuaW5nOiByZWRlZmluaW5nIFx0aGVcbWFjbmFtZX0lCisgIFxlbHNlCisgICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIFx0aGVcbWFjbmFtZVxlbmRjc25hbWUgXHJlbGF4CisgICAgIFxlbHNlIFxlcnJtZXNzYWdle01hY3JvIG5hbWUgXHRoZVxtYWNuYW1lXHNwYWNlIGFscmVhZHkgZGVmaW5lZH1cZmkKKyAgICAgXGdsb2JhbFxjc2xldHttYWNzYXZlLlx0aGVcbWFjbmFtZX17XHRoZVxtYWNuYW1lfSUKKyAgICAgXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIGlzbWFjcm8uXHRoZVxtYWNuYW1lXGVuZGNzbmFtZT0xJQorICAgICBcYWRkdG9tYWNyb2xpc3R7XHRoZVxtYWNuYW1lfSUKKyAgXGZpCisgIFxiZWdpbmdyb3VwIFxtYWNyb2JvZHljdHh0CisgIFxpZnJlY3Vyc2l2ZSBcZXhwYW5kYWZ0ZXJccGFyc2VybWFjYm9keQorICBcZWxzZSBcZXhwYW5kYWZ0ZXJccGFyc2VtYWNib2R5CisgIFxmaX0KKworXHBhcnNlYXJnZGVmXHVubWFjcm97JQorICBcaWYxXGNzbmFtZSBpc21hY3JvLiMxXGVuZGNzbmFtZQorICAgIFxnbG9iYWxcY3NsZXR7IzF9e21hY3NhdmUuIzF9JQorICAgIFxnbG9iYWxcZXhwYW5kYWZ0ZXJcbGV0IFxjc25hbWUgaXNtYWNyby4jMVxlbmRjc25hbWU9MCUKKyAgICAlIFJlbW92ZSB0aGUgbWFjcm8gbmFtZSBmcm9tIFxtYWNyb2xpc3Q6CisgICAgXGJlZ2luZ3JvdXAKKyAgICAgIFxleHBhbmRhZnRlclxsZXRcY3NuYW1lIzFcZW5kY3NuYW1lIFxyZWxheAorICAgICAgXGxldFxkZWZpbmVkdW1teXdvcmRcdW5tYWNyb2RvCisgICAgICBceGRlZlxtYWNyb2xpc3R7XG1hY3JvbGlzdH0lCisgICAgXGVuZGdyb3VwCisgIFxlbHNlCisgICAgXGVycm1lc3NhZ2V7TWFjcm8gIzEgbm90IGRlZmluZWR9JQorICBcZmkKK30KKworJSBDYWxsZWQgYnkgXGRvIGZyb20gXGRvdW5tYWNybyBvbiBlYWNoIG1hY3JvLiAgVGhlIGlkZWEgaXMgdG8gb21pdCBhbnkKKyUgbWFjcm8gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCB0byBccmVsYXguCislCitcZGVmXHVubWFjcm9kbyMxeyUKKyAgXGlmeCAjMVxyZWxheAorICAgICUgcmVtb3ZlIHRoaXMKKyAgXGVsc2UKKyAgICBcbm9leHBhbmRcZGVmaW5lZHVtbXl3b3JkIFxub2V4cGFuZCMxJQorICBcZmkKK30KKworJSBUaGlzIG1ha2VzIHVzZSBvZiB0aGUgb2JzY3VyZSBmZWF0dXJlIHRoYXQgaWYgdGhlIGxhc3QgdG9rZW4gb2YgYQorJSA8cGFyYW1ldGVyIGxpc3Q+IGlzICMsIHRoZW4gdGhlIHByZWNlZGluZyBhcmd1bWVudCBpcyBkZWxpbWl0ZWQgYnkKKyUgYW4gb3BlbmluZyBicmFjZSwgYW5kIHRoYXQgb3BlbmluZyBicmFjZSBpcyBub3QgY29uc3VtZWQuCitcZGVmXGdldGFyZ3MjMXtcZ2V0YXJnc3h4eCMxe319CitcZGVmXGdldGFyZ3N4eHgjMSN7XGdldG1hY25hbWUgIzEgXHJlbGF4XGdldG1hY2FyZ3N9CitcZGVmXGdldG1hY25hbWUgIzEgIzJccmVsYXh7XG1hY25hbWU9eyMxfX0KK1xkZWZcZ2V0bWFjYXJncyMxe1xkZWZcYXJnbHsjMX19CisKKyUgUGFyc2UgdGhlIG9wdGlvbmFsIHtwYXJhbXN9IGxpc3QuICBTZXQgdXAgXHBhcmFtbm8gYW5kIFxwYXJhbWxpc3QKKyUgc28gXGRlZm1hY3JvIGtub3dzIHdoYXQgdG8gZG8uICBEZWZpbmUgXG1hY2FyZy5ibGFoIGZvciBlYWNoIGJsYWgKKyUgaW4gdGhlIHBhcmFtcyBsaXN0LCB0byBiZSAjI04gd2hlcmUgTiBpcyB0aGUgcG9zaXRpb24gaW4gdGhhdCBsaXN0LgorJSBUaGF0IGdldHMgdXNlZCBieSBcbWJvZHliYWNrc2xhc2ggKGFib3ZlKS4KKworJSBXZSBuZWVkIHRvIGdldCBgbWFjcm8gcGFyYW1ldGVyIGNoYXIgIycgaW50byBzZXZlcmFsIGRlZmluaXRpb25zLgorJSBUaGUgdGVjaG5pcXVlIHVzZWQgaXMgc3RvbGVuIGZyb20gTGFUZVg6ICBsZXQgXGhhc2ggYmUgc29tZXRoaW5nCislIHVuZXhwYW5kYWJsZSwgaW5zZXJ0IHRoYXQgd2hlcmV2ZXIgeW91IG5lZWQgYSAjLCBhbmQgdGhlbiByZWRlZmluZQorJSBpdCB0byAjIGp1c3QgYmVmb3JlIHVzaW5nIHRoZSB0b2tlbiBsaXN0IHByb2R1Y2VkLgorJQorJSBUaGUgc2FtZSB0ZWNobmlxdWUgaXMgdXNlZCB0byBwcm90ZWN0IFxlYXRzcGFjZXMgdGlsbCBqdXN0IGJlZm9yZQorJSB0aGUgbWFjcm8gaXMgdXNlZC4KKworXGRlZlxwYXJzZW1hcmdkZWYjMTt7XHBhcmFtbm89MFxkZWZccGFyYW1saXN0e30lCisgICAgICAgIFxsZXRcaGFzaFxyZWxheFxsZXRceGVhdHNwYWNlc1xyZWxheFxwYXJzZW1hcmdkZWZ4eHgjMSw7LH0KK1xkZWZccGFyc2VtYXJnZGVmeHh4IzEseyUKKyAgXGlmIzE7XGxldFxuZXh0PVxyZWxheAorICBcZWxzZSBcbGV0XG5leHQ9XHBhcnNlbWFyZ2RlZnh4eAorICAgIFxhZHZhbmNlXHBhcmFtbm8gYnkgMSUKKyAgICBcZXhwYW5kYWZ0ZXJcZWRlZlxjc25hbWUgbWFjYXJnLlxlYXRzcGFjZXN7IzF9XGVuZGNzbmFtZQorICAgICAgICB7XHhlYXRzcGFjZXN7XGhhc2hcdGhlXHBhcmFtbm99fSUKKyAgICBcZWRlZlxwYXJhbWxpc3R7XHBhcmFtbGlzdFxoYXNoXHRoZVxwYXJhbW5vLH0lCisgIFxmaVxuZXh0fQorCislIFRoZXNlIHR3byBjb21tYW5kcyByZWFkIHJlY3Vyc2l2ZSBhbmQgbm9ucmVjdXJzaXZlIG1hY3JvIGJvZGllcy4KKyUgKFRoZXkncmUgZGlmZmVyZW50IHNpbmNlIHJlYyBhbmQgbm9ucmVjIG1hY3JvcyBlbmQgZGlmZmVyZW50bHkuKQorCitcbG9uZ1xkZWZccGFyc2VtYWNib2R5IzFAZW5kIG1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorXGxvbmdcZGVmXHBhcnNlcm1hY2JvZHkjMUBlbmQgcm1hY3JvJQore1x4ZGVmXHRlbXB7XGVhdGNyeyMxfX1cZW5kZ3JvdXBcZGVmbWFjcm99JQorCislIFRoaXMgZGVmaW5lcyB0aGUgbWFjcm8gaXRzZWxmLiBUaGVyZSBhcmUgc2l4IGNhc2VzOiByZWN1cnNpdmUgYW5kCislIG5vbnJlY3Vyc2l2ZSBtYWNyb3Mgb2YgemVybywgb25lLCBhbmQgbWFueSBhcmd1bWVudHMuCislIE11Y2ggbWFnaWMgd2l0aCBcZXhwYW5kYWZ0ZXIgaGVyZS4KKyUgXHhkZWYgaXMgdXNlZCBzbyB0aGF0IG1hY3JvIGRlZmluaXRpb25zIHdpbGwgc3Vydml2ZSB0aGUgZmlsZQorJSB0aGV5J3JlIGRlZmluZWQgaW47IEBpbmNsdWRlIHJlYWRzIHRoZSBmaWxlIGluc2lkZSBhIGdyb3VwLgorXGRlZlxkZWZtYWNyb3slCisgIFxsZXRcaGFzaD0jIyUgY29udmVydCBwbGFjZWhvbGRlcnMgdG8gbWFjcm8gcGFyYW1ldGVyIGNoYXJzCisgIFxpZnJlY3Vyc2l2ZQorICAgIFxpZmNhc2VccGFyYW1ubworICAgICUgMAorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcb3IgJSAxCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWVcZW5kY3NuYW1leyUKKyAgICAgICAgIFxiZ3JvdXBcbm9leHBhbmRcbWFjcm9hcmdjdHh0CisgICAgICAgICBcbm9leHBhbmRcYnJhY2VvcmxpbmUKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZX0lCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZlxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICBcZWdyb3VwXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH19JQorICAgIFxlbHNlICUgbWFueQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4XGVuZGNzbmFtZSMjMXslCisgICAgICAgICAgXGV4cGFuZGFmdGVyXG5vZXhwYW5kXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lICMjMSx9JQorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICBcZXhwYW5kYWZ0ZXJceGRlZgorICAgICAgXGV4cGFuZGFmdGVyXGV4cGFuZGFmdGVyCisgICAgICAgIFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZQorICAgICAgICAgIFxwYXJhbWxpc3R7XGVncm91cFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9fSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaWZjYXNlXHBhcmFtbm8KKyAgICAlIDAKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICBcbm9leHBhbmRcbm9yZWN1cnNle1x0aGVcbWFjbmFtZX0lCisgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXG9yICUgMQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lXGVuZGNzbmFtZXslCisgICAgICAgICBcYmdyb3VwXG5vZXhwYW5kXG1hY3JvYXJnY3R4dAorICAgICAgICAgXG5vZXhwYW5kXGJyYWNlb3JsaW5lCisgICAgICAgICBcZXhwYW5kYWZ0ZXJcbm9leHBhbmRcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWV9JQorICAgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lXHRoZVxtYWNuYW1lIHh4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICBcZWdyb3VwCisgICAgICAgIFxub2V4cGFuZFxub3JlY3Vyc2V7XHRoZVxtYWNuYW1lfSUKKyAgICAgICAgXG5vZXhwYW5kXHNjYW5tYWNyb3tcdGVtcH1cZWdyb3VwfSUKKyAgICBcZWxzZSAlIG1hbnkKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZVxlbmRjc25hbWV7JQorICAgICAgICAgXGJncm91cFxub2V4cGFuZFxtYWNyb2FyZ2N0eHQKKyAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHhcZW5kY3NuYW1lfSUKKyAgICAgIFxleHBhbmRhZnRlclx4ZGVmXGNzbmFtZVx0aGVcbWFjbmFtZSB4eFxlbmRjc25hbWUjIzF7JQorICAgICAgICAgIFxleHBhbmRhZnRlclxub2V4cGFuZFxjc25hbWVcdGhlXG1hY25hbWUgeHh4XGVuZGNzbmFtZSAjIzEsfSUKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGV4cGFuZGFmdGVyXHhkZWYKKyAgICAgIFxleHBhbmRhZnRlclxleHBhbmRhZnRlcgorICAgICAgXGNzbmFtZVx0aGVcbWFjbmFtZSB4eHhcZW5kY3NuYW1lCisgICAgICBccGFyYW1saXN0eyUKKyAgICAgICAgICBcZWdyb3VwCisgICAgICAgICAgXG5vZXhwYW5kXG5vcmVjdXJzZXtcdGhlXG1hY25hbWV9JQorICAgICAgICAgIFxub2V4cGFuZFxzY2FubWFjcm97XHRlbXB9XGVncm91cH0lCisgICAgXGZpCisgIFxmaX0KKworXGRlZlxub3JlY3Vyc2UjMXtcYmdyb3VwXGNzbGV0eyMxfXttYWNzYXZlLiMxfX0KKworJSBcYnJhY2VvcmxpbmUgZGVjaWRlcyB3aGV0aGVyIHRoZSBuZXh0IG5vbndoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEKKyUgey4gIElmIHNvIGl0IHJlYWRzIHVwIHRvIHRoZSBjbG9zaW5nIH0sIGlmIG5vdCwgaXQgcmVhZHMgdGhlIHdob2xlCislIGxpbmUuICBXaGF0ZXZlciB3YXMgcmVhZCBpcyB0aGVuIGZlZCB0byB0aGUgbmV4dCBjb250cm9sIHNlcXVlbmNlCislIGFzIGFuIGFyZ3VtZW50IChieSBccGFyc2VicmFjZSBvciBccGFyc2VhcmcpCitcZGVmXGJyYWNlb3JsaW5lIzF7XGxldFxuZXh0PSMxXGZ1dHVyZWxldFxuY2hhclxicmFjZW9ybGluZXh4eH0KK1xkZWZcYnJhY2VvcmxpbmV4eHh7JQorICBcaWZ4XG5jaGFyXGJncm91cFxlbHNlCisgICAgXGV4cGFuZGFmdGVyXHBhcnNlYXJnCisgIFxmaSBcbmV4dH0KKworCislIEBhbGlhcy4KKyUgV2UgbmVlZCBzb21lIHRyaWNrZXJ5IHRvIHJlbW92ZSB0aGUgb3B0aW9uYWwgc3BhY2VzIGFyb3VuZCB0aGUgZXF1YWwKKyUgc2lnbi4gIEp1c3QgbWFrZSB0aGVtIGFjdGl2ZSBhbmQgdGhlbiBleHBhbmQgdGhlbSBhbGwgdG8gbm90aGluZy4KK1xkZWZcYWxpYXN7XHBhcnNlYXJndXNpbmdcb2JleXNwYWNlc1xhbGlhc3h4eH0KK1xkZWZcYWxpYXN4eHggIzF7XGFsaWFzeXl5IzFccmVsYXh9CitcZGVmXGFsaWFzeXl5ICMxPSMyXHJlbGF4eyUKKyAgeyUKKyAgICBcZXhwYW5kYWZ0ZXJcbGV0XG9iZXllZHNwYWNlPVxlbXB0eQorICAgIFxhZGR0b21hY3JvbGlzdHsjMX0lCisgICAgXHhkZWZcbmV4dHtcZ2xvYmFsXGxldFxtYWtlY3NuYW1leyMxfT1cbWFrZWNzbmFtZXsjMn19JQorICB9JQorICBcbmV4dAorfQorCisKK1xtZXNzYWdle2Nyb3NzIHJlZmVyZW5jZXMsfQorCitcbmV3d3JpdGVcYXV4ZmlsZQorCitcbmV3aWZcaWZoYXZleHJlZnMgICAgJSBUcnVlIGlmIHhyZWYgdmFsdWVzIGFyZSBrbm93bi4KK1xuZXdpZlxpZndhcm5lZHhyZWZzICAlIFRydWUgaWYgd2Ugd2FybmVkIG9uY2UgdGhhdCB0aGV5IGFyZW4ndCBrbm93bi4KKworJSBAaW5mb3JlZiBpcyByZWxhdGl2ZWx5IHNpbXBsZS4KK1xkZWZcaW5mb3JlZiAjMXtcaW5mb3JlZnp6eiAjMSwsLCwqKn0KK1xkZWZcaW5mb3JlZnp6eiAjMSwjMiwjMywjNCoqe1xwdXR3b3JkU2Vle30gXHB1dHdvcmRJbmZve30gXHB1dHdvcmRmaWxle30gXGZpbGV7XGlnbm9yZXNwYWNlcyAjM3t9fSwKKyAgbm9kZSBcc2FtcHtcaWdub3Jlc3BhY2VzIzF7fX19CisKKyUgQG5vZGUncyBvbmx5IGpvYiBpbiBUZVggaXMgdG8gZGVmaW5lIFxsYXN0bm9kZSwgd2hpY2ggaXMgdXNlZCBpbgorJSBjcm9zcy1yZWZlcmVuY2VzLiAgVGhlIEBub2RlIGxpbmUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgY29tbWFzLCBhbmQKKyUgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgc3BhY2VzIGJlZm9yZSB0aGUgZmlyc3QgY29tbWEsIGxpa2U6CislIEBub2RlIGZvbyAsIGJhciAsIC4uLgorJSBXZSBkb24ndCB3YW50IHN1Y2ggdHJhaWxpbmcgc3BhY2VzIGluIHRoZSBub2RlIG5hbWUuCislCitccGFyc2VhcmdkZWZcbm9kZXtcY2hlY2tlbnZ7fVxkb25vZGUgIzEgLFxmaW5pc2hub2RlcGFyc2V9CislCislIGFsc28gcmVtb3ZlIGEgdHJhaWxpbmcgY29tbWEsIGluIGNhc2Ugb2Ygc29tZXRoaW5nIGxpa2UgdGhpczoKKyUgQG5vZGUgSGVscC1Dcm9zcywgICwgICwgQ3Jvc3MtcmVmcworXGRlZlxkb25vZGUjMSAsIzJcZmluaXNobm9kZXBhcnNle1xkb2Rvbm9kZSAjMSxcZmluaXNobm9kZXBhcnNlfQorXGRlZlxkb2Rvbm9kZSMxLCMyXGZpbmlzaG5vZGVwYXJzZXtcZ2RlZlxsYXN0bm9kZXsjMX19CisKK1xsZXRcbndub2RlPVxub2RlCitcbGV0XGxhc3Rub2RlPVxlbXB0eQorCislIFdyaXRlIGEgY3Jvc3MtcmVmZXJlbmNlIGRlZmluaXRpb24gZm9yIHRoZSBjdXJyZW50IG5vZGUuICAjMSBpcyB0aGUKKyUgdHlwZSAoWW51bWJlcmVkLCBZYXBwZW5kaXgsIFlub3RoaW5nKS4KKyUKK1xkZWZcZG9ub2RlcmVmIzF7JQorICBcaWZ4XGxhc3Rub2RlXGVtcHR5XGVsc2UKKyAgICBcc2V0cmVme1xsYXN0bm9kZX17IzF9JQorICAgIFxnbG9iYWxcbGV0XGxhc3Rub2RlPVxlbXB0eQorICBcZmkKK30KKworJSBAYW5jaG9ye05BTUV9IC0tIGRlZmluZSB4cmVmIHRhcmdldCBhdCBhcmJpdHJhcnkgcG9pbnQuCislCitcbmV3Y291bnRcc2F2ZXNmcmVnaXN0ZXIKKyUKK1xkZWZcc2F2ZXNme1xyZWxheCBcaWZobW9kZSBcc2F2ZXNmcmVnaXN0ZXI9XHNwYWNlZmFjdG9yIFxmaX0KK1xkZWZccmVzdG9yZXNme1xyZWxheCBcaWZobW9kZSBcc3BhY2VmYWN0b3I9XHNhdmVzZnJlZ2lzdGVyIFxmaX0KK1xkZWZcYW5jaG9yIzF7XHNhdmVzZiBcc2V0cmVmeyMxfXtZbm90aGluZ31ccmVzdG9yZXNmIFxpZ25vcmVzcGFjZXN9CisKKyUgXHNldHJlZntOQU1FfXtTTlR9IGRlZmluZXMgYSBjcm9zcy1yZWZlcmVuY2UgcG9pbnQgTkFNRSAoYSBub2RlIG9yIGFuCislIGFuY2hvciksIHdoaWNoIGNvbnNpc3RzIG9mIHRocmVlIHBhcnRzOgorJSAxKSBOQU1FLXRpdGxlIC0gdGhlIGN1cnJlbnQgc2VjdGlvbmluZyBuYW1lIHRha2VuIGZyb20gXHRoaXNzZWN0aW9uLAorJSAgICAgICAgICAgICAgICAgb3IgdGhlIGFuY2hvciBuYW1lLgorJSAyKSBOQU1FLXNudCAgIC0gc2VjdGlvbiBudW1iZXIgYW5kIHR5cGUsIHBhc3NlZCBhcyB0aGUgU05UIGFyZywgb3IKKyUgICAgICAgICAgICAgICAgIGVtcHR5IGZvciBhbmNob3JzLgorJSAzKSBOQU1FLXBnICAgIC0gdGhlIHBhZ2UgbnVtYmVyLgorJQorJSBUaGlzIGlzIGNhbGxlZCBmcm9tIFxkb25vZGVyZWYsIFxhbmNob3IsIGFuZCBcZG9mbG9hdC4gIEluIHRoZSBjYXNlIG9mCislIGZsb2F0cywgdGhlcmUgaXMgYW4gYWRkaXRpb25hbCBwYXJ0LCB3aGljaCBpcyBub3Qgd3JpdHRlbiBoZXJlOgorJSA0KSBOQU1FLWxvZiAgIC0gdGhlIHRleHQgYXMgaXQgc2hvdWxkIGFwcGVhciBpbiBhIEBsaXN0b2ZmbG9hdHMuCislCitcZGVmXHNldHJlZiMxIzJ7JQorICBccGRmbWtkZXN0eyMxfSUKKyAgXGlmbGlua3MKKyAgICB7JQorICAgICAgXGF0ZHVtbWllcyAgJSBwcmVzZXJ2ZSBjb21tYW5kcywgYnV0IGRvbid0IGV4cGFuZCB0aGVtCisgICAgICBcZWRlZlx3cml0ZXhyZGVmIyMxIyMyeyUKKwlcd3JpdGVcYXV4ZmlsZXtAeHJkZWZ7IzEtJSAjMSBvZiBcc2V0cmVmLCBleHBhbmRlZCBieSB0aGUgXGVkZWYKKwkgICMjMX17IyMyfX0lIHRoZXNlIGFyZSBwYXJhbWV0ZXJzIG9mIFx3cml0ZXhyZGVmCisgICAgICB9JQorICAgICAgXHRva3MwID0gXGV4cGFuZGFmdGVye1x0aGlzc2VjdGlvbn0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3RpdGxlfXtcdGhlXHRva3MwIH0lCisgICAgICBcaW1tZWRpYXRlIFx3cml0ZXhyZGVme3NudH17XGNzbmFtZSAjMlxlbmRjc25hbWV9JSBcWW51bWJlcmVkIGV0Yy4KKyAgICAgIFx3cml0ZXhyZGVme3BnfXtcZm9saW99JSB3aWxsIGJlIHdyaXR0ZW4gbGF0ZXIsIGR1cmluZyBcc2hpcG91dAorICAgIH0lCisgIFxmaQorfQorCislIEB4cmVmLCBAcHhyZWYsIGFuZCBAcmVmIGdlbmVyYXRlIGNyb3NzLXJlZmVyZW5jZXMuICBGb3IgXHhyZWZYLCAjMSBpcworJSB0aGUgbm9kZSBuYW1lLCAjMiB0aGUgbmFtZSBvZiB0aGUgSW5mbyBjcm9zcy1yZWZlcmVuY2UsICMzIHRoZSBwcmludGVkCislIG5vZGUgbmFtZSwgIzQgdGhlIG5hbWUgb2YgdGhlIEluZm8gZmlsZSwgIzUgdGhlIG5hbWUgb2YgdGhlIHByaW50ZWQKKyUgbWFudWFsLiAgQWxsIGJ1dCB0aGUgbm9kZSBuYW1lIGNhbiBiZSBvbWl0dGVkLgorJQorXGRlZlxweHJlZiMxe1xwdXR3b3Jkc2Vle30gXHhyZWZYWyMxLCwsLCwsLF19CitcZGVmXHhyZWYjMXtccHV0d29yZFNlZXt9IFx4cmVmWFsjMSwsLCwsLCxdfQorXGRlZlxyZWYjMXtceHJlZlhbIzEsLCwsLCwsXX0KK1xkZWZceHJlZlhbIzEsIzIsIzMsIzQsIzUsIzZde1xiZWdpbmdyb3VwCisgIFx1bnNlcHNwYWNlcworICBcZGVmXHByaW50ZWRtYW51YWx7XGlnbm9yZXNwYWNlcyAjNX0lCisgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjM30lCisgIFxzZXRib3gxPVxoYm94e1xwcmludGVkbWFudWFsXHVuc2tpcH0lCisgIFxzZXRib3gwPVxoYm94e1xwcmludGVkcmVmbmFtZVx1bnNraXB9JQorICBcaWZkaW0gXHdkMCA9IDBwdAorICAgICUgTm8gcHJpbnRlZCBub2RlIG5hbWUgd2FzIGV4cGxpY2l0bHkgZ2l2ZW4uCisgICAgXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgU0VUeHJlZi1hdXRvbWF0aWMtc2VjdGlvbi10aXRsZVxlbmRjc25hbWVccmVsYXgKKyAgICAgICUgVXNlIHRoZSBub2RlIG5hbWUgaW5zaWRlIHRoZSBzcXVhcmUgYnJhY2tldHMuCisgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xpZ25vcmVzcGFjZXMgIzF9JQorICAgIFxlbHNlCisgICAgICAlIFVzZSB0aGUgYWN0dWFsIGNoYXB0ZXIvc2VjdGlvbiB0aXRsZSBhcHBlYXIgaW5zaWRlCisgICAgICAlIHRoZSBzcXVhcmUgYnJhY2tldHMuICBVc2UgdGhlIHJlYWwgc2VjdGlvbiB0aXRsZSBpZiB3ZSBoYXZlIGl0LgorICAgICAgXGlmZGltIFx3ZDEgPiAwcHQKKyAgICAgICAgJSBJdCBpcyBpbiBhbm90aGVyIG1hbnVhbCwgc28gd2UgZG9uJ3QgaGF2ZSBpdC4KKyAgICAgICAgXGRlZlxwcmludGVkcmVmbmFtZXtcaWdub3Jlc3BhY2VzICMxfSUKKyAgICAgIFxlbHNlCisgICAgICAgIFxpZmhhdmV4cmVmcworICAgICAgICAgICUgV2Uga25vdyB0aGUgcmVhbCB0aXRsZSBpZiB3ZSBoYXZlIHRoZSB4cmVmIHZhbHVlcy4KKyAgICAgICAgICBcZGVmXHByaW50ZWRyZWZuYW1le1xyZWZ4eyMxLXRpdGxlfXt9fSUKKyAgICAgICAgXGVsc2UKKyAgICAgICAgICAlIE90aGVyd2lzZSBqdXN0IGNvcHkgdGhlIEluZm8gbm9kZSBuYW1lLgorICAgICAgICAgIFxkZWZccHJpbnRlZHJlZm5hbWV7XGlnbm9yZXNwYWNlcyAjMX0lCisgICAgICAgIFxmaSUKKyAgICAgIFxmaQorICAgIFxmaQorICBcZmkKKyAgJQorICAlIE1ha2UgbGluayBpbiBwZGYgb3V0cHV0LgorICBcaWZwZGYKKyAgICBcbGVhdmV2bW9kZQorICAgIFxnZXRmaWxlbmFtZXsjNH0lCisgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICUgU2VlIGNvbW1lbnRzIGF0IFxhY3RpdmViYWNrc2xhc2hkb3VibGUuCisgICAgIHtcYWN0aXZlYmFja3NsYXNoZG91YmxlIFx4ZGVmXHBkZnhyZWZkZXN0eyMxfSUKKyAgICAgIFxiYWNrc2xhc2hwYXJlbnNccGRmeHJlZmRlc3R9JQorICAgICAlCisgICAgIFxpZm51bVxmaWxlbmFtZWxlbmd0aD4wCisgICAgICAgXHN0YXJ0bGluayBhdHRyey9Cb3JkZXIgWzAgMCAwXX0lCisgICAgICAgICBnb3RvIGZpbGV7XHRoZVxmaWxlbmFtZS5wZGZ9IG5hbWV7XHBkZnhyZWZkZXN0fSUKKyAgICAgXGVsc2UKKyAgICAgICBcc3RhcnRsaW5rIGF0dHJ7L0JvcmRlciBbMCAwIDBdfSUKKyAgICAgICAgIGdvdG8gbmFtZXtccGRmbWtwZ257XHBkZnhyZWZkZXN0fX0lCisgICAgIFxmaQorICAgIH0lCisgICAgXGxpbmtjb2xvcgorICBcZmkKKyAgJQorICAlIEZsb2F0IHJlZmVyZW5jZXMgYXJlIHByaW50ZWQgY29tcGxldGVseSBkaWZmZXJlbnRseTogIkZpZ3VyZSAxLjIiCisgICUgaW5zdGVhZCBvZiAiW3NvbWVub2RlXSwgcC4zIi4gIFdlIGRpc3Rpbmd1aXNoIHRoZW0gYnkgdGhlCisgICUgTEFCRUwtdGl0bGUgYmVpbmcgc2V0IHRvIGEgbWFnaWMgc3RyaW5nLgorICB7JQorICAgICUgSGF2ZSB0byBvdGhlcmlmeSBldmVyeXRoaW5nIHNwZWNpYWwgdG8gYWxsb3cgdGhlIFxjc25hbWUgdG8KKyAgICAlIGluY2x1ZGUgYW4gXyBpbiB0aGUgeHJlZiBuYW1lLCBldGMuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXGV4cGFuZGFmdGVyXGdsb2JhbFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcWHRoaXNyZWZ0aXRsZQorICAgICAgXGNzbmFtZSBYUiMxLXRpdGxlXGVuZGNzbmFtZQorICB9JQorICBcaWZmbG9hdFxYdGhpc3JlZnRpdGxlCisgICAgJSBJZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIHByaW50IG5hbWUgKHRoaXJkIGFyZykgdG8gdGhlIHJlZiwKKyAgICAlIHByaW50IGl0IGluc3RlYWQgb2Ygb3VyIHVzdWFsICJGaWd1cmUgMS4yIi4KKyAgICBcaWZkaW1cd2QwID0gMHB0CisgICAgICBccmVmeHsjMS1zbnR9JQorICAgIFxlbHNlCisgICAgICBccHJpbnRlZHJlZm5hbWUKKyAgICBcZmkKKyAgICAlCisgICAgJSBpZiB0aGUgdXNlciBhbHNvIGdhdmUgdGhlIHByaW50ZWQgbWFudWFsIG5hbWUgKGZpZnRoIGFyZyksIGFwcGVuZAorICAgICUgImluIE1BTlVBTE5BTUUiLgorICAgIFxpZmRpbSBcd2QxID4gMHB0CisgICAgICBcc3BhY2UgXHB1dHdvcmRpbnt9IFxjaXRle1xwcmludGVkbWFudWFsfSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIG5vZGUvYW5jaG9yIChub24tZmxvYXQpIHJlZmVyZW5jZXMuCisgICAgJQorICAgICUgSWYgd2UgdXNlIFx1bmhib3gwIGFuZCBcdW5oYm94MSB0byBwcmludCB0aGUgbm9kZSBuYW1lcywgVGVYIGRvZXMgbm90CisgICAgJSBpbnNlcnQgZW1wdHkgZGlzY3JldGlvbmFyaWVzIGFmdGVyIGh5cGhlbnMsIHdoaWNoIG1lYW5zIHRoYXQgaXQgd2lsbAorICAgICUgbm90IGZpbmQgYSBsaW5lIGJyZWFrIGF0IGEgaHlwaGVuIGluIGEgbm9kZSBuYW1lcy4gIFNpbmNlIHNvbWUgbWFudWFscworICAgICUgYXJlIGJlc3Qgd3JpdHRlbiB3aXRoIGZhaXJseSBsb25nIG5vZGUgbmFtZXMsIGNvbnRhaW5pbmcgaHlwaGVucywgdGhpcworICAgICUgaXMgYSBsb3NzLiAgVGhlcmVmb3JlLCB3ZSBnaXZlIHRoZSB0ZXh0IG9mIHRoZSBub2RlIG5hbWUgYWdhaW4sIHNvIGl0CisgICAgJSBpcyBhcyBpZiBUZVggaXMgc2VlaW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKyAgICBcaWZkaW0gXHdkMSA+IDBwdAorICAgICAgXHB1dHdvcmRzZWN0aW9ue30gYGBccHJpbnRlZHJlZm5hbWUnJyBccHV0d29yZGlue30gXGNpdGV7XHByaW50ZWRtYW51YWx9JQorICAgIFxlbHNlCisgICAgICAlIF8gKGZvciBleGFtcGxlKSBoYXMgdG8gYmUgdGhlIGNoYXJhY3RlciBfIGZvciB0aGUgcHVycG9zZXMgb2YgdGhlCisgICAgICAlIGNvbnRyb2wgc2VxdWVuY2UgY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSwgYnV0IGl0IGhhcyB0byBleHBhbmQKKyAgICAgICUgaW50byB0aGUgdXN1YWwgXGxlYXZldm1vZGUuLi5cdnJ1bGUgc3R1ZmYgZm9yIHB1cnBvc2VzIG9mCisgICAgICAlIHByaW50aW5nLiBTbyB3ZSBcdHVybm9mZmFjdGl2ZSBmb3IgdGhlIFxyZWZ4LXNudCwgYmFjayBvbiBmb3IgdGhlCisgICAgICAlIHByaW50aW5nLCBiYWNrIG9mZiBmb3IgdGhlIFxyZWZ4LXBnLgorICAgICAge1x0dXJub2ZmYWN0aXZlCisgICAgICAgJSBPbmx5IG91dHB1dCBhIGZvbGxvd2luZyBzcGFjZSBpZiB0aGUgLXNudCByZWYgaXMgbm9uZW1wdHk7IGZvcgorICAgICAgICUgQHVubnVtYmVyZWQgYW5kIEBhbmNob3IsIGl0IHdvbid0IGJlLgorICAgICAgIFxzZXRib3gyID0gXGhib3h7XGlnbm9yZXNwYWNlcyBccmVmeHsjMS1zbnR9e319JQorICAgICAgIFxpZmRpbSBcd2QyID4gMHB0IFxyZWZ4eyMxLXNudH1cc3BhY2VcZmkKKyAgICAgIH0lCisgICAgICAlIG91dHB1dCB0aGUgYFtteW5vZGVdJyB2aWEgYSBtYWNybyBzbyBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4KKyAgICAgIFx4cmVmcHJpbnRub2RlbmFtZVxwcmludGVkcmVmbmFtZQorICAgICAgJQorICAgICAgJSBCdXQgd2UgYWx3YXlzIHdhbnQgYSBjb21tYSBhbmQgYSBzcGFjZToKKyAgICAgICxcc3BhY2UKKyAgICAgICUKKyAgICAgICUgb3V0cHV0IHRoZSBgcGFnZSAzJy4KKyAgICAgIFx0dXJub2ZmYWN0aXZlIFxwdXR3b3JkcGFnZVx0aWVccmVmeHsjMS1wZ317fSUKKyAgICBcZmkKKyAgXGZpCisgIFxlbmRsaW5rCitcZW5kZ3JvdXB9CisKKyUgVGhpcyBtYWNybyBpcyBjYWxsZWQgZnJvbSBceHJlZlggZm9yIHRoZSBgW25vZGVuYW1lXScgcGFydCBvZiB4cmVmCislIG91dHB1dC4gIEl0J3MgYSBzZXBhcmF0ZSBtYWNybyBvbmx5IHNvIGl0IGNhbiBiZSBjaGFuZ2VkIG1vcmUgZWFzaWx5LAorJSBzaW5jZSBzcXVhcmUgYnJhY2tldHMgZG9uJ3Qgd29yayB3ZWxsIGluIHNvbWUgZG9jdW1lbnRzLiAgUGFydGljdWxhcmx5CislIG9uZSB0aGF0IEJvYiBpcyB3b3JraW5nIG9uIDopLgorJQorXGRlZlx4cmVmcHJpbnRub2RlbmFtZSMxe1sjMV19CisKKyUgVGhpbmdzIHJlZmVycmVkIHRvIGJ5IFxzZXRyZWYuCislCitcZGVmXFlub3RoaW5ne30KK1xkZWZcWW9taXRmcm9tdG9je30KK1xkZWZcWW51bWJlcmVkeyUKKyAgXGlmbnVtXHNlY25vPTAKKyAgICBccHV0d29yZENoYXB0ZXJAdGllIFx0aGVcY2hhcG5vCisgIFxlbHNlIFxpZm51bVxzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vCisgIFxlbHNlIFxpZm51bVxzdWJzdWJzZWNubz0wCisgICAgXHB1dHdvcmRTZWN0aW9uQHRpZSBcdGhlXGNoYXBuby5cdGhlXHNlY25vLlx0aGVcc3Vic2Vjbm8KKyAgXGVsc2UKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIFx0aGVcY2hhcG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorXGRlZlxZYXBwZW5kaXh7JQorICBcaWZudW1cc2Vjbm89MAorICAgICBccHV0d29yZEFwcGVuZGl4QHRpZSBAY2hhclx0aGVcYXBwZW5kaXhub3t9JQorICBcZWxzZSBcaWZudW1cc3Vic2Vjbm89MAorICAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8KKyAgXGVsc2UgXGlmbnVtXHN1YnN1YnNlY25vPTAKKyAgICBccHV0d29yZFNlY3Rpb25AdGllIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNubworICBcZWxzZQorICAgIFxwdXR3b3JkU2VjdGlvbkB0aWUKKyAgICAgIEBjaGFyXHRoZVxhcHBlbmRpeG5vLlx0aGVcc2Vjbm8uXHRoZVxzdWJzZWNuby5cdGhlXHN1YnN1YnNlY25vCisgIFxmaVxmaVxmaQorfQorCislIERlZmluZSBccmVmeHtOQU1FfXtTVUZGSVh9IHRvIHJlZmVyZW5jZSBhIGNyb3NzLXJlZmVyZW5jZSBzdHJpbmcgbmFtZWQgTkFNRS4KKyUgSWYgaXRzIHZhbHVlIGlzIG5vbmVtcHR5LCBTVUZGSVggaXMgb3V0cHV0IGFmdGVyd2FyZC4KKyUKK1xkZWZccmVmeCMxIzJ7JQorICB7JQorICAgIFxpbmRleG5vZm9udHMKKyAgICBcb3RoZXJiYWNrc2xhc2gKKyAgICBcZXhwYW5kYWZ0ZXJcZ2xvYmFsXGV4cGFuZGFmdGVyXGxldFxleHBhbmRhZnRlclx0aGlzcmVmWAorICAgICAgXGNzbmFtZSBYUiMxXGVuZGNzbmFtZQorICB9JQorICBcaWZ4XHRoaXNyZWZYXHJlbGF4CisgICAgJSBJZiBub3QgZGVmaW5lZCwgc2F5IHNvbWV0aGluZyBhdCBsZWFzdC4KKyAgICBcYW5nbGVsZWZ0IHVuXC1kZVwtZmluZWRcYW5nbGVyaWdodAorICAgIFxpZmxpbmtzCisgICAgICBcaWZoYXZleHJlZnMKKyAgICAgICAgXG1lc3NhZ2V7XGxpbmVudW1iZXIgVW5kZWZpbmVkIGNyb3NzIHJlZmVyZW5jZSBgIzEnLn0lCisgICAgICBcZWxzZQorICAgICAgICBcaWZ3YXJuZWR4cmVmc1xlbHNlCisgICAgICAgICAgXGdsb2JhbFx3YXJuZWR4cmVmc3RydWUKKyAgICAgICAgICBcbWVzc2FnZXtDcm9zcyByZWZlcmVuY2UgdmFsdWVzIHVua25vd247IHlvdSBtdXN0IHJ1biBUZVggYWdhaW4ufSUKKyAgICAgICAgXGZpCisgICAgICBcZmkKKyAgICBcZmkKKyAgXGVsc2UKKyAgICAlIEl0J3MgZGVmaW5lZCwgc28ganVzdCB1c2UgaXQuCisgICAgXHRoaXNyZWZYCisgIFxmaQorICAjMiUgT3V0cHV0IHRoZSBzdWZmaXggaW4gYW55IGNhc2UuCit9CisKKyUgVGhpcyBpcyB0aGUgbWFjcm8gaW52b2tlZCBieSBlbnRyaWVzIGluIHRoZSBhdXggZmlsZS4gIFVzdWFsbHkgaXQncworJSBqdXN0IGEgXGRlZiAod2UgcHJlcGVuZCBYUiB0byB0aGUgY29udHJvbCBzZXF1ZW5jZSBuYW1lIHRvIGF2b2lkCislIGNvbGxpc2lvbnMpLiAgQnV0IGlmIHRoaXMgaXMgYSBmbG9hdCB0eXBlLCB3ZSBoYXZlIG1vcmUgd29yayB0byBkby4KKyUKK1xkZWZceHJkZWYjMSMyeyUKKyAgXGV4cGFuZGFmdGVyXGdkZWZcY3NuYW1lIFhSIzFcZW5kY3NuYW1leyMyfSUgcmVtZW1iZXIgdGhpcyB4cmVmIHZhbHVlLgorICAlCisgICUgV2FzIHRoYXQgeHJlZiBjb250cm9sIHNlcXVlbmNlIHRoYXQgd2UganVzdCBkZWZpbmVkIGZvciBhIGZsb2F0PworICBcZXhwYW5kYWZ0ZXJcaWZmbG9hdFxjc25hbWUgWFIjMVxlbmRjc25hbWUKKyAgICAlIGl0IHdhcyBhIGZsb2F0LCBhbmQgd2UgaGF2ZSB0aGUgKHNhZmUpIGZsb2F0IHR5cGUgaW4gXGlmZmxvYXR0eXBlLgorICAgIFxleHBhbmRhZnRlclxsZXRcZXhwYW5kYWZ0ZXJcZmxvYXRsaXN0CisgICAgICBcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWUKKyAgICAlCisgICAgJSBJcyB0aGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHNlZW4gdGhpcyBmbG9hdCB0eXBlPworICAgIFxleHBhbmRhZnRlclxpZnhcZmxvYXRsaXN0XHJlbGF4CisgICAgICBcdG9rczAgPSB7XGRvfSUgeWVzLCBzbyBqdXN0IFxkbworICAgIFxlbHNlCisgICAgICAlIGhhZCBpdCBiZWZvcmUsIHNvIHByZXNlcnZlIHByZXZpb3VzIGVsZW1lbnRzIGluIGxpc3QuCisgICAgICBcdG9rczAgPSBcZXhwYW5kYWZ0ZXJ7XGZsb2F0bGlzdFxkb30lCisgICAgXGZpCisgICAgJQorICAgICUgUmVtZW1iZXIgdGhpcyB4cmVmIGluIHRoZSBjb250cm9sIHNlcXVlbmNlIFxmbG9hdGxpc3RGTE9BVFRZUEUsCisgICAgJSBmb3IgbGF0ZXIgdXNlIGluIFxsaXN0b2ZmbG9hdHMuCisgICAgXGV4cGFuZGFmdGVyXHhkZWZcY3NuYW1lIGZsb2F0bGlzdFxpZmZsb2F0dHlwZVxlbmRjc25hbWV7XHRoZVx0b2tzMHsjMX19JQorICBcZmkKK30KKworJSBSZWFkIHRoZSBsYXN0IGV4aXN0aW5nIGF1eCBmaWxlLCBpZiBhbnkuICBObyBlcnJvciBpZiBub25lIGV4aXN0cy4KKyUKK1xkZWZcdHJ5YXV4ZmlsZXslCisgIFxvcGVuaW4gMSBcam9ibmFtZS5hdXgKKyAgXGlmZW9mIDEgXGVsc2UKKyAgICBccmVhZGRhdGFmaWxle2F1eH0lCisgICAgXGdsb2JhbFxoYXZleHJlZnN0cnVlCisgIFxmaQorICBcY2xvc2VpbiAxCit9CisKK1xkZWZcc2V0dXBkYXRhZmlsZXslCisgIFxjYXRjb2RlYFxeXkA9XG90aGVyCisgIFxjYXRjb2RlYFxeXkE9XG90aGVyCisgIFxjYXRjb2RlYFxeXkI9XG90aGVyCisgIFxjYXRjb2RlYFxeXkM9XG90aGVyCisgIFxjYXRjb2RlYFxeXkQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXkU9XG90aGVyCisgIFxjYXRjb2RlYFxeXkY9XG90aGVyCisgIFxjYXRjb2RlYFxeXkc9XG90aGVyCisgIFxjYXRjb2RlYFxeXkg9XG90aGVyCisgIFxjYXRjb2RlYFxeXks9XG90aGVyCisgIFxjYXRjb2RlYFxeXkw9XG90aGVyCisgIFxjYXRjb2RlYFxeXk49XG90aGVyCisgIFxjYXRjb2RlYFxeXlA9XG90aGVyCisgIFxjYXRjb2RlYFxeXlE9XG90aGVyCisgIFxjYXRjb2RlYFxeXlI9XG90aGVyCisgIFxjYXRjb2RlYFxeXlM9XG90aGVyCisgIFxjYXRjb2RlYFxeXlQ9XG90aGVyCisgIFxjYXRjb2RlYFxeXlU9XG90aGVyCisgIFxjYXRjb2RlYFxeXlY9XG90aGVyCisgIFxjYXRjb2RlYFxeXlc9XG90aGVyCisgIFxjYXRjb2RlYFxeXlg9XG90aGVyCisgIFxjYXRjb2RlYFxeXlo9XG90aGVyCisgIFxjYXRjb2RlYFxeXls9XG90aGVyCisgIFxjYXRjb2RlYFxeXlw9XG90aGVyCisgIFxjYXRjb2RlYFxeXl09XG90aGVyCisgIFxjYXRjb2RlYFxeXl49XG90aGVyCisgIFxjYXRjb2RlYFxeXl89XG90aGVyCisgICUgSXQgd2FzIHN1Z2dlc3RlZCB0byBzZXQgdGhlIGNhdGNvZGUgb2YgXiB0byA3LCB3aGljaCB3b3VsZCBhbGxvdyBeXmU0IGV0Yy4KKyAgJSBpbiB4cmVmIHRhZ3MsIGkuZS4sIG5vZGUgbmFtZXMuICBCdXQgc2luY2UgXl5lNCBub3RhdGlvbiBpc24ndAorICAlIHN1cHBvcnRlZCBpbiB0aGUgbWFpbiB0ZXh0LCBpdCBkb2Vzbid0IHNlZW0gZGVzaXJhYmxlLiAgRnVydGhlcm1vcmUsCisgICUgdGhhdCBpcyBub3QgZW5vdWdoOiBmb3Igbm9kZSBuYW1lcyB0aGF0IGFjdHVhbGx5IGNvbnRhaW4gYSBeCisgICUgY2hhcmFjdGVyLCB3ZSB3b3VsZCBlbmQgdXAgd3JpdGluZyBhIGxpbmUgbGlrZSB0aGlzOiAneHJkZWYgeydoYXQKKyAgJSBiLXRpdGxlfXsnaGF0IGJ9IGFuZCBceHJkZWYgZG9lcyBhIFxjc25hbWUuLi5cZW5kY3NuYW1lIG9uIHRoZSBmaXJzdAorICAlIGFyZ3VtZW50LCBhbmQgXGhhdCBpcyBub3QgYW4gZXhwYW5kYWJsZSBjb250cm9sIHNlcXVlbmNlLiAgSXQgY291bGQKKyAgJSBhbGwgYmUgd29ya2VkIG91dCwgYnV0IHdoeT8gIEVpdGhlciB3ZSBzdXBwb3J0IF5eIG9yIHdlIGRvbid0LgorICAlCisgICUgVGhlIG90aGVyIGNoYW5nZSBuZWNlc3NhcnkgZm9yIHRoaXMgd2FzIHRvIGRlZmluZSBcYXV4aGF0OgorICAlIFxkZWZcYXV4aGF0e1xkZWZeeydoYXQgfX0lIGV4dHJhIHNwYWNlIHNvIG9rIGlmIGZvbGxvd2VkIGJ5IGxldHRlcgorICAlIGFuZCB0aGVuIHRvIGNhbGwgXGF1eGhhdCBpbiBcc2V0cS4KKyAgJQorICBcY2F0Y29kZWBcXj1cb3RoZXIKKyAgJQorICAlIFNwZWNpYWwgY2hhcmFjdGVycy4gIFNob3VsZCBiZSB0dXJuZWQgb2ZmIGFueXdheSwgYnV0Li4uCisgIFxjYXRjb2RlYFx+PVxvdGhlcgorICBcY2F0Y29kZWBcWz1cb3RoZXIKKyAgXGNhdGNvZGVgXF09XG90aGVyCisgIFxjYXRjb2RlYFwiPVxvdGhlcgorICBcY2F0Y29kZWBcXz1cb3RoZXIKKyAgXGNhdGNvZGVgXHw9XG90aGVyCisgIFxjYXRjb2RlYFw8PVxvdGhlcgorICBcY2F0Y29kZWBcPj1cb3RoZXIKKyAgXGNhdGNvZGVgXCQ9XG90aGVyCisgIFxjYXRjb2RlYFwjPVxvdGhlcgorICBcY2F0Y29kZWBcJj1cb3RoZXIKKyAgXGNhdGNvZGVgXCU9XG90aGVyCisgIFxjYXRjb2RlYCs9XG90aGVyICUgYXZvaWQgXCsgZm9yIHBhcmFub2lhIGV2ZW4gdGhvdWdoIHdlJ3ZlIHR1cm5lZCBpdCBvZmYKKyAgJQorICAlIFRoaXMgaXMgdG8gc3VwcG9ydCBcIGluIG5vZGUgbmFtZXMgYW5kIHRpdGxlcywgc2luY2UgdGhlIFwKKyAgJSBjaGFyYWN0ZXJzIGVuZCB1cCBpbiBhIFxjc25hbWUuICBJdCdzIGVhc2llciB0aGFuCisgICUgbGVhdmluZyBpdCBhY3RpdmUgYW5kIG1ha2luZyBpdHMgYWN0aXZlIGRlZmluaXRpb24gYW4gYWN0dWFsIFwKKyAgJSBjaGFyYWN0ZXIuICBXaGF0IEkgZG9uJ3QgdW5kZXJzdGFuZCBpcyB3aHkgaXQgd29ya3MgaW4gdGhlICp2YWx1ZSoKKyAgJSBvZiB0aGUgeHJkZWYuICBTZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGNhdGNvZGUxMiBcLCBhbmQgdGhhdAorICAlIHNob3VsZCBub3QgdHlwZXNldCBwcm9wZXJseS4gIEJ1dCBpdCB3b3Jrcywgc28gSSdtIG1vdmluZyBvbiBmb3IKKyAgJSBub3cuICAtLWthcmwsIDE1amFuMDQuCisgIFxjYXRjb2RlYFxcPVxvdGhlcgorICAlCisgICUgTWFrZSB0aGUgY2hhcmFjdGVycyAxMjgtMjU1IGJlIHByaW50aW5nIGNoYXJhY3RlcnMuCisgIHslCisgICAgXGNvdW50MT0xMjgKKyAgICBcZGVmXGxvb3B7JQorICAgICAgXGNhdGNvZGVcY291bnQxPVxvdGhlcgorICAgICAgXGFkdmFuY2VcY291bnQxIGJ5IDEKKyAgICAgIFxpZm51bSBcY291bnQxPDI1NiBcbG9vcCBcZmkKKyAgICB9JQorICB9JQorICAlCisgICUgQCBpcyBvdXIgZXNjYXBlIGNoYXJhY3RlciBpbiAuYXV4IGZpbGVzLCBhbmQgd2UgbmVlZCBicmFjZXMuCisgIFxjYXRjb2RlYFx7PTEKKyAgXGNhdGNvZGVgXH09MgorICBcY2F0Y29kZWBcQD0wCit9CisKK1xkZWZccmVhZGRhdGFmaWxlIzF7JQorXGJlZ2luZ3JvdXAKKyAgXHNldHVwZGF0YWZpbGUKKyAgXGlucHV0XGpvYm5hbWUuIzEKK1xlbmRncm91cH0KKworXG1lc3NhZ2V7aW5zZXJ0aW9ucyx9CislIGluY2x1ZGluZyBmb290bm90ZXMuCisKK1xuZXdjb3VudCBcZm9vdG5vdGVubworCislIFRoZSB0cmFpbGluZyBzcGFjZSBpbiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb24gZm9yIHN1cGVyZWplY3QgaXMKKyUgdml0YWwgZm9yIHByb3BlciBmaWxsaW5nOyBwYWdlcyBjb21lIG91dCB1bmFsaWduZWQgd2hlbiB5b3UgZG8gYQorJSBwYWdlYWxpZ25tYWNybyBjYWxsIGlmIHRoYXQgc3BhY2UgYmVmb3JlIHRoZSBjbG9zaW5nIGJyYWNlIGlzCislIHJlbW92ZWQuIChHZW5lcmFsbHksIG51bWVyaWMgY29uc3RhbnRzIHNob3VsZCBhbHdheXMgYmUgZm9sbG93ZWQgYnkgYQorJSBzcGFjZSB0byBwcmV2ZW50IHN0cmFuZ2UgZXhwYW5zaW9uIGVycm9ycy4pCitcZGVmXHN1cGVyZWplY3R7XHBhclxwZW5hbHR5IC0yMDAwMFxmb290bm90ZW5vID0wIH0KKworJSBAZm9vdG5vdGVzdHlsZSBpcyBtZWFuaW5nZnVsIGZvciBpbmZvIG91dHB1dCBvbmx5LgorXGxldFxmb290bm90ZXN0eWxlPVxjb21tZW50CisKK3tcY2F0Y29kZSBgXEA9MTEKKyUKKyUgQXV0by1udW1iZXIgZm9vdG5vdGVzLiAgT3RoZXJ3aXNlIGxpa2UgcGxhaW4uCitcZ2RlZlxmb290bm90ZXslCisgIFxsZXRcaW5kZW50PVxwdGV4aW5kZW50CisgIFxsZXRcbm9pbmRlbnQ9XHB0ZXhub2luZGVudAorICBcZ2xvYmFsXGFkdmFuY2VcZm9vdG5vdGVubyBieSBcQG5lCisgIFxlZGVmXHRoaXNmb290bm97JF57XHRoZVxmb290bm90ZW5vfSR9JQorICAlCisgICUgSW4gY2FzZSB0aGUgZm9vdG5vdGUgY29tZXMgYXQgdGhlIGVuZCBvZiBhIHNlbnRlbmNlLCBwcmVzZXJ2ZSB0aGUKKyAgJSBleHRyYSBzcGFjaW5nIGFmdGVyIHdlIGRvIHRoZSBmb290bm90ZSBudW1iZXIuCisgIFxsZXRcQHNmXGVtcHR5CisgIFxpZmhtb2RlXGVkZWZcQHNme1xzcGFjZWZhY3Rvclx0aGVcc3BhY2VmYWN0b3J9XHB0ZXhzbGFzaFxmaQorICAlCisgICUgUmVtb3ZlIGluYWR2ZXJ0ZW50IGJsYW5rIHNwYWNlIGJlZm9yZSB0eXBlc2V0dGluZyB0aGUgZm9vdG5vdGUgbnVtYmVyLgorICBcdW5za2lwCisgIFx0aGlzZm9vdG5vXEBzZgorICBcZG9mb290bm90ZQorfSUKKworJSBEb24ndCBib3RoZXIgd2l0aCB0aGUgdHJpY2tlcnkgaW4gcGxhaW4udGV4IHRvIG5vdCByZXF1aXJlIHRoZQorJSBmb290bm90ZSB0ZXh0IGFzIGEgcGFyYW1ldGVyLiAgT3VyIGZvb3Rub3RlcyBkb24ndCBuZWVkIHRvIGJlIHNvIGdlbmVyYWwuCislCislIE9oIHllcywgdGhleSBkbzsgb3RoZXJ3aXNlLCBAaWZzZXQgKGFuZCBhbnl0aGluZyBlbHNlIHRoYXQgdXNlcworJSBccGFyc2VhcmdsaW5lKSBmYWlscyBpbnNpZGUgZm9vdG5vdGVzIGJlY2F1c2UgdGhlIHRva2VucyBhcmUgZml4ZWQgd2hlbgorJSB0aGUgZm9vdG5vdGUgaXMgcmVhZC4gIC0ta2FybCwgMTZub3Y5Ni4KKyUKK1xnZGVmXGRvZm9vdG5vdGV7JQorICBcaW5zZXJ0XGZvb3RpbnNcYmdyb3VwCisgICUgV2Ugd2FudCB0byB0eXBlc2V0IHRoaXMgdGV4dCBhcyBhIG5vcm1hbCBwYXJhZ3JhcGgsIGV2ZW4gaWYgdGhlCisgICUgZm9vdG5vdGUgcmVmZXJlbmNlIG9jY3VycyBpbiAoZm9yIGV4YW1wbGUpIGEgZGlzcGxheSBlbnZpcm9ubWVudC4KKyAgJSBTbyByZXNldCBzb21lIHBhcmFtZXRlcnMuCisgIFxoc2l6ZT1ccGFnZXdpZHRoCisgIFxpbnRlcmxpbmVwZW5hbHR5XGludGVyZm9vdG5vdGVsaW5lcGVuYWx0eQorICBcc3BsaXR0b3Bza2lwXGh0XHN0cnV0Ym94ICUgdG9wIGJhc2VsaW5lIGZvciBicm9rZW4gZm9vdG5vdGVzCisgIFxzcGxpdG1heGRlcHRoXGRwXHN0cnV0Ym94CisgIFxmbG9hdGluZ3BlbmFsdHlcQE1NCisgIFxsZWZ0c2tpcFx6QHNraXAKKyAgXHJpZ2h0c2tpcFx6QHNraXAKKyAgXHNwYWNlc2tpcFx6QHNraXAKKyAgXHhzcGFjZXNraXBcekBza2lwCisgIFxwYXJpbmRlbnRcZGVmYXVsdHBhcmluZGVudAorICAlCisgIFxzbWFsbGZvbnRzIFxybQorICAlCisgICUgQmVjYXVzZSB3ZSB1c2UgaGFuZ2luZyBpbmRlbnRhdGlvbiBpbiBmb290bm90ZXMsIGEgQG5vaW5kZW50IGFwcGVhcnMKKyAgJSB0byBleGRlbnQgdGhpcyB0ZXh0LCBzbyBtYWtlIGl0IGJlIGEgbm8tb3AuICBtYWtlaW5mbyBkb2VzIG5vdCB1c2UKKyAgJSBoYW5naW5nIGluZGVudGF0aW9uIHNvIEBub2luZGVudCBjYW4gc3RpbGwgYmUgbmVlZGVkIHdpdGhpbiBmb290bm90ZQorICAlIHRleHQgYWZ0ZXIgYW4gQGV4YW1wbGUgb3IgdGhlIGxpa2UgKG5vdCB0aGF0IHRoaXMgaXMgZ29vZCBzdHlsZSkuCisgIFxsZXRcbm9pbmRlbnQgPSBccmVsYXgKKyAgJQorICAlIEhhbmcgdGhlIGZvb3Rub3RlIHRleHQgb2ZmIHRoZSBudW1iZXIuICBVc2UgXGV2ZXJ5cGFyIGluIGNhc2UgdGhlCisgICUgZm9vdG5vdGUgZXh0ZW5kcyBmb3IgbW9yZSB0aGFuIG9uZSBwYXJhZ3JhcGguCisgIFxldmVyeXBhciA9IHtcaGFuZ30lCisgIFx0ZXh0aW5kZW50e1x0aGlzZm9vdG5vfSUKKyAgJQorICAlIERvbid0IGNyYXNoIGludG8gdGhlIGxpbmUgYWJvdmUgdGhlIGZvb3Rub3RlIHRleHQuICBTaW5jZSB0aGlzCisgICUgZXhwYW5kcyBpbnRvIGEgYm94LCBpdCBtdXN0IGNvbWUgd2l0aGluIHRoZSBwYXJhZ3JhcGgsIGxlc3QgaXQKKyAgJSBwcm92aWRlIGEgcGxhY2Ugd2hlcmUgVGVYIGNhbiBzcGxpdCB0aGUgZm9vdG5vdGUuCisgIFxmb290c3RydXQKKyAgXGZ1dHVyZWxldFxuZXh0XGZvQHQKK30KK30lZW5kIFxjYXRjb2RlIGBcQD0xMQorCislIEluIGNhc2UgYSBAZm9vdG5vdGUgYXBwZWFycyBpbiBhIHZib3gsIHNhdmUgdGhlIGZvb3Rub3RlIHRleHQgYW5kIGNyZWF0ZQorJSB0aGUgcmVhbCBcaW5zZXJ0IGp1c3QgYWZ0ZXIgdGhlIHZib3ggZmluaXNoZWQuICBPdGhlcndpc2UsIHRoZSBpbnNlcnRpb24KKyUgd291bGQgYmUgbG9zdC4KKyUgU2ltaWxhcmlseSwgaWYgYSBAZm9vdG5vdGUgYXBwZWFycyBpbnNpZGUgYW4gYWxpZ25tZW50LCBzYXZlIHRoZSBmb290bm90ZQorJSB0ZXh0IHRvIGEgYm94IGFuZCBtYWtlIHRoZSBcaW5zZXJ0IHdoZW4gYSByb3cgb2YgdGhlIHRhYmxlIGlzIGZpbmlzaGVkLgorJSBBbmQgdGhlIHNhbWUgY2FuIGJlIGRvbmUgZm9yIG90aGVyIGluc2VydCBjbGFzc2VzLiAgLS1rYXNhbCwgMTZub3YwMy4KKworJSBSZXBsYWNlIHRoZSBcaW5zZXJ0IHByaW1pdGl2ZSBieSBhIGNoZWF0aW5nIG1hY3JvLgorJSBEZWVwZXIgaW5zaWRlLCBqdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBzYXZlZCBpbnNlcnRpb25zIGFyZSBub3Qgc3BpbGxlZAorJSBvdXQgcHJlbWF0dXJlbHkuCislCitcZGVmXHN0YXJ0c2F2aW5naW5zZXJ0c3slCisgIFxpZnggXGluc2VydFxwdGV4aW5zZXJ0CisgICAgXGxldFxpbnNlcnRcc2F2ZWluc2VydAorICBcZWxzZQorICAgIFxsZXRcY2hlY2tpbnNlcnRzXHJlbGF4CisgIFxmaQorfQorCislIFRoaXMgXGluc2VydCByZXBsYWNlbWVudCB3b3JrcyBmb3IgYm90aCBcaW5zZXJ0XGZvb3RpbnN7Zm9vfSBhbmQKKyUgXGluc2VydFxmb290aW5zXGJncm91cCBmb29cZWdyb3VwLCBidXQgaXQgZG9lc24ndCB3b3JrIGZvciBcaW5zZXJ0Mjd7Zm9vfS4KKyUKK1xkZWZcc2F2ZWluc2VydCMxeyUKKyAgXGVkZWZcbmV4dHtcbm9leHBhbmRcc2F2ZXRvYm94IFxtYWtlU0FWRW5hbWUjMX0lCisgIFxhZnRlcmFzc2lnbm1lbnRcbmV4dAorICAlIHN3YWxsb3cgdGhlIGxlZnQgYnJhY2UKKyAgXGxldFx0ZW1wID0KK30KK1xkZWZcbWFrZVNBVkVuYW1lIzF7XG1ha2Vjc25hbWV7U0FWRVxleHBhbmRhZnRlclxnb2JibGVcc3RyaW5nIzF9fQorXGRlZlxzYXZldG9ib3gjMXtcZ2xvYmFsXHNldGJveCMxID0gXHZib3hcYmdyb3VwIFx1bnZib3gjMX0KKworXGRlZlxjaGVja3NhdmVpbnMjMXtcaWZ2b2lkIzFcZWxzZSBccGxhY2VzYXZlaW5zIzFcZml9CisKK1xkZWZccGxhY2VzYXZlaW5zIzF7JQorICBccHRleGluc2VydCBcY3NuYW1lXGV4cGFuZGFmdGVyXGdvYmJsZXNhdmVcc3RyaW5nIzFcZW5kY3NuYW1lCisgICAge1xib3gjMX0lCit9CisKKyUgZWF0IEBTQVZFIC0tIGJld2FyZSwgYWxsIG9mIHRoZW0gaGF2ZSBjYXRjb2RlIFxvdGhlcjoKK3sKKyAgXGRlZlxkb3NwZWNpYWxze1xkbyBTXGRvIEFcZG8gVlxkbyBFfSBcdW5jYXRjb2Rlc3BlY2lhbHMgICUgIDstKQorICBcZ2RlZlxnb2JibGVzYXZlIEBTQVZFe30KK30KKworJSBpbml0aWFsaXphdGlvbjoKK1xkZWZcbmV3c2F2ZWlucyAjMXslCisgIFxlZGVmXG5leHR7XG5vZXhwYW5kXG5ld3NhdmVpbnNYIFxtYWtlU0FWRW5hbWUjMX0lCisgIFxuZXh0Cit9CitcZGVmXG5ld3NhdmVpbnNYICMxeyUKKyAgXGNzbmFtZSBuZXdib3hcZW5kY3NuYW1lICMxJQorICBcZXhwYW5kYWZ0ZXJcZGVmXGV4cGFuZGFmdGVyXGNoZWNraW5zZXJ0c1xleHBhbmRhZnRlcntcY2hlY2tpbnNlcnRzCisgICAgXGNoZWNrc2F2ZWlucyAjMX0lCit9CisKKyUgaW5pdGlhbGl6ZToKK1xsZXRcY2hlY2tpbnNlcnRzXGVtcHR5CitcbmV3c2F2ZWluc1xmb290aW5zCitcbmV3c2F2ZWluc1xtYXJnaW4KKworCislIEBpbWFnZS4gIFdlIHVzZSB0aGUgbWFjcm9zIGZyb20gZXBzZi50ZXggdG8gc3VwcG9ydCB0aGlzLgorJSBJZiBlcHNmLnRleCBpcyBub3QgaW5zdGFsbGVkIGFuZCBAaW1hZ2UgaXMgdXNlZCwgd2UgY29tcGxhaW4uCislCislIENoZWNrIGZvciBhbmQgcmVhZCBlcHNmLnRleCB1cCBmcm9udC4gIElmIHdlIHJlYWQgaXQgb25seSBhdCBAaW1hZ2UKKyUgdGltZSwgd2UgbWlnaHQgYmUgaW5zaWRlIGEgZ3JvdXAsIGFuZCB0aGVuIGl0cyBkZWZpbml0aW9ucyB3b3VsZCBnZXQKKyUgdW5kb25lIGFuZCB0aGUgbmV4dCBpbWFnZSB3b3VsZCBmYWlsLgorXG9wZW5pbiAxID0gZXBzZi50ZXgKK1xpZmVvZiAxIFxlbHNlCisgICUgRG8gbm90IGJvdGhlciBzaG93aW5nIGJhbm5lciB3aXRoIGVwc2YudGV4IHYyLjdrIChhdmFpbGFibGUgaW4KKyAgJSBkb2MvZXBzZi50ZXggYW5kIG9uIGN0YW4pLgorICBcZGVmXGVwc2Zhbm5vdW5jZXtcdG9rczAgPSB9JQorICBcaW5wdXQgZXBzZi50ZXgKK1xmaQorXGNsb3NlaW4gMQorJQorJSBXZSB3aWxsIG9ubHkgY29tcGxhaW4gb25jZSBhYm91dCBsYWNrIG9mIGVwc2YudGV4LgorXG5ld2lmXGlmd2FybmVkbm9lcHNmCitcbmV3aGVscFxub2Vwc2ZoZWxwe2Vwc2YudGV4IG11c3QgYmUgaW5zdGFsbGVkIGZvciBpbWFnZXMgdG8KKyAgd29yay4gIEl0IGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFRleGluZm8gZGlzdHJpYnV0aW9uLCBvciB5b3UgY2FuIGdldAorICBpdCBmcm9tIGZ0cDovL3R1Zy5vcmcvdGV4L2Vwc2YudGV4Ln0KKyUKK1xkZWZcaW1hZ2UjMXslCisgIFxpZnhcZXBzZmJveFx1bmRlZmluZWQKKyAgICBcaWZ3YXJuZWRub2Vwc2YgXGVsc2UKKyAgICAgIFxlcnJoZWxwID0gXG5vZXBzZmhlbHAKKyAgICAgIFxlcnJtZXNzYWdle2Vwc2YudGV4IG5vdCBmb3VuZCwgaW1hZ2VzIHdpbGwgYmUgaWdub3JlZH0lCisgICAgICBcZ2xvYmFsXHdhcm5lZG5vZXBzZnRydWUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcaW1hZ2V4eHggIzEsLCwsLFxmaW5pc2gKKyAgXGZpCit9CislCislIEFyZ3VtZW50cyB0byBAaW1hZ2U6CislICMxIGlzIChtYW5kYXRvcnkpIGltYWdlIGZpbGVuYW1lOyB3ZSB0YWNrIG9uIC5lcHMgZXh0ZW5zaW9uLgorJSAjMiBpcyAob3B0aW9uYWwpIHdpZHRoLCAjMyBpcyAob3B0aW9uYWwpIGhlaWdodC4KKyUgIzQgaXMgKGlnbm9yZWQgb3B0aW9uYWwpIGh0bWwgYWx0IHRleHQuCislICM1IGlzIChpZ25vcmVkIG9wdGlvbmFsKSBleHRlbnNpb24uCislICM2IGlzIGp1c3QgdGhlIHVzdWFsIGV4dHJhIGlnbm9yZWQgYXJnIGZvciBwYXJzaW5nIHRoaXMgc3R1ZmYuCitcbmV3aWZcaWZpbWFnZXZtb2RlCitcZGVmXGltYWdleHh4IzEsIzIsIzMsIzQsIzUsIzZcZmluaXNoe1xiZWdpbmdyb3VwCisgIFxjYXRjb2RlYFxeXk0gPSA1ICAgICAlIGluIGNhc2Ugd2UncmUgaW5zaWRlIGFuIGV4YW1wbGUKKyAgXG5vcm1hbHR1cm5vZmZhY3RpdmUgICUgYWxsb3cgXyBldCBhbC4gaW4gbmFtZXMKKyAgJSBJZiB0aGUgaW1hZ2UgaXMgYnkgaXRzZWxmLCBjZW50ZXIgaXQuCisgIFxpZnZtb2RlCisgICAgXGltYWdldm1vZGV0cnVlCisgICAgXG5vYnJlYWtcYmlnc2tpcAorICAgICUgVXN1YWxseSB3ZSdsbCBoYXZlIHRleHQgYWZ0ZXIgdGhlIGltYWdlIHdoaWNoIHdpbGwgaW5zZXJ0CisgICAgJSBccGFyc2tpcCBnbHVlLCBzbyBpbnNlcnQgaXQgaGVyZSB0b28gdG8gZXF1YWxpemUgdGhlIHNwYWNlCisgICAgJSBhYm92ZSBhbmQgYmVsb3cuCisgICAgXG5vYnJlYWtcdnNraXBccGFyc2tpcAorICAgIFxub2JyZWFrCisgICAgXGxpbmVcYmdyb3VwXGhzcworICBcZmkKKyAgJQorICAlIE91dHB1dCB0aGUgaW1hZ2UuCisgIFxpZnBkZgorICAgIFxkb3BkZmltYWdleyMxfXsjMn17IzN9JQorICBcZWxzZQorICAgICUgXGVwc2Zib3ggaXRzZWxmIHJlc2V0cyBcZXBzZj9zaXplIGF0IGVhY2ggZmlndXJlLgorICAgIFxzZXRib3gwID0gXGhib3h7XGlnbm9yZXNwYWNlcyAjMn1caWZkaW1cd2QwID4gMHB0IFxlcHNmeHNpemU9IzJccmVsYXggXGZpCisgICAgXHNldGJveDAgPSBcaGJveHtcaWdub3Jlc3BhY2VzICMzfVxpZmRpbVx3ZDAgPiAwcHQgXGVwc2Z5c2l6ZT0jM1xyZWxheCBcZmkKKyAgICBcZXBzZmJveHsjMS5lcHN9JQorICBcZmkKKyAgJQorICBcaWZpbWFnZXZtb2RlIFxoc3MgXGVncm91cCBcYmlnYnJlYWsgXGZpICAlIHNwYWNlIGFmdGVyIHRoZSBpbWFnZQorXGVuZGdyb3VwfQorCisKKyUgQGZsb2F0IEZMT0FUVFlQRSxMQUJFTCxMT0MgLi4uIEBlbmQgZmxvYXQgZm9yIGRpc3BsYXllZCBmaWd1cmVzLCB0YWJsZXMsCislIGV0Yy4gIFdlIGRvbid0IGFjdHVhbGx5IGltcGxlbWVudCBmbG9hdGluZyB5ZXQsIHdlIGFsd2F5cyBpbmNsdWRlIHRoZQorJSBmbG9hdCAiaGVyZSIuICBCdXQgaXQgc2VlbWVkIHRoZSBiZXN0IG5hbWUgZm9yIHRoZSBmdXR1cmUuCislCitcZW52cGFyc2VhcmdkZWZcZmxvYXR7XGVhdGNvbW1hc3BhY2VcZWF0Y29tbWFzcGFjZVxkb2Zsb2F0IzEsICwgLFxmaW5pc2h9CisKKyUgVGhlcmUgbWF5IGJlIGEgc3BhY2UgYmVmb3JlIHNlY29uZCBhbmQvb3IgdGhpcmQgcGFyYW1ldGVyOyBkZWxldGUgaXQuCitcZGVmXGVhdGNvbW1hc3BhY2UjMSwgeyMxLH0KKworJSAjMSBpcyB0aGUgb3B0aW9uYWwgRkxPQVRUWVBFLCB0aGUgdGV4dCBsYWJlbCBmb3IgdGhpcyBmbG9hdCwgdHlwaWNhbGx5CislICJGaWd1cmUiLCAiVGFibGUiLCAiRXhhbXBsZSIsIGV0Yy4gIENhbid0IGNvbnRhaW4gY29tbWFzLiAgSWYgb21pdHRlZCwKKyUgdGhpcyBmbG9hdCB3aWxsIG5vdCBiZSBudW1iZXJlZCBhbmQgY2Fubm90IGJlIHJlZmVycmVkIHRvLgorJQorJSAjMiBpcyB0aGUgb3B0aW9uYWwgeHJlZiBsYWJlbC4gIEFsc28gbXVzdCBiZSBwcmVzZW50IGZvciB0aGUgZmxvYXQgdG8KKyUgYmUgcmVmZXJhYmxlLgorJQorJSAjMyBpcyB0aGUgb3B0aW9uYWwgcG9zaXRpb25pbmcgYXJndW1lbnQ7IGZvciBub3csIGl0IGlzIGlnbm9yZWQuICBJdAorJSB3aWxsIHNvbWVob3cgc3BlY2lmeSB0aGUgcG9zaXRpb25zIGFsbG93ZWQgdG8gZmxvYXQgdG8gKGhlcmUsIHRvcCwgYm90dG9tKS4KKyUKKyUgV2Uga2VlcCBhIHNlcGFyYXRlIGNvdW50ZXIgZm9yIGVhY2ggRkxPQVRUWVBFLCB3aGljaCB3ZSByZXNldCBhdCBlYWNoCislIGNoYXB0ZXItbGV2ZWwgY29tbWFuZC4KK1xsZXRccmVzZXRhbGxmbG9hdG5vcz1cZW1wdHkKKyUKK1xkZWZcZG9mbG9hdCMxLCMyLCMzLCM0XGZpbmlzaHslCisgIFxsZXRcdGhpc2NhcHRpb249XGVtcHR5CisgIFxsZXRcdGhpc3Nob3J0Y2FwdGlvbj1cZW1wdHkKKyAgJQorICAlIGRvbid0IGxvc2UgZm9vdG5vdGVzIGluc2lkZSBAZmxvYXQuCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcc3RhcnRzYXZpbmdpbnNlcnRzCisgICUKKyAgJSBXZSBjYW4ndCBiZSB1c2VkIGluc2lkZSBhIHBhcmFncmFwaC4KKyAgXHBhcgorICAlCisgIFx2dG9wXGJncm91cAorICAgIFxkZWZcZmxvYXR0eXBleyMxfSUKKyAgICBcZGVmXGZsb2F0bGFiZWx7IzJ9JQorICAgIFxkZWZcZmxvYXRsb2N7IzN9JSB3ZSBkbyBub3RoaW5nIHdpdGggdGhpcyB5ZXQuCisgICAgJQorICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5CisgICAgICBcbGV0XHNhZmVmbG9hdHR5cGU9XGVtcHR5CisgICAgXGVsc2UKKyAgICAgIHslCisgICAgICAgICUgdGhlIGZsb2F0dHlwZSBtaWdodCBoYXZlIGFjY2VudHMgb3Igb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzLAorICAgICAgICAlIGJ1dCB3ZSBuZWVkIHRvIHVzZSBpdCBpbiBhIGNvbnRyb2wgc2VxdWVuY2UgbmFtZS4KKyAgICAgICAgXGluZGV4bm9mb250cworICAgICAgICBcdHVybm9mZmFjdGl2ZQorICAgICAgICBceGRlZlxzYWZlZmxvYXR0eXBle1xmbG9hdHR5cGV9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBJZiBsYWJlbCBpcyBnaXZlbiBidXQgbm8gdHlwZSwgd2UgaGFuZGxlIHRoYXQgYXMgdGhlIGVtcHR5IHR5cGUuCisgICAgXGlmeFxmbG9hdGxhYmVsXGVtcHR5IFxlbHNlCisgICAgICAlIFdlIHdhbnQgZWFjaCBGTE9BVFRZUEUgdG8gYmUgbnVtYmVyZWQgc2VwYXJhdGVseSAoRmlndXJlIDEsCisgICAgICAlIFRhYmxlIDEsIEZpZ3VyZSAyLCAuLi4pLiAgKEFuZCBpZiBubyBsYWJlbCwgbm8gbnVtYmVyLikKKyAgICAgICUKKyAgICAgIFxleHBhbmRhZnRlclxnZXRmbG9hdG5vXGNzbmFtZVxzYWZlZmxvYXR0eXBlIGZsb2F0bm9cZW5kY3NuYW1lCisgICAgICBcZ2xvYmFsXGFkdmFuY2VcZmxvYXRubyBieSAxCisgICAgICAlCisgICAgICB7JQorICAgICAgICAlIFRoaXMgbWFnaWMgdmFsdWUgZm9yIFx0aGlzc2VjdGlvbiBpcyBvdXRwdXQgYnkgXHNldHJlZiBhcyB0aGUKKyAgICAgICAgJSBYUkVGTEFCRUwtdGl0bGUgdmFsdWUuICBceHJlZlggdXNlcyBpdCB0byBkaXN0aW5ndWlzaCBmbG9hdAorICAgICAgICAlIGxhYmVscyAod2hpY2ggaGF2ZSBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IG91dHB1dCBmb3JtYXQpIGZyb20KKyAgICAgICAgJSBub2RlIGFuZCBhbmNob3IgbGFiZWxzLiAgQW5kIFx4cmRlZiB1c2VzIGl0IHRvIGNvbnN0cnVjdCB0aGUKKyAgICAgICAgJSBsaXN0cyBvZiBmbG9hdHMuCisgICAgICAgICUKKyAgICAgICAgXGVkZWZcdGhpc3NlY3Rpb257XGZsb2F0bWFnaWM9XHNhZmVmbG9hdHR5cGV9JQorICAgICAgICBcc2V0cmVme1xmbG9hdGxhYmVsfXtZZmxvYXR9JQorICAgICAgfSUKKyAgICBcZmkKKyAgICAlCisgICAgJSBzdGFydCB3aXRoIFxwYXJza2lwIGdsdWUsIEkgZ3Vlc3MuCisgICAgXHZza2lwXHBhcnNraXAKKyAgICAlCisgICAgJSBEb24ndCBzdXBwcmVzcyBpbmRlbnRhdGlvbiBpZiBhIGZsb2F0IGhhcHBlbnMgdG8gc3RhcnQgYSBzZWN0aW9uLgorICAgIFxyZXN0b3JlZmlyc3RwYXJhZ3JhcGhpbmRlbnQKK30KKworJSB3ZSBoYXZlIHRoZXNlIHBvc3NpYmlsaXRpZXM6CislIEBmbG9hdCBGb28sbGJsICYgQGNhcHRpb257Q2FwfTogRm9vIDEuMTogQ2FwCislIEBmbG9hdCBGb28sbGJsICYgbm8gY2FwdGlvbjogICAgRm9vIDEuMQorJSBAZmxvYXQgRm9vICYgQGNhcHRpb257Q2FwfTogICAgIEZvbzogQ2FwCislIEBmbG9hdCBGb28gJiBubyBjYXB0aW9uOiAgICAgICAgRm9vCislIEBmbG9hdCAsbGJsICYgQ2FwdGlvbntDYXB9OiAgICAgMS4xOiBDYXAKKyUgQGZsb2F0ICxsYmwgJiBubyBjYXB0aW9uOiAgICAgICAxLjEKKyUgQGZsb2F0ICYgQGNhcHRpb257Q2FwfTogICAgICAgICBDYXAKKyUgQGZsb2F0ICYgbm8gY2FwdGlvbjoKKyUKK1xkZWZcRWZsb2F0eyUKKyAgICBcbGV0XGZsb2F0aWRlbnQgPSBcZW1wdHkKKyAgICAlCisgICAgJSBJbiBhbGwgY2FzZXMsIGlmIHdlIGhhdmUgYSBmbG9hdCB0eXBlLCBpdCBjb21lcyBmaXJzdC4KKyAgICBcaWZ4XGZsb2F0dHlwZVxlbXB0eSBcZWxzZSBcZGVmXGZsb2F0aWRlbnR7XGZsb2F0dHlwZX1cZmkKKyAgICAlCisgICAgJSBJZiB3ZSBoYXZlIGFuIHhyZWYgbGFiZWwsIHRoZSBudW1iZXIgY29tZXMgbmV4dC4KKyAgICBcaWZ4XGZsb2F0bGFiZWxcZW1wdHkgXGVsc2UKKyAgICAgIFxpZnhcZmxvYXR0eXBlXGVtcHR5IFxlbHNlICUgaWYgYWxzbyBoYWQgZmxvYXQgdHlwZSwgbmVlZCB0aWUgZmlyc3QuCisgICAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XHRpZX0lCisgICAgICBcZmkKKyAgICAgICUgdGhlIG51bWJlci4KKyAgICAgIFxhcHBlbmR0b21hY3JvXGZsb2F0aWRlbnR7XGNoYXBsZXZlbHByZWZpeFx0aGVcZmxvYXRub30lCisgICAgXGZpCisgICAgJQorICAgICUgU3RhcnQgdGhlIHByaW50ZWQgY2FwdGlvbiB3aXRoIHdoYXQgd2UndmUgY29uc3RydWN0ZWQgaW4KKyAgICAlIFxmbG9hdGlkZW50LCBidXQga2VlcCBpdCBzZXBhcmF0ZTsgd2UgbmVlZCBcZmxvYXRpZGVudCBhZ2Fpbi4KKyAgICBcbGV0XGNhcHRpb25saW5lID0gXGZsb2F0aWRlbnQKKyAgICAlCisgICAgXGlmeFx0aGlzY2FwdGlvblxlbXB0eSBcZWxzZQorICAgICAgXGlmeFxmbG9hdGlkZW50XGVtcHR5IFxlbHNlCisJXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7OiB9JSBoYWQgaWRlbnQsIHNvIG5lZWQgYSBjb2xvbiBiZXR3ZWVuCisgICAgICBcZmkKKyAgICAgICUKKyAgICAgICUgY2FwdGlvbiB0ZXh0LgorICAgICAgXGFwcGVuZHRvbWFjcm9cY2FwdGlvbmxpbmV7XHNjYW5leHBcdGhpc2NhcHRpb259JQorICAgIFxmaQorICAgICUKKyAgICAlIElmIHdlIGhhdmUgYW55dGhpbmcgdG8gcHJpbnQsIHByaW50IGl0LCB3aXRoIHNwYWNlIGJlZm9yZS4KKyAgICAlIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyB0byBiZWNvbWUgYW4gXGluc2VydC4KKyAgICBcaWZ4XGNhcHRpb25saW5lXGVtcHR5IFxlbHNlCisgICAgICBcdnNraXAuNVxwYXJza2lwCisgICAgICBcY2FwdGlvbmxpbmUKKyAgICAgICUKKyAgICAgICUgU3BhY2UgYmVsb3cgY2FwdGlvbi4KKyAgICAgIFx2c2tpcFxwYXJza2lwCisgICAgXGZpCisgICAgJQorICAgICUgSWYgaGF2ZSBhbiB4cmVmIGxhYmVsLCB3cml0ZSB0aGUgbGlzdCBvZiBmbG9hdHMgaW5mby4gIERvIHRoaXMKKyAgICAlIGFmdGVyIHRoZSBjYXB0aW9uLCB0byBhdm9pZCBjaGFuY2Ugb2YgaXQgYmVpbmcgYSBicmVha3BvaW50LgorICAgIFxpZnhcZmxvYXRsYWJlbFxlbXB0eSBcZWxzZQorICAgICAgJSBXcml0ZSB0aGUgdGV4dCB0aGF0IGdvZXMgaW4gdGhlIGxvZiB0byB0aGUgYXV4IGZpbGUgYXMKKyAgICAgICUgXGZsb2F0bGFiZWwtbG9mLiAgQmVzaWRlcyBcZmxvYXRpZGVudCwgd2UgaW5jbHVkZSB0aGUgc2hvcnQKKyAgICAgICUgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2UgdGhlIGZ1bGwgY2FwdGlvbiBpZiBzcGVjaWZpZWQsIGVsc2Ugbm90aGluZy4KKyAgICAgIHslCisgICAgICAgIFxhdGR1bW1pZXMKKyAgICAgICAgJSBzaW5jZSB3ZSByZWFkIHRoZSBjYXB0aW9uIHRleHQgaW4gdGhlIG1hY3JvIHdvcmxkLCB3aGVyZSBeXk0KKyAgICAgICAgJSBpcyB0dXJuZWQgaW50byBhIG5vcm1hbCBjaGFyYWN0ZXIsIHdlIGhhdmUgdG8gc2NhbiBpdCBiYWNrLCBzbworICAgICAgICAlIHdlIGRvbid0IHdyaXRlIHRoZSBsaXRlcmFsIHRocmVlIGNoYXJhY3RlcnMgIl5eTSIgaW50byB0aGUgYXV4IGZpbGUuCisJXHNjYW5leHB7JQorCSAgXHhkZWZcbm9leHBhbmRcZ3RlbXB7JQorCSAgICBcaWZ4XHRoaXNzaG9ydGNhcHRpb25cZW1wdHkKKwkgICAgICBcdGhpc2NhcHRpb24KKwkgICAgXGVsc2UKKwkgICAgICBcdGhpc3Nob3J0Y2FwdGlvbgorCSAgICBcZmkKKwkgIH0lCisJfSUKKyAgICAgICAgXGltbWVkaWF0ZVx3cml0ZVxhdXhmaWxle0B4cmRlZntcZmxvYXRsYWJlbC1sb2Z9e1xmbG9hdGlkZW50CisJICBcaWZ4XGd0ZW1wXGVtcHR5IFxlbHNlIDogXGd0ZW1wIFxmaX19JQorICAgICAgfSUKKyAgICBcZmkKKyAgXGVncm91cCAgJSBlbmQgb2YgXHZ0b3AKKyAgJQorICAlIHBsYWNlIHRoZSBjYXB0dXJlZCBpbnNlcnRzCisgICUKKyAgJSBCRVdBUkU6IHdoZW4gdGhlIGZsb2F0cyBzdGFydCBmbG9hdCwgd2UgaGF2ZSB0byBpc3N1ZSB3YXJuaW5nIHdoZW5ldmVyIGFuCisgICUgaW5zZXJ0IGFwcGVhcnMgaW5zaWRlIGEgZmxvYXQgd2hpY2ggY291bGQgcG9zc2libHkgZmxvYXQuIC0ta2FzYWwsIDI2bWF5MDQKKyAgJQorICBcY2hlY2tpbnNlcnRzCit9CisKKyUgQXBwZW5kIHRoZSB0b2tlbnMgIzIgdG8gdGhlIGRlZmluaXRpb24gb2YgbWFjcm8gIzEsIG5vdCBleHBhbmRpbmcgZWl0aGVyLgorJQorXGRlZlxhcHBlbmR0b21hY3JvIzEjMnslCisgIFxleHBhbmRhZnRlclxkZWZcZXhwYW5kYWZ0ZXIjMVxleHBhbmRhZnRlcnsjMSMyfSUKK30KKworJSBAY2FwdGlvbiwgQHNob3J0Y2FwdGlvbgorJQorXGRlZlxjYXB0aW9ue1xkb2NhcHRpb25cdGhpc2NhcHRpb259CitcZGVmXHNob3J0Y2FwdGlvbntcZG9jYXB0aW9uXHRoaXNzaG9ydGNhcHRpb259CitcZGVmXGRvY2FwdGlvbntcY2hlY2tlbnZcZmxvYXQgXGJncm91cFxzY2FuYXJnY3R4dFxkZWZjYXB0aW9ufQorXGRlZlxkZWZjYXB0aW9uIzEjMntcZWdyb3VwIFxkZWYjMXsjMn19CisKKyUgVGhlIHBhcmFtZXRlciBpcyB0aGUgY29udHJvbCBzZXF1ZW5jZSBpZGVudGlmeWluZyB0aGUgY291bnRlciB3ZSBhcmUKKyUgZ29pbmcgdG8gdXNlLiAgQ3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgZXhpc3QgYW5kIGFzc2lnbiBpdCB0byBcZmxvYXRuby4KK1xkZWZcZ2V0ZmxvYXRubyMxeyUKKyAgXGlmeCMxXHJlbGF4CisgICAgICAlIEhhdmVuJ3Qgc2VlbiB0aGlzIGZpZ3VyZSB0eXBlIGJlZm9yZS4KKyAgICAgIFxjc25hbWUgbmV3Y291bnRcZW5kY3NuYW1lICMxJQorICAgICAgJQorICAgICAgJSBSZW1lbWJlciB0byByZXNldCB0aGlzIGZsb2F0bm8gYXQgdGhlIG5leHQgY2hhcC4KKyAgICAgIFxleHBhbmRhZnRlclxnZGVmXGV4cGFuZGFmdGVyXHJlc2V0YWxsZmxvYXRub3MKKyAgICAgICAgXGV4cGFuZGFmdGVye1xyZXNldGFsbGZsb2F0bm9zICMxPTAgfSUKKyAgXGZpCisgIFxsZXRcZmxvYXRubyMxJQorfQorCislIFxzZXRyZWYgY2FsbHMgdGhpcyB0byBnZXQgdGhlIFhSRUZMQUJFTC1zbnQgdmFsdWUuICBXZSB3YW50IGFuIEB4cmVmCislIHRvIHRoZSBGTE9BVExBQkVMIHRvIGV4cGFuZCB0byAiRmlndXJlIDMuMSIuICBXZSBjYWxsIFxzZXRyZWYgd2hlbiB3ZQorJSBmaXJzdCByZWFkIHRoZSBAZmxvYXQgY29tbWFuZC4KKyUKK1xkZWZcWWZsb2F0e1xmbG9hdHR5cGVAdGllIFxjaGFwbGV2ZWxwcmVmaXhcdGhlXGZsb2F0bm99JQorCislIE1hZ2ljIHN0cmluZyB1c2VkIGZvciB0aGUgWFJFRkxBQkVMLXRpdGxlIHZhbHVlLCBzbyBceHJlZlggY2FuCislIGRpc3Rpbmd1aXNoIGZsb2F0cyBmcm9tIG90aGVyIHhyZWYgdHlwZXMuCitcZGVmXGZsb2F0bWFnaWN7ISFmbG9hdCEhfQorCislICMxIGlzIHRoZSBjb250cm9sIHNlcXVlbmNlIHdlIGFyZSBwYXNzZWQ7IHdlIGV4cGFuZCBpbnRvIGEgY29uZGl0aW9uYWwKKyUgd2hpY2ggaXMgdHJ1ZSBpZiAjMSByZXByZXNlbnRzIGEgZmxvYXQgcmVmLiAgVGhhdCBpcywgdGhlIG1hZ2ljCislIFx0aGlzc2VjdGlvbiB2YWx1ZSB3aGljaCB3ZSBcc2V0cmVmIGFib3ZlLgorJQorXGRlZlxpZmZsb2F0IzF7XGV4cGFuZGFmdGVyXGRvaWZmbG9hdCMxPT1cZmluaXNofQorJQorJSAjMSBpcyAobWF5YmUpIHRoZSBcZmxvYXRtYWdpYyBzdHJpbmcuICBJZiBzbywgIzIgd2lsbCBiZSB0aGUKKyUgKHNhZmUpIGZsb2F0IHR5cGUgZm9yIHRoaXMgZmxvYXQuICBXZSBzZXQgXGlmZmxvYXR0eXBlIHRvICMyLgorJQorXGRlZlxkb2lmZmxvYXQjMT0jMj0jM1xmaW5pc2h7JQorICBcZGVmXHRlbXB7IzF9JQorICBcZGVmXGlmZmxvYXR0eXBleyMyfSUKKyAgXGlmeFx0ZW1wXGZsb2F0bWFnaWMKK30KKworJSBAbGlzdG9mZmxvYXRzIEZMT0FUVFlQRSAtIHByaW50IGEgbGlzdCBvZiBmbG9hdHMgbGlrZSBhIHRhYmxlIG9mIGNvbnRlbnRzLgorJQorXHBhcnNlYXJnZGVmXGxpc3RvZmZsb2F0c3slCisgIFxkZWZcZmxvYXR0eXBleyMxfSUgZmxvYXR0eXBlCisgIHslCisgICAgJSB0aGUgZmxvYXR0eXBlIG1pZ2h0IGhhdmUgYWNjZW50cyBvciBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMsCisgICAgJSBidXQgd2UgbmVlZCB0byB1c2UgaXQgaW4gYSBjb250cm9sIHNlcXVlbmNlIG5hbWUuCisgICAgXGluZGV4bm9mb250cworICAgIFx0dXJub2ZmYWN0aXZlCisgICAgXHhkZWZcc2FmZWZsb2F0dHlwZXtcZmxvYXR0eXBlfSUKKyAgfSUKKyAgJQorICAlIFx4cmRlZiBzYXZlcyB0aGUgZmxvYXRzIGFzIGEgXGRvLWxpc3QgaW4gXGZsb2F0bGlzdFNBRkVGTE9BVFRZUEUuCisgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lIGZsb2F0bGlzdFxzYWZlZmxvYXR0eXBlXGVuZGNzbmFtZSBccmVsYXgKKyAgICBcaWZoYXZleHJlZnMKKyAgICAgICUgaWYgdGhlIHVzZXIgc2FpZCBAbGlzdG9mZmxvYXRzIGZvbyBidXQgbmV2ZXIgQGZsb2F0IGZvby4KKyAgICAgIFxtZXNzYWdle1xsaW5lbnVtYmVyIE5vIGBcc2FmZWZsb2F0dHlwZScgZmxvYXRzIHRvIGxpc3QufSUKKyAgICBcZmkKKyAgXGVsc2UKKyAgICBcYmVnaW5ncm91cAorICAgICAgXGxlZnRza2lwPVx0b2NpbmRlbnQgICUgaW5kZW50IHRoZXNlIGVudHJpZXMgbGlrZSBhIHRvYworICAgICAgXGxldFxkbz1cbGlzdG9mZmxvYXRzZG8KKyAgICAgIFxjc25hbWUgZmxvYXRsaXN0XHNhZmVmbG9hdHR5cGVcZW5kY3NuYW1lCisgICAgXGVuZGdyb3VwCisgIFxmaQorfQorCislIFRoaXMgaXMgY2FsbGVkIG9uIGVhY2ggZW50cnkgaW4gYSBsaXN0IG9mIGZsb2F0cy4gIFdlJ3JlIHBhc3NlZCB0aGUKKyUgeHJlZiBsYWJlbCwgaW4gdGhlIGZvcm0gTEFCRUwtdGl0bGUsIHdoaWNoIGlzIGhvdyB3ZSBzYXZlIGl0IGluIHRoZQorJSBhdXggZmlsZS4gIFdlIHN0cmlwIG9mZiB0aGUgLXRpdGxlIGFuZCBsb29rIHVwIFxYUkxBQkVMLWxvZiwgd2hpY2gKKyUgaGFzIHRoZSB0ZXh0IHdlJ3JlIHN1cHBvc2VkIHRvIHR5cGVzZXQgaGVyZS4KKyUKKyUgRmlndXJlcyB3aXRob3V0IHhyZWYgbGFiZWxzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBsaXN0IChzaW5jZQorJSB0aGV5IHdvbid0IGFwcGVhciBpbiB0aGUgYXV4IGZpbGUpLgorJQorXGRlZlxsaXN0b2ZmbG9hdHNkbyMxe1xsaXN0b2ZmbG9hdHNkb2VudHJ5IzFcZmluaXNofQorXGRlZlxsaXN0b2ZmbG9hdHNkb2VudHJ5IzEtdGl0bGVcZmluaXNoe3slCisgICUgQ2FuJ3QgZnVsbHkgZXhwYW5kIFhSIzEtbG9mIGJlY2F1c2UgaXQgY2FuIGNvbnRhaW4gYW55dGhpbmcuICBKdXN0CisgICUgcGFzcyB0aGUgY29udHJvbCBzZXF1ZW5jZS4gIE9uIHRoZSBvdGhlciBoYW5kLCBYUiMxLXBnIGlzIGp1c3QgdGhlCisgICUgcGFnZSBudW1iZXIsIGFuZCB3ZSB3YW50IHRvIGZ1bGx5IGV4cGFuZCB0aGF0IHNvIHdlIGNhbiBnZXQgYSBsaW5rCisgICUgaW4gcGRmIG91dHB1dC4KKyAgXHRva3NBID0gXGV4cGFuZGFmdGVye1xjc25hbWUgWFIjMS1sb2ZcZW5kY3NuYW1lfSUKKyAgJQorICAlIHVzZSB0aGUgc2FtZSBcZW50cnkgbWFjcm8gd2UgdXNlIHRvIGdlbmVyYXRlIHRoZSBUT0MgYW5kIGluZGV4LgorICBcZWRlZlx3cml0ZWVudHJ5e1xub2V4cGFuZFxlbnRyeXtcdGhlXHRva3NBfXtcY3NuYW1lIFhSIzEtcGdcZW5kY3NuYW1lfX0lCisgIFx3cml0ZWVudHJ5Cit9fQorCitcbWVzc2FnZXtsb2NhbGl6YXRpb24sfQorJSBhbmQgaTE4bi4KKworJSBAZG9jdW1lbnRsYW5ndWFnZSBpcyB1c3VhbGx5IGdpdmVuIHZlcnkgZWFybHksIGp1c3QgYWZ0ZXIKKyUgQHNldGZpbGVuYW1lLiAgSWYgZG9uZSB0b28gbGF0ZSwgaXQgbWF5IG5vdCBvdmVycmlkZSBldmVyeXRoaW5nCislIHByb3Blcmx5LiAgU2luZ2xlIGFyZ3VtZW50IGlzIHRoZSBsYW5ndWFnZSBhYmJyZXZpYXRpb24uCislIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgc2V0IHVwIGEgaHlwaGVuYXRpb24gZmlsZSBoZXJlLgorJQorXHBhcnNlYXJnZGVmXGRvY3VtZW50bGFuZ3VhZ2V7JQorICBcdGV4ICUgcmVhZCB0eGktPz8udGV4IGZpbGUgaW4gcGxhaW4gVGVYLgorICAgICUgUmVhZCB0aGUgZmlsZSBpZiBpdCBleGlzdHMuCisgICAgXG9wZW5pbiAxIHR4aS0jMS50ZXgKKyAgICBcaWZlb2YgMQorICAgICAgXGVycmhlbHAgPSBcbm9sYW5naGVscAorICAgICAgXGVycm1lc3NhZ2V7Q2Fubm90IHJlYWQgbGFuZ3VhZ2UgZmlsZSB0eGktIzEudGV4fSUKKyAgICBcZWxzZQorICAgICAgXGlucHV0IHR4aS0jMS50ZXgKKyAgICBcZmkKKyAgICBcY2xvc2VpbiAxCisgIFxlbmRncm91cAorfQorXG5ld2hlbHBcbm9sYW5naGVscHtUaGUgZ2l2ZW4gbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmaWxlIGNhbm5vdCBiZSBmb3VuZCBvcgoraXMgZW1wdHkuICBNYXliZSB5b3UgbmVlZCB0byBpbnN0YWxsIGl0PyAgSW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5CitzaG91bGQgd29yayBpZiBub3doZXJlIGVsc2UgZG9lcy59CisKKworJSBAZG9jdW1lbnRlbmNvZGluZyBzaG91bGQgY2hhbmdlIHNvbWV0aGluZyBpbiBUZVggZXZlbnR1YWxseSwgbW9zdAorJSBsaWtlbHksIGJ1dCBmb3Igbm93IGp1c3QgcmVjb2duaXplIGl0LgorXGxldFxkb2N1bWVudGVuY29kaW5nID0gXGNvbW1lbnQKKworCislIFBhZ2Ugc2l6ZSBwYXJhbWV0ZXJzLgorJQorXG5ld2RpbWVuXGRlZmF1bHRwYXJpbmRlbnQgXGRlZmF1bHRwYXJpbmRlbnQgPSAxNXB0CisKK1xjaGFwaGVhZGluZ3NraXAgPSAxNXB0IHBsdXMgNHB0IG1pbnVzIDJwdAorXHNlY2hlYWRpbmdza2lwID0gMTJwdCBwbHVzIDNwdCBtaW51cyAycHQKK1xzdWJzZWNoZWFkaW5nc2tpcCA9IDlwdCBwbHVzIDJwdCBtaW51cyAycHQKKworJSBQcmV2ZW50IHVuZGVyZnVsbCB2Ym94IGVycm9yIG1lc3NhZ2VzLgorXHZiYWRuZXNzID0gMTAwMDAKKworJSBEb24ndCBiZSBzbyBmaW5pY2t5IGFib3V0IHVuZGVyZnVsbCBoYm94ZXMsIGVpdGhlci4KK1xoYmFkbmVzcyA9IDIwMDAKKworJSBGb2xsb3dpbmcgR2VvcmdlIEJ1c2gsIGp1c3QgZ2V0IHJpZCBvZiB3aWRvd3MgYW5kIG9ycGhhbnMuCitcd2lkb3dwZW5hbHR5PTEwMDAwCitcY2x1YnBlbmFsdHk9MTAwMDAKKworJSBVc2UgVGVYIDMuMCdzIFxlbWVyZ2VuY3lzdHJldGNoIHRvIGhlbHAgbGluZSBicmVha2luZywgYnV0IGlmIHdlJ3JlCislIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIFRlWCwgZG9uJ3QgZG8gYW55dGhpbmcuICBXZSB3YW50IHRoZSBhbW91bnQgb2YKKyUgc3RyZXRjaCBhZGRlZCB0byBkZXBlbmQgb24gdGhlIGxpbmUgbGVuZ3RoLCBoZW5jZSB0aGUgZGVwZW5kZW5jZSBvbgorJSBcaHNpemUuICBXZSBjYWxsIHRoaXMgd2hlbmV2ZXIgdGhlIHBhcGVyIHNpemUgaXMgc2V0LgorJQorXGRlZlxzZXRlbWVyZ2VuY3lzdHJldGNoeyUKKyAgXGlmeFxlbWVyZ2VuY3lzdHJldGNoXHRoaXNpc3VuZGVmaW5lZAorICAgICUgQWxsb3cgdXMgdG8gYXNzaWduIHRvIFxlbWVyZ2VuY3lzdHJldGNoIGFueXdheS4KKyAgICBcZGVmXGVtZXJnZW5jeXN0cmV0Y2h7XGRpbWVuMH0lCisgIFxlbHNlCisgICAgXGVtZXJnZW5jeXN0cmV0Y2ggPSAuMTVcaHNpemUKKyAgXGZpCit9CisKKyUgUGFyYW1ldGVycyBpbiBvcmRlcjogMSkgdGV4dGhlaWdodDsgMikgdGV4dHdpZHRoOworJSAzKSB2b2Zmc2V0OyA0KSBob2Zmc2V0OyA1KSBiaW5kaW5nIG9mZnNldDsgNikgdG9wc2tpcDsKKyUgNykgcGh5c2ljYWwgcGFnZSBoZWlnaHQ7IDgpIHBoeXNpY2FsIHBhZ2Ugd2lkdGguCislCislIFdlIGFsc28gY2FsbCBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9LCBzbyB0aGUgY2FsbGVyIHNob3VsZCBkZWZpbmUKKyUgXHRleHRsZWFkaW5nLiAgVGhlIGNhbGxlciBzaG91bGQgYWxzbyBzZXQgXHBhcnNraXAuCislCitcZGVmXGludGVybmFscGFnZXNpemVzIzEjMiMzIzQjNSM2IzcjOHslCisgIFx2b2Zmc2V0ID0gIzNccmVsYXgKKyAgXHRvcHNraXAgPSAjNlxyZWxheAorICBcc3BsaXR0b3Bza2lwID0gXHRvcHNraXAKKyAgJQorICBcdnNpemUgPSAjMVxyZWxheAorICBcYWR2YW5jZVx2c2l6ZSBieSBcdG9wc2tpcAorICBcb3V0ZXJ2c2l6ZSA9IFx2c2l6ZQorICBcYWR2YW5jZVxvdXRlcnZzaXplIGJ5IDJcdG9wYW5kYm90dG9tbWFyZ2luCisgIFxwYWdlaGVpZ2h0ID0gXHZzaXplCisgICUKKyAgXGhzaXplID0gIzJccmVsYXgKKyAgXG91dGVyaHNpemUgPSBcaHNpemUKKyAgXGFkdmFuY2Vcb3V0ZXJoc2l6ZSBieSAwLjVpbgorICBccGFnZXdpZHRoID0gXGhzaXplCisgICUKKyAgXG5vcm1hbG9mZnNldCA9ICM0XHJlbGF4CisgIFxiaW5kaW5nb2Zmc2V0ID0gIzVccmVsYXgKKyAgJQorICBcaWZwZGYKKyAgICBccGRmcGFnZWhlaWdodCAjN1xyZWxheAorICAgIFxwZGZwYWdld2lkdGggIzhccmVsYXgKKyAgXGZpCisgICUKKyAgXHNldGxlYWRpbmd7XHRleHRsZWFkaW5nfQorICAlCisgIFxwYXJpbmRlbnQgPSBcZGVmYXVsdHBhcmluZGVudAorICBcc2V0ZW1lcmdlbmN5c3RyZXRjaAorfQorCislIEBsZXR0ZXJwYXBlciAodGhlIGRlZmF1bHQpLgorXGRlZlxsZXR0ZXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIElmIHBhZ2UgaXMgbm90aGluZyBidXQgdGV4dCwgbWFrZSBpdCBjb21lIG91dCBldmVuLgorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NDZcYmFzZWxpbmVza2lwfXs2aW59JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9ey4yNWlufSUKKyAgICAgICAgICAgICAgICAgICAge1xiaW5kaW5nb2Zmc2V0fXszNnB0fSUKKyAgICAgICAgICAgICAgICAgICAgezExaW59ezguNWlufSUKK319CisKKyUgVXNlIEBzbWFsbGJvb2sgdG8gcmVzZXQgcGFyYW1ldGVycyBmb3IgN3g5LjI1IHRyaW0gc2l6ZS4KK1xkZWZcc21hbGxib29re3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjVpbn17NWlufSUKKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXsuMjVpbn0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17MTZwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5LjI1aW59ezdpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjNpbgorICBcdG9sZXJhbmNlID0gNzAwCisgIFxoZnV6eiA9IDFwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IC41Y20KK319CisKKyUgVXNlIEBzbWFsbGVyYm9vayB0byByZXNldCBwYXJhbWV0ZXJzIGZvciA2eDkgdHJpbSBzaXplLgorJSAoSnVzdCB0ZXN0aW5nLCBwYXJhbWV0ZXJzIHN0aWxsIGluIGZsdXguKQorXGRlZlxzbWFsbGVyYm9va3t7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gMS41cHQgcGx1cyAxcHQKKyAgXHRleHRsZWFkaW5nID0gMTJwdAorICAlCisgIFxpbnRlcm5hbHBhZ2VzaXplc3s3LjRpbn17NC44aW59JQorICAgICAgICAgICAgICAgICAgICB7LS4yaW59ey0uNGlufSUKKyAgICAgICAgICAgICAgICAgICAgezBwdH17MTRwdH0lCisgICAgICAgICAgICAgICAgICAgIHs5aW59ezZpbn0lCisgICUKKyAgXGxpc3BuYXJyb3dpbmcgPSAwLjI1aW4KKyAgXHRvbGVyYW5jZSA9IDcwMAorICBcaGZ1enogPSAxcHQKKyAgXGNvbnRlbnRzcmlnaHRtYXJnaW4gPSAwcHQKKyAgXGRlZmJvZHlpbmRlbnQgPSAuNGNtCit9fQorCislIFVzZSBAYWZvdXJwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNCBwYXBlci4KK1xkZWZcYWZvdXJwYXBlcnt7XGdsb2JhbGRlZnMgPSAxCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcdGV4dGxlYWRpbmcgPSAxMy4ycHQKKyAgJQorICAlIERvdWJsZS1zaWRlIHByaW50aW5nIHZpYSBwb3N0c2NyaXB0IG9uIExhc2VyamV0IDQwNTAKKyAgJSBwcmludHMgZG91YmxlLXNpZGVkIG5pY2VseSB3aGVuIFxiaW5kaW5nb2Zmc2V0PTEwbW0gYW5kIFxob2Zmc2V0PS02bW0uCisgICUgVG8gY2hhbmdlIHRoZSBzZXR0aW5ncyBmb3IgYSBkaWZmZXJlbnQgcHJpbnRlciBvciBzaXR1YXRpb24sIGFkanVzdAorICAlIFxub3JtYWxvZmZzZXQgdW50aWwgdGhlIGZyb250LXNpZGUgYW5kIGJhY2stc2lkZSB0ZXh0cyBhbGlnbi4gIFRoZW4KKyAgJSBkbyB0aGUgc2FtZSBmb3IgXGJpbmRpbmdvZmZzZXQuICBZb3UgY2FuIHNldCB0aGVzZSBmb3IgdGVzdGluZyBpbgorICAlIHlvdXIgdGV4aW5mbyBzb3VyY2UgZmlsZSBsaWtlIHRoaXM6CisgICUgQHRleAorICAlIFxnbG9iYWxcbm9ybWFsb2Zmc2V0ID0gLTZtbQorICAlIFxnbG9iYWxcYmluZGluZ29mZnNldCA9IDEwbW0KKyAgJSBAZW5kIHRleAorICBcaW50ZXJuYWxwYWdlc2l6ZXN7NTFcYmFzZWxpbmVza2lwfXsxNjBtbX0KKyAgICAgICAgICAgICAgICAgICAge1x2b2Zmc2V0fXtcaG9mZnNldH0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17NDRwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgIFx0b2xlcmFuY2UgPSA3MDAKKyAgXGhmdXp6ID0gMXB0CisgIFxjb250ZW50c3JpZ2h0bWFyZ2luID0gMHB0CisgIFxkZWZib2R5aW5kZW50ID0gNW1tCit9fQorCislIFVzZSBAYWZpdmVwYXBlciB0byBwcmludCBvbiBFdXJvcGVhbiBBNSBwYXBlci4KKyUgRnJvbSByb21pbGRvQHVyYW5vLmljZWIudWZvcC5iciwgMiBKdWx5IDIwMDAuCislIEhlIGFsc28gcmVjb21tZW5kcyBtYWtpbmcgQGV4YW1wbGUgYW5kIEBsaXNwIGJlIHNtYWxsLgorXGRlZlxhZml2ZXBhcGVye3tcZ2xvYmFsZGVmcyA9IDEKKyAgXHBhcnNraXAgPSAycHQgcGx1cyAxcHQgbWludXMgMC4xcHQKKyAgXHRleHRsZWFkaW5nID0gMTIuNXB0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzezE2MG1tfXsxMjBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17XGhvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezhwdH0lCisgICAgICAgICAgICAgICAgICAgIHsyMTBtbX17MTQ4bW19JQorICAlCisgIFxsaXNwbmFycm93aW5nID0gMC4yaW4KKyAgXHRvbGVyYW5jZSA9IDgwMAorICBcaGZ1enogPSAxLjJwdAorICBcY29udGVudHNyaWdodG1hcmdpbiA9IDBwdAorICBcZGVmYm9keWluZGVudCA9IDJtbQorICBcdGFibGVpbmRlbnQgPSAxMm1tCit9fQorCislIEEgc3BlY2lmaWMgdGV4dCBsYXlvdXQsIDI0eDE1Y20gb3ZlcmFsbCwgaW50ZW5kZWQgZm9yIEE0IHBhcGVyLgorXGRlZlxhZm91cmxhdGV4e3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezIzN21tfXsxNTBtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17NC42bW19JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezdtbX0lCisgICAgICAgICAgICAgICAgICAgIHsyOTdtbX17MjEwbW19JQorICAlCisgICUgTXVzdCBleHBsaWNpdGx5IHJlc2V0IHRvIDAgYmVjYXVzZSB3ZSBjYWxsIFxhZm91cnBhcGVyLgorICBcZ2xvYmFsZGVmcyA9IDAKK319CisKKyUgVXNlIEBhZm91cndpZGUgdG8gcHJpbnQgb24gQTQgcGFwZXIgaW4gbGFuZHNjYXBlIGZvcm1hdC4KK1xkZWZcYWZvdXJ3aWRle3tcZ2xvYmFsZGVmcyA9IDEKKyAgXGFmb3VycGFwZXIKKyAgXGludGVybmFscGFnZXNpemVzezI0MW1tfXsxNjVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcdm9mZnNldH17LTIuOTVtbX0lCisgICAgICAgICAgICAgICAgICAgIHtcYmluZGluZ29mZnNldH17N21tfSUKKyAgICAgICAgICAgICAgICAgICAgezI5N21tfXsyMTBtbX0lCisgIFxnbG9iYWxkZWZzID0gMAorfX0KKworJSBAcGFnZXNpemVzIFRFWFRIRUlHSFRbLFRFWFRXSURUSF0KKyUgUGVyaGFwcyB3ZSBzaG91bGQgYWxsb3cgc2V0dGluZyB0aGUgbWFyZ2lucywgXHRvcHNraXAsIFxwYXJza2lwLAorJSBhbmQvb3IgbGVhZGluZywgYWxzby4gT3IgcGVyaGFwcyB3ZSBzaG91bGQgY29tcHV0ZSB0aGVtIHNvbWVob3cuCislCitccGFyc2VhcmdkZWZccGFnZXNpemVze1xwYWdlc2l6ZXN5eXkgIzEsLFxmaW5pc2h9CitcZGVmXHBhZ2VzaXplc3l5eSMxLCMyLCMzXGZpbmlzaHt7JQorICBcc2V0Ym94MCA9IFxoYm94e1xpZ25vcmVzcGFjZXMgIzJ9XGlmZGltXHdkMCA+IDBwdCBcaHNpemU9IzJccmVsYXggXGZpCisgIFxnbG9iYWxkZWZzID0gMQorICAlCisgIFxwYXJza2lwID0gM3B0IHBsdXMgMnB0IG1pbnVzIDFwdAorICBcc2V0bGVhZGluZ3tcdGV4dGxlYWRpbmd9JQorICAlCisgIFxkaW1lbjAgPSAjMQorICBcYWR2YW5jZVxkaW1lbjAgYnkgXHZvZmZzZXQKKyAgJQorICBcZGltZW4yID0gXGhzaXplCisgIFxhZHZhbmNlXGRpbWVuMiBieSBcbm9ybWFsb2Zmc2V0CisgICUKKyAgXGludGVybmFscGFnZXNpemVzeyMxfXtcaHNpemV9JQorICAgICAgICAgICAgICAgICAgICB7XHZvZmZzZXR9e1xub3JtYWxvZmZzZXR9JQorICAgICAgICAgICAgICAgICAgICB7XGJpbmRpbmdvZmZzZXR9ezQ0cHR9JQorICAgICAgICAgICAgICAgICAgICB7XGRpbWVuMH17XGRpbWVuMn0lCit9fQorCislIFNldCBkZWZhdWx0IHRvIGxldHRlci4KKyUKK1xsZXR0ZXJwYXBlcgorCisKK1xtZXNzYWdle2FuZCB0dXJuaW5nIG9uIHRleGluZm8gaW5wdXQgZm9ybWF0Ln0KKworJSBEZWZpbmUgbWFjcm9zIHRvIG91dHB1dCB2YXJpb3VzIGNoYXJhY3RlcnMgd2l0aCBjYXRjb2RlIGZvciBub3JtYWwgdGV4dC4KK1xjYXRjb2RlYFwiPVxvdGhlcgorXGNhdGNvZGVgXH49XG90aGVyCitcY2F0Y29kZWBcXj1cb3RoZXIKK1xjYXRjb2RlYFxfPVxvdGhlcgorXGNhdGNvZGVgXHw9XG90aGVyCitcY2F0Y29kZWBcPD1cb3RoZXIKK1xjYXRjb2RlYFw+PVxvdGhlcgorXGNhdGNvZGVgXCs9XG90aGVyCitcY2F0Y29kZWBcJD1cb3RoZXIKK1xkZWZcbm9ybWFsZG91YmxlcXVvdGV7In0KK1xkZWZcbm9ybWFsdGlsZGV7fn0KK1xkZWZcbm9ybWFsY2FyZXR7Xn0KK1xkZWZcbm9ybWFsdW5kZXJzY29yZXtffQorXGRlZlxub3JtYWx2ZXJ0aWNhbGJhcnt8fQorXGRlZlxub3JtYWxsZXNzezx9CitcZGVmXG5vcm1hbGdyZWF0ZXJ7Pn0KK1xkZWZcbm9ybWFscGx1c3srfQorXGRlZlxub3JtYWxkb2xsYXJ7JH0lJCBmb250LWxvY2sgZml4CisKKyUgVGhpcyBtYWNybyBpcyB1c2VkIHRvIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnQgb25lIHdheSBpbiBcdHQKKyUgKHdoZXJlIGl0IGNhbiBwcm9iYWJseSBiZSBvdXRwdXQgYXMtaXMpLCBhbmQgYW5vdGhlciB3YXkgaW4gb3RoZXIgZm9udHMsCislIHdoZXJlIHNvbWV0aGluZyBoYWlyaWVyIHByb2JhYmx5IG5lZWRzIHRvIGJlIGRvbmUuCislCislICMxIGlzIHdoYXQgdG8gcHJpbnQgaWYgd2UgYXJlIGluZGVlZCB1c2luZyBcdHQ7ICMyIGlzIHdoYXQgdG8gcHJpbnQKKyUgb3RoZXJ3aXNlLiAgU2luY2UgYWxsIHRoZSBDb21wdXRlciBNb2Rlcm4gdHlwZXdyaXRlciBmb250cyBoYXZlIHplcm8KKyUgaW50ZXJ3b3JkIHN0cmV0Y2ggKGFuZCBzaHJpbmspLCBhbmQgaXQgaXMgcmVhc29uYWJsZSB0byBleHBlY3QgYWxsCislIHR5cGV3cml0ZXIgZm9udHMgdG8gaGF2ZSB0aGlzLCB3ZSBjYW4gY2hlY2sgdGhhdCBmb250IHBhcmFtZXRlci4KKyUKK1xkZWZcaWZ1c2luZ3R0IzEjMntcaWZkaW0gXGZvbnRkaW1lbjNcZm9udD0wcHQgIzFcZWxzZSAjMlxmaX0KKworJSBTYW1lIGFzIGFib3ZlLCBidXQgY2hlY2sgZm9yIGl0YWxpYyBmb250LiAgQWN0dWFsbHkgdGhpcyBhbHNvIGNhdGNoZXMKKyUgbm9uLWl0YWxpYyBzbGFudGVkIGZvbnRzIHNpbmNlIGl0IGlzIGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tCislIGl0YWxpYyBmb250cy4gIEJ1dCBzaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCBieSAkIGFuZCBpdCB1c2VzIFxzbCBhbnl3YXkKKyUgdGhpcyBpcyBub3QgYSBwcm9ibGVtLgorXGRlZlxpZnVzaW5naXQjMSMye1xpZmRpbSBcZm9udGRpbWVuMVxmb250PjBwdCAjMVxlbHNlICMyXGZpfQorCislIFR1cm4gb2ZmIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgZXhjZXB0IEAKKyUgKGFuZCB0aG9zZSB3aGljaCB0aGUgdXNlciBjYW4gdXNlIGFzIGlmIHRoZXkgd2VyZSBvcmRpbmFyeSkuCislIE1vc3Qgb2YgdGhlc2Ugd2Ugc2ltcGx5IHByaW50IGZyb20gdGhlIFx0dCBmb250LCBidXQgZm9yIHNvbWUsIHdlIGNhbgorJSB1c2UgbWF0aCBvciBvdGhlciB2YXJpYW50cyB0aGF0IGxvb2sgYmV0dGVyIGluIG5vcm1hbCB0ZXh0LgorCitcY2F0Y29kZWBcIj1cYWN0aXZlCitcZGVmXGFjdGl2ZWRvdWJsZXF1b3Rle3tcdHRcY2hhcjM0fX0KK1xsZXQiPVxhY3RpdmVkb3VibGVxdW90ZQorXGNhdGNvZGVgXH49XGFjdGl2ZQorXGRlZn57e1x0dFxjaGFyMTI2fX0KK1xjaGFyZGVmXGhhdD1gXF4KK1xjYXRjb2RlYFxePVxhY3RpdmUKK1xkZWZee3tcdHQgXGhhdH19CisKK1xjYXRjb2RlYFxfPVxhY3RpdmUKK1xkZWZfe1xpZnVzaW5ndHRcbm9ybWFsdW5kZXJzY29yZVxffQorXGxldFxyZWFsdW5kZXI9XworJSBTdWJyb3V0aW5lIGZvciB0aGUgcHJldmlvdXMgbWFjcm8uCitcZGVmXF97XGxlYXZldm1vZGUgXGtlcm4uMDdlbSBcdmJveHtcaHJ1bGUgd2lkdGguM2VtIGhlaWdodC4xZXh9XGtlcm4gLjA3ZW0gfQorCitcY2F0Y29kZWBcfD1cYWN0aXZlCitcZGVmfHt7XHR0XGNoYXIxMjR9fQorXGNoYXJkZWYgXGxlc3M9YFw8CitcY2F0Y29kZWBcPD1cYWN0aXZlCitcZGVmPHt7XHR0IFxsZXNzfX0KK1xjaGFyZGVmIFxndHI9YFw+CitcY2F0Y29kZWBcPj1cYWN0aXZlCitcZGVmPnt7XHR0IFxndHJ9fQorXGNhdGNvZGVgXCs9XGFjdGl2ZQorXGRlZit7e1x0dCBcY2hhciA0M319CitcY2F0Y29kZWBcJD1cYWN0aXZlCitcZGVmJHtcaWZ1c2luZ2l0e3tcc2xcJH19XG5vcm1hbGRvbGxhcn0lJCBmb250LWxvY2sgZml4CisKKyUgSWYgYSAuZm10IGZpbGUgaXMgYmVpbmcgdXNlZCwgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IGFwcGVhciBpbiBhIGZpbGUKKyUgbmFtZSBjYW5ub3QgYmUgYWN0aXZlIHVudGlsIHdlIGhhdmUgcGFyc2VkIHRoZSBjb21tYW5kIGxpbmUuCislIFNvIHR1cm4gdGhlbSBvZmYgYWdhaW4sIGFuZCBoYXZlIFxldmVyeWpvYiAob3IgQHNldGZpbGVuYW1lKSB0dXJuIHRoZW0gb24uCislIFxvdGhlcmlmeWFjdGl2ZSBpcyBjYWxsZWQgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZS4KK1xkZWZcb3RoZXJpZnlhY3RpdmV7XGNhdGNvZGVgKz1cb3RoZXIgXGNhdGNvZGVgXF89XG90aGVyfQorCitcY2F0Y29kZWBcQD0wCisKKyUgXGJhY2tzbGFzaGN1cmZvbnQgb3V0cHV0cyBvbmUgYmFja3NsYXNoIGNoYXJhY3RlciBpbiBjdXJyZW50IGZvbnQsCislIGFzIGluIFxjaGFyYFxcLgorXGdsb2JhbFxjaGFyZGVmXGJhY2tzbGFzaGN1cmZvbnQ9YFxcCitcZ2xvYmFsXGxldFxyYXdiYWNrc2xhc2h4eD1cYmFja3NsYXNoY3VyZm9udCAgJSBsZXQgZXhpc3RpbmcgLj8/cyBmaWxlcyB3b3JrCisKKyUgXHJhd2JhY2tzbGFzaCBkZWZpbmVzIGFuIGFjdGl2ZSBcIHRvIGRvIFxiYWNrc2xhc2hjdXJmb250LgorJSBcb3RoZXJiYWNrc2xhc2ggZGVmaW5lcyBhbiBhY3RpdmUgXCB0byBiZSBhIGxpdGVyYWwgYFwnIGNoYXJhY3RlciB3aXRoCislIGNhdGNvZGUgb3RoZXIuCit7XGNhdGNvZGVgXFw9XGFjdGl2ZQorIEBnZGVmQHJhd2JhY2tzbGFzaHtAbGV0XD1AYmFja3NsYXNoY3VyZm9udH0KKyBAZ2RlZkBvdGhlcmJhY2tzbGFzaHtAbGV0XD1AcmVhbGJhY2tzbGFzaH0KK30KKworJSBccmVhbGJhY2tzbGFzaCBpcyBhbiBhY3R1YWwgY2hhcmFjdGVyIGBcJyB3aXRoIGNhdGNvZGUgb3RoZXIsIGFuZAorJSBcZG91YmxlYmFja3NsYXNoIGlzIHR3byBvZiB0aGVtIChmb3IgdGhlIHBkZiBvdXRsaW5lcykuCit7XGNhdGNvZGVgXFw9XG90aGVyIEBnZGVmQHJlYWxiYWNrc2xhc2h7XH0gQGdkZWZAZG91YmxlYmFja3NsYXNoe1xcfX0KKworJSBcbm9ybWFsYmFja3NsYXNoIG91dHB1dHMgb25lIGJhY2tzbGFzaCBpbiBmaXhlZCB3aWR0aCBmb250LgorXGRlZlxub3JtYWxiYWNrc2xhc2h7e1x0dFxiYWNrc2xhc2hjdXJmb250fX0KKworXGNhdGNvZGVgXFw9XGFjdGl2ZQorCislIFVzZWQgc29tZXRpbWVzIHRvIHR1cm4gb2ZmIChlZmZlY3RpdmVseSkgdGhlIGFjdGl2ZSBjaGFyYWN0ZXJzCislIGV2ZW4gYWZ0ZXIgcGFyc2luZyB0aGVtLgorQGRlZkB0dXJub2ZmYWN0aXZleyUKKyAgQGxldCI9QG5vcm1hbGRvdWJsZXF1b3RlCisgIEBsZXRcPUByZWFsYmFja3NsYXNoCisgIEBsZXR+PUBub3JtYWx0aWxkZQorICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgQGxldF89QG5vcm1hbHVuZGVyc2NvcmUKKyAgQGxldHw9QG5vcm1hbHZlcnRpY2FsYmFyCisgIEBsZXQ8PUBub3JtYWxsZXNzCisgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgIEBsZXQrPUBub3JtYWxwbHVzCisgIEBsZXQkPUBub3JtYWxkb2xsYXIgJSQgZm9udC1sb2NrIGZpeAorICBAdW5zZXBzcGFjZXMKK30KKworJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuICAoVGh1cywgXCBpcyBub3QgZXhwYW5kYWJsZSB3aGVuIHRoaXMgaXMgaW4KKyUgZWZmZWN0LikKKyUKK0BkZWZAbm9ybWFsdHVybm9mZmFjdGl2ZXtAdHVybm9mZmFjdGl2ZSBAbGV0XD1Abm9ybWFsYmFja3NsYXNofQorCislIE1ha2UgXyBhbmQgKyBcb3RoZXIgY2hhcmFjdGVycywgdGVtcG9yYXJpbHkuCislIFRoaXMgaXMgY2FuY2VsZWQgYnkgQGZpeGJhY2tzbGFzaC4KK0BvdGhlcmlmeWFjdGl2ZQorCislIElmIGEgLmZtdCBmaWxlIGlzIGJlaW5nIHVzZWQsIHdlIGRvbid0IHdhbnQgdGhlIGBcaW5wdXQgdGV4aW5mbycgdG8gc2hvdyB1cC4KKyUgVGhhdCBpcyB3aGF0IFxlYXRpbnB1dCBpcyBmb3I7IGFmdGVyIHRoYXQsIHRoZSBgXCcgc2hvdWxkIHJldmVydCB0byBwcmludGluZworJSBhIGJhY2tzbGFzaC4KKyUKK0BnZGVmQGVhdGlucHV0IGlucHV0IHRleGluZm97QGZpeGJhY2tzbGFzaH0KK0BnbG9iYWxAbGV0XCA9IEBlYXRpbnB1dAorCislIE9uIHRoZSBvdGhlciBoYW5kLCBwZXJoYXBzIHRoZSBmaWxlIGRpZCBub3QgaGF2ZSBhIGBcaW5wdXQgdGV4aW5mbycuIFRoZW4KKyUgdGhlIGZpcnN0IGBceyBpbiB0aGUgZmlsZSB3b3VsZCBjYXVzZSBhbiBlcnJvci4gVGhpcyBtYWNybyB0cmllcyB0byBmaXgKKyUgdGhhdCwgYXNzdW1pbmcgaXQgaXMgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgYFwnIGNvdWxkIHBsYXVzaWJseSBvY2N1ci4KKyUgQWxzbyB0dXJuIGJhY2sgb24gYWN0aXZlIGNoYXJhY3RlcnMgdGhhdCBtaWdodCBhcHBlYXIgaW4gdGhlIGlucHV0CislIGZpbGUgbmFtZSwgaW4gY2FzZSBub3QgdXNpbmcgYSBwcmUtZHVtcGVkIGZvcm1hdC4KKyUKK0BnZGVmQGZpeGJhY2tzbGFzaHslCisgIEBpZnhcQGVhdGlucHV0IEBsZXRcID0gQG5vcm1hbGJhY2tzbGFzaCBAZmkKKyAgQGNhdGNvZGVgKz1AYWN0aXZlCisgIEBjYXRjb2RlYEBfPUBhY3RpdmUKK30KKworJSBTYXkgQGZvbywgbm90IFxmb28sIGluIGVycm9yIG1lc3NhZ2VzLgorQGVzY2FwZWNoYXIgPSBgQEAKKworJSBUaGVzZSBsb29rIG9rIGluIGFsbCBmb250cywgc28ganVzdCBtYWtlIHRoZW0gbm90IHNwZWNpYWwuCitAY2F0Y29kZWBAJiA9IEBvdGhlcgorQGNhdGNvZGVgQCMgPSBAb3RoZXIKK0BjYXRjb2RlYEAlID0gQG90aGVyCisKKworQGMgTG9jYWwgdmFyaWFibGVzOgorQGMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorQGMgcGFnZS1kZWxpbWl0ZXI6ICJeXFxcXG1lc3NhZ2UiCitAYyB0aW1lLXN0YW1wLXN0YXJ0OiAiZGVmXFxcXHRleGluZm92ZXJzaW9ueyIKK0BjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorQGMgdGltZS1zdGFtcC1lbmQ6ICJ9IgorQGMgRW5kOgorCitAYyB2aW06c3c9MjoKKworQGlnbm9yZQorICAgYXJjaC10YWc6IGUxYjM2ZTMyLWM5NmUtNDEzNS1hNDFhLTBiMmVmYTJlYTExNQorQGVuZCBpZ25vcmUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYwppbmRleCA3YTczNDhiLi42ZTU5NWU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgIGFyZ3AgKz0gejsKICAgICB9CiAKLSAgaWYgKGFyZ3AgLSBzdGFjayA+IGVjaWYtPmNpZi0+Ynl0ZXMpIAorICBpZiAoYXJncCA+PSBzdGFjayAmJiAodW5zaWduZWQpKGFyZ3AgLSBzdGFjaykgPiBlY2lmLT5jaWYtPmJ5dGVzKSAKICAgICB7CiAgICAgICBQeV9GYXRhbEVycm9yKCJGRkkgQlVHOiBub3QgZW5vdWdoIHN0YWNrIHNwYWNlIGZvciBhcmd1bWVudHMiKTsKICAgICB9CkBAIC0zNzEsMTAgKzM3MSwxMSBAQAogZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfT1VURVIoKTsKIAogZmZpX3N0YXR1cwotZmZpX3ByZXBfY2xvc3VyZSAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCi0JCSAgZmZpX2NpZiogY2lmLAotCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCi0JCSAgdm9pZCAqdXNlcl9kYXRhKQorZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlKiBjbG9zdXJlLAorCQkJCQkgIGZmaV9jaWYqIGNpZiwKKwkJCQkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAorCQkJCQkgIHZvaWQgKnVzZXJfZGF0YSwKKwkJCQkJICB2b2lkICpjb2RlbG9jKQogewogICBzaG9ydCBieXRlczsKICAgY2hhciAqdHJhbXA7CkBAIC00NTIsNiArNDUzLDUgQEAKICAgY2xvc3VyZS0+Y2lmICA9IGNpZjsKICAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwogICBjbG9zdXJlLT5mdW4gID0gZnVuOwotCiAgIHJldHVybiBGRklfT0s7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmgKaW5kZXggYTg4ZDg3NC4uZWZiMTRjNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuaApAQCAtMjIxLDExICsyMjEsMTUgQEAKICAgdm9pZCAgICAgICp1c2VyX2RhdGE7CiB9IGZmaV9jbG9zdXJlOwogCit2b2lkIGZmaV9jbG9zdXJlX2ZyZWUodm9pZCAqKTsKK3ZvaWQgKmZmaV9jbG9zdXJlX2FsbG9jIChzaXplX3Qgc2l6ZSwgdm9pZCAqKmNvZGUpOworCiBmZmlfc3RhdHVzCi1mZmlfcHJlcF9jbG9zdXJlIChmZmlfY2xvc3VyZSosCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqLAogCQkgIGZmaV9jaWYgKiwKIAkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAotCQkgIHZvaWQgKnVzZXJfZGF0YSk7CisJCSAgdm9pZCAqdXNlcl9kYXRhLAorCQkgIHZvaWQgKmNvZGVsb2MpOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgIGNoYXIgdHJhbXBbRkZJX1RSQU1QT0xJTkVfU0laRV07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvcHJlcF9jaWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCmluZGV4IGNkNjIzYTEuLjI2NTBmYTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkgICAgYnl0ZXMgPSBBTElHTihieXRlcywgKCpwdHIpLT5hbGlnbm1lbnQpOwogCSAgCiAjZW5kaWYKLQkgIGJ5dGVzICs9ICh1bnNpZ25lZClTVEFDS19BUkdfU0laRSgoKnB0ciktPnNpemUpOworCSAgYnl0ZXMgKz0gU1RBQ0tfQVJHX1NJWkUoKCpwdHIpLT5zaXplKTsKIAl9CiAjZW5kaWYKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9pbmNsdWRlL2ZmaS5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvaW5jbHVkZS9mZmkuaAppbmRleCAzZDM5MDY0Li5jMTA0YTVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9pbmNsdWRlL2ZmaS5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2luY2x1ZGUvZmZpLmgKQEAgLTI2NCw2ICsyNjQsOSBAQAogCXZvaWQJCQkoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwKIAl2b2lkKgkJCXVzZXJfZGF0YSk7CiAKK3ZvaWQgZmZpX2Nsb3N1cmVfZnJlZSh2b2lkICopOwordm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7CisKIHR5cGVkZWYgc3RydWN0IGZmaV9yYXdfY2xvc3VyZSB7CiAJY2hhcgkJdHJhbXBbRkZJX1RSQU1QT0xJTkVfU0laRV07CiAJZmZpX2NpZioJY2lmOwpAQCAtMzQ5LDQgKzM1Miw0IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmCS8vICNpZm5kZWYgTElCRkZJX0gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYJLy8gI2lmbmRlZiBMSUJGRklfSApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL21hbGxvY19jbG9zdXJlLmMgYi9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYwppbmRleCBhZTg1N2EyLi4yNDhjNmE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYwpAQCAtODksNyArODksNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHV0IHRoZSBpdGVtIGJhY2sgaW50byB0aGUgZnJlZSBsaXN0ICovCi12b2lkIF9jdHlwZXNfZnJlZV9jbG9zdXJlKHZvaWQgKnApCit2b2lkIGZmaV9jbG9zdXJlX2ZyZWUodm9pZCAqcCkKIHsKICAgICBJVEVNICppdGVtID0gKElURU0gKilwOwogICAgIGl0ZW0tPm5leHQgPSBmcmVlX2xpc3Q7CkBAIC05Nyw3ICs5Nyw3IEBACiB9CiAKIC8qIHJldHVybiBvbmUgaXRlbSBmcm9tIHRoZSBmcmVlIGxpc3QsIGFsbG9jYXRpbmcgbW9yZSBpZiBuZWVkZWQgKi8KLXZvaWQgKl9jdHlwZXNfYWxsb2NfY2xvc3VyZSh2b2lkKQordm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZV90IGlnbm9yZWQsIHZvaWQqKiBjb2RlbG9jKQogewogICAgIElURU0gKml0ZW07CiAgICAgaWYgKCFmcmVlX2xpc3QpCkBAIC0xMDYsNSArMTA2LDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaXRlbSA9IGZyZWVfbGlzdDsKICAgICBmcmVlX2xpc3QgPSBpdGVtLT5uZXh0OwotICAgIHJldHVybiBpdGVtOworICAgICpjb2RlbG9jID0gKHZvaWQgKilpdGVtOworICAgIHJldHVybiAodm9pZCAqKWl0ZW07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCmluZGV4IDA0MTA3YWMuLjA5MmZiNjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2N1cnNlc21vZHVsZS5jCkBAIC0zMSw4ICszMSw2IEBACiAgKiAgIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAgKi8KIAotLyogQ1ZTOiAkSWQkICovCi0KIC8qCiAKICAgQSBudW1iZXIgb2YgU3lzViBvciBuY3Vyc2VzIGZ1bmN0aW9ucyBkb24ndCBoYXZlIHdyYXBwZXJzIHlldDsgaWYgeW91CkBAIC0xMDIsNiArMTAwLDggQEAKIAogLyogSW5jbHVkZXMgKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKIAogCkBAIC0yMTUsNyArMjE1LDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotLyogRnVuY3Rpb24gdmVyc2lvbnMgb2YgdGhlIDMgZnVuY3Rpb25zIGZvciB0ZXN0ZWQgd2hldGhlciBjdXJzZXMgaGFzIGJlZW4KKy8qIEZ1bmN0aW9uIHZlcnNpb25zIG9mIHRoZSAzIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyB3aGV0aGVyIGN1cnNlcyBoYXMgYmVlbgogICAgaW5pdGlhbGlzZWQgb3Igbm90LiAqLwogCiBzdGF0aWMgaW50IGZ1bmNfUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQodm9pZCkKQEAgLTI1Miw0MyArMjUyLDUwIEBACiAgICBQQVJTRVNUUiAtIGZvcm1hdCBzdHJpbmcgZm9yIGFyZ3VtZW50IHBhcnNpbmcKICovCiAKLSNkZWZpbmUgV2luZG93X05vQXJnTm9SZXR1cm5GdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKlB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIFwKKyNkZWZpbmUgV2luZG93X05vQXJnTm9SZXR1cm5GdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgICAgICAgIFwKICAgICB7IHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKFgoc2VsZi0+d2luKSwgIyBYKTsgfQogCiAjZGVmaW5lIFdpbmRvd19Ob0FyZ1RydWVGYWxzZUZ1bmN0aW9uKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSBcCisgICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChYIChzZWxmLT53aW4pID09IEZBTFNFKSB7IFB5X0lOQ1JFRihQeV9GYWxzZSk7IHJldHVybiBQeV9GYWxzZTsgfSBcCiAgICAgICAgIGVsc2UgeyBQeV9JTkNSRUYoUHlfVHJ1ZSk7IHJldHVybiBQeV9UcnVlOyB9IH0KIAotI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZikgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBXaW5kb3dfTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihYKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgWChzZWxmLT53aW4pOyBQeV9JTkNSRUYoUHlfTm9uZSk7IHJldHVybiBQeV9Ob25lOyB9CiAKICNkZWZpbmUgV2luZG93X05vQXJnMlR1cGxlUmV0dXJuRnVuY3Rpb24oWCwgVFlQRSwgRVJHU1RSKSAgICAgICAgICAgICAgIFwKLSAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVFlQRSBhcmcxLCBhcmcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgWChzZWxmLT53aW4sYXJnMSxhcmcyKTsgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRVJHU1RSLCBhcmcxLCBhcmcyKTsgfQogCiAjZGVmaW5lIFdpbmRvd19PbmVBcmdOb1JldHVyblZvaWRGdW5jdGlvbihYLCBUWVBFLCBQQVJTRVNUUikgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VTVFIsICZhcmcxKSkgcmV0dXJuIE5VTEw7ICAgICAgXAogICAgICAgICBYKHNlbGYtPndpbixhcmcxKTsgUHlfSU5DUkVGKFB5X05vbmUpOyByZXR1cm4gUHlfTm9uZTsgfQogCiAjZGVmaW5lIFdpbmRvd19PbmVBcmdOb1JldHVybkZ1bmN0aW9uKFgsIFRZUEUsIFBBUlNFU1RSKSAgICAgICAgICAgICAgICBcCi0gICAgc3RhdGljIFB5T2JqZWN0ICogUHlDdXJzZXNXaW5kb3dfICMjIFggKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgXAorICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBUWVBFIGFyZzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncyxQQVJTRVNUUiwgJmFyZzEpKSByZXR1cm4gTlVMTDsgICAgICAgXAogICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihYKHNlbGYtPndpbiwgYXJnMSksICMgWCk7IH0KIAogI2RlZmluZSBXaW5kb3dfVHdvQXJnTm9SZXR1cm5GdW5jdGlvbihYLCBUWVBFLCBQQVJTRVNUUikgICAgICAgICAgICAgICAgXAotICAgIHN0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzV2luZG93XyAjIyBYIChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc1dpbmRvd18gIyMgWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgVFlQRSBhcmcxLCBhcmcyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsUEFSU0VTVFIsICZhcmcxLCAmYXJnMikpIHJldHVybiBOVUxMOyBcCkBAIC0xMjM2LDEwICsxMjQzLDExIEBACiAgICAgaW50IHJ0bjsKIAogI2lmbmRlZiBXSU5ET1dfSEFTX0ZMQUdTCi0gICAgaWYgKDApIHsKKyAgICBpZiAoMCkKICNlbHNlCi0gICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkgeworICAgICAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpCiAjZW5kaWYKKyAgICAgICAgewogICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewogICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLApAQCAtMTI2OSwxNzAxICsxMjc3LDE3MDIgQEAKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJ3bm91dHJlZnJlc2giKTsKICAgICAgICAgfQotICAgIH0KK30KIAotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X092ZXJsYXkoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgIHsKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dPYmplY3QgKnRlbXA7Ci0gICAgICAgIGludCB1c2VfY29weXdpbiA9IEZBTFNFOwotICAgICAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKLSAgICAgICAgaW50IHJ0bjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19PdmVybGF5KFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKKyAgICBpbnQgdXNlX2NvcHl3aW4gPSBGQUxTRTsKKyAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKKyAgICBpbnQgcnRuOwogCi0gICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcmxheSByZXF1aXJlcyBvbmUgb3Igc2V2ZW4gYXJndW1lbnRzIik7CisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXApKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodXNlX2NvcHl3aW4gPT0gVFJVRSkgewotICAgICAgICAgICAgcnRuID0gY29weXdpbihzZWxmLT53aW4sIHRlbXAtPndpbiwgc21pbnJvdywgc21pbmNvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbCwgVFJVRSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJjb3B5d2luIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSBvdmVybGF5KHNlbGYtPndpbiwgdGVtcC0+d2luKTsKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIm92ZXJsYXkiKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgIFB5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgewotICAgICAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKLSAgICAgICAgaW50IHVzZV9jb3B5d2luID0gRkFMU0U7Ci0gICAgICAgIGludCBzbWlucm93LCBzbWluY29sLCBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sOwotICAgICAgICBpbnQgcnRuOwotCi0gICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkbWlucm93LCAmZG1pbmNvbCwgJmRtYXhyb3csICZkbWF4Y29sKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3ZlcndyaXRlIHJlcXVpcmVzIG9uZSBvciBzZXZlbiBhcmd1bWVudHMiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA3OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8haWlpaWlpO3dpbmRvdyBvYmplY3QsIGludCwgaW50LCBpbnQsIGludCwgaW50LCBpbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q3Vyc2VzV2luZG93X1R5cGUsICZ0ZW1wLCAmc21pbnJvdywgJnNtaW5jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZG1pbnJvdywgJmRtaW5jb2wsICZkbWF4cm93LCAmZG1heGNvbCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh1c2VfY29weXdpbiA9PSBUUlVFKSB7Ci0gICAgICAgICAgICBydG4gPSBjb3B5d2luKHNlbGYtPndpbiwgdGVtcC0+d2luLCBzbWlucm93LCBzbWluY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sLCBGQUxTRSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJjb3B5d2luIik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSBvdmVyd3JpdGUoc2VsZi0+d2luLCB0ZW1wLT53aW4pOwotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAib3ZlcndyaXRlIik7Ci0gICAgICAgIH0KKyAgICAgICAgdXNlX2NvcHl3aW4gPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm92ZXJsYXkgcmVxdWlyZXMgb25lIG9yIHNldmVuIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICBQeUN1cnNlc1dpbmRvd19QdXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCi0gICAgewotICAgICAgICAvKiBXZSBoYXZlIHRvIHNpbXVsYXRlIHRoaXMgYnkgd3JpdGluZyB0byBhIHRlbXBvcmFyeSBGSUxFKiwKLSAgICAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwotICAgICAgICBjaGFyIGZuWzEwMF07Ci0gICAgICAgIGludCBmZDsKLSAgICAgICAgRklMRSAqZnA7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaWYgKHVzZV9jb3B5d2luID09IFRSVUUpIHsKKyAgICAgICAgcnRuID0gY29weXdpbihzZWxmLT53aW4sIHRlbXAtPndpbiwgc21pbnJvdywgc21pbmNvbCwKKyAgICAgICAgICAgICAgICAgICAgICBkbWlucm93LCBkbWluY29sLCBkbWF4cm93LCBkbWF4Y29sLCBUUlVFKTsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAiY29weXdpbiIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcnRuID0gb3ZlcmxheShzZWxmLT53aW4sIHRlbXAtPndpbik7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgIm92ZXJsYXkiKTsKKyAgICB9Cit9CiAKLSAgICAgICAgc3RyY3B5KGZuLCAiL3RtcC9weS5jdXJzZXMucHV0d2luLlhYWFhYWCIpOwotICAgICAgICBmZCA9IG1rc3RlbXAoZm4pOwotICAgICAgICBpZiAoZmQgPCAwKQotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7Ci0gICAgICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7Ci0gICAgICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzID0gUHlDdXJzZXNDaGVja0VSUihwdXR3aW4oc2VsZi0+d2luLCBmcCksICJwdXR3aW4iKTsKLSAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICAgICAgcmVtb3ZlKGZuKTsKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICAgICAgZnNlZWsoZnAsIDAsIDApOwotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciBidWZbQlVGU0laXTsKLSAgICAgICAgICAgIGludCBuID0gZnJlYWQoYnVmLCAxLCBCVUZTSVosIGZwKTsKLSAgICAgICAgICAgIGlmIChuIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc3RyZWFtLCAid3JpdGUiLCAieSMiLCBidWYsIG4pOwotICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfT3ZlcndyaXRlKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeUN1cnNlc1dpbmRvd09iamVjdCAqdGVtcDsKKyAgICBpbnQgdXNlX2NvcHl3aW4gPSBGQUxTRTsKKyAgICBpbnQgc21pbnJvdywgc21pbmNvbCwgZG1pbnJvdywgZG1pbmNvbCwgZG1heHJvdywgZG1heGNvbDsKKyAgICBpbnQgcnRuOworCisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyE7d2luZG93IG9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDdXJzZXNXaW5kb3dfVHlwZSwgJnRlbXApKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNzoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIWlpaWlpaTt3aW5kb3cgb2JqZWN0LCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUN1cnNlc1dpbmRvd19UeXBlLCAmdGVtcCwgJnNtaW5yb3csICZzbWluY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRtaW5yb3csICZkbWluY29sLCAmZG1heHJvdywgJmRtYXhjb2wpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHVzZV9jb3B5d2luID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvdmVyd3JpdGUgcmVxdWlyZXMgb25lIG9yIHNldmVuIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAodXNlX2NvcHl3aW4gPT0gVFJVRSkgeworICAgICAgICBydG4gPSBjb3B5d2luKHNlbGYtPndpbiwgdGVtcC0+d2luLCBzbWlucm93LCBzbWluY29sLAorICAgICAgICAgICAgICAgICAgICAgIGRtaW5yb3csIGRtaW5jb2wsIGRtYXhyb3csIGRtYXhjb2wsIEZBTFNFKTsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAiY29weXdpbiIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcnRuID0gb3ZlcndyaXRlKHNlbGYtPndpbiwgdGVtcC0+d2luKTsKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocnRuLCAib3ZlcndyaXRlIik7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfUHV0V2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyZWFtKQoreworICAgIC8qIFdlIGhhdmUgdG8gc2ltdWxhdGUgdGhpcyBieSB3cml0aW5nIHRvIGEgdGVtcG9yYXJ5IEZJTEUqLAorICAgICAgIHRoZW4gcmVhZGluZyBiYWNrLCB0aGVuIHdyaXRpbmcgdG8gdGhlIGFyZ3VtZW50IHN0cmVhbS4gKi8KKyAgICBjaGFyIGZuWzEwMF07CisgICAgaW50IGZkOworICAgIEZJTEUgKmZwOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CisgICAgZmQgPSBta3N0ZW1wKGZuKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBmcCA9IGZkb3BlbihmZCwgIndiKyIpOworICAgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmVtb3ZlKGZuKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgfQorICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgIHJlbW92ZShmbik7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQotCi0gICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dfUmVkcmF3TGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgewotICAgICAgICBpbnQgYmVnLCBudW07Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk7YmVnLG51bSIsICZiZWcsICZudW0pKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdyZWRyYXdsbihzZWxmLT53aW4sYmVnLG51bSksICJyZWRyYXdsbiIpOworICAgIGZzZWVrKGZwLCAwLCAwKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOworICAgICAgICBQeV9zc2l6ZV90IG4gPSBmcmVhZChidWYsIDEsIEJVRlNJWiwgZnApOworICAgICAgICBpZiAobiA8PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHN0cmVhbSwgIndyaXRlIiwgInkjIiwgYnVmLCBuKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQorICAgIGZjbG9zZShmcCk7CisgICAgcmVtb3ZlKGZuKTsKKyAgICByZXR1cm4gcmVzOworfQogCi0gICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgUHlDdXJzZXNXaW5kb3dfUmVmcmVzaChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgewotICAgICAgICBpbnQgcG1pbnJvdyxwbWluY29sLHNtaW5yb3csc21pbmNvbCxzbWF4cm93LHNtYXhjb2w7Ci0gICAgICAgIGludCBydG47CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfUmVkcmF3TGluZShQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGJlZywgbnVtOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk7YmVnLG51bSIsICZiZWcsICZudW0pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3cmVkcmF3bG4oc2VsZi0+d2luLGJlZyxudW0pLCAicmVkcmF3bG4iKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1JlZnJlc2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBwbWlucm93LHBtaW5jb2wsc21pbnJvdyxzbWluY29sLHNtYXhyb3csc21heGNvbDsKKyAgICBpbnQgcnRuOwogCiAjaWZuZGVmIFdJTkRPV19IQVNfRkxBR1MKLSAgICAgICAgaWYgKDApIHsKKyAgICBpZiAoMCkKICNlbHNlCi0gICAgICAgICAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpIHsKKyAgICAgICAgaWYgKHNlbGYtPndpbi0+X2ZsYWdzICYgX0lTUEFEKQogI2VuZGlmCi0gICAgICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgICAgIGNhc2UgNjoKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWlpaWlpOyIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBtaW5yb3cscG1pbmNvbCxzbWlucm93LHNtaW5jb2wsc21heHJvdyxzbWF4Y29sIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbWlucm93LCAmcG1pbmNvbCwgJnNtaW5yb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc21pbmNvbCwgJnNtYXhyb3csICZzbWF4Y29sKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpaWlpaWk7IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbWlucm93LHBtaW5jb2wsc21pbnJvdyxzbWluY29sLHNtYXhyb3csc21heGNvbCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwbWlucm93LCAmcG1pbmNvbCwgJnNtaW5yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzbWluY29sLCAmc21heHJvdywgJnNtYXhjb2wpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgICAgIHJ0biA9IHByZWZyZXNoKHNlbGYtPndpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1pbnJvdywgcG1pbmNvbCwgc21pbnJvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21pbmNvbCwgc21heHJvdywgc21heGNvbCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgInByZWZyZXNoIik7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmcmVzaCgpIGZvciBhIHBhZCByZXF1aXJlcyA2IGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOnJlZnJlc2giKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgIHJ0biA9IHdyZWZyZXNoKHNlbGYtPndpbik7CisgICAgICAgICAgICAgICAgcnRuID0gcHJlZnJlc2goc2VsZi0+d2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBtaW5yb3csIHBtaW5jb2wsIHNtaW5yb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21pbmNvbCwgc21heHJvdywgc21heGNvbCk7CiAgICAgICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihydG4sICJwcmVmcmVzaCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X1NldFNjcm9sbFJlZ2lvbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCB4LCB5OwotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3RvcCwgYm90dG9tIiwmeSwmeCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3c2V0c2NycmVnKHNlbGYtPndpbix5LHgpLCAid3NldHNjcnJlZyIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X1N1YldpbihQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOwotICAgICAgICAgICAgaW50IG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3g7Ci0KLSAgICAgICAgICAgIG5saW5lcyA9IDA7Ci0gICAgICAgICAgICBuY29scyAgPSAwOwotICAgICAgICAgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7YmVnaW5feSxiZWdpbl94IiwmYmVnaW5feSwmYmVnaW5feCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpaTtubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5saW5lcywmbmNvbHMsJmJlZ2luX3ksJmJlZ2luX3gpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInN1YndpbiByZXF1aXJlcyAyIG9yIDQgYXJndW1lbnRzIik7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZyZXNoKCkgZm9yIGEgcGFkIHJlcXVpcmVzIDYgYXJndW1lbnRzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpyZWZyZXNoIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICBydG4gPSB3cmVmcmVzaChzZWxmLT53aW4pOworICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHJ0biwgInByZWZyZXNoIik7CisgICAgICAgIH0KK30KIAotICAgICAgICAgICAgLyogcHJpbnRmKCJTdWJ3aW46ICVpICVpICVpICVpICAgXG4iLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19TZXRTY3JvbGxSZWdpb24oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCB4LCB5OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTt0b3AsIGJvdHRvbSIsJnksJngpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3c2V0c2NycmVnKHNlbGYtPndpbix5LHgpLCAid3NldHNjcnJlZyIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfU3ViV2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBpbnQgbmxpbmVzLCBuY29scywgYmVnaW5feSwgYmVnaW5feDsKKworICAgIG5saW5lcyA9IDA7CisgICAgbmNvbHMgID0gMDsKKyAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMjoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO2JlZ2luX3ksYmVnaW5feCIsJmJlZ2luX3ksJmJlZ2luX3gpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWlpO25saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5saW5lcywmbmNvbHMsJmJlZ2luX3ksJmJlZ2luX3gpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdWJ3aW4gcmVxdWlyZXMgMiBvciA0IGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBwcmludGYoIlN1YndpbjogJWkgJWkgJWkgJWkgICBcbiIsIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOyAqLwogI2lmZGVmIFdJTkRPV19IQVNfRkxBR1MKLSAgICAgICAgICAgIGlmIChzZWxmLT53aW4tPl9mbGFncyAmIF9JU1BBRCkKLSAgICAgICAgICAgICAgICB3aW4gPSBzdWJwYWQoc2VsZi0+d2luLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsKLSAgICAgICAgICAgIGVsc2UKKyAgICBpZiAoc2VsZi0+d2luLT5fZmxhZ3MgJiBfSVNQQUQpCisgICAgICAgIHdpbiA9IHN1YnBhZChzZWxmLT53aW4sIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOworICAgIGVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIHdpbiA9IHN1YndpbihzZWxmLT53aW4sIG5saW5lcywgbmNvbHMsIGJlZ2luX3ksIGJlZ2luX3gpOworICAgICAgICB3aW4gPSBzdWJ3aW4oc2VsZi0+d2luLCBubGluZXMsIG5jb2xzLCBiZWdpbl95LCBiZWdpbl94KTsKIAotICAgICAgICAgICAgaWYgKHdpbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICh3aW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzV2luZG93X1Njcm9sbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG5saW5lczsKKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAwOgorICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihzY3JvbGwoc2VsZi0+d2luKSwgInNjcm9sbCIpOworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO25saW5lcyIsICZubGluZXMpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdzY3JsKHNlbGYtPndpbiwgbmxpbmVzKSwgInNjcm9sbCIpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzY3JvbGwgcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc1dpbmRvd19Ub3VjaExpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBzdCwgY250LCB2YWw7CisgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDI6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtzdGFydCxjb3VudCIsJnN0LCZjbnQpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHRvdWNobGluZShzZWxmLT53aW4sc3QsY250KSwgInRvdWNobGluZSIpOworICAgIGNhc2UgMzoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWk7c3RhcnQsY291bnQsdmFsIiwgJnN0LCAmY250LCAmdmFsKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3dG91Y2hsbihzZWxmLT53aW4sIHN0LCBjbnQsIHZhbCksICJ0b3VjaGxpbmUiKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidG91Y2hsaW5lIHJlcXVpcmVzIDIgb3IgMyBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNXaW5kb3dfVmxpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp0ZW1wOworICAgIGNodHlwZSBjaDsKKyAgICBpbnQgbiwgeCwgeSwgY29kZSA9IE9LOworICAgIGF0dHJfdCBhdHRyID0gQV9OT1JNQUw7CisgICAgbG9uZyBsYXR0cjsKKworICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pO2NoIG9yIGludCxuIiwgJnRlbXAsICZuKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2lsO2NoIG9yIGludCxuLGF0dHIiLCAmdGVtcCwgJm4sICZsYXR0cikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYXR0ciA9IGxhdHRyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPaTt5LHgsY2ggb3IgaW50LG4iLCAmeSwgJngsICZ0ZW1wLCAmbikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgY29kZSA9IHdtb3ZlKHNlbGYtPndpbiwgeSwgeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9pbDsgeSx4LGNoIG9yIGludCxuLGF0dHIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnksICZ4LCAmdGVtcCwgJm4sICZsYXR0cikpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYXR0ciA9IGxhdHRyOworICAgICAgICBjb2RlID0gd21vdmUoc2VsZi0+d2luLCB5LCB4KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInZsaW5lIHJlcXVpcmVzIDIgdG8gNSBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKGNvZGUgIT0gRVJSKSB7CisgICAgICAgIGlmICghUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKHRlbXAsICZjaCkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IDEgb3IgMyBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih3dmxpbmUoc2VsZi0+d2luLCBjaCB8IGF0dHIsIG4pLCAidmxpbmUiKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoY29kZSwgIndtb3ZlIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X1Njcm9sbChQeUN1cnNlc1dpbmRvd09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBubGluZXM7Ci0gICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoc2Nyb2xsKHNlbGYtPndpbiksICJzY3JvbGwiKTsKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7bmxpbmVzIiwgJm5saW5lcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHdzY3JsKHNlbGYtPndpbiwgbmxpbmVzKSwgInNjcm9sbCIpOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic2Nyb2xsIHJlcXVpcmVzIDAgb3IgMSBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19Ub3VjaExpbmUoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgc3QsIGNudCwgdmFsOwotICAgICAgICAgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7c3RhcnQsY291bnQiLCZzdCwmY250KSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodG91Y2hsaW5lKHNlbGYtPndpbixzdCxjbnQpLCAidG91Y2hsaW5lIik7Ci0gICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWk7c3RhcnQsY291bnQsdmFsIiwgJnN0LCAmY250LCAmdmFsKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3RvdWNobG4oc2VsZi0+d2luLCBzdCwgY250LCB2YWwpLCAidG91Y2hsaW5lIik7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ0b3VjaGxpbmUgcmVxdWlyZXMgMiBvciAzIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzV2luZG93X1ZsaW5lKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKnRlbXA7Ci0gICAgICAgICAgICBjaHR5cGUgY2g7Ci0gICAgICAgICAgICBpbnQgbiwgeCwgeSwgY29kZSA9IE9LOwotICAgICAgICAgICAgYXR0cl90IGF0dHIgPSBBX05PUk1BTDsKLSAgICAgICAgICAgIGxvbmcgbGF0dHI7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPaTtjaCBvciBpbnQsbiIsICZ0ZW1wLCAmbikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAzOgotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2lsO2NoIG9yIGludCxuLGF0dHIiLCAmdGVtcCwgJm4sICZsYXR0cikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2k7eSx4LGNoIG9yIGludCxuIiwgJnksICZ4LCAmdGVtcCwgJm4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBjb2RlID0gd21vdmUoc2VsZi0+d2luLCB5LCB4KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpT2lsOyB5LHgsY2ggb3IgaW50LG4sYXR0ciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5LCAmeCwgJnRlbXAsICZuLCAmbGF0dHIpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBhdHRyID0gbGF0dHI7Ci0gICAgICAgICAgICAgICAgY29kZSA9IHdtb3ZlKHNlbGYtPndpbiwgeSwgeCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ2bGluZSByZXF1aXJlcyAyIHRvIDUgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjb2RlICE9IEVSUikgewotICAgICAgICAgICAgICAgIGlmICghUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKHRlbXAsICZjaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCAxIG9yIDMgbXVzdCBiZSBhIGNoIG9yIGFuIGludCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIod3ZsaW5lKHNlbGYtPndpbiwgY2ggfCBhdHRyLCBuKSwgInZsaW5lIik7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihjb2RlLCAid21vdmUiKTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc1dpbmRvd19NZXRob2RzW10gPSB7Ci0gICAgICAgICAgICB7ImFkZGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRDaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYWRkbnN0ciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZE5TdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImF0dHJvZmYiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT2ZmLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJhdHRyb24iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9uLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJhdHRyc2V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0clNldCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYmtnZCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JrZ2QsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNoZ2F0IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19DaGdBdCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiYmtnZHNldCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JrZ2RTZXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImJvcmRlciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Cb3JkZXIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImJveCIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Cb3gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNsZWFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xlYXIsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY2xlYXJvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2NsZWFyb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNscnRvYm90IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193Y2xydG9ib3QsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY2xydG9lb2wiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbHJ0b2VvbCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJjdXJzeW5jdXAiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2N1cnN5bmN1cCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJkZWxjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRGVsQ2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImRlbGV0ZWxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193ZGVsZXRlbG4sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZGVyd2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0RlcldpbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZWNob2NoYXIiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0VjaG9DaGFyLCBNRVRIX1ZBUkFSR1N9LAorc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzV2luZG93X01ldGhvZHNbXSA9IHsKKyAgICB7ImFkZGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImFkZG5zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGROU3RyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYWRkc3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZFN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImF0dHJvZmYiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyT2ZmLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYXR0cm9uIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0F0dHJPbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImF0dHJzZXQiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BdHRyU2V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiYmtnZCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0JrZ2QsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjaGdhdCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQ2hnQXQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJia2dkc2V0IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQmtnZFNldCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImJvcmRlciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Cb3JkZXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJib3giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQm94LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3djbGVhciwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2xlYXJvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2NsZWFyb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJjbHJ0b2JvdCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NscnRvYm90LCBNRVRIX05PQVJHU30sCisgICAgeyJjbHJ0b2VvbCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2NscnRvZW9sLCBNRVRIX05PQVJHU30sCisgICAgeyJjdXJzeW5jdXAiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2N1cnN5bmN1cCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZGVsY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0RlbENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZGVsZXRlbG4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dkZWxldGVsbiwgTUVUSF9OT0FSR1N9LAorICAgIHsiZGVyd2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0RlcldpbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImVjaG9jaGFyIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19FY2hvQ2hhciwgTUVUSF9WQVJBUkdTfSwKICNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KLSAgICAgICAgICAgIHsiZW5jbG9zZSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0VuY2xvc2UsIE1FVEhfVkFSQVJHU30sCisgICAgeyJlbmNsb3NlIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfRW5jbG9zZSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJlcmFzZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2VyYXNlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImdldGJlZ3l4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRiZWd5eCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXRia2dkIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0QmtnZCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXRjaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfR2V0Q2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImdldGtleSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRLZXksIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImdldG1heHl4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRtYXh5eCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJnZXRwYXJ5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0cGFyeXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0c3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldFN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0eXgiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2dldHl4LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImhsaW5lIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19IbGluZSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaWRjb2siLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lkY29rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpZGxvayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaWRsb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImltbWVkb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19pbW1lZG9rLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbmNoIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5DaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5zY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0luc0NoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbnNkZWxsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2luc2RlbGxuLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbnNlcnRsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2luc2VydGxuLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Imluc25zdHIiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNOU3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbnNzdHIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zU3RyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbnN0ciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5TdHIsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImlzX2xpbmV0b3VjaGVkIiwgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Jc19MaW5lVG91Y2hlZCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaXNfd2ludG91Y2hlZCIsICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lzX3dpbnRvdWNoZWQsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsia2V5cGFkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2tleXBhZCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibGVhdmVvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2xlYXZlb2ssIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im1vdmUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193bW92ZSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibXZkZXJ3aW4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X212ZGVyd2luLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJtdndpbiIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbXZ3aW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5vZGVsYXkiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub2RlbGF5LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJub3RpbWVvdXQiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm90aW1lb3V0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJub3V0cmVmcmVzaCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbGlhcyAtLSByZW1vdmUgaW4gUHl0aG9uIDIuMyAqLwotICAgICAgICAgICAgeyJub291dHJlZnJlc2giLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJvdmVybGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcmxheSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsib3ZlcndyaXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X092ZXJ3cml0ZSwKLSAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJwdXR3aW4iLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUHV0V2luLCBNRVRIX099LAotICAgICAgICAgICAgeyJyZWRyYXdsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUmVkcmF3TGluZSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicmVkcmF3d2luIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3JlZHJhd3dpbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJyZWZyZXNoIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfUmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImVyYXNlIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193ZXJhc2UsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldGJlZ3l4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRiZWd5eCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0YmtnZCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldEJrZ2QsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldGNoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGtleSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19HZXRLZXksIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRtYXh5eCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfZ2V0bWF4eXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldHBhcnl4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXRwYXJ5eCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0c3RyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0dldFN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldHl4IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19nZXR5eCwgTUVUSF9OT0FSR1N9LAorICAgIHsiaGxpbmUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0hsaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaWRjb2siLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lkY29rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaWRsb2siLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2lkbG9rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW1tZWRvayIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2ltbWVkb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbmNoIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5DaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imluc2NoIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imluc2RlbGxuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193aW5zZGVsbG4sIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbnNlcnRsbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd2luc2VydGxuLCBNRVRIX05PQVJHU30sCisgICAgeyJpbnNuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5zTlN0ciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imluc3N0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19JbnNTdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpbnN0ciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSW5TdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpc19saW5ldG91Y2hlZCIsICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfSXNfTGluZVRvdWNoZWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpc193aW50b3VjaGVkIiwgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfaXNfd2ludG91Y2hlZCwgTUVUSF9OT0FSR1N9LAorICAgIHsia2V5cGFkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X2tleXBhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImxlYXZlb2siLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19sZWF2ZW9rLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibW92ZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dtb3ZlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibXZkZXJ3aW4iLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X212ZGVyd2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibXZ3aW4iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X212d2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibm9kZWxheSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X25vZGVsYXksIE1FVEhfVkFSQVJHU30sCisgICAgeyJub3RpbWVvdXQiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm90aW1lb3V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibm91dHJlZnJlc2giLCAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X05vT3V0UmVmcmVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFsaWFzIC0tIHJlbW92ZSBpbiBQeXRob24gMi4zICovCisgICAgeyJub291dHJlZnJlc2giLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsib3ZlcmxheSIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X092ZXJsYXksIE1FVEhfVkFSQVJHU30sCisgICAgeyJvdmVyd3JpdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcndyaXRlLAorICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsicHV0d2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1B1dFdpbiwgTUVUSF9PfSwKKyAgICB7InJlZHJhd2xuIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19SZWRyYXdMaW5lLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVkcmF3d2luIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3JlZHJhd3dpbiwgTUVUSF9OT0FSR1N9LAorICAgIHsicmVmcmVzaCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1JlZnJlc2gsIE1FVEhfVkFSQVJHU30sCiAjaWZuZGVmIFNUUklDVF9TWVNWX0NVUlNFUwotICAgICAgICAgICAgeyJyZXNpemUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3Jlc2l6ZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlc2l6ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193cmVzaXplLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7InNjcm9sbCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TY3JvbGwsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InNjcm9sbG9rIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19zY3JvbGxvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic2V0c2NycmVnIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1NldFNjcm9sbFJlZ2lvbiwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic3RhbmRlbmQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzdGFuZGVuZCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJzdGFuZG91dCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N0YW5kb3V0LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InN1YnBhZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TdWJXaW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InN1YndpbiIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TdWJXaW4sIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InN5bmNkb3duIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3luY2Rvd24sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsic3luY29rIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3N5bmNvaywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsic3luY3VwIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3dzeW5jdXAsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidGltZW91dCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3d0aW1lb3V0LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0b3VjaGxpbmUiLCAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfVG91Y2hMaW5lLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ0b3VjaHdpbiIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfdG91Y2h3aW4sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidW50b3VjaHdpbiIsICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3VudG91Y2h3aW4sIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidmxpbmUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1ZsaW5lLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwotICAgICAgICB9OworICAgIHsic2Nyb2xsIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1Njcm9sbCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InNjcm9sbG9rIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19zY3JvbGxvaywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InNldHNjcnJlZyIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19TZXRTY3JvbGxSZWdpb24sIE1FVEhfVkFSQVJHU30sCisgICAgeyJzdGFuZGVuZCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N0YW5kZW5kLCBNRVRIX05PQVJHU30sCisgICAgeyJzdGFuZG91dCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N0YW5kb3V0LCBNRVRIX05PQVJHU30sCisgICAgeyJzdWJwYWQiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfU3ViV2luLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsic3Vid2luIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1N1YldpbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InN5bmNkb3duIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd193c3luY2Rvd24sIE1FVEhfTk9BUkdTfSwKKyAgICB7InN5bmNvayIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19zeW5jb2ssIE1FVEhfVkFSQVJHU30sCisgICAgeyJzeW5jdXAiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfd3N5bmN1cCwgTUVUSF9OT0FSR1N9LAorICAgIHsidGltZW91dCIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3d0aW1lb3V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidG91Y2hsaW5lIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X1RvdWNoTGluZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRvdWNod2luIiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd190b3VjaHdpbiwgTUVUSF9OT0FSR1N9LAorICAgIHsidW50b3VjaHdpbiIsICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X3VudG91Y2h3aW4sIE1FVEhfTk9BUkdTfSwKKyAgICB7InZsaW5lIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19WbGluZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCit9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotICAgICAgICBQeVR5cGVPYmplY3QgUHlDdXJzZXNXaW5kb3dfVHlwZSA9IHsKLSAgICAgICAgICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICAgICAgICAgIl9jdXJzZXMuY3Vyc2VzIHdpbmRvdyIsICAgICAgICAgICAgLyp0cF9uYW1lKi8KLSAgICAgICAgICAgIHNpemVvZihQeUN1cnNlc1dpbmRvd09iamVjdCksICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAgICAgICAgIC8qIG1ldGhvZHMgKi8KLSAgICAgICAgICAgIChkZXN0cnVjdG9yKVB5Q3Vyc2VzV2luZG93X0RlYWxsb2MsIC8qdHBfZGVhbGxvYyovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCi0gICAgICAgICAgICAoZ2V0YXR0cmZ1bmMpMCwgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAgICAgICAgIChzZXRhdHRyZnVuYykwLCAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgICAgICAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLwotICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgICAgICAgICBQeUN1cnNlc1dpbmRvd19NZXRob2RzLCAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAgICAgfTsKK1B5VHlwZU9iamVjdCBQeUN1cnNlc1dpbmRvd19UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfY3Vyc2VzLmN1cnNlcyB3aW5kb3ciLCAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKFB5Q3Vyc2VzV2luZG93T2JqZWN0KSwgICAgICAgLyp0cF9iYXNpY3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KKyAgICAvKiBtZXRob2RzICovCisgICAgKGRlc3RydWN0b3IpUHlDdXJzZXNXaW5kb3dfRGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCovCisgICAgKGdldGF0dHJmdW5jKTAsICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgKHNldGF0dHJmdW5jKTAsICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2gqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAvKnRwX2ZsYWdzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jbGVhciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgUHlDdXJzZXNXaW5kb3dfTWV0aG9kcywgICAgIC8qdHBfbWV0aG9kcyovCit9OwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgR2xvYmFsIEZ1bmN0aW9ucwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24oYmVlcCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihkZWZfcHJvZ19tb2RlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9zaGVsbF9tb2RlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRvdXBkYXRlKQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKGVuZHdpbikKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihmbGFzaCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub2NicmVhaykKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub2VjaG8pCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24obm9ubCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihub3JhdykKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9wcm9nX21vZGUpCi0gICAgICAgICAgICBOb0FyZ05vUmV0dXJuRnVuY3Rpb24ocmVzZXRfc2hlbGxfbW9kZSkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldHR5KQotICAgICAgICAgICAgTm9BcmdOb1JldHVybkZ1bmN0aW9uKHNhdmV0dHkpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24oYmVlcCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihkZWZfcHJvZ19tb2RlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRlZl9zaGVsbF9tb2RlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGRvdXBkYXRlKQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKGVuZHdpbikKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihmbGFzaCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub2NicmVhaykKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub2VjaG8pCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24obm9ubCkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihub3JhdykKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldF9wcm9nX21vZGUpCitOb0FyZ05vUmV0dXJuRnVuY3Rpb24ocmVzZXRfc2hlbGxfbW9kZSkKK05vQXJnTm9SZXR1cm5GdW5jdGlvbihyZXNldHR5KQorTm9BcmdOb1JldHVybkZ1bmN0aW9uKHNhdmV0dHkpCiAKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihjYnJlYWspCi0gICAgICAgICAgICBOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24oZWNobykKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihubCkKLSAgICAgICAgICAgIE5vQXJnT3JGbGFnTm9SZXR1cm5GdW5jdGlvbihyYXcpCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24oY2JyZWFrKQorTm9BcmdPckZsYWdOb1JldHVybkZ1bmN0aW9uKGVjaG8pCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24obmwpCitOb0FyZ09yRmxhZ05vUmV0dXJuRnVuY3Rpb24ocmF3KQogCi0gICAgICAgICAgICBOb0FyZ1JldHVybkludEZ1bmN0aW9uKGJhdWRyYXRlKQotICAgICAgICAgICAgTm9BcmdSZXR1cm5JbnRGdW5jdGlvbih0ZXJtYXR0cnMpCitOb0FyZ1JldHVybkludEZ1bmN0aW9uKGJhdWRyYXRlKQorTm9BcmdSZXR1cm5JbnRGdW5jdGlvbih0ZXJtYXR0cnMpCiAKLSAgICAgICAgICAgIE5vQXJnUmV0dXJuU3RyaW5nRnVuY3Rpb24odGVybW5hbWUpCi0gICAgICAgICAgICBOb0FyZ1JldHVyblN0cmluZ0Z1bmN0aW9uKGxvbmduYW1lKQorTm9BcmdSZXR1cm5TdHJpbmdGdW5jdGlvbih0ZXJtbmFtZSkKK05vQXJnUmV0dXJuU3RyaW5nRnVuY3Rpb24obG9uZ25hbWUpCiAKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oY2FuX2NoYW5nZV9jb2xvcikKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaGFzX2NvbG9ycykKLSAgICAgICAgICAgIE5vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaGFzX2ljKQotICAgICAgICAgICAgTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfaWwpCi0gICAgICAgICAgICBOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGlzZW5kd2luKQotICAgICAgICAgICAgTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihmbHVzaGlucCkKLSAgICAgICAgICAgIE5vQXJnTm9SZXR1cm5Wb2lkRnVuY3Rpb24obm9xaWZsdXNoKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihjYW5fY2hhbmdlX2NvbG9yKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfY29sb3JzKQorTm9BcmdUcnVlRmFsc2VGdW5jdGlvbihoYXNfaWMpCitOb0FyZ1RydWVGYWxzZUZ1bmN0aW9uKGhhc19pbCkKK05vQXJnVHJ1ZUZhbHNlRnVuY3Rpb24oaXNlbmR3aW4pCitOb0FyZ05vUmV0dXJuVm9pZEZ1bmN0aW9uKGZsdXNoaW5wKQorTm9BcmdOb1JldHVyblZvaWRGdW5jdGlvbihub3FpZmx1c2gpCiAKLSAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19maWx0ZXIoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIG5vdCBjaGVja2luZyBmb3IgUHlDdXJzZXNJbml0aWFsaXNlZCBoZXJlIHNpbmNlIGZpbHRlcigpIG11c3QKLSAgICAgICAgICAgICAgIGJlIGNhbGxlZCBiZWZvcmUgaW5pdHNjcigpICovCi0gICAgICAgICAgICBmaWx0ZXIoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfZmlsdGVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIC8qIG5vdCBjaGVja2luZyBmb3IgUHlDdXJzZXNJbml0aWFsaXNlZCBoZXJlIHNpbmNlIGZpbHRlcigpIG11c3QKKyAgICAgICBiZSBjYWxsZWQgYmVmb3JlIGluaXRzY3IoKSAqLworICAgIGZpbHRlcigpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfQ29sb3JfQ29udGVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNob3J0IGNvbG9yLHIsZyxiOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IGNvbG9yLHIsZyxiOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImg6Y29sb3JfY29udGVudCIsICZjb2xvcikpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaDpjb2xvcl9jb250ZW50IiwgJmNvbG9yKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmIChjb2xvcl9jb250ZW50KGNvbG9yLCAmciwgJmcsICZiKSAhPSBFUlIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgciwgZywgYik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gQ2hlY2sgdmFsdWUgb2YgQ09MT1JTLiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKGNvbG9yX2NvbnRlbnQoY29sb3IsICZyLCAmZywgJmIpICE9IEVSUikKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaWkpIiwgciwgZywgYik7CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gQ2hlY2sgdmFsdWUgb2YgQ09MT1JTLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX2NvbG9yX3BhaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19jb2xvcl9wYWlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbjsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmNvbG9yX3BhaXIiLCAmbikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZykgKG4gPDwgOCkpOwotICAgICAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmNvbG9yX3BhaXIiLCAmbikpIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIChuIDw8IDgpKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfQ3Vyc19TZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgdmlzLGVyZzsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19DdXJzX1NldChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHZpcyxlcmc7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmN1cnNfc2V0IiwgJnZpcykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpjdXJzX3NldCIsICZ2aXMpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgZXJnID0gY3Vyc19zZXQodmlzKTsKLSAgICAgICAgICAgIGlmIChlcmcgPT0gRVJSKSByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihlcmcsICJjdXJzX3NldCIpOworICAgIGVyZyA9IGN1cnNfc2V0KHZpcyk7CisgICAgaWYgKGVyZyA9PSBFUlIpIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGVyZywgImN1cnNfc2V0Iik7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIGVyZyk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlcmcpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19EZWxheV9PdXRwdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbXM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfRGVsYXlfT3V0cHV0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbXM7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmRlbGF5X291dHB1dCIsICZtcykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpkZWxheV9vdXRwdXQiLCAmbXMpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoZGVsYXlfb3V0cHV0KG1zKSwgImRlbGF5X291dHB1dCIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoZGVsYXlfb3V0cHV0KG1zKSwgImRlbGF5X291dHB1dCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19FcmFzZUNoYXIoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfRXJhc2VDaGFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIgY2g7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgY2ggPSBlcmFzZWNoYXIoKTsKKyAgICBjaCA9IGVyYXNlY2hhcigpOwogCi0gICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgmY2gsIDEpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoJmNoLCAxKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfZ2V0c3l4KFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeCA9IDA7Ci0gICAgICAgICAgICBpbnQgeSA9IDA7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfZ2V0c3l4KFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCB4ID0gMDsKKyAgICBpbnQgeSA9IDA7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgZ2V0c3l4KHksIHgpOworICAgIGdldHN5eCh5LCB4KTsKIAotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCB5LCB4KTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgeSwgeCk7Cit9CiAKICNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0dldE1vdXNlKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgcnRuOwotICAgICAgICAgICAgTUVWRU5UIGV2ZW50Oworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0dldE1vdXNlKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBydG47CisgICAgTUVWRU5UIGV2ZW50OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIHJ0biA9IGdldG1vdXNlKCAmZXZlbnQgKTsKLSAgICAgICAgICAgIGlmIChydG4gPT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJnZXRtb3VzZSgpIHJldHVybmVkIEVSUiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihoaWlpbCkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNob3J0KWV2ZW50LmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQueCwgZXZlbnQueSwgZXZlbnQueiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBldmVudC5ic3RhdGUpOwotICAgICAgICB9CisgICAgcnRuID0gZ2V0bW91c2UoICZldmVudCApOworICAgIGlmIChydG4gPT0gRVJSKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAiZ2V0bW91c2UoKSByZXR1cm5lZCBFUlIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaGlpaWwpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpZXZlbnQuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQueCwgZXZlbnQueSwgZXZlbnQueiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZykgZXZlbnQuYnN0YXRlKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVW5nZXRNb3VzZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIE1FVkVOVCBldmVudDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19VbmdldE1vdXNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBNRVZFTlQgZXZlbnQ7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImhpaWlsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LmlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQueCwgJmV2ZW50LnksICZldmVudC56LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50ICopICZldmVudC5ic3RhdGUpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGlpaWwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZlbnQuaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudC54LCAmZXZlbnQueSwgJmV2ZW50LnosCisgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQgKikgJmV2ZW50LmJzdGF0ZSkpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih1bmdldG1vdXNlKCZldmVudCksICJ1bmdldG1vdXNlIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih1bmdldG1vdXNlKCZldmVudCksICJ1bmdldG1vdXNlIik7Cit9CiAjZW5kaWYKIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfR2V0V2luKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyZWFtKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGZuWzEwMF07Ci0gICAgICAgICAgICBpbnQgZmQ7Ci0gICAgICAgICAgICBGSUxFICpmcDsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpkYXRhOwotICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW47Ci0gICAgICAgICAgICBXSU5ET1cgKndpbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCit7CisgICAgY2hhciBmblsxMDBdOworICAgIGludCBmZDsKKyAgICBGSUxFICpmcDsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBzaXplX3QgZGF0YWxlbjsKKyAgICBXSU5ET1cgKndpbjsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5nZXR3aW4uWFhYWFhYIik7Ci0gICAgICAgICAgICBmZCA9IG1rc3RlbXAoZm4pOwotICAgICAgICAgICAgaWYgKGZkIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKLSAgICAgICAgICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7Ci0gICAgICAgICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGxNZXRob2Qoc3RyZWFtLCAicmVhZCIsICIiKTsKLSAgICAgICAgICAgIGlmIChkYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICAgICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soZGF0YSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgJS4xMDBzIGluc3RlYWQgb2YgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGF0YWxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoZGF0YSk7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCAxLCBkYXRhbGVuLCBmcCkgIT0gZGF0YWxlbikgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKLSAgICAgICAgICAgICAgICBmY2xvc2UoZnApOwotICAgICAgICAgICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICBmc2VlayhmcCwgMCwgMCk7Ci0gICAgICAgICAgICB3aW4gPSBnZXR3aW4oZnApOwotICAgICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgICAgICBpZiAod2luID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7Ci0gICAgICAgIH0KKyAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5nZXR3aW4uWFhYWFhYIik7CisgICAgZmQgPSBta3N0ZW1wKGZuKTsKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBmcCA9IGZkb3BlbihmZCwgIndiKyIpOworICAgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmVtb3ZlKGZuKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgfQorICAgIGRhdGEgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHN0cmVhbSwgInJlYWQiLCAiIik7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkgeworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICByZW1vdmUoZm4pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiZi5yZWFkKCkgcmV0dXJuZWQgJS4xMDBzIGluc3RlYWQgb2YgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmVtb3ZlKGZuKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGRhdGFsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOworICAgIGlmIChmd3JpdGUoUHlCeXRlc19BU19TVFJJTkcoZGF0YSksIDEsIGRhdGFsZW4sIGZwKSAhPSBkYXRhbGVuKSB7CisgICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgcmVtb3ZlKGZuKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBmbik7CisgICAgfQorICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICBmc2VlayhmcCwgMCwgMCk7CisgICAgd2luID0gZ2V0d2luKGZwKTsKKyAgICBmY2xvc2UoZnApOworICAgIHJlbW92ZShmbik7CisgICAgaWYgKHdpbiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSGFsZkRlbGF5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciB0ZW50aHM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSGFsZkRlbGF5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHRlbnRoczsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImI6aGFsZmRlbGF5IiwgJnRlbnRocykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiYjpoYWxmZGVsYXkiLCAmdGVudGhzKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGhhbGZkZWxheSh0ZW50aHMpLCAiaGFsZmRlbGF5Iik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihoYWxmZGVsYXkodGVudGhzKSwgImhhbGZkZWxheSIpOworfQogCiAjaWZuZGVmIFNUUklDVF9TWVNWX0NVUlNFUwotICAgICAgICAvKiBObyBoYXNfa2V5ISAqLwotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKiBQeUN1cnNlc19oYXNfa2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoOworLyogTm8gaGFzX2tleSEgKi8KK3N0YXRpYyBQeU9iamVjdCAqIFB5Q3Vyc2VzX2hhc19rZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaSIsJmNoKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoaGFzX2tleShjaCkgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9UcnVlKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICB9CisgICAgaWYgKGhhc19rZXkoY2gpID09IEZBTFNFKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7CisgICAgICAgIHJldHVybiBQeV9GYWxzZTsKKyAgICB9CisgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgIHJldHVybiBQeV9UcnVlOworfQogI2VuZGlmIC8qIFNUUklDVF9TWVNWX0NVUlNFUyAqLwogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Jbml0X0NvbG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgY29sb3IsIHIsIGcsIGI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSW5pdF9Db2xvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgc2hvcnQgY29sb3IsIHIsIGcsIGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoaDtjb2xvcixyLGcsYiIsICZjb2xvciwgJnIsICZnLCAmYikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5pdF9jb2xvciByZXF1aXJlcyA0IGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgNDoKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaGhoO2NvbG9yLHIsZyxiIiwgJmNvbG9yLCAmciwgJmcsICZiKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbml0X2NvbG9yIHJlcXVpcmVzIDQgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9jb2xvcihjb2xvciwgciwgZywgYiksICJpbml0X2NvbG9yIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihpbml0X2NvbG9yKGNvbG9yLCByLCBnLCBiKSwgImluaXRfY29sb3IiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSW5pdF9QYWlyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgcGFpciwgZiwgYjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Jbml0X1BhaXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IHBhaXIsIGYsIGI7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgIT0gMykgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW5pdF9wYWlyIHJlcXVpcmVzIDMgYXJndW1lbnRzIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpICE9IDMpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluaXRfcGFpciByZXF1aXJlcyAzIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaGhoO3BhaXIsIGYsIGIiLCAmcGFpciwgJmYsICZiKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoaGg7cGFpciwgZiwgYiIsICZwYWlyLCAmZiwgJmIpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW5pdF9wYWlyKHBhaXIsIGYsIGIpLCAiaW5pdF9wYWlyIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihpbml0X3BhaXIocGFpciwgZiwgYiksICJpbml0X3BhaXIiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKk1vZERpY3Q7CitzdGF0aWMgUHlPYmplY3QgKk1vZERpY3Q7CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0luaXRTY3IoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0luaXRTY3IoUHlPYmplY3QgKnNlbGYpCit7CisgICAgV0lORE9XICp3aW47CiAKLSAgICAgICAgICAgIGlmIChpbml0aWFsaXNlZCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHN0ZHNjcik7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGluaXRpYWxpc2VkID09IFRSVUUpIHsKKyAgICAgICAgd3JlZnJlc2goc3Rkc2NyKTsKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyhzdGRzY3IpOworICAgIH0KIAotICAgICAgICAgICAgd2luID0gaW5pdHNjcigpOworICAgIHdpbiA9IGluaXRzY3IoKTsKIAotICAgICAgICAgICAgaWYgKHdpbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICh3aW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgY2F0Y2hhbGxfTlVMTCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgaW5pdGlhbGlzZWQgPSBpbml0aWFsaXNlZF9zZXR1cHRlcm0gPSBUUlVFOworICAgIGluaXRpYWxpc2VkID0gaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKIAogLyogVGhpcyB3YXMgbW92ZWQgZnJvbSBpbml0Y3Vyc2VzKCkgYmVjYXVzZSBpdCBjb3JlIGR1bXBlZCBvbiBTR0ksCiAgICB3aGVyZSB0aGV5J3JlIG5vdCBkZWZpbmVkIHVudGlsIHlvdSd2ZSBjYWxsZWQgaW5pdHNjcigpICovCiAjZGVmaW5lIFNldERpY3RJbnQoc3RyaW5nLGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm8gPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIChjaCkpOyAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgaWYgKG8gJiYgUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgc3RyaW5nLCBvKSA9PSAwKSAgICAgeyBcCi0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB9IHdoaWxlICgwKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqbyA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgKGNoKSk7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobyAmJiBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCBzdHJpbmcsIG8pID09IDApICAgICB7ICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSAgICAgICAgICAgIC8qIEhlcmUgYXJlIHNvbWUgZ3JhcGhpYyBzeW1ib2xzIHlvdSBjYW4gdXNlICovCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVUxDT1JORVIiLCAgICAgIChBQ1NfVUxDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MTENPUk5FUiIsICAgICAgKEFDU19MTENPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1VSQ09STkVSIiwgICAgICAoQUNTX1VSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTFJDT1JORVIiLCAgICAgIChBQ1NfTFJDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MVEVFIiwgICAgICAgICAgKEFDU19MVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUlRFRSIsICAgICAgICAgIChBQ1NfUlRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JURUUiLCAgICAgICAgICAoQUNTX0JURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19UVEVFIiwgICAgICAgICAgKEFDU19UVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfSExJTkUiLCAgICAgICAgIChBQ1NfSExJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19WTElORSIsICAgICAgICAgKEFDU19WTElORSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1BMVVMiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKKyAgICAvKiBIZXJlIGFyZSBzb21lIGdyYXBoaWMgc3ltYm9scyB5b3UgY2FuIHVzZSAqLworICAgIFNldERpY3RJbnQoIkFDU19VTENPUk5FUiIsICAgICAgKEFDU19VTENPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MTENPUk5FUiIsICAgICAgKEFDU19MTENPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19VUkNPUk5FUiIsICAgICAgKEFDU19VUkNPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MUkNPUk5FUiIsICAgICAgKEFDU19MUkNPUk5FUikpOworICAgIFNldERpY3RJbnQoIkFDU19MVEVFIiwgICAgICAgICAgKEFDU19MVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX1JURUUiLCAgICAgICAgICAoQUNTX1JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlRFRSIsICAgICAgICAgIChBQ1NfQlRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19UVEVFIiwgICAgICAgICAgKEFDU19UVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX0hMSU5FIiwgICAgICAgICAoQUNTX0hMSU5FKSk7CisgICAgU2V0RGljdEludCgiQUNTX1ZMSU5FIiwgICAgICAgICAoQUNTX1ZMSU5FKSk7CisgICAgU2V0RGljdEludCgiQUNTX1BMVVMiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKICNpZiAhZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoSEFWRV9OQ1VSU0VTX0gpCi0gICAgICAgICAgICAvKiBPbiBIUC9VWCAxMSwgdGhlc2UgYXJlIG9mIHR5cGUgY2NoYXJfdCwgd2hpY2ggaXMgbm90IGFuCi0gICAgICAgICAgICAgICBpbnRlZ3JhbCB0eXBlLiBJZiB0aGlzIGlzIGEgcHJvYmxlbSBvbiBtb3JlIHBsYXRmb3JtcywgYQotICAgICAgICAgICAgICAgY29uZmlndXJlIHRlc3Qgc2hvdWxkIGJlIGFkZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIEFDU19TMQotICAgICAgICAgICAgICAgaXMgb2YgaW50ZWdyYWwgdHlwZS4gKi8KLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TMSIsICAgICAgICAgICAgKEFDU19TMSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1M5IiwgICAgICAgICAgICAoQUNTX1M5KSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfRElBTU9ORCIsICAgICAgIChBQ1NfRElBTU9ORCkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0NLQk9BUkQiLCAgICAgICAoQUNTX0NLQk9BUkQpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19ERUdSRUUiLCAgICAgICAgKEFDU19ERUdSRUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19QTE1JTlVTIiwgICAgICAgKEFDU19QTE1JTlVTKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlVMTEVUIiwgICAgICAgIChBQ1NfQlVMTEVUKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfTEFSUk9XIiwgICAgICAgIChBQ1NfTEFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfUkFSUk9XIiwgICAgICAgIChBQ1NfUkFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfREFSUk9XIiwgICAgICAgIChBQ1NfREFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfVUFSUk9XIiwgICAgICAgIChBQ1NfVUFSUk9XKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQk9BUkQiLCAgICAgICAgIChBQ1NfQk9BUkQpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19MQU5URVJOIiwgICAgICAgKEFDU19MQU5URVJOKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQkxPQ0siLCAgICAgICAgIChBQ1NfQkxPQ0spKTsKKyAgICAvKiBPbiBIUC9VWCAxMSwgdGhlc2UgYXJlIG9mIHR5cGUgY2NoYXJfdCwgd2hpY2ggaXMgbm90IGFuCisgICAgICAgaW50ZWdyYWwgdHlwZS4gSWYgdGhpcyBpcyBhIHByb2JsZW0gb24gbW9yZSBwbGF0Zm9ybXMsIGEKKyAgICAgICBjb25maWd1cmUgdGVzdCBzaG91bGQgYmUgYWRkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgQUNTX1MxCisgICAgICAgaXMgb2YgaW50ZWdyYWwgdHlwZS4gKi8KKyAgICBTZXREaWN0SW50KCJBQ1NfUzEiLCAgICAgICAgICAgIChBQ1NfUzEpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUzkiLCAgICAgICAgICAgIChBQ1NfUzkpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfRElBTU9ORCIsICAgICAgIChBQ1NfRElBTU9ORCkpOworICAgIFNldERpY3RJbnQoIkFDU19DS0JPQVJEIiwgICAgICAgKEFDU19DS0JPQVJEKSk7CisgICAgU2V0RGljdEludCgiQUNTX0RFR1JFRSIsICAgICAgICAoQUNTX0RFR1JFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19QTE1JTlVTIiwgICAgICAgKEFDU19QTE1JTlVTKSk7CisgICAgU2V0RGljdEludCgiQUNTX0JVTExFVCIsICAgICAgICAoQUNTX0JVTExFVCkpOworICAgIFNldERpY3RJbnQoIkFDU19MQVJST1ciLCAgICAgICAgKEFDU19MQVJST1cpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfUkFSUk9XIiwgICAgICAgIChBQ1NfUkFSUk9XKSk7CisgICAgU2V0RGljdEludCgiQUNTX0RBUlJPVyIsICAgICAgICAoQUNTX0RBUlJPVykpOworICAgIFNldERpY3RJbnQoIkFDU19VQVJST1ciLCAgICAgICAgKEFDU19VQVJST1cpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQk9BUkQiLCAgICAgICAgIChBQ1NfQk9BUkQpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfTEFOVEVSTiIsICAgICAgIChBQ1NfTEFOVEVSTikpOworICAgIFNldERpY3RJbnQoIkFDU19CTE9DSyIsICAgICAgICAgKEFDU19CTE9DSykpOwogI2VuZGlmCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlNTQiIsICAgICAgICAgIChBQ1NfVUxDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TU0JCIiwgICAgICAgICAgKEFDU19MTENPUk5FUikpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0JCU1MiLCAgICAgICAgICAoQUNTX1VSQ09STkVSKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU0JCUyIsICAgICAgICAgIChBQ1NfTFJDT1JORVIpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TQlNTIiwgICAgICAgICAgKEFDU19SVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfU1NTQiIsICAgICAgICAgIChBQ1NfTFRFRSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NTQlMiLCAgICAgICAgICAoQUNTX0JURUUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19CU1NTIiwgICAgICAgICAgKEFDU19UVEVFKSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBQ1NfQlNCUyIsICAgICAgICAgIChBQ1NfSExJTkUpKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TQlNCIiwgICAgICAgICAgKEFDU19WTElORSkpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NTU1MiLCAgICAgICAgICAoQUNTX1BMVVMpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlNTQiIsICAgICAgICAgIChBQ1NfVUxDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU1NCQiIsICAgICAgICAgIChBQ1NfTExDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQkJTUyIsICAgICAgICAgIChBQ1NfVVJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU0JCUyIsICAgICAgICAgIChBQ1NfTFJDT1JORVIpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfU0JTUyIsICAgICAgICAgIChBQ1NfUlRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19TU1NCIiwgICAgICAgICAgKEFDU19MVEVFKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NTQlMiLCAgICAgICAgICAoQUNTX0JURUUpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfQlNTUyIsICAgICAgICAgIChBQ1NfVFRFRSkpOworICAgIFNldERpY3RJbnQoIkFDU19CU0JTIiwgICAgICAgICAgKEFDU19ITElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19TQlNCIiwgICAgICAgICAgKEFDU19WTElORSkpOworICAgIFNldERpY3RJbnQoIkFDU19TU1NTIiwgICAgICAgICAgKEFDU19QTFVTKSk7CiAKLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLworICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLwogI2lmZGVmIEFDU19TMwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1MzIiwgICAgICAgICAgICAoQUNTX1MzKSk7CisgICAgU2V0RGljdEludCgiQUNTX1MzIiwgICAgICAgICAgICAoQUNTX1MzKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfUzcKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19TNyIsICAgICAgICAgICAgKEFDU19TNykpOworICAgIFNldERpY3RJbnQoIkFDU19TNyIsICAgICAgICAgICAgKEFDU19TNykpOwogI2VuZGlmCiAjaWZkZWYgQUNTX0xFUVVBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX0xFUVVBTCIsICAgICAgICAoQUNTX0xFUVVBTCkpOworICAgIFNldERpY3RJbnQoIkFDU19MRVFVQUwiLCAgICAgICAgKEFDU19MRVFVQUwpKTsKICNlbmRpZgogI2lmZGVmIEFDU19HRVFVQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19HRVFVQUwiLCAgICAgICAgKEFDU19HRVFVQUwpKTsKKyAgICBTZXREaWN0SW50KCJBQ1NfR0VRVUFMIiwgICAgICAgIChBQ1NfR0VRVUFMKSk7CiAjZW5kaWYKICNpZmRlZiBBQ1NfUEkKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFDU19QSSIsICAgICAgICAgICAgKEFDU19QSSkpOworICAgIFNldERpY3RJbnQoIkFDU19QSSIsICAgICAgICAgICAgKEFDU19QSSkpOwogI2VuZGlmCiAjaWZkZWYgQUNTX05FUVVBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX05FUVVBTCIsICAgICAgICAoQUNTX05FUVVBTCkpOworICAgIFNldERpY3RJbnQoIkFDU19ORVFVQUwiLCAgICAgICAgKEFDU19ORVFVQUwpKTsKICNlbmRpZgogI2lmZGVmIEFDU19TVEVSTElORwotICAgICAgICAgICAgU2V0RGljdEludCgiQUNTX1NURVJMSU5HIiwgICAgICAoQUNTX1NURVJMSU5HKSk7CisgICAgU2V0RGljdEludCgiQUNTX1NURVJMSU5HIiwgICAgICAoQUNTX1NURVJMSU5HKSk7CiAjZW5kaWYKIAotICAgICAgICAgICAgU2V0RGljdEludCgiTElORVMiLCBMSU5FUyk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xTIiwgQ09MUyk7CisgICAgU2V0RGljdEludCgiTElORVMiLCBMSU5FUyk7CisgICAgU2V0RGljdEludCgiQ09MUyIsIENPTFMpOwogCi0gICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopUHlDdXJzZXNXaW5kb3dfTmV3KHdpbik7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q3Vyc2VzV2luZG93X05ldyh3aW4pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfc2V0dXB0ZXJtKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QqIGtleXdkcykKK3sKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIqIHRlcm1zdHIgPSBOVUxMOworCisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0ZXJtIiwgImZkIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcygKKyAgICAgICAgICAgIGFyZ3MsIGtleXdkcywgInx6aTpzZXR1cHRlcm0iLCBrd2xpc3QsICZ0ZXJtc3RyLCAmZmQpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICBQeU9iamVjdCogc3lzX3N0ZG91dDsKKworICAgICAgICBzeXNfc3Rkb3V0ID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKworICAgICAgICBpZiAoc3lzX3N0ZG91dCA9PSBOVUxMIHx8IHN5c19zdGRvdXQgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgICAgIFB5Q3Vyc2VzRXJyb3IsCisgICAgICAgICAgICAgICAgImxvc3Qgc3lzLnN0ZG91dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfc2V0dXB0ZXJtKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QqIGtleXdkcykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZkID0gLTE7Ci0gICAgICAgICAgICBpbnQgZXJyOwotICAgICAgICAgICAgY2hhciogdGVybXN0ciA9IE5VTEw7CisgICAgICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcihzeXNfc3Rkb3V0KTsKIAotICAgICAgICAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0ZXJtIiwgImZkIiwgTlVMTH07CisgICAgICAgIGlmIChmZCA9PSAtMSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKAotICAgICAgICAgICAgICAgICAgICBhcmdzLCBrZXl3ZHMsICJ8emk6c2V0dXB0ZXJtIiwga3dsaXN0LCAmdGVybXN0ciwgJmZkKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICghaW5pdGlhbGlzZWRfc2V0dXB0ZXJtICYmIHNldHVwdGVybSh0ZXJtc3RyLGZkLCZlcnIpID09IEVSUikgeworICAgICAgICBjaGFyKiBzID0gInNldHVwdGVybTogdW5rbm93biBlcnJvciI7CiAKLSAgICAgICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzeXNfc3Rkb3V0OwotCi0gICAgICAgICAgICAgICAgc3lzX3N0ZG91dCA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3lzX3N0ZG91dCA9PSBOVUxMIHx8IHN5c19zdGRvdXQgPT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICBQeUN1cnNlc0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvc3Qgc3lzLnN0ZG91dCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmZCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3Ioc3lzX3N0ZG91dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZmQgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoc2V0dXB0ZXJtKHRlcm1zdHIsZmQsJmVycikgPT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgY2hhciogcyA9ICJzZXR1cHRlcm06IHVua25vd24gZXJyb3IiOwotCi0gICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5hbCI7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgcyA9ICJzZXR1cHRlcm06IGNvdWxkIG5vdCBmaW5kIHRlcm1pbmZvIGRhdGFiYXNlIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvcixzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKLQotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICAgICAgcyA9ICJzZXR1cHRlcm06IGNvdWxkIG5vdCBmaW5kIHRlcm1pbmFsIjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgICAgIHMgPSAic2V0dXB0ZXJtOiBjb3VsZCBub3QgZmluZCB0ZXJtaW5mbyBkYXRhYmFzZSI7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfSW50ckZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvcixzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgaW5pdGlhbGlzZWRfc2V0dXB0ZXJtID0gVFJVRTsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmY2gpKSByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImludHJmbHVzaCByZXF1aXJlcyAxIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKGludHJmbHVzaChOVUxMLGNoKSwgImludHJmbHVzaCIpOwotICAgICAgICB9CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfSW50ckZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgY2g7CisKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworCisgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZjaCkpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiaW50cmZsdXNoIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIoaW50cmZsdXNoKE5VTEwsY2gpLCAiaW50cmZsdXNoIik7Cit9CiAKICNpZmRlZiBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0lzX1Rlcm1fUmVzaXplZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsaW5lczsKLSAgICAgICAgICAgIGludCBjb2x1bW5zOwotICAgICAgICAgICAgaW50IHJlc3VsdDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19Jc19UZXJtX1Jlc2l6ZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBsaW5lczsKKyAgICBpbnQgY29sdW1uczsKKyAgICBpbnQgcmVzdWx0OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTppc190ZXJtX3Jlc2l6ZWQiLCAmbGluZXMsICZjb2x1bW5zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXN1bHQgPSBpc190ZXJtX3Jlc2l6ZWQobGluZXMsIGNvbHVtbnMpOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBUUlVFKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9GYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTppc190ZXJtX3Jlc2l6ZWQiLCAmbGluZXMsICZjb2x1bW5zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gaXNfdGVybV9yZXNpemVkKGxpbmVzLCBjb2x1bW5zKTsKKyAgICBpZiAocmVzdWx0ID09IFRSVUUpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOworICAgICAgICByZXR1cm4gUHlfVHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYoUHlfRmFsc2UpOworICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgfQorfQogI2VuZGlmIC8qIEhBVkVfQ1VSU0VTX0lTX1RFUk1fUkVTSVpFRCAqLwogCiAjaWYgIWRlZmluZWQoX19OZXRCU0RfXykKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0tleU5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICprbnA7Ci0gICAgICAgICAgICBpbnQgY2g7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfS2V5TmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY29uc3QgY2hhciAqa25wOworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaSIsJmNoKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImkiLCZjaCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoY2ggPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGtleSBudW1iZXIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtucCA9IGtleW5hbWUoY2gpOworICAgIGlmIChjaCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGtleSBudW1iZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGtucCA9IGtleW5hbWUoY2gpOwogCi0gICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKChrbnAgPT0gTlVMTCkgPyAiIiA6IChjaGFyICopa25wKTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoKGtucCA9PSBOVUxMKSA/ICIiIDogKGNoYXIgKilrbnApOworfQogI2VuZGlmCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0tpbGxDaGFyKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX0tpbGxDaGFyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGNoYXIgY2g7CiAKLSAgICAgICAgICAgIGNoID0ga2lsbGNoYXIoKTsKKyAgICBjaCA9IGtpbGxjaGFyKCk7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCZjaCwgMSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgmY2gsIDEpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19NZXRhKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX01ldGEoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtUcnVlKDEpLCBGYWxzZSgwKSIsJmNoKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJtZXRhIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmY2gpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm1ldGEgcmVxdWlyZXMgMSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKG1ldGEoc3Rkc2NyLCBjaCksICJtZXRhIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihtZXRhKHN0ZHNjciwgY2gpLCAibWV0YSIpOworfQogCiAjaWZkZWYgTkNVUlNFU19NT1VTRV9WRVJTSU9OCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Nb3VzZUludGVydmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGludGVydmFsOwotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX01vdXNlSW50ZXJ2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBpbnRlcnZhbDsKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7aW50ZXJ2YWwiLCZpbnRlcnZhbCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIobW91c2VpbnRlcnZhbChpbnRlcnZhbCksICJtb3VzZWludGVydmFsIik7Ci0gICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtpbnRlcnZhbCIsJmludGVydmFsKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIobW91c2VpbnRlcnZhbChpbnRlcnZhbCksICJtb3VzZWludGVydmFsIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX01vdXNlTWFzayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBuZXdtYXNrOwotICAgICAgICAgICAgbW1hc2tfdCBvbGRtYXNrLCBhdmFpbG1hc2s7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTW91c2VNYXNrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbmV3bWFzazsKKyAgICBtbWFza190IG9sZG1hc2ssIGF2YWlsbWFzazsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO21vdXNlbWFzayIsJm5ld21hc2spKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGF2YWlsbWFzayA9IG1vdXNlbWFzayhuZXdtYXNrLCAmb2xkbWFzayk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGxsKSIsIChsb25nKWF2YWlsbWFzaywgKGxvbmcpb2xkbWFzayk7Ci0gICAgICAgIH0KKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO21vdXNlbWFzayIsJm5ld21hc2spKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBhdmFpbG1hc2sgPSBtb3VzZW1hc2sobmV3bWFzaywgJm9sZG1hc2spOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIobGwpIiwgKGxvbmcpYXZhaWxtYXNrLCAobG9uZylvbGRtYXNrKTsKK30KICNlbmRpZgogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19OYXBtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBtczsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19OYXBtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG1zOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCi0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpO21zIiwgJm1zKSkgcmV0dXJuIE5VTEw7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7bXMiLCAmbXMpKSByZXR1cm4gTlVMTDsKIAotICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBuYXBtcyhtcykpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBuYXBtcyhtcykpOworfQogCiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX05ld1BhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFdJTkRPVyAqd2luOwotICAgICAgICAgICAgaW50IG5saW5lcywgbmNvbHM7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTmV3UGFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBpbnQgbmxpbmVzLCBuY29sczsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7bmxpbmVzLG5jb2xzIiwmbmxpbmVzLCZuY29scykpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtubGluZXMsbmNvbHMiLCZubGluZXMsJm5jb2xzKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHdpbiA9IG5ld3BhZChubGluZXMsIG5jb2xzKTsKKyAgICB3aW4gPSBuZXdwYWQobmxpbmVzLCBuY29scyk7CiAKLSAgICAgICAgICAgIGlmICh3aW4gPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAod2luID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKLSAgICAgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfTmV3V2luZG93KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgV0lORE9XICp3aW47Ci0gICAgICAgICAgICBpbnQgbmxpbmVzLCBuY29scywgYmVnaW5feT0wLCBiZWdpbl94PTA7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfTmV3V2luZG93KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBXSU5ET1cgKndpbjsKKyAgICBpbnQgbmxpbmVzLCBuY29scywgYmVnaW5feT0wLCBiZWdpbl94PTA7CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoIChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTtubGluZXMsbmNvbHMiLCZubGluZXMsJm5jb2xzKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlpaTtubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZubGluZXMsJm5jb2xzLCZiZWdpbl95LCZiZWdpbl94KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibmV3d2luIHJlcXVpcmVzIDIgb3IgNCBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIHN3aXRjaCAoUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAyOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk7bmxpbmVzLG5jb2xzIiwmbmxpbmVzLCZuY29scykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaWk7bmxpbmVzLG5jb2xzLGJlZ2luX3ksYmVnaW5feCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmxpbmVzLCZuY29scywmYmVnaW5feSwmYmVnaW5feCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIm5ld3dpbiByZXF1aXJlcyAyIG9yIDQgYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgd2luID0gbmV3d2luKG5saW5lcyxuY29scyxiZWdpbl95LGJlZ2luX3gpOwotICAgICAgICAgICAgaWYgKHdpbiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIHdpbiA9IG5ld3dpbihubGluZXMsbmNvbHMsYmVnaW5feSxiZWdpbl94KTsKKyAgICBpZiAod2luID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsIGNhdGNoYWxsX05VTEwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKLSAgICAgICAgfQorICAgIHJldHVybiAoUHlPYmplY3QgKilQeUN1cnNlc1dpbmRvd19OZXcod2luKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfUGFpcl9Db250ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgc2hvcnQgcGFpcixmLGI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUGFpcl9Db250ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBzaG9ydCBwYWlyLGYsYjsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgc3dpdGNoKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgICAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJoO3BhaXIiLCAmcGFpcikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicGFpcl9jb250ZW50IHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaDtwYWlyIiwgJnBhaXIpKSByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBhaXJfY29udGVudCByZXF1aXJlcyAxIGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgaWYgKHBhaXJfY29udGVudChwYWlyLCAmZiwgJmIpPT1FUlIpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IDEgd2FzIG91dCBvZiByYW5nZS4gKDEuLkNPTE9SX1BBSVJTLTEpIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHBhaXJfY29udGVudChwYWlyLCAmZiwgJmIpPT1FUlIpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQXJndW1lbnQgMSB3YXMgb3V0IG9mIHJhbmdlLiAoMS4uQ09MT1JfUEFJUlMtMSkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGYsIGIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmLCBiKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfcGFpcl9udW1iZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgbjsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc19wYWlyX251bWJlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG47CiAKLSAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQKLSAgICAgICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkQ29sb3IKKyAgICBQeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcjsKIAotICAgICAgICAgICAgICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtwYWlydmFsdWUiLCAmbikpIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhaXJfbnVtYmVyIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTtwYWlydmFsdWUiLCAmbikpIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBhaXJfbnVtYmVyIHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSAoKG4gJiBBX0NPTE9SKSA+PiA4KSk7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSAoKG4gJiBBX0NPTE9SKSA+PiA4KSk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1B1dHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpzdHI7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfUHV0cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqc3RyOwogCi0gICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywicztzdHIiLCAmc3RyKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUihwdXRwKHN0ciksICJwdXRwIik7Ci0gICAgICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywicztzdHIiLCAmc3RyKSkgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIocHV0cChzdHIpLCAicHV0cCIpOworfQogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19RaUZsdXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZsYWcgPSAwOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1FpRmx1c2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmbGFnID0gMDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgICAgICBxaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7VHJ1ZSgxKSBvciBGYWxzZSgwKSIsICZmbGFnKSkgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChmbGFnKSBxaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2Ugbm9xaWZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInFpZmx1c2ggcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7CisgICAgY2FzZSAwOgorICAgICAgICBxaWZsdXNoKCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk7VHJ1ZSgxKSBvciBGYWxzZSgwKSIsICZmbGFnKSkgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChmbGFnKSBxaWZsdXNoKCk7CisgICAgICAgIGVsc2Ugbm9xaWZsdXNoKCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInFpZmx1c2ggcmVxdWlyZXMgMCBvciAxIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKIC8qIEludGVybmFsIGhlbHBlciB1c2VkIGZvciB1cGRhdGluZyBjdXJzZXMuTElORVMsIGN1cnNlcy5DT0xTLCBfY3Vyc2VzLkxJTkVTCiAgKiBhbmQgX2N1cnNlcy5DT0xTICovCiAjaWYgZGVmaW5lZChIQVZFX0NVUlNFU19SRVNJWkVURVJNKSB8fCBkZWZpbmVkKEhBVkVfQ1VSU0VTX1JFU0laRV9URVJNKQotICAgICAgICBzdGF0aWMgaW50Ci0gICAgICAgICAgICB1cGRhdGVfbGluZXNfY29scyh2b2lkKQotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqbzsKLSAgICAgICAgICAgIFB5T2JqZWN0ICptID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygiY3Vyc2VzIik7CitzdGF0aWMgaW50Cit1cGRhdGVfbGluZXNfY29scyh2b2lkKQoreworICAgIFB5T2JqZWN0ICpvOworICAgIFB5T2JqZWN0ICptID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaygiY3Vyc2VzIik7CiAKLSAgICAgICAgICAgIGlmICghbSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW0pCisgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBvID0gUHlMb25nX0Zyb21Mb25nKExJTkVTKTsKLSAgICAgICAgICAgIGlmICghbykgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKG0sICJMSU5FUyIsIG8pKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiTElORVMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICBvID0gUHlMb25nX0Zyb21Mb25nKENPTFMpOwotICAgICAgICAgICAgaWYgKCFvKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG0pOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcobSwgIkNPTFMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoTW9kRGljdCwgIkNPTFMiLCBvKSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYobyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobSk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQorICAgIG8gPSBQeUxvbmdfRnJvbUxvbmcoTElORVMpOworICAgIGlmICghbykgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhtLCAiTElORVMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiTElORVMiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFB5X0RFQ1JFRihvKTsKKyAgICBvID0gUHlMb25nX0Zyb21Mb25nKENPTFMpOworICAgIGlmICghbykgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhtLCAiQ09MUyIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xTIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBQeV9ERUNSRUYobyk7CisgICAgUHlfREVDUkVGKG0pOworICAgIHJldHVybiAxOworfQogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0NVUlNFU19SRVNJWkVURVJNCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19SZXNpemVUZXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGxpbmVzOwotICAgICAgICAgICAgaW50IGNvbHVtbnM7Ci0gICAgICAgICAgICBQeU9iamVjdCAqcmVzdWx0Oworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1Jlc2l6ZVRlcm0oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBsaW5lczsKKyAgICBpbnQgY29sdW1uczsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTpyZXNpemV0ZXJtIiwgJmxpbmVzLCAmY29sdW1ucykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpaTpyZXNpemV0ZXJtIiwgJmxpbmVzLCAmY29sdW1ucykpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXN1bHQgPSBQeUN1cnNlc0NoZWNrRVJSKHJlc2l6ZXRlcm0obGluZXMsIGNvbHVtbnMpLCAicmVzaXpldGVybSIpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICBpZiAoIXVwZGF0ZV9saW5lc19jb2xzKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9CisgICAgcmVzdWx0ID0gUHlDdXJzZXNDaGVja0VSUihyZXNpemV0ZXJtKGxpbmVzLCBjb2x1bW5zKSwgInJlc2l6ZXRlcm0iKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCF1cGRhdGVfbGluZXNfY29scygpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJNCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19SZXNpemVfVGVybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBsaW5lczsKLSAgICAgICAgICAgIGludCBjb2x1bW5zOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1Jlc2l6ZV9UZXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgbGluZXM7CisgICAgaW50IGNvbHVtbnM7CiAKLSAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWk6cmVzaXplX3Rlcm0iLCAmbGluZXMsICZjb2x1bW5zKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpOnJlc2l6ZV90ZXJtIiwgJmxpbmVzLCAmY29sdW1ucykpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXN1bHQgPSBQeUN1cnNlc0NoZWNrRVJSKHJlc2l6ZV90ZXJtKGxpbmVzLCBjb2x1bW5zKSwgInJlc2l6ZV90ZXJtIik7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICghdXBkYXRlX2xpbmVzX2NvbHMoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KKyAgICByZXN1bHQgPSBQeUN1cnNlc0NoZWNrRVJSKHJlc2l6ZV90ZXJtKGxpbmVzLCBjb2x1bW5zKSwgInJlc2l6ZV90ZXJtIik7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghdXBkYXRlX2xpbmVzX2NvbHMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KICNlbmRpZiAvKiBIQVZFX0NVUlNFU19SRVNJWkVfVEVSTSAqLwogCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19zZXRzeXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgeSx4Oworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3NldHN5eChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IHkseDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlUdXBsZV9TaXplKGFyZ3MpIT0yKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzZXRzeXggcmVxdWlyZXMgMiBhcmd1bWVudHMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykhPTIpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInNldHN5eCByZXF1aXJlcyAyIGFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk7eSwgeCIsICZ5LCAmeCkpIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWk7eSwgeCIsICZ5LCAmeCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBzZXRzeXgoeSx4KTsKKyAgICBzZXRzeXgoeSx4KTsKIAotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgIH0KKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1N0YXJ0X0NvbG9yKFB5T2JqZWN0ICpzZWxmKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgY29kZTsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjLCAqY3A7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfU3RhcnRfQ29sb3IoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IGNvZGU7CisgICAgUHlPYmplY3QgKmMsICpjcDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBjb2RlID0gc3RhcnRfY29sb3IoKTsKLSAgICAgICAgICAgIGlmIChjb2RlICE9IEVSUikgewotICAgICAgICAgICAgICAgIGluaXRpYWxpc2VkY29sb3JzID0gVFJVRTsKLSAgICAgICAgICAgICAgICBjID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBDT0xPUlMpOwotICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xPUlMiLCBjKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYyk7Ci0gICAgICAgICAgICAgICAgY3AgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIENPTE9SX1BBSVJTKTsKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JfUEFJUlMiLCBjcCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGNwKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAic3RhcnRfY29sb3IoKSByZXR1cm5lZCBFUlIiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgIGNvZGUgPSBzdGFydF9jb2xvcigpOworICAgIGlmIChjb2RlICE9IEVSUikgeworICAgICAgICBpbml0aWFsaXNlZGNvbG9ycyA9IFRSVUU7CisgICAgICAgIGMgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIENPTE9SUyk7CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKE1vZERpY3QsICJDT0xPUlMiLCBjKTsKKyAgICAgICAgUHlfREVDUkVGKGMpOworICAgICAgICBjcCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgQ09MT1JfUEFJUlMpOworICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhNb2REaWN0LCAiQ09MT1JfUEFJUlMiLCBjcCk7CisgICAgICAgIFB5X0RFQ1JFRihjcCk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5Q3Vyc2VzRXJyb3IsICJzdGFydF9jb2xvcigpIHJldHVybmVkIEVSUiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3RpZ2V0ZmxhZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgKmNhcG5hbWU7CitzdGF0aWMgUHlPYmplY3QgKgorUHlDdXJzZXNfdGlnZXRmbGFnKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjYXBuYW1lOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoIChsb25nKSB0aWdldGZsYWcoIGNhcG5hbWUgKSApOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyggKGxvbmcpIHRpZ2V0ZmxhZyggY2FwbmFtZSApICk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3RpZ2V0bnVtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciAqY2FwbmFtZTsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc190aWdldG51bShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqY2FwbmFtZTsKIAotICAgICAgICAgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CisgICAgUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7CiAKLSAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmY2FwbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCAobG9uZykgdGlnZXRudW0oIGNhcG5hbWUgKSApOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyggKGxvbmcpIHRpZ2V0bnVtKCBjYXBuYW1lICkgKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfdGlnZXRzdHIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjaGFyICpjYXBuYW1lOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX3RpZ2V0c3RyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpjYXBuYW1lOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmNhcG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZjYXBuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGNhcG5hbWUgPSB0aWdldHN0ciggY2FwbmFtZSApOwotICAgICAgICAgICAgaWYgKGNhcG5hbWUgPT0gMCB8fCBjYXBuYW1lID09IChjaGFyKikgLTEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCBjYXBuYW1lICk7Ci0gICAgICAgIH0KKyAgICBjYXBuYW1lID0gdGlnZXRzdHIoIGNhcG5hbWUgKTsKKyAgICBpZiAoY2FwbmFtZSA9PSAwIHx8IGNhcG5hbWUgPT0gKGNoYXIqKSAtMSkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKyAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCBjYXBuYW1lICk7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX3RwYXJtKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgY2hhciogZm10OwotICAgICAgICAgICAgY2hhciogcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgICAgIGludCBpMT0wLGkyPTAsaTM9MCxpND0wLGk1PTAsaTY9MCxpNz0wLGk4PTAsaTk9MDsKK3N0YXRpYyBQeU9iamVjdCAqCitQeUN1cnNlc190cGFybShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciogZm10OworICAgIGNoYXIqIHJlc3VsdCA9IE5VTEw7CisgICAgaW50IGkxPTAsaTI9MCxpMz0wLGk0PTAsaTU9MCxpNj0wLGk3PTAsaTg9MCxpOT0wOwogCi0gICAgICAgICAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKKyAgICBQeUN1cnNlc1NldHVwVGVybUNhbGxlZDsKIAotICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzfGlpaWlpaWlpaTp0cGFybSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZtdCwgJmkxLCAmaTIsICZpMywgJmk0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpNSwgJmk2LCAmaTcsICZpOCwgJmk5KSkgewotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xpaWlpaWlpaWk6dHBhcm0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZm10LCAmaTEsICZpMiwgJmkzLCAmaTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZpNSwgJmk2LCAmaTcsICZpOCwgJmk5KSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJlc3VsdCA9IHRwYXJtKGZtdCxpMSxpMixpMyxpNCxpNSxpNixpNyxpOCxpOSk7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidHBhcm0oKSByZXR1cm5lZCBOVUxMIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9CisgICAgcmVzdWx0ID0gdHBhcm0oZm10LGkxLGkyLGkzLGk0LGk1LGk2LGk3LGk4LGk5KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgInRwYXJtKCkgcmV0dXJuZWQgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcocmVzdWx0KTsKLSAgICAgICAgfQorICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcocmVzdWx0KTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVHlwZUFoZWFkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZkOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1R5cGVBaGVhZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGZkOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO2ZkIiwmZmQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaTtmZCIsJmZkKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIHJldHVybiBQeUN1cnNlc0NoZWNrRVJSKHR5cGVhaGVhZCggZmQgKSwgInR5cGVhaGVhZCIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodHlwZWFoZWFkKCBmZCApLCAidHlwZWFoZWFkIik7Cit9CiAKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKLSAgICAgICAgICAgIFB5Q3Vyc2VzX1VuQ3RybChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotICAgICAgICAgICAgY2h0eXBlIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VuQ3RybChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnRlbXA7CisgICAgY2h0eXBlIGNoOwogCi0gICAgICAgICAgICBQeUN1cnNlc0luaXRpYWxpc2VkCisgICAgUHlDdXJzZXNJbml0aWFsaXNlZDsKIAotICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJPO2NoIG9yIGludCIsJnRlbXApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIGlmICghUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKHRlbXAsICZjaCkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnQgbXVzdCBiZSBhIGNoIG9yIGFuIGludCIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgIGlmICghUHlDdXJzZXNfQ29udmVydFRvQ2h0eXBlKHRlbXAsICZjaCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKHVuY3RybChjaCkpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZyh1bmN0cmwoY2gpKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVW5nZXRDaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wOwotICAgICAgICAgICAgY2h0eXBlIGNoOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VuZ2V0Q2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp0ZW1wOworICAgIGNodHlwZSBjaDsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CiAKLSAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiTztjaCBvciBpbnQiLCZ0ZW1wKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIk87Y2ggb3IgaW50IiwmdGVtcCkpIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAoIVB5Q3Vyc2VzX0NvbnZlcnRUb0NodHlwZSh0ZW1wLCAmY2gpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFyZ3VtZW50IG11c3QgYmUgYSBjaCBvciBhbiBpbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICBpZiAoIVB5Q3Vyc2VzX0NvbnZlcnRUb0NodHlwZSh0ZW1wLCAmY2gpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudCBtdXN0IGJlIGEgY2ggb3IgYW4gaW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgICAgICAgICAgcmV0dXJuIFB5Q3Vyc2VzQ2hlY2tFUlIodW5nZXRjaChjaCksICJ1bmdldGNoIik7Ci0gICAgICAgIH0KKyAgICByZXR1cm4gUHlDdXJzZXNDaGVja0VSUih1bmdldGNoKGNoKSwgInVuZ2V0Y2giKTsKK30KIAotICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgotICAgICAgICAgICAgUHlDdXJzZXNfVXNlX0VudihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBmbGFnOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VzZV9FbnYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmbGFnOwogCi0gICAgICAgICAgICBzd2l0Y2goUHlUdXBsZV9TaXplKGFyZ3MpKSB7Ci0gICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7VHJ1ZSgxKSwgRmFsc2UoMCkiLCZmbGFnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ1c2VfZW52IHJlcXVpcmVzIDEgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZV9lbnYoZmxhZyk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgfQorICAgIHN3aXRjaChQeVR1cGxlX1NpemUoYXJncykpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO1RydWUoMSksIEZhbHNlKDApIiwmZmxhZykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVzZV9lbnYgcmVxdWlyZXMgMSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdXNlX2VudihmbGFnKTsKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CiAKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCi0gICAgICAgICAgICBQeUN1cnNlc19Vc2VfRGVmYXVsdF9Db2xvcnMoUHlPYmplY3QgKnNlbGYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGludCBjb2RlOworc3RhdGljIFB5T2JqZWN0ICoKK1B5Q3Vyc2VzX1VzZV9EZWZhdWx0X0NvbG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBpbnQgY29kZTsKIAotICAgICAgICAgICAgUHlDdXJzZXNJbml0aWFsaXNlZAotICAgICAgICAgICAgICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWRDb2xvcgorICAgIFB5Q3Vyc2VzSW5pdGlhbGlzZWQ7CisgICAgUHlDdXJzZXNJbml0aWFsaXNlZENvbG9yOwogCi0gICAgICAgICAgICAgICAgY29kZSA9IHVzZV9kZWZhdWx0X2NvbG9ycygpOwotICAgICAgICAgICAgaWYgKGNvZGUgIT0gRVJSKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlDdXJzZXNFcnJvciwgInVzZV9kZWZhdWx0X2NvbG9ycygpIHJldHVybmVkIEVSUiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgY29kZSA9IHVzZV9kZWZhdWx0X2NvbG9ycygpOworICAgIGlmIChjb2RlICE9IEVSUikgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCAidXNlX2RlZmF1bHRfY29sb3JzKCkgcmV0dXJuZWQgRVJSIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KICNlbmRpZiAvKiBTVFJJQ1RfU1lTVl9DVVJTRVMgKi8KIAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlICovCiAKLSAgICAgICAgc3RhdGljIFB5TWV0aG9kRGVmIFB5Q3Vyc2VzX21ldGhvZHNbXSA9IHsKLSAgICAgICAgICAgIHsiYmF1ZHJhdGUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19iYXVkcmF0ZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJiZWVwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JlZXAsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiY2FuX2NoYW5nZV9jb2xvciIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYW5fY2hhbmdlX2NvbG9yLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImNicmVhayIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY2JyZWFrLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJjb2xvcl9jb250ZW50IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImNvbG9yX3BhaXIiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY29sb3JfcGFpciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiY3Vyc19zZXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19DdXJzX1NldCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiZGVmX3Byb2dfbW9kZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kZWZfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImRlZl9zaGVsbF9tb2RlIiwgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZGVmX3NoZWxsX21vZGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZGVsYXlfb3V0cHV0IiwgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19EZWxheV9PdXRwdXQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7ImRvdXBkYXRlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZG91cGRhdGUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZWNobyIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19lY2hvLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJlbmR3aW4iLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2VuZHdpbiwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJlcmFzZWNoYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0VyYXNlQ2hhciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJmaWx0ZXIiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2ZpbHRlciwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJmbGFzaCIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2ZsYXNoLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImZsdXNoaW5wIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmx1c2hpbnAsIE1FVEhfTk9BUkdTfSwKK3N0YXRpYyBQeU1ldGhvZERlZiBQeUN1cnNlc19tZXRob2RzW10gPSB7CisgICAgeyJiYXVkcmF0ZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JhdWRyYXRlLCBNRVRIX05PQVJHU30sCisgICAgeyJiZWVwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2JlZXAsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImNhbl9jaGFuZ2VfY29sb3IiLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfY2FuX2NoYW5nZV9jb2xvciwgTUVUSF9OT0FSR1N9LAorICAgIHsiY2JyZWFrIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19jYnJlYWssIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2xvcl9jb250ZW50IiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0NvbG9yX0NvbnRlbnQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2xvcl9wYWlyIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2NvbG9yX3BhaXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJjdXJzX3NldCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0N1cnNfU2V0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZGVmX3Byb2dfbW9kZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19kZWZfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZWZfc2hlbGxfbW9kZSIsICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2RlZl9zaGVsbF9tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJkZWxheV9vdXRwdXQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0RlbGF5X091dHB1dCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImRvdXBkYXRlIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZG91cGRhdGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImVjaG8iLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZWNobywgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImVuZHdpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZW5kd2luLCBNRVRIX05PQVJHU30sCisgICAgeyJlcmFzZWNoYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0VyYXNlQ2hhciwgTUVUSF9OT0FSR1N9LAorICAgIHsiZmlsdGVyIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19maWx0ZXIsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImZsYXNoIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmxhc2gsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImZsdXNoaW5wIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfZmx1c2hpbnAsIE1FVEhfTk9BUkdTfSwKICNpZmRlZiBOQ1VSU0VTX01PVVNFX1ZFUlNJT04KLSAgICAgICAgICAgIHsiZ2V0bW91c2UiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19HZXRNb3VzZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ1bmdldG1vdXNlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0TW91c2UsIE1FVEhfVkFSQVJHU30sCisgICAgeyJnZXRtb3VzZSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0dldE1vdXNlLCBNRVRIX05PQVJHU30sCisgICAgeyJ1bmdldG1vdXNlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0TW91c2UsIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsiZ2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19nZXRzeXgsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsiZ2V0d2luIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19HZXRXaW4sIE1FVEhfT30sCi0gICAgICAgICAgICB7Imhhc19jb2xvcnMiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2NvbG9ycywgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJoYXNfaWMiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pYywgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJoYXNfaWwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pbCwgTUVUSF9OT0FSR1N9LAorICAgIHsiZ2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19nZXRzeXgsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImdldHdpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfR2V0V2luLCBNRVRIX099LAorICAgIHsiaGFzX2NvbG9ycyIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfY29sb3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJoYXNfaWMiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2hhc19pYywgTUVUSF9OT0FSR1N9LAorICAgIHsiaGFzX2lsIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19oYXNfaWwsIE1FVEhfTk9BUkdTfSwKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgICAgICB7Imhhc19rZXkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2tleSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Imhhc19rZXkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaGFzX2tleSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJoYWxmZGVsYXkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0hhbGZEZWxheSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5pdF9jb2xvciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0X0NvbG9yLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpbml0X3BhaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0luaXRfUGFpciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsiaW5pdHNjciIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0U2NyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImludHJmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW50ckZsdXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJpc2VuZHdpbiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX2lzZW5kd2luLCBNRVRIX05PQVJHU30sCisgICAgeyJoYWxmZGVsYXkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0hhbGZEZWxheSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluaXRfY29sb3IiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW5pdF9Db2xvciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImluaXRfcGFpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfSW5pdF9QYWlyLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaW5pdHNjciIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jbml0U2NyLCBNRVRIX05PQVJHU30sCisgICAgeyJpbnRyZmx1c2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0ludHJGbHVzaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImlzZW5kd2luIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfaXNlbmR3aW4sIE1FVEhfTk9BUkdTfSwKICNpZmRlZiBIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQKLSAgICAgICAgICAgIHsiaXNfdGVybV9yZXNpemVkIiwgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Jc19UZXJtX1Jlc2l6ZWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJpc190ZXJtX3Jlc2l6ZWQiLCAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0lzX1Rlcm1fUmVzaXplZCwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgICAgICB7ImtleW5hbWUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfS2V5TmFtZSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImtleW5hbWUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfS2V5TmFtZSwgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgICAgICAgICAgeyJraWxsY2hhciIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX0tpbGxDaGFyLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7ImxvbmduYW1lIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbG9uZ25hbWUsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsibWV0YSIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19NZXRhLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsia2lsbGNoYXIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19LaWxsQ2hhciwgTUVUSF9OT0FSR1N9LAorICAgIHsibG9uZ25hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19sb25nbmFtZSwgTUVUSF9OT0FSR1N9LAorICAgIHsibWV0YSIsICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19NZXRhLCBNRVRIX1ZBUkFSR1N9LAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgeyJtb3VzZWludGVydmFsIiwgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX01vdXNlSW50ZXJ2YWwsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im1vdXNlbWFzayIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTW91c2VNYXNrLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibW91c2VpbnRlcnZhbCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Nb3VzZUludGVydmFsLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibW91c2VtYXNrIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19Nb3VzZU1hc2ssIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsibmFwbXMiLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OYXBtcywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsibmV3cGFkIiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19OZXdQYWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7Im5ld3dpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmV3V2luZG93LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJubCIsICAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25sLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJub2NicmVhayIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vY2JyZWFrLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vZWNobyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9lY2hvLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7Im5vbmwiLCAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9ubCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJub3FpZmx1c2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcWlmbHVzaCwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJub3JhdyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcmF3LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InBhaXJfY29udGVudCIsICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUGFpcl9Db250ZW50LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJwYWlyX251bWJlciIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3BhaXJfbnVtYmVyLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJwdXRwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1B1dHAsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InFpZmx1c2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUWlGbHVzaCwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsicmF3IiwgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19yYXcsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InJlc2V0X3Byb2dfbW9kZSIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InJlc2V0X3NoZWxsX21vZGUiLCAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfc2hlbGxfbW9kZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJyZXNldHR5IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Jlc2V0dHksIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5hcG1zIiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmFwbXMsIE1FVEhfVkFSQVJHU30sCisgICAgeyJuZXdwYWQiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX05ld1BhZCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5ld3dpbiIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfTmV3V2luZG93LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsibmwiLCAgICAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19ubCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Im5vY2JyZWFrIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9jYnJlYWssIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vZWNobyIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9lY2hvLCBNRVRIX05PQVJHU30sCisgICAgeyJub25sIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vbmwsIE1FVEhfTk9BUkdTfSwKKyAgICB7Im5vcWlmbHVzaCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfbm9xaWZsdXNoLCBNRVRIX05PQVJHU30sCisgICAgeyJub3JhdyIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX25vcmF3LCBNRVRIX05PQVJHU30sCisgICAgeyJwYWlyX2NvbnRlbnQiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1BhaXJfQ29udGVudCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InBhaXJfbnVtYmVyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcGFpcl9udW1iZXIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJwdXRwIiwgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1B1dHAsIE1FVEhfVkFSQVJHU30sCisgICAgeyJxaWZsdXNoIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1FpRmx1c2gsIE1FVEhfVkFSQVJHU30sCisgICAgeyJyYXciLCAgICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3JhdywgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlc2V0X3Byb2dfbW9kZSIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXRfcHJvZ19tb2RlLCBNRVRIX05PQVJHU30sCisgICAgeyJyZXNldF9zaGVsbF9tb2RlIiwgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3Jlc2V0X3NoZWxsX21vZGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InJlc2V0dHkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfcmVzZXR0eSwgTUVUSF9OT0FSR1N9LAogI2lmZGVmIEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0KLSAgICAgICAgICAgIHsicmVzaXpldGVybSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVUZXJtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicmVzaXpldGVybSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVUZXJtLCBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0KLSAgICAgICAgICAgIHsicmVzaXplX3Rlcm0iLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19SZXNpemVfVGVybSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InJlc2l6ZV90ZXJtIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfUmVzaXplX1Rlcm0sIE1FVEhfVkFSQVJHU30sCiAjZW5kaWYKLSAgICAgICAgICAgIHsic2F2ZXR0eSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zYXZldHR5LCBNRVRIX05PQVJHU30sCi0gICAgICAgICAgICB7InNldHN5eCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2V0c3l4LCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJzZXR1cHRlcm0iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NldHVwdGVybSwKLSAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCi0gICAgICAgICAgICB7InN0YXJ0X2NvbG9yIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfU3RhcnRfQ29sb3IsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidGVybWF0dHJzIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtYXR0cnMsIE1FVEhfTk9BUkdTfSwKLSAgICAgICAgICAgIHsidGVybW5hbWUiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtbmFtZSwgTUVUSF9OT0FSR1N9LAotICAgICAgICAgICAgeyJ0aWdldGZsYWciLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RpZ2V0ZmxhZywgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidGlnZXRudW0iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldG51bSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidGlnZXRzdHIiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldHN0ciwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidHBhcm0iLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190cGFybSwgTUVUSF9WQVJBUkdTfSwKLSAgICAgICAgICAgIHsidHlwZWFoZWFkIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19UeXBlQWhlYWQsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InVuY3RybCIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5DdHJsLCBNRVRIX1ZBUkFSR1N9LAotICAgICAgICAgICAgeyJ1bmdldGNoIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuZ2V0Q2gsIE1FVEhfVkFSQVJHU30sCi0gICAgICAgICAgICB7InVzZV9lbnYiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0VudiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InNhdmV0dHkiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfc2F2ZXR0eSwgTUVUSF9OT0FSR1N9LAorICAgIHsic2V0c3l4IiwgICAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19zZXRzeXgsIE1FVEhfVkFSQVJHU30sCisgICAgeyJzZXR1cHRlcm0iLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3NldHVwdGVybSwKKyAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAorICAgIHsic3RhcnRfY29sb3IiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19TdGFydF9Db2xvciwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVybWF0dHJzIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190ZXJtYXR0cnMsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlcm1uYW1lIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGVybW5hbWUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRpZ2V0ZmxhZyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGlnZXRmbGFnLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidGlnZXRudW0iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc190aWdldG51bSwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InRpZ2V0c3RyIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfdGlnZXRzdHIsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0cGFybSIsICAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX3RwYXJtLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsidHlwZWFoZWFkIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc19UeXBlQWhlYWQsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ1bmN0cmwiLCAgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VuQ3RybCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVuZ2V0Y2giLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVW5nZXRDaCwgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVzZV9lbnYiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0VudiwgTUVUSF9WQVJBUkdTfSwKICNpZm5kZWYgU1RSSUNUX1NZU1ZfQ1VSU0VTCi0gICAgICAgICAgICB7InVzZV9kZWZhdWx0X2NvbG9ycyIsICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNfVXNlX0RlZmF1bHRfQ29sb3JzLCBNRVRIX05PQVJHU30sCisgICAgeyJ1c2VfZGVmYXVsdF9jb2xvcnMiLCAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzX1VzZV9EZWZhdWx0X0NvbG9ycywgTUVUSF9OT0FSR1N9LAogI2VuZGlmCi0gICAgICAgICAgICB7TlVMTCwgICAgICAgICAgICAgICAgICBOVUxMfSAgICAgICAgIC8qIHNlbnRpbmVsICovCi0gICAgICAgIH07CisgICAge05VTEwsICAgICAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKIAogLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKi8KIAogCi0gICAgICAgIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2N1cnNlc21vZHVsZSA9IHsKLSAgICAgICAgICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAgICAgICAgICJfY3Vyc2VzIiwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAtMSwKLSAgICAgICAgICAgIFB5Q3Vyc2VzX21ldGhvZHMsCi0gICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxMCi0gICAgICAgIH07CitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9jdXJzZXNtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfY3Vyc2VzIiwKKyAgICBOVUxMLAorICAgIC0xLAorICAgIFB5Q3Vyc2VzX21ldGhvZHMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKIAotICAgICAgICBQeU1PRElOSVRfRlVOQwotICAgICAgICAgICAgUHlJbml0X19jdXJzZXModm9pZCkKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKm0sICpkLCAqdiwgKmNfYXBpX29iamVjdDsKLSAgICAgICAgICAgIHN0YXRpYyB2b2lkICpQeUN1cnNlc19BUElbUHlDdXJzZXNfQVBJX3BvaW50ZXJzXTsKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX2N1cnNlcyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptLCAqZCwgKnYsICpjX2FwaV9vYmplY3Q7CisgICAgc3RhdGljIHZvaWQgKlB5Q3Vyc2VzX0FQSVtQeUN1cnNlc19BUElfcG9pbnRlcnNdOwogCi0gICAgICAgICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlICovCi0gICAgICAgICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeUN1cnNlc1dpbmRvd19UeXBlKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZSAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5Q3Vyc2VzV2luZG93X1R5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIEMgQVBJIHBvaW50ZXIgYXJyYXkgKi8KLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVswXSA9ICh2b2lkICopJlB5Q3Vyc2VzV2luZG93X1R5cGU7Ci0gICAgICAgICAgICBQeUN1cnNlc19BUElbMV0gPSAodm9pZCAqKWZ1bmNfUHlDdXJzZXNTZXR1cFRlcm1DYWxsZWQ7Ci0gICAgICAgICAgICBQeUN1cnNlc19BUElbMl0gPSAodm9pZCAqKWZ1bmNfUHlDdXJzZXNJbml0aWFsaXNlZDsKLSAgICAgICAgICAgIFB5Q3Vyc2VzX0FQSVszXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CisgICAgLyogSW5pdGlhbGl6ZSB0aGUgQyBBUEkgcG9pbnRlciBhcnJheSAqLworICAgIFB5Q3Vyc2VzX0FQSVswXSA9ICh2b2lkICopJlB5Q3Vyc2VzV2luZG93X1R5cGU7CisgICAgUHlDdXJzZXNfQVBJWzFdID0gKHZvaWQgKilmdW5jX1B5Q3Vyc2VzU2V0dXBUZXJtQ2FsbGVkOworICAgIFB5Q3Vyc2VzX0FQSVsyXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkOworICAgIFB5Q3Vyc2VzX0FQSVszXSA9ICh2b2lkICopZnVuY19QeUN1cnNlc0luaXRpYWxpc2VkQ29sb3I7CiAKLSAgICAgICAgICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLwotICAgICAgICAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX2N1cnNlc21vZHVsZSk7Ci0gICAgICAgICAgICBpZiAobSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9jdXJzZXNtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotICAgICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgICAgICBpZiAoZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgTW9kRGljdCA9IGQ7IC8qIEZvciBQeUN1cnNlc19Jbml0U2NyIHRvIHVzZSBsYXRlciAqLworICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCisgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisgICAgaWYgKGQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgTW9kRGljdCA9IGQ7IC8qIEZvciBQeUN1cnNlc19Jbml0U2NyIHRvIHVzZSBsYXRlciAqLwogCi0gICAgICAgICAgICAvKiBBZGQgYSBjYXBzdWxlIGZvciB0aGUgQyBBUEkgKi8KLSAgICAgICAgICAgIGNfYXBpX29iamVjdCA9IFB5Q2Fwc3VsZV9OZXcoUHlDdXJzZXNfQVBJLCBQeUN1cnNlc19DQVBTVUxFX05BTUUsIE5VTEwpOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9DX0FQSSIsIGNfYXBpX29iamVjdCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoY19hcGlfb2JqZWN0KTsKKyAgICAvKiBBZGQgYSBjYXBzdWxlIGZvciB0aGUgQyBBUEkgKi8KKyAgICBjX2FwaV9vYmplY3QgPSBQeUNhcHN1bGVfTmV3KFB5Q3Vyc2VzX0FQSSwgUHlDdXJzZXNfQ0FQU1VMRV9OQU1FLCBOVUxMKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX0NfQVBJIiwgY19hcGlfb2JqZWN0KTsKKyAgICBQeV9ERUNSRUYoY19hcGlfb2JqZWN0KTsKIAotICAgICAgICAgICAgLyogRm9yIGV4Y2VwdGlvbiBjdXJzZXMuZXJyb3IgKi8KLSAgICAgICAgICAgIFB5Q3Vyc2VzRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9jdXJzZXMuZXJyb3IiLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsIFB5Q3Vyc2VzRXJyb3IpOworICAgIC8qIEZvciBleGNlcHRpb24gY3Vyc2VzLmVycm9yICovCisgICAgUHlDdXJzZXNFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX2N1cnNlcy5lcnJvciIsIE5VTEwsIE5VTEwpOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsIFB5Q3Vyc2VzRXJyb3IpOwogCi0gICAgICAgICAgICAvKiBNYWtlIHRoZSB2ZXJzaW9uIGF2YWlsYWJsZSAqLwotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhQeUN1cnNlc1ZlcnNpb24pOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInZlcnNpb24iLCB2KTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX3ZlcnNpb25fXyIsIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgIC8qIE1ha2UgdGhlIHZlcnNpb24gYXZhaWxhYmxlICovCisgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhQeUN1cnNlc1ZlcnNpb24pOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJ2ZXJzaW9uIiwgdik7CisgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIl9fdmVyc2lvbl9fIiwgdik7CisgICAgUHlfREVDUkVGKHYpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJFUlIiLCBFUlIpOwotICAgICAgICAgICAgU2V0RGljdEludCgiT0siLCBPSyk7CisgICAgU2V0RGljdEludCgiRVJSIiwgRVJSKTsKKyAgICBTZXREaWN0SW50KCJPSyIsIE9LKTsKIAotICAgICAgICAgICAgLyogSGVyZSBhcmUgc29tZSBhdHRyaWJ1dGVzIHlvdSBjYW4gYWRkIHRvIGNoYXJzIHRvIHByaW50ICovCisgICAgLyogSGVyZSBhcmUgc29tZSBhdHRyaWJ1dGVzIHlvdSBjYW4gYWRkIHRvIGNoYXJzIHRvIHByaW50ICovCiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQVRUUklCVVRFUyIsICAgICAgQV9BVFRSSUJVVEVTKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfTk9STUFMIiwgICAgICAgICAgICAgIEFfTk9STUFMKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfU1RBTkRPVVQiLCAgICAgICAgICAgIEFfU1RBTkRPVVQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9VTkRFUkxJTkUiLCAgICAgICAgICAgQV9VTkRFUkxJTkUpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9SRVZFUlNFIiwgICAgICAgICAgICAgQV9SRVZFUlNFKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQkxJTksiLCAgICAgICAgICAgICAgIEFfQkxJTkspOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9ESU0iLCAgICAgICAgICAgICAgICAgQV9ESU0pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQV9CT0xEIiwgICAgICAgICAgICAgICAgQV9CT0xEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQUxUQ0hBUlNFVCIsICAgICAgICAgIEFfQUxUQ0hBUlNFVCk7CisgICAgU2V0RGljdEludCgiQV9BVFRSSUJVVEVTIiwgICAgICBBX0FUVFJJQlVURVMpOworICAgIFNldERpY3RJbnQoIkFfTk9STUFMIiwgICAgICAgICAgICAgIEFfTk9STUFMKTsKKyAgICBTZXREaWN0SW50KCJBX1NUQU5ET1VUIiwgICAgICAgICAgICBBX1NUQU5ET1VUKTsKKyAgICBTZXREaWN0SW50KCJBX1VOREVSTElORSIsICAgICAgICAgICBBX1VOREVSTElORSk7CisgICAgU2V0RGljdEludCgiQV9SRVZFUlNFIiwgICAgICAgICAgICAgQV9SRVZFUlNFKTsKKyAgICBTZXREaWN0SW50KCJBX0JMSU5LIiwgICAgICAgICAgICAgICBBX0JMSU5LKTsKKyAgICBTZXREaWN0SW50KCJBX0RJTSIsICAgICAgICAgICAgICAgICBBX0RJTSk7CisgICAgU2V0RGljdEludCgiQV9CT0xEIiwgICAgICAgICAgICAgICAgQV9CT0xEKTsKKyAgICBTZXREaWN0SW50KCJBX0FMVENIQVJTRVQiLCAgICAgICAgICBBX0FMVENIQVJTRVQpOwogI2lmICFkZWZpbmVkKF9fTmV0QlNEX18pCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0lOVklTIiwgICAgICAgICAgIEFfSU5WSVMpOworICAgIFNldERpY3RJbnQoIkFfSU5WSVMiLCAgICAgICAgICAgQV9JTlZJUyk7CiAjZW5kaWYKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfUFJPVEVDVCIsICAgICAgICAgQV9QUk9URUNUKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfQ0hBUlRFWFQiLCAgICAgICAgQV9DSEFSVEVYVCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0NPTE9SIiwgICAgICAgICAgIEFfQ09MT1IpOworICAgIFNldERpY3RJbnQoIkFfUFJPVEVDVCIsICAgICAgICAgQV9QUk9URUNUKTsKKyAgICBTZXREaWN0SW50KCJBX0NIQVJURVhUIiwgICAgICAgIEFfQ0hBUlRFWFQpOworICAgIFNldERpY3RJbnQoIkFfQ09MT1IiLCAgICAgICAgICAgQV9DT0xPUik7CiAKLSAgICAgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLworICAgIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG5ldmVyIGF2YWlsYWJsZSB3aXRoIHN0cmljdCBTWVNWIGN1cnNlcyAqLwogI2lmZGVmIEFfSE9SSVpPTlRBTAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9IT1JJWk9OVEFMIiwgICAgICBBX0hPUklaT05UQUwpOworICAgIFNldERpY3RJbnQoIkFfSE9SSVpPTlRBTCIsICAgICAgQV9IT1JJWk9OVEFMKTsKICNlbmRpZgogI2lmZGVmIEFfTEVGVAotICAgICAgICAgICAgU2V0RGljdEludCgiQV9MRUZUIiwgICAgICAgICAgICBBX0xFRlQpOworICAgIFNldERpY3RJbnQoIkFfTEVGVCIsICAgICAgICAgICAgQV9MRUZUKTsKICNlbmRpZgogI2lmZGVmIEFfTE9XCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX0xPVyIsICAgICAgICAgICAgIEFfTE9XKTsKKyAgICBTZXREaWN0SW50KCJBX0xPVyIsICAgICAgICAgICAgIEFfTE9XKTsKICNlbmRpZgogI2lmZGVmIEFfUklHSFQKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfUklHSFQiLCAgICAgICAgICAgQV9SSUdIVCk7CisgICAgU2V0RGljdEludCgiQV9SSUdIVCIsICAgICAgICAgICBBX1JJR0hUKTsKICNlbmRpZgogI2lmZGVmIEFfVE9QCi0gICAgICAgICAgICBTZXREaWN0SW50KCJBX1RPUCIsICAgICAgICAgICAgIEFfVE9QKTsKKyAgICBTZXREaWN0SW50KCJBX1RPUCIsICAgICAgICAgICAgIEFfVE9QKTsKICNlbmRpZgogI2lmZGVmIEFfVkVSVElDQUwKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFfVkVSVElDQUwiLCAgICAgICAgQV9WRVJUSUNBTCk7CisgICAgU2V0RGljdEludCgiQV9WRVJUSUNBTCIsICAgICAgICBBX1ZFUlRJQ0FMKTsKICNlbmRpZgogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9CTEFDSyIsICAgICAgIENPTE9SX0JMQUNLKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX1JFRCIsICAgICAgICAgQ09MT1JfUkVEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX0dSRUVOIiwgICAgICAgQ09MT1JfR1JFRU4pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfWUVMTE9XIiwgICAgICBDT0xPUl9ZRUxMT1cpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfQkxVRSIsICAgICAgICBDT0xPUl9CTFVFKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkNPTE9SX01BR0VOVEEiLCAgICAgQ09MT1JfTUFHRU5UQSk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJDT0xPUl9DWUFOIiwgICAgICAgIENPTE9SX0NZQU4pOwotICAgICAgICAgICAgU2V0RGljdEludCgiQ09MT1JfV0hJVEUiLCAgICAgICBDT0xPUl9XSElURSk7CisgICAgU2V0RGljdEludCgiQ09MT1JfQkxBQ0siLCAgICAgICBDT0xPUl9CTEFDSyk7CisgICAgU2V0RGljdEludCgiQ09MT1JfUkVEIiwgICAgICAgICBDT0xPUl9SRUQpOworICAgIFNldERpY3RJbnQoIkNPTE9SX0dSRUVOIiwgICAgICAgQ09MT1JfR1JFRU4pOworICAgIFNldERpY3RJbnQoIkNPTE9SX1lFTExPVyIsICAgICAgQ09MT1JfWUVMTE9XKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9CTFVFIiwgICAgICAgIENPTE9SX0JMVUUpOworICAgIFNldERpY3RJbnQoIkNPTE9SX01BR0VOVEEiLCAgICAgQ09MT1JfTUFHRU5UQSk7CisgICAgU2V0RGljdEludCgiQ09MT1JfQ1lBTiIsICAgICAgICBDT0xPUl9DWUFOKTsKKyAgICBTZXREaWN0SW50KCJDT0xPUl9XSElURSIsICAgICAgIENPTE9SX1dISVRFKTsKIAogI2lmZGVmIE5DVVJTRVNfTU9VU0VfVkVSU0lPTgotICAgICAgICAgICAgLyogTW91c2UtcmVsYXRlZCBjb25zdGFudHMgKi8KLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjFfUFJFU1NFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04xX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04xX1JFTEVBU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjFfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04xX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04xX0RPVUJMRV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjFfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOworICAgIC8qIE1vdXNlLXJlbGF0ZWQgY29uc3RhbnRzICovCisgICAgU2V0RGljdEludCgiQlVUVE9OMV9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9OMV9QUkVTU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04xX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04xX1JFTEVBU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04xX0NMSUNLRUQiLCAgICAgICAgICBCVVRUT04xX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjFfRE9VQkxFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjFfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjFfVFJJUExFX0NMSUNLRUQpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX1BSRVNTRUQiLCAgICAgICAgICBCVVRUT04yX1BSRVNTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMl9SRUxFQVNFRCIsICAgICAgICAgQlVUVE9OMl9SRUxFQVNFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX0NMSUNLRUQiLCAgICAgICAgICBCVVRUT04yX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04yX1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT04yX1RSSVBMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04yX1BSRVNTRUQiLCAgICAgICAgICBCVVRUT04yX1BSRVNTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjJfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjJfUkVMRUFTRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjJfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjJfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9ET1VCTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9OMl9UUklQTEVfQ0xJQ0tFRCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjNfUFJFU1NFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04zX1JFTEVBU0VEIiwgICAgICAgICBCVVRUT04zX1JFTEVBU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfQ0xJQ0tFRCIsICAgICAgICAgIEJVVFRPTjNfQ0xJQ0tFRCk7Ci0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT04zX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjNfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjNfVFJJUExFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjNfUFJFU1NFRCIsICAgICAgICAgIEJVVFRPTjNfUFJFU1NFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OM19SRUxFQVNFRCIsICAgICAgICAgQlVUVE9OM19SRUxFQVNFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OM19DTElDS0VEIiwgICAgICAgICAgQlVUVE9OM19DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX0RPVUJMRV9DTElDS0VEIiwgICBCVVRUT04zX0RPVUJMRV9DTElDS0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT04zX1RSSVBMRV9DTElDS0VEIiwgICBCVVRUT04zX1RSSVBMRV9DTElDS0VEKTsKIAotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9ONF9QUkVTU0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjRfUkVMRUFTRUQiLCAgICAgICAgIEJVVFRPTjRfUkVMRUFTRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9DTElDS0VEIiwgICAgICAgICAgQlVUVE9ONF9DTElDS0VEKTsKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkJVVFRPTjRfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCIsICAgQlVUVE9ONF9UUklQTEVfQ0xJQ0tFRCk7CisgICAgU2V0RGljdEludCgiQlVUVE9ONF9QUkVTU0VEIiwgICAgICAgICAgQlVUVE9ONF9QUkVTU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT040X1JFTEVBU0VEIiwgICAgICAgICBCVVRUT040X1JFTEVBU0VEKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT040X0NMSUNLRUQiLCAgICAgICAgICBCVVRUT040X0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfRE9VQkxFX0NMSUNLRUQiLCAgIEJVVFRPTjRfRE9VQkxFX0NMSUNLRUQpOworICAgIFNldERpY3RJbnQoIkJVVFRPTjRfVFJJUExFX0NMSUNLRUQiLCAgIEJVVFRPTjRfVFJJUExFX0NMSUNLRUQpOwogCi0gICAgICAgICAgICBTZXREaWN0SW50KCJCVVRUT05fU0hJRlQiLCAgICAgICAgICAgICBCVVRUT05fU0hJRlQpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OX0NUUkwiLCAgICAgICAgICAgICAgQlVUVE9OX0NUUkwpOwotICAgICAgICAgICAgU2V0RGljdEludCgiQlVUVE9OX0FMVCIsICAgICAgICAgICAgICAgQlVUVE9OX0FMVCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OX1NISUZUIiwgICAgICAgICAgICAgQlVUVE9OX1NISUZUKTsKKyAgICBTZXREaWN0SW50KCJCVVRUT05fQ1RSTCIsICAgICAgICAgICAgICBCVVRUT05fQ1RSTCk7CisgICAgU2V0RGljdEludCgiQlVUVE9OX0FMVCIsICAgICAgICAgICAgICAgQlVUVE9OX0FMVCk7CiAKLSAgICAgICAgICAgIFNldERpY3RJbnQoIkFMTF9NT1VTRV9FVkVOVFMiLCAgICAgICAgIEFMTF9NT1VTRV9FVkVOVFMpOwotICAgICAgICAgICAgU2V0RGljdEludCgiUkVQT1JUX01PVVNFX1BPU0lUSU9OIiwgICAgUkVQT1JUX01PVVNFX1BPU0lUSU9OKTsKKyAgICBTZXREaWN0SW50KCJBTExfTU9VU0VfRVZFTlRTIiwgICAgICAgICBBTExfTU9VU0VfRVZFTlRTKTsKKyAgICBTZXREaWN0SW50KCJSRVBPUlRfTU9VU0VfUE9TSVRJT04iLCAgICBSRVBPUlRfTU9VU0VfUE9TSVRJT04pOwogI2VuZGlmCi0gICAgICAgICAgICAvKiBOb3cgc2V0IGV2ZXJ5dGhpbmcgdXAgZm9yIEtFWV8gdmFyaWFibGVzICovCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IGtleTsKLSAgICAgICAgICAgICAgICBjaGFyICprZXlfbjsKLSAgICAgICAgICAgICAgICBjaGFyICprZXlfbjI7CisgICAgLyogTm93IHNldCBldmVyeXRoaW5nIHVwIGZvciBLRVlfIHZhcmlhYmxlcyAqLworICAgIHsKKyAgICAgICAgaW50IGtleTsKKyAgICAgICAgY2hhciAqa2V5X247CisgICAgICAgIGNoYXIgKmtleV9uMjsKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKQotICAgICAgICAgICAgICAgIGZvciAoa2V5PUtFWV9NSU47a2V5IDwgS0VZX01BWDsga2V5KyspIHsKLSAgICAgICAgICAgICAgICAgICAga2V5X24gPSAoY2hhciAqKWtleW5hbWUoa2V5KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtleV9uID09IE5VTEwgfHwgc3RyY21wKGtleV9uLCJVTktOT1dOIEtFWSIpPT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKGtleV9uLCJLRVlfRigiLDYpPT0wKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgICAgICAgICAga2V5X24yID0gbWFsbG9jKHN0cmxlbihrZXlfbikrMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWtleV9uMikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwMSA9IGtleV9uOwotICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBrZXlfbjI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpwMSAhPSAnKCcgJiYgKnAxICE9ICcpJykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcDIgPSAqcDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcDIgPSAoY2hhcikwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleV9uMiA9IGtleV9uOwotICAgICAgICAgICAgICAgICAgICBTZXREaWN0SW50KGtleV9uMixrZXkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShrZXlfbjIpOworICAgICAgICBmb3IgKGtleT1LRVlfTUlOO2tleSA8IEtFWV9NQVg7IGtleSsrKSB7CisgICAgICAgICAgICBrZXlfbiA9IChjaGFyICopa2V5bmFtZShrZXkpOworICAgICAgICAgICAgaWYgKGtleV9uID09IE5VTEwgfHwgc3RyY21wKGtleV9uLCJVTktOT1dOIEtFWSIpPT0wKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKKyAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOworICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgICAgIFNldERpY3RJbnQoIktFWV9NSU4iLCBLRVlfTUlOKTsKLSAgICAgICAgICAgICAgICBTZXREaWN0SW50KCJLRVlfTUFYIiwgS0VZX01BWCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgICAgICAgICBwMSA9IGtleV9uOworICAgICAgICAgICAgICAgIHAyID0ga2V5X24yOworICAgICAgICAgICAgICAgIHdoaWxlICgqcDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpwMSAhPSAnKCcgJiYgKnAxICE9ICcpJykgeworICAgICAgICAgICAgICAgICAgICAgICAgKnAyID0gKnAxOworICAgICAgICAgICAgICAgICAgICAgICAgcDIrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwMSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqcDIgPSAoY2hhcikwOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAga2V5X24yID0ga2V5X247CisgICAgICAgICAgICBTZXREaWN0SW50KGtleV9uMixrZXkpOworICAgICAgICAgICAgaWYgKGtleV9uMiAhPSBrZXlfbikKKyAgICAgICAgICAgICAgICBmcmVlKGtleV9uMik7CiAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CisgICAgICAgIFNldERpY3RJbnQoIktFWV9NQVgiLCBLRVlfTUFYKTsKKyAgICB9CisgICAgcmV0dXJuIG07Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMgYi9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIE1vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYwpyZW5hbWUgdG8gTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwppbmRleCAwYWM1MWFhLi42ZWU1MzE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2RhdGV0aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwpAQCAtMywxMiArMywxMSBAQAogICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJtb2RzdXBwb3J0LmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKICNpbmNsdWRlIDx0aW1lLmg+CiAKLSNpbmNsdWRlICJ0aW1lZnVuY3MuaCIKKyNpbmNsdWRlICJfdGltZS5oIgogCiAvKiBEaWZmZXJlbnRpYXRlIGJldHdlZW4gYnVpbGRpbmcgdGhlIGNvcmUgbW9kdWxlIGFuZCBidWlsZGluZyBleHRlbnNpb24KICAqIG1vZHVsZXMuCkBAIC0yNSw3ICsyNCw3IEBACiAgKiBmaW5hbCByZXN1bHQgZml0cyBpbiBhIEMgaW50ICh0aGlzIGNhbiBiZSBhbiBpc3N1ZSBvbiA2NC1iaXQgYm94ZXMpLgogICovCiAjaWYgU0laRU9GX0lOVCA8IDQKLSMgICAgICAgZXJyb3IgImRhdGV0aW1lLmMgcmVxdWlyZXMgdGhhdCBDIGludCBoYXZlIGF0IGxlYXN0IDMyIGJpdHMiCisjICAgICAgIGVycm9yICJfZGF0ZXRpbWUuYyByZXF1aXJlcyB0aGF0IEMgaW50IGhhdmUgYXQgbGVhc3QgMzIgYml0cyIKICNlbmRpZgogCiAjZGVmaW5lIE1JTllFQVIgMQpAQCAtODgsOCArODcsMTEgQEAKIC8qIHAgaXMgYSBwb2ludGVyIHRvIGEgdGltZSBvciBhIGRhdGV0aW1lIG9iamVjdDsgSEFTVFpJTkZPKHApIHJldHVybnMKICAqIHAtPmhhc3R6aW5mby4KICAqLwotI2RlZmluZSBIQVNUWklORk8ocCkgICAgICAgICAgICAoKChfUHlEYXRlVGltZV9CYXNlVFpJbmZvICopKHApKS0+aGFzdHppbmZvKQotCisjZGVmaW5lIEhBU1RaSU5GTyhwKSAoKChfUHlEYXRlVGltZV9CYXNlVFpJbmZvICopKHApKS0+aGFzdHppbmZvKQorI2RlZmluZSBHRVRfVElNRV9UWklORk8ocCkgKEhBU1RaSU5GTyhwKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFB5RGF0ZVRpbWVfVGltZSAqKShwKSktPnR6aW5mbyA6IFB5X05vbmUpCisjZGVmaW5lIEdFVF9EVF9UWklORk8ocCkgKEhBU1RaSU5GTyhwKSA/IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeURhdGVUaW1lX0RhdGVUaW1lICopKHApKS0+dHppbmZvIDogUHlfTm9uZSkKIC8qIE0gaXMgYSBjaGFyIG9yIGludCBjbGFpbWluZyB0byBiZSBhIHZhbGlkIG1vbnRoLiAgVGhlIG1hY3JvIGlzIGVxdWl2YWxlbnQKICAqIHRvIHRoZSB0d28tc2lkZWQgUHl0aG9uIHRlc3QKICAqICAgICAgMSA8PSBNIDw9IDEyCkBAIC0xMDIsNiArMTA0LDcgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9EZWx0YVR5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVGltZVR5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVFpJbmZvVHlwZTsKK3N0YXRpYyBQeVR5cGVPYmplY3QgUHlEYXRlVGltZV9UaW1lWm9uZVR5cGU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogTWF0aCB1dGlsaXRpZXMuCkBAIC0xNTIsNiArMTU1LDI1IEBACiAgICAgcmV0dXJuIChsb25nKXg7CiB9CiAKKy8qIE5lYXJlc3QgaW50ZWdlciB0byBtIC8gbiBmb3IgaW50ZWdlcnMgbSBhbmQgbi4gSGFsZi1pbnRlZ2VyIHJlc3VsdHMKKyAqIGFyZSByb3VuZGVkIHRvIGV2ZW4uCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitkaXZpZGVfbmVhcmVzdChQeU9iamVjdCAqbSwgUHlPYmplY3QgKm4pCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqdGVtcDsKKworICAgIHRlbXAgPSBfUHlMb25nX0Rpdm1vZE5lYXIobSwgbik7CisgICAgaWYgKHRlbXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gUHlUdXBsZV9HRVRfSVRFTSh0ZW1wLCAwKTsKKyAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICBQeV9ERUNSRUYodGVtcCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEdlbmVyYWwgY2FsZW5kcmljYWwgaGVscGVyIGZ1bmN0aW9ucwogICovCkBAIC0yMTgsMTYgKzI0MCwxMCBAQAogICAgIGludCB5ID0geWVhciAtIDE7CiAgICAgLyogVGhpcyBpcyBpbmNvcnJlY3QgaWYgeWVhciA8PSAwOyB3ZSByZWFsbHkgd2FudCB0aGUgZmxvb3IKICAgICAgKiBoZXJlLiAgQnV0IHNvIGxvbmcgYXMgTUlOWUVBUiBpcyAxLCB0aGUgc21hbGxlc3QgeWVhciB0aGlzCi0gICAgICogY2FuIHNlZSBpcyAwICh0aGlzIGNhbiBoYXBwZW4gaW4gc29tZSBub3JtYWxpemF0aW9uIGVuZGNhc2VzKSwKLSAgICAgKiBzbyB3ZSdsbCBqdXN0IHNwZWNpYWwtY2FzZSB0aGF0LgorICAgICAqIGNhbiBzZWUgaXMgMS4KICAgICAgKi8KLSAgICBhc3NlcnQgKHllYXIgPj0gMCk7Ci0gICAgaWYgKHkgPj0gMCkKLSAgICAgICAgcmV0dXJuIHkqMzY1ICsgeS80IC0geS8xMDAgKyB5LzQwMDsKLSAgICBlbHNlIHsKLSAgICAgICAgYXNzZXJ0KHkgPT0gLTEpOwotICAgICAgICByZXR1cm4gLTM2NjsKLSAgICB9CisgICAgYXNzZXJ0ICh5ZWFyID49IDEpOworICAgIHJldHVybiB5KjM2NSArIHkvNCAtIHkvMTAwICsgeS80MDA7CiB9CiAKIC8qIE51bWJlciBvZiBkYXlzIGluIDQsIDEwMCwgYW5kIDQwMCB5ZWFyIGN5Y2xlcy4gIFRoYXQgdGhlc2UgaGF2ZQpAQCAtNDg2LDIwICs1MDIsMTAgQEAKIHsKICAgICBpbnQgZGltOyAgICAgICAgICAgIC8qICMgb2YgZGF5cyBpbiBtb250aCAqLwogCi0gICAgLyogVGhpcyBnZXRzIG11ZGR5OiAgdGhlIHByb3BlciByYW5nZSBmb3IgZGF5IGNhbid0IGJlIGRldGVybWluZWQKLSAgICAgKiB3aXRob3V0IGtub3dpbmcgdGhlIGNvcnJlY3QgbW9udGggYW5kIHllYXIsIGJ1dCBpZiBkYXkgaXMsIGUuZy4sCi0gICAgICogcGx1cyBvciBtaW51cyBhIG1pbGxpb24sIHRoZSBjdXJyZW50IG1vbnRoIGFuZCB5ZWFyIHZhbHVlcyBtYWtlCi0gICAgICogbm8gc2Vuc2UgKGFuZCBtYXkgYWxzbyBiZSBvdXQgb2YgYm91bmRzIHRoZW1zZWx2ZXMpLgotICAgICAqIFNheWluZyAxMiBtb250aHMgPT0gMSB5ZWFyIHNob3VsZCBiZSBub24tY29udHJvdmVyc2lhbC4KKyAgICAvKiBJbiBhY3R1YWwgdXNlLCBtIGlzIGFsd2F5cyB0aGUgbW9udGggY29tcG9uZW50IGV4dHJhY3RlZCBmcm9tIGEKKyAgICAgKiBkYXRlL2RhdGV0aW1lIG9iamVjdC4gIFRoZXJlZm9yZSBpdCBpcyBhbHdheXMgaW4gWzEsIDEyXSByYW5nZS4KICAgICAgKi8KLSAgICBpZiAoKm0gPCAxIHx8ICptID4gMTIpIHsKLSAgICAgICAgLS0qbTsKLSAgICAgICAgbm9ybWFsaXplX3BhaXIoeSwgbSwgMTIpOwotICAgICAgICArKyptOwotICAgICAgICAvKiB8eXwgY2FuJ3QgYmUgYmlnZ2VyIHRoYW4gYWJvdXQKLSAgICAgICAgICogfG9yaWdpbmFsIHl8ICsgfG9yaWdpbmFsIG18LzEyIG5vdy4KLSAgICAgICAgICovCi0gICAgfQorCiAgICAgYXNzZXJ0KDEgPD0gKm0gJiYgKm0gPD0gMTIpOwogCiAgICAgLyogTm93IG9ubHkgZGF5IGNhbiBiZSBvdXQgb2YgYm91bmRzICh5ZWFyIG1heSBhbHNvIGJlIG91dCBvZiBib3VuZHMKQEAgLTc1Miw2ICs3NTgsNzEgQEAKICNkZWZpbmUgbmV3X2RlbHRhKGQsIHMsIHVzLCBub3JtYWxpemUpICBcCiAgICAgbmV3X2RlbHRhX2V4KGQsIHMsIHVzLCBub3JtYWxpemUsICZQeURhdGVUaW1lX0RlbHRhVHlwZSkKIAorCit0eXBlZGVmIHN0cnVjdAoreworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQeU9iamVjdCAqb2Zmc2V0OworICAgIFB5T2JqZWN0ICpuYW1lOworfSBQeURhdGVUaW1lX1RpbWVab25lOworCisvKiBUaGUgaW50ZXJuZWQgVVRDIHRpbWV6b25lIGluc3RhbmNlICovIAorc3RhdGljIFB5T2JqZWN0ICpQeURhdGVUaW1lX1RpbWVab25lX1VUQzsKKworLyogQ3JlYXRlIG5ldyB0aW1lem9uZSBpbnN0YW5jZSBjaGVja2luZyBvZmZzZXQgcmFuZ2UuICBUaGlzCisgICBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgbmFtZSBhcmd1bWVudC4gIENhbGxlciBtdXN0IGFzc3VyZQorICAgdGhhdCBvZmZzZXQgaXMgYSB0aW1lZGVsdGEgaW5zdGFuY2UgYW5kIG5hbWUgaXMgZWl0aGVyIE5VTEwKKyAgIG9yIGEgdW5pY29kZSBvYmplY3QuICovCitzdGF0aWMgUHlPYmplY3QgKgorY3JlYXRlX3RpbWV6b25lKFB5T2JqZWN0ICpvZmZzZXQsIFB5T2JqZWN0ICpuYW1lKQoreworICAgIFB5RGF0ZVRpbWVfVGltZVpvbmUgKnNlbGY7CisgICAgUHlUeXBlT2JqZWN0ICp0eXBlID0gJlB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlOworCisgICAgYXNzZXJ0KG9mZnNldCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoUHlEZWx0YV9DaGVjayhvZmZzZXQpKTsKKyAgICBhc3NlcnQobmFtZSA9PSBOVUxMIHx8IFB5VW5pY29kZV9DaGVjayhuYW1lKSk7CisKKyAgICBzZWxmID0gKFB5RGF0ZVRpbWVfVGltZVpvbmUgKikodHlwZS0+dHBfYWxsb2ModHlwZSwgMCkpOworICAgIGlmIChzZWxmID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihvZmZzZXQpOworICAgIHNlbGYtPm9mZnNldCA9IG9mZnNldDsKKyAgICBQeV9YSU5DUkVGKG5hbWUpOworICAgIHNlbGYtPm5hbWUgPSBuYW1lOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgaW50IGRlbHRhX2Jvb2woUHlEYXRlVGltZV9EZWx0YSAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCituZXdfdGltZXpvbmUoUHlPYmplY3QgKm9mZnNldCwgUHlPYmplY3QgKm5hbWUpCit7CisgICAgYXNzZXJ0KG9mZnNldCAhPSBOVUxMKTsKKyAgICBhc3NlcnQoUHlEZWx0YV9DaGVjayhvZmZzZXQpKTsKKyAgICBhc3NlcnQobmFtZSA9PSBOVUxMIHx8IFB5VW5pY29kZV9DaGVjayhuYW1lKSk7CisKKyAgICBpZiAobmFtZSA9PSBOVUxMICYmIGRlbHRhX2Jvb2woKFB5RGF0ZVRpbWVfRGVsdGEgKilvZmZzZXQpID09IDApIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5RGF0ZVRpbWVfVGltZVpvbmVfVVRDKTsKKyAgICAgICAgcmV0dXJuIFB5RGF0ZVRpbWVfVGltZVpvbmVfVVRDOworICAgIH0KKyAgICBpZiAoR0VUX1REX01JQ1JPU0VDT05EUyhvZmZzZXQpICE9IDAgfHwgR0VUX1REX1NFQ09ORFMob2Zmc2V0KSAlIDYwICE9IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJvZmZzZXQgbXVzdCBiZSBhIHRpbWVkZWx0YSIKKyAgICAgICAgICAgICAgICAgICAgICIgcmVwcmVzZW50aW5nIGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICgoR0VUX1REX0RBWVMob2Zmc2V0KSA9PSAtMSAmJiBHRVRfVERfU0VDT05EUyhvZmZzZXQpID09IDApIHx8CisgICAgICAgIEdFVF9URF9EQVlTKG9mZnNldCkgPCAtMSB8fCBHRVRfVERfREFZUyhvZmZzZXQpID49IDEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJvZmZzZXQgbXVzdCBiZSBhIHRpbWVkZWx0YSIKKyAgICAgICAgICAgICAgICAgICAgICIgc3RyaWN0bHkgYmV0d2VlbiAtdGltZWRlbHRhKGhvdXJzPTI0KSBhbmQiCisgICAgICAgICAgICAgICAgICAgICAiIHRpbWVkZWx0YShob3Vycz0yNCkuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjcmVhdGVfdGltZXpvbmUob2Zmc2V0LCBuYW1lKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiB0emluZm8gaGVscGVycy4KICAqLwpAQCAtNzcxLDI1ICs4NDIsNiBAQAogICAgIHJldHVybiAtMTsKIH0KIAotLyogUmV0dXJuIHR6aW5mby5tZXRobmFtZSh0emluZm9hcmcpLCB3aXRob3V0IGFueSBjaGVja2luZyBvZiByZXN1bHRzLgotICogSWYgdHppbmZvIGlzIE5vbmUsIHJldHVybnMgTm9uZS4KLSAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfdHppbmZvX21ldGhvZChQeU9iamVjdCAqdHppbmZvLCBjaGFyICptZXRobmFtZSwgUHlPYmplY3QgKnR6aW5mb2FyZykKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotCi0gICAgYXNzZXJ0KHR6aW5mbyAmJiBtZXRobmFtZSAmJiB0emluZm9hcmcpOwotICAgIGFzc2VydChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA+PSAwKTsKLSAgICBpZiAodHppbmZvID09IFB5X05vbmUpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZCh0emluZm8sIG1ldGhuYW1lLCAiTyIsIHR6aW5mb2FyZyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLyogSWYgc2VsZiBoYXMgYSB0emluZm8gbWVtYmVyLCByZXR1cm4gYSBCT1JST1dFRCByZWZlcmVuY2UgdG8gaXQuICBFbHNlCiAgKiByZXR1cm4gTlVMTCwgd2hpY2ggaXMgTk9UIEFOIEVSUk9SLiAgVGhlcmUgYXJlIG5vIGVycm9yIHJldHVybnMgaGVyZSwKICAqIGFuZCB0aGUgY2FsbGVyIG11c3Qgbm90IGRlY3JlZiB0aGUgcmVzdWx0LgpAQCAtODA3LDY5ICs4NTksNTMgQEAKICAgICByZXR1cm4gdHppbmZvOwogfQogCi0vKiBDYWxsIGdldGF0dHIodHppbmZvLCBuYW1lKSh0emluZm9hcmcpLCBhbmQgZXh0cmFjdCBhbiBpbnQgZnJvbSB0aGUKLSAqIHJlc3VsdC4gIHR6aW5mbyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIHRoZSB0emluZm8gY2xhc3MuICBJZiB0aGUgbWV0aG9kCi0gKiByZXR1cm5zIE5vbmUsIHRoaXMgcmV0dXJucyAwIGFuZCBzZXRzICpub25lIHRvIDEuICBJZiB0aGUgbWV0aG9kIGRvZXNuJ3QKLSAqIHJldHVybiBOb25lIG9yIHRpbWVkZWx0YSwgVHlwZUVycm9yIGlzIHJhaXNlZCBhbmQgdGhpcyByZXR1cm5zIC0xLiAgSWYgaXQKLSAqIHJldHVybnNhIHRpbWVkZWx0YSBhbmQgdGhlIHZhbHVlIGlzIG91dCBvZiByYW5nZSBvciBpc24ndCBhIHdob2xlIG51bWJlcgotICogb2YgbWludXRlcywgVmFsdWVFcnJvciBpcyByYWlzZWQgYW5kIHRoaXMgcmV0dXJucyAtMS4KLSAqIEVsc2UgKm5vbmUgaXMgc2V0IHRvIDAgYW5kIHRoZSBpbnRlZ2VyIG1ldGhvZCByZXN1bHQgaXMgcmV0dXJuZWQuCisvKiBDYWxsIGdldGF0dHIodHppbmZvLCBuYW1lKSh0emluZm9hcmcpLCBhbmQgY2hlY2sgdGhlIHJlc3VsdC4gIHR6aW5mbyBtdXN0CisgKiBiZSBhbiBpbnN0YW5jZSBvZiB0aGUgdHppbmZvIGNsYXNzLiAgSWYgdGhlIG1ldGhvZCByZXR1cm5zIE5vbmUsIHRoaXMKKyAqIHJldHVybnMgTm9uZS4gIElmIHRoZSBtZXRob2QgZG9lc24ndCByZXR1cm4gTm9uZSBvciB0aW1lZGVsdGEsIFR5cGVFcnJvciBpcworICogcmFpc2VkIGFuZCB0aGlzIHJldHVybnMgTlVMTC4gIElmIGl0IHJldHVybnMgYSB0aW1lZGVsdGEgYW5kIHRoZSB2YWx1ZSBpcworICogb3V0IG9mIHJhbmdlIG9yIGlzbid0IGEgd2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMsIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGFuZAorICogdGhpcyByZXR1cm5zIE5VTEwuICBFbHNlIHJlc3VsdCBpcyByZXR1cm5lZC4KICAqLwotc3RhdGljIGludAotY2FsbF91dGNfdHppbmZvX21ldGhvZChQeU9iamVjdCAqdHppbmZvLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdHppbmZvYXJnLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm5vbmUpCitzdGF0aWMgUHlPYmplY3QgKgorY2FsbF90emluZm9fbWV0aG9kKFB5T2JqZWN0ICp0emluZm8sIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp0emluZm9hcmcpCiB7Ci0gICAgUHlPYmplY3QgKnU7Ci0gICAgaW50IHJlc3VsdCA9IC0xOworICAgIFB5T2JqZWN0ICpvZmZzZXQ7CiAKICAgICBhc3NlcnQodHppbmZvICE9IE5VTEwpOwotICAgIGFzc2VydChQeVRaSW5mb19DaGVjayh0emluZm8pKTsKKyAgICBhc3NlcnQoUHlUWkluZm9fQ2hlY2sodHppbmZvKSB8fCB0emluZm8gPT0gUHlfTm9uZSk7CiAgICAgYXNzZXJ0KHR6aW5mb2FyZyAhPSBOVUxMKTsKIAotICAgICpub25lID0gMDsKLSAgICB1ID0gY2FsbF90emluZm9fbWV0aG9kKHR6aW5mbywgbmFtZSwgdHppbmZvYXJnKTsKLSAgICBpZiAodSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBlbHNlIGlmICh1ID09IFB5X05vbmUpIHsKLSAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgKm5vbmUgPSAxOwotICAgIH0KLSAgICBlbHNlIGlmIChQeURlbHRhX0NoZWNrKHUpKSB7Ci0gICAgICAgIGNvbnN0IGludCBkYXlzID0gR0VUX1REX0RBWVModSk7Ci0gICAgICAgIGlmIChkYXlzIDwgLTEgfHwgZGF5cyA+IDApCi0gICAgICAgICAgICByZXN1bHQgPSAyNCo2MDsgICAgICAgICAgICAgLyogdHJpZ2dlciBWYWx1ZUVycm9yIGJlbG93ICovCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogbmV4dCBsaW5lIGNhbid0IG92ZXJmbG93IGJlY2F1c2Ugd2Uga25vdyBkYXlzCi0gICAgICAgICAgICAgKiBpcyAtMSBvciAwIG5vdwotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnQgc3MgPSBkYXlzICogMjQgKiAzNjAwICsgR0VUX1REX1NFQ09ORFModSk7Ci0gICAgICAgICAgICByZXN1bHQgPSBkaXZtb2Qoc3MsIDYwLCAmc3MpOwotICAgICAgICAgICAgaWYgKHNzIHx8IEdFVF9URF9NSUNST1NFQ09ORFModSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInR6aW5mby4lcygpIG11c3QgcmV0dXJuIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hvbGUgbnVtYmVyIG9mIG1pbnV0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgICAgIH0KKyAgICBpZiAodHppbmZvID09IFB5X05vbmUpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIG9mZnNldCA9IFB5T2JqZWN0X0NhbGxNZXRob2QodHppbmZvLCBuYW1lLCAiTyIsIHR6aW5mb2FyZyk7CisgICAgaWYgKG9mZnNldCA9PSBQeV9Ob25lIHx8IG9mZnNldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIGlmIChQeURlbHRhX0NoZWNrKG9mZnNldCkpIHsKKyAgICAgICAgaWYgKEdFVF9URF9NSUNST1NFQ09ORFMob2Zmc2V0KSAhPSAwIHx8IEdFVF9URF9TRUNPTkRTKG9mZnNldCkgJSA2MCAhPSAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAib2Zmc2V0IG11c3QgYmUgYSB0aW1lZGVsdGEiCisgICAgICAgICAgICAgICAgICAgICAgICAgIiByZXByZXNlbnRpbmcgYSB3aG9sZSBudW1iZXIgb2YgbWludXRlcyIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChHRVRfVERfREFZUyhvZmZzZXQpID09IC0xICYmIEdFVF9URF9TRUNPTkRTKG9mZnNldCkgPT0gMCkgfHwKKyAgICAgICAgICAgIEdFVF9URF9EQVlTKG9mZnNldCkgPCAtMSB8fCBHRVRfVERfREFZUyhvZmZzZXQpID49IDEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJvZmZzZXQgbXVzdCBiZSBhIHRpbWVkZWx0YSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIHN0cmljdGx5IGJldHdlZW4gLXRpbWVkZWx0YShob3Vycz0yNCkgYW5kIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgdGltZWRlbHRhKGhvdXJzPTI0KS4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJ0emluZm8uJXMoKSBtdXN0IHJldHVybiBOb25lIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICJ0aW1lZGVsdGEsIG5vdCAnJXMnIiwKLSAgICAgICAgICAgICAgICAgICAgIG5hbWUsIFB5X1RZUEUodSktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgInRpbWVkZWx0YSwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWUsIFB5X1RZUEUob2Zmc2V0KS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIFB5X0RFQ1JFRih1KTsKLSAgICBpZiAocmVzdWx0IDwgLTE0MzkgfHwgcmVzdWx0ID4gMTQzOSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ0emluZm8uJXMoKSByZXR1cm5lZCAlZDsgbXVzdCBiZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAiLTE0MzkgLi4gMTQzOSIsCi0gICAgICAgICAgICAgICAgICAgICBuYW1lLCByZXN1bHQpOwotICAgICAgICByZXN1bHQgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gb2Zmc2V0OwogfQogCiAvKiBDYWxsIHR6aW5mby51dGNvZmZzZXQodHppbmZvYXJnKSwgYW5kIGV4dHJhY3QgYW4gaW50ZWdlciBmcm9tIHRoZQpAQCAtODgwLDM3ICs5MTYsMTAgQEAKICAqICMgb2YgbWludXRlcyksIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGFuZCB0aGlzIHJldHVybnMgLTEuICBFbHNlICpub25lIGlzCiAgKiBzZXQgdG8gMCBhbmQgdGhlIG9mZnNldCBpcyByZXR1cm5lZCAoYXMgaW50ICMgb2YgbWludXRlcyBlYXN0IG9mIFVUQykuCiAgKi8KLXN0YXRpYyBpbnQKLWNhbGxfdXRjb2Zmc2V0KFB5T2JqZWN0ICp0emluZm8sIFB5T2JqZWN0ICp0emluZm9hcmcsIGludCAqbm9uZSkKLXsKLSAgICByZXR1cm4gY2FsbF91dGNfdHppbmZvX21ldGhvZCh0emluZm8sICJ1dGNvZmZzZXQiLCB0emluZm9hcmcsIG5vbmUpOwotfQotCi0vKiBDYWxsIHR6aW5mby5uYW1lKHR6aW5mb2FyZyksIGFuZCByZXR1cm4gdGhlIG9mZnNldCBhcyBhIHRpbWVkZWx0YSBvciBOb25lLgotICovCiBzdGF0aWMgUHlPYmplY3QgKgotb2Zmc2V0X2FzX3RpbWVkZWx0YShQeU9iamVjdCAqdHppbmZvLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdHppbmZvYXJnKSB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLQotICAgIGFzc2VydCh0emluZm8gJiYgbmFtZSAmJiB0emluZm9hcmcpOwotICAgIGlmICh0emluZm8gPT0gUHlfTm9uZSkgewotICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBub25lOwotICAgICAgICBpbnQgb2Zmc2V0ID0gY2FsbF91dGNfdHppbmZvX21ldGhvZCh0emluZm8sIG5hbWUsIHR6aW5mb2FyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5vbmUpOwotICAgICAgICBpZiAob2Zmc2V0IDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChub25lKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwotICAgICAgICAgICAgUHlfSU5DUkVGKHJlc3VsdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gbmV3X2RlbHRhKDAsIG9mZnNldCAqIDYwLCAwLCAxKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKK2NhbGxfdXRjb2Zmc2V0KFB5T2JqZWN0ICp0emluZm8sIFB5T2JqZWN0ICp0emluZm9hcmcpCit7CisgICAgcmV0dXJuIGNhbGxfdHppbmZvX21ldGhvZCh0emluZm8sICJ1dGNvZmZzZXQiLCB0emluZm9hcmcpOwogfQogCiAvKiBDYWxsIHR6aW5mby5kc3QodHppbmZvYXJnKSwgYW5kIGV4dHJhY3QgYW4gaW50ZWdlciBmcm9tIHRoZQpAQCAtOTIxLDEwICs5MzAsMTAgQEAKICAqIFZhbHVlRXJyb3IgaXMgcmFpc2VkIGFuZCB0aGlzIHJldHVybnMgLTEuICBFbHNlICpub25lIGlzIHNldCB0byAwIGFuZAogICogdGhlIG9mZnNldCBpcyByZXR1cm5lZCAoYXMgYW4gaW50ICMgb2YgbWludXRlcyBlYXN0IG9mIFVUQykuCiAgKi8KLXN0YXRpYyBpbnQKLWNhbGxfZHN0KFB5T2JqZWN0ICp0emluZm8sIFB5T2JqZWN0ICp0emluZm9hcmcsIGludCAqbm9uZSkKK3N0YXRpYyBQeU9iamVjdCAqCitjYWxsX2RzdChQeU9iamVjdCAqdHppbmZvLCBQeU9iamVjdCAqdHppbmZvYXJnKQogewotICAgIHJldHVybiBjYWxsX3V0Y190emluZm9fbWV0aG9kKHR6aW5mbywgImRzdCIsIHR6aW5mb2FyZywgbm9uZSk7CisgICAgcmV0dXJuIGNhbGxfdHppbmZvX21ldGhvZCh0emluZm8sICJkc3QiLCB0emluZm9hcmcpOwogfQogCiAvKiBDYWxsIHR6aW5mby50em5hbWUodHppbmZvYXJnKSwgYW5kIHJldHVybiB0aGUgcmVzdWx0LiAgdHppbmZvIG11c3QgYmUKQEAgLTk0MiwxMDIgKzk1MSwyMyBAQAogICAgIGFzc2VydChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA+PSAwKTsKICAgICBhc3NlcnQodHppbmZvYXJnICE9IE5VTEwpOwogCi0gICAgaWYgKHR6aW5mbyA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QodHppbmZvLCAidHpuYW1lIiwgIk8iLCB0emluZm9hcmcpOwotCi0gICAgaWYgKHJlc3VsdCAhPSBOVUxMICYmIHJlc3VsdCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJ0emluZm8udHpuYW1lKCkgbXVzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBOb25lIG9yIGEgc3RyaW5nLCBub3QgJyVzJyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10eXBlZGVmIGVudW0gewotICAgICAgICAgICAgICAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gc2V0OyB0aGUgY2FsbGVyIHNob3VsZCBwYXNzIGl0IG9uICovCi0gICAgICAgICAgT0ZGU0VUX0VSUk9SLAotCi0gICAgICAgICAgLyogdHlwZSBpc24ndCBkYXRlLCBkYXRldGltZSwgb3IgdGltZSBzdWJjbGFzcyAqLwotICAgICAgICAgIE9GRlNFVF9VTktOT1dOLAotCi0gICAgICAgICAgLyogZGF0ZSwKLSAgICAgICAgICAgKiBkYXRldGltZSB3aXRoICFoYXN0emluZm8KLSAgICAgICAgICAgKiBkYXRldGltZSB3aXRoIE5vbmUgdHppbmZvLAotICAgICAgICAgICAqIGRhdGV0aW1lIHdoZXJlIHV0Y29mZnNldCgpIHJldHVybnMgTm9uZQotICAgICAgICAgICAqIHRpbWUgd2l0aCAhaGFzdHppbmZvCi0gICAgICAgICAgICogdGltZSB3aXRoIE5vbmUgdHppbmZvLAotICAgICAgICAgICAqIHRpbWUgd2hlcmUgdXRjb2Zmc2V0KCkgcmV0dXJucyBOb25lCi0gICAgICAgICAgICovCi0gICAgICAgICAgT0ZGU0VUX05BSVZFLAotCi0gICAgICAgICAgLyogdGltZSBvciBkYXRldGltZSB3aGVyZSB1dGNvZmZzZXQoKSBkb2Vzbid0IHJldHVybiBOb25lICovCi0gICAgICAgICAgT0ZGU0VUX0FXQVJFCi19IG5haXZldHk7Ci0KLS8qIENsYXNzaWZ5IGFuIG9iamVjdCBhcyB0byB3aGV0aGVyIGl0J3MgbmFpdmUgb3Igb2Zmc2V0LWF3YXJlLiAgU2VlCi0gKiB0aGUgIm5haXZldHkiIHR5cGVkZWYgZm9yIGRldGFpbHMuICBJZiB0aGUgdHlwZSBpcyBhd2FyZSwgKm9mZnNldCBpcyBzZXQKLSAqIHRvIG1pbnV0ZXMgZWFzdCBvZiBVVEMgKGFzIHJldHVybmVkIGJ5IHRoZSB0emluZm8udXRjb2Zmc2V0KCkgbWV0aG9kKS4KLSAqIElmIHRoZSB0eXBlIGlzIG9mZnNldC1uYWl2ZSAob3IgdW5rbm93biwgb3IgZXJyb3IpLCAqb2Zmc2V0IGlzIHNldCB0byAwLgotICogdHppbmZvYXJnIGlzIHRoZSBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSB0emluZm8udXRjb2Zmc2V0KCkgbWV0aG9kLgotICovCi1zdGF0aWMgbmFpdmV0eQotY2xhc3NpZnlfdXRjb2Zmc2V0KFB5T2JqZWN0ICpvcCwgUHlPYmplY3QgKnR6aW5mb2FyZywgaW50ICpvZmZzZXQpCi17Ci0gICAgaW50IG5vbmU7Ci0gICAgUHlPYmplY3QgKnR6aW5mbzsKLQotICAgIGFzc2VydCh0emluZm9hcmcgIT0gTlVMTCk7Ci0gICAgKm9mZnNldCA9IDA7Ci0gICAgdHppbmZvID0gZ2V0X3R6aW5mb19tZW1iZXIob3ApOyAgICAgLyogTlVMTCBtZWFucyBubyB0emluZm8sIG5vdCBlcnJvciAqLwogICAgIGlmICh0emluZm8gPT0gUHlfTm9uZSkKLSAgICAgICAgcmV0dXJuIE9GRlNFVF9OQUlWRTsKLSAgICBpZiAodHppbmZvID09IE5VTEwpIHsKLSAgICAgICAgLyogbm90ZSB0aGF0IGEgZGF0ZXRpbWUgcGFzc2VzIHRoZSBQeURhdGVfQ2hlY2sgdGVzdCAqLwotICAgICAgICByZXR1cm4gKFB5VGltZV9DaGVjayhvcCkgfHwgUHlEYXRlX0NoZWNrKG9wKSkgPwotICAgICAgICAgICAgICAgT0ZGU0VUX05BSVZFIDogT0ZGU0VUX1VOS05PV047Ci0gICAgfQotICAgICpvZmZzZXQgPSBjYWxsX3V0Y29mZnNldCh0emluZm8sIHR6aW5mb2FyZywgJm5vbmUpOwotICAgIGlmICgqb2Zmc2V0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBPRkZTRVRfRVJST1I7Ci0gICAgcmV0dXJuIG5vbmUgPyBPRkZTRVRfTkFJVkUgOiBPRkZTRVRfQVdBUkU7Ci19CisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCi0vKiBDbGFzc2lmeSB0d28gb2JqZWN0cyBhcyB0byB3aGV0aGVyIHRoZXkncmUgbmFpdmUgb3Igb2Zmc2V0LWF3YXJlLgotICogVGhpcyBpc24ndCBxdWl0ZSB0aGUgc2FtZSBhcyBjYWxsaW5nIGNsYXNzaWZ5X3V0Y29mZnNldCgpIHR3aWNlOiAgZm9yCi0gKiBiaW5hcnkgb3BlcmF0aW9ucyAoY29tcGFyaXNvbiBhbmQgc3VidHJhY3Rpb24pLCB3ZSBnZW5lcmFsbHkgd2FudCB0bwotICogaWdub3JlIHRoZSB0emluZm8gbWVtYmVycyBpZiB0aGV5J3JlIGlkZW50aWNhbC4gIFRoaXMgaXMgYnkgZGVzaWduLAotICogc28gdGhhdCByZXN1bHRzIG1hdGNoICJuYWl2ZSIgZXhwZWN0YXRpb25zIHdoZW4gbWl4aW5nIG9iamVjdHMgZnJvbSBhCi0gKiBzaW5nbGUgdGltZXpvbmUuICBTbyBpbiB0aGF0IGNhc2UsIHRoaXMgc2V0cyBib3RoIG9mZnNldHMgdG8gMCBhbmQKLSAqIGJvdGggbmFpdmV0aWVzIHRvIE9GRlNFVF9OQUlWRS4KLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIDAgaWYgZXZlcnl0aGluZydzIE9LLCBhbmQgLTEgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQKLWNsYXNzaWZ5X3R3b191dGNvZmZzZXRzKFB5T2JqZWN0ICpvMSwgaW50ICpvZmZzZXQxLCBuYWl2ZXR5ICpuMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0emluZm9hcmcxLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm8yLCBpbnQgKm9mZnNldDIsIG5haXZldHkgKm4yLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnR6aW5mb2FyZzIpCi17Ci0gICAgaWYgKGdldF90emluZm9fbWVtYmVyKG8xKSA9PSBnZXRfdHppbmZvX21lbWJlcihvMikpIHsKLSAgICAgICAgKm9mZnNldDEgPSAqb2Zmc2V0MiA9IDA7Ci0gICAgICAgICpuMSA9ICpuMiA9IE9GRlNFVF9OQUlWRTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHR6aW5mbywgInR6bmFtZSIsICJPIiwgdHppbmZvYXJnKTsKKworICAgIGlmIChyZXN1bHQgPT0gTlVMTCB8fCByZXN1bHQgPT0gUHlfTm9uZSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgInR6aW5mby50em5hbWUoKSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICJyZXR1cm4gTm9uZSBvciBhIHN0cmluZywgbm90ICclcyciLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAqbjEgPSBjbGFzc2lmeV91dGNvZmZzZXQobzEsIHR6aW5mb2FyZzEsIG9mZnNldDEpOwotICAgICAgICBpZiAoKm4xID09IE9GRlNFVF9FUlJPUikKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgKm4yID0gY2xhc3NpZnlfdXRjb2Zmc2V0KG8yLCB0emluZm9hcmcyLCBvZmZzZXQyKTsKLSAgICAgICAgaWYgKCpuMiA9PSBPRkZTRVRfRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyogcmVwciBpcyBsaWtlICJzb21lY2xhc3MoYXJnMSwgYXJnMikiLiAgSWYgdHppbmZvIGlzbid0IE5vbmUsCkBAIC0xMDg5LDYgKzEwMTksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfWUVBUihkYXRlKSk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqZGVsdGFfbmVnYXRpdmUoUHlEYXRlVGltZV9EZWx0YSAqc2VsZik7CisKIC8qIEFkZCBhbiBob3VycyAmIG1pbnV0ZXMgVVRDIG9mZnNldCBzdHJpbmcgdG8gYnVmLiAgYnVmIGhhcyBubyBtb3JlIHRoYW4KICAqIGJ1ZmxlbiBieXRlcyByZW1haW5pbmcuICBUaGUgVVRDIG9mZnNldCBpcyBnb3R0ZW4gYnkgY2FsbGluZwogICogdHppbmZvLnVjdG9mZnNldCh0emluZm9hcmcpLiAgSWYgdGhhdCByZXR1cm5zIE5vbmUsIFwwIGlzIHN0b3JlZCBpbnRvCkBAIC0xMTAzLDI4ICsxMDM1LDQxIEBACiBmb3JtYXRfdXRjb2Zmc2V0KGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgY29uc3QgY2hhciAqc2VwLAogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0emluZm8sIFB5T2JqZWN0ICp0emluZm9hcmcpCiB7Ci0gICAgaW50IG9mZnNldDsKLSAgICBpbnQgaG91cnM7Ci0gICAgaW50IG1pbnV0ZXM7CisgICAgUHlPYmplY3QgKm9mZnNldDsKKyAgICBpbnQgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHM7CiAgICAgY2hhciBzaWduOwotICAgIGludCBub25lOwogCiAgICAgYXNzZXJ0KGJ1ZmxlbiA+PSAxKTsKIAotICAgIG9mZnNldCA9IGNhbGxfdXRjb2Zmc2V0KHR6aW5mbywgdHppbmZvYXJnLCAmbm9uZSk7Ci0gICAgaWYgKG9mZnNldCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIG9mZnNldCA9IGNhbGxfdXRjb2Zmc2V0KHR6aW5mbywgdHppbmZvYXJnKTsKKyAgICBpZiAob2Zmc2V0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAobm9uZSkgeworICAgIGlmIChvZmZzZXQgPT0gUHlfTm9uZSkgeworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgKmJ1ZiA9ICdcMCc7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBzaWduID0gJysnOwotICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgLyogT2Zmc2V0IGlzIG5vcm1hbGl6ZWQsIHNvIGl0IGlzIG5lZ2F0aXZlIGlmIGRheXMgPCAwICovCisgICAgaWYgKEdFVF9URF9EQVlTKG9mZnNldCkgPCAwKSB7CisgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gb2Zmc2V0OwogICAgICAgICBzaWduID0gJy0nOwotICAgICAgICBvZmZzZXQgPSAtIG9mZnNldDsKKyAgICAgICAgb2Zmc2V0ID0gZGVsdGFfbmVnYXRpdmUoKFB5RGF0ZVRpbWVfRGVsdGEgKilvZmZzZXQpOworICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaG91cnMgPSBkaXZtb2Qob2Zmc2V0LCA2MCwgJm1pbnV0ZXMpOworICAgIGVsc2UgeworICAgICAgICBzaWduID0gJysnOworICAgIH0KKyAgICAvKiBPZmZzZXQgaXMgbm90IG5lZ2F0aXZlIGhlcmUuICovCisgICAgc2Vjb25kcyA9IEdFVF9URF9TRUNPTkRTKG9mZnNldCk7CisgICAgUHlfREVDUkVGKG9mZnNldCk7CisgICAgbWludXRlcyA9IGRpdm1vZChzZWNvbmRzLCA2MCwgJnNlY29uZHMpOworICAgIGhvdXJzID0gZGl2bW9kKG1pbnV0ZXMsIDYwLCAmbWludXRlcyk7CisgICAgYXNzZXJ0KHNlY29uZHMgPT0gMCk7CisgICAgLyogWFhYIGlnbm9yZSBzdWItbWludXRlIGRhdGEsIGN1cmVudGx5IG5vdCBhbGxvd2VkLiAqLwogICAgIFB5T1Nfc25wcmludGYoYnVmLCBidWZsZW4sICIlYyUwMmQlcyUwMmQiLCBzaWduLCBob3Vycywgc2VwLCBtaW51dGVzKTsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjIxLDEwICsxMTY2LDEwIEBACiAgICAgaWYgKCFwaW4pCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogR2l2ZSB1cCBpZiB0aGUgeWVhciBpcyBiZWZvcmUgMTkwMC4KKyAgICAvKiBHaXZlIHVwIGlmIHRoZSB5ZWFyIGlzIGJlZm9yZSAxMDAwLgogICAgICAqIFB5dGhvbiBzdHJmdGltZSgpIHBsYXlzIGdhbWVzIHdpdGggdGhlIHllYXIsIGFuZCBkaWZmZXJlbnQKICAgICAgKiBnYW1lcyBkZXBlbmRpbmcgb24gd2hldGhlciBlbnZhciBQWVRIT04ySyBpcyBzZXQuICBUaGlzIG1ha2VzCi0gICAgICogeWVhcnMgYmVmb3JlIDE5MDAgYSBuaWdodG1hcmUsIGV2ZW4gaWYgdGhlIHBsYXRmb3JtIHN0cmZ0aW1lCisgICAgICogeWVhcnMgYmVmb3JlIDEwMDAgYSBuaWdodG1hcmUsIGV2ZW4gaWYgdGhlIHBsYXRmb3JtIHN0cmZ0aW1lCiAgICAgICogc3VwcG9ydHMgdGhlbSAoYW5kIG5vdCBhbGwgZG8pLgogICAgICAqIFdlIGNvdWxkIGdldCBhIGxvdCBmYXJ0aGVyIGhlcmUgYnkgYXZvaWRpbmcgUHl0aG9uJ3Mgc3RyZnRpbWUKICAgICAgKiB3cmFwcGVyIGFuZCBjYWxsaW5nIHRoZSBDIHN0cmZ0aW1lKCkgZGlyZWN0bHksIGJ1dCB0aGF0IGlzbid0CkBAIC0xMjM3LDEwICsxMTgyLDEwIEBACiAgICAgICAgIGFzc2VydChQeUxvbmdfQ2hlY2socHl5ZWFyKSk7CiAgICAgICAgIHllYXIgPSBQeUxvbmdfQXNMb25nKHB5eWVhcik7CiAgICAgICAgIFB5X0RFQ1JFRihweXllYXIpOwotICAgICAgICBpZiAoeWVhciA8IDE5MDApIHsKKyAgICAgICAgaWYgKHllYXIgPCAxMDAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInllYXI9JWxkIGlzIGJlZm9yZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIjE5MDA7IHRoZSBkYXRldGltZSBzdHJmdGltZSgpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kcyByZXF1aXJlIHllYXIgPj0gMTkwMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIjEwMDA7IHRoZSBkYXRldGltZSBzdHJmdGltZSgpICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibWV0aG9kcyByZXF1aXJlIHllYXIgPj0gMTAwMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgeWVhcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTMxMiw3ICsxMjU3LDggQEAKICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2soWnJlcGxhY2VtZW50KSk7CiAgICAgICAgICAgICBwdG9hcHBlbmQgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShacmVwbGFjZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudG9hcHBlbmQpOwotICAgICAgICAgICAgbnRvYXBwZW5kID0gUHlfU0laRShacmVwbGFjZW1lbnQpOworICAgICAgICAgICAgaWYgKHB0b2FwcGVuZCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjaCA9PSAnZicpIHsKICAgICAgICAgICAgIC8qIGZvcm1hdCBtaWNyb3NlY29uZHMgKi8KQEAgLTEzNjYsNyArMTMxMiw3IEBACiAgICAgICAgIGZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKG5ld2ZtdCkpOwogICAgICAgICBpZiAoZm9ybWF0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QodGltZSwgInN0cmZ0aW1lIiwgIk9PIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0aW1ldHVwbGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHRpbWV0dXBsZSwgTlVMTCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZm9ybWF0KTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYodGltZSk7CkBAIC0xNjQzLDYgKzE1ODksMzcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK211bHRpcGx5X2Zsb2F0X3RpbWVkZWx0YShQeU9iamVjdCAqZmxvYXRvYmosIFB5RGF0ZVRpbWVfRGVsdGEgKmRlbHRhKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpweXVzX2luID0gTlVMTCwgKnRlbXAsICpweXVzX291dDsKKyAgICBQeU9iamVjdCAqcmF0aW8gPSBOVUxMOworCisgICAgcHl1c19pbiA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcyhkZWx0YSk7CisgICAgaWYgKHB5dXNfaW4gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmF0aW8gPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZsb2F0b2JqLCAiYXNfaW50ZWdlcl9yYXRpbyIsIE5VTEwpOworICAgIGlmIChyYXRpbyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHRlbXAgPSBQeU51bWJlcl9NdWx0aXBseShweXVzX2luLCBQeVR1cGxlX0dFVF9JVEVNKHJhdGlvLCAwKSk7CisgICAgUHlfREVDUkVGKHB5dXNfaW4pOworICAgIHB5dXNfaW4gPSBOVUxMOworICAgIGlmICh0ZW1wID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcHl1c19vdXQgPSBkaXZpZGVfbmVhcmVzdCh0ZW1wLCBQeVR1cGxlX0dFVF9JVEVNKHJhdGlvLCAxKSk7CisgICAgUHlfREVDUkVGKHRlbXApOworICAgIGlmIChweXVzX291dCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHJlc3VsdCA9IG1pY3Jvc2Vjb25kc190b19kZWx0YShweXVzX291dCk7CisgICAgUHlfREVDUkVGKHB5dXNfb3V0KTsKKyBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHB5dXNfaW4pOworICAgIFB5X1hERUNSRUYocmF0aW8pOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGRpdmlkZV90aW1lZGVsdGFfaW50KFB5RGF0ZVRpbWVfRGVsdGEgKmRlbHRhLCBQeU9iamVjdCAqaW50b2JqKQogewogICAgIFB5T2JqZWN0ICpweXVzX2luOwpAQCAtMTY2NCw2ICsxNjQxLDEwMSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZGl2aWRlX3RpbWVkZWx0YV90aW1lZGVsdGEoUHlEYXRlVGltZV9EZWx0YSAqbGVmdCwgUHlEYXRlVGltZV9EZWx0YSAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnB5dXNfbGVmdDsKKyAgICBQeU9iamVjdCAqcHl1c19yaWdodDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworCisgICAgcHl1c19sZWZ0ID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGxlZnQpOworICAgIGlmIChweXVzX2xlZnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBweXVzX3JpZ2h0ID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKHJpZ2h0KTsKKyAgICBpZiAocHl1c19yaWdodCA9PSBOVUxMKSAgICAgeworICAgICAgICBQeV9ERUNSRUYocHl1c19sZWZ0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlOdW1iZXJfRmxvb3JEaXZpZGUocHl1c19sZWZ0LCBweXVzX3JpZ2h0KTsKKyAgICBQeV9ERUNSRUYocHl1c19sZWZ0KTsKKyAgICBQeV9ERUNSRUYocHl1c19yaWdodCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RydWVkaXZpZGVfdGltZWRlbHRhX3RpbWVkZWx0YShQeURhdGVUaW1lX0RlbHRhICpsZWZ0LCBQeURhdGVUaW1lX0RlbHRhICpyaWdodCkKK3sKKyAgICBQeU9iamVjdCAqcHl1c19sZWZ0OworICAgIFB5T2JqZWN0ICpweXVzX3JpZ2h0OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisKKyAgICBweXVzX2xlZnQgPSBkZWx0YV90b19taWNyb3NlY29uZHMobGVmdCk7CisgICAgaWYgKHB5dXNfbGVmdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHB5dXNfcmlnaHQgPSBkZWx0YV90b19taWNyb3NlY29uZHMocmlnaHQpOworICAgIGlmIChweXVzX3JpZ2h0ID09IE5VTEwpICAgICB7CisgICAgICAgIFB5X0RFQ1JFRihweXVzX2xlZnQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHB5dXNfbGVmdCwgcHl1c19yaWdodCk7CisgICAgUHlfREVDUkVGKHB5dXNfbGVmdCk7CisgICAgUHlfREVDUkVGKHB5dXNfcmlnaHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0cnVlZGl2aWRlX3RpbWVkZWx0YV9mbG9hdChQeURhdGVUaW1lX0RlbHRhICpkZWx0YSwgUHlPYmplY3QgKmYpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnB5dXNfaW4gPSBOVUxMLCAqdGVtcCwgKnB5dXNfb3V0OworICAgIFB5T2JqZWN0ICpyYXRpbyA9IE5VTEw7CisKKyAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKKyAgICBpZiAocHl1c19pbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByYXRpbyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZiwgImFzX2ludGVnZXJfcmF0aW8iLCBOVUxMKTsKKyAgICBpZiAocmF0aW8gPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB0ZW1wID0gUHlOdW1iZXJfTXVsdGlwbHkocHl1c19pbiwgUHlUdXBsZV9HRVRfSVRFTShyYXRpbywgMSkpOworICAgIFB5X0RFQ1JFRihweXVzX2luKTsKKyAgICBweXVzX2luID0gTlVMTDsKKyAgICBpZiAodGVtcCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHB5dXNfb3V0ID0gZGl2aWRlX25lYXJlc3QodGVtcCwgUHlUdXBsZV9HRVRfSVRFTShyYXRpbywgMCkpOworICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICBpZiAocHl1c19vdXQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICByZXN1bHQgPSBtaWNyb3NlY29uZHNfdG9fZGVsdGEocHl1c19vdXQpOworICAgIFB5X0RFQ1JFRihweXVzX291dCk7CisgZXJyb3I6CisgICAgUHlfWERFQ1JFRihweXVzX2luKTsKKyAgICBQeV9YREVDUkVGKHJhdGlvKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0cnVlZGl2aWRlX3RpbWVkZWx0YV9pbnQoUHlEYXRlVGltZV9EZWx0YSAqZGVsdGEsIFB5T2JqZWN0ICppKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnB5dXNfaW4sICpweXVzX291dDsKKyAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKKyAgICBpZiAocHl1c19pbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBweXVzX291dCA9IGRpdmlkZV9uZWFyZXN0KHB5dXNfaW4sIGkpOworICAgIFB5X0RFQ1JFRihweXVzX2luKTsKKyAgICBpZiAocHl1c19vdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzdWx0ID0gbWljcm9zZWNvbmRzX3RvX2RlbHRhKHB5dXNfb3V0KTsKKyAgICBQeV9ERUNSRUYocHl1c19vdXQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGRlbHRhX2FkZChQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKQEAgLTE3MjksMTMgKzE4MDEsMTQgQEAKIAogICAgIGlmIChQeURlbHRhX0NoZWNrKGxlZnQpICYmIFB5RGVsdGFfQ2hlY2socmlnaHQpKSB7CiAgICAgICAgIC8qIGRlbHRhIC0gZGVsdGEgKi8KLSAgICAgICAgUHlPYmplY3QgKm1pbnVzX3JpZ2h0ID0gUHlOdW1iZXJfTmVnYXRpdmUocmlnaHQpOwotICAgICAgICBpZiAobWludXNfcmlnaHQpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGRlbHRhX2FkZChsZWZ0LCBtaW51c19yaWdodCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobWludXNfcmlnaHQpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgICAgIC8qIFRoZSBDLWxldmVsIGFkZGl0aW9ucyBjYW4ndCBvdmVyZmxvdyBiZWNhdXNlIG9mIHRoZQorICAgICAgICAgKiBpbnZhcmlhbnQgYm91bmRzLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGRheXMgPSBHRVRfVERfREFZUyhsZWZ0KSAtIEdFVF9URF9EQVlTKHJpZ2h0KTsKKyAgICAgICAgaW50IHNlY29uZHMgPSBHRVRfVERfU0VDT05EUyhsZWZ0KSAtIEdFVF9URF9TRUNPTkRTKHJpZ2h0KTsKKyAgICAgICAgaW50IG1pY3Jvc2Vjb25kcyA9IEdFVF9URF9NSUNST1NFQ09ORFMobGVmdCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX1REX01JQ1JPU0VDT05EUyhyaWdodCk7CisgICAgICAgIHJlc3VsdCA9IG5ld19kZWx0YShkYXlzLCBzZWNvbmRzLCBtaWNyb3NlY29uZHMsIDEpOwogICAgIH0KIAogICAgIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpCkBAIC0xNzQzLDE3ICsxODE2LDI0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIGludAorZGVsdGFfY21wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgaW50IGRpZmYgPSBHRVRfVERfREFZUyhzZWxmKSAtIEdFVF9URF9EQVlTKG90aGVyKTsKKyAgICBpZiAoZGlmZiA9PSAwKSB7CisgICAgICAgIGRpZmYgPSBHRVRfVERfU0VDT05EUyhzZWxmKSAtIEdFVF9URF9TRUNPTkRTKG90aGVyKTsKKyAgICAgICAgaWYgKGRpZmYgPT0gMCkKKyAgICAgICAgICAgIGRpZmYgPSBHRVRfVERfTUlDUk9TRUNPTkRTKHNlbGYpIC0KKyAgICAgICAgICAgICAgICBHRVRfVERfTUlDUk9TRUNPTkRTKG90aGVyKTsKKyAgICB9CisgICAgcmV0dXJuIGRpZmY7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWx0YV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCiB7CiAgICAgaWYgKFB5RGVsdGFfQ2hlY2sob3RoZXIpKSB7Ci0gICAgICAgIGludCBkaWZmID0gR0VUX1REX0RBWVMoc2VsZikgLSBHRVRfVERfREFZUyhvdGhlcik7Ci0gICAgICAgIGlmIChkaWZmID09IDApIHsKLSAgICAgICAgICAgIGRpZmYgPSBHRVRfVERfU0VDT05EUyhzZWxmKSAtIEdFVF9URF9TRUNPTkRTKG90aGVyKTsKLSAgICAgICAgICAgIGlmIChkaWZmID09IDApCi0gICAgICAgICAgICAgICAgZGlmZiA9IEdFVF9URF9NSUNST1NFQ09ORFMoc2VsZikgLQotICAgICAgICAgICAgICAgICAgICAgICBHRVRfVERfTUlDUk9TRUNPTkRTKG90aGVyKTsKLSAgICAgICAgfQorICAgICAgICBpbnQgZGlmZiA9IGRlbHRhX2NtcChzZWxmLCBvdGhlcik7CiAgICAgICAgIHJldHVybiBkaWZmX3RvX2Jvb2woZGlmZiwgb3ApOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE3NjQsNyArMTg0NCw3IEBACiAKIHN0YXRpYyBQeU9iamVjdCAqZGVsdGFfZ2V0c3RhdGUoUHlEYXRlVGltZV9EZWx0YSAqc2VsZik7CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBkZWx0YV9oYXNoKFB5RGF0ZVRpbWVfRGVsdGEgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmhhc2hjb2RlID09IC0xKSB7CkBAIC0xNzg3LDEwICsxODY3LDE2IEBACiAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2socmlnaHQpKQogICAgICAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHlfaW50X3RpbWVkZWx0YShyaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKSBsZWZ0KTsKKyAgICAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVjayhyaWdodCkpCisgICAgICAgICAgICByZXN1bHQgPSBtdWx0aXBseV9mbG9hdF90aW1lZGVsdGEocmlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5RGF0ZVRpbWVfRGVsdGEgKikgbGVmdCk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVjayhsZWZ0KSkKICAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHlfaW50X3RpbWVkZWx0YShsZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopIHJpZ2h0KTsKKyAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKGxlZnQpKQorICAgICAgICByZXN1bHQgPSBtdWx0aXBseV9mbG9hdF90aW1lZGVsdGEobGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopIHJpZ2h0KTsKIAogICAgIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpCiAgICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOwpAQCAtMTgwOCw2ICsxODk0LDEwIEBACiAgICAgICAgICAgICByZXN1bHQgPSBkaXZpZGVfdGltZWRlbHRhX2ludCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKWxlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQpOworICAgICAgICBlbHNlIGlmIChQeURlbHRhX0NoZWNrKHJpZ2h0KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGRpdmlkZV90aW1lZGVsdGFfdGltZWRlbHRhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKXJpZ2h0KTsKICAgICB9CiAKICAgICBpZiAocmVzdWx0ID09IFB5X05vdEltcGxlbWVudGVkKQpAQCAtMTgxNSw2ICsxOTA1LDEwOCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZWx0YV90cnVlZGl2aWRlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5X05vdEltcGxlbWVudGVkOworCisgICAgaWYgKFB5RGVsdGFfQ2hlY2sobGVmdCkpIHsKKyAgICAgICAgaWYgKFB5RGVsdGFfQ2hlY2socmlnaHQpKQorICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZWRpdmlkZV90aW1lZGVsdGFfdGltZWRlbHRhKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKXJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoUHlGbG9hdF9DaGVjayhyaWdodCkpCisgICAgICAgICAgICByZXN1bHQgPSB0cnVlZGl2aWRlX3RpbWVkZWx0YV9mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKWxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKHJpZ2h0KSkKKyAgICAgICAgICAgIHJlc3VsdCA9IHRydWVkaXZpZGVfdGltZWRlbHRhX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKWxlZnQsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IFB5X05vdEltcGxlbWVudGVkKQorICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGVsdGFfcmVtYWluZGVyKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnB5dXNfbGVmdDsKKyAgICBQeU9iamVjdCAqcHl1c19yaWdodDsKKyAgICBQeU9iamVjdCAqcHl1c19yZW1haW5kZXI7CisgICAgUHlPYmplY3QgKnJlbWFpbmRlcjsKKworICAgIGlmICghUHlEZWx0YV9DaGVjayhsZWZ0KSB8fCAhUHlEZWx0YV9DaGVjayhyaWdodCkpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgIH0KKworICAgIHB5dXNfbGVmdCA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcygoUHlEYXRlVGltZV9EZWx0YSAqKWxlZnQpOworICAgIGlmIChweXVzX2xlZnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBweXVzX3JpZ2h0ID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKChQeURhdGVUaW1lX0RlbHRhICopcmlnaHQpOworICAgIGlmIChweXVzX3JpZ2h0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHB5dXNfbGVmdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHB5dXNfcmVtYWluZGVyID0gUHlOdW1iZXJfUmVtYWluZGVyKHB5dXNfbGVmdCwgcHl1c19yaWdodCk7CisgICAgUHlfREVDUkVGKHB5dXNfbGVmdCk7CisgICAgUHlfREVDUkVGKHB5dXNfcmlnaHQpOworICAgIGlmIChweXVzX3JlbWFpbmRlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlbWFpbmRlciA9IG1pY3Jvc2Vjb25kc190b19kZWx0YShweXVzX3JlbWFpbmRlcik7CisgICAgUHlfREVDUkVGKHB5dXNfcmVtYWluZGVyKTsKKyAgICBpZiAocmVtYWluZGVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHJlbWFpbmRlcjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RlbHRhX2Rpdm1vZChQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0KQoreworICAgIFB5T2JqZWN0ICpweXVzX2xlZnQ7CisgICAgUHlPYmplY3QgKnB5dXNfcmlnaHQ7CisgICAgUHlPYmplY3QgKmRpdm1vZDsKKyAgICBQeU9iamVjdCAqZGVsdGE7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIGlmICghUHlEZWx0YV9DaGVjayhsZWZ0KSB8fCAhUHlEZWx0YV9DaGVjayhyaWdodCkpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgIH0KKworICAgIHB5dXNfbGVmdCA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcygoUHlEYXRlVGltZV9EZWx0YSAqKWxlZnQpOworICAgIGlmIChweXVzX2xlZnQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBweXVzX3JpZ2h0ID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKChQeURhdGVUaW1lX0RlbHRhICopcmlnaHQpOworICAgIGlmIChweXVzX3JpZ2h0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHB5dXNfbGVmdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRpdm1vZCA9IFB5TnVtYmVyX0Rpdm1vZChweXVzX2xlZnQsIHB5dXNfcmlnaHQpOworICAgIFB5X0RFQ1JFRihweXVzX2xlZnQpOworICAgIFB5X0RFQ1JFRihweXVzX3JpZ2h0KTsKKyAgICBpZiAoZGl2bW9kID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYXNzZXJ0KFB5VHVwbGVfU2l6ZShkaXZtb2QpID09IDIpOworICAgIGRlbHRhID0gbWljcm9zZWNvbmRzX3RvX2RlbHRhKFB5VHVwbGVfR0VUX0lURU0oZGl2bW9kLCAxKSk7CisgICAgaWYgKGRlbHRhID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGRpdm1vZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soMiwgUHlUdXBsZV9HRVRfSVRFTShkaXZtb2QsIDApLCBkZWx0YSk7CisgICAgUHlfREVDUkVGKGRlbHRhKTsKKyAgICBQeV9ERUNSRUYoZGl2bW9kKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBGb2xkIGluIHRoZSB2YWx1ZSBvZiB0aGUgdGFnICgic2Vjb25kcyIsICJ3ZWVrcyIsIGV0YykgY29tcG9uZW50IG9mIGEKICAqIHRpbWVkZWx0YSBjb25zdHJ1Y3Rvci4gIHNvZmFyIGlzIHRoZSAjIG9mIG1pY3Jvc2Vjb25kcyBhY2NvdW50ZWQgZm9yCiAgKiBzbyBmYXIsIGFuZCB0aGVyZSBhcmUgZmFjdG9yIG1pY3Jvc2Vjb25kcyBwZXIgY3VycmVudCB1bml0LCB0aGUgbnVtYmVyCkBAIC0yMDYxLDYgKzIyNTMsMzAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK2RlbHRhX3RvdGFsX3NlY29uZHMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnRvdGFsX3NlY29uZHM7CisgICAgUHlPYmplY3QgKnRvdGFsX21pY3Jvc2Vjb25kczsKKyAgICBQeU9iamVjdCAqb25lX21pbGxpb247CisKKyAgICB0b3RhbF9taWNyb3NlY29uZHMgPSBkZWx0YV90b19taWNyb3NlY29uZHMoKFB5RGF0ZVRpbWVfRGVsdGEgKilzZWxmKTsKKyAgICBpZiAodG90YWxfbWljcm9zZWNvbmRzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb25lX21pbGxpb24gPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMEwpOworICAgIGlmIChvbmVfbWlsbGlvbiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0b3RhbF9zZWNvbmRzID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh0b3RhbF9taWNyb3NlY29uZHMsIG9uZV9taWxsaW9uKTsKKworICAgIFB5X0RFQ1JFRih0b3RhbF9taWNyb3NlY29uZHMpOworICAgIFB5X0RFQ1JFRihvbmVfbWlsbGlvbik7CisgICAgcmV0dXJuIHRvdGFsX3NlY29uZHM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBkZWx0YV9yZWR1Y2UoUHlEYXRlVGltZV9EZWx0YSogc2VsZikKIHsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiT04iLCBQeV9UWVBFKHNlbGYpLCBkZWx0YV9nZXRzdGF0ZShzZWxmKSk7CkBAIC0yMDgyLDcgKzIyOTgsMTAgQEAKIH07CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkZWx0YV9tZXRob2RzW10gPSB7Ci0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKWRlbHRhX3JlZHVjZSwgICAgIE1FVEhfTk9BUkdTLAorICAgIHsidG90YWxfc2Vjb25kcyIsIChQeUNGdW5jdGlvbilkZWx0YV90b3RhbF9zZWNvbmRzLCBNRVRIX05PQVJHUywKKyAgICAgUHlEb2NfU1RSKCJUb3RhbCBzZWNvbmRzIGluIHRoZSBkdXJhdGlvbi4iKX0sCisKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZGVsdGFfcmVkdWNlLCBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCJfX3JlZHVjZV9fKCkgLT4gKGNscywgc3RhdGUpIil9LAogCiAgICAge05VTEwsICAgICAgTlVMTH0sCkBAIC0yMDk1LDggKzIzMTQsOCBAQAogICAgIGRlbHRhX2FkZCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfYWRkICovCiAgICAgZGVsdGFfc3VidHJhY3QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9zdWJ0cmFjdCAqLwogICAgIGRlbHRhX211bHRpcGx5LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfbXVsdGlwbHkgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX3JlbWFpbmRlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfZGl2bW9kICovCisgICAgZGVsdGFfcmVtYWluZGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9yZW1haW5kZXIgKi8KKyAgICBkZWx0YV9kaXZtb2QsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2Rpdm1vZCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfcG93ZXIgKi8KICAgICAodW5hcnlmdW5jKWRlbHRhX25lZ2F0aXZlLCAgICAgICAgICAgICAgICAgIC8qIG5iX25lZ2F0aXZlICovCiAgICAgKHVuYXJ5ZnVuYylkZWx0YV9wb3NpdGl2ZSwgICAgICAgICAgICAgICAgICAvKiBuYl9wb3NpdGl2ZSAqLwpAQCAtMjEyMiw3ICsyMzQxLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbmJfaW5wbGFjZV94b3IqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9pbnBsYWNlX29yKi8KICAgICBkZWx0YV9kaXZpZGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2Zsb29yX2RpdmlkZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfdHJ1ZV9kaXZpZGUgKi8KKyAgICBkZWx0YV90cnVlZGl2aWRlLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX3RydWVfZGl2aWRlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2Zsb29yX2RpdmlkZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV90cnVlX2RpdmlkZSAqLwogfTsKQEAgLTI1NTksMTEgKzI3NzgsMTEgQEAKIC8qCiAgICAgQm9ycm93ZWQgZnJvbSBzdHJpbmdvYmplY3QuYywgb3JpZ2luYWxseSBpdCB3YXMgc3RyaW5nX2hhc2goKQogKi8KLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBnZW5lcmljX2hhc2godW5zaWduZWQgY2hhciAqZGF0YSwgaW50IGxlbikKIHsKICAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lzdGVyIGxvbmcgeDsKKyAgICByZWdpc3RlciBQeV9oYXNoX3QgeDsKIAogICAgIHAgPSAodW5zaWduZWQgY2hhciAqKSBkYXRhOwogICAgIHggPSAqcCA8PCA3OwpAQCAtMjU3OSw3ICsyNzk4LDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICpkYXRlX2dldHN0YXRlKFB5RGF0ZVRpbWVfRGF0ZSAqc2VsZik7CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBkYXRlX2hhc2goUHlEYXRlVGltZV9EYXRlICpzZWxmKQogewogICAgIGlmIChzZWxmLT5oYXNoY29kZSA9PSAtMSkKQEAgLTI3ODYsNzYgKzMwMDUsNzMgQEAKICAgICByZXR1cm4gdHppbmZvX25vZ28oImRzdCIpOwogfQogCisKK3N0YXRpYyBQeU9iamVjdCAqYWRkX2RhdGV0aW1lX3RpbWVkZWx0YShQeURhdGVUaW1lX0RhdGVUaW1lICpkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGF0ZVRpbWVfRGVsdGEgKmRlbHRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmYWN0b3IpOworc3RhdGljIFB5T2JqZWN0ICpkYXRldGltZV91dGNvZmZzZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICopOworc3RhdGljIFB5T2JqZWN0ICpkYXRldGltZV9kc3QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICopOworCiBzdGF0aWMgUHlPYmplY3QgKgotdHppbmZvX2Zyb211dGMoUHlEYXRlVGltZV9UWkluZm8gKnNlbGYsIFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKmR0KQordHppbmZvX2Zyb211dGMoUHlEYXRlVGltZV9UWkluZm8gKnNlbGYsIFB5T2JqZWN0ICpkdCkKIHsKLSAgICBpbnQgeSwgbSwgZCwgaGgsIG1tLCBzcywgdXM7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9mZiA9IE5VTEwsICpkc3QgPSBOVUxMOworICAgIFB5RGF0ZVRpbWVfRGVsdGEgKmRlbHRhID0gTlVMTDsKIAotICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgaW50IG9mZiwgZHN0OwotICAgIGludCBub25lOwotICAgIGludCBkZWx0YTsKLQotICAgIGlmICghIFB5RGF0ZVRpbWVfQ2hlY2soZHQpKSB7CisgICAgaWYgKCFQeURhdGVUaW1lX0NoZWNrKGR0KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImZyb211dGM6IGFyZ3VtZW50IG11c3QgYmUgYSBkYXRldGltZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaWYgKCEgSEFTVFpJTkZPKGR0KSB8fCBkdC0+dHppbmZvICE9IChQeU9iamVjdCAqKXNlbGYpIHsKKyAgICBpZiAoR0VUX0RUX1RaSU5GTyhkdCkgIT0gKFB5T2JqZWN0ICopc2VsZikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImZyb211dGM6IGR0LnR6aW5mbyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiaXMgbm90IHNlbGYiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgb2ZmID0gY2FsbF91dGNvZmZzZXQoZHQtPnR6aW5mbywgKFB5T2JqZWN0ICopZHQsICZub25lKTsKLSAgICBpZiAob2ZmID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgb2ZmID0gZGF0ZXRpbWVfdXRjb2Zmc2V0KGR0LCBOVUxMKTsKKyAgICBpZiAob2ZmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChub25lKSB7CisgICAgaWYgKG9mZiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZnJvbXV0Yzogbm9uLU5vbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgInV0Y29mZnNldCgpIHJlc3VsdCByZXF1aXJlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBGYWlsOwogICAgIH0KIAotICAgIGRzdCA9IGNhbGxfZHN0KGR0LT50emluZm8sIChQeU9iamVjdCAqKWR0LCAmbm9uZSk7Ci0gICAgaWYgKGRzdCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobm9uZSkgeworICAgIGRzdCA9IGRhdGV0aW1lX2RzdChkdCwgTlVMTCk7CisgICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgaWYgKGRzdCA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZnJvbXV0Yzogbm9uLU5vbmUgIgogICAgICAgICAgICAgICAgICAgICAgICAgImRzdCgpIHJlc3VsdCByZXF1aXJlZCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBGYWlsOwogICAgIH0KIAotICAgIHkgPSBHRVRfWUVBUihkdCk7Ci0gICAgbSA9IEdFVF9NT05USChkdCk7Ci0gICAgZCA9IEdFVF9EQVkoZHQpOwotICAgIGhoID0gREFURV9HRVRfSE9VUihkdCk7Ci0gICAgbW0gPSBEQVRFX0dFVF9NSU5VVEUoZHQpOwotICAgIHNzID0gREFURV9HRVRfU0VDT05EKGR0KTsKLSAgICB1cyA9IERBVEVfR0VUX01JQ1JPU0VDT05EKGR0KTsKLQotICAgIGRlbHRhID0gb2ZmIC0gZHN0OwotICAgIG1tICs9IGRlbHRhOwotICAgIGlmICgobW0gPCAwIHx8IG1tID49IDYwKSAmJgotICAgICAgICBub3JtYWxpemVfZGF0ZXRpbWUoJnksICZtLCAmZCwgJmhoLCAmbW0sICZzcywgJnVzKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlc3VsdCA9IG5ld19kYXRldGltZSh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cywgZHQtPnR6aW5mbyk7CisgICAgZGVsdGEgPSAoUHlEYXRlVGltZV9EZWx0YSAqKWRlbHRhX3N1YnRyYWN0KG9mZiwgZHN0KTsKKyAgICBpZiAoZGVsdGEgPT0gTlVMTCkKKyAgICAgICAgZ290byBGYWlsOworICAgIHJlc3VsdCA9IGFkZF9kYXRldGltZV90aW1lZGVsdGEoKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKilkdCwgZGVsdGEsIDEpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGRzdCA9IGNhbGxfZHN0KGR0LT50emluZm8sIHJlc3VsdCwgJm5vbmUpOwotICAgIGlmIChkc3QgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBGYWlsOwotICAgIGlmIChub25lKQorCisgICAgUHlfREVDUkVGKGRzdCk7CisgICAgZHN0ID0gY2FsbF9kc3QoR0VUX0RUX1RaSU5GTyhkdCksIHJlc3VsdCk7CisgICAgaWYgKGRzdCA9PSBOVUxMKQorICAgICAgICBnb3RvIEZhaWw7CisgICAgaWYgKGRzdCA9PSBQeV9Ob25lKQogICAgICAgICBnb3RvIEluY29uc2lzdGVudDsKLSAgICBpZiAoZHN0ID09IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBtbSArPSBkc3Q7Ci0gICAgaWYgKChtbSA8IDAgfHwgbW0gPj0gNjApICYmCi0gICAgICAgIG5vcm1hbGl6ZV9kYXRldGltZSgmeSwgJm0sICZkLCAmaGgsICZtbSwgJnNzLCAmdXMpIDwgMCkKLSAgICAgICAgZ290byBGYWlsOwotICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgIHJlc3VsdCA9IG5ld19kYXRldGltZSh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cywgZHQtPnR6aW5mbyk7CisgICAgaWYgKGRlbHRhX2Jvb2woZGVsdGEpICE9IDApIHsKKyAgICAgICAgUHlPYmplY3QgKnRlbXAgPSByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IGFkZF9kYXRldGltZV90aW1lZGVsdGEoKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKilyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5RGF0ZVRpbWVfRGVsdGEgKilkc3QsIDEpOworICAgICAgICBQeV9ERUNSRUYodGVtcCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gRmFpbDsKKyAgICB9CisgICAgUHlfREVDUkVGKGRlbHRhKTsKKyAgICBQeV9ERUNSRUYoZHN0KTsKKyAgICBQeV9ERUNSRUYob2ZmKTsKICAgICByZXR1cm4gcmVzdWx0OwogCiBJbmNvbnNpc3RlbnQ6CkBAIC0yODY0LDcgKzMwODAsMTAgQEAKIAogICAgIC8qIGZhbGwgdGhydSB0byBmYWlsdXJlICovCiBGYWlsOgotICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIFB5X1hERUNSRUYob2ZmKTsKKyAgICBQeV9YREVDUkVGKGRzdCk7CisgICAgUHlfWERFQ1JFRihkZWx0YSk7CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yOTM0LDE1ICszMTUzLDE0IEBACiAgICAgIFB5RG9jX1NUUigiZGF0ZXRpbWUgLT4gc3RyaW5nIG5hbWUgb2YgdGltZSB6b25lLiIpfSwKIAogICAgIHsidXRjb2Zmc2V0IiwgICAgICAgKFB5Q0Z1bmN0aW9uKXR6aW5mb191dGNvZmZzZXQsICAgICAgICAgIE1FVEhfTywKLSAgICAgUHlEb2NfU1RSKCJkYXRldGltZSAtPiBtaW51dGVzIGVhc3Qgb2YgVVRDIChuZWdhdGl2ZSBmb3IgIgotICAgICAgICAgICAgICAgIndlc3Qgb2YgVVRDKS4iKX0sCisgICAgIFB5RG9jX1NUUigiZGF0ZXRpbWUgLT4gdGltZWRlbHRhIHNob3dpbmcgb2Zmc2V0IGZyb20gVVRDLCBuZWdhdGl2ZSAiCisgICAgICAgICAgICJ2YWx1ZXMgaW5kaWNhdGluZyBXZXN0IG9mIFVUQyIpfSwKIAogICAgIHsiZHN0IiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXR6aW5mb19kc3QsICAgICAgICAgICAgICAgIE1FVEhfTywKICAgICAgUHlEb2NfU1RSKCJkYXRldGltZSAtPiBEU1Qgb2Zmc2V0IGluIG1pbnV0ZXMgZWFzdCBvZiBVVEMuIil9LAogCiAgICAgeyJmcm9tdXRjIiwgICAgICAgICAoUHlDRnVuY3Rpb24pdHppbmZvX2Zyb211dGMsICAgICAgICAgICAgTUVUSF9PLAotICAgICBQeURvY19TVFIoImRhdGV0aW1lIC0+IHRpbWVkZWx0YSBzaG93aW5nIG9mZnNldCBmcm9tIFVUQywgbmVnYXRpdmUgIgotICAgICAgICAgICAidmFsdWVzIGluZGljYXRpbmcgV2VzdCBvZiBVVEMiKX0sCisgICAgIFB5RG9jX1NUUigiZGF0ZXRpbWUgaW4gVVRDIC0+IGRhdGV0aW1lIGluIGxvY2FsIHRpbWUuIil9LAogCiAgICAgeyJfX3JlZHVjZV9fIiwgIChQeUNGdW5jdGlvbil0emluZm9fcmVkdWNlLCAgICAgICAgICAgICBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCItPiAoY2xzLCBzdGF0ZSkiKX0sCkBAIC0yOTczLDcgKzMxOTEsNyBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAgLyogdHBfZmxhZ3MgKi8KICAgICB0emluZm9fZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC0yOTk1LDYgKzMyMTMsMjMxIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCitzdGF0aWMgY2hhciAqdGltZXpvbmVfa3dzW10gPSB7Im9mZnNldCIsICJuYW1lIiwgTlVMTH07CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aW1lem9uZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3KQoreworICAgIFB5T2JqZWN0ICpvZmZzZXQ7CisgICAgUHlPYmplY3QgKm5hbWUgPSBOVUxMOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxPITp0aW1lem9uZSIsIHRpbWV6b25lX2t3cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeURhdGVUaW1lX0RlbHRhVHlwZSwgJm9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVVuaWNvZGVfVHlwZSwgJm5hbWUpKQorICAgICAgICByZXR1cm4gbmV3X3RpbWV6b25lKG9mZnNldCwgbmFtZSk7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK3RpbWV6b25lX2RlYWxsb2MoUHlEYXRlVGltZV9UaW1lWm9uZSAqc2VsZikKK3sKKyAgICBQeV9DTEVBUihzZWxmLT5vZmZzZXQpOworICAgIFB5X0NMRUFSKHNlbGYtPm5hbWUpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0ICopc2VsZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aW1lem9uZV9yaWNoY29tcGFyZShQeURhdGVUaW1lX1RpbWVab25lICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgUHlEYXRlVGltZV9UaW1lWm9uZSAqb3RoZXIsIGludCBvcCkKK3sKKyAgICBpZiAob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgIH0KKyAgICByZXR1cm4gZGVsdGFfcmljaGNvbXBhcmUoc2VsZi0+b2Zmc2V0LCBvdGhlci0+b2Zmc2V0LCBvcCk7Cit9CisKK3N0YXRpYyBQeV9oYXNoX3QKK3RpbWV6b25lX2hhc2goUHlEYXRlVGltZV9UaW1lWm9uZSAqc2VsZikKK3sKKyAgICByZXR1cm4gZGVsdGFfaGFzaCgoUHlEYXRlVGltZV9EZWx0YSAqKXNlbGYtPm9mZnNldCk7Cit9CisKKy8qIENoZWNrIGFyZ3VtZW50IHR5cGUgcGFzc2VkIHRvIHR6bmFtZSwgdXRjb2Zmc2V0LCBvciBkc3QgbWV0aG9kcy4KKyAgIFJldHVybnMgMCBmb3IgZ29vZCBhcmd1bWVudC4gIFJldHVybnMgLTEgYW5kIHNldHMgZXhjZXB0aW9uIGluZm8KKyAgIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludAorX3RpbWV6b25lX2NoZWNrX2FyZ3VtZW50KFB5T2JqZWN0ICpkdCwgY29uc3QgY2hhciAqbWV0aCkKK3sKKyAgICBpZiAoZHQgPT0gUHlfTm9uZSB8fCBQeURhdGVUaW1lX0NoZWNrKGR0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIiVzKGR0KSBhcmd1bWVudCBtdXN0IGJlIGEgZGF0ZXRpbWUgaW5zdGFuY2UiCisgICAgICAgICAgICAgICAgICIgb3IgTm9uZSwgbm90ICUuMjAwcyIsIG1ldGgsIFB5X1RZUEUoZHQpLT50cF9uYW1lKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aW1lem9uZV9yZXByKFB5RGF0ZVRpbWVfVGltZVpvbmUgKnNlbGYpCit7CisgICAgLyogTm90ZSB0aGF0IGFsdGhvdWdoIHRpbWV6b25lIGlzIG5vdCBzdWJjbGFzc2FibGUsIGl0IGlzIGNvbnZlbmllbnQKKyAgICAgICB0byB1c2UgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSBoZXJlLiAqLworICAgIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisKKyAgICBpZiAoKChQeU9iamVjdCAqKXNlbGYpID09IFB5RGF0ZVRpbWVfVGltZVpvbmVfVVRDKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzLnV0YyIsIHR5cGVfbmFtZSk7CisKKyAgICBpZiAoc2VsZi0+bmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVSKSIsIHR5cGVfbmFtZSwgc2VsZi0+b2Zmc2V0KTsKKworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVIsICVSKSIsIHR5cGVfbmFtZSwgc2VsZi0+b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5uYW1lKTsKK30KKworCitzdGF0aWMgUHlPYmplY3QgKgordGltZXpvbmVfc3RyKFB5RGF0ZVRpbWVfVGltZVpvbmUgKnNlbGYpCit7CisgICAgY2hhciBidWZbMTBdOworICAgIGludCBob3VycywgbWludXRlcywgc2Vjb25kczsKKyAgICBQeU9iamVjdCAqb2Zmc2V0OworICAgIGNoYXIgc2lnbjsKKworICAgIGlmIChzZWxmLT5uYW1lICE9IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKHNlbGYtPm5hbWUpOworICAgICAgICByZXR1cm4gc2VsZi0+bmFtZTsKKyAgICB9CisgICAgLyogT2Zmc2V0IGlzIG5vcm1hbGl6ZWQsIHNvIGl0IGlzIG5lZ2F0aXZlIGlmIGRheXMgPCAwICovCisgICAgaWYgKEdFVF9URF9EQVlTKHNlbGYtPm9mZnNldCkgPCAwKSB7CisgICAgICAgIHNpZ24gPSAnLSc7CisgICAgICAgIG9mZnNldCA9IGRlbHRhX25lZ2F0aXZlKChQeURhdGVUaW1lX0RlbHRhICopc2VsZi0+b2Zmc2V0KTsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzaWduID0gJysnOworICAgICAgICBvZmZzZXQgPSBzZWxmLT5vZmZzZXQ7CisgICAgICAgIFB5X0lOQ1JFRihvZmZzZXQpOworICAgIH0KKyAgICAvKiBPZmZzZXQgaXMgbm90IG5lZ2F0aXZlIGhlcmUuICovCisgICAgc2Vjb25kcyA9IEdFVF9URF9TRUNPTkRTKG9mZnNldCk7CisgICAgUHlfREVDUkVGKG9mZnNldCk7CisgICAgbWludXRlcyA9IGRpdm1vZChzZWNvbmRzLCA2MCwgJnNlY29uZHMpOworICAgIGhvdXJzID0gZGl2bW9kKG1pbnV0ZXMsIDYwLCAmbWludXRlcyk7CisgICAgYXNzZXJ0KHNlY29uZHMgPT0gMCk7CisgICAgLyogWFhYIGlnbm9yZSBzdWItbWludXRlIGRhdGEsIGN1cmVudGx5IG5vdCBhbGxvd2VkLiAqLworICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlVUQyVjJTAyZDolMDJkIiwgc2lnbiwgaG91cnMsIG1pbnV0ZXMpOworCisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGJ1Zik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aW1lem9uZV90em5hbWUoUHlEYXRlVGltZV9UaW1lWm9uZSAqc2VsZiwgUHlPYmplY3QgKmR0KQoreworICAgIGlmIChfdGltZXpvbmVfY2hlY2tfYXJndW1lbnQoZHQsICJ0em5hbWUiKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gdGltZXpvbmVfc3RyKHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGltZXpvbmVfdXRjb2Zmc2V0KFB5RGF0ZVRpbWVfVGltZVpvbmUgKnNlbGYsIFB5T2JqZWN0ICpkdCkKK3sKKyAgICBpZiAoX3RpbWV6b25lX2NoZWNrX2FyZ3VtZW50KGR0LCAidXRjb2Zmc2V0IikgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKHNlbGYtPm9mZnNldCk7CisgICAgcmV0dXJuIHNlbGYtPm9mZnNldDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RpbWV6b25lX2RzdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmR0KQoreworICAgIGlmIChfdGltZXpvbmVfY2hlY2tfYXJndW1lbnQoZHQsICJkc3QiKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RpbWV6b25lX2Zyb211dGMoUHlEYXRlVGltZV9UaW1lWm9uZSAqc2VsZiwgUHlEYXRlVGltZV9EYXRlVGltZSAqZHQpCit7CisgICAgaWYgKCFQeURhdGVUaW1lX0NoZWNrKGR0KSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImZyb211dGM6IGFyZ3VtZW50IG11c3QgYmUgYSBkYXRldGltZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFIQVNUWklORk8oZHQpIHx8IGR0LT50emluZm8gIT0gKFB5T2JqZWN0ICopc2VsZikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImZyb211dGM6IGR0LnR6aW5mbyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiaXMgbm90IHNlbGYiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGFkZF9kYXRldGltZV90aW1lZGVsdGEoZHQsIChQeURhdGVUaW1lX0RlbHRhICopc2VsZi0+b2Zmc2V0LCAxKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3RpbWV6b25lX2dldGluaXRhcmdzKFB5RGF0ZVRpbWVfVGltZVpvbmUgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPm5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKSIsIHNlbGYtPm9mZnNldCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPTykiLCBzZWxmLT5vZmZzZXQsIHNlbGYtPm5hbWUpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgdGltZXpvbmVfbWV0aG9kc1tdID0geworICAgIHsidHpuYW1lIiwgKFB5Q0Z1bmN0aW9uKXRpbWV6b25lX3R6bmFtZSwgTUVUSF9PLAorICAgICBQeURvY19TVFIoIklmIG5hbWUgaXMgc3BlY2lmaWVkIHdoZW4gdGltZXpvbmUgaXMgY3JlYXRlZCwgcmV0dXJucyB0aGUgbmFtZS4iCisgICAgICAgICAgICAgICAiICBPdGhlcndpc2UgcmV0dXJucyBvZmZzZXQgYXMgJ1VUQygrfC0pSEg6TU0nLiIpfSwKKworICAgIHsidXRjb2Zmc2V0IiwgKFB5Q0Z1bmN0aW9uKXRpbWV6b25lX3V0Y29mZnNldCwgTUVUSF9PLAorICAgICBQeURvY19TVFIoIlJldHVybiBmaXhlZCBvZmZzZXQuIil9LAorCisgICAgeyJkc3QiLCAoUHlDRnVuY3Rpb24pdGltZXpvbmVfZHN0LCBNRVRIX08sCisgICAgIFB5RG9jX1NUUigiUmV0dXJuIE5vbmUuIil9LAorCisgICAgeyJmcm9tdXRjIiwgKFB5Q0Z1bmN0aW9uKXRpbWV6b25lX2Zyb211dGMsIE1FVEhfTywKKyAgICAgUHlEb2NfU1RSKCJkYXRldGltZSBpbiBVVEMgLT4gZGF0ZXRpbWUgaW4gbG9jYWwgdGltZS4iKX0sCisKKyAgICB7Il9fZ2V0aW5pdGFyZ3NfXyIsIChQeUNGdW5jdGlvbil0aW1lem9uZV9nZXRpbml0YXJncywgTUVUSF9OT0FSR1MsCisgICAgIFB5RG9jX1NUUigicGlja2xlIHN1cHBvcnQiKX0sCisKKyAgICB7TlVMTCwgTlVMTH0KK307CisKK3N0YXRpYyBjaGFyIHRpbWV6b25lX2RvY1tdID0KK1B5RG9jX1NUUigiRml4ZWQgb2Zmc2V0IGZyb20gVVRDIGltcGxlbWVudGF0aW9uIG9mIHR6aW5mby4iKTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RpbWVab25lVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAiZGF0ZXRpbWUudGltZXpvbmUiLCAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihQeURhdGVUaW1lX1RpbWVab25lKSwgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAoZGVzdHJ1Y3Rvcil0aW1lem9uZV9kZWFsbG9jLCAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAocmVwcmZ1bmMpdGltZXpvbmVfcmVwciwgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIChoYXNoZnVuYyl0aW1lem9uZV9oYXNoLCAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAocmVwcmZ1bmMpdGltZXpvbmVfc3RyLCAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIHRpbWV6b25lX2RvYywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAocmljaGNtcGZ1bmMpdGltZXpvbmVfcmljaGNvbXBhcmUsLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLworICAgIHRpbWV6b25lX21ldGhvZHMsICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSwgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLworICAgIHRpbWV6b25lX25ldywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KK307CisKIC8qCiAgKiBQeURhdGVUaW1lX1RpbWUgaW1wbGVtZW50YXRpb24uCiAgKi8KQEAgLTMxMjgsMjEgKzM1NzEsMTggQEAKIAogLyogVGhlc2UgYXJlIGFsbCBNRVRIX05PQVJHUywgc28gZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgYXJnbGlzdC4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi10aW1lX3V0Y29mZnNldChQeURhdGVUaW1lX1RpbWUgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAgICByZXR1cm4gb2Zmc2V0X2FzX3RpbWVkZWx0YShIQVNUWklORk8oc2VsZikgPyBzZWxmLT50emluZm8gOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1dGNvZmZzZXQiLCBQeV9Ob25lKTsKK3RpbWVfdXRjb2Zmc2V0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKSB7CisgICAgcmV0dXJuIGNhbGxfdXRjb2Zmc2V0KEdFVF9USU1FX1RaSU5GTyhzZWxmKSwgUHlfTm9uZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi10aW1lX2RzdChQeURhdGVUaW1lX1RpbWUgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAgICByZXR1cm4gb2Zmc2V0X2FzX3RpbWVkZWx0YShIQVNUWklORk8oc2VsZikgPyBzZWxmLT50emluZm8gOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc3QiLCBQeV9Ob25lKTsKK3RpbWVfZHN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKSB7CisgICAgcmV0dXJuIGNhbGxfZHN0KEdFVF9USU1FX1RaSU5GTyhzZWxmKSwgUHlfTm9uZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX3R6bmFtZShQeURhdGVUaW1lX1RpbWUgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAgICByZXR1cm4gY2FsbF90em5hbWUoSEFTVFpJTkZPKHNlbGYpID8gc2VsZi0+dHppbmZvIDogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSk7CisgICAgcmV0dXJuIGNhbGxfdHpuYW1lKEdFVF9USU1FX1RaSU5GTyhzZWxmKSwgUHlfTm9uZSk7CiB9CiAKIC8qCkBAIC0zMTk3LDcgKzM2MzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9NSU5VVEUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVfR0VUX1NFQ09ORChzZWxmKSk7CiAKLSAgICBpZiAocmVzdWx0ID09IE5VTEwgfHwgISBIQVNUWklORk8oc2VsZikgfHwgc2VsZi0+dHppbmZvID09IFB5X05vbmUpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMIHx8ICFIQVNUWklORk8oc2VsZikgfHwgc2VsZi0+dHppbmZvID09IFB5X05vbmUpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvKiBXZSBuZWVkIHRvIGFwcGVuZCB0aGUgVVRDIG9mZnNldC4gKi8KQEAgLTMyMjQsNyArMzY2NCw3IEBACiAKICAgICAvKiBQeXRob24ncyBzdHJmdGltZSBkb2VzIGluc2FuZSB0aGluZ3Mgd2l0aCB0aGUgeWVhciBwYXJ0IG9mIHRoZQogICAgICAqIHRpbWV0dXBsZS4gIFRoZSB5ZWFyIGlzIGZvcmNlZCB0byAodGhlIG90aGVyd2lzZSBub25zZW5zaWNhbCkKLSAgICAgKiAxOTAwIHRvIHdvcm0gYXJvdW5kIHRoYXQuCisgICAgICogMTkwMCB0byB3b3JrIGFyb3VuZCB0aGF0LgogICAgICAqLwogICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgiaWlpaWlpaWlpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgMTkwMCwgMSwgMSwgLyogeWVhciwgbW9udGgsIGRheSAqLwpAQCAtMzI0OCw5OCArMzY4OCwxMDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKIHsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2Zmc2V0MSwgKm9mZnNldDI7CiAgICAgaW50IGRpZmY7Ci0gICAgbmFpdmV0eSBuMSwgbjI7Ci0gICAgaW50IG9mZnNldDEsIG9mZnNldDI7CiAKICAgICBpZiAoISBQeVRpbWVfQ2hlY2sob3RoZXIpKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7CiAgICAgICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKICAgICB9Ci0gICAgaWYgKGNsYXNzaWZ5X3R3b191dGNvZmZzZXRzKHNlbGYsICZvZmZzZXQxLCAmbjEsIFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyLCAmb2Zmc2V0MiwgJm4yLCBQeV9Ob25lKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzc2VydChuMSAhPSBPRkZTRVRfVU5LTk9XTiAmJiBuMiAhPSBPRkZTRVRfVU5LTk9XTik7Ci0gICAgLyogSWYgdGhleSdyZSBib3RoIG5haXZlLCBvciBib3RoIGF3YXJlIGFuZCBoYXZlIHRoZSBzYW1lIG9mZnNldHMsCi0gICAgICogd2UgZ2V0IG9mZiBjaGVhcC4gIE5vdGUgdGhhdCBpZiB0aGV5J3JlIGJvdGggbmFpdmUsIG9mZnNldDEgPT0KLSAgICAgKiBvZmZzZXQyID09IDAgYXQgdGhpcyBwb2ludC4KLSAgICAgKi8KLSAgICBpZiAobjEgPT0gbjIgJiYgb2Zmc2V0MSA9PSBvZmZzZXQyKSB7CisKKyAgICBpZiAoR0VUX1RJTUVfVFpJTkZPKHNlbGYpID09IEdFVF9USU1FX1RaSU5GTyhvdGhlcikpIHsKICAgICAgICAgZGlmZiA9IG1lbWNtcCgoKFB5RGF0ZVRpbWVfVGltZSAqKXNlbGYpLT5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICgoUHlEYXRlVGltZV9UaW1lICopb3RoZXIpLT5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgIF9QeURhdGVUaW1lX1RJTUVfREFUQVNJWkUpOwogICAgICAgICByZXR1cm4gZGlmZl90b19ib29sKGRpZmYsIG9wKTsKICAgICB9Ci0KLSAgICBpZiAobjEgPT0gT0ZGU0VUX0FXQVJFICYmIG4yID09IE9GRlNFVF9BV0FSRSkgewotICAgICAgICBhc3NlcnQob2Zmc2V0MSAhPSBvZmZzZXQyKTsgICAgICAgICAgICAgLyogZWxzZSBsYXN0ICJpZiIgaGFuZGxlZCBpdCAqLwotICAgICAgICAvKiBDb252ZXJ0IGV2ZXJ5dGhpbmcgZXhjZXB0IG1pY3Jvc2Vjb25kcyB0byBzZWNvbmRzLiAgVGhlc2UKLSAgICAgICAgICogY2FuJ3Qgb3ZlcmZsb3cgKG5vIG1vcmUgdGhhbiB0aGUgIyBvZiBzZWNvbmRzIGluIDIgZGF5cykuCi0gICAgICAgICAqLwotICAgICAgICBvZmZzZXQxID0gVElNRV9HRVRfSE9VUihzZWxmKSAqIDM2MDAgKwotICAgICAgICAgICAgICAgICAgKFRJTUVfR0VUX01JTlVURShzZWxmKSAtIG9mZnNldDEpICogNjAgKwotICAgICAgICAgICAgICAgICAgVElNRV9HRVRfU0VDT05EKHNlbGYpOwotICAgICAgICBvZmZzZXQyID0gVElNRV9HRVRfSE9VUihvdGhlcikgKiAzNjAwICsKLSAgICAgICAgICAgICAgICAgIChUSU1FX0dFVF9NSU5VVEUob3RoZXIpIC0gb2Zmc2V0MikgKiA2MCArCi0gICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQob3RoZXIpOwotICAgICAgICBkaWZmID0gb2Zmc2V0MSAtIG9mZnNldDI7CisgICAgb2Zmc2V0MSA9IHRpbWVfdXRjb2Zmc2V0KHNlbGYsIE5VTEwpOworICAgIGlmIChvZmZzZXQxID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG9mZnNldDIgPSB0aW1lX3V0Y29mZnNldChvdGhlciwgTlVMTCk7CisgICAgaWYgKG9mZnNldDIgPT0gTlVMTCkKKyAgICAgICAgZ290byBkb25lOworICAgIC8qIElmIHRoZXkncmUgYm90aCBuYWl2ZSwgb3IgYm90aCBhd2FyZSBhbmQgaGF2ZSB0aGUgc2FtZSBvZmZzZXRzLAorICAgICAqIHdlIGdldCBvZmYgY2hlYXAuICBOb3RlIHRoYXQgaWYgdGhleSdyZSBib3RoIG5haXZlLCBvZmZzZXQxID09CisgICAgICogb2Zmc2V0MiA9PSBQeV9Ob25lIGF0IHRoaXMgcG9pbnQuCisgICAgICovCisgICAgaWYgKChvZmZzZXQxID09IG9mZnNldDIpIHx8CisgICAgICAgIChQeURlbHRhX0NoZWNrKG9mZnNldDEpICYmIFB5RGVsdGFfQ2hlY2sob2Zmc2V0MikgJiYKKyAgICAgICAgIGRlbHRhX2NtcChvZmZzZXQxLCBvZmZzZXQyKSA9PSAwKSkgeworICAgICAgICBkaWZmID0gbWVtY21wKCgoUHlEYXRlVGltZV9UaW1lICopc2VsZiktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgKChQeURhdGVUaW1lX1RpbWUgKilvdGhlciktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgX1B5RGF0ZVRpbWVfVElNRV9EQVRBU0laRSk7CisgICAgICAgIHJlc3VsdCA9IGRpZmZfdG9fYm9vbChkaWZmLCBvcCk7CisgICAgfQorICAgIC8qIFRoZSBoYXJkIGNhc2U6IGJvdGggYXdhcmUgd2l0aCBkaWZmZXJlbnQgVVRDIG9mZnNldHMgKi8KKyAgICBlbHNlIGlmIChvZmZzZXQxICE9IFB5X05vbmUgJiYgb2Zmc2V0MiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGludCBvZmZzZWNzMSwgb2Zmc2VjczI7CisgICAgICAgIGFzc2VydChvZmZzZXQxICE9IG9mZnNldDIpOyAvKiBlbHNlIGxhc3QgImlmIiBoYW5kbGVkIGl0ICovCisgICAgICAgIG9mZnNlY3MxID0gVElNRV9HRVRfSE9VUihzZWxmKSAqIDM2MDAgKworICAgICAgICAgICAgICAgICAgIFRJTUVfR0VUX01JTlVURShzZWxmKSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQoc2VsZikgLQorICAgICAgICAgICAgICAgICAgIEdFVF9URF9EQVlTKG9mZnNldDEpICogODY0MDAgLQorICAgICAgICAgICAgICAgICAgIEdFVF9URF9TRUNPTkRTKG9mZnNldDEpOworICAgICAgICBvZmZzZWNzMiA9IFRJTUVfR0VUX0hPVVIob3RoZXIpICogMzYwMCArCisgICAgICAgICAgICAgICAgICAgVElNRV9HRVRfTUlOVVRFKG90aGVyKSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQob3RoZXIpIC0KKyAgICAgICAgICAgICAgICAgICBHRVRfVERfREFZUyhvZmZzZXQyKSAqIDg2NDAwIC0KKyAgICAgICAgICAgICAgICAgICBHRVRfVERfU0VDT05EUyhvZmZzZXQyKTsKKyAgICAgICAgZGlmZiA9IG9mZnNlY3MxIC0gb2Zmc2VjczI7CiAgICAgICAgIGlmIChkaWZmID09IDApCiAgICAgICAgICAgICBkaWZmID0gVElNRV9HRVRfTUlDUk9TRUNPTkQoc2VsZikgLQogICAgICAgICAgICAgICAgICAgIFRJTUVfR0VUX01JQ1JPU0VDT05EKG90aGVyKTsKLSAgICAgICAgcmV0dXJuIGRpZmZfdG9fYm9vbChkaWZmLCBvcCk7CisgICAgICAgIHJlc3VsdCA9IGRpZmZfdG9fYm9vbChkaWZmLCBvcCk7CiAgICAgfQotCi0gICAgYXNzZXJ0KG4xICE9IG4yKTsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgY29tcGFyZSBvZmZzZXQtbmFpdmUgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgIm9mZnNldC1hd2FyZSB0aW1lcyIpOwotICAgIHJldHVybiBOVUxMOworICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGNvbXBhcmUgb2Zmc2V0LW5haXZlIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0LWF3YXJlIHRpbWVzIik7CisgICAgfQorIGRvbmU6CisgICAgUHlfREVDUkVGKG9mZnNldDEpOworICAgIFB5X1hERUNSRUYob2Zmc2V0Mik7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIHRpbWVfaGFzaChQeURhdGVUaW1lX1RpbWUgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPmhhc2hjb2RlID09IC0xKSB7Ci0gICAgICAgIG5haXZldHkgbjsKLSAgICAgICAgaW50IG9mZnNldDsKLSAgICAgICAgUHlPYmplY3QgKnRlbXA7CisgICAgICAgIFB5T2JqZWN0ICpvZmZzZXQ7CiAKLSAgICAgICAgbiA9IGNsYXNzaWZ5X3V0Y29mZnNldCgoUHlPYmplY3QgKilzZWxmLCBQeV9Ob25lLCAmb2Zmc2V0KTsKLSAgICAgICAgYXNzZXJ0KG4gIT0gT0ZGU0VUX1VOS05PV04pOwotICAgICAgICBpZiAobiA9PSBPRkZTRVRfRVJST1IpCisgICAgICAgIG9mZnNldCA9IHRpbWVfdXRjb2Zmc2V0KChQeU9iamVjdCAqKXNlbGYsIE5VTEwpOworCisgICAgICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICAvKiBSZWR1Y2UgdGhpcyB0byBhIGhhc2ggb2YgYW5vdGhlciBvYmplY3QuICovCi0gICAgICAgIGlmIChvZmZzZXQgPT0gMCkgeworICAgICAgICBpZiAob2Zmc2V0ID09IFB5X05vbmUpCiAgICAgICAgICAgICBzZWxmLT5oYXNoY29kZSA9IGdlbmVyaWNfaGFzaCgKICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNlbGYtPmRhdGEsIF9QeURhdGVUaW1lX1RJTUVfREFUQVNJWkUpOwotICAgICAgICAgICAgcmV0dXJuIHNlbGYtPmhhc2hjb2RlOwotICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IGhvdXI7Ci0gICAgICAgICAgICBpbnQgbWludXRlOwotCi0gICAgICAgICAgICBhc3NlcnQobiA9PSBPRkZTRVRfQVdBUkUpOworICAgICAgICAgICAgUHlPYmplY3QgKnRlbXAxLCAqdGVtcDI7CisgICAgICAgICAgICBpbnQgc2Vjb25kcywgbWljcm9zZWNvbmRzOwogICAgICAgICAgICAgYXNzZXJ0KEhBU1RaSU5GTyhzZWxmKSk7Ci0gICAgICAgICAgICBob3VyID0gZGl2bW9kKFRJTUVfR0VUX0hPVVIoc2VsZikgKiA2MCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVElNRV9HRVRfTUlOVVRFKHNlbGYpIC0gb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICA2MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm1pbnV0ZSk7Ci0gICAgICAgICAgICBpZiAoMCA8PSBob3VyICYmIGhvdXIgPCAyNCkKLSAgICAgICAgICAgICAgICB0ZW1wID0gbmV3X3RpbWUoaG91ciwgbWludXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJTUVfR0VUX01JQ1JPU0VDT05EKHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB0ZW1wID0gUHlfQnVpbGRWYWx1ZSgiaWlpaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyLCBtaW51dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9NSUNST1NFQ09ORChzZWxmKSk7CisgICAgICAgICAgICBzZWNvbmRzID0gVElNRV9HRVRfSE9VUihzZWxmKSAqIDM2MDAgKworICAgICAgICAgICAgICAgICAgICAgIFRJTUVfR0VUX01JTlVURShzZWxmKSAqIDYwICsKKyAgICAgICAgICAgICAgICAgICAgICBUSU1FX0dFVF9TRUNPTkQoc2VsZik7CisgICAgICAgICAgICBtaWNyb3NlY29uZHMgPSBUSU1FX0dFVF9NSUNST1NFQ09ORChzZWxmKTsKKyAgICAgICAgICAgIHRlbXAxID0gbmV3X2RlbHRhKDAsIHNlY29uZHMsIG1pY3Jvc2Vjb25kcywgMSk7CisgICAgICAgICAgICBpZiAodGVtcDEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlbXAyID0gZGVsdGFfc3VidHJhY3QodGVtcDEsIG9mZnNldCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodGVtcDEpOworICAgICAgICAgICAgaWYgKHRlbXAyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLT5oYXNoY29kZSA9IFB5T2JqZWN0X0hhc2godGVtcDIpOworICAgICAgICAgICAgUHlfREVDUkVGKHRlbXAyKTsKICAgICAgICAgfQotICAgICAgICBpZiAodGVtcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzZWxmLT5oYXNoY29kZSA9IFB5T2JqZWN0X0hhc2godGVtcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7Ci0gICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG9mZnNldCk7CiAgICAgfQogICAgIHJldHVybiBzZWxmLT5oYXNoY29kZTsKIH0KQEAgLTMzNjgsMTAgKzM4MTgsMTAgQEAKIH0KIAogc3RhdGljIGludAotdGltZV9ib29sKFB5RGF0ZVRpbWVfVGltZSAqc2VsZikKK3RpbWVfYm9vbChQeU9iamVjdCAqc2VsZikKIHsKLSAgICBpbnQgb2Zmc2V0OwotICAgIGludCBub25lOworICAgIFB5T2JqZWN0ICpvZmZzZXQsICp0emluZm87CisgICAgaW50IG9mZnNlY3MgPSAwOwogCiAgICAgaWYgKFRJTUVfR0VUX1NFQ09ORChzZWxmKSB8fCBUSU1FX0dFVF9NSUNST1NFQ09ORChzZWxmKSkgewogICAgICAgICAvKiBTaW5jZSB1dGNvZmZzZXQgaXMgaW4gd2hvbGUgbWludXRlcywgbm90aGluZyBjYW4KQEAgLTMzNzksMTMgKzM4MjksMTUgQEAKICAgICAgICAgICovCiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBvZmZzZXQgPSAwOwotICAgIGlmIChIQVNUWklORk8oc2VsZikgJiYgc2VsZi0+dHppbmZvICE9IFB5X05vbmUpIHsKLSAgICAgICAgb2Zmc2V0ID0gY2FsbF91dGNvZmZzZXQoc2VsZi0+dHppbmZvLCBQeV9Ob25lLCAmbm9uZSk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICB0emluZm8gPSBHRVRfVElNRV9UWklORk8oc2VsZik7CisgICAgaWYgKHR6aW5mbyAhPSBQeV9Ob25lKSB7CisgICAgICAgIG9mZnNldCA9IGNhbGxfdXRjb2Zmc2V0KHR6aW5mbywgUHlfTm9uZSk7CisgICAgICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgb2Zmc2VjcyA9IEdFVF9URF9EQVlTKG9mZnNldCkqODY0MDAgKyBHRVRfVERfU0VDT05EUyhvZmZzZXQpOworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICB9Ci0gICAgcmV0dXJuIChUSU1FX0dFVF9NSU5VVEUoc2VsZikgLSBvZmZzZXQgKyBUSU1FX0dFVF9IT1VSKHNlbGYpKjYwKSAhPSAwOworICAgIHJldHVybiAoVElNRV9HRVRfTUlOVVRFKHNlbGYpKjYwIC0gb2Zmc2VjcyArIFRJTUVfR0VUX0hPVVIoc2VsZikqMzYwMCkgIT0gMDsKIH0KIAogLyogUGlja2xlIHN1cHBvcnQsIGEgc2ltcGxlIHVzZSBvZiBfX3JlZHVjZV9fLiAqLwpAQCAtMzcxNiwzNyArNDE2OCwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoUHlPYmplY3QgKmNscywgVE1fRlVOQyBmLCBQeU9iamVjdCAqdHppbmZvKQogewotI2lmZGVmIEhBVkVfR0VUVElNRU9GREFZCi0gICAgc3RydWN0IHRpbWV2YWwgdDsKLQotI2lmZGVmIEdFVFRJTUVPRkRBWV9OT19UWgotICAgIGdldHRpbWVvZmRheSgmdCk7Ci0jZWxzZQotICAgIGdldHRpbWVvZmRheSgmdCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwotI2VuZGlmCisgICAgX1B5VGltZV90aW1ldmFsIHQ7CisgICAgX1B5VGltZV9nZXR0aW1lb2ZkYXkoJnQpOwogICAgIHJldHVybiBkYXRldGltZV9mcm9tX3RpbWV0X2FuZF91cyhjbHMsIGYsIHQudHZfc2VjLCAoaW50KXQudHZfdXNlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKLQotI2Vsc2UgICAvKiAhIEhBVkVfR0VUVElNRU9GREFZICovCi0gICAgLyogTm8gZmxhdm9yIG9mIGdldHRpbWVvZmRheSBleGlzdHMgb24gdGhpcyBwbGF0Zm9ybS4gIFB5dGhvbidzCi0gICAgICogdGltZS50aW1lKCkgZG9lcyBhIGxvdCBvZiBvdGhlciBwbGF0Zm9ybSB0cmlja3MgdG8gZ2V0IHRoZQotICAgICAqIGJlc3QgdGltZSBpdCBjYW4gb24gdGhlIHBsYXRmb3JtLCBhbmQgd2UncmUgbm90IGdvaW5nIHRvIGRvCi0gICAgICogYmV0dGVyIHRoYW4gdGhhdCAoaWYgd2UgY291bGQsIHRoZSBiZXR0ZXIgY29kZSB3b3VsZCBiZWxvbmcKLSAgICAgKiBpbiB0aW1lLnRpbWUoKSEpICBXZSdyZSBsaW1pdGVkIGJ5IHRoZSBwcmVjaXNpb24gb2YgYSBkb3VibGUsCi0gICAgICogdGhvdWdoLgotICAgICAqLwotICAgIFB5T2JqZWN0ICp0aW1lOwotICAgIGRvdWJsZSBkdGltZTsKLQotICAgIHRpbWUgPSB0aW1lX3RpbWUoKTsKLSAgICBpZiAodGltZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkdGltZSA9IFB5RmxvYXRfQXNEb3VibGUodGltZSk7Ci0gICAgUHlfREVDUkVGKHRpbWUpOwotICAgIGlmIChkdGltZSA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBkYXRldGltZV9mcm9tX3RpbWVzdGFtcChjbHMsIGYsIGR0aW1lLCB0emluZm8pOwotI2VuZGlmICAvKiAhIEhBVkVfR0VUVElNRU9GREFZICovCiB9CiAKIC8qIFJldHVybiBiZXN0IHBvc3NpYmxlIGxvY2FsIHRpbWUgLS0gdGhpcyBpc24ndCBjb25zdHJhaW5lZCBieSB0aGUKQEAgLTM4MjcsODIgKzQyNTIsMjMgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0vKiBSZXR1cm4gbmV3IGRhdGV0aW1lIGZyb20gdGltZS5zdHJwdGltZSgpLiAqLworLyogUmV0dXJuIG5ldyBkYXRldGltZSBmcm9tIF9zdHJwdGltZS5zdHJwdGltZV9kYXRldGltZSgpLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX3N0cnB0aW1lKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTCwgKm9iaiwgKnN0ID0gTlVMTCwgKmZyYWMgPSBOVUxMOwogICAgIGNvbnN0IFB5X1VOSUNPREUgKnN0cmluZywgKmZvcm1hdDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidXU6c3RycHRpbWUiLCAmc3RyaW5nLCAmZm9ybWF0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobW9kdWxlID09IE5VTEwgJiYKLSAgICAgICAgKG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2soIl9zdHJwdGltZSIpKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qIF9zdHJwdGltZS5fc3RycHRpbWUgcmV0dXJucyBhIHR3by1lbGVtZW50IHR1cGxlLiAgVGhlIGZpcnN0Ci0gICAgICAgZWxlbWVudCBpcyBhIHRpbWUuc3RydWN0X3RpbWUgb2JqZWN0LiAgVGhlIHNlY29uZCBpcyB0aGUKLSAgICAgICBtaWNyb3NlY29uZHMgKHdoaWNoIGFyZSBub3QgZGVmaW5lZCBmb3IgdGltZS5zdHJ1Y3RfdGltZSkuICovCi0gICAgb2JqID0gUHlPYmplY3RfQ2FsbE1ldGhvZChtb2R1bGUsICJfc3RycHRpbWUiLCAidXUiLCBzdHJpbmcsIGZvcm1hdCk7Ci0gICAgaWYgKG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGludCBpLCBnb29kX3RpbWV0dXBsZSA9IDE7Ci0gICAgICAgIGxvbmcgaW50IGlhWzddOwotICAgICAgICBpZiAoUHlTZXF1ZW5jZV9DaGVjayhvYmopICYmIFB5U2VxdWVuY2VfU2l6ZShvYmopID09IDIpIHsKLSAgICAgICAgICAgIHN0ID0gUHlTZXF1ZW5jZV9HZXRJdGVtKG9iaiwgMCk7Ci0gICAgICAgICAgICBmcmFjID0gUHlTZXF1ZW5jZV9HZXRJdGVtKG9iaiwgMSk7Ci0gICAgICAgICAgICBpZiAoc3QgPT0gTlVMTCB8fCBmcmFjID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ29vZF90aW1ldHVwbGUgPSAwOwotICAgICAgICAgICAgLyogY29weSB5L20vZC9oL20vcyB2YWx1ZXMgb3V0IG9mIHRoZQotICAgICAgICAgICAgICAgdGltZS5zdHJ1Y3RfdGltZSAqLwotICAgICAgICAgICAgaWYgKGdvb2RfdGltZXR1cGxlICYmCi0gICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9DaGVjayhzdCkgJiYKLSAgICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NpemUoc3QpID49IDYpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IDY7IGkrKykgewotICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqcCA9IFB5U2VxdWVuY2VfR2V0SXRlbShzdCwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RfdGltZXR1cGxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2socCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpYVtpXSA9IFB5TG9uZ19Bc0xvbmcocCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RfdGltZXR1cGxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHApOwotICAgICAgICAgICAgICAgIH0KLS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHApKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFbaV0gPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cocCwgJm92ZXJmbG93KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb29kX3RpbWV0dXBsZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RfdGltZXR1cGxlID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHApOwotKi8gICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb29kX3RpbWV0dXBsZSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBmb2xsb3cgdGhhdCB1cCB3aXRoIGEgbGl0dGxlIGRvc2Ugb2YgbWljcm9zZWNvbmRzICovCi0gICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGZyYWMpKQotICAgICAgICAgICAgICAgIGlhWzZdID0gUHlMb25nX0FzTG9uZyhmcmFjKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb29kX3RpbWV0dXBsZSA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ29vZF90aW1ldHVwbGUgPSAwOwotICAgICAgICBpZiAoZ29vZF90aW1ldHVwbGUpCi0gICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oY2xzLCAiaWlpaWlpaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWFbMF0sIGlhWzFdLCBpYVsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYVszXSwgaWFbNF0sIGlhWzVdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhWzZdKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgdmFsdWUgZnJvbSBfc3RycHRpbWUuX3N0cnB0aW1lIik7CisgICAgaWYgKG1vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIG1vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2soIl9zdHJwdGltZSIpOworICAgICAgICBpZiAobW9kdWxlID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihvYmopOwotICAgIFB5X1hERUNSRUYoc3QpOwotICAgIFB5X1hERUNSRUYoZnJhYyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChtb2R1bGUsICJfc3RycHRpbWVfZGF0ZXRpbWUiLCAiT3V1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMsIHN0cmluZywgZm9ybWF0KTsKIH0KIAogLyogUmV0dXJuIG5ldyBkYXRldGltZSBmcm9tIGRhdGUvZGF0ZXRpbWUgYW5kIHRpbWUgYXJndW1lbnRzLiAqLwpAQCAtMzk1MywyMSArNDMxOSwxOCBAQAogCiAvKiBUaGVzZSBhcmUgYWxsIE1FVEhfTk9BUkdTLCBzbyBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBhcmdsaXN0LiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWRhdGV0aW1lX3V0Y29mZnNldChQeURhdGVUaW1lX0RhdGVUaW1lICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKSB7Ci0gICAgcmV0dXJuIG9mZnNldF9hc190aW1lZGVsdGEoSEFTVFpJTkZPKHNlbGYpID8gc2VsZi0+dHppbmZvIDogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXRjb2Zmc2V0IiwgKFB5T2JqZWN0ICopc2VsZik7CitkYXRldGltZV91dGNvZmZzZXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKKyAgICByZXR1cm4gY2FsbF91dGNvZmZzZXQoR0VUX0RUX1RaSU5GTyhzZWxmKSwgc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYXRldGltZV9kc3QoUHlEYXRlVGltZV9EYXRlVGltZSAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkgewotICAgIHJldHVybiBvZmZzZXRfYXNfdGltZWRlbHRhKEhBU1RaSU5GTyhzZWxmKSA/IHNlbGYtPnR6aW5mbyA6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzdCIsIChQeU9iamVjdCAqKXNlbGYpOworZGF0ZXRpbWVfZHN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKSB7CisgICAgcmV0dXJuIGNhbGxfZHN0KEdFVF9EVF9UWklORk8oc2VsZiksIHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGF0ZXRpbWVfdHpuYW1lKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKLSAgICByZXR1cm4gY2FsbF90em5hbWUoSEFTVFpJTkZPKHNlbGYpID8gc2VsZi0+dHppbmZvIDogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopc2VsZik7CitkYXRldGltZV90em5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpIHsKKyAgICByZXR1cm4gY2FsbF90em5hbWUoR0VUX0RUX1RaSU5GTyhzZWxmKSwgc2VsZik7CiB9CiAKIC8qCkBAIC00MDM0LDIxICs0Mzk3LDQzIEBACiAgICAgICAgIC8qIGRhdGV0aW1lIC0gPz8/ICovCiAgICAgICAgIGlmIChQeURhdGVUaW1lX0NoZWNrKHJpZ2h0KSkgewogICAgICAgICAgICAgLyogZGF0ZXRpbWUgLSBkYXRldGltZSAqLwotICAgICAgICAgICAgbmFpdmV0eSBuMSwgbjI7Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0MSwgb2Zmc2V0MjsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvZmZzZXQxLCAqb2Zmc2V0MiwgKm9mZmRpZmYgPSBOVUxMOwogICAgICAgICAgICAgaW50IGRlbHRhX2QsIGRlbHRhX3MsIGRlbHRhX3VzOwogCi0gICAgICAgICAgICBpZiAoY2xhc3NpZnlfdHdvX3V0Y29mZnNldHMobGVmdCwgJm9mZnNldDEsICZuMSwgbGVmdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCwgJm9mZnNldDIsICZuMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgYXNzZXJ0KG4xICE9IE9GRlNFVF9VTktOT1dOICYmIG4yICE9IE9GRlNFVF9VTktOT1dOKTsKLSAgICAgICAgICAgIGlmIChuMSAhPSBuMikgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJjYW4ndCBzdWJ0cmFjdCBvZmZzZXQtbmFpdmUgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgIm9mZnNldC1hd2FyZSBkYXRldGltZXMiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmIChHRVRfRFRfVFpJTkZPKGxlZnQpID09IEdFVF9EVF9UWklORk8ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0MiA9IG9mZnNldDEgPSBQeV9Ob25lOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihvZmZzZXQxKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYob2Zmc2V0Mik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQxID0gZGF0ZXRpbWVfdXRjb2Zmc2V0KGxlZnQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQxID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIG9mZnNldDIgPSBkYXRldGltZV91dGNvZmZzZXQocmlnaHQsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChvZmZzZXQyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9mZnNldDEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChvZmZzZXQxICE9IFB5X05vbmUpICE9IChvZmZzZXQyICE9IFB5X05vbmUpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qgc3VidHJhY3Qgb2Zmc2V0LW5haXZlIGFuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0LWF3YXJlIGRhdGV0aW1lcyIpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2Zmc2V0MSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChvZmZzZXQxICE9IG9mZnNldDIpICYmCisgICAgICAgICAgICAgICAgZGVsdGFfY21wKG9mZnNldDEsIG9mZnNldDIpICE9IDApIHsKKyAgICAgICAgICAgICAgICBvZmZkaWZmID0gZGVsdGFfc3VidHJhY3Qob2Zmc2V0MSwgb2Zmc2V0Mik7CisgICAgICAgICAgICAgICAgaWYgKG9mZmRpZmYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2Zmc2V0MSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKG9mZnNldDEpOworICAgICAgICAgICAgUHlfREVDUkVGKG9mZnNldDIpOwogICAgICAgICAgICAgZGVsdGFfZCA9IHltZF90b19vcmQoR0VUX1lFQVIobGVmdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9OVEgobGVmdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfREFZKGxlZnQpKSAtCkBAIC00MDY3LDExICs0NDUyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX1NFQ09ORChyaWdodCkpOwogICAgICAgICAgICAgZGVsdGFfdXMgPSBEQVRFX0dFVF9NSUNST1NFQ09ORChsZWZ0KSAtCiAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX01JQ1JPU0VDT05EKHJpZ2h0KTsKLSAgICAgICAgICAgIC8qIChsZWZ0IC0gb2Zmc2V0MSkgLSAocmlnaHQgLSBvZmZzZXQyKSA9Ci0gICAgICAgICAgICAgKiAobGVmdCAtIHJpZ2h0KSArIChvZmZzZXQyIC0gb2Zmc2V0MSkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVsdGFfcyArPSAob2Zmc2V0MiAtIG9mZnNldDEpICogNjA7CiAgICAgICAgICAgICByZXN1bHQgPSBuZXdfZGVsdGEoZGVsdGFfZCwgZGVsdGFfcywgZGVsdGFfdXMsIDEpOworICAgICAgICAgICAgaWYgKG9mZmRpZmYgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gcmVzdWx0OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGRlbHRhX3N1YnRyYWN0KHJlc3VsdCwgb2ZmZGlmZik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZkaWZmKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChQeURlbHRhX0NoZWNrKHJpZ2h0KSkgewogICAgICAgICAgICAgLyogZGF0ZXRpbWUgLSBkZWx0YSAqLwpAQCAtNDE4MSw5ICs0NTY4LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkYXRldGltZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCiB7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9mZnNldDEsICpvZmZzZXQyOwogICAgIGludCBkaWZmOwotICAgIG5haXZldHkgbjEsIG4yOwotICAgIGludCBvZmZzZXQxLCBvZmZzZXQyOwogCiAgICAgaWYgKCEgUHlEYXRlVGltZV9DaGVjayhvdGhlcikpIHsKICAgICAgICAgaWYgKFB5RGF0ZV9DaGVjayhvdGhlcikpIHsKQEAgLTQyMDQsODUgKzQ1OTEsOTkgQEAKICAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwogICAgIH0KIAotICAgIGlmIChjbGFzc2lmeV90d29fdXRjb2Zmc2V0cyhzZWxmLCAmb2Zmc2V0MSwgJm4xLCBzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlciwgJm9mZnNldDIsICZuMiwgb3RoZXIpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KG4xICE9IE9GRlNFVF9VTktOT1dOICYmIG4yICE9IE9GRlNFVF9VTktOT1dOKTsKLSAgICAvKiBJZiB0aGV5J3JlIGJvdGggbmFpdmUsIG9yIGJvdGggYXdhcmUgYW5kIGhhdmUgdGhlIHNhbWUgb2Zmc2V0cywKLSAgICAgKiB3ZSBnZXQgb2ZmIGNoZWFwLiAgTm90ZSB0aGF0IGlmIHRoZXkncmUgYm90aCBuYWl2ZSwgb2Zmc2V0MSA9PQotICAgICAqIG9mZnNldDIgPT0gMCBhdCB0aGlzIHBvaW50LgotICAgICAqLwotICAgIGlmIChuMSA9PSBuMiAmJiBvZmZzZXQxID09IG9mZnNldDIpIHsKKyAgICBpZiAoR0VUX0RUX1RaSU5GTyhzZWxmKSA9PSBHRVRfRFRfVFpJTkZPKG90aGVyKSkgewogICAgICAgICBkaWZmID0gbWVtY21wKCgoUHlEYXRlVGltZV9EYXRlVGltZSAqKXNlbGYpLT5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICgoUHlEYXRlVGltZV9EYXRlVGltZSAqKW90aGVyKS0+ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICBfUHlEYXRlVGltZV9EQVRFVElNRV9EQVRBU0laRSk7CiAgICAgICAgIHJldHVybiBkaWZmX3RvX2Jvb2woZGlmZiwgb3ApOwogICAgIH0KLQotICAgIGlmIChuMSA9PSBPRkZTRVRfQVdBUkUgJiYgbjIgPT0gT0ZGU0VUX0FXQVJFKSB7CisgICAgb2Zmc2V0MSA9IGRhdGV0aW1lX3V0Y29mZnNldChzZWxmLCBOVUxMKTsKKyAgICBpZiAob2Zmc2V0MSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvZmZzZXQyID0gZGF0ZXRpbWVfdXRjb2Zmc2V0KG90aGVyLCBOVUxMKTsKKyAgICBpZiAob2Zmc2V0MiA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisgICAgLyogSWYgdGhleSdyZSBib3RoIG5haXZlLCBvciBib3RoIGF3YXJlIGFuZCBoYXZlIHRoZSBzYW1lIG9mZnNldHMsCisgICAgICogd2UgZ2V0IG9mZiBjaGVhcC4gIE5vdGUgdGhhdCBpZiB0aGV5J3JlIGJvdGggbmFpdmUsIG9mZnNldDEgPT0KKyAgICAgKiBvZmZzZXQyID09IFB5X05vbmUgYXQgdGhpcyBwb2ludC4KKyAgICAgKi8KKyAgICBpZiAoKG9mZnNldDEgPT0gb2Zmc2V0MikgfHwKKyAgICAgICAgKFB5RGVsdGFfQ2hlY2sob2Zmc2V0MSkgJiYgUHlEZWx0YV9DaGVjayhvZmZzZXQyKSAmJgorICAgICAgICAgZGVsdGFfY21wKG9mZnNldDEsIG9mZnNldDIpID09IDApKSB7CisgICAgICAgIGRpZmYgPSBtZW1jbXAoKChQeURhdGVUaW1lX0RhdGVUaW1lICopc2VsZiktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgKChQeURhdGVUaW1lX0RhdGVUaW1lICopb3RoZXIpLT5kYXRhLAorICAgICAgICAgICAgICAgICAgICAgIF9QeURhdGVUaW1lX0RBVEVUSU1FX0RBVEFTSVpFKTsKKyAgICAgICAgcmVzdWx0ID0gZGlmZl90b19ib29sKGRpZmYsIG9wKTsKKyAgICB9CisgICAgZWxzZSBpZiAob2Zmc2V0MSAhPSBQeV9Ob25lICYmIG9mZnNldDIgIT0gUHlfTm9uZSkgewogICAgICAgICBQeURhdGVUaW1lX0RlbHRhICpkZWx0YTsKIAotICAgICAgICBhc3NlcnQob2Zmc2V0MSAhPSBvZmZzZXQyKTsgICAgICAgICAgICAgLyogZWxzZSBsYXN0ICJpZiIgaGFuZGxlZCBpdCAqLworICAgICAgICBhc3NlcnQob2Zmc2V0MSAhPSBvZmZzZXQyKTsgLyogZWxzZSBsYXN0ICJpZiIgaGFuZGxlZCBpdCAqLwogICAgICAgICBkZWx0YSA9IChQeURhdGVUaW1lX0RlbHRhICopZGF0ZXRpbWVfc3VidHJhY3QoKFB5T2JqZWN0ICopc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcik7CiAgICAgICAgIGlmIChkZWx0YSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIGRpZmYgPSBHRVRfVERfREFZUyhkZWx0YSk7CiAgICAgICAgIGlmIChkaWZmID09IDApCiAgICAgICAgICAgICBkaWZmID0gR0VUX1REX1NFQ09ORFMoZGVsdGEpIHwKICAgICAgICAgICAgICAgICAgICBHRVRfVERfTUlDUk9TRUNPTkRTKGRlbHRhKTsKICAgICAgICAgUHlfREVDUkVGKGRlbHRhKTsKLSAgICAgICAgcmV0dXJuIGRpZmZfdG9fYm9vbChkaWZmLCBvcCk7CisgICAgICAgIHJlc3VsdCA9IGRpZmZfdG9fYm9vbChkaWZmLCBvcCk7CiAgICAgfQotCi0gICAgYXNzZXJ0KG4xICE9IG4yKTsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgY29tcGFyZSBvZmZzZXQtbmFpdmUgYW5kICIKLSAgICAgICAgICAgICAgICAgICAgIm9mZnNldC1hd2FyZSBkYXRldGltZXMiKTsKLSAgICByZXR1cm4gTlVMTDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb21wYXJlIG9mZnNldC1uYWl2ZSBhbmQgIgorICAgICAgICAgICAgICAgICAgICAgICAgIm9mZnNldC1hd2FyZSBkYXRldGltZXMiKTsKKyAgICB9CisgZG9uZToKKyAgICBQeV9ERUNSRUYob2Zmc2V0MSk7CisgICAgUHlfWERFQ1JFRihvZmZzZXQyKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgbG9uZworc3RhdGljIFB5X2hhc2hfdAogZGF0ZXRpbWVfaGFzaChQeURhdGVUaW1lX0RhdGVUaW1lICpzZWxmKQogewogICAgIGlmIChzZWxmLT5oYXNoY29kZSA9PSAtMSkgewotICAgICAgICBuYWl2ZXR5IG47Ci0gICAgICAgIGludCBvZmZzZXQ7Ci0gICAgICAgIFB5T2JqZWN0ICp0ZW1wOworICAgICAgICBQeU9iamVjdCAqb2Zmc2V0OwogCi0gICAgICAgIG4gPSBjbGFzc2lmeV91dGNvZmZzZXQoKFB5T2JqZWN0ICopc2VsZiwgKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0KTsKLSAgICAgICAgYXNzZXJ0KG4gIT0gT0ZGU0VUX1VOS05PV04pOwotICAgICAgICBpZiAobiA9PSBPRkZTRVRfRVJST1IpCisgICAgICAgIG9mZnNldCA9IGRhdGV0aW1lX3V0Y29mZnNldCgoUHlPYmplY3QgKilzZWxmLCBOVUxMKTsKKworICAgICAgICBpZiAob2Zmc2V0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgLyogUmVkdWNlIHRoaXMgdG8gYSBoYXNoIG9mIGFub3RoZXIgb2JqZWN0LiAqLwotICAgICAgICBpZiAobiA9PSBPRkZTRVRfTkFJVkUpIHsKKyAgICAgICAgaWYgKG9mZnNldCA9PSBQeV9Ob25lKQogICAgICAgICAgICAgc2VsZi0+aGFzaGNvZGUgPSBnZW5lcmljX2hhc2goCiAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilzZWxmLT5kYXRhLCBfUHlEYXRlVGltZV9EQVRFVElNRV9EQVRBU0laRSk7Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi0+aGFzaGNvZGU7Ci0gICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgZGF5czsKLSAgICAgICAgICAgIGludCBzZWNvbmRzOworICAgICAgICAgICAgUHlPYmplY3QgKnRlbXAxLCAqdGVtcDI7CisgICAgICAgICAgICBpbnQgZGF5cywgc2Vjb25kczsKIAotICAgICAgICAgICAgYXNzZXJ0KG4gPT0gT0ZGU0VUX0FXQVJFKTsKICAgICAgICAgICAgIGFzc2VydChIQVNUWklORk8oc2VsZikpOwogICAgICAgICAgICAgZGF5cyA9IHltZF90b19vcmQoR0VUX1lFQVIoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfTU9OVEgoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRVRfREFZKHNlbGYpKTsKICAgICAgICAgICAgIHNlY29uZHMgPSBEQVRFX0dFVF9IT1VSKHNlbGYpICogMzYwMCArCi0gICAgICAgICAgICAgICAgICAgICAgKERBVEVfR0VUX01JTlVURShzZWxmKSAtIG9mZnNldCkgKiA2MCArCisgICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlOVVRFKHNlbGYpICogNjAgKwogICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX1NFQ09ORChzZWxmKTsKLSAgICAgICAgICAgIHRlbXAgPSBuZXdfZGVsdGEoZGF5cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlDUk9TRUNPTkQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgICAgdGVtcDEgPSBuZXdfZGVsdGEoZGF5cywgc2Vjb25kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX01JQ1JPU0VDT05EKHNlbGYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisgICAgICAgICAgICBpZiAodGVtcDEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlbXAyID0gZGVsdGFfc3VidHJhY3QodGVtcDEsIG9mZnNldCk7CisgICAgICAgICAgICBQeV9ERUNSRUYodGVtcDEpOworICAgICAgICAgICAgaWYgKHRlbXAyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLT5oYXNoY29kZSA9IFB5T2JqZWN0X0hhc2godGVtcDIpOworICAgICAgICAgICAgUHlfREVDUkVGKHRlbXAyKTsKICAgICAgICAgfQotICAgICAgICBpZiAodGVtcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBzZWxmLT5oYXNoY29kZSA9IFB5T2JqZWN0X0hhc2godGVtcCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodGVtcCk7Ci0gICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG9mZnNldCk7CiAgICAgfQogICAgIHJldHVybiBzZWxmLT5oYXNoY29kZTsKIH0KQEAgLTQzMTcsMTAgKzQ3MTgsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX2FzdGltZXpvbmUoUHlEYXRlVGltZV9EYXRlVGltZSAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKLSAgICBpbnQgeSwgbSwgZCwgaGgsIG1tLCBzcywgdXM7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBpbnQgb2Zmc2V0LCBub25lOwotCisgICAgUHlPYmplY3QgKm9mZnNldDsKKyAgICBQeU9iamVjdCAqdGVtcDsKICAgICBQeU9iamVjdCAqdHppbmZvOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJ0eiIsIE5VTEx9OwogCkBAIC00MzM4LDM5ICs0NzM4LDM1IEBACiAgICAgfQogCiAgICAgLyogQ29udmVydCBzZWxmIHRvIFVUQy4gKi8KLSAgICBvZmZzZXQgPSBjYWxsX3V0Y29mZnNldChzZWxmLT50emluZm8sIChQeU9iamVjdCAqKXNlbGYsICZub25lKTsKLSAgICBpZiAob2Zmc2V0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgb2Zmc2V0ID0gZGF0ZXRpbWVfdXRjb2Zmc2V0KChQeU9iamVjdCAqKXNlbGYsIE5VTEwpOworICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKG5vbmUpCi0gICAgICAgIGdvdG8gTmVlZEF3YXJlOworICAgIGlmIChvZmZzZXQgPT0gUHlfTm9uZSkgeworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKKyAgICAgIE5lZWRBd2FyZToKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJhc3RpbWV6b25lKCkgY2Fubm90IGJlIGFwcGxpZWQgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgImEgbmFpdmUgZGF0ZXRpbWUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgeSA9IEdFVF9ZRUFSKHNlbGYpOwotICAgIG0gPSBHRVRfTU9OVEgoc2VsZik7Ci0gICAgZCA9IEdFVF9EQVkoc2VsZik7Ci0gICAgaGggPSBEQVRFX0dFVF9IT1VSKHNlbGYpOwotICAgIG1tID0gREFURV9HRVRfTUlOVVRFKHNlbGYpOwotICAgIHNzID0gREFURV9HRVRfU0VDT05EKHNlbGYpOwotICAgIHVzID0gREFURV9HRVRfTUlDUk9TRUNPTkQoc2VsZik7Ci0KLSAgICBtbSAtPSBvZmZzZXQ7Ci0gICAgaWYgKChtbSA8IDAgfHwgbW0gPj0gNjApICYmCi0gICAgICAgIG5vcm1hbGl6ZV9kYXRldGltZSgmeSwgJm0sICZkLCAmaGgsICZtbSwgJnNzLCAmdXMpIDwgMCkKKyAgICAvKiByZXN1bHQgPSBzZWxmIC0gb2Zmc2V0ICovCisgICAgcmVzdWx0ID0gYWRkX2RhdGV0aW1lX3RpbWVkZWx0YShzZWxmLAorICAgICAgICAgICAgICAgIChQeURhdGVUaW1lX0RlbHRhICopb2Zmc2V0LCAtMSk7CisgICAgUHlfREVDUkVGKG9mZnNldCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEF0dGFjaCBuZXcgdHppbmZvIGFuZCBsZXQgZnJvbXV0YygpIGRvIHRoZSByZXN0LiAqLwotICAgIHJlc3VsdCA9IG5ld19kYXRldGltZSh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cywgdHppbmZvKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnRlbXAgPSByZXN1bHQ7CisgICAgdGVtcCA9ICgoUHlEYXRlVGltZV9EYXRlVGltZSAqKXJlc3VsdCktPnR6aW5mbzsKKyAgICAoKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKilyZXN1bHQpLT50emluZm8gPSB0emluZm87CisgICAgUHlfSU5DUkVGKHR6aW5mbyk7CisgICAgUHlfREVDUkVGKHRlbXApOwogCi0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QodHppbmZvLCAiZnJvbXV0YyIsICJPIiwgdGVtcCk7Ci0gICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKLSAgICB9CisgICAgdGVtcCA9IHJlc3VsdDsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHR6aW5mbywgImZyb211dGMiLCAiTyIsIHRlbXApOworICAgIFB5X0RFQ1JFRih0ZW1wKTsKKwogICAgIHJldHVybiByZXN1bHQ7Ci0KLU5lZWRBd2FyZToKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImFzdGltZXpvbmUoKSBjYW5ub3QgYmUgYXBwbGllZCB0byAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIG5haXZlIGRhdGV0aW1lIik7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00Mzc5LDE3ICs0Nzc1LDE1IEBACiAgICAgaW50IGRzdGZsYWcgPSAtMTsKIAogICAgIGlmIChIQVNUWklORk8oc2VsZikgJiYgc2VsZi0+dHppbmZvICE9IFB5X05vbmUpIHsKLSAgICAgICAgaW50IG5vbmU7CisgICAgICAgIFB5T2JqZWN0ICogZHN0OwogCi0gICAgICAgIGRzdGZsYWcgPSBjYWxsX2RzdChzZWxmLT50emluZm8sIChQeU9iamVjdCAqKXNlbGYsICZub25lKTsKLSAgICAgICAgaWYgKGRzdGZsYWcgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZHN0ID0gY2FsbF9kc3Qoc2VsZi0+dHppbmZvLCAoUHlPYmplY3QgKilzZWxmKTsKKyAgICAgICAgaWYgKGRzdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgaWYgKG5vbmUpCi0gICAgICAgICAgICBkc3RmbGFnID0gLTE7Ci0gICAgICAgIGVsc2UgaWYgKGRzdGZsYWcgIT0gMCkKLSAgICAgICAgICAgIGRzdGZsYWcgPSAxOwotCisgICAgICAgIGlmIChkc3QgIT0gUHlfTm9uZSkKKyAgICAgICAgICAgIGRzdGZsYWcgPSBkZWx0YV9ib29sKChQeURhdGVUaW1lX0RlbHRhICopZHN0KTsKKyAgICAgICAgUHlfREVDUkVGKGRzdCk7CiAgICAgfQogICAgIHJldHVybiBidWlsZF9zdHJ1Y3RfdGltZShHRVRfWUVBUihzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VUX01PTlRIKHNlbGYpLApAQCAtNDQyNSw0NyArNDgxOSw0NyBAQAogICAgICAgICAgICAgICAgICAgICBEQVRFX0dFVF9NSU5VVEUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgIERBVEVfR0VUX1NFQ09ORChzZWxmKSwKICAgICAgICAgICAgICAgICAgICAgREFURV9HRVRfTUlDUk9TRUNPTkQoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgIEhBU1RaSU5GTyhzZWxmKSA/IHNlbGYtPnR6aW5mbyA6IFB5X05vbmUpOworICAgICAgICAgICAgICAgICAgICBHRVRfRFRfVFpJTkZPKHNlbGYpKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGRhdGV0aW1lX3V0Y3RpbWV0dXBsZShQeURhdGVUaW1lX0RhdGVUaW1lICpzZWxmKQogewotICAgIGludCB5ID0gR0VUX1lFQVIoc2VsZik7Ci0gICAgaW50IG0gPSBHRVRfTU9OVEgoc2VsZik7Ci0gICAgaW50IGQgPSBHRVRfREFZKHNlbGYpOwotICAgIGludCBoaCA9IERBVEVfR0VUX0hPVVIoc2VsZik7Ci0gICAgaW50IG1tID0gREFURV9HRVRfTUlOVVRFKHNlbGYpOwotICAgIGludCBzcyA9IERBVEVfR0VUX1NFQ09ORChzZWxmKTsKLSAgICBpbnQgdXMgPSAwOyAgICAgICAgIC8qIG1pY3Jvc2Vjb25kcyBhcmUgaWdub3JlZCBpbiBhIHRpbWV0dXBsZSAqLwotICAgIGludCBvZmZzZXQgPSAwOworICAgIGludCB5LCBtLCBkLCBoaCwgbW0sIHNzOworICAgIFB5T2JqZWN0ICp0emluZm87CisgICAgUHlEYXRlVGltZV9EYXRlVGltZSAqdXRjc2VsZjsKIAotICAgIGlmIChIQVNUWklORk8oc2VsZikgJiYgc2VsZi0+dHppbmZvICE9IFB5X05vbmUpIHsKLSAgICAgICAgaW50IG5vbmU7Ci0KLSAgICAgICAgb2Zmc2V0ID0gY2FsbF91dGNvZmZzZXQoc2VsZi0+dHppbmZvLCAoUHlPYmplY3QgKilzZWxmLCAmbm9uZSk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIHR6aW5mbyA9IEdFVF9EVF9UWklORk8oc2VsZik7CisgICAgaWYgKHR6aW5mbyA9PSBQeV9Ob25lKSB7CisgICAgICAgIHV0Y3NlbGYgPSBzZWxmOworICAgICAgICBQeV9JTkNSRUYodXRjc2VsZik7CiAgICAgfQotICAgIC8qIEV2ZW4gaWYgb2Zmc2V0IGlzIDAsIGRvbid0IGNhbGwgdGltZXR1cGxlKCkgLS0gdG1faXNkc3Qgc2hvdWxkIGJlCi0gICAgICogMCBpbiBhIFVUQyB0aW1ldHVwbGUgcmVnYXJkbGVzcyBvZiB3aGF0IGRzdCgpIHNheXMuCi0gICAgICovCi0gICAgaWYgKG9mZnNldCkgewotICAgICAgICAvKiBTdWJ0cmFjdCBvZmZzZXQgbWludXRlcyAmIG5vcm1hbGl6ZS4gKi8KLSAgICAgICAgaW50IHN0YXQ7Ci0KLSAgICAgICAgbW0gLT0gb2Zmc2V0OwotICAgICAgICBzdGF0ID0gbm9ybWFsaXplX2RhdGV0aW1lKCZ5LCAmbSwgJmQsICZoaCwgJm1tLCAmc3MsICZ1cyk7Ci0gICAgICAgIGlmIChzdGF0IDwgMCkgewotICAgICAgICAgICAgLyogQXQgdGhlIGVkZ2VzLCBpdCdzIHBvc3NpYmxlIHdlIG92ZXJmbG93ZWQKLSAgICAgICAgICAgICAqIGJleW9uZCBNSU5ZRUFSIG9yIE1BWFlFQVIuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpvZmZzZXQ7CisgICAgICAgIG9mZnNldCA9IGNhbGxfdXRjb2Zmc2V0KHR6aW5mbywgKFB5T2JqZWN0ICopc2VsZik7CisgICAgICAgIGlmIChvZmZzZXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAob2Zmc2V0ID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvZmZzZXQpOworICAgICAgICAgICAgdXRjc2VsZiA9IHNlbGY7CisgICAgICAgICAgICBQeV9JTkNSRUYodXRjc2VsZik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB1dGNzZWxmID0gKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKilhZGRfZGF0ZXRpbWVfdGltZWRlbHRhKHNlbGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKW9mZnNldCwgLTEpOworICAgICAgICAgICAgUHlfREVDUkVGKG9mZnNldCk7CisgICAgICAgICAgICBpZiAodXRjc2VsZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQorICAgIHkgPSBHRVRfWUVBUih1dGNzZWxmKTsKKyAgICBtID0gR0VUX01PTlRIKHV0Y3NlbGYpOworICAgIGQgPSBHRVRfREFZKHV0Y3NlbGYpOworICAgIGhoID0gREFURV9HRVRfSE9VUih1dGNzZWxmKTsKKyAgICBtbSA9IERBVEVfR0VUX01JTlVURSh1dGNzZWxmKTsKKyAgICBzcyA9IERBVEVfR0VUX1NFQ09ORCh1dGNzZWxmKTsKKworICAgIFB5X0RFQ1JFRih1dGNzZWxmKTsKICAgICByZXR1cm4gYnVpbGRfc3RydWN0X3RpbWUoeSwgbSwgZCwgaGgsIG1tLCBzcywgMCk7CiB9CiAKQEAgLTQ2NjcsNyArNTA2MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZGF0ZXRpbWVtb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJkYXRldGltZSIsCisgICAgIl9kYXRldGltZSIsCiAgICAgIkZhc3QgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRhdGV0aW1lIHR5cGUuIiwKICAgICAtMSwKICAgICBtb2R1bGVfbWV0aG9kcywKQEAgLTQ2NzgsMTEgKzUwNzIsMTIgQEAKIH07CiAKIFB5TU9ESU5JVF9GVU5DCi1QeUluaXRfZGF0ZXRpbWUodm9pZCkKK1B5SW5pdF9fZGF0ZXRpbWUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsgICAgICAgIC8qIGEgbW9kdWxlIG9iamVjdCAqLwogICAgIFB5T2JqZWN0ICpkOyAgICAgICAgLyogaXRzIGRpY3QgKi8KICAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqZGVsdGE7CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZkYXRldGltZW1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKQEAgLTQ2OTgsNiArNTA5Myw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeURhdGVUaW1lX1RpbWVab25lVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIHRpbWVkZWx0YSB2YWx1ZXMgKi8KICAgICBkID0gUHlEYXRlVGltZV9EZWx0YVR5cGUudHBfZGljdDsKQEAgLTQ3NzEsNiArNTE2OCwzNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9ERUNSRUYoeCk7CiAKKyAgICAvKiB0aW1lem9uZSB2YWx1ZXMgKi8KKyAgICBkID0gUHlEYXRlVGltZV9UaW1lWm9uZVR5cGUudHBfZGljdDsKKworICAgIGRlbHRhID0gbmV3X2RlbHRhKDAsIDAsIDAsIDApOworICAgIGlmIChkZWx0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB4ID0gY3JlYXRlX3RpbWV6b25lKGRlbHRhLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYoZGVsdGEpOworICAgIGlmICh4ID09IE5VTEwgfHwgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInV0YyIsIHgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlEYXRlVGltZV9UaW1lWm9uZV9VVEMgPSB4OworCisgICAgZGVsdGEgPSBuZXdfZGVsdGEoLTEsIDYwLCAwLCAxKTsgLyogLTIzOjU5ICovCisgICAgaWYgKGRlbHRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHggPSBjcmVhdGVfdGltZXpvbmUoZGVsdGEsIE5VTEwpOworICAgIFB5X0RFQ1JFRihkZWx0YSk7CisgICAgaWYgKHggPT0gTlVMTCB8fCBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAibWluIiwgeCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYoeCk7CisKKyAgICBkZWx0YSA9IG5ld19kZWx0YSgwLCAoMjMgKiA2MCArIDU5KSAqIDYwLCAwLCAwKTsgLyogKzIzOjU5ICovCisgICAgaWYgKGRlbHRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHggPSBjcmVhdGVfdGltZXpvbmUoZGVsdGEsIE5VTEwpOworICAgIFB5X0RFQ1JFRihkZWx0YSk7CisgICAgaWYgKHggPT0gTlVMTCB8fCBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAibWF4IiwgeCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYoeCk7CisKICAgICAvKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUlOWUVBUiIsIE1JTllFQVIpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhZRUFSIiwgTUFYWUVBUik7CkBAIC00NzkxLDkgKzUyMTgsMTIgQEAKICAgICBQeV9JTkNSRUYoJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ0emluZm8iLCAoUHlPYmplY3QgKikgJlB5RGF0ZVRpbWVfVFpJbmZvVHlwZSk7CiAKKyAgICBQeV9JTkNSRUYoJlB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlKTsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInRpbWV6b25lIiwgKFB5T2JqZWN0ICopICZQeURhdGVUaW1lX1RpbWVab25lVHlwZSk7CisKICAgICB4ID0gUHlDYXBzdWxlX05ldygmQ0FQSSwgUHlEYXRlVGltZV9DQVBTVUxFX05BTUUsIE5VTEwpOwogICAgIGlmICh4ID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGF0ZXRpbWVfQ0FQSSIsIHgpOwogCiAgICAgLyogQSA0LXllYXIgY3ljbGUgaGFzIGFuIGV4dHJhIGxlYXAgZGF5IG92ZXIgd2hhdCB3ZSdkIGdldCBmcm9tCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jIGIvTW9kdWxlcy9fZWxlbWVudHRyZWUuYwppbmRleCBhZTA5ODkzLi4zMDYxZDhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCisrKyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKQEAgLTEsMjEgKzEsMTUgQEAKIC8qCiAgKiBFbGVtZW50VHJlZQotICogJElkOiBfZWxlbWVudHRyZWUuYyAyNjU3IDIwMDYtMDMtMTIgMjA6NTA6MzJaIGZyZWRyaWsgJAorICogJElkOiBfZWxlbWVudHRyZWUuYyAzNDczIDIwMDktMDEtMTEgMjI6NTM6NTVaIGZyZWRyaWsgJAogICoKICAqIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAgKgogICogSGlzdG9yeToKICAqIDE5OTktMDYtMjAgZmwgIGNyZWF0ZWQgKGFzIHBhcnQgb2Ygc2dtbG9wKQogICogMjAwMS0wNS0yOSBmbCAgZWZmZG9tIGVkaXRpb24KLSAqIDIwMDEtMDYtMDUgZmwgIGJhY2twb3J0ZWQgdG8gdW5peDsgZml4ZWQgYm9ndXMgZnJlZSBpbiBjbGVhcgotICogMjAwMS0wNy0xMCBmbCAgYWRkZWQgZmluZGFsbCBoZWxwZXIKICAqIDIwMDMtMDItMjcgZmwgIGVsZW1lbnR0cmVlIGVkaXRpb24gKGFscGhhKQogICogMjAwNC0wNi0wMyBmbCAgdXBkYXRlcyBmb3IgZWxlbWVudHRyZWUgMS4yCi0gKiAyMDA1LTAxLTA1IGZsICBhZGRlZCB1bml2ZXJzYWwgbmFtZSBjYWNoZSwgRWxlbWVudC9TdWJFbGVtZW50IGZhY3RvcmllcwotICogMjAwNS0wMS0wNiBmbCAgbW92ZWQgcHl0aG9uIGhlbHBlcnMgaW50byBDIG1vZHVsZTsgcmVtb3ZlZCAxLjUuMiBzdXBwb3J0Ci0gKiAyMDA1LTAxLTA3IGZsICBhZGRlZCAyLjEgc3VwcG9ydDsgd29yayBhcm91bmQgYnJva2VuIF9fY29weV9fIGluIDIuMwotICogMjAwNS0wMS0wOCBmbCAgYWRkZWQgbWFrZWVsZW1lbnQgbWV0aG9kOyBmaXhlZCBwYXRoIHN1cHBvcnQKLSAqIDIwMDUtMDEtMTAgZmwgIG9wdGltaXplZCBtZW1vcnkgdXNhZ2UKKyAqIDIwMDUtMDEtMDUgZmwgIG1ham9yIG9wdGltaXphdGlvbiBlZmZvcnQKICAqIDIwMDUtMDEtMTEgZmwgIGZpcnN0IHB1YmxpYyByZWxlYXNlIChjRWxlbWVudFRyZWUgMC44KQogICogMjAwNS0wMS0xMiBmbCAgc3BsaXQgZWxlbWVudCBvYmplY3QgaW50byBiYXNlIGFuZCBleHRyYXMKICAqIDIwMDUtMDEtMTMgZmwgIHVzZSB0YWdnZWQgcG9pbnRlcnMgZm9yIHRhaWwvdGV4dCAoY0VsZW1lbnRUcmVlIDAuOSkKQEAgLTM1LDE2ICsyOSwyMyBAQAogICogMjAwNS0xMi0xNiBmbCAgYWRkZWQgc3VwcG9ydCBmb3Igbm9uLXN0YW5kYXJkIGVuY29kaW5ncwogICogMjAwNi0wMy0wOCBmbCAgZml4ZWQgYSBjb3VwbGUgb2YgcG90ZW50aWFsIG51bGwtcmVmcyBhbmQgbGVha3MKICAqIDIwMDYtMDMtMTIgZmwgIG1lcmdlIGluIDIuNSBzc2l6ZV90IGNoYW5nZXMKKyAqIDIwMDctMDgtMjUgZmwgIGNhbGwgY3VzdG9tIGJ1aWxkZXIncyBjbG9zZSBtZXRob2QgZnJvbSBYTUxQYXJzZXIKKyAqIDIwMDctMDgtMzEgZmwgIGFkZGVkIGl0ZXIsIGV4dGVuZCBmcm9tIEVUIDEuMworICogMjAwNy0wOS0wMSBmbCAgZml4ZWQgUGFyc2VFcnJvciBleGNlcHRpb24sIHNldHNsaWNlIHNvdXJjZSB0eXBlLCBldGMKKyAqIDIwMDctMDktMDMgZmwgIGZpeGVkIGhhbmRsaW5nIG9mIG5lZ2F0aXZlIGluc2VydCBpbmRleGVzCisgKiAyMDA3LTA5LTA0IGZsICBhZGRlZCBpdGVydGV4dCBmcm9tIEVUIDEuMworICogMjAwNy0wOS0wNiBmbCAgYWRkZWQgcG9zaXRpb24gYXR0cmlidXRlIHRvIFBhcnNlRXJyb3IgZXhjZXB0aW9uCisgKiAyMDA4LTA2LTA2IGZsICBkZWxheSBlcnJvciByZXBvcnRpbmcgaW4gaXRlcnBhcnNlIChmcm9tIEhydm9qZSBOaWtzaWMpCiAgKgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgYnkgRnJlZHJpayBMdW5kaC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGguCiAgKgogICogaW5mb0BweXRob253YXJlLmNvbQogICogaHR0cDovL3d3dy5weXRob253YXJlLmNvbQogICovCiAKIC8qIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4gKi8KLS8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvMi40L2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLworLyogU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKIApAQCAtNTYsNyArNTcsNyBAQAogLyogTGVhdmUgZGVmaW5lZCB0byBpbmNsdWRlIHRoZSBleHBhdC1iYXNlZCBYTUxQYXJzZXIgdHlwZSAqLwogI2RlZmluZSBVU0VfRVhQQVQKIAotLyogRGVmaW5lIHRvIHRvIGFsbCBleHBhdCBjYWxscyB2aWEgcHlleHBhdCdzIGVtYmVkZGVkIGV4cGF0IGxpYnJhcnkgKi8KKy8qIERlZmluZSB0byBkbyBhbGwgZXhwYXQgY2FsbHMgdmlhIHB5ZXhwYXQncyBlbWJlZGRlZCBleHBhdCBsaWJyYXJ5ICovCiAvKiAjZGVmaW5lIFVTRV9QWUVYUEFUX0NBUEkgKi8KIAogLyogQW4gZWxlbWVudCBjYW4gaG9sZCB0aGlzIG1hbnkgY2hpbGRyZW4gd2l0aG91dCBleHRyYSBtZW1vcnkKQEAgLTkzLDYgKzk0LDI1IEBACiAjZGVmaW5lIExPQ0FMKHR5cGUpIHN0YXRpYyB0eXBlCiAjZW5kaWYKIAorLyogY29tcGF0aWJpbGl0eSBtYWNyb3MgKi8KKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDYwMDAwKQorI2RlZmluZSBQeV9SRUZDTlQob2IpICgoKFB5T2JqZWN0Kikob2IpKS0+b2JfcmVmY250KQorI2RlZmluZSBQeV9UWVBFKG9iKSAoKChQeU9iamVjdCopKG9iKSktPm9iX3R5cGUpCisjZW5kaWYKKworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCit0eXBlZGVmIGludCBQeV9zc2l6ZV90OworI2RlZmluZSBsZW5mdW5jIGlucXVpcnkKKyNlbmRpZgorCisjaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA0MDAwMCkKKyNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3QgUHlEaWN0X0NoZWNrCisKKyNpZiAhZGVmaW5lZChQeV9SRVRVUk5fTk9ORSkKKyNkZWZpbmUgUHlfUkVUVVJOX05PTkUgcmV0dXJuIFB5X0lOQ1JFRihQeV9Ob25lKSwgUHlfTm9uZQorI2VuZGlmCisjZW5kaWYKKwogLyogbWFjcm9zIHVzZWQgdG8gc3RvcmUgJ2pvaW4nIGZsYWdzIGluIHN0cmluZyBvYmplY3QgcG9pbnRlcnMuICBub3RlCiAgICB0aGF0IGFsbCB1c2Ugb2YgdGV4dCBhbmQgdGFpbCBhcyBvYmplY3QgcG9pbnRlcnMgbXVzdCBiZSB3cmFwcGVkIGluCiAgICBKT0lOX09CSi4gIHNlZSBjb21tZW50cyBpbiB0aGUgRWxlbWVudE9iamVjdCBkZWZpbml0aW9uIGZvciBtb3JlCkBAIC0xMDIsOSArMTIyLDExIEBACiAjZGVmaW5lIEpPSU5fT0JKKHApICgoUHlPYmplY3QqKSAoKFB5X3VpbnRwdHJfdCkgKHApICYgfjEpKQogCiAvKiBnbHVlIGZ1bmN0aW9ucyAoc2VlIHRoZSBpbml0IGZ1bmN0aW9uIGZvciBkZXRhaWxzKSAqLworc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iajsKIHN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfY29weWVsZW1lbnRfb2JqOwogc3RhdGljIFB5T2JqZWN0KiBlbGVtZW50dHJlZV9kZWVwY29weV9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2dldGl0ZXJhdG9yX29iajsKK3N0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfaXRlcl9vYmo7CitzdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2l0ZXJ0ZXh0X29iajsKIHN0YXRpYyBQeU9iamVjdCogZWxlbWVudHBhdGhfb2JqOwogCiAvKiBoZWxwZXJzICovCkBAIC0xODgsMjMgKzIxMCw2IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwMDApCi1MT0NBTChpbnQpCi1QeURpY3RfVXBkYXRlKFB5T2JqZWN0KiBkaWN0LCBQeU9iamVjdCogb3RoZXIpCi17Ci0gICAgLyogUHlEaWN0X1VwZGF0ZSBlbXVsYXRpb24gZm9yIDIuMSBhbmQgZWFybGllciAqLwotCi0gICAgUHlPYmplY3QqIHJlczsKLSAgICAKLSAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGRpY3QsICJ1cGRhdGUiLCAiTyIsIG90aGVyKTsKLSAgICBpZiAoIXJlcykKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHRoZSBlbGVtZW50IHR5cGUgKi8KIApAQCAtMzA5LDcgKzMxNCw3IEBACiAgICAgICAgIGlmIChlbGVtZW50X25ld19leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgewogICAgICAgICAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0JfQorICAgICAgICB9CiAKICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCA9IDA7CiAgICAgICAgIHNlbGYtPmV4dHJhLT5hbGxvY2F0ZWQgPSBTVEFUSUNfQ0hJTERSRU47CkBAIC00MDcsNiArNDEyLDcgQEAKICAgICBQeU9iamVjdCogcmVzID0gc2VsZi0+ZXh0cmEtPmF0dHJpYjsKIAogICAgIGlmIChyZXMgPT0gUHlfTm9uZSkgeworICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgLyogY3JlYXRlIG1pc3NpbmcgZGljdGlvbmFyeSAqLwogICAgICAgICByZXMgPSBQeURpY3RfTmV3KCk7CiAgICAgICAgIGlmICghcmVzKQpAQCAtNjg4LDYgKzY5NCw4IEBACiAKICAgICAvKiBhZGQgb2JqZWN0IHRvIG1lbW8gZGljdGlvbmFyeSAoc28gZGVlcGNvcHkgd29uJ3QgdmlzaXQgaXQgYWdhaW4pICovCiAgICAgaWQgPSBQeUxvbmdfRnJvbUxvbmcoKFB5X3VpbnRwdHJfdCkgc2VsZik7CisgICAgaWYgKCFpZCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGkgPSBQeURpY3RfU2V0SXRlbShtZW1vLCBpZCwgKFB5T2JqZWN0KikgZWxlbWVudCk7CiAKQEAgLTcxMSw3ICs3MTksOCBAQAogCiAgICAgLyogY2hlY2sgaWYgYSB0YWcgY29udGFpbnMgYW4geHBhdGggY2hhcmFjdGVyICovCiAKLSNkZWZpbmUgUEFUSENIQVIoY2gpIChjaCA9PSAnLycgfHwgY2ggPT0gJyonIHx8IGNoID09ICdbJyB8fCBjaCA9PSAnQCcpCisjZGVmaW5lIFBBVEhDSEFSKGNoKSBcCisgICAgKGNoID09ICcvJyB8fCBjaCA9PSAnKicgfHwgY2ggPT0gJ1snIHx8IGNoID09ICdAJyB8fCBjaCA9PSAnLicpCiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRhZykpIHsKICAgICAgICAgUHlfVU5JQ09ERSAqcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHRhZyk7CkBAIC03NDIsMTcgKzc1MSw1MSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCitlbGVtZW50X2V4dGVuZChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCogc2VxOworICAgIFB5X3NzaXplX3QgaSwgc2VxbGVuID0gMDsKKworICAgIFB5T2JqZWN0KiBzZXFfaW47CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmV4dGVuZCIsICZzZXFfaW4pKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChzZXFfaW4sICIiKTsKKyAgICBpZiAoIXNlcSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZXhwZWN0ZWQgc2VxdWVuY2UsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRShzZXFfaW4pLT50cF9uYW1lCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZXFsZW4gPSBQeVNlcXVlbmNlX1NpemUoc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QqIGVsZW1lbnQgPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgaWYgKGVsZW1lbnRfYWRkX3N1YmVsZW1lbnQoc2VsZiwgZWxlbWVudCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgUHlfREVDUkVGKHNlcSk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9maW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIGludCBpOwogCiAgICAgUHlPYmplY3QqIHRhZzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZmluZCIsICZ0YWcpKQorICAgIFB5T2JqZWN0KiBuYW1lc3BhY2VzID0gUHlfTm9uZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpmaW5kIiwgJnRhZywgJm5hbWVzcGFjZXMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChjaGVja3BhdGgodGFnKSkKKyAgICBpZiAoY2hlY2twYXRoKHRhZykgfHwgbmFtZXNwYWNlcyAhPSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZCgKLSAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmQiLCAiT08iLCBzZWxmLCB0YWcKKyAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmQiLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkKQEAgLTc3NywxMiArODIwLDEzIEBACiAKICAgICBQeU9iamVjdCogdGFnOwogICAgIFB5T2JqZWN0KiBkZWZhdWx0X3ZhbHVlID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TzpmaW5kdGV4dCIsICZ0YWcsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfE9POmZpbmR0ZXh0IiwgJnRhZywgJmRlZmF1bHRfdmFsdWUsICZuYW1lc3BhY2VzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoY2hlY2twYXRoKHRhZykpCisgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICJmaW5kdGV4dCIsICJPT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUKKyAgICAgICAgICAgIGVsZW1lbnRwYXRoX29iaiwgImZpbmR0ZXh0IiwgIk9PT08iLCBzZWxmLCB0YWcsIGRlZmF1bHRfdmFsdWUsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CkBAIC04MTMsMTIgKzg1NywxMyBAQAogICAgIFB5T2JqZWN0KiBvdXQ7CiAKICAgICBQeU9iamVjdCogdGFnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpmaW5kYWxsIiwgJnRhZykpCisgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPOmZpbmRhbGwiLCAmdGFnLCAmbmFtZXNwYWNlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGNoZWNrcGF0aCh0YWcpKQorICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiZmluZGFsbCIsICJPTyIsIHNlbGYsIHRhZworICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAiZmluZGFsbCIsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKICAgICAgICAgICAgICk7CiAKICAgICBvdXQgPSBQeUxpc3RfTmV3KDApOwpAQCAtODQzLDYgKzg4OCwxOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QqCitlbGVtZW50X2l0ZXJmaW5kKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIFB5T2JqZWN0KiB0YWc7CisgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xPOml0ZXJmaW5kIiwgJnRhZywgJm5hbWVzcGFjZXMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKAorICAgICAgICBlbGVtZW50cGF0aF9vYmosICJpdGVyZmluZCIsICJPT08iLCBzZWxmLCB0YWcsIG5hbWVzcGFjZXMKKyAgICAgICAgKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9nZXQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgUHlPYmplY3QqIHZhbHVlOwpAQCAtODcwLDYgKzkyOCw4IEBACiAgICAgaW50IGk7CiAgICAgUHlPYmplY3QqIGxpc3Q7CiAKKyAgICAvKiBGSVhNRTogcmVwb3J0IGFzIGRlcHJlY2F0ZWQ/ICovCisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIjpnZXRjaGlsZHJlbiIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtODkwLDE4ICs5NTAsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9nZXRpdGVyYXRvcihFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK2VsZW1lbnRfaXRlcihFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIAogICAgIFB5T2JqZWN0KiB0YWcgPSBQeV9Ob25lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86Z2V0aXRlcmF0b3IiLCAmdGFnKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOml0ZXIiLCAmdGFnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIWVsZW1lbnR0cmVlX2dldGl0ZXJhdG9yX29iaikgeworICAgIGlmICghZWxlbWVudHRyZWVfaXRlcl9vYmopIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgImdldGl0ZXJhdG9yIGhlbHBlciBub3QgZm91bmQiCisgICAgICAgICAgICAiaXRlciBoZWxwZXIgbm90IGZvdW5kIgogICAgICAgICAgICAgKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTEzLDcgKzk3MywzNyBAQAogICAgIFB5X0lOQ1JFRihzZWxmKTsgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCAoUHlPYmplY3QqKSBzZWxmKTsKICAgICBQeV9JTkNSRUYodGFnKTsgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMSwgKFB5T2JqZWN0KikgdGFnKTsKIAotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfZ2V0aXRlcmF0b3Jfb2JqLCBhcmdzKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGVsZW1lbnR0cmVlX2l0ZXJfb2JqLCBhcmdzKTsKKworICAgIFB5X0RFQ1JFRihhcmdzKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0KgorZWxlbWVudF9pdGVydGV4dChFbGVtZW50T2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBQeU9iamVjdCogcmVzdWx0OworICAgIAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOml0ZXJ0ZXh0IikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFlbGVtZW50dHJlZV9pdGVydGV4dF9vYmopIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAorICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgIml0ZXJ0ZXh0IGhlbHBlciBub3QgZm91bmQiCisgICAgICAgICAgICApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7CisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRihzZWxmKTsgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCAoUHlPYmplY3QqKSBzZWxmKTsKKworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfaXRlcnRleHRfb2JqLCBhcmdzKTsKIAogICAgIFB5X0RFQ1JFRihhcmdzKTsKIApAQCAtOTM4LDM5ICsxMDI4LDYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotZWxlbWVudF9nZXRzbGljZShQeU9iamVjdCogc2VsZl8sIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQotewotICAgIEVsZW1lbnRPYmplY3QqIHNlbGYgPSAoRWxlbWVudE9iamVjdCopIHNlbGZfOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCogbGlzdDsKLQotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIHJldHVybiBQeUxpc3RfTmV3KDApOwotCi0gICAgLyogc3RhbmRhcmQgY2xhbXBpbmcgKi8KLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKGVuZCA+IHNlbGYtPmV4dHJhLT5sZW5ndGgpCi0gICAgICAgIGVuZCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0gICAgaWYgKHN0YXJ0ID4gZW5kKQotICAgICAgICBzdGFydCA9IGVuZDsKLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KGVuZCAtIHN0YXJ0KTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewotICAgICAgICBQeU9iamVjdCogaXRlbSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaSAtIHN0YXJ0LCBpdGVtKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGlzdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9pbnNlcnQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGk7CkBAIC05ODQsOCArMTA0MSwxMSBAQAogICAgIGlmICghc2VsZi0+ZXh0cmEpCiAgICAgICAgIGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIE5VTEwpOwogCi0gICAgaWYgKGluZGV4IDwgMCkKLSAgICAgICAgaW5kZXggPSAwOworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgaW5kZXggKz0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKKyAgICAgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICB9CiAgICAgaWYgKGluZGV4ID4gc2VsZi0+ZXh0cmEtPmxlbmd0aCkKICAgICAgICAgaW5kZXggPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwogCkBAIC0xMTU2LDc3ICsxMjE2LDYgQEAKIH0KIAogc3RhdGljIGludAotZWxlbWVudF9zZXRzbGljZShQeU9iamVjdCogc2VsZl8sIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBQeU9iamVjdCogaXRlbSkKLXsKLSAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKLSAgICBQeV9zc2l6ZV90IGksIG5ldywgb2xkOwotICAgIFB5T2JqZWN0KiByZWN5Y2xlID0gTlVMTDsKLQotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIE5VTEwpOwotCi0gICAgLyogc3RhbmRhcmQgY2xhbXBpbmcgKi8KLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCA9IDA7Ci0gICAgaWYgKGVuZCA+IHNlbGYtPmV4dHJhLT5sZW5ndGgpCi0gICAgICAgIGVuZCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0gICAgaWYgKHN0YXJ0ID4gZW5kKQotICAgICAgICBzdGFydCA9IGVuZDsKLQotICAgIG9sZCA9IGVuZCAtIHN0YXJ0OwotCi0gICAgaWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgbmV3ID0gMDsKLSAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2tFeGFjdChpdGVtKSkgewotICAgICAgICBuZXcgPSBQeUxpc3RfR0VUX1NJWkUoaXRlbSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogRklYTUU6IHN1cHBvcnQgYXJiaXRyYXJ5IHNlcXVlbmNlcz8gKi8KLSAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImV4cGVjdGVkIGxpc3QsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZQotICAgICAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChvbGQgPiAwKSB7Ci0gICAgICAgIC8qIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGlzIG1ldGhvZCAodmlhIGRlY3JlZiksIG1vdmUKLSAgICAgICAgICAgb2xkIGl0ZW1zIHRvIHRoZSByZWN5Y2xlIGJpbiBoZXJlLCBhbmQgZ2V0IHJpZCBvZiB0aGVtIHdoZW4KLSAgICAgICAgICAgd2UncmUgZG9uZSBtb2RpZnlpbmcgdGhlIGVsZW1lbnQgKi8KLSAgICAgICAgcmVjeWNsZSA9IFB5TGlzdF9OZXcob2xkKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG9sZDsgaSsrKQotICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHJlY3ljbGUsIGksIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpICsgc3RhcnRdKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3IDwgb2xkKSB7Ci0gICAgICAgIC8qIGRlbGV0ZSBzbGljZSAqLwotICAgICAgICBmb3IgKGkgPSBlbmQ7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspCi0gICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIG5ldyAtIG9sZF0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07Ci0gICAgfSBlbHNlIGlmIChuZXcgPiBvbGQpIHsKLSAgICAgICAgLyogaW5zZXJ0IHNsaWNlICovCi0gICAgICAgIGlmIChlbGVtZW50X3Jlc2l6ZShzZWxmLCBuZXcgLSBvbGQpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZm9yIChpID0gc2VsZi0+ZXh0cmEtPmxlbmd0aC0xOyBpID49IGVuZDsgaS0tKQotICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBuZXcgLSBvbGRdID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldOwotICAgIH0KLQotICAgIC8qIHJlcGxhY2UgdGhlIHNsaWNlICovCi0gICAgZm9yIChpID0gMDsgaSA8IG5ldzsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0KiBlbGVtZW50ID0gUHlMaXN0X0dFVF9JVEVNKGl0ZW0sIGkpOwotICAgICAgICBQeV9JTkNSRUYoZWxlbWVudCk7Ci0gICAgICAgIHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpICsgc3RhcnRdID0gZWxlbWVudDsKLSAgICB9Ci0KLSAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IG5ldyAtIG9sZDsKLQotICAgIC8qIGRpc2NhcmQgdGhlIHJlY3ljbGUgYmluLCBhbmQgZXZlcnl0aGluZyBpbiBpdCAqLwotICAgIFB5X1hERUNSRUYocmVjeWNsZSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAogZWxlbWVudF9zZXRpdGVtKFB5T2JqZWN0KiBzZWxmXywgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGl0ZW0pCiB7CiAgICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87CkBAIC0xMjU2LDYgKzEyNDUsMTkwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCoKK2VsZW1lbnRfc3Vic2NyKFB5T2JqZWN0KiBzZWxmXywgUHlPYmplY3QqIGl0ZW0pCit7CisgICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87CisKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQorICAgIGlmIChQeUludF9DaGVjayhpdGVtKSB8fCBQeUxvbmdfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgbG9uZyBpID0gUHlJbnRfQXNMb25nKGl0ZW0pOworI2Vsc2UKKyAgICBpZiAoUHlJbmRleF9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaXRlbSwgUHlFeGNfSW5kZXhFcnJvcik7CisjZW5kaWYKKworICAgICAgICBpZiAoaSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA8IDAgJiYgc2VsZi0+ZXh0cmEpCisgICAgICAgICAgICBpICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CisgICAgICAgIHJldHVybiBlbGVtZW50X2dldGl0ZW0oc2VsZl8sIGkpOworICAgIH0KKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBjdXIsIGk7CisgICAgICAgIFB5T2JqZWN0KiBsaXN0OworCisgICAgICAgIGlmICghc2VsZi0+ZXh0cmEpCisgICAgICAgICAgICByZXR1cm4gUHlMaXN0X05ldygwKTsKKworICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2xpY2VsZW4gPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeUxpc3RfTmV3KDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGxpc3QgPSBQeUxpc3RfTmV3KHNsaWNlbGVuKTsKKyAgICAgICAgICAgIGlmICghbGlzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKKyAgICAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBpdGVtID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2N1cl07CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBpLCBpdGVtKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgImVsZW1lbnQgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworc3RhdGljIGludAorZWxlbWVudF9hc3Nfc3Vic2NyKFB5T2JqZWN0KiBzZWxmXywgUHlPYmplY3QqIGl0ZW0sIFB5T2JqZWN0KiB2YWx1ZSkKK3sKKyAgICBFbGVtZW50T2JqZWN0KiBzZWxmID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmXzsKKworI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwNTAwMDApCisgICAgaWYgKFB5SW50X0NoZWNrKGl0ZW0pIHx8IFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICBsb25nIGkgPSBQeUludF9Bc0xvbmcoaXRlbSk7CisjZWxzZQorICAgIGlmIChQeUluZGV4X0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IFB5TnVtYmVyX0FzU3NpemVfdChpdGVtLCBQeUV4Y19JbmRleEVycm9yKTsKKyNlbmRpZgorCisgICAgICAgIGlmIChpID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaSA8IDAgJiYgc2VsZi0+ZXh0cmEpCisgICAgICAgICAgICBpICs9IHNlbGYtPmV4dHJhLT5sZW5ndGg7CisgICAgICAgIHJldHVybiBlbGVtZW50X3NldGl0ZW0oc2VsZl8sIGksIHZhbHVlKTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgeworICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmV3bGVuLCBjdXIsIGk7CisKKyAgICAgICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCogc2VxID0gTlVMTDsKKworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQorICAgICAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7CisKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sCisgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuKSA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQorICAgICAgICAgICAgbmV3bGVuID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QodmFsdWUsICIiKTsKKyAgICAgICAgICAgIGlmICghc2VxKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzZXF1ZW5jZSwgbm90IFwiJS4yMDBzXCIiLCBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZQorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ld2xlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0ZXAgIT0gIDEgJiYgbmV3bGVuICE9IHNsaWNlbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQorICAgICAgICAgICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiBzZXF1ZW5jZSBvZiBzaXplICVkICIKKyAgICAgICAgICAgICAgICAidG8gZXh0ZW5kZWQgc2xpY2Ugb2Ygc2l6ZSAlZCIsCisjZWxzZQorICAgICAgICAgICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiBzZXF1ZW5jZSBvZiBzaXplICV6ZCAiCisgICAgICAgICAgICAgICAgInRvIGV4dGVuZGVkIHNsaWNlIG9mIHNpemUgJXpkIiwKKyNlbmRpZgorICAgICAgICAgICAgICAgIG5ld2xlbiwgc2xpY2VsZW4KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKworICAgICAgICAvKiBSZXNpemUgYmVmb3JlIGNyZWF0aW5nIHRoZSByZWN5Y2xlIGJpbiwgdG8gcHJldmVudCByZWZsZWFrcy4gKi8KKyAgICAgICAgaWYgKG5ld2xlbiA+IHNsaWNlbGVuKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudF9yZXNpemUoc2VsZiwgbmV3bGVuIC0gc2xpY2VsZW4pIDwgMCkgeworICAgICAgICAgICAgICAgIGlmIChzZXEpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzbGljZWxlbiA+IDApIHsKKyAgICAgICAgICAgIC8qIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxscyB0byB0aGlzIG1ldGhvZCAodmlhIGRlY3JlZiksIG1vdmUKKyAgICAgICAgICAgICAgIG9sZCBpdGVtcyB0byB0aGUgcmVjeWNsZSBiaW4gaGVyZSwgYW5kIGdldCByaWQgb2YgdGhlbSB3aGVuCisgICAgICAgICAgICAgICB3ZSdyZSBkb25lIG1vZGlmeWluZyB0aGUgZWxlbWVudCAqLworICAgICAgICAgICAgcmVjeWNsZSA9IFB5TGlzdF9OZXcoc2xpY2VsZW4pOworICAgICAgICAgICAgaWYgKCFyZWN5Y2xlKSB7CisgICAgICAgICAgICAgICAgaWYgKHNlcSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBzbGljZWxlbjsKKyAgICAgICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykKKyAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0ocmVjeWNsZSwgaSwgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2N1cl0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5ld2xlbiA8IHNsaWNlbGVuKSB7CisgICAgICAgICAgICAvKiBkZWxldGUgc2xpY2UgKi8KKyAgICAgICAgICAgIGZvciAoaSA9IHN0b3A7IGkgPCBzZWxmLT5leHRyYS0+bGVuZ3RoOyBpKyspCisgICAgICAgICAgICAgICAgc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2kgKyBuZXdsZW4gLSBzbGljZWxlbl0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07CisgICAgICAgIH0gZWxzZSBpZiAobmV3bGVuID4gc2xpY2VsZW4pIHsKKyAgICAgICAgICAgIC8qIGluc2VydCBzbGljZSAqLworICAgICAgICAgICAgZm9yIChpID0gc2VsZi0+ZXh0cmEtPmxlbmd0aC0xOyBpID49IHN0b3A7IGktLSkKKyAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSArIG5ld2xlbiAtIHNsaWNlbGVuXSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJlcGxhY2UgdGhlIHNsaWNlICovCisgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgbmV3bGVuOworICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0KiBlbGVtZW50ID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7CisgICAgICAgICAgICBQeV9JTkNSRUYoZWxlbWVudCk7CisgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5bY3VyXSA9IGVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IG5ld2xlbiAtIHNsaWNlbGVuOworCisgICAgICAgIGlmIChzZXEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICB9CisKKyAgICAgICAgLyogZGlzY2FyZCB0aGUgcmVjeWNsZSBiaW4sIGFuZCBldmVyeXRoaW5nIGluIGl0ICovCisgICAgICAgIFB5X1hERUNSRUYocmVjeWNsZSk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJlbGVtZW50IGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZWxlbWVudF9tZXRob2RzW10gPSB7CiAKICAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2NsZWFyLCBNRVRIX1ZBUkFSR1N9LApAQCAtMTI2OCwxMCArMTQ0MSwxNSBAQAogICAgIHsiZmluZGFsbCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9maW5kYWxsLCBNRVRIX1ZBUkFSR1N9LAogCiAgICAgeyJhcHBlbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfYXBwZW5kLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZXh0ZW5kIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2V4dGVuZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7Imluc2VydCIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9pbnNlcnQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJyZW1vdmUiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfcmVtb3ZlLCBNRVRIX1ZBUkFSR1N9LAogCi0gICAgeyJnZXRpdGVyYXRvciIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9nZXRpdGVyYXRvciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Iml0ZXIiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlciwgTUVUSF9WQVJBUkdTfSwKKyAgICB7Iml0ZXJ0ZXh0IiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXJ0ZXh0LCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiaXRlcmZpbmQiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlcmZpbmQsIE1FVEhfVkFSQVJHU30sCisKKyAgICB7ImdldGl0ZXJhdG9yIiwgKFB5Q0Z1bmN0aW9uKSBlbGVtZW50X2l0ZXIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRjaGlsZHJlbiIsIChQeUNGdW5jdGlvbikgZWxlbWVudF9nZXRjaGlsZHJlbiwgTUVUSF9WQVJBUkdTfSwKIAogICAgIHsiaXRlbXMiLCAoUHlDRnVuY3Rpb24pIGVsZW1lbnRfaXRlbXMsIE1FVEhfVkFSQVJHU30sCkBAIC0xMjk3LDMwICsxNDc1LDQ5IEBACiAgICAge05VTEwsIE5VTEx9CiB9OwogCi1zdGF0aWMgUHlPYmplY3QqICAKK3N0YXRpYyBQeU9iamVjdCoKIGVsZW1lbnRfZ2V0YXR0cm8oRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIG5hbWVvYmopCiB7CiAgICAgUHlPYmplY3QqIHJlczsKICAgICBjaGFyICpuYW1lID0gIiI7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQotCW5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lb2JqKTsKKyAgICAKKyAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApCi0JcmVzID0gc2VsZi0+dGFnOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGV4dCIpID09IDApCisgICAgLyogaGFuZGxlIGNvbW1vbiBhdHRyaWJ1dGVzIGZpcnN0ICovCisgICAgaWYgKHN0cmNtcChuYW1lLCAidGFnIikgPT0gMCkgeworICAgICAgICByZXMgPSBzZWxmLT50YWc7CisgICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0gZWxzZSBpZiAoc3RyY21wKG5hbWUsICJ0ZXh0IikgPT0gMCkgewogICAgICAgICByZXMgPSBlbGVtZW50X2dldF90ZXh0KHNlbGYpOwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidGFpbCIpID09IDApIHsKLSAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGFpbChzZWxmKTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgZWxlbWVudF9uZXdfZXh0cmEoc2VsZiwgTlVMTCk7Ci0JcmVzID0gZWxlbWVudF9nZXRfYXR0cmliKHNlbGYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKSBzZWxmLCBuYW1lb2JqKTsKKyAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogCi0gICAgUHlfWElOQ1JFRihyZXMpOworICAgIC8qIG1ldGhvZHMgKi8KKyAgICByZXMgPSBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKSBzZWxmLCBuYW1lb2JqKTsKKyAgICBpZiAocmVzKQorICAgICAgICByZXR1cm4gcmVzOworCisgICAgLyogbGVzcyBjb21tb24gYXR0cmlidXRlcyAqLworICAgIGlmIChzdHJjbXAobmFtZSwgInRhaWwiKSA9PSAwKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RhaWwoc2VsZik7CisgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgImF0dHJpYiIpID09IDApIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKCFzZWxmLT5leHRyYSkKKyAgICAgICAgICAgIGVsZW1lbnRfbmV3X2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICByZXMgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CisgICAgfQorCisgICAgaWYgKCFyZXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKHJlcyk7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtMTM2Niw5ICsxNTYzLDE1IEBACiAgICAgMCwgLyogc3FfY29uY2F0ICovCiAgICAgMCwgLyogc3FfcmVwZWF0ICovCiAgICAgZWxlbWVudF9nZXRpdGVtLAotICAgIGVsZW1lbnRfZ2V0c2xpY2UsCisgICAgMCwKICAgICBlbGVtZW50X3NldGl0ZW0sCi0gICAgZWxlbWVudF9zZXRzbGljZSwKKyAgICAwLAorfTsKKworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgZWxlbWVudF9hc19tYXBwaW5nID0geworICAgIChsZW5mdW5jKSBlbGVtZW50X2xlbmd0aCwKKyAgICAoYmluYXJ5ZnVuYykgZWxlbWVudF9zdWJzY3IsCisgICAgKG9iam9iamFyZ3Byb2MpIGVsZW1lbnRfYXNzX3N1YnNjciwKIH07CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgRWxlbWVudF9UeXBlID0gewpAQCAtMTM4Myw3ICsxNTg2LDcgQEAKICAgICAocmVwcmZ1bmMpZWxlbWVudF9yZXByLCAvKiB0cF9yZXByICovCiAgICAgMCwgLyogdHBfYXNfbnVtYmVyICovCiAgICAgJmVsZW1lbnRfYXNfc2VxdWVuY2UsIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgMCwgLyogdHBfYXNfbWFwcGluZyAqLworICAgICZlbGVtZW50X2FzX21hcHBpbmcsIC8qIHRwX2FzX21hcHBpbmcgKi8KICAgICAwLCAvKiB0cF9oYXNoICovCiAgICAgMCwgLyogdHBfY2FsbCAqLwogICAgIDAsIC8qIHRwX3N0ciAqLwpAQCAtMTUzNyw3ICsxNzQwLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VsZi0+cm9vdCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIFB5RXhjX1N5bnRheEVycm9yLAorICAgICAgICAgICAgICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLAogICAgICAgICAgICAgICAgICJtdWx0aXBsZSBlbGVtZW50cyBvbiB0b3AgbGV2ZWwiCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNjc4LDcgKzE4ODEsNyBAQAogCiBMT0NBTCh2b2lkKQogdHJlZWJ1aWxkZXJfaGFuZGxlX25hbWVzcGFjZShUcmVlQnVpbGRlck9iamVjdCogc2VsZiwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IGNoYXIgKnVyaSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnByZWZpeCwgUHlPYmplY3QgKnVyaSkKIHsKICAgICBQeU9iamVjdCogcmVzOwogICAgIFB5T2JqZWN0KiBhY3Rpb247CkBAIC0xNjkxLDggKzE4OTQsNyBAQAogICAgICAgICBpZiAoIXNlbGYtPnN0YXJ0X25zX2V2ZW50X29iaikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYWN0aW9uID0gc2VsZi0+c3RhcnRfbnNfZXZlbnRfb2JqOwotICAgICAgICAvKiBGSVhNRTogcHJlZml4IGFuZCB1cmkgdXNlIHV0Zi04IGVuY29kaW5nISAqLwotICAgICAgICBwYXJjZWwgPSBQeV9CdWlsZFZhbHVlKCJzcyIsIChwcmVmaXgpID8gcHJlZml4IDogIiIsIHVyaSk7CisgICAgICAgIHBhcmNlbCA9IFB5X0J1aWxkVmFsdWUoIk9PIiwgcHJlZml4LCB1cmkpOwogICAgICAgICBpZiAoIXBhcmNlbCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgUHlfSU5DUkVGKGFjdGlvbik7CkBAIC0xODUyLDYgKzIwNTQsNyBAQAogICAgIFB5T2JqZWN0KiBuYW1lczsKIAogICAgIFB5T2JqZWN0KiBoYW5kbGVfeG1sOworCiAgICAgUHlPYmplY3QqIGhhbmRsZV9zdGFydDsKICAgICBQeU9iamVjdCogaGFuZGxlX2RhdGE7CiAgICAgUHlPYmplY3QqIGhhbmRsZV9lbmQ7CkBAIC0xODU5LDYgKzIwNjIsOCBAQAogICAgIFB5T2JqZWN0KiBoYW5kbGVfY29tbWVudDsKICAgICBQeU9iamVjdCogaGFuZGxlX3BpOwogCisgICAgUHlPYmplY3QqIGhhbmRsZV9jbG9zZTsKKwogfSBYTUxQYXJzZXJPYmplY3Q7CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGU7CkBAIC0xOTMwLDYgKzIxMzUsMzYgQEAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyB2b2lkCitleHBhdF9zZXRfZXJyb3IoY29uc3QgY2hhciogbWVzc2FnZSwgaW50IGxpbmUsIGludCBjb2x1bW4pCit7CisgICAgUHlPYmplY3QgKmVycm9yOworICAgIFB5T2JqZWN0ICpwb3NpdGlvbjsKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOworCisgICAgc3ByaW50ZihidWZmZXIsICIlLjEwMHM6IGxpbmUgJWQsIGNvbHVtbiAlZCIsIG1lc3NhZ2UsIGxpbmUsIGNvbHVtbik7CisKKyAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgInMiLCBidWZmZXIpOworICAgIGlmICghZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIGFkZCBwb3NpdGlvbiBhdHRyaWJ1dGUgKi8KKyAgICBwb3NpdGlvbiA9IFB5X0J1aWxkVmFsdWUoIihpaSkiLCBsaW5lLCBjb2x1bW4pOworICAgIGlmICghcG9zaXRpb24pIHsKKyAgICAgICAgUHlfREVDUkVGKGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZyhlcnJvciwgInBvc2l0aW9uIiwgcG9zaXRpb24pID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihlcnJvcik7CisgICAgICAgIFB5X0RFQ1JFRihwb3NpdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUHlfREVDUkVGKHBvc2l0aW9uKTsKKworICAgIFB5RXJyX1NldE9iamVjdChlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgZXJyb3IpOworICAgIFB5X0RFQ1JFRihlcnJvcik7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBoYW5kbGVycyAqLwogCkBAIC0xOTYwLDEwICsyMTk1LDEyIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlcyA9IE5VTEw7CiAgICAgICAgIFB5X1hERUNSRUYocmVzKTsKLSAgICB9IGVsc2UgewotICAgICAgICBQeUVycl9Gb3JtYXQoCi0gICAgICAgICAgICBQeUV4Y19TeW50YXhFcnJvciwgInVuZGVmaW5lZCBlbnRpdHkgJiVzOzogbGluZSAlbGQsIGNvbHVtbiAlbGQiLAotICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoa2V5KSwKKyAgICB9IGVsc2UgaWYgKCFQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIC8qIFJlcG9ydCB0aGUgZmlyc3QgZXJyb3IsIG5vdCB0aGUgbGFzdCAqLworICAgICAgICBjaGFyIG1lc3NhZ2VbMTI4XSA9ICJ1bmRlZmluZWQgZW50aXR5ICI7CisgICAgICAgIHN0cm5jYXQobWVzc2FnZSwgZGF0YV9pbiwgZGF0YV9sZW4gPCAxMDA/ZGF0YV9sZW46MTAwKTsKKyAgICAgICAgZXhwYXRfc2V0X2Vycm9yKAorICAgICAgICAgICAgbWVzc2FnZSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yTGluZU51bWJlcikoc2VsZi0+cGFyc2VyKSwKICAgICAgICAgICAgIEVYUEFUKEdldEVycm9yQ29sdW1uTnVtYmVyKShzZWxmLT5wYXJzZXIpCiAgICAgICAgICAgICApOwpAQCAtMjAxOCw5ICsyMjU1LDE1IEBACiAgICAgICAgIC8qIHNob3J0Y3V0ICovCiAgICAgICAgIHJlcyA9IHRyZWVidWlsZGVyX2hhbmRsZV9zdGFydCgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsIGF0dHJpYik7Ci0gICAgZWxzZSBpZiAoc2VsZi0+aGFuZGxlX3N0YXJ0KQorICAgIGVsc2UgaWYgKHNlbGYtPmhhbmRsZV9zdGFydCkgeworICAgICAgICBpZiAoYXR0cmliID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyaWIpOworICAgICAgICAgICAgYXR0cmliID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKCFhdHRyaWIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5oYW5kbGVfc3RhcnQsICJPTyIsIHRhZywgYXR0cmliKTsKLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIHJlcyA9IE5VTEw7CiAKICAgICBQeV9ERUNSRUYodGFnKTsKQEAgLTIwODAsOSArMjMyMywyOCBAQAogZXhwYXRfc3RhcnRfbnNfaGFuZGxlcihYTUxQYXJzZXJPYmplY3QqIHNlbGYsIGNvbnN0IFhNTF9DaGFyKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmkpCiB7CisgICAgUHlPYmplY3QqIHNwcmVmaXggPSBOVUxMOworICAgIFB5T2JqZWN0KiBzdXJpID0gTlVMTDsKKworICAgIHN1cmkgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh1cmksIHN0cmxlbih1cmkpLCAic3RyaWN0Iik7CisgICAgaWYgKCFzdXJpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocHJlZml4KQorICAgICAgICBzcHJlZml4ID0gUHlVbmljb2RlX0RlY29kZVVURjgocHJlZml4LCBzdHJsZW4ocHJlZml4KSwgInN0cmljdCIpOworICAgIGVsc2UKKyAgICAgICAgc3ByZWZpeCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKyAgICBpZiAoIXNwcmVmaXgpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1cmkpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgdHJlZWJ1aWxkZXJfaGFuZGxlX25hbWVzcGFjZSgKLSAgICAgICAgKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0LCAxLCBwcmVmaXgsIHVyaQorICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDEsIHNwcmVmaXgsIHN1cmkKICAgICAgICAgKTsKKworICAgIFB5X0RFQ1JFRihzcHJlZml4KTsKKyAgICBQeV9ERUNSRUYoc3VyaSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMTU4LDEwICsyNDIwLDEwIEBACiAgICAgcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHUpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JaWYgKHBbaV0gIT0gUHlfVU5JQ09ERV9SRVBMQUNFTUVOVF9DSEFSQUNURVIpCi0JICAgIGluZm8tPm1hcFtpXSA9IHBbaV07CisgICAgICAgIGlmIChwW2ldICE9IFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKQorICAgICAgICAgICAgaW5mby0+bWFwW2ldID0gcFtpXTsKICAgICAgICAgZWxzZQotCSAgICBpbmZvLT5tYXBbaV0gPSAtMTsKKyAgICAgICAgICAgIGluZm8tPm1hcFtpXSA9IC0xOwogICAgIH0KIAogICAgIFB5X0RFQ1JFRih1KTsKQEAgLTIyNDUsNiArMjUwNyw3IEBACiAgICAgc2VsZi0+aGFuZGxlX2VuZCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGFyZ2V0LCAiZW5kIik7CiAgICAgc2VsZi0+aGFuZGxlX2NvbW1lbnQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgImNvbW1lbnQiKTsKICAgICBzZWxmLT5oYW5kbGVfcGkgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHRhcmdldCwgInBpIik7CisgICAgc2VsZi0+aGFuZGxlX2Nsb3NlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0YXJnZXQsICJjbG9zZSIpOwogCiAgICAgUHlFcnJfQ2xlYXIoKTsKIApAQCAtMjI4OCw2ICsyNTUxLDcgQEAKIHsKICAgICBFWFBBVChQYXJzZXJGcmVlKShzZWxmLT5wYXJzZXIpOwogCisgICAgUHlfWERFQ1JFRihzZWxmLT5oYW5kbGVfY2xvc2UpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aGFuZGxlX3BpKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmhhbmRsZV9jb21tZW50KTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmhhbmRsZV9lbmQpOwpAQCAtMjMxOCw4ICsyNTgyLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgIFB5RXhjX1N5bnRheEVycm9yLCAiJXM6IGxpbmUgJWxkLCBjb2x1bW4gJWxkIiwKKyAgICAgICAgZXhwYXRfc2V0X2Vycm9yKAogICAgICAgICAgICAgRVhQQVQoRXJyb3JTdHJpbmcpKEVYUEFUKEdldEVycm9yQ29kZSkoc2VsZi0+cGFyc2VyKSksCiAgICAgICAgICAgICBFWFBBVChHZXRFcnJvckxpbmVOdW1iZXIpKHNlbGYtPnBhcnNlciksCiAgICAgICAgICAgICBFWFBBVChHZXRFcnJvckNvbHVtbk51bWJlcikoc2VsZi0+cGFyc2VyKQpAQCAtMjM0MCwxMyArMjYwMywxNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHJlcyA9IGV4cGF0X3BhcnNlKHNlbGYsICIiLCAwLCAxKTsKKyAgICBpZiAoIXJlcykKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAocmVzICYmIFRyZWVCdWlsZGVyX0NoZWNrRXhhY3Qoc2VsZi0+dGFyZ2V0KSkgeworICAgIGlmIChUcmVlQnVpbGRlcl9DaGVja0V4YWN0KHNlbGYtPnRhcmdldCkpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiB0cmVlYnVpbGRlcl9kb25lKChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKKyAgICB9IGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+aGFuZGxlX2Nsb3NlLCAiIik7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTI0NTgsNyArMjcyNSw3IEBACiAKICAgICBpZiAoZXZlbnRfc2V0ID09IFB5X05vbmUpIHsKICAgICAgICAgLyogZGVmYXVsdCBpcyAiZW5kIiBvbmx5ICovCi0gICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZygiZW5kIik7CisgICAgICAgIHRhcmdldC0+ZW5kX2V2ZW50X29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJlbmQiKTsKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCkBAIC0yNDY4LDkgKzI3MzUsMTUgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShldmVudF9zZXQpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QqIGl0ZW0gPSBQeVR1cGxlX0dFVF9JVEVNKGV2ZW50X3NldCwgaSk7CiAgICAgICAgIGNoYXIqIGV2ZW50OwotICAgICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2soaXRlbSkpCisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGV2ZW50ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhpdGVtKTsKKyAgICAgICAgICAgIGlmIChldmVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhpdGVtKSkKKyAgICAgICAgICAgIGV2ZW50ID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgZXZlbnQgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CiAgICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGl0ZW07CkBAIC0yNTI2LDI5ICsyNzk5LDI1IEBACiBzdGF0aWMgUHlPYmplY3QqICAKIHhtbHBhcnNlcl9nZXRhdHRybyhYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBuYW1lb2JqKQogewotICAgIFB5T2JqZWN0KiByZXM7Ci0gICAgY2hhciAqbmFtZSA9ICIiOwotCi0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhuYW1lb2JqKSkKLQluYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lb2JqKTsKLQotICAgIFB5RXJyX0NsZWFyKCk7Ci0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJlbnRpdHkiKSA9PSAwKQotCXJlcyA9IHNlbGYtPmVudGl0eTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhcmdldCIpID09IDApCi0JcmVzID0gc2VsZi0+dGFyZ2V0OwotICAgIGVsc2UgaWYgKHN0cmNtcChuYW1lLCAidmVyc2lvbiIpID09IDApIHsKLSAgICAgICAgY2hhciBidWZmZXJbMTAwXTsKLSAgICAgICAgc3ByaW50ZihidWZmZXIsICJFeHBhdCAlZC4lZC4lZCIsIFhNTF9NQUpPUl9WRVJTSU9OLAorICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpIHsKKyAgICAgICAgUHlPYmplY3QqIHJlczsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJlbnRpdHkiKSA9PSAwKQorICAgICAgICAgICAgcmVzID0gc2VsZi0+ZW50aXR5OworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lb2JqLCAidGFyZ2V0IikgPT0gMCkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYtPnRhcmdldDsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgInZlcnNpb24iKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAgICAgIkV4cGF0ICVkLiVkLiVkIiwgWE1MX01BSk9SX1ZFUlNJT04sCiAgICAgICAgICAgICAgICAgWE1MX01JTk9SX1ZFUlNJT04sIFhNTF9NSUNST19WRVJTSU9OKTsKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZyhidWZmZXIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKSBzZWxmLCBuYW1lb2JqKTsKLSAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ290byBnZW5lcmljOwogCi0gICAgUHlfSU5DUkVGKHJlcyk7Ci0gICAgcmV0dXJuIHJlczsKKyAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICBnZW5lcmljOgorICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QqKSBzZWxmLCBuYW1lb2JqKTsKIH0KIAogc3RhdGljIFB5VHlwZU9iamVjdCBYTUxQYXJzZXJfVHlwZSA9IHsKQEAgLTI2MDAsMTUgKzI4NjksMTUgQEAKIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9lbGVtZW50dHJlZW1vZHVsZSA9IHsKLQlQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0JIl9lbGVtZW50dHJlZSIsCi0JTlVMTCwKLQktMSwKLQlfZnVuY3Rpb25zLAotCU5VTEwsCi0JTlVMTCwKLQlOVUxMLAotCU5VTEwKKyAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICAgICAiX2VsZW1lbnR0cmVlIiwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgLTEsCisgICAgICAgIF9mdW5jdGlvbnMsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwsCisgICAgICAgIE5VTEwKIH07CiAKIFB5TU9ESU5JVF9GVU5DCkBAIC0yNjE3LDE4ICsyODg2LDE1IEBACiAgICAgUHlPYmplY3QqIG07CiAgICAgUHlPYmplY3QqIGc7CiAgICAgY2hhciogYm9vdHN0cmFwOwotI2lmIGRlZmluZWQoVVNFX1BZRVhQQVRfQ0FQSSkKLSAgICBzdHJ1Y3QgUHlFeHBhdF9DQVBJKiBjYXBpOwotI2VuZGlmCiAKICAgICAvKiBJbml0aWFsaXplIG9iamVjdCB0eXBlcyAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlRyZWVCdWlsZGVyX1R5cGUpIDwgMCkKLQlyZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudF9UeXBlKSA8IDApCi0JcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIGlmIChQeVR5cGVfUmVhZHkoJlhNTFBhcnNlcl9UeXBlKSA8IDApCi0JcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfZWxlbWVudHRyZWVtb2R1bGUpOwpAQCAtMjYzOCw4ICsyOTA0LDggQEAKICAgICAvKiBUaGUgY29kZSBiZWxvdyByZXF1aXJlcyB0aGF0IHRoZSBtb2R1bGUgZ2V0cyBhbHJlYWR5IGFkZGVkCiAgICAgICAgdG8gc3lzLm1vZHVsZXMuICovCiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpLAotCQkJIF9lbGVtZW50dHJlZW1vZHVsZS5tX25hbWUsCi0JCQkgbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgX2VsZW1lbnR0cmVlbW9kdWxlLm1fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtKTsKIAogICAgIC8qIHB5dGhvbiBnbHVlIGNvZGUgKi8KIApAQCAtMjY1MSwxMCArMjkxNyw2IEBACiAKICAgICBib290c3RyYXAgPSAoCiAKLSNpZiAoUFlfVkVSU0lPTl9IRVggPj0gMHgwMjAyMDAwMCAmJiBQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMzAwMDApCi0gICAgICAgICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGdlbmVyYXRvcnNcbiIgLyogZW5hYmxlIHlpZWxkIHVuZGVyIDIuMiAqLwotI2VuZGlmCi0KICAgICAgICAgImZyb20gY29weSBpbXBvcnQgY29weSwgZGVlcGNvcHlcbiIKIAogICAgICAgICAidHJ5OlxuIgpAQCAtMjY3Miw0NiArMjkzNCw1NSBAQAogICAgICAgICAiICBkZWYgY29weWVsZW1lbnQoZWxlbSk6XG4iCiAgICAgICAgICIgICAgcmV0dXJuIGVsZW1cbiIKIAotICAgICAgICAiZGVmIENvbW1lbnQodGV4dD1Ob25lKTpcbiIgLyogcHVibGljICovCisgICAgICAgICJjbGFzcyBDb21tZW50UHJveHk6XG4iCisgICAgICAgICIgZGVmIF9fY2FsbF9fKHNlbGYsIHRleHQ9Tm9uZSk6XG4iCiAgICAgICAgICIgIGVsZW1lbnQgPSBjRWxlbWVudFRyZWUuRWxlbWVudChFVC5Db21tZW50KVxuIgogICAgICAgICAiICBlbGVtZW50LnRleHQgPSB0ZXh0XG4iCiAgICAgICAgICIgIHJldHVybiBlbGVtZW50XG4iCi0gICAgICAgICJjRWxlbWVudFRyZWUuQ29tbWVudCA9IENvbW1lbnRcbiIKKyAgICAgICAgIiBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIEVULkNvbW1lbnQgPT0gb3RoZXJcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5Db21tZW50ID0gQ29tbWVudFByb3h5KClcbiIKIAogICAgICAgICAiY2xhc3MgRWxlbWVudFRyZWUoRVQuRWxlbWVudFRyZWUpOlxuIiAvKiBwdWJsaWMgKi8KICAgICAgICAgIiAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOlxuIgorICAgICAgICAiICAgIGNsb3NlX3NvdXJjZSA9IEZhbHNlXG4iCiAgICAgICAgICIgICAgaWYgbm90IGhhc2F0dHIoc291cmNlLCAncmVhZCcpOlxuIgogICAgICAgICAiICAgICAgc291cmNlID0gb3Blbihzb3VyY2UsICdyYicpXG4iCi0gICAgICAgICIgICAgaWYgcGFyc2VyIGlzIG5vdCBOb25lOlxuIgotICAgICAgICAiICAgICAgd2hpbGUgMTpcbiIKLSAgICAgICAgIiAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KVxuIgotICAgICAgICAiICAgICAgICBpZiBub3QgZGF0YTpcbiIKLSAgICAgICAgIiAgICAgICAgICBicmVha1xuIgotICAgICAgICAiICAgICAgICBwYXJzZXIuZmVlZChkYXRhKVxuIgotICAgICAgICAiICAgICAgc2VsZi5fcm9vdCA9IHBhcnNlci5jbG9zZSgpXG4iCi0gICAgICAgICIgICAgZWxzZTpcbiIgCi0gICAgICAgICIgICAgICBwYXJzZXIgPSBjRWxlbWVudFRyZWUuWE1MUGFyc2VyKClcbiIKLSAgICAgICAgIiAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlKHNvdXJjZSlcbiIKLSAgICAgICAgIiAgICByZXR1cm4gc2VsZi5fcm9vdFxuIgorICAgICAgICAiICAgICAgY2xvc2Vfc291cmNlID0gVHJ1ZVxuIgorICAgICAgICAiICAgIHRyeTpcbiIKKyAgICAgICAgIiAgICAgIGlmIHBhcnNlciBpcyBub3QgTm9uZTpcbiIKKyAgICAgICAgIiAgICAgICAgd2hpbGUgMTpcbiIKKyAgICAgICAgIiAgICAgICAgICBkYXRhID0gc291cmNlLnJlYWQoNjU1MzYpXG4iCisgICAgICAgICIgICAgICAgICAgaWYgbm90IGRhdGE6XG4iCisgICAgICAgICIgICAgICAgICAgICBicmVha1xuIgorICAgICAgICAiICAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpXG4iCisgICAgICAgICIgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuY2xvc2UoKVxuIgorICAgICAgICAiICAgICAgZWxzZTpcbiIgCisgICAgICAgICIgICAgICAgIHBhcnNlciA9IGNFbGVtZW50VHJlZS5YTUxQYXJzZXIoKVxuIgorICAgICAgICAiICAgICAgICBzZWxmLl9yb290ID0gcGFyc2VyLl9wYXJzZShzb3VyY2UpXG4iCisgICAgICAgICIgICAgICByZXR1cm4gc2VsZi5fcm9vdFxuIgorICAgICAgICAiICAgIGZpbmFsbHk6XG4iCisgICAgICAgICIgICAgICBpZiBjbG9zZV9zb3VyY2U6XG4iCisgICAgICAgICIgICAgICAgIHNvdXJjZS5jbG9zZSgpXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuRWxlbWVudFRyZWUgPSBFbGVtZW50VHJlZVxuIgogCi0gICAgICAgICJkZWYgZ2V0aXRlcmF0b3Iobm9kZSwgdGFnPU5vbmUpOlxuIiAvKiBoZWxwZXIgKi8KKyAgICAgICAgImRlZiBpdGVyKG5vZGUsIHRhZz1Ob25lKTpcbiIgLyogaGVscGVyICovCiAgICAgICAgICIgIGlmIHRhZyA9PSAnKic6XG4iCiAgICAgICAgICIgICAgdGFnID0gTm9uZVxuIgotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwMDApCi0gICAgICAgICIgIG5vZGVzID0gW11cbiIgLyogMi4xIGRvZXNuJ3QgaGF2ZSB5aWVsZCAqLwotICAgICAgICAiICBpZiB0YWcgaXMgTm9uZSBvciBub2RlLnRhZyA9PSB0YWc6XG4iCi0gICAgICAgICIgICAgbm9kZXMuYXBwZW5kKG5vZGUpXG4iCi0gICAgICAgICIgIGZvciBub2RlIGluIG5vZGU6XG4iCi0gICAgICAgICIgICAgbm9kZXMuZXh0ZW5kKGdldGl0ZXJhdG9yKG5vZGUsIHRhZykpXG4iCi0gICAgICAgICIgIHJldHVybiBub2Rlc1xuIgotI2Vsc2UKICAgICAgICAgIiAgaWYgdGFnIGlzIE5vbmUgb3Igbm9kZS50YWcgPT0gdGFnOlxuIgogICAgICAgICAiICAgIHlpZWxkIG5vZGVcbiIKICAgICAgICAgIiAgZm9yIG5vZGUgaW4gbm9kZTpcbiIKLSAgICAgICAgIiAgICBmb3Igbm9kZSBpbiBnZXRpdGVyYXRvcihub2RlLCB0YWcpOlxuIgorICAgICAgICAiICAgIGZvciBub2RlIGluIGl0ZXIobm9kZSwgdGFnKTpcbiIKICAgICAgICAgIiAgICAgIHlpZWxkIG5vZGVcbiIKLSNlbmRpZgorCisgICAgICAgICJkZWYgaXRlcnRleHQobm9kZSk6XG4iIC8qIGhlbHBlciAqLworICAgICAgICAiICBpZiBub2RlLnRleHQ6XG4iCisgICAgICAgICIgICAgeWllbGQgbm9kZS50ZXh0XG4iCisgICAgICAgICIgIGZvciBlIGluIG5vZGU6XG4iCisgICAgICAgICIgICAgZm9yIHMgaW4gZS5pdGVydGV4dCgpOlxuIgorICAgICAgICAiICAgICAgeWllbGQgc1xuIgorICAgICAgICAiICAgIGlmIGUudGFpbDpcbiIKKyAgICAgICAgIiAgICAgIHlpZWxkIGUudGFpbFxuIgogCiAgICAgICAgICJkZWYgcGFyc2Uoc291cmNlLCBwYXJzZXI9Tm9uZSk6XG4iIC8qIHB1YmxpYyAqLwogICAgICAgICAiICB0cmVlID0gRWxlbWVudFRyZWUoKVxuIgpAQCAtMjcxOSw0OCArMjk5MCw1NiBAQAogICAgICAgICAiICByZXR1cm4gdHJlZVxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLnBhcnNlID0gcGFyc2VcbiIKIAotI2lmIChQWV9WRVJTSU9OX0hFWCA8IDB4MDIwMjAwMDApCi0gICAgICAgICJpZiBoYXNhdHRyKEVULCAnaXRlcnBhcnNlJyk6XG4iCi0gICAgICAgICIgICAgY0VsZW1lbnRUcmVlLml0ZXJwYXJzZSA9IEVULml0ZXJwYXJzZVxuIiAvKiBkZWxlZ2F0ZSBvbiAyLjEgKi8KLSNlbHNlCi0gICAgICAgICJjbGFzcyBpdGVycGFyc2Uob2JqZWN0KTpcbiIKKyAgICAgICAgImNsYXNzIGl0ZXJwYXJzZTpcbiIKICAgICAgICAgIiByb290ID0gTm9uZVxuIgogICAgICAgICAiIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBldmVudHM9Tm9uZSk6XG4iCisgICAgICAgICIgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBGYWxzZVxuIgogICAgICAgICAiICBpZiBub3QgaGFzYXR0cihmaWxlLCAncmVhZCcpOlxuIgogICAgICAgICAiICAgIGZpbGUgPSBvcGVuKGZpbGUsICdyYicpXG4iCisgICAgICAgICIgICAgc2VsZi5fY2xvc2VfZmlsZSA9IFRydWVcbiIKICAgICAgICAgIiAgc2VsZi5fZmlsZSA9IGZpbGVcbiIKLSAgICAgICAgIiAgc2VsZi5fZXZlbnRzID0gZXZlbnRzXG4iCi0gICAgICAgICIgZGVmIF9faXRlcl9fKHNlbGYpOlxuIiAKLSAgICAgICAgIiAgZXZlbnRzID0gW11cbiIKKyAgICAgICAgIiAgc2VsZi5fZXZlbnRzID0gW11cbiIKKyAgICAgICAgIiAgc2VsZi5faW5kZXggPSAwXG4iCisgICAgICAgICIgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QgPSBOb25lXG4iCiAgICAgICAgICIgIGIgPSBjRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIoKVxuIgotICAgICAgICAiICBwID0gY0VsZW1lbnRUcmVlLlhNTFBhcnNlcihiKVxuIgotICAgICAgICAiICBwLl9zZXRldmVudHMoZXZlbnRzLCBzZWxmLl9ldmVudHMpXG4iCisgICAgICAgICIgIHNlbGYuX3BhcnNlciA9IGNFbGVtZW50VHJlZS5YTUxQYXJzZXIoYilcbiIKKyAgICAgICAgIiAgc2VsZi5fcGFyc2VyLl9zZXRldmVudHMoc2VsZi5fZXZlbnRzLCBldmVudHMpXG4iCisgICAgICAgICIgZGVmIF9fbmV4dF9fKHNlbGYpOlxuIgogICAgICAgICAiICB3aGlsZSAxOlxuIgotICAgICAgICAiICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoMTYzODQpXG4iCi0gICAgICAgICIgICAgaWYgbm90IGRhdGE6XG4iCi0gICAgICAgICIgICAgICBicmVha1xuIgotICAgICAgICAiICAgIHAuZmVlZChkYXRhKVxuIgotICAgICAgICAiICAgIGZvciBldmVudCBpbiBldmVudHM6XG4iCi0gICAgICAgICIgICAgICB5aWVsZCBldmVudFxuIgotICAgICAgICAiICAgIGRlbCBldmVudHNbOl1cbiIKLSAgICAgICAgIiAgcm9vdCA9IHAuY2xvc2UoKVxuIgotICAgICAgICAiICBmb3IgZXZlbnQgaW4gZXZlbnRzOlxuIgotICAgICAgICAiICAgIHlpZWxkIGV2ZW50XG4iCi0gICAgICAgICIgIHNlbGYucm9vdCA9IHJvb3RcbiIKKyAgICAgICAgIiAgICB0cnk6XG4iCisgICAgICAgICIgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XVxuIgorICAgICAgICAiICAgIGV4Y2VwdCBJbmRleEVycm9yOlxuIgorICAgICAgICAiICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6XG4iCisgICAgICAgICIgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3RcbiIKKyAgICAgICAgIiAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZTpcbiIKKyAgICAgICAgIiAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKClcbiIKKyAgICAgICAgIiAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvblxuIgorICAgICAgICAiICAgICAgIyBsb2FkIGV2ZW50IGJ1ZmZlclxuIgorICAgICAgICAiICAgICAgZGVsIHNlbGYuX2V2ZW50c1s6XVxuIgorICAgICAgICAiICAgICAgc2VsZi5faW5kZXggPSAwXG4iCisgICAgICAgICIgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKDE2Mzg0KVxuIgorICAgICAgICAiICAgICAgaWYgZGF0YTpcbiIKKyAgICAgICAgIiAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSlcbiIKKyAgICAgICAgIiAgICAgIGVsc2U6XG4iCisgICAgICAgICIgICAgICAgIHNlbGYuX3Jvb3QgPSBzZWxmLl9wYXJzZXIuY2xvc2UoKVxuIgorICAgICAgICAiICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lXG4iCisgICAgICAgICIgICAgZWxzZTpcbiIKKyAgICAgICAgIiAgICAgIHNlbGYuX2luZGV4ID0gc2VsZi5faW5kZXggKyAxXG4iCisgICAgICAgICIgICAgICByZXR1cm4gaXRlbVxuIgorICAgICAgICAiIGRlZiBfX2l0ZXJfXyhzZWxmKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIHNlbGZcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS5pdGVycGFyc2UgPSBpdGVycGFyc2VcbiIKLSNlbmRpZgogCi0gICAgICAgICJkZWYgUEkodGFyZ2V0LCB0ZXh0PU5vbmUpOlxuIiAvKiBwdWJsaWMgKi8KLSAgICAgICAgIiAgZWxlbWVudCA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlByb2Nlc3NpbmdJbnN0cnVjdGlvbilcbiIKKyAgICAgICAgImNsYXNzIFBJUHJveHk6XG4iCisgICAgICAgICIgZGVmIF9fY2FsbF9fKHNlbGYsIHRhcmdldCwgdGV4dD1Ob25lKTpcbiIKKyAgICAgICAgIiAgZWxlbWVudCA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlBJKVxuIgogICAgICAgICAiICBlbGVtZW50LnRleHQgPSB0YXJnZXRcbiIKICAgICAgICAgIiAgaWYgdGV4dDpcbiIKICAgICAgICAgIiAgICBlbGVtZW50LnRleHQgPSBlbGVtZW50LnRleHQgKyAnICcgKyB0ZXh0XG4iCiAgICAgICAgICIgIHJldHVybiBlbGVtZW50XG4iCi0KLSAgICAgICAgIiAgZWxlbSA9IGNFbGVtZW50VHJlZS5FbGVtZW50KEVULlBJKVxuIgotICAgICAgICAiICBlbGVtLnRleHQgPSB0ZXh0XG4iCi0gICAgICAgICIgIHJldHVybiBlbGVtXG4iCi0gICAgICAgICJjRWxlbWVudFRyZWUuUEkgPSBjRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUElcbiIKKyAgICAgICAgIiBkZWYgX19lcV9fKHNlbGYsIG90aGVyKTpcbiIKKyAgICAgICAgIiAgcmV0dXJuIEVULlBJID09IG90aGVyXG4iCisgICAgICAgICJjRWxlbWVudFRyZWUuUEkgPSBjRWxlbWVudFRyZWUuUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gUElQcm94eSgpXG4iCiAKICAgICAgICAgImRlZiBYTUwodGV4dCk6XG4iIC8qIHB1YmxpYyAqLwogICAgICAgICAiICBwYXJzZXIgPSBjRWxlbWVudFRyZWUuWE1MUGFyc2VyKClcbiIKQEAgLTI3NzEsMjUgKzMwNTAsMzQgQEAKICAgICAgICAgImRlZiBYTUxJRCh0ZXh0KTpcbiIgLyogcHVibGljICovCiAgICAgICAgICIgIHRyZWUgPSBYTUwodGV4dClcbiIKICAgICAgICAgIiAgaWRzID0ge31cbiIKLSAgICAgICAgIiAgZm9yIGVsZW0gaW4gdHJlZS5nZXRpdGVyYXRvcigpOlxuIgorICAgICAgICAiICBmb3IgZWxlbSBpbiB0cmVlLml0ZXIoKTpcbiIKICAgICAgICAgIiAgICBpZCA9IGVsZW0uZ2V0KCdpZCcpXG4iCiAgICAgICAgICIgICAgaWYgaWQ6XG4iCiAgICAgICAgICIgICAgICBpZHNbaWRdID0gZWxlbVxuIgogICAgICAgICAiICByZXR1cm4gdHJlZSwgaWRzXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuWE1MSUQgPSBYTUxJRFxuIgogCisgICAgICAgICJ0cnk6XG4iCisgICAgICAgICIgcmVnaXN0ZXJfbmFtZXNwYWNlID0gRVQucmVnaXN0ZXJfbmFtZXNwYWNlXG4iCisgICAgICAgICJleGNlcHQgQXR0cmlidXRlRXJyb3I6XG4iCisgICAgICAgICIgZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6XG4iCisgICAgICAgICIgIEVULl9uYW1lc3BhY2VfbWFwW3VyaV0gPSBwcmVmaXhcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5yZWdpc3Rlcl9uYW1lc3BhY2UgPSByZWdpc3Rlcl9uYW1lc3BhY2VcbiIKKwogICAgICAgICAiY0VsZW1lbnRUcmVlLmR1bXAgPSBFVC5kdW1wXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuRWxlbWVudFBhdGggPSBFbGVtZW50UGF0aCA9IEVULkVsZW1lbnRQYXRoXG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuaXNlbGVtZW50ID0gRVQuaXNlbGVtZW50XG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuUU5hbWUgPSBFVC5RTmFtZVxuIgogICAgICAgICAiY0VsZW1lbnRUcmVlLnRvc3RyaW5nID0gRVQudG9zdHJpbmdcbiIKKyAgICAgICAgImNFbGVtZW50VHJlZS5mcm9tc3RyaW5nbGlzdCA9IEVULmZyb21zdHJpbmdsaXN0XG4iCisgICAgICAgICJjRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0ID0gRVQudG9zdHJpbmdsaXN0XG4iCiAgICAgICAgICJjRWxlbWVudFRyZWUuVkVSU0lPTiA9ICciIFZFUlNJT04gIidcbiIKICAgICAgICAgImNFbGVtZW50VHJlZS5fX3ZlcnNpb25fXyA9ICciIFZFUlNJT04gIidcbiIKLSAgICAgICAgImNFbGVtZW50VHJlZS5YTUxQYXJzZXJFcnJvciA9IFN5bnRheEVycm9yXG4iCiAKICAgICAgICApOwogCi0gICAgUHlSdW5fU3RyaW5nKGJvb3RzdHJhcCwgUHlfZmlsZV9pbnB1dCwgZywgTlVMTCk7CisgICAgaWYgKCFQeVJ1bl9TdHJpbmcoYm9vdHN0cmFwLCBQeV9maWxlX2lucHV0LCBnLCBOVUxMKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlbGVtZW50cGF0aF9vYmogPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnLCAiRWxlbWVudFBhdGgiKTsKIApAQCAtMjgwNCwyMiArMzA5MiwzMCBAQAogICAgICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICBQeUVycl9DbGVhcigpOworCiAgICAgZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZywgImRlZXBjb3B5Iik7Ci0gICAgZWxlbWVudHRyZWVfZ2V0aXRlcmF0b3Jfb2JqID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZywgImdldGl0ZXJhdG9yIik7CisgICAgZWxlbWVudHRyZWVfaXRlcl9vYmogPSBQeURpY3RfR2V0SXRlbVN0cmluZyhnLCAiaXRlciIpOworICAgIGVsZW1lbnR0cmVlX2l0ZXJ0ZXh0X29iaiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGcsICJpdGVydGV4dCIpOwogCiAjaWYgZGVmaW5lZChVU0VfUFlFWFBBVF9DQVBJKQogICAgIC8qIGxpbmsgYWdhaW5zdCBweWV4cGF0LCBpZiBwb3NzaWJsZSAqLwotICAgIGNhcGkgPSBQeUNhcHN1bGVfSW1wb3J0KFB5RXhwYXRfQ0FQU1VMRV9OQU1FLCAwKTsKLSAgICBpZiAoY2FwaSAmJgotICAgICAgICBzdHJjbXAoY2FwaS0+bWFnaWMsIFB5RXhwYXRfQ0FQSV9NQUdJQykgPT0gMCAmJgotICAgICAgICBjYXBpLT5zaXplIDw9IHNpemVvZigqZXhwYXRfY2FwaSkgJiYKLSAgICAgICAgY2FwaS0+TUFKT1JfVkVSU0lPTiA9PSBYTUxfTUFKT1JfVkVSU0lPTiAmJgotICAgICAgICBjYXBpLT5NSU5PUl9WRVJTSU9OID09IFhNTF9NSU5PUl9WRVJTSU9OICYmCi0gICAgICAgIGNhcGktPk1JQ1JPX1ZFUlNJT04gPT0gWE1MX01JQ1JPX1ZFUlNJT04pCi0gICAgICAgIGV4cGF0X2NhcGkgPSBjYXBpOwotICAgIGVsc2UKLSAgICAgICAgZXhwYXRfY2FwaSA9IE5VTEw7CisgICAgZXhwYXRfY2FwaSA9IFB5Q2Fwc3VsZV9JbXBvcnQoUHlFeHBhdF9DQVBTVUxFX05BTUUsIDApOworICAgIGlmIChleHBhdF9jYXBpKSB7CisgICAgICAgIC8qIGNoZWNrIHRoYXQgaXQncyB1c2FibGUgKi8KKyAgICAgICAgaWYgKHN0cmNtcChleHBhdF9jYXBpLT5tYWdpYywgUHlFeHBhdF9DQVBJX01BR0lDKSAhPSAwIHx8CisgICAgICAgICAgICBleHBhdF9jYXBpLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBQeUV4cGF0X0NBUEkpIHx8CisgICAgICAgICAgICBleHBhdF9jYXBpLT5NQUpPUl9WRVJTSU9OICE9IFhNTF9NQUpPUl9WRVJTSU9OIHx8CisgICAgICAgICAgICBleHBhdF9jYXBpLT5NSU5PUl9WRVJTSU9OICE9IFhNTF9NSU5PUl9WRVJTSU9OIHx8CisgICAgICAgICAgICBleHBhdF9jYXBpLT5NSUNST19WRVJTSU9OICE9IFhNTF9NSUNST19WRVJTSU9OKQorICAgICAgICAgICAgZXhwYXRfY2FwaSA9IE5VTEw7CisgICAgfQogI2VuZGlmCi0gICAgcmV0dXJuIG07CiAKKyAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKKyAgICAgICAgImNFbGVtZW50VHJlZS5QYXJzZUVycm9yIiwgUHlFeGNfU3ludGF4RXJyb3IsIE5VTEwKKyAgICAgICAgKTsKKyAgICBQeV9JTkNSRUYoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmopOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGFyc2VFcnJvciIsIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKKworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwppbmRleCA5YWFhMGYzLi5kOGEyODNiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUuYwpAQCAtMTk2LDYgKzE5Niw0OCBAQAogICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLwogfTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3BhcnRpYWxfcmVwcihwYXJ0aWFsb2JqZWN0ICpwdG8pCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqYXJnbGlzdDsKKyAgICBQeU9iamVjdCAqdG1wOworICAgIFB5X3NzaXplX3QgaSwgbjsKKworICAgIGFyZ2xpc3QgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CisgICAgaWYgKGFyZ2xpc3QgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogUGFjayBwb3NpdGlvbmFsIGFyZ3VtZW50cyAqLworICAgIGFzc2VydCAoUHlUdXBsZV9DaGVjayhwdG8tPmFyZ3MpKTsKKyAgICBuID0gUHlUdXBsZV9HRVRfU0laRShwdG8tPmFyZ3MpOworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgdG1wID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLCAlUiIsIGFyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0ocHRvLT5hcmdzLCBpKSk7CisgICAgICAgIFB5X0RFQ1JFRihhcmdsaXN0KTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGFyZ2xpc3QgPSB0bXA7CisgICAgfQorICAgIC8qIFBhY2sga2V5d29yZCBhcmd1bWVudHMgKi8KKyAgICBhc3NlcnQgKHB0by0+a3cgPT0gUHlfTm9uZSAgfHwgIFB5RGljdF9DaGVjayhwdG8tPmt3KSk7CisgICAgaWYgKHB0by0+a3cgIT0gUHlfTm9uZSkgeworICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgICAgIGZvciAoaSA9IDA7IFB5RGljdF9OZXh0KHB0by0+a3csICZpLCAma2V5LCAmdmFsdWUpOykgeworICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVLCAlVT0lUiIsIGFyZ2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdsaXN0KTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGFyZ2xpc3QgPSB0bXA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVSJVUpIiwgUHlfVFlQRShwdG8pLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0by0+Zm4sIGFyZ2xpc3QpOworICAgIFB5X0RFQ1JFRihhcmdsaXN0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBQaWNrbGUgc3RyYXRlZ3k6CiAgICBfX3JlZHVjZV9fIGJ5IGl0c2VsZiBkb2Vzbid0IHN1cHBvcnQgZ2V0dGluZyBrd2FyZ3MgaW4gdGhlIHVucGlja2xlCiAgICBvcGVyYXRpb24gc28gd2UgZGVmaW5lIGEgX19zZXRzdGF0ZV9fIHRoYXQgcmVwbGFjZXMgYWxsIHRoZSBpbmZvcm1hdGlvbgpAQCAtMjU0LDcgKzI5Niw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAocmVwcmZ1bmMpcGFydGlhbF9yZXByLCAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKaW5kZXggZjE1ZmVmZC4uNDc0NTYxYiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwpAQCAtMTM1LDYgKzEzNSwyOCBAQAogICAgIHJldHVybiB2OwogfQogCitQeURvY19TVFJWQVIoZGJtX2dldF9fZG9jX18sCisiZ2V0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuXAorR2V0IHRoZSB2YWx1ZSBmb3Iga2V5LCBvciBkZWZhdWx0IGlmIG5vdCBwcmVzZW50OyBpZiBub3QgZ2l2ZW4sXG5cCitkZWZhdWx0IGlzIE5vbmUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fZ2V0KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICp2LCAqcmVzOworICAgIFB5T2JqZWN0ICpkZWYgPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZ2V0IiwgMSwgMiwgJnYsICZkZWYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBkYm1fc3Vic2NyaXB0KGRwLCB2KTsKKyAgICBpZiAocmVzID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgUHlfSU5DUkVGKGRlZik7CisgICAgICAgIHJldHVybiBkZWY7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKIHN0YXRpYyBpbnQKIGRibV9hc3Nfc3ViKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKQEAgLTE3Niw2ICsxOTgsMjkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorUHlEb2NfU1RSVkFSKGRibV9zZXRkZWZhdWx0X19kb2NfXywKKyJzZXRkZWZhdWx0KGtleVssIGRlZmF1bHRdKSAtPiB2YWx1ZVxuXAorR2V0IHZhbHVlIGZvciBrZXksIG9yIHNldCBpdCB0byBkZWZhdWx0IGFuZCByZXR1cm4gZGVmYXVsdCBpZiBub3QgcHJlc2VudDtcblwKK2lmIG5vdCBnaXZlbiwgZGVmYXVsdCBpcyBOb25lLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX3NldGRlZmF1bHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnYsICpyZXM7CisgICAgUHlPYmplY3QgKmRlZiA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJnYsICZkZWYpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBkYm1fc3Vic2NyaXB0KGRwLCB2KTsKKyAgICBpZiAocmVzID09IE5VTEwgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKGRibV9hc3Nfc3ViKGRwLCB2LCBkZWYpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gZGJtX3N1YnNjcmlwdChkcCwgdik7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKIHN0YXRpYyBQeU1hcHBpbmdNZXRob2RzIGRibV9hc19tYXBwaW5nID0gewogICAgIChsZW5mdW5jKWRibV9sZW5ndGgsICAgICAgICAgICAgICAgIC8qbXBfbGVuZ3RoKi8KICAgICAoYmluYXJ5ZnVuYylkYm1fc3Vic2NyaXB0LCAgICAgICAgICAvKm1wX3N1YnNjcmlwdCovCkBAIC0zNzgsNiArNDIzLDggQEAKICAgICB7Im5leHRrZXkiLCAgIChQeUNGdW5jdGlvbilkYm1fbmV4dGtleSwgTUVUSF9WQVJBUkdTLCBkYm1fbmV4dGtleV9fZG9jX199LAogICAgIHsicmVvcmdhbml6ZSIsKFB5Q0Z1bmN0aW9uKWRibV9yZW9yZ2FuaXplLE1FVEhfTk9BUkdTLCBkYm1fcmVvcmdhbml6ZV9fZG9jX199LAogICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKKyAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCisgICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwppbmRleCBlZTE0OWUxLi5kZDQzMTdmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCisrKyBiL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKQEAgLTM4LDYgKzM4LDggQEAKIAogLyogRVZQIGlzIHRoZSBwcmVmZXJyZWQgaW50ZXJmYWNlIHRvIGhhc2hpbmcgaW4gT3BlblNTTCAqLwogI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisvKiBXZSB1c2UgdGhlIG9iamVjdCBpbnRlcmZhY2UgdG8gZGlzY292ZXIgd2hhdCBoYXNoZXMgT3BlblNTTCBzdXBwb3J0cy4gKi8KKyNpbmNsdWRlIDxvcGVuc3NsL29iamVjdHMuaD4KIAogI2RlZmluZSBNVU5DSF9TSVpFIElOVF9NQVgKIApAQCAtNDksNiArNTEsMTAgQEAKICNkZWZpbmUgSEFTSF9PQkpfQ09OU1RSVUNUT1IgMAogI2VuZGlmCiAKKy8qIE1pbmltdW0gT3BlblNTTCB2ZXJzaW9uIG5lZWRlZCB0byBzdXBwb3J0IHNoYTIyNCBhbmQgaGlnaGVyLiAqLworI2lmIGRlZmluZWQoT1BFTlNTTF9WRVJTSU9OX05VTUJFUikgJiYgKE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgwMDkwODAwMCkKKyNkZWZpbmUgX09QRU5TU0xfU1VQUE9SVFNfU0hBMgorI2VuZGlmCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECkBAIC03MCwxMCArNzYsMTIgQEAKIAogREVGSU5FX0NPTlNUU19GT1JfTkVXKG1kNSkKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGExKQorI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGEyMjQpCiBERUZJTkVfQ09OU1RTX0ZPUl9ORVcoc2hhMjU2KQogREVGSU5FX0NPTlNUU19GT1JfTkVXKHNoYTM4NCkKIERFRklORV9DT05TVFNfRk9SX05FVyhzaGE1MTIpCisjZW5kaWYKIAogCiBzdGF0aWMgRVZQb2JqZWN0ICoKQEAgLTQ4Miw2ICs0OTAsNjIgQEAKICAgICByZXR1cm4gcmV0X29iajsKIH0KIAorCisvKiBTdGF0ZSBmb3Igb3VyIGNhbGxiYWNrIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGFjY3VtdWxhdGUgYSByZXN1bHQuICovCit0eXBlZGVmIHN0cnVjdCBfaW50ZXJuYWxfbmFtZV9tYXBwZXJfc3RhdGUgeworICAgIFB5T2JqZWN0ICpzZXQ7CisgICAgaW50IGVycm9yOworfSBfSW50ZXJuYWxOYW1lTWFwcGVyU3RhdGU7CisKKworLyogQSBjYWxsYmFjayBmdW5jdGlvbiB0byBwYXNzIHRvIE9wZW5TU0wncyBPQkpfTkFNRV9kb19hbGwoLi4uKSAqLworc3RhdGljIHZvaWQKK19vcGVuc3NsX2hhc2hfbmFtZV9tYXBwZXIoY29uc3QgT0JKX05BTUUgKm9wZW5zc2xfb2JqX25hbWUsIHZvaWQgKmFyZykKK3sKKyAgICBfSW50ZXJuYWxOYW1lTWFwcGVyU3RhdGUgKnN0YXRlID0gKF9JbnRlcm5hbE5hbWVNYXBwZXJTdGF0ZSAqKWFyZzsKKyAgICBQeU9iamVjdCAqcHlfbmFtZTsKKworICAgIGFzc2VydChzdGF0ZSAhPSBOVUxMKTsKKyAgICBpZiAob3BlbnNzbF9vYmpfbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgLyogSWdub3JlIGFsaWFzZWQgbmFtZXMsIHRoZXkgcG9sbHV0ZSB0aGUgbGlzdCBhbmQgT3BlblNTTCBhcHBlYXJzIHRvCisgICAgICogaGF2ZSBhIGl0cyBvd24gZGVmaW5pdGlvbiBvZiBhbGlhcyBhcyB0aGUgcmVzdWx0aW5nIGxpc3Qgc3RpbGwKKyAgICAgKiBjb250YWlucyBkdXBsaWNhdGUgYW5kIGFsdGVybmF0ZSBuYW1lcyBmb3Igc2V2ZXJhbCBhbGdvcml0aG1zLiAgICAgKi8KKyAgICBpZiAob3BlbnNzbF9vYmpfbmFtZS0+YWxpYXMpCisgICAgICAgIHJldHVybjsKKworICAgIHB5X25hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhvcGVuc3NsX29ial9uYW1lLT5uYW1lKTsKKyAgICBpZiAocHlfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHN0YXRlLT5lcnJvciA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFB5U2V0X0FkZChzdGF0ZS0+c2V0LCBweV9uYW1lKSAhPSAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocHlfbmFtZSk7CisgICAgICAgICAgICBzdGF0ZS0+ZXJyb3IgPSAxOworICAgICAgICB9CisgICAgfQorfQorCisKKy8qIEFzayBPcGVuU1NMIGZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGNpcGhlcnMsIGZpbGxpbmcgaW4gYSBQeXRob24gc2V0LiAqLworc3RhdGljIFB5T2JqZWN0KgorZ2VuZXJhdGVfaGFzaF9uYW1lX2xpc3Qodm9pZCkKK3sKKyAgICBfSW50ZXJuYWxOYW1lTWFwcGVyU3RhdGUgc3RhdGU7CisgICAgc3RhdGUuc2V0ID0gUHlGcm96ZW5TZXRfTmV3KE5VTEwpOworICAgIGlmIChzdGF0ZS5zZXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUuZXJyb3IgPSAwOworCisgICAgT0JKX05BTUVfZG9fYWxsKE9CSl9OQU1FX1RZUEVfTURfTUVUSCwgJl9vcGVuc3NsX2hhc2hfbmFtZV9tYXBwZXIsICZzdGF0ZSk7CisKKyAgICBpZiAoc3RhdGUuZXJyb3IpIHsKKyAgICAgICAgUHlfREVDUkVGKHN0YXRlLnNldCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gc3RhdGUuc2V0OworfQorCisKIC8qCiAgKiAgVGhpcyBtYWNybyBnZW5lcmF0ZXMgY29uc3RydWN0b3IgZnVuY3Rpb24gZGVmaW5pdGlvbnMgZm9yIHNwZWNpZmljCiAgKiAgaGFzaCBhbGdvcml0aG1zLiAgVGhlc2UgY29uc3RydWN0b3JzIGFyZSBtdWNoIGZhc3RlciB0aGFuIGNhbGxpbmcKQEAgLTUzNCwxMCArNTk4LDEyIEBACiAKIEdFTl9DT05TVFJVQ1RPUihtZDUpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMSkKKyNpZmRlZiBfT1BFTlNTTF9TVVBQT1JUU19TSEEyCiBHRU5fQ09OU1RSVUNUT1Ioc2hhMjI0KQogR0VOX0NPTlNUUlVDVE9SKHNoYTI1NikKIEdFTl9DT05TVFJVQ1RPUihzaGEzODQpCiBHRU5fQ09OU1RSVUNUT1Ioc2hhNTEyKQorI2VuZGlmCiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGV4cG9ydGVkIGJ5IHRoaXMgbW9kdWxlICovCiAKQEAgLTU0NSwxMSArNjExLDEzIEBACiAgICAgeyJuZXciLCAoUHlDRnVuY3Rpb24pRVZQX25ldywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIEVWUF9uZXdfX2RvY19ffSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihtZDUpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTEpLAorI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGEyMjQpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTI1NiksCiAgICAgQ09OU1RSVUNUT1JfTUVUSF9ERUYoc2hhMzg0KSwKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihzaGE1MTIpLAotICAgIHtOVUxMLCBOVUxMfSAgIC8qIFNlbnRpbmVsICovCisjZW5kaWYKKyAgICB7TlVMTCwgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCiAKQEAgLTU3MSw3ICs2MzksNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9faGFzaGxpYih2b2lkKQogewotICAgIFB5T2JqZWN0ICptOworICAgIFB5T2JqZWN0ICptLCAqb3BlbnNzbF9tZF9tZXRoX25hbWVzOwogCiAgICAgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMoKTsKIApAQCAtNTg4LDYgKzY1NiwxNiBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgb3BlbnNzbF9tZF9tZXRoX25hbWVzID0gZ2VuZXJhdGVfaGFzaF9uYW1lX2xpc3QoKTsKKyAgICBpZiAob3BlbnNzbF9tZF9tZXRoX25hbWVzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAib3BlbnNzbF9tZF9tZXRoX25hbWVzIiwgb3BlbnNzbF9tZF9tZXRoX25hbWVzKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogI2lmIEhBU0hfT0JKX0NPTlNUUlVDVE9SCiAgICAgUHlfSU5DUkVGKCZFVlB0eXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkhBU0giLCAoUHlPYmplY3QgKikmRVZQdHlwZSk7CkBAIC01OTYsOSArNjc0LDExIEBACiAgICAgLyogdGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGJ5IHRoZSBjb252ZW5pZW5jZSBjb25zdHJ1Y3RvcnMgKi8KICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhtZDUpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTEpOworI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGEyMjQpOwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKHNoYTI1Nik7CiAgICAgSU5JVF9DT05TVFJVQ1RPUl9DT05TVEFOVFMoc2hhMzg0KTsKICAgICBJTklUX0NPTlNUUlVDVE9SX0NPTlNUQU5UUyhzaGE1MTIpOworI2VuZGlmCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwppbmRleCBmZDBlY2FjLi4xMDY2Zjk0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKQEAgLTksMTIgKzksNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCiBzdGF0aWMgaW50Ci1jbXBfbHQoUHlPYmplY3QgKngsIFB5T2JqZWN0ICp5KQotewotICAgIHJldHVybiBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woeCwgeSwgUHlfTFQpOwotfQotCi1zdGF0aWMgaW50CiBfc2lmdGRvd24oUHlMaXN0T2JqZWN0ICpoZWFwLCBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBQeV9zc2l6ZV90IHBvcykKIHsKICAgICBQeU9iamVjdCAqbmV3aXRlbSwgKnBhcmVudDsKQEAgLTM0LDcgKzI4LDcgQEAKICAgICB3aGlsZSAocG9zID4gc3RhcnRwb3MpewogICAgICAgICBwYXJlbnRwb3MgPSAocG9zIC0gMSkgPj4gMTsKICAgICAgICAgcGFyZW50ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBhcmVudHBvcyk7Ci0gICAgICAgIGNtcCA9IGNtcF9sdChuZXdpdGVtLCBwYXJlbnQpOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wobmV3aXRlbSwgcGFyZW50LCBQeV9MVCk7CiAgICAgICAgIGlmIChjbXAgPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTc0LDkgKzY4LDEwIEBACiAgICAgICAgIC8qIFNldCBjaGlsZHBvcyB0byBpbmRleCBvZiBzbWFsbGVyIGNoaWxkLiAgICovCiAgICAgICAgIHJpZ2h0cG9zID0gY2hpbGRwb3MgKyAxOwogICAgICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MpIHsKLSAgICAgICAgICAgIGNtcCA9IGNtcF9sdCgKKyAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgKICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX0lURU0oaGVhcCwgY2hpbGRwb3MpLAotICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCByaWdodHBvcykpOworICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCByaWdodHBvcyksCisgICAgICAgICAgICAgICAgUHlfTFQpOwogICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0yMTksNyArMjE0LDcgQEAKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfQogCi0gICAgY21wID0gY21wX2x0KFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKSwgaXRlbSk7CisgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKFB5TGlzdF9HRVRfSVRFTShoZWFwLCAwKSwgaXRlbSwgUHlfTFQpOwogICAgIGlmIChjbXAgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChjbXAgPT0gMCkgewpAQCAtMzE4LDcgKzMxMyw3IEBACiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZ290byBzb3J0aXQ7CiAgICAgICAgIH0KLSAgICAgICAgY21wID0gY21wX2x0KHNvbCwgZWxlbSk7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzb2wsIGVsZW0sIFB5X0xUKTsKICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKGVsZW0pOwogICAgICAgICAgICAgZ290byBmYWlsOwpAQCAtMzczLDcgKzM2OCw3IEBACiAgICAgd2hpbGUgKHBvcyA+IHN0YXJ0cG9zKXsKICAgICAgICAgcGFyZW50cG9zID0gKHBvcyAtIDEpID4+IDE7CiAgICAgICAgIHBhcmVudCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwYXJlbnRwb3MpOwotICAgICAgICBjbXAgPSBjbXBfbHQocGFyZW50LCBuZXdpdGVtKTsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHBhcmVudCwgbmV3aXRlbSwgUHlfTFQpOwogICAgICAgICBpZiAoY21wID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmV3aXRlbSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC00MTMsOSArNDA4LDEwIEBACiAgICAgICAgIC8qIFNldCBjaGlsZHBvcyB0byBpbmRleCBvZiBzbWFsbGVyIGNoaWxkLiAgICovCiAgICAgICAgIHJpZ2h0cG9zID0gY2hpbGRwb3MgKyAxOwogICAgICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MpIHsKLSAgICAgICAgICAgIGNtcCA9IGNtcF9sdCgKKyAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgKICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcmlnaHRwb3MpLAotICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcykpOworICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyksCisgICAgICAgICAgICAgICAgUHlfTFQpOwogICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdpdGVtKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC00ODgsNyArNDg0LDcgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnb3RvIHNvcnRpdDsKICAgICAgICAgfQotICAgICAgICBjbXAgPSBjbXBfbHQoZWxlbSwgbG9zKTsKKyAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGVsZW0sIGxvcywgUHlfTFQpOwogICAgICAgICBpZiAoY21wID09IC0xKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCmluZGV4IGExYzQ1MWUuLjQ0YmRhYzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCkBAIC03MTAsNiArNzEwLDggQEAKICAgICAvKiBCeXRlc0lPICovCiAgICAgUHlCeXRlc0lPX1R5cGUudHBfYmFzZSA9ICZQeUJ1ZmZlcmVkSU9CYXNlX1R5cGU7CiAgICAgQUREX1RZUEUoJlB5Qnl0ZXNJT19UeXBlLCAiQnl0ZXNJTyIpOworICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeUJ5dGVzSU9CdWZmZXJfVHlwZSkgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAvKiBTdHJpbmdJTyAqLwogICAgIFB5U3RyaW5nSU9fVHlwZS50cF9iYXNlID0gJlB5VGV4dElPQmFzZV9UeXBlOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmggYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAppbmRleCAxNmFiNmMyLi45MjVlNGYyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApAQCAtNzMsNiArNzMsMTQgQEAKICAqIE9mZnNldCB0eXBlIGZvciBwb3NpdGlvbmluZy4KICAqLwogCisvKiBQcmludGluZyBhIHZhcmlhYmxlIG9mIHR5cGUgb2ZmX3QgKHdpdGggZS5nLiwgUHlTdHJpbmdfRnJvbUZvcm1hdCkKKyAgIGNvcnJlY3RseSBhbmQgd2l0aG91dCBwcm9kdWNpbmcgY29tcGlsZXIgd2FybmluZ3MgaXMgc3VycHJpc2luZ2x5IHBhaW5mdWwuCisgICBXZSBpZGVudGlmeSBhbiBpbnRlZ2VyIHR5cGUgd2hvc2Ugc2l6ZSBtYXRjaGVzIG9mZl90IGFuZCB0aGVuOiAoMSkgY2FzdCB0aGUKKyAgIG9mZl90IHRvIHRoYXQgaW50ZWdlciB0eXBlIGFuZCAoMikgdXNlIHRoZSBhcHByb3ByaWF0ZSBjb252ZXJzaW9uCisgICBzcGVjaWZpY2F0aW9uLiAgVGhlIGNhc3QgaXMgbmVjZXNzYXJ5OiBnY2MgY29tcGxhaW5zIGFib3V0IGZvcm1hdHRpbmcgYQorICAgbG9uZyB3aXRoICIlbGxkIiBldmVuIHdoZW4gYm90aCBsb25nIGFuZCBsb25nIGxvbmcgaGF2ZSB0aGUgc2FtZQorICAgcHJlY2lzaW9uLiAqLworCiAjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogCiAvKiBXaW5kb3dzIHVzZXMgbG9uZyBsb25nIGZvciBvZmZzZXRzICovCkBAIC04MSw2ICs4OSw4IEBACiAjIGRlZmluZSBQeUxvbmdfRnJvbU9mZl90ICAgUHlMb25nX0Zyb21Mb25nTG9uZwogIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX0xMT05HX01BWAogIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIFBZX0xMT05HX01JTgorIyBkZWZpbmUgUFlfT0ZGX1RfQ09NUEFUICAgIFBZX0xPTkdfTE9ORyAvKiB0eXBlIGNvbXBhdGlibGUgd2l0aCBvZmZfdCAqLworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsbGQiICAgICAgICAvKiBmb3JtYXQgdG8gdXNlIGZvciB0aGF0IHR5cGUgKi8KIAogI2Vsc2UKIApAQCAtOTEsMTYgKzEwMSwyMiBAQAogIyBkZWZpbmUgUHlMb25nX0Zyb21PZmZfdCAgIFB5TG9uZ19Gcm9tU3NpemVfdAogIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX1NTSVpFX1RfTUFYCiAjIGRlZmluZSBQWV9PRkZfVF9NSU4gICAgICAgUFlfU1NJWkVfVF9NSU4KLSNlbGlmIChTSVpFT0ZfT0ZGX1QgPT0gU0laRU9GX0xPTkdfTE9ORykKKyMgZGVmaW5lIFBZX09GRl9UX0NPTVBBVCAgICBQeV9zc2l6ZV90CisjIGRlZmluZSBQWV9QUklkT0ZGICAgICAgICAgInpkIgorI2VsaWYgKEhBVkVfTE9OR19MT05HICYmIFNJWkVPRl9PRkZfVCA9PSBTSVpFT0ZfTE9OR19MT05HKQogIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc0xvbmdMb25nCiAjIGRlZmluZSBQeUxvbmdfRnJvbU9mZl90ICAgUHlMb25nX0Zyb21Mb25nTG9uZwogIyBkZWZpbmUgUFlfT0ZGX1RfTUFYICAgICAgIFBZX0xMT05HX01BWAogIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIFBZX0xMT05HX01JTgorIyBkZWZpbmUgUFlfT0ZGX1RfQ09NUEFUICAgIFBZX0xPTkdfTE9ORworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsbGQiCiAjZWxpZiAoU0laRU9GX09GRl9UID09IFNJWkVPRl9MT05HKQogIyBkZWZpbmUgUHlMb25nX0FzT2ZmX3QgICAgIFB5TG9uZ19Bc0xvbmcKICMgZGVmaW5lIFB5TG9uZ19Gcm9tT2ZmX3QgICBQeUxvbmdfRnJvbUxvbmcKICMgZGVmaW5lIFBZX09GRl9UX01BWCAgICAgICBMT05HX01BWAogIyBkZWZpbmUgUFlfT0ZGX1RfTUlOICAgICAgIExPTkdfTUlOCisjIGRlZmluZSBQWV9PRkZfVF9DT01QQVQgICAgbG9uZworIyBkZWZpbmUgUFlfUFJJZE9GRiAgICAgICAgICJsZCIKICNlbHNlCiAjIGVycm9yIG9mZl90IGRvZXMgbm90IG1hdGNoIGVpdGhlciBzaXplX3QsIGxvbmcsIG9yIGxvbmcgbG9uZyEKICNlbmRpZgpAQCAtMTUzLDMgKzE2OSw1IEBACiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX2VtcHR5X3N0cjsKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fZW1wdHlfYnl0ZXM7CiBleHRlcm4gUHlPYmplY3QgKl9QeUlPX3plcm87CisKK2V4dGVybiBQeVR5cGVPYmplY3QgX1B5Qnl0ZXNJT0J1ZmZlcl9UeXBlOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCmluZGV4IDcxYzQwNTIuLjM4NmE4ODAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYworKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTE5Nyw2ICsxOTcsNyBAQAogICAgIGludCBkZXRhY2hlZDsKICAgICBpbnQgcmVhZGFibGU7CiAgICAgaW50IHdyaXRhYmxlOworICAgIGludCBkZWFsbG9jYXRpbmc7CiAgICAgCiAgICAgLyogVHJ1ZSBpZiB0aGlzIGlzIGEgdmFuaWxsYSBCdWZmZXJlZCBvYmplY3QgKHJhdGhlciB0aGFuIGEgdXNlciBkZXJpdmVkCiAgICAgICAgY2xhc3MpICphbmQqIHRoZSByYXcgc3RyZWFtIGlzIGEgdmFuaWxsYSBGaWxlSU8gb2JqZWN0LiAqLwpAQCAtMjYwLDYgKzI2MSw3IEBACiAvKiBUaGVzZSBtYWNyb3MgcHJvdGVjdCB0aGUgYnVmZmVyZWQgb2JqZWN0IGFnYWluc3QgY29uY3VycmVudCBvcGVyYXRpb25zLiAqLwogCiAjaWZkZWYgV0lUSF9USFJFQUQKKwogc3RhdGljIGludAogX2VudGVyX2J1ZmZlcmVkX2J1c3koYnVmZmVyZWQgKnNlbGYpCiB7CkBAIC0zNTksNiArMzYxLDcgQEAKIHN0YXRpYyB2b2lkCiBidWZmZXJlZF9kZWFsbG9jKGJ1ZmZlcmVkICpzZWxmKQogeworICAgIHNlbGYtPmRlYWxsb2NhdGluZyA9IDE7CiAgICAgaWYgKHNlbGYtPm9rICYmIF9QeUlPQmFzZV9maW5hbGl6ZSgoUHlPYmplY3QgKikgc2VsZikgPCAwKQogICAgICAgICByZXR1cm47CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CkBAIC0zOTksNiArNDAyLDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qIEJlY2F1c2UgdGhpcyBjYW4gY2FsbCBhcmJpdHJhcnkgY29kZSwgaXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuCisgICB0aGUgcmVmY291bnQgaXMgMCAodGhhdCBpcywgbm90IGRpcmVjdGx5IGZyb20gdHBfZGVhbGxvYyB1bmxlc3MKKyAgIHRoZSByZWZjb3VudCBoYXMgYmVlbiB0ZW1wb3JhcmlseSByZS1pbmNyZW1lbnRlZCkuICovCitzdGF0aWMgUHlPYmplY3QgKgorYnVmZmVyZWRfZGVhbGxvY193YXJuKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqc291cmNlKQoreworICAgIGlmIChzZWxmLT5vayAmJiBzZWxmLT5yYXcpIHsKKyAgICAgICAgUHlPYmplY3QgKnI7CisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPnJhdywgIl9kZWFsbG9jX3dhcm4iLCAiTyIsIHNvdXJjZSk7CisgICAgICAgIGlmIChyKQorICAgICAgICAgICAgUHlfREVDUkVGKHIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwogLyoKICAqIF9CdWZmZXJlZElPTWl4aW4gbWV0aG9kcwogICogVGhpcyBpcyBub3QgYSBjbGFzcywganVzdCBhIGNvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IHdpbGwgYmUgcmV1c2VkCkBAIC00NTMsNiArNDczLDE0IEBACiAgICAgICAgIFB5X0lOQ1JFRihyZXMpOwogICAgICAgICBnb3RvIGVuZDsKICAgICB9CisKKyAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgICAgIFB5T2JqZWN0ICpyID0gYnVmZmVyZWRfZGVhbGxvY193YXJuKHNlbGYsIChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICAgICAgaWYgKHIpCisgICAgICAgICAgICBQeV9ERUNSRUYocik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgfQogICAgIC8qIGZsdXNoKCkgd2lsbCBtb3N0IHByb2JhYmx5IHJlLXRha2UgdGhlIGxvY2ssIHNvIGRyb3AgaXQgZmlyc3QgKi8KICAgICBMRUFWRV9CVUZGRVJFRChzZWxmKQogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKXNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7CkBAIC01NDEsNiArNTY5LDE1IEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2lzYXR0eSwgTlVMTCk7CiB9CiAKKy8qIFNlcmlhbGl6YXRpb24gKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2J1ZmZlcmVkX2dldHN0YXRlKGJ1ZmZlcmVkICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSAnJXMnIG9iamVjdCIsIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgIHJldHVybiBOVUxMOworfQogCiAvKiBGb3J3YXJkIGRlY2xzICovCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTk3LDcgKzYzNCw4IEBACiAgICAgaWYgKG4gPCAwKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JT0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJSYXcgc3RyZWFtIHJldHVybmVkIGludmFsaWQgcG9zaXRpb24gJXpkIiwgbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgIlJhdyBzdHJlYW0gcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiAlIiBQWV9QUklkT0ZGLAorCQkJIChQWV9PRkZfVF9DT01QQVQpbik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgc2VsZi0+YWJzX3BvcyA9IG47CkBAIC02MjksNyArNjY3LDggQEAKICAgICBpZiAobiA8IDApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlJhdyBzdHJlYW0gcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiAlemQiLCBuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmF3IHN0cmVhbSByZXR1cm5lZCBpbnZhbGlkIHBvc2l0aW9uICUiIFBZX1BSSWRPRkYsCisJCQkgKFBZX09GRl9UX0NPTVBBVCluKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBzZWxmLT5hYnNfcG9zID0gbjsKQEAgLTY3NSw2ICs3MTQsMzkgQEAKICAgICByZXR1cm4gMDsKIH0KIAorLyogUmV0dXJuIDEgaWYgYW4gRW52aXJvbm1lbnRFcnJvciB3aXRoIGVycm5vID09IEVJTlRSIGlzIHNldCAoYW5kIHRoZW4KKyAgIGNsZWFycyB0aGUgZXJyb3IgaW5kaWNhdG9yKSwgMCBvdGhlcndpc2UuCisgICBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBQeUVycl9PY2N1cnJlZCgpIGlzIHRydWUuCisqLworc3RhdGljIGludAorX3RyYXBfZWludHIodm9pZCkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVpbnRyX2ludCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnR5cCwgKnZhbCwgKnRiOworICAgIFB5RW52aXJvbm1lbnRFcnJvck9iamVjdCAqZW52X2VycjsKKworICAgIGlmIChlaW50cl9pbnQgPT0gTlVMTCkgeworICAgICAgICBlaW50cl9pbnQgPSBQeUxvbmdfRnJvbUxvbmcoRUlOVFIpOworICAgICAgICBhc3NlcnQoZWludHJfaW50ICE9IE5VTEwpOworICAgIH0KKyAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfRW52aXJvbm1lbnRFcnJvcikpCisgICAgICAgIHJldHVybiAwOworICAgIFB5RXJyX0ZldGNoKCZ0eXAsICZ2YWwsICZ0Yik7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXAsICZ2YWwsICZ0Yik7CisgICAgZW52X2VyciA9IChQeUVudmlyb25tZW50RXJyb3JPYmplY3QgKikgdmFsOworICAgIGFzc2VydChlbnZfZXJyICE9IE5VTEwpOworICAgIGlmIChlbnZfZXJyLT5teWVycm5vICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGVudl9lcnItPm15ZXJybm8sIGVpbnRyX2ludCwgUHlfRVEpID4gMCkgeworICAgICAgICBQeV9ERUNSRUYodHlwKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIFB5X1hERUNSRUYodGIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgLyogVGhpcyBzaWxlbmNlcyBhbnkgZXJyb3Igc2V0IGJ5IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgpICovCisgICAgUHlFcnJfUmVzdG9yZSh0eXAsIHZhbCwgdGIpOworICAgIHJldHVybiAwOworfQorCiAvKgogICogU2hhcmVkIG1ldGhvZHMgYW5kIHdyYXBwZXJzCiAgKi8KQEAgLTEyMzAsNyArMTMwMiwxNCBAQAogICAgIG1lbW9iaiA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZidWYpOwogICAgIGlmIChtZW1vYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3JlYWRpbnRvLCBtZW1vYmosIE5VTEwpOworICAgIC8qIE5PVEU6IFB5RXJyX1NldEZyb21FcnJubygpIGNhbGxzIFB5RXJyX0NoZWNrU2lnbmFscygpIHdoZW4gRUlOVFIKKyAgICAgICBvY2N1cnMgc28gd2UgbmVlZG4ndCBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgV2UgdGhlbiByZXRyeSByZWFkaW5nLCBpZ25vcmluZyB0aGUgc2lnbmFsIGlmIG5vIGhhbmRsZXIgaGFzCisgICAgICAgcmFpc2VkIChzZWUgaXNzdWUgIzEwOTU2KS4KKyAgICAqLworICAgIGRvIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfcmVhZGludG8sIG1lbW9iaiwgTlVMTCk7CisgICAgfSB3aGlsZSAocmVzID09IE5VTEwgJiYgX3RyYXBfZWludHIoKSk7CiAgICAgUHlfREVDUkVGKG1lbW9iaik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xNDg4LDYgKzE1NjcsOCBAQAogICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKICAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9maWxlbm8sIE1FVEhfTk9BUkdTfSwKICAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9pc2F0dHksIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9kZWFsbG9jX3dhcm4iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGVhbGxvY193YXJuLCBNRVRIX099LAorICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAKICAgICB7InJlYWQiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcmVhZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InBlZWsiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfcGVlaywgTUVUSF9WQVJBUkdTfSwKQEAgLTE2MzcsNyArMTcxOCwxNCBAQAogICAgIG1lbW9iaiA9IFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZidWYpOwogICAgIGlmIChtZW1vYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX3dyaXRlLCBtZW1vYmosIE5VTEwpOworICAgIC8qIE5PVEU6IFB5RXJyX1NldEZyb21FcnJubygpIGNhbGxzIFB5RXJyX0NoZWNrU2lnbmFscygpIHdoZW4gRUlOVFIKKyAgICAgICBvY2N1cnMgc28gd2UgbmVlZG4ndCBkbyBpdCBvdXJzZWx2ZXMuCisgICAgICAgV2UgdGhlbiByZXRyeSB3cml0aW5nLCBpZ25vcmluZyB0aGUgc2lnbmFsIGlmIG5vIGhhbmRsZXIgaGFzCisgICAgICAgcmFpc2VkIChzZWUgaXNzdWUgIzEwOTU2KS4KKyAgICAqLworICAgIGRvIHsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3Moc2VsZi0+cmF3LCBfUHlJT19zdHJfd3JpdGUsIG1lbW9iaiwgTlVMTCk7CisgICAgfSB3aGlsZSAocmVzID09IE5VTEwgJiYgX3RyYXBfZWludHIoKSk7CiAgICAgUHlfREVDUkVGKG1lbW9iaik7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xNzIzLDcgKzE4MTEsOCBAQAogewogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBidWY7Ci0gICAgUHlfc3NpemVfdCB3cml0dGVuLCBhdmFpbCwgcmVtYWluaW5nLCBuOworICAgIFB5X3NzaXplX3Qgd3JpdHRlbiwgYXZhaWwsIHJlbWFpbmluZzsKKyAgICBQeV9vZmZfdCBvZmZzZXQ7CiAKICAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKQogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6d3JpdGUiLCAmYnVmKSkgewpAQCAtMTgwMSwxOCArMTg5MCwxOCBAQAogICAgICAgIHRoZSByYXcgc3RyZWFtIGJ5IGl0c2VsZikuCiAgICAgICAgRml4ZXMgaXNzdWUgIzY2MjkuCiAgICAgKi8KLSAgICBuID0gUkFXX09GRlNFVChzZWxmKTsKLSAgICBpZiAobiAhPSAwKSB7Ci0gICAgICAgIGlmIChfYnVmZmVyZWRfcmF3X3NlZWsoc2VsZiwgLW4sIDEpIDwgMCkKKyAgICBvZmZzZXQgPSBSQVdfT0ZGU0VUKHNlbGYpOworICAgIGlmIChvZmZzZXQgIT0gMCkgeworICAgICAgICBpZiAoX2J1ZmZlcmVkX3Jhd19zZWVrKHNlbGYsIC1vZmZzZXQsIDEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHNlbGYtPnJhd19wb3MgLT0gbjsKKyAgICAgICAgc2VsZi0+cmF3X3BvcyAtPSBvZmZzZXQ7CiAgICAgfQogCiAgICAgLyogVGhlbiB3cml0ZSBidWYgaXRzZWxmLiBBdCB0aGlzIHBvaW50IHRoZSBidWZmZXIgaGFzIGJlZW4gZW1wdGllZC4gKi8KICAgICByZW1haW5pbmcgPSBidWYubGVuOwogICAgIHdyaXR0ZW4gPSAwOwogICAgIHdoaWxlIChyZW1haW5pbmcgPiBzZWxmLT5idWZmZXJfc2l6ZSkgewotICAgICAgICBuID0gX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZSgKKyAgICAgICAgUHlfc3NpemVfdCBuID0gX2J1ZmZlcmVkd3JpdGVyX3Jhd193cml0ZSgKICAgICAgICAgICAgIHNlbGYsIChjaGFyICopIGJ1Zi5idWYgKyB3cml0dGVuLCBidWYubGVuIC0gd3JpdHRlbik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBQeV9zc2l6ZV90ICp3ID0gX2J1ZmZlcmVkX2NoZWNrX2Jsb2NraW5nX2Vycm9yKCk7CkBAIC0xODcyLDYgKzE5NjEsOCBAQAogICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfd3JpdGFibGUsIE1FVEhfTk9BUkdTfSwKICAgICB7ImZpbGVubyIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9maWxlbm8sIE1FVEhfTk9BUkdTfSwKICAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9pc2F0dHksIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9kZWFsbG9jX3dhcm4iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZGVhbGxvY193YXJuLCBNRVRIX099LAorICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAKICAgICB7IndyaXRlIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkd3JpdGVyX3dyaXRlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsidHJ1bmNhdGUiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfdHJ1bmNhdGUsIE1FVEhfVkFSQVJHU30sCkBAIC0yMTM3LDYgKzIyMjgsOCBAQAogICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRyd3BhaXJfY2xvc2UsIE1FVEhfTk9BUkdTfSwKICAgICB7ImlzYXR0eSIsIChQeUNGdW5jdGlvbilidWZmZXJlZHJ3cGFpcl9pc2F0dHksIE1FVEhfTk9BUkdTfSwKIAorICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCisKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKQEAgLTIyNTYsNiArMjM0OSw4IEBACiAgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilidWZmZXJlZF93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAogICAgIHsiZmlsZW5vIiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2ZpbGVubywgTUVUSF9OT0FSR1N9LAogICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKWJ1ZmZlcmVkX2lzYXR0eSwgTUVUSF9OT0FSR1N9LAorICAgIHsiX2RlYWxsb2Nfd2FybiIsIChQeUNGdW5jdGlvbilidWZmZXJlZF9kZWFsbG9jX3dhcm4sIE1FVEhfT30sCisgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKIAogICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pYnVmZmVyZWRfZmx1c2gsIE1FVEhfTk9BUkdTfSwKIApAQCAtMjMyNSw0ICsyNDIwLDMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwotCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9ieXRlc2lvLmMgYi9Nb2R1bGVzL19pby9ieXRlc2lvLmMKaW5kZXggYzhmYjNlYi4uYjQwNTEzZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vYnl0ZXNpby5jCisrKyBiL01vZHVsZXMvX2lvL2J5dGVzaW8uYwpAQCAtMTAsOCArMTAsMTUgQEAKICAgICBzaXplX3QgYnVmX3NpemU7CiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OworICAgIFB5X3NzaXplX3QgZXhwb3J0czsKIH0gYnl0ZXNpbzsKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBieXRlc2lvICpzb3VyY2U7Cit9IGJ5dGVzaW9idWY7CisKKwogI2RlZmluZSBDSEVDS19DTE9TRUQoc2VsZikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICgoc2VsZiktPmJ1ZiA9PSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgICAgICAgICAgICAgICAgICAgXApAQCAtMTksNiArMjYsMTQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKKyNkZWZpbmUgQ0hFQ0tfRVhQT1JUUyhzZWxmKSBcCisgICAgaWYgKChzZWxmKS0+ZXhwb3J0cyA+IDApIHsgXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQnVmZmVyRXJyb3IsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFeGlzdGluZyBleHBvcnRzIG9mIGRhdGE6IG9iamVjdCBjYW5ub3QgYmUgcmUtc2l6ZWQiKTsgXAorICAgICAgICByZXR1cm4gTlVMTDsgXAorICAgIH0KKworCiAvKiBJbnRlcm5hbCByb3V0aW5lIHRvIGdldCBhIGxpbmUgZnJvbSB0aGUgYnVmZmVyIG9mIGEgQnl0ZXNJTwogICAgb2JqZWN0LiBSZXR1cm5zIHRoZSBsZW5ndGggYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiB0byB0aGUKICAgIG5leHQgbmV3bGluZSBjaGFyYWN0ZXIuICovCkBAIC0xNzMsNiArMTg4LDMwIEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKK1B5RG9jX1NUUlZBUihnZXRidWZmZXJfZG9jLAorImdldGJ1ZmZlcigpIC0+IGJ5dGVzLlxuIgorIlxuIgorIkdldCBhIHJlYWQtd3JpdGUgdmlldyBvdmVyIHRoZSBjb250ZW50cyBvZiB0aGUgQnl0ZXNJTyBvYmplY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitieXRlc2lvX2dldGJ1ZmZlcihieXRlc2lvICpzZWxmKQoreworICAgIFB5VHlwZU9iamVjdCAqdHlwZSA9ICZfUHlCeXRlc0lPQnVmZmVyX1R5cGU7CisgICAgYnl0ZXNpb2J1ZiAqYnVmOworICAgIFB5T2JqZWN0ICp2aWV3OworCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworCisgICAgYnVmID0gKGJ5dGVzaW9idWYgKikgdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoc2VsZik7CisgICAgYnVmLT5zb3VyY2UgPSBzZWxmOworICAgIHZpZXcgPSBQeU1lbW9yeVZpZXdfRnJvbU9iamVjdCgoUHlPYmplY3QgKikgYnVmKTsKKyAgICBQeV9ERUNSRUYoYnVmKTsKKyAgICByZXR1cm4gdmlldzsKK30KKwogUHlEb2NfU1RSVkFSKGdldHZhbF9kb2MsCiAiZ2V0dmFsdWUoKSAtPiBieXRlcy5cbiIKICJcbiIKQEAgLTQyNyw2ICs0NjYsNyBAQAogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOworICAgIENIRUNLX0VYUE9SVFMoc2VsZik7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNTQ4LDYgKzU4OCw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CisgICAgQ0hFQ0tfRVhQT1JUUyhzZWxmKTsKIAogICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmYnVmLCBQeUJVRl9DT05USUdfUk8pIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02MTEsMTAgKzY1MiwxMzAgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLyogUGlja2xpbmcgc3VwcG9ydC4KKworICAgTm90ZSB0aGF0IG9ubHkgcGlja2xlIHByb3RvY29sIDIgYW5kIG9ud2FyZCBhcmUgc3VwcG9ydGVkIHNpbmNlIHdlIHVzZQorICAgZXh0ZW5kZWQgX19yZWR1Y2VfXyBBUEkgb2YgUEVQIDMwNyB0byBtYWtlIEJ5dGVzSU8gaW5zdGFuY2VzIHBpY2tsYWJsZS4KKworICAgUHJvdmlkaW5nIHN1cHBvcnQgZm9yIHByb3RvY29sIDwgMiB3b3VsZCByZXF1aXJlIHRoZSBfX3JlZHVjZV9leF9fIG1ldGhvZAorICAgd2hpY2ggaXMgbm90YWJseSBsb25nLXdpbmRlZCB3aGVuIGRlZmluZWQgcHJvcGVybHkuCisKKyAgIEZvciBCeXRlc0lPLCB0aGUgaW1wbGVtZW50YXRpb24gd291bGQgc2ltaWxhciB0byBvbmUgY29kZWQgZm9yCisgICBvYmplY3QuX19yZWR1Y2VfZXhfXywgYnV0IHNsaWdodGx5IGxlc3MgZ2VuZXJhbC4gVG8gYmUgbW9yZSBzcGVjaWZpYywgd2UKKyAgIGNvdWxkIGNhbGwgYnl0ZXNpb19nZXRzdGF0ZSBkaXJlY3RseSBhbmQgYXZvaWQgY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZgorICAgYSBmYWxsYmFjayBfX3JlZHVjZV9fIG1ldGhvZC4gSG93ZXZlciwgd2Ugd291bGQgc3RpbGwgbmVlZCBhIF9fbmV3b2JqX18KKyAgIGZ1bmN0aW9uIHRvIHVzZSB0aGUgZWZmaWNpZW50IGluc3RhbmNlIHJlcHJlc2VudGF0aW9uIG9mIFBFUCAzMDcuCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2J5dGVzaW9fZ2V0c3RhdGUoYnl0ZXNpbyAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqaW5pdHZhbHVlID0gYnl0ZXNpb19nZXR2YWx1ZShzZWxmKTsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisKKyAgICBpZiAoaW5pdHZhbHVlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZWxmLT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICBkaWN0ID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRpY3QgPSBQeURpY3RfQ29weShzZWxmLT5kaWN0KTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXRlID0gUHlfQnVpbGRWYWx1ZSgiKE9uTikiLCBpbml0dmFsdWUsIHNlbGYtPnBvcywgZGljdCk7CisgICAgUHlfREVDUkVGKGluaXR2YWx1ZSk7CisgICAgcmV0dXJuIHN0YXRlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorYnl0ZXNpb19zZXRzdGF0ZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqcG9zaXRpb25fb2JqOworICAgIFB5T2JqZWN0ICpkaWN0OworICAgIFB5X3NzaXplX3QgcG9zOworCisgICAgYXNzZXJ0KHN0YXRlICE9IE5VTEwpOworCisgICAgLyogV2UgYWxsb3cgdGhlIHN0YXRlIHR1cGxlIHRvIGJlIGxvbmdlciB0aGFuIDMsIGJlY2F1c2Ugd2UgbWF5IG5lZWQKKyAgICAgICBzb21lZGF5IHRvIGV4dGVuZCB0aGUgb2JqZWN0J3Mgc3RhdGUgd2l0aG91dCBicmVha2luZworICAgICAgIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuICovCisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHN0YXRlKSB8fCBQeV9TSVpFKHN0YXRlKSA8IDMpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMuX19zZXRzdGF0ZV9fIGFyZ3VtZW50IHNob3VsZCBiZSAzLXR1cGxlLCBnb3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsIFB5X1RZUEUoc3RhdGUpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIENIRUNLX0VYUE9SVFMoc2VsZik7CisgICAgLyogUmVzZXQgdGhlIG9iamVjdCB0byBpdHMgZGVmYXVsdCBzdGF0ZS4gVGhpcyBpcyBvbmx5IG5lZWRlZCB0byBoYW5kbGUKKyAgICAgICB0aGUgY2FzZSBvZiByZXBlYXRlZCBjYWxscyB0byBfX3NldHN0YXRlX18uICovCisgICAgc2VsZi0+c3RyaW5nX3NpemUgPSAwOworICAgIHNlbGYtPnBvcyA9IDA7CisKKyAgICAvKiBTZXQgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIuIElmIHN0YXRlWzBdIGRvZXMgbm90IHN1cHBvcnQgdGhlCisgICAgICAgYnVmZmVyIHByb3RvY29sLCBieXRlc2lvX3dyaXRlIHdpbGwgcmFpc2UgdGhlIGFwcHJvcHJpYXRlIFR5cGVFcnJvci4gKi8KKyAgICByZXN1bHQgPSBieXRlc2lvX3dyaXRlKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDApKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworCisgICAgLyogU2V0IGNhcmVmdWxseSB0aGUgcG9zaXRpb24gdmFsdWUuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHVzZSB0aGUgc2VlaworICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBzZWxmLT5wb3MgZGlyZWN0bHkgdG8gYmV0dGVyIHByb3RlY3QgdGhlCisgICAgICAgb2JqZWN0IGludGVybmFsIHN0YXRlIGFnYWluc3QgZXJybmVvdXMgKG9yIG1hbGljaW91cykgaW5wdXRzLiAqLworICAgIHBvc2l0aW9uX29iaiA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDEpOworICAgIGlmICghUHlMb25nX0NoZWNrKHBvc2l0aW9uX29iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgaXRlbSBvZiBzdGF0ZSBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwb3NpdGlvbl9vYmopLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBvcyA9IFB5TG9uZ19Bc1NzaXplX3QocG9zaXRpb25fb2JqKTsKKyAgICBpZiAocG9zID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChwb3MgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uIHZhbHVlIGNhbm5vdCBiZSBuZWdhdGl2ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2VsZi0+cG9zID0gcG9zOworCisgICAgLyogU2V0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMuICovCisgICAgZGljdCA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDIpOworICAgIGlmIChkaWN0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soZGljdCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXJkIGl0ZW0gb2Ygc3RhdGUgc2hvdWxkIGJlIGEgZGljdCwgZ290IGEgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3QpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChzZWxmLT5kaWN0KSB7CisgICAgICAgICAgICAvKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCByZXBsYWNlIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICBjb21wbGV0ZWx5LiBIb3dldmVyLCBpdCBzZWVtcyBtb3JlIHByYWN0aWNhbCB0byBqdXN0IHVwZGF0ZSBpdC4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKHNlbGYtPmRpY3QsIGRpY3QpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHNlbGYtPmRpY3QgPSBkaWN0OworICAgICAgICB9CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKIHN0YXRpYyB2b2lkCiBieXRlc2lvX2RlYWxsb2MoYnl0ZXNpbyAqc2VsZikKIHsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKKyAgICBpZiAoc2VsZi0+ZXhwb3J0cyA+IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImRlYWxsb2NhdGVkIEJ5dGVzSU8gb2JqZWN0IGhhcyBleHBvcnRlZCBidWZmZXJzIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CisgICAgfQogICAgIGlmIChzZWxmLT5idWYgIT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1Zik7CiAgICAgICAgIHNlbGYtPmJ1ZiA9IE5VTEw7CkBAIC02MzUsOSArNzk2LDkgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0cmluZ19zaXplID0gMDsKLSAgICBzZWxmLT5wb3MgPSAwOwotICAgIHNlbGYtPmJ1Zl9zaXplID0gMDsKKyAgICAvKiB0cF9hbGxvYyBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB0byB6ZXJvLiBTbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAgaW5pdGlhbGl6ZSB0aGVtIGhlcmUuICovCisKICAgICBzZWxmLT5idWYgPSAoY2hhciAqKVB5TWVtX01hbGxvYygwKTsKICAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwpAQCAtNzA5LDkgKzg3MCwxMiBAQAogICAgIHsicmVhZGxpbmUiLCAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWRsaW5lLCAgIE1FVEhfVkFSQVJHUywgcmVhZGxpbmVfZG9jfSwKICAgICB7InJlYWRsaW5lcyIsICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19yZWFkbGluZXMsICBNRVRIX1ZBUkFSR1MsIHJlYWRsaW5lc19kb2N9LAogICAgIHsicmVhZCIsICAgICAgIChQeUNGdW5jdGlvbilieXRlc2lvX3JlYWQsICAgICAgIE1FVEhfVkFSQVJHUywgcmVhZF9kb2N9LAorICAgIHsiZ2V0YnVmZmVyIiwgIChQeUNGdW5jdGlvbilieXRlc2lvX2dldGJ1ZmZlciwgIE1FVEhfTk9BUkdTLCAgZ2V0YnVmZmVyX2RvY30sCiAgICAgeyJnZXR2YWx1ZSIsICAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0dmFsdWUsICAgTUVUSF9OT0FSR1MsICBnZXR2YWxfZG9jfSwKICAgICB7InNlZWsiLCAgICAgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb19zZWVrLCAgICAgICBNRVRIX1ZBUkFSR1MsIHNlZWtfZG9jfSwKICAgICB7InRydW5jYXRlIiwgICAoUHlDRnVuY3Rpb24pYnl0ZXNpb190cnVuY2F0ZSwgICBNRVRIX1ZBUkFSR1MsIHRydW5jYXRlX2RvY30sCisgICAgeyJfX2dldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fZ2V0c3RhdGUsICBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX3NldHN0YXRlX18iLCAgKFB5Q0Z1bmN0aW9uKWJ5dGVzaW9fc2V0c3RhdGUsICBNRVRIX08sIE5VTEx9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTc2MiwzICs5MjYsOTYgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCiAgICAgYnl0ZXNpb19uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KIH07CisKKworLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzbWFsbCBpbnRlcm1lZGlhdGUgb2JqZWN0IHVzZWQgYnkgZ2V0YnVmZmVyKCkuCisgKiBnZXRidWZmZXIoKSByZXR1cm5zIGEgbWVtb3J5dmlldyBvdmVyIHRoaXMgb2JqZWN0LCB3aGljaCBzaG91bGQgbWFrZSBpdAorICogaW52aXNpYmxlIGZyb20gUHl0aG9uIGNvZGUuCisgKi8KKworc3RhdGljIGludAorYnl0ZXNpb2J1Zl9nZXRidWZmZXIoYnl0ZXNpb2J1ZiAqb2JqLCBQeV9idWZmZXIgKnZpZXcsIGludCBmbGFncykKK3sKKyAgICBpbnQgcmV0OworICAgIHZvaWQgKnB0cjsKKyAgICBieXRlc2lvICpiID0gKGJ5dGVzaW8gKikgb2JqLT5zb3VyY2U7CisgICAgaWYgKHZpZXcgPT0gTlVMTCkgeworICAgICAgICBiLT5leHBvcnRzKys7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwdHIgPSAodm9pZCAqKSBvYmo7CisgICAgcmV0ID0gUHlCdWZmZXJfRmlsbEluZm8odmlldywgKFB5T2JqZWN0KilvYmosIGItPmJ1ZiwgYi0+c3RyaW5nX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZmxhZ3MpOworICAgIGlmIChyZXQgPj0gMCkgeworICAgICAgICBiLT5leHBvcnRzKys7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitieXRlc2lvYnVmX3JlbGVhc2VidWZmZXIoYnl0ZXNpb2J1ZiAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCit7CisgICAgYnl0ZXNpbyAqYiA9IChieXRlc2lvICopIG9iai0+c291cmNlOworICAgIGItPmV4cG9ydHMtLTsKK30KKworc3RhdGljIGludAorYnl0ZXNpb2J1Zl90cmF2ZXJzZShieXRlc2lvYnVmICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5zb3VyY2UpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorYnl0ZXNpb2J1Zl9kZWFsbG9jKGJ5dGVzaW9idWYgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+c291cmNlKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOworfQorCitzdGF0aWMgUHlCdWZmZXJQcm9jcyBieXRlc2lvYnVmX2FzX2J1ZmZlciA9IHsKKyAgICAoZ2V0YnVmZmVycHJvYykgYnl0ZXNpb2J1Zl9nZXRidWZmZXIsCisgICAgKHJlbGVhc2VidWZmZXJwcm9jKSBieXRlc2lvYnVmX3JlbGVhc2VidWZmZXIsCit9OworCitQeVR5cGVPYmplY3QgX1B5Qnl0ZXNJT0J1ZmZlcl9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfaW8uX0J5dGVzSU9CdWZmZXIiLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihieXRlc2lvYnVmKSwgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWJ5dGVzaW9idWZfZGVhbGxvYywgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgICZieXRlc2lvYnVmX2FzX2J1ZmZlciwgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgKHRyYXZlcnNlcHJvYylieXRlc2lvYnVmX3RyYXZlcnNlLCAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KK307CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9maWxlaW8uYyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCmluZGV4IDQ3MzkxOWIuLjFhYTVlZTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2ZpbGVpby5jCisrKyBiL01vZHVsZXMvX2lvL2ZpbGVpby5jCkBAIC0yLDkgKzIsMTYgQEAKIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRkNOVExfSAogI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKICNpbmNsdWRlIDxzdGRkZWYuaD4gLyogRm9yIG9mZnNldG9mICovCiAjaW5jbHVkZSAiX2lvbW9kdWxlLmgiCiAKQEAgLTQ5LDYgKzU2LDcgQEAKICAgICB1bnNpZ25lZCBpbnQgd3JpdGFibGUgOiAxOwogICAgIHNpZ25lZCBpbnQgc2Vla2FibGUgOiAyOyAvKiAtMSBtZWFucyB1bmtub3duICovCiAgICAgdW5zaWduZWQgaW50IGNsb3NlZmQgOiAxOworICAgIHVuc2lnbmVkIGludCBkZWFsbG9jYXRpbmc6IDE7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5T2JqZWN0ICpkaWN0OwogfSBmaWxlaW87CkBAIC02Myw2ICs3MSwyNiBAQAogICAgIHJldHVybiAoKGZpbGVpbyAqKXNlbGYpLT5mZCA8IDA7CiB9CiAKKy8qIEJlY2F1c2UgdGhpcyBjYW4gY2FsbCBhcmJpdHJhcnkgY29kZSwgaXQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuCisgICB0aGUgcmVmY291bnQgaXMgMCAodGhhdCBpcywgbm90IGRpcmVjdGx5IGZyb20gdHBfZGVhbGxvYyB1bmxlc3MKKyAgIHRoZSByZWZjb3VudCBoYXMgYmVlbiB0ZW1wb3JhcmlseSByZS1pbmNyZW1lbnRlZCkuICovCitzdGF0aWMgUHlPYmplY3QgKgorZmlsZWlvX2RlYWxsb2Nfd2FybihmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICpzb3VyY2UpCit7CisgICAgaWYgKHNlbGYtPmZkID49IDAgJiYgc2VsZi0+Y2xvc2VmZCkgeworICAgICAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisgICAgICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY2xvc2VkIGZpbGUgJVIiLCBzb3VyY2UpKSB7CisgICAgICAgICAgICAvKiBTcHVyaW91cyBlcnJvcnMgY2FuIGFwcGVhciBhdCBzaHV0ZG93biAqLworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfV2FybmluZykpCisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKChQeU9iamVjdCAqKSBzZWxmKTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogcG9ydGFibGVfbHNlZWsoaW50IGZkLCBQeU9iamVjdCAqcG9zb2JqLCBpbnQgd2hlbmNlKTsKIApAQCAtMTA0LDYgKzEzMiwxMyBAQAogICAgICAgICBzZWxmLT5mZCA9IC0xOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CisgICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgICAgICBQeU9iamVjdCAqciA9IGZpbGVpb19kZWFsbG9jX3dhcm4oc2VsZiwgKFB5T2JqZWN0ICopIHNlbGYpOworICAgICAgICBpZiAocikKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CiAgICAgZXJybm8gPSBpbnRlcm5hbF9jbG9zZShzZWxmKTsKICAgICBpZiAoZXJybm8gPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyNCwxMSArMjU5LDggQEAKICAgICB9CiAKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKEdldFZlcnNpb24oKSA8IDB4ODAwMDAwMDApIHsKLSAgICAgICAgLyogT24gTlQsIHNvIHdpZGUgQVBJIGF2YWlsYWJsZSAqLwotICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQotICAgICAgICAgICAgd2lkZW5hbWUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShuYW1lb2JqKTsKLSAgICB9CisgICAgaWYgKFB5VW5pY29kZV9DaGVjayhuYW1lb2JqKSkKKyAgICAgICAgd2lkZW5hbWUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShuYW1lb2JqKTsKICAgICBpZiAod2lkZW5hbWUgPT0gTlVMTCkKICNlbmRpZgogICAgIGlmIChmZCA8IDApCkBAIC0yNDQsOCArMjc2LDcgQEAKICAgICAgICAgICAgIGlmICh1ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgICAgICBzdHJpbmdvYmogPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKAotICAgICAgICAgICAgICAgIHUsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICAgICAgICAgIHN0cmluZ29iaiA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQodSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nb2JqID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzUzLDEwICszODQsMTUgQEAKICAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgbmFtZSk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIGlmKGRpcmNoZWNrKHNlbGYsIG5hbWUpIDwgMCkKKyAgICAgICAgaWYgKGRpcmNoZWNrKHNlbGYsIG5hbWUpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCisgICAgLyogZG9uJ3QgdHJhbnNsYXRlIG5ld2xpbmVzIChcclxuIDw9PiBcbikgKi8KKyAgICBfc2V0bW9kZShzZWxmLT5mZCwgT19CSU5BUlkpOworI2VuZGlmCisKICAgICBpZiAoUHlPYmplY3RfU2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAibmFtZSIsIG5hbWVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIApAQCAtMzc5LDYgKzQxNSw4IEBACiAKICBlcnJvcjoKICAgICByZXQgPSAtMTsKKyAgICBpZiAoc2VsZi0+ZmQgPj0gMCkKKyAgICAgICAgaW50ZXJuYWxfY2xvc2Uoc2VsZik7CiAKICBkb25lOgogICAgIFB5X0NMRUFSKHN0cmluZ29iaik7CkBAIC00MDIsNiArNDQwLDcgQEAKIHN0YXRpYyB2b2lkCiBmaWxlaW9fZGVhbGxvYyhmaWxlaW8gKnNlbGYpCiB7CisgICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKICAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKQEAgLTQyMSw3ICs0NjAsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGVycl9tb2RlKGNoYXIgKmFjdGlvbikKIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKKyAgICBQeUVycl9Gb3JtYXQoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDcxLDcgKzUxMSw3IEBACiBmaWxlaW9fcmVhZGludG8oZmlsZWlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKLSAgICBQeV9zc2l6ZV90IG47CisgICAgUHlfc3NpemVfdCBuLCBsZW47CiAKICAgICBpZiAoc2VsZi0+ZmQgPCAwKQogICAgICAgICByZXR1cm4gZXJyX2Nsb3NlZCgpOwpAQCAtNDgyLDkgKzUyMiwxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CisgICAgICAgIGxlbiA9IHBidWYubGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHBidWYuYnVmLCBwYnVmLmxlbik7CisjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgKGludClsZW4pOworI2Vsc2UKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIHBidWYuYnVmLCBsZW4pOworI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlCiAgICAgICAgIG4gPSAtMTsKQEAgLTY1MCw3ICs2OTcsNyBAQAogZmlsZWlvX3dyaXRlKGZpbGVpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfYnVmZmVyIHBidWY7Ci0gICAgUHlfc3NpemVfdCBuOworICAgIFB5X3NzaXplX3QgbiwgbGVuOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKQEAgLTY2Myw3ICs3MTAsMjEgQEAKICAgICBpZiAoX1B5VmVyaWZ5X2ZkKHNlbGYtPmZkKSkgewogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBsZW4gPSBwYnVmLmxlbjsKKyNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIGlmIChsZW4gPiAzMjc2NyAmJiBpc2F0dHkoc2VsZi0+ZmQpKSB7CisgICAgICAgICAgICAvKiBJc3N1ZSAjMTEzOTU6IHRoZSBXaW5kb3dzIGNvbnNvbGUgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdAorICAgICAgICAgICAgICAgZW5vdWdoIHNwYWNlIGVycm9yKSBvbiB3cml0aW5nIGludG8gc3Rkb3V0IGlmIHN0ZG91dCBtb2RlIGlzCisgICAgICAgICAgICAgICBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiBoZWFwIHVzYWdlKS4gKi8KKyAgICAgICAgICAgIGxlbiA9IDMyNzY3OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxlbiA+IElOVF9NQVgpCisgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CisjZWxzZQorICAgICAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHBidWYuYnVmLCBsZW4pOworI2VuZGlmCiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlCiAgICAgICAgIG4gPSAtMTsKQEAgLTkxNyw2ICs5NzgsMTQgQEAKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlcyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitmaWxlaW9fZ2V0c3RhdGUoZmlsZWlvICpzZWxmKQoreworICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplICclcycgb2JqZWN0IiwgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIAogUHlEb2NfU1RSVkFSKGZpbGVpb19kb2MsCiAiZmlsZShuYW1lOiBzdHJbLCBtb2RlOiBzdHJdKSAtPiBmaWxlIElPIG9iamVjdFxuIgpAQCAtMTAxMCw2ICsxMDc5LDggQEAKICAgICB7IndyaXRhYmxlIiwgKFB5Q0Z1bmN0aW9uKWZpbGVpb193cml0YWJsZSwgTUVUSF9OT0FSR1MsICAgICAgd3JpdGFibGVfZG9jfSwKICAgICB7ImZpbGVubyIsICAgKFB5Q0Z1bmN0aW9uKWZpbGVpb19maWxlbm8sICAgTUVUSF9OT0FSR1MsICAgICAgZmlsZW5vX2RvY30sCiAgICAgeyJpc2F0dHkiLCAgIChQeUNGdW5jdGlvbilmaWxlaW9faXNhdHR5LCAgIE1FVEhfTk9BUkdTLCAgICAgIGlzYXR0eV9kb2N9LAorICAgIHsiX2RlYWxsb2Nfd2FybiIsIChQeUNGdW5jdGlvbilmaWxlaW9fZGVhbGxvY193YXJuLCBNRVRIX08sIE5VTEx9LAorICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKWZpbGVpb19nZXRzdGF0ZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAogICAgIHtOVUxMLCAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2lvL2lvYmFzZS5jIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKaW5kZXggODRiNTYwYS4uZWM3YTI0MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vaW9iYXNlLmMKKysrIGIvTW9kdWxlcy9faW8vaW9iYXNlLmMKQEAgLTM1LDcgKzM1LDggQEAKICAgICAiRXZlbiB0aG91Z2ggSU9CYXNlIGRvZXMgbm90IGRlY2xhcmUgcmVhZCwgcmVhZGludG8sIG9yIHdyaXRlIGJlY2F1c2VcbiIKICAgICAidGhlaXIgc2lnbmF0dXJlcyB3aWxsIHZhcnksIGltcGxlbWVudGF0aW9ucyBhbmQgY2xpZW50cyBzaG91bGRcbiIKICAgICAiY29uc2lkZXIgdGhvc2UgbWV0aG9kcyBwYXJ0IG9mIHRoZSBpbnRlcmZhY2UuIEFsc28sIGltcGxlbWVudGF0aW9uc1xuIgotICAgICJtYXkgcmFpc2UgYSBJT0Vycm9yIHdoZW4gb3BlcmF0aW9ucyB0aGV5IGRvIG5vdCBzdXBwb3J0IGFyZSBjYWxsZWQuXG4iCisgICAgIm1heSByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbiB3aGVuIG9wZXJhdGlvbnMgdGhleSBkbyBub3Qgc3VwcG9ydCBhcmVcbiIKKyAgICAiY2FsbGVkLlxuIgogICAgICJcbiIKICAgICAiVGhlIGJhc2ljIHR5cGUgdXNlZCBmb3IgYmluYXJ5IGRhdGEgcmVhZCBmcm9tIG9yIHdyaXR0ZW4gdG8gYSBmaWxlIGlzXG4iCiAgICAgImJ5dGVzLiBieXRlYXJyYXlzIGFyZSBhY2NlcHRlZCB0b28sIGFuZCBpbiBzb21lIGNhc2VzIChzdWNoIGFzXG4iCkBAIC0zMDAsNyArMzAxLDcgQEAKIFB5RG9jX1NUUlZBUihpb2Jhc2Vfc2Vla2FibGVfZG9jLAogICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgc3VwcG9ydHMgcmFuZG9tIGFjY2Vzcy5cbiIKICAgICAiXG4iCi0gICAgIklmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIElPRXJyb3IuXG4iCisgICAgIklmIEZhbHNlLCBzZWVrKCksIHRlbGwoKSBhbmQgdHJ1bmNhdGUoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLlxuIgogICAgICJUaGlzIG1ldGhvZCBtYXkgbmVlZCB0byBkbyBhIHRlc3Qgc2VlaygpLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzE3LDcgKzMxOCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChyZXMgIT0gUHlfVHJ1ZSkgewogICAgICAgICBQeV9DTEVBUihyZXMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCBzZWVrYWJsZS4iKTsKKyAgICAgICAgaW9iYXNlX3Vuc3VwcG9ydGVkKCJGaWxlIG9yIHN0cmVhbSBpcyBub3Qgc2Vla2FibGUuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoYXJncyA9PSBQeV9UcnVlKSB7CkBAIC0zMjksNyArMzMwLDcgQEAKIFB5RG9jX1NUUlZBUihpb2Jhc2VfcmVhZGFibGVfZG9jLAogICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3IgcmVhZGluZy5cbiIKICAgICAiXG4iCi0gICAgIklmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLiIpOworICAgICJJZiBGYWxzZSwgcmVhZCgpIHdpbGwgcmFpc2UgVW5zdXBwb3J0ZWRPcGVyYXRpb24uIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBpb2Jhc2VfcmVhZGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMzQ2LDcgKzM0Nyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChyZXMgIT0gUHlfVHJ1ZSkgewogICAgICAgICBQeV9DTEVBUihyZXMpOwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIkZpbGUgb3Igc3RyZWFtIGlzIG5vdCByZWFkYWJsZS4iKTsKKyAgICAgICAgaW9iYXNlX3Vuc3VwcG9ydGVkKCJGaWxlIG9yIHN0cmVhbSBpcyBub3QgcmVhZGFibGUuIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoYXJncyA9PSBQeV9UcnVlKSB7CkBAIC0zNTgsNyArMzU5LDcgQEAKIFB5RG9jX1NUUlZBUihpb2Jhc2Vfd3JpdGFibGVfZG9jLAogICAgICJSZXR1cm4gd2hldGhlciBvYmplY3Qgd2FzIG9wZW5lZCBmb3Igd3JpdGluZy5cbiIKICAgICAiXG4iCi0gICAgIklmIEZhbHNlLCByZWFkKCkgd2lsbCByYWlzZSBJT0Vycm9yLiIpOworICAgICJJZiBGYWxzZSwgd3JpdGUoKSB3aWxsIHJhaXNlIFVuc3VwcG9ydGVkT3BlcmF0aW9uLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogaW9iYXNlX3dyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTM3NSw3ICszNzYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocmVzICE9IFB5X1RydWUpIHsKICAgICAgICAgUHlfQ0xFQVIocmVzKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsICJGaWxlIG9yIHN0cmVhbSBpcyBub3Qgd3JpdGFibGUuIik7CisgICAgICAgIGlvYmFzZV91bnN1cHBvcnRlZCgiRmlsZSBvciBzdHJlYW0gaXMgbm90IHdyaXRhYmxlLiIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKGFyZ3MgPT0gUHlfVHJ1ZSkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKaW5kZXggOGQ4M2Y3My4uYzlkMTRiMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYworKysgYi9Nb2R1bGVzL19pby9zdHJpbmdpby5jCkBAIC01MzIsOSArNTMyLDkgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPnN0cmluZ19zaXplID0gMDsKLSAgICBzZWxmLT5wb3MgPSAwOwotICAgIHNlbGYtPmJ1Zl9zaXplID0gMDsKKyAgICAvKiB0cF9hbGxvYyBpbml0aWFsaXplcyBhbGwgdGhlIGZpZWxkcyB0byB6ZXJvLiBTbyB3ZSBkb24ndCBoYXZlIHRvCisgICAgICAgaW5pdGlhbGl6ZSB0aGVtIGhlcmUuICovCisKICAgICBzZWxmLT5idWYgPSAoUHlfVU5JQ09ERSAqKVB5TWVtX01hbGxvYygwKTsKICAgICBpZiAoc2VsZi0+YnVmID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwpAQCAtNjcxLDYgKzY3MSwxMzUgQEAKICAgICBQeV9SRVRVUk5fVFJVRTsKIH0KIAorLyogUGlja2xpbmcgc3VwcG9ydC4KKworICAgVGhlIGltcGxlbWVudGF0aW9uIG9mIF9fZ2V0c3RhdGVfXyBpcyBzaW1pbGFyIHRvIHRoZSBvbmUgZm9yIEJ5dGVzSU8sCisgICBleGNlcHQgdGhhdCB3ZSBhbHNvIHNhdmUgdGhlIG5ld2xpbmUgcGFyYW1ldGVyLiBGb3IgX19zZXRzdGF0ZV9fIGFuZCB1bmxpa2UKKyAgIEJ5dGVzSU8sIHdlIGNhbGwgX19pbml0X18gdG8gcmVzdG9yZSB0aGUgb2JqZWN0J3Mgc3RhdGUuIERvaW5nIHNvIGFsbG93cyB1cworICAgdG8gYXZvaWQgZGVjb2RpbmcgdGhlIGNvbXBsZXggbmV3bGluZSBzdGF0ZSB3aGlsZSBrZWVwaW5nIHRoZSBvYmplY3QKKyAgIHJlcHJlc2VudGF0aW9uIGNvbXBhY3QuCisKKyAgIFNlZSBjb21tZW50IGluIGJ5dGVzaW8uYyByZWdhcmRpbmcgd2h5IG9ubHkgcGlja2xlIHByb3RvY29scyBhbmQgb253YXJkIGFyZQorICAgc3VwcG9ydGVkLgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX2dldHN0YXRlKHN0cmluZ2lvICpzZWxmKQoreworICAgIFB5T2JqZWN0ICppbml0dmFsdWUgPSBzdHJpbmdpb19nZXR2YWx1ZShzZWxmKTsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisKKyAgICBpZiAoaW5pdHZhbHVlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZWxmLT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICBkaWN0ID0gUHlfTm9uZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRpY3QgPSBQeURpY3RfQ29weShzZWxmLT5kaWN0KTsKKyAgICAgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0YXRlID0gUHlfQnVpbGRWYWx1ZSgiKE9Pbk4pIiwgaW5pdHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5yZWFkbmwgPyBzZWxmLT5yZWFkbmwgOiBQeV9Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5wb3MsIGRpY3QpOworICAgIFB5X0RFQ1JFRihpbml0dmFsdWUpOworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3N0cmluZ2lvX3NldHN0YXRlKHN0cmluZ2lvICpzZWxmLCBQeU9iamVjdCAqc3RhdGUpCit7CisgICAgUHlPYmplY3QgKmluaXRhcmc7CisgICAgUHlPYmplY3QgKnBvc2l0aW9uX29iajsKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeV9zc2l6ZV90IHBvczsKKworICAgIGFzc2VydChzdGF0ZSAhPSBOVUxMKTsKKyAgICBDSEVDS19DTE9TRUQoc2VsZik7CisKKyAgICAvKiBXZSBhbGxvdyB0aGUgc3RhdGUgdHVwbGUgdG8gYmUgbG9uZ2VyIHRoYW4gNCwgYmVjYXVzZSB3ZSBtYXkgbmVlZAorICAgICAgIHNvbWVkYXkgdG8gZXh0ZW5kIHRoZSBvYmplY3QncyBzdGF0ZSB3aXRob3V0IGJyZWFraW5nCisgICAgICAgYmFja3dhcmQtY29tcGF0aWJpbGl0eS4gKi8KKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpIHx8IFB5X1NJWkUoc3RhdGUpIDwgNCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIiUuMjAwcy5fX3NldHN0YXRlX18gYXJndW1lbnQgc2hvdWxkIGJlIDQtdHVwbGUsIGdvdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSwgUHlfVFlQRShzdGF0ZSktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBJbml0aWFsaXplIHRoZSBvYmplY3QncyBzdGF0ZS4gKi8KKyAgICBpbml0YXJnID0gUHlUdXBsZV9HZXRTbGljZShzdGF0ZSwgMCwgMik7CisgICAgaWYgKGluaXRhcmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHN0cmluZ2lvX2luaXQoc2VsZiwgaW5pdGFyZywgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihpbml0YXJnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0RFQ1JFRihpbml0YXJnKTsKKworICAgIC8qIFJlc3RvcmUgdGhlIGJ1ZmZlciBzdGF0ZS4gRXZlbiBpZiBfX2luaXRfXyBkaWQgaW5pdGlhbGl6ZSB0aGUgYnVmZmVyLAorICAgICAgIHdlIGhhdmUgdG8gaW5pdGlhbGl6ZSBpdCBhZ2FpbiBzaW5jZSBfX2luaXRfXyBtYXkgdHJhbnNsYXRlcyB0aGUKKyAgICAgICBuZXdsaW5lcyBpbiB0aGUgaW5pdGFsX3ZhbHVlIHN0cmluZy4gV2UgY2xlYXJseSBkbyBub3Qgd2FudCB0aGF0CisgICAgICAgYmVjYXVzZSB0aGUgc3RyaW5nIHZhbHVlIGluIHRoZSBzdGF0ZSB0dXBsZSBoYXMgYWxyZWFkeSBiZWVuIHRyYW5zbGF0ZWQKKyAgICAgICBvbmNlIGJ5IF9faW5pdF9fLiBTbyB3ZSBkbyBub3QgdGFrZSBhbnkgY2hhbmNlIGFuZCByZXBsYWNlIG9iamVjdCdzCisgICAgICAgYnVmZmVyIGNvbXBsZXRlbHkuICovCisgICAgeworICAgICAgICBQeV9VTklDT0RFICpidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCAwKSk7CisgICAgICAgIFB5X3NzaXplX3QgYnVmc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCAwKSk7CisgICAgICAgIGlmIChyZXNpemVfYnVmZmVyKHNlbGYsIGJ1ZnNpemUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBtZW1jcHkoc2VsZi0+YnVmLCBidWYsIGJ1ZnNpemUgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICBzZWxmLT5zdHJpbmdfc2l6ZSA9IGJ1ZnNpemU7CisgICAgfQorCisgICAgLyogU2V0IGNhcmVmdWxseSB0aGUgcG9zaXRpb24gdmFsdWUuIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHVzZSB0aGUgc2VlaworICAgICAgIG1ldGhvZCBpbnN0ZWFkIG9mIG1vZGlmeWluZyBzZWxmLT5wb3MgZGlyZWN0bHkgdG8gYmV0dGVyIHByb3RlY3QgdGhlCisgICAgICAgb2JqZWN0IGludGVybmFsIHN0YXRlIGFnYWluc3QgZXJybmVvdXMgKG9yIG1hbGljaW91cykgaW5wdXRzLiAqLworICAgIHBvc2l0aW9uX29iaiA9IFB5VHVwbGVfR0VUX0lURU0oc3RhdGUsIDIpOworICAgIGlmICghUHlMb25nX0NoZWNrKHBvc2l0aW9uX29iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJ0aGlyZCBpdGVtIG9mIHN0YXRlIG11c3QgYmUgYW4gaW50ZWdlciwgZ290ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHBvc2l0aW9uX29iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcG9zID0gUHlMb25nX0FzU3NpemVfdChwb3NpdGlvbl9vYmopOworICAgIGlmIChwb3MgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gdmFsdWUgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzZWxmLT5wb3MgPSBwb3M7CisKKyAgICAvKiBTZXQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIGluc3RhbmNlIHZhcmlhYmxlcy4gKi8KKyAgICBkaWN0ID0gUHlUdXBsZV9HRVRfSVRFTShzdGF0ZSwgMyk7CisgICAgaWYgKGRpY3QgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhkaWN0KSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZm91cnRoIGl0ZW0gb2Ygc3RhdGUgc2hvdWxkIGJlIGEgZGljdCwgZ290IGEgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3QpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChzZWxmLT5kaWN0KSB7CisgICAgICAgICAgICAvKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCByZXBsYWNlIHRoZSBpbnRlcm5hbCBkaWN0aW9uYXJ5CisgICAgICAgICAgICAgICBjb21wbGV0ZWx5LiBIb3dldmVyLCBpdCBzZWVtcyBtb3JlIHByYWN0aWNhbCB0byBqdXN0IHVwZGF0ZSBpdC4gKi8KKyAgICAgICAgICAgIGlmIChQeURpY3RfVXBkYXRlKHNlbGYtPmRpY3QsIGRpY3QpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihkaWN0KTsKKyAgICAgICAgICAgIHNlbGYtPmRpY3QgPSBkaWN0OworICAgICAgICB9CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKwogc3RhdGljIFB5T2JqZWN0ICoKIHN0cmluZ2lvX2Nsb3NlZChzdHJpbmdpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKIHsKQEAgLTcwNSwxMCArODM0LDEzIEBACiAgICAgeyJ0cnVuY2F0ZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb190cnVuY2F0ZSwgTUVUSF9WQVJBUkdTLCBzdHJpbmdpb190cnVuY2F0ZV9kb2N9LAogICAgIHsic2VlayIsICAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2VlaywgICAgIE1FVEhfVkFSQVJHUywgc3RyaW5naW9fc2Vla19kb2N9LAogICAgIHsid3JpdGUiLCAgICAoUHlDRnVuY3Rpb24pc3RyaW5naW9fd3JpdGUsICAgIE1FVEhfTywgICAgICAgc3RyaW5naW9fd3JpdGVfZG9jfSwKLSAgICAKKwogICAgIHsic2Vla2FibGUiLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fc2Vla2FibGUsIE1FVEhfTk9BUkdTfSwKICAgICB7InJlYWRhYmxlIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2lvX3JlYWRhYmxlLCBNRVRIX05PQVJHU30sCiAgICAgeyJ3cml0YWJsZSIsIChQeUNGdW5jdGlvbilzdHJpbmdpb193cml0YWJsZSwgTUVUSF9OT0FSR1N9LAorCisgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pc3RyaW5naW9fZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9fc2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilzdHJpbmdpb19zZXRzdGF0ZSwgTUVUSF9PfSwKICAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby90ZXh0aW8uYyBiL01vZHVsZXMvX2lvL3RleHRpby5jCmluZGV4IGIwMzljMmYuLjczZDgzYTEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL3RleHRpby5jCisrKyBiL01vZHVsZXMvX2lvL3RleHRpby5jCkBAIC02NTgsNiArNjU4LDcgQEAKICAgICBjaGFyIHdyaXRldHJhbnNsYXRlOwogICAgIGNoYXIgc2Vla2FibGU7CiAgICAgY2hhciB0ZWxsaW5nOworICAgIGNoYXIgZGVhbGxvY2F0aW5nOwogICAgIC8qIFNwZWNpYWxpemVkIGVuY29kaW5nIGZ1bmMgKHNlZSBiZWxvdykgKi8KICAgICBlbmNvZGVmdW5jX3QgZW5jb2RlZnVuYzsKICAgICAvKiBXaGV0aGVyIG9yIG5vdCBpdCdzIHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtICovCkBAIC05MDUsOCArOTA2LDExIEBACiAgICAgICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZW5jb2RpbmcpOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChzZWxmLT5lbmNvZGluZyAhPSBOVUxMKQorICAgIGlmIChzZWxmLT5lbmNvZGluZyAhPSBOVUxMKSB7CiAgICAgICAgIGVuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzZWxmLT5lbmNvZGluZyk7CisgICAgICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgZWxzZSBpZiAoZW5jb2RpbmcgIT0gTlVMTCkgewogICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGVuY29kaW5nKTsKICAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpCkBAIC05MzUsNiArOTM5LDggQEAKICAgICBzZWxmLT53cml0ZXRyYW5zbGF0ZSA9IChuZXdsaW5lID09IE5VTEwgfHwgbmV3bGluZVswXSAhPSAnXDAnKTsKICAgICBpZiAoIXNlbGYtPnJlYWR1bml2ZXJzYWwgJiYgc2VsZi0+cmVhZG5sKSB7CiAgICAgICAgIHNlbGYtPndyaXRlbmwgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPnJlYWRubCk7CisgICAgICAgIGlmIChzZWxmLT53cml0ZW5sID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAoIXN0cmNtcChzZWxmLT53cml0ZW5sLCAiXG4iKSkKICAgICAgICAgICAgIHNlbGYtPndyaXRlbmwgPSBOVUxMOwogICAgIH0KQEAgLTEwODksNiArMTA5NSw3IEBACiBzdGF0aWMgdm9pZAogdGV4dGlvd3JhcHBlcl9kZWFsbG9jKHRleHRpbyAqc2VsZikKIHsKKyAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwogICAgIGlmIChfdGV4dGlvd3JhcHBlcl9jbGVhcihzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKQEAgLTEyNTQsMTAgKzEyNjEsOCBAQAogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgaWYgKHNlbGYtPmVuY29kZXIgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIm5vdCB3cml0YWJsZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKHNlbGYtPmVuY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIF91bnN1cHBvcnRlZCgibm90IHdyaXRhYmxlIik7CiAKICAgICBQeV9JTkNSRUYodGV4dCk7CiAKQEAgLTEzOTQsNyArMTM5OSw3IEBACiAgICAgICovCiAKICAgICBpZiAoc2VsZi0+ZGVjb2RlciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLCAibm90IHJlYWRhYmxlIik7CisgICAgICAgIF91bnN1cHBvcnRlZCgibm90IHJlYWRhYmxlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTE0ODQsMTAgKzE0ODksOCBAQAogCiAgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYpOwogCi0gICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwgIm5vdCByZWFkYWJsZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIF91bnN1cHBvcnRlZCgibm90IHJlYWRhYmxlIik7CiAKICAgICBpZiAoX3RleHRpb3dyYXBwZXJfd3JpdGVmbHVzaChzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk3OCw4ICsxOTgxLDcgQEAKICAgICBQeV9JTkNSRUYoY29va2llT2JqKTsKIAogICAgIGlmICghc2VsZi0+c2Vla2FibGUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIik7CisgICAgICAgIF91bnN1cHBvcnRlZCgidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIik7CiAgICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKQEAgLTE5OTAsOCArMTk5Miw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAgICAgaWYgKGNtcCA9PSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSU9FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgZG8gbm9uemVybyBjdXItcmVsYXRpdmUgc2Vla3MiKTsKKyAgICAgICAgICAgIF91bnN1cHBvcnRlZCgiY2FuJ3QgZG8gbm9uemVybyBjdXItcmVsYXRpdmUgc2Vla3MiKTsKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgfQogCkBAIC0yMDExLDggKzIwMTIsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsOwogCiAgICAgICAgIGlmIChjbXAgPT0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0lPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIik7CisgICAgICAgICAgICBfdW5zdXBwb3J0ZWQoImNhbid0IGRvIG5vbnplcm8gZW5kLXJlbGF0aXZlIHNlZWtzIik7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KIApAQCAtMjE0Niw4ICsyMTQ2LDcgQEAKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKICAgICBpZiAoIXNlbGYtPnNlZWthYmxlKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JT0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSIpOworICAgICAgICBfdW5zdXBwb3J0ZWQoInVuZGVybHlpbmcgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSIpOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogICAgIGlmICghc2VsZi0+dGVsbGluZykgewpAQCAtMjMyNCwyNSArMjMyMyw1MiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfcmVwcih0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKm5hbWVvYmosICpyZXM7CisgICAgUHlPYmplY3QgKm5hbWVvYmosICptb2Rlb2JqLCAqcmVzLCAqczsKIAogICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOwogCisgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxfaW8uVGV4dElPV3JhcHBlciIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmFtZW9iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopIHNlbGYsICJuYW1lIik7CiAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxfaW8uVGV4dElPV3JhcHBlciBlbmNvZGluZz0lUj4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSVSIGVuY29kaW5nPSVSPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVvYmosIHNlbGYtPmVuY29kaW5nKTsKKyAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIgbmFtZT0lUiIsIG5hbWVvYmopOwogICAgICAgICBQeV9ERUNSRUYobmFtZW9iaik7CisgICAgICAgIGlmIChzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZyZXMsIHMpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIHJlczsKKyAgICBtb2Rlb2JqID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKikgc2VsZiwgIm1vZGUiKTsKKyAgICBpZiAobW9kZW9iaiA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiBtb2RlPSVSIiwgbW9kZW9iaik7CisgICAgICAgIFB5X0RFQ1JFRihtb2Rlb2JqKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnJlcywgcyk7CisgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVVIGVuY29kaW5nPSVSPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcywgc2VsZi0+ZW5jb2RpbmcpOworICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiBzOworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXMpOworICAgIHJldHVybiBOVUxMOwogfQogCiAKQEAgLTIzODQsNiArMjQxMCwxNCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgordGV4dGlvd3JhcHBlcl9nZXRzdGF0ZSh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplICclcycgb2JqZWN0IiwgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiB0ZXh0aW93cmFwcGVyX2ZsdXNoKHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CkBAIC0yNDA4LDExICsyNDQyLDE4IEBACiAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgaWYgKHIgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAKKwogICAgIGlmIChyID4gMCkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsgLyogc3RyZWFtIGFscmVhZHkgY2xvc2VkICovCiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHNlbGYtPmJ1ZmZlciwgIl9kZWFsbG9jX3dhcm4iLCAiTyIsIHNlbGYpOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2QoKFB5T2JqZWN0ICopc2VsZiwgImZsdXNoIiwgTlVMTCk7CiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNTQwLDYgKzI1ODEsNyBAQAogICAgIHsicmVhZGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9yZWFkYWJsZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGFibGUiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl93cml0YWJsZSwgTUVUSF9OT0FSR1N9LAogICAgIHsiaXNhdHR5IiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfaXNhdHR5LCBNRVRIX05PQVJHU30sCisgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl9nZXRzdGF0ZSwgTUVUSF9OT0FSR1N9LAogCiAgICAgeyJzZWVrIiwgKFB5Q0Z1bmN0aW9uKXRleHRpb3dyYXBwZXJfc2VlaywgTUVUSF9WQVJBUkdTfSwKICAgICB7InRlbGwiLCAoUHlDRnVuY3Rpb24pdGV4dGlvd3JhcHBlcl90ZWxsLCBNRVRIX05PQVJHU30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19qc29uLmMgYi9Nb2R1bGVzL19qc29uLmMKaW5kZXggNGRhNWU3NC4uNzViMTRlZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fanNvbi5jCisrKyBiL01vZHVsZXMvX2pzb24uYwpAQCAtMzYsNiArMzYsNyBAQAogICAgIFB5T2JqZWN0ICpwYXJzZV9mbG9hdDsKICAgICBQeU9iamVjdCAqcGFyc2VfaW50OwogICAgIFB5T2JqZWN0ICpwYXJzZV9jb25zdGFudDsKKyAgICBQeU9iamVjdCAqbWVtbzsKIH0gUHlTY2FubmVyT2JqZWN0OwogCiBzdGF0aWMgUHlNZW1iZXJEZWYgc2Nhbm5lcl9tZW1iZXJzW10gPSB7CkBAIC0zMDUsNiArMzA2LDIxIEBACiAgICAgcmV0dXJuIHRwbDsKIH0KIAorI2RlZmluZSBBUFBFTkRfT0xEX0NIVU5LIFwKKyAgICBpZiAoY2h1bmsgIT0gTlVMTCkgeyBcCisgICAgICAgIGlmIChjaHVua3MgPT0gTlVMTCkgeyBcCisgICAgICAgICAgICBjaHVua3MgPSBQeUxpc3RfTmV3KDApOyBcCisgICAgICAgICAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsgXAorICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsgXAorICAgICAgICAgICAgfSBcCisgICAgICAgIH0gXAorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChjaHVua3MsIGNodW5rKSkgeyBcCisgICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmspOyBcCisgICAgICAgICAgICBnb3RvIGJhaWw7IFwKKyAgICAgICAgfSBcCisgICAgICAgIFB5X0NMRUFSKGNodW5rKTsgXAorICAgIH0KKwogc3RhdGljIFB5T2JqZWN0ICoKIHNjYW5zdHJpbmdfdW5pY29kZShQeU9iamVjdCAqcHlzdHIsIFB5X3NzaXplX3QgZW5kLCBpbnQgc3RyaWN0LCBQeV9zc2l6ZV90ICpuZXh0X2VuZF9wdHIpCiB7CkBAIC0zMTYsMTUgKzMzMiwxNCBAQAogCiAgICAgUmV0dXJuIHZhbHVlIGlzIGEgbmV3IFB5VW5pY29kZQogICAgICovCi0gICAgUHlPYmplY3QgKnJ2YWw7CisgICAgUHlPYmplY3QgKnJ2YWwgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHB5c3RyKTsKICAgICBQeV9zc2l6ZV90IGJlZ2luID0gZW5kIC0gMTsKICAgICBQeV9zc2l6ZV90IG5leHQgPSBiZWdpbjsKICAgICBjb25zdCBQeV9VTklDT0RFICpidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShweXN0cik7Ci0gICAgUHlPYmplY3QgKmNodW5rcyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKGNodW5rcyA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9CisgICAgUHlPYmplY3QgKmNodW5rcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNodW5rID0gTlVMTDsKKwogICAgIGlmIChlbmQgPCAwIHx8IGxlbiA8PSBlbmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbmQgaXMgb3V0IG9mIGJvdW5kcyIpOwogICAgICAgICBnb3RvIGJhaWw7CkBAIC0zMzIsNyArMzQ3LDYgQEAKICAgICB3aGlsZSAoMSkgewogICAgICAgICAvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBvciB0aGUgbmV4dCBlc2NhcGUgKi8KICAgICAgICAgUHlfVU5JQ09ERSBjID0gMDsKLSAgICAgICAgUHlPYmplY3QgKmNodW5rID0gTlVMTDsKICAgICAgICAgZm9yIChuZXh0ID0gZW5kOyBuZXh0IDwgbGVuOyBuZXh0KyspIHsKICAgICAgICAgICAgIGMgPSBidWZbbmV4dF07CiAgICAgICAgICAgICBpZiAoYyA9PSAnIicgfHwgYyA9PSAnXFwnKSB7CkBAIC0zNDksMTUgKzM2MywxMSBAQAogICAgICAgICB9CiAgICAgICAgIC8qIFBpY2sgdXAgdGhpcyBjaHVuayBpZiBpdCdzIG5vdCB6ZXJvIGxlbmd0aCAqLwogICAgICAgICBpZiAobmV4dCAhPSBlbmQpIHsKKyAgICAgICAgICAgIEFQUEVORF9PTERfQ0hVTksKICAgICAgICAgICAgIGNodW5rID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKCZidWZbZW5kXSwgbmV4dCAtIGVuZCk7CiAgICAgICAgICAgICBpZiAoY2h1bmsgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNodW5rcywgY2h1bmspKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rKTsKLSAgICAgICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYoY2h1bmspOwogICAgICAgICB9CiAgICAgICAgIG5leHQrKzsKICAgICAgICAgaWYgKGMgPT0gJyInKSB7CkBAIC00NTksMjcgKzQ2OSwzNCBAQAogICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIH0KKyAgICAgICAgQVBQRU5EX09MRF9DSFVOSwogICAgICAgICBjaHVuayA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmYywgMSk7CiAgICAgICAgIGlmIChjaHVuayA9PSBOVUxMKSB7CiAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBjaHVuaykpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjaHVuayk7Ci0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKGNodW5rKTsKICAgICB9CiAKLSAgICBydmFsID0gam9pbl9saXN0X3VuaWNvZGUoY2h1bmtzKTsKLSAgICBpZiAocnZhbCA9PSBOVUxMKSB7Ci0gICAgICAgIGdvdG8gYmFpbDsKKyAgICBpZiAoY2h1bmtzID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGNodW5rICE9IE5VTEwpCisgICAgICAgICAgICBydmFsID0gY2h1bms7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJ2YWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwogICAgIH0KLSAgICBQeV9ERUNSRUYoY2h1bmtzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVBQRU5EX09MRF9DSFVOSworICAgICAgICBydmFsID0gam9pbl9saXN0X3VuaWNvZGUoY2h1bmtzKTsKKyAgICAgICAgaWYgKHJ2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGNodW5rcyk7CisgICAgfQorCiAgICAgKm5leHRfZW5kX3B0ciA9IGVuZDsKICAgICByZXR1cm4gcnZhbDsKIGJhaWw6CiAgICAgKm5leHRfZW5kX3B0ciA9IC0xOwogICAgIFB5X1hERUNSRUYoY2h1bmtzKTsKKyAgICBQeV9YREVDUkVGKGNodW5rKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNTc4LDYgKzU5NSw3IEBACiAgICAgUHlfQ0xFQVIocy0+cGFyc2VfZmxvYXQpOwogICAgIFB5X0NMRUFSKHMtPnBhcnNlX2ludCk7CiAgICAgUHlfQ0xFQVIocy0+cGFyc2VfY29uc3RhbnQpOworICAgIFB5X0NMRUFSKHMtPm1lbW8pOwogICAgIHJldHVybiAwOwogfQogCkBAIC01OTMsMTAgKzYxMSwxNiBAQAogICAgIFB5X1VOSUNPREUgKnN0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHB5c3RyKTsKICAgICBQeV9zc2l6ZV90IGVuZF9pZHggPSBQeVVuaWNvZGVfR0VUX1NJWkUocHlzdHIpIC0gMTsKICAgICBQeU9iamVjdCAqdmFsID0gTlVMTDsKLSAgICBQeU9iamVjdCAqcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgUHlPYmplY3QgKnJ2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMOwogICAgIGludCBzdHJpY3QgPSBQeU9iamVjdF9Jc1RydWUocy0+c3RyaWN0KTsKKyAgICBpbnQgaGFzX3BhaXJzX2hvb2sgPSAocy0+b2JqZWN0X3BhaXJzX2hvb2sgIT0gUHlfTm9uZSk7CiAgICAgUHlfc3NpemVfdCBuZXh0X2lkeDsKKworICAgIGlmIChoYXNfcGFpcnNfaG9vaykKKyAgICAgICAgcnZhbCA9IFB5TGlzdF9OZXcoMCk7CisgICAgZWxzZQorICAgICAgICBydmFsID0gUHlEaWN0X05ldygpOwogICAgIGlmIChydmFsID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC02MDYsNiArNjMwLDggQEAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgc3RyW2lkeF0gIT0gJ30nKSB7CiAgICAgICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCkgeworICAgICAgICAgICAgUHlPYmplY3QgKm1lbW9rZXk7CisKICAgICAgICAgICAgIC8qIHJlYWQga2V5ICovCiAgICAgICAgICAgICBpZiAoc3RyW2lkeF0gIT0gJyInKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHB5c3RyLCBpZHgpOwpAQCAtNjE0LDYgKzY0MCwxNiBAQAogICAgICAgICAgICAga2V5ID0gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLCBzdHJpY3QsICZuZXh0X2lkeCk7CiAgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgbWVtb2tleSA9IFB5RGljdF9HZXRJdGVtKHMtPm1lbW8sIGtleSk7CisgICAgICAgICAgICBpZiAobWVtb2tleSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1lbW9rZXkpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgIGtleSA9IG1lbW9rZXk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocy0+bWVtbywga2V5LCBrZXkpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWR4ID0gbmV4dF9pZHg7CiAKICAgICAgICAgICAgIC8qIHNraXAgd2hpdGVzcGFjZSBiZXR3ZWVuIGtleSBhbmQgOiBkZWxpbWl0ZXIsIHJlYWQgOiwgc2tpcCB3aGl0ZXNwYWNlICovCkBAIC02MzAsMTkgKzY2NiwyNCBAQAogICAgICAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKIAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHR1cGxlID09IE5VTEwpCisgICAgICAgICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VHVwbGVfUGFjaygyLCBrZXksIHZhbCk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgZ290byBiYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJ2YWwsIHR1cGxlKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKGtleSk7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIodmFsKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChydmFsLCBpdGVtKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFB5X0NMRUFSKGtleSk7Ci0gICAgICAgICAgICBQeV9DTEVBUih2YWwpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHJ2YWwsIGtleSwgdmFsKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihrZXkpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHZhbCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZHggPSBuZXh0X2lkeDsKIAogICAgICAgICAgICAgLyogc2tpcCB3aGl0ZXNwYWNlIGJlZm9yZSB9IG9yICwgKi8KQEAgLTY3MiwzNiArNzEzLDIzIEBACiAKICAgICAqbmV4dF9pZHhfcHRyID0gaWR4ICsgMTsKIAotICAgIGlmIChzLT5vYmplY3RfcGFpcnNfaG9vayAhPSBQeV9Ob25lKSB7CisgICAgaWYgKGhhc19wYWlyc19ob29rKSB7CiAgICAgICAgIHZhbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3Mocy0+b2JqZWN0X3BhaXJzX2hvb2ssIHJ2YWwsIE5VTEwpOwotICAgICAgICBpZiAodmFsID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgIFB5X0RFQ1JFRihydmFsKTsKICAgICAgICAgcmV0dXJuIHZhbDsKICAgICB9CiAKLSAgICB2YWwgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgaWYgKFB5RGljdF9NZXJnZUZyb21TZXEyKHZhbCwgcnZhbCwgMSkgPT0gLTEpCi0gICAgICAgIGdvdG8gYmFpbDsKLSAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgcnZhbCA9IHZhbDsKLQogICAgIC8qIGlmIG9iamVjdF9ob29rIGlzIG5vdCBOb25lOiBydmFsID0gb2JqZWN0X2hvb2socnZhbCkgKi8KICAgICBpZiAocy0+b2JqZWN0X2hvb2sgIT0gUHlfTm9uZSkgewogICAgICAgICB2YWwgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHMtPm9iamVjdF9ob29rLCBydmFsLCBOVUxMKTsKLSAgICAgICAgaWYgKHZhbCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICBQeV9ERUNSRUYocnZhbCk7Ci0gICAgICAgIHJ2YWwgPSB2YWw7Ci0gICAgICAgIHZhbCA9IE5VTEw7CisgICAgICAgIHJldHVybiB2YWw7CiAgICAgfQogICAgIHJldHVybiBydmFsOwogYmFpbDoKICAgICBQeV9YREVDUkVGKGtleSk7CiAgICAgUHlfWERFQ1JFRih2YWwpOwotICAgIFB5X0RFQ1JFRihydmFsKTsKKyAgICBQeV9YREVDUkVGKHJ2YWwpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC05ODgsNiArMTAxNiw5IEBACiAgICAgICAgICAgICAgICAgIFB5X1RZUEUocHlzdHIpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIFB5RGljdF9DbGVhcihzLT5tZW1vKTsKKyAgICBpZiAocnZhbCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gX2J1aWxkX3J2YWxfaW5kZXhfdHVwbGUocnZhbCwgbmV4dF9pZHgpOwogfQogCkBAIC0xMDIxLDYgKzEwNTIsMTIgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTzptYWtlX3NjYW5uZXIiLCBrd2xpc3QsICZjdHgpKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBpZiAocy0+bWVtbyA9PSBOVUxMKSB7CisgICAgICAgIHMtPm1lbW8gPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChzLT5tZW1vID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCiAgICAgLyogQWxsIG9mIHRoZXNlIHdpbGwgZmFpbCAiZ3JhY2VmdWxseSIgc28gd2UgZG9uJ3QgbmVlZCB0byB2ZXJpZnkgdGhlbSAqLwogICAgIHMtPnN0cmljdCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY3R4LCAic3RyaWN0Iik7CiAgICAgaWYgKHMtPnN0cmljdCA9PSBOVUxMKQpAQCAtMTM1MCw4ICsxMzg3LDYgQEAKICAgICBQeU9iamVjdCAqaXRlbSA9IE5VTEw7CiAgICAgaW50IHNraXBrZXlzOwogICAgIFB5X3NzaXplX3QgaWR4OwotICAgIFB5T2JqZWN0ICptYXBwaW5nOwotICAgIHN0YXRpYyBQeU9iamVjdCAqY29kZSA9IE5VTEw7CiAKICAgICBpZiAob3Blbl9kaWN0ID09IE5VTEwgfHwgY2xvc2VfZGljdCA9PSBOVUxMIHx8IGVtcHR5X2RpY3QgPT0gTlVMTCkgewogICAgICAgICBvcGVuX2RpY3QgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygieyIpOwpAQCAtMTM5MywzMCArMTQyOCwzNyBAQAogICAgIH0KIAogICAgIGlmIChQeU9iamVjdF9Jc1RydWUocy0+c29ydF9rZXlzKSkgewotICAgICAgICBpZiAoY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb2RlID0gUHlfQ29tcGlsZVN0cmluZygic29ydGVkKGQuaXRlbXMoKSwga2V5PWxhbWJkYSBrdjoga3ZbMF0pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfanNvbi5jIiwgUHlfZXZhbF9pbnB1dCk7Ci0gICAgICAgICAgICBpZiAoY29kZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIG1hcHBpbmcgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgIGlmIChtYXBwaW5nID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGJhaWw7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtYXBwaW5nLCAiZCIsIGRjdCkgPT0gLTEpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihtYXBwaW5nKTsKLSAgICAgICAgICAgIGdvdG8gYmFpbDsKLSAgICAgICAgfQotICAgICAgICBpdGVtcyA9IFB5RXZhbF9FdmFsQ29kZSgoUHlDb2RlT2JqZWN0ICopY29kZSwgUHlFdmFsX0dldEdsb2JhbHMoKSwgbWFwcGluZyk7Ci0gICAgICAgIFB5X0RFQ1JFRihtYXBwaW5nKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgaXRlbXMgPSBQeU1hcHBpbmdfSXRlbXMoZGN0KTsKLSAgICAgICAgfQorICAgICAgICAvKiBGaXJzdCBzb3J0IHRoZSBrZXlzIHRoZW4gcmVwbGFjZSB0aGVtIHdpdGggKGtleSwgdmFsdWUpIHR1cGxlcy4gKi8KKyAgICAgICAgUHlfc3NpemVfdCBpLCBuaXRlbXM7CisgICAgICAgIGl0ZW1zID0gUHlNYXBwaW5nX0tleXMoZGN0KTsKICAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKGl0ZW1zKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJrZXlzIG11c3QgcmV0dXJuIGxpc3QiKTsKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlMaXN0X1NvcnQoaXRlbXMpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgbml0ZW1zID0gUHlMaXN0X0dFVF9TSVpFKGl0ZW1zKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG5pdGVtczsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgICAgICAgICBrZXkgPSBQeUxpc3RfR0VUX0lURU0oaXRlbXMsIGkpOworICAgICAgICAgICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbShkY3QsIGtleSk7CisgICAgICAgICAgICBpdGVtID0gUHlUdXBsZV9QYWNrKDIsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CisgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oaXRlbXMsIGksIGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGl0ZW1zID0gUHlNYXBwaW5nX0l0ZW1zKGRjdCk7CisgICAgfQorICAgIGlmIChpdGVtcyA9PSBOVUxMKQogICAgICAgICBnb3RvIGJhaWw7CiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKLSAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKLSAgICAgICAgaWYgKGl0ID09IE5VTEwpCisgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgZ290byBiYWlsOwogICAgIHNraXBrZXlzID0gUHlPYmplY3RfSXNUcnVlKHMtPnNraXBrZXlzKTsKICAgICBpZHggPSAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwppbmRleCA4NGUzOTNlLi4xMDAxZGQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwpAQCAtMjQyLDI5ICsyNDIsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqb3MxLCAqb3MyLCAqcmVzdWx0ID0gTlVMTDsKICAgICB3Y2hhcl90ICp3czEgPSBOVUxMLCAqd3MyID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVVOnN0cmNvbGwiLCAmb3MxLCAmb3MyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQ29udmVydCB0aGUgdW5pY29kZSBzdHJpbmdzIHRvIHdjaGFyW10uICovCi0gICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfU0laRShvczEpICsgMTsKLSAgICB3czEgPSBQeU1lbV9NQUxMT0MobGVuMSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgaWYgKCF3czEpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB3czEgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyhvczEsIE5VTEwpOworICAgIGlmICh3czEgPT0gTlVMTCkKICAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX0FzV2lkZUNoYXIoKFB5VW5pY29kZU9iamVjdCopb3MxLCB3czEsIGxlbjEpID09IC0xKQorICAgIHdzMiA9IFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKG9zMiwgTlVMTCk7CisgICAgaWYgKHdzMiA9PSBOVUxMKQogICAgICAgICBnb3RvIGRvbmU7Ci0gICAgd3MxW2xlbjEgLSAxXSA9IDA7Ci0gICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfU0laRShvczIpICsgMTsKLSAgICB3czIgPSBQeU1lbV9NQUxMT0MobGVuMiAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgaWYgKCF3czIpIHsKLSAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBpZiAoUHlVbmljb2RlX0FzV2lkZUNoYXIoKFB5VW5pY29kZU9iamVjdCopb3MyLCB3czIsIGxlbjIpID09IC0xKQotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgd3MyW2xlbjIgLSAxXSA9IDA7CiAgICAgLyogQ29sbGF0ZSB0aGUgc3RyaW5ncy4gKi8KICAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcod2NzY29sbCh3czEsIHdzMikpOwogICBkb25lOgpAQCAtMjg5LDE1ICsyNzYsMTUgQEAKICAgICB3Y2hhcl90ICpzLCAqYnVmID0gTlVMTDsKICAgICBzaXplX3QgbjEsIG4yOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotI2lmbmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCisjaWYgUHlfVU5JQ09ERV9TSVpFICE9IFNJWkVPRl9XQ0hBUl9UCiAgICAgUHlfc3NpemVfdCBpOwogI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInUjOnN0cnhmcm0iLCAmczAsICZuMCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0jaWZkZWYgSEFWRV9VU0FCTEVfV0NIQVJfVAotICAgIHMgPSBzMDsKKyNpZiBQeV9VTklDT0RFX1NJWkUgPT0gU0laRU9GX1dDSEFSX1QKKyAgICBzID0gKHdjaGFyX3QgKikgczA7CiAjZWxzZQogICAgIHMgPSBQeU1lbV9NYWxsb2MoKG4wKzEpKnNpemVvZih3Y2hhcl90KSk7CiAgICAgaWYgKCFzKQpAQCAtMzI2LDcgKzMxMyw3IEBACiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihidWYsIG4yKTsKICBleGl0OgogICAgIGlmIChidWYpIFB5TWVtX0ZyZWUoYnVmKTsKLSNpZm5kZWYgSEFWRV9VU0FCTEVfV0NIQVJfVAorI2lmIFB5X1VOSUNPREVfU0laRSAhPSBTSVpFT0ZfV0NIQVJfVAogICAgIFB5TWVtX0ZyZWUocyk7CiAjZW5kaWYKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNTcyLDE5ICs1NTksMzEgQEAKIHN0YXRpYyBQeU9iamVjdCoKIFB5SW50bF9iaW5kdGV4dGRvbWFpbihQeU9iamVjdCogc2VsZixQeU9iamVjdCphcmdzKQogewotICAgIGNoYXIgKmRvbWFpbiwgKmRpcm5hbWU7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzeiIsICZkb21haW4sICZkaXJuYW1lKSkKKyAgICBjaGFyICpkb21haW4sICpkaXJuYW1lLCAqY3VycmVudF9kaXJuYW1lOworICAgIFB5T2JqZWN0ICpkaXJuYW1lX29iaiwgKmRpcm5hbWVfYnl0ZXMgPSBOVUxMLCAqcmVzdWx0OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08iLCAmZG9tYWluLCAmZGlybmFtZV9vYmopKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXN0cmxlbihkb21haW4pKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgImRvbWFpbiBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgZGlybmFtZSA9IGJpbmR0ZXh0ZG9tYWluKGRvbWFpbiwgZGlybmFtZSk7Ci0gICAgaWYgKCFkaXJuYW1lKSB7CisgICAgaWYgKGRpcm5hbWVfb2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoZGlybmFtZV9vYmosICZkaXJuYW1lX2J5dGVzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBkaXJuYW1lID0gUHlCeXRlc19Bc1N0cmluZyhkaXJuYW1lX2J5dGVzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkaXJuYW1lX2J5dGVzID0gTlVMTDsKKyAgICAgICAgZGlybmFtZSA9IE5VTEw7CisgICAgfQorICAgIGN1cnJlbnRfZGlybmFtZSA9IGJpbmR0ZXh0ZG9tYWluKGRvbWFpbiwgZGlybmFtZSk7CisgICAgaWYgKGN1cnJlbnRfZGlybmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X1hERUNSRUYoZGlybmFtZV9ieXRlcyk7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBzdHIydW5pKGRpcm5hbWUpOworICAgIHJlc3VsdCA9IHN0cjJ1bmkoY3VycmVudF9kaXJuYW1lKTsKKyAgICBQeV9YREVDUkVGKGRpcm5hbWVfYnl0ZXMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZmRlZiBIQVZFX0JJTkRfVEVYVERPTUFJTl9DT0RFU0VUCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sc3Byb2YuYyBiL01vZHVsZXMvX2xzcHJvZi5jCmluZGV4IDFmZDY2MGIuLmNjNDEyYmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2xzcHJvZi5jCisrKyBiL01vZHVsZXMvX2xzcHJvZi5jCkBAIC0xLDcgKzEsNSBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgotI2luY2x1ZGUgInN0cnVjdHNlcS5oIgogI2luY2x1ZGUgInJvdGF0aW5ndHJlZS5oIgogCiAjaWYgIWRlZmluZWQoSEFWRV9MT05HX0xPTkcpCkBAIC0xODAsNyArMTc4LDE2IEBACiAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBmbi0+bV9tb2R1bGU7CiAgICAgICAgIGNvbnN0IGNoYXIgKm1vZG5hbWU7CiAgICAgICAgIGlmIChtb2QgJiYgUHlVbmljb2RlX0NoZWNrKG1vZCkpIHsKKyAgICAgICAgICAgIC8qIFhYWDogVGhlIGZvbGxvd2luZyB3aWxsIHRydW5jYXRlIG1vZHVsZSBuYW1lcyB3aXRoIGVtYmVkZGVkCisgICAgICAgICAgICAgKiBudWxsLWNoYXJhY3RlcnMuICBJdCBpcyB1bmxpa2VseSB0aGF0IHRoaXMgY2FuIGhhcHBlbiBpbgorICAgICAgICAgICAgICogcHJhY3RpY2UgYW5kIHRoZSBjb25jZXF1ZW5jZXMgYXJlIG5vdCBzZXJpb3VzIGVub3VnaCB0bworICAgICAgICAgICAgICogaW50cm9kdWNlIGV4dHJhIGNoZWNrcyBoZXJlLgorICAgICAgICAgICAgICovCiAgICAgICAgICAgICBtb2RuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtb2QpOworICAgICAgICAgICAgaWYgKG1vZG5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1vZG5hbWUgPSAiPGVuY29kaW5nIGVycm9yPiI7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChtb2QgJiYgUHlNb2R1bGVfQ2hlY2sobW9kKSkgewogICAgICAgICAgICAgbW9kbmFtZSA9IFB5TW9kdWxlX0dldE5hbWUobW9kKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX21hdGguYyBiL01vZHVsZXMvX21hdGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmVmNDgxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fbWF0aC5jCkBAIC0wLDAgKzEsMjMyIEBACisvKiBEZWZpbml0aW9ucyBvZiBzb21lIEM5OSBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zLCBmb3IgdGhvc2UgcGxhdGZvcm1zCisgICB0aGF0IGRvbid0IGltcGxlbWVudCB0aGVzZSBmdW5jdGlvbnMgYWxyZWFkeS4gKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSAiX21hdGguaCIKKworLyogVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGFwcGxpZXMgdG8gdGhlIG9yaWdpbmFsCisgICBpbXBsZW1lbnRhdGlvbnMgb2YgYWNvc2gsIGFzaW5oIGFuZCBhdGFuaC4gKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIGxuMiA9IDYuOTMxNDcxODA1NTk5NDUyODYyMjdFLTAxOworc3RhdGljIGNvbnN0IGRvdWJsZSB0d29fcG93X20yOCA9IDMuNzI1MjkwMjk4NDYxOTE0MUUtMDk7IC8qIDIqKi0yOCAqLworc3RhdGljIGNvbnN0IGRvdWJsZSB0d29fcG93X3AyOCA9IDI2ODQzNTQ1Ni4wOyAvKiAyKioyOCAqLworc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOworCisvKiBhY29zaCh4KQorICogTWV0aG9kIDoKKyAqICAgICAgQmFzZWQgb24KKyAqICAgICAgICAgICAgYWNvc2goeCkgPSBsb2cgWyB4ICsgc3FydCh4KngtMSkgXQorICogICAgICB3ZSBoYXZlCisgKiAgICAgICAgICAgIGFjb3NoKHgpIDo9IGxvZyh4KStsbjIsIGlmIHggaXMgbGFyZ2U7IGVsc2UKKyAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKDJ4LTEvKHNxcnQoeCp4LTEpK3gpKSBpZiB4PjI7IGVsc2UKKyAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nMXAodCtzcXJ0KDIuMCp0K3QqdCkpOyB3aGVyZSB0PXgtMS4KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBhY29zaCh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeDwxLgorICogICAgICBhY29zaChOYU4pIGlzIE5hTiB3aXRob3V0IHNpZ25hbC4KKyAqLworCitkb3VibGUKK19QeV9hY29zaChkb3VibGUgeCkKK3sKKyAgICBpZiAoUHlfSVNfTkFOKHgpKSB7CisgICAgICAgIHJldHVybiB4K3g7CisgICAgfQorICAgIGlmICh4IDwgMS4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIHggPCAxOyAgcmV0dXJuIGEgc2lnbmFsaW5nIE5hTiAqLworICAgICAgICBlcnJubyA9IEVET007CisjaWZkZWYgUHlfTkFOCisgICAgICAgIHJldHVybiBQeV9OQU47CisjZWxzZQorICAgICAgICByZXR1cm4gKHgteCkvKHgteCk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZSBpZiAoeCA+PSB0d29fcG93X3AyOCkgeyAgICAgICAgLyogeCA+IDIqKjI4ICovCisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh4KSkgeworICAgICAgICAgICAgcmV0dXJuIHgreDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBsb2coeCkrbG4yOyAgICAgICAgICAvKiBhY29zaChodWdlKT1sb2coMngpICovCisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoeCA9PSAxLikgeworICAgICAgICByZXR1cm4gMC4wOyAgICAgICAgICAgICAgICAgICAgIC8qIGFjb3NoKDEpID0gMCAqLworICAgIH0KKyAgICBlbHNlIGlmICh4ID4gMi4pIHsgICAgICAgICAgICAgICAgICAvKiAyIDwgeCA8IDIqKjI4ICovCisgICAgICAgIGRvdWJsZSB0ID0geCp4OworICAgICAgICByZXR1cm4gbG9nKDIuMCp4IC0gMS4wIC8gKHggKyBzcXJ0KHQgLSAxLjApKSk7CisgICAgfQorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPCB4IDw9IDIgKi8KKyAgICAgICAgZG91YmxlIHQgPSB4IC0gMS4wOworICAgICAgICByZXR1cm4gbV9sb2cxcCh0ICsgc3FydCgyLjAqdCArIHQqdCkpOworICAgIH0KK30KKworCisvKiBhc2luaCh4KQorICogTWV0aG9kIDoKKyAqICAgICAgQmFzZWQgb24KKyAqICAgICAgICAgICAgICBhc2luaCh4KSA9IHNpZ24oeCkgKiBsb2cgWyB8eHwgKyBzcXJ0KHgqeCsxKSBdCisgKiAgICAgIHdlIGhhdmUKKyAqICAgICAgYXNpbmgoeCkgOj0geCAgaWYgIDEreCp4PTEsCisgKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqKGxvZyh4KStsbjIpKSBmb3IgbGFyZ2UgfHh8LCBlbHNlCisgKiAgICAgICAgICAgICAgIDo9IHNpZ24oeCkqbG9nKDJ8eHwrMS8ofHh8K3NxcnQoeCp4KzEpKSkgaWZ8eHw+MiwgZWxzZQorICogICAgICAgICAgICAgICA6PSBzaWduKHgpKmxvZzFwKHx4fCArIHheMi8oMSArIHNxcnQoMSt4XjIpKSkKKyAqLworCitkb3VibGUKK19QeV9hc2luaChkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgdzsKKyAgICBkb3VibGUgYWJzeCA9IGZhYnMoeCk7CisKKyAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IFB5X0lTX0lORklOSVRZKHgpKSB7CisgICAgICAgIHJldHVybiB4K3g7CisgICAgfQorICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLworICAgICAgICByZXR1cm4geDsgICAgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KKyAgICB9CisgICAgaWYgKGFic3ggPiB0d29fcG93X3AyOCkgeyAgICAgICAgICAgLyogfHh8ID4gMioqMjggKi8KKyAgICAgICAgdyA9IGxvZyhhYnN4KStsbjI7CisgICAgfQorICAgIGVsc2UgaWYgKGFic3ggPiAyLjApIHsgICAgICAgICAgICAgIC8qIDIgPCB8eHwgPCAyKioyOCAqLworICAgICAgICB3ID0gbG9nKDIuMCphYnN4ICsgMS4wIC8gKHNxcnQoeCp4ICsgMS4wKSArIGFic3gpKTsKKyAgICB9CisgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMioqLTI4IDw9IHx4fCA8IDI9ICovCisgICAgICAgIGRvdWJsZSB0ID0geCp4OworICAgICAgICB3ID0gbV9sb2cxcChhYnN4ICsgdCAvICgxLjAgKyBzcXJ0KDEuMCArIHQpKSk7CisgICAgfQorICAgIHJldHVybiBjb3B5c2lnbih3LCB4KTsKKworfQorCisvKiBhdGFuaCh4KQorICogTWV0aG9kIDoKKyAqICAgIDEuUmVkdWNlZCB4IHRvIHBvc2l0aXZlIGJ5IGF0YW5oKC14KSA9IC1hdGFuaCh4KQorICogICAgMi5Gb3IgeD49MC41CisgKiAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgIDJ4ICAgICAgICAgICAgICAgICAgICAgICAgICB4CisgKiAgICAgIGF0YW5oKHgpID0gLS0tICogbG9nKDEgKyAtLS0tLS0tKSA9IDAuNSAqIGxvZzFwKDIgKiAtLS0tLS0tKQorICogICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgIDEgLSB4ICAgICAgICAgICAgICAgICAgICAgIDEgLSB4CisgKgorICogICAgICBGb3IgeDwwLjUKKyAqICAgICAgYXRhbmgoeCkgPSAwLjUqbG9nMXAoMngrMngqeC8oMS14KSkKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBhdGFuaCh4KSBpcyBOYU4gaWYgfHh8ID49IDEgd2l0aCBzaWduYWw7CisgKiAgICAgIGF0YW5oKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWw7CisgKgorICovCisKK2RvdWJsZQorX1B5X2F0YW5oKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSBhYnN4OworICAgIGRvdWJsZSB0OworCisgICAgaWYgKFB5X0lTX05BTih4KSkgeworICAgICAgICByZXR1cm4geCt4OworICAgIH0KKyAgICBhYnN4ID0gZmFicyh4KTsKKyAgICBpZiAoYWJzeCA+PSAxLikgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPj0gMSAqLworICAgICAgICBlcnJubyA9IEVET007CisjaWZkZWYgUHlfTkFOCisgICAgICAgIHJldHVybiBQeV9OQU47CisjZWxzZQorICAgICAgICByZXR1cm4geC96ZXJvOworI2VuZGlmCisgICAgfQorICAgIGlmIChhYnN4IDwgdHdvX3Bvd19tMjgpIHsgICAgICAgICAgIC8qIHx4fCA8IDIqKi0yOCAqLworICAgICAgICByZXR1cm4geDsKKyAgICB9CisgICAgaWYgKGFic3ggPCAwLjUpIHsgICAgICAgICAgICAgICAgICAgLyogfHh8IDwgMC41ICovCisgICAgICAgIHQgPSBhYnN4K2Fic3g7CisgICAgICAgIHQgPSAwLjUgKiBtX2xvZzFwKHQgKyB0KmFic3ggLyAoMS4wIC0gYWJzeCkpOworICAgIH0KKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwLjUgPD0gfHh8IDw9IDEuMCAqLworICAgICAgICB0ID0gMC41ICogbV9sb2cxcCgoYWJzeCArIGFic3gpIC8gKDEuMCAtIGFic3gpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvcHlzaWduKHQsIHgpOworfQorCisvKiBNYXRoZW1hdGljYWxseSwgZXhwbTEoeCkgPSBleHAoeCkgLSAxLiAgVGhlIGV4cG0xIGZ1bmN0aW9uIGlzIGRlc2lnbmVkCisgICB0byBhdm9pZCB0aGUgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24gdGhhdCBhcmlzZXMgZnJvbSBkaXJlY3QKKyAgIGV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gZXhwKHgpIC0gMSwgZm9yIHggbmVhciAwLiAqLworCitkb3VibGUKK19QeV9leHBtMShkb3VibGUgeCkKK3sKKyAgICAvKiBGb3IgYWJzKHgpID49IGxvZygyKSwgaXQncyBzYWZlIHRvIGV2YWx1YXRlIGV4cCh4KSAtIDEgZGlyZWN0bHk7IHRoaXMKKyAgICAgICBhbHNvIHdvcmtzIGZpbmUgZm9yIGluZmluaXRpZXMgYW5kIG5hbnMuCisKKyAgICAgICBGb3Igc21hbGxlciB4LCB3ZSBjYW4gdXNlIGEgbWV0aG9kIGR1ZSB0byBLYWhhbiB0aGF0IGFjaGlldmVzIGNsb3NlIHRvCisgICAgICAgZnVsbCBhY2N1cmFjeS4KKyAgICAqLworCisgICAgaWYgKGZhYnMoeCkgPCAwLjcpIHsKKyAgICAgICAgZG91YmxlIHU7CisgICAgICAgIHUgPSBleHAoeCk7CisgICAgICAgIGlmICh1ID09IDEuMCkKKyAgICAgICAgICAgIHJldHVybiB4OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gKHUgLSAxLjApICogeCAvIGxvZyh1KTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gZXhwKHgpIC0gMS4wOworfQorCisvKiBsb2cxcCh4KSA9IGxvZygxK3gpLiAgVGhlIGxvZzFwIGZ1bmN0aW9uIGlzIGRlc2lnbmVkIHRvIGF2b2lkIHRoZQorICAgc2lnbmlmaWNhbnQgbG9zcyBvZiBwcmVjaXNpb24gdGhhdCBhcmlzZXMgZnJvbSBkaXJlY3QgZXZhbHVhdGlvbiB3aGVuIHggaXMKKyAgIHNtYWxsLiAqLworCitkb3VibGUKK19QeV9sb2cxcChkb3VibGUgeCkKK3sKKyAgICAvKiBGb3IgeCBzbWFsbCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guICBMZXQgeSBiZSB0aGUgbmVhcmVzdCBmbG9hdAorICAgICAgIHRvIDEreCwgdGhlbgorCisgICAgICAgICAxK3ggPSB5ICogKDEgLSAoeS0xLXgpL3kpCisKKyAgICAgICBzbyBsb2coMSt4KSA9IGxvZyh5KSArIGxvZygxLSh5LTEteCkveSkuICBTaW5jZSAoeS0xLXgpL3kgaXMgdGlueSwgdGhlCisgICAgICAgc2Vjb25kIHRlcm0gaXMgd2VsbCBhcHByb3hpbWF0ZWQgYnkgKHktMS14KS95LiAgSWYgYWJzKHgpID49CisgICAgICAgREJMX0VQU0lMT04vMiBvciB0aGUgcm91bmRpbmctbW9kZSBpcyBzb21lIGZvcm0gb2Ygcm91bmQtdG8tbmVhcmVzdAorICAgICAgIHRoZW4geS0xLXggd2lsbCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUsIGFuZCBpcyBjb21wdXRlZCBleGFjdGx5IGJ5CisgICAgICAgKHktMSkteC4KKworICAgICAgIElmIGFicyh4KSA8IERCTF9FUFNJTE9OLzIgYW5kIHRoZSByb3VuZGluZyBtb2RlIGlzIG5vdCBrbm93biB0byBiZQorICAgICAgIHJvdW5kLXRvLW5lYXJlc3QgdGhlbiB0aGlzIG1ldGhvZCBpcyBzbGlnaHRseSBkYW5nZXJvdXM6IDEreCBjb3VsZCBiZQorICAgICAgIHJvdW5kZWQgdXAgdG8gMStEQkxfRVBTSUxPTiBpbnN0ZWFkIG9mIGRvd24gdG8gMSwgYW5kIGluIHRoYXQgY2FzZQorICAgICAgIHktMS14IHdpbGwgbm90IGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhbnkgbW9yZSBhbmQgdGhlIHJlc3VsdCBjYW4gYmUKKyAgICAgICBvZmYgYnkgbWFueSB1bHBzLiAgQnV0IHRoaXMgaXMgZWFzaWx5IGZpeGVkOiBmb3IgYSBmbG9hdGluZy1wb2ludAorICAgICAgIG51bWJlciB8eHwgPCBEQkxfRVBTSUxPTi8yLiwgdGhlIGNsb3Nlc3QgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvCisgICAgICAgbG9nKDEreCkgaXMgZXhhY3RseSB4LgorICAgICovCisKKyAgICBkb3VibGUgeTsKKyAgICBpZiAoZmFicyh4KSA8IERCTF9FUFNJTE9OLzIuKSB7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKyAgICBlbHNlIGlmICgtMC41IDw9IHggJiYgeCA8PSAxLikgeworICAgICAgICAvKiBXQVJOSU5HOiBpdCdzIHBvc3NpYmxlIHRoYW4gYW4gb3ZlcmVhZ2VyIGNvbXBpbGVyCisgICAgICAgICAgIHdpbGwgaW5jb3JyZWN0bHkgb3B0aW1pemUgdGhlIGZvbGxvd2luZyB0d28gbGluZXMKKyAgICAgICAgICAgdG8gdGhlIGVxdWl2YWxlbnQgb2YgInJldHVybiBsb2coMS4reCkiLiBJZiB0aGlzCisgICAgICAgICAgIGhhcHBlbnMsIHRoZW4gcmVzdWx0cyBmcm9tIGxvZzFwIHdpbGwgYmUgaW5hY2N1cmF0ZQorICAgICAgICAgICBmb3Igc21hbGwgeC4gKi8KKyAgICAgICAgeSA9IDEuK3g7CisgICAgICAgIHJldHVybiBsb2coeSktKCh5LTEuKS14KS95OworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogTmFOcyBhbmQgaW5maW5pdGllcyBzaG91bGQgZW5kIHVwIGhlcmUgKi8KKyAgICAgICAgcmV0dXJuIGxvZygxLit4KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tYXRoLmggYi9Nb2R1bGVzL19tYXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBjZWVjZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX21hdGguaApAQCAtMCwwICsxLDQ1IEBACitkb3VibGUgX1B5X2Fjb3NoKGRvdWJsZSB4KTsKK2RvdWJsZSBfUHlfYXNpbmgoZG91YmxlIHgpOworZG91YmxlIF9QeV9hdGFuaChkb3VibGUgeCk7Citkb3VibGUgX1B5X2V4cG0xKGRvdWJsZSB4KTsKK2RvdWJsZSBfUHlfbG9nMXAoZG91YmxlIHgpOworCisjaWZkZWYgSEFWRV9BQ09TSAorI2RlZmluZSBtX2Fjb3NoIGFjb3NoCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgYWNvc2gsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fYWNvc2ggX1B5X2Fjb3NoCisjZW5kaWYKKworI2lmZGVmIEhBVkVfQVNJTkgKKyNkZWZpbmUgbV9hc2luaCBhc2luaAorI2Vsc2UKKy8qIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGFzaW5oLCB1c2UgdGhlIHN1YnN0aXR1dGUKKyAgIGZ1bmN0aW9uIGRlZmluZWQgaW4gTW9kdWxlcy9fbWF0aC5jLiAqLworI2RlZmluZSBtX2FzaW5oIF9QeV9hc2luaAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0FUQU5ICisjZGVmaW5lIG1fYXRhbmggYXRhbmgKKyNlbHNlCisvKiBpZiB0aGUgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhdGFuaCwgdXNlIHRoZSBzdWJzdGl0dXRlCisgICBmdW5jdGlvbiBkZWZpbmVkIGluIE1vZHVsZXMvX21hdGguYy4gKi8KKyNkZWZpbmUgbV9hdGFuaCBfUHlfYXRhbmgKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9FWFBNMQorI2RlZmluZSBtX2V4cG0xIGV4cG0xCisjZWxzZQorLyogaWYgdGhlIHN5c3RlbSBkb2Vzbid0IGhhdmUgZXhwbTEsIHVzZSB0aGUgc3Vic3RpdHV0ZQorICAgZnVuY3Rpb24gZGVmaW5lZCBpbiBNb2R1bGVzL19tYXRoLmMuICovCisjZGVmaW5lIG1fZXhwbTEgX1B5X2V4cG0xCisjZW5kaWYKKworI2lmZGVmIEhBVkVfTE9HMVAKKyNkZWZpbmUgbV9sb2cxcCBsb2cxcAorI2Vsc2UKKy8qIGlmIHRoZSBzeXN0ZW0gZG9lc24ndCBoYXZlIGxvZzFwLCB1c2UgdGhlIHN1YnN0aXR1dGUKKyAgIGZ1bmN0aW9uIGRlZmluZWQgaW4gTW9kdWxlcy9fbWF0aC5jLiAqLworI2RlZmluZSBtX2xvZzFwIF9QeV9sb2cxcAorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmggYi9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKaW5kZXggYzE0OTYzNC4uMTQ0MjVkZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCisrKyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaApAQCAtMyw2ICszLDEyIEBACiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCisjaWZkZWYgX19zdW4KKy8qIFRoZSBjb250cm9sIG1lc3NhZ2UgQVBJIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFNvbGFyaXMgCisgICBpZiBYUEcgNC4yIG9yIGxhdGVyIGlzIHJlcXVlc3RlZC4gKi8KKyNkZWZpbmUgX1hPUEVOX1NPVVJDRSA1MDAKKyNlbmRpZgorCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3BpY2tsZS5jIGIvTW9kdWxlcy9fcGlja2xlLmMKaW5kZXggNTEwMmUyNC4uZTEzZDg3NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fcGlja2xlLmMKKysrIGIvTW9kdWxlcy9fcGlja2xlLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAgICBERUZBVUxUX1BST1RPQ09MID0gMwogfTsKIAotCiAvKiBQaWNrbGUgb3Bjb2Rlcy4gVGhlc2UgbXVzdCBiZSBrZXB0IHVwZGF0ZWQgd2l0aCBwaWNrbGUucHkuCiAgICBFeHRlbnNpdmUgZG9jcyBhcmUgaW4gcGlja2xldG9vbHMucHkuICovCiBlbnVtIG9wY29kZSB7CkBAIC03Miw3ICs3MSw3IEBACiAKICAgICAvKiBQcm90b2NvbCAzIChQeXRob24gMy54KSAqLwogICAgIEJJTkJZVEVTICAgICAgID0gJ0InLAotICAgIFNIT1JUX0JJTkJZVEVTID0gJ0MnLAorICAgIFNIT1JUX0JJTkJZVEVTID0gJ0MnCiB9OwogCiAvKiBUaGVzZSBhcmVuJ3Qgb3Bjb2RlcyAtLSB0aGV5J3JlIHdheXMgdG8gcGlja2xlIGJvb2xzIGJlZm9yZSBwcm90b2NvbCAyCkBAIC05Niw5ICs5NSwxNSBAQAogICAgICAgIGNoZWNraW5nIGZvciBzZWxmLXJlZmVyZW50aWFsIGRhdGEtc3RydWN0dXJlcy4gKi8KICAgICBGQVNUX05FU1RJTkdfTElNSVQgPSA1MCwKIAotICAgIC8qIFNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyLiBIaWdoZXIgdmFsdWVzIHdpbGwgcmVkdWNlIHRoZQotICAgICAgIG51bWJlciBvZiBjYWxscyB0byB0aGUgd3JpdGUoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0uICovCi0gICAgV1JJVEVfQlVGX1NJWkUgPSAyNTYsCisgICAgLyogSW5pdGlhbCBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlci4gKi8KKyAgICBXUklURV9CVUZfU0laRSA9IDQwOTYsCisKKyAgICAvKiBNYXhpbXVtIHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlciBvZiBQaWNrbGVyIHdoZW4gcGlja2xpbmcgdG8gYQorICAgICAgIHN0cmVhbS4gIFRoaXMgaXMgaWdub3JlZCBmb3IgaW4tbWVtb3J5IHBpY2tsaW5nLiAqLworICAgIE1BWF9XUklURV9CVUZfU0laRSA9IDY0ICogMTAyNCwKKworICAgIC8qIFByZWZldGNoIHNpemUgd2hlbiB1bnBpY2tsaW5nIChkaXNhYmxlZCBvbiB1bnBlZWthYmxlIHN0cmVhbXMpICovCisgICAgUFJFRkVUQ0ggPSA4MTkyICogMTYKIH07CiAKIC8qIEV4Y2VwdGlvbiBjbGFzc2VzIGZvciBwaWNrbGUuIFRoZXNlIHNob3VsZCBvdmVycmlkZSB0aGUgb25lcyBkZWZpbmVkIGluCkBAIC0xNDAsMjMgKzE0NSwxOSBAQAogCiAvKiBJbnRlcm5hbCBkYXRhIHR5cGUgdXNlZCBhcyB0aGUgdW5waWNrbGluZyBzdGFjay4gKi8KIHR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgaW50IGxlbmd0aDsgICAvKiBudW1iZXIgb2YgaW5pdGlhbCBzbG90cyBpbiBkYXRhIGN1cnJlbnRseSB1c2VkICovCi0gICAgaW50IHNpemU7ICAgICAvKiBudW1iZXIgb2Ygc2xvdHMgaW4gZGF0YSBhbGxvY2F0ZWQgKi8KKyAgICBQeU9iamVjdF9WQVJfSEVBRAogICAgIFB5T2JqZWN0ICoqZGF0YTsKKyAgICBQeV9zc2l6ZV90IGFsbG9jYXRlZDsgIC8qIG51bWJlciBvZiBzbG90cyBpbiBkYXRhIGFsbG9jYXRlZCAqLwogfSBQZGF0YTsKIAogc3RhdGljIHZvaWQKIFBkYXRhX2RlYWxsb2MoUGRhdGEgKnNlbGYpCiB7Ci0gICAgaW50IGk7Ci0gICAgUHlPYmplY3QgKipwOwotCi0gICAgZm9yIChpID0gc2VsZi0+bGVuZ3RoLCBwID0gc2VsZi0+ZGF0YTsgLS1pID49IDA7IHArKykgewotICAgICAgICBQeV9ERUNSRUYoKnApOworICAgIGludCBpID0gUHlfU0laRShzZWxmKTsKKyAgICB3aGlsZSAoLS1pID49IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYtPmRhdGFbaV0pOwogICAgIH0KLSAgICBpZiAoc2VsZi0+ZGF0YSkKLSAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5kYXRhKTsKKyAgICBQeU1lbV9GUkVFKHNlbGYtPmRhdGEpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtMTc1LDkgKzE3Niw5IEBACiAKICAgICBpZiAoIShzZWxmID0gUHlPYmplY3RfTmV3KFBkYXRhLCAmUGRhdGFfVHlwZSkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzZWxmLT5zaXplID0gODsKLSAgICBzZWxmLT5sZW5ndGggPSAwOwotICAgIHNlbGYtPmRhdGEgPSBQeU1lbV9NYWxsb2Moc2VsZi0+c2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgUHlfU0laRShzZWxmKSA9IDA7CisgICAgc2VsZi0+YWxsb2NhdGVkID0gODsKKyAgICBzZWxmLT5kYXRhID0gUHlNZW1fTUFMTE9DKHNlbGYtPmFsbG9jYXRlZCAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgaWYgKHNlbGYtPmRhdGEpCiAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwogICAgIFB5X0RFQ1JFRihzZWxmKTsKQEAgLTE5MSw0MiArMTkyLDQwIEBACiBzdGF0aWMgaW50CiBQZGF0YV9jbGVhcihQZGF0YSAqc2VsZiwgaW50IGNsZWFydG8pCiB7Ci0gICAgaW50IGk7Ci0gICAgUHlPYmplY3QgKipwOworICAgIGludCBpID0gUHlfU0laRShzZWxmKTsKIAogICAgIGlmIChjbGVhcnRvIDwgMCkKICAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOwotICAgIGlmIChjbGVhcnRvID49IHNlbGYtPmxlbmd0aCkKKyAgICBpZiAoY2xlYXJ0byA+PSBpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGZvciAoaSA9IHNlbGYtPmxlbmd0aCwgcCA9IHNlbGYtPmRhdGEgKyBjbGVhcnRvOyAtLWkgPj0gY2xlYXJ0bzsgcCsrKSB7Ci0gICAgICAgIFB5X0NMRUFSKCpwKTsKKyAgICB3aGlsZSAoLS1pID49IGNsZWFydG8pIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+ZGF0YVtpXSk7CiAgICAgfQotICAgIHNlbGYtPmxlbmd0aCA9IGNsZWFydG87Ci0KKyAgICBQeV9TSVpFKHNlbGYpID0gY2xlYXJ0bzsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogUGRhdGFfZ3JvdyhQZGF0YSAqc2VsZikKIHsKLSAgICBpbnQgYmlnZ2VyOwotICAgIHNpemVfdCBuYnl0ZXM7Ci0gICAgUHlPYmplY3QgKip0bXA7CisgICAgUHlPYmplY3QgKipkYXRhID0gc2VsZi0+ZGF0YTsKKyAgICBQeV9zc2l6ZV90IGFsbG9jYXRlZCA9IHNlbGYtPmFsbG9jYXRlZDsKKyAgICBQeV9zc2l6ZV90IG5ld19hbGxvY2F0ZWQ7CiAKLSAgICBiaWdnZXIgPSAoc2VsZi0+c2l6ZSA8PCAxKSArIDE7Ci0gICAgaWYgKGJpZ2dlciA8PSAwKSAgICAgICAgICAgIC8qIHdhcyAwLCBvciBuZXcgdmFsdWUgb3ZlcmZsb3dzICovCisgICAgbmV3X2FsbG9jYXRlZCA9IChhbGxvY2F0ZWQgPj4gMykgKyA2OworICAgIC8qIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93ICovCisgICAgaWYgKG5ld19hbGxvY2F0ZWQgPiBQWV9TU0laRV9UX01BWCAtIGFsbG9jYXRlZCkKICAgICAgICAgZ290byBub21lbW9yeTsKLSAgICBpZiAoKGludCkoc2l6ZV90KWJpZ2dlciAhPSBiaWdnZXIpCisgICAgbmV3X2FsbG9jYXRlZCArPSBhbGxvY2F0ZWQ7CisgICAgaWYgKG5ld19hbGxvY2F0ZWQgPiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoUHlPYmplY3QgKikpKQogICAgICAgICBnb3RvIG5vbWVtb3J5OwotICAgIG5ieXRlcyA9IChzaXplX3QpYmlnZ2VyICogc2l6ZW9mKFB5T2JqZWN0ICopOwotICAgIGlmIChuYnl0ZXMgLyBzaXplb2YoUHlPYmplY3QgKikgIT0gKHNpemVfdCliaWdnZXIpCisgICAgZGF0YSA9IFB5TWVtX1JFQUxMT0MoZGF0YSwgbmV3X2FsbG9jYXRlZCAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgaWYgKGRhdGEgPT0gTlVMTCkKICAgICAgICAgZ290byBub21lbW9yeTsKLSAgICB0bXAgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmRhdGEsIG5ieXRlcyk7Ci0gICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICBnb3RvIG5vbWVtb3J5OwotICAgIHNlbGYtPmRhdGEgPSB0bXA7Ci0gICAgc2VsZi0+c2l6ZSA9IGJpZ2dlcjsKKworICAgIHNlbGYtPmRhdGEgPSBkYXRhOworICAgIHNlbGYtPmFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CiAgICAgcmV0dXJuIDA7CiAKICAgbm9tZW1vcnk6CkBAIC0yNDEsMjEgKzI0MCwyMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIFBkYXRhX3BvcChQZGF0YSAqc2VsZikKIHsKLSAgICBpZiAoc2VsZi0+bGVuZ3RoID09IDApIHsKKyAgICBpZiAoUHlfU0laRShzZWxmKSA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJiYWQgcGlja2xlIGRhdGEiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBzZWxmLT5kYXRhWy0tKHNlbGYtPmxlbmd0aCldOworICAgIHJldHVybiBzZWxmLT5kYXRhWy0tUHlfU0laRShzZWxmKV07CiB9CiAjZGVmaW5lIFBEQVRBX1BPUChELCBWKSBkbyB7IChWKSA9IFBkYXRhX3BvcCgoRCkpOyB9IHdoaWxlICgwKQogCiBzdGF0aWMgaW50CiBQZGF0YV9wdXNoKFBkYXRhICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIGlmIChzZWxmLT5sZW5ndGggPT0gc2VsZi0+c2l6ZSAmJiBQZGF0YV9ncm93KHNlbGYpIDwgMCkgeworICAgIGlmIChQeV9TSVpFKHNlbGYpID09IHNlbGYtPmFsbG9jYXRlZCAmJiBQZGF0YV9ncm93KHNlbGYpIDwgMCkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHNlbGYtPmRhdGFbc2VsZi0+bGVuZ3RoKytdID0gb2JqOworICAgIHNlbGYtPmRhdGFbUHlfU0laRShzZWxmKSsrXSA9IG9iajsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMjc0LDE0ICsyNzMsMTQgQEAKICAgICBQeU9iamVjdCAqdHVwbGU7CiAgICAgUHlfc3NpemVfdCBsZW4sIGksIGo7CiAKLSAgICBsZW4gPSBzZWxmLT5sZW5ndGggLSBzdGFydDsKKyAgICBsZW4gPSBQeV9TSVpFKHNlbGYpIC0gc3RhcnQ7CiAgICAgdHVwbGUgPSBQeVR1cGxlX05ldyhsZW4pOwogICAgIGlmICh0dXBsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGogPCBsZW47IGkrKywgaisrKQogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cGxlLCBqLCBzZWxmLT5kYXRhW2ldKTsKIAotICAgIHNlbGYtPmxlbmd0aCA9IHN0YXJ0OworICAgIFB5X1NJWkUoc2VsZikgPSBzdGFydDsKICAgICByZXR1cm4gdHVwbGU7CiB9CiAKQEAgLTI5MSwzMSArMjkwLDQ1IEBACiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgUHlfc3NpemVfdCBsZW4sIGksIGo7CiAKLSAgICBsZW4gPSBzZWxmLT5sZW5ndGggLSBzdGFydDsKKyAgICBsZW4gPSBQeV9TSVpFKHNlbGYpIC0gc3RhcnQ7CiAgICAgbGlzdCA9IFB5TGlzdF9OZXcobGVuKTsKICAgICBpZiAobGlzdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSBzdGFydCwgaiA9IDA7IGogPCBsZW47IGkrKywgaisrKQogICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgaiwgc2VsZi0+ZGF0YVtpXSk7CiAKLSAgICBzZWxmLT5sZW5ndGggPSBzdGFydDsKKyAgICBQeV9TSVpFKHNlbGYpID0gc3RhcnQ7CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdCAqbWVfa2V5OworICAgIGxvbmcgbWVfdmFsdWU7Cit9IFB5TWVtb0VudHJ5OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfc3NpemVfdCBtdF9tYXNrOworICAgIFB5X3NzaXplX3QgbXRfdXNlZDsKKyAgICBQeV9zc2l6ZV90IG10X2FsbG9jYXRlZDsKKyAgICBQeU1lbW9FbnRyeSAqbXRfdGFibGU7Cit9IFB5TWVtb1RhYmxlOworCiB0eXBlZGVmIHN0cnVjdCBQaWNrbGVyT2JqZWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgUHlPYmplY3QgKndyaXRlOyAgICAgICAgICAgIC8qIHdyaXRlKCkgbWV0aG9kIG9mIHRoZSBvdXRwdXQgc3RyZWFtICovCi0gICAgUHlPYmplY3QgKm1lbW87ICAgICAgICAgICAgIC8qIE1lbW8gZGljdGlvbmFyeSwga2VlcCB0cmFjayBvZiB0aGUgc2VlbgorICAgIFB5TWVtb1RhYmxlICptZW1vOyAgICAgICAgICAvKiBNZW1vIHRhYmxlLCBrZWVwIHRyYWNrIG9mIHRoZSBzZWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdHMgdG8gc3VwcG9ydCBzZWxmLXJlZmVyZW50aWFsIG9iamVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xpbmcuICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGluZy4gKi8KICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9pZCgpIG1ldGhvZCwgY2FuIGJlIE5VTEwgKi8KICAgICBQeU9iamVjdCAqYXJnOworCisgICAgUHlPYmplY3QgKndyaXRlOyAgICAgICAgICAgIC8qIHdyaXRlKCkgbWV0aG9kIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLworICAgIFB5T2JqZWN0ICpvdXRwdXRfYnVmZmVyOyAgICAvKiBXcml0ZSBpbnRvIGEgbG9jYWwgYnl0ZWFycmF5IGJ1ZmZlciBiZWZvcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hpbmcgdG8gdGhlIHN0cmVhbS4gKi8KKyAgICBQeV9zc2l6ZV90IG91dHB1dF9sZW47ICAgICAgLyogTGVuZ3RoIG9mIG91dHB1dF9idWZmZXIuICovCisgICAgUHlfc3NpemVfdCBtYXhfb3V0cHV0X2xlbjsgIC8qIEFsbG9jYXRpb24gc2l6ZSBvZiBvdXRwdXRfYnVmZmVyLiAqLwogICAgIGludCBwcm90bzsgICAgICAgICAgICAgICAgICAvKiBQaWNrbGUgcHJvdG9jb2wgbnVtYmVyLCA+PSAwICovCiAgICAgaW50IGJpbjsgICAgICAgICAgICAgICAgICAgIC8qIEJvb2xlYW4sIHRydWUgaWYgcHJvdG8gPiAwICovCiAgICAgaW50IGJ1Zl9zaXplOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyZWQgcGlja2xlIGRhdGEgKi8KLSAgICBjaGFyICp3cml0ZV9idWY7ICAgICAgICAgICAgLyogV3JpdGUgYnVmZmVyLCB0aGlzIGlzIHRvIGF2b2lkIGNhbGxpbmcgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCkgbWV0aG9kIG9mIHRoZSBvdXRwdXQgc3RyZWFtIHRvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZnRlbi4gKi8KICAgICBpbnQgZmFzdDsgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIGZhc3QgbW9kZSBpZiBzZXQgdG8gYSB0cnVlIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmFzdCBtb2RlIGRpc2FibGUgdGhlIHVzYWdlIG9mIG1lbW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlZm9yZSBzcGVlZGluZyB0aGUgcGlja2xpbmcgcHJvY2VzcyBieQpAQCAtMzMxLDE1ICszNDQsMjUgQEAKIHR5cGVkZWYgc3RydWN0IFVucGlja2xlck9iamVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFBkYXRhICpzdGFjazsgICAgICAgICAgICAgICAvKiBQaWNrbGUgZGF0YSBzdGFjaywgc3RvcmUgdW5waWNrbGVkIG9iamVjdHMuICovCi0gICAgUHlPYmplY3QgKnJlYWRsaW5lOyAgICAgICAgIC8qIHJlYWRsaW5lKCkgbWV0aG9kIG9mIHRoZSBvdXRwdXQgc3RyZWFtICovCi0gICAgUHlPYmplY3QgKnJlYWQ7ICAgICAgICAgICAgIC8qIHJlYWQoKSBtZXRob2Qgb2YgdGhlIG91dHB1dCBzdHJlYW0gKi8KLSAgICBQeU9iamVjdCAqbWVtbzsgICAgICAgICAgICAgLyogTWVtbyBkaWN0aW9uYXJ5LCBwcm92aWRlIHRoZSBvYmplY3RzIHN0b3JlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2luZyB0aGUgUFVUIG9wY29kZXMuICovCisKKyAgICAvKiBUaGUgdW5waWNrbGVyIG1lbW8gaXMganVzdCBhbiBhcnJheSBvZiBQeU9iamVjdCAqcy4gVXNpbmcgYSBkaWN0CisgICAgICAgaXMgdW5uZWNlc3NhcnksIHNpbmNlIHRoZSBrZXlzIGFyZSBjb250aWd1b3VzIGludHMuICovCisgICAgUHlPYmplY3QgKiptZW1vOworICAgIFB5X3NzaXplX3QgbWVtb19zaXplOworCiAgICAgUHlPYmplY3QgKmFyZzsKICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9sb2FkKCkgbWV0aG9kLCBjYW4gYmUgTlVMTC4gKi8KLSAgICBQeU9iamVjdCAqbGFzdF9zdHJpbmc7ICAgICAgLyogUmVmZXJlbmNlIHRvIHRoZSBsYXN0IHN0cmluZyByZWFkIGJ5IHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZSgpIG1ldGhvZC4gICovCi0gICAgY2hhciAqYnVmZmVyOyAgICAgICAgICAgICAgIC8qIFJlYWRpbmcgYnVmZmVyLiAqLworCisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKKyAgICBjaGFyICppbnB1dF9idWZmZXI7CisgICAgY2hhciAqaW5wdXRfbGluZTsKKyAgICBQeV9zc2l6ZV90IGlucHV0X2xlbjsKKyAgICBQeV9zc2l6ZV90IG5leHRfcmVhZF9pZHg7CisgICAgUHlfc3NpemVfdCBwcmVmZXRjaGVkX2lkeDsgIC8qIGluZGV4IG9mIGZpcnN0IHByZWZldGNoZWQgYnl0ZSAqLworICAgIFB5T2JqZWN0ICpyZWFkOyAgICAgICAgICAgICAvKiByZWFkKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCisgICAgUHlPYmplY3QgKnJlYWRsaW5lOyAgICAgICAgIC8qIHJlYWRsaW5lKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCisgICAgUHlPYmplY3QgKnBlZWs7ICAgICAgICAgICAgIC8qIHBlZWsoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbSwgb3IgTlVMTCAqLworCiAgICAgY2hhciAqZW5jb2Rpbmc7ICAgICAgICAgICAgIC8qIE5hbWUgb2YgdGhlIGVuY29kaW5nIHRvIGJlIHVzZWQgZm9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kaW5nIHN0cmluZ3MgcGlja2xlZCB1c2luZyBQeXRob24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi54LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAiQVNDSUkiICovCkBAIC0zNjIsOSArMzg1LDIzMCBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBVbnBpY2tsZXJfVHlwZTsKIAogCi0vKiBIZWxwZXJzIGZvciBjcmVhdGluZyB0aGUgYXJndW1lbnQgdHVwbGUgcGFzc2VkIHRvIGZ1bmN0aW9ucy4gVGhpcyBoYXMgdGhlCi0gICBwZXJmb3JtYW5jZSBhZHZhbnRhZ2Ugb2YgY2FsbGluZyBQeVR1cGxlX05ldygpIG9ubHkgb25jZS4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgQSBjdXN0b20gaGFzaHRhYmxlIG1hcHBpbmcgdm9pZCogdG8gbG9uZ3MuIFRoaXMgaXMgdXNlZCBieSB0aGUgcGlja2xlciBmb3IKKyBtZW1vaXphdGlvbi4gVXNpbmcgYSBjdXN0b20gaGFzaHRhYmxlIHJhdGhlciB0aGFuIFB5RGljdCBhbGxvd3MgdXMgdG8gc2tpcAorIGEgYnVuY2ggb2YgdW5uZWNlc3Nhcnkgb2JqZWN0IGNyZWF0aW9uLiBUaGlzIG1ha2VzIGEgaHVnZSBwZXJmb3JtYW5jZQorIGRpZmZlcmVuY2UuICovCiAKKyNkZWZpbmUgTVRfTUlOU0laRSA4CisjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQorCisKK3N0YXRpYyBQeU1lbW9UYWJsZSAqCitQeU1lbW9UYWJsZV9OZXcodm9pZCkKK3sKKyAgICBQeU1lbW9UYWJsZSAqbWVtbyA9IFB5TWVtX01BTExPQyhzaXplb2YoUHlNZW1vVGFibGUpKTsKKyAgICBpZiAobWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG1lbW8tPm10X3VzZWQgPSAwOworICAgIG1lbW8tPm10X2FsbG9jYXRlZCA9IE1UX01JTlNJWkU7CisgICAgbWVtby0+bXRfbWFzayA9IE1UX01JTlNJWkUgLSAxOworICAgIG1lbW8tPm10X3RhYmxlID0gUHlNZW1fTUFMTE9DKE1UX01JTlNJWkUgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKKyAgICBpZiAobWVtby0+bXRfdGFibGUgPT0gTlVMTCkgeworICAgICAgICBQeU1lbV9GUkVFKG1lbW8pOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KG1lbW8tPm10X3RhYmxlLCAwLCBNVF9NSU5TSVpFICogc2l6ZW9mKFB5TWVtb0VudHJ5KSk7CisKKyAgICByZXR1cm4gbWVtbzsKK30KKworc3RhdGljIFB5TWVtb1RhYmxlICoKK1B5TWVtb1RhYmxlX0NvcHkoUHlNZW1vVGFibGUgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIFB5TWVtb1RhYmxlICpuZXcgPSBQeU1lbW9UYWJsZV9OZXcoKTsKKyAgICBpZiAobmV3ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbmV3LT5tdF91c2VkID0gc2VsZi0+bXRfdXNlZDsKKyAgICBuZXctPm10X2FsbG9jYXRlZCA9IHNlbGYtPm10X2FsbG9jYXRlZDsKKyAgICBuZXctPm10X21hc2sgPSBzZWxmLT5tdF9tYXNrOworICAgIC8qIFRoZSB0YWJsZSB3ZSBnZXQgZnJvbSBfTmV3KCkgaXMgcHJvYmFibHkgc21hbGxlciB0aGFuIHdlIHdhbnRlZC4KKyAgICAgICBGcmVlIGl0IGFuZCBhbGxvY2F0ZSBvbmUgdGhhdCdzIHRoZSByaWdodCBzaXplLiAqLworICAgIFB5TWVtX0ZSRUUobmV3LT5tdF90YWJsZSk7CisgICAgbmV3LT5tdF90YWJsZSA9IFB5TWVtX01BTExPQyhzZWxmLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKKyAgICBpZiAobmV3LT5tdF90YWJsZSA9PSBOVUxMKSB7CisgICAgICAgIFB5TWVtX0ZSRUUobmV3KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBzZWxmLT5tdF9hbGxvY2F0ZWQ7IGkrKykgeworICAgICAgICBQeV9YSU5DUkVGKHNlbGYtPm10X3RhYmxlW2ldLm1lX2tleSk7CisgICAgfQorICAgIG1lbWNweShuZXctPm10X3RhYmxlLCBzZWxmLT5tdF90YWJsZSwKKyAgICAgICAgICAgc2l6ZW9mKFB5TWVtb0VudHJ5KSAqIHNlbGYtPm10X2FsbG9jYXRlZCk7CisKKyAgICByZXR1cm4gbmV3OworfQorCitzdGF0aWMgUHlfc3NpemVfdAorUHlNZW1vVGFibGVfU2l6ZShQeU1lbW9UYWJsZSAqc2VsZikKK3sKKyAgICByZXR1cm4gc2VsZi0+bXRfdXNlZDsKK30KKworc3RhdGljIGludAorUHlNZW1vVGFibGVfQ2xlYXIoUHlNZW1vVGFibGUgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBpID0gc2VsZi0+bXRfYWxsb2NhdGVkOworCisgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgICAgIFB5X1hERUNSRUYoc2VsZi0+bXRfdGFibGVbaV0ubWVfa2V5KTsKKyAgICB9CisgICAgc2VsZi0+bXRfdXNlZCA9IDA7CisgICAgbWVtc2V0KHNlbGYtPm10X3RhYmxlLCAwLCBzZWxmLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK1B5TWVtb1RhYmxlX0RlbChQeU1lbW9UYWJsZSAqc2VsZikKK3sKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZik7CisKKyAgICBQeU1lbV9GUkVFKHNlbGYtPm10X3RhYmxlKTsKKyAgICBQeU1lbV9GUkVFKHNlbGYpOworfQorCisvKiBTaW5jZSBlbnRyaWVzIGNhbm5vdCBiZSBkZWxldGVkIGZyb20gdGhpcyBoYXNodGFibGUsIF9QeU1lbW9UYWJsZV9Mb29rdXAoKQorICAgY2FuIGJlIGNvbnNpZGVyYWJseSBzaW1wbGVyIHRoYW4gZGljdG9iamVjdC5jJ3MgbG9va2RpY3QoKS4gKi8KK3N0YXRpYyBQeU1lbW9FbnRyeSAqCitfUHlNZW1vVGFibGVfTG9va3VwKFB5TWVtb1RhYmxlICpzZWxmLCBQeU9iamVjdCAqa2V5KQoreworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIHNpemVfdCBtYXNrID0gKHNpemVfdClzZWxmLT5tdF9tYXNrOworICAgIFB5TWVtb0VudHJ5ICp0YWJsZSA9IHNlbGYtPm10X3RhYmxlOworICAgIFB5TWVtb0VudHJ5ICplbnRyeTsKKyAgICBQeV9oYXNoX3QgaGFzaCA9IChQeV9oYXNoX3Qpa2V5ID4+IDM7CisKKyAgICBpID0gaGFzaCAmIG1hc2s7CisgICAgZW50cnkgPSAmdGFibGVbaV07CisgICAgaWYgKGVudHJ5LT5tZV9rZXkgPT0gTlVMTCB8fCBlbnRyeS0+bWVfa2V5ID09IGtleSkKKyAgICAgICAgcmV0dXJuIGVudHJ5OworCisgICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7CisgICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPm1lX2tleSA9PSBOVUxMIHx8IGVudHJ5LT5tZV9rZXkgPT0ga2V5KQorICAgICAgICAgICAgcmV0dXJuIGVudHJ5OworICAgIH0KKyAgICBhc3NlcnQoMCk7ICAvKiBOZXZlciByZWFjaGVkICovCisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGludAorX1B5TWVtb1RhYmxlX1Jlc2l6ZVRhYmxlKFB5TWVtb1RhYmxlICpzZWxmLCBQeV9zc2l6ZV90IG1pbl9zaXplKQoreworICAgIFB5TWVtb0VudHJ5ICpvbGR0YWJsZSA9IE5VTEw7CisgICAgUHlNZW1vRW50cnkgKm9sZGVudHJ5LCAqbmV3ZW50cnk7CisgICAgUHlfc3NpemVfdCBuZXdfc2l6ZSA9IE1UX01JTlNJWkU7CisgICAgUHlfc3NpemVfdCB0b19wcm9jZXNzOworCisgICAgYXNzZXJ0KG1pbl9zaXplID4gMCk7CisKKyAgICAvKiBGaW5kIHRoZSBzbWFsbGVzdCB2YWxpZCB0YWJsZSBzaXplID49IG1pbl9zaXplLiAqLworICAgIHdoaWxlIChuZXdfc2l6ZSA8IG1pbl9zaXplICYmIG5ld19zaXplID4gMCkKKyAgICAgICAgbmV3X3NpemUgPDw9IDE7CisgICAgaWYgKG5ld19zaXplIDw9IDApIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAvKiBuZXdfc2l6ZSBuZWVkcyB0byBiZSBhIHBvd2VyIG9mIHR3by4gKi8KKyAgICBhc3NlcnQoKG5ld19zaXplICYgKG5ld19zaXplIC0gMSkpID09IDApOworCisgICAgLyogQWxsb2NhdGUgbmV3IHRhYmxlLiAqLworICAgIG9sZHRhYmxlID0gc2VsZi0+bXRfdGFibGU7CisgICAgc2VsZi0+bXRfdGFibGUgPSBQeU1lbV9NQUxMT0MobmV3X3NpemUgKiBzaXplb2YoUHlNZW1vRW50cnkpKTsKKyAgICBpZiAoc2VsZi0+bXRfdGFibGUgPT0gTlVMTCkgeworICAgICAgICBQeU1lbV9GUkVFKG9sZHRhYmxlKTsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzZWxmLT5tdF9hbGxvY2F0ZWQgPSBuZXdfc2l6ZTsKKyAgICBzZWxmLT5tdF9tYXNrID0gbmV3X3NpemUgLSAxOworICAgIG1lbXNldChzZWxmLT5tdF90YWJsZSwgMCwgc2l6ZW9mKFB5TWVtb0VudHJ5KSAqIG5ld19zaXplKTsKKworICAgIC8qIENvcHkgZW50cmllcyBmcm9tIHRoZSBvbGQgdGFibGUuICovCisgICAgdG9fcHJvY2VzcyA9IHNlbGYtPm10X3VzZWQ7CisgICAgZm9yIChvbGRlbnRyeSA9IG9sZHRhYmxlOyB0b19wcm9jZXNzID4gMDsgb2xkZW50cnkrKykgeworICAgICAgICBpZiAob2xkZW50cnktPm1lX2tleSAhPSBOVUxMKSB7CisgICAgICAgICAgICB0b19wcm9jZXNzLS07CisgICAgICAgICAgICAvKiBuZXdlbnRyeSBpcyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiB0aGUgbmV3CisgICAgICAgICAgICAgICBtdF90YWJsZSwgc28gd2UncmUgc2V0dGluZyB0aGUga2V5OnZhbHVlIHBhaXIKKyAgICAgICAgICAgICAgIGluLXBsYWNlLiAqLworICAgICAgICAgICAgbmV3ZW50cnkgPSBfUHlNZW1vVGFibGVfTG9va3VwKHNlbGYsIG9sZGVudHJ5LT5tZV9rZXkpOworICAgICAgICAgICAgbmV3ZW50cnktPm1lX2tleSA9IG9sZGVudHJ5LT5tZV9rZXk7CisgICAgICAgICAgICBuZXdlbnRyeS0+bWVfdmFsdWUgPSBvbGRlbnRyeS0+bWVfdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBEZWFsbG9jYXRlIHRoZSBvbGQgdGFibGUuICovCisgICAgUHlNZW1fRlJFRShvbGR0YWJsZSk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlLCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBsb25nICoKK1B5TWVtb1RhYmxlX0dldChQeU1lbW9UYWJsZSAqc2VsZiwgUHlPYmplY3QgKmtleSkKK3sKKyAgICBQeU1lbW9FbnRyeSAqZW50cnkgPSBfUHlNZW1vVGFibGVfTG9va3VwKHNlbGYsIGtleSk7CisgICAgaWYgKGVudHJ5LT5tZV9rZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuICZlbnRyeS0+bWVfdmFsdWU7Cit9CisKKy8qIFJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLiAqLworc3RhdGljIGludAorUHlNZW1vVGFibGVfU2V0KFB5TWVtb1RhYmxlICpzZWxmLCBQeU9iamVjdCAqa2V5LCBsb25nIHZhbHVlKQoreworICAgIFB5TWVtb0VudHJ5ICplbnRyeTsKKworICAgIGFzc2VydChrZXkgIT0gTlVMTCk7CisKKyAgICBlbnRyeSA9IF9QeU1lbW9UYWJsZV9Mb29rdXAoc2VsZiwga2V5KTsKKyAgICBpZiAoZW50cnktPm1lX2tleSAhPSBOVUxMKSB7CisgICAgICAgIGVudHJ5LT5tZV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUHlfSU5DUkVGKGtleSk7CisgICAgZW50cnktPm1lX2tleSA9IGtleTsKKyAgICBlbnRyeS0+bWVfdmFsdWUgPSB2YWx1ZTsKKyAgICBzZWxmLT5tdF91c2VkKys7CisKKyAgICAvKiBJZiB3ZSBhZGRlZCBhIGtleSwgd2UgY2FuIHNhZmVseSByZXNpemUuIE90aGVyd2lzZSBqdXN0IHJldHVybiEKKyAgICAgKiBJZiB1c2VkID49IDIvMyBzaXplLCBhZGp1c3Qgc2l6ZS4gTm9ybWFsbHksIHRoaXMgcXVhZHVwbGVzIHRoZSBzaXplLgorICAgICAqCisgICAgICogUXVhZHJ1cGxpbmcgdGhlIHNpemUgaW1wcm92ZXMgYXZlcmFnZSB0YWJsZSBzcGFyc2VuZXNzCisgICAgICogKHJlZHVjaW5nIGNvbGxpc2lvbnMpIGF0IHRoZSBjb3N0IG9mIHNvbWUgbWVtb3J5LiBJdCBhbHNvIGhhbHZlcworICAgICAqIHRoZSBudW1iZXIgb2YgZXhwZW5zaXZlIHJlc2l6ZSBvcGVyYXRpb25zIGluIGEgZ3Jvd2luZyBtZW1vIHRhYmxlLgorICAgICAqCisgICAgICogVmVyeSBsYXJnZSBtZW1vIHRhYmxlcyAob3ZlciA1MEsgaXRlbXMpIHVzZSBkb3VibGluZyBpbnN0ZWFkLgorICAgICAqIFRoaXMgbWF5IGhlbHAgYXBwbGljYXRpb25zIHdpdGggc2V2ZXJlIG1lbW9yeSBjb25zdHJhaW50cy4KKyAgICAgKi8KKyAgICBpZiAoIShzZWxmLT5tdF91c2VkICogMyA+PSAoc2VsZi0+bXRfbWFzayArIDEpICogMikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBfUHlNZW1vVGFibGVfUmVzaXplVGFibGUoc2VsZiwKKyAgICAgICAgKHNlbGYtPm10X3VzZWQgPiA1MDAwMCA/IDIgOiA0KSAqIHNlbGYtPm10X3VzZWQpOworfQorCisjdW5kZWYgTVRfTUlOU0laRQorI3VuZGVmIFBFUlRVUkJfU0hJRlQKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEhlbHBlcnMgZm9yIGNyZWF0aW5nIHRoZSBhcmd1bWVudCB0dXBsZSBwYXNzZWQgdG8gZnVuY3Rpb25zLiBUaGlzIGhhcyB0aGUKKyAgIHBlcmZvcm1hbmNlIGFkdmFudGFnZSBvZiBjYWxsaW5nIFB5VHVwbGVfTmV3KCkgb25seSBvbmNlLiAKKworICAgWFhYKGF2YXNzYWxvdHRpKTogSW5saW5lIGRpcmVjdGx5IGluIF9QaWNrbGVyX0Zhc3RDYWxsKCkgYW5kCisgICBfVW5waWNrbGVyX0Zhc3RDYWxsKCkuICovCiAjZGVmaW5lIEFSR19UVVAoc2VsZiwgb2JqKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmICgoc2VsZiktPmFyZyB8fCAoKHNlbGYpLT5hcmc9UHlUdXBsZV9OZXcoMSkpKSB7ICBcCiAgICAgICAgICAgICBQeV9YREVDUkVGKFB5VHVwbGVfR0VUX0lURU0oKHNlbGYpLT5hcmcsIDApKTsgICBcCkBAIC00MDEsMTAgKzY0NSw5IEBACiAKICAgIFhYWDogQW5kLCB3aGF0IGlzIHRoZSByZWZlcmVuY2UgYmVoYXZpb3Igb2YgdGhlc2U/IFN0ZWFsLCBib3Jyb3c/IEF0IGZpcnN0CiAgICBnbGFuY2UsIGl0IHNlZW1zIHRvIHN0ZWFsIHRoZSByZWZlcmVuY2Ugb2YgJ2FyZycgYW5kIGJvcnJvdyB0aGUgcmVmZXJlbmNlCi0gICBvZiAnZnVuYycuCi0gKi8KKyAgIG9mICdmdW5jJy4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1waWNrbGVyX2NhbGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcpCitfUGlja2xlcl9GYXN0Q2FsbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIApAQCAtNDE2LDE4MSArNjU5LDU5NCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi11bnBpY2tsZXJfY2FsbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQorc3RhdGljIGludAorX1BpY2tsZXJfQ2xlYXJCdWZmZXIoUGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLQotICAgIEFSR19UVVAoc2VsZiwgYXJnKTsKLSAgICBpZiAoc2VsZi0+YXJnKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgc2VsZi0+YXJnLCBOVUxMKTsKLSAgICAgICAgRlJFRV9BUkdfVFVQKHNlbGYpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgUHlfc3NpemVfdAotcGlja2xlcl93cml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4pCi17Ci0gICAgUHlPYmplY3QgKmRhdGEsICpyZXN1bHQ7Ci0KLSAgICBpZiAoc2VsZi0+d3JpdGVfYnVmID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiaW52YWxpZCB3cml0ZSBidWZmZXIiKTsKKyAgICBQeV9DTEVBUihzZWxmLT5vdXRwdXRfYnVmZmVyKTsKKyAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0KKyAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CisgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKyAgICByZXR1cm4gMDsKK30KIAotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgaWYgKCEoc2VsZi0+YnVmX3NpemUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGRhdGEgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPndyaXRlX2J1Ziwgc2VsZi0+YnVmX3NpemUpOwotICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNlbGYtPmJ1Zl9zaXplICYmIChuICsgc2VsZi0+YnVmX3NpemUpID4gV1JJVEVfQlVGX1NJWkUpIHsKLSAgICAgICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsIE5VTEwsIDApIDwgMCkKK3N0YXRpYyBQeU9iamVjdCAqCitfUGlja2xlcl9HZXRTdHJpbmcoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqb3V0cHV0X2J1ZmZlciA9IHNlbGYtPm91dHB1dF9idWZmZXI7CisKKyAgICBhc3NlcnQoc2VsZi0+b3V0cHV0X2J1ZmZlciAhPSBOVUxMKTsKKyAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gTlVMTDsKKyAgICAvKiBSZXNpemUgZG93biB0byBleGFjdCBzaXplICovCisgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmb3V0cHV0X2J1ZmZlciwgc2VsZi0+b3V0cHV0X2xlbikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gb3V0cHV0X2J1ZmZlcjsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfRmx1c2hUb0ZpbGUoUGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqb3V0cHV0LCAqcmVzdWx0OworCisgICAgYXNzZXJ0KHNlbGYtPndyaXRlICE9IE5VTEwpOworCisgICAgb3V0cHV0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHNlbGYpOworICAgIGlmIChvdXRwdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiAocmVzdWx0ID09IE5VTEwpID8gLTEgOiAwOworfQorCitzdGF0aWMgaW50CitfUGlja2xlcl9Xcml0ZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IG4pCit7CisgICAgUHlfc3NpemVfdCBpLCByZXF1aXJlZDsKKyAgICBjaGFyICpidWZmZXI7CisKKyAgICBhc3NlcnQocyAhPSBOVUxMKTsKKworICAgIHJlcXVpcmVkID0gc2VsZi0+b3V0cHV0X2xlbiArIG47CisgICAgaWYgKHJlcXVpcmVkID4gc2VsZi0+bWF4X291dHB1dF9sZW4pIHsKKyAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgcmVxdWlyZWQgPiBNQVhfV1JJVEVfQlVGX1NJWkUpIHsKKyAgICAgICAgICAgIC8qIFhYWCBUaGlzIHJlYWxsb2NhdGVzIGEgbmV3IGJ1ZmZlciBldmVyeSB0aW1lLCB3aGljaCBpcyBhIGJpdAorICAgICAgICAgICAgICAgd2FzdGVmdWwuICovCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfRmx1c2hUb0ZpbGUoc2VsZikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG4gPiBXUklURV9CVUZfU0laRSkgewotICAgICAgICAgICAgaWYgKCEoZGF0YSA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbikpKQorICAgICAgICBpZiAoc2VsZi0+d3JpdGUgIT0gTlVMTCAmJiBuID4gTUFYX1dSSVRFX0JVRl9TSVpFKSB7CisgICAgICAgICAgICAvKiB3ZSBhbHJlYWR5IGZsdXNoZWQgYWJvdmUsIHNvIHRoZSBidWZmZXIgaXMgZW1wdHkgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgICAgICAvKiBYWFggd2UgY291bGQgc3BhcmUgYW4gaW50ZXJtZWRpYXRlIGNvcHkgYW5kIHBhc3MKKyAgICAgICAgICAgICAgIGEgbWVtb3J5dmlldyBpbnN0ZWFkICovCisgICAgICAgICAgICBQeU9iamVjdCAqb3V0cHV0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCBuKTsKKyAgICAgICAgICAgIGlmIChzID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmVzdWx0ID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+d3JpdGUsIG91dHB1dCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA9PSBOVUxMKSA/IC0xIDogMDsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweShzZWxmLT53cml0ZV9idWYgKyBzZWxmLT5idWZfc2l6ZSwgcywgbik7Ci0gICAgICAgICAgICBzZWxmLT5idWZfc2l6ZSArPSBuOwotICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgKiAyOworICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+b3V0cHV0X2J1ZmZlciwgc2VsZi0+bWF4X291dHB1dF9sZW4pIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgYnVmZmVyID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+b3V0cHV0X2J1ZmZlcik7CisgICAgaWYgKG4gPCA4KSB7CisgICAgICAgIC8qIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWVtY3B5IHdoZW4gdGhlIHN0cmluZyBpcyBzaG9ydC4gKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgYnVmZmVyW3NlbGYtPm91dHB1dF9sZW4gKyBpXSA9IHNbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzZWxmLT5vdXRwdXRfbGVuLCBzLCBuKTsKKyAgICB9CisgICAgc2VsZi0+b3V0cHV0X2xlbiArPSBuOworICAgIHJldHVybiBuOworfQorCitzdGF0aWMgUGlja2xlck9iamVjdCAqCitfUGlja2xlcl9OZXcodm9pZCkKK3sKKyAgICBQaWNrbGVyT2JqZWN0ICpzZWxmOworCisgICAgc2VsZiA9IFB5T2JqZWN0X0dDX05ldyhQaWNrbGVyT2JqZWN0LCAmUGlja2xlcl9UeXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnBlcnNfZnVuYyA9IE5VTEw7CisgICAgc2VsZi0+YXJnID0gTlVMTDsKKyAgICBzZWxmLT53cml0ZSA9IE5VTEw7CisgICAgc2VsZi0+cHJvdG8gPSAwOworICAgIHNlbGYtPmJpbiA9IDA7CisgICAgc2VsZi0+ZmFzdCA9IDA7CisgICAgc2VsZi0+ZmFzdF9uZXN0aW5nID0gMDsKKyAgICBzZWxmLT5maXhfaW1wb3J0cyA9IDA7CisgICAgc2VsZi0+ZmFzdF9tZW1vID0gTlVMTDsKKworICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuID0gV1JJVEVfQlVGX1NJWkU7CisgICAgc2VsZi0+b3V0cHV0X2xlbiA9IDA7CisgICAgc2VsZi0+b3V0cHV0X2J1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CisgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIGludAorX1BpY2tsZXJfU2V0UHJvdG9jb2woUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnByb3RvX29iaiwKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0c19vYmopCit7CisgICAgbG9uZyBwcm90byA9IDA7CisgICAgaW50IGZpeF9pbXBvcnRzOworCisgICAgaWYgKHByb3RvX29iaiA9PSBOVUxMIHx8IHByb3RvX29iaiA9PSBQeV9Ob25lKQorICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7CisgICAgZWxzZSB7CisgICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b19vYmopOworICAgICAgICBpZiAocHJvdG8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHByb3RvIDwgMCkKKyAgICAgICAgcHJvdG8gPSBISUdIRVNUX1BST1RPQ09MOworICAgIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIsCisgICAgICAgICAgICAgICAgICAgICBISUdIRVNUX1BST1RPQ09MKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmaXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0c19vYmopOworICAgIGlmIChmaXhfaW1wb3J0cyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIAorICAgIHNlbGYtPnByb3RvID0gcHJvdG87CisgICAgc2VsZi0+YmluID0gcHJvdG8gPiAwOworICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHMgJiYgcHJvdG8gPCAzOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgLTEgKHdpdGggYW4gZXhjZXB0aW9uIHNldCkgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLiBUaGlzIG1heQorICAgYmUgY2FsbGVkIG9uY2Ugb24gYSBmcmVzaGx5IGNyZWF0ZWQgUGlja2xlci4gKi8KK3N0YXRpYyBpbnQKK19QaWNrbGVyX1NldE91dHB1dFN0cmVhbShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZmlsZSkKK3sKKyAgICBhc3NlcnQoZmlsZSAhPSBOVUxMKTsKKyAgICBzZWxmLT53cml0ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmlsZSwgIndyaXRlIik7CisgICAgaWYgKHNlbGYtPndyaXRlID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSBtdXN0IGhhdmUgYSAnd3JpdGUnIGF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFNlZSBkb2N1bWVudGF0aW9uIGZvciBfUGlja2xlcl9GYXN0Q2FsbCgpLiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19VbnBpY2tsZXJfRmFzdENhbGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKworICAgIEFSR19UVVAoc2VsZiwgYXJnKTsKKyAgICBpZiAoc2VsZi0+YXJnKSB7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgc2VsZi0+YXJnLCBOVUxMKTsKKyAgICAgICAgRlJFRV9BUkdfVFVQKHNlbGYpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiBUaGlzIHRha2VzIGl0cworICAgb3duIHJlZmVyZW5jZSB0byBgaW5wdXRgLiAqLworc3RhdGljIFB5X3NzaXplX3QKK19VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaW5wdXQpCit7CisgICAgaWYgKHNlbGYtPmJ1ZmZlci5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmZmVyKTsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGlucHV0LCAmc2VsZi0+YnVmZmVyLCBQeUJVRl9DT05USUdfUk8pIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IHNlbGYtPmJ1ZmZlci5idWY7CisgICAgc2VsZi0+aW5wdXRfbGVuID0gc2VsZi0+YnVmZmVyLmxlbjsKKyAgICBzZWxmLT5uZXh0X3JlYWRfaWR4ID0gMDsKKyAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPmlucHV0X2xlbjsKKyAgICByZXR1cm4gc2VsZi0+aW5wdXRfbGVuOworfQorCitzdGF0aWMgaW50CitfVW5waWNrbGVyX1NraXBDb25zdW1lZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKworICAgIGlmIChjb25zdW1lZCA+IDApIHsKKyAgICAgICAgUHlPYmplY3QgKnI7CisgICAgICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCisgICAgICAgIC8qIFRoaXMgbWFrZXMgYW4gdXNlbGVzcyBjb3B5Li4uICovCisgICAgICAgIHIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+cmVhZCwgIm4iLCBjb25zdW1lZCk7CisgICAgICAgIGlmIChyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIFB5X0RFQ1JFRihyKTsKKyAgICAgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSBzZWxmLT5uZXh0X3JlYWRfaWR4OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IFB5X3NzaXplX3QgUkVBRF9XSE9MRV9MSU5FID0gLTE7CisKKy8qIElmIHJlYWRpbmcgZnJvbSBhIGZpbGUsIHdlIG5lZWQgdG8gb25seSBwdWxsIHRoZSBieXRlcyB3ZSBuZWVkLCBzaW5jZSB0aGVyZQorICAgbWF5IGJlIG11bHRpcGxlIHBpY2tsZSBvYmplY3RzIGFycmFuZ2VkIGNvbnRpZ3VvdXNseSBpbiB0aGUgc2FtZSBpbnB1dAorICAgYnVmZmVyLgorCisgICBJZiBgbmAgaXMgUkVBRF9XSE9MRV9MSU5FLCByZWFkIGEgd2hvbGUgbGluZS4gT3RoZXJ3aXNlLCByZWFkIHVwIHRvIGBuYAorICAgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtL2J1ZmZlci4KKworICAgVXBkYXRlIHRoZSB1bnBpY2tsZXIncyBpbnB1dCBidWZmZXIgd2l0aCB0aGUgbmV3bHktcmVhZCBkYXRhLiBSZXR1cm5zIC0xIG9uCisgICBmYWlsdXJlOyBvbiBzdWNjZXNzLCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBmcm9tIHRoZSBmaWxlLgorCisgICBPbiBzdWNjZXNzLCBzZWxmLT5pbnB1dF9sZW4gd2lsbCBiZSAwOyB0aGlzIGlzIGludGVudGlvbmFsIHNvIHRoYXQgd2hlbgorICAgdW5waWNrbGluZyBmcm9tIGEgZmlsZSwgdGhlICJ3ZSd2ZSBydW4gb3V0IG9mIGRhdGEiIGNvZGUgcGF0aHMgd2lsbCB0cmlnZ2VyLAorICAgY2F1c2luZyB0aGUgVW5waWNrbGVyIHRvIGdvIGJhY2sgdG8gdGhlIGZpbGUgZm9yIG1vcmUgZGF0YS4gVXNlIHRoZSByZXR1cm5lZAorICAgc2l6ZSB0byB0ZWxsIHlvdSBob3cgbXVjaCBkYXRhIHlvdSBjYW4gcHJvY2Vzcy4gKi8KK3N0YXRpYyBQeV9zc2l6ZV90CitfVW5waWNrbGVyX1JlYWRGcm9tRmlsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbikKK3sKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBQeV9zc2l6ZV90IHJlYWRfc2l6ZSwgcHJlZmV0Y2hlZF9zaXplID0gMDsKKworICAgIGFzc2VydChzZWxmLT5yZWFkICE9IE5VTEwpOworICAgIAorICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkKKyAgICAgICAgZGF0YSA9IFB5T2JqZWN0X0NhbGwoc2VsZi0+cmVhZGxpbmUsIGVtcHR5X3R1cGxlLCBOVUxMKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKmxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKKyAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBkYXRhID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOworICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBQcmVmZXRjaCBzb21lIGRhdGEgd2l0aG91dCBhZHZhbmNpbmcgdGhlIGZpbGUgcG9pbnRlciwgaWYgcG9zc2libGUgKi8KKyAgICBpZiAoc2VsZi0+cGVlaykgeworICAgICAgICBQeU9iamVjdCAqbGVuLCAqcHJlZmV0Y2hlZDsKKyAgICAgICAgbGVuID0gUHlMb25nX0Zyb21Tc2l6ZV90KFBSRUZFVENIKTsKKyAgICAgICAgaWYgKGxlbiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcHJlZmV0Y2hlZCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cGVlaywgbGVuKTsKKyAgICAgICAgaWYgKHByZWZldGNoZWQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICAvKiBwZWVrKCkgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSBvYmplY3QgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnBlZWspOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHByZWZldGNoZWQpKTsKKyAgICAgICAgICAgIHByZWZldGNoZWRfc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUocHJlZmV0Y2hlZCk7CisgICAgICAgICAgICBQeUJ5dGVzX0NvbmNhdEFuZERlbCgmZGF0YSwgcHJlZmV0Y2hlZCk7CisgICAgICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KIAotICAgIC8qIG9iamVjdCB3aXRoIHdyaXRlIG1ldGhvZCAqLwotICAgIHJlc3VsdCA9IHBpY2tsZXJfY2FsbChzZWxmLCBzZWxmLT53cml0ZSwgZGF0YSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICBzZWxmLT5idWZfc2l6ZSA9IDA7Ci0gICAgcmV0dXJuIG47CisgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKSAtIHByZWZldGNoZWRfc2l6ZTsKKyAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgc2VsZi0+cHJlZmV0Y2hlZF9pZHggPSByZWFkX3NpemU7CisgICAgcmV0dXJuIHJlYWRfc2l6ZTsKIH0KIAotLyogWFhYOiBUaGVzZSByZWFkL3JlYWRsaW5lIGZ1bmN0aW9ucyBvdWdodCB0byBiZSBvcHRpbWl6ZWQuIEJ1ZmZlcmVkIEkvTwotICAgbWlnaHQgaGVscCBhIGxvdCwgZXNwZWNpYWxseSB3aXRoIHRoZSBuZXcgKGJ1dCBtdWNoIHNsb3dlcikgaW8gbGlicmFyeS4KLSAgIE9uIHRoZSBvdGhlciBoYW5kLCB0aGUgYWRkZWQgY29tcGxleGl0eSBtaWdodCBub3Qgd29ydGggaXQuCi0gKi8KKy8qIFJlYWQgYG5gIGJ5dGVzIGZyb20gdGhlIHVucGlja2xlcidzIGRhdGEgc291cmNlLCBzdG9yaW5nIHRoZSByZXN1bHQgaW4gYCpzYC4KIAotLyogUmVhZCBhdCBsZWFzdCBuIGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5wdXQgc3RyZWFtIGFuZCBzZXQgcyB0byB0aGUgY3VycmVudAotICAgcmVhZGluZyBwb3NpdGlvbi4gKi8KKyAgIFRoaXMgc2hvdWxkIGJlIHVzZWQgZm9yIGFsbCBkYXRhIHJlYWRzLCByYXRoZXIgdGhhbiBhY2Nlc3NpbmcgdGhlIHVucGlja2xlcidzCisgICBpbnB1dCBidWZmZXIgZGlyZWN0bHkuIFRoaXMgbWV0aG9kIGRlYWxzIGNvcnJlY3RseSB3aXRoIHJlYWRpbmcgZnJvbSBpbnB1dAorICAgc3RyZWFtcywgd2hpY2ggdGhlIGlucHV0IGJ1ZmZlciBkb2Vzbid0IGRlYWwgd2l0aC4KKworICAgTm90ZSB0aGF0IHdoZW4gcmVhZGluZyBmcm9tIGEgZmlsZS1saWtlIG9iamVjdCwgc2VsZi0+bmV4dF9yZWFkX2lkeCB3b24ndAorICAgYmUgdXBkYXRlZCAoaXQgc2hvdWxkIHJlbWFpbiBhdCAwIGZvciB0aGUgZW50aXJlIHVucGlja2xpbmcgcHJvY2VzcykuIFlvdQorICAgc2hvdWxkIHVzZSB0aGlzIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlIHRvIGtub3cgaG93IG1hbnkgYnl0ZXMgeW91IGNhbgorICAgY29uc3VtZS4KKworICAgUmV0dXJucyAtMSAod2l0aCBhbiBleGNlcHRpb24gc2V0KSBvbiBmYWlsdXJlLiBPbiBzdWNjZXNzLCByZXR1cm4gdGhlCisgICBudW1iZXIgb2YgY2hhcnMgcmVhZC4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci11bnBpY2tsZXJfcmVhZChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKipzLCBQeV9zc2l6ZV90IG4pCitfVW5waWNrbGVyX1JlYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBjaGFyICoqcywgUHlfc3NpemVfdCBuKQogewotICAgIFB5T2JqZWN0ICpsZW47Ci0gICAgUHlPYmplY3QgKmRhdGE7CisgICAgUHlfc3NpemVfdCBudW1fcmVhZDsKIAotICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKLSAgICBpZiAobGVuID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGRhdGEgPSB1bnBpY2tsZXJfY2FsbChzZWxmLCBzZWxmLT5yZWFkLCBsZW4pOwotICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIFhYWDogU2hvdWxkIGJ5dGVhcnJheSBiZSBzdXBwb3J0ZWQgdG9vPyAqLwotICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgZnJvbSB0aGUgdW5kZXJseWluZyBzdHJlYW0gZGlkIG5vdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuIGJ5dGVzIik7Ci0gICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICBpZiAoc2VsZi0+bmV4dF9yZWFkX2lkeCArIG4gPD0gc2VsZi0+aW5wdXRfbGVuKSB7CisgICAgICAgICpzID0gc2VsZi0+aW5wdXRfYnVmZmVyICsgc2VsZi0+bmV4dF9yZWFkX2lkeDsKKyAgICAgICAgc2VsZi0+bmV4dF9yZWFkX2lkeCArPSBuOworICAgICAgICByZXR1cm4gbjsKKyAgICB9CisgICAgaWYgKCFzZWxmLT5yZWFkKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19FT0ZFcnJvciwgIlJhbiBvdXQgb2YgaW5wdXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQotICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpICE9IG4pIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgIFB5X0RFQ1JFRihkYXRhKTsKKyAgICBudW1fcmVhZCA9IF9VbnBpY2tsZXJfUmVhZEZyb21GaWxlKHNlbGYsIG4pOworICAgIGlmIChudW1fcmVhZCA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobnVtX3JlYWQgPCBuKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19FT0ZFcnJvciwgIlJhbiBvdXQgb2YgaW5wdXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLQotICAgIFB5X1hERUNSRUYoc2VsZi0+bGFzdF9zdHJpbmcpOwotICAgIHNlbGYtPmxhc3Rfc3RyaW5nID0gZGF0YTsKLQotICAgIGlmICghKCpzID0gUHlCeXRlc19BU19TVFJJTkcoZGF0YSkpKQotICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICAqcyA9IHNlbGYtPmlucHV0X2J1ZmZlcjsKKyAgICBzZWxmLT5uZXh0X3JlYWRfaWR4ID0gbjsKICAgICByZXR1cm4gbjsKIH0KIAogc3RhdGljIFB5X3NzaXplX3QKLXVucGlja2xlcl9yZWFkbGluZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKipzKQorX1VucGlja2xlcl9Db3B5TGluZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKmxpbmUsIFB5X3NzaXplX3QgbGVuLAorICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdWx0KQogewotICAgIFB5T2JqZWN0ICpkYXRhOwotCi0gICAgZGF0YSA9IFB5T2JqZWN0X0NhbGxPYmplY3Qoc2VsZi0+cmVhZGxpbmUsIGVtcHR5X3R1cGxlKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgIGNoYXIgKmlucHV0X2xpbmUgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmlucHV0X2xpbmUsIGxlbiArIDEpOworICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIC8qIFhYWDogU2hvdWxkIGJ5dGVhcnJheSBiZSBzdXBwb3J0ZWQgdG9vPyAqLwotICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkbGluZSgpIGZyb20gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGRpZCBub3QgIgotICAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBieXRlcyIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgUHlfWERFQ1JFRihzZWxmLT5sYXN0X3N0cmluZyk7Ci0gICAgc2VsZi0+bGFzdF9zdHJpbmcgPSBkYXRhOwotCi0gICAgaWYgKCEoKnMgPSBQeUJ5dGVzX0FTX1NUUklORyhkYXRhKSkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHJldHVybiBQeUJ5dGVzX0dFVF9TSVpFKGRhdGEpOworICAgIG1lbWNweShpbnB1dF9saW5lLCBsaW5lLCBsZW4pOworICAgIGlucHV0X2xpbmVbbGVuXSA9ICdcMCc7CisgICAgc2VsZi0+aW5wdXRfbGluZSA9IGlucHV0X2xpbmU7CisgICAgKnJlc3VsdCA9IHNlbGYtPmlucHV0X2xpbmU7CisgICAgcmV0dXJuIGxlbjsKIH0KIAotLyogR2VuZXJhdGUgYSBHRVQgb3Bjb2RlIGZvciBhbiBvYmplY3Qgc3RvcmVkIGluIHRoZSBtZW1vLiBUaGUgJ2tleScgYXJndW1lbnQKLSAgIHNob3VsZCBiZSB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0IGFzIHJldHVybmVkIGJ5IFB5TG9uZ19Gcm9tVm9pZFB0cigpLiAqLworLyogUmVhZCBhIGxpbmUgZnJvbSB0aGUgaW5wdXQgc3RyZWFtL2J1ZmZlci4gSWYgd2UgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSBpbnB1dAorICAgYmVmb3JlIGhpdHRpbmcgXG4sIHJldHVybiB0aGUgZGF0YSB3ZSBmb3VuZC4KKworICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJzIHJlYWQsIG9yIC0xIG9uIGZhaWx1cmUuICovCitzdGF0aWMgUHlfc3NpemVfdAorX1VucGlja2xlcl9SZWFkbGluZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGNoYXIgKipyZXN1bHQpCit7CisgICAgUHlfc3NpemVfdCBpLCBudW1fcmVhZDsKKworICAgIGZvciAoaSA9IHNlbGYtPm5leHRfcmVhZF9pZHg7IGkgPCBzZWxmLT5pbnB1dF9sZW47IGkrKykgeworICAgICAgICBpZiAoc2VsZi0+aW5wdXRfYnVmZmVyW2ldID09ICdcbicpIHsKKyAgICAgICAgICAgIGNoYXIgKmxpbmVfc3RhcnQgPSBzZWxmLT5pbnB1dF9idWZmZXIgKyBzZWxmLT5uZXh0X3JlYWRfaWR4OworICAgICAgICAgICAgbnVtX3JlYWQgPSBpIC0gc2VsZi0+bmV4dF9yZWFkX2lkeCArIDE7CisgICAgICAgICAgICBzZWxmLT5uZXh0X3JlYWRfaWR4ID0gaSArIDE7CisgICAgICAgICAgICByZXR1cm4gX1VucGlja2xlcl9Db3B5TGluZShzZWxmLCBsaW5lX3N0YXJ0LCBudW1fcmVhZCwgcmVzdWx0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoc2VsZi0+cmVhZCkgeworICAgICAgICBudW1fcmVhZCA9IF9VbnBpY2tsZXJfUmVhZEZyb21GaWxlKHNlbGYsIFJFQURfV0hPTEVfTElORSk7CisgICAgICAgIGlmIChudW1fcmVhZCA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICpyZXN1bHQgPSBzZWxmLT5pbnB1dF9idWZmZXI7CisgICAgICAgIHNlbGYtPm5leHRfcmVhZF9pZHggPSBudW1fcmVhZDsKKyAgICAgICAgcmV0dXJuIG51bV9yZWFkOworICAgIH0KKyAKKyAgICAvKiBJZiB3ZSBnZXQgaGVyZSwgd2UndmUgcnVuIG9mZiB0aGUgZW5kIG9mIHRoZSBpbnB1dCBzdHJpbmcuIFJldHVybiB0aGUKKyAgICAgICByZW1haW5pbmcgc3RyaW5nIGFuZCBsZXQgdGhlIGNhbGxlciBmaWd1cmUgaXQgb3V0LiAqLworICAgICpyZXN1bHQgPSBzZWxmLT5pbnB1dF9idWZmZXIgKyBzZWxmLT5uZXh0X3JlYWRfaWR4OworICAgIG51bV9yZWFkID0gaSAtIHNlbGYtPm5leHRfcmVhZF9pZHg7CisgICAgc2VsZi0+bmV4dF9yZWFkX2lkeCA9IGk7CisgICAgcmV0dXJuIG51bV9yZWFkOworfQorCisvKiBSZXR1cm5zIC0xICh3aXRoIGFuIGV4Y2VwdGlvbiBzZXQpIG9uIGZhaWx1cmUsIDAgb24gc3VjY2Vzcy4gVGhlIG1lbW8gYXJyYXkKKyAgIHdpbGwgYmUgbW9kaWZpZWQgaW4gcGxhY2UuICovCitzdGF0aWMgaW50CitfVW5waWNrbGVyX1Jlc2l6ZU1lbW9MaXN0KFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKiptZW1vOworCisgICAgYXNzZXJ0KG5ld19zaXplID4gc2VsZi0+bWVtb19zaXplKTsKKworICAgIG1lbW8gPSBQeU1lbV9SRUFMTE9DKHNlbGYtPm1lbW8sIG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKKyAgICBpZiAobWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+bWVtbyA9IG1lbW87CisgICAgZm9yIChpID0gc2VsZi0+bWVtb19zaXplOyBpIDwgbmV3X3NpemU7IGkrKykKKyAgICAgICAgc2VsZi0+bWVtb1tpXSA9IE5VTEw7CisgICAgc2VsZi0+bWVtb19zaXplID0gbmV3X3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFJldHVybnMgTlVMTCBpZiBpZHggaXMgb3V0IG9mIGJvdW5kcy4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfVW5waWNrbGVyX01lbW9HZXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGlkeCkKK3sKKyAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gc2VsZi0+bWVtb19zaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBzZWxmLT5tZW1vW2lkeF07Cit9CisKKy8qIFJldHVybnMgLTEgKHdpdGggYW4gZXhjZXB0aW9uIHNldCkgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzLgorICAgVGhpcyB0YWtlcyBpdHMgb3duIHJlZmVyZW5jZSB0byBgdmFsdWVgLiAqLworc3RhdGljIGludAorX1VucGlja2xlcl9NZW1vUHV0KFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpZHgsIFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqb2xkX2l0ZW07CisKKyAgICBpZiAoaWR4ID49IHNlbGYtPm1lbW9fc2l6ZSkgeworICAgICAgICBpZiAoX1VucGlja2xlcl9SZXNpemVNZW1vTGlzdChzZWxmLCBpZHggKiAyKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGFzc2VydChpZHggPCBzZWxmLT5tZW1vX3NpemUpOworICAgIH0KKyAgICBQeV9JTkNSRUYodmFsdWUpOworICAgIG9sZF9pdGVtID0gc2VsZi0+bWVtb1tpZHhdOworICAgIHNlbGYtPm1lbW9baWR4XSA9IHZhbHVlOworICAgIFB5X1hERUNSRUYob2xkX2l0ZW0pOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlPYmplY3QgKioKK19VbnBpY2tsZXJfTmV3TWVtbyhQeV9zc2l6ZV90IG5ld19zaXplKQoreworICAgIFB5T2JqZWN0ICoqbWVtbyA9IFB5TWVtX01BTExPQyhuZXdfc2l6ZSAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgaWYgKG1lbW8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbWVtc2V0KG1lbW8sIDAsIG5ld19zaXplICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKKyAgICByZXR1cm4gbWVtbzsKK30KKworLyogRnJlZSB0aGUgdW5waWNrbGVyJ3MgbWVtbywgdGFraW5nIGNhcmUgdG8gZGVjcmVmIGFueSBpdGVtcyBsZWZ0IGluIGl0LiAqLworc3RhdGljIHZvaWQKK19VbnBpY2tsZXJfTWVtb0NsZWFudXAoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqKm1lbW8gPSBzZWxmLT5tZW1vOworCisgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIHNlbGYtPm1lbW8gPSBOVUxMOworICAgIGkgPSBzZWxmLT5tZW1vX3NpemU7CisgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgICAgIFB5X1hERUNSRUYobWVtb1tpXSk7CisgICAgfQorICAgIFB5TWVtX0ZSRUUobWVtbyk7Cit9CisKK3N0YXRpYyBVbnBpY2tsZXJPYmplY3QgKgorX1VucGlja2xlcl9OZXcodm9pZCkKK3sKKyAgICBVbnBpY2tsZXJPYmplY3QgKnNlbGY7CisKKyAgICBzZWxmID0gUHlPYmplY3RfR0NfTmV3KFVucGlja2xlck9iamVjdCwgJlVucGlja2xlcl9UeXBlKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNlbGYtPnN0YWNrID0gKFBkYXRhICopUGRhdGFfTmV3KCk7CisgICAgaWYgKHNlbGYtPnN0YWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KCZzZWxmLT5idWZmZXIsIDAsIHNpemVvZihQeV9idWZmZXIpKTsKKworICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOworICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VsZi0+YXJnID0gTlVMTDsKKyAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOworICAgIHNlbGYtPmlucHV0X2J1ZmZlciA9IE5VTEw7CisgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7CisgICAgc2VsZi0+aW5wdXRfbGVuID0gMDsKKyAgICBzZWxmLT5uZXh0X3JlYWRfaWR4ID0gMDsKKyAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IDA7CisgICAgc2VsZi0+cmVhZCA9IE5VTEw7CisgICAgc2VsZi0+cmVhZGxpbmUgPSBOVUxMOworICAgIHNlbGYtPnBlZWsgPSBOVUxMOworICAgIHNlbGYtPmVuY29kaW5nID0gTlVMTDsKKyAgICBzZWxmLT5lcnJvcnMgPSBOVUxMOworICAgIHNlbGYtPm1hcmtzID0gTlVMTDsKKyAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPm1hcmtzX3NpemUgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKKyAgICBzZWxmLT5maXhfaW1wb3J0cyA9IDA7CisKKyAgICByZXR1cm4gc2VsZjsKK30KKworLyogUmV0dXJucyAtMSAod2l0aCBhbiBleGNlcHRpb24gc2V0KSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuIFRoaXMgbWF5CisgICBiZSBjYWxsZWQgb25jZSBvbiBhIGZyZXNobHkgY3JlYXRlZCBQaWNrbGVyLiAqLworc3RhdGljIGludAorX1VucGlja2xlcl9TZXRJbnB1dFN0cmVhbShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlKQoreworICAgIHNlbGYtPnBlZWsgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZpbGUsICJwZWVrIik7CisgICAgaWYgKHNlbGYtPnBlZWsgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPnJlYWQgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZpbGUsICJyZWFkIik7CisgICAgc2VsZi0+cmVhZGxpbmUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZpbGUsICJyZWFkbGluZSIpOworICAgIGlmIChzZWxmLT5yZWFkbGluZSA9PSBOVUxMIHx8IHNlbGYtPnJlYWQgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWxlIG11c3QgaGF2ZSAncmVhZCcgYW5kICdyZWFkbGluZScgYXR0cmlidXRlcyIpOworICAgICAgICBQeV9DTEVBUihzZWxmLT5yZWFkKTsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+cmVhZGxpbmUpOworICAgICAgICBQeV9DTEVBUihzZWxmLT5wZWVrKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogUmV0dXJucyAtMSAod2l0aCBhbiBleGNlcHRpb24gc2V0KSBvbiBmYWlsdXJlLCAwIG9uIHN1Y2Nlc3MuIFRoaXMgbWF5CisgICBiZSBjYWxsZWQgb25jZSBvbiBhIGZyZXNobHkgY3JlYXRlZCBQaWNrbGVyLiAqLworc3RhdGljIGludAorX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKFVucGlja2xlck9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKGVuY29kaW5nID09IE5VTEwpCisgICAgICAgIGVuY29kaW5nID0gIkFTQ0lJIjsKKyAgICBpZiAoZXJyb3JzID09IE5VTEwpCisgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOworCisgICAgc2VsZi0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOworICAgIHNlbGYtPmVycm9ycyA9IHN0cmR1cChlcnJvcnMpOworICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMIHx8IHNlbGYtPmVycm9ycyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdlbmVyYXRlIGEgR0VUIG9wY29kZSBmb3IgYW4gb2JqZWN0IHN0b3JlZCBpbiB0aGUgbWVtby4gKi8KIHN0YXRpYyBpbnQKIG1lbW9fZ2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgUHlPYmplY3QgKnZhbHVlOwotICAgIFB5T2JqZWN0ICptZW1vX2lkOwotICAgIGxvbmcgeDsKKyAgICBsb25nICp2YWx1ZTsKICAgICBjaGFyIHBkYXRhWzMwXTsKICAgICBpbnQgbGVuOwogCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzZWxmLT5tZW1vLCBrZXkpOwotICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKKyAgICB2YWx1ZSA9IFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBrZXkpOworICAgIGlmICh2YWx1ZSA9PSBOVUxMKSAgeworICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBtZW1vX2lkID0gUHlUdXBsZV9HZXRJdGVtKHZhbHVlLCAwKTsKLSAgICBpZiAobWVtb19pZCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBpZiAoIVB5TG9uZ19DaGVjayhtZW1vX2lkKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgIm1lbW8gaWQgbXVzdCBiZSBhbiBpbnRlZ2VyIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgeCA9IFB5TG9uZ19Bc0xvbmcobWVtb19pZCk7Ci0gICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgaWYgKCFzZWxmLT5iaW4pIHsKICAgICAgICAgcGRhdGFbMF0gPSBHRVQ7Ci0gICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwgIiVsZFxuIiwgeCk7CisgICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwgIiVsZFxuIiwgKnZhbHVlKTsKICAgICAgICAgbGVuID0gKGludClzdHJsZW4ocGRhdGEpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHggPCAyNTYpIHsKKyAgICAgICAgaWYgKCp2YWx1ZSA8IDI1NikgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBCSU5HRVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7CisgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgqdmFsdWUgJiAweGZmKTsKICAgICAgICAgICAgIGxlbiA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoeCA8PSAweGZmZmZmZmZmTCkgeworICAgICAgICBlbHNlIGlmICgqdmFsdWUgPD0gMHhmZmZmZmZmZkwpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gTE9OR19CSU5HRVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKCp2YWx1ZSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKCp2YWx1ZSA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKCp2YWx1ZSA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKCgqdmFsdWUgPj4gMjQpICYgMHhmZik7CiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwpAQCAtNjAwLDcgKzEyNTYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQorICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHJldHVybiAwOwpAQCAtNjExLDkgKzEyNjcsNiBAQAogc3RhdGljIGludAogbWVtb19wdXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqa2V5ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbWVtb19pZCA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKnR1cGxlID0gTlVMTDsKICAgICBsb25nIHg7CiAgICAgY2hhciBwZGF0YVszMF07CiAgICAgaW50IGxlbjsKQEAgLTYyMiwyMyArMTI3NSw4IEBACiAgICAgaWYgKHNlbGYtPmZhc3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7Ci0gICAgaWYgKGtleSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICgoeCA9IFB5RGljdF9TaXplKHNlbGYtPm1lbW8pKSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgbWVtb19pZCA9IFB5TG9uZ19Gcm9tTG9uZyh4KTsKLSAgICBpZiAobWVtb19pZCA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIHR1cGxlID0gUHlUdXBsZV9OZXcoMik7Ci0gICAgaWYgKHR1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBQeV9JTkNSRUYobWVtb19pZCk7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTSh0dXBsZSwgMCwgbWVtb19pZCk7Ci0gICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgUHlUdXBsZV9TRVRfSVRFTSh0dXBsZSwgMSwgb2JqKTsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+bWVtbywga2V5LCB0dXBsZSkgPCAwKQorICAgIHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOworICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCB4KSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoIXNlbGYtPmJpbikgewpAQCAtNjY3LDcgKzEzMDUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQorICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoMCkgewpAQCAtNjc1LDEwICsxMzEzLDYgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogCi0gICAgUHlfWERFQ1JFRihrZXkpOwotICAgIFB5X1hERUNSRUYobWVtb19pZCk7Ci0gICAgUHlfWERFQ1JFRih0dXBsZSk7Ci0KICAgICByZXR1cm4gc3RhdHVzOwogfQogCkBAIC04MjEsNyArMTQ1NSw3IEBACiBzYXZlX25vbmUoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKICAgICBjb25zdCBjaGFyIG5vbmVfb3AgPSBOT05FOwotICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZub25lX29wLCAxKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZub25lX29wLCAxKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHJldHVybiAwOwpAQCAtODM2LDEwICsxNDcwLDEwIEBACiAKICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMikgewogICAgICAgICBjb25zdCBjaGFyIGJvb2xfb3AgPSBwID8gTkVXVFJVRSA6IE5FV0ZBTFNFOwotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmYm9vbF9vcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmJvb2xfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZWxzZSBpZiAocGlja2xlcl93cml0ZShzZWxmLCBidWZbcF0sIGxlbltwXSkgPCAwKQorICAgIGVsc2UgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGJ1ZltwXSwgbGVuW3BdKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHJldHVybiAwOwpAQCAtODYxLDcgKzE0OTUsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgcGRhdGFbMF0gPSBMT05HOyAgICAgICAgLyogdXNlIExPTkcgZm9yIGNvbnNpc3RlbmN5IHdpdGggcGlja2xlLnB5ICovCiAgICAgICAgIFB5T1Nfc25wcmludGYocGRhdGEgKyAxLCBzaXplb2YocGRhdGEpIC0gMSwgIiVsZExcbiIsIHgpOwotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBwZGF0YSwgc3RybGVuKHBkYXRhKSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIHN0cmxlbihwZGF0YSkpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC04ODYsNyArMTUyMCw3IEBACiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtOTIyLDcgKzE1NTYsNyBAQAogICAgICAgICBpZiAoc2lnbiA9PSAwKSB7CiAgICAgICAgICAgICBoZWFkZXJbMF0gPSBMT05HMTsKICAgICAgICAgICAgIGhlYWRlclsxXSA9IDA7ICAgICAgLyogSXQncyAwIC0tIGFuIGVtcHR5IGJ5dGVzdHJpbmcuICovCi0gICAgICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBoZWFkZXIsIDIpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIDIpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTk4Myw4ICsxNjE3LDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNpemUgPSA1OwogICAgICAgICB9Ci0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsIGhlYWRlciwgc2l6ZSkgPCAwIHx8Ci0gICAgICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsIChjaGFyICopcGRhdGEsIChpbnQpbmJ5dGVzKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIHNpemUpIDwgMCB8fAorICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgKGNoYXIgKilwZGF0YSwgKGludCluYnl0ZXMpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgewpAQCAtMTAwMiw5ICsxNjM2LDkgQEAKICAgICAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmbG9uZ19vcCwgMSkgPCAwIHx8Ci0gICAgICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsIHN0cmluZywgc2l6ZSkgPCAwIHx8Ci0gICAgICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsICJMXG4iLCAyKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbG9uZ19vcCwgMSkgPCAwIHx8CisgICAgICAgICAgICBfUGlja2xlcl9Xcml0ZShzZWxmLCBzdHJpbmcsIHNpemUpIDwgMCB8fAorICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgIkxcbiIsIDIpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCkBAIC0xMDI3LDcgKzE2NjEsNyBAQAogICAgICAgICBwZGF0YVswXSA9IEJJTkZMT0FUOwogICAgICAgICBpZiAoX1B5RmxvYXRfUGFjazgoeCwgKHVuc2lnbmVkIGNoYXIgKikmcGRhdGFbMV0sIDApIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIDkpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCA5KSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICB9IAogICAgIGVsc2UgewpAQCAtMTAzNSw3ICsxNjY5LDcgQEAKICAgICAgICAgY2hhciAqYnVmID0gTlVMTDsKICAgICAgICAgY2hhciBvcCA9IEZMT0FUOwogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZvcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm9wLCAxKSA8IDApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAKICAgICAgICAgYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsICdnJywgMTcsIDAsIE5VTEwpOwpAQCAtMTA0NCwxMCArMTY3OCwxMCBAQAogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgYnVmLCBzdHJsZW4oYnVmKSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgYnVmLCBzdHJsZW4oYnVmKSkgPCAwKQogICAgICAgICAgICAgZ290byBkb25lOwogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKIAogICAgICAgICByZXN1bHQgPSAwOwpAQCAtMTExMywxMCArMTc0NywxMCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgICAgICAvKiBzdHJpbmcgdG9vIGxhcmdlICovCiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBoZWFkZXIsIGxlbikgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCBsZW4pIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhvYmopLCBzaXplKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhvYmopLCBzaXplKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKICAgICAgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQpAQCAtMTI0MywxMCArMTg3NywxMCBAQAogICAgICAgICBwZGF0YVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAxNikgJiAweGZmKTsKICAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7CiAKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIDUpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCA1KSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0xMjU3LDE0ICsxODkxLDE0IEBACiAgICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZ1bmljb2RlX29wLCAxKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmdW5pY29kZV9vcCwgMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAogICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKTsKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksIHNpemUpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKQEAgLTEzMDcsOSArMTk0MSw3IEBACiBzdGF0aWMgaW50CiBzYXZlX3R1cGxlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlPYmplY3QgKm1lbW9fa2V5ID0gTlVMTDsKICAgICBpbnQgbGVuLCBpOwotICAgIGludCBzdGF0dXMgPSAwOwogCiAgICAgY29uc3QgY2hhciBtYXJrX29wID0gTUFSSzsKICAgICBjb25zdCBjaGFyIHR1cGxlX29wID0gVFVQTEU7CkBAIC0xMzMyLDQwICsxOTY0LDM1IEBACiAgICAgICAgICAgICBwZGF0YVsxXSA9IFRVUExFOwogICAgICAgICAgICAgbGVuID0gMjsKICAgICAgICAgfQotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgbGVuKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIC8qIGlkKHR1cGxlKSBpc24ndCBpbiB0aGUgbWVtbyBub3cuICBJZiBpdCBzaG93cyB1cCB0aGVyZSBhZnRlcgorICAgIC8qIFRoZSB0dXBsZSBpc24ndCBpbiB0aGUgbWVtbyBub3cuICBJZiBpdCBzaG93cyB1cCB0aGVyZSBhZnRlcgogICAgICAqIHNhdmluZyB0aGUgdHVwbGUgZWxlbWVudHMsIHRoZSB0dXBsZSBtdXN0IGJlIHJlY3Vyc2l2ZSwgaW4KICAgICAgKiB3aGljaCBjYXNlIHdlJ2xsIHBvcCBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUgc3RhY2ssIGFuZCBmZXRjaAogICAgICAqIGl0cyB2YWx1ZSBmcm9tIHRoZSBtZW1vLgogICAgICAqLwotICAgIG1lbW9fa2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7Ci0gICAgaWYgKG1lbW9fa2V5ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQogICAgIGlmIChsZW4gPD0gMyAmJiBzZWxmLT5wcm90byA+PSAyKSB7CiAgICAgICAgIC8qIFVzZSBUVVBMRXsxLDIsM30gb3Bjb2Rlcy4gKi8KICAgICAgICAgaWYgKHN0b3JlX3R1cGxlX2VsZW1lbnRzKHNlbGYsIG9iaiwgbGVuKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIGlmIChQeURpY3RfR2V0SXRlbShzZWxmLT5tZW1vLCBtZW1vX2tleSkpIHsKKyAgICAgICAgaWYgKFB5TWVtb1RhYmxlX0dldChzZWxmLT5tZW1vLCBvYmopKSB7CiAgICAgICAgICAgICAvKiBwb3AgdGhlIGxlbiBlbGVtZW50cyAqLwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICAgICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZwb3Bfb3AsIDEpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAvKiBmZXRjaCBmcm9tIG1lbW8gKi8KLSAgICAgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBtZW1vX2tleSkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgICAgICBQeV9ERUNSRUYobWVtb19rZXkpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7IC8qIE5vdCByZWN1cnNpdmUuICovCi0gICAgICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBsZW4yb3Bjb2RlICsgbGVuLCAxKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBsZW4yb3Bjb2RlICsgbGVuLCAxKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGdvdG8gbWVtb2l6ZTsKICAgICB9CkBAIC0xMzczLDQ5ICsyMDAwLDQyIEBACiAgICAgLyogcHJvdG8gPCAyIGFuZCBsZW4gPiAwLCBvciBwcm90byA+PSAyIGFuZCBsZW4gPiAzLgogICAgICAqIEdlbmVyYXRlIE1BUksgZTEgZTIgLi4uIFRVUExFCiAgICAgICovCi0gICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKHN0b3JlX3R1cGxlX2VsZW1lbnRzKHNlbGYsIG9iaiwgbGVuKSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChQeURpY3RfR2V0SXRlbShzZWxmLT5tZW1vLCBtZW1vX2tleSkpIHsKKyAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKICAgICAgICAgLyogcG9wIHRoZSBzdGFjayBzdHVmZiB3ZSBwdXNoZWQgKi8KICAgICAgICAgaWYgKHNlbGYtPmJpbikgewotICAgICAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJnBvcF9tYXJrX29wLCAxKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmcG9wX21hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBOb3RlIHRoYXQgd2UgcG9wIG9uZSBtb3JlIHRoYW4gbGVuLCB0byByZW1vdmUKICAgICAgICAgICAgICAqIHRoZSBNQVJLIHRvby4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykKLSAgICAgICAgICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmcG9wX29wLCAxKSA8IDApCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwb3Bfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIC8qIGZldGNoIGZyb20gbWVtbyAqLwotICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgbWVtb19rZXkpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBQeV9ERUNSRUYobWVtb19rZXkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgZWxzZSB7IC8qIE5vdCByZWN1cnNpdmUuICovCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZ0dXBsZV9vcCwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZ0dXBsZV9vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICBtZW1vaXplOgogICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKDApIHsKLSAgZXJyb3I6Ci0gICAgICAgIHN0YXR1cyA9IC0xOwotICAgIH0KLQotICAgIFB5X0RFQ1JFRihtZW1vX2tleSk7Ci0gICAgcmV0dXJuIHN0YXR1czsKKyAgICByZXR1cm4gMDsKIH0KIAogLyogaXRlciBpcyBhbiBpdGVyYXRvciBnaXZpbmcgaXRlbXMsIGFuZCB3ZSBiYXRjaCB1cCBjaHVua3Mgb2YKQEAgLTE0NTUsNyArMjA3NSw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKICAgICAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmYXBwZW5kX29wLCAxKSA8IDApCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmFwcGVuZF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0ODIsNyArMjEwMiw3IEBACiAgICAgICAgICAgICAvKiBPbmx5IG9uZSBpdGVtIHRvIHdyaXRlICovCiAgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBmaXJzdGl0ZW0sIDApIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJmFwcGVuZF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZhcHBlbmRfb3AsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgUHlfQ0xFQVIoZmlyc3RpdGVtKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ5MSw3ICsyMTExLDcgQEAKICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBpdGVtIHRvIHdyaXRlICovCiAKICAgICAgICAgLyogUHVtcCBvdXQgTUFSSywgaXRlbXMsIEFQUEVORFMuICovCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAogICAgICAgICBpZiAoc2F2ZShzZWxmLCBmaXJzdGl0ZW0sIDApIDwgMCkKQEAgLTE1MTcsNyArMjEzNyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmYXBwZW5kc19vcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmFwcGVuZHNfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB9IHdoaWxlIChuID09IEJBVENIU0laRSk7CkBAIC0xNTI5LDEwICsyMTQ5LDY1IEBACiAgICAgcmV0dXJuIC0xOwogfQogCisvKiBUaGlzIGlzIGEgdmFyaWFudCBvZiBiYXRjaF9saXN0KCkgYWJvdmUsIHNwZWNpYWxpemVkIGZvciBsaXN0cyAod2l0aCBubworICogc3VwcG9ydCBmb3IgbGlzdCBzdWJjbGFzc2VzKS4gTGlrZSBiYXRjaF9saXN0KCksIHdlIGJhdGNoIHVwIGNodW5rcyBvZgorICogICAgIE1BUksgaXRlbSBpdGVtIC4uLiBpdGVtIEFQUEVORFMKKyAqIG9wY29kZSBzZXF1ZW5jZXMuICBDYWxsaW5nIGNvZGUgc2hvdWxkIGhhdmUgYXJyYW5nZWQgdG8gZmlyc3QgY3JlYXRlIGFuCisgKiBlbXB0eSBsaXN0LCBvciBsaXN0LWxpa2Ugb2JqZWN0LCBmb3IgdGhlIEFQUEVORFMgdG8gb3BlcmF0ZSBvbi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqCisgKiBUaGlzIHZlcnNpb24gaXMgY29uc2lkZXJhYmx5IGZhc3RlciB0aGFuIGJhdGNoX2xpc3QoKSwgaWYgbGVzcyBnZW5lcmFsLgorICoKKyAqIE5vdGUgdGhhdCB0aGlzIG9ubHkgd29ya3MgZm9yIHByb3RvY29scyA+IDAuCisgKi8KK3N0YXRpYyBpbnQKK2JhdGNoX2xpc3RfZXhhY3QoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBQeU9iamVjdCAqaXRlbSA9IE5VTEw7CisgICAgaW50IHRoaXNfYmF0Y2gsIHRvdGFsOworCisgICAgY29uc3QgY2hhciBhcHBlbmRfb3AgPSBBUFBFTkQ7CisgICAgY29uc3QgY2hhciBhcHBlbmRzX29wID0gQVBQRU5EUzsKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworCisgICAgYXNzZXJ0KG9iaiAhPSBOVUxMKTsKKyAgICBhc3NlcnQoc2VsZi0+cHJvdG8gPiAwKTsKKyAgICBhc3NlcnQoUHlMaXN0X0NoZWNrRXhhY3Qob2JqKSk7CisKKyAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKG9iaikgPT0gMSkgeworICAgICAgICBpdGVtID0gUHlMaXN0X0dFVF9JVEVNKG9iaiwgMCk7CisgICAgICAgIGlmIChzYXZlKHNlbGYsIGl0ZW0sIDApIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZhcHBlbmRfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogV3JpdGUgaW4gYmF0Y2hlcyBvZiBCQVRDSFNJWkUuICovCisgICAgdG90YWwgPSAwOworICAgIGRvIHsKKyAgICAgICAgdGhpc19iYXRjaCA9IDA7CisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB3aGlsZSAodG90YWwgPCBQeUxpc3RfR0VUX1NJWkUob2JqKSkgeworICAgICAgICAgICAgaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShvYmosIHRvdGFsKTsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIGl0ZW0sIDApIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB0b3RhbCsrOworICAgICAgICAgICAgaWYgKCsrdGhpc19iYXRjaCA9PSBCQVRDSFNJWkUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZhcHBlbmRzX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICB9IHdoaWxlICh0b3RhbCA8IFB5TGlzdF9HRVRfU0laRShvYmopKTsKKworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBzYXZlX2xpc3QoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqaXRlcjsKICAgICBjaGFyIGhlYWRlclszXTsKICAgICBpbnQgbGVuOwogICAgIGludCBzdGF0dXMgPSAwOwpAQCAtMTU1MSw3ICsyMjI2LDcgQEAKICAgICAgICAgbGVuID0gMjsKICAgICB9CiAKLSAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBoZWFkZXIsIGxlbikgPCAwKQorICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIGxlbikgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgLyogR2V0IGxpc3QgbGVuZ3RoLCBhbmQgYm93IG91dCBlYXJseSBpZiBlbXB0eS4gKi8KQEAgLTE1NjIsMTkgKzIyMzcsMjYgQEAKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAvKiBTYXZlIHRoZSBsaXN0IGVsZW1lbnRzLiAqLwotICAgICAgICBpdGVyID0gUHlPYmplY3RfR2V0SXRlcihvYmopOwotICAgICAgICBpZiAoaXRlciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIHBpY2tsaW5nIGFuIG9iamVjdCIpKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHN0YXR1cyA9IGJhdGNoX2xpc3Qoc2VsZiwgaXRlcik7Ci0gICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgICAgICBQeV9ERUNSRUYoaXRlcik7Ci0gICAgfQorICAgICAgICAvKiBNYXRlcmlhbGl6ZSB0aGUgbGlzdCBlbGVtZW50cy4gKi8KKyAgICAgICAgaWYgKFB5TGlzdF9DaGVja0V4YWN0KG9iaikgJiYgc2VsZi0+cHJvdG8gPiAwKSB7CisgICAgICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgcGlja2xpbmcgYW4gb2JqZWN0IikpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHN0YXR1cyA9IGJhdGNoX2xpc3RfZXhhY3Qoc2VsZiwgb2JqKTsKKyAgICAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKG9iaik7CisgICAgICAgICAgICBpZiAoaXRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKKyAgICAgICAgICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdHVzID0gYmF0Y2hfbGlzdChzZWxmLCBpdGVyKTsKKyAgICAgICAgICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOworICAgICAgICAgICAgUHlfREVDUkVGKGl0ZXIpOworICAgICAgICB9CisgICAgfQogICAgIGlmICgwKSB7CiAgIGVycm9yOgogICAgICAgICBzdGF0dXMgPSAtMTsKQEAgLTE2MzAsNyArMjMxMiw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKICAgICAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmc2V0aXRlbV9vcCwgMSkgPCAwKQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzZXRpdGVtX29wLCAxKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY2NCw3ICsyMzQ2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgaWYgKHNhdmUoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShmaXJzdGl0ZW0sIDEpLCAwKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZzZXRpdGVtX29wLCAxKSA8IDApCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnNldGl0ZW1fb3AsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgUHlfQ0xFQVIoZmlyc3RpdGVtKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY3Myw3ICsyMzU1LDcgQEAKICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBpdGVtIHRvIHdyaXRlICovCiAKICAgICAgICAgLyogUHVtcCBvdXQgTUFSSywgaXRlbXMsIFNFVElURU1TLiAqLwotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAgICAgaWYgKHNhdmUoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShmaXJzdGl0ZW0sIDApLCAwKSA8IDApCkBAIC0xNjg5LDcgKzIzNzEsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJkaWN0IGl0ZW1zICIKICAgICAgICAgICAgICAgICAgICAgIml0ZXJhdG9yIG11c3QgcmV0dXJuIDItdHVwbGVzIik7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLQkJCX0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0ob2JqLCAwKSwgMCkgPCAwIHx8CiAgICAgICAgICAgICAgICAgc2F2ZShzZWxmLCBQeVR1cGxlX0dFVF9JVEVNKG9iaiwgMSksIDApIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTcwNyw3ICsyMzg5LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZzZXRpdGVtc19vcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnNldGl0ZW1zX29wLCAxKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgfSB3aGlsZSAobiA9PSBCQVRDSFNJWkUpOwpAQCAtMTc1MSw3ICsyNDMzLDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHNhdmUoc2VsZiwgdmFsdWUsIDApIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJnNldGl0ZW1fb3AsIDEpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzZXRpdGVtX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE3NTksNyArMjQ0MSw3IEBACiAgICAgLyogV3JpdGUgaW4gYmF0Y2hlcyBvZiBCQVRDSFNJWkUuICovCiAgICAgZG8gewogICAgICAgICBpID0gMDsKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJm1hcmtfb3AsIDEpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChvYmosICZwcG9zLCAma2V5LCAmdmFsdWUpKSB7CiAgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBrZXksIDApIDwgMCkKQEAgLTE3NjksNyArMjQ1MSw3IEBACiAgICAgICAgICAgICBpZiAoKytpID09IEJBVENIU0laRSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmc2V0aXRlbXNfb3AsIDEpIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzZXRpdGVtc19vcCwgMSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoUHlEaWN0X1NpemUob2JqKSAhPSBkaWN0X3NpemUpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKQEAgLTE4MDQsNyArMjQ4Niw3IEBACiAgICAgICAgIGxlbiA9IDI7CiAgICAgfQogCi0gICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgaGVhZGVyLCBsZW4pIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgaGVhZGVyLCBsZW4pIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIC8qIEdldCBkaWN0IHNpemUsIGFuZCBib3cgb3V0IGVhcmx5IGlmIGVtcHR5LiAqLwpAQCAtMTk3Miw3ICsyNjU0LDcgQEAKICAgICAgICAgICAgIG4gPSA1OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgcGRhdGEsIG4pIDwgMCkKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBuKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTE5ODMsNyArMjY2NSw3IEBACiAgICAgICAgIFB5T2JqZWN0ICooKnVuaWNvZGVfZW5jb2RlcikoUHlPYmplY3QgKik7CiAKICAgZ2VuX2dsb2JhbDoKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmdsb2JhbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAogICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZSBib3RoCkBAIC0yMDYzLDEzICsyNzQ1LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBtb2R1bGVfbmFtZSwgc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICBpZihwaWNrbGVyX3dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAogICAgICAgICAvKiBTYXZlIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuICovCkBAIC0yMDgxLDEzICsyNzYzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8pOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpKSA8IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICBpZihwaWNrbGVyX3dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKIAogICAgICAgICAvKiBNZW1vaXplIHRoZSBvYmplY3QuICovCkBAIC0yMTE2LDE0ICsyNzk4LDE0IEBACiAgICAgY29uc3QgY2hhciBiaW5wZXJzaWRfb3AgPSBCSU5QRVJTSUQ7CiAKICAgICBQeV9JTkNSRUYob2JqKTsKLSAgICBwaWQgPSBwaWNrbGVyX2NhbGwoc2VsZiwgZnVuYywgb2JqKTsKKyAgICBwaWQgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCBmdW5jLCBvYmopOwogICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKHBpZCAhPSBQeV9Ob25lKSB7CiAgICAgICAgIGlmIChzZWxmLT5iaW4pIHsKICAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIHBpZCwgMSkgPCAwIHx8Ci0gICAgICAgICAgICAgICAgcGlja2xlcl93cml0ZShzZWxmLCAmYmlucGVyc2lkX29wLCAxKSA8IDApCisgICAgICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmJpbnBlcnNpZF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC0yMTQzLDkgKzI4MjUsOSBAQAogICAgICAgICAgICAgaWYgKHBpZF9hc2NpaV9ieXRlcyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgICAgIGlmIChwaWNrbGVyX3dyaXRlKHNlbGYsICZwZXJzaWRfb3AsIDEpIDwgMCB8fAotICAgICAgICAgICAgICAgIHBpY2tsZXJfd3JpdGUoc2VsZiwgcGlkX2FzY2lpX2J5dGVzLCBzaXplKSA8IDAgfHwKLSAgICAgICAgICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmcGVyc2lkX29wLCAxKSA8IDAgfHwKKyAgICAgICAgICAgICAgICBfUGlja2xlcl9Xcml0ZShzZWxmLCBwaWRfYXNjaWlfYnl0ZXMsIHNpemUpIDwgMCB8fAorICAgICAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHN0YXR1cyA9IDE7CkBAIC0yMjMwLDYgKzI5MTIsOCBAQAogCiAgICAgICAgIGlmIChuZXdvYmpfc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIG5ld29ial9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uZXdvYmpfXyIpOworICAgICAgICAgICAgaWYgKG5ld29ial9zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAogICAgICAgICBuYW1lX3N0ciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY2FsbGFibGUsICJfX25hbWVfXyIpOwpAQCAtMjMyMiwxMyArMzAwNiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgICAgIC8qIEFkZCBORVdPQkogb3Bjb2RlLiAqLwotICAgICAgICBpZiAocGlja2xlcl93cml0ZShzZWxmLCAmbmV3b2JqX29wLCAxKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbmV3b2JqX29wLCAxKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGVsc2UgeyAvKiBOb3QgdXNpbmcgTkVXT0JKLiAqLwogICAgICAgICBpZiAoc2F2ZShzZWxmLCBjYWxsYWJsZSwgMCkgPCAwIHx8CiAgICAgICAgICAgICBzYXZlKHNlbGYsIGFyZ3R1cCwgMCkgPCAwIHx8Ci0gICAgICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsICZyZWR1Y2Vfb3AsIDEpIDwgMCkKKyAgICAgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZyZWR1Y2Vfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTIzNDcsNyArMzAzMSw3IEBACiAKICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgaWYgKHNhdmUoc2VsZiwgc3RhdGUsIDApIDwgMCB8fCAKLSAgICAgICAgICAgIHBpY2tsZXJfd3JpdGUoc2VsZiwgJmJ1aWxkX29wLCAxKSA8IDApCisgICAgICAgICAgICBfUGlja2xlcl9Xcml0ZShzZWxmLCAmYnVpbGRfb3AsIDEpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTIzNjAsNyArMzA0NCw2IEBACiAgICAgUHlUeXBlT2JqZWN0ICp0eXBlOwogICAgIFB5T2JqZWN0ICpyZWR1Y2VfZnVuYyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm1lbW9fa2V5ID0gTlVMTDsKICAgICBpbnQgc3RhdHVzID0gMDsKIAogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSkKQEAgLTIzODAsMTEgKzMwNjMsMTAgQEAKIAogICAgIHR5cGUgPSBQeV9UWVBFKG9iaik7CiAKLSAgICAvKiBYWFg6IFRoZSBvbGQgY1BpY2tsZSBoYWQgYW4gb3B0aW1pemF0aW9uIHRoYXQgdXNlZCBzd2l0Y2gtY2FzZQotICAgICAgIHN0YXRlbWVudCBkaXNwYXRjaGluZyBvbiB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSB0eXBlIG5hbWUuIEl0IHdhcwotICAgICAgIHByb2JhYmx5IG5vdCBhIGJhZCBpZGVhIGFmdGVyIGFsbC4gSWYgYmVuY2htYXJrcyBzaG93cyB0aGF0IHBhcnRpY3VsYXIKLSAgICAgICBvcHRpbWl6YXRpb24gaGFkIHNvbWUgcmVhbCBiZW5lZml0cywgaXQgd291bGQgYmUgbmljZSB0byBhZGQgaXQKLSAgICAgICBiYWNrLiAqLworICAgIC8qIFRoZSBvbGQgY1BpY2tsZSBoYWQgYW4gb3B0aW1pemF0aW9uIHRoYXQgdXNlZCBzd2l0Y2gtY2FzZSBzdGF0ZW1lbnQKKyAgICAgICBkaXNwYXRjaGluZyBvbiB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSB0eXBlIG5hbWUuICBUaGlzIGhhcyB3YXMgcmVtb3ZlZAorICAgICAgIHNpbmNlIGJlbmNobWFya3Mgc2hvd24gdGhhdCB0aGlzIG9wdGltaXphdGlvbiB3YXMgYWN0dWFsbHkgc2xvd2luZworICAgICAgIHRoaW5ncyBkb3duLiAqLwogCiAgICAgLyogQXRvbSB0eXBlczsgdGhlc2UgYXJlbid0IG1lbW9pemVkLCBzbyBkb24ndCBjaGVjayB0aGUgbWVtby4gKi8KIApAQCAtMjQwOCwxMSArMzA5MCw4IEBACiAgICAgLyogQ2hlY2sgdGhlIG1lbW8gdG8gc2VlIGlmIGl0IGhhcyB0aGUgb2JqZWN0LiBJZiBzbywgZ2VuZXJhdGUKICAgICAgICBhIEdFVCAob3IgQklOR0VUKSBvcGNvZGUsIGluc3RlYWQgb2YgcGlja2xpbmcgdGhlIG9iamVjdAogICAgICAgIG9uY2UgYWdhaW4uICovCi0gICAgbWVtb19rZXkgPSBQeUxvbmdfRnJvbVZvaWRQdHIob2JqKTsKLSAgICBpZiAobWVtb19rZXkgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoUHlEaWN0X0dldEl0ZW0oc2VsZi0+bWVtbywgbWVtb19rZXkpKSB7Ci0gICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBtZW1vX2tleSkgPCAwKQorICAgIGlmIChQeU1lbW9UYWJsZV9HZXQoc2VsZi0+bWVtbywgb2JqKSkgeworICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQpAQCAtMjQ3NSw3ICszMTU0LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgUHlfSU5DUkVGKHJlZHVjZV9mdW5jKTsKICAgICAgICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgICAgIHJlZHVjZV92YWx1ZSA9IHBpY2tsZXJfY2FsbChzZWxmLCByZWR1Y2VfZnVuYywgb2JqKTsKKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgcmVkdWNlX2Z1bmMsIG9iaik7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBzdGF0aWMgUHlPYmplY3QgKnJlZHVjZV9zdHIgPSBOVUxMOwpAQCAtMjUwNSw3ICszMTg0LDcgQEAKICAgICAgICAgICAgIFB5T2JqZWN0ICpwcm90bzsKICAgICAgICAgICAgIHByb3RvID0gUHlMb25nX0Zyb21Mb25nKHNlbGYtPnByb3RvKTsKICAgICAgICAgICAgIGlmIChwcm90byAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gcGlja2xlcl9jYWxsKHNlbGYsIHJlZHVjZV9mdW5jLCBwcm90byk7CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgcmVkdWNlX2Z1bmMsIHByb3RvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKQEAgLTI1NDgsNyArMzIyNyw2IEBACiAgICAgfQogICBkb25lOgogICAgIFB5X0xlYXZlUmVjdXJzaXZlQ2FsbCgpOwotICAgIFB5X1hERUNSRUYobWVtb19rZXkpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX2Z1bmMpOwogICAgIFB5X1hERUNSRUYocmVkdWNlX3ZhbHVlKTsKIApAQCAtMjU2NiwxMyArMzI0NCwxMiBAQAogICAgICAgICBoZWFkZXJbMF0gPSBQUk9UTzsKICAgICAgICAgYXNzZXJ0KHNlbGYtPnByb3RvID49IDAgJiYgc2VsZi0+cHJvdG8gPCAyNTYpOwogICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcilzZWxmLT5wcm90bzsKLSAgICAgICAgaWYgKHBpY2tsZXJfd3JpdGUoc2VsZiwgaGVhZGVyLCAyKSA8IDApCisgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIDIpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoc2F2ZShzZWxmLCBvYmosIDApIDwgMCB8fAotICAgICAgICBwaWNrbGVyX3dyaXRlKHNlbGYsICZzdG9wX29wLCAxKSA8IDAgfHwKLSAgICAgICAgcGlja2xlcl93cml0ZShzZWxmLCBOVUxMLCAwKSA8IDApCisgICAgICAgIF9QaWNrbGVyX1dyaXRlKHNlbGYsICZzdG9wX29wLCAxKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHJldHVybiAwOwpAQCAtMjU5MCw3ICszMjY3LDcgQEAKIFBpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIGlmIChzZWxmLT5tZW1vKQotICAgICAgICBQeURpY3RfQ2xlYXIoc2VsZi0+bWVtbyk7CisgICAgICAgIFB5TWVtb1RhYmxlX0NsZWFyKHNlbGYtPm1lbW8pOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CkBAIC0yNjE2LDkgKzMyOTMsMTUgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZHVtcCIsICZvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKGR1bXAoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgaWYgKF9QaWNrbGVyX0ZsdXNoVG9GaWxlKHNlbGYpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIApAQCAtMjYzNSwxMyArMzMxOCwxMyBAQAogewogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc2VsZik7CiAKKyAgICBQeV9YREVDUkVGKHNlbGYtPm91dHB1dF9idWZmZXIpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+d3JpdGUpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+bWVtbyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+YXJnKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmZhc3RfbWVtbyk7CiAKLSAgICBQeU1lbV9GcmVlKHNlbGYtPndyaXRlX2J1Zik7CisgICAgUHlNZW1vVGFibGVfRGVsKHNlbGYtPm1lbW8pOwogCiAgICAgUHlfVFlQRShzZWxmKS0+dHBfZnJlZSgoUHlPYmplY3QgKilzZWxmKTsKIH0KQEAgLTI2NTAsNyArMzMzMyw2IEBACiBQaWNrbGVyX3RyYXZlcnNlKFBpY2tsZXJPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5X1ZJU0lUKHNlbGYtPndyaXRlKTsKLSAgICBQeV9WSVNJVChzZWxmLT5tZW1vKTsKICAgICBQeV9WSVNJVChzZWxmLT5wZXJzX2Z1bmMpOwogICAgIFB5X1ZJU0lUKHNlbGYtPmFyZyk7CiAgICAgUHlfVklTSVQoc2VsZi0+ZmFzdF9tZW1vKTsKQEAgLTI2NjAsMTggKzMzNDIsMjEgQEAKIHN0YXRpYyBpbnQKIFBpY2tsZXJfY2xlYXIoUGlja2xlck9iamVjdCAqc2VsZikKIHsKKyAgICBQeV9DTEVBUihzZWxmLT5vdXRwdXRfYnVmZmVyKTsKICAgICBQeV9DTEVBUihzZWxmLT53cml0ZSk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+bWVtbyk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9DTEVBUihzZWxmLT5hcmcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmZhc3RfbWVtbyk7CiAKLSAgICBQeU1lbV9GcmVlKHNlbGYtPndyaXRlX2J1Zik7Ci0gICAgc2VsZi0+d3JpdGVfYnVmID0gTlVMTDsKLQorICAgIGlmIChzZWxmLT5tZW1vICE9IE5VTEwpIHsKKyAgICAgICAgUHlNZW1vVGFibGUgKm1lbW8gPSBzZWxmLT5tZW1vOworICAgICAgICBzZWxmLT5tZW1vID0gTlVMTDsKKyAgICAgICAgUHlNZW1vVGFibGVfRGVsKG1lbW8pOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAorCiBQeURvY19TVFJWQVIoUGlja2xlcl9kb2MsCiAiUGlja2xlcihmaWxlLCBwcm90b2NvbD1Ob25lKSIKICJcbiIKQEAgLTI3MDIsMTAgKzMzODcsOSBAQAogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OwogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICpwcm90b19vYmogPSBOVUxMOwotICAgIGxvbmcgcHJvdG8gPSAwOwotICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9pOlBpY2tsZXIiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POlBpY2tsZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJmZpbGUsICZwcm90b19vYmosICZmaXhfaW1wb3J0cykpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMjcxMyw0NCArMzM5NywzMSBAQAogICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMKQogICAgICAgICAodm9pZClQaWNrbGVyX2NsZWFyKHNlbGYpOwogCi0gICAgaWYgKHByb3RvX29iaiA9PSBOVUxMIHx8IHByb3RvX29iaiA9PSBQeV9Ob25lKQotICAgICAgICBwcm90byA9IERFRkFVTFRfUFJPVE9DT0w7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHByb3RvID0gUHlMb25nX0FzTG9uZyhwcm90b19vYmopOwotICAgICAgICBpZiAocHJvdG8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9fb2JqLCBmaXhfaW1wb3J0cykgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoX1BpY2tsZXJfU2V0T3V0cHV0U3RyZWFtKHNlbGYsIGZpbGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogbWVtbyBhbmQgb3V0cHV0X2J1ZmZlciBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gY3JlYXRlZCBpbiBfUGlja2xlcl9OZXcgKi8KKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKSB7CisgICAgICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKKyAgICAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc2VsZi0+b3V0cHV0X2xlbiA9IDA7CisgICAgaWYgKHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgeworICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IFdSSVRFX0JVRl9TSVpFOworICAgICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbik7CisgICAgICAgIGlmIChzZWxmLT5vdXRwdXRfYnVmZmVyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHByb3RvIDwgMCkKLSAgICAgICAgcHJvdG8gPSBISUdIRVNUX1BST1RPQ09MOwotICAgIGlmIChwcm90byA+IEhJR0hFU1RfUFJPVE9DT0wpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJwaWNrbGUgcHJvdG9jb2wgbXVzdCBiZSA8PSAlZCIsCi0gICAgICAgICAgICAgICAgICAgICBISUdIRVNUX1BST1RPQ09MKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIHNlbGYtPnByb3RvID0gcHJvdG87Ci0gICAgc2VsZi0+YmluID0gcHJvdG8gPiAwOwogICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+ZmFzdCA9IDA7CiAgICAgc2VsZi0+ZmFzdF9uZXN0aW5nID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwotICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHMgJiYgcHJvdG8gPCAzOwotCi0gICAgaWYgKCFQeU9iamVjdF9IYXNBdHRyU3RyaW5nKGZpbGUsICJ3cml0ZSIpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZmlsZSBtdXN0IGhhdmUgYSAnd3JpdGUnIGF0dHJpYnV0ZSIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHNlbGYtPndyaXRlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmaWxlLCAid3JpdGUiKTsKLSAgICBpZiAoc2VsZi0+d3JpdGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCXNlbGYtPmJ1Zl9zaXplID0gMDsKLSAgICBzZWxmLT53cml0ZV9idWYgPSAoY2hhciAqKVB5TWVtX01hbGxvYyhXUklURV9CVUZfU0laRSk7Ci0gICAgaWYgKHNlbGYtPndyaXRlX2J1ZiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9CiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAicGVyc2lzdGVudF9pZCIpKSB7CiAgICAgICAgIHNlbGYtPnBlcnNfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoKFB5T2JqZWN0ICopc2VsZiwKQEAgLTI3NTgsNDQgKzM0MjksMjQ4IEBACiAgICAgICAgIGlmIChzZWxmLT5wZXJzX2Z1bmMgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2VsZi0+bWVtbyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KICAgICByZXR1cm4gMDsKIH0KIAorLyogRGVmaW5lIGEgcHJveHkgb2JqZWN0IGZvciB0aGUgUGlja2xlcidzIGludGVybmFsIG1lbW8gb2JqZWN0LiBUaGlzIGlzIHRvCisgKiBhdm9pZCBicmVha2luZyBjb2RlIGxpa2U6CisgKiAgcGlja2xlci5tZW1vLmNsZWFyKCkKKyAqIGFuZAorICogIHBpY2tsZXIubWVtbyA9IHNhdmVkX21lbW8KKyAqIElzIHRoaXMgYSBnb29kIGlkZWE/IE5vdCByZWFsbHksIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGNvZGUgdGhhdCB1c2VzCisgKiBpdC4gTm90ZSB0aGF0IHdlIGRvbid0IGltcGxlbWVudCB0aGUgZW50aXJlIG1hcHBpbmcgQVBJIGhlcmUuIFRoaXMgaXMKKyAqIGludGVudGlvbmFsLCBhcyB0aGVzZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFjay1ib3ggaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7IC8qIFBpY2tsZXIgd2hvc2UgbWVtbyB0YWJsZSB3ZSdyZSBwcm94eWluZy4gKi8KK30gUGlja2xlck1lbW9Qcm94eU9iamVjdDsKKworUHlEb2NfU1RSVkFSKHBtcF9jbGVhcl9kb2MsCisibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BtcF9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5waWNrbGVyLT5tZW1vKQorICAgICAgICBQeU1lbW9UYWJsZV9DbGVhcihzZWxmLT5waWNrbGVyLT5tZW1vKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHBtcF9jb3B5X2RvYywKKyJtZW1vLmNvcHkoKSAtPiBuZXdfbWVtby4gIENvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcG1wX2NvcHkoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgUHlNZW1vVGFibGUgKm1lbW87CisgICAgUHlPYmplY3QgKm5ld19tZW1vID0gUHlEaWN0X05ldygpOworICAgIGlmIChuZXdfbWVtbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG1lbW8gPSBzZWxmLT5waWNrbGVyLT5tZW1vOworICAgIGZvciAoaSA9IDA7IGkgPCBtZW1vLT5tdF9hbGxvY2F0ZWQ7ICsraSkgeworICAgICAgICBQeU1lbW9FbnRyeSBlbnRyeSA9IG1lbW8tPm10X3RhYmxlW2ldOworICAgICAgICBpZiAoZW50cnkubWVfa2V5ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGludCBzdGF0dXM7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisKKyAgICAgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tVm9pZFB0cihlbnRyeS5tZV9rZXkpOworICAgICAgICAgICAgdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJsTyIsIGVudHJ5Lm1lX3ZhbHVlLCBlbnRyeS5tZV9rZXkpOworCisgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdHVzID0gUHlEaWN0X1NldEl0ZW0obmV3X21lbW8sIGtleSwgdmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgaWYgKHN0YXR1cyA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbmV3X21lbW87CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihuZXdfbWVtbyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihwbXBfcmVkdWNlX2RvYywKKyJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BtcF9yZWR1Y2UoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSwgKmRpY3RfYXJnczsKKyAgICBQeU9iamVjdCAqY29udGVudHMgPSBwbXBfY29weShzZWxmKTsKKyAgICBpZiAoY29udGVudHMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZWR1Y2VfdmFsdWUgPSBQeVR1cGxlX05ldygyKTsKKyAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGNvbnRlbnRzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGRpY3RfYXJncyA9IFB5VHVwbGVfTmV3KDEpOworICAgIGlmIChkaWN0X2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoY29udGVudHMpOworICAgICAgICBQeV9ERUNSRUYocmVkdWNlX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0oZGljdF9hcmdzLCAwLCBjb250ZW50cyk7CisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZQeURpY3RfVHlwZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZWR1Y2VfdmFsdWUsIDAsIChQeU9iamVjdCAqKSZQeURpY3RfVHlwZSk7CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZWR1Y2VfdmFsdWUsIDEsIGRpY3RfYXJncyk7CisgICAgcmV0dXJuIHJlZHVjZV92YWx1ZTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7CisgICAgeyJjbGVhciIsICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jbGVhciwgIE1FVEhfTk9BUkdTLCAgcG1wX2NsZWFyX2RvY30sCisgICAgeyJjb3B5IiwgICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jb3B5LCAgIE1FVEhfTk9BUkdTLCAgcG1wX2NvcHlfZG9jfSwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pcG1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCBwbXBfcmVkdWNlX2RvY30sCisgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgdm9pZAorUGlja2xlck1lbW9Qcm94eV9kZWFsbG9jKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzZWxmKTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPnBpY2tsZXIpOworICAgIFB5T2JqZWN0X0dDX0RlbCgoUHlPYmplY3QgKilzZWxmKTsKK30KKworc3RhdGljIGludAorUGlja2xlck1lbW9Qcm94eV90cmF2ZXJzZShQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChzZWxmLT5waWNrbGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorUGlja2xlck1lbW9Qcm94eV9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X0NMRUFSKHNlbGYtPnBpY2tsZXIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgUHlUeXBlT2JqZWN0IFBpY2tsZXJNZW1vUHJveHlUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkiLCAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoUGlja2xlck1lbW9Qcm94eU9iamVjdCksICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLAorICAgIChkZXN0cnVjdG9yKVBpY2tsZXJNZW1vUHJveHlfZGVhbGxvYywgICAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQsICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYylQaWNrbGVyTWVtb1Byb3h5X3RyYXZlcnNlLCAgICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVBpY2tsZXJNZW1vUHJveHlfY2xlYXIsICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICBwaWNrbGVycHJveHlfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitQaWNrbGVyTWVtb1Byb3h5X05ldyhQaWNrbGVyT2JqZWN0ICpwaWNrbGVyKQoreworICAgIFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGY7CisKKyAgICBzZWxmID0gUHlPYmplY3RfR0NfTmV3KFBpY2tsZXJNZW1vUHJveHlPYmplY3QsICZQaWNrbGVyTWVtb1Byb3h5VHlwZSk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKHBpY2tsZXIpOworICAgIHNlbGYtPnBpY2tsZXIgPSBwaWNrbGVyOworICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBQaWNrbGVyX2dldF9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAibWVtbyIpOwotICAgIGVsc2UKLSAgICAgICAgUHlfSU5DUkVGKHNlbGYtPm1lbW8pOwotICAgIHJldHVybiBzZWxmLT5tZW1vOworICAgIHJldHVybiBQaWNrbGVyTWVtb1Byb3h5X05ldyhzZWxmKTsKIH0KIAogc3RhdGljIGludAotUGlja2xlcl9zZXRfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdmFsdWUpCitQaWNrbGVyX3NldF9tZW1vKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlPYmplY3QgKnRtcDsKKyAgICBQeU1lbW9UYWJsZSAqbmV3X21lbW8gPSBOVUxMOwogCi0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJhdHRyaWJ1dGUgZGVsZXRpb24gaXMgbm90IHN1cHBvcnRlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmICghUHlEaWN0X0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAibWVtbyBtdXN0IGJlIGEgZGljdGlvbmFyeSIpOworCisgICAgaWYgKFB5X1RZUEUob2JqKSA9PSAmUGlja2xlck1lbW9Qcm94eVR5cGUpIHsKKyAgICAgICAgUGlja2xlck9iamVjdCAqcGlja2xlciA9CisgICAgICAgICAgICAoKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKilvYmopLT5waWNrbGVyOworCisgICAgICAgIG5ld19tZW1vID0gUHlNZW1vVGFibGVfQ29weShwaWNrbGVyLT5tZW1vKTsKKyAgICAgICAgaWYgKG5ld19tZW1vID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgaWYgKFB5RGljdF9DaGVjayhvYmopKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKworICAgICAgICBuZXdfbWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOworICAgICAgICBpZiAobmV3X21lbW8gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQob2JqLCAmaSwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICAgICAgbG9uZyBtZW1vX2lkOworICAgICAgICAgICAgUHlPYmplY3QgKm1lbW9fb2JqOworCisgICAgICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sodmFsdWUpIHx8IFB5X1NJWkUodmFsdWUpICE9IDIpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ21lbW8nIHZhbHVlcyBtdXN0IGJlIDItaXRlbSB0dXBsZXMiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtb19pZCA9IFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgMCkpOworICAgICAgICAgICAgaWYgKG1lbW9faWQgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbWVtb19vYmogPSBQeVR1cGxlX0dFVF9JVEVNKHZhbHVlLCAxKTsKKyAgICAgICAgICAgIGlmIChQeU1lbW9UYWJsZV9TZXQobmV3X21lbW8sIG1lbW9fb2JqLCBtZW1vX2lkKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICInbWVtbycgYXR0cmlidXRlIG11c3QgYmUgYW4gUGlja2xlck1lbW9Qcm94eSBvYmplY3QiCisgICAgICAgICAgICAgICAgICAgICAib3IgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICB0bXAgPSBzZWxmLT5tZW1vOwotICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgc2VsZi0+bWVtbyA9IHZhbHVlOwotICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICBQeU1lbW9UYWJsZV9EZWwoc2VsZi0+bWVtbyk7CisgICAgc2VsZi0+bWVtbyA9IG5ld19tZW1vOwogCiAgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgaWYgKG5ld19tZW1vKQorICAgICAgICBQeU1lbW9UYWJsZV9EZWwobmV3X21lbW8pOworICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI5MzYsMjEgKzM4MTEsMjIgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBsb25nIHg7CiAKLSAgICBpZiAoKGxlbiA9IHVucGlja2xlcl9yZWFkbGluZShzZWxmLCAmcykpIDwgMCkKKyAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAobGVuIDwgMikKICAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwogCiAgICAgZXJybm8gPSAwOwotICAgIC8qIFhYWDogU2hvdWxkIHRoZSBiYXNlIGFyZ3VtZW50IG9mIHN0cnRvbCgpIGJlIGV4cGxpY2l0bHkgc2V0IHRvIDEwPyAqLworICAgIC8qIFhYWDogU2hvdWxkIHRoZSBiYXNlIGFyZ3VtZW50IG9mIHN0cnRvbCgpIGJlIGV4cGxpY2l0bHkgc2V0IHRvIDEwPyAKKyAgICAgICBYWFgoYXZhc3NhbG90dGkpOiBTaG91bGQgdGhpcyB1c2VzIFB5T1Nfc3RydG9sKCk/ICovCiAgICAgeCA9IHN0cnRvbChzLCAmZW5kcHRyLCAwKTsKIAotICAgIGlmIChlcnJubyB8fCAoKmVuZHB0ciAhPSAnXG4nKSB8fCAoZW5kcHRyWzFdICE9ICdcMCcpKSB7CisgICAgaWYgKGVycm5vIHx8ICgqZW5kcHRyICE9ICdcbicgJiYgKmVuZHB0ciAhPSAnXDAnKSkgewogICAgICAgICAvKiBIbSwgbWF5YmUgd2UndmUgZ290IHNvbWV0aGluZyBsb25nLiAgTGV0J3MgdHJ5IHJlYWRpbmcKICAgICAgICAgICogaXQgYXMgYSBQeXRob24gbG9uZyBvYmplY3QuICovCiAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgLyogWFhYOiBTYW1lIHRoaW5nIGFib3V0IHRoZSBiYXNlIGhlcmUuICovCi0gICAgICAgIHZhbHVlID0gUHlMb25nX0Zyb21TdHJpbmcocywgTlVMTCwgMCk7IAorICAgICAgICB2YWx1ZSA9IFB5TG9uZ19Gcm9tU3RyaW5nKHMsIE5VTEwsIDApOwogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBpbnQiKTsKQEAgLTMwMjcsNyArMzkwMyw3IEBACiB7CiAgICAgY2hhciAqczsKIAotICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgcmV0dXJuIGxvYWRfYmluaW50eChzZWxmLCBzLCA0KTsKQEAgLTMwMzgsNyArMzkxNCw3IEBACiB7CiAgICAgY2hhciAqczsKIAotICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcywgMSkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgcmV0dXJuIGxvYWRfYmluaW50eChzZWxmLCBzLCAxKTsKQEAgLTMwNDksNyArMzkyNSw3IEBACiB7CiAgICAgY2hhciAqczsKIAotICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcywgMikgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDIpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgcmV0dXJuIGxvYWRfYmluaW50eChzZWxmLCBzLCAyKTsKQEAgLTMwNjIsNyArMzkzOCw3IEBACiAgICAgY2hhciAqczsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmICgobGVuID0gdW5waWNrbGVyX3JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQorICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAyKQogICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7CkBAIC0zMDcxLDkgKzM5NDcsOCBAQAogICAgICAgIHRoZSAnTCcgYmVmb3JlIGNhbGxpbmcgUHlMb25nX0Zyb21TdHJpbmcuICBJbiBvcmRlciB0byBtYWludGFpbgogICAgICAgIGNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMy4wLjAsIHdlIGRvbid0IGFjdHVhbGx5ICpyZXF1aXJlKgogICAgICAgIHRoZSAnTCcgdG8gYmUgcHJlc2VudC4gKi8KLSAgICBpZiAoc1tsZW4tMl0gPT0gJ0wnKSB7CisgICAgaWYgKHNbbGVuLTJdID09ICdMJykKICAgICAgICAgc1tsZW4tMl0gPSAnXDAnOwotICAgIH0KICAgICAvKiBYWFg6IFNob3VsZCB0aGUgYmFzZSBhcmd1bWVudCBleHBsaWNpdGx5IHNldCB0byAxMD8gKi8KICAgICB2YWx1ZSA9IFB5TG9uZ19Gcm9tU3RyaW5nKHMsIE5VTEwsIDApOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQpAQCAtMzA5NCw3ICszOTY5LDcgQEAKICAgICBjaGFyICpwZGF0YTsKIAogICAgIGFzc2VydChzaXplID09IDEgfHwgc2l6ZSA9PSA0KTsKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJm5ieXRlcywgc2l6ZSkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJm5ieXRlcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBzaXplID0gY2FsY19iaW5pbnQobmJ5dGVzLCBzaXplKTsKQEAgLTMxMDksNyArMzk4NCw3IEBACiAgICAgICAgIHZhbHVlID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKICAgICBlbHNlIHsKICAgICAgICAgLyogUmVhZCB0aGUgcmF3IGxpdHRsZS1lbmRpYW4gYnl0ZXMgYW5kIGNvbnZlcnQuICovCi0gICAgICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcGRhdGEsIHNpemUpIDwgMCkKKyAgICAgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcGRhdGEsIHNpemUpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgdmFsdWUgPSBfUHlMb25nX0Zyb21CeXRlQXJyYXkoKHVuc2lnbmVkIGNoYXIgKilwZGF0YSwgKHNpemVfdClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIC8qIGxpdHRsZSBlbmRpYW4gKi8gLCAxIC8qIHNpZ25lZCAqLyApOwpAQCAtMzEyOCw3ICs0MDAzLDcgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBkb3VibGUgZDsKIAotICAgIGlmICgobGVuID0gdW5waWNrbGVyX3JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQorICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAyKQogICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7CkBAIC0zMTM3LDcgKzQwMTIsNyBAQAogICAgIGQgPSBQeU9TX3N0cmluZ190b19kb3VibGUocywgJmVuZHB0ciwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CiAgICAgaWYgKGQgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKChlbmRwdHJbMF0gIT0gJ1xuJykgfHwgKGVuZHB0clsxXSAhPSAnXDAnKSkgeworICAgIGlmICgoZW5kcHRyWzBdICE9ICdcbicpICYmIChlbmRwdHJbMF0gIT0gJ1wwJykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gZmxvYXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTMxNDcsNyArNDAyMiw3IEBACiAKICAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCB2YWx1ZSwgLTEpOwogICAgIHJldHVybiAwOwotICAgIH0KK30KIAogc3RhdGljIGludAogbG9hZF9iaW5mbG9hdChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCkBAIC0zMTU2LDcgKzQwMzEsNyBAQAogICAgIGRvdWJsZSB4OwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDgpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHggPSBfUHlGbG9hdF9VbnBhY2s4KCh1bnNpZ25lZCBjaGFyICopcywgMCk7CkBAIC0zMTc4LDcgKzQwNTMsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGNoYXIgKnMsICpwOwogCi0gICAgaWYgKChsZW4gPSB1bnBpY2tsZXJfcmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCisgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKGxlbiA8IDMpCiAgICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKQEAgLTMyMjgsNyArNDEwMyw3IEBACiAgICAgbG9uZyB4OwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHggPSBjYWxjX2JpbmludChzLCA0KTsKQEAgLTMyMzgsNyArNDExMyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCkBAIC0zMjU1LDEyICs0MTMwLDEyIEBACiAgICAgdW5zaWduZWQgY2hhciB4OwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIHggPSAodW5zaWduZWQgY2hhcilzWzBdOwogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7CkBAIC0zMjc4LDcgKzQxNTMsNyBAQAogICAgIGxvbmcgeDsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICB4ID0gY2FsY19iaW5pbnQocywgNCk7CkBAIC0zMjg4LDcgKzQxNjMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCB4KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgeCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byB1bmljb2RlLiAqLwpAQCAtMzMwNywxMiArNDE4MiwxMiBAQAogICAgIHVuc2lnbmVkIGNoYXIgeDsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCAxKSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICB4ID0gKHVuc2lnbmVkIGNoYXIpc1swXTsKIAotICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcywgeCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogQ29udmVydCBQeXRob24gMi54IHN0cmluZ3MgdG8gdW5pY29kZS4gKi8KQEAgLTMzMzEsNyArNDIwNiw3IEBACiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgY2hhciAqczsKIAotICAgIGlmICgobGVuID0gdW5waWNrbGVyX3JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQorICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAxKQogICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7CkBAIC0zMzUxLDcgKzQyMjYsNyBAQAogICAgIGxvbmcgc2l6ZTsKICAgICBjaGFyICpzOwogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgNCkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBzaXplID0gY2FsY19iaW5pbnQocywgNCk7CkBAIC0zMzYxLDcgKzQyMzYsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBzdHIgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChzLCBzaXplLCAic3Vycm9nYXRlcGFzcyIpOwpAQCAtMzQ1NSw3ICs0MzMwLDcgQEAKIAogICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaiA9IHNlbGYtPnN0YWNrLT5sZW5ndGg7CisgICAgaiA9IFB5X1NJWkUoc2VsZi0+c3RhY2spOwogCiAgICAgaWYgKChkaWN0ID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0zNTMxLDcgKzQ0MDYsNyBAQAogCiAgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoKGxlbiA9IHVucGlja2xlcl9yZWFkbGluZShzZWxmLCAmcykpIDwgMCkKKyAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAobGVuIDwgMikKICAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwpAQCAtMzU0Myw3ICs0NDE4LDcgQEAKICAgICBpZiAobW9kdWxlX25hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKChsZW4gPSB1bnBpY2tsZXJfcmVhZGxpbmUoc2VsZiwgJnMpKSA+PSAwKSB7CisgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPj0gMCkgewogICAgICAgICBpZiAobGVuIDwgMikKICAgICAgICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKICAgICAgICAgY2xhc3NfbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVBU0NJSShzLCBsZW4gLSAxLCAic3RyaWN0Iik7CkBAIC0zNjI5LDcgKzQ1MDQsNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoKGxlbiA9IHVucGlja2xlcl9yZWFkbGluZShzZWxmLCAmcykpIDwgMCkKKyAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAobGVuIDwgMikKICAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwpAQCAtMzYzNyw3ICs0NTEyLDcgQEAKICAgICBpZiAoIW1vZHVsZV9uYW1lKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoKGxlbiA9IHVucGlja2xlcl9yZWFkbGluZShzZWxmLCAmcykpID49IDApIHsKKyAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA+PSAwKSB7CiAgICAgICAgIGlmIChsZW4gPCAyKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwpAQCAtMzY2NCw3ICs0NTM5LDcgQEAKICAgICBjaGFyICpzOwogCiAgICAgaWYgKHNlbGYtPnBlcnNfZnVuYykgewotICAgICAgICBpZiAoKGxlbiA9IHVucGlja2xlcl9yZWFkbGluZShzZWxmLCAmcykpIDwgMCkKKyAgICAgICAgaWYgKChsZW4gPSBfVW5waWNrbGVyX1JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAobGVuIDwgMikKICAgICAgICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKQEAgLTM2NzMsOSArNDU0OCw5IEBACiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIHVucGlja2xlcl9jYWxsKCkgc3RlYWxzIHRoZQorICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCiAgICAgICAgICAgIHJlZmVyZW5jZSB0byBwaWQgZmlyc3QuICovCi0gICAgICAgIHBpZCA9IHVucGlja2xlcl9jYWxsKHNlbGYsIHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKKyAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CiAgICAgICAgIGlmIChwaWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIApAQCAtMzcwMCw5ICs0NTc1LDkgQEAKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgdW5waWNrbGVyX2NhbGwoKSBzdGVhbHMgdGhlCisgICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gdW5waWNrbGVyX2NhbGwoc2VsZiwgc2VsZi0+cGVyc19mdW5jLCBwaWQpOworICAgICAgICBwaWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKICAgICAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0zNzIwLDcgKzQ1OTUsNyBAQAogc3RhdGljIGludAogbG9hZF9wb3AoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIGludCBsZW4gPSBzZWxmLT5zdGFjay0+bGVuZ3RoOworICAgIGludCBsZW4gPSBQeV9TSVpFKHNlbGYtPnN0YWNrKTsKIAogICAgIC8qIE5vdGUgdGhhdCB3ZSBzcGxpdCB0aGUgKHBpY2tsZS5weSkgc3RhY2sgaW50byB0d28gc3RhY2tzLAogICAgICAqIGFuIG9iamVjdCBzdGFjayBhbmQgYSBtYXJrIHN0YWNrLiBXZSBoYXZlIHRvIGJlIGNsZXZlciBhbmQKQEAgLTM3MzQsNyArNDYwOSw3IEBACiAgICAgfSBlbHNlIGlmIChsZW4gPiAwKSB7CiAgICAgICAgIGxlbi0tOwogICAgICAgICBQeV9ERUNSRUYoc2VsZi0+c3RhY2stPmRhdGFbbGVuXSk7Ci0gICAgICAgIHNlbGYtPnN0YWNrLT5sZW5ndGggPSBsZW47CisgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0gbGVuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKICAgICB9CkBAIC0zNzYwLDcgKzQ2MzUsNyBAQAogICAgIFB5T2JqZWN0ICpsYXN0OwogICAgIGludCBsZW47CiAKLSAgICBpZiAoKGxlbiA9IHNlbGYtPnN0YWNrLT5sZW5ndGgpIDw9IDApCisgICAgaWYgKChsZW4gPSBQeV9TSVpFKHNlbGYtPnN0YWNrKSkgPD0gMCkKICAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOwogICAgIGxhc3QgPSBzZWxmLT5zdGFjay0+ZGF0YVtsZW4gLSAxXTsKICAgICBQREFUQV9BUFBFTkQoc2VsZi0+c3RhY2ssIGxhc3QsIC0xKTsKQEAgLTM3NzEsMTAgKzQ2NDYsMTEgQEAKIGxvYWRfZ2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlfc3NpemVfdCBpZHg7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgY2hhciAqczsKIAotICAgIGlmICgobGVuID0gdW5waWNrbGVyX3JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQorICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAyKQogICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7CkBAIC0zNzgyLDggKzQ2NTgsMTMgQEAKICAgICBrZXkgPSBQeUxvbmdfRnJvbVN0cmluZyhzLCBOVUxMLCAxMCk7CiAgICAgaWYgKGtleSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CisgICAgaWR4ID0gUHlMb25nX0FzU3NpemVfdChrZXkpOworICAgIGlmIChpZHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc2VsZi0+bWVtbywga2V5KTsKKyAgICB2YWx1ZSA9IF9VbnBpY2tsZXJfTWVtb0dldChzZWxmLCBpZHgpOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19LZXlFcnJvciwga2V5KTsKQEAgLTM3OTksMjUgKzQ2ODAsMjMgQEAKIHN0YXRpYyBpbnQKIGxvYWRfYmluZ2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlPYmplY3QgKnZhbHVlOworICAgIFB5X3NzaXplX3QgaWR4OwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIC8qIEhlcmUsIHRoZSB1bnNpZ25lZCBjYXN0IGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBuZWdhdGl2ZSB2YWx1ZXMuICovCi0gICAga2V5ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSh1bnNpZ25lZCBjaGFyKXNbMF0pOwotICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlkeCA9IFB5X0NIQVJNQVNLKHNbMF0pOwogCi0gICAgdmFsdWUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzZWxmLT5tZW1vLCBrZXkpOworICAgIHZhbHVlID0gX1VucGlja2xlcl9NZW1vR2V0KHNlbGYsIGlkeCk7CiAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmtleSA9IFB5TG9uZ19Gcm9tU3NpemVfdChpZHgpOwogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CiAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5X0RFQ1JFRihrZXkpOwogCiAgICAgUERBVEFfQVBQRU5EKHNlbGYtPnN0YWNrLCB2YWx1ZSwgLTEpOwogICAgIHJldHVybiAwOwpAQCAtMzgyNiwzMCArNDcwNSwyNiBAQAogc3RhdGljIGludAogbG9hZF9sb25nX2JpbmdldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICBQeV9zc2l6ZV90IGlkeDsKICAgICBjaGFyICpzOwotICAgIGxvbmcgazsKIAotICAgIGlmICh1bnBpY2tsZXJfcmVhZChzZWxmLCAmcywgNCkgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgayA9IChsb25nKSh1bnNpZ25lZCBjaGFyKXNbMF07Ci0gICAgayB8PSAobG9uZykodW5zaWduZWQgY2hhcilzWzFdIDw8IDg7Ci0gICAgayB8PSAobG9uZykodW5zaWduZWQgY2hhcilzWzJdIDw8IDE2OwotICAgIGsgfD0gKGxvbmcpKHVuc2lnbmVkIGNoYXIpc1szXSA8PCAyNDsKKyAgICBpZHggPSAgKGxvbmcpUHlfQ0hBUk1BU0soc1swXSk7CisgICAgaWR4IHw9IChsb25nKVB5X0NIQVJNQVNLKHNbMV0pIDw8IDg7CisgICAgaWR4IHw9IChsb25nKVB5X0NIQVJNQVNLKHNbMl0pIDw8IDE2OworICAgIGlkeCB8PSAobG9uZylQeV9DSEFSTUFTSyhzWzNdKSA8PCAyNDsKIAotICAgIGtleSA9IFB5TG9uZ19Gcm9tTG9uZyhrKTsKLSAgICBpZiAoa2V5ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc2VsZi0+bWVtbywga2V5KTsKKyAgICB2YWx1ZSA9IF9VbnBpY2tsZXJfTWVtb0dldChzZWxmLCBpZHgpOwogICAgIGlmICh2YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICprZXkgPSBQeUxvbmdfRnJvbVNzaXplX3QoaWR4KTsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBQeV9ERUNSRUYoa2V5KTsKIAogICAgIFBEQVRBX0FQUEVORChzZWxmLT5zdGFjaywgdmFsdWUsIC0xKTsKICAgICByZXR1cm4gMDsKQEAgLTM4NjksNyArNDc0NCw3IEBACiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lLCAqY2xhc3NfbmFtZTsKIAogICAgIGFzc2VydChuYnl0ZXMgPT0gMSB8fCBuYnl0ZXMgPT0gMiB8fCBuYnl0ZXMgPT0gNCk7Ci0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZjb2RlYnl0ZXMsIG5ieXRlcykgPCAwKQorICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJmNvZGVieXRlcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKICAgICBjb2RlID0gY2FsY19iaW5pbnQoY29kZWJ5dGVzLCBuYnl0ZXMpOwogICAgIGlmIChjb2RlIDw9IDApIHsgICAgICAgICAgICAvKiBub3RlIHRoYXQgMCBpcyBmb3JiaWRkZW4gKi8KQEAgLTM5MzAsNzUgKzQ4MDUsNjggQEAKIGxvYWRfcHV0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlfc3NpemVfdCBpZHg7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgY2hhciAqczsKLSAgICBpbnQgeDsKIAotICAgIGlmICgobGVuID0gdW5waWNrbGVyX3JlYWRsaW5lKHNlbGYsICZzKSkgPCAwKQorICAgIGlmICgobGVuID0gX1VucGlja2xlcl9SZWFkbGluZShzZWxmLCAmcykpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGlmIChsZW4gPCAyKQogICAgICAgICByZXR1cm4gYmFkX3JlYWRsaW5lKCk7Ci0gICAgaWYgKCh4ID0gc2VsZi0+c3RhY2stPmxlbmd0aCkgPD0gMCkKKyAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykgPD0gMCkKICAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOworICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbUHlfU0laRShzZWxmLT5zdGFjaykgLSAxXTsKIAogICAgIGtleSA9IFB5TG9uZ19Gcm9tU3RyaW5nKHMsIE5VTEwsIDEwKTsKICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB2YWx1ZSA9IHNlbGYtPnN0YWNrLT5kYXRhW3ggLSAxXTsKLQotICAgIHggPSBQeURpY3RfU2V0SXRlbShzZWxmLT5tZW1vLCBrZXksIHZhbHVlKTsKKyAgICBpZHggPSBQeUxvbmdfQXNTc2l6ZV90KGtleSk7CiAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgcmV0dXJuIHg7CisgICAgaWYgKGlkeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gX1VucGlja2xlcl9NZW1vUHV0KHNlbGYsIGlkeCwgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50CiBsb2FkX2JpbnB1dChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworICAgIFB5T2JqZWN0ICp2YWx1ZTsKKyAgICBQeV9zc2l6ZV90IGlkeDsKICAgICBjaGFyICpzOwotICAgIGludCB4OwogCi0gICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCAxKSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgMSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCh4ID0gc2VsZi0+c3RhY2stPmxlbmd0aCkgPD0gMCkKKworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSA8PSAwKQogICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CisgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDFdOwogCi0gICAga2V5ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSh1bnNpZ25lZCBjaGFyKXNbMF0pOwotICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbeCAtIDFdOworICAgIGlkeCA9IFB5X0NIQVJNQVNLKHNbMF0pOwogCi0gICAgeCA9IFB5RGljdF9TZXRJdGVtKHNlbGYtPm1lbW8sIGtleSwgdmFsdWUpOwotICAgIFB5X0RFQ1JFRihrZXkpOwotICAgIHJldHVybiB4OworICAgIHJldHVybiBfVW5waWNrbGVyX01lbW9QdXQoc2VsZiwgaWR4LCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQKIGxvYWRfbG9uZ19iaW5wdXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICBsb25nIGs7CisgICAgUHlPYmplY3QgKnZhbHVlOworICAgIFB5X3NzaXplX3QgaWR4OwogICAgIGNoYXIgKnM7Ci0gICAgaW50IHg7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoKHggPSBzZWxmLT5zdGFjay0+bGVuZ3RoKSA8PSAwKQorCisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIDw9IDApCiAgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKyAgICB2YWx1ZSA9IHNlbGYtPnN0YWNrLT5kYXRhW1B5X1NJWkUoc2VsZi0+c3RhY2spIC0gMV07CiAKLSAgICBrID0gKGxvbmcpKHVuc2lnbmVkIGNoYXIpc1swXTsKLSAgICBrIHw9IChsb25nKSh1bnNpZ25lZCBjaGFyKXNbMV0gPDwgODsKLSAgICBrIHw9IChsb25nKSh1bnNpZ25lZCBjaGFyKXNbMl0gPDwgMTY7Ci0gICAgayB8PSAobG9uZykodW5zaWduZWQgY2hhcilzWzNdIDw8IDI0OworICAgIGlkeCA9ICAobG9uZylQeV9DSEFSTUFTSyhzWzBdKTsKKyAgICBpZHggfD0gKGxvbmcpUHlfQ0hBUk1BU0soc1sxXSkgPDwgODsKKyAgICBpZHggfD0gKGxvbmcpUHlfQ0hBUk1BU0soc1syXSkgPDwgMTY7CisgICAgaWR4IHw9IChsb25nKVB5X0NIQVJNQVNLKHNbM10pIDw8IDI0OwogCi0gICAga2V5ID0gUHlMb25nX0Zyb21Mb25nKGspOwotICAgIGlmIChrZXkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbHVlID0gc2VsZi0+c3RhY2stPmRhdGFbeCAtIDFdOwotCi0gICAgeCA9IFB5RGljdF9TZXRJdGVtKHNlbGYtPm1lbW8sIGtleSwgdmFsdWUpOwotICAgIFB5X0RFQ1JFRihrZXkpOwotICAgIHJldHVybiB4OworICAgIHJldHVybiBfVW5waWNrbGVyX01lbW9QdXQoc2VsZiwgaWR4LCB2YWx1ZSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQwMDgsNyArNDg3Niw3IEBACiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgaW50IGxlbiwgaTsKIAotICAgIGxlbiA9IHNlbGYtPnN0YWNrLT5sZW5ndGg7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CiAgICAgaWYgKHggPiBsZW4gfHwgeCA8PSAwKQogICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CiAgICAgaWYgKGxlbiA9PSB4KSAgLyogbm90aGluZyB0byBkbyAqLwpAQCAtNDAzOCwxNSArNDkwNiwxNSBAQAogICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHVucGlja2xlcl9jYWxsKHNlbGYsIGFwcGVuZF9mdW5jLCB2YWx1ZSk7CisgICAgICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIGFwcGVuZF9mdW5jLCB2YWx1ZSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQZGF0YV9jbGVhcihzZWxmLT5zdGFjaywgaSArIDEpOwotICAgICAgICAgICAgICAgIHNlbGYtPnN0YWNrLT5sZW5ndGggPSB4OworICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0geDsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgfQotICAgICAgICBzZWxmLT5zdGFjay0+bGVuZ3RoID0geDsKKyAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSB4OwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNDA1NSw3ICs0OTIzLDcgQEAKIHN0YXRpYyBpbnQKIGxvYWRfYXBwZW5kKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gZG9fYXBwZW5kKHNlbGYsIHNlbGYtPnN0YWNrLT5sZW5ndGggLSAxKTsKKyAgICByZXR1cm4gZG9fYXBwZW5kKHNlbGYsIFB5X1NJWkUoc2VsZi0+c3RhY2spIC0gMSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQwNzIsNyArNDk0MCw3IEBACiAgICAgaW50IGxlbiwgaTsKICAgICBpbnQgc3RhdHVzID0gMDsKIAotICAgIGxlbiA9IHNlbGYtPnN0YWNrLT5sZW5ndGg7CisgICAgbGVuID0gUHlfU0laRShzZWxmLT5zdGFjayk7CiAgICAgaWYgKHggPiBsZW4gfHwgeCA8PSAwKQogICAgICAgICByZXR1cm4gc3RhY2tfdW5kZXJmbG93KCk7CiAgICAgaWYgKGxlbiA9PSB4KSAgLyogbm90aGluZyB0byBkbyAqLwpAQCAtNDEwMyw3ICs0OTcxLDcgQEAKIHN0YXRpYyBpbnQKIGxvYWRfc2V0aXRlbShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmV0dXJuIGRvX3NldGl0ZW1zKHNlbGYsIHNlbGYtPnN0YWNrLT5sZW5ndGggLSAyKTsKKyAgICByZXR1cm4gZG9fc2V0aXRlbXMoc2VsZiwgUHlfU0laRShzZWxmLT5zdGFjaykgLSAyKTsKIH0KIAogc3RhdGljIGludApAQCAtNDEyMiwxNCArNDk5MCwxNCBAQAogICAgIC8qIFN0YWNrIGlzIC4uLiBpbnN0YW5jZSwgc3RhdGUuICBXZSB3YW50IHRvIGxlYXZlIGluc3RhbmNlIGF0CiAgICAgICogdGhlIHN0YWNrIHRvcCwgcG9zc2libHkgbXV0YXRlZCB2aWEgaW5zdGFuY2UuX19zZXRzdGF0ZV9fKHN0YXRlKS4KICAgICAgKi8KLSAgICBpZiAoc2VsZi0+c3RhY2stPmxlbmd0aCA8IDIpCisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIDwgMikKICAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOwogCiAgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBzdGF0ZSk7CiAgICAgaWYgKHN0YXRlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGluc3QgPSBzZWxmLT5zdGFjay0+ZGF0YVtzZWxmLT5zdGFjay0+bGVuZ3RoIC0gMV07CisgICAgaW5zdCA9IHNlbGYtPnN0YWNrLT5kYXRhW1B5X1NJWkUoc2VsZi0+c3RhY2spIC0gMV07CiAKICAgICBzZXRzdGF0ZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaW5zdCwgIl9fc2V0c3RhdGVfXyIpOwogICAgIGlmIChzZXRzdGF0ZSA9PSBOVUxMKSB7CkBAIC00MTQ0LDkgKzUwMTIsOSBAQAogICAgICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgICAgIC8qIFRoZSBleHBsaWNpdCBfX3NldHN0YXRlX18gaXMgcmVzcG9uc2libGUgZm9yIGV2ZXJ5dGhpbmcuICovCi0gICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgdW5waWNrbGVyX2NhbGwoKSBzdGVhbHMgdGhlCisgICAgICAgIC8qIFVnaC4uLiB0aGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1VucGlja2xlcl9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHN0YXRlIGZpcnN0LiAqLwotICAgICAgICByZXN1bHQgPSB1bnBpY2tsZXJfY2FsbChzZWxmLCBzZXRzdGF0ZSwgc3RhdGUpOworICAgICAgICByZXN1bHQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNldHN0YXRlLCBzdGF0ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZXRzdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTQyNTksNyArNTEyNyw3IEBACiAgICAgICAgIHNlbGYtPm1hcmtzX3NpemUgPSAoUHlfc3NpemVfdClhbGxvYzsKICAgICB9CiAKLSAgICBzZWxmLT5tYXJrc1tzZWxmLT5udW1fbWFya3MrK10gPSBzZWxmLT5zdGFjay0+bGVuZ3RoOworICAgIHNlbGYtPm1hcmtzW3NlbGYtPm51bV9tYXJrcysrXSA9IFB5X1NJWkUoc2VsZi0+c3RhY2spOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC00Mjk3LDcgKzUxNjUsNyBAQAogICAgIGNoYXIgKnM7CiAgICAgaW50IGk7CiAKLSAgICBpZiAodW5waWNrbGVyX3JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCAxKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGkgPSAodW5zaWduZWQgY2hhcilzWzBdOwpAQCAtNDMxOCw3ICs1MTg2LDcgQEAKICAgICBjaGFyICpzOwogCiAgICAgc2VsZi0+bnVtX21hcmtzID0gMDsKLSAgICBpZiAoc2VsZi0+c3RhY2stPmxlbmd0aCkKKyAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIAogICAgIC8qIENvbnZlbmllbnQgbWFjcm9zIGZvciB0aGUgZGlzcGF0Y2ggd2hpbGUtc3dpdGNoIGxvb3AganVzdCBiZWxvdy4gKi8KQEAgLTQzMjksNyArNTE5Nyw3IEBACiAgICAgY2FzZSBvcGNvZGU6IGlmIChsb2FkX2Z1bmMoc2VsZiwgKGFyZykpIDwgMCkgYnJlYWs7IGNvbnRpbnVlOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKHVucGlja2xlcl9yZWFkKHNlbGYsICZzLCAxKSA8IDApCisgICAgICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIHN3aXRjaCAoKGVudW0gb3Bjb2RlKXNbMF0pIHsKQEAgLTQ0MDQsNiArNTI3Miw5IEBACiAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGFuZCB3ZSBhcmUgZG9uZSEgKi8KICAgICB9CiAKKyAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIC8qIFhYWDogSXQgaXMgbm90IGNsZWFyIHdoYXQgdGhpcyBpcyBhY3R1YWxseSBmb3IuICovCiAgICAgaWYgKChlcnIgPSBQeUVycl9PY2N1cnJlZCgpKSkgewogICAgICAgICBpZiAoZXJyID09IFB5RXhjX0VPRkVycm9yKSB7CkBAIC00NTUzLDEzICs1NDI0LDE4IEBACiAgICAgUHlPYmplY3RfR0NfVW5UcmFjaygoUHlPYmplY3QgKilzZWxmKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnJlYWRsaW5lKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnJlYWQpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+bWVtbyk7CisgICAgUHlfWERFQ1JFRihzZWxmLT5wZWVrKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnN0YWNrKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnBlcnNfZnVuYyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5hcmcpOwotICAgIFB5X1hERUNSRUYoc2VsZi0+bGFzdF9zdHJpbmcpOworICAgIGlmIChzZWxmLT5idWZmZXIuYnVmICE9IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmZmVyKTsKKyAgICAgICAgc2VsZi0+YnVmZmVyLmJ1ZiA9IE5VTEw7CisgICAgfQogCisgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPm1hcmtzKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwogICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOwogICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKIApAQCAtNDU3MSwxMSArNTQ0NywxMCBAQAogewogICAgIFB5X1ZJU0lUKHNlbGYtPnJlYWRsaW5lKTsKICAgICBQeV9WSVNJVChzZWxmLT5yZWFkKTsKLSAgICBQeV9WSVNJVChzZWxmLT5tZW1vKTsKKyAgICBQeV9WSVNJVChzZWxmLT5wZWVrKTsKICAgICBQeV9WSVNJVChzZWxmLT5zdGFjayk7CiAgICAgUHlfVklTSVQoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwotICAgIFB5X1ZJU0lUKHNlbGYtPmxhc3Rfc3RyaW5nKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNDU4NCwxNCArNTQ1OSwyMCBAQAogewogICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRsaW5lKTsKICAgICBQeV9DTEVBUihzZWxmLT5yZWFkKTsKLSAgICBQeV9DTEVBUihzZWxmLT5tZW1vKTsKKyAgICBQeV9DTEVBUihzZWxmLT5wZWVrKTsKICAgICBQeV9DTEVBUihzZWxmLT5zdGFjayk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9DTEVBUihzZWxmLT5hcmcpOwotICAgIFB5X0NMRUFSKHNlbGYtPmxhc3Rfc3RyaW5nKTsKKyAgICBpZiAoc2VsZi0+YnVmZmVyLmJ1ZiAhPSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1ZmZlcik7CisgICAgICAgIHNlbGYtPmJ1ZmZlci5idWYgPSBOVUxMOworICAgIH0KIAorICAgIF9VbnBpY2tsZXJfTWVtb0NsZWFudXAoc2VsZik7CiAgICAgUHlNZW1fRnJlZShzZWxmLT5tYXJrcyk7CiAgICAgc2VsZi0+bWFya3MgPSBOVUxMOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+aW5wdXRfbGluZSk7CisgICAgc2VsZi0+aW5wdXRfbGluZSA9IE5VTEw7CiAgICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBOVUxMOwogICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKQEAgLTQ2MjgsNyArNTUwOSw3IEBACiB7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKICAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKIApAQCAtNDY0Nyw3ICs1NTI4LDcgQEAKICAgICAgICBleHRyYSBjYXJlZnVsIGluIHRoZSBvdGhlciBVbnBpY2tsZXIgbWV0aG9kcywgc2luY2UgYSBzdWJjbGFzcyBjb3VsZAogICAgICAgIGZvcmdldCB0byBjYWxsIFVucGlja2xlci5fX2luaXRfXygpIHRodXMgYnJlYWtpbmcgb3VyIGludGVybmFsCiAgICAgICAgaW52YXJpYW50cy4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xpc3M6VW5waWNrbGVyIiwga3dsaXN0LAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpVbnBpY2tsZXIiLCBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00NjU1LDIyICs1NTM2LDE1IEBACiAgICAgaWYgKHNlbGYtPnJlYWQgIT0gTlVMTCkKICAgICAgICAgKHZvaWQpVW5waWNrbGVyX2NsZWFyKHNlbGYpOwogCi0gICAgc2VsZi0+cmVhZCA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmlsZSwgInJlYWQiKTsKLSAgICBzZWxmLT5yZWFkbGluZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmlsZSwgInJlYWRsaW5lIik7Ci0gICAgaWYgKHNlbGYtPnJlYWRsaW5lID09IE5VTEwgfHwgc2VsZi0+cmVhZCA9PSBOVUxMKQorICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0U3RyZWFtKHNlbGYsIGZpbGUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKGVuY29kaW5nID09IE5VTEwpCi0gICAgICAgIGVuY29kaW5nID0gIkFTQ0lJIjsKLSAgICBpZiAoZXJyb3JzID09IE5VTEwpCi0gICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOwotCi0gICAgc2VsZi0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgIHNlbGYtPmVycm9ycyA9IHN0cmR1cChlcnJvcnMpOwotICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMIHx8IHNlbGYtPmVycm9ycyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyhzZWxmLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CisKKyAgICBzZWxmLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7CisgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLCAicGVyc2lzdGVudF9sb2FkIikpIHsKICAgICAgICAgc2VsZi0+cGVyc19mdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKilzZWxmLApAQCAtNDY4Niw0OSArNTU2MCwyNjkgQEAKICAgICBpZiAoc2VsZi0+c3RhY2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+bWVtbyA9IFB5RGljdF9OZXcoKTsKKyAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKKyAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CiAgICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+bGFzdF9zdHJpbmcgPSBOVUxMOwogICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwotICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAKICAgICByZXR1cm4gMDsKIH0KIAorLyogRGVmaW5lIGEgcHJveHkgb2JqZWN0IGZvciB0aGUgVW5waWNrbGVyJ3MgaW50ZXJuYWwgbWVtbyBvYmplY3QuIFRoaXMgaXMgdG8KKyAqIGF2b2lkIGJyZWFraW5nIGNvZGUgbGlrZToKKyAqICB1bnBpY2tsZXIubWVtby5jbGVhcigpCisgKiBhbmQKKyAqICB1bnBpY2tsZXIubWVtbyA9IHNhdmVkX21lbW8KKyAqIElzIHRoaXMgYSBnb29kIGlkZWE/IE5vdCByZWFsbHksIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIGNvZGUgdGhhdCB1c2VzCisgKiBpdC4gTm90ZSB0aGF0IHdlIGRvbid0IGltcGxlbWVudCB0aGUgZW50aXJlIG1hcHBpbmcgQVBJIGhlcmUuIFRoaXMgaXMKKyAqIGludGVudGlvbmFsLCBhcyB0aGVzZSBzaG91bGQgYmUgdHJlYXRlZCBhcyBibGFjay1ib3ggaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKyAqCisgKiBXZSBkbywgaG93ZXZlciwgaGF2ZSB0byBpbXBsZW1lbnQgcGlja2xpbmcvdW5waWNrbGluZyBzdXBwb3J0IGJlY2F1c2Ugb2YKKyAqIHJlYWwtd29ybGQgY29kZSBsaWtlIGN2czJzdm4uIAorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7Cit9IFVucGlja2xlck1lbW9Qcm94eU9iamVjdDsKKworUHlEb2NfU1RSVkFSKHVtcF9jbGVhcl9kb2MsCisibWVtby5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VtcF9jbGVhcihVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCit7CisgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmLT51bnBpY2tsZXIpOworICAgIHNlbGYtPnVucGlja2xlci0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT51bnBpY2tsZXItPm1lbW9fc2l6ZSk7CisgICAgaWYgKHNlbGYtPnVucGlja2xlci0+bWVtbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHVtcF9jb3B5X2RvYywKKyJtZW1vLmNvcHkoKSAtPiBuZXdfbWVtby4gIENvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LiIpOworCitzdGF0aWMgUHlPYmplY3QgKgordW1wX2NvcHkoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqbmV3X21lbW8gPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKG5ld19tZW1vID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPnVucGlja2xlci0+bWVtb19zaXplOyBpKyspIHsKKyAgICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgUHlPYmplY3QgKmtleSwgKnZhbHVlOworCisgICAgICAgIHZhbHVlID0gc2VsZi0+dW5waWNrbGVyLT5tZW1vW2ldOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGtleSA9IFB5TG9uZ19Gcm9tU3NpemVfdChpKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgc3RhdHVzID0gUHlEaWN0X1NldEl0ZW0obmV3X21lbW8sIGtleSwgdmFsdWUpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgaWYgKHN0YXR1cyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICByZXR1cm4gbmV3X21lbW87CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihuZXdfbWVtbyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUih1bXBfcmVkdWNlX2RvYywKKyJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VtcF9yZWR1Y2UoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOworICAgIFB5T2JqZWN0ICpjb25zdHJ1Y3Rvcl9hcmdzOworICAgIFB5T2JqZWN0ICpjb250ZW50cyA9IHVtcF9jb3B5KHNlbGYpOworICAgIGlmIChjb250ZW50cyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlZHVjZV92YWx1ZSA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChyZWR1Y2VfdmFsdWUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoY29udGVudHMpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY29uc3RydWN0b3JfYXJncyA9IFB5VHVwbGVfTmV3KDEpOworICAgIGlmIChjb25zdHJ1Y3Rvcl9hcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGNvbnRlbnRzKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGNvbnN0cnVjdG9yX2FyZ3MsIDAsIGNvbnRlbnRzKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlB5RGljdF9UeXBlKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlZHVjZV92YWx1ZSwgMCwgKFB5T2JqZWN0ICopJlB5RGljdF9UeXBlKTsKKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJlZHVjZV92YWx1ZSwgMSwgY29uc3RydWN0b3JfYXJncyk7CisgICAgcmV0dXJuIHJlZHVjZV92YWx1ZTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHVucGlja2xlcnByb3h5X21ldGhvZHNbXSA9IHsKKyAgICB7ImNsZWFyIiwgICAgICAgKFB5Q0Z1bmN0aW9uKXVtcF9jbGVhciwgIE1FVEhfTk9BUkdTLCAgdW1wX2NsZWFyX2RvY30sCisgICAgeyJjb3B5IiwgICAgICAgIChQeUNGdW5jdGlvbil1bXBfY29weSwgICBNRVRIX05PQVJHUywgIHVtcF9jb3B5X2RvY30sCisgICAgeyJfX3JlZHVjZV9fIiwgIChQeUNGdW5jdGlvbil1bXBfcmVkdWNlLCBNRVRIX1ZBUkFSR1MsIHVtcF9yZWR1Y2VfZG9jfSwKKyAgICB7TlVMTCwgTlVMTH0gICAgLyogc2VudGluZWwgKi8KK307CisKK3N0YXRpYyB2b2lkCitVbnBpY2tsZXJNZW1vUHJveHlfZGVhbGxvYyhVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3RfR0NfVW5UcmFjayhzZWxmKTsKKyAgICBQeV9YREVDUkVGKHNlbGYtPnVucGlja2xlcik7CisgICAgUHlPYmplY3RfR0NfRGVsKChQeU9iamVjdCAqKXNlbGYpOworfQorCitzdGF0aWMgaW50CitVbnBpY2tsZXJNZW1vUHJveHlfdHJhdmVyc2UoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPnVucGlja2xlcik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK1VucGlja2xlck1lbW9Qcm94eV9jbGVhcihVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlfQ0xFQVIoc2VsZi0+dW5waWNrbGVyKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCBVbnBpY2tsZXJNZW1vUHJveHlUeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eSIsICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0KSwgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLAorICAgIChkZXN0cnVjdG9yKVVucGlja2xlck1lbW9Qcm94eV9kZWFsbG9jLCAgICAgLyogdHBfZGVhbGxvYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcHJpbnQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NvbXBhcmUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQsICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLworICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KKyAgICBQeU9iamVjdF9HZW5lcmljU2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAorICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgKHRyYXZlcnNlcHJvYylVbnBpY2tsZXJNZW1vUHJveHlfdHJhdmVyc2UsICAvKiB0cF90cmF2ZXJzZSAqLworICAgIChpbnF1aXJ5KVVucGlja2xlck1lbW9Qcm94eV9jbGVhciwgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KKyAgICB1bnBpY2tsZXJwcm94eV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitVbnBpY2tsZXJNZW1vUHJveHlfTmV3KFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyKQoreworICAgIFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZjsKKworICAgIHNlbGYgPSBQeU9iamVjdF9HQ19OZXcoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJlVucGlja2xlck1lbW9Qcm94eVR5cGUpOworICAgIGlmIChzZWxmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRih1bnBpY2tsZXIpOworICAgIHNlbGYtPnVucGlja2xlciA9IHVucGlja2xlcjsKKyAgICBQeU9iamVjdF9HQ19UcmFjayhzZWxmKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKIHN0YXRpYyBQeU9iamVjdCAqCiBVbnBpY2tsZXJfZ2V0X21lbW8oVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIm1lbW8iKTsKLSAgICBlbHNlCi0gICAgICAgIFB5X0lOQ1JFRihzZWxmLT5tZW1vKTsKLSAgICByZXR1cm4gc2VsZi0+bWVtbzsKKyAgICByZXR1cm4gVW5waWNrbGVyTWVtb1Byb3h5X05ldyhzZWxmKTsKIH0KIAogc3RhdGljIGludAotVW5waWNrbGVyX3NldF9tZW1vKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnZhbHVlKQorVW5waWNrbGVyX3NldF9tZW1vKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKIHsKLSAgICBQeU9iamVjdCAqdG1wOworICAgIFB5T2JqZWN0ICoqbmV3X21lbW87CisgICAgUHlfc3NpemVfdCBuZXdfbWVtb19zaXplID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAKLSAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgIGlmIChvYmogPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZSBkZWxldGlvbiBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJtZW1vIG11c3QgYmUgYSBkaWN0aW9uYXJ5Iik7CisKKyAgICBpZiAoUHlfVFlQRShvYmopID09ICZVbnBpY2tsZXJNZW1vUHJveHlUeXBlKSB7CisgICAgICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyID0KKyAgICAgICAgICAgICgoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICopb2JqKS0+dW5waWNrbGVyOworCisgICAgICAgIG5ld19tZW1vX3NpemUgPSB1bnBpY2tsZXItPm1lbW9fc2l6ZTsKKyAgICAgICAgbmV3X21lbW8gPSBfVW5waWNrbGVyX05ld01lbW8obmV3X21lbW9fc2l6ZSk7CisgICAgICAgIGlmIChuZXdfbWVtbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXdfbWVtb19zaXplOyBpKyspIHsKKyAgICAgICAgICAgIFB5X1hJTkNSRUYodW5waWNrbGVyLT5tZW1vW2ldKTsKKyAgICAgICAgICAgIG5ld19tZW1vW2ldID0gdW5waWNrbGVyLT5tZW1vW2ldOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKFB5RGljdF9DaGVjayhvYmopKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKworICAgICAgICBuZXdfbWVtb19zaXplID0gUHlEaWN0X1NpemUob2JqKTsKKyAgICAgICAgbmV3X21lbW8gPSBfVW5waWNrbGVyX05ld01lbW8obmV3X21lbW9fc2l6ZSk7CisgICAgICAgIGlmIChuZXdfbWVtbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHdoaWxlIChQeURpY3RfTmV4dChvYmosICZpLCAma2V5LCAmdmFsdWUpKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGlkeDsKKyAgICAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGtleSkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtbyBrZXkgbXVzdCBiZSBpbnRlZ2VycyIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZHggPSBQeUxvbmdfQXNTc2l6ZV90KGtleSk7CisgICAgICAgICAgICBpZiAoaWR4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfVW5waWNrbGVyX01lbW9QdXQoc2VsZiwgaWR4LCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiJ21lbW8nIGF0dHJpYnV0ZSBtdXN0IGJlIGFuIFVucGlja2xlck1lbW9Qcm94eSBvYmplY3QiCisgICAgICAgICAgICAgICAgICAgICAib3IgZGljdCwgbm90ICUuMjAwcyIsIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICB0bXAgPSBzZWxmLT5tZW1vOwotICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgc2VsZi0+bWVtbyA9IHZhbHVlOwotICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICBfVW5waWNrbGVyX01lbW9DbGVhbnVwKHNlbGYpOworICAgIHNlbGYtPm1lbW9fc2l6ZSA9IG5ld19tZW1vX3NpemU7CisgICAgc2VsZi0+bWVtbyA9IG5ld19tZW1vOwogCiAgICAgcmV0dXJuIDA7CisKKyAgZXJyb3I6CisgICAgaWYgKG5ld19tZW1vX3NpemUpIHsKKyAgICAgICAgaSA9IG5ld19tZW1vX3NpemU7CisgICAgICAgIHdoaWxlICgtLWkgPj0gMCkgeworICAgICAgICAgICAgUHlfWERFQ1JFRihuZXdfbWVtb1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgUHlNZW1fRlJFRShuZXdfbWVtbyk7CisgICAgfQorICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ3ODEsNyArNTg3NSw3IEBACiAgICAgKGRlc3RydWN0b3IpVW5waWNrbGVyX2RlYWxsb2MsICAgICAgLyp0cF9kZWFsbG9jKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLwotICAgIDAsCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLwpAQCAtNDgxNiw2ICs1OTEwLDI4MCBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLwogfTsKIAorUHlEb2NfU1RSVkFSKHBpY2tsZV9kdW1wX2RvYywKKyJkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gTm9uZVxuIgorIlxuIgorIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZS4gIFRoaXNcbiIKKyJpcyBlcXVpdmFsZW50IHRvIGBgUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgorImVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKKyJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgorImJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb25cbiIKKyJzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2ZcbiIKKyJQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJUaGUgZmlsZSBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXNcbiIKKyJhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYVxuIgorImlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgorInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BpY2tsZV9kdW1wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJvYmoiLCAiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgUHlPYmplY3QgKnByb3RvID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXI7CisKKyAgICAvKiBmaXhfaW1wb3J0cyBpcyBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCisgICAgaWYgKFB5X1NJWkUoYXJncykgPiAzKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAicGlja2xlLmR1bXAoKSB0YWtlcyBhdCBtb3N0IDMgcG9zaXRpb25hbCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CisgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoX1BpY2tsZXJfU2V0T3V0cHV0U3RyZWFtKHBpY2tsZXIsIGZpbGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmIChkdW1wKHBpY2tsZXIsIG9iaikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKF9QaWNrbGVyX0ZsdXNoVG9GaWxlKHBpY2tsZXIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIFB5X0RFQ1JFRihwaWNrbGVyKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHBpY2tsZXIpOworICAgIHJldHVybiBOVUxMOworfQorCitQeURvY19TVFJWQVIocGlja2xlX2R1bXBzX2RvYywKKyJkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpIC0+IGJ5dGVzXG4iCisiXG4iCisiUmV0dXJuIHRoZSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgYXMgYSBieXRlc1xuIgorIm9iamVjdCwgaW5zdGVhZCBvZiB3cml0aW5nIGl0IHRvIGEgZmlsZS5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbiBwcm90b2NvbDtcbiIKKyJzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYVxuIgorImJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb25cbiIKKyJzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2ZcbiIKKyJQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKKyJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCxcbiIKKyJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwaWNrbGVfZHVtcHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKnByb3RvID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CisgICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsKKworICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KKyAgICBpZiAoUHlfU0laRShhcmdzKSA+IDIpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcHMoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZHVtcHMiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKKyAgICBpZiAocGlja2xlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmIChkdW1wKHBpY2tsZXIsIG9iaikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgcmVzdWx0ID0gX1BpY2tsZXJfR2V0U3RyaW5nKHBpY2tsZXIpOworICAgIFB5X0RFQ1JFRihwaWNrbGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYocGlja2xlcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5RG9jX1NUUlZBUihwaWNrbGVfbG9hZF9kb2MsCisibG9hZChmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIC0+IG9iamVjdFxuIgorIlxuIgorIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUgYW5kXG4iCisicmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzXG4iCisiZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlIGVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sXG4iCisiYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmVcbiIKKyJpZ25vcmVkLlxuIgorIlxuIgorIlRoZSBhcmd1bWVudCBmaWxlIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMgYW5cbiIKKyJpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGhcbiIKKyJtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYSBiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkXG4iCisiZm9yIHJlYWRpbmcsIGEgQnl0ZXNJTyBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpc1xuIgorImludGVyZmFjZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWRcbiIKKyJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCisiUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKKyJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCisiMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BpY2tsZV9sb2FkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKworICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCisgICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkKCkgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCAiCisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOmxvYWQiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOworICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dFN0cmVhbSh1bnBpY2tsZXIsIGZpbGUpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2RpbmcodW5waWNrbGVyLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKKyAgICBpZiAodW5waWNrbGVyLT5maXhfaW1wb3J0cyA9PSAtMSkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIHJlc3VsdCA9IGxvYWQodW5waWNrbGVyKTsKKyAgICBQeV9ERUNSRUYodW5waWNrbGVyKTsKKyAgICByZXR1cm4gcmVzdWx0OworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYodW5waWNrbGVyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2Fkc19kb2MsCisibG9hZHMoaW5wdXQsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCisiXG4iCisiUmVhZCBhIHBpY2tsZWQgb2JqZWN0IGhpZXJhcmNoeSBmcm9tIGEgYnl0ZXMgb2JqZWN0IGFuZCByZXR1cm4gdGhlXG4iCisicmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluXG4iCisiXG4iCisiVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbFxuIgorImFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MgcmVwcmVzZW50YXRpb24gYXJlXG4iCisiaWdub3JlZC5cbiIKKyJcbiIKKyJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMsIHdoaWNoXG4iCisiYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWRcbiIKKyJieSBQeXRob24gMi54LiAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkXG4iCisiUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSBlbmNvZGluZyBhbmRcbiIKKyJlcnJvcnMgdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uXG4iCisiMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3BpY2tsZV9sb2FkcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiaW5wdXQiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07CisgICAgUHlPYmplY3QgKmlucHV0OworICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CisgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKworICAgIC8qIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzIGFyZSBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCisgICAgaWYgKFB5X1NJWkUoYXJncykgIT0gMSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInBpY2tsZS5sb2FkcygpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkcyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXQsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOworICAgIGlmICh1bnBpY2tsZXIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dCh1bnBpY2tsZXIsIGlucHV0KSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoX1VucGlja2xlcl9TZXRJbnB1dEVuY29kaW5nKHVucGlja2xlciwgZW5jb2RpbmcsIGVycm9ycykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgdW5waWNrbGVyLT5maXhfaW1wb3J0cyA9IFB5T2JqZWN0X0lzVHJ1ZShmaXhfaW1wb3J0cyk7CisgICAgaWYgKHVucGlja2xlci0+Zml4X2ltcG9ydHMgPT0gLTEpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXN1bHQgPSBsb2FkKHVucGlja2xlcik7CisgICAgUHlfREVDUkVGKHVucGlja2xlcik7CisgICAgcmV0dXJuIHJlc3VsdDsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHVucGlja2xlcik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBwaWNrbGVfbWV0aG9kc1tdID0geworICAgIHsiZHVtcCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2R1bXAsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGlja2xlX2R1bXBfZG9jfSwKKyAgICB7ImR1bXBzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgIHBpY2tsZV9kdW1wc19kb2N9LAorICAgIHsibG9hZCIsICAoUHlDRnVuY3Rpb24pcGlja2xlX2xvYWQsICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKKyAgICAgcGlja2xlX2xvYWRfZG9jfSwKKyAgICB7ImxvYWRzIiwgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgIHBpY2tsZV9sb2Fkc19kb2N9LAorICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIGludAogaW5pdG1vZHVsZSh2b2lkKQogewpAQCAtNDkyNSw3ICs2MjkzLDcgQEAKICAgICAiX3BpY2tsZSIsCiAgICAgcGlja2xlX21vZHVsZV9kb2MsCiAgICAgLTEsCi0gICAgTlVMTCwKKyAgICBwaWNrbGVfbWV0aG9kcywKICAgICBOVUxMLAogICAgIE5VTEwsCiAgICAgTlVMTCwKQEAgLTQ5NDMsNiArNjMxMSwxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQZGF0YV9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlBpY2tsZXJNZW1vUHJveHlUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlVucGlja2xlck1lbW9Qcm94eVR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMuICovCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3BpY2tsZW1vZHVsZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19wb3NpeHN1YnByb2Nlc3MuYyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMTBjYmIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19wb3NpeHN1YnByb2Nlc3MuYwpAQCAtMCwwICsxLDUwMSBAQAorLyogQXV0aG9yczogR3JlZ29yeSBQLiBTbWl0aCAmIEplZmZyZXkgWWFzc2tpbiAqLworI2luY2x1ZGUgIlB5dGhvbi5oIgorI2lmZGVmIEhBVkVfUElQRTIKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKworI2RlZmluZSBQT1NJWF9DQUxMKGNhbGwpICAgaWYgKChjYWxsKSA9PSAtMSkgZ290byBlcnJvcgorCisKKy8qIE1heGltdW0gZmlsZSBkZXNjcmlwdG9yLCBpbml0aWFsaXplZCBvbiBtb2R1bGUgbG9hZC4gKi8KK3N0YXRpYyBsb25nIG1heF9mZDsKKworCisvKiBHaXZlbiB0aGUgZ2MgbW9kdWxlIGNhbGwgZ2MuZW5hYmxlKCkgYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MuICovCitzdGF0aWMgaW50IF9lbmFibGVfZ2MoUHlPYmplY3QgKmdjX21vZHVsZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZ2NfbW9kdWxlLCAiZW5hYmxlIiwgTlVMTCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjb2RlIGV4ZWN1dGVkIGluIHRoZSBjaGlsZCBwcm9jZXNzIGltbWVkaWF0ZWx5IGFmdGVyIGZvcmsKKyAqIHRvIHNldCB0aGluZ3MgdXAgYW5kIGNhbGwgZXhlYygpLgorICoKKyAqIEFsbCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIG11c3Qgb25seSB1c2UgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb25zLAorICogbGlzdGVkIGF0IGBtYW4gNyBzaWduYWxgIG9yCisgKiBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbC4KKyAqCisgKiBUaGlzIHJlc3RyaWN0aW9uIGlzIGRvY3VtZW50ZWQgYXQKKyAqIGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvZm9yay5odG1sLgorICovCitzdGF0aWMgdm9pZCBjaGlsZF9leGVjKGNoYXIgKmNvbnN0IGV4ZWNfYXJyYXlbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgYXJndltdLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBlbnZwW10sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmN3ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHAyY3JlYWQsIGludCBwMmN3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGMycHJlYWQsIGludCBjMnB3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGVycnJlYWQsIGludCBlcnJ3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGVycnBpcGVfcmVhZCwgaW50IGVycnBpcGVfd3JpdGUsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBjbG9zZV9mZHMsIGludCByZXN0b3JlX3NpZ25hbHMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBjYWxsX3NldHNpZCwgUHlfc3NpemVfdCBudW1fZmRzX3RvX2tlZXAsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpweV9mZHNfdG9fa2VlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnByZWV4ZWNfZm4sCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwcmVleGVjX2ZuX2FyZ3NfdHVwbGUpCit7CisgICAgaW50IGksIHNhdmVkX2Vycm5vLCBmZF9udW07CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBjb25zdCBjaGFyKiBlcnJfbXNnID0gIiI7CisgICAgLyogQnVmZmVyIGxhcmdlIGVub3VnaCB0byBob2xkIGEgaGV4IGludGVnZXIuICBXZSBjYW4ndCBtYWxsb2MuICovCisgICAgY2hhciBoZXhfZXJybm9bc2l6ZW9mKHNhdmVkX2Vycm5vKSoyKzFdOworCisgICAgLyogQ2xvc2UgcGFyZW50J3MgcGlwZSBlbmRzLiAqLworICAgIGlmIChwMmN3cml0ZSAhPSAtMSkgeworICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKHAyY3dyaXRlKSk7CisgICAgfQorICAgIGlmIChjMnByZWFkICE9IC0xKSB7CisgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwcmVhZCkpOworICAgIH0KKyAgICBpZiAoZXJycmVhZCAhPSAtMSkgeworICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycnJlYWQpKTsKKyAgICB9CisgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJwaXBlX3JlYWQpKTsKKworICAgIC8qIER1cCBmZHMgZm9yIGNoaWxkLgorICAgICAgIGR1cDIoKSByZW1vdmVzIHRoZSBDTE9FWEVDIGZsYWcgYnV0IHdlIG11c3QgZG8gaXQgb3Vyc2VsdmVzIGlmIGR1cDIoKQorICAgICAgIHdvdWxkIGJlIGEgbm8tb3AgKGlzc3VlICMxMDgwNikuICovCisgICAgaWYgKHAyY3JlYWQgPT0gMCkgeworICAgICAgICBpbnQgb2xkID0gZmNudGwocDJjcmVhZCwgRl9HRVRGRCk7CisgICAgICAgIGlmIChvbGQgIT0gLTEpCisgICAgICAgICAgICBmY250bChwMmNyZWFkLCBGX1NFVEZELCBvbGQgJiB+RkRfQ0xPRVhFQyk7CisgICAgfSBlbHNlIGlmIChwMmNyZWFkICE9IC0xKSB7CisgICAgICAgIFBPU0lYX0NBTEwoZHVwMihwMmNyZWFkLCAwKSk7ICAvKiBzdGRpbiAqLworICAgIH0KKyAgICBpZiAoYzJwd3JpdGUgPT0gMSkgeworICAgICAgICBpbnQgb2xkID0gZmNudGwoYzJwd3JpdGUsIEZfR0VURkQpOworICAgICAgICBpZiAob2xkICE9IC0xKQorICAgICAgICAgICAgZmNudGwoYzJwd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKKyAgICB9IGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKSB7CisgICAgICAgIFBPU0lYX0NBTEwoZHVwMihjMnB3cml0ZSwgMSkpOyAgLyogc3Rkb3V0ICovCisgICAgfQorICAgIGlmIChlcnJ3cml0ZSA9PSAyKSB7CisgICAgICAgIGludCBvbGQgPSBmY250bChlcnJ3cml0ZSwgRl9HRVRGRCk7CisgICAgICAgIGlmIChvbGQgIT0gLTEpCisgICAgICAgICAgICBmY250bChlcnJ3cml0ZSwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOworICAgIH0gZWxzZSBpZiAoZXJyd3JpdGUgIT0gLTEpIHsKKyAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KKyAgICB9CisKKyAgICAvKiBDbG9zZSBwaXBlIGZkcy4gIE1ha2Ugc3VyZSB3ZSBkb24ndCBjbG9zZSB0aGUgc2FtZSBmZCBtb3JlIHRoYW4gKi8KKyAgICAvKiBvbmNlLCBvciBzdGFuZGFyZCBmZHMuICovCisgICAgaWYgKHAyY3JlYWQgPiAyKSB7CisgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjcmVhZCkpOworICAgIH0KKyAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpIHsKKyAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShjMnB3cml0ZSkpOworICAgIH0KKyAgICBpZiAoZXJyd3JpdGUgIT0gYzJwd3JpdGUgJiYgZXJyd3JpdGUgIT0gcDJjcmVhZCAmJiBlcnJ3cml0ZSA+IDIpIHsKKyAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJ3cml0ZSkpOworICAgIH0KKworICAgIC8qIGNsb3NlKCkgaXMgaW50ZW50aW9uYWxseSBub3QgY2hlY2tlZCBmb3IgZXJyb3JzIGhlcmUgYXMgd2UgYXJlIGNsb3NpbmcgKi8KKyAgICAvKiBhIGxhcmdlIHJhbmdlIG9mIGZkcywgc29tZSBvZiB3aGljaCBtYXkgYmUgaW52YWxpZC4gKi8KKyAgICBpZiAoY2xvc2VfZmRzKSB7CisgICAgICAgIFB5X3NzaXplX3Qga2VlcF9zZXFfaWR4OworICAgICAgICBpbnQgc3RhcnRfZmQgPSAzOworICAgICAgICBmb3IgKGtlZXBfc2VxX2lkeCA9IDA7IGtlZXBfc2VxX2lkeCA8IG51bV9mZHNfdG9fa2VlcDsgKytrZWVwX3NlcV9pZHgpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0KiBweV9rZWVwX2ZkID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2VlcF9zZXFfaWR4KTsKKyAgICAgICAgICAgIGludCBrZWVwX2ZkID0gUHlMb25nX0FzTG9uZyhweV9rZWVwX2ZkKTsKKyAgICAgICAgICAgIGlmIChrZWVwX2ZkIDwgMCkgeyAgLyogTmVnYXRpdmUgbnVtYmVyLCBvdmVyZmxvdyBvciBub3QgYSBMb25nLiAqLworICAgICAgICAgICAgICAgIGVycl9tc2cgPSAiYmFkIHZhbHVlIGluIGZkc190b19rZWVwLiI7CisgICAgICAgICAgICAgICAgZXJybm8gPSAwOyAgLyogV2UgZG9uJ3Qgd2FudCB0byByZXBvcnQgYW4gT1NFcnJvci4gKi8KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGtlZXBfZmQgPCBzdGFydF9mZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGZvciAoZmRfbnVtID0gc3RhcnRfZmQ7IGZkX251bSA8IGtlZXBfZmQ7ICsrZmRfbnVtKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRfbnVtKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXJ0X2ZkID0ga2VlcF9mZCArIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0X2ZkIDw9IG1heF9mZCkgeworICAgICAgICAgICAgZm9yIChmZF9udW0gPSBzdGFydF9mZDsgZmRfbnVtIDwgbWF4X2ZkOyArK2ZkX251bSkgeworICAgICAgICAgICAgICAgIGNsb3NlKGZkX251bSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3dkKQorICAgICAgICBQT1NJWF9DQUxMKGNoZGlyKGN3ZCkpOworCisgICAgaWYgKHJlc3RvcmVfc2lnbmFscykKKyAgICAgICAgX1B5X1Jlc3RvcmVTaWduYWxzKCk7CisKKyNpZmRlZiBIQVZFX1NFVFNJRAorICAgIGlmIChjYWxsX3NldHNpZCkKKyAgICAgICAgUE9TSVhfQ0FMTChzZXRzaWQoKSk7CisjZW5kaWYKKworICAgIGlmIChwcmVleGVjX2ZuICE9IFB5X05vbmUgJiYgcHJlZXhlY19mbl9hcmdzX3R1cGxlKSB7CisgICAgICAgIC8qIFRoaXMgaXMgd2hlcmUgdGhlIHVzZXIgaGFzIGFza2VkIHVzIHRvIGRlYWRsb2NrIHRoZWlyIHByb2dyYW0uICovCisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwocHJlZXhlY19mbiwgcHJlZXhlY19mbl9hcmdzX3R1cGxlLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBTdHJpbmdpZnlpbmcgdGhlIGV4Y2VwdGlvbiBvciB0cmFjZWJhY2sgd291bGQgaW52b2x2ZQorICAgICAgICAgICAgICogbWVtb3J5IGFsbG9jYXRpb24gYW5kIHRodXMgcG90ZW50aWFsIGZvciBkZWFkbG9jay4KKyAgICAgICAgICAgICAqIFdlJ3ZlIGFscmVhZHkgZmFjZWQgcG90ZW50aWFsIGRlYWRsb2NrIGJ5IGNhbGxpbmcgYmFjaworICAgICAgICAgICAgICogaW50byBQeXRob24gaW4gdGhlIGZpcnN0IHBsYWNlLCBzbyBpdCBwcm9iYWJseSBkb2Vzbid0CisgICAgICAgICAgICAgKiBtYXR0ZXIgYnV0IHdlIGF2b2lkIGl0IHRvIG1pbmltaXplIHRoZSBwb3NzaWJpbGl0eS4gKi8KKyAgICAgICAgICAgIGVycl9tc2cgPSAiRXhjZXB0aW9uIG9jY3VycmVkIGluIHByZWV4ZWNfZm4uIjsKKyAgICAgICAgICAgIGVycm5vID0gMDsgIC8qIFdlIGRvbid0IHdhbnQgdG8gcmVwb3J0IGFuIE9TRXJyb3IuICovCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIC8qIFB5X0RFQ1JFRihyZXN1bHQpOyAtIFdlJ3JlIGFib3V0IHRvIGV4ZWMgc28gd2h5IGJvdGhlcj8gKi8KKyAgICB9CisKKyAgICAvKiBUaGlzIGxvb3AgbWF0Y2hlcyB0aGUgTGliL29zLnB5IF9leGVjdnBlKCkncyBQQVRIIHNlYXJjaCB3aGVuICovCisgICAgLyogZ2l2ZW4gdGhlIGV4ZWN1dGFibGVfbGlzdCBnZW5lcmF0ZWQgYnkgTGliL3N1YnByb2Nlc3MucHkuICAgICAqLworICAgIHNhdmVkX2Vycm5vID0gMDsKKyAgICBmb3IgKGkgPSAwOyBleGVjX2FycmF5W2ldICE9IE5VTEw7ICsraSkgeworICAgICAgICBjb25zdCBjaGFyICpleGVjdXRhYmxlID0gZXhlY19hcnJheVtpXTsKKyAgICAgICAgaWYgKGVudnApIHsKKyAgICAgICAgICAgIGV4ZWN2ZShleGVjdXRhYmxlLCBhcmd2LCBlbnZwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4ZWN2KGV4ZWN1dGFibGUsIGFyZ3YpOworICAgICAgICB9CisgICAgICAgIGlmIChlcnJubyAhPSBFTk9FTlQgJiYgZXJybm8gIT0gRU5PVERJUiAmJiBzYXZlZF9lcnJubyA9PSAwKSB7CisgICAgICAgICAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgICAgICB9CisgICAgfQorICAgIC8qIFJlcG9ydCB0aGUgZmlyc3QgZXhlYyBlcnJvciwgbm90IHRoZSBsYXN0LiAqLworICAgIGlmIChzYXZlZF9lcnJubykKKyAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKworZXJyb3I6CisgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICAvKiBSZXBvcnQgdGhlIHBvc2l4IGVycm9yIHRvIG91ciBwYXJlbnQgcHJvY2Vzcy4gKi8KKyAgICBpZiAoc2F2ZWRfZXJybm8pIHsKKyAgICAgICAgY2hhciAqY3VyOworICAgICAgICB3cml0ZShlcnJwaXBlX3dyaXRlLCAiT1NFcnJvcjoiLCA4KTsKKyAgICAgICAgY3VyID0gaGV4X2Vycm5vICsgc2l6ZW9mKGhleF9lcnJubyk7CisgICAgICAgIHdoaWxlIChzYXZlZF9lcnJubyAhPSAwICYmIGN1ciA+IGhleF9lcnJubykgeworICAgICAgICAgICAgKi0tY3VyID0gIjAxMjM0NTY3ODlBQkNERUYiW3NhdmVkX2Vycm5vICUgMTZdOworICAgICAgICAgICAgc2F2ZWRfZXJybm8gLz0gMTY7CisgICAgICAgIH0KKyAgICAgICAgd3JpdGUoZXJycGlwZV93cml0ZSwgY3VyLCBoZXhfZXJybm8gKyBzaXplb2YoaGV4X2Vycm5vKSAtIGN1cik7CisgICAgICAgIHdyaXRlKGVycnBpcGVfd3JpdGUsICI6IiwgMSk7CisgICAgICAgIC8qIFdlIGNhbid0IGNhbGwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pLiAgSXQgaXMgbm90IGFzeW5jIHNpZ25hbCBzYWZlLgorICAgICAgICAgKiBUaGUgcGFyZW50IHByb2Nlc3Mgd2lsbCBsb29rIHRoZSBlcnJvciBtZXNzYWdlIHVwLiAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHdyaXRlKGVycnBpcGVfd3JpdGUsICJSdW50aW1lRXJyb3I6MDoiLCAxNSk7CisgICAgICAgIHdyaXRlKGVycnBpcGVfd3JpdGUsIGVycl9tc2csIHN0cmxlbihlcnJfbXNnKSk7CisgICAgfQorfQorCisKK3N0YXRpYyBQeU9iamVjdCAqCitzdWJwcm9jZXNzX2ZvcmtfZXhlYyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmdjX21vZHVsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4ZWN1dGFibGVfbGlzdCwgKnB5X2Nsb3NlX2ZkcywgKnB5X2Zkc190b19rZWVwOworICAgIFB5T2JqZWN0ICplbnZfbGlzdCwgKnByZWV4ZWNfZm47CisgICAgUHlPYmplY3QgKnByb2Nlc3NfYXJncywgKmNvbnZlcnRlZF9hcmdzID0gTlVMTCwgKmZhc3RfYXJncyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnByZWV4ZWNfZm5fYXJnc190dXBsZSA9IE5VTEw7CisgICAgaW50IHAyY3JlYWQsIHAyY3dyaXRlLCBjMnByZWFkLCBjMnB3cml0ZSwgZXJycmVhZCwgZXJyd3JpdGU7CisgICAgaW50IGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSwgY2xvc2VfZmRzLCByZXN0b3JlX3NpZ25hbHM7CisgICAgaW50IGNhbGxfc2V0c2lkOworICAgIFB5T2JqZWN0ICpjd2Rfb2JqLCAqY3dkX29iajI7CisgICAgY29uc3QgY2hhciAqY3dkOworICAgIHBpZF90IHBpZDsKKyAgICBpbnQgbmVlZF90b19yZWVuYWJsZV9nYyA9IDA7CisgICAgY2hhciAqY29uc3QgKmV4ZWNfYXJyYXksICpjb25zdCAqYXJndiA9IE5VTEwsICpjb25zdCAqZW52cCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBhcmdfbnVtLCBudW1fZmRzX3RvX2tlZXA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoCisgICAgICAgICAgICBhcmdzLCAiT09PT09PaWlpaWlpaWlpaU86Zm9ya19leGVjIiwKKyAgICAgICAgICAgICZwcm9jZXNzX2FyZ3MsICZleGVjdXRhYmxlX2xpc3QsICZweV9jbG9zZV9mZHMsICZweV9mZHNfdG9fa2VlcCwKKyAgICAgICAgICAgICZjd2Rfb2JqLCAmZW52X2xpc3QsCisgICAgICAgICAgICAmcDJjcmVhZCwgJnAyY3dyaXRlLCAmYzJwcmVhZCwgJmMycHdyaXRlLAorICAgICAgICAgICAgJmVycnJlYWQsICZlcnJ3cml0ZSwgJmVycnBpcGVfcmVhZCwgJmVycnBpcGVfd3JpdGUsCisgICAgICAgICAgICAmcmVzdG9yZV9zaWduYWxzLCAmY2FsbF9zZXRzaWQsICZwcmVleGVjX2ZuKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBjbG9zZV9mZHMgPSBQeU9iamVjdF9Jc1RydWUocHlfY2xvc2VfZmRzKTsKKyAgICBpZiAoY2xvc2VfZmRzICYmIGVycnBpcGVfd3JpdGUgPCAzKSB7ICAvKiBwcmVjb25kaXRpb24gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlcnJwaXBlX3dyaXRlIG11c3QgYmUgPj0gMyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbnVtX2Zkc190b19rZWVwID0gUHlTZXF1ZW5jZV9MZW5ndGgocHlfZmRzX3RvX2tlZXApOworICAgIGlmIChudW1fZmRzX3RvX2tlZXAgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIGZkc190b19rZWVwIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIFdlIG5lZWQgdG8gY2FsbCBnYy5kaXNhYmxlKCkgd2hlbiB3ZSdsbCBiZSBjYWxsaW5nIHByZWV4ZWNfZm4gKi8KKyAgICBpZiAocHJlZXhlY19mbiAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKKyAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZ2NfbW9kdWxlLCAiaXNlbmFibGVkIiwgTlVMTCk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGdjX21vZHVsZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBuZWVkX3RvX3JlZW5hYmxlX2djID0gUHlPYmplY3RfSXNUcnVlKHJlc3VsdCk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICBpZiAobmVlZF90b19yZWVuYWJsZV9nYyA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGdjX21vZHVsZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGdjX21vZHVsZSwgImRpc2FibGUiLCBOVUxMKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZ2NfbW9kdWxlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworICAgIGV4ZWNfYXJyYXkgPSBfUHlTZXF1ZW5jZV9CeXRlc1RvQ2hhcnBBcnJheShleGVjdXRhYmxlX2xpc3QpOworICAgIGlmICghZXhlY19hcnJheSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBDb252ZXJ0IGFyZ3MgYW5kIGVudiBpbnRvIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZXhlYygpICovCisgICAgLyogVGhlc2UgY29udmVyc2lvbnMgYXJlIGRvbmUgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHRvIGF2b2lkIGFsbG9jYXRpbmcKKyAgICAgICBvciBmcmVlaW5nIG1lbW9yeSBpbiB0aGUgY2hpbGQgcHJvY2Vzcy4gKi8KKyAgICBpZiAocHJvY2Vzc19hcmdzICE9IFB5X05vbmUpIHsKKyAgICAgICAgUHlfc3NpemVfdCBudW1fYXJnczsKKyAgICAgICAgLyogRXF1aXZhbGVudCB0bzogICovCisgICAgICAgIC8qICB0dXBsZShQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoYXJnKSBmb3IgYXJnIGluIHByb2Nlc3NfYXJncykgICovCisgICAgICAgIGZhc3RfYXJncyA9IFB5U2VxdWVuY2VfRmFzdChwcm9jZXNzX2FyZ3MsICJhcmd2IG11c3QgYmUgYSB0dXBsZSIpOworICAgICAgICBudW1fYXJncyA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShmYXN0X2FyZ3MpOworICAgICAgICBjb252ZXJ0ZWRfYXJncyA9IFB5VHVwbGVfTmV3KG51bV9hcmdzKTsKKyAgICAgICAgaWYgKGNvbnZlcnRlZF9hcmdzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgICAgIGZvciAoYXJnX251bSA9IDA7IGFyZ19udW0gPCBudW1fYXJnczsgKythcmdfbnVtKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqYm9ycm93ZWRfYXJnLCAqY29udmVydGVkX2FyZzsKKyAgICAgICAgICAgIGJvcnJvd2VkX2FyZyA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShmYXN0X2FyZ3MsIGFyZ19udW0pOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GU0NvbnZlcnRlcihib3Jyb3dlZF9hcmcsICZjb252ZXJ0ZWRfYXJnKSA9PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oY29udmVydGVkX2FyZ3MsIGFyZ19udW0sIGNvbnZlcnRlZF9hcmcpOworICAgICAgICB9CisKKyAgICAgICAgYXJndiA9IF9QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KGNvbnZlcnRlZF9hcmdzKTsKKyAgICAgICAgUHlfQ0xFQVIoY29udmVydGVkX2FyZ3MpOworICAgICAgICBQeV9DTEVBUihmYXN0X2FyZ3MpOworICAgICAgICBpZiAoIWFyZ3YpCisgICAgICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgaWYgKGVudl9saXN0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgZW52cCA9IF9QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KGVudl9saXN0KTsKKyAgICAgICAgaWYgKCFlbnZwKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmIChwcmVleGVjX2ZuICE9IFB5X05vbmUpIHsKKyAgICAgICAgcHJlZXhlY19mbl9hcmdzX3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgIGlmICghcHJlZXhlY19mbl9hcmdzX3R1cGxlKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKKyAgICB9CisKKyAgICBpZiAoY3dkX29iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY3dkX29iaiwgJmN3ZF9vYmoyKSA9PSAwKQorICAgICAgICAgICAgZ290byBjbGVhbnVwOworICAgICAgICBjd2QgPSBQeUJ5dGVzX0FzU3RyaW5nKGN3ZF9vYmoyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjd2QgPSBOVUxMOworICAgICAgICBjd2Rfb2JqMiA9IE5VTEw7CisgICAgfQorCisgICAgcGlkID0gZm9yaygpOworICAgIGlmIChwaWQgPT0gMCkgeworICAgICAgICAvKiBDaGlsZCBwcm9jZXNzICovCisgICAgICAgIC8qCisgICAgICAgICAqIENvZGUgZnJvbSBoZXJlIHRvIF9leGl0KCkgbXVzdCBvbmx5IHVzZSBhc3luYy1zaWduYWwtc2FmZSBmdW5jdGlvbnMsCisgICAgICAgICAqIGxpc3RlZCBhdCBgbWFuIDcgc2lnbmFsYCBvcgorICAgICAgICAgKiBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbC4KKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKHByZWV4ZWNfZm4gIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgLyogV2UnbGwgYmUgY2FsbGluZyBiYWNrIGludG8gUHl0aG9uIGxhdGVyIHNvIHdlIG5lZWQgdG8gZG8gdGhpcy4KKyAgICAgICAgICAgICAqIFRoaXMgY2FsbCBtYXkgbm90IGJlIGFzeW5jLXNpZ25hbC1zYWZlIGJ1dCBuZWl0aGVyIGlzIGNhbGxpbmcKKyAgICAgICAgICAgICAqIGJhY2sgaW50byBQeXRob24uICBUaGUgdXNlciBhc2tlZCB1cyB0byB1c2UgaG9wZSBhcyBhIHN0cmF0ZWd5CisgICAgICAgICAgICAgKiB0byBhdm9pZCBkZWFkbG9jay4uLiAqLworICAgICAgICAgICAgUHlPU19BZnRlckZvcmsoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoaWxkX2V4ZWMoZXhlY19hcnJheSwgYXJndiwgZW52cCwgY3dkLAorICAgICAgICAgICAgICAgICAgIHAyY3JlYWQsIHAyY3dyaXRlLCBjMnByZWFkLCBjMnB3cml0ZSwKKyAgICAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSwgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlLAorICAgICAgICAgICAgICAgICAgIGNsb3NlX2ZkcywgcmVzdG9yZV9zaWduYWxzLCBjYWxsX3NldHNpZCwKKyAgICAgICAgICAgICAgICAgICBudW1fZmRzX3RvX2tlZXAsIHB5X2Zkc190b19rZWVwLAorICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm4sIHByZWV4ZWNfZm5fYXJnc190dXBsZSk7CisgICAgICAgIF9leGl0KDI1NSk7CisgICAgICAgIHJldHVybiBOVUxMOyAgLyogRGVhZCBjb2RlIHRvIGF2b2lkIGEgcG90ZW50aWFsIGNvbXBpbGVyIHdhcm5pbmcuICovCisgICAgfQorICAgIFB5X1hERUNSRUYoY3dkX29iajIpOworCisgICAgaWYgKHBpZCA9PSAtMSkgeworICAgICAgICAvKiBDYXB0dXJlIHRoZSBlcnJubyBleGNlcHRpb24gYmVmb3JlIGVycm5vIGNhbiBiZSBjbG9iYmVyZWQuICovCisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICB9CisgICAgaWYgKHByZWV4ZWNfZm4gIT0gUHlfTm9uZSAmJgorICAgICAgICBfUHlJbXBvcnRfUmVsZWFzZUxvY2soKSA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJub3QgaG9sZGluZyB0aGUgaW1wb3J0IGxvY2siKTsKKyAgICB9CisKKyAgICAvKiBQYXJlbnQgcHJvY2VzcyAqLworICAgIGlmIChlbnZwKQorICAgICAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZW52cCk7CisgICAgaWYgKGFyZ3YpCisgICAgICAgIF9QeV9GcmVlQ2hhclBBcnJheShhcmd2KTsKKyAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZXhlY19hcnJheSk7CisKKyAgICAvKiBSZWVuYWJsZSBnYyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgKG9yIGlmIGZvcmsgZmFpbGVkKS4gKi8KKyAgICBpZiAobmVlZF90b19yZWVuYWJsZV9nYyAmJiBfZW5hYmxlX2djKGdjX21vZHVsZSkpIHsKKyAgICAgICAgUHlfWERFQ1JFRihnY19tb2R1bGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfWERFQ1JFRihwcmVleGVjX2ZuX2FyZ3NfdHVwbGUpOworICAgIFB5X1hERUNSRUYoZ2NfbW9kdWxlKTsKKworICAgIGlmIChwaWQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOyAgLyogZm9yaygpIGZhaWxlZC4gIEV4Y2VwdGlvbiBzZXQgZWFybGllci4gKi8KKworICAgIHJldHVybiBQeUxvbmdfRnJvbVBpZChwaWQpOworCitjbGVhbnVwOgorICAgIGlmIChlbnZwKQorICAgICAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZW52cCk7CisgICAgaWYgKGFyZ3YpCisgICAgICAgIF9QeV9GcmVlQ2hhclBBcnJheShhcmd2KTsKKyAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZXhlY19hcnJheSk7CisgICAgUHlfWERFQ1JFRihjb252ZXJ0ZWRfYXJncyk7CisgICAgUHlfWERFQ1JFRihmYXN0X2FyZ3MpOworICAgIFB5X1hERUNSRUYocHJlZXhlY19mbl9hcmdzX3R1cGxlKTsKKworICAgIC8qIFJlZW5hYmxlIGdjIGlmIGl0IHdhcyBkaXNhYmxlZC4gKi8KKyAgICBpZiAobmVlZF90b19yZWVuYWJsZV9nYykKKyAgICAgICAgX2VuYWJsZV9nYyhnY19tb2R1bGUpOworICAgIFB5X1hERUNSRUYoZ2NfbW9kdWxlKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCitQeURvY19TVFJWQVIoc3VicHJvY2Vzc19mb3JrX2V4ZWNfZG9jLAorImZvcmtfZXhlYyhhcmdzLCBleGVjdXRhYmxlX2xpc3QsIGNsb3NlX2ZkcywgY3dkLCBlbnYsXG5cCisgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUsIGMycHJlYWQsIGMycHdyaXRlLFxuXAorICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlLCBlcnJwaXBlX3JlYWQsIGVycnBpcGVfd3JpdGUsXG5cCisgICAgICAgICAgcmVzdG9yZV9zaWduYWxzLCBjYWxsX3NldHNpZCwgcHJlZXhlY19mbilcblwKK1xuXAorRm9ya3MgYSBjaGlsZCBwcm9jZXNzLCBjbG9zZXMgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgYXMgYXBwcm9wcmlhdGUgaW4gdGhlXG5cCitjaGlsZCBhbmQgZHVwcyB0aGUgZmV3IHRoYXQgYXJlIG5lZWRlZCBiZWZvcmUgY2FsbGluZyBleGVjKCkgaW4gdGhlIGNoaWxkXG5cCitwcm9jZXNzLlxuXAorXG5cCitUaGUgcHJlZXhlY19mbiwgaWYgc3VwcGxpZWQsIHdpbGwgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGJlZm9yZSBleGVjLlxuXAorV0FSTklORzogcHJlZXhlY19mbiBpcyBOT1QgU0FGRSBpZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgdGhyZWFkcy5cblwKKyAgICAgICAgIEl0IG1heSB0cmlnZ2VyIGluZnJlcXVlbnQsIGRpZmZpY3VsdCB0byBkZWJ1ZyBkZWFkbG9ja3MuXG5cCitcblwKK0lmIGFuIGVycm9yIG9jY3VycyBpbiB0aGUgY2hpbGQgcHJvY2VzcyBiZWZvcmUgdGhlIGV4ZWMsIGl0IGlzXG5cCitzZXJpYWxpemVkIGFuZCB3cml0dGVuIHRvIHRoZSBlcnJwaXBlX3dyaXRlIGZkIHBlciBzdWJwcm9jZXNzLnB5LlxuXAorXG5cCitSZXR1cm5zOiB0aGUgY2hpbGQgcHJvY2VzcydzIFBJRC5cblwKK1xuXAorUmFpc2VzOiBPbmx5IG9uIGFuIGVycm9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy5cblwKKyIpOworCitQeURvY19TVFJWQVIoc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jLAorImNsb2V4ZWNfcGlwZSgpIC0+IChyZWFkX2VuZCwgd3JpdGVfZW5kKVxuXG5cCitDcmVhdGUgYSBwaXBlIHdob3NlIGVuZHMgaGF2ZSB0aGUgY2xvZXhlYyBmbGFnIHNldC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N1YnByb2Nlc3NfY2xvZXhlY19waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIGludCBmZHNbMl07CisgICAgaW50IHJlczsKKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCisgICAgeworICAgICAgICBpZiAoUHlFcnJfV2FybkV4KAorICAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVXYXJuaW5nLAorICAgICAgICAgICAgICAgICJwaXBlMiBzZXQgZXJybm8gRU5PU1lTOyBmYWxsaW5nICIKKyAgICAgICAgICAgICAgICAiYmFjayB0byBub24tYXRvbWljIHBpcGUrZmNudGwuIiwgMSkgIT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgeworI2VuZGlmCisgICAgICAgIC8qIFdlIGhvbGQgdGhlIEdJTCB3aGljaCBvZmZlcnMgc29tZSBwcm90ZWN0aW9uIGZyb20gb3RoZXIgY29kZSBjYWxsaW5nCisgICAgICAgICAqIGZvcmsoKSBiZWZvcmUgdGhlIENMT0VYRUMgZmxhZ3MgaGF2ZSBiZWVuIHNldCBidXQgd2UgY2FuJ3QgZ3VhcmFudGVlCisgICAgICAgICAqIGFueXRoaW5nIHdpdGhvdXQgcGlwZTIoKS4gKi8KKyAgICAgICAgbG9uZyBvbGRmbGFnczsKKworICAgICAgICByZXMgPSBwaXBlKGZkcyk7CisKKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1swXSwgRl9HRVRGRCwgMCk7CisgICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgICByZXMgPSBmY250bChmZHNbMF0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisKKyAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICBvbGRmbGFncyA9IGZjbnRsKGZkc1sxXSwgRl9HRVRGRCwgMCk7CisgICAgICAgICAgICBpZiAob2xkZmxhZ3MgPCAwKSByZXMgPSBvbGRmbGFnczsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzID09IDApCisgICAgICAgICAgICByZXMgPSBmY250bChmZHNbMV0sIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7CisjaWZkZWYgSEFWRV9QSVBFMgorICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgaWYgKHJlcyAhPSAwKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoaWkpIiwgZmRzWzBdLCBmZHNbMV0pOworfQorCisvKiBtb2R1bGUgbGV2ZWwgY29kZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiQSBQT1NJWCBoZWxwZXIgZm9yIHRoZSBzdWJwcm9jZXNzIG1vZHVsZS4iKTsKKworCitzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKKyAgICB7ImZvcmtfZXhlYyIsIHN1YnByb2Nlc3NfZm9ya19leGVjLCBNRVRIX1ZBUkFSR1MsIHN1YnByb2Nlc3NfZm9ya19leGVjX2RvY30sCisgICAgeyJjbG9leGVjX3BpcGUiLCBzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZSwgTUVUSF9OT0FSR1MsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlX2RvY30sCisgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9wb3NpeHN1YnByb2Nlc3Ntb2R1bGUgPSB7CisJUHlNb2R1bGVEZWZfSEVBRF9JTklULAorCSJfcG9zaXhzdWJwcm9jZXNzIiwKKwltb2R1bGVfZG9jLAorCS0xLCAgLyogTm8gbWVtb3J5IGlzIG5lZWRlZC4gKi8KKwltb2R1bGVfbWV0aG9kcywKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3Bvc2l4c3VicHJvY2Vzcyh2b2lkKQoreworI2lmZGVmIF9TQ19PUEVOX01BWAorICAgIG1heF9mZCA9IHN5c2NvbmYoX1NDX09QRU5fTUFYKTsKKyAgICBpZiAobWF4X2ZkID09IC0xKQorI2VuZGlmCisgICAgICAgIG1heF9mZCA9IDI1NjsgIC8qIE1hdGNoZXMgTGliL3N1YnByb2Nlc3MucHkgKi8KKworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9wb3NpeHN1YnByb2Nlc3Ntb2R1bGUpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwppbmRleCA1N2Y1Mzk1Li5iYzliMDRhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYworKysgYi9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYwpAQCAtNiw3ICs2LDcgQEAKIAogICAgSXQgd2FzIG1vZGlmaWVkIGluIDIwMDIgYnkgUmF5bW9uZCBIZXR0aW5nZXIgYXMgZm9sbG93czoKIAotICAgICogdGhlIHByaW5jaXBhbCBjb21wdXRhdGlvbmFsIGxpbmVzIHVudG91Y2hlZCBleGNlcHQgZm9yIHRhYmJpbmcuCisgICAgKiB0aGUgcHJpbmNpcGFsIGNvbXB1dGF0aW9uYWwgbGluZXMgdW50b3VjaGVkLgogCiAgICAgKiByZW5hbWVkIGdlbnJhbmRfcmVzNTMoKSB0byByYW5kb21fcmFuZG9tKCkgYW5kIHdyYXBwZWQKICAgICAgIGluIHB5dGhvbiBjYWxsaW5nL3JldHVybiBjb2RlLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmMgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwppbmRleCA3YWMwNDNjLi43MzVhMjQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGNhY2hlIC5jIC0gYSBMUlUgY2FjaGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTIxLDYgKzIxLDcgQEAKICAqIDMuIFRoaXMgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20gYW55IHNvdXJjZSBkaXN0cmlidXRpb24uCiAgKi8KIAorI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogI2luY2x1ZGUgImNhY2hlLmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5oIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKaW5kZXggZDZmN2YxMy4uYTEzMzkwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2NhY2hlLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjYWNoZS5oIC0gZGVmaW5pdGlvbnMgZm9yIHRoZSBMUlUgY2FjaGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMgYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCmluZGV4IDExZmI0YWMuLmU0OTY5ZTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwpAQCAtMSw5ICsxLDkgQEAKIC8qIGNvbm5lY3Rpb24uYyAtIHRoZSBjb25uZWN0aW9uIHR5cGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgotICogCisgKgogICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAqIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKICAqIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgIm1vZHVsZS5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImNvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJzdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJjdXJzb3IuaCIKQEAgLTM1LDcgKzM2LDE0IEBACiAjZGVmaW5lIEFDVElPTl9GSU5BTElaRSAxCiAjZGVmaW5lIEFDVElPTl9SRVNFVCAyCiAKKyNpZiBTUUxJVEVfVkVSU0lPTl9OVU1CRVIgPj0gMzAwMzAwOAorI2lmbmRlZiBTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTgorI2RlZmluZSBIQVZFX0xPQURfRVhURU5TSU9OCisjZW5kaWYKKyNlbmRpZgorCiBzdGF0aWMgaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2lzb2xhdGlvbl9sZXZlbChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogaXNvbGF0aW9uX2xldmVsKTsKK3N0YXRpYyB2b2lkIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9jdXJzb3JfcmVmZXJlbmNlcyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKTsKIAogCiBzdGF0aWMgdm9pZCBfc3FsaXRlM19yZXN1bHRfZXJyb3Ioc3FsaXRlM19jb250ZXh0KiBjdHgsIGNvbnN0IGNoYXIqIGVycm1zZywgaW50IGxlbikKQEAgLTY5LDEwICs3NywxMyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgc2VsZi0+aW5pdGlhbGl6ZWQgPSAxOworCiAgICAgc2VsZi0+YmVnaW5fc3RhdGVtZW50ID0gTlVMTDsKIAogICAgIHNlbGYtPnN0YXRlbWVudF9jYWNoZSA9IE5VTEw7CiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IE5VTEw7CisgICAgc2VsZi0+Y3Vyc29ycyA9IE5VTEw7CiAKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgc2VsZi0+cm93X2ZhY3RvcnkgPSBQeV9Ob25lOwpAQCAtMTA2LDExICsxMTcsMTUgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmNyZWF0ZWRfc3RhdGVtZW50cyA9IDA7CisgICAgc2VsZi0+Y3JlYXRlZF9jdXJzb3JzID0gMDsKKworICAgIC8qIENyZWF0ZSBsaXN0cyBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cy9jdXJzb3JzICovCiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnRzKSB7CisgICAgc2VsZi0+Y3Vyc29ycyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnRzIHx8ICFzZWxmLT5jdXJzb3JzKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgc2VsZi0+Y3JlYXRlZF9zdGF0ZW1lbnRzID0gMDsKIAogICAgIC8qIEJ5IGRlZmF1bHQsIHRoZSBDYWNoZSBjbGFzcyBJTkNSRUZzIHRoZSBmYWN0b3J5IGluIGl0cyBpbml0aWFsaXplciwgYW5kCiAgICAgICogZGVjcmVmcyBpdCBpbiBpdHMgZGVhbGxvY2F0b3IgbWV0aG9kLiBTaW5jZSB0aGlzIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyCkBAIC0xNzQsMTEgKzE4OSwxMiBAQAogfQogCiAvKiBhY3Rpb24gaW4gKEFDVElPTl9SRVNFVCwgQUNUSU9OX0ZJTkFMSVpFKSAqLwotdm9pZCBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBpbnQgYWN0aW9uKQordm9pZCBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBpbnQgYWN0aW9uLCBpbnQgcmVzZXRfY3Vyc29ycykKIHsKICAgICBpbnQgaTsKICAgICBQeU9iamVjdCogd2Vha3JlZjsKICAgICBQeU9iamVjdCogc3RhdGVtZW50OworICAgIHB5c3FsaXRlX0N1cnNvciogY3Vyc29yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPnN0YXRlbWVudHMpOyBpKyspIHsKICAgICAgICAgd2Vha3JlZiA9IFB5TGlzdF9HZXRJdGVtKHNlbGYtPnN0YXRlbWVudHMsIGkpOwpAQCAtMTkxLDYgKzIwNywxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKHJlc2V0X2N1cnNvcnMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPmN1cnNvcnMpOyBpKyspIHsKKyAgICAgICAgICAgIHdlYWtyZWYgPSBQeUxpc3RfR2V0SXRlbShzZWxmLT5jdXJzb3JzLCBpKTsKKyAgICAgICAgICAgIGN1cnNvciA9IChweXNxbGl0ZV9DdXJzb3IqKVB5V2Vha3JlZl9HZXRPYmplY3Qod2Vha3JlZik7CisgICAgICAgICAgICBpZiAoKFB5T2JqZWN0KiljdXJzb3IgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgICAgIGN1cnNvci0+cmVzZXQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZGVhbGxvYyhweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKQpAQCAtMjEzLDE3ICsyMzksNDMgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPnRleHRfZmFjdG9yeSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5jb2xsYXRpb25zKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPnN0YXRlbWVudHMpOworICAgIFB5X1hERUNSRUYoc2VsZi0+Y3Vyc29ycyk7CiAKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7CiB9CiAKKy8qCisgKiBSZWdpc3RlcnMgYSBjdXJzb3Igd2l0aCB0aGUgY29ubmVjdGlvbi4KKyAqCisgKiAwID0+IGVycm9yOyAxID0+IG9rCisgKi8KK2ludCBweXNxbGl0ZV9jb25uZWN0aW9uX3JlZ2lzdGVyX2N1cnNvcihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb25uZWN0aW9uLCBQeU9iamVjdCogY3Vyc29yKQoreworICAgIFB5T2JqZWN0KiB3ZWFrcmVmOworCisgICAgd2Vha3JlZiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0KiljdXJzb3IsIE5VTEwpOworICAgIGlmICghd2Vha3JlZikgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbm5lY3Rpb24tPmN1cnNvcnMsIHdlYWtyZWYpICE9IDApIHsKKyAgICAgICAgUHlfQ0xFQVIod2Vha3JlZik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgUHlfREVDUkVGKHdlYWtyZWYpOworCisgICAgcmV0dXJuIDE7CitlcnJvcjoKKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fY3Vyc29yKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmFjdG9yeSIsIE5VTEwsIE5VTEx9OwogICAgIFB5T2JqZWN0KiBmYWN0b3J5ID0gTlVMTDsKICAgICBQeU9iamVjdCogY3Vyc29yOwogCi0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8TyIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmFjdG9yeSkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzksNiArMjkxLDggQEAKIAogICAgIGN1cnNvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmYWN0b3J5LCAiTyIsIHNlbGYpOwogCisgICAgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX2N1cnNvcl9yZWZlcmVuY2VzKHNlbGYpOworCiAgICAgaWYgKGN1cnNvciAmJiBzZWxmLT5yb3dfZmFjdG9yeSAhPSBQeV9Ob25lKSB7CiAgICAgICAgIFB5X1hERUNSRUYoKChweXNxbGl0ZV9DdXJzb3IqKWN1cnNvciktPnJvd19mYWN0b3J5KTsKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnJvd19mYWN0b3J5KTsKQEAgLTI1Niw3ICszMTAsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fRklOQUxJWkUpOworICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9GSU5BTElaRSwgMSk7CiAKICAgICBpZiAoc2VsZi0+ZGIpIHsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMjgyLDYgKzMzNiwxMSBAQAogICovCiBpbnQgcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb24pCiB7CisgICAgaWYgKCFjb24tPmluaXRpYWxpemVkKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiQmFzZSBDb25uZWN0aW9uLl9faW5pdF9fIG5vdCBjYWxsZWQuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGlmICghY29uLT5kYikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfUHJvZ3JhbW1pbmdFcnJvciwgIkNhbm5vdCBvcGVyYXRlIG9uIGEgY2xvc2VkIGRhdGFiYXNlLiIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTM0MCw2ICszOTksOCBAQAogICAgIH0KIAogICAgIGlmIChzZWxmLT5pblRyYW5zYWN0aW9uKSB7CisgICAgICAgIHB5c3FsaXRlX2RvX2FsbF9zdGF0ZW1lbnRzKHNlbGYsIEFDVElPTl9SRVNFVCwgMCk7CisKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICByYyA9IHNxbGl0ZTNfcHJlcGFyZShzZWxmLT5kYiwgIkNPTU1JVCIsIC0xLCAmc3RhdGVtZW50LCAmdGFpbCk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0zODQsNyArNDQ1LDcgQEAKICAgICB9CiAKICAgICBpZiAoc2VsZi0+aW5UcmFuc2FjdGlvbikgewotICAgICAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fUkVTRVQpOworICAgICAgICBweXNxbGl0ZV9kb19hbGxfc3RhdGVtZW50cyhzZWxmLCBBQ1RJT05fUkVTRVQsIDEpOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgcmMgPSBzcWxpdGUzX3ByZXBhcmUoc2VsZi0+ZGIsICJST0xMQkFDSyIsIC0xLCAmc3RhdGVtZW50LCAmdGFpbCk7CkBAIC00MzUsNyArNDk2LDkgQEAKICAgICB9IGVsc2UgaWYgKFB5RmxvYXRfQ2hlY2socHlfdmFsKSkgewogICAgICAgICBzcWxpdGUzX3Jlc3VsdF9kb3VibGUoY29udGV4dCwgUHlGbG9hdF9Bc0RvdWJsZShweV92YWwpKTsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhweV92YWwpKSB7Ci0gICAgICAgIHNxbGl0ZTNfcmVzdWx0X3RleHQoY29udGV4dCwgX1B5VW5pY29kZV9Bc1N0cmluZyhweV92YWwpLCAtMSwgU1FMSVRFX1RSQU5TSUVOVCk7CisgICAgICAgIGNoYXIgKnN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcocHlfdmFsKTsKKyAgICAgICAgaWYgKHN0ciAhPSBOVUxMKQorICAgICAgICAgICAgc3FsaXRlM19yZXN1bHRfdGV4dChjb250ZXh0LCBzdHIsIC0xLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICB9IGVsc2UgaWYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKHB5X3ZhbCkpIHsKICAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihweV92YWwsICZidWZmZXIsICZidWZsZW4pICE9IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKQEAgLTY0OSw3ICs3MTIsNyBAQAogI2VuZGlmCiB9CiAKLXZvaWQgX3B5c3FsaXRlX2Ryb3BfdW51c2VkX3N0YXRlbWVudF9yZWZlcmVuY2VzKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYpCitzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfc3RhdGVtZW50X3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZikKIHsKICAgICBQeU9iamVjdCogbmV3X2xpc3Q7CiAgICAgUHlPYmplY3QqIHdlYWtyZWY7CkBAIC02ODEsNiArNzQ0LDM4IEBACiAgICAgc2VsZi0+c3RhdGVtZW50cyA9IG5ld19saXN0OwogfQogCitzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZikKK3sKKyAgICBQeU9iamVjdCogbmV3X2xpc3Q7CisgICAgUHlPYmplY3QqIHdlYWtyZWY7CisgICAgaW50IGk7CisKKyAgICAvKiB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhpcyBvbmNlIGluIGEgd2hpbGUgKi8KKyAgICBpZiAoc2VsZi0+Y3JlYXRlZF9jdXJzb3JzKysgPCAyMDApIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNlbGYtPmNyZWF0ZWRfY3Vyc29ycyA9IDA7CisKKyAgICBuZXdfbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFuZXdfbGlzdCkgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHNlbGYtPmN1cnNvcnMpOyBpKyspIHsKKyAgICAgICAgd2Vha3JlZiA9IFB5TGlzdF9HZXRJdGVtKHNlbGYtPmN1cnNvcnMsIGkpOworICAgICAgICBpZiAoUHlXZWFrcmVmX0dldE9iamVjdCh3ZWFrcmVmKSAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuZXdfbGlzdCwgd2Vha3JlZikgIT0gMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfbGlzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgUHlfREVDUkVGKHNlbGYtPmN1cnNvcnMpOworICAgIHNlbGYtPmN1cnNvcnMgPSBuZXdfbGlzdDsKK30KKwogUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fY3JlYXRlX2Z1bmN0aW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJuYXJnIiwgImZ1bmMiLCBOVUxMLCBOVUxMfTsKQEAgLTcwNyw3ICs4MDIsOCBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgIkVycm9yIGNyZWF0aW5nIGZ1bmN0aW9uIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBmdW5jLCBQeV9Ob25lKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBmdW5jLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC03MzgsNyArODM0LDggQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBjcmVhdGluZyBhZ2dyZWdhdGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGFnZ3JlZ2F0ZV9jbGFzcywgUHlfTm9uZSk7CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbShzZWxmLT5mdW5jdGlvbl9waW5ib2FyZCwgYWdncmVnYXRlX2NsYXNzLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CkBAIC03OTgsNyArODk1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIGFib3J0IHF1ZXJ5IGlmIGVycm9yIG9jY3VycmVkICovCi0gICAgICAgIHJjID0gMTsgCisgICAgICAgIHJjID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICByYyA9IChpbnQpUHlPYmplY3RfSXNUcnVlKHJldCk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXQpOwpAQCAtODEwLDcgKzkwNyw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCi1QeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfYXV0aG9yaXplcihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK3N0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfYXV0aG9yaXplcihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKIHsKICAgICBQeU9iamVjdCogYXV0aG9yaXplcl9jYjsKIApAQCAtODMyLDE0ICs5MjksMTUgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBzZXR0aW5nIGF1dGhvcml6ZXIgY2FsbGJhY2siKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGF1dGhvcml6ZXJfY2IsIFB5X05vbmUpOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZnVuY3Rpb25fcGluYm9hcmQsIGF1dGhvcml6ZXJfY2IsIFB5X05vbmUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CiB9CiAKLVB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9wcm9ncmVzc19oYW5kbGVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorc3RhdGljIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9wcm9ncmVzc19oYW5kbGVyKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQogewogICAgIFB5T2JqZWN0KiBwcm9ncmVzc19oYW5kbGVyOwogICAgIGludCBuOwpAQCAtODYwLDEzICs5NTgsNjQgQEAKICAgICAgICAgc3FsaXRlM19wcm9ncmVzc19oYW5kbGVyKHNlbGYtPmRiLCAwLCAwLCAodm9pZCopMCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3FsaXRlM19wcm9ncmVzc19oYW5kbGVyKHNlbGYtPmRiLCBuLCBfcHJvZ3Jlc3NfaGFuZGxlciwgcHJvZ3Jlc3NfaGFuZGxlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBwcm9ncmVzc19oYW5kbGVyLCBQeV9Ob25lKTsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHNlbGYtPmZ1bmN0aW9uX3BpbmJvYXJkLCBwcm9ncmVzc19oYW5kbGVyLCBQeV9Ob25lKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorI2lmZGVmIEhBVkVfTE9BRF9FWFRFTlNJT04KK3N0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfZW5hYmxlX2xvYWRfZXh0ZW5zaW9uKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreworICAgIGludCByYzsKKyAgICBpbnQgb25vZmY7CisKKyAgICBpZiAoIXB5c3FsaXRlX2NoZWNrX3RocmVhZChzZWxmKSB8fCAhcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihzZWxmKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImkiLCAmb25vZmYpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gc3FsaXRlM19lbmFibGVfbG9hZF9leHRlbnNpb24oc2VsZi0+ZGIsIG9ub2ZmKTsKKworICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX09wZXJhdGlvbmFsRXJyb3IsICJFcnJvciBlbmFibGluZyBsb2FkIGV4dGVuc2lvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0KiBweXNxbGl0ZV9sb2FkX2V4dGVuc2lvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKK3sKKyAgICBpbnQgcmM7CisgICAgY2hhciogZXh0ZW5zaW9uX25hbWU7CisgICAgY2hhciogZXJybXNnOworCisgICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJmV4dGVuc2lvbl9uYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByYyA9IHNxbGl0ZTNfbG9hZF9leHRlbnNpb24oc2VsZi0+ZGIsIGV4dGVuc2lvbl9uYW1lLCAwLCAmZXJybXNnKTsKKyAgICBpZiAocmMgIT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgZXJybXNnKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9Cit9CisjZW5kaWYKKwogaW50IHB5c3FsaXRlX2NoZWNrX3RocmVhZChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmKQogewogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0xMjcwLDkgKzE0MTksMTEgQEAKICAgICB9CiAKICAgICBpZiAoY2FsbGFibGUgIT0gUHlfTm9uZSkgewotICAgICAgICBQeURpY3RfU2V0SXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSwgY2FsbGFibGUpOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+Y29sbGF0aW9ucywgdXBwZXJjYXNlX25hbWUsIGNhbGxhYmxlKSA9PSAtMSkKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKICAgICB9IGVsc2UgewotICAgICAgICBQeURpY3RfRGVsSXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSk7CisgICAgICAgIGlmIChQeURpY3RfRGVsSXRlbShzZWxmLT5jb2xsYXRpb25zLCB1cHBlcmNhc2VfbmFtZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCiAgICAgcmMgPSBzcWxpdGUzX2NyZWF0ZV9jb2xsYXRpb24oc2VsZi0+ZGIsCkBAIC0xMzYwLDYgKzE1MTEsMTIgQEAKICAgICAgICAgUHlEb2NfU1RSKCJDcmVhdGVzIGEgbmV3IGFnZ3JlZ2F0ZS4gTm9uLXN0YW5kYXJkLiIpfSwKICAgICB7InNldF9hdXRob3JpemVyIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2Nvbm5lY3Rpb25fc2V0X2F1dGhvcml6ZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBQeURvY19TVFIoIlNldHMgYXV0aG9yaXplciBjYWxsYmFjay4gTm9uLXN0YW5kYXJkLiIpfSwKKyAgICAjaWZkZWYgSEFWRV9MT0FEX0VYVEVOU0lPTgorICAgIHsiZW5hYmxlX2xvYWRfZXh0ZW5zaW9uIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX2VuYWJsZV9sb2FkX2V4dGVuc2lvbiwgTUVUSF9WQVJBUkdTLAorICAgICAgICBQeURvY19TVFIoIkVuYWJsZSBkeW5hbWljIGxvYWRpbmcgb2YgU1FMaXRlIGV4dGVuc2lvbiBtb2R1bGVzLiBOb24tc3RhbmRhcmQuIil9LAorICAgIHsibG9hZF9leHRlbnNpb24iLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfbG9hZF9leHRlbnNpb24sIE1FVEhfVkFSQVJHUywKKyAgICAgICAgUHlEb2NfU1RSKCJMb2FkIFNRTGl0ZSBleHRlbnNpb24gbW9kdWxlLiBOb24tc3RhbmRhcmQuIil9LAorICAgICNlbmRpZgogICAgIHsic2V0X3Byb2dyZXNzX2hhbmRsZXIiLCAoUHlDRnVuY3Rpb24pcHlzcWxpdGVfY29ubmVjdGlvbl9zZXRfcHJvZ3Jlc3NfaGFuZGxlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIFB5RG9jX1NUUigiU2V0cyBwcm9ncmVzcyBoYW5kbGVyIGNhbGxiYWNrLiBOb24tc3RhbmRhcmQuIil9LAogICAgIHsiZXhlY3V0ZSIsIChQeUNGdW5jdGlvbilweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGUsIE1FVEhfVkFSQVJHUywKQEAgLTEzOTUsNiArMTU1Miw3IEBACiAgICAgeyJOb3RTdXBwb3J0ZWRFcnJvciIsIFRfT0JKRUNULCBvZmZzZXRvZihweXNxbGl0ZV9Db25uZWN0aW9uLCBOb3RTdXBwb3J0ZWRFcnJvciksIFJFQURPTkxZfSwKICAgICB7InJvd19mYWN0b3J5IiwgVF9PQkpFQ1QsIG9mZnNldG9mKHB5c3FsaXRlX0Nvbm5lY3Rpb24sIHJvd19mYWN0b3J5KX0sCiAgICAgeyJ0ZXh0X2ZhY3RvcnkiLCBUX09CSkVDVCwgb2Zmc2V0b2YocHlzcWxpdGVfQ29ubmVjdGlvbiwgdGV4dF9mYWN0b3J5KX0sCisgICAgeyJpbl90cmFuc2FjdGlvbiIsIFRfQk9PTCwgb2Zmc2V0b2YocHlzcWxpdGVfQ29ubmVjdGlvbiwgaW5UcmFuc2FjdGlvbiksIFJFQURPTkxZfSwKICAgICB7TlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmggYi9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5oCmluZGV4IGZlMDUyOTcuLmM4ZTJmN2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uaApAQCAtMSw2ICsxLDYgQEAKIC8qIGNvbm5lY3Rpb24uaCAtIGRlZmluaXRpb25zIGZvciB0aGUgY29ubmVjdGlvbiB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0zOSw3ICszOSw3IEBACiAKICAgICAvKiAxIGlmIHdlIGFyZSBjdXJyZW50bHkgd2l0aGluIGEgdHJhbnNhY3Rpb24sIGkuIGUuIGlmIGEgQkVHSU4gaGFzIGJlZW4KICAgICAgKiBpc3N1ZWQgKi8KLSAgICBpbnQgaW5UcmFuc2FjdGlvbjsKKyAgICBjaGFyIGluVHJhbnNhY3Rpb247CiAKICAgICAvKiB0aGUgdHlwZSBkZXRlY3Rpb24gbW9kZS4gT25seSAwLCBQQVJTRV9ERUNMVFlQRVMsIFBBUlNFX0NPTE5BTUVTIG9yIGEKICAgICAgKiBiaXR3aXNlIGNvbWJpbmF0aW9uIHRoZXJlb2YgbWFrZXMgc2Vuc2UgKi8KQEAgLTYzLDE3ICs2MywyMSBAQAogICAgICAqIHVzZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgaXQgd2FzIGNyZWF0ZWQgaW4gKi8KICAgICBpbnQgY2hlY2tfc2FtZV90aHJlYWQ7CiAKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7CisKICAgICAvKiB0aHJlYWQgaWRlbnRpZmljYXRpb24gb2YgdGhlIHRocmVhZCB0aGUgY29ubmVjdGlvbiB3YXMgY3JlYXRlZCBpbiAqLwogICAgIGxvbmcgdGhyZWFkX2lkZW50OwogCiAgICAgcHlzcWxpdGVfQ2FjaGUqIHN0YXRlbWVudF9jYWNoZTsKIAotICAgIC8qIEEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cyB1c2VkIHdpdGhpbiB0aGlzIGNvbm5lY3Rpb24gKi8KKyAgICAvKiBMaXN0cyBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gc3RhdGVtZW50cyBhbmQgY3Vyc29ycyB1c2VkIHdpdGhpbiB0aGlzIGNvbm5lY3Rpb24gKi8KICAgICBQeU9iamVjdCogc3RhdGVtZW50czsKKyAgICBQeU9iamVjdCogY3Vyc29yczsKIAotICAgIC8qIGEgY291bnRlciBmb3IgaG93IG1hbnkgc3RhdGVtZW50cyB3ZXJlIGNyZWF0ZWQgaW4gdGhlIGNvbm5lY3Rpb24uIE1heSBiZQorICAgIC8qIENvdW50ZXJzIGZvciBob3cgbWFueSBzdGF0ZW1lbnRzL2N1cnNvcnMgd2VyZSBjcmVhdGVkIGluIHRoZSBjb25uZWN0aW9uLiBNYXkgYmUKICAgICAgKiByZXNldCB0byAwIGF0IGNlcnRhaW4gaW50ZXJ2YWxzICovCiAgICAgaW50IGNyZWF0ZWRfc3RhdGVtZW50czsKKyAgICBpbnQgY3JlYXRlZF9jdXJzb3JzOwogCiAgICAgUHlPYmplY3QqIHJvd19mYWN0b3J5OwogCkBAIC0xMjAsNiArMTI0LDcgQEAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX25ldyhQeVR5cGVPYmplY3QqIHR5cGUsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpOwogaW50IHB5c3FsaXRlX2Nvbm5lY3Rpb25faW5pdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncyk7CiAKK2ludCBweXNxbGl0ZV9jb25uZWN0aW9uX3JlZ2lzdGVyX2N1cnNvcihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb25uZWN0aW9uLCBQeU9iamVjdCogY3Vyc29yKTsKIGludCBweXNxbGl0ZV9jaGVja190aHJlYWQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiBpbnQgcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihweXNxbGl0ZV9Db25uZWN0aW9uKiBjb24pOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKaW5kZXggN2NlNmNjNS4uOTc5MDhhMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGN1cnNvci5jIC0gdGhlIGN1cnNvciB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMzYsNiArMzYsOCBAQAogCiBQeU9iamVjdCogcHlzcWxpdGVfY3Vyc29yX2l0ZXJuZXh0KHB5c3FsaXRlX0N1cnNvciogc2VsZik7CiAKK3N0YXRpYyBjaGFyKiBlcnJtc2dfZmV0Y2hfYWNyb3NzX3JvbGxiYWNrID0gIkN1cnNvciBuZWVkZWQgdG8gYmUgcmVzZXQgYmVjYXVzZSBvZiBjb21taXQvcm9sbGJhY2sgYW5kIGNhbiBubyBsb25nZXIgYmUgZmV0Y2hlZCBmcm9tLiI7CisKIHN0YXRpYyBweXNxbGl0ZV9TdGF0ZW1lbnRLaW5kIGRldGVjdF9zdGF0ZW1lbnRfdHlwZShjb25zdCBjaGFyKiBzdGF0ZW1lbnQpCiB7CiAgICAgY2hhciBidWZbMjBdOwpAQCAtNzQsNyArNzYsNyBAQAogICAgIH0KIH0KIAotaW50IHB5c3FsaXRlX2N1cnNvcl9pbml0KHB5c3FsaXRlX0N1cnNvciogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCitzdGF0aWMgaW50IHB5c3FsaXRlX2N1cnNvcl9pbml0KHB5c3FsaXRlX0N1cnNvciogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CiAgICAgcHlzcWxpdGVfQ29ubmVjdGlvbiogY29ubmVjdGlvbjsKIApAQCAtODcsNiArODksNyBAQAogICAgIHNlbGYtPmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uOwogICAgIHNlbGYtPnN0YXRlbWVudCA9IE5VTEw7CiAgICAgc2VsZi0+bmV4dF9yb3cgPSBOVUxMOworICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIHNlbGYtPnJvd19jYXN0X21hcCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKCFzZWxmLT5yb3dfY2FzdF9tYXApIHsKQEAgLTEwMCw2ICsxMDMsOCBAQAogICAgIHNlbGYtPmxhc3Ryb3dpZD0gUHlfTm9uZTsKIAogICAgIHNlbGYtPmFycmF5c2l6ZSA9IDE7CisgICAgc2VsZi0+Y2xvc2VkID0gMDsKKyAgICBzZWxmLT5yZXNldCA9IDA7CiAKICAgICBzZWxmLT5yb3djb3VudCA9IC0xTDsKIApAQCAtMTEwLDEwICsxMTUsMTYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIGlmICghcHlzcWxpdGVfY29ubmVjdGlvbl9yZWdpc3Rlcl9jdXJzb3IoY29ubmVjdGlvbiwgKFB5T2JqZWN0KilzZWxmKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc2VsZi0+aW5pdGlhbGl6ZWQgPSAxOworCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgcHlzcWxpdGVfY3Vyc29yX2RlYWxsb2MocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKQorc3RhdGljIHZvaWQgcHlzcWxpdGVfY3Vyc29yX2RlYWxsb2MocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKQogewogICAgIGludCByYzsKIApAQCAtMTMwLDYgKzE0MSwxMCBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+cm93X2ZhY3RvcnkpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+bmV4dF9yb3cpOwogCisgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QqKXNlbGYpOworICAgIH0KKwogICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKIH0KIApAQCAtMjgxLDYgKzI5NiwxMSBAQAogICAgIFB5T2JqZWN0KiBidWZfYnl0ZXM7CiAgICAgUHlPYmplY3QqIGVycm9yX29iajsKIAorICAgIGlmIChzZWxmLT5yZXNldCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfSW50ZXJmYWNlRXJyb3IsIGVycm1zZ19mZXRjaF9hY3Jvc3Nfcm9sbGJhY2spOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgbnVtY29scyA9IHNxbGl0ZTNfZGF0YV9jb3VudChzZWxmLT5zdGF0ZW1lbnQtPnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtMzQ4LDcgKzM2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCAiQ291bGQgbm90IGRlY29kZSB0byBVVEYtOCBjb2x1bW4gJyVzJyB3aXRoIHRleHQgJyVzJyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSAsIHZhbF9zdHIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2J5dGVzID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBzdHJsZW4oYnVmKSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2J5dGVzID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBzdHJsZW4oYnVmKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1Zl9ieXRlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9PcGVyYXRpb25hbEVycm9yLCAiQ291bGQgbm90IGRlY29kZSB0byBVVEYtOCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTM5Nyw2ICs0MTcsMjYgQEAKICAgICByZXR1cm4gcm93OwogfQogCisvKgorICogQ2hlY2tzIGlmIGEgY3Vyc29yIG9iamVjdCBpcyB1c2FibGUuCisgKgorICogMCA9PiBlcnJvcjsgMSA9PiBvaworICovCitzdGF0aWMgaW50IGNoZWNrX2N1cnNvcihweXNxbGl0ZV9DdXJzb3IqIGN1cikKK3sKKyAgICBpZiAoIWN1ci0+aW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJCYXNlIEN1cnNvci5fX2luaXRfXyBub3QgY2FsbGVkLiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY3VyLT5jbG9zZWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJDYW5ub3Qgb3BlcmF0ZSBvbiBhIGNsb3NlZCBjdXJzb3IuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBweXNxbGl0ZV9jaGVja190aHJlYWQoY3VyLT5jb25uZWN0aW9uKSAmJiBweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKGN1ci0+Y29ubmVjdGlvbik7CisgICAgfQorfQorCiBQeU9iamVjdCogX3B5c3FsaXRlX3F1ZXJ5X2V4ZWN1dGUocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBpbnQgbXVsdGlwbGUsIFB5T2JqZWN0KiBhcmdzKQogewogICAgIFB5T2JqZWN0KiBvcGVyYXRpb247CkBAIC00MTYsMTMgKzQ1NiwxNSBAQAogICAgIFB5T2JqZWN0KiBzZWNvbmRfYXJndW1lbnQgPSBOVUxMOwogICAgIGludCBhbGxvd184Yml0X2NoYXJzOwogCi0gICAgaWYgKCFweXNxbGl0ZV9jaGVja190aHJlYWQoc2VsZi0+Y29ubmVjdGlvbikgfHwgIXB5c3FsaXRlX2NoZWNrX2Nvbm5lY3Rpb24oc2VsZi0+Y29ubmVjdGlvbikpIHsKKyAgICBpZiAoIWNoZWNrX2N1cnNvcihzZWxmKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzZWxmLT5yZXNldCA9IDA7CisKICAgICAvKiBNYWtlIHNob290aW5nIHlvdXJzZWxmIGluIHRoZSBmb290IHdpdGggbm90IHV0Zi04IGRlY29kYWJsZSA4LWJpdC1zdHJpbmdzIGhhcmRlciAqLwogICAgIGFsbG93XzhiaXRfY2hhcnMgPSAoKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSAhPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgJiYKLSAgICAgICAgKHNlbGYtPmNvbm5lY3Rpb24tPnRleHRfZmFjdG9yeSAhPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSAmJiBweXNxbGl0ZV9PcHRpbWl6ZWRVbmljb2RlKSk7CisgICAgICAgIChzZWxmLT5jb25uZWN0aW9uLT50ZXh0X2ZhY3RvcnkgIT0gcHlzcWxpdGVfT3B0aW1pemVkVW5pY29kZSkpOwogCiAgICAgUHlfWERFQ1JFRihzZWxmLT5uZXh0X3Jvdyk7CiAgICAgc2VsZi0+bmV4dF9yb3cgPSBOVUxMOwpAQCAtNDkxLDcgKzUzMyw3IEBACiAgICAgfQogCiAgICAgb3BlcmF0aW9uX2NzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShvcGVyYXRpb24sICZvcGVyYXRpb25fbGVuKTsKLSAgICBpZiAob3BlcmF0aW9uID09IE5VTEwpCisgICAgaWYgKG9wZXJhdGlvbl9jc3RyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiByZXNldCBkZXNjcmlwdGlvbiBhbmQgcm93Y291bnQgKi8KQEAgLTU3Myw0MiArNjE1LDYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGZ1bmNfYXJncyA9IFB5VHVwbGVfTmV3KDEpOwotICAgIGlmICghZnVuY19hcmdzKSB7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIFB5X0lOQ1JFRihvcGVyYXRpb24pOwotICAgIGlmIChQeVR1cGxlX1NldEl0ZW0oZnVuY19hcmdzLCAwLCBvcGVyYXRpb24pICE9IDApIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAoc2VsZi0+c3RhdGVtZW50KSB7Ci0gICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOwotICAgICAgICBQeV9ERUNSRUYoc2VsZi0+c3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICBzZWxmLT5zdGF0ZW1lbnQgPSAocHlzcWxpdGVfU3RhdGVtZW50KilweXNxbGl0ZV9jYWNoZV9nZXQoc2VsZi0+Y29ubmVjdGlvbi0+c3RhdGVtZW50X2NhY2hlLCBmdW5jX2FyZ3MpOwotICAgIFB5X0RFQ1JFRihmdW5jX2FyZ3MpOwotCi0gICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnQpIHsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0KLSAgICBpZiAoc2VsZi0+c3RhdGVtZW50LT5pbl91c2UpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYtPnN0YXRlbWVudCk7Ci0gICAgICAgIHNlbGYtPnN0YXRlbWVudCA9IFB5T2JqZWN0X05ldyhweXNxbGl0ZV9TdGF0ZW1lbnQsICZweXNxbGl0ZV9TdGF0ZW1lbnRUeXBlKTsKLSAgICAgICAgaWYgKCFzZWxmLT5zdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgcmMgPSBweXNxbGl0ZV9zdGF0ZW1lbnRfY3JlYXRlKHNlbGYtPnN0YXRlbWVudCwgc2VsZi0+Y29ubmVjdGlvbiwgb3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhdGVtZW50KTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc2VsZi0+c3RhdGVtZW50KTsKLSAgICBweXNxbGl0ZV9zdGF0ZW1lbnRfbWFya19kaXJ0eShzZWxmLT5zdGF0ZW1lbnQpOwogCiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgcGFyYW1ldGVycyA9IFB5SXRlcl9OZXh0KHBhcmFtZXRlcnNfaXRlcik7CkBAIC02MjMsMTEgKzYyOSw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHB5c3FsaXRlX2J1aWxkX3Jvd19jYXN0X21hcChzZWxmKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfT3BlcmF0aW9uYWxFcnJvciwgIkVycm9yIHdoaWxlIGJ1aWxkaW5nIHJvd19jYXN0X21hcCIpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotCiAgICAgICAgIC8qIEtlZXAgdHJ5aW5nIHRoZSBTUUwgc3RhdGVtZW50IHVudGlsIHRoZSBzY2hlbWEgc3RvcHMgY2hhbmdpbmcuICovCiAgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICAvKiBBY3R1YWxseSBleGVjdXRlIHRoZSBTUUwgc3RhdGVtZW50LiAqLwpAQCAtNjcxLDEwICs2NzIsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJjID09IFNRTElURV9ST1cgfHwgKHJjID09IFNRTElURV9ET05FICYmIHN0YXRlbWVudF90eXBlID09IFNUQVRFTUVOVF9TRUxFQ1QpKSB7Ci0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICBudW1jb2xzID0gc3FsaXRlM19jb2x1bW5fY291bnQoc2VsZi0+c3RhdGVtZW50LT5zdCk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCiAgICAgICAgICAgICBpZiAoc2VsZi0+ZGVzY3JpcHRpb24gPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgICAgICBudW1jb2xzID0gc3FsaXRlM19jb2x1bW5fY291bnQoc2VsZi0+c3RhdGVtZW50LT5zdCk7CkBAIC03ODIsMTYgKzc3OSwxNyBAQAogICAgIHNxbGl0ZTNfc3RtdCogc3RhdGVtZW50OwogICAgIGludCByYzsKICAgICBQeU9iamVjdCogcmVzdWx0OwotICAgIGludCBzdGF0ZW1lbnRfY29tcGxldGVkID0gMDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZzY3JpcHRfb2JqKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoIXB5c3FsaXRlX2NoZWNrX3RocmVhZChzZWxmLT5jb25uZWN0aW9uKSB8fCAhcHlzcWxpdGVfY2hlY2tfY29ubmVjdGlvbihzZWxmLT5jb25uZWN0aW9uKSkgeworICAgIGlmICghY2hlY2tfY3Vyc29yKHNlbGYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIHNlbGYtPnJlc2V0ID0gMDsKKwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soc2NyaXB0X29iaikpIHsKICAgICAgICAgc2NyaXB0X2NzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNjcmlwdF9vYmopOwogICAgICAgICBpZiAoIXNjcmlwdF9jc3RyKSB7CkBAIC04MTAsMTEgKzgwOCw2IEBACiAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAKICAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoIXNxbGl0ZTNfY29tcGxldGUoc2NyaXB0X2NzdHIpKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZW1lbnRfY29tcGxldGVkID0gMTsKLQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJjID0gc3FsaXRlM19wcmVwYXJlKHNlbGYtPmNvbm5lY3Rpb24tPmRiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfY3N0ciwKQEAgLTg0NSwxNSArODM4LDE1IEBACiAgICAgICAgICAgICBfcHlzcWxpdGVfc2V0ZXJyb3Ioc2VsZi0+Y29ubmVjdGlvbi0+ZGIsIE5VTEwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorCisgICAgICAgIGlmICgqc2NyaXB0X2NzdHIgPT0gKGNoYXIpMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9CiAKIGVycm9yOgogICAgIFB5X1hERUNSRUYoc2NyaXB0X3N0cik7CiAKLSAgICBpZiAoIXN0YXRlbWVudF9jb21wbGV0ZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJ5b3UgZGlkIG5vdCBwcm92aWRlIGEgY29tcGxldGUgU1FMIHN0YXRlbWVudCIpOwotICAgIH0KLQogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0gZWxzZSB7CkBAIC04NzQsNyArODY3LDEyIEBACiAgICAgUHlPYmplY3QqIG5leHRfcm93OwogICAgIGludCByYzsKIAotICAgIGlmICghcHlzcWxpdGVfY2hlY2tfdGhyZWFkKHNlbGYtPmNvbm5lY3Rpb24pIHx8ICFweXNxbGl0ZV9jaGVja19jb25uZWN0aW9uKHNlbGYtPmNvbm5lY3Rpb24pKSB7CisgICAgaWYgKCFjaGVja19jdXJzb3Ioc2VsZikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHNlbGYtPnJlc2V0KSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhweXNxbGl0ZV9JbnRlcmZhY2VFcnJvciwgZXJybXNnX2ZldGNoX2Fjcm9zc19yb2xsYmFjayk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTAxNyw2ICsxMDE1LDggQEAKICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhdGVtZW50KTsKICAgICB9CiAKKyAgICBzZWxmLT5jbG9zZWQgPSAxOworCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMTA3NywxMiArMTA3NywxMiBAQAogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwJLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgUHlfVFBGTEFHU19ERUZBVUxUfFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCiAgICAgICAgIGN1cnNvcl9kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgICAgICBvZmZzZXRvZihweXNxbGl0ZV9DdXJzb3IsIGluX3dlYWtyZWZsaXN0KSwgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgICAgICAoZ2V0aXRlcmZ1bmMpcHlzcWxpdGVfY3Vyc29yX2dldGl0ZXIsICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgICAgIChpdGVybmV4dGZ1bmMpcHlzcWxpdGVfY3Vyc29yX2l0ZXJuZXh0LCAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCiAgICAgICAgIGN1cnNvcl9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuaCBiL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuaAppbmRleCA1NGQ4MTZkLi41ZDhiNWMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5oCkBAIC0xLDYgKzEsNiBAQAogLyogY3Vyc29yLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIGN1cnNvciB0eXBlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC00MCw5ICs0MCwxNCBAQAogICAgIGxvbmcgcm93Y291bnQ7CiAgICAgUHlPYmplY3QqIHJvd19mYWN0b3J5OwogICAgIHB5c3FsaXRlX1N0YXRlbWVudCogc3RhdGVtZW50OworICAgIGludCBjbG9zZWQ7CisgICAgaW50IHJlc2V0OworICAgIGludCBpbml0aWFsaXplZDsKIAogICAgIC8qIHRoZSBuZXh0IHJvdyB0byBiZSByZXR1cm5lZCwgTlVMTCBpZiBubyBuZXh0IHJvdyBhdmFpbGFibGUgKi8KICAgICBQeU9iamVjdCogbmV4dF9yb3c7CisKKyAgICBQeU9iamVjdCogaW5fd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9IHB5c3FsaXRlX0N1cnNvcjsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTUzLDggKzU4LDYgQEAKIAogZXh0ZXJuIFB5VHlwZU9iamVjdCBweXNxbGl0ZV9DdXJzb3JUeXBlOwogCi1pbnQgcHlzcWxpdGVfY3Vyc29yX2luaXQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncyk7Ci12b2lkIHB5c3FsaXRlX2N1cnNvcl9kZWFsbG9jKHB5c3FsaXRlX0N1cnNvciogc2VsZik7CiBQeU9iamVjdCogcHlzcWxpdGVfY3Vyc29yX2V4ZWN1dGUocHlzcWxpdGVfQ3Vyc29yKiBzZWxmLCBQeU9iamVjdCogYXJncyk7CiBQeU9iamVjdCogcHlzcWxpdGVfY3Vyc29yX2V4ZWN1dGVtYW55KHB5c3FsaXRlX0N1cnNvciogc2VsZiwgUHlPYmplY3QqIGFyZ3MpOwogUHlPYmplY3QqIHB5c3FsaXRlX2N1cnNvcl9nZXRpdGVyKHB5c3FsaXRlX0N1cnNvciAqc2VsZik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMgYi9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKaW5kZXggMmNhODQ4ZC4uY2JjM2I4ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIG1vZHVsZS5jIC0gdGhlIG1vZHVsZSBpdHNlbGYKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaCBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuaAppbmRleCBiMTRiZTJhLi4wZWRkYjY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5oCkBAIC0xLDYgKzEsNiBAQAogLyogbW9kdWxlLmggLSBkZWZpbml0aW9ucyBmb3IgdGhlIG1vZHVsZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMjUsNyArMjUsNyBAQAogI2RlZmluZSBQWVNRTElURV9NT0RVTEVfSAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCi0jZGVmaW5lIFBZU1FMSVRFX1ZFUlNJT04gIjIuNC4xIgorI2RlZmluZSBQWVNRTElURV9WRVJTSU9OICIyLjYuMCIKIAogZXh0ZXJuIFB5T2JqZWN0KiBweXNxbGl0ZV9FcnJvcjsKIGV4dGVybiBQeU9iamVjdCogcHlzcWxpdGVfV2FybmluZzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCmluZGV4IDk2YjFkY2EuLmZjNjg4NzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHByZXBhcmVfcHJvdG9jb2wuYyAtIHRoZSBwcm90b2NvbCBmb3IgcHJlcGFyaW5nIHZhbHVlcyBmb3IgU1FMaXRlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKKyNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAKIGludCBweXNxbGl0ZV9wcmVwYXJlX3Byb3RvY29sX2luaXQocHlzcWxpdGVfUHJlcGFyZVByb3RvY29sKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmggYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5oCmluZGV4IDE1MzQ3MmUuLjkyNGUxNjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHByZXBhcmVfcHJvdG9jb2wuaCAtIHRoZSBwcm90b2NvbCBmb3IgcHJlcGFyaW5nIHZhbHVlcyBmb3IgU1FMaXRlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcgR2VyaGFyZCBI5HJpbmcgPGdoQGdoYWVyaW5nLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KICAqCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMgYi9Nb2R1bGVzL19zcWxpdGUvcm93LmMKaW5kZXggZjlmNTdlOS4uM2Q0NDA5NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHJvdy5jIC0gYW4gZW5oYW5jZWQgdHVwbGUgZm9yIGRhdGFiYXNlIHJvd3MKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTgzLDYgKzgzLDggQEAKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfSBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaWR4KSkgewogICAgICAgICBrZXkgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGlkeCk7CisgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIG5pdGVtcyA9IFB5VHVwbGVfU2l6ZShzZWxmLT5kZXNjcmlwdGlvbik7CiAKQEAgLTE2NCw3ICsxNjYsNyBAQAogICAgIHJldHVybiBQeU9iamVjdF9HZXRJdGVyKHNlbGYtPmRhdGEpOwogfQogCi1zdGF0aWMgbG9uZyBweXNxbGl0ZV9yb3dfaGFzaChweXNxbGl0ZV9Sb3cgKnNlbGYpCitzdGF0aWMgUHlfaGFzaF90IHB5c3FsaXRlX3Jvd19oYXNoKHB5c3FsaXRlX1JvdyAqc2VsZikKIHsKICAgICByZXR1cm4gUHlPYmplY3RfSGFzaChzZWxmLT5kZXNjcmlwdGlvbikgXiBQeU9iamVjdF9IYXNoKHNlbGYtPmRhdGEpOwogfQpAQCAtMTcyLDE3ICsxNzQsMTcgQEAKIHN0YXRpYyBQeU9iamVjdCogcHlzcWxpdGVfcm93X3JpY2hjb21wYXJlKHB5c3FsaXRlX1JvdyAqc2VsZiwgUHlPYmplY3QgKl9vdGhlciwgaW50IG9waWQpCiB7CiAgICAgaWYgKG9waWQgIT0gUHlfRVEgJiYgb3BpZCAhPSBQeV9ORSkgewotCVB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0JcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOworICAgICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOworICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CiAgICAgfQogICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKFB5X1RZUEUoX290aGVyKSwgJnB5c3FsaXRlX1Jvd1R5cGUpKSB7Ci0JcHlzcWxpdGVfUm93ICpvdGhlciA9IChweXNxbGl0ZV9Sb3cgKilfb3RoZXI7Ci0JUHlPYmplY3QgKnJlcyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRlc2NyaXB0aW9uLCBvdGhlci0+ZGVzY3JpcHRpb24sIG9waWQpOwotCWlmICgob3BpZCA9PSBQeV9FUSAmJiByZXMgPT0gUHlfVHJ1ZSkKLQkgICAgfHwgKG9waWQgPT0gUHlfTkUgJiYgcmVzID09IFB5X0ZhbHNlKSkgewotCSAgICBQeV9ERUNSRUYocmVzKTsKLQkgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRhdGEsIG90aGVyLT5kYXRhLCBvcGlkKTsKLQl9CisgICAgICAgIHB5c3FsaXRlX1JvdyAqb3RoZXIgPSAocHlzcWxpdGVfUm93ICopX290aGVyOworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfUmljaENvbXBhcmUoc2VsZi0+ZGVzY3JpcHRpb24sIG90aGVyLT5kZXNjcmlwdGlvbiwgb3BpZCk7CisgICAgICAgIGlmICgob3BpZCA9PSBQeV9FUSAmJiByZXMgPT0gUHlfVHJ1ZSkKKyAgICAgICAgICAgIHx8IChvcGlkID09IFB5X05FICYmIHJlcyA9PSBQeV9GYWxzZSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKHNlbGYtPmRhdGEsIG90aGVyLT5kYXRhLCBvcGlkKTsKKyAgICAgICAgfQogICAgIH0KICAgICBQeV9JTkNSRUYoUHlfTm90SW1wbGVtZW50ZWQpOwogICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuaCBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuaAppbmRleCA4ZWQ2OWFlLi5kMDE0MTA5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcm93LmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5oCkBAIC0xLDYgKzEsNiBAQAogLyogcm93LmggLSBhbiBlbmhhbmNlZCB0dXBsZSBmb3IgZGF0YWJhc2Ugcm93cwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA3IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oIGIvTW9kdWxlcy9fc3FsaXRlL3NxbGl0ZWNvbXBhdC5oCmluZGV4IGMzNzk4MjUuLmNmMjBmMTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKQEAgLTEsNiArMSw2IEBACiAvKiBzcWxpdGVjb21wYXQuaCAtIGNvbXBhdGliaWxpdHkgbWFjcm9zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEdlcmhhcmQgSORyaW5nIDxnaEBnaGFlcmluZy5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDEwIEdlcmhhcmQgSMOkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CiAgKgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgcHlzcWxpdGUuCiAgKgpAQCAtMjEsNiArMjEsOCBAQAogICogMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KICAqLwogCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKICNpZm5kZWYgUFlTUUxJVEVfQ09NUEFUX0gKICNkZWZpbmUgUFlTUUxJVEVfQ09NUEFUX0gKIApAQCAtMzEsNCArMzMsMzEgQEAKIHR5cGVkZWYgaW50ICgqbGVuZnVuYykoUHlPYmplY3QqKTsKICNlbmRpZgogCisKKy8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KKyNpZm5kZWYgUHlEaWN0X0NoZWNrRXhhY3QKKyNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApICgob3ApLT5vYl90eXBlID09ICZQeURpY3RfVHlwZSkKKyNlbmRpZgorCisvKiBkZWZpbmUgUHlfQ0xFQVIgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCisjaWZuZGVmIFB5X0NMRUFSCisjZGVmaW5lIFB5X0NMRUFSKG9wKQkJCQlcCisgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKKyAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gKFB5T2JqZWN0ICopKG9wKTsJXAorICAgICAgICAgICAgICAgICAgICAgICAgKG9wKSA9IE5VTEw7CQlcCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwKKyAgICAgICAgICAgICAgICB9CQkJCVwKKyAgICAgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWZuZGVmIFB5VmFyT2JqZWN0X0hFQURfSU5JVAorI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXAorICAgIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLAorI2VuZGlmCisKKyNpZm5kZWYgUHlfVFlQRQorI2RlZmluZSBQeV9UWVBFKG9iKSAoKG9iKS0+b2JfdHlwZSkKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwppbmRleCBmYzJiNGM0Li5mODlmYzlhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCkBAIC0xLDYgKzEsNiBAQAogLyogc3RhdGVtZW50LmMgLSB0aGUgc3RhdGVtZW50IHR5cGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKQEAgLTEzMCw3ICsxMzAsMTAgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRZUEVfVU5JQ09ERToKICAgICAgICAgICAgIHN0cmluZyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcocGFyYW1ldGVyKTsKLSAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX3RleHQoc2VsZi0+c3QsIHBvcywgc3RyaW5nLCAtMSwgU1FMSVRFX1RSQU5TSUVOVCk7CisgICAgICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwpCisgICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfdGV4dChzZWxmLT5zdCwgcG9zLCBzdHJpbmcsIC0xLCBTUUxJVEVfVFJBTlNJRU5UKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVFlQRV9CVUZGRVI6CiAgICAgICAgICAgICBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHBhcmFtZXRlciwgJmJ1ZmZlciwgJmJ1ZmxlbikgPT0gMCkgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5oIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5oCmluZGV4IGJmYTIwOTEuLmU1ZGE0MmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuaAorKysgYi9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmgKQEAgLTEsNiArMSw2IEBACiAvKiBzdGF0ZW1lbnQuaCAtIGRlZmluaXRpb25zIGZvciB0aGUgc3RhdGVtZW50IHR5cGUKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IDZiZTM5YWUuLmI3ZmFhZTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMSw2ICsxLDYgQEAKIC8qIHV0aWwuYyAtIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmggYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5oCmluZGV4IDJhNDU2MzYuLmJhZjQwNWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmgKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHV0aWwuaCAtIHZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBHZXJoYXJkIEjkcmluZyA8Z2hAZ2hhZXJpbmcuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBHZXJoYXJkIEjDpHJpbmcgPGdoQGdoYWVyaW5nLmRlPgogICoKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHB5c3FsaXRlLgogICoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NyZS5jIGIvTW9kdWxlcy9fc3JlLmMKaW5kZXggZWU2YTI2Yi4uMmI3NjRiMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3JlLmMKKysrIGIvTW9kdWxlcy9fc3JlLmMKQEAgLTY3LDkgKzY3LDYgQEAKIC8qIGVuYWJsZXMgZmFzdCBzZWFyY2hpbmcgKi8KICNkZWZpbmUgVVNFX0ZBU1RfU0VBUkNICiAKLS8qIGVuYWJsZXMgYWdncmVzc2l2ZSBpbmxpbmluZyAoYWx3YXlzIG9uIGZvciBWaXN1YWwgQykgKi8KLSN1bmRlZiBVU0VfSU5MSU5FCi0KIC8qIGVuYWJsZXMgY29weS9kZWVwY29weSBoYW5kbGluZyAod29yayBpbiBwcm9ncmVzcykgKi8KICN1bmRlZiBVU0VfQlVJTFRJTl9DT1BZCiAKQEAgLTE2OCw3ICsxNjUsNyBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1VOSUNPREUpCiAKLSNkZWZpbmUgU1JFX1VOSV9JU19ESUdJVChjaCkgUHlfVU5JQ09ERV9JU0RJR0lUKChQeV9VTklDT0RFKShjaCkpCisjZGVmaW5lIFNSRV9VTklfSVNfRElHSVQoY2gpIFB5X1VOSUNPREVfSVNERUNJTUFMKChQeV9VTklDT0RFKShjaCkpCiAjZGVmaW5lIFNSRV9VTklfSVNfU1BBQ0UoY2gpIFB5X1VOSUNPREVfSVNTUEFDRSgoUHlfVU5JQ09ERSkoY2gpKQogI2RlZmluZSBTUkVfVU5JX0lTX0xJTkVCUkVBSyhjaCkgUHlfVU5JQ09ERV9JU0xJTkVCUkVBSygoUHlfVU5JQ09ERSkoY2gpKQogI2RlZmluZSBTUkVfVU5JX0lTX0FMTlVNKGNoKSBQeV9VTklDT0RFX0lTQUxOVU0oKFB5X1VOSUNPREUpKGNoKSkKQEAgLTM5MDMsMTIgKzM5MDAsOSBAQAogICAgIFB5T2JqZWN0KiBkOwogICAgIFB5T2JqZWN0KiB4OwogCi0gICAgLyogSW5pdGlhbGl6ZSBvYmplY3QgdHlwZXMgKi8KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQYXR0ZXJuX1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VHlwZV9SZWFkeSgmTWF0Y2hfVHlwZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZTY2FubmVyX1R5cGUpIDwgMCkKKyAgICAvKiBQYXRjaCBvYmplY3QgdHlwZXMgKi8KKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQYXR0ZXJuX1R5cGUpIHx8IFB5VHlwZV9SZWFkeSgmTWF0Y2hfVHlwZSkgfHwKKyAgICAgICAgUHlUeXBlX1JlYWR5KCZTY2FubmVyX1R5cGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnNyZW1vZHVsZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zc2wuYyBiL01vZHVsZXMvX3NzbC5jCmluZGV4IDczYTc2YmIuLmU0OTQyNjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NzbC5jCisrKyBiL01vZHVsZXMvX3NzbC5jCkBAIC0xMTMsMjUgKzExMyw0MCBAQAogIyB1bmRlZiBIQVZFX09QRU5TU0xfUkFORAogI2VuZGlmCiAKKy8qIFNTTF9DVFhfY2xlYXJfb3B0aW9ucygpIGFuZCBTU0xfY2xlYXJfb3B0aW9ucygpIHdlcmUgZmlyc3QgYWRkZWQgaW4KKyAqIE9wZW5TU0wgMC45LjhtIGJ1dCBkbyBub3QgYXBwZWFyIGluIHNvbWUgMC45LjktZGV2IHZlcnNpb25zIHN1Y2ggdGhlCisgKiAwLjkuOSBmcm9tICJNYXkgMjAwOCIgdGhhdCBOZXRCU0QgNS4wIHVzZXMuICovCisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA+PSAweDAwOTA4MGRmTCAmJiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSICE9IDB4MDA5MDkwMDBMCisjIGRlZmluZSBIQVZFX1NTTF9DVFhfQ0xFQVJfT1BUSU9OUworI2Vsc2UKKyMgdW5kZWYgSEFWRV9TU0xfQ1RYX0NMRUFSX09QVElPTlMKKyNlbmRpZgorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAotICAgIFB5T2JqZWN0ICAgICAgICAqU29ja2V0OyAgICAgICAgICAgIC8qIHdlYWtyZWYgdG8gc29ja2V0IG9uIHdoaWNoIHdlJ3JlIGxheWVyZWQgKi8KLSAgICBTU0xfQ1RYKiAgICAgICAgICAgIGN0eDsKLSAgICBTU0wqICAgICAgICAgICAgICAgIHNzbDsKLSAgICBYNTA5KiAgICAgICAgICAgICAgIHBlZXJfY2VydDsKLSAgICBpbnQgICAgICAgICAgICAgICAgIHNodXRkb3duX3NlZW5femVybzsKKyAgICBTU0xfQ1RYICpjdHg7Cit9IFB5U1NMQ29udGV4dDsKIAotfSBQeVNTTE9iamVjdDsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKlNvY2tldDsgLyogd2Vha3JlZiB0byBzb2NrZXQgb24gd2hpY2ggd2UncmUgbGF5ZXJlZCAqLworICAgIFNTTCAqc3NsOworICAgIFg1MDkgKnBlZXJfY2VydDsKKyAgICBpbnQgc2h1dGRvd25fc2Vlbl96ZXJvOworfSBQeVNTTFNvY2tldDsKIAotc3RhdGljIFB5VHlwZU9iamVjdCBQeVNTTF9UeXBlOwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9TU0x3cml0ZShQeVNTTE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOwotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9TU0xyZWFkKFB5U1NMT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitzdGF0aWMgUHlUeXBlT2JqZWN0IFB5U1NMQ29udGV4dF9UeXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBQeVNTTFNvY2tldF9UeXBlOworCitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHdyaXRlKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncyk7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHJlYWQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIHN0YXRpYyBpbnQgY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KFB5U29ja2V0U29ja09iamVjdCAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cml0aW5nKTsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfcGVlcmNlcnQoUHlTU0xPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfY2lwaGVyKFB5U1NMT2JqZWN0ICpzZWxmKTsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xfcGVlcmNlcnQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xfY2lwaGVyKFB5U1NMU29ja2V0ICpzZWxmKTsKIAotI2RlZmluZSBQeVNTTE9iamVjdF9DaGVjayh2KSAgICAoUHlfVFlQRSh2KSA9PSAmUHlTU0xfVHlwZSkKKyNkZWZpbmUgUHlTU0xDb250ZXh0X0NoZWNrKHYpICAgKFB5X1RZUEUodikgPT0gJlB5U1NMQ29udGV4dF9UeXBlKQorI2RlZmluZSBQeVNTTFNvY2tldF9DaGVjayh2KSAgICAoUHlfVFlQRSh2KSA9PSAmUHlTU0xTb2NrZXRfVHlwZSkKIAogdHlwZWRlZiBlbnVtIHsKICAgICBTT0NLRVRfSVNfTk9OQkxPQ0tJTkcsCkBAIC0xNTQsNyArMTY5LDcgQEAKICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVNTTF9TZXRFcnJvcihQeVNTTE9iamVjdCAqb2JqLCBpbnQgcmV0LCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKK1B5U1NMX1NldEVycm9yKFB5U1NMU29ja2V0ICpvYmosIGludCByZXQsIGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogewogICAgIFB5T2JqZWN0ICp2OwogICAgIGNoYXIgYnVmWzIwNDhdOwpAQCAtMjY0LDEyNyArMjc5LDQyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBQeVNTTE9iamVjdCAqCi1uZXdQeVNTTE9iamVjdChQeVNvY2tldFNvY2tPYmplY3QgKlNvY2ssIGNoYXIgKmtleV9maWxlLCBjaGFyICpjZXJ0X2ZpbGUsCitzdGF0aWMgUHlTU0xTb2NrZXQgKgorbmV3UHlTU0xTb2NrZXQoU1NMX0NUWCAqY3R4LCBQeVNvY2tldFNvY2tPYmplY3QgKnNvY2ssCiAgICAgICAgICAgICAgICBlbnVtIHB5X3NzbF9zZXJ2ZXJfb3JfY2xpZW50IHNvY2tldF90eXBlLAotICAgICAgICAgICAgICAgZW51bSBweV9zc2xfY2VydF9yZXF1aXJlbWVudHMgY2VydHJlcSwKLSAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3ZlcnNpb24gcHJvdG9fdmVyc2lvbiwKLSAgICAgICAgICAgICAgIGNoYXIgKmNhY2VydHNfZmlsZSkKKyAgICAgICAgICAgICAgIGNoYXIgKnNlcnZlcl9ob3N0bmFtZSkKIHsKLSAgICBQeVNTTE9iamVjdCAqc2VsZjsKLSAgICBjaGFyICplcnJzdHIgPSBOVUxMOwotICAgIGludCByZXQ7Ci0gICAgaW50IHZlcmlmaWNhdGlvbl9tb2RlOworICAgIFB5U1NMU29ja2V0ICpzZWxmOwogCi0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTE9iamVjdCwgJlB5U1NMX1R5cGUpOyAvKiBDcmVhdGUgbmV3IG9iamVjdCAqLworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlTU0xTb2NrZXQsICZQeVNTTFNvY2tldF9UeXBlKTsKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIHNlbGYtPnBlZXJfY2VydCA9IE5VTEw7CiAgICAgc2VsZi0+c3NsID0gTlVMTDsKLSAgICBzZWxmLT5jdHggPSBOVUxMOwogICAgIHNlbGYtPlNvY2tldCA9IE5VTEw7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIFNTTCBlcnJvciBzdGF0ZSBpcyBpbml0aWFsaXplZCAqLwogICAgICh2b2lkKSBFUlJfZ2V0X3N0YXRlKCk7CiAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CiAKLSAgICBpZiAoKGtleV9maWxlICYmICFjZXJ0X2ZpbGUpIHx8ICgha2V5X2ZpbGUgJiYgY2VydF9maWxlKSkgewotICAgICAgICBlcnJzdHIgPSBFUlJTVFIoIkJvdGggdGhlIGtleSAmIGNlcnRpZmljYXRlIGZpbGVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNwZWNpZmllZCIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgaWYgKChzb2NrZXRfdHlwZSA9PSBQWV9TU0xfU0VSVkVSKSAmJgotICAgICAgICAoKGtleV9maWxlID09IE5VTEwpIHx8IChjZXJ0X2ZpbGUgPT0gTlVMTCkpKSB7Ci0gICAgICAgIGVycnN0ciA9IEVSUlNUUigiQm90aCB0aGUga2V5ICYgY2VydGlmaWNhdGUgZmlsZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3BlY2lmaWVkIGZvciBzZXJ2ZXItc2lkZSBvcGVyYXRpb24iKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQogICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9UTFMxKQotICAgICAgICBzZWxmLT5jdHggPSBTU0xfQ1RYX25ldyhUTFN2MV9tZXRob2QoKSk7IC8qIFNldCB1cCBjb250ZXh0ICovCi0gICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wzKQotICAgICAgICBzZWxmLT5jdHggPSBTU0xfQ1RYX25ldyhTU0x2M19tZXRob2QoKSk7IC8qIFNldCB1cCBjb250ZXh0ICovCi0gICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wyKQotICAgICAgICBzZWxmLT5jdHggPSBTU0xfQ1RYX25ldyhTU0x2Ml9tZXRob2QoKSk7IC8qIFNldCB1cCBjb250ZXh0ICovCi0gICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wyMykKLSAgICAgICAgc2VsZi0+Y3R4ID0gU1NMX0NUWF9uZXcoU1NMdjIzX21ldGhvZCgpKTsgLyogU2V0IHVwIGNvbnRleHQgKi8KKyAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KGN0eCk7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChzZWxmLT5jdHggPT0gTlVMTCkgewotICAgICAgICBlcnJzdHIgPSBFUlJTVFIoIkludmFsaWQgU1NMIHByb3RvY29sIHZhcmlhbnQgc3BlY2lmaWVkLiIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgaWYgKGNlcnRyZXEgIT0gUFlfU1NMX0NFUlRfTk9ORSkgewotICAgICAgICBpZiAoY2FjZXJ0c19maWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycnN0ciA9IEVSUlNUUigiTm8gcm9vdCBjZXJ0aWZpY2F0ZXMgc3BlY2lmaWVkIGZvciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInZlcmlmaWNhdGlvbiBvZiBvdGhlci1zaWRlIGNlcnRpZmljYXRlcy4iKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIHJldCA9IFNTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zKHNlbGYtPmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHNfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmIChyZXQgIT0gMSkgewotICAgICAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoa2V5X2ZpbGUpIHsKLSAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByZXQgPSBTU0xfQ1RYX3VzZV9Qcml2YXRlS2V5X2ZpbGUoc2VsZi0+Y3R4LCBrZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOwotICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAocmV0ICE9IDEpIHsKLSAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCByZXQsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJldCA9IFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlX2NoYWluX2ZpbGUoc2VsZi0+Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZSk7Ci0gICAgICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgICAgIGlmIChyZXQgIT0gMSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicmV0IGlzICVkLCBlcnJjb2RlIGlzICVsdSwgJWx1LCB3aXRoIGZpbGUgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIHJldCwgRVJSX3BlZWtfZXJyb3IoKSwgRVJSX3BlZWtfbGFzdF9lcnJvcigpLCBjZXJ0X2ZpbGUpOwotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoRVJSX3BlZWtfbGFzdF9lcnJvcigpICE9IDApIHsKLSAgICAgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgcmV0LCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIHNzbCBjb21wYXRpYmlsaXR5ICovCi0gICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzZWxmLT5jdHgsIFNTTF9PUF9BTEwpOwotCi0gICAgdmVyaWZpY2F0aW9uX21vZGUgPSBTU0xfVkVSSUZZX05PTkU7Ci0gICAgaWYgKGNlcnRyZXEgPT0gUFlfU1NMX0NFUlRfT1BUSU9OQUwpCi0gICAgICAgIHZlcmlmaWNhdGlvbl9tb2RlID0gU1NMX1ZFUklGWV9QRUVSOwotICAgIGVsc2UgaWYgKGNlcnRyZXEgPT0gUFlfU1NMX0NFUlRfUkVRVUlSRUQpCi0gICAgICAgIHZlcmlmaWNhdGlvbl9tb2RlID0gKFNTTF9WRVJJRllfUEVFUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlQpOwotICAgIFNTTF9DVFhfc2V0X3ZlcmlmeShzZWxmLT5jdHgsIHZlcmlmaWNhdGlvbl9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsgLyogc2V0IHZlcmlmeSBsdmwgKi8KLQotICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBzZWxmLT5zc2wgPSBTU0xfbmV3KHNlbGYtPmN0eCk7IC8qIE5ldyBzc2wgc3RydWN0ICovCi0gICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgU29jay0+c29ja19mZCk7ICAgICAgIC8qIFNldCB0aGUgc29ja2V0IGZvciBTU0wgKi8KKyAgICBTU0xfc2V0X2ZkKHNlbGYtPnNzbCwgc29jay0+c29ja19mZCk7CiAjaWZkZWYgU1NMX01PREVfQVVUT19SRVRSWQogICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOwogI2VuZGlmCiAKKyNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisgICAgaWYgKHNlcnZlcl9ob3N0bmFtZSAhPSBOVUxMKQorICAgICAgICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoc2VsZi0+c3NsLCBzZXJ2ZXJfaG9zdG5hbWUpOworI2VuZGlmCisKICAgICAvKiBJZiB0aGUgc29ja2V0IGlzIGluIG5vbi1ibG9ja2luZyBtb2RlIG9yIHRpbWVvdXQgbW9kZSwgc2V0IHRoZSBCSU8KICAgICAgKiB0byBub24tYmxvY2tpbmcgbW9kZSAoYmxvY2tpbmcgaXMgdGhlIGRlZmF1bHQpCiAgICAgICovCi0gICAgaWYgKFNvY2stPnNvY2tfdGltZW91dCA+PSAwLjApIHsKLSAgICAgICAgLyogU2V0IGJvdGggdGhlIHJlYWQgYW5kIHdyaXRlIEJJTydzIHRvIG5vbi1ibG9ja2luZyBtb2RlICovCisgICAgaWYgKHNvY2stPnNvY2tfdGltZW91dCA+PSAwLjApIHsKICAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCAxKTsKICAgICAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCAxKTsKICAgICB9CkBAIC0zOTYsNTUgKzMyNiwxMyBAQAogICAgICAgICBTU0xfc2V0X2FjY2VwdF9zdGF0ZShzZWxmLT5zc2wpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCiAKLSAgICBzZWxmLT5Tb2NrZXQgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBTb2NrLCBQeV9Ob25lKTsKKyAgICBzZWxmLT5Tb2NrZXQgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBzb2NrLCBOVUxMKTsKICAgICByZXR1cm4gc2VsZjsKLSBmYWlsOgotICAgIGlmIChlcnJzdHIpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LCBlcnJzdHIpOwotICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVB5U1NMX3NzbHdyYXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5U29ja2V0U29ja09iamVjdCAqU29jazsKLSAgICBpbnQgc2VydmVyX3NpZGUgPSAwOwotICAgIGludCB2ZXJpZmljYXRpb25fbW9kZSA9IFBZX1NTTF9DRVJUX05PTkU7Ci0gICAgaW50IHByb3RvY29sID0gUFlfU1NMX1ZFUlNJT05fU1NMMjM7Ci0gICAgY2hhciAqa2V5X2ZpbGUgPSBOVUxMOwotICAgIGNoYXIgKmNlcnRfZmlsZSA9IE5VTEw7Ci0gICAgY2hhciAqY2FjZXJ0c19maWxlID0gTlVMTDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyFpfHp6aWl6OnNzbHdyYXAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVNvY2tldE1vZHVsZS5Tb2NrX1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZTb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VydmVyX3NpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZrZXlfZmlsZSwgJmNlcnRfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJnZlcmlmaWNhdGlvbl9tb2RlLCAmcHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNlcnRzX2ZpbGUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIC8qCi0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICJzZXJ2ZXJfc2lkZSBpcyAlZCwga2V5ZmlsZSAlcCwgY2VydGZpbGUgJXAsIHZlcmlmeV9tb2RlICVkLCAiCi0gICAgICAgICJwcm90b2NvbCAlZCwgY2VydHMgJXBcbiIsCi0gICAgICAgIHNlcnZlcl9zaWRlLCBrZXlfZmlsZSwgY2VydF9maWxlLCB2ZXJpZmljYXRpb25fbW9kZSwKLSAgICAgICAgcHJvdG9jb2wsIGNhY2VydHNfZmlsZSk7Ci0gICAgICovCi0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICopIG5ld1B5U1NMT2JqZWN0KFNvY2ssIGtleV9maWxlLCBjZXJ0X2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgdmVyaWZpY2F0aW9uX21vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbCwgY2FjZXJ0c19maWxlKTsKLX0KLQotUHlEb2NfU1RSVkFSKHNzbF9kb2MsCi0ic3Nsd3JhcChzb2NrZXQsIHNlcnZlcl9zaWRlLCBba2V5ZmlsZSwgY2VydGZpbGUsIGNlcnRzX21vZGUsIHByb3RvY29sLFxuIgotIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2VydHNmaWxlXSkgLT4gc3Nsb2JqZWN0Iik7Ci0KIC8qIFNTTCBvYmplY3QgbWV0aG9kcyAqLwogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTGRvX2hhbmRzaGFrZShQeVNTTE9iamVjdCAqc2VsZikKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMZG9faGFuZHNoYWtlKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGludCByZXQ7CiAgICAgaW50IGVycjsKQEAgLTQ4Miw3ICszNzAsNyBAQAogICAgICAgICAgICAgc29ja3N0YXRlID0gU09DS0VUX09QRVJBVElPTl9PSzsKICAgICAgICAgfQogICAgICAgICBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfVElNRURfT1VUKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUlNUUigiVGhlIGhhbmRzaGFrZSBvcGVyYXRpb24gdGltZWQgb3V0IikpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19CRUVOX0NMT1NFRCkgewpAQCAtODEyLDcgKzcwMCw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fZGVjb2RlX2NlcnRpZmljYXRlIChYNTA5ICpjZXJ0aWZpY2F0ZSwgaW50IHZlcmJvc2UpIHsKK19kZWNvZGVfY2VydGlmaWNhdGUoWDUwOSAqY2VydGlmaWNhdGUpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIEJJTyAqYmlvYnVmID0gTlVMTDsKQEAgLTg0MSw2NSArNzI5LDYwIEBACiAgICAgfQogICAgIFB5X0RFQ1JFRihwZWVyKTsKIAotICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgIGlzc3VlciA9IF9jcmVhdGVfdHVwbGVfZm9yX1g1MDlfTkFNRSgKLSAgICAgICAgICAgIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGNlcnRpZmljYXRlKSk7Ci0gICAgICAgIGlmIChpc3N1ZXIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDA7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsIChjb25zdCBjaGFyICopImlzc3VlciIsIGlzc3VlcikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoaXNzdWVyKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDA7Ci0gICAgICAgIH0KKyAgICBpc3N1ZXIgPSBfY3JlYXRlX3R1cGxlX2Zvcl9YNTA5X05BTUUoCisgICAgICAgIFg1MDlfZ2V0X2lzc3Vlcl9uYW1lKGNlcnRpZmljYXRlKSk7CisgICAgaWYgKGlzc3VlciA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWwwOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsIChjb25zdCBjaGFyICopImlzc3VlciIsIGlzc3VlcikgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihpc3N1ZXIpOwotCi0gICAgICAgIHZlcnNpb24gPSBQeUxvbmdfRnJvbUxvbmcoWDUwOV9nZXRfdmVyc2lvbihjZXJ0aWZpY2F0ZSkgKyAxKTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgInZlcnNpb24iLCB2ZXJzaW9uKSA8IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2ZXJzaW9uKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDA7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHZlcnNpb24pOworICAgICAgICBnb3RvIGZhaWwwOwogICAgIH0KKyAgICBQeV9ERUNSRUYoaXNzdWVyKTsKKworICAgIHZlcnNpb24gPSBQeUxvbmdfRnJvbUxvbmcoWDUwOV9nZXRfdmVyc2lvbihjZXJ0aWZpY2F0ZSkgKyAxKTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAidmVyc2lvbiIsIHZlcnNpb24pIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYodmVyc2lvbik7CisgICAgICAgIGdvdG8gZmFpbDA7CisgICAgfQorICAgIFB5X0RFQ1JFRih2ZXJzaW9uKTsKIAogICAgIC8qIGdldCBhIG1lbW9yeSBidWZmZXIgKi8KICAgICBiaW9idWYgPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKIAotICAgIGlmICh2ZXJib3NlKSB7Ci0KLSAgICAgICAgKHZvaWQpIEJJT19yZXNldChiaW9idWYpOwotICAgICAgICBzZXJpYWxOdW1iZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1iZXIoY2VydGlmaWNhdGUpOwotICAgICAgICAvKiBzaG91bGQgbm90IGV4Y2VlZCAyMCBvY3RldHMsIDE2MCBiaXRzLCBzbyBidWYgaXMgYmlnIGVub3VnaCAqLwotICAgICAgICBpMmFfQVNOMV9JTlRFR0VSKGJpb2J1Ziwgc2VyaWFsTnVtYmVyKTsKLSAgICAgICAgbGVuID0gQklPX2dldHMoYmlvYnVmLCBidWYsIHNpemVvZihidWYpLTEpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICBnb3RvIGZhaWwxOwotICAgICAgICB9Ci0gICAgICAgIHNuX29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7Ci0gICAgICAgIGlmIChzbl9vYmogPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJzZXJpYWxOdW1iZXIiLCBzbl9vYmopIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHNuX29iaik7Ci0gICAgICAgICAgICBnb3RvIGZhaWwxOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihzbl9vYmopOwotCi0gICAgICAgICh2b2lkKSBCSU9fcmVzZXQoYmlvYnVmKTsKLSAgICAgICAgbm90QmVmb3JlID0gWDUwOV9nZXRfbm90QmVmb3JlKGNlcnRpZmljYXRlKTsKLSAgICAgICAgQVNOMV9USU1FX3ByaW50KGJpb2J1Ziwgbm90QmVmb3JlKTsKLSAgICAgICAgbGVuID0gQklPX2dldHMoYmlvYnVmLCBidWYsIHNpemVvZihidWYpLTEpOwotICAgICAgICBpZiAobGVuIDwgMCkgewotICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICBnb3RvIGZhaWwxOwotICAgICAgICB9Ci0gICAgICAgIHBub3RCZWZvcmUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBsZW4pOwotICAgICAgICBpZiAocG5vdEJlZm9yZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsMTsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKHJldHZhbCwgIm5vdEJlZm9yZSIsIHBub3RCZWZvcmUpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHBub3RCZWZvcmUpOwotICAgICAgICAgICAgZ290byBmYWlsMTsKLSAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYocG5vdEJlZm9yZSk7CisgICAgKHZvaWQpIEJJT19yZXNldChiaW9idWYpOworICAgIHNlcmlhbE51bWJlciA9IFg1MDlfZ2V0X3NlcmlhbE51bWJlcihjZXJ0aWZpY2F0ZSk7CisgICAgLyogc2hvdWxkIG5vdCBleGNlZWQgMjAgb2N0ZXRzLCAxNjAgYml0cywgc28gYnVmIGlzIGJpZyBlbm91Z2ggKi8KKyAgICBpMmFfQVNOMV9JTlRFR0VSKGJpb2J1Ziwgc2VyaWFsTnVtYmVyKTsKKyAgICBsZW4gPSBCSU9fZ2V0cyhiaW9idWYsIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSk7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIGdvdG8gZmFpbDE7CiAgICAgfQorICAgIHNuX29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CisgICAgaWYgKHNuX29iaiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWwxOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJzZXJpYWxOdW1iZXIiLCBzbl9vYmopIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc25fb2JqKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisgICAgUHlfREVDUkVGKHNuX29iaik7CisKKyAgICAodm9pZCkgQklPX3Jlc2V0KGJpb2J1Zik7CisgICAgbm90QmVmb3JlID0gWDUwOV9nZXRfbm90QmVmb3JlKGNlcnRpZmljYXRlKTsKKyAgICBBU04xX1RJTUVfcHJpbnQoYmlvYnVmLCBub3RCZWZvcmUpOworICAgIGxlbiA9IEJJT19nZXRzKGJpb2J1ZiwgYnVmLCBzaXplb2YoYnVmKS0xKTsKKyAgICBpZiAobGVuIDwgMCkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisgICAgcG5vdEJlZm9yZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIGxlbik7CisgICAgaWYgKHBub3RCZWZvcmUgPT0gTlVMTCkKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAibm90QmVmb3JlIiwgcG5vdEJlZm9yZSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihwbm90QmVmb3JlKTsKKyAgICAgICAgZ290byBmYWlsMTsKKyAgICB9CisgICAgUHlfREVDUkVGKHBub3RCZWZvcmUpOwogCiAgICAgKHZvaWQpIEJJT19yZXNldChiaW9idWYpOwogICAgIG5vdEFmdGVyID0gWDUwOV9nZXRfbm90QWZ0ZXIoY2VydGlmaWNhdGUpOwpAQCAtOTQ4LDEzICs4MzEsMTIgQEAKIFB5U1NMX3Rlc3RfZGVjb2RlX2NlcnRpZmljYXRlIChQeU9iamVjdCAqbW9kLCBQeU9iamVjdCAqYXJncykgewogCiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7Ci0gICAgY2hhciAqZmlsZW5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBYNTA5ICp4PU5VTEw7CiAgICAgQklPICpjZXJ0OwotICAgIGludCB2ZXJib3NlID0gMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xpOnRlc3RfZGVjb2RlX2NlcnRpZmljYXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmdmVyYm9zZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjp0ZXN0X2RlY29kZV9jZXJ0aWZpY2F0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJmZpbGVuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoKGNlcnQ9QklPX25ldyhCSU9fc19maWxlKCkpKSA9PSBOVUxMKSB7CkBAIC05NjMsNyArODQ1LDcgQEAKICAgICAgICAgZ290byBmYWlsMDsKICAgICB9CiAKLSAgICBpZiAoQklPX3JlYWRfZmlsZW5hbWUoY2VydCxmaWxlbmFtZSkgPD0gMCkgeworICAgIGlmIChCSU9fcmVhZF9maWxlbmFtZShjZXJ0LCBQeUJ5dGVzX0FzU3RyaW5nKGZpbGVuYW1lKSkgPD0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBvcGVuIGZpbGUiKTsKICAgICAgICAgZ290byBmYWlsMDsKQEAgLTk3NiwxOCArODU4LDE4IEBACiAgICAgICAgIGdvdG8gZmFpbDA7CiAgICAgfQogCi0gICAgcmV0dmFsID0gX2RlY29kZV9jZXJ0aWZpY2F0ZSh4LCB2ZXJib3NlKTsKKyAgICByZXR2YWwgPSBfZGVjb2RlX2NlcnRpZmljYXRlKHgpOwogICAgIFg1MDlfZnJlZSh4KTsKIAogICBmYWlsMDoKLQorICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgaWYgKGNlcnQgIT0gTlVMTCkgQklPX2ZyZWUoY2VydCk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlTU0xfcGVlcmNlcnQoUHlTU0xPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorUHlTU0xfcGVlcmNlcnQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIGludCBsZW47CkBAIC0xMDE4LDEyICs5MDAsMTEgQEAKICAgICAgICAgcmV0dXJuIHJldHZhbDsKIAogICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoc2VsZi0+Y3R4KTsKKyAgICAgICAgdmVyaWZpY2F0aW9uID0gU1NMX0NUWF9nZXRfdmVyaWZ5X21vZGUoU1NMX2dldF9TU0xfQ1RYKHNlbGYtPnNzbCkpOwogICAgICAgICBpZiAoKHZlcmlmaWNhdGlvbiAmIFNTTF9WRVJJRllfUEVFUikgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQeURpY3RfTmV3KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBfZGVjb2RlX2NlcnRpZmljYXRlIChzZWxmLT5wZWVyX2NlcnQsIDApOworICAgICAgICAgICAgcmV0dXJuIF9kZWNvZGVfY2VydGlmaWNhdGUoc2VsZi0+cGVlcl9jZXJ0KTsKICAgICB9CiB9CiAKQEAgLTEwMzksNyArOTIwLDcgQEAKIHBlZXIgY2VydGlmaWNhdGUsIG9yIE5vbmUgaWYgbm8gY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLiAgVGhpcyB3aWxsXG5cCiByZXR1cm4gdGhlIGNlcnRpZmljYXRlIGV2ZW4gaWYgaXQgd2Fzbid0IHZhbGlkYXRlZC4iKTsKIAotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9jaXBoZXIgKFB5U1NMT2JqZWN0ICpzZWxmKSB7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX2NpcGhlciAoUHlTU0xTb2NrZXQgKnNlbGYpIHsKIAogICAgIFB5T2JqZWN0ICpyZXR2YWwsICp2OwogICAgIGNvbnN0IFNTTF9DSVBIRVIgKmN1cnJlbnQ7CkBAIC0xMDg3LDE0ICs5NjgsMTIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgUHlTU0xfZGVhbGxvYyhQeVNTTE9iamVjdCAqc2VsZikKK3N0YXRpYyB2b2lkIFB5U1NMX2RlYWxsb2MoUHlTU0xTb2NrZXQgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPnBlZXJfY2VydCkgICAgICAgIC8qIFBvc3NpYmxlIG5vdCB0byBoYXZlIG9uZT8gKi8KICAgICAgICAgWDUwOV9mcmVlIChzZWxmLT5wZWVyX2NlcnQpOwogICAgIGlmIChzZWxmLT5zc2wpCiAgICAgICAgIFNTTF9mcmVlKHNlbGYtPnNzbCk7Ci0gICAgaWYgKHNlbGYtPmN0eCkKLSAgICAgICAgU1NMX0NUWF9mcmVlKHNlbGYtPmN0eCk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5Tb2NrZXQpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KQEAgLTExNjksMTEgKzEwNDgsMTAgQEAKICAgICByZXR1cm4gcmMgPT0gMCA/IFNPQ0tFVF9IQVNfVElNRURfT1VUIDogU09DS0VUX09QRVJBVElPTl9PSzsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICpQeVNTTF9TU0x3cml0ZShQeVNTTE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHdyaXRlKFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBjaGFyICpkYXRhOworICAgIFB5X2J1ZmZlciBidWY7CiAgICAgaW50IGxlbjsKLSAgICBpbnQgY291bnQ7CiAgICAgaW50IHNvY2tzdGF0ZTsKICAgICBpbnQgZXJyOwogICAgIGludCBub25ibG9ja2luZzsKQEAgLTExODcsNyArMTA2NSw3IEBACiAgICAgfQogICAgIFB5X0lOQ1JFRihzb2NrKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSM6d3JpdGUiLCAmZGF0YSwgJmNvdW50KSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6d3JpdGUiLCAmYnVmKSkgewogICAgICAgICBQeV9ERUNSRUYoc29jayk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTExOTksNyArMTA3Nyw3IEBACiAKICAgICBzb2Nrc3RhdGUgPSBjaGVja19zb2NrZXRfYW5kX3dhaXRfZm9yX3RpbWVvdXQoc29jaywgMSk7CiAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U29ja2V0TW9kdWxlLnRpbWVvdXRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX0JFRU5fQ0xPU0VEKSB7CkBAIC0xMjE0LDExICsxMDkyLDEyIEBACiAgICAgZG8gewogICAgICAgICBlcnIgPSAwOwogICAgICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGxlbiA9IFNTTF93cml0ZShzZWxmLT5zc2wsIGRhdGEsIGNvdW50KTsKKyAgICAgICAgbGVuID0gU1NMX3dyaXRlKHNlbGYtPnNzbCwgYnVmLmJ1ZiwgYnVmLmxlbik7CiAgICAgICAgIGVyciA9IFNTTF9nZXRfZXJyb3Ioc2VsZi0+c3NsLCBsZW4pOwogICAgICAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgewogICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpZiAoZXJyID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKICAgICAgICAgICAgIHNvY2tzdGF0ZSA9IGNoZWNrX3NvY2tldF9hbmRfd2FpdF9mb3JfdGltZW91dChzb2NrLCAwKTsKICAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKQEAgLTEyMjcsNyArMTEwNiw3IEBACiAgICAgICAgICAgICBzb2Nrc3RhdGUgPSBTT0NLRVRfT1BFUkFUSU9OX09LOwogICAgICAgICB9CiAgICAgICAgIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX0hBU19USU1FRF9PVVQpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U29ja2V0TW9kdWxlLnRpbWVvdXRfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSB3cml0ZSBvcGVyYXRpb24gdGltZWQgb3V0Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX0JFRU5fQ0xPU0VEKSB7CkBAIC0xMjQwLDYgKzExMTksNyBAQAogICAgIH0gd2hpbGUgKGVyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEIHx8IGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSk7CiAKICAgICBQeV9ERUNSRUYoc29jayk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmKTsKICAgICBpZiAobGVuID4gMCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhsZW4pOwogICAgIGVsc2UKQEAgLTEyNDcsNiArMTEyNyw3IEBACiAKIGVycm9yOgogICAgIFB5X0RFQ1JFRihzb2NrKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjU2LDcgKzExMzcsNyBAQAogV3JpdGVzIHRoZSBzdHJpbmcgcyBpbnRvIHRoZSBTU0wgb2JqZWN0LiAgUmV0dXJucyB0aGUgbnVtYmVyXG5cCiBvZiBieXRlcyB3cml0dGVuLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHBlbmRpbmcoUHlTU0xPYmplY3QgKnNlbGYpCitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHBlbmRpbmcoUHlTU0xTb2NrZXQgKnNlbGYpCiB7CiAgICAgaW50IGNvdW50ID0gMDsKIApAQCAtMTI3NSw3ICsxMTU2LDcgQEAKIFJldHVybnMgdGhlIG51bWJlciBvZiBhbHJlYWR5IGRlY3J5cHRlZCBieXRlcyBhdmFpbGFibGUgZm9yIHJlYWQsXG5cCiBwZW5kaW5nIG9uIHRoZSBjb25uZWN0aW9uLlxuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMcmVhZChQeVNTTE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHJlYWQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpkZXN0ID0gTlVMTDsKICAgICBQeV9idWZmZXIgYnVmOwpAQCAtMTMzMiw3ICsxMjEzLDcgQEAKICAgICBpZiAoIWNvdW50KSB7CiAgICAgICAgIHNvY2tzdGF0ZSA9IGNoZWNrX3NvY2tldF9hbmRfd2FpdF9mb3JfdGltZW91dChzb2NrLCAwKTsKICAgICAgICAgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSEFTX1RJTUVEX09VVCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5U1NMRXJyb3JPYmplY3QsCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTb2NrZXRNb2R1bGUudGltZW91dF9lcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlYWQgb3BlcmF0aW9uIHRpbWVkIG91dCIpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX1RPT19MQVJHRV9GT1JfU0VMRUNUKSB7CkBAIC0xMzY2LDcgKzEyNDcsNyBAQAogICAgICAgICAgICAgc29ja3N0YXRlID0gU09DS0VUX09QRVJBVElPTl9PSzsKICAgICAgICAgfQogICAgICAgICBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfVElNRURfT1VUKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgcmVhZCBvcGVyYXRpb24gdGltZWQgb3V0Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9IGVsc2UgaWYgKHNvY2tzdGF0ZSA9PSBTT0NLRVRfSVNfTk9OQkxPQ0tJTkcpIHsKQEAgLTE0MDMsNyArMTI4NCw3IEBACiBcblwKIFJlYWQgdXAgdG8gbGVuIGJ5dGVzIGZyb20gdGhlIFNTTCBzb2NrZXQuIik7CiAKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xfU1NMc2h1dGRvd24oUHlTU0xPYmplY3QgKnNlbGYpCitzdGF0aWMgUHlPYmplY3QgKlB5U1NMX1NTTHNodXRkb3duKFB5U1NMU29ja2V0ICpzZWxmKQogewogICAgIGludCBlcnIsIHNzbF9lcnIsIHNvY2tzdGF0ZSwgbm9uYmxvY2tpbmc7CiAgICAgaW50IHplcm9zID0gMDsKQEAgLTE0NjEsMTAgKzEzNDIsMTAgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfVElNRURfT1VUKSB7CiAgICAgICAgICAgICBpZiAoc3NsX2VyciA9PSBTU0xfRVJST1JfV0FOVF9SRUFEKQotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlYWQgb3BlcmF0aW9uIHRpbWVkIG91dCIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNvY2tldE1vZHVsZS50aW1lb3V0X2Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHdyaXRlIG9wZXJhdGlvbiB0aW1lZCBvdXQiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KQEAgLTE1MTQsMTAgKzEzOTUsMTAgQEAKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlTU0xfVHlwZSA9IHsKK3N0YXRpYyBQeVR5cGVPYmplY3QgUHlTU0xTb2NrZXRfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAic3NsLlNTTENvbnRleHQiLCAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihQeVNTTE9iamVjdCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAiX3NzbC5fU1NMU29ja2V0IiwgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihQeVNTTFNvY2tldCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KICAgICAvKiBtZXRob2RzICovCiAgICAgKGRlc3RydWN0b3IpUHlTU0xfZGVhbGxvYywgICAgICAgICAgLyp0cF9kZWFsbG9jKi8KQEAgLTE1NDYsNiArMTQyNyw0NDEgQEAKICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwogfTsKIAorCisvKgorICogX1NTTENvbnRleHQgb2JqZWN0cworICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitjb250ZXh0X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsicHJvdG9jb2wiLCBOVUxMfTsKKyAgICBQeVNTTENvbnRleHQgKnNlbGY7CisgICAgaW50IHByb3RvX3ZlcnNpb24gPSBQWV9TU0xfVkVSU0lPTl9TU0wyMzsKKyAgICBTU0xfQ1RYICpjdHggPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoCisgICAgICAgIGFyZ3MsIGt3ZHMsICJpOl9TU0xDb250ZXh0Iiwga3dsaXN0LAorICAgICAgICAmcHJvdG9fdmVyc2lvbikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzEpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFRMU3YxX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDMpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYzX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDIpCisgICAgICAgIGN0eCA9IFNTTF9DVFhfbmV3KFNTTHYyX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1NTTDIzKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhTU0x2MjNfbWV0aG9kKCkpOworICAgIGVsc2UKKyAgICAgICAgcHJvdG9fdmVyc2lvbiA9IC0xOworICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocHJvdG9fdmVyc2lvbiA9PSAtMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHByb3RvY29sIHZlcnNpb24iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChjdHggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgU1NMIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYXNzZXJ0KHR5cGUgIT0gTlVMTCAmJiB0eXBlLT50cF9hbGxvYyAhPSBOVUxMKTsKKyAgICBzZWxmID0gKFB5U1NMQ29udGV4dCAqKSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKSB7CisgICAgICAgIFNTTF9DVFhfZnJlZShjdHgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2VsZi0+Y3R4ID0gY3R4OworICAgIC8qIERlZmF1bHRzICovCisgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNlbGYtPmN0eCwgU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKKyAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNlbGYtPmN0eCwgU1NMX09QX0FMTCk7CisKKyNkZWZpbmUgU0lEX0NUWCAiUHl0aG9uIgorICAgIFNTTF9DVFhfc2V0X3Nlc3Npb25faWRfY29udGV4dChzZWxmLT5jdHgsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIFNJRF9DVFgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihTSURfQ1RYKSk7CisjdW5kZWYgU0lEX0NUWAorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7Cit9CisKK3N0YXRpYyB2b2lkCitjb250ZXh0X2RlYWxsb2MoUHlTU0xDb250ZXh0ICpzZWxmKQoreworICAgIFNTTF9DVFhfZnJlZShzZWxmLT5jdHgpOworICAgIFB5X1RZUEUoc2VsZiktPnRwX2ZyZWUoc2VsZik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfY2lwaGVycyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCByZXQ7CisgICAgY29uc3QgY2hhciAqY2lwaGVybGlzdDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpzZXRfY2lwaGVycyIsICZjaXBoZXJsaXN0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0ID0gU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3Qoc2VsZi0+Y3R4LCBjaXBoZXJsaXN0KTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgLyogQ2xlYXJpbmcgdGhlIGVycm9yIHF1ZXVlIGlzIG5lY2Vzc2FyeSBvbiBzb21lIE9wZW5TU0wgdmVyc2lvbnMsCisgICAgICAgICAgIG90aGVyd2lzZSB0aGUgZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhZ2FpbiB3aGVuIGFub3RoZXIgU1NMIGNhbGwKKyAgICAgICAgICAgaXMgZG9uZS4gKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGNpcGhlciBjYW4gYmUgc2VsZWN0ZWQuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldF92ZXJpZnlfbW9kZShQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgc3dpdGNoIChTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZShzZWxmLT5jdHgpKSB7CisgICAgY2FzZSBTU0xfVkVSSUZZX05PTkU6CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUFlfU1NMX0NFUlRfTk9ORSk7CisgICAgY2FzZSBTU0xfVkVSSUZZX1BFRVI6CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUFlfU1NMX0NFUlRfT1BUSU9OQUwpOworICAgIGNhc2UgU1NMX1ZFUklGWV9QRUVSIHwgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVDoKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQWV9TU0xfQ0VSVF9SRVFVSVJFRCk7CisgICAgfQorICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCByZXR1cm4gdmFsdWUgZnJvbSBTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZSIpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50CitzZXRfdmVyaWZ5X21vZGUoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJnLCB2b2lkICpjKQoreworICAgIGludCBuLCBtb2RlOworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAiaSIsICZuKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChuID09IFBZX1NTTF9DRVJUX05PTkUpCisgICAgICAgIG1vZGUgPSBTU0xfVkVSSUZZX05PTkU7CisgICAgZWxzZSBpZiAobiA9PSBQWV9TU0xfQ0VSVF9PUFRJT05BTCkKKyAgICAgICAgbW9kZSA9IFNTTF9WRVJJRllfUEVFUjsKKyAgICBlbHNlIGlmIChuID09IFBZX1NTTF9DRVJUX1JFUVVJUkVEKQorICAgICAgICBtb2RlID0gU1NMX1ZFUklGWV9QRUVSIHwgU1NMX1ZFUklGWV9GQUlMX0lGX05PX1BFRVJfQ0VSVDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB2YWx1ZSBmb3IgdmVyaWZ5X21vZGUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkoc2VsZi0+Y3R4LCBtb2RlLCBOVUxMKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldF9vcHRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqYykKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKFNTTF9DVFhfZ2V0X29wdGlvbnMoc2VsZi0+Y3R4KSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9vcHRpb25zKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKmFyZywgdm9pZCAqYykKK3sKKyAgICBsb25nIG5ld19vcHRzLCBvcHRzLCBzZXQsIGNsZWFyOworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAibCIsICZuZXdfb3B0cykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBvcHRzID0gU1NMX0NUWF9nZXRfb3B0aW9ucyhzZWxmLT5jdHgpOworICAgIGNsZWFyID0gb3B0cyAmIH5uZXdfb3B0czsKKyAgICBzZXQgPSB+b3B0cyAmIG5ld19vcHRzOworICAgIGlmIChjbGVhcikgeworI2lmZGVmIEhBVkVfU1NMX0NUWF9DTEVBUl9PUFRJT05TCisgICAgICAgIFNTTF9DVFhfY2xlYXJfb3B0aW9ucyhzZWxmLT5jdHgsIGNsZWFyKTsKKyNlbHNlCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IGNsZWFyIG9wdGlvbnMgYmVmb3JlIE9wZW5TU0wgMC45LjhtIik7CisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorICAgIH0KKyAgICBpZiAoc2V0KQorICAgICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNlbGYtPmN0eCwgc2V0KTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2xvYWRfY2VydF9jaGFpbihQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiY2VydGZpbGUiLCAia2V5ZmlsZSIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpjZXJ0ZmlsZSwgKmtleWZpbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjZXJ0ZmlsZV9ieXRlcyA9IE5VTEwsICprZXlmaWxlX2J5dGVzID0gTlVMTDsKKyAgICBpbnQgcjsKKworICAgIGVycm5vID0gMDsKKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAorICAgICAgICAiT3xPOmxvYWRfY2VydF9jaGFpbiIsIGt3bGlzdCwKKyAgICAgICAgJmNlcnRmaWxlLCAma2V5ZmlsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChrZXlmaWxlID09IFB5X05vbmUpCisgICAgICAgIGtleWZpbGUgPSBOVUxMOworICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKGNlcnRmaWxlLCAmY2VydGZpbGVfYnl0ZXMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGZpbGUgc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoa2V5ZmlsZSAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGtleWZpbGUsICZrZXlmaWxlX2J5dGVzKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleWZpbGUgc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByID0gU1NMX0NUWF91c2VfY2VydGlmaWNhdGVfY2hhaW5fZmlsZShzZWxmLT5jdHgsCisgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNlcnRmaWxlX2J5dGVzKSk7CisgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAociAhPSAxKSB7CisgICAgICAgIGlmIChlcnJubyAhPSAwKSB7CisgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICB9CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByID0gU1NMX0NUWF91c2VfUHJpdmF0ZUtleV9maWxlKHNlbGYtPmN0eCwKKyAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoa2V5ZmlsZSA/IGtleWZpbGVfYnl0ZXMgOiBjZXJ0ZmlsZV9ieXRlcyksCisgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOworICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgUHlfWERFQ1JFRihrZXlmaWxlX2J5dGVzKTsKKyAgICBQeV9YREVDUkVGKGNlcnRmaWxlX2J5dGVzKTsKKyAgICBpZiAociAhPSAxKSB7CisgICAgICAgIGlmIChlcnJubyAhPSAwKSB7CisgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCisgICAgciA9IFNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkoc2VsZi0+Y3R4KTsKKyAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmIChyICE9IDEpIHsKKyAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihrZXlmaWxlX2J5dGVzKTsKKyAgICBQeV9YREVDUkVGKGNlcnRmaWxlX2J5dGVzKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiY2FmaWxlIiwgImNhcGF0aCIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpjYWZpbGUgPSBOVUxMLCAqY2FwYXRoID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY2FmaWxlX2J5dGVzID0gTlVMTCwgKmNhcGF0aF9ieXRlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqY2FmaWxlX2J1ZiA9IE5VTEwsICpjYXBhdGhfYnVmID0gTlVMTDsKKyAgICBpbnQgcjsKKworICAgIGVycm5vID0gMDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAorICAgICAgICAifE9POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKKyAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChjYWZpbGUgPT0gUHlfTm9uZSkKKyAgICAgICAgY2FmaWxlID0gTlVMTDsKKyAgICBpZiAoY2FwYXRoID09IFB5X05vbmUpCisgICAgICAgIGNhcGF0aCA9IE5VTEw7CisgICAgaWYgKGNhZmlsZSA9PSBOVUxMICYmIGNhcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIGFuZCBjYXBhdGggY2Fubm90IGJlIGJvdGggb21pdHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGNhZmlsZSAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGNhZmlsZSwgJmNhZmlsZV9ieXRlcykpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUgc2hvdWxkIGJlIGEgdmFsaWQgZmlsZXN5c3RlbSBwYXRoIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoY2FwYXRoICYmICFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoY2FwYXRoLCAmY2FwYXRoX2J5dGVzKSkgeworICAgICAgICBQeV9YREVDUkVGKGNhZmlsZV9ieXRlcyk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2FwYXRoIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVzeXN0ZW0gcGF0aCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGNhZmlsZSkKKyAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7CisgICAgaWYgKGNhcGF0aCkKKyAgICAgICAgY2FwYXRoX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhcGF0aF9ieXRlcyk7CisgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHIgPSBTU0xfQ1RYX2xvYWRfdmVyaWZ5X2xvY2F0aW9ucyhzZWxmLT5jdHgsIGNhZmlsZV9idWYsIGNhcGF0aF9idWYpOworICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOworICAgIFB5X1hERUNSRUYoY2FwYXRoX2J5dGVzKTsKKyAgICBpZiAociAhPSAxKSB7CisgICAgICAgIGlmIChlcnJubyAhPSAwKSB7CisgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2NvbnRleHRfd3JhcF9zb2NrZXQoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InNvY2siLCAic2VydmVyX3NpZGUiLCAic2VydmVyX2hvc3RuYW1lIiwgTlVMTH07CisgICAgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrOworICAgIGludCBzZXJ2ZXJfc2lkZSA9IDA7CisgICAgY2hhciAqaG9zdG5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpob3N0bmFtZV9vYmosICpyZXM7CisKKyAgICAvKiBzZXJ2ZXJfaG9zdG5hbWUgaXMgZWl0aGVyIE5vbmUgKG9yIGFic2VudCksIG9yIHRvIGJlIGVuY29kZWQKKyAgICAgICB1c2luZyB0aGUgaWRuYSBlbmNvZGluZy4gKi8KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTyFpfE8hOl93cmFwX3NvY2tldCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVNvY2tldE1vZHVsZS5Tb2NrX1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKFB5X05vbmUpLCAmaG9zdG5hbWVfb2JqKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiTyFpZXQ6X3dyYXBfc29ja2V0Iiwga3dsaXN0LAorICAgICAgICAgICAgUHlTb2NrZXRNb2R1bGUuU29ja19UeXBlLAorICAgICAgICAgICAgJnNvY2ssICZzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICJpZG5hIiwgJmhvc3RuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworI2lmbmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNlcnZlcl9ob3N0bmFtZSBpcyBub3Qgc3VwcG9ydGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJieSB5b3VyIE9wZW5TU0wgbGlicmFyeSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorICAgIH0KKworICAgIHJlcyA9IChQeU9iamVjdCAqKSBuZXdQeVNTTFNvY2tldChzZWxmLT5jdHgsIHNvY2ssIHNlcnZlcl9zaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7CisgICAgaWYgKGhvc3RuYW1lICE9IE5VTEwpCisgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXNzaW9uX3N0YXRzKFB5U1NMQ29udGV4dCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICBpbnQgcjsKKyAgICBQeU9iamVjdCAqdmFsdWUsICpzdGF0cyA9IFB5RGljdF9OZXcoKTsKKyAgICBpZiAoIXN0YXRzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworI2RlZmluZSBBRERfU1RBVFMoU1NMX05BTUUsIEtFWV9OQU1FKSBcCisgICAgdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoU1NMX0NUWF9zZXNzXyAjIyBTU0xfTkFNRSAoc2VsZi0+Y3R4KSk7IFwKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkgXAorICAgICAgICBnb3RvIGVycm9yOyBcCisgICAgciA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHN0YXRzLCBLRVlfTkFNRSwgdmFsdWUpOyBcCisgICAgUHlfREVDUkVGKHZhbHVlKTsgXAorICAgIGlmIChyIDwgMCkgXAorICAgICAgICBnb3RvIGVycm9yOworCisgICAgQUREX1NUQVRTKG51bWJlciwgIm51bWJlciIpOworICAgIEFERF9TVEFUUyhjb25uZWN0LCAiY29ubmVjdCIpOworICAgIEFERF9TVEFUUyhjb25uZWN0X2dvb2QsICJjb25uZWN0X2dvb2QiKTsKKyAgICBBRERfU1RBVFMoY29ubmVjdF9yZW5lZ290aWF0ZSwgImNvbm5lY3RfcmVuZWdvdGlhdGUiKTsKKyAgICBBRERfU1RBVFMoYWNjZXB0LCAiYWNjZXB0Iik7CisgICAgQUREX1NUQVRTKGFjY2VwdF9nb29kLCAiYWNjZXB0X2dvb2QiKTsKKyAgICBBRERfU1RBVFMoYWNjZXB0X3JlbmVnb3RpYXRlLCAiYWNjZXB0X3JlbmVnb3RpYXRlIik7CisgICAgQUREX1NUQVRTKGFjY2VwdCwgImFjY2VwdCIpOworICAgIEFERF9TVEFUUyhoaXRzLCAiaGl0cyIpOworICAgIEFERF9TVEFUUyhtaXNzZXMsICJtaXNzZXMiKTsKKyAgICBBRERfU1RBVFModGltZW91dHMsICJ0aW1lb3V0cyIpOworICAgIEFERF9TVEFUUyhjYWNoZV9mdWxsLCAiY2FjaGVfZnVsbCIpOworCisjdW5kZWYgQUREX1NUQVRTCisKKyAgICByZXR1cm4gc3RhdHM7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzdGF0cyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIGlmICghU1NMX0NUWF9zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoc2VsZi0+Y3R4KSkgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlHZXRTZXREZWYgY29udGV4dF9nZXRzZXRsaXN0W10gPSB7CisgICAgeyJvcHRpb25zIiwgKGdldHRlcikgZ2V0X29wdGlvbnMsCisgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X29wdGlvbnMsIE5VTEx9LAorICAgIHsidmVyaWZ5X21vZGUiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X21vZGUsCisgICAgICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF92ZXJpZnlfbW9kZSwgTlVMTH0sCisgICAge05VTEx9LCAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGNvbnRleHRfbWV0aG9kc1tdID0geworICAgIHsiX3dyYXBfc29ja2V0IiwgKFB5Q0Z1bmN0aW9uKSBjb250ZXh0X3dyYXBfc29ja2V0LAorICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBOVUxMfSwKKyAgICB7InNldF9jaXBoZXJzIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfY2lwaGVycywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCBOVUxMfSwKKyAgICB7ImxvYWRfY2VydF9jaGFpbiIsIChQeUNGdW5jdGlvbikgbG9hZF9jZXJ0X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgTlVMTH0sCisgICAgeyJsb2FkX3ZlcmlmeV9sb2NhdGlvbnMiLCAoUHlDRnVuY3Rpb24pIGxvYWRfdmVyaWZ5X2xvY2F0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIE5VTEx9LAorICAgIHsic2Vzc2lvbl9zdGF0cyIsIChQeUNGdW5jdGlvbikgc2Vzc2lvbl9zdGF0cywKKyAgICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJzZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMiLCAoUHlDRnVuY3Rpb24pIHNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0gICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCitzdGF0aWMgUHlUeXBlT2JqZWN0IFB5U1NMQ29udGV4dF9UeXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQorICAgICJfc3NsLl9TU0xDb250ZXh0IiwgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLworICAgIHNpemVvZihQeVNTTENvbnRleHQpLCAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIChkZXN0cnVjdG9yKWNvbnRleHRfZGVhbGxvYywgICAgICAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc3RyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KKyAgICBjb250ZXh0X21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICBjb250ZXh0X2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hbGxvYyovCisgICAgY29udGV4dF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KK307CisKKworCiAjaWZkZWYgSEFWRV9PUEVOU1NMX1JBTkQKIAogLyogaGVscGVyIHJvdXRpbmVzIGZvciBzZWVkaW5nIHRoZSBTU0wgUFJORyAqLwpAQCAtMTU4MywxNSArMTg5OSwxNyBAQAogdXNpbmcgdGhlIHNzbCgpIGZ1bmN0aW9uLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlTU0xfUkFORF9lZ2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCitQeVNTTF9SQU5EX2VnZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnBhdGg7CiAgICAgaW50IGJ5dGVzOwogCi0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soYXJnKSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJBTkRfZWdkKCkgZXhwZWN0ZWQgc3RyaW5nLCBmb3VuZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShhcmcpLT50cF9uYW1lKTsKLSAgICBieXRlcyA9IFJBTkRfZWdkKF9QeVVuaWNvZGVfQXNTdHJpbmcoYXJnKSk7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnxpOlJBTkRfZWdkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgYnl0ZXMgPSBSQU5EX2VnZChQeUJ5dGVzX0FzU3RyaW5nKHBhdGgpKTsKKyAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgaWYgKGJ5dGVzID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeVNTTEVycm9yT2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIkVHRCBjb25uZWN0aW9uIGZhaWxlZCBvciBFR0QgZGlkIG5vdCByZXR1cm4gIgpAQCAtMTYxNSwxNCArMTkzMywxMiBAQAogLyogTGlzdCBvZiBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhpcyBtb2R1bGUuICovCiAKIHN0YXRpYyBQeU1ldGhvZERlZiBQeVNTTF9tZXRob2RzW10gPSB7Ci0gICAgeyJzc2x3cmFwIiwgICAgICAgICAgICAgUHlTU0xfc3Nsd3JhcCwKLSAgICAgTUVUSF9WQVJBUkdTLCBzc2xfZG9jfSwKICAgICB7Il90ZXN0X2RlY29kZV9jZXJ0IiwgICAgICAgUHlTU0xfdGVzdF9kZWNvZGVfY2VydGlmaWNhdGUsCiAgICAgIE1FVEhfVkFSQVJHU30sCiAjaWZkZWYgSEFWRV9PUEVOU1NMX1JBTkQKICAgICB7IlJBTkRfYWRkIiwgICAgICAgICAgICBQeVNTTF9SQU5EX2FkZCwgTUVUSF9WQVJBUkdTLAogICAgICBQeVNTTF9SQU5EX2FkZF9kb2N9LAotICAgIHsiUkFORF9lZ2QiLCAgICAgICAgICAgIFB5U1NMX1JBTkRfZWdkLCBNRVRIX08sCisgICAgeyJSQU5EX2VnZCIsICAgICAgICAgICAgUHlTU0xfUkFORF9lZ2QsIE1FVEhfVkFSQVJHUywKICAgICAgUHlTU0xfUkFORF9lZ2RfZG9jfSwKICAgICB7IlJBTkRfc3RhdHVzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlTU0xfUkFORF9zdGF0dXMsIE1FVEhfTk9BUkdTLAogICAgICBQeVNTTF9SQU5EX3N0YXR1c19kb2N9LApAQCAtMTcyMCwxMCArMjAzNiwxNCBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc3NsKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKnI7CisgICAgdW5zaWduZWQgbG9uZyBsaWJ2ZXI7CisgICAgdW5zaWduZWQgaW50IG1ham9yLCBtaW5vciwgZml4LCBwYXRjaCwgc3RhdHVzOwogICAgIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCAqc29ja2V0X2FwaTsKIAotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5U1NMX1R5cGUpIDwgMCkKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVNTTENvbnRleHRfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVNTTFNvY2tldF9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NzbG1vZHVsZSk7CkBAIC0xNzU2LDggKzIwNzYsMTEgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJTU0xFcnJvciIsIFB5U1NMRXJyb3JPYmplY3QpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiU1NMVHlwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeVNTTF9UeXBlKSAhPSAwKQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX1NTTENvbnRleHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikmUHlTU0xDb250ZXh0X1R5cGUpICE9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX1NTTFNvY2tldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeVNTTFNvY2tldF9UeXBlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1NMX0VSUk9SX1pFUk9fUkVUVVJOIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfRVJST1JfWkVST19SRVRVUk4pOwpAQCAtMTc5NSw1ICsyMTE4LDQ2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9UTFN2MSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMSk7CisKKyAgICAvKiBwcm90b2NvbCBvcHRpb25zICovCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX0FMTCIsIFNTTF9PUF9BTEwpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19TU0x2MiIsIFNTTF9PUF9OT19TU0x2Mik7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYzIiwgU1NMX09QX05PX1NTTHYzKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fVExTdjEiLCBTU0xfT1BfTk9fVExTdjEpOworCisjaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorICAgIHIgPSBQeV9UcnVlOworI2Vsc2UKKyAgICByID0gUHlfRmFsc2U7CisjZW5kaWYKKyAgICBQeV9JTkNSRUYocik7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJIQVNfU05JIiwgcik7CisKKyAgICAvKiBPcGVuU1NMIHZlcnNpb24gKi8KKyAgICAvKiBTU0xlYXkoKSBnaXZlcyB1cyB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBsaW5rZWQgYWdhaW5zdCwKKyAgICAgICB3aGljaCBjb3VsZCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgaGVhZGVycyB2ZXJzaW9uLgorICAgICovCisgICAgbGlidmVyID0gU1NMZWF5KCk7CisgICAgciA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGxpYnZlcik7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT1BFTlNTTF9WRVJTSU9OX05VTUJFUiIsIHIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdGF0dXMgPSBsaWJ2ZXIgJiAweEY7CisgICAgbGlidmVyID4+PSA0OworICAgIHBhdGNoID0gbGlidmVyICYgMHhGRjsKKyAgICBsaWJ2ZXIgPj49IDg7CisgICAgZml4ID0gbGlidmVyICYgMHhGRjsKKyAgICBsaWJ2ZXIgPj49IDg7CisgICAgbWlub3IgPSBsaWJ2ZXIgJiAweEZGOworICAgIGxpYnZlciA+Pj0gODsKKyAgICBtYWpvciA9IGxpYnZlciAmIDB4RkY7CisgICAgciA9IFB5X0J1aWxkVmFsdWUoIklJSUlJIiwgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXMpOworICAgIGlmIChyID09IE5VTEwgfHwgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPUEVOU1NMX1ZFUlNJT05fSU5GTyIsIHIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pKTsKKyAgICBpZiAociA9PSBOVUxMIHx8IFB5TW9kdWxlX0FkZE9iamVjdChtLCAiT1BFTlNTTF9WRVJTSU9OIiwgcikpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdHJ1Y3QuYyBiL01vZHVsZXMvX3N0cnVjdC5jCmluZGV4IDA5MmI3MmMuLjE2MDRiOTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3N0cnVjdC5jCisrKyBiL01vZHVsZXMvX3N0cnVjdC5jCkBAIC02LDcgKzYsNiBAQAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlIDxjdHlwZS5oPgogCkBAIC04OSwxOSArODgsMzAgQEAKICNwcmFnbWEgb3B0aW9ucyBhbGlnbj1yZXNldAogI2VuZGlmCiAKLS8qIEhlbHBlciB0byBnZXQgYSBQeUxvbmdPYmplY3QuICBDYWxsZXIgc2hvdWxkIGRlY3JlZi4gKi8KKy8qIEhlbHBlciBmb3IgaW50ZWdlciBmb3JtYXQgY29kZXM6IGNvbnZlcnRzIGFuIGFyYml0cmFyeSBQeXRob24gb2JqZWN0IHRvIGEKKyAgIFB5TG9uZ09iamVjdCBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGZhaWxzLiAgQ2FsbGVyIHNob3VsZCBkZWNyZWYuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfcHlsb25nKFB5T2JqZWN0ICp2KQogewogICAgIGFzc2VydCh2ICE9IE5VTEwpOwogICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgYW4gaW50ZWdlciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogTm90IGFuIGludGVnZXI7ICB0cnkgdG8gdXNlIF9faW5kZXhfXyB0byBjb252ZXJ0LiAqLworICAgICAgICBpZiAoUHlJbmRleF9DaGVjayh2KSkgeworICAgICAgICAgICAgdiA9IFB5TnVtYmVyX0luZGV4KHYpOworICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQgYXJndW1lbnQgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQorICAgIGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKHYpOwogCi0gICAgUHlfSU5DUkVGKHYpOworICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOwogICAgIHJldHVybiB2OwogfQogCkBAIC0xMTMsMTMgKzEyMywxMyBAQAogewogICAgIGxvbmcgeDsKIAotICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgYW4gaW50ZWdlciIpOworICAgIHYgPSBnZXRfcHlsb25nKHYpOworICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CisgICAgYXNzZXJ0KFB5TG9uZ19DaGVjayh2KSk7CiAgICAgeCA9IFB5TG9uZ19Bc0xvbmcodik7Ci0gICAgaWYgKHggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgIFB5X0RFQ1JFRih2KTsKKyAgICBpZiAoeCA9PSAobG9uZyktMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiKTsKQEAgLTEzMiwxOCArMTQyLDE3IEBACiAKIC8qIFNhbWUsIGJ1dCBoYW5kbGluZyB1bnNpZ25lZCBsb25nICovCiAKLSNpZm5kZWYgUFlfU1RSVUNUX09WRVJGTE9XX01BU0tJTkcKIHN0YXRpYyBpbnQKIGdldF91bG9uZyhQeU9iamVjdCAqdiwgdW5zaWduZWQgbG9uZyAqcCkKIHsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAKLSAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQgYXJndW1lbnQgaXMgbm90IGFuIGludGVnZXIiKTsKKyAgICB2ID0gZ2V0X3B5bG9uZyh2KTsKKyAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOwogICAgIHggPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcodik7CisgICAgUHlfREVDUkVGKHYpOwogICAgIGlmICh4ID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCkBAIC0xNTMsNyArMTYyLDYgQEAKICAgICAqcCA9IHg7CiAgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYgIC8qIFBZX1NUUlVDVF9PVkVSRkxPV19NQVNLSU5HICovCiAKICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogCkBAIC0xNjMsMTMgKzE3MSwxNCBAQAogZ2V0X2xvbmdsb25nKFB5T2JqZWN0ICp2LCBQWV9MT05HX0xPTkcgKnApCiB7CiAgICAgUFlfTE9OR19MT05HIHg7Ci0gICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIGFyZ3VtZW50IGlzIG5vdCBhbiBpbnRlZ2VyIik7CisKKyAgICB2ID0gZ2V0X3B5bG9uZyh2KTsKKyAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodikpOwogICAgIHggPSBQeUxvbmdfQXNMb25nTG9uZyh2KTsKLSAgICBpZiAoeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgUHlfREVDUkVGKHYpOworICAgIGlmICh4ID09IChQWV9MT05HX0xPTkcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CkBAIC0xODUsMTMgKzE5NCwxNCBAQAogZ2V0X3Vsb25nbG9uZyhQeU9iamVjdCAqdiwgdW5zaWduZWQgUFlfTE9OR19MT05HICpwKQogewogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4OwotICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCBhcmd1bWVudCBpcyBub3QgYW4gaW50ZWdlciIpOworCisgICAgdiA9IGdldF9weWxvbmcodik7CisgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHYpKTsKICAgICB4ID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyh2KTsKLSAgICBpZiAoeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgUHlfREVDUkVGKHYpOworICAgIGlmICh4ID09ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CkBAIC00NTIsMTQgKzQ2Miw5IEBACiBzdGF0aWMgaW50CiBucF9jaGFyKGNoYXIgKnAsIFB5T2JqZWN0ICp2LCBjb25zdCBmb3JtYXRkZWYgKmYpCiB7Ci0gICAgaWYgKFB5VW5pY29kZV9DaGVjayh2KSkgewotICAgICAgICB2ID0gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKHYsIE5VTEwpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sodikgfHwgUHlCeXRlc19TaXplKHYpICE9IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImNoYXIgZm9ybWF0IHJlcXVpcmVzIGJ5dGVzIG9yIHN0cmluZyBvZiBsZW5ndGggMSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNoYXIgZm9ybWF0IHJlcXVpcmVzIGEgYnl0ZXMgb2JqZWN0IG9mIGxlbmd0aCAxIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgKnAgPSAqUHlCeXRlc19Bc1N0cmluZyh2KTsKQEAgLTExOTIsOCArMTE5NywxMSBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIG92ZXJmbG93OwogICAgICAgICAgICAgICAgIG51bSA9IG51bSoxMCArIChjIC0gJzAnKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjID09ICdcMCcpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoYyA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVwZWF0IGNvdW50IGdpdmVuIHdpdGhvdXQgZm9ybWF0IHNwZWNpZmllciIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBudW0gPSAxOwpAQCAtMTMzMiw3ICsxMzQwLDcgQEAKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob19mb3JtYXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihvX2Zvcm1hdCk7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiU3RydWN0KCkgYXJndW1lbnQgMSBtdXN0IGJlIGJ5dGVzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICJTdHJ1Y3QoKSBhcmd1bWVudCAxIG11c3QgYmUgYSBieXRlcyBvYmplY3QsIG5vdCAlLjIwMHMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvX2Zvcm1hdCktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTQxMCw3ICsxNDE4LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHZidWYubGVuICE9IHNvc2VsZi0+c19zaXplKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ1bnBhY2sgcmVxdWlyZXMgYSBieXRlcyBhcmd1bWVudCBvZiBsZW5ndGggJXpkIiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bnBhY2sgcmVxdWlyZXMgYSBieXRlcyBvYmplY3Qgb2YgbGVuZ3RoICV6ZCIsCiAgICAgICAgICAgICAgICAgICAgICBzb3NlbGYtPnNfc2l6ZSk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE0OTAsMTUgKzE0OTgsMTAgQEAKICAgICAgICAgaWYgKGUtPmZvcm1hdCA9PSAncycpIHsKICAgICAgICAgICAgIGludCBpc3N0cmluZzsKICAgICAgICAgICAgIHZvaWQgKnA7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgdiA9IF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyh2LCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7CiAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhTdHJ1Y3RFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IGZvciAncycgbXVzdCBiZSBhIGJ5dGVzIG9yIHN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdzJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7CkBAIC0xNTE2LDE1ICsxNTE5LDEwIEBACiAgICAgICAgIH0gZWxzZSBpZiAoZS0+Zm9ybWF0ID09ICdwJykgewogICAgICAgICAgICAgaW50IGlzc3RyaW5nOwogICAgICAgICAgICAgdm9pZCAqcDsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB2ID0gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKHYsIE5VTEwpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKICAgICAgICAgICAgIGlmICghaXNzdHJpbmcgJiYgIVB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0IGJlIGEgYnl0ZXMgb3Igc3RyaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKQEAgLTE2NzgsNyArMTY3Niw3IEBACiAgICAge05VTEwsICAgICAgIE5VTEx9ICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCi1QeURvY19TVFJWQVIoc19fZG9jX18sIAorUHlEb2NfU1RSVkFSKHNfX2RvY19fLAogIlN0cnVjdChmbXQpIC0tPiBjb21waWxlZCBzdHJ1Y3Qgb2JqZWN0XG4iCiAiXG4iCiAiUmV0dXJuIGEgbmV3IFN0cnVjdCBvYmplY3Qgd2hpY2ggd3JpdGVzIGFuZCByZWFkcyBiaW5hcnkgZGF0YSBhY2NvcmRpbmcgdG9cbiIKQEAgLTE5MjAsMTAgKzE5MTgsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBtb2R1bGVfZnVuY3Rpb25zW10gPSB7CiAgICAgeyJfY2xlYXJjYWNoZSIsICAgICAoUHlDRnVuY3Rpb24pY2xlYXJjYWNoZSwgICAgICAgIE1FVEhfTk9BUkdTLCAgICBjbGVhcmNhY2hlX2RvY30sCi0gICAgeyJjYWxjc2l6ZSIsICAgICAgICBjYWxjc2l6ZSwgICAgICAgTUVUSF9PLCAgICAgICAgIGNhbGNzaXplX2RvY30sCisgICAgeyJjYWxjc2l6ZSIsICAgICAgICBjYWxjc2l6ZSwgICAgICAgTUVUSF9PLCBjYWxjc2l6ZV9kb2N9LAogICAgIHsicGFjayIsICAgICAgICAgICAgcGFjaywgICAgICAgICAgIE1FVEhfVkFSQVJHUywgICBwYWNrX2RvY30sCiAgICAgeyJwYWNrX2ludG8iLCAgICAgICBwYWNrX2ludG8sICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfaW50b19kb2N9LAotICAgIHsidW5wYWNrIiwgICAgICAgICAgdW5wYWNrLCAgICAgICAgIE1FVEhfVkFSQVJHUywgICB1bnBhY2tfZG9jfSwKKyAgICB7InVucGFjayIsICAgICAgICAgIHVucGFjaywgTUVUSF9WQVJBUkdTLCAgIHVucGFja19kb2N9LAogICAgIHsidW5wYWNrX2Zyb20iLCAgICAgKFB5Q0Z1bmN0aW9uKXVucGFja19mcm9tLAogICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgICAgICAgICB1bnBhY2tfZnJvbV9kb2N9LAogICAgIHtOVUxMLCAgICAgICBOVUxMfSAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMTk3NywxMSArMTk3NSw3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zdHJ1Y3Qodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqdmVyLCAqbTsKLQotICAgIHZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZygiMC4zIik7Ci0gICAgaWYgKHZlciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9zdHJ1Y3Rtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC0yMDQzLDcgKzIwMzcsNSBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSZQeVN0cnVjdFR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU3RydWN0IiwgKFB5T2JqZWN0KikmUHlTdHJ1Y3RUeXBlKTsKIAotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX192ZXJzaW9uX18iLCB2ZXIpOwotCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCAzZTM1NmQ1Li5mMTlkMGRmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlIDxmbG9hdC5oPgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgorI2luY2x1ZGUgImRhdGV0aW1lLmgiCiAKICNpZmRlZiBXSVRIX1RIUkVBRAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCkBAIC0yMjQsNyArMjI1LDcgQEAKIHsKICAgICBQeVR5cGVPYmplY3QgKnR5cGU7CiAgICAgUHlPYmplY3QgKm9iajsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAKICAgICB0eXBlID0gJl9IYXNoSW5oZXJpdGFuY2VUZXN0ZXJfVHlwZTsKIApAQCAtNDQ3LDYgKzQ0OCwzMzYgQEAKICN1bmRlZiBGX1VfVE9fUFkKICN1bmRlZiBGX1BZX1RPX1UKIAorLyogVGVzdCB0aGUgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93IEFQSS4gR2VuZXJhbCBjb252ZXJzaW9uIHRvIFBZX0xPTkcKKyAgIGlzIHRlc3RlZCBieSB0ZXN0X2xvbmdfYXBpX2lubmVyLiBUaGlzIHRlc3Qgd2lsbCBjb25jZW50cmF0ZSBvbiBwcm9wZXIKKyAgIGhhbmRsaW5nIG9mIG92ZXJmbG93LgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfbG9uZ19hbmRfb3ZlcmZsb3coUHlPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKm51bSwgKm9uZSwgKnRlbXA7CisgICAgbG9uZyB2YWx1ZTsKKyAgICBpbnQgb3ZlcmZsb3c7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBsYXJnZXIgdGhhbiBMT05HX01BWCBldmVuIG9uIDY0LWJpdCBwbGF0Zm9ybXMgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAxKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIDEiKTsKKworICAgIC8qIFNhbWUgYWdhaW4sIHdpdGggbnVtID0gTE9OR19NQVggKyAxICovCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKExPTkdfTUFYKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxTCk7CisgICAgaWYgKG9uZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihudW0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdGVtcCA9IFB5TnVtYmVyX0FkZChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIG5lZ2F0aXZlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBzbWFsbGVyIHRoYW4gTE9OR19NSU4gZXZlbiBvbiA2NC1iaXQgcGxhdGZvcm1zICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIi1GRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIC0xIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IExPTkdfTUlOIC0gMSAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhMT05HX01JTik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9TdWJ0cmFjdChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKworICAgIC8qIFRlc3QgdGhhdCBvdmVyZmxvdyBpcyBjbGVhcmVkIHByb3Blcmx5IGZvciBzbWFsbCB2YWx1ZXMuICovCisgICAgbnVtID0gUHlMb25nX0Zyb21TdHJpbmcoIkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IDB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIDB4RkYiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCItRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAiZXhwZWN0ZWQgcmV0dXJuIHZhbHVlIDB4RkYiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgc2V0IGluY29ycmVjdGx5Iik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmcoTE9OR19NQVgpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IExPTkdfTUFYKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSBMT05HX01BWCIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3QgY2xlYXJlZCIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nKExPTkdfTUlOKTsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBMT05HX01JTikKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgTE9OR19NSU4iKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworLyogVGVzdCB0aGUgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyBBUEkuIEdlbmVyYWwgY29udmVyc2lvbiB0bworICAgUFlfTE9OR19MT05HIGlzIHRlc3RlZCBieSB0ZXN0X2xvbmdfYXBpX2lubmVyLiBUaGlzIHRlc3Qgd2lsbAorICAgY29uY2VudHJhdGUgb24gcHJvcGVyIGhhbmRsaW5nIG9mIG92ZXJmbG93LgorKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqbnVtLCAqb25lLCAqdGVtcDsKKyAgICBQWV9MT05HX0xPTkcgdmFsdWU7CisgICAgaW50IG92ZXJmbG93OworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIHNldCBwcm9wZXJseSBmb3IgYSBsYXJnZSB2YWx1ZS4gKi8KKyAgICAvKiBudW0gaXMgYSBudW1iZXIgbGFyZ2VyIHRoYW4gUFlfTExPTkdfTUFYIG9uIGEgdHlwaWNhbCBtYWNoaW5lLiAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IFBZX0xMT05HX01BWCArIDEgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01BWCk7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9BZGQobnVtLCBvbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIG51bSA9IHRlbXA7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDA7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IC0xKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAicmV0dXJuIHZhbHVlIHdhcyBub3Qgc2V0IHRvIC0xIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAxIik7CisKKyAgICAvKiBUZXN0IHRoYXQgb3ZlcmZsb3cgaXMgc2V0IHByb3Blcmx5IGZvciBhIGxhcmdlIG5lZ2F0aXZlIHZhbHVlLiAqLworICAgIC8qIG51bSBpcyBhIG51bWJlciBzbWFsbGVyIHRoYW4gUFlfTExPTkdfTUlOIG9uIGEgdHlwaWNhbCBwbGF0Zm9ybSAqLworICAgIG51bSA9IFB5TG9uZ19Gcm9tU3RyaW5nKCItRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAxMjM0OworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgInJldHVybiB2YWx1ZSB3YXMgbm90IHNldCB0byAtMSIpOworICAgIGlmIChvdmVyZmxvdyAhPSAtMSkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3Qgc2V0IHRvIC0xIik7CisKKyAgICAvKiBTYW1lIGFnYWluLCB3aXRoIG51bSA9IFBZX0xMT05HX01JTiAtIDEgKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01JTik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMUwpOworICAgIGlmIChvbmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobnVtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHRlbXAgPSBQeU51bWJlcl9TdWJ0cmFjdChudW0sIG9uZSk7CisgICAgUHlfREVDUkVGKG9uZSk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgbnVtID0gdGVtcDsKKyAgICBpZiAobnVtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG92ZXJmbG93ID0gMDsKKyAgICB2YWx1ZSA9IFB5TG9uZ19Bc0xvbmdMb25nQW5kT3ZlcmZsb3cobnVtLCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihudW0pOworICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAodmFsdWUgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJyZXR1cm4gdmFsdWUgd2FzIG5vdCBzZXQgdG8gLTEiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gLTEpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IHNldCB0byAtMSIpOworCisgICAgLyogVGVzdCB0aGF0IG92ZXJmbG93IGlzIGNsZWFyZWQgcHJvcGVybHkgZm9yIHNtYWxsIHZhbHVlcy4gKi8KKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiRkYiLCBOVUxMLCAxNik7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IDB4RkYpCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgMHhGRiIpOworICAgIGlmIChvdmVyZmxvdyAhPSAwKQorICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3RfbG9uZ19sb25nX2FuZF9vdmVyZmxvdyIsCisgICAgICAgICAgICAib3ZlcmZsb3cgd2FzIG5vdCBjbGVhcmVkIik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbVN0cmluZygiLUZGIiwgTlVMTCwgMTYpOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSAtMHhGRikKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSAweEZGIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgc2V0IGluY29ycmVjdGx5Iik7CisKKyAgICBudW0gPSBQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xMT05HX01BWCk7CisgICAgaWYgKG51bSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBvdmVyZmxvdyA9IDEyMzQ7CisgICAgdmFsdWUgPSBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KG51bSwgJm92ZXJmbG93KTsKKyAgICBQeV9ERUNSRUYobnVtKTsKKyAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHZhbHVlICE9IFBZX0xMT05HX01BWCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgImV4cGVjdGVkIHJldHVybiB2YWx1ZSBQWV9MTE9OR19NQVgiKTsKKyAgICBpZiAob3ZlcmZsb3cgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJhaXNlVGVzdEVycm9yKCJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAgICAgIm92ZXJmbG93IHdhcyBub3QgY2xlYXJlZCIpOworCisgICAgbnVtID0gUHlMb25nX0Zyb21Mb25nTG9uZyhQWV9MTE9OR19NSU4pOworICAgIGlmIChudW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgb3ZlcmZsb3cgPSAwOworICAgIHZhbHVlID0gUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhudW0sICZvdmVyZmxvdyk7CisgICAgUHlfREVDUkVGKG51bSk7CisgICAgaWYgKHZhbHVlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICh2YWx1ZSAhPSBQWV9MTE9OR19NSU4pCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJleHBlY3RlZCByZXR1cm4gdmFsdWUgUFlfTExPTkdfTUlOIik7CisgICAgaWYgKG92ZXJmbG93ICE9IDApCisgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93IiwKKyAgICAgICAgICAgICJvdmVyZmxvdyB3YXMgbm90IGNsZWFyZWQiKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKwogLyogVGVzdCB0aGUgTCBjb2RlIGZvciBQeUFyZ19QYXJzZVR1cGxlLiAgVGhpcyBzaG91bGQgZGVsaXZlciBhIFBZX0xPTkdfTE9ORwogICAgZm9yIGJvdGggbG9uZyBhbmQgaW50IGFyZ3VtZW50cy4gIFRoZSB0ZXN0IG1heSBsZWFrIGEgbGl0dGxlIG1lbW9yeSBpZgogICAgaXQgZmFpbHMuCkBAIC01NDMsNiArODc0LDE1IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHNob3J0IHZhbHVlOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaCIsICZ2YWx1ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpdmFsdWUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJnc19IKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICB1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKQEAgLTY3MSw2ICsxMDExLDE1NyBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19zKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpzdHI7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIiwgJnN0cikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmcoc3RyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3Nfc19zdGFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9idWZmZXIgYnVmZmVyOworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqIiwgJmJ1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworICAgIHJldHVybiBieXRlczsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3Nfc19oYXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjaGFyICpzdHI7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyMiLCAmc3RyLCAmc2l6ZSkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHN0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX3ooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKnN0cjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInoiLCAmc3RyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHN0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKHN0cik7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3Nfel9zdGFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9idWZmZXIgYnVmZmVyOworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInoqIiwgJmJ1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChidWZmZXIuYnVmICE9IE5VTEwpCisgICAgICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICBieXRlcyA9IFB5X05vbmU7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ5dGVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc196X2hhc2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKnN0cjsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ6IyIsICZzdHIsICZzaXplKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHN0ciAhPSBOVUxMKQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzdHIsIHNpemUpOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX3koUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKnN0cjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkiLCAmc3RyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZyhzdHIpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc195X3N0YXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X2J1ZmZlciBidWZmZXI7CisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSoiLCAmYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnl0ZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CisgICAgcmV0dXJuIGJ5dGVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc195X2hhc2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGNoYXIgKnN0cjsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5IyIsICZzdHIsICZzaXplKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc3RyLCBzaXplKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2dldGFyZ3NfdShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfVU5JQ09ERSAqc3RyOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInUiLCAmc3RyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2l6ZSA9IFB5X1VOSUNPREVfc3RybGVuKHN0cik7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShzdHIsIHNpemUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc191X2hhc2goUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X1VOSUNPREUgKnN0cjsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ1IyIsICZzdHIsICZzaXplKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShzdHIsIHNpemUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0YXJnc19aKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9VTklDT0RFICpzdHI7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiWiIsICZzdHIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc3RyICE9IE5VTEwpIHsKKyAgICAgICAgc2l6ZSA9IFB5X1VOSUNPREVfc3RybGVuKHN0cik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoc3RyLCBzaXplKTsKKyAgICB9IGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX1pfaGFzaChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfVU5JQ09ERSAqc3RyOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlojIiwgJnN0ciwgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc3RyICE9IE5VTEwpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoc3RyLCBzaXplKTsKKyAgICBlbHNlCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworfQogCiAvKiBUZXN0IHRoZSBzIGFuZCB6IGNvZGVzIGZvciBQeUFyZ19QYXJzZVR1cGxlLgogKi8KQEAgLTc2Miw3ICsxMjUzLDYgQEAKICAgICBQeU9iamVjdCAqdHVwbGUsICpvYmo7CiAgICAgUHlfVU5JQ09ERSAqdmFsdWU7CiAgICAgUHlfc3NpemVfdCBsZW47Ci0gICAgaW50IHg7CiAKICAgICAvKiBpc3N1ZTQxMjI6IFVuZGVmaW5lZCByZWZlcmVuY2UgdG8gX1B5X2FzY2lpX3doaXRlc3BhY2Ugb24gV2luZG93cyAqLwogICAgIC8qIEp1c3QgdXNlIHRoZSBtYWNybyBhbmQgY2hlY2sgdGhhdCBpdCBjb21waWxlcyAqLwpAQCAtODk2LDYgKzEzODYsODAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfYXN3aWRlY2hhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnVuaWNvZGUsICpyZXN1bHQ7CisgICAgUHlfc3NpemVfdCBidWZsZW4sIHNpemU7CisgICAgd2NoYXJfdCAqYnVmZmVyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVbiIsICZ1bmljb2RlLCAmYnVmbGVuKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmZmVyID0gUHlNZW1fTWFsbG9jKGJ1ZmxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKworICAgIHNpemUgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhcih1bmljb2RlLCBidWZmZXIsIGJ1Zmxlbik7CisgICAgaWYgKHNpemUgPT0gLTEpIHsKKyAgICAgICAgUHlNZW1fRnJlZShidWZmZXIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2l6ZSA8IGJ1ZmxlbikKKyAgICAgICAgYnVmbGVuID0gc2l6ZSArIDE7CisgICAgZWxzZQorICAgICAgICBidWZsZW4gPSBzaXplOworICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoYnVmZmVyLCBidWZsZW4pOworICAgIFB5TWVtX0ZyZWUoYnVmZmVyKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXN1bHQsIHNpemUpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9hc3dpZGVjaGFyc3RyaW5nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqdW5pY29kZSwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgd2NoYXJfdCAqYnVmZmVyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVIiwgJnVuaWNvZGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGJ1ZmZlciA9IFB5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKHVuaWNvZGUsICZzaXplKTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihidWZmZXIsIHNpemUgKyAxKTsKKyAgICBQeU1lbV9GcmVlKGJ1ZmZlcik7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5uKSIsIHJlc3VsdCwgc2l6ZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRhcmdzX3dfc3RhcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIGNoYXIgKnN0cjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAidyo6Z2V0YXJnc193X3N0YXIiLCAmYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoMiA8PSBidWZmZXIubGVuKSB7CisgICAgICAgIHN0ciA9IGJ1ZmZlci5idWY7CisgICAgICAgIHN0clswXSA9ICdbJzsKKyAgICAgICAgc3RyW2J1ZmZlci5sZW4tMV0gPSAnXSc7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIHRlc3RfZW1wdHlfYXJncGFyc2UoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgLyogVGVzdCB0aGF0IGZvcm1hdHMgY2FuIGJlZ2luIHdpdGggJ3wnLiBTZWUgaXNzdWUgIzQ3MjAuICovCkBAIC0xMDIzLDYgKzE1ODcsMzEgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorCitzdGF0aWMgaW50IHRlc3RfcnVuX2NvdW50ZXIgPSAwOworCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9kYXRldGltZV9jYXBpKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykgeworICAgIGlmIChQeURhdGVUaW1lQVBJKSB7CisgICAgICAgIGlmICh0ZXN0X3J1bl9jb3VudGVyKSB7CisgICAgICAgICAgICAvKiBQcm9iYWJseSByZWdydGVzdC5weSAtUiAqLworICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXNzZXJ0aW9uRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5RGF0ZVRpbWVfQ0FQSSBzb21laG93IGluaXRpYWxpemVkIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0ZXN0X3J1bl9jb3VudGVyKys7CisgICAgUHlEYXRlVGltZV9JTVBPUlQ7CisgICAgaWYgKFB5RGF0ZVRpbWVBUEkpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKKwogI2lmZGVmIFdJVEhfVEhSRUFECiAKIC8qIHRlc3RfdGhyZWFkX3N0YXRlIHNwYXducyBhIHRocmVhZCBvZiBpdHMgb3duLCBhbmQgdGhhdCB0aHJlYWQgcmVsZWFzZXMKQEAgLTExNTIsMTUgKzE3NDEsMTYgQEAKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIGNoYXIgKm1zZzsKKyAgICBzdGF0aWMgY29uc3QgUHlfVU5JQ09ERSBvbmVbXSA9IHsnMScsIDB9OwogCi0jZGVmaW5lIENIRUNLXzFfRk9STUFUKEZPUk1BVCwgVFlQRSkgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdChGT1JNQVQsIChUWVBFKTEpOyAgICAgXAotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc3RyY21wKF9QeVVuaWNvZGVfQXNTdHJpbmcocmVzdWx0KSwgIjEiKSkgeyAgICAgXAotICAgICAgICBtc2cgPSBGT1JNQVQgIiBmYWlsZWQgYXQgMSI7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gRmFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBDSEVDS18xX0ZPUk1BVChGT1JNQVQsIFRZUEUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoRk9STUFULCAoVFlQRSkxKTsgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKFB5X1VOSUNPREVfc3RyY21wKFB5VW5pY29kZV9BU19VTklDT0RFKHJlc3VsdCksIG9uZSkpIHsgICAgIFwKKyAgICAgICAgbXNnID0gRk9STUFUICIgZmFpbGVkIGF0IDEiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnb3RvIEZhaWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBQeV9ERUNSRUYocmVzdWx0KQogCiAgICAgQ0hFQ0tfMV9GT1JNQVQoIiVkIiwgaW50KTsKQEAgLTExNzMsNiArMTc2MywxMiBAQAogICAgIENIRUNLXzFfRk9STUFUKCIlbHUiLCB1bnNpZ25lZCBsb25nKTsKICAgICBDSEVDS18xX0ZPUk1BVCgiJXp1Iiwgc2l6ZV90KTsKIAorICAgIC8qICIlbGxkIiBhbmQgIiVsbHUiIHN1cHBvcnQgYWRkZWQgaW4gUHl0aG9uIDIuNy4gKi8KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIENIRUNLXzFfRk9STUFUKCIlbGx1IiwgdW5zaWduZWQgUFlfTE9OR19MT05HKTsKKyAgICBDSEVDS18xX0ZPUk1BVCgiJWxsZCIsIFBZX0xPTkdfTE9ORyk7CisjZW5kaWYKKwogICAgIFB5X1JFVFVSTl9OT05FOwogCiAgRmFpbDoKQEAgLTExOTcsNyArMTc5Myw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKLX07Cit9CiAKIC8qIFRoaXMgaXMgaGVyZSB0byBwcm92aWRlIGEgZG9jc3RyaW5nIGZvciB0ZXN0X2Rlc2NyLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1OTIsNyArMjE4OCw3IEBACiAgICAgICAgICAgICAvKiBhcmd1bWVudCBjb252ZXJ0ZXIgbm90IGNhbGxlZD8gKi8KICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAvKiBTaG91bGQgYmUgMSAqLwotICAgICAgICByZXMgPSBQeUxvbmdfRnJvbUxvbmcoUHlfUkVGQ05UKHN0cjIpKTsKKyAgICAgICAgcmVzID0gUHlMb25nX0Zyb21Tc2l6ZV90KFB5X1JFRkNOVChzdHIyKSk7CiAgICAgICAgIFB5X0RFQ1JFRihzdHIyKTsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIHJlczsKQEAgLTE2MDAsMTUgKzIxOTYsNzcgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLyogVG8gdGVzdCB0aGF0IHRoZSByZXN1bHQgb2YgUHlDb2RlX05ld0VtcHR5IGhhcyB0aGUgcmlnaHQgbWVtYmVycy4gKi8KK3N0YXRpYyBQeU9iamVjdCAqCitjb2RlX25ld2VtcHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZTsKKyAgICBjb25zdCBjaGFyICpmdW5jbmFtZTsKKyAgICBpbnQgZmlyc3RsaW5lbm87CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzaTpjb2RlX25ld2VtcHR5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGVuYW1lLCAmZnVuY25hbWUsICZmaXJzdGxpbmVubykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5Q29kZV9OZXdFbXB0eShmaWxlbmFtZSwgZnVuY25hbWUsIGZpcnN0bGluZW5vKTsKK30KKworLyogVGVzdCBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jIChhbHNvIGV4ZXJjaXNlIFB5RXJyX05ld0V4Y2VwdGlvbikuCisgICBSdW4gdmlhIExpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSAqLworc3RhdGljIFB5T2JqZWN0ICoKK21ha2VfZXhjZXB0aW9uX3dpdGhfZG9jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGNoYXIgKmRvYyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJhc2UgPSBOVUxMOworICAgIFB5T2JqZWN0ICpkaWN0ID0gTlVMTDsKKworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsibmFtZSIsICJkb2MiLCAiYmFzZSIsICJkaWN0IiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICJzfHNPTzptYWtlX2V4Y2VwdGlvbl93aXRoX2RvYyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgJmRvYywgJmJhc2UsICZkaWN0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhuYW1lLCBkb2MsIGJhc2UsIGRpY3QpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWFrZV9tZW1vcnl2aWV3X2Zyb21fTlVMTF9wb2ludGVyKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X2J1ZmZlciBpbmZvOworICAgIGlmIChQeUJ1ZmZlcl9GaWxsSW5mbygmaW5mbywgTlVMTCwgTlVMTCwgMSwgMSwgUHlCVUZfRlVMTF9STykgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlNZW1vcnlWaWV3X0Zyb21CdWZmZXIoJmluZm8pOworfQorCisvKiBUZXN0IHRoYXQgdGhlIGZhdGFsIGVycm9yIGZyb20gbm90IGhhdmluZyBhIGN1cnJlbnQgdGhyZWFkIGRvZXNuJ3QKKyAgIGNhdXNlIGFuIGluZmluaXRlIGxvb3AuICBSdW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSAqLworc3RhdGljIFB5T2JqZWN0ICoKK2NyYXNoX25vX2N1cnJlbnRfdGhyZWFkKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAvKiBVc2luZyBQeVRocmVhZFN0YXRlX0dldCgpIGRpcmVjdGx5IGFsbG93cyB0aGUgdGVzdCB0byBwYXNzIGluCisgICAgICAgIXB5ZGVidWcgbW9kZS4gSG93ZXZlciwgdGhlIHRlc3Qgb25seSBhY3R1YWxseSB0ZXN0cyBhbnl0aGluZworICAgICAgIGluIHB5ZGVidWcgbW9kZSwgc2luY2UgdGhhdCdzIHdoZXJlIHRoZSBpbmZpbml0ZSBsb29wIHdhcyBpbgorICAgICAgIHRoZSBmaXJzdCBwbGFjZS4gKi8KKyAgICBQeVRocmVhZFN0YXRlX0dldCgpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBUZXN0TWV0aG9kc1tdID0gewogICAgIHsicmFpc2VfZXhjZXB0aW9uIiwgICAgICAgICByYWlzZV9leGNlcHRpb24sICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmFpc2VfbWVtb3J5ZXJyb3IiLCAgIChQeUNGdW5jdGlvbilyYWlzZV9tZW1vcnllcnJvciwgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfY29uZmlnIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfY29uZmlnLCAgICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9kYXRldGltZV9jYXBpIiwgIHRlc3RfZGF0ZXRpbWVfY2FwaSwgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfbGlzdF9hcGkiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGlzdF9hcGksICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9kaWN0X2l0ZXJhdGlvbiIsICAgICAoUHlDRnVuY3Rpb24pdGVzdF9kaWN0X2l0ZXJhdGlvbixNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSIsICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfbGF6eV9oYXNoX2luaGVyaXRhbmNlLE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfYnJva2VuX21lbW9yeXZpZXciLCAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9icm9rZW5fbWVtb3J5dmlldyxNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfbG9uZ19hbmRfb3ZlcmZsb3ciLCAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2FuZF9vdmVyZmxvdywKKyAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX251bWJpdHMiLCAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX251bWJpdHMsICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2tfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2tfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZW1wdHlfYXJncGFyc2UiLCAoUHlDRnVuY3Rpb24pdGVzdF9lbXB0eV9hcmdwYXJzZSxNRVRIX05PQVJHU30sCkBAIC0xNjI1LDYgKzIyODMsNyBAQAogICAgICAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFN9LAogICAgIHsiZ2V0YXJnc19iIiwgICAgICAgICAgICAgICBnZXRhcmdzX2IsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19CIiwgICAgICAgICAgICAgICBnZXRhcmdzX0IsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19oIiwgICAgICAgICAgICAgICBnZXRhcmdzX2gsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19IIiwgICAgICAgICAgICAgICBnZXRhcmdzX0gsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19JIiwgICAgICAgICAgICAgICBnZXRhcmdzX0ksICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19rIiwgICAgICAgICAgICAgICBnZXRhcmdzX2ssICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LApAQCAtMTYzNSwyNiArMjI5NCw1MCBAQAogICAgIHsiZ2V0YXJnc19MIiwgICAgICAgICAgICAgICBnZXRhcmdzX0wsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0YXJnc19LIiwgICAgICAgICAgICAgICBnZXRhcmdzX0ssICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsidGVzdF9sb25nbG9uZ19hcGkiLCAgICAgICB0ZXN0X2xvbmdsb25nX2FwaSwgICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2xvbmdfbG9uZ19hbmRfb3ZlcmZsb3ciLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9sb25nX2xvbmdfYW5kX292ZXJmbG93LCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X0xfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X0xfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKLSAgICB7ImNvZGVjX2luY3JlbWVudGFsZW5jb2RlciIsCi0gICAgIChQeUNGdW5jdGlvbiljb2RlY19pbmNyZW1lbnRhbGVuY29kZXIsICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImNvZGVjX2luY3JlbWVudGFsZGVjb2RlciIsCi0gICAgIChQeUNGdW5jdGlvbiljb2RlY19pbmNyZW1lbnRhbGRlY29kZXIsICAgICAgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgorICAgIHsiZ2V0YXJnc19zIiwgICAgICAgICAgICAgICBnZXRhcmdzX3MsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19zX3N0YXIiLCAgICAgICAgICBnZXRhcmdzX3Nfc3RhciwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19zX2hhc2giLCAgICAgICAgICBnZXRhcmdzX3NfaGFzaCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc196IiwgICAgICAgICAgICAgICBnZXRhcmdzX3osICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc196X3N0YXIiLCAgICAgICAgICBnZXRhcmdzX3pfc3RhciwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc196X2hhc2giLCAgICAgICAgICBnZXRhcmdzX3pfaGFzaCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc195IiwgICAgICAgICAgICAgICBnZXRhcmdzX3ksICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc195X3N0YXIiLCAgICAgICAgICBnZXRhcmdzX3lfc3RhciwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc195X2hhc2giLCAgICAgICAgICBnZXRhcmdzX3lfaGFzaCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc191IiwgICAgICAgICAgICAgICBnZXRhcmdzX3UsICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc191X2hhc2giLCAgICAgICAgICBnZXRhcmdzX3VfaGFzaCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19aIiwgICAgICAgICAgICAgICBnZXRhcmdzX1osICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc19aX2hhc2giLCAgICAgICAgICBnZXRhcmdzX1pfaGFzaCwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiZ2V0YXJnc193X3N0YXIiLCAgICAgICAgICBnZXRhcmdzX3dfc3RhciwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiY29kZWNfaW5jcmVtZW50YWxlbmNvZGVyIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKWNvZGVjX2luY3JlbWVudGFsZW5jb2RlciwgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNvZGVjX2luY3JlbWVudGFsZGVjb2RlciIsCisgICAgIChQeUNGdW5jdGlvbiljb2RlY19pbmNyZW1lbnRhbGRlY29kZXIsICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ0ZXN0X3NfY29kZSIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3NfY29kZSwgICAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfdV9jb2RlIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfdV9jb2RlLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9aX2NvZGUiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF9aX2NvZGUsICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X3dpZGVjaGFyIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpZGVjaGFyLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InVuaWNvZGVfYXN3aWRlY2hhciIsICAgICAgdW5pY29kZV9hc3dpZGVjaGFyLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7InVuaWNvZGVfYXN3aWRlY2hhcnN0cmluZyIsdW5pY29kZV9hc3dpZGVjaGFyc3RyaW5nLCAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICNpZmRlZiBXSVRIX1RIUkVBRAotICAgIHsiX3Rlc3RfdGhyZWFkX3N0YXRlIiwgIHRlc3RfdGhyZWFkX3N0YXRlLCAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsiX3Rlc3RfdGhyZWFkX3N0YXRlIiwgICAgICB0ZXN0X3RocmVhZF9zdGF0ZSwgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiX3BlbmRpbmdfdGhyZWFkZnVuYyIsICAgICBwZW5kaW5nX3RocmVhZGZ1bmMsICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1N9LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKLSAgICB7InByb2ZpbGVfaW50IiwgICAgICAgICAgICAgcHJvZmlsZV9pbnQsICAgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJwcm9maWxlX2ludCIsICAgICAgICAgICAgIHByb2ZpbGVfaW50LCAgICAgICAgICAgICAgICAgICAgIE1FVEhfTk9BUkdTfSwKICNlbmRpZgotICAgIHsidHJhY2ViYWNrX3ByaW50IiwgdHJhY2ViYWNrX3ByaW50LCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImV4Y2VwdGlvbl9wcmludCIsIGV4Y2VwdGlvbl9wcmludCwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJhcmdwYXJzaW5nIiwgICAgIGFyZ3BhcnNpbmcsIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0cmFjZWJhY2tfcHJpbnQiLCAgICAgICAgIHRyYWNlYmFja19wcmludCwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJleGNlcHRpb25fcHJpbnQiLCAgICAgICAgIGV4Y2VwdGlvbl9wcmludCwgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJhcmdwYXJzaW5nIiwgICAgICAgICAgICAgIGFyZ3BhcnNpbmcsICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJjb2RlX25ld2VtcHR5IiwgICAgICAgICAgIGNvZGVfbmV3ZW1wdHksICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJtYWtlX2V4Y2VwdGlvbl93aXRoX2RvYyIsIChQeUNGdW5jdGlvbiltYWtlX2V4Y2VwdGlvbl93aXRoX2RvYywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEU30sCisgICAgeyJtYWtlX21lbW9yeXZpZXdfZnJvbV9OVUxMX3BvaW50ZXIiLCAoUHlDRnVuY3Rpb24pbWFrZV9tZW1vcnl2aWV3X2Zyb21fTlVMTF9wb2ludGVyLAorICAgICBNRVRIX05PQVJHU30sCisgICAgeyJjcmFzaF9ub19jdXJyZW50X3RocmVhZCIsIChQeUNGdW5jdGlvbiljcmFzaF9ub19jdXJyZW50X3RocmVhZCwgTUVUSF9OT0FSR1N9LAogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMgYi9Nb2R1bGVzL190ZXN0ZW1iZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGY1ZWRlCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGVzdGVtYmVkLmMKQEAgLTAsMCArMSw1MiBAQAorI2luY2x1ZGUgPFB5dGhvbi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCit7CisgICAgLyogSnVzdCBvdXRwdXQgc29tZSBkZWJ1ZyBzdHVmZiAqLworICAgIFB5VGhyZWFkU3RhdGUgKnRzID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKKyAgICBwcmludGYoImludGVycCAlcCwgdGhyZWFkIHN0YXRlICVwOiAiLCB0cy0+aW50ZXJwLCB0cyk7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgUHlSdW5fU2ltcGxlU3RyaW5nKAorICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICJwcmludCgnaWQobW9kdWxlcykgPScsIGlkKHN5cy5tb2R1bGVzKSk7IgorICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpIgorICAgICk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqbWFpbnN0YXRlLCAqc3Vic3RhdGU7CisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZTsKKyAgICBpbnQgaSwgajsKKworICAgIGZvciAoaT0wOyBpPDM7IGkrKykgeworICAgICAgICBwcmludGYoIi0tLSBQYXNzICVkIC0tLVxuIiwgaSk7CisgICAgICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgorICAgICAgICAgICBNb2R1bGVzL2dldHBhdGguYyAqLworICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOworICAgICAgICBQeV9Jbml0aWFsaXplKCk7CisgICAgICAgIG1haW5zdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR2V0KCk7CisKKyAgICAgICAgUHlFdmFsX0luaXRUaHJlYWRzKCk7CisgICAgICAgIFB5RXZhbF9SZWxlYXNlVGhyZWFkKG1haW5zdGF0ZSk7CisKKyAgICAgICAgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworICAgICAgICBwcmludF9zdWJpbnRlcnAoKTsKKyAgICAgICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOworCisgICAgICAgIGZvciAoaj0wOyBqPDM7IGorKykgeworICAgICAgICAgICAgc3Vic3RhdGUgPSBQeV9OZXdJbnRlcnByZXRlcigpOworICAgICAgICAgICAgcHJpbnRfc3ViaW50ZXJwKCk7CisgICAgICAgICAgICBQeV9FbmRJbnRlcnByZXRlcihzdWJzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBQeVRocmVhZFN0YXRlX1N3YXAobWFpbnN0YXRlKTsKKyAgICAgICAgcHJpbnRfc3ViaW50ZXJwKCk7CisgICAgICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxzdGF0ZSk7CisKKyAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQobWFpbnN0YXRlKTsKKyAgICAgICAgUHlfRmluYWxpemUoKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL190aHJlYWRtb2R1bGUuYyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCmluZGV4IGRkYWEwMWIuLmQ5MWM5OWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCkBAIC0zLDYgKzMsNyBAQAogLyogSW50ZXJmYWNlIHRvIFNqb2VyZCdzIHBvcnRhYmxlIEMgdGhyZWFkIGxpYnJhcnkgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIiAvKiBvZmZzZXRvZiAqLwogCiAjaWZuZGVmIFdJVEhfVEhSRUFECiAjZXJyb3IgIkVycm9yISAgVGhlIHJlc3Qgb2YgUHl0aG9uIGlzIG5vdCBjb21waWxlZCB3aXRoIHRocmVhZCBzdXBwb3J0LiIKQEAgLTEzLDE5ICsxNCwyMiBAQAogI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAKIHN0YXRpYyBQeU9iamVjdCAqVGhyZWFkRXJyb3I7CitzdGF0aWMgbG9uZyBuYl90aHJlYWRzID0gMDsKIHN0YXRpYyBQeU9iamVjdCAqc3RyX2RpY3Q7CiAKLQogLyogTG9jayBvYmplY3RzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2tfbG9jazsKKyAgICBQeU9iamVjdCAqaW5fd2Vha3JlZmxpc3Q7CiB9IGxvY2tvYmplY3Q7CiAKIHN0YXRpYyB2b2lkCiBsb2NrX2RlYWxsb2MobG9ja29iamVjdCAqc2VsZikKIHsKKyAgICBpZiAoc2VsZi0+aW5fd2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7CiAgICAgaWYgKHNlbGYtPmxvY2tfbG9jayAhPSBOVUxMKSB7CiAgICAgICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLwogICAgICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9ja19sb2NrLCAwKTsKQEAgLTM2LDE5ICs0MCwxMDEgQEAKICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1sb2NrX1B5VGhyZWFkX2FjcXVpcmVfbG9jayhsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKKy8qIEhlbHBlciB0byBhY3F1aXJlIGFuIGludGVycnVwdGlibGUgbG9jayB3aXRoIGEgdGltZW91dC4gIElmIHRoZSBsb2NrIGFjcXVpcmUKKyAqIGlzIGludGVycnVwdGVkLCBzaWduYWwgaGFuZGxlcnMgYXJlIHJ1biwgYW5kIGlmIHRoZXkgcmFpc2UgYW4gZXhjZXB0aW9uLAorICogUFlfTE9DS19JTlRSIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCBQWV9MT0NLX0FDUVVJUkVEIG9yIFBZX0xPQ0tfRkFJTFVSRQorICogYXJlIHJldHVybmVkLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbG9jayBjYW4gYmUgYWNxdWlyZWQgd2l0aGluZyB0aGUKKyAqIHRpbWVvdXQuCisgKi8KK3N0YXRpYyBQeUxvY2tTdGF0dXMKK2FjcXVpcmVfdGltZWQoUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIFBZX1RJTUVPVVRfVCBtaWNyb3NlY29uZHMpCiB7Ci0gICAgaW50IGkgPSAxOworICAgIFB5TG9ja1N0YXR1cyByOworICAgIF9QeVRpbWVfdGltZXZhbCBjdXJ0aW1lOworICAgIF9QeVRpbWVfdGltZXZhbCBlbmR0aW1lOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTphY3F1aXJlIiwgJmkpKQorICAgIGlmIChtaWNyb3NlY29uZHMgPiAwKSB7CisgICAgICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZlbmR0aW1lKTsKKyAgICAgICAgZW5kdGltZS50dl9zZWMgKz0gbWljcm9zZWNvbmRzIC8gKDEwMDAgKiAxMDAwKTsKKyAgICAgICAgZW5kdGltZS50dl91c2VjICs9IG1pY3Jvc2Vjb25kcyAlICgxMDAwICogMTAwMCk7CisgICAgfQorCisKKyAgICBkbyB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgciA9IFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCBtaWNyb3NlY29uZHMsIDEpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChyID09IFBZX0xPQ0tfSU5UUikgeworICAgICAgICAgICAgLyogUnVuIHNpZ25hbCBoYW5kbGVycyBpZiB3ZSB3ZXJlIGludGVycnVwdGVkLiAgUHJvcGFnYXRlCisgICAgICAgICAgICAgKiBleGNlcHRpb25zIGZyb20gc2lnbmFsIGhhbmRsZXJzLCBzdWNoIGFzIEtleWJvYXJkSW50ZXJydXB0LCBieQorICAgICAgICAgICAgICogcGFzc2luZyB1cCBQWV9MT0NLX0lOVFIuICAqLworICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gUFlfTE9DS19JTlRSOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJZiB3ZSdyZSB1c2luZyBhIHRpbWVvdXQsIHJlY29tcHV0ZSB0aGUgdGltZW91dCBhZnRlciBwcm9jZXNzaW5nCisgICAgICAgICAgICAgKiBzaWduYWxzLCBzaW5jZSB0aG9zZSBjYW4gdGFrZSB0aW1lLiAgKi8KKyAgICAgICAgICAgIGlmIChtaWNyb3NlY29uZHMgPj0gMCkgeworICAgICAgICAgICAgICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZjdXJ0aW1lKTsKKyAgICAgICAgICAgICAgICBtaWNyb3NlY29uZHMgPSAoKGVuZHRpbWUudHZfc2VjIC0gY3VydGltZS50dl9zZWMpICogMTAwMDAwMCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmR0aW1lLnR2X3VzZWMgLSBjdXJ0aW1lLnR2X3VzZWMpKTsKKworICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBuZWdhdGl2ZSB2YWx1ZXMsIHNpbmNlIHRob3NlIG1lYW4gYmxvY2sgZm9yZXZlci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAobWljcm9zZWNvbmRzIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgciA9IFBZX0xPQ0tfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChyID09IFBZX0xPQ0tfSU5UUik7ICAvKiBSZXRyeSBpZiB3ZSB3ZXJlIGludGVycnVwdGVkLiAqLworCisgICAgcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitsb2NrX1B5VGhyZWFkX2FjcXVpcmVfbG9jayhsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImJsb2NraW5nIiwgInRpbWVvdXQiLCBOVUxMfTsKKyAgICBpbnQgYmxvY2tpbmcgPSAxOworICAgIGRvdWJsZSB0aW1lb3V0ID0gLTE7CisgICAgUFlfVElNRU9VVF9UIG1pY3Jvc2Vjb25kczsKKyAgICBQeUxvY2tTdGF0dXMgcjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8aWQ6YWNxdWlyZSIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmxvY2tpbmcsICZ0aW1lb3V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgaSA9IFB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5sb2NrX2xvY2ssIGkpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKCFibG9ja2luZyAmJiB0aW1lb3V0ICE9IC0xKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY2FuJ3Qgc3BlY2lmeSBhIHRpbWVvdXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgImZvciBhIG5vbi1ibG9ja2luZyBjYWxsIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAodGltZW91dCA8IDAgJiYgdGltZW91dCAhPSAtMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRpbWVvdXQgdmFsdWUgbXVzdCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0bHkgcG9zaXRpdmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghYmxvY2tpbmcpCisgICAgICAgIG1pY3Jvc2Vjb25kcyA9IDA7CisgICAgZWxzZSBpZiAodGltZW91dCA9PSAtMSkKKyAgICAgICAgbWljcm9zZWNvbmRzID0gLTE7CisgICAgZWxzZSB7CisgICAgICAgIHRpbWVvdXQgKj0gMWU2OworICAgICAgICBpZiAodGltZW91dCA+PSAoZG91YmxlKSBQWV9USU1FT1VUX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQgdmFsdWUgaXMgdG9vIGxhcmdlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtaWNyb3NlY29uZHMgPSAoUFlfVElNRU9VVF9UKSB0aW1lb3V0OworICAgIH0KIAotICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpaSk7CisgICAgciA9IGFjcXVpcmVfdGltZWQoc2VsZi0+bG9ja19sb2NrLCBtaWNyb3NlY29uZHMpOworICAgIGlmIChyID09IFBZX0xPQ0tfSU5UUikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHIgPT0gUFlfTE9DS19BQ1FVSVJFRCk7CiB9CiAKIFB5RG9jX1NUUlZBUihhY3F1aXJlX2RvYywKQEAgLTYwLDcgKzE0Niw3IEBACiB0aGUgbG9jaywgYW5kIHJldHVybiBOb25lIG9uY2UgdGhlIGxvY2sgaXMgYWNxdWlyZWQuXG5cCiBXaXRoIGFuIGFyZ3VtZW50LCB0aGlzIHdpbGwgb25seSBibG9jayBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZSxcblwKIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHJlZmxlY3RzIHdoZXRoZXIgdGhlIGxvY2sgaXMgYWNxdWlyZWQuXG5cCi1UaGUgYmxvY2tpbmcgb3BlcmF0aW9uIGlzIG5vdCBpbnRlcnJ1cHRpYmxlLiIpOworVGhlIGJsb2NraW5nIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRpYmxlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9ja19QeVRocmVhZF9yZWxlYXNlX2xvY2sobG9ja29iamVjdCAqc2VsZikKQEAgLTEwMyw5ICsxODksOSBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYgbG9ja19tZXRob2RzW10gPSB7CiAgICAgeyJhY3F1aXJlX2xvY2siLCAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9hY3F1aXJlX2xvY2ssCi0gICAgIE1FVEhfVkFSQVJHUywgYWNxdWlyZV9kb2N9LAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBhY3F1aXJlX2RvY30sCiAgICAgeyJhY3F1aXJlIiwgICAgICAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9hY3F1aXJlX2xvY2ssCi0gICAgIE1FVEhfVkFSQVJHUywgYWNxdWlyZV9kb2N9LAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBhY3F1aXJlX2RvY30sCiAgICAgeyJyZWxlYXNlX2xvY2siLCAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9yZWxlYXNlX2xvY2ssCiAgICAgIE1FVEhfTk9BUkdTLCByZWxlYXNlX2RvY30sCiAgICAgeyJyZWxlYXNlIiwgICAgICAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9yZWxlYXNlX2xvY2ssCkBAIC0xMTUsNyArMjAxLDcgQEAKICAgICB7ImxvY2tlZCIsICAgICAgIChQeUNGdW5jdGlvbilsb2NrX2xvY2tlZF9sb2NrLAogICAgICBNRVRIX05PQVJHUywgbG9ja2VkX2RvY30sCiAgICAgeyJfX2VudGVyX18iLCAgICAoUHlDRnVuY3Rpb24pbG9ja19QeVRocmVhZF9hY3F1aXJlX2xvY2ssCi0gICAgIE1FVEhfVkFSQVJHUywgYWNxdWlyZV9kb2N9LAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBhY3F1aXJlX2RvY30sCiAgICAgeyJfX2V4aXRfXyIsICAgIChQeUNGdW5jdGlvbilsb2NrX1B5VGhyZWFkX3JlbGVhc2VfbG9jaywKICAgICAgTUVUSF9WQVJBUkdTLCByZWxlYXNlX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICBOVUxMfSAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTE0NywxMiArMjMzLDMwNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIG9mZnNldG9mKGxvY2tvYmplY3QsIGluX3dlYWtyZWZsaXN0KSwgLyp0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBsb2NrX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLwogfTsKIAorLyogUmVjdXJzaXZlIGxvY2sgb2JqZWN0cyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5VGhyZWFkX3R5cGVfbG9jayBybG9ja19sb2NrOworICAgIGxvbmcgcmxvY2tfb3duZXI7CisgICAgdW5zaWduZWQgbG9uZyBybG9ja19jb3VudDsKKyAgICBQeU9iamVjdCAqaW5fd2Vha3JlZmxpc3Q7Cit9IHJsb2Nrb2JqZWN0OworCitzdGF0aWMgdm9pZAorcmxvY2tfZGVhbGxvYyhybG9ja29iamVjdCAqc2VsZikKK3sKKyAgICBhc3NlcnQoc2VsZi0+cmxvY2tfbG9jayk7CisgICAgaWYgKHNlbGYtPmluX3dlYWtyZWZsaXN0ICE9IE5VTEwpCisgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOworICAgIC8qIFVubG9jayB0aGUgbG9jayBzbyBpdCdzIHNhZmUgdG8gZnJlZSBpdCAqLworICAgIGlmIChzZWxmLT5ybG9ja19jb3VudCA+IDApCisgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKworICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmxvY2tfYWNxdWlyZShybG9ja29iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJibG9ja2luZyIsICJ0aW1lb3V0IiwgTlVMTH07CisgICAgaW50IGJsb2NraW5nID0gMTsKKyAgICBkb3VibGUgdGltZW91dCA9IC0xOworICAgIFBZX1RJTUVPVVRfVCBtaWNyb3NlY29uZHM7CisgICAgbG9uZyB0aWQ7CisgICAgUHlMb2NrU3RhdHVzIHIgPSBQWV9MT0NLX0FDUVVJUkVEOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpZDphY3F1aXJlIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZibG9ja2luZywgJnRpbWVvdXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghYmxvY2tpbmcgJiYgdGltZW91dCAhPSAtMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImNhbid0IHNwZWNpZnkgYSB0aW1lb3V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgYSBub24tYmxvY2tpbmcgY2FsbCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHRpbWVvdXQgPCAwICYmIHRpbWVvdXQgIT0gLTEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0aW1lb3V0IHZhbHVlIG11c3QgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmljdGx5IHBvc2l0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoIWJsb2NraW5nKQorICAgICAgICBtaWNyb3NlY29uZHMgPSAwOworICAgIGVsc2UgaWYgKHRpbWVvdXQgPT0gLTEpCisgICAgICAgIG1pY3Jvc2Vjb25kcyA9IC0xOworICAgIGVsc2UgeworICAgICAgICB0aW1lb3V0ICo9IDFlNjsKKyAgICAgICAgaWYgKHRpbWVvdXQgPj0gKGRvdWJsZSkgUFlfVElNRU9VVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0IHZhbHVlIGlzIHRvbyBsYXJnZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWljcm9zZWNvbmRzID0gKFBZX1RJTUVPVVRfVCkgdGltZW91dDsKKyAgICB9CisKKyAgICB0aWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CisgICAgaWYgKHNlbGYtPnJsb2NrX2NvdW50ID4gMCAmJiB0aWQgPT0gc2VsZi0+cmxvY2tfb3duZXIpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCA9IHNlbGYtPnJsb2NrX2NvdW50ICsgMTsKKyAgICAgICAgaWYgKGNvdW50IDw9IHNlbGYtPnJsb2NrX2NvdW50KSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZXJuYWwgbG9jayBjb3VudCBvdmVyZmxvd2VkIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA9IGNvdW50OworICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwIHx8CisgICAgICAgICFQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+cmxvY2tfbG9jaywgMCkpIHsKKyAgICAgICAgaWYgKG1pY3Jvc2Vjb25kcyA9PSAwKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgciA9IGFjcXVpcmVfdGltZWQoc2VsZi0+cmxvY2tfbG9jaywgbWljcm9zZWNvbmRzKTsKKyAgICB9CisgICAgaWYgKHIgPT0gUFlfTE9DS19BQ1FVSVJFRCkgeworICAgICAgICBhc3NlcnQoc2VsZi0+cmxvY2tfY291bnQgPT0gMCk7CisgICAgICAgIHNlbGYtPnJsb2NrX293bmVyID0gdGlkOworICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA9IDE7CisgICAgfQorICAgIGVsc2UgaWYgKHIgPT0gUFlfTE9DS19JTlRSKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcociA9PSBQWV9MT0NLX0FDUVVJUkVEKTsKK30KKworUHlEb2NfU1RSVkFSKHJsb2NrX2FjcXVpcmVfZG9jLAorImFjcXVpcmUoYmxvY2tpbmc9VHJ1ZSkgLT4gYm9vbFxuXAorXG5cCitMb2NrIHRoZSBsb2NrLiAgYGJsb2NraW5nYCBpbmRpY2F0ZXMgd2hldGhlciB3ZSBzaG91bGQgd2FpdFxuXAorZm9yIHRoZSBsb2NrIHRvIGJlIGF2YWlsYWJsZSBvciBub3QuICBJZiBgYmxvY2tpbmdgIGlzIEZhbHNlXG5cCithbmQgYW5vdGhlciB0aHJlYWQgaG9sZHMgdGhlIGxvY2ssIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gRmFsc2VcblwKK2ltbWVkaWF0ZWx5LiAgSWYgYGJsb2NraW5nYCBpcyBUcnVlIGFuZCBhbm90aGVyIHRocmVhZCBob2xkc1xuXAordGhlIGxvY2ssIHRoZSBtZXRob2Qgd2lsbCB3YWl0IGZvciB0aGUgbG9jayB0byBiZSByZWxlYXNlZCxcblwKK3Rha2UgaXQgYW5kIHRoZW4gcmV0dXJuIFRydWUuXG5cCisobm90ZTogdGhlIGJsb2NraW5nIG9wZXJhdGlvbiBpcyBpbnRlcnJ1cHRpYmxlLilcblwKK1xuXAorSW4gYWxsIG90aGVyIGNhc2VzLCB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIFRydWUgaW1tZWRpYXRlbHkuXG5cCitQcmVjaXNlbHksIGlmIHRoZSBjdXJyZW50IHRocmVhZCBhbHJlYWR5IGhvbGRzIHRoZSBsb2NrLCBpdHNcblwKK2ludGVybmFsIGNvdW50ZXIgaXMgc2ltcGx5IGluY3JlbWVudGVkLiBJZiBub2JvZHkgaG9sZHMgdGhlIGxvY2ssXG5cCit0aGUgbG9jayBpcyB0YWtlbiBhbmQgaXRzIGludGVybmFsIGNvdW50ZXIgaW5pdGlhbGl6ZWQgdG8gMS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3Jsb2NrX3JlbGVhc2UocmxvY2tvYmplY3QgKnNlbGYpCit7CisgICAgbG9uZyB0aWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CisKKyAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPT0gMCB8fCBzZWxmLT5ybG9ja19vd25lciAhPSB0aWQpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoLS1zZWxmLT5ybG9ja19jb3VudCA9PSAwKSB7CisgICAgICAgIHNlbGYtPnJsb2NrX293bmVyID0gMDsKKyAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgIH0KKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHJsb2NrX3JlbGVhc2VfZG9jLAorInJlbGVhc2UoKVxuXAorXG5cCitSZWxlYXNlIHRoZSBsb2NrLCBhbGxvd2luZyBhbm90aGVyIHRocmVhZCB0aGF0IGlzIGJsb2NrZWQgd2FpdGluZyBmb3JcblwKK3RoZSBsb2NrIHRvIGFjcXVpcmUgdGhlIGxvY2suICBUaGUgbG9jayBtdXN0IGJlIGluIHRoZSBsb2NrZWQgc3RhdGUsXG5cCithbmQgbXVzdCBiZSBsb2NrZWQgYnkgdGhlIHNhbWUgdGhyZWFkIHRoYXQgdW5sb2NrcyBpdDsgb3RoZXJ3aXNlIGFcblwKK2BSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC5cblwKK1xuXAorRG8gbm90ZSB0aGF0IGlmIHRoZSBsb2NrIHdhcyBhY3F1aXJlKClkIHNldmVyYWwgdGltZXMgaW4gYSByb3cgYnkgdGhlXG5cCitjdXJyZW50IHRocmVhZCwgcmVsZWFzZSgpIG5lZWRzIHRvIGJlIGNhbGxlZCBhcyBtYW55IHRpbWVzIGZvciB0aGUgbG9ja1xuXAordG8gYmUgYXZhaWxhYmxlIGZvciBvdGhlciB0aHJlYWRzLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorcmxvY2tfYWNxdWlyZV9yZXN0b3JlKHJsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIGxvbmcgb3duZXI7CisgICAgdW5zaWduZWQgbG9uZyBjb3VudDsKKyAgICBpbnQgciA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia2w6X2FjcXVpcmVfcmVzdG9yZSIsICZjb3VudCwgJm93bmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIVB5VGhyZWFkX2FjcXVpcmVfbG9jayhzZWxmLT5ybG9ja19sb2NrLCAwKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHIgPSBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+cmxvY2tfbG9jaywgMSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgfQorICAgIGlmICghcikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoVGhyZWFkRXJyb3IsICJjb3VsZG4ndCBhY3F1aXJlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChzZWxmLT5ybG9ja19jb3VudCA9PSAwKTsKKyAgICBzZWxmLT5ybG9ja19vd25lciA9IG93bmVyOworICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gY291bnQ7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihybG9ja19hY3F1aXJlX3Jlc3RvcmVfZG9jLAorIl9hY3F1aXJlX3Jlc3RvcmUoc3RhdGUpIC0+IE5vbmVcblwKK1xuXAorRm9yIGludGVybmFsIHVzZSBieSBgdGhyZWFkaW5nLkNvbmRpdGlvbmAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitybG9ja19yZWxlYXNlX3NhdmUocmxvY2tvYmplY3QgKnNlbGYpCit7CisgICAgbG9uZyBvd25lcjsKKyAgICB1bnNpZ25lZCBsb25nIGNvdW50OworCisgICAgb3duZXIgPSBzZWxmLT5ybG9ja19vd25lcjsKKyAgICBjb3VudCA9IHNlbGYtPnJsb2NrX2NvdW50OworICAgIHNlbGYtPnJsb2NrX2NvdW50ID0gMDsKKyAgICBzZWxmLT5ybG9ja19vd25lciA9IDA7CisgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJrbCIsIGNvdW50LCBvd25lcik7Cit9CisKK1B5RG9jX1NUUlZBUihybG9ja19yZWxlYXNlX3NhdmVfZG9jLAorIl9yZWxlYXNlX3NhdmUoKSAtPiB0dXBsZVxuXAorXG5cCitGb3IgaW50ZXJuYWwgdXNlIGJ5IGB0aHJlYWRpbmcuQ29uZGl0aW9uYC4iKTsKKworCitzdGF0aWMgUHlPYmplY3QgKgorcmxvY2tfaXNfb3duZWQocmxvY2tvYmplY3QgKnNlbGYpCit7CisgICAgbG9uZyB0aWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CisKKyAgICBpZiAoc2VsZi0+cmxvY2tfY291bnQgPiAwICYmIHNlbGYtPnJsb2NrX293bmVyID09IHRpZCkgeworICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICB9CisgICAgUHlfUkVUVVJOX0ZBTFNFOworfQorCitQeURvY19TVFJWQVIocmxvY2tfaXNfb3duZWRfZG9jLAorIl9pc19vd25lZCgpIC0+IGJvb2xcblwKK1xuXAorRm9yIGludGVybmFsIHVzZSBieSBgdGhyZWFkaW5nLkNvbmRpdGlvbmAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitybG9ja19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgcmxvY2tvYmplY3QgKnNlbGY7CisKKyAgICBzZWxmID0gKHJsb2Nrb2JqZWN0ICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChzZWxmICE9IE5VTEwpIHsKKyAgICAgICAgc2VsZi0+cmxvY2tfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgdHlwZS0+dHBfZnJlZShzZWxmKTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICAgICAgc2VsZi0+cmxvY2tfb3duZXIgPSAwOworICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcmxvY2tfcmVwcihybG9ja29iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvd25lcj0lbGQgY291bnQ9JWx1PiIsCisgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsIHNlbGYtPnJsb2NrX293bmVyLCBzZWxmLT5ybG9ja19jb3VudCk7Cit9CisKKworc3RhdGljIFB5TWV0aG9kRGVmIHJsb2NrX21ldGhvZHNbXSA9IHsKKyAgICB7ImFjcXVpcmUiLCAgICAgIChQeUNGdW5jdGlvbilybG9ja19hY3F1aXJlLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBybG9ja19hY3F1aXJlX2RvY30sCisgICAgeyJyZWxlYXNlIiwgICAgICAoUHlDRnVuY3Rpb24pcmxvY2tfcmVsZWFzZSwKKyAgICAgTUVUSF9OT0FSR1MsIHJsb2NrX3JlbGVhc2VfZG9jfSwKKyAgICB7Il9pc19vd25lZCIsICAgICAoUHlDRnVuY3Rpb24pcmxvY2tfaXNfb3duZWQsCisgICAgIE1FVEhfTk9BUkdTLCBybG9ja19pc19vd25lZF9kb2N9LAorICAgIHsiX2FjcXVpcmVfcmVzdG9yZSIsIChQeUNGdW5jdGlvbilybG9ja19hY3F1aXJlX3Jlc3RvcmUsCisgICAgIE1FVEhfTywgcmxvY2tfYWNxdWlyZV9yZXN0b3JlX2RvY30sCisgICAgeyJfcmVsZWFzZV9zYXZlIiwgKFB5Q0Z1bmN0aW9uKXJsb2NrX3JlbGVhc2Vfc2F2ZSwKKyAgICAgTUVUSF9OT0FSR1MsIHJsb2NrX3JlbGVhc2Vfc2F2ZV9kb2N9LAorICAgIHsiX19lbnRlcl9fIiwgICAgKFB5Q0Z1bmN0aW9uKXJsb2NrX2FjcXVpcmUsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHJsb2NrX2FjcXVpcmVfZG9jfSwKKyAgICB7Il9fZXhpdF9fIiwgICAgKFB5Q0Z1bmN0aW9uKXJsb2NrX3JlbGVhc2UsCisgICAgIE1FVEhfVkFSQVJHUywgcmxvY2tfcmVsZWFzZV9kb2N9LAorICAgIHtOVUxMLCAgICAgICAgICAgTlVMTH0gICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCisKK3N0YXRpYyBQeVR5cGVPYmplY3QgUkxvY2t0eXBlID0geworICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCisgICAgIl90aHJlYWQuUkxvY2siLCAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lKi8KKyAgICBzaXplb2YocmxvY2tvYmplY3QpLCAgICAgICAgICAgICAgICAvKnRwX3NpemUqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIC8qIG1ldGhvZHMgKi8KKyAgICAoZGVzdHJ1Y3RvcilybG9ja19kZWFsbG9jLCAgICAgICAgICAvKnRwX2RlYWxsb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KKyAgICAocmVwcmZ1bmMpcmxvY2tfcmVwciwgICAgICAgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLworICAgIG9mZnNldG9mKHJsb2Nrb2JqZWN0LCBpbl93ZWFrcmVmbGlzdCksIC8qdHBfd2Vha2xpc3RvZmZzZXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCisgICAgcmxvY2tfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaW5pdCAqLworICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCisgICAgcmxvY2tfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCit9OworCiBzdGF0aWMgbG9ja29iamVjdCAqCiBuZXdsb2Nrb2JqZWN0KHZvaWQpCiB7CkBAIC0xNjEsNiArNTQxLDcgQEAKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzZWxmLT5sb2NrX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgc2VsZi0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIGlmIChzZWxmLT5sb2NrX2xvY2sgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKQEAgLTYwNSw2ICs5ODYsNyBAQAogICAgIHRzdGF0ZS0+dGhyZWFkX2lkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwogICAgIF9QeVRocmVhZFN0YXRlX0luaXQodHN0YXRlKTsKICAgICBQeUV2YWxfQWNxdWlyZVRocmVhZCh0c3RhdGUpOworICAgIG5iX3RocmVhZHMrKzsKICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcygKICAgICAgICAgYm9vdC0+ZnVuYywgYm9vdC0+YXJncywgYm9vdC0+a2V5dyk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CkBAIC02MjksNiArMTAxMSw3IEBACiAgICAgUHlfREVDUkVGKGJvb3QtPmFyZ3MpOwogICAgIFB5X1hERUNSRUYoYm9vdC0+a2V5dyk7CiAgICAgUHlNZW1fREVMKGJvb3RfcmF3KTsKKyAgICBuYl90aHJlYWRzLS07CiAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcih0c3RhdGUpOwogICAgIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCgpOwogICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCk7CkBAIC03MjgsMTggKzExMTEsNiBAQAogQSBzdWJ0aHJlYWQgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGludGVycnVwdCB0aGUgbWFpbiB0aHJlYWQuIgogKTsKIAotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyBQeU9iamVjdCAqCi10aHJlYWRfUHlUaHJlYWRfZXhpdF9wcm9nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBpbnQgc3RzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpleGl0X3Byb2ciLCAmc3RzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlfRXhpdChzdHMpOyAvKiBDYWxscyBQeVRocmVhZF9leGl0X3Byb2coc3RzKSBvciBfUHlUaHJlYWRfZXhpdF9wcm9nKHN0cykgKi8KLSAgICBmb3IgKDs7KSB7IH0gLyogU2hvdWxkIG5vdCBiZSByZWFjaGVkICovCi19Ci0jZW5kaWYKLQogc3RhdGljIGxvY2tvYmplY3QgKm5ld2xvY2tvYmplY3Qodm9pZCk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03NzgsNiArMTE0OSwyNCBAQAogQSB0aHJlYWQncyBpZGVudGl0eSBtYXkgYmUgcmV1c2VkIGZvciBhbm90aGVyIHRocmVhZCBhZnRlciBpdCBleGl0cy4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKK3RocmVhZF9fY291bnQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhuYl90aHJlYWRzKTsKK30KKworUHlEb2NfU1RSVkFSKF9jb3VudF9kb2MsCisiX2NvdW50KCkgLT4gaW50ZWdlclxuXAorXG5cCitcCitSZXR1cm4gdGhlIG51bWJlciBvZiBjdXJyZW50bHkgcnVubmluZyBQeXRob24gdGhyZWFkcywgZXhjbHVkaW5nIFxuXAordGhlIG1haW4gdGhyZWFkLiBUaGUgcmV0dXJuZWQgbnVtYmVyIGNvbXByaXNlcyBhbGwgdGhyZWFkcyBjcmVhdGVkXG5cCit0aHJvdWdoIGBzdGFydF9uZXdfdGhyZWFkKClgIGFzIHdlbGwgYXMgYHRocmVhZGluZy5UaHJlYWRgLCBhbmQgbm90XG5cCit5ZXQgZmluaXNoZWQuXG5cCitcblwKK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIGFuZCBzcGVjaWFsaXplZCBwdXJwb3NlcyBvbmx5LlxuXAorSW4gbW9zdCBhcHBsaWNhdGlvbnMgYHRocmVhZGluZy5lbnVtZXJhdGUoKWAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIHRocmVhZF9zdGFja19zaXplKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaXplX3Qgb2xkX3NpemU7CkBAIC04NTAsMTMgKzEyMzksMTEgQEAKICAgICAgTUVUSF9OT0FSR1MsIGludGVycnVwdF9kb2N9LAogICAgIHsiZ2V0X2lkZW50IiwgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX2dldF9pZGVudCwKICAgICAgTUVUSF9OT0FSR1MsIGdldF9pZGVudF9kb2N9LAorICAgIHsiX2NvdW50IiwgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX19jb3VudCwKKyAgICAgTUVUSF9OT0FSR1MsIF9jb3VudF9kb2N9LAogICAgIHsic3RhY2tfc2l6ZSIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX3N0YWNrX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3NpemVfZG9jfSwKLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi0gICAgeyJleGl0X3Byb2ciLCAgICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0aHJlYWRfUHlUaHJlYWRfZXhpdF9wcm9nLAotICAgICBNRVRIX1ZBUkFSR1N9LAotI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtODk1LDcgKzEyODIsNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fdGhyZWFkKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkOworICAgIFB5T2JqZWN0ICptLCAqZCwgKnRpbWVvdXRfbWF4OwogCiAgICAgLyogSW5pdGlhbGl6ZSB0eXBlczogKi8KICAgICBpZiAoUHlUeXBlX1JlYWR5KCZsb2NhbGR1bW15dHlwZSkgPCAwKQpAQCAtOTA0LDEyICsxMjkxLDIwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJkxvY2t0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVR5cGVfUmVhZHkoJlJMb2NrdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnRocmVhZG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICB0aW1lb3V0X21heCA9IFB5RmxvYXRfRnJvbURvdWJsZShQWV9USU1FT1VUX01BWCAvIDEwMDAwMDApOworICAgIGlmICghdGltZW91dF9tYXgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRJTUVPVVRfTUFYIiwgdGltZW91dF9tYXgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAvKiBBZGQgYSBzeW1ib2xpYyBjb25zdGFudCAqLwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogICAgIFRocmVhZEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGhyZWFkLmVycm9yIiwgTlVMTCwgTlVMTCk7CkBAIC05MTgsMTAgKzEzMTMsMTYgQEAKICAgICBQeV9JTkNSRUYoJkxvY2t0eXBlKTsKICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiTG9ja1R5cGUiLCAoUHlPYmplY3QgKikmTG9ja3R5cGUpOwogCisgICAgUHlfSU5DUkVGKCZSTG9ja3R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlJMb2NrIiwgKFB5T2JqZWN0ICopJlJMb2NrdHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X0lOQ1JFRigmbG9jYWx0eXBlKTsKICAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfbG9jYWwiLCAoUHlPYmplY3QgKikmbG9jYWx0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbmJfdGhyZWFkcyA9IDA7CisKICAgICBzdHJfZGljdCA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2RpY3RfXyIpOwogICAgIGlmIChzdHJfZGljdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RpbWUuYyBiL01vZHVsZXMvX3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGNjOGUxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGltZS5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJfdGltZS5oIgorCisvKiBFeHBvc2VkIGluIHRpbWVmdW5jcy5oLiAqLwordGltZV90CitfUHlUaW1lX0RvdWJsZVRvVGltZXQoZG91YmxlIHgpCit7CisgICAgdGltZV90IHJlc3VsdDsKKyAgICBkb3VibGUgZGlmZjsKKworICAgIHJlc3VsdCA9ICh0aW1lX3QpeDsKKyAgICAvKiBIb3cgbXVjaCBpbmZvIGRpZCB3ZSBsb3NlPyAgdGltZV90IG1heSBiZSBhbiBpbnRlZ3JhbCBvcgorICAgICAqIGZsb2F0aW5nIHR5cGUsIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoLiAgSWYgaXQncyBpbnRlZ3JhbCwKKyAgICAgKiB3ZSBkb24ndCBrbm93IHdoZXRoZXIgQyB0cnVuY2F0ZXMsIHJvdW5kcywgcmV0dXJucyB0aGUgZmxvb3IsCisgICAgICogZXRjLiAgSWYgd2UgbG9zdCBhIHNlY29uZCBvciBtb3JlLCB0aGUgQyByb3VuZGluZyBpcworICAgICAqIHVucmVhc29uYWJsZSwgb3IgdGhlIGlucHV0IGp1c3QgZG9lc24ndCBmaXQgaW4gYSB0aW1lX3Q7CisgICAgICogY2FsbCBpdCBhbiBlcnJvciByZWdhcmRsZXNzLiAgTm90ZSB0aGF0IHRoZSBvcmlnaW5hbCBjYXN0IHRvCisgICAgICogdGltZV90IGNhbiBjYXVzZSBhIEMgZXJyb3IgdG9vLCBidXQgbm90aGluZyB3ZSBjYW4gZG8gdG8KKyAgICAgKiB3b3JrIGFyb3VuZCB0aGF0LgorICAgICAqLworICAgIGRpZmYgPSB4IC0gKGRvdWJsZSlyZXN1bHQ7CisgICAgaWYgKGRpZmYgPD0gLTEuMCB8fCBkaWZmID49IDEuMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIGZvciBwbGF0Zm9ybSB0aW1lX3QiKTsKKyAgICAgICAgcmVzdWx0ID0gKHRpbWVfdCktMTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RpbWUuaCBiL01vZHVsZXMvX3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY1OTNiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdGltZS5oCkBAIC0wLDAgKzEsMyBAQAorLyogWFhYOiBJdCBpcyBwcm9iYWJseSBiZXN0IHRvIG1vdmUgdGltZWZ1bmNzLmggY29udGVudCBpbiBoZXJlLCBhbmQKKyAgIHJlbW92ZSBpdCBidXQgdXNlciBjb2RlIG1heSByZWx5IG9uIGl0LiAqLworI2luY2x1ZGUgInRpbWVmdW5jcy5oIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGtpbnRlci5jIGIvTW9kdWxlcy9fdGtpbnRlci5jCmluZGV4IDg1NTI1NzUuLmM3YzE1MzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RraW50ZXIuYworKysgYi9Nb2R1bGVzL190a2ludGVyLmMKQEAgLTMxNDcsOSArMzE0Nyw3IEBACiAgICAgICAgaXQgYWxzbyBoZWxwcyBUY2wgZmluZCBpdHMgZW5jb2RpbmdzLiAqLwogICAgIHVleGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKFB5X0dldFByb2dyYW1OYW1lKCksIC0xKTsKICAgICBpZiAodWV4ZSkgewotICAgICAgICBjZXhlID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1ZXhlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgY2V4ZSA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQodWV4ZSk7CiAgICAgICAgIGlmIChjZXhlKQogICAgICAgICAgICAgVGNsX0ZpbmRFeGVjdXRhYmxlKFB5Qnl0ZXNfQXNTdHJpbmcoY2V4ZSkpOwogICAgICAgICBQeV9YREVDUkVGKGNleGUpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jIGIvTW9kdWxlcy9hcnJheW1vZHVsZS5jCmluZGV4IDU5ZjIwYTUuLmZlNjEwNmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXJyYXltb2R1bGUuYworKysgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKQEAgLTIyLDExICsyMiwxMyBAQAogICogZnVuY3Rpb25zIGFyZW4ndCB2aXNpYmxlIHlldC4KICAqLwogc3RydWN0IGFycmF5ZGVzY3IgewotICAgIGludCB0eXBlY29kZTsKKyAgICBQeV9VTklDT0RFIHR5cGVjb2RlOwogICAgIGludCBpdGVtc2l6ZTsKICAgICBQeU9iamVjdCAqICgqZ2V0aXRlbSkoc3RydWN0IGFycmF5b2JqZWN0ICosIFB5X3NzaXplX3QpOwogICAgIGludCAoKnNldGl0ZW0pKHN0cnVjdCBhcnJheW9iamVjdCAqLCBQeV9zc2l6ZV90LCBQeU9iamVjdCAqKTsKICAgICBjaGFyICpmb3JtYXRzOworICAgIGludCBpc19pbnRlZ2VyX3R5cGU7CisgICAgaW50IGlzX3NpZ25lZDsKIH07CiAKIHR5cGVkZWYgc3RydWN0IGFycmF5b2JqZWN0IHsKQEAgLTM4OSwyMCArMzkxLDI0IEBACiB9CiAKIAotLyogRGVzY3JpcHRpb24gb2YgdHlwZXMgKi8KKy8qIERlc2NyaXB0aW9uIG9mIHR5cGVzLgorICoKKyAqIERvbid0IGZvcmdldCB0byB1cGRhdGUgdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKCkgaWYgeW91IGFkZCBhIG5ldworICogdHlwZWNvZGUuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgYXJyYXlkZXNjciBkZXNjcmlwdG9yc1tdID0gewotICAgIHsnYicsIDEsIGJfZ2V0aXRlbSwgYl9zZXRpdGVtLCAiYiJ9LAotICAgIHsnQicsIDEsIEJCX2dldGl0ZW0sIEJCX3NldGl0ZW0sICJCIn0sCi0gICAgeyd1Jywgc2l6ZW9mKFB5X1VOSUNPREUpLCB1X2dldGl0ZW0sIHVfc2V0aXRlbSwgInUifSwKLSAgICB7J2gnLCBzaXplb2Yoc2hvcnQpLCBoX2dldGl0ZW0sIGhfc2V0aXRlbSwgImgifSwKLSAgICB7J0gnLCBzaXplb2Yoc2hvcnQpLCBISF9nZXRpdGVtLCBISF9zZXRpdGVtLCAiSCJ9LAotICAgIHsnaScsIHNpemVvZihpbnQpLCBpX2dldGl0ZW0sIGlfc2V0aXRlbSwgImkifSwKLSAgICB7J0knLCBzaXplb2YoaW50KSwgSUlfZ2V0aXRlbSwgSUlfc2V0aXRlbSwgIkkifSwKLSAgICB7J2wnLCBzaXplb2YobG9uZyksIGxfZ2V0aXRlbSwgbF9zZXRpdGVtLCAibCJ9LAotICAgIHsnTCcsIHNpemVvZihsb25nKSwgTExfZ2V0aXRlbSwgTExfc2V0aXRlbSwgIkwifSwKLSAgICB7J2YnLCBzaXplb2YoZmxvYXQpLCBmX2dldGl0ZW0sIGZfc2V0aXRlbSwgImYifSwKLSAgICB7J2QnLCBzaXplb2YoZG91YmxlKSwgZF9nZXRpdGVtLCBkX3NldGl0ZW0sICJkIn0sCi0gICAgeydcMCcsIDAsIDAsIDAsIDB9IC8qIFNlbnRpbmVsICovCisgICAgeydiJywgMSwgYl9nZXRpdGVtLCBiX3NldGl0ZW0sICJiIiwgMSwgMX0sCisgICAgeydCJywgMSwgQkJfZ2V0aXRlbSwgQkJfc2V0aXRlbSwgIkIiLCAxLCAwfSwKKyAgICB7J3UnLCBzaXplb2YoUHlfVU5JQ09ERSksIHVfZ2V0aXRlbSwgdV9zZXRpdGVtLCAidSIsIDAsIDB9LAorICAgIHsnaCcsIHNpemVvZihzaG9ydCksIGhfZ2V0aXRlbSwgaF9zZXRpdGVtLCAiaCIsIDEsIDF9LAorICAgIHsnSCcsIHNpemVvZihzaG9ydCksIEhIX2dldGl0ZW0sIEhIX3NldGl0ZW0sICJIIiwgMSwgMH0sCisgICAgeydpJywgc2l6ZW9mKGludCksIGlfZ2V0aXRlbSwgaV9zZXRpdGVtLCAiaSIsIDEsIDF9LAorICAgIHsnSScsIHNpemVvZihpbnQpLCBJSV9nZXRpdGVtLCBJSV9zZXRpdGVtLCAiSSIsIDEsIDB9LAorICAgIHsnbCcsIHNpemVvZihsb25nKSwgbF9nZXRpdGVtLCBsX3NldGl0ZW0sICJsIiwgMSwgMX0sCisgICAgeydMJywgc2l6ZW9mKGxvbmcpLCBMTF9nZXRpdGVtLCBMTF9zZXRpdGVtLCAiTCIsIDEsIDB9LAorICAgIHsnZicsIHNpemVvZihmbG9hdCksIGZfZ2V0aXRlbSwgZl9zZXRpdGVtLCAiZiIsIDAsIDB9LAorICAgIHsnZCcsIHNpemVvZihkb3VibGUpLCBkX2dldGl0ZW0sIGRfc2V0aXRlbSwgImQiLCAwLCAwfSwKKyAgICB7J1wwJywgMCwgMCwgMCwgMCwgMCwgMH0gLyogU2VudGluZWwgKi8KIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC02NjgsMTEgKzY3NCw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXJyYXlfcmVwZWF0KGFycmF5b2JqZWN0ICphLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICBhcnJheW9iamVjdCAqbnA7Ci0gICAgY2hhciAqcDsKLSAgICBQeV9zc2l6ZV90IG5ieXRlczsKKyAgICBQeV9zc2l6ZV90IG9sZGJ5dGVzLCBuZXdieXRlczsKICAgICBpZiAobiA8IDApCiAgICAgICAgIG4gPSAwOwogICAgIGlmICgoUHlfU0laRShhKSAhPSAwKSAmJiAobiA+IFBZX1NTSVpFX1RfTUFYIC8gUHlfU0laRShhKSkpIHsKQEAgLTY4MiwxMyArNjg2LDIzIEBACiAgICAgbnAgPSAoYXJyYXlvYmplY3QgKikgbmV3YXJyYXlvYmplY3QoJkFycmF5dHlwZSwgc2l6ZSwgYS0+b2JfZGVzY3IpOwogICAgIGlmIChucCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwID0gbnAtPm9iX2l0ZW07Ci0gICAgbmJ5dGVzID0gUHlfU0laRShhKSAqIGEtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIG1lbWNweShwLCBhLT5vYl9pdGVtLCBuYnl0ZXMpOwotICAgICAgICBwICs9IG5ieXRlczsKKyAgICBpZiAobiA9PSAwKQorICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopbnA7CisgICAgb2xkYnl0ZXMgPSBQeV9TSVpFKGEpICogYS0+b2JfZGVzY3ItPml0ZW1zaXplOworICAgIG5ld2J5dGVzID0gb2xkYnl0ZXMgKiBuOworICAgIC8qIHRoaXMgZm9sbG93cyB0aGUgY29kZSBpbiB1bmljb2RlX3JlcGVhdCAqLworICAgIGlmIChvbGRieXRlcyA9PSAxKSB7CisgICAgICAgIG1lbXNldChucC0+b2JfaXRlbSwgYS0+b2JfaXRlbVswXSwgbmV3Ynl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X3NzaXplX3QgZG9uZSA9IG9sZGJ5dGVzOworICAgICAgICBQeV9NRU1DUFkobnAtPm9iX2l0ZW0sIGEtPm9iX2l0ZW0sIG9sZGJ5dGVzKTsKKyAgICAgICAgd2hpbGUgKGRvbmUgPCBuZXdieXRlcykgeworICAgICAgICAgICAgUHlfc3NpemVfdCBuY29weSA9IChkb25lIDw9IG5ld2J5dGVzLWRvbmUpID8gZG9uZSA6IG5ld2J5dGVzLWRvbmU7CisgICAgICAgICAgICBQeV9NRU1DUFkobnAtPm9iX2l0ZW0rZG9uZSwgbnAtPm9iX2l0ZW0sIG5jb3B5KTsKKyAgICAgICAgICAgIGRvbmUgKz0gbmNvcHk7CisgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChQeU9iamVjdCAqKSBucDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopbnA7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTExMzYsNDAgKzExNTAsNiBAQAogNCwgb3IgOCBieXRlcyBpbiBzaXplLCBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYXJyYXlfcmVkdWNlKGFycmF5b2JqZWN0ICphcnJheSkKLXsKLSAgICBQeU9iamVjdCAqZGljdCwgKnJlc3VsdDsKLQotICAgIGRpY3QgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKWFycmF5LCAiX19kaWN0X18iKTsKLSAgICBpZiAoZGljdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIGRpY3QgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoZGljdCk7Ci0gICAgfQotICAgIGlmIChQeV9TSVpFKGFycmF5KSA+IDApIHsKLSAgICAgICAgaWYgKGFycmF5LT5vYl9kZXNjci0+aXRlbXNpemUKLSAgICAgICAgICAgICAgICAgICAgICAgID4gUFlfU1NJWkVfVF9NQVggLyBQeV9TSVpFKGFycmF5KSkgewotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgiTyhDeSMpTyIsCi0gICAgICAgICAgICBQeV9UWVBFKGFycmF5KSwKLSAgICAgICAgICAgIGFycmF5LT5vYl9kZXNjci0+dHlwZWNvZGUsCi0gICAgICAgICAgICBhcnJheS0+b2JfaXRlbSwKLSAgICAgICAgICAgIFB5X1NJWkUoYXJyYXkpICogYXJyYXktPm9iX2Rlc2NyLT5pdGVtc2l6ZSwKLSAgICAgICAgICAgIGRpY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIk8oQylPIiwKLSAgICAgICAgICAgIFB5X1RZUEUoYXJyYXkpLAotICAgICAgICAgICAgYXJyYXktPm9iX2Rlc2NyLT50eXBlY29kZSwKLSAgICAgICAgICAgIGRpY3QpOwotICAgIH0KLSAgICBQeV9ERUNSRUYoZGljdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUHlEb2NfU1RSVkFSKGFycmF5X2RvYywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcuIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9yZXZlcnNlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7CkBAIC0xMjAzLDcgKzExODMsNyBAQAogCiAKIC8qIEZvcndhcmQgKi8KLXN0YXRpYyBQeU9iamVjdCAqYXJyYXlfZnJvbXN0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpOworc3RhdGljIFB5T2JqZWN0ICphcnJheV9mcm9tYnl0ZXMoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2Zyb21maWxlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNDAsNyArMTIyMCw3IEBACiAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXMgPSBhcnJheV9mcm9tc3RyaW5nKHNlbGYsIGFyZ3MpOworICAgIHJlcyA9IGFycmF5X2Zyb21ieXRlcyhzZWxmLCBhcmdzKTsKICAgICBQeV9ERUNSRUYoYXJncyk7CiAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzNTksNDUgKzEzMzksODQgQEAKIFxuXAogQ29udmVydCBhcnJheSB0byBhbiBvcmRpbmFyeSBsaXN0IHdpdGggdGhlIHNhbWUgaXRlbXMuIik7CiAKLQogc3RhdGljIFB5T2JqZWN0ICoKLWFycmF5X2Zyb21zdHJpbmcoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorZnJvbWJ5dGVzKGFycmF5b2JqZWN0ICpzZWxmLCBQeV9idWZmZXIgKmJ1ZmZlcikKIHsKLSAgICBjaGFyICpzdHI7Ci0gICAgUHlfc3NpemVfdCBuOwogICAgIGludCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmZyb21zdHJpbmciLCAmc3RyLCAmbikpCisgICAgUHlfc3NpemVfdCBuOworICAgIGlmIChidWZmZXItPml0ZW1zaXplICE9IDEpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZShidWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3RyaW5nL2J1ZmZlciBvZiBieXRlcyByZXF1aXJlZC4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG4gPSBidWZmZXItPmxlbjsKICAgICBpZiAobiAlIGl0ZW1zaXplICE9IDApIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZShidWZmZXIpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxlbmd0aCBub3QgYSBtdWx0aXBsZSBvZiBpdGVtIHNpemUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG4gPSBuIC8gaXRlbXNpemU7CiAgICAgaWYgKG4gPiAwKSB7Ci0gICAgUHlfc3NpemVfdCBvbGRfc2l6ZSA9IFB5X1NJWkUoc2VsZik7CisgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgICAgICBpZiAoKG4gPiBQWV9TU0laRV9UX01BWCAtIG9sZF9zaXplKSB8fAogICAgICAgICAgICAgKChvbGRfc2l6ZSArIG4pID4gUFlfU1NJWkVfVF9NQVggLyBpdGVtc2l6ZSkpIHsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGFycmF5X3Jlc2l6ZShzZWxmLCBvbGRfc2l6ZSArIG4pID09IC0xKQorICAgICAgICBpZiAoYXJyYXlfcmVzaXplKHNlbGYsIG9sZF9zaXplICsgbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoYnVmZmVyKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShzZWxmLT5vYl9pdGVtICsgb2xkX3NpemUgKiBpdGVtc2l6ZSwKLSAgICAgICAgICAgIHN0ciwgbiAqIGl0ZW1zaXplKTsKKyAgICAgICAgICAgIGJ1ZmZlci0+YnVmLCBuICogaXRlbXNpemUpOwogICAgIH0KKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKGJ1ZmZlcik7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorYXJyYXlfZnJvbXN0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKKyAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICJmcm9tc3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gVXNlIGZyb21ieXRlcygpIGluc3RlYWQuIiwgMikgIT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKjpmcm9tc3RyaW5nIiwgJmJ1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGZyb21ieXRlcyhzZWxmLCAmYnVmZmVyKTsKK30KKwogUHlEb2NfU1RSVkFSKGZyb21zdHJpbmdfZG9jLAogImZyb21zdHJpbmcoc3RyaW5nKVxuXAogXG5cCiBBcHBlbmRzIGl0ZW1zIGZyb20gdGhlIHN0cmluZywgaW50ZXJwcmV0aW5nIGl0IGFzIGFuIGFycmF5IG9mIG1hY2hpbmVcblwKK3ZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLlxuXAorXG5cCitUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiBVc2UgZnJvbWJ5dGVzIGluc3RlYWQuIik7CisKKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X2Zyb21ieXRlcyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmZyb21ieXRlcyIsICZidWZmZXIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBmcm9tYnl0ZXMoc2VsZiwgJmJ1ZmZlcik7Cit9CisKK1B5RG9jX1NUUlZBUihmcm9tYnl0ZXNfZG9jLAorImZyb21ieXRlcyhieXRlc3RyaW5nKVxuXAorXG5cCitBcHBlbmRzIGl0ZW1zIGZyb20gdGhlIHN0cmluZywgaW50ZXJwcmV0aW5nIGl0IGFzIGFuIGFycmF5IG9mIG1hY2hpbmVcblwKIHZhbHVlcywgYXMgaWYgaXQgaGFkIGJlZW4gcmVhZCBmcm9tIGEgZmlsZSB1c2luZyB0aGUgZnJvbWZpbGUoKSBtZXRob2QpLiIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1hcnJheV90b3N0cmluZyhhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK2FycmF5X3RvYnl0ZXMoYXJyYXlvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgaWYgKFB5X1NJWkUoc2VsZikgPD0gUFlfU1NJWkVfVF9NQVggLyBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemUpIHsKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoc2VsZi0+b2JfaXRlbSwKQEAgLTE0MDcsMjAgKzE0MjYsMzcgQEAKICAgICB9CiB9CiAKLVB5RG9jX1NUUlZBUih0b3N0cmluZ19kb2MsCi0idG9zdHJpbmcoKSAtPiBzdHJpbmdcblwKK1B5RG9jX1NUUlZBUih0b2J5dGVzX2RvYywKKyJ0b2J5dGVzKCkgLT4gYnl0ZXNcblwKIFxuXAotQ29udmVydCB0aGUgYXJyYXkgdG8gYW4gYXJyYXkgb2YgbWFjaGluZSB2YWx1ZXMgYW5kIHJldHVybiB0aGUgc3RyaW5nXG5cCitDb252ZXJ0IHRoZSBhcnJheSB0byBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcyBhbmQgcmV0dXJuIHRoZSBieXRlc1xuXAogcmVwcmVzZW50YXRpb24uIik7CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X3Rvc3RyaW5nKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgInRvc3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gVXNlIHRvYnl0ZXMoKSBpbnN0ZWFkLiIsIDIpICE9IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBhcnJheV90b2J5dGVzKHNlbGYsIHVudXNlZCk7Cit9CisKK1B5RG9jX1NUUlZBUih0b3N0cmluZ19kb2MsCisidG9zdHJpbmcoKSAtPiBieXRlc1xuXAorXG5cCitDb252ZXJ0IHRoZSBhcnJheSB0byBhbiBhcnJheSBvZiBtYWNoaW5lIHZhbHVlcyBhbmQgcmV0dXJuIHRoZSBieXRlc1xuXAorcmVwcmVzZW50YXRpb24uXG5cCitcblwKK1RoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuIFVzZSB0b2J5dGVzIGluc3RlYWQuIik7CisKIAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2Zyb211bmljb2RlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9VTklDT0RFICp1c3RyOwogICAgIFB5X3NzaXplX3QgbjsKLSAgICBjaGFyIHR5cGVjb2RlOworICAgIFB5X1VOSUNPREUgdHlwZWNvZGU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInUjOmZyb211bmljb2RlIiwgJnVzdHIsICZuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNDQ4LDE0ICsxNDg0LDE0IEBACiBcblwKIEV4dGVuZHMgdGhpcyBhcnJheSB3aXRoIGRhdGEgZnJvbSB0aGUgdW5pY29kZSBzdHJpbmcgdXN0ci5cblwKIFRoZSBhcnJheSBtdXN0IGJlIGEgdW5pY29kZSB0eXBlIGFycmF5OyBvdGhlcndpc2UgYSBWYWx1ZUVycm9yXG5cCi1pcyByYWlzZWQuICBVc2UgYXJyYXkuZnJvbXN0cmluZyh1c3RyLmRlY29kZSguLi4pKSB0b1xuXAoraXMgcmFpc2VkLiAgVXNlIGFycmF5LmZyb21ieXRlcyh1c3RyLmRlY29kZSguLi4pKSB0b1xuXAogYXBwZW5kIFVuaWNvZGUgZGF0YSB0byBhbiBhcnJheSBvZiBzb21lIG90aGVyIHR5cGUuIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X3RvdW5pY29kZShhcnJheW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICBjaGFyIHR5cGVjb2RlOworICAgIFB5X1VOSUNPREUgdHlwZWNvZGU7CiAgICAgdHlwZWNvZGUgPSBzZWxmLT5vYl9kZXNjci0+dHlwZWNvZGU7CiAgICAgaWYgKCh0eXBlY29kZSAhPSAndScpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLApAQCAtMTQ3NSwxMSArMTUxMSw1MDcgQEAKIAogCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKiBQaWNrbGluZyBzdXBwb3J0ICoqKioqKioqKioqKioqKioqKioqKioqKi8KKworZW51bSBtYWNoaW5lX2Zvcm1hdF9jb2RlIHsKKyAgICBVTktOT1dOX0ZPUk1BVCA9IC0xLAorICAgIC8qIFVOS05PV05fRk9STUFUIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWFjaGluZSBmb3JtYXQgZm9yIGFuCisgICAgICogYXJyYXkgdHlwZSBjb2RlIGNhbm5vdCBiZSBpbnRlcnByZXRlZC4gV2hlbiB0aGlzIG9jY3VycywgYSBsaXN0IG9mCisgICAgICogUHl0aG9uIG9iamVjdHMgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvbnRlbnQgb2YgdGhlIGFycmF5CisgICAgICogaW5zdGVhZCBvZiB1c2luZyB0aGUgbWVtb3J5IGNvbnRlbnQgb2YgdGhlIGFycmF5IGRpcmVjdGx5LiBJbiB0aGF0CisgICAgICogY2FzZSwgdGhlIGFycmF5X3JlY29uc3RydWN0b3IgbWVjaGFuaXNtIGlzIGJ5cGFzc2VkIGNvbXBsZXRlbHksIGFuZAorICAgICAqIHRoZSBzdGFuZGFyZCBhcnJheSBjb25zdHJ1Y3RvciBpcyB1c2VkIGluc3RlYWQuCisgICAgICoKKyAgICAgKiBUaGlzIGlzIHdpbGwgbW9zdCBsaWtlbHkgb2NjdXIgd2hlbiB0aGUgbWFjaGluZSBkb2Vzbid0IHVzZSBJRUVFCisgICAgICogZmxvYXRpbmctcG9pbnQgbnVtYmVycy4KKyAgICAgKi8KKworICAgIFVOU0lHTkVEX0lOVDggPSAwLAorICAgIFNJR05FRF9JTlQ4ID0gMSwKKyAgICBVTlNJR05FRF9JTlQxNl9MRSA9IDIsCisgICAgVU5TSUdORURfSU5UMTZfQkUgPSAzLAorICAgIFNJR05FRF9JTlQxNl9MRSA9IDQsCisgICAgU0lHTkVEX0lOVDE2X0JFID0gNSwKKyAgICBVTlNJR05FRF9JTlQzMl9MRSA9IDYsCisgICAgVU5TSUdORURfSU5UMzJfQkUgPSA3LAorICAgIFNJR05FRF9JTlQzMl9MRSA9IDgsCisgICAgU0lHTkVEX0lOVDMyX0JFID0gOSwKKyAgICBVTlNJR05FRF9JTlQ2NF9MRSA9IDEwLAorICAgIFVOU0lHTkVEX0lOVDY0X0JFID0gMTEsCisgICAgU0lHTkVEX0lOVDY0X0xFID0gMTIsCisgICAgU0lHTkVEX0lOVDY0X0JFID0gMTMsCisgICAgSUVFRV83NTRfRkxPQVRfTEUgPSAxNCwKKyAgICBJRUVFXzc1NF9GTE9BVF9CRSA9IDE1LAorICAgIElFRUVfNzU0X0RPVUJMRV9MRSA9IDE2LAorICAgIElFRUVfNzU0X0RPVUJMRV9CRSA9IDE3LAorICAgIFVURjE2X0xFID0gMTgsCisgICAgVVRGMTZfQkUgPSAxOSwKKyAgICBVVEYzMl9MRSA9IDIwLAorICAgIFVURjMyX0JFID0gMjEKK307CisjZGVmaW5lIE1BQ0hJTkVfRk9STUFUX0NPREVfTUlOIDAKKyNkZWZpbmUgTUFDSElORV9GT1JNQVRfQ09ERV9NQVggMjEKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZm9ybWF0ZGVzY3IgeworICAgIHNpemVfdCBzaXplOworICAgIGludCBpc19zaWduZWQ7CisgICAgaW50IGlzX2JpZ19lbmRpYW47Cit9IG1mb3JtYXRfZGVzY3JpcHRvcnNbXSA9IHsKKyAgICB7MSwgMCwgMH0sICAgICAgICAgICAgICAgICAgLyogMDogVU5TSUdORURfSU5UOCAqLworICAgIHsxLCAxLCAwfSwgICAgICAgICAgICAgICAgICAvKiAxOiBTSUdORURfSU5UOCAqLworICAgIHsyLCAwLCAwfSwgICAgICAgICAgICAgICAgICAvKiAyOiBVTlNJR05FRF9JTlQxNl9MRSAqLworICAgIHsyLCAwLCAxfSwgICAgICAgICAgICAgICAgICAvKiAzOiBVTlNJR05FRF9JTlQxNl9CRSAqLworICAgIHsyLCAxLCAwfSwgICAgICAgICAgICAgICAgICAvKiA0OiBTSUdORURfSU5UMTZfTEUgKi8KKyAgICB7MiwgMSwgMX0sICAgICAgICAgICAgICAgICAgLyogNTogU0lHTkVEX0lOVDE2X0JFICovCisgICAgezQsIDAsIDB9LCAgICAgICAgICAgICAgICAgIC8qIDY6IFVOU0lHTkVEX0lOVDMyX0xFICovCisgICAgezQsIDAsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDc6IFVOU0lHTkVEX0lOVDMyX0JFICovCisgICAgezQsIDEsIDB9LCAgICAgICAgICAgICAgICAgIC8qIDg6IFNJR05FRF9JTlQzMl9MRSAqLworICAgIHs0LCAxLCAxfSwgICAgICAgICAgICAgICAgICAvKiA5OiBTSUdORURfSU5UMzJfQkUgKi8KKyAgICB7OCwgMCwgMH0sICAgICAgICAgICAgICAgICAgLyogMTA6IFVOU0lHTkVEX0lOVDY0X0xFICovCisgICAgezgsIDAsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDExOiBVTlNJR05FRF9JTlQ2NF9CRSAqLworICAgIHs4LCAxLCAwfSwgICAgICAgICAgICAgICAgICAvKiAxMjogU0lHTkVEX0lOVDY0X0xFICovCisgICAgezgsIDEsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDEzOiBTSUdORURfSU5UNjRfQkUgKi8KKyAgICB7NCwgMCwgMH0sICAgICAgICAgICAgICAgICAgLyogMTQ6IElFRUVfNzU0X0ZMT0FUX0xFICovCisgICAgezQsIDAsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDE1OiBJRUVFXzc1NF9GTE9BVF9CRSAqLworICAgIHs4LCAwLCAwfSwgICAgICAgICAgICAgICAgICAvKiAxNjogSUVFRV83NTRfRE9VQkxFX0xFICovCisgICAgezgsIDAsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDE3OiBJRUVFXzc1NF9ET1VCTEVfQkUgKi8KKyAgICB7NCwgMCwgMH0sICAgICAgICAgICAgICAgICAgLyogMTg6IFVURjE2X0xFICovCisgICAgezQsIDAsIDF9LCAgICAgICAgICAgICAgICAgIC8qIDE5OiBVVEYxNl9CRSAqLworICAgIHs4LCAwLCAwfSwgICAgICAgICAgICAgICAgICAvKiAyMDogVVRGMzJfTEUgKi8KKyAgICB7OCwgMCwgMX0gICAgICAgICAgICAgICAgICAgLyogMjE6IFVURjMyX0JFICovCit9OworCisKKy8qCisgKiBJbnRlcm5hbDogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZpbmQgdGhlIG1hY2hpbmUgZm9ybWF0IG9mIGEgZ2l2ZW4KKyAqIGFycmF5IHR5cGUgY29kZS4gVGhpcyByZXR1cm5zIFVOS05PV05fRk9STUFUIHdoZW4gdGhlIG1hY2hpbmUgZm9ybWF0IGNhbm5vdAorICogYmUgZm91bmQuCisgKi8KK3N0YXRpYyBlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUKK3R5cGVjb2RlX3RvX21mb3JtYXRfY29kZShpbnQgdHlwZWNvZGUpCit7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAxOworI2Vsc2UKKyAgICBjb25zdCBpbnQgaXNfYmlnX2VuZGlhbiA9IDA7CisjZW5kaWYKKyAgICBzaXplX3QgaW50c2l6ZTsKKyAgICBpbnQgaXNfc2lnbmVkOworCisgICAgc3dpdGNoICh0eXBlY29kZSkgeworICAgIGNhc2UgJ2InOgorICAgICAgICByZXR1cm4gU0lHTkVEX0lOVDg7CisgICAgY2FzZSAnQic6CisgICAgICAgIHJldHVybiBVTlNJR05FRF9JTlQ4OworCisgICAgY2FzZSAndSc6CisgICAgICAgIGlmIChzaXplb2YoUHlfVU5JQ09ERSkgPT0gMikgeworICAgICAgICAgICAgcmV0dXJuIFVURjE2X0xFICsgaXNfYmlnX2VuZGlhbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2l6ZW9mKFB5X1VOSUNPREUpID09IDQpIHsKKyAgICAgICAgICAgIHJldHVybiBVVEYzMl9MRSArIGlzX2JpZ19lbmRpYW47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFVOS05PV05fRk9STUFUOworCisgICAgY2FzZSAnZic6CisgICAgICAgIGlmIChzaXplb2YoZmxvYXQpID09IDQpIHsKKyAgICAgICAgICAgIGNvbnN0IGZsb2F0IHkgPSAxNjcxMTkzOC4wOworICAgICAgICAgICAgaWYgKG1lbWNtcCgmeSwgIlx4NGJceDdmXHgwMVx4MDIiLCA0KSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBJRUVFXzc1NF9GTE9BVF9CRTsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoJnksICJceDAyXHgwMVx4N2ZceDRiIiwgNCkgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSUVFRV83NTRfRkxPQVRfTEU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFVOS05PV05fRk9STUFUOworCisgICAgY2FzZSAnZCc6CisgICAgICAgIGlmIChzaXplb2YoZG91YmxlKSA9PSA4KSB7CisgICAgICAgICAgICBjb25zdCBkb3VibGUgeCA9IDkwMDYxMDQwNzE4MzI1ODEuMDsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoJngsICJceDQzXHgzZlx4ZmZceDAxXHgwMlx4MDNceDA0XHgwNSIsIDgpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIElFRUVfNzU0X0RPVUJMRV9CRTsKKyAgICAgICAgICAgIGlmIChtZW1jbXAoJngsICJceDA1XHgwNFx4MDNceDAyXHgwMVx4ZmZceDNmXHg0MyIsIDgpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIElFRUVfNzU0X0RPVUJMRV9MRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVU5LTk9XTl9GT1JNQVQ7CisKKyAgICAvKiBJbnRlZ2VycyAqLworICAgIGNhc2UgJ2gnOgorICAgICAgICBpbnRzaXplID0gc2l6ZW9mKHNob3J0KTsKKyAgICAgICAgaXNfc2lnbmVkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnSCc6CisgICAgICAgIGludHNpemUgPSBzaXplb2Yoc2hvcnQpOworICAgICAgICBpc19zaWduZWQgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdpJzoKKyAgICAgICAgaW50c2l6ZSA9IHNpemVvZihpbnQpOworICAgICAgICBpc19zaWduZWQgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdJJzoKKyAgICAgICAgaW50c2l6ZSA9IHNpemVvZihpbnQpOworICAgICAgICBpc19zaWduZWQgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdsJzoKKyAgICAgICAgaW50c2l6ZSA9IHNpemVvZihsb25nKTsKKyAgICAgICAgaXNfc2lnbmVkID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTCc6CisgICAgICAgIGludHNpemUgPSBzaXplb2YobG9uZyk7CisgICAgICAgIGlzX3NpZ25lZCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBVTktOT1dOX0ZPUk1BVDsKKyAgICB9CisgICAgc3dpdGNoIChpbnRzaXplKSB7CisgICAgY2FzZSAyOgorICAgICAgICByZXR1cm4gVU5TSUdORURfSU5UMTZfTEUgKyBpc19iaWdfZW5kaWFuICsgKDIgKiBpc19zaWduZWQpOworICAgIGNhc2UgNDoKKyAgICAgICAgcmV0dXJuIFVOU0lHTkVEX0lOVDMyX0xFICsgaXNfYmlnX2VuZGlhbiArICgyICogaXNfc2lnbmVkKTsKKyAgICBjYXNlIDg6CisgICAgICAgIHJldHVybiBVTlNJR05FRF9JTlQ2NF9MRSArIGlzX2JpZ19lbmRpYW4gKyAoMiAqIGlzX3NpZ25lZCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFVOS05PV05fRk9STUFUOworICAgIH0KK30KKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbi4gKi8KK3N0YXRpYyBQeU9iamVjdCAqYXJyYXlfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKTsKKworLyoKKyAqIEludGVybmFsOiBUaGlzIGZ1bmN0aW9uIHdyYXBzIHRoZSBhcnJheSBjb25zdHJ1Y3Rvci0taS5lLiwgYXJyYXlfbmV3KCktLXRvCisgKiBhbGxvdyB0aGUgY3JlYXRpb24gb2YgYXJyYXkgb2JqZWN0cyBmcm9tIEMgY29kZSB3aXRob3V0IGhhdmluZyB0byBkZWFsCisgKiBkaXJlY3RseSB0aGUgdHVwbGUgYXJndW1lbnQgb2YgYXJyYXlfbmV3KCkuIFRoZSB0eXBlY29kZSBhcmd1bWVudCBpcyBhCisgKiBVbmljb2RlIGNoYXJhY3RlciB2YWx1ZSwgbGlrZSAnaScgb3IgJ2YnIGZvciBleGFtcGxlLCByZXByZXNlbnRpbmcgYW4gYXJyYXkKKyAqIHR5cGUgY29kZS4gVGhlIGl0ZW1zIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb3IgYSBsaXN0IG9iamVjdCBmcm9tIHdoaWNoCisgKiBjb250YWlucyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYXJyYXkuCisgKgorICogT24gc3VjY2VzcywgdGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgYXJyYXkgb2JqZWN0IGNyZWF0ZWQuIE90aGVyd2lzZSwKKyAqIE5VTEwgaXMgcmV0dXJuZWQgdG8gaW5kaWNhdGUgYSBmYWlsdXJlLgorICovCitzdGF0aWMgUHlPYmplY3QgKgorbWFrZV9hcnJheShQeVR5cGVPYmplY3QgKmFycmF5dHlwZSwgUHlfVU5JQ09ERSB0eXBlY29kZSwgUHlPYmplY3QgKml0ZW1zKQoreworICAgIFB5T2JqZWN0ICpuZXdfYXJnczsKKyAgICBQeU9iamVjdCAqYXJyYXlfb2JqOworICAgIFB5T2JqZWN0ICp0eXBlY29kZV9vYmo7CisKKyAgICBhc3NlcnQoYXJyYXl0eXBlICE9IE5VTEwpOworICAgIGFzc2VydChpdGVtcyAhPSBOVUxMKTsKKworICAgIHR5cGVjb2RlX29iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgmdHlwZWNvZGUsIDEpOworICAgIGlmICh0eXBlY29kZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXdfYXJncyA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmIChuZXdfYXJncyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoaXRlbXMpOworICAgIFB5VHVwbGVfU0VUX0lURU0obmV3X2FyZ3MsIDAsIHR5cGVjb2RlX29iaik7CisgICAgUHlUdXBsZV9TRVRfSVRFTShuZXdfYXJncywgMSwgaXRlbXMpOworCisgICAgYXJyYXlfb2JqID0gYXJyYXlfbmV3KGFycmF5dHlwZSwgbmV3X2FyZ3MsIE5VTEwpOworICAgIFB5X0RFQ1JFRihuZXdfYXJncyk7CisgICAgaWYgKGFycmF5X29iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBhcnJheV9vYmo7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9ucyBpcyBhIHNwZWNpYWwgY29uc3RydWN0b3IgdXNlZCB3aGVuIHVucGlja2xpbmcgYW4gYXJyYXkuIEl0CisgKiBwcm92aWRlcyBhIHBvcnRhYmxlIHdheSB0byByZWJ1aWxkIGFuIGFycmF5IGZyb20gaXRzIG1lbW9yeSByZXByZXNlbnRhdGlvbi4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X3JlY29uc3RydWN0b3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5VHlwZU9iamVjdCAqYXJyYXl0eXBlOworICAgIFB5T2JqZWN0ICppdGVtczsKKyAgICBQeU9iamVjdCAqY29udmVydGVkX2l0ZW1zOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaW50IHR5cGVjb2RlX2ludDsKKyAgICBQeV9VTklDT0RFIHR5cGVjb2RlOworICAgIGVudW0gbWFjaGluZV9mb3JtYXRfY29kZSBtZm9ybWF0X2NvZGU7CisgICAgc3RydWN0IGFycmF5ZGVzY3IgKmRlc2NyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPQ2lPOmFycmF5Ll9hcnJheV9yZWNvbnN0cnVjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgJmFycmF5dHlwZSwgJnR5cGVjb2RlX2ludCwgJm1mb3JtYXRfY29kZSwgJml0ZW1zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0eXBlY29kZSA9IChQeV9VTklDT0RFKXR5cGVjb2RlX2ludDsKKworICAgIGlmICghUHlUeXBlX0NoZWNrKGFycmF5dHlwZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGEgdHlwZSBvYmplY3QsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShhcnJheXR5cGUpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShhcnJheXR5cGUsICZBcnJheXR5cGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiJS4yMDBzIGlzIG5vdCBhIHN1YnR5cGUgb2YgJS4yMDBzIiwKKyAgICAgICAgICAgIGFycmF5dHlwZS0+dHBfbmFtZSwgQXJyYXl0eXBlLnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChkZXNjciA9IGRlc2NyaXB0b3JzOyBkZXNjci0+dHlwZWNvZGUgIT0gJ1wwJzsgZGVzY3IrKykgeworICAgICAgICBpZiAoZGVzY3ItPnR5cGVjb2RlID09IHR5cGVjb2RlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChkZXNjci0+dHlwZWNvZGUgPT0gJ1wwJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIHZhbGlkIHR5cGUgY29kZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG1mb3JtYXRfY29kZSA8IE1BQ0hJTkVfRk9STUFUX0NPREVfTUlOIHx8CisgICAgICAgIG1mb3JtYXRfY29kZSA+IE1BQ0hJTkVfRk9STUFUX0NPREVfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgInRoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSB2YWxpZCBtYWNoaW5lIGZvcm1hdCBjb2RlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGl0ZW1zKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImZvdXJ0aCBhcmd1bWVudCBzaG91bGQgYmUgYnl0ZXMsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShpdGVtcyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBGYXN0IHBhdGg6IE5vIGRlY29kaW5nIGhhcyB0byBiZSBkb25lLiAqLworICAgIGlmIChtZm9ybWF0X2NvZGUgPT0gdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKHR5cGVjb2RlKSB8fAorICAgICAgICBtZm9ybWF0X2NvZGUgPT0gVU5LTk9XTl9GT1JNQVQpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfYXJyYXkoYXJyYXl0eXBlLCB0eXBlY29kZSwgaXRlbXMpOworICAgIH0KKworICAgIC8qIFNsb3cgcGF0aDogRGVjb2RlIHRoZSBieXRlIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuIG1hY2hpbmUKKyAgICAgKiBmb3JtYXQgY29kZS4gVGhpcyBvY2N1cnMgd2hlbiB0aGUgY29tcHV0ZXIgdW5waWNrbGluZyB0aGUgYXJyYXkKKyAgICAgKiBvYmplY3QgaXMgYXJjaGl0ZWN0dXJhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgdGhhdCBwaWNrbGVkIHRoZQorICAgICAqIGFycmF5LgorICAgICAqLworICAgIGlmIChQeV9TSVpFKGl0ZW1zKSAlIG1mb3JtYXRfZGVzY3JpcHRvcnNbbWZvcm1hdF9jb2RlXS5zaXplICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyaW5nIGxlbmd0aCBub3QgYSBtdWx0aXBsZSBvZiBpdGVtIHNpemUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN3aXRjaCAobWZvcm1hdF9jb2RlKSB7CisgICAgY2FzZSBJRUVFXzc1NF9GTE9BVF9MRToKKyAgICBjYXNlIElFRUVfNzU0X0ZMT0FUX0JFOiB7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgbGUgPSAobWZvcm1hdF9jb2RlID09IElFRUVfNzU0X0ZMT0FUX0xFKSA/IDEgOiAwOworICAgICAgICBQeV9zc2l6ZV90IGl0ZW1jb3VudCA9IFB5X1NJWkUoaXRlbXMpIC8gNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWVtc3RyID0KKyAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoaXRlbXMpOworCisgICAgICAgIGNvbnZlcnRlZF9pdGVtcyA9IFB5TGlzdF9OZXcoaXRlbWNvdW50KTsKKyAgICAgICAgaWYgKGNvbnZlcnRlZF9pdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtY291bnQ7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnB5ZmxvYXQgPSBQeUZsb2F0X0Zyb21Eb3VibGUoCisgICAgICAgICAgICAgICAgX1B5RmxvYXRfVW5wYWNrNCgmbWVtc3RyW2kgKiA0XSwgbGUpKTsKKyAgICAgICAgICAgIGlmIChweWZsb2F0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29udmVydGVkX2l0ZW1zKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShjb252ZXJ0ZWRfaXRlbXMsIGksIHB5ZmxvYXQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIElFRUVfNzU0X0RPVUJMRV9MRToKKyAgICBjYXNlIElFRUVfNzU0X0RPVUJMRV9CRTogeworICAgICAgICBpbnQgaTsKKyAgICAgICAgaW50IGxlID0gKG1mb3JtYXRfY29kZSA9PSBJRUVFXzc1NF9ET1VCTEVfTEUpID8gMSA6IDA7CisgICAgICAgIFB5X3NzaXplX3QgaXRlbWNvdW50ID0gUHlfU0laRShpdGVtcykgLyA4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICptZW1zdHIgPQorICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhpdGVtcyk7CisKKyAgICAgICAgY29udmVydGVkX2l0ZW1zID0gUHlMaXN0X05ldyhpdGVtY291bnQpOworICAgICAgICBpZiAoY29udmVydGVkX2l0ZW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1jb3VudDsgaSsrKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcHlmbG9hdCA9IFB5RmxvYXRfRnJvbURvdWJsZSgKKyAgICAgICAgICAgICAgICBfUHlGbG9hdF9VbnBhY2s4KCZtZW1zdHJbaSAqIDhdLCBsZSkpOworICAgICAgICAgICAgaWYgKHB5ZmxvYXQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb252ZXJ0ZWRfaXRlbXMpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGNvbnZlcnRlZF9pdGVtcywgaSwgcHlmbG9hdCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVVRGMTZfTEU6CisgICAgY2FzZSBVVEYxNl9CRTogeworICAgICAgICBpbnQgYnl0ZW9yZGVyID0gKG1mb3JtYXRfY29kZSA9PSBVVEYxNl9MRSkgPyAtMSA6IDE7CisgICAgICAgIGNvbnZlcnRlZF9pdGVtcyA9IFB5VW5pY29kZV9EZWNvZGVVVEYxNigKKyAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW1zKSwgUHlfU0laRShpdGVtcyksCisgICAgICAgICAgICAic3RyaWN0IiwgJmJ5dGVvcmRlcik7CisgICAgICAgIGlmIChjb252ZXJ0ZWRfaXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBVVEYzMl9MRToKKyAgICBjYXNlIFVURjMyX0JFOiB7CisgICAgICAgIGludCBieXRlb3JkZXIgPSAobWZvcm1hdF9jb2RlID09IFVURjMyX0xFKSA/IC0xIDogMTsKKyAgICAgICAgY29udmVydGVkX2l0ZW1zID0gUHlVbmljb2RlX0RlY29kZVVURjMyKAorICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoaXRlbXMpLCBQeV9TSVpFKGl0ZW1zKSwKKyAgICAgICAgICAgICJzdHJpY3QiLCAmYnl0ZW9yZGVyKTsKKyAgICAgICAgaWYgKGNvbnZlcnRlZF9pdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgVU5TSUdORURfSU5UODoKKyAgICBjYXNlIFNJR05FRF9JTlQ4OgorICAgIGNhc2UgVU5TSUdORURfSU5UMTZfTEU6CisgICAgY2FzZSBVTlNJR05FRF9JTlQxNl9CRToKKyAgICBjYXNlIFNJR05FRF9JTlQxNl9MRToKKyAgICBjYXNlIFNJR05FRF9JTlQxNl9CRToKKyAgICBjYXNlIFVOU0lHTkVEX0lOVDMyX0xFOgorICAgIGNhc2UgVU5TSUdORURfSU5UMzJfQkU6CisgICAgY2FzZSBTSUdORURfSU5UMzJfTEU6CisgICAgY2FzZSBTSUdORURfSU5UMzJfQkU6CisgICAgY2FzZSBVTlNJR05FRF9JTlQ2NF9MRToKKyAgICBjYXNlIFVOU0lHTkVEX0lOVDY0X0JFOgorICAgIGNhc2UgU0lHTkVEX0lOVDY0X0xFOgorICAgIGNhc2UgU0lHTkVEX0lOVDY0X0JFOiB7CisgICAgICAgIGludCBpOworICAgICAgICBjb25zdCBzdHJ1Y3QgbWZvcm1hdGRlc2NyIG1mX2Rlc2NyID0KKyAgICAgICAgICAgIG1mb3JtYXRfZGVzY3JpcHRvcnNbbWZvcm1hdF9jb2RlXTsKKyAgICAgICAgUHlfc3NpemVfdCBpdGVtY291bnQgPSBQeV9TSVpFKGl0ZW1zKSAvIG1mX2Rlc2NyLnNpemU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1lbXN0ciA9CisgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKGl0ZW1zKTsKKyAgICAgICAgc3RydWN0IGFycmF5ZGVzY3IgKmRlc2NyOworCisgICAgICAgIC8qIElmIHBvc3NpYmxlLCB0cnkgdG8gcGFjayBhcnJheSdzIGl0ZW1zIHVzaW5nIGEgZGF0YSB0eXBlCisgICAgICAgICAqIHRoYXQgZml0cyBiZXR0ZXIuIFRoaXMgbWF5IHJlc3VsdCBpbiBhbiBhcnJheSB3aXRoIG5hcnJvd2VyCisgICAgICAgICAqIG9yIHdpZGVyIGVsZW1lbnRzLgorICAgICAgICAgKgorICAgICAgICAgKiBGb3IgZXhhbXBsZSwgaWYgYSAzMi1iaXQgbWFjaGluZSBwaWNrbGVzIGEgTC1jb2RlIGFycmF5IG9mCisgICAgICAgICAqIHVuc2lnbmVkIGxvbmdzLCB0aGVuIHRoZSBhcnJheSB3aWxsIGJlIHVucGlja2xlZCBieSA2NC1iaXQKKyAgICAgICAgICogbWFjaGluZSBhcyBhbiBJLWNvZGUgYXJyYXkgb2YgdW5zaWduZWQgaW50cy4KKyAgICAgICAgICoKKyAgICAgICAgICogWFhYOiBJcyBpdCBwb3NzaWJsZSB0byB3cml0ZSBhIHVuaXQgdGVzdCBmb3IgdGhpcz8KKyAgICAgICAgICovCisgICAgICAgIGZvciAoZGVzY3IgPSBkZXNjcmlwdG9yczsgZGVzY3ItPnR5cGVjb2RlICE9ICdcMCc7IGRlc2NyKyspIHsKKyAgICAgICAgICAgIGlmIChkZXNjci0+aXNfaW50ZWdlcl90eXBlICYmCisgICAgICAgICAgICAgICAgZGVzY3ItPml0ZW1zaXplID09IG1mX2Rlc2NyLnNpemUgJiYKKyAgICAgICAgICAgICAgICBkZXNjci0+aXNfc2lnbmVkID09IG1mX2Rlc2NyLmlzX3NpZ25lZCkKKyAgICAgICAgICAgICAgICB0eXBlY29kZSA9IGRlc2NyLT50eXBlY29kZTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnZlcnRlZF9pdGVtcyA9IFB5TGlzdF9OZXcoaXRlbWNvdW50KTsKKyAgICAgICAgaWYgKGNvbnZlcnRlZF9pdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVtY291bnQ7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnB5bG9uZzsKKworICAgICAgICAgICAgcHlsb25nID0gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KAorICAgICAgICAgICAgICAgICZtZW1zdHJbaSAqIG1mX2Rlc2NyLnNpemVdLAorICAgICAgICAgICAgICAgIG1mX2Rlc2NyLnNpemUsCisgICAgICAgICAgICAgICAgIW1mX2Rlc2NyLmlzX2JpZ19lbmRpYW4sCisgICAgICAgICAgICAgICAgbWZfZGVzY3IuaXNfc2lnbmVkKTsKKyAgICAgICAgICAgIGlmIChweWxvbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb252ZXJ0ZWRfaXRlbXMpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGNvbnZlcnRlZF9pdGVtcywgaSwgcHlsb25nKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBVTktOT1dOX0ZPUk1BVDoKKyAgICAgICAgLyogSW1wb3NzaWJsZSwgYnV0IG5lZWRlZCB0byBzaHV0IHVwIEdDQyBhYm91dCB0aGUgdW5oYW5kbGVkCisgICAgICAgICAqIGVudW1lcmF0aW9uIHZhbHVlLgorICAgICAgICAgKi8KKyAgICBkZWZhdWx0OgorICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBtYWtlX2FycmF5KGFycmF5dHlwZSwgdHlwZWNvZGUsIGNvbnZlcnRlZF9pdGVtcyk7CisgICAgUHlfREVDUkVGKGNvbnZlcnRlZF9pdGVtcyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2FycmF5X3JlZHVjZV9leChhcnJheW9iamVjdCAqYXJyYXksIFB5T2JqZWN0ICp2YWx1ZSkKK3sKKyAgICBQeU9iamVjdCAqZGljdDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICphcnJheV9zdHI7CisgICAgaW50IHR5cGVjb2RlID0gYXJyYXktPm9iX2Rlc2NyLT50eXBlY29kZTsKKyAgICBpbnQgbWZvcm1hdF9jb2RlOworICAgIHN0YXRpYyBQeU9iamVjdCAqYXJyYXlfcmVjb25zdHJ1Y3RvciA9IE5VTEw7CisgICAgbG9uZyBwcm90b2NvbDsKKworICAgIGlmIChhcnJheV9yZWNvbnN0cnVjdG9yID09IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKmFycmF5X21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiYXJyYXkiKTsKKyAgICAgICAgaWYgKGFycmF5X21vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGFycmF5X3JlY29uc3RydWN0b3IgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKAorICAgICAgICAgICAgYXJyYXlfbW9kdWxlLAorICAgICAgICAgICAgIl9hcnJheV9yZWNvbnN0cnVjdG9yIik7CisgICAgICAgIFB5X0RFQ1JFRihhcnJheV9tb2R1bGUpOworICAgICAgICBpZiAoYXJyYXlfcmVjb25zdHJ1Y3RvciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodmFsdWUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19yZWR1Y2VfZXhfXyBhcmd1bWVudCBzaG91bGQgYW4gaW50ZWdlciIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcHJvdG9jb2wgPSBQeUxvbmdfQXNMb25nKHZhbHVlKTsKKyAgICBpZiAocHJvdG9jb2wgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkaWN0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZygoUHlPYmplY3QgKilhcnJheSwgIl9fZGljdF9fIik7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgeworICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGRpY3QgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYoZGljdCk7CisgICAgfQorCisgICAgbWZvcm1hdF9jb2RlID0gdHlwZWNvZGVfdG9fbWZvcm1hdF9jb2RlKHR5cGVjb2RlKTsKKyAgICBpZiAobWZvcm1hdF9jb2RlID09IFVOS05PV05fRk9STUFUIHx8IHByb3RvY29sIDwgMykgeworICAgICAgICAvKiBDb252ZXJ0IHRoZSBhcnJheSB0byBhIGxpc3QgaWYgd2UgZ290IHNvbWV0aGluZyB3ZWlyZAorICAgICAgICAgKiAoZS5nLiwgbm9uLUlFRUUgZmxvYXRzKSwgb3Igd2UgYXJlIHBpY2tsaW5nIHRoZSBhcnJheSB1c2luZworICAgICAgICAgKiBhIFB5dGhvbiAyLnggY29tcGF0aWJsZSBwcm90b2NvbC4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQgaXMgbmVjZXNzYXJ5IHRvIHVzZSBhIGxpc3QgcmVwcmVzZW50YXRpb24gZm9yIFB5dGhvbiAyLngKKyAgICAgICAgICogY29tcGF0aWJsZSBwaWNrbGUgcHJvdG9jb2wsIHNpbmNlIFB5dGhvbiAyJ3Mgc3RyIG9iamVjdHMKKyAgICAgICAgICogYXJlIHVucGlja2xlZCBhcyB1bmljb2RlIGJ5IFB5dGhvbiAzLiBUaHVzIGl0IGlzIGltcG9zc2libGUKKyAgICAgICAgICogdG8gbWFrZSBhcnJheXMgdW5waWNrbGFibGUgYnkgUHl0aG9uIDMgYnkgdXNpbmcgdGhlaXIgbWVtb3J5CisgICAgICAgICAqIHJlcHJlc2VudGF0aW9uLCB1bmxlc3Mgd2UgcmVzb3J0IHRvIHVnbHkgaGFja3Mgc3VjaCBhcworICAgICAgICAgKiBjb2VyY2luZyB1bmljb2RlIG9iamVjdHMgdG8gYnl0ZXMgaW4gYXJyYXlfcmVjb25zdHJ1Y3Rvci4KKyAgICAgICAgICovCisgICAgICAgIFB5T2JqZWN0ICpsaXN0OworICAgICAgICBsaXN0ID0gYXJyYXlfdG9saXN0KGFycmF5LCBOVUxMKTsKKyAgICAgICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgKKyAgICAgICAgICAgICJPKENPKU8iLCBQeV9UWVBFKGFycmF5KSwgdHlwZWNvZGUsIGxpc3QsIGRpY3QpOworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBhcnJheV9zdHIgPSBhcnJheV90b2J5dGVzKGFycmF5LCBOVUxMKTsKKyAgICBpZiAoYXJyYXlfc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGRpY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlfQnVpbGRWYWx1ZSgKKyAgICAgICAgIk8oT0NpTilPIiwgYXJyYXlfcmVjb25zdHJ1Y3RvciwgUHlfVFlQRShhcnJheSksIHR5cGVjb2RlLAorICAgICAgICBtZm9ybWF0X2NvZGUsIGFycmF5X3N0ciwgZGljdCk7CisgICAgUHlfREVDUkVGKGRpY3QpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5RG9jX1NUUlZBUihyZWR1Y2VfZG9jLCAiUmV0dXJuIHN0YXRlIGluZm9ybWF0aW9uIGZvciBwaWNrbGluZy4iKTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2dldF90eXBlY29kZShhcnJheW9iamVjdCAqYSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjaGFyIHRjID0gYS0+b2JfZGVzY3ItPnR5cGVjb2RlOwotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoJnRjLCAxKTsKKyAgICBQeV9VTklDT0RFIHRjID0gYS0+b2JfZGVzY3ItPnR5cGVjb2RlOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoJnRjLCAxKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1MTcsNiArMjA0OSw4IEBACiAgICAgIGZyb21saXN0X2RvY30sCiAgICAgeyJmcm9tc3RyaW5nIiwgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfZnJvbXN0cmluZywgIE1FVEhfVkFSQVJHUywKICAgICAgZnJvbXN0cmluZ19kb2N9LAorICAgIHsiZnJvbWJ5dGVzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2Zyb21ieXRlcywgICBNRVRIX1ZBUkFSR1MsCisgICAgIGZyb21ieXRlc19kb2N9LAogICAgIHsiZnJvbXVuaWNvZGUiLCAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X2Zyb211bmljb2RlLCBNRVRIX1ZBUkFSR1MsCiAgICAgIGZyb211bmljb2RlX2RvY30sCiAgICAgeyJpbmRleCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfaW5kZXgsICAgICAgIE1FVEhfTywKQEAgLTE1MjUsOCArMjA1OSw4IEBACiAgICAgIGluc2VydF9kb2N9LAogICAgIHsicG9wIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3BvcCwgICAgICAgICBNRVRIX1ZBUkFSR1MsCiAgICAgIHBvcF9kb2N9LAotICAgIHsiX19yZWR1Y2VfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWFycmF5X3JlZHVjZSwgICAgICBNRVRIX05PQVJHUywKLSAgICAgYXJyYXlfZG9jfSwKKyAgICB7Il9fcmVkdWNlX2V4X18iLCAoUHlDRnVuY3Rpb24pYXJyYXlfcmVkdWNlX2V4LCAgICAgTUVUSF9PLAorICAgICByZWR1Y2VfZG9jfSwKICAgICB7InJlbW92ZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9yZW1vdmUsICAgICAgTUVUSF9PLAogICAgICByZW1vdmVfZG9jfSwKICAgICB7InJldmVyc2UiLCAgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV9yZXZlcnNlLCAgICAgTUVUSF9OT0FSR1MsCkBAIC0xNTM5LDYgKzIwNzMsOCBAQAogICAgICB0b2xpc3RfZG9jfSwKICAgICB7InRvc3RyaW5nIiwgICAgICAgIChQeUNGdW5jdGlvbilhcnJheV90b3N0cmluZywgICAgTUVUSF9OT0FSR1MsCiAgICAgIHRvc3RyaW5nX2RvY30sCisgICAgeyJ0b2J5dGVzIiwgICAgICAgICAoUHlDRnVuY3Rpb24pYXJyYXlfdG9ieXRlcywgICAgIE1FVEhfTk9BUkdTLAorICAgICB0b2J5dGVzX2RvY30sCiAgICAgeyJ0b3VuaWNvZGUiLCAgIChQeUNGdW5jdGlvbilhcnJheV90b3VuaWNvZGUsICAgICAgIE1FVEhfTk9BUkdTLAogICAgICB0b3VuaWNvZGVfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMTU0NywyMSArMjA4MywyMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X3JlcHIoYXJyYXlvYmplY3QgKmEpCiB7Ci0gICAgY2hhciB0eXBlY29kZTsKKyAgICBQeV9VTklDT0RFIHR5cGVjb2RlOwogICAgIFB5T2JqZWN0ICpzLCAqdiA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47CiAKICAgICBsZW4gPSBQeV9TSVpFKGEpOwogICAgIHR5cGVjb2RlID0gYS0+b2JfZGVzY3ItPnR5cGVjb2RlOwogICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImFycmF5KCclYycpIiwgdHlwZWNvZGUpOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImFycmF5KCclYycpIiwgKGludCl0eXBlY29kZSk7CiAgICAgfQogICAgIGlmICgodHlwZWNvZGUgPT0gJ3UnKSkKICAgICAgICAgdiA9IGFycmF5X3RvdW5pY29kZShhLCBOVUxMKTsKICAgICBlbHNlCiAgICAgICAgIHYgPSBhcnJheV90b2xpc3QoYSwgTlVMTCk7CiAKLSAgICBzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImFycmF5KCclYycsICVSKSIsIHR5cGVjb2RlLCB2KTsKKyAgICBzID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImFycmF5KCclYycsICVSKSIsIChpbnQpdHlwZWNvZGUsIHYpOwogICAgIFB5X0RFQ1JFRih2KTsKICAgICByZXR1cm4gczsKIH0KQEAgLTE1ODQsNyArMjEyMCw3IEBACiAgICAgICAgIGFycmF5b2JqZWN0KiBhcjsKICAgICAgICAgaW50IGl0ZW1zaXplID0gc2VsZi0+b2JfZGVzY3ItPml0ZW1zaXplOwogCi0gICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCopaXRlbSwgUHlfU0laRShzZWxmKSwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sIFB5X1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTY1NSw3ICsyMTkxLDcgQEAKICAgICAgICAgICAgIHJldHVybiAoKnNlbGYtPm9iX2Rlc2NyLT5zZXRpdGVtKShzZWxmLCBpLCB2YWx1ZSk7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0ICopaXRlbSwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpLCAmc3RhcnQsICZzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0xODY5LDcgKzI0MDUsOSBAQAogICAgICAgICAgIHx8IFB5Qnl0ZUFycmF5X0NoZWNrKGluaXRpYWwpCiAgICAgICAgICAgfHwgUHlCeXRlc19DaGVjayhpbml0aWFsKQogICAgICAgICAgIHx8IFB5VHVwbGVfQ2hlY2soaW5pdGlhbCkKLSAgICAgICAgICB8fCAoKGM9PSd1JykgJiYgUHlVbmljb2RlX0NoZWNrKGluaXRpYWwpKSkpIHsKKyAgICAgICAgICB8fCAoKGM9PSd1JykgJiYgUHlVbmljb2RlX0NoZWNrKGluaXRpYWwpKQorICAgICAgICAgIHx8IChhcnJheV9DaGVjayhpbml0aWFsKQorICAgICAgICAgICAgICAmJiBjID09ICgoYXJyYXlvYmplY3QqKWluaXRpYWwpLT5vYl9kZXNjci0+dHlwZWNvZGUpKSkgewogICAgICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaW5pdGlhbCk7CiAgICAgICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODg1LDE3ICsyNDIzLDIwIEBACiAgICAgICAgICAgICBQeU9iamVjdCAqYTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgICAgICAgICBpZiAoaW5pdGlhbCA9PSBOVUxMIHx8ICEoUHlMaXN0X0NoZWNrKGluaXRpYWwpCi0gICAgICAgICAgICAgICAgfHwgUHlUdXBsZV9DaGVjayhpbml0aWFsKSkpCisgICAgICAgICAgICBpZiAoaW5pdGlhbCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGxlbiA9IDA7CisgICAgICAgICAgICBlbHNlIGlmIChQeUxpc3RfQ2hlY2soaW5pdGlhbCkpCisgICAgICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKGluaXRpYWwpOworICAgICAgICAgICAgZWxzZSBpZiAoUHlUdXBsZV9DaGVjayhpbml0aWFsKSB8fCBhcnJheV9DaGVjayhpbml0aWFsKSkKKyAgICAgICAgICAgICAgICBsZW4gPSBQeV9TSVpFKGluaXRpYWwpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IFB5U2VxdWVuY2VfU2l6ZShpbml0aWFsKTsKKyAgICAgICAgICAgICAgICBsZW4gPSAwOwogCiAgICAgICAgICAgICBhID0gbmV3YXJyYXlvYmplY3QodHlwZSwgbGVuLCBkZXNjcik7CiAgICAgICAgICAgICBpZiAoYSA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgaWYgKGxlbiA+IDAgJiYgIWFycmF5X0NoZWNrKGluaXRpYWwpKSB7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdiA9CkBAIC0xOTIwLDcgKzI0NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2ID0gYXJyYXlfZnJvbXN0cmluZygoYXJyYXlvYmplY3QgKilhLAorICAgICAgICAgICAgICAgIHYgPSBhcnJheV9mcm9tYnl0ZXMoKGFycmF5b2JqZWN0ICopYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdF9pbml0aWFsKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodF9pbml0aWFsKTsKICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CkBAIC0xOTQ2LDYgKzI0ODcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi0+YWxsb2NhdGVkID0gUHlfU0laRShzZWxmKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsICE9IE5VTEwgJiYgYXJyYXlfQ2hlY2soaW5pdGlhbCkpIHsKKyAgICAgICAgICAgICAgICBhcnJheW9iamVjdCAqc2VsZiA9IChhcnJheW9iamVjdCAqKWE7CisgICAgICAgICAgICAgICAgYXJyYXlvYmplY3QgKm90aGVyID0gKGFycmF5b2JqZWN0ICopaW5pdGlhbDsKKyAgICAgICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfaXRlbSwgb3RoZXItPm9iX2l0ZW0sIGxlbiAqIG90aGVyLT5vYl9kZXNjci0+aXRlbXNpemUpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGl0ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlfaXRlcl9leHRlbmQoKGFycmF5b2JqZWN0ICopYSwgaXQpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CkBAIC0yMTY4LDYgKzI3MTQsOCBAQAogCiAvKiBObyBmdW5jdGlvbnMgaW4gYXJyYXkgbW9kdWxlLiAqLwogc3RhdGljIFB5TWV0aG9kRGVmIGFfbWV0aG9kc1tdID0geworICAgIHsiX2FycmF5X3JlY29uc3RydWN0b3IiLCBhcnJheV9yZWNvbnN0cnVjdG9yLCBNRVRIX1ZBUkFSR1MsCisgICAgIFB5RG9jX1NUUigiSW50ZXJuYWwuIFVzZWQgZm9yIHBpY2tsaW5nIHN1cHBvcnQuIil9LAogICAgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfSAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCmluZGV4IDEzODIxMzMuLjFlZTdlYWQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYwpAQCAtNzIsNiArNzIsNyBAQAogICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4Y190eXBlLCAmZXhjX3ZhbHVlLCAmZXhjX3RiKTsKICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TeXN0ZW1FeGl0KSkgewogICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJFcnJvciBpbiBhdGV4aXQuX3J1bl9leGl0ZnVuY3M6XG4iKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJmV4Y190eXBlLCAmZXhjX3ZhbHVlLCAmZXhjX3RiKTsKICAgICAgICAgICAgICAgICBQeUVycl9EaXNwbGF5KGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190Yik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvYXVkaW9vcC5jIGIvTW9kdWxlcy9hdWRpb29wLmMKaW5kZXggY2UzZmNlMy4uYTAzMWQ0MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hdWRpb29wLmMKKysrIGIvTW9kdWxlcy9hdWRpb29wLmMKQEAgLTEsNiArMSw4IEBACiAKIC8qIGF1ZGlvb3Btb2R1bGUgLSBNb2R1bGUgdG8gZGV0ZWN0IHBlYWsgdmFsdWVzIGluIGFycmF5cyAqLwogCisjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KKwogI2luY2x1ZGUgIlB5dGhvbi5oIgogCiAjaWYgU0laRU9GX0lOVCA9PSA0CkBAIC0zMDcsNyArMzA5LDcgQEAKIH0KIAogc3RhdGljIGludAotYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGludCBsZW4sIGludCBzaXplKQorYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKFB5X3NzaXplX3QgbGVuLCBpbnQgc2l6ZSkKIHsKICAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMjIsMTAgKzMyNCwxMCBAQAogYXVkaW9vcF9nZXRzYW1wbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOwotICAgIGludCBpOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwgPSAwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpnZXRzYW1wbGUiLCAmY3AsICZsZW4sICZzaXplLCAmaSkgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaW46Z2V0c2FtcGxlIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmkpICkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNDMsOCArMzQ1LDggQEAKIGF1ZGlvb3BfbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbiwgc2l6ZSwgdmFsID0gMDsKLSAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsID0gMDsKICAgICBpbnQgbWF4ID0gMDsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXgiLCAmY3AsICZsZW4sICZzaXplKSApCkBAIC0zNjUsOCArMzY3LDggQEAKIGF1ZGlvb3BfbWlubWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgaW50IGxlbiwgc2l6ZSwgdmFsID0gMDsKLSAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsID0gMDsKICAgICBpbnQgbWluID0gMHg3ZmZmZmZmZiwgbWF4ID0gLTB4N2ZmZmZmZmY7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptaW5tYXgiLCAmY3AsICZsZW4sICZzaXplKSkKQEAgLTM4Nyw4ICszODksOCBAQAogYXVkaW9vcF9hdmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOwotICAgIGludCBpOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwgPSAwOwogICAgIGRvdWJsZSBhdmcgPSAwLjA7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YXZnIiwgJmNwLCAmbGVuLCAmc2l6ZSkgKQpAQCAtNDEyLDggKzQxNCw4IEBACiBhdWRpb29wX3JtcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIGludCBsZW4sIHNpemUsIHZhbCA9IDA7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbCA9IDA7CiAgICAgZG91YmxlIHN1bV9zcXVhcmVzID0gMC4wOwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOnJtcyIsICZjcCwgJmxlbiwgJnNpemUpICkKQEAgLTQzMyw5ICs0MzUsOSBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsKTsKIH0KIAotc3RhdGljIGRvdWJsZSBfc3VtMihzaG9ydCAqYSwgc2hvcnQgKmIsIGludCBsZW4pCitzdGF0aWMgZG91YmxlIF9zdW0yKHNob3J0ICphLCBzaG9ydCAqYiwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAKICAgICBmb3IoIGk9MDsgaTxsZW47IGkrKykgewpAQCAtNDgwLDggKzQ4Miw4IEBACiBhdWRpb29wX2ZpbmRmaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNob3J0ICpjcDEsICpjcDI7Ci0gICAgaW50IGxlbjEsIGxlbjI7Ci0gICAgaW50IGosIGJlc3RfajsKKyAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CisgICAgUHlfc3NpemVfdCBqLCBiZXN0X2o7CiAgICAgZG91YmxlIGFqX20xLCBhal9sbTE7CiAgICAgZG91YmxlIHN1bV9yaV8yLCBzdW1fYWlqXzIsIHN1bV9haWpfcmksIHJlc3VsdCwgYmVzdF9yZXN1bHQsIGZhY3RvcjsKIApAQCAtNTMyLDcgKzUzNCw3IEBACiAKICAgICBmYWN0b3IgPSBfc3VtMihjcDErYmVzdF9qLCBjcDIsIGxlbjIpIC8gc3VtX3JpXzI7CiAKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlmKSIsIGJlc3RfaiwgZmFjdG9yKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKG5mKSIsIGJlc3RfaiwgZmFjdG9yKTsKIH0KIAogLyoKQEAgLTU0Myw3ICs1NDUsNyBAQAogYXVkaW9vcF9maW5kZmFjdG9yKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaG9ydCAqY3AxLCAqY3AyOwotICAgIGludCBsZW4xLCBsZW4yOworICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfcmksIHJlc3VsdDsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZhY3RvciIsCkBAIC01NzQsMTIgKzU3NiwxMiBAQAogYXVkaW9vcF9maW5kbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaG9ydCAqY3AxOwotICAgIGludCBsZW4xLCBsZW4yOwotICAgIGludCBqLCBiZXN0X2o7CisgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOworICAgIFB5X3NzaXplX3QgaiwgYmVzdF9qOwogICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgIGRvdWJsZSByZXN1bHQsIGJlc3RfcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmZpbmRtYXgiLAorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjbjpmaW5kbWF4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsICZsZW4yKSApCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICggbGVuMSAmIDEgKSB7CkBAIC02MTIsMTYgKzYxNCwxNiBAQAogCiAgICAgfQogCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhiZXN0X2opOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoYmVzdF9qKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGF1ZGlvb3BfYXZncHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbCA9IDAsIHByZXZ2YWwgPSAwLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKICAgICAgICAgcHJldmV4dHJlbWUgPSAwOwotICAgIGludCBpOwogICAgIGRvdWJsZSBhdmcgPSAwLjA7CiAgICAgaW50IGRpZmYsIHByZXZkaWZmLCBleHRyZW1lZGlmZiwgbmV4dHJlbWUgPSAwOwogCkBAIC02NzQsOSArNjc2LDkgQEAKIGF1ZGlvb3BfbWF4cHAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwLCBwcmV2dmFsID0gMCwgcHJldmV4dHJlbWV2YWxpZCA9IDAsCisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbCA9IDAsIHByZXZ2YWwgPSAwLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwKICAgICAgICAgcHJldmV4dHJlbWUgPSAwOwotICAgIGludCBpOwogICAgIGludCBtYXggPSAwOwogICAgIGludCBkaWZmLCBwcmV2ZGlmZiwgZXh0cmVtZWRpZmY7CiAKQEAgLTcyNSw5ICs3MjcsMTAgQEAKIGF1ZGlvb3BfY3Jvc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOwotICAgIGludCBpOwotICAgIGludCBwcmV2dmFsLCBuY3Jvc3M7CisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgaW50IHByZXZ2YWw7CisgICAgUHlfc3NpemVfdCBuY3Jvc3M7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6Y3Jvc3MiLCAmY3AsICZsZW4sICZzaXplKSApCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzQzLDE3ICs3NDYsMTcgQEAKICAgICAgICAgaWYgKCB2YWwgIT0gcHJldnZhbCApIG5jcm9zcysrOwogICAgICAgICBwcmV2dmFsID0gdmFsOwogICAgIH0KLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG5jcm9zcyk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuY3Jvc3MpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogYXVkaW9vcF9tdWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwgPSAwOwogICAgIGRvdWJsZSBmYWN0b3IsIGZ2YWwsIG1heHZhbDsKICAgICBQeU9iamVjdCAqcnY7Ci0gICAgaW50IGk7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lkOm11bCIsICZjcCwgJmxlbiwgJnNpemUsICZmYWN0b3IgKSApCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzk0LDEwICs3OTcsMTAgQEAKIHsKICAgICBQeV9idWZmZXIgcGNwOwogICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMDsKICAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaTsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqaWRkOnRvbW9ubyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNwLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQpAQCAtODU0LDEwICs4NTcsMTAgQEAKIGF1ZGlvb3BfdG9zdGVyZW8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwxLCB2YWwyLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwxLCB2YWwyLCB2YWwgPSAwOwogICAgIGRvdWJsZSBmYWMxLCBmYWMyLCBmdmFsLCBtYXh2YWw7CiAgICAgUHlPYmplY3QgKnJ2OwotICAgIGludCBpOwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZGQ6dG9zdGVyZW8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJmZhYzEsICZmYWMyICkgKQpAQCAtODczLDcgKzg3Niw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmIChsZW4gPiBJTlRfTUFYLzIpIHsKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC05MTUsOSArOTE4LDkgQEAKIGF1ZGlvb3BfYWRkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBzaWduZWQgY2hhciAqY3AxLCAqY3AyLCAqbmNwOwotICAgIGludCBsZW4xLCBsZW4yLCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDAsIG1heHZhbCwgbmV3dmFsOworICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsMSA9IDAsIHZhbDIgPSAwLCBtYXh2YWwsIG5ld3ZhbDsKICAgICBQeU9iamVjdCAqcnY7Ci0gICAgaW50IGk7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjaTphZGQiLAogICAgICAgICAgICAgICAgICAgICAgICZjcDEsICZsZW4xLCAmY3AyLCAmbGVuMiwgJnNpemUgKSApCkBAIC05NjksOSArOTcyLDkgQEAKIGF1ZGlvb3BfYmlhcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIGludCBsZW4sIHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4sIGk7CisgICAgaW50IHNpemUsIHZhbCA9IDA7CiAgICAgUHlPYmplY3QgKnJ2OwotICAgIGludCBpOwogICAgIGludCBiaWFzOwogCiAgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaTpiaWFzIiwKQEAgLTEwMDQsOSArMTAwNyw5IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOworICAgIGludCBzaXplLCB2YWwgPSAwOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaSwgajsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpyZXZlcnNlIiwKICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCkBAIC0xMDM5LDkgKzEwNDIsOSBAQAogewogICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgaW50IGxlbiwgc2l6ZSwgc2l6ZTIsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4sIGksIGo7CisgICAgaW50IHNpemUsIHNpemUyLCB2YWwgPSAwOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaSwgajsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6bGluMmxpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnNpemUyKSApCkBAIC0xMDUyLDcgKzEwNTUsNyBAQAogICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuL3NpemUgPiBJTlRfTUFYL3NpemUyKSB7CisgICAgaWYgKGxlbi9zaXplID4gUFlfU1NJWkVfVF9NQVgvc2l6ZTIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTA4OSw3ICsxMDkyLDggQEAKIGF1ZGlvb3BfcmF0ZWN2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpjcCwgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgd2VpZ2h0QSwgd2VpZ2h0QjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgc2l6ZSwgbmNoYW5uZWxzLCBpbnJhdGUsIG91dHJhdGUsIHdlaWdodEEsIHdlaWdodEI7CiAgICAgaW50IGNoYW4sIGQsICpwcmV2X2ksICpjdXJfaSwgY3VyX287CiAgICAgUHlPYmplY3QgKnN0YXRlLCAqc2FtcHMsICpzdHIsICpydiA9IE5VTEw7CiAgICAgaW50IGJ5dGVzX3Blcl9mcmFtZTsKQEAgLTExODAsOCArMTE4NCw4IEBACiAgICAgICAgICAgIGNhc2UgY2VpbGluZyhsZW4vaW5yYXRlKSAqIG91dHJhdGUuICovCiAKICAgICAgICAgLyogY29tcHV0ZSBjZWlsaW5nKGxlbi9pbnJhdGUpIHdpdGhvdXQgb3ZlcmZsb3cgKi8KLSAgICAgICAgaW50IHEgPSBsZW4gPiAwID8gMSArIChsZW4gLSAxKSAvIGlucmF0ZSA6IDA7Ci0gICAgICAgIGlmIChvdXRyYXRlID4gSU5UX01BWCAvIHEgLyBieXRlc19wZXJfZnJhbWUpCisgICAgICAgIFB5X3NzaXplX3QgcSA9IGxlbiA+IDAgPyAxICsgKGxlbiAtIDEpIC8gaW5yYXRlIDogMDsKKyAgICAgICAgaWYgKG91dHJhdGUgPiBQWV9TU0laRV9UX01BWCAvIHEgLyBieXRlc19wZXJfZnJhbWUpCiAgICAgICAgICAgICBzdHIgPSBOVUxMOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCkBAIC0xMjEwLDcgKzEyMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICAgICAgLyogV2UgaGF2ZSBjaGVja2VkIGJlZm9yZSB0aGF0IHRoZSBsZW5ndGgKICAgICAgICAgICAgICAgICAgKiBvZiB0aGUgc3RyaW5nIGZpdHMgaW50byBpbnQuICovCi0gICAgICAgICAgICAgICAgbGVuID0gKGludCkobmNwIC0gUHlCeXRlc19Bc1N0cmluZyhzdHIpKTsKKyAgICAgICAgICAgICAgICBsZW4gPSAoUHlfc3NpemVfdCkobmNwIC0gUHlCeXRlc19Bc1N0cmluZyhzdHIpKTsKICAgICAgICAgICAgICAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKICAgICAgICAgICAgICAgICAgICAgKFB5Qnl0ZXNfQXNTdHJpbmcoc3RyKSwgbGVuKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKQEAgLTEyNjksOSArMTI3Myw5IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwgPSAwOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaTsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4ydWxhdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCkBAIC0xMzAxLDkgKzEzMDUsOSBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIGludCBsZW4sIHNpemUsIHZhbDsKKyAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaTsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTp1bGF3MmxpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCkBAIC0xMzEyLDcgKzEzMTYsNyBAQAogICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IElOVF9NQVgvc2l6ZSkgeworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTEzMzgsOSArMTM0Miw5IEBACiB7CiAgICAgc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWwgPSAwOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaTsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4yYWxhdyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCkBAIC0xMzcwLDkgKzEzNzQsOSBAQAogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwogICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIGludCBsZW4sIHNpemUsIHZhbDsKKyAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsOwogICAgIFB5T2JqZWN0ICpydjsKLSAgICBpbnQgaTsKIAogICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphbGF3MmxpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCkBAIC0xMzgxLDcgKzEzODUsNyBAQAogICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbiA+IElOVF9NQVgvc2l6ZSkgeworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19NZW1vcnlFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3Igb3V0cHV0IGJ1ZmZlciIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE0MDcsMTAgKzE0MTEsMTEgQEAKIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBpbnQgbGVuLCBzaXplLCB2YWwgPSAwLCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKKyAgICBQeV9zc2l6ZV90IGxlbiwgaTsKKyAgICBpbnQgc2l6ZSwgdmFsID0gMCwgc3RlcCwgdmFscHJlZCwgZGVsdGEsCiAgICAgICAgIGluZGV4LCBzaWduLCB2cGRpZmYsIGRpZmY7CiAgICAgUHlPYmplY3QgKnJ2LCAqc3RhdGUsICpzdHI7Ci0gICAgaW50IGksIG91dHB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CisgICAgaW50IG91dHB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmxpbjJhZHBjbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKQEAgLTE1MTMsOSArMTUxOCwxMCBAQAogewogICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIGludCBsZW4sIHNpemUsIHZhbHByZWQsIHN0ZXAsIGRlbHRhLCBpbmRleCwgc2lnbiwgdnBkaWZmOworICAgIFB5X3NzaXplX3QgbGVuLCBpOworICAgIGludCBzaXplLCB2YWxwcmVkLCBzdGVwLCBkZWx0YSwgaW5kZXgsIHNpZ24sIHZwZGlmZjsKICAgICBQeU9iamVjdCAqcnYsICpzdHIsICpzdGF0ZTsKLSAgICBpbnQgaSwgaW5wdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOworICAgIGludCBpbnB1dGJ1ZmZlciA9IDAsIGJ1ZmZlcnN0ZXA7CiAKICAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lPOmFkcGNtMmxpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplLCAmc3RhdGUpICkKQEAgLTE1MzMsNyArMTUzOSw3IEBACiAgICAgfSBlbHNlIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobGVuID4gKElOVF9NQVgvMikvc2l6ZSkgeworICAgIGlmIChsZW4gPiAoUFlfU1NJWkVfVF9NQVgvMikvc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2JpbmFzY2lpLmMgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKaW5kZXggNjg5ZDEzMi4uMDFlODg2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtNTM3LDYgKzUzNyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC01NDUsMTkgKzU0NiwyNSBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGludCBkb25lID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInQjOmEyYl9ocXgiLCAmYXNjaWlfZGF0YSwgJmxlbikgKQorICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmEyYl9ocXgiLCAmcGFzY2lpKSApCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOworICAgIGxlbiA9IHBhc2NpaS5sZW47CiAKICAgICBhc3NlcnQobGVuID49IDApOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gMikKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgc3RyaW5nIHRoYXQgaXMgdG9vIGJpZyAoZml4ZWQgbGF0ZXIpCiAgICAgICAgQWRkIHR3byB0byB0aGUgaW5pdGlhbCBsZW5ndGggdG8gcHJldmVudCBpbnRlcm5pbmcgd2hpY2gKICAgICAgICB3b3VsZCBwcmVjbHVkZSBzdWJzZXF1ZW50IHJlc2l6aW5nLiAgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbisyKSkgPT0gTlVMTCApCisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGxlbiA+IDAgOyBsZW4tLSwgYXNjaWlfZGF0YSsrICkgewpAQCAtNTY3LDYgKzU3NCw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCB0aGlzX2NoID09IEZBSUwgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbGxlZ2FsIGNoYXIiKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTU4OSw2ICs1OTcsNyBAQAogICAgIGlmICggbGVmdGJpdHMgJiYgIWRvbmUgKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBoYXMgaW5jb21wbGV0ZSBudW1iZXIgb2YgYnl0ZXMiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNjAwLDEwICs2MDksMTIgQEAKICAgICB9CiAgICAgaWYgKHJ2KSB7CiAgICAgICAgIFB5T2JqZWN0ICpycnYgPSBQeV9CdWlsZFZhbHVlKCJPaSIsIHJ2LCBkb25lKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIHJydjsKICAgICB9CiAKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC03MzksNyArNzUwLDcgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBpbl9sZW4sIG91dF9sZW4sIG91dF9sZW5fbGVmdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMqOnJsZWRlY29kZV9ocXgiLCAmcGluKSApCisgICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6cmxlZGVjb2RlX2hxeCIsICZwaW4pICkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaW5fZGF0YSA9IHBpbi5idWY7CiAgICAgaW5fbGVuID0gcGluLmxlbjsKQEAgLTExMTAsNyArMTEyMSw3IEBACiAgICAgY2hhciogcmV0YnVmOwogICAgIFB5X3NzaXplX3QgaSwgajsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyo6YTJiX2hleCIsICZwYXJnKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmEyYl9oZXgiLCAmcGFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGFyZ2J1ZiA9IHBhcmcuYnVmOwogICAgIGFyZ2xlbiA9IHBhcmcubGVuOwpAQCAtMTE4OCw3ICsxMTk5LDcgQEAKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImRhdGEiLCAiaGVhZGVyIiwgTlVMTH07CiAgICAgaW50IGhlYWRlciA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzKnxpIiwga3dsaXN0LCAmcGRhdGEsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aSIsIGt3bGlzdCwgJnBkYXRhLAogICAgICAgICAgICZoZWFkZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkYXRhID0gcGRhdGEuYnVmOwpAQCAtMTMyNiw4ICsxMzM3LDcgQEAKICAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1x0JyB8fCBkYXRhW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8CiAgICAgICAgICAgICAoKGRhdGFbaW5dIDwgMzMpICYmCiAgICAgICAgICAgICAgKGRhdGFbaW5dICE9ICdccicpICYmIChkYXRhW2luXSAhPSAnXG4nKSAmJgotICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwKLSAgICAgICAgICAgICghcXVvdGV0YWJzICYmICgoZGF0YVtpbl0gIT0gJ1x0JykgJiYgKGRhdGFbaW5dICE9ICcgJykpKSkpKQorICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwgKChkYXRhW2luXSAhPSAnXHQnKSAmJiAoZGF0YVtpbl0gIT0gJyAnKSkpKSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKChsaW5lbGVuICsgMykgPj0gTUFYTElORVNJWkUpIHsKICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvYnoybW9kdWxlLmMgYi9Nb2R1bGVzL2J6Mm1vZHVsZS5jCmluZGV4IGY0MTg5NjkuLjNlNTUyMDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvYnoybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9iejJtb2R1bGUuYwpAQCAtMTIwNiwxMCArMTIwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbXByZXNzbGV2ZWwpKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBpZiAoUHlCeXRlc19DaGVjayhuYW1lX29iaikpCi0gICAgICAgIG5hbWUgPSBQeUJ5dGVzX0FzU3RyaW5nKG5hbWVfb2JqKTsKLSAgICBlbHNlCi0gICAgICAgIG5hbWUgPSBQeUJ5dGVBcnJheV9Bc1N0cmluZyhuYW1lX29iaik7CisgICAgbmFtZSA9IFB5Qnl0ZXNfQXNTdHJpbmcobmFtZV9vYmopOwogICAgIGlmIChjb21wcmVzc2xldmVsIDwgMSB8fCBjb21wcmVzc2xldmVsID4gOSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wcmVzc2xldmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5Iik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NtYXRobW9kdWxlLmMgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKaW5kZXggNTkyYjRlYS4uMzAyMWNmMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvY21hdGhtb2R1bGUuYwpAQCAtMyw2ICszLDcgQEAKIC8qIG11Y2ggY29kZSBib3Jyb3dlZCBmcm9tIG1hdGhtb2R1bGUuYyAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAiX21hdGguaCIKIC8qIHdlIG5lZWQgREJMX01BWCwgREJMX01JTiwgREJMX0VQU0lMT04sIERCTF9NQU5UX0RJRyBhbmQgRkxUX1JBRElYIGZyb20KICAgIGZsb2F0LmguICBXZSBhc3N1bWUgdGhhdCBGTFRfUkFESVggaXMgZWl0aGVyIDIgb3IgMTYuICovCiAjaW5jbHVkZSA8ZmxvYXQuaD4KQEAgLTE0OSw3ICsxNTAsNyBAQAogICAgICAgICBzMi5pbWFnID0gei5pbWFnOwogICAgICAgICBzMiA9IGNfc3FydChzMik7CiAgICAgICAgIHIucmVhbCA9IDIuKmF0YW4yKHMxLnJlYWwsIHMyLnJlYWwpOwotICAgICAgICByLmltYWcgPSBhc2luaChzMi5yZWFsKnMxLmltYWcgLSBzMi5pbWFnKnMxLnJlYWwpOworICAgICAgICByLmltYWcgPSBtX2FzaW5oKHMyLnJlYWwqczEuaW1hZyAtIHMyLmltYWcqczEucmVhbCk7CiAgICAgfQogICAgIGVycm5vID0gMDsKICAgICByZXR1cm4gcjsKQEAgLTE4MSw3ICsxODIsNyBAQAogICAgICAgICBzMi5yZWFsID0gei5yZWFsICsgMS47CiAgICAgICAgIHMyLmltYWcgPSB6LmltYWc7CiAgICAgICAgIHMyID0gY19zcXJ0KHMyKTsKLSAgICAgICAgci5yZWFsID0gYXNpbmgoczEucmVhbCpzMi5yZWFsICsgczEuaW1hZypzMi5pbWFnKTsKKyAgICAgICAgci5yZWFsID0gbV9hc2luaChzMS5yZWFsKnMyLnJlYWwgKyBzMS5pbWFnKnMyLmltYWcpOwogICAgICAgICByLmltYWcgPSAyLiphdGFuMihzMS5pbWFnLCBzMi5yZWFsKTsKICAgICB9CiAgICAgZXJybm8gPSAwOwpAQCAtMjM4LDcgKzIzOSw3IEBACiAgICAgICAgIHMyLnJlYWwgPSAxLi16LmltYWc7CiAgICAgICAgIHMyLmltYWcgPSB6LnJlYWw7CiAgICAgICAgIHMyID0gY19zcXJ0KHMyKTsKLSAgICAgICAgci5yZWFsID0gYXNpbmgoczEucmVhbCpzMi5pbWFnLXMyLnJlYWwqczEuaW1hZyk7CisgICAgICAgIHIucmVhbCA9IG1fYXNpbmgoczEucmVhbCpzMi5pbWFnLXMyLnJlYWwqczEuaW1hZyk7CiAgICAgICAgIHIuaW1hZyA9IGF0YW4yKHouaW1hZywgczEucmVhbCpzMi5yZWFsLXMxLmltYWcqczIuaW1hZyk7CiAgICAgfQogICAgIGVycm5vID0gMDsKQEAgLTM0Miw3ICszNDMsNyBAQAogICAgICAgICAgICAgZXJybm8gPSAwOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgci5yZWFsID0gbG9nMXAoNC4qei5yZWFsLygoMS16LnJlYWwpKigxLXoucmVhbCkgKyBheSpheSkpLzQuOworICAgICAgICByLnJlYWwgPSBtX2xvZzFwKDQuKnoucmVhbC8oKDEtei5yZWFsKSooMS16LnJlYWwpICsgYXkqYXkpKS80LjsKICAgICAgICAgci5pbWFnID0gLWF0YW4yKC0yLip6LmltYWcsICgxLXoucmVhbCkqKDErei5yZWFsKSAtIGF5KmF5KS8yLjsKICAgICAgICAgZXJybm8gPSAwOwogICAgIH0KQEAgLTU1Miw3ICs1NTMsNyBAQAogICAgICAgICBpZiAoMC43MSA8PSBoICYmIGggPD0gMS43MykgewogICAgICAgICAgICAgYW0gPSBheCA+IGF5ID8gYXggOiBheTsgIC8qIG1heChheCwgYXkpICovCiAgICAgICAgICAgICBhbiA9IGF4ID4gYXkgPyBheSA6IGF4OyAgLyogbWluKGF4LCBheSkgKi8KLSAgICAgICAgICAgIHIucmVhbCA9IGxvZzFwKChhbS0xKSooYW0rMSkrYW4qYW4pLzIuOworICAgICAgICAgICAgci5yZWFsID0gbV9sb2cxcCgoYW0tMSkqKGFtKzEpK2FuKmFuKS8yLjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHIucmVhbCA9IGxvZyhoKTsKICAgICAgICAgfQpAQCAtMTAyMyw2ICsxMDI0LDE5IEBACiBDb252ZXJ0IGZyb20gcG9sYXIgY29vcmRpbmF0ZXMgdG8gcmVjdGFuZ3VsYXIgY29vcmRpbmF0ZXMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCitjbWF0aF9pc2Zpbml0ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfY29tcGxleCB6OworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRDppc2Zpbml0ZSIsICZ6KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhQeV9JU19GSU5JVEUoei5yZWFsKSAmJiBQeV9JU19GSU5JVEUoei5pbWFnKSk7Cit9CisKK1B5RG9jX1NUUlZBUihjbWF0aF9pc2Zpbml0ZV9kb2MsCisiaXNmaW5pdGUoeikgLT4gYm9vbFxuXAorUmV0dXJuIFRydWUgaWYgYm90aCB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHogYXJlIGZpbml0ZSwgZWxzZSBGYWxzZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKIGNtYXRoX2lzbmFuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9jb21wbGV4IHo7CkBAIC0xMDY0LDYgKzEwNzgsNyBAQAogICAgIHsiY29zIiwgICAgY21hdGhfY29zLCAgIE1FVEhfVkFSQVJHUywgY19jb3NfZG9jfSwKICAgICB7ImNvc2giLCAgIGNtYXRoX2Nvc2gsICBNRVRIX1ZBUkFSR1MsIGNfY29zaF9kb2N9LAogICAgIHsiZXhwIiwgICAgY21hdGhfZXhwLCAgIE1FVEhfVkFSQVJHUywgY19leHBfZG9jfSwKKyAgICB7ImlzZmluaXRlIiwgY21hdGhfaXNmaW5pdGUsIE1FVEhfVkFSQVJHUywgY21hdGhfaXNmaW5pdGVfZG9jfSwKICAgICB7ImlzaW5mIiwgIGNtYXRoX2lzaW5mLCBNRVRIX1ZBUkFSR1MsIGNtYXRoX2lzaW5mX2RvY30sCiAgICAgeyJpc25hbiIsICBjbWF0aF9pc25hbiwgTUVUSF9WQVJBUkdTLCBjbWF0aF9pc25hbl9kb2N9LAogICAgIHsibG9nIiwgICAgY21hdGhfbG9nLCAgIE1FVEhfVkFSQVJHUywgY21hdGhfbG9nX2RvY30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NvbmZpZy5jLmluIGIvTW9kdWxlcy9jb25maWcuYy5pbgppbmRleCAzZmI1ZGQzLi4zNGQ0NGQ1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2NvbmZpZy5jLmluCisrKyBiL01vZHVsZXMvY29uZmlnLmMuaW4KQEAgLTI5LDYgKzI5LDcgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2djKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2FzdCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogX1B5V2FybmluZ3NfSW5pdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zdHJpbmcodm9pZCk7CiAKIHN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdID0gewogCkBAIC01NCw2ICs1NSw5IEBACiAgICAgLyogVGhpcyBsaXZlcyBpbiBfd2FybmluZ3MuYyAqLwogICAgIHsiX3dhcm5pbmdzIiwgX1B5V2FybmluZ3NfSW5pdH0sCiAKKyAgICAvKiBUaGlzIGxpdmVzIGluIE9iamVjdHMvdW5pY29kZW9iamVjdC5jICovCisgICAgeyJfc3RyaW5nIiwgUHlJbml0X19zdHJpbmd9LAorCiAgICAgLyogU2VudGluZWwgKi8KICAgICB7MCwgMH0KIH07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Vycm5vbW9kdWxlLmMgYi9Nb2R1bGVzL2Vycm5vbW9kdWxlLmMKaW5kZXggMDNjNjVmNy4uODY3MjBhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9lcnJub21vZHVsZS5jCisrKyBiL01vZHVsZXMvZXJybm9tb2R1bGUuYwpAQCAtODIsNyArODIsOCBAQAogCiAgICAgLyoKICAgICAgKiBUaGUgbmFtZXMgYW5kIGNvbW1lbnRzIGFyZSBib3Jyb3dlZCBmcm9tIGxpbnV4L2luY2x1ZGUvZXJybm8uaCwKLSAgICAgKiB3aGljaCBzaG91bGQgYmUgcHJldHR5IGFsbC1pbmNsdXNpdmUKKyAgICAgKiB3aGljaCBzaG91bGQgYmUgcHJldHR5IGFsbC1pbmNsdXNpdmUuICBIb3dldmVyLCB0aGUgU29sYXJpcyBzcGVjaWZpYworICAgICAqIG5hbWVzIGFuZCBjb21tZW50cyBhcmUgYm9ycm93ZWQgZnJvbSBzeXMvZXJybm8uaCBpbiBTb2xhcmlzLgogICAgICAqLwogCiAjaWZkZWYgRU5PREVWCkBAIC03OTYsNiArNzk3LDU2IEBACiAjaWZkZWYgV1NBTgogICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiV1NBTiIsIFdTQU4sICJFcnJvciBXU0FOIik7CiAjZW5kaWYKKyNpZmRlZiBFTk9NRURJVU0KKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVOT01FRElVTSIsIEVOT01FRElVTSwgIk5vIG1lZGl1bSBmb3VuZCIpOworI2VuZGlmCisjaWZkZWYgRU1FRElVTVRZUEUKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVNRURJVU1UWVBFIiwgRU1FRElVTVRZUEUsICJXcm9uZyBtZWRpdW0gdHlwZSIpOworI2VuZGlmCisjaWZkZWYgRUNBTkNFTEVECisgICAgaW5zY29kZShkLCBkcywgZGUsICJFQ0FOQ0VMRUQiLCBFQ0FOQ0VMRUQsICJPcGVyYXRpb24gQ2FuY2VsZWQiKTsKKyNlbmRpZgorI2lmZGVmIEVOT0tFWQorICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiRU5PS0VZIiwgRU5PS0VZLCAiUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUiKTsKKyNlbmRpZgorI2lmZGVmIEVLRVlFWFBJUkVECisgICAgaW5zY29kZShkLCBkcywgZGUsICJFS0VZRVhQSVJFRCIsIEVLRVlFWFBJUkVELCAiS2V5IGhhcyBleHBpcmVkIik7CisjZW5kaWYKKyNpZmRlZiBFS0VZUkVWT0tFRAorICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiRUtFWVJFVk9LRUQiLCBFS0VZUkVWT0tFRCwgIktleSBoYXMgYmVlbiByZXZva2VkIik7CisjZW5kaWYKKyNpZmRlZiBFS0VZUkVKRUNURUQKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVLRVlSRUpFQ1RFRCIsIEVLRVlSRUpFQ1RFRCwgIktleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSIpOworI2VuZGlmCisjaWZkZWYgRU9XTkVSREVBRAorICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiRU9XTkVSREVBRCIsIEVPV05FUkRFQUQsICJPd25lciBkaWVkIik7CisjZW5kaWYKKyNpZmRlZiBFTk9UUkVDT1ZFUkFCTEUKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVOT1RSRUNPVkVSQUJMRSIsIEVOT1RSRUNPVkVSQUJMRSwgIlN0YXRlIG5vdCByZWNvdmVyYWJsZSIpOworI2VuZGlmCisjaWZkZWYgRVJGS0lMTAorICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiRVJGS0lMTCIsIEVSRktJTEwsICJPcGVyYXRpb24gbm90IHBvc3NpYmxlIGR1ZSB0byBSRi1raWxsIik7CisjZW5kaWYKKworICAgIC8qIFNvbGFyaXMtc3BlY2lmaWMgZXJybm9zICovCisjaWZkZWYgRUNBTkNFTEVECisgICAgaW5zY29kZShkLCBkcywgZGUsICJFQ0FOQ0VMRUQiLCBFQ0FOQ0VMRUQsICJPcGVyYXRpb24gY2FuY2VsZWQiKTsKKyNlbmRpZgorI2lmZGVmIEVOT1RTVVAKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVOT1RTVVAiLCBFTk9UU1VQLCAiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQiKTsKKyNlbmRpZgorI2lmZGVmIEVPV05FUkRFQUQKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVPV05FUkRFQUQiLCBFT1dORVJERUFELCAiUHJvY2VzcyBkaWVkIHdpdGggdGhlIGxvY2siKTsKKyNlbmRpZgorI2lmZGVmIEVOT1RSRUNPVkVSQUJMRQorICAgIGluc2NvZGUoZCwgZHMsIGRlLCAiRU5PVFJFQ09WRVJBQkxFIiwgRU5PVFJFQ09WRVJBQkxFLCAiTG9jayBpcyBub3QgcmVjb3ZlcmFibGUiKTsKKyNlbmRpZgorI2lmZGVmIEVMT0NLVU5NQVBQRUQKKyAgICBpbnNjb2RlKGQsIGRzLCBkZSwgIkVMT0NLVU5NQVBQRUQiLCBFTE9DS1VOTUFQUEVELCAiTG9ja2VkIGxvY2sgd2FzIHVubWFwcGVkIik7CisjZW5kaWYKKyNpZmRlZiBFTk9UQUNUSVZFCisgICAgaW5zY29kZShkLCBkcywgZGUsICJFTk9UQUNUSVZFIiwgRU5PVEFDVElWRSwgIkZhY2lsaXR5IGlzIG5vdCBhY3RpdmUiKTsKKyNlbmRpZgogCiAgICAgUHlfREVDUkVGKGRlKTsKICAgICByZXR1cm4gbTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2Ntb2R1bGUuYyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwppbmRleCAzNzE3YTI3Li4xMGE0ZWQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2djbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9nY21vZHVsZS5jCkBAIC0xMjk1LDE3ICsxMjk1LDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZ2Ntb2R1bGUgPSB7CiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICJnYyIsCi0gICAgZ2NfX2RvY19fLAotICAgIC0xLAotICAgIEdjTWV0aG9kcywKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgImdjIiwgICAgICAgICAgICAgIC8qIG1fbmFtZSAqLworICAgIGdjX19kb2NfXywgICAgICAgICAvKiBtX2RvYyAqLworICAgIC0xLCAgICAgICAgICAgICAgICAvKiBtX3NpemUgKi8KKyAgICBHY01ldGhvZHMsICAgICAgICAgLyogbV9tZXRob2RzICovCisgICAgTlVMTCwgICAgICAgICAgICAgIC8qIG1fcmVsb2FkICovCisgICAgTlVMTCwgICAgICAgICAgICAgIC8qIG1fdHJhdmVyc2UgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgLyogbV9jbGVhciAqLworICAgIE5VTEwgICAgICAgICAgICAgICAvKiBtX2ZyZWUgKi8KIH07CiAKLQogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9nYyh2b2lkKQogewpAQCAtMTM2NCw2ICsxMzYzLDM4IEBACiAgICAgcmV0dXJuIG47CiB9CiAKK3ZvaWQKK19QeUdDX0Zpbmkodm9pZCkKK3sKKyAgICBpZiAoIShkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpCisgICAgICAgICYmIGdhcmJhZ2UgIT0gTlVMTCAmJiBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkgPiAwKSB7CisgICAgICAgIGNoYXIgKm1lc3NhZ2U7CisgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpCisgICAgICAgICAgICBtZXNzYWdlID0gImdjOiAlemQgdW5jb2xsZWN0YWJsZSBvYmplY3RzIGF0ICIgXAorICAgICAgICAgICAgICAgICJzaHV0ZG93biI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiZ2M6ICV6ZCB1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgIiBcCisgICAgICAgICAgICAgICAgInNodXRkb3duOyB1c2UgZ2Muc2V0X2RlYnVnKGdjLkRFQlVHX1VOQ09MTEVDVEFCTEUpIHRvIGxpc3QgdGhlbSI7CisgICAgICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1Jlc291cmNlV2FybmluZywgMCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKGdhcmJhZ2UpKSA8IDApCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgIGlmIChkZWJ1ZyAmIERFQlVHX1VOQ09MTEVDVEFCTEUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXByID0gTlVMTCwgKmJ5dGVzID0gTlVMTDsKKyAgICAgICAgICAgIHJlcHIgPSBQeU9iamVjdF9SZXByKGdhcmJhZ2UpOworICAgICAgICAgICAgaWYgKCFyZXByIHx8ICEoYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHJlcHIpKSkKKyAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2FyYmFnZSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKKyAgICAgICAgICAgICAgICAgICAgIiAgICAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpCisgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9YREVDUkVGKHJlcHIpOworICAgICAgICAgICAgUHlfWERFQ1JFRihieXRlcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIC8qIGZvciBkZWJ1Z2dpbmcgKi8KIHZvaWQKIF9QeUdDX0R1bXAoUHlHQ19IZWFkICpnKQpAQCAtMTQ4MCwxMSArMTUxMSwzIEBACiAgICAgfQogICAgIFB5T2JqZWN0X0ZSRUUoZyk7CiB9Ci0KLS8qIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIDIuMiAqLwotI3VuZGVmIF9QeU9iamVjdF9HQ19EZWwKLXZvaWQKLV9QeU9iamVjdF9HQ19EZWwoUHlPYmplY3QgKm9wKQotewotICAgIFB5T2JqZWN0X0dDX0RlbChvcCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2dldHBhdGguYyBiL01vZHVsZXMvZ2V0cGF0aC5jCmluZGV4IDExMmQ2ZDMuLmI3Zjk1NzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ2V0cGF0aC5jCisrKyBiL01vZHVsZXMvZ2V0cGF0aC5jCkBAIC00OCw3ICs0OCw3IEBACiAgKiBhcmd2MF9wYXRoLiAgRm9yIHByZWZpeCwgdGhlIGxhbmRtYXJrJ3MgcGF0aCBpcyBkZXJpdmVkIGZyb20gdGhlIFZQQVRICiAgKiBwcmVwcm9jZXNzb3IgdmFyaWFibGUgKHRha2luZyBpbnRvIGFjY291bnQgdGhhdCBpdHMgdmFsdWUgaXMgYWxtb3N0LCBidXQKICAqIG5vdCBxdWl0ZSwgd2hhdCB3ZSBuZWVkKS4gIEZvciBleGVjX3ByZWZpeCwgdGhlIGxhbmRtYXJrIGlzCi0gKiBNb2R1bGVzL1NldHVwLiAgSWYgdGhlIGxhbmRtYXJrIGlzIGZvdW5kLCB3ZSdyZSBkb25lLgorICogcHlidWlsZGRpci50eHQuICBJZiB0aGUgbGFuZG1hcmsgaXMgZm91bmQsIHdlJ3JlIGRvbmUuCiAgKgogICogRm9yIHRoZSByZW1haW5pbmcgc3RlcHMsIHRoZSBwcmVmaXggbGFuZG1hcmsgd2lsbCBhbHdheXMgYmUKICAqIGxpYi9weXRob24kVkVSU0lPTi9vcy5weSBhbmQgdGhlIGV4ZWNfcHJlZml4IHdpbGwgYWx3YXlzIGJlCkBAIC05MCw2ICs5MCw5IEBACiAgKiBrbm93biB1c2Ugb2Ygc3lzLnByZWZpeCBhbmQgc3lzLmV4ZWNfcHJlZml4IGlzIGZvciB0aGUgSUxVIGluc3RhbGxhdGlvbgogICogcHJvY2VzcyB0byBmaW5kIHRoZSBpbnN0YWxsZWQgUHl0aG9uIHRyZWUuCiAgKgorICogQW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNhbiB1c2UgUHlfU2V0UGF0aCgpIHRvIG92ZXJyaWRlIGFsbCBvZgorICogdGhlc2UgYXV0aG9tYXRpYyBwYXRoIGNvbXB1dGF0aW9ucy4KKyAqCiAgKiBOT1RFOiBXaW5kb3dzIE1TVkMgYnVpbGRzIHVzZSBQQy9nZXRwYXRocC5jIGluc3RlYWQhCiAgKi8KIApAQCAtMTMxLDczICsxMzQsOCBAQAogc3RhdGljIHdjaGFyX3QgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90IHByb2dwYXRoW01BWFBBVEhMRU4rMV07CiBzdGF0aWMgd2NoYXJfdCAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLXN0YXRpYyB3Y2hhcl90IGxpYl9weXRob25bXSA9IEwibGliL3B5dGhvbiIgVkVSU0lPTjsKLQotLyogSW4gcHJpbmNpcGxlLCB0aGlzIHNob3VsZCB1c2UgSEFWRV9fV1NUQVQsIGFuZCBfd3N0YXQKLSAgIHNob3VsZCBiZSBkZXRlY3RlZCBieSBhdXRvY29uZi4gSG93ZXZlciwgbm8gY3VycmVudAotICAgUE9TSVggc3lzdGVtIHByb3ZpZGVzIHRoYXQgZnVuY3Rpb24sIHNvIHRlc3RpbmcgZm9yCi0gICBpdCBpcyBwb2ludGxlc3MuCi0gICBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBNU19XSU5ET1dTIGd1YXJkcyBhcmUgbmVjZXNzYXJ5OgotICAgcGVyaGFwcyBmb3IgY3lnd2luL21pbmd3IGJ1aWxkcz8KLSovCi0jaWZuZGVmIE1TX1dJTkRPV1MKLXN0YXRpYyBpbnQKLV93c3RhdChjb25zdCB3Y2hhcl90KiBwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQotewotICAgIGNoYXIgZm5hbWVbUEFUSF9NQVhdOwotICAgIHNpemVfdCByZXMgPSB3Y3N0b21icyhmbmFtZSwgcGF0aCwgc2l6ZW9mKGZuYW1lKSk7Ci0gICAgaWYgKHJlcyA9PSAoc2l6ZV90KS0xKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBzdGF0KGZuYW1lLCBidWYpOwotfQotI2VuZGlmCi0KLSNpZm5kZWYgTVNfV0lORE9XUwotc3RhdGljIHdjaGFyX3QqCi1fd2dldGN3ZCh3Y2hhcl90ICpidWYsIHNpemVfdCBzaXplKQotewotICAgIGNoYXIgZm5hbWVbUEFUSF9NQVhdOwotICAgIGlmIChnZXRjd2QoZm5hbWUsIFBBVEhfTUFYKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobWJzdG93Y3MoYnVmLCBmbmFtZSwgc2l6ZSkgPj0gc2l6ZSkgewotICAgICAgICBlcnJubyA9IEVSQU5HRTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiBidWY7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfUkVBRExJTksKLWludAotX1B5X3dyZWFkbGluayhjb25zdCB3Y2hhcl90ICpwYXRoLCB3Y2hhcl90ICpidWYsIHNpemVfdCBidWZzaXopCi17Ci0gICAgY2hhciBjYnVmW1BBVEhfTUFYXTsKLSAgICBjaGFyIGNwYXRoW1BBVEhfTUFYXTsKLSAgICBpbnQgcmVzOwotICAgIHNpemVfdCByMSA9IHdjc3RvbWJzKGNwYXRoLCBwYXRoLCBQQVRIX01BWCk7Ci0gICAgaWYgKHIxID09IChzaXplX3QpLTEgfHwgcjEgPj0gUEFUSF9NQVgpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgcmVzID0gKGludClyZWFkbGluayhjcGF0aCwgY2J1ZiwgUEFUSF9NQVgpOwotICAgIGlmIChyZXMgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAocmVzID09IFBBVEhfTUFYKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGNidWZbcmVzXSA9ICdcMCc7IC8qIGJ1ZiB3aWxsIGJlIG51bGwgdGVybWluYXRlZCAqLwotICAgIHIxID0gbWJzdG93Y3MoYnVmLCBjYnVmLCBidWZzaXopOwotICAgIGlmIChyMSA9PSAtMSkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gKGludClyMTsKLQotfQotI2VuZGlmCitzdGF0aWMgaW50IG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7CitzdGF0aWMgd2NoYXJfdCAqbGliX3B5dGhvbiA9IEwibGliL3B5dGhvbiIgVkVSU0lPTjsKIAogc3RhdGljIHZvaWQKIHJlZHVjZSh3Y2hhcl90ICpkaXIpCkBAIC0yMDgsMTIgKzE0NiwxMSBAQAogICAgIGRpcltpXSA9ICdcMCc7CiB9CiAKLQogc3RhdGljIGludAogaXNmaWxlKHdjaGFyX3QgKmZpbGVuYW1lKSAgICAgICAgICAvKiBJcyBmaWxlLCBub3QgZGlyZWN0b3J5ICovCiB7CiAgICAgc3RydWN0IHN0YXQgYnVmOwotICAgIGlmIChfd3N0YXQoZmlsZW5hbWUsICZidWYpICE9IDApCisgICAgaWYgKF9QeV93c3RhdChmaWxlbmFtZSwgJmJ1ZikgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNDEsNyArMTc4LDcgQEAKIGlzeGZpbGUod2NoYXJfdCAqZmlsZW5hbWUpICAgICAgICAgLyogSXMgZXhlY3V0YWJsZSBmaWxlICovCiB7CiAgICAgc3RydWN0IHN0YXQgYnVmOwotICAgIGlmIChfd3N0YXQoZmlsZW5hbWUsICZidWYpICE9IDApCisgICAgaWYgKF9QeV93c3RhdChmaWxlbmFtZSwgJmJ1ZikgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFTX0lTUkVHKGJ1Zi5zdF9tb2RlKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yNTUsNyArMTkyLDcgQEAKIGlzZGlyKHdjaGFyX3QgKmZpbGVuYW1lKSAgICAgICAgICAgICAgICAgICAvKiBJcyBkaXJlY3RvcnkgKi8KIHsKICAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgaWYgKF93c3RhdChmaWxlbmFtZSwgJmJ1ZikgIT0gMCkKKyAgICBpZiAoX1B5X3dzdGF0KGZpbGVuYW1lLCAmYnVmKSAhPSAwKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIVNfSVNESVIoYnVmLnN0X21vZGUpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTI5NSwxMiArMjMyLDEyIEBACiAvKiBjb3B5X2Fic29sdXRlIHJlcXVpcmVzIHRoYXQgcGF0aCBiZSBhbGxvY2F0ZWQgYXQgbGVhc3QKICAgIE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFuZCB0aGF0IHAgYmUgbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gYnl0ZXMuICovCiBzdGF0aWMgdm9pZAotY29weV9hYnNvbHV0ZSh3Y2hhcl90ICpwYXRoLCB3Y2hhcl90ICpwKQorY29weV9hYnNvbHV0ZSh3Y2hhcl90ICpwYXRoLCB3Y2hhcl90ICpwLCBzaXplX3QgcGF0aGxlbikKIHsKICAgICBpZiAocFswXSA9PSBTRVApCiAgICAgICAgIHdjc2NweShwYXRoLCBwKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFfd2dldGN3ZChwYXRoLCBNQVhQQVRITEVOKSkgeworICAgICAgICBpZiAoIV9QeV93Z2V0Y3dkKHBhdGgsIHBhdGhsZW4pKSB7CiAgICAgICAgICAgICAvKiB1bmFibGUgdG8gZ2V0IHRoZSBjdXJyZW50IGRpcmVjdG9yeSAqLwogICAgICAgICAgICAgd2NzY3B5KHBhdGgsIHApOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzE1LDExICsyNTIsMTEgQEAKIHN0YXRpYyB2b2lkCiBhYnNvbHV0aXplKHdjaGFyX3QgKnBhdGgpCiB7Ci0gICAgd2NoYXJfdCBidWZmZXJbTUFYUEFUSExFTiArIDFdOworICAgIHdjaGFyX3QgYnVmZmVyW01BWFBBVEhMRU4rMV07CiAKICAgICBpZiAocGF0aFswXSA9PSBTRVApCiAgICAgICAgIHJldHVybjsKLSAgICBjb3B5X2Fic29sdXRlKGJ1ZmZlciwgcGF0aCk7CisgICAgY29weV9hYnNvbHV0ZShidWZmZXIsIHBhdGgsIE1BWFBBVEhMRU4rMSk7CiAgICAgd2NzY3B5KHBhdGgsIGJ1ZmZlcik7CiB9CiAKQEAgLTMyNyw3ICsyNjQsNyBAQAogICAgYnl0ZXMgbG9uZy4KICovCiBzdGF0aWMgaW50Ci1zZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lKQorc2VhcmNoX2Zvcl9wcmVmaXgod2NoYXJfdCAqYXJndjBfcGF0aCwgd2NoYXJfdCAqaG9tZSwgd2NoYXJfdCAqX3ByZWZpeCkKIHsKICAgICBzaXplX3QgbjsKICAgICB3Y2hhcl90ICp2cGF0aDsKQEAgLTM0OSwxNyArMjg2LDIwIEBACiAgICAgam9pbnBhdGgocHJlZml4LCBMIk1vZHVsZXMvU2V0dXAiKTsKICAgICBpZiAoaXNmaWxlKHByZWZpeCkpIHsKICAgICAgICAgLyogQ2hlY2sgVlBBVEggdG8gc2VlIGlmIGFyZ3YwX3BhdGggaXMgaW4gdGhlIGJ1aWxkIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgdnBhdGggPSBMIiIgVlBBVEg7Ci0gICAgICAgIHdjc2NweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKLSAgICAgICAgam9pbnBhdGgocHJlZml4LCBMIkxpYiIpOwotICAgICAgICBqb2lucGF0aChwcmVmaXgsIExBTkRNQVJLKTsKLSAgICAgICAgaWYgKGlzbW9kdWxlKHByZWZpeCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHZwYXRoID0gX1B5X2NoYXIyd2NoYXIoVlBBVEgsIE5VTEwpOworICAgICAgICBpZiAodnBhdGggIT0gTlVMTCkgeworICAgICAgICAgICAgd2NzY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7CisgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUodnBhdGgpOworICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMIkxpYiIpOworICAgICAgICAgICAgam9pbnBhdGgocHJlZml4LCBMQU5ETUFSSyk7CisgICAgICAgICAgICBpZiAoaXNtb2R1bGUocHJlZml4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBTZWFyY2ggZnJvbSBhcmd2MF9wYXRoLCB1bnRpbCByb290IGlzIGZvdW5kICovCi0gICAgY29weV9hYnNvbHV0ZShwcmVmaXgsIGFyZ3YwX3BhdGgpOworICAgIGNvcHlfYWJzb2x1dGUocHJlZml4LCBhcmd2MF9wYXRoLCBNQVhQQVRITEVOKzEpOwogICAgIGRvIHsKICAgICAgICAgbiA9IHdjc2xlbihwcmVmaXgpOwogICAgICAgICBqb2lucGF0aChwcmVmaXgsIGxpYl9weXRob24pOwpAQCAtMzcxLDcgKzMxMSw3IEBACiAgICAgfSB3aGlsZSAocHJlZml4WzBdKTsKIAogICAgIC8qIExvb2sgYXQgY29uZmlndXJlJ3MgUFJFRklYICovCi0gICAgd2NzbmNweShwcmVmaXgsIEwiIiBQUkVGSVgsIE1BWFBBVEhMRU4pOworICAgIHdjc25jcHkocHJlZml4LCBfcHJlZml4LCBNQVhQQVRITEVOKTsKICAgICBqb2lucGF0aChwcmVmaXgsIGxpYl9weXRob24pOwogICAgIGpvaW5wYXRoKHByZWZpeCwgTEFORE1BUkspOwogICAgIGlmIChpc21vZHVsZShwcmVmaXgpKQpAQCAtMzg2LDcgKzMyNiw3IEBACiAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lKQorc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfZXhlY19wcmVmaXgpCiB7CiAgICAgc2l6ZV90IG47CiAKQEAgLTQwMywxNiArMzQzLDQwIEBACiAgICAgICAgIHJldHVybiAxOwogICAgIH0KIAotICAgIC8qIENoZWNrIHRvIHNlZSBpZiBhcmd2WzBdIGlzIGluIHRoZSBidWlsZCBkaXJlY3RvcnkgKi8KKyAgICAvKiBDaGVjayB0byBzZWUgaWYgYXJndlswXSBpcyBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LiAicHlidWlsZGRpci50eHQiCisgICAgICAgaXMgd3JpdHRlbiBieSBzZXR1cC5weSBhbmQgY29udGFpbnMgdGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIGxvY2F0aW9uCisgICAgICAgb2Ygc2hhcmVkIGxpYnJhcnkgbW9kdWxlcy4gKi8KICAgICB3Y3NjcHkoZXhlY19wcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGpvaW5wYXRoKGV4ZWNfcHJlZml4LCBMIk1vZHVsZXMvU2V0dXAiKTsKKyAgICBqb2lucGF0aChleGVjX3ByZWZpeCwgTCJweWJ1aWxkZGlyLnR4dCIpOwogICAgIGlmIChpc2ZpbGUoZXhlY19wcmVmaXgpKSB7Ci0gICAgICAgIHJlZHVjZShleGVjX3ByZWZpeCk7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgRklMRSAqZiA9IF9QeV93Zm9wZW4oZXhlY19wcmVmaXgsIEwicmIiKTsKKyAgICAgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGFyIGJ1ZltNQVhQQVRITEVOKzFdOworICAgICAgICAgICAgUHlPYmplY3QgKmRlY29kZWQ7CisgICAgICAgICAgICB3Y2hhcl90IHJlbF9idWlsZGRpcl9wYXRoW01BWFBBVEhMRU4rMV07CisgICAgICAgICAgICBuID0gZnJlYWQoYnVmLCAxLCBNQVhQQVRITEVOLCBmKTsKKyAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7CisgICAgICAgICAgICBmY2xvc2UoZik7CisgICAgICAgICAgICBkZWNvZGVkID0gUHlVbmljb2RlX0RlY29kZVVURjgoYnVmLCBuLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgICAgICAgICBpZiAoZGVjb2RlZCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrOworICAgICAgICAgICAgICAgIGsgPSBQeVVuaWNvZGVfQXNXaWRlQ2hhcihkZWNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxfYnVpbGRkaXJfcGF0aCwgTUFYUEFUSExFTik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlY29kZWQpOworICAgICAgICAgICAgICAgIGlmIChrID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmVsX2J1aWxkZGlyX3BhdGhba10gPSBMJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgd2NzY3B5KGV4ZWNfcHJlZml4LCBhcmd2MF9wYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgam9pbnBhdGgoZXhlY19wcmVmaXgsIHJlbF9idWlsZGRpcl9wYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIHJvb3QgaXMgZm91bmQgKi8KLSAgICBjb3B5X2Fic29sdXRlKGV4ZWNfcHJlZml4LCBhcmd2MF9wYXRoKTsKKyAgICBjb3B5X2Fic29sdXRlKGV4ZWNfcHJlZml4LCBhcmd2MF9wYXRoLCBNQVhQQVRITEVOKzEpOwogICAgIGRvIHsKICAgICAgICAgbiA9IHdjc2xlbihleGVjX3ByZWZpeCk7CiAgICAgICAgIGpvaW5wYXRoKGV4ZWNfcHJlZml4LCBsaWJfcHl0aG9uKTsKQEAgLTQyNCw3ICszODgsNyBAQAogICAgIH0gd2hpbGUgKGV4ZWNfcHJlZml4WzBdKTsKIAogICAgIC8qIExvb2sgYXQgY29uZmlndXJlJ3MgRVhFQ19QUkVGSVggKi8KLSAgICB3Y3NuY3B5KGV4ZWNfcHJlZml4LCBMIiIgRVhFQ19QUkVGSVgsIE1BWFBBVEhMRU4pOworICAgIHdjc25jcHkoZXhlY19wcmVmaXgsIF9leGVjX3ByZWZpeCwgTUFYUEFUSExFTik7CiAgICAgam9pbnBhdGgoZXhlY19wcmVmaXgsIGxpYl9weXRob24pOwogICAgIGpvaW5wYXRoKGV4ZWNfcHJlZml4LCBMImxpYi1keW5sb2FkIik7CiAgICAgaWYgKGlzZGlyKGV4ZWNfcHJlZml4KSkKQEAgLTQzNCw3ICszOTgsNiBAQAogICAgIHJldHVybiAwOwogfQogCi0KIHN0YXRpYyB2b2lkCiBjYWxjdWxhdGVfcGF0aCh2b2lkKQogewpAQCAtNDQyLDEyICs0MDUsMTEgQEAKIAogICAgIHN0YXRpYyB3Y2hhcl90IGRlbGltaXRlclsyXSA9IHtERUxJTSwgJ1wwJ307CiAgICAgc3RhdGljIHdjaGFyX3Qgc2VwYXJhdG9yWzJdID0ge1NFUCwgJ1wwJ307Ci0gICAgd2NoYXJfdCAqcHl0aG9ucGF0aCA9IEwiIiBQWVRIT05QQVRIOwogICAgIGNoYXIgKl9ydHB5cGF0aCA9IFB5X0dFVEVOVigiUFlUSE9OUEFUSCIpOyAvKiBYWFggdXNlIHdpZGUgdmVyc2lvbiBvbiBXaW5kb3dzICovCiAgICAgd2NoYXJfdCBydHB5cGF0aFtNQVhQQVRITEVOKzFdOwogICAgIHdjaGFyX3QgKmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7CiAgICAgY2hhciAqX3BhdGggPSBnZXRlbnYoIlBBVEgiKTsKLSAgICB3Y2hhcl90IHdwYXRoW01BWFBBVEhMRU4rMV07CisgICAgd2NoYXJfdCAqcGF0aF9idWZmZXIgPSBOVUxMOwogICAgIHdjaGFyX3QgKnBhdGggPSBOVUxMOwogICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgIHdjaGFyX3QgYXJndjBfcGF0aFtNQVhQQVRITEVOKzFdOwpAQCAtNDU2LDcgKzQxOCw3IEBACiAgICAgd2NoYXJfdCAqYnVmOwogICAgIHNpemVfdCBidWZzejsKICAgICBzaXplX3QgcHJlZml4c3o7Ci0gICAgd2NoYXJfdCAqZGVmcGF0aCA9IHB5dGhvbnBhdGg7CisgICAgd2NoYXJfdCAqZGVmcGF0aDsKICNpZmRlZiBXSVRIX05FWFRfRlJBTUVXT1JLCiAgICAgTlNNb2R1bGUgcHl0aG9uTW9kdWxlOwogI2VuZGlmCkBAIC00NjYsMTYgKzQyOCwyMyBAQAogI2Vsc2UKICAgICB1bnNpZ25lZCBsb25nIG5zZXhlY2xlbmd0aCA9IE1BWFBBVEhMRU47CiAjZW5kaWYKLSAgICAgICAgY2hhciBleGVjcGF0aFtNQVhQQVRITEVOKzFdOworICAgIGNoYXIgZXhlY3BhdGhbTUFYUEFUSExFTisxXTsKICNlbmRpZgorICAgIHdjaGFyX3QgKl9weXRob25wYXRoLCAqX3ByZWZpeCwgKl9leGVjX3ByZWZpeDsKKworICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7CisgICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7CisgICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOworCisgICAgaWYgKCFfcHl0aG9ucGF0aCB8fCAhX3ByZWZpeCB8fCAhX2V4ZWNfcHJlZml4KSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoCisgICAgICAgICAgICAiVW5hYmxlIHRvIGRlY29kZSBwYXRoIHZhcmlhYmxlcyBpbiBnZXRwYXRoLmM6ICIKKyAgICAgICAgICAgICJtZW1vcnkgZXJyb3IiKTsKKyAgICB9CiAKICAgICBpZiAoX3BhdGgpIHsKLSAgICAgICAgc2l6ZV90IHIgPSBtYnN0b3djcyh3cGF0aCwgX3BhdGgsIE1BWFBBVEhMRU4rMSk7Ci0gICAgICAgIHBhdGggPSB3cGF0aDsKLSAgICAgICAgaWYgKHIgPT0gKHNpemVfdCktMSB8fCByID4gTUFYUEFUSExFTikgewotICAgICAgICAgICAgLyogQ291bGQgbm90IGNvbnZlcnQgUEFUSCwgb3IgaXQncyB0b28gbG9uZy4gKi8KLSAgICAgICAgICAgIHBhdGggPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIHBhdGhfYnVmZmVyID0gX1B5X2NoYXIyd2NoYXIoX3BhdGgsIE5VTEwpOworICAgICAgICBwYXRoID0gcGF0aF9idWZmZXI7CiAgICAgfQogCiAgICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwpAQCAtNTMxLDYgKzUwMCw4IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOworICAgIGlmIChwYXRoX2J1ZmZlciAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GcmVlKHBhdGhfYnVmZmVyKTsKICAgICBpZiAocHJvZ3BhdGhbMF0gIT0gU0VQICYmIHByb2dwYXRoWzBdICE9ICdcMCcpCiAgICAgICAgIGFic29sdXRpemUocHJvZ3BhdGgpOwogICAgIHdjc25jcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwpAQCAtNTk0LDExICs1NjUsMTEgQEAKICAgICAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAgICAgKi8KIAotICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUpKSkgeworICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgpKSkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbGlicmFyaWVzIDxwcmVmaXg+XG4iKTsKLSAgICAgICAgd2NzbmNweShwcmVmaXgsIEwiIiBQUkVGSVgsIE1BWFBBVEhMRU4pOworICAgICAgICB3Y3NuY3B5KHByZWZpeCwgX3ByZWZpeCwgTUFYUEFUSExFTik7CiAgICAgICAgIGpvaW5wYXRoKHByZWZpeCwgbGliX3B5dGhvbik7CiAgICAgfQogICAgIGVsc2UKQEAgLTYxMSwxNyArNTgyLDE3IEBACiAgICAgICAgIHJlZHVjZSh6aXBfcGF0aCk7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgd2NzbmNweSh6aXBfcGF0aCwgTCIiIFBSRUZJWCwgTUFYUEFUSExFTik7CisgICAgICAgIHdjc25jcHkoemlwX3BhdGgsIF9wcmVmaXgsIE1BWFBBVEhMRU4pOwogICAgIGpvaW5wYXRoKHppcF9wYXRoLCBMImxpYi9weXRob24wMC56aXAiKTsKICAgICBidWZzeiA9IHdjc2xlbih6aXBfcGF0aCk7ICAgLyogUmVwbGFjZSAiMDAiIHdpdGggdmVyc2lvbiAqLwogICAgIHppcF9wYXRoW2J1ZnN6IC0gNl0gPSBWRVJTSU9OWzBdOwogICAgIHppcF9wYXRoW2J1ZnN6IC0gNV0gPSBWRVJTSU9OWzJdOwogCi0gICAgaWYgKCEoZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lKSkpIHsKKyAgICBpZiAoIShlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9leGVjX3ByZWZpeCkpKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBkZXBlbmRlbnQgbGlicmFyaWVzIDxleGVjX3ByZWZpeD5cbiIpOwotICAgICAgICB3Y3NuY3B5KGV4ZWNfcHJlZml4LCBMIiIgRVhFQ19QUkVGSVgsIE1BWFBBVEhMRU4pOworICAgICAgICB3Y3NuY3B5KGV4ZWNfcHJlZml4LCBfZXhlY19wcmVmaXgsIE1BWFBBVEhMRU4pOwogICAgICAgICBqb2lucGF0aChleGVjX3ByZWZpeCwgTCJsaWIvbGliLWR5bmxvYWQiKTsKICAgICB9CiAgICAgLyogSWYgd2UgZm91bmQgRVhFQ19QUkVGSVggZG8gKm5vdCogcmVkdWNlIGl0ISAgKFlldC4pICovCkBAIC02NDMsOCArNjE0LDggQEAKICAgICAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihydHB5cGF0aCkgKyAxOwogICAgIH0KIAorICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKICAgICBwcmVmaXhzeiA9IHdjc2xlbihwcmVmaXgpICsgMTsKLQogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKIApAQCAtNjY0LDcgKzYzNSw2IEBACiAgICAgYnVmc3ogKz0gd2NzbGVuKHppcF9wYXRoKSArIDE7CiAgICAgYnVmc3ogKz0gd2NzbGVuKGV4ZWNfcHJlZml4KSArIDE7CiAKLSAgICAvKiBUaGlzIGlzIHRoZSBvbmx5IG1hbGxvYyBjYWxsIGluIHRoaXMgZmlsZSAqLwogICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7CiAKICAgICBpZiAoYnVmID09IE5VTEwpIHsKQEAgLTY4OSw3ICs2NTksNyBAQAogICAgICAgICAvKiBOZXh0IGdvZXMgbWVyZ2Ugb2YgY29tcGlsZS10aW1lICRQWVRIT05QQVRIIHdpdGgKICAgICAgICAgICogZHluYW1pY2FsbHkgbG9jYXRlZCBwcmVmaXguCiAgICAgICAgICAqLwotICAgICAgICBkZWZwYXRoID0gcHl0aG9ucGF0aDsKKyAgICAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwogICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICAgd2NoYXJfdCAqZGVsaW0gPSB3Y3NjaHIoZGVmcGF0aCwgREVMSU0pOwogCkBAIC03MTcsNiArNjg3LDcgQEAKIAogICAgICAgICAvKiBBbmQgcHVibGlzaCB0aGUgcmVzdWx0cyAqLwogICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWY7CisgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDE7CiAgICAgfQogCiAgICAgLyogUmVkdWNlIHByZWZpeCBhbmQgZXhlY19wcmVmaXggdG8gdGhlaXIgZXNzZW5jZSwKQEAgLTczMyw3ICs3MDQsNyBAQAogICAgICAgICAgICAgICAgIHdjc2NweShwcmVmaXgsIHNlcGFyYXRvcik7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgd2NzbmNweShwcmVmaXgsIEwiIiBQUkVGSVgsIE1BWFBBVEhMRU4pOworICAgICAgICB3Y3NuY3B5KHByZWZpeCwgX3ByZWZpeCwgTUFYUEFUSExFTik7CiAKICAgICBpZiAoZWZvdW5kID4gMCkgewogICAgICAgICByZWR1Y2UoZXhlY19wcmVmaXgpOwpAQCAtNzQzLDExICs3MTQsMzUgQEAKICAgICAgICAgICAgICAgICB3Y3NjcHkoZXhlY19wcmVmaXgsIHNlcGFyYXRvcik7CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgTCIiIEVYRUNfUFJFRklYLCBNQVhQQVRITEVOKTsKKyAgICAgICAgd2NzbmNweShleGVjX3ByZWZpeCwgX2V4ZWNfcHJlZml4LCBNQVhQQVRITEVOKTsKKworICAgIFB5TWVtX0ZyZWUoX3B5dGhvbnBhdGgpOworICAgIFB5TWVtX0ZyZWUoX3ByZWZpeCk7CisgICAgUHlNZW1fRnJlZShfZXhlY19wcmVmaXgpOwogfQogCiAKIC8qIEV4dGVybmFsIGludGVyZmFjZSAqLwordm9pZAorUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQoreworICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgeworICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkKQorICAgICAgICAgICAgUHlNZW1fRnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAwOworICAgIH0KKyAgICBpZiAocGF0aCAhPSBOVUxMKSB7CisgICAgICAgIGV4dGVybiB3Y2hhcl90ICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKKyAgICAgICAgd2NoYXJfdCAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7CisgICAgICAgIHdjc25jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOworICAgICAgICBleGVjX3ByZWZpeFswXSA9IHByZWZpeFswXSA9IEwnXDAnOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9NYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMTsKKyAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQorICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7CisgICAgfQorfQogCiB3Y2hhcl90ICoKIFB5X0dldFBhdGgodm9pZCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ3JwbW9kdWxlLmMgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCmluZGV4IDRhYjU1NDcuLjdkZmRhMjggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZ3JwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9ncnBtb2R1bGUuYwpAQCAtMiw3ICsyLDYgQEAKIC8qIFVOSVggZ3JvdXAgZmlsZSBhY2Nlc3MgbW9kdWxlICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGdycC5oPgpAQCAtNDYsMTEgKzQ1LDggQEAKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0jZGVmaW5lIEZTREVDT0RFKHZhbCkgUHlVbmljb2RlX0RlY29kZSh2YWwsIHN0cmxlbih2YWwpLFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZWVzY2FwZSIpCiAgICAgZm9yIChtZW1iZXIgPSBwLT5ncl9tZW07ICptZW1iZXIgIT0gTlVMTDsgbWVtYmVyKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnggPSBGU0RFQ09ERSgqbWVtYmVyKTsKKyAgICAgICAgUHlPYmplY3QgKnggPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KCptZW1iZXIpOwogICAgICAgICBpZiAoeCA9PSBOVUxMIHx8IFB5TGlzdF9BcHBlbmQodywgeCkgIT0gMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRih4KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKQEAgLTYxLDEzICs1NywxMyBAQAogICAgIH0KIAogI2RlZmluZSBTRVQoaSx2YWwpIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgaSwgdmFsKQotICAgIFNFVChzZXRJbmRleCsrLCBGU0RFQ09ERShwLT5ncl9uYW1lKSk7CisgICAgU0VUKHNldEluZGV4KyssIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQocC0+Z3JfbmFtZSkpOwogI2lmZGVmIF9fVk1TCiAgICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICNlbHNlCiAgICAgaWYgKHAtPmdyX3Bhc3N3ZCkKLSAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBGU0RFQ09ERShwLT5ncl9wYXNzd2QpKTsKKyAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHAtPmdyX3Bhc3N3ZCkpOwogICAgIGVsc2UgewogICAgICAgICAgICAgU0VUKHNldEluZGV4KyssIFB5X05vbmUpOwogICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMTE0LDggKzExMCw3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6Z2V0Z3JuYW0iLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKChieXRlcyA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoYXJnLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVlc2NhcGUiKSkgPT0gTlVMTCkKKyAgICBpZiAoKGJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChhcmcpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoYnl0ZXMsICZuYW1lLCBOVUxMKSA9PSAtMSkKICAgICAgICAgZ290byBvdXQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwppbmRleCBlN2E3ZmJlLi43MWQ1YmI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCisrKyBiL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKQEAgLTI1ODQsNiArMjU4NCwxMzggQEAKICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCiB9OwogCisvKiBhY2N1bXVsYXRlIG9iamVjdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3QgKnRvdGFsOworICAgIFB5T2JqZWN0ICppdDsKK30gYWNjdW11bGF0ZW9iamVjdDsKKworc3RhdGljIFB5VHlwZU9iamVjdCBhY2N1bXVsYXRlX3R5cGU7CisKK3N0YXRpYyBQeU9iamVjdCAqCithY2N1bXVsYXRlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dhcmdzW10gPSB7Iml0ZXJhYmxlIiwgTlVMTH07CisgICAgUHlPYmplY3QgKml0ZXJhYmxlOworICAgIFB5T2JqZWN0ICppdDsKKyAgICBhY2N1bXVsYXRlb2JqZWN0ICpsejsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPOmFjY3VtdWxhdGUiLCBrd2FyZ3MsICZpdGVyYWJsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogR2V0IGl0ZXJhdG9yLiAqLworICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihpdGVyYWJsZSk7CisgICAgaWYgKGl0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogY3JlYXRlIGFjY3VtdWxhdGVvYmplY3Qgc3RydWN0dXJlICovCisgICAgbHogPSAoYWNjdW11bGF0ZW9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOworICAgIGlmIChseiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihpdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGx6LT50b3RhbCA9IE5VTEw7CisgICAgbHotPml0ID0gaXQ7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKWx6OworfQorCitzdGF0aWMgdm9pZAorYWNjdW11bGF0ZV9kZWFsbG9jKGFjY3VtdWxhdGVvYmplY3QgKmx6KQoreworICAgIFB5T2JqZWN0X0dDX1VuVHJhY2sobHopOworICAgIFB5X1hERUNSRUYobHotPnRvdGFsKTsKKyAgICBQeV9YREVDUkVGKGx6LT5pdCk7CisgICAgUHlfVFlQRShseiktPnRwX2ZyZWUobHopOworfQorCitzdGF0aWMgaW50CithY2N1bXVsYXRlX3RyYXZlcnNlKGFjY3VtdWxhdGVvYmplY3QgKmx6LCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBQeV9WSVNJVChsei0+aXQpOworICAgIFB5X1ZJU0lUKGx6LT50b3RhbCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCithY2N1bXVsYXRlX25leHQoYWNjdW11bGF0ZW9iamVjdCAqbHopCit7CisgICAgUHlPYmplY3QgKnZhbCwgKm9sZHRvdGFsLCAqbmV3dG90YWw7CisgICAgCisgICAgdmFsID0gUHlJdGVyX05leHQobHotPml0KTsKKyAgICBpZiAodmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworIAorICAgIGlmIChsei0+dG90YWwgPT0gTlVMTCkgeworICAgICAgICBQeV9JTkNSRUYodmFsKTsKKyAgICAgICAgbHotPnRvdGFsID0gdmFsOworICAgICAgICByZXR1cm4gbHotPnRvdGFsOworICAgIH0KKyAgIAorICAgIG5ld3RvdGFsID0gUHlOdW1iZXJfQWRkKGx6LT50b3RhbCwgdmFsKTsKKyAgICBQeV9ERUNSRUYodmFsKTsKKyAgICBpZiAobmV3dG90YWwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBvbGR0b3RhbCA9IGx6LT50b3RhbDsKKyAgICBsei0+dG90YWwgPSBuZXd0b3RhbDsKKyAgICBQeV9ERUNSRUYob2xkdG90YWwpOworICAgIAorICAgIFB5X0lOQ1JFRihuZXd0b3RhbCk7CisgICAgcmV0dXJuIG5ld3RvdGFsOworfQorCitQeURvY19TVFJWQVIoYWNjdW11bGF0ZV9kb2MsCisiYWNjdW11bGF0ZShpdGVyYWJsZSkgLS0+IGFjY3VtdWxhdGUgb2JqZWN0XG5cCitcblwKK1JldHVybiBzZXJpZXMgb2YgYWNjdW11bGF0ZWQgc3Vtcy4iKTsKKworc3RhdGljIFB5VHlwZU9iamVjdCBhY2N1bXVsYXRlX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCisgICAgIml0ZXJ0b29scy5hY2N1bXVsYXRlIiwgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgIHNpemVvZihhY2N1bXVsYXRlb2JqZWN0KSwgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgLyogbWV0aG9kcyAqLworICAgIChkZXN0cnVjdG9yKWFjY3VtdWxhdGVfZGVhbGxvYywgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSwgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIGFjY3VtdWxhdGVfZG9jLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpYWNjdW11bGF0ZV90cmF2ZXJzZSwgIC8qIHRwX3RyYXZlcnNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgUHlPYmplY3RfU2VsZkl0ZXIsICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLworICAgIChpdGVybmV4dGZ1bmMpYWNjdW11bGF0ZV9uZXh0LCAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KKyAgICBhY2N1bXVsYXRlX25ldywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCit9OworCiAKIC8qIGNvbXByZXNzIG9iamVjdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTM0OTksNiArMzYzMSw3IEBACiByZXBlYXQoZWxlbSBbLG5dKSAtLT4gZWxlbSwgZWxlbSwgZWxlbSwgLi4uIGVuZGxlc3NseSBvciB1cCB0byBuIHRpbWVzXG5cCiBcblwKIEl0ZXJhdG9ycyB0ZXJtaW5hdGluZyBvbiB0aGUgc2hvcnRlc3QgaW5wdXQgc2VxdWVuY2U6XG5cCithY2N1bXVsYXRlKHAsIHN0YXJ0PTApIC0tPiBwMCwgcDArcDEsIHAwK3AxK3AyXG5cCiBjaGFpbihwLCBxLCAuLi4pIC0tPiBwMCwgcDEsIC4uLiBwbGFzdCwgcTAsIHExLCAuLi4gXG5cCiBjb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIC0tPiAoZFswXSBpZiBzWzBdKSwgKGRbMV0gaWYgc1sxXSksIC4uLlxuXAogZHJvcHdoaWxlKHByZWQsIHNlcSkgLS0+IHNlcVtuXSwgc2VxW24rMV0sIHN0YXJ0aW5nIHdoZW4gcHJlZCBmYWlsc1xuXApAQCAtMzU0NCw2ICszNjc3LDcgQEAKICAgICBQeU9iamVjdCAqbTsKICAgICBjaGFyICpuYW1lOwogICAgIFB5VHlwZU9iamVjdCAqdHlwZWxpc3RbXSA9IHsKKyAgICAgICAgJmFjY3VtdWxhdGVfdHlwZSwKICAgICAgICAgJmNvbWJpbmF0aW9uc190eXBlLAogICAgICAgICAmY3dyX3R5cGUsCiAgICAgICAgICZjeWNsZV90eXBlLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9sZF9zb19haXguaW4gYi9Nb2R1bGVzL2xkX3NvX2FpeC5pbgppbmRleCAwZmQyNDViLi44NmE5ZjdlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2xkX3NvX2FpeC5pbgorKysgYi9Nb2R1bGVzL2xkX3NvX2FpeC5pbgpAQCAtMTMxLDcgKzEzMSw3IEBACiAgIHNoaWZ0CiBkb25lCiAKLWlmIHRlc3QgIiRvYmpmaWxlIiA9ICJsaWJweXRob25AVkVSU0lPTkAuc28iOyB0aGVuCitpZiB0ZXN0ICIkb2JqZmlsZSIgPSAibGlicHl0aG9uQFZFUlNJT05AQEFCSUZMQUdTQC5zbyI7IHRoZW4KICAgbGRzb2NvcmVtb2RlPSJ0cnVlIiAKIGZpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWFpbi5jIGIvTW9kdWxlcy9tYWluLmMKaW5kZXggZWI5YmI1NC4uZmNkOTMzMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tYWluLmMKKysrIGIvTW9kdWxlcy9tYWluLmMKQEAgLTIsNyArMiw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJvc2RlZnMuaCIKLSNpbmNsdWRlICJpbXBvcnQuaCIKIAogI2luY2x1ZGUgPGxvY2FsZS5oPgogCkBAIC00Nyw3ICs0Niw3IEBACiBzdGF0aWMgaW50ICBvcmlnX2FyZ2M7CiAKIC8qIGNvbW1hbmQgbGluZSBvcHRpb25zICovCi0jZGVmaW5lIEJBU0VfT1BUUyBMImJCYzpkRWhpSm06T3NTdHV2Vlc6eFg/IgorI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUptOk9xc1N0dXZWVzp4WDo/IgogCiAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKIApAQCAtNzIsNiArNzEsNyBAQAogLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAogLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXAorLXEgICAgIDogZG9uJ3QgcHJpbnQgdmVyc2lvbiBhbmQgY29weXJpZ2h0IG1lc3NhZ2VzIG9uIGludGVyYWN0aXZlIHN0YXJ0dXBcblwKIC1zICAgICA6IGRvbid0IGFkZCB1c2VyIHNpdGUgZGlyZWN0b3J5IHRvIHN5cy5wYXRoOyBhbHNvIFBZVEhPTk5PVVNFUlNJVEVcblwKIC1TICAgICA6IGRvbid0IGltcGx5ICdpbXBvcnQgc2l0ZScgb24gaW5pdGlhbGl6YXRpb25cblwKICI7CkBAIC04Miw3ICs4Miw5IEBACiAgICAgICAgICBjYW4gYmUgc3VwcGxpZWQgbXVsdGlwbGUgdGltZXMgdG8gaW5jcmVhc2UgdmVyYm9zaXR5XG5cCiAtViAgICAgOiBwcmludCB0aGUgUHl0aG9uIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0IChhbHNvIC0tdmVyc2lvbilcblwKIC1XIGFyZyA6IHdhcm5pbmcgY29udHJvbDsgYXJnIGlzIGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lbm9cblwKKyAgICAgICAgIGFsc28gUFlUSE9OV0FSTklOR1M9YXJnXG5cCiAteCAgICAgOiBza2lwIGZpcnN0IGxpbmUgb2Ygc291cmNlLCBhbGxvd2luZyB1c2Ugb2Ygbm9uLVVuaXggZm9ybXMgb2YgIyFjbWRcblwKKy1YIG9wdCA6IHNldCBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBvcHRpb25cblwKICI7CiBzdGF0aWMgY2hhciAqdXNhZ2VfNCA9ICJcCiBmaWxlICAgOiBwcm9ncmFtIHJlYWQgZnJvbSBzY3JpcHQgZmlsZVxuXApAQCAtOTMsMzQgKzk1LDEyIEBACiBQWVRIT05QQVRIICAgOiAnJWMnLXNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHByZWZpeGVkIHRvIHRoZVxuXAogICAgICAgICAgICAgICAgZGVmYXVsdCBtb2R1bGUgc2VhcmNoIHBhdGguICBUaGUgcmVzdWx0IGlzIHN5cy5wYXRoLlxuXAogIjsKLXN0YXRpYyBjaGFyICp1c2FnZV81ID0gIlwKLVBZVEhPTkhPTUUgICA6IGFsdGVybmF0ZSA8cHJlZml4PiBkaXJlY3RvcnkgKG9yIDxwcmVmaXg+JWM8ZXhlY19wcmVmaXg+KS5cblwKLSAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aCB1c2VzICVzLlxuXAotUFlUSE9OQ0FTRU9LIDogaWdub3JlIGNhc2UgaW4gJ2ltcG9ydCcgc3RhdGVtZW50cyAoV2luZG93cykuXG5cCi1QWVRIT05JT0VOQ09ESU5HOiBFbmNvZGluZ1s6ZXJyb3JzXSB1c2VkIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLlxuXAotIjsKLQotI2lmbmRlZiBNU19XSU5ET1dTCi1zdGF0aWMgRklMRSoKLV93Zm9wZW4oY29uc3Qgd2NoYXJfdCAqcGF0aCwgY29uc3Qgd2NoYXJfdCAqbW9kZSkKLXsKLSAgICBjaGFyIGNwYXRoW1BBVEhfTUFYXTsKLSAgICBjaGFyIGNtb2RlWzEwXTsKLSAgICBzaXplX3QgcjsKLSAgICByID0gd2NzdG9tYnMoY3BhdGgsIHBhdGgsIFBBVEhfTUFYKTsKLSAgICBpZiAociA9PSAoc2l6ZV90KS0xIHx8IHIgPj0gUEFUSF9NQVgpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByID0gd2NzdG9tYnMoY21vZGUsIG1vZGUsIDEwKTsKLSAgICBpZiAociA9PSAoc2l6ZV90KS0xIHx8IHIgPj0gMTApIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gZm9wZW4oY3BhdGgsIGNtb2RlKTsKLX0KLSNlbmRpZgotCitzdGF0aWMgY2hhciAqdXNhZ2VfNSA9CisiUFlUSE9OSE9NRSAgIDogYWx0ZXJuYXRlIDxwcmVmaXg+IGRpcmVjdG9yeSAob3IgPHByZWZpeD4lYzxleGVjX3ByZWZpeD4pLlxuIgorIiAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IG1vZHVsZSBzZWFyY2ggcGF0aCB1c2VzICVzLlxuIgorIlBZVEhPTkNBU0VPSyA6IGlnbm9yZSBjYXNlIGluICdpbXBvcnQnIHN0YXRlbWVudHMgKFdpbmRvd3MpLlxuIgorIlBZVEhPTklPRU5DT0RJTkc6IEVuY29kaW5nWzplcnJvcnNdIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIuXG4iCis7CiAKIHN0YXRpYyBpbnQKIHVzYWdlKGludCBleGl0Y29kZSwgd2NoYXJfdCogcHJvZ3JhbSkKQEAgLTIyMSwzNSArMjAxLDEwMiBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IFJ1bk1haW5Gcm9tSW1wb3J0ZXIod2NoYXJfdCAqZmlsZW5hbWUpCitzdGF0aWMgaW50CitSdW5NYWluRnJvbUltcG9ydGVyKHdjaGFyX3QgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICphcmd2MCA9IE5VTEwsICppbXBvcnRlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmFyZ3YwID0gTlVMTCwgKmltcG9ydGVyLCAqc3lzX3BhdGg7CisgICAgaW50IHN0czsKIAotICAgIGlmICgoYXJndjAgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGZpbGVuYW1lLHdjc2xlbihmaWxlbmFtZSkpKSAmJgotICAgICAgICAoaW1wb3J0ZXIgPSBQeUltcG9ydF9HZXRJbXBvcnRlcihhcmd2MCkpICYmCi0gICAgICAgIChpbXBvcnRlci0+b2JfdHlwZSAhPSAmUHlOdWxsSW1wb3J0ZXJfVHlwZSkpCi0gICAgewotICAgICAgICAgICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbwotICAgICAgICAgICAgICAgICAgICBwdXQgaXQgaW4gc3lzLnBhdGhbMF0gYW5kIGltcG9ydCBfX21haW5fXyAqLwotICAgICAgICBQeU9iamVjdCAqc3lzX3BhdGggPSBOVUxMOwotICAgICAgICBpZiAoKHN5c19wYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIikpICYmCi0gICAgICAgICAgICAhUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkKLSAgICAgICAgewotICAgICAgICAgICAgUHlfSU5DUkVGKGFyZ3YwKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihpbXBvcnRlcik7Ci0gICAgICAgICAgICBzeXNfcGF0aCA9IE5VTEw7Ci0gICAgICAgICAgICByZXR1cm4gUnVuTW9kdWxlKEwiX19tYWluX18iLCAwKSAhPSAwOwotICAgICAgICB9CisgICAgYXJndjAgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKTsKKyAgICBpZiAoYXJndjAgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGltcG9ydGVyID0gUHlJbXBvcnRfR2V0SW1wb3J0ZXIoYXJndjApOworICAgIGlmIChpbXBvcnRlciA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgaWYgKGltcG9ydGVyLT5vYl90eXBlID09ICZQeU51bGxJbXBvcnRlcl9UeXBlKSB7CisgICAgICAgIFB5X0RFQ1JFRihhcmd2MCk7CisgICAgICAgIFB5X0RFQ1JFRihpbXBvcnRlcik7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgUHlfREVDUkVGKGltcG9ydGVyKTsKKworICAgIC8qIGFyZ3YwIGlzIHVzYWJsZSBhcyBhbiBpbXBvcnQgc291cmNlLCBzbyBwdXQgaXQgaW4gc3lzLnBhdGhbMF0KKyAgICAgICBhbmQgaW1wb3J0IF9fbWFpbl9fICovCisgICAgc3lzX3BhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKKyAgICBpZiAoc3lzX3BhdGggPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlMaXN0X1NldEl0ZW0oc3lzX3BhdGgsIDAsIGFyZ3YwKSkgeworICAgICAgICBhcmd2MCA9IE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0lOQ1JFRihhcmd2MCk7CisKKyAgICBzdHMgPSBSdW5Nb2R1bGUoTCJfX21haW5fXyIsIDApOworICAgIHJldHVybiBzdHMgIT0gMDsKKworZXJyb3I6CiAgICAgUHlfWERFQ1JFRihhcmd2MCk7Ci0gICAgUHlfWERFQ1JFRihpbXBvcnRlcik7Ci0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICBQeUVycl9QcmludCgpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgaW50CitydW5fY29tbWFuZCh3Y2hhcl90ICpjb21tYW5kLCBQeUNvbXBpbGVyRmxhZ3MgKmNmKQoreworICAgIFB5T2JqZWN0ICp1bmljb2RlLCAqYnl0ZXM7CisgICAgaW50IHJldDsKKworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGNvbW1hbmQsIC0xKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGJ5dGVzID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZyh1bmljb2RlKTsKKyAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgaWYgKGJ5dGVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcmV0ID0gUHlSdW5fU2ltcGxlU3RyaW5nRmxhZ3MoUHlCeXRlc19Bc1N0cmluZyhieXRlcyksIGNmKTsKKyAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgIHJldHVybiByZXQgIT0gMDsKKworZXJyb3I6CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlVuYWJsZSB0byBkZWNvZGUgdGhlIGNvbW1hbmQgZnJvbSB0aGUgY29tbWFuZCBsaW5lOlxuIik7CisgICAgUHlFcnJfUHJpbnQoKTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcnVuX2ZpbGUoRklMRSAqZnAsIGNvbnN0IHdjaGFyX3QgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKnBfY2YpCit7CisgICAgUHlPYmplY3QgKnVuaWNvZGUsICpieXRlcyA9IE5VTEw7CisgICAgY2hhciAqZmlsZW5hbWVfc3RyOworICAgIGludCBydW47CisKKyAgICAvKiBjYWxsIHBlbmRpbmcgY2FsbHMgbGlrZSBzaWduYWwgaGFuZGxlcnMgKFNJR0lOVCkgKi8KKyAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGZpbGVuYW1lKSB7CisgICAgICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKTsKKyAgICAgICAgaWYgKHVuaWNvZGUgIT0gTlVMTCkgeworICAgICAgICAgICAgYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHVuaWNvZGUpOworICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgICAgICB9CisgICAgICAgIGlmIChieXRlcyAhPSBOVUxMKQorICAgICAgICAgICAgZmlsZW5hbWVfc3RyID0gUHlCeXRlc19Bc1N0cmluZyhieXRlcyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGZpbGVuYW1lX3N0ciA9ICI8ZW5jb2RpbmcgZXJyb3I+IjsKKyAgICAgICAgfQogICAgIH0KKyAgICBlbHNlCisgICAgICAgIGZpbGVuYW1lX3N0ciA9ICI8c3RkaW4+IjsKKworICAgIHJ1biA9IFB5UnVuX0FueUZpbGVFeEZsYWdzKGZwLCBmaWxlbmFtZV9zdHIsIGZpbGVuYW1lICE9IE5VTEwsIHBfY2YpOworICAgIFB5X1hERUNSRUYoYnl0ZXMpOworICAgIHJldHVybiBydW4gIT0gMDsKIH0KIAogCkBAIC0yNjUsNiArMzEyLDkgQEAKICAgICB3Y2hhcl90ICptb2R1bGUgPSBOVUxMOwogICAgIEZJTEUgKmZwID0gc3RkaW47CiAgICAgY2hhciAqcDsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgd2NoYXJfdCAqd3A7CisjZW5kaWYKICAgICBpbnQgc2tpcGZpcnN0bGluZSA9IDA7CiAgICAgaW50IHN0ZGluX2lzX2ludGVyYWN0aXZlID0gMDsKICAgICBpbnQgaGVscCA9IDA7CkBAIC0zNTgsOCArNDA4LDYgQEAKICAgICAgICAgICAgIHNraXBmaXJzdGxpbmUgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLyogY2FzZSAnWCc6IHJlc2VydmVkIGZvciBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBhcmd1bWVudHMgKi8KLQogICAgICAgICBjYXNlICdoJzoKICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICBoZWxwKys7CkBAIC0zNzMsNiArNDIxLDE0IEBACiAgICAgICAgICAgICBQeVN5c19BZGRXYXJuT3B0aW9uKF9QeU9TX29wdGFyZyk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlICdYJzoKKyAgICAgICAgICAgIFB5U3lzX0FkZFhPcHRpb24oX1B5T1Nfb3B0YXJnKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3EnOgorICAgICAgICAgICAgUHlfUXVpZXRGbGFnKys7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAvKiBUaGlzIHNwYWNlIHJlc2VydmVkIGZvciBvdGhlciBvcHRpb25zICovCiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTQwMSw2ICs0NTcsNjEgQEAKICAgICAgICAgKHAgPSBQeV9HRVRFTlYoIlBZVEhPTk5PVVNFUlNJVEUiKSkgJiYgKnAgIT0gJ1wwJykKICAgICAgICAgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDE7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcgJiYgKHdwID0gX3dnZXRlbnYoTCJQWVRIT05XQVJOSU5HUyIpKSAmJgorICAgICAgICAqd3AgIT0gTCdcMCcpIHsKKyAgICAgICAgd2NoYXJfdCAqYnVmLCAqd2FybmluZzsKKworICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYygod2NzbGVuKHdwKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CisgICAgICAgIHdjc2NweShidWYsIHdwKTsKKyAgICAgICAgZm9yICh3YXJuaW5nID0gd2NzdG9rKGJ1ZiwgTCIsIik7CisgICAgICAgICAgICAgd2FybmluZyAhPSBOVUxMOworICAgICAgICAgICAgIHdhcm5pbmcgPSB3Y3N0b2soTlVMTCwgTCIsIikpIHsKKyAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24od2FybmluZyk7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShidWYpOworICAgIH0KKyNlbHNlCisgICAgaWYgKChwID0gUHlfR0VURU5WKCJQWVRIT05XQVJOSU5HUyIpKSAmJiAqcCAhPSAnXDAnKSB7CisgICAgICAgIGNoYXIgKmJ1ZiwgKm9sZGxvYzsKKyAgICAgICAgUHlPYmplY3QgKnVuaWNvZGU7CisKKyAgICAgICAgLyogc2V0dGxlIGZvciBzdHJ0b2sgaGVyZSBhcyB0aGVyZSdzIG5vIG9uZSBzdGFuZGFyZAorICAgICAgICAgICBDODkgd2NzdG9rICovCisgICAgICAgIGJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihwKSArIDEpOworICAgICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAorICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKKyAgICAgICAgc3RyY3B5KGJ1ZiwgcCk7CisgICAgICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgICAgIHNldGxvY2FsZShMQ19BTEwsICIiKTsKKyAgICAgICAgZm9yIChwID0gc3RydG9rKGJ1ZiwgIiwiKTsgcCAhPSBOVUxMOyBwID0gc3RydG9rKE5VTEwsICIsIikpIHsKKyNpZmRlZiBfX0FQUExFX18KKyAgICAgICAgICAgIC8qIFVzZSB1dGYtOCBvbiBNYWMgT1MgWCAqLworICAgICAgICAgICAgdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHApOworI2Vsc2UKKyAgICAgICAgICAgIHdjaGFyX3QgKndjaGFyOworICAgICAgICAgICAgc2l6ZV90IGxlbjsKKyAgICAgICAgICAgIHdjaGFyID0gX1B5X2NoYXIyd2NoYXIocCwgJmxlbik7CisgICAgICAgICAgICBpZiAod2NoYXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdjaGFyLCBsZW4pOworICAgICAgICAgICAgUHlNZW1fRnJlZSh3Y2hhcik7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZSh1bmljb2RlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICAgICAgfQorICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOworICAgICAgICBmcmVlKG9sZGxvYyk7CisgICAgICAgIGZyZWUoYnVmKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChjb21tYW5kID09IE5VTEwgJiYgbW9kdWxlID09IE5VTEwgJiYgX1B5T1Nfb3B0aW5kIDwgYXJnYyAmJgogICAgICAgICB3Y3NjbXAoYXJndltfUHlPU19vcHRpbmRdLCBMIi0iKSAhPSAwKQogICAgIHsKQEAgLTQxNiwxMSArNTI3LDE0IEBACiAKICAgICBzdGRpbl9pc19pbnRlcmFjdGl2ZSA9IFB5X0ZkSXNJbnRlcmFjdGl2ZShzdGRpbiwgKGNoYXIgKikwKTsKIAotICAgIGlmIChQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnKSB7CiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCi0gICAgICAgIF9zZXRtb2RlKGZpbGVubyhzdGRpbiksIE9fQklOQVJZKTsKLSAgICAgICAgX3NldG1vZGUoZmlsZW5vKHN0ZG91dCksIE9fQklOQVJZKTsKKyAgICAvKiBkb24ndCB0cmFuc2xhdGUgbmV3bGluZXMgKFxyXG4gPD0+IFxuKSAqLworICAgIF9zZXRtb2RlKGZpbGVubyhzdGRpbiksIE9fQklOQVJZKTsKKyAgICBfc2V0bW9kZShmaWxlbm8oc3Rkb3V0KSwgT19CSU5BUlkpOworICAgIF9zZXRtb2RlKGZpbGVubyhzdGRlcnIpLCBPX0JJTkFSWSk7CiAjZW5kaWYKKworICAgIGlmIChQeV9VbmJ1ZmZlcmVkU3RkaW9GbGFnKSB7CiAjaWZkZWYgSEFWRV9TRVRWQlVGCiAgICAgICAgIHNldHZidWYoc3RkaW4sICAoY2hhciAqKU5VTEwsIF9JT05CRiwgQlVGU0laKTsKICAgICAgICAgc2V0dmJ1ZihzdGRvdXQsIChjaGFyICopTlVMTCwgX0lPTkJGLCBCVUZTSVopOwpAQCAtNDgyLDggKzU5Niw5IEBACiAjZW5kaWYKICAgICBQeV9Jbml0aWFsaXplKCk7CiAKLSAgICBpZiAoUHlfVmVyYm9zZUZsYWcgfHwKLSAgICAgICAgKGNvbW1hbmQgPT0gTlVMTCAmJiBmaWxlbmFtZSA9PSBOVUxMICYmIG1vZHVsZSA9PSBOVUxMICYmIHN0ZGluX2lzX2ludGVyYWN0aXZlKSkgeworICAgIGlmICghUHlfUXVpZXRGbGFnICYmIChQeV9WZXJib3NlRmxhZyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKGNvbW1hbmQgPT0gTlVMTCAmJiBmaWxlbmFtZSA9PSBOVUxMICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID09IE5VTEwgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUpKSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlcyBvbiAlc1xuIiwKICAgICAgICAgICAgIFB5X0dldFZlcnNpb24oKSwgUHlfR2V0UGxhdGZvcm0oKSk7CiAgICAgICAgIGlmICghUHlfTm9TaXRlRmxhZykKQEAgLTQ5NywxMCArNjEyLDkgQEAKICAgICB9CiAKICAgICBpZiAobW9kdWxlICE9IE5VTEwpIHsKLSAgICAgICAgLyogQmFja3VwIF9QeU9TX29wdGluZCBhbmQgZm9yY2Ugc3lzLmFyZ3ZbMF0gPSAnLWMnCi0gICAgICAgICAgIHNvIHRoYXQgUHlTeXNfU2V0QXJndiBjb3JyZWN0bHkgc2V0cyBzeXMucGF0aFswXSB0byAnJyovCisgICAgICAgIC8qIEJhY2t1cCBfUHlPU19vcHRpbmQgYW5kIGZvcmNlIHN5cy5hcmd2WzBdID0gJy1tJyovCiAgICAgICAgIF9QeU9TX29wdGluZC0tOwotICAgICAgICBhcmd2W19QeU9TX29wdGluZF0gPSBMIi1jIjsKKyAgICAgICAgYXJndltfUHlPU19vcHRpbmRdID0gTCItbSI7CiAgICAgfQogCiAgICAgUHlTeXNfU2V0QXJndihhcmdjLV9QeU9TX29wdGluZCwgYXJnditfUHlPU19vcHRpbmQpOwpAQCAtNTE2LDIyICs2MzAsOCBAQAogICAgIH0KIAogICAgIGlmIChjb21tYW5kKSB7Ci0gICAgICAgIGNoYXIgKmNvbW1hbmRTdHI7Ci0gICAgICAgIFB5T2JqZWN0ICpjb21tYW5kT2JqID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICAgICAgICAgIGNvbW1hbmQsIHdjc2xlbihjb21tYW5kKSk7CisgICAgICAgIHN0cyA9IHJ1bl9jb21tYW5kKGNvbW1hbmQsICZjZik7CiAgICAgICAgIGZyZWUoY29tbWFuZCk7Ci0gICAgICAgIGlmIChjb21tYW5kT2JqICE9IE5VTEwpCi0gICAgICAgICAgICBjb21tYW5kU3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhjb21tYW5kT2JqKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tbWFuZFN0ciA9IE5VTEw7Ci0gICAgICAgIGlmIChjb21tYW5kU3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHN0cyA9IFB5UnVuX1NpbXBsZVN0cmluZ0ZsYWdzKGNvbW1hbmRTdHIsICZjZikgIT0gMDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjb21tYW5kT2JqKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX1ByaW50KCk7Ci0gICAgICAgICAgICBzdHMgPSAxOwotICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtb2R1bGUpIHsKICAgICAgICAgc3RzID0gUnVuTW9kdWxlKG1vZHVsZSwgMSk7CiAgICAgfQpAQCAtNTUwLDE5ICs2NTAsMTkgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzdHM9PS0xICYmIGZpbGVuYW1lIT1OVUxMKSB7Ci0gICAgICAgICAgICBpZiAoKGZwID0gX3dmb3BlbihmaWxlbmFtZSwgTCJyIikpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyIGNmaWxlbmFtZVtQQVRIX01BWF07Ci0gICAgICAgICAgICAgICAgc2l6ZV90IHIgPSB3Y3N0b21icyhjZmlsZW5hbWUsIGZpbGVuYW1lLCBQQVRIX01BWCk7Ci0gICAgICAgICAgICAgICAgaWYgKHIgPT0gUEFUSF9NQVgpCi0gICAgICAgICAgICAgICAgICAgIC8qIGNmaWxlbmFtZSBpcyBub3QgbnVsbC10ZXJtaW5hdGVkOwotICAgICAgICAgICAgICAgICAgICAgKiBmb3JjZWZ1bGx5IG51bGwtdGVybWluYXRpbmcgaXQKLSAgICAgICAgICAgICAgICAgICAgICogbWlnaHQgYnJlYWsgdGhlIHNoaWZ0IHN0YXRlICovCi0gICAgICAgICAgICAgICAgICAgIHN0cmNweShjZmlsZW5hbWUsICI8ZmlsZSBuYW1lIHRvbyBsb25nPiIpOwotICAgICAgICAgICAgICAgIGlmIChyID09ICgoc2l6ZV90KS0xKSkKLSAgICAgICAgICAgICAgICAgICAgc3RyY3B5KGNmaWxlbmFtZSwgIjx1bnByaW50YWJsZSBmaWxlIG5hbWU+Iik7CisgICAgICAgICAgICBmcCA9IF9QeV93Zm9wZW4oZmlsZW5hbWUsIEwiciIpOworICAgICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpjZmlsZW5hbWVfYnVmZmVyOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNmaWxlbmFtZTsKKyAgICAgICAgICAgICAgICBjZmlsZW5hbWVfYnVmZmVyID0gX1B5X3djaGFyMmNoYXIoZmlsZW5hbWUsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChjZmlsZW5hbWVfYnVmZmVyICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGNmaWxlbmFtZSA9IGNmaWxlbmFtZV9idWZmZXI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjZmlsZW5hbWUgPSAiPHVucHJpbnRhYmxlIGZpbGUgbmFtZT4iOwogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWxzOiBjYW4ndCBvcGVuIGZpbGUgJyVzJzogW0Vycm5vICVkXSAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgYXJndlswXSwgY2ZpbGVuYW1lLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLQorICAgICAgICAgICAgICAgIGlmIChjZmlsZW5hbWVfYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGNmaWxlbmFtZV9idWZmZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiAyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoc2tpcGZpcnN0bGluZSkgewpAQCAtNTg4LDMwICs2ODgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0cz09LTEpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iaiA9IE5VTEw7Ci0gICAgICAgICAgICBjaGFyICpwX2NmaWxlbmFtZSA9ICI8c3RkaW4+IjsKLSAgICAgICAgICAgIGlmIChmaWxlbmFtZSkgewotICAgICAgICAgICAgICAgIGZpbGVuYW1lT2JqID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpOwotICAgICAgICAgICAgICAgIGlmIChmaWxlbmFtZU9iaiAhPSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBwX2NmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZmlsZW5hbWVPYmopOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcF9jZmlsZW5hbWUgPSAiPGRlY29kaW5nIGVycm9yPiI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBjYWxsIHBlbmRpbmcgY2FsbHMgbGlrZSBzaWduYWwgaGFuZGxlcnMgKFNJR0lOVCkgKi8KLSAgICAgICAgICAgIGlmIChQeV9NYWtlUGVuZGluZ0NhbGxzKCkgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOwotICAgICAgICAgICAgICAgIHN0cyA9IDE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0cyA9IFB5UnVuX0FueUZpbGVFeEZsYWdzKAotICAgICAgICAgICAgICAgICAgICBmcCwKLSAgICAgICAgICAgICAgICAgICAgcF9jZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lICE9IE5VTEwsICZjZikgIT0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X1hERUNSRUYoZmlsZW5hbWVPYmopOwotICAgICAgICB9Ci0KKyAgICAgICAgaWYgKHN0cyA9PSAtMSkKKyAgICAgICAgICAgIHN0cyA9IHJ1bl9maWxlKGZwLCBmaWxlbmFtZSwgJmNmKTsKICAgICB9CiAKICAgICAvKiBDaGVjayB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGF0IHRoZSBlbmQsIHRvIGdpdmUgcHJvZ3JhbXMgdGhlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21ha2VzZXR1cCBiL01vZHVsZXMvbWFrZXNldHVwCmluZGV4IDIzZjc3OGQuLjQwZGZhOWQgMTAwNzU1Ci0tLSBhL01vZHVsZXMvbWFrZXNldHVwCisrKyBiL01vZHVsZXMvbWFrZXNldHVwCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCWNhc2UgJGRvY29uZmlnIGluCiAJCQlubykJY2M9IiRjYyBcJChDQ1NIQVJFRCkgXCQoQ0ZMQUdTKSBcJChDUFBGTEFHUykiOzsKIAkJCSopCi0JCQkJY2M9IiRjYyBcJChQWV9DRkxBR1MpIjs7CisJCQkJY2M9IiRjYyBcJChQWV9DT1JFX0NGTEFHUykiOzsKIAkJCWVzYWMKIAkJCXJ1bGU9IiRvYmo6ICRzcmM7ICRjYyAkY3BwcyAtYyAkc3JjIC1vICRvYmoiCiAJCQllY2hvICIkcnVsZSIgPj4kcnVsZXNmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21hdGhtb2R1bGUuYyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCmluZGV4IDA1YmFkNWQuLjI5YzMyYTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCkBAIC01Myw1NCArNTMsNDcxIEBACiAgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImxvbmdpbnRyZXByLmgiIC8qIGp1c3QgZm9yIFNISUZUICovCisjaW5jbHVkZSAiX21hdGguaCIKIAogI2lmZGVmIF9PU0ZfU09VUkNFCiAvKiBPU0YxIDUuMSBkb2Vzbid0IG1ha2UgdGhpcyBhdmFpbGFibGUgd2l0aCBYT1BFTl9TT1VSQ0VfRVhURU5ERUQgZGVmaW5lZCAqLwogZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbihkb3VibGUsIGRvdWJsZSk7CiAjZW5kaWYKIAotLyogQ2FsbCBpc19lcnJvciB3aGVuIGVycm5vICE9IDAsIGFuZCB3aGVyZSB4IGlzIHRoZSByZXN1bHQgbGlibQotICogcmV0dXJuZWQuICBpc19lcnJvciB3aWxsIHVzdWFsbHkgc2V0IHVwIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuCi0gKiB0cnVlICgxKSwgYnV0IG1heSByZXR1cm4gZmFsc2UgKDApIHdpdGhvdXQgc2V0dGluZyB1cCBhbiBleGNlcHRpb24uCi0gKi8KLXN0YXRpYyBpbnQKLWlzX2Vycm9yKGRvdWJsZSB4KQotewotICAgIGludCByZXN1bHQgPSAxOyAgICAgLyogcHJlc3VtcHRpb24gb2YgZ3VpbHQgKi8KLSAgICBhc3NlcnQoZXJybm8pOyAgICAgIC8qIG5vbi16ZXJvIGVycm5vIGlzIGEgcHJlY29uZGl0aW9uIGZvciBjYWxsaW5nICovCi0gICAgaWYgKGVycm5vID09IEVET00pCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibWF0aCBkb21haW4gZXJyb3IiKTsKKy8qCisgICBzaW4ocGkqeCksIGdpdmluZyBhY2N1cmF0ZSByZXN1bHRzIGZvciBhbGwgZmluaXRlIHggKGVzcGVjaWFsbHkgeAorICAgaW50ZWdyYWwgb3IgY2xvc2UgdG8gYW4gaW50ZWdlcikuICBUaGlzIGlzIGhlcmUgZm9yIHVzZSBpbiB0aGUKKyAgIHJlZmxlY3Rpb24gZm9ybXVsYSBmb3IgdGhlIGdhbW1hIGZ1bmN0aW9uLiAgSXQgY29uZm9ybXMgdG8gSUVFRQorICAgNzU0LTIwMDggZm9yIGZpbml0ZSBhcmd1bWVudHMsIGJ1dCBub3QgZm9yIGluZmluaXRpZXMgb3IgbmFucy4KKyovCiAKLSAgICBlbHNlIGlmIChlcnJubyA9PSBFUkFOR0UpIHsKLSAgICAgICAgLyogQU5TSSBDIGdlbmVyYWxseSByZXF1aXJlcyBsaWJtIGZ1bmN0aW9ucyB0byBzZXQgRVJBTkdFCi0gICAgICAgICAqIG9uIG92ZXJmbG93LCBidXQgYWxzbyBnZW5lcmFsbHkgKmFsbG93cyogdGhlbSB0byBzZXQKLSAgICAgICAgICogRVJBTkdFIG9uIHVuZGVyZmxvdyB0b28uICBUaGVyZSdzIG5vIGNvbnNpc3RlbmN5IGFib3V0Ci0gICAgICAgICAqIHRoZSBsYXR0ZXIgYWNyb3NzIHBsYXRmb3Jtcy4KLSAgICAgICAgICogQWxhcywgQzk5IG5ldmVyIHJlcXVpcmVzIHRoYXQgZXJybm8gYmUgc2V0LgotICAgICAgICAgKiBIZXJlIHdlIHN1cHByZXNzIHRoZSB1bmRlcmZsb3cgZXJyb3JzIChsaWJtIGZ1bmN0aW9ucwotICAgICAgICAgKiBzaG91bGQgcmV0dXJuIGEgemVybyBvbiB1bmRlcmZsb3csIGFuZCArLSBIVUdFX1ZBTCBvbgotICAgICAgICAgKiBvdmVyZmxvdywgc28gdGVzdGluZyB0aGUgcmVzdWx0IGZvciB6ZXJvIHN1ZmZpY2VzIHRvCi0gICAgICAgICAqIGRpc3Rpbmd1aXNoIHRoZSBjYXNlcykuCi0gICAgICAgICAqCi0gICAgICAgICAqIE9uIHNvbWUgcGxhdGZvcm1zIChVYnVudHUvaWE2NCkgaXQgc2VlbXMgdGhhdCBlcnJubyBjYW4gYmUKLSAgICAgICAgICogc2V0IHRvIEVSQU5HRSBmb3Igc3Vibm9ybWFsIHJlc3VsdHMgdGhhdCBkbyAqbm90KiB1bmRlcmZsb3cKLSAgICAgICAgICogdG8gemVyby4gIFNvIHRvIGJlIHNhZmUsIHdlJ2xsIGlnbm9yZSBFUkFOR0Ugd2hlbmV2ZXIgdGhlCi0gICAgICAgICAqIGZ1bmN0aW9uIHJlc3VsdCBpcyBsZXNzIHRoYW4gb25lIGluIGFic29sdXRlIHZhbHVlLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGZhYnMoeCkgPCAxLjApCi0gICAgICAgICAgICByZXN1bHQgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF0aCByYW5nZSBlcnJvciIpOworc3RhdGljIGNvbnN0IGRvdWJsZSBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3Oworc3RhdGljIGNvbnN0IGRvdWJsZSBzcXJ0cGkgPSAxLjc3MjQ1Mzg1MDkwNTUxNjAyNzI5ODE2NzQ4MzM0MTE0NTE4Mjc5ODsKK3N0YXRpYyBjb25zdCBkb3VibGUgbG9ncGkgPSAxLjE0NDcyOTg4NTg0OTQwMDE3NDE0MzQyNzM1MTM1MzA1ODcxMTY0NzsKKworc3RhdGljIGRvdWJsZQorc2lucGkoZG91YmxlIHgpCit7CisgICAgZG91YmxlIHksIHI7CisgICAgaW50IG47CisgICAgLyogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCBmb3IgZmluaXRlIGFyZ3VtZW50cyAqLworICAgIGFzc2VydChQeV9JU19GSU5JVEUoeCkpOworICAgIHkgPSBmbW9kKGZhYnMoeCksIDIuMCk7CisgICAgbiA9IChpbnQpcm91bmQoMi4wKnkpOworICAgIGFzc2VydCgwIDw9IG4gJiYgbiA8PSA0KTsKKyAgICBzd2l0Y2ggKG4pIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHIgPSBzaW4ocGkqeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgciA9IGNvcyhwaSooeS0wLjUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICAvKiBOLkIuIC1zaW4ocGkqKHktMS4wKSkgaXMgKm5vdCogZXF1aXZhbGVudDogaXQgd291bGQgZ2l2ZQorICAgICAgICAgICAtMC4wIGluc3RlYWQgb2YgMC4wIHdoZW4geSA9PSAxLjAuICovCisgICAgICAgIHIgPSBzaW4ocGkqKDEuMC15KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgciA9IC1jb3MocGkqKHktMS41KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgciA9IHNpbihwaSooeS0yLjApKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOyAgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisgICAgICAgIHIgPSAtMS4yM2UyMDA7IC8qIHNpbGVuY2UgZ2NjIHdhcm5pbmcgKi8KICAgICB9Ci0gICAgZWxzZQotICAgICAgICAvKiBVbmV4cGVjdGVkIG1hdGggZXJyb3IgKi8KLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIHJldHVybiBjb3B5c2lnbigxLjAsIHgpKnI7Cit9CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHRoZSByZWFsIGdhbW1hIGZ1bmN0aW9uLiAgSW4gZXh0ZW5zaXZlIGJ1dCBub24tZXhoYXVzdGl2ZQorICAgcmFuZG9tIHRlc3RzLCB0aGlzIGZ1bmN0aW9uIHByb3ZlZCBhY2N1cmF0ZSB0byB3aXRoaW4gPD0gMTAgdWxwcyBhY3Jvc3MgdGhlCisgICBlbnRpcmUgZmxvYXQgZG9tYWluLiAgTm90ZSB0aGF0IGFjY3VyYWN5IG1heSBkZXBlbmQgb24gdGhlIHF1YWxpdHkgb2YgdGhlCisgICBzeXN0ZW0gbWF0aCBmdW5jdGlvbnMsIHRoZSBwb3cgZnVuY3Rpb24gaW4gcGFydGljdWxhci4gIFNwZWNpYWwgY2FzZXMKKyAgIGZvbGxvdyBDOTkgYW5uZXggRi4gIFRoZSBwYXJhbWV0ZXJzIGFuZCBtZXRob2QgYXJlIHRhaWxvcmVkIHRvIHBsYXRmb3JtcworICAgd2hvc2UgZG91YmxlIGZvcm1hdCBpcyB0aGUgSUVFRSA3NTQgYmluYXJ5NjQgZm9ybWF0LgorCisgICBNZXRob2Q6IGZvciB4ID4gMC4wIHdlIHVzZSB0aGUgTGFuY3pvcyBhcHByb3hpbWF0aW9uIHdpdGggcGFyYW1ldGVycyBOPTEzCisgICBhbmQgZz02LjAyNDY4MDA0MDc3NjcyOTU4Mzc0MDIzNDM3NTsgdGhlc2UgcGFyYW1ldGVycyBhcmUgYW1vbmdzdCB0aG9zZQorICAgdXNlZCBieSB0aGUgQm9vc3QgbGlicmFyeS4gIEZvbGxvd2luZyBCb29zdCAoYWdhaW4pLCB3ZSByZS1leHByZXNzIHRoZQorICAgTGFuY3pvcyBzdW0gYXMgYSByYXRpb25hbCBmdW5jdGlvbiwgYW5kIGNvbXB1dGUgaXQgdGhhdCB3YXkuICBUaGUKKyAgIGNvZWZmaWNpZW50cyBiZWxvdyB3ZXJlIGNvbXB1dGVkIGluZGVwZW5kZW50bHkgdXNpbmcgTVBGUiwgYW5kIGhhdmUgYmVlbgorICAgZG91YmxlLWNoZWNrZWQgYWdhaW5zdCB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBCb29zdCBzb3VyY2UgY29kZS4KKworICAgRm9yIHggPCAwLjAgd2UgdXNlIHRoZSByZWZsZWN0aW9uIGZvcm11bGEuCisKKyAgIFRoZXJlJ3Mgb25lIG1pbm9yIHR3ZWFrIHRoYXQgZGVzZXJ2ZXMgZXhwbGFuYXRpb246IExhbmN6b3MnIGZvcm11bGEgZm9yCisgICBHYW1tYSh4KSBpbnZvbHZlcyBjb21wdXRpbmcgcG93KHgrZy0wLjUsIHgtMC41KSAvIGV4cCh4K2ctMC41KS4gIEZvciBtYW55IHgKKyAgIHZhbHVlcywgeCtnLTAuNSBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS4gIEhvd2V2ZXIsIGluIGNhc2VzIHdoZXJlIGl0CisgICBjYW4ndCBiZSByZXByZXNlbnRlZCBleGFjdGx5IHRoZSBzbWFsbCBlcnJvciBpbiB4K2ctMC41IGNhbiBiZSBtYWduaWZpZWQKKyAgIHNpZ25pZmljYW50bHkgYnkgdGhlIHBvdyBhbmQgZXhwIGNhbGxzLCBlc3BlY2lhbGx5IGZvciBsYXJnZSB4LiAgQSBjaGVhcAorICAgY29ycmVjdGlvbiBpcyB0byBtdWx0aXBseSBieSAoMSArIGUqZy8oeCtnLTAuNSkpLCB3aGVyZSBlIGlzIHRoZSBlcnJvcgorICAgaW52b2x2ZWQgaW4gdGhlIGNvbXB1dGF0aW9uIG9mIHgrZy0wLjUgKHRoYXQgaXMsIGUgPSBjb21wdXRlZCB2YWx1ZSBvZgorICAgeCtnLTAuNSAtIGV4YWN0IHZhbHVlIG9mIHgrZy0wLjUpLiAgSGVyZSdzIHRoZSBwcm9vZjoKKworICAgQ29ycmVjdGlvbiBmYWN0b3IKKyAgIC0tLS0tLS0tLS0tLS0tLS0tCisgICBXcml0ZSB4K2ctMC41ID0geS1lLCB3aGVyZSB5IGlzIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhbiBJRUVFIDc1NAorICAgZG91YmxlLCBhbmQgZSBpcyB0aW55LiAgVGhlbjoKKworICAgICBwb3coeCtnLTAuNSx4LTAuNSkvZXhwKHgrZy0wLjUpID0gcG93KHktZSwgeC0wLjUpL2V4cCh5LWUpCisgICAgID0gcG93KHksIHgtMC41KS9leHAoeSkgKiBDLAorCisgICB3aGVyZSB0aGUgY29ycmVjdGlvbl9mYWN0b3IgQyBpcyBnaXZlbiBieQorCisgICAgIEMgPSBwb3coMS1lL3ksIHgtMC41KSAqIGV4cChlKQorCisgICBTaW5jZSBlIGlzIHRpbnksIHBvdygxLWUveSwgeC0wLjUpIH4gMS0oeC0wLjUpKmUveSwgYW5kIGV4cCh4KSB+IDErZSwgc286CisKKyAgICAgQyB+ICgxLSh4LTAuNSkqZS95KSAqICgxK2UpIH4gMSArIGUqKHktKHgtMC41KSkveQorCisgICBCdXQgeS0oeC0wLjUpID0gZytlLCBhbmQgZytlIH4gZy4gIFNvIHdlIGdldCBDIH4gMSArIGUqZy95LCBhbmQKKworICAgICBwb3coeCtnLTAuNSx4LTAuNSkvZXhwKHgrZy0wLjUpIH4gcG93KHksIHgtMC41KS9leHAoeSkgKiAoMSArIGUqZy95KSwKKworICAgTm90ZSB0aGF0IGZvciBhY2N1cmFjeSwgd2hlbiBjb21wdXRpbmcgcipDIGl0J3MgYmV0dGVyIHRvIGRvCisKKyAgICAgciArIGUqZy95KnI7CisKKyAgIHRoYW4KKworICAgICByICogKDEgKyBlKmcveSk7CisKKyAgIHNpbmNlIHRoZSBhZGRpdGlvbiBpbiB0aGUgbGF0dGVyIHRocm93cyBhd2F5IG1vc3Qgb2YgdGhlIGJpdHMgb2YKKyAgIGluZm9ybWF0aW9uIGluIGUqZy95LgorKi8KKworI2RlZmluZSBMQU5DWk9TX04gMTMKK3N0YXRpYyBjb25zdCBkb3VibGUgbGFuY3pvc19nID0gNi4wMjQ2ODAwNDA3NzY3Mjk1ODM3NDAyMzQzNzU7CitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfZ19taW51c19oYWxmID0gNS41MjQ2ODAwNDA3NzY3Mjk1ODM3NDAyMzQzNzU7CitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfbnVtX2NvZWZmc1tMQU5DWk9TX05dID0geworICAgIDIzNTMxMzc2ODgwLjQxMDc1OTY4ODU3MjAwNzY3NDQ1MTYzNjc1NDczNDg0NjgwNDk0MCwKKyAgICA0MjkxOTgwMzY0Mi42NDkwOTg3Njg5NTc4OTkwNDcwMDE5ODg4NTA5MjYzNTU4NDg5NTksCisgICAgMzU3MTE5NTkyMzcuMzU1NjY4MDQ5NDQwMTg1NDUxNTQ3MTY2NzA1OTYwNDg4NjM1ODQzLAorICAgIDE3OTIxMDM0NDI2LjAzNzIwOTY5OTkxOTc1NTc1NDQ1ODkzMTExMjY3MTQwMzI2NTM5MCwKKyAgICA2MDM5NTQyNTg2LjM1MjAyODAwNTA2NDI5MTY0NDMwNzI5NzkyMTA2OTkzODg0MjA3MDgsCisgICAgMTQzOTcyMDQwNy4zMTE3MjE2NzM2NjMyMjMwNzI3OTQ5MTIzOTM5NzE1NDg1Nzg2NzcyLAorICAgIDI0ODg3NDU1Ny44NjIwNTQxNTY1MTE0NjAzODY0MTMyMjk0MjMyMTYzMjEyNTEyNzgwMSwKKyAgICAzMTQyNjQxNS41ODU0MDAxOTQzODA2MTQyMzE2MjgzMTgyMDUzNjI4NzQ2ODQ5ODc2NDAsCisgICAgMjg3NjM3MC42Mjg5MzUzNzI0NDEyMjU0MDkwNTE2MjA4NDk2MTM1OTkxMTQ1Mzc4NzY4LAorICAgIDE4NjA1Ni4yNjUzOTUyMjM0OTUwNDAyOTQ5ODk3MTYwNDU2OTkyODIyMDc4NDIzNjMyOCwKKyAgICA4MDcxLjY3MjAwMjM2NTgxNjIxMDYzODAwMjkwMjI3MjI1MDYxMzgyMTg1MTYzMjUwMjQsCisgICAgMjEwLjgyNDI3Nzc1MTU3OTM0NTg3MjUwOTczMzkyMDcxMzM2MjcxMTY2OTY5NTgwMjkxLAorICAgIDIuNTA2NjI4Mjc0NjMxMDAwMjcwMTY0OTA4MTc3MTMzODM3MzM4NjI2NDMxMDc5MzQwOAorfTsKKworLyogZGVub21pbmF0b3IgaXMgeCooeCsxKSouLi4qKHgrTEFOQ1pPU19OLTIpICovCitzdGF0aWMgY29uc3QgZG91YmxlIGxhbmN6b3NfZGVuX2NvZWZmc1tMQU5DWk9TX05dID0geworICAgIDAuMCwgMzk5MTY4MDAuMCwgMTIwNTQzODQwLjAsIDE1MDkxNzk3Ni4wLCAxMDUyNTgwNzYuMCwgNDU5OTU3MzAuMCwKKyAgICAxMzMzOTUzNS4wLCAyNjM3NTU4LjAsIDM1NzQyMy4wLCAzMjY3MC4wLCAxOTI1LjAsIDY2LjAsIDEuMH07CisKKy8qIGdhbW1hIHZhbHVlcyBmb3Igc21hbGwgcG9zaXRpdmUgaW50ZWdlcnMsIDEgdGhvdWdoIE5HQU1NQV9JTlRFR1JBTCAqLworI2RlZmluZSBOR0FNTUFfSU5URUdSQUwgMjMKK3N0YXRpYyBjb25zdCBkb3VibGUgZ2FtbWFfaW50ZWdyYWxbTkdBTU1BX0lOVEVHUkFMXSA9IHsKKyAgICAxLjAsIDEuMCwgMi4wLCA2LjAsIDI0LjAsIDEyMC4wLCA3MjAuMCwgNTA0MC4wLCA0MDMyMC4wLCAzNjI4ODAuMCwKKyAgICAzNjI4ODAwLjAsIDM5OTE2ODAwLjAsIDQ3OTAwMTYwMC4wLCA2MjI3MDIwODAwLjAsIDg3MTc4MjkxMjAwLjAsCisgICAgMTMwNzY3NDM2ODAwMC4wLCAyMDkyMjc4OTg4ODAwMC4wLCAzNTU2ODc0MjgwOTYwMDAuMCwKKyAgICA2NDAyMzczNzA1NzI4MDAwLjAsIDEyMTY0NTEwMDQwODgzMjAwMC4wLCAyNDMyOTAyMDA4MTc2NjQwMDAwLjAsCisgICAgNTEwOTA5NDIxNzE3MDk0NDAwMDAuMCwgMTEyNDAwMDcyNzc3NzYwNzY4MDAwMC4wLAorfTsKKworLyogTGFuY3pvcycgc3VtIExfZyh4KSwgZm9yIHBvc2l0aXZlIHggKi8KKworc3RhdGljIGRvdWJsZQorbGFuY3pvc19zdW0oZG91YmxlIHgpCit7CisgICAgZG91YmxlIG51bSA9IDAuMCwgZGVuID0gMC4wOworICAgIGludCBpOworICAgIGFzc2VydCh4ID4gMC4wKTsKKyAgICAvKiBldmFsdWF0ZSB0aGUgcmF0aW9uYWwgZnVuY3Rpb24gbGFuY3pvc19zdW0oeCkuICBGb3IgbGFyZ2UKKyAgICAgICB4LCB0aGUgb2J2aW91cyBhbGdvcml0aG0gcmlza3Mgb3ZlcmZsb3csIHNvIHdlIGluc3RlYWQKKyAgICAgICByZXNjYWxlIHRoZSBkZW5vbWluYXRvciBhbmQgbnVtZXJhdG9yIG9mIHRoZSByYXRpb25hbAorICAgICAgIGZ1bmN0aW9uIGJ5IHgqKigxLUxBTkNaT1NfTikgYW5kIHRyZWF0IHRoaXMgYXMgYQorICAgICAgIHJhdGlvbmFsIGZ1bmN0aW9uIGluIDEveC4gIFRoaXMgYWxzbyByZWR1Y2VzIHRoZSBlcnJvciBmb3IKKyAgICAgICBsYXJnZXIgeCB2YWx1ZXMuICBUaGUgY2hvaWNlIG9mIGN1dG9mZiBwb2ludCAoNS4wIGJlbG93KSBpcworICAgICAgIHNvbWV3aGF0IGFyYml0cmFyeTsgaW4gdGVzdHMsIHNtYWxsZXIgY3V0b2ZmIHZhbHVlcyB0aGFuCisgICAgICAgdGhpcyByZXN1bHRlZCBpbiBsb3dlciBhY2N1cmFjeS4gKi8KKyAgICBpZiAoeCA8IDUuMCkgeworICAgICAgICBmb3IgKGkgPSBMQU5DWk9TX047IC0taSA+PSAwOyApIHsKKyAgICAgICAgICAgIG51bSA9IG51bSAqIHggKyBsYW5jem9zX251bV9jb2VmZnNbaV07CisgICAgICAgICAgICBkZW4gPSBkZW4gKiB4ICsgbGFuY3pvc19kZW5fY29lZmZzW2ldOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTEFOQ1pPU19OOyBpKyspIHsKKyAgICAgICAgICAgIG51bSA9IG51bSAvIHggKyBsYW5jem9zX251bV9jb2VmZnNbaV07CisgICAgICAgICAgICBkZW4gPSBkZW4gLyB4ICsgbGFuY3pvc19kZW5fY29lZmZzW2ldOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudW0vZGVuOworfQorCitzdGF0aWMgZG91YmxlCittX3RnYW1tYShkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgYWJzeCwgciwgeSwgeiwgc3FydHBvdzsKKworICAgIC8qIHNwZWNpYWwgY2FzZXMgKi8KKyAgICBpZiAoIVB5X0lTX0ZJTklURSh4KSkgeworICAgICAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IHggPiAwLjApCisgICAgICAgICAgICByZXR1cm4geDsgIC8qIHRnYW1tYShuYW4pID0gbmFuLCB0Z2FtbWEoaW5mKSA9IGluZiAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVycm5vID0gRURPTTsKKyAgICAgICAgICAgIHJldHVybiBQeV9OQU47ICAvKiB0Z2FtbWEoLWluZikgPSBuYW4sIGludmFsaWQgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoeCA9PSAwLjApIHsKKyAgICAgICAgZXJybm8gPSBFRE9NOworICAgICAgICByZXR1cm4gMS4wL3g7IC8qIHRnYW1tYSgrLTAuMCkgPSArLWluZiwgZGl2aWRlLWJ5LXplcm8gKi8KKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIGFyZ3VtZW50cyAqLworICAgIGlmICh4ID09IGZsb29yKHgpKSB7CisgICAgICAgIGlmICh4IDwgMC4wKSB7CisgICAgICAgICAgICBlcnJubyA9IEVET007ICAvKiB0Z2FtbWEobikgPSBuYW4sIGludmFsaWQgZm9yICovCisgICAgICAgICAgICByZXR1cm4gUHlfTkFOOyAvKiBuZWdhdGl2ZSBpbnRlZ2VycyBuICovCisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPD0gTkdBTU1BX0lOVEVHUkFMKQorICAgICAgICAgICAgcmV0dXJuIGdhbW1hX2ludGVncmFsWyhpbnQpeCAtIDFdOworICAgIH0KKyAgICBhYnN4ID0gZmFicyh4KTsKKworICAgIC8qIHRpbnkgYXJndW1lbnRzOiAgdGdhbW1hKHgpIH4gMS94IGZvciB4IG5lYXIgMCAqLworICAgIGlmIChhYnN4IDwgMWUtMjApIHsKKyAgICAgICAgciA9IDEuMC94OworICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkocikpCisgICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorCisgICAgLyogbGFyZ2UgYXJndW1lbnRzOiBhc3N1bWluZyBJRUVFIDc1NCBkb3VibGVzLCB0Z2FtbWEoeCkgb3ZlcmZsb3dzIGZvcgorICAgICAgIHggPiAyMDAsIGFuZCB1bmRlcmZsb3dzIHRvICstMC4wIGZvciB4IDwgLTIwMCwgbm90IGEgbmVnYXRpdmUKKyAgICAgICBpbnRlZ2VyLiAqLworICAgIGlmIChhYnN4ID4gMjAwLjApIHsKKyAgICAgICAgaWYgKHggPCAwLjApIHsKKyAgICAgICAgICAgIHJldHVybiAwLjAvc2lucGkoeCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlcnJubyA9IEVSQU5HRTsKKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHkgPSBhYnN4ICsgbGFuY3pvc19nX21pbnVzX2hhbGY7CisgICAgLyogY29tcHV0ZSBlcnJvciBpbiBzdW0gKi8KKyAgICBpZiAoYWJzeCA+IGxhbmN6b3NfZ19taW51c19oYWxmKSB7CisgICAgICAgIC8qIG5vdGU6IHRoZSBjb3JyZWN0aW9uIGNhbiBiZSBmb2lsZWQgYnkgYW4gb3B0aW1pemluZworICAgICAgICAgICBjb21waWxlciB0aGF0IChpbmNvcnJlY3RseSkgdGhpbmtzIHRoYXQgYW4gZXhwcmVzc2lvbiBsaWtlCisgICAgICAgICAgIGEgKyBiIC0gYSAtIGIgY2FuIGJlIG9wdGltaXplZCB0byAwLjAuICBUaGlzIHNob3VsZG4ndAorICAgICAgICAgICBoYXBwZW4gaW4gYSBzdGFuZGFyZHMtY29uZm9ybWluZyBjb21waWxlci4gKi8KKyAgICAgICAgZG91YmxlIHEgPSB5IC0gYWJzeDsKKyAgICAgICAgeiA9IHEgLSBsYW5jem9zX2dfbWludXNfaGFsZjsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBxID0geSAtIGxhbmN6b3NfZ19taW51c19oYWxmOworICAgICAgICB6ID0gcSAtIGFic3g7CisgICAgfQorICAgIHogPSB6ICogbGFuY3pvc19nIC8geTsKKyAgICBpZiAoeCA8IDAuMCkgeworICAgICAgICByID0gLXBpIC8gc2lucGkoYWJzeCkgLyBhYnN4ICogZXhwKHkpIC8gbGFuY3pvc19zdW0oYWJzeCk7CisgICAgICAgIHIgLT0geiAqIHI7CisgICAgICAgIGlmIChhYnN4IDwgMTQwLjApIHsKKyAgICAgICAgICAgIHIgLz0gcG93KHksIGFic3ggLSAwLjUpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3FydHBvdyA9IHBvdyh5LCBhYnN4IC8gMi4wIC0gMC4yNSk7CisgICAgICAgICAgICByIC89IHNxcnRwb3c7CisgICAgICAgICAgICByIC89IHNxcnRwb3c7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHIgPSBsYW5jem9zX3N1bShhYnN4KSAvIGV4cCh5KTsKKyAgICAgICAgciArPSB6ICogcjsKKyAgICAgICAgaWYgKGFic3ggPCAxNDAuMCkgeworICAgICAgICAgICAgciAqPSBwb3coeSwgYWJzeCAtIDAuNSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzcXJ0cG93ID0gcG93KHksIGFic3ggLyAyLjAgLSAwLjI1KTsKKyAgICAgICAgICAgIHIgKj0gc3FydHBvdzsKKyAgICAgICAgICAgIHIgKj0gc3FydHBvdzsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlfSVNfSU5GSU5JVFkocikpCisgICAgICAgIGVycm5vID0gRVJBTkdFOworICAgIHJldHVybiByOworfQorCisvKgorICAgbGdhbW1hOiAgbmF0dXJhbCBsb2cgb2YgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBHYW1tYSBmdW5jdGlvbi4KKyAgIEZvciBsYXJnZSBhcmd1bWVudHMsIExhbmN6b3MnIGZvcm11bGEgd29ya3MgZXh0cmVtZWx5IHdlbGwgaGVyZS4KKyovCisKK3N0YXRpYyBkb3VibGUKK21fbGdhbW1hKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSByLCBhYnN4OworCisgICAgLyogc3BlY2lhbCBjYXNlcyAqLworICAgIGlmICghUHlfSVNfRklOSVRFKHgpKSB7CisgICAgICAgIGlmIChQeV9JU19OQU4oeCkpCisgICAgICAgICAgICByZXR1cm4geDsgIC8qIGxnYW1tYShuYW4pID0gbmFuICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsgLyogbGdhbW1hKCstaW5mKSA9ICtpbmYgKi8KKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIGFyZ3VtZW50cyAqLworICAgIGlmICh4ID09IGZsb29yKHgpICYmIHggPD0gMi4wKSB7CisgICAgICAgIGlmICh4IDw9IDAuMCkgeworICAgICAgICAgICAgZXJybm8gPSBFRE9NOyAgLyogbGdhbW1hKG4pID0gaW5mLCBkaXZpZGUtYnktemVybyBmb3IgKi8KKyAgICAgICAgICAgIHJldHVybiBQeV9IVUdFX1ZBTDsgLyogaW50ZWdlcnMgbiA8PSAwICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gMC4wOyAvKiBsZ2FtbWEoMSkgPSBsZ2FtbWEoMikgPSAwLjAgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGFic3ggPSBmYWJzKHgpOworICAgIC8qIHRpbnkgYXJndW1lbnRzOiBsZ2FtbWEoeCkgfiAtbG9nKGZhYnMoeCkpIGZvciBzbWFsbCB4ICovCisgICAgaWYgKGFic3ggPCAxZS0yMCkKKyAgICAgICAgcmV0dXJuIC1sb2coYWJzeCk7CisKKyAgICAvKiBMYW5jem9zJyBmb3JtdWxhLiAgV2UgY291bGQgc2F2ZSBhIGZyYWN0aW9uIG9mIGEgdWxwIGluIGFjY3VyYWN5IGJ5CisgICAgICAgaGF2aW5nIGEgc2Vjb25kIHNldCBvZiBudW1lcmF0b3IgY29lZmZpY2llbnRzIGZvciBsYW5jem9zX3N1bSB0aGF0CisgICAgICAgYWJzb3JiZWQgdGhlIGV4cCgtbGFuY3pvc19nKSB0ZXJtLCBhbmQgdGhyb3dpbmcgb3V0IHRoZSBsYW5jem9zX2cKKyAgICAgICBzdWJ0cmFjdGlvbiBiZWxvdzsgaXQncyBwcm9iYWJseSBub3Qgd29ydGggaXQuICovCisgICAgciA9IGxvZyhsYW5jem9zX3N1bShhYnN4KSkgLSBsYW5jem9zX2c7CisgICAgciArPSAoYWJzeCAtIDAuNSkgKiAobG9nKGFic3ggKyBsYW5jem9zX2cgLSAwLjUpIC0gMSk7CisgICAgaWYgKHggPCAwLjApCisgICAgICAgIC8qIFVzZSByZWZsZWN0aW9uIGZvcm11bGEgdG8gZ2V0IHZhbHVlIGZvciBuZWdhdGl2ZSB4LiAqLworICAgICAgICByID0gbG9ncGkgLSBsb2coZmFicyhzaW5waShhYnN4KSkpIC0gbG9nKGFic3gpIC0gcjsKKyAgICBpZiAoUHlfSVNfSU5GSU5JVFkocikpCisgICAgICAgIGVycm5vID0gRVJBTkdFOworICAgIHJldHVybiByOworfQorCisvKgorICAgSW1wbGVtZW50YXRpb25zIG9mIHRoZSBlcnJvciBmdW5jdGlvbiBlcmYoeCkgYW5kIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yCisgICBmdW5jdGlvbiBlcmZjKHgpLgorCisgICBNZXRob2Q6IGZvbGxvd2luZyAnTnVtZXJpY2FsIFJlY2lwZXMnIGJ5IEZsYW5uZXJ5LCBQcmVzcyBldC4gYWwuICgybmQgZWQuLAorICAgQ2FtYnJpZGdlIFVuaXZlcnNpdHkgUHJlc3MpLCB3ZSB1c2UgYSBzZXJpZXMgYXBwcm94aW1hdGlvbiBmb3IgZXJmIGZvcgorICAgc21hbGwgeCwgYW5kIGEgY29udGludWVkIGZyYWN0aW9uIGFwcHJveGltYXRpb24gZm9yIGVyZmMoeCkgZm9yIGxhcmdlciB4OworICAgY29tYmluZWQgd2l0aCB0aGUgcmVsYXRpb25zIGVyZigteCkgPSAtZXJmKHgpIGFuZCBlcmZjKHgpID0gMS4wIC0gZXJmKHgpLAorICAgdGhpcyBnaXZlcyB1cyBlcmYoeCkgYW5kIGVyZmMoeCkgZm9yIGFsbCB4LgorCisgICBUaGUgc2VyaWVzIGV4cGFuc2lvbiB1c2VkIGlzOgorCisgICAgICBlcmYoeCkgPSB4KmV4cCgteCp4KS9zcXJ0KHBpKSAqIFsKKyAgICAgICAgICAgICAgICAgICAgIDIvMSArIDQvMyB4KioyICsgOC8xNSB4Kio0ICsgMTYvMTA1IHgqKjYgKyAuLi5dCisKKyAgIFRoZSBjb2VmZmljaWVudCBvZiB4KiooMmstMikgaGVyZSBpcyA0KiprKmZhY3RvcmlhbChrKS9mYWN0b3JpYWwoMiprKS4KKyAgIFRoaXMgc2VyaWVzIGNvbnZlcmdlcyB3ZWxsIGZvciBzbWFsbGlzaCB4LCBidXQgc2xvd2x5IGZvciBsYXJnZXIgeC4KKworICAgVGhlIGNvbnRpbnVlZCBmcmFjdGlvbiBleHBhbnNpb24gdXNlZCBpczoKKworICAgICAgZXJmYyh4KSA9IHgqZXhwKC14KngpL3NxcnQocGkpICogWzEvKDAuNSArIHgqKjIgLSkgMC41LygyLjUgKyB4KioyIC0gKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMy4wLyg0LjUgKyB4KioyIC0gKSA3LjUvKDYuNSArIHgqKjIgLSApIC4uLl0KKworICAgYWZ0ZXIgdGhlIGZpcnN0IHRlcm0sIHRoZSBnZW5lcmFsIHRlcm0gaGFzIHRoZSBmb3JtOgorCisgICAgICBrKihrLTAuNSkvKDIqayswLjUgKyB4KioyIC0gLi4uKS4KKworICAgVGhpcyBleHBhbnNpb24gY29udmVyZ2VzIGZhc3QgZm9yIGxhcmdlciB4LCBidXQgY29udmVyZ2VuY2UgYmVjb21lcworICAgaW5maW5pdGVseSBzbG93IGFzIHggYXBwcm9hY2hlcyAwLjAuICBUaGUgKHNvbWV3aGF0IG5haXZlKSBjb250aW51ZWQKKyAgIGZyYWN0aW9uIGV2YWx1YXRpb24gYWxnb3JpdGhtIHVzZWQgYmVsb3cgYWxzbyByaXNrcyBvdmVyZmxvdyBmb3IgbGFyZ2UgeDsKKyAgIGJ1dCBmb3IgbGFyZ2UgeCwgZXJmYyh4KSA9PSAwLjAgdG8gd2l0aGluIG1hY2hpbmUgcHJlY2lzaW9uLiAgKEZvcgorICAgZXhhbXBsZSwgZXJmYygzMC4wKSBpcyBhcHByb3hpbWF0ZWx5IDIuNTZlLTM5MykuCisKKyAgIFBhcmFtZXRlcnM6IHVzZSBzZXJpZXMgZXhwYW5zaW9uIGZvciBhYnMoeCkgPCBFUkZfU0VSSUVTX0NVVE9GRiBhbmQKKyAgIGNvbnRpbnVlZCBmcmFjdGlvbiBleHBhbnNpb24gZm9yIEVSRl9TRVJJRVNfQ1VUT0ZGIDw9IGFicyh4KSA8CisgICBFUkZDX0NPTlRGUkFDX0NVVE9GRi4gIEVSRkNfU0VSSUVTX1RFUk1TIGFuZCBFUkZDX0NPTlRGUkFDX1RFUk1TIGFyZSB0aGUKKyAgIG51bWJlcnMgb2YgdGVybXMgdG8gdXNlIGZvciB0aGUgcmVsZXZhbnQgZXhwYW5zaW9ucy4gICovCisKKyNkZWZpbmUgRVJGX1NFUklFU19DVVRPRkYgMS41CisjZGVmaW5lIEVSRl9TRVJJRVNfVEVSTVMgMjUKKyNkZWZpbmUgRVJGQ19DT05URlJBQ19DVVRPRkYgMzAuMAorI2RlZmluZSBFUkZDX0NPTlRGUkFDX1RFUk1TIDUwCisKKy8qCisgICBFcnJvciBmdW5jdGlvbiwgdmlhIHBvd2VyIHNlcmllcy4KKworICAgR2l2ZW4gYSBmaW5pdGUgZmxvYXQgeCwgcmV0dXJuIGFuIGFwcHJveGltYXRpb24gdG8gZXJmKHgpLgorICAgQ29udmVyZ2VzIHJlYXNvbmFibHkgZmFzdCBmb3Igc21hbGwgeC4KKyovCisKK3N0YXRpYyBkb3VibGUKK21fZXJmX3Nlcmllcyhkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgeDIsIGFjYywgZmssIHJlc3VsdDsKKyAgICBpbnQgaSwgc2F2ZWRfZXJybm87CisKKyAgICB4MiA9IHggKiB4OworICAgIGFjYyA9IDAuMDsKKyAgICBmayA9IChkb3VibGUpRVJGX1NFUklFU19URVJNUyArIDAuNTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRVJGX1NFUklFU19URVJNUzsgaSsrKSB7CisgICAgICAgIGFjYyA9IDIuMCArIHgyICogYWNjIC8gZms7CisgICAgICAgIGZrIC09IDEuMDsKKyAgICB9CisgICAgLyogTWFrZSBzdXJlIHRoZSBleHAgY2FsbCBkb2Vzbid0IGFmZmVjdCBlcnJubzsKKyAgICAgICBzZWUgbV9lcmZjX2NvbnRmcmFjIGZvciBtb3JlLiAqLworICAgIHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgcmVzdWx0ID0gYWNjICogeCAqIGV4cCgteDIpIC8gc3FydHBpOworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKKyAgIENvbXBsZW1lbnRhcnkgZXJyb3IgZnVuY3Rpb24sIHZpYSBjb250aW51ZWQgZnJhY3Rpb24gZXhwYW5zaW9uLgorCisgICBHaXZlbiBhIHBvc2l0aXZlIGZsb2F0IHgsIHJldHVybiBhbiBhcHByb3hpbWF0aW9uIHRvIGVyZmMoeCkuICBDb252ZXJnZXMKKyAgIHJlYXNvbmFibHkgZmFzdCBmb3IgeCBsYXJnZSAoc2F5LCB4ID4gMi4wKSwgYW5kIHNob3VsZCBiZSBzYWZlIGZyb20KKyAgIG92ZXJmbG93IGlmIHggYW5kIG50ZXJtcyBhcmUgbm90IHRvbyBsYXJnZS4gIE9uIGFuIElFRUUgNzU0IG1hY2hpbmUsIHdpdGggeAorICAgPD0gMzAuMCwgd2UncmUgc2FmZSB1cCB0byBudGVybXMgPSAxMDAuICBGb3IgeCA+PSAzMC4wLCBlcmZjKHgpIGlzIHNtYWxsZXIKKyAgIHRoYW4gdGhlIHNtYWxsZXN0IHJlcHJlc2VudGFibGUgbm9uemVybyBmbG9hdC4gICovCisKK3N0YXRpYyBkb3VibGUKK21fZXJmY19jb250ZnJhYyhkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgeDIsIGEsIGRhLCBwLCBwX2xhc3QsIHEsIHFfbGFzdCwgYiwgcmVzdWx0OworICAgIGludCBpLCBzYXZlZF9lcnJubzsKKworICAgIGlmICh4ID49IEVSRkNfQ09OVEZSQUNfQ1VUT0ZGKQorICAgICAgICByZXR1cm4gMC4wOworCisgICAgeDIgPSB4Kng7CisgICAgYSA9IDAuMDsKKyAgICBkYSA9IDAuNTsKKyAgICBwID0gMS4wOyBwX2xhc3QgPSAwLjA7CisgICAgcSA9IGRhICsgeDI7IHFfbGFzdCA9IDEuMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRVJGQ19DT05URlJBQ19URVJNUzsgaSsrKSB7CisgICAgICAgIGRvdWJsZSB0ZW1wOworICAgICAgICBhICs9IGRhOworICAgICAgICBkYSArPSAyLjA7CisgICAgICAgIGIgPSBkYSArIHgyOworICAgICAgICB0ZW1wID0gcDsgcCA9IGIqcCAtIGEqcF9sYXN0OyBwX2xhc3QgPSB0ZW1wOworICAgICAgICB0ZW1wID0gcTsgcSA9IGIqcSAtIGEqcV9sYXN0OyBxX2xhc3QgPSB0ZW1wOworICAgIH0KKyAgICAvKiBJc3N1ZSAjODk4NjogT24gc29tZSBwbGF0Zm9ybXMsIGV4cCBzZXRzIGVycm5vIG9uIHVuZGVyZmxvdyB0byB6ZXJvOworICAgICAgIHNhdmUgdGhlIGN1cnJlbnQgZXJybm8gdmFsdWUgc28gdGhhdCB3ZSBjYW4gcmVzdG9yZSBpdCBsYXRlci4gKi8KKyAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgIHJlc3VsdCA9IHAgLyBxICogeCAqIGV4cCgteDIpIC8gc3FydHBpOworICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogRXJyb3IgZnVuY3Rpb24gZXJmKHgpLCBmb3IgZ2VuZXJhbCB4ICovCisKK3N0YXRpYyBkb3VibGUKK21fZXJmKGRvdWJsZSB4KQoreworICAgIGRvdWJsZSBhYnN4LCBjZjsKKworICAgIGlmIChQeV9JU19OQU4oeCkpCisgICAgICAgIHJldHVybiB4OworICAgIGFic3ggPSBmYWJzKHgpOworICAgIGlmIChhYnN4IDwgRVJGX1NFUklFU19DVVRPRkYpCisgICAgICAgIHJldHVybiBtX2VyZl9zZXJpZXMoeCk7CisgICAgZWxzZSB7CisgICAgICAgIGNmID0gbV9lcmZjX2NvbnRmcmFjKGFic3gpOworICAgICAgICByZXR1cm4geCA+IDAuMCA/IDEuMCAtIGNmIDogY2YgLSAxLjA7CisgICAgfQorfQorCisvKiBDb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uIGVyZmMoeCksIGZvciBnZW5lcmFsIHguICovCisKK3N0YXRpYyBkb3VibGUKK21fZXJmYyhkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgYWJzeCwgY2Y7CisKKyAgICBpZiAoUHlfSVNfTkFOKHgpKQorICAgICAgICByZXR1cm4geDsKKyAgICBhYnN4ID0gZmFicyh4KTsKKyAgICBpZiAoYWJzeCA8IEVSRl9TRVJJRVNfQ1VUT0ZGKQorICAgICAgICByZXR1cm4gMS4wIC0gbV9lcmZfc2VyaWVzKHgpOworICAgIGVsc2UgeworICAgICAgICBjZiA9IG1fZXJmY19jb250ZnJhYyhhYnN4KTsKKyAgICAgICAgcmV0dXJuIHggPiAwLjAgPyBjZiA6IDIuMCAtIGNmOworICAgIH0KK30KKworLyoKICAgIHdyYXBwZXIgZm9yIGF0YW4yIHRoYXQgZGVhbHMgZGlyZWN0bHkgd2l0aCBzcGVjaWFsIGNhc2VzIGJlZm9yZQogICAgZGVsZWdhdGluZyB0byB0aGUgcGxhdGZvcm0gbGlibSBmb3IgdGhlIHJlbWFpbmluZyBjYXNlcy4gIFRoaXMKICAgIGlzIG5lY2Vzc2FyeSB0byBnZXQgY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIHBsYXRmb3Jtcy4KQEAgLTE4OCw2ICs2MDUsNDYgQEAKIH0KIAogCisvKiBDYWxsIGlzX2Vycm9yIHdoZW4gZXJybm8gIT0gMCwgYW5kIHdoZXJlIHggaXMgdGhlIHJlc3VsdCBsaWJtCisgKiByZXR1cm5lZC4gIGlzX2Vycm9yIHdpbGwgdXN1YWxseSBzZXQgdXAgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4KKyAqIHRydWUgKDEpLCBidXQgbWF5IHJldHVybiBmYWxzZSAoMCkgd2l0aG91dCBzZXR0aW5nIHVwIGFuIGV4Y2VwdGlvbi4KKyAqLworc3RhdGljIGludAoraXNfZXJyb3IoZG91YmxlIHgpCit7CisgICAgaW50IHJlc3VsdCA9IDE7ICAgICAvKiBwcmVzdW1wdGlvbiBvZiBndWlsdCAqLworICAgIGFzc2VydChlcnJubyk7ICAgICAgLyogbm9uLXplcm8gZXJybm8gaXMgYSBwcmVjb25kaXRpb24gZm9yIGNhbGxpbmcgKi8KKyAgICBpZiAoZXJybm8gPT0gRURPTSkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtYXRoIGRvbWFpbiBlcnJvciIpOworCisgICAgZWxzZSBpZiAoZXJybm8gPT0gRVJBTkdFKSB7CisgICAgICAgIC8qIEFOU0kgQyBnZW5lcmFsbHkgcmVxdWlyZXMgbGlibSBmdW5jdGlvbnMgdG8gc2V0IEVSQU5HRQorICAgICAgICAgKiBvbiBvdmVyZmxvdywgYnV0IGFsc28gZ2VuZXJhbGx5ICphbGxvd3MqIHRoZW0gdG8gc2V0CisgICAgICAgICAqIEVSQU5HRSBvbiB1bmRlcmZsb3cgdG9vLiAgVGhlcmUncyBubyBjb25zaXN0ZW5jeSBhYm91dAorICAgICAgICAgKiB0aGUgbGF0dGVyIGFjcm9zcyBwbGF0Zm9ybXMuCisgICAgICAgICAqIEFsYXMsIEM5OSBuZXZlciByZXF1aXJlcyB0aGF0IGVycm5vIGJlIHNldC4KKyAgICAgICAgICogSGVyZSB3ZSBzdXBwcmVzcyB0aGUgdW5kZXJmbG93IGVycm9ycyAobGlibSBmdW5jdGlvbnMKKyAgICAgICAgICogc2hvdWxkIHJldHVybiBhIHplcm8gb24gdW5kZXJmbG93LCBhbmQgKy0gSFVHRV9WQUwgb24KKyAgICAgICAgICogb3ZlcmZsb3csIHNvIHRlc3RpbmcgdGhlIHJlc3VsdCBmb3IgemVybyBzdWZmaWNlcyB0bworICAgICAgICAgKiBkaXN0aW5ndWlzaCB0aGUgY2FzZXMpLgorICAgICAgICAgKgorICAgICAgICAgKiBPbiBzb21lIHBsYXRmb3JtcyAoVWJ1bnR1L2lhNjQpIGl0IHNlZW1zIHRoYXQgZXJybm8gY2FuIGJlCisgICAgICAgICAqIHNldCB0byBFUkFOR0UgZm9yIHN1Ym5vcm1hbCByZXN1bHRzIHRoYXQgZG8gKm5vdCogdW5kZXJmbG93CisgICAgICAgICAqIHRvIHplcm8uICBTbyB0byBiZSBzYWZlLCB3ZSdsbCBpZ25vcmUgRVJBTkdFIHdoZW5ldmVyIHRoZQorICAgICAgICAgKiBmdW5jdGlvbiByZXN1bHQgaXMgbGVzcyB0aGFuIG9uZSBpbiBhYnNvbHV0ZSB2YWx1ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChmYWJzKHgpIDwgMS4wKQorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdGggcmFuZ2UgZXJyb3IiKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICAvKiBVbmV4cGVjdGVkIG1hdGggZXJyb3IgKi8KKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX1ZhbHVlRXJyb3IpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qCiAgICBtYXRoXzEgaXMgdXNlZCB0byB3cmFwIGEgbGlibSBmdW5jdGlvbiBmIHRoYXQgdGFrZXMgYSBkb3VibGUKICAgIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGRvdWJsZS4KQEAgLTI1Miw2ICs3MDksMjYgQEAKICAgICByZXR1cm4gKCpmcm9tX2RvdWJsZV9mdW5jKShyKTsKIH0KIAorLyogdmFyaWFudCBvZiBtYXRoXzEsIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gYmVpbmcgd3JhcHBlZCBpcyBrbm93biB0bworICAgc2V0IGVycm5vIHByb3Blcmx5ICh0aGF0IGlzLCBlcnJubyA9IEVET00gZm9yIGludmFsaWQgb3IgZGl2aWRlLWJ5LXplcm8sCisgICBlcnJubyA9IEVSQU5HRSBmb3Igb3ZlcmZsb3cpLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorbWF0aF8xYShQeU9iamVjdCAqYXJnLCBkb3VibGUgKCpmdW5jKSAoZG91YmxlKSkKK3sKKyAgICBkb3VibGUgeCwgcjsKKyAgICB4ID0gUHlGbG9hdF9Bc0RvdWJsZShhcmcpOworICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZXJybm8gPSAwOworICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImluIG1hdGhfMWEiLCByZXR1cm4gMCk7CisgICAgciA9ICgqZnVuYykoeCk7CisgICAgUHlGUEVfRU5EX1BST1RFQ1Qocik7CisgICAgaWYgKGVycm5vICYmIGlzX2Vycm9yKHIpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHIpOworfQorCiAvKgogICAgbWF0aF8yIGlzIHVzZWQgdG8gd3JhcCBhIGxpYm0gZnVuY3Rpb24gZiB0aGF0IHRha2VzIHR3byBkb3VibGUKICAgIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGRvdWJsZS4KQEAgLTMzMCw2ICs4MDcsMTIgQEAKICAgICB9XAogICAgIFB5RG9jX1NUUlZBUihtYXRoXyMjZnVuY25hbWUjI19kb2MsIGRvY3N0cmluZyk7CiAKKyNkZWZpbmUgRlVOQzFBKGZ1bmNuYW1lLCBmdW5jLCBkb2NzdHJpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiBtYXRoXyMjZnVuY25hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKSB7IFwKKyAgICAgICAgcmV0dXJuIG1hdGhfMWEoYXJncywgZnVuYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9XAorICAgIFB5RG9jX1NUUlZBUihtYXRoXyMjZnVuY25hbWUjI19kb2MsIGRvY3N0cmluZyk7CisKICNkZWZpbmUgRlVOQzIoZnVuY25hbWUsIGZ1bmMsIGRvY3N0cmluZykgXAogICAgIHN0YXRpYyBQeU9iamVjdCAqIG1hdGhfIyNmdW5jbmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpIHsgXAogICAgICAgICByZXR1cm4gbWF0aF8yKGFyZ3MsIGZ1bmMsICNmdW5jbmFtZSk7IFwKQEAgLTMzOCwzNSArODIxLDMzIEBACiAKIEZVTkMxKGFjb3MsIGFjb3MsIDAsCiAgICAgICAiYWNvcyh4KVxuXG5SZXR1cm4gdGhlIGFyYyBjb3NpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKLUZVTkMxKGFjb3NoLCBhY29zaCwgMCwKK0ZVTkMxKGFjb3NoLCBtX2Fjb3NoLCAwLAogICAgICAgImFjb3NoKHgpXG5cblJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgY29zaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCiBGVU5DMShhc2luLCBhc2luLCAwLAogICAgICAgImFzaW4oeClcblxuUmV0dXJuIHRoZSBhcmMgc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQotRlVOQzEoYXNpbmgsIGFzaW5oLCAwLAorRlVOQzEoYXNpbmgsIG1fYXNpbmgsIDAsCiAgICAgICAiYXNpbmgoeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBzaW5lIChtZWFzdXJlZCBpbiByYWRpYW5zKSBvZiB4LiIpCiBGVU5DMShhdGFuLCBhdGFuLCAwLAogICAgICAgImF0YW4oeClcblxuUmV0dXJuIHRoZSBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzIoYXRhbjIsIG1fYXRhbjIsCiAgICAgICAiYXRhbjIoeSwgeClcblxuUmV0dXJuIHRoZSBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeS94LlxuIgogICAgICAgIlVubGlrZSBhdGFuKHkveCksIHRoZSBzaWducyBvZiBib3RoIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQuIikKLUZVTkMxKGF0YW5oLCBhdGFuaCwgMCwKK0ZVTkMxKGF0YW5oLCBtX2F0YW5oLCAwLAogICAgICAgImF0YW5oKHgpXG5cblJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgdGFuZ2VudCAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogCiBzdGF0aWMgUHlPYmplY3QgKiBtYXRoX2NlaWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpudW1iZXIpIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKmNlaWxfc3RyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbWV0aG9kOworICAgIFB5T2JqZWN0ICptZXRob2QsICpyZXN1bHQ7CiAKLSAgICBpZiAoY2VpbF9zdHIgPT0gTlVMTCkgewotICAgICAgICBjZWlsX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NlaWxfXyIpOwotICAgICAgICBpZiAoY2VpbF9zdHIgPT0gTlVMTCkKKyAgICBtZXRob2QgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChudW1iZXIsICJfX2NlaWxfXyIsICZjZWlsX3N0cik7CisgICAgaWYgKG1ldGhvZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgbWV0aG9kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShudW1iZXIpLCBjZWlsX3N0cik7Ci0gICAgaWYgKG1ldGhvZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gbWF0aF8xX3RvX2ludChudW1iZXIsIGNlaWwsIDApOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihtZXRob2QsICJPIiwgbnVtYmVyKTsKKyAgICB9CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhtZXRob2QsIE5VTEwpOworICAgIFB5X0RFQ1JFRihtZXRob2QpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihtYXRoX2NlaWxfZG9jLApAQCAtMzc5LDMzICs4NjAsNDMgQEAKICAgICAgICJjb3MoeClcblxuUmV0dXJuIHRoZSBjb3NpbmUgb2YgeCAobWVhc3VyZWQgaW4gcmFkaWFucykuIikKIEZVTkMxKGNvc2gsIGNvc2gsIDEsCiAgICAgICAiY29zaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHguIikKK0ZVTkMxQShlcmYsIG1fZXJmLAorICAgICAgICJlcmYoeClcblxuRXJyb3IgZnVuY3Rpb24gYXQgeC4iKQorRlVOQzFBKGVyZmMsIG1fZXJmYywKKyAgICAgICAiZXJmYyh4KVxuXG5Db21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uIGF0IHguIikKIEZVTkMxKGV4cCwgZXhwLCAxLAogICAgICAgImV4cCh4KVxuXG5SZXR1cm4gZSByYWlzZWQgdG8gdGhlIHBvd2VyIG9mIHguIikKK0ZVTkMxKGV4cG0xLCBtX2V4cG0xLCAxLAorICAgICAgImV4cG0xKHgpXG5cblJldHVybiBleHAoeCktMS5cbiIKKyAgICAgICJUaGlzIGZ1bmN0aW9uIGF2b2lkcyB0aGUgbG9zcyBvZiBwcmVjaXNpb24gaW52b2x2ZWQgaW4gdGhlIGRpcmVjdCAiCisgICAgICAiZXZhbHVhdGlvbiBvZiBleHAoeCktMSBmb3Igc21hbGwgeC4iKQogRlVOQzEoZmFicywgZmFicywgMCwKICAgICAgICJmYWJzKHgpXG5cblJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGZsb2F0IHguIikKIAogc3RhdGljIFB5T2JqZWN0ICogbWF0aF9mbG9vcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm51bWJlcikgewogICAgIHN0YXRpYyBQeU9iamVjdCAqZmxvb3Jfc3RyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbWV0aG9kOworICAgIFB5T2JqZWN0ICptZXRob2QsICpyZXN1bHQ7CiAKLSAgICBpZiAoZmxvb3Jfc3RyID09IE5VTEwpIHsKLSAgICAgICAgZmxvb3Jfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fZmxvb3JfXyIpOwotICAgICAgICBpZiAoZmxvb3Jfc3RyID09IE5VTEwpCisgICAgbWV0aG9kID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobnVtYmVyLCAiX19mbG9vcl9fIiwgJmZsb29yX3N0cik7CisgICAgaWYgKG1ldGhvZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgbWV0aG9kID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShudW1iZXIpLCBmbG9vcl9zdHIpOwotICAgIGlmIChtZXRob2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIG1hdGhfMV90b19pbnQobnVtYmVyLCBmbG9vciwgMCk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKG1ldGhvZCwgIk8iLCBudW1iZXIpOworICAgIH0KKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKG1ldGhvZCwgTlVMTCk7CisgICAgUHlfREVDUkVGKG1ldGhvZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUHlEb2NfU1RSVkFSKG1hdGhfZmxvb3JfZG9jLAogICAgICAgICAgICAgICJmbG9vcih4KVxuXG5SZXR1cm4gdGhlIGZsb29yIG9mIHggYXMgYW4gaW50LlxuIgogICAgICAgICAgICAgICJUaGlzIGlzIHRoZSBsYXJnZXN0IGludGVncmFsIHZhbHVlIDw9IHguIik7CiAKLUZVTkMxKGxvZzFwLCBsb2cxcCwgMSwKK0ZVTkMxQShnYW1tYSwgbV90Z2FtbWEsCisgICAgICAiZ2FtbWEoeClcblxuR2FtbWEgZnVuY3Rpb24gYXQgeC4iKQorRlVOQzFBKGxnYW1tYSwgbV9sZ2FtbWEsCisgICAgICAibGdhbW1hKHgpXG5cbk5hdHVyYWwgbG9nYXJpdGhtIG9mIGFic29sdXRlIHZhbHVlIG9mIEdhbW1hIGZ1bmN0aW9uIGF0IHguIikKK0ZVTkMxKGxvZzFwLCBtX2xvZzFwLCAwLAogICAgICAgImxvZzFwKHgpXG5cblJldHVybiB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMSt4IChiYXNlIGUpLlxuIgogICAgICAgIlRoZSByZXN1bHQgaXMgY29tcHV0ZWQgaW4gYSB3YXkgd2hpY2ggaXMgYWNjdXJhdGUgZm9yIHggbmVhciB6ZXJvLiIpCiBGVU5DMShzaW4sIHNpbiwgMCwKQEAgLTY0MCw0OSArMTEzMSwyNzYgQEAKIFJldHVybiBhbiBhY2N1cmF0ZSBmbG9hdGluZyBwb2ludCBzdW0gb2YgdmFsdWVzIGluIHRoZSBpdGVyYWJsZS5cblwKIEFzc3VtZXMgSUVFRS03NTQgZmxvYXRpbmcgcG9pbnQgYXJpdGhtZXRpYy4iKTsKIAorLyogUmV0dXJuIHRoZSBzbWFsbGVzdCBpbnRlZ2VyIGsgc3VjaCB0aGF0IG4gPCAyKiprLCBvciAwIGlmIG4gPT0gMC4KKyAqIEVxdWl2YWxlbnQgdG8gZmxvb3IobGcoeCkpKzEuICBBbHNvIGVxdWl2YWxlbnQgdG86IGJpdHdpZHRoX29mX3R5cGUgLQorICogY291bnRfbGVhZGluZ196ZXJvX2JpdHMoeCkKKyAqLworCisvKiBYWFg6IFRoaXMgcm91dGluZSBkb2VzIG1vcmUgb3IgbGVzcyB0aGUgc2FtZSB0aGluZyBhcworICogYml0c19pbl9kaWdpdCgpIGluIE9iamVjdHMvbG9uZ29iamVjdC5jLiAgU29tZWRheSBpdCB3b3VsZCBiZSBuaWNlIHRvCisgKiBjb25zb2xpZGF0ZSB0aGVtLiAgT24gQlNELCB0aGVyZSdzIGEgbGlicmFyeSBmdW5jdGlvbiBjYWxsZWQgZmxzKCkKKyAqIHRoYXQgd2UgY291bGQgdXNlLCBhbmQgR0NDIHByb3ZpZGVzIF9fYnVpbHRpbl9jbHooKS4KKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZworYml0X2xlbmd0aCh1bnNpZ25lZCBsb25nIG4pCit7CisgICAgdW5zaWduZWQgbG9uZyBsZW4gPSAwOworICAgIHdoaWxlIChuICE9IDApIHsKKyAgICAgICAgKytsZW47CisgICAgICAgIG4gPj49IDE7CisgICAgfQorICAgIHJldHVybiBsZW47Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nCitjb3VudF9zZXRfYml0cyh1bnNpZ25lZCBsb25nIG4pCit7CisgICAgdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisgICAgd2hpbGUgKG4gIT0gMCkgeworICAgICAgICArK2NvdW50OworICAgICAgICBuICY9IG4gLSAxOyAvKiBjbGVhciBsZWFzdCBzaWduaWZpY2FudCBiaXQgKi8KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCisvKiBEaXZpZGUtYW5kLWNvbnF1ZXIgZmFjdG9yaWFsIGFsZ29yaXRobQorICoKKyAqIEJhc2VkIG9uIHRoZSBmb3JtdWxhIGFuZCBwc3VlZG8tY29kZSBwcm92aWRlZCBhdDoKKyAqIGh0dHA6Ly93d3cubHVzY2hueS5kZS9tYXRoL2ZhY3RvcmlhbC9iaW5hcnlzcGxpdGZhY3QuaHRtbAorICoKKyAqIEZhc3RlciBhbGdvcml0aG1zIGV4aXN0LCBidXQgdGhleSdyZSBtb3JlIGNvbXBsaWNhdGVkIGFuZCBkZXBlbmQgb24KKyAqIGEgZmFzdCBwcmltZSBmYWN0b3JpemF0aW9uIGFsZ29yaXRobS4KKyAqCisgKiBOb3RlcyBvbiB0aGUgYWxnb3JpdGhtCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogZmFjdG9yaWFsKG4pIGlzIHdyaXR0ZW4gaW4gdGhlIGZvcm0gMioqayAqIG0sIHdpdGggbSBvZGQuICBrIGFuZCBtIGFyZQorICogY29tcHV0ZWQgc2VwYXJhdGVseSwgYW5kIHRoZW4gY29tYmluZWQgdXNpbmcgYSBsZWZ0IHNoaWZ0LgorICoKKyAqIFRoZSBmdW5jdGlvbiBmYWN0b3JpYWxfb2RkX3BhcnQgY29tcHV0ZXMgdGhlIG9kZCBwYXJ0IG0gKGkuZS4sIHRoZSBncmVhdGVzdAorICogb2RkIGRpdmlzb3IpIG9mIGZhY3RvcmlhbChuKSwgdXNpbmcgdGhlIGZvcm11bGE6CisgKgorICogICBmYWN0b3JpYWxfb2RkX3BhcnQobikgPQorICoKKyAqICAgICAgICBwcm9kdWN0X3tpID49IDB9IHByb2R1Y3RfezAgPCBqIDw9IG4gLyAyKippLCBqIG9kZH0gagorICoKKyAqIEV4YW1wbGU6IGZhY3RvcmlhbF9vZGRfcGFydCgyMCkgPQorICoKKyAqICAgICAgICAoMSkgKgorICogICAgICAgICgxKSAqCisgKiAgICAgICAgKDEgKiAzICogNSkgKgorICogICAgICAgICgxICogMyAqIDUgKiA3ICogOSkKKyAqICAgICAgICAoMSAqIDMgKiA1ICogNyAqIDkgKiAxMSAqIDEzICogMTUgKiAxNyAqIDE5KQorICoKKyAqIEhlcmUgaSBnb2VzIGZyb20gbGFyZ2UgdG8gc21hbGw6IHRoZSBmaXJzdCB0ZXJtIGNvcnJlc3BvbmRzIHRvIGk9NCAoYW55CisgKiBsYXJnZXIgaSBnaXZlcyBhbiBlbXB0eSBwcm9kdWN0KSwgYW5kIHRoZSBsYXN0IHRlcm0gY29ycmVzcG9uZHMgdG8gaT0wLgorICogRWFjaCB0ZXJtIGNhbiBiZSBjb21wdXRlZCBmcm9tIHRoZSBsYXN0IGJ5IG11bHRpcGx5aW5nIGJ5IHRoZSBleHRyYSBvZGQKKyAqIG51bWJlcnMgcmVxdWlyZWQ6IGUuZy4sIHRvIGdldCBmcm9tIHRoZSBwZW51bHRpbWF0ZSB0ZXJtIHRvIHRoZSBsYXN0IG9uZSwKKyAqIHdlIG11bHRpcGx5IGJ5ICgxMSAqIDEzICogMTUgKiAxNyAqIDE5KS4KKyAqCisgKiBUbyBzZWUgYSBoaW50IG9mIHdoeSB0aGlzIGZvcm11bGEgd29ya3MsIGhlcmUgYXJlIHRoZSBzYW1lIG51bWJlcnMgYXMgYWJvdmUKKyAqIGJ1dCB3aXRoIHRoZSBldmVuIHBhcnRzIChpLmUuLCB0aGUgYXBwcm9wcmlhdGUgcG93ZXJzIG9mIDIpIGluY2x1ZGVkLiAgRm9yCisgKiBlYWNoIHN1YnRlcm0gaW4gdGhlIHByb2R1Y3QgZm9yIGksIHdlIG11bHRpcGx5IHRoYXQgc3VidGVybSBieSAyKippOgorICoKKyAqICAgZmFjdG9yaWFsKDIwKSA9CisgKgorICogICAgICAgICgxNikgKgorICogICAgICAgICg4KSAqCisgKiAgICAgICAgKDQgKiAxMiAqIDIwKSAqCisgKiAgICAgICAgKDIgKiA2ICogMTAgKiAxNCAqIDE4KSAqCisgKiAgICAgICAgKDEgKiAzICogNSAqIDcgKiA5ICogMTEgKiAxMyAqIDE1ICogMTcgKiAxOSkKKyAqCisgKiBUaGUgZmFjdG9yaWFsX3BhcnRpYWxfcHJvZHVjdCBmdW5jdGlvbiBjb21wdXRlcyB0aGUgcHJvZHVjdCBvZiBhbGwgb2RkIGogaW4KKyAqIHJhbmdlKHN0YXJ0LCBzdG9wKSBmb3IgZ2l2ZW4gc3RhcnQgYW5kIHN0b3AuICBJdCdzIHVzZWQgdG8gY29tcHV0ZSB0aGUKKyAqIHBhcnRpYWwgcHJvZHVjdHMgbGlrZSAoMTEgKiAxMyAqIDE1ICogMTcgKiAxOSkgaW4gdGhlIGV4YW1wbGUgYWJvdmUuICBJdAorICogb3BlcmF0ZXMgcmVjdXJzaXZlbHksIHJlcGVhdGVkbHkgc3BsaXR0aW5nIHRoZSByYW5nZSBpbnRvIHR3byByb3VnaGx5IGVxdWFsCisgKiBwaWVjZXMgdW50aWwgdGhlIHN1YnJhbmdlcyBhcmUgc21hbGwgZW5vdWdoIHRvIGJlIGNvbXB1dGVkIHVzaW5nIG9ubHkgQworICogaW50ZWdlciBhcml0aG1ldGljLgorICoKKyAqIFRoZSB0d28tdmFsdWF0aW9uIGsgKGkuZS4sIHRoZSBleHBvbmVudCBvZiB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGRpdmlkaW5nCisgKiB0aGUgZmFjdG9yaWFsKSBpcyBjb21wdXRlZCBpbmRlcGVuZGVudGx5IGluIHRoZSBtYWluIG1hdGhfZmFjdG9yaWFsCisgKiBmdW5jdGlvbi4gIEJ5IHN0YW5kYXJkIHJlc3VsdHMsIGl0cyB2YWx1ZSBpczoKKyAqCisgKiAgICB0d29fdmFsdWF0aW9uID0gbi8vMiArIG4vLzQgKyBuLy84ICsgLi4uLgorICoKKyAqIEl0IGNhbiBiZSBzaG93biAoZS5nLiwgYnkgY29tcGxldGUgaW5kdWN0aW9uIG9uIG4pIHRoYXQgdHdvX3ZhbHVhdGlvbiBpcworICogZXF1YWwgdG8gbiAtIGNvdW50X3NldF9iaXRzKG4pLCB3aGVyZSBjb3VudF9zZXRfYml0cyhuKSBnaXZlcyB0aGUgbnVtYmVyIG9mCisgKiAnMSctYml0cyBpbiB0aGUgYmluYXJ5IGV4cGFuc2lvbiBvZiBuLgorICovCisKKy8qIGZhY3RvcmlhbF9wYXJ0aWFsX3Byb2R1Y3Q6IENvbXB1dGUgcHJvZHVjdChyYW5nZShzdGFydCwgc3RvcCwgMikpIHVzaW5nCisgKiBkaXZpZGUgYW5kIGNvbnF1ZXIuICBBc3N1bWVzIHN0YXJ0IGFuZCBzdG9wIGFyZSBvZGQgYW5kIHN0b3AgPiBzdGFydC4KKyAqIG1heF9iaXRzIG11c3QgYmUgPj0gYml0X2xlbmd0aChzdG9wIC0gMikuICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitmYWN0b3JpYWxfcGFydGlhbF9wcm9kdWN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc3RvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXhfYml0cykKK3sKKyAgICB1bnNpZ25lZCBsb25nIG1pZHBvaW50LCBudW1fb3BlcmFuZHM7CisgICAgUHlPYmplY3QgKmxlZnQgPSBOVUxMLCAqcmlnaHQgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKKworICAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBmaXQgYW4gdW5zaWduZWQgbG9uZywgdGhlbiB3ZSBjYW4KKyAgICAgKiBtdWx0aXBseSBpbiBhIHRpZ2h0LCBmYXN0IGxvb3Agd2hlcmUgZWFjaCBtdWx0aXBseSBpcyBPKDEpLgorICAgICAqIENvbXB1dGUgYW4gdXBwZXIgYm91bmQgb24gdGhlIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlCisgICAgICogdGhlIGFuc3dlci4KKyAgICAgKgorICAgICAqIFN0b3Jpbmcgc29tZSBpbnRlZ2VyIHogcmVxdWlyZXMgZmxvb3IobGcoeikpKzEgYml0cywgd2hpY2ggaXMKKyAgICAgKiBjb252ZW5pZW50bHkgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGJpdF9sZW5ndGgoeikuICBUaGUKKyAgICAgKiBwcm9kdWN0IHgqeSB3aWxsIHJlcXVpcmUgYXQgbW9zdAorICAgICAqIGJpdF9sZW5ndGgoeCkgKyBiaXRfbGVuZ3RoKHkpIGJpdHMgdG8gc3RvcmUsIGJhc2VkCisgICAgICogb24gdGhlIGlkZWEgdGhhdCBsZyBwcm9kdWN0ID0gbGcgeCArIGxnIHkuCisgICAgICoKKyAgICAgKiBXZSBrbm93IHRoYXQgc3RvcCAtIDIgaXMgdGhlIGxhcmdlc3QgbnVtYmVyIHRvIGJlIG11bHRpcGxpZWQuICBGcm9tCisgICAgICogdGhlcmUsIHdlIGhhdmU6IGJpdF9sZW5ndGgoYW5zd2VyKSA8PSBudW1fb3BlcmFuZHMgKgorICAgICAqIGJpdF9sZW5ndGgoc3RvcCAtIDIpCisgICAgICovCisKKyAgICBudW1fb3BlcmFuZHMgPSAoc3RvcCAtIHN0YXJ0KSAvIDI7CisgICAgLyogVGhlICJudW1fb3BlcmFuZHMgPD0gOCAqIFNJWkVPRl9MT05HIiBjaGVjayBndWFyZHMgYWdhaW5zdCB0aGUKKyAgICAgKiB1bmxpa2VseSBjYXNlIG9mIGFuIG92ZXJmbG93IGluIG51bV9vcGVyYW5kcyAqIG1heF9iaXRzLiAqLworICAgIGlmIChudW1fb3BlcmFuZHMgPD0gOCAqIFNJWkVPRl9MT05HICYmCisgICAgICAgIG51bV9vcGVyYW5kcyAqIG1heF9iaXRzIDw9IDggKiBTSVpFT0ZfTE9ORykgeworICAgICAgICB1bnNpZ25lZCBsb25nIGosIHRvdGFsOworICAgICAgICBmb3IgKHRvdGFsID0gc3RhcnQsIGogPSBzdGFydCArIDI7IGogPCBzdG9wOyBqICs9IDIpCisgICAgICAgICAgICB0b3RhbCAqPSBqOworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcodG90YWwpOworICAgIH0KKworICAgIC8qIGZpbmQgbWlkcG9pbnQgb2YgcmFuZ2Uoc3RhcnQsIHN0b3ApLCByb3VuZGVkIHVwIHRvIG5leHQgb2RkIG51bWJlci4gKi8KKyAgICBtaWRwb2ludCA9IChzdGFydCArIG51bV9vcGVyYW5kcykgfCAxOworICAgIGxlZnQgPSBmYWN0b3JpYWxfcGFydGlhbF9wcm9kdWN0KHN0YXJ0LCBtaWRwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRfbGVuZ3RoKG1pZHBvaW50IC0gMikpOworICAgIGlmIChsZWZ0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcmlnaHQgPSBmYWN0b3JpYWxfcGFydGlhbF9wcm9kdWN0KG1pZHBvaW50LCBzdG9wLCBtYXhfYml0cyk7CisgICAgaWYgKHJpZ2h0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcmVzdWx0ID0gUHlOdW1iZXJfTXVsdGlwbHkobGVmdCwgcmlnaHQpOworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYobGVmdCk7CisgICAgUHlfWERFQ1JFRihyaWdodCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogZmFjdG9yaWFsX29kZF9wYXJ0OiAgY29tcHV0ZSB0aGUgb2RkIHBhcnQgb2YgZmFjdG9yaWFsKG4pLiAqLworCitzdGF0aWMgUHlPYmplY3QgKgorZmFjdG9yaWFsX29kZF9wYXJ0KHVuc2lnbmVkIGxvbmcgbikKK3sKKyAgICBsb25nIGk7CisgICAgdW5zaWduZWQgbG9uZyB2LCBsb3dlciwgdXBwZXI7CisgICAgUHlPYmplY3QgKnBhcnRpYWwsICp0bXAsICppbm5lciwgKm91dGVyOworCisgICAgaW5uZXIgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CisgICAgaWYgKGlubmVyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG91dGVyID0gaW5uZXI7CisgICAgUHlfSU5DUkVGKG91dGVyKTsKKworICAgIHVwcGVyID0gMzsKKyAgICBmb3IgKGkgPSBiaXRfbGVuZ3RoKG4pIC0gMjsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgdiA9IG4gPj4gaTsKKyAgICAgICAgaWYgKHYgPD0gMikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBsb3dlciA9IHVwcGVyOworICAgICAgICAvKiAodiArIDEpIHwgMSA9IGxlYXN0IG9kZCBpbnRlZ2VyIHN0cmljdGx5IGxhcmdlciB0aGFuIG4gLyAyKippICovCisgICAgICAgIHVwcGVyID0gKHYgKyAxKSB8IDE7CisgICAgICAgIC8qIEhlcmUgaW5uZXIgaXMgdGhlIHByb2R1Y3Qgb2YgYWxsIG9kZCBpbnRlZ2VycyBqIGluIHRoZSByYW5nZSAoMCwKKyAgICAgICAgICAgbi8yKiooaSsxKV0uICBUaGUgZmFjdG9yaWFsX3BhcnRpYWxfcHJvZHVjdCBjYWxsIGJlbG93IGdpdmVzIHRoZQorICAgICAgICAgICBwcm9kdWN0IG9mIGFsbCBvZGQgaW50ZWdlcnMgaiBpbiB0aGUgcmFuZ2UgKG4vMioqKGkrMSksIG4vMioqaV0uICovCisgICAgICAgIHBhcnRpYWwgPSBmYWN0b3JpYWxfcGFydGlhbF9wcm9kdWN0KGxvd2VyLCB1cHBlciwgYml0X2xlbmd0aCh1cHBlci0yKSk7CisgICAgICAgIC8qIGlubmVyICo9IHBhcnRpYWwgKi8KKyAgICAgICAgaWYgKHBhcnRpYWwgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHRtcCA9IFB5TnVtYmVyX011bHRpcGx5KGlubmVyLCBwYXJ0aWFsKTsKKyAgICAgICAgUHlfREVDUkVGKHBhcnRpYWwpOworICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9ERUNSRUYoaW5uZXIpOworICAgICAgICBpbm5lciA9IHRtcDsKKyAgICAgICAgLyogTm93IGlubmVyIGlzIHRoZSBwcm9kdWN0IG9mIGFsbCBvZGQgaW50ZWdlcnMgaiBpbiB0aGUgcmFuZ2UgKDAsCisgICAgICAgICAgIG4vMioqaV0sIGdpdmluZyB0aGUgaW5uZXIgcHJvZHVjdCBpbiB0aGUgZm9ybXVsYSBhYm92ZS4gKi8KKworICAgICAgICAvKiBvdXRlciAqPSBpbm5lcjsgKi8KKyAgICAgICAgdG1wID0gUHlOdW1iZXJfTXVsdGlwbHkob3V0ZXIsIGlubmVyKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfREVDUkVGKG91dGVyKTsKKyAgICAgICAgb3V0ZXIgPSB0bXA7CisgICAgfQorCisgICAgZ290byBkb25lOworCisgIGVycm9yOgorICAgIFB5X0RFQ1JFRihvdXRlcik7CisgIGRvbmU6CisgICAgUHlfREVDUkVGKGlubmVyKTsKKyAgICByZXR1cm4gb3V0ZXI7Cit9CisKKy8qIExvb2t1cCB0YWJsZSBmb3Igc21hbGwgZmFjdG9yaWFsIHZhbHVlcyAqLworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBTbWFsbEZhY3RvcmlhbHNbXSA9IHsKKyAgICAxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDAsIDQwMzIwLAorICAgIDM2Mjg4MCwgMzYyODgwMCwgMzk5MTY4MDAsIDQ3OTAwMTYwMCwKKyNpZiBTSVpFT0ZfTE9ORyA+PSA4CisgICAgNjIyNzAyMDgwMCwgODcxNzgyOTEyMDAsIDEzMDc2NzQzNjgwMDAsCisgICAgMjA5MjI3ODk4ODgwMDAsIDM1NTY4NzQyODA5NjAwMCwgNjQwMjM3MzcwNTcyODAwMCwKKyAgICAxMjE2NDUxMDA0MDg4MzIwMDAsIDI0MzI5MDIwMDgxNzY2NDAwMDAKKyNlbmRpZgorfTsKKwogc3RhdGljIFB5T2JqZWN0ICoKIG1hdGhfZmFjdG9yaWFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotICAgIGxvbmcgaSwgeDsKLSAgICBQeU9iamVjdCAqcmVzdWx0LCAqaW9iaiwgKm5ld3Jlc3VsdDsKKyAgICBsb25nIHg7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKm9kZF9wYXJ0LCAqdHdvX3ZhbHVhdGlvbjsKIAogICAgIGlmIChQeUZsb2F0X0NoZWNrKGFyZykpIHsKKyAgICAgICAgUHlPYmplY3QgKmx4OwogICAgICAgICBkb3VibGUgZHggPSBQeUZsb2F0X0FTX0RPVUJMRSgoUHlGbG9hdE9iamVjdCAqKWFyZyk7Ci0gICAgICAgIGlmIChkeCAhPSBmbG9vcihkeCkpIHsKKyAgICAgICAgaWYgKCEoUHlfSVNfRklOSVRFKGR4KSAmJiBkeCA9PSBmbG9vcihkeCkpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiZmFjdG9yaWFsKCkgb25seSBhY2NlcHRzIGludGVncmFsIHZhbHVlcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWN0b3JpYWwoKSBvbmx5IGFjY2VwdHMgaW50ZWdyYWwgdmFsdWVzIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBseCA9IFB5TG9uZ19Gcm9tRG91YmxlKGR4KTsKKyAgICAgICAgaWYgKGx4ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmcobHgpOworICAgICAgICBQeV9ERUNSRUYobHgpOwogICAgIH0KKyAgICBlbHNlCisgICAgICAgIHggPSBQeUxvbmdfQXNMb25nKGFyZyk7CiAKLSAgICB4ID0gUHlMb25nX0FzTG9uZyhhcmcpOwogICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICh4IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICJmYWN0b3JpYWwoKSBub3QgZGVmaW5lZCBmb3IgbmVnYXRpdmUgdmFsdWVzIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yaWFsKCkgbm90IGRlZmluZWQgZm9yIG5lZ2F0aXZlIHZhbHVlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXN1bHQgPSAoUHlPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoMSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIC8qIHVzZSBsb29rdXAgdGFibGUgaWYgeCBpcyBzbWFsbCAqLworICAgIGlmICh4IDwgKGxvbmcpKHNpemVvZihTbWFsbEZhY3RvcmlhbHMpL3NpemVvZihTbWFsbEZhY3RvcmlhbHNbMF0pKSkKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKFNtYWxsRmFjdG9yaWFsc1t4XSk7CisKKyAgICAvKiBlbHNlIGV4cHJlc3MgaW4gdGhlIGZvcm0gb2RkX3BhcnQgKiAyKip0d29fdmFsdWF0aW9uLCBhbmQgY29tcHV0ZSBhcworICAgICAgIG9kZF9wYXJ0IDw8IHR3b192YWx1YXRpb24uICovCisgICAgb2RkX3BhcnQgPSBmYWN0b3JpYWxfb2RkX3BhcnQoeCk7CisgICAgaWYgKG9kZF9wYXJ0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvciAoaT0xIDsgaTw9eCA7IGkrKykgewotICAgICAgICBpb2JqID0gKFB5T2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKGkpOwotICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgbmV3cmVzdWx0ID0gUHlOdW1iZXJfTXVsdGlwbHkocmVzdWx0LCBpb2JqKTsKLSAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICBpZiAobmV3cmVzdWx0ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgcmVzdWx0ID0gbmV3cmVzdWx0OworICAgIHR3b192YWx1YXRpb24gPSBQeUxvbmdfRnJvbUxvbmcoeCAtIGNvdW50X3NldF9iaXRzKHgpKTsKKyAgICBpZiAodHdvX3ZhbHVhdGlvbiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihvZGRfcGFydCk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICByZXN1bHQgPSBQeU51bWJlcl9Mc2hpZnQob2RkX3BhcnQsIHR3b192YWx1YXRpb24pOworICAgIFB5X0RFQ1JFRih0d29fdmFsdWF0aW9uKTsKKyAgICBQeV9ERUNSRUYob2RkX3BhcnQpOwogICAgIHJldHVybiByZXN1bHQ7Ci0KLWVycm9yOgotICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIobWF0aF9mYWN0b3JpYWxfZG9jLApAQCAtNjk0LDI3ICsxNDEyLDI0IEBACiBtYXRoX3RydW5jKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbnVtYmVyKQogewogICAgIHN0YXRpYyBQeU9iamVjdCAqdHJ1bmNfc3RyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdHJ1bmM7CisgICAgUHlPYmplY3QgKnRydW5jLCAqcmVzdWx0OwogCiAgICAgaWYgKFB5X1RZUEUobnVtYmVyKS0+dHBfZGljdCA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChQeVR5cGVfUmVhZHkoUHlfVFlQRShudW1iZXIpKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAodHJ1bmNfc3RyID09IE5VTEwpIHsKLSAgICAgICAgdHJ1bmNfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fdHJ1bmNfXyIpOwotICAgICAgICBpZiAodHJ1bmNfc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0cnVuYyA9IF9QeVR5cGVfTG9va3VwKFB5X1RZUEUobnVtYmVyKSwgdHJ1bmNfc3RyKTsKKyAgICB0cnVuYyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG51bWJlciwgIl9fdHJ1bmNfXyIsICZ0cnVuY19zdHIpOwogICAgIGlmICh0cnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAidHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX190cnVuY19fIG1ldGhvZCIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3RydW5jX18gbWV0aG9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG51bWJlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModHJ1bmMsIG51bWJlciwgTlVMTCk7CisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyh0cnVuYywgTlVMTCk7CisgICAgUHlfREVDUkVGKHRydW5jKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBQeURvY19TVFJWQVIobWF0aF90cnVuY19kb2MsCkBAIC03NTUsMjggKzE0NzAsMTggQEAKICAgICBkb3VibGUgeCwgcjsKICAgICBQeU9iamVjdCAqb2V4cDsKICAgICBsb25nIGV4cDsKKyAgICBpbnQgb3ZlcmZsb3c7CiAgICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZE86bGRleHAiLCAmeCwgJm9leHApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeUxvbmdfQ2hlY2sob2V4cCkpIHsKICAgICAgICAgLyogb24gb3ZlcmZsb3csIHJlcGxhY2UgZXhwb25lbnQgd2l0aCBlaXRoZXIgTE9OR19NQVgKICAgICAgICAgICAgb3IgTE9OR19NSU4sIGRlcGVuZGluZyBvbiB0aGUgc2lnbi4gKi8KLSAgICAgICAgZXhwID0gUHlMb25nX0FzTG9uZyhvZXhwKTsKLSAgICAgICAgaWYgKGV4cCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkgewotICAgICAgICAgICAgICAgIGlmIChQeV9TSVpFKG9leHApIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBleHAgPSBMT05HX01JTjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4cCA9IExPTkdfTUFYOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogcHJvcGFnYXRlIGFueSB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGV4cCA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvZXhwLCAmb3ZlcmZsb3cpOworICAgICAgICBpZiAoZXhwID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKG92ZXJmbG93KQorICAgICAgICAgICAgZXhwID0gb3ZlcmZsb3cgPCAwID8gTE9OR19NSU4gOiBMT05HX01BWDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCkBAIC04NDUsMzEgKzE1NTAsNDUgQEAKIAogLyogQSBkZWNlbnQgbG9nYXJpdGhtIGlzIGVhc3kgdG8gY29tcHV0ZSBldmVuIGZvciBodWdlIGxvbmdzLCBidXQgbGlibSBjYW4ndAogICAgZG8gdGhhdCBieSBpdHNlbGYgLS0gbG9naGVscGVyIGNhbi4gIGZ1bmMgaXMgbG9nIG9yIGxvZzEwLCBhbmQgbmFtZSBpcwotICAgImxvZyIgb3IgImxvZzEwIi4gIE5vdGUgdGhhdCBvdmVyZmxvdyBpc24ndCBwb3NzaWJsZTogIGEgbG9uZyBjYW4gY29udGFpbgotICAgbm8gbW9yZSB0aGFuIElOVF9NQVggKiBTSElGVCBiaXRzLCBzbyBoYXMgdmFsdWUgY2VydGFpbmx5IGxlc3MgdGhhbgotICAgMioqKDIqKjY0ICogMioqMTYpID09IDIqKjIqKjgwLCBhbmQgbG9nMiBvZiB0aGF0IGlzIDIqKjgwLCB3aGljaCBpcworICAgImxvZyIgb3IgImxvZzEwIi4gIE5vdGUgdGhhdCBvdmVyZmxvdyBvZiB0aGUgcmVzdWx0IGlzbid0IHBvc3NpYmxlOiBhIGxvbmcKKyAgIGNhbiBjb250YWluIG5vIG1vcmUgdGhhbiBJTlRfTUFYICogU0hJRlQgYml0cywgc28gaGFzIHZhbHVlIGNlcnRhaW5seSBsZXNzCisgICB0aGFuIDIqKigyKio2NCAqIDIqKjE2KSA9PSAyKioyKio4MCwgYW5kIGxvZzIgb2YgdGhhdCBpcyAyKio4MCwgd2hpY2ggaXMKICAgIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYW4gSUVFRSBzaW5nbGUuICBsb2cgYW5kIGxvZzEwIGFyZSBldmVuIHNtYWxsZXIuCi0qLworICAgSG93ZXZlciwgaW50ZXJtZWRpYXRlIG92ZXJmbG93IGlzIHBvc3NpYmxlIGZvciBhIGxvbmcgaWYgdGhlIG51bWJlciBvZiBiaXRzCisgICBpbiB0aGF0IGxvbmcgaXMgbGFyZ2VyIHRoYW4gUFlfU1NJWkVfVF9NQVguICovCiAKIHN0YXRpYyBQeU9iamVjdCoKIGxvZ2hlbHBlcihQeU9iamVjdCogYXJnLCBkb3VibGUgKCpmdW5jKShkb3VibGUpLCBjaGFyICpmdW5jbmFtZSkKIHsKICAgICAvKiBJZiBpdCBpcyBsb25nLCBkbyBpdCBvdXJzZWx2ZXMuICovCiAgICAgaWYgKFB5TG9uZ19DaGVjayhhcmcpKSB7Ci0gICAgICAgIGRvdWJsZSB4OwotICAgICAgICBpbnQgZTsKLSAgICAgICAgeCA9IF9QeUxvbmdfQXNTY2FsZWREb3VibGUoYXJnLCAmZSk7Ci0gICAgICAgIGlmICh4IDw9IDAuMCkgeworICAgICAgICBkb3VibGUgeCwgcmVzdWx0OworICAgICAgICBQeV9zc2l6ZV90IGU7CisKKyAgICAgICAgLyogTmVnYXRpdmUgb3IgemVybyBpbnB1dHMgZ2l2ZSBhIFZhbHVlRXJyb3IuICovCisgICAgICAgIGlmIChQeV9TSVpFKGFyZykgPD0gMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hdGggZG9tYWluIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICAvKiBWYWx1ZSBpcyB+PSB4ICogMioqKGUqUHlMb25nX1NISUZUKSwgc28gdGhlIGxvZyB+PQotICAgICAgICAgICBsb2coeCkgKyBsb2coMikgKiBlICogUHlMb25nX1NISUZULgotICAgICAgICAgICBDQVVUSU9OOiAgZSpQeUxvbmdfU0hJRlQgbWF5IG92ZXJmbG93IHVzaW5nIGludCBhcml0aG1ldGljLAotICAgICAgICAgICBzbyBmb3JjZSB1c2Ugb2YgZG91YmxlLiAqLwotICAgICAgICB4ID0gZnVuYyh4KSArIChlICogKGRvdWJsZSlQeUxvbmdfU0hJRlQpICogZnVuYygyLjApOwotICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOworCisgICAgICAgIHggPSBQeUxvbmdfQXNEb3VibGUoYXJnKTsKKyAgICAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAvKiBIZXJlIHRoZSBjb252ZXJzaW9uIHRvIGRvdWJsZSBvdmVyZmxvd2VkLCBidXQgaXQncyBwb3NzaWJsZQorICAgICAgICAgICAgICAgdG8gY29tcHV0ZSB0aGUgbG9nIGFueXdheS4gIENsZWFyIHRoZSBleGNlcHRpb24gYW5kIGNvbnRpbnVlLiAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHggPSBfUHlMb25nX0ZyZXhwKChQeUxvbmdPYmplY3QgKilhcmcsICZlKTsKKyAgICAgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIC8qIFZhbHVlIGlzIH49IHggKiAyKiplLCBzbyB0aGUgbG9nIH49IGxvZyh4KSArIGxvZygyKSAqIGUuICovCisgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHgpICsgZnVuYygyLjApICogZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICAvKiBTdWNjZXNzZnVsbHkgY29udmVydGVkIHggdG8gYSBkb3VibGUuICovCisgICAgICAgICAgICByZXN1bHQgPSBmdW5jKHgpOworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKHJlc3VsdCk7CiAgICAgfQogCiAgICAgLyogRWxzZSBsZXQgbGlibSBoYW5kbGUgaXQgYnkgaXRzZWxmLiAqLwpAQCAtMTEwOSw2ICsxODI4LDE5IEBACiBDb252ZXJ0IGFuZ2xlIHggZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCittYXRoX2lzZmluaXRlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQoreworICAgIGRvdWJsZSB4ID0gUHlGbG9hdF9Bc0RvdWJsZShhcmcpOworICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZylQeV9JU19GSU5JVEUoeCkpOworfQorCitQeURvY19TVFJWQVIobWF0aF9pc2Zpbml0ZV9kb2MsCisiaXNmaW5pdGUoeCkgLT4gYm9vbFxuXG5cCitSZXR1cm4gVHJ1ZSBpZiB4IGlzIG5laXRoZXIgYW4gaW5maW5pdHkgbm9yIGEgTmFOLCBhbmQgRmFsc2Ugb3RoZXJ3aXNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgogbWF0aF9pc25hbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKICAgICBkb3VibGUgeCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKQEAgLTExMTksNyArMTg1MSw3IEBACiAKIFB5RG9jX1NUUlZBUihtYXRoX2lzbmFuX2RvYywKICJpc25hbih4KSAtPiBib29sXG5cblwKLUNoZWNrIGlmIGZsb2F0IHggaXMgbm90IGEgbnVtYmVyIChOYU4pLiIpOworUmV0dXJuIFRydWUgaWYgeCBpcyBhIE5hTiAobm90IGEgbnVtYmVyKSwgYW5kIEZhbHNlIG90aGVyd2lzZS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIG1hdGhfaXNpbmYoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmcpCkBAIC0xMTMyLDcgKzE4NjQsNyBAQAogCiBQeURvY19TVFJWQVIobWF0aF9pc2luZl9kb2MsCiAiaXNpbmYoeCkgLT4gYm9vbFxuXG5cCi1DaGVjayBpZiBmbG9hdCB4IGlzIGluZmluaXRlIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkuIik7CitSZXR1cm4gVHJ1ZSBpZiB4IGlzIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgaW5maW5pdHksIGFuZCBGYWxzZSBvdGhlcndpc2UuIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXRoX21ldGhvZHNbXSA9IHsKICAgICB7ImFjb3MiLCAgICAgICAgICAgIG1hdGhfYWNvcywgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9hY29zX2RvY30sCkBAIC0xMTQ3LDE3ICsxODc5LDIzIEBACiAgICAgeyJjb3MiLCAgICAgICAgICAgICBtYXRoX2NvcywgICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfY29zX2RvY30sCiAgICAgeyJjb3NoIiwgICAgICAgICAgICBtYXRoX2Nvc2gsICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfY29zaF9kb2N9LAogICAgIHsiZGVncmVlcyIsICAgICAgICAgbWF0aF9kZWdyZWVzLCAgIE1FVEhfTywgICAgICAgICBtYXRoX2RlZ3JlZXNfZG9jfSwKKyAgICB7ImVyZiIsICAgICAgICAgICAgIG1hdGhfZXJmLCAgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9lcmZfZG9jfSwKKyAgICB7ImVyZmMiLCAgICAgICAgICAgIG1hdGhfZXJmYywgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9lcmZjX2RvY30sCiAgICAgeyJleHAiLCAgICAgICAgICAgICBtYXRoX2V4cCwgICAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXhwX2RvY30sCisgICAgeyJleHBtMSIsICAgICAgICAgICBtYXRoX2V4cG0xLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZXhwbTFfZG9jfSwKICAgICB7ImZhYnMiLCAgICAgICAgICAgIG1hdGhfZmFicywgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9mYWJzX2RvY30sCiAgICAgeyJmYWN0b3JpYWwiLCAgICAgICBtYXRoX2ZhY3RvcmlhbCwgTUVUSF9PLCAgICAgICAgIG1hdGhfZmFjdG9yaWFsX2RvY30sCiAgICAgeyJmbG9vciIsICAgICAgICAgICBtYXRoX2Zsb29yLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZmxvb3JfZG9jfSwKICAgICB7ImZtb2QiLCAgICAgICAgICAgIG1hdGhfZm1vZCwgICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9mbW9kX2RvY30sCiAgICAgeyJmcmV4cCIsICAgICAgICAgICBtYXRoX2ZyZXhwLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZnJleHBfZG9jfSwKICAgICB7ImZzdW0iLCAgICAgICAgICAgIG1hdGhfZnN1bSwgICAgICBNRVRIX08sICAgICAgICAgbWF0aF9mc3VtX2RvY30sCisgICAgeyJnYW1tYSIsICAgICAgICAgICBtYXRoX2dhbW1hLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfZ2FtbWFfZG9jfSwKICAgICB7Imh5cG90IiwgICAgICAgICAgIG1hdGhfaHlwb3QsICAgICBNRVRIX1ZBUkFSR1MsICAgbWF0aF9oeXBvdF9kb2N9LAorICAgIHsiaXNmaW5pdGUiLCAgICAgICAgbWF0aF9pc2Zpbml0ZSwgIE1FVEhfTywgICAgICAgICBtYXRoX2lzZmluaXRlX2RvY30sCiAgICAgeyJpc2luZiIsICAgICAgICAgICBtYXRoX2lzaW5mLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfaXNpbmZfZG9jfSwKICAgICB7ImlzbmFuIiwgICAgICAgICAgIG1hdGhfaXNuYW4sICAgICBNRVRIX08sICAgICAgICAgbWF0aF9pc25hbl9kb2N9LAogICAgIHsibGRleHAiLCAgICAgICAgICAgbWF0aF9sZGV4cCwgICAgIE1FVEhfVkFSQVJHUywgICBtYXRoX2xkZXhwX2RvY30sCisgICAgeyJsZ2FtbWEiLCAgICAgICAgICBtYXRoX2xnYW1tYSwgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfbGdhbW1hX2RvY30sCiAgICAgeyJsb2ciLCAgICAgICAgICAgICBtYXRoX2xvZywgICAgICAgTUVUSF9WQVJBUkdTLCAgIG1hdGhfbG9nX2RvY30sCiAgICAgeyJsb2cxcCIsICAgICAgICAgICBtYXRoX2xvZzFwLCAgICAgTUVUSF9PLCAgICAgICAgIG1hdGhfbG9nMXBfZG9jfSwKICAgICB7ImxvZzEwIiwgICAgICAgICAgIG1hdGhfbG9nMTAsICAgICBNRVRIX08sICAgICAgICAgbWF0aF9sb2cxMF9kb2N9LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tZDVtb2R1bGUuYyBiL01vZHVsZXMvbWQ1bW9kdWxlLmMKaW5kZXggZDIxN2RjOC4uMjA4OTMwZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tZDVtb2R1bGUuYworKysgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCkBAIC0yMjgsOSArMjI4LDkgQEAKICAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQogKi8KIHZvaWQgbWQ1X3Byb2Nlc3Moc3RydWN0IG1kNV9zdGF0ZSAqbWQ1LAotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKQorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCBQeV9zc2l6ZV90IGlubGVuKQogewotICAgIHVuc2lnbmVkIGxvbmcgbjsKKyAgICBQeV9zc2l6ZV90IG47CiAKICAgICBhc3NlcnQobWQ1ICE9IE5VTEwpOwogICAgIGFzc2VydChpbiAhPSBOVUxMKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvbW1hcG1vZHVsZS5jIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKaW5kZXggODhkYTRhMC4uMzZjYTY3ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tbWFwbW9kdWxlLmMKQEAgLTEzMiw4ICsxMzIsNiBAQAogICAgIGlmIChtX29iai0+ZmQgPj0gMCkKICAgICAgICAgKHZvaWQpIGNsb3NlKG1fb2JqLT5mZCk7CiAgICAgaWYgKG1fb2JqLT5kYXRhIT1OVUxMKSB7Ci0gICAgICAgIGlmIChtX29iai0+YWNjZXNzICE9IEFDQ0VTU19SRUFEICYmIG1fb2JqLT5hY2Nlc3MgIT0gQUNDRVNTX0NPUFkpCi0gICAgICAgICAgICBtc3luYyhtX29iai0+ZGF0YSwgbV9vYmotPnNpemUsIE1TX1NZTkMpOwogICAgICAgICBtdW5tYXAobV9vYmotPmRhdGEsIG1fb2JqLT5zaXplKTsKICAgICB9CiAjZW5kaWYgLyogVU5JWCAqLwpAQCAtNjYwLDYgKzY1OCwzMSBAQAogICAgIH0KIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK21tYXBfY2xvc2VkX2dldChtbWFwX29iamVjdCAqc2VsZikKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT5tYXBfaGFuZGxlID09IE5VTEwgPyAxIDogMCk7CisjZWxpZiBkZWZpbmVkKFVOSVgpCisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT5kYXRhID09IE5VTEwgPyAxIDogMCk7CisjZW5kaWYKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21tYXBfX2VudGVyX19tZXRob2QobW1hcF9vYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIENIRUNLX1ZBTElEKE5VTEwpOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbW1hcF9fZXhpdF9fbWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAiY2xvc2UiLCBOVUxMKTsKK30KKwogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBtbWFwX29iamVjdF9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfY2xvc2VfbWV0aG9kLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiZmluZCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX2ZpbmRfbWV0aG9kLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC02NzUsOSArNjk4LDE3IEBACiAgICAgeyJ0ZWxsIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfdGVsbF9tZXRob2QsICAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX3dyaXRlX21ldGhvZCwgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ3cml0ZV9ieXRlIiwgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfd3JpdGVfYnl0ZV9tZXRob2QsICAgTUVUSF9WQVJBUkdTfSwKKyAgICB7Il9fZW50ZXJfXyIsICAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9fZW50ZXJfX21ldGhvZCwgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJfX2V4aXRfXyIsICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfX2V4aXRfX21ldGhvZCwgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7TlVMTCwgICAgICAgICBOVUxMfSAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAorc3RhdGljIFB5R2V0U2V0RGVmIG1tYXBfb2JqZWN0X2dldHNldFtdID0geworICAgIHsiY2xvc2VkIiwgKGdldHRlcikgbW1hcF9jbG9zZWRfZ2V0LCBOVUxMLCBOVUxMfSwKKyAgICB7TlVMTH0KK307CisKKwogLyogRnVuY3Rpb25zIGZvciB0cmVhdGluZyBhbiBtbWFwJ2VkIGZpbGUgYXMgYSBidWZmZXIgKi8KIAogc3RhdGljIGludApAQCAtNzM1LDcgKzc2Niw3IEBACiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpdGVtKSkgewogICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbjsKIAotICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QgKilpdGVtLCBzZWxmLT5zaXplLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwgc2VsZi0+c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuKSA8IDApIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC04NjEsNyArODkyLDcgQEAKICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW47CiAgICAgICAgIFB5X2J1ZmZlciB2YnVmOwogCi0gICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCAqKWl0ZW0sCisgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpdGVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+c2l6ZSwgJnN0YXJ0LCAmc3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtOTg0LDcgKzEwMTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtbWFwX29iamVjdF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLworICAgIG1tYXBfb2JqZWN0X2dldHNldCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvbmlzbW9kdWxlLmMgYi9Nb2R1bGVzL25pc21vZHVsZS5jCmluZGV4IGQ3NWFmNWQuLmE4MWNhOGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbmlzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9uaXNtb2R1bGUuYwpAQCAtMTE3LDggKzExNyw4IEBACiAgICAgICAgICAgICBpZiAoaW52YWxsZW4gPiAwICYmIGludmFsW2ludmFsbGVuLTFdID09ICdcMCcpCiAgICAgICAgICAgICBpbnZhbGxlbi0tOwogICAgICAgICB9Ci0gICAgICAgIGtleSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShpbmtleSwgaW5rZXlsZW4pOwotICAgICAgICB2YWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoaW52YWwsIGludmFsbGVuKTsKKyAgICAgICAga2V5ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoaW5rZXksIGlua2V5bGVuKTsKKyAgICAgICAgdmFsID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoaW52YWwsIGludmFsbGVuKTsKICAgICAgICAgaWYgKGtleSA9PSBOVUxMIHx8IHZhbCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKiBYWFggZXJyb3IgLS0gZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICovCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMTU5LDMwICsxNTksNDAgQEAKIHsKICAgICBjaGFyICptYXRjaDsKICAgICBjaGFyICpkb21haW4gPSBOVUxMOwotICAgIGludCBrZXlsZW4sIGxlbjsKKyAgICBQeV9zc2l6ZV90IGtleWxlbjsKKyAgICBpbnQgbGVuOwogICAgIGNoYXIgKmtleSwgKm1hcDsKICAgICBpbnQgZXJyOwotICAgIFB5T2JqZWN0ICpyZXM7CisgICAgUHlPYmplY3QgKnVrZXksICpia2V5LCAqcmVzOwogICAgIGludCBmaXg7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAibWFwIiwgImRvbWFpbiIsIE5VTEx9OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzI3N8czptYXRjaCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LCAma2V5bGVuLCAmbWFwLCAmZG9tYWluKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVXN8czptYXRjaCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdWtleSwgJm1hcCwgJmRvbWFpbikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghZG9tYWluICYmICgoZXJyID0geXBfZ2V0X2RlZmF1bHRfZG9tYWluKCZkb21haW4pKSAhPSAwKSkKKyAgICBpZiAoKGJrZXkgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHVrZXkpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoYmtleSwgJmtleSwgJmtleWxlbikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGJrZXkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKCFkb21haW4gJiYgKChlcnIgPSB5cF9nZXRfZGVmYXVsdF9kb21haW4oJmRvbWFpbikpICE9IDApKSB7CisgICAgICAgIFB5X0RFQ1JFRihia2V5KTsKICAgICAgICAgcmV0dXJuIG5pc19lcnJvcihlcnIpOworICAgIH0KICAgICBtYXAgPSBuaXNfbWFwbmFtZSAobWFwLCAmZml4KTsKICAgICBpZiAoZml4KQogICAgICAgICBrZXlsZW4rKzsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgZXJyID0geXBfbWF0Y2ggKGRvbWFpbiwgbWFwLCBrZXksIGtleWxlbiwgJm1hdGNoLCAmbGVuKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIFB5X0RFQ1JFRihia2V5KTsKICAgICBpZiAoZml4KQogICAgICAgICBsZW4tLTsKICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgIHJldHVybiBuaXNfZXJyb3IoZXJyKTsKLSAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUgKG1hdGNoLCBsZW4pOworICAgIHJlcyA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKG1hdGNoLCBsZW4pOwogICAgIGZyZWUgKG1hdGNoKTsKICAgICByZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vcGVyYXRvci5jIGIvTW9kdWxlcy9vcGVyYXRvci5jCmluZGV4IDhjYTRkMmQuLjg2NmVjM2EgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3BlcmF0b3IuYworKysgYi9Nb2R1bGVzL29wZXJhdG9yLmMKQEAgLTM4Myw3ICszODMsNyBAQAogewogICAgIGF0dHJnZXR0ZXJvYmplY3QgKmFnOwogICAgIFB5T2JqZWN0ICphdHRyOwotICAgIFB5X3NzaXplX3QgbmF0dHJzOworICAgIFB5X3NzaXplX3QgbmF0dHJzLCBpZHgsIGNoYXJfaWR4OwogCiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiYXR0cmdldHRlcigpIiwga3dkcykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzkyLDE1ICszOTIsOTIgQEAKICAgICBpZiAobmF0dHJzIDw9IDEpIHsKICAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiYXR0cmdldHRlciIsIDEsIDEsICZhdHRyKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0gZWxzZQotICAgICAgICBhdHRyID0gYXJnczsKKyAgICB9CisKKyAgICBhdHRyID0gUHlUdXBsZV9OZXcobmF0dHJzKTsKKyAgICBpZiAoYXR0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHByZXBhcmUgYXR0ciB3aGlsZSBjaGVja2luZyBhcmdzICovCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBuYXR0cnM7ICsraWR4KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCBpZHgpOworICAgICAgICBQeV9zc2l6ZV90IGl0ZW1fbGVuOworICAgICAgICBQeV9VTklDT0RFICppdGVtX2J1ZmZlcjsKKyAgICAgICAgaW50IGRvdF9jb3VudDsKKworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZyIpOworICAgICAgICAgICAgUHlfREVDUkVGKGF0dHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaXRlbV9sZW4gPSBQeVVuaWNvZGVfR0VUX1NJWkUoaXRlbSk7CisgICAgICAgIGl0ZW1fYnVmZmVyID0gUHlVbmljb2RlX0FTX1VOSUNPREUoaXRlbSk7CisKKyAgICAgICAgLyogY2hlY2sgd2hldGhlcmUgdGhlIHN0cmluZyBpcyBkb3R0ZWQgKi8KKyAgICAgICAgZG90X2NvdW50ID0gMDsKKyAgICAgICAgZm9yIChjaGFyX2lkeCA9IDA7IGNoYXJfaWR4IDwgaXRlbV9sZW47ICsrY2hhcl9pZHgpIHsKKyAgICAgICAgICAgIGlmIChpdGVtX2J1ZmZlcltjaGFyX2lkeF0gPT0gKFB5X1VOSUNPREUpJy4nKQorICAgICAgICAgICAgICAgICsrZG90X2NvdW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRvdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmaXRlbSk7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGF0dHIsIGlkeCwgaXRlbSk7CisgICAgICAgIH0gZWxzZSB7IC8qIG1ha2UgaXQgYSB0dXBsZSBvZiBub24tZG90dGVkIGF0dHJuYW1lcyAqLworICAgICAgICAgICAgUHlPYmplY3QgKmF0dHJfY2hhaW4gPSBQeVR1cGxlX05ldyhkb3RfY291bnQgKyAxKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICphdHRyX2NoYWluX2l0ZW07CisgICAgICAgICAgICBQeV9zc2l6ZV90IHVuaWJ1ZmZfZnJvbSA9IDA7CisgICAgICAgICAgICBQeV9zc2l6ZV90IHVuaWJ1ZmZfdGlsbCA9IDA7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGF0dHJfY2hhaW5faWR4ID0gMDsKKworICAgICAgICAgICAgaWYgKGF0dHJfY2hhaW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICg7IGRvdF9jb3VudCA+IDA7IC0tZG90X2NvdW50KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGl0ZW1fYnVmZmVyW3VuaWJ1ZmZfdGlsbF0gIT0gKFB5X1VOSUNPREUpJy4nKSB7CisgICAgICAgICAgICAgICAgICAgICsrdW5pYnVmZl90aWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdHRyX2NoYWluX2l0ZW0gPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYnVmZmVyICsgdW5pYnVmZl9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlidWZmX3RpbGwgLSB1bmlidWZmX2Zyb20pOworICAgICAgICAgICAgICAgIGlmIChhdHRyX2NoYWluX2l0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cl9jaGFpbik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZhdHRyX2NoYWluX2l0ZW0pOworICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXR0cl9jaGFpbiwgYXR0cl9jaGFpbl9pZHgsIGF0dHJfY2hhaW5faXRlbSk7CisgICAgICAgICAgICAgICAgKythdHRyX2NoYWluX2lkeDsKKyAgICAgICAgICAgICAgICB1bmlidWZmX3RpbGwgPSB1bmlidWZmX2Zyb20gPSB1bmlidWZmX3RpbGwgKyAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBub3cgYWRkIHRoZSBsYXN0IGRvdGxlc3MgbmFtZSAqLworICAgICAgICAgICAgYXR0cl9jaGFpbl9pdGVtID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fYnVmZmVyICsgdW5pYnVmZl9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbGVuIC0gdW5pYnVmZl9mcm9tKTsKKyAgICAgICAgICAgIGlmIChhdHRyX2NoYWluX2l0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhdHRyX2NoYWluKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmYXR0cl9jaGFpbl9pdGVtKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXR0cl9jaGFpbiwgYXR0cl9jaGFpbl9pZHgsIGF0dHJfY2hhaW5faXRlbSk7CisKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXR0ciwgaWR4LCBhdHRyX2NoYWluKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIC8qIGNyZWF0ZSBhdHRyZ2V0dGVyb2JqZWN0IHN0cnVjdHVyZSAqLwogICAgIGFnID0gUHlPYmplY3RfR0NfTmV3KGF0dHJnZXR0ZXJvYmplY3QsICZhdHRyZ2V0dGVyX3R5cGUpOwotICAgIGlmIChhZyA9PSBOVUxMKQorICAgIGlmIChhZyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihhdHRyKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgUHlfSU5DUkVGKGF0dHIpOwogICAgIGFnLT5hdHRyID0gYXR0cjsKICAgICBhZy0+bmF0dHJzID0gbmF0dHJzOwogCkBAIC00MjYsMzMgKzUwMywzMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRvdHRlZF9nZXRhdHRyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICphdHRyKQogewotICAgIGNoYXIgKnMsICpwOworICAgIFB5T2JqZWN0ICpuZXdvYmo7CiAKLSAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhhdHRyKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZSBuYW1lIG11c3QgYmUgYSBzdHJpbmciKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIC8qIGF0dHIgaXMgZWl0aGVyIGEgdHVwbGUgb3IgaW5zdGFuY2Ugb2Ygc3RyLgorICAgICAgIEVuc3VyZWQgYnkgdGhlIHNldHVwIGNvZGUgb2YgYXR0cmdldHRlcl9uZXcgKi8KKyAgICBpZiAoUHlUdXBsZV9DaGVja0V4YWN0KGF0dHIpKSB7IC8qIGNoYWluZWQgZ2V0YXR0ciAqLworICAgICAgICBQeV9zc2l6ZV90IG5hbWVfaWR4ID0gMCwgbmFtZV9jb3VudDsKKyAgICAgICAgUHlPYmplY3QgKmF0dHJfbmFtZTsKIAotICAgIHMgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGF0dHIpOwotICAgIFB5X0lOQ1JFRihvYmopOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgUHlPYmplY3QgKm5ld29iaiwgKnN0cjsKLSAgICAgICAgcCA9IHN0cmNocihzLCAnLicpOwotICAgICAgICBzdHIgPSBwID8gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHMsIChwLXMpKSA6Ci0gICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHMpOwotICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgbmFtZV9jb3VudCA9IFB5VHVwbGVfR0VUX1NJWkUoYXR0cik7CisgICAgICAgIFB5X0lOQ1JFRihvYmopOworICAgICAgICBmb3IgKG5hbWVfaWR4ID0gMDsgbmFtZV9pZHggPCBuYW1lX2NvdW50OyArK25hbWVfaWR4KSB7CisgICAgICAgICAgICBhdHRyX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGF0dHIsIG5hbWVfaWR4KTsKKyAgICAgICAgICAgIG5ld29iaiA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBhdHRyX25hbWUpOwogICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogaGVyZSAqLworICAgICAgICAgICAgb2JqID0gbmV3b2JqOwogICAgICAgICB9Ci0gICAgICAgIG5ld29iaiA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdHIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgfSBlbHNlIHsgLyogc2luZ2xlIGdldGF0dHIgKi8KKyAgICAgICAgbmV3b2JqID0gUHlPYmplY3RfR2V0QXR0cihvYmosIGF0dHIpOwogICAgICAgICBpZiAobmV3b2JqID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgb2JqID0gbmV3b2JqOwotICAgICAgICBpZiAocCA9PSBOVUxMKSBicmVhazsKLSAgICAgICAgcyA9IHArMTsKICAgICB9CiAKICAgICByZXR1cm4gb2JqOwpAQCAtNDY2LDggKzU0MSw4IEBACiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJhdHRyZ2V0dGVyIiwgMSwgMSwgJm9iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChhZy0+bmF0dHJzID09IDEpCi0gICAgICAgIHJldHVybiBkb3R0ZWRfZ2V0YXR0cihvYmosIGFnLT5hdHRyKTsKKyAgICBpZiAoYWctPm5hdHRycyA9PSAxKSAvKiBhZy0+YXR0ciBpcyBhbHdheXMgYSB0dXBsZSAqLworICAgICAgICByZXR1cm4gZG90dGVkX2dldGF0dHIob2JqLCBQeVR1cGxlX0dFVF9JVEVNKGFnLT5hdHRyLCAwKSk7CiAKICAgICBhc3NlcnQoUHlUdXBsZV9DaGVjayhhZy0+YXR0cikpOwogICAgIGFzc2VydChQeVR1cGxlX0dFVF9TSVpFKGFnLT5hdHRyKSA9PSBuYXR0cnMpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jIGIvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCmluZGV4IDVjOTkwZWYuLmU2NjBlNTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvb3NzYXVkaW9kZXYuYworKysgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKQEAgLTQ3MCw2ICs0NzAsMjMgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK29zc19zZWxmKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICogCitvc3NfZXhpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKKyAgICBQeU9iamVjdCAqcmV0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzZWxmLCAiY2xvc2UiLCBOVUxMKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfREVDUkVGKHJldCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCiBvc3NfZmlsZW5vKG9zc19hdWRpb190ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc2VsZi0+ZmQpOwpAQCAtNzgyLDYgKzc5OSwxMCBAQAogICAgIC8qIEFsaWFzZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAgICAgeyAiZmx1c2giLCAgICAgICAgICAoUHlDRnVuY3Rpb24pb3NzX3N5bmMsIE1FVEhfVkFSQVJHUyB9LAogCisgICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAqLworICAgIHsgIl9fZW50ZXJfXyIsICAgICAgb3NzX3NlbGYsIE1FVEhfTk9BUkdTIH0sCisgICAgeyAiX19leGl0X18iLCAgICAgICBvc3NfZXhpdCwgTUVUSF9WQVJBUkdTIH0sCisKICAgICB7IE5VTEwsICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNzkwLDYgKzgxMSwxMCBAQAogICAgIHsgImNsb3NlIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKW9zc19taXhlcl9jbG9zZSwgTUVUSF9OT0FSR1MgfSwKICAgICB7ICJmaWxlbm8iLCAgICAgICAgIChQeUNGdW5jdGlvbilvc3NfbWl4ZXJfZmlsZW5vLCBNRVRIX05PQVJHUyB9LAogCisgICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAqLworICAgIHsgIl9fZW50ZXJfXyIsICAgICAgb3NzX3NlbGYsIE1FVEhfTk9BUkdTIH0sCisgICAgeyAiX19leGl0X18iLCAgICAgICBvc3NfZXhpdCwgTUVUSF9WQVJBUkdTIH0sCisKICAgICAvKiBTaW1wbGUgaW9jdGwgd3JhcHBlcnMgKi8KICAgICB7ICJjb250cm9scyIsICAgICAgIChQeUNGdW5jdGlvbilvc3NfbWl4ZXJfY29udHJvbHMsIE1FVEhfVkFSQVJHUyB9LAogICAgIHsgInN0ZXJlb2NvbnRyb2xzIiwgKFB5Q0Z1bmN0aW9uKW9zc19taXhlcl9zdGVyZW9jb250cm9scywgTUVUSF9WQVJBUkdTfSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCmluZGV4IDhlOWUyNTguLjNjZGYxMzUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwpAQCAtMzQsMTAgKzM0LDggQEAKICNpbmNsdWRlICJncmFtbWFyLmgiCiAjaW5jbHVkZSAicGFyc2V0b2suaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU1RFUk1JTkFMKCkgLyBJU05PTlRFUk1JTkFMKCkgKi8KLSNpbmNsdWRlICJjb21waWxlLmgiCiAjdW5kZWYgWWllbGQKICNpbmNsdWRlICJhc3QuaCIKLSNpbmNsdWRlICJweWFyZW5hLmgiCiAKIGV4dGVybiBncmFtbWFyIF9QeVBhcnNlcl9HcmFtbWFyOyAvKiBGcm9tIGdyYW1pbml0LmMgKi8KIApAQCAtNzk0LDYgKzc5MiwxMSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRlbXBfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZ0FuZFNpemUodGVtcCwgJmxlbik7CisgICAgICAgICAgICBpZiAodGVtcF9zdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGVsZW0pOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RybiA9IChjaGFyICopUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICAgICAgaWYgKHN0cm4gIT0gTlVMTCkKICAgICAgICAgICAgICAgICAodm9pZCkgbWVtY3B5KHN0cm4sIHRlbXBfc3RyLCBsZW4gKyAxKTsKQEAgLTg3Miw2ICs4NzUsOCBAQAogICAgICAgICAgICAgZW5jb2RpbmcgPSBQeVNlcXVlbmNlX0dldEl0ZW0odHVwbGUsIDIpOwogICAgICAgICAgICAgLyogdHVwbGUgaXNuJ3QgYm9ycm93ZWQgYW55bW9yZSBoZXJlLCBuZWVkIHRvIERFQ1JFRiAqLwogICAgICAgICAgICAgdHVwbGUgPSBQeVNlcXVlbmNlX0dldFNsaWNlKHR1cGxlLCAwLCAyKTsKKyAgICAgICAgICAgIGlmICh0dXBsZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIHJlcyA9IFB5Tm9kZV9OZXcobnVtKTsKICAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CkBAIC04ODMsNiArODg4LDEyIEBACiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdGVtcDsKICAgICAgICAgICAgICAgICB0ZW1wID0gX1B5VW5pY29kZV9Bc1N0cmluZ0FuZFNpemUoZW5jb2RpbmcsICZsZW4pOworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXMtPm5fc3RyID0gKGNoYXIgKilQeU9iamVjdF9NQUxMT0MobGVuICsgMSk7CiAgICAgICAgICAgICAgICAgaWYgKHJlcy0+bl9zdHIgIT0gTlVMTCAmJiB0ZW1wICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgICh2b2lkKSBtZW1jcHkocmVzLT5uX3N0ciwgdGVtcCwgbGVuICsgMSk7CkBAIC05NDMsNyArOTU0LDcgQEAKIFZBTElEQVRFUihpbXBvcnRfc3RtdCk7ICAgICAgICAgVkFMSURBVEVSKGltcG9ydF9zdG10KTsKIFZBTElEQVRFUihpbXBvcnRfbmFtZSk7ICAgICAgICAgVkFMSURBVEVSKHlpZWxkX3N0bXQpOwogVkFMSURBVEVSKGdsb2JhbF9zdG10KTsgICAgICAgICBWQUxJREFURVIoYXNzZXJ0X3N0bXQpOwotVkFMSURBVEVSKGNvbXBvdW5kX3N0bXQpOworVkFMSURBVEVSKGNvbXBvdW5kX3N0bXQpOyAgICAgICBWQUxJREFURVIodGVzdF9vcl9zdGFyX2V4cHIpOwogVkFMSURBVEVSKHdoaWxlKTsgICAgICAgICAgICAgICBWQUxJREFURVIoZm9yKTsKIFZBTElEQVRFUih0cnkpOyAgICAgICAgICAgICAgICAgVkFMSURBVEVSKGV4Y2VwdF9jbGF1c2UpOwogVkFMSURBVEVSKHRlc3QpOyAgICAgICAgICAgICAgICBWQUxJREFURVIoYW5kX3Rlc3QpOwpAQCAtOTU4LDEwICs5NjksMTAgQEAKIFZBTElEQVRFUihzdWJzY3JpcHRsaXN0KTsgICAgICAgVkFMSURBVEVSKHNsaWNlb3ApOwogVkFMSURBVEVSKGV4cHJsaXN0KTsgICAgICAgICAgICBWQUxJREFURVIoZGljdG9yc2V0bWFrZXIpOwogVkFMSURBVEVSKGFyZ2xpc3QpOyAgICAgICAgICAgICBWQUxJREFURVIoYXJndW1lbnQpOwotVkFMSURBVEVSKHRlc3RsaXN0MSk7ICAgICAgICAgICBWQUxJREFURVIoY29tcF9mb3IpOworVkFMSURBVEVSKGNvbXBfZm9yKTsKIFZBTElEQVRFUihjb21wX2l0ZXIpOyAgICAgICAgICAgVkFMSURBVEVSKGNvbXBfaWYpOwogVkFMSURBVEVSKHRlc3RsaXN0X2NvbXApOyAgICAgICBWQUxJREFURVIoeWllbGRfZXhwcik7Ci1WQUxJREFURVIoeWllbGRfb3JfdGVzdGxpc3QpOyAgIFZBTElEQVRFUihvcl90ZXN0KTsKK1ZBTElEQVRFUihvcl90ZXN0KTsKIFZBTElEQVRFUih0ZXN0X25vY29uZCk7ICAgICAgICAgVkFMSURBVEVSKGxhbWJkZWZfbm9jb25kKTsKIAogI3VuZGVmIFZBTElEQVRFUgpAQCAtMTE4MywxMiArMTE5NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfdGVzdCwgInRlc3RsaXN0IikpOwogfQogCi0KIHN0YXRpYyBpbnQKLXZhbGlkYXRlX3Rlc3RsaXN0MShub2RlICp0cmVlKQordmFsaWRhdGVfdGVzdGxpc3Rfc3Rhcl9leHByKG5vZGUgKnRsKQogewotICAgIHJldHVybiAodmFsaWRhdGVfcmVwZWF0aW5nX2xpc3QodHJlZSwgdGVzdGxpc3QxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVfdGVzdCwgInRlc3RsaXN0MSIpKTsKKyAgICByZXR1cm4gKHZhbGlkYXRlX3JlcGVhdGluZ19saXN0KHRsLCB0ZXN0bGlzdF9zdGFyX2V4cHIsIHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RsaXN0IikpOwogfQogCiAKQEAgLTE1MTYsMTIgKzE1MjYsMTcgQEAKIH0KIAogc3RhdGljIGludAotdmFsaWRhdGVfeWllbGRfb3JfdGVzdGxpc3Qobm9kZSAqdHJlZSkKK3ZhbGlkYXRlX3lpZWxkX29yX3Rlc3RsaXN0KG5vZGUgKnRyZWUsIGludCB0c2UpCiB7Ci0gICAgICAgIGlmIChUWVBFKHRyZWUpID09IHlpZWxkX2V4cHIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3lpZWxkX2V4cHIodHJlZSk7CisgICAgaWYgKFRZUEUodHJlZSkgPT0geWllbGRfZXhwcikgeworICAgICAgICByZXR1cm4gdmFsaWRhdGVfeWllbGRfZXhwcih0cmVlKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh0c2UpCisgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVfdGVzdGxpc3Rfc3Rhcl9leHByKHRyZWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3Rlc3RsaXN0KHRyZWUpOworICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRlX3Rlc3RsaXN0KHRyZWUpOworICAgIH0KIH0KIAogc3RhdGljIGludApAQCAtMTUzMSwxMiArMTU0NiwxMiBAQAogICAgIGludCBuY2ggPSBOQ0godHJlZSk7CiAgICAgaW50IHJlcyA9ICh2YWxpZGF0ZV9udHlwZSh0cmVlLCBleHByX3N0bXQpCiAgICAgICAgICAgICAgICAmJiBpc19vZGQobmNoKQotICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfdGVzdGxpc3QoQ0hJTEQodHJlZSwgMCkpKTsKKyAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3RsaXN0X3N0YXJfZXhwcihDSElMRCh0cmVlLCAwKSkpOwogCiAgICAgaWYgKHJlcyAmJiBuY2ggPT0gMwogICAgICAgICAmJiBUWVBFKENISUxEKHRyZWUsIDEpKSA9PSBhdWdhc3NpZ24pIHsKICAgICAgICAgcmVzID0gdmFsaWRhdGVfbnVtbm9kZXMoQ0hJTEQodHJlZSwgMSksIDEsICJhdWdhc3NpZ24iKQotICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3lpZWxkX29yX3Rlc3RsaXN0KENISUxEKHRyZWUsIDIpKTsKKyAgICAgICAgICAgICYmIHZhbGlkYXRlX3lpZWxkX29yX3Rlc3RsaXN0KENISUxEKHRyZWUsIDIpLCAwKTsKIAogICAgICAgICBpZiAocmVzKSB7CiAgICAgICAgICAgICBjaGFyICpzID0gU1RSKENISUxEKENISUxEKHRyZWUsIDEpLCAwKSk7CkBAIC0xNTYwLDcgKzE1NzUsNyBAQAogICAgIGVsc2UgewogICAgICAgICBmb3IgKGogPSAxOyByZXMgJiYgKGogPCBuY2gpOyBqICs9IDIpCiAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV9lcXVhbChDSElMRCh0cmVlLCBqKSkKLSAgICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV95aWVsZF9vcl90ZXN0bGlzdChDSElMRCh0cmVlLCBqICsgMSkpOworICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3lpZWxkX29yX3Rlc3RsaXN0KENISUxEKHRyZWUsIGogKyAxKSwgMSk7CiAgICAgfQogICAgIHJldHVybiAocmVzKTsKIH0KQEAgLTIwNzgsMTEgKzIwOTMsMTEgQEAKICAgICBpbnQgbmNoID0gTkNIKHRyZWUpOwogICAgIGludCByZXMgPSAodmFsaWRhdGVfbnR5cGUodHJlZSwgY29tcGFyaXNvbikKICAgICAgICAgICAgICAgICYmIGlzX29kZChuY2gpCi0gICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV9zdGFyX2V4cHIoQ0hJTEQodHJlZSwgMCkpKTsKKyAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX2V4cHIoQ0hJTEQodHJlZSwgMCkpKTsKIAogICAgIGZvciAocG9zID0gMTsgcmVzICYmIChwb3MgPCBuY2gpOyBwb3MgKz0gMikKICAgICAgICAgcmVzID0gKHZhbGlkYXRlX2NvbXBfb3AoQ0hJTEQodHJlZSwgcG9zKSkKLSAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3N0YXJfZXhwcihDSElMRCh0cmVlLCBwb3MgKyAxKSkpOworICAgICAgICAgICAgICAgJiYgdmFsaWRhdGVfZXhwcihDSElMRCh0cmVlLCBwb3MgKyAxKSkpOwogCiAgICAgcmV0dXJuIChyZXMpOwogfQpAQCAtMjE0NCwxMiArMjE1OSwxMCBAQAogewogICAgIGludCByZXMgPSB2YWxpZGF0ZV9udHlwZSh0cmVlLCBzdGFyX2V4cHIpOwogICAgIGlmICghcmVzKSByZXR1cm4gcmVzOwotICAgIGlmIChOQ0godHJlZSkgPT0gMikgewotICAgICAgICByZXR1cm4gdmFsaWRhdGVfbnR5cGUoQ0hJTEQodHJlZSwgMCksIFNUQVIpICYmIFwKLSAgICAgICAgICAgICAgIHZhbGlkYXRlX2V4cHIoQ0hJTEQodHJlZSwgMSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHByKENISUxEKHRyZWUsIDApKTsKLSAgICB9CisgICAgaWYgKCF2YWxpZGF0ZV9udW1ub2Rlcyh0cmVlLCAyLCAic3Rhcl9leHByIikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiB2YWxpZGF0ZV9udHlwZShDSElMRCh0cmVlLCAwKSwgU1RBUikgJiYgICAgICBcCisgICAgICAgIHZhbGlkYXRlX2V4cHIoQ0hJTEQodHJlZSwgMSkpOwogfQogCiAKQEAgLTIzODAsNyArMjM5Myw3IEBACiAgICAgaWYgKG5jaCA9PSAwKQogICAgICAgICBlcnJfc3RyaW5nKCJtaXNzaW5nIGNoaWxkIG5vZGVzIG9mIHRlc3RsaXN0X2NvbXAiKTsKICAgICBlbHNlIHsKLSAgICAgICAgb2sgPSB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIDApKTsKKyAgICAgICAgb2sgPSB2YWxpZGF0ZV90ZXN0X29yX3N0YXJfZXhwcihDSElMRCh0cmVlLCAwKSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTIzOTMsNyArMjQwNiw3IEBACiAgICAgICAgIGludCBpID0gMTsKICAgICAgICAgd2hpbGUgKG9rICYmIG5jaCAtIGkgPj0gMikgewogICAgICAgICAgICAgb2sgPSAodmFsaWRhdGVfY29tbWEoQ0hJTEQodHJlZSwgaSkpCi0gICAgICAgICAgICAgICAgICAmJiB2YWxpZGF0ZV90ZXN0KENISUxEKHRyZWUsIGkrMSkpKTsKKyAgICAgICAgICAgICAgICAgICYmIHZhbGlkYXRlX3Rlc3Rfb3Jfc3Rhcl9leHByKENISUxEKHRyZWUsIGkrMSkpKTsKICAgICAgICAgICAgIGkgKz0gMjsKICAgICAgICAgfQogICAgICAgICBpZiAob2sgJiYgaSA9PSBuY2gtMSkKQEAgLTI3ODgsMTAgKzI4MDEsMjcgQEAKIAogCiBzdGF0aWMgaW50Cit2YWxpZGF0ZV90ZXN0X29yX3N0YXJfZXhwcihub2RlICpuKQoreworICAgIGlmIChUWVBFKG4pID09IHRlc3QpCisgICAgICAgIHJldHVybiB2YWxpZGF0ZV90ZXN0KG4pOworICAgIHJldHVybiB2YWxpZGF0ZV9zdGFyX2V4cHIobik7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkYXRlX2V4cHJfb3Jfc3Rhcl9leHByKG5vZGUgKm4pCit7CisgICAgaWYgKFRZUEUobikgPT0gZXhwcikKKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlX2V4cHIobik7CisgICAgcmV0dXJuIHZhbGlkYXRlX3N0YXJfZXhwcihuKTsKK30KKworCitzdGF0aWMgaW50CiB2YWxpZGF0ZV9leHBybGlzdChub2RlICp0cmVlKQogewogICAgIHJldHVybiAodmFsaWRhdGVfcmVwZWF0aW5nX2xpc3QodHJlZSwgZXhwcmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZV9zdGFyX2V4cHIsICJleHBybGlzdCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlX2V4cHJfb3Jfc3Rhcl9leHByLCAiZXhwcmxpc3QiKSk7CiB9CiAKIApAQCAtMjk3Miw5ICszMDAyLDYgQEAKICAgICAgICAgICBjYXNlIHlpZWxkX2V4cHI6CiAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV95aWVsZF9leHByKHRyZWUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSB0ZXN0bGlzdDE6Ci0gICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0bGlzdDEodHJlZSk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgICBjYXNlIHRlc3Q6CiAgICAgICAgICAgICByZXMgPSB2YWxpZGF0ZV90ZXN0KHRyZWUpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKaW5kZXggYTgzNmFmNi4uODlkM2YyZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwpAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAogI2lmIGRlZmluZWQoX19WTVMpCiAjICAgIGluY2x1ZGUgPHVuaXhpby5oPgpAQCAtMTIxLDYgKzEyMCw4IEBACiAjZWxzZQogI2lmZGVmIF9NU0NfVkVSICAgICAgICAgLyogTWljcm9zb2Z0IGNvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCisjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCisjZGVmaW5lIEhBVkVfR0VUTE9HSU4gICAxIAogI2RlZmluZSBIQVZFX1NQQVdOViAgICAgMQogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQogI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQpAQCAtMjYyLDEwICsyNjMsMjQgQEAKICNpZmRlZiBIQVZFX1BST0NFU1NfSAogI2luY2x1ZGUgPHByb2Nlc3MuaD4KICNlbmRpZgorI2lmbmRlZiBWT0xVTUVfTkFNRV9ET1MKKyNkZWZpbmUgVk9MVU1FX05BTUVfRE9TIDB4MAorI2VuZGlmCisjaWZuZGVmIFZPTFVNRV9OQU1FX05UCisjZGVmaW5lIFZPTFVNRV9OQU1FX05UICAweDIKKyNlbmRpZgorI2lmbmRlZiBJT19SRVBBUlNFX1RBR19TWU1MSU5LCisjZGVmaW5lIElPX1JFUEFSU0VfVEFHX1NZTUxJTksgKDB4QTAwMDAwMENMKQorI2VuZGlmCiAjaW5jbHVkZSAib3NkZWZzLmgiCiAjaW5jbHVkZSA8bWFsbG9jLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHNoZWxsYXBpLmg+ICAgLyogZm9yIFNoZWxsRXhlY3V0ZSgpICovCisjaW5jbHVkZSA8bG1jb25zLmg+ICAgICAvKiBmb3IgVU5MRU4gKi8KKyNpZmRlZiBTRV9DUkVBVEVfU1lNQk9MSUNfTElOS19OQU1FIC8qIEF2YWlsYWJsZSBzdGFydGluZyB3aXRoIFZpc3RhICovCisjZGVmaW5lIEhBVkVfU1lNTElOSworc3RhdGljIGludCB3aW4zMl9jYW5fc3ltbGluayA9IDA7CisjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCiAjaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQpAQCAtMzAzLDIzICszMTgsNiBAQAogI2RlZmluZSBXQUlUX1NUQVRVU19JTlQocykgKHMpCiAjZW5kaWYgLyogVU5JT05fV0FJVCAqLwogCi0vKiBJc3N1ZSAjMTk4MzogcGlkX3QgY2FuIGJlIGxvbmdlciB0aGFuIGEgQyBsb25nIG9uIHNvbWUgc3lzdGVtcyAqLwotI2lmICFkZWZpbmVkKFNJWkVPRl9QSURfVCkgfHwgU0laRU9GX1BJRF9UID09IFNJWkVPRl9JTlQKLSNkZWZpbmUgUEFSU0VfUElEICJpIgotI2RlZmluZSBQeUxvbmdfRnJvbVBpZCBQeUxvbmdfRnJvbUxvbmcKLSNkZWZpbmUgUHlMb25nX0FzUGlkIFB5TG9uZ19Bc0xvbmcKLSNlbGlmIFNJWkVPRl9QSURfVCA9PSBTSVpFT0ZfTE9ORwotI2RlZmluZSBQQVJTRV9QSUQgImwiCi0jZGVmaW5lIFB5TG9uZ19Gcm9tUGlkIFB5TG9uZ19Gcm9tTG9uZwotI2RlZmluZSBQeUxvbmdfQXNQaWQgUHlMb25nX0FzTG9uZwotI2VsaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiBTSVpFT0ZfUElEX1QgPT0gU0laRU9GX0xPTkdfTE9ORwotI2RlZmluZSBQQVJTRV9QSUQgIkwiCi0jZGVmaW5lIFB5TG9uZ19Gcm9tUGlkIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSNkZWZpbmUgUHlMb25nX0FzUGlkIFB5TG9uZ19Bc0xvbmdMb25nCi0jZWxzZQotI2Vycm9yICJzaXplb2YocGlkX3QpIGlzIG5laXRoZXIgc2l6ZW9mKGludCksIHNpemVvZihsb25nKSBvciBzaXplb2YobG9uZyBsb25nKSIKLSNlbmRpZiAvKiBTSVpFT0ZfUElEX1QgKi8KLQogLyogRG9uJ3QgdXNlIHRoZSAiX3IiIGZvcm0gaWYgd2UgZG9uJ3QgbmVlZCBpdCAoYWxzbywgd29uJ3QgaGF2ZSBhCiAgICBwcm90b3R5cGUgZm9yIGl0LCBhdCBsZWFzdCBvbiBTb2xhcmlzIC0tIG1heWJlIG90aGVycyBhcyB3ZWxsPykuICovCiAjaWYgZGVmaW5lZChIQVZFX0NURVJNSURfUikgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKQEAgLTQ0NCw2ICs0NDIsOTggQEAKICNkZWZpbmUgX1B5VmVyaWZ5X2ZkX2R1cDIoQSwgQikgKDEpCiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHdhcyBjb3BpZWQgZnJvbQorICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNzkxNTE0LmFzcHggYXMgdGhlIHJlcXVpcmVkCisgICBpbmNsdWRlIGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50IGluIHRoZSBXaW5kb3dzIFNESyAoYXQgbGVhc3QgYXMgaW5jbHVkZWQKKyAgIHdpdGggVmlzdWFsIFN0dWRpbyBFeHByZXNzKS4gKi8KK3R5cGVkZWYgc3RydWN0IF9SRVBBUlNFX0RBVEFfQlVGRkVSIHsKKyAgICBVTE9ORyBSZXBhcnNlVGFnOworICAgIFVTSE9SVCBSZXBhcnNlRGF0YUxlbmd0aDsKKyAgICBVU0hPUlQgUmVzZXJ2ZWQ7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lT2Zmc2V0OworICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lTGVuZ3RoOworICAgICAgICAgICAgVVNIT1JUIFByaW50TmFtZU9mZnNldDsKKyAgICAgICAgICAgIFVTSE9SVCBQcmludE5hbWVMZW5ndGg7CisgICAgICAgICAgICBVTE9ORyBGbGFnczsKKyAgICAgICAgICAgIFdDSEFSIFBhdGhCdWZmZXJbMV07CisgICAgICAgIH0gU3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlcjsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgVVNIT1JUIFN1YnN0aXR1dGVOYW1lT2Zmc2V0OworICAgICAgICAgICAgVVNIT1JUICBTdWJzdGl0dXRlTmFtZUxlbmd0aDsKKyAgICAgICAgICAgIFVTSE9SVCAgUHJpbnROYW1lT2Zmc2V0OworICAgICAgICAgICAgVVNIT1JUICBQcmludE5hbWVMZW5ndGg7CisgICAgICAgICAgICBXQ0hBUiAgUGF0aEJ1ZmZlclsxXTsKKyAgICAgICAgfSBNb3VudFBvaW50UmVwYXJzZUJ1ZmZlcjsKKworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgVUNIQVIgIERhdGFCdWZmZXJbMV07CisgICAgICAgIH0gR2VuZXJpY1JlcGFyc2VCdWZmZXI7CisgICAgfTsKK30gUkVQQVJTRV9EQVRBX0JVRkZFUiwgKlBSRVBBUlNFX0RBVEFfQlVGRkVSOworCisjZGVmaW5lIFJFUEFSU0VfREFUQV9CVUZGRVJfSEVBREVSX1NJWkUgIEZJRUxEX09GRlNFVChSRVBBUlNFX0RBVEFfQlVGRkVSLFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyaWNSZXBhcnNlQnVmZmVyKQorI2RlZmluZSBNQVhJTVVNX1JFUEFSU0VfREFUQV9CVUZGRVJfU0laRSAgKCAxNiAqIDEwMjQgKQorCitzdGF0aWMgaW50Cit3aW4zMl9yZWFkX2xpbmsoSEFORExFIHJlcGFyc2VfcG9pbnRfaGFuZGxlLCBVTE9ORyAqcmVwYXJzZV90YWcsIHdjaGFyX3QgKip0YXJnZXRfcGF0aCkKK3sKKyAgICBjaGFyIHRhcmdldF9idWZmZXJbTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkVdOworICAgIFJFUEFSU0VfREFUQV9CVUZGRVIgKnJkYiA9IChSRVBBUlNFX0RBVEFfQlVGRkVSICopdGFyZ2V0X2J1ZmZlcjsKKyAgICBEV09SRCBuX2J5dGVzX3JldHVybmVkOworICAgIGNvbnN0IHdjaGFyX3QgKnB0cjsKKyAgICB3Y2hhcl90ICpidWY7CisgICAgc2l6ZV90IGxlbjsKKworICAgIGlmICgwID09IERldmljZUlvQ29udHJvbCgKKyAgICAgICAgcmVwYXJzZV9wb2ludF9oYW5kbGUsCisgICAgICAgIEZTQ1RMX0dFVF9SRVBBUlNFX1BPSU5ULAorICAgICAgICBOVUxMLCAwLCAvKiBpbiBidWZmZXIgKi8KKyAgICAgICAgdGFyZ2V0X2J1ZmZlciwgc2l6ZW9mKHRhcmdldF9idWZmZXIpLAorICAgICAgICAmbl9ieXRlc19yZXR1cm5lZCwKKyAgICAgICAgTlVMTCkpIC8qIHdlJ3JlIG5vdCB1c2luZyBPVkVSTEFQUEVEX0lPICovCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChyZXBhcnNlX3RhZykKKyAgICAgICAgKnJlcGFyc2VfdGFnID0gcmRiLT5SZXBhcnNlVGFnOworCisgICAgaWYgKHRhcmdldF9wYXRoKSB7CisgICAgICAgIHN3aXRjaCAocmRiLT5SZXBhcnNlVGFnKSB7CisgICAgICAgIGNhc2UgSU9fUkVQQVJTRV9UQUdfU1lNTElOSzoKKyAgICAgICAgICAgIC8qIFhYWDogTWF5YmUgc2hvdWxkIHVzZSBTdWJzdGl0dXRlTmFtZT8gKi8KKyAgICAgICAgICAgIHB0ciA9IHJkYi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyICsKKyAgICAgICAgICAgICAgICAgIHJkYi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QcmludE5hbWVPZmZzZXQvc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIGxlbiA9IHJkYi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QcmludE5hbWVMZW5ndGgvc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElPX1JFUEFSU0VfVEFHX01PVU5UX1BPSU5UOgorICAgICAgICAgICAgcHRyID0gcmRiLT5Nb3VudFBvaW50UmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyICsKKyAgICAgICAgICAgICAgICAgIHJkYi0+TW91bnRQb2ludFJlcGFyc2VCdWZmZXIuU3Vic3RpdHV0ZU5hbWVPZmZzZXQvc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIGxlbiA9IHJkYi0+TW91bnRQb2ludFJlcGFyc2VCdWZmZXIuU3Vic3RpdHV0ZU5hbWVMZW5ndGgvc2l6ZW9mKFdDSEFSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX1JFUEFSU0VfVEFHX01JU01BVENIKTsgLyogWFhYOiBQcm9wZXIgZXJyb3IgY29kZT8gKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSAod2NoYXJfdCAqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkqKGxlbisxKSk7CisgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfT1VUT0ZNRU1PUlkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHdjc25jcHkoYnVmLCBwdHIsIGxlbik7CisgICAgICAgIGJ1ZltsZW5dID0gTCdcMCc7CisgICAgICAgIGlmICh3Y3NuY21wKGJ1ZiwgTCJcXD8/XFwiLCA0KSA9PSAwKQorICAgICAgICAgICAgYnVmWzFdID0gTCdcXCc7CisgICAgICAgICp0YXJnZXRfcGF0aCA9IGJ1ZjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisKIC8qIFJldHVybiBhIGRpY3Rpb25hcnkgY29ycmVzcG9uZGluZyB0byB0aGUgUE9TSVggZW52aXJvbm1lbnQgdGFibGUgKi8KICNpZmRlZiBXSVRIX05FWFRfRlJBTUVXT1JLCiAvKiBPbiBEYXJ3aW4vTWFjT1NYIGEgc2hhcmVkIGxpYnJhcnkgb3IgZnJhbWV3b3JrIGhhcyBubyBhY2Nlc3MgdG8KQEAgLTUxNywxNCArNjA3LDEyIEBACiAgICAgICAgIGNoYXIgKnAgPSBzdHJjaHIoKmUsICc9Jyk7CiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgayA9IFB5VW5pY29kZV9EZWNvZGUoKmUsIChpbnQpKHAtKmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgICAgIGsgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCplLCAoaW50KShwLSplKSk7CiAgICAgICAgIGlmIChrID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZShwKzEsIHN0cmxlbihwKzEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHArMSwgc3RybGVuKHArMSkpOwogICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgUHlfREVDUkVGKGspOwpAQCAtNTU1LDM4ICs2NDMsNiBAQAogICAgIHJldHVybiBkOwogfQogCi0vKiBDb252ZXJ0IGEgYnl0ZXMgb2JqZWN0IHRvIGEgY2hhciouIE9wdGlvbmFsbHkgbG9jayB0aGUgYnVmZmVyIGlmIGl0IGlzIGEKLSAgIGJ5dGVzIGFycmF5LiAqLwotCi1zdGF0aWMgY2hhcioKLWJ5dGVzMnN0cihQeU9iamVjdCogbywgaW50IGxvY2spCi17Ci0gICAgaWYoUHlCeXRlc19DaGVjayhvKSkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfQXNTdHJpbmcobyk7Ci0gICAgZWxzZSBpZihQeUJ5dGVBcnJheV9DaGVjayhvKSkgewotICAgICAgICBpZiAobG9jayAmJiBQeU9iamVjdF9HZXRCdWZmZXIobywgTlVMTCwgMCkgPCAwKQotICAgICAgICAgICAgLyogT24gYSBieXRlYXJyYXksIHRoaXMgc2hvdWxkIG5vdCBmYWlsLiAqLwotICAgICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7Ci0gICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Bc1N0cmluZyhvKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBUaGUgRlMgY29udmVydGVyIHNob3VsZCBoYXZlIHZlcmlmaWVkIHRoYXQgdGhpcwotICAgICAgICAgICBpcyBlaXRoZXIgYnl0ZXMgb3IgYnl0ZWFycmF5LiAqLwotICAgICAgICBQeV9GYXRhbEVycm9yKCJiYWQgb2JqZWN0IHBhc3NlZCB0byBieXRlczJzdHIiKTsKLSAgICAgICAgLyogbm90IHJlYWNoZWQuICovCi0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci19Ci0KLS8qIFJlbGVhc2UgdGhlIGxvY2ssIGRlY3JlZiB0aGUgb2JqZWN0LiAqLwotc3RhdGljIHZvaWQKLXJlbGVhc2VfYnl0ZXMoUHlPYmplY3QqIG8pCi17Ci0gICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG8pKQotICAgICAgICBvLT5vYl90eXBlLT50cF9hc19idWZmZXItPmJmX3JlbGVhc2VidWZmZXIobywgMCk7Ci0gICAgUHlfREVDUkVGKG8pOwotfQotCi0KIC8qIFNldCBhIFBPU0lYLXNwZWNpZmljIGVycm9yIGZyb20gZXJybm8sIGFuZCByZXR1cm4gTlVMTCAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjAwLDI3ICs2NTYsMjMgQEAKICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwogfQogCi0jaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2Vycm9yX3dpdGhfdW5pY29kZV9maWxlbmFtZShQeV9VTklDT0RFKiBuYW1lKQotewotICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoVW5pY29kZUZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIG5hbWUpOwotfQotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KLQogCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUoUHlPYmplY3QqIG5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKnJjID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzMnN0cihuYW1lLCAwKSk7Ci0gICAgcmVsZWFzZV9ieXRlcyhuYW1lKTsKKyAgICBQeU9iamVjdCAqbmFtZV9zdHIsICpyYzsKKyAgICBuYW1lX3N0ciA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQXNTdHJpbmcobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG5hbWUpKTsKKyAgICBQeV9ERUNSRUYobmFtZSk7CisgICAgcmMgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3N0cik7CisgICAgUHlfWERFQ1JFRihuYW1lX3N0cik7CiAgICAgcmV0dXJuIHJjOwogfQogCiAjaWZkZWYgTVNfV0lORE9XUwogc3RhdGljIFB5T2JqZWN0ICoKLXdpbjMyX2Vycm9yKGNoYXIqIGZ1bmN0aW9uLCBjaGFyKiBmaWxlbmFtZSkKK3dpbjMyX2Vycm9yKGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHsKICAgICAvKiBYWFggV2Ugc2hvdWxkIHBhc3MgdGhlIGZ1bmN0aW9uIG5hbWUgYWxvbmcgaW4gdGhlIGZ1dHVyZS4KICAgICAgICAod2lucmVnLmMgYWxzbyB3YW50cyB0byBwYXNzIHRoZSBmdW5jdGlvbiBuYW1lLikKQEAgLTc2MiwyMCArODE0LDYgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAotI2lmZGVmIE1TX1dJTkRPV1MKLXN0YXRpYyBpbnQKLXVuaWNvZGVfZmlsZV9uYW1lcyh2b2lkKQotewotICAgIHN0YXRpYyBpbnQgY2FudXNld2lkZSA9IC0xOwotICAgIGlmIChjYW51c2V3aWRlID09IC0xKSB7Ci0gICAgICAgIC8qIEFzIHBlciBkb2MgZm9yIDo6R2V0VmVyc2lvbigpLCB0aGlzIGlzIHRoZSBjb3JyZWN0IHRlc3QgZm9yCi0gICAgICAgICAgIHRoZSBXaW5kb3dzIE5UIGZhbWlseS4gKi8KLSAgICAgICAgY2FudXNld2lkZSA9IChHZXRWZXJzaW9uKCkgPCAweDgwMDAwMDAwKSA/IDEgOiAwOwotICAgIH0KLSAgICByZXR1cm4gY2FudXNld2lkZTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCiB7CkBAIC03ODUsMTMgKzgyMywxMyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoMSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGgxID0gYnl0ZXMyc3RyKG9wYXRoMSwgMSk7CisgICAgcGF0aDEgPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoMSk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9ICgqZnVuYykocGF0aDEpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aDEpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgxKTsKKyAgICBQeV9ERUNSRUYob3BhdGgxKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC04MDksMTMgKzg0NywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aDIpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBwYXRoMSA9IGJ5dGVzMnN0cihvcGF0aDEsIDEpOwotICAgIHBhdGgyID0gYnl0ZXMyc3RyKG9wYXRoMiwgMSk7CisgICAgcGF0aDEgPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoMSk7CisgICAgcGF0aDIgPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoMik7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9ICgqZnVuYykocGF0aDEsIHBhdGgyKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgxKTsKLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoMik7CisgICAgUHlfREVDUkVGKG9wYXRoMSk7CisgICAgUHlfREVDUkVGKG9wYXRoMik7CiAgICAgaWYgKHJlcyAhPSAwKQogICAgICAgICAvKiBYWFggaG93IHRvIHJlcG9ydCBib3RoIHBhdGgxIGFuZCBwYXRoMj8/PyAqLwogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTgzMiwxOCArODcwLDE3IEBACiAgICAgUHlPYmplY3QgKnVuaTsKICAgICBjaGFyICphbnNpOwogICAgIEJPT0wgcmVzdWx0OwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmNXKFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKSk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoZnVuYywgUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgICAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnVuaSkpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZWxzZSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgcmVzdWx0ID0gZnVuY1coUHlVbmljb2RlX0FzVW5pY29kZSh1bmkpKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZShmdW5jLCBQeVVuaWNvZGVfQXNVbmljb2RlKHVuaSkpOworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LCAmYW5zaSkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTkzLDcgKzEwMzAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1hdHRyaWJ1dGVfZGF0YV90b19zdGF0KFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgKmluZm8sIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCithdHRyaWJ1dGVfZGF0YV90b19zdGF0KEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICppbmZvLCBVTE9ORyByZXBhcnNlX3RhZywgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKIHsKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKQEAgLTEwMDEsMjggKzEwMzgsMjAgQEAKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKKyAgICByZXN1bHQtPnN0X25saW5rID0gaW5mby0+bk51bWJlck9mTGlua3M7CisgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKKyAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgeworICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgLyogbm93IHNldCB0aGUgYml0cyB0aGF0IG1ha2UgdGhpcyBhIHN5bWxpbmsgKi8KKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IDAxMjAwMDA7CisgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIEVtdWxhdGUgR2V0RmlsZUF0dHJpYnV0ZXNFeFtBV10gb24gV2luZG93cyA5NSAqLwotc3RhdGljIGludCBjaGVja2VkID0gMDsKLXN0YXRpYyBCT09MIChDQUxMQkFDSyAqZ2ZheGEpKExQQ1NUUiwgR0VUX0ZJTEVFWF9JTkZPX0xFVkVMUywgTFBWT0lEKTsKLXN0YXRpYyBCT09MIChDQUxMQkFDSyAqZ2ZheHcpKExQQ1dTVFIsIEdFVF9GSUxFRVhfSU5GT19MRVZFTFMsIExQVk9JRCk7Ci1zdGF0aWMgdm9pZAotY2hlY2tfZ2ZheCgpCi17Ci0gICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKLSAgICBpZiAoY2hlY2tlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIGNoZWNrZWQgPSAxOwotICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMMzIiKTsKLSAgICAqKEZBUlBST0MqKSZnZmF4YSA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkdldEZpbGVBdHRyaWJ1dGVzRXhBIik7Ci0gICAgKihGQVJQUk9DKikmZ2ZheHcgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJHZXRGaWxlQXR0cmlidXRlc0V4VyIpOwotfQotCiBzdGF0aWMgQk9PTAotYXR0cmlidXRlc19mcm9tX2RpcihMUENTVFIgcHN6RmlsZSwgTFBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHBmYWQpCithdHRyaWJ1dGVzX2Zyb21fZGlyKExQQ1NUUiBwc3pGaWxlLCBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiAqaW5mbywgVUxPTkcgKnJlcGFyc2VfdGFnKQogewogICAgIEhBTkRMRSBoRmluZEZpbGU7CiAgICAgV0lOMzJfRklORF9EQVRBQSBGaWxlRGF0YTsKQEAgLTEwMzAsMTcgKzEwNTksMjIgQEAKICAgICBpZiAoaEZpbmRGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgRmluZENsb3NlKGhGaW5kRmlsZSk7Ci0gICAgcGZhZC0+ZHdGaWxlQXR0cmlidXRlcyA9IEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXM7Ci0gICAgcGZhZC0+ZnRDcmVhdGlvblRpbWUgICA9IEZpbGVEYXRhLmZ0Q3JlYXRpb25UaW1lOwotICAgIHBmYWQtPmZ0TGFzdEFjY2Vzc1RpbWUgPSBGaWxlRGF0YS5mdExhc3RBY2Nlc3NUaW1lOwotICAgIHBmYWQtPmZ0TGFzdFdyaXRlVGltZSAgPSBGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWU7Ci0gICAgcGZhZC0+bkZpbGVTaXplSGlnaCAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUhpZ2g7Ci0gICAgcGZhZC0+bkZpbGVTaXplTG93ICAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUxvdzsKKyAgICBtZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisgICAgKnJlcGFyc2VfdGFnID0gMDsKKyAgICBpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzID0gRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlczsKKyAgICBpbmZvLT5mdENyZWF0aW9uVGltZSAgID0gRmlsZURhdGEuZnRDcmVhdGlvblRpbWU7CisgICAgaW5mby0+ZnRMYXN0QWNjZXNzVGltZSA9IEZpbGVEYXRhLmZ0TGFzdEFjY2Vzc1RpbWU7CisgICAgaW5mby0+ZnRMYXN0V3JpdGVUaW1lICA9IEZpbGVEYXRhLmZ0TGFzdFdyaXRlVGltZTsKKyAgICBpbmZvLT5uRmlsZVNpemVIaWdoICAgID0gRmlsZURhdGEubkZpbGVTaXplSGlnaDsKKyAgICBpbmZvLT5uRmlsZVNpemVMb3cgICAgID0gRmlsZURhdGEubkZpbGVTaXplTG93OworLyogIGluZm8tPm5OdW1iZXJPZkxpbmtzICAgPSAxOyAqLworICAgIGlmIChGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfUkVQQVJTRV9QT0lOVCkKKyAgICAgICAgKnJlcGFyc2VfdGFnID0gRmlsZURhdGEuZHdSZXNlcnZlZDA7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHN0YXRpYyBCT09MCi1hdHRyaWJ1dGVzX2Zyb21fZGlyX3coTFBDV1NUUiBwc3pGaWxlLCBMUFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgcGZhZCkKK2F0dHJpYnV0ZXNfZnJvbV9kaXJfdyhMUENXU1RSIHBzekZpbGUsIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OICppbmZvLCBVTE9ORyAqcmVwYXJzZV90YWcpCiB7CiAgICAgSEFORExFIGhGaW5kRmlsZTsKICAgICBXSU4zMl9GSU5EX0RBVEFXIEZpbGVEYXRhOwpAQCAtMTA0OCwxNDkgKzEwODIsMjI5IEBACiAgICAgaWYgKGhGaW5kRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIEZpbmRDbG9zZShoRmluZEZpbGUpOwotICAgIHBmYWQtPmR3RmlsZUF0dHJpYnV0ZXMgPSBGaWxlRGF0YS5kd0ZpbGVBdHRyaWJ1dGVzOwotICAgIHBmYWQtPmZ0Q3JlYXRpb25UaW1lICAgPSBGaWxlRGF0YS5mdENyZWF0aW9uVGltZTsKLSAgICBwZmFkLT5mdExhc3RBY2Nlc3NUaW1lID0gRmlsZURhdGEuZnRMYXN0QWNjZXNzVGltZTsKLSAgICBwZmFkLT5mdExhc3RXcml0ZVRpbWUgID0gRmlsZURhdGEuZnRMYXN0V3JpdGVUaW1lOwotICAgIHBmYWQtPm5GaWxlU2l6ZUhpZ2ggICAgPSBGaWxlRGF0YS5uRmlsZVNpemVIaWdoOwotICAgIHBmYWQtPm5GaWxlU2l6ZUxvdyAgICAgPSBGaWxlRGF0YS5uRmlsZVNpemVMb3c7CisgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZigqaW5mbykpOworICAgICpyZXBhcnNlX3RhZyA9IDA7CisgICAgaW5mby0+ZHdGaWxlQXR0cmlidXRlcyA9IEZpbGVEYXRhLmR3RmlsZUF0dHJpYnV0ZXM7CisgICAgaW5mby0+ZnRDcmVhdGlvblRpbWUgICA9IEZpbGVEYXRhLmZ0Q3JlYXRpb25UaW1lOworICAgIGluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUgPSBGaWxlRGF0YS5mdExhc3RBY2Nlc3NUaW1lOworICAgIGluZm8tPmZ0TGFzdFdyaXRlVGltZSAgPSBGaWxlRGF0YS5mdExhc3RXcml0ZVRpbWU7CisgICAgaW5mby0+bkZpbGVTaXplSGlnaCAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUhpZ2g7CisgICAgaW5mby0+bkZpbGVTaXplTG93ICAgICA9IEZpbGVEYXRhLm5GaWxlU2l6ZUxvdzsKKy8qICBpbmZvLT5uTnVtYmVyT2ZMaW5rcyAgID0gMTsgKi8KKyAgICBpZiAoRmlsZURhdGEuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX1JFUEFSU0VfUE9JTlQpCisgICAgICAgICpyZXBhcnNlX3RhZyA9IEZpbGVEYXRhLmR3UmVzZXJ2ZWQwOwogICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgQk9PTCBXSU5BUEkKLVB5X0dldEZpbGVBdHRyaWJ1dGVzRXhBKExQQ1NUUiBwc3pGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICBHRVRfRklMRUVYX0lORk9fTEVWRUxTIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICBMUFZPSUQgcHYpCisjaWZuZGVmIFNZTUxPT1BfTUFYCisjZGVmaW5lIFNZTUxPT1BfTUFYICggODggKQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK3dpbjMyX3hzdGF0X2ltcGxfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0LCBCT09MIHRyYXZlcnNlLCBpbnQgZGVwdGgpOworCitzdGF0aWMgaW50Cit3aW4zMl94c3RhdF9pbXBsKGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQsIEJPT0wgdHJhdmVyc2UsIGludCBkZXB0aCkKIHsKLSAgICBCT09MIHJlc3VsdDsKLSAgICBMUFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgcGZhZCA9IHB2OwotICAgIC8qIEZpcnN0IHRyeSB0byB1c2UgdGhlIHN5c3RlbSdzIGltcGxlbWVudGF0aW9uLCBpZiB0aGF0IGlzCi0gICAgICAgYXZhaWxhYmxlIGFuZCBlaXRoZXIgc3VjY2VlZHMgdG8gZ2l2ZXMgYW4gZXJyb3Igb3RoZXIgdGhhbgotICAgICAgIHRoYXQgaXQgaXNuJ3QgaW1wbGVtZW50ZWQuICovCi0gICAgY2hlY2tfZ2ZheCgpOwotICAgIGlmIChnZmF4YSkgewotICAgICAgICByZXN1bHQgPSBnZmF4YShwc3pGaWxlLCBsZXZlbCwgcHYpOwotICAgICAgICBpZiAocmVzdWx0IHx8IEdldExhc3RFcnJvcigpICE9IEVSUk9SX0NBTExfTk9UX0lNUExFTUVOVEVEKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpbnQgY29kZTsKKyAgICBIQU5ETEUgaEZpbGU7CisgICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gaW5mbzsKKyAgICBVTE9ORyByZXBhcnNlX3RhZyA9IDA7CisgICAgd2NoYXJfdCAqdGFyZ2V0X3BhdGg7CisgICAgY29uc3QgY2hhciAqZG90OworCisgICAgaWYgKGRlcHRoID4gU1lNTE9PUF9NQVgpIHsKKyAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX0NBTlRfUkVTT0xWRV9GSUxFTkFNRSk7IC8qIFhYWDogRUxPT1A/ICovCisgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgLyogSXQncyBlaXRoZXIgbm90IHByZXNlbnQsIG9yIG5vdCBpbXBsZW1lbnRlZC4KLSAgICAgICBFbXVsYXRlIHVzaW5nIEZpbmRGaXJzdEZpbGUuICovCi0gICAgaWYgKGxldmVsICE9IEdldEZpbGVFeEluZm9TdGFuZGFyZCkgewotICAgICAgICBTZXRMYXN0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpOwotICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBoRmlsZSA9IENyZWF0ZUZpbGVBKAorICAgICAgICBwYXRoLAorICAgICAgICAwLCAvKiBkZXNpcmVkIGFjY2VzcyAqLworICAgICAgICAwLCAvKiBzaGFyZSBtb2RlICovCisgICAgICAgIE5VTEwsIC8qIHNlY3VyaXR5IGF0dHJpYnV0ZXMgKi8KKyAgICAgICAgT1BFTl9FWElTVElORywKKyAgICAgICAgLyogRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MgaXMgcmVxdWlyZWQgdG8gb3BlbiBhIGRpcmVjdG9yeSAqLworICAgICAgICBGSUxFX0FUVFJJQlVURV9OT1JNQUx8RklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1N8RklMRV9GTEFHX09QRU5fUkVQQVJTRV9QT0lOVCwKKyAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgLyogRWl0aGVyIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdCwgb3Igd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8KKyAgICAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIGl0LiBJZiB0aGUgZm9ybWVyLCB3ZSBuZWVkIHRvIHJldHVybiBhbiBlcnJvci4KKyAgICAgICAgICAgSWYgdGhlIGxhdHRlciwgd2UgY2FuIHVzZSBhdHRyaWJ1dGVzX2Zyb21fZGlyLiAqLworICAgICAgICBpZiAoR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfU0hBUklOR19WSU9MQVRJT04pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIC8qIENvdWxkIG5vdCBnZXQgYXR0cmlidXRlcyBvbiBvcGVuIGZpbGUuIEZhbGwgYmFjayB0bworICAgICAgICAgICByZWFkaW5nIHRoZSBkaXJlY3RvcnkuICovCisgICAgICAgIGlmICghYXR0cmlidXRlc19mcm9tX2RpcihwYXRoLCAmaW5mbywgJnJlcGFyc2VfdGFnKSkKKyAgICAgICAgICAgIC8qIFZlcnkgc3RyYW5nZS4gVGhpcyBzaG91bGQgbm90IGZhaWwgbm93ICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChpbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisgICAgICAgICAgICBpZiAodHJhdmVyc2UpIHsKKyAgICAgICAgICAgICAgICAvKiBTaG91bGQgdHJhdmVyc2UsIGJ1dCBjb3VsZCBub3Qgb3BlbiByZXBhcnNlIHBvaW50IGhhbmRsZSAqLworICAgICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmluZm8pKSB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7OworICAgICAgICB9CisgICAgICAgIGlmIChpbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisgICAgICAgICAgICBjb2RlID0gd2luMzJfcmVhZF9saW5rKGhGaWxlLCAmcmVwYXJzZV90YWcsIHRyYXZlcnNlID8gJnRhcmdldF9wYXRoIDogTlVMTCk7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgICAgICAgICBpZiAoY29kZSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgICAgICAgICBpZiAodHJhdmVyc2UpIHsKKyAgICAgICAgICAgICAgICBjb2RlID0gd2luMzJfeHN0YXRfaW1wbF93KHRhcmdldF9wYXRoLCByZXN1bHQsIHRyYXZlcnNlLCBkZXB0aCArIDEpOworICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGhGaWxlKTsKICAgICB9Ci0gICAgLyogVXNlIEdldEZpbGVBdHRyaWJ1dGVzIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpbGUgbmFtZQotICAgICAgIGRvZXMgbm90IGNvbnRhaW4gd2lsZGNhcmRzICh3aGljaCBGaW5kRmlyc3RGaWxlIHdvdWxkCi0gICAgICAgYWNjZXB0KS4gKi8KLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNBKHBzekZpbGUpID09IDB4RkZGRkZGRkYpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXR1cm4gYXR0cmlidXRlc19mcm9tX2Rpcihwc3pGaWxlLCBwZmFkKTsKKyAgICBhdHRyaWJ1dGVfZGF0YV90b19zdGF0KCZpbmZvLCByZXBhcnNlX3RhZywgcmVzdWx0KTsKKworICAgIC8qIFNldCBTX0lFWEVDIGlmIGl0IGlzIGFuIC5leGUsIC5iYXQsIC4uLiAqLworICAgIGRvdCA9IHN0cnJjaHIocGF0aCwgJy4nKTsKKyAgICBpZiAoZG90KSB7CisgICAgICAgIGlmIChzdHJpY21wKGRvdCwgIi5iYXQiKSA9PSAwIHx8IHN0cmljbXAoZG90LCAiLmNtZCIpID09IDAgfHwKKyAgICAgICAgICAgIHN0cmljbXAoZG90LCAiLmV4ZSIpID09IDAgfHwgc3RyaWNtcChkb3QsICIuY29tIikgPT0gMCkKKyAgICAgICAgICAgIHJlc3VsdC0+c3RfbW9kZSB8PSAwMTExOworICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEJPT0wgV0lOQVBJCi1QeV9HZXRGaWxlQXR0cmlidXRlc0V4VyhMUENXU1RSIHBzekZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgIEdFVF9GSUxFRVhfSU5GT19MRVZFTFMgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIExQVk9JRCBwdikKK3N0YXRpYyBpbnQKK3dpbjMyX3hzdGF0X2ltcGxfdyhjb25zdCB3Y2hhcl90ICpwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0LCBCT09MIHRyYXZlcnNlLCBpbnQgZGVwdGgpCiB7Ci0gICAgQk9PTCByZXN1bHQ7Ci0gICAgTFBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHBmYWQgPSBwdjsKLSAgICAvKiBGaXJzdCB0cnkgdG8gdXNlIHRoZSBzeXN0ZW0ncyBpbXBsZW1lbnRhdGlvbiwgaWYgdGhhdCBpcwotICAgICAgIGF2YWlsYWJsZSBhbmQgZWl0aGVyIHN1Y2NlZWRzIHRvIGdpdmVzIGFuIGVycm9yIG90aGVyIHRoYW4KLSAgICAgICB0aGF0IGl0IGlzbid0IGltcGxlbWVudGVkLiAqLwotICAgIGNoZWNrX2dmYXgoKTsKLSAgICBpZiAoZ2ZheGEpIHsKLSAgICAgICAgcmVzdWx0ID0gZ2ZheHcocHN6RmlsZSwgbGV2ZWwsIHB2KTsKLSAgICAgICAgaWYgKHJlc3VsdCB8fCBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9DQUxMX05PVF9JTVBMRU1FTlRFRCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaW50IGNvZGU7CisgICAgSEFORExFIGhGaWxlOworICAgIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OIGluZm87CisgICAgVUxPTkcgcmVwYXJzZV90YWcgPSAwOworCXdjaGFyX3QgKnRhcmdldF9wYXRoOworICAgIGNvbnN0IHdjaGFyX3QgKmRvdDsKKworICAgIGlmIChkZXB0aCA+IFNZTUxPT1BfTUFYKSB7CisgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9DQU5UX1JFU09MVkVfRklMRU5BTUUpOyAvKiBYWFg6IEVMT09QPyAqLworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIC8qIEl0J3MgZWl0aGVyIG5vdCBwcmVzZW50LCBvciBub3QgaW1wbGVtZW50ZWQuCi0gICAgICAgRW11bGF0ZSB1c2luZyBGaW5kRmlyc3RGaWxlLiAqLwotICAgIGlmIChsZXZlbCAhPSBHZXRGaWxlRXhJbmZvU3RhbmRhcmQpIHsKLSAgICAgICAgU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKTsKLSAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaEZpbGUgPSBDcmVhdGVGaWxlVygKKyAgICAgICAgcGF0aCwKKyAgICAgICAgMCwgLyogZGVzaXJlZCBhY2Nlc3MgKi8KKyAgICAgICAgMCwgLyogc2hhcmUgbW9kZSAqLworICAgICAgICBOVUxMLCAvKiBzZWN1cml0eSBhdHRyaWJ1dGVzICovCisgICAgICAgIE9QRU5fRVhJU1RJTkcsCisgICAgICAgIC8qIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTIGlzIHJlcXVpcmVkIHRvIG9wZW4gYSBkaXJlY3RvcnkgKi8KKyAgICAgICAgRklMRV9BVFRSSUJVVEVfTk9STUFMfEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTfEZJTEVfRkxBR19PUEVOX1JFUEFSU0VfUE9JTlQsCisgICAgICAgIE5VTEwpOworCisgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIC8qIEVpdGhlciB0aGUgdGFyZ2V0IGRvZXNuJ3QgZXhpc3QsIG9yIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvCisgICAgICAgICAgIGdldCBhIGhhbmRsZSB0byBpdC4gSWYgdGhlIGZvcm1lciwgd2UgbmVlZCB0byByZXR1cm4gYW4gZXJyb3IuCisgICAgICAgICAgIElmIHRoZSBsYXR0ZXIsIHdlIGNhbiB1c2UgYXR0cmlidXRlc19mcm9tX2Rpci4gKi8KKyAgICAgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAvKiBDb3VsZCBub3QgZ2V0IGF0dHJpYnV0ZXMgb24gb3BlbiBmaWxlLiBGYWxsIGJhY2sgdG8KKyAgICAgICAgICAgcmVhZGluZyB0aGUgZGlyZWN0b3J5LiAqLworICAgICAgICBpZiAoIWF0dHJpYnV0ZXNfZnJvbV9kaXJfdyhwYXRoLCAmaW5mbywgJnJlcGFyc2VfdGFnKSkKKyAgICAgICAgICAgIC8qIFZlcnkgc3RyYW5nZS4gVGhpcyBzaG91bGQgbm90IGZhaWwgbm93ICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChpbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisgICAgICAgICAgICBpZiAodHJhdmVyc2UpIHsKKyAgICAgICAgICAgICAgICAvKiBTaG91bGQgdHJhdmVyc2UsIGJ1dCBjb3VsZCBub3Qgb3BlbiByZXBhcnNlIHBvaW50IGhhbmRsZSAqLworICAgICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmluZm8pKSB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7OworICAgICAgICB9CisgICAgICAgIGlmIChpbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisgICAgICAgICAgICBjb2RlID0gd2luMzJfcmVhZF9saW5rKGhGaWxlLCAmcmVwYXJzZV90YWcsIHRyYXZlcnNlID8gJnRhcmdldF9wYXRoIDogTlVMTCk7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShoRmlsZSk7CisgICAgICAgICAgICBpZiAoY29kZSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7CisgICAgICAgICAgICBpZiAodHJhdmVyc2UpIHsKKyAgICAgICAgICAgICAgICBjb2RlID0gd2luMzJfeHN0YXRfaW1wbF93KHRhcmdldF9wYXRoLCByZXN1bHQsIHRyYXZlcnNlLCBkZXB0aCArIDEpOworICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKGhGaWxlKTsKICAgICB9Ci0gICAgLyogVXNlIEdldEZpbGVBdHRyaWJ1dGVzIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpbGUgbmFtZQotICAgICAgIGRvZXMgbm90IGNvbnRhaW4gd2lsZGNhcmRzICh3aGljaCBGaW5kRmlyc3RGaWxlIHdvdWxkCi0gICAgICAgYWNjZXB0KS4gKi8KLSAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNXKHBzekZpbGUpID09IDB4RkZGRkZGRkYpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICByZXR1cm4gYXR0cmlidXRlc19mcm9tX2Rpcl93KHBzekZpbGUsIHBmYWQpOworICAgIGF0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoJmluZm8sIHJlcGFyc2VfdGFnLCByZXN1bHQpOworCisgICAgLyogU2V0IFNfSUVYRUMgaWYgaXQgaXMgYW4gLmV4ZSwgLmJhdCwgLi4uICovCisgICAgZG90ID0gd2NzcmNocihwYXRoLCAnLicpOworICAgIGlmIChkb3QpIHsKKyAgICAgICAgaWYgKF93Y3NpY21wKGRvdCwgTCIuYmF0IikgPT0gMCB8fCBfd2NzaWNtcChkb3QsIEwiLmNtZCIpID09IDAgfHwKKyAgICAgICAgICAgIF93Y3NpY21wKGRvdCwgTCIuZXhlIikgPT0gMCB8fCBfd2NzaWNtcChkb3QsIEwiLmNvbSIpID09IDApCisgICAgICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDExMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dpbjMyX3hzdGF0KGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQsIEJPT0wgdHJhdmVyc2UpCit7CisgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCisgICAgICAgc2V0dGluZyBpdCB0byBhIFBPU0lYIGVycm9yLiBDYWxsZXJzIHNob3VsZCB1c2UgR2V0TGFzdEVycm9yLiAqLworICAgIGludCBjb2RlID0gd2luMzJfeHN0YXRfaW1wbChwYXRoLCByZXN1bHQsIHRyYXZlcnNlLCAwKTsKKyAgICBlcnJubyA9IDA7CisgICAgcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyBpbnQKK3dpbjMyX3hzdGF0X3coY29uc3Qgd2NoYXJfdCAqcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCwgQk9PTCB0cmF2ZXJzZSkKK3sKKyAgICAvKiBQcm90b2NvbCB2aW9sYXRpb246IHdlIGV4cGxpY2l0bHkgY2xlYXIgZXJybm8sIGluc3RlYWQgb2YKKyAgICAgICBzZXR0aW5nIGl0IHRvIGEgUE9TSVggZXJyb3IuIENhbGxlcnMgc2hvdWxkIHVzZSBHZXRMYXN0RXJyb3IuICovCisgICAgaW50IGNvZGUgPSB3aW4zMl94c3RhdF9pbXBsX3cocGF0aCwgcmVzdWx0LCB0cmF2ZXJzZSwgMCk7CisgICAgZXJybm8gPSAwOworICAgIHJldHVybiBjb2RlOworfQorCisvKiBBYm91dCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczogd2luMzJfbHN0YXQsIHdpbjMyX2xzdGF0X3csIHdpbjMyX3N0YXQsCisgICB3aW4zMl9zdGF0X3cKKworICAgSW4gUG9zaXgsIHN0YXQgYXV0b21hdGljYWxseSB0cmF2ZXJzZXMgc3ltbGlua3MgYW5kIHJldHVybnMgdGhlIHN0YXQKKyAgIHN0cnVjdHVyZSBmb3IgdGhlIHRhcmdldC4gIEluIFdpbmRvd3MsIHRoZSBlcXVpdmFsZW50IEdldEZpbGVBdHRyaWJ1dGVzIGJ5CisgICBkZWZhdWx0IGRvZXMgbm90IHRyYXZlcnNlIHN5bWxpbmtzIGFuZCBpbnN0ZWFkIHJldHVybnMgYXR0cmlidXRlcyBmb3IKKyAgIHRoZSBzeW1saW5rLgorCisgICBUaGVyZWZvcmUsIHdpbjMyX2xzdGF0IHdpbGwgZ2V0IHRoZSBhdHRyaWJ1dGVzIHRyYWRpdGlvbmFsbHksIGFuZAorICAgd2luMzJfc3RhdCB3aWxsIGZpcnN0IGV4cGxpY2l0bHkgcmVzb2x2ZSB0aGUgc3ltbGluayB0YXJnZXQgYW5kIHRoZW4gd2lsbAorICAgY2FsbCB3aW4zMl9sc3RhdCBvbiB0aGF0IHJlc3VsdC4KKworICAgVGhlIF93IHJlcHJlc2VudCBVbmljb2RlIGVxdWl2YWxlbnRzIG9mIHRoZSBhZm9yZW1lbnRpb25lZCBBTlNJIGZ1bmN0aW9ucy4gKi8KKworc3RhdGljIGludCAKK3dpbjMyX2xzdGF0KGNvbnN0IGNoYXIqIHBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCit7CisgICAgcmV0dXJuIHdpbjMyX3hzdGF0KHBhdGgsIHJlc3VsdCwgRkFMU0UpOworfQorCitzdGF0aWMgaW50Cit3aW4zMl9sc3RhdF93KGNvbnN0IHdjaGFyX3QqIHBhdGgsIHN0cnVjdCB3aW4zMl9zdGF0ICpyZXN1bHQpCit7CisgICAgcmV0dXJuIHdpbjMyX3hzdGF0X3cocGF0aCwgcmVzdWx0LCBGQUxTRSk7CiB9CiAKIHN0YXRpYyBpbnQKIHdpbjMyX3N0YXQoY29uc3QgY2hhciogcGF0aCwgc3RydWN0IHdpbjMyX3N0YXQgKnJlc3VsdCkKIHsKLSAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGluZm87Ci0gICAgaW50IGNvZGU7Ci0gICAgY2hhciAqZG90OwotICAgIC8qIFhYWCBub3Qgc3VwcG9ydGVkIG9uIFdpbjk1IGFuZCBOVCAzLnggKi8KLSAgICBpZiAoIVB5X0dldEZpbGVBdHRyaWJ1dGVzRXhBKHBhdGgsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmluZm8pKSB7Ci0gICAgICAgIGlmIChHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9TSEFSSU5HX1ZJT0xBVElPTikgewotICAgICAgICAgICAgLyogUHJvdG9jb2wgdmlvbGF0aW9uOiB3ZSBleHBsaWNpdGx5IGNsZWFyIGVycm5vLCBpbnN0ZWFkIG9mCi0gICAgICAgICAgICAgICBzZXR0aW5nIGl0IHRvIGEgUE9TSVggZXJyb3IuIENhbGxlcnMgc2hvdWxkIHVzZSBHZXRMYXN0RXJyb3IuICovCi0gICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBDb3VsZCBub3QgZ2V0IGF0dHJpYnV0ZXMgb24gb3BlbiBmaWxlLiBGYWxsIGJhY2sgdG8KLSAgICAgICAgICAgICAgIHJlYWRpbmcgdGhlIGRpcmVjdG9yeS4gKi8KLSAgICAgICAgICAgIGlmICghYXR0cmlidXRlc19mcm9tX2RpcihwYXRoLCAmaW5mbykpIHsKLSAgICAgICAgICAgICAgICAvKiBWZXJ5IHN0cmFuZ2UuIFRoaXMgc2hvdWxkIG5vdCBmYWlsIG5vdyAqLwotICAgICAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY29kZSA9IGF0dHJpYnV0ZV9kYXRhX3RvX3N0YXQoJmluZm8sIHJlc3VsdCk7Ci0gICAgaWYgKGNvZGUgIT0gMCkKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgLyogU2V0IFNfSUZFWEVDIGlmIGl0IGlzIGFuIC5leGUsIC5iYXQsIC4uLiAqLwotICAgIGRvdCA9IHN0cnJjaHIocGF0aCwgJy4nKTsKLSAgICBpZiAoZG90KSB7Ci0gICAgICAgIGlmIChzdHJpY21wKGRvdCwgIi5iYXQiKSA9PSAwIHx8Ci0gICAgICAgIHN0cmljbXAoZG90LCAiLmNtZCIpID09IDAgfHwKLSAgICAgICAgc3RyaWNtcChkb3QsICIuZXhlIikgPT0gMCB8fAotICAgICAgICBzdHJpY21wKGRvdCwgIi5jb20iKSA9PSAwKQotICAgICAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IDAxMTE7Ci0gICAgfQotICAgIHJldHVybiBjb2RlOworICAgIHJldHVybiB3aW4zMl94c3RhdChwYXRoLCByZXN1bHQsIFRSVUUpOwogfQogCi1zdGF0aWMgaW50Ci13aW4zMl93c3RhdChjb25zdCB3Y2hhcl90KiBwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0KQorc3RhdGljIGludCAKK3dpbjMyX3N0YXRfdyhjb25zdCB3Y2hhcl90KiBwYXRoLCBzdHJ1Y3Qgd2luMzJfc3RhdCAqcmVzdWx0KQogewotICAgIGludCBjb2RlOwotICAgIGNvbnN0IHdjaGFyX3QgKmRvdDsKLSAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGluZm87Ci0gICAgLyogWFhYIG5vdCBzdXBwb3J0ZWQgb24gV2luOTUgYW5kIE5UIDMueCAqLwotICAgIGlmICghUHlfR2V0RmlsZUF0dHJpYnV0ZXNFeFcocGF0aCwgR2V0RmlsZUV4SW5mb1N0YW5kYXJkLCAmaW5mbykpIHsKLSAgICAgICAgaWYgKEdldExhc3RFcnJvcigpICE9IEVSUk9SX1NIQVJJTkdfVklPTEFUSU9OKSB7Ci0gICAgICAgICAgICAvKiBQcm90b2NvbCB2aW9sYXRpb246IHdlIGV4cGxpY2l0bHkgY2xlYXIgZXJybm8sIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgIHNldHRpbmcgaXQgdG8gYSBQT1NJWCBlcnJvci4gQ2FsbGVycyBzaG91bGQgdXNlIEdldExhc3RFcnJvci4gKi8KLSAgICAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIENvdWxkIG5vdCBnZXQgYXR0cmlidXRlcyBvbiBvcGVuIGZpbGUuIEZhbGwgYmFjayB0bwotICAgICAgICAgICAgICAgcmVhZGluZyB0aGUgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzX2Zyb21fZGlyX3cocGF0aCwgJmluZm8pKSB7Ci0gICAgICAgICAgICAgICAgLyogVmVyeSBzdHJhbmdlLiBUaGlzIHNob3VsZCBub3QgZmFpbCBub3cgKi8KLSAgICAgICAgICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGNvZGUgPSBhdHRyaWJ1dGVfZGF0YV90b19zdGF0KCZpbmZvLCByZXN1bHQpOwotICAgIGlmIChjb2RlIDwgMCkKLSAgICAgICAgcmV0dXJuIGNvZGU7Ci0gICAgLyogU2V0IElGRVhFQyBpZiBpdCBpcyBhbiAuZXhlLCAuYmF0LCAuLi4gKi8KLSAgICBkb3QgPSB3Y3NyY2hyKHBhdGgsICcuJyk7Ci0gICAgaWYgKGRvdCkgewotICAgICAgICBpZiAoX3djc2ljbXAoZG90LCBMIi5iYXQiKSA9PSAwIHx8Ci0gICAgICAgICAgICBfd2NzaWNtcChkb3QsIEwiLmNtZCIpID09IDAgfHwKLSAgICAgICAgICAgIF93Y3NpY21wKGRvdCwgTCIuZXhlIikgPT0gMCB8fAotICAgICAgICAgICAgX3djc2ljbXAoZG90LCBMIi5jb20iKSA9PSAwKQotICAgICAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IDAxMTE7Ci0gICAgfQotICAgIHJldHVybiBjb2RlOworICAgIHJldHVybiB3aW4zMl94c3RhdF93KHBhdGgsIHJlc3VsdCwgVFJVRSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyMTgsNyArMTMzMiw3IEBACiAgICAgaWYgKHR5cGUgPT0gRklMRV9UWVBFX1VOS05PV04pIHsKICAgICAgICAgRFdPUkQgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKGVycm9yICE9IDApIHsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIC8qIGVsc2U6IHZhbGlkIGJ1dCB1bmtub3duIGZpbGUgKi8KICAgICB9CkBAIC0xMjM1LDE0ICsxMzQ5LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIHNpbWlsYXIgdG8gc3RhdCgpICovCi0gICAgcmVzdWx0LT5zdF9tb2RlID0gYXR0cmlidXRlc190b19tb2RlKGluZm8uZHdGaWxlQXR0cmlidXRlcyk7Ci0gICAgcmVzdWx0LT5zdF9zaXplID0gKCgoX19pbnQ2NClpbmZvLm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLm5GaWxlU2l6ZUxvdzsKLSAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8uZnRDcmVhdGlvblRpbWUsICZyZXN1bHQtPnN0X2N0aW1lLCAmcmVzdWx0LT5zdF9jdGltZV9uc2VjKTsKLSAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8uZnRMYXN0V3JpdGVUaW1lLCAmcmVzdWx0LT5zdF9tdGltZSwgJnJlc3VsdC0+c3RfbXRpbWVfbnNlYyk7Ci0gICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKKyAgICBhdHRyaWJ1dGVfZGF0YV90b19zdGF0KCZpbmZvLCAwLCByZXN1bHQpOwogICAgIC8qIHNwZWNpZmljIHRvIGZzdGF0KCkgKi8KLSAgICByZXN1bHQtPnN0X25saW5rID0gaW5mby5uTnVtYmVyT2ZMaW5rczsKICAgICByZXN1bHQtPnN0X2lubyA9ICgoKF9faW50NjQpaW5mby5uRmlsZUluZGV4SGlnaCk8PDMyKSArIGluZm8ubkZpbGVJbmRleExvdzsKICAgICByZXR1cm4gMDsKIH0KQEAgLTE1NDIsNjYgKzE2NTAsNiBAQAogICAgIHJldHVybiB2OwogfQogCi0jaWZkZWYgTVNfV0lORE9XUwotCi0vKiBJc1VOQ1Jvb3QgLS0gdGVzdCB3aGV0aGVyIHRoZSBzdXBwbGllZCBwYXRoIGlzIG9mIHRoZSBmb3JtIFxcU0VSVkVSXFNIQVJFXCwKLSAgIHdoZXJlIC8gY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgXCBhbmQgdGhlIHRyYWlsaW5nIHNsYXNoIGlzIG9wdGlvbmFsLgotICAgQm90aCBTRVJWRVIgYW5kIFNIQVJFIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLgotKi8KLQotI2RlZmluZSBJU1NMQVNIQShjKSAoKGMpID09ICdcXCcgfHwgKGMpID09ICcvJykKLSNkZWZpbmUgSVNTTEFTSFcoYykgKChjKSA9PSBMJ1xcJyB8fCAoYykgPT0gTCcvJykKLSNpZm5kZWYgQVJSQVlTSVpFCi0jZGVmaW5lIEFSUkFZU0laRShhKSAoc2l6ZW9mKGEpIC8gc2l6ZW9mKGFbMF0pKQotI2VuZGlmCi0KLXN0YXRpYyBCT09MCi1Jc1VOQ1Jvb3RBKGNoYXIgKnBhdGgsIGludCBwYXRobGVuKQotewotICAgICNkZWZpbmUgSVNTTEFTSCBJU1NMQVNIQQotCi0gICAgaW50IGksIHNoYXJlOwotCi0gICAgaWYgKHBhdGhsZW4gPCA1IHx8ICFJU1NMQVNIKHBhdGhbMF0pIHx8ICFJU1NMQVNIKHBhdGhbMV0pKQotICAgICAgICAvKiBtaW5pbXVtIFVOQ1Jvb3QgaXMgXFx4XHkgKi8KLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGZvciAoaSA9IDI7IGkgPCBwYXRobGVuIDsgaSsrKQotICAgICAgICBpZiAoSVNTTEFTSChwYXRoW2ldKSkgYnJlYWs7Ci0gICAgaWYgKGkgPT0gMiB8fCBpID09IHBhdGhsZW4pCi0gICAgICAgIC8qIGRvIG5vdCBhbGxvdyBcXFxTSEFSRSBvciBcXFNFUlZFUiAqLwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgc2hhcmUgPSBpKzE7Ci0gICAgZm9yIChpID0gc2hhcmU7IGkgPCBwYXRobGVuOyBpKyspCi0gICAgICAgIGlmIChJU1NMQVNIKHBhdGhbaV0pKSBicmVhazsKLSAgICByZXR1cm4gKGkgIT0gc2hhcmUgJiYgKGkgPT0gcGF0aGxlbiB8fCBpID09IHBhdGhsZW4tMSkpOwotCi0gICAgI3VuZGVmIElTU0xBU0gKLX0KLQotc3RhdGljIEJPT0wKLUlzVU5DUm9vdFcoUHlfVU5JQ09ERSAqcGF0aCwgaW50IHBhdGhsZW4pCi17Ci0gICAgI2RlZmluZSBJU1NMQVNIIElTU0xBU0hXCi0KLSAgICBpbnQgaSwgc2hhcmU7Ci0KLSAgICBpZiAocGF0aGxlbiA8IDUgfHwgIUlTU0xBU0gocGF0aFswXSkgfHwgIUlTU0xBU0gocGF0aFsxXSkpCi0gICAgICAgIC8qIG1pbmltdW0gVU5DUm9vdCBpcyBcXHhceSAqLwotICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgZm9yIChpID0gMjsgaSA8IHBhdGhsZW4gOyBpKyspCi0gICAgICAgIGlmIChJU1NMQVNIKHBhdGhbaV0pKSBicmVhazsKLSAgICBpZiAoaSA9PSAyIHx8IGkgPT0gcGF0aGxlbikKLSAgICAgICAgLyogZG8gbm90IGFsbG93IFxcXFNIQVJFIG9yIFxcU0VSVkVSICovCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBzaGFyZSA9IGkrMTsKLSAgICBmb3IgKGkgPSBzaGFyZTsgaSA8IHBhdGhsZW47IGkrKykKLSAgICAgICAgaWYgKElTU0xBU0gocGF0aFtpXSkpIGJyZWFrOwotICAgIHJldHVybiAoaSAhPSBzaGFyZSAmJiAoaSA9PSBwYXRobGVuIHx8IGkgPT0gcGF0aGxlbi0xKSk7Ci0KLSAgICAjdW5kZWYgSVNTTEFTSAotfQotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KLQogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2RvX3N0YXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLAogICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsCkBAIC0xNjIwLDMzICsxNjY4LDI5IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAvKiBJZiBvbiB3aWRlLWNoYXJhY3Rlci1jYXBhYmxlIE9TIHNlZSBpZiBhcmd1bWVudAotICAgICAgIGlzIFVuaWNvZGUgYW5kIGlmIHNvIHVzZSB3aWRlIEFQSS4gICovCi0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5VW5pY29kZU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHdmb3JtYXQsICZwbykpIHsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgKndwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUocG8pOworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgd2Zvcm1hdCwgJnBvKSkgeworICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKIAotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIHJlc3VsdCBPSyB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgdGhyZWFkIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICByZXMgPSB3c3RhdGZ1bmMod3BhdGgsICZzdCk7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSByZXN1bHQgT0sgd2l0aG91dAorICAgICAgICAgICAgICAgdGhyZWFkIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCisgICAgICAgIHJlcyA9IHdzdGF0ZnVuYyh3cGF0aCwgJnN0KTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKQotICAgICAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGF0Iiwgd3BhdGgpOwotICAgICAgICAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAocmVzICE9IDApCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgic3RhdCIsIHdwYXRoKTsKKyAgICAgICAgcmV0dXJuIF9weXN0YXRfZnJvbXN0cnVjdHN0YXQoJnN0KTsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAjZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSAoKnN0YXRmdW5jKShwYXRoLCAmc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0xNjYxLDcgKzE3MDUsNyBAQAogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gX3B5c3RhdF9mcm9tc3RydWN0c3RhdCgmc3QpOwogCi0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xNjg0LDI4ICsxNzI4LDI2IEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgRFdPUkQgYXR0cjsKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpOmFjY2VzcyIsICZwbywgJm1vZGUpKSB7Ci0gICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZCBsb2NrIGFzCi0gICAgICAgICAgICAgICBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KLSAgICAgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1coUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKLSAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpOmFjY2VzcyIsICZwbywgJm1vZGUpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcworICAgICAgICAgICBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBnb3RvIGZpbmlzaDsKICAgICB9CisgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncworICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6YWNjZXNzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsICZtb2RlKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiBmaW5pc2g6CiAgICAgaWYgKGF0dHIgPT0gMHhGRkZGRkZGRikKICAgICAgICAgLyogRmlsZSBkb2VzIG5vdCBleGlzdCwgb3IgY2Fubm90IHJlYWQgYXR0cmlidXRlcyAqLwpAQCAtMTcyMSwxMSArMTc2MywxMSBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmFjY2VzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gYWNjZXNzKHBhdGgsIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlcyA9PSAwKTsKICNlbmRpZgogfQpAQCAtMTg0MSwzNSArMTg4MywzNCBAQAogICAgIGludCByZXM7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIERXT1JEIGF0dHI7Ci0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5VW5pY29kZU9iamVjdCAqcG87Ci0gICAgICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVaXw6Y2htb2QiLCAmcG8sICZpKSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOwotICAgICAgICAgICAgaWYgKGF0dHIgIT0gMHhGRkZGRkZGRikgewotICAgICAgICAgICAgICAgIGlmIChpICYgX1NfSVdSSVRFKQotICAgICAgICAgICAgICAgICAgICBhdHRyICY9IH5GSUxFX0FUVFJJQlVURV9SRUFET05MWTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGF0dHIgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7Ci0gICAgICAgICAgICAgICAgcmVzID0gU2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSwgYXR0cik7Ci0gICAgICAgICAgICB9CisgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWl8OmNobW9kIiwgJnBvLCAmaSkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNXKFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIGlmIChhdHRyICE9IDB4RkZGRkZGRkYpIHsKKyAgICAgICAgICAgIGlmIChpICYgX1NfSVdSSVRFKQorICAgICAgICAgICAgICAgIGF0dHIgJj0gfkZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlcyA9IDA7Ci0gICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoImNobW9kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShwbykpOwotICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgICAgICAgICAgYXR0ciB8PSBGSUxFX0FUVFJJQlVURV9SRUFET05MWTsKKyAgICAgICAgICAgIHJlcyA9IFNldEZpbGVBdHRyaWJ1dGVzVyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGF0dHIpOwogICAgICAgICB9Ci0gICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcyA9IDA7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmICghcmVzKQorICAgICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoImNobW9kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6Y2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gYnl0ZXMyc3RyKG9wYXRoLCAxKTsKKyAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aCk7CiAgICAgaWYgKGF0dHIgIT0gMHhGRkZGRkZGRikgewpAQCAtMTg4NCwyMyArMTkyNSwyMyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgd2luMzJfZXJyb3IoImNobW9kIiwgcGF0aCk7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJmk6Y2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gYnl0ZXMyc3RyKG9wYXRoLCAxKTsKKyAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGNobW9kKHBhdGgsIGkpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiAjZW5kaWYKQEAgLTE5NDMsMTMgKzE5ODQsMTMgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8maTpsY2htb2QiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gYnl0ZXMyc3RyKG9wYXRoLCAxKTsKKyAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGxjaG1vZChwYXRoLCBpKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hNT0QgKi8KQEAgLTE5NzAsMTMgKzIwMTEsMTMgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mazpjaGZsYWdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsICZmbGFncykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gY2hmbGFncyhwYXRoLCBmbGFncyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTE5OTgsMTMgKzIwMzksMTMgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mazpsY2hmbGFncyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gYnl0ZXMyc3RyKG9wYXRoLCAxKTsKKyAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHJlcyA9IGxjaGZsYWdzKHBhdGgsIGZsYWdzKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMjA2OSwxMyArMjExMCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVpZCwgJmdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gY2hvd24ocGF0aCwgKHVpZF90KSB1aWQsIChnaWRfdCkgZ2lkKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMjEyMSwxMyArMjE2MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVpZCwgJmdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmVzID0gbGNob3duKHBhdGgsICh1aWRfdCkgdWlkLCAoZ2lkX3QpIGdpZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmVzIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTIxNDIsNyArMjE4Myw3IEBACiAgICAgY2hhciAqcmVzOwogCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmICghdXNlX2J5dGVzICYmIHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7CisgICAgaWYgKCF1c2VfYnl0ZXMpIHsKICAgICAgICAgd2NoYXJfdCB3YnVmWzEwMjZdOwogICAgICAgICB3Y2hhcl90ICp3YnVmMiA9IHdidWY7CiAgICAgICAgIFB5T2JqZWN0ICpyZXNvYmo7CkBAIC0yMTgzLDcgKzIyMjQsNyBAQAogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBpZiAodXNlX2J5dGVzKQogICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIHN0cmxlbihidWYpKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZShidWYsIHN0cmxlbihidWYpLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChidWYpOwogfQogCiBQeURvY19TVFJWQVIocG9zaXhfZ2V0Y3dkX19kb2NfXywKQEAgLTIyMjAsMTIgKzIyNjEsNjAgQEAKIH0KICNlbmRpZiAvKiBIQVZFX0xJTksgKi8KIAorI2lmZGVmIE1TX1dJTkRPV1MKK1B5RG9jX1NUUlZBUih3aW4zMl9saW5rX19kb2NfXywKKyJsaW5rKHNyYywgZHN0KVxuXG5cCitDcmVhdGUgYSBoYXJkIGxpbmsgdG8gYSBmaWxlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgord2luMzJfbGluayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKm9zcmMsICpvZHN0OworICAgIGNoYXIgKnNyYywgKmRzdDsKKyAgICBCT09MIHJzbHQ7CisKKyAgICBQeVVuaWNvZGVPYmplY3QgKnVzcmMsICp1ZHN0OworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVVTpsaW5rIiwgJnVzcmMsICZ1ZHN0KSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJzbHQgPSBDcmVhdGVIYXJkTGlua1coUHlVbmljb2RlX0FTX1VOSUNPREUodWRzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodXNyYyksIE5VTEwpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIGlmIChyc2x0ID09IDApCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImxpbmsiLCBOVUxMKTsKKworICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisKKyAgICAvKiBOYXJyb3cgc3RyaW5ncyBhbHNvIHZhbGlkLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyY6bGluayIsIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9zcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9kc3QpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNyYyA9IFB5Qnl0ZXNfQXNTdHJpbmcob3NyYyk7CisgICAgZHN0ID0gUHlCeXRlc19Bc1N0cmluZyhvZHN0KTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByc2x0ID0gQ3JlYXRlSGFyZExpbmtBKGRzdCwgc3JjLCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgUHlfREVDUkVGKG9zcmMpOworICAgIFB5X0RFQ1JFRihvZHN0KTsKKyAgICBpZiAocnNsdCA9PSAwKQorICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoImxpbmsiLCBOVUxMKTsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KKwogCiBQeURvY19TVFJWQVIocG9zaXhfbGlzdGRpcl9fZG9jX18sCi0ibGlzdGRpcihwYXRoKSAtPiBsaXN0X29mX3N0cmluZ3NcblxuXAorImxpc3RkaXIoW3BhdGhdKSAtPiBsaXN0X29mX3N0cmluZ3NcblxuXAogUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5LlxuXAogXG5cCi0gICAgcGF0aDogcGF0aCBvZiBkaXJlY3RvcnkgdG8gbGlzdFxuXAorICAgIHBhdGg6IHBhdGggb2YgZGlyZWN0b3J5IHRvIGxpc3QgKGRlZmF1bHQ6ICcuJylcblwKIFxuXAogVGhlIGxpc3QgaXMgaW4gYXJiaXRyYXJ5IG9yZGVyLiAgSXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc3BlY2lhbFxuXAogZW50cmllcyAnLicgYW5kICcuLicgZXZlbiBpZiB0aGV5IGFyZSBwcmVzZW50IGluIHRoZSBkaXJlY3RvcnkuIik7CkBAIC0yMjQ2LDEwMSArMjMzNSwxMDUgQEAKICAgICBjaGFyICpidWZwdHIgPSBuYW1lYnVmOwogICAgIFB5X3NzaXplX3QgbGVuID0gc2l6ZW9mKG5hbWVidWYpLTU7IC8qIG9ubHkgY2xhaW0gdG8gaGF2ZSBzcGFjZSBmb3IgTUFYX1BBVEggKi8KIAotICAgIC8qIElmIG9uIHdpZGUtY2hhcmFjdGVyLWNhcGFibGUgT1Mgc2VlIGlmIGFyZ3VtZW50Ci0gICAgICAgaXMgVW5pY29kZSBhbmQgaWYgc28gdXNlIHdpZGUgQVBJLiAgKi8KLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpsaXN0ZGlyIiwgJnBvKSkgewotICAgICAgICAgICAgV0lOMzJfRklORF9EQVRBVyB3RmlsZURhdGE7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3bmFtZWJ1ZjsKLSAgICAgICAgICAgIC8qIE92ZXJhbGxvY2F0ZSBmb3IgXFwqLipcMCAqLworICAgIFB5T2JqZWN0ICpwbyA9IE5VTEw7CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxVOmxpc3RkaXIiLCAmcG8pKSB7CisgICAgICAgIFdJTjMyX0ZJTkRfREFUQVcgd0ZpbGVEYXRhOworICAgICAgICBQeV9VTklDT0RFICp3bmFtZWJ1ZiwgKnBvX3djaGFyczsKKyAgICAgICAgCisgICAgICAgIGlmIChwbyA9PSBOVUxMKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgICAgIHBvX3djaGFycyA9IEwiLiI7CisgICAgICAgICAgICBsZW4gPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9fd2NoYXJzID0gUHlVbmljb2RlX0FTX1VOSUNPREUocG8pOwogICAgICAgICAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHBvKTsKLSAgICAgICAgICAgIHduYW1lYnVmID0gbWFsbG9jKChsZW4gKyA1KSAqIHNpemVvZih3Y2hhcl90KSk7Ci0gICAgICAgICAgICBpZiAoIXduYW1lYnVmKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiwgUHlVbmljb2RlX0FTX1VOSUNPREUocG8pKTsKLSAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfVU5JQ09ERSB3Y2ggPSB3bmFtZWJ1ZltsZW4tMV07Ci0gICAgICAgICAgICAgICAgaWYgKHdjaCAhPSBMJy8nICYmIHdjaCAhPSBMJ1xcJyAmJiB3Y2ggIT0gTCc6JykKLSAgICAgICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gTCdcXCc7Ci0gICAgICAgICAgICAgICAgd2NzY3B5KHduYW1lYnVmICsgbGVuLCBMIiouKiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChkID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkgeworICAgICAgICB9CisgICAgICAgIC8qIE92ZXJhbGxvY2F0ZSBmb3IgXFwqLipcMCAqLworICAgICAgICB3bmFtZWJ1ZiA9IG1hbGxvYygobGVuICsgNSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBpZiAoIXduYW1lYnVmKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgd2NzY3B5KHduYW1lYnVmLCBwb193Y2hhcnMpOworICAgICAgICBpZiAobGVuID4gMCkgeworICAgICAgICAgICAgUHlfVU5JQ09ERSB3Y2ggPSB3bmFtZWJ1ZltsZW4tMV07CisgICAgICAgICAgICBpZiAod2NoICE9IEwnLycgJiYgd2NoICE9IEwnXFwnICYmIHdjaCAhPSBMJzonKQorICAgICAgICAgICAgICAgIHduYW1lYnVmW2xlbisrXSA9IEwnXFwnOworICAgICAgICAgICAgd2NzY3B5KHduYW1lYnVmICsgbGVuLCBMIiouKiIpOworICAgICAgICB9CisgICAgICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBoRmluZEZpbGUgPSBGaW5kRmlyc3RGaWxlVyh3bmFtZWJ1ZiwgJndGaWxlRGF0YSk7CisgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgICAgIGlmIChoRmluZEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgICAgIGludCBlcnJvciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgaWYgKGVycm9yID09IEVSUk9SX0ZJTEVfTk9UX0ZPVU5EKSB7CiAgICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kRmlyc3RGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgIGZyZWUod25hbWVidWYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZG8geworICAgICAgICAgICAgLyogU2tpcCBvdmVyIC4gYW5kIC4uICovCisgICAgICAgICAgICBpZiAod2NzY21wKHdGaWxlRGF0YS5jRmlsZU5hbWUsIEwiLiIpICE9IDAgJiYKKyAgICAgICAgICAgICAgICB3Y3NjbXAod0ZpbGVEYXRhLmNGaWxlTmFtZSwgTCIuLiIpICE9IDApIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHdGaWxlRGF0YS5jRmlsZU5hbWUsIHdjc2xlbih3RmlsZURhdGEuY0ZpbGVOYW1lKSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CisgICAgICAgICAgICAgICAgICAgIGQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoZCwgdikgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgICAgICAgICAgICAgZCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgICAgICBoRmluZEZpbGUgPSBGaW5kRmlyc3RGaWxlVyh3bmFtZWJ1ZiwgJndGaWxlRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSBGaW5kTmV4dEZpbGVXKGhGaW5kRmlsZSwgJndGaWxlRGF0YSk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgaWYgKGhGaW5kRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICAgICAgICAgIGludCBlcnJvciA9IEdldExhc3RFcnJvcigpOwotICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkgewotICAgICAgICAgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogRmluZE5leHRGaWxlIHNldHMgZXJyb3IgdG8gRVJST1JfTk9fTU9SRV9GSUxFUyBpZgorICAgICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KKyAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZEZpcnN0RmlsZVciLCB3bmFtZWJ1Zik7CisgICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZE5leHRGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgICAgICBGaW5kQ2xvc2UoaEZpbmRGaWxlKTsKICAgICAgICAgICAgICAgICBmcmVlKHduYW1lYnVmKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgLiBhbmQgLi4gKi8KLSAgICAgICAgICAgICAgICBpZiAod2NzY21wKHdGaWxlRGF0YS5jRmlsZU5hbWUsIEwiLiIpICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgd2NzY21wKHdGaWxlRGF0YS5jRmlsZU5hbWUsIEwiLi4iKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUod0ZpbGVEYXRhLmNGaWxlTmFtZSwgd2NzbGVuKHdGaWxlRGF0YS5jRmlsZU5hbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChkLCB2KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEZpbmROZXh0RmlsZVcoaEZpbmRGaWxlLCAmd0ZpbGVEYXRhKTsKLSAgICAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgICAgIC8qIEZpbmROZXh0RmlsZSBzZXRzIGVycm9yIHRvIEVSUk9SX05PX01PUkVfRklMRVMgaWYKLSAgICAgICAgICAgICAgICAgICBpdCBnb3QgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0ICYmIEdldExhc3RFcnJvcigpICE9IEVSUk9SX05PX01PUkVfRklMRVMpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kTmV4dEZpbGVXIiwgd25hbWVidWYpOwotICAgICAgICAgICAgICAgICAgICBGaW5kQ2xvc2UoaEZpbmRGaWxlKTsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBUUlVFKTsKKyAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwogCi0gICAgICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICAgICAgd2luMzJfZXJyb3JfdW5pY29kZSgiRmluZENsb3NlIiwgd25hbWVidWYpOwotICAgICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKKyAgICAgICAgICAgIHdpbjMyX2Vycm9yX3VuaWNvZGUoIkZpbmRDbG9zZSIsIHduYW1lYnVmKTsKICAgICAgICAgICAgIGZyZWUod25hbWVidWYpOwotICAgICAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBmcmVlKHduYW1lYnVmKTsKKyAgICAgICAgcmV0dXJuIGQ7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpsaXN0ZGlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlPYmplY3RfU2l6ZShvcGF0aCkrMSA+IE1BWF9QQVRIKSB7CisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob3BhdGgpKzEgPiBNQVhfUEFUSCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInBhdGggdG9vIGxvbmciKTsKICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0cmNweShuYW1lYnVmLCBieXRlczJzdHIob3BhdGgsIDApKTsKKyAgICBzdHJjcHkobmFtZWJ1ZiwgUHlCeXRlc19Bc1N0cmluZyhvcGF0aCkpOwogICAgIGxlbiA9IFB5T2JqZWN0X1NpemUob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgaWYgKGxlbiA+IDApIHsKICAgICAgICAgY2hhciBjaCA9IG5hbWVidWZbbGVuLTFdOwogICAgICAgICBpZiAoY2ggIT0gU0VQICYmIGNoICE9IEFMVFNFUCAmJiBjaCAhPSAnOicpCkBAIC0yNDE3LDEwICsyNTEwLDEwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpsaXN0ZGlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb25hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBuYW1lID0gYnl0ZXMyc3RyKG9uYW1lKTsKLSAgICBsZW4gPSBQeU9iamVjdF9TaXplKG9uYW1lKTsKKyAgICBuYW1lID0gUHlCeXRlc19Bc1N0cmluZyhvbmFtZSk7CisgICAgbGVuID0gUHlCeXRlc19HRVRfU0laRShvbmFtZSk7CiAgICAgaWYgKGxlbiA+PSBNQVhfUEFUSCkgewotICAgICAgICByZWxlYXNlX2J5dGVzKG9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKG9uYW1lKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJwYXRoIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI0MzMsNyArMjUyNiw3IEBACiAgICAgc3RyY3B5KG5hbWVidWYgKyBsZW4sICIqLioiKTsKIAogICAgIGlmICgoZCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihvbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMjQ3Niw3ICsyNTY5LDcgQEAKICAgICAgICAgfSB3aGlsZSAoRG9zRmluZE5leHQoaGRpciwgJmVwLCBzaXplb2YoZXApLCAmc3JjaGNudCkgPT0gTk9fRVJST1IgJiYgc3JjaGNudCA+IDApOwogICAgIH0KIAotICAgIHJlbGVhc2VfYnl0ZXMob25hbWUpOworICAgIFB5X0RFQ1JFRihvbmFtZSk7CiAgICAgcmV0dXJuIGQ7CiAjZWxzZQogICAgIFB5T2JqZWN0ICpvbmFtZTsKQEAgLTI0ODcsMTMgKzI1ODAsMTggQEAKICAgICBpbnQgYXJnX2lzX3VuaWNvZGUgPSAxOwogCiAgICAgZXJybm8gPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpsaXN0ZGlyIiwgJnYpKSB7CisgICAgLyogdiBpcyBuZXZlciByZWFkLCBzbyBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHlldC4gKi8KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxVOmxpc3RkaXIiLCAmdikpIHsKICAgICAgICAgYXJnX2lzX3VuaWNvZGUgPSAwOwogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmxpc3RkaXIiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvbmFtZSkpCisgICAgb25hbWUgPSBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOmxpc3RkaXIiLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvbmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIG5hbWUgPSBieXRlczJzdHIob25hbWUsIDEpOworICAgIGlmIChvbmFtZSA9PSBOVUxMKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgb25hbWUgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoIi4iKTsKKyAgICB9CisgICAgbmFtZSA9IFB5Qnl0ZXNfQXNTdHJpbmcob25hbWUpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBkaXJwID0gb3BlbmRpcihuYW1lKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtMjUwNCw3ICsyNjAyLDcgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBjbG9zZWRpcihkaXJwKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihvbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmb3IgKDs7KSB7CkBAIC0yNTI3LDMzICsyNjI1LDE3IEBACiAgICAgICAgICAgICAoTkFNTEVOKGVwKSA9PSAxIHx8CiAgICAgICAgICAgICAgKGVwLT5kX25hbWVbMV0gPT0gJy4nICYmIE5BTUxFTihlcCkgPT0gMikpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGVwLT5kX25hbWUsIE5BTUxFTihlcCkpOworICAgICAgICBpZiAoYXJnX2lzX3VuaWNvZGUpCisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoZXAtPmRfbmFtZSwgTkFNTEVOKGVwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGVwLT5kX25hbWUsIE5BTUxFTihlcCkpOwogICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZCk7Ci0gICAgICAgICAgICBkID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKGQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGFyZ19pc191bmljb2RlKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdzsKLQotICAgICAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlZXNjYXBlIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAodyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHYgPSB3OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogRW5jb2RpbmcgZmFpbGVkIHRvIGRlY29kZSBBU0NJSSBieXRlcy4KLSAgICAgICAgICAgICAgICAgICBSYWlzZSBleGNlcHRpb24uICovCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwotICAgICAgICAgICAgICAgIGQgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKLSAgICAgICAgICAgIGQgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0yNTYxLDcgKzI2NDMsNyBAQAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBjbG9zZWRpcihkaXJwKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIHJlbGVhc2VfYnl0ZXMob25hbWUpOworICAgIFB5X0RFQ1JFRihvbmFtZSk7CiAKICAgICByZXR1cm4gZDsKIApAQCAtMjU3OCw1MyArMjY2MCwxNjUgQEAKICAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSCoyXTsKICAgICBjaGFyICp0ZW1wOwogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgUHlVbmljb2RlT2JqZWN0ICpwbzsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXRmdWxscGF0aG5hbWUiLCAmcG8pKSB7Ci0gICAgICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgd291dGJ1ZltNQVhfUEFUSCoyXSwgKndvdXRidWZwID0gd291dGJ1ZjsKLSAgICAgICAgICAgIFB5X1VOSUNPREUgKnd0ZW1wOwotICAgICAgICAgICAgRFdPUkQgcmVzdWx0OwotICAgICAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgICAgICByZXN1bHQgPSBHZXRGdWxsUGF0aE5hbWVXKHdwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3V0YnVmLCAmd3RlbXApOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA+IHNpemVvZih3b3V0YnVmKS9zaXplb2Yod291dGJ1ZlswXSkpIHsKLSAgICAgICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2YoUHlfVU5JQ09ERSkpOwotICAgICAgICAgICAgICAgIGlmICghd291dGJ1ZnApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUod291dGJ1ZnAsIHdjc2xlbih3b3V0YnVmcCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHYgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGdWxsUGF0aE5hbWVXIiwgd3BhdGgpOwotICAgICAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCi0gICAgICAgICAgICAgICAgZnJlZSh3b3V0YnVmcCk7Ci0gICAgICAgICAgICByZXR1cm4gdjsKKyAgICBQeVVuaWNvZGVPYmplY3QgKnBvOworICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfDpfZ2V0ZnVsbHBhdGhuYW1lIiwgJnBvKSkgeworICAgICAgICBQeV9VTklDT0RFICp3cGF0aCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHBvKTsKKyAgICAgICAgUHlfVU5JQ09ERSB3b3V0YnVmW01BWF9QQVRIKjJdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOworICAgICAgICBQeV9VTklDT0RFICp3dGVtcDsKKyAgICAgICAgRFdPUkQgcmVzdWx0OworICAgICAgICBQeU9iamVjdCAqdjsKKyAgICAgICAgcmVzdWx0ID0gR2V0RnVsbFBhdGhOYW1lVyh3cGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvdXRidWYsICZ3dGVtcCk7CisgICAgICAgIGlmIChyZXN1bHQgPiBzaXplb2Yod291dGJ1Zikvc2l6ZW9mKHdvdXRidWZbMF0pKSB7CisgICAgICAgICAgICB3b3V0YnVmcCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2YoUHlfVU5JQ09ERSkpOworICAgICAgICAgICAgaWYgKCF3b3V0YnVmcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7CiAgICAgICAgIH0KLSAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUod291dGJ1ZnAsIHdjc2xlbih3b3V0YnVmcCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3JfdW5pY29kZSgiR2V0RnVsbFBhdGhOYW1lVyIsIHdwYXRoKTsKKyAgICAgICAgaWYgKHdvdXRidWZwICE9IHdvdXRidWYpCisgICAgICAgICAgICBmcmVlKHdvdXRidWZwKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOworCiAjZW5kaWYKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUgKGFyZ3MsICJPJjpfZ2V0ZnVsbHBhdGhuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIGlmICghR2V0RnVsbFBhdGhOYW1lKHBhdGgsIHNpemVvZihvdXRidWYpL3NpemVvZihvdXRidWZbMF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJ1ZiwgJnRlbXApKSB7CiAgICAgICAgIHdpbjMyX2Vycm9yKCJHZXRGdWxsUGF0aE5hbWUiLCBwYXRoKTsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIDApKSkgewogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZShvdXRidWYsIHN0cmxlbihvdXRidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCBOVUxMKTsKICAgICB9CiAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZyhvdXRidWYpOwogfSAvKiBlbmQgb2YgcG9zaXhfX2dldGZ1bGxwYXRobmFtZSAqLworCisvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCitzdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlQSkoSEFORExFLCBMUFNUUiwgRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CitzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CitzdGF0aWMgaW50CitjaGVja19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUoKQoreworICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CisgICAgLyogb25seSByZWNoZWNrICovCisgICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIHsKKyAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMiIpOworICAgICAgICAqKEZBUlBST0MqKSZQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVBID0gR2V0UHJvY0FkZHJlc3MoaEtlcm5lbDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEiKTsKKyAgICAgICAgKihGQVJQUk9DKikmUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVyA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXIik7CisgICAgICAgIGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSBQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVBICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXOworICAgIH0KKyAgICByZXR1cm4gaGFzX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZTsKK30KKworLyogQSBoZWxwZXIgZnVuY3Rpb24gZm9yIHNhbWVwYXRoIG9uIHdpbmRvd3MgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9fZ2V0ZmluYWxwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIGhGaWxlOworICAgIGludCBidWZfc2l6ZTsKKyAgICB3Y2hhcl90ICp0YXJnZXRfcGF0aDsKKyAgICBpbnQgcmVzdWx0X2xlbmd0aDsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIHdjaGFyX3QgKnBhdGg7CisgICAgCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ1fDpfZ2V0ZmluYWxwYXRobmFtZSIsICZwYXRoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZighY2hlY2tfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKCkpIHsKKyAgICAgICAgLyogSWYgdGhlIE9TIGRvZXNuJ3QgaGF2ZSBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUsIHJldHVybiBhCisgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IuICovCisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgbm90IGF2YWlsYWJsZSBvbiB0aGlzIHBsYXRmb3JtIik7CisgICAgfQorCisgICAgaEZpbGUgPSBDcmVhdGVGaWxlVygKKyAgICAgICAgcGF0aCwKKyAgICAgICAgMCwgLyogZGVzaXJlZCBhY2Nlc3MgKi8KKyAgICAgICAgMCwgLyogc2hhcmUgbW9kZSAqLworICAgICAgICBOVUxMLCAvKiBzZWN1cml0eSBhdHRyaWJ1dGVzICovCisgICAgICAgIE9QRU5fRVhJU1RJTkcsCisgICAgICAgIC8qIEZJTEVfRkxBR19CQUNLVVBfU0VNQU5USUNTIGlzIHJlcXVpcmVkIHRvIG9wZW4gYSBkaXJlY3RvcnkgKi8KKyAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsCisgICAgICAgIE5VTEwpOworICAgIAorICAgIGlmKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGaW5hbFBhdGhOYW15QnlIYW5kbGUiLCBwYXRoKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBnZXQgYSBoYW5kbGUgdG8gZmlsZS4iKTsKKyAgICB9CisKKyAgICAvKiBXZSBoYXZlIGEgZ29vZCBoYW5kbGUgdG8gdGhlIHRhcmdldCwgdXNlIGl0IHRvIGRldGVybWluZSB0aGUKKyAgICAgICB0YXJnZXQgcGF0aCBuYW1lLiAqLworICAgIGJ1Zl9zaXplID0gUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVyhoRmlsZSwgMCwgMCwgVk9MVU1FX05BTUVfTlQpOworCisgICAgaWYoIWJ1Zl9zaXplKQorICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIiwgcGF0aCk7CisKKyAgICB0YXJnZXRfcGF0aCA9ICh3Y2hhcl90ICopbWFsbG9jKChidWZfc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgIGlmKCF0YXJnZXRfcGF0aCkKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisKKyAgICByZXN1bHRfbGVuZ3RoID0gUHlfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlVyhoRmlsZSwgdGFyZ2V0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX3NpemUsIFZPTFVNRV9OQU1FX0RPUyk7CisgICAgaWYoIXJlc3VsdF9sZW5ndGgpCisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGaW5hbFBhdGhOYW15QnlIYW5kbGUiLCBwYXRoKTsKKworICAgIGlmKCFDbG9zZUhhbmRsZShoRmlsZSkpCisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUiLCBwYXRoKTsKKworICAgIHRhcmdldF9wYXRoW3Jlc3VsdF9sZW5ndGhdID0gMDsKKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUodGFyZ2V0X3BhdGgsIHJlc3VsdF9sZW5ndGgpOworICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgIHJldHVybiByZXN1bHQ7CisKK30gLyogZW5kIG9mIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lICovCisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaEZpbGU7CisgICAgQllfSEFORExFX0ZJTEVfSU5GT1JNQVRJT04gaW5mbzsKKyAgICBpbnQgZmQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6X2dldGZpbGVpbmZvcm1hdGlvbiIsICZmZCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGhGaWxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhGaWxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKworICAgIGlmICghR2V0RmlsZUluZm9ybWF0aW9uQnlIYW5kbGUoaEZpbGUsICZpbmZvKSkKKyAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgTlVMTCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWlpIiwgaW5mby5kd1ZvbHVtZVNlcmlhbE51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4SGlnaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uRmlsZUluZGV4TG93KTsKK30KICNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5RG9jX1NUUlZBUihwb3NpeF9ta2Rpcl9fZG9jX18sCkBAIC0yNjQwLDI3ICsyODM0LDI1IEBACiAgICAgaW50IG1vZGUgPSAwNzc3OwogCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxpOm1rZGlyIiwgJnBvLCAmbW9kZSkpIHsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIC8qIFB5VW5pY29kZV9BU19VTklDT0RFIE9LIHdpdGhvdXQgdGhyZWFkIGxvY2sgYXMKLSAgICAgICAgICAgICAgIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLwotICAgICAgICAgICAgcmVzID0gQ3JlYXRlRGlyZWN0b3J5VyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIE5VTEwpOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmICghcmVzKQotICAgICAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJta2RpciIsIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8aTpta2RpciIsICZwbywgJm1vZGUpKSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcworICAgICAgICAgICBpdCBpcyBhIHNpbXBsZSBkZXJlZmVyZW5jZS4gKi8KKyAgICAgICAgcmVzID0gQ3JlYXRlRGlyZWN0b3J5VyhQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIE5VTEwpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoIXJlcykKKyAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJta2RpciIsIFB5VW5pY29kZV9BU19VTklDT0RFKHBvKSk7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQorICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KKyAgICBQeUVycl9DbGVhcigpOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZ8aTpta2RpciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmbW9kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQgbG9jayBhcwogICAgICAgIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLwpAQCAtMjY2OCwxMCArMjg2MCwxMCBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKCFyZXMpIHsKICAgICAgICAgd2luMzJfZXJyb3IoIm1rZGlyIiwgcGF0aCk7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiAjZWxzZQpAQCAtMjY3OSw3ICsyODcxLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mfGk6bWtkaXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwgJm1vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gYnl0ZXMyc3RyKG9wYXRoLCAxKTsKKyAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmICggZGVmaW5lZChfX1dBVENPTUNfXykgfHwgZGVmaW5lZChQWUNDX1ZBQ1BQKSApICYmICFkZWZpbmVkKF9fUU5YX18pCiAgICAgcmVzID0gbWtkaXIocGF0aCk7CkBAIC0yNjg5LDcgKzI4ODEsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiAjZW5kaWYKQEAgLTI3NDksMjggKzI5NDEsMjYgQEAKICAgICBQeU9iamVjdCAqbzEsICpvMjsKICAgICBjaGFyICpwMSwgKnAyOwogICAgIEJPT0wgcmVzdWx0OwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnJlbmFtZSIsICZvMSwgJm8yKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POnJlbmFtZSIsICZvMSwgJm8yKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8xKSkKKyAgICBpZiAoIWNvbnZlcnRfdG9fdW5pY29kZSgmbzEpKQogICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBpZiAoIWNvbnZlcnRfdG9fdW5pY29kZSgmbzIpKSB7CisgICAgaWYgKCFjb252ZXJ0X3RvX3VuaWNvZGUoJm8yKSkgewogICAgICAgICBQeV9ERUNSRUYobzEpOwogICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcmVzdWx0ID0gTW92ZUZpbGVXKFB5VW5pY29kZV9Bc1VuaWNvZGUobzEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVW5pY29kZShvMikpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBQeV9ERUNSRUYobzEpOwotICAgICAgICBQeV9ERUNSRUYobzIpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigicmVuYW1lIiwgTlVMTCk7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7Ci1lcnJvcjoKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlc3VsdCA9IE1vdmVGaWxlVyhQeVVuaWNvZGVfQXNVbmljb2RlKG8xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVW5pY29kZShvMikpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgUHlfREVDUkVGKG8xKTsKKyAgICBQeV9ERUNSRUYobzIpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoInJlbmFtZSIsIE5VTEwpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK2Vycm9yOgorICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzczpyZW5hbWUiLCAmcDEsICZwMikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTI4MDksNyArMjk5OSw3IEBACiBwb3NpeF9zdGF0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgcmV0dXJuIHBvc2l4X2RvX3N0YXQoc2VsZiwgYXJncywgIk8mOnN0YXQiLCBTVEFULCAiVTpzdGF0Iiwgd2luMzJfd3N0YXQpOworICAgIHJldHVybiBwb3NpeF9kb19zdGF0KHNlbGYsIGFyZ3MsICJPJjpzdGF0IiwgU1RBVCwgIlU6c3RhdCIsIHdpbjMyX3N0YXRfdyk7CiAjZWxzZQogICAgIHJldHVybiBwb3NpeF9kb19zdGF0KHNlbGYsIGFyZ3MsICJPJjpzdGF0IiwgU1RBVCwgTlVMTCwgTlVMTCk7CiAjZW5kaWYKQEAgLTI4NDAsMTEgKzMwMzAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmY29tbWFuZF9vYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGNvbW1hbmQgPSBieXRlczJzdHIoY29tbWFuZF9vYmosIDEpOworICAgIGNvbW1hbmQgPSBQeUJ5dGVzX0FzU3RyaW5nKGNvbW1hbmRfb2JqKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc3RzID0gc3lzdGVtKGNvbW1hbmQpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgcmVsZWFzZV9ieXRlcyhjb21tYW5kX29iaik7CisgICAgUHlfREVDUkVGKGNvbW1hbmRfb2JqKTsKICNlbmRpZgogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoc3RzKTsKIH0KQEAgLTI4NjcsNiArMzA1Nyw0MSBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaSk7CiB9CiAKKyNpZmRlZiBNU19XSU5ET1dTCisKKy8qIG92ZXJyaWRlIHRoZSBkZWZhdWx0IERlbGV0ZUZpbGVXIGJlaGF2aW9yIHNvIHRoYXQgZGlyZWN0b3J5CitzeW1saW5rcyBjYW4gYmUgcmVtb3ZlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIHRoZSBzYW1lIGFzIHdpdGgKK1VuaXggc3ltbGlua3MgKi8KK0JPT0wgV0lOQVBJIFB5X0RlbGV0ZUZpbGVXKExQQ1dTVFIgbHBGaWxlTmFtZSkKK3sKKyAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIGluZm87CisgICAgV0lOMzJfRklORF9EQVRBVyBmaW5kX2RhdGE7CisgICAgSEFORExFIGZpbmRfZGF0YV9oYW5kbGU7CisgICAgaW50IGlzX2RpcmVjdG9yeSA9IDA7CisgICAgaW50IGlzX2xpbmsgPSAwOworCisgICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGxwRmlsZU5hbWUsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmluZm8pKSB7CisgICAgICAgIGlzX2RpcmVjdG9yeSA9IGluZm8uZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWTsKKyAgICAgICAgCisgICAgICAgIC8qIEdldCBXSU4zMl9GSU5EX0RBVEEgc3RydWN0dXJlIGZvciB0aGUgcGF0aCB0byBkZXRlcm1pbmUgaWYKKyAgICAgICAgICAgaXQgaXMgYSBzeW1saW5rICovCisgICAgICAgIGlmKGlzX2RpcmVjdG9yeSAmJgorICAgICAgICAgICBpbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9SRVBBUlNFX1BPSU5UKSB7CisgICAgICAgICAgICBmaW5kX2RhdGFfaGFuZGxlID0gRmluZEZpcnN0RmlsZVcobHBGaWxlTmFtZSwgJmZpbmRfZGF0YSk7CisKKyAgICAgICAgICAgIGlmKGZpbmRfZGF0YV9oYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgICAgICAgICBpc19saW5rID0gZmluZF9kYXRhLmR3UmVzZXJ2ZWQwID09IElPX1JFUEFSU0VfVEFHX1NZTUxJTks7CisgICAgICAgICAgICAgICAgRmluZENsb3NlKGZpbmRfZGF0YV9oYW5kbGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlzX2RpcmVjdG9yeSAmJiBpc19saW5rKQorICAgICAgICByZXR1cm4gUmVtb3ZlRGlyZWN0b3J5VyhscEZpbGVOYW1lKTsKKworICAgIHJldHVybiBEZWxldGVGaWxlVyhscEZpbGVOYW1lKTsKK30KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAKIFB5RG9jX1NUUlZBUihwb3NpeF91bmxpbmtfX2RvY19fLAogInVubGluayhwYXRoKVxuXG5cCkBAIC0yODgwLDcgKzMxMDUsOCBAQAogcG9zaXhfdW5saW5rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgcmV0dXJuIHdpbjMyXzFzdHIoYXJncywgInJlbW92ZSIsICJ5OnJlbW92ZSIsIERlbGV0ZUZpbGVBLCAiVTpyZW1vdmUiLCBEZWxldGVGaWxlVyk7CisgICAgcmV0dXJuIHdpbjMyXzFzdHIoYXJncywgInJlbW92ZSIsICJ5OnJlbW92ZSIsIERlbGV0ZUZpbGVBLAorICAgICAgICAgICAgICAgICAgICAgICJVOnJlbW92ZSIsIFB5X0RlbGV0ZUZpbGVXKTsKICNlbHNlCiAgICAgcmV0dXJuIHBvc2l4XzFzdHIoYXJncywgIk8mOnJlbW92ZSIsIHVubGluayk7CiAjZW5kaWYKQEAgLTI5NzAsMjYgKzMxOTYsMjUgQEAKICAgICBGSUxFVElNRSBhdGltZSwgbXRpbWU7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAodW5pY29kZV9maWxlX25hbWVzKCkpIHsKLSAgICAgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVPfDp1dGltZSIsICZvYndwYXRoLCAmYXJnKSkgewotICAgICAgICAgICAgd3BhdGggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShvYndwYXRoKTsKLSAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGhGaWxlID0gQ3JlYXRlRmlsZVcod3BhdGgsIEZJTEVfV1JJVEVfQVRUUklCVVRFUywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgT1BFTl9FWElTVElORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgidXRpbWUiLCB3cGF0aCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgLyogRHJvcCB0aGUgYXJndW1lbnQgcGFyc2luZyBlcnJvciBhcyBuYXJyb3cgc3RyaW5ncwotICAgICAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIH0KKyAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVU98OnV0aW1lIiwgJm9id3BhdGgsICZhcmcpKSB7CisgICAgICAgIHdwYXRoID0gUHlVbmljb2RlX0FTX1VOSUNPREUob2J3cGF0aCk7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlVyh3cGF0aCwgRklMRV9XUklURV9BVFRSSUJVVEVTLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsIE5VTEwpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgidXRpbWUiLCB3cGF0aCk7CisgICAgfSBlbHNlCisgICAgICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKKyAgICAgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKICAgICBpZiAoIXdwYXRoKSB7CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZPOnV0aW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9hcGF0aCwgJmFyZykpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXBhdGggPSBieXRlczJzdHIob2FwYXRoLCAxKTsKKyAgICAgICAgYXBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9hcGF0aCk7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgaEZpbGUgPSBDcmVhdGVGaWxlQShhcGF0aCwgRklMRV9XUklURV9BVFRSSUJVVEVTLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE9QRU5fRVhJU1RJTkcsCkBAIC0yOTk3LDEwICszMjIyLDEwIEBACiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAgICAgICAgd2luMzJfZXJyb3IoInV0aW1lIiwgYXBhdGgpOwotICAgICAgICAgICAgcmVsZWFzZV9ieXRlcyhvYXBhdGgpOworICAgICAgICAgICAgUHlfREVDUkVGKG9hcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZWxlYXNlX2J5dGVzKG9hcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvYXBhdGgpOwogICAgIH0KIAogICAgIGlmIChhcmcgPT0gUHlfTm9uZSkgewpAQCAtMzA3MCw3ICszMjk1LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTzp1dGltZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIGlmIChhcmcgPT0gUHlfTm9uZSkgewogICAgICAgICAvKiBvcHRpb25hbCB0aW1lIHZhbHVlcyBub3QgZ2l2ZW4gKi8KICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwpAQCAtMzA4MCwxOCArMzMwNSwxOCBAQAogICAgIGVsc2UgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZykgfHwgUHlUdXBsZV9TaXplKGFyZykgIT0gMikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInV0aW1lKCkgYXJnIDIgbXVzdCBiZSBhIHR1cGxlIChhdGltZSwgbXRpbWUpIik7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChleHRyYWN0X3RpbWUoUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICZhdGltZSwgJmF1c2VjKSA9PSAtMSkgewotICAgICAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGV4dHJhY3RfdGltZShQeVR1cGxlX0dFVF9JVEVNKGFyZywgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJm10aW1lLCAmbXVzZWMpID09IC0xKSB7Ci0gICAgICAgICAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBBVElNRSA9IGF0aW1lOwpAQCAtMzExMSw3ICszMzM2LDcgQEAKICAgICBpZiAocmVzIDwgMCkgewogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwogICAgIH0KLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKICN1bmRlZiBVVElNRV9BUkcKQEAgLTMxNTQsMTIgKzMzNzksMTEgQEAKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgaWYgKCFQeVVuaWNvZGVfRlNDb252ZXJ0ZXIobywgJmJ5dGVzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc2l6ZSA9IFB5T2JqZWN0X1NpemUoYnl0ZXMpOworICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ5dGVzKTsKICAgICAqb3V0ID0gUHlNZW1fTWFsbG9jKHNpemUrMSk7CiAgICAgaWYgKCEqb3V0KQogICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBEb24ndCBsb2NrIGJ5dGVzLCBhcyB3ZSBob2xkIHRoZSBHSUwgKi8KLSAgICBtZW1jcHkoKm91dCwgYnl0ZXMyc3RyKGJ5dGVzLCAwKSwgc2l6ZSsxKTsKKyAgICBtZW1jcHkoKm91dCwgUHlCeXRlc19Bc1N0cmluZyhieXRlcyksIHNpemUrMSk7CiAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTMxOTEsNyArMzQxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKICAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwpAQCAtMzIwMiwxOCArMzQyNiwxOCBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4ZWN2KCkgYXJnIDIgbXVzdCBiZSBhIHR1cGxlIG9yIGxpc3QiKTsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoYXJnYyA8IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleGVjdigpIGFyZyAyIG11c3Qgbm90IGJlIGVtcHR5Iik7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7CiAgICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CkBAIC0zMjIyLDcgKzM0NDYsNyBAQAogICAgICAgICAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGkpOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhlY3YoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICB9CkBAIC0zMjM0LDcgKzM0NTgsNyBAQAogICAgIC8qIElmIHdlIGdldCBoZXJlIGl0J3MgZGVmaW5pdGVseSBhbiBlcnJvciAqLwogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiB9CiAKQEAgLTMzNDcsNyArMzU3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndiwgJmVudikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKICAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwpAQCAtMzM5OSw3ICszNjIzLDcgQEAKICAgZmFpbF8xOgogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKICAgZmFpbF8wOgotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAjZW5kaWYgLyogSEFWRV9FWEVDViAqLwpAQCAtMzQzMyw3ICszNjU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKICAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwogICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07CkBAIC0zNDQ1LDEzICszNjY5LDEzIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252KCkgYXJnIDIgbXVzdCBiZSBhIHR1cGxlIG9yIGxpc3QiKTsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKICAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKQEAgLTM0NjEsNyArMzY4NSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICJzcGF3bnYoKSBhcmcgMiBtdXN0IGNvbnRhaW4gb25seSBzdHJpbmdzIik7Ci0gICAgICAgICAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTM0ODEsNyArMzcwNSw3IEBACiAjZW5kaWYKIAogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKLSAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICBQeV9ERUNSRUYob3BhdGgpOwogCiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKQEAgLTM1MjYsNyArMzc1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndiwgJmVudikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBieXRlczJzdHIob3BhdGgsIDEpOworICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKICAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7CiAgICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKICAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwpAQCAtMzU5NCw3ICszODE4LDcgQEAKICAgZmFpbF8xOgogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKICAgZmFpbF8wOgotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgcmV0dXJuIHJlczsKIH0KIApAQCAtMzYyNyw3ICszODUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKICAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwogICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07CkBAIC0zNjM5LDEzICszODYzLDEzIEBACiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgYmUgYSB0dXBsZSBvciBsaXN0Iik7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7CiAgICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CkBAIC0zNjU1LDcgKzM4NzksNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAogICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAic3Bhd252cCgpIGFyZyAyIG11c3QgY29udGFpbiBvbmx5IHN0cmluZ3MiKTsKLSAgICAgICAgICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMzY3MCw3ICszODk0LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGFyZ2MpOwotICAgIHJlbGVhc2VfYnl0ZXMob3BhdGgpOworICAgIFB5X0RFQ1JFRihvcGF0aCk7CiAKICAgICBpZiAoc3Bhd252YWwgPT0gLTEpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtMzcxMiw3ICszOTM2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2LCAmZW52KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKICAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwogICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07CkBAIC0zNzcxLDcgKzM5OTUsNyBAQAogICBmYWlsXzE6CiAgICAgZnJlZV9zdHJpbmdfYXJyYXkoYXJndmxpc3QsIGxhc3RhcmcpOwogICBmYWlsXzA6Ci0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7CisgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICByZXR1cm4gcmVzOwogfQogI2VuZGlmIC8qIFBZT1NfT1MyICovCkBAIC0zNzg5LDE0ICs0MDEzLDE4IEBACiBwb3NpeF9mb3JrMShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKICAgICBwaWRfdCBwaWQ7Ci0gICAgaW50IHJlc3VsdDsKKyAgICBpbnQgcmVzdWx0ID0gMDsKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKICAgICBwaWQgPSBmb3JrMSgpOwotICAgIHJlc3VsdCA9IF9QeUltcG9ydF9SZWxlYXNlTG9jaygpOworICAgIGlmIChwaWQgPT0gMCkgeworICAgICAgICAvKiBjaGlsZDogdGhpcyBjbG9iYmVycyBhbmQgcmVzZXRzIHRoZSBpbXBvcnQgbG9jay4gKi8KKyAgICAgICAgUHlPU19BZnRlckZvcmsoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBwYXJlbnQ6IHJlbGVhc2UgdGhlIGltcG9ydCBsb2NrLiAqLworICAgICAgICByZXN1bHQgPSBfUHlJbXBvcnRfUmVsZWFzZUxvY2soKTsKKyAgICB9CiAgICAgaWYgKHBpZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgaWYgKHBpZCA9PSAwKQotICAgICAgICBQeU9TX0FmdGVyRm9yaygpOwogICAgIGlmIChyZXN1bHQgPCAwKSB7CiAgICAgICAgIC8qIERvbid0IGNsb2JiZXIgdGhlIE9TRXJyb3IgaWYgdGhlIGZvcmsgZmFpbGVkLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtMzgxOCwxNCArNDA0NiwxOCBAQAogcG9zaXhfZm9yayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKICAgICBwaWRfdCBwaWQ7Ci0gICAgaW50IHJlc3VsdDsKKyAgICBpbnQgcmVzdWx0ID0gMDsKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKICAgICBwaWQgPSBmb3JrKCk7Ci0gICAgcmVzdWx0ID0gX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCk7CisgICAgaWYgKHBpZCA9PSAwKSB7CisgICAgICAgIC8qIGNoaWxkOiB0aGlzIGNsb2JiZXJzIGFuZCByZXNldHMgdGhlIGltcG9ydCBsb2NrLiAqLworICAgICAgICBQeU9TX0FmdGVyRm9yaygpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIHBhcmVudDogcmVsZWFzZSB0aGUgaW1wb3J0IGxvY2suICovCisgICAgICAgIHJlc3VsdCA9IF9QeUltcG9ydF9SZWxlYXNlTG9jaygpOworICAgIH0KICAgICBpZiAocGlkID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBpZiAocGlkID09IDApCi0gICAgICAgIFB5T1NfQWZ0ZXJGb3JrKCk7CiAgICAgaWYgKHJlc3VsdCA8IDApIHsKICAgICAgICAgLyogRG9uJ3QgY2xvYmJlciB0aGUgT1NFcnJvciBpZiB0aGUgZm9yayBmYWlsZWQuICovCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0zODUxLDYgKzQwODMsMTAgQEAKICNlbHNlCiAjaWZkZWYgSEFWRV9MSUJVVElMX0gKICNpbmNsdWRlIDxsaWJ1dGlsLmg+CisjZWxzZQorI2lmZGVmIEhBVkVfVVRJTF9ICisjaW5jbHVkZSA8dXRpbC5oPgorI2VuZGlmIC8qIEhBVkVfVVRJTF9IICovCiAjZW5kaWYgLyogSEFWRV9MSUJVVElMX0ggKi8KICNlbmRpZiAvKiBIQVZFX1BUWV9IICovCiAjaWZkZWYgSEFWRV9TVFJPUFRTX0gKQEAgLTM5MzQsMTYgKzQxNzAsMjAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9mb3JrcHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotICAgIGludCBtYXN0ZXJfZmQgPSAtMSwgcmVzdWx0OworICAgIGludCBtYXN0ZXJfZmQgPSAtMSwgcmVzdWx0ID0gMDsKICAgICBwaWRfdCBwaWQ7CiAKICAgICBfUHlJbXBvcnRfQWNxdWlyZUxvY2soKTsKICAgICBwaWQgPSBmb3JrcHR5KCZtYXN0ZXJfZmQsIE5VTEwsIE5VTEwsIE5VTEwpOwotICAgIHJlc3VsdCA9IF9QeUltcG9ydF9SZWxlYXNlTG9jaygpOworICAgIGlmIChwaWQgPT0gMCkgeworICAgICAgICAvKiBjaGlsZDogdGhpcyBjbG9iYmVycyBhbmQgcmVzZXRzIHRoZSBpbXBvcnQgbG9jay4gKi8KKyAgICAgICAgUHlPU19BZnRlckZvcmsoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBwYXJlbnQ6IHJlbGVhc2UgdGhlIGltcG9ydCBsb2NrLiAqLworICAgICAgICByZXN1bHQgPSBfUHlJbXBvcnRfUmVsZWFzZUxvY2soKTsKKyAgICB9CiAgICAgaWYgKHBpZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgaWYgKHBpZCA9PSAwKQotICAgICAgICBQeU9TX0FmdGVyRm9yaygpOwogICAgIGlmIChyZXN1bHQgPCAwKSB7CiAgICAgICAgIC8qIERvbid0IGNsb2JiZXIgdGhlIE9TRXJyb3IgaWYgdGhlIGZvcmsgZmFpbGVkLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLApAQCAtNDA4MSw2ICs0MzIxLDM2IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfSU5JVEdST1VQUworUHlEb2NfU1RSVkFSKHBvc2l4X2luaXRncm91cHNfX2RvY19fLAorImluaXRncm91cHModXNlcm5hbWUsIGdpZCkgLT4gTm9uZVxuXG5cCitDYWxsIHRoZSBzeXN0ZW0gaW5pdGdyb3VwcygpIHRvIGluaXRpYWxpemUgdGhlIGdyb3VwIGFjY2VzcyBsaXN0IHdpdGggYWxsIG9mXG5cCit0aGUgZ3JvdXBzIG9mIHdoaWNoIHRoZSBzcGVjaWZpZWQgdXNlcm5hbWUgaXMgYSBtZW1iZXIsIHBsdXMgdGhlIHNwZWNpZmllZFxuXAorZ3JvdXAgaWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9pbml0Z3JvdXBzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb25hbWU7CisgICAgY2hhciAqdXNlcm5hbWU7CisgICAgaW50IHJlczsKKyAgICBsb25nIGdpZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZsOmluaXRncm91cHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvbmFtZSwgJmdpZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHVzZXJuYW1lID0gUHlCeXRlc19BU19TVFJJTkcob25hbWUpOworCisgICAgcmVzID0gaW5pdGdyb3Vwcyh1c2VybmFtZSwgKGdpZF90KSBnaWQpOworICAgIFB5X0RFQ1JFRihvbmFtZSk7CisgICAgaWYgKHJlcyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9HRVRQR0lECiBQeURvY19TVFJWQVIocG9zaXhfZ2V0cGdpZF9fZG9jX18sCiAiZ2V0cGdpZChwaWQpIC0+IHBnaWRcblxuXApAQCAtNDA5MCw3ICs0MzYwLDcgQEAKIHBvc2l4X2dldHBnaWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIHBpZF90IHBpZCwgcGdpZDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VfUElEICI6Z2V0cGdpZCIsICZwaWQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICI6Z2V0cGdpZCIsICZwaWQpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBwZ2lkID0gZ2V0cGdpZChwaWQpOwogICAgIGlmIChwZ2lkIDwgMCkKQEAgLTQxMzgsMTYgKzQ0MDgsNjUgQEAKICNlbmRpZiAvKiBIQVZFX1NFVFBHUlAgKi8KIAogI2lmZGVmIEhBVkVfR0VUUFBJRAorCisjaWZkZWYgTVNfV0lORE9XUworI2luY2x1ZGUgPHRsaGVscDMyLmg+CisKK3N0YXRpYyBQeU9iamVjdCoKK3dpbjMyX2dldHBwaWQoKQoreworICAgIEhBTkRMRSBzbmFwc2hvdDsKKyAgICBwaWRfdCBteXBpZDsKKyAgICBQeU9iamVjdCogcmVzdWx0ID0gTlVMTDsKKyAgICBCT09MIGhhdmVfcmVjb3JkOworICAgIFBST0NFU1NFTlRSWTMyIHBlOworCisgICAgbXlwaWQgPSBnZXRwaWQoKTsgLyogVGhpcyBmdW5jdGlvbiBuZXZlciBmYWlscyAqLworCisgICAgc25hcHNob3QgPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKKyAgICBpZiAoc25hcHNob3QgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisKKyAgICBwZS5kd1NpemUgPSBzaXplb2YocGUpOworICAgIGhhdmVfcmVjb3JkID0gUHJvY2VzczMyRmlyc3Qoc25hcHNob3QsICZwZSk7CisgICAgd2hpbGUgKGhhdmVfcmVjb3JkKSB7CisgICAgICAgIGlmIChteXBpZCA9PSAocGlkX3QpcGUudGgzMlByb2Nlc3NJRCkgeworICAgICAgICAgICAgLyogV2UgY291bGQgY2FjaGUgdGhlIHVsb25nIHZhbHVlIGluIGEgc3RhdGljIHZhcmlhYmxlLiAqLworICAgICAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21QaWQoKHBpZF90KXBlLnRoMzJQYXJlbnRQcm9jZXNzSUQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBoYXZlX3JlY29yZCA9IFByb2Nlc3MzMk5leHQoc25hcHNob3QsICZwZSk7CisgICAgfQorCisgICAgLyogSWYgb3VyIGxvb3AgZXhpdHMgYW5kIG91ciBwaWQgd2FzIG5vdCBmb3VuZCAocmVzdWx0IHdpbGwgYmUgTlVMTCkKKyAgICAgKiB0aGVuIEdldExhc3RFcnJvciB3aWxsIHJldHVybiBFUlJPUl9OT19NT1JFX0ZJTEVTLiBUaGlzIGlzIGFuCisgICAgICogZXJyb3IgYW55d2F5LCBzbyBsZXQncyByYWlzZSBpdC4gKi8KKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoR2V0TGFzdEVycm9yKCkpOworCisgICAgQ2xvc2VIYW5kbGUoc25hcHNob3QpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKk1TX1dJTkRPV1MqLworCiBQeURvY19TVFJWQVIocG9zaXhfZ2V0cHBpZF9fZG9jX18sCiAiZ2V0cHBpZCgpIC0+IHBwaWRcblxuXAotUmV0dXJuIHRoZSBwYXJlbnQncyBwcm9jZXNzIGlkLiIpOworUmV0dXJuIHRoZSBwYXJlbnQncyBwcm9jZXNzIGlkLiAgSWYgdGhlIHBhcmVudCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZCxcblwKK1dpbmRvd3MgbWFjaGluZXMgd2lsbCBzdGlsbCByZXR1cm4gaXRzIGlkOyBvdGhlcnMgc3lzdGVtcyB3aWxsIHJldHVybiB0aGUgaWRcblwKK29mIHRoZSAnaW5pdCcgcHJvY2VzcyAoMSkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9nZXRwcGlkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICByZXR1cm4gd2luMzJfZ2V0cHBpZCgpOworI2Vsc2UKICAgICByZXR1cm4gUHlMb25nX0Zyb21QaWQoZ2V0cHBpZCgpKTsKLX0KICNlbmRpZgorfQorI2VuZGlmIC8qIEhBVkVfR0VUUFBJRCAqLwogCiAKICNpZmRlZiBIQVZFX0dFVExPR0lOCkBAIC00MTU5LDYgKzQ0NzgsMTcgQEAKIHBvc2l4X2dldGxvZ2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworI2lmZGVmIE1TX1dJTkRPV1MgICAgCisgICAgd2NoYXJfdCB1c2VyX25hbWVbVU5MRU4gKyAxXTsKKyAgICBEV09SRCBudW1fY2hhcnMgPSBzaXplb2YodXNlcl9uYW1lKS9zaXplb2YodXNlcl9uYW1lWzBdKTsKKworICAgIGlmIChHZXRVc2VyTmFtZVcodXNlcl9uYW1lLCAmbnVtX2NoYXJzKSkgeworICAgICAgICAvKiBudW1fY2hhcnMgaXMgdGhlIG51bWJlciBvZiB1bmljb2RlIGNoYXJzIHBsdXMgbnVsbCB0ZXJtaW5hdG9yICovCisgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIodXNlcl9uYW1lLCBudW1fY2hhcnMgLSAxKTsKKyAgICB9IAorICAgIGVsc2UgCisgICAgICAgIHJlc3VsdCA9IFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyNlbHNlCiAgICAgY2hhciAqbmFtZTsKICAgICBpbnQgb2xkX2Vycm5vID0gZXJybm87CiAKQEAgLTQxNzMsMTAgKzQ1MDMsMTAgQEAKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQobmFtZSk7CiAgICAgZXJybm8gPSBvbGRfZXJybm87Ci0KKyNlbmRpZgogICAgIHJldHVybiByZXN1bHQ7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvKiBIQVZFX0dFVExPR0lOICovCiAKICNpZmRlZiBIQVZFX0dFVFVJRAogUHlEb2NfU1RSVkFSKHBvc2l4X2dldHVpZF9fZG9jX18sCkBAIC00MjAxLDcgKzQ1MzEsNyBAQAogewogICAgIHBpZF90IHBpZDsKICAgICBpbnQgc2lnOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBQQVJTRV9QSUQgImk6a2lsbCIsICZwaWQsICZzaWcpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCiAgICAgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9JTlRSIHx8IHNpZyA9PSBYQ1BUX1NJR05BTF9CUkVBSykgewpAQCAtNDIzOSw3ICs0NTY5LDcgQEAKICAgICAgICBhIHBpZF90LiBTaW5jZSBnZXRwZ3JwKCkgcmV0dXJucyBhIHBpZF90LCB3ZSBhc3N1bWUga2lsbHBnIHNob3VsZAogICAgICAgIHRha2UgdGhlIHNhbWUgdHlwZS4gTW9yZW92ZXIsIHBpZF90IGlzIGFsd2F5cyBhdCBsZWFzdCBhcyB3aWRlIGFzCiAgICAgICAgaW50IChlbHNlIGNvbXBpbGF0aW9uIG9mIHRoaXMgbW9kdWxlIGZhaWxzKSwgd2hpY2ggaXMgc2FmZS4gKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VfUElEICJpOmtpbGxwZyIsICZwZ2lkLCAmc2lnKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpraWxscGciLCAmcGdpZCwgJnNpZykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChraWxscGcocGdpZCwgc2lnKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC00MjQ4LDYgKzQ1NzgsNTMgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgTVNfV0lORE9XUworUHlEb2NfU1RSVkFSKHdpbjMyX2tpbGxfX2RvY19fLAorImtpbGwocGlkLCBzaWcpXG5cblwKK0tpbGwgYSBwcm9jZXNzIHdpdGggYSBzaWduYWwuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCit3aW4zMl9raWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIERXT1JEIHBpZCwgc2lnLCBlcnI7CisgICAgSEFORExFIGhhbmRsZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2s6a2lsbCIsICZwaWQsICZzaWcpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIENvbnNvbGUgcHJvY2Vzc2VzIHdoaWNoIHNoYXJlIGEgY29tbW9uIGNvbnNvbGUgY2FuIGJlIHNlbnQgQ1RSTCtDIG9yCisgICAgICAgQ1RSTCtCUkVBSyBldmVudHMsIHByb3ZpZGVkIHRoZXkgaGFuZGxlIHNhaWQgZXZlbnRzLiAqLworICAgIGlmIChzaWcgPT0gQ1RSTF9DX0VWRU5UIHx8IHNpZyA9PSBDVFJMX0JSRUFLX0VWRU5UKSB7CisgICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCBwaWQpID09IDApIHsKKyAgICAgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgc2lnbmFsIGlzIG91dHNpZGUgb2Ygd2hhdCBHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQgY2FuIHVzZSwKKyAgICAgICBhdHRlbXB0IHRvIG9wZW4gYW5kIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gKi8KKyAgICBoYW5kbGUgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZBTFNFLCBwaWQpOworICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgeworICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorCisgICAgaWYgKFRlcm1pbmF0ZVByb2Nlc3MoaGFuZGxlLCBzaWcpID09IDApIHsKKyAgICAgICAgZXJyID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIHJlc3VsdCA9IFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgICAgICByZXN1bHQgPSBQeV9Ob25lOworICAgIH0KKworICAgIENsb3NlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisKICNpZmRlZiBIQVZFX1BMT0NLCiAKICNpZmRlZiBIQVZFX1NZU19MT0NLX0gKQEAgLTQ1OTYsNyArNDk3Myw3IEBACiAgICAgV0FJVF9UWVBFIHN0YXR1czsKICAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VfUElEICJpOndhaXQ0IiwgJnBpZCwgJm9wdGlvbnMpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJpOndhaXQ0IiwgJnBpZCwgJm9wdGlvbnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTQ2MjAsNyArNDk5Nyw3IEBACiAgICAgV0FJVF9UWVBFIHN0YXR1czsKICAgICBXQUlUX1NUQVRVU19JTlQoc3RhdHVzKSA9IDA7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VfUElEICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHBpZCA9IHdhaXRwaWQocGlkLCAmc3RhdHVzLCBvcHRpb25zKTsKQEAgLTQ2NDQsNyArNTAyMSw3IEBACiAgICAgUHlfaW50cHRyX3QgcGlkOwogICAgIGludCBzdGF0dXMsIG9wdGlvbnM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgUEFSU0VfUElEICJpOndhaXRwaWQiLCAmcGlkLCAmb3B0aW9ucykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHBpZCA9IF9jd2FpdCgmc3RhdHVzLCBwaWQsIG9wdGlvbnMpOwpAQCAtNDY5MSw3ICs1MDY4LDggQEAKICAgICByZXR1cm4gcG9zaXhfZG9fc3RhdChzZWxmLCBhcmdzLCAiTyY6bHN0YXQiLCBsc3RhdCwgTlVMTCwgTlVMTCk7CiAjZWxzZSAvKiAhSEFWRV9MU1RBVCAqLwogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICByZXR1cm4gcG9zaXhfZG9fc3RhdChzZWxmLCBhcmdzLCAiTyY6bHN0YXQiLCBTVEFULCAiVTpsc3RhdCIsIHdpbjMyX3dzdGF0KTsKKyAgICByZXR1cm4gcG9zaXhfZG9fc3RhdChzZWxmLCBhcmdzLCAiTyY6bHN0YXQiLCBTVEFULCAiVTpsc3RhdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgd2luMzJfbHN0YXRfdyk7CiAjZWxzZQogICAgIHJldHVybiBwb3NpeF9kb19zdGF0KHNlbGYsIGFyZ3MsICJPJjpsc3RhdCIsIFNUQVQsIE5VTEwsIE5VTEwpOwogI2VuZGlmCkBAIC00NzE3LDEwICs1MDk1LDEwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpyZWFkbGluayIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9wYXRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IGJ5dGVzMnN0cihvcGF0aCwgMSk7CisgICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIHYgPSBQeVNlcXVlbmNlX0dldEl0ZW0oYXJncywgMCk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICByZWxlYXNlX2J5dGVzKG9wYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC00NzM1LDI4ICs1MTEzLDE2IEBACiAgICAgaWYgKG4gPCAwKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwogCi0gICAgcmVsZWFzZV9ieXRlcyhvcGF0aCk7Ci0gICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoYnVmLCBuKTsKLSAgICBpZiAoYXJnX2lzX3VuaWNvZGUpIHsKLSAgICAgICAgUHlPYmplY3QgKnc7Ci0KLSAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdCh2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZWVzY2FwZSIpOwotICAgICAgICBpZiAodyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB2ID0gdzsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHYgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiB2OworICAgIFB5X0RFQ1JFRihvcGF0aCk7CisgICAgaWYgKGFyZ19pc191bmljb2RlKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmLCBuKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1Ziwgbik7CiB9CiAjZW5kaWYgLyogSEFWRV9SRUFETElOSyAqLwogCiAKLSNpZmRlZiBIQVZFX1NZTUxJTksKKyNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKIFB5RG9jX1NUUlZBUihwb3NpeF9zeW1saW5rX19kb2NfXywKICJzeW1saW5rKHNyYywgZHN0KVxuXG5cCiBDcmVhdGUgYSBzeW1ib2xpYyBsaW5rIHBvaW50aW5nIHRvIHNyYyBuYW1lZCBkc3QuIik7CkBAIC00NzY4LDYgKzUxMzQsMTY1IEBACiB9CiAjZW5kaWYgLyogSEFWRV9TWU1MSU5LICovCiAKKyNpZiAhZGVmaW5lZChIQVZFX1JFQURMSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK1B5RG9jX1NUUlZBUih3aW5fcmVhZGxpbmtfX2RvY19fLAorInJlYWRsaW5rKHBhdGgpIC0+IHBhdGhcblxuXAorUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGF0aCB0byB3aGljaCB0aGUgc3ltYm9saWMgbGluayBwb2ludHMuIik7CisKKy8qIFdpbmRvd3MgcmVhZGxpbmsgaW1wbGVtZW50YXRpb24gKi8KK3N0YXRpYyBQeU9iamVjdCAqCit3aW5fcmVhZGxpbmsoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHdjaGFyX3QgKnBhdGg7CisgICAgRFdPUkQgbl9ieXRlc19yZXR1cm5lZDsKKyAgICBEV09SRCBpb19yZXN1bHQ7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBIQU5ETEUgcmVwYXJzZV9wb2ludF9oYW5kbGU7CisKKyAgICBjaGFyIHRhcmdldF9idWZmZXJbTUFYSU1VTV9SRVBBUlNFX0RBVEFfQlVGRkVSX1NJWkVdOworICAgIFJFUEFSU0VfREFUQV9CVUZGRVIgKnJkYiA9IChSRVBBUlNFX0RBVEFfQlVGRkVSICopdGFyZ2V0X2J1ZmZlcjsKKyAgICB3Y2hhcl90ICpwcmludF9uYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICAgICAgICAgICAidTpyZWFkbGluayIsCisgICAgICAgICAgICAgICAgICAmcGF0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogRmlyc3QgZ2V0IGEgaGFuZGxlIHRvIHRoZSByZXBhcnNlIHBvaW50ICovCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJlcGFyc2VfcG9pbnRfaGFuZGxlID0gQ3JlYXRlRmlsZVcoCisgICAgICAgIHBhdGgsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIE9QRU5fRVhJU1RJTkcsCisgICAgICAgIEZJTEVfRkxBR19PUEVOX1JFUEFSU0VfUE9JTlR8RklMRV9GTEFHX0JBQ0tVUF9TRU1BTlRJQ1MsCisgICAgICAgIDApOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgCisgICAgaWYgKHJlcGFyc2VfcG9pbnRfaGFuZGxlPT1JTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICB7CisgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKCJyZWFkbGluayIsIHBhdGgpOworICAgIH0KKyAgICAKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgLyogTmV3IGNhbGwgRGV2aWNlSW9Db250cm9sIHRvIHJlYWQgdGhlIHJlcGFyc2UgcG9pbnQgKi8KKyAgICBpb19yZXN1bHQgPSBEZXZpY2VJb0NvbnRyb2woCisgICAgICAgIHJlcGFyc2VfcG9pbnRfaGFuZGxlLAorICAgICAgICBGU0NUTF9HRVRfUkVQQVJTRV9QT0lOVCwKKyAgICAgICAgMCwgMCwgLyogaW4gYnVmZmVyICovCisgICAgICAgIHRhcmdldF9idWZmZXIsIHNpemVvZih0YXJnZXRfYnVmZmVyKSwKKyAgICAgICAgJm5fYnl0ZXNfcmV0dXJuZWQsCisgICAgICAgIDAgLyogd2UncmUgbm90IHVzaW5nIE9WRVJMQVBQRURfSU8gKi8KKyAgICAgICAgKTsKKyAgICBDbG9zZUhhbmRsZShyZXBhcnNlX3BvaW50X2hhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChpb19yZXN1bHQ9PTApCisgICAgeworICAgICAgICByZXR1cm4gd2luMzJfZXJyb3JfdW5pY29kZSgicmVhZGxpbmsiLCBwYXRoKTsKKyAgICB9CisKKyAgICBpZiAocmRiLT5SZXBhcnNlVGFnICE9IElPX1JFUEFSU0VfVEFHX1NZTUxJTkspCisgICAgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAibm90IGEgc3ltYm9saWMgbGluayIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcHJpbnRfbmFtZSA9IHJkYi0+U3ltYm9saWNMaW5rUmVwYXJzZUJ1ZmZlci5QYXRoQnVmZmVyICsKKyAgICAgICAgICAgICAgICAgcmRiLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlByaW50TmFtZU9mZnNldDsKKworICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocHJpbnRfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgcmRiLT5TeW1ib2xpY0xpbmtSZXBhcnNlQnVmZmVyLlByaW50TmFtZUxlbmd0aC8yKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYgLyogIWRlZmluZWQoSEFWRV9SRUFETElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLworCisjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKKworLyogR3JhYiBDcmVhdGVTeW1ib2xpY0xpbmtXIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KK3N0YXRpYyBpbnQgaGFzX0NyZWF0ZVN5bWJvbGljTGlua1cgPSAwOworc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rVykoTFBXU1RSLCBMUFdTVFIsIERXT1JEKTsKK3N0YXRpYyBpbnQKK2NoZWNrX0NyZWF0ZVN5bWJvbGljTGlua1coKQoreworICAgIEhJTlNUQU5DRSBoS2VybmVsMzI7CisgICAgLyogb25seSByZWNoZWNrICovCisgICAgaWYgKGhhc19DcmVhdGVTeW1ib2xpY0xpbmtXKQorICAgICAgICByZXR1cm4gaGFzX0NyZWF0ZVN5bWJvbGljTGlua1c7CisgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlKCJLRVJORUwzMiIpOworICAgICooRkFSUFJPQyopJlB5X0NyZWF0ZVN5bWJvbGljTGlua1cgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDcmVhdGVTeW1ib2xpY0xpbmtXIik7CisgICAgaWYgKFB5X0NyZWF0ZVN5bWJvbGljTGlua1cpCisgICAgICAgIGhhc19DcmVhdGVTeW1ib2xpY0xpbmtXID0gMTsKKyAgICByZXR1cm4gaGFzX0NyZWF0ZVN5bWJvbGljTGlua1c7Cit9CisKK1B5RG9jX1NUUlZBUih3aW5fc3ltbGlua19fZG9jX18sCisic3ltbGluayhzcmMsIGRzdCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSlcblxuXAorQ3JlYXRlIGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0byBzcmMgbmFtZWQgZHN0LlxuXAordGFyZ2V0X2lzX2RpcmVjdG9yeSBpcyByZXF1aXJlZCBpZiB0aGUgdGFyZ2V0IGlzIHRvIGJlIGludGVycHJldGVkIGFzXG5cCithIGRpcmVjdG9yeS5cblwKK1RoaXMgZnVuY3Rpb24gcmVxdWlyZXMgV2luZG93cyA2LjAgb3IgZ3JlYXRlciwgYW5kIHJhaXNlcyBhXG5cCitOb3RJbXBsZW1lbnRlZEVycm9yIG90aGVyd2lzZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3dpbl9zeW1saW5rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InNyYyIsICJkZXN0IiwgInRhcmdldF9pc19kaXJlY3RvcnkiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqc3JjLCAqZGVzdDsKKyAgICBpbnQgdGFyZ2V0X2lzX2RpcmVjdG9yeSA9IDA7CisgICAgRFdPUkQgcmVzOworICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CisgICAgCisgICAgaWYgKCFjaGVja19DcmVhdGVTeW1ib2xpY0xpbmtXKCkpCisgICAgeworICAgICAgICAvKiByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yICovCisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICJDcmVhdGVTeW1ib2xpY0xpbmtXIG5vdCBmb3VuZCIpOworICAgIH0KKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpOnN5bWxpbmsiLAorICAgICAgICBrd2xpc3QsICZzcmMsICZkZXN0LCAmdGFyZ2V0X2lzX2RpcmVjdG9yeSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHdpbjMyX2Nhbl9zeW1saW5rID09IDApCisgICAgICAgIHJldHVybiBQeUVycl9Gb3JtYXQoUHlFeGNfT1NFcnJvciwgInN5bWJvbGljIGxpbmsgcHJpdmlsZWdlIG5vdCBoZWxkIik7CisKKyAgICBpZiAoIWNvbnZlcnRfdG9fdW5pY29kZSgmc3JjKSkgeyByZXR1cm4gTlVMTDsgfQorICAgIGlmICghY29udmVydF90b191bmljb2RlKCZkZXN0KSkgeworICAgICAgICBQeV9ERUNSRUYoc3JjKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIC8qIGlmIHNyYyBpcyBhIGRpcmVjdG9yeSwgZW5zdXJlIHRhcmdldF9pc19kaXJlY3Rvcnk9PTEgKi8KKyAgICBpZigKKyAgICAgICAgR2V0RmlsZUF0dHJpYnV0ZXNFeFcoCisgICAgICAgICAgICBQeVVuaWNvZGVfQXNVbmljb2RlKHNyYyksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJnNyY19pbmZvCisgICAgICAgICkpCisgICAgeworICAgICAgICB0YXJnZXRfaXNfZGlyZWN0b3J5ID0gdGFyZ2V0X2lzX2RpcmVjdG9yeSB8fAorICAgICAgICAgICAgKHNyY19pbmZvLmR3RmlsZUF0dHJpYnV0ZXMgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpOworICAgIH0KKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXMgPSBQeV9DcmVhdGVTeW1ib2xpY0xpbmtXKAorICAgICAgICBQeVVuaWNvZGVfQXNVbmljb2RlKGRlc3QpLAorICAgICAgICBQeVVuaWNvZGVfQXNVbmljb2RlKHNyYyksCisgICAgICAgIHRhcmdldF9pc19kaXJlY3RvcnkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgUHlfREVDUkVGKHNyYyk7CisgICAgUHlfREVDUkVGKGRlc3QpOworICAgIGlmICghcmVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX3VuaWNvZGUoInN5bWxpbmsiLCBQeVVuaWNvZGVfQXNVbmljb2RlKHNyYykpOworICAgIH0KKyAgICAKKyAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgcmV0dXJuIFB5X05vbmU7Cit9CisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykgKi8KIAogI2lmZGVmIEhBVkVfVElNRVMKICNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCkBAIC00ODYwLDcgKzUzODUsNyBAQAogewogICAgIHBpZF90IHBpZDsKICAgICBpbnQgc2lkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBQQVJTRV9QSUQgIjpnZXRzaWQiLCAmcGlkKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiOmdldHNpZCIsICZwaWQpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaWQgPSBnZXRzaWQocGlkKTsKICAgICBpZiAoc2lkIDwgMCkKQEAgLTQ4OTUsNyArNTQyMCw3IEBACiB7CiAgICAgcGlkX3QgcGlkOwogICAgIGludCBwZ3JwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBQQVJTRV9QSUQgImk6c2V0cGdpZCIsICZwaWQsICZwZ3JwKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpzZXRwZ2lkIiwgJnBpZCwgJnBncnApKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2V0cGdpZChwaWQsIHBncnApIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC00OTM1LDcgKzU0NjAsNyBAQAogewogICAgIGludCBmZDsKICAgICBwaWRfdCBwZ2lkOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaSIgUEFSU0VfUElEICI6dGNzZXRwZ3JwIiwgJmZkLCAmcGdpZCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpIiBfUHlfUEFSU0VfUElEICI6dGNzZXRwZ3JwIiwgJmZkLCAmcGdpZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICh0Y3NldHBncnAoZmQsIHBnaWQpIDwgMCkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC00OTYwLDM1ICs1NDg1LDMzIEBACiAgICAgaW50IGZkOwogCiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmICh1bmljb2RlX2ZpbGVfbmFtZXMoKSkgewotICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnBvOwotICAgICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVWl8aTpta2RpciIsICZwbywgJmZsYWcsICZtb2RlKSkgewotICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICAgICAgLyogUHlVbmljb2RlX0FTX1VOSUNPREUgT0sgd2l0aG91dCB0aHJlYWQKLSAgICAgICAgICAgICAgIGxvY2sgYXMgaXQgaXMgYSBzaW1wbGUgZGVyZWZlcmVuY2UuICovCi0gICAgICAgICAgICBmZCA9IF93b3BlbihQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGZsYWcsIG1vZGUpOwotICAgICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgICAgIGlmIChmZCA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKLSAgICAgICAgfQotICAgICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCi0gICAgICAgICAgIGFyZSBhbHNvIHZhbGlkLiAqLwotICAgICAgICBQeUVycl9DbGVhcigpOworICAgIFB5VW5pY29kZU9iamVjdCAqcG87CisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVpfGk6bWtkaXIiLCAmcG8sICZmbGFnLCAmbW9kZSkpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICAvKiBQeVVuaWNvZGVfQVNfVU5JQ09ERSBPSyB3aXRob3V0IHRocmVhZAorICAgICAgICAgICBsb2NrIGFzIGl0IGlzIGEgc2ltcGxlIGRlcmVmZXJlbmNlLiAqLworICAgICAgICBmZCA9IF93b3BlbihQeVVuaWNvZGVfQVNfVU5JQ09ERShwbyksIGZsYWcsIG1vZGUpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogICAgIH0KKyAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCisgICAgICAgYXJlIGFsc28gdmFsaWQuICovCisgICAgUHlFcnJfQ2xlYXIoKTsKICNlbmRpZgogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJml8aSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZywgJm1vZGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmaWxlID0gYnl0ZXMyc3RyKG9maWxlLCAxKTsKKyAgICBmaWxlID0gUHlCeXRlc19Bc1N0cmluZyhvZmlsZSk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGZkID0gb3BlbihmaWxlLCBmbGFnLCBtb2RlKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChmZCA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvZmlsZSk7Ci0gICAgcmVsZWFzZV9ieXRlcyhvZmlsZSk7CisgICAgUHlfREVDUkVGKG9maWxlKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIH0KIApAQCAtNTE3Niw3ICs1Njk5LDcgQEAKIHsKICAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICBpbnQgZmQ7Ci0gICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgbGVuOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSo6d3JpdGUiLCAmZmQsICZwYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTg0LDggKzU3MDcsMTUgQEAKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwogICAgIH0KKyAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc2l6ZSA9IHdyaXRlKGZkLCBwYnVmLmJ1ZiwgKHNpemVfdClwYnVmLmxlbik7CisjaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgIHNpemUgPSB3cml0ZShmZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKKyNlbHNlCisgICAgc2l6ZSA9IHdyaXRlKGZkLCBwYnVmLmJ1ZiwgbGVuKTsKKyNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgaWYgKHNpemUgPCAwKQpAQCAtNTQ0OCw3ICs1OTc4LDcgQEAKICAgICBjaGFyICpzMSwgKnMyOwogICAgIGNoYXIgKm5ld2VudjsKICNlbmRpZgotICAgIFB5T2JqZWN0ICpuZXdzdHI7CisgICAgUHlPYmplY3QgKm5ld3N0ciA9IE5VTEw7CiAgICAgc2l6ZV90IGxlbjsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTU0NjIsOCArNTk5Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3MyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgczEgPSBieXRlczJzdHIob3MxLCAxKTsKLSAgICBzMiA9IGJ5dGVzMnN0cihvczIsIDEpOworICAgIHMxID0gUHlCeXRlc19Bc1N0cmluZyhvczEpOworICAgIHMyID0gUHlCeXRlc19Bc1N0cmluZyhvczIpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFBZT1NfT1MyKQpAQCAtNTQ3MSwxNSArNjAwMSwxOSBAQAogICAgICAgICBBUElSRVQgcmM7CiAKICAgICAgICAgcmMgPSBEb3NTZXRFeHRMSUJQQVRIKHMyLCBCRUdJTl9MSUJQQVRIKTsKLSAgICAgICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7CisgICAgICAgIGlmIChyYyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgb3MyX2Vycm9yKHJjKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAogICAgIH0gZWxzZSBpZiAoc3RyaWNtcChzMSwgIkVORExJQlBBVEgiKSA9PSAwKSB7CiAgICAgICAgIEFQSVJFVCByYzsKIAogICAgICAgICByYyA9IERvc1NldEV4dExJQlBBVEgoczIsIEVORF9MSUJQQVRIKTsKLSAgICAgICAgaWYgKHJjICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7CisgICAgICAgIGlmIChyYyAhPSBOT19FUlJPUikgeworICAgICAgICAgICAgb3MyX2Vycm9yKHJjKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogI2VuZGlmCiAgICAgLyogWFhYIFRoaXMgY2FuIGxlYWsgbWVtb3J5IC0tIG5vdCBlYXN5IHRvIGZpeCA6LSggKi8KQEAgLTU0ODksMzYgKzYwMjMsNDAgQEAKICAgICBsZW4gPSB3Y3NsZW4oczEpICsgd2NzbGVuKHMyKSArIDI7CiAgICAgbmV3c3RyID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIChpbnQpbGVuIC0gMSk7CiAjZWxzZQotICAgIGxlbiA9IHN0cmxlbihzMSkgKyBzdHJsZW4oczIpICsgMjsKKyAgICBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKG9zMSkgKyBQeUJ5dGVzX0dFVF9TSVpFKG9zMikgKyAyOwogICAgIG5ld3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGludClsZW4gLSAxKTsKICNlbmRpZgotICAgIGlmIChuZXdzdHIgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgaWYgKG5ld3N0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBuZXdlbnYgPSBQeVVuaWNvZGVfQXNVbmljb2RlKG5ld3N0cik7CiAgICAgX3Nud3ByaW50ZihuZXdlbnYsIGxlbiwgTCIlcz0lcyIsIHMxLCBzMik7CiAgICAgaWYgKF93cHV0ZW52KG5ld2VudikpIHsKLSAgICAgICAgUHlfREVDUkVGKG5ld3N0cik7CiAgICAgICAgIHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICNlbHNlCiAgICAgbmV3ZW52ID0gUHlCeXRlc19BU19TVFJJTkcobmV3c3RyKTsKICAgICBQeU9TX3NucHJpbnRmKG5ld2VudiwgbGVuLCAiJXM9JXMiLCBzMSwgczIpOwogICAgIGlmIChwdXRlbnYobmV3ZW52KSkgewotICAgICAgICBQeV9ERUNSRUYobmV3c3RyKTsKLSAgICAgICAgcmVsZWFzZV9ieXRlcyhvczEpOwotICAgICAgICByZWxlYXNlX2J5dGVzKG9zMik7CiAgICAgICAgIHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICNlbmRpZgorCiAgICAgLyogSW5zdGFsbCB0aGUgZmlyc3QgYXJnIGFuZCBuZXdzdHIgaW4gcG9zaXhfcHV0ZW52X2dhcmJhZ2U7CiAgICAgICogdGhpcyB3aWxsIGNhdXNlIHByZXZpb3VzIHZhbHVlIHRvIGJlIGNvbGxlY3RlZC4gIFRoaXMgaGFzIHRvCiAgICAgICogaGFwcGVuIGFmdGVyIHRoZSByZWFsIHB1dGVudigpIGNhbGwgYmVjYXVzZSB0aGUgb2xkIHZhbHVlCiAgICAgICogd2FzIHN0aWxsIGFjY2Vzc2libGUgdW50aWwgdGhlbi4gKi8KICAgICBpZiAoUHlEaWN0X1NldEl0ZW0ocG9zaXhfcHV0ZW52X2dhcmJhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCksIG5ld3N0cikpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCksCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICBvczEsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgbmV3c3RyKSkgewogICAgICAgICAvKiByZWFsbHkgbm90IG11Y2ggd2UgY2FuIGRvOyBqdXN0IGxlYWsgKi8KICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CkBAIC01NTI5LDEyICs2MDY3LDIwIEBACiAjaWYgZGVmaW5lZChQWU9TX09TMikKICAgICB9CiAjZW5kaWYKKwogI2lmbmRlZiBNU19XSU5ET1dTCi0gICAgcmVsZWFzZV9ieXRlcyhvczEpOwotICAgIHJlbGVhc2VfYnl0ZXMob3MyKTsKKyAgICBQeV9ERUNSRUYob3MxKTsKKyAgICBQeV9ERUNSRUYob3MyKTsKICNlbmRpZgotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKKworZXJyb3I6CisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBQeV9ERUNSRUYob3MxKTsKKyAgICBQeV9ERUNSRUYob3MyKTsKKyNlbmRpZgorICAgIFB5X1hERUNSRUYobmV3c3RyKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBwdXRlbnYgKi8KIApAQCAtNTU0NiwxMCArNjA5MiwyMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3Vuc2V0ZW52KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgY2hhciAqczE7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6dW5zZXRlbnYiLCAmczEpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNlbHNlCisgICAgUHlPYmplY3QgKm9zMTsKKyAgICBjaGFyICpzMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6dW5zZXRlbnYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvczEpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzMSA9IFB5Qnl0ZXNfQXNTdHJpbmcob3MxKTsKKyNlbmRpZgogCiAgICAgdW5zZXRlbnYoczEpOwogCkBAIC01NTU5LDEzICs2MTE1LDIwIEBACiAgICAgICogb2xkIHZhbHVlIHdhcyBzdGlsbCBhY2Nlc3NpYmxlIHVudGlsIHRoZW4uCiAgICAgICovCiAgICAgaWYgKFB5RGljdF9EZWxJdGVtKHBvc2l4X3B1dGVudl9nYXJiYWdlLAotICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDApKSkgeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgb3MxCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgKSkgewogICAgICAgICAvKiByZWFsbHkgbm90IG11Y2ggd2UgY2FuIGRvOyBqdXN0IGxlYWsgKi8KICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBQeV9ERUNSRUYob3MxKTsKKyNlbmRpZgorICAgIFB5X1JFVFVSTl9OT05FOwogfQogI2VuZGlmIC8qIHVuc2V0ZW52ICovCiAKQEAgLTU5NDgsNiArNjUxMSwzOSBAQAogI2lmZGVmIF9QQ19WRElTQUJMRQogICAgIHsiUENfVkRJU0FCTEUiLCAgICAgX1BDX1ZESVNBQkxFfSwKICNlbmRpZgorI2lmZGVmIF9QQ19BQ0xfRU5BQkxFRAorICAgIHsiUENfQUNMX0VOQUJMRUQiLCAgX1BDX0FDTF9FTkFCTEVEfSwKKyNlbmRpZgorI2lmZGVmIF9QQ19NSU5fSE9MRV9TSVpFCisgICAgeyJQQ19NSU5fSE9MRV9TSVpFIiwgICAgX1BDX01JTl9IT0xFX1NJWkV9LAorI2VuZGlmCisjaWZkZWYgX1BDX0FMTE9DX1NJWkVfTUlOCisgICAgeyJQQ19BTExPQ19TSVpFX01JTiIsICAgX1BDX0FMTE9DX1NJWkVfTUlOfSwKKyNlbmRpZgorI2lmZGVmIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUKKyAgICB7IlBDX1JFQ19JTkNSX1hGRVJfU0laRSIsICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRX0sCisjZW5kaWYKKyNpZmRlZiBfUENfUkVDX01BWF9YRkVSX1NJWkUKKyAgICB7IlBDX1JFQ19NQVhfWEZFUl9TSVpFIiwgICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFfSwKKyNlbmRpZgorI2lmZGVmIF9QQ19SRUNfTUlOX1hGRVJfU0laRQorICAgIHsiUENfUkVDX01JTl9YRkVSX1NJWkUiLCAgICBfUENfUkVDX01JTl9YRkVSX1NJWkV9LAorI2VuZGlmCisjaWZkZWYgX1BDX1JFQ19YRkVSX0FMSUdOCisgICAgeyJQQ19SRUNfWEZFUl9BTElHTiIsICAgX1BDX1JFQ19YRkVSX0FMSUdOfSwKKyNlbmRpZgorI2lmZGVmIF9QQ19TWU1MSU5LX01BWAorICAgIHsiUENfU1lNTElOS19NQVgiLCAgX1BDX1NZTUxJTktfTUFYfSwKKyNlbmRpZgorI2lmZGVmIF9QQ19YQVRUUl9FTkFCTEVECisgICAgeyJQQ19YQVRUUl9FTkFCTEVEIiwgICAgX1BDX1hBVFRSX0VOQUJMRUR9LAorI2VuZGlmCisjaWZkZWYgX1BDX1hBVFRSX0VYSVNUUworICAgIHsiUENfWEFUVFJfRVhJU1RTIiwgX1BDX1hBVFRSX0VYSVNUU30sCisjZW5kaWYKKyNpZmRlZiBfUENfVElNRVNUQU1QX1JFU09MVVRJT04KKyAgICB7IlBDX1RJTUVTVEFNUF9SRVNPTFVUSU9OIiwgX1BDX1RJTUVTVEFNUF9SRVNPTFVUSU9OfSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludApAQCAtNjE5MSwzMiArNjc4NywzNCBAQAogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGludCBuYW1lOwotICAgIGNoYXIgYnVmZmVyWzI1Nl07Ci0KLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6Y29uZnN0ciIsIGNvbnZfY29uZnN0cl9jb25mbmFtZSwgJm5hbWUpKSB7CisgICAgY2hhciBidWZmZXJbMjU1XTsKICAgICBpbnQgbGVuOwogCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbGVuID0gY29uZnN0cihuYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZXJybm8pIHsKLSAgICAgICAgICAgICAgICBwb3NpeF9lcnJvcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgICAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpjb25mc3RyIiwgY29udl9jb25mc3RyX2NvbmZuYW1lLCAmbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZXJybm8gPSAwOworICAgIGxlbiA9IGNvbmZzdHIobmFtZSwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgICAgaWYgKGxlbiA9PSAwKSB7CisgICAgICAgIGlmIChlcnJubykgeworICAgICAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBpbnQpbGVuID49IHNpemVvZihidWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbi0xKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGNvbmZzdHIobmFtZSwgX1B5VW5pY29kZV9Bc1N0cmluZyhyZXN1bHQpLCBsZW4pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZShidWZmZXIsIGxlbi0xKTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKCh1bnNpZ25lZCBpbnQpbGVuID49IHNpemVvZihidWZmZXIpKSB7CisgICAgICAgIGNoYXIgKmJ1ZiA9IFB5TWVtX01hbGxvYyhsZW4pOworICAgICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgY29uZnN0cihuYW1lLCBidWYsIGxlbik7CisgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKGJ1ZiwgbGVuLTEpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUoYnVmZmVyLCBsZW4tMSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtNjg2Nyw1NyArNzQ2NSw1NCBAQAogICAgIGNoYXIgKm9wZXJhdGlvbiA9IE5VTEw7CiAgICAgSElOU1RBTkNFIHJjOwogCi0gICAgaWYgKHVuaWNvZGVfZmlsZV9uYW1lcygpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp1bmlwYXRoLCAqd29wZXJhdGlvbiA9IE5VTEw7Ci0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxzOnN0YXJ0ZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdW5pcGF0aCwgJm9wZXJhdGlvbikpIHsKKyAgICBQeU9iamVjdCAqdW5pcGF0aCwgKndvcGVyYXRpb24gPSBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxzOnN0YXJ0ZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ1bmlwYXRoLCAmb3BlcmF0aW9uKSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBnb3RvIG5vcm1hbDsKKyAgICB9CisKKyAgICBpZiAob3BlcmF0aW9uKSB7CisgICAgICAgIHdvcGVyYXRpb24gPSBQeVVuaWNvZGVfRGVjb2RlQVNDSUkob3BlcmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihvcGVyYXRpb24pLCBOVUxMKTsKKyAgICAgICAgaWYgKCF3b3BlcmF0aW9uKSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgb3BlcmF0aW9uID0gTlVMTDsKICAgICAgICAgICAgIGdvdG8gbm9ybWFsOwogICAgICAgICB9Ci0KLQotICAgICAgICBpZiAob3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICB3b3BlcmF0aW9uID0gUHlVbmljb2RlX0RlY29kZUFTQ0lJKG9wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKG9wZXJhdGlvbiksIE5VTEwpOwotICAgICAgICAgICAgaWYgKCF3b3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBOVUxMOwotICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICByYyA9IFNoZWxsRXhlY3V0ZVcoKEhXTkQpMCwgd29wZXJhdGlvbiA/IFB5VW5pY29kZV9BU19VTklDT0RFKHdvcGVyYXRpb24pIDogMCwKLSAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaXBhdGgpLAotICAgICAgICAgICAgTlVMTCwgTlVMTCwgU1dfU0hPV05PUk1BTCk7Ci0gICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0KLSAgICAgICAgUHlfWERFQ1JFRih3b3BlcmF0aW9uKTsKLSAgICAgICAgaWYgKHJjIDw9IChISU5TVEFOQ0UpMzIpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICplcnJ2YWwgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGFydGZpbGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pcGF0aCkpOwotICAgICAgICAgICAgcmV0dXJuIGVycnZhbDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwogICAgIH0KIAorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IFNoZWxsRXhlY3V0ZVcoKEhXTkQpMCwgd29wZXJhdGlvbiA/IFB5VW5pY29kZV9BU19VTklDT0RFKHdvcGVyYXRpb24pIDogMCwKKyAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pcGF0aCksCisgICAgICAgIE5VTEwsIE5VTEwsIFNXX1NIT1dOT1JNQUwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBQeV9YREVDUkVGKHdvcGVyYXRpb24pOworICAgIGlmIChyYyA8PSAoSElOU1RBTkNFKTMyKSB7CisgICAgICAgIFB5T2JqZWN0ICplcnJ2YWwgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJzdGFydGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmlwYXRoKSk7CisgICAgICAgIHJldHVybiBlcnJ2YWw7CisgICAgfQorICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKKwogbm9ybWFsOgogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZ8czpzdGFydGZpbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvZmlsZXBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvcGVyYXRpb24pKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmaWxlcGF0aCA9IGJ5dGVzMnN0cihvZmlsZXBhdGgsIDEpOworICAgIGZpbGVwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvZmlsZXBhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByYyA9IFNoZWxsRXhlY3V0ZSgoSFdORCkwLCBvcGVyYXRpb24sIGZpbGVwYXRoLAogICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIFNXX1NIT1dOT1JNQUwpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjIDw9IChISU5TVEFOQ0UpMzIpIHsKICAgICAgICAgUHlPYmplY3QgKmVycnZhbCA9IHdpbjMyX2Vycm9yKCJzdGFydGZpbGUiLCBmaWxlcGF0aCk7Ci0gICAgICAgIHJlbGVhc2VfYnl0ZXMob2ZpbGVwYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9maWxlcGF0aCk7CiAgICAgICAgIHJldHVybiBlcnJ2YWw7CiAgICAgfQotICAgIHJlbGVhc2VfYnl0ZXMob2ZpbGVwYXRoKTsKKyAgICBQeV9ERUNSRUYob2ZpbGVwYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CkBAIC03MDkxLDYgKzc2ODYsODIgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgSEFWRV9TRVRSRVNVSUQKK1B5RG9jX1NUUlZBUihwb3NpeF9zZXRyZXN1aWRfX2RvY19fLAorInNldHJlc3VpZChydWlkLCBldWlkLCBzdWlkKVxuXG5cCitTZXQgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIHVzZXIgaWRzLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRyZXN1aWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICAvKiBXZSBhc3N1bWUgdWlkX3QgaXMgbm8gbGFyZ2VyIHRoYW4gYSBsb25nLiAqLworICAgIGxvbmcgcnVpZCwgZXVpZCwgc3VpZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImxsbCIsICZydWlkLCAmZXVpZCwgJnN1aWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2V0cmVzdWlkKHJ1aWQsIGV1aWQsIHN1aWQpIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU0VUUkVTR0lECitQeURvY19TVFJWQVIocG9zaXhfc2V0cmVzZ2lkX19kb2NfXywKKyJzZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZClcblxuXAorU2V0IHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X3NldHJlc2dpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIC8qIFdlIGFzc3VtZSB1aWRfdCBpcyBubyBsYXJnZXIgdGhhbiBhIGxvbmcuICovCisgICAgbG9uZyByZ2lkLCBlZ2lkLCBzZ2lkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGxsIiwgJnJnaWQsICZlZ2lkLCAmc2dpZCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZXRyZXNnaWQocmdpZCwgZWdpZCwgc2dpZCkgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9HRVRSRVNVSUQKK1B5RG9jX1NUUlZBUihwb3NpeF9nZXRyZXN1aWRfX2RvY19fLAorImdldHJlc3VpZCgpIC0+IChydWlkLCBldWlkLCBzdWlkKVxuXG5cCitHZXQgdHVwbGUgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwsIGVmZmVjdGl2ZSwgYW5kIHNhdmVkIHVzZXIgaWRzLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRyZXN1aWQgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIHVpZF90IHJ1aWQsIGV1aWQsIHN1aWQ7CisgICAgbG9uZyBsX3J1aWQsIGxfZXVpZCwgbF9zdWlkOworICAgIGlmIChnZXRyZXN1aWQoJnJ1aWQsICZldWlkLCAmc3VpZCkgPCAwKQorICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAvKiBGb3JjZSB0aGUgdmFsdWVzIGludG8gbG9uZydzIGFzIHdlIGRvbid0IGtub3cgdGhlIHNpemUgb2YgdWlkX3QuICovCisgICAgbF9ydWlkID0gcnVpZDsKKyAgICBsX2V1aWQgPSBldWlkOworICAgIGxfc3VpZCA9IHN1aWQ7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihsbGwpIiwgbF9ydWlkLCBsX2V1aWQsIGxfc3VpZCk7Cit9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfR0VUUkVTR0lECitQeURvY19TVFJWQVIocG9zaXhfZ2V0cmVzZ2lkX19kb2NfXywKKyJnZXRyZXNnaWQoKSAtPiAocmdpZCwgZWdpZCwgc2dpZClcblxuXAorR2V0IHR1cGxlIG9mIHRoZSBjdXJyZW50IHByb2Nlc3MncyByZWFsLCBlZmZlY3RpdmUsIGFuZCBzYXZlZCBncm91cCBpZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3Bvc2l4X2dldHJlc2dpZCAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgdWlkX3QgcmdpZCwgZWdpZCwgc2dpZDsKKyAgICBsb25nIGxfcmdpZCwgbF9lZ2lkLCBsX3NnaWQ7CisgICAgaWYgKGdldHJlc2dpZCgmcmdpZCwgJmVnaWQsICZzZ2lkKSA8IDApCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgIC8qIEZvcmNlIHRoZSB2YWx1ZXMgaW50byBsb25nJ3MgYXMgd2UgZG9uJ3Qga25vdyB0aGUgc2l6ZSBvZiB1aWRfdC4gKi8KKyAgICBsX3JnaWQgPSByZ2lkOworICAgIGxfZWdpZCA9IGVnaWQ7CisgICAgbF9zZ2lkID0gc2dpZDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGxsbCkiLCBsX3JnaWQsIGxfZWdpZCwgbF9zZ2lkKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlNZXRob2REZWYgcG9zaXhfbWV0aG9kc1tdID0gewogICAgIHsiYWNjZXNzIiwgICAgICAgICAgcG9zaXhfYWNjZXNzLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2FjY2Vzc19fZG9jX199LAogI2lmZGVmIEhBVkVfVFRZTkFNRQpAQCAtNzE0MywxMyArNzgxNCwyMCBAQAogI2lmZGVmIEhBVkVfUkVBRExJTksKICAgICB7InJlYWRsaW5rIiwgICAgICAgIHBvc2l4X3JlYWRsaW5rLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3JlYWRsaW5rX19kb2NfX30sCiAjZW5kaWYgLyogSEFWRV9SRUFETElOSyAqLworI2lmICFkZWZpbmVkKEhBVkVfUkVBRExJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKKyAgICB7InJlYWRsaW5rIiwgICAgICAgIHdpbl9yZWFkbGluaywgTUVUSF9WQVJBUkdTLCB3aW5fcmVhZGxpbmtfX2RvY19ffSwKKyNlbmRpZiAvKiAhZGVmaW5lZChIQVZFX1JFQURMSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCiAgICAgeyJyZW5hbWUiLCAgICAgICAgICBwb3NpeF9yZW5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfcmVuYW1lX19kb2NfX30sCiAgICAgeyJybWRpciIsICAgICAgICAgICBwb3NpeF9ybWRpciwgTUVUSF9WQVJBUkdTLCBwb3NpeF9ybWRpcl9fZG9jX199LAogICAgIHsic3RhdCIsICAgICAgICAgICAgcG9zaXhfc3RhdCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zdGF0X19kb2NfX30sCiAgICAgeyJzdGF0X2Zsb2F0X3RpbWVzIiwgc3RhdF9mbG9hdF90aW1lcywgTUVUSF9WQVJBUkdTLCBzdGF0X2Zsb2F0X3RpbWVzX19kb2NfX30sCi0jaWZkZWYgSEFWRV9TWU1MSU5LCisjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspICYmICFkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJzeW1saW5rIiwgICAgICAgICBwb3NpeF9zeW1saW5rLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3N5bWxpbmtfX2RvY19ffSwKICNlbmRpZiAvKiBIQVZFX1NZTUxJTksgKi8KKyNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgIHsic3ltbGluayIsIChQeUNGdW5jdGlvbil3aW5fc3ltbGluaywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKKyAgICAgICAgICAgICAgICAgd2luX3N5bWxpbmtfX2RvY19ffSwKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKSAqLwogI2lmZGVmIEhBVkVfU1lTVEVNCiAgICAgeyJzeXN0ZW0iLCAgICAgICAgICBwb3NpeF9zeXN0ZW0sIE1FVEhfVkFSQVJHUywgcG9zaXhfc3lzdGVtX19kb2NfX30sCiAjZW5kaWYKQEAgLTcyMjQsNiArNzkwMiw4IEBACiAjZW5kaWYgLyogSEFWRV9QTE9DSyAqLwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB7InN0YXJ0ZmlsZSIsICAgICAgIHdpbjMyX3N0YXJ0ZmlsZSwgTUVUSF9WQVJBUkdTLCB3aW4zMl9zdGFydGZpbGVfX2RvY19ffSwKKyAgICB7ImtpbGwiLCAgICB3aW4zMl9raWxsLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX2tpbGxfX2RvY19ffSwKKyAgICB7ImxpbmsiLCAgICB3aW4zMl9saW5rLCBNRVRIX1ZBUkFSR1MsIHdpbjMyX2xpbmtfX2RvY19ffSwKICNlbmRpZgogI2lmZGVmIEhBVkVfU0VUVUlECiAgICAgeyJzZXR1aWQiLCAgICAgICAgICBwb3NpeF9zZXR1aWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0dWlkX19kb2NfX30sCkBAIC03MjQ2LDYgKzc5MjYsOSBAQAogI2lmZGVmIEhBVkVfU0VUR1JPVVBTCiAgICAgeyJzZXRncm91cHMiLCAgICAgICBwb3NpeF9zZXRncm91cHMsIE1FVEhfTywgcG9zaXhfc2V0Z3JvdXBzX19kb2NfX30sCiAjZW5kaWYgLyogSEFWRV9TRVRHUk9VUFMgKi8KKyNpZmRlZiBIQVZFX0lOSVRHUk9VUFMKKyAgICB7ImluaXRncm91cHMiLCAgICAgIHBvc2l4X2luaXRncm91cHMsIE1FVEhfVkFSQVJHUywgcG9zaXhfaW5pdGdyb3Vwc19fZG9jX199LAorI2VuZGlmIC8qIEhBVkVfSU5JVEdST1VQUyAqLwogI2lmZGVmIEhBVkVfR0VUUEdJRAogICAgIHsiZ2V0cGdpZCIsICAgICAgICAgcG9zaXhfZ2V0cGdpZCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9nZXRwZ2lkX19kb2NfX30sCiAjZW5kaWYgLyogSEFWRV9HRVRQR0lEICovCkBAIC03MzcwLDYgKzgwNTMsOCBAQAogICAgIHsiYWJvcnQiLCAgICAgICAgICAgcG9zaXhfYWJvcnQsIE1FVEhfTk9BUkdTLCBwb3NpeF9hYm9ydF9fZG9jX199LAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICB7Il9nZXRmdWxscGF0aG5hbWUiLCAgICAgICAgcG9zaXhfX2dldGZ1bGxwYXRobmFtZSwgTUVUSF9WQVJBUkdTLCBOVUxMfSwKKyAgICB7Il9nZXRmaW5hbHBhdGhuYW1lIiwgICAgICAgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCisgICAgeyJfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgICAgIHBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKICAgICB7ImdldGxvYWRhdmciLCAgICAgIHBvc2l4X2dldGxvYWRhdmcsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRsb2FkYXZnX19kb2NfX30sCkBAIC03MzgwLDYgKzgwNjUsMTkgQEAKICAjaWZkZWYgX19WTVMKICAgICB7InVyYW5kb20iLCB2bXNfdXJhbmRvbSwgTUVUSF9WQVJBUkdTLCB2bXNfdXJhbmRvbV9fZG9jX199LAogICNlbmRpZgorI2lmZGVmIEhBVkVfU0VUUkVTVUlECisgICAgeyJzZXRyZXN1aWQiLCAgICAgICBwb3NpeF9zZXRyZXN1aWQsIE1FVEhfVkFSQVJHUywgcG9zaXhfc2V0cmVzdWlkX19kb2NfX30sCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NFVFJFU0dJRAorICAgIHsic2V0cmVzZ2lkIiwgICAgICAgcG9zaXhfc2V0cmVzZ2lkLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NldHJlc2dpZF9fZG9jX199LAorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRSRVNVSUQKKyAgICB7ImdldHJlc3VpZCIsICAgICAgIHBvc2l4X2dldHJlc3VpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2dldHJlc3VpZF9fZG9jX199LAorI2VuZGlmCisjaWZkZWYgSEFWRV9HRVRSRVNHSUQKKyAgICB7ImdldHJlc2dpZCIsICAgICAgIHBvc2l4X2dldHJlc2dpZCwgTUVUSF9OT0FSR1MsIHBvc2l4X2dldHJlc2dpZF9fZG9jX199LAorI2VuZGlmCisKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTc0NDMsNiArODE0MSwzNSBAQAogfQogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQorc3RhdGljIGludAorZW5hYmxlX3N5bWxpbmsoKQoreworICAgIEhBTkRMRSB0b2s7CisgICAgVE9LRU5fUFJJVklMRUdFUyB0b2tfcHJpdjsKKyAgICBMVUlEIGx1aWQ7CisgICAgaW50IG1ldGhfaWR4ID0gMDsKKworICAgIGlmICghT3BlblByb2Nlc3NUb2tlbihHZXRDdXJyZW50UHJvY2VzcygpLCBUT0tFTl9BTExfQUNDRVNTLCAmdG9rKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIUxvb2t1cFByaXZpbGVnZVZhbHVlKE5VTEwsIFNFX0NSRUFURV9TWU1CT0xJQ19MSU5LX05BTUUsICZsdWlkKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0b2tfcHJpdi5Qcml2aWxlZ2VDb3VudCA9IDE7CisgICAgdG9rX3ByaXYuUHJpdmlsZWdlc1swXS5MdWlkID0gbHVpZDsKKyAgICB0b2tfcHJpdi5Qcml2aWxlZ2VzWzBdLkF0dHJpYnV0ZXMgPSBTRV9QUklWSUxFR0VfRU5BQkxFRDsKKworICAgIGlmICghQWRqdXN0VG9rZW5Qcml2aWxlZ2VzKHRvaywgRkFMU0UsICZ0b2tfcHJpdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVE9LRU5fUFJJVklMRUdFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBUT0tFTl9QUklWSUxFR0VTKSBOVUxMLCAoUERXT1JEKSBOVUxMKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBFUlJPUl9OT1RfQUxMX0FTU0lHTkVEIHJldHVybmVkIHdoZW4gdGhlIHByaXZpbGVnZSBjYW4ndCBiZSBhc3NpZ25lZC4gKi8KKyAgICByZXR1cm4gR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfTk9UX0FMTF9BU1NJR05FRCA/IDAgOiAxOworfQorI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9TWU1MSU5LKSAmJiBkZWZpbmVkKE1TX1dJTkRPV1MpICovCisKIHN0YXRpYyBpbnQKIGFsbF9pbnMoUHlPYmplY3QgKmQpCiB7CkBAIC03NjI3LDYgKzgzNTQsMTQgQEAKICAgICBpZiAoaW5zKGQsICJFWF9OT1RGT1VORCIsIChsb25nKUVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX05PVEZPVU5EICovCiAKKyAgICAvKiBzdGF0dmZzICovCisjaWZkZWYgU1RfUkRPTkxZCisgICAgaWYgKGlucyhkLCAiU1RfUkRPTkxZIiwgKGxvbmcpU1RfUkRPTkxZKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX1JET05MWSAqLworI2lmZGVmIFNUX05PU1VJRAorICAgIGlmIChpbnMoZCwgIlNUX05PU1VJRCIsIChsb25nKVNUX05PU1VJRCkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT1NVSUQgKi8KKwogI2lmZGVmIEhBVkVfU1BBV05WCiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKICAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylQX1dBSVQpKSByZXR1cm4gLTE7CkBAIC03Njk2LDYgKzg0MzEsMTAgQEAKIHsKICAgICBQeU9iamVjdCAqbSwgKnY7CiAKKyNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykgJiYgZGVmaW5lZChNU19XSU5ET1dTKQorICAgIHdpbjMyX2Nhbl9zeW1saW5rID0gZW5hYmxlX3N5bWxpbmsoKTsKKyNlbmRpZgorCiAgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmcG9zaXhtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggOTYyNzViZC4uMWUwOTAzYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC0yLDcgKzIsNiBAQAogLyogVU5JWCBwYXNzd29yZCBmaWxlIGFjY2VzcyBtb2R1bGUgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInN0cnVjdHNlcS5oIgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8cHdkLmg+CkBAIC00OSw5ICs0OCw3IEBACiBzZXRzKFB5T2JqZWN0ICp2LCBpbnQgaSwgY29uc3QgY2hhciogdmFsKQogewogICBpZiAodmFsKSB7Ci0gICAgICBQeU9iamVjdCAqbyA9IFB5VW5pY29kZV9EZWNvZGUodmFsLCBzdHJsZW4odmFsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICAgIFB5T2JqZWN0ICpvID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdCh2YWwpOwogICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCBpLCBvKTsKICAgfQogICBlbHNlIHsKQEAgLTEzNCw5ICsxMzEsNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmdldHB3bmFtIiwgJmFyZykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICgoYnl0ZXMgPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKGFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVlc2NhcGUiKSkgPT0gTlVMTCkKKyAgICBpZiAoKGJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChhcmcpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoYnl0ZXMsICZuYW1lLCBOVUxMKSA9PSAtMSkKICAgICAgICAgZ290byBvdXQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3B5ZXhwYXQuYyBiL01vZHVsZXMvcHlleHBhdC5jCmluZGV4IGNjNjIyNzQuLjQwZDkzMjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHlleHBhdC5jCisrKyBiL01vZHVsZXMvcHlleHBhdC5jCkBAIC0yMDksNTMgKzIwOSwxMSBAQAogc3RhdGljIFB5Q29kZU9iamVjdCoKIGdldGNvZGUoZW51bSBIYW5kbGVyVHlwZXMgc2xvdCwgY2hhciogZnVuY19uYW1lLCBpbnQgbGluZW5vKQogewotICAgIFB5T2JqZWN0ICpjb2RlID0gTlVMTDsKLSAgICBQeU9iamVjdCAqbmFtZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm51bGx0dXBsZSA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKLQogICAgIGlmIChoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgIGNvZGUgPSBQeUJ5dGVzX0Zyb21TdHJpbmcoIiIpOwotICAgICAgICBpZiAoY29kZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhmdW5jX25hbWUpOwotICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIG51bGx0dXBsZSA9IFB5VHVwbGVfTmV3KDApOwotICAgICAgICBpZiAobnVsbHR1cGxlID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KF9fRklMRV9fKTsKICAgICAgICAgaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGUgPQotICAgICAgICAgICAgUHlDb2RlX05ldygwLCAgICAgICAgICAgICAgIC8qIGFyZ2NvdW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgIC8qIGt3b25seWFyZ2NvdW50ICovCi0gICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgLyogbmxvY2FscyAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIHN0YWNrc2l6ZSAqLwotICAgICAgICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgICAgICAgIGNvZGUsICAgICAgICAgICAgLyogY29kZSAqLwotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIGNvbnN0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIG5hbWVzICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogdmFybmFtZXMgKi8KLSNpZiBQWVRIT05fQVBJX1ZFUlNJT04gPj0gMTAxMAotICAgICAgICAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgIC8qIGZyZWV2YXJzICovCi0gICAgICAgICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgLyogY2VsbHZhcnMgKi8KLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgICAgICAgIC8qIGZpbGVuYW1lICovCi0gICAgICAgICAgICAgICAgICAgICAgIG5hbWUsICAgICAgICAgICAgLyogbmFtZSAqLwotICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm8sICAgICAgICAgIC8qIGZpcnN0bGluZW5vICovCi0gICAgICAgICAgICAgICAgICAgICAgIGNvZGUgICAgICAgICAgICAgLyogbG5vdGFiICovCi0gICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIGlmIChoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKLSAgICAgICAgUHlfREVDUkVGKG51bGx0dXBsZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgIFB5Q29kZV9OZXdFbXB0eShfX0ZJTEVfXywgZnVuY19uYW1lLCBsaW5lbm8pOwogICAgIH0KICAgICByZXR1cm4gaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGU7Ci0gZmFpbGVkOgotICAgIFB5X1hERUNSRUYoY29kZSk7Ci0gICAgUHlfWERFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogI2lmZGVmIEZJWF9UUkFDRQpAQCAtMzAwLDExICsyNTgsNyBAQAogICAgICAgICB2YWx1ZSA9IFB5X05vbmU7CiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgfQotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA0MDAwMAotICAgIGFyZyA9IFB5X0J1aWxkVmFsdWUoIihPT08pIiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7Ci0jZWxzZQogICAgIGFyZyA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKLSNlbmRpZgogICAgIGlmIChhcmcgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwogICAgICAgICByZXR1cm4gMDsKQEAgLTg0MywyOSArNzk3LDEzIEBACiBzdGF0aWMgaW50CiByZWFkaW5zdChjaGFyICpidWYsIGludCBidWZfc2l6ZSwgUHlPYmplY3QgKm1ldGgpCiB7Ci0gICAgUHlPYmplY3QgKmFyZyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmJ5dGVzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc3RyID0gTlVMTDsKLSAgICBpbnQgbGVuID0gLTE7CisgICAgUHlPYmplY3QgKnN0cjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBjaGFyICpwdHI7CiAKLSAgICBpZiAoKGJ5dGVzID0gUHlMb25nX0Zyb21Mb25nKGJ1Zl9zaXplKSkgPT0gTlVMTCkKLSAgICAgICAgZ290byBmaW5hbGx5OwotCi0gICAgaWYgKChhcmcgPSBQeVR1cGxlX05ldygxKSkgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgfQotCi0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmcsIDAsIGJ5dGVzKTsKLQotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjAyMDAwMAotICAgIHN0ciA9IFB5T2JqZWN0X0NhbGxPYmplY3QobWV0aCwgYXJnKTsKLSNlbHNlCi0gICAgc3RyID0gUHlPYmplY3RfQ2FsbChtZXRoLCBhcmcsIE5VTEwpOwotI2VuZGlmCisgICAgc3RyID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKG1ldGgsICJuIiwgYnVmX3NpemUpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKLSAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soc3RyKSkKICAgICAgICAgcHRyID0gUHlCeXRlc19BU19TVFJJTkcoc3RyKTsKQEAgLTg3NSwyMSArODEzLDI0IEBACiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicmVhZCgpIGRpZCBub3QgcmV0dXJuIGEgYnl0ZXMgb2JqZWN0ICh0eXBlPSUuNDAwcykiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzdHIpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBsZW4gPSBQeV9TSVpFKHN0cik7CiAgICAgaWYgKGxlbiA+IGJ1Zl9zaXplKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSByZXR1cm5lZCB0b28gbXVjaCBkYXRhOiAiCi0gICAgICAgICAgICAgICAgICAgICAiJWkgYnl0ZXMgcmVxdWVzdGVkLCAlaSByZXR1cm5lZCIsCisgICAgICAgICAgICAgICAgICAgICAiJWkgYnl0ZXMgcmVxdWVzdGVkLCAlemQgcmV0dXJuZWQiLAogICAgICAgICAgICAgICAgICAgICAgYnVmX3NpemUsIGxlbik7Ci0gICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgbWVtY3B5KGJ1ZiwgcHRyLCBsZW4pOwotZmluYWxseToKLSAgICBQeV9YREVDUkVGKGFyZyk7CisgICAgUHlfREVDUkVGKHN0cik7CisgICAgLyogbGVuIDw9IGJ1Zl9zaXplIDw9IElOVF9NQVggKi8KKyAgICByZXR1cm4gKGludClsZW47CisKK2Vycm9yOgogICAgIFB5X1hERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gbGVuOworICAgIHJldHVybiAtMTsKIH0KIAogUHlEb2NfU1RSVkFSKHhtbHBhcnNlX1BhcnNlRmlsZV9fZG9jX18sCkBAIC05MDAsMTggKzg0MSwxNCBAQAogeG1scGFyc2VfUGFyc2VGaWxlKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZikKIHsKICAgICBpbnQgcnYgPSAxOwotICAgIEZJTEUgKmZwOwogICAgIFB5T2JqZWN0ICpyZWFkbWV0aG9kID0gTlVMTDsKIAotICAgIHsKLSAgICAgICAgZnAgPSBOVUxMOwotICAgICAgICByZWFkbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmLCAicmVhZCIpOwotICAgICAgICBpZiAocmVhZG1ldGhvZCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgbXVzdCBoYXZlICdyZWFkJyBhdHRyaWJ1dGUiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisKKyAgICByZWFkbWV0aG9kID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmLCAicmVhZCIpOworICAgIGlmIChyZWFkbWV0aG9kID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBtdXN0IGhhdmUgJ3JlYWQnIGF0dHJpYnV0ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgYnl0ZXNfcmVhZDsKQEAgLTkyMSwxOSArODU4LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChmcCkgewotICAgICAgICAgICAgYnl0ZXNfcmVhZCA9IGZyZWFkKGJ1Ziwgc2l6ZW9mKGNoYXIpLCBCVUZfU0laRSwgZnApOwotICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYnl0ZXNfcmVhZCA9IHJlYWRpbnN0KGJ1ZiwgQlVGX1NJWkUsIHJlYWRtZXRob2QpOwotICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlYWRtZXRob2QpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQorICAgICAgICBieXRlc19yZWFkID0gcmVhZGluc3QoYnVmLCBCVUZfU0laRSwgcmVhZG1ldGhvZCk7CisgICAgICAgIGlmIChieXRlc19yZWFkIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHJlYWRtZXRob2QpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcnYgPSBYTUxfUGFyc2VCdWZmZXIoc2VsZi0+aXRzZWxmLCBieXRlc19yZWFkLCBieXRlc19yZWFkID09IDApOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewpAQCAtMTAxOCwzMyArOTQ2LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotI2lmbmRlZiBQeV9UUEZMQUdTX0hBVkVfR0MKLSAgICAvKiBQeXRob24gdmVyc2lvbnMgMi4wIGFuZCAyLjEgKi8KLSAgICBuZXdfcGFyc2VyID0gUHlPYmplY3RfTmV3KHhtbHBhcnNlb2JqZWN0LCAmWG1scGFyc2V0eXBlKTsKLSNlbHNlCi0gICAgLyogUHl0aG9uIHZlcnNpb25zIDIuMiBhbmQgbGF0ZXIgKi8KICAgICBuZXdfcGFyc2VyID0gUHlPYmplY3RfR0NfTmV3KHhtbHBhcnNlb2JqZWN0LCAmWG1scGFyc2V0eXBlKTsKLSNlbmRpZgotCiAgICAgaWYgKG5ld19wYXJzZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmV3X3BhcnNlci0+YnVmZmVyX3NpemUgPSBzZWxmLT5idWZmZXJfc2l6ZTsKICAgICBuZXdfcGFyc2VyLT5idWZmZXJfdXNlZCA9IDA7Ci0gICAgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKSB7Ci0gICAgICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IG1hbGxvYyhuZXdfcGFyc2VyLT5idWZmZXJfc2l6ZSk7Ci0gICAgICAgIGlmIChuZXdfcGFyc2VyLT5idWZmZXIgPT0gTlVMTCkgewotI2lmbmRlZiBQeV9UUEZMQUdTX0hBVkVfR0MKLSAgICAgICAgICAgIC8qIENvZGUgZm9yIHZlcnNpb25zIDIuMCBhbmQgMi4xICovCi0gICAgICAgICAgICBQeU9iamVjdF9EZWwobmV3X3BhcnNlcik7Ci0jZWxzZQotICAgICAgICAgICAgLyogQ29kZSBmb3IgdmVyc2lvbnMgMi4yIGFuZCBsYXRlci4gKi8KLSAgICAgICAgICAgIFB5T2JqZWN0X0dDX0RlbChuZXdfcGFyc2VyKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBOVUxMOworICAgIG5ld19wYXJzZXItPmJ1ZmZlciA9IE5VTEw7CiAgICAgbmV3X3BhcnNlci0+b3JkZXJlZF9hdHRyaWJ1dGVzID0gc2VsZi0+b3JkZXJlZF9hdHRyaWJ1dGVzOwogICAgIG5ld19wYXJzZXItPnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gc2VsZi0+c3BlY2lmaWVkX2F0dHJpYnV0ZXM7CiAgICAgbmV3X3BhcnNlci0+aW5fY2FsbGJhY2sgPSAwOwpAQCAtMTA1NCwxMiArOTYxLDE1IEBACiAgICAgbmV3X3BhcnNlci0+aGFuZGxlcnMgPSAwOwogICAgIG5ld19wYXJzZXItPmludGVybiA9IHNlbGYtPmludGVybjsKICAgICBQeV9YSU5DUkVGKG5ld19wYXJzZXItPmludGVybik7Ci0jaWZkZWYgUHlfVFBGTEFHU19IQVZFX0dDCiAgICAgUHlPYmplY3RfR0NfVHJhY2sobmV3X3BhcnNlcik7Ci0jZWxzZQotICAgIFB5T2JqZWN0X0dDX0luaXQobmV3X3BhcnNlcik7Ci0jZW5kaWYKIAorICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgeworICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBtYWxsb2MobmV3X3BhcnNlci0+YnVmZmVyX3NpemUpOworICAgICAgICBpZiAobmV3X3BhcnNlci0+YnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfcGFyc2VyKTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICB9CisgICAgfQogICAgIGlmICghbmV3X3BhcnNlci0+aXRzZWxmKSB7CiAgICAgICAgIFB5X0RFQ1JFRihuZXdfcGFyc2VyKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMjIyLDEyICsxMTMyLDcgQEAKICAgICBpbnQgaTsKICAgICB4bWxwYXJzZW9iamVjdCAqc2VsZjsKIAotI2lmZGVmIFB5X1RQRkxBR1NfSEFWRV9HQwotICAgIC8qIENvZGUgZm9yIHZlcnNpb25zIDIuMiBhbmQgbGF0ZXIgKi8KICAgICBzZWxmID0gUHlPYmplY3RfR0NfTmV3KHhtbHBhcnNlb2JqZWN0LCAmWG1scGFyc2V0eXBlKTsKLSNlbHNlCi0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyh4bWxwYXJzZW9iamVjdCwgJlhtbHBhcnNldHlwZSk7Ci0jZW5kaWYKICAgICBpZiAoc2VsZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTI0NywxMSArMTE1Miw3IEBACiAgICAgfQogICAgIHNlbGYtPmludGVybiA9IGludGVybjsKICAgICBQeV9YSU5DUkVGKHNlbGYtPmludGVybik7Ci0jaWZkZWYgUHlfVFBGTEFHU19IQVZFX0dDCiAgICAgUHlPYmplY3RfR0NfVHJhY2soc2VsZik7Ci0jZWxzZQotICAgIFB5T2JqZWN0X0dDX0luaXQoc2VsZik7Ci0jZW5kaWYKICAgICBpZiAoc2VsZi0+aXRzZWxmID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJYTUxfUGFyc2VyQ3JlYXRlIGZhaWxlZCIpOwpAQCAtMTI4MCwxMSArMTE4MSw3IEBACiB4bWxwYXJzZV9kZWFsbG9jKHhtbHBhcnNlb2JqZWN0ICpzZWxmKQogewogICAgIGludCBpOwotI2lmZGVmIFB5X1RQRkxBR1NfSEFWRV9HQwogICAgIFB5T2JqZWN0X0dDX1VuVHJhY2soc2VsZik7Ci0jZWxzZQotICAgIFB5T2JqZWN0X0dDX0Zpbmkoc2VsZik7Ci0jZW5kaWYKICAgICBpZiAoc2VsZi0+aXRzZWxmICE9IE5VTEwpCiAgICAgICAgIFhNTF9QYXJzZXJGcmVlKHNlbGYtPml0c2VsZik7CiAgICAgc2VsZi0+aXRzZWxmID0gTlVMTDsKQEAgLTEzMDQsMjEgKzEyMDEsMTYgQEAKICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICB9CiAgICAgUHlfWERFQ1JFRihzZWxmLT5pbnRlcm4pOwotI2lmbmRlZiBQeV9UUEZMQUdTX0hBVkVfR0MKLSAgICAvKiBDb2RlIGZvciB2ZXJzaW9ucyAyLjAgYW5kIDIuMSAqLwotICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKLSNlbHNlCi0gICAgLyogQ29kZSBmb3IgdmVyc2lvbnMgMi4yIGFuZCBsYXRlci4gKi8KICAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7Ci0jZW5kaWYKIH0KIAogc3RhdGljIGludAotaGFuZGxlcm5hbWUyaW50KGNvbnN0IGNoYXIgKm5hbWUpCitoYW5kbGVybmFtZTJpbnQoUHlPYmplY3QgKm5hbWUpCiB7CiAgICAgaW50IGk7CiAgICAgZm9yIChpID0gMDsgaGFuZGxlcl9pbmZvW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgaGFuZGxlcl9pbmZvW2ldLm5hbWUpID09IDApIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKAorICAgICAgICAgICAgICAgIG5hbWUsIGhhbmRsZXJfaW5mb1tpXS5uYW1lKSA9PSAwKSB7CiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzMzYsMTMgKzEyMjgsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB4bWxwYXJzZV9nZXRhdHRybyh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWVvYmopCiB7Ci0gICAgY2hhciAqbmFtZSA9ICIiOworICAgIFB5X1VOSUNPREUgKm5hbWU7CiAgICAgaW50IGhhbmRsZXJudW0gPSAtMTsKIAotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpCi0gICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQorICAgICAgICBnb3RvIGdlbmVyaWM7CiAKLSAgICBoYW5kbGVybnVtID0gaGFuZGxlcm5hbWUyaW50KG5hbWUpOworICAgIGhhbmRsZXJudW0gPSBoYW5kbGVybmFtZTJpbnQobmFtZW9iaik7CiAKICAgICBpZiAoaGFuZGxlcm51bSAhPSAtMSkgewogICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gc2VsZi0+aGFuZGxlcnNbaGFuZGxlcm51bV07CkBAIC0xMzUxLDQ2ICsxMjQzLDQ4IEBACiAgICAgICAgIFB5X0lOQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIG5hbWUgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShuYW1lb2JqKTsKICAgICBpZiAobmFtZVswXSA9PSAnRScpIHsKLSAgICAgICAgaWYgKHN0cmNtcChuYW1lLCAiRXJyb3JDb2RlIikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJFcnJvckNvZGUiKSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfR2V0RXJyb3JDb2RlKHNlbGYtPml0c2VsZikpOwotICAgICAgICBpZiAoc3RyY21wKG5hbWUsICJFcnJvckxpbmVOdW1iZXIiKSA9PSAwKQorICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgIkVycm9yTGluZU51bWJlciIpID09IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9HZXRFcnJvckxpbmVOdW1iZXIoc2VsZi0+aXRzZWxmKSk7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgIkVycm9yQ29sdW1uTnVtYmVyIikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJFcnJvckNvbHVtbk51bWJlciIpID09IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9HZXRFcnJvckNvbHVtbk51bWJlcihzZWxmLT5pdHNlbGYpKTsKLSAgICAgICAgaWYgKHN0cmNtcChuYW1lLCAiRXJyb3JCeXRlSW5kZXgiKSA9PSAwKQorICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgIkVycm9yQnl0ZUluZGV4IikgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0dldEVycm9yQnl0ZUluZGV4KHNlbGYtPml0c2VsZikpOwogICAgIH0KICAgICBpZiAobmFtZVswXSA9PSAnQycpIHsKLSAgICAgICAgaWYgKHN0cmNtcChuYW1lLCAiQ3VycmVudExpbmVOdW1iZXIiKSA9PSAwKQorICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgIkN1cnJlbnRMaW5lTnVtYmVyIikgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0dldEN1cnJlbnRMaW5lTnVtYmVyKHNlbGYtPml0c2VsZikpOwotICAgICAgICBpZiAoc3RyY21wKG5hbWUsICJDdXJyZW50Q29sdW1uTnVtYmVyIikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJDdXJyZW50Q29sdW1uTnVtYmVyIikgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWE1MX0dldEN1cnJlbnRDb2x1bW5OdW1iZXIoc2VsZi0+aXRzZWxmKSk7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgIkN1cnJlbnRCeXRlSW5kZXgiKSA9PSAwKQorICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgIkN1cnJlbnRCeXRlSW5kZXgiKSA9PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxfR2V0Q3VycmVudEJ5dGVJbmRleChzZWxmLT5pdHNlbGYpKTsKICAgICB9CiAgICAgaWYgKG5hbWVbMF0gPT0gJ2InKSB7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgImJ1ZmZlcl9zaXplIikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJidWZmZXJfc2l6ZSIpID09IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzZWxmLT5idWZmZXJfc2l6ZSk7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgImJ1ZmZlcl90ZXh0IikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJidWZmZXJfdGV4dCIpID09IDApCiAgICAgICAgICAgICByZXR1cm4gZ2V0X3B5Ym9vbChzZWxmLT5idWZmZXIgIT0gTlVMTCk7Ci0gICAgICAgIGlmIChzdHJjbXAobmFtZSwgImJ1ZmZlcl91c2VkIikgPT0gMCkKKyAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJidWZmZXJfdXNlZCIpID09IDApCiAgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzZWxmLT5idWZmZXJfdXNlZCk7CiAgICAgfQotICAgIGlmIChzdHJjbXAobmFtZSwgIm5hbWVzcGFjZV9wcmVmaXhlcyIpID09IDApCisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWVvYmosICJuYW1lc3BhY2VfcHJlZml4ZXMiKSA9PSAwKQogICAgICAgICByZXR1cm4gZ2V0X3B5Ym9vbChzZWxmLT5uc19wcmVmaXhlcyk7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAib3JkZXJlZF9hdHRyaWJ1dGVzIikgPT0gMCkKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgIm9yZGVyZWRfYXR0cmlidXRlcyIpID09IDApCiAgICAgICAgIHJldHVybiBnZXRfcHlib29sKHNlbGYtPm9yZGVyZWRfYXR0cmlidXRlcyk7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAic3BlY2lmaWVkX2F0dHJpYnV0ZXMiKSA9PSAwKQorICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lb2JqLCAic3BlY2lmaWVkX2F0dHJpYnV0ZXMiKSA9PSAwKQogICAgICAgICByZXR1cm4gZ2V0X3B5Ym9vbCgobG9uZykgc2VsZi0+c3BlY2lmaWVkX2F0dHJpYnV0ZXMpOwotICAgIGlmIChzdHJjbXAobmFtZSwgImludGVybiIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZW9iaiwgImludGVybiIpID09IDApIHsKICAgICAgICAgaWYgKHNlbGYtPmludGVybiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTE0MDAsNyArMTI5NCw3IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi0+aW50ZXJuOwogICAgICAgICB9CiAgICAgfQotCisgIGdlbmVyaWM6CiAgICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKChQeU9iamVjdCopc2VsZiwgbmFtZW9iaik7CiB9CiAKQEAgLTE0NTEsNyArMTM0NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNldGhhbmRsZXIoeG1scGFyc2VvYmplY3QgKnNlbGYsIGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0KiB2KQorc2V0aGFuZGxlcih4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0KiB2KQogewogICAgIGludCBoYW5kbGVybnVtID0gaGFuZGxlcm5hbWUyaW50KG5hbWUpOwogICAgIGlmIChoYW5kbGVybnVtID49IDApIHsKQEAgLTE0ODcsMTQgKzEzODEsMTUgQEAKIH0KIAogc3RhdGljIGludAoteG1scGFyc2Vfc2V0YXR0cih4bWxwYXJzZW9iamVjdCAqc2VsZiwgY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCit4bWxwYXJzZV9zZXRhdHRybyh4bWxwYXJzZW9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICp2KQogewogICAgIC8qIFNldCBhdHRyaWJ1dGUgJ25hbWUnIHRvIHZhbHVlICd2Jy4gdj09TlVMTCBtZWFucyBkZWxldGUgKi8KICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJDYW5ub3QgZGVsZXRlIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChzdHJjbXAobmFtZSwgImJ1ZmZlcl90ZXh0IikgPT0gMCkgeworICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpOworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiYnVmZmVyX3RleHQiKSA9PSAwKSB7CiAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUodikpIHsKICAgICAgICAgICAgIGlmIChzZWxmLT5idWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IG1hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CkBAIC0xNTEzLDcgKzE0MDgsNyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJuYW1lc3BhY2VfcHJlZml4ZXMiKSA9PSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJuYW1lc3BhY2VfcHJlZml4ZXMiKSA9PSAwKSB7CiAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUodikpCiAgICAgICAgICAgICBzZWxmLT5uc19wcmVmaXhlcyA9IDE7CiAgICAgICAgIGVsc2UKQEAgLTE1MjEsMTQgKzE0MTYsMTQgQEAKICAgICAgICAgWE1MX1NldFJldHVybk5TVHJpcGxldChzZWxmLT5pdHNlbGYsIHNlbGYtPm5zX3ByZWZpeGVzKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChzdHJjbXAobmFtZSwgIm9yZGVyZWRfYXR0cmlidXRlcyIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIm9yZGVyZWRfYXR0cmlidXRlcyIpID09IDApIHsKICAgICAgICAgaWYgKFB5T2JqZWN0X0lzVHJ1ZSh2KSkKICAgICAgICAgICAgIHNlbGYtPm9yZGVyZWRfYXR0cmlidXRlcyA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNlbGYtPm9yZGVyZWRfYXR0cmlidXRlcyA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoc3RyY21wKG5hbWUsICJzcGVjaWZpZWRfYXR0cmlidXRlcyIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgInNwZWNpZmllZF9hdHRyaWJ1dGVzIikgPT0gMCkgewogICAgICAgICBpZiAoUHlPYmplY3RfSXNUcnVlKHYpKQogICAgICAgICAgICAgc2VsZi0+c3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxOwogICAgICAgICBlbHNlCkBAIC0xNTM2LDcgKzE0MzEsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoc3RyY21wKG5hbWUsICJidWZmZXJfc2l6ZSIpID09IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgImJ1ZmZlcl9zaXplIikgPT0gMCkgewogICAgICAgbG9uZyBuZXdfYnVmZmVyX3NpemU7CiAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyX3NpemUgbXVzdCBiZSBhbiBpbnRlZ2VyIik7CkBAIC0xNTc5LDcgKzE0NzQsNyBAQAogICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcChuYW1lLCAiQ2hhcmFjdGVyRGF0YUhhbmRsZXIiKSA9PSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJDaGFyYWN0ZXJEYXRhSGFuZGxlciIpID09IDApIHsKICAgICAgICAgLyogSWYgd2UncmUgY2hhbmdpbmcgdGhlIGNoYXJhY3RlciBkYXRhIGhhbmRsZXIsIGZsdXNoIGFsbAogICAgICAgICAgKiBjYWNoZWQgZGF0YSB3aXRoIHRoZSBvbGQgaGFuZGxlci4gIE5vdCBzdXJlIHRoZXJlJ3MgYQogICAgICAgICAgKiAicmlnaHQiIHRoaW5nIHRvIGRvLCB0aG91Z2gsIGJ1dCB0aGlzIHByb2JhYmx5IHdvbid0CkBAIC0xNTkxLDcgKzE0ODYsNyBAQAogICAgIGlmIChzZXRoYW5kbGVyKHNlbGYsIG5hbWUsIHYpKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsIG5hbWUpOworICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbmFtZSk7CiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC0xNjE3LDEzICsxNTEyLDEzIEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IFhtbHBhcnNldHlwZSA9IHsKICAgICAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgICAgICJweWV4cGF0LnhtbHBhcnNlciIsICAgICAgICAgICAgLyp0cF9uYW1lKi8KLSAgICAgICAgc2l6ZW9mKHhtbHBhcnNlb2JqZWN0KSArIFB5R0NfSEVBRF9TSVpFLC8qdHBfYmFzaWNzaXplKi8KKyAgICAgICAgc2l6ZW9mKHhtbHBhcnNlb2JqZWN0KSwgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCiAgICAgICAgIC8qIG1ldGhvZHMgKi8KICAgICAgICAgKGRlc3RydWN0b3IpeG1scGFyc2VfZGVhbGxvYywgICAvKnRwX2RlYWxsb2MqLwogICAgICAgICAocHJpbnRmdW5jKTAsICAgICAgICAgICAvKnRwX3ByaW50Ki8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KLSAgICAgICAgKHNldGF0dHJmdW5jKXhtbHBhcnNlX3NldGF0dHIsICAvKnRwX3NldGF0dHIqLworICAgICAgICAwLCAgLyp0cF9zZXRhdHRyKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCiAgICAgICAgIChyZXByZnVuYykwLCAgICAgICAgICAgIC8qdHBfcmVwciovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KQEAgLTE2MzMsMTMgKzE1MjgsOSBAQAogICAgICAgICAodGVybmFyeWZ1bmMpMCwgICAgICAgICAvKnRwX2NhbGwqLwogICAgICAgICAocmVwcmZ1bmMpMCwgICAgICAgICAgICAvKnRwX3N0ciovCiAgICAgICAgIChnZXRhdHRyb2Z1bmMpeG1scGFyc2VfZ2V0YXR0cm8sIC8qIHRwX2dldGF0dHJvICovCi0gICAgICAgIDAsICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLworICAgICAgICAoc2V0YXR0cm9mdW5jKXhtbHBhcnNlX3NldGF0dHJvLCAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAgICAgMCwgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotI2lmZGVmIFB5X1RQRkxBR1NfSEFWRV9HQwogICAgICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwotI2Vsc2UKLSAgICAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19HQywgLyp0cF9mbGFncyovCi0jZW5kaWYKICAgICAgICAgWG1scGFyc2V0eXBlX19kb2NfXywgLyogdHBfZG9jIC0gRG9jdW1lbnRhdGlvbiBzdHJpbmcgKi8KICAgICAgICAgKHRyYXZlcnNlcHJvYyl4bWxwYXJzZV90cmF2ZXJzZSwgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgICAgIChpbnF1aXJ5KXhtbHBhcnNlX2NsZWFyLCAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTc5MSw4ICsxNjgyLDEyIEBACiAgICAgUHlPYmplY3QgKm1vZGVsbW9kX25hbWU7CiAgICAgUHlPYmplY3QgKm1vZGVsX21vZHVsZTsKICAgICBQeU9iamVjdCAqc3lzX21vZHVsZXM7CisgICAgUHlPYmplY3QgKnRtcG51bSwgKnRtcHN0cjsKKyAgICBQeU9iamVjdCAqY29kZXNfZGljdDsKKyAgICBQeU9iamVjdCAqcmV2X2NvZGVzX2RpY3Q7CisgICAgaW50IHJlczsKICAgICBzdGF0aWMgc3RydWN0IFB5RXhwYXRfQ0FQSSBjYXBpOwotICAgIFB5T2JqZWN0KiBjYXBpX29iamVjdDsKKyAgICBQeU9iamVjdCAqY2FwaV9vYmplY3Q7CiAKICAgICBpZiAoZXJybW9kX25hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODk1LDkgKzE3OTAsMjkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIGNvZGVzX2RpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgcmV2X2NvZGVzX2RpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgaWYgKGNvZGVzX2RpY3QgPT0gTlVMTCB8fCByZXZfY29kZXNfZGljdCA9PSBOVUxMKSB7CisgICAgICAgIFB5X1hERUNSRUYoY29kZXNfZGljdCk7CisgICAgICAgIFB5X1hERUNSRUYocmV2X2NvZGVzX2RpY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICNkZWZpbmUgTVlDT05TVChuYW1lKSBcCi0gICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQoZXJyb3JzX21vZHVsZSwgI25hbWUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopWE1MX0Vycm9yU3RyaW5nKG5hbWUpKQorICAgIGlmIChQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChlcnJvcnNfbW9kdWxlLCAjbmFtZSwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopWE1MX0Vycm9yU3RyaW5nKG5hbWUpKSA8IDApIFwKKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHRtcG51bSA9IFB5TG9uZ19Gcm9tTG9uZyhuYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHRtcG51bSA9PSBOVUxMKSByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhjb2Rlc19kaWN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTF9FcnJvclN0cmluZyhuYW1lKSwgdG1wbnVtKTsgICAgICAgICBcCisgICAgaWYgKHJlcyA8IDApIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0bXBzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhYTUxfRXJyb3JTdHJpbmcobmFtZSkpOyAgICAgICAgICAgICAgXAorICAgIGlmICh0bXBzdHIgPT0gTlVMTCkgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVzID0gUHlEaWN0X1NldEl0ZW0ocmV2X2NvZGVzX2RpY3QsIHRtcG51bSwgdG1wc3RyKTsgICAgICAgICAgICAgIFwKKyAgICBQeV9ERUNSRUYodG1wc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFB5X0RFQ1JFRih0bXBudW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHJlcyA8IDApIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAogICAgIE1ZQ09OU1QoWE1MX0VSUk9SX05PX01FTU9SWSk7CiAgICAgTVlDT05TVChYTUxfRVJST1JfU1lOVEFYKTsKQEAgLTE5MzksOCArMTg1NCwxNSBAQAogICAgIE1ZQ09OU1QoWE1MX0VSUk9SX0ZJTklTSEVEKTsKICAgICBNWUNPTlNUKFhNTF9FUlJPUl9TVVNQRU5EX1BFKTsKIAotICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KGVycm9yc19tb2R1bGUsICJfX2RvY19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uc3RhbnRzIHVzZWQgdG8gZGVzY3JpYmUgZXJyb3IgY29uZGl0aW9ucy4iKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQoZXJyb3JzX21vZHVsZSwgIl9fZG9jX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29uc3RhbnRzIHVzZWQgdG8gZGVzY3JpYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgY29uZGl0aW9ucy4iKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChlcnJvcnNfbW9kdWxlLCAiY29kZXMiLCBjb2Rlc19kaWN0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QoZXJyb3JzX21vZHVsZSwgIm1lc3NhZ2VzIiwgcmV2X2NvZGVzX2RpY3QpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICN1bmRlZiBNWUNPTlNUCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHl0aG9uLmMgYi9Nb2R1bGVzL3B5dGhvbi5jCmluZGV4IDUwZWM1ZjAuLjE4ZjliM2QgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHl0aG9uLmMKKysrIGIvTW9kdWxlcy9weXRob24uYwpAQCAtMTQsMTA4ICsxNCwxMCBAQAogICAgIHJldHVybiBQeV9NYWluKGFyZ2MsIGFyZ3YpOwogfQogI2Vsc2UKLXN0YXRpYyB3Y2hhcl90KgotY2hhcjJ3Y2hhcihjaGFyKiBhcmcpCi17Ci0gICAgd2NoYXJfdCAqcmVzOwotI2lmZGVmIEhBVkVfQlJPS0VOX01CU1RPV0NTCi0gICAgLyogU29tZSBwbGF0Zm9ybXMgaGF2ZSBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAqIG1ic3Rvd2NzIHdoaWNoIGRvZXMgbm90IGNvdW50IHRoZSBjaGFyYWN0ZXJzIHRoYXQKLSAgICAgKiB3b3VsZCByZXN1bHQgZnJvbSBjb252ZXJzaW9uLiAgVXNlIGFuIHVwcGVyIGJvdW5kLgotICAgICAqLwotICAgIHNpemVfdCBhcmdzaXplID0gc3RybGVuKGFyZyk7Ci0jZWxzZQotICAgIHNpemVfdCBhcmdzaXplID0gbWJzdG93Y3MoTlVMTCwgYXJnLCAwKTsKLSNlbmRpZgotICAgIHNpemVfdCBjb3VudDsKLSAgICB1bnNpZ25lZCBjaGFyICppbjsKLSAgICB3Y2hhcl90ICpvdXQ7Ci0jaWZkZWYgSEFWRV9NQlJUT1dDCi0gICAgbWJzdGF0ZV90IG1iczsKLSNlbmRpZgotICAgIGlmIChhcmdzaXplICE9IChzaXplX3QpLTEpIHsKLSAgICAgICAgcmVzID0gKHdjaGFyX3QgKilQeU1lbV9NYWxsb2MoKGFyZ3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICBnb3RvIG9vbTsKLSAgICAgICAgY291bnQgPSBtYnN0b3djcyhyZXMsIGFyZywgYXJnc2l6ZSsxKTsKLSAgICAgICAgaWYgKGNvdW50ICE9IChzaXplX3QpLTEpIHsKLSAgICAgICAgICAgIHdjaGFyX3QgKnRtcDsKLSAgICAgICAgICAgIC8qIE9ubHkgdXNlIHRoZSByZXN1bHQgaWYgaXQgY29udGFpbnMgbm8KLSAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzLiAqLwotICAgICAgICAgICAgZm9yICh0bXAgPSByZXM7ICp0bXAgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICgqdG1wIDwgMHhkODAwIHx8ICp0bXAgPiAweGRmZmYpOyB0bXArKykKLSAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBpZiAoKnRtcCA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICAgICAgUHlNZW1fRnJlZShyZXMpOwotICAgIH0KLSAgICAvKiBDb252ZXJzaW9uIGZhaWxlZC4gRmFsbCBiYWNrIHRvIGVzY2FwaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLwotI2lmZGVmIEhBVkVfTUJSVE9XQwotICAgIC8qIFRyeSBjb252ZXJzaW9uIHdpdGggbWJydHdvYyAoQzk5KSwgYW5kIGVzY2FwZSBub24tZGVjb2RhYmxlIGJ5dGVzLiAqLwogCi0gICAgLyogT3ZlcmFsbG9jYXRlOyBhcyBtdWx0aS1ieXRlIGNoYXJhY3RlcnMgYXJlIGluIHRoZSBhcmd1bWVudCwgdGhlCi0gICAgICAgYWN0dWFsIG91dHB1dCBjb3VsZCB1c2UgbGVzcyBtZW1vcnkuICovCi0gICAgYXJnc2l6ZSA9IHN0cmxlbihhcmcpICsgMTsKLSAgICByZXMgPSBQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwotICAgIGlmICghcmVzKSBnb3RvIG9vbTsKLSAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7Ci0gICAgb3V0ID0gcmVzOwotICAgIG1lbXNldCgmbWJzLCAwLCBzaXplb2YgbWJzKTsKLSAgICB3aGlsZSAoYXJnc2l6ZSkgewotICAgICAgICBzaXplX3QgY29udmVydGVkID0gbWJydG93YyhvdXQsIChjaGFyKilpbiwgYXJnc2l6ZSwgJm1icyk7Ci0gICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gMCkKLSAgICAgICAgICAgIC8qIFJlYWNoZWQgZW5kIG9mIHN0cmluZzsgbnVsbCBjaGFyIHN0b3JlZC4gKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoY29udmVydGVkID09IChzaXplX3QpLTIpIHsKLSAgICAgICAgICAgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sCi0gICAgICAgICAgICAgICBzaW5jZSB3ZSBwcm92aWRlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBoYXZlIC0KLSAgICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQyBsaWJyYXJ5LCBvciBJCi0gICAgICAgICAgICAgICBtaXN1bmRlcnN0b29kIGhvdyBtYnJ0b3djIHdvcmtzLiAqLwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIG1icnRvd2MgcmVzdWx0IC0yXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gKHNpemVfdCktMSkgewotICAgICAgICAgICAgLyogQ29udmVyc2lvbiBlcnJvci4gRXNjYXBlIGFzIFVURi04YiwgYW5kIHN0YXJ0IG92ZXIKLSAgICAgICAgICAgICAgIGluIHRoZSBpbml0aWFsIHNoaWZ0IHN0YXRlLiAqLwotICAgICAgICAgICAgKm91dCsrID0gMHhkYzAwICsgKmluKys7Ci0gICAgICAgICAgICBhcmdzaXplLS07Ci0gICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKLSAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIuICBFc2NhcGUgdGhlIG9yaWdpbmFsCi0gICAgICAgICAgICAgICBieXRlIHNlcXVlbmNlIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLwotICAgICAgICAgICAgYXJnc2l6ZSAtPSBjb252ZXJ0ZWQ7Ci0gICAgICAgICAgICB3aGlsZSAoY29udmVydGVkLS0pCi0gICAgICAgICAgICAgICAgKm91dCsrID0gMHhkYzAwICsgKmluKys7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAvKiBzdWNjZXNzZnVsbHkgY29udmVydGVkIHNvbWUgYnl0ZXMgKi8KLSAgICAgICAgaW4gKz0gY29udmVydGVkOwotICAgICAgICBhcmdzaXplIC09IGNvbnZlcnRlZDsKLSAgICAgICAgb3V0Kys7Ci0gICAgfQotI2Vsc2UKLSAgICAvKiBDYW5ub3QgdXNlIEMgbG9jYWxlIGZvciBlc2NhcGluZzsgbWFudWFsbHkgZXNjYXBlIGFzIGlmIGNoYXJzZXQKLSAgICAgICBpcyBBU0NJSSAoaS5lLiBlc2NhcGUgYWxsIGJ5dGVzID4gMTI4LiBUaGlzIHdpbGwgc3RpbGwgcm91bmR0cmlwCi0gICAgICAgY29ycmVjdGx5IGluIHRoZSBsb2NhbGUncyBjaGFyc2V0LCB3aGljaCBtdXN0IGJlIGFuIEFTQ0lJIHN1cGVyc2V0LiAqLwotICAgIHJlcyA9IFB5TWVtX01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICBpZiAoIXJlcykgZ290byBvb207Ci0gICAgaW4gPSAodW5zaWduZWQgY2hhciopYXJnOwotICAgIG91dCA9IHJlczsKLSAgICB3aGlsZSgqaW4pCi0gICAgICAgIGlmKCppbiA8IDEyOCkKLSAgICAgICAgICAgICpvdXQrKyA9ICppbisrOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqb3V0KysgPSAweGRjMDAgKyAqaW4rKzsKLSAgICAqb3V0ID0gMDsKKyNpZmRlZiBfX0FQUExFX18KK2V4dGVybiB3Y2hhcl90KiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKTsKICNlbmRpZgotICAgIHJldHVybiByZXM7Ci1vb206Ci0gICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KIAogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKQEAgLTE0Myw5ICs0NSwxNCBAQAogICAgIG9sZGxvYyA9IHN0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgYXJndl9jb3B5MltpXSA9IGFyZ3ZfY29weVtpXSA9IGNoYXIyd2NoYXIoYXJndltpXSk7CisjaWZkZWYgX19BUFBMRV9fCisgICAgICAgIGFyZ3ZfY29weVtpXSA9IF9QeV9EZWNvZGVVVEY4X3N1cnJvZ2F0ZWVzY2FwZShhcmd2W2ldLCBzdHJsZW4oYXJndltpXSkpOworI2Vsc2UKKyAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CisjZW5kaWYKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pCiAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgYXJndl9jb3B5MltpXSA9IGFyZ3ZfY29weVtpXTsKICAgICB9CiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKICAgICBmcmVlKG9sZGxvYyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3JlYWRsaW5lLmMgYi9Nb2R1bGVzL3JlYWRsaW5lLmMKaW5kZXggNTNjNmRlMi4uODMzNzk1NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZWFkbGluZS5jCisrKyBiL01vZHVsZXMvcmVhZGxpbmUuYwpAQCAtMzgsMTQgKzM4LDM3IEBACiAjaWYgZGVmaW5lZChfUkxfRlVOQ1RJT05fVFlQRURFRikKIGV4dGVybiBjaGFyICoqY29tcGxldGlvbl9tYXRjaGVzKGNoYXIgKiwgcmxfY29tcGVudHJ5X2Z1bmNfdCAqKTsKICNlbHNlCisKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pCiBleHRlcm4gY2hhciAqKmNvbXBsZXRpb25fbWF0Y2hlcyhjaGFyICosIENQRnVuY3Rpb24gKik7CiAjZW5kaWYKICNlbmRpZgorI2VuZGlmCiAKKyNpZmRlZiBfX0FQUExFX18KKy8qCisgKiBJdCBpcyBwb3NzaWJsZSB0byBsaW5rIHRoZSByZWFkbGluZSBtb2R1bGUgdG8gdGhlIHJlYWRsaW5lCisgKiBlbXVsYXRpb24gbGlicmFyeSBvZiBlZGl0bGluZS9saWJlZGl0LgorICoKKyAqIE9uIE9TWCB0aGlzIGVtdWxhdGlvbiBsaWJyYXJ5IGlzIG5vdCAxMDAlIEFQSSBjb21wYXRpYmxlCisgKiB3aXRoIHRoZSAicmVhbCIgcmVhZGxpbmUgYW5kIGNhbm5vdCBiZSBkZXRlY3RlZCBhdCBjb21waWxlLXRpbWUsCisgKiBoZW5jZSB3ZSB1c2UgYSBydW50aW1lIGNoZWNrIHRvIGRldGVjdCBpZiB3ZSdyZSB1c2luZyBsaWJlZGl0CisgKgorICogQ3VycmVudGx5IHRoZXJlIGlzIG9uZSBrbm93IEFQSSBpbmNvbXBhdGliaWxpdHk6CisgKiAtICdnZXRfaGlzdG9yeScgaGFzIGEgMS1iYXNlZCBpbmRleCB3aXRoIEdOVSByZWFkbGluZSwgYW5kIGEgMC1iYXNlZAorICogICBpbmRleCB3aXRoIGxpYmVkaXQncyBlbXVsYXRpb24uCisgKiAtIE5vdGUgdGhhdCByZXBsYWNlX2hpc3RvcnkgYW5kIHJlbW92ZV9oaXN0b3J5IHVzZSBhIDAtYmFzZWQgaW5kZXgKKyAqICAgd2l0aCBib3RoIGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgaW50IHVzaW5nX2xpYmVkaXRfZW11bGF0aW9uID0gMDsKK3N0YXRpYyBjb25zdCBjaGFyIGxpYmVkaXRfdmVyc2lvbl90YWdbXSA9ICJFZGl0TGluZSB3cmFwcGVyIjsKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKworI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogc3RhdGljIHZvaWQKIG9uX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2soY2hhciAqKm1hdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fbWF0Y2hlcywgaW50IG1heF9sZW5ndGgpOwotCisjZW5kaWYKIAogLyogRXhwb3J0ZWQgZnVuY3Rpb24gdG8gc2VuZCBvbmUgbGluZSB0byByZWFkbGluZSdzIGluaXQgZmlsZSBwYXJzZXIgKi8KIApAQCAtNzYsMTAgKzk5LDE2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcmVhZF9pbml0X2ZpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKnMgPSBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHo6cmVhZF9pbml0X2ZpbGUiLCAmcykpCisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iaiA9IFB5X05vbmUsICpmaWxlbmFtZV9ieXRlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRfaW5pdF9maWxlIiwgJmZpbGVuYW1lX29iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVycm5vID0gcmxfcmVhZF9pbml0X2ZpbGUocyk7CisgICAgaWYgKGZpbGVuYW1lX29iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKGZpbGVuYW1lX29iaiwgJmZpbGVuYW1lX2J5dGVzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBlcnJubyA9IHJsX3JlYWRfaW5pdF9maWxlKFB5Qnl0ZXNfQXNTdHJpbmcoZmlsZW5hbWVfYnl0ZXMpKTsKKyAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lX2J5dGVzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZXJybm8gPSBybF9yZWFkX2luaXRfZmlsZShOVUxMKTsKICAgICBpZiAoZXJybm8pCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC05NiwxMCArMTI1LDE2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcmVhZF9oaXN0b3J5X2ZpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKnMgPSBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHo6cmVhZF9oaXN0b3J5X2ZpbGUiLCAmcykpCisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iaiA9IFB5X05vbmUsICpmaWxlbmFtZV9ieXRlczsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnJlYWRfaGlzdG9yeV9maWxlIiwgJmZpbGVuYW1lX29iaikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVycm5vID0gcmVhZF9oaXN0b3J5KHMpOworICAgIGlmIChmaWxlbmFtZV9vYmogIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoIVB5VW5pY29kZV9GU0NvbnZlcnRlcihmaWxlbmFtZV9vYmosICZmaWxlbmFtZV9ieXRlcykpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZXJybm8gPSByZWFkX2hpc3RvcnkoUHlCeXRlc19Bc1N0cmluZyhmaWxlbmFtZV9ieXRlcykpOworICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWVfYnl0ZXMpOworICAgIH0gZWxzZQorICAgICAgICBlcnJubyA9IHJlYWRfaGlzdG9yeShOVUxMKTsKICAgICBpZiAoZXJybm8pCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xMTcsMTIgKzE1MiwyMiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyaXRlX2hpc3RvcnlfZmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqcyA9IE5VTEw7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8ejp3cml0ZV9oaXN0b3J5X2ZpbGUiLCAmcykpCisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iaiA9IFB5X05vbmUsICpmaWxlbmFtZV9ieXRlczsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOndyaXRlX2hpc3RvcnlfZmlsZSIsICZmaWxlbmFtZV9vYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlcnJubyA9IHdyaXRlX2hpc3Rvcnkocyk7CisgICAgaWYgKGZpbGVuYW1lX29iaiAhPSBQeV9Ob25lKSB7CisgICAgICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKGZpbGVuYW1lX29iaiwgJmZpbGVuYW1lX2J5dGVzKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQXNTdHJpbmcoZmlsZW5hbWVfYnl0ZXMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZpbGVuYW1lX2J5dGVzID0gTlVMTDsKKyAgICAgICAgZmlsZW5hbWUgPSBOVUxMOworICAgIH0KKyAgICBlcnJubyA9IHdyaXRlX2hpc3RvcnkoZmlsZW5hbWUpOwogICAgIGlmICghZXJybm8gJiYgX2hpc3RvcnlfbGVuZ3RoID49IDApCi0gICAgICAgIGhpc3RvcnlfdHJ1bmNhdGVfZmlsZShzLCBfaGlzdG9yeV9sZW5ndGgpOworICAgICAgICBoaXN0b3J5X3RydW5jYXRlX2ZpbGUoZmlsZW5hbWUsIF9oaXN0b3J5X2xlbmd0aCk7CisgICAgUHlfWERFQ1JFRihmaWxlbmFtZV9ieXRlcyk7CiAgICAgaWYgKGVycm5vKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtNTE5LDYgKzU2NCwyNyBAQAogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmluZGV4IiwgJmlkeCkpCiAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmICBfX0FQUExFX18KKyAgICBpZiAodXNpbmdfbGliZWRpdF9lbXVsYXRpb24pIHsKKyAgICAgICAgLyogTGliZWRpdCBlbXVsYXRpb24gdXNlcyAwLWJhc2VkIGluZGV4ZXMsCisgICAgICAgICAqIHRoZSByZWFsIG9uZSB1c2VzIDEtYmFzZWQgaW5kZXhlcywKKyAgICAgICAgICogYWRqdXN0IHRoZSBpbmRleCB0byBlbnN1cmUgdGhhdCBQeXRob24KKyAgICAgICAgICogY29kZSBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlCisgICAgICAgICAqIGRpZmZlcmVuY2UuCisgICAgICAgICAqLworICAgICAgICBpbnQgbGVuZ3RoID0gX3B5X2dldF9oaXN0b3J5X2xlbmd0aCgpOworICAgICAgICBpZHggLS07CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQXBwbGUncyByZWFkbGluZSBlbXVsYXRpb24gY3Jhc2hlcyB3aGVuCisgICAgICAgICAqIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsIHRoZXJlZm9yZQorICAgICAgICAgKiB0ZXN0IGZvciB0aGF0IGFuZCBmYWlsIGdyYWNlZnVsbHkuCisgICAgICAgICAqLworICAgICAgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KICAgICBpZiAoKGhpc3RfZW50ID0gaGlzdG9yeV9nZXQoaWR4KSkpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhoaXN0X2VudC0+bGluZSk7CiAgICAgZWxzZSB7CkBAIC03MDksNiArNzc1LDcgQEAKIAogLyogQyBmdW5jdGlvbiB0byBjYWxsIHRoZSBQeXRob24gY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXMgKi8KIAorI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSwogc3RhdGljIHZvaWQKIG9uX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2soY2hhciAqKm1hdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1fbWF0Y2hlcywgaW50IG1heF9sZW5ndGgpCkBAIC03NTAsNiArODE3LDcgQEAKICNlbmRpZgogfQogCisjZW5kaWYKIAogLyogQyBmdW5jdGlvbiB0byBjYWxsIHRoZSBQeXRob24gY29tcGxldGVyLiAqLwogCkBAIC04MjEsNiArODg5LDE0IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIm5vdCBlbm91Z2ggbWVtb3J5IHRvIHNhdmUgbG9jYWxlIik7CiAjZW5kaWYKIAorI2lmZGVmIF9fQVBQTEVfXworICAgIC8qIHRoZSBsaWJlZGl0IHJlYWRsaW5lIGVtdWxhdGlvbiByZXNldHMga2V5IGJpbmRpbmdzIGV0YyAKKyAgICAgKiB3aGVuIGNhbGxpbmcgcmxfaW5pdGlhbGl6ZS4gIFNvIGNhbGwgaXQgdXBmcm9udAorICAgICAqLworICAgIGlmICh1c2luZ19saWJlZGl0X2VtdWxhdGlvbikKKyAgICAgICAgcmxfaW5pdGlhbGl6ZSgpOworI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworCiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwpAQCAtODUyLDggKzkyOCwxMyBAQAogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCiAgICAgICogaW5zaWRlIHRoaXMgZnVuY3Rpb24uICBOb3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdC4KICAgICAgKi8KLSAgICBybF9pbml0aWFsaXplKCk7Ci0KKyNpZmRlZiBfX0FQUExFX18KKyAgICBpZiAodXNpbmdfbGliZWRpdF9lbXVsYXRpb24pCisJcmxfcmVhZF9pbml0X2ZpbGUoTlVMTCk7CisgICAgZWxzZQorI2VuZGlmIC8qIF9fQVBQTEVfXyAqLworICAgICAgICBybF9pbml0aWFsaXplKCk7CisgICAgCiAgICAgUkVTVE9SRV9MT0NBTEUoc2F2ZWRfbG9jYWxlKQogfQogCkBAIC0xMDE1LDEwICsxMDk2LDE5IEBACiAgICAgLyogd2UgaGF2ZSBhIHZhbGlkIGxpbmUgKi8KICAgICBuID0gc3RybGVuKHApOwogICAgIGlmIChuID4gMCkgewotICAgICAgICBjaGFyICpsaW5lOworICAgICAgICBjb25zdCBjaGFyICpsaW5lOwogICAgICAgICBpbnQgbGVuZ3RoID0gX3B5X2dldF9oaXN0b3J5X2xlbmd0aCgpOwogICAgICAgICBpZiAobGVuZ3RoID4gMCkKLSAgICAgICAgICAgIGxpbmUgPSBoaXN0b3J5X2dldChsZW5ndGgpLT5saW5lOworI2lmZGVmIF9fQVBQTEVfXworICAgICAgICAgICAgaWYgKHVzaW5nX2xpYmVkaXRfZW11bGF0aW9uKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBMaWJlZGl0J3MgZW11bGF0aW9uIHVzZXMgMC1iYXNlZCBpbmRleGVzLAorICAgICAgICAgICAgICAgICAqIHRoZSByZWFsIHJlYWRsaW5lIHVzZXMgMS1iYXNlZCBpbmRleGVzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGxpbmUgPSAoY29uc3QgY2hhciAqKWhpc3RvcnlfZ2V0KGxlbmd0aCAtIDEpLT5saW5lOworICAgICAgICAgICAgfSBlbHNlCisjZW5kaWYgLyogX19BUFBMRV9fICovCisgICAgICAgICAgICBsaW5lID0gKGNvbnN0IGNoYXIgKiloaXN0b3J5X2dldChsZW5ndGgpLT5saW5lOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsaW5lID0gIiI7CiAgICAgICAgIGlmIChzdHJjbXAocCwgbGluZSkpCkBAIC0xMDQ0LDYgKzExMzQsMTAgQEAKIFB5RG9jX1NUUlZBUihkb2NfbW9kdWxlLAogIkltcG9ydGluZyB0aGlzIG1vZHVsZSBlbmFibGVzIGNvbW1hbmQgbGluZSBlZGl0aW5nIHVzaW5nIEdOVSByZWFkbGluZS4iKTsKIAorI2lmZGVmIF9fQVBQTEVfXworUHlEb2NfU1RSVkFSKGRvY19tb2R1bGVfbGUsCisiSW1wb3J0aW5nIHRoaXMgbW9kdWxlIGVuYWJsZXMgY29tbWFuZCBsaW5lIGVkaXRpbmcgdXNpbmcgbGliZWRpdCByZWFkbGluZS4iKTsKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiByZWFkbGluZW1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCkBAIC0xMDU3LDE1ICsxMTUxLDI5IEBACiAgICAgTlVMTAogfTsKIAorCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X3JlYWRsaW5lKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07CiAKKyNpZmRlZiBfX0FQUExFX18KKyAgICBpZiAoc3RybmNtcChybF9saWJyYXJ5X3ZlcnNpb24sIGxpYmVkaXRfdmVyc2lvbl90YWcsIHN0cmxlbihsaWJlZGl0X3ZlcnNpb25fdGFnKSkgPT0gMCkgeworICAgICAgICB1c2luZ19saWJlZGl0X2VtdWxhdGlvbiA9IDE7CisgICAgfQorCisgICAgaWYgKHVzaW5nX2xpYmVkaXRfZW11bGF0aW9uKQorICAgICAgICByZWFkbGluZW1vZHVsZS5tX2RvYyA9IGRvY19tb2R1bGVfbGU7CisKKyNlbmRpZiAvKiBfX0FQUExFX18gKi8KKwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnJlYWRsaW5lbW9kdWxlKTsKKwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisKKwogICAgIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgPSBjYWxsX3JlYWRsaW5lOwogICAgIHNldHVwX3JlYWRsaW5lKCk7CiAgICAgcmV0dXJuIG07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Jlc291cmNlLmMgYi9Nb2R1bGVzL3Jlc291cmNlLmMKaW5kZXggNmQ4YmQ1Ny4uMTg3NWU0OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9yZXNvdXJjZS5jCisrKyBiL01vZHVsZXMvcmVzb3VyY2UuYwpAQCAtMSw2ICsxLDUgQEAKIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInN0cnVjdHNlcS5oIgogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zMjUsNiArMzI0LDEwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOwogI2VuZGlmCiAKKyNpZmRlZiBSVVNBR0VfVEhSRUFECisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9USFJFQUQiLCBSVVNBR0VfVEhSRUFEKTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykKICAgICBpZiAoc2l6ZW9mKFJMSU1fSU5GSU5JVFkpID4gc2l6ZW9mKGxvbmcpKSB7CiAgICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpIFJMSU1fSU5GSU5JVFkpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKaW5kZXggM2RhOTEwYy4uNjVlMTgyNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCkBAIC04MSwxNyArODEsMTYgQEAKIHN0YXRpYyBpbnQKIHNlcTJzZXQoUHlPYmplY3QgKnNlcSwgZmRfc2V0ICpzZXQsIHB5bGlzdCBmZDJvYmpbRkRfU0VUU0laRSArIDFdKQogewotICAgIGludCBpOwogICAgIGludCBtYXggPSAtMTsKICAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBsZW4gPSAtMTsKKyAgICBQeV9zc2l6ZV90IGksIGxlbiA9IC0xOwogICAgIFB5T2JqZWN0KiBmYXN0X3NlcSA9IE5VTEw7CiAgICAgUHlPYmplY3QqIG8gPSBOVUxMOwogCiAgICAgZmQyb2JqWzBdLm9iaiA9IChQeU9iamVjdCopMDsgICAgICAgICAgICAvKiBzZXQgbGlzdCB0byB6ZXJvIHNpemUgKi8KICAgICBGRF9aRVJPKHNldCk7CiAKLSAgICBmYXN0X3NlcT1QeVNlcXVlbmNlX0Zhc3Qoc2VxLCAiYXJndW1lbnRzIDEtMyBtdXN0IGJlIHNlcXVlbmNlcyIpOworICAgIGZhc3Rfc2VxID0gUHlTZXF1ZW5jZV9GYXN0KHNlcSwgImFyZ3VtZW50cyAxLTMgbXVzdCBiZSBzZXF1ZW5jZXMiKTsKICAgICBpZiAoIWZhc3Rfc2VxKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTExOTAsNiArMTE4OSwzMCBAQAogCiAjZGVmaW5lIGtxdWV1ZV9xdWV1ZV9DaGVjayhvcCkgKFB5T2JqZWN0X1R5cGVDaGVjaygob3ApLCAma3F1ZXVlX3F1ZXVlX1R5cGUpKQogCisjaWYgKFNJWkVPRl9VSU5UUFRSX1QgIT0gU0laRU9GX1ZPSURfUCkKKyMgICBlcnJvciB1aW50cHRyX3QgZG9lcyBub3QgbWF0Y2ggdm9pZCAqIQorI2VsaWYgKFNJWkVPRl9VSU5UUFRSX1QgPT0gU0laRU9GX0xPTkdfTE9ORykKKyMgICBkZWZpbmUgVF9VSU5UUFRSVCAgICAgICAgIFRfVUxPTkdMT05HCisjICAgZGVmaW5lIFRfSU5UUFRSVCAgICAgICAgICBUX0xPTkdMT05HCisjICAgZGVmaW5lIFB5TG9uZ19Bc1VpbnRwdHJfdCBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisjICAgZGVmaW5lIFVJTlRQVFJUX0ZNVF9VTklUICAiSyIKKyMgICBkZWZpbmUgSU5UUFRSVF9GTVRfVU5JVCAgICJMIgorI2VsaWYgKFNJWkVPRl9VSU5UUFRSX1QgPT0gU0laRU9GX0xPTkcpCisjICAgZGVmaW5lIFRfVUlOVFBUUlQgICAgICAgICBUX1VMT05HCisjICAgZGVmaW5lIFRfSU5UUFRSVCAgICAgICAgICBUX0xPTkcKKyMgICBkZWZpbmUgUHlMb25nX0FzVWludHB0cl90IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZworIyAgIGRlZmluZSBVSU5UUFRSVF9GTVRfVU5JVCAgImsiCisjICAgZGVmaW5lIElOVFBUUlRfRk1UX1VOSVQgICAibCIKKyNlbGlmIChTSVpFT0ZfVUlOVFBUUl9UID09IFNJWkVPRl9JTlQpCisjICAgZGVmaW5lIFRfVUlOVFBUUlQgICAgICAgICBUX1VJTlQKKyMgICBkZWZpbmUgVF9JTlRQVFJUICAgICAgICAgIFRfSU5UCisjICAgZGVmaW5lIFB5TG9uZ19Bc1VpbnRwdHJfdCBQeUxvbmdfQXNVbnNpZ25lZExvbmcKKyMgICBkZWZpbmUgVUlOVFBUUlRfRk1UX1VOSVQgICJJIgorIyAgIGRlZmluZSBJTlRQVFJUX0ZNVF9VTklUICAgImkiCisjZWxzZQorIyAgIGVycm9yIHVpbnRwdHJfdCBkb2VzIG5vdCBtYXRjaCBpbnQsIGxvbmcsIG9yIGxvbmcgbG9uZyEKKyNlbmRpZgorCiAvKiBVbmZvcnR1bmF0ZWx5LCB3ZSBjYW4ndCBzdG9yZSBweXRob24gb2JqZWN0cyBpbiB1ZGF0YSwgYmVjYXVzZQogICoga2V2ZW50cyBpbiB0aGUga2VybmVsIGNhbiBiZSByZW1vdmVkIHdpdGhvdXQgd2FybmluZywgd2hpY2ggd291bGQKICAqIGZvcmV2ZXIgbG9zZSB0aGUgcmVmY291bnQgb24gdGhlIG9iamVjdCBzdG9yZWQgd2l0aCBpdC4KQEAgLTExOTcsMjcgKzEyMjAsMjggQEAKIAogI2RlZmluZSBLUV9PRkYoeCkgb2Zmc2V0b2Yoa3F1ZXVlX2V2ZW50X09iamVjdCwgeCkKIHN0YXRpYyBzdHJ1Y3QgUHlNZW1iZXJEZWYga3F1ZXVlX2V2ZW50X21lbWJlcnNbXSA9IHsKLSAgICB7ImlkZW50IiwgICAgICAgICAgIFRfVUlOVCwgICAgICAgICBLUV9PRkYoZS5pZGVudCl9LAorICAgIHsiaWRlbnQiLCAgICAgICAgICAgVF9VSU5UUFRSVCwgICAgIEtRX09GRihlLmlkZW50KX0sCiAgICAgeyJmaWx0ZXIiLCAgICAgICAgICBUX1NIT1JULCAgICAgICAgS1FfT0ZGKGUuZmlsdGVyKX0sCiAgICAgeyJmbGFncyIsICAgICAgICAgICBUX1VTSE9SVCwgICAgICAgS1FfT0ZGKGUuZmxhZ3MpfSwKICAgICB7ImZmbGFncyIsICAgICAgICAgIFRfVUlOVCwgICAgICAgICBLUV9PRkYoZS5mZmxhZ3MpfSwKLSAgICB7ImRhdGEiLCAgICAgICAgICAgIFRfSU5ULCAgICAgICAgICBLUV9PRkYoZS5kYXRhKX0sCi0gICAgeyJ1ZGF0YSIsICAgICAgICAgICBUX0lOVCwgICAgICAgICAgS1FfT0ZGKGUudWRhdGEpfSwKKyAgICB7ImRhdGEiLCAgICAgICAgICAgIFRfSU5UUFRSVCwgICAgICBLUV9PRkYoZS5kYXRhKX0sCisgICAgeyJ1ZGF0YSIsICAgICAgICAgICBUX1VJTlRQVFJULCAgICAgS1FfT0ZGKGUudWRhdGEpfSwKICAgICB7TlVMTH0gLyogU2VudGluZWwgKi8KIH07CiAjdW5kZWYgS1FfT0ZGCiAKIHN0YXRpYyBQeU9iamVjdCAqCisKIGtxdWV1ZV9ldmVudF9yZXByKGtxdWV1ZV9ldmVudF9PYmplY3QgKnMpCiB7CiAgICAgY2hhciBidWZbMTAyNF07CiAgICAgUHlPU19zbnByaW50ZigKICAgICAgICAgYnVmLCBzaXplb2YoYnVmKSwKLSAgICAgICAgIjxzZWxlY3Qua2V2ZW50IGlkZW50PSVsdSBmaWx0ZXI9JWQgZmxhZ3M9MHgleCBmZmxhZ3M9MHgleCAiCi0gICAgICAgICJkYXRhPTB4JWx4IHVkYXRhPSVwPiIsCi0gICAgICAgICh1bnNpZ25lZCBsb25nKShzLT5lLmlkZW50KSwgcy0+ZS5maWx0ZXIsIHMtPmUuZmxhZ3MsCi0gICAgICAgIHMtPmUuZmZsYWdzLCAobG9uZykocy0+ZS5kYXRhKSwgcy0+ZS51ZGF0YSk7Ci0gICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZyhidWYpOworICAgICAgICAiPHNlbGVjdC5rZXZlbnQgaWRlbnQ9JXp1IGZpbHRlcj0lZCBmbGFncz0weCV4IGZmbGFncz0weCV4ICIKKyAgICAgICAgImRhdGE9MHglemQgdWRhdGE9JXA+IiwKKyAgICAgICAgKHNpemVfdCkocy0+ZS5pZGVudCksIHMtPmUuZmlsdGVyLCBzLT5lLmZsYWdzLAorICAgICAgICBzLT5lLmZmbGFncywgKFB5X3NzaXplX3QpKHMtPmUuZGF0YSksIHMtPmUudWRhdGEpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhidWYpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjI2LDE3ICsxMjUwLDIzIEBACiAgICAgUHlPYmplY3QgKnBmZDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImlkZW50IiwgImZpbHRlciIsICJmbGFncyIsICJmZmxhZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGF0YSIsICJ1ZGF0YSIsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICpmbXQgPSAiT3xoaGkiIElOVFBUUlRfRk1UX1VOSVQgVUlOVFBUUlRfRk1UX1VOSVQgIjprZXZlbnQiOwogCiAgICAgRVZfU0VUKCYoc2VsZi0+ZSksIDAsIEVWRklMVF9SRUFELCBFVl9BREQsIDAsIDAsIDApOyAvKiBkZWZhdWx0cyAqLwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98aGhpaWk6a2V2ZW50Iiwga3dsaXN0LAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsIGZtdCwga3dsaXN0LAogICAgICAgICAmcGZkLCAmKHNlbGYtPmUuZmlsdGVyKSwgJihzZWxmLT5lLmZsYWdzKSwKICAgICAgICAgJihzZWxmLT5lLmZmbGFncyksICYoc2VsZi0+ZS5kYXRhKSwgJihzZWxmLT5lLnVkYXRhKSkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHNlbGYtPmUuaWRlbnQgPSBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yKHBmZCk7Ci0gICAgaWYgKHNlbGYtPmUuaWRlbnQgPT0gLTEpIHsKKyAgICBpZiAoUHlMb25nX0NoZWNrKHBmZCkpIHsKKyAgICAgICAgc2VsZi0+ZS5pZGVudCA9IFB5TG9uZ19Bc1VpbnRwdHJfdChwZmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc2VsZi0+ZS5pZGVudCA9IFB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IocGZkKTsKKyAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTEyNDYsNyArMTI3Niw3IEBACiBrcXVldWVfZXZlbnRfcmljaGNvbXBhcmUoa3F1ZXVlX2V2ZW50X09iamVjdCAqcywga3F1ZXVlX2V2ZW50X09iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3ApCiB7Ci0gICAgaW50IHJlc3VsdCA9IDA7CisgICAgUHlfaW50cHRyX3QgcmVzdWx0ID0gMDsKIAogICAgIGlmICgha3F1ZXVlX2V2ZW50X0NoZWNrKG8pKSB7CiAgICAgICAgIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgewpAQCAtMTI4OSw3ICsxMzE5LDcgQEAKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA+IDApOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpcmVzdWx0KTsKIH0KIAogc3RhdGljIFB5VHlwZU9iamVjdCBrcXVldWVfZXZlbnRfVHlwZSA9IHsKQEAgLTE0ODcsMTkgKzE1MTcsNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoY2ggIT0gTlVMTCAmJiBjaCAhPSBQeV9Ob25lKSB7Ci0gICAgICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihjaCk7Ci0gICAgICAgIGlmIChpdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFuZ2VsaXN0IGlzIG5vdCBpdGVyYWJsZSIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbmNoYW5nZXMgPSBQeU9iamVjdF9TaXplKGNoKTsKLSAgICAgICAgaWYgKG5jaGFuZ2VzIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAob3RpbWVvdXQgPT0gUHlfTm9uZSB8fCBvdGltZW91dCA9PSBOVUxMKSB7CiAgICAgICAgIHB0aW1lb3V0c3BlYyA9IE5VTEw7CiAgICAgfQpAQCAtMTUzNSwxMSArMTU1MiwyMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAobmNoYW5nZXMpIHsKKyAgICBpZiAoY2ggIT0gTlVMTCAmJiBjaCAhPSBQeV9Ob25lKSB7CisgICAgICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcihjaCk7CisgICAgICAgIGlmIChpdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFuZ2VsaXN0IGlzIG5vdCBpdGVyYWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmNoYW5nZXMgPSBQeU9iamVjdF9TaXplKGNoKTsKKyAgICAgICAgaWYgKG5jaGFuZ2VzIDwgMCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorCiAgICAgICAgIGNobCA9IFB5TWVtX05ldyhzdHJ1Y3Qga2V2ZW50LCBuY2hhbmdlcyk7CiAgICAgICAgIGlmIChjaGwgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBpID0gMDsKICAgICAgICAgd2hpbGUgKChlaSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewpAQCAtMTU2Miw3ICsxNTkwLDcgQEAKICAgICAgICAgZXZsID0gUHlNZW1fTmV3KHN0cnVjdCBrZXZlbnQsIG5ldmVudHMpOwogICAgICAgICBpZiAoZXZsID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3NTYsNiArMTc4NCwxNCBAQAogICAgIFB5X0lOQ1JFRihTZWxlY3RFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFNlbGVjdEVycm9yKTsKIAorI2lmZGVmIFBJUEVfQlVGCisjaWZkZWYgSEFWRV9CUk9LRU5fUElQRV9CVUYKKyN1bmRlZiBQSVBFX0JVRgorI2RlZmluZSBQSVBFX0JVRiA1MTIKKyNlbmRpZgorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSVBFX0JVRiIsIFBJUEVfQlVGKTsKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChIQVZFX1BPTEwpCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKHNlbGVjdF9oYXZlX2Jyb2tlbl9wb2xsKCkpIHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2hhMW1vZHVsZS5jIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKaW5kZXggYjhlODg4MC4uYjI1YmQ0NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGExbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaGExbW9kdWxlLmMKQEAgLTEyNyw1MCArMTI3LDUwIEBACiAKICAgICAvKiBjb21wcmVzcyAqLwogICAgIC8qIHJvdW5kIG9uZSAqLwotICAgICNkZWZpbmUgRkYwKGEsYixjLGQsZSxpKSBlID0gKFJPTGMoYSwgNSkgKyBGMChiLGMsZCkgKyBlICsgV1tpXSArIDB4NWE4Mjc5OTlVTCk7IGIgPSBST0xjKGIsIDMwKTsKLSAgICAjZGVmaW5lIEZGMShhLGIsYyxkLGUsaSkgZSA9IChST0xjKGEsIDUpICsgRjEoYixjLGQpICsgZSArIFdbaV0gKyAweDZlZDllYmExVUwpOyBiID0gUk9MYyhiLCAzMCk7Ci0gICAgI2RlZmluZSBGRjIoYSxiLGMsZCxlLGkpIGUgPSAoUk9MYyhhLCA1KSArIEYyKGIsYyxkKSArIGUgKyBXW2ldICsgMHg4ZjFiYmNkY1VMKTsgYiA9IFJPTGMoYiwgMzApOwotICAgICNkZWZpbmUgRkYzKGEsYixjLGQsZSxpKSBlID0gKFJPTGMoYSwgNSkgKyBGMyhiLGMsZCkgKyBlICsgV1tpXSArIDB4Y2E2MmMxZDZVTCk7IGIgPSBST0xjKGIsIDMwKTsKKyAgICAjZGVmaW5lIEZGXzAoYSxiLGMsZCxlLGkpIGUgPSAoUk9MYyhhLCA1KSArIEYwKGIsYyxkKSArIGUgKyBXW2ldICsgMHg1YTgyNzk5OVVMKTsgYiA9IFJPTGMoYiwgMzApOworICAgICNkZWZpbmUgRkZfMShhLGIsYyxkLGUsaSkgZSA9IChST0xjKGEsIDUpICsgRjEoYixjLGQpICsgZSArIFdbaV0gKyAweDZlZDllYmExVUwpOyBiID0gUk9MYyhiLCAzMCk7CisgICAgI2RlZmluZSBGRl8yKGEsYixjLGQsZSxpKSBlID0gKFJPTGMoYSwgNSkgKyBGMihiLGMsZCkgKyBlICsgV1tpXSArIDB4OGYxYmJjZGNVTCk7IGIgPSBST0xjKGIsIDMwKTsKKyAgICAjZGVmaW5lIEZGXzMoYSxiLGMsZCxlLGkpIGUgPSAoUk9MYyhhLCA1KSArIEYzKGIsYyxkKSArIGUgKyBXW2ldICsgMHhjYTYyYzFkNlVMKTsgYiA9IFJPTGMoYiwgMzApOwogCiAgICAgZm9yIChpID0gMDsgaSA8IDIwOyApIHsKLSAgICAgICBGRjAoYSxiLGMsZCxlLGkrKyk7Ci0gICAgICAgRkYwKGUsYSxiLGMsZCxpKyspOwotICAgICAgIEZGMChkLGUsYSxiLGMsaSsrKTsKLSAgICAgICBGRjAoYyxkLGUsYSxiLGkrKyk7Ci0gICAgICAgRkYwKGIsYyxkLGUsYSxpKyspOworICAgICAgIEZGXzAoYSxiLGMsZCxlLGkrKyk7CisgICAgICAgRkZfMChlLGEsYixjLGQsaSsrKTsKKyAgICAgICBGRl8wKGQsZSxhLGIsYyxpKyspOworICAgICAgIEZGXzAoYyxkLGUsYSxiLGkrKyk7CisgICAgICAgRkZfMChiLGMsZCxlLGEsaSsrKTsKICAgICB9CiAKICAgICAvKiByb3VuZCB0d28gKi8KICAgICBmb3IgKDsgaSA8IDQwOyApICB7Ci0gICAgICAgRkYxKGEsYixjLGQsZSxpKyspOwotICAgICAgIEZGMShlLGEsYixjLGQsaSsrKTsKLSAgICAgICBGRjEoZCxlLGEsYixjLGkrKyk7Ci0gICAgICAgRkYxKGMsZCxlLGEsYixpKyspOwotICAgICAgIEZGMShiLGMsZCxlLGEsaSsrKTsKKyAgICAgICBGRl8xKGEsYixjLGQsZSxpKyspOworICAgICAgIEZGXzEoZSxhLGIsYyxkLGkrKyk7CisgICAgICAgRkZfMShkLGUsYSxiLGMsaSsrKTsKKyAgICAgICBGRl8xKGMsZCxlLGEsYixpKyspOworICAgICAgIEZGXzEoYixjLGQsZSxhLGkrKyk7CiAgICAgfQogCiAgICAgLyogcm91bmQgdGhyZWUgKi8KICAgICBmb3IgKDsgaSA8IDYwOyApICB7Ci0gICAgICAgRkYyKGEsYixjLGQsZSxpKyspOwotICAgICAgIEZGMihlLGEsYixjLGQsaSsrKTsKLSAgICAgICBGRjIoZCxlLGEsYixjLGkrKyk7Ci0gICAgICAgRkYyKGMsZCxlLGEsYixpKyspOwotICAgICAgIEZGMihiLGMsZCxlLGEsaSsrKTsKKyAgICAgICBGRl8yKGEsYixjLGQsZSxpKyspOworICAgICAgIEZGXzIoZSxhLGIsYyxkLGkrKyk7CisgICAgICAgRkZfMihkLGUsYSxiLGMsaSsrKTsKKyAgICAgICBGRl8yKGMsZCxlLGEsYixpKyspOworICAgICAgIEZGXzIoYixjLGQsZSxhLGkrKyk7CiAgICAgfQogCiAgICAgLyogcm91bmQgZm91ciAqLwogICAgIGZvciAoOyBpIDwgODA7ICkgIHsKLSAgICAgICBGRjMoYSxiLGMsZCxlLGkrKyk7Ci0gICAgICAgRkYzKGUsYSxiLGMsZCxpKyspOwotICAgICAgIEZGMyhkLGUsYSxiLGMsaSsrKTsKLSAgICAgICBGRjMoYyxkLGUsYSxiLGkrKyk7Ci0gICAgICAgRkYzKGIsYyxkLGUsYSxpKyspOworICAgICAgIEZGXzMoYSxiLGMsZCxlLGkrKyk7CisgICAgICAgRkZfMyhlLGEsYixjLGQsaSsrKTsKKyAgICAgICBGRl8zKGQsZSxhLGIsYyxpKyspOworICAgICAgIEZGXzMoYyxkLGUsYSxiLGkrKyk7CisgICAgICAgRkZfMyhiLGMsZCxlLGEsaSsrKTsKICAgICB9CiAKLSAgICAjdW5kZWYgRkYwCi0gICAgI3VuZGVmIEZGMQotICAgICN1bmRlZiBGRjIKLSAgICAjdW5kZWYgRkYzCisgICAgI3VuZGVmIEZGXzAKKyAgICAjdW5kZWYgRkZfMQorICAgICN1bmRlZiBGRl8yCisgICAgI3VuZGVmIEZGXzMKIAogICAgIC8qIHN0b3JlICovCiAgICAgc2hhMS0+c3RhdGVbMF0gPSBzaGExLT5zdGF0ZVswXSArIGE7CkBAIC0yMDMsOSArMjAzLDkgQEAKICAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQogKi8KIHZvaWQgc2hhMV9wcm9jZXNzKHN0cnVjdCBzaGExX3N0YXRlICpzaGExLAotICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pCisgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgUHlfc3NpemVfdCBpbmxlbikKIHsKLSAgICB1bnNpZ25lZCBsb25nIG47CisgICAgUHlfc3NpemVfdCBuOwogCiAgICAgYXNzZXJ0KHNoYTEgIT0gTlVMTCk7CiAgICAgYXNzZXJ0KGluICE9IE5VTEwpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKaW5kZXggNzA1YjMxYS4uODYxNzIxMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCkBAIC0yNjUsOSArMjY1LDkgQEAKIC8qIHVwZGF0ZSB0aGUgU0hBIGRpZ2VzdCAqLwogCiBzdGF0aWMgdm9pZAotc2hhX3VwZGF0ZShTSEFvYmplY3QgKnNoYV9pbmZvLCBTSEFfQllURSAqYnVmZmVyLCBpbnQgY291bnQpCitzaGFfdXBkYXRlKFNIQW9iamVjdCAqc2hhX2luZm8sIFNIQV9CWVRFICpidWZmZXIsIFB5X3NzaXplX3QgY291bnQpCiB7Ci0gICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFNIQV9JTlQzMiBjbG87CiAKICAgICBjbG8gPSBzaGFfaW5mby0+Y291bnRfbG8gKyAoKFNIQV9JTlQzMikgY291bnQgPDwgMyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jIGIvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYwppbmRleCBjNDAzZWQ2Li4wZmFhZjVjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKQEAgLTI5MSw5ICsyOTEsOSBAQAogLyogdXBkYXRlIHRoZSBTSEEgZGlnZXN0ICovCiAKIHN0YXRpYyB2b2lkCi1zaGE1MTJfdXBkYXRlKFNIQW9iamVjdCAqc2hhX2luZm8sIFNIQV9CWVRFICpidWZmZXIsIGludCBjb3VudCkKK3NoYTUxMl91cGRhdGUoU0hBb2JqZWN0ICpzaGFfaW5mbywgU0hBX0JZVEUgKmJ1ZmZlciwgUHlfc3NpemVfdCBjb3VudCkKIHsKLSAgICBpbnQgaTsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgU0hBX0lOVDMyIGNsbzsKIAogICAgIGNsbyA9IHNoYV9pbmZvLT5jb3VudF9sbyArICgoU0hBX0lOVDMyKSBjb3VudCA8PCAzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IDE0Mjk3NzAuLjAwYTgzYjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtNCw3ICs0LDYgQEAKIC8qIFhYWCBTaWduYWxzIHNob3VsZCBiZSByZWNvcmRlZCBwZXIgdGhyZWFkLCBub3cgd2UgaGF2ZSB0aHJlYWQgc3RhdGUuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJpbnRyY2hlY2suaCIKIAogI2lmZGVmIE1TX1dJTkRPV1MKICNpbmNsdWRlIDxXaW5kb3dzLmg+CkBAIC0xMyw5ICsxMiwxMiBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfU0lHTkFMX0gKICNpbmNsdWRlIDxzaWduYWwuaD4KLQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgogI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKQEAgLTg0MSw2ICs4NDMsMTggQEAKICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiSXRpbWVyRXJyb3IiLCBJdGltZXJFcnJvcik7CiAjZW5kaWYKIAorI2lmZGVmIENUUkxfQ19FVkVOVAorICAgIHggPSBQeUxvbmdfRnJvbUxvbmcoQ1RSTF9DX0VWRU5UKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ1RSTF9DX0VWRU5UIiwgeCk7CisgICAgUHlfREVDUkVGKHgpOworI2VuZGlmCisKKyNpZmRlZiBDVFJMX0JSRUFLX0VWRU5UCisgICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhDVFJMX0JSRUFLX0VWRU5UKTsKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiQ1RSTF9CUkVBS19FVkVOVCIsIHgpOworICAgIFB5X0RFQ1JFRih4KTsKKyNlbmRpZgorCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICBtID0gTlVMTDsKQEAgLTk0OCw3ICs5NjIsNyBAQAogewogICAgIFB5T2JqZWN0ICptID0gUHlJbml0X3NpZ25hbCgpOwogICAgIGlmIChtKSB7Ci0gICAgICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbihtLCAic2lnbmFsIiwgInNpZ25hbCIpOworICAgICAgICBfUHlJbXBvcnRfRml4dXBCdWlsdGluKG0sICJzaWduYWwiKTsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgIH0KIH0KQEAgLTk3Nyw2ICs5OTEsNyBAQAogUHlPU19BZnRlckZvcmsodm9pZCkKIHsKICNpZmRlZiBXSVRIX1RIUkVBRAorICAgIF9QeUdJTFN0YXRlX1JlaW5pdCgpOwogICAgIFB5RXZhbF9SZUluaXRUaHJlYWRzKCk7CiAgICAgbWFpbl90aHJlYWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAgICAgbWFpbl9waWQgPSBnZXRwaWQoKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDVlOTExZTAuLmUyZmRiNWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtNDc2LDYgKzQ3NiwxNyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisjaWZkZWYgTVNfV0lORE9XUworI2lmbmRlZiBXU0FFQUdBSU4KKyNkZWZpbmUgV1NBRUFHQUlOIFdTQUVXT1VMREJMT0NLCisjZW5kaWYKKyNkZWZpbmUgQ0hFQ0tfRVJSTk8oZXhwZWN0ZWQpIFwKKyAgICAoV1NBR2V0TGFzdEVycm9yKCkgPT0gV1NBICMjIGV4cGVjdGVkKQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfRVJSTk8oZXhwZWN0ZWQpIFwKKyAgICAoZXJybm8gPT0gZXhwZWN0ZWQpCisjZW5kaWYKKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gdG8gcmFpc2UgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIGVycm5vCiAgICBhbmQgcmV0dXJuIGEgTlVMTCBwb2ludGVyIGZyb20gYSBmdW5jdGlvbi4gKi8KIApAQCAtNjA2LDYgKzYxNywxMiBAQAogI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgaW50IGRlbGF5X2ZsYWc7CiAjZW5kaWYKKyNpZmRlZiBTT0NLX05PTkJMT0NLCisgICAgaWYgKGJsb2NrKQorICAgICAgICBzLT5zb2NrX3R5cGUgJj0gKH5TT0NLX05PTkJMT0NLKTsKKyAgICBlbHNlCisgICAgICAgIHMtPnNvY2tfdHlwZSB8PSBTT0NLX05PTkJMT0NLOworI2VuZGlmCiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZuZGVmIE1TX1dJTkRPV1MKQEAgLTYzOSw3ICs2NTYsNyBAQAogICAgYWZ0ZXIgdGhleSd2ZSByZWFjcXVpcmVkIHRoZSBpbnRlcnByZXRlciBsb2NrLgogICAgUmV0dXJucyAxIG9uIHRpbWVvdXQsIC0xIG9uIGVycm9yLCAwIG90aGVyd2lzZS4gKi8KIHN0YXRpYyBpbnQKLWludGVybmFsX3NlbGVjdChQeVNvY2tldFNvY2tPYmplY3QgKnMsIGludCB3cml0aW5nKQoraW50ZXJuYWxfc2VsZWN0X2V4KFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IHdyaXRpbmcsIGRvdWJsZSBpbnRlcnZhbCkKIHsKICAgICBpbnQgbjsKIApAQCAtNjUxLDYgKzY2OCwxMCBAQAogICAgIGlmIChzLT5zb2NrX2ZkIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICAvKiBIYW5kbGluZyB0aGlzIGNvbmRpdGlvbiBoZXJlIHNpbXBsaWZpZXMgdGhlIHNlbGVjdCBsb29wcyAqLworICAgIGlmIChpbnRlcnZhbCA8IDAuMCkKKyAgICAgICAgcmV0dXJuIDE7CisKICAgICAvKiBQcmVmZXIgcG9sbCwgaWYgYXZhaWxhYmxlLCBzaW5jZSB5b3UgY2FuIHBvbGwoKSBhbnkgZmQKICAgICAgKiB3aGljaCBjYW4ndCBiZSBkb25lIHdpdGggc2VsZWN0KCkuICovCiAjaWZkZWYgSEFWRV9QT0xMCkBAIC02NjIsNyArNjgzLDcgQEAKICAgICAgICAgcG9sbGZkLmV2ZW50cyA9IHdyaXRpbmcgPyBQT0xMT1VUIDogUE9MTElOOwogCiAgICAgICAgIC8qIHMtPnNvY2tfdGltZW91dCBpcyBpbiBzZWNvbmRzLCB0aW1lb3V0IGluIG1zICovCi0gICAgICAgIHRpbWVvdXQgPSAoaW50KShzLT5zb2NrX3RpbWVvdXQgKiAxMDAwICsgMC41KTsKKyAgICAgICAgdGltZW91dCA9IChpbnQpKGludGVydmFsICogMTAwMCArIDAuNSk7CiAgICAgICAgIG4gPSBwb2xsKCZwb2xsZmQsIDEsIHRpbWVvdXQpOwogICAgIH0KICNlbHNlCkBAIC02NzAsOCArNjkxLDggQEAKICAgICAgICAgLyogQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gc2VsZWN0ICovCiAgICAgICAgIGZkX3NldCBmZHM7CiAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHR2OwotICAgICAgICB0di50dl9zZWMgPSAoaW50KXMtPnNvY2tfdGltZW91dDsKLSAgICAgICAgdHYudHZfdXNlYyA9IChpbnQpKChzLT5zb2NrX3RpbWVvdXQgLSB0di50dl9zZWMpICogMWU2KTsKKyAgICAgICAgdHYudHZfc2VjID0gKGludClpbnRlcnZhbDsKKyAgICAgICAgdHYudHZfdXNlYyA9IChpbnQpKChpbnRlcnZhbCAtIHR2LnR2X3NlYykgKiAxZTYpOwogICAgICAgICBGRF9aRVJPKCZmZHMpOwogICAgICAgICBGRF9TRVQocy0+c29ja19mZCwgJmZkcyk7CiAKQEAgLTY5Miw2ICs3MTMsNTMgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAoraW50ZXJuYWxfc2VsZWN0KFB5U29ja2V0U29ja09iamVjdCAqcywgaW50IHdyaXRpbmcpCit7CisgICAgcmV0dXJuIGludGVybmFsX3NlbGVjdF9leChzLCB3cml0aW5nLCBzLT5zb2NrX3RpbWVvdXQpOworfQorCisvKgorICAgVHdvIG1hY3JvcyBmb3IgYXV0b21hdGljIHJldHJ5IG9mIHNlbGVjdCgpIGluIGNhc2Ugb2YgZmFsc2UgcG9zaXRpdmVzCisgICAoZm9yIGV4YW1wbGUsIHNlbGVjdCgpIGNvdWxkIGluZGljYXRlIGEgc29ja2V0IGlzIHJlYWR5IGZvciByZWFkaW5nCisgICAgYnV0IHRoZSBkYXRhIHRoZW4gZGlzY2FyZGVkIGJ5IHRoZSBPUyBiZWNhdXNlIG9mIGEgd3JvbmcgY2hlY2tzdW0pLgorICAgSGVyZSBpcyBhbiBleGFtcGxlIG9mIHVzZToKKworICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOworICAgIGlmICghdGltZW91dCkKKyAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIGlmICh0aW1lb3V0ID09IDEpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgRU5EX1NFTEVDVF9MT09QKHMpCisqLworCisjZGVmaW5lIEJFR0lOX1NFTEVDVF9MT09QKHMpIFwKKyAgICB7IFwKKyAgICAgICAgX1B5VGltZV90aW1ldmFsIG5vdywgZGVhZGxpbmUgPSB7MCwgMH07IFwKKyAgICAgICAgZG91YmxlIGludGVydmFsID0gcy0+c29ja190aW1lb3V0OyBcCisgICAgICAgIGludCBoYXNfdGltZW91dCA9IHMtPnNvY2tfdGltZW91dCA+IDAuMDsgXAorICAgICAgICBpZiAoaGFzX3RpbWVvdXQpIHsgXAorICAgICAgICAgICAgX1B5VGltZV9nZXR0aW1lb2ZkYXkoJm5vdyk7IFwKKyAgICAgICAgICAgIGRlYWRsaW5lID0gbm93OyBcCisgICAgICAgICAgICBfUHlUaW1lX0FERF9TRUNPTkRTKGRlYWRsaW5lLCBzLT5zb2NrX3RpbWVvdXQpOyBcCisgICAgICAgIH0gXAorICAgICAgICB3aGlsZSAoMSkgeyBcCisgICAgICAgICAgICBlcnJubyA9IDA7IFwKKworI2RlZmluZSBFTkRfU0VMRUNUX0xPT1AocykgXAorICAgICAgICAgICAgaWYgKCFoYXNfdGltZW91dCB8fCBcCisgICAgICAgICAgICAgICAgKCFDSEVDS19FUlJOTyhFV09VTERCTE9DSykgJiYgIUNIRUNLX0VSUk5PKEVBR0FJTikpKSBcCisgICAgICAgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZub3cpOyBcCisgICAgICAgICAgICBpbnRlcnZhbCA9IF9QeVRpbWVfSU5URVJWQUwobm93LCBkZWFkbGluZSk7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisKIC8qIEluaXRpYWxpemUgYSBuZXcgc29ja2V0IG9iamVjdC4gKi8KIAogc3RhdGljIGRvdWJsZSBkZWZhdWx0dGltZW91dCA9IC0xLjA7IC8qIERlZmF1bHQgdGltZW91dCBmb3IgbmV3IHNvY2tldHMgKi8KQEAgLTcwNCwxMiArNzcyLDE4IEBACiAgICAgcy0+c29ja19mYW1pbHkgPSBmYW1pbHk7CiAgICAgcy0+c29ja190eXBlID0gdHlwZTsKICAgICBzLT5zb2NrX3Byb3RvID0gcHJvdG87Ci0gICAgcy0+c29ja190aW1lb3V0ID0gZGVmYXVsdHRpbWVvdXQ7CiAKICAgICBzLT5lcnJvcmhhbmRsZXIgPSAmc2V0X2Vycm9yOwotCi0gICAgaWYgKGRlZmF1bHR0aW1lb3V0ID49IDAuMCkKLSAgICAgICAgaW50ZXJuYWxfc2V0YmxvY2tpbmcocywgMCk7CisjaWZkZWYgU09DS19OT05CTE9DSworICAgIGlmICh0eXBlICYgU09DS19OT05CTE9DSykKKyAgICAgICAgcy0+c29ja190aW1lb3V0ID0gMC4wOworICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcy0+c29ja190aW1lb3V0ID0gZGVmYXVsdHRpbWVvdXQ7CisgICAgICAgIGlmIChkZWZhdWx0dGltZW91dCA+PSAwLjApCisgICAgICAgICAgICBpbnRlcm5hbF9zZXRibG9ja2luZyhzLCAwKTsKKyAgICB9CiAKIH0KIApAQCAtMTMzMiw5ICsxNDA2LDkgQEAKICAgICAgICAgewogICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2hjaSAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfaGNpICopYWRkcl9yZXQ7CiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0JCQljaGFyICpzdHJhZGRyID0gUHlCeXRlc19BU19TVFJJTkcoYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHJhZGRyID0gUHlCeXRlc19BU19TVFJJTkcoYXJncyk7CiAKLQkJCV9CVF9IQ0lfTUVNQihhZGRyLCBmYW1pbHkpID0gQUZfQkxVRVRPT1RIOworICAgICAgICAgICAgICAgICAgICAgICAgX0JUX0hDSV9NRU1CKGFkZHIsIGZhbWlseSkgPSBBRl9CTFVFVE9PVEg7CiAgICAgICAgICAgICBpZiAoc3RyYWRkciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF9lcnJvciwgImdldHNvY2thZGRyYXJnOiAiCiAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBmb3JtYXQiKTsKQEAgLTE2MDIsNyArMTY3Niw2IEBACiAgICAgUHlPYmplY3QgKmFkZHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogICAgIGludCB0aW1lb3V0OwotCiAgICAgaWYgKCFnZXRzb2NrYWRkcmxlbihzLCAmYWRkcmxlbikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG1lbXNldCgmYWRkcmJ1ZiwgMCwgYWRkcmxlbik7CkBAIC0xNjEwLDE2ICsxNjgzLDE5IEBACiAgICAgaWYgKCFJU19TRUxFQ1RBQkxFKHMpKQogICAgICAgICByZXR1cm4gc2VsZWN0X2Vycm9yKCk7CiAKKyAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDApOwotICAgIGlmICghdGltZW91dCkKKyAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKKyAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgICAgbmV3ZmQgPSBhY2NlcHQocy0+c29ja19mZCwgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOworICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIEVORF9TRUxFQ1RfTE9PUChzKQogCiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CkBAIC0xODg3LDYgKzE5NjMsMjEgQEAKIFxuXAogQ2xvc2UgdGhlIHNvY2tldC4gIEl0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3NvY2tfZGV0YWNoKFB5U29ja2V0U29ja09iamVjdCAqcykKK3sKKyAgICBTT0NLRVRfVCBmZCA9IHMtPnNvY2tfZmQ7CisgICAgcy0+c29ja19mZCA9IC0xOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNvY2tldF90KGZkKTsKK30KKworUHlEb2NfU1RSVkFSKGRldGFjaF9kb2MsCisiZGV0YWNoKClcblwKK1xuXAorQ2xvc2UgdGhlIHNvY2tldCBvYmplY3Qgd2l0aG91dCBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci5cCitUaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcCitjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQuIik7CisKIHN0YXRpYyBpbnQKIGludGVybmFsX2Nvbm5lY3QoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBhZGRybGVuLAogICAgICAgICAgICAgICAgICBpbnQgKnRpbWVvdXRwKQpAQCAtMjE1NSw2ICsyMjQ2LDcgQEAKICAqIGFsc28gcG9zc2libGUgdGhhdCB3ZSByZXR1cm4gYSBudW1iZXIgb2YgYnl0ZXMgc21hbGxlciB0aGFuIHRoZSByZXF1ZXN0CiAgKiBieXRlcy4KICAqLworCiBzdGF0aWMgUHlfc3NpemVfdAogc29ja19yZWN2X2d1dHMoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBjaGFyKiBjYnVmLCBQeV9zc2l6ZV90IGxlbiwgaW50IGZsYWdzKQogewpAQCAtMjE3NSw4ICsyMjY3LDkgQEAKICAgICB9CiAKICNpZm5kZWYgX19WTVMKKyAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDApOworICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkKICAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwpAQCAtMjE4NSw2ICsyMjc4LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgRU5EX1NFTEVDVF9MT09QKHMpCiAgICAgaWYgKG91dGxlbiA8IDApIHsKICAgICAgICAgLyogTm90ZTogdGhlIGNhbGwgdG8gZXJyb3JoYW5kbGVyKCkgQUxXQVlTIGluZGlyZWN0bHkgcmV0dXJuZWQKICAgICAgICAgICAgTlVMTCwgc28gaWdub3JlIGl0cyByZXR1cm4gdmFsdWUgKi8KQEAgLTIyMDYsMTYgKzIzMDAsMTggQEAKICAgICAgICAgICAgIHNlZ21lbnQgPSByZW1haW5pbmc7CiAgICAgICAgIH0KIAorICAgICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3QocywgMCk7CisgICAgICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgICAgICBpZiAoIXRpbWVvdXQpCiAgICAgICAgICAgICBucmVhZCA9IHJlY3Yocy0+c29ja19mZCwgcmVhZF9idWYsIHNlZ21lbnQsIGZsYWdzKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQogICAgICAgICBpZiAodGltZW91dCA9PSAxKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICBFTkRfU0VMRUNUX0xPT1AocykKKwogICAgICAgICBpZiAobnJlYWQgPCAwKSB7CiAgICAgICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTIzNzYsOSArMjQ3MiwxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDApOworICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgewogI2lmbmRlZiBNU19XSU5ET1dTCiAjaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCkBAIC0yMzk5LDYgKzI0OTYsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBFTkRfU0VMRUNUX0xPT1AocykKICAgICBpZiAobiA8IDApIHsKICAgICAgICAgcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI1MzYsOCArMjYzNCw5IEBACiAgICAgYnVmID0gcGJ1Zi5idWY7CiAgICAgbGVuID0gcGJ1Zi5sZW47CiAKKyAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0KHMsIDEpOworICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMSwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkKICNpZmRlZiBfX1ZNUwogICAgICAgICBuID0gc2VuZHNlZ21lbnRlZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwpAQCAtMjU0NSwxMyArMjY0NCwxNCBAQAogICAgICAgICBuID0gc2VuZChzLT5zb2NrX2ZkLCBidWYsIGxlbiwgZmxhZ3MpOwogI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwotCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF90aW1lb3V0LCAidGltZWQgb3V0Iik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBFTkRfU0VMRUNUX0xPT1AocykKKworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIGlmIChuIDwgMCkKICAgICAgICAgcmV0dXJuIHMtPmVycm9yaGFuZGxlcigpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qobik7CkBAIC0yNjgyLDE3ICsyNzgyLDIwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3QocywgMSk7CisgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7CiAgICAgaWYgKCF0aW1lb3V0KQogICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzb2NrZXRfdGltZW91dCwgInRpbWVkIG91dCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgRU5EX1NFTEVDVF9MT09QKHMpCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CiAgICAgaWYgKG4gPCAwKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKQEAgLTI3MzYsMjQgKzI4MzksNDMgQEAKIHNvY2tfaW9jdGwoUHlTb2NrZXRTb2NrT2JqZWN0ICpzLCBQeU9iamVjdCAqYXJnKQogewogICAgIHVuc2lnbmVkIGxvbmcgY21kID0gU0lPX1JDVkFMTDsKLSAgICB1bnNpZ25lZCBpbnQgb3B0aW9uID0gUkNWQUxMX09OOworICAgIFB5T2JqZWN0ICphcmdPOwogICAgIERXT1JEIHJlY3Y7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia0k6aW9jdGwiLCAmY21kLCAmb3B0aW9uKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJnLCAia086aW9jdGwiLCAmY21kLCAmYXJnTykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFdTQUlvY3RsKHMtPnNvY2tfZmQsIGNtZCwgJm9wdGlvbiwgc2l6ZW9mKG9wdGlvbiksCi0gICAgICAgICAgICAgICAgIE5VTEwsIDAsICZyZWN2LCBOVUxMLCBOVUxMKSA9PSBTT0NLRVRfRVJST1IpIHsKLSAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworICAgIHN3aXRjaCAoY21kKSB7CisgICAgY2FzZSBTSU9fUkNWQUxMOiB7CisgICAgICAgIHVuc2lnbmVkIGludCBvcHRpb24gPSBSQ1ZBTExfT047CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmcsICJrSTppb2N0bCIsICZjbWQsICZvcHRpb24pKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChXU0FJb2N0bChzLT5zb2NrX2ZkLCBjbWQsICZvcHRpb24sIHNpemVvZihvcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZyZWN2LCBOVUxMLCBOVUxMKSA9PSBTT0NLRVRfRVJST1IpIHsKKyAgICAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVjdik7IH0KKyAgICBjYXNlIFNJT19LRUVQQUxJVkVfVkFMUzogeworICAgICAgICBzdHJ1Y3QgdGNwX2tlZXBhbGl2ZSBrYTsKKyAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZywgImsoa2trKTppb2N0bCIsICZjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAma2Eub25vZmYsICZrYS5rZWVwYWxpdmV0aW1lLCAma2Eua2VlcGFsaXZlaW50ZXJ2YWwpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChXU0FJb2N0bChzLT5zb2NrX2ZkLCBjbWQsICZrYSwgc2l6ZW9mKGthKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmcmVjdiwgTlVMTCwgTlVMTCkgPT0gU09DS0VUX0VSUk9SKSB7CisgICAgICAgICAgICByZXR1cm4gc2V0X2Vycm9yKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlY3YpOyB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIGlvY3RsIGNvbW1hbmQgJWQiLCBjbWQpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlY3YpOwogfQogUHlEb2NfU1RSVkFSKHNvY2tfaW9jdGxfZG9jLAogImlvY3RsKGNtZCwgb3B0aW9uKSAtPiBsb25nXG5cCiBcblwKLUNvbnRyb2wgdGhlIHNvY2tldCB3aXRoIFdTQUlvY3RsIHN5c2NhbGwuIEN1cnJlbnRseSBvbmx5IHNvY2tldC5TSU9fUkNWQUxMXG5cCi1pcyBzdXBwb3J0ZWQgYXMgY29udHJvbC4gT3B0aW9ucyBtdXN0IGJlIG9uZSBvZiB0aGUgc29ja2V0LlJDVkFMTF8qXG5cCi1jb25zdGFudHMuIik7CitDb250cm9sIHRoZSBzb2NrZXQgd2l0aCBXU0FJb2N0bCBzeXNjYWxsLiBDdXJyZW50bHkgc3VwcG9ydGVkICdjbWQnIHZhbHVlcyBhcmVcblwKK1NJT19SQ1ZBTEw6ICAnb3B0aW9uJyBtdXN0IGJlIG9uZSBvZiB0aGUgc29ja2V0LlJDVkFMTF8qIGNvbnN0YW50cy5cblwKK1NJT19LRUVQQUxJVkVfVkFMUzogICdvcHRpb24nIGlzIGEgdHVwbGUgb2YgKG9ub2ZmLCB0aW1lb3V0LCBpbnRlcnZhbCkuIik7CiAKICNlbmRpZgogCkBAIC0yNzcwLDYgKzI4OTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RfZG9jfSwKICAgICB7ImNvbm5lY3RfZXgiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKXNvY2tfY29ubmVjdF9leCwgTUVUSF9PLAogICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RfZXhfZG9jfSwKKyAgICB7ImRldGFjaCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNvY2tfZGV0YWNoLCBNRVRIX05PQVJHUywKKyAgICAgICAgICAgICAgICAgICAgICBkZXRhY2hfZG9jfSwKICAgICB7ImZpbGVubyIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNvY2tfZmlsZW5vLCBNRVRIX05PQVJHUywKICAgICAgICAgICAgICAgICAgICAgICBmaWxlbm9fZG9jfSwKICNpZmRlZiBIQVZFX0dFVFBFRVJOQU1FCkBAIC0yODI4LDggKzI5NTIsMjAgQEAKIHN0YXRpYyB2b2lkCiBzb2NrX2RlYWxsb2MoUHlTb2NrZXRTb2NrT2JqZWN0ICpzKQogewotICAgIGlmIChzLT5zb2NrX2ZkICE9IC0xKQorICAgIGlmIChzLT5zb2NrX2ZkICE9IC0xKSB7CisgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YjsKKyAgICAgICAgUHlfc3NpemVfdCBvbGRfcmVmY291bnQgPSBQeV9SRUZDTlQocyk7CisgICAgICAgICsrUHlfUkVGQ05UKHMpOworICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsLCAmdGIpOworICAgICAgICBpZiAoUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmNsb3NlZCAlUiIsIHMpKQorICAgICAgICAgICAgLyogU3B1cmlvdXMgZXJyb3JzIGNhbiBhcHBlYXIgYXQgc2h1dGRvd24gKi8KKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1dhcm5pbmcpKQorICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZSgoUHlPYmplY3QgKikgcyk7CisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKICAgICAgICAgKHZvaWQpIFNPQ0tFVENMT1NFKHMtPnNvY2tfZmQpOworICAgICAgICBQeV9SRUZDTlQocykgPSBvbGRfcmVmY291bnQ7CisgICAgfQogICAgIFB5X1RZUEUocyktPnRwX2ZyZWUoKFB5T2JqZWN0ICopcyk7CiB9CiAKQEAgLTI5NjgsNiArMzEwNCwzMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNvY2tldF9nZXRob3N0bmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgLyogRG9uJ3QgdXNlIHdpbnNvY2sncyBnZXRob3N0bmFtZSwgYXMgdGhpcyByZXR1cm5zIHRoZSBBTlNJCisgICAgICAgdmVyc2lvbiBvZiB0aGUgaG9zdG5hbWUsIHdoZXJlYXMgd2UgbmVlZCBhIFVuaWNvZGUgc3RyaW5nLgorICAgICAgIE90aGVyd2lzZSwgZ2V0aG9zdG5hbWUgYXBwYXJlbnRseSBhbHNvIHJldHVybnMgdGhlIEROUyBuYW1lLiAqLworICAgIHdjaGFyX3QgYnVmW01BWF9DT01QVVRFUk5BTUVfTEVOR1RIICsgMV07CisgICAgRFdPUkQgc2l6ZSA9IHNpemVvZihidWYpIC8gc2l6ZW9mKHdjaGFyX3QpOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgaWYgKCFHZXRDb21wdXRlck5hbWVFeFcoQ29tcHV0ZXJOYW1lUGh5c2ljYWxEbnNIb3N0bmFtZSwgYnVmLCAmc2l6ZSkpIHsKKyAgICAgICAgaWYgKEdldExhc3RFcnJvcigpID09IEVSUk9SX01PUkVfREFUQSkgeworICAgICAgICAgICAgLyogTVNETiBzYXlzIHRoaXMgbWF5IG9jY3VyICJiZWNhdXNlIEROUyBhbGxvd3MgbG9uZ2VyIG5hbWVzICovCisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSAvKiBYWFg6IEknbSBub3Qgc3VyZSBob3cgdG8gaGFuZGxlIHRoaXMgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOworICAgICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHNpemUgLSAxKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgaWYgKEdldENvbXB1dGVyTmFtZUV4VyhDb21wdXRlck5hbWVQaHlzaWNhbERuc0hvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQVNfVU5JQ09ERShyZXN1bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2l6ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19XaW5kb3dzRXJyb3IsIEdldExhc3RFcnJvcigpKTsKKyAgICB9CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tVW5pY29kZShidWYsIHNpemUpOyAgICAgICAgICAgIAorI2Vsc2UKICAgICBjaGFyIGJ1ZlsxMDI0XTsKICAgICBpbnQgcmVzOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTI5NzcsNiArMzEzOCw3IEBACiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKICAgICBidWZbc2l6ZW9mIGJ1ZiAtIDFdID0gJ1wwJzsKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoYnVmKTsKKyNlbmRpZgogfQogCiBQeURvY19TVFJWQVIoZ2V0aG9zdG5hbWVfZG9jLApAQCAtMjk5MywxMiArMzE1NSwxNiBAQAogewogICAgIGNoYXIgKm5hbWU7CiAgICAgc29ja19hZGRyX3QgYWRkcmJ1ZjsKKyAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRob3N0YnluYW1lIiwgJm5hbWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6Z2V0aG9zdGJ5bmFtZSIsICJpZG5hIiwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2V0aXBhZGRyKG5hbWUsIFNBUzJTQSgmYWRkcmJ1ZiksICBzaXplb2YoYWRkcmJ1ZiksIEFGX0lORVQpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIG1ha2VpcGFkZHIoU0FTMlNBKCZhZGRyYnVmKSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgcmV0ID0gbWFrZWlwYWRkcihTQVMyU0EoJmFkZHJidWYpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CitmaW5hbGx5OgorICAgIFB5TWVtX0ZyZWUobmFtZSk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogUHlEb2NfU1RSVkFSKGdldGhvc3RieW5hbWVfZG9jLApAQCAtMzE0OSw3ICszMzE1LDcgQEAKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKICNlbmRpZgogICAgIHN0cnVjdCBzb2NrYWRkciAqc2E7Ci0gICAgUHlPYmplY3QgKnJldDsKKyAgICBQeU9iamVjdCAqcmV0ID0gTlVMTDsKICNpZmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgogICAgIHN0cnVjdCBob3N0ZW50IGhwX2FsbG9jYXRlZDsKICNpZmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRwpAQCAtMzE2NCwxMCArMzMzMCwxMCBAQAogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9HRVRIT1NUQllOQU1FX1IgKi8KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRob3N0YnluYW1lX2V4IiwgJm5hbWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6Z2V0aG9zdGJ5bmFtZV9leCIsICJpZG5hIiwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoc2V0aXBhZGRyKG5hbWUsIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpLCBBRl9JTkVUKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SCiAjaWYgICBkZWZpbmVkKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzZfQVJHKQpAQCAtMzE5Nyw2ICszMzYzLDggQEAKICNpZmRlZiBVU0VfR0VUSE9TVEJZTkFNRV9MT0NLCiAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKG5ldGRiX2xvY2spOwogI2VuZGlmCitmaW5hbGx5OgorICAgIFB5TWVtX0ZyZWUobmFtZSk7CiAgICAgcmV0dXJuIHJldDsKIH0KIApAQCAtMzIyMSw3ICszMzg5LDcgQEAKICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyOwogICAgIGNoYXIgKmlwX251bTsKICAgICBzdHJ1Y3QgaG9zdGVudCAqaDsKLSAgICBQeU9iamVjdCAqcmV0OworICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogI2lmZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SCiAgICAgc3RydWN0IGhvc3RlbnQgaHBfYWxsb2NhdGVkOwogI2lmZGVmIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHCkBAIC0zMjQzLDExICszNDExLDExIEBACiAgICAgaW50IGFsOwogICAgIGludCBhZjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpnZXRob3N0YnlhZGRyIiwgJmlwX251bSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJldDpnZXRob3N0YnlhZGRyIiwgImlkbmEiLCAmaXBfbnVtKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYWYgPSBBRl9VTlNQRUM7CiAgICAgaWYgKHNldGlwYWRkcihpcF9udW0sIHNhLCBzaXplb2YoYWRkciksIGFmKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgYWYgPSBzYS0+c2FfZmFtaWx5OwogICAgIGFwID0gTlVMTDsKICAgICBhbCA9IDA7CkBAIC0zMjY0LDcgKzM0MzIsNyBAQAogI2VuZGlmCiAgICAgZGVmYXVsdDoKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHNvY2tldF9lcnJvciwgInVuc3VwcG9ydGVkIGFkZHJlc3MgZmFtaWx5Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUgpAQCAtMzI5MSw2ICszNDU5LDggQEAKICNpZmRlZiBVU0VfR0VUSE9TVEJZTkFNRV9MT0NLCiAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKG5ldGRiX2xvY2spOwogI2VuZGlmCitmaW5hbGx5OgorICAgIFB5TWVtX0ZyZWUoaXBfbnVtKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0zODE4LDggKzM5ODgsMTAgQEAKIAogLypBUkdTVVNFRCovCiBzdGF0aWMgUHlPYmplY3QgKgotc29ja2V0X2dldGFkZHJpbmZvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3NvY2tldF9nZXRhZGRyaW5mbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7CisgICAgc3RhdGljIGNoYXIqIGt3bmFtZXNbXSA9IHsiaG9zdCIsICJwb3J0IiwgImZhbWlseSIsICJ0eXBlIiwgInByb3RvIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAwfTsKICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXM7CiAgICAgc3RydWN0IGFkZHJpbmZvICpyZXMwID0gTlVMTDsKICAgICBQeU9iamVjdCAqaG9iaiA9IE5VTEw7CkBAIC0zODMzLDggKzQwMDUsOCBAQAogCiAgICAgZmFtaWx5ID0gc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKICAgICBmYW1pbHkgPSBBRl9VTlNQRUM7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPT3xpaWlpOmdldGFkZHJpbmZvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmhvYmosICZwb2JqLCAmZmFtaWx5LCAmc29ja3R5cGUsCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT098aWlpaTpnZXRhZGRyaW5mbyIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBrd25hbWVzLCAmaG9iaiwgJnBvYmosICZmYW1pbHksICZzb2NrdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3RvY29sLCAmZmxhZ3MpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTM4NjEsOCArNDAzMywxMCBAQAogICAgICAgICBwcHRyID0gcGJ1ZjsKICAgICB9IGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhwb2JqKSkgewogICAgICAgICBwcHRyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhwb2JqKTsKKyAgICAgICAgaWYgKHBwdHIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyOwogICAgIH0gZWxzZSBpZiAoUHlCeXRlc19DaGVjayhwb2JqKSkgewotICAgICAgICBwcHRyID0gUHlCeXRlc19Bc1N0cmluZyhwb2JqKTsKKyAgICAgICAgcHB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHBvYmopOwogICAgIH0gZWxzZSBpZiAocG9iaiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIHBwdHIgPSAoY2hhciAqKU5VTEw7CiAgICAgfSBlbHNlIHsKQEAgLTM5NTIsNiArNDEyNiw3IEBACiAgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CiAgICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwogICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsgICAgIC8qIG1ha2UgbnVtZXJpYyBwb3J0IGhhcHB5ICovCisgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsgICAgLyogZG9uJ3QgZG8gYW55IG5hbWUgcmVzb2x1dGlvbiAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBBQ1FVSVJFX0dFVEFERFJJTkZPX0xPQ0sKICAgICBlcnJvciA9IGdldGFkZHJpbmZvKGhvc3RwLCBwYnVmLCAmaGludHMsICZyZXMpOwpAQCAtNDEwMSw4ICs0Mjc2LDggQEAKICAgICB7ImluZXRfbnRvcCIsICAgICAgICAgICAgICAgc29ja2V0X2luZXRfbnRvcCwKICAgICAgTUVUSF9WQVJBUkdTLCBpbmV0X250b3BfZG9jfSwKICNlbmRpZgotICAgIHsiZ2V0YWRkcmluZm8iLCAgICAgICAgICAgICBzb2NrZXRfZ2V0YWRkcmluZm8sCi0gICAgIE1FVEhfVkFSQVJHUywgZ2V0YWRkcmluZm9fZG9jfSwKKyAgICB7ImdldGFkZHJpbmZvIiwgICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXNvY2tldF9nZXRhZGRyaW5mbywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZ2V0YWRkcmluZm9fZG9jfSwKICAgICB7ImdldG5hbWVpbmZvIiwgICAgICAgICAgICAgc29ja2V0X2dldG5hbWVpbmZvLAogICAgICBNRVRIX1ZBUkFSR1MsIGdldG5hbWVpbmZvX2RvY30sCiAgICAgeyJnZXRkZWZhdWx0dGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilzb2NrZXRfZ2V0ZGVmYXVsdHRpbWVvdXQsCkBAIC00MTk2LDYgKzQzNzEsNyBAQAogUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlQVBJID0KIHsKICAgICAmc29ja190eXBlLAorICAgIE5VTEwsCiAgICAgTlVMTAogfTsKIApAQCAtNDI2Myw2ICs0NDM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXRfZXJyb3IsIE5VTEwpOwogICAgIGlmIChzb2NrZXRfdGltZW91dCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeVNvY2tldE1vZHVsZUFQSS50aW1lb3V0X2Vycm9yID0gc29ja2V0X3RpbWVvdXQ7CiAgICAgUHlfSU5DUkVGKHNvY2tldF90aW1lb3V0KTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInRpbWVvdXQiLCBzb2NrZXRfdGltZW91dCk7CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZzb2NrX3R5cGUpOwpAQCAtNDUyNiw2ICs0NzAzLDEyIEBACiAjaWYgZGVmaW5lZChTT0NLX1JETSkKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19SRE0iLCBTT0NLX1JETSk7CiAjZW5kaWYKKyNpZmRlZiBTT0NLX0NMT0VYRUMKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19DTE9FWEVDIiwgU09DS19DTE9FWEVDKTsKKyNlbmRpZgorI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19OT05CTE9DSyIsIFNPQ0tfTk9OQkxPQ0spOworI2VuZGlmCiAKICNpZmRlZiAgU09fREVCVUcKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fREVCVUciLCBTT19ERUJVRyk7CkBAIC00NTg1LDYgKzQ3NjgsOSBAQAogI2lmZGVmICBTT19UWVBFCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1RZUEUiLCBTT19UWVBFKTsKICNlbmRpZgorI2lmZGVmICBTT19TRVRGSUIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU0VURklCIiwgU09fU0VURklCKTsKKyNlbmRpZgogCiAgICAgLyogTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdGlvbnMgZm9yICJsaXN0ZW4iICovCiAjaWZkZWYgIFNPTUFYQ09OTgpAQCAtNTEzMSwxMSArNTMxNywxNiBAQAogCiAjaWZkZWYgU0lPX1JDVkFMTAogICAgIHsKLSAgICAgICAgUHlPYmplY3QgKnRtcDsKLSAgICAgICAgdG1wID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoU0lPX1JDVkFMTCk7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlNJT19SQ1ZBTEwiLCB0bXApOworICAgICAgICBEV09SRCBjb2Rlc1tdID0ge1NJT19SQ1ZBTEwsIFNJT19LRUVQQUxJVkVfVkFMU307CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWVzW10gPSB7IlNJT19SQ1ZBTEwiLCAiU0lPX0tFRVBBTElWRV9WQUxTIn07CisgICAgICAgIGludCBpOworICAgICAgICBmb3IoaSA9IDA7IGk8c2l6ZW9mKGNvZGVzKS9zaXplb2YoKmNvZGVzKTsgKytpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG1wOworICAgICAgICAgICAgdG1wID0gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoY29kZXNbaV0pOworICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sIG5hbWVzW2ldLCB0bXApOworICAgICAgICB9CiAgICAgfQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfT0ZGIiwgUkNWQUxMX09GRik7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PTiIsIFJDVkFMTF9PTik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAppbmRleCA0ZjQyNmY1Li5mMDY0Nzk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCisrKyBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKQEAgLTE5Niw2ICsxOTYsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5VHlwZU9iamVjdCAqU29ja19UeXBlOwogICAgIFB5T2JqZWN0ICplcnJvcjsKKyAgICBQeU9iamVjdCAqdGltZW91dF9lcnJvcjsKIH0gUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0OwogCiAjZGVmaW5lIFB5U29ja2V0TW9kdWxlX0ltcG9ydE1vZHVsZUFuZEFQSSgpIFB5Q2Fwc3VsZV9JbXBvcnQoUHlTb2NrZXRfQ0FQU1VMRV9OQU1FLCAxKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zcHdkbW9kdWxlLmMgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwppbmRleCAzYTYyZmU4Li4xOTRhZTE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYwpAQCAtNCw3ICs0LDYgQEAKIC8qIEZvciBpbmZvIGFsc28gc2VlIGh0dHA6Ly93d3cudW5peHBhcGEuY29tL2luY25vdGUvcGFzc3dkLmh0bWwgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInN0cnVjdHNlcS5oIgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWZkZWYgSEFWRV9TSEFET1dfSApAQCAtNjAsOSArNTksNyBAQAogc2V0cyhQeU9iamVjdCAqdiwgaW50IGksIGNvbnN0IGNoYXIqIHZhbCkKIHsKICAgaWYgKHZhbCkgewotICAgICAgUHlPYmplY3QgKm8gPSBQeVVuaWNvZGVfRGVjb2RlKHZhbCwgc3RybGVuKHZhbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgICBQeU9iamVjdCAqbyA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQodmFsKTsKICAgICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgaSwgbyk7CiAgIH0gZWxzZSB7CiAgICAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIGksIFB5X05vbmUpOwpAQCAtMTIwLDkgKzExNyw3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6Z2V0c3BuYW0iLCAmYXJnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKChieXRlcyA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZWVzY2FwZSIpKSA9PSBOVUxMKQorICAgIGlmICgoYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KGFyZykpID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShieXRlcywgJm5hbWUsIE5VTEwpID09IC0xKQogICAgICAgICBnb3RvIG91dDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwppbmRleCAyNmUyNzY4Li5mNjIwMWU1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCkBAIC0xLDcgKzEsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogCiAjaW5jbHVkZSAiY29kZS5oIgotI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJQeXRob24tYXN0LmgiCiAjaW5jbHVkZSAic3ltdGFibGUuaCIKIApAQCAtNzEsMTEgKzcwLDcgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0dMT0JBTCIsIERFRl9HTE9CQUwpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTE9DQUwiLCBERUZfTE9DQUwpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfUEFSQU0iLCBERUZfUEFSQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfU1RBUiIsIERFRl9TVEFSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0RPVUJMRVNUQVIiLCBERUZfRE9VQkxFU1RBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9JTlRVUExFIiwgREVGX0lOVFVQTEUpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRSIsIERFRl9GUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUVfR0xPQkFMIiwgREVGX0ZSRUVfR0xPQkFMKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUVfQ0xBU1MiLCBERUZfRlJFRV9DTEFTUyk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9JTVBPUlQiLCBERUZfSU1QT1JUKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0JPVU5EIiwgREVGX0JPVU5EKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCmluZGV4IDU1MzJkMDMuLjViODY5NjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwpAQCAtMjYsNiArMjYsMTEgQEAKIAogUmV2aXNpb24gaGlzdG9yeToKIAorMjAxMC8wNC8yMCAoU2VhbiBSZWlmc2NobmVpZGVyKQorICAtIFVzZSBiYXNlbmFtZShzeXMuYXJndlswXSkgZm9yIHRoZSBkZWZhdWx0ICJpZGVudCIuCisgIC0gQXJndW1lbnRzIHRvIG9wZW5sb2coKSBhcmUgbm93IGtleXdvcmQgYXJncyBhbmQgYXJlIGFsbCBvcHRpb25hbC4KKyAgLSBzeXNsb2coKSBjYWxscyBvcGVubG9nKCkgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBjYWxsZWQuCisKIDE5OTgvMDQvMjggKFNlYW4gUmVpZnNjaG5laWRlcikKICAgLSBXaGVuIGZhY2lsaXR5IG5vdCBzcGVjaWZpZWQgdG8gc3lzbG9nKCkgbWV0aG9kLCB1c2UgZGVmYXVsdCBmcm9tIG9wZW5sb2coKQogICAgIChUaGlzIGlzIGhvdyBpdCB3YXMgY2xhaW1lZCB0byB3b3JrIGluIHRoZSBkb2N1bWVudGF0aW9uKQpAQCAtNDUsMzcgKzUwLDEwMiBAQAogLyogc3lzbG9nIG1vZHVsZSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAib3NkZWZzLmgiCiAKICNpbmNsdWRlIDxzeXNsb2cuaD4KIAogLyogIG9ubHkgb25lIGluc3RhbmNlLCBvbmx5IG9uZSBzeXNsb2csIHNvIGdsb2JhbHMgc2hvdWxkIGJlIG9rICAqLwogc3RhdGljIFB5T2JqZWN0ICpTX2lkZW50X28gPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAvKiAgaWRlbnRpZmllciwgaGVsZCBieSBvcGVubG9nKCkgICovCitzdGF0aWMgY2hhciBTX2xvZ19vcGVuID0gMDsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotc3lzbG9nX29wZW5sb2coUHlPYmplY3QgKiBzZWxmLCBQeU9iamVjdCAqIGFyZ3MpCitzeXNsb2dfZ2V0X2FyZ3Yodm9pZCkKK3sKKyAgICAvKiBGaWd1cmUgb3V0IHdoYXQgdG8gdXNlIGZvciBhcyB0aGUgcHJvZ3JhbSAiaWRlbnQiIGZvciBvcGVubG9nKCkuCisgICAgICogVGhpcyBzd2FsbG93cyBleGNlcHRpb25zIGFuZCBjb250aW51ZXMgcmF0aGVyIHRoYW4gZmFpbGluZyBvdXQsCisgICAgICogYmVjYXVzZSB0aGUgc3lzbG9nIG1vZHVsZSBjYW4gc3RpbGwgYmUgdXNlZCBiZWNhdXNlIG9wZW5sb2coMykKKyAgICAgKiBpcyBvcHRpb25hbC4KKyAgICAgKi8KKworICAgIFB5X3NzaXplX3QgYXJndl9sZW4sIHNjcmlwdGxlbjsKKyAgICBQeU9iamVjdCAqc2NyaXB0b2JqOworICAgIFB5X1VOSUNPREUgKmF0c2xhc2gsICphdHN0YXJ0OworICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7CisKKyAgICBpZiAoYXJndiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBhcmd2X2xlbiA9IFB5TGlzdF9TaXplKGFyZ3YpOworICAgIGlmIChhcmd2X2xlbiA9PSAtMSkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorICAgIGlmIChhcmd2X2xlbiA9PSAwKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBzY3JpcHRvYmogPSBQeUxpc3RfR2V0SXRlbShhcmd2LCAwKTsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhzY3JpcHRvYmopKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisgICAgc2NyaXB0bGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHNjcmlwdG9iaik7CisgICAgaWYgKHNjcmlwdGxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybihOVUxMKTsKKyAgICB9CisKKyAgICBhdHN0YXJ0ID0gUHlVbmljb2RlX0FTX1VOSUNPREUoc2NyaXB0b2JqKTsKKyAgICBhdHNsYXNoID0gUHlfVU5JQ09ERV9zdHJyY2hyKGF0c3RhcnQsIFNFUCk7CisgICAgaWYgKGF0c2xhc2gpIHsKKyAgICAgICAgcmV0dXJuKFB5VW5pY29kZV9Gcm9tVW5pY29kZShhdHNsYXNoICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRsZW4gLSAoYXRzbGFzaCAtIGF0c3RhcnQpIC0gMSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihzY3JpcHRvYmopOworICAgICAgICByZXR1cm4oc2NyaXB0b2JqKTsKKyAgICB9CisKKyAgICByZXR1cm4oTlVMTCk7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKK3N5c2xvZ19vcGVubG9nKFB5T2JqZWN0ICogc2VsZiwgUHlPYmplY3QgKiBhcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBsb25nIGxvZ29wdCA9IDA7CiAgICAgbG9uZyBmYWNpbGl0eSA9IExPR19VU0VSOwotICAgIFB5T2JqZWN0ICpuZXdfU19pZGVudF9vOwotICAgIGNvbnN0IGNoYXIgKmlkZW50OworICAgIFB5T2JqZWN0ICpuZXdfU19pZGVudF9vID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsiaWRlbnQiLCAibG9nb3B0aW9uIiwgImZhY2lsaXR5IiwgMH07CisgICAgY2hhciAqaWRlbnQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJVfGxsO2lkZW50IHN0cmluZyBbLCBsb2dvcHRpb24gWywgZmFjaWxpdHldXSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfU19pZGVudF9vLCAmbG9nb3B0LCAmZmFjaWxpdHkpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ8VWxsOm9wZW5sb2ciLCBrZXl3b3JkcywgJm5ld19TX2lkZW50X28sICZsb2dvcHQsICZmYWNpbGl0eSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvcGVubG9nKCkgZG9lcyBOT1QgbWFrZSBhIGNvcHkKLSAgICAgKiBhbmQgc3lzbG9nKCkgbGF0ZXIgdXNlcyBpdC4uIGNhbm5vdCB0cmFzaCBpdC4KLSAgICAgKi8KKyAgICBpZiAobmV3X1NfaWRlbnRfbykgeworICAgICAgICBQeV9JTkNSRUYobmV3X1NfaWRlbnRfbyk7CisgICAgfQorCisgICAgLyogIGdldCBzeXMuYXJndlswXSBvciBOVUxMIGlmIHdlIGNhbid0IGZvciBzb21lIHJlYXNvbiAgKi8KKyAgICBpZiAoIW5ld19TX2lkZW50X28pIHsKKyAgICAgICAgbmV3X1NfaWRlbnRfbyA9IHN5c2xvZ19nZXRfYXJndigpOworICAgIH0KKwogICAgIFB5X1hERUNSRUYoU19pZGVudF9vKTsKICAgICBTX2lkZW50X28gPSBuZXdfU19pZGVudF9vOwotICAgIFB5X0lOQ1JFRihTX2lkZW50X28pOwogCi0gICAgaWRlbnQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFNfaWRlbnRfbyk7Ci0gICAgaWYgKGlkZW50ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIEF0IHRoaXMgcG9pbnQsIFNfaWRlbnRfbyBzaG91bGQgYmUgSU5DUkVGKCllZC4gIG9wZW5sb2coMykgZG9lcyBub3QKKyAgICAgKiBtYWtlIGEgY29weSwgYW5kIHN5c2xvZygzKSBsYXRlciB1c2VzIGl0LiAgV2UgY2FuJ3QgZ2FyYmFnZWNvbGxlY3QgaXQKKyAgICAgKiBJZiBOVUxMLCBqdXN0IGxldCBvcGVubG9nIGZpZ3VyZSBpdCBvdXQgKHByb2JhYmx5IHVzaW5nIEMgYXJndlswXSkuCisgICAgICovCisgICAgaWYgKFNfaWRlbnRfbykgeworICAgICAgICBpZGVudCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoU19pZGVudF9vKTsKKyAgICAgICAgaWYgKGlkZW50ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBvcGVubG9nKGlkZW50LCBsb2dvcHQsIGZhY2lsaXR5KTsKKyAgICBTX2xvZ19vcGVuID0gMTsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTEwMCw2ICsxNzAsMjIgQEAKICAgICBtZXNzYWdlID0gX1B5VW5pY29kZV9Bc1N0cmluZyhtZXNzYWdlX29iamVjdCk7CiAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiAgaWYgbG9nIGlzIG5vdCBvcGVuZWQsIG9wZW4gaXQgbm93ICAqLworICAgIGlmICghU19sb2dfb3BlbikgeworICAgICAgICBQeU9iamVjdCAqb3BlbmFyZ3M7CisKKyAgICAgICAgLyogQ29udGludWUgZXZlbiBpZiBQeVR1cGxlX05ldyBmYWlscywgYmVjYXVzZSBvcGVubG9nKDMpIGlzIG9wdGlvbmFsLgorICAgICAgICAgKiBTbywgd2UgY2FuIHN0aWxsIGRvIGxvZ2dpbiBpbiB0aGUgdW5saWtlbHkgZXZlbnQgdGhpbmdzIGFyZSBzbyBob3NlZAorICAgICAgICAgKiB0aGF0IHdlIGNhbid0IGRvIHRoaXMgdHVwbGUuCisgICAgICAgICAqLworICAgICAgICBpZiAoKG9wZW5hcmdzID0gUHlUdXBsZV9OZXcoMCkpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb3BlbmxvZ19yZXQgPSBzeXNsb2dfb3BlbmxvZyhzZWxmLCBvcGVuYXJncywgTlVMTCk7CisgICAgICAgICAgICBQeV9YREVDUkVGKG9wZW5sb2dfcmV0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvcGVuYXJncyk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTOwogICAgIHN5c2xvZyhwcmlvcml0eSwgIiVzIiwgbWVzc2FnZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFM7CkBAIC0xMDksOSArMTk1LDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogc3lzbG9nX2Nsb3NlbG9nKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIGNsb3NlbG9nKCk7Ci0gICAgUHlfWERFQ1JFRihTX2lkZW50X28pOwotICAgIFNfaWRlbnRfbyA9IE5VTEw7CisgICAgaWYgKFNfbG9nX29wZW4pIHsKKyAgICAgICAgY2xvc2Vsb2coKTsKKyAgICAgICAgUHlfWERFQ1JFRihTX2lkZW50X28pOworICAgICAgICBTX2lkZW50X28gPSBOVUxMOworICAgICAgICBTX2xvZ19vcGVuID0gMDsKKyAgICB9CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtMTUyLDcgKzI0MSw3IEBACiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN5c2xvZ19tZXRob2RzW10gPSB7Ci0gICAgeyJvcGVubG9nIiwgICAgICAgICBzeXNsb2dfb3BlbmxvZywgICAgICAgICBNRVRIX1ZBUkFSR1N9LAorICAgIHsib3BlbmxvZyIsICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBzeXNsb2dfb3BlbmxvZywgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFN9LAogICAgIHsiY2xvc2Vsb2ciLCAgICAgICAgc3lzbG9nX2Nsb3NlbG9nLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsic3lzbG9nIiwgICAgICAgICAgc3lzbG9nX3N5c2xvZywgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InNldGxvZ21hc2siLCAgICAgIHN5c2xvZ19zZXRsb2dtYXNrLCAgICAgIE1FVEhfVkFSQVJHU30sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Rlcm1pb3MuYyBiL01vZHVsZXMvdGVybWlvcy5jCmluZGV4IDk3YTBkYTIuLmVkZWI2ZjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGVybWlvcy5jCisrKyBiL01vZHVsZXMvdGVybWlvcy5jCkBAIC0zNDcsNiArMzQ3LDQzIEBACiAjaWZkZWYgQjIzMDQwMAogICAgIHsiQjIzMDQwMCIsIEIyMzA0MDB9LAogI2VuZGlmCisjaWZkZWYgQjQ2MDgwMAorICAgIHsiQjQ2MDgwMCIsIEI0NjA4MDB9LAorI2VuZGlmCisjaWZkZWYgQjUwMDAwMAorICAgIHsiQjUwMDAwMCIsIEI1MDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjU3NjAwMAorICAgIHsiQjU3NjAwMCIsIEI1NzYwMDB9LAorI2VuZGlmCisjaWZkZWYgQjkyMTYwMAorICAgIHsiQjkyMTYwMCIsIEI5MjE2MDB9LAorI2VuZGlmCisjaWZkZWYgQjEwMDAwMDAKKyAgICB7IkIxMDAwMDAwIiwgQjEwMDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjExNTIwMDAKKyAgICB7IkIxMTUyMDAwIiwgQjExNTIwMDB9LAorI2VuZGlmCisjaWZkZWYgQjE1MDAwMDAKKyAgICB7IkIxNTAwMDAwIiwgQjE1MDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjIwMDAwMDAKKyAgICB7IkIyMDAwMDAwIiwgQjIwMDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjI1MDAwMDAKKyAgICB7IkIyNTAwMDAwIiwgQjI1MDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjMwMDAwMDAKKyAgICB7IkIzMDAwMDAwIiwgQjMwMDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjM1MDAwMDAKKyAgICB7IkIzNTAwMDAwIiwgQjM1MDAwMDB9LAorI2VuZGlmCisjaWZkZWYgQjQwMDAwMDAKKyAgICB7IkI0MDAwMDAwIiwgQjQwMDAwMDB9LAorI2VuZGlmCisKICNpZmRlZiBDQkFVREVYCiAgICAgeyJDQkFVREVYIiwgQ0JBVURFWH0sCiAjZW5kaWYKQEAgLTM1NSw2ICszOTIsOSBAQAogICAgIHsiVENTQU5PVyIsIFRDU0FOT1d9LAogICAgIHsiVENTQURSQUlOIiwgVENTQURSQUlOfSwKICAgICB7IlRDU0FGTFVTSCIsIFRDU0FGTFVTSH0sCisjaWZkZWYgVENTQVNPRlQKKyAgICB7IlRDU0FTT0ZUIiwgVENTQVNPRlR9LAorI2VuZGlmCiAKICAgICAvKiB0Y2ZsdXNoKCkgY29uc3RhbnRzICovCiAgICAgeyJUQ0lGTFVTSCIsIFRDSUZMVVNIfSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGltZW1vZHVsZS5jIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKaW5kZXggZmFlZDBlMS4uM2FmMDQxYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy90aW1lbW9kdWxlLmMKKysrIGIvTW9kdWxlcy90aW1lbW9kdWxlLmMKQEAgLTEsMjQgKzEsMTAgQEAKLQogLyogVGltZSBtb2R1bGUgKi8KIAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInN0cnVjdHNlcS5oIgotI2luY2x1ZGUgInRpbWVmdW5jcy5oIgorI2luY2x1ZGUgIl90aW1lLmgiCiAKICNkZWZpbmUgVFpOQU1FX0VOQ09ESU5HICJ1dGYtOCIKIAotI2lmZGVmIF9fQVBQTEVfXwotI2lmIGRlZmluZWQoSEFWRV9HRVRUSU1FT0ZEQVkpICYmIGRlZmluZWQoSEFWRV9GVElNRSkKLSAgLyoKLSAgICogZmxvYXR0aW1lIGZhbGxzIGJhY2sgdG8gZnRpbWUgd2hlbiBnZXR0dGltZW9mZGF5IGZhaWxzIGJlY2F1c2UgdGhlIGxhdHRlcgotICAgKiBtaWdodCBmYWlsIG9uIHNvbWUgcGxhdGZvcm1zLiBUaGlzIGZhbGxiYWNrIGlzIHVud2FudGVkIG9uIE1hY09TWCBiZWNhdXNlCi0gICAqIHRoYXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byB1c2UgYSBiaW5hcnkgYnVpbGQgb24gT1NYIDEwLjQgb24gZWFybGllcgotICAgKiByZWxlYXNlcyBvZiB0aGUgT1MuIFRoZXJlZm9yZSBjbGFpbSB3ZSBkb24ndCBzdXBwb3J0IGZ0aW1lLgotICAgKi8KLSMgdW5kZWYgSEFWRV9GVElNRQotI2VuZGlmCi0jZW5kaWYKLQogI2luY2x1ZGUgPGN0eXBlLmg+CiAKICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICkBAIC0yOSwxMyArMTUsNiBAQAogI2luY2x1ZGUgPGlvLmg+CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfRlRJTUUKLSNpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSNpZiAhZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChQWU9TX09TMikKLWV4dGVybiBpbnQgZnRpbWUoc3RydWN0IHRpbWViICopOwotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KLSNlbmRpZiAvKiBIQVZFX0ZUSU1FICovCi0KICNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1FOWF9fKQogI2luY2x1ZGUgPGk4Ni5oPgogI2Vsc2UKQEAgLTkwLDMyICs2OSw2IEBACiAvKiBGb3IgWTJLIGNoZWNrICovCiBzdGF0aWMgUHlPYmplY3QgKm1vZGRpY3Q7CiAKLS8qIEV4cG9zZWQgaW4gdGltZWZ1bmNzLmguICovCi10aW1lX3QKLV9QeVRpbWVfRG91YmxlVG9UaW1ldChkb3VibGUgeCkKLXsKLSAgICB0aW1lX3QgcmVzdWx0OwotICAgIGRvdWJsZSBkaWZmOwotCi0gICAgcmVzdWx0ID0gKHRpbWVfdCl4OwotICAgIC8qIEhvdyBtdWNoIGluZm8gZGlkIHdlIGxvc2U/ICB0aW1lX3QgbWF5IGJlIGFuIGludGVncmFsIG9yCi0gICAgICogZmxvYXRpbmcgdHlwZSwgYW5kIHdlIGRvbid0IGtub3cgd2hpY2guICBJZiBpdCdzIGludGVncmFsLAotICAgICAqIHdlIGRvbid0IGtub3cgd2hldGhlciBDIHRydW5jYXRlcywgcm91bmRzLCByZXR1cm5zIHRoZSBmbG9vciwKLSAgICAgKiBldGMuICBJZiB3ZSBsb3N0IGEgc2Vjb25kIG9yIG1vcmUsIHRoZSBDIHJvdW5kaW5nIGlzCi0gICAgICogdW5yZWFzb25hYmxlLCBvciB0aGUgaW5wdXQganVzdCBkb2Vzbid0IGZpdCBpbiBhIHRpbWVfdDsKLSAgICAgKiBjYWxsIGl0IGFuIGVycm9yIHJlZ2FyZGxlc3MuICBOb3RlIHRoYXQgdGhlIG9yaWdpbmFsIGNhc3QgdG8KLSAgICAgKiB0aW1lX3QgY2FuIGNhdXNlIGEgQyBlcnJvciB0b28sIGJ1dCBub3RoaW5nIHdlIGNhbiBkbyB0bwotICAgICAqIHdvcm0gYXJvdW5kIHRoYXQuCi0gICAgICovCi0gICAgZGlmZiA9IHggLSAoZG91YmxlKXJlc3VsdDsKLSAgICBpZiAoZGlmZiA8PSAtMS4wIHx8IGRpZmYgPj0gMS4wKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UgZm9yIHBsYXRmb3JtIHRpbWVfdCIpOwotICAgICAgICByZXN1bHQgPSAodGltZV90KS0xOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogdGltZV90aW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewpAQCAtMjA4LDIxICsxNjEsMjcgQEAKIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGZvciBzdWJzZWNvbmQgcHJlY2lzaW9uLiIpOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBzdHJ1Y3RfdGltZV90eXBlX2ZpZWxkc1tdID0gewotICAgIHsidG1feWVhciIsIE5VTEx9LAotICAgIHsidG1fbW9uIiwgTlVMTH0sCi0gICAgeyJ0bV9tZGF5IiwgTlVMTH0sCi0gICAgeyJ0bV9ob3VyIiwgTlVMTH0sCi0gICAgeyJ0bV9taW4iLCBOVUxMfSwKLSAgICB7InRtX3NlYyIsIE5VTEx9LAotICAgIHsidG1fd2RheSIsIE5VTEx9LAotICAgIHsidG1feWRheSIsIE5VTEx9LAotICAgIHsidG1faXNkc3QiLCBOVUxMfSwKKyAgICB7InRtX3llYXIiLCAieWVhciwgZm9yIGV4YW1wbGUsIDE5OTMifSwKKyAgICB7InRtX21vbiIsICJtb250aCBvZiB5ZWFyLCByYW5nZSBbMSwgMTJdIn0sCisgICAgeyJ0bV9tZGF5IiwgImRheSBvZiBtb250aCwgcmFuZ2UgWzEsIDMxXSJ9LAorICAgIHsidG1faG91ciIsICJob3VycywgcmFuZ2UgWzAsIDIzXSJ9LAorICAgIHsidG1fbWluIiwgIm1pbnV0ZXMsIHJhbmdlIFswLCA1OV0ifSwKKyAgICB7InRtX3NlYyIsICJzZWNvbmRzLCByYW5nZSBbMCwgNjFdKSJ9LAorICAgIHsidG1fd2RheSIsICJkYXkgb2Ygd2VlaywgcmFuZ2UgWzAsIDZdLCBNb25kYXkgaXMgMCJ9LAorICAgIHsidG1feWRheSIsICJkYXkgb2YgeWVhciwgcmFuZ2UgWzEsIDM2Nl0ifSwKKyAgICB7InRtX2lzZHN0IiwgIjEgaWYgc3VtbWVyIHRpbWUgaXMgaW4gZWZmZWN0LCAwIGlmIG5vdCwgYW5kIC0xIGlmIHVua25vd24ifSwKICAgICB7MH0KIH07CiAKIHN0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgc3RydWN0X3RpbWVfdHlwZV9kZXNjID0gewogICAgICJ0aW1lLnN0cnVjdF90aW1lIiwKLSAgICBOVUxMLAorICAgICJUaGUgdGltZSB2YWx1ZSBhcyByZXR1cm5lZCBieSBnbXRpbWUoKSwgbG9jYWx0aW1lKCksIGFuZCBzdHJwdGltZSgpLCBhbmRcbiIKKyAgICAiIGFjY2VwdGVkIGJ5IGFzY3RpbWUoKSwgbWt0aW1lKCkgYW5kIHN0cmZ0aW1lKCkuICBNYXkgYmUgY29uc2lkZXJlZCBhcyBhXG4iCisgICAgIiBzZXF1ZW5jZSBvZiA5IGludGVnZXJzLlxuXG4iCisgICAgIiBOb3RlIHRoYXQgc2V2ZXJhbCBmaWVsZHMnIHZhbHVlcyBhcmUgbm90IHRoZSBzYW1lIGFzIHRob3NlIGRlZmluZWQgYnlcbiIKKyAgICAiIHRoZSBDIGxhbmd1YWdlIHN0YW5kYXJkIGZvciBzdHJ1Y3QgdG0uICBGb3IgZXhhbXBsZSwgdGhlIHZhbHVlIG9mIHRoZVxuIgorICAgICIgZmllbGQgdG1feWVhciBpcyB0aGUgYWN0dWFsIHllYXIsIG5vdCB5ZWFyIC0gMTkwMC4gIFNlZSBpbmRpdmlkdWFsXG4iCisgICAgIiBmaWVsZHMnIGRlc2NyaXB0aW9ucyBmb3IgZGV0YWlscy4iLAogICAgIHN0cnVjdF90aW1lX3R5cGVfZmllbGRzLAogICAgIDksCiB9OwpAQCAtMjU4LDI5ICsyMTcsNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RydWN0dGltZV90b3R1cGxlKFB5T2JqZWN0ICp0KQotewotICAgIFB5T2JqZWN0ICp4ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgaTsKLSAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfTmV3KDkpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpPTA7IGk8OTsgaSsrKSB7Ci0gICAgICAgIHggPSBQeVN0cnVjdFNlcXVlbmNlX0dFVF9JVEVNKHQsIGkpOwotICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0odiwgaSwgeCk7Ci0gICAgfQotCi0gICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgUHlfWERFQ1JFRih2KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIHY7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX2NvbnZlcnQoZG91YmxlIHdoZW4sIHN0cnVjdCB0bSAqICgqZnVuY3Rpb24pKGNvbnN0IHRpbWVfdCAqKSkKIHsKICAgICBzdHJ1Y3QgdG0gKnA7CkBAIC0zNTQsNjAgKzI5MCw2OSBAQAogQ29udmVydCBzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaCB0byBhIHRpbWUgdHVwbGUgZXhwcmVzc2luZyBsb2NhbCB0aW1lLlxuXAogV2hlbiAnc2Vjb25kcycgaXMgbm90IHBhc3NlZCBpbiwgY29udmVydCB0aGUgY3VycmVudCB0aW1lIGluc3RlYWQuIik7CiAKKy8qIENvbnZlcnQgOS1pdGVtIHR1cGxlIHRvIHRtIHN0cnVjdHVyZS4gIFJldHVybiAxIG9uIHN1Y2Nlc3MsIHNldAorICogYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gMCBvbiBlcnJvci4KKyAqLwogc3RhdGljIGludAogZ2V0dG1hcmcoUHlPYmplY3QgKmFyZ3MsIHN0cnVjdCB0bSAqcCkKIHsKICAgICBpbnQgeTsKLSAgICBQeU9iamVjdCAqdCA9IE5VTEw7CiAKICAgICBtZW1zZXQoKHZvaWQgKikgcCwgJ1wwJywgc2l6ZW9mKHN0cnVjdCB0bSkpOwogCi0gICAgaWYgKFB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgdCA9IGFyZ3M7Ci0gICAgICAgIFB5X0lOQ1JFRih0KTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoUHlfVFlQRShhcmdzKSA9PSAmU3RydWN0VGltZVR5cGUpIHsKLSAgICAgICAgdCA9IHN0cnVjdHRpbWVfdG90dXBsZShhcmdzKTsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVHVwbGUgb3Igc3RydWN0X3RpbWUgYXJndW1lbnQgcmVxdWlyZWQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKHQgPT0gTlVMTCB8fCAhUHlBcmdfUGFyc2VUdXBsZSh0LCAiaWlpaWlpaWlpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPnRtX21vbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT50bV9tZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPnRtX2hvdXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+dG1fbWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPnRtX3NlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT50bV93ZGF5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPnRtX3lkYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+dG1faXNkc3QpKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodCk7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaWlpaWlpaWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmeSwgJnAtPnRtX21vbiwgJnAtPnRtX21kYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT50bV9ob3VyLCAmcC0+dG1fbWluLCAmcC0+dG1fc2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+dG1fd2RheSwgJnAtPnRtX3lkYXksICZwLT50bV9pc2RzdCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBQeV9ERUNSRUYodCk7CiAKLSAgICBpZiAoeSA8IDE5MDApIHsKKyAgICAvKiBJZiB5ZWFyIGlzIHNwZWNpZmllZCB3aXRoIGxlc3MgdGhhbiA0IGRpZ2l0cywgaXRzIGludGVycHJldGF0aW9uCisgICAgICogZGVwZW5kcyBvbiB0aGUgYWNjZXB0MmR5ZWFyIHZhbHVlLgorICAgICAqCisgICAgICogSWYgYWNjZXB0MmR5ZWFyIGlzIHRydWUgKGRlZmF1bHQpLCBhIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVoYXZpb3IgaXMKKyAgICAgKiBpbnZva2VkIGFzIGZvbGxvd3M6CisgICAgICoKKyAgICAgKiAgIC0gZm9yIDItZGlnaXQgeWVhciwgY2VudHVyeSBpcyBndWVzc2VkIGFjY29yZGluZyB0byBQT1NJWCBydWxlcyBmb3IKKyAgICAgKiAgICAgICV5IHN0cnB0aW1lIGZvcm1hdDogMjFzdCBjZW50dXJ5IGZvciB5IDwgNjksIDIwdGggY2VudHVyeQorICAgICAqICAgICAgb3RoZXJ3aXNlLiAgQSBkZXByZWNhdGlvbiB3YXJuaW5nIGlzIGlzc3VlZCB3aGVuIGNlbnR1cnkKKyAgICAgKiAgICAgIGluZm9ybWF0aW9uIGlzIGd1ZXNzZWQgaW4gdGhpcyB3YXkuCisgICAgICoKKyAgICAgKiAgIC0gZm9yIDMtZGlnaXQgb3IgbmVnYXRpdmUgeWVhciwgYSBWYWx1ZUVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisgICAgICoKKyAgICAgKiBJZiBhY2NlcHQyZHllYXIgaXMgZmFsc2UgKHNldCBieSB0aGUgcHJvZ3JhbSBvciBhcyBhIHJlc3VsdCBvZiBhCisgICAgICogbm9uLWVtcHR5IHZhbHVlIGFzc2lnbmVkIHRvIFBZVEhPTlkySyBlbnZpcm9ubWVudCB2YXJpYWJsZSkgYWxsIHllYXIKKyAgICAgKiB2YWx1ZXMgYXJlIGludGVycHJldGVkIGFzIGdpdmVuLgorICAgICAqLworICAgIGlmICh5IDwgMTAwMCkgewogICAgICAgICBQeU9iamVjdCAqYWNjZXB0ID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kZGljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQyZHllYXIiKTsKLSAgICAgICAgaWYgKGFjY2VwdCA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2tFeGFjdChhY2NlcHQpIHx8Ci0gICAgICAgICAgICAhUHlPYmplY3RfSXNUcnVlKGFjY2VwdCkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ZWFyID49IDE5MDAgcmVxdWlyZWQiKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoYWNjZXB0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGludCBhY2NlcHR2YWwgPSAgUHlPYmplY3RfSXNUcnVlKGFjY2VwdCk7CisgICAgICAgICAgICBpZiAoYWNjZXB0dmFsID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgaWYgKGFjY2VwdHZhbCkgeworICAgICAgICAgICAgICAgIGlmICgwIDw9IHkgJiYgeSA8IDY5KQorICAgICAgICAgICAgICAgICAgICB5ICs9IDIwMDA7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoNjkgPD0geSAmJiB5IDwgMTAwKQorICAgICAgICAgICAgICAgICAgICB5ICs9IDE5MDA7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInllYXIgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJDZW50dXJ5IGluZm8gZ3Vlc3NlZCBmb3IgYSAyLWRpZ2l0IHllYXIuIiwgMSkgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKDY5IDw9IHkgJiYgeSA8PSA5OSkKLSAgICAgICAgICAgIHkgKz0gMTkwMDsKLSAgICAgICAgZWxzZSBpZiAoMCA8PSB5ICYmIHkgPD0gNjgpCi0gICAgICAgICAgICB5ICs9IDIwMDA7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInllYXIgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CiAgICAgfQogICAgIHAtPnRtX3llYXIgPSB5IC0gMTkwMDsKICAgICBwLT50bV9tb24tLTsKQEAgLTQxNiw2ICszNjEsNzYgQEAKICAgICByZXR1cm4gMTsKIH0KIAorLyogQ2hlY2sgdmFsdWVzIG9mIHRoZSBzdHJ1Y3QgdG0gZmllbGRzIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gc3RyZnRpbWUoKSBhbmQKKyAqIGFzY3RpbWUoKS4gIFJldHVybiAxIGlmIGFsbCB2YWx1ZXMgYXJlIHZhbGlkLCBvdGhlcndpc2Ugc2V0IGFuIGV4Y2VwdGlvbgorICogYW5kIHJldHVybnMgMC4KKyAqLworc3RhdGljIGludAorY2hlY2t0bShzdHJ1Y3QgdG0qIGJ1ZikKK3sKKyAgICAvKiBDaGVja3MgYWRkZWQgdG8gbWFrZSBzdXJlIHN0cmZ0aW1lKCkgYW5kIGFzY3RpbWUoKSBkb2VzIG5vdCBjcmFzaCBQeXRob24gYnkKKyAgICAgICBpbmRleGluZyBibGluZGx5IGludG8gc29tZSBhcnJheSBmb3IgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uCisgICAgICAgYnkgc29tZSBiYWQgaW5kZXggKGZpeGVzIGJ1ZyAjODk3NjI1IGFuZCAjNjYwOCkuCisKKyAgICAgICBBbHNvIHN1cHBvcnQgdmFsdWVzIG9mIHplcm8gZnJvbSBQeXRob24gY29kZSBmb3IgYXJndW1lbnRzIGluIHdoaWNoCisgICAgICAgdGhhdCBpcyBvdXQgb2YgcmFuZ2UgYnkgZm9yY2luZyB0aGF0IHZhbHVlIHRvIHRoZSBsb3dlc3QgdmFsdWUgdGhhdAorICAgICAgIGlzIHZhbGlkIChmaXhlZCBidWcgIzE1MjA5MTQpLgorCisgICAgICAgVmFsaWQgcmFuZ2VzIGJhc2VkIG9uIHdoYXQgaXMgYWxsb3dlZCBpbiBzdHJ1Y3QgdG06CisKKyAgICAgICAtIHRtX3llYXI6IFswLCBtYXgoaW50KV0gKDEpCisgICAgICAgLSB0bV9tb246IFswLCAxMV0gKDIpCisgICAgICAgLSB0bV9tZGF5OiBbMSwgMzFdCisgICAgICAgLSB0bV9ob3VyOiBbMCwgMjNdCisgICAgICAgLSB0bV9taW46IFswLCA1OV0KKyAgICAgICAtIHRtX3NlYzogWzAsIDYwXQorICAgICAgIC0gdG1fd2RheTogWzAsIDZdICgxKQorICAgICAgIC0gdG1feWRheTogWzAsIDM2NV0gKDIpCisgICAgICAgLSB0bV9pc2RzdDogWy1tYXgoaW50KSwgbWF4KGludCldCisKKyAgICAgICAoMSkgZ2V0dG1hcmcoKSBoYW5kbGVzIGJvdW5kcy1jaGVja2luZy4KKyAgICAgICAoMikgUHl0aG9uJ3MgYWNjZXB0YWJsZSByYW5nZSBpcyBvbmUgZ3JlYXRlciB0aGFuIHRoZSByYW5nZSBpbiBDLAorICAgICAgIHRodXMgbmVlZCB0byBjaGVjayBhZ2FpbnN0IGF1dG9tYXRpYyBkZWNyZW1lbnQgYnkgZ2V0dG1hcmcoKS4KKyAgICAqLworICAgIGlmIChidWYtPnRtX21vbiA9PSAtMSkKKyAgICAgICAgYnVmLT50bV9tb24gPSAwOworICAgIGVsc2UgaWYgKGJ1Zi0+dG1fbW9uIDwgMCB8fCBidWYtPnRtX21vbiA+IDExKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibW9udGggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoYnVmLT50bV9tZGF5ID09IDApCisgICAgICAgIGJ1Zi0+dG1fbWRheSA9IDE7CisgICAgZWxzZSBpZiAoYnVmLT50bV9tZGF5IDwgMCB8fCBidWYtPnRtX21kYXkgPiAzMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImRheSBvZiBtb250aCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChidWYtPnRtX2hvdXIgPCAwIHx8IGJ1Zi0+dG1faG91ciA+IDIzKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaG91ciBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChidWYtPnRtX21pbiA8IDAgfHwgYnVmLT50bV9taW4gPiA1OSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1pbnV0ZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChidWYtPnRtX3NlYyA8IDAgfHwgYnVmLT50bV9zZWMgPiA2MSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInNlY29uZHMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiB0bV93ZGF5IGRvZXMgbm90IG5lZWQgY2hlY2tpbmcgb2YgaXRzIHVwcGVyLWJvdW5kIHNpbmNlIHRha2luZworICAgIGBgJSA3YGAgaW4gZ2V0dG1hcmcoKSBhdXRvbWF0aWNhbGx5IHJlc3RyaWN0cyB0aGUgcmFuZ2UuICovCisgICAgaWYgKGJ1Zi0+dG1fd2RheSA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2Ygd2VlayBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChidWYtPnRtX3lkYXkgPT0gLTEpCisgICAgICAgIGJ1Zi0+dG1feWRheSA9IDA7CisgICAgZWxzZSBpZiAoYnVmLT50bV95ZGF5IDwgMCB8fCBidWYtPnRtX3lkYXkgPiAzNjUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2YgeWVhciBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCiAjaWZkZWYgSEFWRV9TVFJGVElNRQogI2lmZGVmIEhBVkVfV0NTRlRJTUUKICNkZWZpbmUgdGltZV9jaGFyIHdjaGFyX3QKQEAgLTQzMywxMDggKzQ0OCw1NiBAQAogICAgIFB5T2JqZWN0ICp0dXAgPSBOVUxMOwogICAgIHN0cnVjdCB0bSBidWY7CiAgICAgY29uc3QgdGltZV9jaGFyICpmbXQ7Ci0gICAgUHlPYmplY3QgKmZvcm1hdCwgKnRtcGZtdDsKKyNpZmRlZiBIQVZFX1dDU0ZUSU1FCisgICAgd2NoYXJfdCAqZm9ybWF0OworI2Vsc2UKKyAgICBQeU9iamVjdCAqZm9ybWF0OworI2VuZGlmCisgICAgUHlPYmplY3QgKmZvcm1hdF9hcmc7CiAgICAgc2l6ZV90IGZtdGxlbiwgYnVmbGVuOwotICAgIHRpbWVfY2hhciAqb3V0YnVmID0gMDsKKyAgICB0aW1lX2NoYXIgKm91dGJ1ZiA9IE5VTEw7CiAgICAgc2l6ZV90IGk7CisgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CiAKICAgICBtZW1zZXQoKHZvaWQgKikgJmJ1ZiwgJ1wwJywgc2l6ZW9mKGJ1ZikpOwogCiAgICAgLyogV2lsbCBhbHdheXMgZXhwZWN0IGEgdW5pY29kZSBzdHJpbmcgdG8gYmUgcGFzc2VkIGFzIGZvcm1hdC4KICAgICAgICBHaXZlbiB0aGF0IHRoZXJlJ3Mgbm8gc3RyIHR5cGUgYW55bW9yZSBpbiBweTNrIHRoaXMgc2VlbXMgc2FmZS4KICAgICAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXxPOnN0cmZ0aW1lIiwgJmZvcm1hdCwgJnR1cCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVfE86c3RyZnRpbWUiLCAmZm9ybWF0X2FyZywgJnR1cCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHR1cCA9PSBOVUxMKSB7CiAgICAgICAgIHRpbWVfdCB0dCA9IHRpbWUoTlVMTCk7CiAgICAgICAgIGJ1ZiA9ICpsb2NhbHRpbWUoJnR0KTsKLSAgICB9IGVsc2UgaWYgKCFnZXR0bWFyZyh0dXAsICZidWYpKQorICAgIH0KKyAgICBlbHNlIGlmICghZ2V0dG1hcmcodHVwLCAmYnVmKSB8fCAhY2hlY2t0bSgmYnVmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBDaGVja3MgYWRkZWQgdG8gbWFrZSBzdXJlIHN0cmZ0aW1lKCkgZG9lcyBub3QgY3Jhc2ggUHl0aG9uIGJ5Ci0gICAgICAgIGluZGV4aW5nIGJsaW5kbHkgaW50byBzb21lIGFycmF5IGZvciBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24KLSAgICAgICAgYnkgc29tZSBiYWQgaW5kZXggKGZpeGVzIGJ1ZyAjODk3NjI1KS4KLQotICAgICAgICBBbHNvIHN1cHBvcnQgdmFsdWVzIG9mIHplcm8gZnJvbSBQeXRob24gY29kZSBmb3IgYXJndW1lbnRzIGluIHdoaWNoCi0gICAgICAgIHRoYXQgaXMgb3V0IG9mIHJhbmdlIGJ5IGZvcmNpbmcgdGhhdCB2YWx1ZSB0byB0aGUgbG93ZXN0IHZhbHVlIHRoYXQKLSAgICAgICAgaXMgdmFsaWQgKGZpeGVkIGJ1ZyAjMTUyMDkxNCkuCi0KLSAgICAgICAgVmFsaWQgcmFuZ2VzIGJhc2VkIG9uIHdoYXQgaXMgYWxsb3dlZCBpbiBzdHJ1Y3QgdG06Ci0KLSAgICAgICAgLSB0bV95ZWFyOiBbMCwgbWF4KGludCldICgxKQotICAgICAgICAtIHRtX21vbjogWzAsIDExXSAoMikKLSAgICAgICAgLSB0bV9tZGF5OiBbMSwgMzFdCi0gICAgICAgIC0gdG1faG91cjogWzAsIDIzXQotICAgICAgICAtIHRtX21pbjogWzAsIDU5XQotICAgICAgICAtIHRtX3NlYzogWzAsIDYwXQotICAgICAgICAtIHRtX3dkYXk6IFswLCA2XSAoMSkKLSAgICAgICAgLSB0bV95ZGF5OiBbMCwgMzY1XSAoMikKLSAgICAgICAgLSB0bV9pc2RzdDogWy1tYXgoaW50KSwgbWF4KGludCldCi0KLSAgICAgICAgKDEpIGdldHRtYXJnKCkgaGFuZGxlcyBib3VuZHMtY2hlY2tpbmcuCi0gICAgICAgICgyKSBQeXRob24ncyBhY2NlcHRhYmxlIHJhbmdlIGlzIG9uZSBncmVhdGVyIHRoYW4gdGhlIHJhbmdlIGluIEMsCi0gICAgICAgIHRodXMgbmVlZCB0byBjaGVjayBhZ2FpbnN0IGF1dG9tYXRpYyBkZWNyZW1lbnQgYnkgZ2V0dG1hcmcoKS4KLSAgICAqLwotICAgIGlmIChidWYudG1fbW9uID09IC0xKQotICAgICAgICBidWYudG1fbW9uID0gMDsKLSAgICBlbHNlIGlmIChidWYudG1fbW9uIDwgMCB8fCBidWYudG1fbW9uID4gMTEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJtb250aCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChidWYudG1fbWRheSA9PSAwKQotICAgICAgICBidWYudG1fbWRheSA9IDE7Ci0gICAgZWxzZSBpZiAoYnVmLnRtX21kYXkgPCAwIHx8IGJ1Zi50bV9tZGF5ID4gMzEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2YgbW9udGggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAoYnVmLnRtX2hvdXIgPCAwIHx8IGJ1Zi50bV9ob3VyID4gMjMpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJob3VyIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGJ1Zi50bV9taW4gPCAwIHx8IGJ1Zi50bV9taW4gPiA1OSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm1pbnV0ZSBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChidWYudG1fc2VjIDwgMCB8fCBidWYudG1fc2VjID4gNjEpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzZWNvbmRzIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgLyogdG1fd2RheSBkb2VzIG5vdCBuZWVkIGNoZWNraW5nIG9mIGl0cyB1cHBlci1ib3VuZCBzaW5jZSB0YWtpbmcKLSAgICBgYCUgN2BgIGluIGdldHRtYXJnKCkgYXV0b21hdGljYWxseSByZXN0cmljdHMgdGhlIHJhbmdlLiAqLwotICAgIGlmIChidWYudG1fd2RheSA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJkYXkgb2Ygd2VlayBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChidWYudG1feWRheSA9PSAtMSkKLSAgICAgICAgYnVmLnRtX3lkYXkgPSAwOwotICAgIGVsc2UgaWYgKGJ1Zi50bV95ZGF5IDwgMCB8fCBidWYudG1feWRheSA+IDM2NSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImRheSBvZiB5ZWFyIG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKGJ1Zi50bV9pc2RzdCA8IC0xIHx8IGJ1Zi50bV9pc2RzdCA+IDEpIHsKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKHN1bikKKyAgICBpZiAoYnVmLnRtX3llYXIgKyAxOTAwIDwgMSB8fCA5OTk5IDwgYnVmLnRtX3llYXIgKyAxOTAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImRheWxpZ2h0IHNhdmluZ3MgZmxhZyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJzdHJmdGltZSgpIHJlcXVpcmVzIHllYXIgaW4gWzE7IDk5OTldIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyNlbmRpZgorCisgICAgLyogTm9ybWFsaXplIHRtX2lzZHN0IGp1c3QgaW4gY2FzZSBzb21lb25lIGZvb2xpc2hseSBpbXBsZW1lbnRzICVaCisgICAgICAgYmFzZWQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0bV9pc2RzdCBmYWxscyB3aXRoaW4gdGhlIHJhbmdlIG9mCisgICAgICAgWy0xLCAxXSAqLworICAgIGlmIChidWYudG1faXNkc3QgPCAtMSkKKyAgICAgICAgYnVmLnRtX2lzZHN0ID0gLTE7CisgICAgZWxzZSBpZiAoYnVmLnRtX2lzZHN0ID4gMSkKKyAgICAgICAgYnVmLnRtX2lzZHN0ID0gMTsKIAogI2lmZGVmIEhBVkVfV0NTRlRJTUUKLSAgICB0bXBmbXQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yod2NoYXJfdCkgKiAoUHlVbmljb2RlX0dldFNpemUoZm9ybWF0KSsxKSk7Ci0gICAgaWYgKCF0bXBmbXQpCisgICAgZm9ybWF0ID0gUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcoZm9ybWF0X2FyZywgTlVMTCk7CisgICAgaWYgKGZvcm1hdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAvKiBUaGlzIGFzc3VtZXMgdGhhdCBQeVVuaWNvZGVfQXNXaWRlQ2hhciBkb2Vzbid0IGRvIGFueSBVVEYtMTYKLSAgICAgICBleHBhbnNpb24uICovCi0gICAgaWYgKFB5VW5pY29kZV9Bc1dpZGVDaGFyKChQeVVuaWNvZGVPYmplY3QqKWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdjaGFyX3QqKVB5Qnl0ZXNfQVNfU1RSSU5HKHRtcGZtdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HZXRTaXplKGZvcm1hdCkrMSkgPT0gKHNpemVfdCktMSkKLSAgICAgICAgLyogVGhpcyBzaG91bGRuJ3QgZmFpbC4gKi8KLSAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlVbmljb2RlX0FzV2lkZUNoYXIgZmFpbGVkIik7Ci0gICAgZm9ybWF0ID0gdG1wZm10OwotICAgIGZtdCA9ICh3Y2hhcl90KilQeUJ5dGVzX0FTX1NUUklORyhmb3JtYXQpOworICAgIGZtdCA9IGZvcm1hdDsKICNlbHNlCiAgICAgLyogQ29udmVydCB0aGUgdW5pY29kZSBzdHJpbmcgdG8gYW4gYXNjaWkgb25lICovCi0gICAgZm9ybWF0ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhmb3JtYXQsIFRaTkFNRV9FTkNPRElORywgTlVMTCk7CisgICAgZm9ybWF0ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhmb3JtYXRfYXJnLCBUWk5BTUVfRU5DT0RJTkcsIE5VTEwpOwogICAgIGlmIChmb3JtYXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZm10ID0gUHlCeXRlc19BU19TVFJJTkcoZm9ybWF0KTsKQEAgLTU2NSw4ICs1MjgsOCBAQAogICAgIGZvciAoaSA9IDEwMjQ7IDsgaSArPSBpKSB7CiAgICAgICAgIG91dGJ1ZiA9ICh0aW1lX2NoYXIgKilQeU1lbV9NYWxsb2MoaSpzaXplb2YodGltZV9jaGFyKSk7CiAgICAgICAgIGlmIChvdXRidWYgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdCk7Ci0gICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBidWZsZW4gPSBmb3JtYXRfdGltZShvdXRidWYsIGksIGZtdCwgJmJ1Zik7CiAgICAgICAgIGlmIChidWZsZW4gPiAwIHx8IGkgPj0gMjU2ICogZm10bGVuKSB7CkBAIC01NzUsNyArNTM4LDYgQEAKICAgICAgICAgICAgICAgIE1vcmUgbGlrZWx5LCB0aGUgZm9ybWF0IHlpZWxkcyBhbiBlbXB0eSByZXN1bHQsCiAgICAgICAgICAgICAgICBlLmcuIGFuIGVtcHR5IGZvcm1hdCwgb3IgJVogd2hlbiB0aGUgdGltZXpvbmUKICAgICAgICAgICAgICAgIGlzIHVua25vd24uICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcmV0OwogI2lmZGVmIEhBVkVfV0NTRlRJTUUKICAgICAgICAgICAgIHJldCA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIob3V0YnVmLCBidWZsZW4pOwogI2Vsc2UKQEAgLTU4MywxOSArNTQ1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRaTkFNRV9FTkNPRElORywgTlVMTCk7CiAjZW5kaWYKICAgICAgICAgICAgIFB5TWVtX0ZyZWUob3V0YnVmKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwotICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIFB5TWVtX0ZyZWUob3V0YnVmKTsKICNpZiBkZWZpbmVkIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgJiYgZGVmaW5lZChfX1NURENfU0VDVVJFX0xJQl9fKQogICAgICAgICAvKiBWaXN1YWxTdHVkaW8gLk5FVCAyMDA1IGRvZXMgdGhpcyBwcm9wZXJseSAqLwogICAgICAgICBpZiAoYnVmbGVuID09IDAgJiYgZXJybm8gPT0gRUlOVkFMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZm9ybWF0IHN0cmluZyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKGZvcm1hdCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZW5kaWYKICAgICB9CisjaWZkZWYgSEFWRV9XQ1NGVElNRQorICAgIFB5TWVtX0ZyZWUoZm9ybWF0KTsKKyNlbHNlCisgICAgUHlfREVDUkVGKGZvcm1hdCk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OwogfQogCiAjdW5kZWYgdGltZV9jaGFyCkBAIC02MTYsNDAgKzU4Miw2NiBAQAogICAgIFB5T2JqZWN0ICpzdHJwdGltZV9yZXN1bHQ7CiAKICAgICBpZiAoIXN0cnB0aW1lX21vZHVsZSkKLSAgICByZXR1cm4gTlVMTDsKLSAgICBzdHJwdGltZV9yZXN1bHQgPSBQeU9iamVjdF9DYWxsTWV0aG9kKHN0cnB0aW1lX21vZHVsZSwgIl9zdHJwdGltZV90aW1lIiwgIk8iLCBhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RycHRpbWVfcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChzdHJwdGltZV9tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfc3RycHRpbWVfdGltZSIsICJPIiwgYXJncyk7CiAgICAgUHlfREVDUkVGKHN0cnB0aW1lX21vZHVsZSk7CiAgICAgcmV0dXJuIHN0cnB0aW1lX3Jlc3VsdDsKIH0KIAorCiBQeURvY19TVFJWQVIoc3RycHRpbWVfZG9jLAogInN0cnB0aW1lKHN0cmluZywgZm9ybWF0KSAtPiBzdHJ1Y3RfdGltZVxuXAogXG5cCiBQYXJzZSBhIHN0cmluZyB0byBhIHRpbWUgdHVwbGUgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCiBTZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2RlcyAoc2FtZSBhcyBzdHJmdGltZSgpKS4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK19hc2N0aW1lKHN0cnVjdCB0bSAqdGltZXB0cikKK3sKKyAgICAvKiBJbnNwaXJlZCBieSBPcGVuIEdyb3VwIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgYXQKKyAgICAgKiBodHRwOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy9hc2N0aW1lLmh0bWwgKi8KKyAgICBzdGF0aWMgY2hhciB3ZGF5X25hbWVbN11bM10gPSB7CisgICAgICAgICJTdW4iLCAiTW9uIiwgIlR1ZSIsICJXZWQiLCAiVGh1IiwgIkZyaSIsICJTYXQiCisgICAgfTsKKyAgICBzdGF0aWMgY2hhciBtb25fbmFtZVsxMl1bM10gPSB7CisgICAgICAgICJKYW4iLCAiRmViIiwgIk1hciIsICJBcHIiLCAiTWF5IiwgIkp1biIsCisgICAgICAgICJKdWwiLCAiQXVnIiwgIlNlcCIsICJPY3QiLCAiTm92IiwgIkRlYyIKKyAgICB9OworICAgIGNoYXIgYnVmWzIwXTsgLyogJ1N1biBTZXAgMTYgMDE6MDM6NTJcMCcgKi8KKyAgICBpbnQgbjsKKworICAgIG4gPSBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlLjNzICUuM3MlM2QgJS4yZDolLjJkOiUuMmQiLAorICAgICAgICAgICAgICAgICAgICAgIHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XSwKKyAgICAgICAgICAgICAgICAgICAgICBtb25fbmFtZVt0aW1lcHRyLT50bV9tb25dLAorICAgICAgICAgICAgICAgICAgICAgIHRpbWVwdHItPnRtX21kYXksIHRpbWVwdHItPnRtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgdGltZXB0ci0+dG1fbWluLCB0aW1lcHRyLT50bV9zZWMpOworICAgIC8qIFhYWDogc2luY2UgdGhlIGZpZWxkcyB1c2VkIGJ5IHNucHJpbnRmIGFib3ZlIGFyZSB2YWxpZGF0ZWQgaW4gY2hlY2t0bSwKKyAgICAgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBzaG91bGQgbmV2ZXIgdHJpZ2dlci4gV2Uga2VlcCB0aGUgY2hlY2sgYmVjYXVzZQorICAgICAqIGhpc3RvcmljYWxseSBmaXhlZCBzaXplIGJ1ZmZlciB1c2VkIGluIGFzY3RpbWUgd2FzIHRoZSBzb3VyY2Ugb2YKKyAgICAgKiBjcmFzaGVzLiAqLworICAgIGlmIChuICsgMSAhPSBzaXplb2YoYnVmKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVuY29udmVydGlibGUgdGltZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzICVkIiwgYnVmLCAxOTAwICsgdGltZXB0ci0+dG1feWVhcik7Cit9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiB0aW1lX2FzY3RpbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICp0dXAgPSBOVUxMOwogICAgIHN0cnVjdCB0bSBidWY7Ci0gICAgY2hhciAqcDsKKwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImFzY3RpbWUiLCAwLCAxLCAmdHVwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHR1cCA9PSBOVUxMKSB7CiAgICAgICAgIHRpbWVfdCB0dCA9IHRpbWUoTlVMTCk7CiAgICAgICAgIGJ1ZiA9ICpsb2NhbHRpbWUoJnR0KTsKLSAgICB9IGVsc2UgaWYgKCFnZXR0bWFyZyh0dXAsICZidWYpKQorICAgIH0gZWxzZSBpZiAoIWdldHRtYXJnKHR1cCwgJmJ1ZikgfHwgIWNoZWNrdG0oJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHAgPSBhc2N0aW1lKCZidWYpOwotICAgIGlmIChwID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnZhbGlkIHRpbWUiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGlmIChwWzI0XSA9PSAnXG4nKQotICAgICAgICBwWzI0XSA9ICdcMCc7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHApOworICAgIHJldHVybiBfYXNjdGltZSgmYnVmKTsKIH0KIAogUHlEb2NfU1RSVkFSKGFzY3RpbWVfZG9jLApAQCAtNjY0LDcgKzY1Niw3IEBACiB7CiAgICAgUHlPYmplY3QgKm90ID0gTlVMTDsKICAgICB0aW1lX3QgdHQ7Ci0gICAgY2hhciAqcDsKKyAgICBzdHJ1Y3QgdG0gKnRpbWVwdHI7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJjdGltZSIsIDAsIDEsICZvdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjc4LDE0ICs2NzAsMTIgQEAKICAgICAgICAgaWYgKHR0ID09ICh0aW1lX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBwID0gY3RpbWUoJnR0KTsKLSAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgdGltZXB0ciA9IGxvY2FsdGltZSgmdHQpOworICAgIGlmICh0aW1lcHRyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmNvbnZlcnRpYmxlIHRpbWUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChwWzI0XSA9PSAnXG4nKQotICAgICAgICBwWzI0XSA9ICdcMCc7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHApOworICAgIHJldHVybiBfYXNjdGltZSh0aW1lcHRyKTsKIH0KIAogUHlEb2NfU1RSVkFSKGN0aW1lX2RvYywKQEAgLTk3MCw0NCArOTYwLDEyIEBACiAgICAgcmV0dXJuIG07CiB9CiAKLQotLyogSW1wbGVtZW50IGZsb2F0dGltZSgpIGZvciB2YXJpb3VzIHBsYXRmb3JtcyAqLwotCiBzdGF0aWMgZG91YmxlCiBmbG9hdHRpbWUodm9pZCkKIHsKLSAgICAvKiBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBnZXQgdGhlIHRpbWU6Ci0gICAgICAoMSkgZ2V0dGltZW9mZGF5KCkgLS0gcmVzb2x1dGlvbiBpbiBtaWNyb3NlY29uZHMKLSAgICAgICgyKSBmdGltZSgpIC0tIHJlc29sdXRpb24gaW4gbWlsbGlzZWNvbmRzCi0gICAgICAoMykgdGltZSgpIC0tIHJlc29sdXRpb24gaW4gc2Vjb25kcwotICAgICAgSW4gYWxsIGNhc2VzIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBmbG9hdCBpbiBzZWNvbmRzLgotICAgICAgU2luY2Ugb24gc29tZSBzeXN0ZW1zIChlLmcuIFNDTyBPRFQgMy4wKSBnZXR0aW1lb2ZkYXkoKSBtYXkKLSAgICAgIGZhaWwsIHNvIHdlIGZhbGwgYmFjayBvbiBmdGltZSgpIG9yIHRpbWUoKS4KLSAgICAgIE5vdGU6IGNsb2NrIHJlc29sdXRpb24gZG9lcyBub3QgaW1wbHkgY2xvY2sgYWNjdXJhY3khICovCi0jaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsIHQ7Ci0jaWZkZWYgR0VUVElNRU9GREFZX05PX1RaCi0gICAgICAgIGlmIChnZXR0aW1lb2ZkYXkoJnQpID09IDApCi0gICAgICAgICAgICByZXR1cm4gKGRvdWJsZSl0LnR2X3NlYyArIHQudHZfdXNlYyowLjAwMDAwMTsKLSNlbHNlIC8qICFHRVRUSU1FT0ZEQVlfTk9fVFogKi8KLSAgICAgICAgaWYgKGdldHRpbWVvZmRheSgmdCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpID09IDApCi0gICAgICAgICAgICByZXR1cm4gKGRvdWJsZSl0LnR2X3NlYyArIHQudHZfdXNlYyowLjAwMDAwMTsKLSNlbmRpZiAvKiAhR0VUVElNRU9GREFZX05PX1RaICovCi0gICAgfQotCi0jZW5kaWYgLyogIUhBVkVfR0VUVElNRU9GREFZICovCi0gICAgewotI2lmIGRlZmluZWQoSEFWRV9GVElNRSkKLSAgICAgICAgc3RydWN0IHRpbWViIHQ7Ci0gICAgICAgIGZ0aW1lKCZ0KTsKLSAgICAgICAgcmV0dXJuIChkb3VibGUpdC50aW1lICsgKGRvdWJsZSl0Lm1pbGxpdG0gKiAoZG91YmxlKTAuMDAxOwotI2Vsc2UgLyogIUhBVkVfRlRJTUUgKi8KLSAgICAgICAgdGltZV90IHNlY3M7Ci0gICAgICAgIHRpbWUoJnNlY3MpOwotICAgICAgICByZXR1cm4gKGRvdWJsZSlzZWNzOwotI2VuZGlmIC8qICFIQVZFX0ZUSU1FICovCi0gICAgfQorICAgIF9QeVRpbWVfdGltZXZhbCB0OworICAgIF9QeVRpbWVfZ2V0dGltZW9mZGF5KCZ0KTsKKyAgICByZXR1cm4gKGRvdWJsZSl0LnR2X3NlYyArIHQudHZfdXNlYyowLjAwMDAwMTsKIH0KIAogCkBAIC0xMDg4LDIyICsxMDQ2LDYgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2VsaWYgZGVmaW5lZChQTEFOOSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSBtaWxsaXNlY3MgPSBzZWNzICogMTAwMC4wOwotICAgICAgICBpZiAobWlsbGlzZWNzID4gKGRvdWJsZSlMT05HX01BWCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzbGVlcCBsZW5ndGggaXMgdG9vIGxhcmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgLyogVGhpcyBzbGVlcCAqQ0FOIEJFKiBpbnRlcnJ1cHRlZC4gKi8KLSAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBpZihzbGVlcCgobG9uZyltaWxsaXNlY3MpIDwgMCl7Ci0gICAgICAgICAgICBQeV9CTE9DS19USFJFQURTCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICB9CiAjZWxzZQogICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGEuYyBiL01vZHVsZXMvdW5pY29kZWRhdGEuYwppbmRleCAxYTU1Njk2Li40NjNiZTJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCkBAIC0xLDEyICsxLDEyIEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgdW5pY29kZWRhdGEgLS0gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBVbmljb2RlIDUuMSBkYXRhIGJhc2UuCisgICB1bmljb2RlZGF0YSAtLSBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgNS4yIGRhdGEgYmFzZS4KIAotICAgRGF0YSB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIFVuaWNvZGUgNS4xIFVuaWNvZGVEYXRhLnR4dCBmaWxlLgorICAgRGF0YSB3YXMgZXh0cmFjdGVkIGZyb20gdGhlIFVuaWNvZGUgNS4yIFVuaWNvZGVEYXRhLnR4dCBmaWxlLgogCiAgICBXcml0dGVuIGJ5IE1hcmMtQW5kcmUgTGVtYnVyZyAobWFsQGxlbWJ1cmcuY29tKS4KICAgIE1vZGlmaWVkIGZvciBQeXRob24gMi4wIGJ5IEZyZWRyaWsgTHVuZGggKGZyZWRyaWtAcHl0aG9ud2FyZS5jb20pCi0gICBNb2RpZmllZCBieSBNYXJ0aW4gdi4gTPZ3aXMgKG1hcnRpbkB2LmxvZXdpcy5kZSkKKyAgIE1vZGlmaWVkIGJ5IE1hcnRpbiB2LiBMw7Z3aXMgKG1hcnRpbkB2LmxvZXdpcy5kZSkKIAogICAgQ29weXJpZ2h0IChjKSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMuCiAKQEAgLTM2LDcgKzM2LDcgQEAKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGNhdGVnb3J5X2NoYW5nZWQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBkZWNpbWFsX2NoYW5nZWQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBtaXJyb3JlZF9jaGFuZ2VkOwotICAgIGNvbnN0IGludCBudW1lcmljX2NoYW5nZWQ7CisgICAgY29uc3QgZG91YmxlIG51bWVyaWNfY2hhbmdlZDsKIH0gY2hhbmdlX3JlY29yZDsKIAogLyogZGF0YSBmaWxlIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAqLwpAQCAtNDAzLDcgKzQwMyw4IEBACiB7CiAgICAgUHlVbmljb2RlT2JqZWN0ICp2OwogICAgIGNoYXIgZGVjb21wWzI1Nl07Ci0gICAgaW50IGNvZGUsIGluZGV4LCBjb3VudCwgaTsKKyAgICBpbnQgY29kZSwgaW5kZXgsIGNvdW50OworICAgIHNpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCBwcmVmaXhfaW5kZXg7CiAgICAgUHlfVUNTNCBjOwogCkBAIC00NTAsMTUgKzQ1MSwxMiBAQAogICAgIHdoaWxlIChjb3VudC0tID4gMCkgewogICAgICAgICBpZiAoaSkKICAgICAgICAgICAgIGRlY29tcFtpKytdID0gJyAnOwotICAgICAgICBhc3NlcnQoKHNpemVfdClpIDwgc2l6ZW9mKGRlY29tcCkpOworICAgICAgICBhc3NlcnQoaSA8IHNpemVvZihkZWNvbXApKTsKICAgICAgICAgUHlPU19zbnByaW50ZihkZWNvbXAgKyBpLCBzaXplb2YoZGVjb21wKSAtIGksICIlMDRYIiwKICAgICAgICAgICAgICAgICAgICAgICBkZWNvbXBfZGF0YVsrK2luZGV4XSk7CiAgICAgICAgIGkgKz0gc3RybGVuKGRlY29tcCArIGkpOwogICAgIH0KLQotICAgIGRlY29tcFtpXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZGVjb21wKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGRlY29tcCwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04NzEsMTMgKzg2OSwxNiBAQAogICAgIHsgMCwgICAgMCwgICAgICJIIiAgfQogfTsKIAorLyogVGhlc2UgcmFuZ2VzIG5lZWQgdG8gbWF0Y2ggbWFrZXVuaWNvZGVkYXRhLnB5OmNqa19yYW5nZXMuICovCiBzdGF0aWMgaW50CiBpc191bmlmaWVkX2lkZW9ncmFwaChQeV9VQ1M0IGNvZGUpCiB7Ci0gICAgcmV0dXJuICgKLSAgICAgICAgKDB4MzQwMCA8PSBjb2RlICYmIGNvZGUgPD0gMHg0REI1KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBBICovCi0gICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZDMykgfHwgLyogQ0pLIElkZW9ncmFwaCwgVW5pY29kZSA1LjEgKi8KLSAgICAgICAgKDB4MjAwMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4MkE2RDYpKTsvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCICovCisgICAgcmV0dXJuCisgICAgICAgICgweDM0MDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4NERCNSkgICB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBBICovCisgICAgICAgICgweDRFMDAgPD0gY29kZSAmJiBjb2RlIDw9IDB4OUZDQikgICB8fCAvKiBDSksgSWRlb2dyYXBoICovCisgICAgICAgICgweDIwMDAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJBNkQ2KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBCICovCisgICAgICAgICgweDJBNzAwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCNzM0KSB8fCAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBDICovCisgICAgICAgICgweDJCNzQwIDw9IGNvZGUgJiYgY29kZSA8PSAweDJCODFEKTsgICAvKiBDSksgSWRlb2dyYXBoIEV4dGVuc2lvbiBEICovCiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyNDAsMTEgKzEyNDEsMTEgQEAKICJUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIHdoaWNoXG5cCiBkZWZpbmVzIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBpblxuXAogdGhpcyBkYXRhYmFzZSBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZURhdGEudHh0IGZpbGUgdmVyc2lvblxuXAotNS4xLjAgd2hpY2ggaXMgcHVibGljYWxseSBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAudW5pY29kZS5vcmcvLlxuXAorNS4yLjAgd2hpY2ggaXMgcHVibGljYWxseSBhdmFpbGFibGUgZnJvbSBmdHA6Ly9mdHAudW5pY29kZS5vcmcvLlxuXAogXG5cCiBUaGUgbW9kdWxlIHVzZXMgdGhlIHNhbWUgbmFtZXMgYW5kIHN5bWJvbHMgYXMgZGVmaW5lZCBieSB0aGVcblwKLVVuaWNvZGVEYXRhIEZpbGUgRm9ybWF0IDUuMS4wIChzZWVcblwKLWh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzUuMS4wL3VjZC9VQ0QuaHRtbCkuIik7CitVbmljb2RlRGF0YSBGaWxlIEZvcm1hdCA1LjIuMCAoc2VlXG5cCitodHRwOi8vd3d3LnVuaWNvZGUub3JnL3JlcG9ydHMvdHI0NC90cjQ0LTQuaHRtbCkuIik7CiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiB1bmljb2RlZGF0YW1vZHVsZSA9IHsKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaCBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaAppbmRleCBkNDQ3MzE5Li44ZTJlNzI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKKysrIGIvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCkBAIC0xLDYgKzEsNiBAQAotLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMi42ICovCisvKiB0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBUb29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weSAzLjIgKi8KIAotI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjUuMS4wIgorI2RlZmluZSBVTklEQVRBX1ZFUlNJT04gIjYuMC4wIgogLyogYSBsaXN0IG9mIHVuaXF1ZSBkYXRhYmFzZSByZWNvcmRzICovCiBjb25zdCBfUHlVbmljb2RlX0RhdGFiYXNlUmVjb3JkIF9QeVVuaWNvZGVfRGF0YWJhc2VfUmVjb3Jkc1tdID0gewogICAgIHswLCAwLCAwLCAwLCAwLCAwfSwKQEAgLTEzNCw3ICsxMzQsNiBAQAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMTM2fSwKICAgICB7NywgMCwgOSwgMCwgNSwgMH0sCiAgICAgezMwLCAwLCA1LCAwLCA1LCAwfSwKLSAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKICAgICB7NCwgMzYsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMCwgMTQsIDAsIDUsIDB9LAogICAgIHs3LCAwLCA0LCAwLCA1LCAwfSwKQEAgLTE3OCw5ICsxNzcsMTEgQEAKICAgICB7OCwgMCwgMSwgMCwgNSwgMH0sCiAgICAgezE0LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7NSwgOSwgMSwgMCwgNSwgMH0sCisgICAgezQsIDEsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMjM0LCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDIxNCwgMTQsIDAsIDUsIDB9LAogICAgIHs0LCAyMDIsIDE0LCAwLCA1LCAwfSwKKyAgICB7NCwgMjMzLCAxNCwgMCwgNSwgMH0sCiAgICAgezIsIDAsIDEsIDAsIDUsIDEzOH0sCiAgICAgezIsIDAsIDEsIDAsIDUsIDE3MH0sCiAgICAgezMsIDAsIDEsIDAsIDUsIDEwfSwKQEAgLTE4OCw2ICsxODksNyBAQAogICAgIHsyOSwgMCwgMTksIDAsIDUsIDE3MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMTcwfSwKICAgICB7MTAsIDAsIDE4LCAwLCA1LCAxMzZ9LAorICAgIHsxNCwgMCwgMTUsIDAsIDUsIDB9LAogICAgIHsxNCwgMCwgNCwgMCwgNSwgMH0sCiAgICAgezIxLCAwLCAxOSwgMCwgNCwgMH0sCiAgICAgezIxLCAwLCAxOSwgMCwgNSwgMTM2fSwKQEAgLTIxNCw5ICsyMTYsOSBAQAogICAgIHsyNywgMCwgMTksIDAsIDUsIDEzNn0sCiAgICAgezIyLCAwLCAxOSwgMSwgNSwgMTM2fSwKICAgICB7MjMsIDAsIDE5LCAxLCA1LCAxMzZ9LAorICAgIHsxOCwgMCwgMSwgMCwgNCwgMTM2fSwKICAgICB7MjgsIDAsIDExLCAwLCA1LCAxMzZ9LAogICAgIHsyOCwgMCwgMTEsIDAsIDEsIDB9LAotICAgIHs0LCAxLCAxNCwgMCwgNSwgMH0sCiAgICAgezMwLCAwLCAxOSwgMCwgNSwgMTM2fSwKICAgICB7MzAsIDAsIDE5LCAwLCA0LCAxMzZ9LAogICAgIHsxLCAwLCAxLCAwLCA0LCAxNzB9LApAQCAtMjY0LDYgKzI2Niw3IEBACiAgICAgezMwLCAwLCAxLCAwLCAyLCAwfSwKICAgICB7OSwgMCwgMSwgMCwgMiwgMTM2fSwKICAgICB7MzAsIDAsIDEsIDAsIDIsIDEzNn0sCisgICAgezMwLCAwLCAxLCAwLCA0LCAwfSwKICAgICB7OSwgMCwgMTksIDAsIDIsIDEzNn0sCiAgICAgezI5LCAwLCAxLCAwLCA1LCAwfSwKICAgICB7MTUsIDAsIDEsIDAsIDUsIDB9LApAQCAtMjcyLDYgKzI3NSw3IEBACiAgICAgezE5LCAwLCA0LCAwLCA1LCAxNzB9LAogICAgIHs0LCAyNiwgMTQsIDAsIDUsIDB9LAogICAgIHsxOSwgMCwgNCwgMCwgNSwgMTM2fSwKKyAgICB7MjksIDAsIDUsIDAsIDUsIDB9LAogICAgIHsyMywgMCwgMTksIDAsIDUsIDB9LAogICAgIHsyOCwgMCwgNSwgMCwgNSwgMTM2fSwKICAgICB7MjYsIDAsIDE5LCAwLCAyLCAxMzZ9LApAQCAtMzE0LDE3ICszMTgsMTggQEAKICAgICB7MTQsIDAsIDE5LCAwLCA1LCAwfSwKICAgICB7OCwgMCwgMTksIDAsIDUsIDB9LAogICAgIHs5LCAwLCA0LCAwLCA1LCAwfSwKKyAgICB7OSwgMCwgMTIsIDAsIDUsIDB9LAogICAgIHszMCwgMCwgMSwgMCwgNSwgMTcwfSwKICAgICB7NSwgMjE2LCAxLCAwLCA1LCAwfSwKICAgICB7NSwgMjI2LCAxLCAwLCA1LCAwfSwKICAgICB7MjcsIDAsIDEsIDAsIDUsIDEzNn0sCi0gICAgezI3LCAwLCAxLCAxLCA1LCAxMzZ9LAogICAgIHs3LCAwLCA5LCAwLCA1LCAxMzZ9LAorICAgIHszMCwgMCwgMSwgMCwgNSwgMTM2fSwKIH07CiAKIC8qIFJlaW5kZXhpbmcgb2YgTkZDIGZpcnN0IGNoYXJhY3RlcnMuICovCi0jZGVmaW5lIFRPVEFMX0ZJUlNUIDM2NwotI2RlZmluZSBUT1RBTF9MQVNUIDU0CisjZGVmaW5lIFRPVEFMX0ZJUlNUIDM3MAorI2RlZmluZSBUT1RBTF9MQVNUIDU1CiBzdHJ1Y3QgcmVpbmRleHtpbnQgc3RhcnQ7c2hvcnQgY291bnQsaW5kZXg7fTsKIHN0YXRpYyBzdHJ1Y3QgcmVpbmRleCBuZmNfZmlyc3RbXSA9IHsKICAgeyA2MCwgMiwgMH0sCkBAIC01MzAsNiArNTM1LDkgQEAKICAgeyAxMjUwNywgMCwgMzYxfSwKICAgeyAxMjUyNywgMywgMzYyfSwKICAgeyAxMjU0MSwgMCwgMzY2fSwKKyAgeyA2OTc4NSwgMCwgMzY3fSwKKyAgeyA2OTc4NywgMCwgMzY4fSwKKyAgeyA2OTc5NywgMCwgMzY5fSwKICAgezAsMCwwfQogfTsKIApAQCAtNTY1LDYgKzU3Myw3IEBACiAgIHsgNDE0MiwgMCwgNTB9LAogICB7IDY5NjUsIDAsIDUxfSwKICAgeyAxMjQ0MSwgMSwgNTJ9LAorICB7IDY5ODE4LCAwLCA1NH0sCiAgIHswLDAsMH0KIH07CiAKQEAgLTY1OCw1MDkgKzY2Nyw1MTkgQEAKIC8qIGluZGV4IHRhYmxlcyBmb3IgdGhlIGRhdGFiYXNlIHJlY29yZHMgKi8KICNkZWZpbmUgU0hJRlQgNwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5kZXgxW10gPSB7Ci0gICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE2LCAxNywgMTgsIDE5LCAKLSAgICAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAKLSAgICAzOCwgMzksIDQwLCA0MCwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDE2LCA1MCwgNTEsIDUyLCAKLSAgICAxNiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCAKLSAgICA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCAxNiwgODEsIDgyLCA4MywgODQsIDg1LCAKLSAgICA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk4LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCAKLSAgICA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTksIDEwMCwgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgCi0gICAgOTcsIDk3LCAxMDEsIDQwLCA0MCwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAxNiwgMTA5LCAxNiwgMTYsIAotICAgIDE2LCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCi0gICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIAotICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAKLSAgICAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgCi0gICAgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIAotICAgIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAxMTAsIDExMCwgMTEwLCAKLSAgICAxMTAsIDExMCwgMTEwLCAxMTEsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExNCwgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAKLSAgICAxMjYsIDEyNywgMTI4LCAxMjksIDE2LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTM1LCAxNiwgMTM2LCAxNiwgMTM3LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgNDAsIDQwLCA0MCwgNDAsIDQwLCAKLSAgICA0MCwgMTM4LCAxNiwgMTM5LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgNzUsIDE0MCwgMTQxLCAxNDIsIDE0MywgMTYsIDE0NCwgMTYsIDE0NSwgMTQ2LCAxNDcsIAotICAgIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNTMsIDE1NCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIDk3LCA5NywgOTcsIAotICAgIDk3LCA5NywgOTcsIDk3LCA5NywgMTU1LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxMTQsIDExNCwgMTE0LCAxMTQsIDE1NiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTU3LCAxNiwgMTU4LCAxNTksIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDE2MCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKLSAgICAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgCi0gICAgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxNjAsIAorICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgCisgICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgCisgICAgMzksIDQwLCA0MSwgNDEsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgCisgICAgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgCisgICAgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgMTcsIDg0LCA4NSwgODYsIDg3LCA4OCwgCisgICAgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDEsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAyLCAKKyAgICAxMDMsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDQsIDQxLCA0MSwgMTA1LCAxMDYsIDEwNywgCisgICAgMTA4LCAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAorICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKKyAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCisgICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAorICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKKyAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCisgICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE4LCAxMTksIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAKKyAgICAxMTksIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjEsIDEyMSwgMTIyLCAxMjMsIDEyNCwgCisgICAgMTI1LCAxMjYsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxNywgMTM3LCAKKyAgICAxMzgsIDEzOSwgMTQwLCAxNDEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE0MiwgMTcsIDE0MywgMTcsIDE0NCwgMTcsIAorICAgIDE0NSwgMTcsIDE0NiwgMTcsIDE3LCAxNywgMTQ3LCAxNywgMTcsIDE3LCAxNDgsIDE0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTUwLCAxNywgMTUxLCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDQxLCA0MSwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTUyLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDEsIDQxLCA0MSwgNDEsIDE1MywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE1NCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNzgsIAorICAgIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTcsIDE1OSwgMTcsIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgCisgICAgMTcsIDE3MywgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAKKyAgICAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTgyLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgCisgICAgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIAorICAgIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTAwLCAxMDAsIDEwMCwgMTgzLCAxMDAsIDE4NCwgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEyMSwgCisgICAgMTIxLCAxMjEsIDEyMSwgMTg1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxODYsIDE3LCAxODcsIAorICAgIDE4OCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTg5LCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIAorICAgIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAKKyAgICAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDEyMCwgCisgICAgMTIwLCAxMjAsIDEyMCwgMTIwLCAxMjAsIDE4OSwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgaW5kZXgyW10gPSB7CkBAIC0xMjM1LDggKzEyNTQsOCBAQAogICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDQ0LCA0NiwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIAogICAgIDM4LCA0MywgNDQsIDQ2LCAzOCwgNDMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAogICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAotICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCiAgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCiAgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgMCwgNTIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDAsIDQ2LCA0NiwgNDYsIAogICAgIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIApAQCAtMTI0OSwxMiArMTI2OCwxMiBAQAogICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAwLCAwLCAwLCAwLCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDIsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2LCAxMDYsIDEwNiwgCiAgICAgMTA2LCAwLCAwLCA3NywgNzcsIDEwNywgMTA4LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDI3LCAyNywgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCAxMTIsIDExMywgMTE0LCAxMTEsIDAsIDAsIDExMSwgMTExLCAwLCAxMTUsIDExNiwgMTE2LCAKKyAgICA4MCwgODAsIDgwLCA4MCwgMTEyLCAxMTMsIDExNCwgMTExLCAwLCAwLCAxMTEsIDExMSwgMTE1LCAxMTUsIDExNiwgMTE2LCAKICAgICAxMTYsIDExNiwgMTE2LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCiAgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAogICAgIDExNywgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTgsIDExOSwgMTIwLCAKICAgICAxMTIsIDExMywgMTE0LCAxMjEsIDEyMiwgMTIzLCAxMjMsIDEyNCwgODQsIDgwLCA4MCwgODAsIDgwLCA4MCwgODQsIDgwLCAKLSAgICA4MCwgMCwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMDgsIDEyNiwgMTI2LCAKKyAgICA4MCwgODQsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTA4LCAxMjYsIDEyNiwgCiAgICAgMTExLCAxMTUsIDExNSwgMTI3LCAxMTUsIDExNSwgMTE1LCAxMTUsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTE1LCAxMTUsIAogICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKICAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCkBAIC0xMjYyLDExICsxMjgxLDExIEBACiAgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAogICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE2LCAKICAgICAxMTUsIDExNiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTYsIDExMSwgMTE1LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTA2LCA4MSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTYsIDExMSwgMTE1LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTA2LCAyNywgCiAgICAgODAsIDgwLCA4MCwgODAsIDg0LCA4MCwgMTE3LCAxMTcsIDgwLCA4MCwgMjcsIDg0LCA4MCwgODAsIDg0LCAxMTUsIDExNSwgCiAgICAgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMTUsIDExNSwgMTE1LCAxMzAsIAogICAgIDEzMCwgMTE1LCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKLSAgICAxMTEsIDExMSwgMCwgMTMxLCAxMTUsIDEzMiwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTExLCAxMTEsIDAsIDEwNiwgMTE1LCAxMzEsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAogICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKICAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDgwLCA4NCwgODAsIDgwLCA4NCwgODAsIDgwLCA4NCwgODQsIAogICAgIDg0LCA4MCwgODQsIDg0LCA4MCwgODQsIDgwLCA4MCwgODAsIDg0LCA4MCwgODQsIDgwLCA4NCwgODAsIDg0LCA4MCwgODAsIApAQCAtMTI3NiwxNzUgKzEyOTUsMTg0IEBACiAgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAogICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKICAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCi0gICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIAotICAgIDEzMywgMTMzLCAxMzMsIDExNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0LCAxMzQsIAotICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgCisgICAgMTMyLCAxMzIsIDEzMiwgMTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAogICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODAsIDEzNSwgMTM1LCAyNywgMTM2LCAxMzYsIDEzNiwgMTM1LCAwLCAwLCAwLCAwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDg0LCA4MCwgMTM0LCAxMzQsIDI3LCAxMzUsIDEzNSwgMTM1LCAxMzQsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgODAsIDgwLCA4MCwgODAsIDEzNCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTM0LCA4MCwgODAsIDgwLCAxMzQsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCA4NCwgODQsIDg0LCAKKyAgICAwLCAwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMywgMTMzLCAxMzcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgCisgICAgMTMyLCAxMzYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgMTM4LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDEzOSwgNDcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgMTM3LCAxMzcsIDE0MCwgMCwgCi0gICAgMCwgNDcsIDgwLCA4NCwgODAsIDgwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCi0gICAgNDcsIDQ3LCAxMzMsIDEzMywgODIsIDgyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDgyLCA1MiwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMTMzLCAxMzcsIAotICAgIDEzNywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDEzNywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgNDcsIDQ3LCAxMzcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgMTMyLCAxMzYsIDEzOCwgNDcsIDEzNiwgMTM2LCAxMzYsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKKyAgICAxMzIsIDEzMiwgMTMyLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzOSwgMTM2LCAxMzYsIDQ3LCA4MCwgODQsIDgwLCA4MCwgCisgICAgMTMyLCAxMzIsIDEzMiwgMTQwLCAxNDAsIDE0MCwgMTQwLCAxNDAsIDE0MCwgMTQwLCAxNDAsIDQ3LCA0NywgMTMyLCAxMzIsIAorICAgIDgyLCA4MiwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCA4MiwgNTIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAxMzIsIDEzNiwgMTM2LCAwLCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MiwgNDcsIAorICAgIDE0MywgMTM2LCAxMzYsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMCwgMCwgMTM2LCAxMzYsIDAsIDAsIDE0NCwgMTQ0LCAxMzksIAorICAgIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDMsIDAsIDAsIDAsIDAsIDE0MCwgMTQwLCAwLCAxNDAsIDQ3LCA0NywgCisgICAgMTMyLCAxMzIsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgNDcsIDQ3LCAKKyAgICAxNDUsIDE0NSwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgNzksIDE0NSwgMCwgMCwgMCwgMCwgMCwgMTMyLCAxMzIsIAorICAgIDEzNiwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIAotICAgIDE0MywgNDcsIDE0NCwgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMCwgMTM3LCAxMzcsIDAsIDAsIDE0NSwgCi0gICAgMTQ1LCAxNDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDAsIDAsIDAsIDAsIDE0MSwgMTQxLCAwLCAxNDEsIAotICAgIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgNDcsIDQ3LCAxNDYsIDE0NiwgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgNzksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzMywgMTMzLCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMCwgMCwgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMTQxLCAwLCA0NywgMTQxLCAwLCA0NywgCi0gICAgNDcsIDAsIDAsIDE0MywgMCwgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDAsIDAsIDAsIDAsIDEzMywgMTMzLCAwLCAwLCAKLSAgICAxMzMsIDEzMywgMTQwLCAwLCAwLCAwLCAxMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDQ3LCAwLCAKLSAgICAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAotICAgIDE0MiwgMTMzLCAxMzMsIDQ3LCA0NywgNDcsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCAKLSAgICAxMzMsIDEzNywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgMCwgMCwgMTQzLCA0NywgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDAsIDEzMywgMTMzLCAKLSAgICAxMzcsIDAsIDEzNywgMTM3LCAxNDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0NywgNDcsIDEzMywgMTMzLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMTQyLCAxNDIsIDAsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzLCAxMzcsIAotICAgIDEzNywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIAotICAgIDAsIDE0MywgNDcsIDE0NCwgMTMzLCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMCwgMTM3LCAxNDUsIDAsIDAsIDE0NSwgCi0gICAgMTQ1LCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ0LCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMCwgNDcsIAotICAgIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgNzksIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzMsIDQ3LCAwLCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDEzOCwgNDcsIDAsIDAsIDAsIDQ3LCAKKyAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDE0MCwgMCwgNDcsIDE0MCwgMCwgNDcsIDQ3LCAwLCAwLCAKKyAgICAxNDIsIDAsIDEzNiwgMTM2LCAxMzYsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAxMzIsIDEzMiwgMCwgMCwgMTMyLCAxMzIsIAorICAgIDEzOSwgMCwgMCwgMCwgMTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDAsIDE0MCwgMTQwLCA0NywgMCwgMTQwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDEzMiwgCisgICAgMTMyLCA0NywgNDcsIDQ3LCAxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzYsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MiwgCisgICAgNDcsIDEzNiwgMTM2LCAxMzYsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAxMzIsIDEzMiwgMTM2LCAwLCAxMzYsIAorICAgIDEzNiwgMTM5LCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKKyAgICAxMzIsIDEzMiwgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAwLCAxNDUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTM2LCAxMzYsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAxNDIsIDQ3LCAxNDMsIAorICAgIDEzMiwgMTM2LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDAsIDAsIDEzNiwgMTQ0LCAwLCAwLCAxNDQsIDE0NCwgMTM5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNDcsIDE0MywgMCwgMCwgMCwgMCwgMTQwLCAxNDAsIDAsIDQ3LCA0NywgNDcsIDEzMiwgCisgICAgMTMyLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDc5LCA0NywgMTQ2LCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMyLCA0NywgMCwgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAxMzcsIDQ3LCAwLCAwLCAwLCA0NywgCiAgICAgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMTQ0LCAxMzcsIDEzMywgCi0gICAgMTM3LCAxMzcsIDAsIDAsIDAsIDEzNywgMTM3LCAxMzcsIDAsIDE0NSwgMTQ1LCAxNDUsIDE0MCwgMCwgMCwgNDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDcsIDE0NywgMTQ3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAxNDYsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzcsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxNDMsIDEzNiwgMTMyLCAKKyAgICAxMzYsIDEzNiwgMCwgMCwgMCwgMTM2LCAxMzYsIDEzNiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTM5LCAwLCAwLCA0NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0NiwgMTQ2LCAxNDYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDE0NSwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMTM2LCAxMzYsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgMCwgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIAotICAgIDEzNywgMTM3LCAwLCAxMzMsIDEzMywgMTQ5LCAwLCAxMzMsIDEzMywgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE1MCwgMTUxLCAwLCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyLCAxNTIsIAotICAgIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCA3OSwgMCwgMCwgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDEzMiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAKKyAgICAxMzYsIDEzNiwgMCwgMTMyLCAxMzIsIDE0OCwgMCwgMTMyLCAxMzIsIDEzMiwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNDksIDE1MCwgMCwgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDEzMiwgMTMyLCAwLCAwLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MSwgMTUxLCAKKyAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgNzksIDAsIDAsIDEzNiwgMTM2LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTQzLCA0NywgMTM3LCAxNTMsIDE0NSwgMTM3LCAKLSAgICAxNDQsIDEzNywgMTM3LCAwLCAxNTMsIDE0NSwgMTQ1LCAwLCAxNDUsIDE0NSwgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgNDcsIDQ3LCAxMzMsIDEzMywgMCwgMCwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNywgMTM3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDE0MiwgNDcsIDEzNiwgMTUyLCAxNDQsIDEzNiwgCisgICAgMTQzLCAxMzYsIDEzNiwgMCwgMTUyLCAxNDQsIDE0NCwgMCwgMTQ0LCAxNDQsIDEzMiwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNDMsIDE0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDAsIDQ3LCA0NywgMTMyLCAxMzIsIDAsIDAsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDEzNiwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICAwLCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCA0NywgMTQ0LCAxMzcsIDEzNywgMTMzLCAxMzMsIAotICAgIDEzMywgMTMzLCAwLCAxMzcsIDEzNywgMTM3LCAwLCAxNDUsIDE0NSwgMTQ1LCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAxMzMsIDEzMywgMCwgMCwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCAKLSAgICA3OSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTM3LCAxMzcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCAxNDMsIDEzNiwgMTM2LCAxMzIsIDEzMiwgCisgICAgMTMyLCAxMzIsIDAsIDEzNiwgMTM2LCAxMzYsIDAsIDE0NCwgMTQ0LCAxNDQsIDEzOSwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAxMzIsIDEzMiwgMCwgMCwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAwLCAwLCAwLCAKKyAgICA3OSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTM2LCAxMzYsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMTU0LCAwLCAwLCAwLCAwLCAxNDQsIDEzNywgMTM3LCAxMzMsIDEzMywgMTMzLCAKLSAgICAwLCAxMzMsIDAsIDEzNywgMTM3LCAxNDUsIDEzNywgMTQ1LCAxNDUsIDE0NSwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzcsIDEzNywgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAxNTMsIDAsIDAsIDAsIDAsIDE0MywgMTM2LCAxMzYsIDEzMiwgMTMyLCAxMzIsIAorICAgIDAsIDEzMiwgMCwgMTM2LCAxMzYsIDE0NCwgMTM2LCAxNDQsIDE0NCwgMTQ0LCAxNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgMTM2LCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgMTU1LCAKLSAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDE1NiwgMTU2LCAxNDAsIDAsIDAsIDAsIDAsIDE0NiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNTIsIDEzMywgMTU3LCAxNTcsIDE1NywgMTU3LCAxMzMsIDEzMywgMTMzLCA4MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMyLCA0NywgMTU0LCAKKyAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDE1NSwgMTU1LCAxMzksIDAsIDAsIDAsIDAsIDE0NSwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNTIsIDEzMiwgMTU2LCAxNTYsIDE1NiwgMTU2LCAxMzIsIDEzMiwgMTMyLCA4MiwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgCiAgICAgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgCi0gICAgMCwgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgMTU1LCAxMzMsIDEzMywgMTMzLCAxMzMsIDE1OCwgCi0gICAgMTU4LCAwLCAxMzMsIDEzMywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNTIsIDAsIDE1OSwgMTU5LCAxNTksIAotICAgIDE1OSwgMTMzLCAxMzMsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgCi0gICAgMCwgMTU1LCAxNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDEzMiwgNDcsIDE1NCwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxNTcsIAorICAgIDE1NywgMCwgMTMyLCAxMzIsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDUyLCAwLCAxNTgsIDE1OCwgMTU4LCAKKyAgICAxNTgsIDEzMiwgMTMyLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIAorICAgIDAsIDE1NCwgMTU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNzksIDc5LCA3OSwgODIsIDgyLCA4MiwgODIsIAotICAgIDgyLCA4MiwgODIsIDgyLCAxNjAsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDc5LCA3OSwgNzksIDc5LCA3OSwgODQsIDg0LCAKLSAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAotICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgNzksIDg0LCA3OSwgODQsIDc5LCAKLSAgICAxNjEsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTM3LCAxMzcsIDQ3LCA0NywgNDcsIDE0MSwgNDcsIDQ3LCA0NywgNDcsIDAsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCAxNDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE0MSwgNDcsIDQ3LCAKLSAgICA0NywgMCwgMCwgMCwgMCwgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjYsIDE2NiwgMTY4LCAxNjYsIDE2OCwgMTY1LCAxNjUsIAotICAgIDE2NSwgMTY1LCAxMzMsIDEzNywgMTY1LCAxNjYsIDgwLCA4MCwgMTQwLCA4MiwgODAsIDgwLCA0NywgNDcsIDQ3LCA0NywgMCwgCi0gICAgMCwgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTY2LCAxMzMsIDEzMywgMTMzLCAxMzMsIDAsIDEzMywgMTMzLCAxMzMsIDEzMywgCi0gICAgMTY2LCAxMzMsIDEzMywgMTMzLCAxMzMsIDE2NiwgMTMzLCAxMzMsIDEzMywgMTMzLCAxNjYsIDEzMywgMTMzLCAxMzMsIAotICAgIDEzMywgMTY2LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAKLSAgICAxNjYsIDEzMywgMTMzLCAxMzMsIDAsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgODQsIDc5LCA3OSwgNzksIAotICAgIDc5LCA3OSwgNzksIDAsIDc5LCA3OSwgODIsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDgyLCA4MiwgODIsIDgyLCAxNTksIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDc5LCA3OSwgNzksIDc5LCA3OSwgODQsIDg0LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgNzksIDg0LCA3OSwgODQsIDc5LCAKKyAgICAxNjAsIDE2MSwgMTYyLCAxNjEsIDE2MiwgMTM2LCAxMzYsIDQ3LCA0NywgNDcsIDE0MCwgNDcsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxNDAsIDQ3LCA0NywgNDcsIDQ3LCAxNDAsIDQ3LCA0NywgNDcsIDQ3LCAxNDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCAxNDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE0MCwgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMTYzLCAxNjQsIDE2NSwgMTY2LCAxNjUsIDE2NSwgMTY3LCAxNjUsIDE2NywgMTY0LCAxNjQsIAorICAgIDE2NCwgMTY0LCAxMzIsIDEzNiwgMTY0LCAxNjUsIDgwLCA4MCwgMTM5LCA4MiwgODAsIDgwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDE2NSwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAxMzIsIDEzMiwgCisgICAgMTMyLCAxMzIsIDE2NSwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxNjUsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTY1LCAxMzIsIAorICAgIDEzMiwgMTMyLCAxMzIsIDE2NSwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAKKyAgICAxMzIsIDEzMiwgMTY1LCAxMzIsIDEzMiwgMTMyLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDg0LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCAwLCA3OSwgNzksIDgyLCA4MiwgODIsIDgyLCA4MiwgNzksIDc5LCA3OSwgNzksIDgyLCAKKyAgICA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzgsIDQ3LCA0NywgNDcsIDQ3LCAxMzcsIDEzNywgMTMzLCAKLSAgICAxNDgsIDEzMywgMTMzLCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxNDMsIDEzNywgMTQwLCAxNDAsIDEzNywgCi0gICAgMTM3LCAxMzMsIDEzMywgNDcsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgODIsIAotICAgIDgyLCA4MiwgODIsIDgyLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzMywgMTMzLCA0NywgNDcsIAotICAgIDQ3LCA0NywgMTMzLCAxMzMsIDEzMywgNDcsIDEzNywgMTM3LCAxMzcsIDQ3LCA0NywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzNywgMTM3LCA0NywgNDcsIDQ3LCAxMzMsIDEzMywgMTMzLCAxMzMsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDEzNywgMTM3LCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzNywgODQsIDQ3LCAxMzcsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMCwgMCwgMCwgMCwgNzksIDc5LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAKKyAgICAxMzYsIDEzMiwgMTQ3LCAxMzIsIDEzMiwgMTM2LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTQyLCAxMzYsIDEzOSwgCisgICAgMTM5LCAxMzYsIDEzNiwgMTMyLCAxMzIsIDQ3LCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNiwgMTM2LCAxMzIsIDEzMiwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDEzMiwgMTMyLCAxMzIsIDQ3LCAxMzYsIDEzNiwgMTM2LCA0NywgNDcsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgNDcsIDQ3LCA0NywgMTMyLCAxMzIsIDEzMiwgMTMyLCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMyLCAxMzYsIDEzNiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDg0LCA0NywgMTM2LCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDEzNiwgMTM2LCAxMzYsIDEzMiwgNzksIDc5LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCiAgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDgyLCA1MCwgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODIsIDUwLCAwLCAwLCAwLCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCA0NywgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAorICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OSwgMTY5LCAxNjksIDE2OSwgCiAgICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTY5LCA0NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIAotICAgIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgCi0gICAgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgCisgICAgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgODAsIDc5LCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgCi0gICAgODIsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKLSAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgNzksIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgCisgICAgMTQ2LCAxNDYsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA4MywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCkBAIC0xNDY0LDE3NiArMTQ5MiwxOTIgQEAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgyLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgMTYyLCAxNjMsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTcwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE2MSwgCisgICAgMTYyLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MiwgODIsIDgyLCAxNzIsIDE3MiwgMTcyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDEzMywgMTMzLCAxNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDEzMywgMTMzLCAxNDAsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCAxMzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCAwLCAxMzMsIDEzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODIsIDgyLCA4MiwgMTcxLCAxNzEsIDE3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCAxMzIsIDEzMiwgMTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICAxMzIsIDEzMiwgMTM5LCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgNDcsIDQ3LCA0NywgMCwgMTMyLCAxMzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE3MywgMTczLCAKLSAgICAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgCi0gICAgMTM3LCAxMzcsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIAotICAgIDE0MCwgMTMzLCA4MiwgODIsIDgyLCA1MiwgODIsIDgyLCA4MiwgMTQ2LCA0NywgODAsIDAsIDAsIDE0MiwgMTQyLCAxNDIsIAotICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyLCAxNTIsIDE1MiwgMTUyLCAKLSAgICAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgCi0gICAgMTM2LCA4MywgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzMsIDEzMywgMTMzLCAxNzEsIDAsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzIsIDE3MiwgMTM2LCAKKyAgICAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgCisgICAgMTM2LCAxMzIsIDEzNiwgMTM2LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzksIAorICAgIDEzMiwgODIsIDgyLCA4MiwgNTIsIDgyLCA4MiwgODIsIDE0NSwgNDcsIDgwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAKKyAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgODMsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTMyLCAxMzIsIDEzMiwgMTcwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA4NiwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzMsIDEzMywgMTM3LCAxMzcsIDEzNywgMCwgMCwgMCwgMCwgMTM3LCAxMzcsIDEzMywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzNywgODUsIDgwLCA4NCwgMCwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDEzNiwgMTM2LCAxNDIsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA4NiwgNDcsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDEzNiwgMTM2LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMTMyLCAxMzIsIDEzMiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzIsIAorICAgIDEzMiwgMTM2LCAxMzYsIDEzNiwgMCwgMCwgMCwgMCwgMTM2LCAxMzYsIDEzMiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgODUsIDgwLCA4NCwgMCwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDEzNSwgMTM1LCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEzNiwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0NiwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MCwgODQsIDEzNywgMTM3LCAxMzcsIDAsIDAsIAotICAgIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCAxMzgsIDQ3LCAKLSAgICAxMzgsIDQ3LCA0NywgNDcsIDEzOCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDI3LCAyNywgMjcsIDI3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDgwLCA4NCwgMTM2LCAxMzYsIDEzNiwgMCwgMCwgODIsIDgyLCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDE0MywgMTQ0LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTQ1LCAxMzMsIDE0NSwgMTM3LCAxMzcsIDE0NSwgCi0gICAgMTQ1LCAxMzMsIDE0NSwgMTc0LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMTQyLCAxNDIsIAotICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgNzksIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDgwLCA4NCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDAsIDAsIDAsIDEzMywgMTMzLCAxMzcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDEzNywgCi0gICAgMTMzLCAxMzMsIDE3NCwgMCwgMCwgMCwgNDcsIDQ3LCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgCi0gICAgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAKKyAgICAxMzIsIDEzNiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAwLCAxMzksIDEzNiwgMTMyLCAxMzYsIDEzNiwgCisgICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzMiwgMTMyLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDg0LCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIAorICAgIDUyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzIsIAorICAgIDEzMiwgMTM2LCA0NywgMTM3LCA0NywgMTM3LCA0NywgMTM3LCA0NywgMTM3LCA0NywgMTM3LCA0NywgNDcsIDQ3LCAxMzcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgCi0gICAgMTMzLCAxMzMsIDEzNywgMTM3LCAxMzMsIDE0MywgMCwgMCwgMCwgODIsIDgyLCA4MiwgODIsIDgyLCAxNDIsIDE0MiwgMTQyLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDE0MiwgMTQyLCAxNDIsIAotICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQyLCAxNDMsIAorICAgIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxNDQsIDEzMiwgMTQ0LCAxMzYsIDEzNiwgMTQ0LCAxNDQsIDEzMiwgMTQ0LCAKKyAgICAxNzMsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgODAsIDg0LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgMCwgMCwgMCwgMTMyLCAxMzIsIDEzNiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIDgyLCA4MiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzIsIDEzMiwgMTczLCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCAxNDIsIDEzNiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzYsIDEzMiwgMTM2LCAxMzIsIDEzMiwgCisgICAgMTMyLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNiwgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTM2LCAKKyAgICAxMzYsIDEzMiwgMTQyLCAwLCAwLCAwLCA4MiwgODIsIDgyLCA4MiwgODIsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MiwgCisgICAgNTIsIDUyLCA1MiwgNTIsIDUyLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgyLCAxNzQsIAorICAgIDg0LCA4NCwgODQsIDg0LCA4NCwgODAsIDgwLCA4NCwgODQsIDg0LCA4NCwgODAsIDEzNiwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCA0NywgNDcsIDQ3LCA0NywgODQsIDQ3LCA0NywgNDcsIDQ3LCAxMzYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKICAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNTAsIDUwLCA1MCwgNTIsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDUwLCAKICAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNTAsIDUwLCA1MCwgNTIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTIsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUyLCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNTAsIDUwLCAKICAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDUwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKLSAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDgwLCA4MCwgODQsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODAsIDgwLCAKLSAgICAxNzUsIDE3NiwgODQsIDE3NywgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4NCwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKLSAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCAKLSAgICA0MywgNDMsIDM1LCAxNzgsIDQ2LCA0NiwgNDQsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0MywgNDMsIDQzLCA0MywgCi0gICAgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCi0gICAgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgCi0gICAgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAKLSAgICAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDAsIDM4LCA0MywgNDMsIAotICAgIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE3OSwgNDMsIDE3OSwgCi0gICAgNDMsIDE3OSwgNDMsIDE3OSwgNDMsIDE3OSwgNDMsIDE3OSwgNDMsIDE3OSwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCAKLSAgICA0MywgNDMsIDQzLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgNDMsIDQzLCA0MywgNDMsIDQzLCAKLSAgICA0MywgNDMsIDQzLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgNDMsIDQzLCA0MywgNDMsIDQzLCAKLSAgICA0MywgNDMsIDQzLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgMTgwLCAxODAsIDE4MCwgNDMsIDQzLCA0MywgNDMsIDQzLCAKLSAgICAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MSwgMTgwLCA1NywgMTc5LCA1NywgNTcsIDc1LCA0MywgNDMsIDQzLCAwLCA0MywgCi0gICAgNDMsIDM4LCAxODEsIDM4LCAxODEsIDE4MCwgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgMTc5LCAwLCAwLCA0MywgNDMsIDM4LCAKLSAgICAzOCwgMzgsIDE4MSwgMCwgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgMTc5LCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgCi0gICAgMTgxLCAzOCwgNzUsIDE4MiwgMTgyLCAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODEsIDM4LCAxODEsIAotICAgIDE4MCwgMTgyLCA1NywgMCwgMTgzLCAxODMsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIDE4NCwgMTg0LCAxODQsIAotICAgIDEzMSwgMTMxLCAxMzEsIDE3MywgMTg1LCAxODYsIDE4NywgODMsIDE4NiwgMTg2LCAxODYsIDIyLCAxODgsIDE4OSwgMTkwLCAKLSAgICAxOTEsIDE5MiwgMTg5LCAxOTAsIDE5MSwgMTkyLCAyMiwgMjIsIDIyLCAxMzYsIDE5MywgMTkzLCAxOTMsIDIyLCAxOTQsIAotICAgIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIxLCAyMDEsIDEwOCwgMjAxLCAyMDIsIDIwMywgMjIsIDE4OCwgMTg4LCAKLSAgICAxMzYsIDI5LCAzNiwgMjIsIDE4OCwgMTM2LCAxOTMsIDIwNCwgMjA0LCAxMzYsIDEzNiwgMTM2LCAyMDUsIDE2MiwgMTYzLCAKLSAgICAxODgsIDE4OCwgMTg4LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgNzcsIDEzNiwgMjA0LCAxMzYsIAotICAgIDEzNiwgMTg4LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDE4NCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDAsIDAsIDAsIDAsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDIwNiwgMzUsIDAsIDAsIDM0LCAyMDYsIAotICAgIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA3LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDI4LCAyMDYsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAyMDYsIDIwNiwgMjA2LCAyMDYsIDIwNiwgMjA3LCAyMDcsIDIwOCwgMjA5LCAyMTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAotICAgIDIxMSwgMjEyLCAxNDYsIDE0NiwgMjMsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDgwLCA4MCwgMjEzLCAyMTMsIDgwLCA4MCwgODAsIDgwLCAyMTMsIDIxMywgMjEzLCA4MCwgODAsIDgxLCA4MSwgODEsIAotICAgIDgxLCA4MCwgODEsIDgxLCA4MSwgMjEzLCAyMTMsIDgwLCA4NCwgODAsIDIxMywgMjEzLCA4NCwgODQsIDg0LCA4NCwgODAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxNCwgMjE0LCA0OCwgMjE1LCAyNywgMjE1LCAKLSAgICAyMTQsIDQ4LCAyNywgMjE1LCAzNSwgNDgsIDQ4LCA0OCwgMzUsIDM1LCA0OCwgNDgsIDQ4LCAyOCwgMjcsIDQ4LCAyMTUsIAotICAgIDI3LCAyNywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAyNywgMjcsIDIxNCwgMjE1LCAyMTUsIDI3LCA0OCwgMjcsIDIxNiwgMjcsIAotICAgIDQ4LCAyNywgMTgxLCAyMTYsIDQ4LCA0OCwgMjE3LCAzNSwgNDgsIDQ4LCA0NCwgNDgsIDM1LCAxNTUsIDE1NSwgMTU1LCAKLSAgICAxNTUsIDM1LCAyNywgMjE0LCAzNSwgMzUsIDQ4LCA0OCwgMjE4LCA3NywgNzcsIDc3LCA3NywgNDgsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAyNywgNzcsIDI3LCAyNywgNDYsIDc5LCAwLCAwLCAwLCAzNywgMzcsIDIxOSwgMjE5LCAyMTksIDIxOSwgMjE5LCAKLSAgICAyMTksIDM3LCAzNywgMzcsIDM3LCAyMTksIDIyMCwgMjIwLCAyMjAsIDIyMCwgMjIwLCAyMjAsIDIyMCwgMjIwLCAyMjAsIAotICAgIDIyMCwgMjIwLCAyMjAsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIwLCAyMjAsIDIyMCwgMjIwLCAyMjAsIDIyMCwgMjIwLCAKLSAgICAyMjAsIDIyMCwgMjIwLCAyMjEsIDIyMSwgMjIxLCAyMjEsIDIyMSwgMjIxLCAxNzIsIDE3MiwgMTcyLCA0NCwgNDYsIDE3MiwgCi0gICAgMTcyLCAxNzIsIDE3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAyNSwgMjUsIDI1LCAyNSwgCi0gICAgMjUsIDIyMiwgMjIyLCAyNywgMjcsIDI3LCAyNywgNzcsIDI3LCAyNywgNzcsIDI3LCAyNywgNzcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyMjIsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDIyMywgMjIyLCAKLSAgICAyMjIsIDI3LCAyNywgNDAsIDI3LCA0MCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDQwLCAyMjQsIDIyNSwgMjI1LCAKLSAgICAyMjYsIDc3LCA3NywgNDAsIDIyNSwgMjI2LCAyMjQsIDIyNSwgMjI2LCAyMjQsIDc3LCA0MCwgNzcsIDIyNSwgMjI3LCAyMjgsIAotICAgIDc3LCAyMjUsIDIyNCwgNzcsIDc3LCA3NywgMjI1LCAyMjQsIDIyNCwgMjI1LCA0MCwgMjI1LCAyMjUsIDIyNCwgMjI0LCA0MCwgCi0gICAgMjI2LCA0MCwgMjI2LCA0MCwgNDAsIDQwLCA0MCwgMjI1LCAyMjksIDIxOCwgMjI1LCAyMTgsIDIxOCwgMjI0LCAyMjQsIAotICAgIDIyNCwgNDAsIDQwLCA0MCwgNDAsIDc3LCAyMjQsIDc3LCAyMjQsIDIyNSwgMjI1LCAyMjQsIDIyNCwgMjI0LCAyMjYsIDIyNCwgCi0gICAgMjI0LCAyMjYsIDIyNCwgMjI0LCAyMjYsIDIyNSwgMjI2LCAyMjQsIDIyNCwgMjI1LCA3NywgNzcsIDc3LCA3NywgNzcsIAotICAgIDIyNSwgMjI0LCAyMjQsIDIyNCwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCAyMzAsIDQwLCAKLSAgICAyMjYsIDc3LCAyMjUsIDIyNSwgMjI1LCAyMjUsIDIyNCwgMjI0LCAyMjUsIDIyNSwgNzcsIDIyMiwgMjMwLCAyMzAsIDIyNiwgCi0gICAgMjI2LCAyMjQsIDIyNCwgMjI2LCAyMjYsIDIyNCwgMjI0LCAyMjYsIDIyNiwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIAotICAgIDIyNCwgMjI2LCAyMjYsIDIyNSwgMjI1LCAyMjYsIDIyNiwgMjI1LCAyMjUsIDIyNiwgMjI2LCAyMjQsIDIyNCwgMjI0LCA3NywgCi0gICAgNzcsIDIyNCwgMjI0LCAyMjQsIDIyNCwgNzcsIDc3LCA0MCwgNzcsIDc3LCAyMjQsIDQwLCA3NywgNzcsIDc3LCA3NywgNzcsIAotICAgIDc3LCA3NywgNzcsIDIyNCwgMjI0LCA3NywgNDAsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNiwgMjI2LCAKLSAgICAyMjYsIDIyNiwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgNzcsIDc3LCA3NywgNzcsIAotICAgIDc3LCAyMjQsIDIyNSwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCAKLSAgICAyMjQsIDc3LCA3NywgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI2LCAKLSAgICAyMjYsIDIyNiwgMjI2LCA3NywgNzcsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjI0LCAyMjQsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMzEsIDIzMiwgMjcsIDI3LCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDgwLCAKKyAgICA4MCwgODQsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODAsIDgwLCAxNzUsIDE3NiwgODQsIDE3NywgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE3OCwgODQsIDgwLCA4NCwgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIAorICAgIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxNzksIDQ2LCAKKyAgICA0NiwgNDQsIDQ2LCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCAKKyAgICA0MywgMzgsIDQzLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAKKyAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMCwgMCwgMzgsIDM4LCAzOCwgMzgsIAorICAgIDM4LCAzOCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgCisgICAgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgCisgICAgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgCisgICAgNDMsIDQzLCA0MywgNDMsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDAsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgCisgICAgNDMsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgCisgICAgNDMsIDE4MCwgNDMsIDE4MCwgNDMsIDE4MCwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIAorICAgIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIAorICAgIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODEsIAorICAgIDE4MSwgMTgxLCAxODEsIDE4MSwgMTgxLCAxODEsIDE4MSwgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgCisgICAgMzgsIDE4MiwgMTgxLCA1NywgMTgwLCA1NywgNTcsIDc1LCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODIsIDM4LCAKKyAgICAxODIsIDE4MSwgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgMTgwLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MiwgMCwgCisgICAgNzUsIDc1LCA3NSwgNDMsIDQzLCA0MywgMTgwLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgyLCAzOCwgNzUsIAorICAgIDE4MywgMTgzLCAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODIsIDM4LCAxODIsIDE4MSwgMTgzLCA1NywgMCwgCisgICAgMTg0LCAxODQsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NSwgMTg1LCAxODUsIDE4NiwgMTg2LCAxODYsIAorICAgIDE3MiwgMTg3LCAxODgsIDE4OSwgODMsIDE4OCwgMTg4LCAxODgsIDIyLCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTkxLCAKKyAgICAxOTIsIDE5MywgMTk0LCAyMiwgMjIsIDIyLCAxMzUsIDE5NSwgMTk1LCAxOTUsIDIyLCAxOTYsIDE5NywgMTk4LCAxOTksIAorICAgIDIwMCwgMjAxLCAyMDIsIDIxLCAyMDMsIDEwOCwgMjAzLCAyMDQsIDIwNSwgMjIsIDE5MCwgMTkwLCAxMzUsIDI5LCAzNiwgCisgICAgMjIsIDE5MCwgMTM1LCAxOTUsIDIwNiwgMjA2LCAxMzUsIDEzNSwgMTM1LCAyMDcsIDE2MSwgMTYyLCAxOTAsIDE5MCwgMTkwLCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgNzcsIDEzNSwgMjA2LCAxMzUsIDEzNSwgMTkwLCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE4NSwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDIwOCwgNTAsIDAsIDAsIDM0LCAyMDgsIDIwOCwgMjA4LCAyMDgsIAorICAgIDIwOCwgMjA5LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjA4LCAzNCwgMzQsIDM0LCAzNCwgMjA4LCAyMDgsIDIwOCwgCisgICAgMjA4LCAyMDgsIDIwOSwgMjA5LCAyMTAsIDIxMSwgMjEyLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDIxNCwgCisgICAgMjE1LCAxNDUsIDE0NSwgMjMsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAxNDUsIDE0NSwgMTQ1LCAKKyAgICAxNDUsIDE0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODAsIDgwLCAxNzQsIDE3NCwgODAsIDgwLCA4MCwgODAsIDE3NCwgMTc0LCAxNzQsIDgwLCA4MCwgODEsIDgxLCA4MSwgCisgICAgODEsIDgwLCA4MSwgODEsIDgxLCAxNzQsIDE3NCwgODAsIDg0LCA4MCwgMTc0LCAxNzQsIDg0LCA4NCwgODQsIDg0LCA4MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE2LCAyMTYsIDQ4LCAyMTcsIDI3LCAyMTcsIAorICAgIDIxNiwgNDgsIDI3LCAyMTcsIDM1LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDI4LCAyNywgNDgsIDIxNywgCisgICAgMjcsIDc3LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDI3LCAyNywgMjE2LCAyMTcsIDIxNywgMjcsIDQ4LCAyNywgMjE4LCAyNywgCisgICAgNDgsIDI3LCAxODIsIDIxOCwgNDgsIDQ4LCAyMTksIDM1LCA0OCwgNDgsIDQ0LCA0OCwgMzUsIDE1NCwgMTU0LCAxNTQsIAorICAgIDE1NCwgMzUsIDI3LCAyMTYsIDM1LCAzNSwgNDgsIDQ4LCAyMjAsIDc3LCA3NywgNzcsIDc3LCA0OCwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDI3LCA3NywgMjcsIDI3LCA0NiwgNzksIDIyMSwgMjIxLCAyMjEsIDM3LCAzNywgMjIxLCAyMjEsIDIyMSwgMjIxLCAKKyAgICAyMjEsIDIyMSwgMzcsIDM3LCAzNywgMzcsIDIyMSwgMjIyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIAorICAgIDIyMiwgMjIyLCAyMjIsIDIyMiwgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMiwgMjIyLCAKKyAgICAyMjIsIDIyMiwgMjIyLCAyMjIsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDE3MSwgMTcxLCAxNzEsIDQ0LCA0NiwgCisgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAzNywgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDIyNCwgMjI0LCAyNywgMjcsIDI3LCAyNywgNzcsIDI3LCAyNywgNzcsIDI3LCAyNywgNzcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyMjQsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDIyNSwgCisgICAgMjI0LCAyMjQsIDI3LCAyNywgNDAsIDI3LCA0MCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDQwLCAyMjYsIDIyNywgCisgICAgMjI3LCAyMjgsIDc3LCA3NywgNDAsIDIyNywgMjI4LCAyMjYsIDIyNywgMjI4LCAyMjYsIDc3LCA0MCwgNzcsIDIyNywgMjI5LCAKKyAgICAyMzAsIDc3LCAyMjcsIDIyNiwgNzcsIDc3LCA3NywgMjI3LCAyMjYsIDIyNiwgMjI3LCA0MCwgMjI3LCAyMjcsIDIyNiwgCisgICAgMjI2LCA0MCwgMjI4LCA0MCwgMjI4LCA0MCwgNDAsIDQwLCA0MCwgMjI3LCAyMzEsIDIyMCwgMjI3LCAyMjAsIDIyMCwgMjI2LCAKKyAgICAyMjYsIDIyNiwgNDAsIDQwLCA0MCwgNDAsIDc3LCAyMjYsIDc3LCAyMjYsIDIyNywgMjI3LCAyMjYsIDIyNiwgMjI2LCAyMjgsIAorICAgIDIyNiwgMjI2LCAyMjgsIDIyNiwgMjI2LCAyMjgsIDIyNywgMjI4LCAyMjYsIDIyNiwgMjI3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDIyNywgMjI2LCAyMjYsIDIyNiwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMzIsIDQwLCAKKyAgICAyMjgsIDc3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNiwgMjI2LCAyMjcsIDIyNywgNzcsIDIyNCwgMjMyLCAyMzIsIDIyOCwgCisgICAgMjI4LCAyMjYsIDIyNiwgMjI4LCAyMjgsIDIyNiwgMjI2LCAyMjgsIDIyOCwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIAorICAgIDIyNiwgMjI4LCAyMjgsIDIyNywgMjI3LCAyMjgsIDIyOCwgMjI3LCAyMjcsIDIyOCwgMjI4LCAyMjYsIDIyNiwgMjI2LCA3NywgCisgICAgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgNzcsIDc3LCA0MCwgNzcsIDc3LCAyMjYsIDQwLCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDIyNiwgMjI2LCA3NywgNDAsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyOCwgMjI4LCAKKyAgICAyMjgsIDIyOCwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCAyMjYsIDIyNywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMjYsIDIyNiwgMjI2LCAKKyAgICAyMjYsIDc3LCA3NywgMjI2LCAyMjYsIDc3LCA3NywgNzcsIDc3LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIAorICAgIDIyNiwgMjI2LCAyMjYsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI4LCAKKyAgICAyMjgsIDIyOCwgMjI4LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgCisgICAgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMjYsIDIyNiwgCisgICAgMjI2LCAyMjYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjI2LCAyMjYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMzMsIDIzNCwgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKQEAgLTE2NDQsNDA4ICsxNjg4LDQ3OCBAQAogICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIAotICAgIDc3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDc3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKICAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAKLSAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKLSAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgCi0gICAgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIAotICAgIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAKLSAgICAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgCi0gICAgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIAotICAgIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzMsIDIzMywgMjE5LCAKLSAgICAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCi0gICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgMjM0LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIAorICAgIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAKKyAgICAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIAorICAgIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAKKyAgICAyMzUsIDIzNSwgMjIxLCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCisgICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKICAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI1LCA0MCwgMjcsIDI3LCAyNywgMjcsIDI1LCAKLSAgICAyNSwgMjcsIDI3LCAyNSwgNDAsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAyNywgMjcsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNSwgMjUsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjcsIDI1LCA0MCwgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNSwgNDAsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI1LCAKKyAgICAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjUsIDI1LCAyNywgNDAsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjcsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjUsIDI1LCAKKyAgICAyNywgNDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNywgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI3LCAyNSwgMjcsIDI3LCAyNywgMjcsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKKyAgICAyNSwgMjUsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDc5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI1LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNjEsIDE2MiwgCisgICAgMTYxLCAxNjIsIDE2MSwgMTYyLCAxNjEsIDE2MiwgMTYxLCAxNjIsIDE2MSwgMTYyLCAxNjEsIDE2MiwgMjM2LCAyMzYsIAorICAgIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAKKyAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyMjYsIDc3LCA3NywgMjI2LCAyMjYsIDE2MSwgMTYyLCA3NywgMjI2LCAKKyAgICAyMjYsIDc3LCAwLCAyMjYsIDAsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgNzcsIDc3LCAKKyAgICA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgOSwgMTAsIDksIDEwLCA5LCAKKyAgICAxMCwgOSwgMTAsIDE2MSwgMTYyLCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDE2MSwgMTYyLCA5LCAxMCwgMTYxLCAxNjIsIDE2MSwgCisgICAgMTYyLCAxNjEsIDE2MiwgMTYxLCAxNjIsIDE2MSwgMTYyLCAxNjEsIDE2MiwgMTYxLCAxNjIsIDE2MSwgMTYyLCAxNjEsIAorICAgIDE2MiwgNzcsIDc3LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAKKyAgICAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCisgICAgNzcsIDIyNiwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDc3LCAKKyAgICA3NywgNzcsIDIyNiwgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgMjI2LCAyMjYsIDc3LCAKKyAgICA3NywgMTYxLCAxNjIsIDE2MSwgMTYyLCAyMjYsIDc3LCA3NywgNzcsIDc3LCAyMjYsIDc3LCAyMjYsIDIyNiwgMjI2LCA3NywgCisgICAgNzcsIDIyNiwgMjI2LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMjYsIDIyNiwgMjI2LCAKKyAgICAyMjYsIDIyNiwgNzcsIDc3LCAxNjEsIDE2MiwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKKyAgICA3NywgMjI2LCAyMjYsIDIyMCwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIAorICAgIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgNzcsIDIyNiwgNzcsIDIyNiwgCisgICAgNzcsIDc3LCAyMjYsIDc3LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI2LCAyMjYsIDc3LCAKKyAgICA3NywgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCA3NywgCisgICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCA3NywgNzcsIDc3LCA3NywgMjI2LCAKKyAgICAyMjYsIDIyNiwgMjI2LCA3NywgMjI2LCAyMjYsIDc3LCA3NywgMjI2LCAyMjAsIDIxMCwgMjEwLCA3NywgNzcsIDIyNiwgCisgICAgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIAorICAgIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAKKyAgICAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgNzcsIAorICAgIDc3LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAKKyAgICAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgCisgICAgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIAorICAgIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCAyMjYsIDIyNiwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMzcsIDc3LCAyMjYsIDc3LCAKKyAgICA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgNzcsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDc3LCAKKyAgICA3NywgNzcsIDc3LCAyMjYsIDc3LCA3NywgNzcsIDIyNiwgMjI2LCAyMjYsIDIyNiwgMjI2LCA3NywgMjI2LCA3NywgNzcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDI3LCAyNywgNzcsIAorICAgIDc3LCA3NywgNzcsIDc3LCA3NywgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjUsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMCwgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAyNywgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAKLSAgICAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMjM0LCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzNCwgCi0gICAgMjM0LCAyMzQsIDIzNCwgMjM0LCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIAotICAgIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMTUyLCAxNTIsIDE1MiwgMjcsIDAsIDAsIDAsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMCwgMjI0LCA3NywgNzcsIDIyNCwgMjI0LCAxNjIsIDE2MywgNzcsIDIyNCwgMjI0LCA3NywgMCwgMjI0LCAwLCAwLCAKLSAgICAwLCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgNzcsIAotICAgIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYyLCAxNjMsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgMTYyLCAxNjMsIDksIDEwLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAKLSAgICAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAxNjMsIDE2MiwgMTYzLCA3NywgNzcsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCA3NywgNzcsIDc3LCA3NywgNzcsIAotICAgIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgNzcsIDc3LCA3NywgMjI0LCA3NywgNzcsIDc3LCA3NywgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCAyMjQsIDIyNCwgNzcsIDc3LCAxNjIsIDE2MywgMTYyLCAxNjMsIDIyNCwgCi0gICAgNzcsIDc3LCA3NywgNzcsIDIyNCwgNzcsIDIyNCwgMjI0LCAyMjQsIDc3LCA3NywgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCAKLSAgICA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCA3NywgNzcsIDE2MiwgMTYzLCAKLSAgICA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgMjE4LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCA3NywgMjI0LCA3NywgMjI0LCA3NywgNzcsIDIyNCwgNzcsIDIyNCwgMjI0LCAyMjQsIAotICAgIDIyNCwgNzcsIDc3LCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAKLSAgICA3NywgMjI0LCAyMjQsIDc3LCA3NywgNzcsIDc3LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCAyMjQsIDIyNCwgNzcsIDc3LCAKLSAgICAyMjQsIDIxOCwgMjA4LCAyMDgsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCA3NywgNzcsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAKLSAgICAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCA3NywgNzcsIAotICAgIDc3LCA3NywgNzcsIDIzNSwgNzcsIDIyNCwgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDc3LCA3NywgCi0gICAgNzcsIDc3LCA3NywgMjI0LCAyMjQsIDIyNCwgNzcsIDc3LCA3NywgNzcsIDIyNCwgNzcsIDc3LCA3NywgMjI0LCAyMjQsIAotICAgIDIyNCwgMjI0LCAyMjQsIDc3LCAyMjQsIDc3LCA3NywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCA3NywgNzcsIAotICAgIDc3LCA3NywgNzcsIDc3LCA3NywgMjcsIDI3LCA3NywgNzcsIDc3LCA3NywgNzcsIDc3LCAwLCAwLCAwLCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKICAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKICAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAwLCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIAorICAgIDQ0LCA0NCwgNDQsIDAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCiAgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgNDQsIDQ2LCAKKyAgICA0NCwgNDQsIDQ0LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NCwgNDQsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NiwgNDQsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDM1LCA1MCwgNDQsIDQ0LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDYsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDQ0LCA0NiwgNDQsIDQ2LCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDE1MSwgMTM1LCAxMzUsIDQ2LCA0NiwgNDYsIDQ2LCAKICAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCAwLCA0NCwgNDYsIDQ0LCA0NCwgNDQsIDQ2LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAotICAgIDQ0LCA0NCwgMCwgNDYsIDQ0LCA0NiwgNDYsIDQ0LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCAzNSwgNTAsIDAsIDAsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NiwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxNTIsIDEzNiwgMTM2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM5LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMTM2LCAxMzYsIDI5LCAzNiwgMjksIDM2LCAxMzYsIDEzNiwgMTM2LCAyOSwgMzYsIAotICAgIDEzNiwgMjksIDM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCA4MywgMTM2LCAxMzYsIAotICAgIDgzLCAxMzYsIDI5LCAzNiwgMTM2LCAxMzYsIDI5LCAzNiwgMTYyLCAxNjMsIDE2MiwgMTYzLCAxNjIsIDE2MywgMTYyLCAKLSAgICAxNjMsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCA1MSwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgMTM1LCAxMzUsIDI5LCAzNiwgMjksIDM2LCAxMzUsIDEzNSwgMTM1LCAyOSwgMzYsIDEzNSwgMjksIAorICAgIDM2LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCA4MywgMTM1LCAxMzUsIDgzLCAxMzUsIAorICAgIDI5LCAzNiwgMTM1LCAxMzUsIDI5LCAzNiwgMTYxLCAxNjIsIDE2MSwgMTYyLCAxNjEsIDE2MiwgMTYxLCAxNjIsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCA1MSwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNiwgMjM2LCAKLSAgICAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAwLCAyMzYsIDIzNiwgMjM2LCAyMzYsIAotICAgIDIzNywgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAKLSAgICAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIAotICAgIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAKLSAgICAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIAotICAgIDIzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzYsIAotICAgIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAwLCAwLCAwLCAwLCAyMzgsIAotICAgIDIzOSwgMjM5LCAyMzksIDIzNiwgMjQwLCAxNjksIDI0MSwgMjQyLCAyNDMsIDI0MiwgMjQzLCAyNDIsIDI0MywgMjQyLCAKLSAgICAyNDMsIDI0MiwgMjQzLCAyMzYsIDIzNiwgMjQyLCAyNDMsIDI0MiwgMjQzLCAyNDIsIDI0MywgMjQyLCAyNDMsIDI0NCwgCi0gICAgMjQ1LCAyNDYsIDI0NiwgMjM2LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDcsIAotICAgIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUxLCAyNDQsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyMzcsIDIzNiwgMjUyLCAKLSAgICAyNTIsIDI1MiwgMjQwLCAxNjksIDIzOSwgMjM2LCAyNywgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgCi0gICAgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAxNjksIAotICAgIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDI1MywgMjUzLCAKLSAgICAxNjksIDI1MywgMjUzLCAxNjksIDI1MywgMjUzLCAxNjksIDI1MywgMjUzLCAxNjksIDI1MywgMjUzLCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDI1MywgMTY5LCAxNjksIDAsIDAsIDI1NCwgMjU0LCAyNTUsIDI1NSwgCi0gICAgMjQwLCAyNTYsIDI1NywgMjQ0LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAKLSAgICAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMjUzLCAxNjksIDI1MywgMTY5LCAyNTMsIDE2OSwgMTY5LCAyNTMsIDE2OSwgCi0gICAgMjUzLCAxNjksIDI1MywgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMjUzLCAyNTMsIDE2OSwgMjUzLCAyNTMsIAotICAgIDE2OSwgMjUzLCAyNTMsIDE2OSwgMjUzLCAyNTMsIDE2OSwgMjUzLCAyNTMsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMjUzLCAxNjksIDE2OSwgMjUzLCAyNTMsIDI1MywgMjUzLCAyMzksIDI0MCwgMjQwLCAyNTYsIAotICAgIDI1NywgMCwgMCwgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMCwgCi0gICAgMjU4LCAyNTgsIDI1OSwgMjU5LCAyNTksIDI1OSwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAKLSAgICAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyMzcsIDIzNywgMCwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAKLSAgICAyNTksIDI1OSwgMjU5LCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDIzNywgMjM3LCAyMzcsIDI1OCwgCi0gICAgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyMzcsIDIzNywgMjM3LCAyMzcsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjM3LCAyMzcsIDIzNywgMjM3LCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIAotICAgIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyMzcsIAotICAgIDIzNywgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAKLSAgICAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI2MCwgCi0gICAgMjYwLCAyNjAsIDI2MCwgMjYwLCAyMzcsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDAsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM5LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgCisgICAgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIAorICAgIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgCisgICAgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIAorICAgIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgCisgICAgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIAorICAgIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgCisgICAgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIAorICAgIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgCisgICAgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIAorICAgIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDIzOSwgMjM5LCAyMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDAsIDAsIDAsIDAsIDI0MCwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjM4LCAyNDIsIDE2OCwgMjQzLCAyNDQsIDI0NSwgMjQ0LCAyNDUsIDI0NCwgMjQ1LCAyNDQsIDI0NSwgMjQ0LCAyNDUsIAorICAgIDIzOCwgMjM4LCAyNDQsIDI0NSwgMjQ0LCAyNDUsIDI0NCwgMjQ1LCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ4LCAKKyAgICAyMzgsIDI0MywgMjQzLCAyNDMsIDI0MywgMjQzLCAyNDMsIDI0MywgMjQzLCAyNDMsIDI0OSwgMjUwLCAyNTEsIDI1MiwgCisgICAgMjUzLCAyNTMsIDI0NiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDIzOSwgMjM4LCAyNTQsIDI1NCwgMjU0LCAyNDIsIAorICAgIDE2OCwgMjQxLCAyMzgsIDI3LCAwLCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMjU1LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAKKyAgICAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMTY4LCAyNTUsIDE2OCwgCisgICAgMjU1LCAxNjgsIDI1NSwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMjU1LCAyNTUsIDE2OCwgMjU1LCAyNTUsIAorICAgIDE2OCwgMjU1LCAyNTUsIDE2OCwgMjU1LCAyNTUsIDE2OCwgMjU1LCAyNTUsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMjU1LCAxNjgsIDE2OCwgMCwgMCwgMjU2LCAyNTYsIDI1NywgMjU3LCAyNDIsIDI1OCwgMjU5LCAKKyAgICAyNDYsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAyNTUsIDE2OCwgCisgICAgMjU1LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAxNjgsIAorICAgIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAxNjgsIDI1NSwgMTY4LCAxNjgsIDI1NSwgMTY4LCAyNTUsIDE2OCwgMjU1LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAyNTUsIDI1NSwgMTY4LCAyNTUsIDI1NSwgMTY4LCAyNTUsIDI1NSwgCisgICAgMTY4LCAyNTUsIDI1NSwgMTY4LCAyNTUsIDI1NSwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAyNTUsIDE2OCwgMTY4LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI0MSwgMjQyLCAyNDIsIDI1OCwgMjU5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgMCwgMCwgCisgICAgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIAorICAgIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAKKyAgICAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgCisgICAgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIAorICAgIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAKKyAgICAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgCisgICAgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAyNTksIDI1OSwgMjU5LCAwLCAyNjAsIDI2MCwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDIzOSwgMjM5LCAwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyMzksIDI2NCwgMjY0LCAKKyAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjM5LCAKKyAgICAyMzksIDIzOSwgMjYwLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCisgICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDIzOSwgMjM5LCAyMzksIDIzOSwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDAsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyMzksIDIzOSwgMjM5LCAKKyAgICAyMzksIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDIzOSwgMjM5LCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDIzOSwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKICAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKLSAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMjQwLCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMCwgMCwgMCwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIAotICAgIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAKLSAgICAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgCi0gICAgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAyMzYsIDIzNiwgMjM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCAxMzYsIDEzNiwgMTM2LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTQyLCAxNDIsIAotICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDI0MiwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDAsIDAsIDAsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgCisgICAgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAorICAgIDIzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDUyLCA1MiwgNTIsIDUyLCA1MiwgNTIsIAorICAgIDgyLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNTIsIDEzNSwgMTM1LCAKKyAgICAxMzUsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNDEsIAorICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKKyAgICA0NCwgNDYsIDQ3LCA4MCwgODEsIDgxLCA4MSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDEzNSwgNTEsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDgwLCA4MCwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAKKyAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MywgNTMsIDQ0LCAKKyAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDYsIDQ2LCA0NCwgNDYsIDQ0LCAKICAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCAKLSAgICA0NiwgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAotICAgIDQ3LCA4MCwgODEsIDgxLCA4MSwgMTM2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDEzNiwgNTEsIDQ0LCA0NiwgCi0gICAgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgCi0gICAgNDQsIDQ2LCA0NCwgNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNTAsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIAorICAgIDQ0LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNTEsIDI2NSwgMjY1LCA0NCwgNDYsIDQ0LCA0NiwgCisgICAgMCwgNDQsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDYsIDQ0LCA0NiwgNDQsIAorICAgIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAKLSAgICA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MSwgNTEsIDUxLCAKLSAgICA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MywgNTMsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKLSAgICA0NCwgNDYsIDQ0LCA0NiwgNDYsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKLSAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKLSAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKLSAgICA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDYsIDUwLCA0NiwgNDYsIDQ2LCAKLSAgICA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCA0NCwgNDQsIDQ2LCA0NCwgNDYsIDQ0LCA0NiwgNDQsIDQ2LCAKLSAgICA0NCwgNDYsIDUxLCAyNjIsIDI2MiwgNDQsIDQ2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMzLCA0NywgNDcsIDQ3LCAxNDAsIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTMyLCA0NywgNDcsIDQ3LCAxMzksIDQ3LCA0NywgNDcsIDQ3LCAxMzIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzYsIAorICAgIDEzMiwgMTMyLCAxMzYsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKKyAgICA3OSwgNzksIDE0NSwgMjE5LCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgMTM3LCAxMzMsIDEzMywgMTM3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTM2LCAxMzYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzYsIAorICAgIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAKKyAgICAxMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCA4MiwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MiwgODIsIDgyLCAKKyAgICA0NywgMCwgMCwgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDg0LCA4NCwgODQsIDgyLCAKKyAgICA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAorICAgIDEzMiwgMTM2LCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgMCwgMCwgMTMyLCAxMzIsIAorICAgIDEzMiwgMTM2LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDE0MiwgMTM2LCAxMzYsIDEzMiwgCisgICAgMTMyLCAxMzIsIDEzMiwgMTM2LCAxMzYsIDEzMiwgMTM2LCAxMzYsIDEzNiwgMTczLCA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCAKKyAgICA4MiwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgMCwgNTIsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMCwgMCwgMCwgMCwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzNiwgMTM2LCAxMzIsIDEzMiwgMTM2LCAxMzYsIDEzMiwgMTMyLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCAxMzIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMTMyLCAxMzYsIDAsIDAsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMCwgCisgICAgMCwgODIsIDgyLCA4MiwgODIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA1MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNzksIDc5LCA3OSwgNDcsIDEzNiwgMCwgMCwgMCwgMCwgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODAsIDQ3LCA4MCwgODAsIDg0LCA0NywgCisgICAgNDcsIDgwLCA4MCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA4MCwgODAsIDQ3LCA4MCwgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNTIsIDgyLCA4MiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzYsIDEzNiwgMTM2LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMzcsIDEzNywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgCi0gICAgMTM3LCAxMzcsIDE0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIAotICAgIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM2LCAxMzYsIDEzMiwgMTM2LCAxMzYsIDEzMiwgCisgICAgMTM2LCAxMzYsIDgyLCAxMzYsIDEzOSwgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKKyAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKKyAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKKyAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorICAgIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAKKyAgICAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIAorICAgIDI1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgMCwgMCwgMCwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIAorICAgIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAKKyAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCisgICAgMjY2LCAyNjYsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDE2OCwgMTY4LCAyNjgsIDE2OCwgMjY4LCAxNjgsIDE2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAxNjgsIDI2OCwgMTY4LCAyNjgsIDE2OCwgCisgICAgMTY4LCAyNjgsIDI2OCwgMTY4LCAxNjgsIDE2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMCwgMCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgODQsIDg0LCA4NCwgODIsIDgyLCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzcsIDE3NCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTM3LCAxMzcsIDEzMywgMTMzLCAxMzcsIDEzNywgMTMzLCAKLSAgICAxMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDEzMywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCAxMzMsIDEzNywgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAKLSAgICAwLCAwLCA4MiwgODIsIDgyLCA4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIAotICAgIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAKLSAgICAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgCi0gICAgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIAotICAgIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAKLSAgICAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgCi0gICAgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIAotICAgIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAKLSAgICAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgCi0gICAgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIAotICAgIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAKLSAgICAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDI1MywgCi0gICAgMjUzLCAyNTMsIDI1MywgMjUzLCAyNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI2OSwgMjcwLCAyNjksIAorICAgIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDIwOSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKKyAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAwLCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCisgICAgMCwgMjY5LCAwLCAyNjksIDI2OSwgMCwgMjY5LCAyNjksIDAsIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCisgICAgMjY5LCAyNjksIDI3MSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxOTMsIDI3MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAwLCAwLCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAotICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAotICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgCi0gICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAotICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMTY5LCAxNjksIDI2NSwgMTY5LCAyNjUsIDE2OSwgCi0gICAgMTY5LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDE2OSwgMjY1LCAxNjksIAotICAgIDI2NSwgMTY5LCAxNjksIDI2NSwgMjY1LCAxNjksIDE2OSwgMTY5LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDAsIDAsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAwLCAwLCAwLCAwLCAwLCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAotICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI2NiwgMjY3LCAyNjYsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDIwNywgMjY2LCAyNjYsIDI2NiwgMjY2LCAKLSAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAwLCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCi0gICAgMCwgMjY2LCAwLCAyNjYsIDI2NiwgMCwgMjY2LCAyNjYsIDAsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2OCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDI3NCwgMjcsIDAsIDAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAorICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAKKyAgICAyNzUsIDI3NiwgMjc3LCAyNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzUsIDI3OCwgMjc4LCAyNzksIDI3OSwgMjc2LCAyNzcsIDI3NiwgMjc3LCAyNzYsIAorICAgIDI3NywgMjc2LCAyNzcsIDI3NiwgMjc3LCAyNzYsIDI3NywgMjc2LCAyNzcsIDI3NiwgMjc3LCAyNDEsIDI0MSwgMjc2LCAKKyAgICAyNzcsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc5LCAyNzksIDI3OSwgMjgwLCAyNzUsIDI4MCwgMCwgMjc1LCAyODAsIDI3NSwgCisgICAgMjc1LCAyNzgsIDI4MSwgMjgyLCAyODEsIDI4MiwgMjgxLCAyODIsIDI4MywgMjc1LCAyNzUsIDI4NCwgMjg1LCAyODYsIAorICAgIDI4NiwgMjg3LCAwLCAyNzUsIDI4OCwgMjgzLCAyNzUsIDAsIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDExNSwgMTI4LCAwLCAKICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCiAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAogICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKQEAgLTIwNTUsMjA5ICsyMTY5LDIyOSBAQAogICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCiAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTkxLCAyNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMjcwLCAyNywgMCwgMCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAotICAgIDcwLCA3MCwgNzAsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcyLCAyNzMsIDI3MSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MSwgMjc0LCAKLSAgICAyNzQsIDI3NSwgMjc1LCAyNzIsIDI3MywgMjcyLCAyNzMsIDI3MiwgMjczLCAyNzIsIDI3MywgMjcyLCAyNzMsIDI3MiwgCi0gICAgMjczLCAyNzIsIDI3MywgMjcyLCAyNzMsIDIzOSwgMjM5LCAyNzIsIDI3MywgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzUsIAotICAgIDI3NSwgMjc1LCAyNzYsIDI3MSwgMjc2LCAwLCAyNzEsIDI3NiwgMjcxLCAyNzEsIDI3NCwgMjc3LCAyNzgsIDI3NywgMjc4LCAKLSAgICAyNzcsIDI3OCwgMjc5LCAyNzEsIDI3MSwgMjgwLCAyODEsIDI4MiwgMjgyLCAyODMsIDAsIDI3MSwgMjg0LCAyNzksIDI3MSwgCi0gICAgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTE1LCAxMjgsIDAsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKLSAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCi0gICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAotICAgIDEyOCwgMTI4LCAxMjgsIDAsIDAsIDEzMSwgMCwgMjg1LCAyODUsIDI4NiwgMjg3LCAyODYsIDI4NSwgMjg1LCAyODgsIDI4OSwgCi0gICAgMjg1LCAyOTAsIDI5MSwgMjkyLCAyOTEsIDI5MSwgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIDI5MywgMjkzLCAyOTMsIAotICAgIDI5MywgMjkzLCAyOTEsIDI4NSwgMjk0LCAyOTUsIDI5NCwgMjg1LCAyODUsIDI5NiwgMjk2LCAyOTYsIDI5NiwgMjk2LCAKLSAgICAyOTYsIDI5NiwgMjk2LCAyOTYsIDI5NiwgMjk2LCAyOTYsIDI5NiwgMjk2LCAyOTYsIDI5NiwgMjk2LCAyOTYsIDI5NiwgCi0gICAgMjk2LCAyOTYsIDI5NiwgMjk2LCAyOTYsIDI5NiwgMjk2LCAyODgsIDI4NSwgMjg5LCAyOTcsIDI5OCwgMjk3LCAyOTksIAotICAgIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAKLSAgICAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgMjg4LCAyOTUsIDI4OSwgCi0gICAgMjk1LCAyODgsIDI4OSwgMzAwLCAzMDEsIDMwMiwgMzAwLCAzMDAsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAotICAgIDMwMywgMzAzLCAzMDMsIDMwMywgMzA0LCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAxODYsIDAsIDI4OSwgMjg5LCAyOTAsIAorICAgIDI5MSwgMjkwLCAyODksIDI4OSwgMjkyLCAyOTMsIDI4OSwgMjk0LCAyOTUsIDI5NiwgMjk1LCAyOTUsIDI5NywgMjk3LCAKKyAgICAyOTcsIDI5NywgMjk3LCAyOTcsIDI5NywgMjk3LCAyOTcsIDI5NywgMjk1LCAyODksIDI5OCwgMjk5LCAyOTgsIDI4OSwgCisgICAgMjg5LCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIAorICAgIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMzAwLCAzMDAsIDMwMCwgMjkyLCAKKyAgICAyODksIDI5MywgMzAxLCAzMDIsIDMwMSwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgCiAgICAgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAotICAgIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAKLSAgICAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzA0LCAzMDQsIDMwMywgMzAzLCAzMDMsIDMwMywgCi0gICAgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAotICAgIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMCwgMCwgMCwgCi0gICAgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMCwgMCwgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMCwgMCwgCi0gICAgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMCwgMCwgMzAzLCAzMDMsIDMwMywgMCwgMCwgMCwgMjg3LCAyODcsIAotICAgIDI5NSwgMjk3LCAzMDUsIDI4NywgMjg3LCAwLCAzMDYsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA2LCAzMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwOCwgMzA4LCAzMDgsIDI3LCAyNSwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgCi0gICAgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAKLSAgICAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDMwMywgMzAzLCAzMDMsIDI5MiwgMjk5LCAyOTMsIDI5OSwgMjkyLCAyOTMsIDMwNCwgMzA1LCAzMDYsIDMwNCwgMzA0LCAKKyAgICAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwOCwgMzA3LCAzMDcsIDMwNywgCisgICAgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIAorICAgIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAKKyAgICAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgCisgICAgMzA4LCAzMDgsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIAorICAgIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMzA3LCAKKyAgICAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMCwgMCwgMCwgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMCwgMCwgCisgICAgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMCwgMCwgMzA3LCAzMDcsIDMwNywgMzA3LCAzMDcsIDMwNywgMCwgMCwgCisgICAgMzA3LCAzMDcsIDMwNywgMCwgMCwgMCwgMjkxLCAyOTEsIDI5OSwgMzAxLCAzMDksIDI5MSwgMjkxLCAwLCAzMTAsIDMxMSwgCisgICAgMzExLCAzMTEsIDMxMSwgMzEwLCAzMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxMiwgMzEyLCAzMTIsIDI3LCAKKyAgICAyNSwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgNDcsIDQ3LCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDgyLCAxMzUsIDc5LCAwLCAwLCAwLCAwLCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgCisgICAgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAorICAgIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAKKyAgICAxNDYsIDE0NiwgMTQ2LCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMTUxLCAxNTEsIDE1MSwgMTUxLCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDE1MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgMCwgMCwgMCwgMCwgMCwgODIsIDEzNiwgNzksIDAsIDAsIDAsIDAsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIAotICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKLSAgICAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgCi0gICAgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDAsIDAsIDAsIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAxNTIsIDE1MiwgMTUyLCAxNTIsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMTUyLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5LCA3OSwgCiAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDg0LCAwLCAwLCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgODQsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCAKICAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDAsIDE0NywgMTQ3LCAxNDcsIDE0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzIsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAxNzEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTcxLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCA4MiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAotICAgIDQ3LCA4MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCisgICAgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgODIsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgODIsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCiAgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgCi0gICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDYsIDQ2LCA0NiwgCiAgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCi0gICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgNDYsIDQ2LCA0NiwgCisgICAgNDYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCi0gICAgMCwgMCwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDIsIDE0MiwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAwLCAwLCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAxMDUsIDEwNSwgMCwgMCwgMCwgMTA1LCAwLCAwLCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMTAyLCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAKKyAgICAzMTQsIDMxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAwLCAwLCAwLCAxMzUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAwLCAwLCAwLCAwLCAxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDEwNSwgMCwgMTA1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDUsIDEzMiwgMTMyLCAxMzIsIDAsIDEzMiwgMTMyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMzIsIDg0LCAxMzIsIDgwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIDAsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDgwLCAxNzQsIAorICAgIDg0LCAwLCAwLCAwLCAwLCAxMzksIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMzE0LCAzMTQsIDEwMiwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCiAgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAogICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCi0gICAgMTA1LCAwLCAxMDUsIDEwNSwgMCwgMCwgMCwgMTA1LCAwLCAwLCAxMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKLSAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMzEwLCAzMTAsIDMxMCwgCi0gICAgMzEwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTA1LCAxMDUsIDEwNSwgCiAgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAotICAgIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDAsIDEwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTA1LCAxMzMsIDEzMywgMTMzLCAwLCAxMzMsIDEzMywgMCwgMCwgMCwgMCwgMCwgMTMzLCA4NCwgMTMzLCAKLSAgICA4MCwgMTA1LCAxMDUsIDEwNSwgMTA1LCAwLCAxMDUsIDEwNSwgMTA1LCAwLCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAKICAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCi0gICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDAsIDAsIDAsIDAsIDgwLCAyMTMsIDg0LCAwLCAwLCAwLCAKLSAgICAwLCAxNDAsIDMxMCwgMzEwLCAzMTAsIDMxMCwgMzEwLCAzMTAsIDMxMCwgMzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgMCwgMzE0LCAzMTQsIDMxNCwgMzE0LCAzMTQsIDMxNCwgCisgICAgMzE0LCAzMTQsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgCisgICAgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIAorICAgIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMTA1LCAKKyAgICAxMDUsIDEwNSwgMTA1LCAxMDUsIDEwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKLSAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCi0gICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAotICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKLSAgICAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgCi0gICAgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIAotICAgIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAxNzIsIDE3MiwgMTcyLCAKLSAgICAxNzIsIDE3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODIsIDgyLCA4MiwgODIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCi0gICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKLSAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKLSAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDMxMSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgCi0gICAgMzEyLCAzMTIsIDIxMywgMjEzLCAyMTMsIDc5LCA3OSwgNzksIDMxMywgMzEyLCAzMTIsIDMxMiwgMzEyLCAzMTIsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCA4NCwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIDc5LCAKLSAgICA3OSwgODAsIDgwLCA4MCwgODAsIDgwLCA4NCwgODQsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKLSAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKLSAgICA3OSwgNzksIDgwLCA4MCwgODAsIDgwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKLSAgICA3OSwgMzExLCAzMTEsIDMxMSwgMzExLCAzMTEsIDMxMSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAotICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAotICAgIDc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCA4MCwgODAsIDgwLCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCisgICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAorICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDAsIDEzNiwgMTMyLCAKKyAgICAxMzYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIAorICAgIDEzOSwgODIsIDgyLCA4MiwgODIsIDgyLCA4MiwgODIsIDAsIDAsIDAsIDAsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAKKyAgICAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgMTUxLCAxNTEsIDE1MSwgCisgICAgMTUxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMiwgMTMyLCAxMzYsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgMTM3LCA0NywgCisgICAgMTM3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDEzNywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDEzNiwgMTM2LCAxMzYsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTM2LCAxMzYsIDEzOSwgMTM4LCA4MiwgODIsIAorICAgIDE3MiwgODIsIDgyLCA4MiwgODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MSwgMTcxLCAxNzEsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCisgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAorICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyLCA4MiwgODIsIDgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE2OCwgMTY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgMCwgMCwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCisgICAgMzE2LCAzMTYsIDMxNywgMzE3LCAxNzQsIDE3NCwgMTc0LCA3OSwgNzksIDc5LCAzMTgsIDMxNywgMzE3LCAzMTcsIDMxNywgCisgICAgMzE3LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgODQsIDg0LCA4NCwgODQsIDg0LCA4NCwgODQsIAorICAgIDg0LCA3OSwgNzksIDgwLCA4MCwgODAsIDgwLCA4MCwgODQsIDg0LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDc5LCA4MCwgODAsIDgwLCA4MCwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIAorICAgIDc5LCA3OSwgNzksIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgCisgICAgNzksIDc5LCA3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgODAsIDgwLCA4MCwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDcsIAotICAgIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAxNDcsIDE0NywgMTQ3LCAKLSAgICAxNDcsIDE0NywgMTQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMTQ2LCAxNDYsIAorICAgIDE0NiwgMTQ2LCAxNDYsIDE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCAwLCA0OCwgNDgsIDAsIDAsIDQ4LCAwLCAwLCA0OCwgCisgICAgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAwLCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCAwLCA0OCwgNDgsIDAsIDAsIDQ4LCAwLCAwLCA0OCwgNDgsIDAsIAotICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDM1LCAzNSwgMzUsIDM1LCAwLCAKLSAgICAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDQ4LCAwLCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDM1LCAzNSwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIAorICAgIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTIyNzgsMjUgKzI0MTIsMjUgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzMTQsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzE1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE0LCAzNSwgMzUsIDM1LCAKKyAgICAyMjAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAzMTksIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzMTUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMjIwLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgMzE0LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzE1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgNDgsIDQ4LCAKKyAgICAzMTksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAyMjAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCAzMTQsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzMTUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDMxOSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDMxNCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDMxNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDgsIDM1LCAwLCAwLCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAKLSAgICAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMjcsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMzE5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIwLCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OCwgMzUsIDAsIDAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAKKyAgICAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgCisgICAgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIAorICAgIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCkBAIC0yMzA1LDMzICsyNDM5LDEzMCBAQAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAogICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAotICAgIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIAorICAgIDIzNSwgMjM1LCAyMzUsIDIzNSwgMzIxLCAwLCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAKKyAgICAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgCisgICAgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjM1LCAyMzUsIDIzNSwgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAorICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKKyAgICAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MywgMjYzLCAyNjMsIDI2MywgCisgICAgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIAorICAgIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKKyAgICAyMzUsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAKKyAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCAyNjIsIDI2MiwgMjYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIAorICAgIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAKKyAgICAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgCisgICAgMjYyLCAyNjIsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDI2MiwgMjYyLCAyNjIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2MiwgMjYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCisgICAgMjcsIDAsIDI3LCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDc5LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCA3OSwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIAotICAgIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAKLSAgICAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgCi0gICAgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDE2OSwgMTY5LCAxNjksIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKLSAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCi0gICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDAsIDI3LCAwLCAyNywgMCwgMjcsIAorICAgIDAsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAwLCAyNywgMCwgCisgICAgMCwgMjcsIDI3LCAyNywgMjcsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIAorICAgIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAKKyAgICAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIAorICAgIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgCisgICAgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIAorICAgIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAKKyAgICAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMTY4LCAxNjgsIDE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIAotICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKLSAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCi0gICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAotICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCA3MCwgNzAsIDcwLCA3MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAKKyAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgCisgICAgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIAorICAgIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAKKyAgICAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgCisgICAgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIAorICAgIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAKKyAgICAxODYsIDE4NiwgMTg2LCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIApAQCAtMjM0NCwxNyArMjU3NSwxNyBAQAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAogICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAotICAgIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIAotICAgIDcwLCA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMCwgMCwgCisgICAgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDcwLCA3MCwgNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAKKyAgICAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjcsIDAsIDAsIAogfTsKIAogLyogZGVjb21wb3NpdGlvbiBkYXRhICovCkBAIC0yNTgyLDE1ICsyODEzLDE3IEBACiAgICAgODcyMiwgMjU5LCA2MSwgMjU5LCA0MCwgMjU5LCA0MSwgMjU5LCAxMTAsIDI2MSwgNDgsIDI2MSwgNDksIDI2MSwgNTAsIAogICAgIDI2MSwgNTEsIDI2MSwgNTIsIDI2MSwgNTMsIDI2MSwgNTQsIDI2MSwgNTUsIDI2MSwgNTYsIDI2MSwgNTcsIDI2MSwgNDMsIAogICAgIDI2MSwgODcyMiwgMjYxLCA2MSwgMjYxLCA0MCwgMjYxLCA0MSwgMjYxLCA5NywgMjYxLCAxMDEsIDI2MSwgMTExLCAyNjEsIAotICAgIDEyMCwgMjYxLCA2MDEsIDUxNCwgODIsIDExNSwgNzcwLCA5NywgNDcsIDk5LCA3NzAsIDk3LCA0NywgMTE1LCAyNjIsIDY3LCAKLSAgICA1MTQsIDE3NiwgNjcsIDc3MCwgOTksIDQ3LCAxMTEsIDc3MCwgOTksIDQ3LCAxMTcsIDI1OCwgNDAwLCA1MTQsIDE3NiwgNzAsIAotICAgIDI2MiwgMTAzLCAyNjIsIDcyLCAyNjIsIDcyLCAyNjIsIDcyLCAyNjIsIDEwNCwgMjYyLCAyOTUsIDI2MiwgNzMsIDI2MiwgCi0gICAgNzMsIDI2MiwgNzYsIDI2MiwgMTA4LCAyNjIsIDc4LCA1MTQsIDc4LCAxMTEsIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIAotICAgIDI2MiwgODIsIDI2MiwgODIsIDUxNSwgODMsIDc3LCA3NzAsIDg0LCA2OSwgNzYsIDUxNSwgODQsIDc3LCAyNjIsIDkwLCAKLSAgICAyNTYsIDkzNywgMjYyLCA5MCwgMjU2LCA3NSwgMjU2LCAxOTcsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgMTAxLCAyNjIsIAotICAgIDY5LCAyNjIsIDcwLCAyNjIsIDc3LCAyNjIsIDExMSwgMjU4LCAxNDg4LCAyNTgsIDE0ODksIDI1OCwgMTQ5MCwgMjU4LCAKLSAgICAxNDkxLCAyNjIsIDEwNSwgNzcwLCA3MCwgNjUsIDg4LCAyNjIsIDk2MCwgMjYyLCA5NDcsIDI2MiwgOTE1LCAyNjIsIDkyOCwgCi0gICAgMjYyLCA4NzIxLCAyNjIsIDY4LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTA1LCAyNjIsIDEwNiwgNzcyLCA0OSwgCisgICAgMTIwLCAyNjEsIDYwMSwgMjYxLCAxMDQsIDI2MSwgMTA3LCAyNjEsIDEwOCwgMjYxLCAxMDksIDI2MSwgMTEwLCAyNjEsIAorICAgIDExMiwgMjYxLCAxMTUsIDI2MSwgMTE2LCA1MTQsIDgyLCAxMTUsIDc3MCwgOTcsIDQ3LCA5OSwgNzcwLCA5NywgNDcsIDExNSwgCisgICAgMjYyLCA2NywgNTE0LCAxNzYsIDY3LCA3NzAsIDk5LCA0NywgMTExLCA3NzAsIDk5LCA0NywgMTE3LCAyNTgsIDQwMCwgNTE0LCAKKyAgICAxNzYsIDcwLCAyNjIsIDEwMywgMjYyLCA3MiwgMjYyLCA3MiwgMjYyLCA3MiwgMjYyLCAxMDQsIDI2MiwgMjk1LCAyNjIsIAorICAgIDczLCAyNjIsIDczLCAyNjIsIDc2LCAyNjIsIDEwOCwgMjYyLCA3OCwgNTE0LCA3OCwgMTExLCAyNjIsIDgwLCAyNjIsIDgxLCAKKyAgICAyNjIsIDgyLCAyNjIsIDgyLCAyNjIsIDgyLCA1MTUsIDgzLCA3NywgNzcwLCA4NCwgNjksIDc2LCA1MTUsIDg0LCA3NywgCisgICAgMjYyLCA5MCwgMjU2LCA5MzcsIDI2MiwgOTAsIDI1NiwgNzUsIDI1NiwgMTk3LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIAorICAgIDEwMSwgMjYyLCA2OSwgMjYyLCA3MCwgMjYyLCA3NywgMjYyLCAxMTEsIDI1OCwgMTQ4OCwgMjU4LCAxNDg5LCAyNTgsIAorICAgIDE0OTAsIDI1OCwgMTQ5MSwgMjYyLCAxMDUsIDc3MCwgNzAsIDY1LCA4OCwgMjYyLCA5NjAsIDI2MiwgOTQ3LCAyNjIsIDkxNSwgCisgICAgMjYyLCA5MjgsIDI2MiwgODcyMSwgMjYyLCA2OCwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwNSwgMjYyLCAxMDYsIAorICAgIDc3MiwgNDksIDgyNjAsIDU1LCA3NzIsIDQ5LCA4MjYwLCA1NywgMTAyOCwgNDksIDgyNjAsIDQ5LCA0OCwgNzcyLCA0OSwgCiAgICAgODI2MCwgNTEsIDc3MiwgNTAsIDgyNjAsIDUxLCA3NzIsIDQ5LCA4MjYwLCA1MywgNzcyLCA1MCwgODI2MCwgNTMsIDc3MiwgCiAgICAgNTEsIDgyNjAsIDUzLCA3NzIsIDUyLCA4MjYwLCA1MywgNzcyLCA0OSwgODI2MCwgNTQsIDc3MiwgNTMsIDgyNjAsIDU0LCAKICAgICA3NzIsIDQ5LCA4MjYwLCA1NiwgNzcyLCA1MSwgODI2MCwgNTYsIDc3MiwgNTMsIDgyNjAsIDU2LCA3NzIsIDU1LCA4MjYwLCAKQEAgLTI2MDAsMTY5ICsyODMzLDE3MCBAQAogICAgIDc3LCAyNTgsIDEwNSwgNTE0LCAxMDUsIDEwNSwgNzcwLCAxMDUsIDEwNSwgMTA1LCA1MTQsIDEwNSwgMTE4LCAyNTgsIDExOCwgCiAgICAgNTE0LCAxMTgsIDEwNSwgNzcwLCAxMTgsIDEwNSwgMTA1LCAxMDI2LCAxMTgsIDEwNSwgMTA1LCAxMDUsIDUxNCwgMTA1LCAKICAgICAxMjAsIDI1OCwgMTIwLCA1MTQsIDEyMCwgMTA1LCA3NzAsIDEyMCwgMTA1LCAxMDUsIDI1OCwgMTA4LCAyNTgsIDk5LCAyNTgsIAotICAgIDEwMCwgMjU4LCAxMDksIDUxMiwgODU5MiwgODI0LCA1MTIsIDg1OTQsIDgyNCwgNTEyLCA4NTk2LCA4MjQsIDUxMiwgODY1NiwgCi0gICAgODI0LCA1MTIsIDg2NjAsIDgyNCwgNTEyLCA4NjU4LCA4MjQsIDUxMiwgODcwNywgODI0LCA1MTIsIDg3MTIsIDgyNCwgNTEyLCAKLSAgICA4NzE1LCA4MjQsIDUxMiwgODczOSwgODI0LCA1MTIsIDg3NDEsIDgyNCwgNTE0LCA4NzQ3LCA4NzQ3LCA3NzAsIDg3NDcsIAotICAgIDg3NDcsIDg3NDcsIDUxNCwgODc1MCwgODc1MCwgNzcwLCA4NzUwLCA4NzUwLCA4NzUwLCA1MTIsIDg3NjQsIDgyNCwgNTEyLCAKLSAgICA4NzcxLCA4MjQsIDUxMiwgODc3MywgODI0LCA1MTIsIDg3NzYsIDgyNCwgNTEyLCA2MSwgODI0LCA1MTIsIDg4MDEsIDgyNCwgCi0gICAgNTEyLCA4NzgxLCA4MjQsIDUxMiwgNjAsIDgyNCwgNTEyLCA2MiwgODI0LCA1MTIsIDg4MDQsIDgyNCwgNTEyLCA4ODA1LCAKLSAgICA4MjQsIDUxMiwgODgxOCwgODI0LCA1MTIsIDg4MTksIDgyNCwgNTEyLCA4ODIyLCA4MjQsIDUxMiwgODgyMywgODI0LCA1MTIsIAotICAgIDg4MjYsIDgyNCwgNTEyLCA4ODI3LCA4MjQsIDUxMiwgODgzNCwgODI0LCA1MTIsIDg4MzUsIDgyNCwgNTEyLCA4ODM4LCAKLSAgICA4MjQsIDUxMiwgODgzOSwgODI0LCA1MTIsIDg4NjYsIDgyNCwgNTEyLCA4ODcyLCA4MjQsIDUxMiwgODg3MywgODI0LCA1MTIsIAotICAgIDg4NzUsIDgyNCwgNTEyLCA4ODI4LCA4MjQsIDUxMiwgODgyOSwgODI0LCA1MTIsIDg4NDksIDgyNCwgNTEyLCA4ODUwLCAKLSAgICA4MjQsIDUxMiwgODg4MiwgODI0LCA1MTIsIDg4ODMsIDgyNCwgNTEyLCA4ODg0LCA4MjQsIDUxMiwgODg4NSwgODI0LCAyNTYsIAotICAgIDEyMjk2LCAyNTYsIDEyMjk3LCAyNjMsIDQ5LCAyNjMsIDUwLCAyNjMsIDUxLCAyNjMsIDUyLCAyNjMsIDUzLCAyNjMsIDU0LCAKLSAgICAyNjMsIDU1LCAyNjMsIDU2LCAyNjMsIDU3LCA1MTksIDQ5LCA0OCwgNTE5LCA0OSwgNDksIDUxOSwgNDksIDUwLCA1MTksIAotICAgIDQ5LCA1MSwgNTE5LCA0OSwgNTIsIDUxOSwgNDksIDUzLCA1MTksIDQ5LCA1NCwgNTE5LCA0OSwgNTUsIDUxOSwgNDksIDU2LCAKLSAgICA1MTksIDQ5LCA1NywgNTE5LCA1MCwgNDgsIDc3MCwgNDAsIDQ5LCA0MSwgNzcwLCA0MCwgNTAsIDQxLCA3NzAsIDQwLCA1MSwgCi0gICAgNDEsIDc3MCwgNDAsIDUyLCA0MSwgNzcwLCA0MCwgNTMsIDQxLCA3NzAsIDQwLCA1NCwgNDEsIDc3MCwgNDAsIDU1LCA0MSwgCi0gICAgNzcwLCA0MCwgNTYsIDQxLCA3NzAsIDQwLCA1NywgNDEsIDEwMjYsIDQwLCA0OSwgNDgsIDQxLCAxMDI2LCA0MCwgNDksIDQ5LCAKLSAgICA0MSwgMTAyNiwgNDAsIDQ5LCA1MCwgNDEsIDEwMjYsIDQwLCA0OSwgNTEsIDQxLCAxMDI2LCA0MCwgNDksIDUyLCA0MSwgCi0gICAgMTAyNiwgNDAsIDQ5LCA1MywgNDEsIDEwMjYsIDQwLCA0OSwgNTQsIDQxLCAxMDI2LCA0MCwgNDksIDU1LCA0MSwgMTAyNiwgCi0gICAgNDAsIDQ5LCA1NiwgNDEsIDEwMjYsIDQwLCA0OSwgNTcsIDQxLCAxMDI2LCA0MCwgNTAsIDQ4LCA0MSwgNTE0LCA0OSwgNDYsIAotICAgIDUxNCwgNTAsIDQ2LCA1MTQsIDUxLCA0NiwgNTE0LCA1MiwgNDYsIDUxNCwgNTMsIDQ2LCA1MTQsIDU0LCA0NiwgNTE0LCA1NSwgCi0gICAgNDYsIDUxNCwgNTYsIDQ2LCA1MTQsIDU3LCA0NiwgNzcwLCA0OSwgNDgsIDQ2LCA3NzAsIDQ5LCA0OSwgNDYsIDc3MCwgNDksIAotICAgIDUwLCA0NiwgNzcwLCA0OSwgNTEsIDQ2LCA3NzAsIDQ5LCA1MiwgNDYsIDc3MCwgNDksIDUzLCA0NiwgNzcwLCA0OSwgNTQsIAotICAgIDQ2LCA3NzAsIDQ5LCA1NSwgNDYsIDc3MCwgNDksIDU2LCA0NiwgNzcwLCA0OSwgNTcsIDQ2LCA3NzAsIDUwLCA0OCwgNDYsIAotICAgIDc3MCwgNDAsIDk3LCA0MSwgNzcwLCA0MCwgOTgsIDQxLCA3NzAsIDQwLCA5OSwgNDEsIDc3MCwgNDAsIDEwMCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwMSwgNDEsIDc3MCwgNDAsIDEwMiwgNDEsIDc3MCwgNDAsIDEwMywgNDEsIDc3MCwgNDAsIDEwNCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwNSwgNDEsIDc3MCwgNDAsIDEwNiwgNDEsIDc3MCwgNDAsIDEwNywgNDEsIDc3MCwgNDAsIDEwOCwgNDEsIDc3MCwgCi0gICAgNDAsIDEwOSwgNDEsIDc3MCwgNDAsIDExMCwgNDEsIDc3MCwgNDAsIDExMSwgNDEsIDc3MCwgNDAsIDExMiwgNDEsIDc3MCwgCi0gICAgNDAsIDExMywgNDEsIDc3MCwgNDAsIDExNCwgNDEsIDc3MCwgNDAsIDExNSwgNDEsIDc3MCwgNDAsIDExNiwgNDEsIDc3MCwgCi0gICAgNDAsIDExNywgNDEsIDc3MCwgNDAsIDExOCwgNDEsIDc3MCwgNDAsIDExOSwgNDEsIDc3MCwgNDAsIDEyMCwgNDEsIDc3MCwgCi0gICAgNDAsIDEyMSwgNDEsIDc3MCwgNDAsIDEyMiwgNDEsIDI2MywgNjUsIDI2MywgNjYsIDI2MywgNjcsIDI2MywgNjgsIDI2MywgCi0gICAgNjksIDI2MywgNzAsIDI2MywgNzEsIDI2MywgNzIsIDI2MywgNzMsIDI2MywgNzQsIDI2MywgNzUsIDI2MywgNzYsIDI2MywgCi0gICAgNzcsIDI2MywgNzgsIDI2MywgNzksIDI2MywgODAsIDI2MywgODEsIDI2MywgODIsIDI2MywgODMsIDI2MywgODQsIDI2MywgCi0gICAgODUsIDI2MywgODYsIDI2MywgODcsIDI2MywgODgsIDI2MywgODksIDI2MywgOTAsIDI2MywgOTcsIDI2MywgOTgsIDI2MywgCi0gICAgOTksIDI2MywgMTAwLCAyNjMsIDEwMSwgMjYzLCAxMDIsIDI2MywgMTAzLCAyNjMsIDEwNCwgMjYzLCAxMDUsIDI2MywgMTA2LCAKLSAgICAyNjMsIDEwNywgMjYzLCAxMDgsIDI2MywgMTA5LCAyNjMsIDExMCwgMjYzLCAxMTEsIDI2MywgMTEyLCAyNjMsIDExMywgCi0gICAgMjYzLCAxMTQsIDI2MywgMTE1LCAyNjMsIDExNiwgMjYzLCAxMTcsIDI2MywgMTE4LCAyNjMsIDExOSwgMjYzLCAxMjAsIAotICAgIDI2MywgMTIxLCAyNjMsIDEyMiwgMjYzLCA0OCwgMTAyNiwgODc0NywgODc0NywgODc0NywgODc0NywgNzcwLCA1OCwgNTgsIAotICAgIDYxLCA1MTQsIDYxLCA2MSwgNzcwLCA2MSwgNjEsIDYxLCA1MTIsIDEwOTczLCA4MjQsIDI2MSwgMTA2LCAyNTksIDg2LCAKLSAgICAyNTksIDExNjE3LCAyNTgsIDI3NTk3LCAyNTgsIDQwODYzLCAyNTgsIDE5OTY4LCAyNTgsIDIwMDA4LCAyNTgsIDIwMDIyLCAKLSAgICAyNTgsIDIwMDMxLCAyNTgsIDIwMDU3LCAyNTgsIDIwMTAxLCAyNTgsIDIwMTA4LCAyNTgsIDIwMTI4LCAyNTgsIDIwMTU0LCAKLSAgICAyNTgsIDIwNzk5LCAyNTgsIDIwODM3LCAyNTgsIDIwODQzLCAyNTgsIDIwODY2LCAyNTgsIDIwODg2LCAyNTgsIDIwOTA3LCAKLSAgICAyNTgsIDIwOTYwLCAyNTgsIDIwOTgxLCAyNTgsIDIwOTkyLCAyNTgsIDIxMTQ3LCAyNTgsIDIxMjQxLCAyNTgsIDIxMjY5LCAKLSAgICAyNTgsIDIxMjc0LCAyNTgsIDIxMzA0LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzQwLCAyNTgsIDIxMzUzLCAyNTgsIDIxMzc4LCAKLSAgICAyNTgsIDIxNDMwLCAyNTgsIDIxNDQ4LCAyNTgsIDIxNDc1LCAyNTgsIDIyMjMxLCAyNTgsIDIyMzAzLCAyNTgsIDIyNzYzLCAKLSAgICAyNTgsIDIyNzg2LCAyNTgsIDIyNzk0LCAyNTgsIDIyODA1LCAyNTgsIDIyODIzLCAyNTgsIDIyODk5LCAyNTgsIDIzMzc2LCAKLSAgICAyNTgsIDIzNDI0LCAyNTgsIDIzNTQ0LCAyNTgsIDIzNTY3LCAyNTgsIDIzNTg2LCAyNTgsIDIzNjA4LCAyNTgsIDIzNjYyLCAKLSAgICAyNTgsIDIzNjY1LCAyNTgsIDI0MDI3LCAyNTgsIDI0MDM3LCAyNTgsIDI0MDQ5LCAyNTgsIDI0MDYyLCAyNTgsIDI0MTc4LCAKLSAgICAyNTgsIDI0MTg2LCAyNTgsIDI0MTkxLCAyNTgsIDI0MzA4LCAyNTgsIDI0MzE4LCAyNTgsIDI0MzMxLCAyNTgsIDI0MzM5LCAKLSAgICAyNTgsIDI0NDAwLCAyNTgsIDI0NDE3LCAyNTgsIDI0NDM1LCAyNTgsIDI0NTE1LCAyNTgsIDI1MDk2LCAyNTgsIDI1MTQyLCAKLSAgICAyNTgsIDI1MTYzLCAyNTgsIDI1OTAzLCAyNTgsIDI1OTA4LCAyNTgsIDI1OTkxLCAyNTgsIDI2MDA3LCAyNTgsIDI2MDIwLCAKLSAgICAyNTgsIDI2MDQxLCAyNTgsIDI2MDgwLCAyNTgsIDI2MDg1LCAyNTgsIDI2MzUyLCAyNTgsIDI2Mzc2LCAyNTgsIDI2NDA4LCAKLSAgICAyNTgsIDI3NDI0LCAyNTgsIDI3NDkwLCAyNTgsIDI3NTEzLCAyNTgsIDI3NTcxLCAyNTgsIDI3NTk1LCAyNTgsIDI3NjA0LCAKLSAgICAyNTgsIDI3NjExLCAyNTgsIDI3NjYzLCAyNTgsIDI3NjY4LCAyNTgsIDI3NzAwLCAyNTgsIDI4Nzc5LCAyNTgsIDI5MjI2LCAKLSAgICAyNTgsIDI5MjM4LCAyNTgsIDI5MjQzLCAyNTgsIDI5MjQ3LCAyNTgsIDI5MjU1LCAyNTgsIDI5MjczLCAyNTgsIDI5Mjc1LCAKLSAgICAyNTgsIDI5MzU2LCAyNTgsIDI5NTcyLCAyNTgsIDI5NTc3LCAyNTgsIDI5OTE2LCAyNTgsIDI5OTI2LCAyNTgsIDI5OTc2LCAKLSAgICAyNTgsIDI5OTgzLCAyNTgsIDI5OTkyLCAyNTgsIDMwMDAwLCAyNTgsIDMwMDkxLCAyNTgsIDMwMDk4LCAyNTgsIDMwMzI2LCAKLSAgICAyNTgsIDMwMzMzLCAyNTgsIDMwMzgyLCAyNTgsIDMwMzk5LCAyNTgsIDMwNDQ2LCAyNTgsIDMwNjgzLCAyNTgsIDMwNjkwLCAKLSAgICAyNTgsIDMwNzA3LCAyNTgsIDMxMDM0LCAyNTgsIDMxMTYwLCAyNTgsIDMxMTY2LCAyNTgsIDMxMzQ4LCAyNTgsIDMxNDM1LCAKLSAgICAyNTgsIDMxNDgxLCAyNTgsIDMxODU5LCAyNTgsIDMxOTkyLCAyNTgsIDMyNTY2LCAyNTgsIDMyNTkzLCAyNTgsIDMyNjUwLCAKLSAgICAyNTgsIDMyNzAxLCAyNTgsIDMyNzY5LCAyNTgsIDMyNzgwLCAyNTgsIDMyNzg2LCAyNTgsIDMyODE5LCAyNTgsIDMyODk1LCAKLSAgICAyNTgsIDMyOTA1LCAyNTgsIDMzMjUxLCAyNTgsIDMzMjU4LCAyNTgsIDMzMjY3LCAyNTgsIDMzMjc2LCAyNTgsIDMzMjkyLCAKLSAgICAyNTgsIDMzMzA3LCAyNTgsIDMzMzExLCAyNTgsIDMzMzkwLCAyNTgsIDMzMzk0LCAyNTgsIDMzNDAwLCAyNTgsIDM0MzgxLCAKLSAgICAyNTgsIDM0NDExLCAyNTgsIDM0ODgwLCAyNTgsIDM0ODkyLCAyNTgsIDM0OTE1LCAyNTgsIDM1MTk4LCAyNTgsIDM1MjExLCAKLSAgICAyNTgsIDM1MjgyLCAyNTgsIDM1MzI4LCAyNTgsIDM1ODk1LCAyNTgsIDM1OTEwLCAyNTgsIDM1OTI1LCAyNTgsIDM1OTYwLCAKLSAgICAyNTgsIDM1OTk3LCAyNTgsIDM2MTk2LCAyNTgsIDM2MjA4LCAyNTgsIDM2Mjc1LCAyNTgsIDM2NTIzLCAyNTgsIDM2NTU0LCAKLSAgICAyNTgsIDM2NzYzLCAyNTgsIDM2Nzg0LCAyNTgsIDM2Nzg5LCAyNTgsIDM3MDA5LCAyNTgsIDM3MTkzLCAyNTgsIDM3MzE4LCAKLSAgICAyNTgsIDM3MzI0LCAyNTgsIDM3MzI5LCAyNTgsIDM4MjYzLCAyNTgsIDM4MjcyLCAyNTgsIDM4NDI4LCAyNTgsIDM4NTgyLCAKLSAgICAyNTgsIDM4NTg1LCAyNTgsIDM4NjMyLCAyNTgsIDM4NzM3LCAyNTgsIDM4NzUwLCAyNTgsIDM4NzU0LCAyNTgsIDM4NzYxLCAKLSAgICAyNTgsIDM4ODU5LCAyNTgsIDM4ODkzLCAyNTgsIDM4ODk5LCAyNTgsIDM4OTEzLCAyNTgsIDM5MDgwLCAyNTgsIDM5MTMxLCAKLSAgICAyNTgsIDM5MTM1LCAyNTgsIDM5MzE4LCAyNTgsIDM5MzIxLCAyNTgsIDM5MzQwLCAyNTgsIDM5NTkyLCAyNTgsIDM5NjQwLCAKLSAgICAyNTgsIDM5NjQ3LCAyNTgsIDM5NzE3LCAyNTgsIDM5NzI3LCAyNTgsIDM5NzMwLCAyNTgsIDM5NzQwLCAyNTgsIDM5NzcwLCAKLSAgICAyNTgsIDQwMTY1LCAyNTgsIDQwNTY1LCAyNTgsIDQwNTc1LCAyNTgsIDQwNjEzLCAyNTgsIDQwNjM1LCAyNTgsIDQwNjQzLCAKLSAgICAyNTgsIDQwNjUzLCAyNTgsIDQwNjU3LCAyNTgsIDQwNjk3LCAyNTgsIDQwNzAxLCAyNTgsIDQwNzE4LCAyNTgsIDQwNzIzLCAKLSAgICAyNTgsIDQwNzM2LCAyNTgsIDQwNzYzLCAyNTgsIDQwNzc4LCAyNTgsIDQwNzg2LCAyNTgsIDQwODQ1LCAyNTgsIDQwODYwLCAKLSAgICAyNTgsIDQwODY0LCAyNjQsIDMyLCAyNTgsIDEyMzA2LCAyNTgsIDIxMzEzLCAyNTgsIDIxMzE2LCAyNTgsIDIxMzE3LCA1MTIsIAotICAgIDEyMzYzLCAxMjQ0MSwgNTEyLCAxMjM2NSwgMTI0NDEsIDUxMiwgMTIzNjcsIDEyNDQxLCA1MTIsIDEyMzY5LCAxMjQ0MSwgCi0gICAgNTEyLCAxMjM3MSwgMTI0NDEsIDUxMiwgMTIzNzMsIDEyNDQxLCA1MTIsIDEyMzc1LCAxMjQ0MSwgNTEyLCAxMjM3NywgCi0gICAgMTI0NDEsIDUxMiwgMTIzNzksIDEyNDQxLCA1MTIsIDEyMzgxLCAxMjQ0MSwgNTEyLCAxMjM4MywgMTI0NDEsIDUxMiwgCi0gICAgMTIzODUsIDEyNDQxLCA1MTIsIDEyMzg4LCAxMjQ0MSwgNTEyLCAxMjM5MCwgMTI0NDEsIDUxMiwgMTIzOTIsIDEyNDQxLCAKLSAgICA1MTIsIDEyMzk5LCAxMjQ0MSwgNTEyLCAxMjM5OSwgMTI0NDIsIDUxMiwgMTI0MDIsIDEyNDQxLCA1MTIsIDEyNDAyLCAKLSAgICAxMjQ0MiwgNTEyLCAxMjQwNSwgMTI0NDEsIDUxMiwgMTI0MDUsIDEyNDQyLCA1MTIsIDEyNDA4LCAxMjQ0MSwgNTEyLCAKLSAgICAxMjQwOCwgMTI0NDIsIDUxMiwgMTI0MTEsIDEyNDQxLCA1MTIsIDEyNDExLCAxMjQ0MiwgNTEyLCAxMjM1OCwgMTI0NDEsIAotICAgIDUxNCwgMzIsIDEyNDQxLCA1MTQsIDMyLCAxMjQ0MiwgNTEyLCAxMjQ0NSwgMTI0NDEsIDUyMSwgMTI0MjQsIDEyNDI2LCAKLSAgICA1MTIsIDEyNDU5LCAxMjQ0MSwgNTEyLCAxMjQ2MSwgMTI0NDEsIDUxMiwgMTI0NjMsIDEyNDQxLCA1MTIsIDEyNDY1LCAKLSAgICAxMjQ0MSwgNTEyLCAxMjQ2NywgMTI0NDEsIDUxMiwgMTI0NjksIDEyNDQxLCA1MTIsIDEyNDcxLCAxMjQ0MSwgNTEyLCAKLSAgICAxMjQ3MywgMTI0NDEsIDUxMiwgMTI0NzUsIDEyNDQxLCA1MTIsIDEyNDc3LCAxMjQ0MSwgNTEyLCAxMjQ3OSwgMTI0NDEsIAotICAgIDUxMiwgMTI0ODEsIDEyNDQxLCA1MTIsIDEyNDg0LCAxMjQ0MSwgNTEyLCAxMjQ4NiwgMTI0NDEsIDUxMiwgMTI0ODgsIAotICAgIDEyNDQxLCA1MTIsIDEyNDk1LCAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDIsIDUxMiwgMTI0OTgsIDEyNDQxLCA1MTIsIAotICAgIDEyNDk4LCAxMjQ0MiwgNTEyLCAxMjUwMSwgMTI0NDEsIDUxMiwgMTI1MDEsIDEyNDQyLCA1MTIsIDEyNTA0LCAxMjQ0MSwgCi0gICAgNTEyLCAxMjUwNCwgMTI0NDIsIDUxMiwgMTI1MDcsIDEyNDQxLCA1MTIsIDEyNTA3LCAxMjQ0MiwgNTEyLCAxMjQ1NCwgCi0gICAgMTI0NDEsIDUxMiwgMTI1MjcsIDEyNDQxLCA1MTIsIDEyNTI4LCAxMjQ0MSwgNTEyLCAxMjUyOSwgMTI0NDEsIDUxMiwgCi0gICAgMTI1MzAsIDEyNDQxLCA1MTIsIDEyNTQxLCAxMjQ0MSwgNTIxLCAxMjQ2NywgMTI0ODgsIDI1OCwgNDM1MiwgMjU4LCA0MzUzLCAKLSAgICAyNTgsIDQ1MjIsIDI1OCwgNDM1NCwgMjU4LCA0NTI0LCAyNTgsIDQ1MjUsIDI1OCwgNDM1NSwgMjU4LCA0MzU2LCAyNTgsIAotICAgIDQzNTcsIDI1OCwgNDUyOCwgMjU4LCA0NTI5LCAyNTgsIDQ1MzAsIDI1OCwgNDUzMSwgMjU4LCA0NTMyLCAyNTgsIDQ1MzMsIAotICAgIDI1OCwgNDM3OCwgMjU4LCA0MzU4LCAyNTgsIDQzNTksIDI1OCwgNDM2MCwgMjU4LCA0Mzg1LCAyNTgsIDQzNjEsIDI1OCwgCi0gICAgNDM2MiwgMjU4LCA0MzYzLCAyNTgsIDQzNjQsIDI1OCwgNDM2NSwgMjU4LCA0MzY2LCAyNTgsIDQzNjcsIDI1OCwgNDM2OCwgCi0gICAgMjU4LCA0MzY5LCAyNTgsIDQzNzAsIDI1OCwgNDQ0OSwgMjU4LCA0NDUwLCAyNTgsIDQ0NTEsIDI1OCwgNDQ1MiwgMjU4LCAKLSAgICA0NDUzLCAyNTgsIDQ0NTQsIDI1OCwgNDQ1NSwgMjU4LCA0NDU2LCAyNTgsIDQ0NTcsIDI1OCwgNDQ1OCwgMjU4LCA0NDU5LCAKLSAgICAyNTgsIDQ0NjAsIDI1OCwgNDQ2MSwgMjU4LCA0NDYyLCAyNTgsIDQ0NjMsIDI1OCwgNDQ2NCwgMjU4LCA0NDY1LCAyNTgsIAotICAgIDQ0NjYsIDI1OCwgNDQ2NywgMjU4LCA0NDY4LCAyNTgsIDQ0NjksIDI1OCwgNDQ0OCwgMjU4LCA0MzcyLCAyNTgsIDQzNzMsIAotICAgIDI1OCwgNDU1MSwgMjU4LCA0NTUyLCAyNTgsIDQ1NTYsIDI1OCwgNDU1OCwgMjU4LCA0NTYzLCAyNTgsIDQ1NjcsIDI1OCwgCi0gICAgNDU2OSwgMjU4LCA0MzgwLCAyNTgsIDQ1NzMsIDI1OCwgNDU3NSwgMjU4LCA0MzgxLCAyNTgsIDQzODIsIDI1OCwgNDM4NCwgCi0gICAgMjU4LCA0Mzg2LCAyNTgsIDQzODcsIDI1OCwgNDM5MSwgMjU4LCA0MzkzLCAyNTgsIDQzOTUsIDI1OCwgNDM5NiwgMjU4LCAKLSAgICA0Mzk3LCAyNTgsIDQzOTgsIDI1OCwgNDM5OSwgMjU4LCA0NDAyLCAyNTgsIDQ0MDYsIDI1OCwgNDQxNiwgMjU4LCA0NDIzLCAKLSAgICAyNTgsIDQ0MjgsIDI1OCwgNDU5MywgMjU4LCA0NTk0LCAyNTgsIDQ0MzksIDI1OCwgNDQ0MCwgMjU4LCA0NDQxLCAyNTgsIAotICAgIDQ0ODQsIDI1OCwgNDQ4NSwgMjU4LCA0NDg4LCAyNTgsIDQ0OTcsIDI1OCwgNDQ5OCwgMjU4LCA0NTAwLCAyNTgsIDQ1MTAsIAotICAgIDI1OCwgNDUxMywgMjU5LCAxOTk2OCwgMjU5LCAyMDEwOCwgMjU5LCAxOTk3NywgMjU5LCAyMjIzNSwgMjU5LCAxOTk3OCwgCi0gICAgMjU5LCAyMDAxMywgMjU5LCAxOTk3OSwgMjU5LCAzMDAwMiwgMjU5LCAyMDA1NywgMjU5LCAxOTk5MywgMjU5LCAxOTk2OSwgCi0gICAgMjU5LCAyMjgyNSwgMjU5LCAyMjMyMCwgMjU5LCAyMDE1NCwgNzcwLCA0MCwgNDM1MiwgNDEsIDc3MCwgNDAsIDQzNTQsIDQxLCAKLSAgICA3NzAsIDQwLCA0MzU1LCA0MSwgNzcwLCA0MCwgNDM1NywgNDEsIDc3MCwgNDAsIDQzNTgsIDQxLCA3NzAsIDQwLCA0MzU5LCAKLSAgICA0MSwgNzcwLCA0MCwgNDM2MSwgNDEsIDc3MCwgNDAsIDQzNjMsIDQxLCA3NzAsIDQwLCA0MzY0LCA0MSwgNzcwLCA0MCwgCi0gICAgNDM2NiwgNDEsIDc3MCwgNDAsIDQzNjcsIDQxLCA3NzAsIDQwLCA0MzY4LCA0MSwgNzcwLCA0MCwgNDM2OSwgNDEsIDc3MCwgCi0gICAgNDAsIDQzNzAsIDQxLCAxMDI2LCA0MCwgNDM1MiwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU0LCA0NDQ5LCA0MSwgMTAyNiwgCi0gICAgNDAsIDQzNTUsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM1NywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU4LCA0NDQ5LCA0MSwgCi0gICAgMTAyNiwgNDAsIDQzNTksIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2MSwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzYzLCA0NDQ5LCAKLSAgICA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2NiwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY3LCAKLSAgICA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjgsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2OSwgNDQ0OSwgNDEsIDEwMjYsIDQwLCAKLSAgICA0MzcwLCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjQsIDQ0NjIsIDQxLCAxNzk0LCA0MCwgNDM2MywgNDQ1NywgNDM2NCwgCi0gICAgNDQ1MywgNDUyMywgNDEsIDE1MzgsIDQwLCA0MzYzLCA0NDU3LCA0MzcwLCA0NDYyLCA0MSwgNzcwLCA0MCwgMTk5NjgsIDQxLCAKLSAgICA3NzAsIDQwLCAyMDEwOCwgNDEsIDc3MCwgNDAsIDE5OTc3LCA0MSwgNzcwLCA0MCwgMjIyMzUsIDQxLCA3NzAsIDQwLCAKLSAgICAyMDExNiwgNDEsIDc3MCwgNDAsIDIwODQ1LCA0MSwgNzcwLCA0MCwgMTk5NzEsIDQxLCA3NzAsIDQwLCAyMDg0MywgNDEsIAotICAgIDc3MCwgNDAsIDIwMDYxLCA0MSwgNzcwLCA0MCwgMjEzMTMsIDQxLCA3NzAsIDQwLCAyNjM3NiwgNDEsIDc3MCwgNDAsIAotICAgIDI4Nzc5LCA0MSwgNzcwLCA0MCwgMjc3MDAsIDQxLCA3NzAsIDQwLCAyNjQwOCwgNDEsIDc3MCwgNDAsIDM3MzI5LCA0MSwgCi0gICAgNzcwLCA0MCwgMjIzMDMsIDQxLCA3NzAsIDQwLCAyNjA4NSwgNDEsIDc3MCwgNDAsIDI2NjY2LCA0MSwgNzcwLCA0MCwgCi0gICAgMjYzNzcsIDQxLCA3NzAsIDQwLCAzMTAzOCwgNDEsIDc3MCwgNDAsIDIxNTE3LCA0MSwgNzcwLCA0MCwgMjkzMDUsIDQxLCAKLSAgICA3NzAsIDQwLCAzNjAwMSwgNDEsIDc3MCwgNDAsIDMxMDY5LCA0MSwgNzcwLCA0MCwgMjExNzIsIDQxLCA3NzAsIDQwLCAKLSAgICAyMDE5NSwgNDEsIDc3MCwgNDAsIDIxNjI4LCA0MSwgNzcwLCA0MCwgMjMzOTgsIDQxLCA3NzAsIDQwLCAzMDQzNSwgNDEsIAotICAgIDc3MCwgNDAsIDIwMjI1LCA0MSwgNzcwLCA0MCwgMzYwMzksIDQxLCA3NzAsIDQwLCAyMTMzMiwgNDEsIDc3MCwgNDAsIAotICAgIDMxMDg1LCA0MSwgNzcwLCA0MCwgMjAyNDEsIDQxLCA3NzAsIDQwLCAzMzI1OCwgNDEsIDc3MCwgNDAsIDMzMjY3LCA0MSwgCi0gICAgNzc4LCA4MCwgODQsIDY5LCA1MTksIDUwLCA0OSwgNTE5LCA1MCwgNTAsIDUxOSwgNTAsIDUxLCA1MTksIDUwLCA1MiwgNTE5LCAKLSAgICA1MCwgNTMsIDUxOSwgNTAsIDU0LCA1MTksIDUwLCA1NSwgNTE5LCA1MCwgNTYsIDUxOSwgNTAsIDU3LCA1MTksIDUxLCA0OCwgCi0gICAgNTE5LCA1MSwgNDksIDUxOSwgNTEsIDUwLCA1MTksIDUxLCA1MSwgNTE5LCA1MSwgNTIsIDUxOSwgNTEsIDUzLCAyNjMsIAotICAgIDQzNTIsIDI2MywgNDM1NCwgMjYzLCA0MzU1LCAyNjMsIDQzNTcsIDI2MywgNDM1OCwgMjYzLCA0MzU5LCAyNjMsIDQzNjEsIAotICAgIDI2MywgNDM2MywgMjYzLCA0MzY0LCAyNjMsIDQzNjYsIDI2MywgNDM2NywgMjYzLCA0MzY4LCAyNjMsIDQzNjksIDI2MywgCi0gICAgNDM3MCwgNTE5LCA0MzUyLCA0NDQ5LCA1MTksIDQzNTQsIDQ0NDksIDUxOSwgNDM1NSwgNDQ0OSwgNTE5LCA0MzU3LCA0NDQ5LCAKLSAgICA1MTksIDQzNTgsIDQ0NDksIDUxOSwgNDM1OSwgNDQ0OSwgNTE5LCA0MzYxLCA0NDQ5LCA1MTksIDQzNjMsIDQ0NDksIDUxOSwgCi0gICAgNDM2NCwgNDQ0OSwgNTE5LCA0MzY2LCA0NDQ5LCA1MTksIDQzNjcsIDQ0NDksIDUxOSwgNDM2OCwgNDQ0OSwgNTE5LCA0MzY5LCAKLSAgICA0NDQ5LCA1MTksIDQzNzAsIDQ0NDksIDEyODcsIDQzNjYsIDQ0NDksIDQ1MzUsIDQzNTIsIDQ0NTcsIDEwMzEsIDQzNjQsIAotICAgIDQ0NjIsIDQzNjMsIDQ0NjgsIDUxOSwgNDM2MywgNDQ2MiwgMjYzLCAxOTk2OCwgMjYzLCAyMDEwOCwgMjYzLCAxOTk3NywgCi0gICAgMjYzLCAyMjIzNSwgMjYzLCAyMDExNiwgMjYzLCAyMDg0NSwgMjYzLCAxOTk3MSwgMjYzLCAyMDg0MywgMjYzLCAyMDA2MSwgCi0gICAgMjYzLCAyMTMxMywgMjYzLCAyNjM3NiwgMjYzLCAyODc3OSwgMjYzLCAyNzcwMCwgMjYzLCAyNjQwOCwgMjYzLCAzNzMyOSwgCi0gICAgMjYzLCAyMjMwMywgMjYzLCAyNjA4NSwgMjYzLCAyNjY2NiwgMjYzLCAyNjM3NywgMjYzLCAzMTAzOCwgMjYzLCAyMTUxNywgCi0gICAgMjYzLCAyOTMwNSwgMjYzLCAzNjAwMSwgMjYzLCAzMTA2OSwgMjYzLCAyMTE3MiwgMjYzLCAzMTE5MiwgMjYzLCAzMDAwNywgCi0gICAgMjYzLCAyMjg5OSwgMjYzLCAzNjk2OSwgMjYzLCAyMDc3OCwgMjYzLCAyMTM2MCwgMjYzLCAyNzg4MCwgMjYzLCAzODkxNywgCi0gICAgMjYzLCAyMDI0MSwgMjYzLCAyMDg4OSwgMjYzLCAyNzQ5MSwgMjYzLCAxOTk3OCwgMjYzLCAyMDAxMywgMjYzLCAxOTk3OSwgCi0gICAgMjYzLCAyNDAzOCwgMjYzLCAyMTQ5MSwgMjYzLCAyMTMwNywgMjYzLCAyMzQ0NywgMjYzLCAyMzM5OCwgMjYzLCAzMDQzNSwgCi0gICAgMjYzLCAyMDIyNSwgMjYzLCAzNjAzOSwgMjYzLCAyMTMzMiwgMjYzLCAyMjgxMiwgNTE5LCA1MSwgNTQsIDUxOSwgNTEsIDU1LCAKLSAgICA1MTksIDUxLCA1NiwgNTE5LCA1MSwgNTcsIDUxOSwgNTIsIDQ4LCA1MTksIDUyLCA0OSwgNTE5LCA1MiwgNTAsIDUxOSwgNTIsIAotICAgIDUxLCA1MTksIDUyLCA1MiwgNTE5LCA1MiwgNTMsIDUxOSwgNTIsIDU0LCA1MTksIDUyLCA1NSwgNTE5LCA1MiwgNTYsIDUxOSwgCi0gICAgNTIsIDU3LCA1MTksIDUzLCA0OCwgNTE0LCA0OSwgMjYzNzYsIDUxNCwgNTAsIDI2Mzc2LCA1MTQsIDUxLCAyNjM3NiwgNTE0LCAKLSAgICA1MiwgMjYzNzYsIDUxNCwgNTMsIDI2Mzc2LCA1MTQsIDU0LCAyNjM3NiwgNTE0LCA1NSwgMjYzNzYsIDUxNCwgNTYsIAotICAgIDI2Mzc2LCA1MTQsIDU3LCAyNjM3NiwgNzcwLCA0OSwgNDgsIDI2Mzc2LCA3NzAsIDQ5LCA0OSwgMjYzNzYsIDc3MCwgNDksIAotICAgIDUwLCAyNjM3NiwgNTIyLCA3MiwgMTAzLCA3NzgsIDEwMSwgMTE0LCAxMDMsIDUyMiwgMTAxLCA4NiwgNzc4LCA3NiwgODQsIAotICAgIDY4LCAyNjMsIDEyNDUwLCAyNjMsIDEyNDUyLCAyNjMsIDEyNDU0LCAyNjMsIDEyNDU2LCAyNjMsIDEyNDU4LCAyNjMsIAotICAgIDEyNDU5LCAyNjMsIDEyNDYxLCAyNjMsIDEyNDYzLCAyNjMsIDEyNDY1LCAyNjMsIDEyNDY3LCAyNjMsIDEyNDY5LCAyNjMsIAotICAgIDEyNDcxLCAyNjMsIDEyNDczLCAyNjMsIDEyNDc1LCAyNjMsIDEyNDc3LCAyNjMsIDEyNDc5LCAyNjMsIDEyNDgxLCAyNjMsIAotICAgIDEyNDg0LCAyNjMsIDEyNDg2LCAyNjMsIDEyNDg4LCAyNjMsIDEyNDkwLCAyNjMsIDEyNDkxLCAyNjMsIDEyNDkyLCAyNjMsIAotICAgIDEyNDkzLCAyNjMsIDEyNDk0LCAyNjMsIDEyNDk1LCAyNjMsIDEyNDk4LCAyNjMsIDEyNTAxLCAyNjMsIDEyNTA0LCAyNjMsIAotICAgIDEyNTA3LCAyNjMsIDEyNTEwLCAyNjMsIDEyNTExLCAyNjMsIDEyNTEyLCAyNjMsIDEyNTEzLCAyNjMsIDEyNTE0LCAyNjMsIAotICAgIDEyNTE2LCAyNjMsIDEyNTE4LCAyNjMsIDEyNTIwLCAyNjMsIDEyNTIxLCAyNjMsIDEyNTIyLCAyNjMsIDEyNTIzLCAyNjMsIAotICAgIDEyNTI0LCAyNjMsIDEyNTI1LCAyNjMsIDEyNTI3LCAyNjMsIDEyNTI4LCAyNjMsIDEyNTI5LCAyNjMsIDEyNTMwLCAxMDM0LCAKLSAgICAxMjQ1MCwgMTI0OTcsIDEyNTQwLCAxMjQ4OCwgMTAzNCwgMTI0NTAsIDEyNTIzLCAxMjUwMSwgMTI0NDksIDEwMzQsIAorICAgIDEwMCwgMjU4LCAxMDksIDc3MiwgNDgsIDgyNjAsIDUxLCA1MTIsIDg1OTIsIDgyNCwgNTEyLCA4NTk0LCA4MjQsIDUxMiwgCisgICAgODU5NiwgODI0LCA1MTIsIDg2NTYsIDgyNCwgNTEyLCA4NjYwLCA4MjQsIDUxMiwgODY1OCwgODI0LCA1MTIsIDg3MDcsIAorICAgIDgyNCwgNTEyLCA4NzEyLCA4MjQsIDUxMiwgODcxNSwgODI0LCA1MTIsIDg3MzksIDgyNCwgNTEyLCA4NzQxLCA4MjQsIDUxNCwgCisgICAgODc0NywgODc0NywgNzcwLCA4NzQ3LCA4NzQ3LCA4NzQ3LCA1MTQsIDg3NTAsIDg3NTAsIDc3MCwgODc1MCwgODc1MCwgCisgICAgODc1MCwgNTEyLCA4NzY0LCA4MjQsIDUxMiwgODc3MSwgODI0LCA1MTIsIDg3NzMsIDgyNCwgNTEyLCA4Nzc2LCA4MjQsIAorICAgIDUxMiwgNjEsIDgyNCwgNTEyLCA4ODAxLCA4MjQsIDUxMiwgODc4MSwgODI0LCA1MTIsIDYwLCA4MjQsIDUxMiwgNjIsIDgyNCwgCisgICAgNTEyLCA4ODA0LCA4MjQsIDUxMiwgODgwNSwgODI0LCA1MTIsIDg4MTgsIDgyNCwgNTEyLCA4ODE5LCA4MjQsIDUxMiwgCisgICAgODgyMiwgODI0LCA1MTIsIDg4MjMsIDgyNCwgNTEyLCA4ODI2LCA4MjQsIDUxMiwgODgyNywgODI0LCA1MTIsIDg4MzQsIAorICAgIDgyNCwgNTEyLCA4ODM1LCA4MjQsIDUxMiwgODgzOCwgODI0LCA1MTIsIDg4MzksIDgyNCwgNTEyLCA4ODY2LCA4MjQsIDUxMiwgCisgICAgODg3MiwgODI0LCA1MTIsIDg4NzMsIDgyNCwgNTEyLCA4ODc1LCA4MjQsIDUxMiwgODgyOCwgODI0LCA1MTIsIDg4MjksIAorICAgIDgyNCwgNTEyLCA4ODQ5LCA4MjQsIDUxMiwgODg1MCwgODI0LCA1MTIsIDg4ODIsIDgyNCwgNTEyLCA4ODgzLCA4MjQsIDUxMiwgCisgICAgODg4NCwgODI0LCA1MTIsIDg4ODUsIDgyNCwgMjU2LCAxMjI5NiwgMjU2LCAxMjI5NywgMjYzLCA0OSwgMjYzLCA1MCwgMjYzLCAKKyAgICA1MSwgMjYzLCA1MiwgMjYzLCA1MywgMjYzLCA1NCwgMjYzLCA1NSwgMjYzLCA1NiwgMjYzLCA1NywgNTE5LCA0OSwgNDgsIAorICAgIDUxOSwgNDksIDQ5LCA1MTksIDQ5LCA1MCwgNTE5LCA0OSwgNTEsIDUxOSwgNDksIDUyLCA1MTksIDQ5LCA1MywgNTE5LCA0OSwgCisgICAgNTQsIDUxOSwgNDksIDU1LCA1MTksIDQ5LCA1NiwgNTE5LCA0OSwgNTcsIDUxOSwgNTAsIDQ4LCA3NzAsIDQwLCA0OSwgNDEsIAorICAgIDc3MCwgNDAsIDUwLCA0MSwgNzcwLCA0MCwgNTEsIDQxLCA3NzAsIDQwLCA1MiwgNDEsIDc3MCwgNDAsIDUzLCA0MSwgNzcwLCAKKyAgICA0MCwgNTQsIDQxLCA3NzAsIDQwLCA1NSwgNDEsIDc3MCwgNDAsIDU2LCA0MSwgNzcwLCA0MCwgNTcsIDQxLCAxMDI2LCA0MCwgCisgICAgNDksIDQ4LCA0MSwgMTAyNiwgNDAsIDQ5LCA0OSwgNDEsIDEwMjYsIDQwLCA0OSwgNTAsIDQxLCAxMDI2LCA0MCwgNDksIDUxLCAKKyAgICA0MSwgMTAyNiwgNDAsIDQ5LCA1MiwgNDEsIDEwMjYsIDQwLCA0OSwgNTMsIDQxLCAxMDI2LCA0MCwgNDksIDU0LCA0MSwgCisgICAgMTAyNiwgNDAsIDQ5LCA1NSwgNDEsIDEwMjYsIDQwLCA0OSwgNTYsIDQxLCAxMDI2LCA0MCwgNDksIDU3LCA0MSwgMTAyNiwgCisgICAgNDAsIDUwLCA0OCwgNDEsIDUxNCwgNDksIDQ2LCA1MTQsIDUwLCA0NiwgNTE0LCA1MSwgNDYsIDUxNCwgNTIsIDQ2LCA1MTQsIAorICAgIDUzLCA0NiwgNTE0LCA1NCwgNDYsIDUxNCwgNTUsIDQ2LCA1MTQsIDU2LCA0NiwgNTE0LCA1NywgNDYsIDc3MCwgNDksIDQ4LCAKKyAgICA0NiwgNzcwLCA0OSwgNDksIDQ2LCA3NzAsIDQ5LCA1MCwgNDYsIDc3MCwgNDksIDUxLCA0NiwgNzcwLCA0OSwgNTIsIDQ2LCAKKyAgICA3NzAsIDQ5LCA1MywgNDYsIDc3MCwgNDksIDU0LCA0NiwgNzcwLCA0OSwgNTUsIDQ2LCA3NzAsIDQ5LCA1NiwgNDYsIDc3MCwgCisgICAgNDksIDU3LCA0NiwgNzcwLCA1MCwgNDgsIDQ2LCA3NzAsIDQwLCA5NywgNDEsIDc3MCwgNDAsIDk4LCA0MSwgNzcwLCA0MCwgCisgICAgOTksIDQxLCA3NzAsIDQwLCAxMDAsIDQxLCA3NzAsIDQwLCAxMDEsIDQxLCA3NzAsIDQwLCAxMDIsIDQxLCA3NzAsIDQwLCAKKyAgICAxMDMsIDQxLCA3NzAsIDQwLCAxMDQsIDQxLCA3NzAsIDQwLCAxMDUsIDQxLCA3NzAsIDQwLCAxMDYsIDQxLCA3NzAsIDQwLCAKKyAgICAxMDcsIDQxLCA3NzAsIDQwLCAxMDgsIDQxLCA3NzAsIDQwLCAxMDksIDQxLCA3NzAsIDQwLCAxMTAsIDQxLCA3NzAsIDQwLCAKKyAgICAxMTEsIDQxLCA3NzAsIDQwLCAxMTIsIDQxLCA3NzAsIDQwLCAxMTMsIDQxLCA3NzAsIDQwLCAxMTQsIDQxLCA3NzAsIDQwLCAKKyAgICAxMTUsIDQxLCA3NzAsIDQwLCAxMTYsIDQxLCA3NzAsIDQwLCAxMTcsIDQxLCA3NzAsIDQwLCAxMTgsIDQxLCA3NzAsIDQwLCAKKyAgICAxMTksIDQxLCA3NzAsIDQwLCAxMjAsIDQxLCA3NzAsIDQwLCAxMjEsIDQxLCA3NzAsIDQwLCAxMjIsIDQxLCAyNjMsIDY1LCAKKyAgICAyNjMsIDY2LCAyNjMsIDY3LCAyNjMsIDY4LCAyNjMsIDY5LCAyNjMsIDcwLCAyNjMsIDcxLCAyNjMsIDcyLCAyNjMsIDczLCAKKyAgICAyNjMsIDc0LCAyNjMsIDc1LCAyNjMsIDc2LCAyNjMsIDc3LCAyNjMsIDc4LCAyNjMsIDc5LCAyNjMsIDgwLCAyNjMsIDgxLCAKKyAgICAyNjMsIDgyLCAyNjMsIDgzLCAyNjMsIDg0LCAyNjMsIDg1LCAyNjMsIDg2LCAyNjMsIDg3LCAyNjMsIDg4LCAyNjMsIDg5LCAKKyAgICAyNjMsIDkwLCAyNjMsIDk3LCAyNjMsIDk4LCAyNjMsIDk5LCAyNjMsIDEwMCwgMjYzLCAxMDEsIDI2MywgMTAyLCAyNjMsIAorICAgIDEwMywgMjYzLCAxMDQsIDI2MywgMTA1LCAyNjMsIDEwNiwgMjYzLCAxMDcsIDI2MywgMTA4LCAyNjMsIDEwOSwgMjYzLCAKKyAgICAxMTAsIDI2MywgMTExLCAyNjMsIDExMiwgMjYzLCAxMTMsIDI2MywgMTE0LCAyNjMsIDExNSwgMjYzLCAxMTYsIDI2MywgCisgICAgMTE3LCAyNjMsIDExOCwgMjYzLCAxMTksIDI2MywgMTIwLCAyNjMsIDEyMSwgMjYzLCAxMjIsIDI2MywgNDgsIDEwMjYsIAorICAgIDg3NDcsIDg3NDcsIDg3NDcsIDg3NDcsIDc3MCwgNTgsIDU4LCA2MSwgNTE0LCA2MSwgNjEsIDc3MCwgNjEsIDYxLCA2MSwgCisgICAgNTEyLCAxMDk3MywgODI0LCAyNjEsIDEwNiwgMjU5LCA4NiwgMjU5LCAxMTYxNywgMjU4LCAyNzU5NywgMjU4LCA0MDg2MywgCisgICAgMjU4LCAxOTk2OCwgMjU4LCAyMDAwOCwgMjU4LCAyMDAyMiwgMjU4LCAyMDAzMSwgMjU4LCAyMDA1NywgMjU4LCAyMDEwMSwgCisgICAgMjU4LCAyMDEwOCwgMjU4LCAyMDEyOCwgMjU4LCAyMDE1NCwgMjU4LCAyMDc5OSwgMjU4LCAyMDgzNywgMjU4LCAyMDg0MywgCisgICAgMjU4LCAyMDg2NiwgMjU4LCAyMDg4NiwgMjU4LCAyMDkwNywgMjU4LCAyMDk2MCwgMjU4LCAyMDk4MSwgMjU4LCAyMDk5MiwgCisgICAgMjU4LCAyMTE0NywgMjU4LCAyMTI0MSwgMjU4LCAyMTI2OSwgMjU4LCAyMTI3NCwgMjU4LCAyMTMwNCwgMjU4LCAyMTMxMywgCisgICAgMjU4LCAyMTM0MCwgMjU4LCAyMTM1MywgMjU4LCAyMTM3OCwgMjU4LCAyMTQzMCwgMjU4LCAyMTQ0OCwgMjU4LCAyMTQ3NSwgCisgICAgMjU4LCAyMjIzMSwgMjU4LCAyMjMwMywgMjU4LCAyMjc2MywgMjU4LCAyMjc4NiwgMjU4LCAyMjc5NCwgMjU4LCAyMjgwNSwgCisgICAgMjU4LCAyMjgyMywgMjU4LCAyMjg5OSwgMjU4LCAyMzM3NiwgMjU4LCAyMzQyNCwgMjU4LCAyMzU0NCwgMjU4LCAyMzU2NywgCisgICAgMjU4LCAyMzU4NiwgMjU4LCAyMzYwOCwgMjU4LCAyMzY2MiwgMjU4LCAyMzY2NSwgMjU4LCAyNDAyNywgMjU4LCAyNDAzNywgCisgICAgMjU4LCAyNDA0OSwgMjU4LCAyNDA2MiwgMjU4LCAyNDE3OCwgMjU4LCAyNDE4NiwgMjU4LCAyNDE5MSwgMjU4LCAyNDMwOCwgCisgICAgMjU4LCAyNDMxOCwgMjU4LCAyNDMzMSwgMjU4LCAyNDMzOSwgMjU4LCAyNDQwMCwgMjU4LCAyNDQxNywgMjU4LCAyNDQzNSwgCisgICAgMjU4LCAyNDUxNSwgMjU4LCAyNTA5NiwgMjU4LCAyNTE0MiwgMjU4LCAyNTE2MywgMjU4LCAyNTkwMywgMjU4LCAyNTkwOCwgCisgICAgMjU4LCAyNTk5MSwgMjU4LCAyNjAwNywgMjU4LCAyNjAyMCwgMjU4LCAyNjA0MSwgMjU4LCAyNjA4MCwgMjU4LCAyNjA4NSwgCisgICAgMjU4LCAyNjM1MiwgMjU4LCAyNjM3NiwgMjU4LCAyNjQwOCwgMjU4LCAyNzQyNCwgMjU4LCAyNzQ5MCwgMjU4LCAyNzUxMywgCisgICAgMjU4LCAyNzU3MSwgMjU4LCAyNzU5NSwgMjU4LCAyNzYwNCwgMjU4LCAyNzYxMSwgMjU4LCAyNzY2MywgMjU4LCAyNzY2OCwgCisgICAgMjU4LCAyNzcwMCwgMjU4LCAyODc3OSwgMjU4LCAyOTIyNiwgMjU4LCAyOTIzOCwgMjU4LCAyOTI0MywgMjU4LCAyOTI0NywgCisgICAgMjU4LCAyOTI1NSwgMjU4LCAyOTI3MywgMjU4LCAyOTI3NSwgMjU4LCAyOTM1NiwgMjU4LCAyOTU3MiwgMjU4LCAyOTU3NywgCisgICAgMjU4LCAyOTkxNiwgMjU4LCAyOTkyNiwgMjU4LCAyOTk3NiwgMjU4LCAyOTk4MywgMjU4LCAyOTk5MiwgMjU4LCAzMDAwMCwgCisgICAgMjU4LCAzMDA5MSwgMjU4LCAzMDA5OCwgMjU4LCAzMDMyNiwgMjU4LCAzMDMzMywgMjU4LCAzMDM4MiwgMjU4LCAzMDM5OSwgCisgICAgMjU4LCAzMDQ0NiwgMjU4LCAzMDY4MywgMjU4LCAzMDY5MCwgMjU4LCAzMDcwNywgMjU4LCAzMTAzNCwgMjU4LCAzMTE2MCwgCisgICAgMjU4LCAzMTE2NiwgMjU4LCAzMTM0OCwgMjU4LCAzMTQzNSwgMjU4LCAzMTQ4MSwgMjU4LCAzMTg1OSwgMjU4LCAzMTk5MiwgCisgICAgMjU4LCAzMjU2NiwgMjU4LCAzMjU5MywgMjU4LCAzMjY1MCwgMjU4LCAzMjcwMSwgMjU4LCAzMjc2OSwgMjU4LCAzMjc4MCwgCisgICAgMjU4LCAzMjc4NiwgMjU4LCAzMjgxOSwgMjU4LCAzMjg5NSwgMjU4LCAzMjkwNSwgMjU4LCAzMzI1MSwgMjU4LCAzMzI1OCwgCisgICAgMjU4LCAzMzI2NywgMjU4LCAzMzI3NiwgMjU4LCAzMzI5MiwgMjU4LCAzMzMwNywgMjU4LCAzMzMxMSwgMjU4LCAzMzM5MCwgCisgICAgMjU4LCAzMzM5NCwgMjU4LCAzMzQwMCwgMjU4LCAzNDM4MSwgMjU4LCAzNDQxMSwgMjU4LCAzNDg4MCwgMjU4LCAzNDg5MiwgCisgICAgMjU4LCAzNDkxNSwgMjU4LCAzNTE5OCwgMjU4LCAzNTIxMSwgMjU4LCAzNTI4MiwgMjU4LCAzNTMyOCwgMjU4LCAzNTg5NSwgCisgICAgMjU4LCAzNTkxMCwgMjU4LCAzNTkyNSwgMjU4LCAzNTk2MCwgMjU4LCAzNTk5NywgMjU4LCAzNjE5NiwgMjU4LCAzNjIwOCwgCisgICAgMjU4LCAzNjI3NSwgMjU4LCAzNjUyMywgMjU4LCAzNjU1NCwgMjU4LCAzNjc2MywgMjU4LCAzNjc4NCwgMjU4LCAzNjc4OSwgCisgICAgMjU4LCAzNzAwOSwgMjU4LCAzNzE5MywgMjU4LCAzNzMxOCwgMjU4LCAzNzMyNCwgMjU4LCAzNzMyOSwgMjU4LCAzODI2MywgCisgICAgMjU4LCAzODI3MiwgMjU4LCAzODQyOCwgMjU4LCAzODU4MiwgMjU4LCAzODU4NSwgMjU4LCAzODYzMiwgMjU4LCAzODczNywgCisgICAgMjU4LCAzODc1MCwgMjU4LCAzODc1NCwgMjU4LCAzODc2MSwgMjU4LCAzODg1OSwgMjU4LCAzODg5MywgMjU4LCAzODg5OSwgCisgICAgMjU4LCAzODkxMywgMjU4LCAzOTA4MCwgMjU4LCAzOTEzMSwgMjU4LCAzOTEzNSwgMjU4LCAzOTMxOCwgMjU4LCAzOTMyMSwgCisgICAgMjU4LCAzOTM0MCwgMjU4LCAzOTU5MiwgMjU4LCAzOTY0MCwgMjU4LCAzOTY0NywgMjU4LCAzOTcxNywgMjU4LCAzOTcyNywgCisgICAgMjU4LCAzOTczMCwgMjU4LCAzOTc0MCwgMjU4LCAzOTc3MCwgMjU4LCA0MDE2NSwgMjU4LCA0MDU2NSwgMjU4LCA0MDU3NSwgCisgICAgMjU4LCA0MDYxMywgMjU4LCA0MDYzNSwgMjU4LCA0MDY0MywgMjU4LCA0MDY1MywgMjU4LCA0MDY1NywgMjU4LCA0MDY5NywgCisgICAgMjU4LCA0MDcwMSwgMjU4LCA0MDcxOCwgMjU4LCA0MDcyMywgMjU4LCA0MDczNiwgMjU4LCA0MDc2MywgMjU4LCA0MDc3OCwgCisgICAgMjU4LCA0MDc4NiwgMjU4LCA0MDg0NSwgMjU4LCA0MDg2MCwgMjU4LCA0MDg2NCwgMjY0LCAzMiwgMjU4LCAxMjMwNiwgMjU4LCAKKyAgICAyMTMxMywgMjU4LCAyMTMxNiwgMjU4LCAyMTMxNywgNTEyLCAxMjM2MywgMTI0NDEsIDUxMiwgMTIzNjUsIDEyNDQxLCA1MTIsIAorICAgIDEyMzY3LCAxMjQ0MSwgNTEyLCAxMjM2OSwgMTI0NDEsIDUxMiwgMTIzNzEsIDEyNDQxLCA1MTIsIDEyMzczLCAxMjQ0MSwgCisgICAgNTEyLCAxMjM3NSwgMTI0NDEsIDUxMiwgMTIzNzcsIDEyNDQxLCA1MTIsIDEyMzc5LCAxMjQ0MSwgNTEyLCAxMjM4MSwgCisgICAgMTI0NDEsIDUxMiwgMTIzODMsIDEyNDQxLCA1MTIsIDEyMzg1LCAxMjQ0MSwgNTEyLCAxMjM4OCwgMTI0NDEsIDUxMiwgCisgICAgMTIzOTAsIDEyNDQxLCA1MTIsIDEyMzkyLCAxMjQ0MSwgNTEyLCAxMjM5OSwgMTI0NDEsIDUxMiwgMTIzOTksIDEyNDQyLCAKKyAgICA1MTIsIDEyNDAyLCAxMjQ0MSwgNTEyLCAxMjQwMiwgMTI0NDIsIDUxMiwgMTI0MDUsIDEyNDQxLCA1MTIsIDEyNDA1LCAKKyAgICAxMjQ0MiwgNTEyLCAxMjQwOCwgMTI0NDEsIDUxMiwgMTI0MDgsIDEyNDQyLCA1MTIsIDEyNDExLCAxMjQ0MSwgNTEyLCAKKyAgICAxMjQxMSwgMTI0NDIsIDUxMiwgMTIzNTgsIDEyNDQxLCA1MTQsIDMyLCAxMjQ0MSwgNTE0LCAzMiwgMTI0NDIsIDUxMiwgCisgICAgMTI0NDUsIDEyNDQxLCA1MjEsIDEyNDI0LCAxMjQyNiwgNTEyLCAxMjQ1OSwgMTI0NDEsIDUxMiwgMTI0NjEsIDEyNDQxLCAKKyAgICA1MTIsIDEyNDYzLCAxMjQ0MSwgNTEyLCAxMjQ2NSwgMTI0NDEsIDUxMiwgMTI0NjcsIDEyNDQxLCA1MTIsIDEyNDY5LCAKKyAgICAxMjQ0MSwgNTEyLCAxMjQ3MSwgMTI0NDEsIDUxMiwgMTI0NzMsIDEyNDQxLCA1MTIsIDEyNDc1LCAxMjQ0MSwgNTEyLCAKKyAgICAxMjQ3NywgMTI0NDEsIDUxMiwgMTI0NzksIDEyNDQxLCA1MTIsIDEyNDgxLCAxMjQ0MSwgNTEyLCAxMjQ4NCwgMTI0NDEsIAorICAgIDUxMiwgMTI0ODYsIDEyNDQxLCA1MTIsIDEyNDg4LCAxMjQ0MSwgNTEyLCAxMjQ5NSwgMTI0NDEsIDUxMiwgMTI0OTUsIAorICAgIDEyNDQyLCA1MTIsIDEyNDk4LCAxMjQ0MSwgNTEyLCAxMjQ5OCwgMTI0NDIsIDUxMiwgMTI1MDEsIDEyNDQxLCA1MTIsIAorICAgIDEyNTAxLCAxMjQ0MiwgNTEyLCAxMjUwNCwgMTI0NDEsIDUxMiwgMTI1MDQsIDEyNDQyLCA1MTIsIDEyNTA3LCAxMjQ0MSwgCisgICAgNTEyLCAxMjUwNywgMTI0NDIsIDUxMiwgMTI0NTQsIDEyNDQxLCA1MTIsIDEyNTI3LCAxMjQ0MSwgNTEyLCAxMjUyOCwgCisgICAgMTI0NDEsIDUxMiwgMTI1MjksIDEyNDQxLCA1MTIsIDEyNTMwLCAxMjQ0MSwgNTEyLCAxMjU0MSwgMTI0NDEsIDUyMSwgCisgICAgMTI0NjcsIDEyNDg4LCAyNTgsIDQzNTIsIDI1OCwgNDM1MywgMjU4LCA0NTIyLCAyNTgsIDQzNTQsIDI1OCwgNDUyNCwgMjU4LCAKKyAgICA0NTI1LCAyNTgsIDQzNTUsIDI1OCwgNDM1NiwgMjU4LCA0MzU3LCAyNTgsIDQ1MjgsIDI1OCwgNDUyOSwgMjU4LCA0NTMwLCAKKyAgICAyNTgsIDQ1MzEsIDI1OCwgNDUzMiwgMjU4LCA0NTMzLCAyNTgsIDQzNzgsIDI1OCwgNDM1OCwgMjU4LCA0MzU5LCAyNTgsIAorICAgIDQzNjAsIDI1OCwgNDM4NSwgMjU4LCA0MzYxLCAyNTgsIDQzNjIsIDI1OCwgNDM2MywgMjU4LCA0MzY0LCAyNTgsIDQzNjUsIAorICAgIDI1OCwgNDM2NiwgMjU4LCA0MzY3LCAyNTgsIDQzNjgsIDI1OCwgNDM2OSwgMjU4LCA0MzcwLCAyNTgsIDQ0NDksIDI1OCwgCisgICAgNDQ1MCwgMjU4LCA0NDUxLCAyNTgsIDQ0NTIsIDI1OCwgNDQ1MywgMjU4LCA0NDU0LCAyNTgsIDQ0NTUsIDI1OCwgNDQ1NiwgCisgICAgMjU4LCA0NDU3LCAyNTgsIDQ0NTgsIDI1OCwgNDQ1OSwgMjU4LCA0NDYwLCAyNTgsIDQ0NjEsIDI1OCwgNDQ2MiwgMjU4LCAKKyAgICA0NDYzLCAyNTgsIDQ0NjQsIDI1OCwgNDQ2NSwgMjU4LCA0NDY2LCAyNTgsIDQ0NjcsIDI1OCwgNDQ2OCwgMjU4LCA0NDY5LCAKKyAgICAyNTgsIDQ0NDgsIDI1OCwgNDM3MiwgMjU4LCA0MzczLCAyNTgsIDQ1NTEsIDI1OCwgNDU1MiwgMjU4LCA0NTU2LCAyNTgsIAorICAgIDQ1NTgsIDI1OCwgNDU2MywgMjU4LCA0NTY3LCAyNTgsIDQ1NjksIDI1OCwgNDM4MCwgMjU4LCA0NTczLCAyNTgsIDQ1NzUsIAorICAgIDI1OCwgNDM4MSwgMjU4LCA0MzgyLCAyNTgsIDQzODQsIDI1OCwgNDM4NiwgMjU4LCA0Mzg3LCAyNTgsIDQzOTEsIDI1OCwgCisgICAgNDM5MywgMjU4LCA0Mzk1LCAyNTgsIDQzOTYsIDI1OCwgNDM5NywgMjU4LCA0Mzk4LCAyNTgsIDQzOTksIDI1OCwgNDQwMiwgCisgICAgMjU4LCA0NDA2LCAyNTgsIDQ0MTYsIDI1OCwgNDQyMywgMjU4LCA0NDI4LCAyNTgsIDQ1OTMsIDI1OCwgNDU5NCwgMjU4LCAKKyAgICA0NDM5LCAyNTgsIDQ0NDAsIDI1OCwgNDQ0MSwgMjU4LCA0NDg0LCAyNTgsIDQ0ODUsIDI1OCwgNDQ4OCwgMjU4LCA0NDk3LCAKKyAgICAyNTgsIDQ0OTgsIDI1OCwgNDUwMCwgMjU4LCA0NTEwLCAyNTgsIDQ1MTMsIDI1OSwgMTk5NjgsIDI1OSwgMjAxMDgsIDI1OSwgCisgICAgMTk5NzcsIDI1OSwgMjIyMzUsIDI1OSwgMTk5NzgsIDI1OSwgMjAwMTMsIDI1OSwgMTk5NzksIDI1OSwgMzAwMDIsIDI1OSwgCisgICAgMjAwNTcsIDI1OSwgMTk5OTMsIDI1OSwgMTk5NjksIDI1OSwgMjI4MjUsIDI1OSwgMjIzMjAsIDI1OSwgMjAxNTQsIDc3MCwgCisgICAgNDAsIDQzNTIsIDQxLCA3NzAsIDQwLCA0MzU0LCA0MSwgNzcwLCA0MCwgNDM1NSwgNDEsIDc3MCwgNDAsIDQzNTcsIDQxLCAKKyAgICA3NzAsIDQwLCA0MzU4LCA0MSwgNzcwLCA0MCwgNDM1OSwgNDEsIDc3MCwgNDAsIDQzNjEsIDQxLCA3NzAsIDQwLCA0MzYzLCAKKyAgICA0MSwgNzcwLCA0MCwgNDM2NCwgNDEsIDc3MCwgNDAsIDQzNjYsIDQxLCA3NzAsIDQwLCA0MzY3LCA0MSwgNzcwLCA0MCwgCisgICAgNDM2OCwgNDEsIDc3MCwgNDAsIDQzNjksIDQxLCA3NzAsIDQwLCA0MzcwLCA0MSwgMTAyNiwgNDAsIDQzNTIsIDQ0NDksIDQxLCAKKyAgICAxMDI2LCA0MCwgNDM1NCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU1LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNTcsIDQ0NDksIAorICAgIDQxLCAxMDI2LCA0MCwgNDM1OCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzU5LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIDQzNjEsIAorICAgIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2MywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDQ5LCA0MSwgMTAyNiwgNDAsIAorICAgIDQzNjYsIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM2NywgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY4LCA0NDQ5LCA0MSwgMTAyNiwgCisgICAgNDAsIDQzNjksIDQ0NDksIDQxLCAxMDI2LCA0MCwgNDM3MCwgNDQ0OSwgNDEsIDEwMjYsIDQwLCA0MzY0LCA0NDYyLCA0MSwgCisgICAgMTc5NCwgNDAsIDQzNjMsIDQ0NTcsIDQzNjQsIDQ0NTMsIDQ1MjMsIDQxLCAxNTM4LCA0MCwgNDM2MywgNDQ1NywgNDM3MCwgCisgICAgNDQ2MiwgNDEsIDc3MCwgNDAsIDE5OTY4LCA0MSwgNzcwLCA0MCwgMjAxMDgsIDQxLCA3NzAsIDQwLCAxOTk3NywgNDEsIAorICAgIDc3MCwgNDAsIDIyMjM1LCA0MSwgNzcwLCA0MCwgMjAxMTYsIDQxLCA3NzAsIDQwLCAyMDg0NSwgNDEsIDc3MCwgNDAsIAorICAgIDE5OTcxLCA0MSwgNzcwLCA0MCwgMjA4NDMsIDQxLCA3NzAsIDQwLCAyMDA2MSwgNDEsIDc3MCwgNDAsIDIxMzEzLCA0MSwgCisgICAgNzcwLCA0MCwgMjYzNzYsIDQxLCA3NzAsIDQwLCAyODc3OSwgNDEsIDc3MCwgNDAsIDI3NzAwLCA0MSwgNzcwLCA0MCwgCisgICAgMjY0MDgsIDQxLCA3NzAsIDQwLCAzNzMyOSwgNDEsIDc3MCwgNDAsIDIyMzAzLCA0MSwgNzcwLCA0MCwgMjYwODUsIDQxLCAKKyAgICA3NzAsIDQwLCAyNjY2NiwgNDEsIDc3MCwgNDAsIDI2Mzc3LCA0MSwgNzcwLCA0MCwgMzEwMzgsIDQxLCA3NzAsIDQwLCAKKyAgICAyMTUxNywgNDEsIDc3MCwgNDAsIDI5MzA1LCA0MSwgNzcwLCA0MCwgMzYwMDEsIDQxLCA3NzAsIDQwLCAzMTA2OSwgNDEsIAorICAgIDc3MCwgNDAsIDIxMTcyLCA0MSwgNzcwLCA0MCwgMjAxOTUsIDQxLCA3NzAsIDQwLCAyMTYyOCwgNDEsIDc3MCwgNDAsIAorICAgIDIzMzk4LCA0MSwgNzcwLCA0MCwgMzA0MzUsIDQxLCA3NzAsIDQwLCAyMDIyNSwgNDEsIDc3MCwgNDAsIDM2MDM5LCA0MSwgCisgICAgNzcwLCA0MCwgMjEzMzIsIDQxLCA3NzAsIDQwLCAzMTA4NSwgNDEsIDc3MCwgNDAsIDIwMjQxLCA0MSwgNzcwLCA0MCwgCisgICAgMzMyNTgsIDQxLCA3NzAsIDQwLCAzMzI2NywgNDEsIDI2MywgMjE4MzksIDI2MywgMjQxODgsIDI2MywgMjU5OTEsIDI2MywgCisgICAgMzE2MzEsIDc3OCwgODAsIDg0LCA2OSwgNTE5LCA1MCwgNDksIDUxOSwgNTAsIDUwLCA1MTksIDUwLCA1MSwgNTE5LCA1MCwgCisgICAgNTIsIDUxOSwgNTAsIDUzLCA1MTksIDUwLCA1NCwgNTE5LCA1MCwgNTUsIDUxOSwgNTAsIDU2LCA1MTksIDUwLCA1NywgNTE5LCAKKyAgICA1MSwgNDgsIDUxOSwgNTEsIDQ5LCA1MTksIDUxLCA1MCwgNTE5LCA1MSwgNTEsIDUxOSwgNTEsIDUyLCA1MTksIDUxLCA1MywgCisgICAgMjYzLCA0MzUyLCAyNjMsIDQzNTQsIDI2MywgNDM1NSwgMjYzLCA0MzU3LCAyNjMsIDQzNTgsIDI2MywgNDM1OSwgMjYzLCAKKyAgICA0MzYxLCAyNjMsIDQzNjMsIDI2MywgNDM2NCwgMjYzLCA0MzY2LCAyNjMsIDQzNjcsIDI2MywgNDM2OCwgMjYzLCA0MzY5LCAKKyAgICAyNjMsIDQzNzAsIDUxOSwgNDM1MiwgNDQ0OSwgNTE5LCA0MzU0LCA0NDQ5LCA1MTksIDQzNTUsIDQ0NDksIDUxOSwgNDM1NywgCisgICAgNDQ0OSwgNTE5LCA0MzU4LCA0NDQ5LCA1MTksIDQzNTksIDQ0NDksIDUxOSwgNDM2MSwgNDQ0OSwgNTE5LCA0MzYzLCA0NDQ5LCAKKyAgICA1MTksIDQzNjQsIDQ0NDksIDUxOSwgNDM2NiwgNDQ0OSwgNTE5LCA0MzY3LCA0NDQ5LCA1MTksIDQzNjgsIDQ0NDksIDUxOSwgCisgICAgNDM2OSwgNDQ0OSwgNTE5LCA0MzcwLCA0NDQ5LCAxMjg3LCA0MzY2LCA0NDQ5LCA0NTM1LCA0MzUyLCA0NDU3LCAxMDMxLCAKKyAgICA0MzY0LCA0NDYyLCA0MzYzLCA0NDY4LCA1MTksIDQzNjMsIDQ0NjIsIDI2MywgMTk5NjgsIDI2MywgMjAxMDgsIDI2MywgCisgICAgMTk5NzcsIDI2MywgMjIyMzUsIDI2MywgMjAxMTYsIDI2MywgMjA4NDUsIDI2MywgMTk5NzEsIDI2MywgMjA4NDMsIDI2MywgCisgICAgMjAwNjEsIDI2MywgMjEzMTMsIDI2MywgMjYzNzYsIDI2MywgMjg3NzksIDI2MywgMjc3MDAsIDI2MywgMjY0MDgsIDI2MywgCisgICAgMzczMjksIDI2MywgMjIzMDMsIDI2MywgMjYwODUsIDI2MywgMjY2NjYsIDI2MywgMjYzNzcsIDI2MywgMzEwMzgsIDI2MywgCisgICAgMjE1MTcsIDI2MywgMjkzMDUsIDI2MywgMzYwMDEsIDI2MywgMzEwNjksIDI2MywgMjExNzIsIDI2MywgMzExOTIsIDI2MywgCisgICAgMzAwMDcsIDI2MywgMjI4OTksIDI2MywgMzY5NjksIDI2MywgMjA3NzgsIDI2MywgMjEzNjAsIDI2MywgMjc4ODAsIDI2MywgCisgICAgMzg5MTcsIDI2MywgMjAyNDEsIDI2MywgMjA4ODksIDI2MywgMjc0OTEsIDI2MywgMTk5NzgsIDI2MywgMjAwMTMsIDI2MywgCisgICAgMTk5NzksIDI2MywgMjQwMzgsIDI2MywgMjE0OTEsIDI2MywgMjEzMDcsIDI2MywgMjM0NDcsIDI2MywgMjMzOTgsIDI2MywgCisgICAgMzA0MzUsIDI2MywgMjAyMjUsIDI2MywgMzYwMzksIDI2MywgMjEzMzIsIDI2MywgMjI4MTIsIDUxOSwgNTEsIDU0LCA1MTksIAorICAgIDUxLCA1NSwgNTE5LCA1MSwgNTYsIDUxOSwgNTEsIDU3LCA1MTksIDUyLCA0OCwgNTE5LCA1MiwgNDksIDUxOSwgNTIsIDUwLCAKKyAgICA1MTksIDUyLCA1MSwgNTE5LCA1MiwgNTIsIDUxOSwgNTIsIDUzLCA1MTksIDUyLCA1NCwgNTE5LCA1MiwgNTUsIDUxOSwgNTIsIAorICAgIDU2LCA1MTksIDUyLCA1NywgNTE5LCA1MywgNDgsIDUxNCwgNDksIDI2Mzc2LCA1MTQsIDUwLCAyNjM3NiwgNTE0LCA1MSwgCisgICAgMjYzNzYsIDUxNCwgNTIsIDI2Mzc2LCA1MTQsIDUzLCAyNjM3NiwgNTE0LCA1NCwgMjYzNzYsIDUxNCwgNTUsIDI2Mzc2LCAKKyAgICA1MTQsIDU2LCAyNjM3NiwgNTE0LCA1NywgMjYzNzYsIDc3MCwgNDksIDQ4LCAyNjM3NiwgNzcwLCA0OSwgNDksIDI2Mzc2LCAKKyAgICA3NzAsIDQ5LCA1MCwgMjYzNzYsIDUyMiwgNzIsIDEwMywgNzc4LCAxMDEsIDExNCwgMTAzLCA1MjIsIDEwMSwgODYsIDc3OCwgCisgICAgNzYsIDg0LCA2OCwgMjYzLCAxMjQ1MCwgMjYzLCAxMjQ1MiwgMjYzLCAxMjQ1NCwgMjYzLCAxMjQ1NiwgMjYzLCAxMjQ1OCwgCisgICAgMjYzLCAxMjQ1OSwgMjYzLCAxMjQ2MSwgMjYzLCAxMjQ2MywgMjYzLCAxMjQ2NSwgMjYzLCAxMjQ2NywgMjYzLCAxMjQ2OSwgCisgICAgMjYzLCAxMjQ3MSwgMjYzLCAxMjQ3MywgMjYzLCAxMjQ3NSwgMjYzLCAxMjQ3NywgMjYzLCAxMjQ3OSwgMjYzLCAxMjQ4MSwgCisgICAgMjYzLCAxMjQ4NCwgMjYzLCAxMjQ4NiwgMjYzLCAxMjQ4OCwgMjYzLCAxMjQ5MCwgMjYzLCAxMjQ5MSwgMjYzLCAxMjQ5MiwgCisgICAgMjYzLCAxMjQ5MywgMjYzLCAxMjQ5NCwgMjYzLCAxMjQ5NSwgMjYzLCAxMjQ5OCwgMjYzLCAxMjUwMSwgMjYzLCAxMjUwNCwgCisgICAgMjYzLCAxMjUwNywgMjYzLCAxMjUxMCwgMjYzLCAxMjUxMSwgMjYzLCAxMjUxMiwgMjYzLCAxMjUxMywgMjYzLCAxMjUxNCwgCisgICAgMjYzLCAxMjUxNiwgMjYzLCAxMjUxOCwgMjYzLCAxMjUyMCwgMjYzLCAxMjUyMSwgMjYzLCAxMjUyMiwgMjYzLCAxMjUyMywgCisgICAgMjYzLCAxMjUyNCwgMjYzLCAxMjUyNSwgMjYzLCAxMjUyNywgMjYzLCAxMjUyOCwgMjYzLCAxMjUyOSwgMjYzLCAxMjUzMCwgCisgICAgMTAzNCwgMTI0NTAsIDEyNDk3LCAxMjU0MCwgMTI0ODgsIDEwMzQsIDEyNDUwLCAxMjUyMywgMTI1MDEsIDEyNDQ5LCAxMDM0LCAKICAgICAxMjQ1MCwgMTI1MzEsIDEyNTA2LCAxMjQ1MCwgNzc4LCAxMjQ1MCwgMTI1NDAsIDEyNTIzLCAxMDM0LCAxMjQ1MiwgMTI0OTEsIAogICAgIDEyNTMxLCAxMjQ2NCwgNzc4LCAxMjQ1MiwgMTI1MzEsIDEyNDgxLCA3NzgsIDEyNDU0LCAxMjQ1NywgMTI1MzEsIDEyOTAsIAogICAgIDEyNDU2LCAxMjQ3MywgMTI0NjMsIDEyNTQwLCAxMjQ4OSwgMTAzNCwgMTI0NTYsIDEyNTQwLCAxMjQ1OSwgMTI1NDAsIDc3OCwgCkBAIC0yODk2LDI5MyArMzEzMCwyNjMgQEAKICAgICAyNTYsIDMxMzYxLCAyNTYsIDMxNjgwLCAyNTYsIDMyMjQ0LCAyNTYsIDMyMjY1LCAyNTYsIDMyMzIxLCAyNTYsIDMyNjI2LCAKICAgICAyNTYsIDMyNzczLCAyNTYsIDMzMjYxLCAyNTYsIDMzNDAxLCAyNTYsIDMzNDAxLCAyNTYsIDMzODc5LCAyNTYsIDM1MDg4LCAKICAgICAyNTYsIDM1MjIyLCAyNTYsIDM1NTg1LCAyNTYsIDM1NjQxLCAyNTYsIDM2MDUxLCAyNTYsIDM2MTA0LCAyNTYsIDM2NzkwLCAKLSAgICAyNTYsIDM2OTIwLCAyNTYsIDM4NjI3LCAyNTYsIDM4OTExLCAyNTYsIDM4OTcxLCAyNTYsIDIwMDA2LCAyNTYsIDIwOTE3LCAKLSAgICAyNTYsIDIwODQwLCAyNTYsIDIwMzUyLCAyNTYsIDIwODA1LCAyNTYsIDIwODY0LCAyNTYsIDIxMTkxLCAyNTYsIDIxMjQyLCAKLSAgICAyNTYsIDIxOTE3LCAyNTYsIDIxODQ1LCAyNTYsIDIxOTEzLCAyNTYsIDIxOTg2LCAyNTYsIDIyNjE4LCAyNTYsIDIyNzA3LCAKLSAgICAyNTYsIDIyODUyLCAyNTYsIDIyODY4LCAyNTYsIDIzMTM4LCAyNTYsIDIzMzM2LCAyNTYsIDI0Mjc0LCAyNTYsIDI0MjgxLCAKLSAgICAyNTYsIDI0NDI1LCAyNTYsIDI0NDkzLCAyNTYsIDI0NzkyLCAyNTYsIDI0OTEwLCAyNTYsIDI0ODQwLCAyNTYsIDI0OTc0LCAKLSAgICAyNTYsIDI0OTI4LCAyNTYsIDI1MDc0LCAyNTYsIDI1MTQwLCAyNTYsIDI1NTQwLCAyNTYsIDI1NjI4LCAyNTYsIDI1NjgyLCAKLSAgICAyNTYsIDI1OTQyLCAyNTYsIDI2MjI4LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAyNTYsIDI2NDU0LCAyNTYsIDI3NTEzLCAKLSAgICAyNTYsIDI3NTc4LCAyNTYsIDI3OTY5LCAyNTYsIDI4Mzc5LCAyNTYsIDI4MzYzLCAyNTYsIDI4NDUwLCAyNTYsIDI4NzAyLCAKLSAgICAyNTYsIDI5MDM4LCAyNTYsIDMwNjMxLCAyNTYsIDI5MjM3LCAyNTYsIDI5MzU5LCAyNTYsIDI5NDgyLCAyNTYsIDI5ODA5LCAKLSAgICAyNTYsIDI5OTU4LCAyNTYsIDMwMDExLCAyNTYsIDMwMjM3LCAyNTYsIDMwMjM5LCAyNTYsIDMwNDEwLCAyNTYsIDMwNDI3LCAKLSAgICAyNTYsIDMwNDUyLCAyNTYsIDMwNTM4LCAyNTYsIDMwNTI4LCAyNTYsIDMwOTI0LCAyNTYsIDMxNDA5LCAyNTYsIDMxNjgwLCAKLSAgICAyNTYsIDMxODY3LCAyNTYsIDMyMDkxLCAyNTYsIDMyMjQ0LCAyNTYsIDMyNTc0LCAyNTYsIDMyNzczLCAyNTYsIDMzNjE4LCAKLSAgICAyNTYsIDMzNzc1LCAyNTYsIDM0NjgxLCAyNTYsIDM1MTM3LCAyNTYsIDM1MjA2LCAyNTYsIDM1MjIyLCAyNTYsIDM1NTE5LCAKLSAgICAyNTYsIDM1NTc2LCAyNTYsIDM1NTMxLCAyNTYsIDM1NTg1LCAyNTYsIDM1NTgyLCAyNTYsIDM1NTY1LCAyNTYsIDM1NjQxLCAKLSAgICAyNTYsIDM1NzIyLCAyNTYsIDM2MTA0LCAyNTYsIDM2NjY0LCAyNTYsIDM2OTc4LCAyNTYsIDM3MjczLCAyNTYsIDM3NDk0LCAKLSAgICAyNTYsIDM4NTI0LCAyNTYsIDM4NjI3LCAyNTYsIDM4NzQyLCAyNTYsIDM4ODc1LCAyNTYsIDM4OTExLCAyNTYsIDM4OTIzLCAKLSAgICAyNTYsIDM4OTcxLCAyNTYsIDM5Njk4LCAyNTYsIDQwODYwLCAyNTYsIDE0MTM4NiwgMjU2LCAxNDEzODAsIDI1NiwgCi0gICAgMTQ0MzQxLCAyNTYsIDE1MjYxLCAyNTYsIDE2NDA4LCAyNTYsIDE2NDQxLCAyNTYsIDE1MjEzNywgMjU2LCAxNTQ4MzIsIAotICAgIDI1NiwgMTYzNTM5LCAyNTYsIDQwNzcxLCAyNTYsIDQwODQ2LCA1MTQsIDEwMiwgMTAyLCA1MTQsIDEwMiwgMTA1LCA1MTQsIAotICAgIDEwMiwgMTA4LCA3NzAsIDEwMiwgMTAyLCAxMDUsIDc3MCwgMTAyLCAxMDIsIDEwOCwgNTE0LCAzODMsIDExNiwgNTE0LCAKLSAgICAxMTUsIDExNiwgNTE0LCAxMzk2LCAxMzk4LCA1MTQsIDEzOTYsIDEzODEsIDUxNCwgMTM5NiwgMTM4NywgNTE0LCAxNDA2LCAKLSAgICAxMzk4LCA1MTQsIDEzOTYsIDEzODksIDUxMiwgMTQ5NywgMTQ2MCwgNTEyLCAxNTIyLCAxNDYzLCAyNjIsIDE1MDYsIDI2MiwgCi0gICAgMTQ4OCwgMjYyLCAxNDkxLCAyNjIsIDE0OTIsIDI2MiwgMTQ5OSwgMjYyLCAxNTAwLCAyNjIsIDE1MDEsIDI2MiwgMTUxMiwgCi0gICAgMjYyLCAxNTE0LCAyNjIsIDQzLCA1MTIsIDE1MTMsIDE0NzMsIDUxMiwgMTUxMywgMTQ3NCwgNTEyLCA2NDMyOSwgMTQ3MywgCi0gICAgNTEyLCA2NDMyOSwgMTQ3NCwgNTEyLCAxNDg4LCAxNDYzLCA1MTIsIDE0ODgsIDE0NjQsIDUxMiwgMTQ4OCwgMTQ2OCwgNTEyLCAKLSAgICAxNDg5LCAxNDY4LCA1MTIsIDE0OTAsIDE0NjgsIDUxMiwgMTQ5MSwgMTQ2OCwgNTEyLCAxNDkyLCAxNDY4LCA1MTIsIDE0OTMsIAotICAgIDE0NjgsIDUxMiwgMTQ5NCwgMTQ2OCwgNTEyLCAxNDk2LCAxNDY4LCA1MTIsIDE0OTcsIDE0NjgsIDUxMiwgMTQ5OCwgMTQ2OCwgCi0gICAgNTEyLCAxNDk5LCAxNDY4LCA1MTIsIDE1MDAsIDE0NjgsIDUxMiwgMTUwMiwgMTQ2OCwgNTEyLCAxNTA0LCAxNDY4LCA1MTIsIAotICAgIDE1MDUsIDE0NjgsIDUxMiwgMTUwNywgMTQ2OCwgNTEyLCAxNTA4LCAxNDY4LCA1MTIsIDE1MTAsIDE0NjgsIDUxMiwgMTUxMSwgCi0gICAgMTQ2OCwgNTEyLCAxNTEyLCAxNDY4LCA1MTIsIDE1MTMsIDE0NjgsIDUxMiwgMTUxNCwgMTQ2OCwgNTEyLCAxNDkzLCAxNDY1LCAKLSAgICA1MTIsIDE0ODksIDE0NzEsIDUxMiwgMTQ5OSwgMTQ3MSwgNTEyLCAxNTA4LCAxNDcxLCA1MTQsIDE0ODgsIDE1MDAsIDI2NywgCi0gICAgMTY0OSwgMjY4LCAxNjQ5LCAyNjcsIDE2NTksIDI2OCwgMTY1OSwgMjY5LCAxNjU5LCAyNzAsIDE2NTksIDI2NywgMTY2MiwgCi0gICAgMjY4LCAxNjYyLCAyNjksIDE2NjIsIDI3MCwgMTY2MiwgMjY3LCAxNjY0LCAyNjgsIDE2NjQsIDI2OSwgMTY2NCwgMjcwLCAKLSAgICAxNjY0LCAyNjcsIDE2NTgsIDI2OCwgMTY1OCwgMjY5LCAxNjU4LCAyNzAsIDE2NTgsIDI2NywgMTY2MywgMjY4LCAxNjYzLCAKLSAgICAyNjksIDE2NjMsIDI3MCwgMTY2MywgMjY3LCAxNjU3LCAyNjgsIDE2NTcsIDI2OSwgMTY1NywgMjcwLCAxNjU3LCAyNjcsIAotICAgIDE3MDAsIDI2OCwgMTcwMCwgMjY5LCAxNzAwLCAyNzAsIDE3MDAsIDI2NywgMTcwMiwgMjY4LCAxNzAyLCAyNjksIDE3MDIsIAotICAgIDI3MCwgMTcwMiwgMjY3LCAxNjY4LCAyNjgsIDE2NjgsIDI2OSwgMTY2OCwgMjcwLCAxNjY4LCAyNjcsIDE2NjcsIDI2OCwgCi0gICAgMTY2NywgMjY5LCAxNjY3LCAyNzAsIDE2NjcsIDI2NywgMTY3MCwgMjY4LCAxNjcwLCAyNjksIDE2NzAsIDI3MCwgMTY3MCwgCi0gICAgMjY3LCAxNjcxLCAyNjgsIDE2NzEsIDI2OSwgMTY3MSwgMjcwLCAxNjcxLCAyNjcsIDE2NzcsIDI2OCwgMTY3NywgMjY3LCAKLSAgICAxNjc2LCAyNjgsIDE2NzYsIDI2NywgMTY3OCwgMjY4LCAxNjc4LCAyNjcsIDE2NzIsIDI2OCwgMTY3MiwgMjY3LCAxNjg4LCAKLSAgICAyNjgsIDE2ODgsIDI2NywgMTY4MSwgMjY4LCAxNjgxLCAyNjcsIDE3MDUsIDI2OCwgMTcwNSwgMjY5LCAxNzA1LCAyNzAsIAotICAgIDE3MDUsIDI2NywgMTcxMSwgMjY4LCAxNzExLCAyNjksIDE3MTEsIDI3MCwgMTcxMSwgMjY3LCAxNzE1LCAyNjgsIDE3MTUsIAotICAgIDI2OSwgMTcxNSwgMjcwLCAxNzE1LCAyNjcsIDE3MTMsIDI2OCwgMTcxMywgMjY5LCAxNzEzLCAyNzAsIDE3MTMsIDI2NywgCi0gICAgMTcyMiwgMjY4LCAxNzIyLCAyNjcsIDE3MjMsIDI2OCwgMTcyMywgMjY5LCAxNzIzLCAyNzAsIDE3MjMsIDI2NywgMTcyOCwgCi0gICAgMjY4LCAxNzI4LCAyNjcsIDE3MjksIDI2OCwgMTcyOSwgMjY5LCAxNzI5LCAyNzAsIDE3MjksIDI2NywgMTcyNiwgMjY4LCAKLSAgICAxNzI2LCAyNjksIDE3MjYsIDI3MCwgMTcyNiwgMjY3LCAxNzQ2LCAyNjgsIDE3NDYsIDI2NywgMTc0NywgMjY4LCAxNzQ3LCAKLSAgICAyNjcsIDE3MDksIDI2OCwgMTcwOSwgMjY5LCAxNzA5LCAyNzAsIDE3MDksIDI2NywgMTczNSwgMjY4LCAxNzM1LCAyNjcsIAotICAgIDE3MzQsIDI2OCwgMTczNCwgMjY3LCAxNzM2LCAyNjgsIDE3MzYsIDI2NywgMTY1NSwgMjY3LCAxNzM5LCAyNjgsIDE3MzksIAotICAgIDI2NywgMTczMywgMjY4LCAxNzMzLCAyNjcsIDE3MzcsIDI2OCwgMTczNywgMjY3LCAxNzQ0LCAyNjgsIDE3NDQsIDI2OSwgCi0gICAgMTc0NCwgMjcwLCAxNzQ0LCAyNjksIDE2MDksIDI3MCwgMTYwOSwgNTIzLCAxNTc0LCAxNTc1LCA1MjQsIDE1NzQsIDE1NzUsIAotICAgIDUyMywgMTU3NCwgMTc0OSwgNTI0LCAxNTc0LCAxNzQ5LCA1MjMsIDE1NzQsIDE2MDgsIDUyNCwgMTU3NCwgMTYwOCwgNTIzLCAKLSAgICAxNTc0LCAxNzM1LCA1MjQsIDE1NzQsIDE3MzUsIDUyMywgMTU3NCwgMTczNCwgNTI0LCAxNTc0LCAxNzM0LCA1MjMsIDE1NzQsIAotICAgIDE3MzYsIDUyNCwgMTU3NCwgMTczNiwgNTIzLCAxNTc0LCAxNzQ0LCA1MjQsIDE1NzQsIDE3NDQsIDUyNSwgMTU3NCwgMTc0NCwgCi0gICAgNTIzLCAxNTc0LCAxNjA5LCA1MjQsIDE1NzQsIDE2MDksIDUyNSwgMTU3NCwgMTYwOSwgMjY3LCAxNzQwLCAyNjgsIDE3NDAsIAotICAgIDI2OSwgMTc0MCwgMjcwLCAxNzQwLCA1MjMsIDE1NzQsIDE1ODAsIDUyMywgMTU3NCwgMTU4MSwgNTIzLCAxNTc0LCAxNjA1LCAKLSAgICA1MjMsIDE1NzQsIDE2MDksIDUyMywgMTU3NCwgMTYxMCwgNTIzLCAxNTc2LCAxNTgwLCA1MjMsIDE1NzYsIDE1ODEsIDUyMywgCi0gICAgMTU3NiwgMTU4MiwgNTIzLCAxNTc2LCAxNjA1LCA1MjMsIDE1NzYsIDE2MDksIDUyMywgMTU3NiwgMTYxMCwgNTIzLCAxNTc4LCAKLSAgICAxNTgwLCA1MjMsIDE1NzgsIDE1ODEsIDUyMywgMTU3OCwgMTU4MiwgNTIzLCAxNTc4LCAxNjA1LCA1MjMsIDE1NzgsIDE2MDksIAotICAgIDUyMywgMTU3OCwgMTYxMCwgNTIzLCAxNTc5LCAxNTgwLCA1MjMsIDE1NzksIDE2MDUsIDUyMywgMTU3OSwgMTYwOSwgNTIzLCAKLSAgICAxNTc5LCAxNjEwLCA1MjMsIDE1ODAsIDE1ODEsIDUyMywgMTU4MCwgMTYwNSwgNTIzLCAxNTgxLCAxNTgwLCA1MjMsIDE1ODEsIAotICAgIDE2MDUsIDUyMywgMTU4MiwgMTU4MCwgNTIzLCAxNTgyLCAxNTgxLCA1MjMsIDE1ODIsIDE2MDUsIDUyMywgMTU4NywgMTU4MCwgCi0gICAgNTIzLCAxNTg3LCAxNTgxLCA1MjMsIDE1ODcsIDE1ODIsIDUyMywgMTU4NywgMTYwNSwgNTIzLCAxNTg5LCAxNTgxLCA1MjMsIAotICAgIDE1ODksIDE2MDUsIDUyMywgMTU5MCwgMTU4MCwgNTIzLCAxNTkwLCAxNTgxLCA1MjMsIDE1OTAsIDE1ODIsIDUyMywgMTU5MCwgCi0gICAgMTYwNSwgNTIzLCAxNTkxLCAxNTgxLCA1MjMsIDE1OTEsIDE2MDUsIDUyMywgMTU5MiwgMTYwNSwgNTIzLCAxNTkzLCAxNTgwLCAKLSAgICA1MjMsIDE1OTMsIDE2MDUsIDUyMywgMTU5NCwgMTU4MCwgNTIzLCAxNTk0LCAxNjA1LCA1MjMsIDE2MDEsIDE1ODAsIDUyMywgCi0gICAgMTYwMSwgMTU4MSwgNTIzLCAxNjAxLCAxNTgyLCA1MjMsIDE2MDEsIDE2MDUsIDUyMywgMTYwMSwgMTYwOSwgNTIzLCAxNjAxLCAKLSAgICAxNjEwLCA1MjMsIDE2MDIsIDE1ODEsIDUyMywgMTYwMiwgMTYwNSwgNTIzLCAxNjAyLCAxNjA5LCA1MjMsIDE2MDIsIDE2MTAsIAotICAgIDUyMywgMTYwMywgMTU3NSwgNTIzLCAxNjAzLCAxNTgwLCA1MjMsIDE2MDMsIDE1ODEsIDUyMywgMTYwMywgMTU4MiwgNTIzLCAKLSAgICAxNjAzLCAxNjA0LCA1MjMsIDE2MDMsIDE2MDUsIDUyMywgMTYwMywgMTYwOSwgNTIzLCAxNjAzLCAxNjEwLCA1MjMsIDE2MDQsIAotICAgIDE1ODAsIDUyMywgMTYwNCwgMTU4MSwgNTIzLCAxNjA0LCAxNTgyLCA1MjMsIDE2MDQsIDE2MDUsIDUyMywgMTYwNCwgMTYwOSwgCi0gICAgNTIzLCAxNjA0LCAxNjEwLCA1MjMsIDE2MDUsIDE1ODAsIDUyMywgMTYwNSwgMTU4MSwgNTIzLCAxNjA1LCAxNTgyLCA1MjMsIAotICAgIDE2MDUsIDE2MDUsIDUyMywgMTYwNSwgMTYwOSwgNTIzLCAxNjA1LCAxNjEwLCA1MjMsIDE2MDYsIDE1ODAsIDUyMywgMTYwNiwgCi0gICAgMTU4MSwgNTIzLCAxNjA2LCAxNTgyLCA1MjMsIDE2MDYsIDE2MDUsIDUyMywgMTYwNiwgMTYwOSwgNTIzLCAxNjA2LCAxNjEwLCAKLSAgICA1MjMsIDE2MDcsIDE1ODAsIDUyMywgMTYwNywgMTYwNSwgNTIzLCAxNjA3LCAxNjA5LCA1MjMsIDE2MDcsIDE2MTAsIDUyMywgCi0gICAgMTYxMCwgMTU4MCwgNTIzLCAxNjEwLCAxNTgxLCA1MjMsIDE2MTAsIDE1ODIsIDUyMywgMTYxMCwgMTYwNSwgNTIzLCAxNjEwLCAKLSAgICAxNjA5LCA1MjMsIDE2MTAsIDE2MTAsIDUyMywgMTU4NCwgMTY0OCwgNTIzLCAxNTg1LCAxNjQ4LCA1MjMsIDE2MDksIDE2NDgsIAotICAgIDc3OSwgMzIsIDE2MTIsIDE2MTcsIDc3OSwgMzIsIDE2MTMsIDE2MTcsIDc3OSwgMzIsIDE2MTQsIDE2MTcsIDc3OSwgMzIsIAotICAgIDE2MTUsIDE2MTcsIDc3OSwgMzIsIDE2MTYsIDE2MTcsIDc3OSwgMzIsIDE2MTcsIDE2NDgsIDUyNCwgMTU3NCwgMTU4NSwgCi0gICAgNTI0LCAxNTc0LCAxNTg2LCA1MjQsIDE1NzQsIDE2MDUsIDUyNCwgMTU3NCwgMTYwNiwgNTI0LCAxNTc0LCAxNjA5LCA1MjQsIAotICAgIDE1NzQsIDE2MTAsIDUyNCwgMTU3NiwgMTU4NSwgNTI0LCAxNTc2LCAxNTg2LCA1MjQsIDE1NzYsIDE2MDUsIDUyNCwgMTU3NiwgCi0gICAgMTYwNiwgNTI0LCAxNTc2LCAxNjA5LCA1MjQsIDE1NzYsIDE2MTAsIDUyNCwgMTU3OCwgMTU4NSwgNTI0LCAxNTc4LCAxNTg2LCAKLSAgICA1MjQsIDE1NzgsIDE2MDUsIDUyNCwgMTU3OCwgMTYwNiwgNTI0LCAxNTc4LCAxNjA5LCA1MjQsIDE1NzgsIDE2MTAsIDUyNCwgCi0gICAgMTU3OSwgMTU4NSwgNTI0LCAxNTc5LCAxNTg2LCA1MjQsIDE1NzksIDE2MDUsIDUyNCwgMTU3OSwgMTYwNiwgNTI0LCAxNTc5LCAKLSAgICAxNjA5LCA1MjQsIDE1NzksIDE2MTAsIDUyNCwgMTYwMSwgMTYwOSwgNTI0LCAxNjAxLCAxNjEwLCA1MjQsIDE2MDIsIDE2MDksIAotICAgIDUyNCwgMTYwMiwgMTYxMCwgNTI0LCAxNjAzLCAxNTc1LCA1MjQsIDE2MDMsIDE2MDQsIDUyNCwgMTYwMywgMTYwNSwgNTI0LCAKLSAgICAxNjAzLCAxNjA5LCA1MjQsIDE2MDMsIDE2MTAsIDUyNCwgMTYwNCwgMTYwNSwgNTI0LCAxNjA0LCAxNjA5LCA1MjQsIDE2MDQsIAotICAgIDE2MTAsIDUyNCwgMTYwNSwgMTU3NSwgNTI0LCAxNjA1LCAxNjA1LCA1MjQsIDE2MDYsIDE1ODUsIDUyNCwgMTYwNiwgMTU4NiwgCi0gICAgNTI0LCAxNjA2LCAxNjA1LCA1MjQsIDE2MDYsIDE2MDYsIDUyNCwgMTYwNiwgMTYwOSwgNTI0LCAxNjA2LCAxNjEwLCA1MjQsIAotICAgIDE2MDksIDE2NDgsIDUyNCwgMTYxMCwgMTU4NSwgNTI0LCAxNjEwLCAxNTg2LCA1MjQsIDE2MTAsIDE2MDUsIDUyNCwgMTYxMCwgCi0gICAgMTYwNiwgNTI0LCAxNjEwLCAxNjA5LCA1MjQsIDE2MTAsIDE2MTAsIDUyNSwgMTU3NCwgMTU4MCwgNTI1LCAxNTc0LCAxNTgxLCAKLSAgICA1MjUsIDE1NzQsIDE1ODIsIDUyNSwgMTU3NCwgMTYwNSwgNTI1LCAxNTc0LCAxNjA3LCA1MjUsIDE1NzYsIDE1ODAsIDUyNSwgCi0gICAgMTU3NiwgMTU4MSwgNTI1LCAxNTc2LCAxNTgyLCA1MjUsIDE1NzYsIDE2MDUsIDUyNSwgMTU3NiwgMTYwNywgNTI1LCAxNTc4LCAKLSAgICAxNTgwLCA1MjUsIDE1NzgsIDE1ODEsIDUyNSwgMTU3OCwgMTU4MiwgNTI1LCAxNTc4LCAxNjA1LCA1MjUsIDE1NzgsIDE2MDcsIAotICAgIDUyNSwgMTU3OSwgMTYwNSwgNTI1LCAxNTgwLCAxNTgxLCA1MjUsIDE1ODAsIDE2MDUsIDUyNSwgMTU4MSwgMTU4MCwgNTI1LCAKLSAgICAxNTgxLCAxNjA1LCA1MjUsIDE1ODIsIDE1ODAsIDUyNSwgMTU4MiwgMTYwNSwgNTI1LCAxNTg3LCAxNTgwLCA1MjUsIDE1ODcsIAotICAgIDE1ODEsIDUyNSwgMTU4NywgMTU4MiwgNTI1LCAxNTg3LCAxNjA1LCA1MjUsIDE1ODksIDE1ODEsIDUyNSwgMTU4OSwgMTU4MiwgCi0gICAgNTI1LCAxNTg5LCAxNjA1LCA1MjUsIDE1OTAsIDE1ODAsIDUyNSwgMTU5MCwgMTU4MSwgNTI1LCAxNTkwLCAxNTgyLCA1MjUsIAotICAgIDE1OTAsIDE2MDUsIDUyNSwgMTU5MSwgMTU4MSwgNTI1LCAxNTkyLCAxNjA1LCA1MjUsIDE1OTMsIDE1ODAsIDUyNSwgMTU5MywgCi0gICAgMTYwNSwgNTI1LCAxNTk0LCAxNTgwLCA1MjUsIDE1OTQsIDE2MDUsIDUyNSwgMTYwMSwgMTU4MCwgNTI1LCAxNjAxLCAxNTgxLCAKLSAgICA1MjUsIDE2MDEsIDE1ODIsIDUyNSwgMTYwMSwgMTYwNSwgNTI1LCAxNjAyLCAxNTgxLCA1MjUsIDE2MDIsIDE2MDUsIDUyNSwgCi0gICAgMTYwMywgMTU4MCwgNTI1LCAxNjAzLCAxNTgxLCA1MjUsIDE2MDMsIDE1ODIsIDUyNSwgMTYwMywgMTYwNCwgNTI1LCAxNjAzLCAKLSAgICAxNjA1LCA1MjUsIDE2MDQsIDE1ODAsIDUyNSwgMTYwNCwgMTU4MSwgNTI1LCAxNjA0LCAxNTgyLCA1MjUsIDE2MDQsIDE2MDUsIAotICAgIDUyNSwgMTYwNCwgMTYwNywgNTI1LCAxNjA1LCAxNTgwLCA1MjUsIDE2MDUsIDE1ODEsIDUyNSwgMTYwNSwgMTU4MiwgNTI1LCAKLSAgICAxNjA1LCAxNjA1LCA1MjUsIDE2MDYsIDE1ODAsIDUyNSwgMTYwNiwgMTU4MSwgNTI1LCAxNjA2LCAxNTgyLCA1MjUsIDE2MDYsIAotICAgIDE2MDUsIDUyNSwgMTYwNiwgMTYwNywgNTI1LCAxNjA3LCAxNTgwLCA1MjUsIDE2MDcsIDE2MDUsIDUyNSwgMTYwNywgMTY0OCwgCi0gICAgNTI1LCAxNjEwLCAxNTgwLCA1MjUsIDE2MTAsIDE1ODEsIDUyNSwgMTYxMCwgMTU4MiwgNTI1LCAxNjEwLCAxNjA1LCA1MjUsIAotICAgIDE2MTAsIDE2MDcsIDUyNiwgMTU3NCwgMTYwNSwgNTI2LCAxNTc0LCAxNjA3LCA1MjYsIDE1NzYsIDE2MDUsIDUyNiwgMTU3NiwgCi0gICAgMTYwNywgNTI2LCAxNTc4LCAxNjA1LCA1MjYsIDE1NzgsIDE2MDcsIDUyNiwgMTU3OSwgMTYwNSwgNTI2LCAxNTc5LCAxNjA3LCAKLSAgICA1MjYsIDE1ODcsIDE2MDUsIDUyNiwgMTU4NywgMTYwNywgNTI2LCAxNTg4LCAxNjA1LCA1MjYsIDE1ODgsIDE2MDcsIDUyNiwgCi0gICAgMTYwMywgMTYwNCwgNTI2LCAxNjAzLCAxNjA1LCA1MjYsIDE2MDQsIDE2MDUsIDUyNiwgMTYwNiwgMTYwNSwgNTI2LCAxNjA2LCAKLSAgICAxNjA3LCA1MjYsIDE2MTAsIDE2MDUsIDUyNiwgMTYxMCwgMTYwNywgNzgyLCAxNjAwLCAxNjE0LCAxNjE3LCA3ODIsIDE2MDAsIAotICAgIDE2MTUsIDE2MTcsIDc4MiwgMTYwMCwgMTYxNiwgMTYxNywgNTIzLCAxNTkxLCAxNjA5LCA1MjMsIDE1OTEsIDE2MTAsIDUyMywgCi0gICAgMTU5MywgMTYwOSwgNTIzLCAxNTkzLCAxNjEwLCA1MjMsIDE1OTQsIDE2MDksIDUyMywgMTU5NCwgMTYxMCwgNTIzLCAxNTg3LCAKLSAgICAxNjA5LCA1MjMsIDE1ODcsIDE2MTAsIDUyMywgMTU4OCwgMTYwOSwgNTIzLCAxNTg4LCAxNjEwLCA1MjMsIDE1ODEsIDE2MDksIAotICAgIDUyMywgMTU4MSwgMTYxMCwgNTIzLCAxNTgwLCAxNjA5LCA1MjMsIDE1ODAsIDE2MTAsIDUyMywgMTU4MiwgMTYwOSwgNTIzLCAKLSAgICAxNTgyLCAxNjEwLCA1MjMsIDE1ODksIDE2MDksIDUyMywgMTU4OSwgMTYxMCwgNTIzLCAxNTkwLCAxNjA5LCA1MjMsIDE1OTAsIAotICAgIDE2MTAsIDUyMywgMTU4OCwgMTU4MCwgNTIzLCAxNTg4LCAxNTgxLCA1MjMsIDE1ODgsIDE1ODIsIDUyMywgMTU4OCwgMTYwNSwgCi0gICAgNTIzLCAxNTg4LCAxNTg1LCA1MjMsIDE1ODcsIDE1ODUsIDUyMywgMTU4OSwgMTU4NSwgNTIzLCAxNTkwLCAxNTg1LCA1MjQsIAotICAgIDE1OTEsIDE2MDksIDUyNCwgMTU5MSwgMTYxMCwgNTI0LCAxNTkzLCAxNjA5LCA1MjQsIDE1OTMsIDE2MTAsIDUyNCwgMTU5NCwgCi0gICAgMTYwOSwgNTI0LCAxNTk0LCAxNjEwLCA1MjQsIDE1ODcsIDE2MDksIDUyNCwgMTU4NywgMTYxMCwgNTI0LCAxNTg4LCAxNjA5LCAKLSAgICA1MjQsIDE1ODgsIDE2MTAsIDUyNCwgMTU4MSwgMTYwOSwgNTI0LCAxNTgxLCAxNjEwLCA1MjQsIDE1ODAsIDE2MDksIDUyNCwgCi0gICAgMTU4MCwgMTYxMCwgNTI0LCAxNTgyLCAxNjA5LCA1MjQsIDE1ODIsIDE2MTAsIDUyNCwgMTU4OSwgMTYwOSwgNTI0LCAxNTg5LCAKLSAgICAxNjEwLCA1MjQsIDE1OTAsIDE2MDksIDUyNCwgMTU5MCwgMTYxMCwgNTI0LCAxNTg4LCAxNTgwLCA1MjQsIDE1ODgsIDE1ODEsIAotICAgIDUyNCwgMTU4OCwgMTU4MiwgNTI0LCAxNTg4LCAxNjA1LCA1MjQsIDE1ODgsIDE1ODUsIDUyNCwgMTU4NywgMTU4NSwgNTI0LCAKLSAgICAxNTg5LCAxNTg1LCA1MjQsIDE1OTAsIDE1ODUsIDUyNSwgMTU4OCwgMTU4MCwgNTI1LCAxNTg4LCAxNTgxLCA1MjUsIDE1ODgsIAotICAgIDE1ODIsIDUyNSwgMTU4OCwgMTYwNSwgNTI1LCAxNTg3LCAxNjA3LCA1MjUsIDE1ODgsIDE2MDcsIDUyNSwgMTU5MSwgMTYwNSwgCi0gICAgNTI2LCAxNTg3LCAxNTgwLCA1MjYsIDE1ODcsIDE1ODEsIDUyNiwgMTU4NywgMTU4MiwgNTI2LCAxNTg4LCAxNTgwLCA1MjYsIAotICAgIDE1ODgsIDE1ODEsIDUyNiwgMTU4OCwgMTU4MiwgNTI2LCAxNTkxLCAxNjA1LCA1MjYsIDE1OTIsIDE2MDUsIDUyNCwgMTU3NSwgCi0gICAgMTYxMSwgNTIzLCAxNTc1LCAxNjExLCA3ODEsIDE1NzgsIDE1ODAsIDE2MDUsIDc4MCwgMTU3OCwgMTU4MSwgMTU4MCwgNzgxLCAKLSAgICAxNTc4LCAxNTgxLCAxNTgwLCA3ODEsIDE1NzgsIDE1ODEsIDE2MDUsIDc4MSwgMTU3OCwgMTU4MiwgMTYwNSwgNzgxLCAKLSAgICAxNTc4LCAxNjA1LCAxNTgwLCA3ODEsIDE1NzgsIDE2MDUsIDE1ODEsIDc4MSwgMTU3OCwgMTYwNSwgMTU4MiwgNzgwLCAKLSAgICAxNTgwLCAxNjA1LCAxNTgxLCA3ODEsIDE1ODAsIDE2MDUsIDE1ODEsIDc4MCwgMTU4MSwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNTgxLCAxNjA1LCAxNjA5LCA3ODEsIDE1ODcsIDE1ODEsIDE1ODAsIDc4MSwgMTU4NywgMTU4MCwgMTU4MSwgNzgwLCAKLSAgICAxNTg3LCAxNTgwLCAxNjA5LCA3ODAsIDE1ODcsIDE2MDUsIDE1ODEsIDc4MSwgMTU4NywgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNTg3LCAxNjA1LCAxNTgwLCA3ODAsIDE1ODcsIDE2MDUsIDE2MDUsIDc4MSwgMTU4NywgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg5LCAxNTgxLCAxNTgxLCA3ODEsIDE1ODksIDE1ODEsIDE1ODEsIDc4MCwgMTU4OSwgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg4LCAxNTgxLCAxNjA1LCA3ODEsIDE1ODgsIDE1ODEsIDE2MDUsIDc4MCwgMTU4OCwgMTU4MCwgMTYxMCwgNzgwLCAKLSAgICAxNTg4LCAxNjA1LCAxNTgyLCA3ODEsIDE1ODgsIDE2MDUsIDE1ODIsIDc4MCwgMTU4OCwgMTYwNSwgMTYwNSwgNzgxLCAKLSAgICAxNTg4LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTAsIDE1ODEsIDE2MDksIDc4MCwgMTU5MCwgMTU4MiwgMTYwNSwgNzgxLCAKLSAgICAxNTkwLCAxNTgyLCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE1ODEsIDc4MSwgMTU5MSwgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNTkxLCAxNjA1LCAxNjA1LCA3ODAsIDE1OTEsIDE2MDUsIDE2MTAsIDc4MCwgMTU5MywgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNTkzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE2MDUsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTk0LCAxNjA1LCAxNjA1LCA3ODAsIDE1OTQsIDE2MDUsIDE2MTAsIDc4MCwgMTU5NCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNjAxLCAxNTgyLCAxNjA1LCA3ODEsIDE2MDEsIDE1ODIsIDE2MDUsIDc4MCwgMTYwMiwgMTYwNSwgMTU4MSwgNzgwLCAKLSAgICAxNjAyLCAxNjA1LCAxNjA1LCA3ODAsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MSwgMTYxMCwgNzgwLCAKLSAgICAxNjA0LCAxNTgxLCAxNjA5LCA3ODEsIDE2MDQsIDE1ODAsIDE1ODAsIDc4MCwgMTYwNCwgMTU4MCwgMTU4MCwgNzgwLCAKLSAgICAxNjA0LCAxNTgyLCAxNjA1LCA3ODEsIDE2MDQsIDE1ODIsIDE2MDUsIDc4MCwgMTYwNCwgMTYwNSwgMTU4MSwgNzgxLCAKLSAgICAxNjA0LCAxNjA1LCAxNTgxLCA3ODEsIDE2MDUsIDE1ODEsIDE1ODAsIDc4MSwgMTYwNSwgMTU4MSwgMTYwNSwgNzgwLCAKLSAgICAxNjA1LCAxNTgxLCAxNjEwLCA3ODEsIDE2MDUsIDE1ODAsIDE1ODEsIDc4MSwgMTYwNSwgMTU4MCwgMTYwNSwgNzgxLCAKLSAgICAxNjA1LCAxNTgyLCAxNTgwLCA3ODEsIDE2MDUsIDE1ODIsIDE2MDUsIDc4MSwgMTYwNSwgMTU4MCwgMTU4MiwgNzgxLCAKLSAgICAxNjA3LCAxNjA1LCAxNTgwLCA3ODEsIDE2MDcsIDE2MDUsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MSwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgxLCAxNjA5LCA3ODAsIDE2MDYsIDE1ODAsIDE2MDUsIDc4MSwgMTYwNiwgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgwLCAxNjA5LCA3ODAsIDE2MDYsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNjEwLCAxNjA1LCAxNjA1LCA3ODEsIDE2MTAsIDE2MDUsIDE2MDUsIDc4MCwgMTU3NiwgMTU4MiwgMTYxMCwgNzgwLCAKLSAgICAxNTc4LCAxNTgwLCAxNjEwLCA3ODAsIDE1NzgsIDE1ODAsIDE2MDksIDc4MCwgMTU3OCwgMTU4MiwgMTYxMCwgNzgwLCAKLSAgICAxNTc4LCAxNTgyLCAxNjA5LCA3ODAsIDE1NzgsIDE2MDUsIDE2MTAsIDc4MCwgMTU3OCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTgwLCAxNjA1LCAxNjEwLCA3ODAsIDE1ODAsIDE1ODEsIDE2MDksIDc4MCwgMTU4MCwgMTYwNSwgMTYwOSwgNzgwLCAKLSAgICAxNTg3LCAxNTgyLCAxNjA5LCA3ODAsIDE1ODksIDE1ODEsIDE2MTAsIDc4MCwgMTU4OCwgMTU4MSwgMTYxMCwgNzgwLCAKLSAgICAxNTkwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MDQsIDE1ODAsIDE2MTAsIDc4MCwgMTYwNCwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjEwLCAxNTgxLCAxNjEwLCA3ODAsIDE2MTAsIDE1ODAsIDE2MTAsIDc4MCwgMTYxMCwgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjA1LCAxNjA1LCAxNjEwLCA3ODAsIDE2MDIsIDE2MDUsIDE2MTAsIDc4MCwgMTYwNiwgMTU4MSwgMTYxMCwgNzgxLCAKLSAgICAxNjAyLCAxNjA1LCAxNTgxLCA3ODEsIDE2MDQsIDE1ODEsIDE2MDUsIDc4MCwgMTU5MywgMTYwNSwgMTYxMCwgNzgwLCAKLSAgICAxNjAzLCAxNjA1LCAxNjEwLCA3ODEsIDE2MDYsIDE1ODAsIDE1ODEsIDc4MCwgMTYwNSwgMTU4MiwgMTYxMCwgNzgxLCAKLSAgICAxNjA0LCAxNTgwLCAxNjA1LCA3ODAsIDE2MDMsIDE2MDUsIDE2MDUsIDc4MCwgMTYwNCwgMTU4MCwgMTYwNSwgNzgwLCAKLSAgICAxNjA2LCAxNTgwLCAxNTgxLCA3ODAsIDE1ODAsIDE1ODEsIDE2MTAsIDc4MCwgMTU4MSwgMTU4MCwgMTYxMCwgNzgwLCAKLSAgICAxNjA1LCAxNTgwLCAxNjEwLCA3ODAsIDE2MDEsIDE2MDUsIDE2MTAsIDc4MCwgMTU3NiwgMTU4MSwgMTYxMCwgNzgxLCAKLSAgICAxNjAzLCAxNjA1LCAxNjA1LCA3ODEsIDE1OTMsIDE1ODAsIDE2MDUsIDc4MSwgMTU4OSwgMTYwNSwgMTYwNSwgNzgwLCAKLSAgICAxNTg3LCAxNTgyLCAxNjEwLCA3ODAsIDE2MDYsIDE1ODAsIDE2MTAsIDc3OSwgMTU4OSwgMTYwNCwgMTc0NiwgNzc5LCAKLSAgICAxNjAyLCAxNjA0LCAxNzQ2LCAxMDM1LCAxNTc1LCAxNjA0LCAxNjA0LCAxNjA3LCAxMDM1LCAxNTc1LCAxNjAzLCAxNTc2LCAKLSAgICAxNTg1LCAxMDM1LCAxNjA1LCAxNTgxLCAxNjA1LCAxNTgzLCAxMDM1LCAxNTg5LCAxNjA0LCAxNTkzLCAxNjA1LCAxMDM1LCAKLSAgICAxNTg1LCAxNTg3LCAxNjA4LCAxNjA0LCAxMDM1LCAxNTkzLCAxNjA0LCAxNjEwLCAxNjA3LCAxMDM1LCAxNjA4LCAxNTg3LCAKLSAgICAxNjA0LCAxNjA1LCA3NzksIDE1ODksIDE2MDQsIDE2MDksIDQ2MTksIDE1ODksIDE2MDQsIDE2MDksIDMyLCAxNTc1LCAKLSAgICAxNjA0LCAxNjA0LCAxNjA3LCAzMiwgMTU5MywgMTYwNCwgMTYxMCwgMTYwNywgMzIsIDE2MDgsIDE1ODcsIDE2MDQsIDE2MDUsIAotICAgIDIwNTksIDE1ODAsIDE2MDQsIDMyLCAxNTgwLCAxNjA0LCAxNTc1LCAxNjA0LCAxNjA3LCAxMDM1LCAxNTg1LCAxNzQwLCAKLSAgICAxNTc1LCAxNjA0LCAyNjUsIDQ0LCAyNjUsIDEyMjg5LCAyNjUsIDEyMjkwLCAyNjUsIDU4LCAyNjUsIDU5LCAyNjUsIDMzLCAKLSAgICAyNjUsIDYzLCAyNjUsIDEyMzEwLCAyNjUsIDEyMzExLCAyNjUsIDgyMzAsIDI2NSwgODIyOSwgMjY1LCA4MjEyLCAyNjUsIAotICAgIDgyMTEsIDI2NSwgOTUsIDI2NSwgOTUsIDI2NSwgNDAsIDI2NSwgNDEsIDI2NSwgMTIzLCAyNjUsIDEyNSwgMjY1LCAxMjMwOCwgCi0gICAgMjY1LCAxMjMwOSwgMjY1LCAxMjMwNCwgMjY1LCAxMjMwNSwgMjY1LCAxMjI5OCwgMjY1LCAxMjI5OSwgMjY1LCAxMjI5NiwgCi0gICAgMjY1LCAxMjI5NywgMjY1LCAxMjMwMCwgMjY1LCAxMjMwMSwgMjY1LCAxMjMwMiwgMjY1LCAxMjMwMywgMjY1LCA5MSwgMjY1LCAKLSAgICA5MywgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgMjU4LCA4MjU0LCAyNTgsIDk1LCAyNTgsIDk1LCAyNTgsIAotICAgIDk1LCAyNzEsIDQ0LCAyNzEsIDEyMjg5LCAyNzEsIDQ2LCAyNzEsIDU5LCAyNzEsIDU4LCAyNzEsIDYzLCAyNzEsIDMzLCAKLSAgICAyNzEsIDgyMTIsIDI3MSwgNDAsIDI3MSwgNDEsIDI3MSwgMTIzLCAyNzEsIDEyNSwgMjcxLCAxMjMwOCwgMjcxLCAxMjMwOSwgCi0gICAgMjcxLCAzNSwgMjcxLCAzOCwgMjcxLCA0MiwgMjcxLCA0MywgMjcxLCA0NSwgMjcxLCA2MCwgMjcxLCA2MiwgMjcxLCA2MSwgCi0gICAgMjcxLCA5MiwgMjcxLCAzNiwgMjcxLCAzNywgMjcxLCA2NCwgNTIzLCAzMiwgMTYxMSwgNTI2LCAxNjAwLCAxNjExLCA1MjMsIAotICAgIDMyLCAxNjEyLCA1MjMsIDMyLCAxNjEzLCA1MjMsIDMyLCAxNjE0LCA1MjYsIDE2MDAsIDE2MTQsIDUyMywgMzIsIDE2MTUsIAotICAgIDUyNiwgMTYwMCwgMTYxNSwgNTIzLCAzMiwgMTYxNiwgNTI2LCAxNjAwLCAxNjE2LCA1MjMsIDMyLCAxNjE3LCA1MjYsIAotICAgIDE2MDAsIDE2MTcsIDUyMywgMzIsIDE2MTgsIDUyNiwgMTYwMCwgMTYxOCwgMjY3LCAxNTY5LCAyNjcsIDE1NzAsIDI2OCwgCi0gICAgMTU3MCwgMjY3LCAxNTcxLCAyNjgsIDE1NzEsIDI2NywgMTU3MiwgMjY4LCAxNTcyLCAyNjcsIDE1NzMsIDI2OCwgMTU3MywgCi0gICAgMjY3LCAxNTc0LCAyNjgsIDE1NzQsIDI2OSwgMTU3NCwgMjcwLCAxNTc0LCAyNjcsIDE1NzUsIDI2OCwgMTU3NSwgMjY3LCAKLSAgICAxNTc2LCAyNjgsIDE1NzYsIDI2OSwgMTU3NiwgMjcwLCAxNTc2LCAyNjcsIDE1NzcsIDI2OCwgMTU3NywgMjY3LCAxNTc4LCAKLSAgICAyNjgsIDE1NzgsIDI2OSwgMTU3OCwgMjcwLCAxNTc4LCAyNjcsIDE1NzksIDI2OCwgMTU3OSwgMjY5LCAxNTc5LCAyNzAsIAotICAgIDE1NzksIDI2NywgMTU4MCwgMjY4LCAxNTgwLCAyNjksIDE1ODAsIDI3MCwgMTU4MCwgMjY3LCAxNTgxLCAyNjgsIDE1ODEsIAotICAgIDI2OSwgMTU4MSwgMjcwLCAxNTgxLCAyNjcsIDE1ODIsIDI2OCwgMTU4MiwgMjY5LCAxNTgyLCAyNzAsIDE1ODIsIDI2NywgCi0gICAgMTU4MywgMjY4LCAxNTgzLCAyNjcsIDE1ODQsIDI2OCwgMTU4NCwgMjY3LCAxNTg1LCAyNjgsIDE1ODUsIDI2NywgMTU4NiwgCi0gICAgMjY4LCAxNTg2LCAyNjcsIDE1ODcsIDI2OCwgMTU4NywgMjY5LCAxNTg3LCAyNzAsIDE1ODcsIDI2NywgMTU4OCwgMjY4LCAKLSAgICAxNTg4LCAyNjksIDE1ODgsIDI3MCwgMTU4OCwgMjY3LCAxNTg5LCAyNjgsIDE1ODksIDI2OSwgMTU4OSwgMjcwLCAxNTg5LCAKLSAgICAyNjcsIDE1OTAsIDI2OCwgMTU5MCwgMjY5LCAxNTkwLCAyNzAsIDE1OTAsIDI2NywgMTU5MSwgMjY4LCAxNTkxLCAyNjksIAotICAgIDE1OTEsIDI3MCwgMTU5MSwgMjY3LCAxNTkyLCAyNjgsIDE1OTIsIDI2OSwgMTU5MiwgMjcwLCAxNTkyLCAyNjcsIDE1OTMsIAotICAgIDI2OCwgMTU5MywgMjY5LCAxNTkzLCAyNzAsIDE1OTMsIDI2NywgMTU5NCwgMjY4LCAxNTk0LCAyNjksIDE1OTQsIDI3MCwgCi0gICAgMTU5NCwgMjY3LCAxNjAxLCAyNjgsIDE2MDEsIDI2OSwgMTYwMSwgMjcwLCAxNjAxLCAyNjcsIDE2MDIsIDI2OCwgMTYwMiwgCi0gICAgMjY5LCAxNjAyLCAyNzAsIDE2MDIsIDI2NywgMTYwMywgMjY4LCAxNjAzLCAyNjksIDE2MDMsIDI3MCwgMTYwMywgMjY3LCAKLSAgICAxNjA0LCAyNjgsIDE2MDQsIDI2OSwgMTYwNCwgMjcwLCAxNjA0LCAyNjcsIDE2MDUsIDI2OCwgMTYwNSwgMjY5LCAxNjA1LCAKLSAgICAyNzAsIDE2MDUsIDI2NywgMTYwNiwgMjY4LCAxNjA2LCAyNjksIDE2MDYsIDI3MCwgMTYwNiwgMjY3LCAxNjA3LCAyNjgsIAotICAgIDE2MDcsIDI2OSwgMTYwNywgMjcwLCAxNjA3LCAyNjcsIDE2MDgsIDI2OCwgMTYwOCwgMjY3LCAxNjA5LCAyNjgsIDE2MDksIAotICAgIDI2NywgMTYxMCwgMjY4LCAxNjEwLCAyNjksIDE2MTAsIDI3MCwgMTYxMCwgNTIzLCAxNjA0LCAxNTcwLCA1MjQsIDE2MDQsIAotICAgIDE1NzAsIDUyMywgMTYwNCwgMTU3MSwgNTI0LCAxNjA0LCAxNTcxLCA1MjMsIDE2MDQsIDE1NzMsIDUyNCwgMTYwNCwgMTU3MywgCi0gICAgNTIzLCAxNjA0LCAxNTc1LCA1MjQsIDE2MDQsIDE1NzUsIDI2NCwgMzMsIDI2NCwgMzQsIDI2NCwgMzUsIDI2NCwgMzYsIAotICAgIDI2NCwgMzcsIDI2NCwgMzgsIDI2NCwgMzksIDI2NCwgNDAsIDI2NCwgNDEsIDI2NCwgNDIsIDI2NCwgNDMsIDI2NCwgNDQsIAotICAgIDI2NCwgNDUsIDI2NCwgNDYsIDI2NCwgNDcsIDI2NCwgNDgsIDI2NCwgNDksIDI2NCwgNTAsIDI2NCwgNTEsIDI2NCwgNTIsIAotICAgIDI2NCwgNTMsIDI2NCwgNTQsIDI2NCwgNTUsIDI2NCwgNTYsIDI2NCwgNTcsIDI2NCwgNTgsIDI2NCwgNTksIDI2NCwgNjAsIAotICAgIDI2NCwgNjEsIDI2NCwgNjIsIDI2NCwgNjMsIDI2NCwgNjQsIDI2NCwgNjUsIDI2NCwgNjYsIDI2NCwgNjcsIDI2NCwgNjgsIAotICAgIDI2NCwgNjksIDI2NCwgNzAsIDI2NCwgNzEsIDI2NCwgNzIsIDI2NCwgNzMsIDI2NCwgNzQsIDI2NCwgNzUsIDI2NCwgNzYsIAotICAgIDI2NCwgNzcsIDI2NCwgNzgsIDI2NCwgNzksIDI2NCwgODAsIDI2NCwgODEsIDI2NCwgODIsIDI2NCwgODMsIDI2NCwgODQsIAotICAgIDI2NCwgODUsIDI2NCwgODYsIDI2NCwgODcsIDI2NCwgODgsIDI2NCwgODksIDI2NCwgOTAsIDI2NCwgOTEsIDI2NCwgOTIsIAotICAgIDI2NCwgOTMsIDI2NCwgOTQsIDI2NCwgOTUsIDI2NCwgOTYsIDI2NCwgOTcsIDI2NCwgOTgsIDI2NCwgOTksIDI2NCwgMTAwLCAKLSAgICAyNjQsIDEwMSwgMjY0LCAxMDIsIDI2NCwgMTAzLCAyNjQsIDEwNCwgMjY0LCAxMDUsIDI2NCwgMTA2LCAyNjQsIDEwNywgCi0gICAgMjY0LCAxMDgsIDI2NCwgMTA5LCAyNjQsIDExMCwgMjY0LCAxMTEsIDI2NCwgMTEyLCAyNjQsIDExMywgMjY0LCAxMTQsIAotICAgIDI2NCwgMTE1LCAyNjQsIDExNiwgMjY0LCAxMTcsIDI2NCwgMTE4LCAyNjQsIDExOSwgMjY0LCAxMjAsIDI2NCwgMTIxLCAKLSAgICAyNjQsIDEyMiwgMjY0LCAxMjMsIDI2NCwgMTI0LCAyNjQsIDEyNSwgMjY0LCAxMjYsIDI2NCwgMTA2MjksIDI2NCwgMTA2MzAsIAotICAgIDI3MiwgMTIyOTAsIDI3MiwgMTIzMDAsIDI3MiwgMTIzMDEsIDI3MiwgMTIyODksIDI3MiwgMTI1MzksIDI3MiwgMTI1MzAsIAotICAgIDI3MiwgMTI0NDksIDI3MiwgMTI0NTEsIDI3MiwgMTI0NTMsIDI3MiwgMTI0NTUsIDI3MiwgMTI0NTcsIDI3MiwgMTI1MTUsIAotICAgIDI3MiwgMTI1MTcsIDI3MiwgMTI1MTksIDI3MiwgMTI0ODMsIDI3MiwgMTI1NDAsIDI3MiwgMTI0NTAsIDI3MiwgMTI0NTIsIAotICAgIDI3MiwgMTI0NTQsIDI3MiwgMTI0NTYsIDI3MiwgMTI0NTgsIDI3MiwgMTI0NTksIDI3MiwgMTI0NjEsIDI3MiwgMTI0NjMsIAotICAgIDI3MiwgMTI0NjUsIDI3MiwgMTI0NjcsIDI3MiwgMTI0NjksIDI3MiwgMTI0NzEsIDI3MiwgMTI0NzMsIDI3MiwgMTI0NzUsIAotICAgIDI3MiwgMTI0NzcsIDI3MiwgMTI0NzksIDI3MiwgMTI0ODEsIDI3MiwgMTI0ODQsIDI3MiwgMTI0ODYsIDI3MiwgMTI0ODgsIAotICAgIDI3MiwgMTI0OTAsIDI3MiwgMTI0OTEsIDI3MiwgMTI0OTIsIDI3MiwgMTI0OTMsIDI3MiwgMTI0OTQsIDI3MiwgMTI0OTUsIAotICAgIDI3MiwgMTI0OTgsIDI3MiwgMTI1MDEsIDI3MiwgMTI1MDQsIDI3MiwgMTI1MDcsIDI3MiwgMTI1MTAsIDI3MiwgMTI1MTEsIAotICAgIDI3MiwgMTI1MTIsIDI3MiwgMTI1MTMsIDI3MiwgMTI1MTQsIDI3MiwgMTI1MTYsIDI3MiwgMTI1MTgsIDI3MiwgMTI1MjAsIAotICAgIDI3MiwgMTI1MjEsIDI3MiwgMTI1MjIsIDI3MiwgMTI1MjMsIDI3MiwgMTI1MjQsIDI3MiwgMTI1MjUsIDI3MiwgMTI1MjcsIAotICAgIDI3MiwgMTI1MzEsIDI3MiwgMTI0NDEsIDI3MiwgMTI0NDIsIDI3MiwgMTI2NDQsIDI3MiwgMTI1OTMsIDI3MiwgMTI1OTQsIAotICAgIDI3MiwgMTI1OTUsIDI3MiwgMTI1OTYsIDI3MiwgMTI1OTcsIDI3MiwgMTI1OTgsIDI3MiwgMTI1OTksIDI3MiwgMTI2MDAsIAotICAgIDI3MiwgMTI2MDEsIDI3MiwgMTI2MDIsIDI3MiwgMTI2MDMsIDI3MiwgMTI2MDQsIDI3MiwgMTI2MDUsIDI3MiwgMTI2MDYsIAotICAgIDI3MiwgMTI2MDcsIDI3MiwgMTI2MDgsIDI3MiwgMTI2MDksIDI3MiwgMTI2MTAsIDI3MiwgMTI2MTEsIDI3MiwgMTI2MTIsIAotICAgIDI3MiwgMTI2MTMsIDI3MiwgMTI2MTQsIDI3MiwgMTI2MTUsIDI3MiwgMTI2MTYsIDI3MiwgMTI2MTcsIDI3MiwgMTI2MTgsIAotICAgIDI3MiwgMTI2MTksIDI3MiwgMTI2MjAsIDI3MiwgMTI2MjEsIDI3MiwgMTI2MjIsIDI3MiwgMTI2MjMsIDI3MiwgMTI2MjQsIAotICAgIDI3MiwgMTI2MjUsIDI3MiwgMTI2MjYsIDI3MiwgMTI2MjcsIDI3MiwgMTI2MjgsIDI3MiwgMTI2MjksIDI3MiwgMTI2MzAsIAotICAgIDI3MiwgMTI2MzEsIDI3MiwgMTI2MzIsIDI3MiwgMTI2MzMsIDI3MiwgMTI2MzQsIDI3MiwgMTI2MzUsIDI3MiwgMTI2MzYsIAotICAgIDI3MiwgMTI2MzcsIDI3MiwgMTI2MzgsIDI3MiwgMTI2MzksIDI3MiwgMTI2NDAsIDI3MiwgMTI2NDEsIDI3MiwgMTI2NDIsIAotICAgIDI3MiwgMTI2NDMsIDI2NCwgMTYyLCAyNjQsIDE2MywgMjY0LCAxNzIsIDI2NCwgMTc1LCAyNjQsIDE2NiwgMjY0LCAxNjUsIAotICAgIDI2NCwgODM2MSwgMjcyLCA5NDc0LCAyNzIsIDg1OTIsIDI3MiwgODU5MywgMjcyLCA4NTk0LCAyNzIsIDg1OTUsIDI3MiwgCi0gICAgOTYzMiwgMjcyLCA5Njc1LCA1MTIsIDExOTEyNywgMTE5MTQxLCA1MTIsIDExOTEyOCwgMTE5MTQxLCA1MTIsIDExOTEzNSwgCi0gICAgMTE5MTUwLCA1MTIsIDExOTEzNSwgMTE5MTUxLCA1MTIsIDExOTEzNSwgMTE5MTUyLCA1MTIsIDExOTEzNSwgMTE5MTUzLCAKLSAgICA1MTIsIDExOTEzNSwgMTE5MTU0LCA1MTIsIDExOTIyNSwgMTE5MTQxLCA1MTIsIDExOTIyNiwgMTE5MTQxLCA1MTIsIAotICAgIDExOTIyNywgMTE5MTUwLCA1MTIsIDExOTIyOCwgMTE5MTUwLCA1MTIsIDExOTIyNywgMTE5MTUxLCA1MTIsIDExOTIyOCwgCi0gICAgMTE5MTUxLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAKLSAgICAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAKLSAgICAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAKLSAgICAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIAotICAgIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAKLSAgICAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgCi0gICAgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIAotICAgIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIAotICAgIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIAotICAgIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIAotICAgIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAKLSAgICAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgCi0gICAgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIAotICAgIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAKLSAgICAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAKLSAgICAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAKLSAgICAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAKLSAgICAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAKLSAgICAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgCi0gICAgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIAotICAgIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjcsIDI2MiwgNjgsIAotICAgIDI2MiwgNzEsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODMsIAotICAgIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIAotICAgIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMiwgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAKLSAgICAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgCi0gICAgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIAotICAgIDEyMiwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCAKLSAgICA3MiwgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCAKLSAgICA4MCwgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCAKLSAgICA4OCwgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIAotICAgIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAKLSAgICAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgCi0gICAgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAKLSAgICAyNjIsIDY2LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAKLSAgICAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAKLSAgICAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgCi0gICAgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIAotICAgIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAKLSAgICAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgCi0gICAgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzMsIAotICAgIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzksIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIAotICAgIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAKLSAgICAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgCisgICAgMjU2LCAzNjkyMCwgMjU2LCAzODYyNywgMjU2LCAzODkxMSwgMjU2LCAzODk3MSwgMjU2LCAyNDY5MywgMjU2LCAxNDgyMDYsIAorICAgIDI1NiwgMzMzMDQsIDI1NiwgMjAwMDYsIDI1NiwgMjA5MTcsIDI1NiwgMjA4NDAsIDI1NiwgMjAzNTIsIDI1NiwgMjA4MDUsIAorICAgIDI1NiwgMjA4NjQsIDI1NiwgMjExOTEsIDI1NiwgMjEyNDIsIDI1NiwgMjE5MTcsIDI1NiwgMjE4NDUsIDI1NiwgMjE5MTMsIAorICAgIDI1NiwgMjE5ODYsIDI1NiwgMjI2MTgsIDI1NiwgMjI3MDcsIDI1NiwgMjI4NTIsIDI1NiwgMjI4NjgsIDI1NiwgMjMxMzgsIAorICAgIDI1NiwgMjMzMzYsIDI1NiwgMjQyNzQsIDI1NiwgMjQyODEsIDI1NiwgMjQ0MjUsIDI1NiwgMjQ0OTMsIDI1NiwgMjQ3OTIsIAorICAgIDI1NiwgMjQ5MTAsIDI1NiwgMjQ4NDAsIDI1NiwgMjQ5NzQsIDI1NiwgMjQ5MjgsIDI1NiwgMjUwNzQsIDI1NiwgMjUxNDAsIAorICAgIDI1NiwgMjU1NDAsIDI1NiwgMjU2MjgsIDI1NiwgMjU2ODIsIDI1NiwgMjU5NDIsIDI1NiwgMjYyMjgsIDI1NiwgMjYzOTEsIAorICAgIDI1NiwgMjYzOTUsIDI1NiwgMjY0NTQsIDI1NiwgMjc1MTMsIDI1NiwgMjc1NzgsIDI1NiwgMjc5NjksIDI1NiwgMjgzNzksIAorICAgIDI1NiwgMjgzNjMsIDI1NiwgMjg0NTAsIDI1NiwgMjg3MDIsIDI1NiwgMjkwMzgsIDI1NiwgMzA2MzEsIDI1NiwgMjkyMzcsIAorICAgIDI1NiwgMjkzNTksIDI1NiwgMjk0ODIsIDI1NiwgMjk4MDksIDI1NiwgMjk5NTgsIDI1NiwgMzAwMTEsIDI1NiwgMzAyMzcsIAorICAgIDI1NiwgMzAyMzksIDI1NiwgMzA0MTAsIDI1NiwgMzA0MjcsIDI1NiwgMzA0NTIsIDI1NiwgMzA1MzgsIDI1NiwgMzA1MjgsIAorICAgIDI1NiwgMzA5MjQsIDI1NiwgMzE0MDksIDI1NiwgMzE2ODAsIDI1NiwgMzE4NjcsIDI1NiwgMzIwOTEsIDI1NiwgMzIyNDQsIAorICAgIDI1NiwgMzI1NzQsIDI1NiwgMzI3NzMsIDI1NiwgMzM2MTgsIDI1NiwgMzM3NzUsIDI1NiwgMzQ2ODEsIDI1NiwgMzUxMzcsIAorICAgIDI1NiwgMzUyMDYsIDI1NiwgMzUyMjIsIDI1NiwgMzU1MTksIDI1NiwgMzU1NzYsIDI1NiwgMzU1MzEsIDI1NiwgMzU1ODUsIAorICAgIDI1NiwgMzU1ODIsIDI1NiwgMzU1NjUsIDI1NiwgMzU2NDEsIDI1NiwgMzU3MjIsIDI1NiwgMzYxMDQsIDI1NiwgMzY2NjQsIAorICAgIDI1NiwgMzY5NzgsIDI1NiwgMzcyNzMsIDI1NiwgMzc0OTQsIDI1NiwgMzg1MjQsIDI1NiwgMzg2MjcsIDI1NiwgMzg3NDIsIAorICAgIDI1NiwgMzg4NzUsIDI1NiwgMzg5MTEsIDI1NiwgMzg5MjMsIDI1NiwgMzg5NzEsIDI1NiwgMzk2OTgsIDI1NiwgNDA4NjAsIAorICAgIDI1NiwgMTQxMzg2LCAyNTYsIDE0MTM4MCwgMjU2LCAxNDQzNDEsIDI1NiwgMTUyNjEsIDI1NiwgMTY0MDgsIDI1NiwgCisgICAgMTY0NDEsIDI1NiwgMTUyMTM3LCAyNTYsIDE1NDgzMiwgMjU2LCAxNjM1MzksIDI1NiwgNDA3NzEsIDI1NiwgNDA4NDYsIAorICAgIDUxNCwgMTAyLCAxMDIsIDUxNCwgMTAyLCAxMDUsIDUxNCwgMTAyLCAxMDgsIDc3MCwgMTAyLCAxMDIsIDEwNSwgNzcwLCAKKyAgICAxMDIsIDEwMiwgMTA4LCA1MTQsIDM4MywgMTE2LCA1MTQsIDExNSwgMTE2LCA1MTQsIDEzOTYsIDEzOTgsIDUxNCwgMTM5NiwgCisgICAgMTM4MSwgNTE0LCAxMzk2LCAxMzg3LCA1MTQsIDE0MDYsIDEzOTgsIDUxNCwgMTM5NiwgMTM4OSwgNTEyLCAxNDk3LCAxNDYwLCAKKyAgICA1MTIsIDE1MjIsIDE0NjMsIDI2MiwgMTUwNiwgMjYyLCAxNDg4LCAyNjIsIDE0OTEsIDI2MiwgMTQ5MiwgMjYyLCAxNDk5LCAKKyAgICAyNjIsIDE1MDAsIDI2MiwgMTUwMSwgMjYyLCAxNTEyLCAyNjIsIDE1MTQsIDI2MiwgNDMsIDUxMiwgMTUxMywgMTQ3MywgCisgICAgNTEyLCAxNTEzLCAxNDc0LCA1MTIsIDY0MzI5LCAxNDczLCA1MTIsIDY0MzI5LCAxNDc0LCA1MTIsIDE0ODgsIDE0NjMsIAorICAgIDUxMiwgMTQ4OCwgMTQ2NCwgNTEyLCAxNDg4LCAxNDY4LCA1MTIsIDE0ODksIDE0NjgsIDUxMiwgMTQ5MCwgMTQ2OCwgNTEyLCAKKyAgICAxNDkxLCAxNDY4LCA1MTIsIDE0OTIsIDE0NjgsIDUxMiwgMTQ5MywgMTQ2OCwgNTEyLCAxNDk0LCAxNDY4LCA1MTIsIDE0OTYsIAorICAgIDE0NjgsIDUxMiwgMTQ5NywgMTQ2OCwgNTEyLCAxNDk4LCAxNDY4LCA1MTIsIDE0OTksIDE0NjgsIDUxMiwgMTUwMCwgMTQ2OCwgCisgICAgNTEyLCAxNTAyLCAxNDY4LCA1MTIsIDE1MDQsIDE0NjgsIDUxMiwgMTUwNSwgMTQ2OCwgNTEyLCAxNTA3LCAxNDY4LCA1MTIsIAorICAgIDE1MDgsIDE0NjgsIDUxMiwgMTUxMCwgMTQ2OCwgNTEyLCAxNTExLCAxNDY4LCA1MTIsIDE1MTIsIDE0NjgsIDUxMiwgMTUxMywgCisgICAgMTQ2OCwgNTEyLCAxNTE0LCAxNDY4LCA1MTIsIDE0OTMsIDE0NjUsIDUxMiwgMTQ4OSwgMTQ3MSwgNTEyLCAxNDk5LCAxNDcxLCAKKyAgICA1MTIsIDE1MDgsIDE0NzEsIDUxNCwgMTQ4OCwgMTUwMCwgMjY3LCAxNjQ5LCAyNjgsIDE2NDksIDI2NywgMTY1OSwgMjY4LCAKKyAgICAxNjU5LCAyNjksIDE2NTksIDI3MCwgMTY1OSwgMjY3LCAxNjYyLCAyNjgsIDE2NjIsIDI2OSwgMTY2MiwgMjcwLCAxNjYyLCAKKyAgICAyNjcsIDE2NjQsIDI2OCwgMTY2NCwgMjY5LCAxNjY0LCAyNzAsIDE2NjQsIDI2NywgMTY1OCwgMjY4LCAxNjU4LCAyNjksIAorICAgIDE2NTgsIDI3MCwgMTY1OCwgMjY3LCAxNjYzLCAyNjgsIDE2NjMsIDI2OSwgMTY2MywgMjcwLCAxNjYzLCAyNjcsIDE2NTcsIAorICAgIDI2OCwgMTY1NywgMjY5LCAxNjU3LCAyNzAsIDE2NTcsIDI2NywgMTcwMCwgMjY4LCAxNzAwLCAyNjksIDE3MDAsIDI3MCwgCisgICAgMTcwMCwgMjY3LCAxNzAyLCAyNjgsIDE3MDIsIDI2OSwgMTcwMiwgMjcwLCAxNzAyLCAyNjcsIDE2NjgsIDI2OCwgMTY2OCwgCisgICAgMjY5LCAxNjY4LCAyNzAsIDE2NjgsIDI2NywgMTY2NywgMjY4LCAxNjY3LCAyNjksIDE2NjcsIDI3MCwgMTY2NywgMjY3LCAKKyAgICAxNjcwLCAyNjgsIDE2NzAsIDI2OSwgMTY3MCwgMjcwLCAxNjcwLCAyNjcsIDE2NzEsIDI2OCwgMTY3MSwgMjY5LCAxNjcxLCAKKyAgICAyNzAsIDE2NzEsIDI2NywgMTY3NywgMjY4LCAxNjc3LCAyNjcsIDE2NzYsIDI2OCwgMTY3NiwgMjY3LCAxNjc4LCAyNjgsIAorICAgIDE2NzgsIDI2NywgMTY3MiwgMjY4LCAxNjcyLCAyNjcsIDE2ODgsIDI2OCwgMTY4OCwgMjY3LCAxNjgxLCAyNjgsIDE2ODEsIAorICAgIDI2NywgMTcwNSwgMjY4LCAxNzA1LCAyNjksIDE3MDUsIDI3MCwgMTcwNSwgMjY3LCAxNzExLCAyNjgsIDE3MTEsIDI2OSwgCisgICAgMTcxMSwgMjcwLCAxNzExLCAyNjcsIDE3MTUsIDI2OCwgMTcxNSwgMjY5LCAxNzE1LCAyNzAsIDE3MTUsIDI2NywgMTcxMywgCisgICAgMjY4LCAxNzEzLCAyNjksIDE3MTMsIDI3MCwgMTcxMywgMjY3LCAxNzIyLCAyNjgsIDE3MjIsIDI2NywgMTcyMywgMjY4LCAKKyAgICAxNzIzLCAyNjksIDE3MjMsIDI3MCwgMTcyMywgMjY3LCAxNzI4LCAyNjgsIDE3MjgsIDI2NywgMTcyOSwgMjY4LCAxNzI5LCAKKyAgICAyNjksIDE3MjksIDI3MCwgMTcyOSwgMjY3LCAxNzI2LCAyNjgsIDE3MjYsIDI2OSwgMTcyNiwgMjcwLCAxNzI2LCAyNjcsIAorICAgIDE3NDYsIDI2OCwgMTc0NiwgMjY3LCAxNzQ3LCAyNjgsIDE3NDcsIDI2NywgMTcwOSwgMjY4LCAxNzA5LCAyNjksIDE3MDksIAorICAgIDI3MCwgMTcwOSwgMjY3LCAxNzM1LCAyNjgsIDE3MzUsIDI2NywgMTczNCwgMjY4LCAxNzM0LCAyNjcsIDE3MzYsIDI2OCwgCisgICAgMTczNiwgMjY3LCAxNjU1LCAyNjcsIDE3MzksIDI2OCwgMTczOSwgMjY3LCAxNzMzLCAyNjgsIDE3MzMsIDI2NywgMTczNywgCisgICAgMjY4LCAxNzM3LCAyNjcsIDE3NDQsIDI2OCwgMTc0NCwgMjY5LCAxNzQ0LCAyNzAsIDE3NDQsIDI2OSwgMTYwOSwgMjcwLCAKKyAgICAxNjA5LCA1MjMsIDE1NzQsIDE1NzUsIDUyNCwgMTU3NCwgMTU3NSwgNTIzLCAxNTc0LCAxNzQ5LCA1MjQsIDE1NzQsIDE3NDksIAorICAgIDUyMywgMTU3NCwgMTYwOCwgNTI0LCAxNTc0LCAxNjA4LCA1MjMsIDE1NzQsIDE3MzUsIDUyNCwgMTU3NCwgMTczNSwgNTIzLCAKKyAgICAxNTc0LCAxNzM0LCA1MjQsIDE1NzQsIDE3MzQsIDUyMywgMTU3NCwgMTczNiwgNTI0LCAxNTc0LCAxNzM2LCA1MjMsIDE1NzQsIAorICAgIDE3NDQsIDUyNCwgMTU3NCwgMTc0NCwgNTI1LCAxNTc0LCAxNzQ0LCA1MjMsIDE1NzQsIDE2MDksIDUyNCwgMTU3NCwgMTYwOSwgCisgICAgNTI1LCAxNTc0LCAxNjA5LCAyNjcsIDE3NDAsIDI2OCwgMTc0MCwgMjY5LCAxNzQwLCAyNzAsIDE3NDAsIDUyMywgMTU3NCwgCisgICAgMTU4MCwgNTIzLCAxNTc0LCAxNTgxLCA1MjMsIDE1NzQsIDE2MDUsIDUyMywgMTU3NCwgMTYwOSwgNTIzLCAxNTc0LCAxNjEwLCAKKyAgICA1MjMsIDE1NzYsIDE1ODAsIDUyMywgMTU3NiwgMTU4MSwgNTIzLCAxNTc2LCAxNTgyLCA1MjMsIDE1NzYsIDE2MDUsIDUyMywgCisgICAgMTU3NiwgMTYwOSwgNTIzLCAxNTc2LCAxNjEwLCA1MjMsIDE1NzgsIDE1ODAsIDUyMywgMTU3OCwgMTU4MSwgNTIzLCAxNTc4LCAKKyAgICAxNTgyLCA1MjMsIDE1NzgsIDE2MDUsIDUyMywgMTU3OCwgMTYwOSwgNTIzLCAxNTc4LCAxNjEwLCA1MjMsIDE1NzksIDE1ODAsIAorICAgIDUyMywgMTU3OSwgMTYwNSwgNTIzLCAxNTc5LCAxNjA5LCA1MjMsIDE1NzksIDE2MTAsIDUyMywgMTU4MCwgMTU4MSwgNTIzLCAKKyAgICAxNTgwLCAxNjA1LCA1MjMsIDE1ODEsIDE1ODAsIDUyMywgMTU4MSwgMTYwNSwgNTIzLCAxNTgyLCAxNTgwLCA1MjMsIDE1ODIsIAorICAgIDE1ODEsIDUyMywgMTU4MiwgMTYwNSwgNTIzLCAxNTg3LCAxNTgwLCA1MjMsIDE1ODcsIDE1ODEsIDUyMywgMTU4NywgMTU4MiwgCisgICAgNTIzLCAxNTg3LCAxNjA1LCA1MjMsIDE1ODksIDE1ODEsIDUyMywgMTU4OSwgMTYwNSwgNTIzLCAxNTkwLCAxNTgwLCA1MjMsIAorICAgIDE1OTAsIDE1ODEsIDUyMywgMTU5MCwgMTU4MiwgNTIzLCAxNTkwLCAxNjA1LCA1MjMsIDE1OTEsIDE1ODEsIDUyMywgMTU5MSwgCisgICAgMTYwNSwgNTIzLCAxNTkyLCAxNjA1LCA1MjMsIDE1OTMsIDE1ODAsIDUyMywgMTU5MywgMTYwNSwgNTIzLCAxNTk0LCAxNTgwLCAKKyAgICA1MjMsIDE1OTQsIDE2MDUsIDUyMywgMTYwMSwgMTU4MCwgNTIzLCAxNjAxLCAxNTgxLCA1MjMsIDE2MDEsIDE1ODIsIDUyMywgCisgICAgMTYwMSwgMTYwNSwgNTIzLCAxNjAxLCAxNjA5LCA1MjMsIDE2MDEsIDE2MTAsIDUyMywgMTYwMiwgMTU4MSwgNTIzLCAxNjAyLCAKKyAgICAxNjA1LCA1MjMsIDE2MDIsIDE2MDksIDUyMywgMTYwMiwgMTYxMCwgNTIzLCAxNjAzLCAxNTc1LCA1MjMsIDE2MDMsIDE1ODAsIAorICAgIDUyMywgMTYwMywgMTU4MSwgNTIzLCAxNjAzLCAxNTgyLCA1MjMsIDE2MDMsIDE2MDQsIDUyMywgMTYwMywgMTYwNSwgNTIzLCAKKyAgICAxNjAzLCAxNjA5LCA1MjMsIDE2MDMsIDE2MTAsIDUyMywgMTYwNCwgMTU4MCwgNTIzLCAxNjA0LCAxNTgxLCA1MjMsIDE2MDQsIAorICAgIDE1ODIsIDUyMywgMTYwNCwgMTYwNSwgNTIzLCAxNjA0LCAxNjA5LCA1MjMsIDE2MDQsIDE2MTAsIDUyMywgMTYwNSwgMTU4MCwgCisgICAgNTIzLCAxNjA1LCAxNTgxLCA1MjMsIDE2MDUsIDE1ODIsIDUyMywgMTYwNSwgMTYwNSwgNTIzLCAxNjA1LCAxNjA5LCA1MjMsIAorICAgIDE2MDUsIDE2MTAsIDUyMywgMTYwNiwgMTU4MCwgNTIzLCAxNjA2LCAxNTgxLCA1MjMsIDE2MDYsIDE1ODIsIDUyMywgMTYwNiwgCisgICAgMTYwNSwgNTIzLCAxNjA2LCAxNjA5LCA1MjMsIDE2MDYsIDE2MTAsIDUyMywgMTYwNywgMTU4MCwgNTIzLCAxNjA3LCAxNjA1LCAKKyAgICA1MjMsIDE2MDcsIDE2MDksIDUyMywgMTYwNywgMTYxMCwgNTIzLCAxNjEwLCAxNTgwLCA1MjMsIDE2MTAsIDE1ODEsIDUyMywgCisgICAgMTYxMCwgMTU4MiwgNTIzLCAxNjEwLCAxNjA1LCA1MjMsIDE2MTAsIDE2MDksIDUyMywgMTYxMCwgMTYxMCwgNTIzLCAxNTg0LCAKKyAgICAxNjQ4LCA1MjMsIDE1ODUsIDE2NDgsIDUyMywgMTYwOSwgMTY0OCwgNzc5LCAzMiwgMTYxMiwgMTYxNywgNzc5LCAzMiwgCisgICAgMTYxMywgMTYxNywgNzc5LCAzMiwgMTYxNCwgMTYxNywgNzc5LCAzMiwgMTYxNSwgMTYxNywgNzc5LCAzMiwgMTYxNiwgCisgICAgMTYxNywgNzc5LCAzMiwgMTYxNywgMTY0OCwgNTI0LCAxNTc0LCAxNTg1LCA1MjQsIDE1NzQsIDE1ODYsIDUyNCwgMTU3NCwgCisgICAgMTYwNSwgNTI0LCAxNTc0LCAxNjA2LCA1MjQsIDE1NzQsIDE2MDksIDUyNCwgMTU3NCwgMTYxMCwgNTI0LCAxNTc2LCAxNTg1LCAKKyAgICA1MjQsIDE1NzYsIDE1ODYsIDUyNCwgMTU3NiwgMTYwNSwgNTI0LCAxNTc2LCAxNjA2LCA1MjQsIDE1NzYsIDE2MDksIDUyNCwgCisgICAgMTU3NiwgMTYxMCwgNTI0LCAxNTc4LCAxNTg1LCA1MjQsIDE1NzgsIDE1ODYsIDUyNCwgMTU3OCwgMTYwNSwgNTI0LCAxNTc4LCAKKyAgICAxNjA2LCA1MjQsIDE1NzgsIDE2MDksIDUyNCwgMTU3OCwgMTYxMCwgNTI0LCAxNTc5LCAxNTg1LCA1MjQsIDE1NzksIDE1ODYsIAorICAgIDUyNCwgMTU3OSwgMTYwNSwgNTI0LCAxNTc5LCAxNjA2LCA1MjQsIDE1NzksIDE2MDksIDUyNCwgMTU3OSwgMTYxMCwgNTI0LCAKKyAgICAxNjAxLCAxNjA5LCA1MjQsIDE2MDEsIDE2MTAsIDUyNCwgMTYwMiwgMTYwOSwgNTI0LCAxNjAyLCAxNjEwLCA1MjQsIDE2MDMsIAorICAgIDE1NzUsIDUyNCwgMTYwMywgMTYwNCwgNTI0LCAxNjAzLCAxNjA1LCA1MjQsIDE2MDMsIDE2MDksIDUyNCwgMTYwMywgMTYxMCwgCisgICAgNTI0LCAxNjA0LCAxNjA1LCA1MjQsIDE2MDQsIDE2MDksIDUyNCwgMTYwNCwgMTYxMCwgNTI0LCAxNjA1LCAxNTc1LCA1MjQsIAorICAgIDE2MDUsIDE2MDUsIDUyNCwgMTYwNiwgMTU4NSwgNTI0LCAxNjA2LCAxNTg2LCA1MjQsIDE2MDYsIDE2MDUsIDUyNCwgMTYwNiwgCisgICAgMTYwNiwgNTI0LCAxNjA2LCAxNjA5LCA1MjQsIDE2MDYsIDE2MTAsIDUyNCwgMTYwOSwgMTY0OCwgNTI0LCAxNjEwLCAxNTg1LCAKKyAgICA1MjQsIDE2MTAsIDE1ODYsIDUyNCwgMTYxMCwgMTYwNSwgNTI0LCAxNjEwLCAxNjA2LCA1MjQsIDE2MTAsIDE2MDksIDUyNCwgCisgICAgMTYxMCwgMTYxMCwgNTI1LCAxNTc0LCAxNTgwLCA1MjUsIDE1NzQsIDE1ODEsIDUyNSwgMTU3NCwgMTU4MiwgNTI1LCAxNTc0LCAKKyAgICAxNjA1LCA1MjUsIDE1NzQsIDE2MDcsIDUyNSwgMTU3NiwgMTU4MCwgNTI1LCAxNTc2LCAxNTgxLCA1MjUsIDE1NzYsIDE1ODIsIAorICAgIDUyNSwgMTU3NiwgMTYwNSwgNTI1LCAxNTc2LCAxNjA3LCA1MjUsIDE1NzgsIDE1ODAsIDUyNSwgMTU3OCwgMTU4MSwgNTI1LCAKKyAgICAxNTc4LCAxNTgyLCA1MjUsIDE1NzgsIDE2MDUsIDUyNSwgMTU3OCwgMTYwNywgNTI1LCAxNTc5LCAxNjA1LCA1MjUsIDE1ODAsIAorICAgIDE1ODEsIDUyNSwgMTU4MCwgMTYwNSwgNTI1LCAxNTgxLCAxNTgwLCA1MjUsIDE1ODEsIDE2MDUsIDUyNSwgMTU4MiwgMTU4MCwgCisgICAgNTI1LCAxNTgyLCAxNjA1LCA1MjUsIDE1ODcsIDE1ODAsIDUyNSwgMTU4NywgMTU4MSwgNTI1LCAxNTg3LCAxNTgyLCA1MjUsIAorICAgIDE1ODcsIDE2MDUsIDUyNSwgMTU4OSwgMTU4MSwgNTI1LCAxNTg5LCAxNTgyLCA1MjUsIDE1ODksIDE2MDUsIDUyNSwgMTU5MCwgCisgICAgMTU4MCwgNTI1LCAxNTkwLCAxNTgxLCA1MjUsIDE1OTAsIDE1ODIsIDUyNSwgMTU5MCwgMTYwNSwgNTI1LCAxNTkxLCAxNTgxLCAKKyAgICA1MjUsIDE1OTIsIDE2MDUsIDUyNSwgMTU5MywgMTU4MCwgNTI1LCAxNTkzLCAxNjA1LCA1MjUsIDE1OTQsIDE1ODAsIDUyNSwgCisgICAgMTU5NCwgMTYwNSwgNTI1LCAxNjAxLCAxNTgwLCA1MjUsIDE2MDEsIDE1ODEsIDUyNSwgMTYwMSwgMTU4MiwgNTI1LCAxNjAxLCAKKyAgICAxNjA1LCA1MjUsIDE2MDIsIDE1ODEsIDUyNSwgMTYwMiwgMTYwNSwgNTI1LCAxNjAzLCAxNTgwLCA1MjUsIDE2MDMsIDE1ODEsIAorICAgIDUyNSwgMTYwMywgMTU4MiwgNTI1LCAxNjAzLCAxNjA0LCA1MjUsIDE2MDMsIDE2MDUsIDUyNSwgMTYwNCwgMTU4MCwgNTI1LCAKKyAgICAxNjA0LCAxNTgxLCA1MjUsIDE2MDQsIDE1ODIsIDUyNSwgMTYwNCwgMTYwNSwgNTI1LCAxNjA0LCAxNjA3LCA1MjUsIDE2MDUsIAorICAgIDE1ODAsIDUyNSwgMTYwNSwgMTU4MSwgNTI1LCAxNjA1LCAxNTgyLCA1MjUsIDE2MDUsIDE2MDUsIDUyNSwgMTYwNiwgMTU4MCwgCisgICAgNTI1LCAxNjA2LCAxNTgxLCA1MjUsIDE2MDYsIDE1ODIsIDUyNSwgMTYwNiwgMTYwNSwgNTI1LCAxNjA2LCAxNjA3LCA1MjUsIAorICAgIDE2MDcsIDE1ODAsIDUyNSwgMTYwNywgMTYwNSwgNTI1LCAxNjA3LCAxNjQ4LCA1MjUsIDE2MTAsIDE1ODAsIDUyNSwgMTYxMCwgCisgICAgMTU4MSwgNTI1LCAxNjEwLCAxNTgyLCA1MjUsIDE2MTAsIDE2MDUsIDUyNSwgMTYxMCwgMTYwNywgNTI2LCAxNTc0LCAxNjA1LCAKKyAgICA1MjYsIDE1NzQsIDE2MDcsIDUyNiwgMTU3NiwgMTYwNSwgNTI2LCAxNTc2LCAxNjA3LCA1MjYsIDE1NzgsIDE2MDUsIDUyNiwgCisgICAgMTU3OCwgMTYwNywgNTI2LCAxNTc5LCAxNjA1LCA1MjYsIDE1NzksIDE2MDcsIDUyNiwgMTU4NywgMTYwNSwgNTI2LCAxNTg3LCAKKyAgICAxNjA3LCA1MjYsIDE1ODgsIDE2MDUsIDUyNiwgMTU4OCwgMTYwNywgNTI2LCAxNjAzLCAxNjA0LCA1MjYsIDE2MDMsIDE2MDUsIAorICAgIDUyNiwgMTYwNCwgMTYwNSwgNTI2LCAxNjA2LCAxNjA1LCA1MjYsIDE2MDYsIDE2MDcsIDUyNiwgMTYxMCwgMTYwNSwgNTI2LCAKKyAgICAxNjEwLCAxNjA3LCA3ODIsIDE2MDAsIDE2MTQsIDE2MTcsIDc4MiwgMTYwMCwgMTYxNSwgMTYxNywgNzgyLCAxNjAwLCAKKyAgICAxNjE2LCAxNjE3LCA1MjMsIDE1OTEsIDE2MDksIDUyMywgMTU5MSwgMTYxMCwgNTIzLCAxNTkzLCAxNjA5LCA1MjMsIDE1OTMsIAorICAgIDE2MTAsIDUyMywgMTU5NCwgMTYwOSwgNTIzLCAxNTk0LCAxNjEwLCA1MjMsIDE1ODcsIDE2MDksIDUyMywgMTU4NywgMTYxMCwgCisgICAgNTIzLCAxNTg4LCAxNjA5LCA1MjMsIDE1ODgsIDE2MTAsIDUyMywgMTU4MSwgMTYwOSwgNTIzLCAxNTgxLCAxNjEwLCA1MjMsIAorICAgIDE1ODAsIDE2MDksIDUyMywgMTU4MCwgMTYxMCwgNTIzLCAxNTgyLCAxNjA5LCA1MjMsIDE1ODIsIDE2MTAsIDUyMywgMTU4OSwgCisgICAgMTYwOSwgNTIzLCAxNTg5LCAxNjEwLCA1MjMsIDE1OTAsIDE2MDksIDUyMywgMTU5MCwgMTYxMCwgNTIzLCAxNTg4LCAxNTgwLCAKKyAgICA1MjMsIDE1ODgsIDE1ODEsIDUyMywgMTU4OCwgMTU4MiwgNTIzLCAxNTg4LCAxNjA1LCA1MjMsIDE1ODgsIDE1ODUsIDUyMywgCisgICAgMTU4NywgMTU4NSwgNTIzLCAxNTg5LCAxNTg1LCA1MjMsIDE1OTAsIDE1ODUsIDUyNCwgMTU5MSwgMTYwOSwgNTI0LCAxNTkxLCAKKyAgICAxNjEwLCA1MjQsIDE1OTMsIDE2MDksIDUyNCwgMTU5MywgMTYxMCwgNTI0LCAxNTk0LCAxNjA5LCA1MjQsIDE1OTQsIDE2MTAsIAorICAgIDUyNCwgMTU4NywgMTYwOSwgNTI0LCAxNTg3LCAxNjEwLCA1MjQsIDE1ODgsIDE2MDksIDUyNCwgMTU4OCwgMTYxMCwgNTI0LCAKKyAgICAxNTgxLCAxNjA5LCA1MjQsIDE1ODEsIDE2MTAsIDUyNCwgMTU4MCwgMTYwOSwgNTI0LCAxNTgwLCAxNjEwLCA1MjQsIDE1ODIsIAorICAgIDE2MDksIDUyNCwgMTU4MiwgMTYxMCwgNTI0LCAxNTg5LCAxNjA5LCA1MjQsIDE1ODksIDE2MTAsIDUyNCwgMTU5MCwgMTYwOSwgCisgICAgNTI0LCAxNTkwLCAxNjEwLCA1MjQsIDE1ODgsIDE1ODAsIDUyNCwgMTU4OCwgMTU4MSwgNTI0LCAxNTg4LCAxNTgyLCA1MjQsIAorICAgIDE1ODgsIDE2MDUsIDUyNCwgMTU4OCwgMTU4NSwgNTI0LCAxNTg3LCAxNTg1LCA1MjQsIDE1ODksIDE1ODUsIDUyNCwgMTU5MCwgCisgICAgMTU4NSwgNTI1LCAxNTg4LCAxNTgwLCA1MjUsIDE1ODgsIDE1ODEsIDUyNSwgMTU4OCwgMTU4MiwgNTI1LCAxNTg4LCAxNjA1LCAKKyAgICA1MjUsIDE1ODcsIDE2MDcsIDUyNSwgMTU4OCwgMTYwNywgNTI1LCAxNTkxLCAxNjA1LCA1MjYsIDE1ODcsIDE1ODAsIDUyNiwgCisgICAgMTU4NywgMTU4MSwgNTI2LCAxNTg3LCAxNTgyLCA1MjYsIDE1ODgsIDE1ODAsIDUyNiwgMTU4OCwgMTU4MSwgNTI2LCAxNTg4LCAKKyAgICAxNTgyLCA1MjYsIDE1OTEsIDE2MDUsIDUyNiwgMTU5MiwgMTYwNSwgNTI0LCAxNTc1LCAxNjExLCA1MjMsIDE1NzUsIDE2MTEsIAorICAgIDc4MSwgMTU3OCwgMTU4MCwgMTYwNSwgNzgwLCAxNTc4LCAxNTgxLCAxNTgwLCA3ODEsIDE1NzgsIDE1ODEsIDE1ODAsIDc4MSwgCisgICAgMTU3OCwgMTU4MSwgMTYwNSwgNzgxLCAxNTc4LCAxNTgyLCAxNjA1LCA3ODEsIDE1NzgsIDE2MDUsIDE1ODAsIDc4MSwgCisgICAgMTU3OCwgMTYwNSwgMTU4MSwgNzgxLCAxNTc4LCAxNjA1LCAxNTgyLCA3ODAsIDE1ODAsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTU4MCwgMTYwNSwgMTU4MSwgNzgwLCAxNTgxLCAxNjA1LCAxNjEwLCA3ODAsIDE1ODEsIDE2MDUsIDE2MDksIDc4MSwgCisgICAgMTU4NywgMTU4MSwgMTU4MCwgNzgxLCAxNTg3LCAxNTgwLCAxNTgxLCA3ODAsIDE1ODcsIDE1ODAsIDE2MDksIDc4MCwgCisgICAgMTU4NywgMTYwNSwgMTU4MSwgNzgxLCAxNTg3LCAxNjA1LCAxNTgxLCA3ODEsIDE1ODcsIDE2MDUsIDE1ODAsIDc4MCwgCisgICAgMTU4NywgMTYwNSwgMTYwNSwgNzgxLCAxNTg3LCAxNjA1LCAxNjA1LCA3ODAsIDE1ODksIDE1ODEsIDE1ODEsIDc4MSwgCisgICAgMTU4OSwgMTU4MSwgMTU4MSwgNzgwLCAxNTg5LCAxNjA1LCAxNjA1LCA3ODAsIDE1ODgsIDE1ODEsIDE2MDUsIDc4MSwgCisgICAgMTU4OCwgMTU4MSwgMTYwNSwgNzgwLCAxNTg4LCAxNTgwLCAxNjEwLCA3ODAsIDE1ODgsIDE2MDUsIDE1ODIsIDc4MSwgCisgICAgMTU4OCwgMTYwNSwgMTU4MiwgNzgwLCAxNTg4LCAxNjA1LCAxNjA1LCA3ODEsIDE1ODgsIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU5MCwgMTU4MSwgMTYwOSwgNzgwLCAxNTkwLCAxNTgyLCAxNjA1LCA3ODEsIDE1OTAsIDE1ODIsIDE2MDUsIDc4MCwgCisgICAgMTU5MSwgMTYwNSwgMTU4MSwgNzgxLCAxNTkxLCAxNjA1LCAxNTgxLCA3ODEsIDE1OTEsIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU5MSwgMTYwNSwgMTYxMCwgNzgwLCAxNTkzLCAxNTgwLCAxNjA1LCA3ODAsIDE1OTMsIDE2MDUsIDE2MDUsIDc4MSwgCisgICAgMTU5MywgMTYwNSwgMTYwNSwgNzgwLCAxNTkzLCAxNjA1LCAxNjA5LCA3ODAsIDE1OTQsIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTU5NCwgMTYwNSwgMTYxMCwgNzgwLCAxNTk0LCAxNjA1LCAxNjA5LCA3ODAsIDE2MDEsIDE1ODIsIDE2MDUsIDc4MSwgCisgICAgMTYwMSwgMTU4MiwgMTYwNSwgNzgwLCAxNjAyLCAxNjA1LCAxNTgxLCA3ODAsIDE2MDIsIDE2MDUsIDE2MDUsIDc4MCwgCisgICAgMTYwNCwgMTU4MSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgxLCAxNjEwLCA3ODAsIDE2MDQsIDE1ODEsIDE2MDksIDc4MSwgCisgICAgMTYwNCwgMTU4MCwgMTU4MCwgNzgwLCAxNjA0LCAxNTgwLCAxNTgwLCA3ODAsIDE2MDQsIDE1ODIsIDE2MDUsIDc4MSwgCisgICAgMTYwNCwgMTU4MiwgMTYwNSwgNzgwLCAxNjA0LCAxNjA1LCAxNTgxLCA3ODEsIDE2MDQsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTYwNSwgMTU4MSwgMTU4MCwgNzgxLCAxNjA1LCAxNTgxLCAxNjA1LCA3ODAsIDE2MDUsIDE1ODEsIDE2MTAsIDc4MSwgCisgICAgMTYwNSwgMTU4MCwgMTU4MSwgNzgxLCAxNjA1LCAxNTgwLCAxNjA1LCA3ODEsIDE2MDUsIDE1ODIsIDE1ODAsIDc4MSwgCisgICAgMTYwNSwgMTU4MiwgMTYwNSwgNzgxLCAxNjA1LCAxNTgwLCAxNTgyLCA3ODEsIDE2MDcsIDE2MDUsIDE1ODAsIDc4MSwgCisgICAgMTYwNywgMTYwNSwgMTYwNSwgNzgxLCAxNjA2LCAxNTgxLCAxNjA1LCA3ODAsIDE2MDYsIDE1ODEsIDE2MDksIDc4MCwgCisgICAgMTYwNiwgMTU4MCwgMTYwNSwgNzgxLCAxNjA2LCAxNTgwLCAxNjA1LCA3ODAsIDE2MDYsIDE1ODAsIDE2MDksIDc4MCwgCisgICAgMTYwNiwgMTYwNSwgMTYxMCwgNzgwLCAxNjA2LCAxNjA1LCAxNjA5LCA3ODAsIDE2MTAsIDE2MDUsIDE2MDUsIDc4MSwgCisgICAgMTYxMCwgMTYwNSwgMTYwNSwgNzgwLCAxNTc2LCAxNTgyLCAxNjEwLCA3ODAsIDE1NzgsIDE1ODAsIDE2MTAsIDc4MCwgCisgICAgMTU3OCwgMTU4MCwgMTYwOSwgNzgwLCAxNTc4LCAxNTgyLCAxNjEwLCA3ODAsIDE1NzgsIDE1ODIsIDE2MDksIDc4MCwgCisgICAgMTU3OCwgMTYwNSwgMTYxMCwgNzgwLCAxNTc4LCAxNjA1LCAxNjA5LCA3ODAsIDE1ODAsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTU4MCwgMTU4MSwgMTYwOSwgNzgwLCAxNTgwLCAxNjA1LCAxNjA5LCA3ODAsIDE1ODcsIDE1ODIsIDE2MDksIDc4MCwgCisgICAgMTU4OSwgMTU4MSwgMTYxMCwgNzgwLCAxNTg4LCAxNTgxLCAxNjEwLCA3ODAsIDE1OTAsIDE1ODEsIDE2MTAsIDc4MCwgCisgICAgMTYwNCwgMTU4MCwgMTYxMCwgNzgwLCAxNjA0LCAxNjA1LCAxNjEwLCA3ODAsIDE2MTAsIDE1ODEsIDE2MTAsIDc4MCwgCisgICAgMTYxMCwgMTU4MCwgMTYxMCwgNzgwLCAxNjEwLCAxNjA1LCAxNjEwLCA3ODAsIDE2MDUsIDE2MDUsIDE2MTAsIDc4MCwgCisgICAgMTYwMiwgMTYwNSwgMTYxMCwgNzgwLCAxNjA2LCAxNTgxLCAxNjEwLCA3ODEsIDE2MDIsIDE2MDUsIDE1ODEsIDc4MSwgCisgICAgMTYwNCwgMTU4MSwgMTYwNSwgNzgwLCAxNTkzLCAxNjA1LCAxNjEwLCA3ODAsIDE2MDMsIDE2MDUsIDE2MTAsIDc4MSwgCisgICAgMTYwNiwgMTU4MCwgMTU4MSwgNzgwLCAxNjA1LCAxNTgyLCAxNjEwLCA3ODEsIDE2MDQsIDE1ODAsIDE2MDUsIDc4MCwgCisgICAgMTYwMywgMTYwNSwgMTYwNSwgNzgwLCAxNjA0LCAxNTgwLCAxNjA1LCA3ODAsIDE2MDYsIDE1ODAsIDE1ODEsIDc4MCwgCisgICAgMTU4MCwgMTU4MSwgMTYxMCwgNzgwLCAxNTgxLCAxNTgwLCAxNjEwLCA3ODAsIDE2MDUsIDE1ODAsIDE2MTAsIDc4MCwgCisgICAgMTYwMSwgMTYwNSwgMTYxMCwgNzgwLCAxNTc2LCAxNTgxLCAxNjEwLCA3ODEsIDE2MDMsIDE2MDUsIDE2MDUsIDc4MSwgCisgICAgMTU5MywgMTU4MCwgMTYwNSwgNzgxLCAxNTg5LCAxNjA1LCAxNjA1LCA3ODAsIDE1ODcsIDE1ODIsIDE2MTAsIDc4MCwgCisgICAgMTYwNiwgMTU4MCwgMTYxMCwgNzc5LCAxNTg5LCAxNjA0LCAxNzQ2LCA3NzksIDE2MDIsIDE2MDQsIDE3NDYsIDEwMzUsIAorICAgIDE1NzUsIDE2MDQsIDE2MDQsIDE2MDcsIDEwMzUsIDE1NzUsIDE2MDMsIDE1NzYsIDE1ODUsIDEwMzUsIDE2MDUsIDE1ODEsIAorICAgIDE2MDUsIDE1ODMsIDEwMzUsIDE1ODksIDE2MDQsIDE1OTMsIDE2MDUsIDEwMzUsIDE1ODUsIDE1ODcsIDE2MDgsIDE2MDQsIAorICAgIDEwMzUsIDE1OTMsIDE2MDQsIDE2MTAsIDE2MDcsIDEwMzUsIDE2MDgsIDE1ODcsIDE2MDQsIDE2MDUsIDc3OSwgMTU4OSwgCisgICAgMTYwNCwgMTYwOSwgNDYxOSwgMTU4OSwgMTYwNCwgMTYwOSwgMzIsIDE1NzUsIDE2MDQsIDE2MDQsIDE2MDcsIDMyLCAxNTkzLCAKKyAgICAxNjA0LCAxNjEwLCAxNjA3LCAzMiwgMTYwOCwgMTU4NywgMTYwNCwgMTYwNSwgMjA1OSwgMTU4MCwgMTYwNCwgMzIsIDE1ODAsIAorICAgIDE2MDQsIDE1NzUsIDE2MDQsIDE2MDcsIDEwMzUsIDE1ODUsIDE3NDAsIDE1NzUsIDE2MDQsIDI2NSwgNDQsIDI2NSwgCisgICAgMTIyODksIDI2NSwgMTIyOTAsIDI2NSwgNTgsIDI2NSwgNTksIDI2NSwgMzMsIDI2NSwgNjMsIDI2NSwgMTIzMTAsIDI2NSwgCisgICAgMTIzMTEsIDI2NSwgODIzMCwgMjY1LCA4MjI5LCAyNjUsIDgyMTIsIDI2NSwgODIxMSwgMjY1LCA5NSwgMjY1LCA5NSwgMjY1LCAKKyAgICA0MCwgMjY1LCA0MSwgMjY1LCAxMjMsIDI2NSwgMTI1LCAyNjUsIDEyMzA4LCAyNjUsIDEyMzA5LCAyNjUsIDEyMzA0LCAyNjUsIAorICAgIDEyMzA1LCAyNjUsIDEyMjk4LCAyNjUsIDEyMjk5LCAyNjUsIDEyMjk2LCAyNjUsIDEyMjk3LCAyNjUsIDEyMzAwLCAyNjUsIAorICAgIDEyMzAxLCAyNjUsIDEyMzAyLCAyNjUsIDEyMzAzLCAyNjUsIDkxLCAyNjUsIDkzLCAyNTgsIDgyNTQsIDI1OCwgODI1NCwgCisgICAgMjU4LCA4MjU0LCAyNTgsIDgyNTQsIDI1OCwgOTUsIDI1OCwgOTUsIDI1OCwgOTUsIDI3MSwgNDQsIDI3MSwgMTIyODksIAorICAgIDI3MSwgNDYsIDI3MSwgNTksIDI3MSwgNTgsIDI3MSwgNjMsIDI3MSwgMzMsIDI3MSwgODIxMiwgMjcxLCA0MCwgMjcxLCA0MSwgCisgICAgMjcxLCAxMjMsIDI3MSwgMTI1LCAyNzEsIDEyMzA4LCAyNzEsIDEyMzA5LCAyNzEsIDM1LCAyNzEsIDM4LCAyNzEsIDQyLCAKKyAgICAyNzEsIDQzLCAyNzEsIDQ1LCAyNzEsIDYwLCAyNzEsIDYyLCAyNzEsIDYxLCAyNzEsIDkyLCAyNzEsIDM2LCAyNzEsIDM3LCAKKyAgICAyNzEsIDY0LCA1MjMsIDMyLCAxNjExLCA1MjYsIDE2MDAsIDE2MTEsIDUyMywgMzIsIDE2MTIsIDUyMywgMzIsIDE2MTMsIAorICAgIDUyMywgMzIsIDE2MTQsIDUyNiwgMTYwMCwgMTYxNCwgNTIzLCAzMiwgMTYxNSwgNTI2LCAxNjAwLCAxNjE1LCA1MjMsIDMyLCAKKyAgICAxNjE2LCA1MjYsIDE2MDAsIDE2MTYsIDUyMywgMzIsIDE2MTcsIDUyNiwgMTYwMCwgMTYxNywgNTIzLCAzMiwgMTYxOCwgCisgICAgNTI2LCAxNjAwLCAxNjE4LCAyNjcsIDE1NjksIDI2NywgMTU3MCwgMjY4LCAxNTcwLCAyNjcsIDE1NzEsIDI2OCwgMTU3MSwgCisgICAgMjY3LCAxNTcyLCAyNjgsIDE1NzIsIDI2NywgMTU3MywgMjY4LCAxNTczLCAyNjcsIDE1NzQsIDI2OCwgMTU3NCwgMjY5LCAKKyAgICAxNTc0LCAyNzAsIDE1NzQsIDI2NywgMTU3NSwgMjY4LCAxNTc1LCAyNjcsIDE1NzYsIDI2OCwgMTU3NiwgMjY5LCAxNTc2LCAKKyAgICAyNzAsIDE1NzYsIDI2NywgMTU3NywgMjY4LCAxNTc3LCAyNjcsIDE1NzgsIDI2OCwgMTU3OCwgMjY5LCAxNTc4LCAyNzAsIAorICAgIDE1NzgsIDI2NywgMTU3OSwgMjY4LCAxNTc5LCAyNjksIDE1NzksIDI3MCwgMTU3OSwgMjY3LCAxNTgwLCAyNjgsIDE1ODAsIAorICAgIDI2OSwgMTU4MCwgMjcwLCAxNTgwLCAyNjcsIDE1ODEsIDI2OCwgMTU4MSwgMjY5LCAxNTgxLCAyNzAsIDE1ODEsIDI2NywgCisgICAgMTU4MiwgMjY4LCAxNTgyLCAyNjksIDE1ODIsIDI3MCwgMTU4MiwgMjY3LCAxNTgzLCAyNjgsIDE1ODMsIDI2NywgMTU4NCwgCisgICAgMjY4LCAxNTg0LCAyNjcsIDE1ODUsIDI2OCwgMTU4NSwgMjY3LCAxNTg2LCAyNjgsIDE1ODYsIDI2NywgMTU4NywgMjY4LCAKKyAgICAxNTg3LCAyNjksIDE1ODcsIDI3MCwgMTU4NywgMjY3LCAxNTg4LCAyNjgsIDE1ODgsIDI2OSwgMTU4OCwgMjcwLCAxNTg4LCAKKyAgICAyNjcsIDE1ODksIDI2OCwgMTU4OSwgMjY5LCAxNTg5LCAyNzAsIDE1ODksIDI2NywgMTU5MCwgMjY4LCAxNTkwLCAyNjksIAorICAgIDE1OTAsIDI3MCwgMTU5MCwgMjY3LCAxNTkxLCAyNjgsIDE1OTEsIDI2OSwgMTU5MSwgMjcwLCAxNTkxLCAyNjcsIDE1OTIsIAorICAgIDI2OCwgMTU5MiwgMjY5LCAxNTkyLCAyNzAsIDE1OTIsIDI2NywgMTU5MywgMjY4LCAxNTkzLCAyNjksIDE1OTMsIDI3MCwgCisgICAgMTU5MywgMjY3LCAxNTk0LCAyNjgsIDE1OTQsIDI2OSwgMTU5NCwgMjcwLCAxNTk0LCAyNjcsIDE2MDEsIDI2OCwgMTYwMSwgCisgICAgMjY5LCAxNjAxLCAyNzAsIDE2MDEsIDI2NywgMTYwMiwgMjY4LCAxNjAyLCAyNjksIDE2MDIsIDI3MCwgMTYwMiwgMjY3LCAKKyAgICAxNjAzLCAyNjgsIDE2MDMsIDI2OSwgMTYwMywgMjcwLCAxNjAzLCAyNjcsIDE2MDQsIDI2OCwgMTYwNCwgMjY5LCAxNjA0LCAKKyAgICAyNzAsIDE2MDQsIDI2NywgMTYwNSwgMjY4LCAxNjA1LCAyNjksIDE2MDUsIDI3MCwgMTYwNSwgMjY3LCAxNjA2LCAyNjgsIAorICAgIDE2MDYsIDI2OSwgMTYwNiwgMjcwLCAxNjA2LCAyNjcsIDE2MDcsIDI2OCwgMTYwNywgMjY5LCAxNjA3LCAyNzAsIDE2MDcsIAorICAgIDI2NywgMTYwOCwgMjY4LCAxNjA4LCAyNjcsIDE2MDksIDI2OCwgMTYwOSwgMjY3LCAxNjEwLCAyNjgsIDE2MTAsIDI2OSwgCisgICAgMTYxMCwgMjcwLCAxNjEwLCA1MjMsIDE2MDQsIDE1NzAsIDUyNCwgMTYwNCwgMTU3MCwgNTIzLCAxNjA0LCAxNTcxLCA1MjQsIAorICAgIDE2MDQsIDE1NzEsIDUyMywgMTYwNCwgMTU3MywgNTI0LCAxNjA0LCAxNTczLCA1MjMsIDE2MDQsIDE1NzUsIDUyNCwgMTYwNCwgCisgICAgMTU3NSwgMjY0LCAzMywgMjY0LCAzNCwgMjY0LCAzNSwgMjY0LCAzNiwgMjY0LCAzNywgMjY0LCAzOCwgMjY0LCAzOSwgMjY0LCAKKyAgICA0MCwgMjY0LCA0MSwgMjY0LCA0MiwgMjY0LCA0MywgMjY0LCA0NCwgMjY0LCA0NSwgMjY0LCA0NiwgMjY0LCA0NywgMjY0LCAKKyAgICA0OCwgMjY0LCA0OSwgMjY0LCA1MCwgMjY0LCA1MSwgMjY0LCA1MiwgMjY0LCA1MywgMjY0LCA1NCwgMjY0LCA1NSwgMjY0LCAKKyAgICA1NiwgMjY0LCA1NywgMjY0LCA1OCwgMjY0LCA1OSwgMjY0LCA2MCwgMjY0LCA2MSwgMjY0LCA2MiwgMjY0LCA2MywgMjY0LCAKKyAgICA2NCwgMjY0LCA2NSwgMjY0LCA2NiwgMjY0LCA2NywgMjY0LCA2OCwgMjY0LCA2OSwgMjY0LCA3MCwgMjY0LCA3MSwgMjY0LCAKKyAgICA3MiwgMjY0LCA3MywgMjY0LCA3NCwgMjY0LCA3NSwgMjY0LCA3NiwgMjY0LCA3NywgMjY0LCA3OCwgMjY0LCA3OSwgMjY0LCAKKyAgICA4MCwgMjY0LCA4MSwgMjY0LCA4MiwgMjY0LCA4MywgMjY0LCA4NCwgMjY0LCA4NSwgMjY0LCA4NiwgMjY0LCA4NywgMjY0LCAKKyAgICA4OCwgMjY0LCA4OSwgMjY0LCA5MCwgMjY0LCA5MSwgMjY0LCA5MiwgMjY0LCA5MywgMjY0LCA5NCwgMjY0LCA5NSwgMjY0LCAKKyAgICA5NiwgMjY0LCA5NywgMjY0LCA5OCwgMjY0LCA5OSwgMjY0LCAxMDAsIDI2NCwgMTAxLCAyNjQsIDEwMiwgMjY0LCAxMDMsIAorICAgIDI2NCwgMTA0LCAyNjQsIDEwNSwgMjY0LCAxMDYsIDI2NCwgMTA3LCAyNjQsIDEwOCwgMjY0LCAxMDksIDI2NCwgMTEwLCAKKyAgICAyNjQsIDExMSwgMjY0LCAxMTIsIDI2NCwgMTEzLCAyNjQsIDExNCwgMjY0LCAxMTUsIDI2NCwgMTE2LCAyNjQsIDExNywgCisgICAgMjY0LCAxMTgsIDI2NCwgMTE5LCAyNjQsIDEyMCwgMjY0LCAxMjEsIDI2NCwgMTIyLCAyNjQsIDEyMywgMjY0LCAxMjQsIAorICAgIDI2NCwgMTI1LCAyNjQsIDEyNiwgMjY0LCAxMDYyOSwgMjY0LCAxMDYzMCwgMjcyLCAxMjI5MCwgMjcyLCAxMjMwMCwgMjcyLCAKKyAgICAxMjMwMSwgMjcyLCAxMjI4OSwgMjcyLCAxMjUzOSwgMjcyLCAxMjUzMCwgMjcyLCAxMjQ0OSwgMjcyLCAxMjQ1MSwgMjcyLCAKKyAgICAxMjQ1MywgMjcyLCAxMjQ1NSwgMjcyLCAxMjQ1NywgMjcyLCAxMjUxNSwgMjcyLCAxMjUxNywgMjcyLCAxMjUxOSwgMjcyLCAKKyAgICAxMjQ4MywgMjcyLCAxMjU0MCwgMjcyLCAxMjQ1MCwgMjcyLCAxMjQ1MiwgMjcyLCAxMjQ1NCwgMjcyLCAxMjQ1NiwgMjcyLCAKKyAgICAxMjQ1OCwgMjcyLCAxMjQ1OSwgMjcyLCAxMjQ2MSwgMjcyLCAxMjQ2MywgMjcyLCAxMjQ2NSwgMjcyLCAxMjQ2NywgMjcyLCAKKyAgICAxMjQ2OSwgMjcyLCAxMjQ3MSwgMjcyLCAxMjQ3MywgMjcyLCAxMjQ3NSwgMjcyLCAxMjQ3NywgMjcyLCAxMjQ3OSwgMjcyLCAKKyAgICAxMjQ4MSwgMjcyLCAxMjQ4NCwgMjcyLCAxMjQ4NiwgMjcyLCAxMjQ4OCwgMjcyLCAxMjQ5MCwgMjcyLCAxMjQ5MSwgMjcyLCAKKyAgICAxMjQ5MiwgMjcyLCAxMjQ5MywgMjcyLCAxMjQ5NCwgMjcyLCAxMjQ5NSwgMjcyLCAxMjQ5OCwgMjcyLCAxMjUwMSwgMjcyLCAKKyAgICAxMjUwNCwgMjcyLCAxMjUwNywgMjcyLCAxMjUxMCwgMjcyLCAxMjUxMSwgMjcyLCAxMjUxMiwgMjcyLCAxMjUxMywgMjcyLCAKKyAgICAxMjUxNCwgMjcyLCAxMjUxNiwgMjcyLCAxMjUxOCwgMjcyLCAxMjUyMCwgMjcyLCAxMjUyMSwgMjcyLCAxMjUyMiwgMjcyLCAKKyAgICAxMjUyMywgMjcyLCAxMjUyNCwgMjcyLCAxMjUyNSwgMjcyLCAxMjUyNywgMjcyLCAxMjUzMSwgMjcyLCAxMjQ0MSwgMjcyLCAKKyAgICAxMjQ0MiwgMjcyLCAxMjY0NCwgMjcyLCAxMjU5MywgMjcyLCAxMjU5NCwgMjcyLCAxMjU5NSwgMjcyLCAxMjU5NiwgMjcyLCAKKyAgICAxMjU5NywgMjcyLCAxMjU5OCwgMjcyLCAxMjU5OSwgMjcyLCAxMjYwMCwgMjcyLCAxMjYwMSwgMjcyLCAxMjYwMiwgMjcyLCAKKyAgICAxMjYwMywgMjcyLCAxMjYwNCwgMjcyLCAxMjYwNSwgMjcyLCAxMjYwNiwgMjcyLCAxMjYwNywgMjcyLCAxMjYwOCwgMjcyLCAKKyAgICAxMjYwOSwgMjcyLCAxMjYxMCwgMjcyLCAxMjYxMSwgMjcyLCAxMjYxMiwgMjcyLCAxMjYxMywgMjcyLCAxMjYxNCwgMjcyLCAKKyAgICAxMjYxNSwgMjcyLCAxMjYxNiwgMjcyLCAxMjYxNywgMjcyLCAxMjYxOCwgMjcyLCAxMjYxOSwgMjcyLCAxMjYyMCwgMjcyLCAKKyAgICAxMjYyMSwgMjcyLCAxMjYyMiwgMjcyLCAxMjYyMywgMjcyLCAxMjYyNCwgMjcyLCAxMjYyNSwgMjcyLCAxMjYyNiwgMjcyLCAKKyAgICAxMjYyNywgMjcyLCAxMjYyOCwgMjcyLCAxMjYyOSwgMjcyLCAxMjYzMCwgMjcyLCAxMjYzMSwgMjcyLCAxMjYzMiwgMjcyLCAKKyAgICAxMjYzMywgMjcyLCAxMjYzNCwgMjcyLCAxMjYzNSwgMjcyLCAxMjYzNiwgMjcyLCAxMjYzNywgMjcyLCAxMjYzOCwgMjcyLCAKKyAgICAxMjYzOSwgMjcyLCAxMjY0MCwgMjcyLCAxMjY0MSwgMjcyLCAxMjY0MiwgMjcyLCAxMjY0MywgMjY0LCAxNjIsIDI2NCwgCisgICAgMTYzLCAyNjQsIDE3MiwgMjY0LCAxNzUsIDI2NCwgMTY2LCAyNjQsIDE2NSwgMjY0LCA4MzYxLCAyNzIsIDk0NzQsIDI3MiwgCisgICAgODU5MiwgMjcyLCA4NTkzLCAyNzIsIDg1OTQsIDI3MiwgODU5NSwgMjcyLCA5NjMyLCAyNzIsIDk2NzUsIDUxMiwgNjk3ODUsIAorICAgIDY5ODE4LCA1MTIsIDY5Nzg3LCA2OTgxOCwgNTEyLCA2OTc5NywgNjk4MTgsIDUxMiwgMTE5MTI3LCAxMTkxNDEsIDUxMiwgCisgICAgMTE5MTI4LCAxMTkxNDEsIDUxMiwgMTE5MTM1LCAxMTkxNTAsIDUxMiwgMTE5MTM1LCAxMTkxNTEsIDUxMiwgMTE5MTM1LCAKKyAgICAxMTkxNTIsIDUxMiwgMTE5MTM1LCAxMTkxNTMsIDUxMiwgMTE5MTM1LCAxMTkxNTQsIDUxMiwgMTE5MjI1LCAxMTkxNDEsIAorICAgIDUxMiwgMTE5MjI2LCAxMTkxNDEsIDUxMiwgMTE5MjI3LCAxMTkxNTAsIDUxMiwgMTE5MjI4LCAxMTkxNTAsIDUxMiwgCisgICAgMTE5MjI3LCAxMTkxNTEsIDUxMiwgMTE5MjI4LCAxMTkxNTEsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIAorICAgIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIAorICAgIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIAorICAgIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIAorICAgIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgCisgICAgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIAorICAgIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAKKyAgICAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgCisgICAgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgCisgICAgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgCisgICAgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgCisgICAgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIAogICAgIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAKICAgICAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgCiAgICAgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIApAQCAtMzE5MiwyMyArMzM5NiwyNyBAQAogICAgIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAKICAgICAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgCiAgICAgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIAotICAgIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIAotICAgIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIAotICAgIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIAotICAgIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAKLSAgICAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgCi0gICAgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIAotICAgIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgCi0gICAgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgCi0gICAgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgCi0gICAgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgCi0gICAgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAKLSAgICAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgCi0gICAgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIAotICAgIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAKLSAgICAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAKLSAgICAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAKLSAgICAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAKKyAgICAyNjIsIDY1LCAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDcxLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc4LCAyNjIsIDc5LCAKKyAgICAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAKKyAgICAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDIsIDI2MiwgCisgICAgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIAorICAgIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAKKyAgICAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIAorICAgIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIDI2MiwgNzIsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIAorICAgIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIAorICAgIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIAorICAgIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgCisgICAgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIAorICAgIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAKKyAgICAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2OCwgMjYyLCA2OSwgMjYyLCA3MCwgCisgICAgMjYyLCA3MSwgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgCisgICAgMjYyLCA4MSwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgCisgICAgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgCisgICAgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIAorICAgIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAKKyAgICAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY4LCAKKyAgICAyNjIsIDY5LCAyNjIsIDcwLCAyNjIsIDcxLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAKKyAgICAyNjIsIDc5LCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAKICAgICAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAKICAgICAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgCiAgICAgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIApAQCAtMzIyNiwyNCArMzQzNCwzNSBAQAogICAgIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgCiAgICAgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIAogICAgIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAKLSAgICAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCAzMDUsIDI2MiwgNTY3LCAyNjIsIDkxMywgMjYyLCA5MTQsIDI2MiwgCi0gICAgOTE1LCAyNjIsIDkxNiwgMjYyLCA5MTcsIDI2MiwgOTE4LCAyNjIsIDkxOSwgMjYyLCA5MjAsIDI2MiwgOTIxLCAyNjIsIAotICAgIDkyMiwgMjYyLCA5MjMsIDI2MiwgOTI0LCAyNjIsIDkyNSwgMjYyLCA5MjYsIDI2MiwgOTI3LCAyNjIsIDkyOCwgMjYyLCAKLSAgICA5MjksIDI2MiwgMTAxMiwgMjYyLCA5MzEsIDI2MiwgOTMyLCAyNjIsIDkzMywgMjYyLCA5MzQsIDI2MiwgOTM1LCAyNjIsIAotICAgIDkzNiwgMjYyLCA5MzcsIDI2MiwgODcxMSwgMjYyLCA5NDUsIDI2MiwgOTQ2LCAyNjIsIDk0NywgMjYyLCA5NDgsIDI2MiwgCi0gICAgOTQ5LCAyNjIsIDk1MCwgMjYyLCA5NTEsIDI2MiwgOTUyLCAyNjIsIDk1MywgMjYyLCA5NTQsIDI2MiwgOTU1LCAyNjIsIAotICAgIDk1NiwgMjYyLCA5NTcsIDI2MiwgOTU4LCAyNjIsIDk1OSwgMjYyLCA5NjAsIDI2MiwgOTYxLCAyNjIsIDk2MiwgMjYyLCAKLSAgICA5NjMsIDI2MiwgOTY0LCAyNjIsIDk2NSwgMjYyLCA5NjYsIDI2MiwgOTY3LCAyNjIsIDk2OCwgMjYyLCA5NjksIDI2MiwgCi0gICAgODcwNiwgMjYyLCAxMDEzLCAyNjIsIDk3NywgMjYyLCAxMDA4LCAyNjIsIDk4MSwgMjYyLCAxMDA5LCAyNjIsIDk4MiwgMjYyLCAKLSAgICA5MTMsIDI2MiwgOTE0LCAyNjIsIDkxNSwgMjYyLCA5MTYsIDI2MiwgOTE3LCAyNjIsIDkxOCwgMjYyLCA5MTksIDI2MiwgCi0gICAgOTIwLCAyNjIsIDkyMSwgMjYyLCA5MjIsIDI2MiwgOTIzLCAyNjIsIDkyNCwgMjYyLCA5MjUsIDI2MiwgOTI2LCAyNjIsIAotICAgIDkyNywgMjYyLCA5MjgsIDI2MiwgOTI5LCAyNjIsIDEwMTIsIDI2MiwgOTMxLCAyNjIsIDkzMiwgMjYyLCA5MzMsIDI2MiwgCi0gICAgOTM0LCAyNjIsIDkzNSwgMjYyLCA5MzYsIDI2MiwgOTM3LCAyNjIsIDg3MTEsIDI2MiwgOTQ1LCAyNjIsIDk0NiwgMjYyLCAKLSAgICA5NDcsIDI2MiwgOTQ4LCAyNjIsIDk0OSwgMjYyLCA5NTAsIDI2MiwgOTUxLCAyNjIsIDk1MiwgMjYyLCA5NTMsIDI2MiwgCi0gICAgOTU0LCAyNjIsIDk1NSwgMjYyLCA5NTYsIDI2MiwgOTU3LCAyNjIsIDk1OCwgMjYyLCA5NTksIDI2MiwgOTYwLCAyNjIsIAotICAgIDk2MSwgMjYyLCA5NjIsIDI2MiwgOTYzLCAyNjIsIDk2NCwgMjYyLCA5NjUsIDI2MiwgOTY2LCAyNjIsIDk2NywgMjYyLCAKLSAgICA5NjgsIDI2MiwgOTY5LCAyNjIsIDg3MDYsIDI2MiwgMTAxMywgMjYyLCA5NzcsIDI2MiwgMTAwOCwgMjYyLCA5ODEsIDI2MiwgCi0gICAgMTAwOSwgMjYyLCA5ODIsIDI2MiwgOTEzLCAyNjIsIDkxNCwgMjYyLCA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCAKKyAgICAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgCisgICAgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgCisgICAgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgCisgICAgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgCisgICAgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIAorICAgIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAKKyAgICAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgCisgICAgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIDY1LCAyNjIsIDY2LCAyNjIsIDY3LCAyNjIsIDY4LCAyNjIsIDY5LCAyNjIsIDcwLCAKKyAgICAyNjIsIDcxLCAyNjIsIDcyLCAyNjIsIDczLCAyNjIsIDc0LCAyNjIsIDc1LCAyNjIsIDc2LCAyNjIsIDc3LCAyNjIsIDc4LCAKKyAgICAyNjIsIDc5LCAyNjIsIDgwLCAyNjIsIDgxLCAyNjIsIDgyLCAyNjIsIDgzLCAyNjIsIDg0LCAyNjIsIDg1LCAyNjIsIDg2LCAKKyAgICAyNjIsIDg3LCAyNjIsIDg4LCAyNjIsIDg5LCAyNjIsIDkwLCAyNjIsIDk3LCAyNjIsIDk4LCAyNjIsIDk5LCAyNjIsIDEwMCwgCisgICAgMjYyLCAxMDEsIDI2MiwgMTAyLCAyNjIsIDEwMywgMjYyLCAxMDQsIDI2MiwgMTA1LCAyNjIsIDEwNiwgMjYyLCAxMDcsIAorICAgIDI2MiwgMTA4LCAyNjIsIDEwOSwgMjYyLCAxMTAsIDI2MiwgMTExLCAyNjIsIDExMiwgMjYyLCAxMTMsIDI2MiwgMTE0LCAKKyAgICAyNjIsIDExNSwgMjYyLCAxMTYsIDI2MiwgMTE3LCAyNjIsIDExOCwgMjYyLCAxMTksIDI2MiwgMTIwLCAyNjIsIDEyMSwgCisgICAgMjYyLCAxMjIsIDI2MiwgNjUsIDI2MiwgNjYsIDI2MiwgNjcsIDI2MiwgNjgsIDI2MiwgNjksIDI2MiwgNzAsIDI2MiwgNzEsIAorICAgIDI2MiwgNzIsIDI2MiwgNzMsIDI2MiwgNzQsIDI2MiwgNzUsIDI2MiwgNzYsIDI2MiwgNzcsIDI2MiwgNzgsIDI2MiwgNzksIAorICAgIDI2MiwgODAsIDI2MiwgODEsIDI2MiwgODIsIDI2MiwgODMsIDI2MiwgODQsIDI2MiwgODUsIDI2MiwgODYsIDI2MiwgODcsIAorICAgIDI2MiwgODgsIDI2MiwgODksIDI2MiwgOTAsIDI2MiwgOTcsIDI2MiwgOTgsIDI2MiwgOTksIDI2MiwgMTAwLCAyNjIsIDEwMSwgCisgICAgMjYyLCAxMDIsIDI2MiwgMTAzLCAyNjIsIDEwNCwgMjYyLCAxMDUsIDI2MiwgMTA2LCAyNjIsIDEwNywgMjYyLCAxMDgsIAorICAgIDI2MiwgMTA5LCAyNjIsIDExMCwgMjYyLCAxMTEsIDI2MiwgMTEyLCAyNjIsIDExMywgMjYyLCAxMTQsIDI2MiwgMTE1LCAKKyAgICAyNjIsIDExNiwgMjYyLCAxMTcsIDI2MiwgMTE4LCAyNjIsIDExOSwgMjYyLCAxMjAsIDI2MiwgMTIxLCAyNjIsIDEyMiwgCisgICAgMjYyLCA2NSwgMjYyLCA2NiwgMjYyLCA2NywgMjYyLCA2OCwgMjYyLCA2OSwgMjYyLCA3MCwgMjYyLCA3MSwgMjYyLCA3MiwgCisgICAgMjYyLCA3MywgMjYyLCA3NCwgMjYyLCA3NSwgMjYyLCA3NiwgMjYyLCA3NywgMjYyLCA3OCwgMjYyLCA3OSwgMjYyLCA4MCwgCisgICAgMjYyLCA4MSwgMjYyLCA4MiwgMjYyLCA4MywgMjYyLCA4NCwgMjYyLCA4NSwgMjYyLCA4NiwgMjYyLCA4NywgMjYyLCA4OCwgCisgICAgMjYyLCA4OSwgMjYyLCA5MCwgMjYyLCA5NywgMjYyLCA5OCwgMjYyLCA5OSwgMjYyLCAxMDAsIDI2MiwgMTAxLCAyNjIsIAorICAgIDEwMiwgMjYyLCAxMDMsIDI2MiwgMTA0LCAyNjIsIDEwNSwgMjYyLCAxMDYsIDI2MiwgMTA3LCAyNjIsIDEwOCwgMjYyLCAKKyAgICAxMDksIDI2MiwgMTEwLCAyNjIsIDExMSwgMjYyLCAxMTIsIDI2MiwgMTEzLCAyNjIsIDExNCwgMjYyLCAxMTUsIDI2MiwgCisgICAgMTE2LCAyNjIsIDExNywgMjYyLCAxMTgsIDI2MiwgMTE5LCAyNjIsIDEyMCwgMjYyLCAxMjEsIDI2MiwgMTIyLCAyNjIsIAorICAgIDMwNSwgMjYyLCA1NjcsIDI2MiwgOTEzLCAyNjIsIDkxNCwgMjYyLCA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCAKICAgICA5MTgsIDI2MiwgOTE5LCAyNjIsIDkyMCwgMjYyLCA5MjEsIDI2MiwgOTIyLCAyNjIsIDkyMywgMjYyLCA5MjQsIDI2MiwgCiAgICAgOTI1LCAyNjIsIDkyNiwgMjYyLCA5MjcsIDI2MiwgOTI4LCAyNjIsIDkyOSwgMjYyLCAxMDEyLCAyNjIsIDkzMSwgMjYyLCAKICAgICA5MzIsIDI2MiwgOTMzLCAyNjIsIDkzNCwgMjYyLCA5MzUsIDI2MiwgOTM2LCAyNjIsIDkzNywgMjYyLCA4NzExLCAyNjIsIApAQCAtMzI2OCwxMDQgKzM0ODcsMTQ2IEBACiAgICAgOTU1LCAyNjIsIDk1NiwgMjYyLCA5NTcsIDI2MiwgOTU4LCAyNjIsIDk1OSwgMjYyLCA5NjAsIDI2MiwgOTYxLCAyNjIsIAogICAgIDk2MiwgMjYyLCA5NjMsIDI2MiwgOTY0LCAyNjIsIDk2NSwgMjYyLCA5NjYsIDI2MiwgOTY3LCAyNjIsIDk2OCwgMjYyLCAKICAgICA5NjksIDI2MiwgODcwNiwgMjYyLCAxMDEzLCAyNjIsIDk3NywgMjYyLCAxMDA4LCAyNjIsIDk4MSwgMjYyLCAxMDA5LCAyNjIsIAotICAgIDk4MiwgMjYyLCA5ODgsIDI2MiwgOTg5LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAKLSAgICAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAKLSAgICAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAKLSAgICAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAKLSAgICAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAKLSAgICAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAKLSAgICAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNTYsIDIwMDI5LCAyNTYsIDIwMDI0LCAyNTYsIAotICAgIDIwMDMzLCAyNTYsIDEzMTM2MiwgMjU2LCAyMDMyMCwgMjU2LCAyMDM5OCwgMjU2LCAyMDQxMSwgMjU2LCAyMDQ4MiwgMjU2LCAKLSAgICAyMDYwMiwgMjU2LCAyMDYzMywgMjU2LCAyMDcxMSwgMjU2LCAyMDY4NywgMjU2LCAxMzQ3MCwgMjU2LCAxMzI2NjYsIDI1NiwgCi0gICAgMjA4MTMsIDI1NiwgMjA4MjAsIDI1NiwgMjA4MzYsIDI1NiwgMjA4NTUsIDI1NiwgMTMyMzgwLCAyNTYsIDEzNDk3LCAyNTYsIAotICAgIDIwODM5LCAyNTYsIDIwODc3LCAyNTYsIDEzMjQyNywgMjU2LCAyMDg4NywgMjU2LCAyMDkwMCwgMjU2LCAyMDE3MiwgMjU2LCAKLSAgICAyMDkwOCwgMjU2LCAyMDkxNywgMjU2LCAxNjg0MTUsIDI1NiwgMjA5ODEsIDI1NiwgMjA5OTUsIDI1NiwgMTM1MzUsIDI1NiwgCi0gICAgMjEwNTEsIDI1NiwgMjEwNjIsIDI1NiwgMjExMDYsIDI1NiwgMjExMTEsIDI1NiwgMTM1ODksIDI1NiwgMjExOTEsIDI1NiwgCi0gICAgMjExOTMsIDI1NiwgMjEyMjAsIDI1NiwgMjEyNDIsIDI1NiwgMjEyNTMsIDI1NiwgMjEyNTQsIDI1NiwgMjEyNzEsIDI1NiwgCi0gICAgMjEzMjEsIDI1NiwgMjEzMjksIDI1NiwgMjEzMzgsIDI1NiwgMjEzNjMsIDI1NiwgMjEzNzMsIDI1NiwgMjEzNzUsIDI1NiwgCi0gICAgMjEzNzUsIDI1NiwgMjEzNzUsIDI1NiwgMTMzNjc2LCAyNTYsIDI4Nzg0LCAyNTYsIDIxNDUwLCAyNTYsIDIxNDcxLCAyNTYsIAotICAgIDEzMzk4NywgMjU2LCAyMTQ4MywgMjU2LCAyMTQ4OSwgMjU2LCAyMTUxMCwgMjU2LCAyMTY2MiwgMjU2LCAyMTU2MCwgMjU2LCAKLSAgICAyMTU3NiwgMjU2LCAyMTYwOCwgMjU2LCAyMTY2NiwgMjU2LCAyMTc1MCwgMjU2LCAyMTc3NiwgMjU2LCAyMTg0MywgMjU2LCAKLSAgICAyMTg1OSwgMjU2LCAyMTg5MiwgMjU2LCAyMTg5MiwgMjU2LCAyMTkxMywgMjU2LCAyMTkzMSwgMjU2LCAyMTkzOSwgMjU2LCAKLSAgICAyMTk1NCwgMjU2LCAyMjI5NCwgMjU2LCAyMjAyMiwgMjU2LCAyMjI5NSwgMjU2LCAyMjA5NywgMjU2LCAyMjEzMiwgMjU2LCAKLSAgICAyMDk5OSwgMjU2LCAyMjc2NiwgMjU2LCAyMjQ3OCwgMjU2LCAyMjUxNiwgMjU2LCAyMjU0MSwgMjU2LCAyMjQxMSwgMjU2LCAKLSAgICAyMjU3OCwgMjU2LCAyMjU3NywgMjU2LCAyMjcwMCwgMjU2LCAxMzY0MjAsIDI1NiwgMjI3NzAsIDI1NiwgMjI3NzUsIDI1NiwgCi0gICAgMjI3OTAsIDI1NiwgMjI4MTAsIDI1NiwgMjI4MTgsIDI1NiwgMjI4ODIsIDI1NiwgMTM2ODcyLCAyNTYsIDEzNjkzOCwgMjU2LCAKLSAgICAyMzAyMCwgMjU2LCAyMzA2NywgMjU2LCAyMzA3OSwgMjU2LCAyMzAwMCwgMjU2LCAyMzE0MiwgMjU2LCAxNDA2MiwgMjU2LCAKLSAgICAxNDA3NiwgMjU2LCAyMzMwNCwgMjU2LCAyMzM1OCwgMjU2LCAyMzM1OCwgMjU2LCAxMzc2NzIsIDI1NiwgMjM0OTEsIDI1NiwgCi0gICAgMjM1MTIsIDI1NiwgMjM1MjcsIDI1NiwgMjM1MzksIDI1NiwgMTM4MDA4LCAyNTYsIDIzNTUxLCAyNTYsIDIzNTU4LCAyNTYsIAotICAgIDI0NDAzLCAyNTYsIDIzNTg2LCAyNTYsIDE0MjA5LCAyNTYsIDIzNjQ4LCAyNTYsIDIzNjYyLCAyNTYsIDIzNzQ0LCAyNTYsIAotICAgIDIzNjkzLCAyNTYsIDEzODcyNCwgMjU2LCAyMzg3NSwgMjU2LCAxMzg3MjYsIDI1NiwgMjM5MTgsIDI1NiwgMjM5MTUsIDI1NiwgCi0gICAgMjM5MzIsIDI1NiwgMjQwMzMsIDI1NiwgMjQwMzQsIDI1NiwgMTQzODMsIDI1NiwgMjQwNjEsIDI1NiwgMjQxMDQsIDI1NiwgCi0gICAgMjQxMjUsIDI1NiwgMjQxNjksIDI1NiwgMTQ0MzQsIDI1NiwgMTM5NjUxLCAyNTYsIDE0NDYwLCAyNTYsIDI0MjQwLCAyNTYsIAotICAgIDI0MjQzLCAyNTYsIDI0MjQ2LCAyNTYsIDI0MjY2LCAyNTYsIDE3Mjk0NiwgMjU2LCAyNDMxOCwgMjU2LCAxNDAwODEsIDI1NiwgCi0gICAgMTQwMDgxLCAyNTYsIDMzMjgxLCAyNTYsIDI0MzU0LCAyNTYsIDI0MzU0LCAyNTYsIDE0NTM1LCAyNTYsIDE0NDA1NiwgMjU2LCAKLSAgICAxNTYxMjIsIDI1NiwgMjQ0MTgsIDI1NiwgMjQ0MjcsIDI1NiwgMTQ1NjMsIDI1NiwgMjQ0NzQsIDI1NiwgMjQ1MjUsIDI1NiwgCi0gICAgMjQ1MzUsIDI1NiwgMjQ1NjksIDI1NiwgMjQ3MDUsIDI1NiwgMTQ2NTAsIDI1NiwgMTQ2MjAsIDI1NiwgMjQ3MjQsIDI1NiwgCi0gICAgMTQxMDEyLCAyNTYsIDI0Nzc1LCAyNTYsIDI0OTA0LCAyNTYsIDI0OTA4LCAyNTYsIDI0OTEwLCAyNTYsIDI0OTA4LCAyNTYsIAotICAgIDI0OTU0LCAyNTYsIDI0OTc0LCAyNTYsIDI1MDEwLCAyNTYsIDI0OTk2LCAyNTYsIDI1MDA3LCAyNTYsIDI1MDU0LCAyNTYsIAotICAgIDI1MDc0LCAyNTYsIDI1MDc4LCAyNTYsIDI1MTA0LCAyNTYsIDI1MTE1LCAyNTYsIDI1MTgxLCAyNTYsIDI1MjY1LCAyNTYsIAotICAgIDI1MzAwLCAyNTYsIDI1NDI0LCAyNTYsIDE0MjA5MiwgMjU2LCAyNTQwNSwgMjU2LCAyNTM0MCwgMjU2LCAyNTQ0OCwgMjU2LCAKLSAgICAyNTQ3NSwgMjU2LCAyNTU3MiwgMjU2LCAxNDIzMjEsIDI1NiwgMjU2MzQsIDI1NiwgMjU1NDEsIDI1NiwgMjU1MTMsIDI1NiwgCi0gICAgMTQ4OTQsIDI1NiwgMjU3MDUsIDI1NiwgMjU3MjYsIDI1NiwgMjU3NTcsIDI1NiwgMjU3MTksIDI1NiwgMTQ5NTYsIDI1NiwgCi0gICAgMjU5MzUsIDI1NiwgMjU5NjQsIDI1NiwgMTQzMzcwLCAyNTYsIDI2MDgzLCAyNTYsIDI2MzYwLCAyNTYsIDI2MTg1LCAyNTYsIAotICAgIDE1MTI5LCAyNTYsIDI2MjU3LCAyNTYsIDE1MTEyLCAyNTYsIDE1MDc2LCAyNTYsIDIwODgyLCAyNTYsIDIwODg1LCAyNTYsIAotICAgIDI2MzY4LCAyNTYsIDI2MjY4LCAyNTYsIDMyOTQxLCAyNTYsIDE3MzY5LCAyNTYsIDI2MzkxLCAyNTYsIDI2Mzk1LCAyNTYsIAotICAgIDI2NDAxLCAyNTYsIDI2NDYyLCAyNTYsIDI2NDUxLCAyNTYsIDE0NDMyMywgMjU2LCAxNTE3NywgMjU2LCAyNjYxOCwgMjU2LCAKLSAgICAyNjUwMSwgMjU2LCAyNjcwNiwgMjU2LCAyNjc1NywgMjU2LCAxNDQ0OTMsIDI1NiwgMjY3NjYsIDI1NiwgMjY2NTUsIDI1NiwgCi0gICAgMjY5MDAsIDI1NiwgMTUyNjEsIDI1NiwgMjY5NDYsIDI1NiwgMjcwNDMsIDI1NiwgMjcxMTQsIDI1NiwgMjczMDQsIDI1NiwgCi0gICAgMTQ1MDU5LCAyNTYsIDI3MzU1LCAyNTYsIDE1Mzg0LCAyNTYsIDI3NDI1LCAyNTYsIDE0NTU3NSwgMjU2LCAyNzQ3NiwgMjU2LCAKLSAgICAxNTQzOCwgMjU2LCAyNzUwNiwgMjU2LCAyNzU1MSwgMjU2LCAyNzU3OCwgMjU2LCAyNzU3OSwgMjU2LCAxNDYwNjEsIDI1NiwgCi0gICAgMTM4NTA3LCAyNTYsIDE0NjE3MCwgMjU2LCAyNzcyNiwgMjU2LCAxNDY2MjAsIDI1NiwgMjc4MzksIDI1NiwgMjc4NTMsIAotICAgIDI1NiwgMjc3NTEsIDI1NiwgMjc5MjYsIDI1NiwgMjc5NjYsIDI1NiwgMjgwMjMsIDI1NiwgMjc5NjksIDI1NiwgMjgwMDksIAotICAgIDI1NiwgMjgwMjQsIDI1NiwgMjgwMzcsIDI1NiwgMTQ2NzE4LCAyNTYsIDI3OTU2LCAyNTYsIDI4MjA3LCAyNTYsIDI4MjcwLCAKLSAgICAyNTYsIDE1NjY3LCAyNTYsIDI4MzYzLCAyNTYsIDI4MzU5LCAyNTYsIDE0NzE1MywgMjU2LCAyODE1MywgMjU2LCAyODUyNiwgCi0gICAgMjU2LCAxNDcyOTQsIDI1NiwgMTQ3MzQyLCAyNTYsIDI4NjE0LCAyNTYsIDI4NzI5LCAyNTYsIDI4NzAyLCAyNTYsIDI4Njk5LCAKLSAgICAyNTYsIDE1NzY2LCAyNTYsIDI4NzQ2LCAyNTYsIDI4Nzk3LCAyNTYsIDI4NzkxLCAyNTYsIDI4ODQ1LCAyNTYsIDEzMjM4OSwgCi0gICAgMjU2LCAyODk5NywgMjU2LCAxNDgwNjcsIDI1NiwgMjkwODQsIDI1NiwgMTQ4Mzk1LCAyNTYsIDI5MjI0LCAyNTYsIDI5MjM3LCAKLSAgICAyNTYsIDI5MjY0LCAyNTYsIDE0OTAwMCwgMjU2LCAyOTMxMiwgMjU2LCAyOTMzMywgMjU2LCAxNDkzMDEsIDI1NiwgCi0gICAgMTQ5NTI0LCAyNTYsIDI5NTYyLCAyNTYsIDI5NTc5LCAyNTYsIDE2MDQ0LCAyNTYsIDI5NjA1LCAyNTYsIDE2MDU2LCAyNTYsIAotICAgIDE2MDU2LCAyNTYsIDI5NzY3LCAyNTYsIDI5Nzg4LCAyNTYsIDI5ODA5LCAyNTYsIDI5ODI5LCAyNTYsIDI5ODk4LCAyNTYsIAotICAgIDE2MTU1LCAyNTYsIDI5OTg4LCAyNTYsIDE1MDU4MiwgMjU2LCAzMDAxNCwgMjU2LCAxNTA2NzQsIDI1NiwgMzAwNjQsIDI1NiwgCi0gICAgMTM5Njc5LCAyNTYsIDMwMjI0LCAyNTYsIDE1MTQ1NywgMjU2LCAxNTE0ODAsIDI1NiwgMTUxNjIwLCAyNTYsIDE2MzgwLCAKLSAgICAyNTYsIDE2MzkyLCAyNTYsIDMwNDUyLCAyNTYsIDE1MTc5NSwgMjU2LCAxNTE3OTQsIDI1NiwgMTUxODMzLCAyNTYsIAotICAgIDE1MTg1OSwgMjU2LCAzMDQ5NCwgMjU2LCAzMDQ5NSwgMjU2LCAzMDQ5NSwgMjU2LCAzMDUzOCwgMjU2LCAxNjQ0MSwgMjU2LCAKLSAgICAzMDYwMywgMjU2LCAxNjQ1NCwgMjU2LCAxNjUzNCwgMjU2LCAxNTI2MDUsIDI1NiwgMzA3OTgsIDI1NiwgMzA4NjAsIDI1NiwgCi0gICAgMzA5MjQsIDI1NiwgMTY2MTEsIDI1NiwgMTUzMTI2LCAyNTYsIDMxMDYyLCAyNTYsIDE1MzI0MiwgMjU2LCAxNTMyODUsIAotICAgIDI1NiwgMzExMTksIDI1NiwgMzEyMTEsIDI1NiwgMTY2ODcsIDI1NiwgMzEyOTYsIDI1NiwgMzEzMDYsIDI1NiwgMzEzMTEsIAotICAgIDI1NiwgMTUzOTgwLCAyNTYsIDE1NDI3OSwgMjU2LCAxNTQyNzksIDI1NiwgMzE0NzAsIDI1NiwgMTY4OTgsIDI1NiwgCi0gICAgMTU0NTM5LCAyNTYsIDMxNjg2LCAyNTYsIDMxNjg5LCAyNTYsIDE2OTM1LCAyNTYsIDE1NDc1MiwgMjU2LCAzMTk1NCwgMjU2LCAKLSAgICAxNzA1NiwgMjU2LCAzMTk3NiwgMjU2LCAzMTk3MSwgMjU2LCAzMjAwMCwgMjU2LCAxNTU1MjYsIDI1NiwgMzIwOTksIDI1NiwgCi0gICAgMTcxNTMsIDI1NiwgMzIxOTksIDI1NiwgMzIyNTgsIDI1NiwgMzIzMjUsIDI1NiwgMTcyMDQsIDI1NiwgMTU2MjAwLCAyNTYsIAotICAgIDE1NjIzMSwgMjU2LCAxNzI0MSwgMjU2LCAxNTYzNzcsIDI1NiwgMzI2MzQsIDI1NiwgMTU2NDc4LCAyNTYsIDMyNjYxLCAKLSAgICAyNTYsIDMyNzYyLCAyNTYsIDMyNzczLCAyNTYsIDE1Njg5MCwgMjU2LCAxNTY5NjMsIDI1NiwgMzI4NjQsIDI1NiwgCi0gICAgMTU3MDk2LCAyNTYsIDMyODgwLCAyNTYsIDE0NDIyMywgMjU2LCAxNzM2NSwgMjU2LCAzMjk0NiwgMjU2LCAzMzAyNywgMjU2LCAKLSAgICAxNzQxOSwgMjU2LCAzMzA4NiwgMjU2LCAyMzIyMSwgMjU2LCAxNTc2MDcsIDI1NiwgMTU3NjIxLCAyNTYsIDE0NDI3NSwgCi0gICAgMjU2LCAxNDQyODQsIDI1NiwgMzMyODEsIDI1NiwgMzMyODQsIDI1NiwgMzY3NjYsIDI1NiwgMTc1MTUsIDI1NiwgMzM0MjUsIAotICAgIDI1NiwgMzM0MTksIDI1NiwgMzM0MzcsIDI1NiwgMjExNzEsIDI1NiwgMzM0NTcsIDI1NiwgMzM0NTksIDI1NiwgMzM0NjksIAotICAgIDI1NiwgMzM1MTAsIDI1NiwgMTU4NTI0LCAyNTYsIDMzNTA5LCAyNTYsIDMzNTY1LCAyNTYsIDMzNjM1LCAyNTYsIDMzNzA5LCAKLSAgICAyNTYsIDMzNTcxLCAyNTYsIDMzNzI1LCAyNTYsIDMzNzY3LCAyNTYsIDMzODc5LCAyNTYsIDMzNjE5LCAyNTYsIDMzNzM4LCAKLSAgICAyNTYsIDMzNzQwLCAyNTYsIDMzNzU2LCAyNTYsIDE1ODc3NCwgMjU2LCAxNTkwODMsIDI1NiwgMTU4OTMzLCAyNTYsIAotICAgIDE3NzA3LCAyNTYsIDM0MDMzLCAyNTYsIDM0MDM1LCAyNTYsIDM0MDcwLCAyNTYsIDE2MDcxNCwgMjU2LCAzNDE0OCwgMjU2LCAKLSAgICAxNTk1MzIsIDI1NiwgMTc3NTcsIDI1NiwgMTc3NjEsIDI1NiwgMTU5NjY1LCAyNTYsIDE1OTk1NCwgMjU2LCAxNzc3MSwgCi0gICAgMjU2LCAzNDM4NCwgMjU2LCAzNDM5NiwgMjU2LCAzNDQwNywgMjU2LCAzNDQwOSwgMjU2LCAzNDQ3MywgMjU2LCAzNDQ0MCwgCi0gICAgMjU2LCAzNDU3NCwgMjU2LCAzNDUzMCwgMjU2LCAzNDY4MSwgMjU2LCAzNDYwMCwgMjU2LCAzNDY2NywgMjU2LCAzNDY5NCwgCi0gICAgMjU2LCAxNzg3OSwgMjU2LCAzNDc4NSwgMjU2LCAzNDgxNywgMjU2LCAxNzkxMywgMjU2LCAzNDkxMiwgMjU2LCAzNDkxNSwgCi0gICAgMjU2LCAxNjEzODMsIDI1NiwgMzUwMzEsIDI1NiwgMzUwMzgsIDI1NiwgMTc5NzMsIDI1NiwgMzUwNjYsIDI1NiwgMTM0OTksIAotICAgIDI1NiwgMTYxOTY2LCAyNTYsIDE2MjE1MCwgMjU2LCAxODExMCwgMjU2LCAxODExOSwgMjU2LCAzNTQ4OCwgMjU2LCAzNTU2NSwgCi0gICAgMjU2LCAzNTcyMiwgMjU2LCAzNTkyNSwgMjU2LCAxNjI5ODQsIDI1NiwgMzYwMTEsIDI1NiwgMzYwMzMsIDI1NiwgMzYxMjMsIAotICAgIDI1NiwgMzYyMTUsIDI1NiwgMTYzNjMxLCAyNTYsIDEzMzEyNCwgMjU2LCAzNjI5OSwgMjU2LCAzNjI4NCwgMjU2LCAzNjMzNiwgCi0gICAgMjU2LCAxMzMzNDIsIDI1NiwgMzY1NjQsIDI1NiwgMzY2NjQsIDI1NiwgMTY1MzMwLCAyNTYsIDE2NTM1NywgMjU2LCAKLSAgICAzNzAxMiwgMjU2LCAzNzEwNSwgMjU2LCAzNzEzNywgMjU2LCAxNjU2NzgsIDI1NiwgMzcxNDcsIDI1NiwgMzc0MzIsIDI1NiwgCi0gICAgMzc1OTEsIDI1NiwgMzc1OTIsIDI1NiwgMzc1MDAsIDI1NiwgMzc4ODEsIDI1NiwgMzc5MDksIDI1NiwgMTY2OTA2LCAyNTYsIAotICAgIDM4MjgzLCAyNTYsIDE4ODM3LCAyNTYsIDM4MzI3LCAyNTYsIDE2NzI4NywgMjU2LCAxODkxOCwgMjU2LCAzODU5NSwgMjU2LCAKLSAgICAyMzk4NiwgMjU2LCAzODY5MSwgMjU2LCAxNjgyNjEsIDI1NiwgMTY4NDc0LCAyNTYsIDE5MDU0LCAyNTYsIDE5MDYyLCAyNTYsIAotICAgIDM4ODgwLCAyNTYsIDE2ODk3MCwgMjU2LCAxOTEyMiwgMjU2LCAxNjkxMTAsIDI1NiwgMzg5MjMsIDI1NiwgMzg5MjMsIDI1NiwgCi0gICAgMzg5NTMsIDI1NiwgMTY5Mzk4LCAyNTYsIDM5MTM4LCAyNTYsIDE5MjUxLCAyNTYsIDM5MjA5LCAyNTYsIDM5MzM1LCAyNTYsIAotICAgIDM5MzYyLCAyNTYsIDM5NDIyLCAyNTYsIDE5NDA2LCAyNTYsIDE3MDgwMCwgMjU2LCAzOTY5OCwgMjU2LCA0MDAwMCwgMjU2LCAKLSAgICA0MDE4OSwgMjU2LCAxOTY2MiwgMjU2LCAxOTY5MywgMjU2LCA0MDI5NSwgMjU2LCAxNzIyMzgsIDI1NiwgMTk3MDQsIDI1NiwgCi0gICAgMTcyMjkzLCAyNTYsIDE3MjU1OCwgMjU2LCAxNzI2ODksIDI1NiwgNDA2MzUsIDI1NiwgMTk3OTgsIDI1NiwgNDA2OTcsIAotICAgIDI1NiwgNDA3MDIsIDI1NiwgNDA3MDksIDI1NiwgNDA3MTksIDI1NiwgNDA3MjYsIDI1NiwgNDA3NjMsIDI1NiwgMTczNTY4LCAKKyAgICA5ODIsIDI2MiwgOTEzLCAyNjIsIDkxNCwgMjYyLCA5MTUsIDI2MiwgOTE2LCAyNjIsIDkxNywgMjYyLCA5MTgsIDI2MiwgCisgICAgOTE5LCAyNjIsIDkyMCwgMjYyLCA5MjEsIDI2MiwgOTIyLCAyNjIsIDkyMywgMjYyLCA5MjQsIDI2MiwgOTI1LCAyNjIsIAorICAgIDkyNiwgMjYyLCA5MjcsIDI2MiwgOTI4LCAyNjIsIDkyOSwgMjYyLCAxMDEyLCAyNjIsIDkzMSwgMjYyLCA5MzIsIDI2MiwgCisgICAgOTMzLCAyNjIsIDkzNCwgMjYyLCA5MzUsIDI2MiwgOTM2LCAyNjIsIDkzNywgMjYyLCA4NzExLCAyNjIsIDk0NSwgMjYyLCAKKyAgICA5NDYsIDI2MiwgOTQ3LCAyNjIsIDk0OCwgMjYyLCA5NDksIDI2MiwgOTUwLCAyNjIsIDk1MSwgMjYyLCA5NTIsIDI2MiwgCisgICAgOTUzLCAyNjIsIDk1NCwgMjYyLCA5NTUsIDI2MiwgOTU2LCAyNjIsIDk1NywgMjYyLCA5NTgsIDI2MiwgOTU5LCAyNjIsIAorICAgIDk2MCwgMjYyLCA5NjEsIDI2MiwgOTYyLCAyNjIsIDk2MywgMjYyLCA5NjQsIDI2MiwgOTY1LCAyNjIsIDk2NiwgMjYyLCAKKyAgICA5NjcsIDI2MiwgOTY4LCAyNjIsIDk2OSwgMjYyLCA4NzA2LCAyNjIsIDEwMTMsIDI2MiwgOTc3LCAyNjIsIDEwMDgsIDI2MiwgCisgICAgOTgxLCAyNjIsIDEwMDksIDI2MiwgOTgyLCAyNjIsIDkxMywgMjYyLCA5MTQsIDI2MiwgOTE1LCAyNjIsIDkxNiwgMjYyLCAKKyAgICA5MTcsIDI2MiwgOTE4LCAyNjIsIDkxOSwgMjYyLCA5MjAsIDI2MiwgOTIxLCAyNjIsIDkyMiwgMjYyLCA5MjMsIDI2MiwgCisgICAgOTI0LCAyNjIsIDkyNSwgMjYyLCA5MjYsIDI2MiwgOTI3LCAyNjIsIDkyOCwgMjYyLCA5MjksIDI2MiwgMTAxMiwgMjYyLCAKKyAgICA5MzEsIDI2MiwgOTMyLCAyNjIsIDkzMywgMjYyLCA5MzQsIDI2MiwgOTM1LCAyNjIsIDkzNiwgMjYyLCA5MzcsIDI2MiwgCisgICAgODcxMSwgMjYyLCA5NDUsIDI2MiwgOTQ2LCAyNjIsIDk0NywgMjYyLCA5NDgsIDI2MiwgOTQ5LCAyNjIsIDk1MCwgMjYyLCAKKyAgICA5NTEsIDI2MiwgOTUyLCAyNjIsIDk1MywgMjYyLCA5NTQsIDI2MiwgOTU1LCAyNjIsIDk1NiwgMjYyLCA5NTcsIDI2MiwgCisgICAgOTU4LCAyNjIsIDk1OSwgMjYyLCA5NjAsIDI2MiwgOTYxLCAyNjIsIDk2MiwgMjYyLCA5NjMsIDI2MiwgOTY0LCAyNjIsIAorICAgIDk2NSwgMjYyLCA5NjYsIDI2MiwgOTY3LCAyNjIsIDk2OCwgMjYyLCA5NjksIDI2MiwgODcwNiwgMjYyLCAxMDEzLCAyNjIsIAorICAgIDk3NywgMjYyLCAxMDA4LCAyNjIsIDk4MSwgMjYyLCAxMDA5LCAyNjIsIDk4MiwgMjYyLCA5ODgsIDI2MiwgOTg5LCAyNjIsIAorICAgIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIAorICAgIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIAorICAgIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIAorICAgIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIDQ4LCAyNjIsIDQ5LCAyNjIsIAorICAgIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIDU2LCAyNjIsIDU3LCAyNjIsIAorICAgIDQ4LCAyNjIsIDQ5LCAyNjIsIDUwLCAyNjIsIDUxLCAyNjIsIDUyLCAyNjIsIDUzLCAyNjIsIDU0LCAyNjIsIDU1LCAyNjIsIAorICAgIDU2LCAyNjIsIDU3LCA1MTQsIDQ4LCA0NiwgNTE0LCA0OCwgNDQsIDUxNCwgNDksIDQ0LCA1MTQsIDUwLCA0NCwgNTE0LCA1MSwgCisgICAgNDQsIDUxNCwgNTIsIDQ0LCA1MTQsIDUzLCA0NCwgNTE0LCA1NCwgNDQsIDUxNCwgNTUsIDQ0LCA1MTQsIDU2LCA0NCwgNTE0LCAKKyAgICA1NywgNDQsIDc3MCwgNDAsIDY1LCA0MSwgNzcwLCA0MCwgNjYsIDQxLCA3NzAsIDQwLCA2NywgNDEsIDc3MCwgNDAsIDY4LCAKKyAgICA0MSwgNzcwLCA0MCwgNjksIDQxLCA3NzAsIDQwLCA3MCwgNDEsIDc3MCwgNDAsIDcxLCA0MSwgNzcwLCA0MCwgNzIsIDQxLCAKKyAgICA3NzAsIDQwLCA3MywgNDEsIDc3MCwgNDAsIDc0LCA0MSwgNzcwLCA0MCwgNzUsIDQxLCA3NzAsIDQwLCA3NiwgNDEsIDc3MCwgCisgICAgNDAsIDc3LCA0MSwgNzcwLCA0MCwgNzgsIDQxLCA3NzAsIDQwLCA3OSwgNDEsIDc3MCwgNDAsIDgwLCA0MSwgNzcwLCA0MCwgCisgICAgODEsIDQxLCA3NzAsIDQwLCA4MiwgNDEsIDc3MCwgNDAsIDgzLCA0MSwgNzcwLCA0MCwgODQsIDQxLCA3NzAsIDQwLCA4NSwgCisgICAgNDEsIDc3MCwgNDAsIDg2LCA0MSwgNzcwLCA0MCwgODcsIDQxLCA3NzAsIDQwLCA4OCwgNDEsIDc3MCwgNDAsIDg5LCA0MSwgCisgICAgNzcwLCA0MCwgOTAsIDQxLCA3NzAsIDEyMzA4LCA4MywgMTIzMDksIDI2MywgNjcsIDI2MywgODIsIDUxOSwgNjcsIDY4LCAKKyAgICA1MTksIDg3LCA5MCwgMjY2LCA2NSwgMjY2LCA2NiwgMjY2LCA2NywgMjY2LCA2OCwgMjY2LCA2OSwgMjY2LCA3MCwgMjY2LCAKKyAgICA3MSwgMjY2LCA3MiwgMjY2LCA3MywgMjY2LCA3NCwgMjY2LCA3NSwgMjY2LCA3NiwgMjY2LCA3NywgMjY2LCA3OCwgMjY2LCAKKyAgICA3OSwgMjY2LCA4MCwgMjY2LCA4MSwgMjY2LCA4MiwgMjY2LCA4MywgMjY2LCA4NCwgMjY2LCA4NSwgMjY2LCA4NiwgMjY2LCAKKyAgICA4NywgMjY2LCA4OCwgMjY2LCA4OSwgMjY2LCA5MCwgNTIyLCA3MiwgODYsIDUyMiwgNzcsIDg2LCA1MjIsIDgzLCA2OCwgCisgICAgNTIyLCA4MywgODMsIDc3OCwgODAsIDgwLCA4NiwgNTIyLCA4NywgNjcsIDUyMiwgNjgsIDc0LCA1MjIsIDEyNDExLCAKKyAgICAxMjM2MywgNTIyLCAxMjQ2NywgMTI0NjcsIDI2NiwgMTI0NjksIDI2NiwgMjUxNjMsIDI2NiwgMjMzODMsIDI2NiwgMjE0NTIsIAorICAgIDI2NiwgMTI0ODcsIDI2NiwgMjAxMDgsIDI2NiwgMjI4MTAsIDI2NiwgMzUyOTksIDI2NiwgMjI4MjUsIDI2NiwgMjAxMzIsIAorICAgIDI2NiwgMjYxNDQsIDI2NiwgMjg5NjEsIDI2NiwgMjYwMDksIDI2NiwgMjEwNjksIDI2NiwgMjQ0NjAsIDI2NiwgMjA4NzcsIAorICAgIDI2NiwgMjYwMzIsIDI2NiwgMjEwMjEsIDI2NiwgMzIwNjYsIDI2NiwgMjk5ODMsIDI2NiwgMzYwMDksIDI2NiwgMjI3NjgsIAorICAgIDI2NiwgMjE1NjEsIDI2NiwgMjg0MzYsIDI2NiwgMjUyMzcsIDI2NiwgMjU0MjksIDI2NiwgMTk5NjgsIDI2NiwgMTk5NzcsIAorICAgIDI2NiwgMzY5MzgsIDI2NiwgMjQwMzgsIDI2NiwgMjAwMTMsIDI2NiwgMjE0OTEsIDI2NiwgMjUzNTEsIDI2NiwgMzYyMDgsIAorICAgIDI2NiwgMjUxNzEsIDI2NiwgMzExMDUsIDI2NiwgMzEzNTQsIDI2NiwgMjE1MTIsIDI2NiwgMjgyODgsIDI2NiwgMjYzNzcsIAorICAgIDI2NiwgMjYzNzYsIDI2NiwgMzAwMDMsIDI2NiwgMjExMDYsIDI2NiwgMjE5NDIsIDc3MCwgMTIzMDgsIDI2NDEyLCAxMjMwOSwgCisgICAgNzcwLCAxMjMwOCwgMTk5NzcsIDEyMzA5LCA3NzAsIDEyMzA4LCAyMDEwOCwgMTIzMDksIDc3MCwgMTIzMDgsIDIzNDMzLCAKKyAgICAxMjMwOSwgNzcwLCAxMjMwOCwgMjg4NTcsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTE3MSwgMTIzMDksIDc3MCwgMTIzMDgsIAorICAgIDMwNDIzLCAxMjMwOSwgNzcwLCAxMjMwOCwgMjEyMTMsIDEyMzA5LCA3NzAsIDEyMzA4LCAyNTk0MywgMTIzMDksIDI2MywgCisgICAgMjQ0NzEsIDI2MywgMjE0ODcsIDI1NiwgMjAwMjksIDI1NiwgMjAwMjQsIDI1NiwgMjAwMzMsIDI1NiwgMTMxMzYyLCAyNTYsIAorICAgIDIwMzIwLCAyNTYsIDIwMzk4LCAyNTYsIDIwNDExLCAyNTYsIDIwNDgyLCAyNTYsIDIwNjAyLCAyNTYsIDIwNjMzLCAyNTYsIAorICAgIDIwNzExLCAyNTYsIDIwNjg3LCAyNTYsIDEzNDcwLCAyNTYsIDEzMjY2NiwgMjU2LCAyMDgxMywgMjU2LCAyMDgyMCwgMjU2LCAKKyAgICAyMDgzNiwgMjU2LCAyMDg1NSwgMjU2LCAxMzIzODAsIDI1NiwgMTM0OTcsIDI1NiwgMjA4MzksIDI1NiwgMjA4NzcsIDI1NiwgCisgICAgMTMyNDI3LCAyNTYsIDIwODg3LCAyNTYsIDIwOTAwLCAyNTYsIDIwMTcyLCAyNTYsIDIwOTA4LCAyNTYsIDIwOTE3LCAyNTYsIAorICAgIDE2ODQxNSwgMjU2LCAyMDk4MSwgMjU2LCAyMDk5NSwgMjU2LCAxMzUzNSwgMjU2LCAyMTA1MSwgMjU2LCAyMTA2MiwgMjU2LCAKKyAgICAyMTEwNiwgMjU2LCAyMTExMSwgMjU2LCAxMzU4OSwgMjU2LCAyMTE5MSwgMjU2LCAyMTE5MywgMjU2LCAyMTIyMCwgMjU2LCAKKyAgICAyMTI0MiwgMjU2LCAyMTI1MywgMjU2LCAyMTI1NCwgMjU2LCAyMTI3MSwgMjU2LCAyMTMyMSwgMjU2LCAyMTMyOSwgMjU2LCAKKyAgICAyMTMzOCwgMjU2LCAyMTM2MywgMjU2LCAyMTM3MywgMjU2LCAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAyMTM3NSwgMjU2LCAKKyAgICAxMzM2NzYsIDI1NiwgMjg3ODQsIDI1NiwgMjE0NTAsIDI1NiwgMjE0NzEsIDI1NiwgMTMzOTg3LCAyNTYsIDIxNDgzLCAyNTYsIAorICAgIDIxNDg5LCAyNTYsIDIxNTEwLCAyNTYsIDIxNjYyLCAyNTYsIDIxNTYwLCAyNTYsIDIxNTc2LCAyNTYsIDIxNjA4LCAyNTYsIAorICAgIDIxNjY2LCAyNTYsIDIxNzUwLCAyNTYsIDIxNzc2LCAyNTYsIDIxODQzLCAyNTYsIDIxODU5LCAyNTYsIDIxODkyLCAyNTYsIAorICAgIDIxODkyLCAyNTYsIDIxOTEzLCAyNTYsIDIxOTMxLCAyNTYsIDIxOTM5LCAyNTYsIDIxOTU0LCAyNTYsIDIyMjk0LCAyNTYsIAorICAgIDIyMDIyLCAyNTYsIDIyMjk1LCAyNTYsIDIyMDk3LCAyNTYsIDIyMTMyLCAyNTYsIDIwOTk5LCAyNTYsIDIyNzY2LCAyNTYsIAorICAgIDIyNDc4LCAyNTYsIDIyNTE2LCAyNTYsIDIyNTQxLCAyNTYsIDIyNDExLCAyNTYsIDIyNTc4LCAyNTYsIDIyNTc3LCAyNTYsIAorICAgIDIyNzAwLCAyNTYsIDEzNjQyMCwgMjU2LCAyMjc3MCwgMjU2LCAyMjc3NSwgMjU2LCAyMjc5MCwgMjU2LCAyMjgxMCwgMjU2LCAKKyAgICAyMjgxOCwgMjU2LCAyMjg4MiwgMjU2LCAxMzY4NzIsIDI1NiwgMTM2OTM4LCAyNTYsIDIzMDIwLCAyNTYsIDIzMDY3LCAyNTYsIAorICAgIDIzMDc5LCAyNTYsIDIzMDAwLCAyNTYsIDIzMTQyLCAyNTYsIDE0MDYyLCAyNTYsIDE0MDc2LCAyNTYsIDIzMzA0LCAyNTYsIAorICAgIDIzMzU4LCAyNTYsIDIzMzU4LCAyNTYsIDEzNzY3MiwgMjU2LCAyMzQ5MSwgMjU2LCAyMzUxMiwgMjU2LCAyMzUyNywgMjU2LCAKKyAgICAyMzUzOSwgMjU2LCAxMzgwMDgsIDI1NiwgMjM1NTEsIDI1NiwgMjM1NTgsIDI1NiwgMjQ0MDMsIDI1NiwgMjM1ODYsIDI1NiwgCisgICAgMTQyMDksIDI1NiwgMjM2NDgsIDI1NiwgMjM2NjIsIDI1NiwgMjM3NDQsIDI1NiwgMjM2OTMsIDI1NiwgMTM4NzI0LCAyNTYsIAorICAgIDIzODc1LCAyNTYsIDEzODcyNiwgMjU2LCAyMzkxOCwgMjU2LCAyMzkxNSwgMjU2LCAyMzkzMiwgMjU2LCAyNDAzMywgMjU2LCAKKyAgICAyNDAzNCwgMjU2LCAxNDM4MywgMjU2LCAyNDA2MSwgMjU2LCAyNDEwNCwgMjU2LCAyNDEyNSwgMjU2LCAyNDE2OSwgMjU2LCAKKyAgICAxNDQzNCwgMjU2LCAxMzk2NTEsIDI1NiwgMTQ0NjAsIDI1NiwgMjQyNDAsIDI1NiwgMjQyNDMsIDI1NiwgMjQyNDYsIDI1NiwgCisgICAgMjQyNjYsIDI1NiwgMTcyOTQ2LCAyNTYsIDI0MzE4LCAyNTYsIDE0MDA4MSwgMjU2LCAxNDAwODEsIDI1NiwgMzMyODEsIAorICAgIDI1NiwgMjQzNTQsIDI1NiwgMjQzNTQsIDI1NiwgMTQ1MzUsIDI1NiwgMTQ0MDU2LCAyNTYsIDE1NjEyMiwgMjU2LCAyNDQxOCwgCisgICAgMjU2LCAyNDQyNywgMjU2LCAxNDU2MywgMjU2LCAyNDQ3NCwgMjU2LCAyNDUyNSwgMjU2LCAyNDUzNSwgMjU2LCAyNDU2OSwgCisgICAgMjU2LCAyNDcwNSwgMjU2LCAxNDY1MCwgMjU2LCAxNDYyMCwgMjU2LCAyNDcyNCwgMjU2LCAxNDEwMTIsIDI1NiwgMjQ3NzUsIAorICAgIDI1NiwgMjQ5MDQsIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5MTAsIDI1NiwgMjQ5MDgsIDI1NiwgMjQ5NTQsIDI1NiwgMjQ5NzQsIAorICAgIDI1NiwgMjUwMTAsIDI1NiwgMjQ5OTYsIDI1NiwgMjUwMDcsIDI1NiwgMjUwNTQsIDI1NiwgMjUwNzQsIDI1NiwgMjUwNzgsIAorICAgIDI1NiwgMjUxMDQsIDI1NiwgMjUxMTUsIDI1NiwgMjUxODEsIDI1NiwgMjUyNjUsIDI1NiwgMjUzMDAsIDI1NiwgMjU0MjQsIAorICAgIDI1NiwgMTQyMDkyLCAyNTYsIDI1NDA1LCAyNTYsIDI1MzQwLCAyNTYsIDI1NDQ4LCAyNTYsIDI1NDc1LCAyNTYsIDI1NTcyLCAKKyAgICAyNTYsIDE0MjMyMSwgMjU2LCAyNTYzNCwgMjU2LCAyNTU0MSwgMjU2LCAyNTUxMywgMjU2LCAxNDg5NCwgMjU2LCAyNTcwNSwgCisgICAgMjU2LCAyNTcyNiwgMjU2LCAyNTc1NywgMjU2LCAyNTcxOSwgMjU2LCAxNDk1NiwgMjU2LCAyNTkzNSwgMjU2LCAyNTk2NCwgCisgICAgMjU2LCAxNDMzNzAsIDI1NiwgMjYwODMsIDI1NiwgMjYzNjAsIDI1NiwgMjYxODUsIDI1NiwgMTUxMjksIDI1NiwgMjYyNTcsIAorICAgIDI1NiwgMTUxMTIsIDI1NiwgMTUwNzYsIDI1NiwgMjA4ODIsIDI1NiwgMjA4ODUsIDI1NiwgMjYzNjgsIDI1NiwgMjYyNjgsIAorICAgIDI1NiwgMzI5NDEsIDI1NiwgMTczNjksIDI1NiwgMjYzOTEsIDI1NiwgMjYzOTUsIDI1NiwgMjY0MDEsIDI1NiwgMjY0NjIsIAorICAgIDI1NiwgMjY0NTEsIDI1NiwgMTQ0MzIzLCAyNTYsIDE1MTc3LCAyNTYsIDI2NjE4LCAyNTYsIDI2NTAxLCAyNTYsIDI2NzA2LCAKKyAgICAyNTYsIDI2NzU3LCAyNTYsIDE0NDQ5MywgMjU2LCAyNjc2NiwgMjU2LCAyNjY1NSwgMjU2LCAyNjkwMCwgMjU2LCAxNTI2MSwgCisgICAgMjU2LCAyNjk0NiwgMjU2LCAyNzA0MywgMjU2LCAyNzExNCwgMjU2LCAyNzMwNCwgMjU2LCAxNDUwNTksIDI1NiwgMjczNTUsIAorICAgIDI1NiwgMTUzODQsIDI1NiwgMjc0MjUsIDI1NiwgMTQ1NTc1LCAyNTYsIDI3NDc2LCAyNTYsIDE1NDM4LCAyNTYsIDI3NTA2LCAKKyAgICAyNTYsIDI3NTUxLCAyNTYsIDI3NTc4LCAyNTYsIDI3NTc5LCAyNTYsIDE0NjA2MSwgMjU2LCAxMzg1MDcsIDI1NiwgCisgICAgMTQ2MTcwLCAyNTYsIDI3NzI2LCAyNTYsIDE0NjYyMCwgMjU2LCAyNzgzOSwgMjU2LCAyNzg1MywgMjU2LCAyNzc1MSwgMjU2LCAKKyAgICAyNzkyNiwgMjU2LCAyNzk2NiwgMjU2LCAyODAyMywgMjU2LCAyNzk2OSwgMjU2LCAyODAwOSwgMjU2LCAyODAyNCwgMjU2LCAKKyAgICAyODAzNywgMjU2LCAxNDY3MTgsIDI1NiwgMjc5NTYsIDI1NiwgMjgyMDcsIDI1NiwgMjgyNzAsIDI1NiwgMTU2NjcsIDI1NiwgCisgICAgMjgzNjMsIDI1NiwgMjgzNTksIDI1NiwgMTQ3MTUzLCAyNTYsIDI4MTUzLCAyNTYsIDI4NTI2LCAyNTYsIDE0NzI5NCwgMjU2LCAKKyAgICAxNDczNDIsIDI1NiwgMjg2MTQsIDI1NiwgMjg3MjksIDI1NiwgMjg3MDIsIDI1NiwgMjg2OTksIDI1NiwgMTU3NjYsIDI1NiwgCisgICAgMjg3NDYsIDI1NiwgMjg3OTcsIDI1NiwgMjg3OTEsIDI1NiwgMjg4NDUsIDI1NiwgMTMyMzg5LCAyNTYsIDI4OTk3LCAyNTYsIAorICAgIDE0ODA2NywgMjU2LCAyOTA4NCwgMjU2LCAxNDgzOTUsIDI1NiwgMjkyMjQsIDI1NiwgMjkyMzcsIDI1NiwgMjkyNjQsIDI1NiwgCisgICAgMTQ5MDAwLCAyNTYsIDI5MzEyLCAyNTYsIDI5MzMzLCAyNTYsIDE0OTMwMSwgMjU2LCAxNDk1MjQsIDI1NiwgMjk1NjIsIAorICAgIDI1NiwgMjk1NzksIDI1NiwgMTYwNDQsIDI1NiwgMjk2MDUsIDI1NiwgMTYwNTYsIDI1NiwgMTYwNTYsIDI1NiwgMjk3NjcsIAorICAgIDI1NiwgMjk3ODgsIDI1NiwgMjk4MDksIDI1NiwgMjk4MjksIDI1NiwgMjk4OTgsIDI1NiwgMTYxNTUsIDI1NiwgMjk5ODgsIAorICAgIDI1NiwgMTUwNTgyLCAyNTYsIDMwMDE0LCAyNTYsIDE1MDY3NCwgMjU2LCAzMDA2NCwgMjU2LCAxMzk2NzksIDI1NiwgCisgICAgMzAyMjQsIDI1NiwgMTUxNDU3LCAyNTYsIDE1MTQ4MCwgMjU2LCAxNTE2MjAsIDI1NiwgMTYzODAsIDI1NiwgMTYzOTIsIAorICAgIDI1NiwgMzA0NTIsIDI1NiwgMTUxNzk1LCAyNTYsIDE1MTc5NCwgMjU2LCAxNTE4MzMsIDI1NiwgMTUxODU5LCAyNTYsIAorICAgIDMwNDk0LCAyNTYsIDMwNDk1LCAyNTYsIDMwNDk1LCAyNTYsIDMwNTM4LCAyNTYsIDE2NDQxLCAyNTYsIDMwNjAzLCAyNTYsIAorICAgIDE2NDU0LCAyNTYsIDE2NTM0LCAyNTYsIDE1MjYwNSwgMjU2LCAzMDc5OCwgMjU2LCAzMDg2MCwgMjU2LCAzMDkyNCwgMjU2LCAKKyAgICAxNjYxMSwgMjU2LCAxNTMxMjYsIDI1NiwgMzEwNjIsIDI1NiwgMTUzMjQyLCAyNTYsIDE1MzI4NSwgMjU2LCAzMTExOSwgCisgICAgMjU2LCAzMTIxMSwgMjU2LCAxNjY4NywgMjU2LCAzMTI5NiwgMjU2LCAzMTMwNiwgMjU2LCAzMTMxMSwgMjU2LCAxNTM5ODAsIAorICAgIDI1NiwgMTU0Mjc5LCAyNTYsIDE1NDI3OSwgMjU2LCAzMTQ3MCwgMjU2LCAxNjg5OCwgMjU2LCAxNTQ1MzksIDI1NiwgCisgICAgMzE2ODYsIDI1NiwgMzE2ODksIDI1NiwgMTY5MzUsIDI1NiwgMTU0NzUyLCAyNTYsIDMxOTU0LCAyNTYsIDE3MDU2LCAyNTYsIAorICAgIDMxOTc2LCAyNTYsIDMxOTcxLCAyNTYsIDMyMDAwLCAyNTYsIDE1NTUyNiwgMjU2LCAzMjA5OSwgMjU2LCAxNzE1MywgMjU2LCAKKyAgICAzMjE5OSwgMjU2LCAzMjI1OCwgMjU2LCAzMjMyNSwgMjU2LCAxNzIwNCwgMjU2LCAxNTYyMDAsIDI1NiwgMTU2MjMxLCAyNTYsIAorICAgIDE3MjQxLCAyNTYsIDE1NjM3NywgMjU2LCAzMjYzNCwgMjU2LCAxNTY0NzgsIDI1NiwgMzI2NjEsIDI1NiwgMzI3NjIsIDI1NiwgCisgICAgMzI3NzMsIDI1NiwgMTU2ODkwLCAyNTYsIDE1Njk2MywgMjU2LCAzMjg2NCwgMjU2LCAxNTcwOTYsIDI1NiwgMzI4ODAsIAorICAgIDI1NiwgMTQ0MjIzLCAyNTYsIDE3MzY1LCAyNTYsIDMyOTQ2LCAyNTYsIDMzMDI3LCAyNTYsIDE3NDE5LCAyNTYsIDMzMDg2LCAKKyAgICAyNTYsIDIzMjIxLCAyNTYsIDE1NzYwNywgMjU2LCAxNTc2MjEsIDI1NiwgMTQ0Mjc1LCAyNTYsIDE0NDI4NCwgMjU2LCAKKyAgICAzMzI4MSwgMjU2LCAzMzI4NCwgMjU2LCAzNjc2NiwgMjU2LCAxNzUxNSwgMjU2LCAzMzQyNSwgMjU2LCAzMzQxOSwgMjU2LCAKKyAgICAzMzQzNywgMjU2LCAyMTE3MSwgMjU2LCAzMzQ1NywgMjU2LCAzMzQ1OSwgMjU2LCAzMzQ2OSwgMjU2LCAzMzUxMCwgMjU2LCAKKyAgICAxNTg1MjQsIDI1NiwgMzM1MDksIDI1NiwgMzM1NjUsIDI1NiwgMzM2MzUsIDI1NiwgMzM3MDksIDI1NiwgMzM1NzEsIDI1NiwgCisgICAgMzM3MjUsIDI1NiwgMzM3NjcsIDI1NiwgMzM4NzksIDI1NiwgMzM2MTksIDI1NiwgMzM3MzgsIDI1NiwgMzM3NDAsIDI1NiwgCisgICAgMzM3NTYsIDI1NiwgMTU4Nzc0LCAyNTYsIDE1OTA4MywgMjU2LCAxNTg5MzMsIDI1NiwgMTc3MDcsIDI1NiwgMzQwMzMsIAorICAgIDI1NiwgMzQwMzUsIDI1NiwgMzQwNzAsIDI1NiwgMTYwNzE0LCAyNTYsIDM0MTQ4LCAyNTYsIDE1OTUzMiwgMjU2LCAxNzc1NywgCisgICAgMjU2LCAxNzc2MSwgMjU2LCAxNTk2NjUsIDI1NiwgMTU5OTU0LCAyNTYsIDE3NzcxLCAyNTYsIDM0Mzg0LCAyNTYsIDM0Mzk2LCAKKyAgICAyNTYsIDM0NDA3LCAyNTYsIDM0NDA5LCAyNTYsIDM0NDczLCAyNTYsIDM0NDQwLCAyNTYsIDM0NTc0LCAyNTYsIDM0NTMwLCAKKyAgICAyNTYsIDM0NjgxLCAyNTYsIDM0NjAwLCAyNTYsIDM0NjY3LCAyNTYsIDM0Njk0LCAyNTYsIDE3ODc5LCAyNTYsIDM0Nzg1LCAKKyAgICAyNTYsIDM0ODE3LCAyNTYsIDE3OTEzLCAyNTYsIDM0OTEyLCAyNTYsIDM0OTE1LCAyNTYsIDE2MTM4MywgMjU2LCAzNTAzMSwgCisgICAgMjU2LCAzNTAzOCwgMjU2LCAxNzk3MywgMjU2LCAzNTA2NiwgMjU2LCAxMzQ5OSwgMjU2LCAxNjE5NjYsIDI1NiwgMTYyMTUwLCAKKyAgICAyNTYsIDE4MTEwLCAyNTYsIDE4MTE5LCAyNTYsIDM1NDg4LCAyNTYsIDM1NTY1LCAyNTYsIDM1NzIyLCAyNTYsIDM1OTI1LCAKKyAgICAyNTYsIDE2Mjk4NCwgMjU2LCAzNjAxMSwgMjU2LCAzNjAzMywgMjU2LCAzNjEyMywgMjU2LCAzNjIxNSwgMjU2LCAxNjM2MzEsIAorICAgIDI1NiwgMTMzMTI0LCAyNTYsIDM2Mjk5LCAyNTYsIDM2Mjg0LCAyNTYsIDM2MzM2LCAyNTYsIDEzMzM0MiwgMjU2LCAzNjU2NCwgCisgICAgMjU2LCAzNjY2NCwgMjU2LCAxNjUzMzAsIDI1NiwgMTY1MzU3LCAyNTYsIDM3MDEyLCAyNTYsIDM3MTA1LCAyNTYsIDM3MTM3LCAKKyAgICAyNTYsIDE2NTY3OCwgMjU2LCAzNzE0NywgMjU2LCAzNzQzMiwgMjU2LCAzNzU5MSwgMjU2LCAzNzU5MiwgMjU2LCAzNzUwMCwgCisgICAgMjU2LCAzNzg4MSwgMjU2LCAzNzkwOSwgMjU2LCAxNjY5MDYsIDI1NiwgMzgyODMsIDI1NiwgMTg4MzcsIDI1NiwgMzgzMjcsIAorICAgIDI1NiwgMTY3Mjg3LCAyNTYsIDE4OTE4LCAyNTYsIDM4NTk1LCAyNTYsIDIzOTg2LCAyNTYsIDM4NjkxLCAyNTYsIDE2ODI2MSwgCisgICAgMjU2LCAxNjg0NzQsIDI1NiwgMTkwNTQsIDI1NiwgMTkwNjIsIDI1NiwgMzg4ODAsIDI1NiwgMTY4OTcwLCAyNTYsIDE5MTIyLCAKKyAgICAyNTYsIDE2OTExMCwgMjU2LCAzODkyMywgMjU2LCAzODkyMywgMjU2LCAzODk1MywgMjU2LCAxNjkzOTgsIDI1NiwgMzkxMzgsIAorICAgIDI1NiwgMTkyNTEsIDI1NiwgMzkyMDksIDI1NiwgMzkzMzUsIDI1NiwgMzkzNjIsIDI1NiwgMzk0MjIsIDI1NiwgMTk0MDYsIAorICAgIDI1NiwgMTcwODAwLCAyNTYsIDM5Njk4LCAyNTYsIDQwMDAwLCAyNTYsIDQwMTg5LCAyNTYsIDE5NjYyLCAyNTYsIDE5NjkzLCAKKyAgICAyNTYsIDQwMjk1LCAyNTYsIDE3MjIzOCwgMjU2LCAxOTcwNCwgMjU2LCAxNzIyOTMsIDI1NiwgMTcyNTU4LCAyNTYsIAorICAgIDE3MjY4OSwgMjU2LCA0MDYzNSwgMjU2LCAxOTc5OCwgMjU2LCA0MDY5NywgMjU2LCA0MDcwMiwgMjU2LCA0MDcwOSwgMjU2LCAKKyAgICA0MDcxOSwgMjU2LCA0MDcyNiwgMjU2LCA0MDc2MywgMjU2LCAxNzM1NjgsIAogfTsKIAogLyogaW5kZXggdGFibGVzIGZvciB0aGUgZGVjb21wb3NpdGlvbiBkYXRhICovCkBAIC0zMzgyLDcgKzM2NDMsNyBAQAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIAotICAgIDQxLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA0MSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNDIsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIApAQCAtMzM5MCw4ICszNjUxLDkgQEAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA0MiwgNywgNywgNDMsIDQ0LCAKLSAgICA0NSwgNDYsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDQzLCA3LCA3LCA0NCwgNDUsIAorICAgIDQ2LCA0NywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNDgsIDQ5LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKQEAgLTM0MDIsOCArMzY2NCw3IEBACiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNDcsIDQ4LCA0OSwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNTAsIDUxLCA1MiwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCkBAIC0zODE3LDQxICs0MDc4LDQ0IEBACiAgICAgMCwgMCwgMzEyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyOSwgMzEzMSwgCiAgICAgMCwgMCwgMzEzMywgMzEzNSwgMzEzNywgMzEzOSwgMzE0MSwgMzE0MywgMzE0NSwgMzE0NywgMzE0OSwgMzE1MSwgMzE1MywgCiAgICAgMzE1NSwgMzE1NywgMzE1OSwgMzE2MSwgMzE2MywgMzE2NSwgMzE2NywgMzE2OSwgMzE3MSwgMzE3MywgMzE3NSwgMzE3NywgCi0gICAgMzE3OSwgMzE4MSwgMzE4MywgMzE4NSwgMCwgMzE4NywgMzE4OSwgMzE5MSwgMzE5MywgMzE5NSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzE3OSwgMzE4MSwgMzE4MywgMzE4NSwgMCwgMzE4NywgMzE4OSwgMzE5MSwgMzE5MywgMzE5NSwgMzE5NywgMzE5OSwgCisgICAgMzIwMSwgMzIwMywgMzIwNSwgMzIwNywgMzIwOSwgMzIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzIxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxNiwgMzIyMCwgMzIyNCwgCisgICAgMzIyNiwgMCwgMzIyOSwgMzIzMywgMzIzNywgMCwgMzIzOSwgMzI0MiwgMzI0NCwgMzI0NiwgMzI0OCwgMzI1MCwgMzI1MiwgCisgICAgMzI1NCwgMzI1NiwgMzI1OCwgMzI2MCwgMCwgMzI2MiwgMzI2NCwgMCwgMCwgMzI2NywgMzI2OSwgMzI3MSwgMzI3MywgCisgICAgMzI3NSwgMCwgMCwgMzI3NywgMzI4MCwgMzI4NCwgMCwgMzI4NywgMCwgMzI4OSwgMCwgMzI5MSwgMCwgMzI5MywgMzI5NSwgCisgICAgMzI5NywgMzI5OSwgMCwgMzMwMSwgMzMwMywgMzMwNSwgMCwgMzMwNywgMzMwOSwgMzMxMSwgMzMxMywgMzMxNSwgMzMxNywgCisgICAgMzMxOSwgMCwgMzMyMSwgMzMyNSwgMzMyNywgMzMyOSwgMzMzMSwgMzMzMywgMCwgMCwgMCwgMCwgMzMzNSwgMzMzNywgCisgICAgMzMzOSwgMzM0MSwgMzM0MywgMCwgMCwgMCwgMCwgMCwgMCwgMzM0NSwgMzM0OSwgMzM1MywgMzM1OCwgMzM2MiwgMzM2NiwgCisgICAgMzM3MCwgMzM3NCwgMzM3OCwgMzM4MiwgMzM4NiwgMzM5MCwgMzM5NCwgMzM5OCwgMzQwMiwgMzQwNiwgMzQwOSwgMzQxMSwgCisgICAgMzQxNCwgMzQxOCwgMzQyMSwgMzQyMywgMzQyNiwgMzQzMCwgMzQzNSwgMzQzOCwgMzQ0MCwgMzQ0MywgMzQ0NywgMzQ0OSwgCisgICAgMzQ1MSwgMzQ1MywgMzQ1NSwgMzQ1NywgMzQ2MCwgMzQ2NCwgMzQ2NywgMzQ2OSwgMzQ3MiwgMzQ3NiwgMzQ4MSwgMzQ4NCwgCisgICAgMzQ4NiwgMzQ4OSwgMzQ5MywgMzQ5NSwgMzQ5NywgMzQ5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUwMSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUwNSwgMzUwOCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxNCwgCisgICAgMzUxNywgMzUyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIwMCwgMzIwNCwgMzIwOCwgMzIxMCwgMCwgMzIxMywgMzIxNywgMzIyMSwgMCwgCi0gICAgMzIyMywgMzIyNiwgMzIyOCwgMzIzMCwgMzIzMiwgMzIzNCwgMzIzNiwgMzIzOCwgMzI0MCwgMzI0MiwgMzI0NCwgMCwgCi0gICAgMzI0NiwgMzI0OCwgMCwgMCwgMzI1MSwgMzI1MywgMzI1NSwgMzI1NywgMzI1OSwgMCwgMCwgMzI2MSwgMzI2NCwgMzI2OCwgCi0gICAgMCwgMzI3MSwgMCwgMzI3MywgMCwgMzI3NSwgMCwgMzI3NywgMzI3OSwgMzI4MSwgMzI4MywgMCwgMzI4NSwgMzI4NywgCi0gICAgMzI4OSwgMCwgMzI5MSwgMzI5MywgMzI5NSwgMzI5NywgMzI5OSwgMzMwMSwgMzMwMywgMCwgMzMwNSwgMzMwOSwgMzMxMSwgCi0gICAgMzMxMywgMzMxNSwgMzMxNywgMCwgMCwgMCwgMCwgMzMxOSwgMzMyMSwgMzMyMywgMzMyNSwgMzMyNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzMyOSwgMzMzMywgMzMzNywgMzM0MSwgMzM0NSwgMzM0OSwgMzM1MywgMzM1NywgMzM2MSwgCi0gICAgMzM2NSwgMzM2OSwgMzM3MywgMzM3NywgMzM4MCwgMzM4MiwgMzM4NSwgMzM4OSwgMzM5MiwgMzM5NCwgMzM5NywgMzQwMSwgCi0gICAgMzQwNiwgMzQwOSwgMzQxMSwgMzQxNCwgMzQxOCwgMzQyMCwgMzQyMiwgMzQyNCwgMzQyNiwgMzQyOCwgMzQzMSwgMzQzNSwgCi0gICAgMzQzOCwgMzQ0MCwgMzQ0MywgMzQ0NywgMzQ1MiwgMzQ1NSwgMzQ1NywgMzQ2MCwgMzQ2NCwgMzQ2NiwgMzQ2OCwgMzQ3MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUyMywgMCwgMCwgMCwgMCwgMzUyNiwgMCwgMCwgMzUyOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzMiwgMCwgMzUzNSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMzUzOCwgMzU0MSwgMCwgMzU0NSwgMzU0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzU1MiwgMCwgMCwgMzU1NSwgMCwgMCwgMzU1OCwgMCwgMzU2MSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU2NCwgMCwgMzU2NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU3MCwgMzU3MywgMzU3NiwgMzU3OSwgMzU4MiwgMCwgMCwgMzU4NSwgMzU4OCwgCisgICAgMCwgMCwgMzU5MSwgMzU5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU5NywgMzYwMCwgMCwgMCwgMzYwMywgMzYwNiwgMCwgMCwgCisgICAgMzYwOSwgMzYxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxNSwgMzYxOCwgMzYyMSwgMzYyNCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzQ3MiwgMzQ3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzQ3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4MSwgMzQ4NCwgMzQ4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyNywgCisgICAgMzYzMCwgMzYzMywgMzYzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMzYzOSwgMzY0MiwgMzY0NSwgMzY0OCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ5MCwgMCwgMCwgMCwgMCwgCi0gICAgMzQ5MywgMCwgMCwgMzQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzQ5OSwgMCwgMzUwMiwgMCwgMCwgMCwgMCwgMCwgMzUwNSwgMzUwOCwgMCwgMzUxMiwgMzUxNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxOSwgMCwgMCwgMzUyMiwgMCwgMCwgCi0gICAgMzUyNSwgMCwgMzUyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzUzMSwgMCwgMzUzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUzNywgMzU0MCwgMzU0MywgCi0gICAgMzU0NiwgMzU0OSwgMCwgMCwgMzU1MiwgMzU1NSwgMCwgMCwgMzU1OCwgMzU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzU2NCwgCi0gICAgMzU2NywgMCwgMCwgMzU3MCwgMzU3MywgMCwgMCwgMzU3NiwgMzU3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzU4MiwgMzU4NSwgMzU4OCwgMzU5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY1MSwgMzY1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzU5NCwgMzU5NywgMzYwMCwgMzYwMywgMCwgMCwgMCwgMCwgMCwgMCwgMzYwNiwgCi0gICAgMzYwOSwgMzYxMiwgMzYxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYxOCwgMzYyMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0zODYyLDM4ICs0MTI2LDM3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY1NSwgMzY1NywgMzY1OSwgMzY2MSwgMzY2MywgMzY2NSwgMzY2NywgMzY2OSwgCisgICAgMzY3MSwgMzY3MywgMzY3NiwgMzY3OSwgMzY4MiwgMzY4NSwgMzY4OCwgMzY5MSwgMzY5NCwgMzY5NywgMzcwMCwgMzcwMywgCisgICAgMzcwNiwgMzcxMCwgMzcxNCwgMzcxOCwgMzcyMiwgMzcyNiwgMzczMCwgMzczNCwgMzczOCwgMzc0MiwgMzc0NywgMzc1MiwgCisgICAgMzc1NywgMzc2MiwgMzc2NywgMzc3MiwgMzc3NywgMzc4MiwgMzc4NywgMzc5MiwgMzc5NywgMzgwMCwgMzgwMywgMzgwNiwgCisgICAgMzgwOSwgMzgxMiwgMzgxNSwgMzgxOCwgMzgyMSwgMzgyNCwgMzgyOCwgMzgzMiwgMzgzNiwgMzg0MCwgMzg0NCwgMzg0OCwgCisgICAgMzg1MiwgMzg1NiwgMzg2MCwgMzg2NCwgMzg2OCwgMzg3MiwgMzg3NiwgMzg4MCwgMzg4NCwgMzg4OCwgMzg5MiwgMzg5NiwgCisgICAgMzkwMCwgMzkwNCwgMzkwOCwgMzkxMiwgMzkxNiwgMzkyMCwgMzkyNCwgMzkyOCwgMzkzMiwgMzkzNiwgMzk0MCwgMzk0NCwgCisgICAgMzk0OCwgMzk1MiwgMzk1NiwgMzk2MCwgMzk2NCwgMzk2OCwgMzk3MiwgMzk3NCwgMzk3NiwgMzk3OCwgMzk4MCwgMzk4MiwgCisgICAgMzk4NCwgMzk4NiwgMzk4OCwgMzk5MCwgMzk5MiwgMzk5NCwgMzk5NiwgMzk5OCwgNDAwMCwgNDAwMiwgNDAwNCwgNDAwNiwgCisgICAgNDAwOCwgNDAxMCwgNDAxMiwgNDAxNCwgNDAxNiwgNDAxOCwgNDAyMCwgNDAyMiwgNDAyNCwgNDAyNiwgNDAyOCwgNDAzMCwgCisgICAgNDAzMiwgNDAzNCwgNDAzNiwgNDAzOCwgNDA0MCwgNDA0MiwgNDA0NCwgNDA0NiwgNDA0OCwgNDA1MCwgNDA1MiwgNDA1NCwgCisgICAgNDA1NiwgNDA1OCwgNDA2MCwgNDA2MiwgNDA2NCwgNDA2NiwgNDA2OCwgNDA3MCwgNDA3MiwgNDA3NCwgNDA3NiwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzYyMiwgMzYyNCwgMzYyNiwgCi0gICAgMzYyOCwgMzYzMCwgMzYzMiwgMzYzNCwgMzYzNiwgMzYzOCwgMzY0MCwgMzY0MywgMzY0NiwgMzY0OSwgMzY1MiwgMzY1NSwgCi0gICAgMzY1OCwgMzY2MSwgMzY2NCwgMzY2NywgMzY3MCwgMzY3MywgMzY3NywgMzY4MSwgMzY4NSwgMzY4OSwgMzY5MywgMzY5NywgCi0gICAgMzcwMSwgMzcwNSwgMzcwOSwgMzcxNCwgMzcxOSwgMzcyNCwgMzcyOSwgMzczNCwgMzczOSwgMzc0NCwgMzc0OSwgMzc1NCwgCi0gICAgMzc1OSwgMzc2NCwgMzc2NywgMzc3MCwgMzc3MywgMzc3NiwgMzc3OSwgMzc4MiwgMzc4NSwgMzc4OCwgMzc5MSwgMzc5NSwgCi0gICAgMzc5OSwgMzgwMywgMzgwNywgMzgxMSwgMzgxNSwgMzgxOSwgMzgyMywgMzgyNywgMzgzMSwgMzgzNSwgMzgzOSwgMzg0MywgCi0gICAgMzg0NywgMzg1MSwgMzg1NSwgMzg1OSwgMzg2MywgMzg2NywgMzg3MSwgMzg3NSwgMzg3OSwgMzg4MywgMzg4NywgMzg5MSwgCi0gICAgMzg5NSwgMzg5OSwgMzkwMywgMzkwNywgMzkxMSwgMzkxNSwgMzkxOSwgMzkyMywgMzkyNywgMzkzMSwgMzkzNSwgMzkzOSwgCi0gICAgMzk0MSwgMzk0MywgMzk0NSwgMzk0NywgMzk0OSwgMzk1MSwgMzk1MywgMzk1NSwgMzk1NywgMzk1OSwgMzk2MSwgMzk2MywgCi0gICAgMzk2NSwgMzk2NywgMzk2OSwgMzk3MSwgMzk3MywgMzk3NSwgMzk3NywgMzk3OSwgMzk4MSwgMzk4MywgMzk4NSwgMzk4NywgCi0gICAgMzk4OSwgMzk5MSwgMzk5MywgMzk5NSwgMzk5NywgMzk5OSwgNDAwMSwgNDAwMywgNDAwNSwgNDAwNywgNDAwOSwgNDAxMSwgCi0gICAgNDAxMywgNDAxNSwgNDAxNywgNDAxOSwgNDAyMSwgNDAyMywgNDAyNSwgNDAyNywgNDAyOSwgNDAzMSwgNDAzMywgNDAzNSwgCi0gICAgNDAzNywgNDAzOSwgNDA0MSwgNDA0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA0NSwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA4MywgNDA4NywgNDA5MCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDA1MCwgNDA1NCwgNDA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDA5NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA5NywgNDA5OSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDA2NCwgNDA2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC0zOTAyLDggKzQxNjUsOCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQxMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtMzkxNCw0MjIgKzQxNzcsNDYxIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwMywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDA3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEwNywgCisgICAgNDEwOSwgNDExMSwgNDExMywgNDExNSwgNDExNywgNDExOSwgNDEyMSwgNDEyMywgNDEyNSwgNDEyNywgNDEyOSwgNDEzMSwgCisgICAgNDEzMywgNDEzNSwgNDEzNywgNDEzOSwgNDE0MSwgNDE0MywgNDE0NSwgNDE0NywgNDE0OSwgNDE1MSwgNDE1MywgNDE1NSwgCisgICAgNDE1NywgNDE1OSwgNDE2MSwgNDE2MywgNDE2NSwgNDE2NywgNDE2OSwgNDE3MSwgNDE3MywgNDE3NSwgNDE3NywgNDE3OSwgCisgICAgNDE4MSwgNDE4MywgNDE4NSwgNDE4NywgNDE4OSwgNDE5MSwgNDE5MywgNDE5NSwgNDE5NywgNDE5OSwgNDIwMSwgNDIwMywgCisgICAgNDIwNSwgNDIwNywgNDIwOSwgNDIxMSwgNDIxMywgNDIxNSwgNDIxNywgNDIxOSwgNDIyMSwgNDIyMywgNDIyNSwgNDIyNywgCisgICAgNDIyOSwgNDIzMSwgNDIzMywgNDIzNSwgNDIzNywgNDIzOSwgNDI0MSwgNDI0MywgNDI0NSwgNDI0NywgNDI0OSwgNDI1MSwgCisgICAgNDI1MywgNDI1NSwgNDI1NywgNDI1OSwgNDI2MSwgNDI2MywgNDI2NSwgNDI2NywgNDI2OSwgNDI3MSwgNDI3MywgNDI3NSwgCisgICAgNDI3NywgNDI3OSwgNDI4MSwgNDI4MywgNDI4NSwgNDI4NywgNDI4OSwgNDI5MSwgNDI5MywgNDI5NSwgNDI5NywgNDI5OSwgCisgICAgNDMwMSwgNDMwMywgNDMwNSwgNDMwNywgNDMwOSwgNDMxMSwgNDMxMywgNDMxNSwgNDMxNywgNDMxOSwgNDMyMSwgNDMyMywgCisgICAgNDMyNSwgNDMyNywgNDMyOSwgNDMzMSwgNDMzMywgNDMzNSwgNDMzNywgNDMzOSwgNDM0MSwgNDM0MywgNDM0NSwgNDM0NywgCisgICAgNDM0OSwgNDM1MSwgNDM1MywgNDM1NSwgNDM1NywgNDM1OSwgNDM2MSwgNDM2MywgNDM2NSwgNDM2NywgNDM2OSwgNDM3MSwgCisgICAgNDM3MywgNDM3NSwgNDM3NywgNDM3OSwgNDM4MSwgNDM4MywgNDM4NSwgNDM4NywgNDM4OSwgNDM5MSwgNDM5MywgNDM5NSwgCisgICAgNDM5NywgNDM5OSwgNDQwMSwgNDQwMywgNDQwNSwgNDQwNywgNDQwOSwgNDQxMSwgNDQxMywgNDQxNSwgNDQxNywgNDQxOSwgCisgICAgNDQyMSwgNDQyMywgNDQyNSwgNDQyNywgNDQyOSwgNDQzMSwgNDQzMywgNDQzNSwgNDQzNywgNDQzOSwgNDQ0MSwgNDQ0MywgCisgICAgNDQ0NSwgNDQ0NywgNDQ0OSwgNDQ1MSwgNDQ1MywgNDQ1NSwgNDQ1NywgNDQ1OSwgNDQ2MSwgNDQ2MywgNDQ2NSwgNDQ2NywgCisgICAgNDQ2OSwgNDQ3MSwgNDQ3MywgNDQ3NSwgNDQ3NywgNDQ3OSwgNDQ4MSwgNDQ4MywgNDQ4NSwgNDQ4NywgNDQ4OSwgNDQ5MSwgCisgICAgNDQ5MywgNDQ5NSwgNDQ5NywgNDQ5OSwgNDUwMSwgNDUwMywgNDUwNSwgNDUwNywgNDUwOSwgNDUxMSwgNDUxMywgNDUxNSwgCisgICAgNDUxNywgNDUxOSwgNDUyMSwgNDUyMywgNDUyNSwgNDUyNywgNDUyOSwgNDUzMSwgNDUzMywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDA3NCwgNDA3NiwgNDA3OCwgNDA4MCwgNDA4MiwgNDA4NCwgNDA4NiwgNDA4OCwgCi0gICAgNDA5MCwgNDA5MiwgNDA5NCwgNDA5NiwgNDA5OCwgNDEwMCwgNDEwMiwgNDEwNCwgNDEwNiwgNDEwOCwgNDExMCwgNDExMiwgCi0gICAgNDExNCwgNDExNiwgNDExOCwgNDEyMCwgNDEyMiwgNDEyNCwgNDEyNiwgNDEyOCwgNDEzMCwgNDEzMiwgNDEzNCwgNDEzNiwgCi0gICAgNDEzOCwgNDE0MCwgNDE0MiwgNDE0NCwgNDE0NiwgNDE0OCwgNDE1MCwgNDE1MiwgNDE1NCwgNDE1NiwgNDE1OCwgNDE2MCwgCi0gICAgNDE2MiwgNDE2NCwgNDE2NiwgNDE2OCwgNDE3MCwgNDE3MiwgNDE3NCwgNDE3NiwgNDE3OCwgNDE4MCwgNDE4MiwgNDE4NCwgCi0gICAgNDE4NiwgNDE4OCwgNDE5MCwgNDE5MiwgNDE5NCwgNDE5NiwgNDE5OCwgNDIwMCwgNDIwMiwgNDIwNCwgNDIwNiwgNDIwOCwgCi0gICAgNDIxMCwgNDIxMiwgNDIxNCwgNDIxNiwgNDIxOCwgNDIyMCwgNDIyMiwgNDIyNCwgNDIyNiwgNDIyOCwgNDIzMCwgNDIzMiwgCi0gICAgNDIzNCwgNDIzNiwgNDIzOCwgNDI0MCwgNDI0MiwgNDI0NCwgNDI0NiwgNDI0OCwgNDI1MCwgNDI1MiwgNDI1NCwgNDI1NiwgCi0gICAgNDI1OCwgNDI2MCwgNDI2MiwgNDI2NCwgNDI2NiwgNDI2OCwgNDI3MCwgNDI3MiwgNDI3NCwgNDI3NiwgNDI3OCwgNDI4MCwgCi0gICAgNDI4MiwgNDI4NCwgNDI4NiwgNDI4OCwgNDI5MCwgNDI5MiwgNDI5NCwgNDI5NiwgNDI5OCwgNDMwMCwgNDMwMiwgNDMwNCwgCi0gICAgNDMwNiwgNDMwOCwgNDMxMCwgNDMxMiwgNDMxNCwgNDMxNiwgNDMxOCwgNDMyMCwgNDMyMiwgNDMyNCwgNDMyNiwgNDMyOCwgCi0gICAgNDMzMCwgNDMzMiwgNDMzNCwgNDMzNiwgNDMzOCwgNDM0MCwgNDM0MiwgNDM0NCwgNDM0NiwgNDM0OCwgNDM1MCwgNDM1MiwgCi0gICAgNDM1NCwgNDM1NiwgNDM1OCwgNDM2MCwgNDM2MiwgNDM2NCwgNDM2NiwgNDM2OCwgNDM3MCwgNDM3MiwgNDM3NCwgNDM3NiwgCi0gICAgNDM3OCwgNDM4MCwgNDM4MiwgNDM4NCwgNDM4NiwgNDM4OCwgNDM5MCwgNDM5MiwgNDM5NCwgNDM5NiwgNDM5OCwgNDQwMCwgCi0gICAgNDQwMiwgNDQwNCwgNDQwNiwgNDQwOCwgNDQxMCwgNDQxMiwgNDQxNCwgNDQxNiwgNDQxOCwgNDQyMCwgNDQyMiwgNDQyNCwgCi0gICAgNDQyNiwgNDQyOCwgNDQzMCwgNDQzMiwgNDQzNCwgNDQzNiwgNDQzOCwgNDQ0MCwgNDQ0MiwgNDQ0NCwgNDQ0NiwgNDQ0OCwgCi0gICAgNDQ1MCwgNDQ1MiwgNDQ1NCwgNDQ1NiwgNDQ1OCwgNDQ2MCwgNDQ2MiwgNDQ2NCwgNDQ2NiwgNDQ2OCwgNDQ3MCwgNDQ3MiwgCi0gICAgNDQ3NCwgNDQ3NiwgNDQ3OCwgNDQ4MCwgNDQ4MiwgNDQ4NCwgNDQ4NiwgNDQ4OCwgNDQ5MCwgNDQ5MiwgNDQ5NCwgNDQ5NiwgCi0gICAgNDQ5OCwgNDUwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUwMiwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUzNywgMCwgNDUzOSwgCisgICAgNDU0MSwgNDU0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU0NSwgMCwgCisgICAgNDU0OCwgMCwgNDU1MSwgMCwgNDU1NCwgMCwgNDU1NywgMCwgNDU2MCwgMCwgNDU2MywgMCwgNDU2NiwgMCwgNDU2OSwgMCwgCisgICAgNDU3MiwgMCwgNDU3NSwgMCwgNDU3OCwgMCwgMCwgNDU4MSwgMCwgNDU4NCwgMCwgNDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDU5MCwgNDU5MywgMCwgNDU5NiwgNDU5OSwgMCwgNDYwMiwgNDYwNSwgMCwgNDYwOCwgNDYxMSwgMCwgNDYxNCwgNDYxNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYyMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDYyMywgNDYyNiwgMCwgNDYyOSwgNDYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDYzNSwgMCwgNDYzOCwgMCwgNDY0MSwgMCwgNDY0NCwgMCwgNDY0NywgMCwgNDY1MCwgMCwgNDY1MywgMCwgCisgICAgNDY1NiwgMCwgNDY1OSwgMCwgNDY2MiwgMCwgNDY2NSwgMCwgNDY2OCwgMCwgMCwgNDY3MSwgMCwgNDY3NCwgMCwgNDY3NywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDY4MCwgNDY4MywgMCwgNDY4NiwgNDY4OSwgMCwgNDY5MiwgNDY5NSwgMCwgNDY5OCwgCisgICAgNDcwMSwgMCwgNDcwNCwgNDcwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDcxMCwgMCwgMCwgNDcxMywgNDcxNiwgNDcxOSwgNDcyMiwgMCwgMCwgMCwgNDcyNSwgNDcyOCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDUwNCwgMCwgNDUwNiwgNDUwOCwgNDUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUxMiwgMCwgNDUxNSwgMCwgNDUxOCwgMCwgNDUyMSwgMCwgNDUyNCwgMCwgNDUyNywgCi0gICAgMCwgNDUzMCwgMCwgNDUzMywgMCwgNDUzNiwgMCwgNDUzOSwgMCwgNDU0MiwgMCwgNDU0NSwgMCwgMCwgNDU0OCwgMCwgCi0gICAgNDU1MSwgMCwgNDU1NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU1NywgNDU2MCwgMCwgNDU2MywgNDU2NiwgMCwgNDU2OSwgCi0gICAgNDU3MiwgMCwgNDU3NSwgNDU3OCwgMCwgNDU4MSwgNDU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgNDU5MCwgNDU5MywgMCwgCi0gICAgNDU5NiwgNDU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYwMiwgMCwgNDYwNSwgMCwgNDYwOCwgCi0gICAgMCwgNDYxMSwgMCwgNDYxNCwgMCwgNDYxNywgMCwgNDYyMCwgMCwgNDYyMywgMCwgNDYyNiwgMCwgNDYyOSwgMCwgNDYzMiwgCi0gICAgMCwgNDYzNSwgMCwgMCwgNDYzOCwgMCwgNDY0MSwgMCwgNDY0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY0NywgNDY1MCwgMCwgCi0gICAgNDY1MywgNDY1NiwgMCwgNDY1OSwgNDY2MiwgMCwgNDY2NSwgNDY2OCwgMCwgNDY3MSwgNDY3NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY3NywgMCwgMCwgNDY4MCwgCi0gICAgNDY4MywgNDY4NiwgNDY4OSwgMCwgMCwgMCwgNDY5MiwgNDY5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY5OCwgNDcwMCwgNDcwMiwgNDcwNCwgNDcwNiwgCi0gICAgNDcwOCwgNDcxMCwgNDcxMiwgNDcxNCwgNDcxNiwgNDcxOCwgNDcyMCwgNDcyMiwgNDcyNCwgNDcyNiwgNDcyOCwgNDczMCwgCi0gICAgNDczMiwgNDczNCwgNDczNiwgNDczOCwgNDc0MCwgNDc0MiwgNDc0NCwgNDc0NiwgNDc0OCwgNDc1MCwgNDc1MiwgNDc1NCwgCi0gICAgNDc1NiwgNDc1OCwgNDc2MCwgNDc2MiwgNDc2NCwgNDc2NiwgNDc2OCwgNDc3MCwgNDc3MiwgNDc3NCwgNDc3NiwgNDc3OCwgCi0gICAgNDc4MCwgNDc4MiwgNDc4NCwgNDc4NiwgNDc4OCwgNDc5MCwgNDc5MiwgNDc5NCwgNDc5NiwgNDc5OCwgNDgwMCwgNDgwMiwgCi0gICAgNDgwNCwgNDgwNiwgNDgwOCwgNDgxMCwgNDgxMiwgNDgxNCwgNDgxNiwgNDgxOCwgNDgyMCwgNDgyMiwgNDgyNCwgNDgyNiwgCi0gICAgNDgyOCwgNDgzMCwgNDgzMiwgNDgzNCwgNDgzNiwgNDgzOCwgNDg0MCwgNDg0MiwgNDg0NCwgNDg0NiwgNDg0OCwgNDg1MCwgCi0gICAgNDg1MiwgNDg1NCwgNDg1NiwgNDg1OCwgNDg2MCwgNDg2MiwgNDg2NCwgNDg2NiwgNDg2OCwgNDg3MCwgNDg3MiwgNDg3NCwgCi0gICAgNDg3NiwgNDg3OCwgNDg4MCwgNDg4MiwgNDg4NCwgMCwgMCwgMCwgNDg4NiwgNDg4OCwgNDg5MCwgNDg5MiwgNDg5NCwgCi0gICAgNDg5NiwgNDg5OCwgNDkwMCwgNDkwMiwgNDkwNCwgNDkwNiwgNDkwOCwgNDkxMCwgNDkxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNDczMSwgNDczMywgNDczNSwgNDczNywgNDczOSwgNDc0MSwgNDc0MywgNDc0NSwgNDc0NywgNDc0OSwgNDc1MSwgCisgICAgNDc1MywgNDc1NSwgNDc1NywgNDc1OSwgNDc2MSwgNDc2MywgNDc2NSwgNDc2NywgNDc2OSwgNDc3MSwgNDc3MywgNDc3NSwgCisgICAgNDc3NywgNDc3OSwgNDc4MSwgNDc4MywgNDc4NSwgNDc4NywgNDc4OSwgNDc5MSwgNDc5MywgNDc5NSwgNDc5NywgNDc5OSwgCisgICAgNDgwMSwgNDgwMywgNDgwNSwgNDgwNywgNDgwOSwgNDgxMSwgNDgxMywgNDgxNSwgNDgxNywgNDgxOSwgNDgyMSwgNDgyMywgCisgICAgNDgyNSwgNDgyNywgNDgyOSwgNDgzMSwgNDgzMywgNDgzNSwgNDgzNywgNDgzOSwgNDg0MSwgNDg0MywgNDg0NSwgNDg0NywgCisgICAgNDg0OSwgNDg1MSwgNDg1MywgNDg1NSwgNDg1NywgNDg1OSwgNDg2MSwgNDg2MywgNDg2NSwgNDg2NywgNDg2OSwgNDg3MSwgCisgICAgNDg3MywgNDg3NSwgNDg3NywgNDg3OSwgNDg4MSwgNDg4MywgNDg4NSwgNDg4NywgNDg4OSwgNDg5MSwgNDg5MywgNDg5NSwgCisgICAgNDg5NywgNDg5OSwgNDkwMSwgNDkwMywgNDkwNSwgNDkwNywgNDkwOSwgNDkxMSwgNDkxMywgNDkxNSwgNDkxNywgMCwgMCwgCisgICAgMCwgNDkxOSwgNDkyMSwgNDkyMywgNDkyNSwgNDkyNywgNDkyOSwgNDkzMSwgNDkzMywgNDkzNSwgNDkzNywgNDkzOSwgCisgICAgNDk0MSwgNDk0MywgNDk0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkxNCwgNDkxOCwgNDkyMiwgCi0gICAgNDkyNiwgNDkzMCwgNDkzNCwgNDkzOCwgNDk0MiwgNDk0NiwgNDk1MCwgNDk1NCwgNDk1OCwgNDk2MiwgNDk2NiwgNDk3MCwgCi0gICAgNDk3NSwgNDk4MCwgNDk4NSwgNDk5MCwgNDk5NSwgNTAwMCwgNTAwNSwgNTAxMCwgNTAxNSwgNTAyMCwgNTAyNSwgNTAzMCwgCi0gICAgNTAzNSwgNTA0MCwgNTA0NSwgNTA1MywgMCwgNTA2MCwgNTA2NCwgNTA2OCwgNTA3MiwgNTA3NiwgNTA4MCwgNTA4NCwgCi0gICAgNTA4OCwgNTA5MiwgNTA5NiwgNTEwMCwgNTEwNCwgNTEwOCwgNTExMiwgNTExNiwgNTEyMCwgNTEyNCwgNTEyOCwgNTEzMiwgCi0gICAgNTEzNiwgNTE0MCwgNTE0NCwgNTE0OCwgNTE1MiwgNTE1NiwgNTE2MCwgNTE2NCwgNTE2OCwgNTE3MiwgNTE3NiwgNTE4MCwgCi0gICAgNTE4NCwgNTE4OCwgNTE5MiwgNTE5NiwgNTIwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIwNCwgCi0gICAgNTIwOCwgNTIxMSwgNTIxNCwgNTIxNywgNTIyMCwgNTIyMywgNTIyNiwgNTIyOSwgNTIzMiwgNTIzNSwgNTIzOCwgNTI0MSwgCi0gICAgNTI0NCwgNTI0NywgNTI1MCwgNTI1MywgNTI1NSwgNTI1NywgNTI1OSwgNTI2MSwgNTI2MywgNTI2NSwgNTI2NywgNTI2OSwgCi0gICAgNTI3MSwgNTI3MywgNTI3NSwgNTI3NywgNTI3OSwgNTI4MSwgNTI4NCwgNTI4NywgNTI5MCwgNTI5MywgNTI5NiwgNTI5OSwgCi0gICAgNTMwMiwgNTMwNSwgNTMwOCwgNTMxMSwgNTMxNCwgNTMxNywgNTMyMCwgNTMyMywgNTMyOSwgNTMzNCwgMCwgNTMzNywgCi0gICAgNTMzOSwgNTM0MSwgNTM0MywgNTM0NSwgNTM0NywgNTM0OSwgNTM1MSwgNTM1MywgNTM1NSwgNTM1NywgNTM1OSwgNTM2MSwgCi0gICAgNTM2MywgNTM2NSwgNTM2NywgNTM2OSwgNTM3MSwgNTM3MywgNTM3NSwgNTM3NywgNTM3OSwgNTM4MSwgNTM4MywgNTM4NSwgCi0gICAgNTM4NywgNTM4OSwgNTM5MSwgNTM5MywgNTM5NSwgNTM5NywgNTM5OSwgNTQwMSwgNTQwMywgNTQwNSwgNTQwNywgNTQwOSwgCi0gICAgNTQxMSwgNTQxMywgNTQxNSwgNTQxNywgNTQxOSwgNTQyMSwgNTQyMywgNTQyNSwgNTQyNywgNTQyOSwgNTQzMSwgNTQzMywgCi0gICAgNTQzNSwgNTQzOCwgNTQ0MSwgNTQ0NCwgNTQ0NywgNTQ1MCwgNTQ1MywgNTQ1NiwgNTQ1OSwgNTQ2MiwgNTQ2NSwgNTQ2OCwgCi0gICAgNTQ3MSwgNTQ3NCwgNTQ3NywgNTQ4MCwgNTQ4MywgNTQ4NiwgNTQ4OSwgNTQ5MiwgNTQ5NSwgNTQ5OCwgNTUwMSwgNTUwNCwgCi0gICAgNTUwNywgNTUxMSwgNTUxNSwgNTUxOSwgNTUyMiwgNTUyNiwgNTUyOSwgNTUzMywgNTUzNSwgNTUzNywgNTUzOSwgNTU0MSwgCi0gICAgNTU0MywgNTU0NSwgNTU0NywgNTU0OSwgNTU1MSwgNTU1MywgNTU1NSwgNTU1NywgNTU1OSwgNTU2MSwgNTU2MywgNTU2NSwgCi0gICAgNTU2NywgNTU2OSwgNTU3MSwgNTU3MywgNTU3NSwgNTU3NywgNTU3OSwgNTU4MSwgNTU4MywgNTU4NSwgNTU4NywgNTU4OSwgCi0gICAgNTU5MSwgNTU5MywgNTU5NSwgNTU5NywgNTU5OSwgNTYwMSwgNTYwMywgNTYwNSwgNTYwNywgNTYwOSwgNTYxMSwgNTYxMywgCi0gICAgNTYxNSwgNTYxNywgNTYxOSwgNTYyMSwgNTYyMywgNTYyNSwgMCwgNTYyNywgNTYzMiwgNTYzNywgNTY0MiwgNTY0NiwgCi0gICAgNTY1MSwgNTY1NSwgNTY1OSwgNTY2NSwgNTY3MCwgNTY3NCwgNTY3OCwgNTY4MiwgNTY4NywgNTY5MiwgNTY5NiwgNTcwMCwgCi0gICAgNTcwMywgNTcwNywgNTcxMiwgNTcxNywgNTcyMCwgNTcyNiwgNTczMywgNTczOSwgNTc0MywgNTc0OSwgNTc1NSwgNTc2MCwgCi0gICAgNTc2NCwgNTc2OCwgNTc3MiwgNTc3NywgNTc4MywgNTc4OCwgNTc5MiwgNTc5NiwgNTgwMCwgNTgwMywgNTgwNiwgNTgwOSwgCi0gICAgNTgxMiwgNTgxNiwgNTgyMCwgNTgyNiwgNTgzMCwgNTgzNSwgNTg0MSwgNTg0NSwgNTg0OCwgNTg1MSwgNTg1NywgNTg2MiwgCi0gICAgNTg2OCwgNTg3MiwgNTg3OCwgNTg4MSwgNTg4NSwgNTg4OSwgNTg5MywgNTg5NywgNTkwMSwgNTkwNiwgNTkxMCwgNTkxMywgCi0gICAgNTkxNywgNTkyMSwgNTkyNSwgNTkzMCwgNTkzNCwgNTkzOCwgNTk0MiwgNTk0OCwgNTk1MywgNTk1NiwgNTk2MiwgNTk2NSwgCi0gICAgNTk3MCwgNTk3NSwgNTk3OSwgNTk4MywgNTk4NywgNTk5MiwgNTk5NSwgNTk5OSwgNjAwNCwgNjAwNywgNjAxMywgNjAxNywgCi0gICAgNjAyMCwgNjAyMywgNjAyNiwgNjAyOSwgNjAzMiwgNjAzNSwgNjAzOCwgNjA0MSwgNjA0NCwgNjA0NywgNjA1MSwgNjA1NSwgCi0gICAgNjA1OSwgNjA2MywgNjA2NywgNjA3MSwgNjA3NSwgNjA3OSwgNjA4MywgNjA4NywgNjA5MSwgNjA5NSwgNjA5OSwgNjEwMywgCi0gICAgNjEwNywgNjExMSwgNjExNCwgNjExNywgNjEyMSwgNjEyNCwgNjEyNywgNjEzMCwgNjEzNCwgNjEzOCwgNjE0MSwgNjE0NCwgCi0gICAgNjE0NywgNjE1MCwgNjE1MywgNjE1OCwgNjE2MSwgNjE2NCwgNjE2NywgNjE3MCwgNjE3MywgNjE3NiwgNjE3OSwgNjE4MiwgCi0gICAgNjE4NiwgNjE5MSwgNjE5NCwgNjE5NywgNjIwMCwgNjIwMywgNjIwNiwgNjIwOSwgNjIxMiwgNjIxNiwgNjIyMCwgNjIyNCwgCi0gICAgNjIyOCwgNjIzMSwgNjIzNCwgNjIzNywgNjI0MCwgNjI0MywgNjI0NiwgNjI0OSwgNjI1MiwgNjI1NSwgNjI1OCwgNjI2MiwgCi0gICAgNjI2NiwgNjI2OSwgNjI3MywgNjI3NywgNjI4MSwgNjI4NCwgNjI4OCwgNjI5MiwgNjI5NywgNjMwMCwgNjMwNCwgNjMwOCwgCi0gICAgNjMxMiwgNjMxNiwgNjMyMiwgNjMyOSwgNjMzMiwgNjMzNSwgNjMzOCwgNjM0MSwgNjM0NCwgNjM0NywgNjM1MCwgNjM1MywgCi0gICAgNjM1NiwgNjM1OSwgNjM2MiwgNjM2NSwgNjM2OCwgNjM3MSwgNjM3NCwgNjM3NywgNjM4MCwgNjM4MywgNjM4OCwgNjM5MSwgCi0gICAgNjM5NCwgNjM5NywgNjQwMiwgNjQwNiwgNjQwOSwgNjQxMiwgNjQxNSwgNjQxOCwgNjQyMSwgNjQyNCwgNjQyNywgNjQzMCwgCi0gICAgNjQzMywgNjQzNiwgNjQ0MCwgNjQ0MywgNjQ0NiwgNjQ1MCwgNjQ1NCwgNjQ1NywgNjQ2MiwgNjQ2NiwgNjQ2OSwgNjQ3MiwgCi0gICAgNjQ3NSwgNjQ3OCwgNjQ4MiwgNjQ4NiwgNjQ4OSwgNjQ5MiwgNjQ5NSwgNjQ5OCwgNjUwMSwgNjUwNCwgNjUwNywgNjUxMCwgCi0gICAgNjUxMywgNjUxNywgNjUyMSwgNjUyNSwgNjUyOSwgNjUzMywgNjUzNywgNjU0MSwgNjU0NSwgNjU0OSwgNjU1MywgNjU1NywgCi0gICAgNjU2MSwgNjU2NSwgNjU2OSwgNjU3MywgNjU3NywgNjU4MSwgNjU4NSwgNjU4OSwgNjU5MywgNjU5NywgNjYwMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDk0NywgNDk1MSwgNDk1NSwgNDk1OSwgNDk2MywgNDk2NywgNDk3MSwgNDk3NSwgNDk3OSwgCisgICAgNDk4MywgNDk4NywgNDk5MSwgNDk5NSwgNDk5OSwgNTAwMywgNTAwOCwgNTAxMywgNTAxOCwgNTAyMywgNTAyOCwgNTAzMywgCisgICAgNTAzOCwgNTA0MywgNTA0OCwgNTA1MywgNTA1OCwgNTA2MywgNTA2OCwgNTA3MywgNTA3OCwgNTA4NiwgMCwgNTA5MywgCisgICAgNTA5NywgNTEwMSwgNTEwNSwgNTEwOSwgNTExMywgNTExNywgNTEyMSwgNTEyNSwgNTEyOSwgNTEzMywgNTEzNywgNTE0MSwgCisgICAgNTE0NSwgNTE0OSwgNTE1MywgNTE1NywgNTE2MSwgNTE2NSwgNTE2OSwgNTE3MywgNTE3NywgNTE4MSwgNTE4NSwgNTE4OSwgCisgICAgNTE5MywgNTE5NywgNTIwMSwgNTIwNSwgNTIwOSwgNTIxMywgNTIxNywgNTIyMSwgNTIyNSwgNTIyOSwgNTIzMywgNTIzNywgCisgICAgNTIzOSwgNTI0MSwgNTI0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI0NSwgNTI0OSwgNTI1MiwgNTI1NSwgNTI1OCwgCisgICAgNTI2MSwgNTI2NCwgNTI2NywgNTI3MCwgNTI3MywgNTI3NiwgNTI3OSwgNTI4MiwgNTI4NSwgNTI4OCwgNTI5MSwgNTI5NCwgCisgICAgNTI5NiwgNTI5OCwgNTMwMCwgNTMwMiwgNTMwNCwgNTMwNiwgNTMwOCwgNTMxMCwgNTMxMiwgNTMxNCwgNTMxNiwgNTMxOCwgCisgICAgNTMyMCwgNTMyMiwgNTMyNSwgNTMyOCwgNTMzMSwgNTMzNCwgNTMzNywgNTM0MCwgNTM0MywgNTM0NiwgNTM0OSwgNTM1MiwgCisgICAgNTM1NSwgNTM1OCwgNTM2MSwgNTM2NCwgNTM3MCwgNTM3NSwgMCwgNTM3OCwgNTM4MCwgNTM4MiwgNTM4NCwgNTM4NiwgCisgICAgNTM4OCwgNTM5MCwgNTM5MiwgNTM5NCwgNTM5NiwgNTM5OCwgNTQwMCwgNTQwMiwgNTQwNCwgNTQwNiwgNTQwOCwgNTQxMCwgCisgICAgNTQxMiwgNTQxNCwgNTQxNiwgNTQxOCwgNTQyMCwgNTQyMiwgNTQyNCwgNTQyNiwgNTQyOCwgNTQzMCwgNTQzMiwgNTQzNCwgCisgICAgNTQzNiwgNTQzOCwgNTQ0MCwgNTQ0MiwgNTQ0NCwgNTQ0NiwgNTQ0OCwgNTQ1MCwgNTQ1MiwgNTQ1NCwgNTQ1NiwgNTQ1OCwgCisgICAgNTQ2MCwgNTQ2MiwgNTQ2NCwgNTQ2NiwgNTQ2OCwgNTQ3MCwgNTQ3MiwgNTQ3NCwgNTQ3NiwgNTQ3OSwgNTQ4MiwgNTQ4NSwgCisgICAgNTQ4OCwgNTQ5MSwgNTQ5NCwgNTQ5NywgNTUwMCwgNTUwMywgNTUwNiwgNTUwOSwgNTUxMiwgNTUxNSwgNTUxOCwgNTUyMSwgCisgICAgNTUyNCwgNTUyNywgNTUzMCwgNTUzMywgNTUzNiwgNTUzOSwgNTU0MiwgNTU0NSwgNTU0OCwgNTU1MiwgNTU1NiwgNTU2MCwgCisgICAgNTU2MywgNTU2NywgNTU3MCwgNTU3NCwgNTU3NiwgNTU3OCwgNTU4MCwgNTU4MiwgNTU4NCwgNTU4NiwgNTU4OCwgNTU5MCwgCisgICAgNTU5MiwgNTU5NCwgNTU5NiwgNTU5OCwgNTYwMCwgNTYwMiwgNTYwNCwgNTYwNiwgNTYwOCwgNTYxMCwgNTYxMiwgNTYxNCwgCisgICAgNTYxNiwgNTYxOCwgNTYyMCwgNTYyMiwgNTYyNCwgNTYyNiwgNTYyOCwgNTYzMCwgNTYzMiwgNTYzNCwgNTYzNiwgNTYzOCwgCisgICAgNTY0MCwgNTY0MiwgNTY0NCwgNTY0NiwgNTY0OCwgNTY1MCwgNTY1MiwgNTY1NCwgNTY1NiwgNTY1OCwgNTY2MCwgNTY2MiwgCisgICAgNTY2NCwgNTY2NiwgMCwgNTY2OCwgNTY3MywgNTY3OCwgNTY4MywgNTY4NywgNTY5MiwgNTY5NiwgNTcwMCwgNTcwNiwgCisgICAgNTcxMSwgNTcxNSwgNTcxOSwgNTcyMywgNTcyOCwgNTczMywgNTczNywgNTc0MSwgNTc0NCwgNTc0OCwgNTc1MywgNTc1OCwgCisgICAgNTc2MSwgNTc2NywgNTc3NCwgNTc4MCwgNTc4NCwgNTc5MCwgNTc5NiwgNTgwMSwgNTgwNSwgNTgwOSwgNTgxMywgNTgxOCwgCisgICAgNTgyNCwgNTgyOSwgNTgzMywgNTgzNywgNTg0MSwgNTg0NCwgNTg0NywgNTg1MCwgNTg1MywgNTg1NywgNTg2MSwgNTg2NywgCisgICAgNTg3MSwgNTg3NiwgNTg4MiwgNTg4NiwgNTg4OSwgNTg5MiwgNTg5OCwgNTkwMywgNTkwOSwgNTkxMywgNTkxOSwgNTkyMiwgCisgICAgNTkyNiwgNTkzMCwgNTkzNCwgNTkzOCwgNTk0MiwgNTk0NywgNTk1MSwgNTk1NCwgNTk1OCwgNTk2MiwgNTk2NiwgNTk3MSwgCisgICAgNTk3NSwgNTk3OSwgNTk4MywgNTk4OSwgNTk5NCwgNTk5NywgNjAwMywgNjAwNiwgNjAxMSwgNjAxNiwgNjAyMCwgNjAyNCwgCisgICAgNjAyOCwgNjAzMywgNjAzNiwgNjA0MCwgNjA0NSwgNjA0OCwgNjA1NCwgNjA1OCwgNjA2MSwgNjA2NCwgNjA2NywgNjA3MCwgCisgICAgNjA3MywgNjA3NiwgNjA3OSwgNjA4MiwgNjA4NSwgNjA4OCwgNjA5MiwgNjA5NiwgNjEwMCwgNjEwNCwgNjEwOCwgNjExMiwgCisgICAgNjExNiwgNjEyMCwgNjEyNCwgNjEyOCwgNjEzMiwgNjEzNiwgNjE0MCwgNjE0NCwgNjE0OCwgNjE1MiwgNjE1NSwgNjE1OCwgCisgICAgNjE2MiwgNjE2NSwgNjE2OCwgNjE3MSwgNjE3NSwgNjE3OSwgNjE4MiwgNjE4NSwgNjE4OCwgNjE5MSwgNjE5NCwgNjE5OSwgCisgICAgNjIwMiwgNjIwNSwgNjIwOCwgNjIxMSwgNjIxNCwgNjIxNywgNjIyMCwgNjIyMywgNjIyNywgNjIzMiwgNjIzNSwgNjIzOCwgCisgICAgNjI0MSwgNjI0NCwgNjI0NywgNjI1MCwgNjI1MywgNjI1NywgNjI2MSwgNjI2NSwgNjI2OSwgNjI3MiwgNjI3NSwgNjI3OCwgCisgICAgNjI4MSwgNjI4NCwgNjI4NywgNjI5MCwgNjI5MywgNjI5NiwgNjI5OSwgNjMwMywgNjMwNywgNjMxMCwgNjMxNCwgNjMxOCwgCisgICAgNjMyMiwgNjMyNSwgNjMyOSwgNjMzMywgNjMzOCwgNjM0MSwgNjM0NSwgNjM0OSwgNjM1MywgNjM1NywgNjM2MywgNjM3MCwgCisgICAgNjM3MywgNjM3NiwgNjM3OSwgNjM4MiwgNjM4NSwgNjM4OCwgNjM5MSwgNjM5NCwgNjM5NywgNjQwMCwgNjQwMywgNjQwNiwgCisgICAgNjQwOSwgNjQxMiwgNjQxNSwgNjQxOCwgNjQyMSwgNjQyNCwgNjQyOSwgNjQzMiwgNjQzNSwgNjQzOCwgNjQ0MywgNjQ0NywgCisgICAgNjQ1MCwgNjQ1MywgNjQ1NiwgNjQ1OSwgNjQ2MiwgNjQ2NSwgNjQ2OCwgNjQ3MSwgNjQ3NCwgNjQ3NywgNjQ4MSwgNjQ4NCwgCisgICAgNjQ4NywgNjQ5MSwgNjQ5NSwgNjQ5OCwgNjUwMywgNjUwNywgNjUxMCwgNjUxMywgNjUxNiwgNjUxOSwgNjUyMywgNjUyNywgCisgICAgNjUzMCwgNjUzMywgNjUzNiwgNjUzOSwgNjU0MiwgNjU0NSwgNjU0OCwgNjU1MSwgNjU1NCwgNjU1OCwgNjU2MiwgNjU2NiwgCisgICAgNjU3MCwgNjU3NCwgNjU3OCwgNjU4MiwgNjU4NiwgNjU5MCwgNjU5NCwgNjU5OCwgNjYwMiwgNjYwNiwgNjYxMCwgNjYxNCwgCisgICAgNjYxOCwgNjYyMiwgNjYyNiwgNjYzMCwgNjYzNCwgNjYzOCwgNjY0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNjY0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY0OCwgNjY1MCwgNjY1MiwgNjY1NCwgNjY1NiwgNjY1OCwgNjY2MCwgNjY2MiwgCisgICAgNjY2NCwgNjY2NiwgNjY2OCwgNjY3MCwgNjY3MiwgNjY3NCwgNjY3NiwgNjY3OCwgNjY4MCwgNjY4MiwgNjY4NCwgNjY4NiwgCisgICAgNjY4OCwgNjY5MCwgNjY5MiwgNjY5NCwgNjY5NiwgNjY5OCwgNjcwMCwgNjcwMiwgNjcwNCwgNjcwNiwgNjcwOCwgNjcxMCwgCisgICAgNjcxMiwgNjcxNCwgNjcxNiwgNjcxOCwgNjcyMCwgNjcyMiwgNjcyNCwgNjcyNiwgNjcyOCwgNjczMCwgNjczMiwgNjczNCwgCisgICAgNjczNiwgNjczOCwgNjc0MCwgNjc0MiwgNjc0NCwgNjc0NiwgNjc0OCwgNjc1MCwgNjc1MiwgNjc1NCwgNjc1NiwgNjc1OCwgCisgICAgNjc2MCwgNjc2MiwgNjc2NCwgNjc2NiwgNjc2OCwgNjc3MCwgNjc3MiwgNjc3NCwgNjc3NiwgNjc3OCwgNjc4MCwgNjc4MiwgCisgICAgNjc4NCwgNjc4NiwgNjc4OCwgNjc5MCwgNjc5MiwgNjc5NCwgNjc5NiwgNjc5OCwgNjgwMCwgNjgwMiwgNjgwNCwgNjgwNiwgCisgICAgNjgwOCwgNjgxMCwgNjgxMiwgNjgxNCwgNjgxNiwgNjgxOCwgNjgyMCwgNjgyMiwgNjgyNCwgNjgyNiwgNjgyOCwgNjgzMCwgCisgICAgNjgzMiwgNjgzNCwgNjgzNiwgNjgzOCwgNjg0MCwgNjg0MiwgNjg0NCwgNjg0NiwgNjg0OCwgNjg1MCwgNjg1MiwgNjg1NCwgCisgICAgNjg1NiwgNjg1OCwgNjg2MCwgNjg2MiwgNjg2NCwgNjg2NiwgNjg2OCwgNjg3MCwgNjg3MiwgNjg3NCwgNjg3NiwgNjg3OCwgCisgICAgNjg4MCwgNjg4MiwgNjg4NCwgNjg4NiwgNjg4OCwgNjg5MCwgNjg5MiwgNjg5NCwgNjg5NiwgNjg5OCwgNjkwMCwgNjkwMiwgCisgICAgNjkwNCwgNjkwNiwgNjkwOCwgNjkxMCwgNjkxMiwgNjkxNCwgNjkxNiwgNjkxOCwgNjkyMCwgNjkyMiwgNjkyNCwgNjkyNiwgCisgICAgNjkyOCwgNjkzMCwgNjkzMiwgNjkzNCwgNjkzNiwgNjkzOCwgNjk0MCwgNjk0MiwgNjk0NCwgNjk0NiwgNjk0OCwgNjk1MCwgCisgICAgNjk1MiwgNjk1NCwgNjk1NiwgNjk1OCwgNjk2MCwgNjk2MiwgNjk2NCwgNjk2NiwgNjk2OCwgNjk3MCwgNjk3MiwgNjk3NCwgCisgICAgNjk3NiwgNjk3OCwgNjk4MCwgNjk4MiwgNjk4NCwgNjk4NiwgNjk4OCwgNjk5MCwgNjk5MiwgNjk5NCwgNjk5NiwgNjk5OCwgCisgICAgNzAwMCwgNzAwMiwgNzAwNCwgNzAwNiwgNzAwOCwgNzAxMCwgNzAxMiwgNzAxNCwgNzAxNiwgNzAxOCwgNzAyMCwgNzAyMiwgCisgICAgNzAyNCwgNzAyNiwgNzAyOCwgNzAzMCwgNzAzMiwgNzAzNCwgNzAzNiwgNzAzOCwgNzA0MCwgNzA0MiwgNzA0NCwgNzA0NiwgCisgICAgNzA0OCwgNzA1MCwgNzA1MiwgNzA1NCwgNzA1NiwgNzA1OCwgNzA2MCwgNzA2MiwgNzA2NCwgNzA2NiwgNzA2OCwgNzA3MCwgCisgICAgNzA3MiwgNzA3NCwgNzA3NiwgNzA3OCwgNzA4MCwgNzA4MiwgNzA4NCwgNzA4NiwgNzA4OCwgNzA5MCwgNzA5MiwgNzA5NCwgCisgICAgNzA5NiwgNzA5OCwgNzEwMCwgNzEwMiwgNzEwNCwgNzEwNiwgNzEwOCwgNzExMCwgNzExMiwgNzExNCwgNzExNiwgNzExOCwgCisgICAgNzEyMCwgNzEyMiwgNzEyNCwgNzEyNiwgNzEyOCwgNzEzMCwgNzEzMiwgNzEzNCwgNzEzNiwgNzEzOCwgNzE0MCwgNzE0MiwgCisgICAgNzE0NCwgNzE0NiwgNzE0OCwgNzE1MCwgNzE1MiwgNzE1NCwgNzE1NiwgNzE1OCwgNzE2MCwgNzE2MiwgNzE2NCwgNzE2NiwgCisgICAgNzE2OCwgNzE3MCwgNzE3MiwgNzE3NCwgNzE3NiwgNzE3OCwgNzE4MCwgNzE4MiwgNzE4NCwgNzE4NiwgMCwgMCwgNzE4OCwgCisgICAgMCwgNzE5MCwgMCwgMCwgNzE5MiwgNzE5NCwgNzE5NiwgNzE5OCwgNzIwMCwgNzIwMiwgNzIwNCwgNzIwNiwgNzIwOCwgCisgICAgNzIxMCwgMCwgNzIxMiwgMCwgNzIxNCwgMCwgMCwgNzIxNiwgNzIxOCwgMCwgMCwgMCwgNzIyMCwgNzIyMiwgNzIyNCwgCisgICAgNzIyNiwgMCwgMCwgNzIyOCwgNzIzMCwgNzIzMiwgNzIzNCwgNzIzNiwgNzIzOCwgNzI0MCwgNzI0MiwgNzI0NCwgNzI0NiwgCisgICAgNzI0OCwgNzI1MCwgNzI1MiwgNzI1NCwgNzI1NiwgNzI1OCwgNzI2MCwgNzI2MiwgNzI2NCwgNzI2NiwgNzI2OCwgNzI3MCwgCisgICAgNzI3MiwgNzI3NCwgNzI3NiwgNzI3OCwgNzI4MCwgNzI4MiwgNzI4NCwgNzI4NiwgNzI4OCwgNzI5MCwgNzI5MiwgNzI5NCwgCisgICAgNzI5NiwgNzI5OCwgNzMwMCwgNzMwMiwgNzMwNCwgNzMwNiwgNzMwOCwgNzMxMCwgNzMxMiwgNzMxNCwgNzMxNiwgNzMxOCwgCisgICAgNzMyMCwgNzMyMiwgNzMyNCwgNzMyNiwgNzMyOCwgNzMzMCwgNzMzMiwgNzMzNCwgNzMzNiwgNzMzOCwgNzM0MCwgNzM0MiwgCisgICAgNzM0NCwgNzM0NiwgNzM0OCwgNzM1MCwgMCwgMCwgNzM1MiwgNzM1NCwgNzM1NiwgNzM1OCwgNzM2MCwgNzM2MiwgNzM2NCwgCisgICAgNzM2NiwgNzM2OCwgNzM3MCwgNzM3MiwgNzM3NCwgNzM3NiwgNzM3OCwgNzM4MCwgNzM4MiwgNzM4NCwgNzM4NiwgNzM4OCwgCisgICAgNzM5MCwgNzM5MiwgNzM5NCwgNzM5NiwgNzM5OCwgNzQwMCwgNzQwMiwgNzQwNCwgNzQwNiwgNzQwOCwgNzQxMCwgNzQxMiwgCisgICAgNzQxNCwgNzQxNiwgNzQxOCwgNzQyMCwgNzQyMiwgNzQyNCwgNzQyNiwgNzQyOCwgNzQzMCwgNzQzMiwgNzQzNCwgNzQzNiwgCisgICAgNzQzOCwgNzQ0MCwgNzQ0MiwgNzQ0NCwgNzQ0NiwgNzQ0OCwgNzQ1MCwgNzQ1MiwgNzQ1NCwgNzQ1NiwgNzQ1OCwgNzQ2MCwgCisgICAgNzQ2MiwgNzQ2NCwgNzQ2NiwgNzQ2OCwgNzQ3MCwgNzQ3MiwgNzQ3NCwgNzQ3NiwgNzQ3OCwgNzQ4MCwgNzQ4MiwgNzQ4NCwgCisgICAgNzQ4NiwgNzQ4OCwgNzQ5MCwgNzQ5MiwgNzQ5NCwgNzQ5NiwgNzQ5OCwgNzUwMCwgNzUwMiwgNzUwNCwgNzUwNiwgNzUwOCwgCisgICAgNzUxMCwgNzUxMiwgNzUxNCwgNzUxNiwgNzUxOCwgNzUyMCwgNzUyMiwgNzUyNCwgNzUyNiwgNzUyOCwgNzUzMCwgNzUzMiwgCisgICAgNzUzNCwgNzUzNiwgNzUzOCwgNzU0MCwgNzU0MiwgNzU0NCwgNzU0NiwgNzU0OCwgNzU1MCwgNzU1MiwgNzU1NCwgNzU1NiwgCisgICAgNzU1OCwgNzU2MCwgNzU2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU2NCwgNzU2NywgCisgICAgNzU3MCwgNzU3MywgNzU3NywgNzU4MSwgNzU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU4NywgCisgICAgNzU5MCwgNzU5MywgNzU5NiwgNzU5OSwgMCwgMCwgMCwgMCwgMCwgNzYwMiwgMCwgNzYwNSwgNzYwOCwgNzYxMCwgNzYxMiwgCisgICAgNzYxNCwgNzYxNiwgNzYxOCwgNzYyMCwgNzYyMiwgNzYyNCwgNzYyNiwgNzYyOCwgNzYzMSwgNzYzNCwgNzYzNywgNzY0MCwgCisgICAgNzY0MywgNzY0NiwgNzY0OSwgNzY1MiwgNzY1NSwgNzY1OCwgNzY2MSwgNzY2NCwgMCwgNzY2NywgNzY3MCwgNzY3MywgCisgICAgNzY3NiwgNzY3OSwgMCwgNzY4MiwgMCwgNzY4NSwgNzY4OCwgMCwgNzY5MSwgNzY5NCwgMCwgNzY5NywgNzcwMCwgNzcwMywgCisgICAgNzcwNiwgNzcwOSwgNzcxMiwgNzcxNSwgNzcxOCwgNzcyMSwgNzcyNCwgNzcyNywgNzcyOSwgNzczMSwgNzczMywgNzczNSwgCisgICAgNzczNywgNzczOSwgNzc0MSwgNzc0MywgNzc0NSwgNzc0NywgNzc0OSwgNzc1MSwgNzc1MywgNzc1NSwgNzc1NywgNzc1OSwgCisgICAgNzc2MSwgNzc2MywgNzc2NSwgNzc2NywgNzc2OSwgNzc3MSwgNzc3MywgNzc3NSwgNzc3NywgNzc3OSwgNzc4MSwgNzc4MywgCisgICAgNzc4NSwgNzc4NywgNzc4OSwgNzc5MSwgNzc5MywgNzc5NSwgNzc5NywgNzc5OSwgNzgwMSwgNzgwMywgNzgwNSwgNzgwNywgCisgICAgNzgwOSwgNzgxMSwgNzgxMywgNzgxNSwgNzgxNywgNzgxOSwgNzgyMSwgNzgyMywgNzgyNSwgNzgyNywgNzgyOSwgNzgzMSwgCisgICAgNzgzMywgNzgzNSwgNzgzNywgNzgzOSwgNzg0MSwgNzg0MywgNzg0NSwgNzg0NywgNzg0OSwgNzg1MSwgNzg1MywgNzg1NSwgCisgICAgNzg1NywgNzg1OSwgNzg2MSwgNzg2MywgNzg2NSwgNzg2NywgNzg2OSwgNzg3MSwgNzg3MywgNzg3NSwgNzg3NywgNzg3OSwgCisgICAgNzg4MSwgNzg4MywgNzg4NSwgNzg4NywgNzg4OSwgNzg5MSwgNzg5MywgNzg5NSwgNzg5NywgNzg5OSwgNzkwMSwgNzkwMywgCisgICAgNzkwNSwgNzkwNywgNzkwOSwgNzkxMSwgNzkxMywgNzkxNSwgNzkxNywgNzkxOSwgNzkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzkyMywgNzkyNSwgNzkyNywgNzkyOSwgNzkzMSwgNzkzMywgNzkzNSwgNzkzNywgNzkzOSwgNzk0MSwgCisgICAgNzk0MywgNzk0NSwgNzk0NywgNzk0OSwgNzk1MSwgNzk1MywgNzk1NSwgNzk1NywgNzk1OSwgNzk2MSwgNzk2MywgNzk2NSwgCisgICAgNzk2NywgNzk2OSwgNzk3MiwgNzk3NSwgNzk3OCwgNzk4MSwgNzk4NCwgNzk4NywgNzk5MCwgNzk5MywgNzk5NiwgNzk5OSwgCisgICAgODAwMiwgODAwNSwgODAwOCwgODAxMSwgODAxNCwgODAxNywgODAyMCwgODAyMywgODAyNSwgODAyNywgODAyOSwgODAzMSwgCisgICAgODAzNCwgODAzNywgODA0MCwgODA0MywgODA0NiwgODA0OSwgODA1MiwgODA1NSwgODA1OCwgODA2MSwgODA2NCwgODA2NywgCisgICAgODA3MCwgODA3MywgODA3NiwgODA3OSwgODA4MiwgODA4NSwgODA4OCwgODA5MSwgODA5NCwgODA5NywgODEwMCwgODEwMywgCisgICAgODEwNiwgODEwOSwgODExMiwgODExNSwgODExOCwgODEyMSwgODEyNCwgODEyNywgODEzMCwgODEzMywgODEzNiwgODEzOSwgCisgICAgODE0MiwgODE0NSwgODE0OCwgODE1MSwgODE1NCwgODE1NywgODE2MCwgODE2MywgODE2NiwgODE2OSwgODE3MiwgODE3NSwgCisgICAgODE3OCwgODE4MSwgODE4NCwgODE4NywgODE5MCwgODE5MywgODE5NiwgODE5OSwgODIwMiwgODIwNSwgODIwOCwgODIxMSwgCisgICAgODIxNCwgODIxNywgODIyMCwgODIyMywgODIyNiwgODIyOSwgODIzMiwgODIzNSwgODIzOCwgODI0MSwgODI0NCwgODI0NywgCisgICAgODI1MCwgODI1MywgODI1NiwgODI1OSwgODI2MiwgODI2NSwgODI2OCwgODI3MSwgODI3NCwgODI3NywgODI4MCwgODI4MywgCisgICAgODI4NiwgODI4OSwgODI5MiwgODI5NSwgODI5OCwgODMwMSwgODMwNCwgODMwNywgODMxMCwgODMxMywgODMxNywgODMyMSwgCisgICAgODMyNSwgODMyOSwgODMzMywgODMzNywgODM0MCwgODM0MywgODM0NiwgODM0OSwgODM1MiwgODM1NSwgODM1OCwgODM2MSwgCisgICAgODM2NCwgODM2NywgODM3MCwgODM3MywgODM3NiwgODM3OSwgODM4MiwgODM4NSwgODM4OCwgODM5MSwgODM5NCwgODM5NywgCisgICAgODQwMCwgODQwMywgODQwNiwgODQwOSwgODQxMiwgODQxNSwgODQxOCwgODQyMSwgODQyNCwgODQyNywgODQzMCwgODQzMywgCisgICAgODQzNiwgODQzOSwgODQ0MiwgODQ0NSwgODQ0OCwgODQ1MSwgODQ1NCwgODQ1NywgODQ2MCwgODQ2MywgODQ2NiwgODQ2OSwgCisgICAgODQ3MiwgODQ3NSwgODQ3OCwgODQ4MSwgODQ4NCwgODQ4NywgODQ5MCwgODQ5MywgODQ5NiwgODQ5OSwgODUwMiwgODUwNSwgCisgICAgODUwOCwgODUxMSwgODUxNCwgODUxNywgODUyMCwgODUyMywgODUyNiwgODUyOSwgODUzMiwgODUzNSwgODUzOCwgODU0MSwgCisgICAgODU0NCwgODU0NywgODU1MCwgODU1MywgODU1NiwgODU1OSwgODU2MiwgODU2NSwgODU2OCwgODU3MSwgODU3NCwgODU3NywgCisgICAgODU4MCwgODU4MywgODU4NiwgODU4OSwgODU5MiwgODU5NSwgODU5OCwgODYwMSwgODYwNCwgODYwNywgODYxMCwgODYxMywgCisgICAgODYxNiwgODYxOSwgODYyMiwgODYyNSwgODYyOCwgODYzMSwgODYzNCwgODYzNywgODY0MCwgODY0MywgODY0NiwgODY0OSwgCisgICAgODY1MiwgODY1NSwgODY1OCwgODY2MSwgODY2NCwgODY2NywgODY3MCwgODY3MywgODY3NiwgODY3OSwgODY4MiwgODY4NSwgCisgICAgODY4OCwgODY5MSwgODY5NCwgODY5NywgODcwMCwgODcwMywgODcwNiwgODcwOSwgODcxMiwgODcxNSwgODcxOCwgODcyMSwgCisgICAgODcyNCwgODcyNywgODczMCwgODczMywgODczNiwgODczOSwgODc0MiwgODc0NSwgODc0OCwgODc1MSwgODc1NCwgODc1NywgCisgICAgODc2MCwgODc2MywgODc2NywgODc3MSwgODc3NSwgODc3OCwgODc4MSwgODc4NCwgODc4NywgODc5MCwgODc5MywgODc5NiwgCisgICAgODc5OSwgODgwMiwgODgwNSwgODgwOCwgODgxMSwgODgxNCwgODgxNywgODgyMCwgODgyMywgODgyNiwgODgyOSwgODgzMiwgCisgICAgODgzNSwgODgzOCwgODg0MSwgODg0NCwgODg0NywgODg1MCwgODg1MywgODg1NiwgODg1OSwgODg2MiwgODg2NSwgODg2OCwgCisgICAgODg3MSwgODg3NCwgODg3NywgODg4MCwgODg4MywgODg4NiwgODg4OSwgODg5MiwgODg5NSwgODg5OCwgODkwMSwgODkwNCwgCisgICAgODkwNywgODkxMCwgODkxMywgODkxNiwgODkxOSwgODkyMiwgODkyNSwgODkyOCwgODkzMSwgODkzNCwgODkzNywgODk0MCwgCisgICAgODk0MywgODk0NiwgODk0OSwgODk1MiwgODk1NSwgODk1OCwgODk2MSwgODk2NCwgODk2NywgODk3MCwgODk3MywgODk3NiwgCisgICAgODk3OSwgODk4MiwgODk4NSwgODk4OCwgODk5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgODk5NCwgODk5OCwgOTAwMiwgOTAwNiwgOTAxMCwgOTAxNCwgOTAxOCwgOTAyMiwgOTAyNiwgOTAzMCwgCisgICAgOTAzNCwgOTAzOCwgOTA0MiwgOTA0NiwgOTA1MCwgOTA1NCwgOTA1OCwgOTA2MiwgOTA2NiwgOTA3MCwgOTA3NCwgOTA3OCwgCisgICAgOTA4MiwgOTA4NiwgOTA5MCwgOTA5NCwgOTA5OCwgOTEwMiwgOTEwNiwgOTExMCwgOTExNCwgOTExOCwgOTEyMiwgOTEyNiwgCisgICAgOTEzMCwgOTEzNCwgOTEzOCwgOTE0MiwgOTE0NiwgOTE1MCwgOTE1NCwgOTE1OCwgOTE2MiwgOTE2NiwgOTE3MCwgOTE3NCwgCisgICAgOTE3OCwgOTE4MiwgOTE4NiwgOTE5MCwgOTE5NCwgOTE5OCwgOTIwMiwgOTIwNiwgOTIxMCwgOTIxNCwgOTIxOCwgOTIyMiwgCisgICAgOTIyNiwgOTIzMCwgOTIzNCwgOTIzOCwgOTI0MiwgOTI0NiwgMCwgMCwgOTI1MCwgOTI1NCwgOTI1OCwgOTI2MiwgOTI2NiwgCisgICAgOTI3MCwgOTI3NCwgOTI3OCwgOTI4MiwgOTI4NiwgOTI5MCwgOTI5NCwgOTI5OCwgOTMwMiwgOTMwNiwgOTMxMCwgOTMxNCwgCisgICAgOTMxOCwgOTMyMiwgOTMyNiwgOTMzMCwgOTMzNCwgOTMzOCwgOTM0MiwgOTM0NiwgOTM1MCwgOTM1NCwgOTM1OCwgOTM2MiwgCisgICAgOTM2NiwgOTM3MCwgOTM3NCwgOTM3OCwgOTM4MiwgOTM4NiwgOTM5MCwgOTM5NCwgOTM5OCwgOTQwMiwgOTQwNiwgOTQxMCwgCisgICAgOTQxNCwgOTQxOCwgOTQyMiwgOTQyNiwgOTQzMCwgOTQzNCwgOTQzOCwgOTQ0MiwgOTQ0NiwgOTQ1MCwgOTQ1NCwgOTQ1OCwgCisgICAgOTQ2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTQ2NiwgOTQ3MCwgOTQ3NCwgCisgICAgOTQ3OSwgOTQ4NCwgOTQ4OSwgOTQ5NCwgOTQ5OSwgOTUwNCwgOTUwOSwgOTUxMywgOTUzMiwgOTU0MSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU0NiwgOTU0OCwgOTU1MCwgOTU1MiwgCisgICAgOTU1NCwgOTU1NiwgOTU1OCwgOTU2MCwgOTU2MiwgOTU2NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU2NiwgOTU2OCwgOTU3MCwgOTU3MiwgOTU3NCwgOTU3NiwgOTU3OCwgCisgICAgOTU4MCwgOTU4MiwgOTU4NCwgOTU4NiwgOTU4OCwgOTU5MCwgOTU5MiwgOTU5NCwgOTU5NiwgOTU5OCwgOTYwMCwgOTYwMiwgCisgICAgOTYwNCwgOTYwNiwgMCwgMCwgOTYwOCwgOTYxMCwgOTYxMiwgOTYxNCwgOTYxNiwgOTYxOCwgOTYyMCwgOTYyMiwgOTYyNCwgCisgICAgOTYyNiwgOTYyOCwgOTYzMCwgMCwgOTYzMiwgOTYzNCwgOTYzNiwgOTYzOCwgOTY0MCwgOTY0MiwgOTY0NCwgOTY0NiwgCisgICAgOTY0OCwgOTY1MCwgOTY1MiwgOTY1NCwgOTY1NiwgOTY1OCwgOTY2MCwgOTY2MiwgOTY2NCwgOTY2NiwgOTY2OCwgMCwgCisgICAgOTY3MCwgOTY3MiwgOTY3NCwgOTY3NiwgMCwgMCwgMCwgMCwgOTY3OCwgOTY4MSwgOTY4NCwgMCwgOTY4NywgMCwgOTY5MCwgCisgICAgOTY5MywgOTY5NiwgOTY5OSwgOTcwMiwgOTcwNSwgOTcwOCwgOTcxMSwgOTcxNCwgOTcxNywgOTcyMCwgOTcyMiwgOTcyNCwgCisgICAgOTcyNiwgOTcyOCwgOTczMCwgOTczMiwgOTczNCwgOTczNiwgOTczOCwgOTc0MCwgOTc0MiwgOTc0NCwgOTc0NiwgOTc0OCwgCisgICAgOTc1MCwgOTc1MiwgOTc1NCwgOTc1NiwgOTc1OCwgOTc2MCwgOTc2MiwgOTc2NCwgOTc2NiwgOTc2OCwgOTc3MCwgOTc3MiwgCisgICAgOTc3NCwgOTc3NiwgOTc3OCwgOTc4MCwgOTc4MiwgOTc4NCwgOTc4NiwgOTc4OCwgOTc5MCwgOTc5MiwgOTc5NCwgOTc5NiwgCisgICAgOTc5OCwgOTgwMCwgOTgwMiwgOTgwNCwgOTgwNiwgOTgwOCwgOTgxMCwgOTgxMiwgOTgxNCwgOTgxNiwgOTgxOCwgOTgyMCwgCisgICAgOTgyMiwgOTgyNCwgOTgyNiwgOTgyOCwgOTgzMCwgOTgzMiwgOTgzNCwgOTgzNiwgOTgzOCwgOTg0MCwgOTg0MiwgOTg0NCwgCisgICAgOTg0NiwgOTg0OCwgOTg1MCwgOTg1MiwgOTg1NCwgOTg1NiwgOTg1OCwgOTg2MCwgOTg2MiwgOTg2NCwgOTg2NiwgOTg2OCwgCisgICAgOTg3MCwgOTg3MiwgOTg3NCwgOTg3NiwgOTg3OCwgOTg4MCwgOTg4MiwgOTg4NCwgOTg4NiwgOTg4OCwgOTg5MCwgOTg5MiwgCisgICAgOTg5NCwgOTg5NiwgOTg5OCwgOTkwMCwgOTkwMiwgOTkwNCwgOTkwNiwgOTkwOCwgOTkxMCwgOTkxMiwgOTkxNCwgOTkxNiwgCisgICAgOTkxOCwgOTkyMCwgOTkyMiwgOTkyNCwgOTkyNiwgOTkyOCwgOTkzMCwgOTkzMiwgOTkzNCwgOTkzNiwgOTkzOCwgOTk0MCwgCisgICAgOTk0MiwgOTk0NCwgOTk0NiwgOTk0OCwgOTk1MCwgOTk1MiwgOTk1NCwgOTk1NywgOTk2MCwgOTk2MywgOTk2NiwgOTk2OSwgCisgICAgOTk3MiwgOTk3NSwgMCwgMCwgMCwgMCwgOTk3OCwgOTk4MCwgOTk4MiwgOTk4NCwgOTk4NiwgOTk4OCwgOTk5MCwgOTk5MiwgCisgICAgOTk5NCwgOTk5NiwgOTk5OCwgMTAwMDAsIDEwMDAyLCAxMDAwNCwgMTAwMDYsIDEwMDA4LCAxMDAxMCwgMTAwMTIsIDEwMDE0LCAKKyAgICAxMDAxNiwgMTAwMTgsIDEwMDIwLCAxMDAyMiwgMTAwMjQsIDEwMDI2LCAxMDAyOCwgMTAwMzAsIDEwMDMyLCAxMDAzNCwgCisgICAgMTAwMzYsIDEwMDM4LCAxMDA0MCwgMTAwNDIsIDEwMDQ0LCAxMDA0NiwgMTAwNDgsIDEwMDUwLCAxMDA1MiwgMTAwNTQsIAorICAgIDEwMDU2LCAxMDA1OCwgMTAwNjAsIDEwMDYyLCAxMDA2NCwgMTAwNjYsIDEwMDY4LCAxMDA3MCwgMTAwNzIsIDEwMDc0LCAKKyAgICAxMDA3NiwgMTAwNzgsIDEwMDgwLCAxMDA4MiwgMTAwODQsIDEwMDg2LCAxMDA4OCwgMTAwOTAsIDEwMDkyLCAxMDA5NCwgCisgICAgMTAwOTYsIDEwMDk4LCAxMDEwMCwgMTAxMDIsIDEwMTA0LCAxMDEwNiwgMTAxMDgsIDEwMTEwLCAxMDExMiwgMTAxMTQsIAorICAgIDEwMTE2LCAxMDExOCwgMTAxMjAsIDEwMTIyLCAxMDEyNCwgMTAxMjYsIDEwMTI4LCAxMDEzMCwgMTAxMzIsIDEwMTM0LCAKKyAgICAxMDEzNiwgMTAxMzgsIDEwMTQwLCAxMDE0MiwgMTAxNDQsIDEwMTQ2LCAxMDE0OCwgMTAxNTAsIDEwMTUyLCAxMDE1NCwgCisgICAgMTAxNTYsIDEwMTU4LCAxMDE2MCwgMTAxNjIsIDEwMTY0LCAxMDE2NiwgMTAxNjgsIDEwMTcwLCAxMDE3MiwgMTAxNzQsIAorICAgIDEwMTc2LCAxMDE3OCwgMTAxODAsIDEwMTgyLCAxMDE4NCwgMTAxODYsIDEwMTg4LCAxMDE5MCwgMTAxOTIsIDEwMTk0LCAKKyAgICAxMDE5NiwgMTAxOTgsIDEwMjAwLCAxMDIwMiwgMTAyMDQsIDEwMjA2LCAxMDIwOCwgMTAyMTAsIDEwMjEyLCAxMDIxNCwgCisgICAgMTAyMTYsIDEwMjE4LCAxMDIyMCwgMTAyMjIsIDEwMjI0LCAxMDIyNiwgMTAyMjgsIDEwMjMwLCAxMDIzMiwgMTAyMzQsIAorICAgIDEwMjM2LCAxMDIzOCwgMTAyNDAsIDEwMjQyLCAxMDI0NCwgMTAyNDYsIDEwMjQ4LCAxMDI1MCwgMTAyNTIsIDEwMjU0LCAKKyAgICAxMDI1NiwgMTAyNTgsIDEwMjYwLCAxMDI2MiwgMTAyNjQsIDEwMjY2LCAxMDI2OCwgMTAyNzAsIDEwMjcyLCAxMDI3NCwgCisgICAgMTAyNzYsIDEwMjc4LCAxMDI4MCwgMTAyODIsIDEwMjg0LCAxMDI4NiwgMTAyODgsIDEwMjkwLCAxMDI5MiwgMTAyOTQsIAorICAgIDEwMjk2LCAxMDI5OCwgMTAzMDAsIDEwMzAyLCAxMDMwNCwgMTAzMDYsIDEwMzA4LCAxMDMxMCwgMTAzMTIsIDEwMzE0LCAKKyAgICAxMDMxNiwgMTAzMTgsIDEwMzIwLCAxMDMyMiwgMTAzMjQsIDEwMzI2LCAxMDMyOCwgMTAzMzAsIDEwMzMyLCAxMDMzNCwgCisgICAgMTAzMzYsIDEwMzM4LCAxMDM0MCwgMTAzNDIsIDEwMzQ0LCAxMDM0NiwgMTAzNDgsIDEwMzUwLCAxMDM1MiwgMTAzNTQsIAorICAgIDEwMzU2LCAwLCAwLCAwLCAxMDM1OCwgMTAzNjAsIDEwMzYyLCAxMDM2NCwgMTAzNjYsIDEwMzY4LCAwLCAwLCAxMDM3MCwgCisgICAgMTAzNzIsIDEwMzc0LCAxMDM3NiwgMTAzNzgsIDEwMzgwLCAwLCAwLCAxMDM4MiwgMTAzODQsIDEwMzg2LCAxMDM4OCwgCisgICAgMTAzOTAsIDEwMzkyLCAwLCAwLCAxMDM5NCwgMTAzOTYsIDEwMzk4LCAwLCAwLCAwLCAxMDQwMCwgMTA0MDIsIDEwNDA0LCAKKyAgICAxMDQwNiwgMTA0MDgsIDEwNDEwLCAxMDQxMiwgMCwgMTA0MTQsIDEwNDE2LCAxMDQxOCwgMTA0MjAsIDEwNDIyLCAxMDQyNCwgCisgICAgMTA0MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MDcsIDY2MDksIDY2MTEsIDY2MTMsIAotICAgIDY2MTUsIDY2MTcsIDY2MTksIDY2MjEsIDY2MjMsIDY2MjUsIDY2MjcsIDY2MjksIDY2MzEsIDY2MzMsIDY2MzUsIDY2MzcsIAotICAgIDY2MzksIDY2NDEsIDY2NDMsIDY2NDUsIDY2NDcsIDY2NDksIDY2NTEsIDY2NTMsIDY2NTUsIDY2NTcsIDY2NTksIDY2NjEsIAotICAgIDY2NjMsIDY2NjUsIDY2NjcsIDY2NjksIDY2NzEsIDY2NzMsIDY2NzUsIDY2NzcsIDY2NzksIDY2ODEsIDY2ODMsIDY2ODUsIAotICAgIDY2ODcsIDY2ODksIDY2OTEsIDY2OTMsIDY2OTUsIDY2OTcsIDY2OTksIDY3MDEsIDY3MDMsIDY3MDUsIDY3MDcsIDY3MDksIAotICAgIDY3MTEsIDY3MTMsIDY3MTUsIDY3MTcsIDY3MTksIDY3MjEsIDY3MjMsIDY3MjUsIDY3MjcsIDY3MjksIDY3MzEsIDY3MzMsIAotICAgIDY3MzUsIDY3MzcsIDY3MzksIDY3NDEsIDY3NDMsIDY3NDUsIDY3NDcsIDY3NDksIDY3NTEsIDY3NTMsIDY3NTUsIDY3NTcsIAotICAgIDY3NTksIDY3NjEsIDY3NjMsIDY3NjUsIDY3NjcsIDY3NjksIDY3NzEsIDY3NzMsIDY3NzUsIDY3NzcsIDY3NzksIDY3ODEsIAotICAgIDY3ODMsIDY3ODUsIDY3ODcsIDY3ODksIDY3OTEsIDY3OTMsIDY3OTUsIDY3OTcsIDY3OTksIDY4MDEsIDY4MDMsIDY4MDUsIAotICAgIDY4MDcsIDY4MDksIDY4MTEsIDY4MTMsIDY4MTUsIDY4MTcsIDY4MTksIDY4MjEsIDY4MjMsIDY4MjUsIDY4MjcsIDY4MjksIAotICAgIDY4MzEsIDY4MzMsIDY4MzUsIDY4MzcsIDY4MzksIDY4NDEsIDY4NDMsIDY4NDUsIDY4NDcsIDY4NDksIDY4NTEsIDY4NTMsIAotICAgIDY4NTUsIDY4NTcsIDY4NTksIDY4NjEsIDY4NjMsIDY4NjUsIDY4NjcsIDY4NjksIDY4NzEsIDY4NzMsIDY4NzUsIDY4NzcsIAotICAgIDY4NzksIDY4ODEsIDY4ODMsIDY4ODUsIDY4ODcsIDY4ODksIDY4OTEsIDY4OTMsIDY4OTUsIDY4OTcsIDY4OTksIDY5MDEsIAotICAgIDY5MDMsIDY5MDUsIDY5MDcsIDY5MDksIDY5MTEsIDY5MTMsIDY5MTUsIDY5MTcsIDY5MTksIDY5MjEsIDY5MjMsIDY5MjUsIAotICAgIDY5MjcsIDY5MjksIDY5MzEsIDY5MzMsIDY5MzUsIDY5MzcsIDY5MzksIDY5NDEsIDY5NDMsIDY5NDUsIDY5NDcsIDY5NDksIAotICAgIDY5NTEsIDY5NTMsIDY5NTUsIDY5NTcsIDY5NTksIDY5NjEsIDY5NjMsIDY5NjUsIDY5NjcsIDY5NjksIDY5NzEsIDY5NzMsIAotICAgIDY5NzUsIDY5NzcsIDY5NzksIDY5ODEsIDY5ODMsIDY5ODUsIDY5ODcsIDY5ODksIDY5OTEsIDY5OTMsIDY5OTUsIDY5OTcsIAotICAgIDY5OTksIDcwMDEsIDcwMDMsIDcwMDUsIDcwMDcsIDcwMDksIDcwMTEsIDcwMTMsIDcwMTUsIDcwMTcsIDcwMTksIDcwMjEsIAotICAgIDcwMjMsIDcwMjUsIDcwMjcsIDcwMjksIDcwMzEsIDcwMzMsIDcwMzUsIDcwMzcsIDcwMzksIDcwNDEsIDcwNDMsIDcwNDUsIAotICAgIDcwNDcsIDcwNDksIDcwNTEsIDcwNTMsIDcwNTUsIDcwNTcsIDcwNTksIDcwNjEsIDcwNjMsIDcwNjUsIDcwNjcsIDcwNjksIAotICAgIDcwNzEsIDcwNzMsIDcwNzUsIDcwNzcsIDcwNzksIDcwODEsIDcwODMsIDcwODUsIDcwODcsIDcwODksIDcwOTEsIDcwOTMsIAotICAgIDcwOTUsIDcwOTcsIDcwOTksIDcxMDEsIDcxMDMsIDcxMDUsIDcxMDcsIDcxMDksIDcxMTEsIDcxMTMsIDcxMTUsIDcxMTcsIAotICAgIDcxMTksIDcxMjEsIDcxMjMsIDcxMjUsIDcxMjcsIDcxMjksIDcxMzEsIDcxMzMsIDcxMzUsIDcxMzcsIDcxMzksIDcxNDEsIAotICAgIDcxNDMsIDcxNDUsIDAsIDAsIDcxNDcsIDAsIDcxNDksIDAsIDAsIDcxNTEsIDcxNTMsIDcxNTUsIDcxNTcsIDcxNTksIAotICAgIDcxNjEsIDcxNjMsIDcxNjUsIDcxNjcsIDcxNjksIDAsIDcxNzEsIDAsIDcxNzMsIDAsIDAsIDcxNzUsIDcxNzcsIDAsIDAsIAotICAgIDAsIDcxNzksIDcxODEsIDcxODMsIDcxODUsIDAsIDAsIDcxODcsIDcxODksIDcxOTEsIDcxOTMsIDcxOTUsIDcxOTcsIAotICAgIDcxOTksIDcyMDEsIDcyMDMsIDcyMDUsIDcyMDcsIDcyMDksIDcyMTEsIDcyMTMsIDcyMTUsIDcyMTcsIDcyMTksIDcyMjEsIAotICAgIDcyMjMsIDcyMjUsIDcyMjcsIDcyMjksIDcyMzEsIDcyMzMsIDcyMzUsIDcyMzcsIDcyMzksIDcyNDEsIDcyNDMsIDcyNDUsIAotICAgIDcyNDcsIDcyNDksIDcyNTEsIDcyNTMsIDcyNTUsIDcyNTcsIDcyNTksIDcyNjEsIDcyNjMsIDcyNjUsIDcyNjcsIDcyNjksIAotICAgIDcyNzEsIDcyNzMsIDcyNzUsIDcyNzcsIDcyNzksIDcyODEsIDcyODMsIDcyODUsIDcyODcsIDcyODksIDcyOTEsIDcyOTMsIAotICAgIDcyOTUsIDcyOTcsIDcyOTksIDczMDEsIDczMDMsIDAsIDAsIDAsIDAsIDAsIDczMDUsIDczMDcsIDczMDksIDczMTEsIAotICAgIDczMTMsIDczMTUsIDczMTcsIDczMTksIDczMjEsIDczMjMsIDczMjUsIDczMjcsIDczMjksIDczMzEsIDczMzMsIDczMzUsIAotICAgIDczMzcsIDczMzksIDczNDEsIDczNDMsIDczNDUsIDczNDcsIDczNDksIDczNTEsIDczNTMsIDczNTUsIDczNTcsIDczNTksIAotICAgIDczNjEsIDczNjMsIDczNjUsIDczNjcsIDczNjksIDczNzEsIDczNzMsIDczNzUsIDczNzcsIDczNzksIDczODEsIDczODMsIAotICAgIDczODUsIDczODcsIDczODksIDczOTEsIDczOTMsIDczOTUsIDczOTcsIDczOTksIDc0MDEsIDc0MDMsIDc0MDUsIDc0MDcsIAotICAgIDc0MDksIDc0MTEsIDc0MTMsIDc0MTUsIDc0MTcsIDc0MTksIDc0MjEsIDc0MjMsIDc0MjUsIDc0MjcsIDc0MjksIDc0MzEsIAotICAgIDc0MzMsIDc0MzUsIDc0MzcsIDc0MzksIDc0NDEsIDc0NDMsIDc0NDUsIDc0NDcsIDc0NDksIDc0NTEsIDc0NTMsIDc0NTUsIAotICAgIDc0NTcsIDc0NTksIDc0NjEsIDc0NjMsIDc0NjUsIDc0NjcsIDc0NjksIDc0NzEsIDc0NzMsIDc0NzUsIDc0NzcsIDc0NzksIAotICAgIDc0ODEsIDc0ODMsIDc0ODUsIDc0ODcsIDc0ODksIDc0OTEsIDc0OTMsIDc0OTUsIDc0OTcsIDc0OTksIDc1MDEsIDc1MDMsIAotICAgIDc1MDUsIDc1MDcsIDc1MDksIDc1MTEsIDc1MTMsIDc1MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc1MTcsIDc1MjAsIDc1MjMsIDc1MjYsIDc1MzAsIDc1MzQsIDc1MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NDAsIDc1NDMsIDc1NDYsIDc1NDksIDc1NTIsIDAsIDAsIDAsIDAsIDAsIDc1NTUsIDAsIDc1NTgsIAotICAgIDc1NjEsIDc1NjMsIDc1NjUsIDc1NjcsIDc1NjksIDc1NzEsIDc1NzMsIDc1NzUsIDc1NzcsIDc1NzksIDc1ODEsIDc1ODQsIAotICAgIDc1ODcsIDc1OTAsIDc1OTMsIDc1OTYsIDc1OTksIDc2MDIsIDc2MDUsIDc2MDgsIDc2MTEsIDc2MTQsIDc2MTcsIDAsIAotICAgIDc2MjAsIDc2MjMsIDc2MjYsIDc2MjksIDc2MzIsIDAsIDc2MzUsIDAsIDc2MzgsIDc2NDEsIDAsIDc2NDQsIDc2NDcsIDAsIAotICAgIDc2NTAsIDc2NTMsIDc2NTYsIDc2NTksIDc2NjIsIDc2NjUsIDc2NjgsIDc2NzEsIDc2NzQsIDc2NzcsIDc2ODAsIDc2ODIsIAotICAgIDc2ODQsIDc2ODYsIDc2ODgsIDc2OTAsIDc2OTIsIDc2OTQsIDc2OTYsIDc2OTgsIDc3MDAsIDc3MDIsIDc3MDQsIDc3MDYsIAotICAgIDc3MDgsIDc3MTAsIDc3MTIsIDc3MTQsIDc3MTYsIDc3MTgsIDc3MjAsIDc3MjIsIDc3MjQsIDc3MjYsIDc3MjgsIDc3MzAsIAotICAgIDc3MzIsIDc3MzQsIDc3MzYsIDc3MzgsIDc3NDAsIDc3NDIsIDc3NDQsIDc3NDYsIDc3NDgsIDc3NTAsIDc3NTIsIDc3NTQsIAotICAgIDc3NTYsIDc3NTgsIDc3NjAsIDc3NjIsIDc3NjQsIDc3NjYsIDc3NjgsIDc3NzAsIDc3NzIsIDc3NzQsIDc3NzYsIDc3NzgsIAotICAgIDc3ODAsIDc3ODIsIDc3ODQsIDc3ODYsIDc3ODgsIDc3OTAsIDc3OTIsIDc3OTQsIDc3OTYsIDc3OTgsIDc4MDAsIDc4MDIsIAotICAgIDc4MDQsIDc4MDYsIDc4MDgsIDc4MTAsIDc4MTIsIDc4MTQsIDc4MTYsIDc4MTgsIDc4MjAsIDc4MjIsIDc4MjQsIDc4MjYsIAotICAgIDc4MjgsIDc4MzAsIDc4MzIsIDc4MzQsIDc4MzYsIDc4MzgsIDc4NDAsIDc4NDIsIDc4NDQsIDc4NDYsIDc4NDgsIDc4NTAsIAotICAgIDc4NTIsIDc4NTQsIDc4NTYsIDc4NTgsIDc4NjAsIDc4NjIsIDc4NjQsIDc4NjYsIDc4NjgsIDc4NzAsIDc4NzIsIDc4NzQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEwNDI4LCAwLCAxMDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA0MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NzYsIDc4NzgsIDc4ODAsIDc4ODIsIDc4ODQsIDc4ODYsIDc4ODgsIAotICAgIDc4OTAsIDc4OTIsIDc4OTQsIDc4OTYsIDc4OTgsIDc5MDAsIDc5MDIsIDc5MDQsIDc5MDYsIDc5MDgsIDc5MTAsIDc5MTIsIAotICAgIDc5MTQsIDc5MTYsIDc5MTgsIDc5MjAsIDc5MjIsIDc5MjUsIDc5MjgsIDc5MzEsIDc5MzQsIDc5MzcsIDc5NDAsIDc5NDMsIAotICAgIDc5NDYsIDc5NDksIDc5NTIsIDc5NTUsIDc5NTgsIDc5NjEsIDc5NjQsIDc5NjcsIDc5NzAsIDc5NzMsIDc5NzYsIDc5NzgsIAotICAgIDc5ODAsIDc5ODIsIDc5ODQsIDc5ODcsIDc5OTAsIDc5OTMsIDc5OTYsIDc5OTksIDgwMDIsIDgwMDUsIDgwMDgsIDgwMTEsIAotICAgIDgwMTQsIDgwMTcsIDgwMjAsIDgwMjMsIDgwMjYsIDgwMjksIDgwMzIsIDgwMzUsIDgwMzgsIDgwNDEsIDgwNDQsIDgwNDcsIAotICAgIDgwNTAsIDgwNTMsIDgwNTYsIDgwNTksIDgwNjIsIDgwNjUsIDgwNjgsIDgwNzEsIDgwNzQsIDgwNzcsIDgwODAsIDgwODMsIAotICAgIDgwODYsIDgwODksIDgwOTIsIDgwOTUsIDgwOTgsIDgxMDEsIDgxMDQsIDgxMDcsIDgxMTAsIDgxMTMsIDgxMTYsIDgxMTksIAotICAgIDgxMjIsIDgxMjUsIDgxMjgsIDgxMzEsIDgxMzQsIDgxMzcsIDgxNDAsIDgxNDMsIDgxNDYsIDgxNDksIDgxNTIsIDgxNTUsIAotICAgIDgxNTgsIDgxNjEsIDgxNjQsIDgxNjcsIDgxNzAsIDgxNzMsIDgxNzYsIDgxNzksIDgxODIsIDgxODUsIDgxODgsIDgxOTEsIAotICAgIDgxOTQsIDgxOTcsIDgyMDAsIDgyMDMsIDgyMDYsIDgyMDksIDgyMTIsIDgyMTUsIDgyMTgsIDgyMjEsIDgyMjQsIDgyMjcsIAotICAgIDgyMzAsIDgyMzMsIDgyMzYsIDgyMzksIDgyNDIsIDgyNDUsIDgyNDgsIDgyNTEsIDgyNTQsIDgyNTcsIDgyNjAsIDgyNjMsIAotICAgIDgyNjYsIDgyNzAsIDgyNzQsIDgyNzgsIDgyODIsIDgyODYsIDgyOTAsIDgyOTMsIDgyOTYsIDgyOTksIDgzMDIsIDgzMDUsIAotICAgIDgzMDgsIDgzMTEsIDgzMTQsIDgzMTcsIDgzMjAsIDgzMjMsIDgzMjYsIDgzMjksIDgzMzIsIDgzMzUsIDgzMzgsIDgzNDEsIAotICAgIDgzNDQsIDgzNDcsIDgzNTAsIDgzNTMsIDgzNTYsIDgzNTksIDgzNjIsIDgzNjUsIDgzNjgsIDgzNzEsIDgzNzQsIDgzNzcsIAotICAgIDgzODAsIDgzODMsIDgzODYsIDgzODksIDgzOTIsIDgzOTUsIDgzOTgsIDg0MDEsIDg0MDQsIDg0MDcsIDg0MTAsIDg0MTMsIAotICAgIDg0MTYsIDg0MTksIDg0MjIsIDg0MjUsIDg0MjgsIDg0MzEsIDg0MzQsIDg0MzcsIDg0NDAsIDg0NDMsIDg0NDYsIDg0NDksIAotICAgIDg0NTIsIDg0NTUsIDg0NTgsIDg0NjEsIDg0NjQsIDg0NjcsIDg0NzAsIDg0NzMsIDg0NzYsIDg0NzksIDg0ODIsIDg0ODUsIAotICAgIDg0ODgsIDg0OTEsIDg0OTQsIDg0OTcsIDg1MDAsIDg1MDMsIDg1MDYsIDg1MDksIDg1MTIsIDg1MTUsIDg1MTgsIDg1MjEsIAotICAgIDg1MjQsIDg1MjcsIDg1MzAsIDg1MzMsIDg1MzYsIDg1MzksIDg1NDIsIDg1NDUsIDg1NDgsIDg1NTEsIDg1NTQsIDg1NTcsIAotICAgIDg1NjAsIDg1NjMsIDg1NjYsIDg1NjksIDg1NzIsIDg1NzUsIDg1NzgsIDg1ODEsIDg1ODQsIDg1ODcsIDg1OTAsIDg1OTMsIAotICAgIDg1OTYsIDg1OTksIDg2MDIsIDg2MDUsIDg2MDgsIDg2MTEsIDg2MTQsIDg2MTcsIDg2MjAsIDg2MjMsIDg2MjYsIDg2MjksIAotICAgIDg2MzIsIDg2MzUsIDg2MzgsIDg2NDEsIDg2NDQsIDg2NDcsIDg2NTAsIDg2NTMsIDg2NTYsIDg2NTksIDg2NjIsIDg2NjUsIAotICAgIDg2NjgsIDg2NzEsIDg2NzQsIDg2NzcsIDg2ODAsIDg2ODMsIDg2ODYsIDg2ODksIDg2OTIsIDg2OTUsIDg2OTgsIDg3MDEsIAotICAgIDg3MDQsIDg3MDcsIDg3MTAsIDg3MTMsIDg3MTYsIDg3MjAsIDg3MjQsIDg3MjgsIDg3MzEsIDg3MzQsIDg3MzcsIDg3NDAsIAotICAgIDg3NDMsIDg3NDYsIDg3NDksIDg3NTIsIDg3NTUsIDg3NTgsIDg3NjEsIDg3NjQsIDg3NjcsIDg3NzAsIDg3NzMsIDg3NzYsIAotICAgIDg3NzksIDg3ODIsIDg3ODUsIDg3ODgsIDg3OTEsIDg3OTQsIDg3OTcsIDg4MDAsIDg4MDMsIDg4MDYsIDg4MDksIDg4MTIsIAotICAgIDg4MTUsIDg4MTgsIDg4MjEsIDg4MjQsIDg4MjcsIDg4MzAsIDg4MzMsIDg4MzYsIDg4MzksIDg4NDIsIDg4NDUsIDg4NDgsIAotICAgIDg4NTEsIDg4NTQsIDg4NTcsIDg4NjAsIDg4NjMsIDg4NjYsIDg4NjksIDg4NzIsIDg4NzUsIDg4NzgsIDg4ODEsIDg4ODQsIAotICAgIDg4ODcsIDg4OTAsIDg4OTMsIDg4OTYsIDg4OTksIDg5MDIsIDg5MDUsIDg5MDgsIDg5MTEsIDg5MTQsIDg5MTcsIDg5MjAsIAotICAgIDg5MjMsIDg5MjYsIDg5MjksIDg5MzIsIDg5MzUsIDg5MzgsIDg5NDEsIDg5NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDcsIDg5NTEsIDg5NTUsIDg5NTksIDg5NjMsIDg5NjcsIDg5NzEsIAotICAgIDg5NzUsIDg5NzksIDg5ODMsIDg5ODcsIDg5OTEsIDg5OTUsIDg5OTksIDkwMDMsIDkwMDcsIDkwMTEsIDkwMTUsIDkwMTksIAotICAgIDkwMjMsIDkwMjcsIDkwMzEsIDkwMzUsIDkwMzksIDkwNDMsIDkwNDcsIDkwNTEsIDkwNTUsIDkwNTksIDkwNjMsIDkwNjcsIAotICAgIDkwNzEsIDkwNzUsIDkwNzksIDkwODMsIDkwODcsIDkwOTEsIDkwOTUsIDkwOTksIDkxMDMsIDkxMDcsIDkxMTEsIDkxMTUsIAotICAgIDkxMTksIDkxMjMsIDkxMjcsIDkxMzEsIDkxMzUsIDkxMzksIDkxNDMsIDkxNDcsIDkxNTEsIDkxNTUsIDkxNTksIDkxNjMsIAotICAgIDkxNjcsIDkxNzEsIDkxNzUsIDkxNzksIDkxODMsIDkxODcsIDkxOTEsIDkxOTUsIDkxOTksIDAsIDAsIDkyMDMsIDkyMDcsIAotICAgIDkyMTEsIDkyMTUsIDkyMTksIDkyMjMsIDkyMjcsIDkyMzEsIDkyMzUsIDkyMzksIDkyNDMsIDkyNDcsIDkyNTEsIDkyNTUsIAotICAgIDkyNTksIDkyNjMsIDkyNjcsIDkyNzEsIDkyNzUsIDkyNzksIDkyODMsIDkyODcsIDkyOTEsIDkyOTUsIDkyOTksIDkzMDMsIAotICAgIDkzMDcsIDkzMTEsIDkzMTUsIDkzMTksIDkzMjMsIDkzMjcsIDkzMzEsIDkzMzUsIDkzMzksIDkzNDMsIDkzNDcsIDkzNTEsIAotICAgIDkzNTUsIDkzNTksIDkzNjMsIDkzNjcsIDkzNzEsIDkzNzUsIDkzNzksIDkzODMsIDkzODcsIDkzOTEsIDkzOTUsIDkzOTksIAotICAgIDk0MDMsIDk0MDcsIDk0MTEsIDk0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk0MTksIDk0MjMsIDk0MjcsIDk0MzIsIDk0MzcsIDk0NDIsIDk0NDcsIDk0NTIsIDk0NTcsIDk0NjIsIDk0NjYsIDk0ODUsIAotICAgIDk0OTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0OTksIAotICAgIDk1MDEsIDk1MDMsIDk1MDUsIDk1MDcsIDk1MDksIDk1MTEsIDk1MTMsIDk1MTUsIDk1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1MTksIDk1MjEsIDk1MjMsIDk1MjUsIAotICAgIDk1MjcsIDk1MjksIDk1MzEsIDk1MzMsIDk1MzUsIDk1MzcsIDk1MzksIDk1NDEsIDk1NDMsIDk1NDUsIDk1NDcsIDk1NDksIAotICAgIDk1NTEsIDk1NTMsIDk1NTUsIDk1NTcsIDk1NTksIDAsIDAsIDk1NjEsIDk1NjMsIDk1NjUsIDk1NjcsIDk1NjksIDk1NzEsIAotICAgIDk1NzMsIDk1NzUsIDk1NzcsIDk1NzksIDk1ODEsIDk1ODMsIDAsIDk1ODUsIDk1ODcsIDk1ODksIDk1OTEsIDk1OTMsIAotICAgIDk1OTUsIDk1OTcsIDk1OTksIDk2MDEsIDk2MDMsIDk2MDUsIDk2MDcsIDk2MDksIDk2MTEsIDk2MTMsIDk2MTUsIDk2MTcsIAotICAgIDk2MTksIDk2MjEsIDAsIDk2MjMsIDk2MjUsIDk2MjcsIDk2MjksIDAsIDAsIDAsIDAsIDk2MzEsIDk2MzQsIDk2MzcsIDAsIAotICAgIDk2NDAsIDAsIDk2NDMsIDk2NDYsIDk2NDksIDk2NTIsIDk2NTUsIDk2NTgsIDk2NjEsIDk2NjQsIDk2NjcsIDk2NzAsIAotICAgIDk2NzMsIDk2NzUsIDk2NzcsIDk2NzksIDk2ODEsIDk2ODMsIDk2ODUsIDk2ODcsIDk2ODksIDk2OTEsIDk2OTMsIDk2OTUsIAotICAgIDk2OTcsIDk2OTksIDk3MDEsIDk3MDMsIDk3MDUsIDk3MDcsIDk3MDksIDk3MTEsIDk3MTMsIDk3MTUsIDk3MTcsIDk3MTksIAotICAgIDk3MjEsIDk3MjMsIDk3MjUsIDk3MjcsIDk3MjksIDk3MzEsIDk3MzMsIDk3MzUsIDk3MzcsIDk3MzksIDk3NDEsIDk3NDMsIAotICAgIDk3NDUsIDk3NDcsIDk3NDksIDk3NTEsIDk3NTMsIDk3NTUsIDk3NTcsIDk3NTksIDk3NjEsIDk3NjMsIDk3NjUsIDk3NjcsIAotICAgIDk3NjksIDk3NzEsIDk3NzMsIDk3NzUsIDk3NzcsIDk3NzksIDk3ODEsIDk3ODMsIDk3ODUsIDk3ODcsIDk3ODksIDk3OTEsIAotICAgIDk3OTMsIDk3OTUsIDk3OTcsIDk3OTksIDk4MDEsIDk4MDMsIDk4MDUsIDk4MDcsIDk4MDksIDk4MTEsIDk4MTMsIDk4MTUsIAotICAgIDk4MTcsIDk4MTksIDk4MjEsIDk4MjMsIDk4MjUsIDk4MjcsIDk4MjksIDk4MzEsIDk4MzMsIDk4MzUsIDk4MzcsIDk4MzksIAotICAgIDk4NDEsIDk4NDMsIDk4NDUsIDk4NDcsIDk4NDksIDk4NTEsIDk4NTMsIDk4NTUsIDk4NTcsIDk4NTksIDk4NjEsIDk4NjMsIAotICAgIDk4NjUsIDk4NjcsIDk4NjksIDk4NzEsIDk4NzMsIDk4NzUsIDk4NzcsIDk4NzksIDk4ODEsIDk4ODMsIDk4ODUsIDk4ODcsIAotICAgIDk4ODksIDk4OTEsIDk4OTMsIDk4OTUsIDk4OTcsIDk4OTksIDk5MDEsIDk5MDMsIDk5MDUsIDk5MDcsIDk5MTAsIDk5MTMsIAotICAgIDk5MTYsIDk5MTksIDk5MjIsIDk5MjUsIDk5MjgsIDAsIDAsIDAsIDAsIDk5MzEsIDk5MzMsIDk5MzUsIDk5MzcsIDk5MzksIAotICAgIDk5NDEsIDk5NDMsIDk5NDUsIDk5NDcsIDk5NDksIDk5NTEsIDk5NTMsIDk5NTUsIDk5NTcsIDk5NTksIDk5NjEsIDk5NjMsIAotICAgIDk5NjUsIDk5NjcsIDk5NjksIDk5NzEsIDk5NzMsIDk5NzUsIDk5NzcsIDk5NzksIDk5ODEsIDk5ODMsIDk5ODUsIDk5ODcsIAotICAgIDk5ODksIDk5OTEsIDk5OTMsIDk5OTUsIDk5OTcsIDk5OTksIDEwMDAxLCAxMDAwMywgMTAwMDUsIDEwMDA3LCAxMDAwOSwgCi0gICAgMTAwMTEsIDEwMDEzLCAxMDAxNSwgMTAwMTcsIDEwMDE5LCAxMDAyMSwgMTAwMjMsIDEwMDI1LCAxMDAyNywgMTAwMjksIAotICAgIDEwMDMxLCAxMDAzMywgMTAwMzUsIDEwMDM3LCAxMDAzOSwgMTAwNDEsIDEwMDQzLCAxMDA0NSwgMTAwNDcsIDEwMDQ5LCAKLSAgICAxMDA1MSwgMTAwNTMsIDEwMDU1LCAxMDA1NywgMTAwNTksIDEwMDYxLCAxMDA2MywgMTAwNjUsIDEwMDY3LCAxMDA2OSwgCi0gICAgMTAwNzEsIDEwMDczLCAxMDA3NSwgMTAwNzcsIDEwMDc5LCAxMDA4MSwgMTAwODMsIDEwMDg1LCAxMDA4NywgMTAwODksIAotICAgIDEwMDkxLCAxMDA5MywgMTAwOTUsIDEwMDk3LCAxMDA5OSwgMTAxMDEsIDEwMTAzLCAxMDEwNSwgMTAxMDcsIDEwMTA5LCAKLSAgICAxMDExMSwgMTAxMTMsIDEwMTE1LCAxMDExNywgMTAxMTksIDEwMTIxLCAxMDEyMywgMTAxMjUsIDEwMTI3LCAxMDEyOSwgCi0gICAgMTAxMzEsIDEwMTMzLCAxMDEzNSwgMTAxMzcsIDEwMTM5LCAxMDE0MSwgMTAxNDMsIDEwMTQ1LCAxMDE0NywgMTAxNDksIAotICAgIDEwMTUxLCAxMDE1MywgMTAxNTUsIDEwMTU3LCAxMDE1OSwgMTAxNjEsIDEwMTYzLCAxMDE2NSwgMTAxNjcsIDEwMTY5LCAKLSAgICAxMDE3MSwgMTAxNzMsIDEwMTc1LCAxMDE3NywgMTAxNzksIDEwMTgxLCAxMDE4MywgMTAxODUsIDEwMTg3LCAxMDE4OSwgCi0gICAgMTAxOTEsIDEwMTkzLCAxMDE5NSwgMTAxOTcsIDEwMTk5LCAxMDIwMSwgMTAyMDMsIDEwMjA1LCAxMDIwNywgMTAyMDksIAotICAgIDEwMjExLCAxMDIxMywgMTAyMTUsIDEwMjE3LCAxMDIxOSwgMTAyMjEsIDEwMjIzLCAxMDIyNSwgMTAyMjcsIDEwMjI5LCAKLSAgICAxMDIzMSwgMTAyMzMsIDEwMjM1LCAxMDIzNywgMTAyMzksIDEwMjQxLCAxMDI0MywgMTAyNDUsIDEwMjQ3LCAxMDI0OSwgCi0gICAgMTAyNTEsIDEwMjUzLCAxMDI1NSwgMTAyNTcsIDEwMjU5LCAxMDI2MSwgMTAyNjMsIDEwMjY1LCAxMDI2NywgMTAyNjksIAotICAgIDEwMjcxLCAxMDI3MywgMTAyNzUsIDEwMjc3LCAxMDI3OSwgMTAyODEsIDEwMjgzLCAxMDI4NSwgMTAyODcsIDEwMjg5LCAKLSAgICAxMDI5MSwgMTAyOTMsIDEwMjk1LCAxMDI5NywgMTAyOTksIDEwMzAxLCAxMDMwMywgMTAzMDUsIDEwMzA3LCAxMDMwOSwgMCwgCi0gICAgMCwgMCwgMTAzMTEsIDEwMzEzLCAxMDMxNSwgMTAzMTcsIDEwMzE5LCAxMDMyMSwgMCwgMCwgMTAzMjMsIDEwMzI1LCAKLSAgICAxMDMyNywgMTAzMjksIDEwMzMxLCAxMDMzMywgMCwgMCwgMTAzMzUsIDEwMzM3LCAxMDMzOSwgMTAzNDEsIDEwMzQzLCAKLSAgICAxMDM0NSwgMCwgMCwgMTAzNDcsIDEwMzQ5LCAxMDM1MSwgMCwgMCwgMCwgMTAzNTMsIDEwMzU1LCAxMDM1NywgMTAzNTksIAotICAgIDEwMzYxLCAxMDM2MywgMTAzNjUsIDAsIDEwMzY3LCAxMDM2OSwgMTAzNzEsIDEwMzczLCAxMDM3NSwgMTAzNzcsIDEwMzc5LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDM4MSwgMTAzODQsIDEwMzg3LCAxMDM5MCwgCi0gICAgMTAzOTMsIDEwMzk2LCAxMDM5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0MzcsIDEwNDQwLCAxMDQ0MywgMTA0NDYsIDEwNDQ5LCAKKyAgICAxMDQ1MiwgMTA0NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDAyLCAKLSAgICAxMDQwNSwgMTA0MDgsIDEwNDExLCAxMDQxNCwgMTA0MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNDU4LCAxMDQ2MSwgCisgICAgMTA0NjQsIDEwNDY3LCAxMDQ3MCwgMTA0NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwNDIwLCAxMDQyMiwgMTA0MjQsIDEwNDI2LCAxMDQyOCwgMTA0MzAsIDEwNDMyLCAxMDQzNCwgMTA0MzYsIAotICAgIDEwNDM4LCAxMDQ0MCwgMTA0NDIsIDEwNDQ0LCAxMDQ0NiwgMTA0NDgsIDEwNDUwLCAxMDQ1MiwgMTA0NTQsIDEwNDU2LCAKLSAgICAxMDQ1OCwgMTA0NjAsIDEwNDYyLCAxMDQ2NCwgMTA0NjYsIDEwNDY4LCAxMDQ3MCwgMTA0NzIsIDEwNDc0LCAxMDQ3NiwgCi0gICAgMTA0NzgsIDEwNDgwLCAxMDQ4MiwgMTA0ODQsIDEwNDg2LCAxMDQ4OCwgMTA0OTAsIDEwNDkyLCAxMDQ5NCwgMTA0OTYsIAotICAgIDEwNDk4LCAxMDUwMCwgMTA1MDIsIDEwNTA0LCAxMDUwNiwgMTA1MDgsIDEwNTEwLCAxMDUxMiwgMTA1MTQsIDEwNTE2LCAKLSAgICAxMDUxOCwgMTA1MjAsIDEwNTIyLCAxMDUyNCwgMTA1MjYsIDEwNTI4LCAxMDUzMCwgMTA1MzIsIDEwNTM0LCAxMDUzNiwgCi0gICAgMTA1MzgsIDEwNTQwLCAxMDU0MiwgMTA1NDQsIDEwNTQ2LCAxMDU0OCwgMTA1NTAsIDEwNTUyLCAxMDU1NCwgMTA1NTYsIAotICAgIDEwNTU4LCAxMDU2MCwgMTA1NjIsIDEwNTY0LCAxMDU2NiwgMTA1NjgsIDEwNTcwLCAxMDU3MiwgMTA1NzQsIDEwNTc2LCAKLSAgICAxMDU3OCwgMTA1ODAsIDEwNTgyLCAxMDU4NCwgMTA1ODYsIDEwNTg4LCAwLCAxMDU5MCwgMTA1OTIsIDEwNTk0LCAxMDU5NiwgCi0gICAgMTA1OTgsIDEwNjAwLCAxMDYwMiwgMTA2MDQsIDEwNjA2LCAxMDYwOCwgMTA2MTAsIDEwNjEyLCAxMDYxNCwgMTA2MTYsIAotICAgIDEwNjE4LCAxMDYyMCwgMTA2MjIsIDEwNjI0LCAxMDYyNiwgMTA2MjgsIDEwNjMwLCAxMDYzMiwgMTA2MzQsIDEwNjM2LCAKLSAgICAxMDYzOCwgMTA2NDAsIDEwNjQyLCAxMDY0NCwgMTA2NDYsIDEwNjQ4LCAxMDY1MCwgMTA2NTIsIDEwNjU0LCAxMDY1NiwgCi0gICAgMTA2NTgsIDEwNjYwLCAxMDY2MiwgMTA2NjQsIDEwNjY2LCAxMDY2OCwgMTA2NzAsIDEwNjcyLCAxMDY3NCwgMTA2NzYsIAotICAgIDEwNjc4LCAxMDY4MCwgMTA2ODIsIDEwNjg0LCAxMDY4NiwgMTA2ODgsIDEwNjkwLCAxMDY5MiwgMTA2OTQsIDEwNjk2LCAKLSAgICAxMDY5OCwgMTA3MDAsIDEwNzAyLCAxMDcwNCwgMTA3MDYsIDEwNzA4LCAxMDcxMCwgMTA3MTIsIDEwNzE0LCAxMDcxNiwgCi0gICAgMTA3MTgsIDEwNzIwLCAxMDcyMiwgMTA3MjQsIDEwNzI2LCAxMDcyOCwgMTA3MzAsIDAsIDEwNzMyLCAxMDczNCwgMCwgMCwgCi0gICAgMTA3MzYsIDAsIDAsIDEwNzM4LCAxMDc0MCwgMCwgMCwgMTA3NDIsIDEwNzQ0LCAxMDc0NiwgMTA3NDgsIDAsIDEwNzUwLCAKLSAgICAxMDc1MiwgMTA3NTQsIDEwNzU2LCAxMDc1OCwgMTA3NjAsIDEwNzYyLCAxMDc2NCwgMTA3NjYsIDEwNzY4LCAxMDc3MCwgCi0gICAgMTA3NzIsIDAsIDEwNzc0LCAwLCAxMDc3NiwgMTA3NzgsIDEwNzgwLCAxMDc4MiwgMTA3ODQsIDEwNzg2LCAxMDc4OCwgMCwgCi0gICAgMTA3OTAsIDEwNzkyLCAxMDc5NCwgMTA3OTYsIDEwNzk4LCAxMDgwMCwgMTA4MDIsIDEwODA0LCAxMDgwNiwgMTA4MDgsIAotICAgIDEwODEwLCAxMDgxMiwgMTA4MTQsIDEwODE2LCAxMDgxOCwgMTA4MjAsIDEwODIyLCAxMDgyNCwgMTA4MjYsIDEwODI4LCAKLSAgICAxMDgzMCwgMTA4MzIsIDEwODM0LCAxMDgzNiwgMTA4MzgsIDEwODQwLCAxMDg0MiwgMTA4NDQsIDEwODQ2LCAxMDg0OCwgCi0gICAgMTA4NTAsIDEwODUyLCAxMDg1NCwgMTA4NTYsIDEwODU4LCAxMDg2MCwgMTA4NjIsIDEwODY0LCAxMDg2NiwgMTA4NjgsIAotICAgIDEwODcwLCAxMDg3MiwgMTA4NzQsIDEwODc2LCAxMDg3OCwgMTA4ODAsIDEwODgyLCAxMDg4NCwgMTA4ODYsIDEwODg4LCAKLSAgICAxMDg5MCwgMTA4OTIsIDEwODk0LCAxMDg5NiwgMTA4OTgsIDEwOTAwLCAxMDkwMiwgMTA5MDQsIDEwOTA2LCAxMDkwOCwgCi0gICAgMTA5MTAsIDEwOTEyLCAxMDkxNCwgMTA5MTYsIDEwOTE4LCAwLCAxMDkyMCwgMTA5MjIsIDEwOTI0LCAxMDkyNiwgMCwgMCwgCi0gICAgMTA5MjgsIDEwOTMwLCAxMDkzMiwgMTA5MzQsIDEwOTM2LCAxMDkzOCwgMTA5NDAsIDEwOTQyLCAwLCAxMDk0NCwgMTA5NDYsIAotICAgIDEwOTQ4LCAxMDk1MCwgMTA5NTIsIDEwOTU0LCAxMDk1NiwgMCwgMTA5NTgsIDEwOTYwLCAxMDk2MiwgMTA5NjQsIDEwOTY2LCAKLSAgICAxMDk2OCwgMTA5NzAsIDEwOTcyLCAxMDk3NCwgMTA5NzYsIDEwOTc4LCAxMDk4MCwgMTA5ODIsIDEwOTg0LCAxMDk4NiwgCi0gICAgMTA5ODgsIDEwOTkwLCAxMDk5MiwgMTA5OTQsIDEwOTk2LCAxMDk5OCwgMTEwMDAsIDExMDAyLCAxMTAwNCwgMTEwMDYsIAotICAgIDExMDA4LCAxMTAxMCwgMTEwMTIsIDAsIDExMDE0LCAxMTAxNiwgMTEwMTgsIDExMDIwLCAwLCAxMTAyMiwgMTEwMjQsIAotICAgIDExMDI2LCAxMTAyOCwgMTEwMzAsIDAsIDExMDMyLCAwLCAwLCAwLCAxMTAzNCwgMTEwMzYsIDExMDM4LCAxMTA0MCwgCi0gICAgMTEwNDIsIDExMDQ0LCAxMTA0NiwgMCwgMTEwNDgsIDExMDUwLCAxMTA1MiwgMTEwNTQsIDExMDU2LCAxMTA1OCwgMTEwNjAsIAotICAgIDExMDYyLCAxMTA2NCwgMTEwNjYsIDExMDY4LCAxMTA3MCwgMTEwNzIsIDExMDc0LCAxMTA3NiwgMTEwNzgsIDExMDgwLCAKLSAgICAxMTA4MiwgMTEwODQsIDExMDg2LCAxMTA4OCwgMTEwOTAsIDExMDkyLCAxMTA5NCwgMTEwOTYsIDExMDk4LCAxMTEwMCwgCi0gICAgMTExMDIsIDExMTA0LCAxMTEwNiwgMTExMDgsIDExMTEwLCAxMTExMiwgMTExMTQsIDExMTE2LCAxMTExOCwgMTExMjAsIAotICAgIDExMTIyLCAxMTEyNCwgMTExMjYsIDExMTI4LCAxMTEzMCwgMTExMzIsIDExMTM0LCAxMTEzNiwgMTExMzgsIDExMTQwLCAKLSAgICAxMTE0MiwgMTExNDQsIDExMTQ2LCAxMTE0OCwgMTExNTAsIDExMTUyLCAxMTE1NCwgMTExNTYsIDExMTU4LCAxMTE2MCwgCi0gICAgMTExNjIsIDExMTY0LCAxMTE2NiwgMTExNjgsIDExMTcwLCAxMTE3MiwgMTExNzQsIDExMTc2LCAxMTE3OCwgMTExODAsIAotICAgIDExMTgyLCAxMTE4NCwgMTExODYsIDExMTg4LCAxMTE5MCwgMTExOTIsIDExMTk0LCAxMTE5NiwgMTExOTgsIDExMjAwLCAKLSAgICAxMTIwMiwgMTEyMDQsIDExMjA2LCAxMTIwOCwgMTEyMTAsIDExMjEyLCAxMTIxNCwgMTEyMTYsIDExMjE4LCAxMTIyMCwgCi0gICAgMTEyMjIsIDExMjI0LCAxMTIyNiwgMTEyMjgsIDExMjMwLCAxMTIzMiwgMTEyMzQsIDExMjM2LCAxMTIzOCwgMTEyNDAsIAotICAgIDExMjQyLCAxMTI0NCwgMTEyNDYsIDExMjQ4LCAxMTI1MCwgMTEyNTIsIDExMjU0LCAxMTI1NiwgMTEyNTgsIDExMjYwLCAKLSAgICAxMTI2MiwgMTEyNjQsIDExMjY2LCAxMTI2OCwgMTEyNzAsIDExMjcyLCAxMTI3NCwgMTEyNzYsIDExMjc4LCAxMTI4MCwgCi0gICAgMTEyODIsIDExMjg0LCAxMTI4NiwgMTEyODgsIDExMjkwLCAxMTI5MiwgMTEyOTQsIDExMjk2LCAxMTI5OCwgMTEzMDAsIAotICAgIDExMzAyLCAxMTMwNCwgMTEzMDYsIDExMzA4LCAxMTMxMCwgMTEzMTIsIDExMzE0LCAxMTMxNiwgMTEzMTgsIDExMzIwLCAKLSAgICAxMTMyMiwgMTEzMjQsIDExMzI2LCAxMTMyOCwgMTEzMzAsIDExMzMyLCAxMTMzNCwgMTEzMzYsIDExMzM4LCAxMTM0MCwgCi0gICAgMTEzNDIsIDExMzQ0LCAxMTM0NiwgMTEzNDgsIDExMzUwLCAxMTM1MiwgMTEzNTQsIDExMzU2LCAxMTM1OCwgMTEzNjAsIAotICAgIDExMzYyLCAxMTM2NCwgMTEzNjYsIDExMzY4LCAxMTM3MCwgMTEzNzIsIDExMzc0LCAxMTM3NiwgMTEzNzgsIDExMzgwLCAKLSAgICAxMTM4MiwgMTEzODQsIDExMzg2LCAxMTM4OCwgMTEzOTAsIDExMzkyLCAxMTM5NCwgMTEzOTYsIDExMzk4LCAxMTQwMCwgCi0gICAgMTE0MDIsIDExNDA0LCAxMTQwNiwgMTE0MDgsIDExNDEwLCAxMTQxMiwgMTE0MTQsIDExNDE2LCAxMTQxOCwgMTE0MjAsIAotICAgIDExNDIyLCAxMTQyNCwgMTE0MjYsIDExNDI4LCAxMTQzMCwgMTE0MzIsIDExNDM0LCAxMTQzNiwgMTE0MzgsIDExNDQwLCAKLSAgICAxMTQ0MiwgMTE0NDQsIDExNDQ2LCAxMTQ0OCwgMTE0NTAsIDExNDUyLCAxMTQ1NCwgMTE0NTYsIDExNDU4LCAxMTQ2MCwgCi0gICAgMTE0NjIsIDExNDY0LCAxMTQ2NiwgMTE0NjgsIDExNDcwLCAxMTQ3MiwgMTE0NzQsIDExNDc2LCAxMTQ3OCwgMTE0ODAsIAotICAgIDExNDgyLCAxMTQ4NCwgMTE0ODYsIDExNDg4LCAxMTQ5MCwgMTE0OTIsIDExNDk0LCAxMTQ5NiwgMTE0OTgsIDExNTAwLCAKLSAgICAxMTUwMiwgMTE1MDQsIDExNTA2LCAxMTUwOCwgMTE1MTAsIDExNTEyLCAxMTUxNCwgMTE1MTYsIDExNTE4LCAxMTUyMCwgCi0gICAgMTE1MjIsIDExNTI0LCAxMTUyNiwgMTE1MjgsIDExNTMwLCAxMTUzMiwgMTE1MzQsIDExNTM2LCAxMTUzOCwgMTE1NDAsIAotICAgIDExNTQyLCAxMTU0NCwgMTE1NDYsIDExNTQ4LCAxMTU1MCwgMTE1NTIsIDExNTU0LCAxMTU1NiwgMTE1NTgsIDExNTYwLCAKLSAgICAxMTU2MiwgMTE1NjQsIDExNTY2LCAxMTU2OCwgMTE1NzAsIDExNTcyLCAxMTU3NCwgMTE1NzYsIDExNTc4LCAxMTU4MCwgCi0gICAgMTE1ODIsIDExNTg0LCAxMTU4NiwgMTE1ODgsIDExNTkwLCAxMTU5MiwgMTE1OTQsIDExNTk2LCAxMTU5OCwgMTE2MDAsIAotICAgIDExNjAyLCAxMTYwNCwgMTE2MDYsIDExNjA4LCAxMTYxMCwgMTE2MTIsIDExNjE0LCAxMTYxNiwgMTE2MTgsIDExNjIwLCAKLSAgICAxMTYyMiwgMTE2MjQsIDExNjI2LCAxMTYyOCwgMTE2MzAsIDExNjMyLCAxMTYzNCwgMTE2MzYsIDExNjM4LCAxMTY0MCwgCi0gICAgMTE2NDIsIDExNjQ0LCAxMTY0NiwgMTE2NDgsIDExNjUwLCAxMTY1MiwgMTE2NTQsIDExNjU2LCAxMTY1OCwgMTE2NjAsIAotICAgIDExNjYyLCAxMTY2NCwgMTE2NjYsIDExNjY4LCAxMTY3MCwgMTE2NzIsIDExNjc0LCAxMTY3NiwgMTE2NzgsIDExNjgwLCAKLSAgICAxMTY4MiwgMTE2ODQsIDExNjg2LCAxMTY4OCwgMTE2OTAsIDExNjkyLCAxMTY5NCwgMTE2OTYsIDExNjk4LCAxMTcwMCwgCi0gICAgMTE3MDIsIDExNzA0LCAxMTcwNiwgMTE3MDgsIDExNzEwLCAxMTcxMiwgMTE3MTQsIDExNzE2LCAxMTcxOCwgMTE3MjAsIAotICAgIDExNzIyLCAxMTcyNCwgMTE3MjYsIDAsIDAsIDExNzI4LCAxMTczMCwgMTE3MzIsIDExNzM0LCAxMTczNiwgMTE3MzgsIAorICAgIDEwNDc2LCAxMDQ3OCwgMTA0ODAsIDEwNDgyLCAxMDQ4NCwgMTA0ODYsIDEwNDg4LCAxMDQ5MCwgMTA0OTIsIDEwNDk0LCAKKyAgICAxMDQ5NiwgMTA0OTgsIDEwNTAwLCAxMDUwMiwgMTA1MDQsIDEwNTA2LCAxMDUwOCwgMTA1MTAsIDEwNTEyLCAxMDUxNCwgCisgICAgMTA1MTYsIDEwNTE4LCAxMDUyMCwgMTA1MjIsIDEwNTI0LCAxMDUyNiwgMTA1MjgsIDEwNTMwLCAxMDUzMiwgMTA1MzQsIAorICAgIDEwNTM2LCAxMDUzOCwgMTA1NDAsIDEwNTQyLCAxMDU0NCwgMTA1NDYsIDEwNTQ4LCAxMDU1MCwgMTA1NTIsIDEwNTU0LCAKKyAgICAxMDU1NiwgMTA1NTgsIDEwNTYwLCAxMDU2MiwgMTA1NjQsIDEwNTY2LCAxMDU2OCwgMTA1NzAsIDEwNTcyLCAxMDU3NCwgCisgICAgMTA1NzYsIDEwNTc4LCAxMDU4MCwgMTA1ODIsIDEwNTg0LCAxMDU4NiwgMTA1ODgsIDEwNTkwLCAxMDU5MiwgMTA1OTQsIAorICAgIDEwNTk2LCAxMDU5OCwgMTA2MDAsIDEwNjAyLCAxMDYwNCwgMTA2MDYsIDEwNjA4LCAxMDYxMCwgMTA2MTIsIDEwNjE0LCAKKyAgICAxMDYxNiwgMTA2MTgsIDEwNjIwLCAxMDYyMiwgMTA2MjQsIDEwNjI2LCAxMDYyOCwgMTA2MzAsIDEwNjMyLCAxMDYzNCwgCisgICAgMTA2MzYsIDEwNjM4LCAxMDY0MCwgMTA2NDIsIDEwNjQ0LCAwLCAxMDY0NiwgMTA2NDgsIDEwNjUwLCAxMDY1MiwgMTA2NTQsIAorICAgIDEwNjU2LCAxMDY1OCwgMTA2NjAsIDEwNjYyLCAxMDY2NCwgMTA2NjYsIDEwNjY4LCAxMDY3MCwgMTA2NzIsIDEwNjc0LCAKKyAgICAxMDY3NiwgMTA2NzgsIDEwNjgwLCAxMDY4MiwgMTA2ODQsIDEwNjg2LCAxMDY4OCwgMTA2OTAsIDEwNjkyLCAxMDY5NCwgCisgICAgMTA2OTYsIDEwNjk4LCAxMDcwMCwgMTA3MDIsIDEwNzA0LCAxMDcwNiwgMTA3MDgsIDEwNzEwLCAxMDcxMiwgMTA3MTQsIAorICAgIDEwNzE2LCAxMDcxOCwgMTA3MjAsIDEwNzIyLCAxMDcyNCwgMTA3MjYsIDEwNzI4LCAxMDczMCwgMTA3MzIsIDEwNzM0LCAKKyAgICAxMDczNiwgMTA3MzgsIDEwNzQwLCAxMDc0MiwgMTA3NDQsIDEwNzQ2LCAxMDc0OCwgMTA3NTAsIDEwNzUyLCAxMDc1NCwgCisgICAgMTA3NTYsIDEwNzU4LCAxMDc2MCwgMTA3NjIsIDEwNzY0LCAxMDc2NiwgMTA3NjgsIDEwNzcwLCAxMDc3MiwgMTA3NzQsIAorICAgIDEwNzc2LCAxMDc3OCwgMTA3ODAsIDEwNzgyLCAxMDc4NCwgMTA3ODYsIDAsIDEwNzg4LCAxMDc5MCwgMCwgMCwgMTA3OTIsIAorICAgIDAsIDAsIDEwNzk0LCAxMDc5NiwgMCwgMCwgMTA3OTgsIDEwODAwLCAxMDgwMiwgMTA4MDQsIDAsIDEwODA2LCAxMDgwOCwgCisgICAgMTA4MTAsIDEwODEyLCAxMDgxNCwgMTA4MTYsIDEwODE4LCAxMDgyMCwgMTA4MjIsIDEwODI0LCAxMDgyNiwgMTA4MjgsIDAsIAorICAgIDEwODMwLCAwLCAxMDgzMiwgMTA4MzQsIDEwODM2LCAxMDgzOCwgMTA4NDAsIDEwODQyLCAxMDg0NCwgMCwgMTA4NDYsIAorICAgIDEwODQ4LCAxMDg1MCwgMTA4NTIsIDEwODU0LCAxMDg1NiwgMTA4NTgsIDEwODYwLCAxMDg2MiwgMTA4NjQsIDEwODY2LCAKKyAgICAxMDg2OCwgMTA4NzAsIDEwODcyLCAxMDg3NCwgMTA4NzYsIDEwODc4LCAxMDg4MCwgMTA4ODIsIDEwODg0LCAxMDg4NiwgCisgICAgMTA4ODgsIDEwODkwLCAxMDg5MiwgMTA4OTQsIDEwODk2LCAxMDg5OCwgMTA5MDAsIDEwOTAyLCAxMDkwNCwgMTA5MDYsIAorICAgIDEwOTA4LCAxMDkxMCwgMTA5MTIsIDEwOTE0LCAxMDkxNiwgMTA5MTgsIDEwOTIwLCAxMDkyMiwgMTA5MjQsIDEwOTI2LCAKKyAgICAxMDkyOCwgMTA5MzAsIDEwOTMyLCAxMDkzNCwgMTA5MzYsIDEwOTM4LCAxMDk0MCwgMTA5NDIsIDEwOTQ0LCAxMDk0NiwgCisgICAgMTA5NDgsIDEwOTUwLCAxMDk1MiwgMTA5NTQsIDEwOTU2LCAxMDk1OCwgMTA5NjAsIDEwOTYyLCAxMDk2NCwgMTA5NjYsIAorICAgIDEwOTY4LCAxMDk3MCwgMTA5NzIsIDEwOTc0LCAwLCAxMDk3NiwgMTA5NzgsIDEwOTgwLCAxMDk4MiwgMCwgMCwgMTA5ODQsIAorICAgIDEwOTg2LCAxMDk4OCwgMTA5OTAsIDEwOTkyLCAxMDk5NCwgMTA5OTYsIDEwOTk4LCAwLCAxMTAwMCwgMTEwMDIsIDExMDA0LCAKKyAgICAxMTAwNiwgMTEwMDgsIDExMDEwLCAxMTAxMiwgMCwgMTEwMTQsIDExMDE2LCAxMTAxOCwgMTEwMjAsIDExMDIyLCAxMTAyNCwgCisgICAgMTEwMjYsIDExMDI4LCAxMTAzMCwgMTEwMzIsIDExMDM0LCAxMTAzNiwgMTEwMzgsIDExMDQwLCAxMTA0MiwgMTEwNDQsIAorICAgIDExMDQ2LCAxMTA0OCwgMTEwNTAsIDExMDUyLCAxMTA1NCwgMTEwNTYsIDExMDU4LCAxMTA2MCwgMTEwNjIsIDExMDY0LCAKKyAgICAxMTA2NiwgMTEwNjgsIDAsIDExMDcwLCAxMTA3MiwgMTEwNzQsIDExMDc2LCAwLCAxMTA3OCwgMTEwODAsIDExMDgyLCAKKyAgICAxMTA4NCwgMTEwODYsIDAsIDExMDg4LCAwLCAwLCAwLCAxMTA5MCwgMTEwOTIsIDExMDk0LCAxMTA5NiwgMTEwOTgsIAorICAgIDExMTAwLCAxMTEwMiwgMCwgMTExMDQsIDExMTA2LCAxMTEwOCwgMTExMTAsIDExMTEyLCAxMTExNCwgMTExMTYsIDExMTE4LCAKKyAgICAxMTEyMCwgMTExMjIsIDExMTI0LCAxMTEyNiwgMTExMjgsIDExMTMwLCAxMTEzMiwgMTExMzQsIDExMTM2LCAxMTEzOCwgCisgICAgMTExNDAsIDExMTQyLCAxMTE0NCwgMTExNDYsIDExMTQ4LCAxMTE1MCwgMTExNTIsIDExMTU0LCAxMTE1NiwgMTExNTgsIAorICAgIDExMTYwLCAxMTE2MiwgMTExNjQsIDExMTY2LCAxMTE2OCwgMTExNzAsIDExMTcyLCAxMTE3NCwgMTExNzYsIDExMTc4LCAKKyAgICAxMTE4MCwgMTExODIsIDExMTg0LCAxMTE4NiwgMTExODgsIDExMTkwLCAxMTE5MiwgMTExOTQsIDExMTk2LCAxMTE5OCwgCisgICAgMTEyMDAsIDExMjAyLCAxMTIwNCwgMTEyMDYsIDExMjA4LCAxMTIxMCwgMTEyMTIsIDExMjE0LCAxMTIxNiwgMTEyMTgsIAorICAgIDExMjIwLCAxMTIyMiwgMTEyMjQsIDExMjI2LCAxMTIyOCwgMTEyMzAsIDExMjMyLCAxMTIzNCwgMTEyMzYsIDExMjM4LCAKKyAgICAxMTI0MCwgMTEyNDIsIDExMjQ0LCAxMTI0NiwgMTEyNDgsIDExMjUwLCAxMTI1MiwgMTEyNTQsIDExMjU2LCAxMTI1OCwgCisgICAgMTEyNjAsIDExMjYyLCAxMTI2NCwgMTEyNjYsIDExMjY4LCAxMTI3MCwgMTEyNzIsIDExMjc0LCAxMTI3NiwgMTEyNzgsIAorICAgIDExMjgwLCAxMTI4MiwgMTEyODQsIDExMjg2LCAxMTI4OCwgMTEyOTAsIDExMjkyLCAxMTI5NCwgMTEyOTYsIDExMjk4LCAKKyAgICAxMTMwMCwgMTEzMDIsIDExMzA0LCAxMTMwNiwgMTEzMDgsIDExMzEwLCAxMTMxMiwgMTEzMTQsIDExMzE2LCAxMTMxOCwgCisgICAgMTEzMjAsIDExMzIyLCAxMTMyNCwgMTEzMjYsIDExMzI4LCAxMTMzMCwgMTEzMzIsIDExMzM0LCAxMTMzNiwgMTEzMzgsIAorICAgIDExMzQwLCAxMTM0MiwgMTEzNDQsIDExMzQ2LCAxMTM0OCwgMTEzNTAsIDExMzUyLCAxMTM1NCwgMTEzNTYsIDExMzU4LCAKKyAgICAxMTM2MCwgMTEzNjIsIDExMzY0LCAxMTM2NiwgMTEzNjgsIDExMzcwLCAxMTM3MiwgMTEzNzQsIDExMzc2LCAxMTM3OCwgCisgICAgMTEzODAsIDExMzgyLCAxMTM4NCwgMTEzODYsIDExMzg4LCAxMTM5MCwgMTEzOTIsIDExMzk0LCAxMTM5NiwgMTEzOTgsIAorICAgIDExNDAwLCAxMTQwMiwgMTE0MDQsIDExNDA2LCAxMTQwOCwgMTE0MTAsIDExNDEyLCAxMTQxNCwgMTE0MTYsIDExNDE4LCAKKyAgICAxMTQyMCwgMTE0MjIsIDExNDI0LCAxMTQyNiwgMTE0MjgsIDExNDMwLCAxMTQzMiwgMTE0MzQsIDExNDM2LCAxMTQzOCwgCisgICAgMTE0NDAsIDExNDQyLCAxMTQ0NCwgMTE0NDYsIDExNDQ4LCAxMTQ1MCwgMTE0NTIsIDExNDU0LCAxMTQ1NiwgMTE0NTgsIAorICAgIDExNDYwLCAxMTQ2MiwgMTE0NjQsIDExNDY2LCAxMTQ2OCwgMTE0NzAsIDExNDcyLCAxMTQ3NCwgMTE0NzYsIDExNDc4LCAKKyAgICAxMTQ4MCwgMTE0ODIsIDExNDg0LCAxMTQ4NiwgMTE0ODgsIDExNDkwLCAxMTQ5MiwgMTE0OTQsIDExNDk2LCAxMTQ5OCwgCisgICAgMTE1MDAsIDExNTAyLCAxMTUwNCwgMTE1MDYsIDExNTA4LCAxMTUxMCwgMTE1MTIsIDExNTE0LCAxMTUxNiwgMTE1MTgsIAorICAgIDExNTIwLCAxMTUyMiwgMTE1MjQsIDExNTI2LCAxMTUyOCwgMTE1MzAsIDExNTMyLCAxMTUzNCwgMTE1MzYsIDExNTM4LCAKKyAgICAxMTU0MCwgMTE1NDIsIDExNTQ0LCAxMTU0NiwgMTE1NDgsIDExNTUwLCAxMTU1MiwgMTE1NTQsIDExNTU2LCAxMTU1OCwgCisgICAgMTE1NjAsIDExNTYyLCAxMTU2NCwgMTE1NjYsIDExNTY4LCAxMTU3MCwgMTE1NzIsIDExNTc0LCAxMTU3NiwgMTE1NzgsIAorICAgIDExNTgwLCAxMTU4MiwgMTE1ODQsIDExNTg2LCAxMTU4OCwgMTE1OTAsIDExNTkyLCAxMTU5NCwgMTE1OTYsIDExNTk4LCAKKyAgICAxMTYwMCwgMTE2MDIsIDExNjA0LCAxMTYwNiwgMTE2MDgsIDExNjEwLCAxMTYxMiwgMTE2MTQsIDExNjE2LCAxMTYxOCwgCisgICAgMTE2MjAsIDExNjIyLCAxMTYyNCwgMTE2MjYsIDExNjI4LCAxMTYzMCwgMTE2MzIsIDExNjM0LCAxMTYzNiwgMTE2MzgsIAorICAgIDExNjQwLCAxMTY0MiwgMTE2NDQsIDExNjQ2LCAxMTY0OCwgMTE2NTAsIDExNjUyLCAxMTY1NCwgMTE2NTYsIDExNjU4LCAKKyAgICAxMTY2MCwgMTE2NjIsIDExNjY0LCAxMTY2NiwgMTE2NjgsIDExNjcwLCAxMTY3MiwgMTE2NzQsIDExNjc2LCAxMTY3OCwgCisgICAgMTE2ODAsIDExNjgyLCAxMTY4NCwgMTE2ODYsIDExNjg4LCAxMTY5MCwgMTE2OTIsIDExNjk0LCAxMTY5NiwgMTE2OTgsIAorICAgIDExNzAwLCAxMTcwMiwgMTE3MDQsIDExNzA2LCAxMTcwOCwgMTE3MTAsIDExNzEyLCAxMTcxNCwgMTE3MTYsIDExNzE4LCAKKyAgICAxMTcyMCwgMTE3MjIsIDExNzI0LCAxMTcyNiwgMTE3MjgsIDExNzMwLCAxMTczMiwgMTE3MzQsIDExNzM2LCAxMTczOCwgCiAgICAgMTE3NDAsIDExNzQyLCAxMTc0NCwgMTE3NDYsIDExNzQ4LCAxMTc1MCwgMTE3NTIsIDExNzU0LCAxMTc1NiwgMTE3NTgsIAogICAgIDExNzYwLCAxMTc2MiwgMTE3NjQsIDExNzY2LCAxMTc2OCwgMTE3NzAsIDExNzcyLCAxMTc3NCwgMTE3NzYsIDExNzc4LCAKLSAgICAxMTc4MCwgMTE3ODIsIDExNzg0LCAxMTc4NiwgMTE3ODgsIDExNzkwLCAxMTc5MiwgMTE3OTQsIDExNzk2LCAxMTc5OCwgCi0gICAgMTE4MDAsIDExODAyLCAxMTgwNCwgMTE4MDYsIDExODA4LCAxMTgxMCwgMTE4MTIsIDExODE0LCAxMTgxNiwgMTE4MTgsIAotICAgIDExODIwLCAxMTgyMiwgMTE4MjQsIDExODI2LCAxMTgyOCwgMTE4MzAsIDExODMyLCAxMTgzNCwgMTE4MzYsIDExODM4LCAKLSAgICAxMTg0MCwgMTE4NDIsIDExODQ0LCAxMTg0NiwgMTE4NDgsIDExODUwLCAxMTg1MiwgMTE4NTQsIDExODU2LCAxMTg1OCwgCi0gICAgMTE4NjAsIDExODYyLCAxMTg2NCwgMTE4NjYsIDExODY4LCAxMTg3MCwgMTE4NzIsIDExODc0LCAxMTg3NiwgMTE4NzgsIAotICAgIDExODgwLCAxMTg4MiwgMTE4ODQsIDExODg2LCAxMTg4OCwgMTE4OTAsIDExODkyLCAxMTg5NCwgMTE4OTYsIDExODk4LCAKLSAgICAxMTkwMCwgMTE5MDIsIDExOTA0LCAxMTkwNiwgMTE5MDgsIDExOTEwLCAxMTkxMiwgMTE5MTQsIDExOTE2LCAxMTkxOCwgCi0gICAgMTE5MjAsIDExOTIyLCAxMTkyNCwgMTE5MjYsIDExOTI4LCAxMTkzMCwgMTE5MzIsIDExOTM0LCAxMTkzNiwgMTE5MzgsIAotICAgIDExOTQwLCAxMTk0MiwgMTE5NDQsIDExOTQ2LCAxMTk0OCwgMTE5NTAsIDExOTUyLCAxMTk1NCwgMTE5NTYsIDExOTU4LCAKLSAgICAxMTk2MCwgMTE5NjIsIDExOTY0LCAxMTk2NiwgMTE5NjgsIDExOTcwLCAxMTk3MiwgMTE5NzQsIDExOTc2LCAxMTk3OCwgCi0gICAgMTE5ODAsIDExOTgyLCAxMTk4NCwgMTE5ODYsIDExOTg4LCAxMTk5MCwgMTE5OTIsIDExOTk0LCAxMTk5NiwgMTE5OTgsIAotICAgIDEyMDAwLCAxMjAwMiwgMTIwMDQsIDEyMDA2LCAxMjAwOCwgMTIwMTAsIDEyMDEyLCAxMjAxNCwgMTIwMTYsIDEyMDE4LCAKLSAgICAxMjAyMCwgMTIwMjIsIDEyMDI0LCAxMjAyNiwgMTIwMjgsIDEyMDMwLCAxMjAzMiwgMTIwMzQsIDEyMDM2LCAxMjAzOCwgCi0gICAgMTIwNDAsIDEyMDQyLCAxMjA0NCwgMTIwNDYsIDEyMDQ4LCAxMjA1MCwgMTIwNTIsIDEyMDU0LCAxMjA1NiwgMTIwNTgsIAotICAgIDEyMDYwLCAxMjA2MiwgMTIwNjQsIDEyMDY2LCAxMjA2OCwgMTIwNzAsIDEyMDcyLCAxMjA3NCwgMTIwNzYsIDEyMDc4LCAKLSAgICAxMjA4MCwgMTIwODIsIDEyMDg0LCAxMjA4NiwgMTIwODgsIDEyMDkwLCAxMjA5MiwgMTIwOTQsIDEyMDk2LCAxMjA5OCwgCi0gICAgMTIxMDAsIDEyMTAyLCAxMjEwNCwgMTIxMDYsIDEyMTA4LCAxMjExMCwgMTIxMTIsIDEyMTE0LCAxMjExNiwgMTIxMTgsIAotICAgIDEyMTIwLCAxMjEyMiwgMTIxMjQsIDEyMTI2LCAxMjEyOCwgMTIxMzAsIDEyMTMyLCAxMjEzNCwgMTIxMzYsIDEyMTM4LCAKLSAgICAxMjE0MCwgMTIxNDIsIDEyMTQ0LCAxMjE0NiwgMTIxNDgsIDEyMTUwLCAxMjE1MiwgMTIxNTQsIDEyMTU2LCAxMjE1OCwgCi0gICAgMTIxNjAsIDEyMTYyLCAxMjE2NCwgMTIxNjYsIDEyMTY4LCAxMjE3MCwgMTIxNzIsIDEyMTc0LCAxMjE3NiwgMTIxNzgsIAotICAgIDEyMTgwLCAxMjE4MiwgMTIxODQsIDEyMTg2LCAxMjE4OCwgMTIxOTAsIDEyMTkyLCAxMjE5NCwgMTIxOTYsIDEyMTk4LCAKLSAgICAxMjIwMCwgMTIyMDIsIDEyMjA0LCAxMjIwNiwgMTIyMDgsIDEyMjEwLCAxMjIxMiwgMTIyMTQsIDEyMjE2LCAxMjIxOCwgCi0gICAgMTIyMjAsIDEyMjIyLCAxMjIyNCwgMTIyMjYsIDEyMjI4LCAxMjIzMCwgMTIyMzIsIDEyMjM0LCAxMjIzNiwgMTIyMzgsIAotICAgIDEyMjQwLCAxMjI0MiwgMTIyNDQsIDEyMjQ2LCAxMjI0OCwgMTIyNTAsIDEyMjUyLCAxMjI1NCwgMTIyNTYsIDEyMjU4LCAKLSAgICAxMjI2MCwgMTIyNjIsIDEyMjY0LCAxMjI2NiwgMTIyNjgsIDEyMjcwLCAxMjI3MiwgMTIyNzQsIDEyMjc2LCAxMjI3OCwgCi0gICAgMTIyODAsIDEyMjgyLCAxMjI4NCwgMTIyODYsIDEyMjg4LCAxMjI5MCwgMTIyOTIsIDEyMjk0LCAxMjI5NiwgMTIyOTgsIAotICAgIDEyMzAwLCAxMjMwMiwgMTIzMDQsIDEyMzA2LCAxMjMwOCwgMTIzMTAsIDAsIDAsIDEyMzEyLCAxMjMxNCwgMTIzMTYsIAorICAgIDExNzgwLCAxMTc4MiwgMCwgMCwgMTE3ODQsIDExNzg2LCAxMTc4OCwgMTE3OTAsIDExNzkyLCAxMTc5NCwgMTE3OTYsIAorICAgIDExNzk4LCAxMTgwMCwgMTE4MDIsIDExODA0LCAxMTgwNiwgMTE4MDgsIDExODEwLCAxMTgxMiwgMTE4MTQsIDExODE2LCAKKyAgICAxMTgxOCwgMTE4MjAsIDExODIyLCAxMTgyNCwgMTE4MjYsIDExODI4LCAxMTgzMCwgMTE4MzIsIDExODM0LCAxMTgzNiwgCisgICAgMTE4MzgsIDExODQwLCAxMTg0MiwgMTE4NDQsIDExODQ2LCAxMTg0OCwgMTE4NTAsIDExODUyLCAxMTg1NCwgMTE4NTYsIAorICAgIDExODU4LCAxMTg2MCwgMTE4NjIsIDExODY0LCAxMTg2NiwgMTE4NjgsIDExODcwLCAxMTg3MiwgMTE4NzQsIDExODc2LCAKKyAgICAxMTg3OCwgMTE4ODAsIDExODgyLCAxMTg4NCwgMTE4ODYsIDExODg4LCAxMTg5MCwgMTE4OTIsIDExODk0LCAxMTg5NiwgCisgICAgMTE4OTgsIDExOTAwLCAxMTkwMiwgMTE5MDQsIDExOTA2LCAxMTkwOCwgMTE5MTAsIDExOTEyLCAxMTkxNCwgMTE5MTYsIAorICAgIDExOTE4LCAxMTkyMCwgMTE5MjIsIDExOTI0LCAxMTkyNiwgMTE5MjgsIDExOTMwLCAxMTkzMiwgMTE5MzQsIDExOTM2LCAKKyAgICAxMTkzOCwgMTE5NDAsIDExOTQyLCAxMTk0NCwgMTE5NDYsIDExOTQ4LCAxMTk1MCwgMTE5NTIsIDExOTU0LCAxMTk1NiwgCisgICAgMTE5NTgsIDExOTYwLCAxMTk2MiwgMTE5NjQsIDExOTY2LCAxMTk2OCwgMTE5NzAsIDExOTcyLCAxMTk3NCwgMTE5NzYsIAorICAgIDExOTc4LCAxMTk4MCwgMTE5ODIsIDExOTg0LCAxMTk4NiwgMTE5ODgsIDExOTkwLCAxMTk5MiwgMTE5OTQsIDExOTk2LCAKKyAgICAxMTk5OCwgMTIwMDAsIDEyMDAyLCAxMjAwNCwgMTIwMDYsIDEyMDA4LCAxMjAxMCwgMTIwMTIsIDEyMDE0LCAxMjAxNiwgCisgICAgMTIwMTgsIDEyMDIwLCAxMjAyMiwgMTIwMjQsIDEyMDI2LCAxMjAyOCwgMTIwMzAsIDEyMDMyLCAxMjAzNCwgMTIwMzYsIAorICAgIDEyMDM4LCAxMjA0MCwgMTIwNDIsIDEyMDQ0LCAxMjA0NiwgMTIwNDgsIDEyMDUwLCAxMjA1MiwgMTIwNTQsIDEyMDU2LCAKKyAgICAxMjA1OCwgMTIwNjAsIDEyMDYyLCAxMjA2NCwgMTIwNjYsIDEyMDY4LCAxMjA3MCwgMTIwNzIsIDEyMDc0LCAxMjA3NiwgCisgICAgMTIwNzgsIDEyMDgwLCAxMjA4MiwgMTIwODQsIDEyMDg2LCAxMjA4OCwgMTIwOTAsIDEyMDkyLCAxMjA5NCwgMTIwOTYsIAorICAgIDEyMDk4LCAxMjEwMCwgMTIxMDIsIDEyMTA0LCAxMjEwNiwgMTIxMDgsIDEyMTEwLCAxMjExMiwgMTIxMTQsIDEyMTE2LCAKKyAgICAxMjExOCwgMTIxMjAsIDEyMTIyLCAxMjEyNCwgMTIxMjYsIDEyMTI4LCAxMjEzMCwgMTIxMzIsIDEyMTM0LCAxMjEzNiwgCisgICAgMTIxMzgsIDEyMTQwLCAxMjE0MiwgMTIxNDQsIDEyMTQ2LCAxMjE0OCwgMTIxNTAsIDEyMTUyLCAxMjE1NCwgMTIxNTYsIAorICAgIDEyMTU4LCAxMjE2MCwgMTIxNjIsIDEyMTY0LCAxMjE2NiwgMTIxNjgsIDEyMTcwLCAxMjE3MiwgMTIxNzQsIDEyMTc2LCAKKyAgICAxMjE3OCwgMTIxODAsIDEyMTgyLCAxMjE4NCwgMTIxODYsIDEyMTg4LCAxMjE5MCwgMTIxOTIsIDEyMTk0LCAxMjE5NiwgCisgICAgMTIxOTgsIDEyMjAwLCAxMjIwMiwgMTIyMDQsIDEyMjA2LCAxMjIwOCwgMTIyMTAsIDEyMjEyLCAxMjIxNCwgMTIyMTYsIAorICAgIDEyMjE4LCAxMjIyMCwgMTIyMjIsIDEyMjI0LCAxMjIyNiwgMTIyMjgsIDEyMjMwLCAxMjIzMiwgMTIyMzQsIDEyMjM2LCAKKyAgICAxMjIzOCwgMTIyNDAsIDEyMjQyLCAxMjI0NCwgMTIyNDYsIDEyMjQ4LCAxMjI1MCwgMTIyNTIsIDEyMjU0LCAxMjI1NiwgCisgICAgMTIyNTgsIDEyMjYwLCAxMjI2MiwgMTIyNjQsIDEyMjY2LCAxMjI2OCwgMTIyNzAsIDEyMjcyLCAxMjI3NCwgMTIyNzYsIAorICAgIDEyMjc4LCAxMjI4MCwgMTIyODIsIDEyMjg0LCAxMjI4NiwgMTIyODgsIDEyMjkwLCAxMjI5MiwgMTIyOTQsIDEyMjk2LCAKKyAgICAxMjI5OCwgMTIzMDAsIDEyMzAyLCAxMjMwNCwgMTIzMDYsIDEyMzA4LCAxMjMxMCwgMTIzMTIsIDEyMzE0LCAxMjMxNiwgCiAgICAgMTIzMTgsIDEyMzIwLCAxMjMyMiwgMTIzMjQsIDEyMzI2LCAxMjMyOCwgMTIzMzAsIDEyMzMyLCAxMjMzNCwgMTIzMzYsIAogICAgIDEyMzM4LCAxMjM0MCwgMTIzNDIsIDEyMzQ0LCAxMjM0NiwgMTIzNDgsIDEyMzUwLCAxMjM1MiwgMTIzNTQsIDEyMzU2LCAKLSAgICAxMjM1OCwgMTIzNjAsIDEyMzYyLCAxMjM2NCwgMTIzNjYsIDEyMzY4LCAxMjM3MCwgMTIzNzIsIDEyMzc0LCAxMjM3NiwgCi0gICAgMTIzNzgsIDEyMzgwLCAxMjM4MiwgMTIzODQsIDEyMzg2LCAxMjM4OCwgMTIzOTAsIDEyMzkyLCAxMjM5NCwgMTIzOTYsIAotICAgIDEyMzk4LCAxMjQwMCwgMTI0MDIsIDEyNDA0LCAxMjQwNiwgMTI0MDgsIDEyNDEwLCAxMjQxMiwgMTI0MTQsIDEyNDE2LCAKLSAgICAxMjQxOCwgMTI0MjAsIDEyNDIyLCAxMjQyNCwgMTI0MjYsIDEyNDI4LCAxMjQzMCwgMTI0MzIsIDEyNDM0LCAxMjQzNiwgCi0gICAgMTI0MzgsIDEyNDQwLCAxMjQ0MiwgMTI0NDQsIDEyNDQ2LCAxMjQ0OCwgMTI0NTAsIDEyNDUyLCAxMjQ1NCwgMTI0NTYsIAotICAgIDEyNDU4LCAxMjQ2MCwgMTI0NjIsIDEyNDY0LCAxMjQ2NiwgMTI0NjgsIDEyNDcwLCAxMjQ3MiwgMTI0NzQsIDEyNDc2LCAKLSAgICAxMjQ3OCwgMTI0ODAsIDEyNDgyLCAxMjQ4NCwgMTI0ODYsIDEyNDg4LCAxMjQ5MCwgMTI0OTIsIDEyNDk0LCAxMjQ5NiwgCi0gICAgMTI0OTgsIDEyNTAwLCAxMjUwMiwgMTI1MDQsIDEyNTA2LCAxMjUwOCwgMTI1MTAsIDEyNTEyLCAxMjUxNCwgMTI1MTYsIAotICAgIDEyNTE4LCAxMjUyMCwgMTI1MjIsIDEyNTI0LCAxMjUyNiwgMTI1MjgsIDEyNTMwLCAxMjUzMiwgMTI1MzQsIDEyNTM2LCAKLSAgICAxMjUzOCwgMTI1NDAsIDEyNTQyLCAxMjU0NCwgMTI1NDYsIDEyNTQ4LCAxMjU1MCwgMTI1NTIsIDEyNTU0LCAxMjU1NiwgCi0gICAgMTI1NTgsIDEyNTYwLCAxMjU2MiwgMTI1NjQsIDEyNTY2LCAxMjU2OCwgMTI1NzAsIDEyNTcyLCAxMjU3NCwgMTI1NzYsIAotICAgIDEyNTc4LCAxMjU4MCwgMTI1ODIsIDEyNTg0LCAxMjU4NiwgMTI1ODgsIDEyNTkwLCAxMjU5MiwgMTI1OTQsIDEyNTk2LCAKLSAgICAxMjU5OCwgMTI2MDAsIDEyNjAyLCAxMjYwNCwgMTI2MDYsIDEyNjA4LCAxMjYxMCwgMTI2MTIsIDEyNjE0LCAxMjYxNiwgCi0gICAgMTI2MTgsIDEyNjIwLCAxMjYyMiwgMTI2MjQsIDEyNjI2LCAxMjYyOCwgMTI2MzAsIDEyNjMyLCAxMjYzNCwgMTI2MzYsIAotICAgIDEyNjM4LCAxMjY0MCwgMTI2NDIsIDEyNjQ0LCAxMjY0NiwgMTI2NDgsIDEyNjUwLCAxMjY1MiwgMTI2NTQsIDEyNjU2LCAKLSAgICAxMjY1OCwgMTI2NjAsIDEyNjYyLCAxMjY2NCwgMTI2NjYsIDEyNjY4LCAxMjY3MCwgMTI2NzIsIDEyNjc0LCAxMjY3NiwgCi0gICAgMTI2NzgsIDEyNjgwLCAxMjY4MiwgMTI2ODQsIDEyNjg2LCAxMjY4OCwgMTI2OTAsIDEyNjkyLCAxMjY5NCwgMTI2OTYsIAotICAgIDEyNjk4LCAxMjcwMCwgMTI3MDIsIDEyNzA0LCAxMjcwNiwgMTI3MDgsIDEyNzEwLCAxMjcxMiwgMTI3MTQsIDEyNzE2LCAKLSAgICAxMjcxOCwgMTI3MjAsIDEyNzIyLCAxMjcyNCwgMTI3MjYsIDEyNzI4LCAxMjczMCwgMTI3MzIsIDEyNzM0LCAxMjczNiwgCi0gICAgMTI3MzgsIDEyNzQwLCAxMjc0MiwgMTI3NDQsIDEyNzQ2LCAxMjc0OCwgMTI3NTAsIDEyNzUyLCAxMjc1NCwgMTI3NTYsIAotICAgIDEyNzU4LCAxMjc2MCwgMTI3NjIsIDEyNzY0LCAxMjc2NiwgMTI3NjgsIDEyNzcwLCAxMjc3MiwgMTI3NzQsIDEyNzc2LCAKLSAgICAxMjc3OCwgMTI3ODAsIDEyNzgyLCAxMjc4NCwgMTI3ODYsIDEyNzg4LCAxMjc5MCwgMTI3OTIsIDEyNzk0LCAxMjc5NiwgCi0gICAgMTI3OTgsIDEyODAwLCAxMjgwMiwgMTI4MDQsIDEyODA2LCAxMjgwOCwgMTI4MTAsIDEyODEyLCAxMjgxNCwgMTI4MTYsIAotICAgIDEyODE4LCAxMjgyMCwgMTI4MjIsIDEyODI0LCAxMjgyNiwgMTI4MjgsIDEyODMwLCAxMjgzMiwgMTI4MzQsIDEyODM2LCAKLSAgICAxMjgzOCwgMTI4NDAsIDEyODQyLCAxMjg0NCwgMTI4NDYsIDEyODQ4LCAxMjg1MCwgMTI4NTIsIDEyODU0LCAxMjg1NiwgCi0gICAgMTI4NTgsIDEyODYwLCAxMjg2MiwgMTI4NjQsIDEyODY2LCAxMjg2OCwgMTI4NzAsIDEyODcyLCAxMjg3NCwgMTI4NzYsIAotICAgIDEyODc4LCAxMjg4MCwgMTI4ODIsIDEyODg0LCAxMjg4NiwgMTI4ODgsIDEyODkwLCAxMjg5MiwgMTI4OTQsIDEyODk2LCAKLSAgICAxMjg5OCwgMTI5MDAsIDEyOTAyLCAxMjkwNCwgMTI5MDYsIDEyOTA4LCAxMjkxMCwgMTI5MTIsIDEyOTE0LCAxMjkxNiwgCi0gICAgMTI5MTgsIDEyOTIwLCAxMjkyMiwgMTI5MjQsIDEyOTI2LCAxMjkyOCwgMTI5MzAsIDEyOTMyLCAxMjkzNCwgMTI5MzYsIAotICAgIDEyOTM4LCAxMjk0MCwgMTI5NDIsIDEyOTQ0LCAxMjk0NiwgMTI5NDgsIDEyOTUwLCAxMjk1MiwgMTI5NTQsIDEyOTU2LCAKLSAgICAxMjk1OCwgMTI5NjAsIDEyOTYyLCAxMjk2NCwgMTI5NjYsIDEyOTY4LCAxMjk3MCwgMTI5NzIsIDEyOTc0LCAxMjk3NiwgCi0gICAgMTI5NzgsIDEyOTgwLCAxMjk4MiwgMTI5ODQsIDEyOTg2LCAxMjk4OCwgMTI5OTAsIDEyOTkyLCAxMjk5NCwgMTI5OTYsIAotICAgIDEyOTk4LCAxMzAwMCwgMTMwMDIsIDEzMDA0LCAxMzAwNiwgMTMwMDgsIDEzMDEwLCAxMzAxMiwgMTMwMTQsIDEzMDE2LCAKLSAgICAxMzAxOCwgMTMwMjAsIDEzMDIyLCAxMzAyNCwgMTMwMjYsIDEzMDI4LCAxMzAzMCwgMTMwMzIsIDEzMDM0LCAxMzAzNiwgCi0gICAgMTMwMzgsIDEzMDQwLCAxMzA0MiwgMTMwNDQsIDEzMDQ2LCAxMzA0OCwgMTMwNTAsIDEzMDUyLCAxMzA1NCwgMTMwNTYsIAotICAgIDEzMDU4LCAxMzA2MCwgMTMwNjIsIDEzMDY0LCAxMzA2NiwgMTMwNjgsIDEzMDcwLCAxMzA3MiwgMTMwNzQsIDEzMDc2LCAKLSAgICAxMzA3OCwgMTMwODAsIDEzMDgyLCAxMzA4NCwgMTMwODYsIDEzMDg4LCAxMzA5MCwgMTMwOTIsIDEzMDk0LCAxMzA5NiwgCi0gICAgMTMwOTgsIDEzMTAwLCAxMzEwMiwgMTMxMDQsIDEzMTA2LCAxMzEwOCwgMTMxMTAsIDEzMTEyLCAxMzExNCwgMTMxMTYsIAotICAgIDEzMTE4LCAxMzEyMCwgMTMxMjIsIDEzMTI0LCAxMzEyNiwgMTMxMjgsIDEzMTMwLCAxMzEzMiwgMTMxMzQsIDEzMTM2LCAKLSAgICAxMzEzOCwgMTMxNDAsIDEzMTQyLCAxMzE0NCwgMTMxNDYsIDEzMTQ4LCAxMzE1MCwgMTMxNTIsIDEzMTU0LCAxMzE1NiwgCi0gICAgMTMxNTgsIDEzMTYwLCAxMzE2MiwgMTMxNjQsIDEzMTY2LCAxMzE2OCwgMTMxNzAsIDEzMTcyLCAxMzE3NCwgMTMxNzYsIAotICAgIDEzMTc4LCAxMzE4MCwgMTMxODIsIDEzMTg0LCAxMzE4NiwgMTMxODgsIDEzMTkwLCAxMzE5MiwgMTMxOTQsIDEzMTk2LCAKLSAgICAxMzE5OCwgMTMyMDAsIDEzMjAyLCAxMzIwNCwgMTMyMDYsIDEzMjA4LCAxMzIxMCwgMTMyMTIsIDEzMjE0LCAxMzIxNiwgCi0gICAgMTMyMTgsIDEzMjIwLCAxMzIyMiwgMTMyMjQsIDEzMjI2LCAxMzIyOCwgMTMyMzAsIDEzMjMyLCAxMzIzNCwgMTMyMzYsIAotICAgIDEzMjM4LCAxMzI0MCwgMTMyNDIsIDEzMjQ0LCAxMzI0NiwgMTMyNDgsIDEzMjUwLCAxMzI1MiwgMTMyNTQsIDEzMjU2LCAKLSAgICAxMzI1OCwgMTMyNjAsIDEzMjYyLCAxMzI2NCwgMTMyNjYsIDEzMjY4LCAxMzI3MCwgMTMyNzIsIDEzMjc0LCAxMzI3NiwgCi0gICAgMTMyNzgsIDEzMjgwLCAxMzI4MiwgMTMyODQsIDEzMjg2LCAxMzI4OCwgMTMyOTAsIDEzMjkyLCAxMzI5NCwgMTMyOTYsIAotICAgIDEzMjk4LCAxMzMwMCwgMTMzMDIsIDEzMzA0LCAxMzMwNiwgMTMzMDgsIDEzMzEwLCAxMzMxMiwgMTMzMTQsIDEzMzE2LCAKLSAgICAxMzMxOCwgMTMzMjAsIDEzMzIyLCAxMzMyNCwgMTMzMjYsIDEzMzI4LCAxMzMzMCwgMTMzMzIsIDEzMzM0LCAxMzMzNiwgCi0gICAgMTMzMzgsIDEzMzQwLCAxMzM0MiwgMTMzNDQsIDEzMzQ2LCAxMzM0OCwgMTMzNTAsIDEzMzUyLCAxMzM1NCwgMTMzNTYsIAotICAgIDEzMzU4LCAxMzM2MCwgMTMzNjIsIDEzMzY0LCAxMzM2NiwgMTMzNjgsIDEzMzcwLCAxMzM3MiwgMTMzNzQsIDEzMzc2LCAKLSAgICAxMzM3OCwgMTMzODAsIDEzMzgyLCAxMzM4NCwgMTMzODYsIDEzMzg4LCAxMzM5MCwgMTMzOTIsIDEzMzk0LCAxMzM5NiwgCi0gICAgMTMzOTgsIDEzNDAwLCAxMzQwMiwgMTM0MDQsIDEzNDA2LCAxMzQwOCwgMTM0MTAsIDEzNDEyLCAxMzQxNCwgMTM0MTYsIAotICAgIDEzNDE4LCAxMzQyMCwgMTM0MjIsIDEzNDI0LCAxMzQyNiwgMTM0MjgsIDEzNDMwLCAxMzQzMiwgMTM0MzQsIDEzNDM2LCAKLSAgICAxMzQzOCwgMTM0NDAsIDEzNDQyLCAxMzQ0NCwgMTM0NDYsIDEzNDQ4LCAxMzQ1MCwgMTM0NTIsIDEzNDU0LCAxMzQ1NiwgCi0gICAgMTM0NTgsIDEzNDYwLCAxMzQ2MiwgMTM0NjQsIDEzNDY2LCAxMzQ2OCwgMTM0NzAsIDEzNDcyLCAxMzQ3NCwgMTM0NzYsIAotICAgIDEzNDc4LCAxMzQ4MCwgMTM0ODIsIDEzNDg0LCAxMzQ4NiwgMTM0ODgsIDEzNDkwLCAxMzQ5MiwgMTM0OTQsIDAsIDAsIDAsIAorICAgIDEyMzU4LCAxMjM2MCwgMTIzNjIsIDEyMzY0LCAxMjM2NiwgMCwgMCwgMTIzNjgsIDEyMzcwLCAxMjM3MiwgMTIzNzQsIAorICAgIDEyMzc2LCAxMjM3OCwgMTIzODAsIDEyMzgyLCAxMjM4NCwgMTIzODYsIDEyMzg4LCAxMjM5MCwgMTIzOTIsIDEyMzk0LCAKKyAgICAxMjM5NiwgMTIzOTgsIDEyNDAwLCAxMjQwMiwgMTI0MDQsIDEyNDA2LCAxMjQwOCwgMTI0MTAsIDEyNDEyLCAxMjQxNCwgCisgICAgMTI0MTYsIDEyNDE4LCAxMjQyMCwgMTI0MjIsIDEyNDI0LCAxMjQyNiwgMTI0MjgsIDEyNDMwLCAxMjQzMiwgMTI0MzQsIAorICAgIDEyNDM2LCAxMjQzOCwgMTI0NDAsIDEyNDQyLCAxMjQ0NCwgMTI0NDYsIDEyNDQ4LCAxMjQ1MCwgMTI0NTIsIDEyNDU0LCAKKyAgICAxMjQ1NiwgMTI0NTgsIDEyNDYwLCAxMjQ2MiwgMTI0NjQsIDEyNDY2LCAxMjQ2OCwgMTI0NzEsIDEyNDc0LCAxMjQ3NywgCisgICAgMTI0ODAsIDEyNDgzLCAxMjQ4NiwgMTI0ODksIDEyNDkyLCAxMjQ5NSwgMTI0OTgsIDAsIDAsIDAsIDAsIDAsIDEyNTAxLCAKKyAgICAxMjUwNSwgMTI1MDksIDEyNTEzLCAxMjUxNywgMTI1MjEsIDEyNTI1LCAxMjUyOSwgMTI1MzMsIDEyNTM3LCAxMjU0MSwgCisgICAgMTI1NDUsIDEyNTQ5LCAxMjU1MywgMTI1NTcsIDEyNTYxLCAxMjU2NSwgMTI1NjksIDEyNTczLCAxMjU3NywgMTI1ODEsIAorICAgIDEyNTg1LCAxMjU4OSwgMTI1OTMsIDEyNTk3LCAxMjYwMSwgMTI2MDUsIDEyNjA5LCAxMjYxMSwgMTI2MTMsIDEyNjE2LCAwLCAKKyAgICAxMjYxOSwgMTI2MjEsIDEyNjIzLCAxMjYyNSwgMTI2MjcsIDEyNjI5LCAxMjYzMSwgMTI2MzMsIDEyNjM1LCAxMjYzNywgCisgICAgMTI2MzksIDEyNjQxLCAxMjY0MywgMTI2NDUsIDEyNjQ3LCAxMjY0OSwgMTI2NTEsIDEyNjUzLCAxMjY1NSwgMTI2NTcsIAorICAgIDEyNjU5LCAxMjY2MSwgMTI2NjMsIDEyNjY1LCAxMjY2NywgMTI2NjksIDEyNjcxLCAxMjY3NCwgMTI2NzcsIDEyNjgwLCAKKyAgICAxMjY4MywgMTI2ODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjkwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjY5MywgMTI2OTYsIDEyNjk5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcwMSwgMTI3MDMsIDEyNzA1LCAxMjcwNywgMTI3MDksIDEyNzExLCAKKyAgICAxMjcxMywgMTI3MTUsIDEyNzE3LCAxMjcxOSwgMTI3MjEsIDEyNzIzLCAxMjcyNSwgMTI3MjcsIDEyNzI5LCAxMjczMSwgCisgICAgMTI3MzMsIDEyNzM1LCAxMjczNywgMTI3MzksIDEyNzQxLCAxMjc0MywgMTI3NDUsIDEyNzQ3LCAxMjc0OSwgMTI3NTEsIAorICAgIDEyNzUzLCAxMjc1NSwgMTI3NTcsIDEyNzU5LCAxMjc2MSwgMTI3NjMsIDEyNzY1LCAxMjc2NywgMTI3NjksIDEyNzcxLCAKKyAgICAxMjc3MywgMTI3NzUsIDEyNzc3LCAxMjc3OSwgMTI3ODEsIDEyNzgzLCAxMjc4NSwgMCwgMCwgMCwgMCwgMCwgMTI3ODcsIAorICAgIDEyNzkxLCAxMjc5NSwgMTI3OTksIDEyODAzLCAxMjgwNywgMTI4MTEsIDEyODE1LCAxMjgxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTI4MjMsIDEyODI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjgyNywgMTI4MjksIDEyODMxLCAxMjgzMywgMTI4MzUsIAorICAgIDEyODM3LCAxMjgzOSwgMTI4NDEsIDEyODQzLCAxMjg0NSwgMTI4NDcsIDEyODQ5LCAxMjg1MSwgMTI4NTMsIDEyODU1LCAKKyAgICAxMjg1NywgMTI4NTksIDEyODYxLCAxMjg2MywgMTI4NjUsIDEyODY3LCAxMjg2OSwgMTI4NzEsIDEyODczLCAxMjg3NSwgCisgICAgMTI4NzcsIDEyODc5LCAxMjg4MSwgMTI4ODMsIDEyODg1LCAxMjg4NywgMTI4ODksIDEyODkxLCAxMjg5MywgMTI4OTUsIAorICAgIDEyODk3LCAxMjg5OSwgMTI5MDEsIDEyOTAzLCAxMjkwNSwgMTI5MDcsIDEyOTA5LCAxMjkxMSwgMTI5MTMsIDEyOTE1LCAKKyAgICAxMjkxNywgMTI5MTksIDEyOTIxLCAxMjkyMywgMTI5MjUsIDEyOTI3LCAxMjkyOSwgMTI5MzEsIDEyOTMzLCAxMjkzNSwgCisgICAgMTI5MzcsIDEyOTM5LCAxMjk0MSwgMTI5NDMsIDEyOTQ1LCAxMjk0NywgMTI5NDksIDEyOTUxLCAxMjk1MywgMTI5NTUsIAorICAgIDEyOTU3LCAxMjk1OSwgMTI5NjEsIDEyOTYzLCAxMjk2NSwgMTI5NjcsIDEyOTY5LCAxMjk3MSwgMTI5NzMsIDEyOTc1LCAKKyAgICAxMjk3NywgMTI5NzksIDEyOTgxLCAxMjk4MywgMTI5ODUsIDEyOTg3LCAxMjk4OSwgMTI5OTEsIDEyOTkzLCAxMjk5NSwgCisgICAgMTI5OTcsIDEyOTk5LCAxMzAwMSwgMTMwMDMsIDEzMDA1LCAxMzAwNywgMTMwMDksIDEzMDExLCAxMzAxMywgMTMwMTUsIAorICAgIDEzMDE3LCAxMzAxOSwgMTMwMjEsIDEzMDIzLCAxMzAyNSwgMTMwMjcsIDEzMDI5LCAxMzAzMSwgMTMwMzMsIDEzMDM1LCAKKyAgICAxMzAzNywgMTMwMzksIDEzMDQxLCAxMzA0MywgMTMwNDUsIDEzMDQ3LCAxMzA0OSwgMTMwNTEsIDEzMDUzLCAxMzA1NSwgCisgICAgMTMwNTcsIDEzMDU5LCAxMzA2MSwgMTMwNjMsIDEzMDY1LCAxMzA2NywgMTMwNjksIDEzMDcxLCAxMzA3MywgMTMwNzUsIAorICAgIDEzMDc3LCAxMzA3OSwgMTMwODEsIDEzMDgzLCAxMzA4NSwgMTMwODcsIDEzMDg5LCAxMzA5MSwgMTMwOTMsIDEzMDk1LCAKKyAgICAxMzA5NywgMTMwOTksIDEzMTAxLCAxMzEwMywgMTMxMDUsIDEzMTA3LCAxMzEwOSwgMTMxMTEsIDEzMTEzLCAxMzExNSwgCisgICAgMTMxMTcsIDEzMTE5LCAxMzEyMSwgMTMxMjMsIDEzMTI1LCAxMzEyNywgMTMxMjksIDEzMTMxLCAxMzEzMywgMTMxMzUsIAorICAgIDEzMTM3LCAxMzEzOSwgMTMxNDEsIDEzMTQzLCAxMzE0NSwgMTMxNDcsIDEzMTQ5LCAxMzE1MSwgMTMxNTMsIDEzMTU1LCAKKyAgICAxMzE1NywgMTMxNTksIDEzMTYxLCAxMzE2MywgMTMxNjUsIDEzMTY3LCAxMzE2OSwgMTMxNzEsIDEzMTczLCAxMzE3NSwgCisgICAgMTMxNzcsIDEzMTc5LCAxMzE4MSwgMTMxODMsIDEzMTg1LCAxMzE4NywgMTMxODksIDEzMTkxLCAxMzE5MywgMTMxOTUsIAorICAgIDEzMTk3LCAxMzE5OSwgMTMyMDEsIDEzMjAzLCAxMzIwNSwgMTMyMDcsIDEzMjA5LCAxMzIxMSwgMTMyMTMsIDEzMjE1LCAKKyAgICAxMzIxNywgMTMyMTksIDEzMjIxLCAxMzIyMywgMTMyMjUsIDEzMjI3LCAxMzIyOSwgMTMyMzEsIDEzMjMzLCAxMzIzNSwgCisgICAgMTMyMzcsIDEzMjM5LCAxMzI0MSwgMTMyNDMsIDEzMjQ1LCAxMzI0NywgMTMyNDksIDEzMjUxLCAxMzI1MywgMTMyNTUsIAorICAgIDEzMjU3LCAxMzI1OSwgMTMyNjEsIDEzMjYzLCAxMzI2NSwgMTMyNjcsIDEzMjY5LCAxMzI3MSwgMTMyNzMsIDEzMjc1LCAKKyAgICAxMzI3NywgMTMyNzksIDEzMjgxLCAxMzI4MywgMTMyODUsIDEzMjg3LCAxMzI4OSwgMTMyOTEsIDEzMjkzLCAxMzI5NSwgCisgICAgMTMyOTcsIDEzMjk5LCAxMzMwMSwgMTMzMDMsIDEzMzA1LCAxMzMwNywgMTMzMDksIDEzMzExLCAxMzMxMywgMTMzMTUsIAorICAgIDEzMzE3LCAxMzMxOSwgMTMzMjEsIDEzMzIzLCAxMzMyNSwgMTMzMjcsIDEzMzI5LCAxMzMzMSwgMTMzMzMsIDEzMzM1LCAKKyAgICAxMzMzNywgMTMzMzksIDEzMzQxLCAxMzM0MywgMTMzNDUsIDEzMzQ3LCAxMzM0OSwgMTMzNTEsIDEzMzUzLCAxMzM1NSwgCisgICAgMTMzNTcsIDEzMzU5LCAxMzM2MSwgMTMzNjMsIDEzMzY1LCAxMzM2NywgMTMzNjksIDEzMzcxLCAxMzM3MywgMTMzNzUsIAorICAgIDEzMzc3LCAxMzM3OSwgMTMzODEsIDEzMzgzLCAxMzM4NSwgMTMzODcsIDEzMzg5LCAxMzM5MSwgMTMzOTMsIDEzMzk1LCAKKyAgICAxMzM5NywgMTMzOTksIDEzNDAxLCAxMzQwMywgMTM0MDUsIDEzNDA3LCAxMzQwOSwgMTM0MTEsIDEzNDEzLCAxMzQxNSwgCisgICAgMTM0MTcsIDEzNDE5LCAxMzQyMSwgMTM0MjMsIDEzNDI1LCAxMzQyNywgMTM0MjksIDEzNDMxLCAxMzQzMywgMTM0MzUsIAorICAgIDEzNDM3LCAxMzQzOSwgMTM0NDEsIDEzNDQzLCAxMzQ0NSwgMTM0NDcsIDEzNDQ5LCAxMzQ1MSwgMTM0NTMsIDEzNDU1LCAKKyAgICAxMzQ1NywgMTM0NTksIDEzNDYxLCAxMzQ2MywgMTM0NjUsIDEzNDY3LCAxMzQ2OSwgMTM0NzEsIDEzNDczLCAxMzQ3NSwgCisgICAgMTM0NzcsIDEzNDc5LCAxMzQ4MSwgMTM0ODMsIDEzNDg1LCAxMzQ4NywgMTM0ODksIDEzNDkxLCAxMzQ5MywgMTM0OTUsIAorICAgIDEzNDk3LCAxMzQ5OSwgMTM1MDEsIDEzNTAzLCAxMzUwNSwgMTM1MDcsIDEzNTA5LCAxMzUxMSwgMTM1MTMsIDEzNTE1LCAKKyAgICAxMzUxNywgMTM1MTksIDEzNTIxLCAxMzUyMywgMTM1MjUsIDEzNTI3LCAxMzUyOSwgMTM1MzEsIDEzNTMzLCAxMzUzNSwgCisgICAgMTM1MzcsIDEzNTM5LCAxMzU0MSwgMTM1NDMsIDEzNTQ1LCAxMzU0NywgMTM1NDksIDEzNTUxLCAxMzU1MywgMTM1NTUsIAorICAgIDEzNTU3LCAxMzU1OSwgMTM1NjEsIDEzNTYzLCAxMzU2NSwgMTM1NjcsIDEzNTY5LCAxMzU3MSwgMTM1NzMsIDEzNTc1LCAKKyAgICAxMzU3NywgMTM1NzksIDEzNTgxLCAxMzU4MywgMTM1ODUsIDEzNTg3LCAxMzU4OSwgMTM1OTEsIDEzNTkzLCAxMzU5NSwgCisgICAgMTM1OTcsIDEzNTk5LCAxMzYwMSwgMTM2MDMsIDEzNjA1LCAxMzYwNywgMTM2MDksIDEzNjExLCAxMzYxMywgMTM2MTUsIAorICAgIDEzNjE3LCAxMzYxOSwgMTM2MjEsIDEzNjIzLCAxMzYyNSwgMTM2MjcsIDEzNjI5LCAxMzYzMSwgMTM2MzMsIDEzNjM1LCAKKyAgICAxMzYzNywgMTM2MzksIDEzNjQxLCAxMzY0MywgMTM2NDUsIDEzNjQ3LCAxMzY0OSwgMTM2NTEsIDEzNjUzLCAxMzY1NSwgCisgICAgMTM2NTcsIDEzNjU5LCAxMzY2MSwgMTM2NjMsIDEzNjY1LCAxMzY2NywgMTM2NjksIDEzNjcxLCAxMzY3MywgMTM2NzUsIAorICAgIDEzNjc3LCAxMzY3OSwgMTM2ODEsIDEzNjgzLCAxMzY4NSwgMTM2ODcsIDEzNjg5LCAxMzY5MSwgMTM2OTMsIDEzNjk1LCAKKyAgICAxMzY5NywgMTM2OTksIDEzNzAxLCAxMzcwMywgMTM3MDUsIDEzNzA3LCAxMzcwOSwgMTM3MTEsIDEzNzEzLCAxMzcxNSwgCisgICAgMTM3MTcsIDEzNzE5LCAxMzcyMSwgMTM3MjMsIDEzNzI1LCAxMzcyNywgMTM3MjksIDEzNzMxLCAxMzczMywgMTM3MzUsIAorICAgIDEzNzM3LCAxMzczOSwgMTM3NDEsIDEzNzQzLCAxMzc0NSwgMTM3NDcsIDEzNzQ5LCAxMzc1MSwgMTM3NTMsIDEzNzU1LCAKKyAgICAxMzc1NywgMTM3NTksIDEzNzYxLCAxMzc2MywgMTM3NjUsIDEzNzY3LCAxMzc2OSwgMTM3NzEsIDEzNzczLCAxMzc3NSwgCisgICAgMTM3NzcsIDEzNzc5LCAxMzc4MSwgMTM3ODMsIDEzNzg1LCAxMzc4NywgMTM3ODksIDEzNzkxLCAxMzc5MywgMTM3OTUsIAorICAgIDEzNzk3LCAxMzc5OSwgMTM4MDEsIDEzODAzLCAxMzgwNSwgMTM4MDcsIDEzODA5LCAxMzgxMSwgMTM4MTMsIDEzODE1LCAKKyAgICAxMzgxNywgMTM4MTksIDEzODIxLCAxMzgyMywgMTM4MjUsIDEzODI3LCAxMzgyOSwgMTM4MzEsIDEzODMzLCAxMzgzNSwgCisgICAgMTM4MzcsIDEzODM5LCAxMzg0MSwgMTM4NDMsIDEzODQ1LCAxMzg0NywgMTM4NDksIDEzODUxLCAxMzg1MywgMTM4NTUsIAorICAgIDEzODU3LCAxMzg1OSwgMTM4NjEsIDEzODYzLCAxMzg2NSwgMTM4NjcsIDEzODY5LCAxMzg3MSwgMTM4NzMsIDEzODc1LCAKKyAgICAxMzg3NywgMTM4NzksIDEzODgxLCAxMzg4MywgMTM4ODUsIDEzODg3LCAxMzg4OSwgMTM4OTEsIDEzODkzLCAxMzg5NSwgCisgICAgMTM4OTcsIDEzODk5LCAxMzkwMSwgMTM5MDMsIDEzOTA1LCAxMzkwNywgMTM5MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNDMzOSwzNTIgKzQ2NDEsMzkwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgCiB9OwogCiAvKiBORkMgcGFpcnMgKi8KLSNkZWZpbmUgQ09NUF9TSElGVCAzCisjZGVmaW5lIENPTVBfU0hJRlQgMgogc3RhdGljIHVuc2lnbmVkIHNob3J0IGNvbXBfaW5kZXhbXSA9IHsKLSAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCAKLSAgICAwLCAwLCAwLCA4LCAwLCA5LCAxMCwgMCwgMCwgMTEsIDEyLCAxMywgMTQsIDAsIDAsIDAsIDAsIDE1LCAxNiwgMTcsIDAsIDAsIAotICAgIDAsIDE4LCAxOSwgMjAsIDIxLCAwLCAwLCAwLCAyMiwgMCwgMCwgMCwgMCwgMCwgMjMsIDI0LCAyNSwgMjYsIDAsIDAsIDAsIAotICAgIDI3LCAyOCwgMjksIDMwLCAwLCAwLCAwLCAzMSwgMzIsIDMzLCAzNCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIDAsIDM2LCAKLSAgICAwLCAzNywgMzgsIDM5LCAwLCAwLCA0MCwgNDEsIDQyLCA0MywgMCwgMCwgMCwgNDQsIDQ1LCA0NiwgMCwgMCwgMCwgMCwgNDcsIAotICAgIDQ4LCA0OSwgNTAsIDAsIDAsIDUxLCA1MiwgNTMsIDU0LCAwLCAwLCAwLCA1NSwgNTYsIDAsIDAsIDAsIDAsIDAsIDU3LCA1OCwgCi0gICAgNTksIDYwLCAwLCAwLCAwLCA2MSwgNjIsIDYzLCAwLCAwLCAwLCAwLCA2NCwgNjUsIDY2LCA2NywgMCwgMCwgNjgsIDY5LCAKLSAgICA3MCwgNzEsIDAsIDAsIDAsIDcyLCAwLCA3MywgMCwgMCwgMCwgMCwgNzQsIDAsIDc1LCAwLCAwLCAwLCAwLCA3NiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzcsIDc4LCA3OSwgMCwgMCwgMCwgMCwgODAsIDgxLCA4MiwgODMsIDAsIDAsIDAsIDg0LCA4NSwgODYsIDAsIAotICAgIDAsIDAsIDAsIDg3LCA4OCwgMCwgODksIDAsIDAsIDkwLCA5MSwgMCwgOTIsIDAsIDAsIDAsIDAsIDkzLCA5NCwgOTUsIDAsIAotICAgIDAsIDAsIDk2LCA5NywgOTgsIDk5LCAwLCAwLCAwLCAxMDAsIDAsIDAsIDAsIDAsIDAsIDEwMSwgMTAyLCAwLCAxMDMsIDAsIAotICAgIDAsIDAsIDEwNCwgMTA1LCAxMDYsIDEwNywgMCwgMCwgMCwgMTA4LCAxMDksIDExMCwgMTExLCAwLCAwLCAwLCAxMTIsIDExMywgCi0gICAgMCwgMCwgMCwgMCwgMTE0LCAxMTUsIDExNiwgMTE3LCAwLCAwLCAwLCAxMTgsIDExOSwgMTIwLCAxMjEsIDAsIDAsIDAsIAotICAgIDEyMiwgMCwgMTIzLCAwLCAwLCAwLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMCwgMCwgMTI5LCAxMzAsIDEzMSwgMTMyLCAKLSAgICAwLCAwLCAwLCAxMzMsIDEzNCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzYsIDEzNywgMTM4LCAwLCAwLCAxMzksIDE0MCwgCi0gICAgMTQxLCAxNDIsIDAsIDAsIDAsIDAsIDE0MywgMTQ0LCAxNDUsIDAsIDAsIDAsIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMCwgMCwgCi0gICAgMCwgMTUwLCAwLCAxNTEsIDAsIDAsIDAsIDE1MiwgMTUzLCAxNTQsIDAsIDAsIDAsIDAsIDAsIDE1NSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTU2LCAxNTcsIDE1OCwgMCwgMCwgMCwgMCwgMTU5LCAxNjAsIDE2MSwgMTYyLCAwLCAwLCAxNjMsIDAsIDAsIDAsIAotICAgIDE2NCwgMCwgMCwgMTY1LCAxNjYsIDAsIDAsIDAsIDAsIDAsIDE2NywgMCwgMCwgMCwgMCwgMCwgMCwgMTY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNjksIDE3MCwgMCwgMCwgMCwgMCwgMCwgMTcxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzIsIDE3MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTc0LCAwLCAwLCAwLCAwLCAwLCAxNzUsIDE3NiwgMCwgMCwgMCwgMCwgMCwgMTc3LCAxNzgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwLCAwLCAwLCAwLCAwLCAwLCAxODEsIDE4MiwgMTgzLCAwLCAwLCAwLCAwLCAKLSAgICAxODQsIDE4NSwgMCwgMCwgMCwgMCwgMCwgMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAxODcsIDAsIDAsIDAsIDAsIDAsIDE4OCwgCi0gICAgMTg5LCAwLCAwLCAwLCAwLCAwLCAxOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5MSwgMTkyLCAwLCAwLCAwLCAwLCAwLCAxOTMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDE5NCwgMTk1LCAwLCAwLCAwLCAwLCAwLCAxOTYsIDE5NywgMCwgMCwgMCwgMCwgMCwgMTk4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxOTksIDAsIDAsIDAsIDAsIDAsIDIwMCwgMjAxLCAyMDIsIDAsIDAsIDAsIDAsIDIwMywgMjA0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyMDUsIDIwNiwgMCwgMCwgMCwgMCwgMCwgMjA3LCAwLCAwLCAwLCAwLCAwLCAyMDgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDIwOSwgMCwgMCwgMCwgMCwgMCwgMCwgMjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDIxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIxNSwgMCwgMCwgMCwgMCwgMCwgMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDIxOCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjE5LCAwLCAwLCAwLCAwLCAwLCAyMjAsIDIyMSwgMjIyLCAwLCAwLCAwLCAwLCAyMjMsIDIyNCwgCi0gICAgMjI1LCAwLCAwLCAwLCAwLCAyMjYsIDIyNywgMjI4LCAwLCAwLCAwLCAwLCAyMjksIDIzMCwgMjMxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyMzIsIDAsIDAsIDAsIDAsIDAsIDIzMywgMCwgMCwgMCwgMCwgMCwgMjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAyMzUsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDIzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAwLCAwLCAwLCAwLCAwLCAyMzgsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDIzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0MiwgMCwgMjQzLCAyNDQsIDAsIDAsIDAsIDI0NSwgMjQ2LCAwLCAwLCAwLCAwLCAyNDcsIDAsIDI0OCwgMCwgMjQ5LCAwLCAKLSAgICAwLCAyNTAsIDI1MSwgMjUyLCAwLCAwLCAwLCAwLCAyNTMsIDAsIDI1NCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAwLCAwLCAwLCAKLSAgICAwLCAyNTYsIDI1NywgMjU4LCAwLCAwLCAwLCAwLCAyNTksIDAsIDI2MCwgMCwgMjYxLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI2MywgMCwgMCwgMjY0LCAyNjUsIDI2NiwgMCwgMjY3LCAwLCAwLCAyNjgsIDAsIDI2OSwgMCwgMCwgCi0gICAgMCwgMCwgMjcwLCAwLCAyNzEsIDI3MiwgMCwgMCwgMCwgMjczLCAyNzQsIDAsIDI3NSwgMCwgMCwgMjc2LCAwLCAyNzcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3OCwgMCwgMCwgMCwgMCwgMjc5LCAyODAsIDI4MSwgMjgyLCAwLCAwLCAwLCAyODMsIDI4NCwgMCwgCi0gICAgMjg1LCAwLCAwLCAyODYsIDAsIDAsIDAsIDI4NywgMCwgMCwgMjg4LCAwLCAwLCAwLCAyODksIDAsIDAsIDAsIDAsIDAsIAotICAgIDI5MCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjk0LCAwLCAwLCAwLCAwLCAwLCAwLCAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjk3LCAwLCAwLCAwLCAwLCAwLCAyOTgsIDI5OSwgMCwgMCwgMCwgMCwgMCwgMzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzMDEsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMzAzLCAwLCAwLCAwLCAwLCAwLCAzMDQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzA2LCAwLCAwLCAwLCAwLCAwLCAzMDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDMxMSwgMzEyLCAwLCAwLCAwLCAwLCAwLCAzMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAzMTYsIDAsIDAsIDAsIDAsIDAsIDMxNywgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMywgMCwgMCwgMCwgMCwgMCwgMCwgMzI0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMzI3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAzMjgsIDAsIDAsIDAsIDAsIDAsIDMyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzMzEsIDAsIDAsIDAsIDAsIDAsIDAsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAwLCAwLCAwLCAwLCAwLCAzMzQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDMzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMzM2LCAzMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDMzOCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDMsIDAsIDAsIDAsIDAsIDAsIDM0NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzQ1LCAzNDYsIDAsIDAsIDAsIDAsIDAsIDM0NywgMCwgMCwgMCwgMCwgMCwgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzNDksIDAsIDAsIDAsIDAsIDAsIDAsIDM1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzNTIsIDAsIDAsIDAsIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgMCwgMzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAzNTUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDM1NiwgMCwgMCwgMCwgMCwgMCwgMzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAzNTgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMzYwLCAwLCAwLCAwLCAwLCAwLCAzNjEsIDM2MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMzYzLCAwLCAwLCAwLCAwLCAwLCAwLCAzNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDM2NSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzY2LCAwLCAwLCAwLCAwLCAwLCAzNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDM2OCwgMCwgMCwgMCwgMCwgMCwgMzY5LCAKLSAgICAzNzAsIDAsIDAsIDAsIDAsIDAsIDM3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAzNzMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDM3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMzc1LCAwLCAwLCAzNzYsIDAsIDAsIDAsIDM3NywgMCwgMCwgCi0gICAgMzc4LCAwLCAwLCAwLCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM4MCwgMCwgMCwgMCwgMCwgMCwgMzgxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAzODIsIDAsIDAsIDAsIDAsIDAsIDAsIDM4MywgMCwgMCwgMCwgMCwgMCwgMCwgMzg0LCAwLCAwLCAKLSAgICAzODUsIDAsIDAsIDM4NiwgMCwgMCwgMCwgMzg3LCAwLCAwLCAzODgsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzkwLCAwLCAwLCAwLCAwLCAwLCAzOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQsIDAsIDAsIDM5NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzk2LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAzOTcsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk5LCAwLCAwLCA0MDAsIDAsIDAsIAotICAgIDAsIDQwMSwgMCwgMCwgNDAyLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDA1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDA4LCAwLCAwLCA0MDksIDAsIDAsIDQxMCwgMCwgMCwgMCwgNDExLCAwLCAwLCA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQxMywgMCwgMCwgMCwgMCwgMCwgMCwgNDE0LCAwLCAwLCAwLCAwLCAwLCA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDE3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MTgsIDAsIDAsIDQxOSwgMCwgMCwgNDIwLCAwLCAwLCAwLCAKLSAgICA0MjEsIDAsIDAsIDQyMiwgMCwgMCwgNDIzLCAwLCAwLCAwLCA0MjQsIDAsIDAsIDQyNSwgMCwgMCwgMCwgNDI2LCAwLCAwLCAKLSAgICA0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDQyOCwgMCwgMCwgMCwgMCwgMCwgNDI5LCAwLCAwLCAwLCAwLCAwLCAwLCA0MzAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQzMSwgMCwgMCwgNDMyLCAwLCAwLCAwLCA0MzMsIDAsIDAsIDQzNCwgMCwgMCwgNDM1LCAwLCAwLCAKLSAgICAwLCA0MzYsIDAsIDAsIDQzNywgMCwgMCwgMCwgNDM4LCAwLCAwLCA0MzksIDAsIDAsIDQ0MCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDQxLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MywgMCwgMCwgMCwgMCwgMCwgNDQ0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0NiwgMCwgMCwgNDQ3LCAwLCAwLCAwLCA0NDgsIDAsIDAsIAotICAgIDQ0OSwgMCwgMCwgNDUwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNDUzLCAwLCAwLCAwLCAwLCAwLCA0NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1NSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDU2LCAwLCAwLCAwLCAwLCAwLCAwLCA0NTcsIDAsIDAsIDAsIDAsIDAsIDQ1OCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0NjAsIDAsIDAsIDQ2MSwgMCwgMCwgMCwgNDYyLCAwLCAwLCAwLCAwLCAwLCA0NjMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ2NCwgMCwgMCwgNDY1LCAwLCAwLCAwLCA0NjYsIDAsIDAsIDAsIDAsIDAsIDQ2NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDY4LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjksIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MCwgMCwgMCwgMCwgMCwgMCwgNDcxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgMCwgMCwgNDc0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDc3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NzgsIDAsIDAsIDAsIDAsIDAsIDQ3OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MiwgMCwgMCwgMCwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODQsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NSwgMCwgMCwgMCwgMCwgMCwgMCwgNDg2LCAwLCAwLCAwLCAwLCAwLCA0ODcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg5LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ5MSwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDk4LCAwLCAwLCAwLCAwLCAwLCA0OTksIDAsIDAsIDAsIDAsIDAsIDAsIDUwMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTAxLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDIsIDAsIDAsIDAsIDAsIDAsIDUwMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTA0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDUwNiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNTEwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTEzLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTQsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNSwgMCwgMCwgMCwgMCwgMCwgNTE2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDUxOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgMCwgMCwgMCwgMCwgMCwgMCwgNTIyLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA1MjMsIDAsIDAsIDAsIDAsIDAsIDUyNCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNywgMCwgMCwgMCwgMCwgMCwgNTI4LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUzMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMxLCAwLCAwLCAwLCAwLCAwLCA1MzIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDUzMywgMCwgMCwgMCwgMCwgMCwgMCwgNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDUzNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTM3LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUzOSwgMCwgMCwgMCwgMCwgMCwgNTQwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNTQ2LCAwLCAwLCAwLCAwLCAwLCAwLCA1NDcsIDAsIDAsIDAsIDAsIDAsIDU0OCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1MSwgMCwgMCwgMCwgMCwgMCwgNTUyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAwLCAwLCA0LCA1LCA2LCA3LCA4LCA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMCwgMCwgMCwgMTEsIDAsIDEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMTQsIAorICAgIDE1LCAwLCAwLCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMSwgMzIsIDMzLCAwLCAwLCAzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzUsIDM2LCAzNywgMzgsIDM5LCA0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgMCwgCisgICAgNTAsIDAsIDUxLCA1MiwgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCA1NSwgNTYsIDU3LCA1OCwgNTksIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDYwLCA2MSwgMCwgMCwgNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzLCA2NCwgNjUsIDAsIAorICAgIDY2LCA2NywgNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3NiwgMCwgNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4LCA3OSwgMCwgODAsIDgxLCA4MiwgCisgICAgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg0LCA4NSwgODYsIDAsIDg3LCA4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODksIDkwLCAwLCA5MSwgOTIsIDkzLCAwLCAwLCAwLCAwLCAwLCAwLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxMDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMSwgMCwgMCwgMTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDMsIAorICAgIDEwNCwgMCwgMCwgMTA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDEwNywgMTA4LCAxMDksIDAsIDExMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTExLCAxMTIsIAorICAgIDAsIDExMywgMTE0LCAwLCAxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMiwgMCwgMCwgMTIzLCAwLCAxMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNSwgCisgICAgMTI2LCAxMjcsIDEyOCwgMCwgMTI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDEzMSwgMTMyLCAxMzMsIAorICAgIDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMCwgCisgICAgMTQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OSwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE1NSwgMTU2LCAxNTcsIDE1OCwgMTU5LCAxNjAsIDE2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYyLCAKKyAgICAwLCAxNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NCwgMCwgMCwgMTY1LCAxNjYsIDE2NywgMCwgMTY4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNjksIDAsIDAsIDE3MCwgMTcxLCAxNzIsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTc0LCAxNzUsIDAsIDAsIDE3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTc3LCAxNzgsIDE3OSwgMTgwLCAwLCAxODEsIAorICAgIDE4MiwgMTgzLCAwLCAwLCAwLCAwLCAwLCAwLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMCwgMTg5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOTAsIDE5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTkyLCAxOTMsIDE5NCwgCisgICAgMTk1LCAxOTYsIDE5NywgMTk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOTksIDIwMCwgMjAxLCAwLCAyMDIsIDIwMywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMTcsIDAsIDAsIDAsIAorICAgIDIxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAwLCAyMjMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDIyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjI1LCAyMjYsIDIyNywgMCwgCisgICAgMjI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjksIDIzMCwgMjMxLCAwLCAyMzIsIDAsIDIzMywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjM0LCAyMzUsIDAsIDAsIDAsIDAsIDAsIDIzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMjM3LCAyMzgsIDIzOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDQsIDI0NSwgMjQ2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI0OCwgMjQ5LCAyNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MSwgMjUyLCAyNTMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjU1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNTYsIDI1NywgMCwgMjU4LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNTksIDI2MCwgMjYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2NiwgMjY3LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcwLCAyNzEsIDI3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjczLCAyNzQsIDI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3OCwgMjc5LCAKKyAgICAwLCAyODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4MSwgMjgyLCAyODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI4NCwgMjg1LCAyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjg4LCAyODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5MywgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMjk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMDEsIDMwMiwgMzAzLCAwLCAwLCAzMDQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDMwNSwgMzA2LCAzMDcsIDAsIDMwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzA5LCAKKyAgICAzMTAsIDMxMSwgMCwgMzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTMsIDAsIDMxNCwgMCwgMzE1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMzI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDMyNiwgMzI3LCAwLCAzMjgsIDMyOSwgMCwgMCwgMzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzEsIDAsIAorICAgIDAsIDMzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMzLCAzMzQsIDAsIDAsIDMzNSwgMCwgMCwgMCwgMzM2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAzMzcsIDMzOCwgMzM5LCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MSwgMCwgMCwgCisgICAgMzQyLCAzNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMzQ1LCAzNDYsIDM0NywgMCwgMzQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDksIDAsIDAsIDAsIAorICAgIDM1MCwgMCwgMCwgMzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgMzU0LCAzNTUsIDM1NiwgMCwgMzU3LCAwLCAKKyAgICAwLCAzNTgsIDM1OSwgMCwgMCwgMCwgMCwgMCwgMzYwLCAwLCAwLCAwLCAzNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM2MiwgMCwgMCwgMzYzLCAzNjQsIDAsIDAsIDM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMzY2LCAzNjcsIDAsIDM2OCwgMCwgMCwgCisgICAgMCwgMzY5LCAwLCAwLCAwLCAwLCAwLCAzNzAsIDM3MSwgMCwgMCwgMzcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAzNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAwLCAwLCAKKyAgICAzNzksIDAsIDAsIDAsIDAsIDAsIDAsIDM4MCwgMCwgMCwgMzgxLCAwLCAwLCAwLCAzODIsIDAsIDAsIDAsIDAsIDAsIDM4MywgCisgICAgMzg0LCAwLCAwLCAwLCAwLCAwLCAzODUsIDAsIDAsIDAsIDAsIDAsIDAsIDM4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMzg3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzODgsIDAsIDAsIDAsIDAsIDAsIDAsIDM4OSwgMzkwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDM5MiwgMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM5NSwgMzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzk5LCA0MDAsIDQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNCwgCisgICAgNDA1LCA0MDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMCwgNDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxMywgNDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNiwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE3LCA0MTgsIDQxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MjEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyMiwgNDIzLCA0MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzMsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0NiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NDgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDUzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ1NSwgNDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NTcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDU5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDYyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0NjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNDY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NjksIDAsIAorICAgIDQ3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA0NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0NzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NiwgNDc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3OSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0ODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNDg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0ODcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDg5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OTYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDUsIAorICAgIDUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgMCwgMCwgMCwgMCwgNTEwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxMiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MTcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUxOCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5LCAwLCAwLCAwLCAwLCAwLCAwLCA1MjAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MjYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyNywgMCwgMCwgMCwgMCwgMCwgMCwgNTI4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MjksIDAsIDAsIDAsIDAsIDAsIDAsIDUzMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MzIsIDUzMywgMCwgMCwgMCwgMCwgMCwgNTM0LCAwLCAwLCAwLCAwLCAwLCAwLCA1MzUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUzNiwgMCwgMCwgMCwgMCwgMCwgMCwgNTM3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MzgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzOSwgNTQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTQzLCAwLCAwLCAwLCAwLCAwLCAwLCA1NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDU0NSwgMCwgMCwgMCwgMCwgMCwgNTQ2LCAKKyAgICA1NDcsIDAsIDAsIDAsIDAsIDAsIDU0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA1NTAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU1MSwgMCwgMCwgMCwgMCwgMCwgMCwgNTUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NTYsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTU4LCAwLCAwLCAwLCAwLCAwLCA1NTksIDAsIDAsIDAsIDAsIDAsIDAsIDU2MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTYxLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU3MiwgMCwgMCwgMCwgMCwgMCwgNTczLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzQsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTc2LCAwLCAwLCAwLCAwLCAwLCA1NzcsIDU3OCwgMCwgMCwgMCwgMCwgMCwgNTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODYsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDU5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTkxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDU5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1OTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5NiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1OTgsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDEsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjAzLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDYwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA2MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYwOCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTMsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDYxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjIxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyNiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM2LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDYzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM5LCA2NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDY1NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYwLCA2NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDY2MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjYzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY2NSwgNjY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDY2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3NCwgCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgY29tcF9kYXRhW10gPSB7Ci0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNCwgMCwgMCwgMCwgMCwgMCwgODgwMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNSwgMCwgMCwgMTkyLCAxOTMsIDE5NCwgMTk1LCAyNTYsIDI1OCwgNTUwLCAKLSAgICAxOTYsIDc4NDIsIDE5NywgMCwgNDYxLCA1MTIsIDUxNCwgMCwgMCwgMCwgNzg0MCwgMCwgNzY4MCwgMCwgMCwgMjYwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjgyLCAwLCAwLCA3Njg0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3Njg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjIsIDI2NCwgMCwgMCwgMCwgMjY2LCAKLSAgICAwLCAwLCAwLCAwLCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5OSwgMCwgMCwgMCwgMCwgMCwgMCwgNzY5MCwgCi0gICAgMCwgMCwgMCwgMCwgMjcwLCAwLCAwLCAwLCAwLCAwLCA3NjkyLCAwLCAwLCAwLCA3Njk2LCAwLCA3Njk4LCAwLCAwLCA3Njk0LCAKLSAgICAwLCAwLCAwLCAyMDAsIDIwMSwgMjAyLCA3ODY4LCAyNzQsIDI3NiwgMjc4LCAyMDMsIDc4NjYsIDAsIDAsIDI4MiwgNTE2LCAKLSAgICA1MTgsIDAsIDAsIDAsIDc4NjQsIDAsIDAsIDAsIDU1MiwgMjgwLCA3NzA0LCAwLCA3NzA2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NzEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDAsIDI4NCwgMCwgNzcxMiwgMjg2LCAyODgsIDAsIAotICAgIDAsIDAsIDAsIDQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyOTIsIDAsIDAsIDAsIDc3MTQsIDc3MTgsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgNzcxNiwgMCwgMCwgMCwgCi0gICAgNzcyMCwgMCwgMCwgNzcyMiwgMCwgMCwgMCwgMCwgMCwgMjA0LCAyMDUsIDIwNiwgMjk2LCAyOTgsIDMwMCwgMzA0LCAyMDcsIAotICAgIDc4ODAsIDAsIDAsIDQ2MywgNTIwLCA1MjIsIDAsIDAsIDAsIDc4ODIsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgNzcyNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI4LCAwLCA0ODgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc3MzAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgNzczMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTcsIDAsIDAsIDAsIDAsIDAsIDc3MzQsIDAsIAotICAgIDAsIDAsIDMxNSwgMCwgNzc0MCwgMCwgMCwgNzczOCwgMCwgMCwgMCwgMCwgNzc0MiwgMCwgMCwgMCwgMCwgNzc0NCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzc0NiwgMCwgMCwgMCwgMCwgNTA0LCAzMjMsIDAsIDIwOSwgMCwgMCwgNzc0OCwgCi0gICAgMCwgMCwgMCwgMCwgMzI3LCAwLCAwLCAwLCAwLCAwLCA3NzUwLCAwLCAwLCAwLCAzMjUsIDAsIDc3NTQsIDAsIDAsIDc3NTIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxMCwgMjExLCAyMTIsIDIxMywgMzMyLCAzMzQsIDU1OCwgMjE0LCAKLSAgICA3ODg2LCAwLCAzMzYsIDQ2NSwgNTI0LCA1MjYsIDAsIDAsIDQxNiwgNzg4NCwgMCwgMCwgMCwgMCwgNDkwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3NzY0LCAwLCAwLCAwLCAwLCA3NzY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDAsIDAsIDAsIAotICAgIDAsIDAsIDc3NjgsIDAsIDAsIDAsIDAsIDM0NCwgNTI4LCA1MzAsIDAsIDAsIDAsIDc3NzAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgCi0gICAgMCwgMCwgNzc3NCwgMCwgMCwgMCwgMCwgMzQ2LCAzNDgsIDAsIDAsIDAsIDc3NzYsIDAsIDAsIDAsIDAsIDM1MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzc3OCwgMCwgMCwgNTM2LCAzNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODYsIDAsIDAsIDAsIDAsIDM1NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNzc4OCwgMCwgMCwgNTM4LCAzNTQsIDAsIDc3OTIsIDAsIDAsIDc3OTAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDIxNywgMjE4LCAyMTksIDM2MCwgMzYyLCAzNjQsIDAsIDIyMCwgNzkxMCwgMzY2LCAzNjgsIAotICAgIDQ2NywgNTMyLCA1MzQsIDAsIDAsIDQzMSwgNzkwOCwgNzc5NCwgMCwgMCwgMCwgMzcwLCA3Nzk4LCAwLCA3Nzk2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3ODA0LCAwLCAwLCAwLCAwLCAwLCA3ODA2LCAwLCAwLCAwLCAwLCA3ODA4LCA3ODEwLCAzNzIsIDAsIAotICAgIDAsIDAsIDc4MTQsIDc4MTIsIDAsIDc4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MTgsIDc4MjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc5MjIsIDIyMSwgMzc0LCA3OTI4LCA1NjIsIDAsIDc4MjIsIDM3NiwgNzkyNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNzkyNCwgMCwgMCwgMCwgMCwgMCwgMzc3LCA3ODI0LCAwLCAwLCAwLCAzNzksIDAsIDAsIDAsIDAsIAotICAgIDM4MSwgMCwgMCwgMCwgMCwgMCwgNzgyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgyOCwgMCwgMCwgMCwgMjI0LCAKLSAgICAyMjUsIDIyNiwgMjI3LCAyNTcsIDI1OSwgNTUxLCAyMjgsIDc4NDMsIDIyOSwgMCwgNDYyLCA1MTMsIDUxNSwgMCwgMCwgMCwgCi0gICAgNzg0MSwgMCwgNzY4MSwgMCwgMCwgMjYxLCAwLCAwLCAwLCAwLCAwLCA3NjgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA3Njg1LCA3Njg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjMsIDI2NSwgMCwgMCwgMCwgCi0gICAgMjY3LCAwLCAwLCAwLCAwLCAyNjksIDAsIDIzMSwgMCwgMCwgMCwgMCwgMCwgMCwgNzY5MSwgMCwgMCwgMCwgMCwgMjcxLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3NjkzLCAwLCAwLCAwLCA3Njk3LCAwLCA3Njk5LCAwLCAwLCA3Njk1LCAwLCAwLCAwLCAyMzIsIDIzMywgCi0gICAgMjM0LCA3ODY5LCAyNzUsIDI3NywgMjc5LCAyMzUsIDc4NjcsIDAsIDAsIDI4MywgNTE3LCA1MTksIDAsIDAsIDAsIDc4NjUsIAotICAgIDAsIDAsIDAsIDU1MywgMjgxLCA3NzA1LCAwLCA3NzA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzExLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDI4NSwgMCwgNzcxMywgMjg3LCAyODksIDAsIDAsIDAsIDAsIDQ4NywgMCwgCi0gICAgMjkxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyOTMsIDAsIDAsIDAsIDc3MTUsIDc3MTksIDAsIDAsIDAsIAotICAgIDU0MywgMCwgMCwgMCwgMCwgMCwgNzcxNywgMCwgMCwgMCwgNzcyMSwgMCwgMCwgNzcyMywgMCwgNzgzMCwgMCwgMCwgMCwgCi0gICAgMjM2LCAyMzcsIDIzOCwgMjk3LCAyOTksIDMwMSwgMCwgMjM5LCA3ODgxLCAwLCAwLCA0NjQsIDUyMSwgNTIzLCAwLCAwLCAwLCAKLSAgICA3ODgzLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDc3MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDMwOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNDk2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDc3MzEsIDAsIDAsIDAsIDMxMSwgMCwgMCwgMCwgMCwgNzczMywgMCwgMCwgMCwgCi0gICAgMCwgMzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDc3MzUsIDAsIDAsIDAsIAotICAgIDMxNiwgMCwgNzc0MSwgMCwgMCwgNzczOSwgMCwgMCwgMCwgMCwgNzc0MywgMCwgMCwgMCwgMCwgNzc0NSwgMCwgMCwgNzc0NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA1LCAzMjQsIDAsIDI0MSwgMCwgMCwgNzc0OSwgMCwgMCwgCi0gICAgMCwgMCwgMzI4LCAwLCAwLCAwLCAwLCAwLCA3NzUxLCAwLCAwLCAwLCAzMjYsIDAsIDc3NTUsIDAsIDAsIDc3NTMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMzMzLCAzMzUsIDU1OSwgMjQ2LCA3ODg3LCAKLSAgICAwLCAzMzcsIDQ2NiwgNTI1LCA1MjcsIDAsIDAsIDQxNywgNzg4NSwgMCwgMCwgMCwgMCwgNDkxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3NzY1LCAwLCAwLCAwLCAwLCA3NzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNDEsIDAsIDAsIDAsIDAsIAotICAgIDc3NjksIDAsIDAsIDAsIDAsIDM0NSwgNTI5LCA1MzEsIDAsIDAsIDAsIDc3NzEsIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgCi0gICAgNzc3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQ3LCAzNDksIDAsIDAsIDAsIDc3NzcsIDAsIDAsIAotICAgIDAsIDAsIDM1MywgMCwgMCwgMCwgMCwgMCwgNzc3OSwgMCwgMCwgNTM3LCAzNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODcsIAotICAgIDc4MzEsIDAsIDAsIDAsIDM1NywgMCwgMCwgMCwgMCwgMCwgNzc4OSwgMCwgMCwgNTM5LCAzNTUsIDAsIDc3OTMsIDAsIDAsIAotICAgIDc3OTEsIDAsIDAsIDAsIDI0OSwgMjUwLCAyNTEsIDM2MSwgMzYzLCAzNjUsIDAsIDI1MiwgNzkxMSwgMzY3LCAzNjksIDQ2OCwgCi0gICAgNTMzLCA1MzUsIDAsIDAsIDQzMiwgNzkwOSwgNzc5NSwgMCwgMCwgMCwgMzcxLCA3Nzk5LCAwLCA3Nzk3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3ODA1LCAwLCAwLCAwLCAwLCAwLCA3ODA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3ODA5LCA3ODExLCAzNzMsIDAsIDAsIDAsIDc4MTUsIDc4MTMsIDAsIDc4MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MTcsIAotICAgIDAsIDAsIDc4MTksIDc4MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjMsIDI1MywgMzc1LCA3OTI5LCA1NjMsIDAsIDc4MjMsIAotICAgIDI1NSwgNzkyNywgNzgzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzkyNSwgMCwgMCwgMCwgMCwgMCwgMzc4LCA3ODI1LCAwLCAKLSAgICAwLCAwLCAzODAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgMCwgMCwgMCwgMCwgNzgyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzgyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE3MywgOTAxLCAwLCAwLCA4MTI5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA3ODQ2LCA3ODQ0LCAwLCA3ODUwLCAwLCAwLCAwLCAwLCA3ODQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NzgsIDAsIDAsIDUwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTA4LCAwLCAKLSAgICAwLCA0ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2ODgsIDAsIDAsIDAsIDAsIDc4NzIsIDc4NzAsIDAsIAotICAgIDc4NzYsIDAsIDAsIDAsIDAsIDc4NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDc3MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4OTAsIDc4ODgsIDAsIDc4OTQsIDAsIDAsIDAsIDAsIDc4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3NTYsIDAsIDAsIDU1NiwgMCwgMCwgNzc1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAKLSAgICA1MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3NSwgNDcxLCAwLCAwLCA0NjksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzg0NywgNzg0NSwgMCwgNzg1MSwgMCwgMCwgMCwgMCwgCi0gICAgNzg0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDc5LCAwLCAwLCA1MDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUwOSwgMCwgMCwgNDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Njg5LCAwLCAwLCAKLSAgICAwLCAwLCA3ODczLCA3ODcxLCAwLCA3ODc3LCAwLCAwLCAwLCAwLCA3ODc1LCAwLCAwLCAwLCAwLCAwLCAwLCA3NzI3LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODkxLCA3ODg5LCAwLCA3ODk1LCAwLCAwLCAwLCAwLCA3ODkzLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3NzU3LCAwLCAwLCA1NTcsIDAsIDAsIDc3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDU1NSwgMCwgMCwgNTExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzYsIDQ3MiwgMCwgMCwgCi0gICAgNDcwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NTYsIDc4NTQsIDAsIAotICAgIDc4NjAsIDAsIDAsIDAsIDAsIDc4NTgsIDAsIDAsIDAsIDAsIDAsIDc4NTcsIDc4NTUsIDAsIDc4NjEsIDAsIDAsIDAsIDAsIAotICAgIDc4NTksIDAsIDAsIDAsIDAsIDAsIDc3MDAsIDc3MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3MDEsIDc3MDMsIDAsIDAsIDAsIDAsIDc3NjAsIDc3NjIsIDAsIDAsIDAsIDAsIDc3NjEsIDc3NjMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODAsIDAsIDAsIDAsIDAsIDAsIDc3ODEsIDAsIDAsIDAsIDAsIDAsIDc3ODIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc3ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc4MDEsIDAsIDAsIDAsIDc4MDIsIDAsIDAsIDAsIDAsIDAsIDc4MDMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDAsIDc4OTgsIDAsIDc5MDQsIDAsIDAsIAotICAgIDAsIDAsIDc5MDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDYsIDAsIDAsIDAsIDAsIDc5MDEsIDc4OTksIDAsIAotICAgIDc5MDUsIDAsIDAsIDAsIDAsIDc5MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MDcsIDAsIDAsIDAsIDAsIDc5MTQsIAotICAgIDc5MTIsIDAsIDc5MTgsIDAsIDAsIDAsIDAsIDc5MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjAsIDAsIDAsIDAsIAotICAgIDAsIDc5MTUsIDc5MTMsIDAsIDc5MTksIDAsIDAsIDAsIDAsIDc5MTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MjEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0OTMsIDAsIDAsIDAsIDAsIDAsIDQ4MCwgMCwgMCwgMCwgMCwgMCwgNDgxLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3NzA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzA5LCAwLCAwLCAwLCAwLCA1NjAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDU2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDk1LCAwLCAwLCA4MTIyLCAKLSAgICA5MDIsIDAsIDAsIDgxMjEsIDgxMjAsIDc5NDQsIDc5NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgxMjQsIDgxMzYsIDkwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzk2MCwgNzk2MSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgODEzOCwgOTA1LCAwLCAwLCAwLCAwLCA3OTc2LCA3OTc3LCAwLCAwLCAwLCAwLCAwLCA4MTQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MTU0LCA5MDYsIDAsIDAsIDgxNTMsIDgxNTIsIDAsIDkzOCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzk5MiwgNzk5MywgMCwgMCwgMCwgMCwgMCwgMCwgODE4NCwgOTA4LCAwLCAwLCAwLCAwLCA4MDA4LCA4MDA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcyLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcwLCA5MTAsIDAsIDAsIAotICAgIDgxNjksIDgxNjgsIDAsIDkzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAyNSwgMCwgMCwgMCwgMCwgMCwgMCwgODE4NiwgCi0gICAgOTExLCAwLCAwLCAwLCAwLCA4MDQwLCA4MDQxLCAwLCAwLCAwLCAwLCAwLCA4MTg4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA4MTE2LCAwLCAwLCAwLCAwLCAwLCA4MTMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDQ4LCAKLSAgICA5NDAsIDAsIDAsIDgxMTMsIDgxMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5MzYsIDc5MzcsIDAsIDAsIDAsIDAsIAotICAgIDgxMTgsIDgxMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNTAsIDk0MSwgMCwgMCwgMCwgMCwgNzk1MiwgNzk1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODA1MiwgOTQyLCAwLCAwLCAwLCAwLCA3OTY4LCA3OTY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4MTM0LCA4MTMxLCA4MDU0LCA5NDMsIDAsIDAsIDgxNDUsIDgxNDQsIDAsIDk3MCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzk4NCwgNzk4NSwgMCwgMCwgMCwgMCwgODE1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA1NiwgOTcyLCAKLSAgICAwLCAwLCAwLCAwLCA4MDAwLCA4MDAxLCAwLCAwLCAwLCAwLCA4MTY0LCA4MTY1LCAwLCAwLCAwLCAwLCAwLCAwLCA4MDU4LCAKLSAgICA5NzMsIDAsIDAsIDgxNjEsIDgxNjAsIDAsIDk3MSwgMCwgMCwgMCwgMCwgMCwgMCwgODAxNiwgODAxNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE2NiwgMCwgODA2MCwgOTc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA4MDMyLCA4MDMzLCAwLCAwLCAwLCAwLCA4MTgyLCA4MTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTQ2LCAKLSAgICA5MTIsIDAsIDAsIDgxNTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNjIsIDk0NCwgMCwgMCwgODE2NywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODE4MCwgMCwgOTc5LCAwLCAwLCAwLCAwLCAwLCA5ODAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEwMzEsIDAsIDAsIDAsIDEyMzIsIDAsIDEyMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMjcsIDAsIAotICAgIDAsIDAsIDAsIDEwMjQsIDAsIDAsIDAsIDAsIDEyMzgsIDAsIDEwMjUsIDAsIDAsIDAsIDEyMTcsIDAsIDEyNDQsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNDYsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzcsIDAsIDAsIDAsIDEyNTAsIDEwNDksIDAsIDEyNTIsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTQsIDAsIDAsIAotICAgIDEyNjIsIDEwMzgsIDAsIDEyNjQsIDAsIDAsIDEyNjYsIDAsIDAsIDEyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyNzIsIDAsIDAsIDAsIDAsIDAsIDEyNjAsIDAsIDAsIDAsIDEyMzMsIDAsIDEyMzUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDExMDcsIDAsIDAsIDAsIDAsIDExMDQsIDAsIDAsIDAsIDAsIDEyMzksIDAsIDExMDUsIDAsIDAsIDAsIAotICAgIDEyMTgsIDAsIDEyNDUsIDAsIDAsIDAsIDAsIDAsIDEyNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTcsIDAsIDAsIDAsIAotICAgIDEyNTEsIDEwODEsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNTUsIDAsIDAsIDEyNjMsIDExMTgsIDAsIDEyNjUsIDAsIDAsIDEyNjcsIDAsIDAsIDEyNjksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzMsIDAsIDAsIDAsIDAsIDAsIDEyNjEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDIsIDAsIDAsIDAsIDAsIDAsIDExNDMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDIsIDAsIDAsIDAsIDAsIDAsIDEyNDMsIDAsIDAsIDAsIDAsIDAsIDEyNTgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTksIDAsIDAsIDAsIDAsIDE1NzAsIDE1NzEsIDE1NzMsIDAsIAotICAgIDAsIDAsIDAsIDE1NzIsIDAsIDAsIDAsIDAsIDAsIDE1NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE3MzAsIDAsIDAsIDAsIDAsIDAsIDE3NDcsIDAsIDAsIDAsIDAsIDAsIDE3MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIzNDUsIDAsIDAsIDAsIDAsIDAsIDIzNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIzNTYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI1MDcsIDI1MDgsIDAsIDAsIDAsIDAsIDAsIDAsIDI4OTEsIDI4ODgsIDI4OTIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI5NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMTgsIDMwMjAsIDAsIAotICAgIDAsIDAsIDAsIDMwMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNjQsIDAsIAotICAgIDAsIDAsIDAsIDMyNzQsIDMyNzEsIDMyNzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyNzUsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDIsIDM0MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0MDMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NDYsIDM1NDgsIDM1NTAsIDAsIDAsIDAsIDM1NDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQxMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDY5MTgsIDAsIDAsIDAsIDAsIDAsIDY5MjAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5MjIsIDAsIDAsIDAsIDAsIDAsIDY5MjQsIDAsIDAsIDAsIDAsIDAsIDY5MjYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDY5MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY5NzMsIDAsIDAsIDAsIDAsIDAsIDY5NzYsIDAsIDAsIDAsIDAsIDAsIDY5NzcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzksIDAsIDAsIDAsIDAsIDAsIDAsIDc3MzYsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3MzcsIDAsIDAsIDAsIDAsIDAsIDc3NzIsIDAsIDAsIDAsIDAsIDAsIDc3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc3ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODUsIDAsIDc4NTIsIDAsIDAsIDc4NjIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4NTMsIDAsIDAsIDc4NjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc4NzgsIDAsIDAsIDAsIDAsIDAsIDc4NzksIDAsIDAsIDAsIDAsIDAsIDc4OTYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4OTcsIDAsIDAsIDAsIDc5MzgsIDc5NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc5NDIsIDgwNjQsIDc5MzksIDc5NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDMsIDgwNjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgwNjYsIDAsIDAsIDAsIDAsIDAsIDgwNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwNjgsIDAsIDAsIDAsIDAsIDAsIDgwNjksIDAsIDAsIDAsIDAsIDAsIDgwNzAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NDYsIDc5NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc5NTAsIDgwNzIsIDc5NDcsIDc5NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTEsIDgwNzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwNzQsIDAsIDAsIDAsIDAsIDAsIDgwNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDgwNzYsIDAsIDAsIDAsIDAsIDAsIDgwNzcsIDAsIDAsIDAsIDAsIDAsIDgwNzgsIDAsIDAsIDAsIDAsIDAsIDgwNzksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NTQsIDc5NTYsIDAsIDAsIDAsIDAsIDc5NTUsIDc5NTcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NjIsIDc5NjQsIDAsIDAsIDAsIDAsIDc5NjMsIDc5NjUsIDAsIDAsIDAsIDAsIAotICAgIDc5NzAsIDc5NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzQsIDgwODAsIDc5NzEsIDc5NzMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzUsIDgwODEsIDAsIDAsIDAsIDAsIDAsIDgwODIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwODQsIDAsIDAsIDAsIDAsIDAsIDgwODUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDgwODYsIDAsIDAsIDAsIDAsIDAsIDgwODcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5NzgsIAotICAgIDc5ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODIsIDgwODgsIDc5NzksIDc5ODEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODMsIDgwODksIDAsIDAsIDAsIDAsIDAsIDgwOTAsIDAsIDAsIDAsIDAsIDAsIDgwOTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTIsIDAsIDAsIDAsIDAsIDAsIDgwOTMsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgwOTQsIDAsIDAsIDAsIDAsIDAsIDgwOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5ODYsIDc5ODgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTAsIDAsIDc5ODcsIDc5ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc5OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTQsIDc5OTYsIDAsIDAsIDc5OTgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTUsIDc5OTcsIDAsIDAsIDc5OTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMDIsIDgwMDQsIDAsIDAsIDAsIDAsIDgwMDMsIDgwMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMTAsIDgwMTIsIDAsIDAsIDAsIDAsIDgwMTEsIDgwMTMsIDAsIDAsIDAsIDAsIDgwMTgsIDgwMjAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjIsIDAsIDgwMTksIDgwMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgwMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjcsIDgwMjksIDAsIDAsIDgwMzEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgwMzQsIDgwMzYsIDAsIDAsIDgwMzgsIDgwOTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMzUsIAotICAgIDgwMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMzksIDgwOTcsIDAsIDAsIDAsIDAsIDAsIDgwOTgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgwOTksIDAsIDAsIDAsIDAsIDAsIDgxMDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMDEsIDAsIDAsIDAsIDAsIDAsIDgxMDIsIDAsIDAsIDAsIDAsIDAsIDgxMDMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgwNDIsIDgwNDQsIDAsIDAsIDgwNDYsIDgxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNDMsIDgwNDUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNDcsIDgxMDUsIDAsIDAsIDAsIDAsIDAsIDgxMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMDcsIDAsIDAsIDAsIDAsIDAsIDgxMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgxMDksIDAsIDAsIDAsIDAsIDAsIDgxMTAsIDAsIDAsIDAsIDAsIDAsIDgxMTEsIDAsIDAsIDAsIDAsIDAsIDgxMTQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMzAsIDAsIDAsIDAsIDAsIDAsIDgxNzgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDgxMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNDEsIDgxNDIsIDAsIDAsIDgxNDMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMzUsIDAsIDAsIDAsIDAsIDAsIDgxODMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgxNTcsIDgxNTgsIDAsIDAsIDgxNTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg2MDIsIDAsIDAsIDAsIDAsIDAsIDg2MDMsIDAsIDAsIDAsIDAsIDAsIDg2MjIsIDAsIDAsIDAsIDAsIDAsIDg2NTMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2NTUsIDAsIDAsIDAsIDAsIDAsIDg2NTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg3MDgsIDAsIDAsIDAsIDAsIDAsIDg3MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg3MTYsIDAsIDAsIDAsIDAsIDAsIDg3NDAsIDAsIDAsIDAsIDAsIDAsIDg3NDIsIDAsIDAsIDAsIDAsIDAsIDg3NjksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg3NzIsIDAsIDAsIDAsIDAsIDAsIDg3NzUsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg3NzcsIDAsIDAsIDAsIDAsIDAsIDg4MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4MDIsIDAsIDAsIDAsIDAsIDAsIDg4MTYsIDAsIDAsIDAsIDAsIDAsIDg4MTcsIDAsIDAsIDAsIDAsIDAsIDg4MjAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MjEsIDAsIDAsIDAsIDAsIDAsIDg4MjQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg4MjUsIDAsIDAsIDAsIDAsIDAsIDg4MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg4MzMsIDAsIDAsIDAsIDAsIDAsIDg5MjgsIDAsIDAsIDAsIDAsIDAsIDg5MjksIDAsIDAsIDAsIDAsIDAsIDg4MzYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MzcsIDAsIDAsIDAsIDAsIDAsIDg4NDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg4NDEsIDAsIDAsIDAsIDAsIDAsIDg5MzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg5MzEsIDAsIDAsIDAsIDAsIDAsIDg4NzYsIDAsIDAsIDAsIDAsIDAsIDg4NzcsIDAsIDAsIDAsIDAsIDAsIDg4NzgsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzksIDAsIDAsIDAsIDAsIDAsIDg5MzgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg5MzksIDAsIDAsIDAsIDAsIDAsIDg5NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg5NDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDM2LCAwLCAwLCAwLCAwLCAwLCAxMjM2NCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIzNjYsIDAsIDAsIDAsIDAsIDAsIDEyMzY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjM3MCwgMCwgMCwgMCwgMCwgMCwgMTIzNzIsIDAsIDAsIDAsIDAsIDAsIDEyMzc0LCAwLCAwLCAwLCAwLCAwLCAxMjM3NiwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNzgsIDAsIDAsIDAsIDAsIDAsIDEyMzgwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjM4MiwgMCwgMCwgMCwgMCwgMCwgMTIzODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyMzg2LCAwLCAwLCAwLCAwLCAwLCAxMjM4OSwgMCwgMCwgMCwgMCwgMCwgMTIzOTEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQwMCwgMTI0MDEsIDAsIDAsIDAsIDAsIAotICAgIDEyNDAzLCAxMjQwNCwgMCwgMCwgMCwgMCwgMTI0MDYsIDEyNDA3LCAwLCAwLCAwLCAwLCAxMjQwOSwgMTI0MTAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDEyLCAxMjQxMywgMCwgMCwgMCwgMCwgMTI0NDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNTMyLCAwLCAwLCAwLCAwLCAwLCAxMjQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI0NjIsIDAsIDAsIDAsIDAsIDAsIDEyNDY0LCAwLCAwLCAwLCAwLCAwLCAxMjQ2NiwgMCwgMCwgMCwgMCwgMCwgMTI0NjgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDcwLCAwLCAwLCAwLCAwLCAwLCAxMjQ3MiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI0NzQsIDAsIDAsIDAsIDAsIDAsIDEyNDc2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxMjQ3OCwgMCwgMCwgMCwgMCwgMCwgMTI0ODAsIDAsIDAsIDAsIDAsIDAsIDEyNDgyLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQ4NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0ODcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDg5LCAwLCAwLCAwLCAwLCAwLCAxMjQ5NiwgMTI0OTcsIDAsIDAsIDAsIDAsIDEyNDk5LCAxMjUwMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1MDIsIDEyNTAzLCAwLCAwLCAwLCAwLCAxMjUwNSwgMTI1MDYsIDAsIDAsIDAsIAotICAgIDAsIDEyNTA4LCAxMjUwOSwgMCwgMCwgMCwgMCwgMTI1MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNTM2LCAwLCAwLCAwLCAwLCAwLCAxMjUzNywgMCwgMCwgMCwgMCwgMCwgMTI1MzgsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNTQyLCAwLCAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY29tcF9kYXRhW10gPSB7CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODgxNCwgMCwgMCwgODgwMCwgMCwgMCwgODgxNSwgMCwgMCwgMCwgMTkyLCAxOTMsIAorICAgIDE5NCwgMTk1LCAyNTYsIDI1OCwgNTUwLCAxOTYsIDc4NDIsIDE5NywgMCwgNDYxLCA1MTIsIDUxNCwgMCwgMCwgMCwgNzg0MCwgCisgICAgMCwgNzY4MCwgMCwgMCwgMjYwLCAwLCAwLCA3NjgyLCAwLCAwLCA3Njg0LCAwLCAwLCAwLCAwLCA3Njg2LCAwLCAyNjIsIAorICAgIDI2NCwgMCwgMCwgMCwgMjY2LCAwLCAwLCAwLCAwLCAyNjgsIDAsIDE5OSwgMCwgMCwgMCwgNzY5MCwgMCwgMCwgMCwgMCwgCisgICAgMjcwLCAwLCAwLCAwLCAwLCAwLCA3NjkyLCAwLCAwLCAwLCA3Njk2LCAwLCA3Njk4LCAwLCAwLCA3Njk0LCAwLCAwLCAwLCAwLCAKKyAgICAyMDAsIDIwMSwgMjAyLCA3ODY4LCAyNzQsIDI3NiwgMjc4LCAyMDMsIDc4NjYsIDAsIDAsIDI4MiwgNTE2LCA1MTgsIDAsIDAsIAorICAgIDAsIDc4NjQsIDAsIDAsIDAsIDU1MiwgMjgwLCA3NzA0LCAwLCA3NzA2LCAwLCAwLCAwLCA3NzEwLCAwLCA1MDAsIDI4NCwgMCwgCisgICAgNzcxMiwgMjg2LCAyODgsIDAsIDAsIDAsIDAsIDQ4NiwgMCwgMjkwLCAwLCAwLCAwLCAyOTIsIDAsIDAsIDAsIDc3MTQsIAorICAgIDc3MTgsIDAsIDAsIDAsIDU0MiwgMCwgMCwgMCwgMCwgMCwgNzcxNiwgMCwgMCwgMCwgNzcyMCwgMCwgMCwgNzcyMiwgMCwgMCwgCisgICAgMjA0LCAyMDUsIDIwNiwgMjk2LCAyOTgsIDMwMCwgMzA0LCAyMDcsIDc4ODAsIDAsIDAsIDQ2MywgNTIwLCA1MjIsIDAsIDAsIAorICAgIDAsIDc4ODIsIDAsIDAsIDAsIDAsIDMwMiwgMCwgMCwgNzcyNCwgMCwgMCwgMCwgMzA4LCAwLCA3NzI4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA0ODgsIDAsIDc3MzAsIDAsIDAsIDAsIDMxMCwgMCwgMCwgMCwgMCwgNzczMiwgMCwgMCwgMCwgMCwgMCwgMzEzLCAwLCAKKyAgICAzMTcsIDAsIDAsIDAsIDAsIDAsIDc3MzQsIDAsIDAsIDAsIDMxNSwgMCwgNzc0MCwgMCwgMCwgNzczOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNzc0MiwgMCwgMCwgMCwgMCwgNzc0NCwgMCwgMCwgNzc0NiwgMCwgNTA0LCAzMjMsIDAsIDIwOSwgMCwgMCwgNzc0OCwgCisgICAgMCwgMCwgMCwgMCwgMzI3LCAwLCA3NzUwLCAwLCAwLCAwLCAzMjUsIDAsIDc3NTQsIDAsIDAsIDc3NTIsIDAsIDAsIDAsIDAsIAorICAgIDIxMCwgMjExLCAyMTIsIDIxMywgMzMyLCAzMzQsIDU1OCwgMjE0LCA3ODg2LCAwLCAzMzYsIDQ2NSwgNTI0LCA1MjYsIDAsIAorICAgIDAsIDQxNiwgNzg4NCwgMCwgMCwgMCwgMCwgNDkwLCAwLCAwLCAwLCAwLCAwLCA3NzY0LCA3NzY2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzNDAsIDAsIDAsIDAsIDAsIDc3NjgsIDM0NCwgNTI4LCA1MzAsIDAsIDAsIDAsIDc3NzAsIDAsIDAsIDAsIDM0MiwgMCwgMCwgCisgICAgMCwgMCwgNzc3NCwgMCwgMzQ2LCAzNDgsIDAsIDAsIDAsIDc3NzYsIDAsIDAsIDAsIDAsIDM1MiwgMCwgNzc3OCwgMCwgMCwgCisgICAgNTM2LCAzNTAsIDAsIDAsIDAsIDc3ODYsIDAsIDAsIDAsIDAsIDM1NiwgMCwgNzc4OCwgMCwgMCwgNTM4LCAzNTQsIDAsIAorICAgIDc3OTIsIDAsIDAsIDc3OTAsIDAsIDAsIDAsIDAsIDIxNywgMjE4LCAyMTksIDM2MCwgMzYyLCAzNjQsIDAsIDIyMCwgNzkxMCwgCisgICAgMzY2LCAzNjgsIDQ2NywgNTMyLCA1MzQsIDAsIDAsIDQzMSwgNzkwOCwgNzc5NCwgMCwgMCwgMCwgMzcwLCA3Nzk4LCAwLCAKKyAgICA3Nzk2LCA3ODA0LCAwLCAwLCAwLCAwLCAwLCA3ODA2LCAwLCA3ODA4LCA3ODEwLCAzNzIsIDAsIDAsIDAsIDc4MTQsIDc4MTIsIAorICAgIDAsIDc4MTYsIDAsIDAsIDAsIDc4MTgsIDc4MjAsIDAsIDAsIDAsIDc5MjIsIDIyMSwgMzc0LCA3OTI4LCA1NjIsIDAsIAorICAgIDc4MjIsIDM3NiwgNzkyNiwgMCwgMCwgMCwgMCwgNzkyNCwgMCwgMCwgMzc3LCA3ODI0LCAwLCAwLCAwLCAzNzksIDM4MSwgMCwgCisgICAgMCwgMCwgMCwgMCwgNzgyNiwgMCwgMCwgMCwgMCwgNzgyOCwgMjI0LCAyMjUsIDIyNiwgMjI3LCAyNTcsIDI1OSwgNTUxLCAKKyAgICAyMjgsIDc4NDMsIDIyOSwgMCwgNDYyLCA1MTMsIDUxNSwgMCwgMCwgMCwgNzg0MSwgMCwgNzY4MSwgMCwgMCwgMjYxLCAwLCAKKyAgICAwLCA3NjgzLCAwLCAwLCA3Njg1LCAwLCAwLCAwLCAwLCA3Njg3LCAwLCAwLCAwLCAwLCAwLCAyNjMsIDI2NSwgMCwgMCwgMCwgCisgICAgMjY3LCAwLCAwLCAwLCAwLCAyNjksIDAsIDAsIDAsIDAsIDAsIDIzMSwgMCwgMCwgMCwgNzY5MSwgMjcxLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3NjkzLCAwLCAwLCAwLCA3Njk3LCAwLCA3Njk5LCAwLCAwLCA3Njk1LCAyMzIsIDIzMywgMjM0LCA3ODY5LCAyNzUsIAorICAgIDI3NywgMjc5LCAyMzUsIDc4NjcsIDAsIDAsIDI4MywgNTE3LCA1MTksIDAsIDAsIDAsIDc4NjUsIDAsIDAsIDAsIDU1MywgCisgICAgMjgxLCA3NzA1LCAwLCA3NzA3LCAwLCAwLCAwLCA3NzExLCAwLCAwLCAwLCAwLCAwLCA1MDEsIDI4NSwgMCwgNzcxMywgMjg3LCAKKyAgICAyODksIDAsIDAsIDAsIDAsIDQ4NywgMCwgMCwgMCwgMCwgMCwgMjkxLCAwLCAwLCAwLCAyOTMsIDAsIDAsIDAsIDc3MTUsIAorICAgIDc3MTksIDAsIDAsIDAsIDU0MywgMCwgMCwgMCwgMCwgMCwgNzcxNywgMCwgMCwgMCwgNzcyMSwgMCwgMCwgNzcyMywgMCwgCisgICAgNzgzMCwgMjM2LCAyMzcsIDIzOCwgMjk3LCAyOTksIDMwMSwgMCwgMjM5LCA3ODgxLCAwLCAwLCA0NjQsIDUyMSwgNTIzLCAwLCAKKyAgICAwLCAwLCA3ODgzLCAwLCAwLCAwLCAwLCAzMDMsIDAsIDAsIDc3MjUsIDAsIDAsIDAsIDMwOSwgMCwgMCwgMCwgMCwgNDk2LCAKKyAgICAwLCAwLCAwLCAwLCA3NzI5LCAwLCA0ODksIDAsIDAsIDAsIDAsIDAsIDc3MzEsIDAsIDAsIDAsIDMxMSwgNzczMywgMCwgMCwgCisgICAgMCwgMCwgMCwgMzE0LCAwLCAzMTgsIDAsIDAsIDAsIDAsIDAsIDc3MzUsIDAsIDAsIDAsIDMxNiwgMCwgNzc0MSwgMCwgMCwgCisgICAgNzczOSwgMCwgNzc0MywgMCwgMCwgMCwgMCwgNzc0NSwgMCwgMCwgNzc0NywgMCwgMCwgMCwgMCwgMCwgNTA1LCAzMjQsIDAsIAorICAgIDI0MSwgMCwgMCwgNzc0OSwgMCwgMCwgMCwgMCwgMzI4LCAwLCA3NzUxLCAwLCAwLCAwLCAzMjYsIDAsIDc3NTUsIDAsIDAsIAorICAgIDc3NTMsIDAsIDAsIDAsIDAsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMzMzLCAzMzUsIDU1OSwgMjQ2LCA3ODg3LCAwLCAzMzcsIAorICAgIDQ2NiwgNTI1LCA1MjcsIDAsIDAsIDQxNywgNzg4NSwgNDkxLCAwLCAwLCAwLCAwLCAwLCA3NzY1LCAwLCAwLCAwLCAwLCAKKyAgICA3NzY3LCAwLCAzNDEsIDAsIDAsIDAsIDAsIDc3NjksIDAsIDAsIDAsIDAsIDM0NSwgNTI5LCA1MzEsIDAsIDAsIDAsIDc3NzEsIAorICAgIDAsIDAsIDAsIDM0MywgMCwgMCwgMCwgMCwgNzc3NSwgMCwgMzQ3LCAzNDksIDAsIDAsIDAsIDc3NzcsIDAsIDAsIDAsIDAsIAorICAgIDM1MywgMCwgNzc3OSwgMCwgMCwgNTM3LCAzNTEsIDAsIDAsIDAsIDc3ODcsIDc4MzEsIDAsIDAsIDAsIDM1NywgMCwgMCwgMCwgCisgICAgMCwgMCwgNzc4OSwgMCwgMCwgNTM5LCAzNTUsIDAsIDc3OTMsIDAsIDAsIDc3OTEsIDAsIDAsIDAsIDAsIDI0OSwgMjUwLCAKKyAgICAyNTEsIDM2MSwgMzYzLCAzNjUsIDAsIDI1MiwgNzkxMSwgMzY3LCAzNjksIDQ2OCwgNTMzLCA1MzUsIDAsIDAsIDQzMiwgCisgICAgNzkwOSwgNzc5NSwgMCwgMCwgMCwgMzcxLCA3Nzk5LCAwLCA3Nzk3LCAwLCAwLCAwLCAwLCA3ODA1LCAwLCA3ODA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3ODA5LCA3ODExLCAzNzMsIDAsIDAsIDAsIDc4MTUsIDc4MTMsIDAsIDc4MzIsIDAsIDAsIDAsIDc4MTcsIDAsIAorICAgIDAsIDAsIDc4MTksIDc4MjEsIDAsIDAsIDAsIDc5MjMsIDI1MywgMzc1LCA3OTI5LCA1NjMsIDAsIDc4MjMsIDI1NSwgNzkyNywgCisgICAgNzgzMywgMCwgMCwgMCwgNzkyNSwgMCwgMCwgMzc4LCA3ODI1LCAwLCAwLCAwLCAzODAsIDAsIDAsIDAsIDAsIDM4MiwgMCwgCisgICAgNzgyNywgMCwgMCwgMCwgMCwgNzgyOSwgMCwgMCwgMCwgMCwgODE3MywgOTAxLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTI5LCAwLCAKKyAgICAwLCA3ODQ2LCA3ODQ0LCAwLCA3ODUwLCAwLCAwLCAwLCAwLCA3ODQ4LCAwLCAwLCA0NzgsIDAsIDAsIDAsIDUwNiwgMCwgMCwgCisgICAgNTA4LCAwLCAwLCA0ODIsIDAsIDAsIDAsIDc2ODgsIDAsIDc4NzIsIDc4NzAsIDAsIDc4NzYsIDAsIDAsIDAsIDAsIDc4NzQsIAorICAgIDAsIDAsIDAsIDc3MjYsIDAsIDAsIDAsIDAsIDAsIDc4OTAsIDc4ODgsIDAsIDc4OTQsIDAsIDAsIDAsIDAsIDc4OTIsIDAsIAorICAgIDAsIDAsIDc3NTYsIDAsIDAsIDU1NiwgMCwgMCwgNzc1OCwgMCwgMCwgMCwgNTU0LCAwLCAwLCAwLCA1MTAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQ3NSwgNDcxLCAwLCAwLCA0NjksIDAsIDAsIDQ3MywgMCwgMCwgMCwgNzg0NywgNzg0NSwgMCwgNzg1MSwgMCwgMCwgCisgICAgMCwgMCwgNzg0OSwgMCwgMCwgNDc5LCAwLCAwLCAwLCA1MDcsIDAsIDAsIDUwOSwgMCwgMCwgNDgzLCAwLCAwLCAwLCA3Njg5LCAKKyAgICAwLCA3ODczLCA3ODcxLCAwLCA3ODc3LCAwLCAwLCAwLCAwLCA3ODc1LCAwLCAwLCAwLCA3NzI3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3ODkxLCA3ODg5LCAwLCA3ODk1LCAwLCAwLCAwLCAwLCA3ODkzLCAwLCAwLCAwLCA3NzU3LCAwLCAwLCA1NTcsIDAsIDAsIAorICAgIDc3NTksIDAsIDAsIDAsIDU1NSwgMCwgMCwgMCwgNTExLCAwLCAwLCAwLCAwLCAwLCA0NzYsIDQ3MiwgMCwgMCwgNDcwLCAwLCAKKyAgICAwLCA0NzQsIDAsIDAsIDAsIDc4NTYsIDc4NTQsIDAsIDc4NjAsIDAsIDAsIDAsIDAsIDc4NTgsIDAsIDAsIDc4NTcsIDc4NTUsIAorICAgIDAsIDc4NjEsIDAsIDAsIDAsIDAsIDc4NTksIDAsIDAsIDc3MDAsIDc3MDIsIDAsIDAsIDAsIDAsIDAsIDc3MDEsIDc3MDMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDc3NjAsIDc3NjIsIDAsIDc3NjEsIDc3NjMsIDAsIDAsIDAsIDc3ODAsIDAsIDAsIDc3ODEsIDAsIAorICAgIDAsIDc3ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDc3ODMsIDAsIDc4MDAsIDAsIDAsIDc4MDEsIDAsIDAsIDAsIDAsIDc4MDIsIAorICAgIDAsIDAsIDc4MDMsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDAsIDAsIDc5MDAsIDc4OTgsIDAsIDc5MDQsIDAsIDAsIAorICAgIDAsIDAsIDc5MDIsIDc5MDYsIDAsIDAsIDAsIDAsIDAsIDc5MDEsIDc4OTksIDAsIDc5MDUsIDAsIDAsIDAsIDAsIDc5MDMsIAorICAgIDAsIDAsIDAsIDAsIDc5MDcsIDAsIDc5MTQsIDc5MTIsIDAsIDc5MTgsIDAsIDAsIDAsIDAsIDc5MTYsIDAsIDAsIDAsIDAsIAorICAgIDc5MjAsIDAsIDc5MTUsIDc5MTMsIDAsIDc5MTksIDc5MTcsIDAsIDAsIDAsIDAsIDc5MjEsIDAsIDAsIDAsIDAsIDQ5NCwgMCwgCisgICAgMCwgMCwgNDkyLCAwLCAwLCA0OTMsIDAsIDAsIDQ4MCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgxLCAwLCAwLCAwLCA3NzA4LCAwLCAKKyAgICAwLCA3NzA5LCAwLCA1NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MSwgMCwgNDk1LCAwLCAwLCAwLCA4MTIyLCA5MDIsIDAsIDAsIAorICAgIDgxMjEsIDgxMjAsIDAsIDAsIDAsIDAsIDc5NDQsIDc5NDUsIDAsIDAsIDAsIDAsIDAsIDgxMjQsIDAsIDgxMzYsIDkwNCwgMCwgCisgICAgMCwgMCwgMCwgNzk2MCwgNzk2MSwgMCwgMCwgMCwgODEzOCwgOTA1LCAwLCAwLCAwLCAwLCA3OTc2LCA3OTc3LCAwLCA4MTQwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4MTU0LCA5MDYsIDAsIDAsIDgxNTMsIDgxNTIsIDAsIDkzOCwgMCwgMCwgNzk5MiwgNzk5MywgMCwgCisgICAgMCwgMCwgODE4NCwgOTA4LCAwLCAwLCAwLCAwLCA4MDA4LCA4MDA5LCAwLCAwLCAwLCAwLCAwLCAwLCA4MTcyLCAwLCAwLCAwLCAKKyAgICA4MTcwLCA5MTAsIDAsIDAsIDgxNjksIDgxNjgsIDAsIDkzOSwgMCwgMCwgMCwgODAyNSwgMCwgMCwgMCwgODE4NiwgOTExLCAKKyAgICA4MDQwLCA4MDQxLCAwLCAwLCAwLCAwLCAwLCA4MTg4LCAwLCAwLCA4MTE2LCAwLCAwLCA4MTMyLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4MDQ4LCA5NDAsIDAsIDAsIDgxMTMsIDgxMTIsIDAsIDAsIDAsIDAsIDc5MzYsIDc5MzcsIDAsIDAsIDAsIDAsIDgxMTgsIAorICAgIDgxMTUsIDAsIDAsIDAsIDAsIDAsIDgwNTAsIDk0MSwgNzk1MiwgNzk1MywgMCwgMCwgMCwgODA1MiwgOTQyLCAwLCAwLCAwLCAKKyAgICAwLCA3OTY4LCA3OTY5LCAwLCAwLCAwLCAwLCA4MTM0LCA4MTMxLCAwLCA4MDU0LCA5NDMsIDAsIDAsIDgxNDUsIDgxNDQsIDAsIAorICAgIDk3MCwgMCwgMCwgNzk4NCwgNzk4NSwgODE1MCwgMCwgMCwgMCwgMCwgMCwgMCwgODA1NiwgOTcyLCAwLCAwLCAwLCAwLCAKKyAgICA4MDAwLCA4MDAxLCAwLCA4MTY0LCA4MTY1LCAwLCAwLCAwLCA4MDU4LCA5NzMsIDAsIDAsIDgxNjEsIDgxNjAsIDAsIDk3MSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgODAxNiwgODAxNywgMCwgMCwgMCwgMCwgODE2NiwgMCwgMCwgODA2MCwgOTc0LCAwLCAwLCAwLCAKKyAgICAwLCA4MDMyLCA4MDMzLCA4MTgyLCA4MTc5LCAwLCAwLCAwLCAwLCAwLCA4MTQ2LCA5MTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxNTEsIDAsIDAsIDgxNjIsIDk0NCwgMCwgMCwgODE2NywgMCwgMCwgMCwgODE4MCwgMCwgMCwgOTc5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCA5ODAsIDAsIDAsIDEwMzEsIDAsIDAsIDAsIDAsIDEyMzIsIDAsIDEyMzQsIDAsIDAsIDAsIDAsIDEwMjcsIDAsIDEwMjQsIAorICAgIDAsIDAsIDAsIDAsIDEyMzgsIDAsIDEwMjUsIDEyMTcsIDAsIDEyNDQsIDAsIDAsIDEyNDYsIDAsIDAsIDAsIDEwMzcsIDAsIAorICAgIDAsIDAsIDEyNTAsIDEwNDksIDAsIDEyNTIsIDAsIDAsIDAsIDAsIDEwMzYsIDAsIDAsIDAsIDAsIDEyNTQsIDAsIDAsIDAsIAorICAgIDEyNjIsIDEwMzgsIDAsIDEyNjQsIDAsIDAsIDEyNjYsIDAsIDAsIDAsIDEyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzIsIAorICAgIDAsIDAsIDEyNjAsIDAsIDAsIDAsIDAsIDEyMzMsIDAsIDEyMzUsIDAsIDAsIDAsIDAsIDExMDcsIDAsIDExMDQsIDAsIDAsIAorICAgIDAsIDAsIDEyMzksIDAsIDExMDUsIDEyMTgsIDAsIDEyNDUsIDAsIDAsIDEyNDcsIDAsIDAsIDAsIDExMTcsIDAsIDAsIDAsIAorICAgIDEyNTEsIDEwODEsIDAsIDEyNTMsIDAsIDAsIDAsIDAsIDExMTYsIDAsIDAsIDAsIDAsIDEyNTUsIDAsIDAsIDAsIDEyNjMsIAorICAgIDExMTgsIDAsIDEyNjUsIDAsIDAsIDEyNjcsIDAsIDAsIDAsIDEyNjksIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzMsIDAsIDAsIAorICAgIDEyNjEsIDAsIDAsIDExMTEsIDAsIDAsIDAsIDExNDIsIDAsIDAsIDExNDMsIDAsIDAsIDAsIDAsIDAsIDEyNDIsIDAsIDAsIAorICAgIDEyNDMsIDAsIDAsIDEyNTgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTksIDAsIDE1NzAsIDE1NzEsIDE1NzMsIDAsIDE1NzIsIAorICAgIDAsIDAsIDE1NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzAsIDAsIDAsIDE3NDcsIDAsIDAsIDE3MjgsIDAsIDAsIDAsIDAsIAorICAgIDIzNDUsIDAsIDAsIDIzNTMsIDAsIDAsIDIzNTYsIDAsIDAsIDAsIDI1MDcsIDI1MDgsIDAsIDAsIDAsIDI4OTEsIDI4ODgsIAorICAgIDI4OTIsIDI5NjQsIDAsIDAsIDAsIDAsIDAsIDMwMTgsIDMwMjAsIDAsIDMwMTksIDAsIDAsIDAsIDAsIDMxNDQsIDAsIDAsIAorICAgIDAsIDAsIDMyNjQsIDAsIDMyNzQsIDMyNzEsIDMyNzIsIDAsIDMyNzUsIDAsIDAsIDAsIDAsIDM0MDIsIDM0MDQsIDAsIAorICAgIDM0MDMsIDAsIDAsIDAsIDAsIDM1NDYsIDM1NDgsIDM1NTAsIDAsIDAsIDAsIDAsIDM1NDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDQxMzQsIDAsIDAsIDAsIDY5MTgsIDAsIDAsIDY5MjAsIDAsIDAsIDY5MjIsIDAsIDAsIDY5MjQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDY5MjYsIDAsIDAsIDY5MzAsIDAsIDAsIDY5NzEsIDAsIDAsIDY5NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NzYsIDAsIAorICAgIDAsIDY5NzcsIDAsIDAsIDY5NzksIDAsIDAsIDAsIDc3MzYsIDAsIDAsIDc3MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDc3NzIsIAorICAgIDAsIDAsIDc3NzMsIDAsIDAsIDAsIDAsIDc3ODQsIDAsIDAsIDc3ODUsIDAsIDAsIDc4NTIsIDAsIDAsIDc4NjIsIDAsIDAsIAorICAgIDAsIDc4NTMsIDAsIDAsIDc4NjMsIDAsIDAsIDAsIDc4NzgsIDAsIDAsIDc4NzksIDAsIDAsIDc4OTYsIDAsIDAsIDc4OTcsIAorICAgIDAsIDAsIDAsIDAsIDc5MzgsIDc5NDAsIDAsIDAsIDc5NDIsIDgwNjQsIDAsIDc5MzksIDc5NDEsIDAsIDAsIDc5NDMsIAorICAgIDgwNjUsIDAsIDAsIDgwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNjcsIDAsIDAsIDgwNjgsIDAsIDAsIDgwNjksIDAsIDAsIAorICAgIDgwNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzEsIDAsIDc5NDYsIDc5NDgsIDAsIDAsIDc5NTAsIDgwNzIsIDAsIDc5NDcsIAorICAgIDc5NDksIDAsIDAsIDc5NTEsIDgwNzMsIDAsIDAsIDgwNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzUsIDAsIDAsIDgwNzYsIAorICAgIDAsIDAsIDgwNzcsIDAsIDAsIDgwNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNzksIDAsIDc5NTQsIDc5NTYsIDAsIDc5NTUsIAorICAgIDc5NTcsIDAsIDAsIDAsIDAsIDAsIDc5NjIsIDc5NjQsIDAsIDAsIDAsIDAsIDAsIDc5NjMsIDc5NjUsIDAsIDc5NzAsIAorICAgIDc5NzIsIDAsIDAsIDc5NzQsIDgwODAsIDAsIDc5NzEsIDc5NzMsIDAsIDAsIDc5NzUsIDgwODEsIDAsIDAsIDgwODIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDgwODMsIDAsIDAsIDgwODQsIDAsIDAsIDgwODUsIDAsIDAsIDgwODYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDgwODcsIDAsIDc5NzgsIDc5ODAsIDAsIDAsIDc5ODIsIDgwODgsIDAsIDc5NzksIDc5ODEsIDAsIDAsIDc5ODMsIAorICAgIDgwODksIDAsIDAsIDgwOTAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTEsIDAsIDAsIDgwOTIsIDAsIDAsIDgwOTMsIDAsIDAsIAorICAgIDgwOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDgwOTUsIDAsIDc5ODYsIDc5ODgsIDAsIDAsIDc5OTAsIDAsIDAsIDc5ODcsIAorICAgIDc5ODksIDAsIDAsIDc5OTEsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTQsIDc5OTYsIDAsIDAsIDAsIDAsIDAsIDAsIDc5OTgsIAorICAgIDAsIDAsIDc5OTUsIDc5OTcsIDAsIDAsIDc5OTksIDAsIDAsIDgwMDIsIDgwMDQsIDAsIDgwMDMsIDgwMDUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwMTAsIDgwMTIsIDAsIDAsIDAsIDAsIDAsIDgwMTEsIDgwMTMsIDAsIDgwMTgsIDgwMjAsIDAsIDAsIDgwMjIsIAorICAgIDAsIDAsIDgwMTksIDgwMjEsIDAsIDAsIDgwMjMsIDAsIDAsIDAsIDAsIDAsIDAsIDgwMjcsIDgwMjksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDgwMzEsIDAsIDAsIDgwMzQsIDgwMzYsIDAsIDAsIDgwMzgsIDgwOTYsIDAsIDgwMzUsIDgwMzcsIDAsIDAsIAorICAgIDgwMzksIDgwOTcsIDAsIDAsIDgwOTgsIDAsIDAsIDgwOTksIDAsIDAsIDAsIDAsIDAsIDAsIDgxMDAsIDAsIDAsIDgxMDEsIAorICAgIDAsIDAsIDgxMDIsIDAsIDAsIDgxMDMsIDAsIDAsIDAsIDAsIDAsIDgwNDIsIDgwNDQsIDAsIDAsIDgwNDYsIDgxMDQsIDAsIAorICAgIDgwNDMsIDgwNDUsIDAsIDAsIDgwNDcsIDgxMDUsIDAsIDAsIDgxMDYsIDAsIDAsIDgxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxMDgsIDAsIDAsIDgxMDksIDAsIDAsIDgxMTAsIDAsIDAsIDgxMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDgxMTQsIDAsIDAsIAorICAgIDgxMzAsIDAsIDAsIDgxNzgsIDAsIDAsIDgxMTksIDAsIDAsIDAsIDAsIDAsIDgxNDEsIDgxNDIsIDAsIDAsIDgxNDMsIDAsIAorICAgIDAsIDAsIDgxMzUsIDAsIDAsIDgxODMsIDAsIDAsIDAsIDAsIDAsIDgxNTcsIDgxNTgsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDgxNTksIDAsIDg2MDIsIDAsIDAsIDg2MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDg2MjIsIDAsIDAsIDg2NTMsIDAsIDAsIAorICAgIDg2NTUsIDAsIDAsIDg2NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDg3MDgsIDAsIDAsIDg3MTMsIDAsIDAsIDg3MTYsIDAsIDAsIAorICAgIDg3NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg3NDIsIDAsIDAsIDg3NjksIDAsIDAsIDg3NzIsIDAsIDAsIDg3NzUsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDg3NzcsIDAsIDAsIDg4MTMsIDAsIDAsIDg4MDIsIDAsIDAsIDg4MTYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDg4MTcsIDAsIDAsIDg4MjAsIDAsIDAsIDg4MjEsIDAsIDAsIDg4MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDg4MjUsIDAsIDAsIAorICAgIDg4MzIsIDAsIDAsIDg4MzMsIDAsIDAsIDg5MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDg5MjksIDAsIDAsIDg4MzYsIDAsIDAsIAorICAgIDg4MzcsIDAsIDAsIDg4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NDEsIDAsIDAsIDg5MzAsIDAsIDAsIDg5MzEsIDAsIDAsIAorICAgIDg4NzYsIDAsIDAsIDAsIDAsIDAsIDAsIDg4NzcsIDAsIDAsIDg4NzgsIDAsIDAsIDg4NzksIDAsIDAsIDg5MzgsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDg5MzksIDAsIDAsIDg5NDAsIDAsIDAsIDg5NDEsIDAsIDAsIDAsIDEyNDM2LCAwLCAwLCAxMjM2NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTIzNjYsIDAsIDAsIDEyMzY4LCAwLCAwLCAxMjM3MCwgMCwgMCwgMTIzNzIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEyMzc0LCAwLCAwLCAxMjM3NiwgMCwgMCwgMTIzNzgsIDAsIDAsIDEyMzgwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjM4MiwgMCwgMCwgMTIzODQsIDAsIDAsIDEyMzg2LCAwLCAwLCAxMjM4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzOTEsIDAsIAorICAgIDAsIDEyMzkzLCAwLCAwLCAxMjQwMCwgMTI0MDEsIDAsIDEyNDAzLCAxMjQwNCwgMCwgMCwgMCwgMCwgMCwgMTI0MDYsIAorICAgIDEyNDA3LCAwLCAwLCAwLCAwLCAwLCAxMjQwOSwgMTI0MTAsIDAsIDEyNDEyLCAxMjQxMywgMCwgMTI0NDYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDEyNTMyLCAwLCAwLCAxMjQ2MCwgMCwgMCwgMTI0NjIsIDAsIDAsIDEyNDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjQ2NiwgMCwgMCwgMTI0NjgsIDAsIDAsIDEyNDcwLCAwLCAwLCAxMjQ3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0NzQsIDAsIAorICAgIDAsIDEyNDc2LCAwLCAwLCAxMjQ3OCwgMCwgMCwgMTI0ODAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDgyLCAwLCAwLCAxMjQ4NSwgCisgICAgMCwgMCwgMTI0ODcsIDAsIDAsIDEyNDg5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQ5NiwgMTI0OTcsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyNDk5LCAxMjUwMCwgMCwgMTI1MDIsIDEyNTAzLCAwLCAxMjUwNSwgMTI1MDYsIDAsIDAsIDAsIDAsIDAsIDEyNTA4LCAKKyAgICAxMjUwOSwgMCwgMCwgMCwgMCwgMCwgMTI1MzUsIDAsIDAsIDEyNTM2LCAwLCAwLCAxMjUzNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTI1MzgsIDAsIDAsIDEyNTQyLCAwLCAwLCAwLCAwLCA2OTc4NiwgMCwgMCwgNjk3ODgsIDAsIDAsIDY5ODAzLCAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFuZ2VfcmVjb3JkIGNoYW5nZV9yZWNvcmRzXzNfMl8wW10gPSB7CkBAIC00NzAwLDYgKzUwNDAsMTMgQEAKIAl7IDI1NSwgMjksIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDI2LCAyNTUsIDI1NSwgMCB9LAogCXsgNSwgMjU1LCAyNTUsIDI1NSwgMCB9LAorCXsgMTQsIDYsIDI1NSwgMjU1LCAwIH0sCisJeyAxNSwgMjU1LCAyNTUsIDI1NSwgMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCAxLjAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMi4wIH0sCisJeyAyNTUsIDI1NSwgMjU1LCAyNTUsIDMuMCB9LAorCXsgMjU1LCAyNTUsIDI1NSwgMjU1LCA0LjAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgLTEgfSwKIAl7IDE0LCAyNTUsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDI1NSwgMjU1LCAwLCAwIH0sCiAJeyAyNTUsIDcsIDEsIDI1NSwgMCB9LApAQCAtNDcyMyw4MyArNTA3MCw4NyBAQAogCXsgMjU1LCAyNTUsIDcsIDI1NSwgMCB9LAogCXsgMjU1LCAyNTUsIDgsIDI1NSwgMCB9LAogCXsgMjU1LCAyNTUsIDksIDI1NSwgMCB9LAorCXsgMjU1LCAzMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDE5LCAzMCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgOCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjIsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDIzLCAyNTUsIDI1NSwgMCB9LAogCXsgOSwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMCwgMjU1LCAyNTUsIDAgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMWUrMTYgfSwKKwl7IDI1NSwgMjU1LCAyNTUsIDI1NSwgMWUrMjAgfSwKIAl7IDI1NSwgMTksIDI1NSwgMjU1LCAwIH0sCi0JeyAyNTUsIDI1NSwgMjU1LCAyNTUsIC0xIH0sCi0JeyAxNSwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAxOSwgMjU1LCAyNTUsIC0xIH0sCisJeyAxLCAyNTUsIDI1NSwgMCwgMCB9LAogfTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNoYW5nZXNfM18yXzBfaW5kZXhbXSA9IHsKLSAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMiwgMiwgMTQsIDE1LCAxNiwgMTcsIAotICAgIDE4LCAxOSwgMjAsIDIxLCAyMiwgMiwgMiwgMiwgMjMsIDI0LCAyNSwgMjYsIDIsIDIsIDI3LCAyOCwgMjksIDMwLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAzMSwgMiwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMiwgMzgsIDM5LCA0MCwgMiwgNDEsIDQyLCAyLCA0MywgCi0gICAgMiwgMiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCAyLCAyLCA0OSwgNTAsIDUxLCAyLCAyLCA1MiwgNTMsIDIsIDU0LCA1NSwgNTUsIAotICAgIDIsIDIsIDIsIDIsIDU2LCAyLCA1NywgNTgsIDU5LCA2MCwgNjEsIDIsIDIsIDIsIDIsIDYyLCA2MywgNjQsIDY1LCA2NiwgCi0gICAgNjcsIDY4LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAwLCAxLCAyLCAyLCAzLCA0LCA1LCA2LCAyLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDIsIDE1LCAxNiwgMTcsIAorICAgIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDIsIDIsIDIsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAKKyAgICAzNCwgMiwgMiwgMiwgMzUsIDM2LCAyLCAzNywgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCAKKyAgICA0OSwgMiwgNTAsIDIsIDIsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMiwgMiwgNTYsIDU3LCA1OCwgMiwgMiwgNTksIDYwLCA2MSwgCisgICAgNjIsIDYzLCA2MywgMiwgMiwgMiwgMiwgNjQsIDIsIDY1LCA2NiwgNjcsIDY4LCA2OSwgMiwgMiwgMiwgMiwgNzAsIDcxLCAKKyAgICA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgMiwgMiwgMiwgMiwgMiwgMiwgNzksIDIsIDIsIDIsIDIsIDIsIDgwLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCA2OSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgODEsIDIsIDgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4MywgCisgICAgODQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4NiwgODcsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDg4LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA4OSwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkxLCA5MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTMsIDQ4LCA0OCwgCisgICAgOTQsIDk1LCA0OCwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMDUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDcwLCA3MSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDEsIDQxLCA3MiwgNzMsIDQxLCA3NCwgNzUsIDc2LCA3NywgCi0gICAgMiwgNzgsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDIsIDIsIDIsIDExMiwgMTEzLCAyLCAxMTQsIDExNSwgCisgICAgMTE2LCAxMTcsIDExOCwgMTE5LCAyLCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMiwgMiwgMiwgMiwgMiwgMiwgMTI1LCAyLCAKKyAgICAxMjYsIDIsIDEyNywgMiwgMTI4LCAyLCAxMjksIDIsIDIsIDIsIDEzMCwgMiwgMiwgMiwgMTMxLCAxMzIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzMywgMiwgMTM0LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDEzNSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNzksIDgwLCA4MSwgODIsIDgzLCAyLCAyLCAyLCAKLSAgICAyLCA4NCwgODUsIDIsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDIsIDkyLCA5MywgOTQsIDk1LCA5NiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgOTcsIDIsIDk4LCAyLCA5OSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgNDgsIDQ4LCA0OCwgNDgsIDEzNiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgNDEsIDQxLCA0MSwgNDEsIDQxLCA0MSwgMTAwLCAyLCAxMDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEzNywgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMTAyLCAyLCAxMDMsIDIsIDEwNCwgMiwgMiwgMTA1LCAyLCAyLCAyLCAxMDYsIDEwNywgMTA4LCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMDksIDExMCwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMTM4LCAyLCAxMzksIDIsIDE0MCwgMiwgMiwgMTQxLCAyLCAyLCAyLCAxNDIsIDE0MywgMTQ0LCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNDUsIAorICAgIDE0NiwgMTQ3LCAxNDgsIDE0OSwgMiwgMTUwLCAxNTEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxMzksIDE1NywgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTU4LCAxNTksIDkwLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA3OSwgMTYwLCAyLCAxNjEsIDE2MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTYzLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAxNjQsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDE2NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTY2LCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE2NywgNDgsIDE2OCwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMTExLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxNjMsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTAzNSw3ICs1Mzg2LDcgQEAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCA0MSwgMTEyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OCwgMTY5LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUwOTksNyArNTQ1MCw3IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBjaGFuZ2VzXzNfMl8wX2RhdGFbXSA9IHsKQEAgLTUxNDcsNyArNTQ5OCw3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01MTU3LDE3ICs1NTA4LDE3IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExLCAxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIApAQCAtNTE3NywzNjcgKzU1MjgsMzY1IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEyLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMywgMTMsIDEzLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQsIDE1LCAxNiwgMTcsIDE4LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAKKyAgICAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMCwgMjAsIDIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDIzLCAyMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI4LCAwLCAwLCAwLCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAKLSAgICAxLCAxLCAwLCAwLCAwLCAwLCAyOCwgNiwgNCwgNSwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMSwgMSwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM2LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNywgMzgsIDEwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAotICAgIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIDM5LCAzOSwgMzksIAotICAgIDM5LCAzOSwgMzksIDM5LCAzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDcsIDcsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgCi0gICAgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgNywgNywgNywgNywgNywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgCi0gICAgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIwLCAyMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAsIDMwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgCi0gICAgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCA4LCAwLCAKKyAgICAwLCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCAxLCAxLCAwLCAwLCAwLCA4LCAzNSwgNiwgNCwgNSwgMzYsIDM3LCAzOCwgMzksIAorICAgIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAKICAgICA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgNDIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDUsIDQ2LCAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKKyAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCAwLCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01NTQ1LDYgKzU4OTQsMTUyIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIAorICAgIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDE4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCkBAIC01NTU1LDE2MCArNjA1MCwzMjAgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCAKLSAgICA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMTMsIDEzLCAxMywgMTMsIAotICAgIDEzLCAwLCAwLCAwLCAxLCAxLCAxMywgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIAotICAgIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgNDMsIDQzLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAyMCwgMjAsIDIwLCAyMCwgMjAsIDIwLCAwLCAwLCAwLCAxLCAxLCAyMCwgMjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMywgMTMsIDEzLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCAKKyAgICA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAKLSAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDcsIDAsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDAsIDAsIDAsIDcsIAorICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDAsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIAorICAgIDcsIDcsIDcsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIAogICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAotICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIAorICAgIDcsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIDAsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIAorICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgMCwgMCwgNywgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgNywgNywgMCwgMCwgMCwgNywgMCwgMCwgNywgMCwgMCwgMCwgMCwgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTMsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCAKLSAgICAwLCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKICAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCAwLCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCAwLCA3LCAwLCA3LCAwLCA3LCAKKyAgICA3LCA3LCAwLCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCA3LCA3LCA3LCA3LCAwLCA3LCAwLCAwLCA3LCA3LCA3LCA3LCAwLCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKKyAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCisgICAgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCiAgICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzLCAwLCAwLCAwLCAwLCAwLCAwLCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICAwLCAwLCAwLCAwLCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAKLSAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgCi0gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhbmdlX3JlY29yZCogZ2V0X2NoYW5nZV8zXzJfMChQeV9VQ1M0IG4pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKaW5kZXggZGQ0ZTQ0ZC4uODgzMDU2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaApAQCAtMSw0ICsxLDQgQEAKLS8qIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFRvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IDIuNiAqLworLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMy4yICovCiAKICNkZWZpbmUgTkFNRV9NQVhMRU4gMjU2CiAKQEAgLTYsMjc4OSArNiwzNTUyIEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBsZXhpY29uW10gPSB7CiAgICAgNzYsIDY5LCA4NCwgODQsIDY5LCAyMTAsIDg3LCA3MywgODQsIDIwMCwgODMsIDc3LCA2NSwgNzYsIDIwNCwgODMsIDg5LCAKICAgICA3NiwgNzYsIDY1LCA2NiwgNzYsIDE5NywgODMsIDczLCA3MSwgMjA2LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCAyMDQsIAotICAgIDc2LCA2NSwgODQsIDczLCAyMDYsIDg5LCAyMDEsIDY3LCA3NCwgMjAzLCA2NSwgODIsIDY1LCA2NiwgNzMsIDE5NSwgNjcsIAotICAgIDc5LCA3NywgODAsIDY1LCA4NCwgNzMsIDY2LCA3MywgNzYsIDczLCA4NCwgMjE3LCA3NywgNjUsIDg0LCA3MiwgNjksIDc3LCAKLSAgICA2NSwgODQsIDczLCA2NywgNjUsIDIwNCwgNjcsIDg1LCA3OCwgNjksIDczLCA3MCwgNzksIDgyLCAyMDUsIDgzLCA4OSwgNzcsIAotICAgIDY2LCA3OSwgMjA0LCA3MCwgNzksIDgyLCA3NywgMTI4LCA2NywgNjUsIDc4LCA2NSwgNjgsIDczLCA2NSwgMjA2LCA4MywgCi0gICAgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgNjcsIDIxMSwgNjYsIDc5LCA3NiwgMTk2LCA3MSwgODIsIDY5LCA2OSwgMjAzLCAKLSAgICA3NiwgNzMsIDcxLCA2NSwgODQsIDg1LCA4MiwgMTk3LCA2OCwgNzMsIDcxLCA3MywgMjEyLCA2NSwgNzgsIDE5NiwgNzcsIAotICAgIDg1LCA4MywgNzMsIDY3LCA2NSwgMjA0LCA4NCwgNzMsIDc3LCA2OSwgMjExLCA2OSwgODQsIDcyLCA3MywgNzksIDgwLCA3MywgCi0gICAgMTk1LCA3MiwgNjUsIDc4LCA3MSwgODUsIDIwNCwgNzMsIDg0LCA2NSwgNzYsIDczLCAxOTUsIDY3LCA4OSwgODIsIDczLCAKLSAgICA3NiwgNzYsIDczLCAxOTUsIDgyLCA2NSwgNjgsIDczLCA2NywgNjUsIDIwNCwgODMsIDY1LCA3OCwgODMsIDQ1LCA4MywgNjksIAotICAgIDgyLCA3MywgMTk4LCA4NiwgNzksIDg3LCA2OSwgMjA0LCA3MCwgNzksIDIxMCwgNjcsIDczLCA4MiwgNjcsIDc2LCA2OSwgCi0gICAgMTk2LCA4NiwgNjUsIDIwMSwgNzAsIDczLCA3OCwgNjUsIDIwNCwgNjcsIDc5LCA3NywgNjYsIDczLCA3OCwgNzMsIDc4LCAKLSAgICAxOTksIDgzLCA4MSwgODUsIDY1LCA4MiwgMTk3LCA4NiwgNjUsIDgyLCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjYsIAotICAgIDgyLCA2NSwgNzMsIDc2LCA3NiwgMTk3LCA4MCwgNjUsIDg0LCA4NCwgNjksIDgyLCAyMDYsIDgyLCA3MywgNzEsIDcyLCAKLSAgICAyMTIsIDc2LCA2OSwgNzAsIDIxMiwgNjYsIDg5LCA5MCwgNjUsIDc4LCA4NCwgNzMsIDc4LCAxOTcsIDczLCA4MywgNzksIAotICAgIDc2LCA2NSwgODQsIDY5LCAxOTYsIDE5NCwgNjUsIDY2LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgODUsIDY2LCA3NiwgCi0gICAgMTk3LCA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgMTkzLCA3NSwgNjUsIDc4LCA3MSwgODgsIDIwMSwgNzYsIDczLCAKLSAgICA3OCwgNjksIDY1LCAyMTAsIDY2LCA2OSwgNzYsIDc5LCA4NywgMTI4LCA3NywgNzksIDY4LCA3MywgNzAsIDczLCA2OSwgCi0gICAgMjEwLCA4MywgNzMsIDcxLCA3OCwgMTI4LCA4NCwgNzMsIDY2LCA2OSwgODQsIDY1LCAyMDYsIDc3LCA2OSwgNjksIDIwNSwgCi0gICAgNjgsIDc5LCAyMTIsIDY1LCAxMjgsIDY1LCA4MiwgODIsIDc5LCA4NywgMTI4LCA3MywgNzgsIDczLCA4NCwgNzMsIDY1LCAKLSAgICAyMDQsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDIwNCwgODksIAotICAgIDY5LCAyMDAsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDc4LCA4NSwgNzcsIDY2LCA2OSwgCi0gICAgMjEwLCA4NSwgMTI4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgCi0gICAgNzcsIDg5LCA2NSwgNzgsIDc3LCA2NSwgMjEwLCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgNzUsIDcyLCA3NywgNjksIAotICAgIDIxMCwgNzksIDEyOCwgNzMsIDEyOCwgODQsIDczLCA3NiwgMTk3LCA3NywgNjUsIDgyLCA3NSwgMTI4LCA2NiwgNzksIDIxNiwgCi0gICAgNzIsIDY5LCA2NiwgODIsIDY5LCAyMTUsIDgwLCA3NiwgODUsIDIxMSwgNjgsIDgyLCA2NSwgODcsIDczLCA3OCwgNzEsIAotICAgIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICAxMjgsIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgCi0gICAgMTk3LCA2NiwgNzYsIDY1LCA2NywgMjAzLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA3MiwgNzksIDc5LCAKLSAgICA3NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA3MywgMTk1LCA4NCwgNjUsIDIwMSwgNjUsIDc2LCA2OSwgMTk4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCi0gICAgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIDY4LCA2OSwgODYsIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgODMsIDY3LCAKLSAgICA4MiwgNzMsIDgwLCAyMTIsIDg0LCA3OSwgMTI4LCAyMTMsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODUsIDIwOCwgCi0gICAgNzAsIDg1LCA3NiwgNzYsIDg3LCA3MywgNjgsIDg0LCAyMDAsIDcyLCA2NSwgMjAwLCA2OCwgNzksIDg3LCAyMDYsIDY2LCAKLSAgICA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDY5LCA4MSwgODUsIDY1LCAyMDQsIDc5LCAxOTgsIDc5LCA4NiwgNjksIAotICAgIDIxMCwgODQsIDY1LCAxOTksIDY4LCA3OSwgNzcsIDczLCA3OCwgMjA3LCA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIAotICAgIDc4LCA4NSwgNzcsIDY5LCA4MiwgNzMsIDE5NSwgNzIsIDY5LCA2NSwgODYsIDIxNywgODQsIDg3LCA3OSwgMTI4LCA3NywgCi0gICAgNjUsIDc2LCA2NSwgODksIDY1LCA3NiwgNjUsIDIwNSwgNzEsIDc2LCA2NSwgNzEsIDc5LCA3NiwgNzMsIDg0LCA3MywgMTk1LCAKLSAgICA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCA4NCwgNjksIDIxMCwgNzYsIDY5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY4LCAyMTEsIAotICAgIDc5LCA3OCwgNjksIDEyOCwgODQsIDY5LCA3NiwgODUsIDcxLCAyMTMsIDY1LCA4MiwgNzcsIDY5LCA3OCwgNzMsIDY1LCAKLSAgICAyMDYsIDY2LCA2OSwgNzgsIDcxLCA2NSwgNzYsIDIwMSwgNjcsIDcyLCA3OSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNzQsIAotICAgIDY5LCA2OSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjUsIDIwNCwgNjYsIDY1LCA4MiwgMTI4LCA3MiwgNzMsIDgyLCA2NSwgCi0gICAgNzEsIDY1LCA3OCwgMTkzLCA4NywgNjksIDgzLCA4NCwgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDcyLCA2NSwgMjAxLCAKLSAgICA3NSwgNjUsIDc4LCA3OCwgNjUsIDY4LCAxOTMsIDY3LCA3MiwgNjksIDgyLCA3OSwgNzUsIDY5LCAxOTcsIDcyLCA2NSwgNzYsIAotICAgIDE5OCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc5LCA4MiwgNzMsIDg5LCAxOTMsIDg0LCA4NywgCi0gICAgMjA3LCA2NywgNzIsIDY1LCAyMDUsIDcxLCA4NSwgNzQsIDY1LCA4MiwgNjUsIDg0LCAyMDEsIDc0LCA3OSwgNzgsIDcxLCAKLSAgICA4MywgNjksIDc5LCA3OCwgMTk5LCA3OCwgNjksIDIxNSwgODIsIDg1LCA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIAotICAgIDY1LCA4MywgNzIsIDg0LCA4MiwgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgCi0gICAgNjksIDgyLCA2OSwgMjEyLCA3NiwgODUsIDE5NywgODMsIDczLCA3OCwgNzIsIDY1LCA3NiwgMTkzLCA3MSwgODUsIDgyLCAKLSAgICA3NywgODUsIDc1LCA3MiwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MywgODksIDgyLCA3MywgNjUsIAotICAgIDE5NSwgODQsIDcyLCA4MiwgNjksIDE5NywgODYsIDc5LCA2NywgNjUsIDc2LCA3MywgMTk1LCA3MiwgNjUsIDEyOCwgNjUsIAotICAgIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3NiwgNzMsIDcxLCA3MiwgMjEyLCA3MCwgCi0gICAgNzksIDg1LCA4MiwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgODMsIDg0LCA4MiwgODUsIDY3LCAyMDMsIDg0LCAKLSAgICA2NSwgNzcsIDczLCAyMDQsIDY1LCA4MCwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIAotICAgIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDc3LCA2NSwgODIsIDIwMywgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA2OSwgCi0gICAgNzYsIDY5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3OSwgNzgsIDE5NywgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKLSAgICA2NSwgMjA0LCA3NCwgODUsIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgNjYsIDY1LCA4MiwgMTk0LCA2OCwgNjUsIAotICAgIDgzLCA3MywgMTkzLCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCA3NywgNjUsIDc1LCA4MywgCi0gICAgODUsIDgyLCAxOTMsIDY2LCA3OSwgODAsIDc5LCA3NywgNzksIDcwLCAyMDcsIDc1LCA2NSwgMTI4LCA3NSwgNzIsIDY1LCAKLSAgICA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIDc2LCA2NSwgMjA3LCA4NCwgMjA3LCA3MiwgNjksIDg4LCA2NSwgNzEsIAotICAgIDgyLCA2NSwgMjA1LCA3NiwgNzksIDc4LCAxOTksIDgzLCA3MywgODgsIDEyOCwgNzYsIDc5LCAyMTUsIDgwLCA4MywgNzMsIAotICAgIDc2LCAyMDEsIDY5LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgMTkzLCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgCi0gICAgNjcsIDE5NywgNzgsIDc5LCAyMTIsIDg5LCA2NSwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4MywgMTI4LCA4MywgNjksIAotICAgIDg2LCA2OSwgNzgsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAxOTcsIDg2LCAxMjgsIDY4LCA3OSwgODQsIDIxMSwgNzcsIAotICAgIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDcyLCA3MywgNzEsIDIwMCwgNzUsIDcyLCA2NSwgCi0gICAgMjAwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3OCwgNzUsIDIwNywgODQsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDg0LCA3OSwgCi0gICAgNzgsIDE5NywgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA4MiwgNjUsIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAKLSAgICAxOTYsIDY1LCA2OSwgNzEsIDY5LCA2NSwgMjA2LCA3MiwgMTI4LCA4MCwgNjUsIDEyOCwgNzEsIDEyOCwgNzYsIDY1LCA3MSwgCi0gICAgNjUsIDE5NCwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgODAsIDE5MywgNjcsIDg5LCA4MCwgODIsIDczLCA3OSwgMjEyLCAKLSAgICA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgCi0gICAgMTk3LCA4NCwgNzMsIDcwLCA3MywgNzgsIDY1LCA3MSwgMjAwLCA2OCwgMTI4LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgCi0gICAgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgODgsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCAKLSAgICA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIAotICAgIDEyOCwgOTAsIDkwLCA4NSwgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIAotICAgIDc5LCA4OCwgMTI4LCA5MCwgOTAsIDc5LCA4MCwgMTI4LCA5MCwgOTAsIDc5LCAxMjgsIDkwLCA5MCwgNzMsIDg4LCAxMjgsIAotICAgIDkwLCA5MCwgNzMsIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA5MCwgCi0gICAgOTAsIDczLCA2OSwgODQsIDEyOCwgOTAsIDkwLCA3MywgNjksIDgwLCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAxMjgsIDkwLCAKLSAgICA5MCwgNzMsIDEyOCwgOTAsIDkwLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA2OSwgODAsIDEyOCwgOTAsIDkwLCA2OSwgNjksIAotICAgIDEyOCwgOTAsIDkwLCA2OSwgMTI4LCA5MCwgOTAsIDY1LCA4OCwgMTI4LCA5MCwgOTAsIDY1LCA4NCwgMTI4LCA5MCwgOTAsIAotICAgIDY1LCA4MCwgMTI4LCA5MCwgOTAsIDY1LCA2NSwgMTI4LCA5MCwgOTAsIDY1LCAxMjgsIDkwLCA4OSwgNzEsIDc5LCA4MywgCi0gICAgMTI4LCA5MCwgODcsIDY1LCA4MiwgNjUsIDc1LCA2NSwgODksIDEyOCwgOTAsIDg3LCA2NSwgMTI4LCA5MCwgODUsIDg0LCAKLSAgICAxMjgsIDkwLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA4NSwgNzksIDgwLCAxMjgsIDkwLCA4NSwgNzksIDEyOCwgOTAsIDg1LCAKLSAgICA3NywgMTI4LCA5MCwgODUsIDY2LCA4NSwgODIsIDEyOCwgOTAsIDg1LCA1MywgMTI4LCA5MCwgODUsIDE4MSwgOTAsIDgyLCAKLSAgICA2NSwgMTI4LCA5MCwgODEsIDY1LCA4MCwgNzIsIDE5MywgOTAsIDc5LCA4NCwgMTI4LCA5MCwgNzksIDc5LCAxMjgsIDkwLCAKLSAgICA3OSwgNjUsIDEyOCwgOTAsIDc2LCA2NSwgNzcsIDE5MywgOTAsIDc2LCA2NSwgMTI4LCA5MCwgNzYsIDE5MywgOTAsIDc0LCAKLSAgICA2OSwgMTI4LCA5MCwgNzMsIDkwLCA1MCwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgODIsIDEyOCwgOTAsIDczLCA3NiwgNjgsIAotICAgIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAxMjgsIDkwLCA3MywgNjgsIDE5MywgOTAsIAotICAgIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgMjAxLCA5MCwgNzIsIDg5LCA4OCwgMTI4LCAKLSAgICA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4OSwgODIsIDEyOCwgOTAsIAotICAgIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCA2OSwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgCi0gICAgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCA5MCwgNzIsIDg1LCA4MiwgODgsIDEyOCwgCi0gICAgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCAKLSAgICA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgNzIsIDg1LCAxMjgsIDkwLCA3MiwgNzksIAotICAgIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAxMjgsIDkwLCA3MiwgNzksIDc5LCAxMjgsIAotICAgIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIDEyOCwgOTAsIDcyLCA3MywgMTI4LCA5MCwgCi0gICAgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCAKLSAgICA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIDY1LCA4OCwgMTI4LCA5MCwgNzIsIDY1LCAKLSAgICA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgMTI4LCA5MCwgNzIsIDY1LCA3MywgNzgsIAotICAgIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgNzIsIDEyOCwgOTAsIDY5LCA4NCwgNjUsIAotICAgIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgNjksIDc4LCAxMjgsIDkwLCA2OSwgNzcsIAotICAgIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCA5MCwgNjksIDUwLCAxMjgsIDkwLCAxOTcsIAotICAgIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgCi0gICAgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIDEyOCwgOTAsIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAKLSAgICAxOTgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIDkwLCA2NSwgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAKLSAgICAyMDYsIDkwLCA2NSwgNzMsIDEyOCwgOTAsIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgCi0gICAgMTI4LCAyMTgsIDg5LCA4OSwgODgsIDEyOCwgODksIDg5LCA4NCwgMTI4LCA4OSwgODksIDgyLCA4OCwgMTI4LCA4OSwgODksIAotICAgIDgyLCAxMjgsIDg5LCA4OSwgODAsIDEyOCwgODksIDg5LCA2NSwgMTI4LCA4OSwgODksIDEyOCwgODksIDg3LCA3OSwgNzksIAotICAgIDEyOCwgODksIDg3LCA3OSwgMTI4LCA4OSwgODcsIDczLCA3MywgMTI4LCA4OSwgODcsIDczLCAxMjgsIDg5LCA4NywgNjksIAotICAgIDEyOCwgODksIDg3LCA2NSwgNjUsIDEyOCwgODksIDg3LCA2NSwgMTI4LCA4OSwgODYsIDEyOCwgODksIDg1LCA4OCwgMTI4LCAKLSAgICA4OSwgODUsIDg1LCA3NSwgNjUsIDc2LCA2OSwgNjUsIDgwLCA3MywgNzgsIDg0LCA4NSwgMTI4LCA4OSwgODUsIDg0LCAxMjgsIAotICAgIDg5LCA4NSwgODMsIDEyOCwgODksIDg1LCAyMTEsIDg5LCA4NSwgODIsIDg4LCAxMjgsIDg5LCA4NSwgODIsIDEyOCwgODksIAotICAgIDg1LCA4MCwgMTI4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA4OSwgODUsIDc5LCA4NCwgMTI4LCA4OSwgODUsIDc5LCA4MCwgCi0gICAgMTI4LCA4OSwgODUsIDc5LCAxMjgsIDg5LCA4NSwgNjgsIDcyLCAxMjgsIDg5LCA4NSwgNjgsIDIwMCwgODksIDg1LCA2NSwgCisgICAgNzYsIDY1LCA4NCwgNzMsIDIwNiwgODksIDIwMSwgNjcsIDc0LCAyMDMsIDY5LCA3MSwgODksIDgwLCA4NCwgNzMsIDY1LCAKKyAgICAyMDYsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDIwMCwgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIAorICAgIDY3LCA3OSwgNzcsIDgwLCA2NSwgODQsIDczLCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzcsIDY1LCA4NCwgNzIsIDY5LCAKKyAgICA3NywgNjUsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDY3LCA4NSwgNzgsIDY5LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA4MywgODksIAorICAgIDc3LCA2NiwgNzksIDIwNCwgNzAsIDc5LCA4MiwgNzcsIDEyOCwgNjcsIDY1LCA3OCwgNjUsIDY4LCA3MywgNjUsIDIwNiwgCisgICAgODMsIDg5LCA3NiwgNzYsIDY1LCA2NiwgNzMsIDY3LCAyMTEsIDY2LCA2NSwgNzcsIDg1LCAyMDUsIDY4LCA3MywgNzEsIDczLCAKKyAgICAyMTIsIDY2LCA3OSwgNzYsIDE5NiwgNzIsIDY1LCA3OCwgNzEsIDg1LCAyMDQsIDY1LCA3OCwgMTk2LCA3MSwgODIsIDY5LCAKKyAgICA2OSwgMjAzLCA3NiwgNzMsIDcxLCA2NSwgODQsIDg1LCA4MiwgMTk3LCA3NywgODUsIDgzLCA3MywgNjcsIDY1LCAyMDQsIAorICAgIDY5LCA4NCwgNzIsIDczLCA3OSwgODAsIDczLCAxOTUsIDg0LCA3MywgNzcsIDY5LCAyMTEsIDg2LCA3OSwgODcsIDY5LCAKKyAgICAyMDQsIDcwLCA3OSwgMjEwLCA3MywgODQsIDY1LCA3NiwgNzMsIDE5NSwgNjcsIDg5LCA4MiwgNzMsIDc2LCA3NiwgNzMsIAorICAgIDE5NSwgODIsIDY1LCA2OCwgNzMsIDY3LCA2NSwgMjA0LCA4MywgNjUsIDc4LCA4MywgNDUsIDgzLCA2OSwgODIsIDczLCAKKyAgICAxOTgsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIDE5NiwgNjcsIDc5LCA3NywgNjYsIDczLCA3OCwgNzMsIDc4LCAxOTksIAorICAgIDg0LCA2NSwgMjAxLCA4NiwgNjUsIDIwMSwgNzAsIDczLCA3OCwgNjUsIDIwNCwgODMsIDgxLCA4NSwgNjUsIDgyLCAxOTcsIAorICAgIDc2LCA2OSwgNzAsIDIxMiwgODYsIDY1LCA4MiwgNzMsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY2LCA4MiwgNjUsIDczLCA3NiwgCisgICAgNzYsIDE5NywgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgMjA2LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NiwgODksIDkwLCAKKyAgICA2NSwgNzgsIDg0LCA3MywgNzgsIDE5NywgNzMsIDgzLCA3OSwgNzYsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDY2LCA3OSwgODYsIAorICAgIDY5LCAxMjgsIDc4LCA4NSwgNzcsIDY2LCA2OSwgMjEwLCA2OCwgNzksIDg1LCA2NiwgNzYsIDE5NywgODMsIDczLCA3MSwgCisgICAgNzgsIDEyOCwgMTk0LCA2NiwgNjksIDc2LCA3OSwgODcsIDEyOCwgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDE5MywgCisgICAgNzUsIDY1LCA3OCwgNzEsIDg4LCAyMDEsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3NywgNzksIDY4LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMjEwLCA4NCwgNzMsIDY2LCA2OSwgODQsIDY1LCAyMDYsIDY1LCAxMjgsIDY4LCA3OSwgMjEyLCA3NywgNjksIDY5LCAKKyAgICAyMDUsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgNzksIDE5OCwgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCAKKyAgICA4NywgNzIsIDczLCA4NCwgMTk3LCA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgODUsIDEyOCwgNzMsIDc4LCA3MywgODQsIAorICAgIDczLCA2NSwgMjA0LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3MywgMTI4LCA4OSwgNjksIDIwMCwgNzksIAorICAgIDEyOCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzcsIDY1LCA4MiwgNzUsIDEyOCwgNjUsIDY2LCA3OSwgODYsIDE5NywgNjcsIAorICAgIDc5LCA4MCwgODQsIDczLCAxOTUsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NywgNzcsIDc5LCA3OCwgNzEsIDc5LCA3NiwgCisgICAgNzMsIDY1LCAyMDYsIDY4LCA2OSwgODYsIDY1LCA3OCwgNjUsIDcxLCA2NSwgODIsIDIwMSwgNjYsIDc2LCA2NSwgNjcsIAorICAgIDIwMywgNzUsIDcyLCA3NywgNjksIDIxMCwgODQsIDczLCA3NiwgMTk3LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgCisgICAgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODQsIDcyLCA2NSwgMjA1LCAKKyAgICA3NCwgNzksIDc4LCA3MSwgODMsIDY5LCA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA4MywgODEsIAorICAgIDg1LCA2NSwgODIsIDY5LCAxOTYsIDY2LCA3OSwgMjE2LCA3MiwgNjksIDY2LCA4MiwgNjksIDIxNSwgODAsIDc2LCA4NSwgCisgICAgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIDY4LCAyMTEsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAKKyAgICAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCisgICAgMjAwLCA2NiwgNjUsIDc2LCA3MywgNzgsIDY5LCA4MywgMTk3LCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCAKKyAgICA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgNzIsIDY1LCA4MywgNjksIAorICAgIDQ1LCAxOTYsIDY1LCA3NiwgNjcsIDcyLCA2OSwgNzcsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNjUsIDc2LCA2OSwgMTk4LCA3MiwgNjksIDY1LCA4NiwgMjE3LCA4NCwgNzksIDEyOCwgCisgICAgODQsIDg3LCA3OSwgMTI4LCA3OSwgODYsIDY5LCAyMTAsIDIxMywgNjYsIDgyLCA2NSwgNzIsIDc3LCAyMDEsIDgzLCA2NywgCisgICAgODIsIDczLCA4MCwgMjEyLCA4NSwgMjA4LCA3NiwgNzksIDIxNSwgNzksIDc4LCA2OSwgMTI4LCA4NCwgODcsIDIwNywgNjgsIAorICAgIDc5LCA4NywgMjA2LCA3MCwgODUsIDc2LCA3NiwgODcsIDczLCA2OCwgODQsIDIwMCwgNzIsIDY1LCAyMDAsIDc5LCA3OCwgCisgICAgMTk3LCA2OSwgODEsIDg1LCA2NSwgMjA0LCA3MiwgNzMsIDcxLCAyMDAsIDY2LCA4MiwgNjUsIDY3LCA3NSwgNjksIDg0LCAKKyAgICAxMjgsIDg0LCA2NSwgMTk5LCA2OCwgNzksIDc3LCA3MywgNzgsIDIwNywgNzgsIDg1LCA3NywgNjksIDgyLCA3MywgMTk1LCAKKyAgICA3MCwgODIsIDY1LCA3NSwgODQsIDg1LCAyMTAsIDc3LCA2NSwgNzYsIDY1LCA4OSwgNjUsIDc2LCA2NSwgMjA1LCA4MCwgNzIsIAorICAgIDY1LCA4MywgNjksIDQ1LCAxOTUsIDc2LCA2OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OCwgMjExLCA4NCwgNzIsIDgyLCA2OSwgCisgICAgMTk3LCA2NiwgNjUsIDgyLCAxMjgsIDc0LCA4NSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MSwgNzYsIDY1LCAKKyAgICA3MSwgNzksIDc2LCA3MywgODQsIDczLCAxOTUsIDY3LCA3MiwgNjUsIDgyLCA2NSwgNjcsIDg0LCA2OSwgMjEwLCA3NywgNjksIAorICAgIDY4LCA3MywgNjUsIDIwNCwgODQsIDY5LCA3NiwgODUsIDcxLCAyMTMsIDY2LCA2OSwgNzgsIDcxLCA2NSwgNzYsIDIwMSwgCisgICAgNjUsIDgyLCA3NywgNjksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgNzgsIDE5MywgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc0LCA2NSwgODYsIDY1LCA3OCwgNjksIDgzLCAxOTcsIDc0LCA2OSwgNjksIAorICAgIDIwNSwgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgODYsIDE5NywgNzksIDgyLCA3MywgODksIDE5MywgODcsIDY5LCA4MywgCisgICAgODQsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDcyLCA2NSwgNzYsIDE5OCwgNzcsIDY1LCA4MiwgMjAzLCA4MCwgNzIsIDY1LCAKKyAgICA4MywgNjksIDQ1LCAxOTMsIDg0LCA3MiwgNjUsIDIwMSwgNzUsIDY1LCA3OCwgNzgsIDY1LCA2OCwgMTkzLCA3OCwgNjksIAorICAgIDIxNSwgNjcsIDcyLCA2OSwgODIsIDc5LCA3NSwgNjksIDE5NywgNzIsIDY1LCAxMjgsIDg0LCA3OSwgNzgsIDE5NywgODYsIAorICAgIDc5LCA2NywgNjUsIDc2LCA3MywgMTk1LCA2NywgNzIsIDY1LCAyMDUsIDcwLCA3OSwgODUsIDgyLCAxMjgsIDcxLCA4NSwgCisgICAgNzQsIDY1LCA4MiwgNjUsIDg0LCAyMDEsIDc2LCA4NSwgMTk3LCA4NCwgNzIsIDgyLCA2OSwgNjksIDEyOCwgODIsIDg1LCAKKyAgICA3OCwgNzMsIDE5NSwgODMsIDY1LCA4NSwgODIsIDY1LCA4MywgNzIsIDg0LCA4MiwgMTkzLCA4NCwgNjksIDg0LCA4MiwgNjUsIAorICAgIDcxLCA4MiwgNjUsIDIwNSwgNjgsIDY5LCA4MywgNjksIDgyLCA2OSwgMjEyLCA4MywgNzMsIDc4LCA3MiwgNjUsIDc2LCAKKyAgICAxOTMsIDcxLCA4NSwgODIsIDc3LCA4NSwgNzUsIDcyLCAyMDEsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA2OCwgNzksIDg0LCAyMTEsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDg0LCA2NSwgCisgICAgNzcsIDczLCAyMDQsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA3NSwgNjUsIDEyOCwgCisgICAgNzYsIDY5LCA4MCwgNjcsIDcyLCAxOTMsIDc2LCA3OSwgNzgsIDE5OSwgODQsIDg1LCA4MiwgNzUsIDczLCAxOTUsIDg5LCAKKyAgICA2NSwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgODMsIDg0LCA4MiwgODUsIDY3LCAyMDMsIDc3LCA2NSwgCisgICAgMTI4LCA4MywgNzMsIDg4LCAxMjgsIDg2LCA3MywgNjksIDIxMiwgNzIsIDY1LCA3NywgOTAsIDE5MywgODAsIDY1LCAxMjgsIAorICAgIDY1LCA4MCwgMjA0LCA2OSwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgCisgICAgMjA0LCA4MywgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgMjA0LCA3OCwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgNjksIDc2LCA2OSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjYsIAorICAgIDc5LCA4MCwgNzksIDc3LCA3OSwgNzAsIDIwNywgODIsIDY1LCAxMjgsIDc4LCA2NSwgMTI4LCA2NiwgNjUsIDgyLCAxOTQsIAorICAgIDY4LCA2NSwgODMsIDczLCAxOTMsIDc1LCA2NSwgNzMsIDg0LCA3MiwgMjAxLCA3NiwgNzMsIDc3LCA2NiwgMjEzLCA3NywgCisgICAgNjUsIDc1LCA4MywgODUsIDgyLCAxOTMsIDg0LCAyMDcsIDkwLCA5MCwgODksIDg4LCAxMjgsIDkwLCA5MCwgODksIDg0LCAKKyAgICAxMjgsIDkwLCA5MCwgODksIDgyLCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgMTI4LCA5MCwgOTAsIDg5LCA4MCwgMTI4LCAKKyAgICA5MCwgOTAsIDg5LCAxMjgsIDkwLCA5MCwgODUsIDg4LCAxMjgsIDkwLCA5MCwgODUsIDgyLCA4OCwgMTI4LCA5MCwgOTAsIAorICAgIDg1LCA4MiwgMTI4LCA5MCwgOTAsIDg1LCA4MCwgMTI4LCA5MCwgOTAsIDg1LCAxMjgsIDkwLCA5MCwgNzksIDg4LCAxMjgsIAorICAgIDkwLCA5MCwgNzksIDgwLCAxMjgsIDkwLCA5MCwgNzksIDEyOCwgOTAsIDkwLCA3MywgODgsIDEyOCwgOTAsIDkwLCA3MywgCisgICAgODQsIDEyOCwgOTAsIDkwLCA3MywgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg4LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAKKyAgICA4NCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgODAsIDEyOCwgOTAsIDkwLCA3MywgNjksIDEyOCwgOTAsIDkwLCA3MywgMTI4LCAKKyAgICA5MCwgOTAsIDY5LCA4OCwgMTI4LCA5MCwgOTAsIDY5LCA4MCwgMTI4LCA5MCwgOTAsIDY5LCA2OSwgMTI4LCA5MCwgOTAsIAorICAgIDY5LCAxMjgsIDkwLCA5MCwgNjUsIDg4LCAxMjgsIDkwLCA5MCwgNjUsIDg0LCAxMjgsIDkwLCA5MCwgNjUsIDgwLCAxMjgsIAorICAgIDkwLCA5MCwgNjUsIDY1LCAxMjgsIDkwLCA5MCwgNjUsIDEyOCwgOTAsIDg5LCA3MSwgNzksIDgzLCAxMjgsIDkwLCA4NywgCisgICAgNjUsIDgyLCA2NSwgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCAKKyAgICA4NSwgNjYsIDg1LCA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODIsIDY1LCAxMjgsIDkwLCAKKyAgICA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIDc5LCA2NSwgMTI4LCAKKyAgICA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIDY5LCAxMjgsIDkwLCAKKyAgICA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgODIsIDEyOCwgOTAsIAorICAgIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAxMjgsIDkwLCA3MywgCisgICAgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgMjAxLCA5MCwgNzIsIAorICAgIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4OSwgCisgICAgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCA2OSwgMTI4LCA5MCwgCisgICAgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCA5MCwgNzIsIDg1LCAKKyAgICA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIDcyLCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgNzIsIDg1LCAxMjgsIAorICAgIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAxMjgsIDkwLCA3MiwgCisgICAgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIDEyOCwgOTAsIDcyLCAKKyAgICA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIDY5LCA4MCwgMTI4LCAKKyAgICA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIDY1LCA4OCwgMTI4LCAKKyAgICA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgMTI4LCA5MCwgNzIsIAorICAgIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgNzIsIDEyOCwgOTAsIAorICAgIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgNjksIDc4LCAxMjgsIAorICAgIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCA5MCwgNjksIDUwLCAKKyAgICAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCA5MCwgNjUsIDg5LCAKKyAgICA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIDEyOCwgOTAsIAorICAgIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIDkwLCA2NSwgCisgICAgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIDkwLCA2NSwgNzMsIDEyOCwgOTAsIDY1LCA3MiwgCisgICAgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgNjUsIDY5LCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1NCwgCisgICAgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDcxLCAxMjgsIDkwLCA0OCwgNDksIDU0LCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCAKKyAgICA1NCwgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY4LCAxMjgsIDkwLCA0OCwgNDksIDU0LCA2NywgMTI4LCA5MCwgNDgsIAorICAgIDQ5LCA1NCwgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDkwLCA0OCwgNDksIDU0LCAxMjgsIDkwLCA0OCwgCisgICAgNDksIDUzLCA3MywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNzIsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDcxLCAxMjgsIDkwLCAKKyAgICA0OCwgNDksIDUzLCA3MCwgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjksIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY4LCAxMjgsIAorICAgIDkwLCA0OCwgNDksIDUzLCA2NywgMTI4LCA5MCwgNDgsIDQ5LCA1MywgNjYsIDEyOCwgOTAsIDQ4LCA0OSwgNTMsIDY1LCAKKyAgICAxMjgsIDkwLCA0OCwgNDksIDUzLCAxMjgsIDkwLCA0OCwgNDksIDUyLCAxMjgsIDkwLCA0OCwgNDksIDUxLCAxMjgsIDkwLCAKKyAgICA0OCwgNDksIDUwLCAxMjgsIDkwLCA0OCwgNDksIDQ5LCAxMjgsIDkwLCA0OCwgNDksIDQ4LCAxMjgsIDkwLCA0OCwgNDgsIAorICAgIDU3LCAxMjgsIDkwLCA0OCwgNDgsIDU2LCAxMjgsIDkwLCA0OCwgNDgsIDU1LCAxMjgsIDkwLCA0OCwgNDgsIDU0LCAxMjgsIAorICAgIDkwLCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA5MCwgNDgsIDQ4LCA1MywgMTI4LCA5MCwgNDgsIDQ4LCA1MiwgNjUsIDEyOCwgCisgICAgOTAsIDQ4LCA0OCwgNTIsIDEyOCwgOTAsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDkwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCAKKyAgICA5MCwgNDgsIDQ4LCA1MSwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjgsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDY3LCAxMjgsIAorICAgIDkwLCA0OCwgNDgsIDUwLCA2NiwgMTI4LCA5MCwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgOTAsIDQ4LCA0OCwgNTAsIDEyOCwgCisgICAgOTAsIDQ4LCA0OCwgNDksIDEyOCwgOTAsIDEyOCwgMjE4LCA4OSwgODksIDg4LCAxMjgsIDg5LCA4OSwgODQsIDEyOCwgODksIAorICAgIDg5LCA4MiwgODgsIDEyOCwgODksIDg5LCA4MiwgMTI4LCA4OSwgODksIDgwLCAxMjgsIDg5LCA4OSwgNjksIDEyOCwgODksIAorICAgIDg5LCA2NSwgMTI4LCA4OSwgODksIDEyOCwgODksIDg3LCA3OSwgNzksIDEyOCwgODksIDg3LCA3OSwgMTI4LCA4OSwgODcsIAorICAgIDczLCA3MywgMTI4LCA4OSwgODcsIDczLCAxMjgsIDg5LCA4NywgNjksIDEyOCwgODksIDg3LCA2NSwgNjUsIDEyOCwgODksIAorICAgIDg3LCA2NSwgMTI4LCA4OSwgODYsIDEyOCwgODksIDg1LCA4OCwgMTI4LCA4OSwgODUsIDg3LCA3OSwgODEsIDEyOCwgODksIAorICAgIDg1LCA4NSwgNzUsIDY1LCA3NiwgNjksIDY1LCA4MCwgNzMsIDc4LCA4NCwgODUsIDEyOCwgODksIDg1LCA4NCwgMTI4LCA4OSwgCisgICAgODUsIDgzLCAxMjgsIDg5LCA4NSwgMjExLCA4OSwgODUsIDgyLCA4OCwgMTI4LCA4OSwgODUsIDgyLCAxMjgsIDg5LCA4NSwgCisgICAgODEsIDEyOCwgODksIDg1LCAyMDksIDg5LCA4NSwgODAsIDEyOCwgODksIDg1LCA3OSwgODgsIDEyOCwgODksIDg1LCA3OSwgCisgICAgODQsIDEyOCwgODksIDg1LCA3OSwgODAsIDEyOCwgODksIDg1LCA3OSwgNzcsIDEyOCwgODksIDg1LCA3OSwgMTI4LCA4OSwgCisgICAgODUsIDc4LCAxMjgsIDg5LCA4NSwgNzcsIDEyOCwgODksIDg1LCA2OSwgODEsIDEyOCwgODksIDg1LCA2OSwgMTI4LCA4OSwgCisgICAgODUsIDY4LCA3MiwgMTI4LCA4OSwgODUsIDY4LCAyMDAsIDg5LCA4NSwgNjUsIDc4LCAxMjgsIDg5LCA4NSwgNjUsIDY5LCAKICAgICA3OCwgMTI4LCA4OSwgODUsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDg5LCA4NSwgNDUsIDg5LCA2OSwgMTI4LCA4OSwgODUsIAotICAgIDQ1LCA4NSwgMTI4LCA4OSwgODUsIDQ1LCA3MywgMTI4LCA4OSwgODUsIDQ1LCA2OSwgNzksIDEyOCwgODksIDg1LCA0NSwgCi0gICAgNjksIDEyOCwgODksIDg1LCA0NSwgNjUsIDEyOCwgODksIDg1LCAxMjgsIDg5LCAyMTMsIDg5LCA4MCwgODMsIDczLCA3NiwgCi0gICAgNzMsIDEyOCwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzMsIDEyOCwgODksIDgwLCA3OSwgNzUsIDgyLCA3MywgODMsIDczLCAKLSAgICA4MywgMTI4LCA4OSwgODAsIDc5LCA3NSwgODIsIDczLCA4MywgNzMsIDIxMSwgODksIDgwLCA3OSwgNzEsIDY5LCA3MSwgODIsIAotICAgIDY1LCA3NywgNzcsIDY5LCA3OCwgNzMsIDEyOCwgODksIDc5LCA4OCwgMTI4LCA4OSwgNzksIDg1LCA4NCwgNzIsIDcwLCA4NSwgCi0gICAgNzYsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCAyMDQsIDg5LCA3OSwgODQsIAotICAgIDEyOCwgODksIDc5LCA4MiwgNzMsIDEyOCwgODksIDc5LCA4MCwgMTI4LCA4OSwgNzksIDc5LCAxMjgsIDg5LCA3OSwgNzcsIAotICAgIDc5LCAxMjgsIDg5LCA3OSwgNzEsIDcyLCAxMjgsIDg5LCA3OSwgNjgsIDEyOCwgODksIDc5LCAxOTYsIDg5LCA3OSwgNjUsIAotICAgIDEyOCwgODksIDc5LCA0NSwgODksIDY5LCA3OSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDg5LCA3OSwgCi0gICAgNDUsIDg5LCA2NSwgMTI4LCA4OSwgNzksIDQ1LCA3OSwgMTI4LCA4OSwgNzksIDQ1LCA3MywgMTI4LCA4OSwgNzksIDEyOCwgCi0gICAgODksIDIwNywgODksIDc4LCAxMjgsIDg5LCA3MywgOTAsIDY5LCA4NCwgMTI4LCA4OSwgNzMsIDg4LCAxMjgsIDg5LCA3MywgCi0gICAgODcsIDc4LCAxMjgsIDg5LCA3MywgODQsIDEyOCwgODksIDczLCA4MCwgMTI4LCA4OSwgNzMsIDc4LCA3MSwgMTI4LCA4OSwgCi0gICAgNzMsIDczLCAxMjgsIDg5LCA3MywgMTk5LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA4OSwgCi0gICAgNzMsIDY5LCA4MCwgMTI4LCA4OSwgNzMsIDY5LCAxMjgsIDg5LCA3MywgNjgsIDY4LCA3MywgODMsIDIwMCwgODksIDczLCAKLSAgICA0NSwgODUsIDEyOCwgODksIDczLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgODMsIDEyOCwgODksIDcwLCA2OSwgODMsIAotICAgIDczLCAyMTEsIDg5LCA3MCwgNjksIDIwNiwgODksIDY5LCA4OSwgMTI4LCA4OSwgNjksIDg3LCAxMjgsIDg5LCA2OSwgODQsIAotICAgIDczLCA4NiwgMTI4LCA4OSwgNjksIDgzLCA4NCwgODUsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDY1LCA3OCwgODMsIAotICAgIDczLCA3OSwgODMsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDg5LCA2OSwgODIsIDg1LCAKLSAgICAxMjgsIDg5LCA2OSwgODIsIDIxMywgODksIDY5LCA4MiwgNzMsIDEyOCwgODksIDY5LCA4MiwgNjUsIDIwMCwgODksIDY5LCAKLSAgICA4MiwgMTI4LCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODksIDY5LCA3OSwgNDUsIAotICAgIDg1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA3OSwgMTI4LCA4OSwgNjksIDIwNiwgODksIDY5LCA3NiwgNzYsIDc5LCA4NywgCi0gICAgMTI4LCA4OSwgNjksIDcyLCAxMjgsIDg5LCA2OSwgNjksIDEyOCwgODksIDY5LCA2NSwgMjEwLCA4OSwgNjksIDY1LCAxMjgsIAotICAgIDg5LCA2NSwgOTAsIDkwLCAxMjgsIDg5LCA2NSwgOTAsIDcyLCAxMjgsIDg5LCA2NSwgOTAsIDEyOCwgODksIDY1LCA4OSwgCi0gICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODksIDY1LCA4OSwgMTI4LCA4OSwgNjUsIDg3LCAxMjgsIDg5LCA2NSwgODYsIDEyOCwgCi0gICAgODksIDY1LCA4NCwgODQsIDEyOCwgODksIDY1LCA4NCwgNzMsIDEyOCwgODksIDY1LCA4NCwgNzIsIDEyOCwgODksIDY1LCAKLSAgICA4NCwgMTI4LCA4OSwgNjUsIDgzLCA4MywgMTI4LCA4OSwgNjUsIDgzLCA3MiwgMTI4LCA4OSwgNjUsIDgzLCAxMjgsIDg5LCAKLSAgICA2NSwgODIsIDgyLCAxMjgsIDg5LCA2NSwgODIsIDEyOCwgODksIDY1LCAyMTAsIDg5LCA2NSwgODEsIDEyOCwgODksIDY1LCAKLSAgICA4MCwgMTI4LCA4OSwgNjUsIDc4LCA3MSwgMTI4LCA4OSwgNjUsIDc4LCAxOTksIDg5LCA2NSwgNzgsIDEyOCwgODksIDY1LCAKLSAgICA3NywgNjUsIDc1LCA3NSwgNjUsIDc4LCAxMjgsIDg5LCA2NSwgNzcsIDEyOCwgODksIDY1LCA3NiwgMTI4LCA4OSwgNjUsIAotICAgIDc1LCA3MiwgNzIsIDEyOCwgODksIDY1LCA3NSwgNzIsIDEyOCwgODksIDY1LCA3NSwgNjUsIDgzLCA3MiwgMTI4LCA4OSwgCi0gICAgNjUsIDc1LCAxMjgsIDg5LCA2NSwgNzQsIDEyOCwgODksIDY1LCA3MiwgNzIsIDEyOCwgODksIDY1LCA3MiwgMTI4LCA4OSwgCi0gICAgNjUsIDcxLCA3OCwgMTI4LCA4OSwgNjUsIDcxLCA3MiwgNzIsIDEyOCwgODksIDY1LCA3MSwgNzIsIDEyOCwgODksIDY1LCAKLSAgICA3MSwgMTI4LCA4OSwgNjUsIDcwLCAxMjgsIDg5LCA2NSwgNjgsIDcyLCAxMjgsIDg5LCA2NSwgNjgsIDY4LCA3MiwgMTI4LCAKLSAgICA4OSwgNjUsIDY4LCA2OCwgMTI4LCA4OSwgNjUsIDY4LCAxMjgsIDg5LCA2NSwgNjcsIDcyLCAxMjgsIDg5LCA2NSwgNjYsIAotICAgIDcyLCAxMjgsIDg5LCA2NSwgNjYsIDEyOCwgODksIDY1LCA2NSwgODIsIDg1LCAxMjgsIDg5LCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDg5LCA2NSwgNjUsIDY4LCA3OSwgMTI4LCA4OSwgNjUsIDY1LCAxMjgsIDg5LCA2NSwgNDUsIDg5LCA3OSwgMTI4LCA4OSwgCi0gICAgNjUsIDQ1LCA3OSwgMTI4LCA4OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgODgsIDg5LCA4OCwgMTI4LCA4OCwgODksIDg1LCAKLSAgICAxMjgsIDg4LCA4OSwgODQsIDEyOCwgODgsIDg5LCA4MiwgODgsIDEyOCwgODgsIDg5LCA4MiwgMTI4LCA4OCwgODksIDgwLCAKLSAgICAxMjgsIDg4LCA4OSwgNzksIDEyOCwgODgsIDg5LCA3MywgMTI4LCA4OCwgODksIDY5LCA2OSwgMTI4LCA4OCwgODksIDY5LCAKLSAgICAxMjgsIDg4LCA4OSwgNjUsIDY1LCAxMjgsIDg4LCA4OSwgNjUsIDEyOCwgODgsIDg5LCAxMjgsIDg4LCA4NywgNzMsIDEyOCwgCi0gICAgODgsIDg3LCA2OSwgNjksIDEyOCwgODgsIDg3LCA2OSwgMTI4LCA4OCwgODcsIDY1LCA2NSwgMTI4LCA4OCwgODcsIDY1LCAKLSAgICAxMjgsIDg4LCA4NiwgNjUsIDEyOCwgODgsIDg1LCA3OSwgODgsIDEyOCwgODgsIDg1LCA3OSwgMTI4LCA4OCwgODUsIDEyOCwgCi0gICAgODgsIDgzLCA3MiwgNjUsIDY1LCA4OSwgNjUsIDg0LCA3MiwgNzMsIDg5LCA2NSwgMTI4LCA4OCwgNzksIDg4LCAxMjgsIDg4LCAKLSAgICA3OSwgODQsIDEyOCwgODgsIDc5LCA4MiwgMTI4LCA4OCwgNzksIDgwLCAxMjgsIDg4LCA3OSwgNjUsIDEyOCwgODgsIDc5LCAKLSAgICAxMjgsIDg4LCA3MywgODgsIDEyOCwgODgsIDczLCA4NCwgMTI4LCA4OCwgNzMsIDgyLCA3OSwgMjA2LCA4OCwgNzMsIDgwLCAKLSAgICAxMjgsIDg4LCA3MywgNjksIDg4LCAxMjgsIDg4LCA3MywgNjksIDg0LCAxMjgsIDg4LCA3MywgNjksIDgwLCAxMjgsIDg4LCAKLSAgICA3MywgNjksIDEyOCwgODgsIDczLCAxMjgsIDg4LCA3MSwgMTI4LCA4OCwgNjksIDgzLCA4NCwgNjksIDIxMSwgODgsIDY5LCAKLSAgICA3MiwgMTI4LCA4OCwgNjksIDY5LCAxMjgsIDg4LCA2OSwgMTI4LCA4OCwgNjUsIDc4LCAxMjgsIDg4LCA2NSwgNjUsIDEyOCwgCi0gICAgODgsIDY1LCAxMjgsIDg3LCA4OSwgNzgsIDc4LCAxMjgsIDg3LCA4OSwgNzgsIDIwNiwgODcsIDg2LCAxMjgsIDg3LCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDg3LCA4NSwgNzksIDgwLCAxMjgsIDg3LCA4NSwgNzksIDEyOCwgODcsIDg1LCA3OCwgNzQsIDIwNywgCi0gICAgODcsIDg1LCA3OCwgMTI4LCA4NywgODUsIDEyOCwgODcsIDgyLCA3OSwgNzgsIDcxLCAxMjgsIDg3LCA4MiwgNzMsIDg0LCAKLSAgICA3MywgNzgsIDE5OSwgODcsIDgyLCA2OSwgNjUsIDg0LCAyMDAsIDg3LCA4MiwgNjUsIDgwLCAxMjgsIDg3LCA3OSwgODgsIAotICAgIDEyOCwgODcsIDc5LCA4MiwgNzUsIDEyOCwgODcsIDc5LCA4MiwgMjAzLCA4NywgNzksIDgyLCA2OCwgODMsIDgwLCA2NSwgCi0gICAgNjcsIDY5LCAxMjgsIDg3LCA3OSwgODIsIDE5NiwgODcsIDc5LCA4MCwgMTI4LCA4NywgNzksIDc5LCA3OCwgMTI4LCA4NywgCi0gICAgNzksIDc5LCA3NiwgMTI4LCA4NywgNzksIDc5LCA2OCwgODMsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg3LCA3OSwgNzksIDY4LCAKLSAgICAxMjgsIDg3LCA3OSwgNzgsIDEyOCwgODcsIDc5LCAyMDYsIDg3LCA3OSwgNzcsIDY1LCA3OCwgMTI4LCA4NywgNzksIDc2LCAKLSAgICA3OSwgODMsIDc5LCAxMjgsIDg3LCA3OSwgNjksIDEyOCwgODcsIDc5LCA2NSwgMTI4LCA4NywgNzMsIDc4LCA4NCwgNjksIAotICAgIDgyLCAxMjgsIDg3LCA3MywgNzgsIDc0LCA2NSwgMTI4LCA4NywgNzMsIDc4LCA2OSwgMTI4LCA4NywgNzMsIDc4LCA2OCwgCi0gICAgODUsIDEyOCwgODcsIDczLCA3OCwgNjgsIDEyOCwgODcsIDczLCA3OCwgMTI4LCA4NywgNzMsIDcxLCA3MSwgNzYsIDIxNywgCi0gICAgODcsIDczLCA2OCwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODcsIDczLCA2OCwgMTk3LCA4NywgNzIsIDc5LCAKLSAgICA3NiwgMTk3LCA4NywgNzIsIDczLCA4NCwgNjksIDQ1LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgNjksIDE5NiwgODcsIAotICAgIDcyLCA3MywgODQsIDY5LCAxMjgsIDg3LCA3MiwgNjksIDY5LCA3NiwgNjksIDE5NiwgODcsIDcyLCA2OSwgNjksIDc2LCA2NywgCi0gICAgNzIsIDY1LCA3MywgMjEwLCA4NywgNzIsIDY5LCA2OSwgNzYsIDEyOCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODcsIDcyLCAKLSAgICA2OSwgNjUsIDg0LCAxMjgsIDg3LCA3MSwgMTI4LCA4NywgNjksIDg4LCAxMjgsIDg3LCA2OSwgODMsIDg0LCA2OSwgODIsIAotICAgIDIwNiwgODcsIDY5LCA4MywgODQsIDEyOCwgODcsIDY5LCA4MywgMjEyLCA4NywgNjksIDgwLCAxMjgsIDg3LCA2OSwgNzksIAotICAgIDEyOCwgODcsIDY5LCA3OCwgMTI4LCA4NywgNjksIDc2LCA3NiwgMTI4LCA4NywgNjksIDczLCA3MSwgNzIsIDIxMiwgODcsIAotICAgIDY5LCA2OSwgNzgsIDEyOCwgODcsIDY5LCA2OCwgNzEsIDY5LCA0NSwgODQsIDY1LCA3MywgNzYsIDY5LCAxOTYsIDg3LCA2OSwgCi0gICAgNjUsIDgwLCA3OSwgNzgsIDEyOCwgODcsIDY2LCAxMjgsIDg3LCA2NSwgODgsIDEyOCwgODcsIDY1LCA4NywgMTI4LCA4NywgCi0gICAgNjUsIDIxNSwgODcsIDY1LCA4NiwgMjE3LCA4NywgNjUsIDg2LCA2OSwgMTI4LCA4NywgNjUsIDg2LCAxOTcsIDg3LCA2NSwgCi0gICAgODUsIDEyOCwgODcsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDg3LCA2NSwgODQsIDY5LCA4MiwgMTI4LCA4NywgNjUsIDg0LCAKLSAgICA2OSwgMjEwLCA4NywgNjUsIDg0LCA2NywgNzIsIDEyOCwgODcsIDY1LCA4NCwgMTI4LCA4NywgNjUsIDgzLCA4NCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA4NywgNjUsIDgzLCA4MywgNjUsIDc2LCA3NiwgNjUsIDc3LCAxMjgsIDg3LCA2NSwgODMsIDc2LCA2NSwgCi0gICAgMTI4LCA4NywgNjUsIDgzLCA3NiwgMTkzLCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzcsIDEyOCwgODcsIDY1LCAKLSAgICA4MywgNjUsIDc2LCA3NiwgNjUsIDIwNSwgODcsIDY1LCA4MiwgNzgsIDczLCA3OCwgMTk5LCA4NywgNjUsIDgwLCAxMjgsIAotICAgIDg3LCA2NSwgNzgsIDY4LCA2OSwgODIsIDY5LCA4MiwgMTI4LCA4NywgNjUsIDc4LCAxMjgsIDg3LCA2NSwgNzYsIDc2LCAKLSAgICAxMjgsIDg3LCA2NSwgNzYsIDc1LCAxMjgsIDg3LCA2NSwgNzYsIDIwMywgODcsIDY1LCA3MywgODQsIDczLCA3OCwgNzEsIAotICAgIDEyOCwgODcsIDY1LCA2OSwgNzgsIDEyOCwgODcsIDY1LCA2OSwgMTI4LCA4NywgNjUsIDY1LCA4NiwgODUsIDEyOCwgODYsIAotICAgIDkwLCA3NywgNjksIDg0LCAxMjgsIDg2LCA4OSwgODgsIDEyOCwgODYsIDg5LCA4NCwgMTI4LCA4NiwgODksIDgyLCA4OCwgCi0gICAgMTI4LCA4NiwgODksIDgyLCAxMjgsIDg2LCA4OSwgODAsIDEyOCwgODYsIDg5LCAxMjgsIDg2LCA4NywgNjUsIDEyOCwgODYsIAotICAgIDg1LCA4OCwgMTI4LCA4NiwgODUsIDg0LCAxMjgsIDg2LCA4NSwgODIsIDg4LCAxMjgsIDg2LCA4NSwgODIsIDEyOCwgODYsIAotICAgIDg1LCA4MCwgMTI4LCA4NiwgODUsIDc2LCA3MSwgNjUsIDIxMCwgODYsIDgyLCA2NSwgNjcsIDcyLCA4OSwgMTI4LCA4NiwgCi0gICAgNzksIDg4LCAxMjgsIDg2LCA3OSwgODcsIDY5LCA3NiwgNDUsIDY3LCA2NSwgODIsIDgyLCA3MywgNjksIDIxMCwgODYsIDc5LCAKLSAgICA4NywgMTI4LCA4NiwgNzksIDg1LCAxMjgsIDg2LCA3OSwgODQsIDEyOCwgODYsIDc5LCA4MCwgMTI4LCA4NiwgNzksIDc5LCAKLSAgICAxMjgsIDg2LCA3OSwgNzYsIDg1LCA3NywgMTk3LCA4NiwgNzksIDc2LCA4NCwgNjUsIDcxLCAxOTcsIDg2LCA3OSwgNzMsIAotICAgIDE5NiwgODYsIDc5LCA3MywgNjcsIDczLCA3OCwgNzEsIDEyOCwgODYsIDc5LCA3MywgNjcsIDY5LCA3NiwgNjksIDgzLCAKLSAgICAyMTEsIDg2LCA3OSwgNzMsIDY3LCA2OSwgMTk2LCA4NiwgNzksIDY3LCA2NSwgMjA0LCA4NiwgNzksIDEyOCwgODYsIDczLCAKLSAgICA4OCwgMTI4LCA4NiwgNzMsIDg0LCAxMjgsIDg2LCA3MywgODMsIDczLCA3MSwgNzksIDg0LCA3MiwgNzMsIDE5NSwgODYsIAotICAgIDczLCA4MywgNjUsIDgyLCA3MSwgNjUsIDg5LCA2NSwgMTI4LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCA2NSwgMTI4LCA4NiwgCi0gICAgNzMsIDgzLCA2NSwgODIsIDcxLCAxOTMsIDg2LCA3MywgODIsIDczLCA2NSwgNzcsIDEyOCwgODYsIDczLCA4MiwgNzEsIDc5LCAKLSAgICAxMjgsIDg2LCA3MywgODIsIDcxLCA2NSwgMTI4LCA4NiwgNzMsIDgyLCA2NSwgNzcsIDY1LCAxMjgsIDg2LCA3MywgODAsIAotICAgIDEyOCwgODYsIDczLCA3OCwgNjksIDEyOCwgODYsIDczLCA3OCwgMTI4LCA4NiwgNzMsIDc2LCA3NiwgNjUsIDcxLCA2OSwgCi0gICAgMTI4LCA4NiwgNzMsIDY5LCA4OCwgMTI4LCA4NiwgNzMsIDY5LCA4NywgNjgsIDY1LCA4NCwgMTkzLCA4NiwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA4NiwgNzMsIDY5LCA4MCwgMTI4LCA4NiwgNzMsIDY5LCAxMjgsIDg2LCA3MywgNjgsIDY1LCAxMjgsIDg2LCAKLSAgICA3MywgNjcsIDg0LCA3OSwgODIsIDIxNywgODYsIDczLCAxMjgsIDg2LCA2OSwgODgsIDEyOCwgODYsIDY5LCA4NywgMTI4LCAKLSAgICA4NiwgNjksIDIxNSwgODYsIDY5LCA4MywgODQsIDY1LCAxMjgsIDg2LCA2OSwgODMsIDgzLCA2OSwgMjA0LCA4NiwgNjksIAotICAgIDgyLCAyMTcsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDg5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgCi0gICAgNjcsIDY1LCA3NiwgNzYsIDIxNywgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIAotICAgIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTQsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIAotICAgIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIAotICAgIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIAotICAgIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAotICAgIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIAotICAgIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDksIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIAotICAgIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDksIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAotICAgIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIAotICAgIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAKLSAgICA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgCi0gICAgNDgsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAotICAgIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgMTI4LCA4NiwgNjksIDgyLCA4MywgNzMsIDY3LCA3NiwgCi0gICAgNjksIDEyOCwgODYsIDY5LCA4MiwgODMsIDE5NywgODYsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDg2LCA2OSwgODAsIDEyOCwgCi0gICAgODYsIDY5LCA3OCwgNjgsIDEyOCwgODYsIDY5LCA3MiwgMTI4LCA4NiwgNjksIDIwMCwgODYsIDY5LCA2OSwgMTI4LCA4NiwgCi0gICAgNjksIDE5NywgODYsIDY5LCA2OCwgNjksIDEyOCwgODYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDg2LCA2NSwgODksIDY1LCAKLSAgICA3OCwgNzgsIDY1LCAxMjgsIDg2LCA2NSwgODgsIDEyOCwgODYsIDY1LCA4NiwgMTI4LCA4NiwgNjUsIDIxNCwgODYsIDY1LCAKLSAgICA4NCwgNzIsIDg5LCAxMjgsIDg2LCA2NSwgODQsIDEyOCwgODYsIDY1LCA4MywgODQsIDc4LCA2OSwgODMsIDIxMSwgODYsIAotICAgIDY1LCA4MywgNzMsIDgzLCAxMjgsIDg2LCA2NSwgODIsIDg5LCAyMTEsIDg2LCA2NSwgODIsIDczLCA3NSwgNjUsIDEyOCwgCi0gICAgODYsIDY1LCA4MiwgNzMsIDY1LCA3OCwgMjEyLCA4NiwgNjUsIDgyLCA3MywgNjUsIDEyOCwgODYsIDY1LCA4MiwgNzMsIAotICAgIDE5MywgODYsIDY1LCA4MiwgNjksIDczLCA2NSwgMjAxLCA4NiwgNjUsIDgyLCA2OSwgNzMsIDE5MywgODYsIDY1LCA4MCwgCi0gICAgMTI4LCA4NiwgNjUsIDc4LCA2OSwgMTI4LCA4NiwgNjUsIDc2LCA3NiwgNjksIDg5LCAxMjgsIDg2LCA2NSwgNjUsIDg2LCAKLSAgICA4NSwgMTI4LCA4NiwgNjUsIDY1LCAxMjgsIDg1LCA5MCwgODUsIDEyOCwgODUsIDkwLCA1MSwgMTI4LCA4NSwgOTAsIDE3OSwgCi0gICAgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NSwgODksIDEyOCwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgODUsIDg1LCA4NSwgODUsIDEyOCwgODUsIDg1LCA4NSwgNTEsIDEyOCwgODUsIDg1LCA4NSwgNTAsIDEyOCwgODUsIAotICAgIDg0LCA4NSwgNzUsIDczLCAxMjgsIDg1LCA4MywgODMsIDg1LCA1MSwgMTI4LCA4NSwgODMsIDgzLCA4NSwgMTI4LCA4NSwgCi0gICAgODMsIDcyLCA4OCwgMTI4LCA4NSwgODMsIDcyLCA4NSwgNzcsIDg4LCAxMjgsIDg1LCA4MywgNzIsIDUwLCAxMjgsIDg1LCAKLSAgICA4MywgNzIsIDEyOCwgODUsIDgzLCAyMDAsIDg1LCA4MywgNjksIDE5NiwgODUsIDgzLCA2OSwgMTI4LCA4NSwgODIsIDg1LCAKLSAgICAyMTgsIDg1LCA4MiwgODUsIDgzLCAxMjgsIDg1LCA4MiwgODUsIDY4LCA2NSwgMTI4LCA4NSwgODIsIDg1LCA2OCwgMTkzLCAKLSAgICA4NSwgODIsIDg1LCAxMjgsIDg1LCA4MiwgMjEzLCA4NSwgODIsIDc4LCAxMjgsIDg1LCA4MiwgNzMsIDUxLCAxMjgsIDg1LCAKLSAgICA4MiwgNzMsIDEyOCwgODUsIDgyLCA2NSwgNzgsIDg1LCA4MywgMTI4LCA4NSwgODIsIDY1LCAxMjgsIDg1LCA4MiwgNTIsIAotICAgIDEyOCwgODUsIDgyLCA1MCwgMTI4LCA4NSwgODIsIDE3OCwgODUsIDgwLCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODUsIAotICAgIDgwLCA4NywgNjUsIDgyLCA2OCwgMjExLCA4NSwgODAsIDg3LCA2NSwgODIsIDY4LCAxMjgsIDg1LCA4MCwgODcsIDY1LCA4MiwgCi0gICAgMTk2LCA4NSwgODAsIDg0LCA4NSwgODIsIDc4LCAxMjgsIDg1LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDg1LCAKLSAgICA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgODUsIDgwLCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA4NSwgODAsIDgwLCA2OSwgCi0gICAgMjEwLCA4NSwgODAsIDY1LCA2OCwgNzIsIDc3LCA2NSwgNzgsIDczLCA4OSwgNjUsIDEyOCwgODUsIDgwLCA0NSwgODAsIDc5LCAKLSAgICA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODUsIDc5LCA3OCwgMTI4LCA4NSwgNzgsIDc4LCAxMjgsIDg1LCA3OCwgNzcsIAotICAgIDY1LCA4MiwgODIsIDczLCA2OSwgMTk2LCA4NSwgNzgsIDczLCA4NiwgNjksIDgyLCA4MywgNjUsIDIwNCwgODUsIDc4LCA3MywgCi0gICAgODQsIDg5LCAxMjgsIDg1LCA3OCwgNzMsIDg0LCAxMjgsIDg1LCA3OCwgNzMsIDIxMiwgODUsIDc4LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDg1LCA3OCwgNzMsIDc5LCAyMDYsIDg1LCA3OCwgNjgsIDIwNywgODUsIDc4LCA2OCwgNjksIDgyLCA4NCwgNzMsIAotICAgIDY5LCAxMjgsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNzYsIDczLCA3OCwgMTk3LCA4NSwgNzgsIDY4LCA2OSwgODIsIDY4LCA3OSwgCi0gICAgODQsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDg1LCA3OCwgNjgsIDY5LCAyMTAsIDg1LCAKLSAgICA3OCwgNjcsIDczLCAxOTMsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCA2OCwgMTI4LCA4NSwgNzgsIAotICAgIDY1LCAxMjgsIDg1LCAyMDYsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA3NywgODUsIDIwNSwgODUsIDc3LCA2NiwgODIsIAotICAgIDY5LCA3NiwgNzYsIDY1LCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIDc2LCAxOTMsIDg1LCA3NywgNjYsIDczLCA3OCwgCi0gICAgMTI4LCA4NSwgNzYsIDg1LCAxMjgsIDg1LCA3NiwgMjEzLCA4NSwgNzUsIDg1LCAxMjgsIDg1LCA3NSwgODIsIDY1LCA3MywgCi0gICAgNzgsIDczLCA2NSwgMjA2LCA4NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgODUsIDc1LCA2NSwgODIsIDE5MywgODUsIDc1LCAKLSAgICAxMjgsIDg1LCA3MywgNzYsIDc2LCA2OSwgNjUsIDc4LCA3OCwgMTI4LCA4NSwgNzMsIDcxLCA3MiwgODUsIDIxMCwgODUsIAotICAgIDcxLCA2NSwgODIsIDczLCA4NCwgNzMsIDE5NSwgODUsIDY5LCA4OSwgMTI4LCA4NSwgNjksIDY5LCAxMjgsIDg1LCA2OSwgCi0gICAgMTI4LCA4NSwgNjgsIDg1LCA3MSwgMTI4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDY1LCAxMjgsIDg1LCA2OCwgNjUsIDY1LCAKLSAgICA4NCwgMTI4LCA4NSwgNjgsIDEyOCwgODUsIDE5NiwgODUsIDY3LCAxMjgsIDg1LCA2NiwgODUsIDcwLCA3MywgNzYsIDczLCAKLSAgICAxMjgsIDg1LCA2NiwgNjUsIDY4LCA2NSwgNzcsIDY1LCAxMjgsIDg1LCA2NiwgMTI4LCA4NSwgNjUsIDg0LCA3MiwgMTI4LCAKLSAgICA4NSwgNjUsIDEyOCwgODUsIDE3OCwgODUsIDQ1LCA2OSwgNzksIDQ1LCA2OSwgODUsIDEyOCwgODUsIDQ1LCA2NSwgNjksIAotICAgIDEyOCwgODQsIDkwLCA4NSwgMTI4LCA4NCwgOTAsIDc5LCA2NSwgMTI4LCA4NCwgOTAsIDc5LCAxMjgsIDg0LCA5MCwgNzMsIAotICAgIDIxMCwgODQsIDkwLCA3MywgMTI4LCA4NCwgOTAsIDY5LCA2OSwgMTI4LCA4NCwgOTAsIDY5LCAxMjgsIDg0LCA5MCwgNjUsIAotICAgIDY1LCAxMjgsIDg0LCA5MCwgNjUsIDEyOCwgODQsIDkwLCAxMjgsIDg0LCA4OSwgMjEwLCA4NCwgODksIDgwLCA2OSwgNDUsIAotICAgIDE4MywgODQsIDg5LCA4MCwgNjksIDQ1LCAxODIsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgxLCA4NCwgODksIDgwLCA2OSwgCi0gICAgNDUsIDE4MCwgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzksIDg0LCA4OSwgODAsIDY5LCA0NSwgMTc4LCA4NCwgODksIDgwLCAKLSAgICA2OSwgNDUsIDE3NywgODQsIDg5LCA4MCwgMTk3LCA4NCwgODksIDc5LCAxMjgsIDg0LCA4OSwgNzMsIDEyOCwgODQsIDg5LCAKLSAgICA2OSwgMTI4LCA4NCwgODksIDY1LCAxMjgsIDg0LCA4NywgNzksIDc5LCAxMjgsIDg0LCA4NywgNzksIDQ1LCA3NiwgNzMsIAotICAgIDc4LCAxOTcsIDg0LCA4NywgNzksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDg3LCA3MywgNzMsIDEyOCwgCi0gICAgODQsIDg3LCA3MywgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgODQsIDg3LCA3OSwgMTI4LCA4NCwgODcsIDY5LCAKLSAgICA3OCwgODQsIDg5LCA0NSwgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgCi0gICAgNzMsIDg4LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgODQsIDg3LCAKLSAgICA2OSwgNzgsIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDc4LCA3MywgCi0gICAgNzgsIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgMTI4LCA4NCwgODcsIDY5LCAKLSAgICA3OCwgODQsIDg5LCA0NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDY5LCA3MywgCi0gICAgNzEsIDcyLCA4NCwgMjAwLCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDg0LCAKLSAgICA4NywgNjksIDc4LCA4NCwgODksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCAyMTcsIDg0LCA4NywgNjksIDc2LCA4NiwgNjksIAotICAgIDEyOCwgODQsIDg3LCA2OSwgNzYsIDg2LCAxOTcsIDg0LCA4NywgNjksIDEyOCwgODQsIDg3LCA2NSwgNjUsIDEyOCwgODQsIAotICAgIDg3LCA2NSwgMTI4LCA4NCwgODYsIDgyLCA3MywgNjgsIDc5LCAxMjgsIDg0LCA4NiwgNzMsIDc3LCA2NSwgNjgsIDg1LCAKLSAgICAyMTAsIDg0LCA4NSwgODgsIDEyOCwgODQsIDg1LCA4NSwgNzcsIDg1LCAxMjgsIDg0LCA4NSwgODQsIDY5LCA4OSwgNjUsIAotICAgIDgzLCA2NSwgODQsIDEyOCwgODQsIDg1LCA4NCwgMTI4LCA4NCwgODUsIDgyLCA4OCwgMTI4LCA4NCwgODUsIDgyLCA4NCwgCi0gICAgNzYsIDY5LCAxMjgsIDg0LCA4NSwgODIsIDc5LCA1MCwgMTI4LCA4NCwgODUsIDgyLCA3OCwgODMsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCAKLSAgICA4NSwgODAsIDEyOCwgODQsIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIAotICAgIDEyOCwgODQsIDg1LCA3OSwgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODUsIAotICAgIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIAotICAgIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODQsIDg1LCA2OCwgNjgsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCA2OCwgCi0gICAgNjgsIDY1LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgMTI4LCA4NCwgODQsIDg0LCA3MiwgNjUsIDEyOCwgODQsIDg0LCAKLSAgICA4MywgODUsIDEyOCwgODQsIDg0LCA4MywgNzksIDEyOCwgODQsIDg0LCA4MywgNzMsIDEyOCwgODQsIDg0LCA4MywgNjksIAotICAgIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY5LCAxMjgsIDg0LCA4NCwgODMsIDY1LCAxMjgsIDg0LCA4NCwgNzMsIDEyOCwgODQsIAotICAgIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgODQsIDg0LCA3MiwgNjksIDEyOCwgODQsIDg0LCA3MiwgCi0gICAgMTI4LCA4NCwgODQsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NCwgODQsIDY5LCAKLSAgICA3MiwgMTI4LCA4NCwgODQsIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjksIDEyOCwgODQsIDg0LCAKLSAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIAotICAgIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgCi0gICAgMTI4LCA4NCwgODMsIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCAKLSAgICA3MiwgNzksIDc5LCAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIAotICAgIDgzLCA3MiwgNjksIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgCi0gICAgODIsIDY5LCAxMjgsIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCAKLSAgICA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgODQsIDgyLCA4NSwgODQsIAotICAgIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCA4NCwgNjksIDE5NiwgCi0gICAgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAorICAgIDQ1LCA4NSwgMTI4LCA4OSwgODUsIDQ1LCA3OSwgMTI4LCA4OSwgODUsIDQ1LCA3MywgMTI4LCA4OSwgODUsIDQ1LCA2OSwgCisgICAgNzksIDEyOCwgODksIDg1LCA0NSwgNjksIDEyOCwgODksIDg1LCA0NSwgNjUsIDY5LCAxMjgsIDg5LCA4NSwgNDUsIDY1LCAKKyAgICAxMjgsIDg5LCA4NSwgMTI4LCA4OSwgMjEzLCA4OSwgODAsIDgzLCA3MywgNzYsIDczLCAxMjgsIDg5LCA4MCwgNzksIDgyLCAKKyAgICA4MiwgNzksIDczLCAxMjgsIDg5LCA4MCwgNzksIDc1LCA4MiwgNzMsIDgzLCA3MywgODMsIDEyOCwgODksIDgwLCA3OSwgNzUsIAorICAgIDgyLCA3MywgODMsIDczLCAyMTEsIDg5LCA4MCwgNzksIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIDczLCAKKyAgICAxMjgsIDg5LCA3OSwgODksIDEyOCwgODksIDc5LCA4OCwgMTI4LCA4OSwgNzksIDg1LCA4NCwgNzIsIDcwLCA4NSwgNzYsIAorICAgIDc4LCA2OSwgODMsIDgzLCAxMjgsIDg5LCA3OSwgODUsIDg0LCA3MiwgNzAsIDg1LCAyMDQsIDg5LCA3OSwgODQsIDEyOCwgCisgICAgODksIDc5LCA4MiwgNzMsIDEyOCwgODksIDc5LCA4MSwgMTI4LCA4OSwgNzksIDIwOSwgODksIDc5LCA4MCwgMTI4LCA4OSwgCisgICAgNzksIDc5LCAxMjgsIDg5LCA3OSwgNzcsIDc5LCAxMjgsIDg5LCA3OSwgNzEsIDcyLCAxMjgsIDg5LCA3OSwgNjgsIDcyLCAKKyAgICAxMjgsIDg5LCA3OSwgNjgsIDEyOCwgODksIDc5LCAxOTYsIDg5LCA3OSwgNjUsIDEyOCwgODksIDc5LCA0NSwgODksIDY5LCAKKyAgICA3OSwgMTI4LCA4OSwgNzksIDQ1LCA4OSwgNjUsIDY5LCAxMjgsIDg5LCA3OSwgNDUsIDg5LCA2NSwgMTI4LCA4OSwgNzksIAorICAgIDQ1LCA3OSwgMTI4LCA4OSwgNzksIDQ1LCA3MywgMTI4LCA4OSwgNzksIDQ1LCA2OSwgNzksIDEyOCwgODksIDc5LCA0NSwgCisgICAgNjUsIDY5LCAxMjgsIDg5LCA3OSwgNDUsIDY1LCAxMjgsIDg5LCA3OSwgMTI4LCA4OSwgMjA3LCA4OSwgNzMsIDkwLCA2OSwgCisgICAgODQsIDEyOCwgODksIDczLCA4OCwgMTI4LCA4OSwgNzMsIDg3LCA3OCwgMTI4LCA4OSwgNzMsIDg0LCAxMjgsIDg5LCA3MywgCisgICAgODAsIDEyOCwgODksIDczLCA3OCwgNzEsIDEyOCwgODksIDczLCA3MywgMTI4LCA4OSwgNzMsIDE5OSwgODksIDczLCA2OSwgCisgICAgODgsIDEyOCwgODksIDczLCA2OSwgODQsIDEyOCwgODksIDczLCA2OSwgODAsIDEyOCwgODksIDczLCA2OSwgNjksIDEyOCwgCisgICAgODksIDczLCA2OSwgMTI4LCA4OSwgNzMsIDY4LCA2OCwgNzMsIDgzLCAyMDAsIDg5LCA3MywgNDUsIDg1LCAxMjgsIDg5LCAKKyAgICA3MywgMTI4LCA4OSwgNzAsIDY5LCA4MywgNzMsIDgzLCAxMjgsIDg5LCA3MCwgNjksIDgzLCA3MywgMjExLCA4OSwgNzAsIAorICAgIDY5LCAyMDYsIDg5LCA2OSwgODksIDEyOCwgODksIDY5LCA4NywgMTI4LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA4OSwgNjksIAorICAgIDg1LCA4MiwgNjUsIDY5LCAxMjgsIDg5LCA2OSwgODUsIDgxLCAxMjgsIDg5LCA2OSwgODUsIDc3LCAxMjgsIDg5LCA2OSwgCisgICAgODUsIDY1LCA2OSwgODQsIDEyOCwgODksIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDg5LCA2OSwgODQsIDczLCA4NiwgMTI4LCAKKyAgICA4OSwgNjksIDgzLCA4NCwgODUsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDczLCA3OSwgCisgICAgODMsIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIAorICAgIDEyOCwgODksIDY5LCA4MywgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDg5LCA2OSwgCisgICAgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4OSwgNjksIDgzLCA3MywgNjksIAorICAgIDg1LCA3OCwgNzEsIDEyOCwgODksIDY5LCA4MiwgODUsIDEyOCwgODksIDY5LCA4MiwgMjEzLCA4OSwgNjksIDgyLCA3MywgCisgICAgMTI4LCA4OSwgNjksIDgyLCA2NSwgMjAwLCA4OSwgNjksIDgyLCAxMjgsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKKyAgICA3MywgNjksIDg1LCA3MiwgMTI4LCA4OSwgNjksIDc5LCA0NSwgODksIDY1LCAxMjgsIDg5LCA2OSwgNzksIDQ1LCA4NSwgCisgICAgMTI4LCA4OSwgNjksIDc5LCA0NSwgNzksIDEyOCwgODksIDY5LCA3OCwgNzMsIDgzLCA2OSwgMjAxLCA4OSwgNjksIDc4LCAKKyAgICA2NSwgODAsIDEyOCwgODksIDY5LCA3OCwgMTI4LCA4OSwgNjksIDIwNiwgODksIDY5LCA3NiwgNzYsIDc5LCA4NywgMTI4LCAKKyAgICA4OSwgNjksIDc2LCA3NiwgNzksIDIxNSwgODksIDY5LCA3MiwgMTI4LCA4OSwgNjksIDY5LCAxMjgsIDg5LCA2OSwgNjUsIAorICAgIDIxMCwgODksIDY5LCA2NSwgMTI4LCA4OSwgNjUsIDkwLCA5MCwgMTI4LCA4OSwgNjUsIDkwLCA3MiwgMTI4LCA4OSwgNjUsIAorICAgIDkwLCAxMjgsIDg5LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg5LCA2NSwgODksIDEyOCwgODksIDY1LCA4NywgCisgICAgMTI4LCA4OSwgNjUsIDg2LCAxMjgsIDg5LCA2NSwgODQsIDg0LCAxMjgsIDg5LCA2NSwgODQsIDczLCAxMjgsIDg5LCA2NSwgCisgICAgODQsIDcyLCAxMjgsIDg5LCA2NSwgODQsIDEyOCwgODksIDY1LCA4MywgODMsIDEyOCwgODksIDY1LCA4MywgNzIsIDEyOCwgCisgICAgODksIDY1LCA4MywgMTI4LCA4OSwgNjUsIDgyLCA4MiwgMTI4LCA4OSwgNjUsIDgyLCAxMjgsIDg5LCA2NSwgMjEwLCA4OSwgCisgICAgNjUsIDgxLCAxMjgsIDg5LCA2NSwgODAsIDEyOCwgODksIDY1LCA3OCwgNzEsIDEyOCwgODksIDY1LCA3OCwgMTk5LCA4OSwgCisgICAgNjUsIDc4LCAxMjgsIDg5LCA2NSwgNzcsIDc5LCA3NSwgMTI4LCA4OSwgNjUsIDc3LCA2NSwgNzUsIDc1LCA2NSwgNzgsIAorICAgIDEyOCwgODksIDY1LCA3NywgMTI4LCA4OSwgNjUsIDc2LCAxMjgsIDg5LCA2NSwgNzUsIDcyLCA3MiwgMTI4LCA4OSwgNjUsIAorICAgIDc1LCA3MiwgMTI4LCA4OSwgNjUsIDc1LCA2NSwgODMsIDcyLCAxMjgsIDg5LCA2NSwgNzUsIDEyOCwgODksIDY1LCA3NCwgCisgICAgODUsIDgyLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4OSwgNjUsIDc0LCAxMjgsIDg5LCA2NSwgNzIsIDcyLCAxMjgsIDg5LCAKKyAgICA2NSwgNzIsIDEyOCwgODksIDY1LCA3MSwgNzgsIDEyOCwgODksIDY1LCA3MSwgNzIsIDcyLCAxMjgsIDg5LCA2NSwgNzEsIAorICAgIDcyLCAxMjgsIDg5LCA2NSwgNzEsIDEyOCwgODksIDY1LCA3MCwgMjEzLCA4OSwgNjUsIDcwLCAxMjgsIDg5LCA2NSwgNjksIAorICAgIDc3LCA3NywgNjUsIDY5LCAxMjgsIDg5LCA2NSwgNjgsIDcyLCAxMjgsIDg5LCA2NSwgNjgsIDY4LCA3MiwgMTI4LCA4OSwgCisgICAgNjUsIDY4LCA2OCwgMTI4LCA4OSwgNjUsIDY4LCAxMjgsIDg5LCA2NSwgNjcsIDcyLCAxMjgsIDg5LCA2NSwgNjYsIDcyLCAKKyAgICAxMjgsIDg5LCA2NSwgNjYsIDEyOCwgODksIDY1LCA2NSwgODIsIDg1LCAxMjgsIDg5LCA2NSwgNjUsIDczLCAxMjgsIDg5LCAKKyAgICA2NSwgNjUsIDY4LCA3OSwgMTI4LCA4OSwgNjUsIDY1LCAxMjgsIDg5LCA2NSwgNDUsIDg5LCA3OSwgMTI4LCA4OSwgNjUsIAorICAgIDQ1LCA4NSwgMTI4LCA4OSwgNjUsIDQ1LCA3OSwgMTI4LCA4OSwgNDgsIDQ4LCA1NiwgMTI4LCA4OSwgNDgsIDQ4LCA1NSwgCisgICAgMTI4LCA4OSwgNDgsIDQ4LCA1NCwgMTI4LCA4OSwgNDgsIDQ4LCA1MywgMTI4LCA4OSwgNDgsIDQ4LCA1MiwgMTI4LCA4OSwgCisgICAgNDgsIDQ4LCA1MSwgMTI4LCA4OSwgNDgsIDQ4LCA1MCwgMTI4LCA4OSwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODksIDQ4LCAKKyAgICA0OCwgNDksIDEyOCwgODksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDg4LCA4OSwgODgsIDEyOCwgODgsIDg5LCA4NSwgMTI4LCAKKyAgICA4OCwgODksIDg0LCAxMjgsIDg4LCA4OSwgODIsIDg4LCAxMjgsIDg4LCA4OSwgODIsIDEyOCwgODgsIDg5LCA4MCwgMTI4LCAKKyAgICA4OCwgODksIDc5LCAxMjgsIDg4LCA4OSwgNzMsIDEyOCwgODgsIDg5LCA2OSwgNjksIDEyOCwgODgsIDg5LCA2OSwgMTI4LCAKKyAgICA4OCwgODksIDY1LCA2NSwgMTI4LCA4OCwgODksIDY1LCAxMjgsIDg4LCA4OSwgMTI4LCA4OCwgODcsIDczLCAxMjgsIDg4LCAKKyAgICA4NywgNjksIDY5LCAxMjgsIDg4LCA4NywgNjksIDEyOCwgODgsIDg3LCA2NSwgNjUsIDEyOCwgODgsIDg3LCA2NSwgMTI4LCAKKyAgICA4OCwgODYsIDY5LCAxMjgsIDg4LCA4NiwgNjUsIDEyOCwgODgsIDg1LCA3OSwgODgsIDEyOCwgODgsIDg1LCA3OSwgMTI4LCAKKyAgICA4OCwgODUsIDEyOCwgODgsIDgzLCA3MiwgNjUsIDY1LCA4OSwgNjUsIDg0LCA3MiwgNzMsIDg5LCA2NSwgMTI4LCA4OCwgNzksIAorICAgIDg4LCAxMjgsIDg4LCA3OSwgODQsIDEyOCwgODgsIDc5LCA4MiwgMTI4LCA4OCwgNzksIDgwLCAxMjgsIDg4LCA3OSwgNjUsIAorICAgIDEyOCwgODgsIDc5LCAxMjgsIDg4LCA3MywgODgsIDEyOCwgODgsIDczLCA4NCwgMTI4LCA4OCwgNzMsIDgyLCA3OSwgMjA2LCAKKyAgICA4OCwgNzMsIDgwLCAxMjgsIDg4LCA3MywgNjksIDg4LCAxMjgsIDg4LCA3MywgNjksIDg0LCAxMjgsIDg4LCA3MywgNjksIAorICAgIDgwLCAxMjgsIDg4LCA3MywgNjksIDEyOCwgODgsIDczLCAxMjgsIDg4LCA3MSwgMTI4LCA4OCwgNjksIDgzLCA4NCwgNjksIAorICAgIDIxMSwgODgsIDY5LCA3MiwgMTI4LCA4OCwgNjksIDY5LCAxMjgsIDg4LCA2OSwgMTI4LCA4OCwgNjUsIDc4LCAxMjgsIDg4LCAKKyAgICA2NSwgNjUsIDEyOCwgODgsIDY1LCAxMjgsIDg4LCA0OCwgNDgsIDU2LCA2NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NiwgMTI4LCAKKyAgICA4OCwgNDgsIDQ4LCA1NSwgMTI4LCA4OCwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgODgsIDQ4LCA0OCwgNTQsIDEyOCwgODgsIAorICAgIDQ4LCA0OCwgNTMsIDEyOCwgODgsIDQ4LCA0OCwgNTIsIDY2LCAxMjgsIDg4LCA0OCwgNDgsIDUyLCA2NSwgMTI4LCA4OCwgCisgICAgNDgsIDQ4LCA1MiwgMTI4LCA4OCwgNDgsIDQ4LCA1MSwgMTI4LCA4OCwgNDgsIDQ4LCA1MCwgMTI4LCA4OCwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA4NywgOTAsIDEyOCwgODcsIDg5LCA3OCwgNzgsIDEyOCwgODcsIDg5LCA3OCwgMjA2LCA4NywgODYsIDEyOCwgCisgICAgODcsIDg1LCA4MCwgMTI4LCA4NywgODUsIDc5LCA4OCwgMTI4LCA4NywgODUsIDc5LCA4MCwgMTI4LCA4NywgODUsIDc5LCAKKyAgICAxMjgsIDg3LCA4NSwgNzgsIDc0LCAyMDcsIDg3LCA4NSwgNzgsIDEyOCwgODcsIDg1LCA3NiwgODUsIDEyOCwgODcsIDg1LCAKKyAgICA3NiwgMjEzLCA4NywgODUsIDY5LCAxMjgsIDg3LCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA4NywgODUsIDY1LCA2OSwgNzgsIAorICAgIDEyOCwgODcsIDg1LCAxMjgsIDg3LCA4MiwgMjE3LCA4NywgODIsIDc5LCA3OCwgNzEsIDEyOCwgODcsIDgyLCA3MywgODQsIAorICAgIDczLCA3OCwgMTk5LCA4NywgODIsIDY5LCA3OCwgNjcsIDcyLCAxMjgsIDg3LCA4MiwgNjksIDY1LCA4NCwgMjAwLCA4NywgCisgICAgODIsIDY1LCA4MCwgODAsIDY5LCAxOTYsIDg3LCA4MiwgNjUsIDgwLCAxMjgsIDg3LCA3OSwgODgsIDEyOCwgODcsIDc5LCAKKyAgICA4MiwgNzUsIDY5LCA4MiwgMTI4LCA4NywgNzksIDgyLCA3NSwgMTI4LCA4NywgNzksIDgyLCAyMDMsIDg3LCA3OSwgODIsIAorICAgIDY4LCA4MywgODAsIDY1LCA2NywgNjksIDEyOCwgODcsIDc5LCA4MiwgMTk2LCA4NywgNzksIDgwLCAxMjgsIDg3LCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDg3LCA3OSwgNzksIDc2LCAxMjgsIDg3LCA3OSwgNzksIDY4LCA4MywgNDUsIDY3LCA4MiwgNjksIAorICAgIDE5NywgODcsIDc5LCA3OSwgNjgsIDEyOCwgODcsIDc5LCA3OCwgMTI4LCA4NywgNzksIDIwNiwgODcsIDc5LCA3NywgNjksIAorICAgIDc4LCAyMTEsIDg3LCA3OSwgNzcsIDY5LCAyMDYsIDg3LCA3OSwgNzcsIDY1LCA3OCwgMjExLCA4NywgNzksIDc3LCA2NSwgCisgICAgNzgsIDEyOCwgODcsIDc5LCA3NywgNjUsIDIwNiwgODcsIDc5LCA3NiwgNzksIDgzLCA3OSwgMTI4LCA4NywgNzksIDc2LCAKKyAgICAxOTgsIDg3LCA3OSwgNjksIDEyOCwgODcsIDc5LCA2NSwgMTI4LCA4NywgNzMsIDg0LCA3MiwgNzksIDg1LCAyMTIsIDg3LCAKKyAgICA3MywgNzgsIDg0LCA2OSwgODIsIDEyOCwgODcsIDczLCA3OCwgNzUsIDczLCA3OCwgMTk5LCA4NywgNzMsIDc4LCA3NCwgNjUsIAorICAgIDEyOCwgODcsIDczLCA3OCwgNzEsIDgzLCAxMjgsIDg3LCA3MywgNzgsIDY5LCAxMjgsIDg3LCA3MywgNzgsIDE5NywgODcsIAorICAgIDczLCA3OCwgNjgsIDg1LCAxMjgsIDg3LCA3MywgNzgsIDY4LCAxMjgsIDg3LCA3MywgNzgsIDE5NiwgODcsIDczLCA3OCwgCisgICAgMTI4LCA4NywgNzMsIDcxLCA3OCwgODksIDY1LCA3OCwgMTI4LCA4NywgNzMsIDcxLCA3MSwgNzYsIDIxNywgODcsIDczLCAKKyAgICA2OCwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODcsIDczLCA2OCwgMTk3LCA4NywgNzMsIDY1LCA3OCwgNzEsIAorICAgIDg3LCA2NSwgNjUsIDc1LCAxMjgsIDg3LCA3MywgNjUsIDc4LCA3MSwgMTI4LCA4NywgNzIsIDc5LCA3NiwgMTk3LCA4NywgCisgICAgNzIsIDczLCA4NCwgNjksIDQ1LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgNjksIDE5NiwgODcsIDcyLCA3MywgODQsIAorICAgIDY5LCAxMjgsIDg3LCA3MiwgNjksIDY5LCA3NiwgNjksIDE5NiwgODcsIDcyLCA2OSwgNjksIDc2LCA2NywgNzIsIDY1LCA3MywgCisgICAgMjEwLCA4NywgNzIsIDY5LCA2OSwgNzYsIDEyOCwgODcsIDcyLCA2OSwgNjksIDIwNCwgODcsIDcyLCA2OSwgNjUsIDg0LCAKKyAgICAxMjgsIDg3LCA3MiwgNjUsIDc2LCA2OSwgMTI4LCA4NywgNzEsIDEyOCwgODcsIDY5LCA4OCwgMTI4LCA4NywgNjksIDg1LCAKKyAgICA4OCwgMTI4LCA4NywgNjksIDgzLCA4NCwgNjksIDgyLCAyMDYsIDg3LCA2OSwgODMsIDg0LCAxMjgsIDg3LCA2OSwgODMsIAorICAgIDIxMiwgODcsIDY5LCA4MCwgMTI4LCA4NywgNjksIDc5LCAxMjgsIDg3LCA2OSwgNzgsIDEyOCwgODcsIDY5LCA3NiwgNzYsIAorICAgIDEyOCwgODcsIDY5LCA3MywgNzEsIDcyLCAyMTIsIDg3LCA2OSwgNjksIDc4LCAxMjgsIDg3LCA2OSwgNjgsIDcxLCA2OSwgCisgICAgNDUsIDg0LCA2NSwgNzMsIDc2LCA2OSwgMTk2LCA4NywgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4NywgNjksIDY1LCAKKyAgICA4MiwgMjE3LCA4NywgNjksIDY1LCA4MCwgNzksIDc4LCAxMjgsIDg3LCA2NywgMTI4LCA4NywgNjYsIDEyOCwgODcsIDY1LCAKKyAgICA4OSwgMTI4LCA4NywgNjUsIDIxNywgODcsIDY1LCA4OCwgNzMsIDc4LCAxOTksIDg3LCA2NSwgODgsIDEyOCwgODcsIDY1LCAKKyAgICA4NywgNDUsIDY1LCA4OSwgNzMsIDc4LCA0NSwgODIsIDY5LCA4MywgNzIsIDEyOCwgODcsIDY1LCA4NywgMTI4LCA4NywgNjUsIAorICAgIDIxNSwgODcsIDY1LCA4NiwgMjE3LCA4NywgNjUsIDg2LCA3MywgNzgsIDE5OSwgODcsIDY1LCA4NiwgNjksIDgzLCAxMjgsIAorICAgIDg3LCA2NSwgODYsIDY5LCAxMjgsIDg3LCA2NSwgODYsIDE5NywgODcsIDY1LCA4NSwgMTI4LCA4NywgNjUsIDg0LCA4NCwgCisgICAgNzksIDEyOCwgODcsIDY1LCA4NCwgNjksIDgyLCA3NywgNjksIDc2LCA3OSwgNzgsIDEyOCwgODcsIDY1LCA4NCwgNjksIDgyLCAKKyAgICAxMjgsIDg3LCA2NSwgODQsIDY5LCAyMTAsIDg3LCA2NSwgODQsIDY3LCA3MiwgMTI4LCA4NywgNjUsIDg0LCAxMjgsIDg3LCAKKyAgICA2NSwgODMsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDg3LCA2NSwgODMsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzcsIDEyOCwgODcsIAorICAgIDY1LCA4MywgNzYsIDY1LCAxMjgsIDg3LCA2NSwgODMsIDc2LCAxOTMsIDg3LCA2NSwgODMsIDY1LCA3NiwgNzYsIDY1LCA3NywgCisgICAgMTI4LCA4NywgNjUsIDgzLCA2NSwgNzYsIDc2LCA2NSwgMjA1LCA4NywgNjUsIDgyLCA3OCwgNzMsIDc4LCAxOTksIDg3LCAKKyAgICA2NSwgODAsIDEyOCwgODcsIDY1LCA3OCwgNzMsIDc4LCAxOTksIDg3LCA2NSwgNzgsIDcxLCA3NSwgODUsIDc5LCA4MSwgCisgICAgMTI4LCA4NywgNjUsIDc4LCA2OCwgNjksIDgyLCA2OSwgODIsIDEyOCwgODcsIDY1LCA3OCwgMTI4LCA4NywgNjUsIDc2LCAKKyAgICA3NiwgMTI4LCA4NywgNjUsIDc2LCA3NSwgMTI4LCA4NywgNjUsIDc2LCAyMDMsIDg3LCA2NSwgNzMsIDg0LCA3MywgNzgsIAorICAgIDcxLCAxMjgsIDg3LCA2NSwgNzMsIDEyOCwgODcsIDY1LCA2OSwgNzgsIDEyOCwgODcsIDY1LCA2OSwgMTI4LCA4NywgNjUsIAorICAgIDY1LCA4NiwgODUsIDEyOCwgODcsIDQ4LCA1MCwgNTMsIDEyOCwgODcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDg3LCA0OCwgCisgICAgNTAsIDUyLCAxMjgsIDg3LCA0OCwgNTAsIDUxLCAxMjgsIDg3LCA0OCwgNTAsIDUwLCAxMjgsIDg3LCA0OCwgNTAsIDQ5LCAKKyAgICAxMjgsIDg3LCA0OCwgNTAsIDQ4LCAxMjgsIDg3LCA0OCwgNDksIDU3LCAxMjgsIDg3LCA0OCwgNDksIDU2LCA2NSwgMTI4LCAKKyAgICA4NywgNDgsIDQ5LCA1NiwgMTI4LCA4NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgODcsIDQ4LCA0OSwgNTUsIDEyOCwgODcsIAorICAgIDQ4LCA0OSwgNTQsIDEyOCwgODcsIDQ4LCA0OSwgNTMsIDEyOCwgODcsIDQ4LCA0OSwgNTIsIDY1LCAxMjgsIDg3LCA0OCwgCisgICAgNDksIDUyLCAxMjgsIDg3LCA0OCwgNDksIDUxLCAxMjgsIDg3LCA0OCwgNDksIDUwLCAxMjgsIDg3LCA0OCwgNDksIDQ5LCAKKyAgICAxMjgsIDg3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4NywgNDgsIDQ5LCA0OCwgMTI4LCA4NywgNDgsIDQ4LCA1NywgNjUsIAorICAgIDEyOCwgODcsIDQ4LCA0OCwgNTcsIDEyOCwgODcsIDQ4LCA0OCwgNTYsIDEyOCwgODcsIDQ4LCA0OCwgNTUsIDEyOCwgODcsIAorICAgIDQ4LCA0OCwgNTQsIDEyOCwgODcsIDQ4LCA0OCwgNTMsIDEyOCwgODcsIDQ4LCA0OCwgNTIsIDEyOCwgODcsIDQ4LCA0OCwgCisgICAgNTEsIDY1LCAxMjgsIDg3LCA0OCwgNDgsIDUxLCAxMjgsIDg3LCA0OCwgNDgsIDUwLCAxMjgsIDg3LCA0OCwgNDgsIDQ5LCAKKyAgICAxMjgsIDg2LCA5MCwgNzcsIDY5LCA4NCwgMTI4LCA4NiwgODksIDg4LCAxMjgsIDg2LCA4OSwgODQsIDEyOCwgODYsIDg5LCAKKyAgICA4MiwgODgsIDEyOCwgODYsIDg5LCA4MiwgMTI4LCA4NiwgODksIDgwLCAxMjgsIDg2LCA4OSwgMTI4LCA4NiwgODcsIDY1LCAKKyAgICAxMjgsIDg2LCA4NSwgODgsIDEyOCwgODYsIDg1LCA4NCwgMTI4LCA4NiwgODUsIDgyLCA4OCwgMTI4LCA4NiwgODUsIDgyLCAKKyAgICAxMjgsIDg2LCA4NSwgODAsIDEyOCwgODYsIDg1LCA3NiwgNzEsIDY1LCAyMTAsIDg2LCA4NSwgNjksIDgxLCAxMjgsIDg2LCAKKyAgICA4MywgMTI4LCA4NiwgODIsIDY1LCA2NywgNzIsIDg5LCAxMjgsIDg2LCA3OSwgODgsIDEyOCwgODYsIDc5LCA4NywgNjksIAorICAgIDc2LCA0NSwgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA4NiwgNzksIDg3LCAxMjgsIDg2LCA3OSwgODUsIDEyOCwgCisgICAgODYsIDc5LCA4NCwgMTI4LCA4NiwgNzksIDgwLCAxMjgsIDg2LCA3OSwgNzksIDEyOCwgODYsIDc5LCA3NywgMTI4LCA4NiwgCisgICAgNzksIDc2LCA4NSwgNzcsIDE5NywgODYsIDc5LCA3NiwgODQsIDY1LCA3MSwgMTk3LCA4NiwgNzksIDc2LCA2NywgNjUsIDc4LCAKKyAgICA3OSwgMTI4LCA4NiwgNzksIDczLCAxOTYsIDg2LCA3OSwgNzMsIDY3LCA3MywgNzgsIDcxLCAxMjgsIDg2LCA3OSwgNzMsIAorICAgIDY3LCA2OSwgNzYsIDY5LCA4MywgMjExLCA4NiwgNzksIDczLCA2NywgNjksIDE5NiwgODYsIDc5LCA2NywgNjUsIDc2LCA3MywgCisgICAgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDg2LCA3OSwgNjcsIDY1LCAyMDQsIDg2LCA3OSwgMTI4LCA4NiwgNzMsIDg4LCAKKyAgICAxMjgsIDg2LCA3MywgODQsIDgyLCA3MywgNzksIDc2LCA0NSwgNTAsIDEyOCwgODYsIDczLCA4NCwgODIsIDczLCA3OSwgNzYsIAorICAgIDEyOCwgODYsIDczLCA4NCwgNjUsIDY5LCA0NSwgNTAsIDEyOCwgODYsIDczLCA4NCwgNjUsIDY5LCAxMjgsIDg2LCA3MywgCisgICAgODQsIDEyOCwgODYsIDczLCA4MywgNzMsIDcxLCA3OSwgODQsIDcyLCA3MywgMTk1LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCAKKyAgICA2NSwgODksIDY1LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIDY1LCAxMjgsIDg2LCA3MywgODMsIDY1LCA4MiwgNzEsIAorICAgIDE5MywgODYsIDczLCA4MiwgNzMsIDY1LCA3NywgMTI4LCA4NiwgNzMsIDgyLCA3MSwgNzksIDEyOCwgODYsIDczLCA4MiwgCisgICAgNzEsIDY1LCAxMjgsIDg2LCA3MywgODIsIDY1LCA3NywgNjUsIDEyOCwgODYsIDczLCA4MCwgMTI4LCA4NiwgNzMsIDc5LCAKKyAgICA3NiwgNzMsIDc4LCAxMjgsIDg2LCA3MywgNzgsIDY5LCA3MSwgNjUsIDgyLCA0NSwgNTEsIDEyOCwgODYsIDczLCA3OCwgNjksIAorICAgIDcxLCA2NSwgODIsIDQ1LCA1MCwgMTI4LCA4NiwgNzMsIDc4LCA2OSwgNzEsIDY1LCA4MiwgMTI4LCA4NiwgNzMsIDc4LCA2OSwgCisgICAgNzEsIDY1LCAyMTAsIDg2LCA3MywgNzgsIDY5LCAxMjgsIDg2LCA3MywgNzgsIDEyOCwgODYsIDczLCA3NiwgNzYsIDY1LCAKKyAgICA3MSwgNjksIDEyOCwgODYsIDczLCA2OSwgODgsIDEyOCwgODYsIDczLCA2OSwgODcsIDczLCA3OCwgMTk5LCA4NiwgNzMsIAorICAgIDY5LCA4NywgNjgsIDY1LCA4NCwgMTkzLCA4NiwgNzMsIDY5LCA4NCwgMTI4LCA4NiwgNzMsIDY5LCA4MCwgMTI4LCA4NiwgCisgICAgNzMsIDY5LCAxMjgsIDg2LCA3MywgNjgsIDY5LCA3OSwgNjcsIDY1LCA4MywgODMsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDg2LCAKKyAgICA3MywgNjgsIDY5LCAyMDcsIDg2LCA3MywgNjgsIDY1LCAxMjgsIDg2LCA3MywgNjcsIDg0LCA3OSwgODIsIDIxNywgODYsIAorICAgIDczLCA2NiwgODIsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDg2LCA3MywgMTI4LCA4NiwgNjksIDg4LCAxMjgsIDg2LCA2OSwgCisgICAgODcsIDEyOCwgODYsIDY5LCAyMTUsIDg2LCA2OSwgODUsIDg4LCAxMjgsIDg2LCA2OSwgODUsIDc3LCAxMjgsIDg2LCA2OSwgCisgICAgODUsIDY1LCA2OSwgODAsIDY5LCA3OCwgMTI4LCA4NiwgNjksIDg1LCA2NSwgNjksIDEyOCwgODYsIDY5LCA4MywgODQsIDY1LCAKKyAgICAxMjgsIDg2LCA2OSwgODMsIDgzLCA2OSwgMjA0LCA4NiwgNjksIDgyLCAyMTcsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNzYsIDg5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgCisgICAgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1NCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgCisgICAgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTIsIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgCisgICAgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCisgICAgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1MCwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCisgICAgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTAsIDQ1LCA0OCwgNTAsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgCisgICAgNDgsIDQ5LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgCisgICAgNDgsIDUwLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MywgMTI4LCA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgODYsIDY5LCA4MiwgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgCisgICAgNDgsIDUxLCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCAKKyAgICA4NiwgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgODYsIDY5LCA4MiwgCisgICAgODQsIDczLCA2NywgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDg2LCA2OSwgODIsIDg0LCA3MywgNjcsIAorICAgIDY1LCA3NiwgMTI4LCA4NiwgNjksIDgyLCA4MywgNzMsIDY3LCA3NiwgNjksIDEyOCwgODYsIDY5LCA4MiwgODMsIDE5NywgCisgICAgODYsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDg2LCA2OSwgODIsIDY4LCA3MywgNzEsIDgyLCA3MywgODMsIDEyOCwgODYsIDY5LCAKKyAgICA4MCwgMTI4LCA4NiwgNjksIDc4LCA2OCwgMTI4LCA4NiwgNjksIDczLCA3NiwgMTI4LCA4NiwgNjksIDcyLCA3MywgNjcsIAorICAgIDc2LCA2OSwgMTI4LCA4NiwgNjksIDcyLCAxMjgsIDg2LCA2OSwgMjAwLCA4NiwgNjksIDY5LCAxMjgsIDg2LCA2OSwgMTk3LCAKKyAgICA4NiwgNjksIDY4LCA2OSwgMTI4LCA4NiwgNjksIDY3LCA4NCwgNzksIDIxMCwgODYsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgODYsIDY1LCA4OCwgMTI4LCA4NiwgNjUsIDg2LCAxMjgsIDg2LCA2NSwgMjE0LCA4NiwgNjUsIDg0LCA3MiwgODksIAorICAgIDEyOCwgODYsIDY1LCA4NCwgMTI4LCA4NiwgNjUsIDgzLCA4NCwgNzgsIDY5LCA4MywgMjExLCA4NiwgNjUsIDgzLCA3MywgCisgICAgODMsIDEyOCwgODYsIDY1LCA4MiwgODksIDIxMSwgODYsIDY1LCA4MiwgNzMsIDc1LCA2NSwgMTI4LCA4NiwgNjUsIDgyLCAKKyAgICA3MywgNjUsIDc4LCAyMTIsIDg2LCA2NSwgODIsIDczLCA2NSwgMTI4LCA4NiwgNjUsIDgyLCA3MywgMTkzLCA4NiwgNjUsIAorICAgIDgyLCA2OSwgNzMsIDY1LCAyMDEsIDg2LCA2NSwgODIsIDY5LCA3MywgMTkzLCA4NiwgNjUsIDgwLCA3OSwgODUsIDgyLCA4MywgCisgICAgMTI4LCA4NiwgNjUsIDgwLCAxMjgsIDg2LCA2NSwgNzgsIDY5LCAxMjgsIDg2LCA2NSwgNzcsIDY1LCA3MSwgNzksIDc3LCAKKyAgICA4NSwgNzUsIDcyLCA2NSwgMTI4LCA4NiwgNjUsIDc3LCA2NSwgNzEsIDc5LCA3NywgODUsIDc1LCA3MiwgMTkzLCA4NiwgNjUsIAorICAgIDc2LCA3NiwgNjksIDg5LCAxMjgsIDg2LCA2NSwgNjUsIDg2LCA4NSwgMTI4LCA4NiwgNjUsIDY1LCAxMjgsIDg2LCA0OCwgCisgICAgNTIsIDQ4LCA2NSwgMTI4LCA4NiwgNDgsIDUyLCA0OCwgMTI4LCA4NiwgNDgsIDUxLCA1NywgMTI4LCA4NiwgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA4NiwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNTUsIDEyOCwgODYsIDQ4LCA1MSwgNTQsIAorICAgIDEyOCwgODYsIDQ4LCA1MSwgNTMsIDEyOCwgODYsIDQ4LCA1MSwgNTIsIDEyOCwgODYsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIAorICAgIDg2LCA0OCwgNTEsIDUxLCAxMjgsIDg2LCA0OCwgNTEsIDUwLCAxMjgsIDg2LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA4NiwgCisgICAgNDgsIDUxLCA0OSwgMTI4LCA4NiwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MSwgNDgsIDEyOCwgODYsIDQ4LCAKKyAgICA1MCwgNTcsIDY1LCAxMjgsIDg2LCA0OCwgNTAsIDU3LCAxMjgsIDg2LCA0OCwgNTAsIDU2LCA2NSwgMTI4LCA4NiwgNDgsIAorICAgIDUwLCA1NiwgMTI4LCA4NiwgNDgsIDUwLCA1NSwgMTI4LCA4NiwgNDgsIDUwLCA1NCwgMTI4LCA4NiwgNDgsIDUwLCA1MywgCisgICAgMTI4LCA4NiwgNDgsIDUwLCA1MiwgMTI4LCA4NiwgNDgsIDUwLCA1MSwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgNTEsIDEyOCwgCisgICAgODYsIDQ4LCA1MCwgNTAsIDEyOCwgODYsIDQ4LCA1MCwgNDksIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDc2LCAxMjgsIDg2LCAKKyAgICA0OCwgNTAsIDQ4LCA3NSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzQsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDczLCAxMjgsIAorICAgIDg2LCA0OCwgNTAsIDQ4LCA3MiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNzEsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIDcwLCAKKyAgICAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2OSwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjgsIDEyOCwgODYsIDQ4LCA1MCwgNDgsIAorICAgIDY3LCAxMjgsIDg2LCA0OCwgNTAsIDQ4LCA2NiwgMTI4LCA4NiwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgODYsIDQ4LCA1MCwgCisgICAgNDgsIDEyOCwgODYsIDQ4LCA0OSwgNTcsIDEyOCwgODYsIDQ4LCA0OSwgNTYsIDEyOCwgODYsIDQ4LCA0OSwgNTUsIDEyOCwgCisgICAgODYsIDQ4LCA0OSwgNTQsIDEyOCwgODYsIDQ4LCA0OSwgNTMsIDEyOCwgODYsIDQ4LCA0OSwgNTIsIDEyOCwgODYsIDQ4LCAKKyAgICA0OSwgNTEsIDEyOCwgODYsIDQ4LCA0OSwgNTAsIDY2LCAxMjgsIDg2LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA4NiwgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OSwgNDksIDY2LCAxMjgsIDg2LCA0OCwgCisgICAgNDksIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ5LCA0OSwgMTI4LCA4NiwgNDgsIDQ5LCA0OCwgMTI4LCA4NiwgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA4NiwgNDgsIDQ4LCA1NiwgMTI4LCA4NiwgNDgsIDQ4LCA1NSwgNjYsIDEyOCwgODYsIDQ4LCA0OCwgNTUsIAorICAgIDY1LCAxMjgsIDg2LCA0OCwgNDgsIDU1LCAxMjgsIDg2LCA0OCwgNDgsIDU0LCAxMjgsIDg2LCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDg2LCA0OCwgNDgsIDUyLCAxMjgsIDg2LCA0OCwgNDgsIDUxLCAxMjgsIDg2LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4NiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzMsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDcyLCAxMjgsIDg2LCAKKyAgICA0OCwgNDgsIDQ5LCA3MSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNzAsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY5LCAxMjgsIAorICAgIDg2LCA0OCwgNDgsIDQ5LCA2OCwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgNjcsIDEyOCwgODYsIDQ4LCA0OCwgNDksIDY2LCAKKyAgICAxMjgsIDg2LCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4NiwgNDgsIDQ4LCA0OSwgMTI4LCA4NSwgOTAsIDg1LCAxMjgsIDg1LCAKKyAgICA5MCwgNTEsIDEyOCwgODUsIDkwLCAxNzksIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODUsIDg5LCAxMjgsIDg1LCAKKyAgICA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4NSwgODUsIDg1LCAxMjgsIDg1LCA4NSwgODUsIDUxLCAxMjgsIAorICAgIDg1LCA4NSwgODUsIDUwLCAxMjgsIDg1LCA4NSwgNjksIDEyOCwgODUsIDg0LCA4NSwgNzUsIDczLCAxMjgsIDg1LCA4MywgCisgICAgODMsIDg1LCA1MSwgMTI4LCA4NSwgODMsIDgzLCA4NSwgMTI4LCA4NSwgODMsIDcyLCA4OCwgMTI4LCA4NSwgODMsIDcyLCAKKyAgICA4NSwgNzcsIDg4LCAxMjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIDg1LCA4MywgNzIsIDUwLCAxMjgsIAorICAgIDg1LCA4MywgNzIsIDEyOCwgODUsIDgzLCAyMDAsIDg1LCA4MywgNjksIDE5NiwgODUsIDgzLCA2OSwgMTI4LCA4NSwgODIsIAorICAgIDg1LCAyMTgsIDg1LCA4MiwgODUsIDgzLCAxMjgsIDg1LCA4MiwgODUsIDY4LCA2NSwgMTI4LCA4NSwgODIsIDg1LCA2OCwgCisgICAgMTkzLCA4NSwgODIsIDg1LCAxMjgsIDg1LCA4MiwgMjEzLCA4NSwgODIsIDc4LCAxMjgsIDg1LCA4MiwgNzMsIDc4LCA2OSwgCisgICAgMTI4LCA4NSwgODIsIDczLCA1MSwgMTI4LCA4NSwgODIsIDczLCAxMjgsIDg1LCA4MiwgNjUsIDc4LCA4NSwgODMsIDEyOCwgCisgICAgODUsIDgyLCA2NSwgMTI4LCA4NSwgODIsIDUyLCAxMjgsIDg1LCA4MiwgNTAsIDEyOCwgODUsIDgyLCAxNzgsIDg1LCA4MCwgCisgICAgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDg1LCA4MCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgODUsIDgwLCA4NywgNjUsIDgyLCAKKyAgICA2OCwgMTI4LCA4NSwgODAsIDg3LCA2NSwgODIsIDE5NiwgODUsIDgwLCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4NSwgODAsIAorICAgIDgzLCA3MywgNzYsIDc5LCA3OCwgMTI4LCA4NSwgODAsIDgzLCA3MywgNzYsIDc5LCAyMDYsIDg1LCA4MCwgODIsIDczLCA3MSwgCisgICAgNzIsIDIxMiwgODUsIDgwLCA4MCwgNjksIDIxMCwgODUsIDgwLCA2NSwgNjgsIDcyLCA3NywgNjUsIDc4LCA3MywgODksIDY1LCAKKyAgICAxMjgsIDg1LCA4MCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDg1LCA3OSwgNzgsIDEyOCwgODUsIAorICAgIDc4LCA3OCwgMTI4LCA4NSwgNzgsIDc3LCA2NSwgODIsIDgyLCA3MywgNjksIDE5NiwgODUsIDc4LCA3NSwgNzgsIDc5LCA4NywgCisgICAgNzgsIDEyOCwgODUsIDc4LCA3MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg1LCA3OCwgNzMsIDg0LCA4OSwgMTI4LCAKKyAgICA4NSwgNzgsIDczLCA4NCwgMTI4LCA4NSwgNzgsIDczLCAyMTIsIDg1LCA3OCwgNzMsIDc5LCA3OCwgMTI4LCA4NSwgNzgsIAorICAgIDczLCA3OSwgMjA2LCA4NSwgNzgsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDg1LCA3OCwgNjgsIDIwNywgODUsIDc4LCA2OCwgCisgICAgNjksIDgyLCA4NCwgNzMsIDY5LCAxMjgsIDg1LCA3OCwgNjgsIDY5LCA4MiwgNzYsIDczLCA3OCwgMTk3LCA4NSwgNzgsIDY4LCAKKyAgICA2OSwgODIsIDY4LCA3OSwgODQsIDEyOCwgODUsIDc4LCA2OCwgNjksIDgyLCA2NiwgNjUsIDgyLCAxMjgsIDg1LCA3OCwgNjgsIAorICAgIDY5LCAyMTAsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDg1LCA3OCwgNjUsIDgzLCA4MCwgNzMsIDgyLCA2NSwgODQsIDY5LCA2OCwgCisgICAgMTI4LCA4NSwgNzgsIDY1LCA4MCwgMTI4LCA4NSwgNzgsIDY1LCA3NywgODUsIDgzLCA2OSwgMTk2LCA4NSwgNzgsIDY1LCAKKyAgICAxMjgsIDg1LCAyMDYsIDg1LCA3NywgODUsIDc3LCAxMjgsIDg1LCA3NywgODUsIDIwNSwgODUsIDc3LCA2NiwgODIsIDY5LCAKKyAgICA3NiwgNzYsIDY1LCAxMjgsIDg1LCA3NywgNjYsIDgyLCA2OSwgNzYsIDc2LCAxOTMsIDg1LCA3NywgNjYsIDczLCA3OCwgCisgICAgMTI4LCA4NSwgNzUsIDg1LCAxMjgsIDg1LCA3NSwgODIsIDY1LCA3MywgNzgsIDczLCA2NSwgMjA2LCA4NSwgNzUsIDY1LCAKKyAgICA4MiwgNjUsIDEyOCwgODUsIDc1LCA2NSwgODIsIDE5MywgODUsIDc1LCAxMjgsIDg1LCA3MywgNzYsIDc2LCA2OSwgNjUsIAorICAgIDc4LCA3OCwgMTI4LCA4NSwgNzMsIDcxLCA3MiwgODUsIDIxMCwgODUsIDcxLCA2NSwgODIsIDczLCA4NCwgNzMsIDE5NSwgCisgICAgODUsIDY5LCA4OSwgMTI4LCA4NSwgNjksIDY5LCAxMjgsIDg1LCA2OSwgNjUsIDEyOCwgODUsIDY4LCA4NSwgNzEsIDEyOCwgCisgICAgODUsIDY4LCA2NSwgODQsIDg0LCA2NSwgMTI4LCA4NSwgNjgsIDY1LCA4NCwgODQsIDE5MywgODUsIDY4LCA2NSwgNjUsIDg0LCAKKyAgICAxMjgsIDg1LCA2OCwgMTI4LCA4NSwgMTk2LCA4NSwgNjcsIDEyOCwgODUsIDY2LCA4NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgCisgICAgODUsIDY2LCA3MiwgNjUsIDg5LCA2NSwgODQsIDIwNywgODUsIDY2LCA2NSwgNjgsIDY1LCA3NywgNjUsIDEyOCwgODUsIDY2LCAKKyAgICAxMjgsIDg1LCA2NSwgODQsIDcyLCAxMjgsIDg1LCA2NSwgMTI4LCA4NSwgMTc4LCA4NSwgNDgsIDUyLCA1MCwgMTI4LCA4NSwgCisgICAgNDgsIDUyLCA0OSwgMTI4LCA4NSwgNDgsIDUyLCA0OCwgMTI4LCA4NSwgNDgsIDUxLCA1NywgMTI4LCA4NSwgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA4NSwgNDgsIDUxLCA1NSwgMTI4LCA4NSwgNDgsIDUxLCA1NCwgMTI4LCA4NSwgNDgsIDUxLCA1MywgMTI4LCAKKyAgICA4NSwgNDgsIDUxLCA1MiwgMTI4LCA4NSwgNDgsIDUxLCA1MSwgMTI4LCA4NSwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgODUsIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgODUsIDQ4LCA1MSwgNDksIDEyOCwgODUsIDQ4LCA1MSwgNDgsIDEyOCwgODUsIDQ4LCA1MCwgCisgICAgNTcsIDY1LCAxMjgsIDg1LCA0OCwgNTAsIDU3LCAxMjgsIDg1LCA0OCwgNTAsIDU2LCAxMjgsIDg1LCA0OCwgNTAsIDU1LCAKKyAgICAxMjgsIDg1LCA0OCwgNTAsIDU0LCAxMjgsIDg1LCA0OCwgNTAsIDUzLCAxMjgsIDg1LCA0OCwgNTAsIDUyLCAxMjgsIDg1LCAKKyAgICA0OCwgNTAsIDUxLCA2NSwgMTI4LCA4NSwgNDgsIDUwLCA1MSwgMTI4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA4NSwgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA4NSwgNDgsIDUwLCA0OCwgMTI4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA4NSwgNDgsIDQ5LCA1NiwgCisgICAgMTI4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA4NSwgNDgsIDQ5LCA1NCwgMTI4LCA4NSwgNDgsIDQ5LCA1MywgMTI4LCA4NSwgCisgICAgNDgsIDQ5LCA1MiwgMTI4LCA4NSwgNDgsIDQ5LCA1MSwgMTI4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA4NSwgNDgsIDQ5LCAKKyAgICA0OSwgMTI4LCA4NSwgNDgsIDQ5LCA0OCwgMTI4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCAKKyAgICA4NSwgNDgsIDQ4LCA1NSwgMTI4LCA4NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgODUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIAorICAgIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDg1LCA0OCwgNDgsIDUyLCAxMjgsIDg1LCA0OCwgCisgICAgNDgsIDUxLCAxMjgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDg1LCA0OCwgNDgsIDQ5LCAxMjgsIDg1LCA0NSwgNzMsIDQ1LCAKKyAgICA3MywgMTI4LCA4NSwgNDUsIDY5LCA3OSwgNDUsIDY5LCA4NSwgMTI4LCA4NCwgOTAsIDg1LCAxMjgsIDg0LCA5MCwgNzksIAorICAgIDY1LCAxMjgsIDg0LCA5MCwgNzksIDEyOCwgODQsIDkwLCA3MywgMjEwLCA4NCwgOTAsIDczLCAxMjgsIDg0LCA5MCwgNjksIAorICAgIDY5LCAxMjgsIDg0LCA5MCwgNjksIDEyOCwgODQsIDkwLCA2NSwgNjUsIDEyOCwgODQsIDkwLCA2NSwgMTI4LCA4NCwgOTAsIAorICAgIDEyOCwgODQsIDg5LCAyMTAsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgzLCA4NCwgODksIDgwLCA2OSwgNDUsIDE4MiwgODQsIAorICAgIDg5LCA4MCwgNjksIDQ1LCAxODEsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTgwLCA4NCwgODksIDgwLCA2OSwgNDUsIDE3OSwgCisgICAgODQsIDg5LCA4MCwgNjksIDQ1LCAxNzgsIDg0LCA4OSwgODAsIDY5LCA0NSwgMTc3LCA4NCwgODksIDgwLCAxOTcsIDg0LCAKKyAgICA4OSwgNzksIDEyOCwgODQsIDg5LCA3MywgMTI4LCA4NCwgODksIDY5LCAxMjgsIDg0LCA4OSwgNjUsIDEyOCwgODQsIDg3LCAKKyAgICA3OSwgNzksIDEyOCwgODQsIDg3LCA3OSwgNDUsIDg3LCA2NSwgMjE3LCA4NCwgODcsIDc5LCA0NSwgODQsIDcyLCA3MywgODIsIAorICAgIDg0LCA4OSwgMTI4LCA4NCwgODcsIDc5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4NCwgODcsIDc5LCA0NSwgNzIsIDY5LCA2NSwgCisgICAgNjgsIDY5LCAxOTYsIDg0LCA4NywgNzMsIDgzLCA4NCwgNjksIDE5NiwgODQsIDg3LCA3MywgNzMsIDEyOCwgODQsIDg3LCAKKyAgICA3MywgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgODQsIDg3LCA3OSwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIAorICAgIDg5LCA0NSwgODQsIDcyLCA4MiwgNjksIDY5LCAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNzMsIDg4LCAKKyAgICAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA4MywgNjksIDg2LCA2OSwgNzgsIDEyOCwgODQsIDg3LCA2OSwgNzgsIAorICAgIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDc4LCA3MywgNzgsIDY5LCAKKyAgICAxMjgsIDg0LCA4NywgNjksIDc4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgMTI4LCA4NCwgODcsIDY5LCA3OCwgODQsIAorICAgIDg5LCA0NSwgNzAsIDczLCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCA4OSwgNDUsIDY5LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgMjAwLCA4NCwgODcsIDY5LCA3OCwgODQsIDg5LCA0NSwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDg0LCA4NywgNjksIAorICAgIDc4LCA4NCwgODksIDEyOCwgODQsIDg3LCA2OSwgNzgsIDg0LCAyMTcsIDg0LCA4NywgNjksIDc2LCA4NiwgNjksIDQ1LCA4NCwgCisgICAgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDg0LCA4NywgNjksIDc2LCA4NiwgNjksIDEyOCwgODQsIDg3LCA2OSwgNzYsIDg2LCAKKyAgICAxOTcsIDg0LCA4NywgNjksIDEyOCwgODQsIDg3LCA2NSwgNjUsIDEyOCwgODQsIDg3LCA2NSwgMTI4LCA4NCwgODYsIDgyLCAKKyAgICA3MywgNjgsIDc5LCAxMjgsIDg0LCA4NiwgNzMsIDc3LCA2NSwgNjgsIDg1LCAyMTAsIDg0LCA4NSwgODgsIDEyOCwgODQsIAorICAgIDg1LCA4NSwgNzcsIDg1LCAxMjgsIDg0LCA4NSwgODQsIDg0LCA4OSwgMTI4LCA4NCwgODUsIDg0LCA2OSwgODksIDY1LCA4MywgCisgICAgNjUsIDg0LCAxMjgsIDg0LCA4NSwgODQsIDEyOCwgODQsIDg1LCA4MiwgODgsIDEyOCwgODQsIDg1LCA4MiwgODUsIDEyOCwgCisgICAgODQsIDg1LCA4MiwgODQsIDc2LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3OSwgNTAsIDEyOCwgODQsIDg1LCA4MiwgNzgsIDgzLCAKKyAgICA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4NCwgODUsIDgyLCA3OCwgNjksIDE5NiwgODQsIDg1LCA4MiwgMjA2LCA4NCwgODUsIAorICAgIDgyLCA2NiwgNjUsIDc4LCAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgODUsIDc5LCA4OCwgCisgICAgMTI4LCA4NCwgODUsIDc5LCA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAxMjgsIDg0LCA4NSwgCisgICAgNzgsIDc4LCA4OSwgMTI4LCA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIDc3LCA2NSwgNjksIAorICAgIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgODcsIDY5LCA3OCwgCisgICAgODQsIDczLCA4MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCA4NCwgODUsIDcxLCAKKyAgICA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIDY1LCA2OSwgODAsIAorICAgIDEyOCwgODQsIDg1LCA2NSwgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgODQsIAorICAgIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAKKyAgICAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCAKKyAgICA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIAorICAgIDgzLCA2NSwgMTI4LCA4NCwgODQsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCAKKyAgICA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIAorICAgIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIDgzLCAKKyAgICA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCAKKyAgICA4NCwgODMsIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIAorICAgIDc5LCAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgCisgICAgNjksIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAKKyAgICAxMjgsIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIAorICAgIDczLCA4OSwgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgCisgICAgNzksIDIwNiwgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCAKKyAgICA3OCwgNjcsIDY1LCA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIAorICAgIDEyOCwgODQsIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgCisgICAgNzksIDgwLCA3MiwgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIAogICAgIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAKICAgICAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgCiAgICAgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKICAgICAyMDYsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIAotICAgIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgCi0gICAgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4NCwgODIsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIAotICAgIDgyLCA3MywgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgCi0gICAgMTk3LCA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCAKLSAgICA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIAotICAgIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgCi0gICAgNzMsIDcwLCA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCAKLSAgICA4MiwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgCi0gICAgODIsIDc5LCA4NSwgNzgsIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIAotICAgIDY5LCAxOTYsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgCi0gICAgMTk3LCA4NCwgODIsIDczLCA2NSwgMTI4LCA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCAKLSAgICA3OSwgMTI4LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIAotICAgIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgCi0gICAgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCAKLSAgICA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIAotICAgIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCAKLSAgICA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCA3MywgCi0gICAgNzksIDIwNiwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgCi0gICAgNzksIDg4LCAxMjgsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCAKLSAgICA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIAotICAgIDg1LCAyMTEsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgCi0gICAgNjksIDE5NiwgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgCi0gICAgNzksIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUzLCAxMjgsIAotICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCi0gICAgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjUsIDIwNCwgODQsIDc5LCA3MSwgNjksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDg0LCA3OSwgNjgsIDIwNywgODQsIAotICAgIDc5LCA2NSwgNzgsIDY4LCA2NSwgNzUsIDcyLCA3MywgNjUsIDg0LCAxMjgsIDg0LCA3OSwgNjUsIDEyOCwgODQsIDc4LCAKLSAgICAxMjgsIDg0LCA3NiwgODYsIDEyOCwgODQsIDc2LCA4NSwgMTI4LCA4NCwgNzYsIDc5LCAxMjgsIDg0LCA3NiwgNzMsIDEyOCwgCi0gICAgODQsIDc2LCA3MiwgODUsIDEyOCwgODQsIDc2LCA3MiwgNzksIDEyOCwgODQsIDc2LCA3MiwgNzMsIDEyOCwgODQsIDc2LCAKLSAgICA3MiwgNjksIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDY5LCAxMjgsIDg0LCA3NiwgNzIsIDY1LCAxMjgsIDg0LCA3NiwgNjksIAotICAgIDY5LCAxMjgsIDg0LCA3NiwgNjUsIDEyOCwgODQsIDc0LCA2OSwgMTI4LCA4NCwgNzMsIDg4LCAxMjgsIDg0LCA3MywgODcsIAotICAgIDc4LCAxMjgsIDg0LCA3MywgODcsIDY1LCAyMTgsIDg0LCA3MywgODQsIDc2LCA3OSwgMTI4LCA4NCwgNzMsIDg0LCAxMjgsIAotICAgIDg0LCA3MywgODIsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDg0LCA3MywgODIsIDEyOCwgODQsIDczLCAyMTAsIDg0LCA3MywgCi0gICAgODAsIDgwLCA3MywgMTI4LCA4NCwgNzMsIDgwLCA2OSwgNzIsIDY1LCAxMjgsIDg0LCA3MywgODAsIDEyOCwgODQsIDczLCAKLSAgICAyMDgsIDg0LCA3MywgNzgsIDg5LCAxMjgsIDg0LCA3MywgNzgsIDc4LCA2OSwgMTI4LCA4NCwgNzMsIDc4LCA2NSwgNzEsIAotICAgIDc3LCA2NSwgMTI4LCA4NCwgNzMsIDc3LCA2OSwgODMsIDEyOCwgODQsIDczLCA3NywgNjksIDEyOCwgODQsIDczLCA3NiwgCi0gICAgNjgsIDE5NywgODQsIDczLCA3NiwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKLSAgICAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDg0LCA3MywgNzUsIAotICAgIDY5LCA4NSwgODQsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCAyMTIsIDg0LCA3MywgNzMsIDEyOCwgODQsIDczLCA3MSwgCi0gICAgNzIsIDIxMiwgODQsIDczLCA3MSwgNjksIDgyLCAxMjgsIDg0LCA3MywgNjksIDg4LCAxMjgsIDg0LCA3MywgNjksIDgwLCAKLSAgICAxMjgsIDg0LCA3MywgMTk3LCA4NCwgNzMsIDY3LCA3NSwgMTI4LCA4NCwgNzMsIDY3LCAyMDMsIDg0LCA3MywgNjUsIDgyLCAKLSAgICA2NSwgMTI4LCA4NCwgNzIsIDkwLCAxMjgsIDg0LCA3MiwgODksIDc5LCA3OSwgMjA1LCA4NCwgNzIsIDg3LCA2NSwgNjUsIAotICAgIDEyOCwgODQsIDcyLCA4NywgNjUsIDEyOCwgODQsIDcyLCA4NSwgODIsIDIxMSwgODQsIDcyLCA4NSwgODIsIDczLCA4MywgCi0gICAgNjUsIDIxOCwgODQsIDcyLCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA3MiwgODUsIDc4LCA2OCwgNjksIDgyLCA4MywgODQsIDc5LCAKLSAgICA4MiwgNzcsIDEyOCwgODQsIDcyLCA4NSwgNzgsIDY4LCA2OSwgODIsIDEyOCwgODQsIDcyLCA4NSwgMTI4LCA4NCwgNzIsIAotICAgIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCAyMDAsIDg0LCA3MiwgODIsIDY5LCA2OSwgCi0gICAgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4NCwgNzIsIDgyLCA2OSwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDg0LCAKLSAgICA3MiwgODIsIDY5LCA2OSwgNDUsIDE5NiwgODQsIDcyLCA4MiwgNjksIDY1LCA2OCwgMTI4LCA4NCwgNzIsIDc5LCA4NSwgODMsIAotICAgIDY1LCA3OCwgNjgsIDIxMSwgODQsIDcyLCA3OSwgODUsIDgzLCA2NSwgNzgsIDY4LCAxMjgsIDg0LCA3MiwgNzksIDg1LCA4MywgCi0gICAgNjUsIDc4LCAxOTYsIDg0LCA3MiwgNzksIDgyLCA3OCwgMTI4LCA4NCwgNzIsIDc5LCA4MiwgMjA2LCA4NCwgNzIsIDc5LCAKLSAgICA3OSwgMTI4LCA4NCwgNzIsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDcyLCA3OSwgNjUsIDEyOCwgODQsIDcyLCAyMDcsIDg0LCAKLSAgICA3MiwgNzMsIDg1LCA4NCwgNzIsIDEyOCwgODQsIDcyLCA3MywgODQsIDY1LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAotICAgIDQ1LCA4MywgNjksIDY3LCA3OSwgNzgsIDE5NiwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgNDUsIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDIxNywgODQsIDcyLCA3MywgODIsIDg0LCAKLSAgICA2OSwgNjksIDc4LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDg0LCA3MiwgNzMsIDgyLCA2OCwgODMsIAotICAgIDEyOCwgODQsIDcyLCA3MywgODIsIDY4LCAyMTEsIDg0LCA3MiwgNzMsIDgyLCA2OCwgMTI4LCA4NCwgNzIsIDczLCA4MiwgCi0gICAgMTk2LCA4NCwgNzIsIDczLCAyMDYsIDg0LCA3MiwgNzMsIDczLCAxMjgsIDg0LCA3MiwgNzMsIDcxLCA3MiwgMTI4LCA4NCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAyMDAsIDg0LCA3MiwgNjksIDg5LCAKLSAgICAxMjgsIDg0LCA3MiwgNjksIDg0LCA3MiwgNjksIDEyOCwgODQsIDcyLCA2OSwgODQsIDY1LCAxMjgsIDg0LCA3MiwgNjksIAotICAgIDg0LCAxOTMsIDg0LCA3MiwgNjksIDgzLCA4MCwgNzMsIDY1LCAyMDYsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDgzLCAKLSAgICAxMjgsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDIxMSwgODQsIDcyLCA2OSwgMjExLCA4NCwgNzIsIDY5LCA4MiwgNzcsIAotICAgIDc5LCA2OCwgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4NCwgNzIsIDY5LCA4MiwgNjksIDcwLCA3OSwgODIsIDY5LCAKLSAgICAxMjgsIDg0LCA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MiwgNjksIDIwNiwgODQsIDcyLCA2OSwgNzcsIDY1LCA4NCwgNzMsIAotICAgIDgzLCA3NywgNzksIDIxMSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDc3LCAxOTMsIDg0LCA3MiwgCi0gICAgNjksIDcyLCAxMjgsIDg0LCA3MiwgNjksIDIwMCwgODQsIDcyLCA2OSwgNjksIDEyOCwgODQsIDcyLCAxOTcsIDg0LCA3MiwgCi0gICAgNjUsIDc4LCA4NCwgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgMTI4LCA4NCwgNzIsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCAKLSAgICA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDIwNiwgODQsIDcyLCA2NSwgNzYsIDEyOCwgODQsIDcyLCA2NSwgMjA0LCAKLSAgICA4NCwgNzIsIDY1LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCA3OCwgMTkzLCA4NCwgNzIsIDY1LCA2NSwgNzYsIAotICAgIDg1LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCAxMjgsIDg0LCA3MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDY5LCA4OCwgCi0gICAgODQsIDEyOCwgODQsIDY5LCA4OCwgMTI4LCA4NCwgNjksIDg2LCA3MywgODIsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCAKLSAgICA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4NCwgNjksIAotICAgIDg0LCA4MiwgNjUsIDgwLCA3NiwgNzMsIDEyOCwgODQsIDY5LCA4NCwgODIsIDY1LCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAKLSAgICAxMjgsIDg0LCA2OSwgODQsIDcyLCAxMjgsIDg0LCA2OSwgODQsIDIwMCwgODQsIDY5LCA4NCwgNjUsIDgyLCA4NCwgNzksIAotICAgIDIxMSwgODQsIDY5LCA4NCwgNjUsIDgyLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDY5LCA4NCwgCi0gICAgMTI4LCA4NCwgNjksIDIxMiwgODQsIDY5LCA4MywgODMsIDY5LCA4MiwgNjUsIDEyOCwgODQsIDY5LCA4MywgODMsIDY5LCAKLSAgICA4MiwgMTkzLCA4NCwgNjksIDgzLCA4MywgNjUsIDgyLCA3OSwgMjA2LCA4NCwgNjksIDgzLCAyMDAsIDg0LCA2OSwgODIsIAotICAgIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDg0LCA2OSwgODAsIDEyOCwgODQsIDY5LCA3OCwgODUsIDg0LCA3OSwgCi0gICAgMTI4LCA4NCwgNjksIDc4LCA4NSwgMTI4LCA4NCwgNjksIDc4LCAyMTMsIDg0LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA2OSwgCi0gICAgNzgsIDIxMSwgODQsIDY5LCA3OCwgMTI4LCA4NCwgNjksIDIwNiwgODQsIDY5LCA3NywgODAsIDg1LCAyMTEsIDg0LCA2OSwgCi0gICAgNzYsIDc5LCA4NSwgMjExLCA4NCwgNjksIDc2LCA3MywgODMsIDcyLCAxOTMsIDg0LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDc5LCAKLSAgICA3OCwgNjksIDEyOCwgODQsIDY5LCA3NiwgNjksIDgwLCA3MiwgNzksIDc4LCAxOTcsIDg0LCA2OSwgNzYsIDY5LCA3MywgNjUsIAotICAgIDEyOCwgODQsIDY5LCA3MywgODcsIDgzLCAxMjgsIDg0LCA2OSwgNzEsIDY5LCA3MiwgMTI4LCA4NCwgNjksIDE5NywgODQsIAotICAgIDY5LCA2OCwgODUsIDc4LCA3MSwgMTI4LCA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgODAsIDc5LCAKLSAgICA3NSwgNjksIDE5NiwgODQsIDY5LCA2NSwgODIsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNzgsIDc1LCA2OSwgCi0gICAgMTk2LCA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCA2NiwgNjUsIDgyLCA2NiwgNjksIDE5NiwgODQsIDY5LCAKLSAgICA0NSwgODUsIDEyOCwgODQsIDY3LCA3MiwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDY3LCA3MiwgNjksIDcyLCA2OSwgCi0gICAgMjAwLCA4NCwgNjcsIDcyLCA2OSwgNzIsIDEyOCwgODQsIDY3LCA3MiwgNjksIDIwMCwgODQsIDY3LCA3MiwgNjksIDEyOCwgCi0gICAgODQsIDE5NSwgODQsIDY1LCA4OCwgMTI4LCA4NCwgNjUsIDg3LCA2OSwgNzYsIDc2LCA2OSwgNzcsIDY5LCAyMTIsIDg0LCAKLSAgICA2NSwgODcsIDY1LCAxMjgsIDg0LCA2NSwgODcsIDEyOCwgODQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIAotICAgIDg0LCA2NSwgODYsIDEyOCwgODQsIDY1LCAyMTQsIDg0LCA2NSwgODUsIDgyLCA4NSwgODMsIDEyOCwgODQsIDY1LCA4NSwgCi0gICAgMTI4LCA4NCwgNjUsIDIxMywgODQsIDY1LCA4NCwgODcsIDY5LCA2OSwgNzYsIDEyOCwgODQsIDY1LCA4NCwgODcsIDY5LCAKLSAgICA2OSwgMjA0LCA4NCwgNjUsIDg0LCA4NCwgNzksIDc5LCA2OSwgMTk2LCA4NCwgNjUsIDg0LCAxMjgsIDg0LCA2NSwgODIsIAotICAgIDEyOCwgODQsIDY1LCA4MCwgNjksIDgyLCAxMjgsIDg0LCA2NSwgODAsIDE5NywgODQsIDY1LCA4MCwgMTI4LCA4NCwgNjUsIAotICAgIDc5LCAxMjgsIDg0LCA2NSwgNzgsIDc4LCA2OSwgMTk2LCA4NCwgNjUsIDc4LCAxMjgsIDg0LCA2NSwgNzcsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODQsIDY1LCA3NywgMTI4LCA4NCwgNjUsIDc2LCA3NiwgMTI4LCA4NCwgNjUsIDc2LCAyMDQsIDg0LCA2NSwgCi0gICAgNzYsIDczLCA3OCwgNzEsIDEyOCwgODQsIDY1LCA3NiwgNzMsIDc4LCAxOTksIDg0LCA2NSwgNzYsIDY5LCA3OCwgODQsIDgzLCAKLSAgICAxMjgsIDg0LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA4NCwgNjUsIDc1LCA3MiwgNjUsIDc2LCA3NiwgODUsIDgzLCAxMjgsIAotICAgIDg0LCA2NSwgNzUsIDY5LCAxMjgsIDg0LCA2NSwgNzUsIDUyLCAxMjgsIDg0LCA2NSwgNzUsIDEyOCwgODQsIDY1LCA3MywgCi0gICAgODMsIDg5LCA3OSwgODUsIDEyOCwgODQsIDY1LCA3MywgNzYsIDc2LCA2OSwgODMsIDIxMSwgODQsIDY1LCA3MywgNzYsIAotICAgIDEyOCwgODQsIDY1LCA3MywgMjA0LCA4NCwgNjUsIDcyLCAxMjgsIDg0LCA2NSwgMjAwLCA4NCwgNjUsIDcxLCA2NiwgNjUsIAotICAgIDc4LCA4NywgMTkzLCA4NCwgNjUsIDcxLCA2NSwgNzYsIDc5LCAxOTksIDg0LCA2NSwgNzEsIDEyOCwgODQsIDY1LCA2NywgCi0gICAgNzUsIDEyOCwgODQsIDY1LCA2NywgMjAzLCA4NCwgNjUsIDY2LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4NCwgNjUsIDY2LCA3NiwgNjksIDEyOCwgODQsIDY1LCA2NiwgMTI4LCA4NCwgNjUsIDE5NCwgODQsIDY1LCA2NSwgNzYsIAotICAgIDg1LCA3NCwgMTkzLCA4NCwgNjUsIDY1LCA3MywgMTI4LCA4NCwgNjUsIDUwLCAxMjgsIDg0LCA2NSwgNDUsIDgyLCA3OSwgCi0gICAgNzYsIDEyOCwgODMsIDkwLCA5MCwgMTI4LCA4MywgOTAsIDg3LCA3MSwgMTI4LCA4MywgOTAsIDg3LCA2NSwgMTI4LCA4MywgCi0gICAgOTAsIDg1LCAxMjgsIDgzLCA5MCwgNzksIDEyOCwgODMsIDkwLCA3MywgMTI4LCA4MywgOTAsIDY5LCA2OSwgMTI4LCA4MywgCi0gICAgOTAsIDY5LCAxMjgsIDgzLCA5MCwgNjUsIDY1LCAxMjgsIDgzLCA5MCwgNjUsIDEyOCwgODMsIDkwLCAxMjgsIDgzLCA4OSwgCi0gICAgODgsIDEyOCwgODMsIDg5LCA4NCwgMTI4LCA4MywgODksIDgyLCA4OCwgMTI4LCA4MywgODksIDgyLCA3NywgNjUsIDg0LCAKLSAgICA3MywgNzUsIDczLCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgMTI4LCA4MywgODksIDgyLCAxMjgsIDgzLCA4OSwgODAsIAotICAgIDEyOCwgODMsIDg5LCA3OSwgODUsIDg3LCA2NSwgMTI4LCA4MywgODksIDc4LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MywgCi0gICAgODksIDc4LCA2OCwgNjksIDgzLCA3NywgNzksIDIxMSwgODMsIDg5LCA3OCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgODUsIAotICAgIDIxMSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgMTkzLCA4MywgODksIDc4LCA2NSwgNzAsIDczLCAxMjgsIDgzLCA4OSwgCi0gICAgNzcsIDc3LCA2OSwgODQsIDgyLCA4OSwgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgODMsIDg5LCAKLSAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NiwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU0LCAxMjgsIDgzLCA4OSwgCi0gICAgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA1MSwgMTI4LCAKLSAgICA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgCi0gICAgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKLSAgICA0NSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIAotICAgIDc2LCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTUsIDEyOCwgODMsIDg5LCA3NywgCi0gICAgNjYsIDc5LCA3NiwgNDUsIDUyLCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDUxLCAxMjgsIDgzLCAKLSAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA0OCwgCi0gICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCAKLSAgICA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIAotICAgIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgODksIDc3LCA2NiwgCi0gICAgNzksIDc2LCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDg5LCAKLSAgICA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTcsIDEyOCwgODMsIAotICAgIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDU0LCAKLSAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAotICAgIDUwLCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCi0gICAgNzYsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgODksIDc3LCAKLSAgICA2NiwgNzksIDc2LCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTYsIDEyOCwgCi0gICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIAotICAgIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCi0gICAgNDUsIDQ5LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCAKLSAgICA3OSwgNzYsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgODksIAotICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgMTI4LCA4MywgCi0gICAgODksIDc2LCA3OSwgODQsIDIwMSwgODMsIDg5LCA2NSwgMTI4LCA4MywgODksIDEyOCwgODMsIDg3LCA5MCwgMTI4LCA4MywgCi0gICAgODcsIDg1LCA3OCwgMTk5LCA4MywgODcsIDc5LCA4MiwgNjgsIDgzLCAxMjgsIDgzLCA4NywgNzksIDgyLCA2OCwgMTI4LCAKLSAgICA4MywgODcsIDc5LCA3OSwgMTI4LCA4MywgODcsIDc5LCAxMjgsIDgzLCA4NywgNzMsIDczLCAxMjgsIDgzLCA4NywgNzMsIAotICAgIDEyOCwgODMsIDg3LCA3MSwgMTI4LCA4MywgODcsIDY5LCA2OSwgODQsIDEyOCwgODMsIDg3LCA2NSwgODMsIDIwMCwgODMsIAotICAgIDg3LCA2NSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA4NywgMTI4LCA4MywgCi0gICAgODUsIDg4LCAxMjgsIDgzLCA4NSwgODQsIDEyOCwgODMsIDg1LCA4MywgODAsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCAKLSAgICA4MywgODUsIDgyLCA4OCwgMTI4LCA4MywgODUsIDgyLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIDg1LCA4MiwgODIsIAotICAgIDc5LCA4NSwgNzgsIDE5NiwgODMsIDg1LCA4MiwgNzAsIDY1LCA2NywgMTk3LCA4MywgODUsIDgyLCA2OSwgMTI4LCA4MywgCi0gICAgODUsIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDgzLCA4NSwgODIsIDU3LCAxMjgsIDgzLCA4NSwgODIsIDEyOCwgODMsIDg1LCAKLSAgICAyMTAsIDgzLCA4NSwgODAsIDgyLCA2NSwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgzLCA4NSwgODAsIDY5LCA4MiwgODYsIAotICAgIDczLCA4MywgNjksIDEyOCwgODMsIDg1LCA4MCwgNjksIDgyLCA4MywgNjksIDg0LCAxMjgsIDgzLCA4NSwgODAsIDY5LCA4MiwgCi0gICAgODMsIDY5LCAyMTIsIDgzLCA4NSwgODAsIDY5LCA4MiwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDgzLCA4NSwgODAsIDY5LCAKLSAgICA4MiwgNzMsIDc3LCA4MCwgNzksIDgzLCA2OSwgMTk2LCA4MywgODUsIDgwLCA2OSwgODIsIDcwLCA3MywgODgsIDY5LCAxOTYsIAotICAgIDgzLCA4NSwgODAsIDEyOCwgODMsIDg1LCA3OSwgODgsIDEyOCwgODMsIDg1LCA3OSwgODAsIDEyOCwgODMsIDg1LCA3OSwgCi0gICAgMTI4LCA4MywgODUsIDc4LCA3MSwgMTI4LCA4MywgODUsIDc4LCAxMjgsIDgzLCA4NSwgMjA2LCA4MywgODUsIDc3LCA3NywgCi0gICAgNjksIDgyLCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDg1LCA3NywgNzcsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNzcsIDY1LCA4MywgNzIsIDEyOCwgODMsIDg1LCA3NywgMTI4LCA4MywgODUsIAotICAgIDc1LCA4NSwgNzgsIDEyOCwgODMsIDg1LCA3NSwgODUsIDIwNiwgODMsIDg1LCA3NSwgODUsIDEyOCwgODMsIDg1LCA3NSwgCi0gICAgMjEzLCA4MywgODUsIDczLCA4NCwgNjUsIDY2LCA3NiwgNjksIDEyOCwgODMsIDg1LCA3MywgODQsIDEyOCwgODMsIDg1LCAKLSAgICA3MiwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNjgsIDUwLCAxMjgsIDgzLCA4NSwgNjgsIDEyOCwgODMsIDg1LCA2NywgNjcsIAotICAgIDY5LCA2OSwgNjgsIDgzLCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDY4LCAyMTEsIDgzLCA4NSwgNjcsIDY3LCA2OSwgCi0gICAgNjksIDY4LCAxMjgsIDgzLCA4NSwgNjcsIDY3LCA2OSwgNjksIDE5NiwgODMsIDg1LCA2NiwgODUsIDc4LCA3MywgODQsIAotICAgIDEyOCwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgODQsIDg1LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA4NSwgNjYsIDgzLCA4NCwgCi0gICAgNzMsIDg0LCA4NSwgODQsIDY5LCAxMjgsIDgzLCA4NSwgNjYsIDgzLCA4NCwgNzMsIDg0LCA4NSwgODQsIDE5NywgODMsIDg1LCAKLSAgICA2NiwgODMsIDY5LCA4NCwgMTI4LCA4MywgODUsIDY2LCA4MywgNjksIDIxMiwgODMsIDg1LCA2NiwgODMsIDY3LCA4MiwgNzMsIAotICAgIDgwLCAyMTIsIDgzLCA4NSwgNjYsIDgwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDgzLCAxMjgsIDgzLCA4NSwgNjYsIDc2LCA3MywgCi0gICAgNzgsIDY5LCA2NSwgMjEwLCA4MywgODUsIDY2LCA3NCwgNzksIDczLCA3OCwgNjksIDE5NiwgODMsIDg1LCA2NiwgNzQsIDY5LCAKLSAgICA2NywgODQsIDEyOCwgODMsIDg1LCA2NiwgNzMsIDg0LCA3OSwgMTI4LCA4MywgODUsIDY2LCA3MSwgODIsIDc5LCA4NSwgODAsIAotICAgIDEyOCwgODMsIDg1LCA2NiwgNzEsIDgyLCA3OSwgODUsIDIwOCwgODMsIDg1LCA2NSwgMTI4LCA4MywgMjEzLCA4MywgODQsIAotICAgIDg3LCA2NSwgMTI4LCA4MywgODQsIDg1LCA2OCwgODksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgODMsIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTcsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NSwgMTI4LCA4MywgODQsIAotICAgIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUzLCAxMjgsIDgzLCA4NCwgCi0gICAgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTEsIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDksIDEyOCwgODMsIAotICAgIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDEyOCwgCi0gICAgODMsIDg0LCA4MiwgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNzMsIAotICAgIDY4LCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCA3MiwgCi0gICAgNjksIDE5NiwgODMsIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCAKLSAgICA4MywgODQsIDgyLCA2NSwgODQsIDczLCA2NSwgMjA2LCA4MywgODQsIDgyLCA2NSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgODMsIAotICAgIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCAKLSAgICA3MiwgMjEyLCA4MywgODQsIDgyLCA2NSwgNzMsIDcwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MSwgNzEsIDczLCA4MywgNzcsIAotICAgIDY1LCA4NCwgNjUsIDEyOCwgODMsIDg0LCA3OSwgODYsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNzMsIDc4LCA3MSwgCi0gICAgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDY1LCA3MSwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDEyOCwgODMsIDg0LCAKLSAgICA3OSwgMjA4LCA4MywgODQsIDc5LCA3OCwgNjksIDEyOCwgODMsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDgzLCA4NCwgNzMsIAotICAgIDc3LCA3NywgNjksIDEyOCwgODMsIDg0LCA3MywgNzYsIDIwNCwgODMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg0LCA3MywgCi0gICAgNzEsIDc3LCA2NSwgMTI4LCA4MywgODQsIDY5LCA4MCwgMTI4LCA4MywgODQsIDY5LCA3NywgMTI4LCA4MywgODQsIDY5LCAKLSAgICAyMDUsIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIAotICAgIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCA4MiwgCi0gICAgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAyMTIsIDgzLCAKLSAgICA4NCwgNjUsIDgyLCA3NSwgMTI4LCA4MywgODQsIDY1LCA4MiwgMTI4LCA4MywgODQsIDY1LCAyMTAsIDgzLCA4NCwgNjUsIAotICAgIDc4LCA2OCwgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCA2OCwgNjUsIDgyLCAxOTYsIDgzLCA4NCwgCi0gICAgNjUsIDc4LCA2OCwgMTI4LCA4MywgODQsIDY1LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3NiwgNzYsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgODMsIDg0LCA2NSwgNzAsIDcwLCAxMjgsIDgzLCA4NCwgNjUsIDcwLCAxOTgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCi0gICAgNjUsIDg0LCA3OSwgMTI4LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzMsIDgzLCA4MywgNzMsIDc3LCA3OSwgMTI4LCAKLSAgICA4MywgODQsIDUwLCAxMjgsIDgzLCA4MywgODksIDg4LCAxMjgsIDgzLCA4MywgODksIDg0LCAxMjgsIDgzLCA4MywgODksIAotICAgIDgyLCA4OCwgMTI4LCA4MywgODMsIDg5LCA4MiwgMTI4LCA4MywgODMsIDg5LCA4MCwgMTI4LCA4MywgODMsIDg5LCAxMjgsIAotICAgIDgzLCA4MywgODUsIDg4LCAxMjgsIDgzLCA4MywgODUsIDg0LCAxMjgsIDgzLCA4MywgODUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNzksIDg4LCAxMjgsIDgzLCA4MywgNzksIDg0LCAxMjgsIDgzLCA4MywgNzksIDgwLCAxMjgsIDgzLCA4MywgNzksIDEyOCwgCi0gICAgODMsIDgzLCA3MywgODgsIDEyOCwgODMsIDgzLCA3MywgODQsIDEyOCwgODMsIDgzLCA3MywgODAsIDEyOCwgODMsIDgzLCAKLSAgICA3MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNzMsIDY5LCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgMTI4LCA4MywgODMsIAotICAgIDczLCAxMjgsIDgzLCA4MywgNjksIDg4LCAxMjgsIDgzLCA4MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNjksIDY5LCAxMjgsIAotICAgIDgzLCA4MywgNjUsIDg4LCAxMjgsIDgzLCA4MywgNjUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDgwLCAxMjgsIDgzLCA4MywgCi0gICAgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIAotICAgIDgzLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDczLCA2OSwgCi0gICAgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCAKLSAgICA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCA2NSwgCi0gICAgMTI4LCA4MywgODMsIDY1LCA2NSwgMTI4LCA4MywgODMsIDY1LCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgODEsIDg1LCA3MywgCi0gICAgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCA3MSwgNzYsIAotICAgIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAKLSAgICAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIDgzLCA4MCwgODUsIDc4LCA3MSwgMjExLCA4MywgODAsIDgyLCA3OSwgODUsIAotICAgIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgODMsIDgwLCA4MiwgNjksIDY3LCA3MiwgNzEsIDY5LCA4MywgNjUsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg0LCAxMjgsIDgzLCAKLSAgICA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3MywgODIsIAotICAgIDczLCA4NCwgMTI4LCA4MywgODAsIDczLCA4MiwgNzMsIDIxMiwgODMsIDgwLCA3MywgODIsIDY1LCA3OCwgODQsIDEyOCwgCi0gICAgODMsIDgwLCA3MywgODIsIDY1LCA3NiwgMTI4LCA4MywgODAsIDczLCA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCAKLSAgICA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIDIwNCwgODMsIDgwLCA2OSwgNjksIDY3LCA3MiwgCi0gICAgMTI4LCA4MywgODAsIDY5LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCAKLSAgICA2NSwgODQsIDcyLCA3MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgMTI4LCA4MywgODAsIDY1LCA2OCwgCi0gICAgMTk3LCA4MywgODAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgzLCA4MCwgMTI4LCA4MywgNzksIDg3LCA3MywgNzYsIDIwNywgCi0gICAgODMsIDc5LCA4NywgMTI4LCA4MywgNzksIDg1LCA4NCwgNzIsIDQ1LCA4MywgNzYsIDY1LCA4NiwgNjksIDIxNywgODMsIDc5LCAKLSAgICA4NSwgODQsIDIwMCwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MywgNzksIDg1LCA3OCwgNjgsIDEyOCwgODMsIAotICAgIDc5LCA4NSwgNzgsIDE5NiwgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDc5LCAxMjgsIDgzLCA3OSwgNzgsIDEyOCwgODMsIAotICAgIDc5LCA3NiwgNzMsIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgMjExLCA4MywgNzksIDcxLCA2OCwgCi0gICAgNzMsIDY1LCAyMDYsIDgzLCA3OSwgNzAsIDg0LCA4NywgNjUsIDgyLCA2OSwgNDUsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDgzLCA3OSwgNzAsIDIxMiwgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAxMjgsIAorICAgIDc5LCA3NiwgNzYsIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAKKyAgICAyMDEsIDg0LCA4MiwgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIAorICAgIDEyOCwgODQsIDgyLCA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4NCwgODIsIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIAorICAgIDEyOCwgODQsIDgyLCA3MywgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgCisgICAgNzMsIDgwLCA3NiwgMTk3LCA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCAKKyAgICA4NCwgODIsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIAorICAgIDgyLCA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAKKyAgICAxMjgsIDg0LCA4MiwgNzMsIDcwLCA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIAorICAgIDEyOCwgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIAorICAgIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIAorICAgIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAxMjgsIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgCisgICAgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIDc4LCA2OCwgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCAKKyAgICA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIAorICAgIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAKKyAgICAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIAorICAgIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAKKyAgICAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIAorICAgIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIDgzLCAKKyAgICA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgODQsIAorICAgIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCA2NSwgCisgICAgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIDcwLCAKKyAgICA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgODIsIAorICAgIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAxMjgsIAorICAgIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIDEyOCwgCisgICAgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDg0LCAKKyAgICA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIDgxLCAxMjgsIAorICAgIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgCisgICAgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgNzksIDc4LCAKKyAgICAxMjgsIDg0LCA3OSwgNzksIDEyOCwgODQsIDc5LCA3OCwgNzksIDgzLCAxMjgsIDg0LCA3OSwgNzgsIDcxLCA4NSwgNjksIAorICAgIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCAxOTcsIDg0LCA3OSwgNzgsIDcxLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgCisgICAgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MywgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCAKKyAgICA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIAorICAgIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgCisgICAgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIDc5LCAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCAKKyAgICA3NSwgODksIDIwNywgODQsIDc5LCA3MywgNzYsIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIAorICAgIDEyOCwgODQsIDc5LCA2OCwgMjA3LCA4NCwgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgCisgICAgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIDEyOCwgODQsIDc2LCA4NiwgMTI4LCA4NCwgNzYsIDg1LCAxMjgsIDg0LCA3NiwgCisgICAgNzksIDEyOCwgODQsIDc2LCA3MywgMTI4LCA4NCwgNzYsIDcyLCA4NywgNjksIDEyOCwgODQsIDc2LCA3MiwgODUsIDEyOCwgCisgICAgODQsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCAKKyAgICA3NiwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA2OSwgMTI4LCA4NCwgNzYsIDcyLCA2NSwgMTI4LCA4NCwgNzYsIAorICAgIDY5LCA2OSwgMTI4LCA4NCwgNzYsIDY1LCAxMjgsIDg0LCA3NCwgNjksIDEyOCwgODQsIDczLCA4OCwgMTI4LCA4NCwgNzMsIAorICAgIDg3LCA3OCwgMTI4LCA4NCwgNzMsIDg3LCA2NSwgMjE4LCA4NCwgNzMsIDg0LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA4NCwgCisgICAgNzMsIDg0LCA3NiwgNzksIDEyOCwgODQsIDczLCA4NCwgMTkzLCA4NCwgNzMsIDg0LCAxMjgsIDg0LCA3MywgODIsIDg5LCAKKyAgICA2NSwgNzUsIDEyOCwgODQsIDczLCA4MiwgODQsIDE5MywgODQsIDczLCA4MiwgNzksIDc4LCA3MywgNjUsIDIwNiwgODQsIAorICAgIDczLCA4MiwgNjksIDE5NiwgODQsIDczLCA4MiwgMTI4LCA4NCwgNzMsIDIxMCwgODQsIDczLCA4MCwgODAsIDczLCAxMjgsIAorICAgIDg0LCA3MywgODAsIDY5LCA3MiwgNjUsIDEyOCwgODQsIDczLCA4MCwgMTI4LCA4NCwgNzMsIDIwOCwgODQsIDczLCA3OCwgCisgICAgODksIDEyOCwgODQsIDczLCA3OCwgMjE3LCA4NCwgNzMsIDc4LCA3OCwgNjksIDEyOCwgODQsIDczLCA3OCwgNjcsIDg0LCAKKyAgICA4NSwgODIsIDY5LCAxMjgsIDg0LCA3MywgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCA3MywgNzcsIDY5LCA4MywgCisgICAgMTI4LCA4NCwgNzMsIDc3LCA2OSwgMjEwLCA4NCwgNzMsIDc3LCA2OSwgMTI4LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgCisgICAgODQsIDczLCA3NiwgNjgsIDE5NywgODQsIDczLCA3NiwgMTI4LCA4NCwgNzMsIDIwNCwgODQsIDczLCA3NSwgNjksIDg1LCAKKyAgICA4NCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIAorICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgCisgICAgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4NCwgNzMsIDc1LCA2OSwgODUsIAorICAgIDg0LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCAxMjgsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODQsIAorICAgIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDg0LCA3MywgNzUsIDY5LCAKKyAgICA4NSwgODQsIDEyOCwgODQsIDczLCA3NSwgNjksIDg1LCAyMTIsIDg0LCA3MywgNzMsIDEyOCwgODQsIDczLCA3MSwgNzIsIAorICAgIDg0LCA3NiwgODksIDQ1LCA2NywgNzYsIDc5LCA4MywgNjksIDE5NiwgODQsIDczLCA3MSwgNzIsIDIxMiwgODQsIDczLCA3MSwgCisgICAgNjksIDgyLCAxMjgsIDg0LCA3MywgNzEsIDY5LCAyMTAsIDg0LCA3MywgNzAsIDczLCA3OCwgNjUsIDcxLCAyMDAsIDg0LCAKKyAgICA3MywgNjksIDg4LCAxMjgsIDg0LCA3MywgNjksIDgwLCAxMjgsIDg0LCA3MywgMTk3LCA4NCwgNzMsIDY3LCA3NSwgNjksIAorICAgIDg0LCAxMjgsIDg0LCA3MywgNjcsIDc1LCAxMjgsIDg0LCA3MywgNjcsIDIwMywgODQsIDczLCA2NSwgODIsIDY1LCAxMjgsIAorICAgIDg0LCA3MiwgOTAsIDEyOCwgODQsIDcyLCA4OSwgNzksIDc5LCAyMDUsIDg0LCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4NCwgCisgICAgNzIsIDg3LCA3OSwgMTI4LCA4NCwgNzIsIDg3LCA3MywgNzMsIDEyOCwgODQsIDcyLCA4NywgNzMsIDEyOCwgODQsIDcyLCAKKyAgICA4NywgNjksIDY5LCAxMjgsIDg0LCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4NCwgNzIsIDg3LCA2NSwgMTI4LCA4NCwgNzIsIAorICAgIDg1LCA4MiwgMjExLCA4NCwgNzIsIDg1LCA4MiwgNzMsIDgzLCA2NSwgMjE4LCA4NCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgCisgICAgODQsIDcyLCA4NSwgNzgsIDY4LCA2OSwgODIsIDgzLCA4NCwgNzksIDgyLCA3NywgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIAorICAgIDY5LCA4MiwgMTI4LCA4NCwgNzIsIDg1LCA3OCwgNjgsIDY5LCAyMTAsIDg0LCA3MiwgODUsIDc3LCA2NiwgMjExLCA4NCwgCisgICAgNzIsIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4NCwgNzIsIDgyLCAKKyAgICA3OSwgODUsIDcxLCAyMDAsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgODQsIAorICAgIDcyLCA4MiwgNjksIDY5LCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDg0LCA3MiwgODIsIDY5LCA2OSwgNDUsIDc2LCAKKyAgICA3MywgNzgsIDE5NywgODQsIDcyLCA4MiwgNjksIDY5LCA0NSwgMTk2LCA4NCwgNzIsIDgyLCA2OSwgNjUsIDY4LCAxMjgsIAorICAgIDg0LCA3MiwgNzksIDg1LCA4MywgNjUsIDc4LCA2OCwgMjExLCA4NCwgNzIsIDc5LCA4NSwgODMsIDY1LCA3OCwgNjgsIDEyOCwgCisgICAgODQsIDcyLCA3OSwgODUsIDgzLCA2NSwgNzgsIDE5NiwgODQsIDcyLCA3OSwgODUsIDcxLCA3MiwgMjEyLCA4NCwgNzIsIDc5LCAKKyAgICA4NSwgMTI4LCA4NCwgNzIsIDc5LCA4MiwgNzgsIDEyOCwgODQsIDcyLCA3OSwgODIsIDIwNiwgODQsIDcyLCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDg0LCA3MiwgNzksIDY1LCAxMjgsIDg0LCA3MiwgMjA3LCA4NCwgNzIsIDczLCA4NSwgODQsIDcyLCAxMjgsIAorICAgIDg0LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCA0NSwgODMsIDY5LCA2NywgNzksIDc4LCAKKyAgICAxOTYsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDQ1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCA4NCwgCisgICAgMjE3LCA4NCwgNzIsIDczLCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgODQsIDcyLCA3MywgODIsIDg0LCA2OSwgNjksIAorICAgIDIwNiwgODQsIDcyLCA3MywgODIsIDY4LCA4MywgMTI4LCA4NCwgNzIsIDczLCA4MiwgNjgsIDIxMSwgODQsIDcyLCA3MywgCisgICAgODIsIDY4LCAxMjgsIDg0LCA3MiwgNzMsIDgyLCAxOTYsIDg0LCA3MiwgNzMsIDIwNiwgODQsIDcyLCA3MywgNzMsIDEyOCwgCisgICAgODQsIDcyLCA3MywgNzEsIDcyLCAxMjgsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDIwMCwgODQsIDcyLCA2OSwgODksIAorICAgIDEyOCwgODQsIDcyLCA2OSwgODQsIDcyLCA2OSwgMTI4LCA4NCwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgODQsIDcyLCA2OSwgCisgICAgODQsIDY1LCAxMjgsIDg0LCA3MiwgNjksIDg0LCAxOTMsIDg0LCA3MiwgNjksIDgzLCA4MCwgNzMsIDY1LCAyMDYsIDg0LCAKKyAgICA3MiwgNjksIDgzLCA2OSwgNzksIDgzLCAxMjgsIDg0LCA3MiwgNjksIDgzLCA2OSwgNzksIDIxMSwgODQsIDcyLCA2OSwgCisgICAgMjExLCA4NCwgNzIsIDY5LCA4MiwgNzcsIDc5LCA2OCwgODksIDc4LCA2NSwgNzcsIDczLCA2NywgMTI4LCA4NCwgNzIsIDY5LCAKKyAgICA4MiwgNjksIDcwLCA3OSwgODIsIDY5LCAxMjgsIDg0LCA3MiwgNjksIDgyLCAxOTcsIDg0LCA3MiwgNjksIDIwNiwgODQsIAorICAgIDcyLCA2OSwgNzcsIDY1LCA4NCwgNzMsIDgzLCA3NywgNzksIDIxMSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDg0LCA3MiwgCisgICAgNjksIDc3LCAxOTMsIDg0LCA3MiwgNjksIDcyLCAxMjgsIDg0LCA3MiwgNjksIDIwMCwgODQsIDcyLCAxOTcsIDg0LCA3MiwgCisgICAgNjUsIDg3LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCA4NCwgNzIsIDY1LCA3NSwgNzIsIDY1LCA4NCwgMTI4LCA4NCwgNzIsIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDIwNiwgODQsIDcyLCA2NSwgNzYsIAorICAgIDEyOCwgODQsIDcyLCA2NSwgMjA0LCA4NCwgNzIsIDY1LCA3MiwgNjUsIDc4LCAxMjgsIDg0LCA3MiwgNjUsIDY1LCA3OCwgCisgICAgMTkzLCA4NCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDg0LCA3MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODQsIDY5LCAKKyAgICA4OCwgODQsIDEyOCwgODQsIDY5LCA4OCwgMTI4LCA4NCwgNjksIDg2LCA3MywgODIsIDEyOCwgODQsIDY5LCA4NSwgODQsIAorICAgIDY5LCA4NSwgODgsIDEyOCwgODQsIDY5LCA4NSwgODQsIDY5LCA4NSwgODcsIDY5LCA3OCwgMTI4LCA4NCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA4NCwgNjksIDg1LCA3OCwgMTI4LCA4NCwgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDg0LCA2OSwgODUsIDY1LCAKKyAgICA2OSwgNzgsIDEyOCwgODQsIDY5LCA4NSwgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDgzLCA3MywgNzcsIDc5LCA4NSwgCisgICAgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA2OSwgODQsIDgyLCA2NSwgODAsIDc2LCAKKyAgICA3MywgMTI4LCA4NCwgNjksIDg0LCA4MiwgNjUsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgODQsIDY5LCA4NCwgNzIsIAorICAgIDEyOCwgODQsIDY5LCA4NCwgMjAwLCA4NCwgNjksIDg0LCA2NSwgODIsIDg0LCA3OSwgMjExLCA4NCwgNjksIDg0LCA2NSwgCisgICAgODIsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgNjksIDg0LCAxMjgsIDg0LCA2OSwgMjEyLCAKKyAgICA4NCwgNjksIDgzLCA4MywgNjksIDgyLCA2NSwgMTI4LCA4NCwgNjksIDgzLCA4MywgNjksIDgyLCAxOTMsIDg0LCA2OSwgODMsIAorICAgIDgzLCA2NSwgODIsIDc5LCAyMDYsIDg0LCA2OSwgODMsIDIwMCwgODQsIDY5LCA4MiwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgCisgICAgODIsIDEyOCwgODQsIDY5LCA4MCwgMTI4LCA4NCwgNjksIDc4LCA4NSwgODQsIDc5LCAxMjgsIDg0LCA2OSwgNzgsIDg1LCAKKyAgICAxMjgsIDg0LCA2OSwgNzgsIDIxMywgODQsIDY5LCA3OCwgODQsIDcyLCAxMjgsIDg0LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCAKKyAgICA2OSwgNzgsIDIxMSwgODQsIDY5LCA3OCwgNzgsIDczLCAyMTEsIDg0LCA2OSwgNzgsIDcxLCAxOTcsIDg0LCA2OSwgNzgsIAorICAgIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDg0LCA2OSwgNzgsIDEyOCwgODQsIDY5LCAyMDYsIDg0LCA2OSwgCisgICAgNzcsIDgwLCA4NSwgMjExLCA4NCwgNjksIDc2LCA4NSwgMTI4LCA4NCwgNjksIDc2LCA3OSwgODUsIDIxMSwgODQsIDY5LCAKKyAgICA3NiwgNzYsIDY5LCAyMTAsIDg0LCA2OSwgNzYsIDczLCA4MywgNzIsIDE5MywgODQsIDY5LCA3NiwgNjksIDg2LCA3MywgODMsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgODQsIDY5LCA3NiwgNjksIDgzLCA2NywgNzksIDgwLCA2OSwgMTI4LCA4NCwgNjksIDc2LCA2OSwgCisgICAgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA2OSwgNzYsIDY5LCA4MCwgNzIsIDc5LCA3OCwgMTk3LCA4NCwgNjksIDc2LCAKKyAgICA2OSwgNzMsIDY1LCAxMjgsIDg0LCA2OSwgNzMsIDg3LCA4MywgMTI4LCA4NCwgNjksIDcxLCA2OSwgNzIsIDEyOCwgODQsIAorICAgIDY5LCA2OSwgNjksIDY5LCAxMjgsIDg0LCA2OSwgMTk3LCA4NCwgNjksIDY4LCA4NSwgNzgsIDcxLCAxMjgsIDg0LCA2OSwgCisgICAgNjUsIDgyLCAyMTEsIDg0LCA2OSwgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCAKKyAgICA4NCwgNjksIDY1LCA4MiwgNjgsIDgyLCA3OSwgODAsIDQ1LCA4MywgNzIsIDY1LCA3OCwgNzUsIDY5LCAxOTYsIDg0LCA2OSwgCisgICAgNjUsIDgyLCA2OCwgODIsIDc5LCA4MCwgNDUsIDY2LCA2NSwgODIsIDY2LCA2OSwgMTk2LCA4NCwgNjksIDY1LCA4MiwgNDUsIAorICAgIDc5LCA3MCwgMTk4LCA4NCwgNjksIDY1LCA2NywgODUsIDIwOCwgODQsIDY5LCA0NSwgODUsIDEyOCwgODQsIDY3LCA3MiwgCisgICAgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDY3LCA3MiwgNjksIDcyLCA2OSwgMjAwLCA4NCwgNjcsIDcyLCA2OSwgNzIsIAorICAgIDEyOCwgODQsIDY3LCA3MiwgNjksIDIwMCwgODQsIDY3LCA3MiwgNjksIDEyOCwgODQsIDE5NSwgODQsIDY1LCA4OSwgMTI4LCAKKyAgICA4NCwgNjUsIDg4LCA3MywgMTI4LCA4NCwgNjUsIDg4LCAxMjgsIDg0LCA2NSwgODcsIDY5LCA3NiwgNzYsIDY5LCA3NywgNjksIAorICAgIDIxMiwgODQsIDY1LCA4NywgNjUsIDEyOCwgODQsIDY1LCA4NywgMTI4LCA4NCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgCisgICAgNzMsIDEyOCwgODQsIDY1LCA4NiwgMTI4LCA4NCwgNjUsIDIxNCwgODQsIDY1LCA4NSwgODIsIDg1LCA4MywgMTI4LCA4NCwgCisgICAgNjUsIDg1LCAxMjgsIDg0LCA2NSwgMjEzLCA4NCwgNjUsIDg0LCA4NywgNjksIDY5LCA3NiwgMTI4LCA4NCwgNjUsIDg0LCAKKyAgICA4NywgNjksIDY5LCAyMDQsIDg0LCA2NSwgODQsIDg0LCA3OSwgNzksIDY5LCAxOTYsIDg0LCA2NSwgODQsIDEyOCwgODQsIAorICAgIDY1LCA4MiwgODUsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDgyLCA4NCwgNjUsIDgyLCA0NSwgNTAsIDEyOCwgODQsIDY1LCA4MiwgCisgICAgODQsIDY1LCA4MiwgMTI4LCA4NCwgNjUsIDgxLCAxMjgsIDg0LCA2NSwgODAsIDY5LCA4MiwgMTI4LCA4NCwgNjUsIDgwLCAKKyAgICAxOTcsIDg0LCA2NSwgODAsIDEyOCwgODQsIDY1LCA3OSwgMTI4LCA4NCwgNjUsIDc4LCA3OCwgNjksIDE5NiwgODQsIDY1LCAKKyAgICA3OCwgNzEsIDY5LCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4NCwgNjUsIDc4LCAxOTksIDg0LCA2NSwgNzgsIDY1LCA2NiwgNjUsIAorICAgIDg0LCAxOTMsIDg0LCA2NSwgNzgsIDEyOCwgODQsIDY1LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA4NCwgNjUsIDc3LCAxMjgsIAorICAgIDg0LCA2NSwgNzYsIDc2LCAxMjgsIDg0LCA2NSwgNzYsIDIwNCwgODQsIDY1LCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4NCwgCisgICAgNjUsIDc2LCA3MywgNzgsIDE5OSwgODQsIDY1LCA3NiwgNjksIDc4LCA4NCwgODMsIDEyOCwgODQsIDY1LCA3NiwgNjksIDc4LCAKKyAgICAyMTIsIDg0LCA2NSwgNzUsIDcyLCA2NSwgNzYsIDc2LCA4NSwgODMsIDEyOCwgODQsIDY1LCA3NSwgNjksIDEyOCwgODQsIAorICAgIDY1LCA3NSwgNTIsIDEyOCwgODQsIDY1LCA3NSwgMTI4LCA4NCwgNjUsIDczLCA4MywgODksIDc5LCA4NSwgMTI4LCA4NCwgCisgICAgNjUsIDczLCA3NiwgNzYsIDY5LCA4MywgMjExLCA4NCwgNjUsIDczLCA3NiwgMTI4LCA4NCwgNjUsIDczLCAyMDQsIDg0LCAKKyAgICA2NSwgNzIsIDEyOCwgODQsIDY1LCAyMDAsIDg0LCA2NSwgNzEsIDY2LCA2NSwgNzgsIDg3LCAxOTMsIDg0LCA2NSwgNzEsIAorICAgIDY1LCA3NiwgNzksIDE5OSwgODQsIDY1LCA3MSwgMTI4LCA4NCwgNjUsIDY5LCAyMDYsIDg0LCA2NSwgNjcsIDc1LCAxMjgsIAorICAgIDg0LCA2NSwgNjcsIDIwMywgODQsIDY1LCA2NiwgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODQsIDY1LCA2NiwgCisgICAgODMsIDEyOCwgODQsIDY1LCA2NiwgNzYsIDY5LCAxMjgsIDg0LCA2NSwgNjYsIDEyOCwgODQsIDY1LCAxOTQsIDg0LCA2NSwgCisgICAgNjUsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDg0LCA2NSwgNjUsIDgxLCAxMjgsIDg0LCA2NSwgNjUsIDc3LCAxMjgsIDg0LCAKKyAgICA2NSwgNjUsIDc2LCA4NSwgNzQsIDE5MywgODQsIDY1LCA2NSwgNzMsIDEyOCwgODQsIDY1LCA2NSwgNzAsIDEyOCwgODQsIAorICAgIDY1LCA1MCwgMTI4LCA4NCwgNjUsIDQ1LCA4MiwgNzksIDc2LCAxMjgsIDg0LCA0OCwgNTEsIDU0LCAxMjgsIDg0LCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDg0LCA0OCwgNTEsIDUyLCAxMjgsIDg0LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA4NCwgNDgsIDUxLCAKKyAgICA1MSwgMTI4LCA4NCwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgODQsIDQ4LCA1MSwgNTAsIDEyOCwgODQsIDQ4LCA1MSwgNDksIAorICAgIDEyOCwgODQsIDQ4LCA1MSwgNDgsIDEyOCwgODQsIDQ4LCA1MCwgNTcsIDEyOCwgODQsIDQ4LCA1MCwgNTYsIDEyOCwgODQsIAorICAgIDQ4LCA1MCwgNTUsIDEyOCwgODQsIDQ4LCA1MCwgNTQsIDEyOCwgODQsIDQ4LCA1MCwgNTMsIDEyOCwgODQsIDQ4LCA1MCwgCisgICAgNTIsIDEyOCwgODQsIDQ4LCA1MCwgNTEsIDEyOCwgODQsIDQ4LCA1MCwgNTAsIDEyOCwgODQsIDQ4LCA1MCwgNDksIDEyOCwgCisgICAgODQsIDQ4LCA1MCwgNDgsIDEyOCwgODQsIDQ4LCA0OSwgNTcsIDEyOCwgODQsIDQ4LCA0OSwgNTYsIDEyOCwgODQsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgODQsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDg0LCA0OCwgNDksIDU0LCAxMjgsIDg0LCA0OCwgNDksIAorICAgIDUzLCAxMjgsIDg0LCA0OCwgNDksIDUyLCAxMjgsIDg0LCA0OCwgNDksIDUxLCAxMjgsIDg0LCA0OCwgNDksIDUwLCAxMjgsIAorICAgIDg0LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA4NCwgNDgsIDQ5LCA0OSwgMTI4LCA4NCwgNDgsIDQ5LCA0OCwgMTI4LCA4NCwgCisgICAgNDgsIDQ4LCA1NywgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTcsIDEyOCwgODQsIDQ4LCA0OCwgNTYsIDY1LCAxMjgsIDg0LCAKKyAgICA0OCwgNDgsIDU2LCAxMjgsIDg0LCA0OCwgNDgsIDU1LCA2NSwgMTI4LCA4NCwgNDgsIDQ4LCA1NSwgMTI4LCA4NCwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA4NCwgNDgsIDQ4LCA1MywgMTI4LCA4NCwgNDgsIDQ4LCA1MiwgMTI4LCA4NCwgNDgsIDQ4LCA1MSwgCisgICAgNjUsIDEyOCwgODQsIDQ4LCA0OCwgNTEsIDEyOCwgODQsIDQ4LCA0OCwgNTAsIDEyOCwgODQsIDQ4LCA0OCwgNDksIDEyOCwgCisgICAgODQsIDQ1LCA4MywgNzIsIDczLCA4MiwgODQsIDEyOCwgODMsIDkwLCA5MCwgMTI4LCA4MywgOTAsIDg3LCA3MSwgMTI4LCAKKyAgICA4MywgOTAsIDg3LCA2NSwgMTI4LCA4MywgOTAsIDg1LCAxMjgsIDgzLCA5MCwgNzksIDEyOCwgODMsIDkwLCA3MywgMTI4LCAKKyAgICA4MywgOTAsIDY5LCA2OSwgMTI4LCA4MywgOTAsIDY5LCAxMjgsIDgzLCA5MCwgNjUsIDY1LCAxMjgsIDgzLCA5MCwgNjUsIAorICAgIDEyOCwgODMsIDkwLCAxMjgsIDgzLCA4OSwgODgsIDEyOCwgODMsIDg5LCA4NCwgMTI4LCA4MywgODksIDgyLCA4OCwgMTI4LCAKKyAgICA4MywgODksIDgyLCA3NywgNjUsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgzLCA4OSwgODIsIDc3LCA2NSwgMTI4LCA4MywgODksIAorICAgIDgyLCA3MywgNzgsIDcxLCA2OSwgMTI4LCA4MywgODksIDgyLCAxMjgsIDgzLCA4OSwgODAsIDEyOCwgODMsIDg5LCA3OSwgCisgICAgODUsIDg3LCA2NSwgMTI4LCA4MywgODksIDc4LCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MywgODksIDc4LCA2OCwgNjksIDgzLCAKKyAgICA3NywgNzksIDIxMSwgODMsIDg5LCA3OCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgODUsIDIxMSwgODMsIDg5LCA3OCwgNjUsIAorICAgIDcxLCA3NywgMTkzLCA4MywgODksIDc4LCA2NSwgNzAsIDczLCAxMjgsIDgzLCA4OSwgNzcsIDc3LCA2OSwgODQsIDgyLCA4OSwgCisgICAgMTI4LCA4MywgODksIDc3LCA3NywgNjksIDg0LCA4MiwgNzMsIDE5NSwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgODMsIAorICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1NiwgCisgICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDU0LCAKKyAgICAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIAorICAgIDUzLCA1MSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTMsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgCisgICAgNzYsIDQ1LCA1MywgNDksIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgODksIDc3LCAKKyAgICA2NiwgNzksIDc2LCA0NSwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1NywgMTI4LCA4MywgODksIAorICAgIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTUsIDEyOCwgCisgICAgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUyLCA1MywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIAorICAgIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MiwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgCisgICAgNDUsIDUyLCA0OCwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTIsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCAKKyAgICA3NiwgNDUsIDUxLCA1NywgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA4OSwgNzcsIAorICAgIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCA1NCwgMTI4LCA4MywgCisgICAgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MSwgNDgsIAorICAgIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUxLCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgCisgICAgNTcsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCAKKyAgICA0NSwgNTAsIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTMsIDEyOCwgODMsIDg5LCA3NywgNjYsIAorICAgIDc5LCA3NiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA4OSwgCisgICAgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDUwLCA0OSwgMTI4LCAKKyAgICA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA1MCwgCisgICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDU3LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKKyAgICA0OSwgNTYsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIAorICAgIDc2LCA0NSwgNDksIDU0LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTMsIDEyOCwgODMsIDg5LCA3NywgCisgICAgNjYsIDc5LCA3NiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDUxLCAxMjgsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCA0OSwgNTAsIDEyOCwgODMsIDg5LCA3NywgNjYsIDc5LCA3NiwgNDUsIDQ5LCA0OSwgCisgICAgMTI4LCA4MywgODksIDc3LCA2NiwgNzksIDc2LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4OSwgNzcsIDY2LCA3OSwgNzYsIDQ1LCAKKyAgICA0OSwgMTI4LCA4MywgODksIDc2LCA3OSwgODQsIDIwMSwgODMsIDg5LCA2NSwgMTI4LCA4MywgODksIDEyOCwgODMsIDg3LCAKKyAgICA5MCwgMTI4LCA4MywgODcsIDg1LCA3OCwgMTk5LCA4MywgODcsIDc5LCA4MiwgNjgsIDgzLCAxMjgsIDgzLCA4NywgNzksIAorICAgIDgyLCA2OCwgMTI4LCA4MywgODcsIDc5LCA3OSwgMTI4LCA4MywgODcsIDc5LCAxMjgsIDgzLCA4NywgNzMsIDgyLCAyMDQsIAorICAgIDgzLCA4NywgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA4MywgODcsIDczLCA3NywgNzcsIDY5LCA4MiwgMTI4LCA4MywgCisgICAgODcsIDczLCA3MywgMTI4LCA4MywgODcsIDczLCAxMjgsIDgzLCA4NywgNzEsIDEyOCwgODMsIDg3LCA2OSwgNjksIDg0LCAKKyAgICAxMjgsIDgzLCA4NywgNjksIDY5LCAyMTIsIDgzLCA4NywgNjksIDY1LCA4NCwgMTI4LCA4MywgODcsIDY5LCA2NSwgMjEyLCAKKyAgICA4MywgODcsIDY1LCA4MywgMjAwLCA4MywgODcsIDY1LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDg3LCAxMjgsIDgzLCA4NiwgNjUsIDgzLCA4NCwgMjAxLCA4MywgODYsIDY1LCA4MiwgNzMsIDg0LCA2NSwgCisgICAgMTI4LCA4MywgODYsIDY1LCA4MiwgNzMsIDg0LCAxOTMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDg1LCA4NSwgMTI4LCA4MywgCisgICAgODUsIDg0LCAxMjgsIDgzLCA4NSwgODMsIDgwLCA2OSwgNzgsIDgzLCA3MywgNzksIDIwNiwgODMsIDg1LCA4MywgNzIsIDczLCAKKyAgICAxMjgsIDgzLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA4NSwgODIsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MywgODUsIAorICAgIDgyLCA4MiwgNzksIDg1LCA3OCwgMTk2LCA4MywgODUsIDgyLCA3MCwgNjksIDgyLCAxMjgsIDgzLCA4NSwgODIsIDcwLCA2NSwgCisgICAgNjcsIDE5NywgODMsIDg1LCA4MiwgNjksIDEyOCwgODMsIDg1LCA4MiwgNjUsIDc4LCA3MSwgMTI4LCA4MywgODUsIDgyLCAKKyAgICA1NywgMTI4LCA4MywgODUsIDgyLCAxMjgsIDgzLCA4NSwgMjEwLCA4MywgODUsIDgwLCA4MiwgNjUsIDc2LCA3MywgNzgsIAorICAgIDY5LCA2NSwgMjEwLCA4MywgODUsIDgwLCA2OSwgODIsIDg2LCA3MywgODMsIDY5LCAxMjgsIDgzLCA4NSwgODAsIDY5LCA4MiwgCisgICAgODMsIDY5LCA4NCwgMTI4LCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCA2OSwgMjEyLCA4MywgODUsIDgwLCA2OSwgODIsIDgzLCAKKyAgICA2NywgODIsIDczLCA4MCwgMjEyLCA4MywgODUsIDgwLCA2OSwgODIsIDczLCA3NywgODAsIDc5LCA4MywgNjksIDE5NiwgODMsIAorICAgIDg1LCA4MCwgNjksIDgyLCA3MCwgNzMsIDg4LCA2OSwgMTk2LCA4MywgODUsIDgwLCA2OSwgMjEwLCA4MywgODUsIDgwLCAKKyAgICAxMjgsIDgzLCA4NSwgNzksIDg4LCAxMjgsIDgzLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA4NSwgNzksIDEyOCwgODMsIDg1LCAKKyAgICA3OCwgODMsIDY5LCAyMTIsIDgzLCA4NSwgNzgsIDgyLCA3MywgODMsIDY5LCAxMjgsIDgzLCA4NSwgNzgsIDgyLCA3MywgODMsIAorICAgIDE5NywgODMsIDg1LCA3OCwgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgODMsIDg1LCA3OCwgNzEsIDEyOCwgCisgICAgODMsIDg1LCA3OCwgNzAsIDc2LCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MywgODUsIDc4LCA2OCwgNjUsIDc4LCA2OSwgODMsIAorICAgIDE5NywgODMsIDg1LCA3OCwgMTI4LCA4MywgODUsIDIwNiwgODMsIDg1LCA3NywgNzcsIDY5LCA4MiwgMTI4LCA4MywgODUsIAorICAgIDc3LCA3NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgzLCA4NSwgNzcsIDc3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MywgCisgICAgODUsIDc3LCA2NSwgODMsIDcyLCAxMjgsIDgzLCA4NSwgNzcsIDEyOCwgODMsIDg1LCA3NiwgNzAsIDg1LCA4MiwgMTI4LCAKKyAgICA4MywgODUsIDc1LCA4NSwgNzgsIDEyOCwgODMsIDg1LCA3NSwgODUsIDIwNiwgODMsIDg1LCA3NSwgODUsIDEyOCwgODMsIAorICAgIDg1LCA3NSwgMjEzLCA4MywgODUsIDczLCA4NCwgNjUsIDY2LCA3NiwgNjksIDEyOCwgODMsIDg1LCA3MywgODQsIDEyOCwgCisgICAgODMsIDg1LCA3MiwgODUsIDgyLCAxMjgsIDgzLCA4NSwgNjksIDEyOCwgODMsIDg1LCA2OCwgNTAsIDEyOCwgODMsIDg1LCAKKyAgICA2OCwgMTI4LCA4MywgODUsIDY3LCA2NywgNjksIDY5LCA2OCwgODMsIDEyOCwgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgNjgsIAorICAgIDIxMSwgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgNjgsIDEyOCwgODMsIDg1LCA2NywgNjcsIDY5LCA2OSwgMTk2LCA4MywgCisgICAgODUsIDY2LCA4NSwgNzgsIDczLCA4NCwgMTI4LCA4MywgODUsIDY2LCA4MywgODQsIDczLCA4NCwgODUsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgODQsIDg1LCA4NCwgNjksIDEyOCwgODMsIDg1LCA2NiwgODMsIDg0LCA3MywgCisgICAgODQsIDg1LCA4NCwgMTk3LCA4MywgODUsIDY2LCA4MywgNjksIDg0LCAxMjgsIDgzLCA4NSwgNjYsIDgzLCA2OSwgMjEyLCAKKyAgICA4MywgODUsIDY2LCA4MywgNjcsIDgyLCA3MywgODAsIDIxMiwgODMsIDg1LCA2NiwgODAsIDg1LCA3OCwgNjcsIDg0LCA3MywgCisgICAgODMsIDEyOCwgODMsIDg1LCA2NiwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgzLCA4NSwgNjYsIDc2LCA3MywgNzcsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODUsIDY2LCA3NiwgNzMsIDc3LCA2NSwgODQsIDY5LCA0NSwgNTEsIDEyOCwgODMsIAorICAgIDg1LCA2NiwgNzYsIDczLCA3NywgNjUsIDg0LCA2OSwgNDUsIDUwLCAxMjgsIDgzLCA4NSwgNjYsIDc2LCA3MywgNzcsIDY1LCAKKyAgICA4NCwgNjksIDEyOCwgODMsIDg1LCA2NiwgNzYsIDczLCA3NywgNjUsIDg0LCAxOTcsIDgzLCA4NSwgNjYsIDc0LCA3OSwgNzMsIAorICAgIDc4LCA2OSwgMTk2LCA4MywgODUsIDY2LCA3NCwgNjksIDY3LCA4NCwgMTI4LCA4MywgODUsIDY2LCA3MywgODQsIDc5LCAKKyAgICAxMjgsIDgzLCA4NSwgNjYsIDcxLCA4MiwgNzksIDg1LCA4MCwgMTI4LCA4MywgODUsIDY2LCA3MSwgODIsIDc5LCA4NSwgCisgICAgMjA4LCA4MywgODUsIDY1LCA2OSwgODQsIDEyOCwgODMsIDg1LCA2NSwgNjksIDc4LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCAKKyAgICAxMjgsIDgzLCA4NSwgNjUsIDEyOCwgODMsIDIxMywgODMsIDg0LCA4NywgNjUsIDEyOCwgODMsIDg0LCA4NSwgNjgsIDg5LCAKKyAgICAxMjgsIDgzLCA4NCwgODUsIDY3LCA3NSwgNDUsIDc5LCA4NSwgMjEyLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA4MywgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAyMTEsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NywgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTYsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU1LCAxMjgsIAorICAgIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTMsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUyLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MSwgMTI4LCAKKyAgICA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTAsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OSwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCAKKyAgICA0OSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDE5NywgODMsIDg0LCA4MiwgNzMsIDgwLCA2OSwgMTI4LCA4MywgODQsIAorICAgIDgyLCA3MywgNzUsIDY5LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA4MywgODQsIDgyLCA3MywgNjgsIDY5LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDczLCA2NywgODQsIDc2LCAyMTcsIDgzLCA4NCwgODIsIDY5LCA4NCwgNjcsIDcyLCA2OSwgCisgICAgMTk2LCA4MywgODQsIDgyLCA2OSwgODMsIDIxMSwgODMsIDg0LCA4MiwgNjksIDc4LCA3MSwgODQsIDcyLCAxMjgsIDgzLCAKKyAgICA4NCwgODIsIDY5LCA2NSwgNzcsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgODcsIDY2LCA2OSwgODIsIDgyLCA4OSwgCisgICAgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDc3LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDY1LCA4NCwgODUsIDIwNSwgODMsIDg0LCA4MiwgNjUsIDg0LCA3MywgNjUsIDIwNiwgODMsIAorICAgIDg0LCA4MiwgNjUsIDczLCA3OCwgNjksIDgyLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCA4NCwgNzgsIDY5LCAKKyAgICA4MywgODMsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDczLCA3MSwgNzIsIDIxMiwgODMsIDg0LCA4MiwgNjUsIDczLCA3MCwgCisgICAgMTI4LCA4MywgODQsIDgyLCA2NSwgNzEsIDcxLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDgzLCA4NCwgNzksIDg2LCAKKyAgICA2OSwgMTI4LCA4MywgODQsIDc5LCA4MiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODAsIDg3LCA2NSwgODQsIDY3LCA3MiwgCisgICAgMTI4LCA4MywgODQsIDc5LCA4MCwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA2NSwgNzEsIDY5LCAKKyAgICAxMjgsIDgzLCA4NCwgNzksIDgwLCAxMjgsIDgzLCA4NCwgNzksIDIwOCwgODMsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIDgzLCAKKyAgICA4NCwgNzksIDY3LCA3NSwgMTI4LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDgzLCA4NCwgNzMsIDc2LCAyMDQsIAorICAgIDgzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCA4NCwgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDg0LCA2OSwgODAsIDEyOCwgCisgICAgODMsIDg0LCA2OSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgMjA1LCA4MywgODQsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCAKKyAgICA4MywgODQsIDY5LCA2NSwgNzcsIDEyOCwgODMsIDg0LCA2OSwgNjUsIDIwNSwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODUsIAorICAgIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgODMsIDEyOCwgODMsIDg0LCA2NSwgODYsIDgyLCA3OSwgMjExLCA4MywgCisgICAgODQsIDY1LCA4NSwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgODUsIDE5NywgODMsIDg0LCA2NSwgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgODMsIDg0LCA2NSwgODQsIDY5LCA4MiwgODMsIDEyOCwgODMsIDg0LCA2NSwgODIsIDIxMiwgODMsIAorICAgIDg0LCA2NSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDgyLCA4MiwgNjksIDE5NiwgODMsIDg0LCA2NSwgODIsIDc1LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIAorICAgIDczLCA3NiwgNzYsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCA2NSwgNzgsIDY4LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIAorICAgIDY1LCA3MCwgNzAsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAKKyAgICAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3MywgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIDgzLCA4NCwgNTAsIAorICAgIDEyOCwgODMsIDgzLCA4OSwgODgsIDEyOCwgODMsIDgzLCA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgODIsIDg4LCAxMjgsIAorICAgIDgzLCA4MywgODksIDgyLCAxMjgsIDgzLCA4MywgODksIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgODMsIDgzLCA4NSwgCisgICAgODgsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIDgzLCA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgCisgICAgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgODAsIDEyOCwgODMsIDgzLCA3OSwgMTI4LCA4MywgODMsIDczLCAKKyAgICA4OCwgMTI4LCA4MywgODMsIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCA4MywgODMsIDczLCA2OSwgODgsIAorICAgIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgODMsIAorICAgIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgODgsIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCA2OSwgCisgICAgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgODMsIDgzLCA2NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgCisgICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAorICAgIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIAorICAgIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgCisgICAgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgCisgICAgODUsIDc3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgCisgICAgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCAKKyAgICA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgCisgICAgNjUsIDY5LCA2NSwgMTI4LCA4MywgODMsIDY1LCA2NSwgMTI4LCA4MywgODMsIDY1LCAxMjgsIDgzLCA4MiwgMTI4LCA4MywgCisgICAgODEsIDg1LCA3MywgODMsIDIwMCwgODMsIDgxLCA4NSwgNzMsIDgyLCA4MiwgNjksIDIwNCwgODMsIDgxLCA4NSwgNzMsIDcxLCAKKyAgICA3MSwgNzYsIDE5NywgODMsIDgxLCA4NSwgNjUsIDIxMiwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgODMsIDEyOCwgODMsIAorICAgIDgxLCA4NSwgNjUsIDgyLCA2OSwgNjgsIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTI4LCA4MywgODAsIDg3LCA2NSwgCisgICAgMTI4LCA4MywgODAsIDg1LCA3OCwgNzEsIDIxMSwgODMsIDgwLCA4MiwgNzksIDg1LCA4NCwgMTI4LCA4MywgODAsIDgyLCAKKyAgICA3MywgNzgsIDcxLCA4MywgMTI4LCA4MywgODAsIDgyLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4MCwgODIsIDY5LCA2NywgNzIsIAorICAgIDcxLCA2OSwgODMsIDY1LCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NSwgODQsIDczLCA3OCwgMTk5LCA4MywgODAsIDc5LCA4NCwgCisgICAgMTI4LCA4MywgODAsIDc5LCA3OSwgNzgsIDEyOCwgODMsIDgwLCA3NiwgNzMsIDg0LCA4NCwgNzMsIDc4LCAxOTksIDgzLCAKKyAgICA4MCwgNzYsIDY1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MywgODAsIDczLCA4MiwgNzMsIDg0LCA4NSwgMjExLCA4MywgODAsIAorICAgIDczLCA4MiwgNzMsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA3MywgMjEyLCA4MywgODAsIDczLCA4MiwgNjUsIDc4LCA4NCwgCisgICAgMTI4LCA4MywgODAsIDczLCA4MiwgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgMjA0LCA4MywgODAsIDczLCAKKyAgICA2OCwgNjksIDgyLCAyMTcsIDgzLCA4MCwgNzMsIDY3LCA2OSwgMTI4LCA4MywgODAsIDcyLCA2OSwgODIsIDczLCA2NywgNjUsIAorICAgIDIwNCwgODMsIDgwLCA2OSwgODMsIDc3LCA3MywgNzYsIDIwNywgODMsIDgwLCA2OSwgNjksIDY4LCA2NiwgNzksIDY1LCA4NCwgCisgICAgMTI4LCA4MywgODAsIDY5LCA2OSwgNjcsIDcyLCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgMjAwLCA4MywgODAsIDY5LCAKKyAgICA2NywgNzMsIDY1LCA3NiwgMTI4LCA4MywgODAsIDY5LCA2NSwgODIsIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgMjEwLCA4MywgODAsIDY5LCA2NSwgNzUsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgCisgICAgODYsIDczLCAyMDQsIDgzLCA4MCwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDEyOCwgODMsIDgwLCA2NSwgNzEsIDcyLCA2OSwgODQsIDg0LCA3MywgCisgICAgMTI4LCA4MywgODAsIDY1LCA2OCwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCAxOTcsIDgzLCA4MCwgNjUsIDY3LCAKKyAgICA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgODMsIDgwLCAxMjgsIDgzLCA3OSwgODksIDEyOCwgODMsIDc5LCAKKyAgICA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA2OSwgODIsIDIwNiwgODMsIAorICAgIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCA3OSwgCisgICAgODUsIDgyLCA2NywgNjksIDEyOCwgODMsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIDgzLCAKKyAgICA3OSwgODUsIDc4LCA2NSwgODAsIDEyOCwgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDgzLCAxMjgsIDgzLCA3OSwgODEsIAorICAgIDEyOCwgODMsIDc5LCA3OSwgMjA2LCA4MywgNzksIDc5LCAxMjgsIDgzLCA3OSwgNzgsIDc0LCA2NSwgNzcsIDEyOCwgODMsIAorICAgIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCA3OCwgMTI4LCA4MywgNzksIDc3LCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgCisgICAgODUsIDgzLCAxMjgsIDgzLCA3OSwgNzYsIDczLCA2OCwgODUsIDIxMSwgODMsIDc5LCA3MSwgNjgsIDczLCA2NSwgMjA2LCAKKyAgICA4MywgNzksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjksIDQ1LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgCisgICAgNzksIDcwLCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgODMsIDc5LCA3MCwgMjEyLCA4MywgNzksIDE5OCwgODMsIDc5LCAKKyAgICA2NywgNzMsIDY5LCA4NCwgODksIDEyOCwgODMsIDc5LCA2NywgNjcsIDY5LCAyMTAsIDgzLCA3OSwgNjUsIDgwLCAxMjgsIAogICAgIDgzLCA3OSwgNjUsIDEyOCwgODMsIDIwNywgODMsIDc4LCA3OSwgODcsIDc3LCA2NSwgNzgsIDEyOCwgODMsIDc4LCA3OSwgCi0gICAgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDc5LCA4NSwgODQsIDEyOCwgODMsIDc4LCA3OSwgODUsIAotICAgIDIxMiwgODMsIDc4LCA2NSwgMjA4LCA4MywgNzgsIDY1LCA3NSwgNjksIDEyOCwgODMsIDc4LCA2NSwgNzUsIDE5NywgODMsIAotICAgIDc4LCAxOTMsIDgzLCA3NywgNzMsIDc2LCA3MywgNzgsIDE5OSwgODMsIDc3LCA3MywgNzYsIDY5LCAxMjgsIDgzLCA3NywgCi0gICAgNjksIDY1LCA4MiwgMTI4LCA4MywgNzcsIDY1LCA4MywgMjAwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDY5LCAyMTAsIDgzLCAKLSAgICA3NywgNjUsIDc2LCA3NiwgMTI4LCA4MywgNzYsIDg1LCA4MiwgMTI4LCA4MywgNzYsIDc5LCA4NywgNzYsIDg5LCAxMjgsIAotICAgIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNzksIDgwLCA2OSwgCi0gICAgMTI4LCA4MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDc2LCA3MywgNjcsIDY5LCAxMjgsIDgzLCA3NiwgNjUsIDg2LCAKLSAgICA3OSwgNzgsIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgODMsIAotICAgIDc2LCA2NSwgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgNzUsIDg3LCA2NSwgMTI4LCA4MywgCi0gICAgNzUsIDg3LCAxMjgsIDgzLCA3NSwgODUsIDc2LCAyMDQsIDgzLCA3NSwgNzYsIDczLCA4MiwgNzksIDIwNiwgODMsIDc1LCAKLSAgICA3MywgNzgsIDEyOCwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgMTI4LCA4MywgNzQsIDY5LCAxMjgsIDgzLCAKLSAgICA3MywgODgsIDg0LCA4OSwgNDUsIDcwLCA3OSwgODUsIDgyLCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgODksIDEyOCwgODMsIAotICAgIDczLCA4OCwgODQsIDIxNywgODMsIDczLCA4OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNzIsIDIxMSwgCi0gICAgODMsIDczLCA4OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCAKLSAgICA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIAotICAgIDgyLCA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgCi0gICAgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCAKLSAgICA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODQsIDcyLCA3MywgCi0gICAgNjksIDg1LCA4NCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIAotICAgIDgzLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgCi0gICAgNzMsIDc5LCA4MywgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNjcsIDcyLCA3MywgNjksIAotICAgIDg1LCA2NywgNzIsIDEyOCwgODMsIDczLCA3OSwgMjExLCA4MywgNzMsIDc4LCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCi0gICAgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgzLCAKLSAgICA3MywgNzgsIDcxLCA3NiwgMTk3LCA4MywgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDY4LCA3MiwgMjAxLCA4MywgNzMsIAotICAgIDIwNiwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCA4MiwgCi0gICAgMTI4LCA4MywgNzMsIDc3LCA3MywgNzYsIDY1LCAyMTAsIDgzLCA3MywgNzcsIDY1LCA3OCwgODMsIDczLCAyMTEsIDgzLCAKLSAgICA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDc1LCAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIAotICAgIDczLCA3NiwgNjUsIDUxLCAxMjgsIDgzLCA3MywgNzUsIDczLCAxMjgsIDgzLCA3MywgNzUsIDUwLCAxMjgsIDgzLCA3MywgCi0gICAgNzUsIDE3OCwgODMsIDczLCA3MywgMTI4LCA4MywgNzMsIDcxLCA3OCwgODMsIDEyOCwgODMsIDczLCA3MSwgNzcsIDY1LCAKLSAgICAxMjgsIDgzLCA3MywgNzEsIDc3LCAxOTMsIDgzLCA3MywgNzEsIDY5LCAyMDQsIDgzLCA3MywgNzEsIDUyLCAxMjgsIDgzLCAKLSAgICA3MywgNzEsIDE4MCwgODMsIDczLCA3MSwgMTI4LCA4MywgNzMsIDY4LCA2OSwgODcsIDY1LCA4OSwgMjExLCA4MywgNzMsIAorICAgIDg3LCA3NywgNjUsIDIwNiwgODMsIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDc5LCA4NywgCisgICAgNjYsIDc5LCA2NSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODMsIDc4LCA3OSwgODcsIDEyOCwgODMsIDc4LCA3OSwgODUsIDg0LCAKKyAgICAxMjgsIDgzLCA3OCwgNzksIDg1LCAyMTIsIDgzLCA3OCwgNjUsIDIwOCwgODMsIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCAKKyAgICA3OCwgNjUsIDc1LCAxOTcsIDgzLCA3OCwgNjUsIDczLCA3NiwgMTI4LCA4MywgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIAorICAgIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA4MiwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA3NywgNzMsIDc2LCA2OSwgMTI4LCA4MywgNzcsIDY5LCA2NSwgODIsIDEyOCwgODMsIDc3LCA2NSwgODMsIAorICAgIDIwMCwgODMsIDc3LCA2NSwgNzYsIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDEyOCwgODMsIDc2LCA4NSwgCisgICAgODIsIDEyOCwgODMsIDc2LCA3OSwgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCAyMTUsIDgzLCA3NiwgNzksIDg2LCAKKyAgICA3OSwgMTI4LCA4MywgNzYsIDc5LCAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA3OSwgODAsIAorICAgIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgCisgICAgNzYsIDczLCA2NywgNjksIDEyOCwgODMsIDc2LCA3MywgNjcsIDE5NywgODMsIDc2LCA2OSwgNjksIDgwLCAyMTcsIDgzLCAKKyAgICA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIDczLCAxOTUsIDgzLCA3NiwgNjUsIAorICAgIDg2LCA2OSwgMTI4LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgODMsIDIwMCwgODMsIDc2LCA2NSwgCisgICAgNzgsIDg0LCA2OSwgMTk2LCA4MywgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAxMjgsIDgzLCA3NSwgODUsIDc2LCAKKyAgICA3NiwgMTI4LCA4MywgNzUsIDg1LCA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3NSwgNzMsIAorICAgIDc4LCAxMjgsIDgzLCA3NSwgNzMsIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIAorICAgIDgzLCA3NSwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgCisgICAgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDg0LCAKKyAgICAyMTcsIDgzLCA3MywgODgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDcyLCAyMTEsIDgzLCA3MywgODgsIAorICAgIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgCisgICAgNjksIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCAKKyAgICA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIAorICAgIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgCisgICAgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIAorICAgIDIxNiwgODMsIDczLCA4NCwgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgCisgICAgODUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDc5LCAKKyAgICA4MywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgCisgICAgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgCisgICAgNzMsIDc5LCA4MywgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIAorICAgIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzIsIDczLCAKKyAgICA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCA3MywgNzgsIDcxLCAxMjgsIAorICAgIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDEyOCwgCisgICAgODMsIDczLCA3OCwgNzEsIDc2LCAxOTcsIDgzLCA3MywgNzgsIDcxLCA2NSwgNjUsIDg0LCAxMjgsIDgzLCA3MywgNzgsIAorICAgIDE5NywgODMsIDczLCA3OCwgNjgsIDcyLCAyMDEsIDgzLCA3MywgMjA2LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgCisgICAgNzMsIDY5LCAxOTYsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIDgyLCAxMjgsIDgzLCA3MywgNzcsIDczLCA3NiwgNjUsIAorICAgIDIxMCwgODMsIDczLCA3NywgNjUsIDc4LCA4MywgNzMsIDIxMSwgODMsIDczLCA3NywgNjUsIDc2LCA4NSwgNzgsIDcxLCA4NSwgCisgICAgMjA2LCA4MywgNzMsIDc3LCA2NSwgMTI4LCA4MywgNzMsIDc2LCA4NiwgNjksIDgyLCAxMjgsIDgzLCA3MywgNzYsIDc1LCAKKyAgICAxMjgsIDgzLCA3MywgNzYsIDczLCA4MSwgODUsIDE5MywgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgNjksIAorICAgIDEyOCwgODMsIDczLCA3NiwgNzIsIDc5LCA4NSwgNjksIDg0LCA4NCwgMTk3LCA4MywgNzMsIDc2LCA2NSwgNTEsIDEyOCwgCisgICAgODMsIDczLCA3NSwgNzMsIDEyOCwgODMsIDczLCA3NSwgNTAsIDEyOCwgODMsIDczLCA3NSwgMTc4LCA4MywgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDczLCA3MSwgNzcsIAorICAgIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgMTgwLCA4MywgNzMsIAorICAgIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAyMTEsIDgzLCA3MywgCiAgICAgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNjYsIAogICAgIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIDcyLCA4OSwgODIsIAotICAgIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIAotICAgIDgzLCA3MiwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDc5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCAxMjgsIDgzLCA3MiwgCi0gICAgODcsIDczLCA3MywgMTI4LCA4MywgNzIsIDg3LCA3MywgMTI4LCA4MywgNzIsIDg3LCA2OSwgMTI4LCA4MywgNzIsIDg3LCAKLSAgICA2NSwgNjUsIDEyOCwgODMsIDcyLCA4NywgNjUsIDEyOCwgODMsIDcyLCA4NSwgODgsIDEyOCwgODMsIDcyLCA4NSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA4NSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDgwLCAxMjgsIAotICAgIDgzLCA3MiwgODUsIDc5LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDEyOCwgCi0gICAgODMsIDcyLCA4NSwgNzAsIDcwLCA3NiwgMTk3LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAKLSAgICAxMjgsIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCAKLSAgICA3MywgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3OSwgODgsIDEyOCwgODMsIDcyLCA3OSwgODUsIAotICAgIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDgzLCAKLSAgICAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKLSAgICA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgODQsIDg5LCAyMTAsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgCi0gICAgNzMsIDcxLCA0NSwgODMsIDc5LCAyMDQsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzksIAotICAgIDgzLCAyMTEsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzgsIDY1LCA4NSwgMTk2LCA4MywgCi0gICAgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgODMsIDcyLCA3OSwgODIsIAotICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCAKLSAgICA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NiwgNzQsIDY1LCA4MiwgNzUsIDY1LCAyMDYsIDgzLCA3MiwgNzksIDgyLCA4NCwgCi0gICAgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNjUsIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCAxMjgsIDgzLCA3MiwgNzksIDgyLCAKLSAgICAyMTIsIDgzLCA3MiwgNzksIDgwLCAxMjgsIDgzLCA3MiwgNzksIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA3MSwgMjAxLCA4MywgNzIsIDc5LCAxOTksIDgzLCA3MiwgNzksIDE5NywgODMsIDcyLCA3OSwgNjUsIAotICAgIDEyOCwgODMsIDcyLCA3OSwgMTI4LCA4MywgNzIsIDczLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDE5MywgODMsIAotICAgIDcyLCA3MywgODIsIDEyOCwgODMsIDcyLCA3MywgMjEwLCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgCi0gICAgNzMsIDcxLCAxMjgsIDgzLCA3MiwgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDIwNiwgODMsIDcyLCA3MywgNzcsIDY1LCAKLSAgICAxMjgsIDgzLCA3MiwgNzMsIDc3LCAxOTMsIDgzLCA3MiwgNzMsIDc3LCAxMjgsIDgzLCA3MiwgNzMsIDIwNSwgODMsIDcyLCAKLSAgICA3MywgNzMsIDc4LCAxMjgsIDgzLCA3MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDgzLCA3MiwgNzMsIAotICAgIDY5LCA3NiwgNjgsIDEyOCwgODMsIDcyLCA3MywgNjgsIDEyOCwgODMsIDcyLCA3MywgMTk2LCA4MywgNzIsIDczLCAxMjgsIAotICAgIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg4LCAxMjgsIDgzLCA3MiwgNjksIDg2LCA2NSwgMTI4LCA4MywgCi0gICAgNzIsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDc2LCA2NSwgNzcsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAKLSAgICA3MywgNzEsIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCA3MywgMTk5LCA4MywgNzIsIDY5LCA4MywgNzIsIDUwLCAxMjgsIAotICAgIDgzLCA3MiwgNjksIDgzLCA3MiwgMTI4LCA4MywgNzIsIDY5LCA4MSwgNjksIDIwNCwgODMsIDcyLCA2OSwgODAsIDEyOCwgCi0gICAgODMsIDcyLCA2OSwgNzgsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDc2LCAxMjgsIDgzLCA3MiwgNjksIDc2LCAyMDQsIDgzLCAKLSAgICA3MiwgNjksIDc2LCA3MCwgMTI4LCA4MywgNzIsIDY5LCA3MywgMTI4LCA4MywgNzIsIDY5LCA3MSwgNTcsIDEyOCwgODMsIAotICAgIDcyLCA2OSwgNjksIDgwLCAxMjgsIDgzLCA3MiwgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCAKKyAgICA4OCwgMTI4LCA4MywgNzIsIDg5LCA4MiwgMTI4LCA4MywgNzIsIDg5LCA4MCwgMTI4LCA4MywgNzIsIDg5LCA2OSwgMTI4LCAKKyAgICA4MywgNzIsIDg5LCA2NSwgMTI4LCA4MywgNzIsIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA4OSwgMTI4LCA4MywgNzIsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgODMsIDcyLCA4NywgNzksIDEyOCwgODMsIDcyLCA4NywgNzMsIDczLCAxMjgsIDgzLCA3MiwgCisgICAgODcsIDczLCAxMjgsIDgzLCA3MiwgODcsIDY5LCAxMjgsIDgzLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDg3LCAKKyAgICA2NSwgMTI4LCA4MywgNzIsIDg1LCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgODgsIAorICAgIDEyOCwgODMsIDcyLCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgODAsIDEyOCwgODMsIDcyLCA4NSwgNzksIDg4LCAxMjgsIAorICAgIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgMTI4LCA4MywgNzIsIDg1LCA3NywgMTI4LCA4MywgCisgICAgNzIsIDg1LCA3MCwgNzAsIDc2LCAxOTcsIDgzLCA3MiwgODUsIDY5LCA4MSwgMTI4LCA4MywgNzIsIDg1LCA2OSwgNzgsIDgzLCAKKyAgICA3MiwgODUsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDg1LCA2NiwgODUsIDgyLCAxMjgsIDgzLCA3MiwgODUsIDUwLCAxMjgsIAorICAgIDgzLCA3MiwgODUsIDE3OCwgODMsIDcyLCA4NSwgMTI4LCA4MywgNzIsIDIxMywgODMsIDcyLCA4NCwgNjUsIDgwLCA3MywgCisgICAgNjcsIDEyOCwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDc4LCA2OSwgMTI4LCA4MywgNzIsIDgyLCAKKyAgICA3MywgNzcsIDgwLCAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIDgzLCA3MiwgNzksIAorICAgIDg3LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCAKKyAgICA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgNjksIDEyOCwgODMsIAorICAgIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCAKKyAgICA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA4MywgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIAorICAgIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIDgzLCA3MiwgCisgICAgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIAorICAgIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCAKKyAgICA4NCwgODcsIDczLCA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgCisgICAgODQsIDg3LCA3MywgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIAorICAgIDIxMiwgODMsIDcyLCA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDc5LCA3OSwgODQsIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIDEyOCwgCisgICAgODMsIDcyLCA3OSwgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIDc5LCAKKyAgICAxOTcsIDgzLCA3MiwgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgNjUsIAorICAgIDc2LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCA3MiwgCisgICAgNzMsIDgyLCAyMTIsIDgzLCA3MiwgNzMsIDgyLCA2NSwgNjksIDEyOCwgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIDcyLCAKKyAgICA3MywgMjEwLCA4MywgNzIsIDczLCA4MSwgMTI4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgODQsIAorICAgIDIwNywgODMsIDcyLCA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgNzIsIDczLCA3OCwgNjgsIDE5MywgODMsIDcyLCA3MywgCisgICAgNzgsIDEyOCwgODMsIDcyLCA3MywgMjA2LCA4MywgNzIsIDczLCA3NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIDE5MywgCisgICAgODMsIDcyLCA3MywgNzcsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIDcyLCAKKyAgICA3MywgNzMsIDEyOCwgODMsIDcyLCA3MywgNzAsIDIxMiwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgNzIsIAorICAgIDczLCA2OCwgMTI4LCA4MywgNzIsIDczLCAxOTYsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzIsIDE5MywgODMsIAorICAgIDcyLCA2OSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODYsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA4MywgCisgICAgNzIsIDY5LCA4NSwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCA4NCwgODUsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDY5LCAyMTIsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIDY5LCAKKyAgICA4MywgNzIsIDczLCA3MSwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCA4MCwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDIwNCwgCisgICAgODMsIDcyLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgMTI4LCAKKyAgICA4MywgNzIsIDY5LCA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIAogICAgIDEyOCwgODMsIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgCi0gICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIDY1LCAyMDYsIDgzLCAKLSAgICA3MiwgNjUsIDg0LCAxMjgsIDgzLCA3MiwgNjUsIDgyLCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgMjEzLCA4MywgNzIsIAotICAgIDY1LCA4MiwgODAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIwOCwgODMsIDcyLCA2NSwgODIsIDUwLCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODksIDEyOCwgCisgICAgODMsIDcyLCA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA4NiwgNzMsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg2LCA2OSwgMTk2LCA4MywgNzIsIDY1LCA4NCwgMTI4LCA4MywgNzIsIAorICAgIDY1LCA4MiwgODUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIxMywgODMsIDcyLCA2NSwgODIsIDgwLCAxMjgsIDgzLCA3MiwgCisgICAgNjUsIDgyLCAyMDgsIDgzLCA3MiwgNjUsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgNTAsIDEyOCwgODMsIDcyLCAKICAgICA2NSwgODIsIDE3OCwgODMsIDcyLCA2NSwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgODAsIDY5LCA4MywgCi0gICAgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgMjA2LCA4MywgCi0gICAgNzIsIDY1LCA3NywgODIsIDc5LCA2NywgNzUsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIAotICAgIDEyOCwgODMsIDcyLCA2NSwgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MywgCi0gICAgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIAotICAgIDE5MywgODMsIDcyLCA2NSwgNjgsIDEyOCwgODMsIDcyLCA2NSwgMTk2LCA4MywgNzIsIDY1LCA2NiwgNTQsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNTQsIDEyOCwgODMsIDcyLCA2NSwgNTEsIDEyOCwgODMsIDcyLCA2NSwgCi0gICAgMTc5LCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MSwgNzksIDIxMCwgODMsIDcxLCA2NSwgMjE1LCA4MywgNzEsIDY1LCAxOTQsIAotICAgIDgzLCA3MSwgMTI4LCA4MywgNjksIDg4LCA4NCwgODUsIDc2LCAxOTMsIDgzLCA2OSwgODgsIDg0LCA3MywgNzYsIDY5LCAKLSAgICAxMjgsIDgzLCA2OSwgODgsIDg0LCA2NSwgNzgsIDIxMSwgODMsIDY5LCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgCi0gICAgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCAyMTcsIDgzLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgwLCAxOTcsIDgzLCA3MiwgNjUsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIDc4LCA3MSwgMTI4LCAKKyAgICA4MywgNzIsIDY1LCA3OCwgMTI4LCA4MywgNzIsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDc3LCA4MiwgNzksIDY3LCA3NSwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA3NiwgODMsIDcyLCA2OSwgNzYsIDY5LCA4NCwgMTI4LCA4MywgNzIsIDY1LCA3NSwgODQsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIDY5LCAxOTYsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTI4LCA4MywgNzIsIAorICAgIDY1LCA2OCwgNjgsIDY1LCAxMjgsIDgzLCA3MiwgNjUsIDY4LCA2OCwgMTkzLCA4MywgNzIsIDY1LCA2OCwgMTI4LCA4MywgCisgICAgNzIsIDY1LCAxOTYsIDgzLCA3MiwgNjUsIDY2LCA1NCwgMTI4LCA4MywgNzIsIDY1LCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA1NCwgMTI4LCA4MywgNzIsIDY1LCA1MSwgMTI4LCA4MywgNzIsIDY1LCAxNzksIDgzLCA3MSwgODIsIDE5MywgODMsIDcxLCAKKyAgICA3OSwgMjEwLCA4MywgNzEsIDY1LCAyMTUsIDgzLCA3MSwgNjUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCAKKyAgICA4NSwgNzYsIDE5MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgCisgICAgMjExLCA4MywgNjksIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAKKyAgICAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDIxNywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIAogICAgIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgCi0gICAgODMsIDY5LCA4NiwgNjksIDIwNiwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCAKLSAgICA4MSwgODUsIDczLCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIAotICAgIDgzLCA2OSwgODIsIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgCi0gICAgNzAsIDIxMSwgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCAKLSAgICA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIAotICAgIDEyOCwgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgCi0gICAgNzcsIDc1LCA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCAKLSAgICA2OSwgMjA0LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIAotICAgIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCA3MywgNzgsIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgCi0gICAgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCAKLSAgICA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgCi0gICAgMjEwLCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCAKLSAgICA4NiwgNzMsIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgCi0gICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgCi0gICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgCi0gICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgCi0gICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgCi0gICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAotICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIAotICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgCi0gICAgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAotICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIAotICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCAKLSAgICA3NywgMTkzLCA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIAotICAgIDEyOCwgODMsIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgCi0gICAgNjksIDc4LCAxMjgsIDgzLCA2OSwgNjksIDIwNiwgODMsIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIAotICAgIDEyOCwgODMsIDY5LCA2NywgNzksIDc4LCA2OCwgMTI4LCA4MywgNjksIDY2LCA2NSwgODQsIDY2LCA2OSwgNzMsIDIxMiwgCi0gICAgODMsIDY5LCA2NSwgNzYsIDEyOCwgODMsIDY5LCA2NSwgNzEsIDg1LCA3NiwgMjA0LCA4MywgNjgsIDc5LCA3OCwgMTk5LCAKLSAgICA4MywgNjcsIDg3LCA2NSwgMTI4LCA4MywgNjcsIDgyLCA4NSwgODAsIDc2LCA2OSwgMTI4LCA4MywgNjcsIDgyLCA3MywgODAsIAotICAgIDg0LCAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDY3LCA4MiwgNjksIDY5LCAyMDYsIDgzLCA2NywgCi0gICAgNzksIDgyLCA4MCwgNzMsIDg1LCA4MywgMTI4LCA4MywgNjcsIDczLCA4MywgODMsIDc5LCA4MiwgODMsIDEyOCwgODMsIDY3LCAKLSAgICA3MiwgODcsIDY1LCAxMjgsIDgzLCA2NywgNzIsIDg3LCAxOTMsIDgzLCA2NywgNzIsIDc5LCA3NiwgNjUsIDgyLCAxMjgsIAotICAgIDgzLCA2NywgNzIsIDY5LCA3NywgMTkzLCA4MywgNjcsIDY1LCA3OCwgNjgsIDczLCA2NywgODUsIDgzLCAxMjgsIDgzLCA2NywgCi0gICAgNjUsIDc4LCA2OCwgNzMsIDY3LCA4NSwgMjExLCA4MywgNjcsIDY1LCAyMDYsIDgzLCA2NywgNjUsIDc2LCA2OSwgODMsIAotICAgIDEyOCwgODMsIDY2LCA4NSwgMTk0LCA4MywgNjYsIDgyLCA4NSwgMjA0LCA4MywgNjUsIDg5LCA3MywgODMsIDIwMSwgODMsIAotICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODMsIDY1LCA4OSwgMTI4LCA4MywgNjUsIDg4LCA3MywgNzcsIDY1LCA4NCwgCi0gICAgNjUsIDEyOCwgODMsIDY1LCA4NywgMTI4LCA4MywgNjUsIDg1LCA3MywgNzYsIDEyOCwgODMsIDY1LCA4NCwgODUsIDgyLCAKLSAgICA3OCwgMTI4LCA4MywgNjUsIDgzLCA2NSwgNzUsIDEyOCwgODMsIDY1LCA4MiwgNzMsIDEyOCwgODMsIDY1LCA4MiwgMTkzLCAKLSAgICA4MywgNjUsIDgyLCAxMjgsIDgzLCA2NSwgODAsIDY1LCAxMjgsIDgzLCA2NSwgNzgsIDg5LCA3OSwgNzksIDcxLCAxOTMsIAotICAgIDgzLCA2NSwgNzgsIDg5LCA2NSwgNzUsIDE5MywgODMsIDY1LCA3OCwgODQsIDczLCA3MywgNzcsIDg1LCAxMjgsIDgzLCA2NSwgCi0gICAgNzgsIDc4LCA4OSwgNjUsIDEyOCwgODMsIDY1LCA3OCwgNzEsIDY1LCA1MCwgMTI4LCA4MywgNjUsIDc4LCA2NSwgNzIsIAotICAgIDEyOCwgODMsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDc3LCA4OSwgNzksIDIwMywgODMsIDY1LCA3NywgODAsIDczLCAxMjgsIAotICAgIDgzLCA2NSwgNzcsIDgwLCA3MiwgNjUsIDc5LCAxMjgsIDgzLCA2NSwgNzcsIDc1LCA2NSwgMTI4LCA4MywgNjUsIDc3LCA2OSwgCi0gICAgNzUsIDcyLCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgMjAwLCA4MywgNjUsIDc3LCA2NSwgODIsIDczLCA4NCwgNjUsIAotICAgIDIwNiwgODMsIDY1LCA3NiwgODQsIDczLCA4MiwgNjksIDEyOCwgODMsIDY1LCA3NiwgODQsIDczLCA3NiwgNzYsIDc5LCAKLSAgICAxMjgsIDgzLCA2NSwgNzYsIDg0LCAxMjgsIDgzLCA2NSwgNzYsIDc2LCA2NSwgNzYsIDc2LCA2NSwgNzIsIDc5LCAyMTMsIAotICAgIDgzLCA2NSwgNzYsIDc2LCAxOTMsIDgzLCA2NSwgNzYsIDY1LCAyMDUsIDgzLCA2NSwgNzYsIDY1LCAxMjgsIDgzLCA2NSwgCi0gICAgNzYsIDEyOCwgODMsIDY1LCA3NCwgNjgsIDY1LCA3MiwgMTI4LCA4MywgNjUsIDczLCA3NiwgMTI4LCA4MywgNjUsIDczLCAKLSAgICA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MywgNjUsIDcxLCA3MywgODQsIDg0LCA2NSwgODIsIDczLCA4NSwgODMsIDEyOCwgODMsIAotICAgIDY1LCA3MSwgNjUsIDEyOCwgODMsIDY1LCA3MSwgMTI4LCA4MywgNjUsIDE5OSwgODMsIDY1LCA3MCwgNzIsIDY1LCAxMjgsIAotICAgIDgzLCA2NSwgNjgsIDcyLCA2OSwgMTI4LCA4MywgNjUsIDY4LCA2OSwgMTI4LCA4MywgNjUsIDY4LCAxMjgsIDgzLCA2NSwgCi0gICAgMTk2LCA4MywgNjUsIDY3LCA4MiwgNzMsIDcwLCA3MywgNjcsIDczLCA2NSwgMjA0LCA4MywgNjUsIDY1LCA3MywgMTI4LCAKLSAgICA4MywgNjUsIDY1LCA2OCwgNzIsIDg1LCAxMjgsIDgzLCA2NSwgNDUsIDczLCAxMjgsIDgzLCA0NSwgODcsIDEyOCwgODMsIAotICAgIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgODIsIDg5LCA4OSwgMTI4LCA4MiwgODksIDg4LCAxMjgsIDgyLCA4OSwgCi0gICAgODQsIDEyOCwgODIsIDg5LCA4MiwgODgsIDEyOCwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODksIDgwLCAxMjgsIDgyLCA4OSwgCi0gICAgNjUsIDEyOCwgODIsIDg3LCA2NSwgNzIsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDEyOCwgCi0gICAgODIsIDg1LCA4OCwgMTI4LCA4MiwgODUsIDg1LCA2NiwgODUsIDgyLCA4NSwgMTI4LCA4MiwgODUsIDg0LCAxMjgsIDgyLCAKLSAgICA4NSwgODMsIDczLCAxMjgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDgyLCA4NSwgODIsIDEyOCwgODIsIDg1LCA4MCwgNzMsIAotICAgIDczLCAxMjgsIDgyLCA4NSwgODAsIDY5LCAxOTcsIDgyLCA4NSwgODAsIDEyOCwgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgODIsIDg1LCA3OSwgMTI4LCA4MiwgODUsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgyLCA4NSwgCi0gICAgNzgsIDEyOCwgODIsIDg1LCA3NywgNjUsIDIwMSwgODIsIDg1LCA3NywgMTI4LCA4MiwgODUsIDIwNSwgODIsIDg1LCA3NiwgCi0gICAgNjksIDQ1LCA2OCwgNjksIDc2LCA2NSwgODksIDY5LCA2OCwgMTI4LCA4MiwgODUsIDc2LCA2OSwgMTI4LCA4MiwgODUsIDc1LCAKLSAgICA3NSwgNjUsIDc1LCA3MiwgNjUsIDEyOCwgODIsIDg1LCA3MywgODMsIDEyOCwgODIsIDg1LCAxOTQsIDgyLCA4NSwgNjUsIAotICAgIDEyOCwgODIsIDg0LCA2NSwgNzEsIDgzLCAxMjgsIDgyLCA4NCwgNjUsIDcxLCAyMTEsIDgyLCA4MiwgODksIDg4LCAxMjgsIAotICAgIDgyLCA4MiwgODksIDg0LCAxMjgsIDgyLCA4MiwgODksIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg5LCA4MiwgMTI4LCA4MiwgCi0gICAgODIsIDg5LCA4MCwgMTI4LCA4MiwgODIsIDg5LCAxMjgsIDgyLCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4MiwgODUsIDg0LCAKLSAgICAxMjgsIDgyLCA4MiwgODUsIDgyLCA4OCwgMTI4LCA4MiwgODIsIDg1LCA4MiwgMTI4LCA4MiwgODIsIDg1LCA4MCwgMTI4LCAKLSAgICA4MiwgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIDgyLCA4NSwgNzksIDEyOCwgODIsIDgyLCA4NSwgMTI4LCA4MiwgODIsIAotICAgIDc5LCA4OCwgMTI4LCA4MiwgODIsIDc5LCA4NCwgMTI4LCA4MiwgODIsIDc5LCA4MCwgMTI4LCA4MiwgODIsIDc5LCAxMjgsIAotICAgIDgyLCA4MiwgNjksIDg4LCAxMjgsIDgyLCA4MiwgNjksIDg0LCAxMjgsIDgyLCA4MiwgNjksIDgwLCAxMjgsIDgyLCA4MiwgCi0gICAgNjksIDcyLCAxMjgsIDgyLCA4MiwgNjksIDIwMCwgODIsIDgyLCA2OSwgMTI4LCA4MiwgODIsIDY1LCA4OCwgMTI4LCA4MiwgCi0gICAgODIsIDY1LCAxMjgsIDgyLCA3OSwgODUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODQsIDczLCAKKyAgICA4MywgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAyMDYsIAorICAgIDgzLCA2OSwgODUsIDg4LCAxMjgsIDgzLCA2OSwgODUsIDc4LCA4OSwgNjUsIDc3LCAxMjgsIDgzLCA2OSwgODUsIDY1LCA2OSwgCisgICAgODEsIDEyOCwgODMsIDY5LCA4NCwgNzAsIDc5LCA3OCwgMTI4LCA4MywgNjksIDgzLCA4NCwgNjksIDgyLCA4NCwgNzMsIDg1LCAKKyAgICAyMTEsIDgzLCA2OSwgODMsIDgxLCA4NSwgNzMsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNjksIAorICAgIDgzLCA2NSwgNzcsIDE5NywgODMsIDY5LCA4MiwgODYsIDczLCA2NywgMTk3LCA4MywgNjksIDgyLCA3MywgNzAsIDgzLCAKKyAgICAxMjgsIDgzLCA2OSwgODIsIDczLCA3MCwgMjExLCA4MywgNjksIDgwLCA4NCwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIAorICAgIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA4MCwgNjUsIDgyLCA2NSwgODQsIDc5LCAKKyAgICAyMTAsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MywgNjksIDc4LCA4NCwgNzMsIDEyOCwgODMsIDY5LCA3NywgODUsIAorICAgIDc4LCA2NywgNzMsIDE5MywgODMsIDY5LCA3NywgNzUsIDY1LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA3NywgNzUsIDEyOCwgCisgICAgODMsIDY5LCA3NywgNzMsIDg2LCA3OSwgODcsIDY5LCAyMDQsIDgzLCA2OSwgNzcsIDczLCA4MywgNzksIDcwLCAyMTIsIDgzLCAKKyAgICA2OSwgNzcsIDczLCA4MywgNjksIDg4LCA4NCwgNzMsIDc2LCA2OSwgMTI4LCA4MywgNjksIDc3LCA3MywgNzcsIDczLCA3OCwgCisgICAgNzMsIDc3LCAxOTMsIDgzLCA2OSwgNzcsIDczLCA2OCwgNzMsIDgyLCA2OSwgNjcsIDIxMiwgODMsIDY5LCA3NywgNzMsIDY3LCAKKyAgICA3OSwgNzYsIDc5LCA3OCwgMTI4LCA4MywgNjksIDc3LCA3MywgNjcsIDc5LCA3NiwgNzksIDIwNiwgODMsIDY5LCA3NywgNzMsIAorICAgIDY3LCA3MywgODIsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgzLCA2OSwgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgCisgICAgODMsIDY5LCA3NywgNzMsIDY2LCA4MiwgNjksIDg2LCA3MywgMjExLCA4MywgNjksIDc3LCA3MywgNDUsIDg2LCA3OSwgNzMsIAorICAgIDY3LCA2OSwgMTk2LCA4MywgNjksIDc2LCA3MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTYsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTcsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDU0LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCA1MCwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTEsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgCisgICAgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAorICAgIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNDgsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKKyAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNDgsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNTAsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ5LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ5LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTcsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MywgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCAKKyAgICA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTcsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTcsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU2LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU2LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUyLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNDgsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU1LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUyLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDU1LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIAorICAgIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKKyAgICA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ5LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCisgICAgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MywgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MywgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDUzLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTcsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MywgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTcsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTQsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTQsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1MCwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAorICAgIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNDksIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTEsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA0OSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ4LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU1LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNDgsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTEsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNDgsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNDgsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAyMTAsIDgzLCA2OSwgNzMsIDgzLCAKKyAgICA3NywgNjUsIDEyOCwgODMsIDY5LCA3MywgODMsIDc3LCAxOTMsIDgzLCA2OSwgNzIsIDEyOCwgODMsIDY5LCA3MSwgNzksIAorICAgIDc2LCAxMjgsIDgzLCA2OSwgNzEsIDc4LCA3OSwgMTI4LCA4MywgNjksIDcxLCA3NywgNjksIDc4LCA4NCwgMTI4LCA4MywgCisgICAgNjksIDY5LCA3OCwgODUsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDY5LCA2OSwgMjA2LCA4MywgNjksIDY5LCAKKyAgICA2OCwgNzYsIDczLCA3OCwgNzEsIDEyOCwgODMsIDY5LCA2OSwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgNjksIDY3LCA4NCwgCisgICAgNzMsIDc5LCAyMDYsIDgzLCA2OSwgNjcsIDgyLCA2OSwgODQsIDEyOCwgODMsIDY5LCA2NywgNzksIDc4LCA2OCwgMTI4LCAKKyAgICA4MywgNjksIDY2LCA2NSwgODQsIDY2LCA2OSwgNzMsIDIxMiwgODMsIDY5LCA2NSwgODQsIDEyOCwgODMsIDY5LCA2NSwgNzYsIAorICAgIDEyOCwgODMsIDY5LCA2NSwgNzEsIDg1LCA3NiwgMjA0LCA4MywgNjgsIDc5LCA3OCwgMTk5LCA4MywgNjgsIDEyOCwgODMsIAorICAgIDY3LCA4NywgNjUsIDEyOCwgODMsIDY3LCA4MiwgODUsIDgwLCA3NiwgNjksIDEyOCwgODMsIDY3LCA4MiwgNzksIDc2LCA3NiwgCisgICAgMTI4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCAxMjgsIDgzLCA2NywgODIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIDY3LCAKKyAgICA4MiwgNjksIDY5LCAyMDYsIDgzLCA2NywgODIsIDY5LCA2NSwgNzcsIDczLCA3OCwgMTk5LCA4MywgNjcsIDc5LCA4MiwgODAsIAorICAgIDczLCA4NSwgODMsIDEyOCwgODMsIDY3LCA3OSwgODIsIDY5LCAxMjgsIDgzLCA2NywgNzMsIDgzLCA4MywgNzksIDgyLCA4MywgCisgICAgMTI4LCA4MywgNjcsIDcyLCA4NywgNjUsIDEyOCwgODMsIDY3LCA3MiwgODcsIDE5MywgODMsIDY3LCA3MiwgODIsIDc5LCAKKyAgICA2OSwgNjgsIDY5LCA4MiwgMTI4LCA4MywgNjcsIDcyLCA3OSwgNzksIDc2LCAxMjgsIDgzLCA2NywgNzIsIDc5LCA3OSwgCisgICAgMjA0LCA4MywgNjcsIDcyLCA3OSwgNzYsIDY1LCA4MiwgMTI4LCA4MywgNjcsIDcyLCA2OSwgNzcsIDE5MywgODMsIDY3LCAKKyAgICA2OSwgODAsIDg0LCA2OSwgMjEwLCA4MywgNjcsIDY1LCA3OCwgNjgsIDczLCA2NywgODUsIDgzLCAxMjgsIDgzLCA2NywgNjUsIAorICAgIDc4LCA2OCwgNzMsIDY3LCA4NSwgMjExLCA4MywgNjcsIDY1LCAyMDYsIDgzLCA2NywgNjUsIDc2LCA2OSwgODMsIDEyOCwgCisgICAgODMsIDY2LCA4NSwgMTk0LCA4MywgNjYsIDgyLCA4NSwgMjA0LCA4MywgNjUsIDg5LCA3MywgODMsIDIwMSwgODMsIDY1LCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODMsIDY1LCA4OSwgMTI4LCA4MywgNjUsIDg4LCA3OSwgODAsIDcyLCA3OSwgNzgsIAorICAgIDY5LCAxMjgsIDgzLCA2NSwgODgsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgNjUsIDg3LCA2NSwgNzgsIDEyOCwgCisgICAgODMsIDY1LCA4NywgMTI4LCA4MywgNjUsIDg2LCA3OSwgODUsIDgyLCA3MywgNzgsIDE5OSwgODMsIDY1LCA4NSwgNzMsIDc2LCAKKyAgICAxMjgsIDgzLCA2NSwgODQsIDg1LCA4MiwgNzgsIDEyOCwgODMsIDY1LCA4NCwgNzUsIDY1LCA2NSwgNzgsIDc1LCA4NSwgODUsIAorICAgIDEyOCwgODMsIDY1LCA4NCwgNzUsIDY1LCA2NSwgNzgsIDEyOCwgODMsIDY1LCA4NCwgNjksIDc2LCA3NiwgNzMsIDg0LCAKKyAgICAxOTcsIDgzLCA2NSwgODQsIDY3LCA3MiwgNjksIDc2LCAxMjgsIDgzLCA2NSwgODMsIDcyLCAxMjgsIDgzLCA2NSwgODMsIAorICAgIDY1LCA3NSwgMTI4LCA4MywgNjUsIDgyLCA3MywgMTI4LCA4MywgNjUsIDgyLCAxOTMsIDgzLCA2NSwgODIsIDEyOCwgODMsIAorICAgIDY1LCA4MSwgMTI4LCA4MywgNjUsIDgwLCA2NSwgMTI4LCA4MywgNjUsIDc4LCA4OSwgNzksIDc5LCA3MSwgMTkzLCA4MywgCisgICAgNjUsIDc4LCA4OSwgNjUsIDc1LCAxOTMsIDgzLCA2NSwgNzgsIDg0LCA3MywgNzMsIDc3LCA4NSwgMTI4LCA4MywgNjUsIDc4LCAKKyAgICA3OCwgODksIDY1LCAxMjgsIDgzLCA2NSwgNzgsIDcxLCA2NSwgNTAsIDEyOCwgODMsIDY1LCA3OCwgNjgsIDY1LCA3NiwgCisgICAgMTI4LCA4MywgNjUsIDc4LCA2NSwgNzIsIDEyOCwgODMsIDY1LCA3OCwgMTI4LCA4MywgNjUsIDc3LCA4OSwgNzksIDIwMywgCisgICAgODMsIDY1LCA3NywgODAsIDczLCAxMjgsIDgzLCA2NSwgNzcsIDgwLCA3MiwgNjUsIDc5LCAxMjgsIDgzLCA2NSwgNzcsIDc1LCAKKyAgICA2NSwgMTI4LCA4MywgNjUsIDc3LCA2OSwgNzUsIDcyLCAxMjgsIDgzLCA2NSwgNzcsIDY5LCA3NSwgMjAwLCA4MywgNjUsIAorICAgIDc3LCA2NiwgNjUsIDEyOCwgODMsIDY1LCA3NywgNjUsIDgyLCA3MywgODQsIDY1LCAyMDYsIDgzLCA2NSwgNzcsIDEyOCwgCisgICAgODMsIDY1LCA3NiwgODQsIDczLCA4MiwgNjksIDEyOCwgODMsIDY1LCA3NiwgODQsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDgzLCAKKyAgICA2NSwgNzYsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDY1LCA3NiwgODQsIDEyOCwgODMsIDY1LCA3NiwgMjEyLCA4MywgNjUsIAorICAgIDc2LCA3NiwgNjUsIDc2LCA3NiwgNjUsIDcyLCA3OSwgMjEzLCA4MywgNjUsIDc2LCA3NiwgMTkzLCA4MywgNjUsIDc2LCA2NSwgCisgICAgMjA1LCA4MywgNjUsIDc2LCA2NSwgMTI4LCA4MywgNjUsIDc2LCA0NSwgNjUsIDc3LCA3NywgNzksIDc4LCA3MywgNjUsIDY3LCAKKyAgICAxMjgsIDgzLCA2NSwgNzYsIDEyOCwgODMsIDY1LCA3NSwgNzksIDg0LCAxMjgsIDgzLCA2NSwgNzUsIDY5LCA4NSwgNjUsIAorICAgIDY5LCAxMjgsIDgzLCA2NSwgNzUsIDE5NywgODMsIDY1LCA3NCwgNjgsIDY1LCA3MiwgMTI4LCA4MywgNjUsIDczLCA3NiwgCisgICAgNjYsIDc5LCA2NSwgODQsIDEyOCwgODMsIDY1LCA3MywgNzYsIDEyOCwgODMsIDY1LCA3MywgNzUsIDg1LCA4MiwgODUsIAorICAgIDEyOCwgODMsIDY1LCA3MSwgNzMsIDg0LCA4NCwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDgzLCA2NSwgNzEsIDY1LCAKKyAgICAxMjgsIDgzLCA2NSwgNzEsIDEyOCwgODMsIDY1LCAxOTksIDgzLCA2NSwgNzAsIDcyLCA2NSwgMTI4LCA4MywgNjUsIDY4LCAKKyAgICA3MiwgNjksIDEyOCwgODMsIDY1LCA2OCwgNjksIDEyOCwgODMsIDY1LCA2OCwgMTI4LCA4MywgNjUsIDE5NiwgODMsIDY1LCAKKyAgICA2NywgODIsIDczLCA3MCwgNzMsIDY3LCA3MywgNjUsIDIwNCwgODMsIDY1LCA2NSwgNzMsIDEyOCwgODMsIDY1LCA2NSwgNjgsIAorICAgIDcyLCA4NSwgMTI4LCA4MywgNjUsIDQ1LCA3MywgMTI4LCA4MywgNDgsIDUyLCA1NCwgMTI4LCA4MywgNDgsIDUyLCA1MywgCisgICAgMTI4LCA4MywgNDgsIDUyLCA1MiwgMTI4LCA4MywgNDgsIDUyLCA1MSwgMTI4LCA4MywgNDgsIDUyLCA1MCwgMTI4LCA4MywgCisgICAgNDgsIDUyLCA0OSwgMTI4LCA4MywgNDgsIDUyLCA0OCwgMTI4LCA4MywgNDgsIDUxLCA1NywgMTI4LCA4MywgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA4MywgNDgsIDUxLCA1NSwgMTI4LCA4MywgNDgsIDUxLCA1NCwgMTI4LCA4MywgNDgsIDUxLCA1MywgNjUsIAorICAgIDEyOCwgODMsIDQ4LCA1MSwgNTMsIDEyOCwgODMsIDQ4LCA1MSwgNTIsIDEyOCwgODMsIDQ4LCA1MSwgNTEsIDEyOCwgODMsIAorICAgIDQ4LCA1MSwgNTAsIDEyOCwgODMsIDQ4LCA1MSwgNDksIDEyOCwgODMsIDQ4LCA1MSwgNDgsIDEyOCwgODMsIDQ4LCA1MCwgCisgICAgNTcsIDEyOCwgODMsIDQ4LCA1MCwgNTYsIDEyOCwgODMsIDQ4LCA1MCwgNTUsIDEyOCwgODMsIDQ4LCA1MCwgNTQsIDY2LCAKKyAgICAxMjgsIDgzLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA4MywgNDgsIDUwLCA1NCwgMTI4LCA4MywgNDgsIDUwLCA1MywgMTI4LCAKKyAgICA4MywgNDgsIDUwLCA1MiwgMTI4LCA4MywgNDgsIDUwLCA1MSwgMTI4LCA4MywgNDgsIDUwLCA1MCwgMTI4LCA4MywgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA4MywgNDgsIDUwLCA0OCwgMTI4LCA4MywgNDgsIDQ5LCA1NywgMTI4LCA4MywgNDgsIDQ5LCA1NiwgCisgICAgMTI4LCA4MywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgODMsIDQ4LCA0OSwgNTUsIDEyOCwgODMsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgODMsIDQ4LCA0OSwgNTMsIDEyOCwgODMsIDQ4LCA0OSwgNTIsIDY2LCAxMjgsIDgzLCA0OCwgNDksIDUyLCA2NSwgMTI4LCAKKyAgICA4MywgNDgsIDQ5LCA1MiwgMTI4LCA4MywgNDgsIDQ5LCA1MSwgMTI4LCA4MywgNDgsIDQ5LCA1MCwgMTI4LCA4MywgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA4MywgNDgsIDQ5LCA0OCwgMTI4LCA4MywgNDgsIDQ4LCA1NywgMTI4LCA4MywgNDgsIDQ4LCA1NiwgCisgICAgMTI4LCA4MywgNDgsIDQ4LCA1NSwgMTI4LCA4MywgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgODMsIDQ4LCA0OCwgNTQsIDEyOCwgCisgICAgODMsIDQ4LCA0OCwgNTMsIDEyOCwgODMsIDQ4LCA0OCwgNTIsIDEyOCwgODMsIDQ4LCA0OCwgNTEsIDEyOCwgODMsIDQ4LCAKKyAgICA0OCwgNTAsIDY1LCAxMjgsIDgzLCA0OCwgNDgsIDUwLCAxMjgsIDgzLCA0OCwgNDgsIDQ5LCAxMjgsIDgzLCA0NSwgODcsIAorICAgIDEyOCwgODMsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgODIsIDg5LCA4OSwgMTI4LCA4MiwgODksIDg4LCAxMjgsIAorICAgIDgyLCA4OSwgODQsIDEyOCwgODIsIDg5LCA4MiwgODgsIDEyOCwgODIsIDg5LCA4MiwgMTI4LCA4MiwgODksIDgwLCAxMjgsIAorICAgIDgyLCA4OSwgNjUsIDEyOCwgODIsIDg3LCA3OSwgNzksIDEyOCwgODIsIDg3LCA3OSwgMTI4LCA4MiwgODcsIDczLCA3MywgCisgICAgMTI4LCA4MiwgODcsIDczLCAxMjgsIDgyLCA4NywgNjksIDY5LCAxMjgsIDgyLCA4NywgNjksIDEyOCwgODIsIDg3LCA2NSwgCisgICAgNzIsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDY1LCAxMjgsIDgyLCA4NywgNjUsIDEyOCwgODIsIDg1LCA4OCwgMTI4LCA4MiwgCisgICAgODUsIDg1LCA2NiwgODUsIDgyLCA4NSwgMTI4LCA4MiwgODUsIDg0LCAxMjgsIDgyLCA4NSwgODMsIDczLCAxMjgsIDgyLCAKKyAgICA4NSwgODIsIDg4LCAxMjgsIDgyLCA4NSwgODIsIDEyOCwgODIsIDg1LCA4MCwgNzMsIDczLCAxMjgsIDgyLCA4NSwgODAsIAorICAgIDY5LCAxOTcsIDgyLCA4NSwgODAsIDEyOCwgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIDg1LCA3OSwgODAsIDEyOCwgODIsIAorICAgIDg1LCA3OSwgMTI4LCA4MiwgODUsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgyLCA4NSwgNzgsIDc4LCA3MywgNzgsIDE5OSwgCisgICAgODIsIDg1LCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA4MiwgODUsIDc4LCAxMjgsIDgyLCA4NSwgNzcsIDIwMSwgODIsIDg1LCAKKyAgICA3NywgNjUsIDIwMSwgODIsIDg1LCA3NywgMTI4LCA4MiwgODUsIDIwNSwgODIsIDg1LCA3NiwgNjksIDgyLCAxMjgsIDgyLCAKKyAgICA4NSwgNzYsIDY5LCA0NSwgNjgsIDY5LCA3NiwgNjUsIDg5LCA2OSwgNjgsIDEyOCwgODIsIDg1LCA3NiwgNjksIDEyOCwgODIsIAorICAgIDg1LCA3NSwgNzUsIDY1LCA3NSwgNzIsIDY1LCAxMjgsIDgyLCA4NSwgNzMsIDgzLCAxMjgsIDgyLCA4NSwgNzEsIDY2LCAKKyAgICAyMTcsIDgyLCA4NSwgMTk0LCA4MiwgODUsIDY1LCAxMjgsIDgyLCA4NCwgNzIsIDY1LCA3OCwgMTk5LCA4MiwgODQsIDY1LCAKKyAgICA3MSwgODMsIDEyOCwgODIsIDg0LCA2NSwgNzEsIDIxMSwgODIsIDgyLCA4OSwgODgsIDEyOCwgODIsIDgyLCA4OSwgODQsIAorICAgIDEyOCwgODIsIDgyLCA4OSwgODIsIDg4LCAxMjgsIDgyLCA4MiwgODksIDgyLCAxMjgsIDgyLCA4MiwgODksIDgwLCAxMjgsIAorICAgIDgyLCA4MiwgODUsIDg4LCAxMjgsIDgyLCA4MiwgODUsIDg0LCAxMjgsIDgyLCA4MiwgODUsIDgyLCA4OCwgMTI4LCA4MiwgCisgICAgODIsIDg1LCA4MiwgMTI4LCA4MiwgODIsIDg1LCA4MCwgMTI4LCA4MiwgODIsIDg1LCA3OSwgODgsIDEyOCwgODIsIDgyLCAKKyAgICA4NSwgNzksIDEyOCwgODIsIDgyLCA4NSwgMTI4LCA4MiwgODIsIDc5LCA4OCwgMTI4LCA4MiwgODIsIDc5LCA4NCwgMTI4LCAKKyAgICA4MiwgODIsIDc5LCA4MCwgMTI4LCA4MiwgODIsIDc5LCAxMjgsIDgyLCA4MiwgNjksIDg4LCAxMjgsIDgyLCA4MiwgNjksIAorICAgIDg0LCAxMjgsIDgyLCA4MiwgNjksIDgwLCAxMjgsIDgyLCA4MiwgNjksIDcyLCAxMjgsIDgyLCA4MiwgNjksIDIwMCwgODIsIAorICAgIDgyLCA2OSwgMTI4LCA4MiwgODIsIDY1LCA4OCwgMTI4LCA4MiwgODIsIDY1LCAxMjgsIDgyLCA3OSwgODcsIDY2LCA3OSwgCisgICAgNjUsIDg0LCAxMjgsIDgyLCA3OSwgODUsIDc4LCA2OCwgNjksIDE5NiwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODQsIDczLCAKICAgICA4MCwgODAsIDY5LCAxOTYsIDgyLCA3OSwgODQsIDg1LCA3OCwgNjgsIDY1LCAxMjgsIDgyLCA3OSwgODQsIDY1LCA4NCwgNjksIAotICAgIDE5NiwgODIsIDc5LCA4MywgNzIsIDEyOCwgODIsIDc5LCA4MywgNjksIDg0LCA4NCwgNjksIDEyOCwgODIsIDc5LCA3OSwgCi0gICAgODQsIDEyOCwgODIsIDc5LCA3OSwgNzUsIDEyOCwgODIsIDc5LCA3OSwgNzAsIDEyOCwgODIsIDc5LCA3OSwgMTI4LCA4MiwgCi0gICAgNzksIDc3LCA2NSwgMjA2LCA4MiwgNzksIDE5NiwgODIsIDc5LCA2NywgMTI4LCA4MiwgNzksIDY2LCA2NSwgODQsIDEyOCwgCi0gICAgODIsIDc5LCA2NSwgODIsIDEyOCwgODIsIDc5LCA2NSwgMTI4LCA4MiwgNzgsIDg5LCA3MywgNzgsIDE5OSwgODIsIDc4LCAKLSAgICA3OSwgNzksIDc4LCAxMjgsIDgyLCA3OCwgNzksIDc5LCAyMDYsIDgyLCA3OCwgNjUsIDIwNSwgODIsIDc0LCA2OSwgMjExLCAKLSAgICA4MiwgNzQsIDY5LCAxMjgsIDgyLCA3NCwgMTk3LCA4MiwgNzMsIDg2LCA2OSwgODIsIDEyOCwgODIsIDczLCA4NCwgODUsIAotICAgIDY1LCA3NiwgMTI4LCA4MiwgNzMsIDg0LCA4NCwgNzksIDgyLCA4NSwgMTI4LCA4MiwgNzMsIDg0LCA4MywgNzMsIDEyOCwgCi0gICAgODIsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA3MywgODMsIDcyLCAxMjgsIDgyLCA3MywgODIsIDY1LCAxMjgsIDgyLCAKLSAgICA3MywgODAsIDEyOCwgODIsIDczLCA3OCwgNzAsIDc5LCA4MiwgOTAsIDY1LCA3OCwgNjgsIDc5LCAxMjgsIDgyLCA3MywgCi0gICAgMjA2LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCAKLSAgICA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgNzIsIDg0LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIAotICAgIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIDIxMiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDczLCAKLSAgICA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCAKLSAgICA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCAKKyAgICAxOTYsIDgyLCA3OSwgODMsIDcyLCAxMjgsIDgyLCA3OSwgODMsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDgyLCA3OSwgODMsIAorICAgIDY5LCAxMjgsIDgyLCA3OSwgNzksIDg0LCAxMjgsIDgyLCA3OSwgNzksIDgzLCA4NCwgNjksIDgyLCAxMjgsIDgyLCA3OSwgCisgICAgNzksIDc1LCAxMjgsIDgyLCA3OSwgNzksIDcwLCAxMjgsIDgyLCA3OSwgNzksIDEyOCwgODIsIDc5LCA3NywgNjUsIDIwNiwgCisgICAgODIsIDc5LCA3NywgMTI4LCA4MiwgNzksIDc2LCA3NiwgNjksIDIxMCwgODIsIDc5LCAxOTYsIDgyLCA3OSwgNjcsIDc1LCAKKyAgICA2OSwgODQsIDEyOCwgODIsIDc5LCA2NywgMjAzLCA4MiwgNzksIDY3LCAxMjgsIDgyLCA3OSwgNjYsIDY1LCA4NCwgMTI4LCAKKyAgICA4MiwgNzksIDY1LCA4MywgODQsIDY5LCAxOTYsIDgyLCA3OSwgNjUsIDgyLCAxMjgsIDgyLCA3OSwgNjUsIDEyOCwgODIsIAorICAgIDc4LCA4OSwgNzMsIDc4LCAxOTksIDgyLCA3OCwgNzksIDc5LCA3OCwgMTI4LCA4MiwgNzgsIDc5LCA3OSwgMjA2LCA4MiwgCisgICAgNzgsIDY1LCAyMDUsIDgyLCA3NCwgNjksIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgCisgICAgNjksIDgyLCAxMjgsIDgyLCA3MywgODQsIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIAorICAgIDEyOCwgODIsIDczLCA4NCwgODMsIDczLCAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgCisgICAgMTI4LCA4MiwgNzMsIDgyLCA2NSwgMTI4LCA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgCisgICAgNzgsIDcwLCA3OSwgODIsIDkwLCA2NSwgNzgsIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCAKKyAgICA2NSwgMTI4LCA4MiwgNzMsIDc1LCA4MiwgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzMsIDEyOCwgODIsIDczLCA3MSwgODYsIAorICAgIDY5LCA2OCwgNzMsIDE5NSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgNjUsIDgyLCA2OCwgODMsIDEyOCwgODIsIDczLCA3MSwgCisgICAgNzIsIDg0LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3OSwgNDUsIDc2LCA2OSwgNzAsIAorICAgIDIxMiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgCisgICAgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA2OCwgNjksIAorICAgIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODAsIDc5LCA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgCisgICAgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgNjksIDgzLCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCA3MywgCiAgICAgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgNzIsIAogICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgCiAgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCAKICAgICA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIAotICAgIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIAotICAgIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgCi0gICAgNzgsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDczLCA3OSwgODMsIAotICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCAKLSAgICA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIAotICAgIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCAKLSAgICA3NiwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDcyLCA3MywgCi0gICAgNjksIDg1LCA3NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIAotICAgIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgMTI4LCAKLSAgICA4MiwgNzMsIDY3LCA2OSwgMTI4LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIAorICAgIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCAKKyAgICA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIAorICAgIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCAKKyAgICA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgCisgICAgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIAorICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIAorICAgIDc2LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCAKKyAgICA2OSwgODUsIDc4LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgCisgICAgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIAorICAgIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCAKKyAgICA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCAKKyAgICA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAorICAgIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgCisgICAgNjcsIDEyOCwgODIsIDczLCA2OSwgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgCisgICAgODIsIDczLCA2NywgNjksIDc3LCAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCAKKyAgICA2NiwgNjYsIDc5LCA3OCwgMTI4LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIAogICAgIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIAotICAgIDgyLCA3MSwgODksIDY1LCA3OCwgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCA3MywgCi0gICAgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgMTI4LCA4MiwgNjksIDg2LCA3MywgNjUsIDEyOCwgODIsIDY5LCAKLSAgICA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NCwgODUsIAotICAgIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCA3MCwgNzYsIDY5LCAKLSAgICAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODMsIDg1LCA4MCwgNzMsIDc4LCA4NSwgODMsIAotICAgIDEyOCwgODIsIDY5LCA4MywgODQsIDEyOCwgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgODMsIDY5LCAxMjgsIDgyLCA2OSwgCi0gICAgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3MywgNjgsIDY5LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDcyLCAxMjgsIDgyLCA2OSwgODMsIDIwMCwgODIsIDY5LCA4MiwgNjksIDc1LCAKLSAgICA2NSwgNzgsIDEyOCwgODIsIDY5LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA3NiwgNjUsIAotICAgIDY3LCA2OSwgNzcsIDY5LCA3OCwgMjEyLCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgCi0gICAgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIDgwLCA2NSwgMTI4LCA4MiwgNjksIDgwLCAKLSAgICAxOTMsIDgyLCA2OSwgNzgsIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc3LCA4NSwgMTI4LCA4MiwgNjksIAotICAgIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgCi0gICAgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCAKLSAgICA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIAotICAgIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIDY3LCAxOTcsIDgyLCA2OSwgCisgICAgODIsIDcxLCA4OSwgNjUsIDc4LCAxMjgsIDgyLCA3MSwgODksIDE5MywgODIsIDY5LCA4NiwgNzksIDc2LCA4NiwgNzMsIDc4LCAKKyAgICAxOTksIDgyLCA2OSwgODYsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODYsIDc3LCA2NSwgCisgICAgMTI4LCA4MiwgNjksIDg2LCA3MywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCAxMjgsIDgyLCAKKyAgICA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCAxOTYsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDE5NywgODIsIDY5LCA4NSwgODgsIAorICAgIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgCisgICAgODIsIDc5LCA3MCwgNzYsIDY5LCAyMTYsIDgyLCA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCAKKyAgICA4MiwgODQsIDEyOCwgODIsIDY5LCA4MywgODUsIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIAorICAgIDc5LCA3OSwgNzcsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgCisgICAgMTI4LCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAKKyAgICAxMjgsIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIAorICAgIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgCisgICAgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAKKyAgICAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIAorICAgIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgNjksIDE5NiwgCisgICAgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCA4MCwgNjUsIAorICAgIDEyOCwgODIsIDY5LCA4MCwgMTkzLCA4MiwgNjksIDc4LCA4NCwgNzksIDcxLCA2OSwgNzgsIDEyOCwgODIsIDY5LCA3OCwgCisgICAgMTI4LCA4MiwgNjksIDIwNiwgODIsIDY5LCA3NywgODUsIDEyOCwgODIsIDY5LCA3NywgNjksIDY4LCA4OSwgMTI4LCA4MiwgCisgICAgNjksIDc2LCA3MywgNzEsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNzMsIDY5LCA4NiwgNjksIDE5NiwgODIsIDY5LCAKKyAgICA3NiwgNjksIDY1LCA4MywgNjksIDEyOCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIAorICAgIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA3NiwgNjUsIDY1LCAxMjgsIDgyLCA2OSwgNzQsIDY1LCA3OCwgCisgICAgMTk5LCA4MiwgNjksIDczLCAxOTYsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTIsIDEyOCwgODIsIDY5LCAKKyAgICA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MSwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUwLCAxMjgsIAorICAgIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDIxMSwgODIsIDY5LCA3MSwgCisgICAgNzMsIDgzLCA4NCwgNjksIDgyLCA2OSwgMTk2LCA4MiwgNjksIDcxLCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDcxLCAKKyAgICA3MywgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA3MywgNjUsIDEyOCwgODIsIDY5LCA3MCwgNjksIDgyLCA2OSwgNzgsIAorICAgIDY3LCAxOTcsIDgyLCA2OSwgNjgsIDg1LCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgCiAgICAgNjcsIDg5LCA2NywgNzYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MiwgNjksIDY3LCAKICAgICA4NCwgNzMsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgCiAgICAgMjEwLCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCAKLSAgICA3NiwgMTk3LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCA2OCwgNjksIAotICAgIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIDE5NywgCi0gICAgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCA2OCwgMjA3LCAKLSAgICA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCA2NSwgODksIAotICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgODksIDEyOCwgODIsIDY1LCA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgCi0gICAgODQsIDEyOCwgODIsIDY1LCA4MywgNzksIDg1LCAyMDQsIDgyLCA2NSwgODMsIDcyLCA2NSwgMTI4LCA4MiwgNjUsIDgwLCAKLSAgICA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA4MiwgNjUsIDc4LCAxMjgsIDgyLCA2NSwgNzcsIAotICAgIDIxMSwgODIsIDY1LCA3NywgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc3LCAxMjgsIDgyLCA2NSwgNzUsIDcyLCA2NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgyLCA2NSwgNzMsIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgMTI4LCA4MiwgNjUsIDczLCAKLSAgICAyMDYsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDcyLCA3NywgNjUsIAotICAgIDg0LCA4NSwgNzYsIDc2LCA2NSwgMjAwLCA4MiwgNjUsIDcwLCA2OSwgMTI4LCA4MiwgNjUsIDY5LCAxMjgsIDgyLCA2NSwgCi0gICAgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNjgsIDIwMSwgODIsIDY1LCA2OCwgMTI4LCAKLSAgICA4MiwgNjUsIDE5NiwgODIsIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDY1LCAxMjgsIDgyLCAKLSAgICA2NSwgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCA4OCwgMTI4LCAKLSAgICA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCA4MiwgMTI4LCAKLSAgICA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAxMjgsIDgxLCAKLSAgICA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCA4NiwgMTI4LCAKLSAgICA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIDg5LCA2NSwgCi0gICAgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIDg1LCA3OSwgCi0gICAgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgxLCAKLSAgICA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCA3NSwgMTI4LCAKLSAgICA4MSwgODUsIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgCi0gICAgNzgsIDg4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIAotICAgIDEyOCwgODEsIDg1LCA3MywgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDY5LCAxOTYsIDgxLCA4NSwgCi0gICAgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY5LCAKLSAgICA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgMTI4LCA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIAotICAgIDg0LCA2OSwgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgCi0gICAgNjUsIDgyLCA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCAKLSAgICA4NCwgNjksIDIxMCwgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIAotICAgIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgCi0gICAgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIAotICAgIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIDgxLCA3OSwgNzksIDEyOCwgODEsIAotICAgIDc5LCAyMDcsIDgxLCA3OSwgNzAsIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIDEyOCwgODEsIDc5LCAxMjgsIDgxLCAKLSAgICA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgNzMsIDEyOCwgODEsIDczLCAKLSAgICA2OSwgODgsIDEyOCwgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgODEsIDczLCA2OSwgMTI4LCAKLSAgICA4MSwgNzMsIDEyOCwgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAxMjgsIDgxLCA3MiwgODcsIAotICAgIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCA4MSwgNzIsIDg1LCAxMjgsIAotICAgIDgxLCA3MiwgNzksIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDY5LCAxMjgsIAotICAgIDgxLCA3MiwgNjUsIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDY5LCA4NCwgNjUsIDc4LCA2NSwgMTI4LCA4MSwgCi0gICAgNjksIDY5LCAxMjgsIDgxLCA2OSwgMTI4LCA4MSwgNjUsIDg1LCAxMjgsIDgxLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA4MSwgCi0gICAgNjUsIDgyLCA3OCwgNjksIDIxNywgODEsIDY1LCA4MiwgMTI4LCA4MSwgNjUsIDgxLCAxMjgsIDgxLCA2NSwgODAsIDcyLCAKLSAgICAxMjgsIDgxLCA2NSwgNzcsIDY1LCA4NCwgODMsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCAyMTEsIDgxLCA2NSwgNzYsIAotICAgIDE5MywgODEsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgxLCA2NSwgNzMsIDEyOCwgODEsIDY1LCA3MCwgCi0gICAgMTI4LCA4MSwgNjUsIDE5OCwgODEsIDY1LCA2OCwgNzcsIDY1LCAxMjgsIDgxLCA2NSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgCi0gICAgNjUsIDcwLCA4NSwgMTI4LCA4MSwgNjUsIDY1LCA3MCwgMTI4LCA4MSwgNjUsIDY1LCAxMjgsIDIwOSwgODAsIDkwLCAxMjgsIAotICAgIDgwLCA4OSwgODgsIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCA4MCwgODksIDgyLCAxMjgsIAotICAgIDgwLCA4OSwgODAsIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgODAsIAotICAgIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIDEyOCwgODAsIAotICAgIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCA4NSwgODgsIAotICAgIDEyOCwgODAsIDg1LCA4NCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIAotICAgIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCA4MiwgMTI4LCA4MCwgODUsIDgwLCAxMjgsIDgwLCA4NSwgCi0gICAgNzksIDg4LCAxMjgsIDgwLCA4NSwgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgODAsIDg1LCA3OCwgNzEsIDEyOCwgCi0gICAgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIAotICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCAxMjgsIDgwLCA4NCwgNzIsIDY1LCA3MiwgCi0gICAgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCAKLSAgICA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgCi0gICAgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCAKLSAgICA3MywgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIAotICAgIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgCi0gICAgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIAotICAgIDc4LCA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgCi0gICAgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCAKLSAgICA3OSwgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIAotICAgIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgCi0gICAgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MCwgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIAotICAgIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgCi0gICAgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCA4MiwgNzMsIDc4LCAyMTIsIDgwLCAKLSAgICA4MiwgNzMsIDc3LCA2OSwgMTI4LCA4MCwgODIsIDczLCA3NywgMTk3LCA4MCwgODIsIDY5LCA4NiwgNzMsIDc5LCA4NSwgCi0gICAgMjExLCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODMsIDY3LCAKLSAgICA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgODIsIDY1LCA3OCwgCi0gICAgNjcsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDcwLCA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAKLSAgICAxOTksIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgCi0gICAgMjExLCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTI4LCAKLSAgICA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCA3MywgMTI4LCA4MCwgODIsIAotICAgIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDg5LCAxMjgsIDgwLCA4MiwgCi0gICAgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDc4LCAxMjgsIDgwLCAKLSAgICA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA2OSwgNzMsIDEyOCwgODAsIAotICAgIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDgyLCA2NSwgMjA1LCA4MCwgCi0gICAgODIsIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODAsIDY1LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgODAsIDc5LCA4NywgCi0gICAgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDgzLCAKLSAgICA4NCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODAsIDc5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA3OSwgODMsIAotICAgIDgzLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgCi0gICAgODAsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCAKLSAgICA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIDc5LCAxMjgsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgNjksIAotICAgIDEyOCwgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgNzMsIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgCi0gICAgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCAKLSAgICA3OCwgODQsIDY5LCAxOTYsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIAotICAgIDY5LCA4NCwgODIsIDIxNywgODAsIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAKLSAgICAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCAKLSAgICA2NSwgMTI4LCA4MCwgNzYsIDg1LCA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgCi0gICAgMjExLCA4MCwgNzYsIDg1LCA4MywgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIDc2LCA4NSwgNzcsIDEyOCwgCi0gICAgODAsIDc2LCA4NSwgNzUsIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgMTI4LCAKLSAgICA4MCwgNzYsIDY5LCA4NCwgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIAotICAgIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgCi0gICAgODAsIDc2LCA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgMTk3LCAKLSAgICA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCA4OCwgCi0gICAgMTI4LCA4MCwgNzMsIDg3LCA4MiwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIDcwLCA3OSwgODIsIDc1LCAxMjgsIDgwLCAKLSAgICA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgMjAzLCA4MCwgNzMsIDg0LCAxMjgsIDgwLCA3MywgODMsIDY3LCA2OSwgODMsIAotICAgIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIDgwLCA3MywgODAsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4MCwgNzMsIDc2LCAKLSAgICA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA3NSwgNzksIDEyOCwgODAsIAotICAgIDczLCA3MSwgMTI4LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MywgNjksIDg1LCAKLSAgICA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgCi0gICAgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIAotICAgIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCA3MywgNjksIAotICAgIDg1LCA4MCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzIsIDczLCAKLSAgICA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgMjA4LCA4MCwgNzMsIDY5LCA4MCwgMTI4LCA4MCwgNzMsIAotICAgIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgCi0gICAgODUsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIAotICAgIDEyOCwgODAsIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIAotICAgIDcyLCA4NSwgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgCi0gICAgNzIsIDc5LCA2OSwgNzgsIDczLCA2NywgNzMsIDY1LCAyMDYsIDgwLCA3MiwgNzksIDY1LCAxMjgsIDgwLCA3MiwgNzksIAotICAgIDEyOCwgODAsIDcyLCAyMDcsIDgwLCA3MiwgNzgsIDY1LCA2OSwgMjAzLCA4MCwgNzIsIDczLCA3OCwgODQsIDcyLCA4NSwgCi0gICAgMTI4LCA4MCwgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAKLSAgICA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDIwMCwgODAsIDcyLCA3MywgCi0gICAgMTI4LCA4MCwgNzIsIDIwMSwgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCA4MCwgNzIsIDY1LCA4MiwgCi0gICAgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDgwLCA3MiwgNjUsIDgyLCAxMjgsIDgwLCA3MiwgNjUsIDc4LCAxMjgsIDgwLCAKLSAgICA3MiwgNjUsIDczLCA4MywgODQsIDc5LCAyMTEsIDgwLCA3MiwgNjUsIDY1LCA4MiwgNzUsIDY1LCA2NSwgMTI4LCA4MCwgNzIsIAotICAgIDY1LCA2NSwgMTI4LCA4MCwgNzIsIDY1LCAxMjgsIDgwLCA3MSwgMTI4LCA4MCwgNzAsIDEyOCwgODAsIDY5LCA4NCwgNjUsIAotICAgIDgzLCA4NCwgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCAKLSAgICA3MywgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgNzYsIDc2LCA2OSwgCi0gICAgMTk2LCA4MCwgNjksIDgzLCA3OSwgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgCi0gICAgNjksIDgzLCA2OSwgODQsIDE5MywgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgMjA3LCA4MCwgNjksIDgyLCAKLSAgICA4MywgODAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIAotICAgIDgyLCA4MywgNzMsIDY1LCAyMDYsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDgyLCAKLSAgICAxMjgsIDgwLCA2OSwgODIsIDgwLCA2OSwgNzgsIDY4LCA3MywgNjcsIDg1LCA3NiwgNjUsIDIxMCwgODAsIDY5LCA4MiwgNzcsIAotICAgIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgCi0gICAgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIAotICAgIDIwNSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAKLSAgICAxOTMsIDgwLCA2OSwgODIsIDY3LCA4NSwgODMsIDgzLCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDY3LCA2OSwgNzgsIAotICAgIDIxMiwgODAsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2OSwgODAsIDY5LCAyMTIsIDgwLCA2OSwgNzksIDgyLCA4NCwgCi0gICAgMjAwLCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIDEyOCwgODAsIDY5LCA3OCwgNzgsIDIxNywgODAsIDY5LCA3OCwgNzMsIAotICAgIDcyLCA3MywgMTI4LCA4MCwgNjksIDc4LCA2OSwgODQsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3OCwgCi0gICAgNjcsIDczLCA3NiwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgNzgsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCAKLSAgICA4NCwgNzksIDIwNiwgODAsIDY5LCA3MywgODQsIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCA3MiwgMTI4LCA4MCwgNjksIAotICAgIDcyLCA2OSwgMjAwLCA4MCwgNjksIDcyLCAxMjgsIDgwLCA2OSwgMjAwLCA4MCwgNjksIDY5LCA5MCwgNzMsIDEyOCwgODAsIAotICAgIDY5LCA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgCi0gICAgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIAotICAgIDIwNCwgODAsIDY5LCA2OCwgNjUsIDIwNCwgODAsIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIDY3LCAxOTcsIAotICAgIDgwLCA2OCwgMTI4LCA4MCwgNjcsIDEyOCwgODAsIDY1LCA5MCwgNjksIDgyLCAxMjgsIDgwLCA2NSwgODksIDY5LCA4MiwgCi0gICAgNzksIDc1LCAxMjgsIDgwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgwLCA2NSwgODgsIDEyOCwgODAsIDY1LCAKLSAgICA4NywgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MCwgNjUsIAotICAgIDg0LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA4MCwgNjUsIDg0LCA3MiwgNjUsIDc3LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4MCwgCi0gICAgNjUsIDg0LCAyMDAsIDgwLCA2NSwgODQsIDY1LCA3NSwgMTI4LCA4MCwgNjUsIDg0LCA2NSwgNzIsIDEyOCwgODAsIDY1LCAKLSAgICA4NCwgMTI4LCA4MCwgNjUsIDgzLCA4NSwgODEsIDEyOCwgODAsIDY1LCA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIAotICAgIDc2LCA3NiwgNDUsIDg1LCA4MCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCAKLSAgICA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgCi0gICAgODAsIDY1LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MCwgNjUsIDgzLCA2OSwgODEsIDEyOCwgODAsIDY1LCA4MiwgODQsIDc4LCAKLSAgICA2OSwgODIsIDgzLCA3MiwgNzMsIDIwOCwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgNzYsIDc2LCA4OSwgNDUsIDgyLCA2OSwgCi0gICAgNjcsIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIDIwNCwgODAsIDY1LCA4MiwgMjEyLCAKLSAgICA4MCwgNjUsIDgyLCA3MywgNjcsIDcyLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDgzLCA4NCwgNzMsIDcxLCA3NywgCi0gICAgNjksIDc4LCA3OSwgMjA2LCA4MCwgNjUsIDgyLCA2OSwgODIsIDY5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCAKLSAgICA3MiwgNjksIDgzLCA3MywgODMsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDIxMSwgODAsIAotICAgIDY1LCA4MiwgNjUsIDgwLCA3MiwgODIsIDY1LCA4MywgMTk3LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDc5LCAKLSAgICA3MSwgODIsIDY1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjUsIAotICAgIDc2LCA3NiwgNjksIDIwNCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDczLCAxMjgsIDgwLCA2NSwgCi0gICAgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCAyMDEsIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgODMsIAotICAgIDc3LCAxOTMsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDc5LCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA4MCwgNjUsIDgyLCAKLSAgICA2NSwgMTI4LCA4MCwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgODAsIDg5LCA4MiwgODUsIDgzLCAxMjgsIDgwLCA2NSwgODAsIAotICAgIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAyMDgsIDgwLCA2NSwgNzgsIDg5LCA4NSwgNzUsIDg1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg5LCA3MywgNzUsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2OSwgNjcsIDY5LCA3NSwgMTI4LCA4MCwgCi0gICAgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIDgwLCA2NSwgNzgsIDc5LCAKLSAgICA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNzgsIAotICAgIDcxLCA3NiwgNjUsIDg5LCA2NSwgODIsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgCi0gICAgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY1LCAKLSAgICA2OSwgNzYsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgNzUsIAotICAgIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODAsIDcyLCA4OSwgCi0gICAgNzYsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCAKLSAgICA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjgsIAotICAgIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAxMjgsIDgwLCA2NSwgNzYsIDg1LCA4NCwgNjUsIDEyOCwgCi0gICAgODAsIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDIwNSwgODAsIDY1LCA3NiwgNzYsIDY1LCAKLSAgICA4NywgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIAotICAgIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCAKLSAgICA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzMsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA3OSwgNzMsIDEyOCwgODAsIDY1LCA3MywgODIsIDg0LCA3MiwgODIsIDY1LCAxMjgsIDgwLCA2NSwgCi0gICAgNzMsIDgyLCA2OSwgMTk2LCA4MCwgNjUsIDY4LCA3NywgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCA4NCwgNzksIAotICAgIDEyOCwgODAsIDY1LCA2NSwgNzMsIDEyOCwgODAsIDY1LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCAxMjgsIDgwLCA1MCwgMTI4LCA3OSwgODksIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIDE5MywgNzksIDg5LCAKLSAgICA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCA2NSwgMTI4LCA3OSwgODgsIDczLCAxOTMsIDc5LCA4OCwgNjksIAotICAgIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCA3OSwgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgNjksIDEyOCwgCi0gICAgNzksIDg2LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCAKLSAgICA4NiwgNjksIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgCi0gICAgMTI4LCA3OSwgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgMTI4LCA3OSwgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCAKLSAgICA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIAotICAgIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCAxOTcsIDc5LCA4NCwgODUsIDEyOCwgNzksIDg0LCA4NCwgCi0gICAgNjUsIDg2LCAxOTMsIDc5LCA4NCwgODQsIDEyOCwgNzksIDg0LCA3MiwgNjUsIDc2LCA2NSwgMjA2LCA3OSwgODQsIDcyLCAKLSAgICA2NSwgNzYsIDEyOCwgNzksIDgzLCA3NywgNjUsIDc4LCA4OSwgMTkzLCA3OSwgODIsIDg0LCA3MiwgNzksIDcxLCA3OSwgNzgsIAotICAgIDY1LCAyMDQsIDc5LCA4MiwgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA3OSwgCi0gICAgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIDgyLCAKLSAgICA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY4LCA3MywgNzgsIAotICAgIDY1LCAyMDQsIDc5LCA4MiwgNjcsIDcyLCA3MywgNjgsIDEyOCwgNzksIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDc5LCA4MCwgCi0gICAgODAsIDgyLCA2OSwgODMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIAotICAgIDc4LCAxMjgsIDc5LCA4MCwgODAsIDc5LCA4MywgNzMsIDc4LCAxOTksIDc5LCA4MCwgODAsIDc5LCA4MywgNjksIDEyOCwgCi0gICAgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCAyMTAsIDc5LCAKLSAgICA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgODAsIDY5LCA3OCwgNDUsIAotICAgIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAKLSAgICAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCA3OSwgODUsIDg0LCA4MCwgCi0gICAgODUsIDIxMiwgNzksIDgwLCA2OSwgMjA2LCA3OSwgNzksIDkwLCA2OSwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCAKLSAgICA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIDg1LCAxMjgsIDc5LCA3OSwgNjYsIDc5LCA3OSwgNzAsIAotICAgIDczLCA3NiwgNzMsIDEyOCwgNzksIDc4LCA4NSwgMTI4LCA3OSwgNzgsIDgzLCA4NSwgMTI4LCA3OSwgNzgsIDc4LCAxMjgsIAotICAgIDc5LCA3OCwgNzUsIDY1LCA4MiwgMTI4LCA3OSwgNzgsIDY5LCA4MywgNjksIDc2LCA3MCwgMTI4LCA3OSwgNzgsIDY5LCA0NSwgCi0gICAgNzYsIDczLCA3OCwgMTk3LCA3OSwgNzcsIDczLCA4MywgODMsIDczLCA3OSwgMjA2LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCAKLSAgICA3OCwgMTI4LCA3OSwgNzcsIDczLCA2NywgODIsIDc5LCAyMDYsIDc5LCA3NywgNjksIDcxLCA2NSwgMTI4LCA3OSwgNzcsIAotICAgIDY5LCA3MSwgMTkzLCA3OSwgNzcsIDY1LCA3NiwgNzksIDc4LCAxMjgsIDc5LCA3NywgMTI4LCA3OSwgNzYsIDczLCA4NiwgCi0gICAgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgNjgsIDEyOCwgNzksIDc1LCA4NCwgMjA3LCA3OSwgCi0gICAgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgNzksIDc0LCA2OSwgNzksIDc4LCAxMjgsIDc5LCAKLSAgICA3MywgNzYsIDEyOCwgNzksIDcyLCA3NywgMTI4LCA3OSwgNzIsIDIwNSwgNzksIDcyLCAxMjgsIDc5LCA3MSwgNzksIDc4LCAKLSAgICA2OSwgNzUsIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCAyMDMsIDc5LCA3MSwgNzIsIDY1LCAyMDUsIDc5LCA2OCwgMTk2LCAKLSAgICA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNjcsIDIxMCwgNzksIDY2LCA4MywgODQsIDgyLCA4NSwgNjcsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgNzksIDc2LCAyMTEsIDc5LCA2NiwgNzksIDIwNCwgNzksIDY2LCA3OSwgCi0gICAgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDY2LCA3NiwgNzMsIDgxLCA4NSwgMTk3LCA3OSwgNjYsIDc0LCA2OSwgNjcsIAotICAgIDIxMiwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3OSwgNjYsIDY5LCA3NiwgNzksIDgzLCAxMjgsIDc5LCA2NiwgCi0gICAgMTI4LCA3OSwgNjUsIDg5LCAxMjgsIDc5LCA2NSwgNzUsIDEyOCwgNzksIDY1LCA2NiwgNzksIDY1LCA3MCwgNzMsIDc2LCAKLSAgICA3MywgMTI4LCA3OSwgNDUsIDg5LCA2OSwgMTI4LCA3OSwgNDUsIDY5LCA3OSwgMTI4LCA3OSwgNDUsIDY5LCAxMjgsIDc4LCAKLSAgICA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIDgyLCA4OCwgMTI4LCA3OCwgOTAsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIDg5LCAxMjgsIDc4LCA5MCwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgCi0gICAgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMTI4LCA3OCwgOTAsIDc5LCAKLSAgICA4OCwgMTI4LCA3OCwgOTAsIDc5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA4OCwgMTI4LCA3OCwgOTAsIDczLCA4NCwgMTI4LCAKLSAgICA3OCwgOTAsIDczLCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA3MywgNjksIDgwLCAxMjgsIAotICAgIDc4LCA5MCwgNzMsIDY5LCAxMjgsIDc4LCA5MCwgNzMsIDEyOCwgNzgsIDkwLCA2OSwgODgsIDEyOCwgNzgsIDkwLCA2OSwgCi0gICAgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgCi0gICAgOTAsIDY1LCAxMjgsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCA4OSwgODUsIDg0LCAKLSAgICAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODAsIAotICAgIDEyOCwgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgMTI4LCA3OCwgODksIDc5LCA4OCwgMTI4LCA3OCwgODksIAotICAgIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIDc5LCA2NSwgCi0gICAgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIDc4LCA4OSwgCi0gICAgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMSwgNzgsIDg5LCA3MywgODAsIDEyOCwgNzgsIDg5LCA3MywgNzgsIDQ1LCAKLSAgICA2OCwgNzksIDEyOCwgNzgsIDg5LCA3MywgNjksIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgODksIAotICAgIDczLCA2OSwgODAsIDEyOCwgNzgsIDg5LCA3MywgNjksIDEyOCwgNzgsIDg5LCA3MywgMTI4LCA3OCwgODksIDIwMSwgNzgsIAotICAgIDg5LCA2OSwgMjEyLCA3OCwgODksIDY5LCA3MiwgMTI4LCA3OCwgODksIDY5LCAyMDAsIDc4LCA4OSwgNjksIDY5LCAxMjgsIAotICAgIDc4LCA4OSwgNjksIDEyOCwgNzgsIDg5LCAxOTYsIDc4LCA4OSwgNjcsIDY1LCAxMjgsIDc4LCA4OSwgNjUsIDY1LCAxMjgsIAotICAgIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCA3OCwgODcsIDEyOCwgNzgsIAotICAgIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCA4NCwgNzMsIDc2LCA3NiwgCi0gICAgODUsIDEyOCwgNzgsIDg1LCA4NCwgMTI4LCA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgCi0gICAgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgCi0gICAgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIDg1LCA3OCwgODUsIDIxOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCAKLSAgICA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIAotICAgIDY5LCA4MiwgMjA3LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjYsIDY5LCA4MiwgCi0gICAgMTI4LCA3OCwgODUsIDc3LCAxMjgsIDc4LCA4NSwgNzYsIDc2LCAxMjgsIDc4LCA4NSwgNzYsIDIwNCwgNzgsIDg1LCA3NSwgCi0gICAgODQsIDY1LCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNDksIDQ5LCAKLSAgICAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCAKLSAgICA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgODUsIAotICAgIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgCi0gICAgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgCi0gICAgNzksIDgwLCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIDEyOCwgCi0gICAgNzgsIDgyLCA2OSwgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIDY1LCAKLSAgICA4NCwgMTI4LCA3OCwgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODgsIDEyOCwgNzgsIDc5LCAKLSAgICA4NywgMTI4LCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAxMjgsIAotICAgIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIDc5LCA4NCwgCi0gICAgNjksIDcyLCA2OSwgNjUsIDE5NiwgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIDg0LCAKLSAgICA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgODMsIAotICAgIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgCi0gICAgNzksIDgyLCA3NywgNjUsIDIwNCwgNzgsIDc5LCAyMTAsIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAKLSAgICAxMjgsIDc4LCA3OSwgNzksIDEyOCwgNzgsIDc5LCA3OCwgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIAotICAgIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDY1LCAKLSAgICA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCA3NSwgNzIsIDg1LCA3NSwgCi0gICAgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIDY2LCA4MiwgNjksIDY1LCAKLSAgICAyMDMsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNzksIDc5LCAxMjgsIDc4LCAKLSAgICA3OCwgNzEsIDc5LCAxMjgsIDc4LCA3OCwgNzEsIDczLCA3MywgMTI4LCA3OCwgNzgsIDcxLCA3MywgMTI4LCA3OCwgNzgsIAotICAgIDcxLCA2NSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDEyOCwgNzgsIDc4LCA3MSwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIAotICAgIDc0LCA4OSwgODgsIDEyOCwgNzgsIDc0LCA4OSwgODQsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIDEyOCwgNzgsIDc0LCA4NSwgODgsIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDgwLCAxMjgsIDc4LCAKLSAgICA3NCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgNzksIAotICAgIDg4LCAxMjgsIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAxMjgsIAotICAgIDc4LCA3NCwgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCA3MywgCi0gICAgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIDczLCAKLSAgICA2OSwgODAsIDEyOCwgNzgsIDc0LCA3MywgNjksIDEyOCwgNzgsIDc0LCA3MywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgMTI4LCAKLSAgICA3OCwgNzQsIDY5LCAxMjgsIDc4LCA3NCwgMTI4LCA3OCwgNzMsIDg4LCAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCAKLSAgICA3OCwgNzMsIDgyLCA4NSwgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIDEyOCwgNzgsIDczLCA3OCwgNjksIDg0LCA4OSwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAxMjgsIDc4LCAKLSAgICA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDE5NywgNzgsIDczLCA3OCwgNjgsIDY1LCA1MCwgCi0gICAgMTI4LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDE3OCwgNzgsIDczLCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDczLCA3NSwgCi0gICAgNzIsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzMsIAotICAgIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIDY1LCA2OSwgCi0gICAgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3OCwgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAKLSAgICAxMjgsIDc4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIAotICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgCi0gICAgODUsIDc4LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDczLCA2OSwgODUsIAotICAgIDgwLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc4LCA3MywgCi0gICAgNjksIDg1LCA3OCwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzIsIAotICAgIDczLCA2OSwgODUsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3OCwgCi0gICAgNzMsIDY5LCA4NSwgMjA2LCA3OCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCAxMjgsIDc4LCA3MywgNjYsIDEyOCwgCi0gICAgNzgsIDczLCA2NSwgMTI4LCA3OCwgNzMsIDUwLCAxMjgsIDc4LCA3MiwgODUsIDY5LCAxMjgsIDc4LCA3MiwgNzQsIDY1LCAKLSAgICAxMjgsIDc4LCA3MiwgNjUsIDEyOCwgNzgsIDcyLCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCAKLSAgICA3OSwgODQsIDEyOCwgNzgsIDcxLCA4NSwgNzksIDEyOCwgNzgsIDcxLCA3OSwgODgsIDEyOCwgNzgsIDcxLCA3OSwgODQsIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgODAsIDEyOCwgNzgsIDcxLCA3OSwgNzgsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDcyLCAxMjgsIAotICAgIDc4LCA3MSwgNzksIDY5LCAyMDAsIDc4LCA3MSwgMjA3LCA3OCwgNzEsIDc1LCA2NSwgMTI4LCA3OCwgNzEsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgNzgsIDcxLCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MSwgNzMsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3MywgMTI4LCAKLSAgICA3OCwgNzEsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAxMjgsIAotICAgIDc4LCA3MSwgNzEsIDY1LCAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgCi0gICAgODAsIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgNzYsIDEyOCwgNzgsIDcxLCAKLSAgICA2OSwgMTI4LCA3OCwgNzEsIDY1LCA4OCwgMTI4LCA3OCwgNzEsIDY1LCA4NCwgMTI4LCA3OCwgNzEsIDY1LCAyMTEsIDc4LCAKLSAgICA3MSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIAotICAgIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCAKLSAgICA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg1LCA4NCwgODIsIDY1LCAyMDQsIDc4LCA2OSwgODUsIAotICAgIDg0LCA2OSwgODIsIDEyOCwgNzgsIDY5LCA4NCwgMTI4LCA3OCwgNjksIDIxMiwgNzgsIDY5LCA4MywgODQsIDY5LCAxOTYsIAotICAgIDc4LCA2OSwgODAsIDg0LCA4NSwgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODAsIDEyOCwgNzgsIDY5LCA3OSwgMTI4LCA3OCwgCi0gICAgNjksIDIwNywgNzgsIDY5LCA3OCwgNjUsIDc4LCA3OSwgMTI4LCA3OCwgNjksIDc4LCAxMjgsIDc4LCA2OSwgNzMsIDg0LCAKLSAgICA3MiwgNjksIDIxMCwgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgODYsIDE5NywgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzgsIDY5LCA3MSwgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY5LCAxMjgsIDc4LCA2OSwgNjYsIDY5LCA3OCwgCi0gICAgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3OCwgNjgsIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCAKLSAgICA3OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDEyOCwgNzgsIDY4LCA4NSwgODAsIDEyOCwgNzgsIAotICAgIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgCi0gICAgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzYsIDE5NywgNzgsIDY4LCA3MywgODgsIDEyOCwgNzgsIDY4LCA3MywgODQsIDEyOCwgCi0gICAgNzgsIDY4LCA3MywgODAsIDEyOCwgNzgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDY5LCAxMjgsIDc4LCAKLSAgICA2OCwgNzMsIDEyOCwgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIDY4LCA2OSwgNjksIAotICAgIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgMTI4LCA3OCwgNjgsIAotICAgIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCA3OCwgNjYsIDg5LCA4MiwgCi0gICAgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIDY2LCA4OSwgMTI4LCA3OCwgCi0gICAgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDY2LCAKLSAgICA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgNjYsIDc5LCA4OCwgMTI4LCAKLSAgICA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAxMjgsIDc4LCA2NiwgNzMsIAotICAgIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIDY2LCA3MywgMTI4LCA3OCwgCi0gICAgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAKLSAgICAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgODgsIDczLCA2NSwgMjA2LCA3OCwgNjUsIAotICAgIDg4LCAxMjgsIDc4LCA2NSwgODUsIDg0LCA3MiwgODMsIDEyOCwgNzgsIDY1LCA4NSwgNjgsIDczLCAyMTgsIDc4LCA2NSwgCi0gICAgODQsIDg1LCA4MiwgNjUsIDIwNCwgNzgsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzgsIDY1LCA4MywgNzUsIDY1LCAKLSAgICA4MCwgMjAxLCA3OCwgNjUsIDgzLCA3MiwgNzMsIDEyOCwgNzgsIDY1LCA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgODAsIDEyOCwgNzgsIAotICAgIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgCi0gICAgMTI4LCA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgCi0gICAgNzcsIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIDY1LCA3MSwgODIsIDIwMSwgCi0gICAgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCAKLSAgICA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2NiwgNzYsIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDgzLCA3MywgNzUsIAotICAgIDg5LCA2NSwgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDc1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgCi0gICAgNjUsIDY1LCA3MywgMTI4LCA3OCwgNjUsIDY1LCAxMjgsIDc4LCA2NSwgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA0NSwgCi0gICAgNjcsIDgyLCA2OSwgMTk3LCA3OCwgNDUsIDY1LCA4MiwgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgODQsIDEyOCwgCi0gICAgNzcsIDg5LCA4MywgNzYsIDczLCA4NCwgNjksIDEyOCwgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAxMjgsIDc3LCAKLSAgICA4OSwgMTI4LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgODcsIDc5LCAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCAKLSAgICA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgNzcsIDg3LCA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgMjE1LCA3NywgODYsIDEyOCwgNzcsIDIxNCwgNzcsIDg1LCA4OCwgCi0gICAgMTI4LCA3NywgODUsIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgNzcsIDg1LCA4NSwgODIsIDY4LCAKLSAgICA3MiwgNjUsIDc0LCAxOTMsIDc3LCA4NSwgODQsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDY3LCAxMjgsIDc3LCA4NSwgODMsIAotICAgIDczLCAxOTUsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgCi0gICAgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgCi0gICAgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgNjUsIDc3LCAxMjgsIDc3LCAKLSAgICA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgNzcsIDg1LCA3OSwgODAsIAotICAgIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCA3MiwgCi0gICAgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIAotICAgIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgCi0gICAgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIAotICAgIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgCi0gICAgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAKLSAgICAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIDEyOCwgCi0gICAgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCAKLSAgICA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIAotICAgIDEyOCwgNzcsIDc5LCA4OCwgMTI4LCA3NywgNzksIDg2LCA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIDEyOCwgNzcsIAotICAgIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCA2OCwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgODQsIDEyOCwgCi0gICAgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIAotICAgIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCA3OSwgCi0gICAgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCAKLSAgICA3OSwgNzksIDEyOCwgNzcsIDc5LCA3OCwgODQsIDcyLCAxMjgsIDc3LCA3OSwgNzgsIDg0LCAyMDAsIDc3LCA3OSwgNzgsIAotICAgIDc5LCA4MywgODQsIDY1LCA2NiwgNzYsIDE5NywgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCA3OSwgCisgICAgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCAKKyAgICA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIAorICAgIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgCisgICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCAKKyAgICA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIAorICAgIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIAorICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgCisgICAgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgCisgICAgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIAorICAgIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgCisgICAgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgCisgICAgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAKKyAgICAxOTksIDgyLCA2NSwgNzMsIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIDc5LCA4NywgMTI4LCA4MiwgNjUsIAorICAgIDczLCA3NiwgODcsIDY1LCA4OSwgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAyMTcsIDgyLCA2NSwgNzMsIDc2LCAKKyAgICAxMjgsIDgyLCA2NSwgNzMsIDY4LCAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDczLCAxMjgsIDgyLCAKKyAgICA2NSwgNzIsIDc3LCA2NSwgODQsIDg1LCA3NiwgNzYsIDY1LCAyMDAsIDgyLCA2NSwgNzAsIDY5LCAxMjgsIDgyLCA2NSwgNjksIAorICAgIDc3LCAxMjgsIDgyLCA2NSwgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgCisgICAgMTI4LCA4MiwgNjUsIDY4LCA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIAorICAgIDgyLCA2NSwgNjcsIDgxLCA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgCisgICAgNzMsIDg0LCAxMjgsIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAKKyAgICAxMjgsIDgyLCA2NSwgNjUsIDEyOCwgODIsIDY1LCA1MSwgMTI4LCA4MiwgNjUsIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDU3LCAKKyAgICAxMjgsIDgyLCA0OCwgNTAsIDU2LCAxMjgsIDgyLCA0OCwgNTAsIDU1LCAxMjgsIDgyLCA0OCwgNTAsIDU0LCAxMjgsIDgyLCAKKyAgICA0OCwgNTAsIDUzLCAxMjgsIDgyLCA0OCwgNTAsIDUyLCAxMjgsIDgyLCA0OCwgNTAsIDUxLCAxMjgsIDgyLCA0OCwgNTAsIAorICAgIDUwLCAxMjgsIDgyLCA0OCwgNTAsIDQ5LCAxMjgsIDgyLCA0OCwgNTAsIDQ4LCAxMjgsIDgyLCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDgyLCA0OCwgNDksIDU2LCAxMjgsIDgyLCA0OCwgNDksIDU1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCA2NSwgMTI4LCA4MiwgCisgICAgNDgsIDQ5LCA1NCwgMTI4LCA4MiwgNDgsIDQ5LCA1MywgMTI4LCA4MiwgNDgsIDQ5LCA1MiwgMTI4LCA4MiwgNDgsIDQ5LCAKKyAgICA1MSwgMTI4LCA4MiwgNDgsIDQ5LCA1MCwgMTI4LCA4MiwgNDgsIDQ5LCA0OSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgNjUsIAorICAgIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDEyOCwgODIsIDQ4LCA0OCwgNTcsIDEyOCwgODIsIDQ4LCA0OCwgNTYsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTUsIDEyOCwgODIsIDQ4LCA0OCwgNTQsIDEyOCwgODIsIDQ4LCA0OCwgNTMsIDEyOCwgODIsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDY2LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MiwgNDgsIDQ4LCAKKyAgICA1MSwgMTI4LCA4MiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTAsIDEyOCwgODIsIDQ4LCA0OCwgNDksIAorICAgIDEyOCwgODIsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDgxLCA4OSwgODgsIDEyOCwgODEsIDg5LCA4NSwgMTI4LCA4MSwgODksIAorICAgIDg0LCAxMjgsIDgxLCA4OSwgODIsIDg4LCAxMjgsIDgxLCA4OSwgODIsIDEyOCwgODEsIDg5LCA4MCwgMTI4LCA4MSwgODksIAorICAgIDc5LCAxMjgsIDgxLCA4OSwgNzMsIDEyOCwgODEsIDg5LCA2OSwgNjksIDEyOCwgODEsIDg5LCA2OSwgMTI4LCA4MSwgODksIAorICAgIDY1LCA2NSwgMTI4LCA4MSwgODksIDY1LCAxMjgsIDgxLCA4OSwgMTI4LCA4MSwgODcsIDczLCAxMjgsIDgxLCA4NywgNjksIAorICAgIDY5LCAxMjgsIDgxLCA4NywgNjksIDEyOCwgODEsIDg3LCA2NSwgNjUsIDEyOCwgODEsIDg3LCA2NSwgMTI4LCA4MSwgODUsIAorICAgIDg4LCAxMjgsIDgxLCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgODYsIDEyOCwgODEsIDg1LCA4NSwgMTI4LCA4MSwgODUsIAorICAgIDg0LCAxMjgsIDgxLCA4NSwgODMsIDcyLCA4MywgNzIsIDY1LCA4OSwgNjUsIDEyOCwgODEsIDg1LCA4MiwgODgsIDEyOCwgCisgICAgODEsIDg1LCA4MiwgMTI4LCA4MSwgODUsIDgwLCAxMjgsIDgxLCA4NSwgNzksIDg4LCAxMjgsIDgxLCA4NSwgNzksIDg0LCAKKyAgICAxOTcsIDgxLCA4NSwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDc5LCA4NCwgMTI4LCA4MSwgODUsIAorICAgIDc5LCA4MCwgMTI4LCA4MSwgODUsIDc5LCAxMjgsIDgxLCA4NSwgNzUsIDEyOCwgODEsIDg1LCA3MywgNzgsIDg0LCA2OSwgCisgICAgODMsIDgzLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjgsIDczLCA2NywgNjksIDgzLCA3MywgNzcsIAorICAgIDE5MywgODEsIDg1LCA3MywgNzgsIDY3LCA4NSwgNzgsIDg4LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA2NSwgODIsIDczLCA4NSwgCisgICAgMjExLCA4MSwgODUsIDczLCA3NiwgNzYsIDEyOCwgODEsIDg1LCA3MywgNjcsIDIwMywgODEsIDg1LCA3MywgMTI4LCA4MSwgCisgICAgODUsIDcwLCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgNjksIDE5NiwgODEsIDg1LCA2OSwgODMsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCAyMDYsIDgxLCA4NSwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MSwgODUsIDY5LCA2OSwgMjA2LCA4MSwgODUsIDY5LCAxMjgsIDgxLCA4NSwgNjYsIDg1LCA4NCwgODMsIDEyOCwgCisgICAgODEsIDg1LCA2NSwgODQsIDY5LCA4MiwgNzgsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgODMsIAorICAgIDEyOCwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDIxMSwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDEyOCwgCisgICAgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgMjEwLCA4MSwgODUsIDY1LCA3OCwgODQsIDczLCA4NCwgMjE3LCA4MSwgODUsIDY1LCAKKyAgICA2OCwgODIsIDg1LCA4MCwgNzYsIDE5NywgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgxLCA4NSwgNjUsIAorICAgIDY4LCA4MiwgNjUsIDc4LCAyMTIsIDgxLCA4NSwgNjUsIDY4LCAxMjgsIDgxLCA4NSwgNjUsIDE5NiwgODEsIDg1LCA2NSwgCisgICAgMTI4LCA4MSwgODUsIDEyOCwgODEsIDIwOCwgODEsIDc5LCA4OCwgMTI4LCA4MSwgNzksIDg0LCAxMjgsIDgxLCA3OSwgODAsIAorICAgIDcyLCAxMjgsIDgxLCA3OSwgODAsIDY1LCAxMjgsIDgxLCA3OSwgODAsIDEyOCwgODEsIDc5LCA3OSwgMTI4LCA4MSwgNzksIAorICAgIDIwNywgODEsIDc5LCA3MCwgMTI4LCA4MSwgNzksIDE5OCwgODEsIDc5LCA2NSwgMTI4LCA4MSwgNzksIDEyOCwgODEsIDc4LCAKKyAgICAxMjgsIDgxLCA3MywgODgsIDEyOCwgODEsIDczLCA4NCwgODMsIDY1LCAxMjgsIDgxLCA3MywgODQsIDEyOCwgODEsIDczLCAKKyAgICA4MCwgMTI4LCA4MSwgNzMsIDczLCAxMjgsIDgxLCA3MywgNjksIDg4LCAxMjgsIDgxLCA3MywgNjksIDg0LCAxMjgsIDgxLCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDgxLCA3MywgNjksIDEyOCwgODEsIDczLCAxMjgsIDgxLCA3MiwgODcsIDczLCAxMjgsIDgxLCAKKyAgICA3MiwgODcsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2OSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgNjUsIDEyOCwgODEsIAorICAgIDcyLCA4NywgNjUsIDEyOCwgODEsIDcyLCA4NSwgMTI4LCA4MSwgNzIsIDc5LCAxMjgsIDgxLCA3MiwgNzMsIDEyOCwgODEsIAorICAgIDcyLCA2OSwgNjksIDEyOCwgODEsIDcyLCA2OSwgMTI4LCA4MSwgNzIsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDY1LCAxMjgsIAorICAgIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgCisgICAgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgCisgICAgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCAKKyAgICA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgCisgICAgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgCisgICAgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgCisgICAgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCAKKyAgICA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIAorICAgIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCAKKyAgICA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCAKKyAgICA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCAKKyAgICA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCAKKyAgICA4NCwgODIsIDY5LCA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAxMjgsIDgwLCA4NSwgCisgICAgMjEyLCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3NSwgNjUsIAorICAgIDEyOCwgODAsIDg1LCA4MywgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgODUsIDgyLCA4MywgCisgICAgNjksIDEyOCwgODAsIDg1LCA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIDEyOCwgODAsIDg1LCAKKyAgICA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIDg1LCA4MCwgMTI4LCAKKyAgICA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIDgwLCA4NSwgNzgsIAorICAgIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgODUsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA4MCwgODUsIDc3LCAKKyAgICA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIDczLCAxOTUsIDgwLCAKKyAgICA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIDg1LCAxMjgsIDgwLCAKKyAgICA4NCwgNzIsIDY1LCA3MiwgMTkzLCA4MCwgODQsIDY5LCAxMjgsIDgwLCA4MywgNzMsIDc2LCAyMDEsIDgwLCA4MywgNzMsIAorICAgIDcwLCA3MywgODMsIDg0LCA3OSwgODMsIDg5LCA3OCwgNjUsIDcxLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgNzAsIDczLCAKKyAgICA4MywgODQsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgCisgICAgNzAsIDczLCA4MywgODQsIDc5LCAyMDYsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCA3OSwgNzYsIDg5LCA3MSwgNzMsIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDgzLCA3MywgMTI4LCA4MCwgODMsIDEyOCwgODAsIDgyLCA3OSwgODYsIDY5LCAxMjgsIAorICAgIDgwLCA4MiwgNzksIDg0LCA3OSwgODYsIDY1LCA4MiwgODksIDIxMSwgODAsIDgyLCA3OSwgODQsIDc5LCAyMTEsIDgwLCA4MiwgCisgICAgNzksIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIAorICAgIDgyLCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgODAsIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCAKKyAgICA4MiwgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgCisgICAgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIAorICAgIDEyOCwgODAsIDgyLCA3OSwgNzAsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAKKyAgICAxMjgsIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDIxMiwgODAsIDgyLCA3MywgODYsIDY1LCA4NCwgNjksIDEyOCwgODAsIAorICAgIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIDgzLCAKKyAgICAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgNjcsIAorICAgIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCA4MiwgCisgICAgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA4MCwgODIsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCA2OSwgODAsIDc5LCA3OCwgCisgICAgNjgsIDY5LCA4MiwgNjUsIDc4LCA2NywgNjksIDEyOCwgODAsIDgyLCA2OSwgNzgsIDc1LCA3MiwgNjUsIDEyOCwgODAsIDgyLCAKKyAgICA2OSwgNzAsIDY1LCA2NywgMTk3LCA4MCwgODIsIDY5LCA2NywgNzMsIDgwLCA3MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODAsIAorICAgIDgyLCA2OSwgNjcsIDY5LCA2OCwgNzMsIDc4LCAxOTksIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCA4MywgMTI4LCA4MCwgCisgICAgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMjExLCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgMTk2LCA4MCwgODIsIDY5LCAKKyAgICA2NywgNjksIDY4LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCAxOTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIAorICAgIDczLCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgMjAxLCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgCisgICAgNzksIDg5LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKKyAgICA4NSwgNzksIDc4LCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgMjA2LCA4MCwgODIsIDY1LCA3NywgNDUsIAorICAgIDY2LCA2OSwgNzMsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIDIwMSwgODAsIDgyLCA2NSwgNzcsIDEyOCwgCisgICAgODAsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDEyOCwgODAsIDgwLCA4NiwgMTI4LCA4MCwgODAsIDc3LCAxMjgsIDgwLCA4MCwgCisgICAgNjUsIDEyOCwgODAsIDc5LCA4OSwgMTI4LCA4MCwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODcsIDY5LCA4MiwgMjExLCA4MCwgCisgICAgNzksIDg3LCA2OSwgODIsIDEyOCwgODAsIDc5LCA4NywgNjgsIDY5LCA4MiwgNjksIDE5NiwgODAsIDc5LCA4NywgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA4MCwgNzksIDg1LCA3OCwgMTk2LCA4MCwgNzksIDg1LCA3NiwgODQsIDgyLCAyMTcsIDgwLCA3OSwgODUsIAorICAgIDY3LCA3MiwgMTI4LCA4MCwgNzksIDg0LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3OSwgODQsIDY1LCA2NiwgNzYsIDE5NywgCisgICAgODAsIDc5LCAyMTIsIDgwLCA3OSwgODMsIDg0LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgMjA2LCA4MCwgNzksIDgzLCAKKyAgICA4NCwgNjYsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDgzLCA4NCwgNjUsIDIwNCwgODAsIDc5LCA4MywgODQsIDEyOCwgODAsIAorICAgIDc5LCA4MywgMjEyLCA4MCwgNzksIDgzLCA4MywgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNzksIDgyLCA4MiwgCisgICAgNjksIDY3LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgMjExLCA4MCwgNzksIDgwLCAKKyAgICA4MCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODAsIDEyOCwgODAsIDc5LCAyMDgsIDgwLCA3OSwgNzksIDY4LCA3NiwgNjksIAorICAgIDEyOCwgODAsIDc5LCA3OSwgMTI4LCA4MCwgNzksIDc4LCA2OCwgNzksIDEyOCwgODAsIDc5LCAyMDYsIDgwLCA3OSwgNzYsIAorICAgIDczLCA4MywgNzIsIDEyOCwgODAsIDc5LCA3NiwgNzMsIDY3LCAxOTcsIDgwLCA3OSwgNzYsIDIwMSwgODAsIDc5LCA3NiwgCisgICAgNjksIDEyOCwgODAsIDc5LCA3NiwgMTk3LCA4MCwgNzksIDc1LCA4MiwgODksIDg0LCA3MywgNjksIDEyOCwgODAsIDc5LCAKKyAgICA3NSwgNzksIDc0LCA3MywgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDIxMSwgODAsIDc5LCA3MywgNzgsIDg0LCA3OSwgCisgICAgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDgwLCAKKyAgICA3OSwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgNzksIDczLCA3OCwgMjEyLCA4MCwgNzksIDY5LCA4NCwgODIsIDIxNywgODAsIAorICAgIDc5LCA2OSwgODQsIDczLCAxOTUsIDgwLCA3OSwgNjgsIDY1LCA4NCwgODUsIDgzLCAxMjgsIDgwLCA3OSwgNjUsIDEyOCwgCisgICAgODAsIDc5LCAxMjgsIDgwLCAyMDcsIDgwLCA3OCwgNjksIDg1LCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MCwgNzYsIDg1LCAKKyAgICA4NCwgNzksIDEyOCwgODAsIDc2LCA4NSwgODMsIDQ1LCA3NywgNzMsIDc4LCA4NSwgMjExLCA4MCwgNzYsIDg1LCA4MywgCisgICAgMTI4LCA4MCwgNzYsIDg1LCA4MiwgNjUsIDc2LCAxMjgsIDgwLCA3NiwgODUsIDc3LCA2OSwgMTk2LCA4MCwgNzYsIDg1LCAKKyAgICA3NywgMTI4LCA4MCwgNzYsIDg1LCA3NSwgMTI4LCA4MCwgNzYsIDg1LCA3MSwgMTI4LCA4MCwgNzYsIDc5LCA4NywgMTI4LCAKKyAgICA4MCwgNzYsIDc5LCA4MCwgNzIsIDg1LCAxMjgsIDgwLCA3NiwgNjksIDg0LCA3MiwgODIsIDc5LCA3OCwgMTI4LCA4MCwgNzYsIAorICAgIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIDY1LCA3OCwgCisgICAgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgNjUsIDc1LCAKKyAgICAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCA2OCwgNjksIAorICAgIDIxMCwgODAsIDc2LCA2NSwgNjcsIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIDY3LCA2NSwgCisgICAgODQsIDc5LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgODcsIDgyLCAKKyAgICAxMjgsIDgwLCA3MywgODQsIDY3LCA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIAorICAgIDgyLCAyMDMsIDgwLCA3MywgODQsIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA3MiwgMTI4LCA4MCwgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgMTI4LCAKKyAgICA4MCwgNzMsIDgyLCA3MywgMTk5LCA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCA3MywgNzgsIAorICAgIDcxLCAxMjgsIDgwLCA3MywgODAsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIDgwLCA2NSwgCisgICAgNjksIDc3LCA2NiwgNjUsIDEyOCwgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCAKKyAgICA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCA3OCwgNjUsIAorICAgIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgMTk3LCA4MCwgCisgICAgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA3NSwgNzksIAorICAgIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDgzLCAKKyAgICA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCAKKyAgICA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAKKyAgICA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgCisgICAgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDcyLCA3MywgCisgICAgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCAyMDgsIAorICAgIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgODAsIDczLCAKKyAgICA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCA3OSwgODIsIAorICAgIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIDIwMSwgODAsIAorICAgIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgMjEwLCA4MCwgCisgICAgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDgzLCAKKyAgICAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIDEyOCwgODAsIAorICAgIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIDc4LCA4NCwgCisgICAgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgNzIsIDczLCAKKyAgICA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIDcyLCA3MywgCisgICAgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKKyAgICA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIDczLCA2OSwgCisgICAgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAyMDAsIDgwLCAKKyAgICA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgODAsIDcyLCAKKyAgICA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCA4OSwgNzgsIAorICAgIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIDcyLCA2NSwgCisgICAgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgODAsIAorICAgIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgCisgICAgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCA4NCwgCisgICAgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIDg1LCAKKyAgICA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgNjUsIAorICAgIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIDEyOCwgCisgICAgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIDgwLCAKKyAgICA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgODYsIAorICAgIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDEyOCwgCisgICAgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgODMsIDY5LCAKKyAgICA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgCisgICAgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgNjksIDgyLCAKKyAgICA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDczLCAxMjgsIAorICAgIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgODIsIDc3LCAKKyAgICA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIAorICAgIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIDgzLCA4MywgCisgICAgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgMTI4LCAKKyAgICA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCA2OSwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDgyLCAKKyAgICA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgCisgICAgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCAKKyAgICA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIAorICAgIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgCisgICAgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAKKyAgICAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIAorICAgIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIAorICAgIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgCisgICAgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCAKKyAgICA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIAorICAgIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgCisgICAgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgNjcsIDE5NywgODAsIDY4LCAxMjgsIDgwLCA2NywgMTI4LCA4MCwgCisgICAgNjUsIDkwLCA2OSwgODIsIDEyOCwgODAsIDY1LCA4OSwgNjksIDgyLCA3OSwgNzUsIDEyOCwgODAsIDY1LCA4OSwgNjUsIDc4LCAKKyAgICA3OCwgNjUsIDEyOCwgODAsIDY1LCA4OSwgMTI4LCA4MCwgNjUsIDg4LCAxMjgsIDgwLCA2NSwgODcsIDc4LCAxMjgsIDgwLCAKKyAgICA2NSwgMjE1LCA4MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgODAsIDY1LCA4NCwgODQsIDY5LCA4MiwgNzgsIAorICAgIDEyOCwgODAsIDY1LCA4NCwgNzIsIDY1LCA3NywgNjUsIDgzLCA2NSwgODQsIDEyOCwgODAsIDY1LCA4NCwgMjAwLCA4MCwgCisgICAgNjUsIDg0LCA2NSwgNzUsIDEyOCwgODAsIDY1LCA4NCwgNjUsIDcyLCAxMjgsIDgwLCA2NSwgODQsIDEyOCwgODAsIDY1LCAKKyAgICA4MywgODUsIDgxLCAxMjgsIDgwLCA2NSwgODMsIDgzLCA4MCwgNzksIDgyLCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIAorICAgIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA4NSwgODAsIDQ1LCA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgODAsIDY1LCAKKyAgICA4MywgODMsIDczLCA4NiwgNjksIDQ1LCA4MCwgODUsIDc2LCA3NiwgNDUsIDY4LCA3OSwgODcsIDc4LCA0NSwgNzksIDg1LCAKKyAgICA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDcyLCA4NCwgNjUsIDEyOCwgODAsIDY1LCA4MywgNzIsIDY1LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDgzLCA2OSwgODEsIDEyOCwgODAsIDY1LCA4MiwgODUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDg0LCAKKyAgICAyMTcsIDgwLCA2NSwgODIsIDg0LCA3OCwgNjksIDgyLCA4MywgNzIsIDczLCAyMDgsIDgwLCA2NSwgODIsIDg0LCA3MywgNjUsIAorICAgIDc2LCA3NiwgODksIDQ1LCA4MiwgNjksIDY3LCA4OSwgNjcsIDc2LCA2OSwgMTk2LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCAKKyAgICAyMDQsIDgwLCA2NSwgODIsIDg0LCA3MiwgNzMsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDIxMiwgODAsIDY1LCA4MiwgNzMsIAorICAgIDY3LCA3MiwgNzksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA4MywgODQsIDczLCA3MSwgNzcsIDY5LCA3OCwgNzksIDIwNiwgCisgICAgODAsIDY1LCA4MiwgNjksIDgyLCA2OSwgNzgsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIAorICAgIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCAyMTEsIDgwLCA2NSwgODIsIDY1LCA4MCwgCisgICAgNzIsIDgyLCA2NSwgODMsIDE5NywgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCA3OSwgNzEsIDgyLCA2NSwgNzcsIAorICAgIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc2LCA3NiwgNjksIDc2LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCAKKyAgICAyMDQsIDgwLCA2NSwgODIsIDY1LCA3NSwgNzYsIDczLCA4NCwgNzMsIDc1LCA3MywgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzUsIAorICAgIDc2LCA3MywgODQsIDczLCA3NSwgMjAxLCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgMTkzLCA4MCwgCisgICAgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDcyLCA3OSwgODMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIAorICAgIDgwLCA3MiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzEsIDgyLCA2NSwgODAsIDIwMCwgODAsIDY1LCA4MiwgNjUsIDEyOCwgCisgICAgODAsIDY1LCA4MiwgMTI4LCA4MCwgNjUsIDgwLCA4OSwgODIsIDg1LCA4MywgMTI4LCA4MCwgNjUsIDgwLCA2OSwgODIsIDY3LCAKKyAgICA3NiwgNzMsIDgwLCAxMjgsIDgwLCA2NSwgODAsIDY5LCAyMTAsIDgwLCA2NSwgODAsIDEyOCwgODAsIDY1LCAyMDgsIDgwLCAKKyAgICA2NSwgMjA3LCA4MCwgNjUsIDc4LCA4OSwgODUsIDc1LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNzMsIDc1LCA4NSwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjksIDY3LCA2OSwgNzUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3OCwgNzEsIDcxLCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc4LCA4OSwgNjUsIDc1LCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODQsIDczLCAxMjgsIAorICAgIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDgzLCAKKyAgICA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgODAsIDY1LCA3OCwgNzksIDc4LCA3MSwgNzksIDc4LCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzksIDc2LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4NywgNzMsIDgzLCA2NSwgNjgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDgyLCA2NSwgCisgICAgNzgsIDcxLCA3NSwgNjksIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3OSwgNzYsIDY1LCA4NCwgMTI4LCA4MCwgNjUsIDc4LCAKKyAgICA3MSwgNzYsIDY1LCA4OSwgNjUsIDgyLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NSwgNzksIDc4LCAxMjgsIDgwLCA2NSwgNzgsIAorICAgIDcxLCA3NSwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3MiwgODUsIDc2LCA4NSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA2OSwgODUsIDc2LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA2OCwgMTkzLCAKKyAgICA4MCwgNjUsIDc4LCA2NSwgNjksIDc2LCA2NSwgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzcsIAorICAgIDg1LCA3OCwgNzEsIDc1LCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3NywgODUsIDY4LCA4MCwgNzksIDY4LCAxMjgsIDgwLCA2NSwgCisgICAgNzcsIDgzLCA3MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNzcsIDgwLCA3MiwgODksIDc2LCA3MywgNjUsIDIwNiwgODAsIDY1LCAKKyAgICA3NywgNzMsIDc4LCA3MSwgNzUsIDY1LCA3NiwgMTI4LCA4MCwgNjUsIDc3LCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjUsIAorICAgIDc3LCA2OSwgNzgsIDY5LCA3OCwgNzEsIDEyOCwgODAsIDY1LCA3NywgNjUsIDY4LCA2NSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgCisgICAgNjUsIDY5LCA3MiwgMTI4LCA4MCwgNjUsIDc2LCA4NSwgODQsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDc5LCA2NywgNzIsIDc1LCAKKyAgICA2NSwgMTI4LCA4MCwgNjUsIDc2LCAyMDUsIDgwLCA2NSwgNzYsIDc2LCA2NSwgODcsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIAorICAgIDc2LCA2NSwgODMsIDEyOCwgODAsIDY1LCA3NiwgNjksIDg0LCA4NCwgNjksIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg1LCA3OCwgCisgICAgMTk5LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCA3NiwgNzMsIDkwLCA2OSwgMTk2LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAKKyAgICA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3NiwgNjUsIDg0LCA2NSwgMjA0LCA4MCwgNjUsIAorICAgIDc1LCA4MCwgNjUsIDIwMywgODAsIDY1LCA3MywgODksIDY1LCA3OCwgNzgsIDc5LCA3MywgMTI4LCA4MCwgNjUsIDczLCA4MiwgCisgICAgODQsIDcyLCA4MiwgNjUsIDEyOCwgODAsIDY1LCA3MywgODIsIDY5LCAxOTYsIDgwLCA2NSwgNzIsIDc2LCA2NSwgODYsIAorICAgIDIwMSwgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgODAsIDY1LCA2OCwgNzcsIDE5MywgODAsIAorICAgIDY1LCA2OCwgMTkzLCA4MCwgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNjcsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgwLCA2NSwgCisgICAgNjcsIDc1LCA2NSwgNzEsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDg0LCA4NSwgMTI4LCA4MCwgNjUsIDY1LCA4MywgNjksIDc4LCAKKyAgICA4NCwgNzksIDEyOCwgODAsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA4MCwgNjUsIDY1LCA3NywgMTI4LCA4MCwgNjUsIAorICAgIDY1LCA3MywgMTI4LCA4MCwgNjUsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDgwLCA2NSwgNjUsIDEyOCwgCisgICAgODAsIDUwLCAxMjgsIDgwLCA0OCwgNDksIDQ5LCAxMjgsIDgwLCA0OCwgNDksIDQ4LCAxMjgsIDgwLCA0OCwgNDgsIDU3LCAKKyAgICAxMjgsIDgwLCA0OCwgNDgsIDU2LCAxMjgsIDgwLCA0OCwgNDgsIDU1LCAxMjgsIDgwLCA0OCwgNDgsIDU0LCAxMjgsIDgwLCAKKyAgICA0OCwgNDgsIDUzLCAxMjgsIDgwLCA0OCwgNDgsIDUyLCAxMjgsIDgwLCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA4MCwgNDgsIAorICAgIDQ4LCA1MSwgMTI4LCA4MCwgNDgsIDQ4LCA1MCwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgODAsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzksIDg5LCA4MiwgNjUsIDc4LCA3MywgODMsIDc3LCAxOTMsIDc5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzksIDg4LCA3MywgNjUsIDEyOCwgNzksIDg4LCA3MywgMTkzLCA3OSwgODgsIDY5LCA3MywgNjUsIDIwMSwgNzksIAorICAgIDg4LCA2OSwgNzMsIDE5MywgNzksIDg2LCA2OSwgODIsIDgyLCA3MywgNjgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgCisgICAgNzksIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCAKKyAgICA4OSwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNzYsIDY1LCA4MCwgODAsIDczLCA3OCwgMTk5LCA3OSwgODYsIDY5LCA4MiwgNzYsIAorICAgIDY1LCA3MywgNjgsIDEyOCwgNzksIDg2LCA2OSwgODIsIDY2LCA2NSwgODIsIDEyOCwgNzksIDg2LCA2NSwgMjA0LCA3OSwgCisgICAgODYsIDEyOCwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIDE5NiwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzksIDg1LCA4NCwgNjksIDIxMCwgNzksIDg1LCA4NCwgNjYsIDc5LCAyMTYsIDc5LCA4NSwgNzgsIDc1LCA3MywgCisgICAgMTkzLCA3OSwgODUsIDc4LCA2NywgNjksIDEyOCwgNzksIDg1LCA3OCwgNjcsIDE5NywgNzksIDg0LCA4NSwgMTI4LCA3OSwgCisgICAgODQsIDg0LCA2NSwgODYsIDE5MywgNzksIDg0LCA4NCwgMTI4LCA3OSwgODQsIDcyLCA2NSwgNzYsIDY1LCAyMDYsIDc5LCAKKyAgICA4NCwgNzIsIDY1LCA3NiwgMTI4LCA3OSwgODMsIDc3LCA2NSwgNzgsIDg5LCAxOTMsIDc5LCA4MiwgODQsIDcyLCA3OSwgNzEsIAorICAgIDc5LCA3OCwgNjUsIDIwNCwgNzksIDgyLCA4NCwgNzIsIDc5LCA2OCwgNzksIDIxNiwgNzksIDgyLCA3OCwgNjUsIDg0LCAKKyAgICAxOTcsIDc5LCA4MiwgNzgsIDY1LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgCisgICAgMjEyLCA3OSwgODIsIDc1LCA3MiwgNzksIDIwNiwgNzksIDgyLCA3MywgNzEsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKKyAgICA3MywgNzEsIDczLCA3OCwgMTI4LCA3OSwgODIsIDY5LCA0NSwgNTAsIDEyOCwgNzksIDgyLCA2OCwgNzMsIDc4LCA2NSwgCisgICAgMjA0LCA3OSwgODIsIDY3LCA3MiwgNzMsIDY4LCAxMjgsIDc5LCA4MiwgNjUsIDc4LCA3MSwgMTk3LCA3OSwgODAsIDg0LCAKKyAgICA3MywgNzksIDIwNiwgNzksIDgwLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3OSwgODAsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgODMsIDczLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgODAsIDgwLCA3OSwgCisgICAgODMsIDczLCA3OCwgMTk5LCA3OSwgODAsIDgwLCA3OSwgODMsIDY5LCAxMjgsIDc5LCA4MCwgNzIsIDczLCA4NSwgNjcsIDcyLCAKKyAgICA4NSwgODMsIDEyOCwgNzksIDgwLCA2OSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIAorICAgIDc5LCAyMTAsIDc5LCA4MCwgNjksIDc4LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDQ1LCA4MCwgMTI4LCA3OSwgCisgICAgODAsIDY5LCA3OCwgNDUsIDc5LCA4NSwgODQsIDc2LCA3MywgNzgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzIsIAorICAgIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDc5LCA4MCwgNjksIDc4LCA0NSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3MywgODQsIDQ1LCAKKyAgICA3OSwgODUsIDg0LCA4MCwgODUsIDIxMiwgNzksIDgwLCA2OSwgMjA2LCA3OSwgNzksIDkwLCA2OSwgMTI4LCA3OSwgNzksIAorICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIDg1LCAxMjgsIDc5LCA3OSwgCisgICAgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzgsIDg1LCAxMjgsIDc5LCAKKyAgICA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIDgyLCAxMjgsIDc5LCA3OCwgNjksIAorICAgIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgNzksIDc4LCA2OSwgNDUsIDg0LCA3MiwgCisgICAgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzksIDc4LCA2NywgNzksIDc3LCAKKyAgICA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgODMsIDgzLCA3MywgNzksIDIwNiwgNzksIAorICAgIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA3OSwgNzcsIDY5LCA3MSwgCisgICAgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCA3OSwgNzYsIDczLCAKKyAgICA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgNjgsIDEyOCwgNzksIDc1LCA4NCwgMjA3LCAKKyAgICA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgNzksIDc0LCA3MywgNjYsIDg3LCA2NSwgCisgICAgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCA3OSwgNzIsIDc3LCAxMjgsIDc5LCA3MiwgCisgICAgMjA1LCA3OSwgNzIsIDEyOCwgNzksIDcxLCA4MiwgNjksIDEyOCwgNzksIDcxLCA3OSwgNzgsIDY5LCA3NSwgMTI4LCA3OSwgCisgICAgNzEsIDc5LCA3OCwgNjksIDIwMywgNzksIDcxLCA3MiwgNjUsIDIwNSwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgODIsIAorICAgIDEyOCwgNzksIDcwLCA3MCwgNzMsIDY3LCA2OSwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDE5NywgNzksIDcwLCA3MCwgCisgICAgMTI4LCA3OSwgNjksIDc1LCAxMjgsIDc5LCA2OCwgNjksIDc4LCAxMjgsIDc5LCA2OCwgMTk2LCA3OSwgNjcsIDg0LCA3OSwgCisgICAgODAsIDg1LCA4MywgMTI4LCA3OSwgNjcsIDg0LCA3OSwgNjYsIDY5LCA4MiwgMTI4LCA3OSwgNjcsIDIxMCwgNzksIDY3LCAKKyAgICA3NiwgNzksIDY3LCA3NSwgMTI4LCA3OSwgNjcsIDY3LCA3NiwgODUsIDgzLCA3MywgNzksIDc4LCAxMjgsIDc5LCA2NiwgODMsIAorICAgIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDc5LCA3NiwgMjExLCA3OSwgNjYsIDc5LCAKKyAgICAyMDQsIDc5LCA2NiwgNzksIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCA2NiwgNzYsIDczLCA4MSwgODUsIDE5NywgNzksIAorICAgIDY2LCA3NCwgNjksIDY3LCAyMTIsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIDEyOCwgNzksIDY2LCA2OSwgNzYsIDc5LCA4MywgCisgICAgMTI4LCA3OSwgNjYsIDEyOCwgNzksIDY1LCA4OSwgMTI4LCA3OSwgNjUsIDc1LCAxMjgsIDc5LCA2NSwgNjYsIDc5LCA2NSwgCisgICAgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzksIDE5MywgNzksIDQ4LCA1MywgNDksIDEyOCwgNzksIDQ4LCA1MywgNDgsIDY2LCAKKyAgICAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgMTI4LCA3OSwgNDgsIDUyLCA1NywgMTI4LCAKKyAgICA3OSwgNDgsIDUyLCA1NiwgMTI4LCA3OSwgNDgsIDUyLCA1NSwgMTI4LCA3OSwgNDgsIDUyLCA1NCwgMTI4LCA3OSwgNDgsIAorICAgIDUyLCA1MywgMTI4LCA3OSwgNDgsIDUyLCA1MiwgMTI4LCA3OSwgNDgsIDUyLCA1MSwgMTI4LCA3OSwgNDgsIDUyLCA1MCwgCisgICAgMTI4LCA3OSwgNDgsIDUyLCA0OSwgMTI4LCA3OSwgNDgsIDUyLCA0OCwgMTI4LCA3OSwgNDgsIDUxLCA1NywgMTI4LCA3OSwgCisgICAgNDgsIDUxLCA1NiwgMTI4LCA3OSwgNDgsIDUxLCA1NSwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjgsIDEyOCwgNzksIDQ4LCAKKyAgICA1MSwgNTQsIDY3LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NiwgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzksIAorICAgIDQ4LCA1MSwgNTQsIDEyOCwgNzksIDQ4LCA1MSwgNTMsIDEyOCwgNzksIDQ4LCA1MSwgNTIsIDEyOCwgNzksIDQ4LCA1MSwgCisgICAgNTEsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDUxLCAxMjgsIDc5LCA0OCwgNTEsIDUwLCAxMjgsIDc5LCA0OCwgNTEsIDQ5LCAKKyAgICAxMjgsIDc5LCA0OCwgNTEsIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgMTI4LCA3OSwgNDgsIDUwLCA1NywgNjUsIAorICAgIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDEyOCwgNzksIDQ4LCA1MCwgNTYsIDEyOCwgNzksIDQ4LCA1MCwgNTUsIDEyOCwgNzksIAorICAgIDQ4LCA1MCwgNTQsIDEyOCwgNzksIDQ4LCA1MCwgNTMsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCAxMjgsIDc5LCA0OCwgCisgICAgNTAsIDUyLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MiwgMTI4LCA3OSwgNDgsIDUwLCA1MSwgMTI4LCA3OSwgNDgsIDUwLCAKKyAgICA1MCwgMTI4LCA3OSwgNDgsIDUwLCA0OSwgMTI4LCA3OSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNDgsIAorICAgIDEyOCwgNzksIDQ4LCA0OSwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAxMjgsIDc5LCA0OCwgNDksIDU2LCAxMjgsIAorICAgIDc5LCA0OCwgNDksIDU1LCAxMjgsIDc5LCA0OCwgNDksIDU0LCAxMjgsIDc5LCA0OCwgNDksIDUzLCAxMjgsIDc5LCA0OCwgCisgICAgNDksIDUyLCAxMjgsIDc5LCA0OCwgNDksIDUxLCAxMjgsIDc5LCA0OCwgNDksIDUwLCAxMjgsIDc5LCA0OCwgNDksIDQ5LCAKKyAgICAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NywgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjYsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIAorICAgIDY1LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCAxMjgsIDc5LCA0OCwgNDgsIDU3LCAxMjgsIDc5LCA0OCwgNDgsIDU2LCAxMjgsIAorICAgIDc5LCA0OCwgNDgsIDU1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA3MCwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjksIDEyOCwgCisgICAgNzksIDQ4LCA0OCwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjYsIAorICAgIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAxMjgsIDc5LCA0OCwgNDgsIDUzLCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDQ4LCA1MywgMTI4LCA3OSwgNDgsIDQ4LCA1MiwgMTI4LCA3OSwgNDgsIDQ4LCA1MSwgMTI4LCA3OSwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA3OSwgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDEyOCwgNzksIDQ1LCAKKyAgICA4OSwgNjksIDEyOCwgNzksIDQ1LCA3OSwgNDUsIDczLCAxMjgsIDc5LCA0NSwgNjksIDEyOCwgNzgsIDkwLCA4OSwgODgsIAorICAgIDEyOCwgNzgsIDkwLCA4OSwgODQsIDEyOCwgNzgsIDkwLCA4OSwgODIsIDg4LCAxMjgsIDc4LCA5MCwgODksIDgyLCAxMjgsIAorICAgIDc4LCA5MCwgODksIDgwLCAxMjgsIDc4LCA5MCwgODksIDEyOCwgNzgsIDkwLCA4NSwgODgsIDEyOCwgNzgsIDkwLCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCAxMjgsIDc4LCA5MCwgODUsIDgxLCAxMjgsIDc4LCA5MCwgODUsIDgwLCAKKyAgICAxMjgsIDc4LCA5MCwgODUsIDc5LCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgMTI4LCA3OCwgOTAsIDg1LCAyMDYsIDc4LCAKKyAgICA5MCwgODUsIDEyOCwgNzgsIDkwLCA3OSwgODgsIDEyOCwgNzgsIDkwLCA3OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgODgsIAorICAgIDEyOCwgNzgsIDkwLCA3MywgODQsIDEyOCwgNzgsIDkwLCA3MywgODAsIDEyOCwgNzgsIDkwLCA3MywgNjksIDg4LCAxMjgsIAorICAgIDc4LCA5MCwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgMTI4LCA3OCwgOTAsIDczLCAxMjgsIDc4LCA5MCwgCisgICAgNjksIDg4LCAxMjgsIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgOTAsIDY5LCAxMjgsIDc4LCA5MCwgNjUsIDg4LCAKKyAgICAxMjgsIDc4LCA5MCwgNjUsIDg0LCAxMjgsIDc4LCA5MCwgNjUsIDgxLCAxMjgsIDc4LCA5MCwgNjUsIDgwLCAxMjgsIDc4LCAKKyAgICA5MCwgNjUsIDEyOCwgNzgsIDkwLCAxOTMsIDc4LCA4OSwgODcsIDY1LCAxMjgsIDc4LCA4OSwgODUsIDg4LCAxMjgsIDc4LCAKKyAgICA4OSwgODUsIDg0LCAxMjgsIDc4LCA4OSwgODUsIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgODksIAorICAgIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDEyOCwgNzgsIDg5LCA4NSwgNjksIDEyOCwgNzgsIDg5LCA4NSwgCisgICAgMTI4LCA3OCwgODksIDc5LCA4OCwgMTI4LCA3OCwgODksIDc5LCA4NCwgMTI4LCA3OCwgODksIDc5LCA4MCwgMTI4LCA3OCwgCisgICAgODksIDc5LCA3OSwgMTI4LCA3OCwgODksIDc5LCA2NSwgMTI4LCA3OCwgODksIDc5LCAxMjgsIDc4LCA4OSwgNzQsIDY1LCAKKyAgICAxMjgsIDc4LCA4OSwgNzMsIDg4LCAxMjgsIDc4LCA4OSwgNzMsIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDIxMiwgNzgsIDg5LCAKKyAgICA3MywgMjExLCA3OCwgODksIDczLCAyMTAsIDc4LCA4OSwgNzMsIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDc4LCA0NSwgNjgsIAorICAgIDc5LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgODksIDczLCA2OSwgODQsIDEyOCwgNzgsIDg5LCA3MywgCisgICAgNjksIDgwLCAxMjgsIDc4LCA4OSwgNzMsIDY5LCAxMjgsIDc4LCA4OSwgNzMsIDEyOCwgNzgsIDg5LCAyMDEsIDc4LCA4OSwgCisgICAgNjksIDg0LCAxMjgsIDc4LCA4OSwgNjksIDIxMiwgNzgsIDg5LCA2OSwgNzIsIDEyOCwgNzgsIDg5LCA2OSwgMjAwLCA3OCwgCisgICAgODksIDY5LCA2OSwgMTI4LCA3OCwgODksIDY5LCAxMjgsIDc4LCA4OSwgMTk2LCA3OCwgODksIDY3LCA2NSwgMTI4LCA3OCwgCisgICAgODksIDY1LCA2OSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgODksIDY1LCA2NSwgMTI4LCA3OCwgODcsIDc5LCA3OSwgMTI4LCAKKyAgICA3OCwgODcsIDc5LCAxMjgsIDc4LCA4NywgNzMsIDczLCAxMjgsIDc4LCA4NywgNzMsIDEyOCwgNzgsIDg3LCA2OSwgMTI4LCAKKyAgICA3OCwgODcsIDY1LCA2NSwgMTI4LCA3OCwgODcsIDY1LCAxMjgsIDc4LCA4NywgMTI4LCA3OCwgODYsIDEyOCwgNzgsIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgODUsIDg1LCA3OCwgMTI4LCA3OCwgODUsIDg0LCA3MywgNzYsIDc2LCA4NSwgMTI4LCA3OCwgODUsIAorICAgIDg0LCAxMjgsIDc4LCA4NSwgMjEyLCA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgODAsIAorICAgIDEyOCwgNzgsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgODUsIAorICAgIDc4LCA4NSwgOTAsIDEyOCwgNzgsIDg1LCA3OCwgODUsIDIxOCwgNzgsIDg1LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA3OCwgCisgICAgNjUsIDg2LCA4NSwgMjEyLCA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAKKyAgICAyMDYsIDc4LCA4NSwgNzcsIDY5LCA4MiwgMjA3LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIAorICAgIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCA4MywgMTI4LCA3OCwgODUsIDc3LCA2NiwgCisgICAgNjksIDgyLCAxMjgsIDc4LCA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgCisgICAgODUsIDc1LCA4NCwgNjUsIDEyOCwgNzgsIDg1LCA2OSwgNzgsIDcxLCAxMjgsIDc4LCA4NSwgNjksIDEyOCwgNzgsIDg1LCAKKyAgICA2NiwgNzMsIDY1LCAyMDYsIDc4LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA4NSwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDUwLCA1MCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NiwgNjUsIAorICAgIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgCisgICAgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgODUsIDQ4LCAKKyAgICA0OSwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzgsIAorICAgIDg1LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIAorICAgIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNDgsIDUyLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDg1LCAKKyAgICA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA4NCwgODUsIDg1LCAxMjgsIDc4LCA4NCwgODUsIDc3LCAxMjgsIDc4LCA4NCwgMjEzLCAKKyAgICA3OCwgODQsIDc5LCA4MSwgODAsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDczLCA2OSwgMTk3LCA3OCwgODQsIDY5LCA4NSwgNzgsIAorICAgIDcxLCA2NiwgNjUsIDEyOCwgNzgsIDg0LCA2OSwgODUsIDc3LCAxMjgsIDc4LCA4NCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgCisgICAgNjksIDY5LCAxMjgsIDc4LCA4NCwgNjUsIDgwLCAxMjgsIDc4LCA4NCwgNjUsIDIwOCwgNzgsIDg0LCA2NSwgNjUsIDEyOCwgCisgICAgNzgsIDgzLCA4NSwgNzksIDIxMiwgNzgsIDgzLCA4NSwgNzgsIDEyOCwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzgsIDgzLCAKKyAgICA3OSwgNzcsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4NCwgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDgwLCAxMjgsIAorICAgIDc4LCA4MywgNzMsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA4NSwgODQsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDIxMiwgCisgICAgNzgsIDgzLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNzMsIDY5LCAKKyAgICA2OSwgMTI4LCA3OCwgODMsIDcyLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgNjUsIDgxLCAxMjgsIDc4LCA4MywgNzIsIAorICAgIDY1LCAxMjgsIDc4LCA4MywgNjksIDg1LCA2NSwgNjksIDc4LCAxMjgsIDc4LCA4MywgNjksIDc4LCAxMjgsIDc4LCA4MywgCisgICAgNjUsIDEyOCwgNzgsIDgyLCA4OSwgODgsIDEyOCwgNzgsIDgyLCA4OSwgODQsIDEyOCwgNzgsIDgyLCA4OSwgODIsIDg4LCAKKyAgICAxMjgsIDc4LCA4MiwgODksIDgyLCAxMjgsIDc4LCA4MiwgODksIDgwLCAxMjgsIDc4LCA4MiwgODksIDEyOCwgNzgsIDgyLCAKKyAgICA4NSwgODgsIDEyOCwgNzgsIDgyLCA4NSwgODQsIDEyOCwgNzgsIDgyLCA4NSwgODIsIDg4LCAxMjgsIDc4LCA4MiwgODUsIAorICAgIDgyLCAxMjgsIDc4LCA4MiwgODUsIDgwLCAxMjgsIDc4LCA4MiwgODUsIDEyOCwgNzgsIDgyLCA3OSwgODgsIDEyOCwgNzgsIAorICAgIDgyLCA3OSwgODAsIDEyOCwgNzgsIDgyLCA3OSwgMTI4LCA3OCwgODIsIDY5LCA4OCwgMTI4LCA3OCwgODIsIDY5LCA4NCwgCisgICAgMTI4LCA3OCwgODIsIDY5LCA4MCwgMTI4LCA3OCwgODIsIDY5LCAxMjgsIDc4LCA4MiwgNjUsIDg4LCAxMjgsIDc4LCA4MiwgCisgICAgNjUsIDg0LCAxMjgsIDc4LCA4MiwgNjUsIDgwLCAxMjgsIDc4LCA4MiwgNjUsIDEyOCwgNzgsIDc5LCA4OSwgMTI4LCA3OCwgCisgICAgNzksIDg4LCAxMjgsIDc4LCA3OSwgODYsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDg0LCA4NCwgNzksIAorICAgIDEyOCwgNzgsIDc5LCA4NCwgNjksIDgzLCAxMjgsIDc4LCA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA3OCwgCisgICAgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgMTk2LCA3OCwgNzksIDg0LCA2OSwgNjYsIDc5LCA3OSwgNzUsIDEyOCwgNzgsIDc5LCAKKyAgICA4NCwgNjksIDY2LCA3OSwgNzksIDIwMywgNzgsIDc5LCA4NCwgNjksIDEyOCwgNzgsIDc5LCA4NCwgMTk3LCA3OCwgNzksIAorICAgIDg0LCA2NywgNzIsIDY5LCAxOTYsIDc4LCA3OSwgODQsIDY3LCA3MiwgMTI4LCA3OCwgNzksIDg0LCAxMjgsIDc4LCA3OSwgCisgICAgMjEyLCA3OCwgNzksIDgzLCA2OSwgMTI4LCA3OCwgNzksIDgyLCA4NCwgNzIsIDg3LCA2OSwgODMsIDIxMiwgNzgsIDc5LCAKKyAgICA4MiwgODQsIDcyLCA2OSwgODIsIDIwNiwgNzgsIDc5LCA4MiwgODQsIDIwMCwgNzgsIDc5LCA4MiwgNzcsIDY1LCAyMDQsIAorICAgIDc4LCA3OSwgMjEwLCA3OCwgNzksIDgwLCAxMjgsIDc4LCA3OSwgNzksIDc4LCA4NSwgMTI4LCA3OCwgNzksIDc5LCAxMjgsIAorICAgIDc4LCA3OSwgNzgsIDcwLCA3OSwgODIsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDc4LCA3OSwgNzgsIDQ1LCA4MCwgNzksIDg0LCAKKyAgICA2NSwgNjYsIDc2LCAxOTcsIDc4LCA3OSwgNzgsIDQ1LCA3NCwgNzksIDczLCA3OCwgNjksIDgyLCAxMjgsIDc4LCA3OSwgNzgsIAorICAgIDQ1LCA2NiwgODIsIDY5LCA2NSwgNzUsIDczLCA3OCwgMTk5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCAyMDQsIDc4LCA3OSwgCisgICAgNzUsIDcyLCA4NSwgNzUsIDEyOCwgNzgsIDc5LCA2OCwgNjksIDEyOCwgNzgsIDc5LCA2NSwgMTI4LCA3OCwgNzksIDQ1LCAKKyAgICA2NiwgODIsIDY5LCA2NSwgMjAzLCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIAorICAgIDc5LCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgCisgICAgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgCisgICAgNzgsIDc3LCAxMjgsIDc4LCA3NiwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDksIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCAxMjgsIAorICAgIDc4LCA3NiwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUyLCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDksIAorICAgIDQ5LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDc2LCA0OCwgCisgICAgNDgsIDU2LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDc2LCAKKyAgICA0OCwgNDgsIDUzLCA2NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUyLCAxMjgsIAorICAgIDc4LCA3NiwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDQ5LCAKKyAgICAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgMjA3LCA3OCwgNzUsIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCAKKyAgICA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCA3NCwgODksIDg4LCAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIAorICAgIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg5LCA4MiwgMTI4LCA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgCisgICAgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCAKKyAgICA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgNzgsIDc0LCA4NSwgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIAorICAgIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCA3NCwgODUsIDY5LCA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgCisgICAgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgCisgICAgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgMTI4LCA3OCwgNzQsIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAKKyAgICAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgNzMsIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIDczLCAxMjgsIDc4LCA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgCisgICAgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCAKKyAgICA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIAorICAgIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCA2OSwgMTI4LCA3OCwgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIAorICAgIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDc2LCA3MywgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgCisgICAgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDc0LCAxMjgsIDc4LCA3MywgODgsIDEyOCwgNzgsIDczLCA4NCwgODIsIDY5LCAKKyAgICAxMjgsIDc4LCA3MywgODMsIDY1LCA3MSwgMTI4LCA3OCwgNzMsIDgyLCA4NSwgNzEsIDg1LCAxMjgsIDc4LCA3MywgODAsIAorICAgIDEyOCwgNzgsIDczLCA3OCwgODQsIDcyLCAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgCisgICAgNjksIDg0LCAyMTcsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCAKKyAgICA2OSwgMjA2LCA3OCwgNzMsIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzgsIDczLCA3OCwgCisgICAgMTk3LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDUwLCAxMjgsIDc4LCA3MywgNzgsIDY4LCA2NSwgMTc4LCA3OCwgNzMsIDc3LCAKKyAgICAxMjgsIDc4LCA3MywgMjA1LCA3OCwgNzMsIDc1LCA3MiwgNjUsIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIAorICAgIDcyLCA3MywgODQsIDEyOCwgNzgsIDczLCA3NSwgNjUsIDEyOCwgNzgsIDczLCA3MywgMTI4LCA3OCwgNzMsIDcyLCA4MywgCisgICAgNzIsIDg2LCA2NSwgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgNzgsIDczLCAKKyAgICA3MSwgNzMsIDY4LCA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCA3MSwgNzIsIAorICAgIDIxMiwgNzgsIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgCisgICAgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIAorICAgIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgNzksIDgzLCAKKyAgICAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3OCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDczLCAKKyAgICA2OSwgODUsIDY3LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIAorICAgIDc4LCA3MywgNjksIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIDczLCA2NiwgCisgICAgMTI4LCA3OCwgNzMsIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIDcyLCA3NCwgCisgICAgNjUsIDEyOCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgCisgICAgNjksIDEyOCwgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCAKKyAgICA3OSwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIAorICAgIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAyMTMsIDc4LCA3MSwgNzksIDg0LCAxMjgsIAorICAgIDc4LCA3MSwgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgCisgICAgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCA3OCwgNzEsIDIwNywgCisgICAgNzgsIDcxLCA3NSwgODksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCAKKyAgICA4NSwgODAsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3NywgMTI4LCA3OCwgNzEsIAorICAgIDc1LCA4NSwgNjksIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgMTk3LCA3OCwgNzEsIDc1LCA3MywgCisgICAgNzgsIDY4LCAyMDEsIDc4LCA3MSwgNzUsIDczLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4OCwgMTI4LCAKKyAgICA3OCwgNzEsIDc1LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzgsIAorICAgIDcxLCA3NSwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgCisgICAgODAsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDY1LCA3NywgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDEyOCwgNzgsIDcxLCAKKyAgICA3MywgNjksIDg4LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgMTI4LCA3OCwgNzEsIAorICAgIDcxLCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODIsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgCisgICAgODAsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDIwOSwgNzgsIDcxLCAKKyAgICA3MSwgODUsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc3LCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3NywgCisgICAgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCA4MywgNzIsIDY1LCAKKyAgICAxOTcsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDIwNiwgNzgsIDcxLCA3MSwgODUsIDEyOCwgNzgsIDcxLCA3MSwgNzksIAorICAgIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDczLCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgCisgICAgODgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIDY5LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDY5LCAyMTMsIDc4LCA3MSwgNzEsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIAorICAgIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgMTI4LCA3OCwgCisgICAgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgNjUsIDY1LCA3NywgNjUsIDY5LCAKKyAgICAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgMTI4LCA3OCwgNzEsIDY5LCA4OCwgMTI4LCAKKyAgICA3OCwgNzEsIDY5LCA4NSwgODIsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDcxLCA2OSwgODAsIDEyOCwgNzgsIDcxLCA2OSwgNzgsIAorICAgIDEyOCwgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgNzYsIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCA2NSwgCisgICAgODQsIDEyOCwgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgCisgICAgNzEsIDY1LCA3OCwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCAKKyAgICA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIDIxMiwgNzgsIDY5LCAKKyAgICA4OCwgMTI4LCA3OCwgNjksIDg3LCA4MywgODAsIDY1LCA4MCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODcsIDc2LCA3MywgNzgsIAorICAgIDY5LCAxMjgsIDc4LCA2OSwgODcsIDEyOCwgNzgsIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCA3OCwgNjksIDg1LCA4NCwgCisgICAgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIDg0LCA2OSwgMTk2LCA3OCwgCisgICAgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDgwLCAKKyAgICAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgNzksIDEyOCwgNzgsIDY5LCAKKyAgICA3OCwgMTI4LCA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDc4LCA2OSwgNzEsIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNjksIDY3LCA3NSwgODQsIDczLCA2OSwgCisgICAgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIDY4LCA4NSwgODgsIAorICAgIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDgyLCAxMjgsIAorICAgIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgODUsIDc4LCAxMjgsIDc4LCA2OCwgMjEzLCA3OCwgNjgsIDc5LCA4OCwgCisgICAgMTI4LCA3OCwgNjgsIDc5LCA4NCwgMTI4LCA3OCwgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCA3OSwgMTI4LCA3OCwgCisgICAgNjgsIDc5LCA3OCwgMTI4LCA3OCwgNjgsIDc5LCA3NywgNjYsIDg1LCAxMjgsIDc4LCA2OCwgNzksIDc2LCAxOTcsIDc4LCAKKyAgICA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDg0LCAxMjgsIDc4LCA2OCwgNzMsIDgxLCAxMjgsIDc4LCA2OCwgNzMsIAorICAgIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgNjgsIDczLCA2OCwgCisgICAgNjUsIDEyOCwgNzgsIDY4LCA3MywgNjUsIDgxLCAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCA2OCwgNjksIDg1LCAKKyAgICA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDY1LCA2OSwgODIsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA3OCwgNjgsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDc4LCA2OCwgNjUsIDc3LCAKKyAgICAxMjgsIDc4LCA2OCwgNjUsIDY1LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDY4LCA2NSwgNjUsIAorICAgIDEyOCwgNzgsIDY4LCA2NSwgMTkzLCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCA3OCwgNjYsIAorICAgIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIDY2LCA4OSwgCisgICAgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgODgsIDEyOCwgCisgICAgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgNjYsIDc5LCAKKyAgICA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCA2NiwgNzMsIAorICAgIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIDY2LCA3MywgCisgICAgMTI4LCA3OCwgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgCisgICAgNjYsIDY1LCAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCAKKyAgICA4OCwgNzMsIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIAorICAgIDg1LCA2OCwgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgCisgICAgMjA0LCA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCAKKyAgICA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDc4LCA2NSwgODIsIAorICAgIDEyOCwgNzgsIDY1LCA4MSwgMTI4LCA3OCwgNjUsIDc5LCAyMTEsIDc4LCA2NSwgNzgsIDgzLCA2NSwgNzgsIDY1LCA4MSwgCisgICAgMTI4LCA3OCwgNjUsIDc4LCA3MSwgNzcsIDc5LCA3OCwgODQsIDcyLCA3OSwgMTI4LCA3OCwgNjUsIDc4LCA2OCwgMTI4LCAKKyAgICA3OCwgNjUsIDc4LCA2NSwgMTI4LCA3OCwgNjUsIDc3LCA2OSwgMTI4LCA3OCwgNjUsIDc3LCAxOTcsIDc4LCA2NSwgNzcsIAorICAgIDUwLCAxMjgsIDc4LCA2NSwgNzcsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIDY1LCA3MywgMjA0LCA3OCwgNjUsIAorICAgIDcxLCA4MiwgMjAxLCA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgNjUsIDEyOCwgNzgsIDY1LCA3MSwgCisgICAgMTkzLCA3OCwgNjUsIDcxLCAxMjgsIDc4LCA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIDc4LCA2NSwgNjYsIDc2LCA2NSwgCisgICAgMTI4LCA3OCwgNjUsIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA3NSwgODMsIDczLCAKKyAgICA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCA2NSwgMTI4LCA3OCwgNjUsIAorICAgIDE5MywgNzgsIDY1LCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA1MCwgMTI4LCA3OCwgNDgsIDUyLCA0OSwgMTI4LCA3OCwgNDgsIAorICAgIDUyLCA0OCwgMTI4LCA3OCwgNDgsIDUxLCA1NywgMTI4LCA3OCwgNDgsIDUxLCA1NiwgMTI4LCA3OCwgNDgsIDUxLCA1NSwgCisgICAgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDEyOCwgNzgsIDQ4LCA1MSwgNTQsIDEyOCwgNzgsIDQ4LCA1MSwgNTMsIDY1LCAKKyAgICAxMjgsIDc4LCA0OCwgNTEsIDUzLCAxMjgsIDc4LCA0OCwgNTEsIDUyLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MiwgMTI4LCAKKyAgICA3OCwgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDEyOCwgNzgsIDQ4LCA1MSwgNTAsIDEyOCwgNzgsIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgNzgsIDQ4LCA1MSwgNDgsIDEyOCwgNzgsIDQ4LCA1MCwgNTcsIDEyOCwgNzgsIDQ4LCA1MCwgCisgICAgNTYsIDEyOCwgNzgsIDQ4LCA1MCwgNTUsIDEyOCwgNzgsIDQ4LCA1MCwgNTQsIDEyOCwgNzgsIDQ4LCA1MCwgNTMsIDY1LCAKKyAgICAxMjgsIDc4LCA0OCwgNTAsIDUzLCAxMjgsIDc4LCA0OCwgNTAsIDUyLCAxMjgsIDc4LCA0OCwgNTAsIDUxLCAxMjgsIDc4LCAKKyAgICA0OCwgNTAsIDUwLCAxMjgsIDc4LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA0OCwgNDksIAorICAgIDU3LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NiwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjUsIDEyOCwgNzgsIDQ4LCA0OSwgCisgICAgNTYsIDEyOCwgNzgsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDQ4LCA0OSwgNTMsIDEyOCwgCisgICAgNzgsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDQ4LCAKKyAgICA0OSwgNDksIDEyOCwgNzgsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDQ4LCA0OCwgNTYsIAorICAgIDEyOCwgNzgsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDQ4LCA0OCwgNTMsIDEyOCwgNzgsIAorICAgIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDQ4LCA0OCwgNTAsIDEyOCwgNzgsIDQ4LCA0OCwgCisgICAgNDksIDEyOCwgNzgsIDQ1LCA2NywgODIsIDY5LCAxOTcsIDc4LCA0NSwgNjUsIDgyLCAyMTcsIDc3LCA4OSwgODgsIDEyOCwgCisgICAgNzcsIDg5LCA4NCwgMTI4LCA3NywgODksIDgzLCA3NiwgNzMsIDg0LCA2OSwgMTI4LCA3NywgODksIDgwLCAxMjgsIDc3LCAKKyAgICA4OSwgNjUsIDEyOCwgNzcsIDg5LCAxOTMsIDc3LCA4OSwgMTI4LCA3NywgMjE3LCA3NywgODcsIDc5LCA3OSwgMTI4LCA3NywgCisgICAgODcsIDc5LCAxMjgsIDc3LCA4NywgNzMsIDczLCAxMjgsIDc3LCA4NywgNzMsIDEyOCwgNzcsIDg3LCA2OSwgNjksIDEyOCwgCisgICAgNzcsIDg3LCA2OSwgMTI4LCA3NywgODcsIDY1LCA2NSwgMTI4LCA3NywgODcsIDY1LCAxMjgsIDc3LCA4NywgMTI4LCA3NywgCisgICAgMjE1LCA3NywgODYsIDc5LCA4MCwgMTI4LCA3NywgODYsIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgNjksIDc4LCAKKyAgICA3MSwgNjUsIDc3LCAxMjgsIDc3LCA4NiwgMTI4LCA3NywgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgODUsIDgzLCAKKyAgICA3MywgNzUsIDY1LCA4NCwgNzksIDY1LCA3OCwgMTI4LCA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgNzcsIAorICAgIDg1LCA4NCwgMTI4LCA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgCisgICAgNzIsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCAKKyAgICA3NywgODUsIDgzLCA3MiwgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIAorICAgIDcxLCA4NSwgNTAsIDEyOCwgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgCisgICAgODIsIDY4LCAxOTMsIDc3LCA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAKKyAgICAxMjgsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCAKKyAgICA4NSwgNzksIDc3LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIAorICAgIDc3LCA4NSwgNzgsIDY1LCA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgCisgICAgODQsIDczLCA4MywgNjksIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIAorICAgIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgCisgICAgNzYsIDg0LCA3MywgODAsIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCAKKyAgICA4NSwgNzYsIDg0LCA3MywgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIAorICAgIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgCisgICAgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgCisgICAgMjAwLCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAKKyAgICAxMjgsIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCAKKyAgICA4MCwgNjUsIDEyOCwgNzcsIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIAorICAgIDE5NywgNzcsIDc5LCA4NiwgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIAorICAgIDc3LCA3OSwgODUsIDgzLCA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgCisgICAgNzgsIDgzLCAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCAKKyAgICA3MywgMjA2LCA3NywgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIAorICAgIDE5NiwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgCisgICAgODUsIDc3LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCAKKyAgICA3MSwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIAorICAgIDc3LCA3OSwgNzksIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgCisgICAgMjA2LCA3NywgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCAKKyAgICA3NywgNzksIDc5LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIAorICAgIDEyOCwgNzcsIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgCisgICAgNzksIDgzLCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCAKKyAgICA3OCwgNzksIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIAogICAgIDc4LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgCiAgICAgNzksIDc4LCA3OSwgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIAotICAgIDIxMCwgNzcsIDc5LCAyMDYsIDc3LCA3OSwgNzYsIDEyOCwgNzcsIDc5LCA3MiwgNjUsIDc3LCA3NywgNjUsIDE5NiwgNzcsIAotICAgIDc5LCA2OCwgODUsIDc2LCAyMDcsIDc3LCA3OSwgNjgsIDY5LCA4MywgODQsIDg5LCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgCi0gICAgODMsIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCAxMjgsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIDIwNywgNzcsIDc4LCA4OSwgCi0gICAgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIDEyOCwgNzcsIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIAotICAgIDc2LCAxMjgsIDc3LCA3MywgODgsIDEyOCwgNzcsIDczLCA4NCwgMTI4LCA3NywgNzMsIDgzLCA4MiwgNjUsIDEyOCwgNzcsIAotICAgIDczLCA4MiwgNzMsIDY2LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgMTI4LCA3NywgNzMsIDgyLCA2OSwgCi0gICAgNjgsIDEyOCwgNzcsIDczLCA4MCwgMTI4LCA3NywgNzMsIDc4LCA4OSwgMTI4LCA3NywgNzMsIDc4LCA4NSwgODMsIDQ1LCAKLSAgICA3OSwgODIsIDQ1LCA4MCwgNzYsIDg1LCAyMTEsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc4LCA3MywgODMsIAotICAgIDg0LCA2OSwgODIsIDEyOCwgNzcsIDczLCA3OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgCi0gICAgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCA3MywgNzYsIDc2LCA2OSwgODQsIAotICAgIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIAotICAgIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgCi0gICAgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIAotICAgIDY5LCA4NSwgNzcsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDczLCAKLSAgICA2OSwgODUsIDgwLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgwLCA2NSwgNzgsIDgzLCA3MywgNzksIDgzLCAxMjgsIAotICAgIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCAKLSAgICA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCA2OCwgNjgsIDc2LCAKLSAgICA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIDE5NiwgNzcsIAotICAgIDczLCA2NywgODIsIDIwNywgNzcsIDczLCAxMjgsIDc3LCAyMDEsIDc3LCA3MiwgOTAsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCAKLSAgICA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIAotICAgIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgCi0gICAgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgCi0gICAgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCAKLSAgICA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIAotICAgIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA2OSwgCi0gICAgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgMTI4LCA3NywgNzEsIDY1LCA4OCwgMTI4LCA3NywgCisgICAgMjEwLCA3NywgNzksIDc4LCA3NSwgNjksIDg5LCAxMjgsIDc3LCA3OSwgNzgsIDc1LCA2OSwgMjE3LCA3NywgNzksIDc4LCAKKyAgICA3MywgMTI4LCA3NywgNzksIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA3NywgNzksIDc4LCA2OSwgCisgICAgMjE3LCA3NywgNzksIDc4LCAxMjgsIDc3LCA3OSwgMjA2LCA3NywgNzksIDc2LCAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgCisgICAgNzcsIDY1LCAxOTYsIDc3LCA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCAKKyAgICA3NywgNzksIDY4LCA2OSwgNzYsIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgMTI4LCA3NywgNzksIDY4LCA2OSwgCisgICAgMTI4LCA3NywgNzksIDY2LCA3MywgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgMjA3LCA3NywgNzgsIDg5LCA2NSwgCisgICAgMjA1LCA3NywgNzgsIDY1LCA4MywgMTI4LCA3NywgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIAorICAgIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIAorICAgIDczLCAyMTIsIDc3LCA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAKKyAgICAxMjgsIDc3LCA3MywgODIsIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCAKKyAgICA3MywgNzgsIDg5LCAxMjgsIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIAorICAgIDczLCA3OCwgODUsIDgzLCAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgCisgICAgNzcsIDY1LCAxMjgsIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCAKKyAgICA4MywgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIAorICAgIDc4LCAyMTEsIDc3LCA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgCisgICAgMjA0LCA3NywgNzMsIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIAorICAgIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIAorICAgIDc3LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgCisgICAgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCAKKyAgICA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgCisgICAgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIAorICAgIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIAorICAgIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgCisgICAgMTI4LCA3NywgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgCisgICAgNzcsIDczLCA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCAKKyAgICA3NywgNzMsIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIAorICAgIDc5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDIwNywgNzcsIDcyLCA5MCwgMTI4LCA3NywgCisgICAgNzIsIDEyOCwgNzcsIDcxLCA4NSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODQsIDEyOCwgNzcsIDcxLCA4NSwgODIsIDg4LCAKKyAgICAxMjgsIDc3LCA3MSwgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCAKKyAgICA3NywgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDEyOCwgNzcsIDcxLCA4NSwgMTI4LCA3NywgNzEsIAorICAgIDc5LCA4OCwgMTI4LCA3NywgNzEsIDc5LCA4NCwgMTI4LCA3NywgNzEsIDc5LCA4MCwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIAorICAgIDc3LCA3MSwgMjA3LCA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA3MywgNjksIDEyOCwgNzcsIDcxLCA2OSwgCisgICAgODgsIDEyOCwgNzcsIDcxLCA2OSwgODAsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgCisgICAgNzEsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzksIDcwLCA4NSwgNzcsIDEyOCwgNzcsIDcxLCA2NiwgNzksIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNzMsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDg1LCA3OCwgMTI4LCA3NywgNzEsIDY2LCA2OSwgCisgICAgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY1LCAKKyAgICA4MywgNjUsIDgxLCAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDEyOCwgNzcsIDcxLCA2NSwgODgsIDEyOCwgNzcsIAogICAgIDcxLCA2NSwgODQsIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgMTI4LCA3NywgNzEsIDEyOCwgNzcsIAotICAgIDY5LCA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgCi0gICAgNzcsIDY5LCA4NCwgODIsIDczLCA2NSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNjksIDg0LCA2OSwgMjExLCA3NywgNjksIDg0LCAKLSAgICA3OSwgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgNzYsIAotICAgIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCA4MywgCi0gICAgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCA4MiwgNzUsIDcyLCAKLSAgICA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgNzMsIDEyOCwgNzcsIDY5LCA4MiwgNjcsIAotICAgIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgNjksIDIwNiwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgCi0gICAgODMsIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIAotICAgIDIxMCwgNzcsIDY5LCA3NywgMTI4LCA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzMsIAotICAgIDkwLCA3MywgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAKLSAgICAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIAotICAgIDc3LCA4NSwgMTI4LCA3NywgNjksIDY5LCA3NywgMTI4LCA3NywgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgCi0gICAgNzcsIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgMTI4LCAKLSAgICA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIAotICAgIDgyLCA2OSwgMTI4LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCA2OCwgODUsIDIwNiwgNzcsIDY3LCA3MiwgCi0gICAgMjEzLCA3NywgNjYsIDg1LCAxMjgsIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgCi0gICAgMTI4LCA3NywgNjYsIDY5LCA2OSwgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY2LCA1MiwgCi0gICAgMTI4LCA3NywgNjYsIDUxLCAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAxMjgsIDc3LCAxOTQsIDc3LCA2NSwgODksIAotICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgMTI4LCA3NywgCi0gICAgNjUsIDg4LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIAotICAgIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgNjUsIDg0LCAxMjgsIDc3LCA2NSwgCi0gICAgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCAKLSAgICA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCA2NywgODUsIDc2LCA3MywgNzgsIDE5NywgNzcsIDY1LCA4MiwgODUsIAotICAgIDc1LCA4NSwgMTI4LCA3NywgNjUsIDgyLCA4NCwgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgCi0gICAgMTk5LCA3NywgNjUsIDgyLCA4MiwgNzMsIDY1LCA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCAKLSAgICA2NSwgODIsIDc1LCA0NSwgNTIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIAotICAgIDUwLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgCi0gICAgNjcsIDcyLCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIAotICAgIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDY1LCAKLSAgICAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCA2NSwgNzAsIAotICAgIDEyOCwgNzcsIDY1LCA4MCwgNzMsIDgxLCAxMjgsIDc3LCA2NSwgNzgsIDgzLCA4OSwgNzksIDc4LCAxMjgsIDc3LCA2NSwgCi0gICAgNzgsIDc4LCA2NSwgMjE4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3OCwgNzEsIDY1LCA3NiwgNjUsIDc3LCAKLSAgICAxMjgsIDc3LCA2NSwgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIAotICAgIDY1LCA3NiwgODQsIDY5LCA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIDc2LCAxOTcsIDc3LCA2NSwgCi0gICAgNzYsIDY1LCA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCAKLSAgICA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIAotICAgIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgCi0gICAgMTI4LCA3NywgNjUsIDczLCA3NSwgODUsIDgyLCA3OSwgMTI4LCA3NywgNjUsIDczLCA2OCwgNjksIDc4LCAxMjgsIDc3LCAKLSAgICA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgNzcsIDY1LCA3MiwgNzIsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIAotICAgIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA2NSwgNzUsIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgCi0gICAgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIDc3LCA2NSwgNzIsIDEyOCwgNzcsIDY1LCA2OCwgODUsIDEyOCwgNzcsIDY1LCAKLSAgICA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgMTkzLCA3NywgNjUsIAotICAgIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCAKLSAgICA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgCi0gICAgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgMjA2LCA3NywgNjUsIDY1LCAKLSAgICA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzYsIDIxOCwgNzYsIDg5LCA4OSwgMTI4LCA3NiwgCi0gICAgODksIDg4LCAxMjgsIDc2LCA4OSwgODQsIDEyOCwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzYsIDg5LCA4MiwgMTI4LCA3NiwgCi0gICAgODksIDgwLCAxMjgsIDc2LCA4OSwgNjgsIDczLCA2NSwgMjA2LCA3NiwgODksIDY3LCA3MywgNjUsIDIwNiwgNzYsIDg4LCAKLSAgICAxMjgsIDc2LCA4NywgNzksIDc5LCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzYsIDg3LCA3MywgNzMsIDEyOCwgNzYsIDg3LCAKLSAgICA3MywgMTI4LCA3NiwgODcsIDY5LCAxMjgsIDc2LCA4NywgNjUsIDY1LCAxMjgsIDc2LCA4NywgNjUsIDEyOCwgNzYsIDg1LCAKLSAgICA4OCwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgODAsIDEyOCwgNzYsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzYsIDg1LCA3OSwgMTI4LCAKLSAgICA3NiwgODUsIDc4LCA2NSwgODQsIDE5NywgNzYsIDg1LCAyMDUsIDc2LCA4NSwgNzYsIDEyOCwgNzYsIDg1LCA3MywgODMsIAotICAgIDEyOCwgNzYsIDg1LCA3MiwgMTI4LCA3NiwgODUsIDcxLCA2NSwgNzYsIDEyOCwgNzYsIDg1LCA3MSwgNjUsIDIwNCwgNzYsIAotICAgIDg1LCA1MSwgMTI4LCA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgCi0gICAgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNDUsIDE4NSwgCi0gICAgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIDc2LCA3OSwgODQsIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCAKLSAgICA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAxMjgsIAotICAgIDc2LCA3OSwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA3OSwgCi0gICAgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDg5LCA4MiwgMTI4LCAKLSAgICA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgNzYsIDc5LCA3OCwgCi0gICAgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIAotICAgIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCAKLSAgICA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgCi0gICAgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzYsIDc2LCAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCAKLSAgICA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA4NiwgNjksIAotICAgIDEyOCwgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzYsIDc5LCA2NSwgMTI4LCA3NiwgNzgsIDEyOCwgNzYsIAotICAgIDc3LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCAxMjgsIDc2LCA3NCwgODUsIDY4LCA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgCi0gICAgNjksIDEyOCwgNzYsIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCA4NywgNzgsIDEyOCwgNzYsIDczLCA4NCwgCi0gICAgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIDgyLCAxOTMsIDc2LCA3MywgODQsIDEyOCwgNzYsIDczLCA4MywgNzIsIDEyOCwgCi0gICAgNzYsIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgNzYsIDczLCA4MCwgMTI4LCA3NiwgNzMsIDc4LCAKLSAgICA3NSwgNzMsIDc4LCAxOTksIDc2LCA3MywgNzgsIDIwMywgNzYsIDczLCA3OCwgNjksIDgzLCAxMjgsIDc2LCA3MywgNzgsIAotICAgIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDUxLCAKLSAgICAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3NiwgCi0gICAgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc2LCAKLSAgICA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgODQsIDcyLCAxMjgsIAotICAgIDc2LCA3MywgNzYsIDEyOCwgNzYsIDczLCA3MywgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDc4LCA3MywgNzgsIDcxLCAKKyAgICA3MCwgNzksIDc4LCAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCA3NywgNzAsIDczLCA4OSwgNjUsIAorICAgIDgxLCAxMjgsIDc3LCA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDcwLCA2OSwgCisgICAgODUsIDgxLCAxMjgsIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgNjUsIDEyOCwgNzcsIDY5LCAKKyAgICA5MCwgOTAsIDc5LCAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgNjksIDg1LCA4MSwgMTI4LCAKKyAgICA3NywgNjksIDg1LCA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCAxMjgsIAorICAgIDc3LCA2OSwgODQsIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDg0LCA4MiwgCisgICAgNzMsIDY1LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCAKKyAgICA4NSwgODMsIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIAorICAgIDg0LCA2NSwgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCA3MywgNjUsIDIwNiwgCisgICAgNzcsIDY5LCA4MywgNzksIDEyOCwgNzcsIDY5LCA4MywgNzMsIDEyOCwgNzcsIDY5LCA4MywgNzIsIDEyOCwgNzcsIDY5LCAKKyAgICA4MiwgNzUsIDcyLCA2NSwgMTI4LCA3NywgNjksIDgyLCA3NSwgNzIsIDE5MywgNzcsIDY5LCA4MiwgNzMsIDY4LCA3MywgNjUsIAorICAgIDc4LCA4MywgMTI4LCA3NywgNjksIDgyLCA3MywgMTI4LCA3NywgNjksIDgyLCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MiwgCisgICAgNjcsIDg1LCA4MiwgODksIDEyOCwgNzcsIDY5LCA4MiwgNjcsIDg1LCA4MiwgMjE3LCA3NywgNjksIDc4LCA2OCwgODUsIDg0LCAKKyAgICAxMjgsIDc3LCA2OSwgNzgsIDEyOCwgNzcsIDY5LCA3NywgNzksIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgODMsIAorICAgIDcyLCA3MywgODAsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDIxMCwgCisgICAgNzcsIDY5LCA3NywgNDUsIDgxLCA3OSwgODAsIDcyLCAxMjgsIDc3LCA2OSwgNzcsIDEyOCwgNzcsIDY5LCAyMDUsIDc3LCAKKyAgICA2OSwgNzYsIDc5LCA2OCwgNzMsIDE5NSwgNzcsIDY5LCA3NiwgNzMsIDc1LCAxMjgsIDc3LCA2OSwgNzMsIDkwLCA3MywgCisgICAgMTI4LCA3NywgNjksIDcxLCA2NSwgODQsIDc5LCA3OCwgMTI4LCA3NywgNjksIDcxLCA2NSwgODAsIDcyLCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc3LCA2OSwgNzEsIDY1LCA3NiwgNzMsIDEyOCwgNzcsIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzcsIAorICAgIDY5LCA2OSwgODQsIDY5LCAyMDEsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIDc3LCA4NSwgMTI4LCA3NywgCisgICAgNjksIDY5LCA3NywgMTI4LCA3NywgNjksIDY5LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OSwgMTI4LCA3NywgNjksIDY4LCAKKyAgICA3MywgODUsIDc3LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgMjA1LCA3NywgNjksIDY4LCA3MywgNjcsIDczLCA3OCwgNjksIAorICAgIDEyOCwgNzcsIDY5LCA2OCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDY1LCA4NCwgMTI4LCA3NywgNjksIDY1LCAyMTIsIAorICAgIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxOTYsIDc3LCA2OSwgNjUsIDgzLCA4NSwgODIsIDY5LCAxMjgsIDc3LCA2OSwgCisgICAgNjUsIDgzLCA4NSwgODIsIDE5NywgNzcsIDY4LCA4NSwgMjA2LCA3NywgNjcsIDcyLCAyMTMsIDc3LCA2NywgNzIsIDY1LCAKKyAgICAyMDYsIDc3LCA2NiwgODUsIDc5LCA4MSwgMTI4LCA3NywgNjYsIDg1LCA3OSwgMTI4LCA3NywgNjYsIDg1LCA2OSwgMTI4LCAKKyAgICA3NywgNjYsIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc3LCA2NiwgODUsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDc5LCA3OSwgCisgICAgMTI4LCA3NywgNjYsIDc5LCAxMjgsIDc3LCA2NiwgNzMsIDg0LCAxMjgsIDc3LCA2NiwgNzMsIDIxMiwgNzcsIDY2LCA3MywgCisgICAgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDg4LCAxMjgsIDc3LCAKKyAgICA2NiwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzcsIDY2LCA2OSwgODUsIDc3LCAxMjgsIDc3LCA2NiwgNjksIDgyLCA2NSwgNjksIAorICAgIDEyOCwgNzcsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA2OSwgNjksIDc1LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgCisgICAgNjksIDY5LCAxMjgsIDc3LCA2NiwgNjksIDEyOCwgNzcsIDY2LCA2NSwgODEsIDEyOCwgNzcsIDY2LCA2NSwgNzgsIDg5LCAKKyAgICA3MywgMTI4LCA3NywgNjYsIDY1LCA2NSwgODIsIDY1LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA2NSwgNzUsIDY5LCA4NCwgCisgICAgMTI4LCA3NywgNjYsIDY1LCA2NSwgMTI4LCA3NywgNjYsIDY1LCAxOTMsIDc3LCA2NiwgMTkzLCA3NywgNjYsIDUyLCAxMjgsIAorICAgIDc3LCA2NiwgNTEsIDEyOCwgNzcsIDY2LCA1MCwgMTI4LCA3NywgNjYsIDEyOCwgNzcsIDE5NCwgNzcsIDY1LCA4OSwgNjksIAorICAgIDIwMywgNzcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCA4OSwgMTI4LCA3NywgNjUsIDg4LCA3MywgCisgICAgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODgsIDEyOCwgNzcsIDY1LCA4NCwgODQsIDc5LCA2NywgNzUsIDEyOCwgNzcsIDY1LCAKKyAgICA4NCwgODIsIDczLCA4OCwgMTI4LCA3NywgNjUsIDg0LCA2OSwgODIsIDczLCA2NSwgNzYsIDgzLCAxMjgsIDc3LCA2NSwgODQsIAorICAgIDEyOCwgNzcsIDY1LCA4MywgMjEzLCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIDgzLCA4MywgCisgICAgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjUsIDgzLCA3OSwgODIsIDE5MywgNzcsIDY1LCA4MywgNzUsIDEyOCwgNzcsIDY1LCAKKyAgICA4MywgNzIsIDcwLCA2NSwgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCA2NywgODUsIAorICAgIDc2LCA3MywgNzgsIDE5NywgNzcsIDY1LCA4MiwgODksIDEyOCwgNzcsIDY1LCA4MiwgODUsIDc1LCA4NSwgMTI4LCA3NywgCisgICAgNjUsIDgyLCA4NCwgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDgyLCAKKyAgICA4MiwgNzMsIDY1LCA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNTIsIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUwLCAxMjgsIDc3LCA2NSwgCisgICAgODIsIDc1LCA0NSwgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIDcyLCAxMjgsIDc3LCAKKyAgICA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgCisgICAgODIsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODMsIDczLCA4NCwgNjksIDEyOCwgNzcsIDY1LCAKKyAgICA4MiwgNjYsIDg1LCA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgNjUsIDgyLCAxMjgsIAorICAgIDc3LCA2NSwgODEsIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgxLCAxMjgsIDc3LCA2NSwgODAsIDc2LCAxOTcsIDc3LCA2NSwgCisgICAgODAsIDczLCA4MSwgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OSwgMTI4LCA3NywgNjUsIDc4LCA4MywgODksIDc5LCAKKyAgICA3OCwgMTI4LCA3NywgNjUsIDc4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIDIxOCwgNzcsIAorICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgNjUsIDc4LCA2OCwgCisgICAgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCA3OCwgNjcsIDcyLCAKKyAgICAyMTMsIDc3LCA2NSwgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIDgzLCAxOTcsIAorICAgIDc3LCA2NSwgNzYsIDY5LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgNzYsIDE5NywgCisgICAgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCA3NywgNjUsIDczLCAKKyAgICA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCA3NywgNzksIDc1LCAxMjgsIDc3LCA2NSwgNzMsIDg0LCA2NSwgNzMsIAorICAgIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA4NSwgNjUsIDc4LCAKKyAgICAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgMTI4LCA3NywgNjUsIDczLCA3NiwgNjYsIDc5LCAyMTYsIAorICAgIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCA2NSwgNzMsIDY4LCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA3MiwgCisgICAgNzQsIDc5LCA3OCwgMTk5LCA3NywgNjUsIDcyLCA3MiwgNjUsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDgwLCA4MiwgNjUsIDc4LCAKKyAgICA2NSwgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDY1LCA3NSwgNzIsIDEyOCwgNzcsIDY1LCA3MiwgNjUsIDY1LCA4MCwgODIsIAorICAgIDY1LCA2NSwgNzgsIDE5MywgNzcsIDY1LCA3MiwgMTI4LCA3NywgNjUsIDcxLCA3OCwgNzMsIDcwLCA4OSwgNzMsIDc4LCAKKyAgICAxOTksIDc3LCA2NSwgNjksIDgzLCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgODksIDczLCAxMjgsIDc3LCA2NSwgNjksIAorICAgIDc4LCA3NCwgNjksIDg0LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA4NiwgNjksIDg1LCA4OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgCisgICAgNzUsIDgwLCA2OSwgNzgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCAKKyAgICA3NywgNjYsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNjUsIDY5LCA3NywgNjYsIDY1LCAxMjgsIDc3LCA2NSwgNjksIAorICAgIDc3LCAxMjgsIDc3LCA2NSwgNjksIDc2LCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzUsIDY5LCA4NSwgODAsIDEyOCwgCisgICAgNzcsIDY1LCA2OCwgODksIDY1LCAxMjgsIDc3LCA2NSwgNjgsIDg1LCAxMjgsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMjAwLCAKKyAgICA3NywgNjUsIDY4LCA2OCwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDE5MywgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIAorICAgIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNjYsIDgyLCA2OSwgODYsIDY5LCAKKyAgICAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIAorICAgIDc5LCA3OCwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDIwNiwgNzcsIDY1LCA2NywgNzIsIDczLCA3OCwgNjksIDEyOCwgCisgICAgNzcsIDY1LCA2NSwgNzMsIDEyOCwgNzcsIDY1LCA2NSwgMTI4LCA3NywgNjUsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDUyLCAKKyAgICAxMjgsIDc3LCA0OCwgNTIsIDUxLCAxMjgsIDc3LCA0OCwgNTIsIDUwLCAxMjgsIDc3LCA0OCwgNTIsIDQ5LCAxMjgsIDc3LCAKKyAgICA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDUyLCA0OCwgMTI4LCA3NywgNDgsIDUxLCA1NywgMTI4LCA3NywgNDgsIAorICAgIDUxLCA1NiwgMTI4LCA3NywgNDgsIDUxLCA1NSwgMTI4LCA3NywgNDgsIDUxLCA1NCwgMTI4LCA3NywgNDgsIDUxLCA1MywgCisgICAgMTI4LCA3NywgNDgsIDUxLCA1MiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjYsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY1LCAKKyAgICAxMjgsIDc3LCA0OCwgNTEsIDUxLCAxMjgsIDc3LCA0OCwgNTEsIDUwLCAxMjgsIDc3LCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCAKKyAgICA3NywgNDgsIDUxLCA0OSwgMTI4LCA3NywgNDgsIDUxLCA0OCwgMTI4LCA3NywgNDgsIDUwLCA1NywgMTI4LCA3NywgNDgsIAorICAgIDUwLCA1NiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTYsIDEyOCwgNzcsIDQ4LCA1MCwgNTUsIDEyOCwgNzcsIDQ4LCA1MCwgCisgICAgNTQsIDEyOCwgNzcsIDQ4LCA1MCwgNTMsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUyLCAKKyAgICAxMjgsIDc3LCA0OCwgNTAsIDUxLCAxMjgsIDc3LCA0OCwgNTAsIDUwLCA2NSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgMTI4LCAKKyAgICA3NywgNDgsIDUwLCA0OSwgMTI4LCA3NywgNDgsIDUwLCA0OCwgMTI4LCA3NywgNDgsIDQ5LCA1NywgMTI4LCA3NywgNDgsIAorICAgIDQ5LCA1NiwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDEyOCwgNzcsIDQ4LCA0OSwgCisgICAgNTQsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU0LCAxMjgsIDc3LCA0OCwgNDksIDUzLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCAKKyAgICA1MywgMTI4LCA3NywgNDgsIDQ5LCA1MiwgMTI4LCA3NywgNDgsIDQ5LCA1MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzIsIAorICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgCisgICAgNjksIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY4LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NywgMTI4LCA3NywgNDgsIDQ5LCAKKyAgICA1MCwgNjYsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUwLCAxMjgsIDc3LCA0OCwgNDksIAorICAgIDQ5LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgMTI4LCA3NywgNDgsIDQ4LCA1NywgCisgICAgMTI4LCA3NywgNDgsIDQ4LCA1NiwgMTI4LCA3NywgNDgsIDQ4LCA1NSwgMTI4LCA3NywgNDgsIDQ4LCA1NCwgMTI4LCA3NywgCisgICAgNDgsIDQ4LCA1MywgMTI4LCA3NywgNDgsIDQ4LCA1MiwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OCwgNTEsIDEyOCwgNzcsIDQ4LCA0OCwgNTAsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY2LCAxMjgsIDc3LCA0OCwgNDgsIAorICAgIDQ5LCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgMTI4LCA3NiwgMjE4LCA3NiwgODksIDg5LCAxMjgsIDc2LCA4OSwgODgsIAorICAgIDEyOCwgNzYsIDg5LCA4NCwgMTI4LCA3NiwgODksIDgyLCA4OCwgMTI4LCA3NiwgODksIDgyLCAxMjgsIDc2LCA4OSwgODAsIAorICAgIDEyOCwgNzYsIDg5LCA2OCwgNzMsIDY1LCAyMDYsIDc2LCA4OSwgNjcsIDczLCA2NSwgMjA2LCA3NiwgODgsIDEyOCwgNzYsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgNzYsIDg3LCA3OSwgMTI4LCA3NiwgODcsIDczLCA3MywgMTI4LCA3NiwgODcsIDczLCAxMjgsIAorICAgIDc2LCA4NywgNjksIDEyOCwgNzYsIDg3LCA2NSwgNjUsIDEyOCwgNzYsIDg3LCA2NSwgMTI4LCA3NiwgODUsIDg4LCAxMjgsIAorICAgIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzYsIDg1LCA4MCwgMTI4LCA3NiwgODUsIDc5LCA4OCwgCisgICAgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3NiwgODUsIDc5LCAxMjgsIDc2LCA4NSwgCisgICAgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIDc2LCA4NSwgMjA1LCA3NiwgODUsIDc2LCAKKyAgICAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgNzIsIDg1LCA4MiwgMTI4LCA3NiwgODUsIDcyLCAxMjgsIDc2LCAKKyAgICA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCA3NiwgMTI4LCA3NiwgODUsIDcxLCA2NSwgCisgICAgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NiwgODUsIDUxLCAxMjgsIDc2LCA4NSwgCisgICAgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA3OSwgOTAsIDY5LCA3OCwgNzEsIDY5LCAxMjgsIDc2LCA3OSwgOTAsIDY5LCAKKyAgICA3OCwgNzEsIDE5NywgNzYsIDc5LCA4OCwgMTI4LCA3NiwgNzksIDg3LCA2OSwgODIsIDY5LCAxOTYsIDc2LCA3OSwgODcsIAorICAgIDY5LCAyMTAsIDc2LCA3OSwgODcsIDQ1LCAxODUsIDc2LCA3OSwgODYsIDE5NywgNzYsIDc5LCA4NSwgODIsIDY5LCAxMjgsIAorICAgIDc2LCA3OSwgODUsIDY4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA3NiwgNzksIDg1LCA2OCwgNzYsIDIxNywgCisgICAgNzYsIDc5LCA4NCwgODUsIDgzLCAxMjgsIDc2LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA4MiwgODIsIDg5LCAxMjgsIDc2LCAKKyAgICA3OSwgODIsIDgyLCA2NSwgNzMsIDc4LCA2OSwgMTI4LCA3NiwgNzksIDgxLCAxMjgsIDc2LCA3OSwgODAsIDEyOCwgNzYsIAorICAgIDc5LCA3OSwgODQsIDEyOCwgNzYsIDc5LCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgNzgsIDEyOCwgNzYsIDc5LCA3OSwgCisgICAgMjAzLCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3OSwgNzgsIDgzLCA4NSwgNzcsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDY1LCAKKyAgICAxMjgsIDc2LCA3OSwgNzgsIDcxLCAxOTMsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIAorICAgIDg5LCA4MiwgMTI4LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4MywgNzksIDIwNCwgCisgICAgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzksIDgzLCAyMTEsIDc2LCA3OSwgNzgsIAorICAgIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDc3LCA2NSwgNjgsIDIxMCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCAKKyAgICA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzIsIDY1LCA3MSwgNjUsIDc2LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgCisgICAgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDY1LCAyMTAsIDc2LCA3OSwgNzcsIDc3LCA2NSwgNjksIDEyOCwgNzYsIDc5LCAKKyAgICA3NywgMTI4LCA3NiwgNzksIDIwNSwgNzYsIDc5LCA3NiwgNzYsIDczLCA4MCwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzYsIAorICAgIDc2LCAxMjgsIDc2LCA3OSwgNzEsIDIxMCwgNzYsIDc5LCA3MSwgNzksIDg0LCA4OSwgODAsIDE5NywgNzYsIDc5LCA3MSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDIwNSwgNzYsIDc5LCA3MSwgMTI4LCA3NiwgNzksIDY4LCA2OSwgODMsIDg0LCA3OSwgNzgsIDY5LCAKKyAgICAxMjgsIDc2LCA3OSwgNjcsIDc5LCA3NywgNzksIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDIwMywgNzYsIAorICAgIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc2LCA3OSwgCisgICAgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA3NywgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgCisgICAgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgCisgICAgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCAKKyAgICA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCAKKyAgICA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIAorICAgIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgCisgICAgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIAorICAgIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgCisgICAgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIAorICAgIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCA3NywgNjksIDEyOCwgNzYsIDczLCA3NiwgODksIDEyOCwgCisgICAgNzYsIDczLCA3NiwgNzMsIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCA3MywgNzMsIDEyOCwgNzYsIDczLCAKKyAgICA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCA2OSwgCiAgICAgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIDEyOCwgCi0gICAgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzYsIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAKLSAgICAxMjgsIDc2LCA3MywgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNzYsIAotICAgIDcyLCA3OSwgNzksIDEyOCwgNzYsIDcyLCA3MywgNzMsIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCi0gICAgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgCi0gICAgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgODYsIDY5LCAyMDQsIDc2LCA2OSwgODQsIDg0LCA2OSwgODIsIDEyOCwgCi0gICAgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzYsIDY5LCAKLSAgICA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIAotICAgIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAKLSAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIAotICAgIDE5MywgNzYsIDY5LCA3NywgNzksIDczLCAxMjgsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIAotICAgIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIAotICAgIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgCi0gICAgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgCi0gICAgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCAKLSAgICA4NCwgMTI4LCA3NiwgNjksIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NiwgNjksIAotICAgIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCA2OCwgNjksIDgyLCAxMjgsIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgCi0gICAgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgCi0gICAgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgCi0gICAgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAKLSAgICAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDg0LCAxMjgsIDc2LCAKLSAgICA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgCi0gICAgMjEwLCA3NiwgNjUsIDgyLCA3MSwgMTk3LCA3NiwgNjUsIDgwLCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAKLSAgICAxOTcsIDc2LCA2NSwgNzcsIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCA2OSwgMTI4LCAKLSAgICA3NiwgNjUsIDc3LCAxOTcsIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCA3NiwgNjUsIAotICAgIDc3LCA2NiwgNjgsIDE5MywgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIDc2LCA2NSwgCi0gICAgMjA0LCA3NiwgNjUsIDc1LCA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCAKLSAgICA4OSwgNjUsIDc2LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgMTI4LCA3NiwgNjUsIDcxLCA4NSwgODMsIAorICAgIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCA3MywgCisgICAgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIDgyLCAKKyAgICA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAxMjgsIAorICAgIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIDY1LCA2NSwgCisgICAgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIDg2LCA2OSwgCisgICAgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgODUsIDY1LCAKKyAgICA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgCisgICAgMTI4LCA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCAKKyAgICA2NSwgNzgsIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIAorICAgIDY5LCA3OSwgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgCisgICAgNzYsIDY1LCAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCAKKyAgICA4MiwgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIAorICAgIDcxLCAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgCisgICAgNjksIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIAorICAgIDc4LCAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgCisgICAgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIAorICAgIDIxMiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgCisgICAgMTk3LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCAKKyAgICA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIAorICAgIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCAKKyAgICA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIAorICAgIDY5LCA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgCisgICAgNzYsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCAKKyAgICA3NiwgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgCisgICAgMTk2LCA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIAorICAgIDY1LCA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgCisgICAgODcsIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgCisgICAgNzYsIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCAKKyAgICA4MiwgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIAorICAgIDY5LCA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgCisgICAgODIsIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgCisgICAgNzYsIDY1LCAyMDcsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDc2LCA2NSwgNzgsIDcxLCA4NSwgNjUsIDcxLCAKKyAgICAxOTcsIDc2LCA2NSwgNzgsIDY5LCA4MywgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzcsIAorICAgIDY5LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgMTk2LCA3NiwgNjUsIDc3LCA2OSwgMTI4LCA3NiwgNjUsIDc3LCAxOTcsIAorICAgIDc2LCA2NSwgNzcsIDY4LCA2NSwgMTI4LCA3NiwgNjUsIDc3LCA2OCwgMTI4LCA3NiwgNjUsIDc3LCA2NiwgNjgsIDE5MywgCisgICAgNzYsIDY1LCA3NywgNjUsIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc2LCAxMjgsIDc2LCA2NSwgMjA0LCA3NiwgNjUsIDc1LCAKKyAgICA3NSwgNzIsIDY1LCA3OCwgNzEsIDg5LCA2NSwgNzksIDEyOCwgNzYsIDY1LCA3NCwgNjUsIDc4LCA4OSwgNjUsIDc2LCA2NSwgCisgICAgNzgsIDEyOCwgNzYsIDY1LCAyMDEsIDc2LCA2NSwgNzIsIDgzLCA3MiwgODUsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAKICAgICAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCAKLSAgICA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjcsIAotICAgIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIAotICAgIDIwNiwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3NSwgODksIDg1LCA4MiwgCi0gICAgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIDc2LCA3MywgODMsIDc3LCAKLSAgICA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIDc1LCA4OSwgNjksIDY5LCAxMjgsIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCAKKyAgICA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIAorICAgIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIAorICAgIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgCisgICAgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzYsIDY1LCAKKyAgICA2NSwgNzgsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDY1LCA3NywgODUsIDEyOCwgNzYsIAorICAgIDY1LCA2NSwgNzcsIDEyOCwgNzYsIDY1LCA2NSwgNzMsIDEyOCwgNzYsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDc2LCA0OCwgCisgICAgNDgsIDUwLCA2NSwgMTI4LCA3NiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzYsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIAorICAgIDE5NiwgNzUsIDg5LCA4NSwgODIsIDczLCA3MywgMTI4LCA3NSwgODksIDg1LCAxMjgsIDc1LCA4OSwgNzksIDEyOCwgNzUsIAorICAgIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg5LCA3MywgMTI4LCA3NSwgODksIDY5LCAxMjgsIDc1LCA4OSwgCiAgICAgNjUsIDg0LCA3MiwgNzksIDIxMSwgNzUsIDg5LCA2NSwgNjUsIDEyOCwgNzUsIDg5LCA2NSwgMTI4LCA3NSwgODgsIDg3LCAKICAgICA3MywgMTI4LCA3NSwgODgsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA4NywgNjksIDEyOCwgNzUsIDg4LCA4NywgNjUsIAogICAgIDY1LCAxMjgsIDc1LCA4OCwgODcsIDY1LCAxMjgsIDc1LCA4OCwgODUsIDEyOCwgNzUsIDg4LCA3OSwgMTI4LCA3NSwgODgsIAogICAgIDczLCAxMjgsIDc1LCA4OCwgNjksIDY5LCAxMjgsIDc1LCA4OCwgNjksIDEyOCwgNzUsIDg4LCA2NSwgNjUsIDEyOCwgNzUsIAogICAgIDg4LCA2NSwgMTI4LCA3NSwgODcsIDg1LCA1MSwgNDksIDU2LCAxMjgsIDc1LCA4NywgNzksIDc5LCAxMjgsIDc1LCA4NywgCiAgICAgNzksIDEyOCwgNzUsIDg3LCA3MywgNzMsIDEyOCwgNzUsIDg3LCA3MywgMTI4LCA3NSwgODcsIDY5LCA2OSwgMTI4LCA3NSwgCi0gICAgODcsIDY5LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgCi0gICAgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIDc1LCA4NSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIAotICAgIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgMTI4LCA3NSwgODUsIDc4LCA3MSwgMTI4LCA3NSwgODUsIDc4LCA2OCwgCi0gICAgNjgsIDY1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NSwgODUsIDc2LCAxMjgsIDc1LCA4NSwgMjA0LCA3NSwgODUsIDU1LCAKLSAgICAxMjgsIDc1LCA4NSwgNTIsIDEyOCwgNzUsIDg1LCAxODAsIDc1LCA4NSwgNTEsIDEyOCwgNzUsIDg1LCAxNzksIDc1LCA4NCwgCi0gICAgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDczLCAxMjgsIDc1LCA4MiwgNjksIDc3LCA2NSwgODMsIDg0LCAKLSAgICA3MywgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgODksIDgwLCA3OSwgODIsIDgyLCA3OSwgNzksIDc4LCAxMjgsIAotICAgIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDgyLCAKLSAgICA2NSwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA4MCwgODUsIAotICAgIDEyOCwgNzUsIDgwLCA3OSwgNzksIDEyOCwgNzUsIDgwLCA3OSwgMTI4LCA3NSwgODAsIDczLCAxMjgsIDc1LCA4MCwgNjksIAotICAgIDc4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgNzgsIDEyOCwgNzUsIAotICAgIDgwLCA2NSwgMTI4LCA3NSwgNzksIDg4LCAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODQsIDEyOCwgNzUsIAotICAgIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA3NSwgNzksIDgyLCA2OSwgCi0gICAgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgMTk1LCA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgNzksIDEyOCwgNzUsIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIAotICAgIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgCi0gICAgNzcsIDE5MywgNzUsIDc5LCA3NywgMjAxLCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCAKLSAgICA2NiwgODUsIDg2LCAxOTMsIDc1LCA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCA2OSwgODQsIAotICAgIDEyOCwgNzUsIDc5LCA2NSwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCA2OSwgCi0gICAgMTI4LCA3NSwgNzgsIDczLCA3MCwgMTk3LCA3NSwgNzcsIDEyOCwgNzUsIDIwNSwgNzUsIDc2LCA3MywgODQsIDc5LCA3OCwgCi0gICAgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgMTkzLCA3NSwgNzYsIDY1LCAKLSAgICAxMjgsIDc1LCA3NiwgMTI4LCA3NSwgNzUsIDg1LCAxMjgsIDc1LCA3NSwgNzksIDEyOCwgNzUsIDc1LCA3MywgMTI4LCA3NSwgCi0gICAgNzUsIDY5LCA2OSwgMTI4LCA3NSwgNzUsIDY5LCAxMjgsIDc1LCA3NSwgNjUsIDEyOCwgNzUsIDc1LCAxMjgsIDc1LCA3NCwgCi0gICAgNjksIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIAotICAgIDc5LCA3NSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA3MywgCi0gICAgODksIDY5LCA3OSwgMjAzLCA3NSwgNzMsIDg4LCAxMjgsIDc1LCA3MywgODQsIDEyOCwgNzUsIDczLCA4MywgNzMsIDc3LCAKKyAgICA4NywgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIAorICAgIDY1LCAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIAorICAgIDEyOCwgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgCisgICAgMTI4LCA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDc5LCAxMjgsIDc1LCAKKyAgICA4NSwgODIsIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIDc1LCA4NSwgODIsIDEyOCwgNzUsIAorICAgIDg1LCAyMTAsIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIDg1LCA3OSwgODAsIDEyOCwgNzUsIAorICAgIDg1LCA3OSwgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIDc1LCA4NSwgNzgsIDcxLCAxMjgsIAorICAgIDc1LCA4NSwgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgNzYsIDEyOCwgNzUsIDg1LCAKKyAgICAyMDQsIDc1LCA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgMTI4LCA3NSwgODUsIDE4MCwgCisgICAgNzUsIDg1LCA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4MywgCisgICAgNzMsIDEyOCwgNzUsIDgyLCA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCAKKyAgICA4OSwgODAsIDc5LCA4MiwgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDc1LCA3OSwgCisgICAgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCAKKyAgICA4MiwgNjUsIDg0LCA3MywgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCA3NSwgODAsIAorICAgIDc5LCA3OSwgMTI4LCA3NSwgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIDg4LCAxMjgsIAorICAgIDc1LCA4MCwgNjksIDY5LCAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgMTI4LCA3NSwgCisgICAgODAsIDY1LCA3OCwgMTI4LCA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgODUsIDg1LCAKKyAgICAxMjgsIDc1LCA3OSwgODQsIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCA4MiwgNzksIAorICAgIDc4LCA3MywgODMsIDEyOCwgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIDE5NSwgCisgICAgNzUsIDc5LCA4MSwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODAsIAorICAgIDEyOCwgNzUsIDc5LCA3OSwgODAsIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCA3OSwgCisgICAgNzksIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAKKyAgICAxOTMsIDc1LCA3OSwgNzcsIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgNjYsIAorICAgIDg1LCA4NiwgMTkzLCA3NSwgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAxMjgsIAorICAgIDc1LCA3OSwgMjAzLCA3NSwgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgNzEsIAorICAgIDcyLCA3OSwgNzcsIDEyOCwgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCA3OSwgCisgICAgNjUsIDEyOCwgNzUsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIDc4LCAKKyAgICA3MywgNzAsIDY5LCAxMjgsIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIDczLCAKKyAgICA4NCwgNzksIDc4LCAxMjgsIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAxOTMsIAorICAgIDc1LCA3NiwgNjUsIDEyOCwgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgNzUsIAorICAgIDczLCAxMjgsIDc1LCA3NSwgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgNzUsIAorICAgIDEyOCwgNzUsIDc0LCA2OSwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIAorICAgIDc1LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCA4OSwgCisgICAgNjksIDc5LCA3NSwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzgsIAorICAgIDczLCA2OSwgODUsIDc4LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCAKKyAgICA3MiwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCA4MywgCisgICAgNzMsIDc4LCAxOTksIDc1LCA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIDc3LCAKICAgICA1MywgMTI4LCA3NSwgNzMsIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgNjUsIAogICAgIDc2LCAxMjgsIDc1LCA3MywgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCA2OSwgCiAgICAgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIDc1LCAKLSAgICA3MywgODIsIDc5LCAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MCwgMTI4LCA3NSwgNzMsIAotICAgIDIwOCwgNzUsIDczLCA3OCwgODMsIDcyLCA3MywgODAsIDEyOCwgNzUsIDczLCA3MywgMTI4LCA3NSwgNzMsIDcyLCAxMjgsIAotICAgIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgCi0gICAgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIDczLCA2NywgNzUsIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgCi0gICAgNzMsIDEyOCwgNzUsIDcyLCA4NSwgNjUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDIxMiwgNzUsIDcyLCA3OSwgNzgsIDEyOCwgCi0gICAgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgMjA3LCA3NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDc1LCAyMDAsIDc1LCA3MiwgNzMsIDEyOCwgNzUsIDcyLCA3MiwgNjUsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIAotICAgIDEyOCwgNzUsIDcyLCA2OSwgNjksIDEyOCwgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgMTI4LCA3NSwgNzIsIAotICAgIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNzgsIDE5OSwgNzUsIDcyLCA2NSwgNzgsIDY4LCAxOTMsIDc1LCA3MiwgCi0gICAgNjUsIDc4LCAxMjgsIDc1LCA3MiwgNjUsIDc1LCA2NSwgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIAotICAgIDEyOCwgNzUsIDcyLCA2NSwgNzIsIDEyOCwgNzUsIDcyLCA2NSwgNjUsIDEyOCwgNzUsIDcxLCAxMjgsIDc1LCA2OSwgODksIAotICAgIDY3LCA2NSwgODAsIDEyOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDc1LCA2OSwgODksIDEyOCwgCi0gICAgNzUsIDY5LCAyMTcsIDc1LCA2OSwgODgsIDEyOCwgNzUsIDY5LCA4NCwgODQsIDIwMSwgNzUsIDY5LCA4MywgNzIsIDUwLCAKLSAgICAxMjgsIDc1LCA2OSwgODAsIDEyOCwgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIAotICAgIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDE5MywgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgCi0gICAgODQsIDEyOCwgNzUsIDY5LCA3OCwgMTI4LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIDgwLCAKLSAgICA4NSwgMjA0LCA3NSwgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgNjksIAotICAgIDc3LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgCi0gICAgNzYsIDg2LCA3MywgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIDY5LCAKLSAgICA3MiwgMTI4LCA3NSwgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgNjksIAotICAgIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCA3NSwgCi0gICAgNjYsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc1LCAKLSAgICA2NSwgODksIDY1LCAyMDAsIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NiwgODksIDc1LCA2NSwgMTI4LCA3NSwgNjUsIAotICAgIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg0LCA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgCi0gICAgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCA4NCwgNjUsIDg2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNjUsIDg0LCAKLSAgICA2NSwgODYsIDE5MywgNzUsIDY1LCA4NCwgNjUsIDc1LCA2NSwgNzgsIDY1LCA0NSwgNzIsIDczLCA4MiwgNjUsIDcxLCA2NSwgCi0gICAgNzgsIDE5MywgNzUsIDY1LCA4NCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCAKLSAgICA4MywgODIsIDY1LCA4NCwgNjUsIDIwNiwgNzUsIDY1LCA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIAotICAgIDc1LCA2NSwgODMsIDc1LCA2NSwgNzYsIDEyOCwgNzUsIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODIsIDc5LCA4MiwgCi0gICAgNzMsIDczLCAxMjgsIDc1LCA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCAKLSAgICA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCi0gICAgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDY1LCA4MCwgODksIAotICAgIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCAKLSAgICA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDY1LCA4MCwgODAsIAotICAgIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgNjUsIDc2LCAxMjgsIAotICAgIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgODAsIDEyOCwgNzUsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA3NSwgCi0gICAgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzcsIDUyLCAxMjgsIDc1LCAKLSAgICA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIAotICAgIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIAotICAgIDc1LCA2NSwgMjAxLCA3NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCA3NSwgNjUsIAotICAgIDY4LCAxODEsIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIAotICAgIDY1LCA2OCwgNTAsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIDY2LCAxMjgsIDc1LCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIDc1LCA2NSwgCi0gICAgMTc4LCA3NCwgODcsIDY1LCAxMjgsIDc0LCA4NSwgODQsIDEyOCwgNzQsIDg1LCA4MCwgNzMsIDg0LCA2OSwgODIsIDEyOCwgCi0gICAgNzQsIDg1LCA3OSwgODQsIDEyOCwgNzQsIDg1LCA3OSwgODAsIDEyOCwgNzQsIDg1LCA3OCwgNzksIDEyOCwgNzQsIDg1LCAKLSAgICA3OCwgNjksIDEyOCwgNzQsIDg1LCA3NiwgODksIDEyOCwgNzQsIDg1LCA2OSwgODUsIDczLCAxMjgsIDc0LCA4NSwgNjgsIAotICAgIDcxLCA2OSwgMTI4LCA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIDc0LCA3OSwgCi0gICAgODksIDc5LCA4NSwgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgMjEyLCA3NCwgNzksIDc4LCA3MSwgMTI4LCA3NCwgCi0gICAgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgNzksIDczLCA3OCwgNjksIDY4LCAxMjgsIDc0LCAKLSAgICA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCA4OSwgODgsIDEyOCwgNzQsIDc0LCA4OSwgODQsIAotICAgIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCA3NCwgNzQsIDg1LCA4OCwgMTI4LCA3NCwgNzQsIAotICAgIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDEyOCwgNzQsIDc0LCA4NSwgCi0gICAgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCAKLSAgICA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAxMjgsIDc0LCA3NCwgNzksIDg0LCAxMjgsIDc0LCAKLSAgICA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCA3MywgODgsIDEyOCwgNzQsIDc0LCA3MywgODQsIAotICAgIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4NCwgCi0gICAgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDEyOCwgNzQsIDc0LCA3MywgMTI4LCA3NCwgCi0gICAgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgNjUsIDEyOCwgNzQsIDczLCA3NiwgMTI4LCA3NCwgCi0gICAgNzMsIDcyLCA4NiwgNjUsIDc3LCA4NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzQsIDczLCA2NSwgMTI4LCA3NCwgNzIsIDc5LCAKLSAgICAxMjgsIDc0LCA3MiwgNjksIDcyLCAxMjgsIDc0LCA3MiwgNjUsIDc4LCAxMjgsIDc0LCA3MiwgNjUsIDEyOCwgNzQsIDY5LCAKLSAgICA4MiwgODUsIDgzLCA2NSwgNzYsIDY5LCA3NywgMTI4LCA3NCwgNjksIDgyLCA2NSwgMjA2LCA3NCwgNjksIDgyLCA2NSwgCi0gICAgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA2OSwgNzIsIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCA2OSwgNzEsIDc5LCA3MSwgCi0gICAgNjUsIDc4LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIDc0LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc0LCAKLSAgICA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCA3OCwgNjksIAotICAgIDgzLCAxOTcsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgCi0gICAgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NSwgMTI4LCAKLSAgICA3NCwgNDUsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIAotICAgIDgzLCA2NSwgMTI4LCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA4OSwgCi0gICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg5LCAxMjgsIDczLCA4NSwgNzQsIDY1LCAxMjgsIDczLCA4NSwgMTI4LCA3MywgCi0gICAgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCAKLSAgICA4MiwgMTI4LCA3MywgODMsIDIxMSwgNzMsIDgzLCA3OSwgNzgsIDEyOCwgNzMsIDgzLCA3OSwgMjA2LCA3MywgODMsIDY1LCAKLSAgICA3NSwgNzMsIDE5MywgNzMsIDgzLCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg5LCA2NSwgNzgsIAotICAgIDc4LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgCi0gICAgNzMsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDEyOCwgNzMsIDc5LCAKLSAgICA4NCwgMTkzLCA3MywgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDczLCA3OCwgODYsIAotICAgIDczLCA4MywgNzMsIDY2LCA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDc4LCA4NiwgCi0gICAgNjksIDgyLCA4NCwgNjksIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCA3MywgMTI4LCAKLSAgICA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgCi0gICAgODMsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIAotICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIAotICAgIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3OSwgNjcsIDc1LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgCi0gICAgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCAKLSAgICA2OSwgODIsIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIAotICAgIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIAotICAgIDgyLCA2NSwgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgCi0gICAgNzgsIDg0LCA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgNzgsIDc5LCA2NywgNjksIDc4LCA2NywgNjksIAorICAgIDczLCA4MiwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgxLCAxMjgsIDc1LCA3MywgCisgICAgODAsIDEyOCwgNzUsIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3MywgNzgsIDY4LCAKKyAgICA2OSwgODIsIDcxLCA2NSwgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3NywgNzksIDc4LCA3OSwgMTI4LCA3NSwgNzMsIAorICAgIDczLCAxMjgsIDc1LCA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCA2OSwgODAsIDEyOCwgNzUsIAorICAgIDczLCA2OSwgNjksIDc3LCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgNzUsIAorICAgIDczLCA2NywgNzUsIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA4NSwgCisgICAgNjksIDc4LCA0NSwgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY1LCA4NCwgMTI4LCAKKyAgICA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCA3MiwgNzksIDc4LCAxMjgsIDc1LCA3MiwgNzksIAorICAgIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDIwNywgNzUsIDcyLCA3MywgODQsIDEyOCwgNzUsIAorICAgIDcyLCA3MywgNjksIDg1LCA3NSwgMjAwLCA3NSwgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgCisgICAgNzIsIDY1LCAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIDY5LCAKKyAgICA2OSwgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgNzUsIAorICAgIDcyLCA2NSwgODIsIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCA3MiwgCisgICAgNjUsIDc4LCA2OCwgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIDcyLCAKKyAgICA2NSwgNzUsIDY1LCA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgCisgICAgMTI4LCA3NSwgNzIsIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgCisgICAgNjUsIDgwLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIAorICAgIDEyOCwgNzUsIDY5LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MywgCisgICAgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCAKKyAgICA4MCwgODUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIDc5LCAyMTIsIDc1LCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2OSwgODUsIAorICAgIDc1LCA2OSwgODUsIDg0LCA3OCwgNjgsIDY1LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA4NCwgNzcsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNzMsIDEyOCwgNzUsIDY5LCAKKyAgICA4NCwgODQsIDIwMSwgNzUsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIAorICAgIDc5LCA4NywgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgCisgICAgNzcsIDY1LCA4NCwgMTkzLCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCAKKyAgICA3NSwgNjksIDc4LCAxMjgsIDc1LCA2OSwgMjA2LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIAorICAgIDgwLCA4NSwgMjA0LCA3NSwgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgCisgICAgNjksIDc3LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCAKKyAgICA2OSwgNzYsIDg2LCA3MywgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIAorICAgIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgCisgICAgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCAKKyAgICA3NSwgNjYsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDc1LCA2NSwgODksIDY1LCAyMDAsIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgNzMsIDEyOCwgNzUsIDY1LCA4NiwgCisgICAgODksIDc1LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg0LCAKKyAgICA3OSwgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDY1LCA3NSwgCisgICAgMTkzLCA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA4NiwgMTkzLCAKKyAgICA3NSwgNjUsIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCA3OCwgMTkzLCA3NSwgCisgICAgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDIwNiwgNzUsIDY1LCAKKyAgICA4MywgODIsIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgNzYsIDEyOCwgNzUsIAorICAgIDY1LCA4MywgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCA2NSwgODIsIDgzLCA3MiwgCisgICAgNjUsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIDgyLCAyMDcsIDc1LCAKKyAgICA2NSwgODIsIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODIsIDY1LCA3OCwgCisgICAgMTI4LCA3NSwgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIAorICAgIDgwLCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA2NSwgCisgICAgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgODksIAorICAgIDY5LCA3OSwgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA2NSwgCisgICAgODAsIDgwLCAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDY1LCAKKyAgICA3NiwgMTI4LCA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDc1LCA2NSwgNzgsIAorICAgIDcxLCAxMjgsIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc3LCA1MiwgCisgICAgMTI4LCA3NSwgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgCisgICAgNzUsIDY1LCA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCA2NSwgNzMsIDgyLCAKKyAgICA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgMjAxLCA3NSwgNjUsIDcwLCA2NSwgMTI4LCA3NSwgNjUsIDcwLCAKKyAgICAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgMTI4LCA3NSwgNjUsIDY4LCAxODEsIDc1LCA2NSwgNjgsIDUyLCAKKyAgICAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgNjgsIDE3OSwgNzUsIDY1LCA2OCwgNTAsIDEyOCwgNzUsIDY1LCAKKyAgICA2OCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgNjYsIDEyOCwgNzUsIDY1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCAKKyAgICA2NSwgNzAsIDg1LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgNzUsIDY1LCAxNzgsIDc1LCAKKyAgICA0OCwgNDgsIDU2LCAxMjgsIDc1LCA0OCwgNDgsIDU1LCAxMjgsIDc1LCA0OCwgNDgsIDU0LCAxMjgsIDc1LCA0OCwgNDgsIAorICAgIDUzLCAxMjgsIDc1LCA0OCwgNDgsIDUyLCAxMjgsIDc1LCA0OCwgNDgsIDUxLCAxMjgsIDc1LCA0OCwgNDgsIDUwLCAxMjgsIAorICAgIDc1LCA0OCwgNDgsIDQ5LCAxMjgsIDc0LCA4NywgNjUsIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCA3NCwgODUsIDg0LCAxMjgsIAorICAgIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAxMjgsIDc0LCA4NSwgNzksIDgwLCAKKyAgICAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCA4NSwgNzYsIDg5LCAxMjgsIDc0LCAKKyAgICA4NSwgNjksIDg1LCA3MywgMTI4LCA3NCwgODUsIDY4LCA4NSwgNzYsIDEyOCwgNzQsIDg1LCA2OCwgNzEsIDY5LCAxMjgsIAorICAgIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgODMsIDIwMCwgNzQsIDc5LCA4OSwgNzksIDg1LCAKKyAgICAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAyMTIsIDc0LCA3OSwgNzgsIDcxLCAKKyAgICAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCA3OSwgNzMsIDc4LCA2OSwgNjgsIAorICAgIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIDg5LCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIDc0LCA3NCwgODUsIDg4LCAxMjgsIAorICAgIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgMTI4LCA3NCwgCisgICAgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCAKKyAgICA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIDEyOCwgNzQsIDc0LCA3OSwgODQsIAorICAgIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIDczLCA4OCwgMTI4LCA3NCwgNzQsIAorICAgIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODgsIDEyOCwgNzQsIDc0LCA3MywgCisgICAgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgMTI4LCA3NCwgNzQsIDczLCAKKyAgICAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCA2NSwgMTI4LCA3NCwgNzMsIDc2LCAKKyAgICAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCA3NCwgNzMsIDY1LCAxMjgsIAorICAgIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIDEyOCwgNzQsIDcyLCA2NSwgNzgsIDEyOCwgNzQsIDcyLCA2NSwgCisgICAgNzcsIDEyOCwgNzQsIDcyLCA2NSwgMTI4LCA3NCwgNjksIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCAKKyAgICA2OSwgNzcsIDEyOCwgNzQsIDY5LCA4MiwgNjUsIDIwNiwgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCAKKyAgICA3NCwgNjksIDcyLCAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIAorICAgIDY5LCA3NywgMTI4LCA3NCwgNjksIDY1LCA3OCwgODMsIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCisgICAgNzQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDc0LCA2NSwgODIsIDEyOCwgNzQsIDY1LCA4MCwgNjUsIDc4LCAKKyAgICA2OSwgODMsIDE5NywgNzQsIDY1LCA4MCwgNjUsIDc4LCAxMjgsIDc0LCA2NSwgNzgsIDg1LCA2NSwgODIsIDg5LCAxMjgsIAorICAgIDc0LCA2NSwgNzYsIDc2LCA2NSwgNzQsIDY1LCA3NiwgNjUsIDc2LCA3OSwgODUsIDcyLCA3OSwgODUsIDEyOCwgNzQsIDY1LCAKKyAgICA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCA2OSwgODIsIDc4LCAxMjgsIAorICAgIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIDY5LCAxOTYsIDIwMiwgCisgICAgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgMTkzLCA3MywgOTAsIDcyLCAKKyAgICA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAxOTMsIDczLCA4OSwgNjksIDc1LCAxMjgsIDczLCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIDEyOCwgNzMsIDg1LCAxMjgsIDczLCA4NCwgMjExLCA3MywgODQsIAorICAgIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgNzMsIDgzLCA4MywgNzIsIDY1LCA4MiwgCisgICAgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgODMsIDc5LCAyMDYsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCAKKyAgICA2OSwgNzgsIDEyOCwgNzMsIDgzLCA2NSwgNzUsIDczLCAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgCisgICAgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCAKKyAgICA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgNDUsIDY3LCA3OSwgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgCisgICAgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCAKKyAgICA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIDE5MywgNzMsIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIAorICAgIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgODMsIDczLCA2NiwgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgCisgICAgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCA4MiwgODQsIDY5LCAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIAorICAgIDE5NywgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgNjUsIDY2LCA3MywgCisgICAgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCAKKyAgICA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgCisgICAgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCA3OCwgODQsIDY5LCAKKyAgICA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzksIDY3LCA3NSwgCisgICAgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCA4NCwgNjksIDgyLCAKKyAgICA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAorICAgIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgNzMsIDc4LCA4NCwgCisgICAgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgNzEsIDgyLCA2NSwgCisgICAgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCA2OSwgNzgsIDg0LCAKKyAgICA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIDczLCA3OSwgCisgICAgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCA2OSwgCiAgICAgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIDIxMCwgCiAgICAgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIDc4LCAKICAgICA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgNjUsIAogICAgIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCA4NSwgCiAgICAgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIDczLCAKICAgICA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgNzMsIAotICAgIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCA2OSwgCi0gICAgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIDc4LCA2NywgODIsIDY5LCAKLSAgICA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgNzMsIDc4LCA2NywgODIsIAotICAgIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDE5NywgNzMsIDc4LCA2NywgCi0gICAgNzYsIDg1LCA2OCwgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDcyLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCAKLSAgICA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDczLCA3NywgODAsIAotICAgIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3MywgODMsIDY5LCA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgCi0gICAgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIDc3LCA3MywgMjA2LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCAKLSAgICA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIAotICAgIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA2OCwgNzMsIDY1LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgCi0gICAgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCA4NSwgODksIAotICAgIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4NCwgMTI4LCA3MywgCi0gICAgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MSwgMTI4LCA3MywgNzYsIDczLCAKLSAgICA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3MywgNzYsIDUwLCAxMjgsIDczLCA3NSwgNjUsIAotICAgIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgNzQsIDEyOCwgNzMsIDczLCA4OSwgNjUsIDc4LCA3OCwgCi0gICAgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgNzMsIDcxLCA3MSwgODcsIDgzLCAxMjgsIDczLCA3MCwgCi0gICAgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzMsIDY5LCAKLSAgICA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAKLSAgICA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAotICAgIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA3NSwgNzIsIDczLCAKLSAgICA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDE5OSwgCi0gICAgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzMsIDY4LCA3MywgMjA1LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCAKLSAgICA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCAKLSAgICA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgCi0gICAgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIAotICAgIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCAKLSAgICA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKLSAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKLSAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCi0gICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKLSAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCi0gICAgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAotICAgIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKLSAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIAotICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCAKLSAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgCi0gICAgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIAotICAgIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgMTI4LCA3MywgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgCi0gICAgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCAKLSAgICA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgODksIDgyLCAxMjgsIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgCi0gICAgNjksIDg1LCAxMjgsIDczLCA0NSwgNjYsIDY5LCA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIAotICAgIDEyOCwgNzMsIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIAotICAgIDkwLCA5MCwgODAsIDEyOCwgNzIsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIAotICAgIDcyLCA5MCwgODQsIDEyOCwgNzIsIDkwLCA3MSwgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAKLSAgICAyMTEsIDcyLCA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIAotICAgIDY5LCA3OCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCAKLSAgICA4MywgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIAotICAgIDg3LCA3MSwgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCAKLSAgICA4NCwgMTI4LCA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCAKLSAgICA4OCwgNzMsIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIAotICAgIDczLCA2OSwgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgCi0gICAgNzMsIDEyOCwgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgCi0gICAgODgsIDY1LCA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAKLSAgICAxMjgsIDcyLCA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgyLCAKLSAgICA2NSwgNzgsIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgNzIsIAotICAgIDg1LCA3OCwgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgCi0gICAgODUsIDc3LCA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIDcyLCAKLSAgICA4NSwgNjYsIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NSwgODIsIDY1LCA2OCwgNjgsIDc5LCAxMjgsIAotICAgIDcyLCA4MiwgODksIDg2LCA3OCwgNzMsIDE5MywgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgCi0gICAgODAsIDEyOCwgNzIsIDc5LCA4NSwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIAotICAgIDEyOCwgNzIsIDc5LCA4NSwgMjEwLCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgyLCA4MywgNjksIDEyOCwgNzIsIAotICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDU0LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDU0LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDU0LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKLSAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgCi0gICAgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIAotICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDUxLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDUxLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUxLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCAKLSAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCi0gICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAotICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDQ5LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ5LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCAKLSAgICA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgCi0gICAgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIAotICAgIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgNzksIDgyLCAKLSAgICA4NSwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCA2NywgCi0gICAgMTI4LCA3MiwgNzksIDc3LCA3OSwgODQsIDcyLCA2OSwgODQsIDczLCAxOTUsIDcyLCA3OSwgNzYsIDY4LCA3MywgNzgsIAotICAgIDE5OSwgNzIsIDc5LCA3NiwgNjUsIDc3LCAxMjgsIDcyLCA3OSwgNzYsIDY1LCAyMDUsIDcyLCA3OSwgNjksIDEyOCwgNzIsIAotICAgIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgCi0gICAgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAxMjgsIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAKLSAgICAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIAotICAgIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgODgsIDEyOCwgNzIsIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgCi0gICAgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgNzgsIDY1LCA4NCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgCi0gICAgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCAKLSAgICA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCAKLSAgICA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIAotICAgIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgCi0gICAgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgNzIsIDc3LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgCi0gICAgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA3OSwgMTI4LCA3MiwgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCAKLSAgICA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIAotICAgIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA2NSwgODgsIDEyOCwgNzIsIAotICAgIDc3LCA2NSwgODQsIDEyOCwgNzIsIDc3LCA2NSwgODAsIDEyOCwgNzIsIDc3LCA2NSwgMTI4LCA3MiwgNzYsIDg5LCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDg5LCA4NCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODIsIDEyOCwgCi0gICAgNzIsIDc2LCA4OSwgODAsIDEyOCwgNzIsIDc2LCA4OSwgMTI4LCA3MiwgNzYsIDg1LCA4OCwgMTI4LCA3MiwgNzYsIDg1LCAKLSAgICA4NCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODIsIDEyOCwgNzIsIDc2LCA4NSwgODAsIAotICAgIDEyOCwgNzIsIDc2LCA4NSwgNzksIDg4LCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDg1LCA3OSwgCi0gICAgMTI4LCA3MiwgNzYsIDg1LCAxMjgsIDcyLCA3NiwgNzksIDg4LCAxMjgsIDcyLCA3NiwgNzksIDgwLCAxMjgsIDcyLCA3NiwgCi0gICAgNzksIDEyOCwgNzIsIDc2LCA3MywgODgsIDEyOCwgNzIsIDc2LCA3MywgODQsIDEyOCwgNzIsIDc2LCA3MywgODAsIDEyOCwgCi0gICAgNzIsIDc2LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDczLCA2OSwgMTI4LCAKLSAgICA3MiwgNzYsIDczLCAxMjgsIDcyLCA3NiwgNjksIDg4LCAxMjgsIDcyLCA3NiwgNjksIDgwLCAxMjgsIDcyLCA3NiwgNjksIAotICAgIDEyOCwgNzIsIDc2LCA2NSwgODgsIDEyOCwgNzIsIDc2LCA2NSwgODQsIDEyOCwgNzIsIDc2LCA2NSwgODAsIDEyOCwgNzIsIAotICAgIDc2LCA2NSwgMTI4LCA3MiwgNzUsIDEyOCwgNzIsIDczLCA5MCwgNjYsIDEyOCwgNzIsIDczLCA4MiwgNzMsIDgxLCAxMjgsIAotICAgIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDY5LCAKLSAgICA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgODUsIAotICAgIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIDg1LCAKLSAgICA3OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgODUsIAotICAgIDIwMCwgNzIsIDczLCA2OSwgMTI4LCA3MiwgNzMsIDY4LCA3MywgNzgsIDE5OSwgNzIsIDczLCA2OCwgNjksIDg0LCAxMjgsIAotICAgIDcyLCA3MywgNjgsIDY5LCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgODUsIDEyOCwgNzIsIDcyLCA3OSwgCi0gICAgMTI4LCA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCA2NSwgCi0gICAgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODQsIDcyLCAKKyAgICA4MiwgNjksIDY3LCAyMTIsIDczLCA3OCwgNjgsIDczLCA2NywgNjUsIDg0LCA3OSwgODIsIDEyOCwgNzMsIDc4LCA2OCwgNzMsIAorICAgIDY3LCA2NSwgODQsIDc5LCAyMTAsIDczLCA3OCwgNjgsIDczLCAxOTUsIDczLCA3OCwgNjgsIDczLCA2NSwgMjA2LCA3MywgCisgICAgNzgsIDY4LCA2OSwgODgsIDEyOCwgNzMsIDc4LCA2OCwgNjksIDgwLCA2OSwgNzgsIDY4LCA2OSwgNzgsIDIxMiwgNzMsIDc4LCAKKyAgICA2NywgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDIxMSwgNzMsIAorICAgIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDczLCA3OCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDE5NywgCisgICAgNzMsIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA2NywgNzYsIDg1LCA2OCwgNzMsIDc4LCAxOTksIDczLCAKKyAgICA3OCwgNjcsIDcyLCAxMjgsIDczLCA3OCwgNjYsIDc5LCAyMTYsIDczLCA3OCwgNjUsIDgwLCAxMjgsIDczLCA3OCwgNDUsIAorICAgIDY1LCA3NiwgNjUsIDcwLCAxMjgsIDczLCA3NywgODAsIDY5LCA4MiwgNzMsIDY1LCAyMDQsIDczLCA3NywgODAsIDY5LCA4MiwgCisgICAgNzAsIDY5LCA2NywgODQsIDg1LCAyMDUsIDczLCA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDY1LCAxMjgsIDczLCAKKyAgICA3NywgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgNzMsIDc3LCA3MywgODMsIDY5LCA3OSwgMjExLCA3MywgNzcsIAorICAgIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIDc3LCA3MywgMjA2LCA3MywgNzcsIDczLCA3MCwgCisgICAgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDY1LCAxMjgsIDczLCAKKyAgICA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA2OCwgNzMsIDY1LCA4MiwgNzEsIDc5LCA3OCwgCisgICAgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDc2LCAKKyAgICA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgNzYsIDg1LCA4NCwgCisgICAgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MSwgMTI4LCAKKyAgICA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3MywgNzYsIDUwLCAxMjgsIAorICAgIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgNzQsIDEyOCwgNzMsIDczLCA4OSwgCisgICAgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgNzMsIDcxLCA3MSwgODcsIDgzLCAKKyAgICAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgCisgICAgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCA2OSwgODUsIAorICAgIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCAKKyAgICA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIDY5LCA4NSwgCisgICAgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzMsIDY4LCA3MywgMjA1LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgCisgICAgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNzAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTQsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTIsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNTAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgCisgICAgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTYsIDY4LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgCisgICAgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTUsIDU0LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgCisgICAgNTEsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTQsIDY5LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgCisgICAgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTQsIDUzLCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgCisgICAgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTQsIDUwLCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgCisgICAgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTMsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgCisgICAgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTMsIDUxLCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgCisgICAgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCAKKyAgICA0NSwgNTIsIDY5LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgCisgICAgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCAKKyAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDY1LCA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKKyAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKKyAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCAKKyAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCAKKyAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCAKKyAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCAKKyAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKKyAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKKyAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCAKKyAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCAKKyAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCAKKyAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU3LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCAKKyAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKKyAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKKyAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCAKKyAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCAKKyAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKKyAgICA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCAKKyAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKKyAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCAKKyAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKKyAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCAKKyAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCAKKyAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKKyAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCAKKyAgICA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKKyAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCAKKyAgICA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKKyAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCAKKyAgICA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCAKKyAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKKyAgICA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTAsIDcwLCA1NiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIAorICAgIDU2LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCAKKyAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIAorICAgIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCAKKyAgICA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgCisgICAgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIAorICAgIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCAKKyAgICA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCAKKyAgICA4NSwgMTI4LCA3MywgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgCisgICAgMTI4LCA3MywgNjcsIDcyLCA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCAKKyAgICA0NSwgODksIDgyLCAxMjgsIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgCisgICAgMTI4LCA3MywgNDgsIDQ5LCA1MywgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCAKKyAgICA0OSwgNDgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3MywgNDgsIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3MywgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgCisgICAgNzMsIDQ4LCA0OCwgNTEsIDEyOCwgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCAKKyAgICA4OSwgODUsIDEyOCwgNzMsIDQ1LCA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgCisgICAgODksIDY1LCAxMjgsIDczLCA0NSwgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAKKyAgICAxMjgsIDczLCA0NSwgNjYsIDY5LCA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIAorICAgIDQ1LCA2NSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgCisgICAgODAsIDEyOCwgNzIsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgCisgICAgODQsIDEyOCwgNzIsIDkwLCA3MSwgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCAKKyAgICA4OSwgODAsIDc5LCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgCisgICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCAKKyAgICA3MiwgODksIDgwLCA3MiwgNjksIDc4LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgCisgICAgMTI4LCA3MiwgODgsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCAKKyAgICA4MCwgMTI4LCA3MiwgODgsIDg1LCA3OSwgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCAKKyAgICA3MiwgODgsIDc5LCA4MCwgMTI4LCA3MiwgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIAorICAgIDg0LCAxMjgsIDcyLCA4OCwgNzMsIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgCisgICAgODQsIDEyOCwgNzIsIDg4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgCisgICAgNzIsIDg4LCA2OSwgODgsIDEyOCwgNzIsIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCAKKyAgICA4OCwgMTI4LCA3MiwgODgsIDY1LCA4NCwgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCAKKyAgICA4NywgODUsIDEyOCwgNzIsIDg3LCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgyLCA2NSwgNzgsIAorICAgIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgNzIsIDg1LCA3OCwgCisgICAgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCAKKyAgICA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIDcyLCA4NSwgNjYsIAorICAgIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NiwgMTI4LCA3MiwgODUsIDY1LCA4MiwgNjUsIDY4LCA2OCwgCisgICAgNzksIDEyOCwgNzIsIDgyLCA4OSwgODYsIDc4LCA3MywgMTkzLCA3MiwgODAsIDg3LCA3MSwgMTI4LCA3MiwgODAsIDY1LCAKKyAgICAxMjgsIDcyLCA4MCwgMTI4LCA3MiwgNzksIDg1LCA4MywgMTk3LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIAorICAgIDgzLCAxMjgsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgMjExLCA3MiwgNzksIDg1LCA4MiwgMTI4LCA3MiwgCisgICAgNzksIDg1LCAyMTAsIDcyLCA3OSwgODQsIDY5LCA3NiwgMTI4LCA3MiwgNzksIDg0LCA2NSwgMTI4LCA3MiwgNzksIDgzLCAKKyAgICA4MCwgNzMsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCA4MiwgODMsIDY5LCAxMjgsIDcyLCA3OSwgODIsIDgzLCAxOTcsIAorICAgIDcyLCA3OSwgODIsIDc4LCA4MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNzYsIDIxNywgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTQsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTMsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTMsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTMsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTMsIAorICAgIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCAKKyAgICA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgCisgICAgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTIsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTEsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTIsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNTEsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNTAsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNTAsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIAorICAgIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCAKKyAgICA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgCisgICAgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNTAsIDQ1LCA0OCwgNDgsIAorICAgIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTQsIDEyOCwgCisgICAgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIAorICAgIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgCisgICAgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIAorICAgIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKKyAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDksIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgCisgICAgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTQsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIAorICAgIDg0LCA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCAKKyAgICA2NSwgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTIsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgCisgICAgNzYsIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTEsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIAorICAgIDQ1LCA0OCwgNDgsIDQ1LCA0OCwgNTAsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCAKKyAgICA0OCwgNDgsIDQ1LCA0OCwgNDksIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDQ1LCA0OCwgCisgICAgNDgsIDQ1LCA0OCwgNDgsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCA3OSwgNzgsIDg0LCA2NSwgNzYsIDEyOCwgNzIsIDc5LCAKKyAgICA4MiwgNzMsIDEyOCwgNzIsIDc5LCA4MiwgMTkzLCA3MiwgNzksIDc5LCA4MiwgODUsIDEyOCwgNzIsIDc5LCA3OSwgODAsIAorICAgIDEyOCwgNzIsIDc5LCA3OSwgNzgsIDEyOCwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgCisgICAgNzgsIDY5LCAyMTcsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCAKKyAgICA4NCwgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgCisgICAgMTk5LCA3MiwgNzksIDc2LCA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgCisgICAgNzIsIDc5LCA3MywgMTI4LCA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCAKKyAgICA4NSwgNzksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIAorICAgIDg0LCAxMjgsIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIAorICAgIDcyLCA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgCisgICAgNzIsIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCAKKyAgICA2OSwgODgsIDEyOCwgNzIsIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCAKKyAgICA3MiwgNzgsIDY1LCA4NCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIAorICAgIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgCisgICAgMTI4LCA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgCisgICAgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCAKKyAgICA3OSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIAorICAgIDEyOCwgNzIsIDc3LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIAorICAgIDc3LCA3OSwgMTI4LCA3MiwgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgCisgICAgMTI4LCA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAKKyAgICAxMjgsIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCAKKyAgICA4NCwgMTI4LCA3MiwgNzcsIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCAKKyAgICA3NiwgODksIDg0LCAxMjgsIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIAorICAgIDg5LCA4MCwgMTI4LCA3MiwgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIAorICAgIDcyLCA3NiwgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgCisgICAgNzYsIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCAKKyAgICA3NiwgODUsIDEyOCwgNzIsIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCAKKyAgICA3MiwgNzYsIDczLCA4OCwgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIAorICAgIDczLCA2OSwgODgsIDEyOCwgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgCisgICAgNzMsIDEyOCwgNzIsIDc2LCA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgCisgICAgNzYsIDY1LCA4OCwgMTI4LCA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAKKyAgICAxMjgsIDcyLCA3NSwgMTI4LCA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCAKKyAgICA3MiwgNzMsIDgyLCA3MywgODEsIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIAorICAgIDcxLCA3MiwgNDUsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCAKKyAgICA3MiwgNjksIDY5LCA3NiwgNjksIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgCisgICAgNjksIDg1LCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgCisgICAgNjksIDg1LCAyMDAsIDcyLCA3MywgNjksIDEyOCwgNzIsIDczLCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCAKKyAgICA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgMTI4LCA3MiwgNzMsIDY2LCA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIAorICAgIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCA4NSwgMTI4LCA3MiwgNzIsIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIAorICAgIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCA2NSwgNjUsIDEyOCwgNzIsIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgCisgICAgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgODIsIDY1LCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAKICAgICAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIAogICAgIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA3MywgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgCi0gICAgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgNzgsIDcxLCAxMjgsIDcyLCAKLSAgICA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCA4NCwgMTI4LCA3MiwgNjksIAotICAgIDc2LCAyMDUsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA3MywgODMsIDY5LCA3MywgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgNzYsIDIxNywgNzIsIDY5LCAKLSAgICA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCA2NSwgODIsIDg0LCAxMjgsIAotICAgIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgCi0gICAgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgNjUsIDgzLCAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgCi0gICAgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIDY1LCA4NCwgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgCi0gICAgNzIsIDY1LCA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCAKLSAgICA3OSwgNzgsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIAotICAgIDEyOCwgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDcyLCA2NSwgODIsIDE5NiwgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCA3MiwgNjUsIDc4LCA3MSwgOTAsIAotICAgIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgCi0gICAgNDUsIDY1LCA3NSwgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIAotICAgIDIxMCwgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIDY5LCA4MiwgNjgsIDEyOCwgNzIsIDY1LCA3NiwgCi0gICAgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCAKLSAgICA2NSwgNzEsIDc2LCA2NSwgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgCi0gICAgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjksIDEyOCwgCi0gICAgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ1LCAKLSAgICA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCA3OSwgMTI4LCAKLSAgICA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCA2OSwgMTI4LCAKLSAgICA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCA3MSwgODksIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCAKLSAgICA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCA2NSwgNjUsIAotICAgIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCA3MSwgODUsIAotICAgIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIDgyLCA1NSwgCi0gICAgMTI4LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgNzcsIDEyOCwgNzEsIDg1LCAyMDUsIAotICAgIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIDcxLCA4NSwgNjksIDIwMCwgNzEsIAotICAgIDg1LCA2OCwgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgNjgsIDc4LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxNzgsIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCAKLSAgICA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCAKLSAgICA3MSwgODIsIDc5LCA3OCwgODQsIDcyLCA3MywgODMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNjksIDcxLCA3OSwgCi0gICAgODIsIDczLCA2NSwgMjA2LCA3MSwgODIsIDY5LCA2OSwgMjA2LCA3MSwgODIsIDY5LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAKLSAgICAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIAotICAgIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDIxMCwgNzEsIDgyLCA2OSwgCi0gICAgNjUsIDIxMiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIDY1LCAKLSAgICA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCA2NSwgCi0gICAgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIDgyLCAKLSAgICA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIAotICAgIDcxLCA4MiwgNjUsIDczLCA3OCwgMTI4LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCA2NSwgNjcsIDE5NywgCi0gICAgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDg0LCAKLSAgICAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4MywgODksIAotICAgIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA3MSwgNzksIDgyLCA3MSwgCi0gICAgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIDc5LCA3NiwgNjgsIDEyOCwgCi0gICAgNzEsIDc5LCA3MywgNzgsIDE5OSwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgNzksIDY1LCAKLSAgICAxMjgsIDcxLCA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIAotICAgIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgCi0gICAgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCAKLSAgICA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCAKLSAgICA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIAotICAgIDcxLCA3MywgODIsIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgCi0gICAgMTc4LCA3MSwgNzMsIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgCi0gICAgNzEsIDczLCA3NywgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCAKLSAgICA4NCwgMTI4LCA3MSwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjUsIDEyOCwgNzEsIDczLCA1MiwgMTI4LCAKLSAgICA3MSwgNzMsIDE4MCwgNzEsIDcyLCA5MCwgMTI4LCA3MSwgNzIsIDg3LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIAotICAgIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgMTkzLCA3MSwgNzIsIDg1LCAxMjgsIDcxLCA3MiwgNzksIDgzLCA4NCwgCi0gICAgMTI4LCA3MSwgNzIsIDc5LCAxMjgsIDcxLCA3MiwgNzMsIDEyOCwgNzEsIDcyLCA3MiwgNjUsIDEyOCwgNzEsIDcyLCA2OSwgCi0gICAgNjksIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDcyLCA2NSwgCi0gICAgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgMTI4LCAKLSAgICA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCAxMjgsIDcxLCA3MSwgODcsIAotICAgIDczLCAxMjgsIDcxLCA3MSwgODcsIDY5LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgNzEsIDg3LCA2NSwgCi0gICAgNjUsIDEyOCwgNzEsIDcxLCA4NywgNjUsIDEyOCwgNzEsIDcxLCA4NSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgODQsIDEyOCwgCi0gICAgNzEsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDgyLCAxMjgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDcxLCAKKyAgICA3NywgNjksIDgzLCAxMjgsIDcyLCA2OSwgODIsIDY2LCAxMjgsIDcyLCA2OSwgODIsIDY1LCA2OSwgODUsIDIwNSwgNzIsIAorICAgIDY5LCA3OCwgNzEsIDEyOCwgNzIsIDY5LCA3OCwgMTk5LCA3MiwgNjksIDc3LCA4MCwgMTI4LCA3MiwgNjksIDc2LCA3NywgCisgICAgNjksIDg0LCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgMjEyLCA3MiwgNjksIDc2LCAyMDUsIDcyLCA2OSwgNzYsIDczLCAKKyAgICA2NywgNzksIDgwLCA4NCwgNjksIDgyLCAxMjgsIDcyLCA2OSwgNzUsIDg1LCA4NCwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIAorICAgIDY5LCA3MywgODMsIDY5LCA3MywgMTI4LCA3MiwgNjksIDY1LCA4NiwgODksIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgCisgICAgNzYsIDIxNywgNzIsIDY5LCA2NSwgODYsIDY5LCA3OCwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDIwNiwgNzIsIDY5LCAKKyAgICA2NSwgODIsIDg0LCA4MywgMTI4LCA3MiwgNjksIDY1LCA4MiwgODQsIDQ1LCA4MywgNzIsIDY1LCA4MCwgNjksIDE5NiwgNzIsIAorICAgIDY5LCA2NSwgODIsIDg0LCAxMjgsIDcyLCA2OSwgNjUsIDgyLCAyMTIsIDcyLCA2OSwgNjUsIDgyLCA0NSwgNzgsIDc5LCA0NSwgCisgICAgNjksIDg2LCA3MywgMjA0LCA3MiwgNjksIDY1LCA2OCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMTI4LCA3MiwgNjksIDY1LCAKKyAgICA2OCwgODMsIDg0LCA3OSwgNzgsIDE5NywgNzIsIDY5LCA2NSwgNjgsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3MiwgNjksIAorICAgIDY1LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA3MiwgNjYsIDY1LCA4MywgNjUsIDQ1LCA2OSwgODMsIDY1LCA4MywgMTkzLCA3MiwgCisgICAgNjYsIDY1LCA4MywgMTkzLCA3MiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MiwgNjUsIDg2LCA2OSwgMTI4LCAKKyAgICA3MiwgNjUsIDg1LCA4MCwgODQsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzIsIDY1LCA4NCwgNzIsIDczLCAxMjgsIAorICAgIDcyLCA2NSwgODQsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDY3LCA3MiwgNzMsIDc4LCAxOTksIDcyLCA2NSwgODQsIDY1LCAKKyAgICAxOTgsIDcyLCA2NSwgODMsIDY5LCAyMTAsIDcyLCA2NSwgODMsIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgODIsIAorICAgIDgwLCA3OSwgNzksIDc4LCAxMjgsIDcyLCA2NSwgODIsIDgwLCA3OSwgNzksIDIwNiwgNzIsIDY1LCA4MiwgNzcsIDc5LCA3OCwgCisgICAgNzMsIDY3LCAxMjgsIDcyLCA2NSwgODIsIDc1LCA3NiwgNjksIDY1LCAyMDYsIDcyLCA2NSwgODIsIDY4LCA3OCwgNjksIDgzLCAKKyAgICA4MywgMTI4LCA3MiwgNjUsIDgyLCAxOTYsIDcyLCA2NSwgODAsIDgwLCAyMTcsIDcyLCA2NSwgNzgsIDg1LCA3OCwgNzksIAorICAgIDIwNywgNzIsIDY1LCA3OCwgNzEsIDkwLCA3MiwgNzksIDIxMywgNzIsIDY1LCA3OCwgNjgsIDgzLCAxMjgsIDcyLCA2NSwgCisgICAgNzgsIDY4LCAyMTEsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIDgzLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCA3NiwgNjksIAorICAgIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDY2LCA2NSwgNzEsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDEyOCwgNzIsIDY1LCA3OCwgCisgICAgNDUsIDY1LCA3NSwgNjUsIDg0LCAxMjgsIDcyLCA2NSwgNzcsIDkwLCA2NSwgMTI4LCA3MiwgNjUsIDc3LCA4MywgODQsIDY5LCAKKyAgICAyMTAsIDcyLCA2NSwgNzcsIDc3LCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NywgNzcsIDY5LCAyMTAsIDcyLCA2NSwgNzcsIAorICAgIDY2LCA4NSwgODIsIDcxLCA2OSwgODIsIDEyOCwgNzIsIDY1LCA3NiwgODEsIDY1LCAxMjgsIDcyLCA2NSwgNzYsIDc5LCAKKyAgICAxMjgsIDcyLCA2NSwgNzYsIDcwLCAxMjgsIDcyLCA2NSwgNzYsIDY2LCA2OSwgODIsIDY4LCAxMjgsIDcyLCA2NSwgNzYsIAorICAgIDY1LCA3OCwgODQsIDY1LCAxMjgsIDcyLCA2NSwgNzMsIDg0LCA4NSwgMTI4LCA3MiwgNjUsIDczLCA4MiwgNjcsIDg1LCA4NCwgCisgICAgMTI4LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA3MiwgNjUsIDcxLCA3NiwgNjUsIDIxOCwgNzIsIDY1LCA3MSwgNzYsIDEyOCwgCisgICAgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgNjUsIDEyOCwgNzIsIDY1LCA3MCwgODUsIDc1LCA3MiwgMTI4LCA3MiwgNjUsIDY5LCAKKyAgICA3MSwgMjA0LCA3MiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzIsIDY1LCA2NSwgNzcsIDEyOCwgNzIsIDY1LCAxOTMsIDcyLCAKKyAgICA2NSwgNDUsIDcyLCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NiwgMTI4LCA3MiwgNDgsIDQ4LCA1NSwgMTI4LCA3MiwgNDgsIAorICAgIDQ4LCA1NCwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDEyOCwgNzIsIDQ4LCA0OCwgNTMsIDEyOCwgNzIsIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgNzIsIDQ4LCA0OCwgNTEsIDEyOCwgNzIsIDQ4LCA0OCwgNTAsIDEyOCwgNzIsIDQ4LCA0OCwgNDksIDEyOCwgCisgICAgNzIsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDcxLCA4OSwgODUsIDEyOCwgNzEsIDg5LCA3OSwgNzgsIDEyOCwgNzEsIDg5LCAKKyAgICA3OSwgMTI4LCA3MSwgODksIDczLCAxMjgsIDcxLCA4OSwgNzAsIDIxMywgNzEsIDg5LCA2OSwgNjksIDEyOCwgNzEsIDg5LCAKKyAgICA2NSwgODMsIDEyOCwgNzEsIDg5LCA2NSwgNjUsIDEyOCwgNzEsIDg5LCA2NSwgMTI4LCA3MSwgODksIDEyOCwgNzEsIDg3LCAKKyAgICA4NSwgMTI4LCA3MSwgODcsIDczLCAxMjgsIDcxLCA4NywgNjksIDY5LCAxMjgsIDcxLCA4NywgNjksIDEyOCwgNzEsIDg3LCAKKyAgICA2NSwgNjUsIDEyOCwgNzEsIDg3LCA2NSwgMTI4LCA3MSwgODYsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDgzLCA3MiwgMTI4LCAKKyAgICA3MSwgODUsIDgyLCA4NSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNjUsIDc3LCA4NSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgODUsIAorICAgIDgyLCA1NSwgMTI4LCA3MSwgODUsIDc4LCA4NSwgMTI4LCA3MSwgODUsIDc4LCAyMTMsIDcxLCA4NSwgMjA1LCA3MSwgODUsIAorICAgIDc2LCAxMjgsIDcxLCA4NSwgNzMsIDg0LCA2NSwgODIsIDEyOCwgNzEsIDg1LCAxOTksIDcxLCA4NSwgNjksIDcyLCAxMjgsIAorICAgIDcxLCA4NSwgNjksIDIwMCwgNzEsIDg1LCA2OCwgMTI4LCA3MSwgODUsIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCA4MywgCisgICAgNzcsIDY1LCA3OCwgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDg1LCAKKyAgICA2NSwgODIsIDY1LCA3OCwgMjAxLCA3MSwgODUsIDE5MywgNzEsIDg1LCAxNzgsIDcxLCA4NCwgNjksIDIxMCwgNzEsIDgzLCAKKyAgICA4NSwgNzcsIDEyOCwgNzEsIDgzLCA4NSwgMjA1LCA3MSwgODIsIDIxMywgNzEsIDgyLCA3OSwgODcsIDczLCA3OCwgMTk5LCAKKyAgICA3MSwgODIsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDcxLCA4MiwgNzksIDc4LCA4NCwgNzIsIDczLCA4MywgNzcsIDY1LCA4NCwgCisgICAgNjUsIDEyOCwgNzEsIDgyLCA3MywgNzgsIDc4LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAKKyAgICAyMDYsIDcxLCA4MiwgNjksIDY5LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIAorICAgIDgyLCA2OSwgNjUsIDg0LCA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAKKyAgICA4MiwgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgCisgICAgMjEyLCA3MSwgODIsIDY1LCA4NiwgNjksIDg5LCA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCAKKyAgICA2NywgODIsIDc5LCA3OCwgMTI4LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgCisgICAgODIsIDY1LCA4NiwgNjksIDEyOCwgNzEsIDgyLCA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCAKKyAgICA3MSwgODIsIDY1LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIAorICAgIDE5NywgNzEsIDgyLCA2NSwgODAsIDY5LCA4MywgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgCisgICAgNzMsIDc4LCAxMjgsIDcxLCA4MiwgNjUsIDY4LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAKKyAgICAxMjgsIDcxLCA4MiwgNjUsIDY3LCAxOTcsIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIAorICAgIDc1LCA3OSwgMjA2LCA3MSwgNzksIDgyLCA4NCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAKKyAgICAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIAorICAgIDgyLCA3MSwgNzksIDIwNiwgNzEsIDc5LCA4MiwgNzEsIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgCisgICAgNzksIDE5NiwgNzEsIDc5LCA3OCwgNzEsIDEyOCwgNzEsIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgCisgICAgNzksIDczLCA3OCwgMTk5LCA3MSwgNzksIDY2LCA3NiwgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCAKKyAgICA3OSwgNjUsIDIwNCwgNzEsIDc5LCA2NSwgMTI4LCA3MSwgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIAorICAgIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA3MSwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgCisgICAgNjUsIDIwNCwgNzEsIDc2LCA3OSwgNjYsIDE5NywgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCAKKyAgICA3NiwgNjksIDczLCA2NywgMjAwLCA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIAorICAgIDcxLCA3NCwgNjksIDEyOCwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIAorICAgIDcxLCA3MywgODMsIDIwMCwgNzEsIDczLCA4MywgNjUsIDc2LCAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAKKyAgICAxMjgsIDcxLCA3MywgODIsIDc2LCAxMjgsIDcxLCA3MywgODIsIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCAKKyAgICA4MiwgNTAsIDEyOCwgNzEsIDczLCA4MiwgMTc4LCA3MSwgNzMsIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCAKKyAgICA3MSwgNzMsIDc3LCA2OSwgNzYsIDEyOCwgNzEsIDczLCA3NywgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIAorICAgIDcxLCA2NSwgMTI4LCA3MSwgNzMsIDY5LCA4NCwgMTI4LCA3MSwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgCisgICAgNjYsIDc5LCA4NSwgMjExLCA3MSwgNzMsIDY2LCA2NSwgMTI4LCA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgCisgICAgNzIsIDkwLCAxMjgsIDcxLCA3MiwgODcsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCAKKyAgICA4NSwgNzgsIDc4LCAxOTMsIDcxLCA3MiwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIAorICAgIDg0LCAxMjgsIDcxLCA3MiwgNzksIDEyOCwgNzEsIDcyLCA3MywgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIAorICAgIDY5LCA4NSwgODgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgCisgICAgNjUsIDY5LCA3NywgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCAKKyAgICA2OSwgODIsIDY1LCA2OSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDg0LCAxMjgsIDcxLCA3MiwgNjksIDY5LCAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIAorICAgIDcxLCA3MiwgNjUsIDg5LCA3OCwgMTI4LCA3MSwgNzIsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAKKyAgICAxMjgsIDcxLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA3MiwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIAorICAgIDc4LCA4NSwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgCisgICAgNjgsIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcyLCAKKyAgICA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgNzEsIDcxLCA4NywgNjksIAorICAgIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDY1LCAxMjgsIDcxLCA3MSwgODUsIDg4LCAxMjgsIAorICAgIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgMTI4LCA3MSwgCiAgICAgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgODUsIDc5LCA4MCwgMTI4LCAKICAgICA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDc5LCA4NCwgMTI4LCA3MSwgNzEsIAogICAgIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzEsIDczLCA4NCwgMTI4LCA3MSwgNzEsIDczLCA2OSwgCiAgICAgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDY5LCAxMjgsIDcxLCA3MSwgNjksIDg4LCAKICAgICAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDg4LCAxMjgsIDcxLCAKLSAgICA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDgwLCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIDcxLCA2OSwgODQsIAotICAgIDE5MywgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgCi0gICAgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCAKLSAgICA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIDcxLCA2OSwgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIAotICAgIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgCi0gICAgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCAKLSAgICA3MywgODQsIDczLCA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIAotICAgIDE5NSwgNzEsIDY5LCA3NywgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDcxLCA2OSwgNjgsIDc5LCA3NiwgNjUsIDEyOCwgNzEsIDY5LCA2OCwgNjksIDEyOCwgNzEsIDY5LCA2NiwgMjA3LCAKLSAgICA3MSwgNjksIDY2LCAxOTMsIDcxLCA2OSwgNjUsIDgyLCAxMjgsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIDcxLCA2NywgNzMsIAotICAgIDcxLCAxMjgsIDcxLCA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzEsIAotICAgIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgCi0gICAgODUsIDc1LCA3MywgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAKLSAgICAxMjgsIDcxLCA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIAotICAgIDcxLCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgCi0gICAgNjUsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCAKLSAgICA3OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNTEsIDEyOCwgNzEsIAotICAgIDY1LCA4MCwgODAsIDY5LCAxOTYsIDcxLCA2NSwgNzgsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAKLSAgICAxMjgsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCAKLSAgICA2NSwgNzcsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIAotICAgIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCA3NywgMTI4LCA3MSwgNjUsIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIAotICAgIDY1LCAxOTgsIDcxLCA2NSwgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgCi0gICAgNzksIDc2LCAxMjgsIDcxLCA2NSwgNjgsIDEyOCwgNzEsIDY1LCAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgCi0gICAgNjYsIDE5MywgNzEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcxLCA2NSwgMTc4LCA3MCwgODksIDg4LCAxMjgsIDcwLCA4OSwgCi0gICAgODQsIDEyOCwgNzAsIDg5LCA4MCwgMTI4LCA3MCwgODksIDY1LCAxMjgsIDcwLCA4OSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIAotICAgIDcwLCA4NywgNjksIDY5LCAxMjgsIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgCi0gICAgMTI4LCA3MCwgODUsIDg4LCAxMjgsIDcwLCA4NSwgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgCi0gICAgMTkzLCA3MCwgODUsIDgyLCA4OCwgMTI4LCA3MCwgODUsIDgyLCAxMjgsIDcwLCA4NSwgODAsIDEyOCwgNzAsIDg1LCA3OCwgCi0gICAgNjksIDgyLCA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIDg1LCA3NiwgNzYsIDc4LCAKLSAgICA2OSwgODMsIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg0LCA3MiwgNzksIDgyLCAxOTMsIDcwLCA4MiwgNzksIAotICAgIDg3LCA3OCwgNzMsIDc4LCAxOTksIDcwLCA4MiwgNzksIDg3LCA3OCwgMTI4LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA4NCwgCi0gICAgNzMsIDc2LCA4NCwgNjksIDE5NiwgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgODIsIDczLCAKLSAgICA4NCwgODUsIDEyOCwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIAotICAgIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA4MiwgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCAxOTcsIDcwLCA4MiwgCi0gICAgNjUsIDc4LCAxOTUsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3MSwgODIsIDY1LCA3OCwgODQsIAotICAgIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDcwLCA3OSwgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3OSwgODUsIAotICAgIDgyLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODMsIDg0LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3OSwgCi0gICAgODUsIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCA3OSwgODUsIDgyLCA0NSwgNzYsIDczLCA3OCwgMTk3LCAKLSAgICA3MCwgNzksIDg1LCAyMTAsIDcwLCA3OSwgODMsIDg0LCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgODQsIAotICAgIDg5LCAxMjgsIDcwLCA3OSwgODIsIDg0LCAyMTcsIDcwLCA3OSwgODIsIDg0LCA2OSwgMTI4LCA3MCwgNzksIDgyLCA3NywgCi0gICAgMjExLCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA4NCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA3NSwgNjksIAotICAgIDE5NiwgNzAsIDc5LCA4MiwgNjcsIDY5LCA4MywgMTI4LCA3MCwgNzksIDgyLCA2NywgNjksIDEyOCwgNzAsIDc5LCA4MCwgCi0gICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgODMsIDg0LCA3OSwgNzksIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCA3OCwgNzksIDg0LCAKLSAgICAxOTcsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCA3OCwgNzEsIDc3LCA2NSwgNzgsIAotICAgIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDg5LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA3OSwgODcsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzAsIDc5LCAxMjgsIDcwLCA3NywgMTI4LCA3MCwgNzYsIDg5LCAxMjgsIDcwLCA3NiwgODUsIDg0LCA2OSwgMTI4LCA3MCwgCi0gICAgNzYsIDc5LCA4NywgNjksIDgyLCAxMjgsIDcwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzYsIDc5LCA4NSwgODIsIDczLCAKLSAgICA4MywgNzIsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2NSwgCi0gICAgMjA0LCA3MCwgNzYsIDc5LCA3OSwgODIsIDEyOCwgNzAsIDc2LCA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCAKLSAgICA4NCwgMTI4LCA3MCwgNzYsIDY5LCA4OCwgODUsIDgzLCAxMjgsIDcwLCA3NiwgNjksIDg1LCA4MiwgNDUsIDY4LCA2OSwgNDUsIAotICAgIDc2LCA3MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDg0LCA2OSwgNzgsIDY5LCAxOTYsIDcwLCA3NiwgNjUsIDg0LCA3OCwgCi0gICAgNjksIDgzLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgMTI4LCA3MCwgNzYsIDY1LCAyMTIsIDcwLCA3NiwgNjUsIDcxLCAKLSAgICA0NSwgNTMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUxLCAxMjgsIAotICAgIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTAsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgCi0gICAgMTI4LCA3MCwgNzYsIDY1LCAxMjgsIDcwLCA3NiwgMTI4LCA3MCwgNzMsIDg4LCA2OSwgNjgsIDQ1LCA3MCwgNzksIDgyLCAKLSAgICAyMDUsIDcwLCA3MywgODgsIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3MywgODYsIAotICAgIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgCi0gICAgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCA4OSwgNjksIAotICAgIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIAotICAgIDgyLCA2OSwgMTI4LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCA3MSwgCi0gICAgNjksIDgyLCA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIDczLCAKLSAgICA3OCwgNjUsIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzYsIAotICAgIDc2LCA2OSwgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgNzAsIAotICAgIDczLCA3MywgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgCi0gICAgNDUsIDUwLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAotICAgIDE5NywgNzAsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgCi0gICAgMjE3LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCAKLSAgICA4NCwgNjksIDY5LCA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgCi0gICAgMTI4LCA3MCwgNzIsIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgCi0gICAgODMsIDg0LCA3MywgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MCwgNjksIDgyLCAKLSAgICA3NywgNjUsIDg0LCAxOTMsIDcwLCA2OSwgNzksIDIwMCwgNzAsIDY5LCA3OCwgMTk5LCA3MCwgNjksIDc4LCA2NywgNjksIAotICAgIDEyOCwgNzAsIDY5LCA3NywgNzMsIDc4LCA3MywgNzgsIDE5NywgNzAsIDY5LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3MCwgCi0gICAgNjksIDc3LCA2NSwgNzYsIDE5NywgNzAsIDY5LCA3NiwgNzYsIDc5LCA4NywgODMsIDcyLCA3MywgODAsIDEyOCwgNzAsIDY5LCAKLSAgICA3MywgMTI4LCA3MCwgNjksIDcyLCAyMTMsIDcwLCA2OSwgNzIsIDEyOCwgNzAsIDY5LCAyMDAsIDcwLCA2OSwgNjksIDc4LCAKLSAgICA3MSwgMTI4LCA3MCwgNjksIDY5LCA2OCwgMTI4LCA3MCwgNjksIDY5LCAxOTYsIDcwLCA2OSwgNjksIDEyOCwgNzAsIDY5LCAKLSAgICA2NiwgODIsIDg1LCA2NSwgODIsIDg5LCAxMjgsIDcwLCA2OSwgNjUsIDg0LCA3MiwgNjksIDgyLCAxMjgsIDcwLCA2OSwgNjUsIAotICAgIDg0LCA3MiwgNjksIDIxMCwgNzAsIDY5LCA2NSwgODIsIDc4LCAxMjgsIDcwLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAKLSAgICAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIAotICAgIDg0LCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY1LCA4NCwgNjUsIDIwNiwgNzAsIDY1LCA4NCwgNzIsIDY1LCAKLSAgICAxMjgsIDcwLCA2NSwgODQsIDcyLCAxOTMsIDcwLCA2NSwgODQsIDEyOCwgNzAsIDY1LCA4MiwgODMsIDIwMSwgNzAsIDY1LCAKLSAgICA4MCwgMTI4LCA3MCwgNjUsIDc4LCA3MSwgMTI4LCA3MCwgNjUsIDc4LCA2OSwgODIsIDc5LCA4MywgNzMsIDIxMSwgNzAsIAotICAgIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDc3LCA3MywgNzYsIDg5LCAxMjgsIDcwLCA2NSwgNzYsIDc2LCA3MywgNzgsIDE5OSwgCi0gICAgNzAsIDY1LCA3MywgNzYsIDg1LCA4MiwgNjksIDEyOCwgNzAsIDY1LCA3MywgNzIsIDg1LCAxMjgsIDcwLCA2NSwgNzIsIDgyLCAKLSAgICA2OSwgNzgsIDcyLCA2OSwgNzMsIDg0LCAxMjgsIDcwLCA2NSwgNjcsIDg0LCA3OSwgMjEwLCA3MCwgNjUsIDY3LCA4MywgNzMsIAotICAgIDc3LCA3MywgNzYsIDE5NywgNzAsIDY1LCA2NywgNjksIDQ1LCA1NCwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUzLCAKLSAgICAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTIsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MSwgMTI4LCA3MCwgNjUsIAotICAgIDY3LCA2OSwgNDUsIDUwLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDY1LCA2NSwgNzMsIDEyOCwgCi0gICAgNzAsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcwLCA2NSwgNjUsIDEyOCwgNjksIDkwLCAyMDAsIDY5LCA5MCwgNjksIDc4LCAKLSAgICAxMjgsIDY5LCA5MCwgNjksIDIwNiwgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgODksIAotICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDc2LCA3OSwgMjE1LCA2OSwgODgsIDg0LCA4MiwgCisgICAgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCA3MSwgNjksIDg0LCAxOTMsIDcxLCA2OSwgODMsIDg0LCAKKyAgICA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCA3OCwgCisgICAgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA3MSwgNjksIDgyLCAKKyAgICA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIDc3LCA2NSwgMjA2LCA3MSwgNjksIDgyLCA2OSwgODMsIAorICAgIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCA4NCwgNzYsIAorICAgIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgMjAxLCA3MSwgCisgICAgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCA3NywgNzMsIDc4LCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgMTI4LCA3MSwgNjksIAorICAgIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgODIsIDEyOCwgNzEsIAorICAgIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgNjcsIDY1LCAyMDYsIAorICAgIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgCisgICAgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCAKKyAgICA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgODQsIDg0LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCA2NSwgODUsIDc4LCAKKyAgICA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcxLCA2NSwgODQsIAorICAgIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIAorICAgIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA1MSwgCisgICAgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCA2NSwgMTI4LCA3MSwgCisgICAgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCAKKyAgICA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIAorICAgIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgNzcsIDY1LCA3OCwgCisgICAgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCA3MSwgMTI4LCA3MSwgCisgICAgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgNjUsIDY4LCAxMjgsIDcxLCA2NSwgMTk2LCA3MSwgNjUsIDY2LCAKKyAgICA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MSwgNjUsIDE3OCwgNzEsIDQ4LCAKKyAgICA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgNzEsIDQ4LCA1MywgNTAsIDEyOCwgNzEsIDQ4LCA1MywgNDksIAorICAgIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCA1MiwgNTcsIDEyOCwgNzEsIDQ4LCA1MiwgNTYsIDEyOCwgNzEsIAorICAgIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcxLCA0OCwgCisgICAgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIDcxLCA0OCwgNTIsIDUxLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCAKKyAgICA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgNDgsIDUyLCA0OSwgMTI4LCA3MSwgNDgsIDUyLCA0OCwgMTI4LCAKKyAgICA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCA1NiwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzEsIAorICAgIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAxMjgsIDcxLCA0OCwgCisgICAgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIDcxLCA0OCwgNTEsIDUxLCAxMjgsIDcxLCA0OCwgNTEsIDUwLCAKKyAgICAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgNTAsIDU3LCAxMjgsIDcxLCAKKyAgICA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIAorICAgIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCA3MSwgNDgsIDUwLCA1MiwgMTI4LCA3MSwgNDgsIDUwLCA1MSwgCisgICAgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIDUwLCA0OSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgCisgICAgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgNTYsIDEyOCwgNzEsIDQ4LCAKKyAgICA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgNzEsIDQ4LCA0OSwgNTIsIAorICAgIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCA0OSwgNTAsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIAorICAgIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIDU3LCAxMjgsIDcxLCA0OCwgCisgICAgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCAKKyAgICA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcxLCA0OCwgNDgsIDU0LCAxMjgsIDcxLCA0OCwgNDgsIAorICAgIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCA0OCwgNDgsIDUxLCAxMjgsIDcxLCA0OCwgNDgsIDUwLCAxMjgsIAorICAgIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCA3MCwgODksIDgwLCAxMjgsIAorICAgIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCA3MCwgODcsIDY5LCA2OSwgMTI4LCA3MCwgODcsIDY5LCAxMjgsIAorICAgIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIDEyOCwgNzAsIDg1LCA4OCwgMTI4LCA3MCwgODUsIDg0LCAxMjgsIAorICAgIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIDg1LCA4MiwgODgsIDEyOCwgNzAsIDg1LCA4MCwgCisgICAgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3MCwgODUsIDc2LCA3NiwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDg1LCA3NiwgMjA0LCA3MCwgODUsIDc0LCA3MywgCisgICAgMTI4LCA3MCwgODUsIDY5LCA4NCwgMTI4LCA3MCwgODUsIDY5LCAyMDQsIDcwLCA4NSwgNjksIDEyOCwgNzAsIDg0LCA3MiwgCisgICAgNzksIDgyLCAxOTMsIDcwLCA4MiwgNzksIDg3LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCAKKyAgICA3OCwgMTk5LCA3MCwgODIsIDc5LCA4NywgNzgsIDEyOCwgNzAsIDgyLCA3OSwgNzgsIDg0LCA0NSwgODQsIDczLCA3NiwgODQsIAorICAgIDY5LCAxOTYsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3MCwgODIsIDc5LCAKKyAgICAyMDUsIDcwLCA4MiwgNzksIDcxLCAxMjgsIDcwLCA4MiwgNzksIDE5OSwgNzAsIDgyLCA3MywgODQsIDg1LCAxMjgsIDcwLCAKKyAgICA4MiwgNzMsIDY5LCA4MywgMTI4LCA3MCwgODIsIDczLCA2OSwgMTk2LCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgODYsIAorICAgIDY5LCAxMjgsIDcwLCA4MiwgNjksIDg0LCA2NiwgNzksIDY1LCA4MiwgNjgsIDEyOCwgNzAsIDgyLCA2OSwgNzgsIDY3LCAKKyAgICAyMDAsIDcwLCA4MiwgNjksIDY5LCAxMjgsIDcwLCA4MiwgNjksIDE5NywgNzAsIDgyLCA2NSwgNzgsIDE5NSwgNzAsIDgyLCAKKyAgICA2NSwgNzcsIDY5LCAxMjgsIDcwLCA4MiwgNjUsIDcxLCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA3MCwgODIsIDY1LCA3MSwgNzcsIAorICAgIDY5LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIDIwNiwgNzAsIDc5LCA4OCwgMTI4LCA3MCwgCisgICAgNzksIDg1LCA4MiwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDIwNiwgNzAsIDc5LCAKKyAgICA4NSwgODIsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA0NSwgODMsIDg0LCA4MiwgCisgICAgNzMsIDc4LCAxOTksIDcwLCA3OSwgODUsIDgyLCA0NSwgODAsIDY5LCA4MiwgNDUsIDY5LCAyMDUsIDcwLCA3OSwgODUsIDgyLCAKKyAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA3MCwgNzksIDg1LCAyMTAsIDcwLCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgCisgICAgMTI4LCA3MCwgNzksIDgzLCA4NCwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDg0LCA4OSwgMTI4LCAKKyAgICA3MCwgNzksIDgyLCA4NCwgMjE3LCA3MCwgNzksIDgyLCA4NCwgNjksIDEyOCwgNzAsIDc5LCA4MiwgNzcsIDIxMSwgNzAsIAorICAgIDc5LCA4MiwgNzcsIDY1LCA4NCwgODQsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDc5LCA4MiwgNzUsIDY5LCAxOTYsIDcwLCA3OSwgCisgICAgODIsIDY3LCA2OSwgODMsIDEyOCwgNzAsIDc5LCA4MiwgNjcsIDY5LCAxMjgsIDcwLCA3OSwgODAsIDEyOCwgNzAsIDc5LCAKKyAgICA3OSwgODQsIDgzLCA4NCwgNzksIDc5LCA3NiwgMTI4LCA3MCwgNzksIDc5LCA4NCwgODAsIDgyLCA3MywgNzgsIDg0LCA4MywgCisgICAgMTI4LCA3MCwgNzksIDc5LCA4NCwgNzgsIDc5LCA4NCwgMTk3LCA3MCwgNzksIDc5LCA4NCwgNjYsIDY1LCA3NiwgNzYsIAorICAgIDEyOCwgNzAsIDc5LCA3OSwgODQsIDEyOCwgNzAsIDc5LCA3OSwgNjgsIDEyOCwgNzAsIDc5LCA3OSwgMTI4LCA3MCwgNzksIAorICAgIDc4LCA3MSwgNzcsIDY1LCA3OCwgMTI4LCA3MCwgNzksIDc3LCAxMjgsIDcwLCA3OSwgNzYsIDc2LCA4OSwgMTI4LCA3MCwgCisgICAgNzksIDc2LCA3NiwgNzksIDg3LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgODIsIDEyOCwgNzAsIDc5LCAKKyAgICA3NiwgNjgsIDY5LCAxOTYsIDcwLCA3OSwgNzEsIDcxLCA4OSwgMTI4LCA3MCwgNzcsIDEyOCwgNzAsIDc2LCA4OSwgMTI4LCAKKyAgICA3MCwgNzYsIDg1LCA4NCwgODQsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcwLCA3NiwgODUsIDg0LCA2OSwgMTI4LCA3MCwgNzYsIAorICAgIDg1LCA4MywgNzIsIDY5LCAxOTYsIDcwLCA3NiwgNzksIDg3LCA3MywgNzgsIDE5OSwgNzAsIDc2LCA3OSwgODcsIDY5LCAKKyAgICAyMTAsIDcwLCA3NiwgNzksIDg1LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzYsIDc5LCA4MiwgNjksIDg0LCA4NCwgNjksIAorICAgIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY1LCAyMDQsIDcwLCA3NiwgNzksIDgwLCA4MCwgMjE3LCA3MCwgNzYsIDc5LCA3OSwgCisgICAgODIsIDEyOCwgNzAsIDc2LCA3MywgODAsIDEyOCwgNzAsIDc2LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzYsIDY5LCAKKyAgICA4OCwgODUsIDgzLCAxMjgsIDcwLCA3NiwgNjksIDg4LCA2OSwgMTk2LCA3MCwgNzYsIDY5LCA4NSwgODIsIDQ1LCA2OCwgNjksIAorICAgIDQ1LCA3NiwgNzMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCA4NCwgNjksIDc4LCA2OSwgMTk2LCA3MCwgNzYsIDY1LCA4NCwgCisgICAgNzgsIDY5LCA4MywgODMsIDEyOCwgNzAsIDc2LCA2NSwgODQsIDEyOCwgNzAsIDc2LCA2NSwgMjEyLCA3MCwgNzYsIDY1LCAKKyAgICA3MSwgODMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MywgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUyLCAxMjgsIAorICAgIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTEsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MCwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgCisgICAgNDUsIDQ5LCAxMjgsIDcwLCA3NiwgNjUsIDcxLCAxMjgsIDcwLCA3NiwgNjUsIDE5OSwgNzAsIDc2LCA2NSwgMTI4LCA3MCwgCisgICAgNzYsIDEyOCwgNzAsIDczLCA4OCwgNjksIDY4LCA0NSwgNzAsIDc5LCA4MiwgMjA1LCA3MCwgNzMsIDg4LCAxMjgsIDcwLCAKKyAgICA3MywgODYsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDc2LCA3MywgCisgICAgNzgsIDE5NywgNzAsIDczLCA4NiwgMTk3LCA3MCwgNzMsIDg0LCA2NSwgMTI4LCA3MCwgNzMsIDg0LCAxMjgsIDcwLCA3MywgCisgICAgODMsIDg0LCA2OSwgMTk2LCA3MCwgNzMsIDgzLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDcwLCAKKyAgICA3MywgODMsIDcyLCA3MiwgNzksIDc5LCA3NSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgMjAzLCA3MCwgNzMsIAorICAgIDgzLCA3MiwgNjksIDg5LCA2OSwgMTI4LCA3MCwgNzMsIDgzLCA3MiwgMTI4LCA3MCwgNzMsIDgzLCAyMDAsIDcwLCA3MywgCisgICAgODIsIDgzLCAyMTIsIDcwLCA3MywgODIsIDczLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCA3NSwgODMsIAorICAgIDEyOCwgNzAsIDczLCA4MiwgNjksIDg3LCA3OSwgODIsIDIwMywgNzAsIDczLCA4MiwgNjksIDEyOCwgNzAsIDczLCA4MiwgCisgICAgMTk3LCA3MCwgNzMsIDgwLCAxMjgsIDcwLCA3MywgNzgsIDczLCA4NCwgMTk3LCA3MCwgNzMsIDc4LCA3MSwgNjksIDgyLCAKKyAgICA3OCwgNjUsIDczLCA3NiwgODMsIDEyOCwgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNjksIDE5NiwgNzAsIDczLCA3OCwgNjUsIAorICAgIDc4LCA2NywgNzMsIDY1LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDgyLCAxMjgsIDcwLCA3MywgNzYsIDc2LCA2OSwgCisgICAgMTk2LCA3MCwgNzMsIDc2LCA3NiwgMTI4LCA3MCwgNzMsIDc2LCAyMDQsIDcwLCA3MywgNzYsIDE5NywgNzAsIDczLCA3MywgCisgICAgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNTEsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDE5NywgNzAsIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDcwLCA3MywgNzAsIDg0LCA4OSwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgMjE3LCA3MCwgCisgICAgNzMsIDcwLCA4NCwgNzIsIDgzLCAxMjgsIDcwLCA3MywgNzAsIDg0LCA3MiwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAKKyAgICA3OCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3MywgNjksIDc2LCA2OCwgMTI4LCA3MCwgNzIsIAorICAgIDg0LCA3OSwgODIsIDE5MywgNzAsIDcwLCA3NiwgMTI4LCA3MCwgNzAsIDczLCAxMjgsIDcwLCA2OSwgODUsIDg4LCAxMjgsIAorICAgIDcwLCA2OSwgODUsIDcwLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzAsIDY5LCA4MywgODQsIDczLCA4NiwgNjUsIDc2LCAKKyAgICAxMjgsIDcwLCA2OSwgODIsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDgyLCA4MiwgNzMsIDIxMSwgNzAsIDY5LCA4MiwgNzcsIAorICAgIDY1LCA4NCwgNjUsIDEyOCwgNzAsIDY5LCA4MiwgNzcsIDY1LCA4NCwgMTkzLCA3MCwgNjksIDc5LCAyMDAsIDcwLCA2OSwgCisgICAgNzgsIDE5OSwgNzAsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDczLCA3OCwgNzMsIDc4LCAxOTcsIDcwLCAKKyAgICA2OSwgNzcsIDY1LCA3NiwgNjksIDEyOCwgNzAsIDY5LCA3NywgNjUsIDc2LCAxOTcsIDcwLCA2OSwgNzYsIDc2LCA3OSwgODcsIAorICAgIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDcwLCA2OSwgNzMsIDEyOCwgNzAsIDY5LCA3MiwgMjEzLCA3MCwgNjksIDcyLCAxMjgsIAorICAgIDcwLCA2OSwgMjAwLCA3MCwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzAsIDY5LCA2OSwgNjgsIDEyOCwgNzAsIDY5LCA2OSwgCisgICAgMTk2LCA3MCwgNjksIDY5LCAxMjgsIDcwLCA2OSwgNjYsIDgyLCA4NSwgNjUsIDgyLCA4OSwgMTI4LCA3MCwgNjksIDY1LCAKKyAgICA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3MCwgNjksIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2OSwgNjUsIDgyLCA3OCwgCisgICAgMTI4LCA3MCwgNjksIDY1LCA4MiwgNzAsIDg1LCAyMDQsIDcwLCA2OSwgNjUsIDgyLCAxMjgsIDcwLCA2NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIAorICAgIDY5LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgCisgICAgODQsIDcyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCAKKyAgICA3MiwgNjUsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgMjAxLCAKKyAgICA3MCwgNjUsIDgxLCAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgNjksIAorICAgIDgyLCA3OSwgODMsIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgCisgICAgNjUsIDc2LCA3NiwgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzYsIDc2LCA2OSwgMjA2LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCAKKyAgICA2OSwgMTI4LCA3MCwgNjUsIDczLCA3MiwgODUsIDEyOCwgNzAsIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIAorICAgIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCA4MiwgODksIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCAyMTAsIDcwLCA2NSwgCisgICAgNjcsIDgzLCA3MywgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDU0LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCAKKyAgICA0NSwgNTMsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUxLCAxMjgsIAorICAgIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY1LCA3NywgCisgICAgNjUsIDY5LCAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIDcwLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MCwgNDgsIDUzLCAKKyAgICA1MSwgMTI4LCA3MCwgNDgsIDUzLCA1MCwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjcsIDEyOCwgNzAsIDQ4LCA1MywgNDksIAorICAgIDY2LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgMTI4LCA3MCwgNDgsIDUzLCA0OCwgCisgICAgMTI4LCA3MCwgNDgsIDUyLCA1NywgMTI4LCA3MCwgNDgsIDUyLCA1NiwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgNjUsIDEyOCwgCisgICAgNzAsIDQ4LCA1MiwgNTUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCAxMjgsIDcwLCAKKyAgICA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1MywgMTI4LCA3MCwgNDgsIDUyLCA1MiwgMTI4LCA3MCwgNDgsIAorICAgIDUyLCA1MSwgMTI4LCA3MCwgNDgsIDUyLCA1MCwgMTI4LCA3MCwgNDgsIDUyLCA0OSwgMTI4LCA3MCwgNDgsIDUyLCA0OCwgCisgICAgMTI4LCA3MCwgNDgsIDUxLCA1NywgMTI4LCA3MCwgNDgsIDUxLCA1NiwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDEyOCwgCisgICAgNzAsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCAxMjgsIDcwLCA0OCwgNTEsIDU0LCAxMjgsIDcwLCAKKyAgICA0OCwgNTEsIDUzLCAxMjgsIDcwLCA0OCwgNTEsIDUyLCAxMjgsIDcwLCA0OCwgNTEsIDUxLCAxMjgsIDcwLCA0OCwgNTEsIAorICAgIDUwLCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgMTI4LCA3MCwgNDgsIDUxLCA0OCwgCisgICAgMTI4LCA3MCwgNDgsIDUwLCA1NywgMTI4LCA3MCwgNDgsIDUwLCA1NiwgMTI4LCA3MCwgNDgsIDUwLCA1NSwgMTI4LCA3MCwgCisgICAgNDgsIDUwLCA1NCwgMTI4LCA3MCwgNDgsIDUwLCA1MywgMTI4LCA3MCwgNDgsIDUwLCA1MiwgMTI4LCA3MCwgNDgsIDUwLCAKKyAgICA1MSwgMTI4LCA3MCwgNDgsIDUwLCA1MCwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIAorICAgIDEyOCwgNzAsIDQ4LCA1MCwgNDgsIDEyOCwgNzAsIDQ4LCA0OSwgNTcsIDEyOCwgNzAsIDQ4LCA0OSwgNTYsIDEyOCwgNzAsIAorICAgIDQ4LCA0OSwgNTUsIDEyOCwgNzAsIDQ4LCA0OSwgNTQsIDEyOCwgNzAsIDQ4LCA0OSwgNTMsIDEyOCwgNzAsIDQ4LCA0OSwgCisgICAgNTIsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDY1LCAxMjgsIDcwLCA0OCwgNDksIDUxLCAxMjgsIDcwLCA0OCwgNDksIDUwLCAKKyAgICAxMjgsIDcwLCA0OCwgNDksIDQ5LCAxMjgsIDcwLCA0OCwgNDksIDQ4LCAxMjgsIDcwLCA0OCwgNDgsIDU3LCAxMjgsIDcwLCAKKyAgICA0OCwgNDgsIDU2LCAxMjgsIDcwLCA0OCwgNDgsIDU1LCAxMjgsIDcwLCA0OCwgNDgsIDU0LCAxMjgsIDcwLCA0OCwgNDgsIAorICAgIDUzLCAxMjgsIDcwLCA0OCwgNDgsIDUyLCAxMjgsIDcwLCA0OCwgNDgsIDUxLCAxMjgsIDcwLCA0OCwgNDgsIDUwLCAxMjgsIAorICAgIDcwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgCisgICAgNzgsIDEyOCwgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgCisgICAgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKKyAgICA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgCisgICAgODQsIDgyLCA3MywgNjUsIDIwNCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCAKICAgICA2NSwgNDUsIDcyLCA3MywgNzEsIDIwMCwgNjksIDg4LCA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAotICAgIDg0LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIDczLCA4MywgCi0gICAgODQsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgNzMsIDc5LCAKLSAgICA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIAotICAgIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNjksIDgzLCA4MywgMTI4LCA2OSwgODgsIDY3LCA2OSwgCi0gICAgNzYsIDc2LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA4NywgNjksIDEyOCwgNjksIDg2LCA2OSwgNzgsIDczLCA3OCwgNzEsIAotICAgIDEyOCwgNjksIDg1LCA4MiwgNzksIDQ1LCA2NywgODUsIDgyLCA4MiwgNjksIDc4LCA2NywgMjE3LCA2OSwgODUsIDgyLCAKLSAgICAyMDcsIDY5LCA4NSwgNzYsIDY5LCAyMTAsIDY5LCA4NSwgNDUsIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA4NSwgMTI4LCAKLSAgICA2OSwgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIAorICAgIDg0LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCA3OCwgMjEyLCA2OSwgODgsIDc5LCAKKyAgICAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCAKKyAgICA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgCisgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCAKKyAgICA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgNjksIDg4LCA2NywgNjksIAorICAgIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgODcsIDY5LCAxMjgsIDY5LCA4NiwgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgCisgICAgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA2NSwgMjA2LCAKKyAgICA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgCisgICAgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDY5LCA4NSwgODIsIDIwNywgNjksIDg1LCA3NiwgNjksIAorICAgIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIAorICAgIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgMTI4LCA2OSwgODUsIDQ1LCA2NSwgMTI4LCA2OSwgCisgICAgODQsIDc4LCA2NSwgNzIsIDg0LCA2NSwgMTI4LCA2OSwgODQsIDcyLCA2OSwgMjA0LCA2OSwgODQsIDY5LCA4MiwgNzksIAogICAgIDIwNiwgNjksIDg0LCA2OSwgODIsIDc4LCA3MywgODQsIDg5LCAxMjgsIDY5LCA4MywgODUsIDc1LCA4NSwgODUsIDY4LCA3OSwgCiAgICAgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDgzLCAxMjgsIDY5LCA4MywgODQsIDczLCA3NywgNjUsIDg0LCAKICAgICA2OSwgMTk2LCA2OSwgODMsIDcyLCA2OSwgNTEsIDEyOCwgNjksIDgzLCA3MiwgNTAsIDQ5LCAxMjgsIDY5LCA4MywgNzIsIApAQCAtMjc5OCwxMjUyNyArMzU2MSwxNTI1MSBAQAogICAgIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA2OSwgODEsIDg1LCA3MywgNjgsIDEyOCwgNjksIDgxLCA4NSwgCiAgICAgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgMTI4LCA2OSwgODEsIDg1LCAKICAgICA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIAotICAgIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgNjksIDgwLCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCA3MywgMTk1LCA2OSwgCi0gICAgODAsIDczLCA2OCwgNjUsIDg1LCA4MiwgNjksIDY1LCAyMDYsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCAKLSAgICA2OSwgNzksIDc2LCA3MiwgODgsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgNjksIAotICAgIDEyOCwgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA4MCwgCi0gICAgODIsIDczLCA4MywgNjksIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIDc4LCA4NCwgNjksIDgyLCAKLSAgICAxMjgsIDY5LCA3OCwgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAxMjgsIDY5LCA3OCwgNzksIAotICAgIDIxMSwgNjksIDc4LCA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgCi0gICAgNjksIDc4LCA2OCwgNzksIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjksIDc4LCAKLSAgICA2OCwgNjksIDgwLCAxMjgsIDY5LCA3OCwgNjgsIDY5LCA2NSwgODYsIDc5LCA4NSwgODIsIDEyOCwgNjksIDc4LCAxOTYsIAorICAgIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIDY5LCA4MCwgNzMsIDcxLCA4MiwgCisgICAgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCA2NSwgMjA2LCA2OSwgODAsIDY5LCAKKyAgICA3OCwgODQsIDcyLCA2OSwgODQsIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCA2OSwgNzksIAorICAgIDc2LCA3MiwgODgsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgCisgICAgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIAorICAgIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgCisgICAgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIAorICAgIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgCisgICAgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAxMjgsIDY5LCA3OCwgNzksIDIxMSwgNjksIDc4LCAKKyAgICA3OCwgMTI4LCA2OSwgNzgsIDc2LCA2NSwgODIsIDcxLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc4LCA3MSwgNzMsIAorICAgIDc4LCA2OSwgMTI4LCA2OSwgNzgsIDY4LCA3OSwgNzAsIDc5LCA3OCwgNzksIDc4LCAxMjgsIDY5LCA3OCwgNjgsIDczLCA3OCwgCisgICAgMTk5LCA2OSwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNjksIDc4LCA2OCwgNjksIDY1LCA4NiwgNzksIDg1LCA4MiwgMTI4LCAKICAgICA2OSwgNzgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2OSwgNzgsIDY3LCA3NiwgNzksIDgzLCA4NSwgCi0gICAgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY1LCA4MiwgODgsIDczLCAKLSAgICAyMTEsIDY5LCA3OCwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNzksIDIxMSwgNjksIDc3LCA4MCwgODQsIDIxNywgNjksIAotICAgIDc3LCA4MCwgNzIsIDY1LCA4NCwgNzMsIDE5NSwgNjksIDc3LCA4MCwgNzIsIDY1LCA4MywgNzMsIDIxMSwgNjksIDc3LCA2NiwgCi0gICAgODIsIDc5LCA3MywgNjgsIDY5LCA4MiwgODksIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgNzMsIDgzLCA3MiwgNzcsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgNzYsIDc2LCA3MywgCi0gICAgODAsIDgzLCA3MywgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAKLSAgICAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIAotICAgIDc3LCA2OSwgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDgyLCA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCAKLSAgICA4MCwgODQsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIAotICAgIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgNjcsIDIxMiwgNjksIDczLCA4MywgCi0gICAgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCA2OSwgNzMsIDcxLCAKLSAgICA3MiwgODQsIDcyLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIAotICAgIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCAKLSAgICAyMDYsIDY5LCA3MywgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIAotICAgIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgCi0gICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDY2LCA2OSwgNjksIDcwLCAKLSAgICA3MywgNzYsIDczLCAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCA2OSwgNjgsIDczLCA3OCwgCi0gICAgMTI4LCA2OSwgNjgsIDY4LCAxMjgsIDY5LCA2NywgMjAwLCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgCi0gICAgNjUsIDgzLCA4NCwgNjksIDgyLCAyMDYsIDY5LCA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgMjE3LCAKLSAgICA2OSwgNjUsIDgyLCA4NCwgNzIsIDEyOCwgNjksIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIAotICAgIDY1LCA3NywgNzIsIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgCi0gICAgNjUsIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCAKLSAgICA2OCwgOTAsIDkwLCA2OSwgMTI4LCA2OCwgOTAsIDg3LCA2OSwgMTI4LCA2OCwgOTAsIDg1LCAxMjgsIDY4LCA5MCwgNzksIAotICAgIDEyOCwgNjgsIDkwLCA3NCwgNjksIDEyOCwgNjgsIDkwLCA3MywgMTI4LCA2OCwgOTAsIDcyLCA2OSwgMTI4LCA2OCwgOTAsIAotICAgIDcyLCA2NSwgMTI4LCA2OCwgOTAsIDY5LCA3NiwgNzksIDEyOCwgNjgsIDkwLCA2OSwgNjksIDEyOCwgNjgsIDkwLCA2OSwgCi0gICAgMTI4LCA2OCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgMTI4LCA2OCwgMjE4LCA2OCwgODksIDc5LCAxMjgsIDY4LCA4OSwgMjA3LCAKLSAgICA2OCwgODksIDY5LCA3MiwgMTI4LCA2OCwgODksIDY5LCAyMDAsIDY4LCA4NywgNzksIDEyOCwgNjgsIDg3LCA2OSwgMTI4LCAKLSAgICA2OCwgODcsIDY1LCAxMjgsIDY4LCA4NiwgNzMsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2OCwgODYsIDEyOCwgNjgsIAotICAgIDg1LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgODUsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDg1LCA4MiwgCisgICAgODIsIDY5LCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDczLCA3OCwgMTk5LCA2OSwgNzgsIDY3LCAxMjgsIDY5LCAKKyAgICA3OCwgNjUsIDgyLCA4OCwgNzMsIDIxMSwgNjksIDc4LCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA3OSwgMjExLCA2OSwgNzcsIAorICAgIDgwLCA4NCwgMjE3LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDg0LCA3MywgMTk1LCA2OSwgNzcsIDgwLCA3MiwgNjUsIDgzLCA3MywgCisgICAgMjExLCA2OSwgNzcsIDY2LCA4MiwgNzksIDczLCA2OCwgNjksIDgyLCA4OSwgMTI4LCA2OSwgNzcsIDY2LCA3NiwgNjksIDc3LCAKKyAgICAxMjgsIDY5LCA3NywgNjYsIDY5LCA3NiwgNzYsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY5LCA3NywgNjYsIAorICAgIDY5LCA2OCwgNjgsIDczLCA3OCwgNzEsIDEyOCwgNjksIDc2LCA4NCwgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA3MywgCisgICAgODMsIDEyOCwgNjksIDc2LCA3NiwgNzMsIDgwLCA4MywgNjksIDEyOCwgNjksIDc2LCA3MywgNzAsIDczLCAxMjgsIDY5LCAKKyAgICA3NiwgNjksIDg2LCA2OSwgNzgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3NiwgNjksIDg2LCA2OSwgCisgICAgNzgsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAyMDYsIDY5LCA3NiwgNjksIDgwLCA3MiwgNjUsIDc4LCA4NCwgMTI4LCAKKyAgICA2OSwgNzYsIDY5LCA3NywgNjksIDc4LCAyMTIsIDY5LCA3NiwgNjksIDY3LCA4NCwgODIsIDczLCA2NywgNjUsIDIwNCwgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDE5NSwgNjksIDc2LCA2NSwgNzAsIDgyLCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgCisgICAgODQsIDgyLCA2OSwgODAsIDg0LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA4MywgMTI4LCA2OSwgNzUsIDcwLCA3OSwgNzgsIDczLCAKKyAgICA4NCwgNzMsIDc1LCA3OSwgNzgsIDEyOCwgNjksIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY5LCA3NCwgNjksIDY3LCAyMTIsIAorICAgIDY5LCA3MywgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA4OSwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDIxNywgCisgICAgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgODMsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA3MiwgMjExLCA2OSwgNzMsIDcxLCAKKyAgICA3MiwgODQsIDcyLCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCA3OCwgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIAorICAgIDY5LCA2OSwgMjA2LCA2OSwgNzMsIDcxLCA3MiwgODQsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgCisgICAgNjksIDEyOCwgNjksIDcyLCA4NywgNjUsIDIxOCwgNjksIDcxLCA4OSwgODAsIDg0LCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCAKKyAgICA2NSwgMjA0LCA2OSwgNzEsIDczLCA4MiwgMTI4LCA2OSwgNzEsIDcxLCAxMjgsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIAorICAgIDY1LCAxMjgsIDY5LCA2OSwgNzUsIDY1LCA2NSwgMTI4LCA2OSwgNjksIDY2LCA2OSwgNjksIDcwLCA3MywgNzYsIDczLCAKKyAgICAxMjgsIDY5LCA2OCwgNzMsIDg0LCA3OSwgODIsIDczLCA2NSwgMjA0LCA2OSwgNjgsIDczLCA3OCwgMTI4LCA2OSwgNjgsIAorICAgIDY4LCAxMjgsIDY5LCA2NiwgNjksIDcwLCA3MywgNzYsIDczLCAxMjgsIDY5LCA2NSwgODMsIDg0LCA2OSwgODIsIDIwNiwgCisgICAgNjksIDY1LCA4MywgMjEyLCA2OSwgNjUsIDgyLCA4NCwgNzIsIDc2LCAyMTcsIDY5LCA2NSwgODIsIDg0LCA3MiwgMTI4LCAKKyAgICA2OSwgNjUsIDgyLCA4NCwgMjAwLCA2OSwgNjUsIDgyLCA4MywgMTI4LCA2OSwgNjUsIDgyLCA3NiwgMjE3LCA2OSwgNjUsIAorICAgIDc3LCA3MiwgNjUsIDc4LCA2NywgNzIsIDc5LCA3NiwgNzYsIDEyOCwgNjksIDY1LCA3MSwgNzYsIDY5LCAxMjgsIDY5LCA2NSwgCisgICAgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCA2NSwgNjYsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDY5LCAxNzgsIDY5LCAKKyAgICA0OCwgNTEsIDU2LCAxMjgsIDY5LCA0OCwgNTEsIDU1LCAxMjgsIDY5LCA0OCwgNTEsIDU0LCAxMjgsIDY5LCA0OCwgNTEsIAorICAgIDUyLCA2NSwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgMTI4LCA2OSwgNDgsIDUxLCA1MSwgMTI4LCA2OSwgNDgsIDUxLCA1MCwgCisgICAgMTI4LCA2OSwgNDgsIDUxLCA0OSwgMTI4LCA2OSwgNDgsIDUxLCA0OCwgMTI4LCA2OSwgNDgsIDUwLCA1NywgMTI4LCA2OSwgCisgICAgNDgsIDUwLCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDEyOCwgNjksIDQ4LCA1MCwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA1MCwgNTQsIDEyOCwgNjksIDQ4LCA1MCwgNTMsIDEyOCwgNjksIDQ4LCA1MCwgNTIsIDEyOCwgNjksIDQ4LCA1MCwgNTEsIAorICAgIDEyOCwgNjksIDQ4LCA1MCwgNTAsIDEyOCwgNjksIDQ4LCA1MCwgNDksIDEyOCwgNjksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDQ4LCAxMjgsIDY5LCA0OCwgNDksIDU3LCAxMjgsIDY5LCA0OCwgNDksIDU2LCAxMjgsIDY5LCA0OCwgCisgICAgNDksIDU1LCA2NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgMTI4LCA2OSwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgNjksIDQ4LCAKKyAgICA0OSwgNTQsIDEyOCwgNjksIDQ4LCA0OSwgNTMsIDEyOCwgNjksIDQ4LCA0OSwgNTIsIDEyOCwgNjksIDQ4LCA0OSwgNTEsIAorICAgIDEyOCwgNjksIDQ4LCA0OSwgNTAsIDEyOCwgNjksIDQ4LCA0OSwgNDksIDEyOCwgNjksIDQ4LCA0OSwgNDgsIDEyOCwgNjksIAorICAgIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCAxMjgsIDY5LCA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OSwgCisgICAgNDgsIDQ4LCA1NiwgMTI4LCA2OSwgNDgsIDQ4LCA1NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NCwgMTI4LCA2OSwgNDgsIDQ4LCAKKyAgICA1MywgMTI4LCA2OSwgNDgsIDQ4LCA1MiwgMTI4LCA2OSwgNDgsIDQ4LCA1MSwgMTI4LCA2OSwgNDgsIDQ4LCA1MCwgMTI4LCAKKyAgICA2OSwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgNDUsIDc3LCA2NSwgNzMsIDIwNCwgNjgsIDkwLCA5MCwgNjksIDEyOCwgNjgsIAorICAgIDkwLCA4NywgNjksIDEyOCwgNjgsIDkwLCA4NSwgMTI4LCA2OCwgOTAsIDc5LCAxMjgsIDY4LCA5MCwgNzQsIDY5LCAxMjgsIAorICAgIDY4LCA5MCwgNzMsIDEyOCwgNjgsIDkwLCA3MiwgNjksIDEyOCwgNjgsIDkwLCA3MiwgNjUsIDEyOCwgNjgsIDkwLCA2OSwgCisgICAgNzYsIDc5LCAxMjgsIDY4LCA5MCwgNjksIDY5LCAxMjgsIDY4LCA5MCwgNjksIDEyOCwgNjgsIDkwLCA2NSwgNjUsIDEyOCwgCisgICAgNjgsIDkwLCA2NSwgMTI4LCA2OCwgOTAsIDEyOCwgNjgsIDIxOCwgNjgsIDg5LCA3OSwgMTI4LCA2OCwgODksIDIwNywgNjgsIAorICAgIDg5LCA2OSwgNzIsIDEyOCwgNjgsIDg5LCA2OSwgMjAwLCA2OCwgODcsIDc5LCAxMjgsIDY4LCA4NywgNjksIDEyOCwgNjgsIAorICAgIDg3LCA2NSwgMTI4LCA2OCwgODYsIDczLCA4MywgODYsIDY1LCA4MiwgNjUsIDEyOCwgNjgsIDg2LCA2OCwgMTI4LCA2OCwgCisgICAgODYsIDEyOCwgNjgsIDg1LCA4NCwgNzMsIDY5LCA4MywgMTI4LCA2OCwgODUsIDgzLCA3NSwgMTI4LCA2OCwgODUsIDgzLCAKKyAgICA3MiwgNjksIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDg1LCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA4NSwgODIsIAogICAgIDUwLCAxMjgsIDY4LCA4NSwgODAsIDc5LCA3OCwgNjgsIDczLCA4NSwgMjExLCA2OCwgODUsIDc5LCA4OCwgMTI4LCA2OCwgCiAgICAgODUsIDc5LCAxMjgsIDY4LCA4NSwgNzgsIDUyLCAxMjgsIDY4LCA4NSwgNzgsIDUxLCAxMjgsIDY4LCA4NSwgNzgsIDE3OSwgCi0gICAgNjgsIDg1LCA3OCwgMTI4LCA2OCwgODUsIDc3LCAxMjgsIDY4LCA4NSwgNzYsIDEyOCwgNjgsIDg1LCAyMDQsIDY4LCA4NSwgCi0gICAgNzIsIDEyOCwgNjgsIDg1LCA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCA4NSwgNjYsIDEyOCwgCi0gICAgNjgsIDg1LCAxOTQsIDY4LCAyMTMsIDY4LCA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAxMjgsIAotICAgIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgCi0gICAgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY4LCA4MiwgNzMsIDIwNCwgNjgsIDgyLCAKLSAgICA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MCwgODQsIAotICAgIDczLCA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgNjUsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAKLSAgICAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIAotICAgIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgCi0gICAgODUsIDY2LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCAKLSAgICA3NiwgNzMsIDc4LCAxOTcsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDQ1LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OCwgNzksIAotICAgIDg1LCA2NiwgNzYsIDY5LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA4MCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCi0gICAgNjksIDY4LCA0NSwgNzgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc2LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKLSAgICA2OSwgNjgsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCAxOTYsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKLSAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCi0gICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAotICAgIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDUwLCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKLSAgICA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKLSAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAotICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCAKLSAgICA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgCi0gICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKLSAgICA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgMTI4LCA2OCwgNzksIDg0LCA3NiwgNjksIDgzLCAyMTEsIDY4LCA3OSwgODIsIDg1LCAxMjgsIDY4LCA3OSwgNzksIAotICAgIDgyLCAxMjgsIDY4LCA3OSwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc4LCA3MSwgMTI4LCA2OCwgNzksIDc4LCAxMjgsIAotICAgIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA3NiwgNjUsIDIxMCwgNjgsIDc5LCA3NiwgNzMsIDg1LCA3NywgCi0gICAgMTI4LCA2OCwgNzksIDczLCA4NCwgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgNjksIDIxMSwgNjgsIDc5LCA2OCwgCi0gICAgNjksIDc1LCA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCAKLSAgICA4MywgNzIsIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDE5NywgNjgsIAotICAgIDc5LCA2NSwgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIDc2LCA4NSwgMTI4LCAKLSAgICA2OCwgNzYsIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA2OSwgNjksIDEyOCwgNjgsIDc2LCA2NSwgMTI4LCAKLSAgICA2OCwgNzYsIDEyOCwgNjgsIDc1LCA2NSwgODIsIDEyOCwgNjgsIDc1LCA2NSwgMjEwLCA2OCwgNzQsIDY5LCA4MiwgODYsIAotICAgIDczLCAxMjgsIDY4LCA3NCwgNjksIDgyLCA4NiwgMTI4LCA2OCwgNzQsIDY5LCAxMjgsIDY4LCA3NCwgNjUsIDEyOCwgNjgsIAotICAgIDczLCA4NiwgNzksIDgyLCA2NywgMTk3LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4NiwgCi0gICAgNzMsIDgzLCA3MywgNzksIDIwNiwgNjgsIDczLCA4NiwgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCAKLSAgICA4NiwgNzMsIDY4LCA2OSwgODMsIDEyOCwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgODIsIDEyOCwgNjgsIDczLCA4NiwgNzMsIAotICAgIDY4LCA2OSwgMTk2LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgMTk3LCA2OCwgCi0gICAgNzMsIDg2LCA2OSwgODIsIDcxLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNzMsIDg0LCA4NCwgMjA3LCA2OCwgNzMsIDgzLCAKLSAgICA4NCwgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc4LCA3MSwgODUsIDczLCA4MywgCi0gICAgNzIsIDEyOCwgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzMsIDc3LCAKLSAgICA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIDczLCA3OCwgODUsIAotICAgIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDc2LCAyMTcsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODAsIDg0LCA2OSwgMTI4LCA2OCwgNzMsIDgwLCAKLSAgICA4MCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODAsIDc2LCA3OSwgODUsIDc4LCAxMjgsIDY4LCA3MywgODAsIDc2LCA3MywgCi0gICAgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDc4LCA3MSwgNjYsIDY1LCAyMTIsIDY4LCA3MywgMjA2LCA2OCwgCi0gICAgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIAotICAgIDUxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA3NywgCi0gICAgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDczLCA4MywgNzIsIAotICAgIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgNzMsIDE5MywgNjgsIDczLCA3NywgNjksIDc4LCA4MywgCi0gICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgNzcsIDUwLCAKLSAgICAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIAotICAgIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgCi0gICAgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCAKLSAgICA3MSwgNzksIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIAotICAgIDcwLCA4NCwgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgCi0gICAgNzAsIDcwLCA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIAotICAgIDY5LCA4MywgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgCi0gICAgNzAsIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCAKLSAgICA3MywgODMsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCAKLSAgICA2OCwgNzMsIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIAotICAgIDczLCA3NSwgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgCi0gICAgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIDY5LCAyMTAsIDY4LCAKLSAgICA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCAxOTMsIAotICAgIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgNzYsIDEyOCwgCi0gICAgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA5MCwgNjksIAotICAgIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDc5LCAxMjgsIDY4LCA3MiwgCi0gICAgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgNzIsIDcyLCA3OSwgNzksIDEyOCwgCi0gICAgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDY4LCAKLSAgICA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgCi0gICAgNjgsIDcyLCA2NSwgNjUsIDc2LCA4NSwgMTI4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OSwgOTAsIDIwMCwgNjgsIDY5LCAKLSAgICA4OSwgODQsIDY5LCA4MiwgNzksIDIxMywgNjgsIDY5LCA4OSwgODQsIDY5LCA4MiwgNzksIDIxMSwgNjgsIDY5LCA4OCwgNzMsIAotICAgIDY1LCAxMjgsIDY4LCA2OSwgODYsIDczLCA2NywgMTk3LCA2OCwgNjksIDg2LCA2OSwgNzYsIDc5LCA4MCwgNzcsIDY5LCA3OCwgCi0gICAgODQsIDEyOCwgNjgsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCAKLSAgICA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIAotICAgIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCAKLSAgICA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIAotICAgIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDc4LCAxOTksIDY4LCA2OSwgNzgsIDg0LCA3MywgODMsIDg0LCA4MiwgCi0gICAgMjE3LCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDgyLCAKLSAgICAxMjgsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgODQsIDc5LCAyMTAsIDY4LCA2OSwgNzgsIDc4LCA2OSwgNzgsIAotICAgIDEyOCwgNjgsIDY5LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCA3NiwgCi0gICAgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDY4LCA2OSwgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCAKLSAgICA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIAotICAgIDczLCA3NywgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgCi0gICAgNzYsIDY5LCA4NCwgNjksIDEyOCwgNjgsIDY5LCA3NiwgNjksIDg0LCAxOTcsIDY4LCA2OSwgNzUsIDY1LCAxMjgsIDY4LCAKLSAgICA2OSwgNzUsIDEyOCwgNjgsIDY5LCA3MywgMTI4LCA2OCwgNjksIDcyLCA3MywgMTI4LCA2OCwgNjksIDcxLCA4MiwgNjksIAotICAgIDE5NywgNjgsIDY5LCA3MCwgNzMsIDc4LCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDY5LCA3MCwgNjksIDY3LCA4NCwgCi0gICAgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgMjExLCA2OCwgNjksIDY5LCA4MiwgMTI4LCA2OCwgNjksIDY5LCA3NiwgMTI4LCAKLSAgICA2OCwgNjksIDY3LCA4MiwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNzksIDEyOCwgNjgsIDY5LCA2NywgODIsIDY5LCA2NSwgCi0gICAgODMsIDY5LCAxMjgsIDY4LCA2OSwgNjcsIDczLCA4MywgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjgsIDY5LCAKLSAgICA2NywgNzMsIDc3LCA2NSwgMjA0LCA2OCwgNjksIDY3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA2NywgNjUsIAotICAgIDg5LCA2OSwgNjgsIDEyOCwgNjgsIDY5LCA2NiwgNzMsIDIxMiwgNjgsIDY5LCA2NSwgODQsIDcyLCAxMjgsIDY4LCA2OSwgCi0gICAgNjUsIDY4LCAxMjgsIDY4LCA2OCwgODcsIDY1LCAxMjgsIDY4LCA2OCwgODUsIDg4LCAxMjgsIDY4LCA2OCwgODUsIDg0LCAKLSAgICAxMjgsIDY4LCA2OCwgODUsIDgyLCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgMTI4LCA2OCwgNjgsIDg1LCA4MCwgMTI4LCAKLSAgICA2OCwgNjgsIDg1LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDgwLCAxMjgsIDY4LCA2OCwgODUsIDc5LCAxMjgsIAotICAgIDY4LCA2OCwgODUsIDEyOCwgNjgsIDY4LCA3OSwgODgsIDEyOCwgNjgsIDY4LCA3OSwgODQsIDEyOCwgNjgsIDY4LCA3OSwgCi0gICAgODAsIDEyOCwgNjgsIDY4LCA3OSwgNjUsIDEyOCwgNjgsIDY4LCA3MywgODgsIDEyOCwgNjgsIDY4LCA3MywgODQsIDEyOCwgCi0gICAgNjgsIDY4LCA3MywgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDg4LCAxMjgsIDY4LCA2OCwgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA2OCwgNjgsIDczLCA2OSwgMTI4LCA2OCwgNjgsIDczLCAxMjgsIDY4LCA2OCwgNzIsIDc5LCAxMjgsIDY4LCA2OCwgNzIsIAotICAgIDY1LCAxMjgsIDY4LCA2OCwgNjksIDg4LCAxMjgsIDY4LCA2OCwgNjksIDgwLCAxMjgsIDY4LCA2OCwgNjksIDY5LCAxMjgsIAotICAgIDY4LCA2OCwgNjksIDEyOCwgNjgsIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjgsIDY1LCAxMjgsIDY4LCA2OCwgCi0gICAgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA4OCwgMTI4LCA2OCwgNjgsIDY1LCA4NCwgMTI4LCAKLSAgICA2OCwgNjgsIDY1LCA4MCwgMTI4LCA2OCwgNjgsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCAyMDQsIDY4LCA2OCwgNjUsIAotICAgIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCAyMDQsIDY4LCA2OCwgNjUsIDY1LCAxMjgsIDY4LCAxOTQsIAotICAgIDY4LCA2NSwgMjE3LCA2OCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNjgsIDY1LCA4NiwgNzMsIDY4LCAKLSAgICAxMjgsIDY4LCA2NSwgODQsIDE5NywgNjgsIDY1LCA4MywgNzMsIDY1LCAxMjgsIDY4LCA2NSwgODMsIDcyLCA2OSwgMTk2LCAKLSAgICA2OCwgNjUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDgzLCAyMDAsIDY4LCA2NSwgODMsIDY5LCA3MywgNjUsIDEyOCwgNjgsIAotICAgIDY1LCA4MiwgODQsIDEyOCwgNjgsIDY1LCA4MiwgNzUsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDgyLCA3NSwgCi0gICAgNjksIDc4LCA3MywgNzgsIDE5OSwgNjgsIDY1LCA4MiwgMjAzLCA2OCwgNjUsIDgyLCA3MSwgNjUsIDEyOCwgNjgsIDY1LCAKLSAgICA4MiwgNjUsIDUyLCAxMjgsIDY4LCA2NSwgODIsIDY1LCA1MSwgMTI4LCA2OCwgNjUsIDgyLCAxMjgsIDY4LCA2NSwgODAsIAotICAgIDQ1LCA4MCwgODIsIDY1LCAyMDUsIDY4LCA2NSwgODAsIDQ1LCA4MCwgNzMsIDIwMSwgNjgsIDY1LCA4MCwgNDUsIDc3LCA4NSwgCi0gICAgNzksIDIxNywgNjgsIDY1LCA4MCwgNDUsIDY2LCA4NSwgNzksIDIwNiwgNjgsIDY1LCA4MCwgNDUsIDY2LCA2OSwgMjAxLCAKLSAgICA2OCwgNjUsIDIwOCwgNjgsIDY1LCA3OCwgODQsIDY1LCA3NCwgMTkzLCA2OCwgNjUsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIAotICAgIDc4LCAxOTksIDY4LCA2NSwgNzgsIDY4LCA2NSwgMTI4LCA2OCwgNjUsIDc3LCA4MCwgMTI4LCA2OCwgNjUsIDc3LCAyMDgsIAotICAgIDY4LCA2NSwgNzcsIDc3LCA2NSwgODQsIDY1LCA3OCwgMTI4LCA2OCwgNjUsIDc3LCA3NywgNjUsIDg0LCA2NSwgMjA2LCA2OCwgCi0gICAgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDY1LCA3NywgNzcsIDE5MywgNjgsIDY1LCA3NywgNjUsIDgyLCA4NSwgMTI4LCAKLSAgICA2OCwgNjUsIDc2LCA2OSwgODQsIDEyOCwgNjgsIDY1LCA3NiwgNjksIDIxMiwgNjgsIDY1LCA3NiwgNjgsIDY1LCAxMjgsIAotICAgIDY4LCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgNjgsIDY1LCA3NiwgNjUsIDg0LCAyMDAsIDY4LCA2NSwgNzMsIDgyLCAKLSAgICAxMjgsIDY4LCA2NSwgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDcyLCA4OSwgNjUsIDY1LCA4NSwgODMsIDcyLCA0NSwgNTAsIAotICAgIDEyOCwgNjgsIDY1LCA3MiwgODksIDY1LCA2NSwgODUsIDgzLCA3MiwgMTI4LCA2OCwgNjUsIDcxLCA4MywgMTI4LCA2OCwgCi0gICAgNjUsIDcxLCA3MSwgNjksIDgyLCAxMjgsIDY4LCA2NSwgNzEsIDY5LCA4MywgNzIsIDEyOCwgNjgsIDY1LCA3MSwgNjksIDgzLCAKLSAgICAyMDAsIDY4LCA2NSwgNzEsIDY2LCA2NSwgODMsIDczLCA3OCwgNzgsIDY1LCAxMjgsIDY4LCA2NSwgNzEsIDY1LCAyMTgsIAotICAgIDY4LCA2NSwgNzEsIDY1LCA3NiwgNzEsIDY1LCAxMjgsIDY4LCA2NSwgMTk5LCA2OCwgNjUsIDY5LCA3OCwgNzEsIDEyOCwgCi0gICAgNjgsIDY1LCA2OSwgMTk5LCA2OCwgNjUsIDY4LCAxMjgsIDY4LCA2NSwgMTk2LCA2OCwgNjUsIDY1LCA4MywgODUsIDEyOCwgCi0gICAgNjgsIDY1LCA2NSwgNjgsIDcyLCA4NSwgMTI4LCA2NywgODksIDg4LCAxMjgsIDY3LCA4OSwgODQsIDEyOCwgNjcsIDg5LCAKLSAgICA4MiwgODgsIDEyOCwgNjcsIDg5LCA4MiwgNjksIDc4LCA2NSwgNzMsIDE5NSwgNjcsIDg5LCA4MiwgMTI4LCA2NywgODksIAotICAgIDgwLCA2OSwgODIsIDg1LCA4MywgMTI4LCA2NywgODksIDgwLCAxMjgsIDY3LCA4OSwgNzYsIDczLCA3OCwgNjgsIDgyLCA3MywgCi0gICAgNjcsIDczLCA4NCwgODksIDEyOCwgNjcsIDg5LCA2NSwgMTI4LCA2NywgODksIDEyOCwgNjcsIDg3LCA3OSwgNzksIDEyOCwgCi0gICAgNjcsIDg3LCA3OSwgMTI4LCA2NywgODcsIDczLCA3MywgMTI4LCA2NywgODcsIDczLCAxMjgsIDY3LCA4NywgNjksIDc5LCAKLSAgICA4MiwgODQsIDcyLCAxMjgsIDY3LCA4NywgNjksIDEyOCwgNjcsIDg3LCA2NSwgNjUsIDEyOCwgNjcsIDg1LCA4OCwgMTI4LCAKLSAgICA2NywgODUsIDg0LCAxMjgsIDY3LCA4NSwgMjEyLCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA2OSwgMjEwLCA2NywgODUsIAotICAgIDgyLCA4OCwgMTI4LCA2NywgODUsIDgyLCA4NiwgNzMsIDc4LCAxOTksIDY3LCA4NSwgODIsIDg2LCA2OSwgMTk2LCA2NywgCi0gICAgODUsIDgyLCA4NiwgNjksIDEyOCwgNjcsIDg1LCA4MiwgODYsIDE5NywgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgODQsIAotICAgIDEyOCwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgMjEyLCA2NywgODUsIDgyLCA3NiwgMjE3LCA2NywgODUsIDgyLCA3NiwgCi0gICAgMTI4LCA2NywgODUsIDgyLCAxMjgsIDY3LCA4NSwgODAsIDEyOCwgNjcsIDg1LCA3OSwgODgsIDEyOCwgNjcsIDg1LCA3OSwgCi0gICAgODAsIDEyOCwgNjcsIDg1LCA3OSwgMTI4LCA2NywgODUsIDIwNSwgNjcsIDg1LCA2NiwgNjksIDY4LCAxMjgsIDY3LCA4NSwgCi0gICAgNjYsIDE5NywgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCAKLSAgICA3NiwgNzYsIDIwNywgNjcsIDg1LCAxMjgsIDY3LCA4MiwgODksIDgwLCA4NCwgNzksIDcxLCA4MiwgNjUsIDc3LCA3NywgNzMsIAotICAgIDE5NSwgNjcsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDIwNywgNjcsIDgyLCA3OSwgODMsIDgzLCA3MywgNzgsIDE5OSwgCi0gICAgNjcsIDgyLCA3OSwgODMsIDgzLCA3MiwgNjUsIDg0LCA2NywgMjAwLCA2NywgODIsIDc5LCA4MywgODMsIDY5LCA2OCwgNDUsIAotICAgIDg0LCA2NSwgNzMsIDc2LCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDE5NiwgNjcsIDgyLCA3OSwgODMsIDgzLCA2NiwgCi0gICAgNzksIDc4LCA2OSwgODMsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDgzLCAxMjgsIDY3LCA4MiwgNzksIDgzLCAyMTEsIDY3LCAKLSAgICA4MiwgNzksIDgwLCAxMjgsIDY3LCA4MiwgNzksIDczLCA4OCwgMTI4LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgODQsIAorICAgIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg1LCAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCA3MSwgODUsIDY4LCAxMjgsIAorICAgIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCA4MiwgODksIDEyOCwgNjgsIAorICAgIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCA3OSwgODAsIDgzLCAxMjgsIAorICAgIDY4LCA4MiwgNzksIDgwLCA3NiwgNjksIDg0LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCAKKyAgICA4NywgNjksIDE5NiwgNjgsIDgyLCA3OSwgNzcsIDY5LCA2OCwgNjUsIDgyLCAyMTcsIDY4LCA4MiwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA2OCwgODIsIDczLCA4NiwgMTk3LCA2OCwgODIsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDgyLCA3MywgMjA0LCA2OCwgCisgICAgODIsIDY5LCA4MywgODMsIDEyOCwgNjgsIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCA2NSwgNzcsIAorICAgIDEyOCwgNjgsIDgyLCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgODIsIDY1LCA3MSwgNzksIDIwNiwgNjgsIDgyLCA2NSwgCisgICAgNzAsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDgzLCAxMjgsIDY4LCA4MiwgNjUsIDY3LCAKKyAgICA3MiwgNzcsIDY1LCAxMjgsIDY4LCA4MiwgNjUsIDY3LCA3MiwgNzcsIDE5MywgNjgsIDc5LCA4NywgNzgsIDg3LCA2NSwgODIsIAorICAgIDY4LCA4MywgMTI4LCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDIxMSwgNjgsIDc5LCA4NywgNzgsIDQ1LCA4MCwgCisgICAgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA2OCwgNzksIDg3LCA3OCwgMTI4LCA2OCwgNzksIDg2LCA2OSwgMTI4LCAKKyAgICA2OCwgNzksIDg1LCA3MSwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDg0LCAxMjgsIDY4LCA3OSwgODUsIAorICAgIDY2LCA3NiwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNjgsIDc5LCA4NSwgCisgICAgNjYsIDc2LCA2OSwgNDUsIDY5LCA3OCwgNjgsIDY5LCAxOTYsIDY4LCA3OSwgODUsIDY2LCA3NiwgNjksIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODQsIDY5LCA2OCwgNDUsIDgwLCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3OCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4NCwgNjksIDY4LCA0NSwgNzYsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDE5NiwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKKyAgICA1MSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU0LCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIAorICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgCisgICAgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU0LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTAsIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTYsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDEyOCwgCisgICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAxMjgsIDY4LCA3OSwgODQsIDc2LCAKKyAgICA2OSwgODMsIDIxMSwgNjgsIDc5LCA4MiwgODUsIDEyOCwgNjgsIDc5LCA3OSwgODIsIDEyOCwgNjgsIDc5LCA3OSwgNzgsIAorICAgIDcxLCAxMjgsIDY4LCA3OSwgNzgsIDcxLCAxMjgsIDY4LCA3OSwgNzcsIDY1LCA3MywgMjA2LCA2OCwgNzksIDc2LCA4MCwgCisgICAgNzIsIDczLCA3OCwgMTI4LCA2OCwgNzksIDc2LCA3NiwgODMsIDEyOCwgNjgsIDc5LCA3NiwgNzYsIDY1LCAyMTAsIDY4LCAKKyAgICA3OSwgNzYsIDczLCA4NSwgNzcsIDEyOCwgNjgsIDc5LCA3NSwgNzcsIDY1LCA3MywgMTI4LCA2OCwgNzksIDczLCA4NCwgCisgICAgMTI4LCA2OCwgNzksIDcxLCAxMjgsIDY4LCA3OSwgMTk5LCA2OCwgNzksIDY5LCAyMTEsIDY4LCA3OSwgNjgsIDY5LCA3NSwgCisgICAgNjUsIDg0LCA2NSwgMTI4LCA2OCwgNzksIDY2LCA4MiwgNzksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCAKKyAgICA3NywgNjksIDY5LCAxMjgsIDY4LCA3OSwgNjUsIDY3LCA3MiwgNjUsIDgzLCA3MiwgNzcsIDY5LCAxOTcsIDY4LCA3OSwgNjUsIAorICAgIDEyOCwgNjgsIDc5LCA0NSwgNzksIDEyOCwgNjgsIDc3LCAxMjgsIDY4LCAyMDUsIDY4LCA3NiwgODUsIDEyOCwgNjgsIDc2LCAKKyAgICA3OSwgMTI4LCA2OCwgNzYsIDczLCAxMjgsIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAKKyAgICAxMjgsIDY4LCA3NSwgNjUsIDgyLCAxMjgsIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCAKKyAgICA2OCwgNzQsIDY5LCA4MiwgODYsIDEyOCwgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3NCwgMTI4LCAKKyAgICA2OCwgNzMsIDkwLCA5MCwgMjE3LCA2OCwgNzMsIDg2LCA3OSwgODIsIDY3LCAxOTcsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDg2LCA3MywgNzgsIDY1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCA4MywgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAKKyAgICA4MiwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDY5LCAxOTYsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDEyOCwgNjgsIAorICAgIDczLCA4NiwgNzMsIDY4LCAxOTcsIDY4LCA3MywgODYsIDY5LCA4MiwgNzEsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA3MywgCisgICAgODQsIDg0LCAyMDcsIDY4LCA3MywgODMsIDg0LCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODMsIDg0LCAKKyAgICA3MywgNzgsIDcxLCA4NSwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA4NCwgNzMsIDc2LCA3NiwgMTI4LCA2OCwgNzMsIAorICAgIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDQ1LCA1MCwgMTI4LCA2OCwgNzMsIDgzLCA4MywgNzksIDc2LCA4NiwgNjksIDEyOCwgCisgICAgNjgsIDczLCA4MywgODAsIDY5LCA4MiwgODMsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgNzUsIDEyOCwgNjgsIDczLCAKKyAgICA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgNjgsIDczLCA4MywgNzIsIDEyOCwgNjgsIDczLCA4MywgNjcsIDc5LCA3OCwgODQsIAorICAgIDczLCA3OCwgODUsIDc5LCA4NSwgMjExLCA2OCwgNzMsIDgzLCAxOTUsIDY4LCA3MywgODMsIDY1LCA4MCwgODAsIDc5LCA3MywgCisgICAgNzgsIDg0LCA2OSwgMTk2LCA2OCwgNzMsIDgzLCA2NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzMsIDgyLCA3MSwgMTkzLCAKKyAgICA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3NiwgMjE3LCA2OCwgNzMsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCA2NSwgCisgICAgMjA0LCA2OCwgNzMsIDgwLCA4NCwgNjksIDEyOCwgNjgsIDczLCA4MCwgODAsIDY5LCA4MiwgMTI4LCA2OCwgNzMsIDgwLCAKKyAgICA3NiwgNzksIDg1LCA3OCwgMTI4LCA2OCwgNzMsIDgwLCA3NiwgNzMsIDEyOCwgNjgsIDczLCA4MCwgNzYsIDIwMSwgNjgsIAorICAgIDczLCA3OCwgNzEsIDY2LCA2NSwgMjEyLCA2OCwgNzMsIDIwNiwgNjgsIDczLCA3NywgNzcsIDczLCA3OCwgNzEsIDEyOCwgCisgICAgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA1MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIAorICAgIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUwLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCAKKyAgICA0NSwgNDksIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA3MywgODMsIDcyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OCwgNzMsIAorICAgIDc3LCA3MywgNjgsIDczLCAxOTMsIDY4LCA3MywgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgCisgICAgNzcsIDY5LCA3OCwgODMsIDczLCA3OSwgMjA2LCA2OCwgNzMsIDc3LCA1MCwgMTI4LCA2OCwgNzMsIDc2LCAxMjgsIDY4LCAKKyAgICA3MywgNzEsIDgyLCA2NSwgODAsIDcyLCAxMjgsIDY4LCA3MywgNzEsIDgyLCA2NSwgODAsIDIwMCwgNjgsIDczLCA3MSwgODIsIAorICAgIDY1LCA3NywgNzcsIDc5LCAyMTEsIDY4LCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCAxOTMsIDY4LCA3MywgNzEsIDgyLCA2NSwgCisgICAgMjA1LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA3MSwgNzksIDgyLCA3MSwgNzksIAorICAgIDIwNiwgNjgsIDczLCA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNjgsIDczLCA3MSwgMTkzLCA2OCwgNzMsIDcwLCA4NCwgCisgICAgNzksIDcxLCA3MSwgNzksIDIxMSwgNjgsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCAKKyAgICA3MywgNjcsIDg1LCA3NiwgODQsIDIxNywgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgNzMsIDY5LCA4MywgCisgICAgMTI4LCA2OCwgNzMsIDcwLCA3MCwgNjksIDgyLCA2OSwgNzgsIDg0LCA3MywgNjUsIDc2LCAxMjgsIDY4LCA3MywgNzAsIDcwLCAKKyAgICA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgNjgsIDczLCA3MCwgNjUsIDg0LCAxMjgsIDY4LCA3MywgNjksIDgzLCA3MywgODMsIAorICAgIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MywgNjksIDgwLCAxMjgsIDY4LCA3MywgMTk3LCA2OCwgNzMsIAorICAgIDY2LCAxMjgsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDc5LCAyMDYsIDY4LCA3MywgNjUsIDg0LCA3OSwgNzgsIDczLCA3NSwgCisgICAgMjAxLCA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgMjAxLCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgODMsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgNjgsIDEyOCwgNjgsIDczLCA2NSwgNzcsIDc5LCA3OCwgMTk2LCA2OCwgCisgICAgNzMsIDY1LCA3NywgNjksIDg0LCA2OSwgMjEwLCA2OCwgNzMsIDY1LCA3NiwgODksIDg0LCA3MywgNzUsIDY1LCAxMjgsIDY4LCAKKyAgICA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgMTkzLCA2OCwgNzMsIDY1LCA3NiwgNjksIDY3LCA4NCwgNDUsIDIwOCwgNjgsIAorICAgIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDc2LCAxMjgsIDY4LCA3MywgNjUsIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgCisgICAgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIDY4LCA3MywgNjUsIDY5LCA4MiwgNjksIDgzLCA3MywgODMsIAorICAgIDEyOCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDY4LCA3MiwgNzksIDg1LCAxMjgsIDY4LCA3MiwgCisgICAgNzksIDc5LCAxMjgsIDY4LCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA4NSwgMTI4LCA2OCwgCisgICAgNzIsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzksIDEyOCwgNjgsIDcyLCA3MiwgNzMsIDEyOCwgNjgsIDcyLCAKKyAgICA3MiwgNjksIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNzIsIDY1LCAxMjgsIDY4LCA3MiwgNjksIAorICAgIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDgyLCA3NywgNjUsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgCisgICAgNjgsIDcyLCA2NSwgNzYsIDY1LCA4NCwgNzIsIDEyOCwgNjgsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDcyLCA2NSwgNjgsIDcyLCAKKyAgICA2OSwgMTI4LCA2OCwgNzIsIDY1LCA2NSwgNzYsIDg1LCAxMjgsIDY4LCA3MiwgNjUsIDEyOCwgNjgsIDY5LCA5MCwgMjAwLCAKKyAgICA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjEzLCA2OCwgNjksIDg5LCA4NCwgNjksIDgyLCA3OSwgMjExLCA2OCwgNjksIAorICAgIDg4LCA3MywgNjUsIDEyOCwgNjgsIDY5LCA4NiwgNzMsIDY3LCAxOTcsIDY4LCA2OSwgODYsIDY5LCA3NiwgNzksIDgwLCA3NywgCisgICAgNjksIDc4LCA4NCwgMTI4LCA2OCwgNjksIDg1LCA3OCwgNzEsIDEyOCwgNjgsIDY5LCA4MywgMjAzLCA2OCwgNjksIDgzLCAKKyAgICA3MywgNzEsIDc4LCAxMjgsIDY4LCA2OSwgODMsIDczLCAxMjgsIDY4LCA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDY4LCA2OSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgCisgICAgNjgsIDY5LCA4MiwgMTI4LCA2OCwgNjksIDgyLCA2OSwgODQsIDQ1LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNjgsIDY5LCAKKyAgICA4MiwgNjksIDg0LCAxMjgsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDg1LCA4MiwgNjksIDEyOCwgNjgsIDY5LCA4MCwgNjUsIAorICAgIDgyLCA4NCwgNzcsIDY5LCA3OCwgMjEyLCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCA3MywgNzgsIDE5OSwgNjgsIDY5LCA3OCwgCisgICAgODQsIDczLCA4MywgODQsIDgyLCAyMTcsIDY4LCA2OSwgNzgsIDg0LCA2NSwgMjA0LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCAKKyAgICA3OCwgNjUsIDg0LCA3OSwgODIsIDEyOCwgNjgsIDY5LCA3OCwgNzksIDc3LCA3MywgNzgsIDY1LCA4NCwgNzksIDIxMCwgNjgsIAorICAgIDY5LCA3OCwgNzgsIDY5LCA3OCwgMTI4LCA2OCwgNjksIDc4LCA3MSwgMTI4LCA2OCwgNjksIDc4LCAxOTcsIDY4LCA2OSwgCisgICAgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDY4LCA2OSwgNzYsIDg0LCA2NSwgMTI4LCA2OCwgNjksIDc2LCA4NCwgMTkzLCAKKyAgICA2OCwgNjksIDc2LCA4NCwgMTI4LCA2OCwgNjksIDc2LCA4MCwgNzIsIDczLCAxOTUsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIAorICAgIDgyLCAyMTcsIDY4LCA2OSwgNzYsIDczLCA4NiwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA3MywgCisgICAgNzcsIDczLCA4NCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMjEwLCA2OCwgNjksIDc2LCAKKyAgICA3MywgNjcsIDczLCA3OSwgODUsIDIxMSwgNjgsIDY5LCA3NiwgNjksIDg0LCA2OSwgMTI4LCA2OCwgNjksIDc2LCA2OSwgODQsIAorICAgIDE5NywgNjgsIDY5LCA3NSwgNjUsIDEyOCwgNjgsIDY5LCA3NSwgMTI4LCA2OCwgNjksIDczLCAxMjgsIDY4LCA2OSwgNzIsIAorICAgIDczLCAxMjgsIDY4LCA2OSwgNzEsIDgyLCA2OSwgMTk3LCA2OCwgNjksIDcwLCA3MywgNzgsIDczLCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA2OCwgNjksIDcwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCA3OCwgNjksIDgzLCAyMTEsIDY4LCA2OSwgNjksIDgyLCAKKyAgICAxMjgsIDY4LCA2OSwgNjksIDgwLCA3NiwgODksIDEyOCwgNjgsIDY5LCA2OSwgNzYsIDEyOCwgNjgsIDY5LCA2NywgODIsIAorICAgIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDc5LCAxMjgsIDY4LCA2OSwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA2OCwgCisgICAgNjksIDY3LCA3OSwgODIsIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY4LCA2OSwgNjcsIDc5LCA4MiwgNjUsIDg0LCA3MywgNzksIAorICAgIDc4LCAxMjgsIDY4LCA2OSwgNjcsIDczLCA4MywgNzMsIDg2LCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjgsIDY5LCA2NywgCisgICAgNzMsIDc3LCA2NSwgMjA0LCA2OCwgNjksIDY3LCA3MywgNjgsIDg1LCA3OSwgODUsIDIxMSwgNjgsIDY5LCA2NywgNjksIDc3LCAKKyAgICA2NiwgNjksIDgyLCAxMjgsIDY4LCA2OSwgNjcsIDY1LCA4OSwgNjksIDY4LCAxMjgsIDY4LCA2OSwgNjYsIDczLCAyMTIsIAorICAgIDY4LCA2OSwgNjUsIDg0LCA3MiwgMTI4LCA2OCwgNjksIDY1LCA2OCwgMTI4LCA2OCwgNjgsIDg3LCA2NSwgMTI4LCA2OCwgCisgICAgNjgsIDg1LCA4OCwgMTI4LCA2OCwgNjgsIDg1LCA4NCwgMTI4LCA2OCwgNjgsIDg1LCA4MiwgODgsIDEyOCwgNjgsIDY4LCAKKyAgICA4NSwgODIsIDEyOCwgNjgsIDY4LCA4NSwgODAsIDEyOCwgNjgsIDY4LCA4NSwgNzksIDg4LCAxMjgsIDY4LCA2OCwgODUsIAorICAgIDc5LCA4MCwgMTI4LCA2OCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgNjgsIDg1LCAxMjgsIDY4LCA2OCwgNzksIDg4LCAxMjgsIAorICAgIDY4LCA2OCwgNzksIDg0LCAxMjgsIDY4LCA2OCwgNzksIDgwLCAxMjgsIDY4LCA2OCwgNzksIDY1LCAxMjgsIDY4LCA2OCwgCisgICAgNzMsIDg4LCAxMjgsIDY4LCA2OCwgNzMsIDg0LCAxMjgsIDY4LCA2OCwgNzMsIDgwLCAxMjgsIDY4LCA2OCwgNzMsIDY5LCAKKyAgICA4OCwgMTI4LCA2OCwgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDY4LCA3MywgNjksIDEyOCwgNjgsIDY4LCA3MywgMTI4LCAKKyAgICA2OCwgNjgsIDcyLCA4NSwgMTI4LCA2OCwgNjgsIDcyLCA3OSwgMTI4LCA2OCwgNjgsIDcyLCA3MywgMTI4LCA2OCwgNjgsIAorICAgIDcyLCA2OSwgNjksIDEyOCwgNjgsIDY4LCA3MiwgNjksIDEyOCwgNjgsIDY4LCA3MiwgNjUsIDY1LCAxMjgsIDY4LCA2OCwgCisgICAgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjksIDg4LCAxMjgsIDY4LCA2OCwgNjksIDgwLCAxMjgsIDY4LCA2OCwgNjksIDY5LCAKKyAgICAxMjgsIDY4LCA2OCwgNjksIDEyOCwgNjgsIDY4LCA2OCwgNzIsIDY1LCAxMjgsIDY4LCA2OCwgNjgsIDY1LCAxMjgsIDY4LCAKKyAgICA2OCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2OCwgNjgsIDY1LCA4OCwgMTI4LCA2OCwgNjgsIDY1LCA4NCwgCisgICAgMTI4LCA2OCwgNjgsIDY1LCA4MCwgMTI4LCA2OCwgNjgsIDY1LCA3NiwgMTI4LCA2OCwgNjgsIDY1LCAyMDQsIDY4LCA2OCwgCisgICAgNjUsIDcyLCA2NSwgNzYsIDEyOCwgNjgsIDY4LCA2NSwgNzIsIDY1LCAyMDQsIDY4LCA2OCwgNjUsIDY1LCAxMjgsIDY4LCAKKyAgICAxOTQsIDY4LCA2NSwgODksIDQ1LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNjgsIDY1LCAyMTcsIDY4LCA2NSwgODYsIAorICAgIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2OCwgNjUsIDg2LCA3MywgNjgsIDEyOCwgNjgsIDY1LCA4NCwgMTk3LCA2OCwgCisgICAgNjUsIDgzLCA3MywgNjUsIDEyOCwgNjgsIDY1LCA4MywgNzIsIDY5LCAxOTYsIDY4LCA2NSwgODMsIDcyLCAxMjgsIDY4LCAKKyAgICA2NSwgODMsIDIwMCwgNjgsIDY1LCA4MywgNjksIDczLCA2NSwgMTI4LCA2OCwgNjUsIDgyLCA4NCwgMTI4LCA2OCwgNjUsIAorICAgIDgyLCA3NSwgNjksIDc4LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA2NSwgODIsIDc1LCA2OSwgNzgsIDczLCA3OCwgMTk5LCA2OCwgCisgICAgNjUsIDgyLCAyMDMsIDY4LCA2NSwgODIsIDcxLCA2NSwgMTI4LCA2OCwgNjUsIDgyLCA2NSwgNTIsIDEyOCwgNjgsIDY1LCAKKyAgICA4MiwgNjUsIDUxLCAxMjgsIDY4LCA2NSwgODIsIDEyOCwgNjgsIDY1LCA4MCwgNDUsIDgwLCA4MiwgNjUsIDIwNSwgNjgsIAorICAgIDY1LCA4MCwgNDUsIDgwLCA3MywgMjAxLCA2OCwgNjUsIDgwLCA0NSwgNzcsIDg1LCA3OSwgMjE3LCA2OCwgNjUsIDgwLCA0NSwgCisgICAgNjYsIDg1LCA3OSwgMjA2LCA2OCwgNjUsIDgwLCA0NSwgNjYsIDY5LCAyMDEsIDY4LCA2NSwgMjA4LCA2OCwgNjUsIDc4LCAKKyAgICA4NCwgNjUsIDc0LCAxOTMsIDY4LCA2NSwgNzgsIDcxLCA3OSwgMTI4LCA2OCwgNjUsIDc4LCA3MSwgMTI4LCA2OCwgNjUsIAorICAgIDc4LCAxOTksIDY4LCA2NSwgNzgsIDY4LCA2NSwgMTI4LCA2OCwgNjUsIDc4LCA2NywgNjksIDgyLCAxMjgsIDY4LCA2NSwgCisgICAgNzcsIDgwLCAxMjgsIDY4LCA2NSwgNzcsIDIwOCwgNjgsIDY1LCA3NywgNzcsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIDY4LCAKKyAgICA2NSwgNzcsIDc3LCA2NSwgODQsIDY1LCAyMDYsIDY4LCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA2OCwgNjUsIDc3LCA3NywgCisgICAgMTkzLCA2OCwgNjUsIDc3LCA2NSwgODIsIDg1LCAxMjgsIDY4LCA2NSwgNzYsIDY5LCA4NCwgNzIsIDEyOCwgNjgsIDY1LCAKKyAgICA3NiwgNjksIDg0LCAxMjgsIDY4LCA2NSwgNzYsIDY5LCAyMTIsIDY4LCA2NSwgNzYsIDY4LCA2NSwgMTI4LCA2OCwgNjUsIAorICAgIDc2LCA2NSwgODQsIDcyLCAxMjgsIDY4LCA2NSwgNzYsIDY1LCA4NCwgMjAwLCA2OCwgNjUsIDc2LCA2NSwgODQsIDEyOCwgCisgICAgNjgsIDY1LCA3MywgODIsIDEyOCwgNjgsIDY1LCA3MywgNzgsIDcxLCAxMjgsIDY4LCA2NSwgNzIsIDg5LCA2NSwgNjUsIDg1LCAKKyAgICA4MywgNzIsIDQ1LCA1MCwgMTI4LCA2OCwgNjUsIDcyLCA4OSwgNjUsIDY1LCA4NSwgODMsIDcyLCAxMjgsIDY4LCA2NSwgNzEsIAorICAgIDgzLCAxMjgsIDY4LCA2NSwgNzEsIDcxLCA2OSwgODIsIDEyOCwgNjgsIDY1LCA3MSwgNjksIDgzLCA3MiwgMTI4LCA2OCwgCisgICAgNjUsIDcxLCA2OSwgODMsIDIwMCwgNjgsIDY1LCA3MSwgNjYsIDY1LCA4MywgNzMsIDc4LCA3OCwgNjUsIDEyOCwgNjgsIDY1LCAKKyAgICA3MSwgNjUsIDIxOCwgNjgsIDY1LCA3MSwgNjUsIDc2LCA3MSwgNjUsIDEyOCwgNjgsIDY1LCAxOTksIDY4LCA2NSwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA2OCwgNjUsIDY5LCAxOTksIDY4LCA2NSwgNjgsIDEyOCwgNjgsIDY1LCAxOTYsIDY4LCA2NSwgNjUsIAorICAgIDgzLCA4NSwgMTI4LCA2OCwgNjUsIDY1LCA2OCwgNzIsIDg1LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA3MiwgMTI4LCA2OCwgCisgICAgNDgsIDU0LCA1NSwgNzEsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDcwLCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA2OSwgMTI4LCAKKyAgICA2OCwgNDgsIDU0LCA1NSwgNjgsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDY3LCAxMjgsIDY4LCA0OCwgNTQsIDU1LCA2NiwgCisgICAgMTI4LCA2OCwgNDgsIDU0LCA1NSwgNjUsIDEyOCwgNjgsIDQ4LCA1NCwgNTUsIDEyOCwgNjgsIDQ4LCA1NCwgNTQsIDEyOCwgCisgICAgNjgsIDQ4LCA1NCwgNTMsIDEyOCwgNjgsIDQ4LCA1NCwgNTIsIDEyOCwgNjgsIDQ4LCA1NCwgNTEsIDEyOCwgNjgsIDQ4LCAKKyAgICA1NCwgNTAsIDEyOCwgNjgsIDQ4LCA1NCwgNDksIDEyOCwgNjgsIDQ4LCA1NCwgNDgsIDEyOCwgNjgsIDQ4LCA1MywgNTcsIAorICAgIDEyOCwgNjgsIDQ4LCA1MywgNTYsIDEyOCwgNjgsIDQ4LCA1MywgNTUsIDEyOCwgNjgsIDQ4LCA1MywgNTQsIDEyOCwgNjgsIAorICAgIDQ4LCA1MywgNTMsIDEyOCwgNjgsIDQ4LCA1MywgNTIsIDY1LCAxMjgsIDY4LCA0OCwgNTMsIDUyLCAxMjgsIDY4LCA0OCwgCisgICAgNTMsIDUxLCAxMjgsIDY4LCA0OCwgNTMsIDUwLCA2NSwgMTI4LCA2OCwgNDgsIDUzLCA1MCwgMTI4LCA2OCwgNDgsIDUzLCAKKyAgICA0OSwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNzMsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDcyLCAxMjgsIDY4LCA0OCwgNTMsIAorICAgIDQ4LCA3MSwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNzAsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY5LCAxMjgsIDY4LCA0OCwgCisgICAgNTMsIDQ4LCA2OCwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgNjcsIDEyOCwgNjgsIDQ4LCA1MywgNDgsIDY2LCAxMjgsIDY4LCAKKyAgICA0OCwgNTMsIDQ4LCA2NSwgMTI4LCA2OCwgNDgsIDUzLCA0OCwgMTI4LCA2OCwgNDgsIDUyLCA1NywgMTI4LCA2OCwgNDgsIAorICAgIDUyLCA1NiwgNjUsIDEyOCwgNjgsIDQ4LCA1MiwgNTYsIDEyOCwgNjgsIDQ4LCA1MiwgNTUsIDEyOCwgNjgsIDQ4LCA1MiwgCisgICAgNTQsIDY1LCAxMjgsIDY4LCA0OCwgNTIsIDU0LCAxMjgsIDY4LCA0OCwgNTIsIDUzLCAxMjgsIDY4LCA0OCwgNTIsIDUyLCAKKyAgICAxMjgsIDY4LCA0OCwgNTIsIDUxLCAxMjgsIDY4LCA0OCwgNTIsIDUwLCAxMjgsIDY4LCA0OCwgNTIsIDQ5LCAxMjgsIDY4LCAKKyAgICA0OCwgNTIsIDQ4LCAxMjgsIDY4LCA0OCwgNTEsIDU3LCAxMjgsIDY4LCA0OCwgNTEsIDU2LCAxMjgsIDY4LCA0OCwgNTEsIAorICAgIDU1LCAxMjgsIDY4LCA0OCwgNTEsIDU0LCAxMjgsIDY4LCA0OCwgNTEsIDUzLCAxMjgsIDY4LCA0OCwgNTEsIDUyLCA2NSwgCisgICAgMTI4LCA2OCwgNDgsIDUxLCA1MiwgMTI4LCA2OCwgNDgsIDUxLCA1MSwgMTI4LCA2OCwgNDgsIDUxLCA1MCwgMTI4LCA2OCwgCisgICAgNDgsIDUxLCA0OSwgNjUsIDEyOCwgNjgsIDQ4LCA1MSwgNDksIDEyOCwgNjgsIDQ4LCA1MSwgNDgsIDEyOCwgNjgsIDQ4LCAKKyAgICA1MCwgNTcsIDEyOCwgNjgsIDQ4LCA1MCwgNTYsIDEyOCwgNjgsIDQ4LCA1MCwgNTUsIDY1LCAxMjgsIDY4LCA0OCwgNTAsIAorICAgIDU1LCAxMjgsIDY4LCA0OCwgNTAsIDU0LCAxMjgsIDY4LCA0OCwgNTAsIDUzLCAxMjgsIDY4LCA0OCwgNTAsIDUyLCAxMjgsIAorICAgIDY4LCA0OCwgNTAsIDUxLCAxMjgsIDY4LCA0OCwgNTAsIDUwLCAxMjgsIDY4LCA0OCwgNTAsIDQ5LCAxMjgsIDY4LCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDY4LCA0OCwgNDksIDU3LCAxMjgsIDY4LCA0OCwgNDksIDU2LCAxMjgsIDY4LCA0OCwgNDksIDU1LCAKKyAgICAxMjgsIDY4LCA0OCwgNDksIDU0LCAxMjgsIDY4LCA0OCwgNDksIDUzLCAxMjgsIDY4LCA0OCwgNDksIDUyLCAxMjgsIDY4LCAKKyAgICA0OCwgNDksIDUxLCAxMjgsIDY4LCA0OCwgNDksIDUwLCAxMjgsIDY4LCA0OCwgNDksIDQ5LCAxMjgsIDY4LCA0OCwgNDksIAorICAgIDQ4LCAxMjgsIDY4LCA0OCwgNDgsIDU3LCAxMjgsIDY4LCA0OCwgNDgsIDU2LCA2NSwgMTI4LCA2OCwgNDgsIDQ4LCA1NiwgCisgICAgMTI4LCA2OCwgNDgsIDQ4LCA1NSwgMTI4LCA2OCwgNDgsIDQ4LCA1NCwgMTI4LCA2OCwgNDgsIDQ4LCA1MywgMTI4LCA2OCwgCisgICAgNDgsIDQ4LCA1MiwgMTI4LCA2OCwgNDgsIDQ4LCA1MSwgMTI4LCA2OCwgNDgsIDQ4LCA1MCwgMTI4LCA2OCwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA2NywgODksIDg4LCAxMjgsIDY3LCA4OSwgODQsIDEyOCwgNjcsIDg5LCA4MiwgODgsIDEyOCwgNjcsIDg5LCAKKyAgICA4MiwgNjksIDc4LCA2NSwgNzMsIDE5NSwgNjcsIDg5LCA4MiwgMTI4LCA2NywgODksIDgwLCA4MiwgNzMsIDc5LCAyMTIsIAorICAgIDY3LCA4OSwgODAsIDY5LCA4MiwgODUsIDgzLCAxMjgsIDY3LCA4OSwgODAsIDEyOCwgNjcsIDg5LCA3NiwgNzMsIDc4LCA2OCwgCisgICAgODIsIDczLCA2NywgNzMsIDg0LCA4OSwgMTI4LCA2NywgODksIDY3LCA3NiwgNzksIDc4LCA2OSwgMTI4LCA2NywgODksIDY1LCAKKyAgICAxMjgsIDY3LCA4OSwgMTI4LCA2NywgODcsIDc5LCA3OSwgMTI4LCA2NywgODcsIDc5LCAxMjgsIDY3LCA4NywgNzMsIDczLCAKKyAgICAxMjgsIDY3LCA4NywgNzMsIDEyOCwgNjcsIDg3LCA2OSwgNzksIDgyLCA4NCwgNzIsIDEyOCwgNjcsIDg3LCA2OSwgMTI4LCAKKyAgICA2NywgODcsIDY1LCA2NSwgMTI4LCA2NywgODUsIDg4LCAxMjgsIDY3LCA4NSwgMjEyLCA2NywgODUsIDgzLCA4NCwgNzksIAorICAgIDc3LCA4MywgMTI4LCA2NywgODUsIDgzLCA4NCwgNzksIDc3LCA2OSwgMjEwLCA2NywgODUsIDgzLCA4NCwgNjUsIDgyLCA2OCwgCisgICAgMTI4LCA2NywgODUsIDgyLCA4OCwgMTI4LCA2NywgODUsIDgyLCA4NiwgNzMsIDc4LCAxOTksIDY3LCA4NSwgODIsIDg2LCAKKyAgICA2OSwgMTk2LCA2NywgODUsIDgyLCA4NiwgNjksIDEyOCwgNjcsIDg1LCA4MiwgODYsIDE5NywgNjcsIDg1LCA4MiwgODIsIAorICAgIDIxNywgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgODQsIDEyOCwgNjcsIDg1LCA4MiwgODIsIDY5LCA3OCwgMjEyLCA2NywgCisgICAgODUsIDgyLCA3NiwgMjE3LCA2NywgODUsIDgyLCA3NiwgMTI4LCA2NywgODUsIDgyLCAxMjgsIDY3LCA4NSwgODAsIDEyOCwgCisgICAgNjcsIDg1LCA3OSwgODgsIDEyOCwgNjcsIDg1LCA3OSwgODAsIDEyOCwgNjcsIDg1LCA3OSwgMTI4LCA2NywgODUsIDIwNSwgCisgICAgNjcsIDg1LCA2NiwgNjksIDY4LCAxMjgsIDY3LCA4NSwgNjYsIDE5NywgNjcsIDg1LCA2NSwgODQsIDgyLCA3MywgNzYsIDc2LCAKKyAgICA3OSwgMTI4LCA2NywgODUsIDY1LCA4NCwgODIsIDczLCA3NiwgNzYsIDIwNywgNjcsIDg1LCAxMjgsIDY3LCA4MiwgODksIAorICAgIDgzLCA4NCwgNjUsIDIwNCwgNjcsIDgyLCA4OSwgODAsIDg0LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3MywgMTk1LCA2NywgCisgICAgODIsIDg5LCA3MywgNzgsIDE5OSwgNjcsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDIwNywgNjcsIDgyLCA4NSwgNjcsIDczLCAKKyAgICA2NiwgNzYsIDY5LCA0NSwgNTMsIDEyOCwgNjcsIDgyLCA4NSwgNjcsIDczLCA2NiwgNzYsIDY5LCA0NSwgNTIsIDEyOCwgNjcsIAorICAgIDgyLCA4NSwgNjcsIDczLCA2NiwgNzYsIDY5LCA0NSwgNTEsIDEyOCwgNjcsIDgyLCA4NSwgNjcsIDczLCA2NiwgNzYsIDY5LCAKKyAgICA0NSwgNTAsIDEyOCwgNjcsIDgyLCA4NSwgNjcsIDczLCA2NiwgNzYsIDY5LCAxMjgsIDY3LCA4MiwgNzksIDg3LCA3OCwgCisgICAgMTI4LCA2NywgODIsIDc5LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDgzLCA3MywgNzgsIAorICAgIDE5OSwgNjcsIDgyLCA3OSwgODMsIDgzLCA3MiwgNjUsIDg0LCA2NywgMjAwLCA2NywgODIsIDc5LCA4MywgODMsIDY5LCA2OCwgCisgICAgNDUsIDg0LCA2NSwgNzMsIDc2LCAxMjgsIDY3LCA4MiwgNzksIDgzLCA4MywgNjksIDE5NiwgNjcsIDgyLCA3OSwgODMsIDgzLCAKKyAgICA2NiwgNzksIDc4LCA2OSwgODMsIDEyOCwgNjcsIDgyLCA3OSwgODMsIDgzLCAxMjgsIDY3LCA4MiwgNzksIDgzLCAyMTEsIAorICAgIDY3LCA4MiwgNzksIDgwLCAxMjgsIDY3LCA4MiwgNzksIDczLCA4OCwgMTI4LCA2NywgODIsIDc5LCA2NywgODUsIDIxMSwgCisgICAgNjcsIDgyLCA3OSwgNjcsIDc5LCA2OCwgNzMsIDc2LCA2OSwgMTI4LCA2NywgODIsIDY5LCA4MywgNjcsIDY5LCA3OCwgODQsIAogICAgIDEyOCwgNjcsIDgyLCA2OSwgODMsIDY3LCA2OSwgNzgsIDIxMiwgNjcsIDgyLCA2OSwgNjgsIDczLCAyMTIsIDY3LCA4MiwgCi0gICAgNjksIDY1LCA4NCwgNzMsIDg2LCAxOTcsIDY3LCA3OSwgODgsIDEyOCwgNjcsIDc5LCA4NywgMTI4LCA2NywgNzksIDg2LCAKLSAgICA2OSwgODIsIDEyOCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA3MywgNzgsIDE5OSwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIAotICAgIDgzLCA3MywgNzgsIDc1LCAxMjgsIDY3LCA3OSwgODUsIDc4LCA4NCwgNjksIDgyLCA2NiwgNzksIDgyLCA2OSwgMTI4LCA2NywgCi0gICAgNzksIDg1LCA3OCwgNjcsIDczLCAyMDQsIDY3LCA3OSwgODQsIDEyOCwgNjcsIDc5LCA4MiwgODIsIDY5LCA4MywgODAsIDc5LCAKLSAgICA3OCwgNjgsIDIxMSwgNjcsIDc5LCA4MiwgODIsIDY5LCA2NywgODQsIDEyOCwgNjcsIDc5LCA4MiwgODAsIDgzLCA2OSwgCi0gICAgMTI4LCA2NywgNzksIDgyLCA4MCwgNzksIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIDc5LCA4MiwgNzksIDc4LCAKLSAgICA3MywgODMsIDEyOCwgNjcsIDc5LCA4MiwgNzgsIDY5LCA4MiwgODMsIDEyOCwgNjcsIDc5LCA4MiwgNzgsIDY5LCA4MiwgCi0gICAgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDIxMCwgNjcsIDc5LCA4MCwgODksIDgyLCA3MywgNzEsIDcyLCA4NCwgMTI4LCAKLSAgICA2NywgNzksIDgwLCA4OSwgODIsIDczLCA3MSwgNzIsIDIxMiwgNjcsIDc5LCA4MCwgODksIDEyOCwgNjcsIDc5LCA4MCwgODIsIAotICAgIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA2NywgNzksIDgwLCAxMjgsIDY3LCA3OSwgNzksIDEyOCwgNjcsIDc5LCA3OCwgCi0gICAgODQsIDgyLCA3OSwgMjA0LCA2NywgNzksIDc4LCA4NCwgODIsIDY1LCA4MiwgNzMsIDY5LCA4NCwgODksIDEyOCwgNjcsIDc5LCAKLSAgICA3OCwgODQsIDgyLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA3OSwgODUsIDgyLCA2OSwgCi0gICAgMTk2LCA2NywgNzksIDc4LCA4NCwgNzksIDg1LCAyMTAsIDY3LCA3OSwgNzgsIDg0LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY3LCA3OSwgNzgsIDg0LCA2OSwgNzcsIDgwLCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIAotICAgIDg0LCA2NSwgNzMsIDc4LCAyMTEsIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDc4LCA3MywgNzgsIDE5OSwgNjcsIDc5LCA3OCwgCi0gICAgODQsIDY1LCA3MywgMjA2LCA2NywgNzksIDc4LCA4NCwgNjUsIDY3LCA4NCwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCAKKyAgICA2OSwgNjUsIDg0LCA3MywgODYsIDE5NywgNjcsIDgyLCA2OSwgNjUsIDc3LCAxMjgsIDY3LCA4MiwgNjUsIDY3LCA3NSwgNjksIAorICAgIDgyLCAxMjgsIDY3LCA3OSwgODgsIDEyOCwgNjcsIDc5LCA4NywgMTI4LCA2NywgNzksIDIxNSwgNjcsIDc5LCA4NiwgNjksIAorICAgIDgyLCAxMjgsIDY3LCA3OSwgODUsIDgwLCA3NiwgMTk3LCA2NywgNzksIDg1LCA3OCwgODQsIDczLCA3OCwgMTk5LCA2NywgCisgICAgNzksIDg1LCA3OCwgODQsIDY5LCA4MiwgODMsIDczLCA3OCwgNzUsIDEyOCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIAorICAgIDY2LCA3OSwgODIsIDY5LCAxMjgsIDY3LCA3OSwgODUsIDc4LCA2NywgNzMsIDIwNCwgNjcsIDc5LCA4NCwgMTI4LCA2NywgCisgICAgNzksIDgyLCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCA2OCwgMjExLCA2NywgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgMTI4LCAKKyAgICA2NywgNzksIDgyLCA4MCwgODMsIDY5LCAxMjgsIDY3LCA3OSwgODIsIDgwLCA3OSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA2NywgNzksIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA2NywgNzksIDgyLCA3OCwgNjksIDgyLCA4MywgMTI4LCAKKyAgICA2NywgNzksIDgyLCA3OCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgODIsIDc4LCA2OSwgMjEwLCA2NywgNzksIDgwLCA4OSwgODIsIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDY3LCA3OSwgODAsIDg5LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCA2NywgNzksIDgwLCA4OSwgCisgICAgMTI4LCA2NywgNzksIDgwLCA4MiwgNzksIDY4LCA4NSwgNjcsIDg0LCAxMjgsIDY3LCA3OSwgODAsIDgwLCA2OSwgODIsIDQ1LCAKKyAgICA1MCwgMTI4LCA2NywgNzksIDgwLCA4MCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgODAsIDEyOCwgNjcsIDc5LCA3OSwgNzYsIAorICAgIDEyOCwgNjcsIDc5LCA3OSwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNjcsIDc5LCA3OSwgNzUsIDczLCA2OSwgMTI4LCA2NywgCisgICAgNzksIDc5LCA3NSwgNjksIDE5NiwgNjcsIDc5LCA3OSwgMTI4LCA2NywgNzksIDc4LCA4NiwgNjksIDgyLCA3MSwgNzMsIDc4LCAKKyAgICAxOTksIDY3LCA3OSwgNzgsIDg2LCA2OSwgNzgsIDczLCA2OSwgNzgsIDY3LCAxOTcsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNzksIAorICAgIDc2LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNzksIDIwNCwgNjcsIDc5LCA3OCwgODQsIDgyLCA2NSwgODIsIDczLCA2OSwgCisgICAgODQsIDg5LCAxMjgsIDY3LCA3OSwgNzgsIDg0LCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCAKKyAgICA4NCwgNzksIDg1LCA4MiwgNjksIDE5NiwgNjcsIDc5LCA3OCwgODQsIDc5LCA4NSwgMjEwLCA2NywgNzksIDc4LCA4NCwgNjksIAorICAgIDc4LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNjksIDc3LCA4MCwgNzYsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICA3OCwgMTI4LCA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgMjExLCA2NywgNzksIDc4LCA4NCwgNjUsIDczLCA3OCwgNzMsIAorICAgIDc4LCAxOTksIDY3LCA3OSwgNzgsIDg0LCA2NSwgNzMsIDIwNiwgNjcsIDc5LCA3OCwgODQsIDY1LCA2NywgODQsIDEyOCwgCisgICAgNjcsIDc5LCA3OCwgODMsIDg0LCA4MiwgODUsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3OSwgNzgsIDgzLCA4NCwgNjUsIAogICAgIDc4LCA4NCwgMTI4LCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgMjEyLCA2NywgNzksIDc4LCA4MywgODQsIDY1LCA3OCwgCiAgICAgNjcsIDg5LCAxMjgsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgMjEyLCA2NywgNzksIDc4LCA4MywgNjksIDY3LCAKICAgICA4NSwgODQsIDczLCA4NiwgMTk3LCA2NywgNzksIDc4LCA3NCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNjcsIAogICAgIDc5LCA3OCwgNzQsIDg1LCA3MSwgNjUsIDg0LCAxOTcsIDY3LCA3OSwgNzgsIDc0LCA3OSwgNzMsIDc4LCA3MywgNzgsIDE5OSwgCiAgICAgNjcsIDc5LCA3OCwgNzMsIDY3LCA2NSwgMjA0LCA2NywgNzksIDc4LCA3MSwgODIsIDg1LCA2OSwgNzgsIDIxMiwgNjcsIDc5LCAKLSAgICA3OCwgNzEsIDgyLCA2NSwgODQsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDcwLCA3NiwgCi0gICAgNzMsIDY3LCA4NCwgMTI4LCA2NywgNzksIDc4LCA2NywgNjUsIDg2LCA2OSwgNDUsIDgzLCA3MywgNjgsIDY5LCAxOTYsIDY3LCAKKyAgICA3OCwgNzEsIDgyLCA2NSwgODQsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzgsIDcwLCA3OSwgCisgICAgODUsIDc4LCA2OCwgNjksIDE5NiwgNjcsIDc5LCA3OCwgNzAsIDc2LCA3MywgNjcsIDg0LCAxMjgsIDY3LCA3OSwgNzgsIDcwLCAKKyAgICA2OSwgODQsIDg0LCAyMDEsIDY3LCA3OSwgNzgsIDY3LCA2NSwgODYsIDY5LCA0NSwgODMsIDczLCA2OCwgNjksIDE5NiwgNjcsIAogICAgIDc5LCA3OCwgNjcsIDY1LCA4NiwgNjksIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY3LCA3OSwgNzgsIDEyOCwgCi0gICAgNjcsIDc5LCA3NywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3OSwgODMsIAotICAgIDczLCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY3LCA3OSwgCi0gICAgNzcsIDgwLCA3NiwgNjksIDg0LCA3MywgNzksIDc4LCAxMjgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCA2OSwgNjgsIAotICAgIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjcsIDc5LCA3NywgODAsIDY1LCA4MiwgCi0gICAgNjksIDEyOCwgNjcsIDc5LCA3NywgNzcsIDc5LCAyMDYsIDY3LCA3OSwgNzcsIDc3LCA2OSwgODIsIDY3LCA3MywgNjUsIAotICAgIDIwNCwgNjcsIDc5LCA3NywgNzcsIDY1LCAxMjgsIDY3LCA3OSwgNzcsIDc3LCAxOTMsIDY3LCA3OSwgNzcsIDczLCA3OCwgCi0gICAgMTk5LCA2NywgNzksIDc3LCA2OSwgODQsIDEyOCwgNjcsIDc5LCA3NywgNjYsIDEyOCwgNjcsIDc5LCA3NiwgODUsIDc3LCAKLSAgICA3OCwgMTI4LCA2NywgNzksIDc2LCA3OSwgODIsIDEyOCwgNjcsIDc5LCA3NiwgNzYsIDEyOCwgNjcsIDc5LCA3MCwgNzAsIAotICAgIDczLCA3OCwgMTI4LCA2NywgNzksIDY5LCA3OCwgNzEsIDEyOCwgNjcsIDc5LCA2OCwgNjUsIDEyOCwgNjcsIDc5LCA2NSwgCi0gICAgMTI4LCA2NywgNzksIDEyOCwgNjcsIDc3LCAxMjgsIDY3LCAyMDUsIDY3LCA3NiwgODUsIDgzLCA4NCwgNjksIDIxMCwgNjcsIAotICAgIDc2LCA4NSwgNjYsIDQ1LCA4MywgODAsIDc5LCA3NSwgNjksIDE5NiwgNjcsIDc2LCA4NSwgNjYsIDEyOCwgNjcsIDc2LCA4NSwgCi0gICAgMTk0LCA2NywgNzYsIDc5LCA4NSwgNjgsIDEyOCwgNjcsIDc2LCA3OSwgODQsIDcyLCA2OSwgODMsIDEyOCwgNjcsIDc2LCAKLSAgICA3OSwgODQsIDcyLCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjcsIDc2LCA3OSwgODMsIAotICAgIDY5LCA2OCwgMTI4LCA2NywgNzYsIDc5LCA4MywgNjksIDE5NiwgNjcsIDc2LCA3OSwgODMsIDE5NywgNjcsIDc2LCA3OSwgCi0gICAgNjcsIDc1LCA4NywgNzMsIDgzLCAxOTcsIDY3LCA3NiwgNzMsIDg2LCA3MywgODMsIDEyOCwgNjcsIDc2LCA3MywgNzgsIDcxLCAKLSAgICA3MywgNzgsIDE5OSwgNjcsIDc2LCA3MywgNzcsIDY1LCA2NywgODUsIDgzLCAxMjgsIDY3LCA3NiwgNzMsIDcwLCA3MCwgCi0gICAgMTI4LCA2NywgNzYsIDczLCA2NywgNzUsIDEyOCwgNjcsIDc2LCA2OSwgNzAsIDQ1LCA1MCwgMTI4LCA2NywgNzYsIDY5LCAKLSAgICA3MCwgNDUsIDQ5LCAxMjgsIDY3LCA3NiwgNjksIDcwLCAxMjgsIDY3LCA3NiwgNjksIDE5OCwgNjcsIDc2LCA2OSwgNjUsIAotICAgIDIxMCwgNjcsIDc2LCA2NSwgODcsIDEyOCwgNjcsIDc2LCA2NSwgNzgsIDEyOCwgNjcsIDczLCA4OCwgMTI4LCA2NywgNzMsIAotICAgIDg2LCA3MywgNzYsIDczLCA2NSwgNzgsIDEyOCwgNjcsIDczLCA4NCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCA3MCwgCi0gICAgNzYsIDY5LCA4OCwgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDc3LCA3MCwgNzYsIDY5LCAyMTYsIDY3LCA3MywgODIsIDY3LCAKLSAgICA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA3MywgODIsIDY3LCA3NiwgNjksIDgzLCAxMjgsIDY3LCA3MywgODIsIAotICAgIDY3LCA3NiwgNjksIDEyOCwgNjcsIDczLCA4MCwgMTI4LCA2NywgNzMsIDczLCAxMjgsIDY3LCA3MywgNjksIDg4LCAxMjgsIAotICAgIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2NywgNzMsIDY5LCA4NSwgMTk1LCA2NywgCi0gICAgNzMsIDY5LCA4NCwgMTI4LCA2NywgNzMsIDY5LCA4MCwgMTI4LCA2NywgNzMsIDY5LCAxMjgsIDY3LCA3MywgMTI4LCA2NywgCi0gICAgNzIsIDg5LCA4OCwgMTI4LCA2NywgNzIsIDg5LCA4NCwgMTI4LCA2NywgNzIsIDg5LCA4MiwgODgsIDEyOCwgNjcsIDcyLCAKLSAgICA4OSwgODIsIDEyOCwgNjcsIDcyLCA4OSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgODgsIDEyOCwgNjcsIDcyLCA4NSwgODIsIAotICAgIDg4LCAxMjgsIDY3LCA3MiwgODUsIDgyLCA2NywgNzIsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDEyOCwgNjcsIDcyLCA4NSwgCi0gICAgODAsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDg4LCAxMjgsIDY3LCA3MiwgODUsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDg1LCAKLSAgICA3OSwgODAsIDEyOCwgNjcsIDcyLCA4NSwgNzksIDEyOCwgNjcsIDcyLCA4NSwgNzYsIDY1LCAxMjgsIDY3LCA3MiwgODUsIAotICAgIDEyOCwgNjcsIDcyLCA4MiwgODksIDgzLCA2NSwgNzgsIDg0LCA3MiwgNjksIDc3LCA4NSwgNzcsIDEyOCwgNjcsIDcyLCA4MiwgCi0gICAgNzksIDc4LCA3OSwgODUsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjcsIDcyLCA4MiwgNzksIDc3LCAKLSAgICAxOTMsIDY3LCA3MiwgODIsIDc5LCAxOTMsIDY3LCA3MiwgODIsIDczLCA4NiwgNzMsIDEyOCwgNjcsIDcyLCA3OSwgODgsIAotICAgIDEyOCwgNjcsIDcyLCA3OSwgODQsIDEyOCwgNjcsIDcyLCA3OSwgODIsIDY5LCA4NiwgNzcsIDE5MywgNjcsIDcyLCA3OSwgCi0gICAgODAsIDEyOCwgNjcsIDcyLCA3OSwgNzUsIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY5LCAxMjgsIDY3LCA3MiwgNzksIDY1LCAKLSAgICAxMjgsIDY3LCA3MiwgNzksIDEyOCwgNjcsIDcyLCAyMDcsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgODMsIAotICAgIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCAKLSAgICA4MywgNjUsIDc4LCA3MSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA2NywgCi0gICAgNzIsIDczLCA4MiwgNzksIDc4LCAxMjgsIDY3LCA3MiwgNzMsIDgyLCA2OSwgODQsIDEyOCwgNjcsIDcyLCA3MywgNzgsIDcxLCAKLSAgICAxMjgsIDY3LCA3MiwgNzMsIDc4LCA2OSwgODMsIDE5NywgNjcsIDcyLCA3MywgNzgsIDEyOCwgNjcsIDcyLCA3MywgNzYsIAotICAgIDc2LCAyMTMsIDY3LCA3MiwgNzMsIDc2LCA2OCwgMTI4LCA2NywgNzIsIDczLCA3NSwgMjAxLCA2NywgNzIsIDczLCA2OSwgCi0gICAgODUsIDY3LCA3MiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIAotICAgIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDIwMCwgNjcsIDcyLCA3MywgCi0gICAgMTI4LCA2NywgNzIsIDIwMSwgNjcsIDcyLCA3MiwgNjUsIDEyOCwgNjcsIDcyLCA2OSwgODgsIDEyOCwgNjcsIDcyLCA2OSwgCi0gICAgODYsIDgyLCA3OSwgMjA2LCA2NywgNzIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4MywgMjExLCA2NywgNzIsIDY5LCAKLSAgICA4MCwgMTI4LCA2NywgNzIsIDY5LCAyMDYsIDY3LCA3MiwgNjksIDY5LCAxMjgsIDY3LCA3MiwgNjksIDY3LCA3NSwgMTI4LCAKLSAgICA2NywgNzIsIDY5LCA2NywgMjAzLCA2NywgNzIsIDE5NywgNjcsIDcyLCA2NSwgODgsIDEyOCwgNjcsIDcyLCA2NSwgODYsIAotICAgIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA2NywgNzIsIDY1LCA4NCwgODQsIDY1LCA4NywgNjUsIDEyOCwgNjcsIDcyLCA2NSwgCi0gICAgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDczLCA3OSwgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDczLCA3OSwgMjEyLCAKLSAgICA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCA4NCwgNjksIDgyLCA4MywgMTI4LCA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCA4NCwgCi0gICAgNjksIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDgwLCAxMjgsIDY3LCA3MiwgNjUsIDc4LCAKLSAgICA3MSwgNjksIDEyOCwgNjcsIDcyLCA2NSwgNzgsIDcxLCAxMjgsIDY3LCA3MiwgNjUsIDc4LCAxMjgsIDY3LCA3MiwgNjUsIAotICAgIDc3LCA3NSwgNzksIDEyOCwgNjcsIDcyLCA2NSwgNzcsIDczLCA3NiwgNzksIDc4LCAxMjgsIDY3LCA3MiwgNjUsIDc3LCA3MywgCi0gICAgNzYsIDczLCAxMjgsIDY3LCA3MiwgNjUsIDczLCA4MiwgMTI4LCA2NywgNzIsIDY1LCA2OCwgNjUsIDEyOCwgNjcsIDcyLCAKLSAgICA2NSwgMTk2LCA2NywgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjksIDg4LCAxMjgsIDY3LCA2OSwgODIsIDY5LCA4MywgMTI4LCAKLSAgICA2NywgNjksIDgyLCA0NSwgODcsIDY1LCAxMjgsIDY3LCA2OSwgODAsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIAotICAgIDczLCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA2OSwgNzksIDc4LCAKLSAgICA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgODMsIDgzLCA2NSwgNzgsIDcxLCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgCi0gICAgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgNzMsIDc5LCA4MywgMTI4LCA2NywgNjksIAotICAgIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA2NywgNjksIDc5LCAKLSAgICA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDY3LCA2OSwgCi0gICAgNzgsIDg0LCA4NSwgODIsIDczLCA2NSwgMjA0LCA2NywgNjksIDc4LCA4NCwgODIsIDY5LCA3NiwgNzMsIDc4LCAxOTcsIDY3LCAKLSAgICA2OSwgNzgsIDg0LCA4MiwgNjksIDE5NiwgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgMTI4LCA2NywgNjksIDc4LCA4NCwgODIsIAotICAgIDE5NywgNjcsIDY5LCA3OCwgMTI4LCA2NywgNjksIDc2LCA4MywgNzMsIDg1LCA4MywgMTI4LCA2NywgNjksIDczLCA4MiwgCi0gICAgODQsIDEyOCwgNjcsIDY5LCA3MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgNjcsIDY5LCA2OSwgMTI4LCA2NywgNjksIDY4LCAKLSAgICA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCAxOTMsIDY3LCA2OSwgNjgsIDIwMSwgNjcsIAotICAgIDY5LCA2NywgNjksIDc1LCAxMjgsIDY3LCA2OSwgNjUsIDc2LCA2NywgMTI4LCA2NywgNjcsIDg1LCAxMjgsIDY3LCA2NywgCi0gICAgNzksIDEyOCwgNjcsIDY3LCA3MywgMTI4LCA2NywgNjcsIDcyLCA4NSwgMTI4LCA2NywgNjcsIDcyLCA3OSwgMTI4LCA2NywgCi0gICAgNjcsIDcyLCA3MywgMTI4LCA2NywgNjcsIDcyLCA2OSwgNjksIDEyOCwgNjcsIDY3LCA3MiwgNjksIDEyOCwgNjcsIDY3LCAKLSAgICA3MiwgNjUsIDY1LCAxMjgsIDY3LCA2NywgNzIsIDY1LCAxMjgsIDY3LCA2NywgNjksIDY5LCAxMjgsIDY3LCA2NywgNjksIAotICAgIDEyOCwgNjcsIDY3LCA2NSwgNjUsIDEyOCwgNjcsIDY3LCA2NSwgMTI4LCA2NywgNjUsIDg5LCA3OCwgMTI4LCA2NywgNjUsIAotICAgIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NywgNjUsIDg4LCAxMjgsIDY3LCA2NSwgODYsIDY5LCAxMjgsIDY3LCA2NSwgCi0gICAgODUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCA4NSwgNzYsIDY4LCA4MiwgNzksIDc4LCAxMjgsIDY3LCA2NSwgODUsIDY4LCAKLSAgICA2NSwgMTI4LCA2NywgNjUsIDg0LCA2NSwgODcsIDY1LCAxMjgsIDY3LCA2NSwgODQsIDEyOCwgNjcsIDY1LCA4MiwgODksIAotICAgIDgzLCA4NCwgNzMsIDY1LCAyMDYsIDY3LCA2NSwgODIsIDg0LCAxMjgsIDY3LCA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAKLSAgICAxOTcsIDY3LCA2NSwgODIsIDgwLCA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2NywgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNjcsIAorICAgIDY3LCA3OSwgNzcsIDgwLCA4NSwgODQsIDY5LCA4MiwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzksIDgzLCA3MywgODQsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjcsIDc5LCA3NywgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgNjcsIDc5LCA3NywgODAsIAorICAgIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNjcsIDc5LCA3NywgODAsIDc2LCA2OSwgODQsIDY5LCA2OCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA3NywgNjksIAorICAgIDc4LCA4NCwgMTI4LCA2NywgNzksIDc3LCA4MCwgNjUsIDgyLCA2OSwgMTI4LCA2NywgNzksIDc3LCA3NywgNzksIDIwNiwgCisgICAgNjcsIDc5LCA3NywgNzcsIDY5LCA4MiwgNjcsIDczLCA2NSwgMjA0LCA2NywgNzksIDc3LCA3NywgNjUsIDEyOCwgNjcsIDc5LCAKKyAgICA3NywgNzcsIDE5MywgNjcsIDc5LCA3NywgNjksIDg0LCAxMjgsIDY3LCA3OSwgNzcsIDY2LCAxMjgsIDY3LCA3OSwgNzYsIAorICAgIDg1LCA3NywgNzgsIDEyOCwgNjcsIDc5LCA3NiwgNzksIDgyLCAxMjgsIDY3LCA3OSwgNzYsIDc2LCA3MywgODMsIDczLCA3OSwgCisgICAgMjA2LCA2NywgNzksIDc2LCA3NiwgMTI4LCA2NywgNzksIDc2LCAxOTYsIDY3LCA3OSwgNzAsIDcwLCA3MywgNzgsIDEyOCwgCisgICAgNjcsIDc5LCA2OSwgNzgsIDcxLCAxMjgsIDY3LCA3OSwgNjgsIDY1LCAxMjgsIDY3LCA3OSwgNjcsIDc1LCA4NCwgNjUsIDczLCAKKyAgICAyMDQsIDY3LCA3OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDY3LCA3OSwgNjUsIDEyOCwgNjcsIDc5LCAxMjgsIDY3LCAKKyAgICA3NywgMTI4LCA2NywgMjA1LCA2NywgNzYsIDg1LCA4MywgODQsIDY5LCAyMTAsIDY3LCA3NiwgODUsIDY2LCA4MywgMTI4LCAKKyAgICA2NywgNzYsIDg1LCA2NiwgNDUsIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NywgNzYsIDg1LCA2NiwgMTI4LCA2NywgNzYsIAorICAgIDg1LCAxOTQsIDY3LCA3NiwgNzksIDg2LCA2OSwgODIsIDEyOCwgNjcsIDc2LCA3OSwgODUsIDY4LCAxMjgsIDY3LCA3NiwgCisgICAgNzksIDg1LCAxOTYsIDY3LCA3NiwgNzksIDg0LCA3MiwgNjksIDgzLCAxMjgsIDY3LCA3NiwgNzksIDg0LCA3MiwgMTI4LCAKKyAgICA2NywgNzYsIDc5LCA4MywgNjksIDg0LCAxMjgsIDY3LCA3NiwgNzksIDgzLCA2OSwgNzgsIDY5LCA4MywgODMsIDEyOCwgNjcsIAorICAgIDc2LCA3OSwgODMsIDY5LCA2OCwgMTI4LCA2NywgNzYsIDc5LCA4MywgMTk3LCA2NywgNzYsIDc5LCA2NywgNzUsIDg3LCA3MywgCisgICAgODMsIDE5NywgNjcsIDc2LCA3OSwgNjcsIDIwMywgNjcsIDc2LCA3MywgODYsIDczLCA4MywgMTI4LCA2NywgNzYsIDczLCAKKyAgICA4MCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDY3LCA3NiwgNzMsIDc4LCA3NSwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIAorICAgIDc4LCA3MSwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNzMsIDc3LCA2NSwgNjcsIDg1LCA4MywgMTI4LCA2NywgNzYsIDczLCA3MCwgCisgICAgNzAsIDEyOCwgNjcsIDc2LCA3MywgNjcsIDc1LCAxMjgsIDY3LCA3NiwgNjksIDcwLCA0NSwgNTAsIDEyOCwgNjcsIDc2LCAKKyAgICA2OSwgNzAsIDQ1LCA0OSwgMTI4LCA2NywgNzYsIDY5LCA3MCwgMTI4LCA2NywgNzYsIDY5LCAxOTgsIDY3LCA3NiwgNjksIAorICAgIDY1LCA4NiwgNjksIDgyLCAxMjgsIDY3LCA3NiwgNjksIDY1LCAyMTAsIDY3LCA3NiwgNjUsIDg3LCAxMjgsIDY3LCA3NiwgCisgICAgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDY3LCA3NiwgNjUsIDgwLCA4MCwgNjksIDIxMCwgNjcsIDc2LCA2NSwgNzgsIAorICAgIDEyOCwgNjcsIDc2LCA2NSwgNzMsIDc3LCAxMjgsIDY3LCA3NiwgMTI4LCA2NywgNzMsIDg4LCAxMjgsIDY3LCA3MywgODYsIAorICAgIDczLCA3NiwgNzMsIDY1LCA3OCwgMTI4LCA2NywgNzMsIDg0LCA4OSwgODMsIDY3LCA2NSwgODAsIDE5NywgNjcsIDczLCA4NCwgCisgICAgMTI4LCA2NywgNzMsIDgyLCA2NywgODUsIDIxMSwgNjcsIDczLCA4MiwgNjcsIDg1LCA3NywgNzAsIDc2LCA2OSwgODgsIAorICAgIDEyOCwgNjcsIDczLCA4MiwgNjcsIDg1LCA3NywgNzAsIDc2LCA2OSwgMjE2LCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgCisgICAgODQsIDczLCA3OSwgMjA2LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCA4MywgMTI4LCA2NywgNzMsIDgyLCA2NywgNzYsIDY5LCAKKyAgICAxMjgsIDY3LCA3MywgODAsIDEyOCwgNjcsIDczLCA3OCwgNzgsIDY1LCA2NiwgNjUsIDgyLCAxMjgsIDY3LCA3MywgNzgsIAorICAgIDY5LCA3NywgNjUsIDEyOCwgNjcsIDczLCA3MywgMTI4LCA2NywgNzMsIDY5LCA4OCwgMTI4LCA2NywgNzMsIDY5LCA4NSwgCisgICAgNjcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA2NywgNzMsIDY5LCA4NSwgNjcsIAorICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNjcsIDczLCA2OSwgODUsIDY3LCA0NSwgNzMsIDY5LCA4NSwgNzgsIDcxLCAKKyAgICAxMjgsIDY3LCA3MywgNjksIDg1LCAxOTUsIDY3LCA3MywgNjksIDg0LCAxMjgsIDY3LCA3MywgNjksIDgwLCAxMjgsIDY3LCAKKyAgICA3MywgNjksIDEyOCwgNjcsIDczLCAxMjgsIDY3LCA3MiwgODksIDg4LCAxMjgsIDY3LCA3MiwgODksIDg0LCAxMjgsIDY3LCAKKyAgICA3MiwgODksIDgyLCA4OCwgMTI4LCA2NywgNzIsIDg5LCA4MiwgMTI4LCA2NywgNzIsIDg5LCA4MCwgMTI4LCA2NywgNzIsIAorICAgIDg1LCA4OCwgMTI4LCA2NywgNzIsIDg1LCA4MiwgODgsIDEyOCwgNjcsIDcyLCA4NSwgODIsIDY3LCA3MiwgMTI4LCA2NywgCisgICAgNzIsIDg1LCA4MiwgMTI4LCA2NywgNzIsIDg1LCA4MCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgODgsIDEyOCwgNjcsIDcyLCAKKyAgICA4NSwgNzksIDg0LCAxMjgsIDY3LCA3MiwgODUsIDc5LCA4MCwgMTI4LCA2NywgNzIsIDg1LCA3OSwgMTI4LCA2NywgNzIsIAorICAgIDg1LCA3NiwgNjUsIDEyOCwgNjcsIDcyLCA4NSwgMTI4LCA2NywgNzIsIDgyLCA4OSwgODMsIDY1LCA3OCwgODQsIDcyLCA2OSwgCisgICAgNzcsIDg1LCA3NywgMTI4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCA4NSwgMTI4LCA2NywgNzIsIDgyLCA3OSwgNzgsIDc5LCAKKyAgICA3OCwgMTI4LCA2NywgNzIsIDgyLCA3OSwgNzcsIDE5MywgNjcsIDcyLCA4MiwgNzksIDE5MywgNjcsIDcyLCA4MiwgNzMsIAorICAgIDg2LCA3MywgMTI4LCA2NywgNzIsIDgyLCA3MywgODMsIDg0LCA3NywgNjUsIDgzLCAxMjgsIDY3LCA3MiwgODIsIDczLCA4MywgCisgICAgODQsIDc3LCA2NSwgMjExLCA2NywgNzIsIDc5LCA4OCwgMTI4LCA2NywgNzIsIDc5LCA4NCwgMTI4LCA2NywgNzIsIDc5LCAKKyAgICA4MiwgNjksIDg2LCA3NywgMTkzLCA2NywgNzIsIDc5LCA4MCwgMTI4LCA2NywgNzIsIDc5LCA3NSwgNjksIDEyOCwgNjcsIAorICAgIDcyLCA3OSwgNjksIDEyOCwgNjcsIDcyLCA3OSwgNjcsIDc5LCA3NiwgNjUsIDg0LCAxOTcsIDY3LCA3MiwgNzksIDY1LCAKKyAgICAxMjgsIDY3LCA3MiwgMjA3LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNjcsIDcyLCA3MywgODQsIDg1LCA2OSwgODUsIDc3LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCAKKyAgICA3MywgNjksIDg1LCA2NywgMTI4LCA2NywgNzIsIDczLCA4NCwgODUsIDY5LCA4NSwgNzcsIDgzLCA3MywgNzksIDgzLCAxMjgsIAorICAgIDY3LCA3MiwgNzMsIDg0LCA4NSwgNjksIDg1LCA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA3MiwgNzMsIDg0LCAKKyAgICA4NSwgNjksIDg1LCA3NywgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNjcsIDcyLCA3MywgODIsIDc5LCA3OCwgCisgICAgMTI4LCA2NywgNzIsIDczLCA4MiwgNjksIDg0LCAxMjgsIDY3LCA3MiwgNzMsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDczLCAKKyAgICA3OCwgNjksIDgzLCAxOTcsIDY3LCA3MiwgNzMsIDc4LCAxMjgsIDY3LCA3MiwgNzMsIDc3LCA2OSwgMTI4LCA2NywgNzIsIAorICAgIDczLCA3NiwgNzYsIDIxMywgNjcsIDcyLCA3MywgNzYsIDY4LCA4MiwgNjksIDIwNiwgNjcsIDcyLCA3MywgNzYsIDY4LCAKKyAgICAxMjgsIDY3LCA3MiwgNzMsIDc2LCAxMjgsIDY3LCA3MiwgNzMsIDc1LCAyMDEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIAorICAgIDcyLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDQ1LCAKKyAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgMjAwLCA2NywgNzIsIDczLCA2NywgNzUsIAorICAgIDY5LCA3OCwgMTI4LCA2NywgNzIsIDczLCA2NywgNzUsIDEyOCwgNjcsIDcyLCA3MywgMTI4LCA2NywgNzIsIDIwMSwgNjcsIAorICAgIDcyLCA3MiwgNjUsIDEyOCwgNjcsIDcyLCA2OSwgODgsIDEyOCwgNjcsIDcyLCA2OSwgODYsIDgyLCA3OSwgMjA2LCA2NywgCisgICAgNzIsIDY5LCA4NCwgMTI4LCA2NywgNzIsIDY5LCA4MywgODQsIDc4LCA4NSwgODQsIDEyOCwgNjcsIDcyLCA2OSwgODMsIAorICAgIDIxMSwgNjcsIDcyLCA2OSwgODIsIDgyLCAyMTcsIDY3LCA3MiwgNjksIDgyLCA4MiwgNzMsIDY5LCA4MywgMTI4LCA2NywgCisgICAgNzIsIDY5LCA4MSwgODUsIDY5LCA4MiwgNjksIDE5NiwgNjcsIDcyLCA2OSwgODAsIDEyOCwgNjcsIDcyLCA2OSwgMjA2LCAKKyAgICA2NywgNzIsIDY5LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA2NywgNzIsIDY5LCA3MywgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNjcsIAorICAgIDcyLCA2OSwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjcsIDcyLCA2OSwgNjksIDEyOCwgNjcsIDcyLCA2OSwgNjcsIDc1LCAKKyAgICAxMjgsIDY3LCA3MiwgNjksIDY3LCAyMDMsIDY3LCA3MiwgMTk3LCA2NywgNzIsIDY1LCA4OCwgMTI4LCA2NywgNzIsIDY1LCAKKyAgICA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDY3LCA3MiwgNjUsIDg0LCA4NCwgNjUsIDg3LCA2NSwgMTI4LCA2NywgNzIsIAorICAgIDY1LCA4NCwgMTI4LCA2NywgNzIsIDY1LCA4MiwgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDIxMiwgNjcsIDcyLCA2NSwgCisgICAgODIsIDczLCA3OSwgODQsIDEyOCwgNjcsIDcyLCA2NSwgODIsIDczLCA3OSwgMjEyLCA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCAKKyAgICA4NCwgNjksIDgyLCA4MywgMTI4LCA2NywgNzIsIDY1LCA4MiwgNjUsIDY3LCA4NCwgNjksIDgyLCAxMjgsIDY3LCA3MiwgNjUsIAorICAgIDgyLCAxMjgsIDY3LCA3MiwgNjUsIDgwLCAxMjgsIDY3LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA2NywgNzIsIDY1LCA3OCwgCisgICAgMTI4LCA2NywgNzIsIDY1LCA3NywgNzUsIDc5LCAxMjgsIDY3LCA3MiwgNjUsIDc3LCA3MywgNzYsIDc5LCA3OCwgMTI4LCAKKyAgICA2NywgNzIsIDY1LCA3NywgNzMsIDc2LCA3MywgMTI4LCA2NywgNzIsIDY1LCA3MywgODIsIDEyOCwgNjcsIDcyLCA2NSwgNzMsIAorICAgIDc4LCA4MywgMTI4LCA2NywgNzIsIDY1LCA2OCwgNjUsIDEyOCwgNjcsIDcyLCA2NSwgMTk2LCA2NywgNzIsIDY1LCA2NSwgCisgICAgMTI4LCA2NywgNjksIDg4LCAxMjgsIDY3LCA2OSwgODIsIDY5LCA4MywgMTI4LCA2NywgNjksIDgyLCA2OSwgNzcsIDc5LCAKKyAgICA3OCwgODksIDEyOCwgNjcsIDY5LCA4MiwgNjksIDc1LCAxMjgsIDY3LCA2OSwgODIsIDQ1LCA4NywgNjUsIDEyOCwgNjcsIAorICAgIDY5LCA4MCwgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNzcsIDgzLCA4MywgNjUsIDc4LCAKKyAgICA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgNjcsIDY5LCA3OSwgNzgsIDcxLCA2NywgNzIsIDczLCA2OSwgODUsIDc3LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA2NywgNjksIDc5LCA3OCwgNzEsIDY3LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNzcsIDgzLCA3MywgNzksIDgzLCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCAKKyAgICA3NywgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDY3LCA2OSwgNzksIDc4LCA3MSwgNjcsIDcyLCA3MywgNjksIDg1LCA3NywgCisgICAgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNjcsIDY5LCA3OCwgODQsIDg1LCA4MiwgNzMsIDY1LCAyMDQsIDY3LCAKKyAgICA2OSwgNzgsIDg0LCA4MiwgNjksIDc2LCA3MywgNzgsIDE5NywgNjcsIDY5LCA3OCwgODQsIDgyLCA2OSwgMTk2LCA2NywgNjksIAorICAgIDc4LCA4NCwgODIsIDY5LCAxMjgsIDY3LCA2OSwgNzgsIDg0LCA4MiwgMTk3LCA2NywgNjksIDc4LCAxMjgsIDY3LCA2OSwgCisgICAgNzYsIDgzLCA3MywgODUsIDgzLCAxMjgsIDY3LCA2OSwgNzYsIDY5LCA2NiwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA2NywgNjksIDczLCA4MiwgODQsIDEyOCwgNjcsIDY5LCA3MywgNzYsIDczLCA3OCwgNzEsIDEyOCwgNjcsIDY5LCA2OSwgCisgICAgMTI4LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NywgNjksIDY4LCA3MywgNzYsIDc2LCAxOTMsIDY3LCAKKyAgICA2OSwgNjgsIDIwMSwgNjcsIDY5LCA2NywgNjksIDc1LCAxMjgsIDY3LCA2OSwgNjcsIDY1LCA3NSwgMTI4LCA2NywgNjksIAorICAgIDY3LCA2NSwgMjAzLCA2NywgNjksIDY1LCA3NiwgNjcsIDEyOCwgNjcsIDY3LCA4NSwgMTI4LCA2NywgNjcsIDc5LCAxMjgsIAorICAgIDY3LCA2NywgNzMsIDEyOCwgNjcsIDY3LCA3MiwgODUsIDEyOCwgNjcsIDY3LCA3MiwgNzksIDEyOCwgNjcsIDY3LCA3MiwgCisgICAgNzMsIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDg1LCAxMjgsIDY3LCA2NywgNzIsIDcyLCA3OSwgMTI4LCA2NywgNjcsIDcyLCAKKyAgICA3MiwgNzMsIDEyOCwgNjcsIDY3LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA2NywgNjcsIDcyLCA3MiwgNjksIDEyOCwgNjcsIAorICAgIDY3LCA3MiwgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDcyLCA3MiwgNjUsIDEyOCwgNjcsIDY3LCA3MiwgNjksIDY5LCAKKyAgICAxMjgsIDY3LCA2NywgNzIsIDY5LCAxMjgsIDY3LCA2NywgNzIsIDY1LCA2NSwgMTI4LCA2NywgNjcsIDcyLCA2NSwgMTI4LCAKKyAgICA2NywgNjcsIDY5LCA2OSwgMTI4LCA2NywgNjcsIDY5LCAxMjgsIDY3LCA2NywgNjUsIDY1LCAxMjgsIDY3LCA2NywgNjUsIAorICAgIDEyOCwgNjcsIDY1LCA4OSwgNzgsIDEyOCwgNjcsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjcsIDY1LCA4OCwgCisgICAgMTI4LCA2NywgNjUsIDg2LCA2OSwgMTI4LCA2NywgNjUsIDg1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA2NSwgODUsIDc2LCAKKyAgICA2OCwgODIsIDc5LCA3OCwgMTI4LCA2NywgNjUsIDg1LCA2OCwgNjUsIDEyOCwgNjcsIDY1LCA4NCwgNjUsIDg3LCA2NSwgCisgICAgMTI4LCA2NywgNjUsIDg0LCAxMjgsIDY3LCA2NSwgMjEyLCA2NywgNjUsIDgzLCA4NCwgNzYsIDY5LCAxMjgsIDY3LCA2NSwgCisgICAgODIsIDg5LCA4MywgODQsIDczLCA2NSwgMjA2LCA2NywgNjUsIDgyLCA4NCwgMTI4LCA2NywgNjUsIDgyLCAyMTEsIDY3LCAKKyAgICA2NSwgODIsIDgyLCA3MywgNjUsIDcxLCAxOTcsIDY3LCA2NSwgODIsIDgwLCA2OSwgNzgsIDg0LCA4MiwgMjE3LCA2NywgNjUsIAorICAgIDgyLCAyMDgsIDY3LCA2NSwgODIsIDc5LCA4NSwgODMsIDY5LCAyMDQsIDY3LCA2NSwgODIsIDc5LCA3OCwgMTI4LCA2NywgCiAgICAgNjUsIDgyLCA3OSwgMjA2LCA2NywgNjUsIDgyLCA3MywgMjAzLCA2NywgNjUsIDgyLCA3MywgNjUsIDIwNiwgNjcsIDY1LCAKLSAgICA4MiwgNjksIDg0LCAxMjgsIDY3LCA2NSwgODIsIDY5LCAyMTIsIDY3LCA2NSwgODIsIDE5NywgNjcsIDY1LCA4MCwgODQsIAotICAgIDczLCA4NiwgNjksIDEyOCwgNjcsIDY1LCA4MCwgODIsIDczLCA2NywgNzksIDgyLCA3OCwgMTI4LCA2NywgNjUsIDgwLCA3OSwgCi0gICAgMTI4LCA2NywgNjUsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA2NywgNjUsIDc4LCA4NCwgNzMsIDc2LCA3NiwgNjUsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNjcsIDY1LCA3OCwgMTk5LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgODUsIAotICAgIDEyOCwgNjcsIDY1LCA3OCwgNjgsIDgyLCA2NSwgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDE5MywgNjcsIDY1LCA3OCwgCi0gICAgNjcsIDY5LCA4MiwgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjcsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCA3NiwgMTI4LCA2NywgNjUsIDc4LCA2NywgNjksIDIwNCwgNjcsIDY1LCA3OCwgMTI4LCA2NywgNjUsIAotICAgIDc3LCA3OCwgODUsIDE5NSwgNjcsIDY1LCA3NiwgODksIDY1LCAxMjgsIDY3LCA2NSwgNzYsIDg5LCAxOTMsIDY3LCA2NSwgCi0gICAgNzYsIDc2LCAxMjgsIDY3LCA2NSwgNzYsIDY3LCAxMjgsIDY3LCA2NSwgNjksIDgzLCA4NSwgODIsIDY1LCAxMjgsIDY3LCAKLSAgICA2NSwgNjgsIDg1LCA2NywgNjksIDg1LCA4MywgMTI4LCA2NywgNjUsIDY4LCAxOTMsIDY3LCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDY3LCAxOTMsIDY3LCA0NSwgODMsIDczLCA3NywgODAsIDc2LCA3MywgNzAsIDczLCA2OSwgMTk2LCA2NywgNDUsIDUxLCA1NywgCi0gICAgMTI4LCA2NywgNDUsIDQ5LCA1NiwgMTI4LCA2NiwgOTAsIDg1LCA3OCwgMTk5LCA2NiwgOTAsIDcyLCAyMDEsIDY2LCA4OSwgCi0gICAgNjksIDc2LCA3OSwgODIsIDg1LCA4MywgODMsIDczLCA2NSwgNzgsIDQ1LCA4NSwgNzUsIDgyLCA2NSwgNzMsIDc4LCA3MywgCi0gICAgNjUsIDIwNiwgNjYsIDIxNywgNjYsIDg4LCA3MSwgMTI4LCA2NiwgODcsIDczLCAxMjgsIDY2LCA4NywgNjksIDY5LCAxMjgsIAotICAgIDY2LCA4NywgNjksIDEyOCwgNjYsIDg3LCA2NSwgMTI4LCA2NiwgODUsIDg1LCA3NywgNzMsIDgzLCA3MiwgMTI4LCA2NiwgCi0gICAgODUsIDIxMiwgNjYsIDg1LCA4MywgODMsIDg5LCA2OSwgODIsIDg1LCAxMjgsIDY2LCA4NSwgODIsIDIxMywgNjYsIDg1LCAKLSAgICA4MiwgNTAsIDEyOCwgNjYsIDg1LCAyMTAsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA4NSwgNzksIDgwLCAxMjgsIDY2LCAKLSAgICA4NSwgNzksIDEyOCwgNjYsIDg1LCA3NywgODAsIDIxNywgNjYsIDg1LCA3NiwgODUsIDcxLCAxMjgsIDY2LCA4NSwgNzYsIAotICAgIDg1LCAxOTksIDY2LCA4NSwgNzYsIDc2LCA4MywgNjksIDg5LCA2OSwgMTI4LCA2NiwgODUsIDc2LCA3NiwgMjExLCA2NiwgCi0gICAgODUsIDc2LCA3NiwgNjksIDg0LCAxMjgsIDY2LCA4NSwgNzYsIDc2LCA2OSwgMjEyLCA2NiwgODUsIDc2LCA3NiwgMTI4LCAKLSAgICA2NiwgODUsIDc1LCA4OSwgMTI4LCA2NiwgODUsIDcyLCA3MywgMTk2LCA2NiwgODUsIDcxLCA3MywgNzgsIDY5LCA4MywgCi0gICAgMTk3LCA2NiwgODUsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDY2LCA4MywgODQsIDY1LCA4MiwgMTI4LCA2NiwgODMsIDc1LCAKLSAgICA4NSwgMjEwLCA2NiwgODMsIDc1LCA2NSwgMTczLCA2NiwgODMsIDY4LCA4NSwgMjExLCA2NiwgODIsIDg1LCA4MywgNzIsIAotICAgIDEyOCwgNjYsIDgyLCA4NSwgODMsIDIwMCwgNjYsIDgyLCA3OSwgNzgsIDkwLCA2OSwgMTI4LCA2NiwgODIsIDc5LCA3NSwgCi0gICAgNjksIDIwNiwgNjYsIDgyLCA3OSwgNjUsIDE5NiwgNjYsIDgyLCA3MywgODMsIDg0LCA3NiwgNjksIDEyOCwgNjYsIDgyLCAKLSAgICA3MywgNjgsIDcxLCAxOTcsIDY2LCA4MiwgNjksIDg2LCA3MywgODMsIDEyOCwgNjYsIDgyLCA2OSwgODYsIDY5LCA0NSwgNzcsIAotICAgIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NiwgODIsIDY5LCA4NiwgMTk3LCA2NiwgODIsIDY5LCA2NSwgODQsIDIwMCwgCi0gICAgNjYsIDgyLCA2OSwgNjUsIDc1LCA4NCwgNzIsIDgyLCA3OSwgODUsIDcxLCA3MiwgMTI4LCA2NiwgODIsIDY4LCAxOTMsIDY2LCAKLSAgICA4MiwgNjUsIDc4LCA2NywgNzIsIDczLCA3OCwgMTk5LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCAxMjgsIDY2LCA4MiwgNjUsIAotICAgIDc4LCA2NywgMjAwLCA2NiwgODIsIDY1LCA3NSwgNjcsIDY5LCA4NCwgMTI4LCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCAKLSAgICAyMTIsIDY2LCA4MiwgNjUsIDY3LCA2OSwgMTI4LCA2NiwgODEsIDEyOCwgNjYsIDc5LCA4NywgODQsIDczLCA2OSwgMTI4LCAKLSAgICA2NiwgNzksIDg3LCA4NCwgNzMsIDE5NywgNjYsIDc5LCA4NywgMTI4LCA2NiwgNzksIDIxNSwgNjYsIDc5LCA4NSwgNzgsIAotICAgIDY4LCA2NSwgODIsIDIxNywgNjYsIDc5LCA4NCwgODQsIDc5LCA3NywgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgNjksIDE5NiwgCi0gICAgNjYsIDc5LCA4NCwgODQsIDc5LCA3NywgMTI4LCA2NiwgNzksIDg0LCA4NCwgNzksIDIwNSwgNjYsIDc5LCA4MiwgODUsIDg0LCAKLSAgICA3OSwgMTI4LCA2NiwgNzksIDc5LCA3NywgNjksIDgyLCA2NSwgNzgsIDcxLCAxMjgsIDY2LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDY2LCA3OSwgNzYsIDIxMiwgNjYsIDc5LCA2OCwgODksIDEyOCwgNjYsIDc5LCA2NSwgODQsIDEyOCwgNjYsIDc5LCA2NSwgCi0gICAgODIsIDEyOCwgNjYsIDc5LCA2NSwgMTI4LCA2NiwgNzYsIDg1LCA2OSwgMTI4LCA2NiwgNzYsIDc5LCA3OSwgNjgsIDEyOCwgCi0gICAgNjYsIDc2LCA3OSwgNjcsIDc1LCAxMjgsIDY2LCA3NiwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjYsIDc2LCA2NSwgNzgsIDc1LCAKLSAgICAxMjgsIDY2LCA3NiwgNjUsIDc4LCAyMDMsIDY2LCA3NiwgNjUsIDY4LCAxOTcsIDY2LCA3NiwgNjUsIDY3LCA3NSwgNzAsIAotICAgIDc5LCA3OSwgMjEyLCA2NiwgNzYsIDY1LCA2NywgNzUsIDQ1LCA3NiwgNjksIDg0LCA4NCwgNjksIDIxMCwgNjYsIDc2LCA2NSwgCi0gICAgNjcsIDc1LCA0NSwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDY5LCAxOTYsIDY2LCA3NiwgNjUsIDY3LCA3NSwgMTI4LCAKLSAgICA2NiwgNzUsIDY1LCAxNzMsIDY2LCA3MywgODQsIDg0LCA2OSwgODIsIDEyOCwgNjYsIDczLCA4NCwgNzMsIDc4LCAxOTksIAotICAgIDY2LCA3MywgODMsIDc3LCA3MywgNzYsIDc2LCA2NSwgMjAwLCA2NiwgNzMsIDgzLCA3MiwgNzksIDgwLCAxMjgsIDY2LCA3MywgCi0gICAgODMsIDY5LCA2NywgODQsIDczLCA3OCwgMTk5LCA2NiwgNzMsIDgzLCA2NSwgNzIsIDEyOCwgNjYsIDczLCA4MiwgODUsIAotICAgIDEyOCwgNjYsIDczLCA4MiwgNzEsIDY1LCAxMjgsIDY2LCA3MywgODIsIDY4LCAxMjgsIDY2LCA3MywgNzksIDcyLCA2NSwgCi0gICAgOTAsIDY1LCA4MiwgMTk2LCA2NiwgNzMsIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNjYsIDczLCA3OCwgNjgsIDczLCAKLSAgICA3OCwgMTk5LCA2NiwgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNjYsIDczLCA3OCwgNjUsIDgyLCAyMTcsIDY2LCA3MywgNzYsIAotICAgIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDY2LCA3MywgNzEsIDEyOCwgNjYsIDczLCAxOTksIDY2LCA3MywgNjksIDg0LCAxMjgsIAotICAgIDY2LCA3MywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY2LCA3MywgNjYsIDc2LCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgCi0gICAgNjYsIDczLCA2NiwgMTI4LCA2NiwgMjAxLCA2NiwgNzIsIDg1LCAxMjgsIDY2LCA3MiwgNzksIDc5LCAxMjgsIDY2LCA3MiwgCi0gICAgNzksIDEyOCwgNjYsIDcyLCA3MywgMTI4LCA2NiwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNjYsIDcyLCA2OSwgNjksIDEyOCwgCi0gICAgNjYsIDcyLCA2OSwgMTI4LCA2NiwgNzIsIDY1LCAxMjgsIDY2LCA2OSwgODksIDg5LCA2NSwgNzYsIDEyOCwgNjYsIDY5LCAKLSAgICA4OCwgMTI4LCA2NiwgNjksIDg2LCA2OSwgODIsIDY1LCA3MSwgNjksIDEyOCwgNjYsIDY5LCA4NCwgODcsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgNjYsIDY5LCA4NCwgODcsIDY5LCA2OSwgMjA2LCA2NiwgNjksIDg0LCA3MiwgMTI4LCA2NiwgNjksIDg0LCA2NSwgCi0gICAgMTI4LCA2NiwgNjksIDg0LCAxOTMsIDY2LCA2OSwgODQsIDEyOCwgNjYsIDY5LCAyMTIsIDY2LCA2OSwgODMsIDczLCA2OCwgCi0gICAgMTk3LCA2NiwgNjksIDgyLCA3NSwgNjUsIDc4LCA2NSwgMjA2LCA2NiwgNjksIDgyLCA2NiwgNjksIDIxMCwgNjYsIDY5LCAKLSAgICA4MCwgMTI4LCA2NiwgNjksIDc5LCA4MiwgMTk1LCA2NiwgNjksIDc4LCA5MCwgNjksIDc4LCAxOTcsIDY2LCA2OSwgNzgsIAotICAgIDY4LCA2OSwgMTI4LCA2NiwgNjksIDc4LCA2OCwgMTI4LCA2NiwgNjksIDIwNiwgNjYsIDY5LCA3NiwgODQsIDEyOCwgNjYsIAotICAgIDY5LCA3NiwgMjEyLCA2NiwgNjksIDc2LCA3OSwgMjE1LCA2NiwgNjksIDc2LCA3NiwgMTI4LCA2NiwgNjksIDc2LCAyMDQsIAotICAgIDY2LCA2OSwgNzYsIDcxLCA4NCwgNzIsIDc5LCAyMTAsIDY2LCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA2NiwgNjksIDcyLCA2OSwgCi0gICAgNzIsIDEyOCwgNjYsIDY5LCA3MiwgNjksIDIwMCwgNjYsIDY5LCA3MiwgMTI4LCA2NiwgNjksIDIwMCwgNjYsIDY5LCA3MSwgCi0gICAgNzMsIDc4LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2NiwgNjksIDcxLCA3MywgMjA2LCA2NiwgNjksIDcwLCA3OSwgODIsIAotICAgIDE5NywgNjYsIDY5LCA2OSwgODQsIDY1LCAxMjgsIDY2LCA2OSwgNjksIDcyLCA3MywgODYsIDY5LCAxMjgsIDY2LCA2OSwgCisgICAgODIsIDY5LCA4NCwgMTI4LCA2NywgNjUsIDgyLCA2OSwgMjEyLCA2NywgNjUsIDgyLCAxOTcsIDY3LCA2NSwgODIsIDY4LCAKKyAgICA4MywgMTI4LCA2NywgNjUsIDgyLCA2OCwgMTI4LCA2NywgNjUsIDgyLCAxOTYsIDY3LCA2NSwgODIsIDEyOCwgNjcsIDY1LCAKKyAgICAyMTAsIDY3LCA2NSwgODAsIDg1LCAyMTIsIDY3LCA2NSwgODAsIDg0LCA3MywgODYsIDY5LCAxMjgsIDY3LCA2NSwgODAsIAorICAgIDgyLCA3MywgNjcsIDc5LCA4MiwgNzgsIDEyOCwgNjcsIDY1LCA4MCwgNzksIDEyOCwgNjcsIDY1LCA4MCwgNzMsIDg0LCA2NSwgCisgICAgNzYsIDEyOCwgNjcsIDY1LCA3OCwgODQsIDczLCA3NiwgNzYsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY3LCA2NSwgNzgsIAorICAgIDE5OSwgNjcsIDY1LCA3OCwgNjgsIDg5LCAxMjgsIDY3LCA2NSwgNzgsIDY4LCA4MiwgNjUsIDY2LCA3MywgNzgsIDY4LCA4NSwgCisgICAgMTI4LCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCA2NiwgNzMsIDc4LCA2OCwgMjEzLCA2NywgNjUsIDc4LCA2OCwgODIsIDY1LCAKKyAgICAxMjgsIDY3LCA2NSwgNzgsIDY4LCA4MiwgMTkzLCA2NywgNjUsIDc4LCA2NywgNjksIDgyLCAxMjgsIDY3LCA2NSwgNzgsIAorICAgIDY3LCA2OSwgNzYsIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NywgNjUsIDc4LCA2NywgNjksIDc2LCAxMjgsIDY3LCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMjA0LCA2NywgNjUsIDc4LCAxMjgsIDY3LCA2NSwgNzcsIDc4LCA4NSwgMTk1LCA2NywgNjUsIDc3LCAKKyAgICA2OSwgODIsIDY1LCAxMjgsIDY3LCA2NSwgNzcsIDY5LCA3NiwgMTI4LCA2NywgNjUsIDc2LCA4OSwgNjUsIDEyOCwgNjcsIAorICAgIDY1LCA3NiwgODksIDE5MywgNjcsIDY1LCA3NiwgODgsIDEyOCwgNjcsIDY1LCA3NiwgNzYsIDEyOCwgNjcsIDY1LCA3NiwgCisgICAgNjksIDc4LCA2OCwgNjUsIDgyLCAxMjgsIDY3LCA2NSwgNzYsIDY3LCAxMjgsIDY3LCA2NSwgNzUsIDgyLCA2NSwgMTI4LCAKKyAgICA2NywgNjUsIDc1LCAxOTcsIDY3LCA2NSwgNjksIDgzLCA4NSwgODIsIDY1LCAxMjgsIDY3LCA2NSwgNjgsIDg1LCA2NywgNjksIAorICAgIDg1LCA4MywgMTI4LCA2NywgNjUsIDY4LCAxOTMsIDY3LCA2NSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgNjcsIDY1LCA2NiwgCisgICAgNzYsIDY5LCA4NywgNjUsIDg5LCAxMjgsIDY3LCA2NSwgNjYsIDY2LCA2NSwgNzEsIDY5LCA0NSwgODQsIDgyLCA2OSwgNjksIAorICAgIDEyOCwgNjcsIDY1LCA2NSwgNzgsIDcxLCAxMjgsIDY3LCA2NSwgNjUsIDczLCAxMjgsIDY3LCAxOTMsIDY3LCA0OCwgNTAsIAorICAgIDUyLCAxMjgsIDY3LCA0OCwgNTAsIDUxLCAxMjgsIDY3LCA0OCwgNTAsIDUwLCAxMjgsIDY3LCA0OCwgNTAsIDQ5LCAxMjgsIAorICAgIDY3LCA0OCwgNTAsIDQ4LCAxMjgsIDY3LCA0OCwgNDksIDU3LCAxMjgsIDY3LCA0OCwgNDksIDU2LCAxMjgsIDY3LCA0OCwgCisgICAgNDksIDU1LCAxMjgsIDY3LCA0OCwgNDksIDU0LCAxMjgsIDY3LCA0OCwgNDksIDUzLCAxMjgsIDY3LCA0OCwgNDksIDUyLCAKKyAgICAxMjgsIDY3LCA0OCwgNDksIDUxLCAxMjgsIDY3LCA0OCwgNDksIDUwLCAxMjgsIDY3LCA0OCwgNDksIDQ5LCAxMjgsIDY3LCAKKyAgICA0OCwgNDksIDQ4LCA2NSwgMTI4LCA2NywgNDgsIDQ5LCA0OCwgMTI4LCA2NywgNDgsIDQ4LCA1NywgMTI4LCA2NywgNDgsIAorICAgIDQ4LCA1NiwgMTI4LCA2NywgNDgsIDQ4LCA1NSwgMTI4LCA2NywgNDgsIDQ4LCA1NCwgMTI4LCA2NywgNDgsIDQ4LCA1MywgCisgICAgMTI4LCA2NywgNDgsIDQ4LCA1MiwgMTI4LCA2NywgNDgsIDQ4LCA1MSwgMTI4LCA2NywgNDgsIDQ4LCA1MCwgNjcsIDEyOCwgCisgICAgNjcsIDQ4LCA0OCwgNTAsIDY2LCAxMjgsIDY3LCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA2NywgNDgsIDQ4LCA1MCwgMTI4LCAKKyAgICA2NywgNDgsIDQ4LCA0OSwgMTI4LCA2NywgNDUsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgNjcsIAorICAgIDQ1LCA1MSwgNTcsIDEyOCwgNjcsIDQ1LCA0OSwgNTYsIDEyOCwgNjYsIDkwLCA4NSwgNzgsIDE5OSwgNjYsIDkwLCA3MiwgCisgICAgMjAxLCA2NiwgODksIDY5LCA3NiwgNzksIDgyLCA4NSwgODMsIDgzLCA3MywgNjUsIDc4LCA0NSwgODUsIDc1LCA4MiwgNjUsIAorICAgIDczLCA3OCwgNzMsIDY1LCAyMDYsIDY2LCA4OCwgNzEsIDEyOCwgNjYsIDg3LCA3MywgMTI4LCA2NiwgODcsIDY5LCA2OSwgCisgICAgMTI4LCA2NiwgODcsIDY5LCAxMjgsIDY2LCA4NywgNjUsIDEyOCwgNjYsIDg1LCA4NSwgNzcsIDczLCA4MywgNzIsIDEyOCwgCisgICAgNjYsIDg1LCA4NCwgODQsIDc5LCA3OCwgMTI4LCA2NiwgODUsIDIxMiwgNjYsIDg1LCA4MywgODQsIDIxMSwgNjYsIDg1LCAKKyAgICA4MywgMjEyLCA2NiwgODUsIDgzLCA4MywgODksIDY5LCA4MiwgODUsIDEyOCwgNjYsIDg1LCAyMTEsIDY2LCA4NSwgODIsIAorICAgIDIxMywgNjYsIDg1LCA4MiwgNTAsIDEyOCwgNjYsIDg1LCAyMTAsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA4NSwgNzksIAorICAgIDgwLCAxMjgsIDY2LCA4NSwgNzgsIDc4LCAyMTcsIDY2LCA4NSwgNzgsIDcxLCAxMjgsIDY2LCA4NSwgNzcsIDgwLCAyMTcsIAorICAgIDY2LCA4NSwgNzYsIDg1LCA3MSwgMTI4LCA2NiwgODUsIDc2LCA4NSwgMTk5LCA2NiwgODUsIDc2LCA3NiwgODMsIDY5LCA4OSwgCisgICAgNjksIDEyOCwgNjYsIDg1LCA3NiwgNzYsIDIxMSwgNjYsIDg1LCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA2NiwgODUsIDc2LCAKKyAgICA3NiwgNjksIDIxMiwgNjYsIDg1LCA3NiwgNzYsIDEyOCwgNjYsIDg1LCA3NiwgNjYsIDEyOCwgNjYsIDg1LCA3NSwgODksIAorICAgIDEyOCwgNjYsIDg1LCA3MywgNzYsIDY4LCA3MywgNzgsIDcxLCA4MywgMTI4LCA2NiwgODUsIDczLCA3NiwgNjgsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjYsIDg1LCA3MiwgNzMsIDE5NiwgNjYsIDg1LCA3MSwgNzMsIDc4LCA2OSwgODMsIDE5NywgNjYsIDg1LCAKKyAgICA3MSwgMTI4LCA2NiwgODUsIDcwLCA3MCwgNjUsIDc2LCA3OSwgMTI4LCA2NiwgODUsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIAorICAgIDY2LCA4MywgODQsIDY1LCA4MiwgMTI4LCA2NiwgODMsIDc1LCA4NSwgMjEwLCA2NiwgODMsIDc1LCA2NSwgMTczLCA2NiwgCisgICAgODMsIDY4LCA4NSwgMjExLCA2NiwgODIsIDg1LCA4MywgNzIsIDEyOCwgNjYsIDgyLCA4NSwgODMsIDIwMCwgNjYsIDgyLCAKKyAgICA3OSwgNzgsIDkwLCA2OSwgMTI4LCA2NiwgODIsIDc5LCA3NSwgNjksIDIwNiwgNjYsIDgyLCA3OSwgNjUsIDE5NiwgNjYsIAorICAgIDgyLCA3MywgODMsIDg0LCA3NiwgNjksIDEyOCwgNjYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzgsIDY5LCA4MywgMjExLCA2NiwgCisgICAgODIsIDczLCA2OSwgNzAsIDY3LCA2NSwgODMsIDY5LCAxMjgsIDY2LCA4MiwgNzMsIDY4LCA3MSwgMTk3LCA2NiwgODIsIDczLCAKKyAgICA2OCwgMTk3LCA2NiwgODIsIDczLCA2NywgNzUsIDEyOCwgNjYsIDgyLCA2OSwgODYsIDczLCA4MywgMTI4LCA2NiwgODIsIAorICAgIDY5LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY2LCA4MiwgNjksIDg2LCAxOTcsIDY2LCA4MiwgCisgICAgNjksIDY1LCA4NCwgMjAwLCA2NiwgODIsIDY5LCA2NSwgNzUsIDg0LCA3MiwgODIsIDc5LCA4NSwgNzEsIDcyLCAxMjgsIDY2LCAKKyAgICA4MiwgNjksIDY1LCA2OCwgMTI4LCA2NiwgODIsIDY4LCAxOTMsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDczLCA3OCwgCisgICAgMTk5LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCAxMjgsIDY2LCA4MiwgNjUsIDc4LCA2NywgMjAwLCA2NiwgODIsIDY1LCAKKyAgICA3NSwgNjcsIDY5LCA4NCwgMTI4LCA2NiwgODIsIDY1LCA2NywgNzUsIDY5LCA4NCwgNjksIDE5NiwgNjYsIDgyLCA2NSwgNjcsIAorICAgIDc1LCA2OSwgMjEyLCA2NiwgODIsIDY1LCA2NywgNjksIDEyOCwgNjYsIDgxLCAxMjgsIDY2LCA3OSwgODksIDEyOCwgNjYsIAorICAgIDc5LCA4NywgODQsIDczLCA2OSwgMTI4LCA2NiwgNzksIDg3LCA4NCwgNzMsIDE5NywgNjYsIDc5LCA4NywgNzYsIDczLCA3OCwgCisgICAgNzEsIDEyOCwgNjYsIDc5LCA4NywgNzYsIDEyOCwgNjYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDY2LCA3OSwgMjE1LCA2NiwgCisgICAgNzksIDg1LCA4MSwgODUsIDY5LCA4NCwgMTI4LCA2NiwgNzksIDg1LCA3OCwgNjgsIDY1LCA4MiwgMjE3LCA2NiwgNzksIDg0LCAKKyAgICA4NCwgNzksIDc3LCA0NSwgNzYsIDczLCA3MSwgNzIsIDg0LCA2OSwgMTk2LCA2NiwgNzksIDg0LCA4NCwgNzksIDc3LCAxMjgsIAorICAgIDY2LCA3OSwgODQsIDg0LCA3OSwgMjA1LCA2NiwgNzksIDg0LCA4NCwgNzYsIDY5LCAxMjgsIDY2LCA3OSwgODQsIDg0LCA3NiwgCisgICAgMTk3LCA2NiwgNzksIDg0LCAyMDAsIDY2LCA3OSwgODIsIDg1LCA4NCwgNzksIDEyOCwgNjYsIDc5LCA4MiwgNjUsIDg4LCAKKyAgICA0NSwgNTEsIDEyOCwgNjYsIDc5LCA4MiwgNjUsIDg4LCA0NSwgNTAsIDEyOCwgNjYsIDc5LCA4MiwgNjUsIDg4LCAxMjgsIAorICAgIDY2LCA3OSwgNzksIDg0LCA4MywgMTI4LCA2NiwgNzksIDc5LCA4NCwgMTI4LCA2NiwgNzksIDc5LCA3NywgNjksIDgyLCA2NSwgCisgICAgNzgsIDcxLCAxMjgsIDY2LCA3OSwgNzksIDc1LCA4MywgMTI4LCA2NiwgNzksIDc5LCA3NSwgNzcsIDY1LCA4MiwgNzUsIAorICAgIDEyOCwgNjYsIDc5LCA3OSwgNzUsIDc3LCA2NSwgODIsIDIwMywgNjYsIDc5LCA3OCwgNjksIDEyOCwgNjYsIDc5LCA3NywgCisgICAgNjYsIDEyOCwgNjYsIDc5LCA3NiwgODQsIDEyOCwgNjYsIDc5LCA3NiwgMjEyLCA2NiwgNzksIDY4LCA4OSwgMTI4LCA2NiwgCisgICAgNzksIDY1LCA4MiwgMTI4LCA2NiwgNzksIDY1LCAxMjgsIDY2LCA3NiwgODUsIDY5LCAxMjgsIDY2LCA3NiwgODUsIDE5NywgCisgICAgNjYsIDc2LCA3OSwgODcsIDcwLCA3MywgODMsIDcyLCAxMjgsIDY2LCA3NiwgNzksIDgzLCA4MywgNzksIDc3LCAxMjgsIDY2LCAKKyAgICA3NiwgNzksIDc5LCA2OCwgMTI4LCA2NiwgNzYsIDc5LCA3OCwgMTk2LCA2NiwgNzYsIDc5LCA2NywgNzUsIDEyOCwgNjYsIAorICAgIDc2LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2NiwgNzYsIDY1LCA3OCwgNzUsIDEyOCwgNjYsIDc2LCA2NSwgNzgsIDIwMywgCisgICAgNjYsIDc2LCA2NSwgNjgsIDE5NywgNjYsIDc2LCA2NSwgNjcsIDc1LCA3MCwgNzksIDc5LCAyMTIsIDY2LCA3NiwgNjUsIDY3LCAKKyAgICA3NSwgNDUsIDc2LCA2OSwgODQsIDg0LCA2OSwgMjEwLCA2NiwgNzYsIDY1LCA2NywgNzUsIDQ1LCA3MCwgNjksIDY1LCA4NCwgCisgICAgNzIsIDY5LCA4MiwgNjksIDE5NiwgNjYsIDc2LCA2NSwgNjcsIDc1LCAxMjgsIDY2LCA3NSwgNjUsIDE3MywgNjYsIDczLCAKKyAgICA4NCwgODQsIDY5LCA4MiwgMTI4LCA2NiwgNzMsIDg0LCA3MywgNzgsIDE5OSwgNjYsIDczLCA4MywgNzcsIDg1LCA4NCwgCisgICAgMjAwLCA2NiwgNzMsIDgzLCA3NywgNzMsIDc2LCA3NiwgNjUsIDIwMCwgNjYsIDczLCA4MywgNzIsIDc5LCA4MCwgMTI4LCAKKyAgICA2NiwgNzMsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzgsIDE5OSwgNjYsIDczLCA4MywgNjUsIDcyLCAxMjgsIDY2LCA3MywgODIsIAorICAgIDg1LCAxMjgsIDY2LCA3MywgODIsIDg0LCA3MiwgNjgsIDY1LCAyMTcsIDY2LCA3MywgODIsIDcxLCA2NSwgMTI4LCA2NiwgCisgICAgNzMsIDgyLCA2OCwgMTI4LCA2NiwgNzMsIDc5LCA3MiwgNjUsIDkwLCA2NSwgODIsIDE5NiwgNjYsIDczLCA3OCwgNzksIDY3LCAKKyAgICA4NSwgNzYsIDY1LCAyMTAsIDY2LCA3MywgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjYsIDczLCA3OCwgNjgsIDczLCAxMjgsIAorICAgIDY2LCA3MywgNzgsIDY1LCA4MiwgMjE3LCA2NiwgNzMsIDc2LCA3NiwgNzMsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY2LCA3MywgCisgICAgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDY2LCA3MywgNzUsIDczLCA3OCwgNzMsIDEyOCwgNjYsIDczLCA3MSwgMTI4LCAKKyAgICA2NiwgNzMsIDE5OSwgNjYsIDczLCA2OSwgODQsIDEyOCwgNjYsIDczLCA2OCwgNjksIDc4LCA4NCwgNjUsIDIwNCwgNjYsIAorICAgIDczLCA2NywgODksIDY3LCA3NiwgNzMsIDgzLCA4NCwgMTI4LCA2NiwgNzMsIDY3LCA4OSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgCisgICAgNjYsIDczLCA2NywgODksIDY3LCA3NiwgNjksIDEyOCwgNjYsIDczLCA2NywgNjksIDgwLCA4MywgMTI4LCA2NiwgNzMsIDY2LCAKKyAgICA3NiwgNjksIDQ1LCA2NywgODIsIDY5LCAxOTcsIDY2LCA3MywgNjYsIDEyOCwgNjYsIDIwMSwgNjYsIDcyLCA4NSwgMTI4LCAKKyAgICA2NiwgNzIsIDc5LCA3OSwgMTI4LCA2NiwgNzIsIDc5LCAxMjgsIDY2LCA3MiwgNzMsIDEyOCwgNjYsIDcyLCA2OSwgODQsIAorICAgIDcyLCAxMjgsIDY2LCA3MiwgNjksIDY5LCAxMjgsIDY2LCA3MiwgNjksIDEyOCwgNjYsIDcyLCA2NSwgODQsIDg0LCA3MywgCisgICAgODAsIDgyLCA3OSwgNzYsIDIxMywgNjYsIDcyLCA2NSwgNzcsIDEyOCwgNjYsIDcyLCA2NSwgMTI4LCA2NiwgNjksIDg5LCAKKyAgICA4OSwgNjUsIDc2LCAxMjgsIDY2LCA2OSwgODgsIDEyOCwgNjYsIDY5LCA4NiwgNjksIDgyLCA2NSwgNzEsIDY5LCAxMjgsIAorICAgIDY2LCA2OSwgODQsIDg3LCA2OSwgNjksIDc4LCAxMjgsIDY2LCA2OSwgODQsIDg3LCA2OSwgNjksIDIwNiwgNjYsIDY5LCA4NCwgCisgICAgNzIsIDEyOCwgNjYsIDY5LCA4NCwgNjUsIDEyOCwgNjYsIDY5LCA4NCwgMTkzLCA2NiwgNjksIDIxMiwgNjYsIDY5LCA4MywgCisgICAgNzMsIDY4LCAxOTcsIDY2LCA2OSwgODIsIDc1LCA2NSwgNzgsIDY1LCAyMDYsIDY2LCA2OSwgODIsIDY2LCA2OSwgMjEwLCAKKyAgICA2NiwgNjksIDgwLCAxMjgsIDY2LCA2OSwgNzksIDgyLCAxOTUsIDY2LCA2OSwgNzgsIDkwLCA2OSwgNzgsIDE5NywgNjYsIAorICAgIDY5LCA3OCwgODQsIDIwNywgNjYsIDY5LCA3OCwgNjgsIDY5LCAxMjgsIDY2LCA2OSwgNzgsIDY4LCAxMjgsIDY2LCA2OSwgCisgICAgMjA2LCA2NiwgNjksIDc2LCA4NCwgMTI4LCA2NiwgNjksIDc2LCAyMTIsIDY2LCA2OSwgNzYsIDc5LCAyMTUsIDY2LCA2OSwgCisgICAgNzYsIDc2LCAxMjgsIDY2LCA2OSwgNzYsIDIwNCwgNjYsIDY5LCA3NiwgNzEsIDg0LCA3MiwgNzksIDIxMCwgNjYsIDY5LCAKKyAgICA3MywgODQsIDcyLCAxMjgsIDY2LCA2OSwgNzIsIDczLCA3OCwgMTk2LCA2NiwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNjYsIAorICAgIDY5LCA3MiwgNjksIDIwMCwgNjYsIDY5LCA3MiwgMTI4LCA2NiwgNjksIDIwMCwgNjYsIDY5LCA3MSwgNzMsIDc4LCA3OCwgCisgICAgNzMsIDc4LCA3MSwgMTI4LCA2NiwgNjksIDcxLCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNjYsIDY5LCA3MSwgNzMsIAorICAgIDIwNiwgNjYsIDY5LCA3MCwgNzksIDgyLCAxOTcsIDY2LCA2OSwgNjksIDg0LCA3NiwgNjksIDEyOCwgNjYsIDY5LCA2OSwgCisgICAgODQsIDY1LCAxMjgsIDY2LCA2OSwgNjksIDIxMCwgNjYsIDY5LCA2OSwgNzIsIDczLCA4NiwgNjksIDEyOCwgNjYsIDY5LCAKICAgICA2OSwgNzIsIDEyOCwgNjYsIDY5LCA2OSwgMjAwLCA2NiwgNjksIDY3LCA2NSwgODUsIDgzLCA2OSwgMTI4LCA2NiwgNjksIAotICAgIDY1LCA4NCwgMTI4LCA2NiwgNjksIDY1LCA3OCwgMTI4LCA2NiwgNjksIDY1LCA3NywgNjksIDE5NiwgNjYsIDY3LCA2NSwgCisgICAgNjUsIDg2LCA2OSwgMjEwLCA2NiwgNjksIDY1LCA4NCwgNzMsIDc4LCAxOTksIDY2LCA2OSwgNjUsIDg0LCAxMjgsIDY2LCAKKyAgICA2OSwgNjUsIDIxMCwgNjYsIDY5LCA2NSwgNzgsIDEyOCwgNjYsIDY5LCA2NSwgNzcsIDY5LCAxOTYsIDY2LCA2NywgNjUsIAogICAgIDY4LCAxMjgsIDY2LCA2NywgNjUsIDE5NiwgNjYsIDY2LCA4OSwgODgsIDEyOCwgNjYsIDY2LCA4OSwgODQsIDEyOCwgNjYsIAogICAgIDY2LCA4OSwgODAsIDEyOCwgNjYsIDY2LCA4OSwgMTI4LCA2NiwgNjYsIDg1LCA4OCwgMTI4LCA2NiwgNjYsIDg1LCA4NCwgCiAgICAgMTI4LCA2NiwgNjYsIDg1LCA4MiwgODgsIDEyOCwgNjYsIDY2LCA4NSwgODIsIDEyOCwgNjYsIDY2LCA4NSwgODAsIDEyOCwgCiAgICAgNjYsIDY2LCA4NSwgNzksIDg4LCAxMjgsIDY2LCA2NiwgODUsIDc5LCA4MCwgMTI4LCA2NiwgNjYsIDg1LCA3OSwgMTI4LCAKICAgICA2NiwgNjYsIDg1LCAxMjgsIDY2LCA2NiwgNzksIDg4LCAxMjgsIDY2LCA2NiwgNzksIDg0LCAxMjgsIDY2LCA2NiwgNzksIAotICAgIDgwLCAxMjgsIDY2LCA2NiwgNzksIDEyOCwgNjYsIDY2LCA3MywgODgsIDEyOCwgNjYsIDY2LCA3MywgODQsIDEyOCwgNjYsIAotICAgIDY2LCA3MywgODAsIDEyOCwgNjYsIDY2LCA3MywgNjksIDg4LCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4NCwgMTI4LCA2NiwgCi0gICAgNjYsIDczLCA2OSwgODAsIDEyOCwgNjYsIDY2LCA3MywgNjksIDEyOCwgNjYsIDY2LCA3MywgMTI4LCA2NiwgNjYsIDY5LCAKLSAgICA4OCwgMTI4LCA2NiwgNjYsIDY5LCA4MCwgMTI4LCA2NiwgNjYsIDY5LCAxMjgsIDY2LCA2NiwgNjUsIDg4LCAxMjgsIDY2LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDY2LCA2NiwgNjUsIDgwLCAxMjgsIDY2LCA2NiwgNjUsIDEyOCwgNjYsIDY1LCA4OSwgNjUsIAotICAgIDc4LCA3OCwgNjUsIDEyOCwgNjYsIDY1LCA4NCwgNzIsIDg0LCA4NSwgNjYsIDEyOCwgNjYsIDY1LCA4NCwgNzIsIDY1LCA3NywgCi0gICAgNjUsIDgzLCA2NSwgODQsIDEyOCwgNjYsIDY1LCA4MywgODMsIDY1LCAxMjgsIDY2LCA2NSwgODMsIDcyLCA3NSwgNzMsIAotICAgIDIxMCwgNjYsIDY1LCA4MywgNjksIDEyOCwgNjYsIDY1LCA4MywgMTk3LCA2NiwgNjUsIDgyLCA4MywgMTI4LCA2NiwgNjUsIAotICAgIDgyLCA4MiwgNzMsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDc1LCA3MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgCi0gICAgNjksIDY5LCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk3LCA2NiwgNjUsIDgyLCA3NiwgNzMsIDc4LCA2OSwgMTI4LCAKLSAgICA2NiwgNjUsIDgyLCA3NiwgNjksIDg5LCAxMjgsIDY2LCA2NSwgODIsIDczLCA4OSwgNzksIDc5LCA4MywgNjUsIDc4LCAxMjgsIAotICAgIDY2LCA2NSwgODIsIDY1LCA1MCwgMTI4LCA2NiwgNjUsIDIxMCwgNjYsIDY1LCA3OCwgODQsIDc5LCA2NywgMTI4LCA2NiwgCi0gICAgNjUsIDc4LCAyMDMsIDY2LCA2NSwgNzgsIDY4LCAxMjgsIDY2LCA2NSwgNzgsIDUwLCAxMjgsIDY2LCA2NSwgNzgsIDE3OCwgCi0gICAgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgODMsIDEyOCwgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA2NiwgNjUsIDc2LCAKLSAgICA4NSwgNjgsIDY1LCAxMjgsIDY2LCA2NSwgNzYsIDc2LCA3OSwgMjEyLCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgNDUsIAotICAgIDgzLCA4MCwgNzksIDc1LCA2OSwgMTk2LCA2NiwgNjUsIDc2LCA2NSwgNzEsIDEyOCwgNjYsIDY1LCA3NiwgMTI4LCA2NiwgCi0gICAgNjUsIDIwNCwgNjYsIDY1LCA3MywgODIsIDc1LCA2NSwgNzgsIDEyOCwgNjYsIDY1LCA3MywgNzcsIDY1LCA3MywgMTI4LCAKLSAgICA2NiwgNjUsIDcyLCA4NCwgMTI4LCA2NiwgNjUsIDcyLCA2NSwgODIsIDUwLCAxMjgsIDY2LCA2NSwgNzEsIDY1LCAxMjgsIAotICAgIDY2LCA2NSwgNzEsIDUxLCAxMjgsIDY2LCA2NSwgMTk5LCA2NiwgNjUsIDY4LCA3MSwgNjksIDgyLCAxMjgsIDY2LCA2NSwgCi0gICAgNjgsIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCA4MCwgNjUsIDY3LCA2OSwgMTI4LCA2NiwgNjUsIDY3LCA3NSwgODMsIDc2LCAKLSAgICA2NSwgODMsIDcyLCAxMjgsIDY2LCA2NSwgNjcsIDc1LCA4MywgNzYsIDY1LCA4MywgMjAwLCA2NiwgNjUsIDY3LCA3NSwgNDUsIAotICAgIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA2NiwgNjUsIDY3LCA3NSwgMTI4LCA2NiwgNjUsIDY3LCAyMDMsIDY2LCA2NSwgCi0gICAgNjUsIDgyLCA2OSwgODIsIDg1LCAxMjgsIDY2LCA2NSwgNjUsIDEyOCwgNjYsIDUxLCA0OCwgNTMsIDEyOCwgNjYsIDUwLCAKLSAgICA1MywgNTcsIDEyOCwgNjYsIDUwLCA1MywgNTYsIDEyOCwgNjYsIDUwLCA1MywgNTUsIDEyOCwgNjYsIDUwLCA1MywgNTQsIAotICAgIDEyOCwgNjYsIDUwLCA1MywgNTMsIDEyOCwgNjYsIDUwLCA1MywgMTgwLCA2NiwgNTAsIDUzLCA1MSwgMTI4LCA2NiwgNTAsIAotICAgIDUzLCA1MCwgMTI4LCA2NiwgNTAsIDUzLCA0OSwgMTI4LCA2NiwgNTAsIDUzLCA0OCwgMTI4LCA2NiwgNTAsIDUyLCA1NywgCi0gICAgMTI4LCA2NiwgNTAsIDUyLCA1NiwgMTI4LCA2NiwgNTAsIDUyLCAxODMsIDY2LCA1MCwgNTIsIDU0LCAxMjgsIDY2LCA1MCwgCi0gICAgNTIsIDUzLCAxMjgsIDY2LCA1MCwgNTIsIDE3OSwgNjYsIDUwLCA1MiwgMTc4LCA2NiwgNTAsIDUyLCAxNzcsIDY2LCA1MCwgCi0gICAgNTIsIDE3NiwgNjYsIDUwLCA1MSwgNTQsIDEyOCwgNjYsIDUwLCA1MSwgNTIsIDEyOCwgNjYsIDUwLCA1MSwgMTc5LCA2NiwgCi0gICAgNTAsIDUxLCA1MCwgMTI4LCA2NiwgNTAsIDUxLCAxNzcsIDY2LCA1MCwgNTEsIDE3NiwgNjYsIDUwLCA1MCwgNTcsIDEyOCwgCi0gICAgNjYsIDUwLCA1MCwgNTYsIDEyOCwgNjYsIDUwLCA1MCwgNTUsIDEyOCwgNjYsIDUwLCA1MCwgNTQsIDEyOCwgNjYsIDUwLCAKLSAgICA1MCwgMTgxLCA2NiwgNTAsIDUwLCA1MCwgMTI4LCA2NiwgNTAsIDUwLCA0OSwgMTI4LCA2NiwgNTAsIDUwLCAxNzYsIDY2LCAKLSAgICA1MCwgNDksIDU3LCAxMjgsIDY2LCA1MCwgNDksIDU2LCAxMjgsIDY2LCA1MCwgNDksIDU1LCAxMjgsIDY2LCA1MCwgNDksIAotICAgIDU0LCAxMjgsIDY2LCA1MCwgNDksIDUzLCAxMjgsIDY2LCA1MCwgNDksIDUyLCAxMjgsIDY2LCA1MCwgNDksIDUxLCAxMjgsIAotICAgIDY2LCA1MCwgNDksIDUwLCAxMjgsIDY2LCA1MCwgNDksIDQ5LCAxMjgsIDY2LCA1MCwgNDksIDQ4LCAxMjgsIDY2LCA1MCwgCi0gICAgNDgsIDU3LCAxMjgsIDY2LCA1MCwgNDgsIDU2LCAxMjgsIDY2LCA1MCwgNDgsIDU1LCAxMjgsIDY2LCA1MCwgNDgsIDU0LCAKLSAgICAxMjgsIDY2LCA1MCwgNDgsIDUzLCAxMjgsIDY2LCA1MCwgNDgsIDUyLCAxMjgsIDY2LCA1MCwgNDgsIDUxLCAxMjgsIDY2LCAKLSAgICA1MCwgNDgsIDUwLCAxMjgsIDY2LCA1MCwgNDgsIDQ5LCAxMjgsIDY2LCA1MCwgNDgsIDQ4LCAxMjgsIDY2LCA0OSwgNTcsIAotICAgIDE3NywgNjYsIDQ5LCA1NywgNDgsIDEyOCwgNjYsIDQ5LCA1NiwgNTcsIDEyOCwgNjYsIDQ5LCA1NiwgNTMsIDEyOCwgNjYsIAotICAgIDQ5LCA1NiwgNTIsIDEyOCwgNjYsIDQ5LCA1NiwgNTEsIDEyOCwgNjYsIDQ5LCA1NiwgNTAsIDEyOCwgNjYsIDQ5LCA1NiwgCi0gICAgNDksIDEyOCwgNjYsIDQ5LCA1NiwgNDgsIDEyOCwgNjYsIDQ5LCA1NSwgNTcsIDEyOCwgNjYsIDQ5LCA1NSwgNTYsIDEyOCwgCi0gICAgNjYsIDQ5LCA1NSwgNTUsIDEyOCwgNjYsIDQ5LCA1NSwgMTgyLCA2NiwgNDksIDU1LCA1MiwgMTI4LCA2NiwgNDksIDU1LCAKLSAgICAxNzksIDY2LCA0OSwgNTUsIDUwLCAxMjgsIDY2LCA0OSwgNTUsIDQ5LCAxMjgsIDY2LCA0OSwgNTUsIDQ4LCAxMjgsIDY2LCAKLSAgICA0OSwgNTQsIDU3LCAxMjgsIDY2LCA0OSwgNTQsIDU2LCAxMjgsIDY2LCA0OSwgNTQsIDU1LCAxMjgsIDY2LCA0OSwgNTQsIAotICAgIDU0LCAxMjgsIDY2LCA0OSwgNTQsIDUzLCAxMjgsIDY2LCA0OSwgNTQsIDUyLCAxMjgsIDY2LCA0OSwgNTQsIDE3OSwgNjYsIAotICAgIDQ5LCA1NCwgMTc4LCA2NiwgNDksIDU0LCA0OSwgMTI4LCA2NiwgNDksIDU0LCA0OCwgMTI4LCA2NiwgNDksIDUzLCAxODUsIAotICAgIDY2LCA0OSwgNTMsIDU2LCAxMjgsIDY2LCA0OSwgNTMsIDU1LCAxMjgsIDY2LCA0OSwgNTMsIDE4MiwgNjYsIDQ5LCA1MywgCi0gICAgNTMsIDEyOCwgNjYsIDQ5LCA1MywgNTIsIDEyOCwgNjYsIDQ5LCA1MywgNTEsIDEyOCwgNjYsIDQ5LCA1MywgNTAsIDEyOCwgCi0gICAgNjYsIDQ5LCA1MywgMTc3LCA2NiwgNDksIDUzLCA0OCwgMTI4LCA2NiwgNDksIDUyLCA1NCwgMTI4LCA2NiwgNDksIDUyLCAKLSAgICAxODEsIDY2LCA0OSwgNTIsIDUwLCAxMjgsIDY2LCA0OSwgNTIsIDE3NywgNjYsIDQ5LCA1MiwgMTc2LCA2NiwgNDksIDUxLCAKLSAgICAxODEsIDY2LCA0OSwgNTEsIDE3OSwgNjYsIDQ5LCA1MSwgNTAsIDEyOCwgNjYsIDQ5LCA1MSwgMTc3LCA2NiwgNDksIDUxLCAKLSAgICAxNzYsIDY2LCA0OSwgNTAsIDE4NCwgNjYsIDQ5LCA1MCwgMTgzLCA2NiwgNDksIDUwLCAxODEsIDY2LCA0OSwgNTAsIDE3OSwgCi0gICAgNjYsIDQ5LCA1MCwgMTc4LCA2NiwgNDksIDUwLCAxNzcsIDY2LCA0OSwgNTAsIDE3NiwgNjYsIDQ5LCA0OCwgNTcsIDIwNSwgCi0gICAgNjYsIDQ5LCA0OCwgNTcsIDE5OCwgNjYsIDQ5LCA0OCwgNTYsIDIwNSwgNjYsIDQ5LCA0OCwgNTYsIDE5OCwgNjYsIDQ5LCAKLSAgICA0OCwgNTUsIDIwNSwgNjYsIDQ5LCA0OCwgNTUsIDE5OCwgNjYsIDQ5LCA0OCwgNTQsIDIwNSwgNjYsIDQ5LCA0OCwgNTQsIAotICAgIDE5OCwgNjYsIDQ5LCA0OCwgNTMsIDIwNSwgNjYsIDQ5LCA0OCwgNTMsIDE5OCwgNjYsIDQ5LCA0OCwgMTgxLCA2NiwgNDksIAotICAgIDQ4LCAxODAsIDY2LCA0OSwgNDgsIDE3OCwgNjYsIDQ5LCA0OCwgMTc2LCA2NiwgNDgsIDU3LCAxNzcsIDY2LCA0OCwgNTcsIAotICAgIDE3NiwgNjYsIDQ4LCA1NiwgNTcsIDEyOCwgNjYsIDQ4LCA1NiwgMTgzLCA2NiwgNDgsIDU2LCA1NCwgMTI4LCA2NiwgNDgsIAotICAgIDU2LCAxODEsIDY2LCA0OCwgNTYsIDUxLCAxMjgsIDY2LCA0OCwgNTYsIDUwLCAxMjgsIDY2LCA0OCwgNTYsIDE3NywgNjYsIAotICAgIDQ4LCA1NiwgMTc2LCA2NiwgNDgsIDU1LCA1NywgMTI4LCA2NiwgNDgsIDU1LCAxODQsIDY2LCA0OCwgNTUsIDE4MywgNjYsIAotICAgIDQ4LCA1NSwgMTgyLCA2NiwgNDgsIDU1LCAxODEsIDY2LCA0OCwgNTUsIDE4MCwgNjYsIDQ4LCA1NSwgMTc5LCA2NiwgNDgsIAotICAgIDU1LCAxNzgsIDY2LCA0OCwgNTUsIDE3NywgNjYsIDQ4LCA1NSwgMTc2LCA2NiwgNDgsIDU0LCAxODUsIDY2LCA0OCwgNTQsIAotICAgIDE4NCwgNjYsIDQ4LCA1NCwgMTgzLCA2NiwgNDgsIDU0LCAxODIsIDY2LCA0OCwgNTQsIDE4MSwgNjYsIDQ4LCA1NCwgNTIsIAotICAgIDEyOCwgNjYsIDQ4LCA1NCwgNTEsIDEyOCwgNjYsIDQ4LCA1NCwgMTc4LCA2NiwgNDgsIDU0LCAxNzcsIDY2LCA0OCwgNTQsIAotICAgIDE3NiwgNjYsIDQ4LCA1MywgMTg1LCA2NiwgNDgsIDUzLCAxODQsIDY2LCA0OCwgNTMsIDE4MywgNjYsIDQ4LCA1MywgNTQsIAotICAgIDEyOCwgNjYsIDQ4LCA1MywgMTgxLCA2NiwgNDgsIDUzLCAxODAsIDY2LCA0OCwgNTMsIDE3OSwgNjYsIDQ4LCA1MywgMTc4LCAKLSAgICA2NiwgNDgsIDUzLCAxNzcsIDY2LCA0OCwgNTMsIDE3NiwgNjYsIDQ4LCA1MiwgNTcsIDEyOCwgNjYsIDQ4LCA1MiwgMTg0LCAKLSAgICA2NiwgNDgsIDUyLCA1NSwgMTI4LCA2NiwgNDgsIDUyLCAxODIsIDY2LCA0OCwgNTIsIDE4MSwgNjYsIDQ4LCA1MiwgMTgwLCAKLSAgICA2NiwgNDgsIDUyLCAxNzksIDY2LCA0OCwgNTIsIDE3OCwgNjYsIDQ4LCA1MiwgMTc3LCA2NiwgNDgsIDUyLCAxNzYsIDY2LCAKLSAgICA0OCwgNTEsIDE4NSwgNjYsIDQ4LCA1MSwgMTg0LCA2NiwgNDgsIDUxLCAxODMsIDY2LCA0OCwgNTEsIDE4MiwgNjYsIDQ4LCAKLSAgICA1MSwgNTIsIDEyOCwgNjYsIDQ4LCA1MSwgMTc5LCA2NiwgNDgsIDUxLCAxNzgsIDY2LCA0OCwgNTEsIDE3NywgNjYsIDQ4LCAKLSAgICA1MSwgMTc2LCA2NiwgNDgsIDUwLCAxODUsIDY2LCA0OCwgNTAsIDE4NCwgNjYsIDQ4LCA1MCwgMTgzLCA2NiwgNDgsIDUwLCAKLSAgICAxODIsIDY2LCA0OCwgNTAsIDE4MSwgNjYsIDQ4LCA1MCwgMTgwLCA2NiwgNDgsIDUwLCAxNzksIDY2LCA0OCwgNTAsIDUwLCAKLSAgICAxMjgsIDY2LCA0OCwgNTAsIDE3NywgNjYsIDQ4LCA1MCwgMTc2LCA2NiwgNDgsIDQ5LCA1NywgMTI4LCA2NiwgNDgsIDQ5LCAKLSAgICA1NiwgMTI4LCA2NiwgNDgsIDQ5LCAxODMsIDY2LCA0OCwgNDksIDE4MiwgNjYsIDQ4LCA0OSwgMTgxLCA2NiwgNDgsIDQ5LCAKLSAgICAxODAsIDY2LCA0OCwgNDksIDE3OSwgNjYsIDQ4LCA0OSwgMTc4LCA2NiwgNDgsIDQ5LCAxNzcsIDY2LCA0OCwgNDksIDE3NiwgCi0gICAgNjYsIDQ4LCA0OCwgMTg1LCA2NiwgNDgsIDQ4LCAxODQsIDY2LCA0OCwgNDgsIDE4MywgNjYsIDQ4LCA0OCwgMTgyLCA2NiwgCi0gICAgNDgsIDQ4LCAxODEsIDY2LCA0OCwgNDgsIDE4MCwgNjYsIDQ4LCA0OCwgMTc5LCA2NiwgNDgsIDQ4LCAxNzgsIDY2LCA0OCwgCi0gICAgNDgsIDE3NywgNjUsIDkwLCA4NSwgMTI4LCA2NSwgODksIDY5LCAyMTAsIDY1LCA4OSwgNjYsIDEyOCwgNjUsIDg5LCA2NSwgCi0gICAgNzIsIDEyOCwgNjUsIDg4LCA2OSwgMTI4LCA2NSwgODcsIDY5LCAxMjgsIDY1LCA4NiwgNjksIDgyLCA2NSwgNzEsIDE5NywgCi0gICAgNjUsIDg2LCA2NSwgNzUsIDgyLCA2NSwgNzIsIDY1LCA4MywgNjUsIDc4LCA4OSwgNjUsIDEyOCwgNjUsIDg2LCA2NSwgNzEsIAotICAgIDgyLCA2NSwgNzIsIDY1LCAxMjgsIDY1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA4NSwgODQsIDg1LCA3NywgCi0gICAgNzgsIDEyOCwgNjUsIDg1LCA4MywgODQsIDgyLCA2NSwgMjA0LCA2NSwgODUsIDgyLCA2NSwgNzcsIDY1LCA5MCwgNjgsIDY1LCAKLSAgICA2NSwgNzIsIDY1LCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCA0NSwgNTAsIDEyOCwgNjUsIAotICAgIDg1LCA4MiwgNjUsIDc3LCA2NSwgOTAsIDY4LCA2NSwgNjUsIDEyOCwgNjUsIDg1LCA3OCwgNzgsIDEyOCwgNjUsIDg1LCA3MSwgCi0gICAgODUsIDgzLCA4NCwgMTI4LCA2NSwgODUsIDcxLCA3NywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDg1LCAKLSAgICA2OSwgMTI4LCA2NSwgODQsIDg0LCA3MywgMTk1LCA2NSwgODQsIDg0LCA3MiwgNjUsIDY3LCA2NSwgNzgsIDEyOCwgNjUsIAotICAgIDg0LCA4NCwgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODQsIDg0LCA2NSwgMjAzLCA2NSwgODQsIDc5LCAKLSAgICAyMDUsIDY1LCA4NCwgNzgsIDY1LCAyMDAsIDY1LCA4NCwgNzIsIDY1LCA4MCwgNjUsIDgzLCA2NywgNjUsIDIwNiwgNjUsIAotICAgIDgzLCA4OSwgODUsIDgyLCAxOTMsIDY1LCA4MywgODksIDc3LCA4MCwgODQsIDc5LCA4NCwgNzMsIDY3LCA2NSwgNzYsIDc2LCAKLSAgICAyMTcsIDY1LCA4MywgODQsIDgyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA2NSwgODMsIDg0LCA2OSwgODIsIAotICAgIDczLCA4MywgNzcsIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc1LCAyMTEsIDY1LCA4MywgODQsIDY5LCA4MiwgCi0gICAgNzMsIDgzLCA3NSwgMTI4LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgMjAzLCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCAKLSAgICA4MywgNjcsIDg1LCA4MywgMTI4LCA2NSwgODMsIDgzLCA4OSwgODIsIDczLCA2NSwgMjA2LCA2NSwgODMsIDgzLCA2OSwgODIsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MywgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgODMsIDcyLCA3MSwgCi0gICAgNjUsIDY2LCAxMjgsIDY1LCA4MywgNzIsIDU3LCAxMjgsIDY1LCA4MywgNzIsIDE3OCwgNjUsIDgzLCA2NywgNjksIDc4LCAKLSAgICA4NCwgMTI4LCA2NSwgODMsIDY3LCA2OSwgNzgsIDY4LCA3MywgNzgsIDE5OSwgNjUsIDgzLCA2NSwgNzYsIDUwLCAxMjgsIAotICAgIDY1LCA4MiwgODUsIDcyLCA4NSwgNjUsIDEyOCwgNjUsIDgyLCA4NCwgNjUsIDY2LCAxOTcsIDY1LCA4MiwgODMsIDY5LCA3OSwgCi0gICAgODMsIDEyOCwgNjUsIDgyLCA4MywgNjksIDc5LCAyMTEsIDY1LCA4MiwgODIsIDc5LCA4NywgODMsIDEyOCwgNjUsIDgyLCAKLSAgICA4MiwgNzksIDg3LCA3MiwgNjksIDY1LCA2OCwgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDcyLCA2OSwgNjUsIDE5NiwgNjUsIAotICAgIDgyLCA4MiwgNzksIDg3LCA0NSwgODQsIDY1LCA3MywgNzYsIDEyOCwgNjUsIDgyLCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2NSwgCi0gICAgODIsIDgyLCA2NSwgODksIDEyOCwgNjUsIDgyLCA4MCwgNjksIDcxLCA3MSwgNzMsIDY1LCA4NCwgMjA3LCA2NSwgODIsIDc5LCAKLSAgICA4NSwgODMsIDczLCA3OCwgMTk5LCA2NSwgODIsIDc5LCA4NSwgODIsIDE5MywgNjUsIDgyLCA3OSwgODUsIDc4LCA2OCwgNDUsIAotICAgIDgwLCA4MiwgNzksIDcwLCA3MywgNzYsIDY5LCAxMjgsIDY1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCA2NSwgODIsIDc3LCA4OSwgCi0gICAgMTI4LCA2NSwgODIsIDc3LCA3OSwgODUsIDgyLCAxMjgsIDY1LCA4MiwgMjA1LCA2NSwgODIsIDc2LCA2NSwgODUsIDE5OSwgCi0gICAgNjUsIDgyLCA3NSwgODQsIDczLCA3NSwgMjA3LCA2NSwgODIsIDc1LCA2NSwgNjYsIDEyOCwgNjUsIDgyLCA3MywgODMsIDg0LCAKLSAgICA2OSwgODIsIDY1LCAxMjgsIDY1LCA4MiwgNzMsIDgzLCA4NCwgNjksIDgyLCAxOTMsIDY1LCA4MiwgNzMsIDY5LCA4MywgCi0gICAgMTI4LCA2NSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNjUsIDgyLCA3MSwgNzksIDgzLCA4OSwgNzgsIDg0LCAKLSAgICA3MiwgNjksIDg0LCA3OSwgNzgsIDEyOCwgNjUsIDgyLCA3MSwgNzMsIDEyOCwgNjUsIDgyLCA2OSwgODAsIDY1LCAxMjgsIAotICAgIDY1LCA4MiwgNjcsIDcyLCA2NSwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCA3OSwgMjA2LCA2NSwgCi0gICAgODIsIDY3LCA3MiwgNjUsIDczLCAxOTUsIDY1LCA4MiwgNjcsIDIwMCwgNjUsIDgyLCA2NywgMTI4LCA2NSwgODIsIDE5NSwgCi0gICAgNjUsIDgyLCA2NSwgNjksIDY1LCA2OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA4NSwgMTI4LCA2NSwgODIsIDY1LCAKLSAgICA2OSwgNjUsIDQ1LCA3MywgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2OSwgNzksIDEyOCwgNjUsIDgyLCA2NSwgNjgsIAotICAgIDEyOCwgNjUsIDgyLCA2NSwgMTk2LCA2NSwgODIsIDY1LCA2NiwgNzMsIDY3LCA0NSwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgCi0gICAgNjUsIDgyLCA0NSwgODIsIDY1LCA3MiwgNzcsIDY1LCAyMDYsIDY1LCA4MiwgNDUsIDgyLCA2NSwgNzIsIDY5LCA2OSwgNzcsIAotICAgIDEyOCwgNjUsIDgxLCA4NSwgNjUsIDgyLCA3MywgODUsIDgzLCAxMjgsIDY1LCA4MCwgODIsIDczLCA3NiwgMTI4LCA2NSwgCi0gICAgODAsIDgwLCA4MiwgNzksIDg4LCA3MywgNzcsIDY1LCA4NCwgNjksIDc2LCAyMTcsIDY1LCA4MCwgODAsIDgyLCA3OSwgODgsIAotICAgIDczLCA3NywgNjUsIDg0LCA2OSwgMTI4LCA2NSwgODAsIDgwLCA4MiwgNzksIDY1LCA2NywgNzIsIDY5LCAyMTEsIDY1LCA4MCwgCi0gICAgODAsIDgyLCA3OSwgNjUsIDY3LCA3MiwgMTI4LCA2NSwgODAsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgODMsIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgNzcsIDY1LCAKLSAgICAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA4MCwgNzIsIDY5LCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIAotICAgIDc5LCA3MCwgNzksIDgzLCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDIxMSwgNjUsIDgwLCA3OSwgCi0gICAgODMsIDg0LCA4MiwgNzksIDcwLCA3OSwgMjAxLCA2NSwgODAsIDc5LCA2OCwgNjksIDg4LCA3MywgNjUsIDEyOCwgNjUsIDgwLCAKLSAgICA3OSwgNjgsIDY5LCA4MiwgNzcsIDE5MywgNjUsIDgwLCA3NiwgNzksIDg1LCA3OCwgMTI4LCA2NSwgODAsIDc2LCAyMDEsIAotICAgIDY1LCA4MCwgNzMsIDc4LCAxMjgsIDY1LCA4MCwgNjksIDgzLCAyMDcsIDY1LCA4MCwgNjUsIDgyLCA4NCwgMTI4LCA2NSwgCi0gICAgODAsIDY1LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgODksIDY1LCAxMjgsIDY1LCAKLSAgICA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgMTkzLCA2NSwgNzgsIAotICAgIDg1LCA2OCwgNjUsIDg0LCA4NCwgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCAKLSAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzUsIDY5LCA3OCwgNzksIDc3LCA2NSwgMTI4LCA2NSwgNzgsIAotICAgIDg0LCA3MywgNzUsIDY5LCA3OCwgNzksIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDY1LCA3OCwgODQsIDczLCAKLSAgICA3MCwgNzksIDc4LCA3MywgNjUsIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDY3LCA3NiwgNzksIDY3LCA3NSwgODcsIDczLCA4MywgCi0gICAgNjksIDQ1LCA4MiwgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3OCwgODQsIDczLCA2NywgNzYsIDc5LCA2NywgNzUsIAotICAgIDg3LCA3MywgODMsIDE5NywgNjUsIDc4LCA4MywgODUsIDIxOCwgNjUsIDc4LCA4MywgNzIsIDY5LCAxMjgsIDY1LCA3OCwgCi0gICAgODAsIDY5LCA2NSwgMTI4LCA2NSwgNzgsIDIwNywgNjUsIDc4LCA3OCwgODUsIDczLCA4NCwgMjE3LCA2NSwgNzgsIDc4LCAKLSAgICA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDY1LCA3OCwgNzUsIDcyLCAxMjgsIDY1LCA3OCwgNzIsIDg1LCAxMjgsIAotICAgIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDgyLCAxMjgsIDY1LCA3OCwgNzEsIDgzLCA4NCwgODIsIDc5LCAyMDUsIDY1LCA3OCwgCi0gICAgNzEsIDc1LCA3MiwgNjUsIDc4LCA3NSwgNzIsIDg1LCAxMjgsIDY1LCA3OCwgNjcsIDc5LCA4MiwgNjUsIDEyOCwgNjUsIDc4LCAKLSAgICA2NywgNzIsIDc5LCA4MiwgMTI4LCA2NSwgNzgsIDY1LCA4NCwgODIsIDczLCA2NywgNzIsIDczLCA4MywgNzcsIDY1LCAxMjgsIAotICAgIDY1LCA3NywgODAsIDgzLCAxMjgsIDY1LCA3NywgODAsIDY5LCA4MiwgODMsIDY1LCA3OCwgNjgsIDEyOCwgNjUsIDc3LCA3OSwgCi0gICAgODUsIDc4LCAyMTIsIDY1LCA3NywgNjYsIDE5MywgNjUsIDc3LCA2NSwgODIsIDEyOCwgNjUsIDc3LCA2NSwgMjEwLCA2NSwgCi0gICAgNzcsIDY1LCA3NiwgNzEsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDc2LCA4NiwgNjksIDc5LCA3NiwgNjUsIAotICAgIDIxMCwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCA3MywgODYsIDE5NywgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgCi0gICAgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDc2LCA4NCwgNjksIDgyLCA3OCwgNjUsIDg0LCAxOTcsIDY1LCA3NiwgODQsIDY1LCAKLSAgICAxMjgsIDY1LCA3NiwgODAsIDcyLCA2NSwgMTI4LCA2NSwgNzYsIDgwLCA3MiwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgODAsIAotICAgIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA2NSwgNzgsIDE5MywgNjUsIDc2LCA4MCwgCi0gICAgNjUsIDEyOCwgNjUsIDc2LCA3NywgNzksIDgzLCAyMTIsIDY1LCA3NiwgNzYsIDc5LCAxMjgsIDY1LCA3NiwgNzYsIDczLCAKLSAgICA2NSwgNzgsIDY3LCA2OSwgMTI4LCA2NSwgNzYsIDc2LCAyMDEsIDY1LCA3NiwgNzYsIDY1LCAyMDAsIDY1LCA3NiwgNzMsIAotICAgIDcxLCA3OCwgNjksIDE5NiwgNjUsIDc2LCA3MywgNzAsIDg1LCAxMjgsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgCi0gICAgNzAsIDY1LCAxMjgsIDY1LCA3NiwgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCAKLSAgICA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIAotICAgIDY1LCA3NiwgNjUsIDg5LCA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA0NSwgNzYsIDY1LCA3NSwgCi0gICAgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCAKLSAgICA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgCi0gICAgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCAKLSAgICA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCA3OCwgCi0gICAgMTI4LCA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgNzIsIDg2LCAKLSAgICA4NSwgODMsIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MiwgNjUsIAotICAgIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIDcxLCA3OSwgNzEsIDIwMSwgNjUsIDcxLCA3MSwgCi0gICAgODIsIDY1LCA4NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA3MSwgNjUsIDczLCA3OCwgMTI4LCA2NSwgNzAsIDg0LCAKLSAgICA2OSwgMjEwLCA2NSwgNzAsIDgyLCA3MywgNjcsIDY1LCAyMDYsIDY1LCA3MCwgNzksIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDczLCA3OSwgNzgsIDY5LCA2OCwgMTI4LCA2NSwgNzAsIDcxLCA3MiwgNjUsIDc4LCAyMDEsIDY1LCA2OSwgODksIDY1LCA3OCwgCi0gICAgNzgsIDY1LCAxMjgsIDY1LCA2OSwgODMsIDY3LCA4NSwgNzYsIDY1LCA4MCwgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCAKLSAgICA2NywgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY5LCA4OSwgNjUsIAotICAgIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDE5NywgCi0gICAgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCAKLSAgICA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgNjUsIDY4LCA2OCwgNjUsIDc1LCAxMjgsIDY1LCA2OCwgNjUsIAotICAgIDIwMywgNjUsIDY3LCA4NSwgODQsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgCi0gICAgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDEyOCwgNjUsIDY3LCA4NSwgODQsIAotICAgIDE5NywgNjUsIDY3LCA4NCwgODUsIDY1LCA3NiwgNzYsIDIxNywgNjUsIDY3LCA4NCwgNzMsIDg2LCA2NSwgODQsIDE5NywgCi0gICAgNjUsIDY3LCA4MiwgNzksIDgwLCA3MiwgNzksIDc4LCA3MywgMTk1LCA2NSwgNjcsIDc1LCA3OCwgNzksIDg3LCA3NiwgNjksIAotICAgIDY4LCA3MSwgNjksIDEyOCwgNjUsIDY3LCA2NywgODUsIDc3LCA4NSwgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgCi0gICAgNjcsIDY3LCA3OSwgODUsIDc4LCAyMTIsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIAotICAgIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDIxMiwgCi0gICAgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCA4MywgNzcsIDY1LCAyMDQsIDY1LCA2NiwgODUsIDc4LCAKLSAgICA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIDY1LCA4MywgNzMsIDY1LCAyMDYsIDY1LCA2NiwgNjYsIAotICAgIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNjYsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgCi0gICAgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY1LCA4OSwgMTI4LCA2NSwgNjUsIDg3LCAKLSAgICAxMjgsIDY1LCA2NSwgNzcsIDEyOCwgNjUsIDY1LCA3NSwgMTI4LCA2NSwgNjUsIDc0LCAxMjgsIDY1LCA2NSwgNjYsIDY1LCAKLSAgICA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCA0NSwgNzUsIAotICAgIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgMTk2LCA0NSwgCi0gICAgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCisgICAgODAsIDEyOCwgNjYsIDY2LCA3OSwgMTI4LCA2NiwgNjYsIDczLCA4OCwgMTI4LCA2NiwgNjYsIDczLCA4MCwgMTI4LCA2NiwgCisgICAgNjYsIDczLCA2OSwgODgsIDEyOCwgNjYsIDY2LCA3MywgNjksIDg0LCAxMjgsIDY2LCA2NiwgNzMsIDY5LCA4MCwgMTI4LCAKKyAgICA2NiwgNjYsIDczLCA2OSwgMTI4LCA2NiwgNjYsIDczLCAxMjgsIDY2LCA2NiwgNjksIDg4LCAxMjgsIDY2LCA2NiwgNjksIAorICAgIDgwLCAxMjgsIDY2LCA2NiwgNjksIDY5LCAxMjgsIDY2LCA2NiwgNjksIDEyOCwgNjYsIDY2LCA2NSwgODgsIDEyOCwgNjYsIAorICAgIDY2LCA2NSwgODQsIDEyOCwgNjYsIDY2LCA2NSwgODAsIDEyOCwgNjYsIDY2LCA2NSwgNjUsIDEyOCwgNjYsIDY2LCA2NSwgCisgICAgMTI4LCA2NiwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NiwgNjUsIDg1LCAxMjgsIDY2LCA2NSwgODQsIDg0LCAKKyAgICA2OSwgODIsIDg5LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA4NCwgODUsIDY2LCAxMjgsIDY2LCA2NSwgODQsIDcyLCA2NSwgNzcsIAorICAgIDY1LCA4MywgNjUsIDg0LCAxMjgsIDY2LCA2NSwgODQsIDcyLCAxMjgsIDY2LCA2NSwgODQsIDIwMCwgNjYsIDY1LCA4NCwgCisgICAgNjUsIDIwMywgNjYsIDY1LCA4MywgODMsIDY1LCAxMjgsIDY2LCA2NSwgODMsIDc1LCA2OSwgODQsIDY2LCA2NSwgNzYsIAorICAgIDIwNCwgNjYsIDY1LCA4MywgNzIsIDc1LCA3MywgMjEwLCA2NiwgNjUsIDgzLCA3MiwgMTI4LCA2NiwgNjUsIDgzLCA2OSwgCisgICAgNjYsIDY1LCA3NiwgNzYsIDEyOCwgNjYsIDY1LCA4MywgNjksIDEyOCwgNjYsIDY1LCA4MywgMTk3LCA2NiwgNjUsIDgyLCAKKyAgICA4MywgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNzMsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDc1LCA3MiwgCisgICAgMTI4LCA2NiwgNjUsIDgyLCA4MiwgNjksIDY5LCAxMjgsIDY2LCA2NSwgODIsIDgyLCA2OSwgMTk3LCA2NiwgNjUsIDgyLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgMTI4LCA2NiwgNjUsIDgyLCA3NiwgNjksIDg5LCAxMjgsIDY2LCA2NSwgODIsIDczLCA4OSwgNzksIAorICAgIDc5LCA4MywgNjUsIDc4LCAxMjgsIDY2LCA2NSwgODIsIDY2LCA2OSwgMjEwLCA2NiwgNjUsIDgyLCA2NSwgNTAsIDEyOCwgCisgICAgNjYsIDY1LCAyMTAsIDY2LCA2NSwgNzgsIDg0LCA3OSwgNjcsIDEyOCwgNjYsIDY1LCA3OCwgNzUsIDc4LCA3OSwgODQsIAorICAgIDE5NywgNjYsIDY1LCA3OCwgNzUsIDEyOCwgNjYsIDY1LCA3OCwgMjAzLCA2NiwgNjUsIDc4LCA2OCwgMTI4LCA2NiwgNjUsIAorICAgIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDY2LCA2NSwgNzgsIDUwLCAxMjgsIDY2LCA2NSwgNzgsIDE3OCwgNjYsIDY1LCA3NywgCisgICAgNjYsIDc5LCA3OSwgODMsIDEyOCwgNjYsIDY1LCA3NywgNjYsIDc5LCA3OSwgMTI4LCA2NiwgNjUsIDc2LCA4NSwgNjgsIDY1LCAKKyAgICAxMjgsIDY2LCA2NSwgNzYsIDc2LCA3OSwgMjEyLCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgNDUsIDgzLCA4MCwgNzksIAorICAgIDc1LCA2OSwgMTk2LCA2NiwgNjUsIDc2LCA3NiwgNzksIDc5LCA3OCwgMTI4LCA2NiwgNjUsIDc2LCA2NSwgNzEsIDEyOCwgCisgICAgNjYsIDY1LCA3NiwgMTI4LCA2NiwgNjUsIDIwNCwgNjYsIDY1LCA3MywgODIsIDc1LCA2NSwgNzgsIDEyOCwgNjYsIDY1LCAKKyAgICA3MywgNzcsIDY1LCA3MywgMTI4LCA2NiwgNjUsIDcyLCA4NCwgMTI4LCA2NiwgNjUsIDcyLCA3MywgODIsIDcxLCA3OSwgNzcsIAorICAgIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDY2LCA2NSwgNzIsIDY1LCA4MiwgNTAsIDEyOCwgNjYsIDY1LCA3MSwgNzEsIDY1LCA3MSwgCisgICAgMTk3LCA2NiwgNjUsIDcxLCA2NSwgMTI4LCA2NiwgNjUsIDcxLCA1MSwgMTI4LCA2NiwgNjUsIDE5OSwgNjYsIDY1LCA2OCwgCisgICAgNzEsIDY5LCA4MiwgMTI4LCA2NiwgNjUsIDY4LCA3MSwgNjksIDEyOCwgNjYsIDY1LCA2OCwgMTI4LCA2NiwgNjUsIDY3LCAKKyAgICA4NCwgODIsIDczLCA2NSwgMjA2LCA2NiwgNjUsIDY3LCA3NSwgODMsIDgwLCA2NSwgNjcsIDY5LCAxMjgsIDY2LCA2NSwgNjcsIAorICAgIDc1LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgNjYsIDY1LCA2NywgNzUsIDgzLCA3NiwgNjUsIDgzLCAyMDAsIDY2LCA2NSwgCisgICAgNjcsIDc1LCA3MiwgNjUsIDc4LCAxOTYsIDY2LCA2NSwgNjcsIDc1LCA0NSwgODQsIDczLCA3NiwgODQsIDY5LCAxOTYsIDY2LCAKKyAgICA2NSwgNjcsIDc1LCAxMjgsIDY2LCA2NSwgNjcsIDIwMywgNjYsIDY1LCA2NiwgODksIDEyOCwgNjYsIDY1LCA2NiwgMjE3LCAKKyAgICA2NiwgNjUsIDY1LCA4MiwgNjksIDgyLCA4NSwgMTI4LCA2NiwgNTEsIDQ4LCA1MywgMTI4LCA2NiwgNTAsIDUzLCA1NywgCisgICAgMTI4LCA2NiwgNTAsIDUzLCA1NiwgMTI4LCA2NiwgNTAsIDUzLCA1NSwgMTI4LCA2NiwgNTAsIDUzLCA1NCwgMTI4LCA2NiwgCisgICAgNTAsIDUzLCA1MywgMTI4LCA2NiwgNTAsIDUzLCAxODAsIDY2LCA1MCwgNTMsIDUxLCAxMjgsIDY2LCA1MCwgNTMsIDUwLCAKKyAgICAxMjgsIDY2LCA1MCwgNTMsIDQ5LCAxMjgsIDY2LCA1MCwgNTMsIDQ4LCAxMjgsIDY2LCA1MCwgNTIsIDU3LCAxMjgsIDY2LCAKKyAgICA1MCwgNTIsIDU2LCAxMjgsIDY2LCA1MCwgNTIsIDE4MywgNjYsIDUwLCA1MiwgNTQsIDEyOCwgNjYsIDUwLCA1MiwgNTMsIAorICAgIDEyOCwgNjYsIDUwLCA1MiwgMTc5LCA2NiwgNTAsIDUyLCAxNzgsIDY2LCA1MCwgNTIsIDE3NywgNjYsIDUwLCA1MiwgMTc2LCAKKyAgICA2NiwgNTAsIDUxLCA1NCwgMTI4LCA2NiwgNTAsIDUxLCA1MiwgMTI4LCA2NiwgNTAsIDUxLCAxNzksIDY2LCA1MCwgNTEsIAorICAgIDUwLCAxMjgsIDY2LCA1MCwgNTEsIDE3NywgNjYsIDUwLCA1MSwgMTc2LCA2NiwgNTAsIDUwLCA1NywgMTI4LCA2NiwgNTAsIAorICAgIDUwLCA1NiwgMTI4LCA2NiwgNTAsIDUwLCA1NSwgMTI4LCA2NiwgNTAsIDUwLCA1NCwgMTI4LCA2NiwgNTAsIDUwLCAxODEsIAorICAgIDY2LCA1MCwgNTAsIDUwLCAxMjgsIDY2LCA1MCwgNTAsIDQ5LCAxMjgsIDY2LCA1MCwgNTAsIDE3NiwgNjYsIDUwLCA0OSwgCisgICAgNTcsIDEyOCwgNjYsIDUwLCA0OSwgNTYsIDEyOCwgNjYsIDUwLCA0OSwgNTUsIDEyOCwgNjYsIDUwLCA0OSwgNTQsIDEyOCwgCisgICAgNjYsIDUwLCA0OSwgNTMsIDEyOCwgNjYsIDUwLCA0OSwgNTIsIDEyOCwgNjYsIDUwLCA0OSwgNTEsIDEyOCwgNjYsIDUwLCAKKyAgICA0OSwgNTAsIDEyOCwgNjYsIDUwLCA0OSwgNDksIDEyOCwgNjYsIDUwLCA0OSwgNDgsIDEyOCwgNjYsIDUwLCA0OCwgNTcsIAorICAgIDEyOCwgNjYsIDUwLCA0OCwgNTYsIDEyOCwgNjYsIDUwLCA0OCwgNTUsIDEyOCwgNjYsIDUwLCA0OCwgNTQsIDEyOCwgNjYsIAorICAgIDUwLCA0OCwgNTMsIDEyOCwgNjYsIDUwLCA0OCwgNTIsIDEyOCwgNjYsIDUwLCA0OCwgNTEsIDEyOCwgNjYsIDUwLCA0OCwgCisgICAgNTAsIDEyOCwgNjYsIDUwLCA0OCwgNDksIDEyOCwgNjYsIDUwLCA0OCwgNDgsIDEyOCwgNjYsIDQ5LCA1NywgMTc3LCA2NiwgCisgICAgNDksIDU3LCA0OCwgMTI4LCA2NiwgNDksIDU2LCA1NywgMTI4LCA2NiwgNDksIDU2LCA1MywgMTI4LCA2NiwgNDksIDU2LCAKKyAgICA1MiwgMTI4LCA2NiwgNDksIDU2LCA1MSwgMTI4LCA2NiwgNDksIDU2LCA1MCwgMTI4LCA2NiwgNDksIDU2LCA0OSwgMTI4LCAKKyAgICA2NiwgNDksIDU2LCA0OCwgMTI4LCA2NiwgNDksIDU1LCA1NywgMTI4LCA2NiwgNDksIDU1LCA1NiwgMTI4LCA2NiwgNDksIAorICAgIDU1LCA1NSwgMTI4LCA2NiwgNDksIDU1LCAxODIsIDY2LCA0OSwgNTUsIDUyLCAxMjgsIDY2LCA0OSwgNTUsIDE3OSwgNjYsIAorICAgIDQ5LCA1NSwgNTAsIDEyOCwgNjYsIDQ5LCA1NSwgNDksIDEyOCwgNjYsIDQ5LCA1NSwgNDgsIDEyOCwgNjYsIDQ5LCA1NCwgCisgICAgNTcsIDEyOCwgNjYsIDQ5LCA1NCwgNTYsIDEyOCwgNjYsIDQ5LCA1NCwgNTUsIDEyOCwgNjYsIDQ5LCA1NCwgNTQsIDEyOCwgCisgICAgNjYsIDQ5LCA1NCwgNTMsIDEyOCwgNjYsIDQ5LCA1NCwgNTIsIDEyOCwgNjYsIDQ5LCA1NCwgMTc5LCA2NiwgNDksIDU0LCAKKyAgICAxNzgsIDY2LCA0OSwgNTQsIDQ5LCAxMjgsIDY2LCA0OSwgNTQsIDQ4LCAxMjgsIDY2LCA0OSwgNTMsIDE4NSwgNjYsIDQ5LCAKKyAgICA1MywgNTYsIDEyOCwgNjYsIDQ5LCA1MywgNTUsIDEyOCwgNjYsIDQ5LCA1MywgMTgyLCA2NiwgNDksIDUzLCA1MywgMTI4LCAKKyAgICA2NiwgNDksIDUzLCA1MiwgMTI4LCA2NiwgNDksIDUzLCA1MSwgMTI4LCA2NiwgNDksIDUzLCA1MCwgMTI4LCA2NiwgNDksIAorICAgIDUzLCAxNzcsIDY2LCA0OSwgNTMsIDQ4LCAxMjgsIDY2LCA0OSwgNTIsIDU0LCAxMjgsIDY2LCA0OSwgNTIsIDE4MSwgNjYsIAorICAgIDQ5LCA1MiwgNTAsIDEyOCwgNjYsIDQ5LCA1MiwgMTc3LCA2NiwgNDksIDUyLCAxNzYsIDY2LCA0OSwgNTEsIDE4MSwgNjYsIAorICAgIDQ5LCA1MSwgMTc5LCA2NiwgNDksIDUxLCA1MCwgMTI4LCA2NiwgNDksIDUxLCAxNzcsIDY2LCA0OSwgNTEsIDE3NiwgNjYsIAorICAgIDQ5LCA1MCwgMTg0LCA2NiwgNDksIDUwLCAxODMsIDY2LCA0OSwgNTAsIDE4MSwgNjYsIDQ5LCA1MCwgMTc5LCA2NiwgNDksIAorICAgIDUwLCAxNzgsIDY2LCA0OSwgNTAsIDE3NywgNjYsIDQ5LCA1MCwgMTc2LCA2NiwgNDksIDQ4LCA1NywgMjA1LCA2NiwgNDksIAorICAgIDQ4LCA1NywgMTk4LCA2NiwgNDksIDQ4LCA1NiwgMjA1LCA2NiwgNDksIDQ4LCA1NiwgMTk4LCA2NiwgNDksIDQ4LCA1NSwgCisgICAgMjA1LCA2NiwgNDksIDQ4LCA1NSwgMTk4LCA2NiwgNDksIDQ4LCA1NCwgMjA1LCA2NiwgNDksIDQ4LCA1NCwgMTk4LCA2NiwgCisgICAgNDksIDQ4LCA1MywgMjA1LCA2NiwgNDksIDQ4LCA1MywgMTk4LCA2NiwgNDksIDQ4LCAxODEsIDY2LCA0OSwgNDgsIDE4MCwgCisgICAgNjYsIDQ5LCA0OCwgMTc4LCA2NiwgNDksIDQ4LCAxNzYsIDY2LCA0OCwgNTcsIDE3NywgNjYsIDQ4LCA1NywgMTc2LCA2NiwgCisgICAgNDgsIDU2LCA1NywgMTI4LCA2NiwgNDgsIDU2LCAxODMsIDY2LCA0OCwgNTYsIDU0LCAxMjgsIDY2LCA0OCwgNTYsIDE4MSwgCisgICAgNjYsIDQ4LCA1NiwgNTEsIDEyOCwgNjYsIDQ4LCA1NiwgNTAsIDEyOCwgNjYsIDQ4LCA1NiwgMTc3LCA2NiwgNDgsIDU2LCAKKyAgICAxNzYsIDY2LCA0OCwgNTUsIDU3LCAxMjgsIDY2LCA0OCwgNTUsIDE4NCwgNjYsIDQ4LCA1NSwgMTgzLCA2NiwgNDgsIDU1LCAKKyAgICAxODIsIDY2LCA0OCwgNTUsIDE4MSwgNjYsIDQ4LCA1NSwgMTgwLCA2NiwgNDgsIDU1LCAxNzksIDY2LCA0OCwgNTUsIDE3OCwgCisgICAgNjYsIDQ4LCA1NSwgMTc3LCA2NiwgNDgsIDU1LCAxNzYsIDY2LCA0OCwgNTQsIDE4NSwgNjYsIDQ4LCA1NCwgMTg0LCA2NiwgCisgICAgNDgsIDU0LCAxODMsIDY2LCA0OCwgNTQsIDE4MiwgNjYsIDQ4LCA1NCwgMTgxLCA2NiwgNDgsIDU0LCA1MiwgMTI4LCA2NiwgCisgICAgNDgsIDU0LCA1MSwgMTI4LCA2NiwgNDgsIDU0LCAxNzgsIDY2LCA0OCwgNTQsIDE3NywgNjYsIDQ4LCA1NCwgMTc2LCA2NiwgCisgICAgNDgsIDUzLCAxODUsIDY2LCA0OCwgNTMsIDE4NCwgNjYsIDQ4LCA1MywgMTgzLCA2NiwgNDgsIDUzLCA1NCwgMTI4LCA2NiwgCisgICAgNDgsIDUzLCAxODEsIDY2LCA0OCwgNTMsIDE4MCwgNjYsIDQ4LCA1MywgMTc5LCA2NiwgNDgsIDUzLCAxNzgsIDY2LCA0OCwgCisgICAgNTMsIDE3NywgNjYsIDQ4LCA1MywgMTc2LCA2NiwgNDgsIDUyLCA1NywgMTI4LCA2NiwgNDgsIDUyLCAxODQsIDY2LCA0OCwgCisgICAgNTIsIDU1LCAxMjgsIDY2LCA0OCwgNTIsIDE4MiwgNjYsIDQ4LCA1MiwgMTgxLCA2NiwgNDgsIDUyLCAxODAsIDY2LCA0OCwgCisgICAgNTIsIDE3OSwgNjYsIDQ4LCA1MiwgMTc4LCA2NiwgNDgsIDUyLCAxNzcsIDY2LCA0OCwgNTIsIDE3NiwgNjYsIDQ4LCA1MSwgCisgICAgMTg1LCA2NiwgNDgsIDUxLCAxODQsIDY2LCA0OCwgNTEsIDE4MywgNjYsIDQ4LCA1MSwgMTgyLCA2NiwgNDgsIDUxLCA1MiwgCisgICAgMTI4LCA2NiwgNDgsIDUxLCAxNzksIDY2LCA0OCwgNTEsIDE3OCwgNjYsIDQ4LCA1MSwgMTc3LCA2NiwgNDgsIDUxLCAxNzYsIAorICAgIDY2LCA0OCwgNTAsIDE4NSwgNjYsIDQ4LCA1MCwgMTg0LCA2NiwgNDgsIDUwLCAxODMsIDY2LCA0OCwgNTAsIDE4MiwgNjYsIAorICAgIDQ4LCA1MCwgMTgxLCA2NiwgNDgsIDUwLCAxODAsIDY2LCA0OCwgNTAsIDE3OSwgNjYsIDQ4LCA1MCwgNTAsIDEyOCwgNjYsIAorICAgIDQ4LCA1MCwgMTc3LCA2NiwgNDgsIDUwLCAxNzYsIDY2LCA0OCwgNDksIDU3LCAxMjgsIDY2LCA0OCwgNDksIDU2LCAxMjgsIAorICAgIDY2LCA0OCwgNDksIDE4MywgNjYsIDQ4LCA0OSwgMTgyLCA2NiwgNDgsIDQ5LCAxODEsIDY2LCA0OCwgNDksIDE4MCwgNjYsIAorICAgIDQ4LCA0OSwgMTc5LCA2NiwgNDgsIDQ5LCAxNzgsIDY2LCA0OCwgNDksIDE3NywgNjYsIDQ4LCA0OSwgMTc2LCA2NiwgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA2NiwgNDgsIDQ4LCAxODUsIDY2LCA0OCwgNDgsIDU2LCAxMjgsIDY2LCA0OCwgNDgsIDE4NCwgNjYsIAorICAgIDQ4LCA0OCwgNTUsIDEyOCwgNjYsIDQ4LCA0OCwgMTgzLCA2NiwgNDgsIDQ4LCA1NCwgMTI4LCA2NiwgNDgsIDQ4LCAxODIsIAorICAgIDY2LCA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NiwgNDgsIDQ4LCA1MywgMTI4LCA2NiwgNDgsIDQ4LCAxODEsIDY2LCA0OCwgCisgICAgNDgsIDUyLCAxMjgsIDY2LCA0OCwgNDgsIDE4MCwgNjYsIDQ4LCA0OCwgNTEsIDEyOCwgNjYsIDQ4LCA0OCwgMTc5LCA2NiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA2NiwgNDgsIDQ4LCAxNzgsIDY2LCA0OCwgNDgsIDQ5LCAxMjgsIDY2LCA0OCwgNDgsIDE3NywgCisgICAgNjUsIDkwLCA4NSwgMTI4LCA2NSwgODksIDY5LCAyMTAsIDY1LCA4OSwgNjYsIDEyOCwgNjUsIDg5LCA2NSwgNzIsIDEyOCwgCisgICAgNjUsIDg4LCA2OSwgMTI4LCA2NSwgODcsIDY5LCAxMjgsIDY1LCA4NiwgNjksIDgzLCA4NCwgNjUsIDIwNiwgNjUsIDg2LCAKKyAgICA2OSwgODIsIDY1LCA3MSwgMTk3LCA2NSwgODYsIDY1LCA3NSwgODIsIDY1LCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg5LCA2NSwgCisgICAgMTI4LCA2NSwgODYsIDY1LCA3MSwgODIsIDY1LCA3MiwgNjUsIDEyOCwgNjUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNjUsIDg1LCA4NCwgODUsIDc3LCA3OCwgMTI4LCA2NSwgODUsIDg0LCA3OSwgNzcsIDc5LCA2NiwgNzMsIDc2LCA2OSwgCisgICAgMTI4LCA2NSwgODUsIDg0LCA3OSwgNzcsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDg1LCA4MywgODQsIDgyLCA2NSwgMjA0LCAKKyAgICA2NSwgODUsIDgyLCA3MywgODAsIDczLCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDg1LCA4MiwgNjUsIDc3LCA2NSwgCisgICAgOTAsIDY4LCA2NSwgNjUsIDcyLCA2NSwgMTI4LCA2NSwgODUsIDgyLCA2NSwgNzcsIDY1LCA5MCwgNjgsIDY1LCA2NSwgNDUsIAorICAgIDUwLCAxMjgsIDY1LCA4NSwgODIsIDY1LCA3NywgNjUsIDkwLCA2OCwgNjUsIDY1LCAxMjgsIDY1LCA4NSwgNzgsIDc4LCAKKyAgICAxMjgsIDY1LCA4NSwgNzEsIDg1LCA4MywgODQsIDEyOCwgNjUsIDg1LCA3MSwgNzcsIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIAorICAgIDc5LCAyMDYsIDY1LCA4NSwgNjksIDEyOCwgNjUsIDg1LCA2NiwgNjksIDgyLCA3MSwgNzMsIDc4LCA2OSwgMTI4LCA2NSwgCisgICAgODQsIDg0LCA3MywgMTk1LCA2NSwgODQsIDg0LCA3MiwgNjUsIDY3LCA2NSwgNzgsIDEyOCwgNjUsIDg0LCA4NCwgNjksIDc4LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgODQsIDg0LCA2NSwgMjAzLCA2NSwgODQsIDc5LCAyMDUsIDY1LCA4NCwgNzgsIAorICAgIDY1LCAyMDAsIDY1LCA4NCwgNzcsIDY1LCA2NSwgODUsIDEyOCwgNjUsIDg0LCA3MywgODksIDY1LCAxMjgsIDY1LCA4NCwgCisgICAgNzIsIDc2LCA2OSwgODQsIDczLCAxOTUsIDY1LCA4NCwgNzIsIDY1LCA4MiwgODYsIDY1LCA4NiwgNjksIDY4LCA3MywgMTk1LCAKKyAgICA2NSwgODQsIDcyLCA2NSwgODAsIDY1LCA4MywgNjcsIDY1LCAyMDYsIDY1LCA4MywgOTAsIDEyOCwgNjUsIDgzLCA4OSwgODUsIAorICAgIDgyLCAxOTMsIDY1LCA4MywgODksIDc3LCA4MCwgODQsIDc5LCA4NCwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA4MywgCisgICAgODQsIDgyLCA3OSwgNzgsIDc5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCA2NSwgODMsIDg0LCA4MiwgNzksIDc2LCA3OSwgNzEsIAorICAgIDczLCA2NywgNjUsIDIwNCwgNjUsIDgzLCA4NCwgNzksIDc4LCA3MywgODMsIDcyLCA2OSwgMTk2LCA2NSwgODMsIDg0LCA2OSwgCisgICAgODIsIDczLCA4MywgNzcsIDEyOCwgNjUsIDgzLCA4NCwgNjksIDgyLCA3MywgODMsIDc1LCAyMTEsIDY1LCA4MywgODQsIDY5LCAKKyAgICA4MiwgNzMsIDgzLCA3NSwgMTI4LCA2NSwgODMsIDg0LCA2OSwgODIsIDczLCA4MywgMjAzLCA2NSwgODMsIDg0LCA2OSwgODIsIAorICAgIDczLCA4MywgNjcsIDg1LCA4MywgMTI4LCA2NSwgODMsIDgzLCA4OSwgODIsIDczLCA2NSwgMjA2LCA2NSwgODMsIDgzLCA2OSwgCisgICAgODIsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA4MywgODAsIDczLCA4MiwgNjUsIDg0LCA2OSwgMTk2LCA2NSwgODMsIDgwLCAKKyAgICA2OSwgODIsIDEyOCwgNjUsIDgzLCA3MywgNjUsIDQ1LCA2NSwgODUsIDgzLCA4NCwgODIsIDY1LCA3NiwgNzMsIDY1LCAxMjgsIAorICAgIDY1LCA4MywgNzIsIDcxLCA2NSwgNjYsIDEyOCwgNjUsIDgzLCA3MiwgNjksIDgzLCAxMjgsIDY1LCA4MywgNzIsIDU3LCAKKyAgICAxMjgsIDY1LCA4MywgNzIsIDE3OCwgNjUsIDgzLCA2NywgNjksIDc4LCA4NCwgMTI4LCA2NSwgODMsIDY3LCA2OSwgNzgsIAorICAgIDY4LCA3MywgNzgsIDE5OSwgNjUsIDgzLCA2NSwgNzYsIDUwLCAxMjgsIDY1LCA4MiwgODUsIDcyLCA4NSwgNjUsIDEyOCwgCisgICAgNjUsIDgyLCA4NCwgNzMsIDgzLCAyMTIsIDY1LCA4MiwgODQsIDczLCA2NywgODUsIDc2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCAKKyAgICA4MiwgODQsIDY1LCA2NiwgMTk3LCA2NSwgODIsIDgzLCA2OSwgNzksIDgzLCAxMjgsIDY1LCA4MiwgODMsIDY5LCA3OSwgCisgICAgMjExLCA2NSwgODIsIDgzLCA2OSwgNzgsIDczLCA2NywgMTI4LCA2NSwgODIsIDgyLCA3OSwgODcsIDgzLCAxMjgsIDY1LCAKKyAgICA4MiwgODIsIDc5LCA4NywgMjExLCA2NSwgODIsIDgyLCA3OSwgODcsIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDY1LCA4MiwgODIsIAorICAgIDc5LCA4NywgNzIsIDY5LCA2NSwgMTk2LCA2NSwgODIsIDgyLCA3OSwgODcsIDQ1LCA4NCwgNjUsIDczLCA3NiwgMTI4LCA2NSwgCisgICAgODIsIDgyLCA3MywgODYsIDY5LCAxMjgsIDY1LCA4MiwgODIsIDY1LCA4OSwgMTI4LCA2NSwgODIsIDgwLCA2OSwgNzEsIDcxLCAKKyAgICA3MywgNjUsIDg0LCAyMDcsIDY1LCA4MiwgNzksIDg1LCA4MywgNzMsIDc4LCAxOTksIDY1LCA4MiwgNzksIDg1LCA4MiwgCisgICAgMTkzLCA2NSwgODIsIDc5LCA4NSwgNzgsIDY4LCA0NSwgODAsIDgyLCA3OSwgNzAsIDczLCA3NiwgNjksIDEyOCwgNjUsIDgyLCAKKyAgICA3OSwgODUsIDc4LCAxOTYsIDY1LCA4MiwgNzcsIDg5LCAxMjgsIDY1LCA4MiwgNzcsIDc5LCA4NSwgODIsIDEyOCwgNjUsIAorICAgIDgyLCAyMDUsIDY1LCA4MiwgNzYsIDY1LCA4NSwgMTk5LCA2NSwgODIsIDc1LCA4NCwgNzMsIDc1LCAyMDcsIDY1LCA4MiwgCisgICAgNzUsIDY1LCA2NiwgMTI4LCA2NSwgODIsIDc1LCA2NSwgNjUsIDc4LCA4NSwgMTI4LCA2NSwgODIsIDczLCA4MywgODQsIDY5LCAKKyAgICA4MiwgNjUsIDEyOCwgNjUsIDgyLCA3MywgODMsIDg0LCA2OSwgODIsIDE5MywgNjUsIDgyLCA3MywgNjksIDgzLCAxMjgsIAorICAgIDY1LCA4MiwgNzEsIDc5LCA4NCwgNjksIDgyLCA3MywgMTI4LCA2NSwgODIsIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCAKKyAgICA2OSwgODQsIDc5LCA3OCwgMTI4LCA2NSwgODIsIDcxLCA3MywgMTI4LCA2NSwgODIsIDY5LCA4MCwgNjUsIDEyOCwgNjUsIAorICAgIDgyLCA2OCwgNzIsIDY1LCA4NiwgNzMsIDgzLCA2NSwgODIsIDcxLCA2NSwgMTI4LCA2NSwgODIsIDY3LCA3MiwgNjUsIDczLCAKKyAgICA3OSwgNzgsIDEyOCwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgNzksIDIwNiwgNjUsIDgyLCA2NywgNzIsIDY1LCA3MywgCisgICAgMTk1LCA2NSwgODIsIDY3LCAyMDAsIDY1LCA4MiwgNjcsIDEyOCwgNjUsIDgyLCAxOTUsIDY1LCA4MiwgNjUsIDc3LCA2NSwgCisgICAgNzMsIDE5NSwgNjUsIDgyLCA2NSwgNjksIDY1LCA2OSwgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA4NSwgMTI4LCAKKyAgICA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA3MywgMTI4LCA2NSwgODIsIDY1LCA2OSwgNjUsIDQ1LCA2OSwgNzksIDEyOCwgNjUsIAorICAgIDgyLCA2NSwgNjksIDY1LCA0NSwgNjksIDEyOCwgNjUsIDgyLCA2NSwgNjksIDY1LCA0NSwgNjUsIDEyOCwgNjUsIDgyLCA2NSwgCisgICAgNjgsIDEyOCwgNjUsIDgyLCA2NSwgMTk2LCA2NSwgODIsIDY1LCA2NiwgNzMsIDY3LCA0NSwgNzMsIDc4LCA2OCwgNzMsIAorICAgIDE5NSwgNjUsIDgyLCA2NSwgNjYsIDczLCA2NSwgMjA2LCA2NSwgODIsIDQ1LCA4MiwgNjUsIDcyLCA3NywgNjUsIDIwNiwgCisgICAgNjUsIDgyLCA0NSwgODIsIDY1LCA3MiwgNjksIDY5LCA3NywgMTI4LCA2NSwgODEsIDg1LCA2NSwgODIsIDczLCA4NSwgODMsIAorICAgIDEyOCwgNjUsIDgxLCA4NSwgNjUsIDcwLCA3OSwgODIsIDg0LCA3MywgODMsIDEyOCwgNjUsIDgxLCA4NSwgMTkzLCA2NSwgCisgICAgODAsIDg1LCAyMDYsIDY1LCA4MCwgODIsIDczLCA3NiwgMTI4LCA2NSwgODAsIDgwLCA4MiwgNzksIDg4LCA3MywgNzcsIDY1LCAKKyAgICA4NCwgNjksIDc2LCAyMTcsIDY1LCA4MCwgODAsIDgyLCA3OSwgODgsIDczLCA3NywgNjUsIDg0LCA2OSwgMTI4LCA2NSwgODAsIAorICAgIDgwLCA4MiwgNzksIDY1LCA2NywgNzIsIDY5LCAyMTEsIDY1LCA4MCwgODAsIDgyLCA3OSwgNjUsIDY3LCA3MiwgMTI4LCA2NSwgCisgICAgODAsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgODMsIAorICAgIDEyOCwgNjUsIDgwLCA3OSwgODQsIDcyLCA2OSwgNzcsIDY1LCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA4MCwgCisgICAgNzIsIDY5LCAxMjgsIDY1LCA4MCwgNzksIDgzLCA4NCwgODIsIDc5LCA3MCwgNzksIDgzLCAxMjgsIDY1LCA4MCwgNzksIDgzLCAKKyAgICA4NCwgODIsIDc5LCA3MCwgNzksIDIxMSwgNjUsIDgwLCA3OSwgODMsIDg0LCA4MiwgNzksIDcwLCA3OSwgMjAxLCA2NSwgODAsIAorICAgIDc5LCA2OCwgNjksIDg4LCA3MywgNjUsIDEyOCwgNjUsIDgwLCA3OSwgNjgsIDY5LCA4MiwgNzcsIDE5MywgNjUsIDgwLCA3NiwgCisgICAgNzksIDg1LCA3OCwgMTI4LCA2NSwgODAsIDc2LCAyMDEsIDY1LCA4MCwgNzMsIDc4LCAxMjgsIDY1LCA4MCwgNjksIDgzLCAKKyAgICAyMDcsIDY1LCA4MCwgNjUsIDgyLCA4NCwgMTI4LCA2NSwgODAsIDY1LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA3OCwgODUsIAorICAgIDgzLCA4NiwgNjUsIDgyLCA2NSwgODksIDY1LCAxMjgsIDY1LCA3OCwgODUsIDgzLCA4NiwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgCisgICAgNzgsIDg1LCA4MywgODYsIDY1LCA4MiwgMTkzLCA2NSwgNzgsIDg1LCA2OCwgNjUsIDg0LCA4NCwgNjUsIDEyOCwgNjUsIDc4LCAKKyAgICA4NSwgNjgsIDY1LCA4NCwgODQsIDE5MywgNjUsIDc4LCA4NCwgNzMsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNzcsIDc5LCA3OCwgODksIDQ1LCA1MCwgMTI4LCA2NSwgNzgsIDg0LCAKKyAgICA3MywgNzcsIDc5LCA3OCwgODksIDEyOCwgNjUsIDc4LCA4NCwgNzMsIDc3LCA3OSwgNzgsIDIxNywgNjUsIDc4LCA4NCwgNzMsIAorICAgIDc3LCA3OSwgNzgsIDczLCA2NSwgODQsIDY5LCAxMjgsIDY1LCA3OCwgODQsIDczLCA3NSwgNjksIDc4LCA3OSwgNzcsIDY1LCAKKyAgICAxMjgsIDY1LCA3OCwgODQsIDczLCA3NSwgNjksIDc4LCA3OSwgNzUsIDg5LCA3NiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNjUsIAorICAgIDc4LCA4NCwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgMTI4LCA2NSwgNzgsIDg0LCA3MywgNjcsIDc2LCA3OSwgNjcsIDc1LCAKKyAgICA4NywgNzMsIDgzLCA2OSwgNDUsIDgyLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDc4LCA4NCwgNzMsIDY3LCA3NiwgCisgICAgNzksIDY3LCA3NSwgODcsIDczLCA4MywgMTk3LCA2NSwgNzgsIDg0LCA2OSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzgsIDg0LCAKKyAgICA2OSwgNzgsIDc4LCAxOTMsIDY1LCA3OCwgODQsIDY1LCA4MiwgNzEsIDc5LCA3NywgODUsIDc1LCA3MiwgNjUsIDEyOCwgNjUsIAorICAgIDc4LCA4MywgODUsIDIxOCwgNjUsIDc4LCA4MywgNzIsIDY5LCAxMjgsIDY1LCA3OCwgODAsIDY5LCA2NSwgMTI4LCA2NSwgCisgICAgNzgsIDIwNywgNjUsIDc4LCA3OCwgODUsIDczLCA4NCwgMjE3LCA2NSwgNzgsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDY1LCA3OCwgNzgsIDY1LCA2NSwgODUsIDEyOCwgNjUsIDc4LCA3NSwgNzIsIDEyOCwgNjUsIDc4LCA3MiwgODUsIAorICAgIDEyOCwgNjUsIDc4LCA3MSwgODUsIDc2LCA2NSwgODIsIDEyOCwgNjUsIDc4LCA3MSwgODMsIDg0LCA4MiwgNzksIDIwNSwgCisgICAgNjUsIDc4LCA3MSwgODIsIDIxNywgNjUsIDc4LCA3MSwgNzUsIDcyLCA2NSwgNzgsIDc1LCA3MiwgODUsIDEyOCwgNjUsIDc4LCAKKyAgICA3MSwgNjksIDIxMCwgNjUsIDc4LCA3MSwgNjksIDc2LCAxMjgsIDY1LCA3OCwgNzEsIDY5LCA2OCwgMTI4LCA2NSwgNzgsIAorICAgIDY4LCA2NSwgODAsIDEyOCwgNjUsIDc4LCA2NywgNzksIDgyLCA2NSwgMTI4LCA2NSwgNzgsIDY3LCA3MiwgNzksIDgyLCAKKyAgICAxMjgsIDY1LCA3OCwgNjUsIDg0LCA4MiwgNzMsIDY3LCA3MiwgNzMsIDgzLCA3NywgNjUsIDEyOCwgNjUsIDc4LCA2NSwgODAsIAorICAgIDEyOCwgNjUsIDc3LCA4MCwgODMsIDEyOCwgNjUsIDc3LCA4MCwgNjksIDgyLCA4MywgNjUsIDc4LCA2OCwgMTI4LCA2NSwgCisgICAgNzcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDc3LCA2OSwgODIsIDczLCA2NywgNjUsIDgzLCAxMjgsIDY1LCA3NywgNjksIDgyLCAKKyAgICA3MywgNjcsIDY1LCAyMDYsIDY1LCA3NywgNjYsIDg1LCA3NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDc3LCA2NiwgCisgICAgMTkzLCA2NSwgNzcsIDY1LCA4MiwgMTI4LCA2NSwgNzcsIDY1LCAyMTAsIDY1LCA3NywgNjUsIDc2LCA3MSwgNjUsIDc3LCAKKyAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNzcsIDY1LCA3NiwgNzEsIDY1LCA3NywgMTI4LCA2NSwgNzYsIDg2LCA2OSwgNzksIAorICAgIDc2LCA2NSwgMjEwLCA2NSwgNzYsIDg1LCA3NywgMTI4LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgODQsIDczLCA4NiwgCisgICAgMTk3LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCAKKyAgICA2NSwgODQsIDE5NywgNjUsIDc2LCA4NCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMjgsIDY1LCA3NiwgODAsIAorICAgIDcyLCAxOTMsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgCisgICAgNjUsIDY1LCA3OCwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCAKKyAgICA3NiwgNzksIDEyOCwgNjUsIDc2LCA3NiwgNzMsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIAorICAgIDc2LCA3NiwgNjUsIDIwMCwgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgCisgICAgNzMsIDEyOCwgNjUsIDc2LCA3MywgNzEsIDc4LCA2OSwgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCAKKyAgICA3MywgNjksIDc4LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIAorICAgIDY1LCAxMjgsIDY1LCA3NiwgNjksIDg1LCAyMTIsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIDY5LCA3NywgCisgICAgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAxMjgsIDY1LCAKKyAgICA3NiwgNjUsIDg5LCA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIDEyOCwgNjUsIAorICAgIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgNzYsIDgzLCAKKyAgICA3NSwgNjUsIDY2LCAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAxOTUsIAorICAgIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCA2NSwgCisgICAgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIDc5LCAKKyAgICAyMDYsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCA3OCwgMTI4LCA2NSwgNzMsIAorICAgIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgNzIsIDg2LCA4NSwgODMsIDEyOCwgCisgICAgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIAorICAgIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIDcxLCA4NSwgNzgsIDcxLCAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIAorICAgIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCAKKyAgICA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCA3OCwgMTI4LCA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIAorICAgIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgCisgICAgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAxMjgsIDY1LCA3MCwgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCAKKyAgICA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIAorICAgIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgCisgICAgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCA2NSwgNjksIDgyLCA3MywgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgCisgICAgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIAorICAgIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIDY1LCA2OSwgNzEsIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgCisgICAgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgNjUsIDY5LCA2OCwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIAorICAgIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAxMjgsIDY1LCA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgCisgICAgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCAKKyAgICA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgCisgICAgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCA2NSwgMjAzLCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCAKKyAgICA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgCisgICAgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgMTk3LCA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCAKKyAgICA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgMTk3LCA2NSwgNjcsIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIAorICAgIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCA2OSwgNjgsIDcxLCA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgCisgICAgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA2NywgNjcsIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCAKKyAgICA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgCisgICAgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCAyMTIsIDY1LCAKKyAgICA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgODMsIDc3LCA2NSwgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIAorICAgIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCA2NSwgODMsIDczLCA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgCisgICAgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY2LCA2NSwgNzAsIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAKKyAgICAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2NSwgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCAKKyAgICA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgNjUsIDY1LCA2NiwgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgCisgICAgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUxLCAKKyAgICA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU2LCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUzLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUwLCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU3LCAxMjgsIAorICAgIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTUsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU0LCAKKyAgICAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTIsIDEyOCwgNjUsIDY1LCA0OCwgNDksIAorICAgIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgCisgICAgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTYsIDEyOCwgNjUsIDY1LCAKKyAgICA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgCisgICAgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCAKKyAgICA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIDU0LCA1NywgMTI4LCA2NSwgNDgsIDU0LCA1NiwgCisgICAgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgMTI4LCA2NSwgNDgsIDU0LCA1MywgMTI4LCA2NSwgCisgICAgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgNDgsIDU0LCA1MCwgMTI4LCA2NSwgNDgsIDU0LCAKKyAgICA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCA1NywgMTI4LCA2NSwgNDgsIDUzLCA1NiwgMTI4LCAKKyAgICA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCA2NSwgNDgsIDUzLCA1MywgMTI4LCA2NSwgNDgsIAorICAgIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIDUzLCA1MCwgMTI4LCA2NSwgNDgsIDUzLCA0OSwgCisgICAgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgMTI4LCA2NSwgNDgsIDUyLCA1NiwgMTI4LCA2NSwgCisgICAgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgNDgsIDUyLCA1MywgNjUsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIDY1LCAxMjgsIDY1LCA0OCwgNTIsIAorICAgIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgMTI4LCA2NSwgNDgsIDUyLCA0OSwgCisgICAgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDEyOCwgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgCisgICAgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgNjUsIDQ4LCA1MSwgNTQsIDEyOCwgNjUsIDQ4LCAKKyAgICA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCA1MSwgNTEsIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIAorICAgIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1MiwgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgCisgICAgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNjUsIDQ1LCAKKyAgICA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCA0NSwgNzUsIDcyLCA4OSwgODUsIAorICAgIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgMTk2LCA0NSwgNjcsIDcyLCA2NSwgCisgICAgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbGV4aWNvbl9vZmZzZXRbXSA9IHsKLSAgICAwLCAwLCA2LCAxMCwgMTUsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDQsIDUwLCA2MywgNzUsIDg0LCA5MCwgOTUsIDEwMywgCi0gICAgMTEyLCAxMTYsIDEyMSwgMTI5LCAxMzQsIDEzNywgMTQ0LCAxNDksIDE1NywgMTYzLCAxNjksIDE3NywgMTg0LCAxOTQsIAotICAgIDE5OSwgMjAyLCAyMDksIDIxMiwgMjE3LCAyMjYsIDIzMiwgMjQxLCAyNDgsIDI1NSwgMjYwLCAyNjQsIDI3MywgMjgxLCAKLSAgICAyODIsIDI4OCwgMjk0LCAzMDIsIDMwOCwgMzE0LCAzMjAsIDMyOCwgMzMzLCAzNDAsIDM0NCwgMzQ3LCAzNDksIDM1NSwgCi0gICAgMzYyLCAzNjksIDM3NywgMzgwLCAzODUsIDM5MCwgMzk2LCAzOTgsIDQwMywgNDEyLCA0MTksIDQyNSwgMjg2LCA0MzAsIAotICAgIDQzMiwgNDM0LCA0MzgsIDQ0MywgNDQ2LCA0NTIsIDQ1NiwgNDY0LCA0NzQsIDQ4MSwgMTEzLCA0OTAsIDQ5OCwgNTAzLCAKLSAgICA1MTEsIDUxNiwgNTI0LCA1MzUsIDUzOCwgNTQyLCA1NTUsIDU2NSwgNTcxLCA1NzQsIDU3NSwgNTgyLCA1ODQsIDU5MywgCi0gICAgMzAxLCA1OTYsIDYwMCwgNjA4LCA2MTMsIDYxNSwgNjE5LCA2MjIsIDYyOCwgNjM1LCA2NDIsIDY0NywgNjUxLCA2NjAsIAotICAgIDY3MCwgNjc5LCA2ODgsIDY5MiwgNjk4LCA3MDYsIDcxMywgNzIxLCA3MjUsIDczMSwgNzM1LCA3NDMsIDc1MiwgNzU2LCAKLSAgICA2MjcsIDc2MywgNzcxLCA3NzUsIDc4NCwgNzg5LCA3OTIsIDc5NiwgODA0LCA4MTMsIDgxNiwgODIxLCA4MzEsIDg0MCwgCi0gICAgODQ3LCAyMDAsIDczMywgODUwLCA4NTcsIDU4MCwgODY1LCA4NzMsIDg3OSwgODg0LCA4OTEsIDg5NCwgOTAwLCA5MDYsIAotICAgIDkxMSwgOTE2LCA5MjksIDIyLCA5MzQsIDkzNywgOTQ3LCA5NTIsIDk1NiwgOTYyLCA5NzEsIDk3NCwgOTg0LCA5OTMsIDk5NywgCi0gICAgMTAwMiwgMTAwNywgMTAxMiwgMTAxOSwgMTAyNywgMTAzMCwgMTA0MCwgMTA0MywgMTA0NSwgMTA1MywgMTA1NywgMTA2MSwgCi0gICAgOTMsIDEwNjQsIDEwNjksIDEwNzUsIDEwNzcsIDEwODYsIDEwODksIDEwOTIsIDEwOTcsIDEwOTksIDExMDUsIDExMTEsIAotICAgIDExMTMsIDExMTcsIDMzMSwgMTEyMCwgMTEyOCwgMTEzMiwgMTEzNiwgMTE0MSwgMTE0NCwgMTE1MCwgMTE1NCwgMTE2MSwgCi0gICAgMTE2NCwgMTE3MCwgODAsIDExNzYsIDExNzgsIDExODEsIDExODMsIDY1NywgMTE4OCwgMTE5NiwgMTIwMywgMTIxMywgCi0gICAgMTIyMiwgMTIzMCwgMTIzMiwgMTIzNywgMTI0MiwgMTI0OCwgMTI1MywgMTI1OCwgMTI2MiwgMTI2NywgMTI3MywgMTI3OCwgCi0gICAgMTI4MywgMTI4NywgMTI5MiwgMTI5NywgMTMwMSwgMTMwNiwgMTMxMSwgMTMxNiwgMTMyMiwgMTMyOCwgMTMzNCwgMTMzOSwgCi0gICAgMTM0MywgMTM0OCwgMTM1MywgMTM1OCwgMTM2MiwgMTM2NywgMTM3MiwgMTM3NywgMTM4MiwgMTIzMywgMTIzOCwgMTI0MywgCi0gICAgMTI0OSwgMTI1NCwgMTM4NiwgMTI1OSwgMTM5MiwgMTQwMSwgMTI2MywgMTQwNSwgMTI2OCwgMTI3NCwgMTI3OSwgMTQwOSwgCi0gICAgMTQxNCwgMTQxOSwgMTQyMywgMTQyNywgMTQzMywgMTQzNywgMTI4NCwgMTQ0MCwgMTQ0NCwgMTI4OCwgMTQ1MCwgMTI5MywgCi0gICAgMTQ1NCwgMTQ1OCwgMTI5OCwgMTQ2MiwgMTQ2NywgMTQ3MSwgMTQ3NCwgMTQ3OCwgMTMwMiwgMTMwNywgMTMxMiwgMTQ4MywgCi0gICAgMTQ4OSwgMTQ5NSwgMTUwMSwgMTMxNywgMTMyOSwgMTMzNSwgMTUwNSwgMTUwOSwgMTUxMywgMTUxNiwgMTM0MCwgMTUyMCwgCi0gICAgMTUyMiwgMTUyNywgMTUzMiwgMTUzOCwgMTU0MywgMTU0OCwgMTU1MiwgMTU1NywgMTU2MiwgMTU2NywgMTU3MiwgMTU3OCwgCi0gICAgMTU4MywgMTU4OCwgMTU5NCwgMTYwMCwgMTYwNSwgMTYwOSwgMTYxNCwgMTYxOSwgMTYyNCwgMTYyOSwgMTYzMywgMTY0MSwgCi0gICAgMTY0NSwgMTY1MCwgMTY1NSwgMTY2MCwgMTY2NSwgMTY2OSwgMTY3MiwgMTY3NywgMTY4MiwgMTY4NywgMTY5MiwgMTY5OCwgCi0gICAgMTcwMywgMTcwNywgMTM0NCwgMTcxMCwgMTcxNSwgMTcyMCwgMTM0OSwgMTcyNCwgMTcyOCwgMTczNSwgMTM1NCwgMTc0MiwgCi0gICAgMTM1OSwgMTc0NiwgMTc0OCwgMTc1NCwgMTM2MywgMTc1OSwgMTc2OCwgMTM2OCwgMTc3MywgMTc3OSwgMTM3MywgMTc4NCwgCi0gICAgMTc4OSwgMTc5MiwgMTc5NywgMTgwMSwgMTgwNSwgMTgwOSwgMTgxMiwgMTM3OCwgMTM4MywgOTUwLCAxODE2LCAxODE4LCAKLSAgICAxODE5LCAxODIzLCAxODI3LCAxODMyLCAxODM2LCAxODQwLCAxODQ0LCAxODQ3LCAxODUyLCAxODU2LCAxODYxLCAxODY1LCAKLSAgICAxODY5LCAxODc0LCAxODc4LCAxODgxLCAxODg1LCAxODk5LCAxOTAzLCAxOTA3LCAxOTEwLCAxOTE1LCAxOTE5LCAxOTIzLCAKLSAgICAxOTI4LCAxOTMzLCAxOTM4LCAxOTQyLCAxOTQ3LCAxOTUxLCAxOTU2LCAxOTYzLCAxOTY5LCAxOTc0LCAxOTc5LCAxOTg1LCAKLSAgICAxOTkwLCAxOTk1LCAxOTk4LCAxMjUwLCAyMDAwLCAyMDA3LCAyMDE1LCAyMDI1LCAyMDM0LCAyMDQ4LCAyMDUyLCAyMDY1LCAKLSAgICAyMDczLCAyMDc3LCAyMDgyLCAyMDg2LCAyMDkwLCAyMDk1LCAyMTAwLCAyMTA0LCAyMTA3LCAyMTExLCAyMTE4LCAyMTI1LCAKLSAgICAyMTMxLCAyMTM2LCAyMTQxLCAyMTQ0LCAyMTQ2LCAyMTQ5LCAyMTU1LCAyMTU5LCAyMTY0LCAyMTY4LCAyMTcyLCAxNzUwLCAKLSAgICAxNzU2LCAyMTc3LCAyMTgxLCAyMTg0LCAyMTg5LCAyMTk0LCAyMTk5LCAyMjAzLCAyMjEwLCAyMjE1LCAyMjE4LCAyMjI1LCAKLSAgICAyMjMxLCAyMjM1LCAyMjM5LCAyMjQzLCAyMjQ5LCAyMjU1LCAyMjY5LCAyMjg2LCAyMjk1LCAyMzAwLCAyMzA0LCAyMzA5LCAKLSAgICAyMzE0LCAyMzE4LCAyMzMwLCAyMzM2LCAxOTU5LCAyMzQyLCAyMzQ1LCAyMzUyLCAyMzU2LCAyMzYwLCAyMzY0LCAxOTY2LCAKLSAgICAyMzY4LCAyMzczLCAyMzc4LCAyMzgyLCAyMzkwLCAyMzk0LCAyMzk4LCAyNDAyLCAyNDA3LCAyNDEyLCAyNDE3LCAyNDIxLCAKLSAgICAyNDI2LCAyNDMxLCAyNDM1LCAyNDQwLCAyNDQ0LCAyNDQ3LCAyNDUxLCAyNDU1LCAyNDYwLCAyNDY0LCAyNDY4LCAyNDc3LCAKLSAgICAyNDgxLCAyNDg1LCAyNDkxLCAyNDk2LCAyNTAzLCAyNTA3LCAyNTExLCAyNTE2LCAyNTIwLCAyNTI1LCAyNTMxLCAyNTM2LCAKLSAgICAyNTQwLCAyMTIxLCAyNTQ0LCAyNTQ5LCAyNTU1LCAyNTYwLCAyNTY0LCAyNTY5LCAyNTc0LCAyNTc4LCAyNTg0LCAyNTg5LCAKLSAgICAyNTk1LCAyNTk5LCAyNjA1LCAyNjEwLCAxMjYwLCA2MiwgMjYxNiwgMjYyMCwgMjYyNCwgMjYyOCwgMjYzMywgMjYzNywgCi0gICAgMjY0MSwgMjY0NSwgMjY0OSwgMjY1NCwgMjY1OCwgMjY2MywgMjY2NywgMjY3MCwgMjY3NCwgMjY3OSwgMjY4MywgMjY4OCwgCi0gICAgMjY5MiwgMjY5NiwgMjcwMSwgMjcwNSwgMjcwOCwgMjcyMSwgMjcyNSwgMjcyOSwgMjczMywgMjczNywgMjc0MSwgMjc0NCwgCi0gICAgMjc0OCwgMjc1MiwgMjc1NywgMjc2MSwgMjc2NiwgMjc3MSwgMjc3NiwgMjc4MCwgMjc4MywgMjc4NiwgMjc5MiwgMjc5NiwgCi0gICAgMjgwMCwgMjgwMywgMjgwNywgMjgxMSwgMTA1OSwgNDQ1LCAyODE0LCAyODE5LCAyODIzLCAyODI2LCAyODMxLCAyODM2LCAKLSAgICAyODQwLCAyODQ1LCAyODQ5LCAyODUyLCAyODU4LCAyODY1LCAyODcxLCAyODc2LCAyODgwLCAyODg1LCAyODg5LCAyODk5LCAKLSAgICAyOTAzLCAyOTA3LCAyOTEyLCAyOTE3LCAyOTI3LCAxODQ4LCAyOTMyLCAyOTM2LCAyOTM5LCAyOTQ1LCAyOTUyLCAyOTU2LCAKLSAgICA2NDgsIDc5MCwgMjk2MCwgMjk2NywgMjk3MywgMjk3OCwgMjk4NCwgMjk4OSwgMTg1NywgMjk5MywgNDg1LCAyOTk5LCAKLSAgICAzMDEwLCAxODYyLCAzMDE0LCAzMDE5LCAzMDM0LCAzMDQwLCAzMDQ3LCAzMDU3LCAzMDYzLCAzMDY4LCAzMDc0LCAzMDc3LCAKLSAgICAzMDgxLCAzMDg4LCAzMDkzLCAzMDk3LCAzMTAxLCAzMTA1LCAzMTA5LCAzMTE0LCAzMTIwLCAyNjc1LCAzMTI1LCAzMTM3LCAKLSAgICAxNTU0LCAzMTQ0LCAzMTQ3LCAzMTUxLCAzMTU1LCAzMTU4LCAzMTYyLCAzMTY3LCAzMTcxLCAzMTc1LCAzMTgxLCAzMTg3LCAKLSAgICAzMTkyLCAzMTk4LCAzMjAyLCAzMjEwLCAzMjIwLCAzMjI2LCAzMjMxLCAzMjQwLCAzMjQ4LCAzMjU1LCAzMjU5LCAzMjY4LCAKLSAgICAzMjcyLCAzMjc3LCAzMjgyLCAzMjg2LCAzMjk0LCAzMjk5LCAzMzAzLCAxODcwLCAxNDAyLCAzMTgsIDQwMiwgMzMwOSwgCi0gICAgMzMxNSwgMzMxOSwgMzMyMywgMzMyOCwgMzMzMiwgMzMzNiwgMzMzOSwgMzM0MywgMzM0NywgMzM1MSwgMzM1NiwgMzM2MCwgCi0gICAgMzM2NCwgMzMwNiwgMzM3MCwgMzM3NywgMzM4MSwgMzM5NCwgMzM5OCwgMzQwMiwgMzQwNiwgMzQxMCwgMzQxNCwgMzQyMCwgCi0gICAgMzQyNywgMzQzMSwgMzQzOSwgMzQ0OCwgMzQ1NCwgMzQ1OSwgMzQ2MiwgMzQ2NiwgMzQ3MCwgMzQ4MCwgMzQ5MCwgMzQ5OCwgCi0gICAgMzUwNSwgMzUxMiwgMzUxOCwgMzUyNCwgMzUzMSwgMzUzNSwgMzU0MCwgMzU0NCwgMzU1MiwgMzU1NywgMzU2NSwgMzU3MCwgCi0gICAgMzU3NSwgMzU3OSwgMzU4NCwgMzU5MSwgMzU5NCwgMzU5OCwgMzYwMiwgMzYwNSwgMzYxMSwgMzYxNywgMzYyMSwgMzYzMiwgCi0gICAgMzY0MiwgMzY1NywgMzY3MiwgMzY4NywgMzcwMiwgMzcxNywgMzczMiwgMzc0NywgMzc2MiwgMzc3NywgMzc5MiwgMzgwNywgCi0gICAgMzgyMiwgMzgzNywgMzg1MiwgMzg2NywgMzg4MiwgMzg5NywgMzkxMiwgMzkyNywgMzk0MiwgMzk1NywgMzk3MiwgMzk4NywgCi0gICAgNDAwMiwgNDAxNywgNDAzMiwgNDA0NywgNDA2MiwgNDA3NywgNDA5MiwgNDEwNywgNDEyMiwgNDEzNywgNDE1MiwgNDE2NywgCi0gICAgNDE4MiwgNDE5NywgNDIxMiwgNDIyNywgNDI0MiwgNDI1NywgNDI3MiwgNDI4NywgNDMwMiwgNDMxNywgNDMzMiwgNDM0NywgCi0gICAgNDM2MiwgNDM3NywgNDM4NiwgNDM5NSwgNDQwMCwgNDQwNiwgNDQxMCwgNDQxNSwgNDQxOSwgNDQyMiwgNDQyNiwgNDQyOSwgCi0gICAgNDQzNCwgMjg1LCAzODgsIDQ0NDAsIDQ0NDgsIDQ0NTIsIDQ0NTYsIDQ0NTksIDQ0NjUsIDQ0NjksIDQ0NzcsIDQ0ODMsIAotICAgIDQ0ODgsIDQ0OTUsIDQ1MDIsIDQ1MDgsIDQ1MTMsIDQ1MjAsIDQ1MjYsIDQ1MzAsIDQ1MzUsIDQ1NDIsIDQ1NDgsIDI2OTMsIAotICAgIDQ0NTgsIDQ1NTIsIDQ1NTYsIDQ1NjAsIDQ1NjMsIDQ1NzAsIDQ1NzMsIDQ1ODEsIDQ1ODYsIDQ1OTEsIDQ1ODIsIDQ1ODMsIAotICAgIDQ1OTYsIDQ2MDIsIDQ2MDgsIDQ2MTMsIDQ2MTgsIDQ2MjUsIDQ2MzAsIDQ2MzQsIDQ2MzcsIDQ2NDEsIDE5MDQsIDQ1NCwgCi0gICAgNDY0NSwgNDY0OSwgNDY1NCwgNDY2MCwgNDY2NSwgNDY2OSwgNDY3MiwgNDY3NiwgNDY4MSwgNDY4NSwgNDY5MiwgNDY5NiwgCi0gICAgNDcwMCwgNDcwNCwgOTEzLCA2MzMsIDQ3MDcsIDQ3MTUsIDQ3MjIsIDQ3MjksIDQ3MzUsIDQ3NDIsIDQ3NTAsIDQ3NTcsIAotICAgIDQ3NjQsIDQ3NjksIDQ3ODEsIDEyODAsIDE0MTAsIDE0MTUsIDQ3OTIsIDE0MjAsIDQ3OTYsIDQ4MDAsIDQ4MDksIDQ4MTgsIAotICAgIDQ4MjQsIDQ4MjksIDQ4MzMsIDQ4MzksIDQ4NDQsIDQ4NDgsIDQ4NTcsIDQ4NjYsIDQ4NzUsIDQ4ODQsIDQ4ODksIDQ4OTQsIAotICAgIDQ5MDYsIDI4NDYsIDQ5MTAsIDQ5MTIsIDQ5MTcsIDQ5MjEsIDQ5MzAsIDQ5MzgsIDE0MjQsIDQ5MTksIDQ5NDQsIDQ5NDgsIAotICAgIDQ5NTEsIDQ5NTUsIDQ5NjQsIDQ5NzAsIDQ5NzUsIDQ5NzgsIDQ5ODcsIDQ5OTMsIDUwMDEsIDUwMDUsIDUwMDksIDUwMTIsIAotICAgIDUwMTcsIDUwMjQsIDUwMzAsIDUwMzMsIDUwMzUsIDUwMzgsIDUwNDYsIDUwNTQsIDUwNTcsIDUwNjIsIDQ1OTMsIDUwNjUsIAotICAgIDE5NjQsIDE5NzAsIDUwNjcsIDUwNzUsIDE5OTEsIDUwODAsIDUwODQsIDUwODksIDUwOTMsIDUwOTcsIDUxMDEsIDUxMDYsIAotICAgIDUxMTAsIDUxMTUsIDUxMTksIDUxMjIsIDUxMjUsIDUxMzEsIDUxMzcsIDUxNDMsIDUxNDksIDUxNTUsIDUxNjEsIDUxNjcsIAotICAgIDUxNzEsIDUxNzUsIDUxNzksIDUxODMsIDUxODcsIDUxOTIsIDUyMDAsIDUyMTAsIDUyMTUsIDUyMTksIDUyMzAsIDUyNDMsIAotICAgIDUyNTQsIDUyNjcsIDUyNzgsIDUyOTAsIDUzMDIsIDUzMTQsIDUzMjcsIDUzNDAsIDUzNDcsIDUzNTMsIDUzNjAsIDUzNjYsIAotICAgIDUzNzAsIDUzNzUsIDUzNzksIDUzODYsIDUzOTQsIDUzOTgsIDU0MDQsIDU0MTQsIDU0MTgsIDU0MjMsIDU0MzAsIDU0MzYsIAotICAgIDQ3MzcsIDU0NDYsIDU0NTAsIDU0NTcsIDYzMiwgNTQ2MSwgNTQ2NSwgNTQ3MCwgNTQ3NSwgNTQ4MCwgNTQ4NCwgNTQ5MCwgCi0gICAgNTQ5NCwgNTQ5OCwgNTUwNCwgNTUwOSwgNTUxMywgMTg5NiwgNTUxOSwgNTUyNywgNTUzNiwgNTU0MCwgNTU0NiwgNTU1MSwgCi0gICAgNTU1NiwgNTU2MSwgNTU2NywgNTU3MiwgMzE3NywgNTU3NywgNTU4MSwgNTU4NiwgNTU5MSwgNTU0MSwgNTU5NiwgNTYwMCwgCi0gICAgNTYwNywgNTYxMywgNTYxOCwgNTYyMiwgNTYyNywgNTYzMSwgNTY0MCwgNTAyMCwgNTY0NSwgMjQwNCwgNTY0OSwgNTY1NCwgCi0gICAgNTY1OSwgNTU0NywgNTY2MywgNTU1MiwgNTU1NywgNTY2OCwgNTY3NSwgNTY4MiwgNTY4OCwgNTY5NCwgNTcwMCwgNTcwNSwgCi0gICAgNTcxMCwgNTcxNSwgNTU2MiwgNTU2OCwgNTcyMSwgNTcyNywgNTczMiwgNTU3MywgNTczNywgMTExNSwgNTc0MCwgNTc0OCwgCi0gICAgNTc1NCwgNTc2MCwgNTc2OSwgNTc3NCwgNTc4OSwgNTgwNiwgNTgyNSwgNTgzNCwgNTg0MiwgNTg1NywgNTg2NywgNTg3NywgCi0gICAgNTg4MywgNTg5NSwgNTkwNCwgNTkxMiwgNTkxOSwgNTkyNiwgNTkzMiwgNTkzNywgNTk0NSwgNTk1NSwgNTk2MiwgNTk3MiwgCi0gICAgNTk4MiwgNTk5MiwgNjAwMSwgNjAxMSwgNjAyNSwgNjA0MCwgNjA0OSwgNjA1NywgNjA2MiwgNjA2NiwgNjA3NSwgNjA4NSwgCi0gICAgNjA5NSwgNjEwNSwgNjExMCwgNjExNCwgNjEyMywgNjEzMywgNjE0NCwgNjE1NywgNjE3MCwgNjE4MiwgNjE4NywgNjE5MywgCi0gICAgNjE5NiwgNjIwMCwgNjIwNSwgNjIwOSwgNjIxNywgNjIyNiwgNjIzNCwgNjI0MSwgNjI1MiwgNjI1NiwgNjI1OSwgNjI2NSwgCi0gICAgNjI2OSwgNjI3NSwgNjI4MiwgNjI4NywgNjI5NCwgNjMwMSwgNjMwOCwgNjMxNSwgNjMyMiwgNjMyOSwgNjMzNCwgNTgwMiwgCi0gICAgNjMzOSwgNjM0OCwgNjM1MiwgNjM2NCwgNjM2OCwgNjM3MSwgNjM3NSwgNjM3OSwgNjM4MywgNjM4NywgNjM5MiwgNjM5NywgCi0gICAgNjQwMiwgNjQwOCwgNjQxMywgNjQxOCwgNTQyNiwgNjQyMywgNjQyNywgNjQzMSwgNjQzNSwgNjQ0MCwgNjQ0NSwgNjQ1MSwgCi0gICAgNjQ1NSwgNjQ2MywgNjQ2NywgNjQ3MCwgNjQ3NiwgNjQ4MywgNjQ4NywgNjQ5MCwgNjQ5NSwgMzIwNSwgNjUwMSwgNjUwOSwgCi0gICAgNjUxNSwgNTQ0MSwgNjUyMCwgNjUyNSwgNjUyOSwgNjU0MiwgNjU1NiwgNjU2MywgNjU2OSwgNjU3MywgNjU3OCwgNjU4NCwgCi0gICAgNjU4OSwgNDg1MywgNjU5NCwgNjU5NywgNjYwMiwgNjYwNiwgMjQwOSwgODAyLCA2NjEyLCA2NjE2LCA2NjIyLCA2NjI4LCAKLSAgICA2NjMzLCA2NjM4LCA2NjQ2LCA2NjUyLCA2NjY1LCA2NjczLCA2Njc3LCA2Njg1LCA2NjkyLCA2NzA0LCA2NzE0LCA2NzIxLCAKLSAgICA2NzI4LCA2NzM3LCA2NzQ2LCA2NzU0LCA2NzYwLCA2NzY1LCA2NzcwLCA2Nzc2LCA1NTgyLCA2NzgxLCA2Nzg0LCA2NzkxLCAKLSAgICA2Nzk3LCA2ODEwLCA2ODIxLCA2ODI4LCA2ODM0LCA2ODQzLCA2ODUxLCA2ODU4LCA2ODY0LCA2ODcwLCA2ODc1LCA2ODc5LCAKLSAgICA2ODg0LCA2ODkwLCA2ODk4LCA1NTg3LCA2OTA1LCA2OTEwLCA2OTE3LCA2OTIzLCA2OTI4LCA2OTM2LCA2OTQ0LCA2OTUxLCAKLSAgICA2OTU1LCA2OTY5LCA2OTc5LCA2OTg0LCA2OTg4LCA2OTk5LCA3MDA1LCA3MDEwLCA3MDE1LCA3MDE5LCA1NTkyLCA3MDI0LCAKLSAgICA3MDI3LCA3MDM5LCA3MDQ2LCA3MDUxLCA3MDU1LCA3MDYwLCA3MDY0LCA3MDcxLCA3MDc3LCA3MDg0LCA1NTQyLCA3MDg5LCAKLSAgICAyNDE0LCA4LCA3MDk2LCA3MTAxLCA3MTA1LCA3MTExLCA3MTIyLCA3MTMyLCA3MTQxLCA3MTUzLCA3MTU4LCA3MTYyLCAKLSAgICA3MTcwLCA3MTg0LCA3MTg4LCA3MTkxLCA3MTk5LCA3MjA2LCA3MjE0LCA3MjE4LCA3MjI5LCA3MjMzLCA3MjQwLCA3MjQ1LCAKLSAgICA3MjQ5LCA3MjU0LCA3MjU4LCA3MjYyLCA3MjY1LCA3MjcxLCA3Mjc3LCA3Mjg0LCA3Mjk0LCA3MzAzLCA3MzEwLCA1NjAxLCAKLSAgICA1NjA4LCA1NjE0LCA1NjE5LCA3MzE2LCA1NjIzLCA3MzIyLCA3MzI1LCA3MzMyLCA3MzQ3LCA3MzYzLCA3Mzc4LCA4OTcsIAotICAgIDM4MywgNzM4MywgNzM5MSwgNzM5OCwgNzQwNCwgNzQwOSwgNzQxNCwgNTYzMiwgNzQxNiwgNzQyMCwgNzQzMCwgNzQzNSwgCi0gICAgNzQzOSwgNzQ0OCwgNzQ1MiwgNzQ1NSwgNzQ2MiwgNzQ2NiwgNzQ2OSwgNzQ3NywgNzQ4NCwgNzQ5MiwgNzQ5NiwgNzUwMCwgCi0gICAgNzUwNiwgNzUxMCwgNzUxNCwgNzUxOCwgNzUyNCwgNzUyOCwgNzUzNSwgNzUzOSwgNzU0NCwgNzU0OCwgNzU1NSwgNzU2MSwgCi0gICAgNzU2OSwgNzU3NSwgNzU4NSwgNzU5MCwgNzU5NSwgNzU5OSwgNzYwNywgMzEzMSwgNzYxNSwgNzYyMCwgNzYyNCwgNzYyOCwgCi0gICAgNzYzMSwgNzYzOSwgNzY0NiwgNzY1MCwgNzY1NSwgNzY1OSwgNzY3MCwgNzY3NiwgNzY4MCwgNzY4MywgNzY5MCwgNTY0MSwgCi0gICAgNzY5NSwgNzY5OSwgMTcxMiwgMzU2MywgNjA2LCAxMzMsIDc3MDYsIDc3MTAsIDc3MTUsIDc3MjAsIDc3MjQsIDc3MjgsIAotICAgIDc3MzIsIDc3MzcsIDc3NDEsIDc3NDYsIDc3NTAsIDc3NTMsIDc3NTcsIDc3NjEsIDc3NjYsIDc3NzYsIDc3ODIsIDc3ODYsIAotICAgIDc3OTAsIDc3OTcsIDc4MDUsIDc4MTQsIDc4MjUsIDc4MzIsIDc4MzksIDc4NDgsIDc4NTcsIDc4NjYsIDc4NzUsIDc4ODQsIAotICAgIDc4OTMsIDc5MDMsIDc5MTMsIDc5MjMsIDc5MzMsIDc5NDMsIDc5NTIsIDc5NjIsIDc5NzIsIDc5ODIsIDc5OTIsIDgwMDIsIAotICAgIDgwMTIsIDgwMjIsIDgwMzEsIDgwNDEsIDgwNTEsIDgwNjEsIDgwNzEsIDgwODEsIDgwOTEsIDgxMDAsIDgxMTAsIDgxMjAsIAotICAgIDgxMzAsIDgxNDAsIDgxNTAsIDgxNjAsIDgxNzAsIDgxODAsIDgxOTAsIDgxOTksIDgyMDksIDgyMTksIDgyMjksIDgyMzksIAotICAgIDgyNDksIDgyNTksIDgyNjksIDgyNzksIDgyODksIDgyOTksIDgzMDgsIDgzMTQsIDgzMTgsIDgzMjEsIDgzMjUsIDgzMzAsIAotICAgIDgzMzcsIDgzNDMsIDgzNDgsIDgzNTIsIDgzNTcsIDgzNjEsIDgzNjUsIDU2NTAsIDgzNzEsIDgzNzYsIDgzODUsIDU2NTUsIAotICAgIDgzOTAsIDU2NjAsIDgzOTMsIDgzOTcsIDg0MDEsIDg0MTEsIDg0MTYsIDg0MjUsIDg0MzMsIDg0NDAsIDg0NDUsIDg0NTIsIAotICAgIDg0NTcsIDg0NjEsIDg0NjQsIDg0NzUsIDg0ODUsIDg0OTQsIDg1MDIsIDg1MTMsIDg1MjUsIDg1MzUsIDg1MzksIDg1NDQsIAotICAgIDg1NDksIDg1NTMsIDg1NTgsIDg1NjIsIDg1NjUsIDg1NzIsIDg1ODIsIDg1OTEsIDg1OTgsIDg2MDIsIDg2MDgsIDg2MTMsIAotICAgIDg2MTgsIDg2MjIsIDg2MzEsIDg2MzYsIDg2NDIsIDg2NDcsIDg2NTEsIDg2NjAsIDg2NjgsIDg2NzYsIDg2ODMsIDg2OTEsIAotICAgIDg3MDMsIDg3MTQsIDg3MjQsIDg3MzEsIDg3MzcsIDg3NDYsIDg3NTcsIDg3NjYsIDg3NzUsIDg3ODMsIDg3OTAsIDg3OTksIAotICAgIDg4MDcsIDQ2MTAsIDg4MTEsIDg4MTMsIDg4MTgsIDg4MjQsIDg4MzIsIDg4MzksIDg4NDgsIDg4NTcsIDg4NjYsIDg4NzUsIAotICAgIDg4ODQsIDg4OTMsIDg5MDIsIDg5MTEsIDg5MjEsIDg5MzEsIDg5NDAsIDg5NTQsIDg5NjEsIDg5NjksIDg5NzgsIDg5ODQsIAotICAgIDg5OTMsIDkwMDEsIDkwMTAsIDkwMjMsIDkwMzEsIDkwMzgsIDkwNTEsIDkwNTcsIDkwNjYsIDkwNzUsIDkwODAsIDkwODQsIAotICAgIDkwOTAsIDkwOTYsIDkxMDMsIDU0NDAsIDkxMDgsIDkxMTMsIDkxMjAsIDkxMjUsIDkxMzAsIDkxMzQsIDkxNDAsIDkxNDgsIAotICAgIDkxNTYsIDkxNjMsIDkxNzEsIDkxNzksIDkxODQsIDkxOTAsIDkxOTUsIDkxOTksIDkyMTAsIDkyMTgsIDkyMjQsIDkyMjksIAotICAgIDkyMzgsIDkyNDQsIDkyNDksIDkyNTgsIDkyNzIsIDMwOTAsIDkyNzYsIDkyODEsIDkyODYsIDkyOTIsIDkyOTcsIDkzMDIsIAotICAgIDkzMDYsIDkzMTEsIDkzMTYsIDQ2MDksIDkzMjEsIDkzMjYsIDkzMzEsIDkzMzYsIDkzNDAsIDkzNDUsIDkzNTAsIDkzNTUsIAotICAgIDkzNjEsIDkzNjcsIDkzNzIsIDkzNzYsIDkzODEsIDkzODYsIDU2NjQsIDkzOTEsIDkzOTYsIDk0MDEsIDk0MDYsIDk0MTgsIAotICAgIDk0MjgsIDk0MzksIDk0NTAsIDk0NjEsIDk0NzMsIDk0ODQsIDk0OTUsIDk1MDYsIDk1MTcsIDk1MjIsIDIwNjIsIDk1MjYsIAotICAgIDk1MjksIDk1MzUsIDk1NDMsIDk1NTEsIDk1NTYsIDk1NjQsIDk1NzIsIDk1NzksIDk1ODYsIDk1OTEsIDk1OTcsIDk2MDQsIAotICAgIDk2MTIsIDk2MTksIDk2MzEsIDk2MzYsIDczNDEsIDk2NDIsIDk2NTEsIDk2NTgsIDk2NjQsIDk2NzIsIDk2NzksIDk2ODYsIAotICAgIDk2OTIsIDk3MDEsIDk3MDgsIDk3MTYsIDk3MjIsIDk3MjksIDk3MzcsIDk3NDIsIDI4OTMsIDEwODEsIDk3NDksIDkzMjIsIAotICAgIDk3NTIsIDk3NTgsIDk3NjIsIDk3NzQsIDk3NzksIDk3ODYsIDk3OTIsIDk3OTcsIDkzMjcsIDkzMzIsIDk4MDEsIDk4MDUsIAotICAgIDk4MDksIDk4MTcsIDk4MjQsIDk4MzEsIDk4NDgsIDk4NTIsIDk4NTUsIDk4NjMsIDI5NDksIDk4NjcsIDk4NjksIDk4NzcsIAotICAgIDk4ODcsIDk4OTMsIDk4OTgsIDk5MDIsIDk5MDgsIDk5MTMsIDk5MTYsIDk5MjMsIDk5MjksIDk5MzUsIDk5NDAsIDk5NDcsIAotICAgIDk5NTMsIDk5NTgsIDk5NjUsIDk5NzEsIDk5NzgsIDk5ODQsIDk5OTAsIDk5OTYsIDEwMDA0LCAxMDAxMCwgMTAwMTYsIAotICAgIDEwMDIxLCAxMDAyOCwgMTAwMzMsIDEwMDM3LCAxMDA0MiwgMTAwNDksIDEwMDU0LCAxMDA2MCwgMTAwNjMsIDEwMDY3LCAKLSAgICAxMDA3OSwgMTAwODUsIDEwMDkwLCAxMDA5NywgMTAxMDMsIDEwMTA5LCAxMDExOCwgMTAxMjYsIDEwMTMzLCAxMDE0MywgCi0gICAgMTAxNTMsIDEwMTYxLCA5MzQ2LCAxMDE2NCwgOTM1MSwgMTAxNzIsIDEwMTg0LCAxMDE5NywgMTAyMTIsIDEwMjIzLCAKLSAgICAxMDI0MSwgMTAyNTIsIDEwMjY1LCAxMDI3NiwgMTAyODcsIDEwMjk5LCAxMDMxMiwgMTAzMjMsIDEwMzM0LCAxMDM0NSwgCi0gICAgMjI2NCwgMTAzNTgsIDEwMzYyLCAxMDM3MCwgMTAzODEsIDEwMzg4LCAxMDM5NCwgMTAzOTgsIDEwNDA0LCAxMDQwNywgCi0gICAgMTA0MTcsIDEwNDI1LCAxMDQzMiwgMTA0NDAsIDEwNDQ1LCAxMDQ1MCwgMTA0NTcsIDEwNDYzLCAxMDQ2OCwgMTA0NzMsIAotICAgIDEwNDc3LCAxMDQ4MSwgMTA0ODcsIDEwNDkzLCAxMDQ5OCwgMTA1MDMsIDEwNTA4LCAxMDUxMiwgOTM1NiwgOTM2MiwgOTM2OCwgCi0gICAgMTA1MTYsIDEwNTI0LCAxMDUzMywgMTA1NDAsIDU1NTgsIDEwNTQ0LCAxMDU0NiwgMTA1NTEsIDEwNTU2LCAxMDU2MiwgCi0gICAgMTA1NjcsIDEwNTcyLCAxMDU3NywgMTA1ODEsIDEwNTg3LCAxMDU5MiwgMTA1OTgsIDEwNjAzLCAxMDYwOCwgMTA2MTQsIAotICAgIDEwNjE5LCAxMDYyNCwgMTA2MjksIDEwNjM1LCAxMDY0MCwgMTA2NDUsIDEwNjUxLCAxMDY1NywgMTA2NjIsIDEwNjY5LCAKLSAgICAxMDY3NiwgMTA2ODEsIDEwNjg1LCAxMDY4OSwgMTA2OTIsIDEwNzAwLCAxMDcwNSwgMTA3MTAsIDEwNzIwLCAxMDcyNSwgCi0gICAgMTA3MzIsIDEwNzM4LCAxMDc0OCwgMTA3NjIsIDEwNzc2LCAxMDc5MCwgMTA4MDQsIDEwODE5LCAxMDgzNCwgMTA4NTEsIAotICAgIDEwODY5LCAxMDg4MiwgMTA4ODgsIDEwODkzLCAxMDg5OCwgMTA5MDQsIDEwOTA5LCAxMDkxNCwgMTA5MTgsIDEwOTIyLCAKLSAgICAxMDkyNywgMTA5MzEsIDEwOTM3LCAxMDk0MiwgMTA5NDcsIDEwOTUxLCAxMDk1NiwgMTA5NjMsIDEwOTY4LCAxMDk3MiwgCi0gICAgMTA5NzgsIDEwOTgzLCAxMDk4OCwgMTA5OTIsIDEwOTk4LCAxMTAwMywgMTEwMDgsIDExMDE1LCAxMTAyMCwgMTEwMjQsIAotICAgIDExMDI4LCAxMTAzMywgMTEwMzgsIDExMDQ0LCAxMTA0OSwgMTEwNTgsIDExMDY2LCAxMTA3MywgMTEwODAsIDExMDg2LCAKLSAgICAxMTA5MiwgMTEwOTcsIDExMTAyLCAxMTEwOCwgMTExMTMsIDExMTE5LCAxMTEyNCwgMTExMzAsIDExMTM2LCAxMTE0MywgCi0gICAgMTExNDksIDExMTU0LCAxMTE1OSwgNTcwNiwgMTExNjgsIDExMTcxLCAxMTE3NywgMTExODIsIDExMTkyLCAxMTE5OSwgCi0gICAgMTEyMDQsIDExMjEwLCAxMTIxNSwgMTEyMjEsIDExMjI2LCAxMTIzMiwgMTEyMzcsIDExMjQ1LCAxMTI1MiwgMTEyNTcsIAotICAgIDExMjYzLCAxMTI2NywgMTEyNzYsIDExMjg3LCAxMTI5NCwgMTEzMDIsIDExMzA4LCAxMTMxNSwgMTEzMjEsIDExMzI2LCAKLSAgICAxMTMzMCwgMTEzMzYsIDExMzQxLCAxMTM0NiwgMTEzNTEsIDU3MTEsIDQ2MjYsIDI0MjgsIDExMzU1LCAxMTM1OSwgMTEzNjMsIAotICAgIDExMzY3LCAxMTM3MSwgMTEzNzQsIDExMzgxLCAxMTM4OSwgOTM3NywgMTEzOTYsIDExNDA2LCAxMTQxNCwgMTE0MjEsIAotICAgIDExNDMxLCAxMTQ0MCwgODQ5MCwgODQ5OSwgMTE0NDUsIDExNDU1LCAxMTQ3MCwgMTE0NzYsIDExNDgzLCAxMTQ5MCwgCi0gICAgMTE0OTYsIDExNTA2LCAxMTUxNiwgOTM4MiwgMTE1MjUsIDExNTMxLCAxMTUzNywgMTE1NDUsIDExNTUzLCAxMTU1OCwgCi0gICAgMTE1NjcsIDExNTc1LCAxMTU4NywgMTE1OTcsIDExNjA3LCAxMTYxNywgMTE2MjYsIDExNjM4LCAxMTY0OCwgMTE2NTgsIAotICAgIDExNjY5LCAxMTY3NCwgMTE2ODYsIDExNjk4LCAxMTcxMCwgMTE3MjIsIDExNzM0LCAxMTc0NiwgMTE3NTgsIDExNzcwLCAKLSAgICAxMTc4MiwgMTE3OTQsIDExODA1LCAxMTgxNywgMTE4MjksIDExODQxLCAxMTg1MywgMTE4NjUsIDExODc3LCAxMTg4OSwgCi0gICAgMTE5MDEsIDExOTEzLCAxMTkyNSwgMTE5MzYsIDExOTQ4LCAxMTk2MCwgMTE5NzIsIDExOTg0LCAxMTk5NiwgMTIwMDgsIAotICAgIDEyMDIwLCAxMjAzMiwgMTIwNDQsIDEyMDU2LCAxMjA2NywgMTIwNzksIDEyMDkxLCAxMjEwMywgMTIxMTUsIDEyMTI3LCAKLSAgICAxMjEzOSwgMTIxNTEsIDEyMTYzLCAxMjE3NSwgMTIxODcsIDEyMTk4LCAxMjIxMCwgMTIyMjIsIDEyMjM0LCAxMjI0NiwgCi0gICAgMTIyNTgsIDEyMjcwLCAxMjI4MiwgMTIyOTQsIDEyMzA2LCAxMjMxOCwgMTIzMjksIDEyMzQxLCAxMjM1MywgMTIzNjUsIAotICAgIDEyMzc3LCAxMjM4OSwgMTI0MDEsIDEyNDEzLCAxMjQyNSwgMTI0MzcsIDEyNDQ5LCAxMjQ2MCwgMTI0NzIsIDEyNDg0LCAKLSAgICAxMjQ5NiwgMTI1MDgsIDEyNTIwLCAxMjUzMiwgMTI1NDQsIDEyNTU2LCAxMjU2OCwgMTI1ODAsIDEyNTkxLCAxMjYwMywgCi0gICAgMTI2MTUsIDEyNjI3LCAxMjYzOSwgMTI2NTIsIDEyNjY1LCAxMjY3OCwgMTI2OTEsIDEyNzA0LCAxMjcxNywgMTI3MzAsIAotICAgIDEyNzQyLCAxMjc1NSwgMTI3NjgsIDEyNzgxLCAxMjc5NCwgMTI4MDcsIDEyODIwLCAxMjgzMywgMTI4NDYsIDEyODU5LCAKLSAgICAxMjg3MiwgMTI4ODQsIDEyODk3LCAxMjkxMCwgMTI5MjMsIDEyOTM2LCAxMjk0OSwgMTI5NjIsIDEyOTc1LCAxMjk4OCwgCi0gICAgMTMwMDEsIDEzMDE0LCAxMzAyNiwgMTMwMzksIDEzMDUyLCAxMzA2NSwgMTMwNzgsIDEzMDkxLCAxMzEwNCwgMTMxMTcsIAotICAgIDEzMTMwLCAxMzE0MywgMTMxNTYsIDEzMTY4LCAxMzE4MSwgMTMxOTQsIDEzMjA3LCAxMzIyMCwgMTMyMzMsIDEzMjQ2LCAKLSAgICAxMzI1OSwgMTMyNzIsIDEzMjg1LCAxMzI5OCwgMTMzMTAsIDEzMzIzLCAxMzMzNiwgMTMzNDksIDEzMzYyLCAxMzM3NSwgCi0gICAgMTMzODgsIDEzNDAxLCAxMzQxNCwgMTM0MjcsIDEzNDQwLCAxMzQ1MiwgMTM0NjMsIDEzNDc2LCAxMzQ4OSwgMTM1MDIsIAotICAgIDEzNTE1LCAxMzUyOCwgMTM1NDEsIDEzNTU0LCAxMzU2NywgMTM1ODAsIDEzNTkzLCAxMzYwNSwgMTM2MTgsIDEzNjMxLCAKLSAgICAxMzY0NCwgMTM2NTcsIDEzNjcwLCAxMzY4MywgMTM2OTYsIDEzNzA5LCAxMzcyMiwgMTM3MzUsIDEzNzQ3LCAxMzc2MCwgCi0gICAgMTM3NzMsIDEzNzg2LCAxMzc5OSwgMTM4MTIsIDEzODI1LCAxMzgzOCwgMTM4NTEsIDEzODY0LCAxMzg3NywgMTM4ODksIAotICAgIDEzOTAyLCAxMzkxNSwgMTM5MjgsIDEzOTQxLCAxMzk1NCwgMTM5NjcsIDEzOTgwLCAxMzk5MywgMTQwMDYsIDE0MDE5LCAKLSAgICAxNDAzMSwgMTQwNDQsIDE0MDU3LCAxNDA3MCwgMTQwODMsIDE0MDk2LCAxNDEwOSwgMTQxMjIsIDE0MTM1LCAxNDE0OCwgCi0gICAgMTQxNjEsIDE0MTczLCAxNDE4NiwgMTQxOTksIDE0MjEyLCAxNDIyNSwgMTQyMzgsIDE0MjUxLCAxNDI2NCwgMTQyNzcsIAotICAgIDE0MjkwLCAxNDMwMywgMTQzMTUsIDE0MzI4LCAxNDM0MSwgMTQzNTQsIDE0MzY3LCAxNDM4MCwgMTQzOTMsIDE0NDA2LCAKLSAgICAxNDQxOSwgMTQ0MzIsIDE0NDQ1LCAxNDQ1NywgMTQ0NzAsIDE0NDgzLCAxNDQ5NiwgMTQ1MDksIDE0NTIyLCAxNDUzNSwgCi0gICAgMTQ1NDgsIDE0NTYxLCAxNDU3NCwgMTQ1ODcsIDE0NTk5LCAxNDYxMiwgMTQ2MjUsIDE0NjM4LCAxNDY1MSwgMTQ2NjQsIAotICAgIDE0Njc3LCAxNDY5MCwgMTQ3MDMsIDE0NzE2LCAxNDcyOSwgMTQ3NDEsIDE0NzU0LCAxNDc2NywgMTQ3ODAsIDE0NzkzLCAKLSAgICAxNDgwNiwgMTQ4MTksIDE0ODMyLCAxNDg0NSwgMTQ4NTgsIDE0ODcxLCAxNDg4MywgMTQ4OTQsIDE0OTAyLCAxNDkwOSwgCi0gICAgMTQ5MTUsIDE0OTE5LCAxNDkyNSwgMTQ5MzEsIDE0OTM5LCAxNDk0NSwgMTQ5NTAsIDU1NjMsIDE0OTU0LCAxNDk2MSwgCi0gICAgMTQ5NjksIDE0OTc2LCAxNDk4MywgNjgwNCwgMTQ5OTAsIDE0OTk5LCAxNTAwNCwgNDY0MiwgMTUwMTEsIDE1MDE2LCAKLSAgICAxNTAyMSwgMTUwMjksIDE1MDM2LCAxNTA0MywgMTUwNDksIDE1MDU4LCAxNTA2NywgMTUwNzMsIDE1MDc4LCAxNTA4NiwgCi0gICAgMTUwOTIsIDE1MTAyLCAxNTExMSwgMTUxMTUsIDE1MTIyLCAxNTEyNiwgMTUxMzEsIDE1MTM3LCAxNTE0NSwgMTUxNDksIAotICAgIDkzOTIsIDE1MTU4LCAxNTE2MiwgMTUxNjgsIDU0MTAsIDE1MTc1LCAxNTE4MSwgMTUxODYsIDE1MTkwLCAxNTE5NCwgNTk0MSwgCi0gICAgMTUxOTksIDE1MjA3LCAxNTIxNCwgMTUyMjMsIDE1MjMwLCAxNTIzNywgMTUyNDMsIDE1MjQ3LCAxNTI1MywgMTUyNTksIAotICAgIDE1MjY3LCAxNTI3MywgMTUyODAsIDE1Mjg2LCAxNTI5NSwgMTUzMDMsIDE1MzEyLCAxNTMxNywgMTUzMjgsIDE1MzMzLCAKLSAgICAxNTMzOCwgMTUzNDMsIDQ4MTUsIDE1MzQ3LCAxNTM1NCwgMTUzNTksIDE1MzY3LCAxNTM3OSwgMTUzODQsIDE1Mzg4LCAKLSAgICAxNTM5MSwgMTUzOTcsIDE1NDAzLCAxNTQwOCwgMTU0MTIsIDE1NDE1LCAxNTQyNiwgMTU0MzEsIDU3MzMsIDE1NDM4LCAKLSAgICA1NTc0LCA1NzM4LCAxNTQ0MywgMTU0NDcsIDExMSwgMTU0NTUsIDE1NDU5LCAxNTQ2MywgMTU0NjcsIDE1NDcyLCAxNTQ3NiwgCi0gICAgMTU0ODAsIDc4NDUsIDE1NDg0LCAxNTQ5MCwgMTU0OTUsIDE1NDk5LCAxNTUwMywgMTU1MTEsIDE1NTE1LCAxNTUyMCwgCi0gICAgMTU1MjUsIDE1NTI5LCAxNTUzNSwgMTU1NDAsIDE1NTQ0LCAxNTU0OSwgMTU1NTQsIDE1NTU4LCAxNTU2NSwgMTU1NjksIAotICAgIDE1NTc0LCAxNTU3OCwgMTU1ODEsIDE1NTk0LCAxNTU5OSwgMTU2MDgsIDE1NjEzLCAxNTYxNiwgMjI5NywgMjMwMiwgCi0gICAgMTU2MjAsIDE1NjI2LCAxNTYzMSwgMTU2MzYsIDE1NjQxLCAxNTY0NywgMTU2NTIsIDE1NjU3LCAxNTY2MSwgMTU2NjYsIAotICAgIDE1NjcxLCAxNTY3NywgMTU2ODIsIDE1Njg3LCAxNTY5MywgMTU2OTgsIDE1NzAyLCAxNTcwNywgMTU3MTIsIDE1NzE3LCAKLSAgICAxNTcyMSwgMTU3MjYsIDE1NzMxLCAxNTczNiwgMTU3NDEsIDE1NzQ1LCAxNTc0OSwgMTU3NTQsIDI0MzcsIDE1NzAzLCAKLSAgICAxNTc1OCwgMTU3NjUsIDYwMjAsIDE1Nzc3LCAxNTc4NSwgMTU3MDgsIDE1NzkyLCAxNTc5NywgMTU3MTMsIDE1ODA1LCAKLSAgICAxNTgxMCwgMTU4MTUsIDE1ODIwLCAxNTgyNCwgMTU4MjksIDE1ODMyLCAxNTgzNiwgMTU4NDIsIDE1ODQ3LCA1NDMyLCAKLSAgICAxNzE3LCAxNzIyLCAxNTg1MSwgMTU4NTcsIDE1ODYzLCAxNTg2OCwgMTU4NzIsIDE1ODc2LCAxNTg4MCwgMTU4ODMsIAotICAgIDE1ODg5LCAxNTg5NiwgMTU5MDQsIDE1OTEwLCAxNTkxNiwgMTU5MjEsIDE1OTI2LCA5NjE0LCAxMDEzOSwgMTU5MzAsIAotICAgIDE1OTQyLCAxNTk0NSwgMTU5NTIsIDE1OTU2LCAxNTk2NywgMTU5NzYsIDE1OTg5LCAxNTk5OSwgMTYwMTMsIDE2MDI1LCAKLSAgICAxNjAzOSwgMTYwNDksIDE2MDU1LCAxNjA3MywgMTYwOTIsIDE2MTA1LCAxNjExOSwgMTYxMzUsIDE2MTQ2LCAxNjE2MywgCi0gICAgMTYxODEsIDE2MTkzLCAxNjIwNywgMTYyMjEsIDE2MjMzLCAxNjI1MCwgMTYyNjksIDE2MjgxLCAxNjI5OSwgMTYzMTIsIAotICAgIDE2MzI2LCAxNjM0NiwgNjUzNiwgMTYzNTgsIDE2MzYzLCAxNjM2OCwgMTYzNzQsIDE2Mzc5LCAyMDc5LCAxNjM4MywgCi0gICAgMTYzODksIDE2MzkzLCAxNjM5NiwgMTY0MDAsIDE2NDA4LCAxNjQxNCwgMTU3MjIsIDE2NDE4LCAxNjQyOSwgMTY0MzUsIAotICAgIDE2NDQxLCAxNjQ1MCwgMTY0NTcsIDE2NDY0LCAxNjQ3MCwgMTY0NzksIDE2NDg3LCAxNjQ5NywgMTY1MDIsIDE2NTExLCAKLSAgICAxNjUyMCwgMTY1MzEsIDE2NTQyLCAxNjU1MiwgMTY1NTcsIDE2NTYxLCAxNjU2OSwgMTY1NzksIDE2NTkwLCAxNjU5OCwgCi0gICAgMTY2MDUsIDE2NjExLCAxNjYxNiwgMTU3MzIsIDE2NjIwLCAxNjYyOSwgMTY2MzQsIDE2NjQzLCAxNjY1MSwgMTY2NjEsIAotICAgIDE2NjcwLCAxNjY3NiwgMTY2ODIsIDE1NzM3LCAxNTc0MiwgMTY2ODYsIDE2Njk2LCA5NTgsIDk1NjgsIDMwMzEsIDE2NzA1LCAKLSAgICAxNjcxNCwgMTY3MjIsIDE2NzMzLCAxNjc0NCwgMTY3NTQsIDE2NzYzLCAxNjc3MiwgMTY3ODEsIDE2Nzg3LCAxNjc5NiwgCi0gICAgMTY4MDQsIDU3MTgsIDE2ODEwLCAxNjgxMywgMTY4MTcsIDE2ODIyLCAxNjgyNywgMTY4MzUsIDE1NzUwLCAxNjgzOSwgCi0gICAgMTY4NDUsIDE2ODQ5LCAxNjg1NSwgMTY4NjEsIDI4NzIsIDE2ODY5LCAxNjg3NCwgMTY4NzgsIDE2ODgyLCAxNjg4OSwgCi0gICAgMTY4OTMsIDE2OTAxLCAxNjkwNywgMTY5MTIsIDE2OTE2LCAxNjkyMSwgMTY5MjcsIDE2OTM4LCAxNjk0MywgMTY5NDcsIAotICAgIDE2OTU4LCAxNjk2MiwgMTY5NjYsIDE2OTY5LCAxNjk3MywgMTY5NzgsIDE2OTgyLCAxNjk4NiwgODI5LCAxNjk5MCwgNSwgCi0gICAgMTY5OTYsIDE3MDAwLCAxNzAwNCwgMTcwMDgsIDE3MDEzLCAxNzAxNywgMTcwMjEsIDE3MDI1LCAxNzAyOSwgMTcwMzQsIAotICAgIDE3MDM4LCAxNzA0MywgMTcwNDcsIDE3MDUwLCAxNzA1NCwgMTcwNTksIDE3MDYzLCAxNzA2OCwgMTcwNzIsIDE3MDc2LCAKLSAgICAxNzA4MCwgMTcwODUsIDE3MDg5LCAxNzA5MywgMTcxMDMsIDE3MTA4LCAxNzExMiwgMTcxMTYsIDE3MTIxLCAxNzEyNiwgCi0gICAgMTcxMzUsIDE3MTQwLCAxNzE0NSwgMTcxNDksIDE3MTUzLCAxNzE2NSwgMTcxNzQsIDE3MTgzLCAxNzE4OSwgMTcxOTMsIAotICAgIDE3MjAzLCAxNzIxMiwgMTcyMjAsIDE3MjI2LCAxNzIzMCwgMTcyMzcsIDE3MjQ3LCAxNzI1NiwgMTcyNjQsIDE3MjcyLCAKLSAgICAxNzI3OSwgMTcyODgsIDE3Mjk3LCAxNzMwNSwgMTczMTAsIDE3MzE0LCAxNzMxOCwgMTczMjEsIDE3MzIzLCAxNzMyNywgCi0gICAgMTczMzEsIDE3MzM2LCAxNzM0MCwgMTczNDQsIDE3MzQ3LCAxNzM1MSwgMTczNTQsIDE3MzU4LCAxNzM2MSwgMTczNjUsIAotICAgIDE3MzY5LCAxNzM3MywgMTczNzcsIDE3MzgyLCAxNzM4NywgMTczOTIsIDE3Mzk2LCAxNzM5OSwgMTc0MDQsIDE3NDEwLCAKLSAgICAxNzQxNSwgMTc0MjEsIDE3NDI2LCAxNzQzMCwgMTc0MzQsIDE3NDM4LCAxNzQ0MywgMTc0NDcsIDE3NDUyLCAxNzQ1NiwgCi0gICAgMTc0NjMsIDE3NDY3LCAxNzQ3MCwgMTc0NzQsIDE3NDgwLCAxNzQ4NiwgMTc0OTAsIDE3NDk0LCAxNzQ5OSwgMTc1MDYsIAotICAgIDE3NTEyLCAxNzUxNiwgMTc1MjUsIDE3NTI5LCAxNzUzMywgMTc1MzYsIDE3NTQyLCAxNzU0NywgMTc1NTMsIDE3NTU4LCAKLSAgICAxNzc2LCAyNDQ5LCAxNzU2MiwgMTc1NjMsIDE3NTY2LCAxNzU3MCwgMTc1NzQsIDE3NTc5LCAxNzU4MywgMTc1ODcsIAotICAgIDE3NTkwLCAxNzU5NSwgMTc1OTksIDE3NjAyLCAxNzYwNywgMTc2MTEsIDE3NjE2LCAxNzYyMCwgOTU4NywgMTc2MjUsIAotICAgIDE3NjI4LCAxNzYzMSwgMTc2MzUsIDE3NjM5LCAxNzY0NiwgMTc2NTEsIDE3NjU4LCAxNzY2MiwgMTc2NjYsIDE3NjcxLCAKLSAgICAxNzY3NiwgMTc2ODAsIDE3Njg1LCAxNzY5NywgMTc3MDgsIDE3NzEyLCAxNzcxNSwgMTc3MjEsIDQ3NDMsIDIwMDEsIAotICAgIDE3NzI1LCAxNzc0MSwgNTc5NiwgMTc3NjEsIDE3NzcwLCAxNzc4NiwgMTc3OTAsIDE3NzkzLCAxNzc5OSwgMTc4MDksIAotICAgIDE3ODE1LCAxNzgzMCwgMTc4NDIsIDE3ODUzLCAxNzg2MSwgMTc4NzAsIDE3ODc2LCAxNzg4NSwgMTc4OTUsIDE3OTA2LCAKLSAgICAxNzkxNywgMTc5MjYsIDE3OTM1LCAxNzk0MywgMTc5NTAsIDE3OTU4LCAxNzk2NCwgMTc5NjksIDE3OTc1LCAxNzk4MCwgCi0gICAgMTc5ODgsIDE4MDAwLCAxODAxMiwgMTgwMjYsIDE4MDMzLCAxODA0MiwgMTgwNTEsIDE4MDU5LCAxODA2NywgMTgwNzUsIAotICAgIDE4MDgyLCAxODA5MSwgMTgwOTksIDE4MTA5LCAxODExOCwgMTgxMjgsIDE4MTM3LCAxODE0NiwgMTgxNTQsIDE4MTU5LCAKLSAgICAxODE2MywgMTgxNjYsIDE4MTcwLCAxODE3NCwgMTgxNzgsIDE4MTg0LCAxODE5MCwgOTYzMiwgMTgxOTUsIDE4MjA3LCAKLSAgICAxODIxMywgNjE0OSwgMTgyMjQsIDE4MjM0LCAxODI0MywgMTgyNDcsIDE4MjUwLCAxODI1NCwgMTgyNjAsIDE4MjY0LCAKLSAgICAxODI2OSwgMTgyNzgsIDE4Mjg1LCA0Nzg0LCAxODI5MiwgMTgzMDAsIDE4MzA3LCAxODMxMywgMTgzMTgsIDE4MzI0LCAKLSAgICAxODMzMCwgMTgzMzgsIDE4MzQyLCAxODM0NSwgMTgzNDcsIDE4MTY3LCAxODM1NiwgMTgzNjIsIDE4MzcyLCAxODM3NywgCi0gICAgMTgzODMsIDE4Mzg4LCAxODM5MywgMTgzOTgsIDE4NDA1LCAxODQxNCwgMTg0MjMsIDE4NDI5LCAxODQzNCwgMTg0NDAsIAotICAgIDE4NDQ1LCAxODQ1MiwgMTg0NTcsIDE4NDYxLCAxODQ3MSwgMTg0NzUsIDE4NDgwLCAxODQ5MCwgMTg0OTksIDE4NTAzLCAKLSAgICAxODUxMCwgMTg1MTYsIDE4NTIxLCAxODUyOCwgMTg1MzIsIDgzODAsIDE4NTQwLCAxODU0NywgMTg1NTQsIDE1NTMxLCAKLSAgICAxODA5NiwgMTg1NTksIDE4NTYzLCAxODU2OCwgMTg1ODEsIDE4NTk1LCAxODYxMSwgMTg2MjksIDE4NjQ2LCAxODY2NCwgCi0gICAgMTYxNTIsIDE4NjgxLCAxODY5MywgMTg3MDcsIDEwMjI4LCAxNjE2OSwgMTg3MTksIDE4NzMxLCA5NDQ0LCAxODc0NSwgCi0gICAgMTg3NTAsIDE4NzU1LCAxODc2MSwgMTg3NjUsIDE4NzcwLCAxODc4MCwgMTg3ODYsIDY0NzMsIDE4NzkyLCAxODc5NCwgCi0gICAgMTg3OTksIDE4ODA3LCAxODgxMSwgMTg0MDEsIDE4ODE3LCAxODgyNCwgMTg4MzQsIDE4ODM5LCAxODg0MywgMTg4NDYsIAotICAgIDE4ODUyLCAxODg2MCwgMTg4NzAsIDEwMjU3LCAxODg4NCwgMTg4OTEsIDE4ODk1LCAxODg5OCwgMTg5MDMsIDE4OTA3LCAKLSAgICAxODkxNywgMTg5MjIsIDE4OTI3LCAxODkzNSwgMTg5NDQsIDE4OTQ5LCAxMDI2MiwgMTg5NTMsIDE4OTU2LCAxODk1OSwgCi0gICAgMTg5NzUsIDE4OTgzLCAxODk5MSwgMTg5OTksIDE5MDA0LCAxOTAwOCwgMTkwMTQsIDE5MDIwLCAxOTAyMywgMTkwMjksIAotICAgIDE5MDQxLCAxOTA0OCwgMTkwNTUsIDE5MDY5LCAxOTA4MiwgMTkwOTEsIDE5MTAzLCAxOTExNCwgMTkxMjMsIDE5MTMyLCAKLSAgICAxOTE0MCwgMTkxNTEsIDQ3NjYsIDE5MTU4LCAxOTE2NCwgMTkxNjksIDE5MTc1LCAxOTE4NSwgMTkxOTQsIDE5MjAwLCAKLSAgICAxOTIwNSwgMTkyMTIsIDE5MjI0LCAxOTIzMSwgMTkyNDAsIDE5MjQ4LCAxOTI1NCwgMTkyNjAsIDE5MjY1LCAxOTI2OSwgCi0gICAgMTkyNzIsIDE5Mjc4LCAxOTI4MywgMTkyODcsIDE5Mjk4LCAxOTMwNywgMTkzMTUsIDE5MzIwLCAxOTMyNiwgOTk4MSwgCi0gICAgNTE2OSwgMTkzMzEsIDE5MzM0LCAxOTMzNywgMTkzNDMsIDE5MzUxLCAxOTM1OSwgMTkzNjMsIDE5MzY4LCAxOTM3MSwgCi0gICAgMTkzODAsIDE5Mzg4LCAxOTM5OSwgMTk0MDMsIDE5NDA5LCAxOTQxNSwgMTk0MTksIDE5NDI1LCAxOTQ0NywgMTk0NzEsIAotICAgIDE5NDc4LCAxOTQ4NCwgMTk0OTUsIDE5NTEzLCAxOTUyMCwgMTk1MjQsIDE5NTMzLCAxOTU0NiwgMTk1NTQsIDE5NTY2LCAKLSAgICAxOTU3NywgMTk1ODcsIDE5NjAxLCAxOTYxMCwgMTk2MTgsIDE5NjMwLCA1ODEzLCAxOTY0MSwgMTk2NTIsIDE5NjY0LCAKLSAgICAxOTY3NCwgMTk2ODMsIDE5Njg4LCAxOTY5MiwgMTk3MDAsIDE5NzA1LCAxOTcwOSwgMTk3MTIsIDE5NzIwLCAxOTcyOCwgCi0gICAgMTk3MzcsIDE5NzQ2LCAyMjc4LCAxOTc1MiwgMTk3NjEsIDE5NzcxLCAxOTc4MSwgMTk3OTAsIDE5Nzk1LCAxOTgwNiwgCi0gICAgMTk4MTcsIDE5ODIxLCAxOTgzMSwgMTk4NDAsIDE5ODUwLCAxOTg2MCwgMTk4NjgsIDE5ODc3LCAxOTg4NCwgMTk4OTIsIAotICAgIDE5ODk5LCAxOTkwOCwgMTk5MTIsIDE5OTIwLCAxOTkyNywgMTk5MzQsIDE5OTQ1LCAxOTk2MCwgMTk5NjcsIDE5OTc3LCAKLSAgICAxOTk4NiwgOTA3MCwgMTk5OTIsIDE5OTk3LCAyMDAwMSwgMjAwMDksIDIwMDE1LCAyMDAyNCwgMjAwMjksIDIwMDM5LCAKLSAgICAxMTk0LCAyMDA0MywgMTI1NiwgNTgzLCAyMDA0NiwgMjAwNTUsIDE4MTA2LCAyMDA2MiwgMjAwNjcsIDIwMDcxLCAyMDA3NywgCi0gICAgMTI4OSwgNDQ0LCAzMTcsIDIwMDgyLCAyMDA5MSwgMjAxMDAsIDIwMTA4LCAyMDExOSwgMjAxMjgsIDIwMTM2LCAyMDEzOSwgCi0gICAgMjAxNDcsIDIwMTU1LCA5NjAwLCAyMDE2MCwgMjAxNjYsIDMzOTksIDIwMTcxLCAyMDE3NSwgMjAxODEsIDIwMTg1LCAKLSAgICAyMDE5MiwgMTQ1MSwgMjAxOTgsIDU4ODEsIDIwMjA1LCAyMDIxNSwgMjAyMjMsIDIwMjI5LCAyMDIzOCwgMjAyNDYsIAotICAgIDIwMjU0LCAyMDI2MSwgMjAyNjgsIDE0ODYsIDIwMjc1LCAyMDI4MSwgMjAyOTIsIDIwMzAzLCAyMDMxMSwgMjAzMTgsIAotICAgIDIwMzI3LCAyMDMzNSwgMjAzNDIsIDIwMzQ5LCAyMDM2MiwgMjAzNzMsIDIwMzkyLCAxMjk0LCAyMDM5NiwgMjA0MDEsIAotICAgIDIwNDA5LCAyOTA4LCAyMDQxMywgMjA0MTgsIDE0NTUsIDE3MzQ1LCAyMDQyOCwgMjA0MzIsIDIwNDM3LCAyMDQ0MSwgMjg1NCwgCi0gICAgMjA0NDcsIDIwNDU1LCAyOTA5LCAyMzksIDIwNDYzLCAyMDQ3MSwgMjA0NzksIDIwNDg2LCAyMDQ5MiwgMjA0OTcsIDIwNTA0LCAKLSAgICAyMDUwNywgMjA1MTMsIDE4MjY1LCAyMDUxOSwgODgsIDIwNTIzLCAyMDUyNywgMjA1MzMsIDIwNTM4LCAyMDU0NCwgMjAxMiwgCi0gICAgMjA1NDgsIDIwNTUyLCAyMDU1NSwgMjA1NTgsIDIwNTY1LCAyMDU3MSwgMTU4MTcsIDI5NTMsIDEwOTIwLCAyMDU3NiwgCi0gICAgMjA1NzksIDIwNTg3LCAyMDU5MCwgMjA2MDIsIDIwNjA3LCAyMDYxMSwgMjA2MTksIDIwNjI2LCAyMDYzMiwgMjA2MzksIAotICAgIDIwNjQ2LCAyMDY0OSwgMjA2NTMsIDIwNjU3LCAxNDU5LCAyMDY2NywgMjMzMiwgMjEzMiwgMjA2NzIsIDIwNjc3LCAyMDY4MSwgCi0gICAgMjA2ODYsIDIwNjkxLCAyMDY5NywgMjA3MDIsIDIwNzA3LCAyMDcxMSwgMjA3MTYsIDIwNzIyLCAyMDcyNywgMjA3MzIsIAotICAgIDIwNzM4LCAyMDc0MywgMjA3NDcsIDIwNzUyLCAyMDc1NywgMjA3NjIsIDIwNzY3LCAyMDc3MiwgMjA3NzgsIDIwNzg0LCAKLSAgICAyMDc4OSwgMjA3OTMsIDIwNzk4LCAyMDgwMiwgMjA4MDcsIDIwODEyLCAyMDgxNywgMjA4MjEsIDIwODI2LCAyMDgzMSwgCi0gICAgMjA4MzYsIDIwODQxLCAyMDg0NywgMjA4NTMsIDIwODU4LCAyMDg2MiwgMjA4NjcsIDIwODcyLCAyMDg3NywgMjA4ODIsIAotICAgIDIwODg3LCAyMDg5MSwgMjA4OTYsIDIwOTAxLCAyMDkwNiwgMjA5MTAsIDIwOTE1LCAyMDkyMywgMjA5MjksIDIwOTM1LCAKLSAgICAyMDk0MSwgMjA5NDYsIDIwOTUwLCAyMDk1MywgMjA5NTcsIDIwOTYyLCAyMDk2NiwgMjA5NzEsIDIwOTc1LCAyMDk3OCwgCi0gICAgMjA5ODMsIDE1MjI2LCAyMDIwMiwgMjA5ODgsIDIwOTkyLCAyMDk5NywgMjEwMDEsIDIxMDA0LCAyMTAwNywgMjEwMTEsIAotICAgIDIxMDE2LCAyMTAyNCwgMjEwMjgsIDIxMDMzLCAyMTAzNywgMjEwNDEsIDIxMDQ2LCAyMTA1MSwgMjEwNTUsIDIxMDYxLCAKLSAgICAyMTA2NiwgMjEwNzMsIDIxMDgwLCAyMTA4NCwgMjEwODcsIDIxMDkzLCAyMTEwMiwgMjExMDksIDIxMTEzLCAyMTExOCwgCi0gICAgMjExMjIsIDIxMTI4LCAyMTEzMiwgMjExMzgsIDcyNDIsIDEwNDg0LCAyMTE0MywgMjExNDgsIDIxMTUzLCAyMTE1OSwgCi0gICAgMjExNjQsIDIxMTY5LCAyMTE3MywgMjExNzgsIDIxMTgzLCAyMTE4OSwgMjExOTQsIDIxMTk5LCAyMTIwMywgMjEyMDgsIAotICAgIDIxMjEzLCAyMTIxNywgMjEyMjIsIDIxMjI3LCAyMTIzMiwgMjEyMzYsIDIxMjQxLCAyMTI0NiwgMjEyNTEsIDIxMjU1LCAKLSAgICAyMTI1OSwgMjEyNjMsIDIxMjcyLCAyMTI3OCwgMjEyODQsIDIxMjkzLCAyMTMwMSwgMjEzMDYsIDIxMzEwLCAyMTMxNywgCi0gICAgMjEzMjMsIDIxMzI3LCAyMTMzMiwgMjEzNDEsIDIxMzQ2LCAxNDg1LCAyMTM1MiwgMjEzNTUsIDIxMzU5LCAxNTg1OCwgCi0gICAgMTU4NjQsIDIxMzY1LCAyMTM2OSwgMjEzODAsIDIxMzkxLCAyMTQwMywgMjE0MTAsIDIxNDE3LCAyMTQyMiwgMjE0MjYsIAotICAgIDE0OTI4LCA2MjYsIDE1MjI1LCAyMTQzNCwgMjE0MzgsIDIxNDQzLCAyMTQ0OSwgMjE0NTQsIDIxNDYwLCAyMTQ2NSwgCi0gICAgMjE0NzEsIDIxNDc2LCAyMzg2LCAyODE2LCAyMTQ4MCwgMjE0ODMsIDIxNDg4LCAyMTQ5MywgMjE0OTksIDIxNTA0LCAKLSAgICAyMTUwOSwgMjE1MTMsIDIxNTE4LCAyMTUyNCwgMjE1MjksIDIxNTM0LCAyMTU0MCwgMjE1NDUsIDIxNTQ5LCAyMTU1NCwgCi0gICAgMjE1NTksIDIxNTY0LCAyMTU2OSwgMjE1NzMsIDIxNTc4LCAyMTU4MywgMjE1ODgsIDIxNTk0LCAyMTYwMCwgMjE2MDYsIAotICAgIDIxNjExLCAyMTYxNSwgMjE2MjAsIDI5NjksIDIxNjI0LCAyMTYyNywgNDgyNSwgMjE2MzEsIDIxNjM3LCAyMTY0NCwgNDgzNCwgCi0gICAgMjE2NDgsIDIxNjU1LCAyMTY2MSwgMjE2NzAsIDIxNjc4LCAyMTY4MiwgMjE2ODksIDIxNjk1LCAyMTY5OSwgMjE3MDIsIAotICAgIDIxNzExLCAyMTcxOSwgMjE3MjMsIDIxNzMzLCAyMTc0MywgMjE3NDksIDIxNzU5LCAyMTc2NCwgMjE3NzcsIDIxNzkxLCAKLSAgICAyMTgwMiwgMjE4MTQsIDIxODI4LCAyMTg0MSwgMjE4NTMsIDk0NTUsIDIxODY1LCAyMTg3MCwgMjE4NzUsIDIxODc5LCAKLSAgICAyMTg4MywgMjE4ODcsIDE3NjUsIDE5MTEyLCAyMTg5MSwgMjE4OTYsIDIxOTAxLCAyMTkwNSwgMjE5MDgsIDIxOTE0LCAKLSAgICAyMTkyMCwgNjI3NywgMTAxNjgsIDIxOTI1LCAyMTkzMCwgMjE5MzUsIDIxNDQ0LCAyMTk0MCwgMjE5NDUsIDIxOTUxLCAKLSAgICAyMTQ1MCwgMjE5NTYsIDIxOTU5LCAyMTQ1NSwgMjE5NjQsIDIxOTcwLCAyMTk3NiwgMjE0NjEsIDIxOTgxLCAyMTk4NiwgCi0gICAgMjE5OTIsIDIxOTk3LCAyMjAwMiwgMjIwMDgsIDIyMDE0LCAyMjAxOSwgMjIwMjQsIDIyMDI4LCAyMjAzMywgMjIwMzgsIAotICAgIDIyMDQzLCAyMjA1MSwgMjIwNTUsIDIyMDYwLCAyMjA2NSwgMjIwNjksIDIyMDc0LCAyMjA3OSwgMjIwODQsIDIxNDY2LCAKLSAgICAyMTQ3MiwgMjIwOTAsIDIxNzQsIDIyNCwgMjIwOTMsIDIyMDk2LCAyMjEwMCwgMjIxMDQsIDIyMTEyLCAyMjExOSwgMjIxMjYsIAotICAgIDIyMTMwLCAyMjEzMywgMjIxMzksIDIyMTQ3LCAyMjE1MSwgMjIxNTUsIDIyMTU4LCAyMjE2NSwgMjIxNjksIDIyMTc2LCAKLSAgICAyMjE4NCwgMjIxOTIsIDIyMTk5LCAyMjIwMywgNjg5LCAyNzEsIDIyMjE1LCAyMjIyMCwgMjIyMjUsIDIyMjMxLCAyMjIzNiwgCi0gICAgMjk4MCwgMjIyNDEsIDIyMjQ2LCAyMjI1MSwgMjIyNTYsIDIyMjYxLCAxNTkzOCwgMjIyNjYsIDIyMjcxLCAyMjI3NiwgCi0gICAgMjIyODEsIDIyMjg3LCAyMjI5MiwgMjIyOTYsIDIyMzAxLCAyMjMwNiwgMjIzMTEsIDIyMzE1LCAyMjMyMCwgMjIzMjUsIAotICAgIDE1NzgxLCAyOTg2LCAyMjMzMCwgMjIzMzUsIDIyMzQwLCAyMjM0NiwgMjIzNTEsIDIyMzU2LCAyMjM2MCwgMjIzNjUsIAotICAgIDIyMzcwLCAyMjM3NiwgMjIzODEsIDIyMzg2LCAyMjM5MCwgMjIzOTUsIDIyNDAwLCAyMjQwNSwgMjI0MDksIDIyNDE0LCAKLSAgICAyMjQxOSwgMjI0MjQsIDIyNDMwLCAyMjQzNiwgMjI0NDEsIDIyNDQ1LCAyMjQ1MCwgMjI0NTUsIDIyNDYwLCAyMjQ2NCwgCi0gICAgMjI0NzIsIDIyNDc4LCAyMjQ4MiwgMjI0ODksIDEwODE1LCAyMjQ5NSwgMjI1MDIsIDIyNTEwLCAyMjUxNywgMjI1MjMsIAotICAgIDIyNTM1LCAyMjU0MSwgMjI1NDUsIDIyNTQ5LCAyMjE2MCwgMjI1NTMsIDIyNTY0LCAyMjU2OSwgMjI1NzQsIDIyNTc5LCAKLSAgICAyMjU4MywgMjI1ODgsIDE1ODY5LCAyMjU5MiwgMTUyMzksIDIyNTk3LCAyMjYwMiwgMjI2MDgsIDIyNjEzLCAyMjYxNywgCi0gICAgMjI2MjEsIDIyNjI0LCAyMjYzMCwgMjI2NDEsIDIyNjUzLCAyMjY1OCwgMjI2NjIsIDIyNjY1LCAyMzg3LCAzMDAsIDIyNjY5LCAKLSAgICAyMjY3NSwgMjYsIDIyNjgwLCAyMjY4NCwgMjI2ODgsIDIyNjk2LCAyMjcwMCwgMjI3MDQsIDIyNzA3LCAyMjcxMiwgMjI3MTYsIAotICAgIDIyNzIxLCAyMjcyNSwgMjI3MzAsIDIyNzM0LCAyMjczOSwgMjI3NDMsIDIyNzQ2LCAyMjc0OCwgMjI3NTEsIDIyNzUzLCAKLSAgICAyMjc1NywgMjI3NjksIDIyNzc4LCAyMjc4MiwgMjI3ODgsIDIyNzkzLCAyMjc5OSwgMjI4MDQsIDIyODA5LCAyMjgxMywgCi0gICAgMjI4MTgsIDIyODI1LCAyMjgzMCwgMjI4MzQsIDIyODQxLCAxODEwNCwgMTgxMTQsIDIyODQ1LCAyMjg1MCwgMjI4NTUsIAotICAgIDIyODYwLCAyMjg2NCwgMjI4NzEsIDQ5MTMsIDIyODc3LCAyMjg4NiwgMjI4OTQsIDIyOTA5LCAyMjkyMywgMjI5MzEsIAotICAgIDIyOTQyLCAyMjk1MSwgMjI5NTYsIDIyOTY2LCAyMjk3MSwgMjI5NzUsIDIyOTc4LCAyMjk4MiwgMjI5ODYsIDIyOTkzLCAKLSAgICAyMjk5OCwgNTQwMSwgMjMwMDgsIDIzMDEwLCAyMzAxMywgMjMwMTcsIDIzMDIxLCAyMzAyNiwgMjMwMzIsIDIzMDM3LCAKLSAgICAyMzA0NiwgMjMwNTIsIDIzMDU3LCAyMzA2NCwgMjMwNjgsIDIzMDc1LCAyMzA4OCwgMjMwOTYsIDIzMTAwLCAyMzExMCwgCi0gICAgMjMxMTUsIDIzMTE5LCAyMzEyMywgMjMxMjksIDIzMTM0LCAyMzE0NCwgMjMxNTMsIDIzMTY0LCAyMzE3MiwgMjMxODMsIAotICAgIDIzMTkyLCAyMzE5NSwgMjMxOTksIDIzMjA3LCAyMzIxMywgMjMyMjEsIDIzMjI4LCAyMzIzNCwgMjA5MiwgMjMyMzgsIAotICAgIDIzMjQwLCAyMzI0NSwgMjMyNTAsIDIzMjUzLCAyMzI1NSwgMjMyNTksIDIzMjYyLCAyMzI2NiwgMjMyNzAsIDIzMjc2LCAKLSAgICAyMzI4NiwgMjMyOTEsIDIzMjk3LCAyMzMwMSwgMjMzMDYsIDIzMzE5LCAxODM2NywgMjMzMjUsIDIzMzM0LCAxMTU5MSwgCi0gICAgMjE3MjksIDIzMzQxLCAyMzM0NiwgMjMzNTAsIDIzMzU4LCAyMzM2NSwgMjMzNzAsIDIzMzc0LCAyMzM3OCwgMjMzODYsIAotICAgIDIzMzkyLCAyMzM5OCwgMjM0MDMsIDIzNDA3LCAyMzQxMCwgMjM0MTUsIDE2MjM5LCAyMzQzMSwgMjM0NDMsIDIzNDU1LCAKLSAgICAxNjI1NiwgMjM0NjksIDIzNDgxLCAxMDI4MSwgMjM0OTUsIDIzNTAwLCAyMzUwNSwgMjM1MDksIDIzNTE2LCAyMzUyOCwgCi0gICAgMjM1MzQsIDIzNTM3LCAyMzU0MiwgMjM1NDUsIDIzNTQ3LCAyMzU1MSwgMjM1NTQsIDIzNTU5LCAyMzU2NCwgMjM1NzAsIAotICAgIDIzNTc1LCAyMzU4MCwgMjM1ODYsIDIzNTkyLCAyMzU5NywgMjM2MDEsIDIzNjA2LCAyMzYxMSwgMjM2MTYsIDIzNjIwLCAKLSAgICAyMzYyMywgMjM2MjksIDIzNjM0LCAyMzYzOSwgMjM2NDQsIDIzNjQ4LCAyMzY1MywgMjM2NTksIDIzNjY0LCAyMzY2OSwgCi0gICAgMjM2NzUsIDIzNjgwLCAyMzY4NSwgMjM2OTAsIDIzNjk1LCAyMzcwMCwgMjM3MDQsIDIzNzA3LCAyMzcxMywgMjM3MTcsIAotICAgIDIzNzI1LCAyMzczMiwgMjM3NDAsIDIzNzUwLCAyMzc1NiwgMjM3NjIsIDIzNzY2LCAyMzc3NSwgMjM3ODAsIDIzNzg1LCAKLSAgICA2NTExLCAyMzc5MCwgMjM3OTcsIDIzODAzLCAyMzgwOCwgMjM4MTYsIDIzODIwLCAyMzgyMywgMjM4MzQsIDIzODQxLCAKLSAgICAyMzg0NywgMjM4NTEsIDIzODU0LCAyMzg2MCwgMjM4NjYsIDIzODc0LCAyMDQ4NywgMjM4ODEsIDIzODg5LCAyMzg5NCwgCi0gICAgMjM5MDAsIDIzOTA1LCAyMzkwOSwgMjM5MTYsIDIzOTIyLCAxODM4MCwgMjM5MzEsIDIzOTM2LCAyMzk0NCwgMjM5NTIsIAotICAgIDU5MDksIDM0MTgsIDIzOTU5LCAyMzk2MywgMjM5NjcsIDIzOTcxLCAyMzk3NiwgMjM5ODAsIDIzOTg0LCAyMzk4OSwgCi0gICAgMjM5OTMsIDIzOTk3LCAyNDAwMSwgMjQwMDUsIDI0MDA5LCAyNDAxMiwgMjQwMTQsIDI0MDIyLCAyNDAyNiwgMjQwMzMsIAotICAgIDI0MDM3LCAyNDA0NSwgMjQwNTIsIDI0MDYyLCAyNDA2NiwgMjQwNzAsIDI0MDc4LCAyNDA4NCwgODU5MywgMjQwOTAsIAotICAgIDI0MDk5LCAyNDEwNiwgMjQxMTQsIDI0MTIyLCAyNDEzMCwgMjQxMzcsIDI0MTQ0LCAyNDE1MSwgMjQxNTgsIDI0MTY1LCAKLSAgICAyNDE3MCwgMjQxNzYsIDI0MTkzLCAyNDIwMSwgMjQyMDksIDI0MjE2LCA0MTYsIDI0MjIwLCAyNDIyNiwgMjI5NDcsIAotICAgIDI0MjMyLCAyNDI0MCwgMjQyNDYsIDI0MjUyLCAyNDI2MSwgMjQyNjcsIDI5NDEsIDE1ODI2LCAyNDI3NiwgMjQyODMsIAotICAgIDI0Mjg4LCAyNDI5MiwgMjQyOTksIDI0MzA3LCAyNDMxNiwgMjQzMjYsIDI0MzMyLCAyNDM0MCwgMjQzNDksIDI0MzU3LCAKLSAgICAxNTU3MSwgMjQzNjQsIDI0MzcxLCAyNDM3NywgMjQzODcsIDI0Mzk2LCAyNDQwNywgMjQ0MTEsIDI0NDE2LCAyNDQyMiwgCi0gICAgMjQ0MjgsIDI0NDMzLCAyNDQ0NiwgMjQ0NTksIDI0NDcyLCAyNDQ3OSwgMjQ0ODUsIDI0NDkwLCAyNDQ5NCwgMTQ2NSwgODMsIAotICAgIDI0NDk4LCAyNDUwMCwgMjQ1MDQsIDI0NTA4LCAyNDUxMiwgMjQ1MTcsIDI0NTIxLCA1ODQ5LCAyNDUyNSwgMjQ1MzEsIAotICAgIDM2MjksIDI0NTM3LCAyNDU0MCwgMjQ1NDUsIDI0NTQ5LCAyNDU1NCwgMjQ1NTgsIDI0NTYyLCAyNDU2NywgNjM3MiwgCi0gICAgMjQ1NzEsIDI0NTc1LCAyNDU3OSwgOTk1NCwgMjQ1ODQsIDI0NTg4LCAyNDU5MywgMjQ1OTgsIDI0NjAzLCAyNDYwNywgCi0gICAgMTgzODQsIDI0NjEzLCAyNDYxNiwgMjQ2MjAsIDI0NjI1LCAyNDYyOSwgMjQ2MzUsIDI0NjQwLCAyNDY0NCwgMjQ2NDgsIAotICAgIDQ5NDUsIDQ5NDksIDIwNjA1LCAyNDY1MSwgMjQ2NTksIDI0NjY2LCAyNDY3MCwgMzE2LCAyNDY3NSwgMjQ2ODEsIDI0Njg3LCAKLSAgICAyNDY5MSwgMjQ3MDAsIDI0NzA0LCAyNDcwOSwgMjQ3MTQsIDI0NzE4LCAyNDcyNCwgMjQ3MjksIDI0NzQ0LCAyNDc1OSwgCi0gICAgMjQ3NzQsIDI0NzkwLCAyNDgwOCwgMTk3NTYsIDI0ODIyLCAyNDgyNywgMjQ4MzEsIDIzMDgxLCAyNDgzOSwgMjQ4NDMsIAotICAgIDI0ODUyLCAyNDg2MCwgNjA3MiwgOTc1NiwgMjQ4NjQsIDI0ODY3LCAyNDg3MCwgNDkyNiwgMzExMSwgMjQ4NzUsIDI0ODgzLCAKLSAgICAyNDg4NywgMjQ4OTAsIDI0ODk0LCAyNDg5OSwgMjQ5MDUsIDI0OTEwLCAyNDkxNCwgMjQ5MTksIDI0OTIzLCAyNDkyOSwgCi0gICAgMjQ5MzMsIDI0OTQwLCA3NTUwLCAyNDk0NCwgMjQ5NTAsIDI0OTU3LCAyNDk2NCwgMjQ5NzEsIDIwMDk1LCA0ODYyLCAKLSAgICAyNDk3OCwgMjQ5ODUsIDI0OTkyLCAyNDk5OCwgMjUwMDMsIDI1MDEwLCAyNTAyMSwgMjUwMjcsIDI1MDMyLCAyNTAzOSwgCi0gICAgMjUwNDMsIDI1MDQ3LCAyNTA1NywgMjUwNjMsIDI1MDY4LCAyNTA3MywgMjUwNzgsIDI1MDgzLCAyNTA4NywgMjUwOTEsIAotICAgIDI1MDk3LCAyMDA0LCA3MTEsIDYzODgsIDI1MTA2LCA2MzkzLCAyNTExMSwgNjM5OCwgNjQwMywgNjQwOSwgMjUxMTYsIAotICAgIDI1MTI2LCAyNTEzMCwgNjQxNCwgMjUxMzUsIDI1MTM4LCAyNTE0MywgMjUxNDcsIDI1MTUyLCAyNTE1OSwgMjUxNjUsIAotICAgIDI1MTc1LCAzNDQ0LCAyNTE4NCwgMjUxODgsIDI1MTkyLCAyNTIwMiwgMjUyMTMsIDI1MjE5LCAyNTIyNSwgMjUyMzAsIAotICAgIDI1MjM2LCAyNTIzOSwgMjUyNDYsIDI1MjUyLCAyNTI1NywgMjUyNjQsIDI1MjcxLCAyNTI3NSwgMjUyODUsIDI1Mjk4LCAKLSAgICAyNTMwNywgMjUzMTYsIDI1MzI3LCAyNTM0MCwgMjUzNDksIDI1MzU0LCA2NDE5LCAyNTM1OSwgMjUzNjcsIDI1MzcyLCAKLSAgICA0MzkyLCAyMSwgMjUzNzksIDI1Mzg0LCAxMTAxMiwgMjUzODgsIDI1MzkxLCAyNTM5NCwgMjUzOTgsIDI1NDA2LCAyNTQxMCwgCi0gICAgMjU0MTMsIDI1NDE5LCAyNTQyNSwgMjU0MzMsIDI1NDM5LCAyNTQ0NiwgMjU0NTAsIDI1NDU0LCAxOTkyMywgMjU0NTgsIAotICAgIDI1NDY3LCAyNTQ3MywgMjU0NzgsIDI1NDgyLCAyNTQ5MCwgMjU0OTYsIDI1NTAxLCAyNTUwNiwgMjU1MTAsIDI1NTE2LCAKLSAgICAyNTUyMSwgMjU1MjcsIDMyMTYsIDI1NTM0LCAyNTUzOCwgMjU1NDEsIDk4ODIsIDI1NTUzLCAyNTU2NCwgMjU1NzEsIAotICAgIDI1NTc3LCAyNTU4MSwgMjU1ODcsIDI1NTkyLCAyNTU5OCwgMjU2MDMsIDI1NjA3LCAyNTYxMiwgMjU2MTcsIDI1NjI3LCAKLSAgICAyNTYzMywgMjU2NDYsIDI1NjUxLCAyNTY1NywgMTY2NzIsIDE0NjgsIDg1NSwgMjU2NjIsIDI1NjY4LCAxNCwgMjU2NzYsIAotICAgIDI1NjgzLCAyNTY4NywgMjU2OTEsIDI1Njk5LCAyNTcwMywgMjU3MDgsIDI1NzEyLCAyNTcxOSwgMjU3MjQsIDI1NzI4LCAKLSAgICAyNTczMywgMjU3MzksIDI1NzQ0LCAyNTc1MCwgMjU3NTUsIDI1NzU5LCAyNTc2MywgMjU3NjcsIDI1NzcyLCAyNTc3NiwgCi0gICAgMjU3ODEsIDI1Nzg1LCAyNTc5MiwgMjU3OTcsIDI1ODAxLCAyNTgwNiwgMjU4MTAsIDI1ODE1LCAyNTgxOSwgMTAwMjksIAotICAgIDEwMDM0LCAyNTgyNCwgMjU4MjgsIDI1ODMxLCAyNTgzNSwgMjU4NDAsIDI1ODQ0LCAyNTg1MCwgMjU4NTcsIDI1ODYyLCAKLSAgICAyNTg3MiwgMjU4NzcsIDI1ODg1LCAyNTg4OSwgMjU4OTIsIDI1ODk2LCAyNTkwMSwgMjU5MDYsIDI1OTEwLCAyNTkxNSwgCi0gICAgODYwNCwgMjU5MjYsIDI1OTMwLCAyNTkzMywgMjU5MzcsIDI1OTQxLCAyNTk0NCwgMjU5NDgsIDQ5NTIsIDg2MjAsIDI1OTUxLCAKLSAgICAyNTk1NCwgMjU5NTksIDI1OTYzLCAyNTk3MiwgMjU5ODgsIDI2MDA0LCAyNjAxNCwgMTk3NDIsIDI2MDIxLCAyNjAyNSwgCi0gICAgMjYwMzAsIDI2MDM0LCAyNjAzOCwgMjYwNDMsIDI2MDQ4LCAyNjA1MiwgMjYwNTcsIDI2MDYxLCAxODk2NiwgMjYwNjUsIAotICAgIDI2MDcwLCAyNjA3NCwgMjYwODEsIDI2MDg5LCAyNjA5NSwgMjYxMDIsIDI2MTA4LCAyNjExMiwgMjYxMTgsIDI2MTI2LCAKLSAgICAyNjEzMCwgMjYxMzksIDU4MzAsIDI2MTQ3LCAyNjE1MSwgMjYxNTksIDI2MTY2LCAyNjE3MSwgMjYxNzUsIDI2MTgwLCAKLSAgICAxODU1NiwgMTE0MiwgMjYxODQsIDI2MTkxLCAyNjE5NywgMjYyMDIsIDI2MjA1LCAyNjIwNywgMjYyMTQsIDI2MjIxLCAKLSAgICAyNjIyNywgMjYyMzEsIDI2MjM0LCAyNjIzOCwgMjYyNDIsIDI2MjQ2LCAyNjI1MSwgMjYyNTUsIDI2MjU5LCAyNjI2MiwgCi0gICAgMjYyNjYsIDE2Mjg3LCAyNjI4NSwgNjU0OSwgMjYyOTgsIDI2MzA0LCAyNjMwOCwgMjYzMTIsIDI2MzE5LCAyNjMyNSwgCi0gICAgMjYzMzAsIDI2MzM2LCAyNjM0NiwgMjYzNTgsIDI2MzY5LCAyNjM3NCwgMjYzODEsIDI2Mzg1LCAyNjM4OCwgMTAzNjUsIAotICAgIDEwMDUwLCAyNjM5NiwgMjY0MDAsIDI2NDA0LCAyNjQwOSwgMjY0MTQsIDI2NDE4LCAyNjQyMiwgMjY0MjUsIDQ1OTksIAotICAgIDE5NjM5LCAyNjQzMCwgMjY0MzQsIDI2NDQwLCAyNDMyMiwgMjY0NDYsIDI2NDUwLCAyNjQ1NSwgMjY0NjIsIDI2NDY2LCAKLSAgICAxMDMwNCwgMjY0NjksIDI2NDc2LCA4NjIsIDI2NDgwLCAyNjQ4NSwgMjY0OTAsIDI2NDk1LCAyNjQ5OSwgMjY1MDQsIAotICAgIDI2NTEwLCAyNjUxNSwgMjY1MjEsIDI2NTI2LCAyNjUzNiwgMjY1NDEsIDI2NTQ2LCAxNTYwNCwgMjM4MDAsIDI2NTUxLCAKLSAgICAyNjU1NCwgMjY1NjEsIDI2NTcwLCAyNjU3NCwgMjY1NzcsIDI2NTgxLCA2MDQsIDI2NTg2LCAyNjU5MiwgMjY1OTYsIAotICAgIDI2NjA2LCAyNjYxNSwgMjY2MjIsIDI2NjI4LCAyNjYzMiwgMjY2MzksIDI2NjQ1LCAyNjY1MiwgMjY2NTgsIDI2NjY4LCAKLSAgICAyNjY3NiwgMjY2ODIsIDI2Njg4LCAyNjY5MywgMjY2OTcsIDI2NzA0LCAyNjcxMCwgMjY3MTcsIDI2MjQ3LCA0NzgsIDExMDksIAotICAgIDI2NzIzLCAyNjcyOCwgMjY3MzEsIDI2NzM3LCAyNjc0NSwgMTM5NywgMjY3NTAsIDI2NzU0LCAyNjc2MSwgMjY3NjcsIAotICAgIDI2NzcxLCAyNjc3NiwgMjY3ODUsIDI2Nzk1LCAyNjgwMSwgMjY4MTgsIDI2ODIyLCAyNjgzMSwgMjY4MzksIDI2ODQ1LCAKLSAgICAyNjg1MCwgMjY4NTcsIDI2ODYzLCAyNjg3MSwgMjY4NzYsIDI2ODg0LCAyNjkwMywgMTYzMzIsIDI2OTE3LCAyNjkzMywgCi0gICAgMjY5NDcsIDI2OTUzLCAyNjk1OCwgMjY5NjMsIDI2OTY4LCAyNjk3NCwgMjY5NzksIDI2OTgzLCAyNjk5MCwgMjY5OTUsIAotICAgIDI5OCwgMjQ3MywgMjcwMDIsIDI3MDA3LCAxOTg1NiwgMjY4NjAsIDI3MDEyLCAyNzAxNywgMjcwMjUsIDI3MDI5LCAyNzAzMiwgCi0gICAgMjcwMzgsIDI3MDQyLCAxOTgyNywgMjcwNDUsIDI3MDQ5LCAyNzA1MiwgMjcwNTcsIDI3MDYxLCAyNzA2NiwgMjcwNzEsIAotICAgIDI3MDc1LCAyNzA4MCwgMjcwODQsIDI3MDg4LCAyNzA5MywgMjcwOTksIDE4OTQwLCAyNzEwNCwgMjcxMDgsIDEwNDcwLCAKLSAgICA0NDEsIDQzLCAyMTQ4NCwgMjE0ODksIDIxNDk0LCAyMTUwMCwgMjE1MDUsIDIxNTEwLCAyNzExMSwgMjE1MTQsIDI3MTE1LCAKLSAgICAyMTUxOSwgMjE1MjUsIDI3MTE5LCAyMTUzMCwgMjE1MzUsIDI3MTI3LCAyNzEzMiwgMjE1NDEsIDI3MTM3LCAyNzE0MiwgCi0gICAgMjcxNDcsIDI3MTUyLCAyNzE1OCwgMjcxNjQsIDIxNTQ2LCAyNzE3NywgMjcxODMsIDIxNTUwLCAyMTU1NSwgMjcxODcsIAotICAgIDIxNTYwLCAyMTU2NSwgMjcxOTAsIDI3MTk1LCAyNzE5OSwgMjEzODQsIDI3MjA1LCA4NzY5LCAyNzIxMiwgMjcyMTcsIAotICAgIDIxNTcwLCAyNzIyMSwgMjcyMjYsIDI3MjMxLCAyNzIzNiwgMjcyNDAsIDI3MjQ1LCAyNzI1MCwgMjcyNTYsIDI3MjYxLCAKLSAgICAyNzI2NiwgMjcyNzIsIDI3Mjc4LCAyNzI4MywgMjcyODcsIDI3MjkyLCAyNzI5NywgMjczMDIsIDI3MzA2LCAyNzMxMSwgCi0gICAgMjczMTYsIDI3MzIxLCAyNzMyNywgMjczMzMsIDI3MzM5LCAyNzM0NCwgMjczNDgsIDI3MzUzLCAyNzM1NywgMjE1NzQsIAotICAgIDIxNTc5LCAyMTU4NCwgMjczNjEsIDI3MzY1LCAyMTU4OSwgMjE1OTUsIDIxNjAxLCAyMTYwNywgMjczNzcsIDE4MjgyLCAKLSAgICAyNzM4MSwgMjczODUsIDI3MzkwLCAyNzM5NSwgMjczOTksIDI3NDA5LCAyNzQxNCwgMjc0MTksIDI3NDIzLCAyNzQyNywgCi0gICAgMjc0MzAsIDI3NDM4LCAyMTYxNiwgMTQ3NSwgMjc0NDMsIDI3NDUxLCAyNzQ2MCwgMjc0NjQsIDI3NDcyLCAyNzQ4MCwgCi0gICAgMjc0OTYsIDI3NTAxLCAxNzM5LCA3Njg4LCAyNzUwNSwgMjUwOSwgMjc1MTcsIDI3NTE4LCAyNzUyNiwgMjc1MzMsIDI3NTM4LCAKLSAgICAyNzU0NSwgMTA1OCwgNjQ0MSwgMjc1NDgsIDI3NTUzLCAyNzU1NiwgMjc1NjUsIDEzMDgsIDI3NTcwLCAyNzU3NywgMjc1ODAsIAotICAgIDI3NTg1LCAxNTkxNywgMjIwNywgNjY0MiwgMjc1ODksIDI3NTk1LCAxMjEwLCAyMDMyLCAyNzYwNCwgMjc2MTMsIDIzMjg3LCAKLSAgICA2NDY0LCAzMDU1LCAxMzEzLCAyNzYyMywgMjc2MzEsIDI3NjM4LCAyNzY0MywgMjc2NDcsIDI3NjUxLCAxNjg0MiwgNjQ5MSwgCi0gICAgMjc2NTksIDI3NjY4LCAyNzY3NywgMjc2ODUsIDI3NjkyLCAyNzY5NywgMjc3MTAsIDI3NzIzLCAyNzczNSwgMjc3NDcsIAotICAgIDI3NzU5LCAyNzc3MiwgMjc3ODMsIDI3Nzk0LCAyNzgwMiwgMjc4MTAsIDI3ODIyLCAyNzgzNCwgMjc4NDUsIDI3ODU0LCAKLSAgICAyNzg2MiwgMjc4NjksIDI3ODgxLCAyNzg4OCwgMjc4OTcsIDI3OTA0LCAyNzkxNCwgMjc5MTksIDI3OTI1LCAyNzkzMCwgCi0gICAgMjc5MzQsIDI3OTQxLCAyNzk0NSwgMjc5NTIsIDI3OTYwLCAyMTczLCAyNzk2NywgMjc5NzgsIDI3OTg4LCAyNzk5NywgCi0gICAgMjgwMDUsIDI4MDE1LCAyODAyMywgMjgwMzMsIDI4MDM5LCAyODA1MCwgMjgwNjAsIDI4MDY5LCAyODA3OCwgMjgwODgsIAotICAgIDI4MDk3LCAxNjk1LCAzNywgMjgxMDIsIDI4MTEzLCAyODEyNCwgMjgxMzQsIDI4MTQxLCAyODE0NywgMjgxNTIsIDI4MTU2LCAKLSAgICAyODE2NywgMjgxNzcsIDI4MTg2LCAyODE5NywgMTA5ODUsIDEwOTkwLCAyODIwMiwgMjgyMTEsIDI4MjE2LCAyODIyNiwgCi0gICAgMjgyMzEsIDI4MjM5LCAyODI0NywgMjgyNTQsIDI4MjYwLCA2NTI2LCA5MzIsIDI4MjY0LCAyODI3MCwgMjgyNzUsIDI4Mjc4LCAKLSAgICAxODU4LCAyNjQwMSwgMjgyODYsIDI4MjkwLCAyODI5MywgMTUwMiwgMjgyOTksIDkwMzUsIDEzMTgsIDI4MzA0LCAyODMxNywgCi0gICAgMjgzMzEsIDIyNTgsIDI4MzQ5LCAyODM2MSwgMjI3MiwgMjgzNzUsIDI4Mzg3LCAyODQwMCwgMjg0MTQsIDI4NDI2LCAyMjg5LCAKLSAgICAyODQ0MCwgMTMyNCwgMTMzMCwgMTMzNiwgNjU5NSwgMjg0NDUsIDI4NDUwLCAyODQ1NSwgMjg0NTksIDI4NDc0LCAyODQ4OSwgCi0gICAgMjg1MDQsIDI4NTE5LCAyODUzNCwgMjg1NDksIDI4NTY0LCAyODU3OSwgMjg1OTQsIDI4NjA5LCAyODYyNCwgMjg2MzksIAotICAgIDI4NjU0LCAyODY2OSwgMjg2ODQsIDI4Njk5LCAyODcxNCwgMjg3MjksIDI4NzQ0LCAyODc1OSwgMjg3NzQsIDI4Nzg5LCAKLSAgICAyODgwNCwgMjg4MTksIDI4ODM0LCAyODg0OSwgMjg4NjQsIDI4ODc5LCAyODg5NCwgMjg5MDksIDI4OTI0LCAyODkzOSwgCi0gICAgMjg5NTQsIDI4OTY5LCAyODk4NCwgMjg5OTksIDI5MDE0LCAyOTAyOSwgMjkwNDQsIDI5MDU5LCAyOTA3NCwgMjkwODksIAotICAgIDI5MTA0LCAyOTExOSwgMjkxMzQsIDI5MTQ5LCAyOTE2NCwgMjkxNzksIDI5MTk0LCAyOTIwOSwgMjkyMjQsIDI5MjM5LCAKLSAgICAyOTI1NCwgMjkyNjksIDI5Mjg0LCAyOTI5OSwgMjkzMTQsIDI5MzI5LCAyOTM0NCwgMjkzNTksIDI5Mzc0LCAyOTM4OSwgCi0gICAgMjk0MDQsIDI5NDE5LCAyOTQzNCwgMjk0NDksIDI5NDY0LCAyOTQ3OSwgMjk0OTQsIDI5NTA5LCAyOTUyNCwgMjk1MzksIAotICAgIDI5NTU0LCAyOTU2OSwgMjk1ODQsIDI5NTk5LCAyOTYxNCwgMjk2MjksIDI5NjQ0LCAyOTY1OSwgMjk2NzQsIDI5Njg5LCAKLSAgICAyOTcwNCwgMjk3MTksIDI5NzM0LCAyOTc0OSwgMjk3NjQsIDI5Nzc5LCAyOTc5NCwgMjk4MDksIDI5ODI0LCAyOTgzOSwgCi0gICAgMjk4NTQsIDI5ODY5LCAyOTg4NCwgMjk4OTksIDI5OTE0LCAyOTkyOSwgMjk5NDQsIDI5OTU5LCAyOTk3NCwgMjk5ODksIAotICAgIDMwMDA0LCAzMDAxOSwgMzAwMzQsIDMwMDQ5LCAzMDA2NCwgMzAwNzksIDMwMDk0LCAzMDEwOSwgMzAxMjQsIDMwMTM5LCAKLSAgICAzMDE1NCwgMzAxNjksIDMwMTg0LCAzMDE5OSwgMzAyMTQsIDMwMjI5LCAzMDI0NCwgMzAyNTksIDMwMjc0LCAzMDI4OSwgCi0gICAgMzAzMDQsIDMwMzE5LCAzMDMzNCwgMzAzNDksIDMwMzY0LCAzMDM3OSwgMzAzOTQsIDMwNDA5LCAzMDQyNCwgMzA0MzksIAotICAgIDMwNDU0LCAzMDQ2OSwgMzA0ODQsIDMwNDk5LCAzMDUxNCwgMzA1MjksIDMwNTQ0LCAzMDU1OSwgMzA1NzQsIDMwNTg5LCAKLSAgICAzMDYwNCwgMzA2MTksIDMwNjM0LCAzMDY0OSwgMzA2NjQsIDMwNjc5LCAzMDY5NCwgMzA3MDksIDMwNzI0LCAzMDczOSwgCi0gICAgMzA3NTQsIDMwNzY5LCAzMDc4NCwgMzA3OTksIDMwODE0LCAzMDgyOSwgMzA4NDQsIDMwODU5LCAzMDg3NCwgMzA4ODksIAotICAgIDMwOTA0LCAzMDkxOSwgMzA5MzQsIDMwOTQ5LCAzMDk2NCwgMzA5NzksIDMwOTk0LCAzMTAwOSwgMzEwMjQsIDMxMDM5LCAKLSAgICAzMTA1NCwgMzEwNjksIDMxMDg0LCAzMTA5OSwgMzExMTQsIDMxMTI5LCAzMTE0NCwgMzExNTksIDMxMTc0LCAzMTE4OSwgCi0gICAgMzEyMDQsIDMxMjE5LCAzMTIzNCwgMzEyNDksIDMxMjY0LCAzMTI3OSwgMzEyOTQsIDMxMzA5LCAzMTMyNCwgMzEzMzksIAotICAgIDMxMzU0LCAzMTM2OSwgMzEzODQsIDMxMzk5LCAzMTQxNCwgMzE0MjksIDMxNDQ0LCAzMTQ1OSwgMzE0NzQsIDMxNDg5LCAKLSAgICAzMTUwNCwgMzE1MTksIDMxNTM0LCAzMTU0OSwgMzE1NjQsIDMxNTc5LCAzMTU5NCwgMzE2MDksIDMxNjI0LCAzMTYzOSwgCi0gICAgMzE2NTQsIDMxNjY5LCAzMTY4NCwgMzE2OTksIDMxNzE0LCAzMTcyOSwgMzE3NDQsIDMxNzU5LCAzMTc3NCwgMzE3ODksIAotICAgIDMxODA0LCAzMTgxOSwgMzE4MzQsIDMxODQ5LCAzMTg2NCwgMzE4NzksIDMxODk0LCAzMTkwOSwgMzE5MjQsIDMxOTM5LCAKLSAgICAzMTk1NCwgMzE5NjksIDMxOTg0LCAzMTk5OSwgMzIwMTQsIDMyMDI5LCAzMjA0NCwgMzIwNTksIDMyMDc0LCAzMjA4OSwgCi0gICAgMzIxMDQsIDMyMTE5LCAzMjEzNCwgMzIxNDksIDMyMTY0LCAzMjE3OSwgMzIxOTQsIDMyMjA5LCAzMjIyNCwgMzIyMzksIAotICAgIDMyMjU0LCAzMjI2OSwgMzIyODQsIDMyMjk5LCAzMjMxNCwgMzIzMjksIDMyMzQ0LCAzMjM1OSwgMzIzNzQsIDMyMzg5LCAKLSAgICAzMjQwNCwgMzI0MTksIDMyNDM0LCAzMjQ0OSwgMzI0NjQsIDMyNDc5LCAzMjQ5NCwgMzI1MDksIDMyNTI0LCAzMjUzOSwgCi0gICAgMzI1NTQsIDMyNTY5LCAzMjU4NCwgMzI1OTksIDMyNjE0LCAzMjYyOSwgMzI2NDQsIDMyNjU5LCAzMjY3NCwgMzI2ODksIAotICAgIDMyNzA0LCAzMjcxOSwgMzI3MzQsIDMyNzQ5LCAzMjc2NCwgMzI3NzksIDMyNzk0LCAzMjgwOSwgMzI4MjQsIDMyODM5LCAKLSAgICAzMjg1NCwgMzI4NjksIDMyODg0LCAzMjg5OSwgMzI5MTQsIDMyOTI5LCAzMjk0NCwgMzI5NTksIDMyOTc0LCAzMjk4OSwgCi0gICAgMzMwMDQsIDMzMDE5LCAzMzAzNCwgMzMwNDksIDMzMDY0LCAzMzA3OSwgMzMwOTQsIDMzMTA5LCAzMzEyNCwgMzMxMzksIAotICAgIDMzMTU0LCAzMzE2OSwgMzMxODQsIDMzMTk5LCAzMzIxNCwgMzMyMjksIDMzMjQ0LCAzMzI1OSwgMzMyNzQsIDMzMjg5LCAKLSAgICAzMzMwNCwgMzMzMTksIDMzMzM0LCAzMzM0OSwgMzMzNjQsIDMzMzc5LCAzMzM5NCwgMzM0MDksIDMzNDI0LCAzMzQzOSwgCi0gICAgMzM0NTQsIDMzNDY5LCAzMzQ4NCwgMzM0OTksIDMzNTE0LCAzMzUyOSwgMzM1NDQsIDMzNTU5LCAzMzU3NCwgMzM1ODksIAotICAgIDMzNjA0LCAzMzYxOSwgMzM2MzQsIDMzNjQ5LCAzMzY2NCwgMzM2NzksIDMzNjk0LCAzMzcwOSwgMzM3MjQsIDMzNzM5LCAKLSAgICAzMzc1NCwgMzM3NjksIDMzNzg0LCAzMzc5OSwgMzM4MTQsIDMzODI5LCAzMzg0NCwgMzM4NTksIDMzODc0LCAzMzg4OSwgCi0gICAgMzM5MDQsIDMzOTE5LCAzMzkzNCwgMzM5NDksIDMzOTY0LCAzMzk3OSwgMzM5OTQsIDM0MDA5LCAzNDAyNCwgMzQwMzksIAotICAgIDM0MDU0LCAzNDA2OSwgMzQwODQsIDM0MDk5LCAzNDExNCwgMzQxMjksIDM0MTQ0LCAzNDE1OSwgMzQxNzQsIDM0MTg5LCAKLSAgICAzNDIwNCwgMzQyMTksIDM0MjM0LCAzNDI0OSwgMzQyNjQsIDM0Mjc5LCAzNDI5NCwgMzQzMDksIDM0MzI0LCAzNDMzOSwgCi0gICAgMzQzNTQsIDM0MzY5LCAzNDM4NCwgMzQzOTksIDM0NDE0LCAzNDQyOSwgMzQ0NDQsIDM0NDU5LCAzNDQ3NCwgMzQ0ODksIAotICAgIDM0NTA0LCAzNDUxOSwgMzQ1MzQsIDM0NTQ5LCAzNDU2NCwgMzQ1NzksIDM0NTk0LCAzNDYwOSwgMzQ2MjQsIDM0NjM5LCAKLSAgICAzNDY1NCwgMzQ2NjksIDM0Njg0LCAzNDY5OSwgMzQ3MTQsIDM0NzI5LCAzNDc0NCwgMzQ3NTksIDM0Nzc0LCAzNDc4OSwgCi0gICAgMzQ4MDQsIDM0ODE5LCAzNDgzNCwgMzQ4NDksIDM0ODY0LCAzNDg3OSwgMzQ4OTQsIDM0OTA5LCAzNDkyNCwgMzQ5MzksIAotICAgIDM0OTU0LCAzNDk2OSwgMzQ5ODQsIDM0OTk5LCAzNTAxNCwgMzUwMjksIDM1MDQ0LCAzNTA1OSwgMzUwNzQsIDM1MDg5LCAKLSAgICAzNTEwNCwgMzUxMTksIDM1MTM0LCAzNTE0OSwgMzUxNjQsIDM1MTc5LCAzNTE5NCwgMzUyMDksIDM1MjI0LCAzNTIzOSwgCi0gICAgMzUyNTQsIDM1MjY5LCAzNTI4NCwgMzUyOTksIDM1MzE0LCAzNTMyOSwgMzUzNDQsIDM1MzU5LCAzNTM3NCwgMzUzODksIAotICAgIDM1NDA0LCAzNTQxOSwgMzU0MzQsIDM1NDQ5LCAzNTQ2NCwgMzU0ODAsIDM1NDk2LCAzNTUxMiwgMzU1MjgsIDM1NTQ0LCAKLSAgICAzNTU2MCwgMzU1NzYsIDM1NTkyLCAzNTYwOCwgMzU2MjQsIDM1NjQwLCAzNTY1NiwgMzU2NzIsIDM1Njg4LCAzNTcwNCwgCi0gICAgMzU3MjAsIDM1NzM2LCAzNTc1MiwgMzU3NjgsIDM1Nzg0LCAzNTgwMCwgMzU4MTYsIDM1ODMyLCAzNTg0OCwgMzU4NjQsIAotICAgIDM1ODgwLCAzNTg5NiwgMzU5MTIsIDM1OTI4LCAzNTk0NCwgMzU5NjAsIDM1OTc2LCAzNTk5MiwgMzYwMDgsIDM2MDI0LCAKLSAgICAzNjA0MCwgMzYwNTYsIDM2MDcyLCAzNjA4OCwgMzYxMDQsIDM2MTIwLCAzNjEzNiwgMzYxNTIsIDM2MTY4LCAzNjE4NCwgCi0gICAgMzYyMDAsIDM2MjE2LCAzNjIzMiwgMzYyNDgsIDM2MjY0LCAzNjI4MCwgMzYyOTYsIDM2MzEyLCAzNjMyOCwgMzYzNDQsIAotICAgIDM2MzYwLCAzNjM3NiwgMzYzOTIsIDM2NDA4LCAzNjQyNCwgMzY0NDAsIDM2NDU2LCAzNjQ3MiwgMzY0ODgsIDM2NTA0LCAKLSAgICAzNjUyMCwgMzY1MzYsIDM2NTUyLCAzNjU2OCwgMzY1ODQsIDM2NjAwLCAzNjYxNiwgMzY2MzIsIDM2NjQ4LCAzNjY2NCwgCi0gICAgMzY2ODAsIDM2Njk2LCAzNjcxMiwgMzY3MjgsIDM2NzQ0LCAzNjc2MCwgMzY3NzYsIDM2NzkyLCAzNjgwOCwgMzY4MjQsIAotICAgIDM2ODQwLCAzNjg1NiwgMzY4NzIsIDM2ODg4LCAzNjkwNCwgMzY5MjAsIDM2OTM2LCAzNjk1MiwgMzY5NjgsIDM2OTg0LCAKLSAgICAzNzAwMCwgMzcwMTYsIDM3MDMyLCAzNzA0OCwgMzcwNjQsIDM3MDgwLCAzNzA5NiwgMzcxMTIsIDM3MTI4LCAzNzE0NCwgCi0gICAgMzcxNjAsIDM3MTc2LCAzNzE5MiwgMzcyMDgsIDM3MjI0LCAzNzI0MCwgMzcyNTYsIDM3MjcyLCAzNzI4OCwgMzczMDQsIAotICAgIDM3MzIwLCAzNzMzNiwgMzczNTIsIDM3MzY4LCAzNzM4NCwgMzc0MDAsIDM3NDE2LCAzNzQzMiwgMzc0NDgsIDM3NDY0LCAKLSAgICAzNzQ4MCwgMzc0OTYsIDM3NTEyLCAzNzUyOCwgMzc1NDQsIDM3NTYwLCAzNzU3NiwgMzc1OTIsIDM3NjA4LCAzNzYyNCwgCi0gICAgMzc2NDAsIDM3NjU2LCAzNzY3MiwgMzc2ODgsIDM3NzA0LCAzNzcyMCwgMzc3MzYsIDM3NzUyLCAzNzc2OCwgMzc3ODQsIAotICAgIDM3ODAwLCAzNzgxNiwgMzc4MzIsIDM3ODQ4LCAzNzg2NCwgMzc4ODAsIDM3ODk2LCAzNzkxMiwgMzc5MjgsIDM3OTQ0LCAKLSAgICAzNzk2MCwgMzc5NzYsIDM3OTkyLCAzODAwOCwgMzgwMjQsIDM4MDQwLCAzODA1NiwgMzgwNzIsIDM4MDg4LCAzODEwNCwgCi0gICAgMzgxMjAsIDM4MTM2LCAzODE1MiwgMzgxNjgsIDM4MTg0LCAzODIwMCwgMzgyMTYsIDM4MjMyLCAzODI0OCwgMzgyNjQsIAotICAgIDM4MjgwLCAzODI5NiwgMzgzMTIsIDM4MzI4LCAzODM0NCwgMzgzNjAsIDM4Mzc2LCAzODM5MiwgMzg0MDgsIDM4NDI0LCAKLSAgICAzODQ0MCwgMzg0NTYsIDM4NDcyLCAzODQ4OCwgMzg1MDQsIDM4NTIwLCAzODUzNiwgMzg1NTIsIDM4NTY4LCAzODU4NCwgCi0gICAgMzg2MDAsIDM4NjE2LCAzODYzMiwgMzg2NDgsIDM4NjY0LCAzODY4MCwgMzg2OTYsIDM4NzEyLCAzODcyOCwgMzg3NDQsIAotICAgIDM4NzYwLCAzODc3NiwgMzg3OTIsIDM4ODA4LCAzODgyNCwgMzg4NDAsIDM4ODU2LCAzODg3MiwgMzg4ODgsIDM4OTA0LCAKLSAgICAzODkyMCwgMzg5MzYsIDM4OTUyLCAzODk2OCwgMzg5ODQsIDM5MDAwLCAzOTAxNiwgMzkwMzIsIDM5MDQ4LCAzOTA2NCwgCi0gICAgMzkwODAsIDM5MDk2LCAzOTExMiwgMzkxMjgsIDM5MTQ0LCAzOTE2MCwgMzkxNzYsIDM5MTkyLCAzOTIwOCwgMzkyMjQsIAotICAgIDM5MjQwLCAzOTI1NiwgMzkyNzIsIDM5Mjg4LCAzOTMwNCwgMzkzMjAsIDM5MzM2LCAzOTM1MiwgMzkzNjgsIDM5Mzg0LCAKLSAgICAzOTQwMCwgMzk0MTYsIDM5NDMyLCAzOTQ0OCwgMzk0NjQsIDM5NDgwLCAzOTQ5NiwgMzk1MTIsIDM5NTI4LCAzOTU0NCwgCi0gICAgMzk1NjAsIDM5NTc2LCAzOTU5MiwgMzk2MDgsIDM5NjI0LCAzOTY0MCwgMzk2NTYsIDM5NjcyLCAzOTY4OCwgMzk3MDQsIAotICAgIDM5NzIwLCAzOTczNiwgMzk3NTIsIDM5NzY4LCAzOTc4NCwgMzk4MDAsIDM5ODE2LCAzOTgzMiwgMzk4NDgsIDM5ODY0LCAKLSAgICAzOTg4MCwgMzk4OTYsIDM5OTEyLCAzOTkyOCwgMzk5NDQsIDM5OTYwLCAzOTk3NiwgMzk5OTIsIDQwMDA4LCA0MDAyNCwgCi0gICAgNDAwNDAsIDQwMDU2LCA0MDA3MiwgNDAwODgsIDQwMTA0LCA0MDEyMCwgNDAxMzYsIDQwMTUyLCA0MDE2OCwgNDAxODQsIAotICAgIDQwMjAwLCA0MDIxNiwgNDAyMzIsIDQwMjQ4LCA0MDI2NCwgNDAyODAsIDQwMjk2LCA0MDMxMiwgNDAzMjgsIDQwMzQ0LCAKLSAgICA0MDM2MCwgNDAzNzYsIDQwMzkyLCA0MDQwOCwgNDA0MjQsIDQwNDQwLCA0MDQ1NiwgNDA0NzIsIDQwNDg4LCA0MDUwNCwgCi0gICAgNDA1MjAsIDQwNTM2LCA0MDU1MiwgNDA1NjgsIDQwNTg0LCA0MDYwMCwgNDA2MTYsIDQwNjMyLCA0MDY0OCwgNDA2NjQsIAotICAgIDQwNjgwLCA0MDY5NiwgNDA3MTIsIDQwNzI4LCA0MDc0NCwgNDA3NjAsIDQwNzc2LCA0MDc5MiwgNDA4MDgsIDQwODI0LCAKLSAgICA0MDg0MCwgNDA4NTYsIDQwODcyLCA0MDg4OCwgNDA5MDQsIDQwOTIwLCA0MDkzNiwgNDA5NTIsIDQwOTY4LCA0MDk4NCwgCi0gICAgNDEwMDAsIDQxMDE2LCA0MTAzMiwgNDEwNDgsIDQxMDY0LCA0MTA4MCwgNDEwOTYsIDQxMTEyLCA0MTEyOCwgNDExNDQsIAotICAgIDQxMTYwLCA0MTE3NiwgNDExOTIsIDQxMjA4LCA0MTIyNCwgNDEyNDAsIDQxMjU2LCA0MTI3MiwgNDEyODgsIDQxMzA0LCAKLSAgICA0MTMyMCwgNDEzMzYsIDQxMzUyLCA0MTM2OCwgNDEzODQsIDQxNDAwLCA0MTQxNiwgNDE0MzIsIDQxNDQ4LCA0MTQ2NCwgCi0gICAgNDE0ODAsIDQxNDk2LCA0MTUxMiwgNDE1MjgsIDQxNTQ0LCA0MTU2MCwgNDE1NzYsIDQxNTkyLCA0MTYwOCwgNDE2MjQsIAotICAgIDQxNjQwLCA0MTY1NiwgNDE2NzIsIDQxNjg4LCA0MTcwNCwgNDE3MjAsIDQxNzM2LCA0MTc1MiwgNDE3NjgsIDQxNzg0LCAKLSAgICA0MTgwMCwgNDE4MTYsIDQxODMyLCA0MTg0OCwgNDE4NjQsIDQxODgwLCA0MTg5NiwgNDE5MTIsIDQxOTI4LCA0MTk0NCwgCi0gICAgNDE5NjAsIDQxOTc2LCA0MTk5MiwgNDIwMDgsIDQyMDI0LCA0MjA0MCwgNDIwNTYsIDQyMDcyLCA0MjA4OCwgNDIxMDQsIAotICAgIDQyMTIwLCA0MjEzNiwgNDIxNTIsIDQyMTY4LCA0MjE4NCwgNDIyMDAsIDQyMjE2LCA0MjIzMiwgNDIyNDgsIDQyMjY0LCAKLSAgICA0MjI4MCwgNDIyOTYsIDQyMzEyLCA0MjMyOCwgNDIzNDQsIDQyMzYwLCA0MjM3NiwgNDIzOTIsIDQyNDA4LCA0MjQyNCwgCi0gICAgNDI0NDAsIDQyNDU2LCA0MjQ3MiwgNDI0ODgsIDQyNTA0LCA0MjUyMCwgNDI1MzYsIDQyNTUyLCA0MjU2OCwgNDI1ODQsIAotICAgIDQyNjAwLCA0MjYxNiwgNDI2MzIsIDQyNjQ4LCA0MjY2NCwgNDI2ODAsIDQyNjk2LCA0MjcxMiwgNDI3MjgsIDQyNzQ0LCAKLSAgICA0Mjc2MCwgNDI3NzYsIDQyNzkyLCA0MjgwOCwgNDI4MjQsIDQyODQwLCA0Mjg1NiwgNDI4NzIsIDQyODg4LCA0MjkwNCwgCi0gICAgNDI5MjAsIDQyOTM2LCA0Mjk1MiwgNDI5NjgsIDQyOTg0LCA0MzAwMCwgNDMwMTYsIDQzMDMyLCA0MzA0OCwgNDMwNjQsIAotICAgIDQzMDgwLCA0MzA5NiwgNDMxMTIsIDQzMTI4LCA0MzE0NCwgNDMxNjAsIDQzMTc2LCA0MzE5MiwgNDMyMDgsIDQzMjI0LCAKLSAgICA0MzI0MCwgNDMyNTYsIDQzMjcyLCA0MzI4OCwgNDMzMDQsIDQzMzIwLCA0MzMzNiwgNDMzNTIsIDQzMzY4LCA0MzM4NCwgCi0gICAgNDM0MDAsIDQzNDE2LCA0MzQzMiwgNDM0NDgsIDQzNDY0LCA0MzQ4MCwgNDM0OTYsIDQzNTEyLCA0MzUyOCwgNDM1NDQsIAotICAgIDQzNTYwLCA0MzU3NiwgNDM1OTIsIDQzNjA4LCA0MzYyNCwgNDM2NDAsIDQzNjU2LCA0MzY3MiwgNDM2ODgsIDQzNzA0LCAKLSAgICA0MzcyMCwgNDM3MzYsIDQzNzUyLCA0Mzc2OCwgNDM3ODQsIDQzODAwLCA0MzgxNiwgNDM4MzIsIDQzODQ4LCA0Mzg2NCwgCi0gICAgNDM4ODAsIDQzODk2LCA0MzkxMiwgNDM5MjgsIDQzOTQ0LCA0Mzk2MCwgNDM5NzYsIDQzOTkyLCA0NDAwOCwgNDQwMjQsIAotICAgIDQ0MDQwLCA0NDA1NiwgNDQwNzIsIDQ0MDg4LCA0NDEwNCwgNDQxMjAsIDQ0MTM2LCA0NDE1MSwgNDQxNjAsIDQ0MTY2LCAKLSAgICA0NDE3MiwgNDQxODIsIDQ0MTkwLCA5Njg4LCA0NDIwMywgMTUxMCwgNDQyMTEsIDE5Mjk0LCA0NDIxNywgMjIxMSwgNDQyMjIsIAotICAgIDQ0MjI2LCA0NDIzMSwgNDQyMzgsIDQ0MjQ2LCA0MCwgNDQyNTAsIDQ0MjU2LCA0NDI2MSwgNDQyNjYsIDQ0MjcwLCA0NDI3NSwgCi0gICAgNDQyNzksIDQ0MjgzLCA2NjEzLCA0NDI4NywgNDQyOTcsIDQ0MzEwLCA0NDMyMSwgNDQzMzQsIDQ0MzQxLCA0NDM0NywgCi0gICAgNDQzNTIsIDQ0MzU4LCA0NDM2NCwgNDQzNzAsIDQ0Mzc1LCA0NDM4MCwgNDQzODUsIDQ0MzkwLCA0NDM5NCwgNDQzOTksIAotICAgIDQ0NDA0LCA0NDQwOSwgNDQ0MTUsIDQ0NDIxLCA0NDQyNywgNDQ0MzIsIDQ0NDM2LCA0NDQ0MSwgNDQ0NDYsIDQ0NDUwLCAKLSAgICA0NDQ1NSwgNDQ0NjAsIDQ0NDY1LCA0NDQ2OSwgMTA1ODgsIDEwNTk5LCAxNzQwNSwgMTU1MywgNDQ0NzMsIDE1NTgsIAotICAgIDQ0NDc5LCA0NDQ4MiwgMTU4OSwgNDQ0ODgsIDE1OTUsIDE2MDEsIDY2NDcsIDQ0NDkzLCA0NDUwMSwgNDQ1MDgsIDQ0NTEyLCAKLSAgICA0NDUxOCwgNDQ1MjMsIDQ0NTI4LCA0NDUzNSwgNDQ1NDAsIDQ0NTQ0LCAxNjA2LCAxMDY5MCwgMTA3MDEsIDQ0NTUzLCAKLSAgICA0NDU2MCwgNDQ1NjUsIDQ0NTY5LCAxNjEwLCA0NDU3MiwgNDQ1NzgsIDQ0NTg4LCA0NDU5MiwgMTYxNSwgMjY0NDcsIAotICAgIDQ0NTk3LCA2NzU1LCA2NzYxLCA0NDYwMywgNDQ2MTUsIDQ0NjMyLCA0NDY0OSwgNDQ2NjYsIDQ0NjgzLCA0NDcwMCwgCi0gICAgNDQ3MTcsIDQ0NzM0LCA0NDc1MSwgNDQ3NjgsIDQ0Nzg1LCA0NDgwMiwgNDQ4MTksIDQ0ODM2LCA0NDg1MywgNDQ4NzAsIAotICAgIDQ0ODg3LCA0NDkwNCwgNDQ5MjEsIDQ0OTM4LCA0NDk1NSwgNDQ5NzIsIDQ0OTg5LCA0NTAwNiwgNDUwMjMsIDQ1MDQwLCAKLSAgICA0NTA1NywgNDUwNzQsIDQ1MDkxLCA0NTEwOCwgNDUxMjUsIDQ1MTQyLCA0NTE1OSwgNDUxNzYsIDQ1MTkzLCA0NTIxMCwgCi0gICAgNDUyMjcsIDQ1MjQ0LCA0NTI2MSwgNDUyNzgsIDQ1Mjk1LCA0NTMxMiwgNDUzMjksIDQ1MzQ2LCA0NTM2MywgNDUzODAsIAotICAgIDQ1Mzk3LCA0NTQxNCwgNDU0MzEsIDQ1NDQ4LCA0NTQ1OSwgMTYyMCwgNDU0NjQsIDQ1NDcwLCA1Njg0LCAxNjI1LCAxOTUyOSwgCi0gICAgNDU0NzUsIDQ1NDg2LCA0NTQ5NiwgNDU1MDMsIDQ1NTA5LCA0NTUxNCwgNjc3NywgMTYzMCwgNjc4MiwgNDU1MTgsIDQ1NTIzLCAKLSAgICA0NTUyOSwgNDU1MzQsIDQ1NTM5LCA0NTU0NCwgNDU1NDksIDQ1NTU0LCA0NTU1OSwgNDU1NjQsIDQ1NTcwLCA0NTU3NiwgCi0gICAgNDU1ODIsIDQ1NTg3LCA0NTU5MSwgNDU1OTYsIDQ1NjAxLCA0NTYwNSwgNDU2MTAsIDQ1NjE1LCA0NTYyMCwgNDU2MjQsIAotICAgIDQ1NjI5LCA0NTYzNSwgNDU2NDAsIDQ1NjQ1LCA0NTY0OSwgNDU2NTQsIDQ1NjU5LCA0NTY2NSwgNDU2NzAsIDQ1Njc1LCAKLSAgICA0NTY4MSwgNDU2ODcsIDQ1NjkyLCA0NTY5NiwgNDU3MDEsIDQ1NzA2LCA0NTcxMSwgNDU3MTUsIDQ1NzIwLCA0NTcyNSwgCi0gICAgNDU3MzAsIDQ1NzM2LCA0NTc0MiwgNDU3NDcsIDQ1NzUxLCA0NTc1NiwgNDU3NjEsIDQ1NzY2LCA0NTc3MCwgNDU3NzUsIAotICAgIDQ1NzgwLCA0NTc4NiwgNDU3OTEsIDQ1Nzk2LCA0NTgwMCwgNDU4MDUsIDQ1ODEwLCA0NTgxNiwgNDU4MjEsIDQ1ODI2LCAKLSAgICA0NTgzMiwgNDU4MzgsIDQ1ODQzLCA0NTg0NywgNDU4NTIsIDQ1ODU3LCA0NTg2MSwgNDU4NjYsIDQ1ODcxLCA0NTg3NiwgCi0gICAgNDU4ODIsIDQ1ODg4LCA0NTg5MywgNDU4OTcsIDQ1OTAyLCA0NTkwNywgNDU5MTEsIDQ1OTE2LCA0NTkyMSwgNDU5MjYsIAotICAgIDQ1OTMwLCA0NTkzMywgMjE3MDcsIDQ1OTM4LCAxMDk1MiwgMTA5NjQsIDY4ODAsIDQ1OTQ0LCA2ODg1LCA0NTk1OSwgCi0gICAgNDU5NjQsIDQ1OTc2LCA0NTk4OCwgNDYwMDAsIDIzMjQsIDQ2MDEyLCA0NjAxNywgNDYwMjEsIDQ2MDI3LCA0NjAzMywgCi0gICAgMTY0MiwgODYzLCA0NjAzOCwgNDYwNDMsIDQ2MDQ3LCA0NjA1MSwgNDYwNTUsIDQ2MDYwLCA0NjA2NCwgMTEwMjksIDQ2MDY5LCAKLSAgICA0NjA3MiwgMTY0NiwgNDYwODAsIDY5MTgsIDE2NTEsIDQ2MDg1LCA0NjA5MiwgNDYwOTcsIDQ2MTA2LCA0NjExNiwgNDYxMjMsIAotICAgIDE2NTYsIDQ2MTMwLCA0NjEzNSwgMTEwOTgsIDQ2MTM5LCA0NjE0NCwgNDYxNTEsIDQ2MTU1LCA0NjE2NSwgMTExMjAsIAotICAgIDU2MDMsIDU2MTAsIDE2NjEsIDQ2MTcyLCA0NjE3OCwgNDYxODYsIDQ2MTkzLCA0NjE5OSwgNDYyMDUsIDQ2MjEwLCAzMDA0LCAKLSAgICAyMTI4OCwgMjEyOTcsIDExMTYwLCAxNjY2LCAxNjcwLCA0NjIxOCwgNDYyMjksIDQ2MjM0LCAxNjczLCA0NjI0MiwgNDYyNDcsIAotICAgIDQ2MjU5LCA0NjI2NSwgNDYyNzAsIDE2NzgsIDQ2Mjc1LCA0NjI4MCwgNDYyODgsIDQ2Mjk2LCA0NjMwMywgNDYzMTIsIAotICAgIDQ2MzIwLCA0NjMyOSwgMTY4MywgMTY4OCwgNDYzMzMsIDQ2MzQwLCA0NjM0OCwgNDYzNTQsIDQ2MzU5LCA3MDQ3LCA0NjM2OCwgCi0gICAgNDYzNzQsIDQ2MzgwLCA0NjM4NSwgNDYzOTMsIDcwNTYsIDcwNjEsIDQ2NDAxLCA0NjQwNywgMzA1MywgMjY1NDIsIDQ2NDEyLCAKLSAgICA0NjQxOCwgNDY0MjMsIDQ2NDMxLCA0NjQzOCwgNDY0NDMsIDQ2NDQ3LCAxNjk5LCA0NjQ1MywgNDY0NTYsIDkwNCwgNDY0NjIsIAotICAgIDksIDQ2NDY4LCA0NjQ3MiwgNDY0NzcsIDQ2NDgxLCA0NjQ4NSwgNDY0ODksIDQ2NDk0LCA0NjQ5OCwgNDY1MDMsIDQ2NTA4LCAKLSAgICA0NjUxMiwgNDY1MTUsIDQ2NTE5LCA0NjUyNCwgNDY1MjgsIDQ2NTMzLCA0NjUzNywgMjM1NTUsIDIzNTYwLCAyMzU2NSwgCi0gICAgNDY1NDAsIDQ2NTQ3LCA0NjU1MywgMjYzNjIsIDQ2NTYzLCAyMzU3MSwgMjM1NzYsIDIxOTA5LCAyMTkxNSwgMjM1ODcsIAotICAgIDIxOTIxLCA0NjU2OCwgNDY1NzMsIDQ2NTc3LCA0NjU4MSwgNDY1ODQsIDQ2NTg4LCA0NjU5MSwgNDY1OTYsIDQ2NjAwLCAKLSAgICA0NjYwNCwgNDY2MDcsIDQ2NjE5LCAyMjgyMSwgNDY2MjYsIDEwMTY5LCA2OTYsIDQ2NjI5LCA0NjYzMywgNDY2MzgsIAotICAgIDQ2NjQyLCA4ODAyLCA0NjY0NSwgNDY2NTIsIDQ2NjY1LCA0NjY3NCwgNDY2NzksIDQ2Njg5LCA0NjcwMiwgNDY3MTQsIAotICAgIDQ2NzIxLCA0NjcyNiwgNDY3MzksIDI0NDQwLCA0Njc1NywgNDY3NjIsIDQ2NzY5LCA0Njc3NSwgNDY3ODAsIDQ2Nzg4LCAKLSAgICAxOTU5NiwgNTIwLCA0Njc5NCwgNDY4MDAsIDQ2ODA2LCA0NjgxMSwgMjE5MjYsIDM0NzQsIDIxOTMxLCA0NjgxNSwgNDY4MjUsIAotICAgIDQ2ODMwLCA0Njg0MCwgNDY4NTUsIDQ2ODYxLCA0Njg2NywgMjE5MzYsIDIxNDQ1LCA0Njg3MiwgNDY4NzcsIDQ2ODgyLCAKLSAgICA0Njg4NywgNDY4OTIsIDQ2ODk2LCAzNTE1LCAyMTk1NywgNDY5MDAsIDQ2OTA2LCAzMzAsIDQ2OTE2LCA0NjkyMywgNDY5MzIsIAotICAgIDQ2OTM4LCA0Njk0NiwgNDY5NTAsIDQ2OTU0LCA0Njk1OCwgNDY5NjIsIDQ2OTY3LCA0Njk3MSwgNDY5NzcsIDQ2OTg1LCAKLSAgICA0Njk5MCwgNDY5OTQsIDQ2OTk5LCA0NzAwMywgNDcwMDcsIDQ3MDEzLCA0NzAxOSwgNDcwMjQsIDQ3MDI4LCAyMTk2NSwgCi0gICAgNDcwMzMsIDIxOTcxLCAyMTk3NywgNDcwMzgsIDQ3MDQ0LCA0NzA0OSwgNDcwNTMsIDIxNDYyLCAxMDkxMiwgNDcwNTYsIAotICAgIDQ3MDYwLCA0NzA2NSwgNDcwNzIsIDQ3MDc4LCA0NzA4MiwgNDcwODgsIDQ3MDkyLCA0NzA5NiwgNDcxMDEsIDQ3MTA2LCAKLSAgICA0NzExMCwgNDcxMTMsIDQ3MTE4LCA0NzEyNSwgNDcxMzIsIDQ3MTM4LCA0NzE0MywgNDcxNDgsIDQ3MTUyLCA0NzE1NywgCi0gICAgNDcxNjMsIDQ3MTY4LCA0NzE3NCwgNDcxNzksIDQ3MTg0LCA0NzE4OSwgNDcxOTUsIDQ3MjAwLCA0NzIwNSwgNDcyMTEsIAotICAgIDQ3MjE3LCA0NzIyMywgMjE5ODIsIDQ3MjI4LCA0NzIzMywgNDcyMzgsIDIxOTkzLCA0NzI0MywgNDcyNDgsIDQ3MjUzLCAKLSAgICA0NzI1OSwgNDcyNjUsIDIxOTk4LCA0NzI3MCwgNDcyNzUsIDQ3MjgwLCAyMjAwOSwgMjIwMTUsIDQ3Mjg1LCA0NzI5MCwgCi0gICAgNDcyOTUsIDQ3MzAwLCAyMjAyMCwgMjIwMjUsIDIyMDI5LCA0NzMwNSwgNDcyNzYsIDQ3MzA5LCA0NzMxNSwgNDczMjMsIAotICAgIDQ3MzMwLCA0NzMzNiwgNDczNDYsIDQ3MzUyLCA0NzM1OSwgNjU4MCwgMjIwMzQsIDQ3MzY1LCA0NzM3OCwgNDczODcsIAotICAgIDQ3MzkzLCA0NzQwMiwgNDc0MDgsIDE2NjI1LCA0NzQxNSwgNDc0MjIsIDIyMDEwLCA0NzQzMiwgNDc0MzksIDQ3NDQ0LCAKLSAgICA0NzQ0OCwgNDc0NTIsIDM1NDksIDQ3NDU3LCA0NzQ2MiwgNDc0NjcsIDIzNjQ5LCAyMzY1NCwgNDc0NzEsIDIzNjYwLCAKLSAgICAyMzY2NSwgNDc0NzYsIDIzNjcwLCAyMzY3NiwgNDc0ODEsIDIzNjgxLCA0NzQ5MiwgNDc0OTUsIDQ3NTA3LCA0NzUxNSwgCi0gICAgMjIwNTYsIDQ3NTE5LCA0NzUyOCwgNDc1MzgsIDQ3NTQ3LCAyMjA2MSwgNDc1NTIsIDQ3NTU5LCA0NzU2OCwgNDc1NzQsIAotICAgIDQ3NTgyLCAyMjYwNCwgMzM2NywgNDc1ODcsIDIyMDcwLCA0NzU5MywgNDc1OTksIDQ3NjA2LCA0NzYxMSwgMjIwNzUsIAotICAgIDQ3NjE1LCA0NzYyMSwgNDc2MjcsIDQ3NjMyLCA0NzYzOCwgNDc2NDMsIDcwOSwgMjQyNTUsIDI0NjMxLCAyNDYzNywgCi0gICAgNDc2NDcsIDQ3NjUxLCA0NzY1NSwgNDc2NTgsIDQ3NjcxLCA0NzY3NywgNDc2ODEsIDQ3Njg0LCA0NzY4OSwgMjMwMDEsIAotICAgIDQ3NjkzLCAyMTQ2NywgMTUyMzMsIDQ3Njk5LCAzNDk1LCAzNTAzLCA1NTA2LCAyMjUsIDQ3NzAyLCA0NzcwNiwgNDc3MTAsIAotICAgIDQ3NzE0LCA0NzcxOCwgNDc3MjEsIDQ3NzI1LCA0NzczMCwgNDc3MzQsIDQ3NzM5LCA0Nzc0MywgNDc3NDcsIDQ3NzUxLCAKLSAgICA0Nzc1NiwgNDc3NjAsIDQ3NzY1LCA0Nzc2OSwgNDc3NzMsIDQ3NzgwLCA5ODQwLCA0Nzc4OSwgNDc3OTgsIDE3NTUwLCAKLSAgICA0NzgwMiwgNDc4MDgsIDQ3ODE2LCA0NzgyMiwgNDc4MzQsIDQ3ODM4LCA0Nzg0MywgNDc4NDksIDQ3ODU5LCA0Nzg2OSwgCi0gICAgNDc4NzUsIDQ3ODc5LCA0Nzg4NCwgNDc4OTAsIDQ3ODk5LCA0NzkwOCwgNDc5MTYsIDEwMDczLCA0NzkyMCwgNDc5MjksIAotICAgIDQ3OTM3LCA0Nzk0OCwgNDc5NTksIDQ3OTY4LCA0Nzk3MiwgNDc5ODIsIDQ3OTg4LCA0Nzk5MywgNDc5OTksIDQ4MDA0LCAKLSAgICAyMTM3MiwgNDgwMTUsIDE4NDg1LCA0ODAyMSwgNDgwMjgsIDQ4MDM0LCA0ODAzOCwgNDgwNDgsIDQ4MDU2LCA0ODA2MSwgCi0gICAgNDgwNjUsIDQ4MDczLCA0ODA3OSwgNDgwODksIDEwMjUsIDQ4MDkyLCA0ODA5NSwgNDgwOTksIDQ4MTA1LCA0ODExMiwgCi0gICAgNDgxMTgsIDQ4MTI3LCA0ODEzNiwgNDgxNDIsIDQ4MTQ4LCA0ODE1MywgNDgxNjAsIDQ4MTY3LCA0ODE4MCwgNDgxODksIAotICAgIDQ4MTk4LCA0ODIwMywgNDgyMDcsIDQ4MjE0LCA0ODIyMSwgNDgyMjgsIDQ4MjM1LCA0ODI0MiwgNDgyNDcsIDQ4MjUxLCAKLSAgICA0ODI1NCwgNDgyNjQsIDQ4MjY4LCA0ODI3NywgNDgyODEsIDQ4Mjg2LCA0ODI5MCwgNDgyOTksIDQ4MzA3LCA0ODMxNSwgCi0gICAgNDgzMjAsIDQ4MzI0LCA0ODMyOSwgNDgzMzQsIDQ4MzM4LCA0ODM0NCwgNDgzNTYsIDQ4MzY0LCA0ODM3NCwgNDgzODEsIAotICAgIDQ4Mzg3LCA0ODM5MiwgNDgzOTYsIDQ4NDAwLCA0ODQwNCwgNDg0MTMsIDQ4NDIyLCA0ODQzMSwgNDg0MzcsIDQ4NDQzLCAKLSAgICA0ODQ0OSwgNDg0NTQsIDQ4NDYxLCA0ODQ2NywgNDg0NzUsIDQ4NDgyLCA3ODM2LCA0ODQ4OCwgNDg0OTQsIDQ4NDk4LCAKLSAgICA5MjQxLCA0ODUwMiwgNDg1MTEsIDQ4NTE5LCA0ODUyNiwgNDg1MzAsIDQ4NTM0LCA0ODU0MCwgNDg1NDgsIDQ4NTU1LCAKLSAgICA0ODU2MSwgNDg1NzIsIDQ4NTc2LCA0ODU4MCwgNDg1ODQsIDQ4NTg3LCA0ODU5MywgNDg1OTgsIDQ4NjAyLCA0ODYwNiwgCi0gICAgNDg2MTUsIDQ4NjIzLCA0ODYzMCwgMTY5NDAsIDI2MjAwLCA0ODYzNiwgNDg2NDQsIDQ4NjQ4LCA0ODY1NSwgNDg2NjQsIAotICAgIDQ4NjcyLCA0ODY3OCwgNDg2ODMsIDQ4Njg3LCA0ODY5MiwgNDg2OTYsIDQ4NzAxLCA0ODcxMCwgNDg3MTQsIDQ4NzIxLCAKLSAgICA0ODcyOCwgNDg3MzYsIDQ4NzQyLCA0ODc1MywgNDg3NTksIDQ4NzY4LCA0ODc3NSwgNDg3ODIsIDQ4Nzg5LCA0ODc5NiwgCi0gICAgNDg4MDMsIDI4NjM0LCA0ODgxMCwgNDg4MTUsIDQ4ODIxLCAzMTcxMSwgMjU0MiwgMTkzLCAyNTEzOSwgNDg4MjUsIDQ4ODI4LCAKLSAgICA0ODgzMywgNDgzMTEsIDQ4ODM3LCA0ODg0NywgNDg4NTQsIDQ4ODYzLCA0ODg3MywgNDg4ODMsIDQ4ODkxLCA0ODg5NSwgCi0gICAgNDg4OTgsIDQ4OTA1LCA0ODkxMSwgNDg5MjIsIDQ4OTM0LCA0ODk0NSwgNDg5NTIsIDEzMTksIDE2NDc3LCA0ODk2MiwgCi0gICAgMjI0MCwgNDg5NjYsIDExMDAsIDExNDQxLCAyNTYwMCwgNDg5NzQsIDQ4OTg3LCA0ODk5MSwgNDg5OTYsIDQ5MDAxLCA1MDcyLCAKLSAgICA0OTAwNywgNDkwMTUsIDcxNTQsIDQ5MDIwLCA0OTAyNiwgMTcxMSwgNjkyNSwgNjA1LCA0OTAzNSwgNDkwNDQsIDQ5MDU0LCAKLSAgICAxOTAwMCwgNDkwNjMsIDQ5MDY5LCAxMTA3NSwgNDkwNzUsIDQ5MDc5LCAxMTA4MiwgNzIxNSwgNDkwODUsIDQ2MjI0LCAKLSAgICA0OTA5MiwgNTY5MSwgMTQ3LCA5MTc1LCA0OTA5OCwgNDkxMTAsIDQ5MTE0LCA0OTEyMCwgMTk1NDksIDQ5MTI0LCA3MjAzLCAKLSAgICAyMzE1LCA0LCA0OTEyOSwgNDkxMzksIDQ5MTQ1LCA0OTE1NiwgNDkxNjMsIDQ5MTY5LCA0OTE3NSwgNDkxODMsIDQ5MTkwLCAKLSAgICA0OTIwMCwgNDkyMTAsIDEzMzEsIDQ5MjE5LCA0OTIyNSwgMjMzMSwgMjMzNywgNTA2OSwgMTk2MCwgNDkyMjksIDQ5MjM4LCAKLSAgICA0OTI0OSwgNDkyNjAsIDQ5MjY4LCA0OTI3NCwgNDkyNzksIDQ5Mjg3LCA0OTI5MSwgNDkyOTUsIDE5ODEzLCA0OTMwNywgCi0gICAgNDkzMTcsIDQ5MzIzLCA0OTMyOSwgNDkzMzksIDQ5MzQyLCA0OTM1MywgNDkzNjMsIDQ5MzcyLCA0OTM3OSwgMTEwMiwgCi0gICAgMjIzMywgNDkzODksIDQ5Mzk0LCA0OTQwMiwgNDk0MTAsIDQ5NDIxLCA0OTQzNSwgOTEyNywgMzQyLCA0OTQ0NSwgNDk0NTQsIAotICAgIDQ5NDYyLCA0OTQ2OCwgNDk0NzUsIDQ5NDgxLCA0OTQ4OCwgNDk0OTgsIDQ5NTA2LCAzMDYwLCAxOTcsIDQ5NTE0LCA0OTUyNSwgCi0gICAgNDk1MjksIDQ5NTQxLCAxOTczNCwgMTE5LCA0OTU0NywgNDk1NTIsIDQ5NTU2LCA0OTU2MywgNDk1NjksIDQ5NTc3LCAKLSAgICA0OTU4NCwgNTMyMSwgNDk1OTEsIDQ5NjAwLCAzMTE1LCA0OTYwOCwgMTExMjEsIDQ5NjEyLCAyMzUzLCAzNzgsIDQ5NjE3LCAKLSAgICA0OTYzMCwgNDk2MzUsIDMxODc2LCA1NDAsIDQ5NjM5LCAzMTIxLCA0OTY0NywgNDk2NTMsIDk1OSwgNDk2NjMsIDQ5NjcyLCAKLSAgICA0OTY3NywgOTcwNCwgNDk2ODEsIDQ5Njg0LCAzMDcwLCAxNjYwOCwgNDk2OTIsIDQ5Njk5LCAxNjY0NiwgNDk3MDMsIAotICAgIDQ5NzEwLCA0OTcxNiwgNDk3MjEsIDk3MTgsIDQ5NzI2LCA0OTczOCwgNDk3NDQsIDQ5NzUyLCAyMzY1LCAxNzQzLCA0OTc2MCwgCi0gICAgNDk3NjIsIDQ5NzY3LCA0OTc3MiwgNDk3NzYsIDQ5NzgwLCA0OTc4NSwgNDk3ODksIDQ5Nzk0LCA0OTc5OSwgNDk4MDUsIAotICAgIDQ5ODEwLCA0OTgxNCwgNDk4MTgsIDQ5ODIxLCA0OTgyMywgNDk4MjcsIDQ5ODMwLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCAKLSAgICA0OTg0NywgNDk4NTEsIDQ5ODYwLCAyMjIxNiwgNDk4NjMsIDIyMjIxLCAyMjIyNiwgNDk4NzAsIDQ5ODc5LCAyMjIzMiwgCi0gICAgNDk4ODQsIDIyMjM3LCA0OTg5MywgNDk4OTgsIDczMjcsIDQ5OTAyLCA0OTkwNywgNDk5MTIsIDQ5OTE2LCA0OTkyMCwgCi0gICAgNDk5MjQsIDQ5OTI4LCA0OTkzMSwgNDk5MzUsIDUwMTMsIDQ5OTQxLCA0OTk0NiwgNDk5NTAsIDI5ODEsIDQ5OTUzLCAKLSAgICA0OTk1NSwgNDk5NTksIDQ5OTYyLCA0OTk2NywgNDk5NzEsIDQ5OTc3LCA0OTk5MCwgNDk5OTYsIDUwMDAwLCA1MDAwOCwgCi0gICAgNTAwMTUsIDUwMDIzLCA1MDAzMiwgNTAwNDAsIDIyMjQyLCA1MDA0NywgNTAwNTcsIDUwMDY2LCA1MDA3OSwgNTAwODQsIAotICAgIDUwMDg5LCA1MDA5NSwgNTAxMDIsIDUwMTEzLCA1MDEyNSwgNTAxMzIsIDUwMTQxLCA1MDE1MCwgNTAxNTksIDUwMTY2LCAKLSAgICA1MDE3MiwgNTAxNzksIDUwMTg3LCA1MDE5NCwgNTAyMDIsIDUwMjExLCA1MDIxOSwgNTAyMjYsIDUwMjM0LCA1MDI0MywgCi0gICAgNTAyNTEsIDUwMjYwLCA1MDI3MCwgNTAyNzksIDUwMjg3LCA1MDI5NCwgNTAzMDIsIDUwMzExLCA1MDMxOSwgNTAzMjgsIAotICAgIDUwMzM4LCA1MDM0NywgNTAzNTUsIDUwMzY0LCA1MDM3NCwgNTAzODMsIDUwMzkzLCA1MDQwNCwgNTA0MTQsIDUwNDIzLCAKLSAgICA1MDQzMSwgNTA0MzgsIDUwNDQ2LCA1MDQ1NSwgNTA0NjMsIDUwNDcyLCA1MDQ4MiwgNTA0OTEsIDUwNDk5LCA1MDUwOCwgCi0gICAgNTA1MTgsIDUwNTI3LCA1MDUzNywgNTA1NDgsIDUwNTU4LCA1MDU2NywgNTA1NzUsIDUwNTg0LCA1MDU5NCwgNTA2MDMsIAotICAgIDUwNjEzLCA1MDYyNCwgNTA2MzQsIDUwNjQzLCA1MDY1MywgNTA2NjQsIDUwNjc0LCA1MDY4NSwgNTA2OTcsIDUwNzA4LCAKLSAgICA1MDcxOCwgNTA3MjcsIDUwNzM1LCA1MDc0MiwgNTA3NTAsIDUwNzU5LCA1MDc2NywgNTA3NzYsIDUwNzg2LCA1MDc5NSwgCi0gICAgNTA4MDMsIDUwODEyLCA1MDgyMiwgNTA4MzEsIDUwODQxLCA1MDg1MiwgNTA4NjIsIDUwODcxLCA1MDg3OSwgNTA4ODgsIAotICAgIDUwODk4LCA1MDkwNywgNTA5MTcsIDUwOTI4LCA1MDkzOCwgNTA5NDcsIDUwOTU3LCA1MDk2OCwgNTA5NzgsIDUwOTg5LCAKLSAgICA1MTAwMSwgNTEwMTIsIDUxMDIyLCA1MTAzMSwgNTEwMzksIDUxMDQ4LCA1MTA1OCwgNTEwNjcsIDUxMDc3LCA1MTA4OCwgCi0gICAgNTEwOTgsIDUxMTA3LCA1MTExNywgNTExMjgsIDUxMTM4LCA1MTE0OSwgNTExNjEsIDUxMTcyLCA1MTE4MiwgNTExOTEsIAotICAgIDUxMjAxLCA1MTIxMiwgNTEyMjIsIDUxMjMzLCA1MTI0NSwgNTEyNTYsIDUxMjY2LCA1MTI3NywgNTEyODksIDUxMzAwLCAKLSAgICA1MTMxMiwgNTEzMjUsIDUxMzM3LCA1MTM0OCwgNTEzNTgsIDUxMzY3LCA1MTM3NSwgNTEzODIsIDUxMzkwLCA1MTM5OSwgCi0gICAgNTE0MDcsIDUxNDE2LCA1MTQyNiwgNTE0MzUsIDUxNDQzLCA1MTQ1MiwgNTE0NjIsIDUxNDcxLCA1MTQ4MSwgNTE0OTIsIAotICAgIDUxNTAyLCA1MTUxMSwgNTE1MTksIDUxNTI4LCA1MTUzOCwgNTE1NDcsIDUxNTU3LCA1MTU2OCwgNTE1NzgsIDUxNTg3LCAKLSAgICA1MTU5NywgNTE2MDgsIDUxNjE4LCA1MTYyOSwgNTE2NDEsIDUxNjUyLCA1MTY2MiwgNTE2NzEsIDUxNjc5LCA1MTY4OCwgCi0gICAgNTE2OTgsIDUxNzA3LCA1MTcxNywgNTE3MjgsIDUxNzM4LCA1MTc0NywgNTE3NTcsIDUxNzY4LCA1MTc3OCwgNTE3ODksIAotICAgIDUxODAxLCA1MTgxMiwgNTE4MjIsIDUxODMxLCA1MTg0MSwgNTE4NTIsIDUxODYyLCA1MTg3MywgNTE4ODUsIDUxODk2LCAKLSAgICA1MTkwNiwgNTE5MTcsIDUxOTI5LCA1MTk0MCwgNTE5NTIsIDUxOTY1LCA1MTk3NywgNTE5ODgsIDUxOTk4LCA1MjAwNywgCi0gICAgNTIwMTUsIDUyMDI0LCA1MjAzNCwgNTIwNDMsIDUyMDUzLCA1MjA2NCwgNTIwNzQsIDUyMDgzLCA1MjA5MywgNTIxMDQsIAotICAgIDUyMTE0LCA1MjEyNSwgNTIxMzcsIDUyMTQ4LCA1MjE1OCwgNTIxNjcsIDUyMTc3LCA1MjE4OCwgNTIxOTgsIDUyMjA5LCAKLSAgICA1MjIyMSwgNTIyMzIsIDUyMjQyLCA1MjI1MywgNTIyNjUsIDUyMjc2LCA1MjI4OCwgNTIzMDEsIDUyMzEzLCA1MjMyNCwgCi0gICAgNTIzMzQsIDUyMzQzLCA1MjM1MywgNTIzNjQsIDUyMzc0LCA1MjM4NSwgNTIzOTcsIDUyNDA4LCA1MjQxOCwgNTI0MjksIAotICAgIDUyNDQxLCA1MjQ1MiwgNTI0NjQsIDUyNDc3LCA1MjQ4OSwgNTI1MDAsIDUyNTEwLCA1MjUyMSwgNTI1MzMsIDUyNTQ0LCAKLSAgICA1MjU1NiwgNTI1NjksIDUyNTgxLCA1MjU5MiwgNTI2MDQsIDUyNjE3LCA1MjYyOSwgNTI2NDIsIDUyNjU2LCA1MjY2OSwgCi0gICAgNTI2ODEsIDUyNjkyLCA1MjcwMiwgNTI3MTEsIDUyNzE5LCA1MjcyNiwgNTI3MzEsIDQ4NzEsIDUyNzM4LCAyMjI1MiwgCi0gICAgNTI3NDMsIDUyNzQ4LCAyMjI1NywgNTI3NTQsIDE1MDEyLCA1Mjc1OSwgNTI3NjMsIDUyNzY5LCA1Mjc3NSwgNTI3ODIsIAotICAgIDUyNzg3LCA1Mjc5MSwgNTI3OTUsIDUyODA0LCA1MjgxMCwgNTI4MjIsIDUyODMzLCA1MjgzNywgMjU5MiwgNDg0NiwgCi0gICAgNTI4NDIsIDUyODQ1LCA1Mjg0NywgNTI4NTEsIDUyODU1LCA1Mjg1OSwgMjg0NDYsIDUyODY0LCA1Mjg2OCwgNTI4NzEsIAotICAgIDUyODc2LCA1Mjg4MCwgNTI4ODcsIDUyODkzLCA1Mjg5NywgMjIyNjcsIDUyOTAxLCA1MjkwOCwgNTI5MTcsIDUyOTI1LCAKLSAgICA1MjkzNiwgNTI5NDQsIDUyOTUyLCA1Mjk1OSwgNTI5NjYsIDUyOTcyLCA1Mjk4MywgMjIyNzIsIDUyOTg4LCA1Mjk5OSwgCi0gICAgNTMwMTEsIDUzMDIyLCA1MzAzMCwgMjIwNiwgNTMwMzUsIDUzMDQ4LCA1MzA1MiwgNTMwNjAsIDExNjAxLCA1MzA3MSwgCi0gICAgNTMwNzcsIDUzMDg0LCA1MzA5MiwgNTMwOTgsIDIyMjc3LCA1MzEwMywgNjExOCwgNDQxODYsIDUzMTEwLCA1MzExMywgCi0gICAgNTMxMjEsIDUzMTM0LCA1MzE0NywgNTMxNjAsIDUzMTczLCA1MzE4MCwgNTMxOTEsIDUzMjAwLCAyODQ1MSwgMjg0NTYsIAotICAgIDUzMjA1LCA1MzIxMywgNTMyMjAsIDUzMjI5LCA1MzIzNywgNTMyNDMsIDUzMjUyLCA1MzI2MCwgNTMyNjgsIDUzMjcyLCAKLSAgICA1MzI4MSwgNTMyOTAsIDUzMzAwLCA1MzMxMywgNTMzMjYsIDUzMzM2LCAyMjI4MiwgNTMzNDIsIDUzMzQ5LCA1MzM1NSwgCi0gICAgMjIyODgsIDUzMzYwLCA1MzM2MywgNTMzNjcsIDUzMzc1LCA1MzM4NCwgMjgxODksIDUzMzkyLCA1MzQwMCwgNTM0MDcsIAotICAgIDUzNDE1LCA1MzQyNSwgNTM0MzQsIDUzNDQzLCA1MzQ1MiwgNTM0NjAsIDUzNDcxLCA1NzI0LCAxNTQzNCwgNTM0ODAsIAotICAgIDUzNDg1LCA1MzQ4OSwgNTM0OTMsIDUzNDk4LCA1MzUwNCwgNTM1MDksIDUzNTE0LCA1MzUyMCwgNTM1MjUsIDUzNTMwLCAKLSAgICAxNTM5OSwgNTM1MzUsIDUzNTQyLCA1MzU1MCwgNTM1NTUsIDUzNTYyLCA1MzU2NiwgNTM1NzAsIDUzNTc4LCA1MzU4NiwgCi0gICAgMjIyOTcsIDUzNTkyLCA1MzU5OCwgNTM2MTAsIDUzNjE2LCA1MzYyMSwgNTM2MzIsIDUzNjQyLCA1MzY1MiwgNTM2NjQsIAotICAgIDUzNjcwLCA1MzY4MCwgMjIzMDIsIDUzNjg5LCA1MzY5OCwgNTM3MDQsIDUzNzE2LCA1MzcyNywgNTM3MzQsIDUzNzM5LCAKLSAgICA1Mzc0NywgNTM3NTMsIDUzNzU4LCA1Mzc2MywgNTM3NzAsIDUzNzgyLCA1Mzc5MiwgNTM4MDEsIDUzODA4LCAyMzIzMCwgCi0gICAgMTY4MTQsIDUzODE0LCA1MzgxOSwgNTM4MjMsIDUzODI3LCA1MzgzMiwgNTM4MzgsIDUzODQ5LCA1Mzg2MiwgNTM4NjcsIAotICAgIDIyMzA3LCA1Mzg3MiwgNTM4ODQsIDUzODkzLCA1MzkwNiwgNTM5MTMsIDUzOTIyLCA1MzkzMCwgNTM5MzUsIDUzOTQxLCAKLSAgICAxMTQ3LCA1Mzk0NiwgNTM5NTEsIDUzOTU2LCA1Mzk2MSwgNTM5NjcsIDUzOTcyLCA1Mzk3NywgNTM5ODMsIDUzOTg5LCAKLSAgICA1Mzk5NCwgNTM5OTgsIDU0MDAzLCA1NDAwOCwgNTQwMTMsIDQ0NTQ5LCA1NDAxOCwgNTQwMjMsIDU0MDI4LCA1NDAzMywgCi0gICAgNTQwMzksIDU0MDQ1LCA1NDA1MCwgNTQwNTQsIDU0MDU5LCA1NDA2NCwgNTQwNjksIDU0MDc0LCA1NDA3OSwgNTQwODMsIAotICAgIDU0MDg5LCA1NDA5NCwgNTQxMDMsIDU0MTA4LCA1NDExMywgNTQxMTgsIDU0MTIzLCA1NDEyNywgNTQxMzQsIDU0MTQwLCAKLSAgICAxMTMxMSwgMzIxNzYsIDU0MTQ1LCA1NDA5NSwgNTQxNDcsIDIyMzE2LCA1NDE1MCwgNTQxNTksIDU0MTY1LCAzNTYxLCAKLSAgICAyMjMyMSwgNTQxNjksIDU0MTc1LCA1NDE4MSwgNTQxODYsIDU0MTkwLCA1NDE5NywgNTQyMDIsIDU0MjEyLCA1NDIyMSwgCi0gICAgNTQyMjUsIDU0MjMxLCA1NDIzNywgNTQyNDMsIDU0MjQ3LCA1NDI1NSwgNTQyNjIsIDU0MjcwLCA1NDI3OCwgMjIzMjYsIAotICAgIDU0Mjg1LCA1NDI4OCwgNTQyOTUsIDU0MzAwLCA1NDMwNCwgNTQzMTAsIDU0MzE1LCA1NDMxOSwgNTQzMjgsIDU0MzM2LCAKLSAgICA1NDM0MiwgNTQzNDcsIDIyODM3LCA1NDM1NCwgNTQzNjAsIDU0MzY1LCA1NDM3MSwgNTQzNzgsIDIyMDQ3LCAxOTMxNywgCi0gICAgNTQzODQsIDU0Mzg5LCA1NDM5NSwgNTQ0MDcsIDU0MTI4LCA1NDEzNSwgNTQ0MTcsIDU0NDIyLCA1NDQyOSwgNTQ0MzYsIAotICAgIDU0NDQyLCA1NDQ1MywgNTQ0NTgsIDU1MjMsIDU0NDY2LCA1NDQ2OSwgNTQ0NzUsIDU0NDc5LCA1NDQ4MywgNTQ0ODYsIAotICAgIDU0NDkyLCA0Njk4MSwgMzU4MSwgNzYxLCA4NjQ0LCAxMTUsIDU0NDk5LCA1NDUwMywgNTQ1MDcsIDU0NTEyLCA1NDUyMCwgCi0gICAgNTQ1MjQsIDU0NTMyLCA1NDUzNiwgNTQ1NDksIDU0NTUzLCA1NDU1NiwgNTQ1NjEsIDU0NTY1LCA1NDU3MCwgNTQ1NzQsIAotICAgIDU0NTgyLCA1NDU4NiwgMTUwMTcsIDU0NTkxLCA1NDU5NSwgNTQ1OTksIDU0NjAyLCA1NDYxMCwgNTQ2MTUsIDU0NjIyLCAKLSAgICA1NDYyOCwgNTQ2MzQsIDU0NjM5LCA1NDY0NywgNDg5NzksIDU0NjU0LCA1NDY1OSwgNTQ2NjQsIDU0NjY4LCA1NDY3MiwgCi0gICAgNTQ2NzcsIDU0NjgyLCA1NDY4NiwgNTQ2ODksIDU0Njk1LCA1NDY5OSwgNTQ3MDksIDU0NzE4LCA1NDcyMSwgNTQ3MzQsIAotICAgIDU0NzQyLCA1NDc1MCwgNTQ3NjAsIDU0NzczLCA1NDc4MCwgNTQ3OTEsIDU0Nzk3LCA1NDgwMiwgNTQ4MDcsIDU0ODEzLCAKLSAgICA1NDgyMiwgNTM4NzQsIDU0ODMwLCA1NDgzNiwgNTQ4NDQsIDU0ODQ4LCA1NDg1MiwgNTQ4NTgsIDU0ODY2LCA1NDg3OCwgCi0gICAgNTQ4OTAsIDU0ODk3LCA1NDkwMSwgNTQ5MTIsIDU0OTIwLCA1NDkyNywgNTQ5MzksIDU0OTQ3LCA1NDk1NSwgNTQ5NjIsIAotICAgIDU0OTY4LCA1NDk3OCwgNTQ5ODcsIDU0OTkyLCA1NTAwMiwgNTUwMDYsIDU1MDEwLCA1NTAxNywgNTUwMjksIDU1MDQxLCAKLSAgICA1NTA1MCwgNTMwMzgsIDU1MDU3LCA1NTA2OCwgNTUwODIsIDU1MDkwLCA1NTEwMCwgNTUxMDcsIDU1MTE1LCA1NTEyNCwgCi0gICAgNTUxMzIsIDU1MTQyLCA1NTE1MSwgNTUxNjIsIDU1MTc0LCA1NTE4MywgNTUxOTMsIDU1MjAwLCA1NTIwOSwgNTUyMjQsIAotICAgIDU1MjMzLCA1NTI0NiwgNTUyNjEsIDU1MjY1LCA1NTI3NywgNTUyODgsIDU1Mjk5LCA1NTMxMCwgNTUzMjAsIDU1MzMxLCAKLSAgICA1NTMzOSwgNTUzNDUsIDU1MzU1LCA1NTM2MSwgNTUzNjYsIDU1MzcyLCA1NTM3OCwgNTUzODMsIDU1MzkwLCA1OTk1LCAKLSAgICAxMTYyMSwgNTUzOTYsIDU1NDAxLCA1NTQwOCwgNTU0MTQsIDU1NDE5LCA1NTQyMywgNTU0MjYsIDU1NDI5LCA1NTQzMSwgCi0gICAgNTU0MzgsIDU1NDQ5LCA1NTQ1NCwgNTU0NTgsIDU1NDY0LCA1NTQ3MiwgNDkzNTUsIDQ5MzY1LCA1NTQ3OCwgNTU0ODgsIAotICAgIDU1NDk1LCA1NTUwMSwgNTU1MDYsIDU1NTE1LCA1NTUyMiwgNTU1MzAsIDU1NTM5LCA1NTU0NSwgNTU1NTEsIDU1NTU4LCAKLSAgICA1NTU2NSwgNTU1NzAsIDU1NTc0LCA1NTU3OSwgNTU1ODQsIDU1NTg5LCA1NTU5MywgNTQ1NDQsIDU1NjAyLCA1NTYwNiwgCi0gICAgNTU2MTcsIDU1NjI3LCAxMTYzMCwgNTU2MzgsIDU1NjQ2LCAxMTY0MiwgNTU2NTMsIDE5MjI3LCA1NTY1NywgNTU2NjEsIAotICAgIDU1NjY2LCA5NTAwLCA1NTY3OCwgNTU2ODMsIDU1Njg4LCA1NTY5MywgNTU2OTcsIDU1NzAwLCA1NTcwNSwgNTU3MTAsIAotICAgIDU1NzE2LCA1NTcyMSwgMzM3MywgMTUwNjgsIDU1NzI2LCA1NTczMSwgNTU3MzcsIDU1NzQ0LCA1NTc0OSwgNTU3NTQsIAotICAgIDU1NzYwLCA1NTc2NiwgNTU3NzIsIDU1Nzc3LCA1NTc4MywgNTU3ODcsIDU1ODAxLCA1NTgwOSwgNTU4MTcsIDU1ODIzLCAKLSAgICA1NTgyOCwgNTU4MzUsIDU1ODQwLCA1NTg0NSwgNTU4NTMsIDU1ODU4LCA1NTg2NCwgNTU4NjksIDU1ODc0LCA1NTg3OCwgCi0gICAgNTU4ODEsIDU1ODk5LCA1NTkxOCwgNTU5MzEsIDU1OTQ1LCA1NTk2MSwgNTU5NjgsIDU1OTc1LCA1NTk4MSwgNTU5ODgsIAotICAgIDU1OTkzLCA1NTk5OSwgNTYwMDUsIDU2MDEwLCA1NjAyNiwgMTAzNTAsIDU2MDQwLCA1NjA0NywgNTYwNTEsIDU2MDU0LCAKLSAgICA1NjA1OSwgNTYwNjQsIDU2MDcxLCA1NjA3NiwgNTYwODEsIDU2MDg2LCA3Mzk5LCA1NjA5MCwgNTYwOTUsIDU2MTAxLCAKLSAgICA3NDEwLCA1NjEwNiwgNTYxMDksIDU2MTE0LCA1NjEyNCwgNTYxMzMsIDU2MTM4LCA1NjE0NiwgNTYxNTMsIDU2MTY0LCAKLSAgICA1NjE3NCwgNTYxNzksIDU2MTg0LCA1NjE5MSwgNTYxOTcsIDU2MjAyLCA1NjIwOSwgNTYyMTgsIDU2MjI2LCA1NjIzMiwgCi0gICAgNTYyMzgsIDU2MjQyLCAxMTE3MywgMjU2NiwgNTYyNDcsIDU2MjUxLCA1NjI1NywgNTYyNjQsIDU2MjY4LCA1NjI4OSwgCi0gICAgNTYzMTEsIDU2MzI3LCA1NjM0NCwgNTYzNjMsIDU2MzcyLCA1NjM4MiwgNTYzODksIDU2Mzk2LCAxOTE1NCwgNTY0MDIsIAotICAgIDU2NDA2LCA1NjQxNCwgNTY0MjAsIDU2NDI4LCA1NjQzMiwgNTY0NDAsIDU2NDQ3LCA1NjQ1MSwgNTY0NTcsIDI4OTYsIAotICAgIDI4NjUxLCA1NjQ2MywgNTY0NjcsIDU2NDcxLCA1NjQ3NSwgNTY0ODAsIDU2NDg1LCA1NjQ5MCwgNTY0OTYsIDU2NTAxLCAKLSAgICA1NjUwNywgNTY1MTIsIDU2NTE3LCA1NjUyMSwgNTY1MjYsIDI4NjY2LCA1NjUzMCwgNTY1MzUsIDU2NTQzLCA1NjU0NywgCi0gICAgNTY1NTIsIDU2NTU5LCA1NjU2OCwgNTY1NzQsIDU2NTgxLCA1NjU4NSwgNTY1OTQsIDU2NTk5LCA1NjYwNywgNTY2MTYsIAotICAgIDU2NjIyLCA1NjYyNywgNTY2MzIsIDU2NjM4LCA1NjY0NCwgNTY2NDksIDU2NjUzLCA1NjY2MSwgNTY2NzEsIDU2Njc2LCAKLSAgICAyNjU1NywgNTY2ODQsIDU2Njk2LCA1NjcwMCwgNTY3MTIsIDU2NzE5LCA1NjcyNSwgNTY3MzIsIDU2NzQ0LCA1Njc1MSwgCi0gICAgNTY3NTcsIDE1MTEyLCA1Njc2MSwgNTY3NjcsIDU2NzczLCA1Njc3OCwgNTY3ODMsIDQzODIsIDU2Nzg4LCA1Njc5NiwgCi0gICAgNTY4MDUsIDU2ODA5LCA1NjUyMiwgMjA5ODAsIDU2ODE0LCA1NjgxNiwgNTY4MjgsIDU2ODMzLCA1MDM2LCA0OSwgNTY4MzgsIAotICAgIDU2ODQzLCAyMjMzMSwgMjIzMzYsIDIyMzQxLCAyMjM0NywgMjIzNTIsIDU2ODQ3LCAyMjM1NywgNTY4NjksIDU2ODcxLCAKLSAgICA1Njg3NSwgNTY4NzksIDU2ODg0LCA1Njg4OCwgMjIzNjEsIDU2ODkyLCAyMjM2NiwgNTY5MDAsIDU2OTAzLCAyMjM3MSwgCi0gICAgMTU1MDYsIDU2OTEyLCA1NjkxNiwgMTQyOSwgNTY5MjEsIDIyMzgyLCA1NjkyNCwgNTY5MjksIDE4MTIzLCAxODEzMywgCi0gICAgNTY5MzQsIDU2OTM4LCA1Njk0MywgNTY5NDksIDU2OTU0LCA1Njk2MywgNTY5NjgsIDU2OTc1LCA1Njk4MSwgNTY5ODYsIAotICAgIDU2OTkxLCA1Njk5NiwgNTcwMDQsIDIyMzg3LCAxMDEwLCA1NzAxMSwgNTcwMTcsIDU3MDIyLCA1NzAyNywgNTcwMzIsIAotICAgIDU3MDM4LCA1NzA0MywgNTcwNTAsIDU3MDU2LCA1NzA2MSwgNTcwNjksIDU3MDc1LCAxMTY1MiwgNTcwODIsIDI0NDUzLCAKLSAgICA1NzA5NSwgNTcxMDAsIDU3MTA2LCA1NzExOSwgNTcxMjMsIDU3MTMyLCA1NzEzOSwgNTcxNDUsIDU3MTUzLCA1NzE2MCwgCi0gICAgNTcxNjYsIDIyMzkxLCA1NzE2OSwgNTcxNzYsIDU3MTgyLCA1NzE4NiwgNTcxODksIDU3MTk3LCA1NzIxMSwgNTcyMTgsIAotICAgIDIyMzk2LCA1NzIyNCwgMjI0MDEsIDU3MjMxLCAyMzY1NSwgNTcyNDEsIDU3MjQ2LCA1NzI1MCwgNTcyNTUsIDU3MjYwLCAKLSAgICA1NzI2NSwgMjI0MDYsIDQ3NDQ2LCA1NzI2OSwgNTcyNzQsIDU3MjgwLCA1NzI4NiwgNTcyOTMsIDU3Mjk5LCA1NzMwNCwgCi0gICAgNTczMDksIDU3MzE4LCA1NzMzMCwgNTczNDUsIDIyNjI2LCA1NzM1MSwgMTA4NjIsIDIyNDEwLCA1NzM1NSwgNTczNjIsIAotICAgIDIyNDE1LCA1NzM2OCwgNTczNzcsIDU3Mzg0LCA1NzM5MywgNTczOTksIDU3NDA0LCA1NzQxMCwgMjI0MjAsIDU3NDE1LCAKLSAgICA1NzQyNCwgNTc0MzMsIDU3NDQwLCA1NzQ0NiwgNTc0NTIsIDU3NDYwLCA1NzQ2NCwgMjI0MjUsIDU3NDY3LCAyMjQzMSwgCi0gICAgMjI0MzcsIDU3NDcyLCA1NzQ4MCwgNTc0OTAsIDIyNDQyLCA1NzQ5NCwgNTc0OTYsIDU3NTAwLCA1NzUwNSwgNTc1MDksIAotICAgIDU3NTEzLCA1NzUxOSwgNTc1MjQsIDU3NTI4LCAyNTcxLCA1NzUzMiwgNTc1MzksIDU3NTQzLCA1NzU1MiwgNTc1NjAsIAotICAgIDU3NTY3LCA1NzU3MiwgNTc1NzcsIDU3NTgxLCA1NzU4NSwgNTc1ODgsIDU3NTk0LCA1NzYwMiwgNTc2MDgsIDU3NjEyLCAKLSAgICA1NzYxNywgNTc2MjQsIDU3NjMwLCA0NzQ3NywgNTc2MzUsIDU3NjM4LCA1NzY0MywgNTc2NDcsIDU3NjUyLCA1NzY1NywgCi0gICAgNTc2NjEsIDU3NjY5LCAxODE0MiwgMTgxNTEsIDU3Njc1LCA1NzY4MSwgNTc2ODYsIDU3NjkwLCA1NzY5MywgNTc3MDMsIAotICAgIDU3NzA4LCA1NzcxNCwgNTc3MjAsIDU3NzI4LCA1NzczMywgMjM2NzEsIDU3NzM3LCA1Nzc0NSwgNTc3NTAsIDU3NzU1LCAKLSAgICA0NDIzMywgMjM2NzcsIDU3NzYxLCA1Nzc2NiwgNTc3NzAsIDU3Nzc1LCA1Nzc4MCwgNTc3ODUsIDU3Nzg5LCA1Nzc5NCwgCi0gICAgNTc3OTksIDU3ODA1LCA1NzgxMCwgNTc4MTUsIDU3ODIxLCA1NzgyNywgNTc4MzIsIDU3ODM2LCA1Nzg0MSwgNTc4NDYsIAotICAgIDU3ODUxLCA1Nzg1NSwgNTc4NjAsIDU3ODY1LCA1Nzg3MCwgNTc4NzYsIDU3ODgyLCA1Nzg4OCwgNTc4OTMsIDU3ODk3LCAKLSAgICA1NzkwMiwgNTc5MDcsIDU3OTExLCA1NzkxNiwgNTc5MjEsIDU3OTI2LCA1NzkzMCwgMjI0NDYsIDU3OTM4LCA1Nzk0NiwgCi0gICAgMTU4MzgsIDU3OTU3LCA1Nzk2MywgNTc5NzAsIDU3OTc1LCA1Nzk3OSwgNTc5ODQsIDU3OTkyLCA1ODAwMCwgNTgwMDcsIAotICAgIDQ5MTA0LCA1ODAxMywgNTgwMjEsIDU4MDI4LCA1ODAzOSwgNTgwNDUsIDIyNDU2LCA1ODA0OCwgNTgwNTUsIDI2NjcxLCAKLSAgICA1ODA1OSwgNTgwNjQsIDU4MDY5LCA1NDUzLCA1ODA3MywgNTgwODEsIDU4MDg4LCA1ODA5NSwgNTgxMDEsIDU4MTE1LCAKLSAgICA1ODEyMSwgNTgxMjUsIDU4MTI4LCA1ODEzNiwgNTgxNDMsIDU4MTQ4LCA1ODE1NSwgNTgxNjAsIDU4MTY1LCA1ODE2OCwgCi0gICAgNTgxNzUsIDU4MTc5LCA1ODE4OSwgNTgxOTksIDU4MjA4LCA1ODIxOSwgNTgyMjQsIDU4MjI4LCA1ODIzNiwgMjI0NjEsIAotICAgIDI3MDgyLCA1ODI0MCwgNTgyNDUsIDU4MjUwLCA1ODI1NSwgNTgyNjAsIDU4MjY1LCA1ODI3MCwgNTgyNzQsIDU4Mjc5LCAKLSAgICA1ODI4NCwgNTgyODksIDU4Mjk0LCA1ODI5OSwgNTgzMDQsIDU4MzA4LCA1ODMxMywgNTgzMTgsIDU4MzIyLCA1ODMyNiwgCi0gICAgNTgzMzAsIDU4MzM0LCA1ODMzOSwgNTgzNDQsIDU4MzQ4LCA1ODM1MywgNTgzNTcsIDU4MzYxLCA1ODM2NiwgNTgzNzEsIAotICAgIDU4Mzc2LCA1ODM4MSwgNTgzODUsIDU4MzkwLCA1ODM5NSwgNTgzOTksIDU4NDA0LCA1ODQwOSwgNTg0MTQsIDU4NDE5LCAKLSAgICA1ODQyNCwgNTg0MjksIDU4NDM0LCA1ODQzOSwgNTg0NDQsIDU4NDQ5LCA1ODQ1NCwgNTg0NTksIDU4NDY0LCA1ODQ2OSwgCi0gICAgNTg0NzQsIDU4NDc5LCA1ODQ4NCwgNTg0ODksIDU4NDk0LCA1ODQ5OSwgNTg1MDMsIDU4NTA4LCA1ODUxMywgNTg1MTgsIAotICAgIDU4NTIzLCA1ODUyOCwgNTg1MzMsIDU4NTM4LCA1ODU0MywgNTg1NDgsIDU4NTUzLCA1ODU1OCwgNTg1NjIsIDU4NTY3LCAKLSAgICA1ODU3MSwgNTg1NzYsIDU4NTgxLCA1ODU4NiwgNTg1OTEsIDU4NTk2LCA1ODYwMSwgNTg2MDYsIDU4NjExLCA1ODYxNiwgCi0gICAgNTg2MjAsIDU4NjI0LCA1ODYyOSwgNTg2MzQsIDU4NjM4LCA1ODY0MywgNTg2NDgsIDU4NjUyLCA1ODY1NywgNTg2NjIsIAotICAgIDU4NjY3LCA1ODY3MiwgNTg2NzYsIDU4NjgxLCA1ODY4NiwgNTg2OTAsIDU4Njk1LCA1ODY5OSwgNTg3MDMsIDU4NzA3LCAKLSAgICA1ODcxMSwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgNTg3MjgsIDU4NzMyLCA1ODczNiwgNTg3NDAsIDU4NzQ0LCA1ODc0OCwgCi0gICAgNTg3NTIsIDU4NzU3LCA1ODc2MiwgNTg3NjcsIDU4NzcyLCA1ODc3NywgNTg3ODIsIDU4Nzg3LCA1ODc5MiwgNTg3OTcsIAotICAgIDU4ODAyLCA1ODgwNiwgNTg4MTAsIDU4ODE0LCA1ODgxOCwgNTg4MjIsIDU4ODI2LCA1ODgzMSwgNTg4MzUsIDU4ODQwLCAKLSAgICA1ODg0NCwgNTg4NDksIDU4ODU0LCA1ODg1OCwgNTg4NjIsIDU4ODY3LCA1ODg3MSwgNTg4NzUsIDU4ODc5LCA1ODg4MywgCi0gICAgNTg4ODcsIDU4ODkxLCA1ODg5NSwgNTg4OTksIDU4OTAzLCA1ODkwNywgNTg5MTEsIDU4OTE1LCA1ODkxOSwgNTg5MjMsIAotICAgIDU4OTI4LCA1ODkzMywgNTg5MzcsIDU4OTQxLCA1ODk0NSwgNTg5NDksIDU4OTUzLCA1ODk1NywgNTg5NjIsIDU4OTY2LCAKLSAgICA1ODk3MCwgNTg5NzQsIDU4OTc4LCA1ODk4MiwgNTg5ODYsIDU4OTkxLCA1ODk5NSwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgCi0gICAgNTkwMTIsIDU5MDE2LCA1OTAyMCwgNTkwMjQsIDU5MDI4LCA1OTAzMiwgNTkwMzYsIDU5MDQwLCA1OTA0NCwgNTkwNDksIAotICAgIDU5MDUzLCA1OTA1NywgNTkwNjEsIDU5MDY1LCA1OTA2OSwgNTkwNzMsIDU5MDc3LCA1OTA4MSwgNTkwODUsIDU5MDg5LCAKLSAgICA1OTA5MywgNTkwOTgsIDU5MTAyLCA1OTEwNiwgNTkxMTEsIDU5MTE2LCA1OTEyMCwgNTkxMjQsIDU5MTI4LCA1OTEzMiwgCi0gICAgNTkxMzYsIDU5MTQwLCA1OTE0NCwgNTkxNDgsIDU5MTUyLCA1OTE1NiwgNTkxNjAsIDU5MTY0LCA1OTE2OCwgNTkxNzIsIAotICAgIDU5MTc2LCA1OTE4MCwgMTUxMSwgNTkxODQsIDE3NDksIDU5MTg4LCA1OTE5MiwgMjM4MywgNTkxOTYsIDEzOTgsIDU5MjAxLCAKLSAgICAxMzY0LCA1OTIwNSwgNTkyMDksIDU5MjE2LCA1OTIzMCwgMjM5OSwgNDQ1NywgNTkyMzksIDU5MjQ3LCA1OTI1NCwgNTkyNjEsIAotICAgIDU5Mjc0LCA1OTI4NywgNTkyOTgsIDU5MzAzLCA1OTMxMCwgNTkzMjIsIDMxNzIsIDc0NjcsIDU5MzI2LCA1OTMzMSwgCi0gICAgNTkzNDAsIDU5MzUwLCA1OTM1NSwgNTkzNTksIDU5MzY0LCAxMzY5LCA5NTU0LCA1OTM3NCwgNTkzODAsIDU5Mzk0LCAKLSAgICA1OTQwNiwgNTk0MTUsIDU5NDI0LCA1OTQzMywgNTk0NDEsIDU5NDUyLCA1OTQ2MCwgMzIxMSwgNTk0NzAsIDU5NDc5LCAKLSAgICA1OTQ4NiwgMjQwODUsIDU5NDkxLCAyNDI3LCA4MzczLCA1OTQ5NSwgNTk1MDIsIDU0MDksIDU5NTExLCAyNDMyLCAyMjA2NywgCi0gICAgNTk1MTcsIDU5NTI0LCA1OTUzMCwgNTk1MzcsIDU5NTQzLCA1OTU1MCwgNTk1NjAsIDU5NTY5LCA1OTU4MCwgNTk1ODcsIAotICAgIDU5NTkzLCA1OTYwMywgNTk2MTEsIDU5NjE3LCA1OTYzMiwgNTk2MzgsIDU5NjQzLCA1OTY1MCwgNTk2NTMsIDU5NjU5LCAKLSAgICA1OTY2NiwgNTk2NzIsIDU5NjgxLCA1OTY4OSwgNTk2OTUsIDU5NzA0LCAyODE5MSwgNTk3MTgsIDU5NzIzLCA5NTgyLCAKLSAgICA1OTcyOSwgNTk3MzgsIDU5NzQ2LCA1OTc1MywgNTk3NTcsIDU5NzYxLCA1OTc2NCwgNTk3NzEsIDU5Nzc5LCA1OTc4NywgCi0gICAgOTUxMSwgNTk3OTYsIDU5ODAxLCA1OTgwNSwgNTk4MTcsIDU5ODI2LCA1OTgzNiwgMjQ0OCwgNTk4NDUsIDU5ODUxLCAKLSAgICA1OTg2NCwgNTk4NzYsIDU5ODg2LCA1OTg5NSwgNTk5MDcsIDU5OTE1LCA1OTkyNCwgNTk5MzUsIDU5OTQ2LCA1OTk1NiwgCi0gICAgNTk5NjYsIDU5OTc1LCA1OTk4MywgNzEzNiwgNTk5OTAsIDU5OTk0LCA1OTk5OSwgNjAwMDQsIDYwMDEwLCAxMzc0LCA3NTE1LCAKLSAgICA2MDAxNywgNjAwMjgsIDYwMDM3LCA2MDA0NSwgNjAwNTQsIDYwMDcwLCA2MDA4MSwgNjAwOTcsIDYwMTA3LCA2MDEyOCwgCi0gICAgNjAxNDEsIDYwMTQ2LCA2MDE1MiwgMTg3ODgsIDYwMTU4LCA2MDE2MSwgNjAxNjgsIDQ5ODMsIDYwMTc4LCA2MDE4MywgCi0gICAgNjAxODgsIDYwMTk2LCA2MDQzLCA2MDUyLCA2MDIwNCwgMjQ1NiwgMjQ2MSwgNjc0MiwgNjAyMTUsIDYwMjIyLCA2MDIyOSwgCi0gICAgMTk1MywgMTAxLCA2MDI0MiwgNjAyNDcsIDYwMjU3LCA2MDI2MywgNjAyNjcsIDYwMjcyLCA2MDI3NiwgMjQ3OCwgNjAyODgsIAotICAgIDYwMjk2LCA2MDMwNywgNjAzMTgsIDYwMzI3LCA2MDMzMiwgNjAzMzgsIDYwMzQzLCA2MDM1MywgNjAzNjMsIDYwMzY4LCAKLSAgICA2MDM3NCwgNjAzNzksIDYwMzg4LCAxNTMyMSwgNjAzOTIsIDMyNzMsIDEyLCA2MDM5NywgNjA0MDQsIDcxMCwgNjA0MTAsIAotICAgIDYwNDE1LCA0NjM4MSwgNjA0MjAsIDYwNDI1LCA2MDQzMSwgNjA0MzksIDYwNDQ0LCA2MDQ1MSwgNjA0NTcsIDI1NTU5LCAKLSAgICA2MDQ2MywgMjQ4MiwgMzIsIDYwNDczLCA2MDQ4NiwgNjA0OTQsIDYwNDk5LCA2MDUwNSwgMjUwNCwgMjE0MzIsIDYwNTEwLCAKLSAgICA2MDUxOCwgNjA1MjUsIDQ0NDc1LCA0NzEyNywgNjA1MzQsIDE2OTQsIDE3OTgsIDYwNTM5LCA2MDU0NCwgNjA1NTEsIDE4MDIsIAotICAgIDIxMCwgNjA1NTgsIDYwNTY0LCA2MDU2OSwgNjA1NzYsIDE4MDYsIDYwNTgxLCA2MDU4NiwgMzU0OCwgNjA1OTgsIDE4MTMsIAotICAgIDYwNjA0LCA2MDYwOSwgNjA2MTYsIDYwNjMxLCA2MDYzOCwgNjA2NDYsIDYwNjU4LCA2MDY2MywgNjA2NzQsIDYwNjgzLCAKLSAgICAyMTIyLCA2MDY5NCwgNjA2OTYsIDI1OTEsIDU3MjksIDYwNzA0LCA2MDcwOSwgNjA3MTMsIDYwNzIyLCA2MDcyOCwgMjU2MSwgCi0gICAgMTEzMjgsIDYwNzMyLCA2MDc0NSwgNjA3NjMsIDYwNzY4LCA2MDc3NiwgNjA3ODQsIDYwNzk0LCA2MDgwNiwgNjA4MTksIAotICAgIDYwODI2LCA2MDg0MiwgNjA4NDksIDYwODU1LCA4NzcsIDYwODYyLCA2MDg2OSwgNjA4NzksIDYwODg4LCA2MDkwMCwgCi0gICAgMjkwNTUsIDYwOTA4LCAyNTc1LCAxMTg2LCA2MDkxMSwgNjA5MTksIDYwOTIzLCAyNTc5LCA2MDkyNywgNjA5MzEsIDYwOTM1LCAKLSAgICAyNTg1LCA2MDkzOSwgMTM3OSwgMTA0NjAsIDc2OTYsIDU5Nzc1LCAyNjA2LCA2MDk0OSwgNjA5NTIsIDYwOTU4LCA2MDk2NCwgCi0gICAgNjA5NzEsIDYwOTc2LCA2MDk4MSwgMTk5MiwgCitzdGF0aWMgdW5zaWduZWQgaW50IGxleGljb25fb2Zmc2V0W10gPSB7CisgICAgMCwgMCwgNiwgMTAsIDE1LCAyMywgMjcsIDM0LCAzOSwgNDEsIDQ0LCA1MiwgNjIsIDY4LCA4MSwgOTMsIDEwMiwgMTA4LCAKKyAgICAxMTMsIDEyMSwgMTMwLCAxMzUsIDE0MCwgMTQ0LCAxNTAsIDE1MywgMTU4LCAxNjYsIDE3MywgMTgxLCAxODYsIDE5MSwgCisgICAgMTk0LCAyMDAsIDIwOCwgMjE1LCAyMjUsIDIzMiwgMjQxLCAyNDQsIDI0NywgMjUyLCAyNTgsIDI2MiwgMjcxLCAyNzgsIAorICAgIDI4NSwgMjkwLCAyOTksIDMwNywgMzEzLCAzMTksIDMyNSwgMTQxLCAzMzAsIDMzMSwgMzM3LCAzNDUsIDM1MSwgMzU3LCAKKyAgICAzNjUsIDM3MiwgMzc0LCAzNzcsIDM4MSwgMzg4LCAzOTAsIDM5NywgNDAyLCA0MDgsIDQxMCwgNDE3LCA0MjUsIDQyNywgCisgICAgMzExLCA0MzAsIDQzMiwgNDM3LCA0NDIsIDQ0NywgNDUzLCA0NjAsIDQ2OSwgNDc5LCA0ODQsIDQ4OSwgNDkzLCA1MDYsIAorICAgIDUxMywgNTE3LCA1MjYsIDUzMywgNTQwLCA1NDMsIDU0OSwgNTUzLCA1NjMsIDU3MSwgNTc5LCA1ODgsIDU5NiwgNjA0LCAKKyAgICA2MDksIDYxNywgNjI0LCA2MzQsIDY0NSwgNjQ5LCA2NTQsIDY1NywgNjYxLCA2NjUsIDY2NiwgNjcyLCA2NzgsIDY4MCwgCisgICAgNjgzLCA2ODcsIDM0NCwgNjkwLCA2OTQsIDcwMywgNzA2LCA3MDksIDcxNCwgNzE4LCA3MjYsIDcyOSwgNzM1LCA3NDIsIAorICAgIDc0OSwgNzU4LCA3NjUsIDc3NCwgNzc5LCA3ODMsIDc5MiwgODAyLCA4MTEsIDgxNywgODIzLCA4MzAsIDgzOCwgODQ2LCAKKyAgICA4NTUsIDg2MywgODY3LCA4NzUsIDg4MCwgNzgxLCA1MTEsIDg4OSwgODkzLCA4OTcsIDkwNCwgOTA4LCA5MTUsIDY4OSwgCisgICAgOTE4LCA5MjYsIDkyOSwgOTMzLCA5NDAsIDk0NCwgOTQ5LCA5NTcsIDk2MCwgMTkyLCA5NjYsIDk3MSwgOTgxLCA5OTAsIAorICAgIDk5NywgMTAwNCwgMTAxMiwgMTAyMCwgMTAyNiwgMTAzMCwgMTAzNSwgMTA0MCwgMTA0NiwgMTA1MSwgMTA1NCwgMTExLCAKKyAgICAxMDYwLCAxMDY0LCAxMDcwLCAxMDczLCAxMDg2LCAxMDg5LCAxMDkzLCAyMiwgMTA5NywgMTEwMiwgMTEwNSwgMTEwOCwgCisgICAgMTExNCwgMTEyNCwgMTEyNiwgMTEzMiwgMTE0MiwgMTE0NywgMTE1NiwgMTE2NCwgMzI4LCAxMTY3LCAxMTcwLCAxMTc0LCAKKyAgICAxMTc5LCAxMTg1LCAxMTkwLCAxMTk3LCAxMTk5LCAxMjA0LCAxMjA5LCAxMjE1LCAxMjIwLCAxMjI1LCAxMjI5LCAxMjM0LCAKKyAgICAxMjQwLCAxMjQ1LCAxMjUwLCAxMjU0LCAxMjU5LCAxMjY0LCAxMjY4LCAxMjczLCAxMjc4LCAxMjgzLCAxMjg5LCAxMjk1LCAKKyAgICAxMzAxLCAxMzA2LCAxMzEwLCAxMzE1LCAxMzIwLCAxMzI1LCAxMzI5LCAxMzM0LCAxMzM5LCAxMzQ0LCAxMzQ5LCAxMjAwLCAKKyAgICAxMjA1LCAxMjEwLCAxMjE2LCAxMjIxLCAxMzUzLCAxMjI2LCAxMzU5LCAxMzY4LCAxMjMwLCAxMzcyLCAxMjM1LCAxMjQxLCAKKyAgICAxMjQ2LCAxMzc2LCAxMzgxLCAxMzg2LCAxMzkwLCAxMzk0LCAxNDAwLCAxNDA0LCAxMjUxLCAxNDA3LCAxNDExLCAxMjU1LCAKKyAgICAxNDE3LCAxMjYwLCAxNDIxLCAxNDI1LCAxMjY1LCAxNDI5LCAxNDM0LCAxNDM4LCAxNDQxLCAxNDQ1LCAxMjY5LCAxMjc0LCAKKyAgICAxNDUwLCAxMjc5LCAxNDU2LCAxNDYyLCAxNDY4LCAxNDc0LCAxMjg0LCAxMjk2LCAxMzAyLCAxNDc4LCAxNDgyLCAxNDg2LCAKKyAgICAxNDg5LCAxMzA3LCAxNDkzLCAxNDk1LCAxNTAwLCAxNTA1LCAxNTExLCAxNTE2LCAxNTIxLCAxNTI1LCAxNTMwLCAxNTM1LCAKKyAgICAxNTQwLCAxNTQ1LCAxNTUxLCAxNTU2LCAxNTYxLCAxNTY3LCAxNTczLCAxNTc4LCAxNTgyLCAxNTg3LCAxNTkyLCAxNTk3LCAKKyAgICAxNjAyLCAxNjA2LCAxNjE0LCAxNjE4LCAxNjIzLCAxNjI4LCAxNjMzLCAxNjM4LCAxNjQyLCAxNjQ1LCAxNjUwLCAxNjU1LCAKKyAgICAxNjYwLCAxNjY1LCAxNjcxLCAxNjc2LCAxNjgwLCAxMzExLCAxNjgzLCAxNjg4LCAxNjkzLCAxMzE2LCAxNjk3LCAxNzAxLCAKKyAgICAxNzA4LCAxMzIxLCAxNzE1LCAxMzI2LCAxNzE5LCAxNzIxLCAxNzI2LCAxNzMyLCAxMzMwLCAxNzM3LCAxNzQ2LCAxMzM1LCAKKyAgICAxNzUxLCAxNzU3LCAxMzQwLCAxNzYyLCAxNzY3LCAxNzcwLCAxNzc1LCAxNzc5LCAxNzgzLCAxNzg3LCAxNzkwLCAxNzk0LCAKKyAgICAxMzQ1LCAxMzUwLCAxMTAwLCAxNzk5LCAxODA1LCAxODExLCAxODE3LCAxODIzLCAxODI5LCAxODM1LCAxODQxLCAxODQ3LCAKKyAgICAxODUyLCAxODU4LCAxODY0LCAxODcwLCAxODc2LCAxODgyLCAxODg4LCAxODk0LCAxOTAwLCAxOTA2LCAxOTExLCAxOTE2LCAKKyAgICAxOTIxLCAxOTI2LCAxOTMxLCAxOTM2LCAxOTQxLCAxOTQ2LCAxOTUxLCAxOTU2LCAxOTYyLCAxOTY3LCAxOTczLCAxOTc4LCAKKyAgICAxOTg0LCAxOTkwLCAxOTk1LCAyMDAxLCAyMDA3LCAyMDEzLCAyMDE5LCAyMDI0LCAyMDI5LCAyMDMxLCAyMDMyLCAyMDM2LCAKKyAgICAyMDQwLCAyMDQ1LCAyMDQ5LCAyMDUzLCAyMDU3LCAyMDYxLCAyMDY0LCAyMDY5LCAyMDczLCAyMDc4LCAyMDgyLCAyMDg2LCAKKyAgICAyMDkxLCAyMDk1LCAyMDk4LCAyMTAyLCAyMTA4LCAyMTIyLCAyMTI2LCAyMTMwLCAyMTMzLCAyMTM4LCAyMTQyLCAyMTQ2LCAKKyAgICAyMTQ5LCAyMTUzLCAyMTU4LCAyMTYzLCAyMTY4LCAyMTczLCAyMTc3LCAyMTgxLCAyMTg1LCAyMTkwLCAyMTk0LCAyMTk5LCAKKyAgICAyMjAzLCAyMjA4LCAyMjE0LCAyMjIxLCAyMjI3LCAyMjMyLCAyMjM3LCAyMjQyLCAyMjQ4LCAyMjUzLCAyMjU5LCAyMjY0LCAKKyAgICAyMjY3LCAxMjE3LCAyMjY5LCAyMjc2LCAyMjg0LCAyMjk0LCAyMzAzLCAyMzE3LCAyMzIxLCAyMzI1LCAyMzM4LCAyMzQ2LCAKKyAgICAyMzUwLCAyMzU1LCAyMzU5LCAyMzYyLCAyMzY2LCAyMzcwLCAyMzc1LCAyMzgwLCAyMzg1LCAyMzg5LCAyMzkyLCAyMzk2LCAKKyAgICAyNDAzLCAyNDEwLCAyNDE2LCAyNDIxLCAyNDI2LCAyNDMyLCAyNDM4LCAyNDQzLCAyNDQ2LCAxNzIzLCAyNDQ4LCAyNDU0LCAKKyAgICAyNDU4LCAyNDYzLCAyNDY3LCAyNDcxLCAxNzI4LCAxNzM0LCAyNDc2LCAyNDgwLCAyNDgzLCAyNDg4LCAyNDkzLCAyNDk4LCAKKyAgICAyNTAzLCAyNTA3LCAyNTE0LCAyNTE5LCAyNTIyLCAyNTI5LCAyNTM1LCAyNTM5LCAyNTQzLCAyNTQ3LCAyNTUyLCAyNTU5LCAKKyAgICAyNTY0LCAyNTY5LCAyNTc2LCAyNTgyLCAyNTg4LCAyNTk0LCAyNjA4LCAyNjI1LCAyNjQwLCAyNjU1LCAyNjY0LCAyNjY5LCAKKyAgICAyNjczLCAyNjc4LCAyNjgzLCAyNjg3LCAyNjk5LCAyNzA2LCAyNzEyLCAyMjE3LCAyNzE4LCAyNzI1LCAyNzMxLCAyNzM1LCAKKyAgICAyNzM4LCAyNzQ1LCAyNzUxLCAyNzU1LCAyNzU5LCAyNzYzLCAyMDU0LCAyNzY3LCAyNzcyLCAyNzc3LCAyNzgxLCAyNzg5LCAKKyAgICAyNzkzLCAyNzk3LCAyODAxLCAyODA2LCAyODExLCAyODE2LCAyODIwLCAyODI1LCAyODMwLCAyODM0LCAyODM5LCAyODQzLCAKKyAgICAyODQ2LCAyODUwLCAyODU0LCAyODU5LCAyODYzLCAyODY3LCAyODczLCAyODgyLCAyODg2LCAyODkwLCAyODk2LCAyOTAxLCAKKyAgICAyOTA4LCAyOTEyLCAyOTIyLCAyOTI2LCAyOTMxLCAyOTM1LCAyOTQwLCAyOTQ2LCAyOTUxLCAyOTU1LCAyOTU5LCAyOTYzLCAKKyAgICAyNDA2LCAyOTcxLCAyOTc2LCAyOTgyLCAyOTg3LCAyOTkxLCAyOTk2LCAzMDAxLCAzMDA1LCAzMDExLCAzMDE2LCAzMDIyLCAKKyAgICAzMDI2LCAzMDMyLCAzMDM3LCAzMDQyLCAzMDQ3LCAzMDUyLCAzMDU3LCAzMDYyLCAzMDY3LCAzMDcyLCAzMDc3LCAzMDgzLCAKKyAgICAzMDg4LCAxMjI3LCA4MCwgMzA5NCwgMzA5OCwgMzEwMiwgMzEwNiwgMzExMSwgMzExNSwgMzExOSwgMzEyMywgMzEyNywgCisgICAgMzEzMiwgMzEzNiwgMzE0MSwgMzE0NSwgMzE0OCwgMzE1MiwgMzE1NywgMzE2MSwgMzE2NiwgMzE3MCwgMzE3NCwgMzE3OCwgCisgICAgMzE4MywgMzE4NywgMzE5MCwgMzIwMywgMzIwNywgMzIxMSwgMzIxNSwgMzIxOSwgMzIyMywgMzIyNiwgMzIzMCwgMzIzNCwgCisgICAgMzIzOSwgMzI0MywgMzI0OCwgMzI1MywgMzI1OCwgMzI2MiwgMzI2NSwgMzI2OCwgMzI3NCwgMzI3OCwgMzI4MiwgMzI4NSwgCisgICAgMzI4OSwgMzI5MywgMzI5NiwgMzMwMiwgMzMwNywgMzMxMiwgMzMxOCwgMzMyMywgMzMyOCwgMzMzNCwgMzM0MCwgMzM0NSwgCisgICAgMzM1MCwgMzM1NSwgMTA5MSwgNTQyLCAzMzYwLCAzMzYzLCAzMzY4LCAzMzcyLCAzMzc1LCAzMzc5LCAzMzg0LCAzMzg5LCAKKyAgICAzMzkzLCAzMzk4LCAzNDAyLCAzNDA3LCAzNDExLCAzNDE1LCAzNDIxLCAzNDI3LCAzNDMwLCAzNDMzLCAzNDM5LCAzNDQ2LCAKKyAgICAzNDUzLCAzNDU5LCAzNDY2LCAzNDcxLCAzNDc1LCAzNDgyLCAzNDg3LCAzNDkxLCAzNTAxLCAzNTA1LCAzNTA5LCAzNTE0LCAKKyAgICAzNTE5LCAzNTI5LCAyMDY1LCAzNTM0LCAzNTM4LCAzNTQxLCAzNTQ3LCAzNTUyLCAzNTU4LCAzNTY0LCAzNTY5LCAzNTc2LCAKKyAgICAzNTgwLCAzNTg0LCA2NTgsIDY4OCwgMzU4OCwgMzU5NSwgMzYwMiwgMzYwOSwgMzYxNSwgMzYyMSwgMzYyNiwgMzYzMCwgCisgICAgMzYzNiwgMzY0MSwgMzY0NSwgMjA3NCwgMzY0OSwgMzY1NywgNTgzLCAzNjYzLCAzNjc0LCAzNjc4LCAzNjg4LCAyMDc5LCAKKyAgICAzNjk0LCAzNjk5LCAzNzE0LCAzNzIwLCAzNzI3LCAzNzM3LCAzNzQzLCAzNzQ4LCAzNzU0LCAzNzYwLCAzNzYzLCAzNzY3LCAKKyAgICAzNzcyLCAzNzc5LCAzNzg0LCAzNzg4LCAzNzkyLCAzNzk2LCAzODAwLCAzODA1LCAzODExLCAzMTUzLCAzODE2LCAzODI4LCAKKyAgICAzODM2LCAzODQxLCAxNTI3LCAzODQ4LCAzODUxLCAzODU0LCAzODU4LCAzODYxLCAzODY3LCAzODcxLCAzODg1LCAzODg5LCAKKyAgICAzODkyLCAzODk2LCAzOTAyLCAzOTA4LCAzOTEzLCAzOTE3LCAzOTIxLCAzOTI3LCAzOTM4LCAzOTQ0LCAzOTQ5LCAzOTU1LCAKKyAgICAzOTU5LCAzOTY3LCAzOTc3LCAzOTgzLCAzOTg4LCAzOTk3LCA0MDA1LCA0MDEyLCA0MDE2LCA0MDIyLCA0MDMxLCA0MDQwLCAKKyAgICA0MDQ0LCA0MDQ5LCA0MDU0LCA0MDU4LCA0MDY2LCA0MDcwLCA0MDc1LCA0MDc5LCAyMDg3LCAxMzY5LCA0MDg1LCA0MDkwLCAKKyAgICA0MDk2LCA0MTAxLCA0MTA2LCA0MTExLCA0MTE2LCA0MTIxLCA0MTI2LCA0MTMyLCA0MTM3LCA0MTQzLCA0MTQ4LCA0MTUzLCAKKyAgICA0MTU4LCA0MTY0LCA0MTY5LCA0MTc0LCA0MTc5LCA0MTg0LCA0MTkwLCA0MTk1LCA0MjAxLCA0MjA2LCA0MjExLCA0MjE2LCAKKyAgICA0MjIxLCA0MjI2LCA0MjMxLCA0MjM3LCA0MjQyLCA0MjQ3LCAzMzUsIDQzNiwgNDI1MiwgNDI1OCwgNDI2MiwgNDI2NiwgCisgICAgNDI3MSwgNDI3NSwgNDI3OSwgNDI4MiwgNDI4NiwgNDI5MCwgNDI5NCwgNDI5OSwgNDMwMywgNDMwNywgNDMxMywgNDA4MiwgCisgICAgNDMxOCwgNDMyMSwgNDMyOCwgNDMzMiwgNDM0NSwgNDM0OSwgNDM1MywgNDM1NywgNDM2MSwgNDM2NSwgNDM2OSwgNDM3NSwgCisgICAgNDM4MiwgNDM5MCwgNDM5NCwgNDQwMiwgNDQxMSwgNDQxNywgNDQyOSwgNDQzNCwgNDQzNywgNDQ0MSwgNDQ1MSwgNDQ1OSwgCisgICAgNDQ2NywgNDQ3MywgNDQ3NywgNDQ4NywgNDQ5NywgNDUwNSwgNDUxMiwgNDUxOSwgNDUyNSwgNDUzMSwgNDUzOCwgNDU0MiwgCisgICAgNDU0OSwgNDU1OSwgNDU2OSwgNDU3NywgNDU4NCwgNDU4OSwgNDU5MywgNDYwMSwgNDYwNiwgNDYxMywgNDYyMSwgNDYyNiwgCisgICAgNDYzMSwgNDYzNSwgNDY0OSwgNDY1NCwgNDY1OSwgNDY2NiwgNDY3NSwgNDY3OCwgNDY4MiwgNDY4NiwgNDY4OSwgNDY5NCwgCisgICAgNDY5OSwgNDcwOCwgNDcxNCwgNDcyMCwgNDcyNiwgNDczMCwgNDc0MSwgNDc1MSwgNDc2NiwgNDc4MSwgNDc5NiwgNDgxMSwgCisgICAgNDgyNiwgNDg0MSwgNDg1NiwgNDg3MSwgNDg4NiwgNDkwMSwgNDkxNiwgNDkzMSwgNDk0NiwgNDk2MSwgNDk3NiwgNDk5MSwgCisgICAgNTAwNiwgNTAyMSwgNTAzNiwgNTA1MSwgNTA2NiwgNTA4MSwgNTA5NiwgNTExMSwgNTEyNiwgNTE0MSwgNTE1NiwgNTE3MSwgCisgICAgNTE4NiwgNTIwMSwgNTIxNiwgNTIzMSwgNTI0NiwgNTI2MSwgNTI3NiwgNTI5MSwgNTMwNiwgNTMyMSwgNTMzNiwgNTM1MSwgCisgICAgNTM2NiwgNTM4MSwgNTM5NiwgNTQxMSwgNTQyNiwgNTQ0MSwgNTQ1NiwgNTQ3MSwgNTQ4NiwgNTQ5NSwgNTUwNCwgNTUwOSwgCisgICAgNTUxNSwgNTUyNSwgNTUyOSwgNTUzNCwgNTUzOSwgNTU0NywgNTU1MSwgNTU1NCwgNTU1OCwgMjkxNywgNTU2MSwgNTU2NiwgCisgICAgMzEwLCA0NDUsIDU1NzIsIDU1ODAsIDU1ODQsIDU1ODgsIDU1OTEsIDU1OTcsIDU2MDEsIDU2MDksIDU2MTUsIDU2MjAsIAorICAgIDU2MjcsIDU2MzQsIDU2NDAsIDU2NDUsIDU2NTIsIDU2NTgsIDU2NjYsIDU2NzAsIDU2NzUsIDU2ODcsIDU2OTgsIDU3MDUsIAorICAgIDU3MTEsIDMxNzUsIDU3MTUsIDU3MjEsIDU3MjYsIDU3MzEsIDU3MzYsIDU3NDIsIDU3NDcsIDU3NTIsIDU3NTcsIDU3NjIsIAorICAgIDU3NjgsIDU3NzMsIDU3NzgsIDU3ODQsIDU3ODksIDU3OTUsIDU4MDAsIDU4MDYsIDU4MTEsIDU4MTcsIDU4MjIsIDU4MjcsIAorICAgIDU4MzIsIDU4MzcsIDU4NDIsIDU4NDgsIDU4NTMsIDU4NTgsIDU4NjMsIDU4NjksIDU4NzUsIDU4ODEsIDU4ODcsIDU4OTMsIAorICAgIDU4OTksIDU5MDUsIDU5MTEsIDU5MTcsIDU5MjMsIDU5MjksIDU5MzUsIDU5NDAsIDU5NDUsIDU5NTAsIDU5NTUsIDU5NjAsIAorICAgIDU5NjUsIDU5NzAsIDU5NzUsIDU5ODEsIDU5ODcsIDU5OTIsIDU5OTgsIDYwMDQsIDYwMTAsIDYwMTUsIDYwMjAsIDYwMjUsIAorICAgIDYwMzAsIDYwMzYsIDYwNDIsIDYwNDcsIDYwNTIsIDYwNTcsIDYwNjIsIDYwNjcsIDYwNzMsIDYwNzgsIDYwODQsIDYwOTAsIAorICAgIDYwOTYsIDYxMDIsIDYxMDgsIDYxMTQsIDYxMjAsIDYxMjYsIDYxMzIsIDIwOTYsIDU1OTAsIDYxMzcsIDYxNDEsIDYxNDUsIAorICAgIDYxNDgsIDYxNTUsIDYxNTgsIDYxNjYsIDYxNzEsIDYxNzYsIDYxNjcsIDYxODEsIDYxNjgsIDYxODUsIDYxOTEsIDYxOTcsIAorICAgIDYyMDIsIDYyMDcsIDYyMTQsIDYyMjIsIDYyMjcsIDYyMzEsIDYyMzQsIDYyMzgsIDIxMjcsIDU1MSwgNjI0MiwgNjI0NiwgCisgICAgNjI1MSwgNjI1NywgNjI2MiwgNjI2NiwgNjI2OSwgNjI3MywgNjI3OSwgNjI4NCwgNjI4OCwgNjI5NSwgNjI5OSwgNjMwMywgCisgICAgNjMwNywgOTQ2LCA3NDcsIDYzMTAsIDYzMTgsIDYzMjUsIDYzMzIsIDYzMzgsIDYzNDUsIDYzNTMsIDYzNjAsIDYzNjcsIAorICAgIDYzNzIsIDYzODQsIDEyNDcsIDEzNzcsIDEzODIsIDYzOTUsIDEzODcsIDYzOTksIDY0MDMsIDY0MTIsIDY0MjAsIDY0MjksIAorICAgIDY0MzUsIDY0NDAsIDY0NDQsIDY0NTAsIDY0NTUsIDY0NjIsIDY0NjYsIDY0NzUsIDY0ODQsIDY0OTMsIDY1MDIsIDY1MDcsIAorICAgIDY1MTIsIDY1MjQsIDY1MjksIDY1MzcsIDIxNzgsIDY1NDEsIDY1NDMsIDY1NDgsIDY1NTIsIDY1NjEsIDY1NjksIDEzOTEsIAorICAgIDEzMywgMzQwMywgMzQwOCwgNjU3NSwgNjU3OSwgNjU4OCwgNjU5NCwgNjU5OSwgNjYwMiwgNjYxMSwgMjY1MiwgNjYxNywgCisgICAgNjYyNSwgNjYyOSwgNjYzMywgMjE5MSwgNjYzNywgNjY0MiwgNjY0OSwgNjY1NSwgNjY2MSwgNjY2NCwgNjY2NiwgNjY2OSwgCisgICAgNjY3NywgNjY4NSwgNjY5MywgNjY5NiwgNjcwMSwgNjE3OCwgNjcwNCwgNjcwNiwgNjcxMSwgNjcxNiwgNjcyMSwgNjcyNiwgCisgICAgNjczMSwgNjczNiwgNjc0MSwgNjc0NiwgNjc1MSwgNjc1NiwgNjc2MiwgNjc2NywgNjc3MiwgNjc3NywgNjc4MywgNjc4OCwgCisgICAgNjc5MywgNjc5OCwgNjgwMywgNjgwOCwgNjgxMywgNjgxOSwgNjgyNCwgNjgyOSwgNjgzNCwgNjgzOSwgNjg0NCwgNjg0OSwgCisgICAgNjg1NCwgNjg1OSwgNjg2NCwgNjg2OSwgNjg3NCwgNjg3OSwgNjg4NCwgNjg4OSwgNjg5NCwgNjg5OSwgNjkwNCwgNjkxMCwgCisgICAgNjkxNiwgNjkyMSwgNjkyNiwgNjkzMSwgNjkzNiwgNjk0MSwgMjIxNSwgMjIyMiwgMjIyOCwgNjk0NiwgNjk1MiwgMjI1NCwgCisgICAgMjI2MCwgNjk2MCwgNjk2NCwgNjk2OSwgNjk3MywgNjk3NywgNjk4MSwgNjk4NiwgNjk5MCwgNjk5NSwgNjk5OSwgNzAwMiwgCisgICAgNzAwNSwgNzAxMSwgNzAxNywgNzAyMywgNzAyOSwgNzAzNSwgNzA0MSwgNzA0NywgNzA1MSwgNzA1NSwgNzA1OSwgNzA2MywgCisgICAgNzA2NywgNzA3MiwgNzA3OSwgNzA5MCwgNzA5OCwgNzEwOCwgNzExNSwgNzEyMCwgNzEyNCwgNzEzNSwgNzE0OCwgNzE1OSwgCisgICAgNzE3MiwgNzE4MywgNzE5NSwgNzIwNywgNzIxOSwgNzIzMiwgNzI0NSwgNzI1MiwgNzI1OCwgNzI3MiwgNzI3OSwgNzI4NSwgCisgICAgNzI4OSwgNzI5NCwgNzI5OCwgNzMwNSwgNzMxMywgNzMxNywgNzMyMywgNzMyOSwgNzMzOSwgNzM0MywgNzM0OCwgNzM1MywgCisgICAgNzM2MCwgNzM2NiwgNzM3NiwgNjM0MCwgNzM4MiwgNzM4NiwgNzM5MywgNzQ2LCA3Mzk3LCA3NDAxLCA3NDA2LCA3NDExLCAKKyAgICA3NDE2LCA3NDIwLCA3NDI2LCA3NDM0LCA3NDQwLCA3NDQ0LCA3NDUwLCA3NDYwLCA3NDY0LCA3NDcwLCA3NDc1LCA3NDc5LCAKKyAgICA3NDg1LCA3NDkxLCAyMTE5LCA3NDk2LCA3NDk4LCA3NTA2LCA3NTE1LCA3NTE5LCA3NTI1LCA3NTMwLCA3NTM1LCA3NTQwLCAKKyAgICA3NTQ1LCA3NTUxLCA3NTU2LCAzOTIzLCA3NTYxLCA3NTY1LCA3NTcxLCA3NTc2LCA3NTgyLCA3NTg3LCA3NTkyLCA3NTk4LCAKKyAgICA3NjAzLCA3NTIwLCA3NjA5LCA3NjEzLCA3NjIwLCA3NjI2LCA3NjMxLCA3NjM1LCA0NjQ1LCA3NjQwLCA3NjQ5LCA2NjQ1LCAKKyAgICA2NjUyLCA3NjU0LCAyODAzLCA3NjU4LCA3NjYzLCA3NjY4LCA3NTMxLCA3NjcyLCA3NTM2LCA3NTQxLCA3Njc3LCA3Njg0LCAKKyAgICA3NjkxLCA3Njk3LCA3NzAzLCA3NzA5LCA3NzE0LCA3NzE5LCA3NzI0LCA3NTQ2LCA3NTUyLCA3NzMwLCA3NzM2LCA3NzQxLCAKKyAgICA3NzQ5LCA3NTU3LCA3NzU0LCAxMDI4LCA3NzU3LCA3NzY1LCA3NzcxLCA3Nzc3LCA3Nzg2LCA3Nzk0LCA3Nzk5LCA3ODA1LCAKKyAgICA3ODEzLCA3ODIwLCA3ODM1LCA3ODUyLCA3ODcxLCA3ODgwLCA3ODg4LCA3OTAzLCA3OTE0LCA3OTI0LCA3OTM0LCA3OTQyLCAKKyAgICA3OTQ4LCA3OTYwLCA3OTY5LCA3OTc3LCA3OTg0LCA3OTkxLCA3OTk3LCA4MDAyLCA4MDEwLCA4MDIwLCA4MDI3LCA4MDM3LCAKKyAgICA4MDQ3LCA4MDU3LCA4MDY1LCA4MDcyLCA4MDgxLCA4MDkxLCA4MTA1LCA4MTIwLCA4MTI5LCA4MTM3LCA4MTQyLCA4MTQ2LCAKKyAgICA4MTU1LCA4MTYxLCA4MTY2LCA4MTc2LCA4MTg2LCA4MTk2LCA4MjAxLCA4MjA1LCA4MjE0LCA4MjE5LCA4MjI5LCA4MjQwLCAKKyAgICA4MjUzLCA4MjY2LCA4Mjc4LCA4Mjg2LCA4MjkxLCA4Mjk1LCA4MzAxLCA4MzA2LCA4MzE0LCA4MzIyLCA4MzI5LCA4MzM0LCAKKyAgICA4MzQyLCA4MzQ4LCA4MzUxLCA4MzU1LCA4MzYxLCA4MzY5LCA4Mzc0LCA4Mzc4LCA4Mzg2LCA4Mzk1LCA4NDAzLCA4NDA5LCAKKyAgICA4NDEzLCA4NDIwLCA4NDMxLCA4NDM1LCA4NDM4LCA4NDQ0LCA4NDQ5LCA4NDUzLCA4NDU5LCA4NDY2LCA4NDcyLCA4NDc3LCAKKyAgICA4NDg0LCA4NDkxLCA4NDk4LCA4NTA1LCA4NTEyLCA4NTE5LCA4NTI0LCA3ODQ4LCA4NTI5LCA4NTM1LCA4NTQyLCA4NTQ5LCAKKyAgICA4NTU0LCA4NTYxLCA4NTcwLCA4NTc0LCA4NTg2LCA4NTkwLCA4NTkzLCA4NTk3LCA4NjAxLCA4NjA1LCA4NjA5LCA4NjE1LCAKKyAgICA4NjIwLCA4NjI2LCA4NjMxLCA4NjM2LCA4NjQyLCA4NjQ3LCA4NjUyLCA3MzU2LCA4NjU3LCA4NjYxLCA4NjY1LCA4NjY5LCAKKyAgICA4Njc0LCA4Njc5LCA4Njg3LCA4NjkzLCA4Njk3LCA4NzAxLCA4NzA4LCA4NzEzLCA4NzIxLCA4NzI2LCA4NzMwLCA4NzMzLCAKKyAgICA4NzM5LCA4NzQ2LCA4NzUwLCA4NzUzLCA4NzU4LCA4NzYyLCAzOTYyLCA4NzY4LCA4Nzc3LCAzNiwgODc4NSwgODc5MSwgCisgICAgODc5NiwgNzM3MSwgODgwMSwgODgwNywgODgxMiwgODgxNiwgODgxOSwgODgzNCwgODg1MywgODg2NSwgODg3OCwgODg5MSwgCisgICAgODkwNCwgODkxOCwgODkzMSwgODk0NiwgODk1MywgODk1OSwgODk2MywgODk3NywgODk4MiwgODk4OCwgODk5MywgOTAwMSwgCisgICAgOTAwNiwgNjQ3MSwgOTAxMSwgOTAxNCwgOTAyMSwgOTAyNiwgOTAzMCwgMjgwOCwgOTU1LCA5MDM2LCA5MDQwLCA5MDQ2LCAKKyAgICA5MDUyLCA5MDU3LCA5MDYzLCA5MDY4LCA3NTY2LCA5MDc0LCA5MDgwLCA5MDg1LCA5MDkwLCA5MDk4LCA5MTA0LCA5MTE3LCAKKyAgICA5MTI1LCA5MTMyLCA3NTcyLCA5MTM4LCA5MTQ2LCA5MTU0LCA5MTYxLCA5MTc0LCA5MTg2LCA5MTk2LCA5MjAzLCA5MjEwLCAKKyAgICA5MjE5LCA5MjI4LCA5MjM2LCA5MjQzLCA5MjQ4LCA5MjU0LCA3NTc3LCA5MjU5LCA5MjY1LCA3NTgzLCA5MjcwLCA5MjczLCAKKyAgICA5MjgwLCA5Mjg2LCA5Mjk5LCA3MDgzLCA5MzEwLCA5MzE2LCA5MzI1LCA5MzMzLCA5MzQwLCA5MzQ2LCA5MzUyLCA5MzU3LCAKKyAgICA5MzYxLCA5MzY2LCA4ODI2LCA5MzcyLCA3NTg4LCA5Mzc5LCA5Mzg0LCA5MzkxLCA5Mzk3LCA5NDAzLCA5NDA4LCA5NDE2LCAKKyAgICA5NDI0LCA5NDMxLCA5NDM1LCA5NDQ5LCA5NDU5LCA5NDY0LCA5NDY4LCA5NDc5LCA5NDg1LCA5NDkwLCA5NDk1LCA3NTkzLCAKKyAgICA3NTk5LCA5NDk5LCA5NTAyLCA5NTA3LCA5NTE5LCA5NTI2LCA5NTMxLCA5NTM1LCA5NTQwLCA5NTQ0LCA5NTUxLCA5NTU3LCAKKyAgICA3NjA0LCA3NTIxLCA5NTY0LCAyODEzLCA4LCA5NTcxLCA5NTc2LCA5NTgwLCA5NTg2LCA5NTk0LCA5NjA0LCA5NjA5LCAKKyAgICA5NjE0LCA5NjIxLCA5NjI4LCA5NjMyLCA5NjQzLCA5NjUzLCA5NjYyLCA5Njc0LCA5Njc5LCA5NjgzLCA5NjkxLCA5NzA1LCAKKyAgICA5NzA5LCA5NzEyLCA5NzIwLCA5NzI3LCA5NzM1LCA5NzM5LCA5NzUwLCA5NzU0LCA5NzYxLCA5NzY2LCA5NzcwLCA5Nzc2LCAKKyAgICA5NzgxLCA5Nzg1LCA5NzkxLCA5Nzk2LCA5ODA3LCA5ODExLCA5ODE0LCA5ODIwLCA5ODI1LCA5ODMxLCA5ODM3LCA5ODQ0LCAKKyAgICA5ODU1LCA5ODY1LCA5ODc1LCA5ODg0LCA5ODkxLCA3NjE0LCA3NjIxLCA3NjI3LCA3NjMyLCA5ODk3LCA5OTAzLCA3NjM2LCAKKyAgICA5OTA5LCA5OTEyLCA5OTE5LCA5OTI0LCA5OTM5LCA5OTU1LCA5OTcwLCA5OTc4LCA5OTg0LCAxMDQzLCA0MDAsIDk5ODksIAorICAgIDk5OTcsIDEwMDA0LCAxMDAxMCwgMTAwMTUsIDEwMDIwLCA3NjQxLCAxMDAyMiwgMTAwMjYsIDEwMDMxLCAxMDAzNSwgCisgICAgMTAwNDUsIDEwMDUwLCAxMDA1NCwgMTAwNjMsIDEwMDY3LCAxMDA3MCwgMTAwNzcsIDEwMDgxLCAxMDA4NCwgMTAwOTIsIAorICAgIDEwMDk5LCAxMDEwNywgMTAxMTEsIDEwMTE4LCAxMDEyNywgMTAxMzAsIDEwMTM0LCAxMDEzOCwgMTAxNDQsIDEwMTQ4LCAKKyAgICAxMDE1MiwgMTAxNTYsIDEwMTYyLCAxMDE3MiwgMTAxNzYsIDEwMTg0LCAxMDE4OCwgMTAxOTUsIDEwMTk5LCAxMDIwNCwgCisgICAgMTAyMDgsIDEwMjE1LCAxMDIyMSwgMTAyMjksIDEwMjM1LCAxMDI0NSwgMTAyNTAsIDEwMjU1LCAxMDI1OSwgMTAyNjcsIAorICAgIDM4MjIsIDEwMjc1LCAxMDI4MCwgMTAyODQsIDEwMjg4LCAxMDI5MSwgMTAyOTksIDEwMzA2LCAxMDMxMCwgNDQ2OSwgCisgICAgMTAzMTQsIDEwMzE5LCAxMDMyMywgMTAzMzQsIDEwMzM5LCAxMDM0NSwgMTAzNDksIDEwMzUyLCAxMDM2MCwgMTAzNjUsIAorICAgIDEwMzcwLCAxMDM3NywgMTAzODIsIDc2NTAsIDEwMzg3LCAxMDM5MSwgMTY4NSwgNDYxOSwgMTAzOTgsIDEwNDAzLCAxMDQwOCwgCisgICAgMTA0MTMsIDEwNDE5LCAxMDQyNCwgMTA0MzAsIDEwNDM1LCAxMDQ0MCwgMTA0NDUsIDEwNDUwLCAxMDQ1NSwgMTA0NjAsIAorICAgIDEwNDY1LCAxMDQ3MCwgMTA0NzUsIDEwNDgwLCAxMDQ4NSwgMTA0OTAsIDEwNDk1LCAxMDUwMCwgMTA1MDUsIDEwNTEwLCAKKyAgICAxMDUxNiwgMTA1MjEsIDEwNTI2LCAxMDUzMSwgMTA1MzYsIDEwNTQxLCAxMDU0NywgMTA1NTIsIDEwNTU3LCAxMDU2MywgCisgICAgMTA1NjgsIDEwNTc0LCAxMDU3OSwgMTA1ODUsIDEwNTkwLCAxMDU5NSwgMTA2MDAsIDEwNjA1LCAxMDYxMSwgMTA2MTYsIAorICAgIDEwNjIxLCAxMDYyNiwgNzI0LCAxMzksIDEwNjM0LCAxMDYzOCwgMTA2NDMsIDEwNjQ4LCAxMDY1MiwgMTA2NTYsIDEwNjYwLCAKKyAgICAxMDY2NSwgMTA2NjksIDEwNjc0LCAxMDY3OCwgMTA2ODEsIDEwNjg1LCAxMDY4OSwgMTA2OTQsIDEwNzA0LCAxMDcxMCwgCisgICAgMTA3MTgsIDEwNzIyLCAxMDcyNiwgMTA3MzMsIDEwNzQxLCAxMDc1MCwgMTA3NjEsIDEwNzY4LCAxMDc3NSwgMTA3ODQsIAorICAgIDEwNzkzLCAxMDgwMSwgMTA4MTAsIDEwODE5LCAxMDgyOCwgMTA4MzcsIDEwODQ3LCAxMDg1NywgMTA4NjcsIDEwODc3LCAKKyAgICAxMDg4NywgMTA4OTYsIDEwOTA2LCAxMDkxNiwgMTA5MjYsIDEwOTM2LCAxMDk0NiwgMTA5NTYsIDEwOTY2LCAxMDk3NSwgCisgICAgMTA5ODUsIDEwOTk1LCAxMTAwNSwgMTEwMTUsIDExMDI1LCAxMTAzNSwgMTEwNDQsIDExMDU0LCAxMTA2NCwgMTEwNzQsIAorICAgIDExMDg0LCAxMTA5NCwgMTExMDQsIDExMTE0LCAxMTEyNCwgMTExMzQsIDExMTQzLCAxMTE1MywgMTExNjMsIDExMTczLCAKKyAgICAxMTE4MywgMTExOTMsIDExMjAzLCAxMTIxMywgMTEyMjMsIDExMjMzLCAxMTI0MywgMTEyNTIsIDExMjU4LCAxMTI2MiwgCisgICAgMTEyNjUsIDExMjY5LCAxMTI3NCwgMTEyODEsIDExMjg3LCAxMTI5MiwgMTEyOTYsIDExMzAxLCAxMTMxMCwgMTEzMTgsIAorICAgIDExMzIzLCAxMTMyNywgMTEzMzEsIDExMzM3LCAxMTM0MiwgMTEzNDgsIDc2NTksIDExMzUzLCAxMTM1OCwgMTEzNjcsIAorICAgIDc2NjQsIDExMzcyLCAxMTM3NSwgMTEzODEsIDExMzg5LCA3NjY5LCAxMTM5NiwgMTE0MDAsIDExNDA0LCAxMTQwOCwgCisgICAgMTE0MTgsIDExNDI0LCAxMTQyOSwgMTE0MzgsIDExNDQ2LCAxMTQ1MywgMTE0NjAsIDExNDY1LCAxMTQ3MiwgMTE0NzcsIAorICAgIDExNDgxLCAxMTQ4NCwgMTE0OTUsIDExNTA1LCAxMTUxNCwgMTE1MjIsIDExNTMzLCAxMTU0NSwgMTE1NTUsIDExNTYwLCAKKyAgICAxMTU2NCwgMTE1NjksIDExNTc0LCAxMTU3OCwgMTE1ODQsIDExNTkyLCAxMTU5OSwgMTE2MTAsIDExNjE1LCAxMTYyNSwgCisgICAgMTE2MzQsIDExNjM4LCAxMTY0MSwgMTE2NDgsIDExNjU4LCAxMTY2NywgMTE2NzQsIDExNjc4LCAxMTY4NSwgMTE2OTEsIAorICAgIDExNjk2LCAxMTcwMSwgMTE3MDUsIDExNzE0LCAxMTcxOSwgMTE3MjUsIDExNzI5LCAxMTczNCwgMTE3MzgsIDExNzQ3LCAKKyAgICAxMTc1NSwgMTE3NjMsIDExNzcwLCAxMTc3OCwgMTE3OTAsIDExODAxLCAxMTgxMSwgMTE4MTgsIDExODI0LCAxMTgzMywgCisgICAgMTE4NDQsIDExODUzLCAxMTg2NSwgMTE4NzcsIDExODg5LCAxMTg5OSwgMTE5MDgsIDExOTE3LCAxMTkyNSwgMTE5MzIsIAorICAgIDExOTQxLCAxMTk0OSwgMTE5NTUsIDExOTYxLCAxMTk2NiwgNjE5OSwgMTE5NzAsIDExOTcyLCAxMTk3NywgMTE5ODMsIAorICAgIDExOTkyLCAxMjAwMCwgMTIwMDcsIDEyMDE2LCAxMjAyNSwgMTIwMzQsIDEyMDQzLCAxMjA1MiwgMTIwNjEsIDEyMDcwLCAKKyAgICAxMjA3OSwgMTIwODksIDEyMDk5LCAxMjEwOCwgMTIxMTQsIDEyMTIxLCAxMjEzNSwgMTIxNDIsIDEyMTUwLCAxMjE1OSwgCisgICAgMTIxNjUsIDEyMTc0LCAxMjE4MywgMTIxOTQsIDEyMjA0LCAxMjIxMiwgMTIyMTksIDEyMjI3LCAxMjIzNiwgMTIyNDksIAorICAgIDEyMjU3LCAxMjI2NCwgMTIyNzcsIDEyMjgzLCAxMjI4OSwgMTIyOTksIDEyMzA4LCAxMjMxNywgMTIzMjIsIDEyMzI2LCAKKyAgICAxMjMzMiwgMTIzMzgsIDEyMzQ1LCA3MzcwLCAxMjM1MCwgMTIzNTUsIDEyMzYyLCAxMjM2NywgMTIzNzIsIDEyMzc2LCAKKyAgICAxMjM4NCwgMTIzOTAsIDEyMzk1LCAxMjQwMywgMTI0MTEsIDEyNDE4LCAxMjQyNiwgMTI0MzIsIDEyNDQwLCAxMjQ0OCwgCisgICAgMTI0NTMsIDEyNDU5LCAxMjQ2NiwgMTI0NzIsIDEyNDc3LCAxMjQ4MSwgMTI0OTIsIDEyNTAwLCAxMjUwNiwgMTI1MTEsIAorICAgIDEyNTIwLCAxMjUyNiwgMTI1MzEsIDEyNTQwLCAxMjU1NCwgMzc4MSwgMTI1NTgsIDEyNTYzLCAxMjU2OCwgMTI1NzQsIAorICAgIDEyNTc5LCAxMjU4NCwgMTI1ODgsIDEyNTkzLCAxMjU5OCwgNjE5OCwgMTI2MDMsIDEyNjA4LCAxMjYxMywgMTI2MTgsIAorICAgIDEyNjIyLCAxMjYyNywgMTI2MzIsIDEyNjM3LCAxMjY0MywgMTI2NDksIDEyNjU0LCAxMjY1OCwgMTI2NjMsIDEyNjY4LCAKKyAgICAxMjY3MywgNzY3MywgMTI2NzgsIDEyNjgzLCAxMjY4OCwgMTI2OTMsIDEyNzEwLCAxMjcyOCwgMTI3NDAsIDEyNzUzLCAKKyAgICAxMjc3MCwgMTI3ODYsIDEyODAzLCAxMjgxMywgMTI4MzIsIDEyODQzLCAxMjg1NCwgMTI4NjUsIDEyODc2LCAxMjg4OCwgCisgICAgMTI4OTksIDEyOTEwLCAxMjkyNywgMTI5MzgsIDEyOTQ5LCAxMjk1NCwgMjMzNSwgMTI5NTgsIDEyOTYxLCAxMjk2NywgCisgICAgMTI5NzUsIDEyOTgzLCAxMjk4OCwgMTI5OTYsIDEzMDA0LCAxMzAxMSwgMTMwMTYsIDEzMDIyLCAxMzAyOSwgMTMwMzcsIAorICAgIDEzMDQ0LCAxMzA1NiwgMTMwNjQsIDEzMDY5LCA5OTMzLCAxMzA3NSwgMTMwODQsIDEzMDkzLCAxMzEwMSwgMTMxMDgsIAorICAgIDEzMTE0LCAxMzEyMiwgMTMxMjksIDEzMTM1LCAxMzE0MiwgMTMxNDgsIDEzMTU3LCAxMzE2NSwgMTMxNzUsIDEzMTgyLCAKKyAgICAxMzE4OCwgMTMxOTYsIDEzMjAyLCAxMzIxMCwgMTMyMTcsIDEzMjMwLCAxMzIzNywgMTMyNDYsIDEzMjU1LCAxMzI2NCwgCisgICAgMTMyNzIsIDEzMjgyLCAxMzI4OSwgMTMyOTQsIDM0OTUsIDEzMzAxLCAxMzMwNiwgMTMzMDksIDEyNjA0LCAxMzMxMywgCisgICAgMTMzMTksIDEzMzIzLCAxMzMzMSwgMTMzNDMsIDEzMzQ4LCAxMzM1NSwgMTMzNjEsIDEzMzY2LCAxMzM3MywgMTI2MDksIAorICAgIDEzMzc3LCAxMzM4MSwgMTI2MTQsIDEzMzg1LCAxMzM4OSwgMTMzOTMsIDEzNDAwLCAxMzQwNSwgMTM0MDksIDEzNDEzLCAKKyAgICAxMzQyMSwgMTM0MjgsIDEzNDM1LCAxMzQ1MiwgMTM0NjEsIDEzNDY1LCAxMzQ2OCwgMTM0NzYsIDEzNDgyLCAxMzQ4NywgCisgICAgMzU3MywgMTM0OTEsIDEzNDkzLCAxMzUwMSwgMTM1MDgsIDEzNTE4LCAxMzUzMCwgMTM1MzUsIDEzNTQxLCAxMzU0NiwgCisgICAgMTM1NTAsIDEzNTU2LCAxMzU2MSwgMTM1NjcsIDEzNTcwLCAxMzU3NywgMTM1ODUsIDEzNTkyLCAxMzU5OCwgMTM2MDQsIAorICAgIDEzNjA5LCAxMzYxNiwgMTM2MjIsIDEzNjI3LCAxMzYzNCwgMTM2MzgsIDEzNjQ0LCAxMzY0OCwgMTM2NTUsIDEzNjYxLCAKKyAgICAxMzY2NywgMTM2NzUsIDEzNjgxLCAxMzY4NiwgMTM2OTIsIDEzNzAwLCAxMzcwOCwgMTM3MTQsIDEzNzIwLCAxMzcyNSwgCisgICAgMTM3MzIsIDEzNzM3LCAxMzc0MSwgMTM3NDcsIDEzNzUyLCAxMzc1OSwgMTM3NjQsIDEzNzcwLCAxMzc3MywgMTM3NzksIAorICAgIDEzNzg1LCAxMzc4OCwgMTM3OTIsIDEzODA0LCAxMzgxMCwgMTM4MTUsIDEzODIyLCAxMzgyOCwgMTM4MzQsIDEzODQ1LCAKKyAgICAxMzg1NSwgMTM4NjQsIDEzODcyLCAxMzg3OSwgMTM4OTAsIDEzOTAwLCAxMzkxMCwgMTM5MTgsIDEzOTIxLCAxMjYyOCwgCisgICAgMTM5MjYsIDEzOTMxLCAxMjYzMywgMTI3NTgsIDEzOTM5LCAxMzk1MiwgMTM5NjcsIDEzOTc4LCAxMjc3NSwgMTM5OTYsIAorICAgIDE0MDA5LCAxNDAyMiwgMTQwMzMsIDg4NDEsIDE0MDQ0LCAxNDA1NywgMTQwNzYsIDE0MDg3LCAxNDA5OCwgMTQxMDksIAorICAgIDI2MDMsIDE0MTIyLCAxNDEyNiwgMTQxMzQsIDE0MTQ1LCAxNDE1MiwgMTQxNTgsIDE0MTY2LCAxNDE3MCwgMTQxNzYsIAorICAgIDE0MTc5LCAxNDE4OSwgMTQxOTcsIDE0MjA0LCAxNDIxMiwgMTQyMjIsIDE0MjI3LCAxNDIzNCwgMTQyMzksIDE0MjQ2LCAKKyAgICAxNDI1NywgMTQyNjcsIDE0MjczLCAxNDI3OCwgMTQyODMsIDE0Mjg3LCAxNDI5MSwgMTQyOTcsIDE0MzAzLCAxNDMwOCwgCisgICAgMTQzMTMsIDE0MzE4LCAxNDMyMiwgMTI2MzgsIDEyNjQ0LCAxNDMyNiwgMTI2NTAsIDE0MzMxLCAxNDMzOSwgMTQzNDgsIAorICAgIDE0MzU1LCA3NTQyLCAxNDM1OSwgMTQzNjEsIDE0MzY2LCAxNDM3MSwgMTQzNzcsIDE0MzgyLCAxNDM4NywgMTQzOTIsIAorICAgIDE0Mzk3LCAxNDQwMSwgMTQ0MDcsIDE0NDEzLCAxNDQxOCwgMTQ0MjQsIDE0NDI5LCAxNDQzNCwgMTQ0NDAsIDE0NDQ1LCAKKyAgICAxNDQ1MCwgMTQ0NTUsIDE0NDYxLCAxNDQ2NiwgMTQ0NzEsIDE0NDc3LCAxNDQ4MywgMTQ0ODgsIDE0NDkzLCAxNDUwMCwgCisgICAgMTQ1MDYsIDE0NTE3LCAxNDUyNCwgMTQ1MjksIDE0NTMzLCAxNDUzNywgMTQ1NDAsIDE0NTQ4LCAxNDU1MywgMTQ1NjAsIAorICAgIDE0NTY3LCAxNDU3MiwgMTQ1NzcsIDE0NTg0LCAxNDU5NCwgMTQ1OTksIDE0NjA2LCAxNDYxMiwgMTQ2MjIsIDE0NjMyLCAKKyAgICAxNDY0NiwgMTQ2NjAsIDE0Njc0LCAxNDY4OCwgMTQ3MDMsIDE0NzE4LCAxNDczNSwgMTQ3NTMsIDE0NzY2LCAxNDc3MiwgCisgICAgMTQ3NzcsIDE0NzgyLCAxNDc4NiwgMTQ3OTEsIDE0Nzk5LCAxNDgwNSwgMTQ4MTAsIDE0ODE1LCAxNDgxOSwgMTQ4MjQsIAorICAgIDE0ODI4LCAxNDgzMywgMTQ4MzcsIDE0ODQ4LCAxNDg1NCwgMTQ4NTksIDE0ODY0LCAxNDg3MSwgMTQ4NzYsIDE0ODgwLCAKKyAgICAxNDg4NSwgMTQ4OTAsIDE0ODk2LCAxNDkwMywgMTQ5MDksIDE0OTE0LCAxNDkxOCwgMTQ5MjQsIDE0OTI5LCAxNDkzNCwgCisgICAgMTQ5MzgsIDE0OTQ0LCAxNDk0OSwgMTQ5NTQsIDE0OTYxLCAxNDk2NiwgMTE0MjAsIDE0OTcwLCAxNDk3NSwgMTQ5NzksIAorICAgIDE0OTg0LCAxNDk5MCwgMTQ5OTYsIDE1MDAzLCAxNTAxMywgMTUwMjEsIDE1MDI4LCAxNTAzMywgMTUwMzcsIDE1MDQ2LCAKKyAgICAxNTA1NCwgMTUwNjEsIDE1MDY4LCAxNTA3NCwgMTUwODAsIDE1MDg1LCAxNTA5MCwgMTUwOTYsIDE1MTAxLCAxNTEwNywgCisgICAgMTUxMTIsIDE1MTE4LCAxNTEyNCwgMTUxMzEsIDE1MTM3LCAxNTE0MiwgMTUxNDcsIDc3MTUsIDE1MTU2LCAxNTE1OSwgCisgICAgMTUxNjUsIDE1MTcwLCAxNTE3NSwgMTUxODUsIDE1MTkyLCAxNTE5OCwgMTUyMDMsIDE1MjA5LCAxNTIxNCwgMTUyMjAsIAorICAgIDE1MjI1LCAxNTIzMSwgMTUyMzcsIDE1MjQyLCAxNTI1MCwgMTUyNTcsIDE1MjYyLCAxNTI2NywgMTUyNzMsIDE1Mjc4LCAKKyAgICAxNTI4MiwgMTUyOTEsIDE1MzAyLCAxNTMwOSwgMTUzMTcsIDE1MzIzLCAxNTMzMCwgMTUzMzYsIDE1MzQxLCAxNTM0NSwgCisgICAgMTUzNTEsIDE1MzU2LCAxNTM2MSwgMTUzNjYsIDc3MjAsIDYyMjMsIDI4MjcsIDE1MzcwLCAxNTM3NCwgMTUzNzgsIDE1MzgyLCAKKyAgICAxNTM4NiwgMTUzODksIDE1Mzk2LCAxNTQwNCwgMTI2NjQsIDE1NDExLCAxNTQyMSwgMTU0MjksIDE1NDM2LCAxNTQ0NCwgCisgICAgMTU0NTQsIDE1NDYzLCAxNTQ3NiwgMTU0ODEsIDE1NDg2LCAxNTQ5NCwgMTU1MDEsIDExNTEwLCAxMTUxOSwgMTU1MDgsIAorICAgIDE1NTE4LCAxNTUzMywgMTU1MzksIDE1NTQ2LCAxNTU1MywgMTU1NTksIDE1NTY5LCAxNTU3OSwgMTI2NjksIDE1NTg4LCAKKyAgICAxNTU5NCwgMTU2MDAsIDE1NjA4LCAxNTYxNiwgMTU2MjEsIDE1NjMwLCAxNTYzOCwgMTU2NTAsIDE1NjYwLCAxNTY3MCwgCisgICAgMTU2ODAsIDE1Njg5LCAxNTcwMSwgMTU3MTEsIDE1NzIxLCAxNTczMiwgMTU3MzcsIDE1NzQ5LCAxNTc2MSwgMTU3NzMsIAorICAgIDE1Nzg1LCAxNTc5NywgMTU4MDksIDE1ODIxLCAxNTgzMywgMTU4NDUsIDE1ODU3LCAxNTg2OCwgMTU4ODAsIDE1ODkyLCAKKyAgICAxNTkwNCwgMTU5MTYsIDE1OTI4LCAxNTk0MCwgMTU5NTIsIDE1OTY0LCAxNTk3NiwgMTU5ODgsIDE1OTk5LCAxNjAxMSwgCisgICAgMTYwMjMsIDE2MDM1LCAxNjA0NywgMTYwNTksIDE2MDcxLCAxNjA4MywgMTYwOTUsIDE2MTA3LCAxNjExOSwgMTYxMzAsIAorICAgIDE2MTQyLCAxNjE1NCwgMTYxNjYsIDE2MTc4LCAxNjE5MCwgMTYyMDIsIDE2MjE0LCAxNjIyNiwgMTYyMzgsIDE2MjUwLCAKKyAgICAxNjI2MSwgMTYyNzMsIDE2Mjg1LCAxNjI5NywgMTYzMDksIDE2MzIxLCAxNjMzMywgMTYzNDUsIDE2MzU3LCAxNjM2OSwgCisgICAgMTYzODEsIDE2MzkyLCAxNjQwNCwgMTY0MTYsIDE2NDI4LCAxNjQ0MCwgMTY0NTIsIDE2NDY0LCAxNjQ3NiwgMTY0ODgsIAorICAgIDE2NTAwLCAxNjUxMiwgMTY1MjMsIDE2NTM1LCAxNjU0NywgMTY1NTksIDE2NTcxLCAxNjU4MywgMTY1OTUsIDE2NjA3LCAKKyAgICAxNjYxOSwgMTY2MzEsIDE2NjQzLCAxNjY1NCwgMTY2NjYsIDE2Njc4LCAxNjY5MCwgMTY3MDIsIDE2NzE1LCAxNjcyOCwgCisgICAgMTY3NDEsIDE2NzU0LCAxNjc2NywgMTY3ODAsIDE2NzkzLCAxNjgwNSwgMTY4MTgsIDE2ODMxLCAxNjg0NCwgMTY4NTcsIAorICAgIDE2ODcwLCAxNjg4MywgMTY4OTYsIDE2OTA5LCAxNjkyMiwgMTY5MzUsIDE2OTQ3LCAxNjk2MCwgMTY5NzMsIDE2OTg2LCAKKyAgICAxNjk5OSwgMTcwMTIsIDE3MDI1LCAxNzAzOCwgMTcwNTEsIDE3MDY0LCAxNzA3NywgMTcwODksIDE3MTAyLCAxNzExNSwgCisgICAgMTcxMjgsIDE3MTQxLCAxNzE1NCwgMTcxNjcsIDE3MTgwLCAxNzE5MywgMTcyMDYsIDE3MjE5LCAxNzIzMSwgMTcyNDQsIAorICAgIDE3MjU3LCAxNzI3MCwgMTcyODMsIDE3Mjk2LCAxNzMwOSwgMTczMjIsIDE3MzM1LCAxNzM0OCwgMTczNjEsIDE3MzczLCAKKyAgICAxNzM4NiwgMTczOTksIDE3NDEyLCAxNzQyNSwgMTc0MzgsIDE3NDUxLCAxNzQ2NCwgMTc0NzcsIDE3NDkwLCAxNzUwMywgCisgICAgMTc1MTUsIDE3NTI2LCAxNzUzOSwgMTc1NTIsIDE3NTY1LCAxNzU3OCwgMTc1OTEsIDE3NjA0LCAxNzYxNywgMTc2MzAsIAorICAgIDE3NjQzLCAxNzY1NiwgMTc2NjgsIDE3NjgxLCAxNzY5NCwgMTc3MDcsIDE3NzIwLCAxNzczMywgMTc3NDYsIDE3NzU5LCAKKyAgICAxNzc3MiwgMTc3ODUsIDE3Nzk4LCAxNzgxMCwgMTc4MjMsIDE3ODM2LCAxNzg0OSwgMTc4NjIsIDE3ODc1LCAxNzg4OCwgCisgICAgMTc5MDEsIDE3OTE0LCAxNzkyNywgMTc5NDAsIDE3OTUyLCAxNzk2NSwgMTc5NzgsIDE3OTkxLCAxODAwNCwgMTgwMTcsIAorICAgIDE4MDMwLCAxODA0MywgMTgwNTYsIDE4MDY5LCAxODA4MiwgMTgwOTQsIDE4MTA3LCAxODEyMCwgMTgxMzMsIDE4MTQ2LCAKKyAgICAxODE1OSwgMTgxNzIsIDE4MTg1LCAxODE5OCwgMTgyMTEsIDE4MjI0LCAxODIzNiwgMTgyNDksIDE4MjYyLCAxODI3NSwgCisgICAgMTgyODgsIDE4MzAxLCAxODMxNCwgMTgzMjcsIDE4MzQwLCAxODM1MywgMTgzNjYsIDE4Mzc4LCAxODM5MSwgMTg0MDQsIAorICAgIDE4NDE3LCAxODQzMCwgMTg0NDMsIDE4NDU2LCAxODQ2OSwgMTg0ODIsIDE4NDk1LCAxODUwOCwgMTg1MjAsIDE4NTMzLCAKKyAgICAxODU0NiwgMTg1NTksIDE4NTcyLCAxODU4NSwgMTg1OTgsIDE4NjExLCAxODYyNCwgMTg2MzcsIDE4NjUwLCAxODY2MiwgCisgICAgMTg2NzUsIDE4Njg4LCAxODcwMSwgMTg3MTQsIDE4NzI3LCAxODc0MCwgMTg3NTMsIDE4NzY2LCAxODc3OSwgMTg3OTIsIAorICAgIDE4ODA0LCAxODgxNywgMTg4MzAsIDE4ODQzLCAxODg1NiwgMTg4NjksIDE4ODgyLCAxODg5NSwgMTg5MDgsIDE4OTIxLCAKKyAgICAxODkzNCwgMTg5NDYsIDE4OTU3LCAxODk2NSwgMTg5NzIsIDE4OTc4LCAxODk4MiwgMTg5ODgsIDE4OTk0LCAxOTAwMiwgCisgICAgMTkwMDgsIDE5MDEzLCAxOTAxNywgMTkwMjYsIDc1NDcsIDE5MDM3LCAxOTA0NCwgMTkwNTIsIDE5MDU5LCAxOTA2NiwgCisgICAgOTI5MywgMTkwNzMsIDE5MDgyLCAxOTA4NywgMTkwOTIsIDYyMzksIDE5MDk5LCAxOTEwNCwgMTkxMDcsIDE5MTEyLCAKKyAgICAxOTEyMCwgMTkxMjcsIDE5MTM0LCAxOTE0MSwgMTkxNDcsIDE5MTU2LCAxOTE2NSwgMTkxNzEsIDE5MTgwLCAxOTE4NiwgCisgICAgMTkxOTEsIDE5MjAxLCAxOTIwOCwgMTkyMTQsIDE5MjIyLCAxOTIyOCwgMTkyMzUsIDE5MjQ1LCAxOTI1NCwgMTkyNTgsIAorICAgIDE5MjY1LCAxOTI2OSwgMTkyNzQsIDE5MjgwLCAxOTI4OCwgMTkyOTIsIDE5MzAyLCAxMjY3OSwgMTkzMTEsIDE5MzE3LCAKKyAgICAxOTMyMSwgMTkzMzAsIDE5MzM2LCAxOTM0MywgMTkzNTQsIDE5MzYyLCAxOTM3MSwgNzMzNSwgMTkzNzksIDE5Mzg0LCAKKyAgICAxOTM5MCwgMTkzOTUsIDE5Mzk5LCAxOTQwMywgMTk0MDcsIDgwMDYsIDE5NDEyLCAxOTQyMCwgMTk0MjcsIDE5NDM2LCAKKyAgICAxOTQ0MywgMTk0NTAsIDkyMjMsIDE5NDU3LCAxOTQ2MywgMTk0NjcsIDE5NDczLCAxOTQ3OSwgMTk0ODcsIDE5NDkzLCAKKyAgICAxOTUwMCwgMTk1MDYsIDE5NTEyLCAxOTUyMSwgMTk1MjUsIDE5NTMzLCAxOTU0MiwgMTk1NDksIDE5NTU0LCAxOTU1OCwgCisgICAgMTk1NjksIDE5NTc0LCAxOTU3OSwgMTk1ODQsIDE5NTk3LCA2NDI2LCAxOTYwMSwgMTk2MDcsIDE5NjE1LCAxOTYxOSwgCisgICAgMTk2MjYsIDE5NjM1LCAxOTY0MCwgMTk2NDgsIDE5NjYwLCAxOTY2NSwgMTk2NjksIDE5NjcyLCAxOTY3OCwgMTk2ODQsIAorICAgIDE5Njg5LCAxOTY5MywgMTk2OTYsIDE5NzA3LCAxOTcxMiwgNzc1MCwgMTk3MTksIDc1NTgsIDc3NTUsIDE5NzI0LCAxOTcyOSwgCisgICAgMTk3MzQsIDE5NzM5LCAxOTc0NCwgMTk3NDksIDE5NzU0LCAxOTc1OSwgMTk3NjQsIDE5NzY5LCAxOTc3NCwgMTk3NzksIAorICAgIDE5Nzg1LCAxOTc5MCwgMTk3OTUsIDE5ODAwLCAxOTgwNSwgMTk4MTAsIDE5ODE1LCAxOTgyMCwgMTk4MjUsIDE5ODMwLCAKKyAgICAxOTgzNiwgMTk4NDIsIDE5ODQ3LCAxOTg1MiwgMTk4NTcsIDE5ODYyLCAxOTg2NywgMTk4NzIsIDE5ODc3LCAxOTg4MiwgCisgICAgMTk4ODcsIDE5ODkzLCAxOTg5OCwgMTk5MDMsIDE5OTA4LCAxOTkxNCwgMTk5MjAsIDE5OTI1LCAxOTkzMCwgMTk5MzUsIAorICAgIDE5OTQwLCAxOTk0NSwgMTk5NTAsIDE5OTU1LCAxOTk2MCwgMTk5NjYsIDE5OTcxLCAxOTk3NiwgMTk5ODEsIDE5OTg2LCAKKyAgICAxOTk5MiwgMTk5OTcsIDIwMDAyLCAyMDAwNiwgMTI5LCAyMDAxNCwgMjAwMTgsIDIwMDIyLCAyMDAyNiwgMjAwMzEsIAorICAgIDIwMDM1LCAyMDAzOSwgMTA3ODEsIDIwMDQzLCAyMDA0OCwgMjAwNTIsIDIwMDU3LCAyMDA2MSwgMjAwNjYsIDIwMDcwLCAKKyAgICAyMDA3NiwgMjAwODEsIDIwMDg1LCAyMDA4OSwgMjAwOTcsIDIwMTAxLCAyMDEwNiwgMjAxMTEsIDIwMTE1LCAyMDEyMSwgCisgICAgMjAxMjYsIDIwMTMwLCAyMDEzNSwgMjAxNDAsIDIwMTQ0LCAyMDE1MSwgMjAxNTgsIDIwMTY1LCAyMDE2OSwgMjAxNzMsIAorICAgIDIwMTc4LCAyMDE4MiwgMjAxODUsIDIwMTkxLCAyMDIwNCwgMjAyMDksIDIwMjE4LCAyMDIyMywgNzc5NSwgMjAyMjgsIAorICAgIDIwMjMxLCAyNjY2LCAyNjcxLCAyMDIzNSwgMjAyNDEsIDIwMjQ3LCAyMDI1MiwgMjAyNTcsIDIwMjYyLCAyMDI2OCwgCisgICAgMjAyNzMsIDEyMTkwLCAyMDI3OCwgMjAyODMsIDIwMjg4LCAyMDI5NCwgMjAyOTksIDIwMzA0LCAyMDMxMCwgMjAzMTUsIAorICAgIDIwMzE5LCAyMDMyNCwgMjAzMjksIDIwMzM0LCAyMDMzOCwgMjAzNDMsIDIwMzQ4LCAyMDM1MywgMjAzNTgsIDIwMzYyLCAKKyAgICAyMDM2NiwgMjAzNzEsIDI4MzYsIDIwMzIwLCAyMDM3NSwgMjAzODMsIDIwMzkwLCA4MTAwLCAyMDQwMiwgMjA0MTAsIAorICAgIDIwMzI1LCAyMDQxNywgMjA0MjIsIDIwNDMwLCAyMDMzMCwgMjA0MzUsIDIwNDQwLCAyMDQ0OCwgMjA0NTMsIDIwNDU4LCAKKyAgICAyMDQ2MiwgMjA0NjcsIDIwNDcxLCAyMDQ3NywgMjA0ODAsIDIwNDg3LCAyMDQ5MSwgMjA0OTUsIDIwNTAxLCAyMDUwOCwgCisgICAgMjA1MTMsIDczNjIsIDE2OTAsIDE2OTUsIDIwNTE3LCAyMDUyMywgMjA1MjksIDIwNTM0LCAyMDUzOCwgMjA1NDIsIDIwNTQ2LCAKKyAgICAyMDU0OSwgMjA1NTUsIDIwNTYyLCAyMDU3MCwgMjA1NzYsIDIwNTgyLCAyMDU4NywgMjA1OTIsIDIwNTk2LCAxMzAzOSwgCisgICAgMTM4OTYsIDIwNjAxLCAyMDYxMywgMjA2MTYsIDIwNjIzLCAyMDYzMCwgMjA2MzQsIDIwNjQyLCAyMDY1MywgMjA2NjIsIAorICAgIDIwNjc1LCAyMDY4NSwgMjA2OTksIDIwNzExLCAyMDcyNSwgMjA3MzcsIDIwNzQ3LCAyMDc1OSwgMjA3NjUsIDIwNzgwLCAKKyAgICAyMDgwNCwgMjA4MjIsIDIwODQxLCAyMDg1NCwgMjA4NjgsIDIwODg2LCAyMDkwMiwgMjA5MTksIDIwOTM3LCAyMDk0OCwgCisgICAgMjA5NjcsIDIwOTg0LCAyMTAwNCwgMjEwMjIsIDIxMDM0LCAyMTA0OCwgMjEwNjIsIDIxMDc0LCAyMTA5MSwgMjExMTAsIAorICAgIDIxMTI4LCAyMTE0MCwgMjExNTgsIDIxMTc3LCAxMjgxOCwgMjExOTAsIDIxMjEwLCAyMTIyMiwgODg3MiwgMjEyMzQsIAorICAgIDIxMjM5LCAyMTI0NCwgMjEyNDksIDIxMjU1LCAyMTI2MCwgMjEyNjQsIDIxMjcxLCAyMzUyLCAyMTI3NSwgMjEyODEsIAorICAgIDIxMjg1LCAyMTI4OCwgMjEyOTIsIDIxMzAwLCAyMTMwNiwgMjAzMzksIDIxMzEwLCAyMTMxOSwgMjEzMzAsIDIxMzM2LCAKKyAgICAyMTM0MiwgMjEzNTEsIDIxMzU5LCAyMTM2NiwgMjEzNzEsIDIxMzc4LCAyMTM4NCwgMjEzOTMsIDIxNDAxLCAyMTQwOCwgCisgICAgMjE0MTgsIDIxNDI3LCAyMTQzNywgMjE0NDIsIDIxNDUxLCAyMTQ2MCwgMjE0NzEsIDIxNDgyLCAzODgwLCAyMTQ5MiwgCisgICAgMjE0OTYsIDIxNTA2LCAyMTUxNCwgMjE1MjQsIDIxNTM1LCAyMTU0MCwgMjE1NDgsIDIxNTU1LCAyMTU2MSwgMjE1NjYsIAorICAgIDIwMzQ5LCAyMTU3MCwgMjE1NzksIDIxNTgzLCAyMTU4NiwgMjE1OTEsIDIxNTk4LCAyMTYwNywgMjE2MTUsIDIxNjIzLCAKKyAgICAyMTYzMywgMjE2NDIsIDIxNjQ4LCAyMTY1NCwgMjAzNTQsIDIwMzU5LCAyMTY1OCwgMjE2NjgsIDIxNjc4LCAyMTY4OCwgCisgICAgMjE2OTYsIDIxNzAzLCAyMTcxMywgMjE3MjEsIDIxNzI5LCAyMTczNSwgOTYyLCAyMTc0NCwgMTMwMDAsIDUzNywgMjE3NTgsIAorICAgIDIxNzY3LCAyMTc3NSwgMjE3ODYsIDIxNzk3LCAyMTgwNywgMjE4MTYsIDIxODI4LCAyMTgzNywgMjE4NDYsIDIxODUyLCAKKyAgICAyMTg2MSwgMjE4NzAsIDIxODgwLCAyMTg4OCwgMjE4OTYsIDc3MjcsIDIxOTAyLCAyMTkwNSwgMjE5MDksIDIxOTE0LCAKKyAgICAyMTkxOSwgODIxNSwgMjAzNjcsIDIxOTI3LCAyMTkzMywgMjE5MzksIDIxOTQ0LCAyMTk0OSwgMjE5NTMsIDIxOTYxLCAKKyAgICAyMTk2NywgMjE5NzMsIDIxOTc3LCAzNDY3LCAyMTk4NSwgMjE5OTAsIDIxOTk1LCAyMTk5OSwgMjIwMDMsIDgyODcsIAorICAgIDIyMDEwLCAyMjAxOCwgMjIwMjUsIDIyMDMxLCA4Mjk2LCA4MzAyLCAyMjAzOSwgMjIwNDcsIDIyMDU0LCAyMjA1OSwgCisgICAgMjIwNjQsIDIyMDcwLCAyMjA3NCwgMjIwODUsIDIyMDkwLCAyNTU1LCAyMjA5NSwgMjIxMDYsIDIyMTEyLCAyMjExNywgCisgICAgMjIxMjEsIDIyMTI1LCAyMjEyOCwgMjIxMzUsIDIyMTQyLCAyMjE0OSwgMjIxNTUsIDIyMTU5LCAyMjE2NCwgMjIxNjgsIAorICAgIDIyMTcyLCA5NzksIDIyMTc2LCAyMjE4MSwgMjIxODYsIDIyMTkxLCAyMjE5NiwgMjIyMDEsIDIyMjA2LCAyMjIxMSwgCisgICAgMjIyMTYsIDIyMjIxLCAyMjIyNiwgMjIyMzEsIDIyMjM2LCAyMjI0MSwgMjIyNDcsIDIyMjUyLCAyMjI1NywgMjIyNjIsIAorICAgIDIyMjY3LCAyMjI3MiwgMjIyNzcsIDIyMjgzLCAyMjI4OCwgMjIyOTMsIDIyMjk4LCAyMjMwMywgMjIzMDgsIDIyMzEzLCAKKyAgICAyMjMxOCwgMjIzMjQsIDIyMzMwLCAyMjMzNSwgMjIzNDEsIDIyMzQ2LCAyMjM1MSwgNSwgMjIzNTcsIDIyMzYxLCAyMjM2NSwgCisgICAgMjIzNjksIDIyMzc0LCAyMjM3OCwgMjIzODIsIDIyMzg2LCAyMjM5MCwgMjIzOTUsIDIyMzk5LCAyMjQwNCwgMjI0MDgsIAorICAgIDIyNDExLCAyMjQxNSwgMjI0MjAsIDIyNDI0LCAyMjQyOSwgMjI0MzMsIDIyNDM3LCAyMjQ0MSwgMjI0NDYsIDIyNDUwLCAKKyAgICAyMjQ1NCwgMjI0NjQsIDIyNDY5LCAyMjQ3MywgMjI0NzcsIDIyNDgyLCAyMjQ4NywgMjI0OTYsIDIyNTAxLCAyMjUwNiwgCisgICAgMjI1MTAsIDIyNTE0LCAyMjUyNywgMjI1MzksIDIyNTQ4LCAyMjU1NywgMjI1NjMsIDIyNTY4LCAyMjU3MiwgMjI1NzYsIAorICAgIDIyNTg2LCAyMjU5NSwgMjI2MDMsIDIyNjA5LCAyMjYxNCwgMjI2MTgsIDIyNjI1LCAyMjYzNSwgMjI2NDQsIDIyNjUyLCAKKyAgICAyMjY2MCwgMjI2NjcsIDIyNjc1LCAyMjY4NCwgMjI2OTMsIDIyNzAxLCAyMjcwNiwgMjI3MTAsIDIyNzE0LCAyMjcxNywgCisgICAgMjI3MTksIDIyNzIzLCAyMjcyNywgMjI3MzIsIDIyNzM3LCAyMjc0MSwgMjI3NDUsIDIyNzQ4LCAyMjc1MiwgMjI3NTUsIAorICAgIDIyNzU5LCAyMjc2MiwgMjI3NjUsIDIyNzY5LCAyMjc3NSwgMjI3NzksIDIyNzgzLCAyMjc4NywgMjI3OTIsIDIyNzk3LCAKKyAgICAyMjgwMiwgMjI4MDYsIDIyODA5LCAyMjgxNCwgMjI4MjAsIDIyODI1LCAyMjgzMSwgMjI4MzYsIDIyODQwLCAyMjg0NCwgCisgICAgMjI4NDgsIDIyODUzLCAyMjg1NywgMjI4NjIsIDIyODY2LCAyMjg3MywgMjI4NzcsIDIyODgwLCAyMjg4NCwgMjI4OTAsIAorICAgIDIyODk2LCAyMjkwMCwgMjI5MDQsIDIyOTA5LCAyMjkxNiwgMjI5MjIsIDIyOTI2LCAyMjkzNSwgMjI5MzksIDIyOTQzLCAKKyAgICAyMjk0NiwgMjI5NTIsIDIyOTU3LCAyMjk2MywgMTQ1MiwgMTc1NCwgMjI5NjgsIDIyOTczLCAyMjk3OCwgMjI5ODMsIAorICAgIDIyOTg4LCAyMjk5MywgMjI5OTgsIDIxMDYsIDIxNDgsIDIzMDAzLCAyMzAwNiwgMjMwMTAsIDIzMDE0LCAyMzAxOSwgCisgICAgMjMwMjMsIDIzMDI3LCAyMzAzMCwgMjMwMzUsIDIzMDQwLCAyMzA0NCwgMjMwNDcsIDIzMDUyLCAyMzA1NiwgMjMwNjEsIAorICAgIDIzMDY1LCAxMzAxMiwgMjMwNzAsIDIzMDczLCAyMzA3NiwgMjMwODAsIDIzMDg1LCAyMzA5OCwgMjMxMDIsIDIzMTA1LCAKKyAgICAyMzExMywgMjMxMjIsIDIzMTI5LCAyMzEzNCwgMjMxNDAsIDIzMTQ2LCAyMzE1MywgMjMxNjAsIDIzMTY0LCAyMzE2OCwgCisgICAgMjMxNzIsIDIzMTc3LCAyMzE4MiwgMjMxODYsIDIzMTk0LCAyMzE5OSwgMjMyMTEsIDIzMjIyLCAyMzIyNywgMjMyMzEsIAorICAgIDIzMjM1LCAyMzI0MSwgMjMyNDYsIDIzMjUxLCAyMzI1NSwgMjMyNTgsIDIzMjY0LCA2MzQ2LCAyMjcwLCAyMzI2OCwgCisgICAgMjMyNzMsIDIzMjg5LCA3ODQyLCAyMzMwOSwgMjMzMTgsIDIzMzM0LCAyMzMzOCwgMjMzNDEsIDIzMzQ3LCAyMzM1NywgCisgICAgMjMzNjMsIDIzMzc4LCAyMzM5MCwgMjM0MDEsIDIzNDA5LCAyMzQxOCwgMjM0MjQsIDIzNDMzLCAyMzQ0MywgMjM0NTQsIAorICAgIDIzNDY1LCAyMzQ3NCwgMjM0ODMsIDIzNDkxLCAyMzQ5OCwgMjM1MDYsIDIzNTE5LCAyMzUyNiwgMjM1MzIsIDIzNTM3LCAKKyAgICAyMzU0NiwgMjM1NTIsIDIzNTU3LCAyMzU2NSwgMjE1MTYsIDIzNTc3LCAyMzU4OSwgMjM2MDMsIDIzNjExLCAyMzYxOCwgCisgICAgMjM2MzAsIDIzNjM5LCAyMzY0OCwgMjM2NTYsIDIzNjY0LCAyMzY3MiwgMjM2NzksIDIzNjg4LCAyMzY5NiwgMjM3MDYsIAorICAgIDIzNzE1LCAyMzcyNSwgMjM3MzQsIDIzNzQzLCAyMzc1MSwgMjM3NTYsIDIzNzYwLCAyMzc2MywgMjM3NjcsIDIzNzcxLCAKKyAgICAyMzc3NSwgMjM3NzksIDIzNzgzLCAyMzc4OSwgMjM3OTUsIDIzODAzLCAxMzA1NywgMjM4MTAsIDIzODE1LCAyMzgyMiwgCisgICAgMjM4MjgsIDIzODM1LCAxMzA2NSwgMjM4NDIsIDIzODQ1LCAyMzg1NywgMjM4NjUsIDIzODcxLCAyMzg3NiwgMjM4ODAsIAorICAgIDgyNDUsIDIzODkxLCAyMzkwMSwgMjM5MTAsIDIzOTE3LCAyMzkyMSwgMTMwNzAsIDIzOTI0LCAyMzkzMSwgMjM5MzUsIAorICAgIDIzOTQxLCAyMzk0NCwgMjM5NTEsIDIzOTU3LCAyMzk2MSwgMjM5NjYsIDIzOTcwLCAyMzk3OSwgMjM5ODYsIDIzOTkyLCAKKyAgICA2Mzg3LCAyMzk5OSwgMjQwMDcsIDI0MDE0LCAyNDAyMCwgMjQwMjUsIDI0MDMxLCAyNDAzNywgMjQwNDUsIDI0MDQ5LCAKKyAgICAyNDA1MiwgMjQwNTQsIDIzNzY4LCAyNDA2MywgMjQwNjksIDI0MDc5LCAyNDA4NCwgMjQwOTEsIDI0MDk3LCAyNDEwMiwgCisgICAgMjQxMDcsIDI0MTEyLCAyNDExNywgMjQxMjQsIDI0MTMzLCAyNDE0MCwgMjQxNDksIDI0MTU1LCAyNDE2MCwgMjQxNjYsIAorICAgIDI0MTcxLCAyNDE3OCwgMjQxODksIDI0MTk0LCAyNDE5OCwgMjQyMDgsIDI0MjE0LCAyNDIxOCwgMjQyMjMsIDI0MjMzLCAKKyAgICAyNDI0MiwgMjQyNDYsIDI0MjUzLCAyNDI2MSwgMjQyNjgsIDI0Mjc0LCAyNDI3OSwgMjQyODcsIDI0Mjk0LCAyNDMwNiwgCisgICAgMjQzMTUsIDI0MzE5LCAxMTM2MiwgMjQzMjcsIDI0MzM3LCAyNDM0MSwgMjMxMDksIDI0MzUyLCAyNDM1NywgMjQzNjEsIAorICAgIDI0MzY4LCAyNDM3NSwgMjAxMTcsIDIzNjkzLCAyNDM4MCwgMjQzODQsIDI0Mzg3LCAyMDk1NCwgMjQzOTIsIDI0NDA2LCAKKyAgICAyNDQyMiwgMjQ0NDAsIDI0NDU5LCAyNDQ3NiwgMjQ0OTQsIDIwOTczLCAyNDUxMSwgMjQ1MzEsIDIwOTkwLCAyNDU0MywgCisgICAgMjQ1NTUsIDEzOTgzLCAyNDU2NywgMjEwMTAsIDI0NTgxLCAyNDU5MywgODg4NSwgMjQ2MDcsIDI0NjEyLCAyNDYxNywgCisgICAgMjQ2MjIsIDI0NjI4LCAyNDYzNCwgMjQ2NDAsIDI0NjQ0LCAyNDY1MSwgMjQ2NTYsIDI0NjY2LCAyNDY3MiwgODUzMiwgCisgICAgMjQ2NzgsIDI0NjgwLCAyNDY4NSwgMjQ2OTMsIDI0Njk3LCAyNDEyMCwgMjQ3MDMsIDI0NzEwLCA5ODY5LCA5ODc5LCAKKyAgICAyNDcxNywgMjQ3MjcsIDI0NzMyLCAyNDczNiwgMjQ3MzksIDI0NzQ1LCAyNDc1MywgMjQ3NjUsIDI0Nzc1LCAyNDc5MSwgCisgICAgMjQ4MDQsIDI0ODE4LCAxNDAwMSwgMjQ4MzIsIDI0ODM5LCAyNDg0MywgMjQ4NDYsIDI0ODUxLCAyNDg1NSwgMjQ4NjIsIAorICAgIDI0ODY5LCAyNDg3OSwgMjQ4ODQsIDI0ODg5LCAyNDg5NCwgMjQ5MDIsIDI0OTEwLCAyNDkxOSwgMjQ5MjQsIDc5MzksIAorICAgIDI0OTI4LCAyNDkzMSwgMjQ5MzQsIDI0OTM5LCAyNDk0NiwgMjQ5NTEsIDI0OTY3LCAyNDk3NSwgMjQ5ODMsIDc3OTAsIAorICAgIDI0OTkxLCAyNDk5NiwgMjUwMDAsIDI1MDA2LCAyNTAxMiwgMjUwMTUsIDI1MDIxLCAyNTAzMywgMjUwNDEsIDI1MDQ4LCAKKyAgICAyNTA1NCwgMjUwNjEsIDI1MDcyLCAyNTA4NiwgMjUwOTksIDI1MTA4LCAyNTEyMCwgMjUxMzEsIDI1MTQxLCAyNTE1MCwgCisgICAgMjUxNTksIDI1MTY3LCAyNTE3OCwgNjM2OSwgMjUxODUsIDI1MTkxLCAyNTE5NiwgMjUyMDIsIDI1MjA5LCAyNTIxOSwgCisgICAgMjUyMjksIDI1MjM4LCAyNTI0NCwgMjUyNTEsIDI1MjU2LCAyNTI2MywgMjUyNzEsIDI1Mjc5LCAyNTI5MSwgNDcwNCwgCisgICAgMjUyOTgsIDI1MzA3LCAyNTMxNSwgMjUzMjEsIDI1MzI3LCAyNTMzMiwgMjUzMzYsIDI1MzM5LCAyNTM0NSwgMjUzNTIsIAorICAgIDI1MzU3LCAyNTM2MiwgMjUzNjYsIDI1Mzc4LCAyNTM4OSwgMjUzOTgsIDI1NDA2LCAxMzE5NywgMjU0MTEsIDI1NDE3LCAKKyAgICAyNTQyMywgOTg2MiwgNzA0OSwgMjU0MjgsIDI1NDMxLCAyNTQzNCwgMjU0NDAsIDI1NDQ4LCAyNTQ1NiwgMjU0NjAsIAorICAgIDI1NDY0LCAyNTQ2OSwgMjU0NzIsIDI1NDgxLCAyNTQ4OSwgMjU1MDAsIDI1NTA0LCAyNTUxMCwgMjU1MTYsIDI1NTIwLCAKKyAgICAyNTUyNiwgMjU1MzQsIDI1NTU2LCAyNTU4MCwgMjU1ODcsIDI1NTk0LCAyNTYwMCwgMjU2MDYsIDI1NjExLCAyNTYyMiwgCisgICAgMjU2NDAsIDI1NjQ3LCAyNTY1NSwgMjU2NTksIDI1NjY4LCAyNTY4MSwgMjU2ODksIDI1NzAxLCAyNTcxMiwgMjU3MjIsIAorICAgIDI1NzM2LCAyNTc0NSwgMjU3NTMsIDI1NzY1LCA3ODU5LCAyNTc3NiwgMjU3ODcsIDI1Nzk5LCAyNTgwOSwgMjU4MTgsIAorICAgIDI1ODIzLCAyNTgyNywgMjU4MzUsIDI1ODQ1LCAyNTg1MCwgMjU4NTQsIDI1ODU3LCAyNTg2MCwgMjU4NjgsIDI1ODc2LCAKKyAgICAyNTg4NSwgMjU4OTUsIDI1OTA0LCAyNTkxMCwgMjU5MjQsIDI2MTcsIDI1OTQ2LCAyNTk1NywgMjU5NjYsIDI1OTc2LCAKKyAgICAyNTk4OCwgMjU5OTcsIDI2MDA3LCAyNjAxNSwgMjYwMjMsIDI2MDMyLCAyNjAzNywgMjYwNDgsIDI2MDUzLCAyNjA2NCwgCisgICAgMjYwNjgsIDI2MDc4LCAyNjA4NywgMjYwOTUsIDI2MTA1LCAyNjExNSwgMjYxMjMsIDI2MTMyLCAyNjEzOSwgMjYxNDcsIAorICAgIDI2MTU0LCAyNjE2MywgMjYxNjcsIDI2MTc1LCAyNjE4MiwgMjYxOTAsIDI2MTk3LCAyNjIwOCwgMjYyMjMsIDI2MjMwLCAKKyAgICAyNjIzNiwgMjYyNDYsIDI2MjU1LCAyNjI2MSwgMjYyNjgsIDEyMzEyLCAyNjI3NCwgMjYyNzgsIDI2MjgzLCAyNjI4NywgCisgICAgMjYyOTEsIDI2Mjk5LCAyNjMwNywgMjYzMTMsIDI2MzIyLCAyNjMyOSwgMjYzMzQsIDI2MzM5LCAyNjM0OSwgMjE1NjgsIAorICAgIDI2MzUzLCAyNjM1NiwgMjYzNjEsIDI2MzY2LCAyNjM3MSwgMjYzNzYsIDI2MzgxLCAyNjM4NiwgMjYzOTEsIDI2Mzk2LCAKKyAgICAyNjQwMiwgMjY0MDcsIDI2NDEyLCAyNjQxOCwgMTIyMywgNjc5LCAyNjQyMywgMjY0MzIsIDIzMTgsIDI2NDM5LCAyNjQ0NCwgCisgICAgMjY0NDgsIDI2NDU0LCAxMjU2LCA1NDEsIDMzNCwgMjY0NTksIDI2NDY4LCAyNjQ3NiwgMjY0ODUsIDI2NDkzLCAyNjUwNCwgCisgICAgMjY1MTMsIDI2NTIxLCAyNjUyNSwgMjY1MjgsIDI2NTM2LCAyNjU0NCwgMjY1NDksIDEzMDI1LCAyNjU1NSwgMjY1NjEsIAorICAgIDI2NTY3LCA0MzUwLCAyNjU3MiwgMjY1NzYsIDI2NTgyLCAyNjU4NiwgMjY1OTMsIDE0MTgsIDI2NTk5LCA3OTQ2LCAyNjYwNiwgCisgICAgMjY2MTYsIDI2NjI0LCAyNjYzMCwgMjY2MzksIDI2NjQ3LCAyNjY1MywgMjY2NjEsIDI2NjY4LCA5NDU1LCAyNjY3NCwgCisgICAgMjY2ODEsIDI2Njg4LCAxNDU5LCAyMTA1LCAyNjY5NCwgMjY3MDAsIDI2NzA3LCAyNjcxOCwgMjY3MjksIDI2NzM3LCAKKyAgICAyNjc0NCwgMjY3NTQsIDI2NzYzLCAyNjc3MSwgMjY3NzgsIDI2Nzg1LCAyNjc5OCwgMjY4MDksIDI2ODI4LCAxMjYxLCAKKyAgICAyNjgzMiwgMjY4MzcsIDI2ODQ1LCAzNTEwLCAyNjg0OSwgMjY4NTQsIDI2ODU4LCAxNDIyLCAyMjc0NiwgMjY4NjgsIAorICAgIDI2ODcyLCAyNjg3NywgMjY4ODEsIDM0MzUsIDI2ODg3LCAyNjg5NSwgMjY5MDIsIDI2OTEzLCAyNjkyMSwgMjY5MjksIAorICAgIDM1MTEsIDI2OSwgMjY5MzQsIDI2OTQyLCAyNjk1MCwgMjY5NTcsIDI2OTYzLCAyNjk2OCwgMjE3MCwgMjY5NzUsIDI2OTgxLCAKKyAgICAyMzk2MiwgMjQxODQsIDI2OTg3LCAxMDYsIDI2OTkxLCAyNjk5NSwgMjcwMDEsIDYwNiwgNzY5NSwgMjcwMDYsIDI3MDEzLCAKKyAgICAyNzAxOSwgMjI4MSwgMjcwMjMsIDI3MDI3LCAyNzAzMCwgMjcwMzMsIDI3MDM4LCAyNzA0NSwgMjcwNTEsIDI3MDU2LCAKKyAgICAyNzA2NCwgMjcwNzEsIDI3MDc3LCAyMDQ1NSwgMjcwODEsIDM1ODEsIDE0ODI2LCAyNzA4NSwgMjcwOTAsIDI3MDkzLCAKKyAgICAyNzEwMSwgMjcxMDksIDI3MTEyLCAyNzExOSwgMjcxMjksIDI3MTQxLCAyNzE0NiwgMjcxNTAsIDI3MTU4LCAyNzE2NSwgCisgICAgMjcxNzEsIDI3MTc4LCAyNzE4NSwgMjcxODgsIDI3MTkyLCAyNzE5NiwgMTQyNiwgMjcyMDYsIDI3MjA4LCAyNzIxMywgCisgICAgMjcyMTksIDI3MjI1LCAyNzIzMCwgMjcyMzUsIDI3MjQwLCAyNzI0NSwgMjcyNTAsIDI3MjU1LCAyNzI2MCwgMjcyNjUsIAorICAgIDI3MjcwLCAyNzI3NSwgMjcyODAsIDI3Mjg1LCAyNzI5MCwgMjcyOTUsIDI3MzAxLCAyNzMwNywgMjczMTMsIDI3MzE5LCAKKyAgICAyNzMyNCwgMjczMjksIDI3MzM0LCAyNzM0MCwgMjczNDUsIDI3MzUwLCAyNzM1NSwgMjczNjEsIDI3MzY2LCAyNzM3MiwgCisgICAgMjczNzcsIDI3MzgyLCAyNzM4NywgMjczOTIsIDI3Mzk4LCAyNzQwMywgMjc0MDksIDI3NDE0LCAyNzQxOSwgMjc0MjQsIAorICAgIDI3NDI5LCAyNzQzNSwgMjc0NDAsIDI3NDQ2LCAyNzQ1MSwgMjc0NTYsIDI3NDYxLCAyNzQ2NiwgMjc0NzEsIDI3NDc2LCAKKyAgICAyNzQ4MSwgMjc0ODYsIDI3NDkxLCAyNzQ5NywgMjc1MDMsIDI3NTA5LCAyNzUxNCwgMjc1MTksIDI3NTI0LCAyNzUyOSwgCisgICAgMjc1MzUsIDI3NTQxLCAyNzU0NywgMjc1NTMsIDI3NTU5LCAyNzU2NSwgMjc1NzAsIDI3NTc2LCAyNzU4MSwgMjc1ODYsIAorICAgIDI3NTkxLCAyNzU5NiwgMjc2MDIsIDIzOTcsIDI3NjA3LCAyNDA0LCAyNDExLCAyNzA4LCAyNzYxMiwgMjQxNywgMjQyNywgCisgICAgMjc2MTgsIDI3NjIyLCAyNzYyNywgMjc2MzIsIDI3NjM4LCAyNzY0MywgMjc2NDgsIDI3NjUyLCAyNzY1NywgMjc2NjMsIAorICAgIDI3NjY4LCAyNzY3MywgMjc2NzgsIDI3Njg0LCAyNzY4OSwgMjc2OTMsIDI3Njk3LCAyNzcwMiwgMjc3MDcsIDI3NzEyLCAKKyAgICAyNzcxNywgMjc3MjIsIDI3NzI4LCAyNzczNCwgMjc3MzksIDI3NzQzLCAyNzc0OCwgMjc3NTQsIDI3NzU4LCAyNzc2MywgCisgICAgMjc3NjgsIDI3NzczLCAyNzc3OCwgMjc3ODIsIDI3Nzg1LCAyNzc5MCwgMjc3OTUsIDI3ODAwLCAyNzgwNSwgMjc4MTEsIAorICAgIDI3ODE3LCAyNzgyMiwgMjc4MjcsIDI3ODMxLCAyNzgzNiwgMjc4NDEsIDI3ODQ2LCAyNzg1MSwgMjc4NTYsIDI3ODYwLCAKKyAgICAyNzg2NSwgMjc4NzAsIDI3ODc1LCAyNzg3OSwgMjc4ODMsIDI3ODg3LCAyNzg5MiwgMjc5MDAsIDI3OTA2LCAyNzkxMiwgCisgICAgMjc5MTgsIDI3OTIzLCAyNzkyNywgMjc5MzAsIDI3OTM1LCAyNzkzOSwgMjc5NDQsIDI3OTQ4LCAyNzk1MywgMjc5NTcsIAorICAgIDI3OTYwLCAxNTQ4OSwgMjc5NjUsIDI3OTczLCAxOTQzOSwgMjY2MDMsIDI3OTc4LCAyNzk4MywgMjc5ODcsIDI3OTkyLCAKKyAgICAyNzk5NiwgMjgwMDAsIDI4MDA1LCAyODAwOSwgMjgwMTIsIDI4MDE1LCAyODAxOSwgMjgwMjQsIDI4MDMyLCAyODAzNiwgCisgICAgMjgwMzksIDI4MDQ0LCAyODA0OCwgMjgwNTIsIDI4MDU3LCAyODA2MiwgMjgwNjYsIDI4MDcyLCAyODA3NywgMjgwODIsIAorICAgIDI4MDg5LCAyODA5NiwgMjgxMDAsIDI4MTAzLCAyODEwOSwgMjgxMTgsIDI4MTI1LCAyODEzMywgMjgxNDAsIDI4MTQ0LCAKKyAgICAyODE0OSwgMjgxNTMsIDI4MTU5LCAyODE2NSwgMjgxNjksIDI4MTc1LCAyODE4MCwgMjgxODUsIDI4MTkyLCAyODE5OCwgCisgICAgMjgyMDQsIDI4MjEwLCAyODIxNiwgMjgyMjMsIDI4MjI5LCAyODIzNSwgMjgyNDEsIDI4MjQ3LCAyODI1MywgMjgyNTksIAorICAgIDI4MjY1LCAyODI3MiwgMjgyNzgsIDI4Mjg1LCAyODI5MSwgMjgyOTcsIDI4MzAzLCAyODMwOSwgMjgzMTUsIDI4MzIxLCAKKyAgICAyODMyNywgMjgzMzMsIDI4MzM5LCA5NzYzLCAyODM0NSwgMjgzNTAsIDI4MzU1LCAyODM1OCwgMjgzNjYsIDI4MzcxLCAKKyAgICAyODM4MCwgMjgzODYsIDI4MzkxLCAyODM5NiwgMjg0MDEsIDI4NDA1LCAyODQxMCwgMjg0MTUsIDI4NDIwLCAyODQyNSwgCisgICAgMjg0MzAsIDI4NDM3LCAyODQ0NCwgMjg0NTAsIDI4NDU2LCAyODQ2MSwgMTQ1MTAsIDI4NDY4LCAyODQ3NCwgMjg0ODEsIAorICAgIDI4NDg3LCAyODQ5MywgMjg0OTgsIDI4NTA2LCAyODUxMSwgMTQyOTQsIDI4NTE1LCAyODUyMCwgMjg1MjUsIDI4NTMxLCAKKyAgICAyODUzNiwgMjg1NDEsIDI4NTQ1LCAyODU1MCwgMjg1NTUsIDI4NTYxLCAyODU2NiwgMjg1NzEsIDI4NTc1LCAyODU4MCwgCisgICAgMjg1ODUsIDI4NTg5LCAyODU5NCwgMjg1OTksIDI4NjA0LCAyODYwOCwgMjg2MTMsIDI4NjE4LCAyODYyMywgMjg2MjcsIAorICAgIDI4NjMxLCAxMzUzMSwgMjg2MzUsIDI4NjQ0LCAyODY1MCwgMjg2NTYsIDI4NjY1LCAyODY3MywgMjg2ODIsIDI4NjkwLCAKKyAgICAyODY5NSwgMjg2OTksIDI4NzA2LCAyODcxMiwgMjg3MTYsIDI4NzE5LCAyODcyNCwgMjg3MzMsIDI4NzQxLCAyODc0NiwgCisgICAgMTQ1OCwgMjg3NTIsIDI4NzU1LCAyODc1OSwgMjA1MjQsIDIwNTMwLCAyODc2NSwgMjg3NjksIDI4NzgwLCAyODc5MSwgCisgICAgMjg4MDIsIDI4ODE0LCAyODgyMSwgMjg4MjgsIDI4ODMzLCAyODgzNywgNDM4NywgNzMzLCAxOTQzOCwgMjg4NDUsIDI4ODQ5LCAKKyAgICAyODg1NCwgMjg4NjAsIDI4ODY1LCAyODg3MSwgMjg4NzYsIDI4ODgyLCAyODg4NywgODc2NCwgMjc4NSwgMzM2NSwgMjg4OTEsIAorICAgIDI4ODk0LCAyODkwMCwgMjg5MDYsIDI4OTEyLCAyODkxOSwgMjg5MjUsIDI4OTMxLCAyODkzNywgMjg5NDMsIDI4OTQ5LCAKKyAgICAyODk1NSwgMjg5NjEsIDI4OTY3LCAyODk3MywgMjg5NzksIDI4OTg1LCAyODk5MSwgMjg5OTgsIDI5MDA0LCAyOTAxMCwgCisgICAgMjkwMTYsIDI5MDIyLCAyOTAyOCwgMjkwMzMsIDI5MDM2LCAyOTA0MywgMjkwNTEsIDI5MDU2LCAyOTA2MSwgMjkwNjcsIAorICAgIDI5MDcyLCAyOTA3NywgMjkwODEsIDI5MDg2LCAyOTA5MiwgMjkwOTcsIDI5MTAzLCAyOTEwOCwgMjkxMTQsIDI5MTE5LCAKKyAgICAyOTEyNSwgMjkxMzEsIDI5MTM1LCAyOTE0MCwgMjkxNDUsIDI5MTUwLCAyOTE1NSwgMjkxNTksIDI5MTY0LCAyOTE2OSwgCisgICAgMjkxNzQsIDI5MTgwLCAyOTE4NiwgMjkxOTIsIDI5MTk4LCAyOTIwMywgMjkyMDcsIDI5MjEwLCAyOTIxNiwgMjkyMjIsIAorICAgIDI5MjMxLCAyOTIzOSwgMjkyNDYsIDI5MjUxLCAyOTI1NSwgMjkyNTksIDI5MjY0LCAxMzM5NSwgMjkyNjksIDI5Mjc3LCAKKyAgICAyOTI4MywgMzYxMSwgMjkyODgsIDI5MjkxLCAyOTI5NSwgNjQzNiwgMjkzMDEsIDI5MzA3LCAyOTMxNCwgNjQ0NSwgMjkzMTgsIAorICAgIDI5MzI0LCAyOTMzMSwgMjkzMzcsIDI5MzQ2LCAyOTM1NCwgMjkzNjYsIDI5MzcwLCAyOTM3NywgMjkzODMsIDI5Mzg3LCAKKyAgICAyOTM5MCwgMjkzOTksIDI5NDA3LCAyOTQxMiwgMjk0MTYsIDI5NDI2LCAyOTQzNiwgMjk0NDYsIDI5NDUyLCAyOTQ1NywgCisgICAgMjk0NjcsIDI5NDcyLCAyOTQ4NSwgMjk0OTksIDI5NTEwLCAyOTUyMiwgMjk1MzQsIDI5NTQ4LCAyOTU2MSwgMjk1NzMsIAorICAgIDI5NTg1LCAxMjg1OSwgMjk1OTksIDI5NjA0LCAyOTYwOSwgMjk2MTMsIDI5NjE3LCAyOTYyMSwgMTc0MywgMjUxMjksIAorICAgIDI5NjI1LCAyOTYzMCwgMjk2MzUsIDI5NjM5LCAyOTY0MiwgMjk2NDcsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDg0NjEsIAorICAgIDI5NjY5LCAyOTY3NiwgMTM5MzUsIDI5NjgyLCAyOTY4NywgMjk2OTIsIDI5Njk2LCAyOTcwMSwgMjk3MDYsIDI4ODU1LCAKKyAgICAyOTcxMSwgMjk3MTYsIDI5NzIxLCAyOTcyNywgMjg4NjEsIDI5NzMyLCAyOTczNSwgMjk3NDIsIDI5NzUwLCAyOTc1NiwgCisgICAgMjk3NjIsIDI5NzY4LCAyOTc3OSwgMjk3ODQsIDI5NzkxLCAyOTc5OCwgMjk4MDUsIDI5ODEzLCAyOTgyMiwgMjk4MzEsIAorICAgIDI5ODM3LCAyOTg0MywgMjk4NTEsIDI4ODY2LCAyOTg1NiwgMjk4NjIsIDI5ODY4LCAyODg3MiwgMjk4NzMsIDI5ODgxLCAKKyAgICAyOTg4OSwgMjk4OTUsIDI5OTAyLCAyOTkwOCwgMjk5MTUsIDI5OTIyLCAyOTkyOCwgMjk5MzYsIDI5OTQ2LCAyOTk1MywgCisgICAgMjk5NTgsIDI5OTY0LCAyOTk2OSwgMjk5NzQsIDI5OTgxLCAyOTk5MCwgMjk5OTgsIDMwMDAzLCAzMDAwOSwgMzAwMTYsIAorICAgIDMwMDI0LCAzMDAzMCwgMzAwMzUsIDMwMDQxLCAzMDA1MCwgMjU4OTAsIDMwMDU3LCAzMDA2MSwgMzAwNjYsIDMwMDc1LCAKKyAgICAzMDA4MCwgMzAwODUsIDEwNzE0LCAzMDA5MywgMzAwOTgsIDMwMTAzLCAzMDEwNywgMzAxMTIsIDMwMTE3LCAzMDEyNCwgCisgICAgMzAxMjksIDMwMTM0LCAyODg3NywgMjg4ODMsIDMwMTQwLCAyNDczLCAyMzksIDMwMTQzLCAzMDE0NiwgMzAxNTAsIDMwMTU0LCAKKyAgICAzMDE2NCwgMzAxNzIsIDMwMTc2LCAzMDE4MywgMzAxOTAsIDMwMTk0LCAzMDE5NywgMzAyMDMsIDMwMjExLCAzMDIxOSwgCisgICAgMzAyMjMsIDMwMjI3LCAzMDIzMCwgMzAyMzcsIDMwMjQxLCAzMDI0OCwgMzAyNTYsIDMwMjYzLCAzMDI2NywgMzAyNzUsIAorICAgIDY4NCwgMjk3LCAzMDI4NywgMzAyOTIsIDMwMjk3LCAzMDMwMywgMzAzMDgsIDMwMzEzLCAzNjMyLCAzMDMxOCwgMzAzMjEsIAorICAgIDMwMzI2LCAzMDMzMSwgMzAzMzYsIDMwMzQxLCAzMDM0NiwgMzAzNTMsIDIwNjA5LCAzMDM1OCwgMzAzNjMsIDMwMzY4LCAKKyAgICAzMDM3MywgMzAzNzgsIDMwMzg0LCAzMDM4OSwgMzAzOTUsIDI5MDM5LCAzMDQwMSwgMzA0MDYsIDMwNDEyLCAzMDQxOCwgCisgICAgMzA0MjgsIDMwNDMzLCAzMDQzOCwgMzA0NDIsIDMwNDQ3LCAzMDQ1MiwgMzA0NTcsIDMwNDYyLCAzMDQ3NSwgMzA0ODAsIAorICAgIDIwNDA2LCAxNDkwNiwgMzYzOCwgMzA0ODQsIDMwNDg5LCAzMDQ5NCwgMzA1MDAsIDMwNTA1LCAzMDUxMCwgMzA1MTQsIAorICAgIDMwNTE5LCAzMDUyNCwgMzA1MzAsIDMwNTM1LCAzMDU0MCwgMzA1NDQsIDMwNTQ5LCAzMDU1NCwgMzA1NTksIDMwNTYzLCAKKyAgICAzMDU2OCwgMzA1NzMsIDMwNTc4LCAzMDU4NCwgMzA1OTAsIDMwNTk1LCAzMDU5OSwgMzA2MDQsIDMwNjA5LCAzMDYxNCwgCisgICAgMzA2MTgsIDMwNjI2LCAzMDYzMCwgMzA2MzYsIDMwNjQwLCAzMDY0NywgMTQ2OTksIDMwNjUzLCAzMDY2MCwgMzA2NjgsIAorICAgIDMwNjc1LCAzMDY4MSwgMzA2OTMsIDMwNjk5LCAzMDcwMywgMjcyNywgMzA3MDcsIDMwNzExLCAzMDIzMiwgMzA3MjAsIAorICAgIDMwNzMxLCAzMDczNiwgMzA3NDEsIDMwNzQ2LCAzMDc1MCwgMzA3NTUsIDIwNTM1LCAzMDc1OSwgMzA3NjQsIDE5NDU5LCAKKyAgICAzMDc2OCwgMzA3NzMsIDMwNzc5LCAzMDc4NCwgMzA3ODgsIDMwNzkyLCAzMDc5NSwgMzA3OTksIDMwODA1LCAzMDgxNiwgCisgICAgMzA4MjgsIDMwODMzLCAzMDgzNywgMzA4NDAsIDM0MywgMzA4NDQsIDMwODQ5LCAzMDg1NCwgMzA4NTksIDMwODY0LCAKKyAgICAzMDg2OSwgMzA4NzUsIDMwODgwLCAzMDg4NSwgMzA4OTEsIDMwODk2LCAzMDkwMiwgMzA5MDcsIDMwOTEzLCAzMDkxOCwgCisgICAgMzA5MjMsIDMwOTI4LCAzMDkzMywgMzA5MzgsIDMwOTQzLCAzMDk0OCwgMzA5NTMsIDMwOTU5LCAzMDk2NCwgMzA5NjksIAorICAgIDMwOTc0LCAzMDk3OSwgMzA5ODQsIDMwOTg5LCAzMDk5NCwgMzEwMDAsIDMxMDA2LCAzMTAxMSwgMzEwMTYsIDMxMDIxLCAKKyAgICAzMTAyNiwgMzEwMzEsIDMxMDM2LCAzMTA0MSwgMzEwNDYsIDMxMDUxLCAzMTA1NiwgMzEwNjEsIDMxMDY2LCAzMTA3MSwgCisgICAgMzEwNzYsIDMxMDgxLCAzMTA4NiwgMzEwOTEsIDMxMDk2LCAzMTEwMiwgMjYsIDMxMTA3LCAzMTExMSwgMzExMTUsIDMxMTIzLCAKKyAgICAzMTEyNywgMzExMzEsIDMxMTM0LCAzMTEzNywgMzExMzksIDMxMTQ0LCAzMTE0OCwgMzExNTMsIDMxMTU3LCAzMTE2MiwgCisgICAgMzExNjYsIDMxMTcxLCAzMTE3NSwgMzExNzgsIDMxMTgwLCAzMTE4NSwgMzExODksIDMxMjAwLCAzMTIwMywgMzEyMDUsIAorICAgIDMxMjA5LCAzMTIyMSwgMzEyMzAsIDMxMjM0LCAzMTI0MCwgMzEyNDUsIDMxMjU0LCAzMTI2MCwgMzEyNjUsIDMxMjcwLCAKKyAgICAzMTI3NCwgMzEyNzksIDMxMjg2LCAzMTI5MSwgMzEyOTcsIDMxMzAyLCAzMTMwNiwgMzEzMTMsIDIzNzAxLCAyMzcxMSwgCisgICAgMzEzMTcsIDMxMzIyLCAzMTMyNywgMzEzMzIsIDMxMzM5LCAzMTM0MywgMzEzNTAsIDY1NDQsIDMxMzU2LCAzMTM2NSwgCisgICAgMzEzNzMsIDMxMzg4LCAzMTQwMiwgMzE0MTAsIDMxNDIxLCAzMTQzMCwgMzE0MzUsIDU2ODEsIDMxNDQ1LCAzMTQ1MCwgCisgICAgMzE0NTUsIDMxNDU5LCAzMTQ2MiwgMzE0NjYsIDMxNDcxLCAzMTQ3NSwgMzE0ODIsIDMxNDg3LCAzMTQ5MiwgNzMyMCwgCisgICAgMzE1MDIsIDMxNTA0LCAzMTUwNywgMzE1MTEsIDMxNTE3LCAzMTUyMSwgMzE1MjYsIDMxNTMxLCAzMTUzNywgMzE1NDIsIAorICAgIDMxNTQ4LCAzMTU1MywgMzE1NjMsIDMxNTcyLCAzMTU4MCwgMzE1ODUsIDMxNTkxLCAzMTU5NiwgMzE2MDMsIDMxNjA3LCAKKyAgICAzMTYxNSwgMzE2MjIsIDMxNjM1LCAzMTY0MywgMzE2NDcsIDMxNjU3LCAzMTY2MiwgMzE2NjYsIDMxNjc0LCAzMTY4MiwgCisgICAgMzE2ODYsIDMxNjk1LCAzMTcwMSwgMzE3MDYsIDMxNzE0LCAzMTcyNCwgMzE3MzMsIDMxNzQyLCAzMTc1MSwgMzE3NjIsIAorICAgIDMxNzcwLCAzMTc4MSwgMzE3OTAsIDMxNzk3LCAzMTgwMywgMzE4MDgsIDMxODE5LCAzMTgyNCwgMzE4MjgsIDMxODMxLCAKKyAgICAzMTgzNSwgMzE4NDMsIDMxODQ5LCAzMTg1NywgMzE4NjQsIDMxODcwLCAzMTg3NSwgMzE4ODEsIDIzNzIsIDMxODg1LCAKKyAgICAzMTg4NywgMzE4OTIsIDMxODk3LCAzMTkwMCwgMzE5MDIsIDMxOTA2LCAzMTkwOSwgMzE5MTYsIDMxOTIwLCAzMTkyNCwgCisgICAgMzE5MjcsIDMxOTMzLCAzMTk0MywgMzE5NDgsIDMxOTU0LCAzMTk1OCwgMzE5NjMsIDMxOTc2LCAyNDA3NCwgMzE5ODIsIAorICAgIDMxOTkxLCAxNTY1NCwgMzE5OTgsIDMyMDA3LCAyOTQzMiwgMzIwMTUsIDMyMDIwLCAzMjAyNCwgMzIwMzIsIDMyMDM5LCAKKyAgICAzMjA0NCwgMzIwNDgsIDMyMDUzLCAzMjA1NywgMzIwNjUsIDMyMDcxLCAzMjA3NywgMzIwODIsIDMyMDg2LCAzMjA4OSwgCisgICAgMzIwOTQsIDMyMTA3LCAzMjEyMywgMjEwODAsIDMyMTQwLCAzMjE1MiwgMzIxNjksIDMyMTgxLCAzMjE5NSwgMjEwOTcsIAorICAgIDIxMTE2LCAzMjIwNywgMzIyMTksIDI2MzQsIDMyMjMzLCAzMjIzOCwgMzIyNDMsIDMyMjQ4LCAzMjI1MiwgMzIyNTksIAorICAgIDMyMjcxLCAzMjI3NywgMzIyODAsIDMyMjkxLCAzMjMwMiwgMjk4NDgsIDY3MCwgMzIzMDcsIDMyMzExLCAzMjMxNCwgCisgICAgMzIzMTksIDMyMzI0LCAzMjMzMCwgMzIzMzUsIDMyMzQwLCAzMjM0NiwgMzIzNTIsIDMyMzU3LCAzMjM2MSwgMzIzNjYsIAorICAgIDMyMzcxLCAzMjM3NiwgMzIzODAsIDMyMzgzLCAzMjM4OSwgMzIzOTQsIDMyMzk5LCAzMjQwNCwgMzI0MDgsIDMyNDEzLCAKKyAgICAzMjQxOSwgMzI0MjcsIDI0Mjk5LCAzMjQzMiwgMzI0MzcsIDMyNDQ0LCAzMjQ1MCwgMzI0NTYsIDMyNDYxLCAzMjQ2OSwgCisgICAgMjA2MTgsIDMyNDc2LCAzMjQ4MSwgMzI0ODYsIDMyNDkxLCAzMjQ5NSwgMzI0OTgsIDMyNTAzLCAzMjUwNywgMzI1MTEsIAorICAgIDMyNTE4LCAzMjUyNCwgMzI1MzAsIDMyNTM2LCAzMjU0MywgMzI1NDgsIDMyNTU0LCAzMTY3NywgMzI1NTgsIDMyNTYyLCAKKyAgICAzMjU2NywgMzI1ODAsIDMyNTg1LCAzMjU5MSwgMzI1OTksIDMyNjA2LCAzMjYxNCwgMzI2MjQsIDMyNjMwLCAzMjYzNiwgCisgICAgMzI2NDIsIDMyNjQ2LCAzMjY1NSwgMzI2NjAsIDMyNjY1LCA4Nzg3LCAzMjY3MCwgMzI2NzcsIDMyNjgzLCAzMjY5MywgCisgICAgMzI2OTgsIDMyNzA0LCAzMjcxMiwgMzU0MywgMzI3MTksIDMyNzI2LCAzNTQ5LCAzMjczMCwgMzI3MzUsIDMyNzQ2LCAKKyAgICAzMjc1MywgMzI3NTksIDMyNzY4LCAzMjc3MiwgMzkzMiwgMzI3NzUsIDMyNzgyLCAzMjc4OCwgMzI3OTQsIDMyODAyLCAKKyAgICAzMjgxMiwgMjY5NTgsIDMyODE5LCAzMjgyNywgMzI4MzMsIDMyODM4LCAzMjg0NCwgMzI4NDksIDMyODU1LCAzMjg1OSwgCisgICAgMzI4NjYsIDMyODcyLCAzMjg4MSwgMjQwOTQsIDMyODg4LCAzMjg5MywgMzI4OTcsIDMyOTA1LCAzMjkxMywgNzk3NCwgCisgICAgNDM3MywgMzI5MjAsIDMyOTI0LCAzMjkyOCwgMzI5MzMsIDMyOTM5LCAzMjk0NCwgMzI5NDksIDMyOTU2LCAzMDM0OSwgCisgICAgMzI5NjIsIDMyOTY3LCAzMjk3MSwgMzI5NzYsIDMyOTgwLCAzMjk4OSwgMzI5OTMsIDMyOTk5LCAzMzAwNiwgMzMwMTIsIAorICAgIDMzMDE5LCAzMzAyNCwgMzMwMzMsIDMzMDM4LCAzMzA0MiwgMzMwNDcsIDMzMDU0LCAzMzA2MiwgMzMwNzAsIDMzMDc1LCAKKyAgICAxOTUwOCwgMzMwNzksIDMzMDgyLCAzMzA4NiwgMzMwOTAsIDMzMDk0LCAzMzA5NywgMzMwOTksIDMzMTA0LCAzMzExMiwgCisgICAgMzMxMTYsIDMzMTIzLCAzMzEyNywgMzMxMzUsIDMzMTQyLCAzMzE1MiwgMzMxNTYsIDMzMTYwLCAzMzE2OCwgMzMxNzYsIAorICAgIDMzMTgyLCAzMzE4NywgMzMxOTYsIDExNjY5LCAzMzIwMiwgMzMyMTEsIDMzMjE2LCAzMzIyMywgMzMyMzEsIDMzMjM5LCAKKyAgICAzMzI0NywgMzMyNTQsIDMzMjYxLCAzMzI2OCwgMzMyNzUsIDMzMjgyLCAzMzI4NywgMzMyOTMsIDMzMzEwLCAzMzMxOCwgCisgICAgMzMzMjgsIDMzMzM2LCAzMzM0MywgMzg1LCAzMzM0NywgMzMzNTMsIDMzMzU3LCAzMzM2MiwgMzE0MjYsIDMzMzY4LCAKKyAgICAzMzM3MSwgMzMzNzUsIDMzMzgzLCAzNTU0LCAzMzM5MSwgMzMzOTcsIDMzNDAzLCAzMzQxMiwgMzM0MjIsIDMzNDI5LCAKKyAgICAzMzQzNSwgMzU2MCwgMzU2NiwgMzM0NDQsIDMzNDUxLCAzMzQ1OSwgMzM0NjQsIDMzNDY4LCAzMzQ3NSwgMzM0ODMsIAorICAgIDMzNDg5LCAzMzQ5OCwgMzM1MDgsIDMzNTE0LCAzMzUyMiwgMzM1MzEsIDMzNTM4LCAzMzU0NiwgMjAxNzUsIDMzNTUzLCAKKyAgICAzMzU2MCwgMzM1NjYsIDMzNTc2LCAzMzU4NSwgMzM1OTYsIDMzNjAwLCAzMzYxMCwgMzM2MTYsIDMzNjIzLCAzMzYzMSwgCisgICAgMzM2NDAsIDMzNjQ5LCAzMzY1OSwgMzM2NzAsIDMzNjc3LCAzMzY4MiwgMzM2ODksIDI5NjcsIDMzNjk3LCAzMzcwMywgCisgICAgMzM3MDgsIDMzNzE0LCAzMzcyMCwgMzM3MjUsIDMzNzM4LCAzMzc1MSwgMzM3NjQsIDMzNzcxLCAzMzc3NywgMzM3ODUsIAorICAgIDMzNzkwLCAzMzc5NCwgMTQzMiwgMzM3OTgsIDMzODAzLCAzMzgwOCwgMzM4MTMsIDMzODE4LCAzMzgyNCwgMzM4MjksIAorICAgIDMzODM0LCAzMzgzOSwgMzM4NDQsIDMzODQ5LCAzMzg1NCwgMzM4NTksIDMzODY1LCAzMzg3MSwgMzM4NzYsIDMzODgxLCAKKyAgICAzMzg4NywgMzM4OTIsIDMzODk3LCAzMzkwMiwgMzM5MDgsIDMzOTEzLCAzMzkxOCwgMzM5MjMsIDMzOTI4LCAzMzkzNCwgCisgICAgMzM5MzksIDMzOTQ0LCAzMzk1MCwgMzM5NTUsIDMzOTYwLCAzMzk2NSwgMzM5NzAsIDMzOTc1LCAzMzk4MSwgMzM5ODYsIAorICAgIDMzOTkyLCAzMzk5NywgMzQwMDMsIDM0MDA4LCAzNDAxMywgMzQwMTgsIDM0MDI0LCAzNDAzMCwgMzQwMzYsIDM0MDQyLCAKKyAgICAzNDA0OCwgMzQwNTQsIDM0MDYwLCAzNDA2NiwgMzQwNzEsIDM0MDc2LCAzNDA4MiwgMzQwODcsIDM0MDkyLCAzNDA5NywgCisgICAgMzQxMDIsIDM0MTA3LCAzNDExMiwgMzQxMTcsIDM0MTIzLCAzNDEyOCwgMzQxMzMsIDM0MTM5LCAzNDE0NSwgMTAxLCAKKyAgICAzNDE1MCwgMzQxNTIsIDM0MTU2LCAzNDE2MCwgMzQxNjQsIDM0MTY5LCAzNDE3MywgNzg5NSwgMzQxNzcsIDM0MTgzLCAKKyAgICA0NzM4LCAzNDE4OSwgMzQxOTIsIDM0MTk3LCAzNDIwMSwgMzQyMDYsIDM0MjEwLCAzNDIxNCwgMzQyMTksIDg1OTQsIAorICAgIDM0MjIzLCAzNDIyNywgMzQyMzEsIDEzNjIzLCAzNDIzNiwgMzQyNDAsIDM0MjQ1LCAzNDI1MCwgMzQyNTUsIDM0MjU5LCAKKyAgICAzNDI2NiwgMjQwOTgsIDM0MjcyLCAzNDI3NSwgMzQyNzksIDM0Mjg0LCAzNDI5MCwgMzQyOTQsIDM0MzAyLCAzNDMwOCwgCisgICAgMzQzMTMsIDM0MzE3LCAzNDMyMywgMzQzMjcsIDM0MzMxLCAzNDA0LCAzNDA5LCAyNzE0NCwgMzQzMzQsIDM0MzQyLCAKKyAgICAzNDM0OSwgMzQzNTMsIDM0MzYwLCAzNDM2NSwgMzMzLCAzNDM3MCwgMzQzNzQsIDM0MzgwLCAzNDM5MiwgMzQzOTgsIAorICAgIDM0NDA0LCAzNDQwOCwgMzQ0MTQsIDM0NDIzLCAzNDQyNywgMzQ0MzEsIDM0NDM2LCAzNDQ0MSwgMzQ0NDYsIDM0NDUwLCAKKyAgICAzNDQ1NCwgMzQ0NjEsIDM0NDY3LCAzNDQ3MiwgMzQ0ODcsIDM0NTAyLCAzNDUxNywgMzQ1MzMsIDM0NTUxLCA4NTQ0LCAKKyAgICAzNDU2NSwgMzQ1NzIsIDM0NTc2LCAzNDU3OSwgMzQ1ODgsIDM0NTkzLCAzNDU5NywgMzQ2MDUsIDMxNjI4LCAzNDYxMywgCisgICAgMzQ2MTcsIDM0NjI3LCAyNzExNCwgMzQ2MzgsIDM0NjQyLCAzNDY1MSwgMzQ2NTksIDgxNTIsIDEzMTYzLCAzNDY2MywgCisgICAgMzQ2NjYsIDM0NjY5LCA2NTU3LCAzODAyLCAzNDY3NCwgMzQ2ODIsIDM0Njg2LCAzNDY4OSwgMzQ2OTMsIDM0Njk4LCAKKyAgICAzNDcwMywgMzQ3MDksIDM0NzE1LCAzNDcyMCwgMzQ3MjQsIDIzOTQ2LCAzNDcyOCwgMzQ3MzIsIDM0NzM4LCAzNDc0MiwgCisgICAgNzQ0NiwgMzQ3NTEsIDM0NzU4LCAzNDc2MiwgMTAyMTAsIDM0NzY5LCAzNDc3NSwgMzQ3ODAsIDM0Nzg3LCAzNDc5NCwgCisgICAgMzQ4MDEsIDI2NDgwLCA2NDgwLCAzNDgwOCwgMzQ4MTUsIDM0ODIyLCAzNDgyOCwgMzQ4MzMsIDM0ODQwLCAzNDg1MSwgCisgICAgMzQ4NTcsIDM0ODYyLCAzNDg2NywgMzQ4NzQsIDM0ODc4LCAzNDg4MiwgMzQ4OTIsIDM0OTAzLCAzNDkwOSwgMzQ5MTQsIAorICAgIDM0OTE5LCAzNDkyNCwgMzQ5MjksIDM0OTM0LCAzNDkzOCwgMzQ5NDIsIDM0OTQ4LCAzNDk1NiwgMjI3MywgODI4LCA4NjE2LCAKKyAgICA4NjIxLCA4NjI3LCAzNDk2NSwgODYzMiwgODYzNywgODY0MywgMzQ5NzAsIDM0OTgwLCAzNDk4NCwgODY0OCwgMzQ5ODksIAorICAgIDM0OTkyLCAzNDk5NywgMzUwMDEsIDM1MDA2LCAzNTAxMSwgMzUwMTgsIDM1MDI1LCAzNTAzMywgODU1NywgMzUwNDAsIAorICAgIDM1MDQzLCAzNTA0OSwgMzUwNTksIDQ0MDcsIDM1MDY4LCAzNTA3MiwgMzUwODAsIDM1MDg0LCAzNTA5NCwgMzUxMDAsIAorICAgIDM1MTExLCAzNTExNywgMzUxMjMsIDM1MTI4LCAzNTEzNCwgMzUxNDAsIDM1MTQ2LCAzNTE1MSwgMzUxNTQsIDM1MTYxLCAKKyAgICAzNTE2NywgMzUxNzIsIDM1MTc5LCAzNTE4NiwgMzUxOTAsIDM1MjAwLCAzNTIxMywgMzUyMjIsIDM1MjMxLCAzNTI0MiwgCisgICAgMzUyNTUsIDM1MjY2LCAzNTI3NSwgMzUyODYsIDM1MjkxLCAzNTMwMCwgMzUzMDUsIDg2NTMsIDM1MzExLCAzNTMxOCwgCisgICAgMzUzMjYsIDM1MzMxLCAzNTMzNSwgMzUzNDIsIDM1MzQ5LCAzNzU3LCAyMSwgMzUzNTMsIDM1MzU4LCAxNDk1OCwgMzUzNjIsIAorICAgIDM1MzY1LCAzNTM2OCwgMjYwMDEsIDM1MzcyLCAyNjQ4OSwgMzUzODAsIDM1Mzg0LCAzNTM4OCwgMzUzOTEsIDM1Mzk3LCAKKyAgICAzNTQwMywgMzU0MTEsIDM1NDE3LCAzNTQyNCwgMjU5OTMsIDM1NDI4LCAyNjE3OCwgMzU0MzIsIDM1NDQxLCAzNTQ0NywgCisgICAgMzU0NTMsIDM1NDU4LCAzNTQ2MiwgMzU0NjgsIDM1NDcyLCAzNTQ3NSwgMzU0ODMsIDM1NDkxLCAyNDE1NiwgMzU0OTcsIAorICAgIDM1NTA0LCAzNTUxMCwgMzU1MTUsIDM1NTIwLCAzNTUyNCwgMzU1MzAsIDM1NTM1LCAzNTU0MSwgMzk3MywgNzU1LCAzNTU0OCwgCisgICAgMzU1NTIsIDM1NTU1LCAxMzUxMywgMzU1NjcsIDMzNTI3LCAzNTU3OCwgMzU1ODEsIDM1NTg4LCAzNTU5NCwgMzU1OTgsIAorICAgIDM1NjA0LCAzNTYwOSwgMzU2MTUsIDM1NjIwLCAzNTYyNSwgMzU2MjksIDM1NjMzLCAzNTYzOCwgMzU2NDMsIDM1NjUzLCAKKyAgICAzNTY1OSwgMzU2NzIsIDM1Njc4LCAzNTY4NSwgMzU2OTAsIDM1Njk2LCAzNTcwMSwgMTQ4NDQsIDE0MzUsIDEwMDIsIAorICAgIDI4OTc0LCAyODk4MCwgMzU3MDYsIDI4OTg2LCAyODk5OSwgMjkwMDUsIDI5MDExLCAzNTcxMiwgMjkwMTcsIDI5MDIzLCAKKyAgICAzNTcxOCwgMzU3MjQsIDE0LCAzNTczMiwgMzU3MzksIDM1NzQzLCAzNTc0NywgMzU3NTUsIDI5NzM3LCAzNTc1OSwgMzU3NjMsIAorICAgIDM1NzcwLCAzNTc3NSwgMzU3NzksIDM1Nzg0LCAzNTc5MCwgMzU3OTUsIDM1ODAxLCAzNTgwNiwgMzU4MTAsIDM1ODE0LCAKKyAgICAzNTgxOCwgMzU4MjMsIDM1ODI3LCAzNTgzMiwgMzU4MzYsIDM1ODQzLCAzNTg0OCwgMzU4NTIsIDM1ODU3LCAzNTg2MSwgCisgICAgMzU4NjYsIDM1ODcwLCAzNTg3NSwgMzU4ODEsIDEzNzMzLCAxMzczOCwgMzU4ODYsIDM1ODkwLCAzNTg5MywgMzU4OTcsIAorICAgIDM1OTAyLCAzNTkwNiwgMzU5MTIsIDM1OTE5LCAzNTkyNCwgMzU5MzQsIDM1OTM5LCAzNTk0NywgMzU5NTEsIDM1OTU0LCAKKyAgICAyOTc1MiwgMzU5NTgsIDQwMjYsIDM1OTYzLCAzNTk2OCwgMzU5NzIsIDM1OTc3LCAzNTk4MSwgMzU5ODYsIDExNjg3LCAKKyAgICAzNTk5NywgMzYwMDEsIDM2MDA0LCAzNjAwOSwgMzYwMTMsIDM2MDE3LCAzNjAyMCwgMzYwMjQsIDY1NzYsIDExNzAzLCAKKyAgICAzNjAyNywgMzYwMzAsIDM2MDM1LCAzNjAzOSwgMzYwNDgsIDM2MDY0LCAzNjA4MCwgMzYwOTAsIDI1OTAwLCAzNjA5NywgCisgICAgMzYxMDEsIDM2MTA2LCAzNjExMSwgMzYxMTUsIDM2MTE5LCAzMzY0NCwgMzYxMjUsIDM2MTMwLCAzNjEzNCwgMzYxNDEsIAorICAgIDM2MTQ2LCAzNjE1MCwgMzYxNTQsIDI0OTU4LCAzNjE2MCwgMTk2MDMsIDM2MTY1LCAzNjE3MiwgMzYxODAsIDM2MTg2LCAKKyAgICAzNjE5MywgMzYyMDEsIDM2MjA3LCAzNjIxMSwgMzYyMTcsIDM2MjI1LCAzNjIyOSwgMzYyMzgsIDc4NzYsIDM2MjQ2LCAKKyAgICAzNjI1MCwgMzYyNTgsIDM2MjY1LCAzNjI3MCwgMzYyNzUsIDM2Mjc5LCAzNjI4MiwgMzYyODYsIDM2Mjg5LCAzNjI5MywgCisgICAgMzYzMDAsIDM2MzA1LCAzNjMxMSwgMjQzNzcsIDI5MDM0LCAzNjMxNSwgMzYzMjIsIDM2MzI4LCAzNjMzNCwgMzYzMzksIAorICAgIDM2MzQyLCAzNjM0NCwgMzYzNTEsIDM2MzU4LCAzNjM2NCwgMzYzNjgsIDM2MzcxLCAzNjM3NSwgMzYzNzksIDM2MzgzLCAKKyAgICAzNjM4OCwgMzYzOTIsIDM2Mzk2LCAzNjM5OSwgMzY0MDMsIDM2NDE3LCAyMTE0NiwgMzY0MzYsIDM2NDQ5LCAzNjQ2MiwgCisgICAgMzY0NzUsIDIxMTY0LCAzNjQ5MCwgODg0NiwgMzY1MDUsIDM2NTExLCAzNjUxNSwgMzY1MTksIDM2NTI2LCAzNjUzMSwgCisgICAgMzY1MzUsIDM2NTQyLCAzNjU0OCwgMzY1NTMsIDM2NTU5LCAzNjU2OSwgMzY1ODEsIDM2NTkyLCAzNjU5NywgMzY2MDQsIAorICAgIDM2NjA4LCAzNjYxMiwgMzY2MTUsIDE0MTI5LCAzNjA1LCAzNjYyMywgMTM3NjAsIDM2NjM2LCAzNjY0MywgMzY2NDcsIAorICAgIDM2NjUxLCAzNjY1NiwgMzY2NjEsIDM2NjY3LCAzNjY3MSwgMzY2NzUsIDM2Njc4LCA2MTg4LCAxMzc3MSwgMzY2ODMsIAorICAgIDM2Njg3LCAzNjY5MywgMzY3MDIsIDM2NzA3LCAzMzUwNCwgMzY3MTMsIDM2NzE4LCAzNjcyMiwgMzY3MjcsIDM2NzM0LCAKKyAgICAzNjczOCwgMzY3NDEsIDEyODI0LCAzNjc0NiwgMzY3NTMsIDEwMDksIDM2NzU3LCAzNjc2MiwgMzY3NjcsIDM2NzczLCAKKyAgICAzNjc3OCwgMzY3ODMsIDM2Nzg3LCAzNjc5NywgMzY4MDIsIDM2ODA4LCAzNjgxMywgMzY4MTksIDM2ODI0LCAzNjgzMCwgCisgICAgMzY4NDAsIDM2ODQ1LCAzNjg1MCwgMzY4NTQsIDU2ODMsIDU2OTUsIDM2ODU5LCAzNjg2MiwgMzY4NjksIDM2ODc1LCAKKyAgICAzMTc5MywgMzE4MDAsIDM2ODg0LCAzNjg4OCwgMjk4MDAsIDM2ODk2LCAzNjkwNywgMzY5MTUsIDMzNjkyLCAzNjkyMiwgCisgICAgMzY5MjcsIDM2OTMyLCAzNjk0MywgMzY5NTAsIDM2OTYxLCAyOTgyNCwgMTk2MDksIDM2OTY5LCA3MjIsIDM2OTc0LCAKKyAgICAzNjk4MCwgMjU5ODQsIDM2OTg2LCAzNjk5MSwgMzcwMDEsIDM3MDEwLCAzNzAxNywgMzcwMjMsIDM3MDI3LCAzNzAzMCwgCisgICAgMzcwMzcsIDM3MDQzLCAzNzA1MCwgMzcwNTYsIDM3MDY2LCAzNzA3NCwgMzcwODAsIDM3MDg2LCAzNzA5MSwgMzcwOTUsIAorICAgIDM3MTAyLCAzNzEwOCwgMzcxMTUsIDM2Mzg0LCA1MzAsIDEyMTEyLCAzNzEyMSwgMzcxMjYsIDM3MTI5LCAzNzEzNSwgCisgICAgMzcxNDMsIDEzNjQsIDM3MTQ4LCAzNzE1MiwgMzcxNTcsIDM3MTY0LCAzNzE3MCwgMzcxNzQsIDM3MTc5LCAzNzE4OCwgCisgICAgMzcxOTUsIDM3MjA1LCAzNzIxMSwgMjYwMTksIDM3MjI4LCAzNzIzNywgMzcyNDUsIDM3MjUxLCAzNzI1NiwgMzcyNjMsIAorICAgIDM3MjY5LCAzNzI3NywgMzcyODYsIDM3Mjk0LCAzNzI5OCwgMzczMDMsIDM3MzExLCAyOTgzMywgMzczMTcsIDM3MzM2LCAKKyAgICAxNDA2MiwgMzczNTAsIDM3MzY2LCAzNzM4MCwgMzczODYsIDM3MzkxLCAzNzM5NiwgMzc0MDEsIDM3NDA3LCAyOTgzOSwgCisgICAgMzc0MTIsIDM3NDE5LCAzNzQyNCwgMzc0MjgsIDM0MSwgMjg3OCwgMzc0MzUsIDM3NDQwLCAzNzQ0NSwgMjUyNzUsIDM3MjY2LCAKKyAgICAzNzQ0OSwgMzc0NTQsIDM3NDYyLCAzNzQ2NiwgMzc0NjksIDM3NDc1LCAzNzQ3OSwgMjYwNzQsIDM3NDgyLCAzNzQ4NywgCisgICAgMzc0OTEsIDM3NDk0LCAzNzQ5OSwgMzc1MDMsIDM3NTA4LCAzNzUxMywgMzc1MTcsIDM3NTIyLCAzNzUyNiwgMzc1MzAsIAorICAgIDE5MzQ2LCAxOTM1NywgMzc1MzQsIDM3NTM5LCAzNzU0NSwgMjQ5MTUsIDM3NTUwLCAzNzU1NCwgMTk0MjUsIDE0MjgwLCAKKyAgICAzNzU1NywgMzc1NjIsIDM3NTY3LCAzNzU3MiwgMzc1NzcsIDM3NTgyLCAzNzU4NywgMzc1OTIsIDQ0MCwgNDMsIDI5MDUyLCAKKyAgICAyOTA1NywgMjkwNjIsIDI5MDY4LCAyOTA3MywgMjkwNzgsIDM3NTk3LCAyOTA4MiwgMzc2MDEsIDM3NjA1LCAyOTA4NywgCisgICAgMjkwOTMsIDM3NjA5LCAyOTEwNCwgMjkxMDksIDM3NjE3LCAzNzYyMiwgMjkxMTUsIDM3NjI3LCAzNzYzMiwgMzc2MzcsIAorICAgIDM3NjQyLCAzNzY0OCwgMzc2NTQsIDM3NjYwLCAyOTEzMiwgMzc2NzMsIDM3Njc5LCAyOTEzNiwgMzc2ODMsIDI5MTQxLCAKKyAgICAzNzY4OCwgMjkxNDYsIDI5MTUxLCAzNzY5MSwgMzc2OTYsIDM3NzAwLCAyODc5NSwgMzc3MDYsIDExOTExLCAzNzcxMywgCisgICAgMzc3MTgsIDI5MTU2LCAzNzcyMiwgMzc3MjcsIDM3NzMyLCAzNzczNywgMzc3NDEsIDM3NzQ2LCAzNzc1MSwgMzc3NTcsIAorICAgIDM3NzYyLCAzNzc2NywgMzc3NzMsIDM3Nzc5LCAzNzc4NCwgMzc3ODgsIDM3NzkzLCAzNzc5OCwgMzc4MDMsIDM3ODA3LCAKKyAgICAzNzgxMiwgMzc4MTcsIDM3ODIyLCAzNzgyOCwgMzc4MzQsIDM3ODQwLCAzNzg0NSwgMzc4NDksIDM3ODU0LCAzNzg1OCwgCisgICAgMjkxNjAsIDI5MTY1LCAyOTE3MCwgMzc4NjIsIDM3ODY2LCAyOTE3NSwgMjkxODEsIDI5MTg3LCAyOTE5OSwgMzc4NzgsIAorICAgIDIzOTgzLCAzNzg4MiwgMzc4ODYsIDM3ODkxLCAzNzg5NiwgMzc5MDEsIDM3OTA1LCAzNzkwOSwgMzc5MTksIDM3OTI0LCAKKyAgICAzNzkyOSwgMzc5MzMsIDM3OTM3LCAzNzk0MCwgMzc5NDgsIDI5MjQ3LCAzNzk1MywgMTQ0MiwgMzc5NTksIDM3OTY3LCAKKyAgICAzNzk3NiwgMzc5ODAsIDM3OTg4LCAzNzk5NCwgMzgwMDIsIDM4MDE4LCAzODAyMywgMzgwMzgsIDI5Mjg0LCAxNzEyLCAKKyAgICAxMDM3NSwgMzgwNDIsIDI5MjQsIDM4MDU0LCAzODA1NSwgMzgwNjMsIDM4MDcwLCAzODA3NSwgMzgwODIsIDM4MDg3LCAKKyAgICA3NzQ2LCAxMDkwLCA4Njc1LCAzODA5NCwgMzgwOTksIDM4MTAyLCAzODEwNSwgMzgxMTQsIDEyNzUsIDM4MTE5LCAzNjUzMiwgCisgICAgMzgxMjYsIDM4MTMxLCAyMDU4MywgMjUxMSwgMzgxMzUsIDkwOTQsIDM4MTQ1LCAzODE1MSwgMjI5MSwgMjMwMSwgMzgxNjAsIAorICAgIDM4MTY5LCAzODE3OSwgMzgxOTAsIDMyMzUsIDMxOTQ0LCA4NzI3LCAzNzM1LCAxNDg4MiwgMTI4MCwgMzgxOTUsIDM4MjAzLCAKKyAgICAzODIxMCwgMzgyMTUsIDM4MjE5LCAzODIyMywgMjE5MzAsIDg3NTQsIDM4MjMxLCAzODI0MCwgMzgyNDksIDM4MjU3LCAKKyAgICAzODI2NCwgMzgyNjksIDM4MjgyLCAzODI5NSwgMzgzMDcsIDM4MzE5LCAzODMzMSwgMzgzNDQsIDM4MzU1LCAzODM2NiwgCisgICAgMzgzNzYsIDM4Mzg0LCAzODM5MiwgMzg0MDQsIDM4NDE2LCAzODQyNywgMzg0MzYsIDM4NDQ0LCAzODQ1MSwgMzg0NjMsIAorICAgIDM4NDcwLCAzODQ3OSwgMzg0ODYsIDM4NDk5LCAzODUwNCwgMzg1MTQsIDM4NTE5LCAzODUyNSwgMzg1MzAsIDM0NzU5LCAKKyAgICAzODUzNCwgMzg1NDEsIDM4NTQ1LCAzODU1MiwgMzg1NjAsIDI0NzIsIDM4NTY3LCAzODU3OCwgMzg1ODgsIDM4NTk3LCAKKyAgICAzODYwNSwgMzg2MTUsIDM4NjIzLCAzODYzMywgMzg2NDIsIDM4NjQ3LCAzODY1MywgMzg2NTksIDM4NjcwLCAzODY4MCwgCisgICAgMzg2ODksIDM4Njk4LCAzODcwOCwgMzg3MTYsIDM4NzI1LCAzODczMCwgMzg3MzUsIDM4NzQwLCAxNjY4LCAzNywgMzg3NDgsIAorICAgIDM4NzU2LCAzODc2NywgMzg3NzgsIDE0NTYzLCAzODc4OCwgMzg3OTUsIDM4ODAxLCAzODgwNiwgMzg4MTAsIDM4ODIxLCAKKyAgICAzODgzMSwgMzg4NDAsIDM4ODUxLCAxNDkzMSwgMTQ5MzYsIDM4ODU2LCAzODg2NSwgMzg4NzAsIDM4ODgwLCAzODg4NSwgCisgICAgMzg4OTMsIDM4OTAxLCAzODkwOCwgMzg5MTQsIDU1MzYsIDEwMzgsIDM4OTE4LCAzODkyNCwgMzg5MjksIDM4OTMyLCAyMDc1LCAKKyAgICAzNjY0OCwgMzg5NDAsIDM4OTQ0LCAzODk0NywgMTQ3NSwgMzg5NTMsIDEyMjYxLCAxMjg1LCAzODk1OCwgMzg5NzEsIAorICAgIDM4OTg1LCAyNTk3LCAzOTAwMywgMzkwMTUsIDM5MDI3LCAyNjExLCAyNjI4LCAzOTA0MSwgMzkwNTQsIDI2NDMsIDM5MDY4LCAKKyAgICAzOTA4MCwgMjY1OCwgMzkwOTQsIDEyOTEsIDEyOTcsIDEzMDMsIDkwMTIsIDM5MDk5LCAzOTEwNCwgMzkxMDksIDM5MTEzLCAKKyAgICAzOTEyOCwgMzkxNDMsIDM5MTU4LCAzOTE3MywgMzkxODgsIDM5MjAzLCAzOTIxOCwgMzkyMzMsIDM5MjQ4LCAzOTI2MywgCisgICAgMzkyNzgsIDM5MjkzLCAzOTMwOCwgMzkzMjMsIDM5MzM4LCAzOTM1MywgMzkzNjgsIDM5MzgzLCAzOTM5OCwgMzk0MTMsIAorICAgIDM5NDI4LCAzOTQ0MywgMzk0NTgsIDM5NDczLCAzOTQ4OCwgMzk1MDMsIDM5NTE4LCAzOTUzMywgMzk1NDgsIDM5NTYzLCAKKyAgICAzOTU3OCwgMzk1OTMsIDM5NjA4LCAzOTYyMywgMzk2MzgsIDM5NjUzLCAzOTY2OCwgMzk2ODMsIDM5Njk4LCAzOTcxMywgCisgICAgMzk3MjgsIDM5NzQzLCAzOTc1OCwgMzk3NzMsIDM5Nzg4LCAzOTgwMywgMzk4MTgsIDM5ODMzLCAzOTg0OCwgMzk4NjMsIAorICAgIDM5ODc4LCAzOTg5MywgMzk5MDgsIDM5OTIzLCAzOTkzOCwgMzk5NTMsIDM5OTY4LCAzOTk4MywgMzk5OTgsIDQwMDEzLCAKKyAgICA0MDAyOCwgNDAwNDMsIDQwMDU4LCA0MDA3MywgNDAwODgsIDQwMTAzLCA0MDExOCwgNDAxMzMsIDQwMTQ4LCA0MDE2MywgCisgICAgNDAxNzgsIDQwMTkzLCA0MDIwOCwgNDAyMjMsIDQwMjM4LCA0MDI1MywgNDAyNjgsIDQwMjgzLCA0MDI5OCwgNDAzMTMsIAorICAgIDQwMzI4LCA0MDM0MywgNDAzNTgsIDQwMzczLCA0MDM4OCwgNDA0MDMsIDQwNDE4LCA0MDQzMywgNDA0NDgsIDQwNDYzLCAKKyAgICA0MDQ3OCwgNDA0OTMsIDQwNTA4LCA0MDUyMywgNDA1MzgsIDQwNTUzLCA0MDU2OCwgNDA1ODMsIDQwNTk4LCA0MDYxMywgCisgICAgNDA2MjgsIDQwNjQzLCA0MDY1OCwgNDA2NzMsIDQwNjg4LCA0MDcwMywgNDA3MTgsIDQwNzMzLCA0MDc0OCwgNDA3NjMsIAorICAgIDQwNzc4LCA0MDc5MywgNDA4MDgsIDQwODIzLCA0MDgzOCwgNDA4NTMsIDQwODY4LCA0MDg4MywgNDA4OTgsIDQwOTEzLCAKKyAgICA0MDkyOCwgNDA5NDMsIDQwOTU4LCA0MDk3MywgNDA5ODgsIDQxMDAzLCA0MTAxOCwgNDEwMzMsIDQxMDQ4LCA0MTA2MywgCisgICAgNDEwNzgsIDQxMDkzLCA0MTEwOCwgNDExMjMsIDQxMTM4LCA0MTE1MywgNDExNjgsIDQxMTgzLCA0MTE5OCwgNDEyMTMsIAorICAgIDQxMjI4LCA0MTI0MywgNDEyNTgsIDQxMjczLCA0MTI4OCwgNDEzMDMsIDQxMzE4LCA0MTMzMywgNDEzNDgsIDQxMzYzLCAKKyAgICA0MTM3OCwgNDEzOTMsIDQxNDA4LCA0MTQyMywgNDE0MzgsIDQxNDUzLCA0MTQ2OCwgNDE0ODMsIDQxNDk4LCA0MTUxMywgCisgICAgNDE1MjgsIDQxNTQzLCA0MTU1OCwgNDE1NzMsIDQxNTg4LCA0MTYwMywgNDE2MTgsIDQxNjMzLCA0MTY0OCwgNDE2NjMsIAorICAgIDQxNjc4LCA0MTY5MywgNDE3MDgsIDQxNzIzLCA0MTczOCwgNDE3NTMsIDQxNzY4LCA0MTc4MywgNDE3OTgsIDQxODEzLCAKKyAgICA0MTgyOCwgNDE4NDMsIDQxODU4LCA0MTg3MywgNDE4ODgsIDQxOTAzLCA0MTkxOCwgNDE5MzMsIDQxOTQ4LCA0MTk2MywgCisgICAgNDE5NzgsIDQxOTkzLCA0MjAwOCwgNDIwMjMsIDQyMDM4LCA0MjA1MywgNDIwNjgsIDQyMDgzLCA0MjA5OCwgNDIxMTMsIAorICAgIDQyMTI4LCA0MjE0MywgNDIxNTgsIDQyMTczLCA0MjE4OCwgNDIyMDMsIDQyMjE4LCA0MjIzMywgNDIyNDgsIDQyMjYzLCAKKyAgICA0MjI3OCwgNDIyOTMsIDQyMzA4LCA0MjMyMywgNDIzMzgsIDQyMzUzLCA0MjM2OCwgNDIzODMsIDQyMzk4LCA0MjQxMywgCisgICAgNDI0MjgsIDQyNDQzLCA0MjQ1OCwgNDI0NzMsIDQyNDg4LCA0MjUwMywgNDI1MTgsIDQyNTMzLCA0MjU0OCwgNDI1NjMsIAorICAgIDQyNTc4LCA0MjU5MywgNDI2MDgsIDQyNjIzLCA0MjYzOCwgNDI2NTMsIDQyNjY4LCA0MjY4MywgNDI2OTgsIDQyNzEzLCAKKyAgICA0MjcyOCwgNDI3NDMsIDQyNzU4LCA0Mjc3MywgNDI3ODgsIDQyODAzLCA0MjgxOCwgNDI4MzMsIDQyODQ4LCA0Mjg2MywgCisgICAgNDI4NzgsIDQyODkzLCA0MjkwOCwgNDI5MjMsIDQyOTM4LCA0Mjk1MywgNDI5NjgsIDQyOTgzLCA0Mjk5OCwgNDMwMTMsIAorICAgIDQzMDI4LCA0MzA0MywgNDMwNTgsIDQzMDczLCA0MzA4OCwgNDMxMDMsIDQzMTE4LCA0MzEzMywgNDMxNDgsIDQzMTYzLCAKKyAgICA0MzE3OCwgNDMxOTMsIDQzMjA4LCA0MzIyMywgNDMyMzgsIDQzMjUzLCA0MzI2OCwgNDMyODMsIDQzMjk4LCA0MzMxMywgCisgICAgNDMzMjgsIDQzMzQzLCA0MzM1OCwgNDMzNzMsIDQzMzg4LCA0MzQwMywgNDM0MTgsIDQzNDMzLCA0MzQ0OCwgNDM0NjMsIAorICAgIDQzNDc4LCA0MzQ5MywgNDM1MDgsIDQzNTIzLCA0MzUzOCwgNDM1NTMsIDQzNTY4LCA0MzU4MywgNDM1OTgsIDQzNjEzLCAKKyAgICA0MzYyOCwgNDM2NDMsIDQzNjU4LCA0MzY3MywgNDM2ODgsIDQzNzAzLCA0MzcxOCwgNDM3MzMsIDQzNzQ4LCA0Mzc2MywgCisgICAgNDM3NzgsIDQzNzkzLCA0MzgwOCwgNDM4MjMsIDQzODM4LCA0Mzg1MywgNDM4NjgsIDQzODgzLCA0Mzg5OCwgNDM5MTMsIAorICAgIDQzOTI4LCA0Mzk0MywgNDM5NTgsIDQzOTczLCA0Mzk4OCwgNDQwMDMsIDQ0MDE4LCA0NDAzMywgNDQwNDgsIDQ0MDYzLCAKKyAgICA0NDA3OCwgNDQwOTMsIDQ0MTA4LCA0NDEyMywgNDQxMzgsIDQ0MTUzLCA0NDE2OCwgNDQxODMsIDQ0MTk4LCA0NDIxMywgCisgICAgNDQyMjgsIDQ0MjQzLCA0NDI1OCwgNDQyNzMsIDQ0Mjg4LCA0NDMwMywgNDQzMTgsIDQ0MzMzLCA0NDM0OCwgNDQzNjMsIAorICAgIDQ0Mzc4LCA0NDM5MywgNDQ0MDgsIDQ0NDIzLCA0NDQzOCwgNDQ0NTMsIDQ0NDY4LCA0NDQ4MywgNDQ0OTgsIDQ0NTEzLCAKKyAgICA0NDUyOCwgNDQ1NDMsIDQ0NTU4LCA0NDU3MywgNDQ1ODgsIDQ0NjAzLCA0NDYxOCwgNDQ2MzMsIDQ0NjQ4LCA0NDY2MywgCisgICAgNDQ2NzgsIDQ0NjkzLCA0NDcwOCwgNDQ3MjMsIDQ0NzM4LCA0NDc1MywgNDQ3NjgsIDQ0NzgzLCA0NDc5OCwgNDQ4MTMsIAorICAgIDQ0ODI4LCA0NDg0MywgNDQ4NTgsIDQ0ODczLCA0NDg4OCwgNDQ5MDMsIDQ0OTE4LCA0NDkzMywgNDQ5NDgsIDQ0OTYzLCAKKyAgICA0NDk3OCwgNDQ5OTMsIDQ1MDA4LCA0NTAyMywgNDUwMzgsIDQ1MDUzLCA0NTA2OCwgNDUwODMsIDQ1MDk4LCA0NTExMywgCisgICAgNDUxMjgsIDQ1MTQzLCA0NTE1OCwgNDUxNzMsIDQ1MTg4LCA0NTIwMywgNDUyMTgsIDQ1MjMzLCA0NTI0OCwgNDUyNjMsIAorICAgIDQ1Mjc4LCA0NTI5MywgNDUzMDgsIDQ1MzIzLCA0NTMzOCwgNDUzNTMsIDQ1MzY4LCA0NTM4MywgNDUzOTgsIDQ1NDEzLCAKKyAgICA0NTQyOCwgNDU0NDMsIDQ1NDU4LCA0NTQ3MywgNDU0ODgsIDQ1NTAzLCA0NTUxOCwgNDU1MzMsIDQ1NTQ4LCA0NTU2MywgCisgICAgNDU1NzgsIDQ1NTkzLCA0NTYwOCwgNDU2MjMsIDQ1NjM4LCA0NTY1MywgNDU2NjgsIDQ1NjgzLCA0NTY5OCwgNDU3MTMsIAorICAgIDQ1NzI4LCA0NTc0MywgNDU3NTgsIDQ1NzczLCA0NTc4OCwgNDU4MDMsIDQ1ODE4LCA0NTgzMywgNDU4NDgsIDQ1ODYzLCAKKyAgICA0NTg3OCwgNDU4OTMsIDQ1OTA4LCA0NTkyMywgNDU5MzgsIDQ1OTUzLCA0NTk2OCwgNDU5ODMsIDQ1OTk4LCA0NjAxMywgCisgICAgNDYwMjgsIDQ2MDQzLCA0NjA1OCwgNDYwNzMsIDQ2MDg4LCA0NjEwMywgNDYxMTgsIDQ2MTMzLCA0NjE0OCwgNDYxNjMsIAorICAgIDQ2MTc4LCA0NjE5MywgNDYyMDgsIDQ2MjIzLCA0NjIzOCwgNDYyNTMsIDQ2MjY4LCA0NjI4MywgNDYyOTgsIDQ2MzEzLCAKKyAgICA0NjMyOCwgNDYzNDMsIDQ2MzU4LCA0NjM3MywgNDYzODgsIDQ2NDAzLCA0NjQxOCwgNDY0MzMsIDQ2NDQ4LCA0NjQ2MywgCisgICAgNDY0NzgsIDQ2NDkzLCA0NjUwOCwgNDY1MjMsIDQ2NTM4LCA0NjU1MywgNDY1NjgsIDQ2NTgzLCA0NjU5OCwgNDY2MTMsIAorICAgIDQ2NjI4LCA0NjY0MywgNDY2NTgsIDQ2NjczLCA0NjY4OCwgNDY3MDMsIDQ2NzE4LCA0NjczMywgNDY3NDgsIDQ2NzYzLCAKKyAgICA0Njc3OCwgNDY3OTMsIDQ2ODA4LCA0NjgyMywgNDY4MzgsIDQ2ODUzLCA0Njg2OCwgNDY4ODMsIDQ2ODk5LCA0NjkxNSwgCisgICAgNDY5MzEsIDQ2OTQ3LCA0Njk2MywgNDY5NzksIDQ2OTk1LCA0NzAxMSwgNDcwMjcsIDQ3MDQzLCA0NzA1OSwgNDcwNzUsIAorICAgIDQ3MDkxLCA0NzEwNywgNDcxMjMsIDQ3MTM5LCA0NzE1NSwgNDcxNzEsIDQ3MTg3LCA0NzIwMywgNDcyMTksIDQ3MjM1LCAKKyAgICA0NzI1MSwgNDcyNjcsIDQ3MjgzLCA0NzI5OSwgNDczMTUsIDQ3MzMxLCA0NzM0NywgNDczNjMsIDQ3Mzc5LCA0NzM5NSwgCisgICAgNDc0MTEsIDQ3NDI3LCA0NzQ0MywgNDc0NTksIDQ3NDc1LCA0NzQ5MSwgNDc1MDcsIDQ3NTIzLCA0NzUzOSwgNDc1NTUsIAorICAgIDQ3NTcxLCA0NzU4NywgNDc2MDMsIDQ3NjE5LCA0NzYzNSwgNDc2NTEsIDQ3NjY3LCA0NzY4MywgNDc2OTksIDQ3NzE1LCAKKyAgICA0NzczMSwgNDc3NDcsIDQ3NzYzLCA0Nzc3OSwgNDc3OTUsIDQ3ODExLCA0NzgyNywgNDc4NDMsIDQ3ODU5LCA0Nzg3NSwgCisgICAgNDc4OTEsIDQ3OTA3LCA0NzkyMywgNDc5MzksIDQ3OTU1LCA0Nzk3MSwgNDc5ODcsIDQ4MDAzLCA0ODAxOSwgNDgwMzUsIAorICAgIDQ4MDUxLCA0ODA2NywgNDgwODMsIDQ4MDk5LCA0ODExNSwgNDgxMzEsIDQ4MTQ3LCA0ODE2MywgNDgxNzksIDQ4MTk1LCAKKyAgICA0ODIxMSwgNDgyMjcsIDQ4MjQzLCA0ODI1OSwgNDgyNzUsIDQ4MjkxLCA0ODMwNywgNDgzMjMsIDQ4MzM5LCA0ODM1NSwgCisgICAgNDgzNzEsIDQ4Mzg3LCA0ODQwMywgNDg0MTksIDQ4NDM1LCA0ODQ1MSwgNDg0NjcsIDQ4NDgzLCA0ODQ5OSwgNDg1MTUsIAorICAgIDQ4NTMxLCA0ODU0NywgNDg1NjMsIDQ4NTc5LCA0ODU5NSwgNDg2MTEsIDQ4NjI3LCA0ODY0MywgNDg2NTksIDQ4Njc1LCAKKyAgICA0ODY5MSwgNDg3MDcsIDQ4NzIzLCA0ODczOSwgNDg3NTUsIDQ4NzcxLCA0ODc4NywgNDg4MDMsIDQ4ODE5LCA0ODgzNSwgCisgICAgNDg4NTEsIDQ4ODY3LCA0ODg4MywgNDg4OTksIDQ4OTE1LCA0ODkzMSwgNDg5NDcsIDQ4OTYzLCA0ODk3OSwgNDg5OTUsIAorICAgIDQ5MDExLCA0OTAyNywgNDkwNDMsIDQ5MDU5LCA0OTA3NSwgNDkwOTEsIDQ5MTA3LCA0OTEyMywgNDkxMzksIDQ5MTU1LCAKKyAgICA0OTE3MSwgNDkxODcsIDQ5MjAzLCA0OTIxOSwgNDkyMzUsIDQ5MjUxLCA0OTI2NywgNDkyODMsIDQ5Mjk5LCA0OTMxNSwgCisgICAgNDkzMzEsIDQ5MzQ3LCA0OTM2MywgNDkzNzksIDQ5Mzk1LCA0OTQxMSwgNDk0MjcsIDQ5NDQzLCA0OTQ1OSwgNDk0NzUsIAorICAgIDQ5NDkxLCA0OTUwNywgNDk1MjMsIDQ5NTM5LCA0OTU1NSwgNDk1NzEsIDQ5NTg3LCA0OTYwMywgNDk2MTksIDQ5NjM1LCAKKyAgICA0OTY1MSwgNDk2NjcsIDQ5NjgzLCA0OTY5OSwgNDk3MTUsIDQ5NzMxLCA0OTc0NywgNDk3NjMsIDQ5Nzc5LCA0OTc5NSwgCisgICAgNDk4MTEsIDQ5ODI3LCA0OTg0MywgNDk4NTksIDQ5ODc1LCA0OTg5MSwgNDk5MDcsIDQ5OTIzLCA0OTkzOSwgNDk5NTUsIAorICAgIDQ5OTcxLCA0OTk4NywgNTAwMDMsIDUwMDE5LCA1MDAzNSwgNTAwNTEsIDUwMDY3LCA1MDA4MywgNTAwOTksIDUwMTE1LCAKKyAgICA1MDEzMSwgNTAxNDcsIDUwMTYzLCA1MDE3OSwgNTAxOTUsIDUwMjExLCA1MDIyNywgNTAyNDMsIDUwMjU5LCA1MDI3NSwgCisgICAgNTAyOTEsIDUwMzA3LCA1MDMyMywgNTAzMzksIDUwMzU1LCA1MDM3MSwgNTAzODcsIDUwNDAzLCA1MDQxOSwgNTA0MzUsIAorICAgIDUwNDUxLCA1MDQ2NywgNTA0ODMsIDUwNDk5LCA1MDUxNSwgNTA1MzEsIDUwNTQ3LCA1MDU2MywgNTA1NzksIDUwNTk1LCAKKyAgICA1MDYxMSwgNTA2MjcsIDUwNjQzLCA1MDY1OSwgNTA2NzUsIDUwNjkxLCA1MDcwNywgNTA3MjMsIDUwNzM5LCA1MDc1NSwgCisgICAgNTA3NzEsIDUwNzg3LCA1MDgwMywgNTA4MTksIDUwODM1LCA1MDg1MSwgNTA4NjcsIDUwODgzLCA1MDg5OSwgNTA5MTUsIAorICAgIDUwOTMxLCA1MDk0NywgNTA5NjMsIDUwOTc5LCA1MDk5NSwgNTEwMTEsIDUxMDI3LCA1MTA0MywgNTEwNTksIDUxMDc1LCAKKyAgICA1MTA5MSwgNTExMDcsIDUxMTIzLCA1MTEzOSwgNTExNTUsIDUxMTcxLCA1MTE4NywgNTEyMDMsIDUxMjE5LCA1MTIzNSwgCisgICAgNTEyNTEsIDUxMjY3LCA1MTI4MywgNTEyOTksIDUxMzE1LCA1MTMzMSwgNTEzNDcsIDUxMzYzLCA1MTM3OSwgNTEzOTUsIAorICAgIDUxNDExLCA1MTQyNywgNTE0NDMsIDUxNDU5LCA1MTQ3NSwgNTE0OTEsIDUxNTA3LCA1MTUyMywgNTE1MzksIDUxNTU1LCAKKyAgICA1MTU3MSwgNTE1ODcsIDUxNjAzLCA1MTYxOSwgNTE2MzUsIDUxNjUxLCA1MTY2NywgNTE2ODMsIDUxNjk5LCA1MTcxNSwgCisgICAgNTE3MzEsIDUxNzQ3LCA1MTc2MywgNTE3NzksIDUxNzk1LCA1MTgxMSwgNTE4MjcsIDUxODQzLCA1MTg1OSwgNTE4NzUsIAorICAgIDUxODkxLCA1MTkwNywgNTE5MjMsIDUxOTM5LCA1MTk1NSwgNTE5NzEsIDUxOTg3LCA1MjAwMywgNTIwMTksIDUyMDM1LCAKKyAgICA1MjA1MSwgNTIwNjcsIDUyMDgzLCA1MjA5OSwgNTIxMTUsIDUyMTMxLCA1MjE0NywgNTIxNjMsIDUyMTc5LCA1MjE5NSwgCisgICAgNTIyMTEsIDUyMjI3LCA1MjI0MywgNTIyNTksIDUyMjc1LCA1MjI5MSwgNTIzMDcsIDUyMzIzLCA1MjMzOSwgNTIzNTUsIAorICAgIDUyMzcxLCA1MjM4NywgNTI0MDMsIDUyNDE5LCA1MjQzNSwgNTI0NTEsIDUyNDY3LCA1MjQ4MywgNTI0OTksIDUyNTE1LCAKKyAgICA1MjUzMSwgNTI1NDcsIDUyNTYzLCA1MjU3OSwgNTI1OTUsIDUyNjExLCA1MjYyNywgNTI2NDMsIDUyNjU5LCA1MjY3NSwgCisgICAgNTI2OTEsIDUyNzA3LCA1MjcyMywgNTI3MzksIDUyNzU1LCA1Mjc3MSwgNTI3ODcsIDUyODAzLCA1MjgxOSwgNTI4MzUsIAorICAgIDUyODUxLCA1Mjg2NywgNTI4ODMsIDUyODk5LCA1MjkxNSwgNTI5MzEsIDUyOTQ3LCA1Mjk2MywgNTI5NzksIDUyOTk1LCAKKyAgICA1MzAxMSwgNTMwMjcsIDUzMDQzLCA1MzA1OSwgNTMwNzUsIDUzMDkxLCA1MzEwNywgNTMxMjMsIDUzMTM5LCA1MzE1NSwgCisgICAgNTMxNzEsIDUzMTg3LCA1MzIwMywgNTMyMTksIDUzMjM1LCA1MzI1MSwgNTMyNjcsIDUzMjgzLCA1MzI5OSwgNTMzMTUsIAorICAgIDUzMzMxLCA1MzM0NywgNTMzNjMsIDUzMzc5LCA1MzM5NSwgNTM0MTEsIDUzNDI3LCA1MzQ0MywgNTM0NTksIDUzNDc1LCAKKyAgICA1MzQ5MSwgNTM1MDcsIDUzNTIzLCA1MzUzOSwgNTM1NTUsIDUzNTcxLCA1MzU4NywgNTM2MDMsIDUzNjE5LCA1MzYzNSwgCisgICAgNTM2NTEsIDUzNjY3LCA1MzY4MywgNTM2OTksIDUzNzE1LCA1MzczMSwgNTM3NDcsIDUzNzYzLCA1Mzc3OSwgNTM3OTUsIAorICAgIDUzODExLCA1MzgyNywgNTM4NDMsIDUzODU5LCA1Mzg3NSwgNTM4OTEsIDUzOTA3LCA1MzkyMywgNTM5MzksIDUzOTU1LCAKKyAgICA1Mzk3MSwgNTM5ODcsIDU0MDAzLCA1NDAxOSwgNTQwMzUsIDU0MDUxLCA1NDA2NywgNTQwODMsIDU0MDk5LCA1NDExNSwgCisgICAgNTQxMzEsIDU0MTQ3LCA1NDE2MywgNTQxNzksIDU0MTk1LCA1NDIxMSwgNTQyMjcsIDU0MjQzLCA1NDI1OSwgNTQyNzUsIAorICAgIDU0MjkxLCA1NDMwNywgNTQzMjMsIDU0MzM5LCA1NDM1NSwgNTQzNzEsIDU0Mzg3LCA1NDQwMywgNTQ0MTksIDU0NDM1LCAKKyAgICA1NDQ1MSwgNTQ0NjcsIDU0NDgzLCA1NDQ5OSwgNTQ1MTUsIDU0NTMxLCA1NDU0NywgNTQ1NjMsIDU0NTc5LCA1NDU5NSwgCisgICAgNTQ2MTEsIDU0NjI3LCA1NDY0MywgNTQ2NTksIDU0Njc1LCA1NDY5MSwgNTQ3MDcsIDU0NzIzLCA1NDczOSwgNTQ3NTUsIAorICAgIDU0NzcxLCA1NDc4NywgNTQ4MDMsIDU0ODE5LCA1NDgzNSwgNTQ4NTEsIDU0ODY3LCA1NDg4MywgNTQ4OTksIDU0OTE1LCAKKyAgICA1NDkzMSwgNTQ5NDcsIDU0OTYzLCA1NDk3OSwgNTQ5OTUsIDU1MDExLCA1NTAyNywgNTUwNDMsIDU1MDU5LCA1NTA3NSwgCisgICAgNTUwOTEsIDU1MTA3LCA1NTEyMywgNTUxMzksIDU1MTU1LCA1NTE3MSwgNTUxODcsIDU1MjAzLCA1NTIxOSwgNTUyMzUsIAorICAgIDU1MjUxLCA1NTI2NywgNTUyODMsIDU1Mjk5LCA1NTMxNSwgNTUzMzEsIDU1MzQ3LCA1NTM2MywgNTUzNzksIDU1Mzk1LCAKKyAgICA1NTQxMSwgNTU0MjcsIDU1NDQzLCA1NTQ1OSwgNTU0NzUsIDU1NDkxLCA1NTUwNywgNTU1MjMsIDU1NTM5LCA1NTU1NSwgCisgICAgNTU1NzAsIDE0OTYzLCA1NTU3OSwgNTU1ODUsIDU1NTkxLCA1NTYwMSwgNTU2MDksIDEzMTQ0LCAxMzY4MywgODMxOSwgCisgICAgNTU2MjIsIDE0ODMsIDU1NjMwLCAyNTM4NSwgNTYzNywgNTU2MzYsIDU1NjQxLCA1NTY0NiwgNTU2NTEsIDU1NjU2LCAKKyAgICA1NTY2MiwgNTU2NjcsIDU1NjczLCA1NTY3OCwgNTU2ODQsIDU1Njg5LCA1NTY5NCwgNTU2OTksIDU1NzA0LCA1NTcxMCwgCisgICAgNTU3MTUsIDU1NzIwLCA1NTcyNSwgNTU3MzAsIDU1NzM1LCA1NTc0MCwgNTU3NDUsIDU1NzUxLCA1NTc1NiwgNTU3NjIsIAorICAgIDU1NzY5LCAyNTE1LCA1NTc3NCwgNTU3ODAsIDY5NDgsIDU1Nzg0LCA1NTc4OSwgNTU3OTYsIDU1ODA0LCA0MCwgNTU4MDgsIAorICAgIDU1ODE0LCA1NTgxOSwgNTU4MjQsIDU1ODI4LCA1NTgzMywgNTU4MzcsIDU1ODQxLCA5MDM3LCA1NTg0NSwgNTU4NTUsIAorICAgIDU1ODY4LCA1NTg3OSwgNTU4OTIsIDU1ODk5LCA1NTkwNSwgNTU5MTAsIDU1OTE2LCA1NTkyMiwgNTU5MjgsIDU1OTMzLCAKKyAgICA1NTkzOCwgNTU5NDMsIDU1OTQ4LCA1NTk1MiwgNTU5NTcsIDU1OTYyLCA1NTk2NywgNTU5NzMsIDU1OTc5LCA1NTk4NSwgCisgICAgNTU5OTAsIDU1OTk0LCA1NTk5OSwgNTYwMDQsIDU2MDA4LCA1NjAxMywgNTYwMTgsIDU2MDIzLCA1NjAyNywgOTA1MywgCisgICAgOTA2NCwgOTA2OSwgMTUyNiwgNTYwMzEsIDE1MzEsIDU2MDM3LCA1NjA0MCwgMTU2MiwgNTYwNDYsIDE1NjgsIDE1NzQsIAorICAgIDkwOTksIDU2MDUxLCA1NjA1OSwgNTYwNjYsIDU2MDcwLCA1NjA3NiwgNTYwODEsIDI4ODI0LCA1NjA4NiwgNTYwOTMsIAorICAgIDU2MDk4LCA1NjEwMiwgNTYxMDYsIDE1NzksIDE0NTM4LCAxNDU0OSwgNTYxMTUsIDU2MTIyLCA1NjEyNywgNTYxMzEsIAorICAgIDE0NTY4LCAxNTgzLCAzNDg5NywgNTYxMzQsIDU2MTM5LCA1NjE0OSwgNTYxNTgsIDU2MTYzLCA1NjE2NywgNTYxNzMsIAorICAgIDE1ODgsIDM2NzE5LCA1NjE3OCwgNTYxODcsIDU2MTkzLCA1NjE5OCwgOTI0OSwgOTI1NSwgNTYyMDQsIDU2MjE2LCA1NjIzMywgCisgICAgNTYyNTAsIDU2MjY3LCA1NjI4NCwgNTYzMDEsIDU2MzE4LCA1NjMzNSwgNTYzNTIsIDU2MzY5LCA1NjM4NiwgNTY0MDMsIAorICAgIDU2NDIwLCA1NjQzNywgNTY0NTQsIDU2NDcxLCA1NjQ4OCwgNTY1MDUsIDU2NTIyLCA1NjUzOSwgNTY1NTYsIDU2NTczLCAKKyAgICA1NjU5MCwgNTY2MDcsIDU2NjI0LCA1NjY0MSwgNTY2NTgsIDU2Njc1LCA1NjY5MiwgNTY3MDksIDU2NzI2LCA1Njc0MywgCisgICAgNTY3NjAsIDU2Nzc3LCA1Njc5NCwgNTY4MTEsIDU2ODI4LCA1Njg0NSwgNTY4NjIsIDU2ODc5LCA1Njg5NiwgNTY5MTMsIAorICAgIDU2OTMwLCA1Njk0NywgNTY5NjQsIDU2OTgxLCA1Njk5OCwgNTcwMTUsIDU3MDMyLCA1NzA0OSwgNTcwNjAsIDU3MDY1LCAKKyAgICAxNTkzLCA1NzA2OSwgNTcwNzUsIDU3MDgwLCA3NjkzLCAxNTk4LCA1NzA4NSwgNTcwOTQsIDI1NjY0LCA1NzA5OSwgNTcxMTAsIAorICAgIDU3MTIwLCA1NzEyNSwgNTcxMzIsIDU3MTM4LCA1NzE0MywgNTcxNDgsIDE0ODIwLCA1NzE1MiwgOTI2NiwgMTYwMywgOTI3MSwgCisgICAgNTcxNTgsIDU3MTYzLCA1NzE2OSwgNTcxNzQsIDU3MTc5LCA1NzE4NCwgNTcxODksIDU3MTk0LCA1NzE5OSwgNTcyMDQsIAorICAgIDU3MjEwLCA1NzIxNiwgNTcyMjIsIDU3MjI3LCA1NzIzMSwgNTcyMzYsIDU3MjQxLCA1NzI0NSwgNTcyNTAsIDU3MjU1LCAKKyAgICA1NzI2MCwgNTcyNjQsIDU3MjY5LCA1NzI3NSwgNTcyODAsIDU3Mjg1LCA1NzI4OSwgNTcyOTQsIDU3Mjk5LCA1NzMwNSwgCisgICAgNTczMTAsIDU3MzE1LCA1NzMyMSwgNTczMjcsIDU3MzMyLCA1NzMzNiwgNTczNDEsIDU3MzQ2LCA1NzM1MSwgNTczNTUsIAorICAgIDU3MzYwLCA1NzM2NSwgNTczNzAsIDU3Mzc2LCA1NzM4MiwgNTczODcsIDU3MzkxLCA1NzM5NSwgNTc0MDAsIDU3NDA1LCAKKyAgICA1NzQxMCwgMjcwMjQsIDU3NDE0LCA1NzQxOSwgNTc0MjQsIDU3NDMwLCA1NzQzNSwgNTc0NDAsIDU3NDQ0LCA1NzQ0OSwgCisgICAgNTc0NTQsIDU3NDYwLCA1NzQ2NSwgNTc0NzAsIDU3NDc2LCA1NzQ4MiwgNTc0ODcsIDU3NDkxLCA1NzQ5NiwgNTc1MDEsIAorICAgIDU3NTA1LCA1NzUxMCwgNTc1MTUsIDU3NTIwLCA1NzUyNiwgNTc1MzIsIDU3NTM3LCA1NzU0MSwgNTc1NDYsIDU3NTUxLCAKKyAgICA1NzU1NSwgNTc1NjAsIDU3NTY1LCA1NzU3MCwgNTc1NzQsIDU3NTc3LCAyOTM5NSwgNTc1ODIsIDU3NTkwLCAxNDg4NiwgCisgICAgMTQ5MTAsIDkzNjIsIDU3NTk2LCA1NzYwNiwgNTc2MjEsIDkzNjcsIDU3NjMyLCA1NzYzNywgNTc2NDgsIDU3NjYwLCAKKyAgICA1NzY3MiwgNTc2ODQsIDI2NDksIDU3Njk2LCA1NzcwMSwgNTc3MDUsIDU3NzExLCA1NzcxNywgNTc3MjIsIDE2MTUsIDEwMTAsIAorICAgIDU3NzMxLCA1NzczNiwgMzY3NTgsIDU3NzQwLCA1Nzc0NCwgNTc3NDksIDU3NzUzLCAxNDk3MSwgNTc3NTgsIDU3NzYxLCAKKyAgICA1Nzc2OSwgNTc3NzcsIDE2MTksIDkzOTIsIDkzOTgsIDE2MjQsIDU3Nzg1LCA1Nzc5MiwgNTc3OTcsIDU3ODA2LCA1NzgxNiwgCisgICAgNTc4MjMsIDU3ODI4LCAxNjI5LCA1NzgzNSwgNTc4NDAsIDE1MDg2LCA1Nzg0NCwgNTc4NDksIDU3ODU2LCA1Nzg2MiwgCisgICAgNTc4NjYsIDU3ODc3LCA1Nzg4NywgMTUxMDgsIDc2MTYsIDc2MjMsIDE2MzQsIDU3ODk0LCA1NzkwMCwgNTc5MDgsIDU3OTE1LCAKKyAgICA1NzkyMSwgNTc5MjgsIDU3OTQwLCA1Nzk0NiwgNTc5NTEsIDU3OTYzLCA1Nzk3NCwgNTc5ODMsIDU3OTkzLCAzNjY4LCAKKyAgICAyODY2MCwgMjg2NjksIDE1MTQ4LCAxNjM5LCAxNjQzLCA1ODAwMSwgNTgwMTIsIDU4MDE3LCAxNjQ2LCA1ODAyNSwgNTgwMzAsIAorICAgIDU4MDQyLCA1ODA0OCwgNTgwNTMsIDU4MDYxLCAxNjUxLCA1ODA2NiwgNTgwNzEsIDU4MDc5LCA1ODA4NywgNTgwOTQsIAorICAgIDU4MTAzLCA1ODExMSwgNTgxMjAsIDE2NTYsIDU4MTI0LCAxNjYxLCA1ODEyOSwgNTgxMzYsIDE1MjY4LCA1ODE0NCwgCisgICAgNTgxNTAsIDU4MTU1LCA1ODE2MywgNTgxNzAsIDU4MTc4LCAyMDY1OCwgNTgxODMsIDk1MjcsIDU4MTkyLCA1ODE5OCwgCisgICAgNTgyMDUsIDU4MjEyLCA1ODIxOCwgNTgyMjgsIDU4MjM0LCA1ODIzOSwgNTgyNDQsIDU4MjUyLCA5NTM2LCA5NTQxLCAKKyAgICA1ODI2MCwgNTgyNjYsIDU4Mjc0LCAzNzMzLCAzNjg0NiwgNTgyNzksIDU4Mjg1LCA1ODI5MCwgNTgyOTgsIDU4MzA1LCAKKyAgICAxMDM1NiwgNTgzMTAsIDU4MzE2LCAxNjcyLCA1ODMyMSwgNTgzMjQsIDEwNTgsIDU4MzMwLCA1ODMzNSwgNTgzNDAsIAorICAgIDU4MzQ2LCA1ODM1MSwgNTgzNTYsIDU4MzYxLCA1ODM2NiwgNTgzNzEsIDU4Mzc2LCAxNjgxLCA5LCA1ODM4MiwgNTgzODYsIAorICAgIDU4MzkxLCA1ODM5NSwgNTgzOTksIDU4NDAzLCAyOTY0MywgNTg0MDgsIDU4NDEzLCA1ODQxOCwgNTg0MjIsIDU4NDI1LCAKKyAgICA1ODQyOSwgNTg0MzMsIDU4NDM4LCA1ODQ0MiwgNTg0NDcsIDU4NDUxLCAzMjMxNSwgMzIzMjAsIDMyMzI1LCA1ODQ1NCwgCisgICAgNTg0NjEsIDU4NDY3LCAzNjU4NSwgNTg0NzcsIDMyMzMxLCAyOTg5MSwgMjk2NTMsIDI5NjU5LCAzMjM0NywgMjk2NjUsIAorICAgIDU4NDgyLCA1ODQ4NywgMjk5MjQsIDU4NDkxLCA1ODQ5NCwgNTg0OTgsIDU4NTA1LCA1ODUwOCwgNTg1MTMsIDU4NTE3LCAKKyAgICA1ODUyMSwgNTg1MjQsIDU4NTM0LCA1ODU0NiwgNTg1NTMsIDMxMjgyLCA1ODU1NiwgMTM5MzYsIDgyMSwgNTg1NTksIAorICAgIDU4NTYzLCA1ODU2OCwgNTg1NzIsIDU4NTc1LCAxMTk0NCwgNTg1ODIsIDU4NTg5LCA1ODYwMiwgNTg2MTAsIDU4NjE5LCAKKyAgICA1ODYyNCwgNTg2MzQsIDU4NjQ3LCA1ODY1OSwgNTg2NjYsIDU4NjcxLCA1ODY4MCwgNTg2OTMsIDMzNzMyLCA1ODcxMSwgCisgICAgNTg3MTYsIDU4NzIzLCA1ODcyOSwgNTg3MzQsIDU4NzQyLCA1ODc0OSwgMjUyMjQsIDYxMywgNTg3NTUsIDU4NzYxLCAKKyAgICA1ODc3MSwgNTg3NzcsIDU4NzgyLCAyOTY4MywgNDQ4MSwgMjk2OTcsIDU4Nzg2LCA1ODc5NiwgNTg4MDEsIDU4ODExLCAKKyAgICA1ODgyNiwgNTg4MzIsIDU4ODM4LCAyOTcwNywgNTg4NDMsIDI4ODU2LCA1ODg0NywgNTg4NTIsIDU4ODU3LCA1ODg2MSwgCisgICAgNTg4NjYsIDE1MTUxLCA1ODg3MywgNTg4NzgsIDU4ODgyLCA0NTIyLCAyOTczMywgNTg4ODYsIDU4ODkyLCAzMjcsIDU4OTAyLCAKKyAgICA1ODkwOSwgNTg5MTYsIDU4OTIxLCA1ODkzMCwgNTYxNDMsIDU4OTM2LCA1ODk0NCwgNTg5NDgsIDU4OTUyLCA1ODk1NiwgCisgICAgNTg5NjAsIDU4OTY1LCA1ODk2OSwgNTg5NzUsIDU4OTgzLCA1ODk4OCwgNTg5OTMsIDU4OTk3LCA1OTAwMiwgNTkwMDYsIAorICAgIDU5MDEwLCA1OTAxNiwgNTkwMjIsIDU5MDI3LCA1OTAzMSwgMjk4NTcsIDU5MDM2LCAyOTg2MywgMjk4NjksIDU5MDQxLCAKKyAgICA1OTA0NywgNTkwNTQsIDU5MDU5LCA1OTA2MywgMjg4NzMsIDE0ODEzLCA1OTA2NiwgNTkwNzAsIDU5MDc1LCA1OTA4MiwgCisgICAgNTkwODgsIDU5MDkyLCA1OTA5NywgMzYyOTUsIDU5MTAzLCA1OTEwNywgNTkxMTEsIDU5MTE2LCA1OTEyMiwgNTkxMjgsIAorICAgIDU5MTQwLCA1OTE0OSwgNTkxNTksIDU5MTY1LCA1OTE3MiwgNTkxNzcsIDU5MTgyLCA1OTE4NiwgNTkxODksIDU5MTk1LCAKKyAgICA1OTIwMiwgNTkyMDcsIDU5MjEyLCA1OTIxOSwgNTkyMjYsIDU5MjMyLCA1OTIzNywgNTkyNDIsIDU5MjUwLCA1OTI1NSwgCisgICAgMjM3NywgNTkyNTksIDU5MjY0LCA1OTI3MCwgNTkyNzUsIDU5MjgxLCA1OTI4NiwgNTkyOTEsIDU5Mjk2LCA1OTMwMiwgCisgICAgMjk4OTAsIDU5MzA3LCA1OTMxMywgNTkzMTksIDU5MzI1LCAyOTk1NCwgNTkzMzAsIDU5MzM1LCA1OTM0MCwgMjk5NjUsIAorICAgIDU5MzQ1LCA1OTM1MCwgNTkzNTUsIDU5MzYxLCA1OTM2NywgMjk5NzAsIDU5MzcyLCA1OTM3NywgNTkzODIsIDMwMDI1LCAKKyAgICAzMDAzMSwgNTkzODcsIDU5MzkyLCAzMDAzNiwgNTkzOTcsIDI1ODkxLCAzMDA1OCwgMzAwNjIsIDU5NDAyLCA1OTM3OCwgCisgICAgNTk0MDYsIDU5NDE0LCA1OTQyMCwgNTk0MjgsIDU5NDM1LCA1OTQ0MSwgNTk0NTEsIDU5NDU3LCA1OTQ2NCwgODk4NCwgCisgICAgMzAwNzYsIDU5NDcwLCA1OTQ4MywgNTk0OTIsIDU5NDk4LCA1OTUwNywgNTk1MTMsIDIxNTc1LCA1OTUyMCwgNTk1MjcsIAorICAgIDU5NTM3LCAzMDAyNiwgNTk1NDAsIDU5NTQ3LCA1OTU1MiwgNTk1NTYsIDU5NTYwLCA1OTU2NSwgNDU5OCwgNTk1NjksIAorICAgIDU5NTc0LCA1OTU3OSwgMzI0MDksIDMyNDE0LCA1OTU4MywgMzI0MjgsIDU5NTg4LCAzMjQzMywgNTk1OTMsIDU5NTk5LCAKKyAgICAzMjQ0NSwgMzI0NTEsIDMyNDU3LCA1OTYwNCwgNTk2MTAsIDIwNjE5LCA1OTYyMSwgNTk2MjQsIDU5NjM2LCA1OTY0NCwgCisgICAgMzAwOTQsIDU5NjQ4LCA1OTY1NywgNTk2NjcsIDU5Njc2LCAzMDA5OSwgNTk2ODEsIDU5Njg4LCA1OTY5NywgNTk3MDMsIAorICAgIDU5NzExLCA1OTcxOCwgNDU3MywgNDMxMCwgNTk3MjMsIDMwMDM3LCA1OTcyOSwgNTk3MzIsIDU5NzM4LCA1OTc0NSwgCisgICAgNTk3NTAsIDU5NzU1LCAyMTUwMiwgNTk3NTksIDU5NzY1LCA1OTc3MSwgNTk3NzYsIDU5NzgxLCA1OTc4NSwgNTk3OTEsIAorICAgIDU5Nzk3LCAzMTE5NiwgODI2LCAzMzQwNiwgMzQzMDQsIDM0MzEwLCA1OTgwMiwgNTk4MDYsIDU5ODEwLCA1OTgxMywgCisgICAgNTk4MjYsIDU5ODMyLCA1OTgzNiwgNTk4MzksIDU5ODQ0LCAzMTQ5NSwgNTk4NDgsIDI4ODc4LCAxOTQ0NiwgNTk4NTQsIAorICAgIDQ1MDIsIDQ1MTAsIDc0NzIsIDU5ODU3LCA1OTg2MiwgNTk4NjcsIDU5ODcyLCA1OTg3NywgNTk4ODIsIDU5ODg3LCA1OTg5MiwgCisgICAgNTk4OTcsIDU5OTAyLCA1OTkwOCwgNTk5MTMsIDU5OTE4LCA1OTkyNCwgNTk5MjksIDU5OTM0LCA1OTkzOSwgNTk5NDQsIAorICAgIDU5OTQ5LCA1OTk1NCwgNTk5NjAsIDU5OTY1LCA1OTk3MSwgNTk5NzYsIDU5OTgxLCA1OTk4NiwgNTk5OTEsIDU5OTk2LCAKKyAgICA2MDAwMSwgNjAwMDYsIDYwMDExLCA2MDAxNiwgNjAwMjEsIDYwMDI3LCA2MDAzMiwgNjAwMzcsIDYwMDQyLCA2MDA0NywgCisgICAgNjAwNTIsIDYwMDU3LCA2MDA2MywgNjAwNjgsIDYwMDczLCA2MDA3OCwgNjAwODMsIDYwMDg4LCA2MDA5MywgNjAwOTgsIAorICAgIDYwMTAzLCA2MDEwOCwgNjAxMTQsIDYwMTE5LCA2MDEyNCwgNjAxMjksIDYwMTM0LCA2MDE0MCwgNjAxNDYsIDYwMTUxLCAKKyAgICA2MDE1NywgNjAxNjIsIDYwMTY3LCA2MDE3MiwgNjAxNzcsIDYwMTgyLCAxNDc2LCAyNDAsIDYwMTg3LCA2MDE5MSwgNjAxOTUsIAorICAgIDYwMTk5LCAyMzE1NywgNjAyMDMsIDYwMjA3LCA2MDIxMiwgNjAyMTYsIDYwMjIxLCA2MDIyNSwgNjAyMjksIDYwMjMzLCAKKyAgICA2MDIzOCwgNjAyNDIsIDExNjgxLCA2MDI0NywgNjAyNTEsIDYwMjU4LCAxMzQ0NCwgNjAyNjcsIDYwMjc2LCA2MDI4MCwgCisgICAgNjAyODUsIDYwMjkwLCA2MDI5NCwgMjI5NjAsIDI5NTcsIDYwMjk4LCA2MDMwNCwgNjAzMTMsIDYwMzIxLCA2MDMyNywgCisgICAgNjAzMzksIDYwMzUxLCA2MDM1NSwgNjAzNjAsIDYwMzY0LCA2MDM3MCwgNjAzNzYsIDYwMzgxLCA2MDM5MSwgNjA0MDEsIAorICAgIDYwNDA3LCA2MDQxMiwgNjA0MTYsIDYwNDIxLCA2MDQyNywgNjA0MzYsIDYwNDQ1LCA2MDQ1MywgMTM3OTgsIDYwNDU3LCAKKyAgICA2MDQ2NiwgNjA0NzQsIDYwNDg2LCA2MDQ5NywgNjA1MDgsIDYwNTE3LCA2MDUyMSwgNjA1MzAsIDYwNTQwLCA2MDU0NiwgCisgICAgNjA1NTEsIDYwNTU3LCA2MDU2MiwgOTgsIDI4NzcyLCA2MDU3MywgMjQyMjgsIDI0MjM4LCA2MDU3OSwgNjA1ODYsIDYwNTkyLCAKKyAgICA2MDU5NiwgNjA2MDYsIDYwNjE3LCA2MDYyNSwgNjA2MzQsIDYwNjM5LCA2MDY0NCwgNjA2NDgsIDE1NTA0LCA2MDY1NiwgCisgICAgNjA2NjAsIDYwNjY2LCA2MDY3NiwgNjA2ODMsIDYwNjg5LCAzMjUwOCwgMTE2MiwgNjA2OTUsIDYwNjk4LCA2MDcwMiwgCisgICAgNjA3MTIsIDYwNzE4LCA2MDcyNSwgMTE2MTgsIDYwNzMyLCA2MDczOCwgNjA3NDcsIDYwNzU2LCA2MDc2MiwgNjA3NjgsIAorICAgIDYwNzc0LCA2MDc3OSwgNjA3ODYsIDYwNzkzLCA2MDc5OSwgNjA4MTIsIDYwODIxLCA2MDgzMCwgNjA4MzUsIDYwODM5LCAKKyAgICA2MDg0NSwgNjA4NTIsIDYwODU5LCA2MDg2NiwgNjA4NzMsIDYwODgwLCA2MDg4NSwgNjA4ODksIDYwODkzLCA2MDg5NiwgCisgICAgNjA5MDYsIDYwOTEwLCA2MDkyMiwgNjA5MzEsIDYwOTM1LCA2MDk0MCwgNjA5NDQsIDYwOTUwLCA2MDk1NSwgNjA5NjIsIAorICAgIDYwOTcxLCA2MDk3OSwgNjA5ODcsIDYwOTkyLCA2MDk5NiwgNjEwMDEsIDYxMDA2LCA2MTAxNiwgNjEwMjQsIDYxMDI5LCAKKyAgICA2MTAzMywgNjEwMzcsIDYxMDQzLCA2MTA1NSwgNjEwNjMsIDYxMDczLCA2MTA4MCwgNjEwODYsIDYxMDkxLCA2MTA5NSwgCisgICAgNjEwOTksIDYxMTAzLCA2MTExMiwgNjExMjEsIDYxMTMwLCA2MTEzNiwgNjExNDIsIDYxMTQ4LCA2MTE1MywgNjExNjAsIAorICAgIDYxMTY2LCA2MTE3NCwgNjExODEsIDEwNzcyLCA2MTE4NywgNjExOTMsIDYxMTk3LCAxMjUyMywgNjEyMDEsIDYxMjA2LCAKKyAgICA2MTIxNiwgNjEyMjUsIDYxMjMxLCA2MTIzNywgNjEyNDUsIDYxMjUyLCA2MTI1NiwgNjEyNjAsIDYxMjY2LCA2MTI3NCwgCisgICAgNjEyODEsIDYxMjg3LCA2MTI5OCwgNjEzMDIsIDYxMzA2LCA2MTMxMCwgNjEzMTMsIDYxMzE5LCA2MTMyNCwgNjEzMjgsIAorICAgIDYxMzMyLCA2MTM0MSwgNjEzNDksIDYxMzU2LCA2MTM2MiwgNjEzNjksIDIyMDg3LCAzNjMzNywgNjEzNzQsIDYxMzgyLCAKKyAgICA2MTM4NiwgNjEzODksIDYxMzk3LCA2MTQwNCwgNjE0MTAsIDYxNDE5LCA2MTQyNywgNjE0MzMsIDYxNDM4LCA2MTQ0MiwgCisgICAgNjE0NDcsIDYxNDUxLCA2MTQ1NSwgNjE0NjAsIDYxNDY5LCA2MTQ3MywgNjE0ODAsIDYxNDg3LCA2MTQ5MywgNjE1MDEsIAorICAgIDYxNTA3LCA2MTUxOCwgNjE1MjYsIDYxNTMyLCAyMDc1MywgNjE1NDEsIDYxNTQ4LCA2MTU1NSwgNjE1NjIsIDYxNTY5LCAKKyAgICA2MTU3NiwgMzkyODgsIDExNDU2LCA2MTU4MywgNjE1OTAsIDYxNTk1LCAzMjU0NCwgMzc0ODQsIDYxNjAxLCA2MTYwNiwgCisgICAgNjE2MTEsIDYxNjE3LCA2MTYyMywgNjE2MjksIDYxNjM0LCA2MTYzOSwgNjE2NDQsIDYxNjQ5LCA2MTY1NSwgNjE2NjAsIAorICAgIDYxNjY2LCA2MTY3MSwgNjE2NzcsIDYxNjgyLCA2MTY4NywgNjE2OTIsIDYxNjk3LCA2MTcwMiwgNjE3MDcsIDYxNzEyLCAKKyAgICA2MTcxOCwgNjE3MjMsIDYxNzI5LCA2MTczNCwgNjE3MzksIDYxNzQ0LCA2MTc0OSwgNjE3NTQsIDYxNzU5LCA2MTc2NSwgCisgICAgNjE3NzAsIDYxNzc1LCA2MTc4MCwgNjE3ODUsIDYxNzkwLCA2MTc5NSwgNjE4MDAsIDYxODA1LCA2MTgxMCwgNjE4MTUsIAorICAgIDYxODIxLCA2MTgyNiwgNjE4MzEsIDYxODM2LCA2MTg0MSwgNjE4NDYsIDYxODUxLCA2MTg1NiwgNjE4NjEsIDYxODY3LCAKKyAgICA2MTg3MiwgNjE4NzcsIDYxODgyLCA2MTg4NywgNjE4OTIsIDYxODk3LCA2MTkwMiwgNjE5MDcsIDYxOTEyLCA2MTkxNywgCisgICAgNjE5MjIsIDYxOTI3LCA2MTkzMywgMTc5NywgMjI0LCAzNDk5MywgNjE5MzgsIDYxOTQxLCA2MTk0NiwgNjE5NTAsIDYxOTUzLCAKKyAgICA2MTk1OCwgNjA5ODMsIDYxOTY5LCA2MTk3OSwgNjE5ODYsIDYyMDAyLCA2MjAxMSwgNjIwMjEsIDYyMDMxLCA2MjAzOSwgCisgICAgNjIwNDcsIDYyMDUxLCA2MjA1NCwgNjIwNjEsIDYyMDY3LCA2MjA3OCwgNjIwOTAsIDYyMTAxLCA2MjExMCwgNjIxMTcsIAorICAgIDEyODYsIDIxMzkxLCA2MjEyNywgMjU0NCwgNjIxMzEsIDYyMTQwLCAxMTI3LCAxNTQ3NywgMzU2MjIsIDYyMTQ4LCA2MjE1NiwgCisgICAgNjIxNzAsIDYyMTgzLCA2MjE4NywgNjIxOTIsIDYyMTk3LCA2MjIwMiwgNjIyMDgsIDYyMjE0LCA2MjIxOSwgNjk1NywgCisgICAgNjIyMjQsIDYyMjMyLCA5MzkzLCA2MjIzNywgNjIyNDMsIDE2ODQsIDk0MDUsIDcyMywgNjIyNTIsIDYyMjYxLCA2MjI3MSwgCisgICAgMjQ5OTIsIDYyMjgwLCA2MjI4NiwgMTUwNjMsIDYyMjkyLCA2MjI5NiwgMzg4MSwgOTczNiwgNjIzMDIsIDU4MDA3LCAKKyAgICA2MjMwOSwgMzkwNSwgMTg0LCAxMjQ0NCwgNjIzMTUsIDYyMzI3LCA2MjMzMSwgNjIzMzcsIDI1Njg0LCA2MjM0MSwgOTcyNCwgCisgICAgMjY4NCwgNCwgNjIzNDYsIDYyMzU2LCA2MjM2MiwgNjIzNzMsIDYyMzgwLCA2MjM4NiwgNjIzOTIsIDYyNDAwLCA2MjQwNywgCisgICAgNjI0MTMsIDYyNDIzLCA2MjQzMywgNjI0NDMsIDEyOTgsIDYyNDUyLCA2MjQ1OCwgMjcwNywgMjcxMywgNjk1NCwgMjIxOCwgCisgICAgNjI0NjIsIDYyNDY2LCA2MjQ3NSwgNjI0ODMsIDYyNDk0LCA2MjUwMiwgNjI1MTAsIDYyNTE2LCA2MjUyMSwgNjI1MzIsIAorICAgIDYyNTQzLCA2MjU1MSwgNjI1NTcsIDgwNjEsIDYyNTYyLCA2MjU3MCwgNjI1NzQsIDYyNTc4LCA2MjU5MCwgMjYwNjAsIAorICAgIDYyNTk3LCA2MjYwNywgNjI2MTMsIDYyNjE5LCA4MTYzLCA2MjYyOSwgNjI2NDAsIDYyNjUwLCA2MjY1OSwgNjI2NjMsIAorICAgIDYyNjcwLCAxMTI5LCAyNTM3LCA2MjY4MCwgNjI2ODUsIDYyNjkzLCA2MjcwMSwgNjI3MTIsIDYyNzE5LCA2MjczMywgCisgICAgMTIzNjksIDM3OSwgNjI3NDMsIDYyNzQ3LCA2Mjc1NiwgNjI3NjQsIDYyNzcwLCA2Mjc4NCwgNjI3OTEsIDYyNzk3LCAKKyAgICA2MjgwNiwgNjI4MTMsIDYyODIzLCA2MjgzMSwgMzc0MCwgMTg5LCA2MjgzOSwgNjI4NTAsIDYyODU0LCA2Mjg2NiwgMjU4ODIsIAorICAgIDE1NiwgNjI4NzIsIDYyODc3LCA2Mjg4MSwgNjI4ODgsIDYyODk0LCA2MjkwMiwgNjI5MDksIDcyMjYsIDYyOTE2LCA2MjkyNSwgCisgICAgNjI5MzMsIDM4MDYsIDYyOTQ2LCAxNTEwOSwgNjI5NTAsIDI3NTIsIDQyOCwgNjI5NTUsIDYyOTY4LCA2Mjk3MywgMTc5NiwgCisgICAgNjQ3LCA2Mjk3NywgMzgxMiwgNjI5ODUsIDYyOTkxLCA5NjMsIDYzMDAxLCA2MzAxMCwgNjMwMTUsIDEzMTc4LCAxMzE4NSwgCisgICAgNDI2MjAsIDYzMDE5LCAzNzUwLCAxMTM1MCwgNjMwMjcsIDYzMDM0LCAyMTYxOCwgNjMwMzgsIDYzMDQ1LCA2MzA1MSwgCisgICAgNjMwNTYsIDYzMDYxLCAxMzE5OCwgMzU0LCA2MzA2NiwgNjMwNzgsIDYzMDg0LCA2MzA5MiwgMjc2NCwgMTcxNiwgNjMxMDAsIAorICAgIDYzMTAyLCA2MzEwNywgNjMxMTIsIDYzMTE3LCA2MzEyMywgNjMxMjgsIDYzMTMzLCA2MzEzOCwgNjMxNDMsIDYzMTQ4LCAKKyAgICA2MzE1MywgNjMxNTksIDYzMTY0LCA2MzE2OSwgNjMxNzQsIDYzMTc5LCA2MzE4NCwgNjMxODksIDYzMTk0LCA2MzE5OSwgCisgICAgNjMyMDUsIDYzMjEwLCA2MzIxNSwgNjMyMjAsIDYzMjI2LCA2MzIzMSwgNjMyMzcsIDYzMjQyLCA2MzI0NywgNjMyNTIsIAorICAgIDYzMjU3LCA2MzI2MiwgNjMyNjcsIDYzMjcyLCA2MzI3OCwgNjMyODMsIDYzMjg5LCA2MzI5NCwgNjMyOTksIDYzMzA0LCAKKyAgICA2MzMwOSwgNjMzMTQsIDYzMzE5LCA2MzMyNCwgNjMzMjksIDYzMzM1LCA2MzM0MCwgNjMzNDUsIDYzMzQ5LCA2MzM1MywgCisgICAgNjMzNTgsIDYzMzYyLCA2MzM2NywgNjMzNzIsIDYzMzc4LCA2MzM4MywgNjMzODcsIDYzMzkyLCA2MzM5NiwgNjMzOTksIAorICAgIDYzNDAxLCA2MzQwNSwgNjM0MDgsIDYzNDEzLCA2MzQxNywgNjM0MjEsIDYzNDI1LCA2MzQyOSwgNjM0MzgsIDYzNDQyLCAKKyAgICAzMDI4OCwgNjM0NDUsIDMwMjkzLCA2MzQ1MiwgNjM0NTcsIDMwMjk4LCA2MzQ2NiwgNjM0NzUsIDMwMzA0LCA2MzQ4MCwgCisgICAgMzAzMDksIDYzNDg5LCA2MzQ5NCwgOTkxNCwgNjM0OTgsIDYzNTAzLCA2MzUwOCwgMzAzMTQsIDYzNTEyLCAzNzY1MCwgCisgICAgNjM1MTYsIDYzNTE5LCA2MzUyMywgNjYzOCwgNjM1MjksIDYzNTM0LCA2MzUzOCwgMzYzMywgMzAzMTksIDYzNTQxLCAKKyAgICA2MzU0NSwgNjM1NDgsIDYzNTUzLCA2MzU1NywgNjM1NjMsIDYzNTcxLCA2MzU4NCwgNjM1OTMsIDYzNTk5LCA2MzYwNCwgCisgICAgNjM2MTAsIDYzNjE0LCA2MzYyMCwgNjM2MjgsIDYzNjMzLCA2MzY0MCwgNjM2NDYsIDYzNjU0LCA2MzY2MywgNjM2NzEsIAorICAgIDMwMzIyLCA2MzY3OCwgNjM2ODgsIDYzNjk3LCA2MzcxMCwgNjM3MTUsIDYzNzIwLCA2MzcyOSwgNjM3MzUsIDYzNzQyLCAKKyAgICA2Mzc1MywgNjM3NjUsIDYzNzcyLCA2Mzc4MSwgNjM3OTAsIDYzNzk5LCA2MzgwNiwgNjM4MTIsIDYzODE5LCA2MzgyNywgCisgICAgNjM4MzQsIDYzODQyLCA2Mzg1MSwgNjM4NTksIDYzODY2LCA2Mzg3NCwgNjM4ODMsIDYzODkxLCA2MzkwMCwgNjM5MTAsIAorICAgIDYzOTE5LCA2MzkyNywgNjM5MzQsIDYzOTQyLCA2Mzk1MSwgNjM5NTksIDYzOTY4LCA2Mzk3OCwgNjM5ODcsIDYzOTk1LCAKKyAgICA2NDAwNCwgNjQwMTQsIDY0MDIzLCA2NDAzMywgNjQwNDQsIDY0MDU0LCA2NDA2MywgNjQwNzEsIDY0MDc4LCA2NDA4NiwgCisgICAgNjQwOTUsIDY0MTAzLCA2NDExMiwgNjQxMjIsIDY0MTMxLCA2NDEzOSwgNjQxNDgsIDY0MTU4LCA2NDE2NywgNjQxNzcsIAorICAgIDY0MTg4LCA2NDE5OCwgNjQyMDcsIDY0MjE1LCA2NDIyNCwgNjQyMzQsIDY0MjQzLCA2NDI1MywgNjQyNjQsIDY0Mjc0LCAKKyAgICA2NDI4MywgNjQyOTMsIDY0MzA0LCA2NDMxNCwgNjQzMjUsIDY0MzM3LCA2NDM0OCwgNjQzNTgsIDY0MzY3LCA2NDM3NSwgCisgICAgNjQzODIsIDY0MzkwLCA2NDM5OSwgNjQ0MDcsIDY0NDE2LCA2NDQyNiwgNjQ0MzUsIDY0NDQzLCA2NDQ1MiwgNjQ0NjIsIAorICAgIDY0NDcxLCA2NDQ4MSwgNjQ0OTIsIDY0NTAyLCA2NDUxMSwgNjQ1MTksIDY0NTI4LCA2NDUzOCwgNjQ1NDcsIDY0NTU3LCAKKyAgICA2NDU2OCwgNjQ1NzgsIDY0NTg3LCA2NDU5NywgNjQ2MDgsIDY0NjE4LCA2NDYyOSwgNjQ2NDEsIDY0NjUyLCA2NDY2MiwgCisgICAgNjQ2NzEsIDY0Njc5LCA2NDY4OCwgNjQ2OTgsIDY0NzA3LCA2NDcxNywgNjQ3MjgsIDY0NzM4LCA2NDc0NywgNjQ3NTcsIAorICAgIDY0NzY4LCA2NDc3OCwgNjQ3ODksIDY0ODAxLCA2NDgxMiwgNjQ4MjIsIDY0ODMxLCA2NDg0MSwgNjQ4NTIsIDY0ODYyLCAKKyAgICA2NDg3MywgNjQ4ODUsIDY0ODk2LCA2NDkwNiwgNjQ5MTcsIDY0OTI5LCA2NDk0MCwgNjQ5NTIsIDY0OTY1LCA2NDk3NywgCisgICAgNjQ5ODgsIDY0OTk4LCA2NTAwNywgNjUwMTUsIDY1MDIyLCA2NTAzMCwgNjUwMzksIDY1MDQ3LCA2NTA1NiwgNjUwNjYsIAorICAgIDY1MDc1LCA2NTA4MywgNjUwOTIsIDY1MTAyLCA2NTExMSwgNjUxMjEsIDY1MTMyLCA2NTE0MiwgNjUxNTEsIDY1MTU5LCAKKyAgICA2NTE2OCwgNjUxNzgsIDY1MTg3LCA2NTE5NywgNjUyMDgsIDY1MjE4LCA2NTIyNywgNjUyMzcsIDY1MjQ4LCA2NTI1OCwgCisgICAgNjUyNjksIDY1MjgxLCA2NTI5MiwgNjUzMDIsIDY1MzExLCA2NTMxOSwgNjUzMjgsIDY1MzM4LCA2NTM0NywgNjUzNTcsIAorICAgIDY1MzY4LCA2NTM3OCwgNjUzODcsIDY1Mzk3LCA2NTQwOCwgNjU0MTgsIDY1NDI5LCA2NTQ0MSwgNjU0NTIsIDY1NDYyLCAKKyAgICA2NTQ3MSwgNjU0ODEsIDY1NDkyLCA2NTUwMiwgNjU1MTMsIDY1NTI1LCA2NTUzNiwgNjU1NDYsIDY1NTU3LCA2NTU2OSwgCisgICAgNjU1ODAsIDY1NTkyLCA2NTYwNSwgNjU2MTcsIDY1NjI4LCA2NTYzOCwgNjU2NDcsIDY1NjU1LCA2NTY2NCwgNjU2NzQsIAorICAgIDY1NjgzLCA2NTY5MywgNjU3MDQsIDY1NzE0LCA2NTcyMywgNjU3MzMsIDY1NzQ0LCA2NTc1NCwgNjU3NjUsIDY1Nzc3LCAKKyAgICA2NTc4OCwgNjU3OTgsIDY1ODA3LCA2NTgxNywgNjU4MjgsIDY1ODM4LCA2NTg0OSwgNjU4NjEsIDY1ODcyLCA2NTg4MiwgCisgICAgNjU4OTMsIDY1OTA1LCA2NTkxNiwgNjU5MjgsIDY1OTQxLCA2NTk1MywgNjU5NjQsIDY1OTc0LCA2NTk4MywgNjU5OTMsIAorICAgIDY2MDA0LCA2NjAxNCwgNjYwMjUsIDY2MDM3LCA2NjA0OCwgNjYwNTgsIDY2MDY5LCA2NjA4MSwgNjYwOTIsIDY2MTA0LCAKKyAgICA2NjExNywgNjYxMjksIDY2MTQwLCA2NjE1MCwgNjYxNjEsIDY2MTczLCA2NjE4NCwgNjYxOTYsIDY2MjA5LCA2NjIyMSwgCisgICAgNjYyMzIsIDY2MjQ0LCA2NjI1NywgNjYyNjksIDY2MjgyLCA2NjI5NiwgNjYzMDksIDY2MzIxLCA2NjMzMiwgNjYzNDIsIAorICAgIDY2MzUxLCA2NjM1OSwgNjYzNjYsIDY2MzcxLCA2NDg5LCA2NjM3OCwgMzAzMzIsIDY2MzgzLCA2NjM4OCwgMzAzMzcsIAorICAgIDY2Mzk0LCAxOTEwMCwgMzAzNDIsIDY2Mzk5LCA2NjQwNSwgNjY0MTMsIDY2NDE5LCA2NjQyNSwgNjY0MzIsIDY2NDM5LCAKKyAgICA2NjQ0NCwgNjY0NDgsIDY2NDUxLCA2NjQ1NSwgNjY0NjQsIDY2NDcwLCA2NjQ4MiwgNjY0OTMsIDY2NDk3LCAzMDE5LCAKKyAgICA2NDY0LCA2NjUwMiwgNjY1MDUsIDY2NTA3LCA2NjUxMSwgNjY1MTUsIDY2NTE5LCAyMzkyNywgNjY1MjQsIDY2NTI4LCAKKyAgICA2NjUzMSwgNjY1MzYsIDY2NTQwLCA2NjU0NywgNjY1NTMsIDY2NTU3LCA2NjU2MSwgNjY1NjQsIDMwMzU5LCA2NjU2OSwgCisgICAgNjY1NzYsIDY2NTg1LCA2NjU5MywgNjY2MDQsIDY2NjEyLCA2NjYyMCwgNjY2MjcsIDY2NjM0LCA2NjY0MCwgNjY2NTEsIAorICAgIDMwMzY0LCA2NjY1NiwgNjY2NjcsIDY2Njc5LCA2NjY4NywgNjY2OTgsIDY2NzA3LCA2NjcxOCwgNjY3MjMsIDY2NzMxLCAKKyAgICAyNTEwLCA2NjczNiwgMzIwMDIsIDY2NzQ5LCA2Njc1MywgNjY3NjUsIDY2NzczLCA2Njc3OCwgNjY3ODYsIDE1NjY0LCAKKyAgICA2Njc5NywgNjY4MDMsIDY2ODEwLCA2NjgxOCwgNjY4MjQsIDMwMzc0LCA2NjgyOSwgMzgzMSwgNTU2MDUsIDY2ODM2LCAKKyAgICA2NjgzOSwgNjY4NDcsIDY2ODYwLCA2Njg3MywgNjY4ODYsIDY2ODk5LCA2NjkwNiwgNjY5MTcsIDY2OTI2LCAzOTEwNSwgCisgICAgMzkxMTAsIDY2OTMxLCA2NjkzNSwgNjY5NDMsIDY2OTUwLCA2Njk1OSwgNjY5NjcsIDY2OTczLCA2Njk4MiwgNjY5OTAsIAorICAgIDY2OTk4LCA2NzAwMiwgNjcwMTEsIDY3MDIwLCA2NzAzMCwgNjcwNDMsIDY3MDU2LCA2NzA2NiwgMzAzNzksIDY3MDcyLCAKKyAgICA2NzA3OSwgNjcwODUsIDMwMzg1LCA2NzA5MCwgNjcwOTMsIDY3MDk3LCA2NzEwNSwgNjcxMTQsIDM4ODQzLCA2NzEyMiwgCisgICAgNjcxMzEsIDY3MTM5LCA2NzE0NiwgNjcxNTQsIDY3MTY0LCA2NzE3MywgNjcxODIsIDY3MTkxLCA2NzE5OSwgNjcyMTAsIAorICAgIDY3MjIwLCA3NzMzLCAxOTcxNSwgNjcyMjksIDY3MjM0LCA2NzIzOSwgNjcyNDMsIDY3MjQ3LCA2NzI1MiwgNjcyNTgsIAorICAgIDY3MjYzLCA2NzI2OCwgNjcyNzQsIDY3Mjc5LCA2NzI4NCwgMTk2ODAsIDY3Mjg5LCA2NzI5NiwgNjczMDQsIDY3MzEyLCAKKyAgICA2NzMxNywgNjczMjQsIDY3MzMxLCA2NzMzNSwgNjczMzksIDY3MzQ3LCA2NzM1NSwgMzA0MDIsIDY3MzYxLCA2NzM2NywgCisgICAgNjczNzksIDY3Mzg1LCA2NzM4OSwgNjczOTYsIDY3NDAxLCA2NzQxMiwgNjc0MjIsIDY3NDMyLCA2NzQ0NCwgNjc0NTAsIAorICAgIDY3NDYwLCA2NzQ3MCwgMzA0MjksIDY3NDc5LCA2NzQ4OCwgNjc0OTQsIDY3NTA2LCA2NzUxNywgNjc1MjQsIDY3NTI5LCAKKyAgICA2NzUzMywgNjc1NDEsIDY3NTQ3LCA2NzU1MiwgNjc1NTcsIDY3NTY0LCA2NzU3MiwgNjc1ODQsIDY3NTk0LCA2NzYwMywgCisgICAgNjc2MTIsIDY3NjE5LCAzMTg2NiwgMjE5MDYsIDY3NjI1LCA2NzYzMCwgNjc2MzQsIDY3NjM4LCA2NzY0MywgNjc2NDksIAorICAgIDY3NjYwLCA2NzY3MywgNjc2NzgsIDY3Njg1LCAzMDQzNCwgNjc2OTAsIDY3NzAyLCA2NzcxMSwgNjc3MjEsIDY3NzMyLCAKKyAgICA2Nzc0NSwgNjc3NTIsIDY3NzYxLCA2Nzc3MCwgNjc3NzgsIDY3NzgzLCA2Nzc4OSwgMTQ2NSwgNjc3OTQsIDY3Nzk5LCAKKyAgICA2NzgwNCwgNjc4MDksIDY3ODE1LCA2NzgyMCwgNjc4MjUsIDY3ODMxLCA2NzgzNywgNjc4NDIsIDY3ODQ2LCA2Nzg1MSwgCisgICAgNjc4NTYsIDY3ODYxLCA1NjExMSwgNjc4NjYsIDY3ODcxLCA2Nzg3NiwgNjc4ODEsIDY3ODg3LCA2Nzg5MywgNjc4OTgsIAorICAgIDY3OTAyLCA2NzkwNywgNjc5MTIsIDY3OTE3LCA2NzkyMywgNjc5MjgsIDY3OTM0LCA2NzkzOSwgNjc5NDQsIDY3OTQ5LCAKKyAgICA2Nzk1NCwgNjc5NTgsIDY3OTY0LCA2Nzk2OSwgNjc5NzgsIDY3OTgzLCA2Nzk4OCwgNjc5OTMsIDY3OTk4LCA2ODAwMiwgCisgICAgNjgwMDksIDY4MDE1LCAxNTMyNiwgMTUzMzMsIDQyODc1LCA2ODAyMCwgNjc5NzAsIDY4MDIyLCA2ODAzMiwgMzA0NDMsIAorICAgIDY4MDM1LCA2ODA0NCwgNjgwNTAsIDQ2MTcsIDMwNDQ4LCA2ODA1NCwgNjgwNjAsIDY4MDY2LCA2ODA3MSwgNjgwNzUsIAorICAgIDY4MDgyLCA2ODA4NywgNjgwOTcsIDY4MTA2LCA2ODExMCwgNjgxMTYsIDY4MTIyLCA2ODEyOCwgNjgxMzIsIDY4MTQwLCAKKyAgICA2ODE0NywgNjgxNTUsIDY4MTYzLCAzMDQ1MywgNjgxNzAsIDY4MTczLCA2ODE4MCwgNjgxODYsIDY4MTkxLCA2ODE5NSwgCisgICAgNjgyMDEsIDY4MjA4LCA2ODIxMywgNjgyMTcsIDY4MjI2LCA2ODIzNCwgNjgyNDAsIDY4MjQ1LCAzMDQ1OCwgNjgyNTIsIAorICAgIDY4MjU5LCA2ODI2NSwgNjgyNzAsIDY4Mjc2LCA2ODI4MywgNjgyODksIDE5NDUzLCAyNTQwOCwgNjgyOTUsIDY4MzAwLCAKKyAgICA2ODMwNiwgNjgzMTgsIDY4MDAzLCA2ODAxMCwgNjgzMjgsIDY4MzMzLCA2ODM0MCwgNjgzNDcsIDY4MzUzLCA2ODM2NCwgCisgICAgNjgzNjksIDc1MDIsIDY4Mzc3LCA2ODM4MCwgNjgzODYsIDY4MzkwLCA2ODM5NCwgNjgzOTcsIDY4NDAzLCAzMDIwNywgCisgICAgNDY1NiwgOTEzLCAxMTczMSwgNjg0MTAsIDY4NDE2LCA2ODQyMiwgNjg0MjgsIDY4NDM0LCA2ODQ0MCwgNjg0NDYsIDY4NDUyLCAKKyAgICA2ODQ1OCwgNjg0NjMsIDY4NDY4LCA2ODQ3MywgNjg0NzgsIDY4NDgzLCA2ODQ4OCwgNjg0OTMsIDY4NDk4LCA2ODUwMywgCisgICAgNjg1MDgsIDY4NTEzLCA2ODUxOCwgNjg1MjMsIDY4NTI5LCA2ODUzNCwgNjg1MzksIDY4NTQ1LCA2ODU1MCwgNjg1NTUsIAorICAgIDY4NTYxLCA2ODU2NywgNjg1NzMsIDY4NTc5LCA2ODU4NSwgNjg1OTEsIDY4NTk3LCA2ODYwMywgNjg2MDksIDY4NjE0LCAKKyAgICA2ODYxOSwgNjg2MjUsIDY4NjMwLCA2ODYzNSwgNjg2NDEsIDY4NjQ2LCA2ODY1MSwgNjg2NTYsIDY4NjYxLCA2ODY2NiwgCisgICAgNjg2NzEsIDY4Njc2LCA2ODY4MSwgNjg2ODYsIDY4NjkxLCA2ODY5NiwgNjg3MDEsIDY4NzA3LCA2ODcxMiwgNjg3MTcsIAorICAgIDY4NzIyLCA2ODcyOCwgNjg3MzMsIDY4NzM4LCA2ODc0MywgNjg3NDgsIDY4NzU0LCA2ODc1OSwgNjg3NjQsIDY4NzY5LCAKKyAgICA2ODc3NCwgNjg3NzksIDY4Nzg0LCA2ODc4OSwgNjg3OTQsIDY4Nzk5LCA2ODgwNCwgNjg4MDksIDY4ODE0LCA2ODgxOSwgCisgICAgNjg4MjQsIDY4ODI5LCA2ODgzNCwgNjg4MzksIDY4ODQ0LCA2ODg0OSwgNjg4NTUsIDY4ODYwLCA2ODg2NSwgNjg4NzAsIAorICAgIDY4ODc1LCA2ODg4MCwgNjg4ODUsIDY4ODkwLCAxODI3LCAxNDMsIDY4ODk1LCA2ODg5OSwgNjg5MDMsIDY4OTA4LCA2ODkxNiwgCisgICAgNjg5MjAsIDY4OTI3LCA2ODkzNSwgNjg5MzksIDY4OTUyLCA2ODk2MCwgNjg5NjQsIDY4OTY3LCA2ODk3MiwgNjg5NzYsIAorICAgIDY4OTgxLCA2ODk4NSwgNjg5OTMsIDY4OTk3LCAxOTEwOCwgNjkwMDIsIDU4MjcwLCA2OTAwNiwgNjkwMDksIDY5MDE3LCAKKyAgICA2OTAyNSwgNjkwMzMsIDY5MDM4LCA2OTA0NSwgNjkwNTEsIDY5MDU3LCA2OTA2MiwgNjkwNjcsIDY5MDc1LCA2MjE3NSwgCisgICAgNjkwODIsIDY5MDg3LCA2OTA5MiwgNjkwOTYsIDk5ODEsIDY5MTAwLCA2OTEwNSwgNjkxMTAsIDY5MTE0LCA2OTExNywgCisgICAgNjkxMjMsIDY5MTI3LCA2OTEzNywgNjkxNDYsIDY5MTQ5LCA2OTE1NiwgNjkxNjksIDY5MTc1LCA2OTE4MywgNjkxOTQsIAorICAgIDY5MjA1LCA2OTIxNiwgNjkyMjcsIDY5MjM2LCA2OTI0MiwgNjkyNTEsIDY5MjU5LCA2OTI2OSwgNjkyODIsIDY5Mjg5LCAKKyAgICA2OTMwMCwgNjkzMDYsIDY5MzExLCA2OTMxNiwgNjkzMjIsIDY5MzI4LCA2OTMzOCwgNjkzNDcsIDY3NjkyLCA2OTM1NSwgCisgICAgNjkzNjEsIDY5MzY5LCA2OTM3NSwgNjkzODMsIDY5Mzg3LCA2OTM5MSwgNjkzOTQsIDY5NDAwLCA2OTQwNiwgNjk0MTQsIAorICAgIDY5NDI2LCA2OTQzOCwgNjk0NDUsIDY5NDQ5LCA2OTQ2MCwgNjk0NjgsIDY5NDc1LCA2OTQ4NywgNjk0OTUsIDY5NTAzLCAKKyAgICA2OTUxMCwgNjk1MTYsIDY5NTI2LCA2OTUzNSwgNjk1NDAsIDY5NTUwLCA2OTU1OSwgMzgxODQsIDY5NTY2LCA2OTU3MCwgCisgICAgNjk1NzUsIDY5NTgzLCA2OTU5MCwgNjk1OTYsIDY5NjAwLCA2OTYxMCwgNjk2MjEsIDY5NjI5LCA2OTYzNiwgNjk2NDgsIAorICAgIDY5NjYwLCA2OTY2OSwgNjY3MzksIDY5Njc2LCA2OTY4NywgNjk3MDEsIDY5NzA5LCA2OTcxOSwgNjk3MjYsIDY5NzM0LCAKKyAgICA2OTc0NiwgNjk3NTUsIDY5NzYzLCA2OTc3MywgNjk3ODIsIDY5NzkzLCA2OTgwNSwgNjk4MTQsIDY5ODI0LCA2OTgzMSwgCisgICAgNjk4NDAsIDY5ODU1LCA2OTg2NSwgNjk4NzQsIDY5ODgyLCA2OTg5NSwgNjk5MTAsIDY5OTE0LCA2OTkyMywgNjk5MzUsIAorICAgIDY5OTQ2LCA2OTk1NywgNjk5NjgsIDY5OTc4LCA2OTk4OSwgNjk5OTcsIDcwMDAzLCA3MDAxMywgNzAwMTksIDI2OTIzLCAKKyAgICA3MDAyNCwgNzAwMzAsIDcwMDM1LCA3MDA0MiwgODA3NSwgMTU2ODQsIDcwMDQ4LCA3MDA1NywgNzAwNjIsIDcwMDY2LCAKKyAgICA3MDA3MywgNzAwNzksIDcwMDg0LCA3MDA5MiwgNzAxMDAsIDcwMTA0LCA3MDEwNywgNzAxMTAsIDcwMTEyLCA3MDExOSwgCisgICAgNzAxMjUsIDcwMTM2LCA3MDE0MSwgNzAxNDUsIDcwMTUyLCA3MDE1OCwgNzAxNjMsIDcwMTcxLCA2MjY0MiwgNjI2NTIsIAorICAgIDcwMTc3LCA3MDE4NCwgNzAxOTQsIDg5NzEsIDcwMjAxLCA3MDIwNiwgMjcxMTMsIDcwMjE1LCA3MDIyMCwgNzAyMjcsIAorICAgIDcwMjM3LCA3MDI0NSwgNzAyNTMsIDcwMjYyLCA3MDI2OCwgNzAyNzQsIDcwMjgxLCA3MDI4OCwgNzAyOTMsIDcwMjk3LCAKKyAgICA3MDMwNSwgNzAzMTAsIDcwMzE1LCA3MDMyMywgNzAzMzAsIDcwMzM1LCA3MDM0MSwgNzAzNDQsIDcwMzQ4LCA3MDM1NywgCisgICAgNjg5NDcsIDcwMzY2LCA3MDM3MCwgNzAzNzYsIDcwMzg3LCA3MDM5NywgMTU2OTMsIDcwNDA4LCA3MDQxNiwgMTU3MDUsIAorICAgIDcwNDIzLCA3MDQyNywgNzA0MzYsIDI1Mjk0LCA3MDQ0MywgNzA0NDcsIDcwNDUyLCA3MDQ2OSwgNzA0ODEsIDg5MjUsIAorICAgIDcwNDkzLCA3MDQ5OCwgNzA1MDMsIDcwNTA4LCA3MDUxMiwgNzA1MTUsIDcwNTIwLCA3MDUyNSwgNzA1MzEsIDcwNTM2LCAKKyAgICA0MzI0LCAxOTE4MSwgNzA1NDEsIDcwNTQ2LCA3MDU1MiwgNzA1NTksIDcwNTY0LCA3MDU2OSwgNzA1NzUsIDcwNTgxLCAKKyAgICA3MDU4NywgNzA1OTIsIDcwNTk4LCA3MDYwMiwgNzA2MTYsIDcwNjI0LCA3MDYzMiwgNzA2MzgsIDcwNjQzLCA3MDY1MCwgCisgICAgNzA2NjAsIDcwNjY5LCA3MDY3NCwgNzA2NzksIDcwNjg3LCA3MDY5MiwgNzA2OTgsIDcwNzAzLCA3MDcxMiwgNTcxNTQsIAorICAgIDcwNzE3LCA3MDcyMCwgNzA3MzgsIDcwNzU3LCA3MDc3MCwgNzA3ODQsIDcwODAwLCA3MDgwNywgNzA4MTQsIDcwODIwLCAKKyAgICA3MDgyNywgNzA4MzIsIDcwODM4LCA3MDg0NCwgNzA4NTIsIDcwODU4LCA3MDg2MywgNzA4NjgsIDcwODg0LCA4OTM4LCAKKyAgICA3MDg5OCwgNzA5MDUsIDcwOTEzLCA3MDkxOSwgNzA5MjMsIDcwOTI2LCA3MDkzMSwgNzA5MzYsIDcwOTQzLCA3MDk0OCwgCisgICAgNzA5NTcsIDcwOTYyLCA3MDk2OCwgNzA5NzcsIDcwOTg2LCA3MDk5MSwgNzA5OTUsIDcxMDAzLCAxMDAwNSwgNzEwMTIsIAorICAgIDcxMDIwLCA3MTAyNSwgNzEwMzEsIDEwMDE2LCA3MTAzNiwgNzEwMzksIDcxMDQ0LCA3MTA1NCwgNzEwNjMsIDcxMDY4LCAKKyAgICA3MTA3NCwgNzEwNzksIDcxMDg3LCA3MTA5NCwgNzExMDUsIDcxMTE1LCA3MTEyMCwgNjIxMDMsIDcxMTI1LCA3MTEzMSwgCisgICAgNzExMzYsIDcxMTQzLCA3MTE1MiwgNzExNjAsIDcxMTY2LCA3MTE3MywgNzExNzksIDcxMTgzLCAxNTE2MSwgMjk5MywgCisgICAgNzExODgsIDcxMTkyLCA3MTE5OCwgNzEyMDcsIDcxMjEzLCA3MTIyMCwgNzEyMjQsIDcxMjQ1LCA3MTI2NywgNzEyODMsIAorICAgIDcxMzAwLCA3MTMxOSwgNzEzMjgsIDcxMzM4LCA3MTM0NSwgNzEzNTIsIDI1MTgxLCA3MTM1OCwgNzEzNjIsIDcxMzcwLCAKKyAgICA3MTM4MiwgNzEzODgsIDcxMzk2LCA3MTQwMCwgNzE0MDgsIDcxNDE1LCA3MTQxOSwgNzE0MjUsIDcxNDMxLCA3MTQzNiwgCisgICAgMzQ5OCwgMzkzMDUsIDcxNDQyLCA3MTQ0NiwgNzE0NTAsIDcxNDU0LCA3MTQ1OSwgNzE0NjQsIDcxNDY5LCA3MTQ3NSwgCisgICAgNzE0ODEsIDcxNDg3LCA3MTQ5NCwgNzE1MDAsIDcxNTA3LCA3MTUxMywgNzE1MTksIDcxNTI0LCA3MTUzMCwgNzE1MzUsIAorICAgIDcxNTQwLCA3MTU0NCwgNzE1NDksIDM5MzIwLCA3MTU1MywgNzE1NTgsIDcxNTY2LCA3MTU3MCwgNzE1NzUsIDcxNTgyLCAKKyAgICA3MTU5MSwgNzE1OTcsIDcxNjA0LCA3MTYwOCwgNzE2MTEsIDcxNjE4LCA3MTYyNywgNzE2MzIsIDcxNjM2LCA3MTY0NCwgCisgICAgNzE2NTMsIDcxNjU3LCA3MTY2NSwgNzE2NzEsIDcxNjc2LCA3MTY4MSwgNzE2ODcsIDcxNjkzLCA3MTY5OCwgNzE3MDIsIAorICAgIDcxNzA4LCA3MTcxMywgNzE3MTcsIDcxNzIxLCA3MTcyNCwgNzE3MjksIDcxNzM3LCA3MTc0NywgNzE3NTIsIDM2ODY1LCAKKyAgICA3MTc2MCwgNzE3NzIsIDcxNzc2LCA3MTc4MiwgNzE3OTQsIDcxODA1LCA3MTgxMiwgNzE4MTgsIDcxODI1LCA3MTgzNywgCisgICAgNzE4NDQsIDcxODUwLCAxOTI1NSwgNzE4NTQsIDcxODYwLCA3MTg2NywgNzE4NzMsIDcxODc5LCA3MTg4NCwgNzE4ODksIAorICAgIDcxODk0LCA3MTkwMywgNTQ5MSwgNzE5MDgsIDE0NjI3LCA3MTkxNCwgNzE5MTgsIDcxOTI2LCA3MTkzNSwgNzE5MzksIAorICAgIDcxOTQ2LCA3MTk1NSwgNzE5NjgsIDcxOTc0LCA3MTU0NSwgMjc5NjIsIDcxOTc5LCA3MTk4MSwgNzE5ODYsIDcxOTkxLCAKKyAgICA3MTk5NiwgNzIwMDEsIDcyMDA2LCA3MjAxMSwgNzIwMTYsIDcyMDIxLCA3MjAyNiwgNzIwMzEsIDcyMDM2LCA3MjA0MSwgCisgICAgNzIwNDYsIDcyMDUxLCA3MjA1NywgNzIwNjIsIDcyMDY3LCA3MjA3MiwgNzIwNzcsIDcyMDgyLCA3MjA4NywgNzIwOTIsIAorICAgIDcyMDk3LCA3MjEwMywgNzIxMDksIDcyMTE1LCA3MjEyMCwgNzIxMjUsIDcyMTM3LCA3MjE0MiwgMTgzMywgNjcsIDcyMTQ3LCAKKyAgICA3MjE1MiwgMzA0ODUsIDMwNDkwLCAzMDQ5NSwgMzA1MDEsIDMwNTA2LCA3MjE1NiwgMzA1MTEsIDIwMjI2LCA3MjE3OCwgCisgICAgNzIxODIsIDcyMTg2LCA3MjE5MSwgNzIxOTUsIDMwNTE1LCA3MjE5OSwgNzIyMDcsIDMwNTIwLCA3MjIxNCwgNzIyMTcsIAorICAgIDcyMjIyLCA3MjIyNiwgNzkxMCwgNzIyMzUsIDMwNTI1LCAyMDA5MiwgNzIyMzgsIDcyMjQyLCAxMzk2LCA3MjI0NywgCisgICAgMzA1MzYsIDcyMjUwLCA3MjI1NSwgMjM3MjAsIDIzNzMwLCAzMjk0MCwgNzIyNjAsIDcyMjY1LCA3MjI3MCwgNzIyNzUsIAorICAgIDcyMjgxLCA3MjI4NiwgNzIyOTUsIDcyMzAwLCA3MjMwNywgNzIzMTMsIDcyMzE4LCA3MjMyMywgNzIzMjgsIDcyMzM4LCAKKyAgICA3MjM0NywgNzIzNTIsIDcyMzYwLCA3MjM2NCwgNzIzNzIsIDMwMzUwLCAxMTg4LCA3MjM3OSwgNzIzODUsIDcyMzkwLCAKKyAgICA3MjM5NSwgNzI0MDAsIDcyNDA2LCA3MjQxMSwgNzI0MTgsIDcyNDI0LCA3MjQyOSwgNzI0MzcsIDcyNDQ3LCA3MjQ1NywgCisgICAgNzI0NjMsIDcyNDY4LCA3MjQ3NCwgMTU3MTUsIDcyNDgxLCAzMzc0NSwgNzI0OTQsIDcyNDk5LCA3MjUwNSwgNzI1MTgsIAorICAgIDcyNTI0LCA3MjUyOCwgNzI1MzcsIDcyNTQ0LCA3MjU1MCwgNzI1NTgsIDcyNTY3LCA3MjU3NCwgNzI1ODAsIDcyNTgzLCAKKyAgICAyMzg2MSwgNzI1ODcsIDcyNTk0LCA3MjYwMCwgNzI2MDgsIDcyNjEzLCAyMjAzNSwgNzI2MTksIDcyNjIyLCA3MjYzMCwgCisgICAgNzI2MzgsIDcyNjUyLCA3MjY1OSwgNzI2NjUsIDcyNjcyLCA3MjY3OCwgMzA1NTAsIDcyNjgyLCA3MjY4OSwgNzI2OTcsIAorICAgIDcyNzA1LCAzMDU1NSwgNzI3MTEsIDcyNzE3LCA3MjcyMiwgNzI3MzIsIDcyNzM4LCA3Mjc0NywgMjg2NzcsIDMyNDE1LCAKKyAgICA3Mjc1NSwgNzI3NjAsIDcyNzY1LCA3Mjc3MCwgNzI3NzQsIDEzMTcwLCAzNjg3OCwgNzI3NzksIDcyNzg0LCAzMDU2MCwgCisgICAgNTk1NTQsIDcyNzg4LCA3Mjc5MywgNzI3OTcsIDcyODA2LCA3MjgxNCwgNzI4MjAsIDcyODI1LCA3MjgzMSwgNzI4MzgsIAorICAgIDcyODQ0LCA3Mjg0OSwgNzI4NTQsIDcyODYzLCA3Mjg3NSwgNzI4OTAsIDMwODAxLCA3Mjg5NiwgMTQ3NDYsIDMwNTY0LCAKKyAgICA3MjkwMCwgNzI5MDcsIDIyMTQ1LCA3MjkxMywgNzI5MjAsIDcyOTI5LCA3MjkzNiwgNzI5NDUsIDcyOTUxLCA3Mjk1NiwgCisgICAgNzI5NjQsIDcyOTcwLCAzMDU3NCwgNzI5NzUsIDcyOTg0LCA3MTgwMCwgNzI5OTMsIDczMDAwLCA3MzAwNiwgNzMwMTIsIAorICAgIDczMDIyLCA3MzAzMCwgNzMwMzcsIDczMDQxLCAzMDU3OSwgNzMwNDQsIDMwNTg1LCAzMDU5MSwgNzMwNDksIDczMDU3LCAKKyAgICA3MzA2NywgNzMwNzYsIDczMDg0LCA3MzA5MSwgNzMxMDEsIDMwNTk2LCA3MzEwNSwgNzMxMDcsIDczMTExLCA3MzExNiwgCisgICAgNzMxMjAsIDczMTI0LCA3MzEzMCwgNzMxMzUsIDczMTM5LCA3MzE1MCwgNzMxNTUsIDI5OTgsIDczMTU5LCA3MzE2NiwgCisgICAgNzMxNzAsIDczMTc5LCA3MzE4NywgNzMxOTQsIDczMTk5LCA3MzIwNCwgNTk2MDAsIDczMjA4LCA3MzIxMSwgNzMyMTcsIAorICAgIDczMjI1LCA3MzIzMSwgNzMyMzUsIDczMjQwLCA3MzI0NywgNzMyNTIsIDczMjU4LCAzMjQ0NiwgNzMyNjMsIDczMjY2LCAKKyAgICA3MzI3MSwgNzMyNzUsIDczMjgwLCA3MzI4NSwgNzMyODksIDczMjk3LCAyMzczOSwgMjM3NDgsIDczMzAzLCA3MzMwOSwgCisgICAgNzMzMTUsIDczMzIwLCA3MzMyNCwgNzMzMjcsIDczMzM3LCA3MzM0NiwgNzMzNTEsIDczMzU3LCA3MzM2NCwgNzMzNzAsIAorICAgIDczMzc0LCA3MzM4MiwgNzMzODcsIDMyNDUyLCA3MzM5MSwgNzMzOTksIDczNDA1LCA3MzQxMiwgNzM0MTcsIDczNDIxLCAKKyAgICA3MzQyNiwgNTU3OTEsIDMyNDU4LCA3MzQzMiwgNzM0MzcsIDczNDQxLCA3MzQ0NiwgNzM0NTEsIDczNDU2LCA3MzQ2MCwgCisgICAgNzM0NjUsIDczNDcwLCA3MzQ3NiwgNzM0ODEsIDczNDg2LCA3MzQ5MiwgNzM0OTgsIDczNTAzLCA3MzUwNywgNzM1MTIsIAorICAgIDczNTE3LCA3MzUyMiwgNzM1MjYsIDIyMTQ0LCA3MzUzMSwgNzM1MzYsIDczNTQyLCA3MzU0OCwgNzM1NTQsIDczNTU5LCAKKyAgICA3MzU2MywgNzM1NjgsIDczNTczLCA3MzU3OCwgNzM1ODIsIDczNTg3LCA3MzU5MiwgNzM1OTcsIDczNjAyLCA3MzYwNiwgCisgICAgMzA2MDAsIDczNjE0LCA3MzYxOCwgNzM2MjYsIDczNjM0LCA3MzY0NSwgNzM2NTAsIDczNjU0LCAyMDQ5NywgNzM2NTksIAorICAgIDczNjY1LCA3MzY3NSwgNzM2ODIsIDczNjg3LCA3MzY5NiwgNzM3MDEsIDczNzA1LCA3MzcxMCwgNzM3MTgsIDczNzI2LCAKKyAgICA3MzczMywgNjIzMjEsIDczNzM5LCA3Mzc0NywgNzM3NTQsIDczNzY1LCA3Mzc3MSwgNzM3NzcsIDMwNjEwLCA3Mzc4MCwgCisgICAgNzM3ODcsIDczNzk1LCA3MzgwMCwgMzcwNjksIDczODA0LCA3MzgwOSwgNzM4MTYsIDczODIxLCA3Mzg5LCA3MzgyNSwgCisgICAgNzM4MzMsIDczODQwLCA3Mzg0NywgNzM4NTMsIDczODY3LCA2MDYyOSwgNzM4NzUsIDczODgxLCA3Mzg4NSwgNzM4ODgsIAorICAgIDczODk2LCA3MzkwMywgNzM5MDgsIDczOTIxLCA3MzkyOCwgNzM5MzUsIDczOTQwLCA1ODE3NCwgNzM5NDUsIDczOTQ4LCAKKyAgICA3Mzk1NSwgNzM5NjEsIDczOTY1LCA3Mzk3MywgNzM5ODMsIDczOTkzLCA3NDAwMiwgNzQwMTAsIDc0MDIxLCA3NDAyNiwgCisgICAgNzQwMzAsIDc0MDM1LCA3NDAzOSwgMzMwNzEsIDE5NTA5LCAzMzA4MCwgNzQwNDcsIDc0MDUyLCA3NDA1NywgNzQwNjIsIAorICAgIDc0MDY3LCA3NDA3MiwgNzQwNzcsIDc0MDgxLCA3NDA4NiwgNzQwOTEsIDc0MDk2LCA3NDEwMSwgNzQxMDYsIDc0MTExLCAKKyAgICA3NDExNSwgNzQxMjAsIDc0MTI1LCA3NDEyOSwgNzQxMzMsIDc0MTM3LCA3NDE0MSwgNzQxNDYsIDc0MTUxLCA3NDE1NSwgCisgICAgNzQxNjAsIDc0MTY0LCA3NDE2OCwgNzQxNzMsIDc0MTc4LCA3NDE4MywgNzQxODgsIDc0MTkyLCA3NDE5NywgNzQyMDIsIAorICAgIDc0MjA2LCA3NDIxMSwgNzQyMTYsIDc0MjIxLCA3NDIyNiwgNzQyMzEsIDc0MjM2LCA3NDI0MSwgNzQyNDYsIDc0MjUxLCAKKyAgICA3NDI1NiwgNzQyNjEsIDc0MjY2LCA3NDI3MSwgNzQyNzYsIDc0MjgxLCA3NDI4NiwgNzQyOTEsIDc0Mjk2LCA3NDMwMSwgCisgICAgNzQzMDYsIDc0MzEwLCA3NDMxNSwgNzQzMjAsIDc0MzI1LCA3NDMzMCwgNzQzMzUsIDc0MzQwLCA3NDM0NSwgNzQzNTAsIAorICAgIDc0MzU1LCA3NDM2MCwgNzQzNjUsIDc0MzY5LCA3NDM3NCwgNzQzNzgsIDc0MzgzLCA3NDM4OCwgNzQzOTMsIDc0Mzk4LCAKKyAgICA3NDQwMywgNzQ0MDgsIDc0NDEzLCA3NDQxOCwgNzQ0MjMsIDc0NDI3LCA3NDQzMSwgNzQ0MzYsIDc0NDQxLCA3NDQ0NSwgCisgICAgNzQ0NTAsIDc0NDU1LCA3NDQ1OSwgNzQ0NjQsIDc0NDY5LCA3NDQ3NCwgNzQ0NzksIDc0NDgzLCA3NDQ4OCwgNzQ0OTMsIAorICAgIDc0NDk3LCA3NDUwMiwgNzQ1MDYsIDc0NTEwLCA3NDUxNCwgNzQ1MTgsIDc0NTIzLCA3NDUyNywgNzQ1MzEsIDc0NTM1LCAKKyAgICA3NDUzOSwgNzQ1NDMsIDc0NTQ3LCA3NDU1MSwgNzQ1NTUsIDc0NTU5LCA3NDU2NCwgNzQ1NjksIDc0NTc0LCA3NDU3OSwgCisgICAgNzQ1ODQsIDc0NTg5LCA3NDU5NCwgNzQ1OTksIDc0NjA0LCA3NDYwOSwgNzQ2MTMsIDc0NjE3LCA3NDYyMSwgNzQ2MjUsIAorICAgIDc0NjI5LCA3NDYzMywgNzQ2MzgsIDc0NjQyLCA3NDY0NywgNzQ2NTEsIDc0NjU2LCA3NDY2MSwgNzQ2NjUsIDc0NjY5LCAKKyAgICA3NDY3NCwgNzQ2NzgsIDc0NjgyLCA3NDY4NiwgNzQ2OTAsIDc0Njk0LCA3NDY5OCwgNzQ3MDIsIDc0NzA2LCA3NDcxMCwgCisgICAgNzQ3MTQsIDc0NzE4LCA3NDcyMiwgNzQ3MjYsIDc0NzMwLCA3NDczNSwgNzQ3NDAsIDc0NzQ0LCA3NDc0OCwgNzQ3NTIsIAorICAgIDc0NzU2LCA3NDc2MCwgNzQ3NjQsIDc0NzY5LCA3NDc3MywgNzQ3NzcsIDc0NzgxLCA3NDc4NSwgNzQ3ODksIDc0NzkzLCAKKyAgICA3NDc5OCwgNzQ4MDIsIDc0ODA3LCA3NDgxMSwgNzQ4MTUsIDc0ODE5LCA3NDgyMywgNzQ4MjcsIDc0ODMxLCA3NDgzNSwgCisgICAgNzQ4MzksIDc0ODQzLCA3NDg0NywgNzQ4NTEsIDc0ODU2LCA3NDg2MCwgNzQ4NjQsIDc0ODY4LCA3NDg3MiwgNzQ4NzYsIAorICAgIDc0ODgwLCA3NDg4NCwgNzQ4ODgsIDc0ODkyLCA3NDg5NiwgNzQ5MDAsIDc0OTA1LCA3NDkwOSwgNzQ5MTMsIDc0OTE4LCAKKyAgICA3NDkyMywgNzQ5MjcsIDc0OTMxLCA3NDkzNSwgNzQ5MzksIDc0OTQzLCA3NDk0NywgNzQ5NTEsIDc0OTU1LCA3NDk2MCwgCisgICAgNzQ5NjQsIDc0OTY5LCA3NDk3MywgNzQ5NzgsIDc0OTgyLCA3NDk4NywgNzQ5OTEsIDc0OTk3LCA3NTAwMiwgNzUwMDYsIAorICAgIDc1MDExLCA3NTAxNSwgNzUwMjAsIDc1MDI0LCA3NTAyOSwgNzUwMzMsIDc1MDM4LCAxNDg0LCA3NTA0MiwgMjc3OCwgMTcyMiwgCisgICAgMTcyNywgNzUwNDYsIDc1MDUwLCAyNzgyLCA3NTA1NCwgMTM2NSwgNzUwNTksIDEzMzEsIDc1MDYzLCAyNzk0LCA3NTA2NywgCisgICAgNzUwNzQsIDc1MDgxLCA3NTA5NSwgMjc5OCwgNTU4OSwgNzUxMDQsIDc1MTEyLCA3NTExOSwgNzUxMzAsIDc1MTM5LCAKKyAgICA3NTE0NiwgNzUxNTgsIDc1MTcxLCA3NTE4NCwgNzUxOTUsIDc1MjAwLCA3NTIwNywgNzUyMTksIDc1MjIzLCAzOTE4LCAKKyAgICAxMDA4MiwgNzUyMzMsIDc1MjM4LCA3NTI0NywgNzUyNTcsIDI4MDIsIDc1MjYyLCA3NTI2NiwgNzUyNzEsIDc1Mjc4LCAKKyAgICA3NTI4NCwgNzUyOTIsIDc1MzA0LCAxMzM2LCAxMTM1MSwgNzUzMTQsIDc1MzE4LCA3NTMyNCwgNzUzMzgsIDc1MzUwLCAKKyAgICA3NTM2MiwgNzUzNzIsIDc1MzgxLCA3NTM5MCwgNzUzOTksIDc1NDA3LCA3NTQxOCwgNzU0MjYsIDM5NjgsIDc1NDM2LCAKKyAgICA3NTQ0NSwgNzU0NTEsIDc1NDY2LCA3NTQ3MywgNzU0NzksIDMzMTk3LCA3NTQ4NCwgMjgyNiwgMTEzNTUsIDc1NDg4LCAKKyAgICA3NTQ5NSwgNzMzNCwgNzU1MDQsIDI4MzEsIDMwMTA1LCA3NTUxMCwgNTc5MjMsIDc1NTE3LCA3NTUyMywgNzU1MzQsIAorICAgIDc1NTQwLCA3NTU0NywgNzU1NTMsIDc1NTYxLCA3NTU2OCwgNzU1NzQsIDc1NTg0LCA3NTU5MywgNzU2MDQsIDc1NjExLCAKKyAgICA3NTYxNywgNzU2MjcsIDc1NjM1LCA3NTY0MSwgNzU2NTYsIDc1NjYyLCA3NTY2NywgNzU2NzQsIDc1Njc3LCA3NTY4MywgCisgICAgNzU2OTAsIDc1Njk2LCA3NTcwNCwgNzU3MTMsIDc1NzIxLCA3NTcyNywgNzU3MzYsIDM4ODQ1LCA3NTc1MCwgNzU3NTUsIAorICAgIDEzMDA3LCA3NTc2MSwgNzU3NzQsIDc1NzgzLCA3NTc5MSwgNzU3OTgsIDc1ODAyLCA3NTgwNiwgNzU4MDksIDc1ODE2LCAKKyAgICA3NTgyMywgNzU4MzEsIDc1ODM5LCA3NTg0OCwgNzU4NTYsIDEyOTQzLCA3NTg2NCwgNzU4NjksIDc1ODczLCA3NTg4NSwgCisgICAgNzU4OTIsIDc1OTAxLCA3ODAsIDc1OTExLCA3NTkyMCwgNzU5MzEsIDI4NDcsIDc1OTM1LCA3NTkzOSwgNzU5NDUsIDc1OTU4LCAKKyAgICA3NTk3MCwgNzU5ODAsIDc1OTg5LCAyNDMzMSwgNzYwMDEsIDc2MDA5LCA3NjAxOCwgNzYwMjksIDc2MDQwLCA3NjA1MCwgCisgICAgNzYwNjAsIDc2MDY5LCA3NjA3NywgOTY1NywgNzYwODQsIDc2MDg4LCA3NjA5MywgNzYwOTgsIDc2MTA0LCAxMzQxLCAKKyAgICAxMDE1MywgNzYxMTEsIDc2MTIyLCA3NjEzMSwgNzYxMzksIDc2MTQ4LCA3NjE1NiwgNzYxNzIsIDc2MTgzLCA3NjE5MiwgCisgICAgNzYyMDAsIDc2MjEyLCA3NjIyMywgNzYyMzksIDc2MjQ5LCA3NjI3MCwgNzYyODMsIDc2MjkxLCA3NjI5OCwgMTMxMTgsIAorICAgIDc2MzExLCA3NjMxNiwgNzYzMjIsIDQzODYsIDc2MzI4LCA3NjMzMSwgNzYzMzgsIDc2MzQ4LCA2NjA3LCA3NjM1NSwgCisgICAgNzYzNjAsIDc2MzY1LCA3NjM3MywgNzYzODEsIDgxMjMsIDgxMzIsIDc2Mzg2LCA3NjM5NywgNzY0MDIsIDc2NDA4LCAyODU1LCAKKyAgICAyODYwLCA3NjQxNCwgOTIyNCwgNzY0MjAsIDc2NDI3LCA3NjQzNCwgNzY0NDcsIDIyMDUsIDUwLCA3NjQ1MiwgNzY0NTcsIAorICAgIDc2NDY3LCA3NjQ3MywgNzY0ODIsIDc2NDkwLCA3NjUwMCwgNzY1MDQsIDc2NTA5LCA3NjUxMywgNzY1MjUsIDI4ODMsIAorICAgIDc2NTMzLCA3NjU0MSwgNzY1NDYsIDc2NTU3LCA3NjU2OCwgNzY1NzcsIDc2NTgyLCA3NjU4OCwgNzY1OTMsIDc2NjAzLCAKKyAgICA3NjYxMywgNzY2MTgsIDc2NjI0LCA3NjYyOSwgNzY2MzgsIDE5NTYyLCA3NjY0MiwgNDA0NSwgMTIsIDc2NjQ3LCA3NjY1NiwgCisgICAgNzY2NjMsIDc2NjcwLCA3NjY3NiwgNzY2ODIsIDgyNywgNzY2ODcsIDc2NjkyLCA1ODI0MCwgNzY2OTcsIDc2NzAyLCAKKyAgICA3NjcwOCwgNzY3MTYsIDc2NzIxLCA3NjcyOCwgNzY3MzQsIDc2NzM5LCAzNTU3MywgMzg3NDMsIDc2NzQ1LCAyODg3LCAzMiwgCisgICAgNzY3NTUsIDc2NzY4LCA3Njc3MywgNzY3ODEsIDc2Nzg2LCA3Njc5MiwgMjkwOSwgMjYyMzQsIDc2Nzk3LCA3NjgwNSwgCisgICAgNzY4MTIsIDc2ODE3LCA1NjAzMywgNTkyMjEsIDc2ODI2LCAxNjY3LCAxNzc2LCA3NjgzMSwgNzY4MzYsIDc2ODQzLCAxNzgwLCAKKyAgICAyNDIsIDc2ODUwLCA3Njg1NiwgNzY4NjEsIDc2ODY4LCAxNzg0LCA3Njg3MywgNzY4NzksIDc2ODg0LCA3Njg5NiwgNDU5NywgCisgICAgNzY5MDYsIDE3OTEsIDc2OTEyLCA3NjkxNywgNzY5MjQsIDc2OTMxLCA3Njk0NiwgNzY5NTMsIDc2OTY0LCA3Njk3MiwgCisgICAgMjU3MiwgNzY5NzYsIDc2OTg4LCA3Njk5MywgNzY5OTcsIDc3MDAzLCAyNjA1OSwgMjIxMCwgNzcwMDcsIDc3MDE4LCAKKyAgICA3NzAyMiwgNzcwMjYsIDc3MDMyLCA3NzAzNiwgNzcwNDUsIDc3MDQ5LCA3NzA2MCwgNzcwNjQsIDIyNTYsIDI5OTQ0LCAKKyAgICA3NzA2OCwgNzcwNzgsIDMwMTgsIDc3MzgsIDc3MDg2LCA3NzA5MSwgNzcwOTUsIDc3MTA0LCA3NzExMSwgNzcxMTcsIDI5ODgsIAorICAgIDE1MzQzLCA3NzEyMSwgNzcxMzQsIDc3MTUyLCA3NzE1NywgNzcxNjUsIDc3MTczLCA3NzE4MywgMTE0NTcsIDc3MTk1LCAKKyAgICA3NzIwOCwgNzcyMTUsIDc3MjIyLCA3NzIzOCwgNzcyNDUsIDc3MjUxLCAxMDI0LCA3NzI1OCwgNzcyNjUsIDc3Mjc1LCAKKyAgICA3NzI4NCwgNzcyOTYsIDM5NzA5LCA3NzMwNCwgMzAwMiwgMTAzNTAsIDc3MzA3LCA3NzMxNSwgNzczMTksIDMwMDYsIAorICAgIDc3MzIzLCAxOTM1OCwgMTAzNjYsIDM2ODQsIDc3MzI3LCAzMDEyLCA3NzMzMSwgNzczNDEsIDc3MzQ3LCA3NzM1MywgCisgICAgNzczNTksIDc3MzY1LCA3NzM3MSwgNzczNzcsIDc3MzgzLCA3NzM4OSwgNzczOTUsIDc3NDAxLCA3NzQwNywgNzc0MTMsIAorICAgIDc3NDE5LCA3NzQyNSwgNzc0MzEsIDc3NDM3LCA3NzQ0MywgNzc0NDksIDc3NDU1LCA3NzQ2MSwgNzc0NjcsIDc3NDczLCAKKyAgICA3NzQ3OSwgNzc0ODUsIDc3NDkxLCA3NzQ5OCwgNzc1MDUsIDc3NTExLCA3NzUxNywgNzc1MjMsIDc3NTI5LCA3NzUzNSwgCisgICAgNzc1NDEsIDEzNDYsIDE0MjcwLCAxMDM4OCwgNzc1NDcsIDc3NTUyLCA3NzU1NywgNzc1NjIsIDc3NTY3LCA3NzU3MiwgCisgICAgNzc1NzcsIDc3NTgyLCA3NzU4NywgNzc1OTIsIDc3NTk3LCA3NzYwMiwgNzc2MDcsIDc3NjEyLCA3NzYxNywgNzc2MjIsIAorICAgIDc3NjI3LCA3NzYzMiwgNzc2MzcsIDc3NjQyLCA3NzY0NywgNzc2NTIsIDc3NjU3LCA3NzY2MiwgNzc2NjcsIDc3NjcyLCAKKyAgICA3NzY3OCwgNzc2ODMsIDc3Njg4LCA3NzY5NCwgNzc2OTksIDc3NzA1LCA3NzcxMCwgNzc3MTUsIDc3NzIxLCA3NzcyNiwgCisgICAgNzc3MzEsIDc3NzM2LCA3Nzc0MSwgNzc3NDYsIDc3NzUxLCA3Nzc1NiwgNzc3NjEsIDc3MzQyLCA3NzM0OCwgNzczNTQsIAorICAgIDc3MzYwLCA3NzM2NiwgNzczNzIsIDc3Mzc4LCA3NzM4NCwgNzczOTAsIDc3Mzk2LCA3NzQwMiwgNzc0MDgsIDc3NDE0LCAKKyAgICA3NzQyMCwgNzc0MjYsIDc3NzY3LCA3NzQzMiwgNzc0MzgsIDc3NDQ0LCA3Nzc3MywgNzc0NTAsIDc3NDU2LCA3NzQ2MiwgCisgICAgNzc0NjgsIDc3NDc0LCA3NzQ4MCwgNzc0ODYsIDc3NTA2LCA3Nzc3OSwgNzc3ODUsIDc3NTEyLCA3Nzc5MSwgNzc1MTgsIAorICAgIDc3NTI0LCA3NzUzMCwgNzc1MzYsIDc3NTQyLCAzMDMzLCAzMDM4LCA3Nzc5NywgNzc4MDIsIDc3ODA1LCA3NzgxMSwgCisgICAgNzc4MTcsIDc3ODI0LCA3NzgyOSwgNzc4MzQsIDIyNjEsIAogfTsKIAogLyogY29kZS0+bmFtZSBwaHJhc2Vib29rICovCiAjZGVmaW5lIHBocmFzZWJvb2tfc2hpZnQgNwotI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIyMgorI2RlZmluZSBwaHJhc2Vib29rX3Nob3J0IDIxMQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcGhyYXNlYm9va1tdID0gewotICAgIDAsIDIyOCwgMTQ1LCAyNDcsIDE0OSwgNzYsIDIzMiwgNTcsIDc2LCA2NSwgNTMsIDI0OSwgMTUwLCA1MywgMjMzLCAxMjMsIAotICAgIDUzLCAyNTQsIDE5MywgMjU0LCAxNDQsIDQyLCAyMzMsIDE4MCwgNDEsIDIzMywgMTgwLCAyNTQsIDY5LCA3OSwgNTMsIDI1MSwgCi0gICAgNTQsIDI0NCwgOTQsIDI0NiwgMjE4LCAyMjgsIDM4LCAyMjgsIDE2MSwgMjEsIDIyMywgODksIDIxLCAxMTgsIDIxLCAxMTMsIAotICAgIDIxLCAxNjYsIDIxLCAxNTgsIDIxLCAxNzMsIDIxLCAxODMsIDIxLCAxOTQsIDIxLCAxODcsIDIxLCAxOTIsIDI1MSwgNjEsIAotICAgIDIyOSwgMTg2LCAyMzcsIDIxMywgNTMsIDI0NywgMjA0LCA1MywgMjQ1LCAyMzEsIDUzLCAyMzIsIDY5LCA3NiwgMjUxLCA1MywgCi0gICAgMjU0LCA2MiwgNywgNiwgMSwgNTcsIDcsIDYsIDEsIDI1NCwgMjcsIDcsIDYsIDEsIDI1MiwgNDQsIDcsIDYsIDEsIDIyMiwgCi0gICAgMjIyLCA3LCA2LCAxLCA3MiwgNywgNiwgMSwgMjQ3LCAxMzAsIDcsIDYsIDEsIDIxNCwgNywgNiwgMSwgMjEyLCA3LCA2LCAxLCAKLSAgICA3NCwgNywgNiwgMSwgMjM5LCAxODIsIDcsIDYsIDEsIDIzOSwgNzYsIDcsIDYsIDEsIDE0OSwgNywgNiwgMSwgMTg1LCA3LCAKLSAgICA2LCAxLCAxOTksIDcsIDYsIDEsIDczLCA3LCA2LCAxLCAyMzMsIDI0NCwgNywgNiwgMSwgMjMyLCAxMzksIDcsIDYsIDEsIAotICAgIDE0NiwgNywgNiwgMSwgMTkzLCA3LCA2LCAxLCAyMjcsIDEwOSwgNywgNiwgMSwgNjYsIDcsIDYsIDEsIDE5NiwgNywgNiwgMSwgCi0gICAgMjI0LCAxNzQsIDcsIDYsIDEsIDIyNCwgNzMsIDcsIDYsIDEsIDIyNCwgMjUsIDcsIDYsIDEsIDIyMywgMTE5LCA0MiwgMzcsIAotICAgIDEwNCwgMjMxLCAxOTMsIDIyOCwgMTYxLCA0MSwgMzcsIDEwNCwgMjUxLCAxMDIsIDI1NSwgNDEsIDE4NCwgMjM3LCAxNzAsIAotICAgIDI0NSwgMjM3LCAyNTUsIDQxLCA3LCAzLCAxLCA1NywgNywgMywgMSwgMjU0LCAyNywgNywgMywgMSwgMjUyLCA0NCwgNywgMywgCi0gICAgMSwgMjIyLCAyMjIsIDcsIDMsIDEsIDcyLCA3LCAzLCAxLCAyNDcsIDEzMCwgNywgMywgMSwgMjE0LCA3LCAzLCAxLCAyMTIsIAotICAgIDcsIDMsIDEsIDc0LCA3LCAzLCAxLCAyMzksIDE4MiwgNywgMywgMSwgMjM5LCA3NiwgNywgMywgMSwgMTQ5LCA3LCAzLCAxLCAKLSAgICAxODUsIDcsIDMsIDEsIDE5OSwgNywgMywgMSwgNzMsIDcsIDMsIDEsIDIzMywgMjQ0LCA3LCAzLCAxLCAyMzIsIDEzOSwgNywgCi0gICAgMywgMSwgMTQ2LCA3LCAzLCAxLCAxOTMsIDcsIDMsIDEsIDIyNywgMTA5LCA3LCAzLCAxLCA2NiwgNywgMywgMSwgMTk2LCA3LCAKLSAgICAzLCAxLCAyMjQsIDE3NCwgNywgMywgMSwgMjI0LCA3MywgNywgMywgMSwgMjI0LCAyNSwgNywgMywgMSwgMjIzLCAxMTksIAotICAgIDQyLCAyNTAsIDIyMywgMTA0LCA2MSwgMjM3LCAxNzAsIDQxLCAyNTAsIDIyMywgMTA0LCAyMDUsIDIzNSwgNSwgMjI4LCAKLSAgICAxNDUsIDIzOSwgMjIzLCAyNDcsIDE0OSwgNzYsIDI1MSwgMjIwLCA1MywgMjMyLCAyMzQsIDUzLCAyNTAsIDIyMiwgNTMsIAotICAgIDIyMywgMjIyLCA1MywgMjUyLCA5OSwgMTI1LCAyMzAsIDIwNiwgNTMsIDIxOSwgMjUxLCAxMywgNTMsIDI0NywgODEsIDIzNCwgCi0gICAgMjksIDI0MCwgNywgMjM3LCAyMzUsIDQ3LCAyNTQsIDE4MiwgMjMyLCA1NywgNzYsIDE5MCwgNTMsIDIyOCwgMTY1LCAyNDQsIAotICAgIDk1LCAyMzEsIDIyNywgNTMsIDIzNywgNjMsIDI1MCwgNjIsIDUzLCAyMzMsIDksIDUzLCAyMjcsIDIxOSwgMTEzLCAyMjcsIAotICAgIDIxOSwgMTY2LCAyNTUsIDMzLCAyNTUsIDQxLCAyMzYsIDE1NiwgNTMsIDIzMywgMzgsIDUzLCAyMzYsIDE1NCwgMjQ5LCAKLSAgICAxNDAsIDI1MSwgMjI2LCAyMjcsIDIxOSwgMTE4LCAyMzcsIDgsIDIzNCwgMjksIDI0MCwgNywgMjMxLCAxNTEsIDQ3LCAyNTQsIAotICAgIDE4MiwgMjMyLCA1NywgNzYsIDIyNCwgMTg5LCAyNDYsIDIzNSwgMTY4LCAyMzIsIDc2LCAyMjQsIDE4OSwgMjQ2LCAyMzUsIAotICAgIDE2OCwgMjQ1LCAxNTEsIDIyNCwgMTg5LCAyNDYsIDIzNSwgMTUyLCAyMzIsIDc0LCAyMzksIDIyMywgMjMyLCA2OSwgNzYsIAotICAgIDcsIDYsIDEsIDEwMiwgMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDEwMiwgMiwgMTU1LCA3LCA2LCAxLCAxMDIsIDIsIDI1MSwgCi0gICAgMTAxLCA3LCA2LCAxLCAxMDIsIDIsIDIwNSwgNywgNiwgMSwgMTAyLCAyLCAyMTksIDcsIDYsIDEsIDEwMiwgMiwgMjMxLCAKLSAgICAxNDAsIDQ2LCA3LCA2LCAxLCAyNTUsIDE5LCA3LCA2LCAxLCAyNTIsIDQ1LCAyLCAyNTEsIDIyNiwgNywgNiwgMSwgMTYxLCAKLSAgICAyLCAyNDUsIDIzNiwgNywgNiwgMSwgMTYxLCAyLCAxNTUsIDcsIDYsIDEsIDE2MSwgMiwgMjUxLCAxMDEsIDcsIDYsIDEsIAotICAgIDE2MSwgMiwgMjE5LCA3LCA2LCAxLCAyNDQsIDgxLCAyLCAyNDUsIDIzNiwgNywgNiwgMSwgMjQ0LCA4MSwgMiwgMTU1LCA3LCAKLSAgICA2LCAxLCAyNDQsIDgxLCAyLCAyNTEsIDEwMSwgNywgNiwgMSwgMjQ0LCA4MSwgMiwgMjE5LCA3LCA2LCAxLCAyNDcsIDE2OCwgCi0gICAgNywgNiwgMSwgMjM2LCA1LCAyLCAyMDUsIDcsIDYsIDEsIDEzMCwgMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDEzMCwgMiwgMTU1LCAKLSAgICA3LCA2LCAxLCAxMzAsIDIsIDI1MSwgMTAxLCA3LCA2LCAxLCAxMzAsIDIsIDIwNSwgNywgNiwgMSwgMTMwLCAyLCAyMTksIAotICAgIDIzNiwgNTIsIDUzLCA3LCA2LCAxLCAxMzAsIDIsIDgyLCA3LCA2LCAxLCA5NywgMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDk3LCAKLSAgICAyLCAxNTUsIDcsIDYsIDEsIDk3LCAyLCAyNTEsIDEwMSwgNywgNiwgMSwgOTcsIDIsIDIxOSwgNywgNiwgMSwgMjI0LCAyNiwgCi0gICAgMiwgMTU1LCA3LCA2LCAxLCAyMjYsIDE5NiwgNywgMywgMSwgMjI5LCAxMjQsIDE5MywgNywgMywgMSwgMTAyLCAyLCAyNDUsIAotICAgIDIzNiwgNywgMywgMSwgMTAyLCAyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjUxLCAxMDEsIDcsIDMsIDEsIDEwMiwgMiwgCi0gICAgMjA1LCA3LCAzLCAxLCAxMDIsIDIsIDIxOSwgNywgMywgMSwgMTAyLCAyLCAyMzEsIDE0MCwgNDYsIDcsIDMsIDEsIDI1NSwgCi0gICAgMTksIDcsIDMsIDEsIDI1MiwgNDUsIDIsIDI1MSwgMjI2LCA3LCAzLCAxLCAxNjEsIDIsIDI0NSwgMjM2LCA3LCAzLCAxLCAKLSAgICAxNjEsIDIsIDE1NSwgNywgMywgMSwgMTYxLCAyLCAyNTEsIDEwMSwgNywgMywgMSwgMTYxLCAyLCAyMTksIDcsIDMsIDEsIAotICAgIDI0NCwgODEsIDIsIDI0NSwgMjM2LCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAxNTUsIDcsIDMsIDEsIDI0NCwgODEsIDIsIDI1MSwgCi0gICAgMTAxLCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyMTksIDcsIDMsIDEsIDI0NywgMTY4LCA3LCAzLCAxLCAyMzYsIDUsIDIsIAotICAgIDIwNSwgNywgMywgMSwgMTMwLCAyLCAyNDUsIDIzNiwgNywgMywgMSwgMTMwLCAyLCAxNTUsIDcsIDMsIDEsIDEzMCwgMiwgCi0gICAgMjUxLCAxMDEsIDcsIDMsIDEsIDEzMCwgMiwgMjA1LCA3LCAzLCAxLCAxMzAsIDIsIDIxOSwgMjQ5LCAxODEsIDUzLCA3LCAzLCAKLSAgICAxLCAxMzAsIDIsIDgyLCA3LCAzLCAxLCA5NywgMiwgMjQ1LCAyMzYsIDcsIDMsIDEsIDk3LCAyLCAxNTUsIDcsIDMsIDEsIAotICAgIDk3LCAyLCAyNTEsIDEwMSwgNywgMywgMSwgOTcsIDIsIDIxOSwgNywgMywgMSwgMjI0LCAyNiwgMiwgMTU1LCA3LCAzLCAxLCAKLSAgICAyMjYsIDE5NiwgNywgMywgMSwgMjI0LCAyNiwgMiwgMjE5LCA3LCA2LCAxLCAxMDIsIDIsIDIzNywgNjMsIDcsIDMsIDEsIAotICAgIDEwMiwgMiwgMjM3LCA2MywgNywgNiwgMSwgMTAyLCAyLCAyNTIsIDEwNiwgNywgMywgMSwgMTAyLCAyLCAyNTIsIDEwNiwgNywgCi0gICAgNiwgMSwgMTAyLCAyLCAyMzQsIDg0LCA3LCAzLCAxLCAxMDIsIDIsIDIzNCwgODQsIDcsIDYsIDEsIDI1MiwgNDUsIDIsIAotICAgIDE1NSwgNywgMywgMSwgMjUyLCA0NSwgMiwgMTU1LCA3LCA2LCAxLCAyNTIsIDQ1LCAyLCAyNTEsIDEwMSwgNywgMywgMSwgCi0gICAgMjUyLCA0NSwgMiwgMjUxLCAxMDEsIDcsIDYsIDEsIDI1MiwgNDUsIDIsIDU2LCA0NiwgNywgMywgMSwgMjUyLCA0NSwgMiwgCi0gICAgNTYsIDQ2LCA3LCA2LCAxLCAyNTIsIDQ1LCAyLCAyNTIsIDUsIDcsIDMsIDEsIDI1MiwgNDUsIDIsIDI1MiwgNSwgNywgNiwgCi0gICAgMSwgMjUwLCAxOTIsIDIsIDI1MiwgNSwgNywgMywgMSwgMjUwLCAxOTIsIDIsIDI1MiwgNSwgNywgNiwgMSwgMjUwLCAxOTIsIAotICAgIDIsIDgyLCA3LCAzLCAxLCAyNTAsIDE5MiwgMiwgODIsIDcsIDYsIDEsIDE2MSwgMiwgMjM3LCA2MywgNywgMywgMSwgMTYxLCAKLSAgICAyLCAyMzcsIDYzLCA3LCA2LCAxLCAxNjEsIDIsIDI1MiwgMTA2LCA3LCAzLCAxLCAxNjEsIDIsIDI1MiwgMTA2LCA3LCA2LCAKLSAgICAxLCAxNjEsIDIsIDU2LCA0NiwgNywgMywgMSwgMTYxLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDE2MSwgMiwgMjM0LCA4NCwgNywgCi0gICAgMywgMSwgMTYxLCAyLCAyMzQsIDg0LCA3LCA2LCAxLCAxNjEsIDIsIDI1MiwgNSwgNywgMywgMSwgMTYxLCAyLCAyNTIsIDUsIAotICAgIDcsIDYsIDEsIDI0NiwgMTk2LCAyLCAyNTEsIDEwMSwgNywgMywgMSwgMjQ2LCAxOTYsIDIsIDI1MSwgMTAxLCA3LCA2LCAxLCAKLSAgICAyNDYsIDE5NiwgMiwgMjUyLCAxMDYsIDcsIDMsIDEsIDI0NiwgMTk2LCAyLCAyNTIsIDEwNiwgNywgNiwgMSwgMjQ2LCAxOTYsIAotICAgIDIsIDU2LCA0NiwgNywgMywgMSwgMjQ2LCAxOTYsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjQ2LCAxOTYsIDIsIDI1MSwgMjI2LCAKLSAgICA3LCAzLCAxLCAyNDYsIDE5NiwgMiwgMjUxLCAyMjYsIDcsIDYsIDEsIDI0NSwgMTcyLCAyLCAyNTEsIDEwMSwgNywgMywgMSwgCi0gICAgMjQ1LCAxNzIsIDIsIDI1MSwgMTAxLCA3LCA2LCAxLCAyNDUsIDE3MiwgMiwgODIsIDcsIDMsIDEsIDI0NSwgMTcyLCAyLCAKLSAgICA4MiwgNywgNiwgMSwgMjQ0LCA4MSwgMiwgMjA1LCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyMDUsIDcsIDYsIDEsIDI0NCwgODEsIAotICAgIDIsIDIzNywgNjMsIDcsIDMsIDEsIDI0NCwgODEsIDIsIDIzNywgNjMsIDcsIDYsIDEsIDI0NCwgODEsIDIsIDI1MiwgMTA2LCAKLSAgICA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyNTIsIDEwNiwgNywgNiwgMSwgMjQ0LCA4MSwgMiwgMjM0LCA4NCwgNywgMywgMSwgCi0gICAgMjQ0LCA4MSwgMiwgMjM0LCA4NCwgNywgNiwgMSwgMjQ0LCA4MSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNDksIDEzOSwgNzQsIAotICAgIDcsIDYsIDIwLCAyNDAsIDQ1LCA3LCAzLCAyMCwgMjQwLCA0NSwgNywgNiwgMSwgMjM5LCAxODMsIDIsIDI1MSwgMTAxLCA3LCAKLSAgICAzLCAxLCAyMzksIDE4MywgMiwgMjUxLCAxMDEsIDcsIDYsIDEsIDIzOSwgNzcsIDIsIDI1MSwgMjI2LCA3LCAzLCAxLCAyMzksIAotICAgIDc3LCAyLCAyNTEsIDIyNiwgNywgMywgMSwgMjM4LCAxMTcsIDcsIDYsIDEsIDIzOCwgNDcsIDIsIDE1NSwgNywgMywgMSwgCi0gICAgMjM4LCA0NywgMiwgMTU1LCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCAyNTEsIDIyNiwgNywgMywgMSwgMjM4LCA0NywgMiwgMjUxLCAKLSAgICAyMjYsIDcsIDYsIDEsIDIzOCwgNDcsIDIsIDI1MiwgNSwgNywgMywgMSwgMjM4LCA0NywgMiwgMjUyLCA1LCA3LCA2LCAxLCAKLSAgICAyMzgsIDQ3LCAyLCAyMzYsIDE1NCwgMjQ5LCAxNDAsIDcsIDMsIDEsIDIzOCwgNDcsIDIsIDIzNiwgMTU0LCAyNDksIDE0MCwgCi0gICAgNywgNiwgMSwgMjM4LCA0NywgMiwgODIsIDcsIDMsIDEsIDIzOCwgNDcsIDIsIDgyLCA3LCA2LCAxLCAyMzYsIDUsIDIsIAotICAgIDE1NSwgNywgMywgMSwgMjM2LCA1LCAyLCAxNTUsIDcsIDYsIDEsIDIzNiwgNSwgMiwgMjUxLCAyMjYsIDcsIDMsIDEsIDIzNiwgCi0gICAgNSwgMiwgMjUxLCAyMjYsIDcsIDYsIDEsIDIzNiwgNSwgMiwgMjUyLCA1LCA3LCAzLCAxLCAyMzYsIDUsIDIsIDI1MiwgNSwgCi0gICAgNywgMywgMSwgMjM2LCA1LCAyMzIsIDIxNSwgMjUyLCA1NSwgMjU0LCAxNDQsIDcsIDYsIDEsIDI0NywgMjI4LCA3LCAzLCAxLCAKLSAgICAyNDcsIDIyOCwgNywgNiwgMSwgMTMwLCAyLCAyMzcsIDYzLCA3LCAzLCAxLCAxMzAsIDIsIDIzNywgNjMsIDcsIDYsIDEsIAotICAgIDEzMCwgMiwgMjUyLCAxMDYsIDcsIDMsIDEsIDEzMCwgMiwgMjUyLCAxMDYsIDcsIDYsIDEsIDEzMCwgMiwgNDcsIDE1NSwgNywgCi0gICAgMywgMSwgMTMwLCAyLCA0NywgMTU1LCA3LCA2LCAyMCwgMjM0LCA4OCwgNywgMywgMjAsIDIzNCwgODgsIDcsIDYsIDEsIAotICAgIDIzMiwgMjcsIDIsIDE1NSwgNywgMywgMSwgMjMyLCAyNywgMiwgMTU1LCA3LCA2LCAxLCAyMzIsIDI3LCAyLCAyNTEsIDIyNiwgCi0gICAgNywgMywgMSwgMjMyLCAyNywgMiwgMjUxLCAyMjYsIDcsIDYsIDEsIDIzMiwgMjcsIDIsIDI1MiwgNSwgNywgMywgMSwgMjMyLCAKLSAgICAyNywgMiwgMjUyLCA1LCA3LCA2LCAxLCAyMzEsIDM1LCAyLCAxNTUsIDcsIDMsIDEsIDIzMSwgMzUsIDIsIDE1NSwgNywgNiwgCi0gICAgMSwgMjMxLCAzNSwgMiwgMjUxLCAxMDEsIDcsIDMsIDEsIDIzMSwgMzUsIDIsIDI1MSwgMTAxLCA3LCA2LCAxLCAyMzEsIDM1LCAKLSAgICAyLCAyNTEsIDIyNiwgNywgMywgMSwgMjMxLCAzNSwgMiwgMjUxLCAyMjYsIDcsIDYsIDEsIDIzMSwgMzUsIDIsIDI1MiwgNSwgCi0gICAgNywgMywgMSwgMjMxLCAzNSwgMiwgMjUyLCA1LCA3LCA2LCAxLCAyMjcsIDExMCwgMiwgMjUxLCAyMjYsIDcsIDMsIDEsIAotICAgIDIyNywgMTEwLCAyLCAyNTEsIDIyNiwgNywgNiwgMSwgMjI3LCAxMTAsIDIsIDI1MiwgNSwgNywgMywgMSwgMjI3LCAxMTAsIAotICAgIDIsIDI1MiwgNSwgNywgNiwgMSwgMjI3LCAxMTAsIDIsIDgyLCA3LCAzLCAxLCAyMjcsIDExMCwgMiwgODIsIDcsIDYsIDEsIAotICAgIDk3LCAyLCAyMDUsIDcsIDMsIDEsIDk3LCAyLCAyMDUsIDcsIDYsIDEsIDk3LCAyLCAyMzcsIDYzLCA3LCAzLCAxLCA5NywgMiwgCi0gICAgMjM3LCA2MywgNywgNiwgMSwgOTcsIDIsIDI1MiwgMTA2LCA3LCAzLCAxLCA5NywgMiwgMjUyLCAxMDYsIDcsIDYsIDEsIDk3LCAKLSAgICAyLCAyMzEsIDE0MCwgNDYsIDcsIDMsIDEsIDk3LCAyLCAyMzEsIDE0MCwgNDYsIDcsIDYsIDEsIDk3LCAyLCA0NywgMTU1LCAKLSAgICA3LCAzLCAxLCA5NywgMiwgNDcsIDE1NSwgNywgNiwgMSwgOTcsIDIsIDIzNCwgODQsIDcsIDMsIDEsIDk3LCAyLCAyMzQsIAotICAgIDg0LCA3LCA2LCAxLCAyMjQsIDE3NSwgMiwgMjUxLCAxMDEsIDcsIDMsIDEsIDIyNCwgMTc1LCAyLCAyNTEsIDEwMSwgNywgNiwgCi0gICAgMSwgMjI0LCAyNiwgMiwgMjUxLCAxMDEsIDcsIDMsIDEsIDIyNCwgMjYsIDIsIDI1MSwgMTAxLCA3LCA2LCAxLCAyMjQsIDI2LCAKLSAgICAyLCAyMTksIDcsIDYsIDEsIDIyMywgMTIwLCAyLCAxNTUsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCAxNTUsIDcsIDYsIDEsIAotICAgIDIyMywgMTIwLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDIyMywgMTIwLCAyLCAKLSAgICAyNTIsIDUsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCAyNTIsIDUsIDcsIDMsIDEsIDE4MiwgMTkzLCA3LCAzLCAxLCA0NSwgMiwgCi0gICAgODIsIDcsIDYsIDEsIDQ1LCAyLCA4OCwgNywgNiwgMSwgNDUsIDIsIDIyNiwgMTAzLCA3LCAzLCAxLCA0NSwgMiwgMjI2LCAKLSAgICAxMDMsIDcsIDYsIDEsIDIwNiwgMTgzLCA3LCAzLCAxLCAyMDYsIDE4MywgNywgNiwgMSwgMjM0LCA0NCwgNzMsIDcsIDYsIDEsIAotICAgIDI1MiwgNDUsIDIsIDg4LCA3LCAzLCAxLCAyNTIsIDQ1LCAyLCA4OCwgNywgNiwgMSwgMjU1LCAxMCwgMjIyLCAyMjIsIDcsIAotICAgIDYsIDEsIDI1MCwgMTkyLCAyLCA4OCwgNywgNiwgMSwgMjUwLCAxOTIsIDIsIDIyNiwgMTAzLCA3LCAzLCAxLCAyNTAsIDE5MiwgCi0gICAgMiwgMjI2LCAxMDMsIDcsIDMsIDEsIDIwOSwgMjUwLCA0NywgNywgNiwgMSwgMjAwLCA3MiwgNywgNiwgMSwgMjMwLCAyMjIsIAotICAgIDcsIDYsIDEsIDIzNCwgNDQsIDcyLCA3LCA2LCAxLCAyNDcsIDEzMSwgMiwgODgsIDcsIDMsIDEsIDI0NywgMTMxLCAyLCA4OCwgCi0gICAgNywgNiwgMSwgMjQ2LCAxOTYsIDIsIDg4LCA3LCA2LCAxLCAyNDYsIDE2OSwgNywgMywgMSwgMjQ0LCAxMjgsIDcsIDYsIDEsIAotICAgIDIzOSwgMjE1LCA3LCA2LCAxLCAyNDQsIDgxLCAyLCA4MiwgNywgNiwgMSwgMjM5LCA3NywgMiwgODgsIDcsIDMsIDEsIDIzOSwgCi0gICAgNzcsIDIsIDg4LCA3LCAzLCAxLCAyMzgsIDQ3LCAyLCAxMjUsIDcsIDMsIDEsIDIzOCwgMTgsIDIsIDgyLCA3LCA2LCAxLCAKLSAgICAyMDksIDE4NSwgNywgNiwgMSwgMjM2LCA1LCAyLCA0MiwgODgsIDcsIDMsIDEsIDIzNiwgNSwgMiwgMTgyLCA0MSwgMjM3LCAKLSAgICAyMjksIDcsIDYsIDEsIDEzMCwgMiwgMjM2LCAxNTQsIDIwNSwgNywgNiwgMSwgMTMwLCAyLCAyNDQsIDE2MCwgNywgMywgMSwgCi0gICAgMTMwLCAyLCAyNDQsIDE2MCwgNywgNiwgMSwgMjM0LCA4MCwgNywgMywgMSwgMjM0LCA4MCwgNywgNiwgMSwgMjMzLCAyNDUsIAotICAgIDIsIDg4LCA3LCAzLCAxLCAyMzMsIDI0NSwgMiwgODgsIDcsIDEsIDIyMywgMTYwLCA3LCA2LCAxLCAyMDYsIDExMywgNywgMywgCi0gICAgMSwgMjA2LCAxMTMsIDcsIDYsIDEsIDI0NywgMTgzLCA3LCAxLCAyMDAsIDI0NywgMTg0LCAyMzcsIDEyNCwgNywgMywgMSwgCi0gICAgMjI3LCAxMTAsIDIsIDIzMywgMjI5LCA4OCwgNywgNiwgMSwgMjI3LCAxMTAsIDIsIDg4LCA3LCAzLCAxLCAyMjcsIDExMCwgCi0gICAgMiwgODgsIDcsIDYsIDEsIDIyNywgMTEwLCAyLCAyMzEsIDE5NiwgODgsIDcsIDYsIDEsIDk3LCAyLCAyNDQsIDE2MCwgNywgCi0gICAgMywgMSwgOTcsIDIsIDI0NCwgMTYwLCA3LCA2LCAxLCAyMjUsIDExMCwgNywgNiwgMSwgMjI1LCA2NSwgMiwgODgsIDcsIDYsIAotICAgIDEsIDIyNCwgMjYsIDIsIDg4LCA3LCAzLCAxLCAyMjQsIDI2LCAyLCA4OCwgNywgNiwgMSwgMjIzLCAxMjAsIDIsIDgyLCA3LCAKLSAgICAzLCAxLCAyMjMsIDEyMCwgMiwgODIsIDcsIDYsIDEsIDI0NywgMTMyLCA3LCA2LCAxLCAyNDcsIDEzMywgMjMxLCAxOTIsIDcsIAotICAgIDMsIDEsIDI0NywgMTMzLCAyMzEsIDE5MiwgNywgMywgMSwgMjQ3LCAxMzMsIDIsIDIyNywgODksIDcsIDEsIDEzNSwgMiwgCi0gICAgODIsIDcsIDYsIDEsIDIwNiwgMTczLCA3LCAzLCAxLCAyMDYsIDE3MywgNywgMSwgMjM5LCAyMjMsIDI0NiwgMTYsIDIyOCwgCi0gICAgMzksIDIsIDgyLCA3LCAxLCAyMjQsIDc1LCA3LCAxLCAyNTAsIDQxLCAyNTEsIDg5LCA3LCAxLCAyMzgsIDIsIDI1MSwgODksIAotICAgIDcsIDEsIDI1NCwgMjAwLCAyNTEsIDg5LCA3LCAxLCAyMzEsIDE5NiwgMjUxLCA4OSwgNywgNiwgMSwgMjQ4LCA3MiwgMiwgCi0gICAgMjUyLCA1LCA3LCA2LCAxLCAyNTAsIDE5MiwgMiwgMywgMSwgMjIzLCAxMjAsIDIsIDI1MiwgNSwgNywgMywgMSwgMjQ4LCAKLSAgICA3MiwgMiwgMjUyLCA1LCA3LCA2LCAxLCAyMzcsIDE1MiwgNywgNiwgMSwgMjM4LCA0NywgMiwgMywgMSwgMjM5LCAxODIsIDcsIAotICAgIDMsIDEsIDIzNywgMTUyLCA3LCA2LCAxLCAyMzUsIDUwLCA3LCA2LCAxLCAyMzYsIDUsIDIsIDMsIDEsIDIzOSwgMTgyLCA3LCAKLSAgICAzLCAxLCAyMzUsIDUwLCA3LCA2LCAxLCAxMDIsIDIsIDI1MiwgNSwgNywgMywgMSwgMTAyLCAyLCAyNTIsIDUsIDcsIDYsIDEsIAotICAgIDI0NCwgODEsIDIsIDI1MiwgNSwgNywgMywgMSwgMjQ0LCA4MSwgMiwgMjUyLCA1LCA3LCA2LCAxLCAxMzAsIDIsIDI1MiwgNSwgCi0gICAgNywgMywgMSwgMTMwLCAyLCAyNTIsIDUsIDcsIDYsIDEsIDk3LCAyLCAyNTIsIDUsIDcsIDMsIDEsIDk3LCAyLCAyNTIsIDUsIAotICAgIDcsIDYsIDEsIDk3LCAyLCAyNTAsIDMsIDIyLCAyMzcsIDYzLCA3LCAzLCAxLCA5NywgMiwgMjUwLCAzLCAyMiwgMjM3LCA2MywgCi0gICAgNywgNiwgMSwgOTcsIDIsIDI1MCwgMywgMjIsIDE1NSwgNywgMywgMSwgOTcsIDIsIDI1MCwgMywgMjIsIDE1NSwgNywgNiwgCi0gICAgMSwgOTcsIDIsIDI1MCwgMywgMjIsIDI1MiwgNSwgNywgMywgMSwgOTcsIDIsIDI1MCwgMywgMjIsIDI1MiwgNSwgNywgNiwgCi0gICAgMSwgOTcsIDIsIDI1MCwgMywgMjIsIDI0NSwgMjM2LCA3LCAzLCAxLCA5NywgMiwgMjUwLCAzLCAyMiwgMjQ1LCAyMzYsIDcsIAotICAgIDMsIDEsIDIwOSwgNzIsIDcsIDYsIDEsIDEwMiwgMiwgMjUwLCAzLCAyMiwgMjM3LCA2MywgNywgMywgMSwgMTAyLCAyLCAKLSAgICAyNTAsIDMsIDIyLCAyMzcsIDYzLCA3LCA2LCAxLCAxMDIsIDIsIDU2LCA2NCwgMjIsIDIzNywgNjMsIDcsIDMsIDEsIDEwMiwgCi0gICAgMiwgNTYsIDY0LCAyMiwgMjM3LCA2MywgNywgNiwgMSwgMjU1LCAyMCwgMiwgMjM3LCA2MywgNywgMywgMSwgMjU1LCAyMCwgCi0gICAgMiwgMjM3LCA2MywgNywgNiwgMSwgMjQ2LCAxOTYsIDIsIDgyLCA3LCAzLCAxLCAyNDYsIDE5NiwgMiwgODIsIDcsIDYsIDEsIAotICAgIDI0NiwgMTk2LCAyLCAyNTIsIDUsIDcsIDMsIDEsIDI0NiwgMTk2LCAyLCAyNTIsIDUsIDcsIDYsIDEsIDIzOSwgNzcsIDIsIAotICAgIDI1MiwgNSwgNywgMywgMSwgMjM5LCA3NywgMiwgMjUyLCA1LCA3LCA2LCAxLCAxMzAsIDIsIDIzNCwgODQsIDcsIDMsIDEsIAotICAgIDEzMCwgMiwgMjM0LCA4NCwgNywgNiwgMSwgMTMwLCAyLCAyMzQsIDg1LCAyMiwgMjM3LCA2MywgNywgMywgMSwgMTMwLCAyLCAKLSAgICAyMzQsIDg1LCAyMiwgMjM3LCA2MywgNywgNiwgMSwgMjQ3LCAxMzMsIDIsIDI1MiwgNSwgNywgMywgMSwgMjQ3LCAxMzMsIDIsIAotICAgIDI1MiwgNSwgNywgMywgMSwgMjM5LCAxODMsIDIsIDI1MiwgNSwgNywgNiwgMSwgMjQ4LCA3MSwgNywgNiwgMSwgMjUwLCAKLSAgICAxOTIsIDIsIDMsIDEsIDIyMywgMTE5LCA3LCAzLCAxLCAyNDgsIDcxLCA3LCA2LCAxLCAyNDYsIDE5NiwgMiwgMTU1LCA3LCAKLSAgICAzLCAxLCAyNDYsIDE5NiwgMiwgMTU1LCA3LCA2LCAxLCAyNDQsIDEyNiwgNywgNiwgMSwgMjI0LCA3NSwgNywgNiwgMSwgCi0gICAgMjM2LCA1LCAyLCAyNDUsIDIzNiwgNywgMywgMSwgMjM2LCA1LCAyLCAyNDUsIDIzNiwgNywgNiwgMSwgMTAyLCAyLCAyMzEsIAotICAgIDE0MCwgNjQsIDIyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjMxLCAxNDAsIDY0LCAyMiwgMTU1LCA3LCA2LCAxLCAyNTUsIAotICAgIDIwLCAyLCAxNTUsIDcsIDMsIDEsIDI1NSwgMjAsIDIsIDE1NSwgNywgNiwgMSwgMTMwLCAyLCAxOTUsIDIyLCAxNTUsIDcsIAotICAgIDMsIDEsIDEzMCwgMiwgMTk1LCAyMiwgMTU1LCA3LCA2LCAxLCAxMDIsIDIsIDQ3LCAyNDUsIDIzNiwgNywgMywgMSwgMTAyLCAKLSAgICAyLCA0NywgMjQ1LCAyMzYsIDcsIDYsIDEsIDEwMiwgMiwgMjM5LCAyMjMsIDI1MiwgMTA2LCA3LCAzLCAxLCAxMDIsIDIsIAotICAgIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgNiwgMSwgMTYxLCAyLCA0NywgMjQ1LCAyMzYsIDcsIDMsIDEsIDE2MSwgMiwgNDcsIAotICAgIDI0NSwgMjM2LCA3LCA2LCAxLCAxNjEsIDIsIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgMywgMSwgMTYxLCAyLCAyMzksIDIyMywgCi0gICAgMjUyLCAxMDYsIDcsIDYsIDEsIDI0NCwgODEsIDIsIDQ3LCAyNDUsIDIzNiwgNywgMywgMSwgMjQ0LCA4MSwgMiwgNDcsIAotICAgIDI0NSwgMjM2LCA3LCA2LCAxLCAyNDQsIDgxLCAyLCAyMzksIDIyMywgMjUyLCAxMDYsIDcsIDMsIDEsIDI0NCwgODEsIDIsIAotICAgIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgNiwgMSwgMTMwLCAyLCA0NywgMjQ1LCAyMzYsIDcsIDMsIDEsIDEzMCwgMiwgNDcsIAotICAgIDI0NSwgMjM2LCA3LCA2LCAxLCAxMzAsIDIsIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgMywgMSwgMTMwLCAyLCAyMzksIDIyMywgCi0gICAgMjUyLCAxMDYsIDcsIDYsIDEsIDIzMiwgMjcsIDIsIDQ3LCAyNDUsIDIzNiwgNywgMywgMSwgMjMyLCAyNywgMiwgNDcsIAotICAgIDI0NSwgMjM2LCA3LCA2LCAxLCAyMzIsIDI3LCAyLCAyMzksIDIyMywgMjUyLCAxMDYsIDcsIDMsIDEsIDIzMiwgMjcsIDIsIAotICAgIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgNiwgMSwgOTcsIDIsIDQ3LCAyNDUsIDIzNiwgNywgMywgMSwgOTcsIDIsIDQ3LCAKLSAgICAyNDUsIDIzNiwgNywgNiwgMSwgOTcsIDIsIDIzOSwgMjIzLCAyNTIsIDEwNiwgNywgMywgMSwgOTcsIDIsIDIzOSwgMjIzLCAKLSAgICAyNTIsIDEwNiwgNywgNiwgMSwgMjMxLCAzNSwgMiwgMjUxLCA1NSwgNTEsIDcsIDMsIDEsIDIzMSwgMzUsIDIsIDI1MSwgNTUsIAotICAgIDUxLCA3LCA2LCAxLCAyMjcsIDExMCwgMiwgMjUxLCA1NSwgNTEsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAyNTEsIDU1LCA1MSwgCi0gICAgNywgNiwgMSwgMjIzLCAxNzQsIDcsIDMsIDEsIDIyMywgMTc0LCA3LCA2LCAxLCAyNDUsIDE3MiwgMiwgMjUyLCA1LCA3LCAzLCAKLSAgICAxLCAyNDUsIDE3MiwgMiwgMjUyLCA1LCA3LCA2LCAxLCAyMzYsIDUsIDIsIDE4MiwgNDEsIDIzNywgMjI5LCA3LCAzLCAxLCAKLSAgICAyNTAsIDE5MiwgMiwgMjUwLCAyMjQsIDcsIDYsIDEsIDIzNCwgMTMsIDcsIDMsIDEsIDIzNCwgMTMsIDcsIDYsIDEsIDIyMywgCi0gICAgMTIwLCAyLCA4OCwgNywgMywgMSwgMjIzLCAxMjAsIDIsIDg4LCA3LCA2LCAxLCAxMDIsIDIsIDU2LCA0NiwgNywgMywgMSwgCi0gICAgMTAyLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDE2MSwgMiwgMjUxLCAyMjYsIDcsIDMsIDEsIDE2MSwgMiwgMjUxLCAyMjYsIDcsIAotICAgIDYsIDEsIDEzMCwgMiwgMjUwLCAzLCAyMiwgMjM3LCA2MywgNywgMywgMSwgMTMwLCAyLCAyNTAsIDMsIDIyLCAyMzcsIDYzLCAKLSAgICA3LCA2LCAxLCAxMzAsIDIsIDIyNiwgMTU5LCAyMiwgMjM3LCA2MywgNywgMywgMSwgMTMwLCAyLCAyMjYsIDE1OSwgMjIsIAotICAgIDIzNywgNjMsIDcsIDYsIDEsIDEzMCwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAxMzAsIDIsIDU2LCA0NiwgNywgNiwgMSwgMTMwLCAKLSAgICAyLCA1NiwgNjQsIDIyLCAyMzcsIDYzLCA3LCAzLCAxLCAxMzAsIDIsIDU2LCA2NCwgMjIsIDIzNywgNjMsIDcsIDYsIDEsIAotICAgIDIyNCwgMjYsIDIsIDIzNywgNjMsIDcsIDMsIDEsIDIyNCwgMjYsIDIsIDIzNywgNjMsIDcsIDMsIDEsIDIzOCwgNDcsIDIsIAotICAgIDI1MCwgMjI0LCA3LCAzLCAxLCAyMzYsIDUsIDIsIDI1MCwgMjI0LCA3LCAzLCAxLCAyMjcsIDExMCwgMiwgMjUwLCAyMjQsIAotICAgIDcsIDMsIDEsIDI0OSwgMTM5LCAyMzksIDE4MiwgNywgMywgMSwgMjUwLCAxMTksIDI0OSwgMjIzLCA3LCAzLCAxLCAyMzIsIAotICAgIDg1LCAyNDksIDIyMywgNywgNiwgMSwgMTAyLCAyLCA4MiwgNywgNiwgMSwgMjUyLCA0NSwgMiwgODIsIDcsIDMsIDEsIDI1MiwgCi0gICAgNDUsIDIsIDgyLCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCAxMjUsIDcsIDYsIDEsIDIyNywgMTEwLCAyLCAyNTAsIDEsIDgyLCA3LCAKLSAgICAzLCAxLCAyMzEsIDM1LCAyLCAyMjcsIDE5NywgMjI3LCA4OSwgNywgMywgMSwgMjIzLCAxMjAsIDIsIDIyNywgMTk3LCAyMjcsIAotICAgIDg5LCA3LCA2LCAxLCAyNDYsIDE2LCAyMjgsIDM4LCA3LCAzLCAxLCAyNDYsIDE2LCAyMjgsIDM4LCA3LCA2LCAxLCA0NSwgMiwgCi0gICAgODIsIDcsIDYsIDEsIDk3LCAxMjUsIDcsIDYsIDEsIDIwOSwgMTk2LCA3LCA2LCAxLCAxNjEsIDIsIDgyLCA3LCAzLCAxLCAKLSAgICAxNjEsIDIsIDgyLCA3LCA2LCAxLCAyMzksIDE4MywgMiwgODIsIDcsIDMsIDEsIDIzOSwgMTgzLCAyLCA4MiwgNywgNiwgMSwgCi0gICAgMywgMjMyLCAxNDAsIDIsIDI0NCwgMjE3LCAyMjcsIDg5LCA3LCAzLCAxLCAyMzIsIDE0MCwgMiwgMjQ0LCAyMTcsIDIyNywgCi0gICAgODksIDcsIDYsIDEsIDIzMiwgMjcsIDIsIDgyLCA3LCAzLCAxLCAyMzIsIDI3LCAyLCA4MiwgNywgNiwgMSwgMjI0LCAyNiwgCi0gICAgMiwgODIsIDcsIDMsIDEsIDIyNCwgMjYsIDIsIDgyLCA3LCAzLCAxLCAyMDksIDU3LCA3LCAzLCAxLCAyNTQsIDIwNSwgNywgCi0gICAgMywgMSwgMjA5LCAyNTQsIDIwNSwgNywgMywgMSwgNDUsIDIsIDg4LCA3LCAzLCAxLCAyMzQsIDQ0LCA3MywgNywgMywgMSwgCi0gICAgMjUyLCA0NSwgMiwgMjUwLCAyMjQsIDcsIDMsIDEsIDI1MCwgMTkyLCAyLCAyMjcsIDg5LCA3LCAzLCAxLCAyNTAsIDE5MiwgCi0gICAgMiwgODgsIDcsIDMsIDEsIDIwMCwgNzIsIDcsIDMsIDEsIDIzMCwgMjIyLCA3LCAzLCAxLCAyMzAsIDIyMywgMiwgODgsIDcsIAotICAgIDMsIDEsIDIzNCwgNDQsIDcyLCA3LCAzLCAxLCAyMDAsIDIzNCwgNDQsIDcyLCA3LCAzLCAxLCAyMDAsIDIzNCwgNDQsIDE2MSwgCi0gICAgMiwgODgsIDcsIDMsIDEsIDI1MSwgODIsIDIwMCwgMjM0LCA0NCwgNzIsIDcsIDMsIDEsIDI0OSwgMTM5LCAyMzksIDE4MywgCi0gICAgMiwgODIsIDcsIDMsIDEsIDI0NiwgMTk2LCAyLCA4OCwgNywgMywgMSwgOTUsIDIxNCwgNywgMSwgMywgNiwgMjE0LCA3LCAzLCAKLSAgICAxLCAyNDYsIDE2OSwgNywgMywgMSwgMjMyLCA0LCAyNDQsIDE2MCwgNywgMywgMSwgMjA5LCAyMTIsIDcsIDMsIDEsIDI0NSwgCi0gICAgMTcyLCAyLCA4OCwgNywgMywgMSwgMjQ1LCA5OSwgMiwgODgsIDcsIDMsIDEsIDI0NCwgODEsIDIsIDgyLCA3LCAzLCAxLCAKLSAgICAyMzksIDIxNSwgNywgMSwgMywgNiwgNzQsIDcsIDMsIDEsIDIzOCwgNDcsIDIsIDIzNiwgMTU0LCAyMDUsIDcsIDMsIDEsIAotICAgIDIzOCwgNDcsIDIsIDI1MiwgMjEyLCA3LCAzLCAxLCAyMzgsIDQ3LCAyLCAyMzEsIDE5NiwgODgsIDcsIDMsIDEsIDIzNywgCi0gICAgMjA3LCA3LCAzLCAxLCAyMDksIDE4NSwgNywgMywgMSwgMjA5LCAyMzcsIDY5LCAyLCAxODIsIDIzNywgMjI5LCA3LCAzLCAxLCAKLSAgICAyMzcsIDY5LCAyLCA4OCwgNywgMywgMSwgMjM2LCA1LCAyLCA0MiwgODgsIDcsIDMsIDEsIDIzNiwgNSwgMiwgMjMxLCAxOTYsIAotICAgIDg4LCA3LCAxLCAzLCA2LCAxOTksIDcsIDMsIDEsIDI1MywgMzEsIDczLCA3LCAxLCAzLCA2LCAyMzQsIDg4LCA3LCAzLCAxLCAKLSAgICAyNTEsIDgyLCAyMzQsIDY2LCA3LCAzLCAxLCAyMzMsIDg3LCA3LCAzLCAxLCAyMDksIDE0NiwgNywgMywgMSwgMjA5LCAyMzIsIAotICAgIDI3LCAyLCAxODIsIDIzNywgMjI5LCA3LCAzLCAxLCAyMDksIDIzMiwgMjcsIDIsIDg4LCA3LCAzLCAxLCAyMzIsIDI3LCAyLCAKLSAgICAxODIsIDIzNywgMjI5LCA3LCAzLCAxLCAyMzIsIDI3LCAyLCAyMjcsIDg5LCA3LCAzLCAxLCAyMzIsIDI3LCAyLCAyNDcsIAotICAgIDQwLCA3LCAzLCAxLCAyMDAsIDIzMiwgMjcsIDIsIDI0NywgNDAsIDcsIDEsIDMsIDYsIDE0NiwgNywgMSwgMywgNiwgMjM5LCAKLSAgICAyMjMsIDE0NiwgNywgMywgMSwgMjMxLCAzNSwgMiwgODgsIDcsIDMsIDEsIDI0NywgMTgzLCA3LCAzLCAxLCAyNDksIDEzOSwgCi0gICAgMjM5LCAxODMsIDIsIDE5NSwgMjIsIDg4LCA3LCAzLCAxLCAyMjgsIDExNiwgMjAwLCAyNDcsIDE4MywgNywgMywgMSwgMjQ3LCAKLSAgICAxODQsIDIsIDI1MCwgMjI0LCA3LCAzLCAxLCAyMDksIDIyNywgMTA5LCA3LCAzLCAxLCAyMjcsIDExMCwgMiwgMjMxLCAxOTYsIAotICAgIDg4LCA3LCAzLCAxLCA5NywgMTI1LCA3LCAzLCAxLCAyMjUsIDExMCwgNywgMywgMSwgMjI1LCA2NSwgMiwgODgsIDcsIDMsIAotICAgIDEsIDIwOSwgMTk2LCA3LCAzLCAxLCAyMDksIDIyNCwgMTc0LCA3LCAzLCAxLCAyMDksIDIyNCwgMjUsIDcsIDEsIDMsIDYsIAotICAgIDIyNCwgMjUsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCAyMzEsIDE5NiwgODgsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCAyNTAsIAotICAgIDIyNCwgNywgMywgMSwgMjQ3LCAxMzIsIDcsIDMsIDEsIDI0NywgMTMzLCAyLCAyNTAsIDIyNCwgNywgMSwgMjQ2LCAxNiwgCi0gICAgMjI4LCAzOCwgNywgMSwgMjMzLCA5MSwgMjI0LCAyMDQsIDI0NiwgMjI3LCA3LCAxLCAyMzksIDIyMywgMjQ2LCAxNiwgMjI4LCAKLSAgICAzOCwgNywgMSwgMjI4LCAyNiwgMjUyLCA0NCwgNywgMSwgMjUyLCAxNzEsIDI1MSwgODksIDcsIDEsIDMsIDYsIDI1NCwgMjcsIAotICAgIDcsIDMsIDEsIDI1MSwgODIsIDIzNCwgNDQsIDcyLCA3LCAxLCAzLCA2LCAyNDYsIDE5NiwgMiwgODgsIDcsIDEsIDMsIDYsIAotICAgIDIxMiwgNywgMywgMSwgMjM5LCAxODMsIDIsIDI1MCwgMjQwLCA3LCAzLCAxLCAyMDksIDIzOSwgNzYsIDcsIDEsIDMsIDYsIAotICAgIDE0OSwgNywgMywgMSwgMjMyLCAxNDAsIDIsIDg4LCA3LCAxLCAyNDYsIDE2LCAyMjgsIDM5LCAyLCA4MiwgNywgMSwgMjAwLCAKLSAgICAyNDYsIDE2LCAyMjgsIDM5LCAyLCA4MiwgNywgMywgMSwgMjQ4LCA3MiwgMjQ5LCAyMjMsIDcsIDMsIDEsIDI1MCwgMjMsIAotICAgIDI0OSwgMjIzLCA3LCAzLCAxLCAyNDgsIDcyLCAyNDksIDIyNCwgMiwgMjUwLCAyMjQsIDcsIDMsIDEsIDIyNiwgNDYsIDI0OSwgCi0gICAgMjIzLCA3LCAzLCAxLCAyMjcsIDE1LCAyNDksIDIyMywgNywgMywgMSwgMjI3LCA1MSwgMjQ5LCAyMjQsIDIsIDI1MCwgMjI0LCAKLSAgICA3LCAzLCAxLCAyNDcsIDc5LCAyNDksIDIyMywgNywgMywgMSwgMjM3LCAxMTIsIDI0OSwgMjIzLCA3LCAzLCAxLCAyMzcsIAotICAgIDcwLCAyNDksIDIyMywgNywgMSwgMjUyLCAxNzEsIDIzMywgMTIyLCA3LCAxLCAyNTIsIDE3OCwgMjMzLCAxMjIsIDcsIDMsIAotICAgIDEsIDIwOSwgMjQ1LCAxNzIsIDIsIDI0NywgNDAsIDcsIDMsIDEsIDIwOSwgMjQ1LCAxNzIsIDIsIDI0NywgNDEsIDIyLCAKLSAgICAyMjcsIDg5LCA1MiwgMSwgMywgMjEyLCA1MiwgMSwgMywgMjQ1LCAxNzIsIDIsIDg4LCA1MiwgMSwgMywgMjM5LCAxODIsIAotICAgIDUyLCAxLCAzLCAxNDYsIDUyLCAxLCAzLCAyMDksIDE0NiwgNTIsIDEsIDMsIDIwOSwgMjMyLCAyNywgMiwgODgsIDUyLCAxLCAKLSAgICAzLCA2LCAyMzksIDIyMywgMTQ2LCA1MiwgMSwgMywgMjI0LCAxNzQsIDUyLCAxLCAzLCAyMjQsIDI1LCA1MiwgMSwgMjMyLCAKLSAgICAyMDUsIDUyLCAxLCA0NywgMjMyLCAyMDUsIDUyLCAxLCAyMDksIDI1MSwgNTQsIDUyLCAxLCAyNTQsIDE0NCwgNTIsIDEsIAotICAgIDIwMCwgMjUxLCA1NCwgNTIsIDEsIDQxLCAxMzIsIDIzMSwgMTM5LCA1MiwgMSwgNDIsIDEzMiwgMjMxLCAxMzksIDUyLCAxLCAKLSAgICAyNDYsIDE2LCAyMjgsIDM4LCA1MiwgMSwgMjAwLCAyNDYsIDE2LCAyMjgsIDM4LCA1MiwgMSwgNDIsIDI1NCwgOTMsIDUyLCAKLSAgICAxLCA0MSwgMjU0LCA5MywgNTIsIDEsIDk5LCAyNTQsIDkzLCA1MiwgMSwgMTAzLCAyNTQsIDkzLCA1MiwgMSwgMjUxLCAxMDIsIAotICAgIDI1NSwgNDEsIDI1MiwgNSwgNTIsIDEsIDYxLCAyMzcsIDE3MCwgNTIsIDEsIDIzNywgNjMsIDUyLCAxLCAyNTUsIDMzLCAKLSAgICAyNTUsIDQxLCA1MiwgMSwgMjQ1LCAyMzcsIDI1NSwgNDEsIDUyLCAxLCAxODQsIDYxLCAyMzcsIDE3MCwgNTIsIDEsIDE4NCwgCi0gICAgMjM3LCA2MywgNTIsIDEsIDE4NCwgMjQ1LCAyMzcsIDI1NSwgNDEsIDUyLCAxLCAxODQsIDI1NSwgMzMsIDI1NSwgNDEsIDUyLCAKLSAgICAxLCAyMjYsIDc1LCAyNTEsIDYxLCA1MiwgMSwgMTMyLCAyMjYsIDc1LCAyNTEsIDYxLCA1MiwgMSwgMjUxLCAyMTcsIDQxLCAKLSAgICAxMzIsIDIzMSwgMTM5LCA1MiwgMSwgMjUxLCAyMTcsIDQyLCAxMzIsIDIzMSwgMTM5LCA1MiwgMSwgOTksIDIyNywgOTYsIAotICAgIDUyLCAxLCAxMDMsIDIyNywgOTYsIDUyLCAxLCA3OSwgNTMsIDUyLCAxLCAyMzYsIDEyMSwgNTMsIDI1MiwgMTA2LCA1NiwgCi0gICAgNDYsIDIzMSwgMTQwLCA0NiwgMjM0LCA4NCwgMywgMjA1LCA0NywgMjU1LCAzMywgMjU1LCA0MSwgNTIsIDEsIDIzMSwgMTgxLCAKLSAgICA4OCwgNTIsIDEsIDI1MCwgMjQ0LCAyNTUsIDQxLCA1MiwgMSwgMywgMjQ2LCAxNjksIDUyLCAxLCAzLCAxNDksIDUyLCAxLCAKLSAgICAzLCAxOTMsIDUyLCAxLCAzLCAyMjQsIDczLCA1MiwgMSwgMywgMjAwLCAyNDYsIDE2LCAyMjgsIDM4LCA1MiwgMSwgMjQ3LCAKLSAgICAxNDAsIDIwNiwgMTI1LCA1MiwgMSwgMjAxLCAyMDYsIDEyNSwgNTIsIDEsIDIzNiwgMTU1LCAyMDYsIDEyNSwgNTIsIDEsIAotICAgIDE4NCwgMjA2LCAxMjUsIDUyLCAxLCAyNDcsIDEzOSwgMjA2LCAxMjUsIDUyLCAxLCAyMjMsIDE5MywgMjUwLCAzOCwgMjA2LCAKLSAgICA3NiwgNTIsIDEsIDIyMywgMjQ5LCAyNTAsIDM4LCAyMDYsIDc2LCA1MiwgMSwgMjI0LCAyMDIsIDUyLCAxLCAyMjUsIDEzNiwgCi0gICAgNTIsIDEsIDQ3LCAyNTQsIDE0NCwgNTIsIDEsIDE4NCwgMTAzLCAyNTQsIDkzLCA1MiwgMSwgMTg0LCA5OSwgMjU0LCA5MywgCi0gICAgNTIsIDEsIDE4NCwgNDIsIDI1NCwgOTMsIDUyLCAxLCAxODQsIDQxLCAyNTQsIDkzLCA1MiwgMSwgMTg0LCAyMzEsIDEzOSwgCi0gICAgNTIsIDEsIDIzNiwgMTU0LCAyNDUsIDIzNywgMjU1LCA0MSwgNTIsIDEsIDIzNiwgMTU0LCA0NywgMjQ1LCAyMzcsIDI1NSwgCi0gICAgNDEsIDUyLCAxLCAyMzYsIDE1NCwgNDcsIDI1NSwgMzMsIDI1NSwgNDEsIDUyLCAxLCAxODQsIDIwNSwgNTIsIDEsIDIzMiwgCi0gICAgOCwgMjUxLCA2MSwgNTIsIDEsIDI1MiwgMjI2LCAyMDEsIDIyNiwgMTE4LCA1MiwgMSwgMjQ3LCAyMzMsIDIwMSwgMjI2LCAKLSAgICAxMTgsIDUyLCAxLCAyNTIsIDIyNiwgMTg0LCAyMjYsIDExOCwgNTIsIDEsIDI0NywgMjMzLCAxODQsIDIyNiwgMTE4LCA1MiwgCi0gICAgMSwgMjI5LCAxMDUsIDUyLCAxLCAyMzQsIDQ0LCAyMjksIDEwNSwgNTIsIDEsIDE4NCwgNDIsIDU4LCAzNiwgMjQ1LCAyMzcsIAotICAgIDI1NSwgNDEsIDM2LCAyNTUsIDMzLCAyNTUsIDQxLCAzNiwgMjUxLCAxMDIsIDI1NSwgNDEsIDM2LCAyMDUsIDM2LCAyMzcsIAotICAgIDYzLCAzNiwgMjM0LCAxLCAzNiwgMjUyLCAxMDYsIDM2LCA1NiwgNDYsIDM2LCAyMTksIDM2LCAyNDQsIDIxNywgNDYsIDM2LCAKLSAgICAyMzEsIDE0MCwgNDYsIDM2LCA0NywgMjU1LCAzMywgMjU1LCA0MSwgMzYsIDI1MiwgNSwgMzYsIDYxLCAyMzcsIDE3MSwgNDYsIAotICAgIDM2LCA0NywgNjEsIDIzNywgMTcxLCA0NiwgMzYsIDQ3LCAyNDUsIDIzNywgMjU1LCA0MSwgMzYsIDI1MiwgMTksIDM2LCAKLSAgICAyMzksIDIyMywgMjUyLCAxMDYsIDM2LCAyMDksIDI1MSwgNTUsIDQ2LCAzNiwgMjUxLCA1NSwgNDYsIDM2LCAyMDAsIDI1MSwgCi0gICAgNTUsIDQ2LCAzNiwgMjUxLCA1NSwgNjQsIDIzMSwgMTUzLCAzNiwgMjQ1LCAyMzcsIDI1NSwgNDIsIDUxLCAzNiwgMjU1LCAKLSAgICAzMywgMjU1LCA0MiwgNTEsIDM2LCA0MiwgMjI3LCA5NywgNTEsIDM2LCA0MSwgMjI3LCA5NywgNTEsIDM2LCA0MiwgMjU0LCAKLSAgICAxODIsIDQ2LCAzNiwgMjQ0LCAxNjAsIDM2LCA0MiwgMTMyLCAyMzEsIDE0MCwgNTEsIDM2LCA5OSwgMjI3LCA5NywgNTEsIAotICAgIDM2LCAxMDMsIDIyNywgOTcsIDUxLCAzNiwgNzksIDUsIDUxLCAzNiwgMjM2LCAxMjEsIDUsIDUxLCAzNiwgMjMzLCAyMjcsIAotICAgIDI0NCwgMjE3LCA1MSwgMzYsIDIzMSwgMTk2LCAyNDQsIDIxNywgNTEsIDM2LCA1NiwgNTEsIDM2LCAyNTAsIDMsIDUxLCAzNiwgCi0gICAgMjMxLCAxNDAsIDUxLCAzNiwgMjUxLCA1NSwgNTEsIDM2LCAyNTEsIDIyNiwgMzYsIDIzNCwgODQsIDM2LCA2MSwgMjM3LCAKLSAgICAxNzEsIDUxLCAzNiwgMjUyLCAxMDIsIDUxLCAzNiwgMjM5LCAyMjMsIDQ3LCAyNTQsIDEyMSwgNTEsIDM2LCAyNTIsIDYsIAotICAgIDUxLCAzNiwgMjUxLCAxMDIsIDI1NSwgNDIsIDUxLCAzNiwgMjUyLCAxMDcsIDUxLCAzNiwgMjM5LCAyMjMsIDI1MiwgMTA3LCAKLSAgICA1MSwgMzYsIDIyNiwgMTU5LCA1MSwgMzYsIDIzNywgNjQsIDUxLCAzNiwgMTg0LCAyMzcsIDE3MCwgMzYsIDQ3LCAxODQsIAotICAgIDIzNywgMTcwLCAzNiwgMjI2LCAxNTksIDIzNCwgMiwgMzYsIDIyOSwgNjMsIDE5NSwgMjM0LCAyLCAzNiwgMTgyLCAxOTUsIAotICAgIDIzNCwgMiwgMzYsIDIyOSwgNjMsIDIyOCwgMTYyLCAyMzQsIDIsIDM2LCAxODIsIDIyOCwgMTYyLCAyMzQsIDIsIDM2LCA0MSwgCi0gICAgMTMyLCAyMzEsIDE0MCwgNTEsIDM2LCAyMzksIDIyMywgMjUyLCAxMDIsIDUxLCAzNiwgMzcsIDUxLCAzNiwgMjMwLCAyMTIsIAotICAgIDUxLCAzNiwgMjI0LCA3NCwgNDYsIDM2LCA2MSwgMjA1LCAzNiwgNDcsIDIzNCwgMSwgMzYsIDI0NSwgMjM3LCAyMDYsIDc2LCAKLSAgICAzNiwgMjU1LCAzMywgMjA2LCA3NiwgMzYsIDE5LCAyMzMsIDExNywgMzYsIDE5LCAyMzgsIDEzMiwgMzYsIDE5LCAyNDksIAotICAgIDI1NCwgMjI2LCAxMDksIDM2LCAxOSwgMjIzLCAxNjUsIDM2LCAyNTIsIDEwMiwgNDYsIDM2LCAyNDcsIDIwNCwgNSwgNTEsIAotICAgIDM2LCA0NywgNjEsIDIzNywgMTcxLCA1MSwgMzYsIDQyLCAyNTQsIDE4MiwgNTEsIDM2LCAxOTAsIDIyNiwgMTU5LCA0NiwgCi0gICAgMzYsIDI0NCwgMjIxLCA0NiwgMzYsIDI1NCwgMjEwLCAxMDUsIDE4MCwgNDYsIDM2LCA0MiwgNDEsIDY3LCA1MSwgMzYsIAotICAgIDIyNSwgMTA2LCA2NywgNTEsIDM2LCAyNDUsIDI0MSwgMjM5LCAxMTIsIDM2LCA0MSwgMjU0LCA5NCwgNDYsIDM2LCA0MiwgCi0gICAgMTMyLCAyMzEsIDE0MCwgNDYsIDM2LCAyNDcsIDc2LCAzNiwgMjI0LCA3NCwgNTEsIDM2LCA0MiwgMjU0LCA5NCwgNTEsIDM2LCAKLSAgICA0MSwgMjU0LCA5NCwgNTEsIDM2LCA0MSwgMjU0LCA5NCwgMjIsIDk5LCAyNTQsIDk0LCA1MSwgMzYsIDQxLCAxMzIsIDIzMSwgCi0gICAgMTQwLCA0NiwgMzYsIDU2LCA2NCwgMjMxLCAxNTMsIDM2LCAyNTQsIDcwLCA1MSwgMzYsIDQ3LCAyMzEsIDE0MCwgNTEsIDM2LCAKLSAgICAyMjMsIDM4LCA0NiwgMzYsIDQ3LCAyNTIsIDEwNywgNTEsIDM2LCA0NywgMjUyLCAxMDYsIDM2LCA0NywgMjM3LCA2MywgMzYsIAotICAgIDQ3LCAyMzcsIDY0LCA1MSwgMzYsIDQ3LCAyMDUsIDM2LCA0NywgMjM5LCAyMjMsIDI1MiwgMTA2LCAzNiwgNDcsIDgxLCA2NywgCi0gICAgNTEsIDM2LCA3LCAzLCAxLCA1NywgMzYsIDcsIDMsIDEsIDcyLCAzNiwgNywgMywgMSwgNzQsIDM2LCA3LCAzLCAxLCA3MywgCi0gICAgMzYsIDcsIDMsIDEsIDY2LCAzNiwgNywgMywgMSwgMjUyLCA0NCwgMzYsIDcsIDMsIDEsIDIyMiwgMjIyLCAzNiwgNywgMywgCi0gICAgMSwgMjEyLCAzNiwgNywgMywgMSwgMTg1LCAzNiwgNywgMywgMSwgMTQ2LCAzNiwgNywgMywgMSwgMjI3LCAxMDksIDM2LCA3LCAKLSAgICAzLCAxLCAxOTYsIDM2LCA3LCAzLCAxLCAyMjQsIDczLCAxOSwgNiwgMSwgMjQ1LCA4OSwgMTksIDMsIDEsIDI0NSwgODksIAotICAgIDE5LCA2LCAxLCAyNTQsIDEyMCwgMjMwLCAyNTUsIDE5LCAzLCAxLCAyNTQsIDEyMCwgMjMwLCAyNTUsIDE5LCAyMDcsIDUzLCAKLSAgICAxOSwgMjAzLCAyMDcsIDUzLCAxOSwgNiwgMSwgMjMzLCAyMTUsIDI0OSwgMjMwLCAxOSwgMywgMSwgMjMzLCAyMTUsIDI0OSwgCi0gICAgMjMwLCAxOSwgMjIzLCAxNjUsIDE5LCAzLCAyMDAsIDIzNywgOTksIDIyOSwgMywgOTgsIDE5LCAzLCAyNDgsIDEzOCwgMjM3LCAKLSAgICA5OSwgMjI5LCAzLCA5OCwgMTksIDMsIDIwMCwgMjQ4LCAxMzgsIDIzNywgOTksIDIyOSwgMywgOTgsIDE5LCAyMzIsIDY5LCAKLSAgICA3NiwgMTksIDIyNiwgMTA5LCAxOSwgMjQ5LCAyNTQsIDIyNiwgMTA5LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDIyNiwgCi0gICAgMTA5LCAxOSwgMjU0LCAxNzMsIDIyNywgMzAsIDE5LCA2LCAxLCAyNDcsIDIwNywgMiwgMjI2LCAxMDksIDE5LCA2LCAxLCAKLSAgICAyNDcsIDE3MiwgMiwgMjI2LCAxMDksIDE5LCA2LCAxLCAyMzksIDIxNiwgMiwgMjI2LCAxMDksIDE5LCA2LCAxLCAyMzQsIAotICAgIDY1LCAyLCAyMjYsIDEwOSwgMTksIDYsIDEsIDIyNSwgMTExLCAyLCAyMjYsIDEwOSwgMTksIDYsIDEsIDIzNCwgNjcsIDIsIAotICAgIDIyNiwgMTA5LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDI0OSwgMjU0LCAyMiwgMjI2LCAxMDksIDE5LCA2LCAxLCAyNTQsIAotICAgIDIwNSwgMTksIDYsIDEsIDI1MiwgMTk4LCAxOSwgNiwgMSwgMjQ2LCAxNjksIDE5LCA2LCAxLCAyNTAsIDQ3LCAxOSwgNiwgMSwgCi0gICAgMjQ3LCAyMDYsIDE5LCA2LCAxLCAyMjMsIDg4LCAxOSwgNiwgMSwgMjQ3LCAxNzEsIDE5LCA2LCAxLCAyMjYsIDIyMywgMTksIAotICAgIDYsIDEsIDIzOSwgMjE1LCAxOSwgNiwgMSwgMjM5LCAzNSwgMTksIDYsIDEsIDIzOCwgMTYsIDE5LCA2LCAxLCAyMzYsIDY2LCAKLSAgICAxOSwgNiwgMSwgMjM0LCAyMDYsIDE5LCA2LCAxLCAyMjQsIDY0LCAxOSwgNiwgMSwgMjM0LCA2NCwgMTksIDYsIDEsIDIzMywgCi0gICAgNjksIDE5LCA2LCAxLCAyMzEsIDE4MiwgMTksIDYsIDEsIDIyOSwgMiwgMTksIDYsIDEsIDIyNywgNjEsIDE5LCA2LCAxLCAKLSAgICAyMjUsIDExMCwgMTksIDYsIDEsIDIzMywgODcsIDE5LCA2LCAxLCAyNTEsIDE2OSwgMTksIDYsIDEsIDIzMiwgMTgzLCAxOSwgCi0gICAgNiwgMSwgMjM0LCA2NiwgMTksIDYsIDEsIDIzOSwgMjE2LCAyLCAyNDksIDI1MywgMTksIDYsIDEsIDIyNSwgMTExLCAyLCAKLSAgICAyNDksIDI1MywgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAyMjYsIDEwOSwgMTksIDMsIDEsIDI0NywgMjA3LCAyLCAyMjYsIAotICAgIDEwOSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAyMjYsIDEwOSwgMTksIDMsIDEsIDIzOSwgMjE2LCAyLCAyMjYsIDEwOSwgCi0gICAgMTksIDMsIDEsIDIyNSwgMTExLCAyLCAyNDksIDI1NCwgMjIsIDIyNiwgMTA5LCAxOSwgMywgMSwgMjU0LCAyMDUsIDE5LCAzLCAKLSAgICAxLCAyNTIsIDE5OCwgMTksIDMsIDEsIDI0NiwgMTY5LCAxOSwgMywgMSwgMjUwLCA0NywgMTksIDMsIDEsIDI0NywgMjA2LCAKLSAgICAxOSwgMywgMSwgMjIzLCA4OCwgMTksIDMsIDEsIDI0NywgMTcxLCAxOSwgMywgMSwgMjI2LCAyMjMsIDE5LCAzLCAxLCAyMzksIAotICAgIDIxNSwgMTksIDMsIDEsIDIzOSwgMzUsIDE5LCAzLCAxLCAyMzgsIDE2LCAxOSwgMywgMSwgMjM2LCA2NiwgMTksIDMsIDEsIAotICAgIDIzNCwgMjA2LCAxOSwgMywgMSwgMjI0LCA2NCwgMTksIDMsIDEsIDIzNCwgNjQsIDE5LCAzLCAxLCAyMzMsIDY5LCAxOSwgMywgCi0gICAgMSwgMjMxLCAxODIsIDE5LCAzLCAxLCAzNSwgMjI5LCAyLCAxOSwgMywgMSwgMjI5LCAyLCAxOSwgMywgMSwgMjI3LCA2MSwgCi0gICAgMTksIDMsIDEsIDIyNSwgMTEwLCAxOSwgMywgMSwgMjMzLCA4NywgMTksIDMsIDEsIDI1MSwgMTY5LCAxOSwgMywgMSwgMjMyLCAKLSAgICAxODMsIDE5LCAzLCAxLCAyMzQsIDY2LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDI0OSwgMjUzLCAxOSwgMywgMSwgMjI1LCAKLSAgICAxMTEsIDIsIDI0OSwgMjUzLCAxOSwgMywgMSwgMjM0LCA2NSwgMiwgMjI2LCAxMDksIDE5LCAzLCAxLCAyMjUsIDExMSwgMiwgCi0gICAgMjI2LCAxMDksIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAyMjYsIDEwOSwgMTksIDYsIDIzOSwgNTcsIDk4LCAxOSwgMjUyLCAKLSAgICAxOTksIDk4LCAxOSwgMjI2LCAyMjQsIDk4LCAxOSwgMjI1LCAxMTEsIDIsIDI0NCwgMjE3LCA5OCwgMTksIDIyNSwgMTExLCAKLSAgICAyLCAyNTUsIDMzLCAyMiwgMjQ0LCAyMTcsIDk4LCAxOSwgMjI1LCAxMTEsIDIsIDI1MCwgMywgMjIsIDI0NCwgMjE3LCA5OCwgCi0gICAgMTksIDIzMywgODgsIDk4LCAxOSwgMjMzLCA3MCwgOTgsIDE5LCAyMzksIDU3LCA5OCwgMTksIDEsIDI1NCwgMTIwLCAyMzgsIAotICAgIDEzNSwgMTksIDMsIDEsIDI1NCwgMTIwLCAyMzgsIDEzNSwgMTksIDEsIDIyOCwgNDYsIDE5LCAzLCAxLCAyMjgsIDQ2LCAxOSwgCi0gICAgMSwgMjQ5LCAyMzAsIDE5LCAzLCAxLCAyNDksIDIzMCwgMTksIDEsIDIzOCwgMTM1LCAxOSwgMywgMSwgMjM4LCAxMzUsIDE5LCAKLSAgICAxLCAyMzAsIDI1NSwgMTksIDMsIDEsIDIzMCwgMjU1LCA3MCwgNiwgMSwgMjI5LCAxMDYsIDcwLCAzLCAxLCAyMjksIDEwNiwgCi0gICAgNzAsIDYsIDEsIDI0NywgODUsIDcwLCAzLCAxLCAyNDcsIDg1LCA3MCwgNiwgMSwgMjM4LCAyMTUsIDcwLCAzLCAxLCAyMzgsIAotICAgIDIxNSwgNzAsIDYsIDEsIDI0NCwgMjEzLCA3MCwgMywgMSwgMjQ0LCAyMTMsIDcwLCA2LCAxLCAyNDYsIDE2NSwgNzAsIDMsIAotICAgIDEsIDI0NiwgMTY1LCA3MCwgNiwgMSwgMjI5LCA4MCwgNzAsIDMsIDEsIDIyOSwgODAsIDcwLCA2LCAxLCAyNTAsIDYwLCA3MCwgCi0gICAgMywgMSwgMjUwLCA2MCwgMTksIDIzOSwgMzYsIDk4LCAxOSwgMjMxLCAxODMsIDk4LCAxOSwgMjM3LCA5OSwgMjI5LCAzLCAKLSAgICA5OCwgMTksIDEsIDIyMywgMTY5LCAxOSwgNiwgMjI2LCAyMjQsIDk4LCAxOSwgMjM3LCA5OSwgMjQ3LCAyMDcsIDk4LCAxOSwgCi0gICAgMjAwLCAyMzcsIDk5LCAyNDcsIDIwNywgOTgsIDE5LCA2LCAxLCAyMjksIDcxLCAxOSwgMywgMSwgMjI5LCA3MSwgMTksIDYsIAotICAgIDIzNywgOTksIDIyOSwgMywgOTgsIDE5LCA2LCAxLCAyMzAsIDI1MywgMTksIDMsIDEsIDIzMCwgMjUzLCAxOSwgMjMxLCAKLSAgICAxODMsIDIsIDE5NSwgOTgsIDE5LCA2LCAyMDAsIDIzNywgOTksIDIyOSwgMywgOTgsIDE5LCA2LCAyNDgsIDEzOCwgMjM3LCAKLSAgICA5OSwgMjI5LCAzLCA5OCwgMTksIDYsIDIwMCwgMjQ4LCAxMzgsIDIzNywgOTksIDIyOSwgMywgOTgsIDI4LCA2LCAxLCAyNDAsIAotICAgIDczLCAyLCAyNDUsIDIzNiwgMjgsIDYsIDEsIDIzOSwgMjE5LCAyOCwgNiwgMSwgMjQ5LCAxNzYsIDI4LCA2LCAxLCAyNDYsIAotICAgIDIxLCAyOCwgNiwgMSwgMjI1LCAxNTAsIDI0MCwgNzIsIDI4LCA2LCAxLCAyNDgsIDY5LCAyOCwgNiwgMSwgMjUyLCA1MywgCi0gICAgNzQsIDI4LCA2LCAxLCAyMjMsIDIwMiwgMjgsIDYsIDEsIDIzOSwgMTcwLCAyOCwgNiwgMSwgMjM3LCAxNTEsIDI4LCA2LCAxLCAKLSAgICAyMzUsIDQ4LCAyOCwgNiwgMSwgMjI2LCAzNiwgMjgsIDYsIDEsIDIzOCwgMTY5LCAyOCwgNiwgMSwgMjQ0LCA4MSwgMiwgCi0gICAgMjQ1LCAyMzYsIDI4LCA2LCAxLCAyMjksIDYzLCA2NiwgMjgsIDYsIDEsIDI0OCwgNjUsIDI4LCA2LCAxLCA1NywgMjgsIDYsIAotICAgIDEsIDI1MiwgMjM4LCAyOCwgNiwgMSwgMjI1LCA0MiwgMjgsIDYsIDEsIDI0NiwgNTgsIDI4LCA2LCAxLCAyNTAsIDc3LCAyOCwgCi0gICAgNiwgMSwgMjQwLCA3MiwgMjgsIDYsIDEsIDIyMywgNzcsIDI4LCA2LCAxLCAyMjMsIDk3LCAyOCwgNiwgMSwgNzQsIDI4LCA2LCAKLSAgICAxLCAyMjksIDYzLCA3NCwgMjgsIDYsIDEsIDE3NywgMjgsIDYsIDEsIDI0OCwgMiwgMjgsIDYsIDEsIDI0NywgMjQ3LCAyOCwgCi0gICAgNiwgMSwgMjQ3LCAyMzksIDI4LCA2LCAxLCA3MywgMjgsIDYsIDEsIDIzMywgMTUxLCAyOCwgNiwgMSwgMjQ3LCAxOTgsIDI4LCAKLSAgICA2LCAxLCAyNDcsIDE4OCwgMjgsIDYsIDEsIDIyNywgNDQsIDI4LCA2LCAxLCA2NiwgMjgsIDYsIDEsIDI0OCwgMjksIDI4LCAKLSAgICA2LCAxLCAxNTQsIDI4LCA2LCAxLCAyMjYsIDQwLCAyOCwgNiwgMSwgMjUxLCAxODIsIDI4LCA2LCAxLCAyMjksIDE0NiwgMjgsIAotICAgIDYsIDEsIDIyOSwgMTE2LCAyOCwgNiwgMSwgMjQ1LCAxNDAsIDUzLCAyOCwgNiwgMSwgMjIzLCAyMTMsIDI4LCA2LCAxLCAKLSAgICAyMjgsIDE2NSwgNTMsIDI4LCA2LCAxLCA3MiwgMjgsIDYsIDEsIDIyMywgMTU4LCAyOCwgNiwgMSwgMTkxLCAyOCwgMywgMSwgCi0gICAgNTcsIDI4LCAzLCAxLCAyNTIsIDIzOCwgMjgsIDMsIDEsIDIyNSwgNDIsIDI4LCAzLCAxLCAyNDYsIDU4LCAyOCwgMywgMSwgCi0gICAgMjUwLCA3NywgMjgsIDMsIDEsIDI0MCwgNzIsIDI4LCAzLCAxLCAyMjMsIDc3LCAyOCwgMywgMSwgMjIzLCA5NywgMjgsIDMsIAotICAgIDEsIDc0LCAyOCwgMywgMSwgMjI5LCA2MywgNzQsIDI4LCAzLCAxLCAxNzcsIDI4LCAzLCAxLCAyNDgsIDIsIDI4LCAzLCAxLCAKLSAgICAyNDcsIDI0NywgMjgsIDMsIDEsIDI0NywgMjM5LCAyOCwgMywgMSwgNzMsIDI4LCAzLCAxLCAyMzMsIDE1MSwgMjgsIDMsIDEsIAotICAgIDI0NywgMTk4LCAyOCwgMywgMSwgMjQ3LCAxODgsIDI4LCAzLCAxLCAyMjcsIDQ0LCAyOCwgMywgMSwgNjYsIDI4LCAzLCAxLCAKLSAgICAyNDgsIDI5LCAyOCwgMywgMSwgMTU0LCAyOCwgMywgMSwgMjI2LCA0MCwgMjgsIDMsIDEsIDI1MSwgMTgyLCAyOCwgMywgMSwgCi0gICAgMjI5LCAxNDYsIDI4LCAzLCAxLCAyMjksIDExNiwgMjgsIDMsIDEsIDI0NSwgMTQwLCA1MywgMjgsIDMsIDEsIDIyMywgMjEzLCAKLSAgICAyOCwgMywgMSwgMjI4LCAxNjUsIDUzLCAyOCwgMywgMSwgNzIsIDI4LCAzLCAxLCAyMjMsIDE1OCwgMjgsIDMsIDEsIDE5MSwgCi0gICAgMjgsIDMsIDEsIDI0MCwgNzMsIDIsIDI0NSwgMjM2LCAyOCwgMywgMSwgMjM5LCAyMTksIDI4LCAzLCAxLCAyNDksIDE3NiwgCi0gICAgMjgsIDMsIDEsIDI0NiwgMjEsIDI4LCAzLCAxLCAyMjUsIDE1MCwgMjQwLCA3MiwgMjgsIDMsIDEsIDI0OCwgNjksIDI4LCAzLCAKLSAgICAxLCAyNTIsIDUzLCA3NCwgMjgsIDMsIDEsIDIyMywgMjAyLCAyOCwgMywgMSwgMjM5LCAxNzAsIDI4LCAzLCAxLCAyMzcsIAotICAgIDE1MSwgMjgsIDMsIDEsIDIzNSwgNDgsIDI4LCAzLCAxLCAyMjYsIDM2LCAyOCwgMywgMSwgMjM4LCAxNjksIDI4LCAzLCAxLCAKLSAgICAyNDQsIDgxLCAyLCAyNDUsIDIzNiwgMjgsIDMsIDEsIDIyOSwgNjMsIDY2LCAyOCwgMywgMSwgMjQ4LCA2NSwgMjgsIDYsIDEsIAotICAgIDIzNCwgNjYsIDI4LCAzLCAxLCAyMzQsIDY2LCAyOCwgNiwgMSwgMjIzLCAyMzksIDI4LCAzLCAxLCAyMjMsIDIzOSwgMjgsIAotICAgIDYsIDEsIDIzOSwgMjEzLCA3MiwgMjgsIDMsIDEsIDIzOSwgMjEzLCA3MiwgMjgsIDYsIDEsIDIzNywgMTU1LCAyMjMsIDEzOSwgCi0gICAgMjgsIDMsIDEsIDIzNywgMTU1LCAyMjMsIDEzOSwgMjgsIDYsIDEsIDIzOSwgMjEzLCAyMzcsIDE1NSwgMjIzLCAxMzksIDI4LCAKLSAgICAzLCAxLCAyMzksIDIxMywgMjM3LCAxNTUsIDIyMywgMTM5LCAyOCwgNiwgMSwgMjUyLCAxNzMsIDIyMywgMTM5LCAyOCwgMywgCi0gICAgMSwgMjUyLCAxNzMsIDIyMywgMTM5LCAyOCwgNiwgMSwgMjM5LCAyMTMsIDI1MiwgMTczLCAyMjMsIDEzOSwgMjgsIDMsIDEsIAotICAgIDIzOSwgMjEzLCAyNTIsIDE3MywgMjIzLCAxMzksIDI4LCA2LCAxLCAyMzgsIDExMSwgMjgsIDMsIDEsIDIzOCwgMTExLCAyOCwgCi0gICAgNiwgMSwgMjMyLCAxODMsIDI4LCAzLCAxLCAyMzIsIDE4MywgMjgsIDYsIDEsIDI0NywgMzgsIDI4LCAzLCAxLCAyNDcsIDM4LCAKLSAgICAyOCwgNiwgMSwgMjM5LCAxODQsIDI4LCAzLCAxLCAyMzksIDE4NCwgMjgsIDYsIDEsIDIzOSwgMTg1LCAyLCA0NywgMjQ1LCAKLSAgICAyMzcsIDI1NSwgNDEsIDI4LCAzLCAxLCAyMzksIDE4NSwgMiwgNDcsIDI0NSwgMjM3LCAyNTUsIDQxLCAyOCwgNiwgMSwgCi0gICAgMjI1LCAxNTMsIDI4LCAzLCAxLCAyMjUsIDE1MywgMjgsIDYsIDEsIDIzMSwgMTA0LCAyMzQsIDY2LCAyOCwgMywgMSwgMjMxLCAKLSAgICAxMDQsIDIzNCwgNjYsIDI4LCA2LCAxLCAyMzQsIDY3LCAyLCAyMjYsIDE0MywgMjgsIDMsIDEsIDIzNCwgNjcsIDIsIDIyNiwgCi0gICAgMTQzLCAyOCwgNiwgMSwgMjM0LCAxOSwgMjgsIDMsIDEsIDIzNCwgMTksIDI4LCA2LCAxLCAyMzgsIDEzNSwgMjgsIDMsIDEsIAotICAgIDIzOCwgMTM1LCAyOCwgMjI2LCAxOTMsIDUzLCAzNiwgMjgsIDIyNiwgMTQzLCAzNiwgMjgsIDIzMywgMjI4LCAzNiwgMjgsIAotICAgIDE3MiwgMjMzLCA2LCAzNiwgMjgsIDE4NiwgMjMzLCA2LCAzNiwgMjgsIDIzMiwgMjQ4LCAzNiwgMjgsIDI0NCwgMTM2LCAKLSAgICAyMjYsIDE5MywgNTMsIDM2LCAyOCwgMjM2LCAxMjgsIDUzLCAyOCwgNiwgMSwgMjI5LCA2MywgMjQ0LCA4MSwgMiwgMjI3LCAKLSAgICA4OSwgMjgsIDMsIDEsIDIyOSwgNjMsIDI0NCwgODEsIDIsIDIyNywgODksIDI4LCA2LCAxLCAyMjksIDE4MiwgNTMsIDI4LCAKLSAgICAzLCAxLCAyMjksIDE4MiwgNTMsIDI4LCA2LCAxLCAyNDcsIDE5OSwgMiwgMjI2LCAxNzIsIDI4LCAzLCAxLCAyNDcsIDE5OSwgCi0gICAgMiwgMjI2LCAxNzIsIDI4LCA2LCAxLCAyNDYsIDU5LCAyLCAyMjUsIDEwOSwgMjgsIDMsIDEsIDI0NiwgNTksIDIsIDIyNSwgCi0gICAgMTA5LCAyOCwgNiwgMSwgMjQ2LCA1OSwgMiwgODIsIDI4LCAzLCAxLCAyNDYsIDU5LCAyLCA4MiwgMjgsIDYsIDEsIDI0NiwgCi0gICAgNTksIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDMsIDEsIDI0NiwgNTksIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDYsIDEsIDIyMywgCi0gICAgNzgsIDIsIDI1MCwgMzQsIDI4LCAzLCAxLCAyMjMsIDc4LCAyLCAyNTAsIDM0LCAyOCwgNiwgMSwgMjIzLCA5OCwgMiwgMjUwLCAKLSAgICAzNCwgMjgsIDMsIDEsIDIyMywgOTgsIDIsIDI1MCwgMzQsIDI4LCA2LCAxLCAxODgsIDIsIDI1MCwgMzQsIDI4LCAzLCAxLCAKLSAgICAxODgsIDIsIDI1MCwgMzQsIDI4LCA2LCAxLCAxODgsIDIsIDYxLCA4MiwgMjgsIDMsIDEsIDE4OCwgMiwgNjEsIDgyLCAyOCwgCi0gICAgNiwgMSwgMTg4LCAyLCA4MiwgMjgsIDMsIDEsIDE4OCwgMiwgODIsIDI4LCA2LCAxLCAyNTMsIDIzLCAxNzcsIDI4LCAzLCAxLCAKLSAgICAyNTMsIDIzLCAxNzcsIDI4LCA2LCAxLCAyNDcsIDI0MCwgMiwgMjUwLCAzNCwgMjgsIDMsIDEsIDI0NywgMjQwLCAyLCAyNTAsIAotICAgIDM0LCAyOCwgNiwgMjAsIDI0NywgMjQwLCAyNDYsIDU4LCAyOCwgMywgMjAsIDI0NywgMjQwLCAyNDYsIDU4LCAyOCwgNiwgMSwgCi0gICAgMjMzLCAxNTIsIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDMsIDEsIDIzMywgMTUyLCAyLCAyMzYsIDE1NCwgODgsIDI4LCA2LCAxLCAKLSAgICAyNTUsIDQ3LCAxNTQsIDI4LCAzLCAxLCAyNTUsIDQ3LCAxNTQsIDI4LCA2LCAxLCAyNDcsIDE4OSwgMiwgMjUwLCAzNCwgMjgsIAotICAgIDMsIDEsIDI0NywgMTg5LCAyLCAyNTAsIDM0LCAyOCwgNiwgMSwgMjI3LCA0NSwgMiwgMjUwLCAzNCwgMjgsIDMsIDEsIDIyNywgCi0gICAgNDUsIDIsIDI1MCwgMzQsIDI4LCA2LCAxLCAyMjgsIDMyLCA2NiwgMjgsIDMsIDEsIDIyOCwgMzIsIDY2LCAyOCwgNiwgMSwgCi0gICAgMjI4LCAzMiwgOTcsIDIsIDgyLCAyOCwgMywgMSwgMjI4LCAzMiwgOTcsIDIsIDgyLCAyOCwgNiwgMSwgMjQ1LCAxNzAsIDIsIAotICAgIDI1MCwgMzQsIDI4LCAzLCAxLCAyNDUsIDE3MCwgMiwgMjUwLCAzNCwgMjgsIDYsIDIwLCAyMjcsIDQ1LCAyMjYsIDQwLCAyOCwgCi0gICAgMywgMjAsIDIyNywgNDUsIDIyNiwgNDAsIDI4LCA2LCAxLCAyNTEsIDE4MywgMiwgMjUwLCAzNCwgMjgsIDMsIDEsIDI1MSwgCi0gICAgMTgzLCAyLCAyNTAsIDM0LCAyOCwgNiwgMSwgMjUxLCAxODMsIDIsIDYxLCA4MiwgMjgsIDMsIDEsIDI1MSwgMTgzLCAyLCAKLSAgICA2MSwgODIsIDI4LCA2LCAxLCAyMjksIDkxLCAyOCwgMywgMSwgMjI5LCA5MSwgMjgsIDYsIDEsIDI1NSwgNDcsIDI1MSwgCi0gICAgMTgyLCAyOCwgMywgMSwgMjU1LCA0NywgMjUxLCAxODIsIDI4LCA2LCAxLCAyNTUsIDQ3LCAyNTEsIDE4MywgMiwgMjUwLCAKLSAgICAzNCwgMjgsIDMsIDEsIDI1NSwgNDcsIDI1MSwgMTgzLCAyLCAyNTAsIDM0LCAyOCwgMSwgMjMzLCAyMjIsIDI4LCA2LCAxLCAKLSAgICAyMjMsIDc4LCAyLCAyNTIsIDEwNiwgMjgsIDMsIDEsIDIyMywgNzgsIDIsIDI1MiwgMTA2LCAyOCwgNiwgMSwgMTg4LCAyLCAKLSAgICA4OCwgMjgsIDMsIDEsIDE4OCwgMiwgODgsIDI4LCA2LCAxLCAyNDgsIDMsIDIsIDIyNywgODksIDI4LCAzLCAxLCAyNDgsIDMsIAotICAgIDIsIDIyNywgODksIDI4LCA2LCAxLCAyNDcsIDI0MCwgMiwgODgsIDI4LCAzLCAxLCAyNDcsIDI0MCwgMiwgODgsIDI4LCA2LCAKLSAgICAxLCAyNDcsIDI0MCwgMiwgMjI3LCA4OSwgMjgsIDMsIDEsIDI0NywgMjQwLCAyLCAyMjcsIDg5LCAyOCwgNiwgMSwgMjM4LCAKLSAgICAyMjMsIDI1MSwgMTgyLCAyOCwgMywgMSwgMjM4LCAyMjMsIDI1MSwgMTgyLCAyOCwgNiwgMSwgMjQ3LCAyNDgsIDIsIDIyNywgCi0gICAgODksIDI4LCAzLCAxLCAyNDcsIDI0OCwgMiwgMjI3LCA4OSwgMjgsIDMsIDEsIDIzMywgMjIyLCAyOCwgNiwgMSwgMTAyLCAyLCAKLSAgICAyNTIsIDEwNiwgMjgsIDMsIDEsIDEwMiwgMiwgMjUyLCAxMDYsIDI4LCA2LCAxLCAxMDIsIDIsIDIxOSwgMjgsIDMsIDEsIAotICAgIDEwMiwgMiwgMjE5LCAyOCwgNiwgMjAsIDEwMiwgMjQwLCA3MiwgMjgsIDMsIDIwLCAxMDIsIDI0MCwgNzIsIDI4LCA2LCAxLCAKLSAgICAyNDAsIDczLCAyLCAyNTIsIDEwNiwgMjgsIDMsIDEsIDI0MCwgNzMsIDIsIDI1MiwgMTA2LCAyOCwgNiwgMSwgMjMwLCAyMjIsIAotICAgIDI4LCAzLCAxLCAyMzAsIDIyMiwgMjgsIDYsIDEsIDIzMCwgMjIzLCAyLCAyMTksIDI4LCAzLCAxLCAyMzAsIDIyMywgMiwgCi0gICAgMjE5LCAyOCwgNiwgMSwgMjIzLCA3OCwgMiwgMjE5LCAyOCwgMywgMSwgMjIzLCA3OCwgMiwgMjE5LCAyOCwgNiwgMSwgMjIzLCAKLSAgICA5OCwgMiwgMjE5LCAyOCwgMywgMSwgMjIzLCA5OCwgMiwgMjE5LCAyOCwgNiwgMSwgMjU1LCA0NywgMjQ4LCA2OSwgMjgsIDMsIAotICAgIDEsIDI1NSwgNDcsIDI0OCwgNjksIDI4LCA2LCAxLCAyNDQsIDgxLCAyLCAyMzcsIDYzLCAyOCwgMywgMSwgMjQ0LCA4MSwgMiwgCi0gICAgMjM3LCA2MywgMjgsIDYsIDEsIDI0NCwgODEsIDIsIDIxOSwgMjgsIDMsIDEsIDI0NCwgODEsIDIsIDIxOSwgMjgsIDYsIDEsIAotICAgIDEzMCwgMiwgMjE5LCAyOCwgMywgMSwgMTMwLCAyLCAyMTksIDI4LCA2LCAxLCAyNTMsIDMxLCA3MywgMjgsIDMsIDEsIDI1MywgCi0gICAgMzEsIDczLCAyOCwgNiwgMSwgMjUzLCAzMSwgMTMwLCAyLCAyMTksIDI4LCAzLCAxLCAyNTMsIDMxLCAxMzAsIDIsIDIxOSwgCi0gICAgMjgsIDYsIDEsIDE2MSwgMiwgMjE5LCAyOCwgMywgMSwgMTYxLCAyLCAyMTksIDI4LCA2LCAxLCA5NywgMiwgMjM3LCA2MywgCi0gICAgMjgsIDMsIDEsIDk3LCAyLCAyMzcsIDYzLCAyOCwgNiwgMSwgOTcsIDIsIDIxOSwgMjgsIDMsIDEsIDk3LCAyLCAyMTksIDI4LCAKLSAgICA2LCAxLCA5NywgMiwgNDcsIDE1NSwgMjgsIDMsIDEsIDk3LCAyLCA0NywgMTU1LCAyOCwgNiwgMSwgMjUxLCAxODMsIDIsIAotICAgIDIxOSwgMjgsIDMsIDEsIDI1MSwgMTgzLCAyLCAyMTksIDI4LCA2LCAxLCAyNDYsIDU5LCAyLCAyNTAsIDM0LCAyOCwgMywgMSwgCi0gICAgMjQ2LCA1OSwgMiwgMjUwLCAzNCwgMjgsIDYsIDEsIDIyMywgMjE0LCAyLCAyMTksIDI4LCAzLCAxLCAyMjMsIDIxNCwgMiwgCi0gICAgMjE5LCAyOCwgNiwgMSwgMjQ2LCA1OSwgMiwgMTk1LCAyMiwgODgsIDI4LCAzLCAxLCAyNDYsIDU5LCAyLCAxOTUsIDIyLCAKLSAgICA4OCwgMjgsIDYsIDEsIDI0NSwgMTcwLCAyLCA4OCwgMjgsIDMsIDEsIDI0NSwgMTcwLCAyLCA4OCwgMjgsIDYsIDEsIDI0NSwgCi0gICAgMTcwLCAyLCA4MiwgMjgsIDMsIDEsIDI0NSwgMTcwLCAyLCA4MiwgMjgsIDYsIDEsIDIzOCwgMTQzLCAyNTAsIDc3LCAyOCwgCi0gICAgMywgMSwgMjM4LCAxNDMsIDI1MCwgNzcsIDI4LCA2LCAxLCAyMzgsIDE0MywgMjQ5LCAxNzYsIDI4LCAzLCAxLCAyMzgsIAotICAgIDE0MywgMjQ5LCAxNzYsIDI4LCA2LCAxLCAyMzgsIDE0MywgMjIzLCAzMSwgMjgsIDMsIDEsIDIzOCwgMTQzLCAyMjMsIDMxLCAKLSAgICAyOCwgNiwgMSwgMjM4LCAxNDMsIDI0OCwgNjMsIDI4LCAzLCAxLCAyMzgsIDE0MywgMjQ4LCA2MywgMjgsIDYsIDEsIDIzOCwgCi0gICAgMTQzLCAyMzcsIDE1MSwgMjgsIDMsIDEsIDIzOCwgMTQzLCAyMzcsIDE1MSwgMjgsIDYsIDEsIDIzOCwgMTQzLCAyMzUsIDQ4LCAKLSAgICAyOCwgMywgMSwgMjM4LCAxNDMsIDIzNSwgNDgsIDI4LCA2LCAxLCAyMzgsIDE0MywgMjI4LCAyMDQsIDI4LCAzLCAxLCAyMzgsIAotICAgIDE0MywgMjI4LCAyMDQsIDI4LCA2LCAxLCAyMzgsIDE0MywgMjI2LCAxMzksIDI4LCAzLCAxLCAyMzgsIDE0MywgMjI2LCAKLSAgICAxMzksIDI4LCA2LCAxLCAyMDAsIDIyMywgOTcsIDI4LCAzLCAxLCAyMDAsIDIyMywgOTcsIDI4LCA2LCAxLCAyNDgsIDMsIDIsIAotICAgIDg4LCAyOCwgMywgMSwgMjQ4LCAzLCAyLCA4OCwgMjgsIDYsIDEsIDIzNywgMjA1LCAyOCwgMywgMSwgMjM3LCAyMDUsIDI4LCAKLSAgICA2LCAxLCAyMzEsIDE4NCwgMjgsIDMsIDEsIDIzMSwgMTg0LCAyOCwgNiwgMSwgMjI0LCAxMCwgMjgsIDMsIDEsIDIyNCwgMTAsIAotICAgIDI4LCA2LCAxLCAyMzIsIDEzOCwgMjgsIDMsIDEsIDIzMiwgMTM4LCAyOCwgNiwgMSwgMjI0LCAxNDEsIDI4LCAzLCAxLCAKLSAgICAyMjQsIDE0MSwgMjgsIDYsIDEsIDI1NCwgMjI0LCAxNzcsIDI4LCAzLCAxLCAyNTQsIDIyNCwgMTc3LCAyOCwgNiwgMSwgCi0gICAgMjQ4LCAzLCAyLCAyMzYsIDE1NCwgODgsIDI4LCAzLCAxLCAyNDgsIDMsIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDYsIDEsIAotICAgIDI0NywgMjQwLCAyLCAyMzYsIDE1NCwgODgsIDI4LCAzLCAxLCAyNDcsIDI0MCwgMiwgMjM2LCAxNTQsIDg4LCAxMjAsIDYsIAotICAgIDEsIDI1NCwgMzEsIDEyMCwgNiwgMSwgMjUyLCAyMTAsIDEyMCwgNiwgMSwgMjQ2LCAzNiwgMTIwLCA2LCAxLCAyNTAsIDE4OSwgCi0gICAgMTIwLCA2LCAxLCAyNDgsIDM5LCAxMjAsIDYsIDEsIDIyMywgMTE3LCAxMjAsIDYsIDEsIDI0OCwgMjQsIDEyMCwgNiwgMSwgCi0gICAgMjQ3LCAxNzMsIDEyMCwgNiwgMSwgOTYsIDEyMCwgNiwgMSwgMjIzLCA3NywgMTIwLCA2LCAxLCAyMzksIDI1MiwgMTIwLCA2LCAKLSAgICAxLCAyMzcsIDE1NCwgMTIwLCA2LCAxLCAyMjQsIDY3LCAxMjAsIDYsIDEsIDI1MiwgMzksIDEyMCwgNiwgMSwgMjM4LCAyNDMsIAotICAgIDEyMCwgNiwgMSwgMjQ0LCAyMjcsIDEyMCwgNiwgMSwgMjM5LCAxNzksIDEyMCwgNiwgMSwgMjQ2LCA2NSwgMTIwLCA2LCAxLCAKLSAgICAyNTEsIDE3OCwgMTIwLCA2LCAxLCAyMzYsIDIxMCwgMTIwLCA2LCAxLCAyMjMsIDIwMiwgMTIwLCA2LCAxLCAyMzQsIDIzMiwgCi0gICAgMTIwLCA2LCAxLCAyMjksIDE0NiwgMTIwLCA2LCAxLCAyMjQsIDIwNiwgMTIwLCA2LCAxLCAyNTEsIDIwNCwgMTIwLCA2LCAxLCAKLSAgICAyMzMsIDE0MCwgMTIwLCA2LCAxLCAyMzksIDE1OCwgMTIwLCA2LCAxLCAyMDgsIDEyMCwgNiwgMSwgMjMwLCAxOTYsIDEyMCwgCi0gICAgNiwgMSwgMjI0LCAyMzAsIDEyMCwgNiwgMSwgMjI2LCAxNDEsIDEyMCwgNiwgMSwgMjMxLCAyMjUsIDEyMCwgNiwgMSwgMjUxLCAKLSAgICA2OCwgMTIwLCA2LCAxLCAyMjMsIDE4OCwgMTIwLCA2LCAxLCAyMzMsIDI3LCAxMjAsIDYsIDEsIDIzOCwgMjUzLCAxMjAsIDYsIAotICAgIDEsIDIzNCwgODMsIDEyMCwgNiwgMSwgMjQ3LCA4NywgMTIwLCA1MiwgMSwgNDIsIDEzMiwgMjMxLCAxMzksIDEyMCwgMjU0LCAKLSAgICAxNDQsIDEyMCwgMjQ3LCAyNDMsIDc2LCAxMjAsIDI0NywgMTQ5LCA3NiwgMTIwLCAyNTEsIDU0LCAxMjAsIDIzMiwgNjksIAotICAgIDc2LCAxMjAsIDI1NSwgNDgsIDc2LCAxMjAsIDMsIDEsIDI1NCwgMzEsIDEyMCwgMywgMSwgMjUyLCAyMTAsIDEyMCwgMywgMSwgCi0gICAgMjQ2LCAzNiwgMTIwLCAzLCAxLCAyNTAsIDE4OSwgMTIwLCAzLCAxLCAyNDgsIDM5LCAxMjAsIDMsIDEsIDIyMywgMTE3LCAKLSAgICAxMjAsIDMsIDEsIDI0OCwgMjQsIDEyMCwgMywgMSwgMjQ3LCAxNzMsIDEyMCwgMywgMSwgOTYsIDEyMCwgMywgMSwgMjIzLCAKLSAgICA3NywgMTIwLCAzLCAxLCAyMzksIDI1MiwgMTIwLCAzLCAxLCAyMzcsIDE1NCwgMTIwLCAzLCAxLCAyMjQsIDY3LCAxMjAsIDMsIAotICAgIDEsIDI1MiwgMzksIDEyMCwgMywgMSwgMjM4LCAyNDMsIDEyMCwgMywgMSwgMjQ0LCAyMjcsIDEyMCwgMywgMSwgMjM5LCAKLSAgICAxNzksIDEyMCwgMywgMSwgMjQ2LCA2NSwgMTIwLCAzLCAxLCAyNTEsIDE3OCwgMTIwLCAzLCAxLCAyMzYsIDIxMCwgMTIwLCAKLSAgICAzLCAxLCAyMjMsIDIwMiwgMTIwLCAzLCAxLCAyMzQsIDIzMiwgMTIwLCAzLCAxLCAyMjksIDE0NiwgMTIwLCAzLCAxLCAyMjQsIAotICAgIDIwNiwgMTIwLCAzLCAxLCAyNTEsIDIwNCwgMTIwLCAzLCAxLCAyMzMsIDE0MCwgMTIwLCAzLCAxLCAyMzksIDE1OCwgMTIwLCAKLSAgICAzLCAxLCAyMDgsIDEyMCwgMywgMSwgMjMwLCAxOTYsIDEyMCwgMywgMSwgMjI0LCAyMzAsIDEyMCwgMywgMSwgMjI2LCAxNDEsIAotICAgIDEyMCwgMywgMSwgMjMxLCAyMjUsIDEyMCwgMywgMSwgMjUxLCA2OCwgMTIwLCAzLCAxLCAyMjMsIDE4OCwgMTIwLCAzLCAxLCAKLSAgICAyMzMsIDI3LCAxMjAsIDMsIDEsIDIzOCwgMjUzLCAxMjAsIDMsIDEsIDIzNCwgODMsIDEyMCwgMywgMSwgMjQ3LCA4NywgCi0gICAgMTIwLCAzLCAyMCwgMjQ4LCA0MCwgMjIzLCAxODgsIDEyMCwgMjQ2LCAyMTgsIDIyOCwgMzgsIDEyMCwgMjQ0LCA5NSwgNzgsIAotICAgIDI1NSwgNDIsIDI0NywgMTY2LCA3OCwgMjU1LCA0MiwgMjMwLCAxOTcsIDc4LCAyNTUsIDQyLCAyMjksIDEzMywgNzgsIDI1NSwgCi0gICAgNDIsIDIyMywgMTA2LCAyMzIsIDEyMSwgNzgsIDI1NSwgNDIsIDIyMywgMTA2LCAyNDYsIDE4MywgNzgsIDI1NSwgNDIsIAotICAgIDIyNiwgMTQ5LCA3OCwgMjU1LCA0MiwgMjMxLCAxOTEsIDc4LCAyNTUsIDQyLCAyMjMsIDEwNSwgNzgsIDI1NSwgNDIsIDIzMywgCi0gICAgMTcxLCA3OCwgMjU1LCA0MiwgMjIzLCAyMDgsIDc4LCAyNTUsIDQyLCAyMjcsIDEsIDc4LCAyNTUsIDQyLCAyNDYsIDExMiwgCi0gICAgNzgsIDI1NSwgNDIsIDI0NiwgMTEzLCAyMzYsIDM4LCA3OCwgMjU1LCA0MiwgMjQ2LCAxMTAsIDc4LCAyNTUsIDQyLCAyMzIsIAotICAgIDEyMiwgMjMzLCAxOTMsIDc4LCAyNTUsIDQyLCAyMjcsIDI3LCAyNDYsIDEyNiwgNzgsIDI1NSwgNDIsIDIzMywgMTU1LCA3OCwgCi0gICAgMjU1LCA0MiwgMjU0LCA2MCwgMjQ1LCAxNjMsIDc4LCAyNTUsIDQyLCAyMzYsIDQ3LCA3OCwgMjU1LCA0MiwgMjM3LCA1MywgCi0gICAgNzgsIDI1NSwgNDIsIDIzNiwgMjA2LCA3OCwgMjU1LCA0MiwgMjM2LCAyMDcsIDIzOCwgMjU0LCA3OCwgMjU1LCA0MiwgMjUwLCAKLSAgICAxMzcsIDc4LCAyNTUsIDQyLCAyMzIsIDEzMywgNzgsIDI1NSwgNDIsIDIyNywgMjcsIDIzMiwgMTE3LCA3OCwgMjU1LCA0MiwgCi0gICAgMjIzLCAyMTYsIDI1MiwgMjExLCAyMjMsIDE3MywgNzgsIDI1NSwgNDIsIDIzNCwgNzIsIDc4LCAyNTUsIDQyLCAyNDAsIDMzLCAKLSAgICA3OCwgMjU1LCA0MiwgMjUwLCA2MSwgNzgsIDI1NSwgNDIsIDIyMywgMzYsIDc4LCAxNjUsIDIzNywgNSwgMjUxLCAxMDYsIAotICAgIDc4LCAyMzIsIDI1NSwgMjI5LCA5MywgNzgsIDIzMiwgMjU1LCAyNDUsIDEzMSwgMjMwLCAxOTcsIDc4LCAyMzIsIDI1NSwgCi0gICAgMjQ1LCAxMzEsIDIzMywgMTY2LCA3OCwgMjMyLCAyNTUsIDI0NSwgMTMxLCAyMzIsIDEyNiwgNzgsIDIzMiwgMjU1LCAyNDUsIAotICAgIDU4LCA3OCwgMjMyLCAyNTUsIDIyNiwgMzgsIDc4LCAyMzIsIDI1NSwgMjMwLCAxOTcsIDc4LCAyMzIsIDI1NSwgMjMzLCAKLSAgICAxNjYsIDc4LCAyMzIsIDI1NSwgMjMyLCAxMjYsIDc4LCAyMzIsIDI1NSwgMjQ0LCAyMjMsIDc4LCAyMzIsIDI1NSwgMjQ0LCAKLSAgICAyMjQsIDI0NSwgMTMzLCAzMiwgMjI1LCA0NiwgNzgsIDIzMiwgMjU1LCAyMzIsIDcyLCA3OCwgMjMyLCAyNTUsIDI1MCwgCi0gICAgMTc2LCAxNDUsIDIzNywgMjcsIDc4LCAyMzIsIDI1NSwgMjM2LCAxOTgsIDc4LCAyMzIsIDE3MSwgMjM3LCAyNiwgNzgsIAotICAgIDIzMiwgMjU1LCAyMzIsIDE0LCA3OCwgMjMyLCAxNzEsIDIzMywgMTcyLCA3OCwgMjMyLCAyNTUsIDIyOSwgNzksIDI0OSwgCi0gICAgMTQwLCA3OCwgMjMyLCAyNTUsIDIyOCwgMjQ0LCAyNDksIDE0MCwgNzgsIDIzMiwgMTcxLCAyMjgsIDE2NiwgMjMzLCAxNjgsIAotICAgIDc4LCAxNjUsIDIyNSwgMTEzLCAyNDksIDE0MCwgNzgsIDE2NSwgMjAzLCAyNDksIDE0MCwgNzgsIDIzMiwgMTcxLCAyMzQsIAotICAgIDE5NSwgMjQ1LCAxNjIsIDc4LCAyMzIsIDI1NSwgMjMyLCAxMjcsIDIzMiwgMTIxLCA3OCwgMSwgMjU0LCAyMjcsIDc4LCAxLCAKLSAgICAyNTIsIDIwMCwgNzgsIDEsIDI0NiwgMzQsIDc4LCAxLCAyNTAsIDE2MCwgNzgsIDEsIDI0NSwgMTIxLCA3OCwgMSwgMjI1LCAKLSAgICA0NiwgNzgsIDEsIDIyMywgOTksIDc4LCAxLCAyNDUsIDkwLCA3OCwgMSwgMjI3LCAxMCwgNzgsIDEsIDIyMywgMTc1LCA3OCwgCi0gICAgMSwgMzUsIDIzOSwgNTksIDc4LCAxLCAyMzksIDU5LCA3OCwgMSwgMjM4LCAxMiwgNzgsIDEsIDM1LCAyMzYsIDIxNSwgNzgsIAotICAgIDEsIDIzNiwgMjE1LCA3OCwgMSwgMzUsIDIzNCwgMTk0LCA3OCwgMSwgMjM0LCAxOTQsIDc4LCAxLCAyMzEsIDIsIDc4LCAxLCAKLSAgICAyNTQsIDI5LCA3OCwgMSwgMzUsIDIzMywgMTUxLCA3OCwgMSwgMjMzLCAxNTEsIDc4LCAxLCAzNSwgMjI2LCA0MSwgNzgsIDEsIAotICAgIDIyNiwgNDEsIDc4LCAxLCAyMzIsIDkyLCA3OCwgMSwgMjMxLCAyMDUsIDc4LCAxLCAyMjksIDc4LCA3OCwgMSwgMjI3LCA1OCwgCi0gICAgNzgsIDIwLCAyMjMsIDIwMCwgNDcsIDIyNSwgNDYsIDc4LCAyMCwgMjIzLCAyMDAsIDIyNSwgNDcsIDIyMywgMTc1LCA3OCwgCi0gICAgMjAsIDIyMywgMjAwLCA0NywgMjIzLCAxNzUsIDc4LCAyMzIsIDE3MSwgMjQ2LCAxMTIsIDc4LCAyMzIsIDE3MSwgMjQ2LCAKLSAgICAxMTAsIDEwLCA2NSwgNTMsIDEwLCA1LCAyMzAsIDI1MiwgMTAsIDI0NywgMSwgMjM3LCAxMywgMTAsIDUsIDIzMSwgMjEsIAotICAgIDI1NCwgMTMxLCAyNTAsIDIzMiwgMjMxLCAxMTEsIDI1NCwgMTMxLCAyNDYsIDIzNywgMjMxLCAxMTEsIDEwLCAyMzEsIDI1MCwgCi0gICAgMjU0LCAxMzEsIDIzMywgMTI0LCAyMzYsIDEzMCwgNTMsIDI1NCwgMTMxLCAyMzMsIDEyNCwgMjI3LCAyNCwgMjI2LCAxOTUsIAotICAgIDUzLCAyNTUsIDEyLCA1MywgMTAsIDI1MSwgNTQsIDEwLCAyNTAsIDEyNSwgMjI5LCAxNzMsIDEwLCAyMzMsIDEsIDIyNSwgCi0gICAgMzIsIDUzLCAxMCwgNSwgMjM2LCAxMTMsIDEwLCA1LCAyMzEsIDgsIDI1NCwgMjI5LCAyMjQsIDE1NiwgMTAsIDUsIDI1NCwgCi0gICAgMjI5LCAyNTQsIDc0LCAxMCwgNSwgMjMyLCAxMywgMjU0LCAyMjgsIDEwLCA1LCAyMzIsIDE3LCAyNTQsIDIxNCwgMjU0LCAKLSAgICAxNzgsIDEwLCA1LCAyMjcsIDgyLCAxMCwgMywgMjAxLCAyMjcsIDkxLCAxMCwgMywgMjAxLCAyMCwgOTIsIDIsIDIxNiwgMiwgCi0gICAgMjIzLCAyMjQsIDEwLCAzLCAyMDEsIDIyMywgMTEwLCAxMCwgMywgMjQ3LCAxMDQsIDEwLCAzLCAyNTAsIDE1NiwgMTAsIDMsIAotICAgIDIzOSwgMjMsIDEwLCAyMjksIDE4NiwgMTAsIDIyNiwgNjYsIDU2LCAyMzIsIDE3MSwgNzYsIDEwLCAyMzIsIDY5LCA3NiwgCi0gICAgMTAsIDEsIDI0NSwgMTQ5LCAxMCwgMSwgOTIsIDIsIDIzNywgNTksIDQ2LCAxMCwgMSwgOTIsIDIsIDE2NCwgNDYsIDEwLCAxLCAKLSAgICAyMjQsIDE0NSwgMiwgMTY0LCA0NiwgMTAsIDEsIDkyLCAyLCAxNjQsIDUxLCAxMCwgMSwgNjIsIDIsIDE2NCwgNDYsIDEwLCAKLSAgICAxLCAyNTQsIDIyNywgMTAsIDEsIDI1MiwgMjIzLCAxMCwgMSwgMjI3LCAzNSwgMjM3LCAyMiwgMTAsIDEsIDIyNywgMzQsIAotICAgIDEwLCAxLCAyMjYsIDIzNiwgMTAsIDEsIDIzOSwgMTY4LCAxMCwgMSwgMjQ1LCAxNTksIDEwLCAxLCAyMzgsIDIyNSwgMTAsIAotICAgIDEsIDI1MCwgMTY1LCAxMCwgMSwgMjI2LCAyNDUsIDEwLCAxLCAyMzEsIDIyNSwgMTAsIDEsIDIyMywgMTEwLCAxMCwgMSwgCi0gICAgMjMwLCAyMDEsIDEwLCAxLCAyMjksIDExMCwgMTAsIDEsIDIzMSwgMjQsIDEwLCAxLCAyNTAsIDE4NCwgMTAsIDEsIDIyNywgCi0gICAgOTEsIDEwLCAxLCAyMjMsIDExMywgMTAsIDEsIDI1NCwgMjQ4LCAxMCwgMSwgMjQ2LCA2MywgMTAsIDEsIDIzOCwgMjUyLCAyLCAKLSAgICAxMzUsIDE5NywgNDYsIDEwLCAxLCAyMzgsIDI1MiwgMiwgMTUyLCAxOTcsIDUxLCAxMCwgMSwgMjQ3LCAxMDcsIDYyLCAyLCAKLSAgICAyMzksIDIyMywgMTk2LCAxMCwgMSwgMjQ3LCAxMDcsIDYyLCAyLCAxMzUsIDE5NywgNDYsIDEwLCAxLCAyNDcsIDEwNywgNjIsIAotICAgIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDIyNywgNjMsIDEwLCAxLCAyNDcsIDg3LCAxMCwgMSwgMjMyLCAxMzEsIDEwLCAxLCAKLSAgICAyMzksIDU5LCAxMCwgMSwgMjM4LCAyMCwgMTAsIDEsIDIzNiwgMjI1LCAxMCwgMSwgMjM0LCAyNTEsIDEwLCAxLCAyNDUsIAotICAgIDEwNywgMTAsIDEsIDIyNCwgMTQ0LCAxMCwgMSwgOTIsIDIzNywgNDEsIDEwLCAxLCAyMjMsIDIyNCwgMTAsIDI0NywgMTAyLCAKLSAgICAxMCwgMjUwLCAxNTQsIDEwLCAyMzksIDIxLCAxMCwgMjQ3LCAxMDQsIDEwLCAyNTAsIDE1NiwgMTAsIDIzOSwgMjMsIDEwLCAKLSAgICAyMjksIDEzNywgMTAsIDIyNywgMjM0LCAxMCwgMjM3LCA1NywgNDYsIDEwLCAxNjQsIDQ2LCAxMCwgMTY0LCA1MSwgMTAsIAotICAgIDIyNywgMjUzLCAyNTQsIDIyNywgMTAsIDIzOSwgMjIzLCAyNTAsIDE1NiwgMTAsIDE2NSwgMjM0LCAyNTIsIDI0NiwgNTAsIAotICAgIDEwLCAyMjMsIDUsIDEwLCAzMSwgNSwgMywgMjI1LCA2NSwgNDYsIDEwLCAzMSwgNSwgMjM5LCAyMjMsIDMsIDIyNSwgNjUsIAotICAgIDQ2LCAxMCwgMzEsIDUsIDU2LCA1MSwgMTAsIDIwMCwgMjUwLCAxNTYsIDEwLCAyNDcsIDEwNSwgMiwgMTM1LCAyNDksIDEzOCwgCi0gICAgMjU0LCAxMzEsIDIxLCAyMjMsIDg5LCAyNTQsIDEzMSwgMjEsIDExOCwgMjU0LCAxMzEsIDIxLCAxMTMsIDI1NCwgMTMxLCAKLSAgICAyMSwgMTY2LCAyNTQsIDEzMSwgMjEsIDE1OCwgMjU0LCAxMzEsIDIxLCAxNzMsIDI1NCwgMTMxLCAyMSwgMTgzLCAyNTQsIAotICAgIDEzMSwgMjEsIDE5NCwgMjU0LCAxMzEsIDIxLCAxODcsIDI1NCwgMTMxLCAyMSwgMTkyLCAxMCwgMjMzLCAxMjMsIDUzLCAxMCwgCi0gICAgMjUwLCA3MSwgMjI5LCAxNzMsIDEwLCAyMjYsIDE5MywgMjI5LCAxNzMsIDEwLCAyNDcsIDM3LCAyMzIsIDI1MywgMjI4LCAKLSAgICA1OCwgMTAsIDEsIDI0OSwgMTM5LCAyNTIsIDIyMywgMTAsIDEsIDI0OSwgMTM5LCAyMzIsIDEzMSwgMTAsIDEsIDIyNywgCi0gICAgMjE5LCAyNTQsIDIyNywgMTAsIDEsIDkyLCAyMjQsIDE1NywgMTAsIDEsIDkyLCAyLCAyMjQsIDE0NiwgMTY0LCA0NiwgMTAsIAotICAgIDEsIDkyLCAyLCAyMjQsIDE0NiwgMTY0LCA1MSwgMTAsIDEsIDIwMSwgMjQ1LCAxNDksIDEwLCAxLCAyMDEsIDE2NCwgMjU0LCAKLSAgICAyMjcsIDEwLCAxLCAyMDEsIDE2NCwgMjI0LCAxNDQsIDEwLCAxLCA5NywgMiwgMTY0LCA0NiwgMTAsIDEsIDIwMSwgMTY0LCAKLSAgICAyMjMsIDIyNCwgMTAsIDEsIDIyNiwgMTQsIDEwLCAxLCAyMjYsIDEyLCAxMCwgMSwgMjUyLCAyMzAsIDEwLCAxLCAyMjcsIAotICAgIDM1LCAyLCAyMzEsIDEzOSwgMTAsIDEsIDIyNywgMzUsIDIsIDE1MiwgMTk3LCA2NCwgMjQ4LCAxMjQsIDEwLCAxLCAyMzMsIAotICAgIDE0MCwgMTAsIDEsIDIyNywgMzIsIDEwLCAxLCAyNTIsIDIyMSwgMTAsIDEsIDEwMSwgMiwgMTY0LCA0NiwgMTAsIDEsIDEwMSwgCi0gICAgMiwgMTM1LCAxOTcsIDYxLCA0NiwgMTAsIDEsIDIzNCwgMTY2LCAxMCwgMSwgMjQ4LCA3NSwgMTAsIDEsIDEwMSwgMiwgMTUyLCAKLSAgICAxOTcsIDQ2LCAxMCwgMSwgMjI3LCA0OCwgMTAsIDEsIDIyNywgNDYsIDEwLCAxLCAyNTAsIDExMiwgMTAsIDEsIDI1MCwgCi0gICAgMTY2LCAyLCAyMzEsIDEzOSwgMTAsIDEsIDI1MCwgMTY2LCAyLCA1NiwgNTEsIDEwLCAxLCAyNTAsIDE2NiwgMiwgNTYsIAotICAgIDI1MiwgMjE0LCAyMiwgMywgMjI3LCA5MSwgMTAsIDEsIDI1MCwgMTcxLCAxMCwgMSwgMjUwLCAxMTQsIDEwLCAxLCAyNDgsIAotICAgIDk5LCAxMCwgMSwgMjUwLCAxNjYsIDIsIDE1MiwgMTk3LCA2NCwgMjQ4LCAxMjQsIDEwLCAxLCAyNTAsIDE2NiwgMiwgMjQ2LCAKLSAgICAyNDMsIDE5NywgNDYsIDEwLCAxLCAyMzEsIDk1LCAxMCwgMSwgMjMxLCAyMjYsIDIsIDMsIDE5NiwgMTAsIDEsIDIzMSwgCi0gICAgMjI2LCAyLCAyMzEsIDEzOSwgMTAsIDEsIDIzMSwgMjI2LCAyLCA1NiwgNTEsIDEwLCAxLCAyMzEsIDIyNiwgMiwgMywgMjI1LCAKLSAgICA2NSwgNTEsIDEwLCAxLCAyMzEsIDIyNiwgMiwgNTYsIDI1MiwgMjE0LCAyMiwgNTYsIDQ2LCAxMCwgMSwgMjMxLCAyMjYsIDIsIAotICAgIDEzNSwgMTk3LCA0NiwgMTAsIDEsIDIzOSwgMTY1LCAxMCwgMSwgMjMxLCAyMjYsIDIsIDI0NiwgMjQzLCAxOTcsIDQ2LCAxMCwgCi0gICAgMSwgMjMwLCAyMDIsIDIsIDU2LCAyNTIsIDIxNCwgMjIsIDU2LCA0NiwgMTAsIDEsIDIzMCwgMjAyLCAyLCAxNTIsIDE5NywgCi0gICAgNTEsIDEwLCAxLCAyMzAsIDIwMiwgMiwgMTUyLCAxOTcsIDI1MiwgMjE0LCAyMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjMxLCAKLSAgICAyNSwgMiwgMTM1LCAxOTcsIDUxLCAxMCwgMSwgMjMxLCAyNSwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjI3LCA5MiwgMiwgCi0gICAgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjU0LCAyNDksIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDEsIDI0OSwgMTM5LCAyNDcsIDg3LCAKLSAgICAxMCwgMSwgMjQ3LCA4OCwgMiwgNTYsIDIzNiwgNzEsIDUxLCAxMCwgMSwgMjQ3LCA4OCwgMiwgNTYsIDUxLCAxMCwgMSwgCi0gICAgMjI1LCAzNiwgMTAsIDEsIDI0NywgODgsIDIsIDE1MiwgMTk3LCA1MSwgMTAsIDEsIDIzMywgMTM4LCAxMCwgMSwgMjMyLCAKLSAgICAxMzIsIDIsIDU2LCA0NiwgMTAsIDEsIDIzMiwgMTMyLCAyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAyMzgsIDI1MSwgMTAsIDEsIAotICAgIDIyNywgMTk3LCAyMzksIDU5LCAxMCwgMSwgMjM5LCA2MCwgMiwgMjMxLCAxMzksIDEwLCAxLCAyMzksIDYwLCAyLCA1NiwgCi0gICAgNDYsIDEwLCAxLCAyMzUsIDEzOSwgMTAsIDEsIDIzOSwgNjAsIDIsIDE1MiwgMTk3LCA1MSwgMTAsIDEsIDI0NiwgMTgwLCAKLSAgICAxMCwgMSwgMjQ2LCAxODEsIDIsIDIzMSwgMTM5LCAxMCwgMSwgMjM1LCAxMDUsIDEwLCAxLCAyNDYsIDE4MSwgMiwgMTM1LCAKLSAgICAxOTcsIDUxLCAxMCwgMSwgMjQ1LCAyMTAsIDEwLCAxLCAyNDYsIDE4MSwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgMjE2LCAKLSAgICAyLCAzLCAxOTYsIDEwLCAxLCAyMTYsIDIsIDU2LCA0NiwgMTAsIDEsIDIxNiwgMiwgMTUyLCAxOTcsIDQ2LCAxMCwgMSwgCi0gICAgMjE2LCAyLCAxNTIsIDE5NywgNTEsIDEwLCAxLCAyMzQsIDI1MiwgMiwgNTYsIDUxLCAxMCwgMSwgMjM0LCAyNTIsIDI0NiwgCi0gICAgNTAsIDEwLCAxLCAyMzEsIDEyNSwgMTAsIDEsIDIzNCwgMjUyLCAyLCAyMzEsIDEzOSwgMTAsIDEsIDIzNCwgMjUyLCAyLCAKLSAgICAxNTIsIDE5NywgNDYsIDEwLCAxLCAyNDUsIDEwOCwgMjQ5LCAxNTcsIDEwLCAxLCAyMjcsIDQ5LCAyLCA1NiwgNDYsIDEwLCAKLSAgICAxLCAyNDUsIDEwOCwgMiwgNjIsIDQ2LCAxMCwgMSwgMjQ1LCAxMDgsIDI0NiwgOCwgMTAsIDEsIDI0NSwgMTA4LCAyNDYsIDksIAotICAgIDIsIDE2NCwgNDYsIDEwLCAxLCAyMjcsIDM1LCAyMzcsIDIzLCAyNDYsIDgsIDEwLCAxLCAyMjQsIDE0NSwgMiwgMjMxLCAKLSAgICAxMzksIDEwLCAxLCAyMzgsIDE4NSwgMjM0LCA4OCwgMTAsIDEsIDIzNCwgODgsIDEwLCAxLCA2NiwgMTAsIDEsIDIyMywgCi0gICAgMTU4LCAxMCwgMSwgMjM4LCAxODUsIDIyMywgMTU4LCAxMCwgMSwgMjI0LCAxNDUsIDIsIDEzNSwgMTk3LCA0NiwgMTAsIDEsIAotICAgIDIyNSwgNDIsIDEwLCAxLCAyNDcsIDEwNywgMjIzLCAyMjQsIDEwLCAxLCA2MiwgMiwgMjI3LCA4OSwgMTAsIDEsIDYyLCAyLCAKLSAgICAzLCAxOTYsIDEwLCAxLCAyMjQsIDE0NSwgMiwgNTYsIDQ2LCAxMCwgMSwgNzIsIDEwLCAxLCA2MiwgMiwgMTUyLCAxOTcsIAotICAgIDUxLCAxMCwgMSwgNjIsIDI1MywgMjksIDEwLCAxLCA2MiwgMjUzLCAzMCwgMiwgMTY0LCA0NiwgMTAsIDI0NiwgMjE4LCAKLSAgICAyMjgsIDM4LCAxMCwgMSwgMjU1LCAxOSwgMTAsIDMsIDIwMSwgMjAsIDIzMSwgMjUsIDIsIDIxNiwgMiwgOTIsIDIzNywgNDEsIAotICAgIDEwLCAzLCAyMDEsIDIwLCAyMzIsIDEzMiwgMiwgMjE2LCAyLCA5MiwgMjM3LCA0MSwgMTAsIDMsIDIwMSwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDMsIDIwMSwgMjE2LCAyNTQsIDIyNywgMTAsIDMsIDIwMSwgMjM5LCAxNjgsIDEwLCAzLCAyMDEsIDE1MiwgMjQ5LCAKLSAgICAxMzgsIDEwLCAzLCAyMDEsIDIzMCwgMjAxLCAxMCwgMjQ3LCAyMzMsIDEwNiwgMjU0LCAzMywgMTAsIDIyOCwgNTYsIDEwNiwgCi0gICAgMjMxLCA2OCwgMjQ4LCAzLCAyNDUsIDU2LCAxMCwgMywgMjAxLCAyMzEsIDEwMiwgMjIzLCA4OSwgMTAsIDMsIDIwMSwgMjI1LCAKLSAgICAxMTIsIDIzMSwgMjM1LCAyMjMsIDg5LCAxMCwgMywgMjAxLCAyNDksIDEzOSwgMjQ1LCAxMTksIDEwNiwgMjM4LCAyMjUsIAotICAgIDEwLCAzLCAyMDEsIDU1LCA0NCwgMTUsIDEwLCAzLCAxODQsIDIzMCwgMjAxLCAxMCwgMywgMjAxLCAyMzcsIDU4LCAxMCwgMywgCi0gICAgMjI0LCAxNDQsIDEwLCAzLCAyMjMsIDIyNCwgMTAsIDMsIDIwMSwgMjIzLCAyMjQsIDEwLCAzLCAyMDEsIDIzNCwgMjUxLCAKLSAgICAxMCwgMjMzLCAyMywgMTA2LCAyMzEsIDE0LCAxMCwgMjQ3LCAyNDEsIDI1MSwgMjE5LCAxODQsIDIyOCwgMzgsIDEwLCAyNDcsIAotICAgIDI0MSwgMjUxLCAyMTksIDIwMSwgMjI4LCAzOCwgMTAsIDIzMSwgMTAyLCAyMDEsIDIyOCwgMzksIDIsIDI0NywgNTMsIDI1MSwgCi0gICAgMjE4LCAxMCwgMywgMTg0LCAyMzYsIDIyNSwgMTAsIDEsIDI1MCwgMTY2LCAyLCAyMzksIDIyMywgMTk2LCAxMCwgMSwgMjMxLCAKLSAgICAyMjYsIDIsIDIzOSwgMjIzLCAxOTYsIDI0NywgMTQyLCAyNTQsIDEzMSwgMjEsIDIyMywgODksIDI0NywgMTQyLCAyNTQsIAotICAgIDEzMSwgMjEsIDExOCwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTEzLCAyNDcsIDE0MiwgMjU0LCAxMzEsIDIxLCAxNjYsIAotICAgIDI0NywgMTQyLCAyNTQsIDEzMSwgMjEsIDE1OCwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTczLCAyNDcsIDE0MiwgMjU0LCAKLSAgICAxMzEsIDIxLCAxODMsIDI0NywgMTQyLCAyNTQsIDEzMSwgMjEsIDE5NCwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTg3LCAKLSAgICAyNDcsIDE0MiwgMjU0LCAxMzEsIDIxLCAxOTIsIDEwLCAxLCAyMjksIDExMSwgMiwgNTYsIDUxLCAxMCwgMSwgMjUwLCAxODUsIAotICAgIDIsIDU2LCA1MSwgMTAsIDEsIDI0NiwgNjQsIDIsIDU2LCA1MSwgMTAsIDUsIDIyOCwgMjQzLCAyNTQsIDE5MywgMTAsIDUsIAotICAgIDIyOCwgMjQzLCAyMzIsIDIzNiwgMjM2LCAyMTAsIDEwLCAxLCAyNDUsIDEwOCwgMiwgMjM5LCAyMjMsIDE5NiwgMTUxLCAKLSAgICAyNDcsIDIzMywgMTA2LCAyMzMsIDE5MSwgMTUxLCAyMjcsIDIxNSwgMjQ2LCAyMTgsIDIyOCwgMzgsIDE1MSwgMjI3LCAyNTUsIAotICAgIDI0NiwgMjE4LCAyMjgsIDM4LCAxNTEsIDIyNywgMjE1LCAyNTEsIDYxLCAxNTEsIDIyNywgMjU1LCAyNTEsIDYxLCAxNTEsIAotICAgIDE2OSwgMjUxLCA2MSwgMTUxLCAyNTEsIDYyLCAyMjgsIDIwMiwgMjM3LCAyMzcsIDE1MSwgMjUxLCA2MiwgMjI4LCAyMDIsIAotICAgIDIzMSwgMTUzLCAxNTEsIDIyNywgMjE1LCAyNTEsIDYyLCAyMjgsIDIwMiwgMjM3LCAyMzcsIDE1MSwgMjI3LCAyNTUsIDI1MSwgCi0gICAgNjIsIDIyOCwgMjAyLCAyMzEsIDE1MywgMTUxLCAyNTEsIDIwLCAxNTEsIDI0NSwgMTM4LCAyMzQsIDk5LCAxNTEsIDI0NSwgCi0gICAgMTM4LCAyMzYsIDE5NywgMTUxLCAyNDUsIDEzOCwgMjU0LCA3MSwgMTUxLCAyNTUsIDQ4LCA3NiwgMTUxLCAxLCAyNTQsIAotICAgIDIzMCwgMTUxLCAxLCAyMjcsIDIxOSwgMjU0LCAyMzAsIDE1MSwgMSwgMjUyLCAxOTcsIDE1MSwgMSwgMjQ2LCAxNzIsIDE1MSwgCi0gICAgMSwgMjQ2LCAxNzMsIDI0NiwgMTU2LCAxNTEsIDEsIDI1MCwgMTYzLCAxNTEsIDEsIDI0OSwgMTM5LCAyNTAsIDE2NCwgMjMxLCAKLSAgICAxMzYsIDE1MSwgMSwgMjQ1LCAxMjEsIDE1MSwgMSwgMjI0LCAxNDQsIDE1MSwgMSwgMjIzLCAxMTAsIDE1MSwgMSwgMjQ1LCAKLSAgICA4OCwgMTUxLCAxLCAyMjcsIDYsIDE1MSwgMSwgMjI3LCA3LCAyNDYsIDE1NiwgMTUxLCAxLCAyMjMsIDE0OCwgMTUxLCAxLCAKLSAgICAyMjMsIDE0OSwgMjQ1LCAxMjEsIDE1MSwgMSwgMjM5LCAzOCwgMTUxLCAxLCAyMzgsIDE5LCAxNTEsIDEsIDIzNiwgMTI3LCAKLSAgICAxNTEsIDEsIDIzNCwgMTk0LCAxNTEsIDEsIDIyOSwgMTc5LCAxNTEsIDEsIDM1LCAyMjksIDE3OSwgMTUxLCAxLCA3MiwgCi0gICAgMTUxLCAxLCAyMzMsIDE1MSwgMTUxLCAxLCAyMDAsIDIzMywgMTUxLCAxNTEsIDEsIDIzMSwgMjIsIDE1MSwgMSwgMjMyLCAKLSAgICAxMjUsIDE1MSwgMSwgMjMxLCAxMzYsIDE1MSwgMSwgMjI5LCA3OCwgMTUxLCAxLCAyMjcsIDU2LCAxNTEsIDEsIDIzMywgCi0gICAgMTEzLCAyNTIsIDE4NywgMTUxLCAxLCAyMzMsIDExMywgMjQ2LCA2MSwgMTUxLCAxLCAyMzMsIDExMywgMjUwLCAxOSwgMTUxLCAKLSAgICAyMzIsIDE3NCwgNDYsIDE1MSwgMjMyLCAxNzQsIDUxLCAxNTEsIDIzMiwgMTc0LCAyNDgsIDEzNywgMTUxLCAyMjMsIDIxLCAKLSAgICA0NiwgMTUxLCAyMjMsIDIxLCA1MSwgMTUxLCAyMjMsIDIxLCAyNDgsIDEzNywgMTUxLCAyMzEsIDI0NywgNDYsIDE1MSwgCi0gICAgMjMxLCAyNDcsIDUxLCAxNTEsIDI0OCwgMTM4LCAyMjMsIDI4LCAyNDQsIDIxMiwgMTUxLCAyNDgsIDEzOCwgMjIzLCAyOCwgCi0gICAgMjU0LCAxNzksIDE1MSwgMjQ1LCAxMjQsIDQ2LCAxNTEsIDI0NSwgMTI0LCA1MSwgMTUxLCAyNDUsIDEyMywgMjQ4LCAxMzcsIAotICAgIDE1MSwgMjQ3LCAxODYsIDQ2LCAxNTEsIDI0NywgMTg2LCA1MSwgMTUxLCAyMzEsIDQ0LCAxNTEsIDI0NywgODEsIDI0OSwgCi0gICAgMTQwLCAxNTEsIDIzMiwgNTEsIDE1MSwgMjMxLCA2NiwgMTUxLCAxMzUsIDYxLCAxOTcsIDQ2LCAxNTEsIDEzNSwgNjEsIAotICAgIDE5NywgNTEsIDE1MSwgMTUyLCAxOTcsIDQ2LCAxNTEsIDE1MiwgMTk3LCA1MSwgMTUxLCAyMzQsIDk3LCAyMzcsIDE3MSwgCi0gICAgNDYsIDE1MSwgMjM0LCA5NywgMjM3LCAxNzEsIDUxLCAxNTEsIDIzNiwgMjgsIDE1MSwgMjUzLCAyOCwgMTUxLCAxLCAyMjgsIAotICAgIDE2MywgMjIzLCA4MywgMTUxLCAxLCAyMjgsIDE2MywgMjM4LCAyMTksIDE1MSwgMSwgMjI4LCAxNjMsIDI0NywgOTcsIDEwLCAKLSAgICAxLCAyNTIsIDIyNCwgMiwgMTUyLCAxOTcsIDI0NCwgMTYyLCA1MSwgMTAsIDEsIDI1MiwgMjI0LCAyLCA1NiwgMjUyLCAyMTQsIAotICAgIDIyLCAxNTIsIDE5NywgNDYsIDEwLCAxLCAyNTIsIDIyNCwgMiwgMTUyLCAxOTcsIDIzMiwgMjUxLCAyMjUsIDEwNiwgNTEsIAotICAgIDEwLCAxLCAyNTIsIDIyNCwgMiwgMTUyLCAxOTcsIDIzMiwgMjUxLCAyMjUsIDEwNiwgMjUyLCAyMTQsIDIyLCAxMzUsIDE5NywgCi0gICAgNDYsIDEwLCAxLCAyNTIsIDIyNCwgMiwgMTM1LCAxOTcsIDI1MiwgMjE0LCAyMiwgNTYsIDQ2LCAxMCwgMSwgMjUyLCAyMjQsIAotICAgIDIsIDIzOSwgMjIzLCAzLCAyMjUsIDY1LCA1MSwgMTAsIDEsIDI1MiwgMjI0LCAyLCAzLCAxOTYsIDEwLCAxLCAxMDEsIDIsIAotICAgIDEzNSwgMTk3LCA0NiwgMTAsIDEsIDEwMSwgMiwgMTUyLCAxOTcsIDIzMiwgMjUxLCAyMjUsIDEwNiwgNTEsIDEwLCAxLCAKLSAgICAyNTAsIDE2NiwgMiwgMTM1LCAxOTcsIDIyNCwgMjM2LCAyNTIsIDIxNCwgMjIsIDMsIDIyNywgOTEsIDEwLCAxLCAyNTAsIAotICAgIDE2NiwgMiwgMjM5LCAyMjMsIDMsIDIyNSwgNjUsIDUxLCAxMCwgMSwgMjMxLCAyMjYsIDIsIDgyLCAxMCwgMSwgMjMwLCAKLSAgICAyMDIsIDIsIDI0NiwgMjQzLCAxOTcsIDQ2LCAxMCwgMSwgMjU0LCAyNDksIDIsIDEzNSwgMTk3LCA0NiwgMTAsIDEsIDI1NCwgCi0gICAgMjQ5LCAyLCAxNTIsIDE5NywgMjMyLCAyNTEsIDI0OCwgMTI1LCA0NiwgMTAsIDEsIDI1NCwgMjQ5LCAyLCAxMzUsIDE5NywgCi0gICAgMjI0LCAyMzYsIDQ2LCAxMCwgMSwgMjQ3LCA4OCwgMiwgMTM1LCAxOTcsIDUxLCAxMCwgMSwgMjQ3LCA4OCwgMiwgMTUyLCAKLSAgICAxOTcsIDIzMiwgMjUxLCAyMjUsIDEwNiwgNTEsIDEwLCAxLCAyMzgsIDI1MiwgMiwgNTYsIDQ2LCAxMCwgMSwgMjM4LCAyNTIsIAotICAgIDIsIDE1MiwgMTk3LCA0NiwgMTAsIDEsIDIzOCwgMjUyLCAyLCAxNTIsIDE5NywgMjMyLCAyNTEsIDIyNSwgMTA2LCA1MSwgCi0gICAgMTAsIDEsIDU1LCAyLCA1NiwgNDYsIDEwLCAxLCA1NSwgMiwgNTYsIDUxLCAxMCwgMSwgMjM0LCAyNTIsIDIsIDEzNSwgMTk3LCAKLSAgICA1MSwgMTAsIDEsIDIzNCwgMjUyLCAyLCAzLCAyMjcsIDkxLCAxMCwgMSwgMjM0LCAyNTIsIDIsIDMsIDE5NiwgMTAsIDEsIAotICAgIDIxNiwgMiwgMTI1LCAxMCwgMSwgMjMxLCAyMjYsIDIsIDEzNSwgMTk3LCAyMjQsIDIzNiwgNDYsIDEwLCAxLCAyMzEsIDIyNiwgCi0gICAgMiwgMTY0LCA0NiwgMTAsIDEsIDIzMCwgMjAyLCAyLCAxMzUsIDE5NywgMjI0LCAyMzYsIDQ2LCAxMCwgMSwgMTAxLCAyLCAzLCAKLSAgICAxMCwgMSwgMjI3LCA5MiwgNTEsIDEwLCAxLCAxMDEsIDIsIDMsIDEwLCAxLCAyMjcsIDkyLCAyMiwgMTM1LCAyNDksIDEzOCwgCi0gICAgMTAsIDEsIDIzMCwgMjAyLCAyLCAzLCAxMCwgMSwgMjI3LCA5MiwgMjIsIDEzNSwgMjQ5LCAxMzgsIDEwLCAxLCAyMzEsIAotICAgIDIyNiwgMiwgMywgMTAsIDEsIDIyNywgOTIsIDIyLCAxMzUsIDI0OSwgMTM4LCAxMCwgMSwgMTAxLCAyLCAzLCAxMCwgMSwgCi0gICAgMjI3LCA5MiwgNDYsIDEwLCAxLCA5MiwgMiwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTM1LCA0NiwgMTAsIDEsIDkyLCAyLCAKLSAgICAyNDcsIDE0MiwgMjU0LCAxMzEsIDIxLCAxNTIsIDQ2LCAxMCwgMSwgMjQ3LCAxMDcsIDYyLCAyLCAyNDcsIDE0MiwgMjU0LCAKLSAgICAxMzEsIDIxLCAxMzUsIDQ2LCAxMCwgMSwgMjQ3LCAxMDcsIDYyLCAyLCAyNDcsIDE0MiwgMjU0LCAxMzEsIDIxLCAxNTIsIAotICAgIDQ2LCAxMCwgMSwgMjQ3LCAxMDcsIDYyLCAyLCAyNDcsIDE0MiwgMjU0LCAxMzEsIDIxLCAyNDYsIDI0MywgNTEsIDEwLCAxLCAKLSAgICAyMjQsIDE0NSwgMiwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTM1LCA0NiwgMTAsIDEsIDIyNCwgMTQ1LCAyLCAyNDcsIAotICAgIDE0MiwgMjU0LCAxMzEsIDIxLCAxNTIsIDQ2LCAxMCwgMSwgNjIsIDI1MywgMzAsIDIsIDI0NywgMTQyLCAyNTQsIDEzMSwgCi0gICAgMjEsIDEzNSwgNDYsIDEwLCAxLCA2MiwgMjUzLCAzMCwgMiwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMTUyLCA0NiwgMTAsIAotICAgIDEsIDEwMSwgMiwgMjQ3LCAxNDIsIDI1NCwgMTMxLCAyMSwgMjQ2LCAyNDMsIDUxLCAxMCwgMSwgMjMwLCAyMDIsIDIsIDI0NywgCi0gICAgMTQyLCAyNTQsIDEzMSwgMjEsIDI0NiwgMjQzLCA0NiwgMTAsIDEsIDIzMCwgMjAyLCAyLCAyMzksIDIyMywgMTk2LCAxMCwgCi0gICAgMSwgMjM5LCA2MCwgMiwgMTM1LCAxOTcsIDQ2LCAyMjYsIDI0OCwgMSwgMjQ1LCAxNjcsIDIyNiwgMjQ4LCAxLCAyMjksIAotICAgIDExOCwgMjI2LCAyNDgsIDEsIDIzNCwgMjUwLCAyMjYsIDI0OCwgMSwgMjMyLCAyMiwgMjI2LCAyNDgsIDEsIDI1MywgNjksIAotICAgIDIyNiwgMjQ4LCAxLCAyMzcsIDIwMiwgMjI2LCAyNDgsIDEsIDIzOSwgNzAsIDIyNiwgMjQ4LCAxLCAyNTQsIDIxOSwgMjI2LCAKLSAgICAyNDgsIDEsIDIyNSwgNjIsIDIyNiwgMjQ4LCAxLCAyMzYsIDIyNCwgMjI2LCAyNDgsIDEsIDI0NywgMTI3LCAyMjYsIDI0OCwgCi0gICAgMSwgMjUwLCAyMSwgMjI2LCAyNDgsIDEsIDIyNiwgMjUwLCAyMjYsIDI0OCwgMSwgMjM4LCA0MCwgMjI2LCAyNDgsIDEsIAotICAgIDI0NiwgMTg5LCAyMjYsIDI0OCwgMSwgMjQ2LCAxNCwgMjI2LCAyNDgsIDEsIDIzMCwgMjAwLCAyMjYsIDI0OCwgMSwgMjUwLCAKLSAgICAxMjMsIDIyNiwgMjQ4LCAxLCAyMjMsIDEwMiwgMjI2LCAyNDgsIDEsIDIyNywgNTcsIDIyNiwgMjQ4LCAxLCAyMjQsIDIxLCAKLSAgICAyMjYsIDI0OCwgMSwgMjMzLCAxNjEsIDIyNiwgMjQ4LCAxLCAyMzksIDE3MiwgMjI2LCAyNDgsIDEsIDI1MSwgMTg1LCAyMjYsIAotICAgIDI0OCwgMSwgMjI2LCAxOSwgMjI2LCAyNDgsIDEsIDI0NSwgODMsIDIyNiwgMjQ4LCAxLCAyMzgsIDIyNiwgMjI2LCAyNDgsIAotICAgIDEsIDIyNiwgMjQ5LCAyMjYsIDI0OCwgMSwgMjIzLCAxMTYsIDIyNiwgMjQ4LCAxLCAyMjksIDEwOSwgMjI2LCAyNDgsIDEsIAotICAgIDIzMSwgMjgsIDIyNiwgMjQ4LCAxLCAyNTAsIDE4NywgMjI2LCAyNDgsIDEsIDk2LCAyMjYsIDI0OCwgMSwgMjIzLCAyNywgCi0gICAgMjI2LCAyNDgsIDEsIDI1NCwgMjQ2LCAyMjYsIDI0OCwgMSwgMjQ2LCA2MiwgMjI2LCAyNDgsIDEsIDIzMiwgMTM1LCAyMjYsIAotICAgIDI0OCwgMSwgMjI0LCAxNzEsIDIyNiwgMjQ4LCAyNTUsIDQ5LCAyMjYsIDI0OCwgMjU1LCA2MiwgMjI2LCAyNDgsIDI0NCwgCi0gICAgNzAsIDIyNiwgMjQ4LCAyNDgsIDM0LCAyMjYsIDI0OCwgMjI1LCAxNjYsIDIyNiwgMjQ4LCAyMzQsIDUxLCAyMjYsIDI0OCwgCi0gICAgMjQ4LCA0MSwgMjI2LCAyNDgsIDI0NywgMTM3LCAyMjYsIDI0OCwgMjM0LCA5NiwgMjI2LCAyNDgsIDIzNCwgMTA0LCAyMjYsIAotICAgIDI0OCwgMjI3LCAyMzQsIDIyNiwgMjQ4LCAxLCAyMzUsIDI1NCwgMjA0LCAyMSwgMjIzLCA4OSwgMjA0LCAyMSwgMTE4LCAKLSAgICAyMDQsIDIxLCAxMTMsIDIwNCwgMjEsIDE2NiwgMjA0LCAyMSwgMTU4LCAyMDQsIDIxLCAxNzMsIDIwNCwgMjEsIDE4MywgCi0gICAgMjA0LCAyMSwgMTk0LCAyMDQsIDIxLCAxODcsIDIwNCwgMjEsIDE5MiwgMjA0LCAxLCA1NywgMjA0LCAxLCAyNDgsIDM1LCAKLSAgICAyMDQsIDEsIDc0LCAyMDQsIDEsIDcyLCAyMDQsIDEsIDY2LCAyMDQsIDEsIDIzNCwgNTIsIDIwNCwgMSwgNzMsIDIwNCwgMSwgCi0gICAgMjUwLCAxNzcsIDIwNCwgMSwgMTk5LCAyMDQsIDEsIDI1MywgNzAsIDIwNCwgMSwgMjEzLCAyMDQsIDEsIDIyNywgMTA3LCAKLSAgICAyMDQsIDEsIDIzOSwgMTc5LCAyMDQsIDEsIDI1MSwgMjA0LCAyMDQsIDEsIDI1MCwgMTg5LCAyMDQsIDEsIDIwOCwgMjA0LCAKLSAgICAxLCAyMzEsIDk5LCAyMDQsIDEsIDIzMSwgMzEsIDIwNCwgMSwgMjQ2LCAxNDQsIDIwNCwgMSwgMjQ3LCAxMjksIDIwNCwgMSwgCi0gICAgMTc3LCAyMDQsIDEsIDIzOCwgNDMsIDIwNCwgMSwgMjM2LCAyLCAyMjQsIDEwMiwgMjA0LCAxLCAxOTgsIDIwNCwgMSwgMjM0LCAKLSAgICAxNzMsIDIwNCwgMSwgMjM2LCAxLCAyMDQsIDEsIDE1NCwgMjA0LCAxLCAyMjQsIDE3MywgMjA0LCAxLCAxOTEsIDIwNCwgMSwgCi0gICAgMjM0LCAxNzQsIDIyNCwgMTAyLCAyMDQsIDEsIDIzOSwgMTEwLCAyMzksIDE3OSwgMjA0LCAxLCAyMzksIDExMCwgMjUxLCAKLSAgICAyMDQsIDIwNCwgMSwgMjM5LCAxMTAsIDIwOCwgMjA0LCAzNiwgMjI5LCA2MywgMjAxLCAyMjYsIDExOCwgMjA0LCAzNiwgCi0gICAgMjI5LCA2MywgMTg0LCAyMjYsIDExOCwgMjA0LCAzNiwgMjI5LCA2MywgMjMxLCAxMzUsIDIyNiwgMTE4LCAyMDQsIDM2LCAKLSAgICAxODIsIDI1MCwgMzMsIDIyNiwgMTE4LCAyMDQsIDM2LCAxODIsIDIwMSwgMjI2LCAxMTgsIDIwNCwgMzYsIDE4MiwgMTg0LCAKLSAgICAyMjYsIDExOCwgMjA0LCAzNiwgMTgyLCAyMzEsIDEzNSwgMjI2LCAxMTgsIDIwNCwgMzYsIDIzNSwgMjI4LCA3NiwgMjA0LCAKLSAgICAzNiwgNDcsIDU2LCA0NiwgMjA0LCAyMDEsIDIwNiwgMjU0LCAxNDQsIDIwNCwgMTg0LCAyMDYsIDI1NCwgMTQ0LCAyMDQsIAotICAgIDE0LCAyMzQsIDUzLCAyNTAsIDQ0LCAyMDQsIDE0LCAyNDYsIDE0MywgMjA0LCAyNTEsIDU0LCAyMDQsIDI0NywgMTQ5LCA3NiwgCi0gICAgMjA0LCAyMzgsIDI1LCA5NCwgNSwgMjUyLCAxOSwgOTQsIDUsIDI1NCwgMTYwLCA5NCwgNSwgMjI0LCAyMTEsIDk0LCAxLCAKLSAgICAyMjksIDYzLCA1NywgOTQsIDEsIDU3LCA5NCwgMSwgMjU1LCA2MywgOTQsIDEsIDc0LCA5NCwgMSwgMjQwLCA0NywgOTQsIDEsIAotICAgIDY2LCA5NCwgMSwgMjI1LCA3NiwgOTQsIDEsIDE1MywgMTQ2LCA5NCwgMSwgMTUzLCAxNDksIDk0LCAxLCAyNTIsIDIxLCA3MiwgCi0gICAgOTQsIDEsIDIyOSwgNjMsIDcyLCA5NCwgMSwgNzIsIDk0LCAxLCAyNTQsIDI1MywgOTQsIDEsIDI1MiwgMjEsIDczLCA5NCwgCi0gICAgMSwgMjI5LCA2MywgNzMsIDk0LCAxLCA3MywgOTQsIDEsIDI1NCwgNTMsIDk0LCAxLCAxNzcsIDk0LCAxLCAyMzgsIDIyNywgCi0gICAgOTQsIDEsIDI0NiwgMTkzLCA5NCwgMSwgMjQ2LCA2NiwgOTQsIDEsIDIzNSwgMTM3LCA5NCwgMSwgMjUyLCAzOSwgOTQsIDEsIAotICAgIDI1MSwgMjA0LCA5NCwgMSwgMjM5LCAxNzksIDk0LCAxLCAyMzksIDE2MCwgOTQsIDEsIDIzNCwgMTczLCA5NCwgMSwgMjI2LCAKLSAgICAyMCwgOTQsIDEsIDIyNiwgMTAsIDk0LCAxLCAyNTAsIDExNywgOTQsIDEsIDI1MCwgMTAxLCA5NCwgMSwgMjM1LCAxOCwgOTQsIAotICAgIDEsIDIyNywgMTA3LCA5NCwgMSwgMjI2LCAyNTEsIDk0LCAxLCAyNTAsIDE4OSwgOTQsIDEsIDI1MCwgMjIsIDk0LCAxLCAKLSAgICAyMzYsIDEsIDk0LCAxLCAyMzUsIDEwLCA5NCwgMSwgMjEzLCA5NCwgMSwgMjMzLCA5NywgOTQsIDEsIDI1MywgNzAsIDk0LCAKLSAgICAxLCAyNTIsIDE5MCwgOTQsIDEsIDE5OCwgOTQsIDEsIDE5MSwgOTQsIDEsIDIwOCwgOTQsIDEsIDIzMSwgOTksIDk0LCAxLCAKLSAgICAyMzgsIDQzLCA5NCwgMSwgMjM3LCAxNDgsIDk0LCAxLCAyMzcsIDE0NywgOTQsIDEsIDIyNSwgNjQsIDk0LCAxLCAyMjksIAotICAgIDE0NiwgOTQsIDEsIDIyOCwgMTEwLCA5NCwgMSwgMjMxLCAzMSwgOTQsIDEsIDE1NCwgOTQsIDUsIDIzNCwgMjAyLCA5NCwgNSwgCi0gICAgMjU0LCA0MCwgOTQsIDMxLCA1LCAyNTUsIDYzLCA5NCwgMzEsIDUsIDc0LCA5NCwgMzEsIDUsIDI0MCwgNDcsIDk0LCAzMSwgCi0gICAgNSwgNjYsIDk0LCAzMSwgNSwgMjI1LCA3NiwgOTQsIDMxLCA1LCAxNTMsIDE0NiwgOTQsIDMxLCA1LCAxNTMsIDIzMSwgMTAwLCAKLSAgICA5NCwgMzEsIDUsIDI1MiwgMjEsIDcyLCA5NCwgMzEsIDUsIDIyOSwgNjMsIDcyLCA5NCwgMzEsIDUsIDcyLCA5NCwgMzEsIDUsIAotICAgIDI1NCwgMjUzLCA5NCwgMzEsIDUsIDI1MiwgMjEsIDczLCA5NCwgMzEsIDUsIDIyOSwgNjMsIDczLCA5NCwgMzEsIDUsIDczLCAKLSAgICA5NCwgMzEsIDUsIDI1NCwgNTMsIDk0LCA1LCAyMjQsIDIxNiwgOTQsIDIzNCwgNjksIDk0LCAyMjgsIDI3LCA1LCAyMjUsIAotICAgIDE2MSwgOTQsIDIyOCwgMjcsIDUsIDI1NCwgMTYyLCA5NCwgMjQ1LCAyMzcsIDI1NSwgNDEsIDk0LCAyNTUsIDMzLCAyNTUsIAotICAgIDQxLCA5NCwgMSwgMjMyLCAxMzgsIDk0LCAxLCAyMzgsIDIxNCwgOTQsIDEsIDI0NiwgNTYsIDk0LCAxLCAyMjMsIDExNywgCi0gICAgOTQsIDEsIDI1MCwgMTA2LCA5NCwgMSwgMjMxLCAxODQsIDk0LCAxLCAyNDcsIDEyOSwgOTQsIDEsIDIyMywgMTI2LCA5NCwgCi0gICAgMSwgMTUzLCAyMzEsIDEwMCwgOTQsIDEsIDE1MywgMjM3LCAxNDksIDk0LCAzMSwgNSwgMTUzLCAxNDksIDk0LCAzMSwgNSwgCi0gICAgMTUzLCAyMzcsIDE0OSwgOTQsIDI1MCwgMTUxLCA5NCwgNDcsIDI1MCwgMTUxLCA5NCwgMjEsIDIyMywgODksIDk0LCAyMSwgCi0gICAgMTE4LCA5NCwgMjEsIDExMywgOTQsIDIxLCAxNjYsIDk0LCAyMSwgMTU4LCA5NCwgMjEsIDE3MywgOTQsIDIxLCAxODMsIDk0LCAKLSAgICAyMSwgMTk0LCA5NCwgMjEsIDE4NywgOTQsIDIxLCAxOTIsIDk0LCAyNTUsIDQ4LCA1MywgOTQsIDUsIDIwMSwgMjI4LCAxNDQsIAotICAgIDI0OSwgMTQwLCA5NCwgMSwgMjUyLCAyMSwgNTcsIDk0LCAxLCAyNDYsIDEwMSwgOTQsIDEsIDIzOSwgMTQ1LCA5NCwgMSwgCi0gICAgMjQ2LCAxNiwgMjI4LCAzOCwgOTQsIDEsIDI1MCwgMTA3LCA5NCwgMSwgMjUzLCAxNiwgMTIxLCA1LCAyNTIsIDE5LCAxMjEsIAotICAgIDUsIDI1NCwgMTYwLCAxMjEsIDUsIDIyNCwgMjExLCAxMjEsIDEsIDU3LCAxMjEsIDEsIDI1NSwgNjMsIDEyMSwgMSwgNzQsIAotICAgIDEyMSwgMSwgMjQwLCA0NywgMTIxLCAxLCA2NiwgMTIxLCAxLCAyMjUsIDc2LCAxMjEsIDEsIDE1MywgMTQ2LCAxMjEsIDEsIAotICAgIDE1MywgMTQ5LCAxMjEsIDEsIDcyLCAxMjEsIDEsIDI1NCwgMjUzLCAxMjEsIDEsIDczLCAxMjEsIDEsIDI1NCwgNTMsIDEyMSwgCi0gICAgMSwgMTc3LCAxMjEsIDEsIDIzOCwgMjI3LCAxMjEsIDEsIDI0NiwgMTkzLCAxMjEsIDEsIDI0NiwgNjYsIDEyMSwgMSwgMjM1LCAKLSAgICAxMzcsIDEyMSwgMSwgMjUyLCAzOSwgMTIxLCAxLCAyNTEsIDIwNCwgMTIxLCAxLCAyMzksIDE3OSwgMTIxLCAxLCAyMzksIAotICAgIDE2MCwgMTIxLCAxLCAyMzQsIDE3MywgMTIxLCAxLCAyMjYsIDIwLCAxMjEsIDEsIDIyNiwgMTAsIDEyMSwgMSwgMjUwLCAKLSAgICAxMTcsIDEyMSwgMSwgMjUwLCAxMDEsIDEyMSwgMSwgMjM1LCAxOCwgMTIxLCAxLCAyMjcsIDEwNywgMTIxLCAxLCAyMjYsIAotICAgIDI1MSwgMTIxLCAxLCAyNTAsIDE4OSwgMTIxLCAxLCAyNTAsIDIyLCAxMjEsIDEsIDIzNiwgMSwgMTIxLCAxLCAyMTMsIDEyMSwgCi0gICAgMSwgMjMzLCA5NywgMTIxLCAxLCAyNTMsIDcwLCAxMjEsIDEsIDI1MiwgMTkwLCAxMjEsIDEsIDE5OCwgMTIxLCAxLCAxOTEsIAotICAgIDEyMSwgMSwgMjA4LCAxMjEsIDEsIDIzOCwgNDMsIDEyMSwgMSwgMjI5LCAxNDYsIDEyMSwgMSwgMjI4LCAxMTAsIDEyMSwgMSwgCi0gICAgMjMxLCAzMSwgMTIxLCAxLCAxNTQsIDEyMSwgNSwgMjM0LCAyMDIsIDEyMSwgNSwgMjU0LCA0MCwgMTIxLCAzMSwgNSwgMjU1LCAKLSAgICA2MywgMTIxLCAzMSwgNSwgNzQsIDEyMSwgMzEsIDUsIDI0MCwgNDcsIDEyMSwgMzEsIDUsIDY2LCAxMjEsIDMxLCA1LCAyMjUsIAotICAgIDc2LCAxMjEsIDMxLCA1LCAxNTMsIDE0NiwgMTIxLCAzMSwgNSwgMTUzLCAyMzEsIDEwMCwgMTIxLCAzMSwgNSwgNzIsIDEyMSwgCi0gICAgMzEsIDUsIDI1NCwgMjUzLCAxMjEsIDMxLCA1LCA3MywgMTIxLCAzMSwgNSwgMjU0LCA1MywgMTIxLCA1LCAyMjQsIDIxNiwgCi0gICAgMTIxLCAxLCAyMzgsIDIyMSwgMjI3LCAxMDcsIDEyMSwgMjU0LCA1NCwgMjM3LCAyMTksIDc2LCAxMjEsIDEsIDIzMSwgOTksIAotICAgIDEyMSwgMSwgMjMxLCAxODQsIDEyMSwgMSwgMjIzLCAxMjYsIDEyMSwgMSwgMTUzLCAyMzEsIDEwMCwgMTIxLCAxLCAxNTMsIAotICAgIDIzNywgMTQ5LCAxMjEsIDMxLCA1LCAxNTMsIDE0OSwgMTIxLCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgMTIxLCAyMSwgMjIzLCAKLSAgICA4OSwgMTIxLCAyMSwgMTE4LCAxMjEsIDIxLCAxMTMsIDEyMSwgMjEsIDE2NiwgMTIxLCAyMSwgMTU4LCAxMjEsIDIxLCAxNzMsIAotICAgIDEyMSwgMjEsIDE4MywgMTIxLCAyMSwgMTk0LCAxMjEsIDIxLCAxODcsIDEyMSwgMjEsIDE5MiwgMTIxLCAxLCAyMzIsIDI1LCAKLSAgICAyLCAyMzYsIDE1NCwgMjUwLCAwLCAxMjEsIDEsIDIzMiwgMjUsIDIsIDIwMywgMjUwLCAwLCAxMjEsIDIzMSwgNTQsIDc2LCAKLSAgICAxMjEsIDIzMSwgNTQsIDUzLCAxMjEsIDI1MCwgMjIyLCAyMzQsIDE5NywgMTE4LCAxMjEsIDI1MCwgMjIyLCAyMzQsIDE5NywgCi0gICAgMTEzLCAxMjEsIDI1MCwgMjIyLCAyMzQsIDE5NywgMTY2LCAxMjEsIDI1MCwgMjIyLCAyMzQsIDE5NywgMTU4LCAxMjEsIAotICAgIDI1MCwgMjIyLCAyMzQsIDE5NywgMTY4LCAyMzcsIDIxNCwgMjI2LCAyNDQsIDIyNiwgMjQwLCAyNTAsIDQyLCAxMjEsIDI1MCwgCi0gICAgMjIyLCAyNTAsIDQzLCAyMjgsIDIxMiwgMTIxLCAyMzksIDE5NiwgMTQ4LCA1LCAyNTUsIDI4LCAyNTIsIDE2OSwgMTQ4LCA1LCAKLSAgICAyNTIsIDE2OSwgMTQ4LCA1LCAyMjQsIDIxMSwgMTQ4LCAxLCA1NywgMTQ4LCAxLCAyNTUsIDYzLCAxNDgsIDEsIDc0LCAxNDgsIAotICAgIDEsIDI0MCwgNDcsIDE0OCwgMSwgNjYsIDE0OCwgMSwgMjI1LCA3NiwgMTQ4LCAxLCAyNDgsIDM1LCAxNDgsIDEsIDI1NCwgCi0gICAgMjUzLCAxNDgsIDEsIDIzNCwgNTIsIDE0OCwgMSwgMjU0LCA1MywgMTQ4LCAxLCAxNzcsIDE0OCwgMSwgMjM4LCAyMjcsIAotICAgIDE0OCwgMSwgMjQ2LCAxOTMsIDE0OCwgMSwgMjQ2LCA2NiwgMTQ4LCAxLCAyMzUsIDEzNywgMTQ4LCAxLCAyNTIsIDM5LCAKLSAgICAxNDgsIDEsIDI1MSwgMjA0LCAxNDgsIDEsIDIzOSwgMTc5LCAxNDgsIDEsIDIzOSwgMTYwLCAxNDgsIDEsIDIzNCwgMTczLCAKLSAgICAxNDgsIDEsIDIyNiwgMjAsIDE0OCwgMSwgMjI2LCAxMCwgMTQ4LCAxLCAyNTAsIDExNywgMTQ4LCAxLCAyNTAsIDEwMSwgCi0gICAgMTQ4LCAxLCAyMzUsIDE4LCAxNDgsIDEsIDIyNywgMTA3LCAxNDgsIDEsIDIyNiwgMjUxLCAxNDgsIDEsIDI1MCwgMTg5LCAKLSAgICAxNDgsIDEsIDI1MCwgMjIsIDE0OCwgMSwgMjM2LCAxLCAxNDgsIDEsIDIxMywgMTQ4LCAxLCAyMzMsIDk3LCAxNDgsIDEsIAotICAgIDI1MywgNzAsIDE0OCwgMSwgMjUyLCAxOTAsIDE0OCwgMSwgMTk4LCAxNDgsIDEsIDE5MSwgMTQ4LCAxLCAyMDgsIDE0OCwgMSwgCi0gICAgMjM4LCA0MywgMTQ4LCAxLCAyMzcsIDE0OCwgMTQ4LCAxLCAyMjUsIDY0LCAxNDgsIDEsIDIyOSwgMTQ2LCAxNDgsIDEsIAotICAgIDIzMSwgMzEsIDE0OCwgMSwgMTU0LCAxNDgsIDUsIDIzNCwgMjAyLCAxNDgsIDMxLCA1LCAyNTUsIDYzLCAxNDgsIDMxLCA1LCAKLSAgICA3NCwgMTQ4LCAzMSwgNSwgMjQwLCA0NywgMTQ4LCAzMSwgNSwgNjYsIDE0OCwgMzEsIDUsIDIyNSwgNzYsIDE0OCwgMzEsIDUsIAotICAgIDI0OCwgMzUsIDE0OCwgMzEsIDUsIDI1NCwgMjUzLCAxNDgsIDMxLCA1LCAyMzQsIDUyLCAxNDgsIDMxLCA1LCAyNTQsIDUzLCAKLSAgICAxNDgsIDUsIDIyNCwgMjE2LCAxNDgsIDUsIDIyNSwgMTYyLCAxNDgsIDEsIDIzOCwgMjE0LCAxNDgsIDEsIDI0NiwgNTYsIAotICAgIDE0OCwgMSwgMjIzLCAxMTcsIDE0OCwgMSwgMjMxLCA5OSwgMTQ4LCAxLCAyNDcsIDEyOSwgMTQ4LCAyMSwgMjIzLCA4OSwgCi0gICAgMTQ4LCAyMSwgMTE4LCAxNDgsIDIxLCAxMTMsIDE0OCwgMjEsIDE2NiwgMTQ4LCAyMSwgMTU4LCAxNDgsIDIxLCAxNzMsIAotICAgIDE0OCwgMjEsIDE4MywgMTQ4LCAyMSwgMTk0LCAxNDgsIDIxLCAxODcsIDE0OCwgMjEsIDE5MiwgMTQ4LCAyMjYsIDE0OCwgCi0gICAgMTQ4LCAyNTUsIDI3LCAxNDgsIDIzOSwgMjA5LCAxNDgsIDIyNSwgOTksIDE0OCwgMjQ4LCA5LCAyMzQsIDU3LCAxNDgsIDUsIAotICAgIDIyNCwgMCwgMTM3LCA1LCAyNTIsIDE5LCAxMzcsIDUsIDI1NCwgMTYwLCAxMzcsIDUsIDIyNCwgMjExLCAxMzcsIDEsIDU3LCAKLSAgICAxMzcsIDEsIDI1NSwgNjMsIDEzNywgMSwgNzQsIDEzNywgMSwgMjQwLCA0NywgMTM3LCAxLCA2NiwgMTM3LCAxLCAyMjUsIAotICAgIDc2LCAxMzcsIDEsIDE1MywgMTQ2LCAxMzcsIDEsIDE1MywgMTQ5LCAxMzcsIDMxLCAyNTIsIDIxLCA3MiwgMTM3LCAxLCA3MiwgCi0gICAgMTM3LCAxLCAyNTQsIDI1MywgMTM3LCAzMSwgMjUyLCAyMSwgNzMsIDEzNywgMSwgNzMsIDEzNywgMSwgMjU0LCA1MywgMTM3LCAKLSAgICAxLCAxNzcsIDEzNywgMSwgMjM4LCAyMjcsIDEzNywgMSwgMjQ2LCAxOTMsIDEzNywgMSwgMjQ2LCA2NiwgMTM3LCAxLCAyMzUsIAotICAgIDEzNywgMTM3LCAxLCAyNTIsIDM5LCAxMzcsIDEsIDI1MSwgMjA0LCAxMzcsIDEsIDIzOSwgMTc5LCAxMzcsIDEsIDIzOSwgCi0gICAgMTYwLCAxMzcsIDEsIDIzNCwgMTczLCAxMzcsIDEsIDIyNiwgMjAsIDEzNywgMSwgMjI2LCAxMCwgMTM3LCAxLCAyNTAsIAotICAgIDExNywgMTM3LCAxLCAyNTAsIDEwMSwgMTM3LCAxLCAyMzUsIDE4LCAxMzcsIDEsIDIyNywgMTA3LCAxMzcsIDEsIDIyNiwgCi0gICAgMjUxLCAxMzcsIDEsIDI1MCwgMTg5LCAxMzcsIDEsIDI1MCwgMjIsIDEzNywgMSwgMjM2LCAxLCAxMzcsIDEsIDIxMywgMTM3LCAKLSAgICAxLCAyMzMsIDk3LCAxMzcsIDEsIDI1MywgNzAsIDEzNywgMSwgMjUyLCAxOTAsIDEzNywgMSwgMTk4LCAxMzcsIDEsIDE5MSwgCi0gICAgMTM3LCAxLCAyMDgsIDEzNywgMSwgMjM4LCA0MywgMTM3LCAxLCAyMzcsIDE0OCwgMTM3LCAxLCAyMjUsIDY0LCAxMzcsIDEsIAotICAgIDIyOSwgMTQ2LCAxMzcsIDEsIDIyOCwgMTEwLCAxMzcsIDEsIDIzMSwgMzEsIDEzNywgMSwgMTU0LCAxMzcsIDUsIDIzNCwgCi0gICAgMjAyLCAxMzcsIDUsIDI1NCwgNDAsIDEzNywgMzEsIDUsIDI1NSwgNjMsIDEzNywgMzEsIDUsIDc0LCAxMzcsIDMxLCA1LCAKLSAgICAyNDAsIDQ3LCAxMzcsIDMxLCA1LCA2NiwgMTM3LCAzMSwgNSwgMjI1LCA3NiwgMTM3LCAzMSwgNSwgMTUzLCAxNDYsIDEzNywgCi0gICAgMzEsIDUsIDE1MywgMjMxLCAxMDAsIDEzNywgMzEsIDUsIDI1MiwgMjEsIDcyLCAxMzcsIDMxLCA1LCA3MiwgMTM3LCAzMSwgCi0gICAgNSwgMjU0LCAyNTMsIDEzNywgMzEsIDUsIDI1MiwgMjEsIDczLCAxMzcsIDMxLCA1LCA3MywgMTM3LCAzMSwgNSwgMjU0LCAKLSAgICA1MywgMTM3LCA1LCAyMjQsIDIxNiwgMTM3LCAyMzQsIDY5LCAxMzcsIDEsIDE1MywgMjMxLCAxMDAsIDEzNywgMSwgMTUzLCAKLSAgICAyMzcsIDE0OSwgMTM3LCAzMSwgNSwgMTUzLCAxNDksIDEzNywgMzEsIDUsIDE1MywgMjM3LCAxNDksIDEzNywgMjEsIDIyMywgCi0gICAgODksIDEzNywgMjEsIDExOCwgMTM3LCAyMSwgMTEzLCAxMzcsIDIxLCAxNjYsIDEzNywgMjEsIDE1OCwgMTM3LCAyMSwgMTczLCAKLSAgICAxMzcsIDIxLCAxODMsIDEzNywgMjEsIDE5NCwgMTM3LCAyMSwgMTg3LCAxMzcsIDIxLCAxOTIsIDEzNywgMjMxLCA1NCwgNTMsIAotICAgIDEzNCwgNSwgMjUyLCAxOSwgMTM0LCA1LCAyNTQsIDE2MCwgMTM0LCA1LCAyMjQsIDIxMSwgMTM0LCAxLCA1NywgMTM0LCAxLCAKLSAgICAyNTUsIDYzLCAxMzQsIDEsIDc0LCAxMzQsIDEsIDI0MCwgNDcsIDEzNCwgMSwgNjYsIDEzNCwgMSwgMjI1LCA3NiwgMTM0LCAKLSAgICAxLCAxNTMsIDE0NiwgMTM0LCAxLCAxNTMsIDE0OSwgMTM0LCAxLCA3MiwgMTM0LCAxLCAyNTQsIDI1MywgMTM0LCAxLCA3MywgCi0gICAgMTM0LCAxLCAyNTQsIDUzLCAxMzQsIDEsIDE3NywgMTM0LCAxLCAyMzgsIDIyNywgMTM0LCAxLCAyNDYsIDE5MywgMTM0LCAxLCAKLSAgICAyNDYsIDY2LCAxMzQsIDEsIDIzNSwgMTM3LCAxMzQsIDEsIDI1MiwgMzksIDEzNCwgMSwgMjUxLCAyMDQsIDEzNCwgMSwgCi0gICAgMjM5LCAxNzksIDEzNCwgMSwgMjM5LCAxNjAsIDEzNCwgMSwgMjM0LCAxNzMsIDEzNCwgMSwgMjI2LCAyMCwgMTM0LCAxLCAKLSAgICAyMjYsIDEwLCAxMzQsIDEsIDI1MCwgMTE3LCAxMzQsIDEsIDI1MCwgMTAxLCAxMzQsIDEsIDIzNSwgMTgsIDEzNCwgMSwgCi0gICAgMjI3LCAxMDcsIDEzNCwgMSwgMjI2LCAyNTEsIDEzNCwgMSwgMjUwLCAxODksIDEzNCwgMSwgMjUwLCAyMiwgMTM0LCAxLCAKLSAgICAyMzYsIDEsIDEzNCwgMSwgMjEzLCAxMzQsIDEsIDIzMywgOTcsIDEzNCwgMSwgMjUzLCA3MCwgMTM0LCAxLCAyNTIsIDE5MCwgCi0gICAgMTM0LCAxLCAxOTgsIDEzNCwgMSwgMTkxLCAxMzQsIDEsIDIwOCwgMTM0LCAxLCAyMzgsIDQzLCAxMzQsIDEsIDIzNywgMTQ4LCAKLSAgICAxMzQsIDEsIDIyNSwgNjQsIDEzNCwgMSwgMjI5LCAxNDYsIDEzNCwgMSwgMjI4LCAxMTAsIDEzNCwgMSwgMjMxLCAzMSwgCi0gICAgMTM0LCAxLCAxNTQsIDEzNCwgNSwgMjM0LCAyMDIsIDEzNCwgNSwgMjU0LCA0MCwgMTM0LCAzMSwgNSwgMjU1LCA2MywgMTM0LCAKLSAgICAzMSwgNSwgNzQsIDEzNCwgMzEsIDUsIDI0MCwgNDcsIDEzNCwgMzEsIDUsIDY2LCAxMzQsIDMxLCA1LCAyMjUsIDc2LCAxMzQsIAotICAgIDMxLCA1LCAxNTMsIDE0NiwgMTM0LCAzMSwgNSwgMTUzLCAyMzEsIDEwMCwgMTM0LCAzMSwgNSwgNzIsIDEzNCwgMzEsIDUsIAotICAgIDI1NCwgMjUzLCAxMzQsIDMxLCA1LCA3MywgMTM0LCAzMSwgNSwgMjU0LCA1MywgMTM0LCA1LCAyMjQsIDIxNiwgMTM0LCAKLSAgICAyNTQsIDI1NCwgMjM3LCAyMTksIDc2LCAxMzQsIDI1NCwgNTQsIDIzNywgMjE5LCA3NiwgMTM0LCAxLCAyMzEsIDk5LCAxMzQsIAotICAgIDEsIDIzMSwgMTg0LCAxMzQsIDEsIDIyMywgMTI2LCAxMzQsIDEsIDE1MywgMjMxLCAxMDAsIDEzNCwgMSwgMTUzLCAyMzcsIAotICAgIDE0OSwgMTM0LCAzMSwgNSwgMTUzLCAxNDksIDEzNCwgMzEsIDUsIDE1MywgMjM3LCAxNDksIDEzNCwgMjEsIDIyMywgODksIAotICAgIDEzNCwgMjEsIDExOCwgMTM0LCAyMSwgMTEzLCAxMzQsIDIxLCAxNjYsIDEzNCwgMjEsIDE1OCwgMTM0LCAyMSwgMTczLCAKLSAgICAxMzQsIDIxLCAxODMsIDEzNCwgMjEsIDE5NCwgMTM0LCAyMSwgMTg3LCAxMzQsIDIxLCAxOTIsIDEzNCwgMjM5LCAxOTYsIAotICAgIDEzNCwgMSwgMjI0LCAxNzMsIDE2MCwgNSwgMjU0LCAxNjAsIDE2MCwgNSwgMjI0LCAyMTEsIDE2MCwgMSwgNTcsIDE2MCwgMSwgCi0gICAgMjU1LCA2MywgMTYwLCAxLCA3NCwgMTYwLCAxLCAyNDAsIDQ3LCAxNjAsIDEsIDY2LCAxNjAsIDEsIDIyNSwgNzYsIDE2MCwgCi0gICAgMSwgNzIsIDE2MCwgMSwgMjQ4LCAzNSwgMTYwLCAxLCAyNTQsIDI1MywgMTYwLCAxLCA3MywgMTYwLCAxLCAyMzQsIDUyLCAKLSAgICAxNjAsIDEsIDI1NCwgNTMsIDE2MCwgMSwgMTc3LCAxNjAsIDEsIDIzNSwgMTM3LCAxNjAsIDEsIDI1MiwgMzksIDE2MCwgMSwgCi0gICAgMjM5LCAxNzksIDE2MCwgMSwgMjM0LCAxNzMsIDE2MCwgMSwgMjI2LCAyMCwgMTYwLCAxLCAyMzUsIDE4LCAxNjAsIDEsIAotICAgIDIyNywgMTA3LCAxNjAsIDEsIDIzNiwgMSwgMTYwLCAxLCAyMzUsIDEwLCAxNjAsIDEsIDIxMywgMTYwLCAxLCAxOTgsIDE2MCwgCi0gICAgMSwgMTkxLCAxNjAsIDEsIDIwOCwgMTYwLCAxLCAyMzEsIDk5LCAxNjAsIDEsIDIzOCwgNDMsIDE2MCwgMSwgMjM3LCAxNDgsIAotICAgIDE2MCwgMSwgMjM3LCAxNDcsIDE2MCwgMSwgMjI1LCA2NCwgMTYwLCAxLCAyMjksIDE0NiwgMTYwLCAxLCAyMjgsIDExMCwgCi0gICAgMTYwLCAxLCAyMzEsIDMxLCAxNjAsIDEsIDE1NCwgMTYwLCAzMSwgNSwgMjU1LCA2MywgMTYwLCAzMSwgNSwgNzQsIDE2MCwgCi0gICAgMzEsIDUsIDI0MCwgNDcsIDE2MCwgMzEsIDUsIDY2LCAxNjAsIDMxLCA1LCAyMjUsIDc2LCAxNjAsIDMxLCA1LCA3MiwgMTYwLCAKLSAgICAzMSwgNSwgMjQ4LCAzNSwgMTYwLCAzMSwgNSwgMjU0LCAyNTMsIDE2MCwgMzEsIDUsIDczLCAxNjAsIDMxLCA1LCAyMzQsIAotICAgIDUyLCAxNjAsIDMxLCA1LCAyNTQsIDUzLCAxNjAsIDUsIDIyNCwgMjE2LCAxNjAsIDIzNCwgNjksIDE2MCwgMjU0LCA1NCwgCi0gICAgMjM3LCAyMTksIDc2LCAxNjAsIDIxLCAyMjMsIDg5LCAxNjAsIDIxLCAxMTgsIDE2MCwgMjEsIDExMywgMTYwLCAyMSwgMTY2LCAKLSAgICAxNjAsIDIxLCAxNTgsIDE2MCwgMjEsIDE3MywgMTYwLCAyMSwgMTgzLCAxNjAsIDIxLCAxOTQsIDE2MCwgMjEsIDE4NywgCi0gICAgMTYwLCAyMSwgMTkyLCAxNjAsIDY1LCAyMjcsIDIzLCAxNjAsIDY1LCAxNjgsIDI0NCwgMTM1LCAxNjAsIDY1LCAxNjgsIAotICAgIDIyNiwgMTk0LCAxNjAsIDI1MCwgMTIxLCA1MywgMTYwLCAyMzYsIDg4LCA1MywgMTYwLCAyMjMsIDIyNiwgNTMsIDE2MCwgCi0gICAgMjUwLCA3NCwgNTMsIDE2MCwgMjUwLCAyNTAsIDUzLCAxNjAsIDI1NCwgODcsIDY0LCA1MywgMTYwLCAyMzEsIDU0LCA1MywgCi0gICAgMTYwLCA2NSwgNTMsIDExOSwgNSwgMjUyLCAxOSwgMTE5LCA1LCAyNTQsIDE2MCwgMTE5LCA1LCAyMjQsIDIxMSwgMTE5LCAxLCAKLSAgICA1NywgMTE5LCAxLCAyNTUsIDYzLCAxMTksIDEsIDc0LCAxMTksIDEsIDI0MCwgNDcsIDExOSwgMSwgNjYsIDExOSwgMSwgCi0gICAgMjI1LCA3NiwgMTE5LCAxLCAxNTMsIDE0NiwgMTE5LCAxLCAxNTMsIDE0OSwgMTE5LCAxLCA3MiwgMTE5LCAxLCAyNDgsIDM1LCAKLSAgICAxMTksIDEsIDI1NCwgMjUzLCAxMTksIDEsIDczLCAxMTksIDEsIDIzNCwgNTIsIDExOSwgMSwgMjU0LCA1MywgMTE5LCAxLCAKLSAgICAxNzcsIDExOSwgMSwgMjM4LCAyMjcsIDExOSwgMSwgMjQ2LCAxOTMsIDExOSwgMSwgMjQ2LCA2NiwgMTE5LCAxLCAyMzUsIAotICAgIDEzNywgMTE5LCAxLCAyNTIsIDM5LCAxMTksIDEsIDI1MSwgMjA0LCAxMTksIDEsIDIzOSwgMTc5LCAxMTksIDEsIDIzOSwgCi0gICAgMTYwLCAxMTksIDEsIDIzNCwgMTczLCAxMTksIDEsIDIyNiwgMjAsIDExOSwgMSwgMjI2LCAxMCwgMTE5LCAxLCAyNTAsIAotICAgIDExNywgMTE5LCAxLCAyNTAsIDEwMSwgMTE5LCAxLCAyMzUsIDE4LCAxMTksIDEsIDIyNywgMTA3LCAxMTksIDEsIDIyNiwgCi0gICAgMjUxLCAxMTksIDEsIDI1MCwgMTg5LCAxMTksIDEsIDI1MCwgMjIsIDExOSwgMSwgMjM2LCAxLCAxMTksIDEsIDIxMywgMTE5LCAKLSAgICAxLCAyMzMsIDk3LCAxMTksIDEsIDI1MywgNzAsIDExOSwgMSwgMjUyLCAxOTAsIDExOSwgMSwgMTk4LCAxMTksIDEsIDE5MSwgCi0gICAgMTE5LCAxLCAyMDgsIDExOSwgMSwgMjMxLCA5OSwgMTE5LCAxLCAyMzgsIDQzLCAxMTksIDEsIDIzNywgMTQ4LCAxMTksIDEsIAotICAgIDIyNSwgNjQsIDExOSwgMSwgMjI5LCAxNDYsIDExOSwgMSwgMjI4LCAxMTAsIDExOSwgMSwgMjMxLCAzMSwgMTE5LCAxLCAKLSAgICAxNTQsIDExOSwgNSwgMjU0LCA0MCwgMTE5LCAzMSwgNSwgMjU1LCA2MywgMTE5LCAzMSwgNSwgNzQsIDExOSwgMzEsIDUsIAotICAgIDI0MCwgNDcsIDExOSwgMzEsIDUsIDY2LCAxMTksIDMxLCA1LCAyMjUsIDc2LCAxMTksIDMxLCA1LCAxNTMsIDE0NiwgMTE5LCAKLSAgICAzMSwgNSwgMTUzLCAyMzEsIDEwMCwgMTE5LCAzMSwgNSwgNzIsIDExOSwgMzEsIDUsIDI0OCwgMzUsIDExOSwgMzEsIDUsIAotICAgIDI1NCwgMjUzLCAxMTksIDMxLCA1LCA3MywgMTE5LCAzMSwgNSwgMjM0LCA1MiwgMTE5LCAzMSwgNSwgMjU0LCA1MywgMTE5LCAKLSAgICA1LCAyMjQsIDIxNiwgMTE5LCAyMzcsIDIxOSwgNzYsIDExOSwgMjU0LCAyNTQsIDIzNywgMjE5LCA3NiwgMTE5LCAxLCAyMjYsIAotICAgIDQ0LCAxMTksIDEsIDI0OCwgNzAsIDExOSwgMSwgMTUzLCAyMzEsIDEwMCwgMTE5LCAxLCAxNTMsIDIzNywgMTQ5LCAxMTksIAotICAgIDMxLCA1LCAxNTMsIDE0OSwgMTE5LCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgMTE5LCAyMSwgMjIzLCA4OSwgMTE5LCAyMSwgCi0gICAgMTE4LCAxMTksIDIxLCAxMTMsIDExOSwgMjEsIDE2NiwgMTE5LCAyMSwgMTU4LCAxMTksIDIxLCAxNzMsIDExOSwgMjEsIAotICAgIDE4MywgMTE5LCAyMSwgMTk0LCAxMTksIDIxLCAxODcsIDExOSwgMjEsIDE5MiwgMTE5LCAyNDYsIDIzNSwgMjEsIDIyMywgCi0gICAgOTAsIDMyLCAyMzQsIDkwLCAyMzIsIDIzMiwgMTA2LCAxNTgsIDExOSwgMjQ2LCAyMzUsIDIxLCAxNjgsIDMyLCAyMzQsIDkwLCAKLSAgICAyMzIsIDIzMiwgMTA2LCAxNTgsIDExOSwgMjQ2LCAyMzUsIDIxLCAxMzUsIDMyLCAyMzQsIDkwLCAyMzIsIDIzMiwgMTA2LCAKLSAgICAxNTgsIDExOSwgMjQ2LCAyMzUsIDIxLCAxNTIsIDMyLCAyMzQsIDkwLCAyMzIsIDIzMiwgMTA2LCAxNTgsIDExOSwgMjQ2LCAKLSAgICAyMzUsIDIxLCAxNjgsIDMyLCAyNDcsIDE1OCwgMjMyLCAyMzIsIDEwNiwgMTU4LCAxMTksIDI0NiwgMjM1LCAyMSwgMTM1LCAKLSAgICAzMiwgMjQ3LCAxNTgsIDIzMiwgMjMyLCAxMDYsIDE1OCwgMTE5LCAyNDYsIDIzNSwgMjEsIDE1MiwgMzIsIDI0NywgMTU4LCAKLSAgICAyMzIsIDIzMiwgMTA2LCAxNTgsIDExOSwgNSwgMjI1LCAyMjYsIDEyOSwgNSwgMjU0LCAxNjAsIDEyOSwgNSwgMjI0LCAyMTEsIAotICAgIDEyOSwgMSwgNTcsIDEyOSwgMSwgMjU1LCA2MywgMTI5LCAxLCA3NCwgMTI5LCAxLCAyNDAsIDQ3LCAxMjksIDEsIDY2LCAKLSAgICAxMjksIDEsIDIyNSwgNzYsIDEyOSwgMSwgMTUzLCAxNDYsIDEyOSwgMSwgMTUzLCAxNDksIDEyOSwgMSwgNzIsIDEyOSwgMSwgCi0gICAgMjQ4LCAzNSwgMTI5LCAxLCAyNTQsIDI1MywgMTI5LCAxLCA3MywgMTI5LCAxLCAyMzQsIDUyLCAxMjksIDEsIDI1NCwgNTMsIAotICAgIDEyOSwgMSwgMTc3LCAxMjksIDEsIDIzOCwgMjI3LCAxMjksIDEsIDI0NiwgMTkzLCAxMjksIDEsIDI0NiwgNjYsIDEyOSwgMSwgCi0gICAgMjM1LCAxMzcsIDEyOSwgMSwgMjUyLCAzOSwgMTI5LCAxLCAyNTEsIDIwNCwgMTI5LCAxLCAyMzksIDE3OSwgMTI5LCAxLCAKLSAgICAyMzksIDE2MCwgMTI5LCAxLCAyMzQsIDE3MywgMTI5LCAxLCAyMjYsIDIwLCAxMjksIDEsIDIyNiwgMTAsIDEyOSwgMSwgCi0gICAgMjUwLCAxMTcsIDEyOSwgMSwgMjUwLCAxMDEsIDEyOSwgMSwgMjM1LCAxOCwgMTI5LCAxLCAyMjcsIDEwNywgMTI5LCAxLCAKLSAgICAyMjYsIDI1MSwgMTI5LCAxLCAyNTAsIDE4OSwgMTI5LCAxLCAyNTAsIDIyLCAxMjksIDEsIDIzNiwgMSwgMTI5LCAxLCAyMTMsIAotICAgIDEyOSwgMSwgMjMzLCA5NywgMTI5LCAxLCAyNTMsIDcwLCAxMjksIDEsIDI1MiwgMTkwLCAxMjksIDEsIDE5OCwgMTI5LCAxLCAKLSAgICAxOTEsIDEyOSwgMSwgMjA4LCAxMjksIDEsIDIzMSwgOTksIDEyOSwgMSwgMjM4LCA0MywgMTI5LCAxLCAyMzcsIDE0OCwgCi0gICAgMTI5LCAxLCAyMjUsIDY0LCAxMjksIDEsIDIyOSwgMTQ2LCAxMjksIDEsIDIyOCwgMTEwLCAxMjksIDEsIDIzMSwgMzEsIAotICAgIDEyOSwgMSwgMTU0LCAxMjksIDUsIDIzNCwgMjAyLCAxMjksIDUsIDI1NCwgNDAsIDEyOSwgMzEsIDUsIDI1NSwgNjMsIDEyOSwgCi0gICAgMzEsIDUsIDc0LCAxMjksIDMxLCA1LCAyNDAsIDQ3LCAxMjksIDMxLCA1LCA2NiwgMTI5LCAzMSwgNSwgMjI1LCA3NiwgMTI5LCAKLSAgICAzMSwgNSwgMTUzLCAxNDYsIDEyOSwgMzEsIDUsIDE1MywgMjMxLCAxMDAsIDEyOSwgMzEsIDUsIDcyLCAxMjksIDMxLCA1LCAKLSAgICAyNDgsIDM1LCAxMjksIDMxLCA1LCAyNTQsIDI1MywgMTI5LCAzMSwgNSwgNzMsIDEyOSwgMzEsIDUsIDIzNCwgNTIsIDEyOSwgCi0gICAgMzEsIDUsIDI1NCwgNTMsIDEyOSwgNSwgMjI0LCAyMTYsIDEyOSwgMjM3LCAyMTksIDc2LCAxMjksIDI1NCwgMjU0LCAyMzcsIAotICAgIDIxOSwgNzYsIDEyOSwgMSwgMjQ3LCAxMjksIDEyOSwgMSwgMTUzLCAyMzEsIDEwMCwgMTI5LCAxLCAxNTMsIDIzNywgMTQ5LCAKLSAgICAxMjksIDMxLCA1LCAxNTMsIDE0OSwgMTI5LCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgMTI5LCAyMSwgMjIzLCA4OSwgMTI5LCAKLSAgICAyMSwgMTE4LCAxMjksIDIxLCAxMTMsIDEyOSwgMjEsIDE2NiwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNzMsIDEyOSwgMjEsIAotICAgIDE4MywgMTI5LCAyMSwgMTk0LCAxMjksIDIxLCAxODcsIDEyOSwgMjEsIDE5MiwgMTI5LCA1LCAyMzksIDE1MCwgMTI5LCA1LCAKLSAgICAyMjUsIDExNCwgMTE0LCA1LCAyNTQsIDE2MCwgMTE0LCA1LCAyMjQsIDIxMSwgMTE0LCAxLCA1NywgMTE0LCAxLCAyNTUsIAotICAgIDYzLCAxMTQsIDEsIDc0LCAxMTQsIDEsIDI0MCwgNDcsIDExNCwgMSwgNjYsIDExNCwgMSwgMjI1LCA3NiwgMTE0LCAxLCAKLSAgICAxNTMsIDE0NiwgMTE0LCAxLCAxNTMsIDE0OSwgMTE0LCAxLCA3MiwgMTE0LCAxLCAyNDgsIDM1LCAxMTQsIDEsIDI1NCwgCi0gICAgMjUzLCAxMTQsIDEsIDczLCAxMTQsIDEsIDIzNCwgNTIsIDExNCwgMSwgMjU0LCA1MywgMTE0LCAxLCAxNzcsIDExNCwgMSwgCi0gICAgMjM4LCAyMjcsIDExNCwgMSwgMjQ2LCAxOTMsIDExNCwgMSwgMjQ2LCA2NiwgMTE0LCAxLCAyMzUsIDEzNywgMTE0LCAxLCAKLSAgICAyNTIsIDM5LCAxMTQsIDEsIDI1MSwgMjA0LCAxMTQsIDEsIDIzOSwgMTc5LCAxMTQsIDEsIDIzOSwgMTYwLCAxMTQsIDEsIAotICAgIDIzNCwgMTczLCAxMTQsIDEsIDIyNiwgMjAsIDExNCwgMSwgMjI2LCAxMCwgMTE0LCAxLCAyNTAsIDExNywgMTE0LCAxLCAKLSAgICAyNTAsIDEwMSwgMTE0LCAxLCAyMzUsIDE4LCAxMTQsIDEsIDIyNywgMTA3LCAxMTQsIDEsIDIyNiwgMjUxLCAxMTQsIDEsIAotICAgIDI1MCwgMTg5LCAxMTQsIDEsIDI1MCwgMjIsIDExNCwgMSwgMjM2LCAxLCAxMTQsIDEsIDIxMywgMTE0LCAxLCAyMzMsIDk3LCAKLSAgICAxMTQsIDEsIDI1MywgNzAsIDExNCwgMSwgMjUyLCAxOTAsIDExNCwgMSwgMTk4LCAxMTQsIDEsIDE5MSwgMTE0LCAxLCAyMDgsIAotICAgIDExNCwgMSwgMjMxLCA5OSwgMTE0LCAxLCAyMzgsIDQzLCAxMTQsIDEsIDIzNywgMTQ4LCAxMTQsIDEsIDIzNywgMTQ3LCAKLSAgICAxMTQsIDEsIDIyNSwgNjQsIDExNCwgMSwgMjI5LCAxNDYsIDExNCwgMSwgMjI4LCAxMTAsIDExNCwgMSwgMjMxLCAzMSwgCi0gICAgMTE0LCAxLCAxNTQsIDExNCwgNSwgMjU0LCA0MCwgMTE0LCAzMSwgNSwgMjU1LCA2MywgMTE0LCAzMSwgNSwgNzQsIDExNCwgCi0gICAgMzEsIDUsIDI0MCwgNDcsIDExNCwgMzEsIDUsIDY2LCAxMTQsIDMxLCA1LCAyMjUsIDc2LCAxMTQsIDMxLCA1LCAxNTMsIAotICAgIDE0NiwgMTE0LCAzMSwgNSwgMTUzLCAyMzEsIDEwMCwgMTE0LCAzMSwgNSwgNzIsIDExNCwgMzEsIDUsIDI0OCwgMzUsIDExNCwgCi0gICAgMzEsIDUsIDI1NCwgMjUzLCAxMTQsIDMxLCA1LCA3MywgMTE0LCAzMSwgNSwgMjM0LCA1MiwgMTE0LCAzMSwgNSwgMjU0LCAKLSAgICA1MywgMTE0LCA1LCAyMjQsIDIxNiwgMTE0LCAyNTQsIDU0LCAyMzcsIDIxOSwgNzYsIDExNCwgMSwgMTUzLCAyMzEsIDEwMCwgCi0gICAgMTE0LCAxLCAxNTMsIDIzNywgMTQ5LCAxMTQsIDMxLCA1LCAxNTMsIDE0OSwgMTE0LCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgCi0gICAgMTE0LCAyMSwgMjIzLCA4OSwgMTE0LCAyMSwgMTE4LCAxMTQsIDIxLCAxMTMsIDExNCwgMjEsIDE2NiwgMTE0LCAyMSwgMTU4LCAKLSAgICAxMTQsIDIxLCAxNzMsIDExNCwgMjEsIDE4MywgMTE0LCAyMSwgMTk0LCAxMTQsIDIxLCAxODcsIDExNCwgMjEsIDE5MiwgCi0gICAgMTE0LCA2NSwgMjI3LCAyMywgMTE0LCA2NSwgMTY4LCAyNDQsIDEzNSwgMTE0LCA2NSwgMTY4LCAyMjYsIDE5NCwgMTE0LCAKLSAgICAyNDYsIDIzNSwgMTY4LCAyMzIsIDc2LCAxMTQsIDI0NiwgMjM1LCAxNjgsIDI0NSwgMTUxLCAxMTQsIDI0NiwgMjM1LCAxNTIsIAotICAgIDIzMiwgNzQsIDExNCwgMjUwLCAxMjUsIDc2LCAxMTQsIDEsIDI1MSwgMTYyLCAyMzUsIDE5LCAxMTQsIDEsIDI1MSwgMTYyLCAKLSAgICAxOTksIDExNCwgMSwgMjUxLCAxNjIsIDIzMSwgMTAwLCAxMTQsIDEsIDI1MSwgMTYyLCAxNDksIDExNCwgMSwgMjUxLCAxNjIsIAotICAgIDIzNywgMTQ5LCAxMTQsIDEsIDI1MSwgMTYyLCAyMzksIDc2LCAxNDcsIDUsIDI1NCwgMTU5LCAxNDcsIDUsIDIyNCwgMjEwLCAKLSAgICAxNDcsIDEsIDI1NCwgMzIsIDE0NywgMSwgMjU1LCA1NCwgMTQ3LCAxLCAyNTUsIDEzLCAxNDcsIDEsIDI1NSwgMTcsIDE0NywgCi0gICAgMSwgMjM5LCAxODcsIDE0NywgMSwgMjQwLCA0NiwgMTQ3LCAxLCAyMjUsIDY5LCAxNDcsIDEsIDIyNSwgNzEsIDE0NywgMSwgCi0gICAgMjM5LCAyMDcsIDE0NywgMSwgMjM5LCAyMDgsIDE0NywgMSwgMjQwLCAzMiwgMTQ3LCAxLCAyNDAsIDM0LCAxNDcsIDEsIAotICAgIDI0NywgMTM4LCAxNDcsIDEsIDI0OCwgMzEsIDE0NywgMSwgMjU0LCAyNDIsIDE0NywgMSwgMjMzLCAyNDcsIDE0NywgMSwgCi0gICAgMjM0LCA0NywgMTQ3LCAxLCAyNTQsIDQzLCAxNDcsIDEsIDI1NCwgMjA4LCAyMzksIDgsIDE0NywgMSwgMjM3LCA1NCwgMjM5LCAKLSAgICA4LCAxNDcsIDEsIDI1NCwgMjA4LCAyNDYsIDE0NywgMTQ3LCAxLCAyMzcsIDU0LCAyNDYsIDE0NywgMTQ3LCAxLCAyMzksIAotICAgIDQyLCAyMzUsIDI1MSwgMTQ3LCAxLCAyMzAsIDI0OCwgMjQ2LCAxNDcsIDE0NywgMSwgMjU0LCAyMDgsIDI1MSwgMjQ5LCAKLSAgICAxNDcsIDEsIDIzNywgNTQsIDI1MSwgMjQ5LCAxNDcsIDEsIDI1NCwgMjA4LCAyMzksIDE3MSwgMTQ3LCAxLCAyMzcsIDU0LCAKLSAgICAyMzksIDE3MSwgMTQ3LCAxLCAyMjcsIDEwMiwgMjM1LCAyNTEsIDE0NywgMSwgMjI3LCAxMDIsIDIzMCwgMjQ3LCAyMzUsIAotICAgIDI1MiwgMTQ3LCAxLCAyMzAsIDI0OCwgMjM5LCAxNzEsIDE0NywgMSwgMjU0LCAyMDgsIDIyNiwgMTgsIDE0NywgMSwgMjM3LCAKLSAgICA1NCwgMjI2LCAxOCwgMTQ3LCAxLCAyNTQsIDIwOCwgMjUwLCAxMDgsIDE0NywgMSwgMjM3LCA1NCwgMjUwLCAxMDgsIDE0NywgCi0gICAgMSwgMjM2LCAyNiwgMjM1LCAyMTgsIDE0NywgMSwgMjMwLCAyNDgsIDI1MCwgMTA4LCAxNDcsIDEsIDI1NCwgMjA4LCAyMjcsIAotICAgIDUyLCAxNDcsIDEsIDIzNywgNTQsIDIyNywgNTIsIDE0NywgMSwgMjU0LCAyMDgsIDI1MCwgMTIwLCAxNDcsIDEsIDIzNywgCi0gICAgNTQsIDI1MCwgMTIwLCAxNDcsIDEsIDI1MCwgMTQ4LCAyMzUsIDIxOCwgMTQ3LCAxLCAyMzAsIDI0OCwgMjUwLCAxMjAsIAotICAgIDE0NywgMSwgMjU0LCAyMDgsIDIzMywgMTU3LCAxNDcsIDEsIDIzNywgNTQsIDIzMywgMTU3LCAxNDcsIDEsIDI1NCwgMjA4LCAKLSAgICAyNTMsIDE3LCAxNDcsIDEsIDIzNywgNTQsIDI1MywgMTcsIDE0NywgMSwgMjM2LCAyNTEsIDE0NywgMSwgMjU0LCAxOTUsIAotICAgIDI1MywgMTcsIDE0NywgMSwgMjIzLCAyMzIsIDE0NywgMSwgMjMxLCAyNDksIDE0NywgMSwgMjUwLCAxNDgsIDIzNywgMjUxLCAKLSAgICAxNDcsIDEsIDIyNSwgNDQsIDE0NywgMSwgMjI3LCAxMDIsIDIzMCwgMjMzLCAxNDcsIDEsIDIzNiwgMjYsIDIzMCwgMjMzLCAKLSAgICAxNDcsIDEsIDI1MCwgMTQ4LCAyMzAsIDIzMywgMTQ3LCAxLCAyNDUsIDEyNSwgMTQ3LCAxLCAyMzYsIDI2LCAyMzcsIDI1MSwgCi0gICAgMTQ3LCAxLCAyNDcsIDk5LCAxNDcsIDUsIDI1NCwgMjMyLCAxNDcsIDMxLCA1LCAyNTUsIDE2LCAxNDcsIDMxLCA1LCAyMzgsIAotICAgIDIzNSwgMjU1LCAxOCwgMTQ3LCAzMSwgNSwgMjQ5LCAyMzEsIDI1NSwgMTgsIDE0NywgMzEsIDUsIDIzOCwgMjM1LCAyMzksIAotICAgIDIwNCwgMTQ3LCAzMSwgNSwgMjQ5LCAyMzEsIDIzOSwgMjA0LCAxNDcsIDMxLCA1LCAyMzgsIDIzNSwgMjMzLCAyNDAsIDE0NywgCi0gICAgMzEsIDUsIDI0OSwgMjMxLCAyMzMsIDI0MCwgMTQ3LCAzMSwgNSwgMjQ2LCAxODIsIDE0NywgMzEsIDUsIDIzOCwgMTQ0LCAKLSAgICAxNDcsIDMxLCA1LCAyNDksIDIzMSwgMjM4LCAxNDQsIDE0NywgMzEsIDUsIDIzOCwgMTQ2LCAyNTAsIDU4LCAxNDcsIDMxLCAKLSAgICA1LCAyMzgsIDE0NSwgMjQ1LCAxNjgsIDI1NSwgMTYsIDE0NywgMzEsIDUsIDIzOCwgMTQ1LCAyNDUsIDE2OCwgMjQ5LCAyMzEsIAotICAgIDI1NSwgMTYsIDE0NywgMzEsIDUsIDIzOCwgMTQ1LCAyNDUsIDE2OCwgMjQ2LCAxNDYsIDE0NywgMzEsIDUsIDI0NiwgMTQ2LCAKLSAgICAxNDcsIDMxLCA1LCAyNDksIDIzMSwgMjQ2LCAxODIsIDE0NywgMzEsIDUsIDI0OSwgMjMxLCAyNDYsIDE0NiwgMTQ3LCAyMzIsIAotICAgIDE3MSwgMjM4LCA5OCwgMTI4LCAxMTYsIDIzOCwgMTUxLCAyMzksIDU2LCAxMjgsIDExNiwgMjM4LCAyMDksIDIzOCwgMjI0LCAKLSAgICAxMjgsIDExNiwgMjM4LCAyMDksIDIzOCwgMjAzLCAxMjgsIDExNiwgMjM4LCAyMDksIDIzOCwgMjAyLCAxMjgsIDExNiwgCi0gICAgMjM4LCAyMDksIDIzOCwgMjA2LCAxMjgsIDExNiwgMjM4LCAyMDksIDIzMiwgNywgMTI4LCAxMTYsIDIzNSwgMTA4LCAyMzUsIAotICAgIDk5LCAxMjgsIDExNiwgMjUxLCAxNTEsIDI1MSwgMTk2LCAxMjgsIDExNiwgMjUxLCAxNTEsIDI1MSwgMTU5LCAxMjgsIDExNiwgCi0gICAgMjUxLCAxNTEsIDI1MSwgMTk1LCAxMjgsIDExNiwgMjI4LCAxNzAsIDIyOCwgMTY5LCAxMjgsIDExNiwgMjUxLCAxNTEsIAotICAgIDI1MSwgMTQ4LCAxMjgsIDExNiwgMjIzLCAxODQsIDIyMywgMTkxLCAxMjgsIDExNiwgMjQ5LCAxNjIsIDI1MSwgMjAxLCAKLSAgICAxMjgsIDExNiwgMTgwLCAyMzMsIDE2NSwgMTI4LCAxMTYsIDIyNiwgMjAyLCAyMjYsIDI0MywgMTI4LCAxMTYsIDIyNiwgCi0gICAgMjAyLCAyMzUsIDIzNCwgMTI4LCAxMTYsIDIyNiwgMjAyLCAyMzMsIDcyLCAxMjgsIDExNiwgMjM1LCA3LCAyMzUsIDE1NSwgCi0gICAgMTI4LCAxMTYsIDI0OSwgMTYyLCAyNTAsIDU5LCAxMjgsIDExNiwgMTgwLCAyMjcsIDcxLCAxMjgsIDExNiwgMjI2LCAyMDIsIAotICAgIDIyNiwgMTgzLCAxMjgsIDExNiwgMjI2LCAyMDIsIDIyNiwgMjQ3LCAxMjgsIDExNiwgMjI2LCAyMDIsIDIyNiwgMTk5LCAKLSAgICAxMjgsIDExNiwgMjM1LCA3LCAyMzQsIDIwNiwgMTI4LCAxMTYsIDI1MiwgMTM5LCAyNTMsIDU0LCAxMjgsIDExNiwgMjMzLCAKLSAgICA1LCAyMzMsIDI0LCAxMjgsIDExNiwgMjMzLCA4MCwgMjMzLCA3NCwgMTI4LCAxMTYsIDI0NywgOCwgMjQ3LCAxMjksIDEyOCwgCi0gICAgMTE2LCAyMzMsIDgwLCAyMzMsIDkzLCAxMjgsIDExNiwgMjQ3LCA4LCAyNDcsIDExMSwgMTI4LCAxMTYsIDIzMywgODAsIAotICAgIDIzMSwgMCwgMTI4LCAxMTYsIDIzNiwgMTA0LCAxOTgsIDEyOCwgMTE2LCAyMjMsIDE4NCwgMjI0LCAxLCAxMjgsIDExNiwgCi0gICAgMjMxLCAxMjMsIDIzMSwgNjksIDEyOCwgMTE2LCAyMzEsIDcwLCAxMjgsIDExNiwgMjM3LCAxNDQsIDIzNywgMTY0LCAxMjgsIAotICAgIDExNiwgMjM3LCAxMTAsIDEyOCwgMTE2LCAyMjQsIDEwNiwgMjI0LCAxNjksIDEyOCwgMTE2LCAyMjgsIDE3MCwgMjMxLCAxMSwgCi0gICAgMTI4LCAxMTYsIDIyOCwgMTcwLCAyMzEsIDUwLCAxMjgsIDExNiwgMjI4LCAxNzAsIDIyOCwgNSwgMTI4LCAxMTYsIDI0NCwgCi0gICAgMjI4LCAyNDUsIDU5LCAxMjgsIDExNiwgMjM3LCAxNDQsIDI1MSwgMTM1LCAxMjgsIDExNiwgMTMwLCAyNTQsIDE4NCwgMTI4LCAKLSAgICAxMTYsIDI0NCwgMjI4LCAyMzUsIDIsIDEyOCwgMTE2LCAyMzMsIDIzMCwgMTI4LCAxMTYsIDIzMCwgMjQzLCA1NywgMTI4LCAKLSAgICAxMTYsIDIzNywgNDksIDI0NSwgMTQ3LCAxMjgsIDExNiwgMjMwLCAyNDMsIDI1NSwgNjMsIDEyOCwgMTE2LCAyMzAsIDI0MywgCi0gICAgMjU0LCAxOTksIDEyOCwgMTE2LCAyMzAsIDI0MywgNzQsIDEyOCwgMTE2LCAyMzAsIDI0MywgMjQwLCA0NywgMTI4LCAxMTYsIAotICAgIDIzMCwgMjQzLCAyMjUsIDE1OSwgMTI4LCAxMTYsIDIzMCwgMjQzLCAyMjUsIDE1OCwgMTI4LCAxMTYsIDIzMCwgMjQzLCA2NiwgCi0gICAgMTI4LCAxMTYsIDIzMCwgMjQzLCAyMjUsIDc2LCAxMjgsIDExNiwgMjMzLCA4MiwgMTI4LCAyNTAsIDIyMiwgMTQsIDI1MywgCi0gICAgNTUsIDEyOCwgMTE2LCAyMzAsIDI0MywgNzIsIDEyOCwgMTE2LCAyMzAsIDI0MywgMjU1LCAxOSwgMTI4LCAxMTYsIDIzMCwgCi0gICAgMjQzLCA3MywgMTI4LCAxMTYsIDIzMCwgMjQzLCAyNTQsIDI1NCwgMjM3LCA0NSwgMTI4LCAxMTYsIDIzMCwgMjQzLCAyNTQsIAotICAgIDI1NCwgMjM3LCA0NiwgMTI4LCAxMTYsIDIzOCwgMjMsIDEyOCwgMTE2LCAyMzcsIDQyLCAxMjgsIDExNiwgMjM3LCA0MywgCi0gICAgMTI4LCAxMTYsIDIzNywgNDksIDI0OCwgOCwgMTI4LCAxMTYsIDIzNywgNDksIDIyNiwgMjAxLCAxMjgsIDExNiwgMjM3LCAKLSAgICA0OSwgMjI2LCA4MSwgMTI4LCAxMTYsIDIzNywgNDksIDI1MSwgMTg2LCAxMjgsIDExNiwgMjI2LCAyNDEsIDEyOCwgMTE2LCAKLSAgICAyMzUsIDY2LCAxMjgsIDExNiwgMjIzLCAyNTEsIDEyOCwgMTE2LCAyNDcsIDQsIDEyOCwgMjEsIDIyMywgODksIDEyOCwgMjEsIAotICAgIDExOCwgMTI4LCAyMSwgMTEzLCAxMjgsIDIxLCAxNjYsIDEyOCwgMjEsIDE1OCwgMTI4LCAyMSwgMTczLCAxMjgsIDIxLCAKLSAgICAxODMsIDEyOCwgMjEsIDE5NCwgMTI4LCAyMSwgMTg3LCAxMjgsIDIxLCAxOTIsIDEyOCwgMTE2LCAyNTQsIDE4MywgMTI4LCAKLSAgICAxMTYsIDIzOCwgMjA3LCAxNzksIDEsIDIzOCwgMTUwLCAxNzksIDEsIDIzOCwgMjA5LCAyMjcsIDIyNiwgMTc5LCAxLCAyMzgsIAotICAgIDIwOSwgMjI3LCA3NSwgMTc5LCAxLCAyMzUsIDEwNywgMTc5LCAxLCAyNTEsIDY4LCAxNzksIDEsIDIyOCwgMTcwLCAyMjcsIAotICAgIDc1LCAxNzksIDEsIDIzNCwgMTUyLCAxNzksIDEsIDI0OSwgMTYxLCAxNzksIDEsIDk2LCAxNzksIDEsIDIyNiwgMjAyLCAKLSAgICAyMjcsIDIyNiwgMTc5LCAxLCAyMjYsIDIwMiwgMjI3LCA3NSwgMTc5LCAxLCAyMzUsIDYsIDE3OSwgMSwgMjUyLCAxMzgsIAotICAgIDE3OSwgMSwgMjMzLCA0LCAxNzksIDEsIDIzMywgODAsIDIyNywgMjI2LCAxNzksIDEsIDI0NywgOCwgMjI3LCA3NSwgMTc5LCAKLSAgICAxLCAyMzMsIDgwLCAyMjcsIDc1LCAxNzksIDEsIDI0NywgOCwgMjI3LCAyMjYsIDE3OSwgMSwgMjM2LCAxMDMsIDE3OSwgMSwgCi0gICAgMjIzLCAxODMsIDE3OSwgMSwgMjM3LCAxNDQsIDIzNywgMTY0LCAxNzksIDEsIDIzNywgMTQ0LCAyMzcsIDEyMywgMTc5LCAxLCAKLSAgICAyMjQsIDEwNSwgMTc5LCAxLCAyMjgsIDE3MCwgMjI3LCAyMjYsIDE3OSwgMSwgMjQ0LCAyMjgsIDIyNywgMjI2LCAxNzksIDEsIAotICAgIDczLCAxNzksIDEsIDI0NCwgMjI4LCAyMjcsIDc1LCAxNzksIDI0NywgMjQ5LCAxNzksIDMxLCA1LCA1NywgMTc5LCAzMSwgNSwgCi0gICAgMjM3LCA0OSwgMjM5LCA0NiwgMTc5LCAzMSwgNSwgMjU1LCA2MywgMTc5LCAzMSwgNSwgMjU0LCAxOTksIDE3OSwgMzEsIDUsIAotICAgIDc0LCAxNzksIDMxLCA1LCAyNDAsIDQ3LCAxNzksIDMxLCA1LCAyMjQsIDI1LCAxNzksIDMxLCA1LCAyMjMsIDEyNywgMTc5LCAKLSAgICAzMSwgNSwgNjYsIDE3OSwgMzEsIDUsIDIyNSwgNzYsIDE3OSwgMzEsIDUsIDIzNywgNDksIDIzOCwgMTQyLCAxNzksIDIyOSwgCi0gICAgMTgxLCA1LCAyMzcsIDE0MywgMTc5LCAyMjksIDE4MSwgNSwgMjM0LCAxNTIsIDE3OSwgMzEsIDUsIDcyLCAxNzksIDMxLCA1LCAKLSAgICAyNDgsIDIyLCAxNzksIDMxLCA1LCA3MywgMTc5LCAzMSwgNSwgMjU0LCAzNCwgMTc5LCAzMSwgNSwgMjU0LCAyNTMsIDE3OSwgCi0gICAgMjM4LCAxNTEsIDIzOCwgNDMsIDE3OSwgMjA2LCAyMzcsIDQ5LCAyNDgsIDgsIDE3OSwgMjA2LCAyMzcsIDQ5LCAyMjYsIAotICAgIDIwMSwgMTc5LCAyMDYsIDIzNywgNDksIDIyNiwgMTc1LCAxNzksIDIwNiwgMjM3LCA0OSwgMjUxLCAyNTUsIDE3OSwgMjUyLCAKLSAgICAyMywgNzYsIDE3OSwgMjM1LCA3MiwgMTc5LCAyMSwgMjIzLCA4OSwgMTc5LCAyMSwgMTE4LCAxNzksIDIxLCAxMTMsIDE3OSwgCi0gICAgMjEsIDE2NiwgMTc5LCAyMSwgMTU4LCAxNzksIDIxLCAxNzMsIDE3OSwgMjEsIDE4MywgMTc5LCAyMSwgMTk0LCAxNzksIDIxLCAKLSAgICAxODcsIDE3OSwgMjEsIDE5MiwgMTc5LCAyNDQsIDIyOCwgMjM1LCA2LCAxNzksIDI0NCwgMjI4LCAyMzYsIDEwMywgNTQsIDQsIAotICAgIDIzNCwgNjksIDU0LCAxNjUsIDI0NSwgMjIwLCAyMjMsIDE5NSwgMjM2LCAxNzQsIDIyNiwgNTAsIDU3LCA1NCwgMTY1LCAKLSAgICAyNDUsIDIyMCwgMjIzLCAxOTUsIDIzNiwgMTc0LCAyNTUsIDY4LCAyMzEsIDEyNywgMjUyLCAyNDAsIDE5OCwgNTQsIDE2NSwgCi0gICAgMjQ1LCAyMjAsIDIyMywgMTk1LCAyMzYsIDE3NCwgMjU1LCA2OCwgMjQ1LCAyMjAsIDIyNiwgMzUsIDE5OCwgNTQsIDE2NSwgCi0gICAgNTksIDIyMywgMTk1LCAyMzYsIDE3NCwgMjM2LCAyMzcsIDE5OCwgNTQsIDE2NSwgMjUxLCA3OSwgMjIzLCAxOTUsIDIzNiwgCi0gICAgMTc0LCAyMjksIDE1MiwgMTk4LCA1NCwgMTY1LCAyNTIsIDEwLCAyMjMsIDE5NSwgMjM2LCAxNzQsIDIzMywgNzMsIDIyOSwgCi0gICAgMTQwLCAxOTgsIDU0LCAxNjUsIDIyMywgMTk1LCAyMzYsIDE3NCwgMjI2LCAzNSwgMjI5LCAxNDAsIDE5OCwgNTQsIDE2NSwgCi0gICAgMjMwLCAyMzEsIDIyOSwgMTM5LCA1NCwgMTY1LCAyNTIsIDkzLCAyMjMsIDE5NSwgMjM2LCAxNzMsIDU0LCAxNjUsIDI1MiwgCi0gICAgMTUyLCAyMjksIDY4LCAyMjMsIDE5NSwgMjM2LCAxNzMsIDU0LCAxNjUsIDIzOSwgMjI2LCAyMjYsIDM0LCA1NCwgMTY1LCAKLSAgICAyNTAsIDUzLCAyMjYsIDM1LCAyNTIsIDkyLCA1NCwgMTY1LCAyMjksIDEzOSwgNTQsIDE2NSwgMjM0LCAxNTYsIDIyOSwgCi0gICAgMTM5LCA1NCwgMTY1LCAyMjYsIDM1LCAyMjksIDEzOSwgNTQsIDE2NSwgMjM0LCAxNTYsIDIyNiwgMzUsIDIyOSwgMTM5LCAKLSAgICA1NCwgMTY1LCAyMzEsIDE0MiwgMjUxLCAxNzcsIDIyOCwgMTIyLCAyMjksIDEzOSwgNTQsIDE2NSwgMjMxLCAxODcsIDI0NSwgCi0gICAgMjQ0LCAyMjksIDEzOSwgNTQsIDE2NSwgMjUyLCAxMCwgMjU1LCA3MiwgMjMxLCA3MywgMjM2LCAyMzYsIDE4MiwgMjUyLCAKLSAgICAyNiwgNTQsIDE2NSwgMjQ1LCAyMjAsIDIyNiwgMzQsIDU0LCAyMzcsIDEzNywgNSwgMjUxLCAyMDIsIDIzMSwgNzIsIDU0LCAKLSAgICAyMzcsIDEzNywgNSwgMjM3LCAyMDMsIDIzMSwgNzIsIDU0LCAyNTQsIDY2LCA1LCAyMjksIDE0OSwgMjQ2LCAxMzQsIDI1NSwgCi0gICAgNzMsIDIzMSwgNzIsIDU0LCAyNTQsIDY2LCA1LCAyNTUsIDcwLCAyMTMsIDU0LCAyNTQsIDY2LCA1LCAyMzAsIDIxNCwgMjI2LCAKLSAgICAzMCwgNTQsIDUsIDIzMSwgMjQ2LCAyNDksIDE3MywgMjQ2LCAxMzMsIDU0LCA1LCAyMzEsIDI0NiwgMjQ5LCAxNzMsIDI0NiwgCi0gICAgMTMsIDU0LCA1LCAyMzEsIDI0NiwgMjQ5LCAxNzMsIDI0NSwgMjIxLCA1NCwgNSwgMjMxLCAyNDYsIDIzNSwgMjQ5LCAyNDYsIAotICAgIDEzMywgNTQsIDUsIDIzMSwgMjQ2LCAyMzUsIDI0OSwgMjQ2LCAxMywgNTQsIDUsIDIzMSwgMjQ2LCAyNDksIDE3MywgMjMxLCAKLSAgICAyNDYsIDIzNSwgMjQ4LCA1NCwgMjEsIDIyMywgODksIDU0LCAyMSwgMTE4LCA1NCwgMjEsIDExMywgNTQsIDIxLCAxNjYsIAotICAgIDU0LCAyMSwgMTU4LCA1NCwgMjEsIDE3MywgNTQsIDIxLCAxODMsIDU0LCAyMSwgMTk0LCA1NCwgMjEsIDE4NywgNTQsIDIxLCAKLSAgICAxOTIsIDU0LCAyMSwgMTMyLCAxMTgsIDU0LCAyMSwgMTMyLCAxMTMsIDU0LCAyMSwgMTMyLCAxNjYsIDU0LCAyMSwgMTMyLCAKLSAgICAxNTgsIDU0LCAyMSwgMTMyLCAxNzMsIDU0LCAyMSwgMTMyLCAxODMsIDU0LCAyMSwgMTMyLCAxOTQsIDU0LCAyMSwgMTMyLCAKLSAgICAxODcsIDU0LCAyMSwgMTMyLCAxOTIsIDU0LCAyMSwgMTMyLCAyMjMsIDg5LCA1NCwgMTY1LCAyNTIsIDk1LCAyMzEsIDcyLCAKLSAgICA1NCwgMTY1LCAyMzUsIDEzMSwgMjUyLCA0NiwgMjM0LCAxNjQsIDIyMywgMjksIDU0LCAxNjUsIDI1MiwgMTAsIDI1NSwgNzIsIAotICAgIDIzMSwgNzMsIDI1MiwgNDcsIDIzNiwgMTM4LCAyNTIsIDI2LCA1NCwgMTY1LCAyMzUsIDEzMSwgMjUyLCA0NiwgMjI5LCAKLSAgICAxNTAsIDIzMSwgNzIsIDU0LCAxNjUsIDI1MSwgMTgzLCAyMzYsIDE3MywgNTQsIDE2NSwgMjI2LCA0NSwgMjU1LCA2OSwgNTQsIAotICAgIDE2NSwgMjQ1LCAyMDksIDIzMSwgNzMsIDI0NSwgMTc0LCA1NCwgMTY1LCAyNDUsIDIwOSwgMjMxLCA3MywgMjQ1LCAxODAsIAotICAgIDU0LCAxNjUsIDI1NCwgMTg1LCAyMzgsIDIyMCwgMjQ1LCAxNzQsIDU0LCAxNjUsIDI1NCwgMTg1LCAyMzgsIDIyMCwgMjQ1LCAKLSAgICAxODAsIDU0LCA1LCAyMjMsIDI0NSwgMjI2LCAzMywgNTQsIDUsIDIzNywgMjUsIDIyNiwgMzMsIDU0LCAxLCAxNzcsIDU0LCAKLSAgICAxLCAyMzgsIDIyNywgNTQsIDEsIDI0NiwgMTkzLCA1NCwgMSwgMjQ2LCA2NiwgNTQsIDEsIDIzNSwgMTM3LCA1NCwgMSwgCi0gICAgMjUyLCAzOSwgNTQsIDEsIDI1MSwgMjA0LCA1NCwgMSwgMjM5LCAxNzksIDU0LCAxLCAyMzQsIDE3MywgNTQsIDEsIDIyNiwgCi0gICAgMjAsIDU0LCAxLCAyMjYsIDEwLCA1NCwgMSwgMjUwLCAxMTcsIDU0LCAxLCAyNTAsIDEwMSwgNTQsIDEsIDIzNSwgMTgsIDU0LCAKLSAgICAxLCAyMjcsIDEwNywgNTQsIDEsIDIyNiwgMjUxLCA1NCwgMSwgMjUwLCAxODksIDU0LCAxLCAyNTAsIDIyLCA1NCwgMSwgCi0gICAgMjM2LCAxLCA1NCwgMSwgMjEzLCA1NCwgMSwgMjMzLCA5NywgNTQsIDEsIDI1MywgNzAsIDU0LCAxLCAyNTIsIDE5MCwgNTQsIAotICAgIDEsIDE5OCwgNTQsIDEsIDIyNiwgNDQsIDU0LCAxLCAyMjYsIDM3LCA1NCwgMSwgMjQ4LCA3MCwgNTQsIDEsIDI0OCwgNjYsIAotICAgIDU0LCAxLCAyMjQsIDE3MywgNTQsIDEsIDIyMywgODUsIDU0LCAxLCAyMjMsIDExNywgNTQsIDEsIDI1NSwgNzUsIDU0LCAxLCAKLSAgICAxOTEsIDU0LCAxLCAyMDgsIDU0LCAxLCAyMzgsIDQzLCA1NCwgMSwgMjI5LCAxNDYsIDU0LCAxLCAyMjgsIDExMCwgNTQsIDEsIAotICAgIDIzMSwgMzEsIDU0LCAxLCAxNTQsIDU0LCAxLCA1NywgNTQsIDEsIDIzOCwgMTEwLCA1NCwgMSwgMjQ3LCAzNCwgMjA4LCA1NCwgCi0gICAgMSwgMjM4LCAxNjcsIDU0LCAxLCAyMzEsIDk5LCA1NCwgMzEsIDUsIDI1NSwgNjMsIDU0LCAzMSwgNSwgNzQsIDU0LCAzMSwgCi0gICAgNSwgMjQwLCA0NywgNTQsIDMxLCA1LCA2NiwgNTQsIDMxLCA1LCAyMjUsIDc2LCA1NCwgMzEsIDUsIDE1MywgMTQ2LCA1NCwgCi0gICAgMzEsIDUsIDE1MywgMjMxLCAxMDAsIDU0LCAzMSwgNSwgMTUzLCAxNDksIDU0LCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgNTQsIAotICAgIDMxLCA1LCA3MiwgNTQsIDMxLCA1LCAyNDgsIDM1LCA1NCwgMzEsIDUsIDczLCA1NCwgMzEsIDUsIDIzNCwgNTIsIDU0LCA1LCAKLSAgICAyMzEsIDEyOCwgMjI4LCA3LCAyMzUsIDEzOCwgMjMxLCAxMjIsIDU0LCA1LCAyMzEsIDEyNywgMjUyLCAyMzksIDU0LCAzMSwgCi0gICAgNSwgMjAwLCA3NCwgNTQsIDMxLCA1LCAyMDAsIDI0MCwgNDcsIDU0LCA1LCAyMzQsIDE2NCwgMjIzLCAzMCwgMjM1LCAyNTUsIAotICAgIDI1MCwgMTg5LCA1NCwgNSwgMjI4LCAxNzgsIDIzNywgMjQ1LCA1NCwgMTY1LCAyNDUsIDE1MywgNTQsIDE2NSwgMjMzLCAKLSAgICAyMjEsIDU0LCA1LCAyMzcsIDI0OCwgMjMxLCA3MiwgNTQsIDUsIDIyMywgMjQ5LCAyMzEsIDcyLCA1NCwgNSwgMjM3LCAyNDksIAotICAgIDIyNiwgNDUsIDI1MiwgMjYsIDU0LCA1LCAyMzYsIDIzOCwgMjUyLCAyNiwgNTQsIDUsIDI0NSwgMjIzLCAyNTIsIDI3LCAKLSAgICAyMzEsIDE4NSwgNTQsIDUsIDI0NSwgMjIzLCAyMzYsIDIzMCwgMjMxLCAxODUsIDU0LCAyMjgsIDAsIDEsIDE3NywgNTQsIAotICAgIDIyOCwgMCwgMSwgMjM4LCAyMjcsIDU0LCAyMjgsIDAsIDEsIDI0NiwgMTkzLCA1NCwgMjI4LCAwLCAxLCAyNDYsIDY2LCA1NCwgCi0gICAgMjI4LCAwLCAxLCAyMzUsIDEzNywgNTQsIDIyOCwgMCwgMSwgMjUyLCAzOSwgNTQsIDIyOCwgMCwgMSwgMjUxLCAyMDQsIDU0LCAKLSAgICAyMjgsIDAsIDEsIDIzOSwgMTc5LCA1NCwgMjI4LCAwLCAxLCAyMzQsIDE3MywgNTQsIDIyOCwgMCwgMSwgMjI2LCAyMCwgNTQsIAotICAgIDIyOCwgMCwgMSwgMjI2LCAxMCwgNTQsIDIyOCwgMCwgMSwgMjUwLCAxMTcsIDU0LCAyMjgsIDAsIDEsIDI1MCwgMTAxLCA1NCwgCi0gICAgMjI4LCAwLCAxLCAyMzUsIDE4LCA1NCwgMjI4LCAwLCAxLCAyMjcsIDEwNywgNTQsIDIyOCwgMCwgMSwgMjI2LCAyNTEsIDU0LCAKLSAgICAyMjgsIDAsIDEsIDI1MCwgMTg5LCA1NCwgMjI4LCAwLCAxLCAyNTAsIDIyLCA1NCwgMjI4LCAwLCAxLCAyMzYsIDEsIDU0LCAKLSAgICAyMjgsIDAsIDEsIDIxMywgNTQsIDIyOCwgMCwgMSwgMjMzLCA5NywgNTQsIDIyOCwgMCwgMSwgMjUzLCA3MCwgNTQsIDIyOCwgCi0gICAgMCwgMSwgMjUyLCAxOTAsIDU0LCAyMjgsIDAsIDEsIDE5OCwgNTQsIDIyOCwgMCwgMSwgMjI2LCA0NCwgNTQsIDIyOCwgMCwgCi0gICAgMSwgMjI2LCAzNywgNTQsIDIyOCwgMCwgMSwgMjQ4LCA3MCwgNTQsIDIyOCwgMCwgMSwgMjQ4LCA2NiwgNTQsIDIyOCwgMCwgCi0gICAgMSwgMjI0LCAxNzMsIDU0LCAyMjgsIDAsIDEsIDIyMywgODUsIDU0LCAyMjgsIDAsIDEsIDIyMywgMTE3LCA1NCwgMjI4LCAwLCAKLSAgICAxLCAyNTUsIDc1LCA1NCwgMjI4LCAwLCAxLCAxOTEsIDU0LCAyMjgsIDAsIDEsIDIwOCwgNTQsIDIyOCwgMCwgMSwgMjM4LCAKLSAgICA0MywgNTQsIDIyOCwgMCwgMSwgMjI5LCAxNDYsIDU0LCAyMjgsIDAsIDEsIDIyOCwgMTEwLCA1NCwgMjI4LCAwLCAxLCAyMzEsIAotICAgIDMxLCA1NCwgMjI4LCAwLCAxLCAxNTQsIDU0LCAyMjgsIDAsIDEsIDU3LCA1NCwgMjI4LCAwLCAxLCAyMzgsIDExMCwgNTQsIAotICAgIDIyOCwgMCwgMSwgMjQ3LCAzNCwgMjI0LCAxNzMsIDU0LCAyMjgsIDAsIDEsIDI0NywgMzQsIDE5MSwgNTQsIDIyOCwgMCwgMSwgCi0gICAgMjQ3LCAzNCwgMjA4LCA1NCwgMjM4LCAxMDgsIDIzMSwgNzEsIDIzOCwgMjI3LCA1NCwgMjM4LCAxMDgsIDIzMSwgNzEsIAotICAgIDIzOCwgMjI4LCAyNTIsIDQ3LCAyMzYsIDEzOCwgMjUyLCAyNiwgNTQsIDI1MiwgMTcsIDUsIDExMiwgMjUyLCAyMzQsIDU0LCAKLSAgICAyNTIsIDE3LCA1LCAxNTcsIDI1MiwgMjM0LCA1NCwgMjUyLCAxNywgNSwgMjUyLCAxOCwgMjI3LCA0MywgNTQsIDI1MiwgMTcsIAotICAgIDUsIDIzMCwgMjMwLCAyNTUsIDc0LCA1NCwgMTQsIDI0OCwgMTE2LCAyNTIsIDkwLCA1NCwgMTQsIDIzMSwgMjQ1LCAyMzEsIAotICAgIDEyOSwgNTQsIDE0LCAyMzMsIDIzNCwgMjQ2LCAxMzIsIDU0LCAxNCwgMjMxLCAyNDUsIDIzMSwgMTMwLCAyMzEsIDE4NywgCi0gICAgMjQ1LCAyNDMsIDU0LCAxNCwgMjMzLCA3MywgMjEzLCA1NCwgMTQsIDIzNCwgMjQ4LCAyNTIsIDkwLCA1NCwgMTQsIDIzNCwgCi0gICAgMjQ4LCAyNTIsIDkxLCAyMzQsIDE1NiwgMjU1LCA3MSwgNTQsIDE0LCAyMzQsIDI0OCwgMjUyLCA5MSwgMjQ1LCAyMjIsIAotICAgIDI1NSwgNzEsIDU0LCAxNCwgMjM0LCAyNDgsIDI1MiwgOTEsIDI1MiwgNDcsIDI1NSwgNzEsIDU0LCA1LCAyMzEsIDI0NiwgCi0gICAgMjM1LCAyNDksIDIzMSwgMjQ2LCAyNDksIDE3MiwgNTQsIDUsIDIzMSwgMjQ2LCAyMzUsIDI0OSwgMjQ1LCAyMjEsIDU0LCAKLSAgICAxNjUsIDI1MiwgOTQsIDIyOSwgNjgsIDI0NiwgNDcsIDIzNiwgMTc0LCAyMzEsIDE4NiwgNTQsIDE2NSwgMjM2LCAxMDUsIAotICAgIDIyMywgMTk1LCAyNDYsIDQ3LCAyMzYsIDE3NCwgMjMxLCAxODYsIDU0LCAxNjUsIDIzNCwgMTU2LCAyMjYsIDM0LCA1NCwgCi0gICAgMTY1LCA1OSwgMjUyLCAxMTAsIDIzMSwgMTI0LCAyMjMsIDE5NSwgMjM2LCAxNzQsIDIzNiwgMjM3LCAxOTgsIDU0LCAxNjUsIAotICAgIDI1MSwgNzksIDI1MiwgMTEwLCAyMzEsIDEyNCwgMjIzLCAxOTUsIDIzNiwgMTc0LCAyMjksIDE1MiwgMTk4LCA2OSwgMSwgCi0gICAgMTc3LCA2OSwgMSwgMjM4LCAyMjcsIDY5LCAxLCAyNDYsIDE5MywgNjksIDEsIDI0NiwgNjYsIDY5LCAxLCAyMzUsIDEzNywgCi0gICAgNjksIDEsIDI1MiwgMzksIDY5LCAxLCAyNTEsIDIwNCwgNjksIDEsIDIzOSwgMTc5LCA2OSwgMSwgMjM5LCAxNjAsIDY5LCAxLCAKLSAgICAyMzQsIDE3MywgNjksIDEsIDIzNSwgOCwgNjksIDEsIDIyNiwgMjAsIDY5LCAxLCAyMjYsIDEwLCA2OSwgMSwgMjUwLCAxMTcsIAotICAgIDY5LCAxLCAyNTAsIDEwMSwgNjksIDEsIDIzNSwgMTgsIDY5LCAxLCAyMjcsIDEwNywgNjksIDEsIDIyNiwgMjUxLCA2OSwgMSwgCi0gICAgMjUwLCAxODksIDY5LCAxLCAyNTAsIDIyLCA2OSwgMSwgMjM2LCAxLCA2OSwgMSwgMjEzLCA2OSwgMSwgMjMzLCA5NywgNjksIAotICAgIDEsIDI1MywgNzAsIDY5LCAxLCAyNTIsIDE5MCwgNjksIDEsIDE5OCwgNjksIDEsIDE5MSwgNjksIDEsIDIwOCwgNjksIDEsIAotICAgIDIzOCwgNDMsIDY5LCAxLCAyMjQsIDE3MywgNjksIDEsIDIzMSwgMzEsIDY5LCAxLCAxNTQsIDY5LCAxLCAyMzcsIDE0OCwgCi0gICAgNjksIDEsIDU3LCA2OSwgMSwgMjI5LCAxMzEsIDU3LCA2OSwgMSwgNzQsIDY5LCAxLCAyNDAsIDQ3LCA2OSwgMSwgNjYsIDY5LCAKLSAgICAxLCAyMjUsIDc2LCA2OSwgMSwgNzIsIDY5LCAxLCAyMzYsIDk1LCA3MiwgNjksIDEsIDczLCA2OSwgMSwgMjU0LCA1MywgNjksIAotICAgIDMxLCA1LCAyMjcsIDc3LCAyNTUsIDYzLCA2OSwgMzEsIDUsIDI1NSwgNjMsIDY5LCAzMSwgNSwgNzQsIDY5LCAzMSwgNSwgCi0gICAgMjQwLCA0NywgNjksIDMxLCA1LCA2NiwgNjksIDMxLCA1LCAyMjUsIDc2LCA2OSwgMzEsIDUsIDcyLCA2OSwgMzEsIDUsIAotICAgIDI1NCwgMjUzLCA2OSwgMzEsIDUsIDIzNiwgOTUsIDI0MCwgNDcsIDY5LCAzMSwgNSwgMjM2LCA5NSwgNzMsIDY5LCAzMSwgNSwgCi0gICAgMTYxLCA0NiwgNjksIDUsIDI1NCwgMTYwLCA2OSwgNSwgNTYsIDUxLCA2OSwgNSwgMjI0LCAyMTEsIDY5LCA1LCAyMjQsIAotICAgIDIxNiwgNjksIDUsIDI1NCwgODQsIDY5LCAyNTEsIDMzLCA1LCAxMjQsIDE5MSwgNjksIDI1MSwgMzMsIDUsIDEyNCwgMjA4LCAKLSAgICA2OSwgMjUxLCAzMywgNSwgMTI0LCAyMjQsIDE3MywgNjksIDI1MSwgMzMsIDUsIDEyNCwgMTU0LCA2OSwgMSwgMjQ1LCAyMzMsIAotICAgIDIzMSwgMzEsIDY5LCAyMSwgMjIzLCA4OSwgNjksIDIxLCAxMTgsIDY5LCAyMSwgMTEzLCA2OSwgMjEsIDE2NiwgNjksIDIxLCAKLSAgICAxNTgsIDY5LCAyMSwgMTczLCA2OSwgMjEsIDE4MywgNjksIDIxLCAxOTQsIDY5LCAyMSwgMTg3LCA2OSwgMjEsIDE5MiwgNjksIAotICAgIDUsIDIzNywgMTU1LCAyMzAsIDIwNSwgNjksIDUsIDIzMCwgMjA1LCA2OSwgMTQsIDIzNywgMTQwLCA2OSwgMTQsIDI1MSwgCi0gICAgNDksIDY5LCAxNCwgMjU1LCAxMSwgNjksIDE0LCAyNDYsIDExOSwgNjksIDEsIDIyOSwgMTQ2LCA2OSwgMSwgMjI4LCAxMTAsIAotICAgIDY5LCAxLCAxNTMsIDE0NiwgNjksIDEsIDE1MywgMjMxLCAxMDAsIDY5LCAxLCAxNTMsIDE0OSwgNjksIDEsIDE1MywgMjM3LCAKLSAgICAxNDksIDY5LCAzMSwgNSwgMTUzLCAxNDYsIDY5LCAzMSwgNSwgMTUzLCAyMzEsIDEwMCwgNjksIDMxLCA1LCAxNTMsIDE0OSwgCi0gICAgNjksIDMxLCA1LCAxNTMsIDIzNywgMTQ5LCA2OSwgMSwgMjM2LCA5NSwgMjM1LCAxMzcsIDY5LCAxLCAyMzYsIDk1LCAyMzksIAotICAgIDE2MCwgNjksIDEsIDIzNiwgOTUsIDI1MywgMTYsIDY5LCAxLCAyMzYsIDk1LCAyNTMsIDEyLCA2OSwgMjUxLCAzMywgNSwgCi0gICAgMjM2LCA5NSwgMTI0LCAyMzYsIDEsIDY5LCAyNTEsIDMzLCA1LCAyMzYsIDk1LCAxMjQsIDE5OCwgNjksIDI1MSwgMzMsIDUsIAotICAgIDIzNiwgOTUsIDEyNCwgMjM4LCA0MywgNjksIDEsIDIyOSwgMTUxLCAyMzksIDI4LCAyMjksIDE0NiwgNjksIDMxLCA1LCAKLSAgICAyMjksIDE1MSwgMjM5LCAyOCwgMjQ3LCAxNjUsIDY5LCAyMDYsIDE2NSwgMjI5LCAxNTEsIDIzOSwgMjgsIDI0NSwgMTI5LCAKLSAgICA2OSwgMjA2LCAxNjUsIDIyOSwgMTUxLCAyMzksIDI4LCAyMzksIDQsIDIzMywgNzksIDY5LCAxLCAyMjQsIDEyOSwgMjMyLCAKLSAgICAxNTAsIDIzOSwgMjgsIDIyNiwgMjUxLCA2OSwgMSwgMjI0LCAxMjksIDIzMiwgMTUwLCAyMzksIDI4LCAyMzIsIDE1NiwgNjksIAotICAgIDMxLCA1LCAyMjQsIDEyOSwgMjMyLCAxNTAsIDIzOSwgMjgsIDI0NywgMTY1LCA2OSwgMzEsIDUsIDIyNCwgMTI5LCAyMzIsIAotICAgIDE1MCwgMjM5LCAyOCwgMjI1LCAxNTksIDY5LCA1LCAyMjQsIDEyOSwgMjMyLCAxNTAsIDIzOSwgMjgsIDIyNiwgMTE3LCA2OSwgCi0gICAgNSwgMjI0LCAxMjksIDIzMiwgMTUwLCAyMzksIDI4LCAyMjYsIDExNiwgNjksIDUsIDIyNCwgMTI5LCAyMzIsIDE1MCwgMjM5LCAKLSAgICAyOCwgMjI2LCAxMTUsIDY5LCA1LCAyMjQsIDEyOSwgMjMyLCAxNTAsIDIzOSwgMjgsIDIyNiwgMTE0LCA2OSwgNSwgMjI0LCAKLSAgICAxMjksIDIzMiwgMTUwLCAyMzksIDI4LCAyMjYsIDExMywgNjksIDEsIDI0OCwgNDQsIDIzMiwgMTUwLCAyMzksIDI4LCAyMzUsIAotICAgIDE4LCA2OSwgMSwgMjQ4LCA0NCwgMjMyLCAxNTAsIDIzOSwgMjgsIDIyMywgMTM0LCA2OSwgMSwgMjQ4LCA0NCwgMjMyLCAKLSAgICAxNTAsIDIzOSwgMjgsIDI0NiwgNDksIDY5LCAzMSwgNSwgMjQ2LCAxMjksIDIzOSwgMjgsIDc0LCA2OSwgMzEsIDUsIDIzOSwgCi0gICAgOSwgMjM0LCA4OCwgNjksIDMxLCA1LCAyMzksIDksIDY2LCA2OSwgMzEsIDUsIDIzOSwgOSwgMjQ4LCAzNSwgNjksIDEsIAotICAgIDIyOSwgMTMxLCAxNzcsIDY5LCAxLCAyMjksIDEzMSwgMjM4LCAyMjcsIDY5LCAxLCAyMjksIDEzMSwgMjQ2LCAxOTMsIDY5LCAKLSAgICAxLCAyMjksIDEzMSwgMjUyLCAzOSwgNjksIDEsIDIyOSwgMTMxLCAyMjMsIDExNywgNjksIDEsIDIyOSwgMTMxLCAyMzQsIAotICAgIDE3MywgNjksIDEsIDIyOSwgMTMxLCAyNTAsIDE4OSwgNjksIDEsIDIyOSwgMTMxLCAyMzYsIDEsIDY5LCAxLCAyMjksIDEzMSwgCi0gICAgMjMzLCA5NywgNjksIDEsIDIyOSwgMTMxLCAyNDcsIDEyOSwgNjksIDEsIDIyOSwgMTMxLCAyNTMsIDcwLCA2OSwgMSwgMjI5LCAKLSAgICAxMzEsIDIyNiwgMjUxLCA2OSwgMSwgMjI5LCAxMzEsIDE1NCwgNjksIDI1MSwgMzMsIDUsIDIyOSwgMTMxLCAxMjQsIDIyNCwgCi0gICAgMTczLCA2OSwgMzEsIDUsIDIyOSwgMTMxLCAyNTUsIDYzLCA2OSwgMzEsIDUsIDIyOSwgMTMxLCA3MiwgNjksIDMxLCA1LCAKLSAgICAyMjksIDEzMSwgMTYxLCA0NiwgNjksIDMxLCA1LCAyMjksIDEzMSwgMzUsIDIyNCwgMjUsIDY5LCA1LCAyMjksIDEzMSwgCi0gICAgMjI2LCAxMTYsIDY5LCA1LCAyMjksIDEzMSwgMjI2LCAxMTUsIDY5LCA1LCAyMjksIDEzMSwgMjI2LCAxMTMsIDY5LCA1LCAKLSAgICAyMjksIDEzMSwgMjI2LCAxMTIsIDY5LCA1LCAyMjksIDEzMSwgMjUxLCAyLCAyMjYsIDExNiwgNjksIDUsIDIyOSwgMTMxLCAKLSAgICAyNTEsIDIsIDIyNiwgMTE1LCA2OSwgNSwgMjI5LCAxMzEsIDI1MSwgMiwgMjQ3LCAyNDIsIDIyNiwgMTE4LCA2OSwgMSwgCi0gICAgMjMxLCA2MSwgMjMzLCAyMjYsIDI0NywgMTI5LCA2OSwgNSwgMjMxLCA2MSwgMjMzLCAyMjYsIDIyNiwgMTEzLCA2OSwgMjI5LCAKLSAgICAxMzEsIDIxLCAyMjMsIDg5LCA2OSwgMjI5LCAxMzEsIDIxLCAxMTgsIDY5LCAyMjksIDEzMSwgMjEsIDExMywgNjksIDIyOSwgCi0gICAgMTMxLCAyMSwgMTY2LCA2OSwgMjI5LCAxMzEsIDIxLCAxNTgsIDY5LCAyMjksIDEzMSwgMjEsIDE3MywgNjksIDIyOSwgMTMxLCAKLSAgICAyMSwgMTgzLCA2OSwgMjI5LCAxMzEsIDIxLCAxOTQsIDY5LCAyMjksIDEzMSwgMjEsIDE4NywgNjksIDIyOSwgMTMxLCAyMSwgCi0gICAgMTkyLCA2OSwgMTQsIDIyOSwgMTMxLCAxMTgsIDY5LCAxNCwgMjI5LCAxMzEsIDI0NywgMTQ4LCA4NywgNiwgMSwgMjU0LCAKLSAgICAxOTAsIDg3LCA2LCAxLCAyNTMsIDQ0LCA4NywgNiwgMSwgMjQ2LCAxNjgsIDg3LCA2LCAxLCAyNDksIDE0OCwgODcsIDYsIDEsIAotICAgIDI0NywgMjM5LCA4NywgNiwgMSwgMjI0LCAyMTksIDg3LCA2LCAxLCAyMjMsIDkyLCA4NywgNiwgMSwgMjI3LCA3MywgODcsIAotICAgIDYsIDEsIDI0MCwgMTYsIDg3LCA2LCAxLCAyMzksIDQ2LCA4NywgNiwgMSwgMjM4LCA2LCA4NywgNiwgMSwgMjM3LCAzNSwgCi0gICAgODcsIDYsIDEsIDIzNSwgMjMwLCA4NywgNiwgMSwgMjM0LCA2MSwgODcsIDYsIDEsIDIzMywgMTk0LCA4NywgNiwgMSwgMjIzLCAKLSAgICA4MSwgODcsIDYsIDEsIDIzMiwgMTUsIDg3LCA2LCAxLCAyMzAsIDI1MywgODcsIDYsIDEsIDIyNywgNjcsIDg3LCA2LCAxLCAKLSAgICAyMjUsIDEzOCwgODcsIDYsIDEsIDIzMywgOTIsIDg3LCA2LCAxLCAyMzgsIDIxOCwgODcsIDYsIDEsIDI0NiwgNjAsIDg3LCAKLSAgICA2LCAxLCAyMzIsIDEyMywgODcsIDYsIDEsIDIyOSwgNzgsIDg3LCA2LCAxLCAyNTEsIDE2MSwgODcsIDYsIDEsIDI1MiwgMjYsIAotICAgIDg3LCA2LCAxLCAyMzksIDE0OSwgODcsIDYsIDEsIDI1MSwgMTA5LCA4NywgNiwgMSwgMjUxLCAxOTIsIDg3LCA2LCAxLCAKLSAgICAyMjQsIDcwLCA4NywgNiwgMSwgMjM5LCAxNTksIDg3LCA2LCAxLCAyNDUsIDE2NSwgODcsIDYsIDEsIDI0NSwgMTIxLCA4NywgCi0gICAgNiwgMSwgMjQ1LCA3MSwgODcsIDYsIDEsIDIyNCwgMTQxLCA4NywgNiwgMSwgMjQ1LCAxNDEsIDg3LCA2LCAxLCAyNDQsIAotICAgIDIyNSwgODcsIDEsIDI1NCwgMTkwLCA4NywgMSwgMjUzLCA0NCwgODcsIDEsIDI0NiwgMTY4LCA4NywgMSwgMjQ5LCAxNDgsIAotICAgIDg3LCAxLCAyNDcsIDIzOSwgODcsIDEsIDIyNCwgMjE5LCA4NywgMSwgMjIzLCA5MiwgODcsIDEsIDIyNywgNzMsIDg3LCAxLCAKLSAgICAyNDAsIDE2LCA4NywgMSwgMjM5LCA0NiwgODcsIDEsIDIzOCwgNiwgODcsIDEsIDIzNywgMzUsIDg3LCAxLCAyMzUsIDIzMCwgCi0gICAgODcsIDEsIDIzNCwgNjEsIDg3LCAxLCAyMzMsIDE5NCwgODcsIDEsIDIyMywgODEsIDg3LCAxLCAyMzIsIDE1LCA4NywgMSwgCi0gICAgMjMwLCAyNTMsIDg3LCAxLCAyMjcsIDY3LCA4NywgMSwgMjI1LCAxMzgsIDg3LCAxLCAyMzMsIDkyLCA4NywgMSwgMjM4LCAKLSAgICAyMTgsIDg3LCAxLCAyNDYsIDYwLCA4NywgMSwgMjMyLCAxMjMsIDg3LCAxLCAyMjksIDc4LCA4NywgMSwgMjUxLCAxNjEsIAotICAgIDg3LCAxLCAyNTIsIDI2LCA4NywgMSwgMjM5LCAxNDksIDg3LCAxLCAyNTEsIDEwOSwgODcsIDEsIDI1MSwgMTkyLCA4NywgMSwgCi0gICAgMjI0LCA3MCwgODcsIDEsIDIzOSwgMTU5LCA4NywgMSwgMjQ1LCAxNjUsIDg3LCAxLCAyNDUsIDEyMSwgODcsIDEsIDI0NSwgCi0gICAgNzEsIDg3LCAxLCAyMjQsIDE0MSwgODcsIDEsIDI0NSwgMTQxLCA4NywgMSwgMjQ0LCAyMjUsIDg3LCAxLCAyNDcsIDcwLCAKLSAgICA4NywgMSwgMjIzLCAxODUsIDg3LCAxLCAyNDcsIDI1MSwgODcsIDEsIDIwOSwgMjQ2LCAxNjgsIDg3LCAxLCAyNTQsIDI0OCwgCi0gICAgODcsIDIzMywgMTkyLCAyMjksIDE3MywgNTIsIDEsIDg3LCAyMzUsIDIzMCwgMjYsIDEyMiwgMjM4LCAxNzMsIDI2LCAxMjIsIAotICAgIDIyOCwgMTA0LCAyNiwgMTIyLCAyMzUsIDgyLCAyNiwgMTIyLCAyMjYsIDE2MywgMjYsIDEyMiwgMjI4LCA5OSwgMjYsIDEyMiwgCi0gICAgMjMxLCAxNzQsIDI2LCAxMjIsIDIzNiwgMTQ4LCAyNiwgMTIyLCAyMzMsIDYwLCAyNiwgMTIyLCAyMjgsIDEwMiwgMjYsIAotICAgIDEyMiwgMjI4LCAyMzYsIDI2LCAxMjIsIDIyOCwgMTAwLCAyNiwgMTIyLCAyNDAsIDY4LCAyNiwgMTIyLCAyNTEsIDExMywgCi0gICAgMjYsIDEyMiwgMjI4LCAxMDcsIDI2LCAxMjIsIDI1MSwgMTY3LCAyNiwgMTIyLCAyMzgsIDIxMCwgMjYsIDEyMiwgMjI2LCAKLSAgICAyMTgsIDI2LCAxMjIsIDIzMywgODUsIDI2LCAxMjIsIDI0NSwgNjksIDI2LCAxMjIsIDIzNSwgNzksIDI2LCAxMjIsIDIyOCwgCi0gICAgMTAzLCAyNiwgMTIyLCAyMzUsIDc0LCAyNiwgMTIyLCAyMzUsIDc3LCAyNiwgMTIyLCAyMjYsIDE2MiwgMjYsIDEyMiwgMjMxLCAKLSAgICAxNjUsIDI2LCAxMjIsIDIyOCwgMTAxLCAyNiwgMTIyLCAyMzEsIDE3MywgMjYsIDEyMiwgMjM5LCAzMSwgMjYsIDEyMiwgCi0gICAgMjM2LCAxNDMsIDI2LCAxMjIsIDIzOSwgMzQsIDI2LCAxMjIsIDIzMywgNTYsIDI2LCAxMjIsIDIzMywgNTUsIDI2LCAxMjIsIAotICAgIDIzMywgNDUsIDI2LCAxMjIsIDIzMywgNTIsIDI2LCAxMjIsIDIzMywgNTAsIDI2LCAxMjIsIDIzMywgNDgsIDI2LCAxMjIsIAotICAgIDIzMywgNDksIDI2LCAxMjIsIDIzMywgNDcsIDI2LCAxMjIsIDIzMywgNTEsIDI2LCAxMjIsIDIzMywgNTgsIDI2LCAxMjIsIAotICAgIDIzMywgNTksIDI2LCAxMjIsIDIzMywgNDYsIDI2LCAxMjIsIDIzMywgNTQsIDI2LCAxMjIsIDIzOSwgMzIsIDI2LCAxMjIsIAotICAgIDIzOSwgMzAsIDI2LCAxMjIsIDIyOCwgMjMwLCAyNiwgMTIyLCAyMjgsIDIyOCwgMjYsIDEyMiwgMjI4LCAyMjEsIDI2LCAKLSAgICAxMjIsIDIyOCwgMjI0LCAyNiwgMTIyLCAyMjgsIDIyOSwgMjYsIDEyMiwgMjI4LCAyMjYsIDI2LCAxMjIsIDIyOCwgMjI1LCAKLSAgICAyNiwgMTIyLCAyMjgsIDIyMywgMjYsIDEyMiwgMjI4LCAyMzIsIDI2LCAxMjIsIDIyOCwgMjM0LCAyNiwgMTIyLCAyMjgsIAotICAgIDIzNSwgMjYsIDEyMiwgMjI4LCAyMzEsIDI2LCAxMjIsIDIyOCwgMjIyLCAyNiwgMTIyLCAyMjgsIDIyNywgMjYsIDEyMiwgCi0gICAgMjI4LCAyMzMsIDI2LCAxMjIsIDI1MSwgMTU0LCAyNiwgMTIyLCAyNTEsIDE1MiwgMjYsIDEyMiwgMjUxLCAyMTIsIDI2LCAKLSAgICAxMjIsIDI1MSwgMjEwLCAyNiwgMTIyLCAyMzMsIDIwNCwgMjYsIDEyMiwgMjQwLCA2NCwgMjYsIDEyMiwgMjQwLCA1NiwgMjYsIAotICAgIDEyMiwgMjQwLCA2MywgMjYsIDEyMiwgMjQwLCA2MCwgMjYsIDEyMiwgMjQwLCA1OSwgMjYsIDEyMiwgMjQwLCA2MiwgMjYsIAotICAgIDEyMiwgMjI4LCAxMDUsIDI2LCAxMjIsIDI0MCwgNjYsIDI2LCAxMjIsIDI0MCwgNjcsIDI2LCAxMjIsIDI0MCwgNTcsIDI2LCAKLSAgICAxMjIsIDI0MCwgNjEsIDI2LCAxMjIsIDIyMywgMjEyLCAyNiwgMTIyLCAyNTEsIDExMiwgMjYsIDEyMiwgMjUxLCAxNTUsIAotICAgIDI2LCAxMjIsIDI1MSwgMTUzLCAyNiwgMTIyLCAyNTEsIDIxMywgMjYsIDEyMiwgMjUxLCAyMTEsIDI2LCAxMjIsIDI1MSwgCi0gICAgMTY1LCAyNiwgMTIyLCAyNTEsIDE2NiwgMjYsIDEyMiwgMjUxLCAxNTYsIDI2LCAxMjIsIDI1MSwgMjE0LCAyNiwgMTIyLCAKLSAgICAyMzMsIDg0LCAyNiwgMTIyLCAyMzksIDMzLCAyNiwgMTIyLCAyMjgsIDEwNiwgMjYsIDEyMiwgMjIzLCAyMTgsIDI2LCAxMjIsIAotICAgIDI0NywgNTIsIDI2LCAxNzAsIDI0NywgNTIsIDI2LCAxNzAsIDU3LCAyNiwgMTcwLCAyNTUsIDE5LCAyNiwgMTcwLCAxOTEsIAotICAgIDI2LCAxNzAsIDIyNCwgMTAsIDI2LCAxNzAsIDI0NywgMjE3LCAyNiwgMTcwLCA3MiwgMjYsIDE3MCwgMjIzLCAyMjEsIDI2LCAKLSAgICAxNzAsIDIyMywgMjI4LCAyNiwgMTcwLCA3MywgMjYsIDE3MCwgMjI0LCAxNzMsIDI2LCAxNzAsIDIyNCwgMTcwLCAyNiwgCi0gICAgMTcwLCAyMzQsIDg4LCAyNiwgMTcwLCAyMjMsIDE4MywgMjYsIDE3MCwgNjYsIDI2LCAxNzAsIDIyNCwgMTMzLCAyNiwgMTcwLCAKLSAgICAyMjQsIDE0MSwgMjYsIDE3MCwgMjI0LCAxMTgsIDI2LCAxNzAsIDIyMywgMTU4LCAyNiwgMTcwLCAyNDcsIDE2NSwgMjYsIAotICAgIDE3MCwgMjIzLCAyMDIsIDI2LCAxNzAsIDc0LCAyNiwgMTcwLCAyNTUsIDY3LCAyNiwgMTcwLCAyNTUsIDY2LCAyNiwgMTcwLCAKLSAgICAyMjQsIDIzLCAyNiwgMTcwLCAyMjQsIDIyLCAyNiwgMTcwLCAyNDcsIDIxNSwgMjYsIDE3MCwgMjQ3LCAyMTQsIDI2LCAxNzAsIAotICAgIDI0NywgMjE2LCAyNiwgMTcwLCAyMjMsIDIyMCwgMjYsIDE3MCwgMjIzLCAyMTksIDI2LCAxNzAsIDIzNCwgMTA5LCAyNiwgCi0gICAgMTcwLCAyMzQsIDExMCwgMjYsIDE3MCwgMjM0LCAxMDYsIDI2LCAxNzAsIDIzNCwgMTA4LCAyNiwgMTcwLCAyMzQsIDEwNywgCi0gICAgMjYsIDE3MCwgMjIzLCAxODAsIDI2LCAxNzAsIDIyMywgMTc5LCAyNiwgMTcwLCAyMjMsIDE3OCwgMjYsIDE3MCwgMjIzLCAKLSAgICAxODEsIDI2LCAxNzAsIDIyMywgMTgyLCAyNiwgMTcwLCAyMjUsIDE3NywgMjYsIDE3MCwgMjI1LCAxNzYsIDI2LCAxNzAsIAotICAgIDIyNSwgMTc1LCAyNiwgMTcwLCAyMjUsIDE3MywgMjYsIDE3MCwgMjI1LCAxNzQsIDI2LCAxNzAsIDIyMywgMTU3LCAyNiwgCi0gICAgMTcwLCAyMjMsIDE1NSwgMjYsIDE3MCwgMjIzLCAxNTYsIDI2LCAxNzAsIDIyMywgMTUxLCAyNiwgMTcwLCAyMjMsIDE1MiwgCi0gICAgMjYsIDE3MCwgMjIzLCAxNTMsIDI2LCAxNzAsIDIyMywgMTU0LCAyNiwgMTcwLCAyNDcsIDE2MywgMjYsIDE3MCwgMjQ3LCAKLSAgICAxNjQsIDI2LCAxNzAsIDIyMywgMjAxLCAyNiwgMTcwLCAyNDQsIDgwLCAyNiwgMTcwLCAyNDQsIDc0LCAyNiwgMTcwLCAyNDQsIAotICAgIDc2LCAyNiwgMTcwLCAyNDQsIDc1LCAyNiwgMTcwLCAyNDQsIDc3LCAyNiwgMTcwLCAyNDQsIDc5LCAyNiwgMTcwLCAyNTQsIAotICAgIDEyOCwgMjYsIDE3MCwgMjU0LCAxMjcsIDI2LCAxNzAsIDI1NCwgMTI1LCAyNiwgMTcwLCAyNTQsIDEyNiwgMjYsIDE3MCwgCi0gICAgMjI4LCAxMDgsIDI2LCAxMzgsIDIzOCwgMTczLCAyNiwgMTM4LCAyMjgsIDEwNCwgMjYsIDEzOCwgMjM4LCAxNzEsIDI2LCAKLSAgICAxMzgsIDIzNSwgODIsIDI2LCAxMzgsIDIzNSwgODEsIDI2LCAxMzgsIDIzNSwgODAsIDI2LCAxMzgsIDIyNiwgMTYzLCAyNiwgCi0gICAgMTM4LCAyMzEsIDE3NCwgMjYsIDEzOCwgMjMxLCAxNzAsIDI2LCAxMzgsIDIzMSwgMTY4LCAyNiwgMTM4LCAyMzEsIDE2MiwgCi0gICAgMjYsIDEzOCwgMjMxLCAxNTksIDI2LCAxMzgsIDIzMSwgMTU3LCAyNiwgMTM4LCAyMzEsIDE2MywgMjYsIDEzOCwgMjMxLCAKLSAgICAxNzMsIDI2LCAxMzgsIDIzNiwgMTQ4LCAyNiwgMTM4LCAyMzMsIDYwLCAyNiwgMTM4LCAyMzMsIDUyLCAyNiwgMTM4LCAyMjgsIAotICAgIDIzNiwgMjYsIDEzOCwgMjI4LCAxMDAsIDI2LCAxMzgsIDI0MCwgNjgsIDI2LCAxMzgsIDI1MSwgMTEzLCAyNiwgMTM4LCAKLSAgICAyNTEsIDE2NywgMjYsIDEzOCwgMjM4LCAyMTAsIDI2LCAxMzgsIDIyNiwgMjE4LCAyNiwgMTM4LCAyMzMsIDg1LCAyNiwgCi0gICAgMTM4LCAyNDUsIDY5LCAyNiwgMTM4LCAyMzgsIDE3MiwgMjYsIDEzOCwgMjM4LCAxNzAsIDI2LCAxMzgsIDIzNSwgNzksIDI2LCAKLSAgICAxMzgsIDIzNSwgNzQsIDI2LCAxMzgsIDIzNSwgNzYsIDI2LCAxMzgsIDIzNSwgNzgsIDI2LCAxMzgsIDIzNSwgNzUsIDI2LCAKLSAgICAxMzgsIDIyNiwgMTYyLCAyNiwgMTM4LCAyMjYsIDE2MSwgMjYsIDEzOCwgMjMxLCAxNjksIDI2LCAxMzgsIDIzMSwgMTY1LCAKLSAgICAyNiwgMTM4LCAyMzEsIDE1NiwgMjYsIDEzOCwgMjMxLCAxNTUsIDI2LCAxMzgsIDIyOCwgMTAxLCAyNiwgMTM4LCAyMzEsIAotICAgIDE2NywgMjYsIDEzOCwgMjMxLCAxNjYsIDI2LCAxMzgsIDIzMSwgMTYwLCAyNiwgMTM4LCAyMzEsIDE2MSwgMjYsIDEzOCwgCi0gICAgMjMxLCAxNzIsIDI2LCAxMzgsIDIzMSwgMTU4LCAyNiwgMTM4LCAyMzEsIDE2NCwgMjYsIDEzOCwgMjMxLCAxNzEsIDI2LCAKLSAgICAxMzgsIDIzMSwgMTU0LCAyNiwgMTM4LCAyMzYsIDE0NSwgMjYsIDEzOCwgMjM2LCAxNDIsIDI2LCAxMzgsIDIzNiwgMTQzLCAKLSAgICAyNiwgMTM4LCAyMzYsIDE0MSwgMjYsIDEzOCwgMjM2LCAxNDAsIDI2LCAxMzgsIDIzNiwgMTQ0LCAyNiwgMTM4LCAyMzYsIAotICAgIDE0NywgMjYsIDEzOCwgMjM2LCAxNDYsIDI2LCAxMzgsIDIzOSwgMzQsIDI2LCAxMzgsIDIzMywgNTMsIDI2LCAxMzgsIDIzMywgCi0gICAgNTQsIDI2LCAxMzgsIDIzMywgNTcsIDI2LCAxMzgsIDIzOSwgMzIsIDI2LCAxMzgsIDIyOCwgMjMwLCAyNiwgMTM4LCAyMjgsIAotICAgIDIyMSwgMjYsIDEzOCwgMjI4LCAyMjQsIDI2LCAxMzgsIDIyOCwgMjI2LCAyNiwgMTM4LCAyMzMsIDIwNCwgMjYsIDEzOCwgCi0gICAgMjQwLCA2NCwgMjYsIDEzOCwgMjQwLCA1OCwgMjYsIDEzOCwgMjI4LCAxMDUsIDI2LCAxMzgsIDI0MCwgNjUsIDI2LCAxMzgsIAotICAgIDIyMywgMjEyLCAyNiwgMTM4LCAyMjMsIDIxMCwgMjYsIDEzOCwgMjIzLCAyMTEsIDI2LCAxMzgsIDIzMywgODQsIDI2LCAKLSAgICAxMzgsIDIzOSwgMzMsIDI2LCAxMzgsIDI0NSwgNjcsIDI2LCAxMzgsIDI0NSwgNjUsIDI2LCAxMzgsIDI0NSwgNjgsIDI2LCAKLSAgICAxMzgsIDI0NSwgNjYsIDI2LCAxMzgsIDIyMywgMjE4LCAyNSwgNCwgMTU0LCAyNSwgNCwgMjQ0LCAxNDUsIDI1LCA0LCAyNDUsIAotICAgIDc1LCAyNSwgNCwgMjQ1LCAxNjcsIDI1LCA0LCAyNDUsIDEwOSwgMjUsIDQsIDI0NSwgMTIxLCAyNSwgNCwgMjQ0LCAyMjcsIAotICAgIDI1LCA0LCAyNDQsIDIyNiwgMjUsIDQsIDIzOCwgNDMsIDI1LCA0LCAyMzcsIDExMCwgMjUsIDQsIDIzNywgMTkzLCAyNSwgNCwgCi0gICAgMjM4LCA0MiwgMjUsIDQsIDIzNywgMjM5LCAyNSwgNCwgMjM3LCAyNDMsIDI1LCA0LCAyMzcsIDE0MywgMjUsIDQsIDIzNywgCi0gICAgODgsIDI1LCA0LCAyNDUsIDg0LCAyNSwgNCwgMjQ1LCA3OCwgMjUsIDQsIDI0NSwgODAsIDI1LCA0LCAyNDUsIDgzLCAyNSwgCi0gICAgNCwgMjQ1LCA4MSwgMjUsIDQsIDI0NSwgODIsIDI1LCA0LCAyNDUsIDc5LCAyNSwgNCwgMjQ1LCA3NywgMjUsIDQsIDE5OCwgCi0gICAgMjUsIDQsIDIzNiwgNjYsIDI1LCA0LCAyMzYsIDE1NywgMjUsIDQsIDIzNywgNjYsIDI1LCA0LCAyMzYsIDIyNiwgMjUsIDQsIAotICAgIDIzNiwgMjM1LCAyNSwgNCwgMjM2LCAxMDMsIDI1LCA0LCAyMzYsIDE5LCAyNSwgNCwgMjI3LCAxMjAsIDI1LCA0LCAyMjcsIAotICAgIDExNCwgMjUsIDQsIDIyNywgMTE2LCAyNSwgNCwgMjI3LCAxMTksIDI1LCA0LCAyMjcsIDExNywgMjUsIDQsIDIyNywgMTE4LCAKLSAgICAyNSwgNCwgMjI3LCAxMTUsIDI1LCA0LCAyMjcsIDExMywgMjUsIDQsIDIwOCwgMjUsIDQsIDIzMSwgNzAsIDI1LCA0LCAyMzEsIAotICAgIDE4MCwgMjUsIDQsIDIzMiwgMjIsIDI1LCA0LCAyMzEsIDIyOSwgMjUsIDQsIDIzMSwgMjQ0LCAyNSwgNCwgMjMxLCAxMjIsIAotICAgIDI1LCA0LCAyMzEsIDQ2LCAyNSwgNCwgMjMxLCAzMSwgMjUsIDQsIDIyOCwgNiwgMjUsIDQsIDIyOSwgMTUsIDI1LCA0LCAKLSAgICAyMzEsIDI5LCAyNSwgNCwgMjMwLCAyMDMsIDI1LCA0LCAyMzAsIDIxMywgMjUsIDQsIDIyOCwgMTY5LCAyNSwgNCwgMjI3LCAKLSAgICAyMDAsIDI1LCA0LCAyMjksIDE0NiwgMjUsIDQsIDIyOSwgNDMsIDI1LCA0LCAyMjksIDkwLCAyNSwgNCwgMjI5LCAxNDIsIAotICAgIDI1LCA0LCAyMjksIDExMiwgMjUsIDQsIDIyOSwgMTE0LCAyNSwgNCwgMjI5LCA3MSwgMjUsIDQsIDIyOSwgMzAsIDI1LCA0LCAKLSAgICAyMzIsIDEzOCwgMjUsIDQsIDIzMiwgODQsIDI1LCA0LCAyMzIsIDEwNCwgMjUsIDQsIDIzMiwgMTM3LCAyNSwgNCwgMjMyLCAKLSAgICAxMTgsIDI1LCA0LCAyMzIsIDExOSwgMjUsIDQsIDIzMiwgOTUsIDI1LCA0LCAyMzIsIDk0LCAyNSwgNCwgMjMyLCA0NSwgMjUsIAotICAgIDQsIDIzMiwgNDEsIDI1LCA0LCAyMzIsIDQ0LCAyNSwgNCwgMjMyLCA0MiwgMjUsIDQsIDIzMiwgNDMsIDI1LCA0LCAyMzIsIAotICAgIDExNiwgMjUsIDQsIDIzMiwgMTEwLCAyNSwgNCwgMjMyLCAxMTIsIDI1LCA0LCAyMzIsIDExNSwgMjUsIDQsIDIzMiwgMTEzLCAKLSAgICAyNSwgNCwgMjMyLCAxMTQsIDI1LCA0LCAyMzIsIDExMSwgMjUsIDQsIDIzMiwgMTA5LCAyNSwgNCwgMjMyLCAxMDUsIDI1LCAKLSAgICA0LCAyMzIsIDEwOCwgMjUsIDQsIDIzMiwgMTA2LCAyNSwgNCwgMjMyLCAxMDcsIDI1LCA0LCAyNTMsIDcwLCAyNSwgNCwgCi0gICAgMjUyLCA5MCwgMjUsIDQsIDI1MiwgMTgxLCAyNSwgNCwgMjUzLCA2OSwgMjUsIDQsIDI1MiwgMjMyLCAyNSwgNCwgMjUyLCAKLSAgICAyMzgsIDI1LCA0LCAyNTIsIDEzOCwgMjUsIDQsIDI1MiwgNjAsIDI1LCA0LCAyMjUsIDY0LCAyNSwgNCwgMjI0LCAxOTAsIAotICAgIDI1LCA0LCAyMjQsIDIyOCwgMjUsIDQsIDIyNSwgNjMsIDI1LCA0LCAyMjUsIDM4LCAyNSwgNCwgMjI1LCA0MiwgMjUsIDQsIAotICAgIDIyNCwgMjA2LCAyNSwgNCwgMjI0LCAxODMsIDI1LCA0LCAyMjcsIDEwNywgMjUsIDQsIDIyNSwgMjUwLCAyNSwgNCwgMjI2LCAKLSAgICAxNzUsIDI1LCA0LCAyMjcsIDEwNCwgMjUsIDQsIDIyNywgMzcsIDI1LCA0LCAyMjcsIDQ0LCAyNSwgNCwgOTYsIDI1LCA0LCAKLSAgICAyMjUsIDIyMiwgMjUsIDQsIDI1MiwgMzksIDI1LCA0LCAyNTAsIDIzNSwgMjUsIDQsIDI1MSwgMTE4LCAyNSwgNCwgMjUyLCAKLSAgICAzOCwgMjUsIDQsIDI1MSwgMjI1LCAyNSwgNCwgMjUxLCAyMzEsIDI1LCA0LCAyNTEsIDY4LCAyNSwgNCwgMjUwLCAyMTAsIAotICAgIDI1LCA0LCAyMjQsIDcyLCAyNSwgNCwgMjI0LCA0OCwgMjUsIDQsIDIyNCwgNjQsIDI1LCA0LCAyMjQsIDcxLCAyNSwgNCwgCi0gICAgMjI0LCA2OCwgMjUsIDQsIDIyNCwgNjksIDI1LCA0LCAyMjQsIDU1LCAyNSwgNCwgMjI0LCA1NCwgMjUsIDQsIDIyNCwgNDQsIAotICAgIDI1LCA0LCAyMjQsIDQwLCAyNSwgNCwgMjI0LCA0MywgMjUsIDQsIDIyNCwgNDEsIDI1LCA0LCAyMjQsIDQyLCAyNSwgNCwgCi0gICAgMjM2LCAxLCAyNSwgNCwgMjM0LCAyMDYsIDI1LCA0LCAyMzUsIDg5LCAyNSwgNCwgMjM1LCAyNTQsIDI1LCA0LCAyMzUsIAotICAgIDE2MCwgMjUsIDQsIDIzNSwgMTYyLCAyNSwgNCwgMjM1LCA2LCAyNSwgNCwgMjM0LCAxNzcsIDI1LCA0LCAyMzQsIDE3MywgCi0gICAgMjUsIDQsIDIzNCwgMTQ2LCAyNSwgNCwgMjM0LCAxNjMsIDI1LCA0LCAyMzQsIDE3MiwgMjUsIDQsIDIzNCwgMTY4LCAyNSwgCi0gICAgNCwgMjM0LCAxNjksIDI1LCA0LCAyMzQsIDE1MiwgMjUsIDQsIDIzNCwgMTM5LCAyNSwgNCwgMjQ2LCAxNiwgNTcsIDI1LCA0LCAKLSAgICAyNDYsIDE2LCA2NiwgMjUsIDQsIDI0NiwgMTYsIDc0LCAyNSwgNCwgMjQ2LCAxNiwgMjU1LCA2MywgMjUsIDQsIDI0NiwgMTYsIAotICAgIDI0OCwgMzUsIDI1LCA0LCAyNDYsIDE2LCA3MiwgMjUsIDQsIDI0NiwgMTYsIDczLCAyNSwgNCwgMjQ2LCAxNiwgMjI0LCAKLSAgICAxNzMsIDI1LCA0LCAxNzcsIDI1LCA0LCAyMzgsIDEwNywgMjUsIDQsIDIzOCwgMTk5LCAyNSwgNCwgMjM5LCA3MiwgMjUsIDQsIAotICAgIDIzOSwgMiwgMjUsIDQsIDIzOSwgMywgMjUsIDQsIDIzOCwgMTUwLCAyNSwgNCwgMjM4LCAxNDksIDI1LCA0LCAyMzgsIDc4LCAKLSAgICAyNSwgNCwgMjM4LCA3NCwgMjUsIDQsIDIzOCwgNzcsIDI1LCA0LCAyMzgsIDc1LCAyNSwgNCwgMjM4LCA3NiwgMjUsIDQsIAotICAgIDIzOCwgNjksIDI1LCA0LCAyMzgsIDYzLCAyNSwgNCwgMjM4LCA2NSwgMjUsIDQsIDIzOCwgNjgsIDI1LCA0LCAyMzgsIDY2LCAKLSAgICAyNSwgNCwgMjM4LCA2NywgMjUsIDQsIDIzOCwgNjQsIDI1LCA0LCAyMzgsIDYyLCAyNSwgNCwgMjM4LCA1OCwgMjUsIDQsIAotICAgIDIzOCwgNjEsIDI1LCA0LCAyMzgsIDU5LCAyNSwgNCwgMjM4LCA2MCwgMjUsIDQsIDIyNCwgMTczLCAyNSwgNCwgMjI0LCA4MywgCi0gICAgMjUsIDQsIDIyNCwgMTE4LCAyNSwgNCwgMjI0LCAxNzIsIDI1LCA0LCAyMjQsIDEzOCwgMjUsIDQsIDIyNCwgMTQxLCAyNSwgCi0gICAgNCwgMjI0LCAxMDUsIDI1LCA0LCAyMjQsIDEwNCwgMjUsIDQsIDIzMywgOTEsIDU3LCAyNSwgNCwgMjMzLCA5MSwgNjYsIDI1LCAKLSAgICA0LCAyMzMsIDkxLCA3NCwgMjUsIDQsIDIzMywgOTEsIDI1NSwgNjMsIDI1LCA0LCAyMzMsIDkxLCAyNDgsIDM1LCAyNSwgNCwgCi0gICAgMjMzLCA5MSwgNzIsIDI1LCA0LCAyMzMsIDkxLCA3MywgMjUsIDQsIDIyMywgMTE3LCAyNSwgNCwgMjIzLCAxOSwgMjUsIDQsIAotICAgIDIyMywgNDcsIDI1LCA0LCAyMjMsIDExNiwgMjUsIDQsIDIyMywgOTUsIDI1LCA0LCAyMjMsIDk3LCAyNSwgNCwgMjIzLCAyNywgCi0gICAgMjUsIDQsIDIyMywgNiwgMjUsIDQsIDIyMywgODUsIDI1LCA0LCAyMjMsIDY1LCAyNSwgNCwgMjIzLCA3MiwgMjUsIDQsIAotICAgIDIyMywgODQsIDI1LCA0LCAyMjMsIDc2LCAyNSwgNCwgMjIzLCA3NywgMjUsIDQsIDIyMywgNzAsIDI1LCA0LCAyMjMsIDU2LCAKLSAgICAyNSwgNCwgMTkxLCAyNSwgNCwgMjIzLCAxNTgsIDI1LCA0LCAyMjMsIDIwMiwgMjUsIDQsIDIyNCwgMjEsIDI1LCA0LCAyMjMsIAotICAgIDIyNSwgMjUsIDQsIDIyMywgMjI4LCAyNSwgNCwgMjIzLCAxODMsIDI1LCA0LCAyMjMsIDE3NywgMjUsIDQsIDI1MCwgMTg5LCAKLSAgICAyNSwgNCwgMjQ4LCAxMDcsIDI1LCA0LCAyNTAsIDQsIDI1LCA0LCAyNTAsIDE4OCwgMjUsIDQsIDI1MCwgNjcsIDI1LCA0LCAKLSAgICAyNTAsIDc3LCAyNSwgNCwgMjQ5LCAxNjEsIDI1LCA0LCAyNDgsIDc5LCAyNSwgNCwgMjUwLCAxMTcsIDI1LCA0LCAyNTAsIAotICAgIDg3LCAyNSwgNCwgMjUwLCA5OSwgMjUsIDQsIDI1MCwgMTE2LCAyNSwgNCwgMjUwLCAxMDQsIDI1LCA0LCAyNTAsIDEwNSwgCi0gICAgMjUsIDQsIDI1MCwgOTIsIDI1LCA0LCAyNTAsIDc4LCAyNSwgNCwgMjM5LCAxNzksIDI1LCA0LCAyMzksIDEwMSwgMjUsIDQsIAotICAgIDIzOSwgMTU2LCAyNSwgNCwgMjM5LCAxNzgsIDI1LCA0LCAyMzksIDE2OSwgMjUsIDQsIDIzOSwgMTcwLCAyNSwgNCwgMjM5LCAKLSAgICAxMTcsIDI1LCA0LCAyMzksIDg0LCAyNSwgNCwgMjQ2LCAxOTMsIDI1LCA0LCAyNDUsIDIxOCwgMjUsIDQsIDI0NiwgNDYsIAotICAgIDI1LCA0LCAyNDYsIDE5MCwgMjUsIDQsIDI0NiwgMTI1LCAyNSwgNCwgMjQ2LCAxMzEsIDI1LCA0LCAyNDYsIDExLCAyNSwgNCwgCi0gICAgMjQ2LCAxMCwgMjUsIDQsIDI0NSwgMTg4LCAyNSwgNCwgMjQ1LCAxODQsIDI1LCA0LCAyNDUsIDE4NywgMjUsIDQsIDI0NSwgCi0gICAgMTg1LCAyNSwgNCwgMjQ1LCAxODYsIDI1LCA0LCAyNDYsIDEwMSwgMjUsIDQsIDI0NiwgODEsIDI1LCA0LCAyNDYsIDkxLCAKLSAgICAyNSwgNCwgMjQ2LCAxMDAsIDI1LCA0LCAyNDYsIDk1LCAyNSwgNCwgMjQ2LCA5NiwgMjUsIDQsIDI0NiwgODUsIDI1LCA0LCAKLSAgICAyNDYsIDcwLCAyNSwgNCwgMjI2LCAyNTEsIDI1LCA0LCAyMjYsIDE4NiwgMjUsIDQsIDIyNiwgMjIwLCAyNSwgNCwgMjI2LCAKLSAgICAyNTAsIDI1LCA0LCAyMjYsIDIzOCwgMjUsIDQsIDIyNiwgMjM5LCAyNSwgNCwgMjI2LCAyMDEsIDI1LCA0LCAyMjYsIDE4MCwgCi0gICAgMjUsIDQsIDI1MSwgMjA0LCAyNSwgNCwgMjUxLCAxMzYsIDI1LCA0LCAyNTEsIDE2OSwgMjUsIDQsIDI1MSwgMjAzLCAyNSwgCi0gICAgNCwgMjUxLCAxNzksIDI1LCA0LCAyNTEsIDE4MiwgMjUsIDQsIDI1MSwgMTUwLCAyNSwgNCwgMjUxLCAxMjUsIDI1LCA0LCAKLSAgICAyMzMsIDk3LCAyNSwgNCwgMjMzLCA3NSwgMjUsIDQsIDIzMywgODcsIDI1LCA0LCAyMzMsIDk2LCAyNSwgNCwgMjMzLCA4OSwgCi0gICAgMjUsIDQsIDIzMywgOTAsIDI1LCA0LCAyMzMsIDc5LCAyNSwgNCwgMjMzLCA3MSwgMjUsIDQsIDIyNiwgNDQsIDI1LCA0LCAKLSAgICAyMjYsIDI2LCAyNSwgNCwgMjI2LCAyOSwgMjUsIDQsIDIyNiwgNDMsIDI1LCA0LCAyMjYsIDM5LCAyNSwgNCwgMjI2LCA0MCwgCi0gICAgMjUsIDQsIDIyNiwgMjgsIDI1LCA0LCAyMjYsIDI0LCAyNSwgNCwgMjI1LCAxODYsIDI1LCA0LCAyMjUsIDE3OCwgMjUsIDQsIAotICAgIDIyNSwgMTgyLCAyNSwgNCwgMjI1LCAxODUsIDI1LCA0LCAyMjUsIDE4MywgMjUsIDQsIDIyNSwgMTg0LCAyNSwgNCwgMjI1LCAKLSAgICAxODAsIDI1LCA0LCAyMjUsIDE3OSwgMjUsIDQsIDI0NywgMTI5LCAyNSwgNCwgMjQ2LCAyMTksIDI1LCA0LCAyNDcsIDcwLCAKLSAgICAyNSwgNCwgMjQ3LCAxMjgsIDI1LCA0LCAyNDcsIDkyLCAyNSwgNCwgMjQ3LCA5NywgMjUsIDQsIDI0NywgNywgMjUsIDQsIAotICAgIDI0NiwgMjA2LCAyNSwgNCwgMjEzLCAyNSwgNCwgMjMyLCAxNzMsIDI1LCA0LCAyMzMsIDY5LCAyNSwgNCwgMjMzLCAyNDEsIAotICAgIDI1LCA0LCAyMzMsIDE0NCwgMjUsIDQsIDIzMywgMTUxLCAyNSwgNCwgMjMzLCA0LCAyNSwgNCwgMjMyLCAxNTYsIDI1LCA0LCAKLSAgICAyMzEsIDQyLCAyNSwgNCwgMjM2LCAxMCwgMjUsIDQsIDI0NiwgMjAwLCAyNSwgMzYsIDI0NiwgMTI0LCA3NiwgMjUsIDIzMCwgCi0gICAgMjA2LCA3NiwgMjUsIDIyNCwgOTEsIDI1LCAyNDYsIDIxOCwgMjI4LCAzOCwgMjUsIDI1MSwgNTQsIDI1LCAyMjksIDE4NiwgCi0gICAgMjUsIDI1MSwgNjEsIDI1LCAyMzIsIDIxMSwgMjUxLCA2MSwgMjUsIDIzMiwgNjksIDc2LCAyNSwgMjMzLCAxOTIsIDIyOSwgCi0gICAgMTczLCAyNSwgMjEsIDExOCwgMjUsIDIxLCAxMTMsIDI1LCAyMSwgMTY2LCAyNSwgMjEsIDE1OCwgMjUsIDIxLCAxNzMsIDI1LCAKLSAgICAyMSwgMTgzLCAyNSwgMjEsIDE5NCwgMjUsIDIxLCAxODcsIDI1LCAyMSwgMTkyLCAyNSwgNjUsIDIyNywgMjMsIDI1LCA2NSwgCi0gICAgMjI1LCAyMTYsIDI1LCA2NSwgMjI2LCAyMDcsIDI1LCA2NSwgMjQ2LCAyNDUsIDI1LCA2NSwgMjQ3LCA2MywgMjUsIDY1LCAKLSAgICAyMjgsIDIwNiwgMjUsIDY1LCAyMjksIDE1OSwgMjUsIDY1LCAyNDgsIDEyLCAyNSwgNjUsIDIzNSwgNTcsIDI1LCA2NSwgCi0gICAgMjQ0LCAxMzUsIDI1LCA2NSwgMjI3LCAyNCwgMjI2LCAxOTQsIDI1LCA0LCAyMzAsIDIxMCwgMjM2LCAxOSwgMjUsIDQsIAotICAgIDIzNiwgMTUsIDI1LCA0LCAyMzYsIDE2LCAyNSwgNCwgMjM2LCAxNywgMjUsIDQsIDIzMCwgMjEwLCAyNTIsIDYwLCAyNSwgNCwgCi0gICAgMjUyLCA1NywgMjUsIDQsIDI1MiwgNTgsIDI1LCA0LCAyNTIsIDU5LCAyNSwgNCwgMjMwLCAyMTAsIDI0NiwgMjA2LCAyNSwgCi0gICAgNCwgMjQ2LCAyMDIsIDI1LCA0LCAyNDYsIDIwMywgMjUsIDQsIDI0NiwgMjA0LCAyNSwgNCwgMjMwLCAyMTAsIDIzMiwgMTU2LCAKLSAgICAyNSwgNCwgMjMyLCAxNTIsIDI1LCA0LCAyMzIsIDE1MywgMjUsIDQsIDIzMiwgMTU0LCAyNSwgMjI2LCAxMTksIDE2NSwgCi0gICAgMjIzLCAxODYsIDI1LCAyMjYsIDExOSwgMTY1LCAyNTAsIDM2LCAyNSwgMjI2LCAxMTksIDE2NSwgMjMxLCAxNDMsIDI1LCAKLSAgICAyMjYsIDExOSwgMTY1LCAyMjksIDYzLCAyMzEsIDE0MywgMjUsIDIyNiwgMTE5LCAxNjUsIDI0OSwgMjM4LCAyNSwgMjI2LCAKLSAgICAxMTksIDE2NSwgMjM4LCAyNDIsIDI1LCAyMjYsIDExOSwgMTY1LCAyNTEsIDE1OCwgMjUsIDIyNiwgMTE5LCAxNjUsIDI0NSwgCi0gICAgNzMsIDI1LCAyMjYsIDExOSwgMTY1LCAyNTAsIDM1LCAyNSwgMjI2LCAxMTksIDE2NSwgMjM4LCA4OSwgMTMxLCAxLCA1NywgCi0gICAgMTMxLCAxLCA3MiwgMTMxLCAxLCA3NCwgMTMxLCAxLCA3MywgMTMxLCAxLCA2NiwgMTMxLCAxLCAxOTYsIDEzMSwgMSwgMjQ2LCAKLSAgICAxOTMsIDEzMSwgMSwgMTc3LCAxMzEsIDEsIDI0NiwgMTMxLCAxMzEsIDEsIDI0NiwgNDYsIDEzMSwgMSwgMjQ2LCAxMSwgCi0gICAgMTMxLCAxLCAyNDUsIDIxOCwgMTMxLCAxLCAyNDUsIDE4OSwgMTMxLCAxLCAxNTQsIDEzMSwgMSwgMjQ1LCAxMjEsIDEzMSwgCi0gICAgMSwgMjQ1LCA3NSwgMTMxLCAxLCAyNDQsIDIyNywgMTMxLCAxLCAyNDQsIDE0NSwgMTMxLCAxLCAyNDQsIDEyOCwgMTMxLCAxLCAKLSAgICAyMzgsIDQzLCAxMzEsIDEsIDIzNywgMjQzLCAxMzEsIDEsIDIzNywgMTkzLCAxMzEsIDEsIDIzNywgMTQzLCAxMzEsIDEsIAotICAgIDIzNywgMTEwLCAxMzEsIDEsIDIzNywgODksIDEzMSwgMSwgMTk4LCAxMzEsIDEsIDIzNiwgMjM1LCAxMzEsIDEsIDIzNiwgCi0gICAgMTU3LCAxMzEsIDEsIDIzNiwgMTAzLCAxMzEsIDEsIDIzNiwgNjYsIDEzMSwgMSwgMjM2LCAxLCAxMzEsIDEsIDI0NCwgMjQ5LCAKLSAgICAxMzEsIDEsIDIzNSwgMjQzLCAxMzEsIDEsIDIzNSwgMTYyLCAxMzEsIDEsIDIzNSwgODksIDEzMSwgMSwgMjM1LCA2LCAxMzEsIAotICAgIDEsIDIzNCwgMjA2LCAxMzEsIDEsIDIzNCwgMTc5LCAxMzEsIDEsIDIzMiwgODMsIDEzMSwgMSwgMjMyLCA3MSwgMTMxLCAxLCAKLSAgICAyMzIsIDY2LCAxMzEsIDEsIDIzMiwgNjAsIDEzMSwgMSwgMjMyLCA0OSwgMTMxLCAxLCAyMzIsIDQ3LCAxMzEsIDEsIDIzMSwgCi0gICAgMzEsIDEzMSwgMSwgMTkzLCAxMzEsIDEsIDIzMCwgMjEzLCAxMzEsIDEsIDIyOSwgMTUsIDEzMSwgMSwgMjI4LCAxNjksIAotICAgIDEzMSwgMSwgMjI4LCA2LCAxMzEsIDEsIDIyNywgMjAyLCAxMzEsIDEsIDI1MCwgMTg5LCAxMzEsIDEsIDIyNywgMTA3LCAKLSAgICAxMzEsIDEsIDI1MCwgNzcsIDEzMSwgMSwgMjI3LCA0NCwgMTMxLCAxLCAyNTAsIDQsIDEzMSwgMSwgMjI2LCAxNzUsIDEzMSwgCi0gICAgMSwgMjQ5LCAxNjEsIDEzMSwgMSwgMjQ4LCAxMDcsIDEzMSwgMSwgMjQ4LCA4MSwgMTMxLCAxLCAyNDksIDE3MCwgMTMxLCAxLCAKLSAgICAyMjYsIDEzOCwgMTMxLCAxLCAyMjYsIDEzNywgMTMxLCAxLCAyMjYsIDEyOSwgMTMxLCAxLCAyMjYsIDEyOCwgMTMxLCAxLCAKLSAgICAyMjYsIDEyNywgMTMxLCAxLCAyMjYsIDEyNiwgMTMxLCAxLCAyMjYsIDQ0LCAxMzEsIDEsIDIyNiwgNDAsIDEzMSwgMSwgCi0gICAgMjI2LCAyOSwgMTMxLCAxLCAyMjYsIDI4LCAxMzEsIDEsIDIyNiwgMjYsIDEzMSwgMSwgMjI2LCAyNSwgMTMxLCAxLCAyMjQsIAotICAgIDE3MywgMTMxLCAxLCAyMjQsIDE0MSwgMTMxLCAxLCAyMjQsIDExOCwgMTMxLCAxLCAyMjQsIDEwNSwgMTMxLCAxLCAyMjQsIAotICAgIDgzLCAxMzEsIDEsIDIyNCwgNzcsIDEzMSwgMSwgMTkxLCAxMzEsIDEsIDIyMywgMjI4LCAxMzEsIDEsIDIyMywgMjAyLCAKLSAgICAxMzEsIDEsIDIyMywgMTgzLCAxMzEsIDEsIDIyMywgMTU4LCAxMzEsIDEsIDIyMywgMTM1LCAxNiwgMTcsIDcyLCAxNiwgMTcsIAotICAgIDI1NSwgNjEsIDE2LCAxNywgNzQsIDE2LCAxNywgMjQwLCA0NywgMTYsIDE3LCA3MywgMTYsIDE3LCAyMzQsIDUyLCAxNiwgCi0gICAgMTcsIDIyNCwgMjQsIDIzNCwgNTIsIDE2LCAxNywgNjAsIDI0OCwgMzUsIDE2LCAxNywgNjAsIDc0LCAxNiwgMTcsIDU3LCAKLSAgICAxNiwgMTcsIDI1NSwgNjMsIDE2LCAxNywgMjI0LCAxNDEsIDE2LCAxNywgMTI3LCAyMjQsIDE0MSwgMTYsIDE3LCAyMjQsIAotICAgIDExOCwgMTYsIDE3LCAxMjcsIDIyNCwgMTE4LCAxNiwgMTcsIDIyNCwgMTEzLCAxNiwgMTcsIDEyNywgMjI0LCAxMTMsIDE2LCAKLSAgICAxNywgMjI0LCAxMDUsIDE2LCAxNywgMTI3LCAyMjQsIDEwNSwgMTYsIDE3LCAyMjQsIDk4LCAxNiwgMTcsIDEyNywgMjI0LCAKLSAgICA5OCwgMTYsIDE3LCAyMzUsIDIyNiwgMjI0LCA5OCwgMTYsIDE3LCAyMjQsIDE3MywgMTYsIDE3LCAxMjcsIDIyNCwgMTczLCAKLSAgICAxNiwgMTcsIDIyNCwgMTcyLCAxNiwgMTcsIDEyNywgMjI0LCAxNzIsIDE2LCAxNywgMjM1LCAyMjYsIDIyNCwgMTcyLCAxNiwgCi0gICAgMTcsIDI1NCwgMjUzLCAxNiwgMTcsIDIyNCwgMjQsIDIyNCwgMTc0LCAxNiwgMTcsIDI0NiwgMTYsIDIyOCwgMzgsIDE2LCAKLSAgICAxNywgMzUsIDE1NSwgMTYsIDE3LCAzNSwgMjQ1LCAyMzYsIDE2LCAxNywgMzUsIDI1MiwgMTI2LCAxMzIsIDIzMSwgMTM5LCAKLSAgICAxNiwgMTcsIDM1LCAyMjYsIDEwNiwgMTMyLCAyMzEsIDEzOSwgMTYsIDE3LCAzNSwgNDEsIDEzMiwgMjMxLCAxMzksIDE2LCAKLSAgICAxNywgMzUsIDIzMSwgMTM5LCAxNiwgMTcsIDM1LCA0NywgMTU1LCAxNiwgMTcsIDM1LCA0NywgMjI5LCA2MywgNjEsIDIyOCwgCi0gICAgMTAsIDE2LCAxNywgMzUsIDIzNiwgMTU0LCAyNDksIDE0MCwgMTYsIDE3LCAzNSwgMjI5LCA2MywgMTY5LCA4MiwgMTYsIDE3LCAKLSAgICAzNSwgMjMzLCAxMCwgMTYsIDE3LCAzNSwgMTAzLCAyMjcsIDk2LCAxNiwgMTcsIDI0NywgMjM5LCAxNiwgMTcsIDI0MCwgMTYsIAotICAgIDE2LCAxNywgMjM0LCA2MSwgMTYsIDE3LCAyNTQsIDE5MCwgMTYsIDE3LCAyMzMsIDE1MSwgMTYsIDE3LCAyMzMsIDIzOSwgCi0gICAgMTYsIDE3LCAyMzMsIDY5LCAxNiwgMTcsIDIzMywgNDEsIDE2LCAxNywgMjMzLCA0LCAxNiwgMTcsIDIzMiwgMjQ0LCAxNiwgCi0gICAgMTcsIDIyNCwgMjQsIDIzMiwgMjQ0LCAxNiwgMTcsIDYwLCAyNDUsIDEwOSwgMTYsIDE3LCA2MCwgMjQ1LCA3NSwgMTYsIDE3LCAKLSAgICAyMTMsIDE2LCAxNywgMjMzLCAyNDEsIDE2LCAxNywgMjMyLCAxNTQsIDE2LCAxNywgMTI3LCAyMzIsIDE1NCwgMTYsIDE3LCAKLSAgICAyMzIsIDE1MiwgMTYsIDE3LCAxMjcsIDIzMiwgMTUyLCAxNiwgMTcsIDIzMiwgMTUxLCAxNiwgMTcsIDEyNywgMjMyLCAxNTEsIAotICAgIDE2LCAxNywgMjMyLCAxNDksIDE2LCAxNywgMTI3LCAyMzIsIDE0OSwgMTYsIDE3LCAyMzIsIDE0OCwgMTYsIDE3LCAxMjcsIAotICAgIDIzMiwgMTQ4LCAxNiwgMTcsIDIzMiwgMTU2LCAxNiwgMTcsIDEyNywgMjMyLCAxNTYsIDE2LCAxNywgMjMyLCAxNTUsIDE2LCAKLSAgICAxNywgMTI3LCAyMzIsIDE1NSwgMTYsIDE3LCAyMjQsIDI0LCAyMzIsIDE1NSwgMTYsIDE3LCAyMzMsIDI0NCwgMTYsIDE3LCAKLSAgICAxMjcsIDIzMywgMjQ0LCAxNiwgMTcsIDYwLCAyMTIsIDE2LCAxNywgMjI3LCA0NCwgMTYsIDE3LCAyMjcsIDEwMywgMTYsIAotICAgIDE3LCAyMjYsIDE3NSwgMTYsIDE3LCAyMjYsIDE2NSwgMTYsIDE3LCA5NiwgMTYsIDE3LCAyMjYsIDEwOCwgMTYsIDE3LCAKLSAgICAyMjQsIDI0LCAyMjYsIDEwOCwgMTYsIDE3LCA2MCwgMjUwLCA2NywgMTYsIDE3LCA2MCwgMjUwLCA0LCAxNiwgMTcsIDIyNywgCi0gICAgMTA3LCAxNiwgMTcsIDIyNywgMTA0LCAxNiwgMTcsIDIyNSwgMjIwLCAxNiwgMTcsIDEyNywgMjI1LCAyMjAsIDE2LCAxNywgCi0gICAgMjI1LCAyMDUsIDE2LCAxNywgMTI3LCAyMjUsIDIwNSwgMTYsIDE3LCAyMjUsIDIwNCwgMTYsIDE3LCAxMjcsIDIyNSwgMjA0LCAKLSAgICAxNiwgMTcsIDExMywgMTYsIDE3LCAxMjcsIDExMywgMTYsIDE3LCAyMjUsIDIwMSwgMTYsIDE3LCAxMjcsIDIyNSwgMjAxLCAKLSAgICAxNiwgMTcsIDIyNSwgMjIyLCAxNiwgMTcsIDEyNywgMjI1LCAyMjIsIDE2LCAxNywgMjI1LCAyMjEsIDE2LCAxNywgMTI3LCAKLSAgICAyMjUsIDIyMSwgMTYsIDE3LCAyMzUsIDIyNiwgMjI1LCAyMjEsIDE2LCAxNywgMjI3LCAxMDksIDE2LCAxNywgMjI2LCAxNywgCi0gICAgMTYsIDE3LCAyMjYsIDYsIDE2LCAxNywgMjI2LCA1LCAxNiwgMTcsIDIyNiwgMjAsIDE2LCAxNywgMjM5LCAzLCAxNiwgMTcsIAotICAgIDIzOSwgNjksIDE2LCAxNywgMjM4LCAxOTksIDE2LCAxNywgMjM4LCAxOTEsIDE2LCAxNywgMjM4LCAxNTAsIDE2LCAxNywgCi0gICAgMjM4LCAxMzksIDE2LCAxNywgMjI0LCAyNCwgMjM4LCAxMzksIDE2LCAxNywgMTc3LCAxNiwgMTcsIDIzOSwgNzIsIDE2LCAKLSAgICAxNywgMjM4LCA3NiwgMTYsIDE3LCAxMjcsIDIzOCwgNzYsIDE2LCAxNywgMjM4LCA3NCwgMTYsIDE3LCAxMjcsIDIzOCwgNzQsIAotICAgIDE2LCAxNywgMjM4LCA3MywgMTYsIDE3LCAxMjcsIDIzOCwgNzMsIDE2LCAxNywgMjM4LCA3MiwgMTYsIDE3LCAxMjcsIDIzOCwgCi0gICAgNzIsIDE2LCAxNywgMjM4LCA3MSwgMTYsIDE3LCAxMjcsIDIzOCwgNzEsIDE2LCAxNywgMjM4LCA3OCwgMTYsIDE3LCAxMjcsIAotICAgIDIzOCwgNzgsIDE2LCAxNywgMjM4LCA3NywgMTYsIDE3LCAxMjcsIDIzOCwgNzcsIDE2LCAxNywgMjM1LCAyMjYsIDIzOCwgCi0gICAgNzcsIDE2LCAxNywgMjM5LCA3NiwgMTYsIDE3LCAyMzgsIDc5LCAxNiwgMTcsIDIyOCwgMTUxLCAyMzgsIDI1MywgMTYsIDE3LCAKLSAgICAyMjgsIDE1MSwgMjM4LCAxOTIsIDE2LCAxNywgMjI4LCAxNTEsIDIzOCwgMTQ3LCAxNiwgMTcsIDIyOCwgMTUxLCAyMzksIAotICAgIDU4LCAxNiwgMTcsIDI1MSwgMjMxLCAxNiwgMTcsIDI1MiwgMzcsIDE2LCAxNywgMjUxLCAxMTgsIDE2LCAxNywgMjUxLCAKLSAgICAxMTAsIDE2LCAxNywgMjUxLCA2OCwgMTYsIDE3LCAyNTEsIDE3LCAxNiwgMTcsIDIyNCwgMjQsIDI1MSwgMTcsIDE2LCAxNywgCi0gICAgMjUyLCAzOSwgMTYsIDE3LCAyNTIsIDM4LCAxNiwgMTcsIDI1MCwgMjA4LCAxNiwgMTcsIDEyNywgMjUwLCAyMDgsIDE2LCAKLSAgICAxNywgMjUwLCAyMDYsIDE2LCAxNywgMTI3LCAyNTAsIDIwNiwgMTYsIDE3LCAyNTAsIDIwNSwgMTYsIDE3LCAxMjcsIDI1MCwgCi0gICAgMjA1LCAxNiwgMTcsIDI1MCwgMjA0LCAxNiwgMTcsIDEyNywgMjUwLCAyMDQsIDE2LCAxNywgMjUwLCAyMDMsIDE2LCAxNywgCi0gICAgMTI3LCAyNTAsIDIwMywgMTYsIDE3LCAyNTAsIDIxMCwgMTYsIDE3LCAxMjcsIDI1MCwgMjEwLCAxNiwgMTcsIDI1MCwgMjA5LCAKLSAgICAxNiwgMTcsIDEyNywgMjUwLCAyMDksIDE2LCAxNywgMjM1LCAyMjYsIDI1MCwgMjA5LCAxNiwgMTcsIDI1MiwgNDQsIDE2LCAKLSAgICAxNywgMjMwLCAyMzIsIDIyNiwgMjUzLCAxNiwgMTcsIDIzNiwgMjM1LCAxNiwgMTcsIDIzNywgNjUsIDE2LCAxNywgMjM2LCAKLSAgICAxNTcsIDE2LCAxNywgMjM2LCAxMzcsIDE2LCAxNywgMjM2LCAxMDMsIDE2LCAxNywgMjM2LCA4NiwgMTYsIDE3LCAyMjQsIAotICAgIDI0LCAyMzYsIDg2LCAxNiwgMTcsIDE5OCwgMTYsIDE3LCAyMzcsIDY2LCAxNiwgMTcsIDIzNiwgMTcsIDE2LCAxNywgMTI3LCAKLSAgICAyMzYsIDE3LCAxNiwgMTcsIDIzNiwgMTUsIDE2LCAxNywgMTI3LCAyMzYsIDE1LCAxNiwgMTcsIDIzNiwgMTQsIDE2LCAxNywgCi0gICAgMTI3LCAyMzYsIDE0LCAxNiwgMTcsIDIzNiwgMTMsIDE2LCAxNywgMTI3LCAyMzYsIDEzLCAxNiwgMTcsIDIzNiwgMTIsIDE2LCAKLSAgICAxNywgMTI3LCAyMzYsIDEyLCAxNiwgMTcsIDIzNiwgMTksIDE2LCAxNywgMTI3LCAyMzYsIDE5LCAxNiwgMTcsIDIzNiwgMTgsIAotICAgIDE2LCAxNywgMTI3LCAyMzYsIDE4LCAxNiwgMTcsIDIzNSwgMjI2LCAyMzYsIDE4LCAxNiwgMTcsIDE4NSwgMTYsIDE3LCAKLSAgICAxMjcsIDE4NSwgMTYsIDE3LCAyMzYsIDE2MCwgMTYsIDE3LCAyNTQsIDYxLCAxODUsIDE2LCAxNywgMjMwLCAyMzIsIDE4NSwgCi0gICAgMTYsIDE3LCAyMzUsIDE2MiwgMTYsIDE3LCAyMzUsIDI1MywgMTYsIDE3LCAyMzUsIDg5LCAxNiwgMTcsIDIzNSwgNjgsIDE2LCAKLSAgICAxNywgMjM1LCA2LCAxNiwgMTcsIDIzNCwgMjUzLCAxNiwgMTcsIDIyNCwgMjQsIDIzNCwgMjUzLCAxNiwgMTcsIDIzNiwgMSwgCi0gICAgMTYsIDE3LCAyMzUsIDI1NCwgMTYsIDE3LCAyMzQsIDE3NSwgMTYsIDE3LCAxMjcsIDIzNCwgMTc1LCAxNiwgMTcsIDIzNCwgCi0gICAgMTc3LCAxNiwgMTcsIDEyNywgMjM0LCAxNzcsIDE2LCAxNywgMjM0LCAxNzYsIDE2LCAxNywgMTI3LCAyMzQsIDE3NiwgMTYsIAotICAgIDE3LCAyMzUsIDIyNiwgMjM0LCAxNzYsIDE2LCAxNywgMTk5LCAxNiwgMTcsIDYwLCAyMzUsIDEzOSwgMTYsIDE3LCAyMzUsIAotICAgIDk0LCAxNiwgMTcsIDIzNywgMjQzLCAxNiwgMTcsIDIzOCwgNDEsIDE2LCAxNywgMjM3LCAxOTMsIDE2LCAxNywgMjM3LCAKLSAgICAxODIsIDE2LCAxNywgMjM3LCAxNDMsIDE2LCAxNywgMjM3LCAxMjUsIDE2LCAxNywgMjI0LCAyNCwgMjM3LCAxMjUsIDE2LCAKLSAgICAxNywgMjM4LCA0MywgMTYsIDE3LCAyMzgsIDQyLCAxNiwgMTcsIDIzNywgODYsIDE2LCAxNywgMTI3LCAyMzcsIDg2LCAxNiwgCi0gICAgMTcsIDIzNywgODUsIDE2LCAxNywgMTI3LCAyMzcsIDg1LCAxNiwgMTcsIDIzNywgODQsIDE2LCAxNywgMTI3LCAyMzcsIDg0LCAKLSAgICAxNiwgMTcsIDIzNywgODMsIDE2LCAxNywgMTI3LCAyMzcsIDgzLCAxNiwgMTcsIDIzNywgODIsIDE2LCAxNywgMTI3LCAyMzcsIAotICAgIDgyLCAxNiwgMTcsIDIzNywgODgsIDE2LCAxNywgMTI3LCAyMzcsIDg4LCAxNiwgMTcsIDIzNywgODcsIDE2LCAxNywgMTI3LCAKLSAgICAyMzcsIDg3LCAxNiwgMTcsIDE0OSwgMTYsIDE3LCAxMjcsIDE0OSwgMTYsIDE3LCAxMjQsIDE0OSwgMTYsIDE3LCAyMzAsIAotICAgIDIxMywgMTYsIDE3LCAyMzEsIDI3LCAxNiwgMTcsIDIyOSwgMTUsIDE2LCAxNywgMjI5LCAwLCAxNiwgMTcsIDIyOCwgMTY5LCAKLSAgICAxNiwgMTcsIDIyOCwgMTU5LCAxNiwgMTcsIDIyNCwgMjQsIDIyOCwgMTU5LCAxNiwgMTcsIDIzMSwgMzEsIDE2LCAxNywgCi0gICAgMjMxLCAyOSwgMTYsIDE3LCAyMjcsIDE5NiwgMTYsIDE3LCAxMjcsIDIyNywgMTk2LCAxNiwgMTcsIDIyNywgMTkzLCAxNiwgCi0gICAgMTcsIDEyNywgMjI3LCAxOTMsIDE2LCAxNywgMjI3LCAxOTIsIDE2LCAxNywgMTI3LCAyMjcsIDE5MiwgMTYsIDE3LCAyMjcsIAotICAgIDE5MSwgMTYsIDE3LCAxMjcsIDIyNywgMTkxLCAxNiwgMTcsIDIyNywgMTkwLCAxNiwgMTcsIDEyNywgMjI3LCAxOTAsIDE2LCAKLSAgICAxNywgMjI3LCAyMDAsIDE2LCAxNywgMTI3LCAyMjcsIDIwMCwgMTYsIDE3LCAyMjcsIDE5OSwgMTYsIDE3LCAxMjcsIDIyNywgCi0gICAgMTk5LCAxNiwgMTcsIDIzNSwgMjI2LCAyMjcsIDE5OSwgMTYsIDE3LCAxOTMsIDE2LCAxNywgMjU0LCA2MSwgMTkzLCAxNiwgCi0gICAgMTcsIDIyNywgMjAxLCAxNiwgMTcsIDI1MiwgMTQ3LCAxOTMsIDE2LCAxNywgMjM2LCA4MywgMjI4LCAyMDMsIDE2LCAxNywgCi0gICAgMjM1LCAyMjYsIDIyOCwgMTk4LCAxNiwgMTcsIDIzNSwgMjI2LCAyMzEsIDMzLCAxNiwgMTcsIDIzNSwgMjI2LCAyMjgsIAotICAgIDEyMSwgMTYsIDE3LCAyMzUsIDIyNiwgMjI4LCA4LCAxNiwgMTcsIDIzNSwgMjI2LCAyMjgsIDE5NywgMTYsIDE3LCAyMzUsIAotICAgIDIyNiwgMjMwLCAyMTUsIDE2LCAxNywgMjI5LCAxMTQsIDE2LCAxNywgMjI5LCA5MCwgMTYsIDE3LCAyMjksIDg1LCAxNiwgCi0gICAgMTcsIDIyOSwgNzEsIDE2LCAxNywgMjI5LCA2NiwgMTYsIDE3LCAyMjksIDE0NiwgMTYsIDE3LCAyMjksIDE0MiwgMTYsIDE3LCAKLSAgICAyMjksIDI4LCAxNiwgMTcsIDEyNywgMjI5LCAyOCwgMTYsIDE3LCAyMjksIDI3LCAxNiwgMTcsIDEyNywgMjI5LCAyNywgMTYsIAotICAgIDE3LCAyMjksIDI2LCAxNiwgMTcsIDEyNywgMjI5LCAyNiwgMTYsIDE3LCAyMjksIDI1LCAxNiwgMTcsIDEyNywgMjI5LCAyNSwgCi0gICAgMTYsIDE3LCAyMjksIDI0LCAxNiwgMTcsIDEyNywgMjI5LCAyNCwgMTYsIDE3LCAyMjksIDMwLCAxNiwgMTcsIDEyNywgMjI5LCAKLSAgICAzMCwgMTYsIDE3LCAyMjksIDI5LCAxNiwgMTcsIDEyNywgMjI5LCAyOSwgMTYsIDE3LCAyMjksIDE0OCwgMTYsIDE3LCAyMjMsIAotICAgIDIyOCwgMTYsIDE3LCAyMjQsIDE5LCAxNiwgMTcsIDIyMywgMjAyLCAxNiwgMTcsIDIyMywgMTk0LCAxNiwgMTcsIDIyMywgCi0gICAgMTgzLCAxNiwgMTcsIDIyMywgMTcyLCAxNiwgMTcsIDIyNCwgMjQsIDIyMywgMTcyLCAxNiwgMTcsIDE5MSwgMTYsIDE3LCAKLSAgICAyMjQsIDIxLCAxNiwgMTcsIDIyMywgMTMyLCAxNiwgMTcsIDEyNywgMjIzLCAxMzIsIDE2LCAxNywgMjIzLCAxMzEsIDE2LCAKLSAgICAxNywgMTI3LCAyMjMsIDEzMSwgMTYsIDE3LCAyMjMsIDEzMCwgMTYsIDE3LCAxMjcsIDIyMywgMTMwLCAxNiwgMTcsIDIyMywgCi0gICAgMTI5LCAxNiwgMTcsIDEyNywgMjIzLCAxMjksIDE2LCAxNywgMjIzLCAxMjgsIDE2LCAxNywgMTI3LCAyMjMsIDEyOCwgMTYsIAotICAgIDE3LCAyMjMsIDEzNCwgMTYsIDE3LCAxMjcsIDIyMywgMTM0LCAxNiwgMTcsIDIyMywgMTMzLCAxNiwgMTcsIDEyNywgMjIzLCAKLSAgICAxMzMsIDE2LCAxNywgMjM1LCAyMjYsIDIyMywgMTMzLCAxNiwgMTcsIDIyNCwgMjUsIDE2LCAxNywgMjUyLCAxNzksIDIyNCwgCi0gICAgMjUsIDE2LCAxNywgMTI3LCAyMjQsIDI1LCAxNiwgMTcsIDIzMCwgMjMyLCAyMjMsIDIwMiwgMTYsIDE3LCAyMzEsIDI0NCwgCi0gICAgMTYsIDE3LCAyMzIsIDI2LCAyMzEsIDI0NCwgMTYsIDE3LCAxMjcsIDIzNywgMjQzLCAxNiwgMTcsIDIzMiwgMjEsIDE2LCAKLSAgICAxNywgMjMxLCAxODAsIDE2LCAxNywgMjMxLCAxNDQsIDE2LCAxNywgMjMxLCAxMjIsIDE2LCAxNywgMjMxLCAxMTQsIDE2LCAKLSAgICAxNywgMTI3LCAyMzcsIDE0MywgMTYsIDE3LCAyMDgsIDE2LCAxNywgMjMyLCAyMiwgMTYsIDE3LCAxMjcsIDIzOCwgNDMsIAotICAgIDE2LCAxNywgMjMxLCA0NSwgMTYsIDE3LCAxMjcsIDIzMSwgNDUsIDE2LCAxNywgMTQ2LCAxNiwgMTcsIDEyNywgMTQ2LCAxNiwgCi0gICAgMTcsIDEyNCwgMTQ2LCAxNiwgMTcsIDI0NywgOTcsIDE2LCAxNywgMjQ3LCAxMjYsIDE2LCAxNywgMjQ3LCA3MCwgMTYsIDE3LCAKLSAgICAyNDcsIDU3LCAxNiwgMTcsIDI0NywgNywgMTYsIDE3LCAyNDcsIDMsIDE2LCAxNywgMjQ3LCAxMjksIDE2LCAxNywgMjQ3LCAKLSAgICAxMjgsIDE2LCAxNywgMjQ2LCAyMDUsIDE2LCAxNywgMTI3LCAyNDYsIDIwNSwgMTYsIDE3LCAyNDcsIDEzMCwgMTYsIDE3LCAKLSAgICAyMjYsIDIzOSwgMTYsIDE3LCAyMzYsIDMsIDIyNiwgMjM5LCAxNiwgMTcsIDIyNiwgMjIwLCAxNiwgMTcsIDIzNiwgMywgCi0gICAgMjI2LCAyMjAsIDE2LCAxNywgMjI2LCAyMTYsIDE2LCAxNywgMjM2LCAzLCAyMjYsIDIxNiwgMTYsIDE3LCAyMjYsIDIwMSwgCi0gICAgMTYsIDE3LCAyMjYsIDE5OCwgMTYsIDE3LCAyMjYsIDI1MSwgMTYsIDE3LCAyMjYsIDI1MCwgMTYsIDE3LCAyMjYsIDE3OSwgCi0gICAgMTYsIDE3LCAxMjcsIDIyNiwgMTc5LCAxNiwgMTcsIDIyNiwgMjUzLCAxNiwgMTcsIDIyNiwgOSwgMTYsIDE3LCAyMjYsIDgsIAotICAgIDE2LCAxNywgMjI2LCA3LCAxNiwgMTcsIDIyNiwgMTAsIDE2LCAxNywgMjI2LCAxMSwgMTYsIDE3LCAyMjUsIDE5OSwgMTYsIAotICAgIDE3LCAyMjUsIDE5OCwgMTYsIDE3LCAyMjUsIDE5NywgMTYsIDE3LCAyMjUsIDIwMCwgMTYsIDE3LCAyMzQsIDE5MywgMjQ1LCAKLSAgICAxMjEsIDE2LCAxNywgMjM0LCAxOTMsIDI0NSwgNzUsIDE2LCAxNywgMjM0LCAxOTMsIDI0NSwgNjEsIDE2LCAxNywgMjM0LCAKLSAgICAxOTMsIDI0NCwgMjI3LCAxNiwgMTcsIDIzNCwgMTkzLCAyNDQsIDIxOCwgMTYsIDE3LCAyMzQsIDE5MywgMTU0LCAxNiwgMTcsIAotICAgIDIzNCwgMTkzLCAyNDUsIDE2NywgMTYsIDE3LCAyMzQsIDE5MywgMjEyLCAxNiwgMTcsIDIzNCwgMTkyLCAyMTIsIDE2LCAxNywgCi0gICAgMjQ1LCA1NSwgMTYsIDE3LCAyMzIsIDEzNCwgMTYsIDE3LCAyMzIsIDEwNCwgMTYsIDE3LCAyMzIsIDk5LCAxNiwgMTcsIAotICAgIDIzMiwgOTUsIDE2LCAxNywgMjMyLCA5MCwgMTYsIDE3LCAyMzIsIDEzOCwgMTYsIDE3LCAyMzIsIDEzNywgMTYsIDE3LCAKLSAgICAyMzIsIDEzOSwgMTYsIDE3LCAyMjYsIDEzNCwgMTYsIDE3LCAyMjYsIDEzMiwgMTYsIDE3LCAyMjYsIDEzMSwgMTYsIDE3LCAKLSAgICAyMjYsIDEzNSwgMTYsIDE3LCAxMjcsIDIzMSwgMjQ0LCAxNiwgMTcsIDEyNywgMjMxLCAxODAsIDE2LCAxNywgMTI3LCAyMzEsIAotICAgIDEyMiwgMTYsIDE3LCAxMjcsIDIwOCwgMTYsIDE3LCAyMzUsIDEzNSwgMTYsIDE3LCAyMzUsIDExNCwgMTYsIDE3LCAyMzUsIAotICAgIDExMCwgMTYsIDE3LCAyMzUsIDEwNywgMTYsIDE3LCAyMzUsIDEwMywgMTYsIDE3LCAyMzUsIDEzNywgMTYsIDE3LCAyMzUsIAotICAgIDEzNiwgMTYsIDE3LCAyMzUsIDEzOSwgMTYsIDE3LCAyMzUsIDE3LCAxNiwgMTcsIDIzMCwgMjMyLCAyMjksIDExNCwgMTYsIAotICAgIDE3LCAyMzAsIDIzMiwgMjI5LCA5MCwgMTYsIDE3LCAyMzAsIDIzMiwgMjI5LCA3MSwgMTYsIDE3LCAyMzAsIDIzMiwgMjI5LCAKLSAgICAxNDYsIDE2LCAxNywgMjI0LCA5NiwgMjI2LCAyMzksIDE2LCAxNywgMjI0LCA5NiwgMjI2LCAyMjAsIDE2LCAxNywgMjI0LCAKLSAgICA5NiwgMjI2LCAyMDEsIDE2LCAxNywgMjI0LCA5NiwgMjI2LCAyNTEsIDE2LCAxNywgMjI0LCA5NiwgMjI2LCAyNTMsIDE2LCAKLSAgICAxNywgMjM3LCAxOTksIDE2LCAxNywgMjM3LCAxOTgsIDE2LCAxNywgMjM3LCAxOTcsIDE2LCAxNywgMjM3LCAxOTYsIDE2LCAKLSAgICAxNywgMjM3LCAyMDUsIDE2LCAxNywgMjM3LCAyMDQsIDE2LCAxNywgMjM3LCAyMDYsIDE2LCAxNywgMjI2LCAyNTIsIDIyNiwgCi0gICAgMjM5LCAxNiwgMTcsIDIyNiwgMjUyLCAyMjYsIDIyMCwgMTYsIDE3LCAyMjYsIDI1MiwgMjI2LCAyMTYsIDE2LCAxNywgMjI2LCAKLSAgICAyNTIsIDIyNiwgMjAxLCAxNiwgMTcsIDIyNiwgMjUyLCAyMjYsIDE5OCwgMTYsIDE3LCAyMjYsIDI1MiwgMjI2LCAyNTEsIAotICAgIDE2LCAxNywgMjI2LCAyNTIsIDIyNiwgMjUwLCAxNiwgMTcsIDIyNiwgMjUyLCAyMjYsIDI1MywgMTYsIDE3LCAyNTQsIDI0MywgCi0gICAgMjU0LCAyNywgMTYsIDE3LCAyNTIsIDE0NywgNzIsIDE2LCAxNywgMjUyLCAxNDcsIDc0LCAxNiwgMTcsIDI1MiwgMTQ3LCAKLSAgICA3MywgMTYsIDE3LCAyNTIsIDE0NywgNTcsIDE2LCAxNywgMjUyLCAxNDcsIDIyNCwgMTQxLCAxNiwgMTcsIDI1MiwgMTQ3LCAKLSAgICAyMjQsIDExOCwgMTYsIDE3LCAyNTIsIDE0NywgMjI0LCAxMDUsIDE2LCAxNywgMjUyLCAxNDcsIDIyNCwgMTczLCAxNiwgMTcsIAotICAgIDI1MiwgMTQ3LCAyMzUsIDE2MiwgMTYsIDE3LCAyNTIsIDE0NywgMjM1LCA4OSwgMTYsIDE3LCAyNTIsIDE0NywgMjM1LCA2LCAKLSAgICAxNiwgMTcsIDI1MiwgMTQ3LCAyMzYsIDEsIDE2LCAxNywgMjUyLCAxNDcsIDIzOSwgMywgMTYsIDE3LCAyNTIsIDE0NywgCi0gICAgMjM4LCAxOTksIDE2LCAxNywgMjUyLCAxNDcsIDIzOCwgMTUwLCAxNiwgMTcsIDI1MiwgMTQ3LCAxNzcsIDE2LCAxNywgMjMwLCAKLSAgICAyMzIsIDI0NSwgMTIxLCAxNiwgMTcsIDIzMCwgMjMyLCAyNDUsIDc1LCAxNiwgMTcsIDIzMCwgMjMyLCAyNDQsIDIyNywgMTYsIAotICAgIDE3LCAyMzAsIDIzMiwgMTU0LCAxNiwgMTcsIDYwLCAyNDYsIDUyLCAxNiwgMTcsIDYwLCAyNDYsIDU0LCAxNiwgMTcsIDYwLCAKLSAgICAyNDYsIDU4LCAxNiwgMTcsIDYwLCAyNDYsIDU3LCAxNiwgMTcsIDYwLCAyNDYsIDU1LCAxNiwgMTcsIDYwLCAyNDYsIDY2LCAKLSAgICAxNiwgMTcsIDYwLCAyMzEsIDcwLCAxNiwgMTcsIDYwLCAyMzEsIDEyMiwgMTYsIDE3LCA2MCwgMjMxLCAyNDQsIDE2LCAxNywgCi0gICAgNjAsIDIzMSwgMjI5LCAxNiwgMTcsIDYwLCAyMzEsIDE4MCwgMTYsIDE3LCA2MCwgMjA4LCAxNiwgMTcsIDYwLCAyMjQsIDgzLCAKLSAgICAxNiwgMTcsIDYwLCAyMjQsIDEwNSwgMTYsIDE3LCA2MCwgMjI0LCAxNDEsIDE2LCAxNywgNjAsIDIyNCwgMTM4LCAxNiwgMTcsIAotICAgIDYwLCAyMjQsIDExOCwgMTYsIDE3LCA2MCwgMjI0LCAxNzMsIDE2LCAxNywgNjAsIDI0NCwgMTIxLCAxNiwgMTcsIDYwLCAKLSAgICAyNDQsIDEyMiwgMTYsIDE3LCA2MCwgMjQ0LCAxMjUsIDE2LCAxNywgNjAsIDI0NCwgMTI0LCAxNiwgMTcsIDYwLCAyNDQsIAotICAgIDEyMywgMTYsIDE3LCA2MCwgMjQ0LCAxMjcsIDE2LCAxNywgNjAsIDIyNiwgMTg2LCAxNiwgMTcsIDYwLCAyMjYsIDIwMSwgCi0gICAgMTYsIDE3LCA2MCwgMjI2LCAyMzksIDE2LCAxNywgNjAsIDIyNiwgMjM4LCAxNiwgMTcsIDYwLCAyMjYsIDIyMCwgMTYsIDE3LCAKLSAgICA2MCwgMjI2LCAyNTEsIDE2LCAxNywgNjAsIDIyNSwgMjUzLCAxNiwgMTcsIDYwLCAyMjYsIDUsIDE2LCAxNywgNjAsIDIyNiwgCi0gICAgMTcsIDE2LCAxNywgNjAsIDIyNiwgMTYsIDE2LCAxNywgNjAsIDIyNiwgNiwgMTYsIDE3LCA2MCwgMjI2LCAyMCwgMTYsIDE3LCAKLSAgICA2MCwgMjMyLCAxNzMsIDE2LCAxNywgNjAsIDIzMywgNCwgMTYsIDE3LCA2MCwgMjMzLCAxNTEsIDE2LCAxNywgNjAsIDIzMywgCi0gICAgMTQ0LCAxNiwgMTcsIDYwLCAyMzMsIDY5LCAxNiwgMTcsIDYwLCAyMTMsIDE2LCAxNywgNjAsIDIzMywgMjQ0LCAxNiwgMTcsIAotICAgIDYwLCAyNDUsIDIxOCwgMTYsIDE3LCA2MCwgMjQ2LCAxMSwgMTYsIDE3LCA2MCwgMjQ2LCAxMzEsIDE2LCAxNywgNjAsIDI0NiwgCi0gICAgMTI1LCAxNiwgMTcsIDYwLCAyNDYsIDQ2LCAxNiwgMTcsIDYwLCAyNDYsIDE5MywgMTYsIDE3LCA2MCwgMjM4LCAyMDQsIDE2LCAKLSAgICAxNywgNjAsIDIzOCwgMjA4LCAxNiwgMTcsIDYwLCAyMzgsIDIxNywgMTYsIDE3LCA2MCwgMjM4LCAyMTYsIDE2LCAxNywgNjAsIAotICAgIDIzOCwgMjEyLCAxNiwgMTcsIDYwLCAyMzgsIDIyNywgMTYsIDE3LCA2MCwgMjM4LCAxNjIsIDE2LCAxNywgNjAsIDIzOCwgCi0gICAgMTYzLCAxNiwgMTcsIDYwLCAyMzgsIDE2NiwgMTYsIDE3LCA2MCwgMjM4LCAxNjUsIDE2LCAxNywgNjAsIDIzOCwgMTY0LCAKLSAgICAxNiwgMTcsIDYwLCAyMzgsIDE2NywgMTYsIDE3LCA2MCwgMjM4LCAxNjgsIDE2LCAxNywgNjAsIDIzNCwgMjA2LCAxNiwgMTcsIAotICAgIDYwLCAyMzUsIDYsIDE2LCAxNywgNjAsIDIzNSwgMTYyLCAxNiwgMTcsIDYwLCAyMzUsIDE2MCwgMTYsIDE3LCA2MCwgMjM1LCAKLSAgICA4OSwgMTYsIDE3LCA2MCwgMjM2LCAxLCAxNiwgMTcsIDYwLCAyMzYsIDY2LCAxNiwgMTcsIDYwLCAyMzYsIDEwMywgMTYsIAotICAgIDE3LCA2MCwgMjM2LCAyMzUsIDE2LCAxNywgNjAsIDIzNiwgMjI2LCAxNiwgMTcsIDYwLCAyMzYsIDE1NywgMTYsIDE3LCA2MCwgCi0gICAgMTk4LCAxNiwgMTcsIDYwLCAyMjMsIDE1OCwgMTYsIDE3LCA2MCwgMjIzLCAxODMsIDE2LCAxNywgNjAsIDIyMywgMjI4LCAKLSAgICAxNiwgMTcsIDYwLCAyMjMsIDIyNSwgMTYsIDE3LCA2MCwgMjIzLCAyMDIsIDE2LCAxNywgNjAsIDE5MSwgMTYsIDE3LCA2MCwgCi0gICAgMjM5LCAxMDEsIDE2LCAxNywgMjMwLCAyMzIsIDIzOSwgMTAxLCAxNiwgMTcsIDYwLCAyMzksIDExNywgMTYsIDE3LCA2MCwgCi0gICAgMjM5LCAxNzAsIDE2LCAxNywgNjAsIDIzOSwgMTY5LCAxNiwgMTcsIDYwLCAyMzksIDE1NiwgMTYsIDE3LCAyMzAsIDIzMiwgCi0gICAgMjM5LCAxNTYsIDE2LCAxNywgNjAsIDIzOSwgMTc5LCAxNiwgMTcsIDYwLCAyMzksIDEzMCwgMTYsIDE3LCA2MCwgMjM5LCAKLSAgICAxMzQsIDE2LCAxNywgNjAsIDIzOSwgMTQ0LCAxNiwgMTcsIDYwLCAyMzksIDE0MywgMTYsIDE3LCA2MCwgMjM5LCAxNDIsIAotICAgIDE2LCAxNywgNjAsIDIzOSwgMTQ1LCAxNiwgMTcsIDYwLCAyMzcsIDExMCwgMTYsIDE3LCA2MCwgMjM3LCAxNDMsIDE2LCAxNywgCi0gICAgNjAsIDIzNywgMjQzLCAxNiwgMTcsIDYwLCAyMzcsIDIzOSwgMTYsIDE3LCA2MCwgMjM3LCAxOTMsIDE2LCAxNywgNjAsIAotICAgIDIzOCwgNDMsIDE2LCAxNywgNjAsIDI0OSwgMTY1LCAxNiwgMTcsIDYwLCAyNDksIDE2NiwgMTYsIDE3LCA2MCwgMjQ5LCAKLSAgICAxNjksIDE2LCAxNywgNjAsIDI0OSwgMTY4LCAxNiwgMTcsIDYwLCAyNDksIDE2NywgMTYsIDE3LCA2MCwgMjQ5LCAxNzAsIAotICAgIDE2LCAxNywgNjAsIDIzNywgMTk1LCAxNiwgMTcsIDYwLCAyMzcsIDE5NywgMTYsIDE3LCA2MCwgMjM3LCAyMDEsIDE2LCAxNywgCi0gICAgNjAsIDIzNywgMjAwLCAxNiwgMTcsIDYwLCAyMzcsIDE5OSwgMTYsIDE3LCA2MCwgMjM3LCAyMDUsIDE2LCAxNywgNjAsIAotICAgIDIyNiwgMTMwLCAxNiwgMTcsIDYwLCAyMjYsIDEzMSwgMTYsIDE3LCA2MCwgMjI2LCAxMzQsIDE2LCAxNywgNjAsIDIyNiwgCi0gICAgMTMzLCAxNiwgMTcsIDYwLCAyMjYsIDEzMiwgMTYsIDE3LCA2MCwgMjI2LCAxMzUsIDE2LCAxNywgNjAsIDIyNiwgMTI3LCAKLSAgICAxNiwgMTcsIDYwLCAyMjYsIDEyOCwgMTYsIDE3LCA2MCwgMjI2LCAxMzcsIDE2LCAxNywgNjAsIDIyNiwgMTM2LCAxNiwgMTcsIAotICAgIDYwLCAyMjYsIDEyOSwgMTYsIDE3LCA2MCwgMjI2LCAxMzgsIDE2LCAxNywgNjAsIDIyMywgMTksIDE2LCAxNywgNjAsIDIyMywgCi0gICAgMjcsIDE2LCAxNywgNjAsIDIyMywgOTcsIDE2LCAxNywgNjAsIDIyMywgOTUsIDE2LCAxNywgNjAsIDIyMywgNDcsIDE2LCAKLSAgICAxNywgNjAsIDIyMywgMTE3LCAxNiwgMTcsIDYwLCAyMjMsIDExOSwgMTYsIDE3LCA2MCwgNTksIDIyMywgMTE5LCAxNiwgMTcsIAotICAgIDYwLCAyNDgsIDYxLCAxNiwgMTcsIDYwLCAyNDgsIDYyLCAxNiwgMTcsIDYwLCAyNDgsIDY5LCAxNiwgMTcsIDYwLCAyNDgsIAotICAgIDY4LCAxNiwgMTcsIDYwLCAyNDgsIDY0LCAxNiwgMTcsIDYwLCAyNDgsIDcwLCAxNiwgMTcsIDYwLCAyMjgsIDYsIDE2LCAxNywgCi0gICAgNjAsIDIyOCwgMTY5LCAxNiwgMTcsIDYwLCAyMzAsIDIxMywgMTYsIDE3LCA2MCwgMjMwLCAyMDMsIDE2LCAxNywgNjAsIAotICAgIDIyOSwgMTUsIDE2LCAxNywgNjAsIDIzMSwgMzEsIDE2LCAxNywgNjAsIDIyOSwgNDMsIDE2LCAxNywgNjAsIDIyOSwgNzEsIAotICAgIDE2LCAxNywgNjAsIDIyOSwgMTE0LCAxNiwgMTcsIDYwLCAyMjksIDExMiwgMTYsIDE3LCA2MCwgMjI5LCA5MCwgMTYsIDE3LCAKLSAgICA2MCwgMjI5LCAxNDYsIDE2LCAxNywgNjAsIDIyOSwgMTQ4LCAxNiwgMTcsIDYwLCAyMjYsIDI2LCAxNiwgMTcsIDYwLCAyMjYsIAotICAgIDI4LCAxNiwgMTcsIDYwLCAyMjYsIDQwLCAxNiwgMTcsIDYwLCAyMjYsIDM5LCAxNiwgMTcsIDYwLCAyMjYsIDI5LCAxNiwgCi0gICAgMTcsIDYwLCAyMjYsIDQ0LCAxNiwgMTcsIDYwLCAyNTEsIDEzNiwgMTYsIDE3LCA2MCwgMjUxLCAxNTAsIDE2LCAxNywgNjAsIAotICAgIDI1MSwgMTgyLCAxNiwgMTcsIDYwLCAyNTEsIDE3OSwgMTYsIDE3LCA2MCwgMjUxLCAxNjksIDE2LCAxNywgNjAsIDI1MSwgCi0gICAgMjA0LCAxNiwgMTcsIDYwLCAyMjUsIDI1NSwgMTYsIDE3LCA2MCwgMjI2LCAwLCAxNiwgMTcsIDYwLCAyMjYsIDMsIDE2LCAKLSAgICAxNywgNjAsIDIyNiwgMiwgMTYsIDE3LCA2MCwgMjI2LCAxLCAxNiwgMTcsIDYwLCAyMjYsIDQsIDE2LCAxNywgMjUxLCAxNzAsIAotICAgIDUzLCAxNiwgMTcsIDI0NiwgMjE4LCAyMjgsIDM4LCAxNiwgMTcsIDIzMiwgMTMwLCAxNiwgMTcsIDIzNSwgMTM0LCAxNiwgCi0gICAgMTcsIDIzNSwgMTQsIDE2LCAxNywgMjM1LCAxMywgMTYsIDE3LCAyMzUsIDEyLCAxNiwgMTcsIDIzNSwgMTEsIDE2LCAxNywgCi0gICAgMjM1LCAxNiwgMTYsIDE3LCAyMzUsIDE1LCAyMzQsIDg2LCAyMjgsIDE0NiwgNzYsIDIzNCwgODYsIDEsIDI1MiwgMjE4LCAKLSAgICAyMzQsIDg2LCAxLCAyMzcsIDEwMywgMjM0LCA4NiwgMSwgMjQ3LCA5NiwgMjM0LCA4NiwgMSwgMjMxLCAxNSwgMjM0LCA4NiwgCi0gICAgMSwgMjM1LCA1NiwgMjM0LCA4NiwgMSwgMjI1LCAxNjksIDIzNCwgODYsIDEsIDI1MCwgMTY3LCAyMzQsIDg2LCAxLCAyMjYsIAotICAgIDE1MywgMjM0LCA4NiwgMSwgMjUxLCA2MywgMjM0LCA4NiwgMSwgMjUxLCAyMjMsIDIzNCwgODYsIDEsIDIzNiwgNTgsIDIzNCwgCi0gICAgODYsIDEsIDI0NSwgMjUzLCAyMzQsIDg2LCAxLCAyMzUsIDEyNywgMjM0LCA4NiwgMSwgMjI4LCAzMywgMjM0LCA4NiwgMSwgCi0gICAgMjMxLCA2NywgMjM0LCA4NiwgMSwgMjU0LCAyNTAsIDIzNCwgODYsIDEsIDIzNCwgNTYsIDIzNCwgODYsIDEsIDIyNSwgMTAzLCAKLSAgICAyMzQsIDg2LCAxLCAyNDgsIDU0LCAyMzQsIDg2LCAxLCAyMzksIDIxOCwgMjM0LCA4NiwgMSwgMjQ4LCA1NSwgMjM0LCA4NiwgCi0gICAgMSwgMjM0LCAzMSwgMjM0LCA4NiwgMSwgMjI1LCAxNTQsIDIzNCwgODYsIDEsIDI0MCwgNTMsIDIzNCwgODYsIDEsIDI0OCwgCi0gICAgNTIsIDIzNCwgODYsIDEsIDIzMywgMTM3LCAyMzQsIDg2LCAyNDcsIDk1LCA3NiwgMjM0LCA4NiwgMjAwLCAyNDcsIDk1LCAKLSAgICA3NiwgMTQwLCAxLCAyNDcsIDg2LCAyNDcsIDc4LCAyNDcsIDk4LCAyNDcsIDEzMCwgMTQwLCAxLCAxOTYsIDE0MCwgMSwgCi0gICAgMjI1LCA4OSwgMjI1LCAxMDQsIDY2LCAxNDAsIDEsIDIyMywgMTYwLCAxNDAsIDEsIDIyNCwgMjUsIDE0MCwgMSwgMjI0LCAKLSAgICAxNzQsIDE0MCwgMSwgMjI2LCAxODIsIDIyNiwgMTgxLCAyMjYsIDE5NiwgMTQwLCAxLCAyNDcsIDE2OCwgMTQwLCAxLCAyNTQsIAotICAgIDE2OSwgNTcsIDE0MCwgMSwgMjM0LCAyMSwgNzMsIDE0MCwgMSwgMjU1LCA0NCwgNTcsIDE0MCwgMSwgMjU1LCAxNSwgMTQwLCAKLSAgICAxLCAyMzcsIDEzMCwgNzMsIDE0MCwgMSwgMjI5LCA1NiwgNzMsIDE0MCwgMSwgNzMsIDE0MCwgMSwgMjM0LCA4OCwgMTQwLCAKLSAgICAxLCAyMzQsIDYxLCAxNDAsIDEsIDIzMiwgMTEsIDIzMiwgMTksIDIzMSwgMjI0LCAxNDYsIDE0MCwgMSwgMjM5LCAxMywgCi0gICAgMTQwLCAxLCAyNTEsIDIyMSwgMTQwLCAxLCAyMzksIDE0LCAyMzksIDc2LCAxNDAsIDEsIDIxNCwgMTQwLCAxLCAyNDcsIAotICAgIDIyOCwgMTQwLCAxLCAyNDYsIDEyOCwgMjQ1LCAxNzcsIDIxNCwgMTQwLCAxLCAyNDYsIDE2MCwgMTQwLCAxLCAyMjQsIDgxLCAKLSAgICAyMjQsIDc2LCAyMjQsIDE3NCwgMTQwLCAxLCAyNDUsIDE2MCwgMjEyLCAxNDAsIDEsIDI0NSwgMTY0LCAyMTIsIDE0MCwgMSwgCi0gICAgMjM3LCAxMzIsIDIxMiwgMTQwLCAxLCAyMjksIDU5LCAyMTIsIDE0MCwgMSwgMjM1LCAyMjIsIDIzNCwgMTcwLCAyMzUsIAotICAgIDIyMywgMTk5LCAxNDAsIDEsIDIyOSwgNTcsIDE5OSwgMTQwLCAxLCAyNDgsIDEzNSwgMTQwLCAxLCAyMzksIDIwMiwgMjM5LCAKLSAgICAyMDYsIDIzOSwgMTk3LCA3NCwgMTQwLCAxLCA3MiwgMTQwLCAxLCAyMzksIDE2MiwgMjM5LCAxODIsIDE0MCwgMSwgMjQ2LCAKLSAgICAxMTQsIDE0MCwgMSwgMjM3LCAxMzMsIDI1NSwgMTksIDE0MCwgMSwgMjI5LCA2MSwgNTcsIDE0MCwgMSwgMjM5LCAxOTAsIAotICAgIDI0NywgMjEzLCAxNDAsIDEsIDIzMywgMTEwLCAyMzMsIDEyNywgMjMzLCAyNDQsIDE0MCwgMSwgMjU0LCAyMjEsIDI0NywgCi0gICAgMjEyLCAxNDAsIDEsIDIyOCwgMTQ5LCAxOTMsIDE0MCwgMSwgMjI5LCA0LCAyMzcsIDEyOSwgMTkzLCAxNDAsIDEsIDIyOSwgCi0gICAgNTUsIDE5MywgMTQwLCAxLCAyNTIsIDQ0LCAxNDAsIDEsIDIyMywgMTE5LCAxNDAsIDEsIDIyNiwgMTQyLCAyMjYsIDE0NywgCi0gICAgMjI1LCAxODgsIDIyNywgMTA5LCAxNDAsIDEsIDIyOSwgNTQsIDIyNywgMTA5LCAxNDAsIDEsIDIyMiwgMjIyLCAxNDAsIDEsIAotICAgIDI1MiwgMjAzLCAyNTIsIDIwNiwgMjUyLCAxNTMsIDI1NCwgMjcsIDE0MCwgMSwgMjI5LCA2MCwgMjU0LCAyNywgMTQwLCAxLCAKLSAgICAyNDgsIDEzNCwgMTQwLCAxLCAyMzQsIDQwLCAxNDAsIDEsIDI0OCwgMjMsIDI0OCwgMjUsIDcyLCAxNDAsIDEsIDIzNywgMzAsIAotICAgIDIzNywgMzYsIDE4NSwgMTQwLCAxLCAyMzcsIDEzMSwgMTg1LCAxNDAsIDEsIDIyOSwgNTgsIDE4NSwgMTQwLCAxLCAyMzcsIAotICAgIDI1NSwgMjM4LCAyOCwgMjM3LCAxMzYsIDE0OSwgMTQwLCAxLCAyNDgsIDEzNiwgMTQwLCAxLCAyMzksIDI1NSwgMTQwLCAxLCAKLSAgICAyNDAsIDAsIDE0MCwgMSwgMjUwLCAxNzgsIDI1MCwgMTgzLCAyMjIsIDIyMiwgMTQwLCAxLCAyMzQsIDE3LCAyNDcsIDE2NywgCi0gICAgNzMsIDE0MCwgMSwgMjQ4LCA1MSwgMTQwLCAxLCAyMzksIDIxNywgMTQwLCAxLCAyNTAsIDIwNywgMTQwLCAxLCAyNTIsIDMyLCAKLSAgICAxNDAsIDEsIDI1MSwgMjMwLCAxNDAsIDEsIDIyOCwgNjMsIDE0MCwgMSwgMjM3LCAxMjgsIDE0MCwgMSwgMjI5LCA1MywgCi0gICAgMTQwLCAxLCAyNDQsIDY4LCAxNDAsIDEsIDIzMiwgMTM5LCAxNDAsIDEsIDIyNCwgNzMsIDE0MCwgMjI4LCAyNDEsIDIzMiwgCi0gICAgMTcwLCAxNDAsIDIzNiwgNTMsIDIzMiwgMTcwLCAxNDAsIDI1MCwgMjQ0LCAyMzIsIDE3MCwgMTQwLCAyNTQsIDEwNiwgOTgsIAotICAgIDE0MCwgMjI1LCAyMjQsIDk4LCAxNDAsIDI1MiwgMjE3LCA5OCwgMjI3LCA5NCwgMSwgNTcsIDIyNywgOTQsIDEsIDc0LCAKLSAgICAyMjcsIDk0LCAxLCA2NiwgMjI3LCA5NCwgMSwgMTc3LCAyMjcsIDk0LCAxLCAyNDYsIDE5MywgMjI3LCA5NCwgMSwgMjM1LCAKLSAgICAxMzcsIDIyNywgOTQsIDEsIDIyNywgMTA3LCAyMjcsIDk0LCAxLCAyNTAsIDE4OSwgMjI3LCA5NCwgMSwgMjM2LCAxLCAyMjcsIAotICAgIDk0LCAxLCAyMTMsIDIyNywgOTQsIDEsIDI1MywgNzAsIDIyNywgOTQsIDEsIDE5OCwgMjI3LCA5NCwgMSwgMTkxLCAyMjcsIAotICAgIDk0LCAxLCAyMzgsIDQzLCAyMjcsIDk0LCAxLCAyMjQsIDE3MywgMjI3LCA5NCwgMSwgMjMxLCAzMSwgMjI3LCA5NCwgMSwgCi0gICAgMTU0LCAyMjcsIDk0LCAzMSwgNSwgNzQsIDIyNywgOTQsIDMxLCA1LCA2NiwgMjI3LCA5NCwgNSwgMjI0LCAyMTYsIDI0NSwgCi0gICAgMTQzLCAxLCA1NywgMjQ1LCAxNDMsIDEsIDc0LCAyNDUsIDE0MywgMSwgNjYsIDI0NSwgMTQzLCAxLCAxNzcsIDI0NSwgMTQzLCAKLSAgICAxLCAyNDYsIDE5MywgMjQ1LCAxNDMsIDEsIDIzNSwgMTM3LCAyNDUsIDE0MywgMSwgMjI3LCAxMDcsIDI0NSwgMTQzLCAxLCAKLSAgICAyNTAsIDE4OSwgMjQ1LCAxNDMsIDEsIDIzNiwgMSwgMjQ1LCAxNDMsIDEsIDIxMywgMjQ1LCAxNDMsIDEsIDI1MywgNzAsIAotICAgIDI0NSwgMTQzLCAxLCAxOTgsIDI0NSwgMTQzLCAxLCAxOTEsIDI0NSwgMTQzLCAxLCAyMDgsIDI0NSwgMTQzLCAxLCAyMzgsIAotICAgIDQzLCAyNDUsIDE0MywgMSwgMjI0LCAxNzMsIDI0NSwgMTQzLCAxLCAyMzEsIDMxLCAyNDUsIDE0MywgMSwgMTU0LCAyNDUsIAotICAgIDE0MywgMzEsIDUsIDc0LCAyNDUsIDE0MywgMzEsIDUsIDY2LCAyNDUsIDE0MywgNSwgMjMzLCAyMTQsIDIzMywgODMsIDIyOCwgCi0gICAgMjQxLCAyMzIsIDE3MCwgMjMzLCA4MywgNDcsIDIzMiwgMTcwLCAyNTIsIDg3LCAxLCA1NywgMjUyLCA4NywgMSwgNzQsIAotICAgIDI1MiwgODcsIDEsIDY2LCAyNTIsIDg3LCAxLCAxNzcsIDI1MiwgODcsIDEsIDI0NiwgMTkzLCAyNTIsIDg3LCAxLCAyMzUsIAotICAgIDEzNywgMjUyLCA4NywgMSwgMjI3LCAxMDcsIDI1MiwgODcsIDEsIDI1MCwgMTg5LCAyNTIsIDg3LCAxLCAyMzYsIDEsIDI1MiwgCi0gICAgODcsIDEsIDIxMywgMjUyLCA4NywgMSwgMjUzLCA3MCwgMjUyLCA4NywgMSwgMTk4LCAyNTIsIDg3LCAxLCAxOTEsIDI1MiwgCi0gICAgODcsIDEsIDIwOCwgMjUyLCA4NywgMSwgMjM4LCA0MywgMjUyLCA4NywgMSwgMjI0LCAxNzMsIDI1MiwgODcsIDEsIDIzMSwgCi0gICAgMzEsIDI1MiwgODcsIDEsIDE1NCwgMjUyLCA4NywgMzEsIDUsIDc0LCAyNTIsIDg3LCAzMSwgNSwgNjYsIDIyNywgOTMsIDEsIAotICAgIDU3LCAyMjcsIDkzLCAxLCA3NCwgMjI3LCA5MywgMSwgNjYsIDIyNywgOTMsIDEsIDE3NywgMjI3LCA5MywgMSwgMjQ2LCAKLSAgICAxOTMsIDIyNywgOTMsIDEsIDIzNSwgMTM3LCAyMjcsIDkzLCAxLCAyMjcsIDEwNywgMjI3LCA5MywgMSwgMjUwLCAxODksIAotICAgIDIyNywgOTMsIDEsIDIzNiwgMSwgMjI3LCA5MywgMSwgMjEzLCAyMjcsIDkzLCAxLCAyNTMsIDcwLCAyMjcsIDkzLCAxLCAKLSAgICAxOTgsIDIyNywgOTMsIDEsIDE5MSwgMjI3LCA5MywgMSwgMjM4LCA0MywgMjI3LCA5MywgMSwgMjI0LCAxNzMsIDIyNywgOTMsIAotICAgIDEsIDIzMSwgMzEsIDIyNywgOTMsIDMxLCA1LCA3NCwgMjI3LCA5MywgMzEsIDUsIDY2LCA3MSwgMSwgMTc3LCA3MSwgMSwgCi0gICAgMjM4LCAyMjcsIDcxLCAxLCAyMzgsIDE1MCwgNzEsIDEsIDIzOCwgMjA4LCA3MSwgMSwgMjM1LCAxMDcsIDcxLCAxLCAyNTIsIAotICAgIDM5LCA3MSwgMSwgMjUxLCAyMDQsIDcxLCAxLCAyNTEsIDY4LCA3MSwgMSwgMjUxLCAxNTAsIDcxLCAxLCAyMzQsIDE1MiwgCi0gICAgNzEsIDEsIDI1MCwgMTg5LCA3MSwgMSwgMjI2LCAxMCwgNzEsIDEsIDI0OSwgMTYxLCA3MSwgMSwgMjI2LCA3LCA3MSwgMSwgCi0gICAgMjM1LCA5LCA3MSwgMSwgMjI3LCAxMDcsIDcxLCAxLCAyMjYsIDI1MSwgNzEsIDEsIDk2LCA3MSwgMSwgMjI2LCAyMDEsIDcxLCAKLSAgICAxLCAyMzUsIDYsIDcxLCAxLCAyNTMsIDcwLCA3MSwgMSwgMjMzLCA5NywgNzEsIDEsIDIzMywgNCwgNzEsIDEsIDIzMywgNzksIAotICAgIDcxLCAxLCAyMzYsIDEwMywgNzEsIDEsIDIyMywgMTgzLCA3MSwgMSwgMjMxLCAxMjIsIDcxLCAxLCAyMzcsIDE0MywgNzEsIAotICAgIDEsIDIyNCwgMjA2LCA3MSwgMSwgMjI5LCAxNDYsIDcxLCAxLCAyMjgsIDg0LCA3MSwgMSwgMjMxLCAzMSwgNzEsIDEsIDE1NCwgCi0gICAgNzEsIDEsIDIzOCwgNDMsIDcxLCAxLCAyMzIsIDEzOCwgNzEsIDI0MCwgOSwgMzEsIDIzMiwgMTI0LCA3MSwgMjQwLCA5LCAKLSAgICAzMSwgMjMyLCAxMzcsIDcxLCAyNDAsIDksIDMxLCAyMzIsIDEwNCwgNzEsIDI0MCwgOSwgMzEsIDIzMiwgOTksIDcxLCAyNDAsIAotICAgIDksIDMxLCAyMzIsIDg0LCA3MSwgMjQwLCA5LCAzMSwgMjMyLCA2MSwgNzEsIDI0MCwgOSwgMzEsIDIzMiwgNDksIDcxLCAKLSAgICAyNDAsIDksIDMxLCAyMzIsIDQ4LCA3MSwgMjQwLCA5LCAzMSwgMjMxLCA0MywgNzEsIDI0MCwgOSwgMzEsIDIzMSwgMzYsIAotICAgIDcxLCAyNDAsIDksIDMxLCAyMzcsIDgwLCA3MSwgMjQwLCA5LCAzMSwgMjM3LCA3MSwgNzEsIDI0MCwgOSwgMzEsIDIzMiwgCi0gICAgMTE5LCA3MSwgMjQwLCA5LCAzMSwgMjMyLCAxMzAsIDcxLCAyNDAsIDksIDMxLCAyMzIsIDkxLCAyMjUsIDE5NiwgMTE4LCAKLSAgICA3MSwgMjQwLCA5LCAzMSwgMjMyLCA5MSwgMjI1LCAxOTYsIDExMywgNzEsIDI0MCwgOSwgMzEsIDIzMiwgMTIwLCA3MSwgMzEsIAotICAgIDIzOSwgMjU0LCAyNTQsIDEzNSwgNzEsIDMxLCAyMzksIDI1NCwgMjU1LCA2MywgNzEsIDMxLCA1LCAyNTUsIDYzLCA3MSwgCi0gICAgMzEsIDUsIDc0LCA3MSwgMzEsIDUsIDI0MCwgNDcsIDcxLCAzMSwgNSwgMjI0LCAyNSwgNzEsIDMxLCA1LCAyMjMsIDEyNywgCi0gICAgNzEsIDMxLCA1LCA2NiwgNzEsIDMxLCA1LCAyMjUsIDc2LCA3MSwgMzEsIDUsIDIyNSwgMTcwLCA3MSwgMzEsIDUsIDIzNCwgCi0gICAgODgsIDcxLCAzMSwgNSwgMTkxLCA3MSwgMzEsIDUsIDI0MCwgNzIsIDcxLCAzMSwgNSwgNzIsIDcxLCAzMSwgNSwgMjU1LCAKLSAgICAxOSwgNzEsIDMxLCA1LCAyNTQsIDI1MywgNzEsIDMxLCA1LCAyMzQsIDUyLCA3MSwgMzEsIDUsIDI1NCwgNTMsIDcxLCA1LCAKLSAgICAyMzUsIDY3LCA3MSwgNSwgMjMxLCAyNDIsIDcxLCA1LCAyMjMsIDEzNywgNzEsIDUsIDIzNiwgMjUsIDcxLCA1LCAyMjYsIAotICAgIDY4LCA3MSwgNSwgMjUzLCAzOCwgNzEsIDUsIDIzMSwgMTE4LCA3MSwgNSwgMjI2LCAxMjMsIDcxLCA1LCAyMzksIDUyLCA3MSwgCi0gICAgNSwgMjU0LCAyNTUsIDcxLCA1LCAyMzAsIDI1NCwgMjMwLCAyNTAsIDcxLCA1LCAyMjQsIDIxMywgNzEsIDUsIDI1MSwgNjUsIAotICAgIDcxLCA1LCAyNTMsIDIwLCA3MSwgNSwgMjM4LCAyMjIsIDcxLCA1LCAyNTMsIDM0LCA3MSwgNSwgMjUyLCAyOCwgMjMzLCA0MiwgCi0gICAgMjM4LCA4MywgNzEsIDUsIDIzNywgMjIzLCAyMjYsIDEwOCwgNzEsIDUsIDI1MiwgMTkyLCA3MSwgNSwgMjMzLCA4MSwgMjM2LCAKLSAgICA2NCwgNzEsIDUsIDIzOCwgMTM4LCA3MSwgMjUwLCAyMjIsIDE0LCAyMzEsIDE3NiwgNzEsIDUsIDI1NCwgMzksIDcxLCA1LCAKLSAgICAyNTQsIDU2LCA3MSwgMjEsIDIyMywgODksIDcxLCAyMSwgMTE4LCA3MSwgMjEsIDExMywgNzEsIDIxLCAxNjYsIDcxLCAyMSwgCi0gICAgMTU4LCA3MSwgMjEsIDE3MywgNzEsIDIxLCAxODMsIDcxLCAyMSwgMTk0LCA3MSwgMjEsIDE4NywgNzEsIDIxLCAxOTIsIDcxLCAKLSAgICAxNCwgMjM3LCAyMjMsIDI1NCwgNTgsIDIyOCwgMTYwLCA3MSwgMTQsIDIzNywgMjIzLCAyNTQsIDU4LCAyMzYsIDQwLCA3MSwgCi0gICAgMTQsIDIzNywgMjIzLCAyNTQsIDU4LCAyMzMsIDQxLCA3MSwgMTQsIDIzNywgMjIzLCAyNTQsIDU4LCAyNTIsIDIxOSwgNzEsIAotICAgIDE0LCAyMzcsIDIyMywgMjU0LCA1OCwgMjUyLCA3NSwgNzEsIDE0LCAyMzcsIDIyMywgMjU0LCA1OCwgMjMyLCAyMjYsIDcxLCAKLSAgICAxNCwgMjM3LCAyMjMsIDI1NCwgNTgsIDIzMiwgMjIwLCA3MSwgMTQsIDIzNywgMjIzLCAyNTQsIDU4LCAyMzIsIDIxOCwgNzEsIAotICAgIDE0LCAyMzcsIDIyMywgMjU0LCA1OCwgMjMyLCAyMjQsIDcxLCAxNCwgMjM3LCAyMjMsIDI1NCwgNTgsIDIzMiwgMjIyLCA2OCwgCi0gICAgMjUyLCAxNjMsIDY4LCAyNDcsIDI0OSwgNjgsIDI1MSwgNTQsIDY4LCAyNDYsIDIxOCwgMjI4LCAzOCwgNjgsIDI1MSwgNjEsIAotICAgIDY4LCAyNDYsIDI0MywgMjQ5LCAxMzgsIDY4LCAyMjYsIDEyMiwgMjI4LCAxNjUsIDI0NCwgOTUsIDY4LCAyMjksIDE0LCA0LCAKLSAgICAyNTIsIDEyMywgMjM3LCAxMywgNjgsIDIzNywgMzMsIDI1MSwgNTQsIDY4LCAyMzcsIDMzLCAyNDYsIDIxOCwgMjI4LCAzOCwgCi0gICAgNjgsIDIzNSwgNTQsIDY4LCAyNDYsIDIzMCwgMzgsIDIzMCwgMTkzLCAxMTgsIDY4LCAyNDYsIDIzMCwgMzgsIDIzMCwgMTkzLCAKLSAgICAxMTMsIDY4LCAyNDYsIDIzMCwgMzgsIDIzMCwgMTkzLCAxNjYsIDY4LCAzMSwgMjI5LCAxNzMsIDY4LCAyMSwgMjIzLCA4OSwgCi0gICAgNjgsIDIxLCAxMTgsIDY4LCAyMSwgMTEzLCA2OCwgMjEsIDE2NiwgNjgsIDIxLCAxNTgsIDY4LCAyMSwgMTczLCA2OCwgMjEsIAotICAgIDE4MywgNjgsIDIxLCAxOTQsIDY4LCAyMSwgMTg3LCA2OCwgMjEsIDE5MiwgNjgsIDEsIDU3LCA2OCwgMSwgNzIsIDY4LCAxLCAKLSAgICA3NCwgNjgsIDEsIDczLCA2OCwgMSwgNjYsIDY4LCAxLCAyMzQsIDg4LCA2OCwgMSwgMjI1LCAxNTksIDY4LCAxLCAyNDgsIAotICAgIDM1LCA2OCwgMSwgMjM2LCAxLCA2OCwgMSwgMjU0LCAxODQsIDY4LCAxLCAyNTMsIDcwLCA2OCwgMSwgMjEzLCA2OCwgMSwgCi0gICAgMjMyLCAxMzgsIDY4LCAxLCAyNDYsIDE5MywgNjgsIDEsIDE5OCwgNjgsIDEsIDIzOCwgNDMsIDY4LCAxLCAyMzEsIDMxLCAKLSAgICA2OCwgMSwgMjI5LCAxNDYsIDY4LCAxLCAyMjcsIDEwNywgNjgsIDEsIDI1MCwgMTg5LCA2OCwgMSwgMjUxLCAyMDQsIDY4LCAKLSAgICAxLCAyMzksIDE3OSwgNjgsIDEsIDE5MSwgNjgsIDEsIDIwOCwgNjgsIDEsIDIyNCwgMTczLCA2OCwgMSwgMjQ3LCAxMjksIAotICAgIDY4LCAxLCAxNzcsIDY4LCAxLCAyMzgsIDIyNywgNjgsIDEsIDIyNiwgNDQsIDY4LCAxLCAyMjMsIDExNywgNjgsIDEsIDI0NSwgCi0gICAgMTY3LCA2OCwgMSwgMjIzLCAyMCwgNjgsIDEsIDIzNywgMjA1LCA2OCwgMSwgMjIzLCA3MiwgNjgsIDEsIDI1MSwgMTY5LCAKLSAgICA2OCwgMSwgMjI2LCAxMjIsIDE4MiwgMzEsIDUzLCA2OCwgMSwgMjI2LCAxMjIsIDcyLCA2OCwgMSwgMjI2LCAxMjIsIDc0LCAKLSAgICA2OCwgMSwgMjI2LCAxMjIsIDczLCA2OCwgMSwgMjI2LCAxMjIsIDY2LCA2OCwgMSwgMjI2LCAxMjIsIDIzNCwgODgsIDY4LCAKLSAgICAxLCAyMjYsIDEyMiwgMjI1LCAxNTksIDY4LCAxLCAyMjYsIDEyMiwgMjU0LCAxODQsIDY4LCAxLCAyMjYsIDEyMiwgMjUzLCAKLSAgICA3MCwgNjgsIDEsIDIyNiwgMTIyLCAyMTMsIDY4LCAxLCAyMjYsIDEyMiwgMjMyLCAxMzgsIDY4LCAxLCAyMjYsIDEyMiwgCi0gICAgMjQ2LCAxOTMsIDY4LCAxLCAyMjYsIDEyMiwgMTk4LCA2OCwgMSwgMjI2LCAxMjIsIDIyNywgMTA3LCA2OCwgMSwgMjI2LCAKLSAgICAxMjIsIDI1MCwgMTg5LCA2OCwgMSwgMjI2LCAxMjIsIDI1MSwgMjA0LCA2OCwgMSwgMjI2LCAxMjIsIDIzOSwgMTc5LCA2OCwgCi0gICAgMSwgMjI2LCAxMjIsIDIyNiwgNDQsIDY4LCAxLCAyMjYsIDEyMiwgMTkxLCA2OCwgMSwgMjI2LCAxMjIsIDIyNCwgMTczLCAKLSAgICA2OCwgMSwgMjI2LCAxMjIsIDE3NywgNjgsIDEsIDIyNiwgMTIyLCAyNDYsIDE5MCwgNjgsIDEsIDIyNiwgMTIyLCAyNDUsIAotICAgIDE2NywgNjgsIDEsIDIyNiwgMTIyLCAyMzksIDE1NSwgNjgsIDEsIDIyNiwgMTIyLCAyMzUsIDg3LCA2OCwgMSwgMjI2LCAKLSAgICAxMjIsIDI0OCwgNzAsIDY4LCAxLCAyMjksIDE0LCA3MiwgNjgsIDEsIDIyOSwgMTQsIDc0LCA2OCwgMSwgMjI5LCAxNCwgCi0gICAgMjM5LCAxODgsIDY4LCAxLCAyMjksIDE0LCAyMjUsIDE1OSwgNjgsIDEsIDIyOSwgMTQsIDY2LCA2OCwgMSwgMjI5LCAxNCwgCi0gICAgMjU0LCAxODQsIDY4LCAxLCAyMjksIDE0LCAxNzcsIDY4LCAxLCAyMjksIDE0LCAyNDYsIDE5MywgNjgsIDEsIDIyOSwgMTQsIAotICAgIDE1NCwgNjgsIDEsIDIyOSwgMTQsIDIxMywgNjgsIDEsIDIyOSwgMTQsIDIyOSwgMTQ2LCA2OCwgMSwgMjI5LCAxNCwgMjI3LCAKLSAgICAxMDcsIDY4LCAxLCAyMjksIDE0LCAyNTAsIDE4OSwgNjgsIDEsIDIyOSwgMTQsIDIzOSwgMTc5LCA2OCwgMSwgMjI5LCAxNCwgCi0gICAgMjQ3LCAxMjksIDY4LCAxLCAyMjksIDE0LCAyNDYsIDE5MCwgNjgsIDEsIDIyOSwgMTQsIDI0NSwgMTY3LCA2OCwgMSwgMjI5LCAKLSAgICAxNCwgMjI2LCA0NCwgNjgsIDEsIDIyOSwgMTQsIDIyMywgMTE3LCA2OCwgMSwgMjI5LCAxNCwgMjMyLCAyMiwgNjgsIDEsIAotICAgIDIyOSwgMTQsIDI1MSwgMjA0LCA2OCwgMSwgMjI5LCAxNCwgMjIzLCA4NSwgNjgsIDEsIDIzNywgMzMsIDc0LCA2OCwgMSwgCi0gICAgMjM3LCAzMywgMTc3LCA2OCwgMSwgMjM3LCAzMywgMjA4LCA2OCwgMSwgMjM3LCAzMywgMjQ3LCAxMjksIDY4LCAxLCAyMzcsIAotICAgIDMzLCAyMjMsIDg1LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCAyNTQsIDE2MSwgMTE4LCA2OCwgMSwgMjU0LCAyMjAsIAotICAgIDI0NiwgMTc1LCAyMjQsIDIxMiwgMTE4LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCAyNTAsIDE1OCwgNjgsIDEsIDI1NCwgCi0gICAgMjIwLCAyNDYsIDE3NSwgMjI1LCAxNjcsIDY4LCAxLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIzOSwgMjIzLCAyMjUsIDE2NywgCi0gICAgNjgsIDEsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjUzLCA0NywgNjgsIDEsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMTUyLCAyNTMsIAotICAgIDQ3LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCA1NywgNjgsIDEsIDI1NCwgMjIwLCAyNDYsIDE3NSwgNzQsIDY4LCAxLCAKLSAgICAyNTQsIDIyMCwgMjQ2LCAxNzUsIDE3NywgNjgsIDEsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjM1LCAxMzcsIDY4LCAxLCAyNTQsIAotICAgIDIyMCwgMjQ2LCAxNzUsIDI1MiwgMzksIDY4LCAxLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIyNiwgMjAsIDY4LCAxLCAyNTQsIAotICAgIDIyMCwgMjQ2LCAxNzUsIDIyNiwgMTAsIDY4LCAxLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDI1MCwgMTE3LCA2OCwgMSwgMjU0LCAKLSAgICAyMjAsIDI0NiwgMTc1LCAyMzUsIDE4LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCAyMjcsIDEwNywgNjgsIDEsIDI1NCwgCi0gICAgMjIwLCAyNDYsIDE3NSwgMjUwLCAxODksIDY4LCAxLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIxMywgNjgsIDEsIDI1NCwgMjIwLCAKLSAgICAyNDYsIDE3NSwgMjMzLCA5NywgNjgsIDEsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjI4LCAxMTAsIDY4LCAxLCAyNTQsIDIyMCwgCi0gICAgMjQ2LCAxNzUsIDIyMywgODUsIDY4LCAxLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIyMywgMTE3LCA2OCwgMSwgMjU0LCAyMjAsIAotICAgIDI0NiwgMTc1LCAyNTUsIDMsIDY4LCAxLCAyMjYsIDEyMiwgMjU0LCAyMjAsIDI0NiwgMTc1LCAyMjcsIDEwNywgNjgsIDEsIAotICAgIDIyNiwgMTIyLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIyMywgODUsIDY4LCAxLCAyMzcsIDMzLCAyNTQsIDIyMCwgMjQ2LCAKLSAgICAxNzUsIDI0NiwgNjYsIDY4LCAxLCAyMzcsIDMzLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIzNSwgMTM3LCA2OCwgMSwgMjM3LCAKLSAgICAzMywgMjU0LCAyMjAsIDI0NiwgMTc1LCAyNTIsIDM5LCA2OCwgMSwgMjM3LCAzMywgMjU0LCAyMjAsIDI0NiwgMTc1LCAyMzksIAotICAgIDE2MCwgNjgsIDEsIDIzNywgMzMsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjI2LCAyMCwgNjgsIDEsIDIzNywgMzMsIDI1NCwgCi0gICAgMjIwLCAyNDYsIDE3NSwgMjUwLCAxMDEsIDY4LCAxLCAyMzcsIDMzLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIyNywgMTA3LCAKLSAgICA2OCwgMSwgMjM3LCAzMywgMjU0LCAyMjAsIDI0NiwgMTc1LCAyNTAsIDIyLCA2OCwgMSwgMjM3LCAzMywgMjU0LCAyMjAsIAotICAgIDI0NiwgMTc1LCAyMjgsIDExMCwgNjgsIDEsIDIzNywgMzMsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjUwLCAyMDEsIDY4LCAxLCAKLSAgICAyMzcsIDMzLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIDIyMywgODUsIDY4LCAxLCAyMzcsIDMzLCAyNTQsIDIyMCwgMjQ2LCAxNzUsIAotICAgIDIyMywgMTE3LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCAxMzIsIDY2LCA2OCwgMSwgMjU0LCAyMjAsIDI0NiwgMTc1LCAKLSAgICAxMzIsIDE5MSwgNjgsIDEsIDIzNywgMzMsIDI1NCwgMjIwLCAyNDYsIDE3NSwgMjUyLCAxOTAsIDY4LCAxLCAyNTQsIDIyMCwgCi0gICAgMjQ2LCAxNzUsIDI1MCwgMTc5LCA2OCwgMSwgMjM3LCAzMywgMjU0LCAyMjAsIDI0NiwgMTc1LCAyMzcsIDIwNSwgMTc0LCAKLSAgICAyMjQsIDE5MywgMjM3LCAyMTAsIDE3NCwgMSwgMTc3LCAxNzQsIDEsIDIzOCwgMjI3LCAxNzQsIDEsIDI0NiwgMTkzLCAxNzQsIAotICAgIDEsIDI0NiwgNjYsIDE3NCwgMSwgMjM1LCAxMzcsIDE3NCwgMSwgMjUyLCAzOSwgMTc0LCAxLCAyNTEsIDIwNCwgMTc0LCAxLCAKLSAgICAyMzksIDE3OSwgMTc0LCAxLCAyMzksIDE2MCwgMTc0LCAxLCAyMjMsIDI1MCwgMTc0LCAxLCAyMjcsIDEwNywgMTc0LCAxLCAKLSAgICAyMjYsIDI1MSwgMTc0LCAxLCAyNTAsIDE4OSwgMTc0LCAxLCAyNTAsIDIyLCAxNzQsIDEsIDIzNiwgMSwgMTc0LCAxLCAyMTMsIAotICAgIDE3NCwgMSwgMjMzLCA5NywgMTc0LCAxLCAyNTMsIDcwLCAxNzQsIDEsIDI1MiwgMTkwLCAxNzQsIDEsIDE5OCwgMTc0LCAxLCAKLSAgICAxOTEsIDE3NCwgMSwgMjA4LCAxNzQsIDEsIDIzOCwgNDMsIDE3NCwgMSwgMjI0LCAxNzMsIDE3NCwgMSwgMjI5LCAxNDYsIAotICAgIDE3NCwgMSwgMjI4LCAxMTAsIDE3NCwgMSwgMjMxLCAzMSwgMTc0LCAxLCAxNTQsIDE3NCwgMzEsIDUsIDU3LCAxNzQsIDMxLCAKLSAgICA1LCA3NCwgMTc0LCAzMSwgNSwgNjYsIDE3NCwgMzEsIDUsIDI0OCwgMzUsIDE3NCwgMzEsIDUsIDI1NCwgMjUzLCAxNzQsIAotICAgIDMxLCA1LCAyMzQsIDUyLCAxNzQsIDMxLCA1LCAyNTQsIDUzLCAxNzQsIDMxLCA1LCA3MiwgMTc0LCAzMSwgNSwgNzMsIDE3NCwgCi0gICAgMjI4LCAwLCAxLCAxOTEsIDE3NCwgMjI4LCAwLCAxLCAyMDgsIDE3NCwgMjI4LCAwLCAxLCAyMjQsIDE3MywgMTc0LCAzLCAxLCAKLSAgICAxNzcsIDE3NCwgMywgMSwgMjM1LCAxMzcsIDE3NCwgMywgMSwgMjU0LCAxNjAsIDE3NCwgMywgMSwgMjI3LCAxMDcsIDE3NCwgCi0gICAgMywgMSwgMjM2LCAxLCAxNzQsIDMsIDEsIDIxMywgMTc0LCAzLCAxLCAxOTgsIDE3NCwgMywgMSwgMjA4LCAxNzQsIDMsIDEsIAotICAgIDIzOCwgNDMsIDE3NCwgNSwgMjM2LCA1NywgMTc0LCA1LCAyMzgsIDI0OCwgMTc0LCA1LCAyMzEsIDMwLCAxNzQsIDUsIDIzNywgCi0gICAgMTI1LCAxNzQsIDI0NywgMTQ5LCA3NiwgMTc0LCAyMzIsIDY5LCA3NiwgMTc0LCAyMSwgMjIzLCA4OSwgMTc0LCAyMSwgMTE4LCAKLSAgICAxNzQsIDIxLCAxMTMsIDE3NCwgMjEsIDE2NiwgMTc0LCAyMSwgMTU4LCAxNzQsIDIxLCAxNzMsIDE3NCwgMjEsIDE4MywgCi0gICAgMTc0LCAyMSwgMTk0LCAxNzQsIDIxLCAxODcsIDE3NCwgMjEsIDE5MiwgOTEsIDIzNywgMjQ0LCAxLCAxNzcsIDkxLCAyMzcsIAotICAgIDI0NCwgMSwgMjI0LCA3MiwgOTEsIDIzNywgMjQ0LCAxLCAyMzUsIDEzNywgOTEsIDIzNywgMjQ0LCAxLCAyMjYsIDQ0LCA5MSwgCi0gICAgMjM3LCAyNDQsIDEsIDIzMSwgMzEsIDkxLCAyMzcsIDI0NCwgMSwgMTkxLCA5MSwgMjM3LCAyNDQsIDEsIDIyNywgMTA3LCAKLSAgICA5MSwgMjM3LCAyNDQsIDEsIDIyNiwgMjUxLCA5MSwgMjM3LCAyNDQsIDEsIDIzOCwgNDMsIDkxLCAyMzcsIDI0NCwgMSwgCi0gICAgMjEzLCA5MSwgMjM3LCAyNDQsIDEsIDIzMywgOTcsIDkxLCAyMzcsIDI0NCwgMSwgMTk4LCA5MSwgMjM3LCAyNDQsIDEsIAotICAgIDI0NywgMTI5LCA5MSwgMjM3LCAyNDQsIDEsIDIyNSwgNjQsIDkxLCAyMzcsIDI0NCwgMSwgMTU0LCA5MSwgMjM3LCAyNDQsIAotICAgIDEsIDIzMiwgMTM4LCA5MSwgMjM3LCAyNDQsIDEsIDIzOCwgMjI3LCA5MSwgMjM3LCAyNDQsIDEsIDIyNiwgMzcsIDkxLCAKLSAgICAyMzcsIDI0NCwgMSwgMjM2LCAxLCA5MSwgMjM3LCAyNDQsIDEsIDU3LCA5MSwgMjM3LCAyNDQsIDEsIDc0LCA5MSwgMjM3LCAKLSAgICAyNDQsIDEsIDI0OCwgMzUsIDkxLCAyMzcsIDI0NCwgMSwgMjQ4LCAyNCwgOTEsIDIzNywgMjQ0LCAxLCA2NiwgOTEsIDIzNywgCi0gICAgMjQ0LCAxLCAyMzQsIDUyLCA5MSwgMjM3LCAyNDQsIDEsIDczLCA5MSwgMjM3LCAyNDQsIDEsIDIyNSwgMTU5LCA5MSwgMjM3LCAKLSAgICAyNDQsIDEsIDcyLCA5MSwgMjM3LCAyNDQsIDEsIDI1NCwgNTIsIDkxLCAyMzcsIDI0NCwgMSwgMjU0LCAyNTMsIDkxLCAyMzcsIAotICAgIDI0NCwgMSwgMjI2LCAxMTYsIDkxLCAyMzcsIDI0NCwgMSwgMjI2LCAxMTUsIDkxLCAyMzcsIDI0NCwgMSwgMjI2LCAxMTQsIAotICAgIDkxLCAyMzcsIDI0NCwgMSwgMjI2LCAxMTMsIDkxLCAyMzcsIDI0NCwgMSwgMjI2LCAxMTIsIDEzOSwgOTEsIDE0NCwgMSwgCi0gICAgMjAxLCAyMzIsIDEzOCwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDIzMiwgMTM4LCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMTc3LCAKLSAgICAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjI0LCA3MiwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDIzNSwgMTM3LCAxMzksIDkxLCAKLSAgICAxNDQsIDEsIDE4NCwgMTc3LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjI0LCA3MiwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIAotICAgIDIzNSwgMTM3LCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjI2LCA0NCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDIzMSwgMzEsIAotICAgIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAxOTEsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyMjYsIDQ0LCAxMzksIDkxLCAxNDQsIAotICAgIDEsIDE4NCwgMjMxLCAzMSwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDE5MSwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDIyNywgCi0gICAgMTA3LCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjI2LCAyNTEsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyMzYsIDEsIDEzOSwgCi0gICAgOTEsIDE0NCwgMSwgMTg0LCAyMjcsIDEwNywgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDIyNiwgMjUxLCAxMzksIDkxLCAxNDQsIAotICAgIDEsIDE4NCwgMjM2LCAxLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjEzLCAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjMzLCA5NywgCi0gICAgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDE5OCwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDIxMywgMTM5LCA5MSwgMTQ0LCAxLCAKLSAgICAxODQsIDIzMywgOTcsIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAxOTgsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyNDcsIDEyOSwgCi0gICAgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDIyNSwgNjQsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyMzgsIDQzLCAxMzksIDkxLCAKLSAgICAxNDQsIDEsIDE4NCwgMjQ3LCAxMjksIDEzOSwgOTEsIDE0NCwgMSwgMTg0LCAyMjUsIDY0LCAxMzksIDkxLCAxNDQsIDEsIAotICAgIDE4NCwgMjM4LCA0MywgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDE1NCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIDI1MCwgMTg5LCAKLSAgICAxMzksIDkxLCAxNDQsIDEsIDIwMSwgMjUzLCA3MCwgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDE1NCwgMTM5LCA5MSwgMTQ0LCAKLSAgICAxLCAxODQsIDI1MCwgMTg5LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjUzLCA3MCwgMTM5LCA5MSwgMTQ0LCAxLCAyMDEsIAotICAgIDIzOCwgODAsIDEzOSwgOTEsIDE0NCwgMSwgMjAxLCAyMjQsIDQ1LCAxMzksIDkxLCAxNDQsIDEsIDE4NCwgMjM4LCA4MCwgCi0gICAgMTM5LCA5MSwgMTQ0LCAxLCAxODQsIDIyNCwgNDUsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDMxLCAyMjksIDUyLCAxMzksIDkxLCAKLSAgICAxNDQsIDMxLCA1LCAyNTUsIDYzLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyNDAsIDQ3LCAxMzksIDkxLCAxNDQsIDMxLCA1LCAKLSAgICA2NiwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjI1LCA3NiwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgNzIsIDEzOSwgOTEsIDE0NCwgCi0gICAgMzEsIDUsIDI1NSwgMTksIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDczLCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyMzQsIDEwNSwgCi0gICAgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjI1LCAxNTksIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDI1NCwgMzQsIDEzOSwgOTEsIAotICAgIDE0NCwgMzEsIDUsIDI1NSwgNTUsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDIyNSwgNzAsIDEzOSwgOTEsIDE0NCwgMzEsIDUsIAotICAgIDIzMywgMjQ4LCAxMzksIDkxLCAxNDQsIDMxLCA1LCAyMzQsIDEwMiwgMTM5LCA5MSwgMTQ0LCAzMSwgNSwgMjI1LCAxNTcsIAotICAgIDEzOSwgOTEsIDE0NCwgMzEsIDUsIDIzOSwgMTg4LCAxMzksIDkxLCAxNDQsIDEsIDM1LCAxOTYsIDEzOSwgOTEsIDE0NCwgMSwgCi0gICAgMzUsIDIzNSwgMTM5LCAxMzksIDkxLCAxNDQsIDEsIDM1LCAxOTksIDEzOSwgOTEsIDE0NCwgMSwgMzUsIDE4NSwgMTM5LCAKLSAgICA5MSwgMTQ0LCAxLCAzNSwgMjM5LCA3NiwgMTM5LCA5MSwgMTQ0LCAxLCAzNSwgMjIyLCAyMjIsIDEzOSwgOTEsIDE0NCwgMSwgCi0gICAgMzUsIDI1NCwgMjcsIDEzOSwgOTEsIDE0NCwgMjA2LCAyMzcsIDE3LCAxMzksIDkxLCAxNDQsIDIwNiwgMjM3LCAxNiwgMTM5LCAKLSAgICA5MSwgMTQ0LCAyMSwgMjIzLCA4OSwgMTM5LCA5MSwgMTQ0LCAyMSwgMTE4LCAxMzksIDkxLCAxNDQsIDIxLCAxMTMsIDEzOSwgCi0gICAgOTEsIDE0NCwgMjEsIDE2NiwgMTM5LCA5MSwgMTQ0LCAyMSwgMTU4LCAxMzksIDkxLCAxNDQsIDIxLCAxNzMsIDEzOSwgOTEsIAotICAgIDE0NCwgMjEsIDE4MywgMTM5LCA5MSwgMTQ0LCAyMSwgMTk0LCAxMzksIDkxLCAxNDQsIDIxLCAxODcsIDEzOSwgOTEsIDE0NCwgCi0gICAgMjEsIDE5MiwgMTM5LCA5MSwgMTQ0LCA1LCAyMzgsIDMzLCAxMzksIDkxLCAxNDQsIDUsIDIzOCwgMzIsIDcxLCAxNCwgMjMzLCAKLSAgICAxNjMsIDcxLCAxNCwgMjM2LCA0MSwgMjM4LCAxNDgsIDcxLCAxNCwgMjMzLCA0MiwgMjM4LCAxNDgsIDcxLCAxNCwgMjUyLCAKLSAgICAyMjAsIDIzOCwgMTQ4LCA3MSwgMTQsIDI1MiwgNzYsIDIzOCwgMTQ4LCA3MSwgMTQsIDIzMiwgMjI3LCAyMzgsIDE0OCwgNzEsIAotICAgIDE0LCAyMzIsIDIyMSwgMjM4LCAxNDgsIDcxLCAxNCwgMjMyLCAyMTksIDIzOCwgMTQ4LCA3MSwgMTQsIDIzMiwgMjI1LCAKLSAgICAyMzgsIDE0OCwgNzEsIDE0LCAyMzIsIDIyMywgMjM4LCAxNDgsIDcxLCAxNCwgMjUwLCAxNDcsIDIzOCwgMTQ4LCA3MSwgMTQsIAotICAgIDI1MCwgMTQzLCAyMzgsIDE0OCwgNzEsIDE0LCAyNTAsIDE0MiwgMjM4LCAxNDgsIDcxLCAxNCwgMjUwLCAxNDUsIDIzOCwgCi0gICAgMTQ4LCA3MSwgMTQsIDI1MCwgMTQ0LCAyMzgsIDE0OCwgNzEsIDE0LCAyNTAsIDE0MSwgMjM4LCAxNDgsIDcxLCAxNCwgMjI1LCAKLSAgICAyMjcsIDcxLCAxNCwgMjM2LCA0MSwgMjMxLCAxMTcsIDcxLCAxNCwgMjMzLCA0MiwgMjMxLCAxMTcsIDcxLCAxNCwgMjUyLCAKLSAgICAyMjAsIDIzMSwgMTE3LCA3MSwgMTQsIDI1MiwgNzYsIDIzMSwgMTE3LCA3MSwgMTQsIDIzMiwgMjI3LCAyMzEsIDExNywgNzEsIAotICAgIDE0LCAyMzIsIDIyMSwgMjMxLCAxMTcsIDcxLCAxNCwgMjMyLCAyMTksIDIzMSwgMTE3LCA3MSwgMTQsIDIzMiwgMjI1LCAKLSAgICAyMzEsIDExNywgNzEsIDE0LCAyMzIsIDIyMywgMjMxLCAxMTcsIDcxLCAxNCwgMjUwLCAxNDcsIDIzMSwgMTE3LCA3MSwgMTQsIAotICAgIDI1MCwgMTQzLCAyMzEsIDExNywgNzEsIDE0LCAyNTAsIDE0MiwgMjMxLCAxMTcsIDcxLCAxNCwgMjUwLCAxNDUsIDIzMSwgCi0gICAgMTE3LCA3MSwgMTQsIDI1MCwgMTQ0LCAyMzEsIDExNywgNzEsIDE0LCAyNTAsIDE0MSwgMjMxLCAxMTcsIDI1MiwgODgsIDEsIAotICAgIDE3NywgMjUyLCA4OCwgMSwgMjQ2LCAxOTMsIDI1MiwgODgsIDEsIDIzNSwgMTM3LCAyNTIsIDg4LCAxLCAyMzUsIDEwOSwgCi0gICAgMjUyLCA4OCwgMSwgMjEzLCAyNTIsIDg4LCAxLCAyNTMsIDcwLCAyNTIsIDg4LCAxLCAxOTgsIDI1MiwgODgsIDEsIDIzNiwgCi0gICAgNjksIDI1MiwgODgsIDEsIDIyNywgMTA3LCAyNTIsIDg4LCAxLCAyNTAsIDE4OSwgMjUyLCA4OCwgMSwgMjM2LCAxLCAyNTIsIAotICAgIDg4LCAxLCAyMzQsIDIzMCwgMjUyLCA4OCwgMSwgMjUyLCAzOSwgMjUyLCA4OCwgMSwgMjM5LCAxNzksIDI1MiwgODgsIDEsIAotICAgIDIzNCwgMTczLCAyNTIsIDg4LCAxLCAyMzQsIDE3MSwgMjUyLCA4OCwgMSwgMTkxLCAyNTIsIDg4LCAxLCAyMDgsIDI1MiwgCi0gICAgODgsIDEsIDIzOCwgNDMsIDI1MiwgODgsIDEsIDIyNSwgNjQsIDI1MiwgODgsIDEsIDIzMSwgMzEsIDI1MiwgODgsIDEsIDU3LCAKLSAgICAyNTIsIDg4LCAxLCAxNTQsIDI1MiwgODgsIDMxLCA1LCA3NCwgMjUyLCA4OCwgMzEsIDUsIDY2LCAyNTIsIDg4LCAzMSwgNSwgCi0gICAgNzIsIDI1MiwgODgsIDMxLCA1LCA3MywgMjUyLCA4OCwgMzEsIDUsIDI1NSwgMTksIDI1MiwgODgsIDIzMywgMjI0LCAyNTIsIAotICAgIDg4LCAyNDcsIDIzMywgMTA2LCAyMzAsIDIwNSwgODUsIDUsIDIyNSwgMTQ4LCAyMzEsIDE3NywgODUsIDUsIDIyNSwgMTQ4LCAKLSAgICAyNTIsIDIwLCA4NSwgNSwgMjUxLCAyMjksIDg1LCA1LCAyMjcsIDIxMSwgODUsIDUsIDI1MiwgMTYxLCA4NSwgMSwgMjU0LCAKLSAgICAyMzgsIDg1LCAxLCAyNTQsIDIzOSwgMjI3LCAzOSwgODUsIDEsIDI0MCwgNDMsIDg1LCAxLCAyNDAsIDQ0LCAyMjcsIDM5LCAKLSAgICA4NSwgMSwgMjI1LCAxNTEsIDg1LCAxLCAyMjUsIDE1MiwgMjI3LCAzOSwgODUsIDEsIDIzMiwgMjUsIDIzMSwgMjEzLCA4NSwgCi0gICAgMSwgMjMyLCAyNSwgMjMxLCAyMTQsIDIyNywgMzksIDg1LCAxLCAyMzgsIDQ0LCAyMzcsIDIyMCwgODUsIDEsIDIzOCwgNDQsIAotICAgIDIzNywgMjIxLCAyMjcsIDM5LCA4NSwgMSwgMjQ4LCA3LCA4NSwgMSwgMjU0LCAyNTEsIDg1LCAxLCAyMzQsIDc2LCA4NSwgMSwgCi0gICAgMjM0LCA3NywgMjI3LCAzOSwgODUsIDEsIDE3NywgODUsIDEsIDE4OCwgMjM3LCA1MiwgODUsIDEsIDI0NiwgMTkzLCA4NSwgCi0gICAgMSwgMjQ2LCAxOTQsIDI0NiwgMiwgODUsIDEsIDIzNSwgMTM3LCA4NSwgMSwgMjUyLCAzOSwgODUsIDEsIDI1MiwgNDAsIAotICAgIDIzOCwgMzUsIDg1LCAxLCAyMzksIDE3OSwgODUsIDEsIDIzOSwgMTgwLCAyMzksIDE2MywgODUsIDEsIDIzNCwgMTczLCA4NSwgCi0gICAgMSwgMjI3LCAxMDgsIDIzOCwgMSwgODUsIDEsIDIyNywgMTA4LCAyMzYsIDM2LCAyMzcsIDUyLCA4NSwgMSwgMjUwLCAxOTAsIAotICAgIDIzNiwgMzYsIDI1NCwgMjA3LCA4NSwgMSwgMjUwLCAxOTAsIDIzNiwgMzYsIDIzNywgNTIsIDg1LCAxLCAyMzYsIDIsIDIzMiwgCi0gICAgNSwgODUsIDEsIDIyNywgMTA3LCA4NSwgMSwgMjI3LCAxMDgsIDIyNywgNTUsIDg1LCAxLCAyNTAsIDE4OSwgODUsIDEsIAotICAgIDI1MCwgMTkwLCAyMzcsIDU2LCA4NSwgMSwgMjM2LCAxLCA4NSwgMSwgMjEzLCA4NSwgMSwgMjMzLCAyNDIsIDIzOSwgMzksIAotICAgIDg1LCAxLCAyNTMsIDcwLCA4NSwgMSwgMjUzLCA3MSwgMjM4LCAyNDksIDg1LCAxLCAxOTgsIDg1LCAxLCAxOTEsIDg1LCAxLCAKLSAgICAyMDgsIDg1LCAxLCAyMzgsIDQzLCA4NSwgMSwgMjI0LCAxNzMsIDg1LCAxLCAyMzEsIDMyLCAyMzEsIDE4LCA4NSwgMSwgCi0gICAgMjMxLCAzMiwgMjMwLCAyNDUsIDg1LCAxLCAyMzEsIDMxLCA4NSwgMSwgMTU0LCA4NSwgNSwgMjMxLCAyMDcsIDg1LCAzMSwgCi0gICAgNSwgMjI3LCAzOSwgODUsIDMxLCA1LCAyMjUsIDE0NywgODUsIDMxLCA1LCAyMjUsIDE0OCwgMjMwLCAyNDIsIDg1LCAzMSwgCi0gICAgNSwgMjI3LCAyMzYsIDg1LCAzMSwgNSwgMjI3LCAyMzcsIDI0MCwgMzUsIDg1LCAzMSwgNSwgMjMyLCAyNSwgMjMxLCAyMTMsIAotICAgIDg1LCAzMSwgNSwgMjMyLCAyNSwgMjMxLCAyMTQsIDIyNywgMzksIDg1LCAzMSwgNSwgMjM4LCA0NCwgMjM3LCAyMjAsIDg1LCAKLSAgICAzMSwgNSwgMjM4LCA0NCwgMjM3LCAyMjEsIDIyNywgMzksIDg1LCAzMSwgNSwgMjI3LCA3OCwgODUsIDMxLCA1LCAyMjcsIAotICAgIDc5LCAyMzEsIDIxMywgODUsIDMxLCA1LCAyMjcsIDc5LCAyMjcsIDM5LCA4NSwgMzEsIDUsIDIyNywgNzksIDIzMSwgMjE0LCAKLSAgICAyMjcsIDM5LCA4NSwgMzEsIDUsIDIzMywgMTI1LCA4NSwgMzEsIDUsIDIzMywgMTI2LCAyMjcsIDM5LCA4NSwgMjU1LCAyNSwgCi0gICAgMjU1LCAyNCwgODUsIDEsIDIzOSwgNjAsIDIzMCwgMjQxLCA4NSwgMSwgMjM4LCAyMDUsIDIzMCwgMjQxLCA4NSwgMSwgMjI1LCAKLSAgICAxODEsIDIzMCwgMjQxLCA4NSwgMSwgMjQ4LCAzMCwgMjMwLCAyNDEsIDg1LCAxLCAyMjUsIDQzLCAyMzAsIDI0MSwgODUsIDEsIAotICAgIDIyMywgMTA5LCAyMzAsIDI0MSwgODUsIDEsIDI1NCwgNjQsIDIzMCwgMjQxLCA4NSwgMjEsIDIyMywgODksIDg1LCAyMSwgCi0gICAgMTE4LCA4NSwgMjEsIDExMywgODUsIDIxLCAxNjYsIDg1LCAyMSwgMTU4LCA4NSwgMjEsIDE3MywgODUsIDIxLCAxODMsIDg1LCAKLSAgICAyMSwgMTk0LCA4NSwgMjEsIDE4NywgODUsIDIxLCAxOTIsIDg1LCAyMzMsIDIwMywgODUsIDIzMywgMjE5LCA4NSwgMjI0LCAKLSAgICAxMTAsIDg1LCAyNTIsIDcsIDIzMywgMjEzLCA4NSwgMjUyLCA3LCAyMjgsIDI1MywgODUsIDI1MiwgNywgMjMzLCAxNzksIAotICAgIDg1LCAyMzMsIDIxOCwgODUsIDIzLCAxNCwgMjQ5LCAxNDYsIDg1LCAyMywgMTQsIDI1MCwgNDUsIDg1LCAyMywgMTQsIDI0OCwgCi0gICAgOTMsIDg1LCAyMywgMTQsIDI1MCwgMTQ5LCA4NSwgMjMsIDE0LCAyNTAsIDE1MCwgMjI3LCAyMTEsIDg1LCAyMywgMTQsIAotICAgIDI0OSwgMjA5LCA4NSwgMjMsIDE0LCAyNTAsIDE4MiwgODUsIDIzLCAxNCwgMjUwLCAzMCwgODUsIDIzLCAxNCwgMjUwLCAKLSAgICAxNjgsIDg1LCAyMywgMTQsIDI1MCwgMTUwLCAyNDYsIDEyNywgODUsIDIzLCAxNCwgMzYsIDIyNywgMzYsIDg1LCAyMywgMTQsIAotICAgIDM2LCAyNDcsIDIzMSwgODUsIDIzLCAxNCwgMzYsIDIzOCwgMjQ0LCA4NSwgMjMsIDE0LCAzNiwgMjM4LCAyNDYsIDg1LCAyMywgCi0gICAgMTQsIDM2LCAyMzksIDE2NywgODUsIDIzLCAxNCwgMzYsIDIzOCwgMjQ1LCAyLCAyMzksIDE2NywgODUsIDIzLCAxNCwgMzYsIAotICAgIDIzOCwgMjQ3LCAyLCAyMzksIDE2NywgODUsIDIzLCAxNCwgMzYsIDI1MiwgMjA4LCA4NSwgMjMsIDE0LCAzNiwgMjQ2LCA1LCAKLSAgICA4NSwgMjMsIDE0LCAyMzEsIDE1MiwgMjM0LCA0NCwgMjQ4LCAxMDMsIDg1LCAyMywgMTQsIDIzMSwgMTUyLCAyMzQsIDQ0LCAKLSAgICAyNTAsIDE4MCwgODUsIDIzLCAxNCwgMjMxLCAxNTIsIDI1MSwgODIsIDIyNSwgMjQ1LCA4NSwgMjMsIDE0LCAyMzEsIDE1MiwgCi0gICAgMjUxLCA4MiwgMjI3LCA4NSwgODUsIDIzLCAxNCwgMjM3LCAyMzYsIDIzNCwgNDQsIDIzMywgMjA5LCA4NSwgMjMsIDE0LCAKLSAgICAyMzcsIDIzNiwgMjM0LCA0NCwgMjMyLCAxNjksIDg1LCAyMywgMTQsIDIzNywgMjM2LCAyNTEsIDgyLCAyMzMsIDIxLCA4NSwgCi0gICAgMjMsIDE0LCAyMzcsIDIzNiwgMjUxLCA4MiwgMjMzLCAxMywgODUsIDIzLCAxNCwgMjM3LCAyMzYsIDIzNCwgNDQsIDIzMywgCi0gICAgMzcsIDIyMCwgNSwgMjMzLCAyMDEsIDIyMCwgNSwgMjMzLCAyMDcsIDIyMCwgNSwgMjMzLCAyMDYsIDIyMCwgMSwgNTcsIAotICAgIDIyMCwgMSwgNzQsIDIyMCwgMSwgNjYsIDIyMCwgMSwgMjU1LCAxOSwgMjIwLCAxLCA3MywgMjIwLCAxLCA3MiwgMjIwLCAxLCAKLSAgICAyNDcsIDE2NSwgMjIwLCAxLCAxNzcsIDIyMCwgMSwgMjMyLCAxMzgsIDIyMCwgMSwgMjQ2LCAxOTMsIDIyMCwgMSwgMjM1LCAKLSAgICAxMzcsIDIyMCwgMSwgMjUyLCAzOSwgMjIwLCAxLCAyMzksIDE3OSwgMjIwLCAxLCAyMjMsIDExNywgMjIwLCAxLCAyMzQsIAotICAgIDE3MywgMjIwLCAxLCAyMjcsIDEwNywgMjIwLCAxLCAyNTAsIDE4OSwgMjIwLCAxLCAyMzYsIDEsIDIyMCwgMSwgMjEzLCAKLSAgICAyMjAsIDEsIDI0NywgMTI5LCAyMjAsIDEsIDIyNSwgNjQsIDIyMCwgMSwgMjUzLCA3MCwgMjIwLCAxLCAxOTgsIDIyMCwgMSwgCi0gICAgMTkxLCAyMjAsIDEsIDIwOCwgMjIwLCAxLCAyMzgsIDQzLCAyMjAsIDEsIDIyNCwgMTczLCAyMjAsIDEsIDIzMSwgMzEsIAotICAgIDIyMCwgMSwgMjI0LCA3MiwgMjIwLCAxLCAxNTQsIDIyMCwgMjUxLCAzMywgNSwgMjMzLCAyMTYsIDIyMCwgMjUxLCAzMywgNSwgCi0gICAgMjMzLCAyMDIsIDIyMCwgMjUxLCAzMywgNSwgMjMzLCAyMDAsIDIyMCwgMzEsIDUsIDIzMywgMjA4LCAyMjAsIDMxLCA1LCAKLSAgICAyMzMsIDE5OSwgMjIwLCAzMSwgNSwgMjMzLCAyMTEsIDIyMCwgMzEsIDUsIDIzMywgMjA1LCAyMjAsIDMxLCA1LCAyMzMsIAotICAgIDIxNywgMjIwLCAzMSwgNSwgMjMzLCAyMTAsIDIyMCwgNSwgMjMzLCAyMjAsIDIyMCwgMSwgMjM4LCAyMjcsIDIyMCwgMSwgCi0gICAgMjI3LCAxODQsIDIyMCwgMjEsIDIyMywgODksIDIyMCwgMjEsIDExOCwgMjIwLCAyMSwgMTEzLCAyMjAsIDIxLCAxNjYsIAotICAgIDIyMCwgMjEsIDE1OCwgMjIwLCAyMSwgMTczLCAyMjAsIDIxLCAxODMsIDIyMCwgMjEsIDE5NCwgMjIwLCAyMSwgMTg3LCAKLSAgICAyMjAsIDIxLCAxOTIsIDE1NiwgMSwgMTc3LCAxNTYsIDEsIDIzOCwgMTYwLCAxNTYsIDEsIDIzOCwgMjI3LCAxNTYsIDEsIAotICAgIDI0NiwgMTkzLCAxNTYsIDEsIDI0NiwgMjAsIDE1NiwgMSwgMjM1LCAxMzcsIDE1NiwgMSwgMjUyLCAzOSwgMTU2LCAxLCAKLSAgICAyNTEsIDIwNCwgMTU2LCAxLCAyMzksIDE3OSwgMTU2LCAxLCAyMzQsIDE3MywgMTU2LCAxLCAyMjcsIDEwNywgMTU2LCAxLCAKLSAgICAyMjYsIDI1MSwgMTU2LCAxLCAyNTAsIDE4OSwgMTU2LCAxLCAyMzYsIDEsIDE1NiwgMSwgMjEzLCAxNTYsIDEsIDIzMywgMjQsIAotICAgIDE1NiwgMSwgMjMzLCA5NywgMTU2LCAxLCAyNDcsIDEyOSwgMTU2LCAxLCAyNDcsIDMyLCAxNTYsIDEsIDI1MywgNzAsIDE1NiwgCi0gICAgMSwgMjUyLCAxNTEsIDE1NiwgMSwgMTk4LCAxNTYsIDEsIDIzNiwgMTA5LCAxNTYsIDEsIDIyNiwgNDQsIDE1NiwgMSwgMjI2LCAKLSAgICAzNywgMTU2LCAxLCAyNDgsIDcwLCAxNTYsIDEsIDE5MSwgMTU2LCAxLCAyMDgsIDE1NiwgMSwgMjM4LCA0MywgMTU2LCAxLCAKLSAgICAxNTQsIDE1NiwgMSwgMjQ1LCA1NCwgMTU2LCAxLCAyMjUsIDY0LCAxNTYsIDEsIDIzMSwgMzEsIDE1NiwgMSwgMjI5LCAxNDYsIAotICAgIDE1NiwgMSwgMjI0LCAxNzMsIDE1NiwgMSwgNTcsIDE1NiwgMjI4LCAwLCAxLCAxOTEsIDE1NiwgMjI4LCAwLCAxLCAyMDgsIAotICAgIDE1NiwgMzEsIDUsIDI1NSwgNjMsIDE1NiwgMzEsIDUsIDc0LCAxNTYsIDMxLCA1LCA3MywgMTU2LCAzMSwgNSwgMjM0LCA1MiwgCi0gICAgMTU2LCAzMSwgNSwgNjYsIDE1NiwgMzEsIDUsIDIyNSwgNzYsIDE1NiwgMzEsIDUsIDcyLCAxNTYsIDI1MSwgMzMsIDUsIAotICAgIDIzOSwgNzYsIDE1NiwgMjUxLCAzMywgNSwgMTg1LCAxNTYsIDI1MSwgMzMsIDUsIDE0OSwgMTU2LCAyNTEsIDMzLCA1LCAKLSAgICAxOTksIDE1NiwgMjUxLCAzMywgNSwgMjMzLCAyNDQsIDE1NiwgMjUxLCAzMywgNSwgMTQ2LCAxNTYsIDI1MSwgMzMsIDUsIAotICAgIDIyNywgMTA5LCAxNTYsIDI1MSwgMzMsIDUsIDIzNCwgMTU4LCAxNTYsIDI1MSwgMzMsIDUsIDIzOSwgNDMsIDE1NiwgNSwgCi0gICAgMjMyLCAzLCAxNTYsIDUsIDIzNCwgMjAyLCAxNTYsIDIzMiwgMTcxLCAyMjcsIDEwNiwgMTU2LCAyMzIsIDE3MSwgMjM0LCAKLSAgICAxNjUsIDIyNiwgMTc4LCAyMjcsIDEwNiwgMTU2LCAyMzIsIDE3MSwgMjUxLCAyMDgsIDE1NiwgMjMyLCAxNzEsIDIyNiwgMzIsIAotICAgIDI1MSwgMjA4LCAxNTYsIDIzMiwgMTcxLCAyMjYsIDMxLCAxNTYsIDIxLCAyMjMsIDg5LCAxNTYsIDIxLCAxMTgsIDE1NiwgCi0gICAgMjEsIDExMywgMTU2LCAyMSwgMTY2LCAxNTYsIDIxLCAxNTgsIDE1NiwgMjEsIDE3MywgMTU2LCAyMSwgMTgzLCAxNTYsIDIxLCAKLSAgICAxOTQsIDE1NiwgMjEsIDE4NywgMTU2LCAyMSwgMTkyLCAxNTYsIDEsIDIyNiwgMjAsIDE1NiwgMSwgMjI2LCAxMCwgMTU2LCAKLSAgICAxLCAyNTAsIDExNywgMjM0LCA3NCwgMjUxLCAxNjQsIDIxLCAyMjMsIDg5LCAyMzQsIDc0LCAyNTEsIDE2NCwgMjEsIDExOCwgCi0gICAgMjM0LCA3NCwgMjUxLCAxNjQsIDIxLCAxMTMsIDIzNCwgNzQsIDI1MSwgMTY0LCAyMSwgMTY2LCAyMzQsIDc0LCAyNTEsIAotICAgIDE2NCwgMjEsIDE1OCwgMjM0LCA3NCwgMjUxLCAxNjQsIDIxLCAxNzMsIDIzNCwgNzQsIDI1MSwgMTY0LCAyMSwgMTgzLCAKLSAgICAyMzQsIDc0LCAyNTEsIDE2NCwgMjEsIDE5NCwgMjM0LCA3NCwgMjUxLCAxNjQsIDIxLCAxODcsIDIzNCwgNzQsIDI1MSwgCi0gICAgMTY0LCAyMSwgMTkyLCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgMjM4LCA0MywgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDI1NCwgCi0gICAgNjIsIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyNTUsIDgsIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyNTQsIDE4NCwgMjM0LCAKLSAgICA3NCwgMjUxLCAxNjQsIDEsIDI1NCwgMjMzLCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgMjM4LCA0MiwgMjM0LCA3NCwgMjUxLCAKLSAgICAxNjQsIDEsIDI1NSwgNTksIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyNTUsIDYwLCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgCi0gICAgMjU1LCA1OCwgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDI1NSwgNTYsIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyMzcsIDE5MywgCi0gICAgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDIzOSwgMjA1LCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgMjQwLCA0OCwgMjM0LCA3NCwgCi0gICAgMjUxLCAxNjQsIDEsIDIzOSwgMjIwLCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgMjM5LCAyMTAsIDIzNCwgNzQsIDI1MSwgMTY0LCAKLSAgICAxLCAyMzcsIDExMCwgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDIyNSwgMTY1LCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgMjI1LCAKLSAgICAxNjMsIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyMjUsIDEyMSwgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDIyNSwgNzAsIDIzNCwgCi0gICAgNzQsIDI1MSwgMTY0LCAxLCAyMzcsIDI0MywgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDI0NywgMjExLCAyMzQsIDc0LCAyNTEsIAotICAgIDE2NCwgMSwgMjQ4LCAzOCwgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDI0NywgMjM5LCAyMzQsIDc0LCAyNTEsIDE2NCwgMSwgCi0gICAgMjQ3LCAxOTIsIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyMzcsIDE0MywgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDIzNCwgMTYsIAotICAgIDIzNCwgNzQsIDI1MSwgMTY0LCAxLCAyMzQsIDEwMSwgMjM0LCA3NCwgMjUxLCAxNjQsIDEsIDIzNCwgNiwgMjM0LCA3NCwgCi0gICAgMjUxLCAxNjQsIDEsIDIzNCwgODMsIDIzNCwgNzQsIDI1MSwgMTY0LCAyMzYsIDY3LCAyMjUsIDI1MSwgMjM0LCA3NCwgMjUxLCAKLSAgICAxNjQsIDI0NiwgMTg4LCAyMjUsIDI1MiwgMjM0LCA3NCwgMjUxLCAxNjQsIDIzNiwgNjUsIDIyNSwgMjUyLCAyMzQsIDc0LCAKLSAgICAyNTEsIDE2NCwgMjMxLCAyMjIsIDIzNCwgNzQsIDI1MSwgMTY0LCAyMzMsIDk1LCAyMzQsIDc0LCAyNTEsIDE2NCwgMjU1LCAKLSAgICAyLCAyMzQsIDc0LCAyNTEsIDE2NCwgMjMyLCAxNzEsIDIzNiwgNjMsIDIzNCwgNzQsIDI1MSwgMTY0LCAyMzIsIDE3MSwgNDcsIAotICAgIDIzNiwgNjMsIDcsIDEsIDMsIDYsIDU3LCA3LCAxLCAzLCA2LCAyNTUsIDE5LCA3LCAzLCAxLCAyMDksIDI1NSwgMTksIDcsIAotICAgIDEsIDMsIDYsIDI1MywgMzEsIDI1NCwgMjcsIDcsIDEsIDMsIDYsIDI1MiwgNDQsIDcsIDEsIDMsIDYsIDIyMiwgMjIyLCA3LCAKLSAgICAxLCAzLCA2LCAyNDcsIDE2OCwgNywgMSwgMywgNiwgNzIsIDcsIDMsIDEsIDIwOSwgMjM0LCA0NCwgNzIsIDcsIDMsIDEsIAotICAgIDIwOSwgNzQsIDcsIDEsIDMsIDYsIDIzOSwgMTgyLCA3LCAxLCAzLCA2LCAyMzksIDc2LCA3LCAxLCAzLCA2LCAyMzgsIDQ3LCAKLSAgICAyLCA4MiwgNywgMSwgMywgNiwgMTg1LCA3LCAxLCAzLCA2LCAyMDAsIDE5OSwgNywgMSwgMywgNiwgNzMsIDcsIDEsIDMsIDYsIAotICAgIDIzNCwgNDQsIDczLCA3LCAzLCAxLCAyMjksIDExLCA3MywgNywgMywgMSwgMjI5LCAxMSwgMjM0LCA0NCwgNzMsIDcsIDMsIAotICAgIDEsIDIyOSwgMTEsIDEzMCwgMiwgODIsIDcsIDMsIDEsIDIwOSwgMjM0LCA4OCwgNywgMSwgMywgNiwgMjM0LCAxMywgNywgMywgCi0gICAgMSwgMjI2LCAxMDYsIDEzMiwgNzMsIDcsIDMsIDEsIDI1MiwgMTI2LCAxMzIsIDczLCA3LCAxLCAzLCA2LCAyMzMsIDI0NCwgCi0gICAgNywgMSwgMywgNiwgMjAwLCAxNDYsIDcsIDEsIDMsIDYsIDIwOSwgMTQ2LCA3LCAxLCAzLCA2LCAyMjcsIDEwOSwgNywgMSwgCi0gICAgMywgNiwgNjYsIDcsIDMsIDEsIDIyOSwgMTEsIDY2LCA3LCAzLCAxLCAyMjksIDExLCAyNTAsIDIsIDY2LCA3LCAzLCAxLCAKLSAgICAyMjksIDExLCAyMDksIDE4NSwgNywgMSwgMywgNiwgMTk2LCA3LCAxLCAzLCA2LCAyMjQsIDE3NCwgNywgMSwgMywgNiwgCi0gICAgMjIzLCAxMTksIDcsIDEsIDMsIDYsIDI0NywgMTMyLCA3LCAxLCAyMjQsIDIwNCwgMjM4LCA3LCAyMjgsIDEzMywgNywgMSwgCi0gICAgMjU0LCAyNDgsIDE5LCAxLCAzLCA2LCAyNDYsIDE2OSwgMTksIDEsIDMsIDYsIDIzOCwgMTYsIDE5LCAxLCAzLCA2LCAyMzMsIAotICAgIDY5LCAxOSwgMSwgMywgNiwgMjMxLCAxODIsIDE5LCAxLCAzLCA2LCAyMzIsIDE4MywgMjgsIDEsIDMsIDYsIDI0OCwgMiwgCi0gICAgNTIsIDEsIDYsIDU3LCA1MiwgMSwgNiwgMjU1LCAxOSwgNTIsIDEsIDYsIDI1NCwgMjcsIDUyLCAxLCA2LCAyNTMsIDMxLCAKLSAgICAyNTQsIDI3LCA1MiwgMSwgNiwgMjIyLCAyMjIsIDUyLCAxLCA2LCA3MiwgNTIsIDEsIDYsIDIwMCwgNzIsIDUyLCAxLCA2LCAKLSAgICAyMTQsIDUyLCAxLCA2LCAyMTIsIDUyLCAxLCA2LCA3NCwgNTIsIDEsIDYsIDIzOSwgMTgyLCA1MiwgMSwgNiwgMjM5LCA3NiwgCi0gICAgNTIsIDEsIDYsIDE0OSwgNTIsIDEsIDYsIDE4NSwgNTIsIDEsIDYsIDE5OSwgNTIsIDEsIDYsIDIwMCwgMTk5LCA1MiwgMSwgCi0gICAgNiwgNzMsIDUyLCAxLCA2LCAyMzQsIDEzLCA1MiwgMSwgNiwgMjMzLCAyNDQsIDUyLCAxLCA2LCAxNDYsIDUyLCAxLCA2LCAKLSAgICAyMjcsIDEwOSwgNTIsIDEsIDYsIDY2LCA1MiwgMSwgNiwgMjI0LCAxNzQsIDUyLCAxLCAzLCA1NywgNTIsIDEsIDMsIDIwOSwgCi0gICAgNTcsIDUyLCAxLCAzLCAyNTQsIDIwNSwgNTIsIDEsIDMsIDIwOSwgMjU1LCAxOSwgNTIsIDEsIDMsIDI1NCwgMjcsIDUyLCAxLCAKLSAgICAzLCAyMjIsIDIyMiwgNTIsIDEsIDMsIDcyLCA1MiwgMSwgMywgMjMwLCAyMjIsIDUyLCAxLCAzLCAyMzQsIDQ0LCA3MiwgNTIsIAotICAgIDEsIDMsIDIwOSwgMjM0LCA0NCwgNzIsIDUyLCAxLCAzLCAyMTQsIDUyLCAxLCAzLCAyMDksIDc0LCA1MiwgMSwgMywgMjM5LCAKLSAgICA3NiwgNTIsIDEsIDMsIDE4NSwgNTIsIDEsIDMsIDI0NywgMjI4LCA1MiwgMSwgMywgNzMsIDUyLCAxLCAzLCAyMzQsIDQ0LCAKLSAgICA3MywgNTIsIDEsIDMsIDIyNiwgMTA2LCAxMzIsIDczLCA1MiwgMSwgMywgMjUyLCAxMjYsIDEzMiwgNzMsIDUyLCAxLCAzLCAKLSAgICAyMzMsIDI0NCwgNTIsIDEsIDMsIDIyNywgMTA5LCA1MiwgMSwgMywgNjYsIDUyLCAxLCAzLCAyMjksIDExLCA2NiwgNTIsIDEsIAotICAgIDMsIDIwOSwgMTg1LCA1MiwgMSwgMywgMTk2LCA1MiwgMSwgMywgMjU0LCAyNDgsIDUyLCAxLCAzLCAyNTIsIDE5OCwgNTIsIAotICAgIDEsIDMsIDE5LCAyNDYsIDE2OSwgNTIsIDEsIDMsIDI1MCwgNDcsIDUyLCAxLCAzLCAxOSwgMjMzLCA4NywgNTIsIDEsIDMsIAotICAgIDI1MSwgMTY5LCA3LCAyMjcsIDI1MywgMywgMSwgNzQsIDcsIDIyNywgMjUzLCAzLCAxLCAxNDYsIDcsIDIyNywgMjUzLCAzLCAKLSAgICAxLCA2NiwgNywgMjI3LCAyNTMsIDMsIDEsIDE5NiwgMTksIDIyNywgMjUzLCAzLCAxLCAyNTIsIDE5OCwgMTksIDIyNywgCi0gICAgMjUzLCAzLCAxLCAyNDYsIDE2OSwgMTksIDIyNywgMjUzLCAzLCAxLCAyMzEsIDE4MiwgMTksIDIyNywgMjUzLCAzLCAxLCAKLSAgICAyMzMsIDg3LCAxOSwgMjI3LCAyNTMsIDMsIDEsIDI1MSwgMTY5LCA3LCAzLCAxLCAyMjUsIDE1OSwgNywgMywgMSwgNDUsIDIsIAotICAgIDIzNiwgMTU0LCAyMDUsIDcsIDMsIDEsIDI1MCwgMTkyLCAyLCAyMzYsIDE1NCwgMjA1LCA3LCAzLCAxLCAyNDcsIDEzMSwgMiwgCi0gICAgMjM2LCAxNTQsIDIwNSwgNywgMywgMSwgMjM3LCA2OSwgMiwgMjM2LCAxNTQsIDIwNSwgNywgMywgMSwgMjM2LCA1LCAyLCAKLSAgICAyMzYsIDE1NCwgMjA1LCA3LCAzLCAxLCAyMzMsIDI0NSwgMiwgMjM2LCAxNTQsIDIwNSwgNywgMywgMSwgMjMyLCAyNywgMiwgCi0gICAgMjM2LCAxNTQsIDIwNSwgNywgMywgMSwgMjMyLCAyNywgMiwgMjQ3LCA0MSwgMjIsIDIzNiwgMTU0LCAyMDUsIDcsIDMsIDEsIAotICAgIDIzMSwgMzUsIDIsIDIzNiwgMTU0LCAyMDUsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAyMzYsIDE1NCwgMjA1LCA3LCAzLCAxLCAKLSAgICAyMjMsIDEyMCwgMiwgMjM2LCAxNTQsIDIwNSwgNywgMywgMSwgMjA5LCAyMTQsIDUyLCAxLCAyOCwgMjQ3LCAyMzksIDcsIDMsIAotICAgIDEsIDIzOSwgMjQxLCAyMTQsIDcsIDMsIDEsIDIyNiwgMjU0LCAyLCAyMjgsIDIzLCA3LCAzLCA2LCAxLCAyNDQsIDgxLCAyLCAKLSAgICA4MiwgNywgMywgMSwgMjM5LCAyMTYsIDIsIDgyLCA3LCAzLCAxLCAyMzMsIDI0NSwgMiwgODIsIDcsIDMsIDYsIDEsIDk3LCAKLSAgICAyLCA4MiwgNywgMywgMSwgMjI1LCAxMTEsIDIsIDgyLCA3LCAzLCAxLCA0NSwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAKLSAgICAyNTAsIDE5MiwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAyNDcsIDEzMSwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAKLSAgICAyNDYsIDE5NiwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAyMzksIDc3LCAyLCAyMzMsIDIyOSwgODgsIDcsIDMsIDEsIAotICAgIDIzOCwgNDcsIDIsIDIzMywgMjI5LCA4OCwgNywgMywgMSwgMjM3LCA2OSwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAKLSAgICAyMzYsIDUsIDIsIDIzMywgMjI5LCA4OCwgNywgMywgMSwgMjMzLCAyNDUsIDIsIDIzMywgMjI5LCA4OCwgNywgMywgMSwgCi0gICAgMjMyLCAyNywgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAyMzEsIDM1LCAyLCAyMzMsIDIyOSwgODgsIDcsIDMsIDEsIAotICAgIDI0NywgMTg0LCAyLCAyMzMsIDIyOSwgODgsIDcsIDMsIDEsIDIyNSwgNjUsIDIsIDIzMywgMjI5LCA4OCwgNywgMywgMSwgCi0gICAgMjI0LCA3NCwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAyMjMsIDEyMCwgMiwgMjMzLCAyMjksIDg4LCA3LCAzLCAxLCAKLSAgICAxMDIsIDIsIDIzMSwgMTk2LCA4OCwgNywgMywgMSwgMjU0LCAyMDYsIDIsIDIzMSwgMTk2LCA4OCwgNywgMywgMSwgMjUwLCAKLSAgICAxOTIsIDIsIDI0NCwgMjE3LCAyMiwgMjI3LCA4OSwgNywgMywgMSwgMTYxLCAyLCAyMzEsIDE5NiwgODgsIDcsIDMsIDEsIAotICAgIDIzNCwgNDQsIDE2MSwgMiwgMjMxLCAxOTYsIDg4LCA3LCAzLCAxLCAyMDAsIDIzNCwgNDQsIDE2MSwgMiwgMjMxLCAxOTYsIAotICAgIDg4LCA3LCAzLCAxLCAyMzAsIDIyMywgMiwgMjMxLCAxOTYsIDg4LCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyMzEsIDE5NiwgCi0gICAgODgsIDcsIDMsIDEsIDIzNCwgNDQsIDEzMCwgMiwgMjMxLCAxOTYsIDg4LCA3LCAzLCAxLCAyNDcsIDE4NCwgMiwgMjMxLCAKLSAgICAxOTYsIDg4LCA3LCAzLCAxLCA5NywgMiwgMjMxLCAxOTYsIDg4LCA3LCAzLCAxLCAyNDcsIDEzMywgMiwgMjMxLCAxOTYsIAotICAgIDg4LCA1MiwgMSwgMywgMjA5LCAyNTQsIDIwNSwgNTIsIDEsIDMsIDI1MiwgNDQsIDUyLCAxLCAzLCAyNTIsIDQ1LCAyLCAKLSAgICAyNTAsIDIyNCwgNTIsIDEsIDMsIDI0NywgMTY4LCA1MiwgMSwgMywgMjAwLCAyMzQsIDQ0LCA3MiwgNTIsIDEsIDMsIDI0NywgCi0gICAgMTMwLCA1MiwgMSwgMywgMjQ5LCAxMzksIDIzOSwgMTgzLCAyLCA4MiwgNTIsIDEsIDMsIDk1LCAyMTQsIDUyLCAxLCAzLCAKLSAgICAyMDksIDIxMiwgNTIsIDEsIDMsIDI0NCwgODEsIDIsIDgyLCA1MiwgMSwgMywgMjM5LCAyMTUsIDUyLCAxLCAzLCA2LCA3NCwgCi0gICAgNTIsIDEsIDMsIDYsIDI0NCwgODEsIDIsIDgyLCA1MiwgMSwgMywgMjM5LCAxODMsIDIsIDI1MCwgMjQwLCA1MiwgMSwgMywgCi0gICAgMjM4LCA0NywgMiwgMjMxLCAxOTYsIDg4LCA1MiwgMSwgMywgMjM4LCA0NywgMiwgMjMzLCAyMjksIDg4LCA1MiwgMSwgMywgCi0gICAgNiwgMTQ5LCA1MiwgMSwgMywgMjM3LCA2OSwgMiwgODgsIDUyLCAxLCAzLCAyMDksIDIzNywgNjksIDIsIDE4MiwgMjM3LCAKLSAgICAyMjksIDUyLCAxLCAzLCAyMzYsIDUsIDIsIDQyLCA4OCwgNTIsIDEsIDMsIDIzNiwgNSwgMiwgMjMxLCAxOTYsIDg4LCA1MiwgCi0gICAgMSwgMywgNiwgMTk5LCA1MiwgMSwgMywgMjUzLCAzMSwgNzMsIDUyLCAxLCAzLCAyMzMsIDg3LCA1MiwgMSwgMywgMjMxLCAKLSAgICAzNSwgMiwgODgsIDUyLCAxLCAzLCAyNDcsIDE4MywgNTIsIDEsIDMsIDIyNywgMTEwLCAyLCAyMzMsIDIyOSwgODgsIDUyLCAKLSAgICAxLCAzLCA5NywgMTI1LCA1MiwgMSwgMywgMjI1LCAxMTAsIDUyLCAxLCAzLCA2LCA2NiwgNTIsIDEsIDMsIDIyNSwgNjUsIDIsIAotICAgIDg4LCA1MiwgMSwgMywgMjA5LCAxOTYsIDUyLCAxLCAzLCAyMjMsIDExOSwgNTIsIDEsIDMsIDIyMywgMTIwLCAyLCAyMzEsIAotICAgIDE5NiwgODgsIDUyLCAxLCAzLCAyMjMsIDEyMCwgMiwgMjUwLCAyMjQsIDUyLCAxLCAzLCAyNDcsIDEzMiwgNTIsIDEsIDMsIAotICAgIDIyNiwgMjIzLCAzNiwgMjQ4LCAxMzgsIDI0NSwgMjM3LCAyNTUsIDQxLCAzNiwgMjQ4LCAxMzgsIDI1NSwgMzMsIDI1NSwgCi0gICAgNDEsIDM2LCAyMjgsIDE3NywgNTEsIDM2LCAyMjcsIDIwNSwgNzYsIDM2LCAyMzcsIDYyLCAzNiwgMjQ1LCAyMzQsIDM2LCAKLSAgICAyMzcsIDYwLCAzNiwgMjU1LCAzMSwgMzYsIDI0NSwgMjM1LCAzNiwgMjU1LCAzMiwgMzYsIDcsIDMsIDEsIDIzMiwgMjcsIAotICAgIDUxLCAzNiwgMjUyLCAxMDUsIDM2LCAyMzcsIDYxLCAzNiwgNDcsIDI1MSwgMTAyLCA0NiwgMzYsIDIzNCwgODUsIDQ2LCAzNiwgCi0gICAgMjIzLCAzOCwgNTEsIDM2LCAyMzksIDIwNiwgNTEsIDM2LCAyMjUsIDEwNCwgNDYsIDM2LCAyMjUsIDg4LCA0NiwgMzYsIDcsIAotICAgIDMsIDEsIDI0NywgMjIsIDIzNCwgNDQsIDEwMiwgNDYsIDM2LCA3LCAzLCAxLCAyNTUsIDE5LCAzNiwgNywgMywgMSwgMjU0LCAKLSAgICAxNTgsIDM2LCA3LCAzLCAxLCAyNTQsIDQxLCAzNiwgNywgMywgMSwgMjUyLCA0NSwgMjUxLCAyMjYsIDM2LCA3LCAzLCAxLCAKLSAgICAyMzksIDI0MSwgMjIyLCAyMjIsIDM2LCA3LCAzLCAxLCAyNDcsIDE2OCwgMzYsIDcsIDMsIDEsIDIxNCwgMzYsIDcsIDEsIDMsIAotICAgIDYsIDIxNCwgMzYsIDcsIDMsIDEsIDIzOSwgNzYsIDM2LCA3LCAzLCAxLCAxNDksIDM2LCA3LCAxLCAzLCA2LCAxNDksIDM2LCAKLSAgICA3LCAxLCAzLCA2LCAxODUsIDM2LCA3LCAzLCAxLCAxOTksIDM2LCA3LCAxLCAzLCA2LCAxOTksIDM2LCA3LCAxLCAzLCA2LCAKLSAgICAxNDYsIDM2LCA3LCAzLCAxLCAyMzIsIDI3LCAyMzEsIDEwNSwgMzYsIDcsIDMsIDEsIDE5MywgMzYsIDcsIDMsIDEsIDE4MiwgCi0gICAgMTkzLCAzNiwgNywgMywgMSwgMjIzLCAxMTksIDM2LCA0MiwgMjU0LCA5NCwgNDYsIDM2LCA0MSwgMjU0LCA5NCwgMjIsIAotICAgIDEwMywgMjU0LCA5NCwgNTEsIDcsIDYsIDEsIDEwMiwgMiwgMjMxLCAxNDAsIDUxLCA3LCAzLCAxLCAxMDIsIDIsIDIzMSwgCi0gICAgMTQwLCA1MSwgNywgNiwgMSwgNDUsIDIsIDU2LCA0NiwgNywgMywgMSwgNDUsIDIsIDU2LCA0NiwgNywgNiwgMSwgNDUsIDIsIAotICAgIDU2LCA1MSwgNywgMywgMSwgNDUsIDIsIDU2LCA1MSwgNywgNiwgMSwgNDUsIDIsIDIzNywgMTcxLCA1MSwgNywgMywgMSwgCi0gICAgNDUsIDIsIDIzNywgMTcxLCA1MSwgNywgNiwgMSwgMjUyLCA0NSwgMiwgMjUxLCAyMjcsIDIyLCAxNTUsIDcsIDMsIDEsIAotICAgIDI1MiwgNDUsIDIsIDI1MSwgMjI3LCAyMiwgMTU1LCA3LCA2LCAxLCAyNTAsIDE5MiwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAKLSAgICAyNTAsIDE5MiwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNTAsIDE5MiwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyNTAsIDE5MiwgMiwgCi0gICAgNTYsIDUxLCA3LCA2LCAxLCAyNTAsIDE5MiwgMiwgMjM3LCAxNzEsIDUxLCA3LCAzLCAxLCAyNTAsIDE5MiwgMiwgMjM3LCAKLSAgICAxNzEsIDUxLCA3LCA2LCAxLCAyNTAsIDE5MiwgMiwgMjUxLCAyMjYsIDcsIDMsIDEsIDI1MCwgMTkyLCAyLCAyNTEsIDIyNiwgCi0gICAgNywgNiwgMSwgMjUwLCAxOTIsIDIsIDI1MSwgMTAyLCA1MSwgNywgMywgMSwgMjUwLCAxOTIsIDIsIDI1MSwgMTAyLCA1MSwgCi0gICAgNywgNiwgMSwgMTYxLCAyLCAyMzcsIDY0LCAyMiwgMjQ1LCAyMzYsIDcsIDMsIDEsIDE2MSwgMiwgMjM3LCA2NCwgMjIsIAotICAgIDI0NSwgMjM2LCA3LCA2LCAxLCAxNjEsIDIsIDIzNywgNjQsIDIyLCAxNTUsIDcsIDMsIDEsIDE2MSwgMiwgMjM3LCA2NCwgCi0gICAgMjIsIDE1NSwgNywgNiwgMSwgMTYxLCAyLCAyNTEsIDEwMiwgNTEsIDcsIDMsIDEsIDE2MSwgMiwgMjUxLCAxMDIsIDUxLCA3LCAKLSAgICA2LCAxLCAxNjEsIDIsIDIyNiwgMTU5LCA1MSwgNywgMywgMSwgMTYxLCAyLCAyMjYsIDE1OSwgNTEsIDcsIDYsIDEsIDE2MSwgCi0gICAgMiwgMjUxLCAyMjcsIDIyLCAyNTIsIDEwNiwgNywgMywgMSwgMTYxLCAyLCAyNTEsIDIyNywgMjIsIDI1MiwgMTA2LCA3LCA2LCAKLSAgICAxLCAyNDcsIDEzMSwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyNDcsIDEzMSwgMiwgNTYsIDQ2LCA3LCA2LCAxLCAyNDYsIDE5NiwgCi0gICAgMiwgMjM3LCA2MywgNywgMywgMSwgMjQ2LCAxOTYsIDIsIDIzNywgNjMsIDcsIDYsIDEsIDI0NSwgMTcyLCAyLCA1NiwgNDYsIAotICAgIDcsIDMsIDEsIDI0NSwgMTcyLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDI0NSwgMTcyLCAyLCA1NiwgNTEsIDcsIDMsIDEsIDI0NSwgCi0gICAgMTcyLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDI0NSwgMTcyLCAyLCAyMTksIDcsIDMsIDEsIDI0NSwgMTcyLCAyLCAyMTksIDcsIAotICAgIDYsIDEsIDI0NSwgMTcyLCAyLCAyNTEsIDIyNiwgNywgMywgMSwgMjQ1LCAxNzIsIDIsIDI1MSwgMjI2LCA3LCA2LCAxLCAKLSAgICAyNDUsIDE3MiwgMiwgMjUyLCAxMDcsIDUxLCA3LCAzLCAxLCAyNDUsIDE3MiwgMiwgMjUyLCAxMDcsIDUxLCA3LCA2LCAxLCAKLSAgICAyNDQsIDgxLCAyLCAyMjYsIDE1OSwgNTEsIDcsIDMsIDEsIDI0NCwgODEsIDIsIDIyNiwgMTU5LCA1MSwgNywgNiwgMSwgCi0gICAgMjQ0LCA4MSwgMiwgMjUwLCAzLCAyMiwgMTU1LCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyNTAsIDMsIDIyLCAxNTUsIDcsIDYsIAotICAgIDEsIDIzOSwgNzcsIDIsIDE1NSwgNywgMywgMSwgMjM5LCA3NywgMiwgMTU1LCA3LCA2LCAxLCAyMzksIDc3LCAyLCA1NiwgCi0gICAgNTEsIDcsIDMsIDEsIDIzOSwgNzcsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjM5LCA3NywgMiwgMjM3LCAxNzEsIDUxLCA3LCAzLCAKLSAgICAxLCAyMzksIDc3LCAyLCAyMzcsIDE3MSwgNTEsIDcsIDYsIDEsIDIzOCwgNDcsIDIsIDU2LCA1MSwgNywgMywgMSwgMjM4LCAKLSAgICA0NywgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCA1NiwgMjUyLCAyMTQsIDIyLCAyMzcsIDYzLCA3LCAzLCAxLCAKLSAgICAyMzgsIDQ3LCAyLCA1NiwgMjUyLCAyMTQsIDIyLCAyMzcsIDYzLCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCAyMzcsIDE3MSwgNTEsIAotICAgIDcsIDMsIDEsIDIzOCwgNDcsIDIsIDIzNywgMTcxLCA1MSwgNywgNiwgMSwgMjM4LCA0NywgMiwgMjUxLCAxMDIsIDUxLCA3LCAKLSAgICAzLCAxLCAyMzgsIDQ3LCAyLCAyNTEsIDEwMiwgNTEsIDcsIDYsIDEsIDIzNywgNjksIDIsIDE1NSwgNywgMywgMSwgMjM3LCAKLSAgICA2OSwgMiwgMTU1LCA3LCA2LCAxLCAyMzcsIDY5LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDIzNywgNjksIDIsIDU2LCA0NiwgNywgCi0gICAgNiwgMSwgMjM3LCA2OSwgMiwgNTYsIDUxLCA3LCAzLCAxLCAyMzcsIDY5LCAyLCA1NiwgNTEsIDcsIDYsIDEsIDIzNiwgNSwgCi0gICAgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyMzYsIDUsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjM2LCA1LCAyLCA1NiwgNTEsIDcsIDMsIAotICAgIDEsIDIzNiwgNSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMzYsIDUsIDIsIDIzNywgMTcxLCA1MSwgNywgMywgMSwgMjM2LCA1LCAKLSAgICAyLCAyMzcsIDE3MSwgNTEsIDcsIDYsIDEsIDIzNiwgNSwgMiwgMjUxLCAxMDIsIDUxLCA3LCAzLCAxLCAyMzYsIDUsIDIsIAotICAgIDI1MSwgMTAyLCA1MSwgNywgNiwgMSwgMTMwLCAyLCAyMjYsIDE1OSwgMjIsIDE1NSwgNywgMywgMSwgMTMwLCAyLCAyMjYsIAotICAgIDE1OSwgMjIsIDE1NSwgNywgNiwgMSwgMTMwLCAyLCAyMjYsIDE1OSwgMjIsIDIxOSwgNywgMywgMSwgMTMwLCAyLCAyMjYsIAotICAgIDE1OSwgMjIsIDIxOSwgNywgNiwgMSwgMTMwLCAyLCAyMzcsIDY0LCAyMiwgMjQ1LCAyMzYsIDcsIDMsIDEsIDEzMCwgMiwgCi0gICAgMjM3LCA2NCwgMjIsIDI0NSwgMjM2LCA3LCA2LCAxLCAxMzAsIDIsIDIzNywgNjQsIDIyLCAxNTUsIDcsIDMsIDEsIDEzMCwgCi0gICAgMiwgMjM3LCA2NCwgMjIsIDE1NSwgNywgNiwgMSwgMjMzLCAyNDUsIDIsIDE1NSwgNywgMywgMSwgMjMzLCAyNDUsIDIsIAotICAgIDE1NSwgNywgNiwgMSwgMjMzLCAyNDUsIDIsIDU2LCA0NiwgNywgMywgMSwgMjMzLCAyNDUsIDIsIDU2LCA0NiwgNywgNiwgMSwgCi0gICAgMjMyLCAyNywgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyMzIsIDI3LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDIzMiwgMjcsIDIsIDU2LCAKLSAgICA1MSwgNywgMywgMSwgMjMyLCAyNywgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMzIsIDI3LCAyLCA1NiwgMjUyLCAyMTQsIDIyLCAKLSAgICAyMzcsIDYzLCA3LCAzLCAxLCAyMzIsIDI3LCAyLCA1NiwgMjUyLCAyMTQsIDIyLCAyMzcsIDYzLCA3LCA2LCAxLCAyMzIsIAotICAgIDI3LCAyLCAyMzcsIDE3MSwgNTEsIDcsIDMsIDEsIDIzMiwgMjcsIDIsIDIzNywgMTcxLCA1MSwgNywgNiwgMSwgMjMxLCAzNSwgCi0gICAgMiwgNTYsIDQ2LCA3LCAzLCAxLCAyMzEsIDM1LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDIzMSwgMzUsIDIsIDU2LCA1MSwgNywgCi0gICAgMywgMSwgMjMxLCAzNSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMzEsIDM1LCAyLCAyNTUsIDMzLCAyMiwgNTYsIDQ2LCA3LCAzLCAKLSAgICAxLCAyMzEsIDM1LCAyLCAyNTUsIDMzLCAyMiwgNTYsIDQ2LCA3LCA2LCAxLCAyMzEsIDM1LCAyLCAyNTIsIDYsIDIyLCA1NiwgCi0gICAgNDYsIDcsIDMsIDEsIDIzMSwgMzUsIDIsIDI1MiwgNiwgMjIsIDU2LCA0NiwgNywgNiwgMSwgMjMxLCAzNSwgMiwgNTYsIAotICAgIDI1MiwgMjE0LCAyMiwgNTYsIDQ2LCA3LCAzLCAxLCAyMzEsIDM1LCAyLCA1NiwgMjUyLCAyMTQsIDIyLCA1NiwgNDYsIDcsIAotICAgIDYsIDEsIDIyNywgMTEwLCAyLCA1NiwgNDYsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCA1NiwgNDYsIDcsIDYsIDEsIDIyNywgCi0gICAgMTEwLCAyLCA1NiwgNTEsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDIyNywgMTEwLCAyLCAyMzcsIAotICAgIDE3MSwgNTEsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAyMzcsIDE3MSwgNTEsIDcsIDYsIDEsIDIyNywgMTEwLCAyLCAyNTEsIAotICAgIDEwMiwgNTEsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAyNTEsIDEwMiwgNTEsIDcsIDYsIDEsIDk3LCAyLCAyNTAsIDMsIDUxLCAKLSAgICA3LCAzLCAxLCA5NywgMiwgMjUwLCAzLCA1MSwgNywgNiwgMSwgOTcsIDIsIDIyNiwgMTU5LCA1MSwgNywgMywgMSwgOTcsIDIsIAotICAgIDIyNiwgMTU5LCA1MSwgNywgNiwgMSwgOTcsIDIsIDI1MSwgMTAyLCA1MSwgNywgMywgMSwgOTcsIDIsIDI1MSwgMTAyLCA1MSwgCi0gICAgNywgNiwgMSwgOTcsIDIsIDIyNiwgMTU5LCAyMiwgMTU1LCA3LCAzLCAxLCA5NywgMiwgMjI2LCAxNTksIDIyLCAxNTUsIDcsIAotICAgIDYsIDEsIDk3LCAyLCAyMzcsIDY0LCAyMiwgMjE5LCA3LCAzLCAxLCA5NywgMiwgMjM3LCA2NCwgMjIsIDIxOSwgNywgNiwgMSwgCi0gICAgMjI1LCA2NSwgMiwgMjA1LCA3LCAzLCAxLCAyMjUsIDY1LCAyLCAyMDUsIDcsIDYsIDEsIDIyNSwgNjUsIDIsIDU2LCA1MSwgCi0gICAgNywgMywgMSwgMjI1LCA2NSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMjQsIDE3NSwgMiwgMjQ1LCAyMzYsIDcsIDMsIDEsIAotICAgIDIyNCwgMTc1LCAyLCAyNDUsIDIzNiwgNywgNiwgMSwgMjI0LCAxNzUsIDIsIDE1NSwgNywgMywgMSwgMjI0LCAxNzUsIDIsIAotICAgIDE1NSwgNywgNiwgMSwgMjI0LCAxNzUsIDIsIDIxOSwgNywgMywgMSwgMjI0LCAxNzUsIDIsIDIxOSwgNywgNiwgMSwgMjI0LCAKLSAgICAxNzUsIDIsIDU2LCA0NiwgNywgMywgMSwgMjI0LCAxNzUsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjI0LCAxNzUsIDIsIDU2LCAKLSAgICA1MSwgNywgMywgMSwgMjI0LCAxNzUsIDIsIDU2LCA1MSwgNywgNiwgMSwgMjI0LCA3NCwgMiwgNTYsIDQ2LCA3LCAzLCAxLCAKLSAgICAyMjQsIDc0LCAyLCA1NiwgNDYsIDcsIDYsIDEsIDIyNCwgNzQsIDIsIDIxOSwgNywgMywgMSwgMjI0LCA3NCwgMiwgMjE5LCAKLSAgICA3LCA2LCAxLCAyMjQsIDI2LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDIyNCwgMjYsIDIsIDU2LCA0NiwgNywgNiwgMSwgMjIzLCAKLSAgICAxMjAsIDIsIDI1MSwgMTAxLCA3LCAzLCAxLCAyMjMsIDEyMCwgMiwgMjUxLCAxMDEsIDcsIDYsIDEsIDIyMywgMTIwLCAyLCAKLSAgICA1NiwgNTEsIDcsIDMsIDEsIDIyMywgMTIwLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDIyMywgMTIwLCAyLCAyMzcsIDE3MSwgNTEsIAotICAgIDcsIDMsIDEsIDIyMywgMTIwLCAyLCAyMzcsIDE3MSwgNTEsIDcsIDMsIDEsIDI0NSwgMTcyLCAyLCAyMzcsIDE3MSwgNTEsIAotICAgIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAyMTksIDcsIDMsIDEsIDIyNCwgMTc1LCAyLCAyMzEsIDE0MCwgNDYsIDcsIDMsIDEsIAotICAgIDIyNCwgMjYsIDIsIDIzMSwgMTQwLCA0NiwgNywgMywgMSwgMTAyLCAyLCA0MSwgMTMyLCAyMzEsIDEzOSwgNywgMywgMSwgCi0gICAgMTgyLCAyMzEsIDM1LCAyLCA1NiwgNDYsIDcsIDMsIDEsIDE4MiwgMjMxLCAzNSwgMiwgMjUwLCAxLCA4MiwgNywgMywgMSwgCi0gICAgMTgyLCAyMzEsIDM1LCAyLCAyMDEsIDgyLCA3LCA2LCAxLCAyMjksIDEyNCwgMTkzLCA3LCAzLCAxLCAyNTAsIDQ3LCA3LCA2LCAKLSAgICAxLCAxMDIsIDIsIDU2LCA1MSwgNywgMywgMSwgMTAyLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDEwMiwgMiwgMjQ0LCAyMTcsIAotICAgIDQ2LCA3LCAzLCAxLCAxMDIsIDIsIDI0NCwgMjE3LCA0NiwgNywgNiwgMSwgMTAyLCAyLCAyNTEsIDEwMiwgMjIsIDE1NSwgNywgCi0gICAgMywgMSwgMTAyLCAyLCAyNTEsIDEwMiwgMjIsIDE1NSwgNywgNiwgMSwgMTAyLCAyLCAyNTEsIDEwMiwgMjIsIDI0NSwgMjM2LCAKLSAgICA3LCAzLCAxLCAxMDIsIDIsIDI1MSwgMTAyLCAyMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDEwMiwgMiwgMjUxLCAxMDIsIDIyLCAKLSAgICAyNDQsIDIxNywgNDYsIDcsIDMsIDEsIDEwMiwgMiwgMjUxLCAxMDIsIDIyLCAyNDQsIDIxNywgNDYsIDcsIDYsIDEsIDEwMiwgCi0gICAgMiwgMjUxLCAxMDIsIDIyLCAyMDUsIDcsIDMsIDEsIDEwMiwgMiwgMjUxLCAxMDIsIDIyLCAyMDUsIDcsIDYsIDEsIDEwMiwgCi0gICAgMiwgMjUxLCAxMDIsIDIyLCA1NiwgNTEsIDcsIDMsIDEsIDEwMiwgMiwgMjUxLCAxMDIsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIAotICAgIDEwMiwgMiwgMjUyLCAxMDcsIDIyLCAxNTUsIDcsIDMsIDEsIDEwMiwgMiwgMjUyLCAxMDcsIDIyLCAxNTUsIDcsIDYsIDEsIAotICAgIDEwMiwgMiwgMjUyLCAxMDcsIDIyLCAyNDUsIDIzNiwgNywgMywgMSwgMTAyLCAyLCAyNTIsIDEwNywgMjIsIDI0NSwgMjM2LCAKLSAgICA3LCA2LCAxLCAxMDIsIDIsIDI1MiwgMTA3LCAyMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCAxMDIsIDIsIDI1MiwgMTA3LCAKLSAgICAyMiwgMjQ0LCAyMTcsIDQ2LCA3LCA2LCAxLCAxMDIsIDIsIDI1MiwgMTA3LCAyMiwgMjA1LCA3LCAzLCAxLCAxMDIsIDIsIAotICAgIDI1MiwgMTA3LCAyMiwgMjA1LCA3LCA2LCAxLCAxMDIsIDIsIDI1MiwgMTA3LCAyMiwgNTYsIDUxLCA3LCAzLCAxLCAxMDIsIAotICAgIDIsIDI1MiwgMTA3LCAyMiwgNTYsIDUxLCA3LCA2LCAxLCAxNjEsIDIsIDU2LCA1MSwgNywgMywgMSwgMTYxLCAyLCA1NiwgCi0gICAgNTEsIDcsIDYsIDEsIDE2MSwgMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCAxNjEsIDIsIDI0NCwgMjE3LCA0NiwgNywgNiwgCi0gICAgMSwgMTYxLCAyLCAyMDUsIDcsIDMsIDEsIDE2MSwgMiwgMjA1LCA3LCA2LCAxLCAxNjEsIDIsIDI1MSwgMTAyLCAyMiwgMTU1LCAKLSAgICA3LCAzLCAxLCAxNjEsIDIsIDI1MSwgMTAyLCAyMiwgMTU1LCA3LCA2LCAxLCAxNjEsIDIsIDI1MSwgMTAyLCAyMiwgMjQ1LCAKLSAgICAyMzYsIDcsIDMsIDEsIDE2MSwgMiwgMjUxLCAxMDIsIDIyLCAyNDUsIDIzNiwgNywgNiwgMSwgMTYxLCAyLCAyNTEsIDEwMiwgCi0gICAgMjIsIDI0NCwgMjE3LCA0NiwgNywgMywgMSwgMTYxLCAyLCAyNTEsIDEwMiwgMjIsIDI0NCwgMjE3LCA0NiwgNywgNiwgMSwgCi0gICAgMTYxLCAyLCAyNTEsIDEwMiwgMjIsIDIwNSwgNywgMywgMSwgMTYxLCAyLCAyNTEsIDEwMiwgMjIsIDIwNSwgNywgNiwgMSwgCi0gICAgMTYxLCAyLCAyNTEsIDEwMiwgMjIsIDU2LCA1MSwgNywgMywgMSwgMTYxLCAyLCAyNTEsIDEwMiwgMjIsIDU2LCA1MSwgNywgCi0gICAgNiwgMSwgMjQ0LCA4MSwgMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCAyNDQsIDgxLCAyLCAyNDQsIDIxNywgNDYsIDcsIDYsIAotICAgIDEsIDI0NCwgODEsIDIsIDU2LCA1MSwgNywgMywgMSwgMjQ0LCA4MSwgMiwgNTYsIDUxLCA3LCA2LCAxLCAxMzAsIDIsIDU2LCAKLSAgICA1MSwgNywgMywgMSwgMTMwLCAyLCA1NiwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCAxMzAsIAotICAgIDIsIDI0NCwgMjE3LCA0NiwgNywgNiwgMSwgMTMwLCAyLCAyNTEsIDEwMiwgMjIsIDE1NSwgNywgMywgMSwgMTMwLCAyLCAKLSAgICAyNTEsIDEwMiwgMjIsIDE1NSwgNywgNiwgMSwgMTMwLCAyLCAyNTEsIDEwMiwgMjIsIDI0NSwgMjM2LCA3LCAzLCAxLCAxMzAsIAotICAgIDIsIDI1MSwgMTAyLCAyMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIDIyLCAyNDQsIDIxNywgNDYsIAotICAgIDcsIDMsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIDIyLCAyNDQsIDIxNywgNDYsIDcsIDYsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIAotICAgIDIyLCAyMDUsIDcsIDMsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIDIyLCAyMDUsIDcsIDYsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIAotICAgIDIyLCA1NiwgNTEsIDcsIDMsIDEsIDEzMCwgMiwgMjUxLCAxMDIsIDIyLCA1NiwgNTEsIDcsIDYsIDEsIDEzMCwgMiwgMjQ0LCAKLSAgICAxNjEsIDIyLCAxNTUsIDcsIDMsIDEsIDEzMCwgMiwgMjQ0LCAxNjEsIDIyLCAxNTUsIDcsIDYsIDEsIDEzMCwgMiwgMjQ0LCAKLSAgICAxNjEsIDIyLCAyNDUsIDIzNiwgNywgMywgMSwgMTMwLCAyLCAyNDQsIDE2MSwgMjIsIDI0NSwgMjM2LCA3LCA2LCAxLCAxMzAsIAotICAgIDIsIDI0NCwgMTYxLCAyMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCAxMzAsIDIsIDI0NCwgMTYxLCAyMiwgMjQ0LCAyMTcsIAotICAgIDQ2LCA3LCA2LCAxLCAxMzAsIDIsIDI0NCwgMTYxLCAyMiwgMjA1LCA3LCAzLCAxLCAxMzAsIDIsIDI0NCwgMTYxLCAyMiwgCi0gICAgMjA1LCA3LCA2LCAxLCAxMzAsIDIsIDI0NCwgMTYxLCAyMiwgNTYsIDUxLCA3LCAzLCAxLCAxMzAsIDIsIDI0NCwgMTYxLCAKLSAgICAyMiwgNTYsIDUxLCA3LCA2LCAxLCA5NywgMiwgNTYsIDUxLCA3LCAzLCAxLCA5NywgMiwgNTYsIDUxLCA3LCA2LCAxLCA5NywgCi0gICAgMiwgMjQ0LCAyMTcsIDQ2LCA3LCAzLCAxLCA5NywgMiwgMjQ0LCAyMTcsIDQ2LCA3LCA2LCAxLCA5NywgMiwgMjQ0LCAxNjEsIAotICAgIDIyLCAxNTUsIDcsIDMsIDEsIDk3LCAyLCAyNDQsIDE2MSwgMjIsIDE1NSwgNywgNiwgMSwgOTcsIDIsIDI0NCwgMTYxLCAyMiwgCi0gICAgMjQ1LCAyMzYsIDcsIDMsIDEsIDk3LCAyLCAyNDQsIDE2MSwgMjIsIDI0NSwgMjM2LCA3LCA2LCAxLCA5NywgMiwgMjQ0LCAKLSAgICAxNjEsIDIyLCAyNDQsIDIxNywgNDYsIDcsIDMsIDEsIDk3LCAyLCAyNDQsIDE2MSwgMjIsIDI0NCwgMjE3LCA0NiwgNywgNiwgCi0gICAgMSwgOTcsIDIsIDI0NCwgMTYxLCAyMiwgMjA1LCA3LCAzLCAxLCA5NywgMiwgMjQ0LCAxNjEsIDIyLCAyMDUsIDcsIDYsIDEsIAotICAgIDk3LCAyLCAyNDQsIDE2MSwgMjIsIDU2LCA1MSwgNywgMywgMSwgOTcsIDIsIDI0NCwgMTYxLCAyMiwgNTYsIDUxLCA3LCA2LCAKLSAgICAxLCAyMjQsIDI2LCAyLCAyNDUsIDIzNiwgNywgMywgMSwgMjI0LCAyNiwgMiwgMjQ1LCAyMzYsIDcsIDYsIDEsIDIyNCwgMjYsIAotICAgIDIsIDU2LCA1MSwgNywgMywgMSwgMjI0LCAyNiwgMiwgNTYsIDUxLCA3LCA2LCAxLCAyMjQsIDI2LCAyLCAyNDQsIDIxNywgCi0gICAgNDYsIDcsIDMsIDEsIDIyNCwgMjYsIDIsIDI0NCwgMjE3LCA0NiwgNywgNiwgMSwgMjI0LCAyNiwgMiwgMjA1LCA3LCAzLCAxLCAKLSAgICAyMjQsIDI2LCAyLCAyMDUsIDcsIDYsIDEsIDIzNiwgMTUzLCAyMzcsIDE0OSwgNywgMywgMSwgMjM2LCAxNTMsIDIzNywgCi0gICAgMTQ5LCA3LCA2LCAxLCAyMzYsIDE1MywgMTk2LCA3LCAzLCAxLCAyMzYsIDE1MywgMTk2LCA3LCA2LCAxLCAyMjQsIDI2LCAyLCAKLSAgICAyMzcsIDEyNCwgNywgMywgMSwgMjI0LCAyNiwgMiwgMjM3LCAxMjQsIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgMjMyLCAxNzcsIAotICAgIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgMjUwLCAxMjgsIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgMTg2LCAyMiwgMjI1LCA1NSwgCi0gICAgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAxNzIsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDE4NiwgMjIsIAotICAgIDIzMywgMjQ5LCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDE3MiwgMjIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjU0LCAyMDYsIAotICAgIDIsIDE4NiwgMjIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDE3MiwgMjIsIDIzMywgMTE3LCAxOSwgNiwgMSwgCi0gICAgMjU0LCAyMDYsIDIsIDIzMiwgMTc3LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDI1MCwgMTI4LCAxOSwgNiwgMSwgMjU0LCAKLSAgICAyMDYsIDIsIDE4NiwgMjIsIDIyNSwgNTUsIDE5LCA2LCAxLCAyNTQsIDIwNiwgMiwgMTcyLCAyMiwgMjI1LCA1NSwgMTksIDYsIAotICAgIDEsIDI1NCwgMjA2LCAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDI1NCwgMjA2LCAyLCAxNzIsIDIyLCAyMzMsIAotICAgIDI0OSwgMTksIDYsIDEsIDI1NCwgMjA2LCAyLCAxODYsIDIyLCAyMzMsIDExNywgMTksIDYsIDEsIDI1NCwgMjA2LCAyLCAKLSAgICAxNzIsIDIyLCAyMzMsIDExNywgMTksIDMsIDEsIDI0NywgMjA3LCAyLCAyMzIsIDE3NywgMTksIDMsIDEsIDI0NywgMjA3LCAKLSAgICAyLCAyNTAsIDEyOCwgMTksIDMsIDEsIDI0NywgMjA3LCAyLCAxODYsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjQ3LCAyMDcsIAotICAgIDIsIDE3MiwgMjIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyNDcsIDIwNywgMiwgMTg2LCAyMiwgMjMzLCAyNDksIDE5LCAzLCAxLCAKLSAgICAyNDcsIDIwNywgMiwgMTcyLCAyMiwgMjMzLCAyNDksIDE5LCA2LCAxLCAyNDcsIDIwNywgMiwgMjMyLCAxNzcsIDE5LCA2LCAKLSAgICAxLCAyNDcsIDIwNywgMiwgMjUwLCAxMjgsIDE5LCA2LCAxLCAyNDcsIDIwNywgMiwgMTg2LCAyMiwgMjI1LCA1NSwgMTksIDYsIAotICAgIDEsIDI0NywgMjA3LCAyLCAxNzIsIDIyLCAyMjUsIDU1LCAxOSwgNiwgMSwgMjQ3LCAyMDcsIDIsIDE4NiwgMjIsIDIzMywgCi0gICAgMjQ5LCAxOSwgNiwgMSwgMjQ3LCAyMDcsIDIsIDE3MiwgMjIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIAotICAgIDIzMiwgMTc3LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDI1MCwgMTI4LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDE4NiwgCi0gICAgMjIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyNDcsIDE3MiwgMiwgMTcyLCAyMiwgMjI1LCA1NSwgMTksIDMsIDEsIDI0NywgMTcyLCAKLSAgICAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAxNzIsIDIyLCAyMzMsIDI0OSwgMTksIDMsIDEsIAotICAgIDI0NywgMTcyLCAyLCAxODYsIDIyLCAyMzMsIDExNywgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAxNzIsIDIyLCAyMzMsIDExNywgCi0gICAgMTksIDYsIDEsIDI0NywgMTcyLCAyLCAyMzIsIDE3NywgMTksIDYsIDEsIDI0NywgMTcyLCAyLCAyNTAsIDEyOCwgMTksIDYsIAotICAgIDEsIDI0NywgMTcyLCAyLCAxODYsIDIyLCAyMjUsIDU1LCAxOSwgNiwgMSwgMjQ3LCAxNzIsIDIsIDE3MiwgMjIsIDIyNSwgCi0gICAgNTUsIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTg2LCAyMiwgMjMzLCAyNDksIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTcyLCAKLSAgICAyMiwgMjMzLCAyNDksIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTg2LCAyMiwgMjMzLCAxMTcsIDE5LCA2LCAxLCAyNDcsIAotICAgIDE3MiwgMiwgMTcyLCAyMiwgMjMzLCAxMTcsIDE5LCAzLCAxLCAyMzksIDIxNiwgMiwgMjMyLCAxNzcsIDE5LCAzLCAxLCAKLSAgICAyMzksIDIxNiwgMiwgMjUwLCAxMjgsIDE5LCAzLCAxLCAyMzksIDIxNiwgMiwgMTg2LCAyMiwgMjI1LCA1NSwgMTksIDMsIDEsIAotICAgIDIzOSwgMjE2LCAyLCAxNzIsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDE4NiwgMjIsIDIzMywgMjQ5LCAKLSAgICAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDE3MiwgMjIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDE4NiwgMjIsIAotICAgIDIzMywgMTE3LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDE3MiwgMjIsIDIzMywgMTE3LCAxOSwgNiwgMSwgMjM5LCAyMTYsIAotICAgIDIsIDIzMiwgMTc3LCAxOSwgNiwgMSwgMjM5LCAyMTYsIDIsIDI1MCwgMTI4LCAxOSwgNiwgMSwgMjM5LCAyMTYsIDIsIDE4NiwgCi0gICAgMjIsIDIyNSwgNTUsIDE5LCA2LCAxLCAyMzksIDIxNiwgMiwgMTcyLCAyMiwgMjI1LCA1NSwgMTksIDYsIDEsIDIzOSwgMjE2LCAKLSAgICAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDIzOSwgMjE2LCAyLCAxNzIsIDIyLCAyMzMsIDI0OSwgMTksIDYsIDEsIAotICAgIDIzOSwgMjE2LCAyLCAxODYsIDIyLCAyMzMsIDExNywgMTksIDYsIDEsIDIzOSwgMjE2LCAyLCAxNzIsIDIyLCAyMzMsIDExNywgCi0gICAgMTksIDMsIDEsIDIzNCwgNjUsIDIsIDIzMiwgMTc3LCAxOSwgMywgMSwgMjM0LCA2NSwgMiwgMjUwLCAxMjgsIDE5LCAzLCAxLCAKLSAgICAyMzQsIDY1LCAyLCAxODYsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjM0LCA2NSwgMiwgMTcyLCAyMiwgMjI1LCA1NSwgMTksIAotICAgIDMsIDEsIDIzNCwgNjUsIDIsIDE4NiwgMjIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjM0LCA2NSwgMiwgMTcyLCAyMiwgMjMzLCAKLSAgICAyNDksIDE5LCA2LCAxLCAyMzQsIDY1LCAyLCAyMzIsIDE3NywgMTksIDYsIDEsIDIzNCwgNjUsIDIsIDI1MCwgMTI4LCAxOSwgCi0gICAgNiwgMSwgMjM0LCA2NSwgMiwgMTg2LCAyMiwgMjI1LCA1NSwgMTksIDYsIDEsIDIzNCwgNjUsIDIsIDE3MiwgMjIsIDIyNSwgCi0gICAgNTUsIDE5LCA2LCAxLCAyMzQsIDY1LCAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDIzNCwgNjUsIDIsIDE3MiwgCi0gICAgMjIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjI1LCAxMTEsIDIsIDIzMiwgMTc3LCAxOSwgMywgMSwgMjI1LCAxMTEsIDIsIAotICAgIDI1MCwgMTI4LCAxOSwgMywgMSwgMjI1LCAxMTEsIDIsIDE4NiwgMjIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyMjUsIDExMSwgMiwgCi0gICAgMTcyLCAyMiwgMjI1LCA1NSwgMTksIDMsIDEsIDIyNSwgMTExLCAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDMsIDEsIAotICAgIDIyNSwgMTExLCAyLCAxNzIsIDIyLCAyMzMsIDI0OSwgMTksIDMsIDEsIDIyNSwgMTExLCAyLCAxODYsIDIyLCAyMzMsIDExNywgCi0gICAgMTksIDMsIDEsIDIyNSwgMTExLCAyLCAxNzIsIDIyLCAyMzMsIDExNywgMTksIDYsIDEsIDIyNSwgMTExLCAyLCAyNTAsIAotICAgIDEyOCwgMTksIDYsIDEsIDIyNSwgMTExLCAyLCAxNzIsIDIyLCAyMjUsIDU1LCAxOSwgNiwgMSwgMjI1LCAxMTEsIDIsIDE3MiwgCi0gICAgMjIsIDIzMywgMjQ5LCAxOSwgNiwgMSwgMjI1LCAxMTEsIDIsIDE3MiwgMjIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjM0LCAKLSAgICA2NywgMiwgMjMyLCAxNzcsIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAyNTAsIDEyOCwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIAotICAgIDE4NiwgMjIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAxNzIsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjM0LCAKLSAgICA2NywgMiwgMTg2LCAyMiwgMjMzLCAyNDksIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAxNzIsIDIyLCAyMzMsIDI0OSwgMTksIDMsIAotICAgIDEsIDIzNCwgNjcsIDIsIDE4NiwgMjIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjM0LCA2NywgMiwgMTcyLCAyMiwgMjMzLCAKLSAgICAxMTcsIDE5LCA2LCAxLCAyMzQsIDY3LCAyLCAyMzIsIDE3NywgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDI1MCwgMTI4LCAxOSwgCi0gICAgNiwgMSwgMjM0LCA2NywgMiwgMTg2LCAyMiwgMjI1LCA1NSwgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDE3MiwgMjIsIDIyNSwgCi0gICAgNTUsIDE5LCA2LCAxLCAyMzQsIDY3LCAyLCAxODYsIDIyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDE3MiwgCi0gICAgMjIsIDIzMywgMjQ5LCAxOSwgNiwgMSwgMjM0LCA2NywgMiwgMTg2LCAyMiwgMjMzLCAxMTcsIDE5LCA2LCAxLCAyMzQsIDY3LCAKLSAgICAyLCAxNzIsIDIyLCAyMzMsIDExNywgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjU0LCAyMDYsIAotICAgIDIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjQ3LCAyMDcsIDIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyNDcsIDIwNywgMiwgMjMzLCAKLSAgICAyNDksIDE5LCAzLCAxLCAyNDcsIDE3MiwgMiwgMjI1LCA1NSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAyMzMsIDI0OSwgMTksIAotICAgIDMsIDEsIDIzOSwgMjE2LCAyLCAyMjUsIDU1LCAxOSwgMywgMSwgMjM5LCAyMTYsIDIsIDIzMywgMjQ5LCAxOSwgMywgMSwgCi0gICAgMjM0LCA2NSwgMiwgMjI1LCA1NSwgMTksIDMsIDEsIDIzNCwgNjUsIDIsIDIzMywgMjQ5LCAxOSwgMywgMSwgMjI1LCAxMTEsIAotICAgIDIsIDIyNSwgNTUsIDE5LCAzLCAxLCAyMjUsIDExMSwgMiwgMjMzLCAyNDksIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAyMjUsIAotICAgIDU1LCAxOSwgMywgMSwgMjM0LCA2NywgMiwgMjMzLCAyNDksIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgMTg2LCAyMiwgMjIzLCAKLSAgICAxNjUsIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgMTcyLCAyMiwgMjIzLCAxNjUsIDE5LCAzLCAxLCAyNTQsIDIwNiwgMiwgCi0gICAgMTg2LCAyMiwgMjI1LCA1NiwgMjIsIDIyMywgMTY1LCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDE3MiwgMjIsIDIyNSwgNTYsIAotICAgIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAxODYsIDIyLCAyMzMsIDI1MCwgMjIsIDIyMywgMTY1LCAxOSwgCi0gICAgMywgMSwgMjU0LCAyMDYsIDIsIDE3MiwgMjIsIDIzMywgMjUwLCAyMiwgMjIzLCAxNjUsIDE5LCAzLCAxLCAyNTQsIDIwNiwgCi0gICAgMiwgMTg2LCAyMiwgMjMzLCAxMTgsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAxNzIsIDIyLCAyMzMsIAotICAgIDExOCwgMjIsIDIyMywgMTY1LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDE4NiwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgCi0gICAgMjU0LCAyMDYsIDIsIDE3MiwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDE4NiwgMjIsIDIyNSwgNTYsIAotICAgIDIyLCAyMzIsIDE4OCwgMTksIDYsIDEsIDI1NCwgMjA2LCAyLCAxNzIsIDIyLCAyMjUsIDU2LCAyMiwgMjMyLCAxODgsIDE5LCAKLSAgICA2LCAxLCAyNTQsIDIwNiwgMiwgMTg2LCAyMiwgMjMzLCAyNTAsIDIyLCAyMzIsIDE4OCwgMTksIDYsIDEsIDI1NCwgMjA2LCAKLSAgICAyLCAxNzIsIDIyLCAyMzMsIDI1MCwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDE4NiwgMjIsIDIzMywgCi0gICAgMTE4LCAyMiwgMjMyLCAxODgsIDE5LCA2LCAxLCAyNTQsIDIwNiwgMiwgMTcyLCAyMiwgMjMzLCAxMTgsIDIyLCAyMzIsIAotICAgIDE4OCwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAxODYsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAKLSAgICAxNzIsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAxODYsIDIyLCAyMjUsIDU2LCAyMiwgMjIzLCAxNjUsIAotICAgIDE5LCAzLCAxLCAyNDcsIDE3MiwgMiwgMTcyLCAyMiwgMjI1LCA1NiwgMjIsIDIyMywgMTY1LCAxOSwgMywgMSwgMjQ3LCAKLSAgICAxNzIsIDIsIDE4NiwgMjIsIDIzMywgMjUwLCAyMiwgMjIzLCAxNjUsIDE5LCAzLCAxLCAyNDcsIDE3MiwgMiwgMTcyLCAyMiwgCi0gICAgMjMzLCAyNTAsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAxODYsIDIyLCAyMzMsIDExOCwgMjIsIAotICAgIDIyMywgMTY1LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDE3MiwgMjIsIDIzMywgMTE4LCAyMiwgMjIzLCAxNjUsIDE5LCA2LCAKLSAgICAxLCAyNDcsIDE3MiwgMiwgMTg2LCAyMiwgMjMyLCAxODgsIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTcyLCAyMiwgMjMyLCAKLSAgICAxODgsIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTg2LCAyMiwgMjI1LCA1NiwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgCi0gICAgMjQ3LCAxNzIsIDIsIDE3MiwgMjIsIDIyNSwgNTYsIDIyLCAyMzIsIDE4OCwgMTksIDYsIDEsIDI0NywgMTcyLCAyLCAxODYsIAotICAgIDIyLCAyMzMsIDI1MCwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjQ3LCAxNzIsIDIsIDE3MiwgMjIsIDIzMywgMjUwLCAyMiwgCi0gICAgMjMyLCAxODgsIDE5LCA2LCAxLCAyNDcsIDE3MiwgMiwgMTg2LCAyMiwgMjMzLCAxMTgsIDIyLCAyMzIsIDE4OCwgMTksIDYsIAotICAgIDEsIDI0NywgMTcyLCAyLCAxNzIsIDIyLCAyMzMsIDExOCwgMjIsIDIzMiwgMTg4LCAxOSwgMywgMSwgMjM0LCA2NywgMiwgCi0gICAgMTg2LCAyMiwgMjIzLCAxNjUsIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAxNzIsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIAotICAgIDIzNCwgNjcsIDIsIDE4NiwgMjIsIDIyNSwgNTYsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIDE3MiwgCi0gICAgMjIsIDIyNSwgNTYsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIDE4NiwgMjIsIDIzMywgMjUwLCAyMiwgCi0gICAgMjIzLCAxNjUsIDE5LCAzLCAxLCAyMzQsIDY3LCAyLCAxNzIsIDIyLCAyMzMsIDI1MCwgMjIsIDIyMywgMTY1LCAxOSwgMywgCi0gICAgMSwgMjM0LCA2NywgMiwgMTg2LCAyMiwgMjMzLCAxMTgsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIAotICAgIDE3MiwgMjIsIDIzMywgMTE4LCAyMiwgMjIzLCAxNjUsIDE5LCA2LCAxLCAyMzQsIDY3LCAyLCAxODYsIDIyLCAyMzIsIDE4OCwgCi0gICAgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDE3MiwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjM0LCA2NywgMiwgMTg2LCAyMiwgCi0gICAgMjI1LCA1NiwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjM0LCA2NywgMiwgMTcyLCAyMiwgMjI1LCA1NiwgMjIsIDIzMiwgCi0gICAgMTg4LCAxOSwgNiwgMSwgMjM0LCA2NywgMiwgMTg2LCAyMiwgMjMzLCAyNTAsIDIyLCAyMzIsIDE4OCwgMTksIDYsIDEsIAotICAgIDIzNCwgNjcsIDIsIDE3MiwgMjIsIDIzMywgMjUwLCAyMiwgMjMyLCAxODgsIDE5LCA2LCAxLCAyMzQsIDY3LCAyLCAxODYsIAotICAgIDIyLCAyMzMsIDExOCwgMjIsIDIzMiwgMTg4LCAxOSwgNiwgMSwgMjM0LCA2NywgMiwgMTcyLCAyMiwgMjMzLCAxMTgsIDIyLCAKLSAgICAyMzIsIDE4OCwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAyMjQsIDE5MSwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAyMzcsIAotICAgIDYzLCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDIyNSwgNTYsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAKLSAgICAyMjMsIDE2NSwgMTksIDMsIDEsIDI1NCwgMjA2LCAyLCAyMzMsIDI1MCwgMjIsIDIyMywgMTY1LCAxOSwgMywgMSwgMjU0LCAKLSAgICAyMDYsIDIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjU0LCAyMDYsIDIsIDIzMywgMTE4LCAyMiwgMjIzLCAxNjUsIDE5LCA2LCAKLSAgICAxLCAyNTQsIDIwNiwgMiwgMjI0LCAxOTEsIDE5LCA2LCAxLCAyNTQsIDIwNiwgMiwgMjM3LCA2MywgMTksIDYsIDEsIDI1NCwgCi0gICAgMjA2LCAyLCAyMjUsIDU1LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIDIzMywgMjQ5LCAxOSwgNiwgMSwgMjU0LCAyMDYsIDIsIAotICAgIDIzMiwgMTg4LCAxOSwgMjM4LCAxMzIsIDE5LCAyMzIsIDE4OCwgMTksIDIzMiwgMTc3LCAxOSwgMjMzLCAxMTcsIDE5LCAKLSAgICAyNDksIDI1NCwgMjIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDIyNSwgNTYsIDIyLCAyMjMsIDE2NSwgMTksIAotICAgIDMsIDEsIDI0NywgMTcyLCAyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDI0NywgMTcyLCAyLCAyMzMsIDI1MCwgMjIsIDIyMywgCi0gICAgMTY1LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjQ3LCAxNzIsIDIsIDIzMywgMTE4LCAKLSAgICAyMiwgMjIzLCAxNjUsIDE5LCA2LCAxLCAyNDcsIDIwNywgMiwgMjI1LCA1NSwgMTksIDYsIDEsIDI0NywgMjA3LCAyLCAyMzMsIAotICAgIDI0OSwgMTksIDYsIDEsIDI0NywgMTcyLCAyLCAyMjUsIDU1LCAxOSwgNiwgMSwgMjQ3LCAxNzIsIDIsIDIzMywgMjQ5LCAxOSwgCi0gICAgNiwgMSwgMjQ3LCAxNzIsIDIsIDIzMiwgMTg4LCAxOSwgMTg2LCAyMiwgMjI1LCA1NSwgMTksIDE4NiwgMjIsIDIzMywgMjQ5LCAKLSAgICAxOSwgMTg2LCAyMiwgMjMzLCAxMTcsIDE5LCAzLCAxLCAyMzksIDIxNiwgMiwgMjI0LCAxOTEsIDE5LCAzLCAxLCAyMzksIAotICAgIDIxNiwgMiwgMjM3LCA2MywgMTksIDMsIDEsIDIzOSwgMjE2LCAyLCAyNDksIDI1NCwgMjIsIDIyNSwgNTUsIDE5LCAzLCAxLCAKLSAgICAyMzksIDIxNiwgMiwgMjQ5LCAyNTQsIDIyLCAyMzMsIDI0OSwgMTksIDMsIDEsIDIzOSwgMjE2LCAyLCAyMzMsIDExNywgMTksIAotICAgIDMsIDEsIDIzOSwgMjE2LCAyLCAyNDksIDI1NCwgMjIsIDIzMywgMTE3LCAxOSwgNiwgMSwgMjM5LCAyMTYsIDIsIDIyNCwgCi0gICAgMTkxLCAxOSwgNiwgMSwgMjM5LCAyMTYsIDIsIDIzNywgNjMsIDE5LCA2LCAxLCAyMzksIDIxNiwgMiwgMjI1LCA1NSwgMTksIAotICAgIDYsIDEsIDIzOSwgMjE2LCAyLCAyMzMsIDI0OSwgMTksIDE3MiwgMjIsIDIyNSwgNTUsIDE5LCAxNzIsIDIyLCAyMzMsIDI0OSwgCi0gICAgMTksIDE3MiwgMjIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjI1LCAxMTEsIDIsIDIyNCwgMTkxLCAxOSwgMywgMSwgMjI1LCAKLSAgICAxMTEsIDIsIDIzNywgNjMsIDE5LCAzLCAxLCAyMjUsIDExMSwgMiwgMjQ5LCAyNTQsIDIyLCAyMjUsIDU1LCAxOSwgMywgMSwgCi0gICAgMjI1LCAxMTEsIDIsIDI0OSwgMjU0LCAyMiwgMjMzLCAyNDksIDE5LCAzLCAxLCAyMzEsIDE4MywgMiwgMjMyLCAxNzcsIDE5LCAKLSAgICAzLCAxLCAyMzEsIDE4MywgMiwgMjUwLCAxMjgsIDE5LCAzLCAxLCAyMjUsIDExMSwgMiwgMjMzLCAxMTcsIDE5LCAzLCAxLCAKLSAgICAyMjUsIDExMSwgMiwgMjQ5LCAyNTQsIDIyLCAyMzMsIDExNywgMTksIDYsIDEsIDIyNSwgMTExLCAyLCAyMjQsIDE5MSwgMTksIAotICAgIDYsIDEsIDIyNSwgMTExLCAyLCAyMzcsIDYzLCAxOSwgNiwgMSwgMjI1LCAxMTEsIDIsIDIyNSwgNTUsIDE5LCA2LCAxLCAKLSAgICAyMjUsIDExMSwgMiwgMjMzLCAyNDksIDE5LCA2LCAxLCAyMzEsIDE4MywgMiwgMjUwLCAxMjgsIDE5LCAyNDksIDI1NCwgMjIsIAotICAgIDIyNSwgNTUsIDE5LCAyNDksIDI1NCwgMjIsIDIzMywgMjQ5LCAxOSwgMjI1LCA1NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIAotICAgIDIyNSwgNTYsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIDIyMywgMTY1LCAxOSwgMywgMSwgMjM0LCA2NywgCi0gICAgMiwgMjMzLCAyNTAsIDIyLCAyMjMsIDE2NSwgMTksIDMsIDEsIDIzNCwgNjcsIDIsIDIzMywgMTE3LCAxOSwgMywgMSwgMjM0LCAKLSAgICA2NywgMiwgMjMzLCAxMTgsIDIyLCAyMjMsIDE2NSwgMTksIDYsIDEsIDIzNCwgNjUsIDIsIDIyNSwgNTUsIDE5LCA2LCAxLCAKLSAgICAyMzQsIDY1LCAyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDIyNSwgNTUsIDE5LCA2LCAxLCAyMzQsIDY3LCAKLSAgICAyLCAyMzMsIDI0OSwgMTksIDYsIDEsIDIzNCwgNjcsIDIsIDIzMiwgMTg4LCAxOSwgMjMzLCAyNDksIDE5LCAyNTAsIDEyOCwgCi0gICAgMjQ3LCAyNDAsIDIzMiwgODEsIDI0NywgMjQ4LCAyMzIsIDgxLCAyNDcsIDI0MCwgMjI4LCAxNDUsIDI0NywgMjQ4LCAyMjgsIAotICAgIDE0NSwgMjI2LCAxODksIDIyOCwgMTQ1LCAyNDYsIDI0MSwgMjI4LCAxNDUsIDIyOCwgMjE1LCAyMjgsIDE0NSwgMjQ3LCA2MSwgCi0gICAgMjI4LCAxNDUsIDIzMiwgMTcxLCAyMjgsIDE0NSwgMjI2LCAyMTUsIDIyOCwgMTQ1LCAyNDUsIDE1OCwgMjI4LCAxNDUsIAotICAgIDIyMywgOTAsIDIyNCwgMTE1LCAyMjgsIDE0NSwgMjIzLCA5MCwgMjI0LCAxMTUsIDIzNCwgMjU1LCAyMjMsIDkwLCAyMjQsIAotICAgIDExNSwgMjM5LCAxMTIsIDIzNywgMjMxLCA3NiwgMjMxLCAxNDcsIDc2LCAyNDQsIDk1LCAyMzUsIDAsIDI0NCwgOTUsIDI0NywgCi0gICAgNjEsIDI1MCwgMTMwLCAyNDcsIDI0MCwgMjUwLCAxMzAsIDI0NywgMjQ4LCAyNTAsIDEzMCwgMTY5LCAxMjUsIDQ3LCA2MSwgCi0gICAgMjM3LCAxNzAsIDQ3LCAxODQsIDIzNywgMTcwLCA0MiwgMjI4LCAyNDEsIDIzMiwgNTcsIDc2LCA0MSwgMjI4LCAyNDEsIAotICAgIDIzMiwgNTcsIDc2LCAyMjgsIDI0MSwgMjM3LCAxMTYsIDIzMiwgNTcsIDc2LCAyMjgsIDI0MSwgMjQ1LCA2MiwgMjMyLCA1NywgCi0gICAgNzYsIDQyLCA0NywgMjMyLCA1NywgNzYsIDQxLCA0NywgMjMyLCA1NywgNzYsIDQ3LCAyMzcsIDExNiwgMjMyLCA1NywgNzYsIAotICAgIDQ3LCAyNDUsIDYyLCAyMzIsIDU3LCA3NiwgMjUwLCAxNzQsIDQ3LCAyNTAsIDE3NCwgMjUyLCA4MywgMjI2LCA3NSwgMjUyLCAKLSAgICA4MywgMTY4LCA1NiwgMjM3LCAyNDIsIDEzNSwgNTYsIDIzNywgMjQyLCAxNjksIDI0NywgMjQ5LCAyNDQsIDkzLCAyMzIsIAotICAgIDI1NCwgMjM3LCAxNzEsIDIyOSwgMTczLCAyMzMsIDE5MiwgMjI5LCAxNzMsIDIzNywgMjMxLCAyNDcsIDI0NiwgMjMxLCAKLSAgICAxNDcsIDI0NywgMjQ2LCAyMzIsIDI0MywgMjQ5LCAyMDAsIDI0NiwgMjQ5LCAyMzcsIDIzMSwgMjM0LCAwLCAyMzEsIDE0NywgCi0gICAgMjM0LCAwLCAyMzUsIDIyOSwgMjM1LCA1LCAyMjgsIDE0NSwgMjMzLCAxMjQsIDIzNiwgMTMwLCA1MywgMjMzLCAxMjQsIAotICAgIDIyNywgMjQsIDIyNiwgMTk1LCA1MywgMjMyLCAyMDUsIDQ3LCAyMzIsIDIwNSwgMjI2LCA2NiwgMjMyLCAyMDUsIDIwMCwgCi0gICAgMjMyLCAyMDUsIDIwMCwgNDcsIDIzMiwgMjA1LCAyMDAsIDIyNiwgNjYsIDIzMiwgMjA1LCAyNTIsIDksIDIyOCwgMjQxLCAKLSAgICAyMzcsIDIzNSwgMjU0LCAxODIsIDIzMiwgNTcsIDc2LCAyMjgsIDI0MSwgMjMxLCAxNTEsIDI1NCwgMTgyLCAyMzIsIDU3LCAKLSAgICA3NiwgMjMxLCAyMjgsIDc2LCA0NywgMjQ3LCAxNDksIDc2LCAyMzksIDIzMCwgMjM0LCAxLCAyMjUsIDEzMCwgMTE2LCAyMjYsIAotICAgIDE3MCwgMjUyLCAxMCwgMjM5LCAyNDQsIDIzMiwgMjU0LCAyNTQsIDY3LCAyNDQsIDk2LCAyNTIsIDgzLCAyNDYsIDIzNSwgCi0gICAgMjI4LCAxOTQsIDQyLCAzNywgMjUyLCAxMTUsIDIsIDIzMiwgNjUsIDQxLCAzNywgMjUyLCAxMTUsIDIsIDIzMiwgNjUsIDQ3LCAKLSAgICAyMzIsIDY5LCA3NiwgMjMyLCA2OSwgMjQ3LCAxNDksIDc2LCAyNDcsIDE0OSwgMjMyLCA2OSwgNzYsIDIyNiwgMTQ1LCA1LCAKLSAgICAyNDcsIDE3MywgMjAwLCAyMzMsIDM4LCA1MywgODYsIDExNywgMjUyLCA4MywgODYsIDgxLCAyNTIsIDgzLCAxODQsIDI1NCwgCi0gICAgNjksIDIwMCwgMjI5LCAxODYsIDI1MSwgODMsIDIyNSwgMTE2LCAxMzUsIDI1NCwgNjgsIDI1NCwgMjE4LCAyMjQsIDIzNSwgCi0gICAgMjUxLCA1MywgMjM2LCAxMjEsIDUzLCAyMjcsIDE4NywgMjUwLCAxMzAsIDIzOSwgMjIzLCAyMjUsIDEzMCwgMjQ3LCAxMywgCi0gICAgMjMyLCAxNzEsIDc2LCAxNTIsIDU2LCAyMzIsIDE3MCwgMjMyLCA3OCwgMjMyLCAyMDUsIDI0NiwgMjQzLCA1NiwgMjMyLCAKLSAgICAxNzAsIDI0NywgMzcsIDU2LCAyMzIsIDE3MCwgMTM1LCA1NiwgMjMyLCAxNzAsIDI0NiwgMjQzLCA1NiwgNzYsIDI0OCwgCi0gICAgMTM4LCAyNTAsIDI0MywgMjI2LCA3NCwgNjEsIDI0NiwgMjQzLCAyNDksIDEzOCwgMjM2LCAyMjgsIDEyLCAyMjgsIDE0NSwgCi0gICAgMjI0LCA5MiwgMjM5LCAxMTIsIDI0NiwgMjE2LCAyNTQsIDE0MSwgMjM5LCAyMjEsIDIyNiwgMTU2LCAyMzksIDIyMSwgMjI5LCAKLSAgICAxNzMsIDIzOSwgMjIxLCAyMzMsIDEwLCAyMzksIDI1MywgMjI3LCAxMzYsIDIyNywgMTk4LCAyNTUsIDM1LCAyMjcsIDEzNiwgCi0gICAgMjI3LCAxOTgsIDIzOSwgMjUzLCAxMCwgMjExLCAyMjksIDEyNywgMjU1LCAzNSwgMTAsIDIxMSwgMjI5LCAxMjcsIDIzNSwgCi0gICAgMjI1LCAyMSwgMjI5LCAxMjgsIDIzNSwgMSwgMjEsIDIyOSwgMTI4LCAyMjcsIDIxOSwgMjIzLCA4OSwgMjI3LCAyMTksIDcsIAotICAgIDMsIDEsIDc0LCAyMjcsIDIxOSwgMTU4LCAyMjcsIDIxOSwgMTczLCAyMjcsIDIxOSwgMTgzLCAyMjcsIDIxOSwgMTk0LCAKLSAgICAyMjcsIDIxOSwgMTg3LCAyMjcsIDIxOSwgMTkyLCAyMjcsIDIxOSwgNzksIDUzLCAyMjcsIDIxOSwgMjM2LCAxMjAsIDIyNywgCi0gICAgMjE5LCAyNDcsIDIwNCwgNTMsIDIyNywgMjE5LCA0MiwgMjMzLCAxODAsIDIyNywgMjE5LCA0MSwgMjMzLCAxODAsIDIyNywgCi0gICAgMjE5LCA3LCAzLCAxLCAxOTksIDIyNywgMjUzLCAyMjMsIDg5LCAyMjcsIDI1MywgMTE4LCAyMjcsIDI1MywgMTEzLCAyMjcsIAotICAgIDI1MywgMTY2LCAyMjcsIDI1MywgMTU4LCAyMjcsIDI1MywgMTczLCAyMjcsIDI1MywgMTgzLCAyMjcsIDI1MywgMTk0LCAKLSAgICAyMjcsIDI1MywgMTg3LCAyMjcsIDI1MywgMTkyLCAyMjcsIDI1MywgNzksIDUzLCAyMjcsIDI1MywgMjM2LCAxMjAsIDIyNywgCi0gICAgMjUzLCAyNDcsIDIwNCwgNTMsIDIyNywgMjUzLCA0MiwgMjMzLCAxODAsIDIyNywgMjUzLCA0MSwgMjMzLCAxODAsIDcsIAotICAgIDIyNywgMjUzLCAzLCAxLCA1NywgNywgMjI3LCAyNTMsIDMsIDEsIDcyLCA3LCAyMjcsIDI1MywgMywgMSwgNzMsIDcsIDIyNywgCi0gICAgMjUzLCAzLCAxLCAyMjQsIDczLCA3LCAyMjcsIDI1MywgMywgMSwgMjMwLCAyMjIsIDI0NywgMTYwLCA1MywgMjUxLCA2MiwgCi0gICAgNTMsIDI1MCwgMjM3LCA1MywgMjQ2LCAyMjksIDI0NiwgMjMxLCA1MywgMjM3LCAxNTksIDUzLCAyMzYsIDEzMSwgNTMsIAotICAgIDIzNSwgMjQyLCA1MywgMjMzLCAxMDgsIDUzLCAyMzEsIDU0LCA1MywgMjI0LCAxMDAsIDUzLCAxMzksIDIyOSwgMTAwLCA1MywgCi0gICAgMjQ5LCAxNDcsIDUzLCAyNDcsIDE2MSwgNTMsIDIzOCwgMTg3LCA1MywgMjI1LCAyNDYsIDUzLCAyNDgsIDEyMiwgNTMsIAotICAgIDI0NiwgMTExLCAyMzMsIDEzMSwgNTMsIDIzMywgMTA2LCA1MywgMjQ1LCAyMTUsIDUzLCAyNTQsIDQ1LCA1MywgMjQ0LCAKLSAgICAxNDgsIDUzLCAyNTEsIDIyOCwgNTMsIDM2LCA0MiwgMjQ1LCAxMzYsIDQ2LCAzNiwgNDEsIDI0NSwgMTM2LCA0NiwgMzYsIAotICAgIDE4MiwgNjEsIDIzNywgMTcxLCAyMzQsIDIsIDM2LCAyMjksIDYzLCA2MSwgMjM3LCAxNzEsIDIzNCwgMiwgMzYsIDI1NCwgCi0gICAgMTY4LCA2NywgNDYsIDM2LCAyNTEsIDg0LCA2NywgNDYsIDM2LCA0MiwgNjcsIDQ2LCAzNiwgNDEsIDY3LCA0NiwgMzYsIAotICAgIDIzMSwgMTQwLCAyMzQsIDIsIDM2LCAyNTEsIDg0LCAyMzEsIDE0MCwgMjM0LCAyLCAzNiwgMjU0LCAxNjgsIDIzMSwgMTQwLCAKLSAgICAyMzQsIDIsIDM2LCAxNTIsIDE5NywgNDYsIDM2LCAyNDYsIDI0MywgMTk3LCA0NiwgMzYsIDI0NywgMjM2LCAyNTEsIDEwNiwgCi0gICAgMzYsIDI0NywgMjM2LCAyMjgsIDEyMCwgMzYsIDI0NywgMjM2LCAyNDksIDI1MCwgMzYsIDI0NywgMjM2LCAyNTEsIDEwNywgCi0gICAgMjUzLCA2MywgMzYsIDQyLCA0MSwgNjcsIDQ2LCAzNiwgMjQ3LCAyMzYsIDIzMCwgMjE4LCAzNiwgMjQ3LCAyMzYsIDIzOCwgCi0gICAgMjMwLCAzNiwgMjQ3LCAyMzYsIDIyNSwgMTA4LCAyMzIsIDI1MSwgMjI2LCA3OCwgMzYsIDIzMSwgMTkzLCAyMjgsIDE2MiwgCi0gICAgMjM0LCAyLCAzNiwgNDcsIDYxLCAxOTUsIDIzNCwgMiwgMzYsIDI1NCwgMTc0LCA5OCwgMzYsIDIyNiwgNjYsIDIyNSwgMTMyLCAKLSAgICAzNiwgMjI0LCAxMTcsIDI1MiwgMTAyLCA0NiwgMzYsIDExNywgNjcsIDIzNCwgMiwgMzYsIDE4MiwgNDcsIDIyOCwgMTYyLCAKLSAgICAyMzQsIDIsIDM2LCA4MSwgMjQ1LCAxMzYsIDIsIDE3MSwgMjQ4LCAxMjQsIDM2LCAxMTcsIDI0NSwgMTM2LCAyLCAxNzEsIAotICAgIDI0OCwgMTI0LCAzNiwgNDIsIDY3LCA1MSwgMzYsIDQxLCA2NywgNTEsIDM2LCAyNTQsIDcwLCA0NiwgMjU1LCAzOSwgMjM0LCAKLSAgICA4NywgMjU1LCAyNiwgMTgwLCAyMjYsIDI0MCwgMjI4LCAxLCAxNTksIDYsIDI1MiwgNDQsIDI1MCwgNjIsIDI1MSwgMjIyLCAKLSAgICAyNTEsIDIxOSwgMjM3LCAxNzEsIDk4LCAyNTIsIDExLCAyMzQsIDg3LCAyNTIsIDM2LCAyMjUsIDEzNywgMjQ3LCAxNjIsIAotICAgIDI1MSwgMzAsIDIzMCwgMjE2LCAyNTAsIDYyLCAyNDcsIDExNiwgOTUsIDMsIDIxNCwgOTUsIDYsIDIxMiwgMjUyLCAxNDgsIAotICAgIDYsIDIxMiwgMTU5LCA2LCAyMTIsIDIzMywgMjAsIDI1MSwgMzAsIDIzMywgMjAsIDI1MSwgMzEsIDEwNywgMTM1LCAyMzMsIAotICAgIDY5LCA5NSwgNiwgNzQsIDI1MiwgMTQ4LCA2LCA3NCwgOTUsIDYsIDE0OSwgOTUsIDMsIDE0OSwgMjM4LCA0NywgNDUsIDI1MywgCi0gICAgMzYsIDk4LCAxNTksIDYsIDE5OSwgMjM0LCAxOTYsIDUzLCAyMjgsIDE1NSwgMjMxLCAyMzgsIDI1MSwgMTIsIDk1LCA2LCAKLSAgICAyMzMsIDI0NCwgMTU5LCA2LCAyMzMsIDI0NCwgMTU5LCA2LCAyMzIsIDEzOSwgOTUsIDYsIDE0NiwgMjUyLCAxNDgsIDYsIAotICAgIDE0NiwgMTU5LCA2LCAxNDYsIDIzMiwgMjA5LCAyMjcsIDgzLCAyMzEsIDIwMCwgMjI5LCAxNjksIDc2LCAyMjcsIDI5LCA1MywgCi0gICAgMjI2LCA5NCwgMTY1LCA1MywgMjI1LCAzMSwgMTU5LCA2LCAyMjMsIDExOSwgMjM0LCAxMiwgNTMsIDIzNCwgODIsIDUzLCAKLSAgICAyMzksIDIyMywgMjM0LCA4MiwgNTMsIDI1MiwgMTQ4LCA2LCAyMjMsIDExOSwgMjA5LCAxOSwgMywgMSwgMjM5LCAyMTUsIAotICAgIDIzOCwgMjUwLCA1MywgMjU0LCAxODAsIDUzLCA5NSwgNiwgMjU0LCAyNywgMjUyLCAxNDgsIDYsIDI1MiwgNDQsIDI0NywgCi0gICAgMTc2LCA5OCwgOTUsIDMsIDcyLCA5NSwgNiwgNzIsIDk1LCA2LCAyNDcsIDEzMCwgMjA5LCA2LCAyNDcsIDEzMCwgOTUsIDYsIAotICAgIDE4NSwgOTUsIDMsIDczLCA5MiwgOTgsIDI1MiwgMjAxLCA5OCwgMjQ2LCAzNSwgOTgsIDI1MCwgMTYxLCA5OCwgMjQwLCAxLCAKLSAgICAyMjgsIDE1MywgMjMxLCAxMDYsIDYsIDIzMiwgMTM5LCAyNDcsIDExOCwgNTMsIDE1OSwgMywgMjMzLCA2OSwgMTU5LCAzLCAKLSAgICAyNDYsIDE2OSwgMTU5LCA2LCAyNDYsIDE2OSwgMTU5LCA2LCAyMzMsIDY5LCAxNTksIDIzNiwgNCwgMjI3LCAyMzAsIDIwOSwgCi0gICAgMzAsIDYsIDIxNCwgMjA5LCAzMCwgNiwgMTQ5LCAyMDAsIDMwLCA2LCAxNDksIDIwOSwgMzAsIDYsIDIyNCwgMjUsIDE1OSwgCi0gICAgMjcsIDYsIDIyMiwgMjIyLCAxNTksIDI3LCAzLCAyMjIsIDIyMiwgMTU5LCAyNywgMywgNzIsIDE1OSwgMjcsIDMsIDc0LCAKLSAgICAxNTksIDI3LCAzLCAyMzksIDE4MiwgMjMyLCAxOTEsIDIzNywgMTcwLCAyMDksIDI1NCwgMTkzLCAyMzMsIDEyNCwgNTMsIAotICAgIDI1NCwgMjM1LCAyMDksIDMsIDI0NywgMTMwLCAxNCwgMzIsIDIzMSwgNCwgMjI4LCAxNTMsIDIyNCwgMTg5LCAyNDYsIDIzNSwgCi0gICAgMTY4LCAyMjYsIDIxMywgMjI0LCAxODksIDI0NiwgMjM1LCAxMzUsIDIyNiwgMjExLCAyMjQsIDE4OSwgMjQ2LCAyMzUsIAotICAgIDE2OCwgMjQ3LCA2NiwgMjI0LCAxODksIDI0NiwgMjM1LCAxMzUsIDI0NywgNjUsIDIyNCwgMTg5LCAyNDYsIDIzNSwgMTUyLCAKLSAgICAyNDcsIDY1LCAyMjQsIDE4OSwgMjQ2LCAyMzUsIDI0NiwgMjQzLCAyNDcsIDY1LCAyMjQsIDE4OSwgMjQ2LCAyMzUsIDE2OCwgCi0gICAgMjI4LCAyMTAsIDIyNCwgMTg5LCAyNDYsIDIzNSwgMjQ3LCAzNywgMjI4LCAyMDgsIDIyNCwgMTg5LCAyNDYsIDIzNSwgMTY4LCAKLSAgICAyNDgsIDE2LCAyMjQsIDE4OSwgMjQ2LCAyMzUsIDE1MiwgMjQ4LCAxNCwgMjI0LCAxODksIDI0NiwgMjM1LCAyNDcsIDM3LCAKLSAgICAyNDgsIDE0LCAyMjQsIDE4OSwgMjQ2LCAyMzUsIDIyOSwgMTYzLCAyNDgsIDE0LCAyNDYsIDIzNSwgMjM0LCAxOTcsIDExOCwgCi0gICAgMjMxLCAxMTUsIDIwNywgMTE4LCAyMzEsIDExNSwgMjA3LCAxMTMsIDIzMSwgMTE1LCAyMDcsIDE2NiwgMjMxLCAxMTUsIAotICAgIDIwNywgMTU4LCAyMzEsIDExNSwgMjA3LCAxNzMsIDIzMSwgMTE1LCAyMDcsIDE4MywgMjMxLCAxMTUsIDIwNywgMTk0LCAKLSAgICAyMzEsIDExNSwgMjA3LCAxODcsIDIzMSwgMTE1LCAyMDcsIDE5MiwgMjMxLCAxMTUsIDIwNywgMjI3LCAyMywgMjMxLCAxMTUsIAotICAgIDIwNywgMjQ3LCAyNTIsIDIzMSwgMTE1LCAyMDcsIDIyNSwgMjE4LCAyMzEsIDExNSwgMjA3LCAyNDcsIDYzLCAyMzEsIDExNSwgCi0gICAgMjA3LCAxNjgsIDI0NCwgMTM1LCAyMzEsIDExNSwgMjA3LCAyNDcsIDM3LCAyNDQsIDEzNSwgMjMxLCAxMTUsIDIwNywgMTY4LCAKLSAgICAyMjYsIDE5NCwgMywgMjMxLCAxMTUsIDIwNywgMTE4LCAzLCAyMzEsIDExNSwgMjA3LCAxMTMsIDMsIDIzMSwgMTE1LCAyMDcsIAotICAgIDE2NiwgMywgMjMxLCAxMTUsIDIwNywgMTU4LCAzLCAyMzEsIDExNSwgMjA3LCAxNzMsIDMsIDIzMSwgMTE1LCAyMDcsIDE4MywgCi0gICAgMywgMjMxLCAxMTUsIDIwNywgMTk0LCAzLCAyMzEsIDExNSwgMjA3LCAxODcsIDMsIDIzMSwgMTE1LCAyMDcsIDE5MiwgMywgCi0gICAgMjMxLCAxMTUsIDIwNywgMjI3LCAyMywgMywgMjMxLCAxMTUsIDIwNywgMjQ3LCAyNTIsIDMsIDIzMSwgMTE1LCAyMDcsIAotICAgIDIyNSwgMjE4LCAzLCAyMzEsIDExNSwgMjA3LCAyNDcsIDYzLCAzLCAyMzEsIDExNSwgMjA3LCAxNjgsIDI0NCwgMTM1LCAzLCAKLSAgICAyMzEsIDExNSwgMjA3LCAyNDcsIDM3LCAyNDQsIDEzNSwgMywgMjMxLCAxMTUsIDIwNywgMTY4LCAyMjYsIDE5NCwgMjMxLCAKLSAgICAxMTUsIDIwNywgMTY4LCAyMjYsIDE5NSwgMjUyLCA0NSwgMjIyLCAyMjIsIDIzMSwgMTE1LCAyMDcsIDI0NywgMzcsIDIyNiwgCi0gICAgMTk0LCAyMzEsIDExNSwgMjA3LCAyMjcsIDI0LCAyMjYsIDE5NCwgMjMxLCAxMTUsIDIwNywgMjAwLCAxNjgsIDI0NCwgMTM1LCAKLSAgICA3LCAzLCAxLCAyMDAsIDI1MiwgNDQsIDIzMSwgMTE1LCAyMDcsIDIyOCwgMjE3LCAyMzgsIDMsIDE1LCAyMzEsIDExNSwgCi0gICAgMjA3LCAyNDcsIDY0LCAyNDgsIDUwLCAxNSwgMjMxLCAxMTUsIDIwNywgMjQ3LCA2NCwgMjI2LCAxOTQsIDIzMSwgMTE1LCAKLSAgICAyMDcsIDE2OCwgMjQ0LCAxMzYsIDIyNiwgMTk0LCAxMTcsIDU4LCAyMjUsIDEwNiwgNTgsIDgxLCA1OCwgMjQ4LCAxMjUsIAotICAgIDU4LCA0MiwgNDEsIDU4LCA5OSwgMTAzLCA1OCwgMjM0LCAyNDUsIDIyNCwgMTMxLCA1OCwgMjM0LCAyNDUsIDI0OCwgNDUsIAotICAgIDU4LCAyMjgsIDE1MiwgMjQ4LCA0NSwgNTgsIDIyOCwgMTUyLCAyMjQsIDEzMSwgNTgsIDExNywgNjcsIDIsIDgyLCA4MSwgCi0gICAgNjcsIDIsIDgyLCAxMTcsIDIyNCwgMTQ4LCA1OCwgODEsIDIyNCwgMTQ4LCA1OCwgMTE3LCAxMzUsIDI0NSwgMTE3LCA1OCwgCi0gICAgMjI1LCAxMDYsIDEzNSwgMjQ1LCAxMTcsIDU4LCA4MSwgMTM1LCAyNDUsIDExNywgNTgsIDI0OCwgMTI1LCAxMzUsIDI0NSwgCi0gICAgMTE3LCA1OCwgMTE3LCA2NywgMiwgMjI3LCA4OSwgODEsIDY3LCAyLCAyMjcsIDg5LCAxMTcsIDY3LCAyNDYsIDIyNCwgMTI1LCAKLSAgICAyMjUsIDEwNiwgNjcsIDI0NiwgMjI0LCAxMjUsIDgxLCA2NywgMjQ2LCAyMjQsIDEyNSwgMjQ4LCAxMjUsIDY3LCAyNDYsIAotICAgIDIyNCwgMTI1LCA5OSwgMTAzLCA2NywgMiwgMjUzLCAyNCwgMTE3LCA2NywgMiwgODgsIDgxLCA2NywgMiwgODgsIDExNywgCi0gICAgNjcsIDIsIDIzNywgMTI0LCA4MSwgNjcsIDIsIDIzNywgMTI0LCA0MiwgNDEsIDIyNCwgMTQ4LCA1OCwgNDIsIDQxLCA2NywgCi0gICAgMiwgODIsIDI0OCwgMTI1LCAyMjMsIDM4LCA1OCwgMjI1LCAxMDYsIDY3LCAyLCAyMjYsIDE1MSwgMjM3LCAyMzAsIDIyNSwgCi0gICAgMTA2LCA2NywgMiwgMjI2LCAxNTEsIDIzMSwgMTQ1LCAyNDgsIDEyNSwgNjcsIDIsIDIyNiwgMTUxLCAyMzcsIDIzMCwgMjQ4LCAKLSAgICAxMjUsIDY3LCAyLCAyMjYsIDE1MSwgMjMxLCAxNDUsIDgxLCA2NywgMiwgMjUxLCAxMSwgMjQ4LCAxMjQsIDI0OCwgMTI1LCAKLSAgICA2NywgMiwgMjUxLCAxMSwgMjM3LCAyMzAsIDI1NCwgMTY4LCAyMjYsIDEwNiwgMjI5LCAxODksIDU4LCAyNTEsIDg0LCAyMjYsIAotICAgIDEwNiwgMjI5LCAxODksIDU4LCAyMzQsIDI0NSwgMjI0LCAxMzEsIDY3LCAxODAsIDE4MiwgMTI1LCAxMTcsIDY3LCAxODAsIAotICAgIDI1MywgMzYsIDEwNywgODEsIDY3LCAxODAsIDEyNSwgMjU0LCAxNjgsIDIzNCwgNDQsIDI1MSwgMTA3LCA1OCwgMjUxLCA4NCwgCi0gICAgMjM0LCA0NCwgMjUxLCAxMDcsIDU4LCAxMTcsIDI0NSwgMTM2LCAyLCAxNzEsIDIyNSwgMTA1LCAxMTcsIDI0NSwgMTM2LCAyLCAKLSAgICAxNzEsIDI0OCwgMTI0LCAyMjUsIDEwNiwgMjQ1LCAxMzYsIDIsIDE3MSwgMjMxLCAxNDUsIDIyNSwgMTA2LCAyNDUsIDEzNiwgCi0gICAgMiwgMTcxLCAyMzcsIDIzMCwgODEsIDI0NSwgMTM2LCAyLCAxNzEsIDIyNSwgMTA1LCA4MSwgMjQ1LCAxMzYsIDIsIDE3MSwgCi0gICAgMjQ4LCAxMjQsIDI0OCwgMTI1LCAyNDUsIDEzNiwgMiwgMTcxLCAyMzEsIDE0NSwgMjQ4LCAxMjUsIDI0NSwgMTM2LCAyLCAKLSAgICAxNzEsIDIzNywgMjMwLCA4MSwgNjcsIDEwNywgMTE3LCA1OCwgMjI1LCAxMDYsIDY3LCAxMTcsIDEwNiwgMjQ4LCAxMjUsIAotICAgIDU4LCAxMTcsIDY3LCAxMDcsIDgxLCA1OCwgMTE3LCAyMzMsIDIzMiwgMjU0LCA5MiwgMjI1LCAxMDYsIDIzMywgMjMyLCAKLSAgICAyNTQsIDkyLCA4MSwgMjMzLCAyMzIsIDI1NCwgOTIsIDI0OCwgMTI1LCAyMzMsIDIzMiwgMjU0LCA5MiwgMTE3LCAyNDUsIAotICAgIDEzNiwgMTA3LCA4MSwgMjQ1LCAxMzUsIDgxLCAyNDUsIDEzNiwgMTA3LCAxMTcsIDI0NSwgMTM1LCAxMTcsIDQ3LCA2NywgMiwgCi0gICAgODIsIDQyLCA0MSwgNDcsIDY3LCAyLCA4MiwgODEsIDQ3LCA2NywgMiwgODIsIDExNywgNDcsIDU4LCAyMjUsIDEwNiwgNDcsIAotICAgIDU4LCA4MSwgNDcsIDU4LCAyNDgsIDEyNSwgNDcsIDU4LCA0MiwgNDEsIDQ3LCA1OCwgOTksIDEwMywgNDcsIDU4LCAyMzQsIAotICAgIDI0NSwgMjI0LCAxMzEsIDQ3LCA1OCwgMjM0LCAyNDUsIDI0OCwgNDUsIDQ3LCA1OCwgMjI4LCAxNTIsIDI0OCwgNDUsIDQ3LCAKLSAgICA1OCwgMjI4LCAxNTIsIDIyNCwgMTMxLCA0NywgNTgsIDExNywgMjI2LCA2NiwgNTgsIDgxLCAyMjYsIDY2LCA1OCwgMTE3LCAKLSAgICAyMjgsIDExNSwgNTgsIDgxLCAyMjgsIDExNSwgNTgsIDIyNSwgMTA2LCA2NywgMiwgNDcsIDgyLCAyNDgsIDEyNSwgNjcsIDIsIAotICAgIDQ3LCA4MiwgMTE3LCAyNTAsIDEyOSwgNTgsIDIyNSwgMTA2LCAyNTAsIDEyOSwgNTgsIDgxLCAyNTAsIDEyOSwgNTgsIDI0OCwgCi0gICAgMTI1LCAyNTAsIDEyOSwgNTgsIDExNywgNjcsIDE4MCwgMTI1LCA4MSwgNjcsIDE4MCwgMTI1LCAxMTcsIDYzLCA1OCwgMjI1LCAKLSAgICAxMDYsIDYzLCA1OCwgODEsIDYzLCA1OCwgMjQ4LCAxMjUsIDYzLCA1OCwgMjI1LCAxMDYsIDYzLCA2NywgMjQ2LCAyMjQsIAotICAgIDEyNSwgMjI1LCAxMDYsIDYzLCA2NywgMjM0LCA2MiwgMjMzLCAxNDYsIDIyNSwgMTA2LCA2MywgNjcsIDIzNCwgNjIsIDIzMywgCi0gICAgMTQ3LCAyLCAxNjksIDEyNSwgMjI1LCAxMDYsIDYzLCA2NywgMjM0LCA2MiwgMjMzLCAxNDcsIDIsIDYxLCAxMjUsIDIyNSwgCi0gICAgMTA2LCA2MywgNDcsIDU4LCAyMjUsIDEwNiwgNjMsIDQ3LCA2NywgMjM0LCA2MiwgMjMzLCAxNDYsIDgxLCA2MywgNjcsIAotICAgIDI0NiwgMjI0LCAyMjQsIDE2NSwgMjM0LCAyNDUsIDIyNCwgMTMxLCA2NywgMTgwLCAyNTEsIDEwLCAyMjgsIDE1MiwgMjQ4LCAKLSAgICA0NSwgNjcsIDE4MCwgMjUxLCAxMCwgOTksIDEwMywgNjMsIDU4LCA0MSwgNjcsIDIsIDMsIDI1MSwgMTA2LCAyNDgsIDEyNSwgCi0gICAgNjcsIDExNywgMTA2LCAyMjUsIDEwNiwgNTgsIDE1MiwgODEsIDI1NCwgOTIsIDExNywgNjcsIDIsIDYxLCA4MiwgODEsIDY3LCAKLSAgICAyLCA2MSwgODIsIDQyLCA0MSwgNjcsIDIsIDYxLCA4MiwgMTE3LCA2NywgMiwgNDcsIDYxLCA4MiwgODEsIDY3LCAyLCA0NywgCi0gICAgNjEsIDgyLCA0MiwgNDEsIDY3LCAyLCA0NywgNjEsIDgyLCAxMTcsIDIzNCwgNDIsIDU4LCA4MSwgMjM0LCA0MiwgNTgsIDQyLCAKLSAgICA0MSwgMjM0LCA0MiwgNTgsIDMyLCAyNTQsIDIxNiwgMjUxLCA1MCwgMjMzLCAxNzUsIDI0OSwgMjM2LCAyMjYsIDIzMSwgCi0gICAgMjQ3LCAxNDUsIDIyNiwgMjMxLCAyNDksIDE1NCwgMTkwLCAyNDcsIDE0NiwgMjQ3LCAyNDEsIDIyOSwgMTY0LCAyNDAsIDEwLCAKLSAgICAyMzUsIDI1MCwgMjQ3LCAyNTQsIDIzNCwgODcsIDE5MCwgMjU0LCAxOTEsIDI0NywgMjU0LCAyMzQsIDg3LCAzLCAyNDcsIAotICAgIDI1NCwgMjM0LCA4NywgMjUxLCAyNiwgMjU0LCA4NywgMjM2LCAyMTMsIDI0OSwgMTU0LCAxOTAsIDI1MSwgMjgsIDI1NCwgCi0gICAgODcsIDIzNiwgMjEzLCAzLCAyNTEsIDI2LCAyNTQsIDg3LCAyMzYsIDIxMywgMjQ3LCAyMzMsIDEwNiwgMjMyLCAxOTMsIAotICAgIDIzNiwgNCwgMjMyLCAyMDAsIDIzNiwgNCwgMjUxLCAxNSwgMjM2LCA0LCAyMjcsIDIzMCwgMjM2LCAxMjEsIDUzLCAyMzYsIAotICAgIDExOSwgNTMsIDU2LCAyMzMsIDEwLCAyNDksIDE4MSwgMjI4LCAxOTQsIDIyOSwgMTY1LCAyMzYsIDEyMCwgMjU0LCA3MCwgCi0gICAgMjM0LCAzNywgMjMxLCAxNDAsIDIzNCwgMzcsIDI1MiwgODQsIDIzNCwgMzcsIDM3LCAyMzEsIDExMSwgMjUwLCAyMzIsIAotICAgIDIzMSwgMTExLCAyNDYsIDIzNywgMjMxLCAxMTEsIDIzMiwgMTg5LCA5NiwgMjQwLCAzLCA0MSwgMjU0LCAxODEsIDI1NCwgCi0gICAgMTgxLCAyMzYsIDIzMiwgMjU0LCAxODEsIDIyOCwgMTM3LCAyNTQsIDE4MSwgMjQ5LCAxODMsIDI0OSwgMTU0LCAxOTAsIAotICAgIDI0OSwgMTg2LCAyMzMsIDE4NSwgOTYsIDE5MCwgMjMzLCAxODUsIDk2LCAyMzcsIDEzOCwgMjU0LCAxODYsIDIzNywgMTM4LCAKLSAgICAyMzQsIDMxLCAyMzksIDIyNywgMjI1LCAxMjcsIDIzOSwgMjM5LCA0NywgMjM5LCAyMzksIDIyNiwgNjYsIDIzOSwgMjM5LCAKLSAgICAyNTEsIDIyLCAyMzksIDIzOSwgMjI3LCAyMDksIDIzOSwgMjM5LCAyMjQsIDE5OSwgMjM5LCAyMzksIDI1MSwgODQsIDIzOSwgCi0gICAgMjM5LCAyNTEsIDg0LCAyNTEsIDIyLCAyMzksIDIzOSwgMjU0LCAxNjgsIDI1MSwgMjIsIDIzOSwgMjM5LCAyMjYsIDIzMCwgCi0gICAgMjUyLCAyMzMsIDIzMSwgMjUyLCAyMzIsIDE5MCwgNTYsIDIzNiwgMTIwLCAyNDcsIDE1MCwgMjQ2LCAxMTcsIDIzMiwgMTkwLCAKLSAgICAyNDQsIDIyMCwgMjI2LCAxNTksIDIzNCwgMzcsIDIwMCwgMjA1LCAyMzksIDIyMywgMjM3LCAyNTAsIDE5MywgMjI4LCAyNDIsIAotICAgIDIyNCwgMTQ3LCAyMjQsIDg2LCAyMzIsIDIwMCwgMTkwLCAyMDUsIDIzNiwgMTIxLCAyMDUsIDI1NCwgNjUsIDEwNSwgOTYsIAotICAgIDE5MCwgMjU0LCA2NSwgMTA1LCA5NiwgMjU0LCAxMzcsIDEwNSwgOTYsIDI1NCwgMTM3LCAyNTIsIDY0LCAxOTAsIDI1NSwgCi0gICAgMzQsIDEwNSwgOTYsIDIzNSwgMTU2LCAyNTQsIDEzNywgMjM0LCAyNDgsIDI1NSwgMzQsIDEwNSwgOTYsIDI1NCwgMjEwLCAKLSAgICAxMDUsIDk2LCAxOTAsIDI1NCwgMjEwLCAxMDUsIDk2LCAyNTQsIDIxMCwgMTA1LCAxNDUsIDEwNSwgOTYsIDIyNiwgNjYsIAotICAgIDIwNSwgMjU0LCAyMTcsIDEwNSwgOTYsIDI0NywgMjAwLCA5NiwgMjQ2LCAxMTYsIDI0NywgMjAwLCA5NiwgMjQ5LCAyMzcsIAotICAgIDI1MiwgMTk1LCAyNTQsIDEzOSwgMjI2LCAyNDAsIDIzNywgMTc4LCAyNDYsIDExNiwgMTA1LCA5NiwgMjU0LCAxMzcsIDEwNSwgCi0gICAgMTgwLCAxNDUsIDIyNiwgMjQwLCAyNDAsIDI5LCAyMzQsIDg3LCAyNDAsIDI5LCAxMDYsIDE0NSwgMjU0LCAxMzcsIDEwNSwgCi0gICAgOTYsIDI1MSwgNjIsIDI0NywgMjAzLCAyNDcsIDIwNCwgMjUxLCA2MSwgMjMxLCAxNDAsIDI0MCwgMTcsIDEwNSwgOTYsIAotICAgIDIzMSwgMTQwLCAxMDUsIDk2LCAyNTEsIDQsIDk2LCAyNDcsIDE3NSwgMjQ3LCAyMDIsIDk2LCAyMjgsIDU5LCAyNDcsIDIwMywgCi0gICAgMjUwLCA0OCwgMTA1LCA5NiwgMTA1LCAxODAsIDI1MiwgNTUsIDI1MCwgNjMsIDIzNiwgMjMyLCAyNTIsIDU0LCAyMzIsIDY3LCAKLSAgICAxMDUsIDk2LCAxOTAsIDEwNSwgOTYsIDI0NCwgNjMsIDk2LCAxOTAsIDI0NCwgNjMsIDk2LCAyMjgsIDI1LCAyNDcsIDIwMCwgCi0gICAgOTYsIDIzNywgMjEzLCAxNDUsIDEwNSwgOTYsIDI0NSwgMjMxLCAxNDUsIDEwNSwgOTYsIDIzNywgMjEzLCAxMDcsIDEwNSwgCi0gICAgOTYsIDI0NSwgMjMxLCAxMDcsIDEwNSwgOTYsIDIzNywgMjEzLCAyNTIsIDY0LCAxOTAsIDEwNSwgOTYsIDI0NSwgMjMxLCAKLSAgICAyNTIsIDY0LCAxOTAsIDEwNSwgOTYsIDIzNiwgNjIsIDIzNywgMjEyLCAyMzYsIDYyLCAyNDUsIDIzMCwgMjUyLCAxOTUsIAotICAgIDE5MCwgMjQ3LCAyMDAsIDk2LCAxOTAsIDIzNywgMjEyLCAxOTAsIDI0NSwgMjMwLCAyMzUsIDE1NiwgMjM3LCAyMTMsIDIzNCwgCi0gICAgMjQ4LCAxMDUsIDk2LCAyMzUsIDE1NiwgMjQ1LCAyMzEsIDIzNCwgMjQ4LCAxMDUsIDk2LCAyMzcsIDIxMywgMTQ1LCAyNDcsIAotICAgIDIwMCwgOTYsIDI0NSwgMjMxLCAxNDUsIDI0NywgMjAwLCA5NiwgMjM1LCAxNTYsIDIzNywgMjEzLCAyMzQsIDI0OCwgMjQ3LCAKLSAgICAyMDAsIDk2LCAyMzUsIDE1NiwgMjQ1LCAyMzEsIDIzNCwgMjQ4LCAyNDcsIDIwMCwgOTYsIDIzNywgMjEzLCAxNDUsIDI0NSwgCi0gICAgMjMwLCAyNDUsIDIzMSwgMTQ1LCAyMzcsIDIxMiwgMjM1LCAxNTYsIDIzNywgMjEzLCAyMzQsIDI0OCwgMjQ1LCAyMzAsIAotICAgIDIzNSwgMTU2LCAyNDUsIDIzMSwgMjM0LCAyNDgsIDIzNywgMjEyLCAyMzIsIDIxMywgMjI3LCAyNDMsIDIzMiwgMjE0LCAKLSAgICAxNDUsIDEwNSwgOTYsIDIyNywgMjQ0LCAxNDUsIDEwNSwgOTYsIDIzMiwgMjE0LCAxNDUsIDI0NywgMjAwLCA5NiwgMjI3LCAKLSAgICAyNDQsIDE0NSwgMjQ3LCAyMDAsIDk2LCAyNDksIDE1NCwgMTkwLCAyMzIsIDIxNiwgMjQ5LCAxNTQsIDE5MCwgMjI3LCAyNDUsIAotICAgIDIyNywgMjUyLCAyMzQsIDg3LCAyMjcsIDIxOCwgMjM0LCA4NywgMTkwLCAxMDIsIDIyNywgMjUyLCAyMzQsIDg3LCAxOTAsIAotICAgIDEwMiwgMjI3LCAyMTgsIDIzNCwgODcsIDIyNywgMjUyLCAxMDYsIDE0NSwgMTA1LCA5NiwgMjI3LCAyMTgsIDEwNiwgMTQ1LCAKLSAgICAxMDUsIDk2LCAyMzUsIDE1NiwgMTAyLCAyMjcsIDI1MiwgMTA2LCAyMzQsIDI0OCwgMTA1LCA5NiwgMjM1LCAxNTYsIDEwMiwgCi0gICAgMjI3LCAyMTgsIDEwNiwgMjM0LCAyNDgsIDEwNSwgOTYsIDIyNywgMjUyLCAxMDYsIDIsIDE5MCwgMTA1LCA5NiwgMjI3LCAKLSAgICAyMTgsIDEwNiwgMiwgMTkwLCAxMDUsIDk2LCAyMzYsIDQ5LCAyMzYsIDUwLCAyMzYsIDUxLCAyMzYsIDUwLCAyMjUsIDEyNywgCi0gICAgMzcsIDI0MCwgMjksIDIzNCwgODcsIDM3LCAyMzQsIDI3LCAyMzQsIDg3LCAzNywgMjQwLCAyOSwgMTA2LCAxNDUsIDEwNSwgCi0gICAgOTYsIDM3LCAyMzQsIDI3LCAxMDYsIDE0NSwgMTA1LCA5NiwgMzcsIDI1MiwgMTYsIDM3LCAyNTAsIDIyNiwgMzMsIDIzMywgCi0gICAgMTAsIDMzLCAyMzYsIDEyMCwgMzMsIDIyNiwgMTU2LCAzMywgMjQ5LCAxODEsIDIyOCwgMTk0LCAzMywgNTYsIDIzNCwgMzcsIAotICAgIDMzLCAyMzEsIDE0MCwgMjM0LCAzNywgMzMsIDI1NCwgNzAsIDIzNCwgMzcsIDMzLCAyNDcsIDIwMywgMzMsIDI1MCwgMTMwLCAKLSAgICAyMjgsIDExOSwgMjMzLCAxMCwgMjI4LCAxMTksIDIzNiwgMTIwLCAyMjgsIDExOSwgMjI2LCAxNTYsIDIyOCwgMTE5LCA1NiwgCi0gICAgMjM0LCAzNywgNDEsIDIyNywgOTYsIDQyLCAyMjcsIDk2LCAxMDMsIDIyNywgOTYsIDk5LCAyMjcsIDk2LCAyNTQsIDczLCAKLSAgICAyMzYsIDEwMCwgMjI2LCA1MSwgMjQ2LCAyNTMsIDIyNiwgNjYsIDYxLCAyNTMsIDM2LCA0MSwgMjI1LCAyMzIsIDQ3LCA2MSwgCi0gICAgMjUzLCAzNiwgNDcsIDQxLCAyMjUsIDIzMiwgMjQ5LCAxNTQsIDE5MCwgMjMyLCAxODUsIDE5MCwgMjI2LCA1MSwgMjQ5LCAKLSAgICAxNTQsIDE5MCwgMjQ2LCAyNTQsIDIzNSwgMTU5LCA0NywgNjEsIDI1MywgMzYsIDQ3LCA0MSwgMjI1LCAyMzIsIDIzMiwgCi0gICAgMjE0LCAyMjUsIDEzNCwgMjMxLCAyMjEsIDIyNywgMjQ0LCAyMjUsIDEzNCwgMjMxLCAyMjEsIDIzNCwgMjQ2LCAyMjgsIDQsIAotICAgIDIzNCwgODcsIDI1MSwgMjYsIDI1NCwgODcsIDIzNCwgMjQ2LCAyMjgsIDMsIDIzNCwgMjQ2LCAyMjgsIDQsIDEwNiwgMTQ1LCAKLSAgICAxMDUsIDk2LCAyNTEsIDI2LCAyNTQsIDg3LCAyMzQsIDI0NiwgMjI4LCA0LCAxNDUsIDEwNSwgOTYsIDIzNCwgMjcsIDIzNCwgCi0gICAgODcsIDI0MCwgMjksIDIzNCwgODcsIDIzNiwgNTUsIDI0NSwgOTMsIDI1MSwgMzYsIDIzNywgMCwgMjM5LCAyMzYsIDIyNCwgCi0gICAgNTIsIDIzNSwgMjM1LCAyMzQsIDI0NywgNDEsIDI1NCwgMTgyLCAyLCAyNTQsIDEyMiwgNDEsIDIyNiwgNzgsIDIzNiwgNCwgCi0gICAgMjM3LCAxMzgsIDI1NCwgMTg2LCAyMzYsIDQsIDIzNywgMTM4LCAyMzQsIDMxLCAyMzYsIDQsIDIzOSwgMjI3LCAyMzYsIDQsIAotICAgIDIyNSwgMTI3LCAyNDksIDI1MSwgMjM0LCAzNywgNTYsIDIzNCwgMzcsIDIyOCwgNTksIDIzNCwgMzcsIDI0OSwgMTgxLCAKLSAgICAyMjYsIDE1NiwgMjUyLCAxMTksIDQyLCAyMzQsIDI0NiwgMjQ3LCAxMTcsIDIyOSwgMTg1LCAyMzIsIDIwMCwgNDEsIDIzNCwgCi0gICAgMjQ2LCAyNDcsIDExNywgMjI5LCAxODUsIDIzMiwgMjAwLCA0MiwgMjI5LCAxODUsIDIzMiwgMjAwLCA0MSwgMjI5LCAxODUsIAotICAgIDIzMiwgMjAwLCAyMDAsIDIyNiwgMTU5LCAyNDcsIDIwMywgMjUwLCAyMjMsIDIzNywgMTM4LCAyMzQsIDMxLCAyNTAsIDIyMywgCi0gICAgMjM3LCAxMzgsIDI1NCwgMTg2LCA0NywgMjI3LCAyNTEsIDQ3LCAyMjcsIDIxNywgNDcsIDIzOSwgMjI3LCA0NywgMjI1LCAKLSAgICAxMjcsIDIzMywgMjgsIDEwNSwgMjIsIDIzMywgMTg1LCA5NiwgMjM3LCAyMTMsIDIsIDI0OSwgMTQwLCAyNDUsIDIzMSwgMiwgCi0gICAgMjQ5LCAxNDAsIDIyNCwgMjM0LCAyMzYsIDYyLCAyMzcsIDIxMiwgMjI0LCAyMzQsIDIzNiwgNjIsIDI0NSwgMjMwLCAyMzcsIAotICAgIDIxMywgMTA1LCAxODAsIDE0NSwgMjQ1LCAyMzAsIDI0NSwgMjMxLCAxMDUsIDE4MCwgMTQ1LCAyMzcsIDIxMiwgMTA1LCAKLSAgICAxODAsIDE0NSwgMjM3LCAyMTIsIDEwNSwgMTgwLCAxNDUsIDI0NSwgMjMwLCAxMDUsIDE4MCwgMTQ1LCAyMzIsIDIxMywgCi0gICAgMTA1LCAxODAsIDE0NSwgMjI3LCAyNDMsIDI0OSwgMTU0LCAxOTAsIDIzMiwgMjE3LCAxNDUsIDI0NywgMjA1LCAyNDksIAotICAgIDE1NCwgMTkwLCAyMjcsIDI0NiwgMTQ1LCAyNDcsIDIwNSwgMTkwLCAzNywgMjQwLCAyOSwgMTA2LCAxNDUsIDEwNSwgOTYsIAotICAgIDE5MCwgMzcsIDIzNCwgMjcsIDEwNiwgMTQ1LCAxMDUsIDk2LCAzNywgMjQwLCAyOSwgMTA2LCAxNDUsIDE5MCwgMTA1LCA5NiwgCi0gICAgMzcsIDIzNCwgMjcsIDEwNiwgMTQ1LCAxOTAsIDEwNSwgOTYsIDIzNywgMjEzLCAyNTIsIDY0LCAxOTAsIDI0NywgMjAwLCAKLSAgICA5NiwgMjQ1LCAyMzEsIDI1MiwgNjQsIDE5MCwgMjQ3LCAyMDAsIDk2LCAyMzIsIDIxNCwgMjUyLCA2NCwgMTkwLCAyNDcsIAotICAgIDIwMCwgOTYsIDIyNywgMjQ0LCAyNTIsIDY0LCAxOTAsIDI0NywgMjAwLCA5NiwgMTkwLCAyMzQsIDI0NiwgMjI4LCA0LCAKLSAgICAyMzQsIDg3LCAyNDksIDE1NCwgMTkwLCAyNTEsIDI4LCAyNTQsIDg3LCAyMzQsIDI0NiwgMjI4LCAzLCAxOTAsIDIzNCwgCi0gICAgMjQ2LCAyMjgsIDQsIDEwNiwgMTQ1LCAxMDUsIDk2LCAyNDksIDE1NCwgMTkwLCAyNTEsIDI4LCAyNTQsIDg3LCAyMzQsIAotICAgIDI0NiwgMjI4LCA0LCAxNDUsIDI0NywgMjA1LCA2MSwgMjQ3LCAyNDksIDIzNiwgMTUyLCAxNjksIDI0NywgMjQ5LCA5OSwgCi0gICAgNDEsIDI1MCwgMSwgMjQ3LCAyNDksIDEwMywgNDEsIDI1MCwgMSwgMjQ3LCAyNDksIDI0NywgMjU0LCAxMDYsIDIsIDE4MiwgCi0gICAgMTY5LCA4MiwgMjQ3LCAyNTQsIDEwNiwgMiwgNjEsIDI1MywgMzYsIDI1NCwgNjMsIDI0NywgMjMzLCAxMDYsIDE2OSwgODIsIAotICAgIDMsIDI0NywgMjU0LCAxMDYsIDIsIDYxLCAyNTMsIDM2LCAyNTQsIDYzLCAyNDcsIDIzMywgMTA2LCAxNjksIDgyLCAyNDcsIAotICAgIDI1NCwgMTA2LCAyLCA1NiwgNDYsIDI0NywgMjU0LCAxMDYsIDIsIDIzNCwgNSwgMywgMjQ3LCAyNTQsIDEwNiwgMiwgMjM0LCAKLSAgICA1LCAyNDcsIDI1NCwgMTA2LCAyLCAyMjUsIDEzMywgMjQ3LCAyNTQsIDEwNiwgMiwgMTM1LCAxNjksIDIyOCwgMTAsIDI1MSwgCi0gICAgMjYsIDIsIDE4MiwgMTY5LCA4MiwgMjUxLCAyNiwgMiwgNjEsIDI1MywgMzYsIDI1NCwgNjMsIDI0NywgMjMzLCAxMDYsIAotICAgIDE2OSwgODIsIDMsIDI1MSwgMjYsIDIsIDYxLCAyNTMsIDM2LCAyNTQsIDYzLCAyNDcsIDIzMywgMTA2LCAxNjksIDgyLCAKLSAgICAyNTEsIDI2LCAyLCAyMzQsIDUsIDMsIDI1MSwgMjYsIDIsIDIzNCwgNSwgMjIzLCAxMjAsIDE1MCwgMjUzLCA1OSwgMjM2LCAKLSAgICAyMTIsIDI0OSwgMjUyLCA1MywgMjQ4LCAwLCA1OCwgMjQ0LCAxNTMsIDk5LCAyNTQsIDkzLCAxMDMsIDI1NCwgOTMsIDIzMiwgCi0gICAgMTk2LCAyMzMsIDExMSwgMjI0LCAxNDYsIDIzNywgMTcwLCA0MiwgMjUxLCAyMjQsIDQxLCAyNTEsIDIyNCwgNDIsIDI0NywgCi0gICAgMTcsIDQxLCAyNDcsIDE3LCAyNTIsIDEyNiwgNDEsIDI1MCwgMjQ1LCAyNTIsIDEyNiwgNDIsIDI1MCwgMjQ1LCAyMjYsIAotICAgIDEwNiwgNDEsIDI1MCwgMjQ1LCAyMjYsIDEwNiwgNDIsIDI1MCwgMjQ1LCAyMDAsIDE5MCwgNTMsIDM3LCAyMzcsIDExMywgCi0gICAgMjU0LCAxMjIsIDIzMCwgMTk5LCAyMzAsIDIwNCwgMjI3LCAyOSwgMjMxLCAyMzksIDIzMiwgMjM5LCAyNDAsIDcsIDIyNCwgCi0gICAgMjIyLCAyMjgsIDEyMCwgMjMzLCAyMywgMTA2LCAyMzksIDIzNSwgNTMsIDIwOSwgMTkwLCA1MywgMjI0LCAxNTMsIDI0NCwgCi0gICAgMTU0LCAyMjYsIDEwNiwgNDIsIDI1MSwgMTAsIDIyNiwgMTA2LCA0MSwgMjUxLCAxMCwgMjUyLCAxMjYsIDQyLCAyNTEsIDEwLCAKLSAgICAyNTIsIDEyNiwgNDEsIDI1MSwgMTAsIDIyNiwgMTA2LCAxMzIsIDIzOSwgMjM5LCAyNTIsIDEyNiwgMTMyLCAyMzksIDIzOSwgCi0gICAgMjQ2LCAyMjIsIDIyOCwgMTgwLCA5OSwgMjU0LCA5NCwgMjUyLCAxOTYsIDEzNSwgMTY5LCAyNTMsIDI2LCAyMzQsIDMyLCAKLSAgICAyMzgsIDIzMiwgMjQ3LCAxOTYsIDE4MCwgMjI2LCAyNDAsIDIzMSwgMTUzLCAyMjQsIDc0LCAyNDAsIDE3LCAxMDIsIDIzMSwgCi0gICAgMjM3LCAyNTIsIDExOCwgMjM4LCAyMzEsIDIzNywgMjM1LCAyNTQsIDE4MiwgMTA0LCAyMzEsIDE1MSwgMjU0LCAxODIsIAotICAgIDEwNCwgMjQ3LCAxOTYsIDE4MCwgMjI2LCAyNDAsIDIzNywgMjM3LCAyNTIsIDIwNywgMjMxLCAxMzksIDI1MCwgMjAwLCAKLSAgICAyNTQsIDIxNywgMjU0LCAxMDEsIDIyNywgMTM1LCAyMjYsIDk4LCAyMzEsIDU5LCAyNDksIDIxOSwgMjM0LCAyOCwgMjUxLCAKLSAgICAzOCwgMjI3LCA2OCwgMjI4LCAxODksIDI1MSwgMSwgMjUxLCAwLCAxNjIsIDE2MywgMTQsIDI0NCwgNzgsIDE2MiwgMTYzLCAKLSAgICAxNCwgMjI4LCAxMTMsIDIzMiwgODEsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgMjQ3LCAyMDUsIDE2MiwgMTYzLCAxNCwgCi0gICAgMjMyLCA4MiwgMjQ5LCAxODYsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgMjQ5LCAyNTAsIDE2MiwgMTYzLCAxNCwgMjMyLCAKLSAgICA4MiwgMjM5LCAxMDUsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgMjUxLCAxMDYsIDE2MiwgMTYzLCAxNCwgMjUxLCAxMDcsIAotICAgIDIyOCwgNDQsIDE2MiwgMTYzLCAxNCwgMjUxLCAxMDcsIDIzOSwgMTA1LCAxNjIsIDE2MywgMTQsIDIyOCwgMTk1LCAxMjUsIAotICAgIDE2MiwgMTYzLCAxNCwgMjUzLCA2NCwgMTI1LCAxNjIsIDE2MywgMTQsIDIzMiwgODIsIDIyOCwgMTk0LCAxNjIsIDE2MywgCi0gICAgMTQsIDIzMiwgODIsIDI1MywgNjMsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgMjM3LCAyMTIsIDE2MiwgMTYzLCAxNCwgMjMyLCAKLSAgICA4MiwgMjQ1LCAyMzAsIDE2MiwgMTYzLCAxNCwgMTE3LCAyMjUsIDYwLCAxNjIsIDE2MywgMTQsIDgxLCAyMjUsIDYwLCAxNjIsIAotICAgIDE2MywgMTQsIDIzMiwgODIsIDExNywgNTgsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgODEsIDU4LCAxNjIsIDE2MywgMTQsIAotICAgIDI1MSwgMTA3LCAyNTMsIDYzLCAxNjIsIDE2MywgMTQsIDEwMywgMjI3LCA5NywgMjI1LCAxMzMsIDE2MiwgMTYzLCAxNCwgCi0gICAgMjUwLCA0OCwgMjI4LCA0NCwgMTYyLCAxNjMsIDE0LCAyMzIsIDgyLCAxMDMsIDI1MiwgOSwgMTYyLCAxNjMsIDE0LCAyMzIsIAotICAgIDgyLCAyNTAsIDQ3LCAxNjIsIDE2MywgMTQsIDEwMywgMjI3LCA5NywgMjM5LCAxMDUsIDE2MiwgMTYzLCAxNCwgMjI1LCAKLSAgICAxMDYsIDIyNSwgNjAsIDE2MiwgMTYzLCAxNCwgMjMyLCA4MiwgMjI1LCAxMDYsIDU4LCAxNjIsIDE2MywgMTQsIDk5LCAyMjcsIAotICAgIDk3LCAyMzQsIDUsIDE2MiwgMTYzLCAxNCwgMjUwLCA1NywgMjI4LCA0NCwgMTYyLCAxNjMsIDE0LCAyMzIsIDgyLCA5OSwgCi0gICAgMjUyLCA5LCAxNjIsIDE2MywgMTQsIDIzMiwgODIsIDI1MCwgNTYsIDE2MiwgMTYzLCAxNCwgOTksIDIyNywgOTcsIDIzOSwgCi0gICAgMTA1LCAxNjIsIDE2MywgMTQsIDI0OCwgMTI1LCAyMjUsIDYwLCAxNjIsIDE2MywgMTQsIDIzMiwgODIsIDI0OCwgMTI1LCAKLSAgICA1OCwgMTYyLCAxNjMsIDE0LCAyMzIsIDU2LCAyMjUsIDEzMywgMTYyLCAxNjMsIDE0LCAyNTAsIDQ4LCAyMjUsIDEzMywgCi0gICAgMTYyLCAxNjMsIDE0LCAyNDksIDI1MSwgMjI1LCAxMzMsIDE2MiwgMTYzLCAxNCwgMjM5LCAxMDYsIDIyNSwgMTMzLCAxNjIsIAotICAgIDE2MywgMTQsIDI1MSwgMTA3LCAyMjUsIDEzMywgMTYyLCAxNjMsIDE0LCA5OSwgMjI5LCA2OSwgMjM5LCAxMDUsIDE2MiwgCi0gICAgMTYzLCAxNCwgMjMyLCA1NiwgMjMyLCA4MSwgMTYyLCAxNjMsIDE0LCAyNTEsIDEwNywgMjI4LCA1OCwgMTYyLCAxNjMsIDE0LCAKLSAgICAyMzIsIDgyLCAyNTEsIDYxLCAxNjIsIDE2MywgMTQsIDk5LCAyMjcsIDk3LCAyMTksIDE2MiwgMTYzLCAxNCwgMjUwLCA1NywgCi0gICAgMjE5LCAxNjIsIDE2MywgMTQsIDIyOCwgNTksIDIxOSwgMTYyLCAxNjMsIDE0LCAyMzksIDEwNiwgMjE5LCAxNjIsIDE2MywgCi0gICAgMTQsIDI1MSwgMTA3LCAyMTksIDE2MiwgMTYzLCAxNCwgMTAzLCAyMjksIDY5LCAyMjgsIDQ0LCAxNjIsIDE2MywgMTQsIDQyLCAKLSAgICAyMjksIDY5LCAyMjgsIDQ0LCAxNjIsIDE2MywgMTQsIDIyNiwgMTU5LCAyMTksIDE2MiwgMTYzLCAxNCwgMjQ1LCAyMzEsIAotICAgIDIxOSwgMTYyLCAxNjMsIDE0LCAyNTEsIDU1LCAxMjUsIDE2MiwgMTYzLCAxNCwgMjUwLCA1NywgMjA1LCAxNjIsIDE2MywgCi0gICAgMTQsIDIyMywgMzcsIDE2MiwgMTYzLCAxNCwgMjI4LCA0NSwgMjA1LCAxNjIsIDE2MywgMTQsIDIyOSwgMTg3LCAyMjUsIAotICAgIDEzMywgMTYyLCAxNjMsIDE0LCAyMzIsIDgyLCAxOTAsIDI0NywgMjA1LCAxNjIsIDE2MywgMTQsIDIzMiwgODIsIDIzMiwgCi0gICAgNjgsIDE2MiwgMTYzLCAxNCwgMTAzLCAyNTIsIDEwLCAyMDUsIDE2MiwgMTYzLCAxNCwgOTksIDI1MiwgMTAsIDIwNSwgMTYyLCAKLSAgICAxNjMsIDE0LCAyMzksIDIxNSwgMTYyLCAxNjMsIDE0LCAyMzEsIDE4MiwgMTYyLCAxNjMsIDE0LCAyMzQsIDY2LCAxNjIsIAotICAgIDE2MywgMTQsIDI1NCwgMjA2LCAyMjUsIDEzMywgMTYyLCAxNjMsIDE0LCAyNDcsIDIwNywgMjI1LCAxMzMsIDE2MiwgMTYzLCAKLSAgICAxNCwgMjM5LCAyMTYsIDIyNSwgMTMzLCAxNjIsIDE2MywgMTQsIDIzNCwgNjcsIDIyNSwgMTMzLCAxNjIsIDE2MywgMTQsIAotICAgIDI1NCwgMjA1LCAxOTAsIDI1MSwgMTgxLCA3NiwgNDEsIDI1NCwgMTgyLCAyLCAyNDgsIDEyNSwgMjIzLCAzOCwgNTgsIDIyOSwgCi0gICAgNDgsIDIzNCwgNDQsIDI1MiwgMTE4LCAyNTIsIDIxNiwgOTgsIDYxLCAyMzcsIDE3MSwgMiwgMjM2LCAxNTQsIDI0OSwgMTQwLCAKLSAgICAyMzksIDI0NCwgOTgsIDI1MSwgMjMsIDIyNSwgMTMxLCA5OCwgMjQ5LCAxOTcsIDIyNSwgMTMxLCA5OCwgMjQ3LCAyNDMsIAotICAgIDk4LCAyNTEsIDQ2LCA5OCwgNjMsIDM3LCAyLCAyNTEsIDIxOSwgNjEsIDIzNywgMTcwLCAyNDcsIDIyMywgOTgsIDI1NCwgCi0gICAgMjAxLCAyMzgsIDIzMywgOTgsIDI0NSwgMTAzLCA5OCwgMzMsIDE2OSwgMjUzLCAzNiwgMiwgMjM0LCAyNDEsIDMzLCAyMjYsIAotICAgIDc5LCAyNDgsIDEyNywgMjUyLCA5OSwgMjUxLCAxMDcsIDIsIDIzNCwgMjQ0LCA1OCwgMjI1LCAxMjksIDk4LCAyMzYsIDg5LCAKLSAgICA5OCwgMjQ0LCA5MSwgOTgsIDIzNCwgNDMsIDI0NSwgMTcxLCA5OCwgMjM0LCA0MywgMjM4LCA0NSwgOTgsIDIzMywgMTcwLCAKLSAgICA5OCwgMjMzLCAxNjksIDk4LCAyNDksIDIwMSwgMjUwLCAyMjEsIDE0LCAyMTEsIDExMywgMjI4LCAxNjQsIDk4LCAxNjIsIAotICAgIDE2MywgMTQsIDIzMiwgODEsIDI1MCwgNzEsIDIyOSwgMTc0LCAyMzgsIDIzMywgOTgsIDIzMiwgMjA3LCAyMzMsIDIzMywgCi0gICAgMjM1LCAxNDIsIDIzMywgMjMzLCAyMzIsIDIwNCwgMjMwLCAyMTksIDk4LCAyNTEsIDk0LCAyMzAsIDIxOSwgOTgsIDQyLCAKLSAgICAyMzMsIDE4MSwgMjI1LCAxMTMsIDg4LCA0MiwgMjMzLCAxODEsIDI0NywgMTQxLCA0MiwgMjMzLCAxODEsIDIwMywgODgsIAotICAgIDQxLCAyMzMsIDE4MSwgMjI1LCAxMTMsIDg4LCA0MSwgMjMzLCAxODEsIDI0NywgMTQxLCA0MSwgMjMzLCAxODEsIDIwMywgCi0gICAgODgsIDQyLCAzNywgMjUyLCAxMTUsIDIyNSwgMTEzLCAyNTEsIDEwLCA0MiwgMzcsIDI1MiwgMTE1LCAyNDcsIDE0MSwgNDIsIAotICAgIDM3LCAyNTIsIDExNSwgMjAzLCAyNTEsIDEwLCA0MSwgMzcsIDI1MiwgMTE1LCAyMjUsIDExMywgMjUxLCAxMCwgNDEsIDM3LCAKLSAgICAyNTIsIDExNSwgMjQ3LCAxNDEsIDQxLCAzNywgMjUyLCAxMTUsIDIwMywgMjUxLCAxMCwgNDIsIDI1MCwgMjIzLCAyNTIsIAotICAgIDExNSwgMjI1LCAxMTMsIDg4LCA0MiwgMjUwLCAyMjMsIDI1MiwgMTE1LCAyMzYsIDE1NCwgMjMzLCA2MywgNDIsIDI1MCwgCi0gICAgMjIzLCAyNTIsIDExNSwgMjAzLCA4OCwgMjUwLCAyMjMsIDI1MiwgMTE1LCAyNDcsIDE0MSwgNDEsIDI1MCwgMjIzLCAyNTIsIAotICAgIDExNSwgMjI1LCAxMTMsIDg4LCA0MSwgMjUwLCAyMjMsIDI1MiwgMTE1LCAyMzYsIDE1NCwgMjMzLCA2MywgNDEsIDI1MCwgCi0gICAgMjIzLCAyNTIsIDExNSwgMjAzLCA4OCwgMjM5LCAyNDAsIDI0NywgMTQxLCAxNjksIDIzNywgMTcxLCAyNDcsIDE0MSwgMjI1LCAKLSAgICAxMTMsIDQyLCAxNDUsIDIwMywgNDEsIDI1MCwgMjIzLCAyNTIsIDExNSwgMjMwLCAyMDUsIDIyNSwgMTEzLCA0MSwgMTQ1LCAKLSAgICAyMDMsIDQyLCAyNTAsIDIyMywgMjUyLCAxMTUsIDIzMCwgMjA1LCAyMjcsIDIzMSwgMjI2LCAxMDUsIDIyNywgMjMxLCAyNTIsIAotICAgIDEyNSwgMjI2LCAxMDYsIDM3LCAxMDQsIDI1MiwgMTI2LCAzNywgMTA0LCAyNTIsIDEyNiwgMzcsIDI1MiwgMTE1LCAxMDcsIAotICAgIDIyNiwgMTA2LCAzNywgMTA0LCAyOSwgMTQsIDI1MiwgMTI1LCA0MiwgNjEsIDc3LCAyMzcsIDE3MCwgNDEsIDYxLCA3NywgCi0gICAgMjM3LCAxNzAsIDE2OSwgMjMwLCAyMjgsIDIzNywgMTY5LCAxNjksIDIzMCwgMjI4LCAyMzcsIDE2OCwgMTY5LCAyMzAsIAotICAgIDIyOCwgMjM3LCAxNjcsIDE2OSwgMjMwLCAyMjgsIDIzNywgMTY2LCAyNTAsIDQwLCAxNCwgMTU3LCA2MSwgMjIsIDIyNiwgCi0gICAgMTA2LCAyMzEsIDE1MywgMjUwLCA0MCwgMTQsIDE1NywgNjEsIDIyLCAyNTIsIDEyNiwgMjMxLCAxNTMsIDI1MCwgNDAsIDE0LCAKLSAgICAxNTcsIDYxLCAyLCAyNTEsIDEwNiwgMjUwLCA0MCwgMTQsIDE1NywgMTAzLCAyMiwgMTY5LCAyLCAyNTEsIDEwNiwgMjUwLCAKLSAgICA0MCwgMTQsIDE1NywgOTksIDIyLCAxNjksIDIsIDI1MSwgMTA2LCAyNTAsIDQwLCAxNCwgMTU3LCA2MSwgMiwgMjI2LCA3OCwgCi0gICAgMjUwLCA0MCwgMTQsIDE1NywgMTAzLCAyMiwgMTY5LCAyLCAyMjYsIDc4LCAyNTAsIDQwLCAxNCwgMTU3LCA5OSwgMjIsIAotICAgIDE2OSwgMiwgMjI2LCA3OCwgMjUwLCA0MCwgMTQsIDE1NywgNjEsIDIyLCAyMjQsIDE0NywgMjUwLCA0MCwgMTQsIDE1NywgCi0gICAgMTAzLCAyMiwgMTY5LCAyLCAyMjQsIDE0NywgMjUwLCA0MCwgMTQsIDE1NywgOTksIDIyLCAxNjksIDIsIDIyNCwgMTQ3LCAKLSAgICAyNTAsIDQwLCAxNCwgMTU3LCAxMDMsIDIyLCAyNDQsIDIxMiwgMjUwLCA0MCwgMTQsIDE1NywgOTksIDIyLCAyNDQsIDIxMiwgCi0gICAgMjUwLCA0MCwgMTQsIDE1NywgNjEsIDIyLCAyMjYsIDEwNiwgMjM3LCAyMzcsIDI1MCwgNDAsIDE0LCAxNTcsIDYxLCAyMiwgCi0gICAgMjUyLCAxMjYsIDIzNywgMjM3LCAzNywgMjQ3LCAyLCAyMzEsIDE5NSwgOTgsIDI0OCwgMTAsIDk4LCA2MSwgMjM3LCAxNzEsIAotICAgIDI0NywgMTQxLCAyMzYsIDE5NCwgMjUyLCAxMDYsIDIzNiwgMTk0LCAxODIsIDEwNywgMjI5LCA2MiwgMjM2LCAxOTQsIDIyOSwgCi0gICAgNjMsIDEwNywgMjM3LCAxMzQsIDIzNiwgMTk0LCAxODIsIDEwNywgMTM1LCAyMjksIDUwLCAyMzYsIDE5NCwgMTM1LCAyMjksIAotICAgIDUxLCAxMDcsIDIzNywgMTM0LCAyMzYsIDE5NCwgMTM1LCAyMjksIDUxLCAyMzksIDExMywgMjM2LCAxOTQsIDIyNiwgNjMsIAotICAgIDIzNiwgMTk0LCAyMjcsIDMsIDIzNiwgMTk0LCAyMzMsIDEyOCwgMjQ4LCA0OSwgMjQ1LCAyMjUsIDI0NiwgMjA5LCAyMjYsIAotICAgIDEwNiwgMjMzLCAxODAsIDI1MiwgMTI2LCAyMzMsIDE4MCwgMjI2LCAxMDYsIDI1MCwgMjIzLCAxMDQsIDI1MiwgMTI2LCAKLSAgICAyNTAsIDIyMywgMTA0LCAyMjYsIDEwNiwgMjI2LCAxMDAsIDIyOSwgMTA0LCAxMDQsIDI1MiwgMTI2LCAyMjYsIDEwMCwgCi0gICAgMjI5LCAxMDQsIDEwNCwgNjMsIDIyNiwgODksIDI1MiwgMjA3LCAyMzEsIDE0MCwgMiwgMjUxLCAxMDYsIDIyOCwgMzEsIAotICAgIDI0NywgMjMsIDI1NSwgNDQsIDI1MCwgMjIwLCAyNDcsIDI1NSwgMjM5LCAyMjcsIDE0LCAzMiwgMjM0LCAyMDAsIDE0LCAzMiwgCi0gICAgMjI4LCA1NiwgMTA2LCAyNDUsIDExNiwgMTQsIDMyLCAyMjgsIDU2LCAxMDYsIDIyNiwgMjU1LCAxNCwgMzIsIDI0NywgMjMzLCAKLSAgICAxMDYsIDIyNiwgMjU1LCAxNCwgMzIsIDI0NywgMjMzLCAxMDYsIDIyNiwgOTIsIDE0LCAzMiwgMjQ3LCAyMjQsIDE0LCAzMiwgCi0gICAgMjU1LCAzNywgMTQsIDMyLCAyNTIsIDIxNSwgMTQsIDMyLCAyNTMsIDYyLCAxNCwgMzIsIDE2OSwgMjI3LCA5OCwgMTQsIDMyLCAKLSAgICAyMzcsIDE3MSwgMjQ3LCA5MCwgMTQsIDMyLCA2MSwgMjI3LCA5OCwgMTQsIDMyLCAyMTEsIDI0NywgOTAsIDE0LCAzMiwgCi0gICAgMjUyLCAzLCAyMzEsIDE5NCwgMTQsIDMyLCAyMjksIDg2LCAyMzQsIDEwLCAxNCwgMzIsIDIyOSwgODYsIDI0MCwgMTYsIDE0LCAKLSAgICAzMiwgMjUwLCAxMjYsIDIzNywgMTYzLCAyNDcsIDE4NSwgMTQsIDMyLCAyNTAsIDI4LCAyNTEsIDE4LCAxMTgsIDE0LCAzMiwgCi0gICAgMjUwLCAyOCwgMjUxLCAxOCwgMTEzLCAxNCwgMzIsIDI1MCwgMjgsIDI1MSwgMTgsIDE2NiwgMTQsIDMyLCAyNTAsIDI4LCAKLSAgICAyNTEsIDE4LCAxNTgsIDE0LCAzMiwgMjM1LCAxNTcsIDI1NSwgMzcsIDE0LCAzMiwgMjI3LCAxMzIsIDI0MCwgNzQsIDE0LCAKLSAgICAzMiwgMjQ3LCAyMzMsIDEwNiwgMjI2LCA5MywgMjUyLCAxNDIsIDE0LCAzMiwgMjUyLCAyNCwgMTQsIDMyLCAyNDcsIDIzMywgCi0gICAgMTA2LCAyMzYsIDIyNywgMTQsIDMyLCAyMjcsIDI0OSwgMTQsIDMyLCAyNDcsIDE4NSwgMTQsIDMyLCAyNDcsIDU2LCAyMjksIAotICAgIDE3MywgMTQsIDMyLCAyNDUsIDIyNCwgMjI5LCAxNzMsIDE0LCAzMiwgMjMxLCAyNDAsIDIyOSwgMTczLCAxNCwgMzIsIDIyNSwgCi0gICAgMTI2LCAyMjksIDE3MywgMTQsIDMyLCAyMjgsIDE0NSwgMTQsIDMyLCAyNTAsIDU0LCAyNTIsIDE0NSwgOTgsIDIzNCwgNDQsIAotICAgIDI1MiwgMTE4LCAxNCwgMzIsIDIzNSwgMTQ0LCAxNCwgMzIsIDI1MCwgNTUsIDIxMSwgMTEzLCAxNCwgMzIsIDIyNywgMjUwLCAKLSAgICAyMTEsIDExMywgMjM0LCA5MiwgODgsIDIzNCwgOTIsIDI1MSwgMjAwLCAyMzQsIDkyLCAyNDYsIDI1MiwgMjM0LCA5MiwgCi0gICAgMjM5LCAyMjMsIDI0NiwgMjUyLCAyMzQsIDkyLCAyNTIsIDIxMywgMjUyLCA4OSwgMjM0LCA5MiwgMjUyLCAxMjIsIDIyNiwgCi0gICAgMTcwLCAyMzQsIDkyLCAyNTIsIDExMywgMjUzLCAzOSwgMjQ0LCA2MiwgMjM0LCA5MiwgMjU0LCAxOTQsIDEwNiwgMjUxLCAKLSAgICAxODAsIDIzNCwgOTIsIDI1MCwgMTMwLCAyMzQsIDkyLCAyNTAsIDIxNCwgMjU1LCAzOSwgMjM0LCAxOTgsIDIzNCwgOTIsIAotICAgIDQ3LCAyNTMsIDYzLCAzMywgMjEsIDExOCwgMzMsIDIxLCAxMTMsIDMzLCAyMSwgMTY2LCAzMywgMjEsIDE1OCwgMzMsIDIxLCAKLSAgICAxNzMsIDMzLCAyMSwgMTgzLCAzMywgMjEsIDE5NCwgMzMsIDIxLCAxODcsIDMzLCAyMSwgMTkyLCAzMywgNjUsIDIyNywgMjMsIAotICAgIDMzLCA2NSwgMjQ3LCAyNTIsIDMzLCA2NSwgMjI1LCAyMTgsIDMzLCA2NSwgMjI2LCAyMDksIDMzLCA2NSwgMjQ2LCAyMzgsIAotICAgIDMzLCA2NSwgMjQ3LCA2NywgMzMsIDY1LCAyMjgsIDIxMiwgMzMsIDY1LCAyMjksIDE2MSwgMzMsIDY1LCAyNDgsIDE4LCAzMywgCi0gICAgNjUsIDIzNSwgNTksIDMzLCA2NSwgMjI1LCAyMTYsIDkzLCAyMSwgMTE4LCA5MywgMjEsIDExMywgOTMsIDIxLCAxNjYsIDkzLCAKLSAgICAyMSwgMTU4LCA5MywgMjEsIDE3MywgOTMsIDIxLCAxODMsIDkzLCAyMSwgMTk0LCA5MywgMjEsIDE4NywgOTMsIDIxLCAxOTIsIAotICAgIDkzLCA2NSwgMjI3LCAyMywgOTMsIDY1LCAyNDcsIDI1MiwgOTMsIDY1LCAyMjUsIDIxOCwgOTMsIDY1LCAyMjYsIDIwOSwgCi0gICAgOTMsIDY1LCAyNDYsIDIzOCwgOTMsIDY1LCAyNDcsIDY3LCA5MywgNjUsIDIyOCwgMjEyLCA5MywgNjUsIDIyOSwgMTYxLCAKLSAgICA5MywgNjUsIDI0OCwgMTgsIDkzLCA2NSwgMjM1LCA1OSwgOTMsIDY1LCAyMjUsIDIxNiwgMjEsIDE2OCwgMjQ2LCAyMTgsIAotICAgIDIyOCwgMzgsIDIxLCAxMzUsIDI0NiwgMjE4LCAyMjgsIDM4LCAyMSwgMTUyLCAyNDYsIDIxOCwgMjI4LCAzOCwgMjEsIDI0NiwgCi0gICAgMjQzLCAyNDYsIDIxOCwgMjI4LCAzOCwgMjEsIDI0NywgMzcsIDI0NiwgMjE4LCAyMjgsIDM4LCAyMSwgMjI4LCAyMTcsIAotICAgIDI0NiwgMjE4LCAyMjgsIDM4LCAyMSwgMjI5LCAxNjMsIDI0NiwgMjE4LCAyMjgsIDM4LCAyMSwgMjQ4LCAyMCwgMjQ2LCAKLSAgICAyMTgsIDIyOCwgMzgsIDIxLCAyMzUsIDYxLCAyNDYsIDIxOCwgMjI4LCAzOCwgNjUsIDIyNywgMjQsIDI0NiwgMjE4LCAyMjgsIAotICAgIDM4LCA2NSwgMjQ3LCAyNTMsIDI0NiwgMjE4LCAyMjgsIDM4LCA2NSwgMjI1LCAyMTksIDI0NiwgMjE4LCAyMjgsIDM4LCA2NSwgCi0gICAgMjI2LCAyMTAsIDI0NiwgMjE4LCAyMjgsIDM4LCA2NSwgMjQ2LCAyMzksIDI0NiwgMjE4LCAyMjgsIDM4LCA2NSwgMjQ3LCAKLSAgICA2OCwgMjQ2LCAyMTgsIDIyOCwgMzgsIDY1LCAyMjgsIDIxMywgMjQ2LCAyMTgsIDIyOCwgMzgsIDY1LCAyMjksIDE2MiwgCi0gICAgMjQ2LCAyMTgsIDIyOCwgMzgsIDY1LCAyNDgsIDE5LCAyNDYsIDIxOCwgMjI4LCAzOCwgNjUsIDIzNSwgNjAsIDI0NiwgMjE4LCAKLSAgICAyMjgsIDM4LCA2NSwgMjI1LCAyMTcsIDI0NiwgMjE4LCAyMjgsIDM4LCA5MywgNywgMywgMSwgNTcsIDkzLCA3LCAzLCAxLCAKLSAgICAyNTQsIDI3LCA5MywgNywgMywgMSwgMjUyLCA0NCwgOTMsIDcsIDMsIDEsIDIyMiwgMjIyLCA5MywgNywgMywgMSwgNzIsIAotICAgIDkzLCA3LCAzLCAxLCAyNDcsIDEzMCwgOTMsIDcsIDMsIDEsIDIxNCwgOTMsIDcsIDMsIDEsIDIxMiwgOTMsIDcsIDMsIDEsIAotICAgIDc0LCA5MywgNywgMywgMSwgMjM5LCAxODIsIDkzLCA3LCAzLCAxLCAyMzksIDc2LCA5MywgNywgMywgMSwgMTQ5LCA5MywgNywgCi0gICAgMywgMSwgMTg1LCA5MywgNywgMywgMSwgMTk5LCA5MywgNywgMywgMSwgNzMsIDkzLCA3LCAzLCAxLCAyMzMsIDI0NCwgOTMsIAotICAgIDcsIDMsIDEsIDIzMiwgMTM5LCA5MywgNywgMywgMSwgMTQ2LCA5MywgNywgMywgMSwgMTkzLCA5MywgNywgMywgMSwgMjI3LCAKLSAgICAxMDksIDkzLCA3LCAzLCAxLCA2NiwgOTMsIDcsIDMsIDEsIDE5NiwgOTMsIDcsIDMsIDEsIDIyNCwgMTc0LCA5MywgNywgMywgCi0gICAgMSwgMjI0LCA3MywgOTMsIDcsIDMsIDEsIDIyNCwgMjUsIDkzLCA3LCAzLCAxLCAyMjMsIDExOSwgMzMsIDcsIDYsIDEsIDU3LCAKLSAgICAzMywgNywgNiwgMSwgMjU0LCAyNywgMzMsIDcsIDYsIDEsIDI1MiwgNDQsIDMzLCA3LCA2LCAxLCAyMjIsIDIyMiwgMzMsIDcsIAotICAgIDYsIDEsIDcyLCAzMywgNywgNiwgMSwgMjQ3LCAxMzAsIDMzLCA3LCA2LCAxLCAyMTQsIDMzLCA3LCA2LCAxLCAyMTIsIDMzLCAKLSAgICA3LCA2LCAxLCA3NCwgMzMsIDcsIDYsIDEsIDIzOSwgMTgyLCAzMywgNywgNiwgMSwgMjM5LCA3NiwgMzMsIDcsIDYsIDEsIAotICAgIDE0OSwgMzMsIDcsIDYsIDEsIDE4NSwgMzMsIDcsIDYsIDEsIDE5OSwgMzMsIDcsIDYsIDEsIDczLCAzMywgNywgNiwgMSwgCi0gICAgMjMzLCAyNDQsIDMzLCA3LCA2LCAxLCAyMzIsIDEzOSwgMzMsIDcsIDYsIDEsIDE0NiwgMzMsIDcsIDYsIDEsIDE5MywgMzMsIAotICAgIDcsIDYsIDEsIDIyNywgMTA5LCAzMywgNywgNiwgMSwgNjYsIDMzLCA3LCA2LCAxLCAxOTYsIDMzLCA3LCA2LCAxLCAyMjQsIAotICAgIDE3NCwgMzMsIDcsIDYsIDEsIDIyNCwgNzMsIDMzLCA3LCA2LCAxLCAyMjQsIDI1LCAzMywgNywgNiwgMSwgMjIzLCAxMTksIAotICAgIDMzLCA3LCAzLCAxLCA1NywgMzMsIDcsIDMsIDEsIDI1NCwgMjcsIDMzLCA3LCAzLCAxLCAyNTIsIDQ0LCAzMywgNywgMywgMSwgCi0gICAgMjIyLCAyMjIsIDMzLCA3LCAzLCAxLCA3MiwgMzMsIDcsIDMsIDEsIDI0NywgMTMwLCAzMywgNywgMywgMSwgMjE0LCAzMywgCi0gICAgNywgMywgMSwgMjEyLCAzMywgNywgMywgMSwgNzQsIDMzLCA3LCAzLCAxLCAyMzksIDE4MiwgMzMsIDcsIDMsIDEsIDIzOSwgCi0gICAgNzYsIDMzLCA3LCAzLCAxLCAxNDksIDMzLCA3LCAzLCAxLCAxODUsIDMzLCA3LCAzLCAxLCAxOTksIDMzLCA3LCAzLCAxLCAKLSAgICA3MywgMzMsIDcsIDMsIDEsIDIzMywgMjQ0LCAzMywgNywgMywgMSwgMjMyLCAxMzksIDMzLCA3LCAzLCAxLCAxNDYsIDMzLCAKLSAgICA3LCAzLCAxLCAxOTMsIDMzLCA3LCAzLCAxLCAyMjcsIDEwOSwgMzMsIDcsIDMsIDEsIDY2LCAzMywgNywgMywgMSwgMTk2LCAKLSAgICAzMywgNywgMywgMSwgMjI0LCAxNzQsIDMzLCA3LCAzLCAxLCAyMjQsIDczLCAzMywgNywgMywgMSwgMjI0LCAyNSwgMzMsIDcsIAotICAgIDMsIDEsIDIyMywgMTE5LCAzMywgMjEsIDIyMywgODksIDIzNSwgMTU3LCAzMywgNjUsIDI0NywgMjUyLCAyMzUsIDE1NywgCi0gICAgMzMsIDY1LCAyMjUsIDIxOCwgMjM1LCAxNTcsIDMzLCA2NSwgMjI2LCAyMDksIDIzNSwgMTU3LCAzMywgNjUsIDI0NiwgMjM4LCAKLSAgICAyMzUsIDE1NywgMzMsIDY1LCAyNDcsIDY3LCAyMzUsIDE1NywgMzMsIDY1LCAyMjgsIDIxMiwgMjM1LCAxNTcsIDMzLCA2NSwgCi0gICAgMjI5LCAxNjEsIDIzNSwgMTU3LCAzMywgNjUsIDI0OCwgMTgsIDIzNSwgMTU3LCAzMywgNjUsIDIzNSwgNTksIDIzNSwgMTU3LCAKLSAgICAzMywgNjUsIDIyNSwgMjE2LCA0NywgMzMsIDIxLCAxMTgsIDQ3LCAzMywgMjEsIDExMywgNDcsIDMzLCAyMSwgMTY2LCA0NywgCi0gICAgMzMsIDIxLCAxNTgsIDQ3LCAzMywgMjEsIDE3MywgNDcsIDMzLCAyMSwgMTgzLCA0NywgMzMsIDIxLCAxOTQsIDQ3LCAzMywgCi0gICAgMjEsIDE4NywgNDcsIDMzLCAyMSwgMTkyLCA0NywgMzMsIDY1LCAyMjcsIDIzLCAyMzUsIDE1NywgMzMsIDIxLCAyMjMsIDg5LCAKLSAgICA3NywgODAsIDE1NywgMjQ0LCAyMTIsIDc3LCA4MCwgMTEyLCAyNDQsIDIxMiwgNzcsIDgwLCAxNTcsIDIyNSwgMzAsIDc3LCAKLSAgICA4MCwgMTEyLCAyMjUsIDMwLCA3NywgODAsIDE1NywgMjI2LCA2NiwgMjUwLCAxMzEsIDI0NCwgMjEyLCA3NywgODAsIDExMiwgCi0gICAgMjI2LCA2NiwgMjUwLCAxMzEsIDI0NCwgMjEyLCA3NywgODAsIDE1NywgMjI2LCA2NiwgMjUwLCAxMzEsIDIyNSwgMzAsIDc3LCAKLSAgICA4MCwgMTEyLCAyMjYsIDY2LCAyNTAsIDEzMSwgMjI1LCAzMCwgNzcsIDgwLCAxNTcsIDIzMiwgNzgsIDI1MCwgMTMxLCAyNDQsIAotICAgIDIxMiwgNzcsIDgwLCAxMTIsIDIzMiwgNzgsIDI1MCwgMTMxLCAyNDQsIDIxMiwgNzcsIDgwLCAxNTcsIDIzMiwgNzgsIDI1MCwgCi0gICAgMTMxLCAyMjUsIDMwLCA3NywgODAsIDExMiwgMjMyLCA3OCwgMjUwLCAxMzEsIDIyNSwgMzAsIDc3LCA4MCwgMTU3LCAxMDMsIAotICAgIDIyLCAyMzEsIDE1MywgNzcsIDgwLCAxMDMsIDE1NywgMjIsIDQxLCAyNDUsIDExMCwgNzcsIDgwLCAxMDMsIDExMiwgMjIsIAotICAgIDQxLCAyMzcsIDE4NCwgNzcsIDgwLCAxMTIsIDEwMywgMjIsIDIzMSwgMTUzLCA3NywgODAsIDE1NywgMTAzLCAyMiwgMjM3LCAKLSAgICAyMzcsIDc3LCA4MCwgMTAzLCAxNTcsIDIyLCA0MiwgMjQ1LCAxMTAsIDc3LCA4MCwgMTAzLCAxMTIsIDIyLCA0MiwgMjM3LCAKLSAgICAxODQsIDc3LCA4MCwgMTEyLCAxMDMsIDIyLCAyMzcsIDIzNywgNzcsIDgwLCAxNTcsIDk5LCAyMiwgMjMxLCAxNTMsIDc3LCAKLSAgICA4MCwgOTksIDE1NywgMjIsIDQxLCAyNDUsIDExMCwgNzcsIDgwLCA5OSwgMTEyLCAyMiwgNDEsIDIzNywgMTg0LCA3NywgODAsIAotICAgIDExMiwgOTksIDIyLCAyMzEsIDE1MywgNzcsIDgwLCAxNTcsIDk5LCAyMiwgMjM3LCAyMzcsIDc3LCA4MCwgOTksIDE1NywgCi0gICAgMjIsIDQyLCAyNDUsIDExMCwgNzcsIDgwLCA5OSwgMTEyLCAyMiwgNDIsIDIzNywgMTg0LCA3NywgODAsIDExMiwgOTksIDIyLCAKLSAgICAyMzcsIDIzNywgNzcsIDgwLCAxNTcsIDYxLCAyMiwgMjMxLCAxNTMsIDc3LCA4MCwgNjEsIDE1NywgMjIsIDQxLCAyNDUsIAotICAgIDExMCwgNzcsIDgwLCA5OSwgMTEyLCAyMiwgNDEsIDEwMywgMjM3LCAxODQsIDc3LCA4MCwgMTAzLCAxMTIsIDIyLCA0MSwgCi0gICAgOTksIDIzNywgMTg0LCA3NywgODAsIDYxLCAxMTIsIDIyLCA0MSwgMjM3LCAxODQsIDc3LCA4MCwgMTAzLCAxNTcsIDIyLCAKLSAgICA0MSwgOTksIDI0NSwgMTEwLCA3NywgODAsIDk5LCAxNTcsIDIyLCA0MSwgMTAzLCAyNDUsIDExMCwgNzcsIDgwLCAxMTIsIAotICAgIDYxLCAyMiwgMjMxLCAxNTMsIDc3LCA4MCwgMTU3LCA2MSwgMjIsIDIzNywgMjM3LCA3NywgODAsIDYxLCAxNTcsIDIyLCA0MiwgCi0gICAgMjQ1LCAxMTAsIDc3LCA4MCwgOTksIDExMiwgMjIsIDQyLCAxMDMsIDIzNywgMTg0LCA3NywgODAsIDEwMywgMTEyLCAyMiwgCi0gICAgNDIsIDk5LCAyMzcsIDE4NCwgNzcsIDgwLCA2MSwgMTEyLCAyMiwgNDIsIDIzNywgMTg0LCA3NywgODAsIDEwMywgMTU3LCAKLSAgICAyMiwgNDIsIDk5LCAyNDUsIDExMCwgNzcsIDgwLCA5OSwgMTU3LCAyMiwgNDIsIDEwMywgMjQ1LCAxMTAsIDc3LCA4MCwgCi0gICAgMTEyLCA2MSwgMjIsIDIzNywgMjM3LCA3NywgODAsIDE1NywgMTAzLCAyMiwgMjQ0LCAyMTIsIDc3LCA4MCwgNDIsIDExMiwgCi0gICAgMjIsIDQxLCAxMDMsIDIzNywgMTg0LCA3NywgODAsIDQxLCAxMTIsIDIyLCA0MiwgMTAzLCAyMzcsIDE4NCwgNzcsIDgwLCAKLSAgICAxMDMsIDE1NywgMjIsIDE2OSwgMjQ1LCAxMTAsIDc3LCA4MCwgMTAzLCAxMTIsIDIyLCAxNjksIDIzNywgMTg0LCA3NywgODAsIAotICAgIDQxLCAxNTcsIDIyLCA0MiwgMTAzLCAyNDUsIDExMCwgNzcsIDgwLCA0MiwgMTU3LCAyMiwgNDEsIDEwMywgMjQ1LCAxMTAsIAotICAgIDc3LCA4MCwgMTEyLCAxMDMsIDIyLCAyNDQsIDIxMiwgNzcsIDgwLCAxNTcsIDk5LCAyMiwgMjQ0LCAyMTIsIDc3LCA4MCwgCi0gICAgNDIsIDExMiwgMjIsIDQxLCA5OSwgMjM3LCAxODQsIDc3LCA4MCwgNDEsIDExMiwgMjIsIDQyLCA5OSwgMjM3LCAxODQsIDc3LCAKLSAgICA4MCwgOTksIDE1NywgMjIsIDE2OSwgMjQ1LCAxMTAsIDc3LCA4MCwgOTksIDExMiwgMjIsIDE2OSwgMjM3LCAxODQsIDc3LCAKLSAgICA4MCwgNDEsIDE1NywgMjIsIDQyLCA5OSwgMjQ1LCAxMTAsIDc3LCA4MCwgNDIsIDE1NywgMjIsIDQxLCA5OSwgMjQ1LCAxMTAsIAotICAgIDc3LCA4MCwgMTEyLCA5OSwgMjIsIDI0NCwgMjEyLCA3NywgODAsIDE1NywgNjEsIDIyLCAyNDQsIDIxMiwgNzcsIDgwLCA0MiwgCi0gICAgMTEyLCAyMiwgNDEsIDYxLCAyMzcsIDE4NCwgNzcsIDgwLCA0MSwgMTEyLCAyMiwgNDIsIDYxLCAyMzcsIDE4NCwgNzcsIDgwLCAKLSAgICA2MSwgMTU3LCAyMiwgMTY5LCAyNDUsIDExMCwgNzcsIDgwLCA5OSwgMTEyLCAyMiwgMTAzLCAxNjksIDIzNywgMTg0LCA3NywgCi0gICAgODAsIDEwMywgMTEyLCAyMiwgOTksIDE2OSwgMjM3LCAxODQsIDc3LCA4MCwgNjEsIDExMiwgMjIsIDE2OSwgMjM3LCAxODQsIAotICAgIDc3LCA4MCwgNDIsIDk5LCAxMTIsIDIyLCA0MSwgMTAzLCAyMzcsIDE4NCwgNzcsIDgwLCA0MSwgOTksIDExMiwgMjIsIDQyLCAKLSAgICAxMDMsIDIzNywgMTg0LCA3NywgODAsIDQyLCAxMDMsIDExMiwgMjIsIDQxLCA5OSwgMjM3LCAxODQsIDc3LCA4MCwgNDEsIAotICAgIDEwMywgMTEyLCAyMiwgNDIsIDk5LCAyMzcsIDE4NCwgNzcsIDgwLCAxMDMsIDE1NywgMjIsIDk5LCAxNjksIDI0NSwgMTEwLCAKLSAgICA3NywgODAsIDk5LCAxNTcsIDIyLCAxMDMsIDE2OSwgMjQ1LCAxMTAsIDc3LCA4MCwgNDEsIDE1NywgMjIsIDQyLCA2MSwgCi0gICAgMjQ1LCAxMTAsIDc3LCA4MCwgNDIsIDE1NywgMjIsIDQxLCA2MSwgMjQ1LCAxMTAsIDc3LCA4MCwgMTEyLCA2MSwgMjIsIAotICAgIDI0NCwgMjEyLCA3NywgODAsIDE1NywgNDcsIDI1MCwgMTMxLCAyNDQsIDIxMiwgNzcsIDgwLCAxMTIsIDQ3LCAyNTAsIDEzMSwgCi0gICAgMjQ0LCAyMTIsIDc3LCA4MCwgMTU3LCA0NywgMjUwLCAxMzEsIDIyNSwgMzAsIDc3LCA4MCwgMTEyLCA0NywgMjUwLCAxMzEsIAotICAgIDIyNSwgMzAsIDc3LCA4MCwgNDcsIDI0NCwgMjEyLCA3NywgODAsIDQ3LCAyMjUsIDMwLCA3NywgODAsIDEwMywgMjI4LCAKLSAgICAyNDEsIDIyLCA0MSwgMjQ4LCAxMzMsIDc3LCA4MCwgMTAzLCA0NywgMjIsIDQxLCAyMjgsIDI0MCwgNzcsIDgwLCA0NywgCi0gICAgMTAzLCAyMiwgMjMxLCAxNTMsIDc3LCA4MCwgMTAzLCAyMjgsIDI0MSwgMjIsIDQyLCAyNDgsIDEzMywgNzcsIDgwLCAxMDMsIAotICAgIDQ3LCAyMiwgNDIsIDIyOCwgMjQwLCA3NywgODAsIDQ3LCAxMDMsIDIyLCAyMzcsIDIzNywgNzcsIDgwLCA5OSwgMjI4LCAKLSAgICAyNDEsIDIyLCA0MSwgMjQ4LCAxMzMsIDc3LCA4MCwgOTksIDQ3LCAyMiwgNDEsIDIyOCwgMjQwLCA3NywgODAsIDQ3LCA5OSwgCi0gICAgMjIsIDIzMSwgMTUzLCA3NywgODAsIDk5LCAyMjgsIDI0MSwgMjIsIDQyLCAyNDgsIDEzMywgNzcsIDgwLCA5OSwgNDcsIDIyLCAKLSAgICA0MiwgMjI4LCAyNDAsIDc3LCA4MCwgNDcsIDk5LCAyMiwgMjM3LCAyMzcsIDc3LCA4MCwgNjEsIDIyOCwgMjQxLCAyMiwgNDEsIAotICAgIDI0OCwgMTMzLCA3NywgODAsIDYxLCA0NywgMjIsIDQxLCAyMjgsIDI0MCwgNzcsIDgwLCA0NywgNjEsIDIyLCAyMzEsIDE1MywgCi0gICAgNzcsIDgwLCA2MSwgMjI4LCAyNDEsIDIyLCA0MiwgMjQ4LCAxMzMsIDc3LCA4MCwgNjEsIDQ3LCAyMiwgNDIsIDIyOCwgMjQwLCAKLSAgICA3NywgODAsIDQ3LCA2MSwgMjIsIDIzNywgMjM3LCA3NywgODAsIDEwMywgMjI4LCAyNDEsIDIyLCAxNjksIDI0OCwgMTMzLCAKLSAgICA3NywgODAsIDEwMywgNDcsIDIyLCAxNjksIDIyOCwgMjQwLCA3NywgODAsIDQ3LCAxMDMsIDIyLCAyNDQsIDIxMiwgNzcsIAotICAgIDgwLCA5OSwgMjI4LCAyNDEsIDIyLCAxNjksIDI0OCwgMTMzLCA3NywgODAsIDk5LCA0NywgMjIsIDE2OSwgMjI4LCAyNDAsIAotICAgIDc3LCA4MCwgNDcsIDk5LCAyMiwgMjQ0LCAyMTIsIDc3LCA4MCwgNjEsIDIyOCwgMjQxLCAyMiwgMTY5LCAyNDgsIDEzMywgCi0gICAgNzcsIDgwLCA2MSwgNDcsIDIyLCAxNjksIDIyOCwgMjQwLCA3NywgODAsIDQ3LCA2MSwgMjIsIDI0NCwgMjEyLCA3NywgODAsIAotICAgIDE1NywgMjU0LCAxMjMsIDEwMywgMjIsIDIzMSwgMTUzLCA3NywgODAsIDE1NywgMjU0LCAxMjMsIDEwMywgMjIsIDIzNywgCi0gICAgMjM3LCA3NywgODAsIDE1NywgMjU0LCAxMjMsIDk5LCAyMiwgMjM3LCAyMzcsIDc3LCA4MCwgMTU3LCAyNTQsIDEyMywgOTksIAotICAgIDIyLCAyMzEsIDE1MywgNzcsIDgwLCAxNTcsIDI1MCwgMSwgMjI1LCAxMTMsIDQxLCAxODAsIDIwMywgMjM3LCAyMzcsIDc3LCAKLSAgICA4MCwgMTU3LCAyNTAsIDEsIDIyNSwgMTEzLCA0MiwgMTgwLCAyMDMsIDIzMSwgMTUzLCA3NywgODAsIDE1NywgMjUwLCAxLCAKLSAgICAyNTAsIDI0MywgNzcsIDgwLCAxNTcsIDIzNywgMjM3LCA3NywgODAsIDE1NywgMjI1LCAxMTYsIDc3LCA4MCwgMTU3LCAyMzEsIAotICAgIDE1MywgNzcsIDgwLCAxNTcsIDI0OCwgMTI3LCA3NywgODAsIDExMiwgMjM3LCAyMzcsIDc3LCA4MCwgMTEyLCAyMjUsIDExNiwgCi0gICAgNzcsIDgwLCAxMTIsIDIzMSwgMTUzLCA3NywgODAsIDExMiwgMjQ4LCAxMjcsIDc3LCA4MCwgMTU3LCA0MiwgMjIsIDExMiwgCi0gICAgMjMxLCAxNTMsIDc3LCA4MCwgMTU3LCA5OSwgMjIsIDExMiwgMjQ4LCAxMjcsIDc3LCA4MCwgMTEyLCA0MiwgMjIsIDE1NywgCi0gICAgMjMxLCAxNTMsIDc3LCA4MCwgMTEyLCA5OSwgMjIsIDE1NywgMjQ4LCAxMjcsIDIyNSwgMTEzLCAxMzIsIDI1MiwgMTQyLCAKLSAgICAyMDMsIDE2OCwgMjQ4LCAxNywgMjUyLCAxNDIsIDIwMywgMTY4LCAyMzIsIDc3LCAyNTIsIDE0MiwgMjAzLCAxNTIsIDI0OCwgCi0gICAgMTUsIDI1MiwgMTQyLCAyMDMsIDEzMiwgMjUyLCAxNDIsIDIwMywgMjQ3LCAzNywgMjQ4LCAxNSwgMjUyLCAxNDIsIDIwMywgCi0gICAgMTUyLCAyMzIsIDc1LCAyNTIsIDE0MiwgMjAzLCAyMjksIDE2MywgMjQ4LCAxNSwgMjUyLCAxNDIsIDI0NiwgMjE4LCAyNTIsIAotICAgIDE0MiwgNDIsIDIyOSwgMTYzLCAyNDgsIDE1LCAyNTIsIDE0MiwgNDIsIDE1MiwgMjMyLCA3NSwgMjUyLCAxNDIsIDQyLCAKLSAgICAyNDcsIDM3LCAyNDgsIDE1LCAyNTIsIDE0MiwgNDIsIDEzMiwgMjUyLCAxNDIsIDQyLCAxNTIsIDI0OCwgMTUsIDI1MiwgCi0gICAgMTQyLCA0MiwgMTY4LCAyMzIsIDc3LCAyNTIsIDE0MiwgNDIsIDE2OCwgMjQ4LCAxNywgMjUyLCAxNDIsIDQxLCAxMzIsIAotICAgIDI1MiwgMTQyLCAxNTcsIDIyOSwgMTM2LCAyMzYsIDIyOCwgMjI5LCAxMzYsIDI1MCwgMTM2LCAyMjksIDEzNiwgMjI1LCAKLSAgICAxMTMsIDE2OCwgMjQ4LCAxNywgMjUyLCAxNDIsIDQxLCAxNjgsIDI0OCwgMTcsIDI1MiwgMTQyLCAyMzIsIDgwLCAyMDMsIAotICAgIDIzNywgMjM3LCAyMzIsIDgwLCAyMDMsIDIzMSwgMTUzLCAyMzIsIDgwLCAyMjUsIDExMywgMjM3LCAyMzcsIDIzMiwgODAsIAotICAgIDIyNSwgMTEzLCA0MiwgMjIsIDIwMywgNDIsIDIyLCAyMDMsIDIzMSwgMTUzLCAyMzIsIDgwLCAyMjUsIDExMywgNDIsIDIyLCAKLSAgICAyMDMsIDIzMSwgMTUzLCAyMzIsIDgwLCAyMjUsIDExMywgNDIsIDIyLCAyMjUsIDExMywgNDEsIDIyLCAyMDMsIDIzNywgCi0gICAgMjM3LCAyMzIsIDgwLCAyMjUsIDExMywgNDIsIDIyLCAyMjUsIDExMywgNDEsIDIyLCAyMDMsIDIzMSwgMTUzLCAyMzIsIDgwLCAKLSAgICAyMjUsIDExMywgMjMxLCAxNTMsIDIzMiwgODAsIDIyNSwgMTEzLCA0MSwgMjIsIDIwMywgMjM3LCAyMzcsIDIzMiwgODAsIAotICAgIDIyNSwgMTEzLCA0MSwgMjIsIDIwMywgNDIsIDIyLCAyMDMsIDIzMSwgMTUzLCA4NiwgMjI4LCAxMjAsIDYzLCAyMjgsIDEyMCwgCi0gICAgNjMsIDM3LCAyLCAyMzEsIDEwMiwgMjUxLCA5LCA2MywgMzcsIDI1MSwgMjcsIDg2LCAzLCAyMjgsIDEyMCwgMzcsIDIsIAotICAgIDE2OSwgMjQ3LCA1NCwgMzcsIDIsIDYxLCAyNDcsIDU0LCAzNywgMiwgMjM0LCAyMiwgMjUwLCAyMzksIDI0NywgNTQsIDM3LCAKLSAgICAyLCAyMjUsIDExMywgNDIsIDE4MCwgMjAzLCA0MSwgMjQ3LCA1NCwgMzcsIDIsIDIyNSwgMTEzLCA0MSwgMTgwLCAyMDMsIAotICAgIDQyLCAyNDcsIDU0LCAzNywgMiwgMjUwLCAxLCAyNTAsIDIzOSwgMjQ3LCA1NCwgODYsIDMsIDIyOCwgMTIwLCA2MywgMywgCi0gICAgMjI4LCAxMjAsIDg2LCAyMzEsIDIzNiwgNjMsIDIzMSwgMjM2LCA4NiwgNjEsIDIzMSwgMjM2LCA2MywgNjEsIDIzMSwgMjM2LCAKLSAgICA4NiwgMjMzLCAxODMsIDYzLCAyMzMsIDE4MywgODYsIDIyNSwgMTE1LCAyMjYsIDc4LCA2MywgMjI1LCAxMTUsIDIyNiwgNzgsIAotICAgIDg2LCAyMjUsIDExNSwgMywgMjI2LCA3OCwgNjMsIDIyNSwgMTE1LCAzLCAyMjYsIDc4LCA4NiwgMjMxLCAxNTEsIDIyNiwgCi0gICAgNzgsIDYzLCAyMzEsIDE1MSwgMjI2LCA3OCwgODYsIDIzMSwgMTUxLCAzLCAyMjYsIDc4LCA2MywgMjMxLCAxNTEsIDMsIAotICAgIDIyNiwgNzgsIDg2LCAyMzEsIDE1MSwgMjMyLCAyNTIsIDYzLCAyMzEsIDE1MSwgMjMyLCAyNTIsIDg2LCAyNDgsIDEyNiwgCi0gICAgMjI2LCA3OCwgNjMsIDI0OCwgMTI2LCAyMjYsIDc4LCA4NiwgMjQ4LCAxMjYsIDMsIDIyNiwgNzgsIDYzLCAyNDgsIDEyNiwgCi0gICAgMywgMjI2LCA3OCwgODYsIDIzNywgMjM1LCAyMjYsIDc4LCA2MywgMjM3LCAyMzUsIDIyNiwgNzgsIDg2LCAyMzcsIDIzNSwgCi0gICAgMywgMjI2LCA3OCwgNjMsIDIzNywgMjM1LCAzLCAyMjYsIDc4LCA4NiwgMjM3LCAyMzUsIDIzMiwgMjUyLCA2MywgMjM3LCAKLSAgICAyMzUsIDIzMiwgMjUyLCA4NiwgMjQ5LCAyNTAsIDYzLCAyNDksIDI1MCwgNjMsIDI0OSwgMjUxLCAyNTEsIDI3LCA4NiwgMywgCi0gICAgMjQ5LCAyNTAsIDI0NywgNDIsIDIzNywgMTEzLCA2MywgMjUxLCAxMDYsIDI0OCwgMTM4LCAyNTEsIDEwNiwgMjUxLCAxMDcsIAotICAgIDIsIDYxLCAyNDcsIDU0LCAyNTIsIDgxLCA4NiwgMjUxLCAxMDYsIDI1MSwgMTA3LCAyLCA0MiwgMTMyLCAyNTIsIDE1MCwgCi0gICAgMjUxLCAxMDcsIDIsIDQxLCAxMzIsIDI1MiwgMTUwLCAyNTEsIDEwNywgMiwgMjAzLCAxMzIsIDI1MiwgMTUwLCAyNTEsIAotICAgIDEwNywgMiwgMjI1LCAxMTMsIDEzMiwgMjUyLCAxNTAsIDI1MSwgMTA3LCAyLCAyMjUsIDExMywgNDEsIDIzMiwgODAsIDI1MiwgCi0gICAgMTUwLCAyNTEsIDEwNywgMiwgMjU0LCAyMTcsIDI1MiwgNjQsIDIyNSwgMTEzLCA0MiwgMjMyLCA4MCwgMjUyLCAxNTAsIDQyLCAKLSAgICAxMzIsIDg2LCAyNTEsIDEwNiwgNDEsIDEzMiwgODYsIDI1MSwgMTA2LCAyMzksIDIyNCwgMjUyLCA4MywgMjM5LCAyMjQsIAotICAgIDYzLCAyNTEsIDEwNiwgMjI1LCAxMTMsIDEzMiwgMjM5LCAyMjQsIDYzLCAyNTEsIDEwNiwgMjAzLCAxMzIsIDIzOSwgMjI0LCAKLSAgICA2MywgMjUxLCAxMDYsIDIyNSwgMTEzLCA0MiwgMjMyLCA4MCwgMjUxLCAxMDQsIDI1NCwgMTIyLCAyMjUsIDExMywgNDEsIAotICAgIDIzMiwgODAsIDI1MSwgMTA0LCAyNTQsIDEyMiwgMjAzLCA0MSwgMjMyLCA4MCwgMjUxLCAxMDQsIDI1NCwgMTIyLCAyMDMsIAotICAgIDQyLCAyMzIsIDgwLCAyNTEsIDEwNCwgMjU0LCAxMjIsIDIyNSwgMTEzLCAxMzIsIDI1MSwgMTA2LCAyMDMsIDEzMiwgMjUxLCAKLSAgICAxMDYsIDg2LCAyMDMsIDQxLCAyMjYsIDc4LCA4NiwgMjAzLCA0MiwgMjI2LCA3OCwgODYsIDIyNSwgMTEzLCA0MiwgMjI2LCAKLSAgICA3OCwgODYsIDIyNSwgMTEzLCA0MSwgMjI2LCA3OCwgNjMsIDI1MiwgODMsIDM3LCAyLCA0MiwgMTMyLCAyNTIsIDE1MCwgMzcsIAotICAgIDIsIDQxLCAxMzIsIDI1MiwgMTUwLCAzNywgMiwgMjI1LCAxMTMsIDQyLCAyNTAsIDEsIDEzMiwgMjUyLCAxNTAsIDM3LCAyLCAKLSAgICAyMDMsIDQxLCAyNTAsIDEsIDEzMiwgMjUyLCAxNTAsIDYzLCAzNywgMiwgNjEsIDI1MiwgMTYwLCAyMzcsIDE3MCwgNjMsIAotICAgIDIyNSwgMTE1LCAyMjYsIDc5LCAyLCAyNDksIDE0MCwgMjI1LCAxMTUsIDIyNiwgNzksIDIsIDQyLCAxMzIsIDI1MiwgMTUwLCAKLSAgICAyMjUsIDExNSwgMjI2LCA3OSwgMiwgNDEsIDEzMiwgMjUyLCAxNTAsIDIzOCwgOSwgMjUxLCAxMDYsIDYzLCAzNywgMiwgCi0gICAgMjI1LCAxMTMsIDQyLCAyMzIsIDc5LCA2MywgMzcsIDIsIDIwMywgNDIsIDIzMiwgNzksIDYzLCAzNywgMiwgMjAzLCA0MSwgCi0gICAgMjMyLCA3OSwgNjMsIDM3LCAyLCAyMjUsIDExMywgNDEsIDIzMiwgNzksIDYzLCAyNTEsIDEwNywgMiwgMjI1LCAxMTMsIDQyLCAKLSAgICAyMzIsIDc5LCA2MywgMjUxLCAxMDcsIDIsIDIwMywgNDIsIDIzMiwgNzksIDYzLCAyNTEsIDEwNywgMiwgMjAzLCA0MSwgCi0gICAgMjMyLCA3OSwgNjMsIDI1MSwgMTA3LCAyLCAyMjUsIDExMywgNDEsIDIzMiwgNzksIDIyNSwgMTEzLCA0MiwgMjI2LCA3OCwgCi0gICAgMjI1LCAxMTMsIDQxLCAyMjYsIDc4LCAyMDMsIDQyLCAyMjYsIDc4LCA2MywgMjM2LCAyMjgsIDIyOCwgMTIwLCA4NiwgMjM2LCAKLSAgICAyMjgsIDIyOCwgMTIwLCA2MywgMjM2LCAyMjgsIDMsIDIyOCwgMTIwLCA4NiwgMjM2LCAyMjgsIDMsIDIyOCwgMTIwLCAyMDMsIAotICAgIDQxLCAyMjYsIDc4LCA4NiwgMjI3LCAyMjgsIDIsIDIzMSwgMjQ4LCAyNTEsIDc1LCAyMjUsIDE0MiwgMjI4LCAxNzEsIDI1MSwgCi0gICAgNTcsIDg2LCAyMjgsIDU4LCA2MywgMjI4LCA1OCwgMjM3LCAxODMsIDIyNiwgMTg0LCAyMjcsIDIyNywgMjU0LCA4MywgMjM1LCAKLSAgICAzLCAyNTAsIDMzLCAyMzUsIDMsIDI1MSwgMzUsIDIzNCwgMzQsIDg2LCAyMjcsIDI4LCA2MywgMjI3LCAyOCwgMjUzLCA0OCwgCi0gICAgMjUyLCAxMTgsIDI1MywgNDgsIDc3LCAyLCAyNTEsIDE4MCwgMjUzLCA0OCwgNzcsIDIsIDIyNCwgNzMsIDIzMSwgNSwgMjI1LCAKLSAgICAxNDMsIDIsIDIzMiwgMTAsIDI0OCwgMTEzLCAyNDQsIDE1OCwgMjUyLCAxOTQsIDYzLCAyMjksIDY3LCAyMzMsIDYzLCA4NiwgCi0gICAgMjI5LCA2NywgMjMzLCA2MywgMjI5LCAxMzIsIDIwMCwgMjMxLCAxMDYsIDI0NywgMTYsIDI0NSwgMTE1LCAyNTIsIDgzLCAKLSAgICA4NiwgNDIsIDIzMiwgMjUxLCAyNDAsIDgsIDg2LCA0MSwgMjMyLCAyNTEsIDI0MCwgOCwgNjMsIDQyLCAyMzIsIDI1MSwgCi0gICAgMjQwLCA4LCA2MywgOTksIDIzMiwgMjUxLCAyNDAsIDgsIDYzLCA0MSwgMjMyLCAyNTEsIDI0MCwgOCwgNjMsIDEwMywgMjMyLCAKLSAgICAyNTEsIDI0MCwgOCwgMjI4LCAxOTksIDIyLCAyNTAsIDI0MiwgMjUxLCAyNTIsIDUzLCAyMzIsIDE2LCA1MywgMjUyLCAxNjYsIAotICAgIDUzLCAyNTIsIDM1LCAyNTQsIDE3NywgMjM0LCAyMywgMjUwLCAyNDMsIDI1MSwgMTcwLCAyMzEsIDE4MiwgMjUwLCAyNDQsIAotICAgIDEwNiwgMjM3LCAxMjEsIDI1MCwgMjQ0LCAxMDYsIDIzOSwgMTYxLCAyMjgsIDU5LCAyMiwgMjUwLCAyNDcsIDI0NywgMTA3LCAKLSAgICA5OCwgMjU1LCAyMywgMjI5LCAxMzQsIDI0NSwgMTUwLCAyMiwgMjI5LCAxMywgMjMzLCAxNTAsIDk4LCAyMjMsIDE5MywgCi0gICAgMjIzLCAyNDgsIDIyNiwgNzAsIDMyLCAyNDUsIDExMiwgMjI2LCA3MCwgMzIsIDIzOCwgMjQsIDIyNiwgNzAsIDMyLCAyNDcsIAotICAgIDQ2LCAyMjYsIDcwLCAzMiwgMjI2LCAxODUsIDIyNiwgNzAsIDMyLCAyMjQsIDExMSwgMjI2LCA3MCwgMzIsIDIyNCwgMTUxLCAKLSAgICAyMjYsIDcwLCAzMiwgMjM2LCA3NCwgMjI2LCA3MCwgMzIsIDI0OCwgNDgsIDIyNCwgMTI1LCAxMDYsIDI1MCwgMTgsIDYzLCAKLSAgICAyNDYsIDIyMSwgMjQ3LCAxMjUsIDYzLCAyMjgsIDE3OSwgMjQ3LCAxMjUsIDg2LCAyMjgsIDE3OSwgMjQ3LCAxMjUsIDYzLCAKLSAgICAyMjcsIDIyOCwgMiwgMjMxLCAyNDgsIDI0NywgNDUsIDIzMiwgNzcsIDIzNiwgODQsIDIzOCwgNSwgMjMyLCA3NywgMjM2LCAKLSAgICA4NCwgMjM2LCAyMDksIDI0NywgODMsIDUzLCAyNDgsIDQ4LCAyMzcsIDM5LCA1MywgMjM5LCA4OSwgMjMwLCAyMzksIDIyNSwgCi0gICAgOTgsIDIzNSwgMTUwLCAyMzMsIDgsIDI1NCwgMTExLCAyMjcsIDYwLCAyNDYsIDEyMywgMjUyLCAyMiwgMjM3LCAyMTYsIAotICAgIDIyNCwgMjE0LCAyMzcsIDE5MSwgMjMwLCAyMjAsIDIzMSwgMTcsIDI1MiwgMTMsIDI1NCwgMTM0LCAyMzMsIDMxLCA2MywgCi0gICAgMjUxLCAxNzUsIDIzOCwgMTg5LCA2MywgMjUxLCAxNzUsIDIzMiwgNzAsIDYzLCAyNTEsIDE3NSwgMjMxLCAxMTIsIDYzLCAKLSAgICAyNTEsIDE3NSwgMjUyLCAxNTksIDYzLCAyNTEsIDE3NSwgMjM4LCAxNTIsIDYzLCAyNTEsIDE3NSwgMjMzLCAxNTksIDg2LCAKLSAgICAyNTEsIDE3NSwgMjM4LCAxODksIDg2LCAyNTEsIDE3NSwgMjMyLCA3MCwgODYsIDI1MSwgMTc1LCAyMzEsIDExMiwgODYsIAotICAgIDI1MSwgMTc1LCAyNTIsIDE1OSwgODYsIDI1MSwgMTc1LCAyMzgsIDE1MiwgODYsIDI1MSwgMTc1LCAyMzMsIDE1OSwgODYsIAotICAgIDIyOCwgMTQzLCAyMjcsIDIzOSwgNjMsIDI0NSwgMTE1LCAyMjcsIDIzOSwgNjMsIDI0OSwgMjUxLCAyMjcsIDIzOSwgODYsIAotICAgIDI1MSwgNzQsIDIyNywgMjM5LCA2MywgMjI4LCAxNDMsIDIyNywgMjM5LCA4NiwgMjQ1LCAxMTUsIDIyNywgMjM5LCA4NiwgCi0gICAgMjQ5LCAyNTEsIDIyNywgMjM5LCA2MywgMjUxLCA3NCwgMjI3LCAyMzksIDI0NCwgMTU4LCAyMjgsIDEyNCwgMjMyLCA3NywgCi0gICAgMjM0LCAyMzgsIDI0OCwgMTcsIDIzNCwgMjM4LCAyNTIsIDIzNiwgMjQ4LCAxNywgMjM0LCAyMzUsIDI1MiwgMjM2LCAyMjgsIAotICAgIDIxMSwgMjM0LCAyMzUsIDIzNiwgMjksIDI0NywgMjUsIDUzLCAyMzYsIDI5LCAyMzUsIDIyNCwgNTMsIDIzNiwgMjksIDIyOSwgCi0gICAgMTI0LCA1MywgMjI0LCAxMzEsIDE1MSwgMjUwLCAyNDMsIDI0OCwgNDUsIDE1MSwgMjUwLCAyNDMsIDIyNSwgMTIzLCAyMzEsIAotICAgIDIzMiwgOTgsIDIzMSwgMjMyLCAxNCwgMzIsIDIyNSwgMTk1LCAyMzMsIDE3LCAyMzEsIDIzMiwgMTQsIDMyLCAyMjUsIDE5NCwgCi0gICAgMjMzLCAxNywgMjMxLCAyMzIsIDE0LCAzMiwgMjI1LCAxOTMsIDIzMywgMTcsIDIzMSwgMjMyLCAxNCwgMzIsIDIyNSwgMTkyLCAKLSAgICAyMzMsIDE3LCAyMzEsIDIzMiwgMTQsIDMyLCAyMjUsIDE5MSwgMjMzLCAxNywgMjMxLCAyMzIsIDE0LCAzMiwgMjI1LCAxOTAsIAotICAgIDIzMywgMTcsIDIzMSwgMjMyLCAxNCwgMzIsIDIyNSwgMTg5LCAyMzMsIDE3LCAyMzEsIDIzMiwgMTQsIDMyLCAyNDYsIDEyMSwgCi0gICAgMjM3LCAxLCA4NiwgMjI1LCAxMjMsIDIzMSwgMjMyLCA5OCwgMjMxLCAyMzMsIDIzMywgMTk2LCA5OCwgMjMzLCAxNzQsIAotICAgIDIzMywgMTk2LCA5OCwgMjMzLCAxMTYsIDIzMywgMTk2LCA1MywgMjI0LCAxMjMsIDk4LCAyNDksIDI0NCwgMjQ3LCAxMjQsIAotICAgIDI0OSwgMjQ0LCAyNDcsIDEyMywgMjQ5LCAyNDQsIDI0NywgMTIyLCAyNDksIDI0NCwgMjQ3LCAxMjEsIDI0OSwgMjQ0LCAKLSAgICAyNDcsIDEyMCwgMjQ5LCAyNDQsIDI0NywgMTE5LCA2MywgMjUxLCAxMDcsIDIsIDU2LCAyMzEsIDE1MywgNjMsIDI1MSwgCi0gICAgMTA3LCAyLCAxMzUsIDI0OSwgMTM4LCA4NiwgMjUxLCAxMDcsIDIsIDYzLCA1NiwgMjMxLCAxNTMsIDg2LCAyNTEsIDEwNywgCi0gICAgMiwgMTM1LCA2MywgMjQ5LCAxMzgsIDIzNiwgOTIsIDMyLCAyMjMsIDI0OCwgMjM2LCA5MiwgMzIsIDIyMywgMTkyLCAyNDksIAotICAgIDIyNywgMzIsIDI0NSwgMjMyLCAyMjMsIDI0OCwgMjQ5LCAyMjcsIDMyLCAyMzcsIDIxMSwgMjIzLCAxOTIsIDI0OSwgMjI3LCAKLSAgICAzMiwgMjM3LCAyMTEsIDIyMywgMjQ4LCAyNDksIDIyNywgMzIsIDI0NSwgMjMyLCAyMjMsIDE5MiwgNjMsIDI0NywgMzEsIAotICAgIDg2LCAyNDcsIDMxLCAyNDUsIDE1MCwgMjIsIDIzMywgNjUsIDI1NCwgMTg4LCAyNTAsIDI0MSwgMjI3LCAxODgsIDIyOCwgCi0gICAgNjYsIDEwNiwgMjU1LCAxNCwgMjMwLCAyMjksIDI1NCwgMjI2LCAyNDcsIDEyLCAyNDYsIDEzMCwgMjI4LCA2NiwgMTA2LCAKLSAgICAyNDUsIDk1LCAyNTQsIDU5LCA5OCwgMjQ3LCAyMSwgMjM0LCA3LCA2MywgMjI4LCA1OCwgMjI0LCAxNjEsIDUzLCAyMDEsIAotICAgIDIyNCwgMjAwLCA1MywgMjQ4LCAxMzAsIDI0NywgODMsIDUzLCAyNDgsIDEzMCwgMjM3LCAzOSwgNTMsIDIzOSwgMjMyLCAKLSAgICAyNDcsIDgzLCAyMiwgMjM3LCAzOSwgNTMsIDIzNywgMzksIDIyLCAyNDcsIDgzLCA1MywgMjM3LCAzOSwgMiwgMTk1LCA1MywgCi0gICAgMjM3LCAzOSwgMiwgMTk1LCAyMiwgMjM3LCAzOSwgMjIsIDI0NywgODMsIDUzLCA2MSwgMjM3LCAzOSwgMiwgMTk1LCA1MywgCi0gICAgMTY5LCAyMzcsIDM5LCAyLCAxOTUsIDUzLCAyMzYsIDIyOCwgNjMsIDI1MSwgMTA2LCAyMzYsIDIyOCwgODYsIDI1MSwgMTA2LCAKLSAgICAyMzYsIDIyOCwgMywgNjMsIDI1MSwgMTA2LCAyMzcsIDEyLCA5OCwgMjQ5LCAxNzksIDk4LCAyMjUsIDEyMiwgMjMzLCAxNzMsIAotICAgIDk4LCAyNTEsIDY0LCAyNDYsIDIxNCwgMjI1LCA5NSwgMjM1LCAxNDYsIDI1MSwgMjA3LCAyMzMsIDIyNSwgMjM5LCA5NSwgCi0gICAgMjI0LCAyMzIsIDI1MSwgMTU3LCA4NiwgMjM2LCA4NSwgMjM3LCAxODAsIDIyOSwgMTU1LCAyMjksIDE4MywgMjMyLCA2MywgCi0gICAgMjI5LCAxNjcsIDYzLCAyNDgsIDExNywgMjM3LCAzNSwgNjMsIDI0OCwgMTE3LCAyMzgsIDE4OSwgODYsIDI0OCwgMTE3LCAKLSAgICAyMzcsIDM1LCA4NiwgMjQ4LCAxMTcsIDIzOCwgMTg5LCAyMjUsIDExMywgMjUyLCAxNDYsIDIzMCwgMjIxLCA4NiwgMjMwLCAKLSAgICAyMjEsIDIwMywgMjUyLCAxNDYsIDIzMCwgMjIxLCA2MywgMjMwLCAyMjEsIDIyNywgMjksIDIzNywgMTQxLCA1MywgMjI3LCAKLSAgICA2OSwgMjQ4LCAxMTUsIDI1NCwgMjQ0LCAyNDcsIDIxOCwgMjI0LCAyMjcsIDI0NSwgMTQ2LCAyMjQsIDg1LCAyNDUsIDE0NiwgCi0gICAgMjAzLCA0MSwgMjMzLCAxMzQsIDIzMywgMTM0LCAyMjUsIDExMywgNDEsIDIzMywgMTM0LCA2MywgMjM1LCA4NiwgODYsIAotICAgIDIzNSwgODYsIDI1MSwgMTgxLCA3NiwgMTEyLCAyNTEsIDE4MSwgNzYsIDIzNiwgNTIsIDIyNCwgNzMsIDExMiwgMjM2LCA1MiwgCi0gICAgMjI0LCA3MywgMjUzLCA0OCwgMjI0LCA3MywgMTEyLCAyNTMsIDQ4LCAyMjQsIDczLCAyMzQsIDcsIDE5LCAyNTAsIDI0MywgCi0gICAgMTEyLCAxOSwgMjUwLCAyNDMsIDIzNCwgNDQsIDI1MSwgMjE5LCAyNTAsIDI0MywgMTEyLCAyMzQsIDQ0LCAyNTEsIDIxOSwgCi0gICAgMjUwLCAyNDMsIDcsIDI1MCwgMjQzLCAyMjksIDEzNSwgNjMsIDcsIDI1MCwgMjQzLCAyMzQsIDcsIDcsIDI1MCwgMjQzLCAKLSAgICAyMzcsIDM3LCAyNTAsIDI0MywgMjI4LCA1OSwgMTA2LCAyNTAsIDEyNCwgMjQ2LCAyNDMsIDIyNywgNDAsIDI1NCwgNjksIAotICAgIDI0NiwgMjQzLCAyNTMsIDQ5LCAyNTQsIDY5LCAxMTIsIDI0NiwgMjQzLCAyNTMsIDQ5LCAyNTQsIDY5LCAyNDYsIDI0MywgCi0gICAgMjUxLCA3MiwgMjU0LCA2OSwgODYsIDI0NiwgMjQzLCAyMzIsIDI1MywgMjI4LCA1OCwgNjMsIDI0NiwgMjQzLCAyMzIsIAotICAgIDI1MywgMjI4LCA1OCwgMjI4LCAyNywgMjM0LCA3LCA2MywgMjI4LCA1OCwgMzMsIDYzLCAyMjgsIDU4LCAyMzQsIDQ0LCAKLSAgICAyNTEsIDIxOSwgODYsIDIyOCwgNTgsIDg2LCAyNTEsIDIxOSwgNjMsIDIyOCwgNTgsIDIzNCwgNywgODYsIDIyOCwgNTgsIAotICAgIDExMiwgMjM0LCA3LCA4NiwgMjI4LCA1OCwgMjMzLCAzNiwgMjI4LCA1OCwgMjI5LCAxMzUsIDYzLCAyMjgsIDU4LCAxMTIsIAotICAgIDI1NCwgNjksIDIzNCwgNDQsIDI1MSwgMjE5LCAyNTQsIDY5LCAyNDgsIDIwLCAyMjgsIDEyOSwgMjU0LCA2OSwgMjQ4LCAyMCwgCi0gICAgMjMyLCAyNTMsIDg2LCAyMjgsIDU4LCAyNDgsIDIwLCAyMzIsIDI1MywgMjMzLCAzNiwgMjI4LCA1OCwgMjI4LCAyMTcsIAotICAgIDIzMiwgMjUzLCA4NiwgMjI4LCA1OCwgMjQ4LCAyMCwgMjMyLCAyNTMsIDIzMSwgMjM0LCA4NiwgMjI4LCA1OCwgMTEyLCAKLSAgICAyNDgsIDIwLCAyMzIsIDI1MywgMjMxLCAyMzQsIDg2LCAyMjgsIDU4LCAyMjUsIDIxOSwgMjMyLCAyNTMsIDg2LCAyMjgsIAotICAgIDU4LCAyMjgsIDIxMywgMjMyLCAyNTMsIDI1NCwgNjksIDIyNywgNDAsIDI1NCwgNjksIDIzNCwgNDQsIDI1MSwgMjE5LCAKLSAgICAyMjcsIDQwLCAyNTQsIDY5LCAxMTIsIDIyNywgNDAsIDI1NCwgNjksIDIyOCwgMjE3LCAyMzMsIDEwNCwgODYsIDIyLCA2MywgCi0gICAgMjQ3LCAxNSwgODYsIDI0NywgMTUsIDYzLCAyNDcsIDE1LCAyNDgsIDIwLCAyMzMsIDEwNCwgMjM0LCA3LCA4NiwgMjQ3LCAKLSAgICAxNSwgMzMsIDIzNCwgNDQsIDI1MSwgMjE5LCAyNDgsIDIwLCAyMzIsIDI1MywgMjI4LCA1OCwgMTEyLCAyMjcsIDQwLCAyMzMsIAotICAgIDM2LCAyNTQsIDY5LCAyMjgsIDE3MiwgMjI2LCAxNjYsIDIyNiwgNzMsIDIyOCwgMTcyLCAxMTIsIDI1MSwgMTczLCAyMjgsIAotICAgIDE3MiwgMjI4LCAxNDIsIDExMiwgMjI4LCAxNDIsIDI1MywgNDksIDI1NCwgNjksIDI0OCwgMjAsIDIyNywgNDAsIDIzMiwgCi0gICAgMTkyLCAyNTQsIDY5LCAxMTIsIDI0OCwgMjAsIDIyNywgNDAsIDIzMiwgMTkyLCAyNTQsIDY5LCAyMjksIDEzNSwgNjMsIAotICAgIDI1MSwgMTA2LCAyMDMsIDQxLCAyNDgsIDExNCwgNjMsIDIyOCwgMTIwLCAyMjUsIDExMywgNDEsIDI0OCwgMTE0LCA2MywgCi0gICAgMjI4LCAxMjAsIDIwMywgNDEsIDIyOSwgMTM1LCA2MywgMjI4LCAxMjAsIDIyNSwgMTEzLCA0MSwgMjI5LCAxMzUsIDYzLCAKLSAgICAyMjgsIDEyMCwgODYsIDI0OSwgMjUxLCAyMzYsIDEyMSwgNjMsIDIyNCwgNzMsIDE1NywgNjEsIDEyNSwgMjM2LCAyMjgsIAotICAgIDYxLCAxMjUsIDExMiwgNjEsIDEyNSwgMTEyLCAyMjgsIDI0MSwgMjA5LCAyNTEsIDU1LCAyMzIsIDU3LCAxNjUsIDIzNCwgCi0gICAgMjUsIDExMiwgMjI4LCAyNDEsIDI1MSwgNTUsIDIzMiwgNTcsIDE2NSwgMjM0LCAyNSwgMTEyLCA0NywgMjA5LCAyNTEsIDU1LCAKLSAgICAyMzIsIDU3LCAxNjUsIDIzNCwgMjUsIDExMiwgNDcsIDI1MSwgNTUsIDIzMiwgNTcsIDE2NSwgMjM0LCAyNSwgMjUwLCAyMTcsIAotICAgIDIyOCwgNDksIDIzMywgMTkyLCA1LCAyMzQsIDI1LCAxMTIsIDI0NywgMTQ5LCAxNjUsIDIzNCwgMjUsIDExMiwgMjQ1LCAKLSAgICAxMTUsIDI0NywgMTQ5LCAxNjUsIDIzNCwgMjUsIDExMiwgODYsIDI0NSwgMTE0LCAyMzEsIDEwNiwgMTEyLCA4NiwgMjQ1LCAKLSAgICAxMTUsIDI1MiwgODMsIDI0NywgMTYsIDI0NSwgMTE0LCAyMzEsIDEwNiwgMjQ3LCAxNiwgMjQ1LCAxMTUsIDI1MiwgODMsIAotICAgIDIzNiwgMjI4LCA0MiwgMjMzLCAxODEsIDIzNCwgMjUsIDIzNiwgMjI4LCA0MSwgMjMzLCAxODEsIDIzNCwgMjUsIDIzNiwgCi0gICAgMjI4LCAyNDcsIDIyLCA0MiwgMjMzLCAxODEsIDIzNCwgMjUsIDIzNiwgMjI4LCAyNDcsIDIyLCA0MSwgMjMzLCAxODEsIAotICAgIDIzNCwgMjUsIDIzNiwgMjI4LCAyMzcsIDIzNSwgMjU0LCAxODIsIDI1MiwgMTE1LCAyMzQsIDI1LCAyMzYsIDIyOCwgMjMxLCAKLSAgICAxNTEsIDI1NCwgMTgyLCAyNTIsIDExNSwgMjM0LCAyNSwgMTEyLCAyMzcsIDIzNSwgMjU0LCAxODIsIDIzMiwgNTcsIDE2NSwgCi0gICAgMjM0LCAyNSwgMTEyLCAyMzEsIDE1MSwgMjU0LCAxODIsIDIzMiwgNTcsIDE2NSwgMjM0LCAyNSwgMTEyLCAyMzcsIDIzNSwgCi0gICAgMjU0LCAxODIsIDI1MiwgMTE1LCAyMzQsIDI1LCAxMTIsIDIzMSwgMTUxLCAyNTQsIDE4MiwgMjUyLCAxMTUsIDIzNCwgMjUsIAotICAgIDE1NywgNDIsIDIyNiwgMTAwLCAyMjksIDEwNCwgMjUyLCAxMTUsIDIzNCwgMjUsIDE1NywgNDEsIDIyNiwgMTAwLCAyMjksIAotICAgIDEwNCwgMjUyLCAxMTUsIDIzNCwgMjUsIDIzNiwgMjI4LCA0MiwgMjUwLCAyMjMsIDI1MiwgMTE1LCAyMzQsIDI1LCAyMzYsIAotICAgIDIyOCwgNDEsIDI1MCwgMjIzLCAyNTIsIDExNSwgMjM0LCAyNSwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDExOCwgCi0gICAgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDExMywgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDE2NiwgMjQ5LCAKLSAgICAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDE1OCwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDE3MywgMjQ5LCAyMDgsIAotICAgIDIzNSwgMTU3LCAzMywgMjEsIDE4MywgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDE5NCwgMjQ5LCAyMDgsIDIzNSwgCi0gICAgMTU3LCAzMywgMjEsIDE4NywgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMjEsIDE5MiwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAKLSAgICAzMywgNjUsIDIyNywgMjMsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxMTgsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxMTMsIAotICAgIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxNjYsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxNTgsIDI0OSwgMjA4LCAzMywgMzAsIAotICAgIDIxLCAxNzMsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxODMsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxOTQsIDI0OSwgMjA4LCAKLSAgICAzMywgMzAsIDIxLCAxODcsIDI0OSwgMjA4LCAzMywgMzAsIDIxLCAxOTIsIDI0OSwgMjA4LCAzMywgMzAsIDY1LCAyMjcsIAotICAgIDIzLCAyNDksIDIwOCwgMjM1LCAxNTcsIDMzLCAzMCwgMjEsIDExOCwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMzAsIDIxLCAKLSAgICAxMTMsIDI0OSwgMjA4LCAyMzUsIDE1NywgMzMsIDMwLCAyMSwgMTY2LCAyNDksIDIwOCwgMjM1LCAxNTcsIDMzLCAzMCwgMjEsIAotICAgIDE1OCwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMzAsIDIxLCAxNzMsIDI0OSwgMjA4LCAyMzUsIDE1NywgMzMsIDMwLCAyMSwgCi0gICAgMTgzLCAyNDksIDIwOCwgMjM1LCAxNTcsIDMzLCAzMCwgMjEsIDE5NCwgMjQ5LCAyMDgsIDIzNSwgMTU3LCAzMywgMzAsIDIxLCAKLSAgICAxODcsIDI0OSwgMjA4LCAyMzUsIDE1NywgMzMsIDMwLCAyMSwgMTkyLCAyNDksIDIwOCwgMjM1LCAxNTcsIDMzLCAzMCwgNjUsIAotICAgIDIyNywgMjMsIDExMiwgMjI0LCAxMTYsIDgxLCA1OCwgMTEyLCAyMjgsIDE1MiwgMjQ4LCA0NSwgNTgsIDExMiwgODEsIDU4LCAKLSAgICAxMTIsIDIzNCwgMjQ1LCAyNDgsIDQ1LCA1OCwgMjQ4LCAxMTksIDIzMiwgMjU1LCA4MSwgNTgsIDExMiwgMjMxLCAxMDMsIAotICAgIDgxLCA1OCwgMjI2LCA3NywgODEsIDU4LCAxMTIsIDIyNiwgNzcsIDgxLCA1OCwgMjUwLCAxMjksIDIyNiwgNzcsIDgxLCA1OCwgCi0gICAgMTEyLCAyNTAsIDEyOSwgMjI2LCA3NywgODEsIDU4LCA4NiwgODEsIDU4LCAyMjYsIDE5MSwgMjI2LCAxMDQsIDgxLCAyNTQsIAotICAgIDkzLCAyMjYsIDE5MSwgMjUyLCAxMjQsIDgxLCAyNTQsIDkzLCA4NiwgODEsIDI1NCwgOTMsIDExMiwgODYsIDI1MCwgMjE3LCAKLSAgICAyNDgsIDEyNSwgMjIsIDgxLCA1OCwgMTEyLCA4NiwgMjUwLCAyMTcsIDIyNSwgMTA2LCAyMiwgODEsIDU4LCAyMjgsIDExNiwgCi0gICAgODYsIDgxLCA1OCwgMTEyLCAyNTEsIDQzLCA4NiwgODEsIDU4LCAyMzEsIDE1MCwgNjMsIDgxLCA1OCwgMjM3LCAyMzQsIDYzLCAKLSAgICA4MSwgNTgsIDI1MywgNjUsIDIyOSwgMTM1LCA2MywgODEsIDU4LCAyNDYsIDIyMywgMjI5LCAxMzUsIDYzLCA4MSwgNTgsIAotICAgIDExMiwgMjAzLCAyMzEsIDE0OSwgNjMsIDgxLCA1OCwgMTEyLCAyMjUsIDExMywgMjMxLCAxNDksIDYzLCA4MSwgNTgsIDIzNCwgCi0gICAgMjQwLCAyMDMsIDIzMSwgMTQ5LCA2MywgODEsIDU4LCAyMzQsIDI0MCwgMjI1LCAxMTMsIDIzMSwgMTQ5LCA2MywgODEsIDU4LCAKLSAgICAzMywgMTEyLCA2MywgODEsIDU4LCAyMjQsIDEyMCwgODEsIDU4LCAyNTIsIDE0OSwgMjI4LCAxNTIsIDI0OCwgNDUsIDU4LCAKLSAgICAyNTIsIDE0OSwgODEsIDU4LCAyNTIsIDE0OSwgMjM0LCAyNDUsIDI0OCwgNDUsIDU4LCAxMTIsIDI1MiwgMTQ5LCAyMjgsIAotICAgIDE1MiwgMjQ4LCA0NSwgNTgsIDExMiwgMjUyLCAxNDksIDgxLCA1OCwgMTEyLCAyNTIsIDE0OSwgMjM0LCAyNDUsIDI0OCwgCi0gICAgNDUsIDU4LCAyMjcsIDQyLCA4MSwgNTgsIDExMiwgMjI3LCA0MSwgODEsIDU4LCAyMjQsIDEzOSwgODEsIDU4LCAxMTIsIAotICAgIDIyNCwgMTM5LCA4MSwgNTgsIDIzNCwgNDEsIDgxLCA1OCwgMTUyLCAyNDksIDIxOCwgMjU0LCAxODEsIDYzLCAyMjYsIDc5LCAKLSAgICAyNTEsIDI3LCAzLCA2MywgMjI2LCA3OCwgMjMzLCAxMTQsIDIzNCwgNDQsIDIyNywgMjUxLCAyMzQsIDQ0LCAyMjcsIDIxNywgCi0gICAgNDIsIDIzMSwgMzQsIDI1MywgNTksIDI1MCwgNTIsIDQxLCAyMzEsIDM0LCAyNTMsIDU5LCAyNTAsIDUyLCAxNDUsIDIsIDU2LCAKLSAgICAyMzksIDI0MywgMjMxLCAxOTMsIDIyOCwgMTYyLCAyMzIsIDIxMiwgMjI3LCAyNTEsIDIyNywgMjE4LCAyMzIsIDIxMiwgCi0gICAgMjI4LCAxNjEsIDYxLCAyNTMsIDM2LCAyLCAxNjksIDgyLCAxODIsIDI0OSwgMTgwLCA2MywgMjQ5LCAyNTEsIDIsIDI1MSwgCi0gICAgMjE3LCAyNDksIDE0MCwgMjIsIDIsIDI0OSwgMTQwLCAyNDcsIDI1NCwgMTA2LCAyMzQsIDM5LCAyMjUsIDEwNSwgMjAzLCAKLSAgICA0MSwgMjUxLCAxMSwgMiwgMjQ5LCAxNDAsIDIyNSwgMTEzLCA0MiwgMjUxLCAxMSwgMiwgMjQ5LCAxNDAsIDQyLCAyMzQsIDksIAotICAgIDIzOSwgMTE1LCA0MSwgMjM0LCA5LCAyMzksIDExNSwgMjQ2LCAyMTgsIDIzNCwgOSwgMjM5LCAxMTUsIDIzOCwgOSwgOTksIAotICAgIDIyNywgOTYsIDIzOCwgOSwgMTAzLCAyMjcsIDk2LCA0MiwgMjIsIDQxLCA0NywgMjI1LCAyMzIsIDQyLCAyMiwgNDEsIDIyNywgCi0gICAgOTYsIDQyLCAyMzYsIDU1LCAxODIsIDQxLCAyMjcsIDk2LCAxODIsIDQyLCAyMjcsIDk2LCA5OSwgMjI3LCA5NywgMiwgMjUxLCAKLSAgICAxMDcsIDQ2LCAyMzcsIDExNCwgMjQ5LCAxODUsIDI1MiwgNTUsIDE2OSwgMjMxLCA2NSwgNjMsIDI1MSwgNDIsIDI0OSwgCi0gICAgMjUwLCA2MywgMjUxLCA0MiwgMjQ5LCAyNTEsIDIsIDExNywgMjI2LCAxNzIsIDYzLCAyNTEsIDQyLCAyNDksIDI1MSwgMiwgCi0gICAgODEsIDIyNiwgMTcyLCA2MywgMzcsIDIsIDExNywgMjI2LCAxNzIsIDYzLCAzNywgMiwgODEsIDIyNiwgMTcyLCAxMiwgNDIsIAotICAgIDYzLCAzNywgMTA0LCAxMiwgNDEsIDYzLCAzNywgMTA0LCAxMiwgNDIsIDI1NCwgMTgyLCAxMDQsIDEyLCA0MSwgMjU0LCAKLSAgICAxODIsIDEwNCwgMTIsIDQyLCA0NywgMjU0LCAxODIsIDEwNCwgMTIsIDQxLCA0NywgMjU0LCAxODIsIDEwNCwgMTIsIDQyLCAKLSAgICA2MywgMjI2LCAxMDAsIDIyOSwgMTA0LCAxMDQsIDEyLCA0MSwgNjMsIDIyNiwgMTAwLCAyMjksIDEwNCwgMTA0LCAxMiwgNDIsIAotICAgIDI0NywgMjIsIDIzMywgMTgwLCAxMiwgNDEsIDI0NywgMjIsIDIzMywgMTgwLCAyMjUsIDEwNiwgMjMyLCA3OCwgNTgsIDI0OCwgCi0gICAgMTI1LCAyMzIsIDc4LCA1OCwgMjU0LCAxNjgsIDI0NiwgMTYyLCAyNTEsIDEwNywgNTgsIDI1MSwgODQsIDI0NiwgMTYyLCAKLSAgICAyNTEsIDEwNywgNTgsIDQxLCA2NywgMiwgMzMsIDIzMywgMTAsIDE4MiwgMTE3LCA1OCwgMTgyLCA4MSwgNTgsIDE4MiwgNDIsIAotICAgIDQxLCA1OCwgMTgyLCAxMTcsIDQ3LCA1OCwgMTgyLCA4MSwgNDcsIDU4LCAxODIsIDQyLCA0MSwgNDcsIDU4LCAxODIsIDExNywgCi0gICAgNjcsIDI0NiwgMjI0LCAxMjUsIDE4MiwgODEsIDY3LCAyNDYsIDIyNCwgMTI1LCAxODIsIDExNywgNDcsIDY3LCAyNDYsIAotICAgIDIyNCwgMTI1LCAxODIsIDgxLCA0NywgNjcsIDI0NiwgMjI0LCAxMjUsIDE4MiwgODEsIDIyOCwgMTE1LCA1OCwgMzksIDQwLCAKLSAgICAyNTIsIDE0NCwgMzksIDQwLCAyNDksIDEzNywgMzksIDQwLCAyNDksIDksIDM5LCA0MCwgMjQ5LCAxMzYsIDM5LCA0MCwgCi0gICAgMjQ4LCAyMDEsIDM5LCA0MCwgMjQ5LCA3MiwgMzksIDQwLCAyNDksIDgsIDM5LCA0MCwgMjQ5LCAxMzUsIDM5LCA0MCwgMjQ4LCAKLSAgICAxNjksIDM5LCA0MCwgMjQ5LCA0MCwgMzksIDQwLCAyNDgsIDIzMiwgMzksIDQwLCAyNDksIDEwMywgMzksIDQwLCAyNDgsIAotICAgIDIwMCwgMzksIDQwLCAyNDksIDcxLCAzOSwgNDAsIDI0OSwgNywgMzksIDQwLCAyNDksIDEzNCwgMzksIDQwLCAyNDgsIDE1MywgCi0gICAgMzksIDQwLCAyNDksIDI0LCAzOSwgNDAsIDI0OCwgMjE2LCAzOSwgNDAsIDI0OSwgODcsIDM5LCA0MCwgMjQ4LCAxODQsIDM5LCAKLSAgICA0MCwgMjQ5LCA1NSwgMzksIDQwLCAyNDgsIDI0NywgMzksIDQwLCAyNDksIDExOCwgMzksIDQwLCAyNDgsIDE2OCwgMzksIAotICAgIDQwLCAyNDksIDM5LCAzOSwgNDAsIDI0OCwgMjMxLCAzOSwgNDAsIDI0OSwgMTAyLCAzOSwgNDAsIDI0OCwgMTk5LCAzOSwgCi0gICAgNDAsIDI0OSwgNzAsIDM5LCA0MCwgMjQ5LCA2LCAzOSwgNDAsIDI0OSwgMTMzLCAzOSwgNDAsIDI0OCwgMTQ1LCAzOSwgNDAsIAotICAgIDI0OSwgMTYsIDM5LCA0MCwgMjQ4LCAyMDgsIDM5LCA0MCwgMjQ5LCA3OSwgMzksIDQwLCAyNDgsIDE3NiwgMzksIDQwLCAKLSAgICAyNDksIDQ3LCAzOSwgNDAsIDI0OCwgMjM5LCAzOSwgNDAsIDI0OSwgMTEwLCAzOSwgNDAsIDI0OCwgMTYwLCAzOSwgNDAsIAotICAgIDI0OSwgMzEsIDM5LCA0MCwgMjQ4LCAyMjMsIDM5LCA0MCwgMjQ5LCA5NCwgMzksIDQwLCAyNDgsIDE5MSwgMzksIDQwLCAKLSAgICAyNDksIDYyLCAzOSwgNDAsIDI0OCwgMjU0LCAzOSwgNDAsIDI0OSwgMTI1LCAzOSwgNDAsIDI0OCwgMTUyLCAzOSwgNDAsIAotICAgIDI0OSwgMjMsIDM5LCA0MCwgMjQ4LCAyMTUsIDM5LCA0MCwgMjQ5LCA4NiwgMzksIDQwLCAyNDgsIDE4MywgMzksIDQwLCAKLSAgICAyNDksIDU0LCAzOSwgNDAsIDI0OCwgMjQ2LCAzOSwgNDAsIDI0OSwgMTE3LCAzOSwgNDAsIDI0OCwgMTY3LCAzOSwgNDAsIAotICAgIDI0OSwgMzgsIDM5LCA0MCwgMjQ4LCAyMzAsIDM5LCA0MCwgMjQ5LCAxMDEsIDM5LCA0MCwgMjQ4LCAxOTgsIDM5LCA0MCwgCi0gICAgMjQ5LCA2OSwgMzksIDQwLCAyNDksIDUsIDM5LCA0MCwgMjQ5LCAxMzIsIDM5LCA0MCwgMjQ4LCAxNDEsIDM5LCA0MCwgMjQ5LCAKLSAgICAxMiwgMzksIDQwLCAyNDgsIDIwNCwgMzksIDQwLCAyNDksIDc1LCAzOSwgNDAsIDI0OCwgMTcyLCAzOSwgNDAsIDI0OSwgNDMsIAotICAgIDM5LCA0MCwgMjQ4LCAyMzUsIDM5LCA0MCwgMjQ5LCAxMDYsIDM5LCA0MCwgMjQ4LCAxNTYsIDM5LCA0MCwgMjQ5LCAyNywgCi0gICAgMzksIDQwLCAyNDgsIDIxOSwgMzksIDQwLCAyNDksIDkwLCAzOSwgNDAsIDI0OCwgMTg3LCAzOSwgNDAsIDI0OSwgNTgsIDM5LCAKLSAgICA0MCwgMjQ4LCAyNTAsIDM5LCA0MCwgMjQ5LCAxMjEsIDM5LCA0MCwgMjQ4LCAxNDgsIDM5LCA0MCwgMjQ5LCAxOSwgMzksIAotICAgIDQwLCAyNDgsIDIxMSwgMzksIDQwLCAyNDksIDgyLCAzOSwgNDAsIDI0OCwgMTc5LCAzOSwgNDAsIDI0OSwgNTAsIDM5LCA0MCwgCi0gICAgMjQ4LCAyNDIsIDM5LCA0MCwgMjQ5LCAxMTMsIDM5LCA0MCwgMjQ4LCAxNjMsIDM5LCA0MCwgMjQ5LCAzNCwgMzksIDQwLCAKLSAgICAyNDgsIDIyNiwgMzksIDQwLCAyNDksIDk3LCAzOSwgNDAsIDI0OCwgMTk0LCAzOSwgNDAsIDI0OSwgNjUsIDM5LCA0MCwgCi0gICAgMjQ5LCAxLCAzOSwgNDAsIDI0OSwgMTI4LCAzOSwgNDAsIDI0OCwgMTQ0LCAzOSwgNDAsIDI0OSwgMTUsIDM5LCA0MCwgMjQ4LCAKLSAgICAyMDcsIDM5LCA0MCwgMjQ5LCA3OCwgMzksIDQwLCAyNDgsIDE3NSwgMzksIDQwLCAyNDksIDQ2LCAzOSwgNDAsIDI0OCwgCi0gICAgMjM4LCAzOSwgNDAsIDI0OSwgMTA5LCAzOSwgNDAsIDI0OCwgMTU5LCAzOSwgNDAsIDI0OSwgMzAsIDM5LCA0MCwgMjQ4LCAKLSAgICAyMjIsIDM5LCA0MCwgMjQ5LCA5MywgMzksIDQwLCAyNDgsIDE5MCwgMzksIDQwLCAyNDksIDYxLCAzOSwgNDAsIDI0OCwgCi0gICAgMjUzLCAzOSwgNDAsIDI0OSwgMTI0LCAzOSwgNDAsIDI0OCwgMTUxLCAzOSwgNDAsIDI0OSwgMjIsIDM5LCA0MCwgMjQ4LCAKLSAgICAyMTQsIDM5LCA0MCwgMjQ5LCA4NSwgMzksIDQwLCAyNDgsIDE4MiwgMzksIDQwLCAyNDksIDUzLCAzOSwgNDAsIDI0OCwgCi0gICAgMjQ1LCAzOSwgNDAsIDI0OSwgMTE2LCAzOSwgNDAsIDI0OCwgMTY2LCAzOSwgNDAsIDI0OSwgMzcsIDM5LCA0MCwgMjQ4LCAKLSAgICAyMjksIDM5LCA0MCwgMjQ5LCAxMDAsIDM5LCA0MCwgMjQ4LCAxOTcsIDM5LCA0MCwgMjQ5LCA2OCwgMzksIDQwLCAyNDksIDQsIAotICAgIDM5LCA0MCwgMjQ5LCAxMzEsIDM5LCA0MCwgMjQ4LCAxMzksIDM5LCA0MCwgMjQ5LCAxMCwgMzksIDQwLCAyNDgsIDIwMiwgCi0gICAgMzksIDQwLCAyNDksIDczLCAzOSwgNDAsIDI0OCwgMTcwLCAzOSwgNDAsIDI0OSwgNDEsIDM5LCA0MCwgMjQ4LCAyMzMsIDM5LCAKLSAgICA0MCwgMjQ5LCAxMDQsIDM5LCA0MCwgMjQ4LCAxNTQsIDM5LCA0MCwgMjQ5LCAyNSwgMzksIDQwLCAyNDgsIDIxNywgMzksIAotICAgIDQwLCAyNDksIDg4LCAzOSwgNDAsIDI0OCwgMTg1LCAzOSwgNDAsIDI0OSwgNTYsIDM5LCA0MCwgMjQ4LCAyNDgsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMTksIDM5LCA0MCwgMjQ4LCAxNDYsIDM5LCA0MCwgMjQ5LCAxNywgMzksIDQwLCAyNDgsIDIwOSwgMzksIDQwLCAKLSAgICAyNDksIDgwLCAzOSwgNDAsIDI0OCwgMTc3LCAzOSwgNDAsIDI0OSwgNDgsIDM5LCA0MCwgMjQ4LCAyNDAsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMTEsIDM5LCA0MCwgMjQ4LCAxNjEsIDM5LCA0MCwgMjQ5LCAzMiwgMzksIDQwLCAyNDgsIDIyNCwgMzksIDQwLCAKLSAgICAyNDksIDk1LCAzOSwgNDAsIDI0OCwgMTkyLCAzOSwgNDAsIDI0OSwgNjMsIDM5LCA0MCwgMjQ4LCAyNTUsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMjYsIDM5LCA0MCwgMjQ4LCAxNDIsIDM5LCA0MCwgMjQ5LCAxMywgMzksIDQwLCAyNDgsIDIwNSwgMzksIDQwLCAKLSAgICAyNDksIDc2LCAzOSwgNDAsIDI0OCwgMTczLCAzOSwgNDAsIDI0OSwgNDQsIDM5LCA0MCwgMjQ4LCAyMzYsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMDcsIDM5LCA0MCwgMjQ4LCAxNTcsIDM5LCA0MCwgMjQ5LCAyOCwgMzksIDQwLCAyNDgsIDIyMCwgMzksIDQwLCAKLSAgICAyNDksIDkxLCAzOSwgNDAsIDI0OCwgMTg4LCAzOSwgNDAsIDI0OSwgNTksIDM5LCA0MCwgMjQ4LCAyNTEsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMjIsIDM5LCA0MCwgMjQ4LCAxNDksIDM5LCA0MCwgMjQ5LCAyMCwgMzksIDQwLCAyNDgsIDIxMiwgMzksIDQwLCAKLSAgICAyNDksIDgzLCAzOSwgNDAsIDI0OCwgMTgwLCAzOSwgNDAsIDI0OSwgNTEsIDM5LCA0MCwgMjQ4LCAyNDMsIDM5LCA0MCwgCi0gICAgMjQ5LCAxMTQsIDM5LCA0MCwgMjQ4LCAxNjQsIDM5LCA0MCwgMjQ5LCAzNSwgMzksIDQwLCAyNDgsIDIyNywgMzksIDQwLCAKLSAgICAyNDksIDk4LCAzOSwgNDAsIDI0OCwgMTk1LCAzOSwgNDAsIDI0OSwgNjYsIDM5LCA0MCwgMjQ5LCAyLCAzOSwgNDAsIDI0OSwgCi0gICAgMTI5LCAzOSwgNDAsIDI0OCwgMTQwLCAzOSwgNDAsIDI0OSwgMTEsIDM5LCA0MCwgMjQ4LCAyMDMsIDM5LCA0MCwgMjQ5LCAKLSAgICA3NCwgMzksIDQwLCAyNDgsIDE3MSwgMzksIDQwLCAyNDksIDQyLCAzOSwgNDAsIDI0OCwgMjM0LCAzOSwgNDAsIDI0OSwgCi0gICAgMTA1LCAzOSwgNDAsIDI0OCwgMTU1LCAzOSwgNDAsIDI0OSwgMjYsIDM5LCA0MCwgMjQ4LCAyMTgsIDM5LCA0MCwgMjQ5LCAKLSAgICA4OSwgMzksIDQwLCAyNDgsIDE4NiwgMzksIDQwLCAyNDksIDU3LCAzOSwgNDAsIDI0OCwgMjQ5LCAzOSwgNDAsIDI0OSwgCi0gICAgMTIwLCAzOSwgNDAsIDI0OCwgMTQ3LCAzOSwgNDAsIDI0OSwgMTgsIDM5LCA0MCwgMjQ4LCAyMTAsIDM5LCA0MCwgMjQ5LCAKLSAgICA4MSwgMzksIDQwLCAyNDgsIDE3OCwgMzksIDQwLCAyNDksIDQ5LCAzOSwgNDAsIDI0OCwgMjQxLCAzOSwgNDAsIDI0OSwgCi0gICAgMTEyLCAzOSwgNDAsIDI0OCwgMTYyLCAzOSwgNDAsIDI0OSwgMzMsIDM5LCA0MCwgMjQ4LCAyMjUsIDM5LCA0MCwgMjQ5LCAKLSAgICA5NiwgMzksIDQwLCAyNDgsIDE5MywgMzksIDQwLCAyNDksIDY0LCAzOSwgNDAsIDI0OSwgMCwgMzksIDQwLCAyNDksIDEyNywgCi0gICAgMzksIDQwLCAyNDgsIDE0MywgMzksIDQwLCAyNDksIDE0LCAzOSwgNDAsIDI0OCwgMjA2LCAzOSwgNDAsIDI0OSwgNzcsIDM5LCAKLSAgICA0MCwgMjQ4LCAxNzQsIDM5LCA0MCwgMjQ5LCA0NSwgMzksIDQwLCAyNDgsIDIzNywgMzksIDQwLCAyNDksIDEwOCwgMzksIAotICAgIDQwLCAyNDgsIDE1OCwgMzksIDQwLCAyNDksIDI5LCAzOSwgNDAsIDI0OCwgMjIxLCAzOSwgNDAsIDI0OSwgOTIsIDM5LCA0MCwgCi0gICAgMjQ4LCAxODksIDM5LCA0MCwgMjQ5LCA2MCwgMzksIDQwLCAyNDgsIDI1MiwgMzksIDQwLCAyNDksIDEyMywgMzksIDQwLCAKLSAgICAyNDgsIDE1MCwgMzksIDQwLCAyNDksIDIxLCAzOSwgNDAsIDI0OCwgMjEzLCAzOSwgNDAsIDI0OSwgODQsIDM5LCA0MCwgCi0gICAgMjQ4LCAxODEsIDM5LCA0MCwgMjQ5LCA1MiwgMzksIDQwLCAyNDgsIDI0NCwgMzksIDQwLCAyNDksIDExNSwgMzksIDQwLCAKLSAgICAyNDgsIDE2NSwgMzksIDQwLCAyNDksIDM2LCAzOSwgNDAsIDI0OCwgMjI4LCAzOSwgNDAsIDI0OSwgOTksIDM5LCA0MCwgCi0gICAgMjQ4LCAxOTYsIDM5LCA0MCwgMjQ5LCA2NywgMzksIDQwLCAyNDksIDMsIDM5LCA0MCwgMjQ5LCAxMzAsIDgxLCAyMjUsIAotICAgIDIwMywgNjcsIDIsIDYxLCA4MiwgODEsIDIyNSwgMjAzLCA2NywgMiwgNDcsIDYxLCA4MiwgMTE3LCA0NywgNjcsIDIsIDYxLCAKLSAgICA4MiwgODEsIDQ3LCA2NywgMiwgNjEsIDgyLCA0MiwgNDEsIDQ3LCA2NywgMiwgNjEsIDgyLCA4MSwgMjI1LCAyMDMsIDY3LCAKLSAgICAyNDYsIDIyNCwgMTI1LCAxMTcsIDQ3LCA2NywgMjQ2LCAyMjQsIDEyNSwgODEsIDQ3LCA2NywgMjQ2LCAyMjQsIDEyNSwgCi0gICAgMjQ4LCAxMjUsIDY3LCAyLCAxNjksIDgyLCAyMjUsIDEwNiwgNjcsIDIsIDE2OSwgODIsIDIyNSwgMTA2LCAyMjYsIDY2LCAKLSAgICA1OCwgMjQ4LCAxMjUsIDIyNiwgNjYsIDU4LCAxMTcsIDQ3LCAyNTAsIDEzMSwgNTgsIDgxLCA0NywgMjUwLCAxMzEsIDU4LCAKLSAgICAxMTcsIDIyNiwgNjYsIDI1MCwgMTMxLCA1OCwgODEsIDIyNiwgNjYsIDI1MCwgMTMxLCA1OCwgODEsIDIyNSwgMjAzLCAyMjYsIAotICAgIDY2LCAyNTAsIDEzMSwgNTgsIDgxLCA2NywgMiwgMjQ4LCAxMzgsIDIyOCwgNDgsIDIyNSwgMTA2LCA2NywgMTgwLCAxMjUsIAotICAgIDI0OCwgMTI1LCA2NywgMTgwLCAxMjUsIDgxLCA2NywgMiwgMjI3LCA5MCwgMiwgNjEsIDgyLCA4MSwgNjcsIDIsIDIyNywgCi0gICAgOTAsIDIsIDQ3LCA2MSwgODIsIDgxLCAyMjUsIDIwMywgNjcsIDIsIDIyNywgODksIDgxLCAyMjUsIDIwMywgNjcsIDIsIAotICAgIDIyNywgOTAsIDIsIDYxLCA4MiwgODEsIDIyNSwgMjAzLCA2NywgMiwgMjI3LCA5MCwgMiwgNDcsIDYxLCA4MiwgMTE3LCAKLSAgICAyNTQsIDk1LCA4MSwgMjU0LCA5NSwgMTE3LCA0NywgMjU0LCA5NSwgODEsIDQ3LCAyNTQsIDk1LCAxMTcsIDY3LCAxODAsIAotICAgIDg2LCAyNDksIDI1MCwgODEsIDY3LCAxODAsIDg2LCAyNDksIDI1MCwgMTE3LCA2NywgMjQ2LCAyMjQsIDI1MywgMzYsIDE4MCwgCi0gICAgODYsIDI0OSwgMjUwLCA4MSwgNjcsIDI0NiwgMjI0LCAyNTMsIDM2LCAxODAsIDg2LCAyNDksIDI1MCwgMjM0LCAyNDUsIAotICAgIDIyNCwgMTMxLCAyMiwgMjI4LCAxNTIsIDI0OCwgNDUsIDU4LCAyMzQsIDI0NSwgMjQ4LCA0NSwgMjIsIDIyOCwgMTUyLCAKLSAgICAyMjQsIDEzMSwgNTgsIDIzNCwgMjQ1LCAyMjQsIDEzMSwgNjcsIDIsIDg4LCAyMzQsIDI0NSwgMjQ4LCA0NSwgNjcsIDIsIAotICAgIDg4LCAyMjgsIDE1MiwgMjQ4LCA0NSwgNjcsIDIsIDg4LCAyMjgsIDE1MiwgMjI0LCAxMzEsIDY3LCAyLCA4OCwgMjM0LCAKLSAgICAyNDUsIDIyNCwgMTMxLCA2NywgMjIsIDIzNCwgMjQ1LCAyNDgsIDQ1LCA1OCwgMjM0LCAyNDUsIDI0OCwgNDUsIDY3LCAyMiwgCi0gICAgMjI4LCAxNTIsIDI0OCwgNDUsIDU4LCAyMjgsIDE1MiwgMjQ4LCA0NSwgNjcsIDIyLCAyMjgsIDE1MiwgMjI0LCAxMzEsIDU4LCAKLSAgICAyMjgsIDE1MiwgMjI0LCAxMzEsIDY3LCAyMiwgMjM0LCAyNDUsIDIyNCwgMTMxLCA1OCwgMjMxLCAxMzUsIDI1MCwgMSwgCi0gICAgMjUwLCAyMzgsIDI0NywgMTEzLCAyNTAsIDAsIDI0NywgMTEzLCAyNTAsIDEsIDI1MCwgMjM4LCAyMzEsIDEzNSwgMjUwLCAwLCAKLSAgICAyMjgsIDE1MiwgMjQ4LCA0NSwgNjcsIDI1MCwgMjM4LCAyMzQsIDI0NSwgMjQ4LCA0NSwgNTgsIDIzNCwgMjQ1LCAyNDgsIAotICAgIDQ1LCA2NywgMjUwLCAyMzgsIDIyOCwgMTUyLCAyNDgsIDQ1LCA1OCwgMjQ3LCAxMTMsIDI1MCwgMSwgMjUwLCAyMzgsIDIzNCwgCi0gICAgMjQ1LCAyNDgsIDQ1LCA1OCwgMjMxLCAxMzUsIDI1MCwgMSwgMjUwLCAyMzgsIDIyOCwgMTUyLCAyNDgsIDQ1LCA1OCwgMjM0LCAKLSAgICAyNDUsIDI0OCwgNDUsIDY3LCAyNTAsIDIzOCwgMjM0LCAyNDUsIDIyNCwgMTMxLCA1OCwgMjM0LCAyNDUsIDIyNCwgMTMxLCAKLSAgICA2NywgMjUwLCAyMzgsIDIzNCwgMjQ1LCAyNDgsIDQ1LCA1OCwgMjI0LCAxNDgsIDY3LCAyMzIsIDI1MSwgMjQ5LCAxOTksIAotICAgIDIzMSwgMTUzLCA2NywgMjMyLCAyNTEsIDgxLCAyMjYsIDIzMiwgMjUwLCAyMTYsIDIyNSwgMTA1LCA2NywgMjMyLCAyNTEsIAotICAgIDgxLCAyMjYsIDIzMiwgMjUwLCAyMTYsIDI0OCwgMTI0LCA2NywgMjMyLCAyNTEsIDI0OCwgMTI1LCAyMjYsIDIzMiwgMjUwLCAKLSAgICAyMTYsIDIzNywgMjMwLCA2NywgMjMyLCAyNTEsIDI0OCwgMTI1LCAyMjYsIDIzMiwgMjUwLCAyMTYsIDIzMSwgMTQ1LCAyMzEsIAotICAgIDE0OCwgMjU0LCAxMjMsIDI1MSwgODQsIDU4LCAyMzcsIDIzMywgMjU0LCAxMjMsIDI1NCwgMTY4LCA1OCwgMjI2LCAxMDYsIAotICAgIDI1NCwgMTIzLCAyNTQsIDE2OCwgNTgsIDI1MiwgMTI2LCAyNTQsIDEyMywgMjU0LCAxNjgsIDU4LCAyMjYsIDEwNiwgMjU0LCAKLSAgICAxMjMsIDI1MSwgODQsIDY3LCAyLCAyMzYsIDEyMCwgMjI2LCAxMDYsIDI1NCwgMTIzLCAyNTQsIDE2OCwgNjcsIDIsIDIzMywgCi0gICAgMTAsIDIwMywgNDEsIDIyOSwgMTg4LCAyNTEsIDg0LCA1OCwgMjAzLCA0MiwgMjI5LCAxODgsIDI1NCwgMTY4LCA1OCwgMjU0LCAKLSAgICAxNjgsIDI1MSwgODIsIDI1MSwgMTA3LCA1OCwgMjUxLCA4NCwgMjUxLCA4MiwgMjUxLCAxMDcsIDU4LCA4MSwgNjcsIDY0LCAKLSAgICAyMjksIDYzLCAxMTcsIDU4LCAxMTcsIDY3LCA2NCwgMjI5LCA2MywgODEsIDU4LCAyMjksIDYzLCA4MSwgNjcsIDY0LCAxMTcsIAotICAgIDU4LCA4MSwgNjcsIDIsIDc5LCA1MSwgMTE3LCA2NywgMiwgNzksIDUxLCA4MSwgNjcsIDIyNiwgMTg4LCAyMjQsIDczLCA0MiwgCi0gICAgNDEsIDY3LCAyMjYsIDE4OCwgMywgMjUxLCAxMDYsIDIyNSwgMTA2LCAyMjUsIDIwMywgNjcsIDI0NiwgMjI0LCAzLCAyNTEsIAotICAgIDEwNiwgNDIsIDE3MSwgOTksIDQxLCAxNzEsIDEwMywgMjQ1LCAxMzUsIDQyLCAxNzEsIDEwMywgNDEsIDE3MSwgOTksIDI0NSwgCi0gICAgMTM1LCA5OSwgMTcxLCA0MSwgMTAzLCAxNzEsIDQyLCAyNDUsIDEzNSwgOTksIDE3MSwgNDIsIDEwMywgMTcxLCA0MSwgMjQ1LCAKLSAgICAxMzUsIDQyLCAxNzEsIDk5LCA0MSwgMTcxLCA5OSwgMjQ1LCAxMzUsIDk5LCAxNzEsIDQxLCAxMDMsIDE3MSwgNDEsIDI0NSwgCi0gICAgMTM1LCA0MiwgMTcxLCAxMDMsIDQxLCAxNzEsIDEwMywgMjQ1LCAxMzUsIDk5LCAxNzEsIDQyLCAxMDMsIDE3MSwgNDIsIAotICAgIDI0NSwgMTM1LCAxMTcsIDI0NSwgMTM2LCAyLCAxNzEsIDk5LCAxODAsIDEyNSwgODEsIDI0NSwgMTM2LCAyLCAxNzEsIDk5LCAKLSAgICAxODAsIDEyNSwgMjI1LCAxMDYsIDI0NSwgMTM2LCAyLCAxNzEsIDQxLCAxODAsIDEyNSwgMjQ4LCAxMjUsIDI0NSwgMTM2LCAKLSAgICAyLCAxNzEsIDQxLCAxODAsIDEyNSwgMTE3LCAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDE4MCwgMTI1LCA4MSwgMjQ1LCAxMzYsIAotICAgIDIsIDE3MSwgMTAzLCAxODAsIDEyNSwgMjI1LCAxMDYsIDI0NSwgMTM2LCAyLCAxNzEsIDQyLCAxODAsIDEyNSwgMjQ4LCAKLSAgICAxMjUsIDI0NSwgMTM2LCAyLCAxNzEsIDQyLCAxODAsIDEyNSwgMTE3LCAyNDUsIDEzNiwgMiwgMTcxLCA5OSwgMjQ2LCAyMjQsIAotICAgIDEyNSwgODEsIDI0NSwgMTM2LCAyLCAxNzEsIDk5LCAyNDYsIDIyNCwgMTI1LCAyMjUsIDEwNiwgMjQ1LCAxMzYsIDIsIDE3MSwgCi0gICAgNDEsIDI0NiwgMjI0LCAxMjUsIDI0OCwgMTI1LCAyNDUsIDEzNiwgMiwgMTcxLCA0MSwgMjQ2LCAyMjQsIDEyNSwgMTE3LCAKLSAgICAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDI0NiwgMjI0LCAxMjUsIDgxLCAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDI0NiwgCi0gICAgMjI0LCAxMjUsIDIyNSwgMTA2LCAyNDUsIDEzNiwgMiwgMTcxLCA0MiwgMjQ2LCAyMjQsIDEyNSwgMjQ4LCAxMjUsIDI0NSwgCi0gICAgMTM2LCAyLCAxNzEsIDQyLCAyNDYsIDIyNCwgMTI1LCAxMTcsIDI0NSwgMTM2LCAyLCAxNzEsIDk5LCA2NCwgMTE3LCAyNDUsIAotICAgIDEzNiwgMiwgMTcxLCAyNDgsIDEyNywgMjI1LCAxMDYsIDI0NSwgMTM2LCAyLCAxNzEsIDQyLCAyNTIsIDIwMiwgMjI1LCAKLSAgICAxMDYsIDI0NSwgMTM2LCAyLCAxNzEsIDIzMSwgMTUzLCA4MSwgMjQ1LCAxMzYsIDIsIDE3MSwgOTksIDY0LCA4MSwgMjQ1LCAKLSAgICAxMzYsIDIsIDE3MSwgMjQ4LCAxMjcsIDI0OCwgMTI1LCAyNDUsIDEzNiwgMiwgMTcxLCA0MiwgMjUyLCAyMDIsIDI0OCwgCi0gICAgMTI1LCAyNDUsIDEzNiwgMiwgMTcxLCAyMzEsIDE1MywgMTE3LCAyNDUsIDEzNiwgMiwgMTcxLCA5OSwgNjQsIDgxLCAyNDUsIAotICAgIDEzNiwgMiwgMTcxLCAyMjUsIDExNiwgMTE3LCAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDY0LCA4MSwgMjQ1LCAxMzYsIDIsIAotICAgIDE3MSwgMjQ4LCAxMjcsIDgxLCAyNDUsIDEzNiwgMiwgMTcxLCA5OSwgNjQsIDExNywgMjQ1LCAxMzYsIDIsIDE3MSwgMjI1LCAKLSAgICAxMTYsIDgxLCAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDY0LCAxMTcsIDI0NSwgMTM2LCAyLCAxNzEsIDI0OCwgMTI3LCAxMTcsIAotICAgIDI0NSwgMTM2LCAyLCAxNzEsIDk5LCA2NCwgMTgyLCAyNTAsIDEzMCwgMTE3LCAyNDUsIDEzNiwgMiwgMTcxLCAxMDMsIDI1MiwgCi0gICAgMjE0LCAxODIsIDI1MCwgMTMwLCA4MSwgMjQ1LCAxMzYsIDIsIDE3MSwgOTksIDY0LCAxODIsIDI1MCwgMTMwLCA4MSwgMjQ1LCAKLSAgICAxMzYsIDIsIDE3MSwgMTAzLCAyNTIsIDIxNCwgMTgyLCAyNTAsIDEzMCwgMjI1LCAxMDYsIDI0NSwgMTM2LCAyLCAxNzEsIAotICAgIDQyLCAyNTIsIDIwMiwgMjQ4LCAxMjUsIDI0NSwgMTM2LCAyLCAxNzEsIDIzMSwgMTUzLCAyNDgsIDEyNSwgMjQ1LCAxMzYsIAotICAgIDIsIDE3MSwgNDIsIDI1MiwgMjAyLCAyMjUsIDEwNiwgMjQ1LCAxMzYsIDIsIDE3MSwgMjMxLCAxNTMsIDQxLCA0NywgNjcsIAotICAgIDIsIDIzMSwgMTAyLCAyNDUsIDExOCwgMjQ3LCAyMDQsIDUsIDY0LCA4MSwgNTgsIDIyNiwgMTU5LCAyMzQsIDM4LCA2NCwgCi0gICAgODEsIDU4LCAxMTcsIDY3LCA2NCwgMjI2LCAxNTksIDIzNCwgMzcsIDgxLCA2NywgNjQsIDIyNiwgMTU5LCAyMzQsIDM3LCAKLSAgICA4MSwgNjcsIDY0LCAyNTQsIDIxMCwgMTA1LCA5NiwgMjM3LCAyMTMsIDY0LCAxMTcsIDU4LCAxMTcsIDY3LCAyMjYsIDE4OCwgCi0gICAgMjM3LCAyMTIsIDI0NSwgMjMxLCA2NCwgODEsIDU4LCAyMjcsIDI1MiwgNjQsIDgxLCA1OCwgMTE3LCA2NywgMjI2LCAxODgsIAotICAgIDIyNywgMjUxLCAyMjcsIDIxOCwgNjQsIDExNywgNTgsIDQyLCAyNDcsIDQ0LCAyMjcsIDg5LCA0MSwgMjQ3LCA0NCwgMjI3LCAKLSAgICA4OSwgOTksIDI0NywgNDQsIDIyNywgODksIDEwMywgMjQ3LCA0NCwgMjI3LCA4OSwgMjI2LCA2NiwgNjEsIDI1MywgMzYsIAotICAgIDI1MCwgNTIsIDIyMywgMTIwLCAxNTAsIDIyOCwgMTI3LCAyMjMsIDEyMCwgMTUwLCAyMjUsIDE5NiwgMjUxLCA2MSwgNDIsIAotICAgIDYzLCAyNTAsIDIyMywgMTA0LCA0MSwgNjMsIDI1MCwgMjIzLCAxMDQsIDQyLCA2MywgMjMzLCAxODAsIDQxLCA2MywgMjMzLCAKLSAgICAxODAsIDIyMywgMTIwLCAxNTAsIDQyLCAyNDAsIDI5LCAxMDQsIDIyMywgMTIwLCAxNTAsIDQxLCAyNDAsIDI5LCAxMDQsIAotICAgIDIyMywgMTIwLCAxNTAsIDQyLCAyNTIsIDE2OCwgMTA0LCAyMjMsIDEyMCwgMTUwLCA0MSwgMjUyLCAxNjgsIDEwNCwgNDIsIAotICAgIDM3LCAyNTIsIDExNSwgMiwgMjI1LCAxMzMsIDQxLCAzNywgMjUyLCAxMTUsIDIsIDIyNSwgMTMzLCA0MiwgMzcsIDI1MiwgCi0gICAgMTE1LCAyLCAyMjYsIDE3MywgMjQwLCAxNywgMjI2LCAxMDYsIDI1MSwgMTAsIDQxLCAzNywgMjUyLCAxMTUsIDIsIDIyNiwgCi0gICAgMTczLCAyNDAsIDE3LCAyNTIsIDEyNiwgMjUxLCAxMCwgNDIsIDM3LCAyNTIsIDExNSwgMiwgMjI2LCAxNzMsIDI0MCwgMTcsIAotICAgIDI1MiwgMTI2LCAyNTEsIDEwLCA0MSwgMzcsIDI1MiwgMTE1LCAyLCAyMjYsIDE3MywgMjQwLCAxNywgMjI2LCAxMDYsIDI1MSwgCi0gICAgMTAsIDQyLCAyNTQsIDE4MiwgMjUyLCAxMTUsIDIsIDI0OSwgMTQwLCA0MSwgMjU0LCAxODIsIDI1MiwgMTE1LCAyLCAyNDksIAotICAgIDE0MCwgNDIsIDI1NCwgMTIzLCAyMzcsIDIxMywgMTA0LCA0MSwgMjU0LCAxMjMsIDI0NSwgMjMxLCAxMDQsIDQ3LCA0MiwgCi0gICAgMjU0LCAxMjMsIDI0NSwgMjMxLCAxMDQsIDQ3LCA0MSwgMjU0LCAxMjMsIDIzNywgMjEzLCAxMDQsIDQyLCA4NiwgMjI2LCAKLSAgICAxMDAsIDIyOSwgMTA0LCAxMDQsIDQxLCA4NiwgMjI2LCAxMDAsIDIyOSwgMTA0LCAxMDQsIDI0OCwgMTM4LCAyNDcsIDgwLCAKLSAgICA2MSwgMjIzLCAzOCwgMjM3LCAxNzAsIDIzNiwgMjMyLCAyNTQsIDE4MiwgMjM0LCAzOSwgMjM3LCAyMzcsIDQxLCAyNTQsIAotICAgIDE4MiwgMjI1LCA1NCwgMiwgMjI4LCAxMjAsIDIzNiwgMjMyLCA0MSwgMjU0LCAxODIsIDIsIDI0OSwgMTQwLCAyNTQsIDE4MiwgCi0gICAgMiwgMjMxLCAzNSwgMjM5LCAyNDMsIDI1NSwgMzMsIDI1NCwgMTgxLCAyMjgsIDEzNywgMjU0LCAxODIsIDIzNCwgMzksIAotICAgIDIzNywgMjM3LCAyMjgsIDEzNywgMjU0LCAxODIsIDIzNCwgMzksIDIyNSwgMTE2LCAyMDksIDI1NCwgMTgxLCAyMDAsIDI1NCwgCi0gICAgMTgxLCAyNTQsIDE4MiwgMiwgMjI1LCAxMzMsIDIwMCwgMjU0LCAxODIsIDIsIDIyNSwgMTMzLCAyMzQsIDk3LCAyNTQsIAotICAgIDE4MiwgMjM0LCAzOSwgMjI1LCAxMTYsIDIzNCwgOTcsIDI1NCwgMTgyLCAyMzQsIDM5LCAyNDgsIDEyNywgMjM2LCAyMzIsIAotICAgIDI1NCwgMTgyLCAyLCAyMzQsIDQ0LCAyNTQsIDEwNSwgMjQ3LCAyMzAsIDI0MCwgMTcsIDY3LCAyMzIsIDI1MSwgOTksIDIyLCAKLSAgICAyMzEsIDE1MywgMjM2LCAyMzIsIDI1NCwgMTgyLCAyLCAyMzQsIDQ0LCAyNTQsIDEwNSwgMjQ3LCAyMzAsIDI0MCwgMTcsIAotICAgIDY3LCAyMzIsIDI1MSwgOTksIDIyLCAyMzcsIDIzNywgMjM2LCAyMzIsIDI1NCwgMTgyLCAyLCAyMzQsIDQ0LCAyNTQsIDEwNSwgCi0gICAgMjQ3LCAyMzAsIDI0MCwgMTcsIDY3LCAyMzIsIDI1MSwgMTAzLCAyMiwgMjMxLCAxNTMsIDIzNiwgMjMyLCAyNTQsIDE4MiwgCi0gICAgMiwgMjM0LCA0NCwgMjU0LCAxMDUsIDI0NywgMjMwLCAyNDAsIDE3LCA2NywgMjMyLCAyNTEsIDEwMywgMjIsIDIzNywgMjM3LCAKLSAgICAyMzYsIDIzMiwgMjU0LCAxODIsIDIsIDIzNCwgNDQsIDI1NCwgMTA1LCAyNDcsIDIzMCwgMjQwLCAxNywgNjcsIDIzMiwgCi0gICAgMjUxLCA0MSwgMjIsIDIyNSwgMTE2LCAyMzYsIDIzMiwgMjU0LCAxODIsIDIsIDIzNCwgNDQsIDI1NCwgMTA1LCAyNDcsIAotICAgIDIzMCwgMjQwLCAxNywgNjcsIDIzMiwgMjUxLCA0MiwgMjIsIDIyNSwgMTE2LCAyMzYsIDIzMiwgMjU0LCAxODIsIDIsIDIzNCwgCi0gICAgNDQsIDI1NCwgMTA1LCAyNDcsIDIzMCwgMjQwLCAxNywgNjcsIDIzMiwgMjUxLCA0MSwgMjIsIDI0OCwgMTI3LCAyMzYsIAotICAgIDIzMiwgMjU0LCAxODIsIDIsIDIzNCwgNDQsIDI1NCwgMTA1LCAyNDcsIDIzMCwgMjQwLCAxNywgNjcsIDIzMiwgMjUxLCA0MiwgCi0gICAgMjIsIDI0OCwgMTI3LCAyMDAsIDI0NywgMjQxLCAyMjksIDE2NCwgMjQ3LCAyNDEsIDIyOSwgMTY1LCAyLCAyMzQsIDUsIAotICAgIDI0NywgMjQxLCAyMjksIDE2NSwgMiwgMywgMjUxLCAxMDcsIDQ2LCAyNDcsIDI0MSwgMjI5LCAxNjUsIDIsIDQxLCA2NywgCi0gICAgNDYsIDI0NywgMjQxLCAyMjksIDE2NSwgMiwgNDIsIDY3LCA0NiwgMjUxLCAxMDcsIDIsIDE2OSwgMTI1LCAzMywgNjEsIAotICAgIDEyNSwgMzMsIDIzMywgMTg0LCAzMywgMjMxLCAxOTMsIDIyOCwgMTYxLCAzMywgMjMzLCAxMTQsIDI1MSwgMTA3LCAyNDksIAotICAgIDE4NSwgMjUyLCA1NSwgMTY5LCAyNTMsIDM2LCAyMiwgMjI2LCAxMDYsIDEzMiwgMjQ5LCAxODUsIDI1MiwgNTUsIDYxLCAKLSAgICAxMjUsIDI1MSwgMTA3LCAyLCAyMjcsIDIyMCwgMjI0LCA3MywgMzMsIDI1NCwgMTY3LCAyNDksIDE4MSwgNTMsIDk5LCA2NywgCi0gICAgMjI2LCAxODgsIDI1MSwgMTA2LCAzMywgNjMsIDI1MiwgODMsIDMzLCAyNTIsIDgzLCAzMywgMjM3LCAyMTIsIDMzLCAyNDUsIAotICAgIDIzMCwgMjUxLCAxMDcsIDIsIDMsIDI1MSwgMTA3LCAxODAsIDIyNiwgMjQwLCAyMzEsIDE1MywgMjUxLCAxMDcsIDIsIDEzNSwgCi0gICAgMTY5LCAyMjgsIDExLCAxODAsIDIyNiwgMjQwLCAyMzEsIDE1MywgMjI4LCAxMTksIDIzMSwgMTM1LCAyNTAsIDEsIDIyOCwgCi0gICAgMTk0LCAyMjgsIDExOSwgMjQ3LCAxMTMsIDI1MCwgMSwgMjI4LCAxOTQsIDIyOCwgMTE5LCAyNTQsIDY5LCAyMjgsIDExOSwgCi0gICAgMywgMjUxLCAxMDYsIDIyOCwgMTE5LCAyMjgsIDEyMCwgMTM1LCAyMzksIDExNCwgMjI4LCAxMTcsIDIyNiwgNzksIDIsIDU2LCAKLSAgICA0NiwgMjI2LCA3OSwgMiwgMjI1LCAxMzMsIDIzMSwgMzUsIDI0MCwgMTcsIDIyNiwgNzgsIDIyNiwgNzksIDIsIDIyOSwgCi0gICAgMTcxLCAyNTQsIDYzLCAyNTIsIDEyNSwgNDEsIDIyNiwgNzksIDY0LCA0MiwgMjI2LCA3OCwgNDIsIDIyNiwgNzksIDI1MiwgCi0gICAgMjAyLCA2MSwgMTI1LCA2MSwgMjUzLCAzNiwgMjUyLCAyMDIsIDQxLCAyMjYsIDc4LCAyNTIsIDEyMCwgMiwgNDIsIDEzMiwgCi0gICAgMjUyLCAxNTAsIDI1MiwgMTIwLCAyLCA0MSwgMTMyLCAyNTIsIDE1MCwgODYsIDI1MiwgMTE5LCAyNCwgMiwgNDIsIDEzMiwgCi0gICAgMjUyLCAxNTAsIDI0LCAyLCA0MSwgMTMyLCAyNTIsIDE1MCwgNjMsIDI0NCwgMTU0LCA4NiwgMjQ0LCAxNTQsIDQyLCAyMjQsIAotICAgIDExNCwgMjQ3LCA4MCwgNDEsIDIyNCwgMTE0LCAyNDcsIDgwLCA0MiwgNDcsIDIyNCwgMTE0LCAyNDcsIDgwLCA0MSwgNDcsIAotICAgIDIyNCwgMTE0LCAyNDcsIDgwLCAyNDAsIDEzLCAyNDAsIDMsIDIyNiwgMTcxLCAxMDcsIDI0MCwgMywgMjQwLCA0LCAyMzUsIAotICAgIDE1OSwgMiwgNjEsIDEyNSwgMjQ4LCAxMzIsIDIzNiwgNTUsIDM3LCAyLCAyNTEsIDIxLCAyMzQsIDgsIDI0MCwgMTEsIDI1NCwgCi0gICAgODYsIDIyOSwgMzksIDIzMiwgMjAwLCAyNDcsIDIwNCwgNSwgMjIsIDIyOCwgMTk2LCAyMzMsIDE4NCwgMjQ3LCAyMDQsIDUsIAotICAgIDIyLCAyMjgsIDE5NiwgMjMzLCAxODUsIDIsIDIyNiwgMTU5LCA0NiwgMjQ0LCA2MywgMTgwLCAyMiwgMjI4LCAxOTYsIDIzMywgCi0gICAgMTg0LCAyNDYsIDE4LCAyMjgsIDU3LCAyMjYsIDIyOSwgMjQ4LCAxMjYsIDIyNiwgNzksIDIsIDQyLCAxMzIsIDI1MiwgMTUwLCAKLSAgICAyNDgsIDEyNiwgMjI2LCA3OSwgMiwgNDEsIDEzMiwgMjUyLCAxNTAsIDg2LCAyNDksIDI1MSwgMiwgMTAzLCA1OCwgODYsIAotICAgIDIzNywgMTEzLCA2MywgMjUxLCAxMDcsIDIsIDEwMywgNTgsIDg2LCAyNTEsIDEwNywgMiwgMTAzLCA1OCwgMjQ3LCAxOTEsIAotICAgIDYzLCAyMjgsIDEyMCwgMjQ3LCAxOTEsIDg2LCAyMjgsIDEyMCwgMjQ3LCAxOTEsIDYzLCAyNDksIDI1MCwgMjQ3LCAxOTEsIAotICAgIDg2LCAyNDksIDI1MCwgMjQ3LCAxOTEsIDYzLCAyNTEsIDEwNiwgMjQ3LCAxOTEsIDg2LCAyNTEsIDEwNiwgMjMxLCA2NCwgCi0gICAgMjMxLCAxOTMsIDIyOCwgMTYyLCAyMzQsIDM3LCAyMjgsIDE2MiwgMiwgMjM0LCA1LCAyMzEsIDE5MywgMjI4LCAxNjIsIDIsIAotICAgIDE2OSwgODIsIDI1MiwgMTczLCAyMjgsIDE2MSwgMjUyLCAxNzMsIDIzMSwgMTkzLCAyMjgsIDE2MSwgNDcsIDIzMywgMTAsIAotICAgIDIyNiwgNjYsIDIzMywgMTAsIDIzNywgMjM1LCAyNTAsIDIxNywgMjU0LCAxODIsIDEwNCwgMjMxLCAxNTEsIDI1MCwgMjE3LCAKLSAgICAyNTQsIDE4MiwgMTA0LCAyMjYsIDE1MiwgMjM2LCAxMTgsIDIzNiwgNCwgMzMsIDU2LCAyMzQsIDM3LCAyMzYsIDQsIDMzLCAKLSAgICA3OSwgMjM0LCAzNywgMjM2LCA0LCAzMywgMjQsIDIzNCwgMzcsIDIzNiwgNCwgMjI1LCAxMjgsIDIzNCwgMzgsIDIsIDI0OSwgCi0gICAgMTQwLCAyMzYsIDQsIDIyNSwgMTI4LCAyMzQsIDM4LCAyLCAyMzMsIDEwLCAyMzYsIDQsIDM3LCAyMzksIDIyOCwgMjM0LCAKLSAgICAzNywgMjM2LCA0LCAzNywgMjI1LCAxMjgsIDIzNCwgMzcsIDEzNSwgMjM3LCAxMzgsIDIyLCAyMzQsIDM3LCAxMzUsIDIzNywgCi0gICAgMTM4LCAxNDUsIDIzNCwgMzcsIDIzNiwgNCwgMjQsIDIzNCwgMzcsIDIzNiwgOTgsIDEzNSwgMjI3LCAyMzMsIDIyNywgMjMxLCAKLSAgICAyLCAyMzksIDIzOSwgMjMyLCA3OCwgMjM5LCAyNDAsIDIzNCwgMzcsIDI0NywgNDgsIDIzMywgMTc2LCAyMzksIDIzOSwgCi0gICAgMjM5LCAyNDAsIDIsIDQ3LCA4MiwgMjM5LCAyNDAsIDI1NCwgMzgsIDIsIDIyOCwgMTk0LCAyNTEsIDEwMywgMjQ2LCAyMTUsIAotICAgIDI1NCwgMTY4LCAyMzksIDIzNywgMjM3LCAxNzEsIDIzOSwgMjM4LCAyLCAyMzEsIDIzNSwgMjMzLCAxNjQsIDI1NCwgMTAyLCAKLSAgICAyMzIsIDI0NywgMjM3LCAxNzEsIDIzOSwgMjM4LCAyLCAyMjksIDE4OCwgMjMzLCAxNjQsIDI1NCwgMTAyLCAyMzIsIDI0NywgCi0gICAgMjM3LCAxNzEsIDIzOSwgMjM4LCAxOTAsIDI0MCwgMTQsIDIyNiwgMjQwLCAyMzIsIDI0NywgMjM5LCAyNDAsIDI1NCwgMTAyLCAKLSAgICAxMDIsIDIzMiwgMjU1LCAyMzQsIDM3LCAyMzIsIDczLCAyMzksIDI0MCwgMjM0LCAzNywgMjM5LCAyNDAsIDIsIDExNywgNjcsIAotICAgIDIsIDg4LCAyMzksIDI0MCwgMiwgMjQsIDUzLCAyMzksIDI0MCwgMiwgMjM5LCAyMjcsIDIzOSwgMjQwLCAyLCAyMjUsIDEyNywgCi0gICAgMjM5LCAyNDAsIDIsIDIzNCwgNSwgMjM5LCAyNDAsIDIsIDIyNSwgMTMzLCAyMzksIDExNSwgMjM4LCA5LCA0MiwgMjI2LCAKLSAgICA3OSwgMjM0LCAzNywgMjIzLCAxMjAsIDE1MCwgMjMwLCAyMjUsIDI1MSwgNDUsIDIyMywgMTIwLCAxNTAsIDIzMCwgMjI1LCAKLSAgICAyMzMsIDM0LCAyMjMsIDEyMCwgMTUwLCAyMzAsIDIyNSwgMjMyLCAxOTcsIDc5LCA1LCAyLCAzLCAyNTEsIDEwNywgNDYsIAotICAgIDc5LCA1LCAyLCAyNTEsIDEwMiwgMjU1LCA0MiwgNDYsIDc5LCA1LCAyLCAyMjYsIDE1OSwgNDYsIDc5LCA1LCAyLCA1NiwgCi0gICAgNTEsIDc5LCA1LCAyLCAyMjYsIDE1OSwgNTEsIDc5LCA1LCAyLCAyMjcsIDI1MywgMTEzLCA3OSwgNSwgMiwgODYsIDIyNiwgCi0gICAgNzgsIDIzNiwgMTIxLCA1LCAyLCAyNTEsIDU1LCA0NiwgMjM2LCAxMjEsIDUsIDIsIDU2LCA1MSwgMjM2LCAxMjEsIDUsIDIsIAotICAgIDI0NywgMTEzLCAyNDksIDEzOCwgMjM2LCAxMjEsIDUsIDIsIDIzMSwgMTM1LCAyNDksIDEzOCwgNzksIDUsIDI0MCwgMTcsIAotICAgIDQyLCAxMzIsIDI1MSwgMTA2LCA3OSwgNSwgMjQwLCAxNywgNDEsIDEzMiwgMjUxLCAxMDYsIDIyNSwgNDEsIDE0NSwgMjUwLCAKLSAgICAyNDQsIDIzMiwgMjAwLCAyMzYsIDUyLCA1LCAyLCA1NiwgNDYsIDIzNiwgNTIsIDUsIDIsIDIyNSwgMTMzLCAyMjksIDE4NSwgCi0gICAgMjMyLCAyMDEsIDIsIDI1MiwgMTI2LCAyNTEsIDgxLCAyMjgsIDE4MiwgMjMyLCAyMDAsIDIzNiwgNTIsIDUsIDI0MCwgMTcsIAotICAgIDQyLCAxMzIsIDI1MSwgMTA2LCAyMzYsIDUyLCA1LCAyNDAsIDE3LCA0MSwgMTMyLCAyNTEsIDEwNiwgMzMsIDIzNiwgNTIsIAotICAgIDUsIDIsIDI1MSwgMTAyLCAyNTUsIDQxLCAyMzYsIDUyLCA1LCAyNDAsIDE3LCA0NywgMjUxLCAxMDYsIDMzLCAyNDksIDE4MSwgCi0gICAgNTMsIDc5LCA1LCAyNDAsIDE3LCAyMjYsIDc4LCAyMzYsIDEyMSwgNSwgMjQwLCAxNywgMjI2LCA3OCwgMjM2LCA1MiwgNSwgCi0gICAgMjQwLCAxNywgMjI2LCA3OCwgMjM5LCAyMzQsIDIzMiwgMjAwLCAyMzEsIDE0NiwgMjM5LCAyMzQsIDIzMiwgMjAwLCAyMjMsIAotICAgIDEyMCwgMTUwLCAyMzEsIDIyMCwgMjUxLCA0NSwgMjU0LCAxOTgsIDE0NSwgMjUxLCAxNSwgMjM5LCAyMjgsIDIsIDI0OSwgCi0gICAgMTQwLCAyMjUsIDEyOCwgMiwgMjM2LCAxMjEsIDUzLCAyMjUsIDEyOCwgMiwgMjM0LCA1LCAyMzksIDIyOCwgMiwgMjM0LCA1LCAKLSAgICAyMzksIDIyOCwgMiwgMjM3LCAxMzgsIDI1NCwgMTg2LCAyMjUsIDEyOCwgMiwgMjM3LCAxMzgsIDIzNCwgMzEsIDIyNSwgCi0gICAgMTI4LCA2NCwgMjM5LCAyMjcsIDIzOSwgMjI4LCA2NCwgMjI1LCAxMjcsIDIyNSwgMTI4LCA2NCwgMjUzLCAzNiwgNjQsIAotICAgIDIzOSwgMjI3LCAyMzksIDIyOCwgNjQsIDI1MywgMzYsIDY0LCAyMjUsIDEyNywgMjI1LCAxMjgsIDI1MiwgMjAyLCAyMiwgCi0gICAgMjM5LCAxMTQsIDIsIDIyNSwgMTI3LCAyMzksIDIyOCwgMjUyLCAyMDIsIDIyLCAyMzksIDExNCwgMiwgMjM5LCAyMjcsIAotICAgIDI1MSwgODIsIDIyNSwgMTI4LCAyLCAyMjksIDE3MCwgMjUxLCA4MiwgMjM5LCAyMjgsIDIsIDIyOSwgMTcwLCA0NywgMzcsIAotICAgIDIzOSwgMjI3LCA0NywgMzcsIDIyNSwgMTI3LCAyNTEsIDgyLCAyMjUsIDEyOCwgMiwgMjI5LCAxNzEsIDIyLCAyMjgsIDE4MiwgCi0gICAgMjMyLCAyMDAsIDIzNywgMTM4LCAyMiwgMiwgNTYsIDQ2LCAyMzcsIDEzOCwgMTQ1LCAyLCA1NiwgNDYsIDQ3LCAyMzcsIAotICAgIDEzOCwgMjU0LCAxODYsIDQ3LCAyMzcsIDEzOCwgMjM0LCAzMSwgMTM1LCAyMzksIDIyOSwgMjM3LCAxMzgsIDI1NCwgMTg2LCAKLSAgICAxMzUsIDIzOSwgMjI5LCAyMzcsIDEzOCwgMjM0LCAzMSwgMjI4LCAxODgsIDIzOCwgOSwgMjM0LCAzMSwgMjI4LCAxODgsIAotICAgIDIzOCwgOSwgMjU0LCAxODYsIDIzNywgMTM4LCAxNDUsIDIzNCwgMywgMjM3LCAxMzgsIDI1NCwgMTg2LCAyMzcsIDEzOCwgCi0gICAgMjIsIDIsIDIzNiwgMTU0LCAyMjgsIDQ4LCAyMzcsIDEzOCwgMTQ1LCAyLCAyMzYsIDE1NCwgMjI4LCA0OCwgMjM3LCAxMzgsIAotICAgIDIyLCAyLCAxNjksIDI1MCwgMTMwLCAyMzcsIDEzOCwgMTQ1LCAyLCAxNjksIDI1MCwgMTMwLCAyMzcsIDEzOCwgMjIsIDIsIAotICAgIDQ3LCAyMzQsIDUsIDIzNywgMTM4LCAyMiwgMiwgMjI1LCAxMzMsIDIzNywgMTM4LCAyMiwgMiwgNDcsIDIyNSwgMTMzLCAzLCAKLSAgICAyMjUsIDM5LCAyLCAyMjUsIDEzMywgMjM3LCAxMzgsIDE0NSwgMiwgNDcsIDIzNCwgNSwgMjM3LCAxMzgsIDE0NSwgMiwgNDcsIAotICAgIDIyNSwgMTMzLCAyMjMsIDEyMCwgMTUwLCAyNDksIDE0OSwgMjU0LCAxNjMsIDIyMywgMTIwLCAxNTAsIDIzMiwgMiwgMjU0LCAKLSAgICAxNjMsIDI0NywgMjA0LCA1LCAyLCA1NiwgNTEsIDI0NCwgNjMsIDIsIDU2LCA0NiwgMjI2LCA2NiwgMTY5LCAyNTMsIDM2LCAKLSAgICAyLCA0NywgNjEsIDgyLCAyMjYsIDY2LCAxNjksIDI1MywgMzYsIDIsIDIyNiwgNjYsIDYxLCA4MiwgMjI2LCAxNTksIDIzNCwgCi0gICAgMzgsIDIsIDU2LCA0NiwgMjI2LCAxNTksIDIzNCwgMzgsIDIsIDIzMSwgMTM1LCAyNDksIDEzOCwgMjI4LCAyNDcsIDIzNiwgCi0gICAgMTIxLCAyMjgsIDI0NiwgMjUxLCAzOSwgMiwgNTYsIDQ2LCAyNDcsIDIwNCwgMiwgMjU0LCA2OSwgMjU0LCAyMTAsIDEwNSwgCi0gICAgMTgwLCAyLCAyNTEsIDEwMiwgMjU1LCA0MSwgMjU0LCAxMzcsIDEwNSwgMTQ1LCAxMDUsIDk2LCAyNDcsIDIwNCwgNSwgNjQsIAotICAgIDc5LCA1MywgNzksIDUsIDY0LCAyNDcsIDIwNCwgNTMsIDI0NywgMjA0LCA1LCA2NCwgMjI2LCAxNTksIDIzNCwgMzcsIDQ3LCAKLSAgICAyNTEsIDYyLCAyNDcsIDIwNSwgMTM1LCAyNTEsIDM0LCAyNDcsIDIwNCwgMjI5LCAxLCAxNTIsIDI1MSwgMzQsIDI0NywgCi0gICAgMjA0LCAyMjksIDEsIDI0NywgMjA0LCA1LCAyLCAxMzUsIDE5NywgNjQsIDIyLCAxMzUsIDE5NywgNTEsIDI0NywgMjAwLCAyLCAKLSAgICAyNDYsIDI0MywgMTk3LCA0NiwgMjM3LCAyMTMsIDIsIDI1MSwgMTA3LCAyMzksIDI0MywgMjQ1LCAyMzEsIDIsIDI1MSwgCi0gICAgMTA3LCAyMzksIDI0MywgMjM3LCAyMTMsIDIsIDIzMiwgNjksIDE2NSwgNDYsIDI0NSwgMjMxLCAyLCAyMzIsIDY5LCAxNjUsIAotICAgIDQ2LCAyMzcsIDIxMywgMTQ1LCAyMjgsIDE5NiwgMTA1LCA5NiwgMjQ1LCAyMzEsIDE0NSwgMjI4LCAxOTYsIDEwNSwgOTYsIAotICAgIDIzNywgMjEzLCAxNDUsIDIyOCwgMTk2LCAxMDUsIDE4MCwgMiwgNTYsIDIzOSwgMjQzLCAyNDUsIDIzMSwgMTQ1LCAyMjgsIAotICAgIDE5NiwgMTA1LCAxODAsIDIsIDU2LCAyMzksIDI0MywgMjM3LCAyMTMsIDE0NSwgMjI4LCAxOTYsIDEwNSwgMTgwLCAyLCA1NiwgCi0gICAgNDYsIDI0NSwgMjMxLCAxNDUsIDIyOCwgMTk2LCAxMDUsIDE4MCwgMiwgNTYsIDQ2LCAyMzcsIDIxMywgMTQ1LCAyMjgsIAotICAgIDE5NiwgMTA1LCAxODAsIDIsIDU2LCA2NCwgMjMxLCAxNTMsIDI0NSwgMjMxLCAxNDUsIDIyOCwgMTk2LCAxMDUsIDE4MCwgMiwgCi0gICAgNTYsIDY0LCAyMzcsIDIzNywgMjM3LCAyMTMsIDE0NSwgMjU0LCAxMzgsIDI0NSwgMjMxLCAxNDUsIDI1NCwgMTM4LCAyMzcsIAotICAgIDIxMywgMjIsIDIyOCwgMjM5LCAxOTAsIDEwNSwgOTYsIDI0NSwgMjMxLCAyMiwgMjI4LCAyMzksIDE5MCwgMTA1LCA5NiwgCi0gICAgMjM3LCAyMTMsIDIyLCAxOTAsIDI1NCwgMTM4LCAyNDUsIDIzMSwgMjIsIDE5MCwgMjU0LCAxMzgsIDIzNywgMjEzLCA2NCwgCi0gICAgMjQ4LCAxMzEsIDEwNSwgNjQsIDI0NSwgMjMwLCAyNDUsIDIzMSwgNjQsIDI0OCwgMTMxLCAxMDUsIDY0LCAyMzcsIDIxMiwgCi0gICAgMjM3LCAyMTMsIDY0LCAyMjgsIDI0NywgMTQ1LCAyNDcsIDIwNSwgMjQ1LCAyMzEsIDY0LCAyMjgsIDI0NywgMTQ1LCAyNDcsIAotICAgIDIwNSwgMjM3LCAyMTMsIDY0LCAyMjgsIDI0NywgNjQsIDI0NSwgMjMwLCAyNDUsIDIzMSwgNjQsIDIyOCwgMjQ3LCA2NCwgCi0gICAgMjM3LCAyMTIsIDIzNywgMjEzLCA2NCwgMjQ1LCAyMzEsIDY0LCAyNDgsIDEzMSwgMjQ3LCAyMDUsIDI0NSwgMjMxLCA2NCwgCi0gICAgMjM3LCAyMTMsIDY0LCAyNDgsIDEzMSwgMjQ3LCAyMDUsIDIzNywgMjEzLCA2NCwgMjI4LCAxOTYsIDEwNSwgNjQsIDI0NSwgCi0gICAgMjMxLCA2NCwgMjI4LCAxOTYsIDI0NywgMjA1LCAyNDUsIDIzMSwgNjQsIDIyOCwgMTk2LCAxMDUsIDY0LCAyMzcsIDIxMywgCi0gICAgNjQsIDIyOCwgMTk2LCAyNDcsIDIwNSwgMjI4LCAxOTYsIDEwNSwgMTgwLCAxNDUsIDIzNywgMjEyLCAyMjgsIDE5NiwgMTA1LCAKLSAgICAxODAsIDE0NSwgMjQ1LCAyMzAsIDIyOCwgMTk2LCAxMDUsIDE4MCwgMTQ1LCAyMzcsIDIxMywgMiwgNTYsIDIzOSwgMjQzLCAKLSAgICAyMjgsIDE5NiwgMTA1LCAxODAsIDE0NSwgMjQ1LCAyMzEsIDIsIDU2LCAyMzksIDI0MywgMjQ4LCAxMzEsIDEwNSwgMTgwLCAKLSAgICAxNDUsIDIzNywgMjEyLCAyNDgsIDEzMSwgMTA1LCAxODAsIDE0NSwgMjQ1LCAyMzAsIDI0OCwgMTMxLCAyMjgsIDE5NiwgCi0gICAgMTA1LCAxODAsIDE0NSwgMjM3LCAyMTIsIDI0OCwgMTMxLCAyMjgsIDE5NiwgMTA1LCAxODAsIDE0NSwgMjQ1LCAyMzAsIAotICAgIDIyOCwgMjQ3LCAxNDUsIDIzNywgMjEyLCAyMjgsIDI0NywgMTQ1LCAyNDUsIDIzMCwgMjI4LCAyNDcsIDY0LCAyMzcsIDIxMywgCi0gICAgNjQsIDI0NywgMjA0LCA1MywgMjI4LCAyNDcsIDY0LCAyNDUsIDIzMSwgNjQsIDI0NywgMjA0LCA1MywgNDcsIDIzNSwgMTQ5LCAKLSAgICAyMzcsIDIxMiwgNDcsIDIzNSwgMTQ5LCAyNDUsIDIzMCwgNDcsIDIzNSwgMTQ5LCAyMzcsIDIxMywgMiwgMjI1LCAxMzMsIAotICAgIDI0NSwgMjMxLCAyMzQsIDMsIDIzNywgMjEyLCAyNDUsIDIzMSwgMjUyLCAyMDIsIDIzNywgMjEyLCAyMzcsIDIxMywgMjUxLCAKLSAgICA4MiwgMjUyLCA1NSwgMjUwLCAyMTgsIDI0NSwgMjMxLCAyNTEsIDgyLCAyNTIsIDU1LCAyNTAsIDIxOCwgMjM3LCAyMTMsIAotICAgIDI1MSwgODIsIDI1MiwgNTUsIDI1MCwgMjE5LCA2NCwgMjI4LCAxOTYsIDI0NywgMjA1LCAyNDUsIDIzMSwgMjUxLCA4MiwgCi0gICAgMjUyLCA1NSwgMjUwLCAyMTksIDY0LCAyMjgsIDE5NiwgMjQ3LCAyMDUsIDIyOCwgMTgzLCAyMjYsIDI0MywgMjM4LCA4LCAKLSAgICAyMjYsIDI0MywgMjI4LCAxODMsIDIyNiwgMjQ0LCAxNDUsIDEwNSwgOTYsIDIzOCwgOCwgMjI2LCAyNDQsIDE0NSwgMTA1LCAKLSAgICA5NiwgMjQ3LCAyMDQsIDUsIDIsIDI1MiwgNzgsIDQ2LCAyMzIsIDIxNCwgNjQsIDIyOCwgMjM5LCAyNDcsIDIwNCwgNTMsIAotICAgIDIyNywgMjQ0LCA2NCwgMjI4LCAyMzksIDI0NywgMjA0LCA1MywgMjMyLCAyMTQsIDY0LCAyMjgsIDIzOSwgMTkwLCAxMDUsIAotICAgIDk2LCAyMjcsIDI0NCwgNjQsIDIyOCwgMjM5LCAxOTAsIDEwNSwgOTYsIDIzMiwgMjE0LCA2NCwgMjQ3LCAyMDQsIDUzLCAKLSAgICAyMjcsIDI0NCwgNjQsIDI0NywgMjA0LCA1MywgMjMyLCAyMTQsIDY0LCAxOTAsIDEwNSwgOTYsIDIyNywgMjQ0LCA2NCwgCi0gICAgMTkwLCAxMDUsIDk2LCAyMzIsIDIxNCwgNjQsIDI1NCwgMjEwLCAxMDUsIDk2LCAyMjcsIDI0NCwgNjQsIDI1NCwgMjEwLCAKLSAgICAxMDUsIDk2LCAyMzIsIDIxNCwgNjQsIDE5MCwgMjU0LCAyMTAsIDEwNSwgOTYsIDIyNywgMjQ0LCA2NCwgMTkwLCAyNTQsIAotICAgIDIxMCwgMTA1LCA5NiwgNDcsIDIzMiwgMjEzLCA0NywgMjI3LCAyNDMsIDIyNywgMjUyLCAyLCAyNDksIDE0MCwgMjI3LCAKLSAgICAyMTgsIDIsIDI0OSwgMTQwLCAyMjcsIDI1MiwgMiwgNzksIDUsIDUxLCAyMjcsIDIxOCwgMiwgNzksIDUsIDUxLCAyMjcsIAotICAgIDI1MiwgMiwgMjM2LCA1MiwgNSwgNTEsIDIyNywgMjE4LCAyLCAyMzYsIDUyLCA1LCA1MSwgMjI3LCAyNTIsIDEwNiwgMTQ1LCAKLSAgICAxMDUsIDE4MCwgMiwgNTYsIDQ2LCAyMjcsIDIxOCwgMTA2LCAxNDUsIDEwNSwgMTgwLCAyLCA1NiwgNDYsIDIyNywgMjUyLCAKLSAgICAxMDYsIDY0LCAyNDcsIDIwNCwgNTMsIDIyNywgMjE4LCAxMDYsIDY0LCAyNDcsIDIwNCwgNTMsIDIyNywgMjUyLCAxMDYsIAotICAgIDY0LCAyMjYsIDE1OSwgMjM0LCAzNywgMjI3LCAyMTgsIDEwNiwgNjQsIDIyNiwgMTU5LCAyMzQsIDM3LCAyMjcsIDI1MiwgCi0gICAgMTA2LCA2NCwgMjU0LCAyMTAsIDEwNSwgOTYsIDIyNywgMjE4LCAxMDYsIDY0LCAyNTQsIDIxMCwgMTA1LCA5NiwgMjI3LCAKLSAgICAyNTIsIDEwNiwgNjQsIDE5MCwgMTA1LCA5NiwgMjI3LCAyMTgsIDEwNiwgNjQsIDE5MCwgMTA1LCA5NiwgMzcsIDQyLCAyMzQsIAotICAgIDQ0LCA3NywgMjM0LCAzNywgMzcsIDQxLCAyMzQsIDQ0LCA3NywgMjM0LCAzNywgMjUxLCA4MiwgMjI3LCAyNTEsIDI1MSwgCi0gICAgODIsIDIyNywgMjE3LCAyNTEsIDgyLCAyMjcsIDI1MiwgMTQ1LCAxMDUsIDk2LCAyNTEsIDgyLCAyMjcsIDIxOCwgMTQ1LCAKLSAgICAxMDUsIDk2LCAyMjcsIDI1MiwgNjQsIDIyNywgMjE3LCAyMjcsIDIxOCwgNjQsIDIyNywgMjUxLCAyMjcsIDI1MiwgNjQsIAotICAgIDIyNywgMjUxLCAyMjcsIDIxOCwgNjQsIDIyNywgMjE3LCAyMjcsIDIxOCwgMjUyLCAyMDIsIDIyNywgMjUxLCAyMjcsIDIxOCwgCi0gICAgMjUyLCAyMDIsIDIyLCAyMzksIDExNCwgMjUyLCA1NSwgMjUwLCAxMzEsIDIsIDIyNywgMjUxLCAyNDcsIDI1NCwgMTA2LCAKLSAgICAyMzQsIDM5LCAyNDgsIDEyNCwgMjMzLCAyOSwgMiwgMjI3LCAzOCwgMjI2LCAxMDUsIDIyNiwgOTAsIDIzOSwgMjI3LCAyNDYsIAotICAgIDI1MCwgMjM0LCAyNTQsIDIyOSwgNjMsIDQyLCAyMjcsIDk2LCAyMjksIDYzLCAxMDMsIDIyNywgOTYsIDIyOSwgNjMsIDk5LCAKLSAgICAyMjcsIDk2LCAyMzMsIDExNSwgMiwgMTkzLCA2MSwgMjUzLCAzNiwgMjI2LCA2NiwgNDEsIDIyNSwgMjMyLCA0NywgNjEsIAotICAgIDI1MywgMzYsIDQyLCAyMjUsIDIzMiwgNjEsIDI1MywgMzYsIDQ3LCA0MiwgMjI1LCAyMzIsIDQ3LCA2MSwgMjUzLCAzNiwgCi0gICAgNDcsIDQyLCAyMjUsIDIzMiwgMTgyLCAyNTAsIDEzMSwgMjQ2LCAyMjQsIDQyLCAyMzYsIDIxNCwgMTA2LCA0NywgMjI1LCAKLSAgICAzMCwgMjI5LCA2MywgMTAzLCAyMjcsIDk3LCAyLCAyMzQsIDUsIDIyOSwgNjMsIDk5LCAyMjcsIDk3LCAyLCAyMjUsIDEzMywgCi0gICAgMjI5LCA2MywgOTksIDIyNywgOTcsIDY0LCAyMjksIDYzLCAxMDMsIDIyNywgOTYsIDQ3LCAxMDMsIDIyNywgOTYsIDQ3LCAKLSAgICA5OSwgMjI3LCA5NiwgNDcsIDE5NSwgMTkwLCA1MywgMjAwLCA0NywgMTk1LCAxOTAsIDUzLCAyNDksIDE1NCwgMTkwLCAyNDksIAotICAgIDE4NywgMiwgMjAwLCAyMzUsIDE1OCwgMjI4LCAxOTQsIDYxLCAyMzcsIDE3MSwgMiwgMjUxLCAxMDcsIDQ2LCA2MSwgMjM3LCAKLSAgICAxNzEsIDIsIDI1MSwgMTA3LCA1MSwgMTAzLCAyMjcsIDk3LCAyLCAyNTEsIDEwNywgNTEsIDIzMywgMTg1LCAyLCAxNjksIAotICAgIDgyLCAyMzMsIDE4NSwgMiwgMjI2LCAxNTksIDIzNCwgMzcsIDIyNiwgNjYsIDYxLCAyNTMsIDM2LCAyNTIsIDE3MCwgMjMxLCAKLSAgICAyMjEsIDIyNiwgNjYsIDYxLCAyNTMsIDM2LCAyLCAxNjksIDgyLCAyMjYsIDY2LCAyNTEsIDYyLCAyMzQsIDM3LCAyMjYsIAotICAgIDY2LCAyMzUsIDE0OSwgMjM3LCAyMTIsIDIyNiwgNjYsIDIzNSwgMTQ5LCAyNDUsIDIzMCwgMjQ4LCAxMzEsIDIyOCwgMTk2LCAKLSAgICAyMzcsIDIxMywgMTQ1LCAxMDUsIDk2LCAyNDgsIDEzMSwgMjI4LCAxOTYsIDI0NSwgMjMxLCAxNDUsIDEwNSwgOTYsIDIyNiwgCi0gICAgNjYsIDIyOCwgMTYyLCAyNTIsIDE3MCwgMjMxLCAyMjEsIDIzOCwgOSwgMjI2LCA2NiwgNjEsIDI1MywgMzYsIDIzNCwgMzcsIAotICAgIDQ3LCAyMjgsIDE2MiwgMjM0LCAzNywgNjMsIDYxLCAxMjUsIDIzNiwgNCwgNjMsIDYxLCAxMjUsIDIzNCwgMjQ1LCAyNDgsIAotICAgIDQ1LCA2MywgNTgsIDIzNCwgMjQ1LCAyMjQsIDEzMSwgNjMsIDU4LCAyMjgsIDE1MiwgMjQ4LCA0NSwgNjMsIDU4LCAyMjgsIAotICAgIDE1MiwgMjI0LCAxMzEsIDYzLCA1OCwgNDIsIDQxLCA2MywgNTgsIDExNywgODYsIDU4LCAyMjUsIDEwNiwgODYsIDU4LCAKLSAgICAyNDgsIDEyNSwgODYsIDU4LCAyMzQsIDI0NSwgMjQ4LCA0NSwgODYsIDU4LCAyMzQsIDI0NSwgMjI0LCAxMzEsIDg2LCA1OCwgCi0gICAgMjI4LCAxNTIsIDI0OCwgNDUsIDg2LCA1OCwgMjI4LCAxNTIsIDIyNCwgMTMxLCA4NiwgNTgsIDQyLCA0MSwgODYsIDU4LCAKLSAgICA5OSwgMTAzLCA4NiwgNTgsIDgxLCA2NywgMiwgMjI2LCAxNTEsIDI0OCwgMTI0LCA4MSwgNjcsIDIsIDIyNiwgMTUxLCAyMjUsIAotICAgIDEwNSwgMTE3LCA2NywgMiwgMjI2LCAxNTEsIDI0OCwgMTI0LCAxMTcsIDY3LCAyLCAyMjYsIDE1MSwgMjI1LCAxMDUsIDM3LCAKLSAgICAyLCAyMjYsIDEwNiwgMTMyLCAyNTIsIDE1MCwgMzcsIDIsIDI1MiwgMTI2LCAxMzIsIDI1MiwgMTUwLCAzNywgMiwgMjI1LCAKLSAgICAxMTMsIDQxLCAyNTAsIDEsIDEzMiwgMjUyLCAxNTAsIDM3LCAyLCAyMDMsIDQyLCAyNTAsIDEsIDEzMiwgMjUyLCAxNTAsIAotICAgIDI0OSwgMjUxLCAyLCA0MiwgMTMyLCAyNTIsIDE1MCwgMjQ5LCAyNTEsIDIsIDQxLCAxMzIsIDI1MiwgMTUwLCAyNDksIDI1MSwgCi0gICAgMiwgMjI2LCAxMDYsIDEzMiwgMjUyLCAxNTAsIDI0OSwgMjUxLCAyLCAyNTIsIDEyNiwgMTMyLCAyNTIsIDE1MCwgMjQ4LCAKLSAgICAxMzgsIDIyOCwgMTIwLCA4NiwgMjM4LCA5LCAyMjgsIDEyMCwgNjMsIDIzOCwgOSwgMjI4LCAxMjAsIDg2LCAyMjQsIDIzNCwgCi0gICAgMywgMjI4LCAxMjAsIDYzLCAyMjQsIDIzNCwgMywgMjI4LCAxMjAsIDg2LCAyMzMsIDEyOSwgNjMsIDIzMywgMTI5LCA2MywgCi0gICAgMjQ1LCA4NiwgODYsIDI0NSwgODYsIDE2OSwgODYsIDI0NSwgODYsIDg2LCAyMzgsIDksIDI1MSwgMTA2LCA4NiwgMjM2LCAKLSAgICAyMjgsIDI0OSwgMjUwLCA2MywgMjM2LCAyMjgsIDI0OSwgMjUwLCA4NiwgMjM2LCAyMjgsIDIzNywgMTEzLCA2MywgMjM2LCAKLSAgICAyMjgsIDIzNywgMTEzLCA4NiwgMywgMjQ5LCAyNTAsIDg2LCAzLCAyMzcsIDExMywgNjMsIDMsIDIzNywgMTEzLCA4NiwgCi0gICAgMTY5LCAyNDcsIDI1MCwgNjMsIDE2OSwgMjQ3LCAyNTAsIDg2LCA2MSwgMjQ3LCAyNTAsIDYzLCA2MSwgMjQ3LCAyNTAsIDQyLCAKLSAgICA2NywgMiwgMywgMjUxLCAxMDYsIDE1MiwgMTE3LCAyNTQsIDkyLCA0MiwgNjcsIDIsIDMzLCAyMzMsIDEwLCAxODIsIDExNywgCi0gICAgMjI4LCAxMTUsIDU4LCAxMTcsIDIyNSwgMjAzLCA2NywgMiwgNjEsIDgyLCAxMTcsIDIyNSwgMjAzLCA2NywgMiwgNDcsIDYxLCAKLSAgICA4MiwgMTE3LCAyMjUsIDIwMywgNjcsIDI0NiwgMjI0LCAxMjUsIDExNywgMjI1LCAyMDMsIDIyNiwgNjYsIDI1MCwgMTMxLCAKLSAgICA1OCwgMTE3LCA2NywgMiwgMjQ4LCAxMzgsIDIyOCwgNDgsIDExNywgNjcsIDIsIDIyNywgOTAsIDIsIDYxLCA4MiwgMTE3LCAKLSAgICA2NywgMiwgMjI3LCA5MCwgMiwgNDcsIDYxLCA4MiwgMTE3LCAyMjUsIDIwMywgNjcsIDIsIDIyNywgODksIDExNywgMjI1LCAKLSAgICAyMDMsIDY3LCAyLCAyMjcsIDkwLCAyLCA2MSwgODIsIDExNywgMjI1LCAyMDMsIDY3LCAyLCAyMjcsIDkwLCAyLCA0NywgNjEsIAotICAgIDgyLCAxMTcsIDY3LCAyMjYsIDE4OCwgMjI0LCA3MywgMjI0LCAxNDgsIDY3LCAyMzIsIDI1MSwgMjQ5LCAxOTksIDIzNywgCi0gICAgMjM3LCAyNDcsIDIwNCwgNSwgNjQsIDExNywgNTgsIDIzMSwgMTkzLCAyMjYsIDE1OSwgMjM0LCAzOCwgNjQsIDExNywgNTgsIAotICAgIDExNywgNjcsIDY0LCAyMzEsIDE5MywgMjU0LCAyMTAsIDEwNSwgOTYsIDgxLCA2NywgMjI2LCAxODgsIDI0NSwgMjMwLCA4MSwgCi0gICAgNjcsIDIyNiwgMTg4LCAyMjcsIDIxNywgMTE3LCAyMzIsIDc4LCA1OCwgODEsIDIzMiwgNzgsIDU4LCAyMzEsIDE5MywgMjI2LCAKLSAgICAxNTksIDIzNCwgMzgsIDY0LCA4MSwgNTgsIDgxLCA2NywgNjQsIDIzMSwgMTkzLCAyNTQsIDIxMCwgMTA1LCA5NiwgMjI2LCAKLSAgICAxNTksIDIzNCwgMzgsIDY0LCAxMTcsIDU4LCAxMTcsIDY3LCA2NCwgMjU0LCAyMTAsIDEwNSwgOTYsIDExNywgNjcsIDY0LCAKLSAgICAyMzEsIDE5MywgMjI2LCAxNTksIDIzNCwgMzcsIDgxLCA2NywgNjQsIDIzMSwgMTkzLCAyMjYsIDE1OSwgMjM0LCAzNywgNjMsIAotICAgIDIzNiwgMjI4LCAyMjgsIDU4LCA4NiwgMywgMjI4LCA1OCwgNjMsIDMsIDIyOCwgNTgsIDg2LCAyMzEsIDE1MSwgMjMzLCAKLSAgICAxMjksIDYzLCAyMzEsIDE1MSwgMjMzLCAxMjksIDExNSwgNiwgMSwgMjU0LCAyOCwgMTE1LCA2LCAxLCAyNTIsIDg2LCAxMTUsIAotICAgIDYsIDEsIDIyNSwgNDAsIDExNSwgNiwgMSwgMjQ2LCAxOSwgMTE1LCA2LCAxLCAyNDksIDE1NiwgMTE1LCA2LCAxLCAyMjMsIAotICAgIDIwOSwgMTE1LCA2LCAxLCAyMjMsIDcxLCAxMTUsIDYsIDEsIDI0OCwgNjcsIDExNSwgNiwgMSwgMjIzLCA5NCwgMTE1LCA2LCAKLSAgICAxLCAyMzksIDE4NiwgMTE1LCA2LCAxLCA1OSwgMjM5LCAxODYsIDExNSwgNiwgMSwgNzQsIDExNSwgNiwgMSwgMjQ5LCAxNzQsIAotICAgIDExNSwgNiwgMSwgMjM5LCA1MSwgMTE1LCA2LCAxLCAyMzcsIDE1MCwgMTE1LCA2LCAxLCAyMzYsIDgsIDExNSwgNiwgMSwgCi0gICAgMjM1LCAyMjcsIDExNSwgNiwgMSwgMjM0LCA1NCwgMTE1LCA2LCAxLCAyMzIsIDI0OSwgMTE1LCA2LCAxLCAyMzEsIDEzNCwgCi0gICAgMTE1LCA2LCAxLCAyMjgsIDE4NywgMTE1LCA2LCAxLCAyMjUsIDIyMywgMTE1LCA2LCAxLCAyMjUsIDE0OSwgMTE1LCA2LCAxLCAKLSAgICAyNDYsIDIyNiwgMTE1LCA2LCAxLCAyNDUsIDkyLCAxMTUsIDYsIDEsIDIzNCwgMTQsIDExNSwgNiwgMSwgMjMzLCAxNTEsIAotICAgIDExNSwgNiwgMSwgMjI5LCA0NiwgMTE1LCA2LCAxLCAyMjYsIDI5LCAxMTUsIDYsIDEsIDI1MSwgMTQyLCAxMTUsIDYsIDEsIAotICAgIDIyOSwgMTQ2LCAxMTUsIDYsIDEsIDIyMywgMjEzLCAxMTUsIDYsIDEsIDIyMywgMjE1LCAxMTUsIDYsIDEsIDIyMywgMjM3LCAKLSAgICAxMTUsIDYsIDEsIDIyOCwgMTM1LCAxNTQsIDExNSwgNiwgMSwgMjIzLCAxNTgsIDExNSwgNiwgMSwgMywgMjIzLCAxMzksIAotICAgIDExNSwgNiwgMSwgMywgMjIzLCAxNDAsIDIsIDIyNywgODksIDExNSwgNiwgMSwgMjIzLCAxODMsIDExNSwgNiwgMSwgMjM5LCAKLSAgICAyMTQsIDMsIDIyMywgMTM5LCAxMTUsIDYsIDEsIDI1MiwgMTczLCAyMjMsIDEzOSwgMTE1LCA2LCAxLCAyMzksIDIxNCwgCi0gICAgMjUyLCAxNzMsIDIyMywgMTM5LCAxMTUsIDYsIDEsIDI0NywgMzgsIDExNSwgNiwgMSwgMjM5LCAxODQsIDExNSwgNiwgMSwgCi0gICAgMjI5LCA0NSwgMTE1LCA2LCAxLCAyMjYsIDU4LCA1NywgMTE1LCA2LCAxLCAyMzgsIDAsIDIzNiwgOCwgMTE1LCAzLCAxLCAKLSAgICAyNTQsIDI4LCAxMTUsIDMsIDEsIDI1MiwgODYsIDExNSwgMywgMSwgMjI1LCA0MCwgMTE1LCAzLCAxLCAyNDYsIDE5LCAxMTUsIAotICAgIDMsIDEsIDI0OSwgMTU2LCAxMTUsIDMsIDEsIDIyMywgMjA5LCAxMTUsIDMsIDEsIDIyMywgNzEsIDExNSwgMywgMSwgMjQ4LCAKLSAgICA2NywgMTE1LCAzLCAxLCAyMjMsIDk0LCAxMTUsIDMsIDEsIDIzOSwgMTg2LCAxMTUsIDMsIDEsIDU5LCAyMzksIDE4NiwgCi0gICAgMTE1LCAzLCAxLCA3NCwgMTE1LCAzLCAxLCAyNDksIDE3NCwgMTE1LCAzLCAxLCAyMzksIDUxLCAxMTUsIDMsIDEsIDIzNywgCi0gICAgMTUwLCAxMTUsIDMsIDEsIDIzNiwgOCwgMTE1LCAzLCAxLCAyMzUsIDIyNywgMTE1LCAzLCAxLCAyMzQsIDU0LCAxMTUsIDMsIAotICAgIDEsIDIzMiwgMjQ5LCAxMTUsIDMsIDEsIDIzMSwgMTM0LCAxMTUsIDMsIDEsIDIyOCwgMTg3LCAxMTUsIDMsIDEsIDIyNSwgCi0gICAgMjIzLCAxMTUsIDMsIDEsIDIyNSwgMTQ5LCAxMTUsIDMsIDEsIDI0NiwgMjI2LCAxMTUsIDMsIDEsIDI0NSwgOTIsIDExNSwgCi0gICAgMywgMSwgMjM0LCAxNCwgMTE1LCAzLCAxLCAyMzMsIDE1MSwgMTE1LCAzLCAxLCAyMjksIDQ2LCAxMTUsIDMsIDEsIDIyNiwgCi0gICAgMjksIDExNSwgMywgMSwgMjUxLCAxNDIsIDExNSwgMywgMSwgMjI5LCAxNDYsIDExNSwgMywgMSwgMjIzLCAyMTMsIDExNSwgCi0gICAgMywgMSwgMjIzLCAyMTUsIDExNSwgMywgMSwgMjIzLCAyMzcsIDExNSwgMywgMSwgMjI4LCAxMzUsIDE1NCwgMTE1LCAzLCAxLCAKLSAgICAyMjMsIDE1OCwgMTE1LCAzLCAxLCAzLCAyMjMsIDEzOSwgMTE1LCAzLCAxLCAzLCAyMjMsIDE0MCwgMiwgMjI3LCA4OSwgCi0gICAgMTE1LCAzLCAxLCAyMjMsIDE4MywgMTE1LCAzLCAxLCAyMzksIDIxNCwgMywgMjIzLCAxMzksIDExNSwgMywgMSwgMjUyLCAKLSAgICAxNzMsIDIyMywgMTM5LCAxMTUsIDMsIDEsIDIzOSwgMjE0LCAyNTIsIDE3MywgMjIzLCAxMzksIDExNSwgMywgMSwgMjQ3LCAKLSAgICAzOCwgMTE1LCAzLCAxLCAyMzksIDE4NCwgMTE1LCAzLCAxLCAyMjksIDQ1LCAxMTUsIDMsIDEsIDIyNiwgNTgsIDU3LCAxMTUsIAotICAgIDMsIDEsIDIzOCwgMCwgMjM2LCA4LCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCA0NywgMTI1LCA3LCAzLCAxLCAyMzgsIDQ3LCAyLCAKLSAgICA0NywgMTI1LCA3LCA2LCAxLCAyMzgsIDQ3LCAyLCAyMzYsIDE1NCwgMjA1LCA3LCA2LCAxLCAyMzMsIDI0NSwgMiwgODIsIDcsIAotICAgIDYsIDEsIDIzMiwgMjcsIDIsIDIyNywgODksIDcsIDMsIDEsIDEwMiwgMiwgODIsIDcsIDMsIDEsIDIyNywgMTEwLCAyLCAKLSAgICAyNTAsIDEsIDgyLCA3LCA2LCAxLCAyNDUsIDE3MiwgMiwgMjUwLCAzNCwgNywgMywgMSwgMjQ1LCAxNzIsIDIsIDI1MCwgMzQsIAotICAgIDcsIDYsIDEsIDIzOSwgNzcsIDIsIDI1MCwgMzQsIDcsIDMsIDEsIDIzOSwgNzcsIDIsIDI1MCwgMzQsIDcsIDYsIDEsIDIyMywgCi0gICAgMTIwLCAyLCAyNTAsIDM0LCA3LCAzLCAxLCAyMjMsIDEyMCwgMiwgMjUwLCAzNCwgNywgNiwgMSwgMjU0LCAyMDUsIDcsIDYsIAotICAgIDEsIDIzNywgNjksIDIsIDg4LCA3LCA2LCAxLCAyMDksIDU3LCA3LCAzLCAxLCAyMjUsIDY1LCAyLCA0MSwgODgsIDcsIDYsIAotICAgIDEsIDIyNCwgMTc1LCAyLCA4OCwgNywgMywgMSwgMjI0LCAxNzUsIDIsIDg4LCA3LCAzLCAxLCAyMjUsIDY1LCAyLCAyNTAsIAotICAgIDIyNCwgNywgNiwgMSwgMTMyLCAyMTIsIDcsIDMsIDEsIDEzMiwgMjEyLCA3LCAzLCAxLCAyMjcsIDg3LCAyMzMsIDg3LCA3LCAKLSAgICAzLCAxLCAxNjEsIDIsIDIzNCwgMjQxLCA3LCAzLCAxLCAyMDksIDIzMiwgMjcsIDIsIDIyNywgODksIDcsIDMsIDEsIDEzMCwgCi0gICAgMiwgMTg0LCAyMzEsIDE0MCwgMjM5LCAyNDMsIDcsIDEsIDMsIDYsIDIwOSwgNzIsIDcsIDIyNywgMjUzLCAzLCAxLCAyMzksIAotICAgIDE4MiwgNTIsIDEsIDYsIDE5NiwgNzAsIDYsIDEsIDI1NCwgMjIyLCA3MCwgMywgMSwgMjU0LCAyMjIsIDcwLCA2LCAxLCAKLSAgICAyMjQsIDIyNiwgNzAsIDMsIDEsIDIyNCwgMjI2LCA3MCwgNiwgMSwgMjQ2LCAxNjksIDcwLCAzLCAxLCAyNDYsIDE2OSwgNzAsIAotICAgIDYsIDEsIDI1MCwgMTYyLCA3MCwgMywgMSwgMjUwLCAxNjIsIDcwLCA2LCAxLCAyNDgsIDIxLCA3MCwgMywgMSwgMjQ4LCAyMSwgCi0gICAgNzAsIDYsIDEsIDIyOCwgMTU2LCA3MCwgMywgMSwgMjI4LCAxNTYsIDcwLCA2LCAxLCAyMjMsIDEwMywgNzAsIDMsIDEsIAotICAgIDIyMywgMTAzLCA3MCwgNiwgMSwgMjQ1LCAxMzAsIDcwLCAzLCAxLCAyNDUsIDEzMCwgNzAsIDYsIDEsIDIyNiwgMjIyLCA3MCwgCi0gICAgMywgMSwgMjI2LCAyMjIsIDcwLCA2LCAxLCAyNDQsIDcyLCA3MCwgMywgMSwgMjQ0LCA3MiwgNzAsIDYsIDEsIDIzOSwgNDAsIAotICAgIDcwLCAzLCAxLCAyMzksIDQwLCA3MCwgNiwgMSwgMjM3LCAyNTQsIDcwLCAzLCAxLCAyMzcsIDI1NCwgNzAsIDYsIDEsIDIzNiwgCi0gICAgMTU3LCA3MCwgMywgMSwgMjM2LCAxNTcsIDcwLCA2LCAxLCAyMzUsIDg5LCA3MCwgMywgMSwgMjM1LCA4OSwgNzAsIDYsIDEsIAotICAgIDIzOCwgMTExLCA3MCwgMywgMSwgMjM4LCAxMTEsIDcwLCA2LCAxLCA3MywgNzAsIDMsIDEsIDczLCA3MCwgNiwgMSwgMjMzLCAKLSAgICA2OSwgNzAsIDMsIDEsIDIzMywgNjksIDcwLCA2LCAxLCAyMzEsIDEyMiwgNzAsIDMsIDEsIDIzMSwgMTIyLCA3MCwgNiwgMSwgCi0gICAgMjI4LCAyNDksIDcwLCAzLCAxLCAyMjgsIDI0OSwgNzAsIDYsIDEsIDIyNywgNjEsIDcwLCAzLCAxLCAyMjcsIDYxLCA3MCwgCi0gICAgNiwgMSwgMjI1LCAxNzAsIDcwLCAzLCAxLCAyMjUsIDE3MCwgNzAsIDYsIDEsIDI0NywgNzAsIDcwLCAzLCAxLCAyNDcsIDcwLCAKLSAgICA3MCwgNiwgMSwgMjM4LCAyMTIsIDcwLCAzLCAxLCAyMzgsIDIxMiwgNzAsIDYsIDEsIDIzMiwgMTgzLCA3MCwgMywgMSwgCi0gICAgMjMyLCAxODMsIDcwLCA2LCAxLCAyMzQsIDQ4LCA3MCwgMywgMSwgMjM0LCA0OCwgNzAsIDYsIDEsIDI0OSwgMjU1LCAyNTQsIAotICAgIDIyNywgNzAsIDMsIDEsIDI0OSwgMjU1LCAyNTQsIDIyNywgNzAsIDYsIDEsIDg0LCA3MCwgMjU0LCAyNDgsIDcwLCAzLCAxLCAKLSAgICA4NCwgNzAsIDI1NCwgMjQ4LCA3MCwgNiwgMSwgMjUwLCAyMzYsIDI0OCwgMjEsIDcwLCAzLCAxLCAyNTAsIDIzNiwgMjQ4LCAKLSAgICAyMSwgNzAsIDYsIDEsIDI0OSwgMjU1LCAyMzksIDQwLCA3MCwgMywgMSwgMjQ5LCAyNTUsIDIzOSwgNDAsIDcwLCA2LCAxLCAKLSAgICAyNDksIDI1NSwgMjM1LCA4OSwgNzAsIDMsIDEsIDI0OSwgMjU1LCAyMzUsIDg5LCA3MCwgNiwgMSwgMjUwLCAyMzYsIDIzNSwgCi0gICAgODksIDcwLCAzLCAxLCAyNTAsIDIzNiwgMjM1LCA4OSwgNzAsIDYsIDEsIDg0LCA3MCwgMjM0LCA0OCwgNzAsIDMsIDEsIDg0LCAKLSAgICA3MCwgMjM0LCA0OCwgNzAsIDYsIDEsIDIzMCwgMjU1LCA3MCwgMywgMSwgMjMwLCAyNTUsIDcwLCA2LCAxLCAyNTAsIDI0MSwgCi0gICAgMjI5LCAxMDYsIDcwLCAzLCAxLCAyNTAsIDI0MSwgMjI5LCAxMDYsIDcwLCA2LCAxLCA4NCwgNzAsIDIyOSwgMTA2LCA3MCwgCi0gICAgMywgMSwgODQsIDcwLCAyMjksIDEwNiwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ3LCAxODMsIDcwLCAzLCAxLCA4NCwgNzAsIAotICAgIDI0NywgMTgzLCA3MCwgNiwgMSwgMjU0LCAyMzYsIDIzOCwgMjE1LCA3MCwgMywgMSwgMjU0LCAyMzYsIDIzOCwgMjE1LCA3MCwgCi0gICAgNiwgMSwgMjQ5LCAyNTUsIDI0NCwgMjEzLCA3MCwgMywgMSwgMjQ5LCAyNTUsIDI0NCwgMjEzLCA3MCwgNiwgMSwgODQsIDcwLCAKLSAgICAyNDQsIDIxMywgNzAsIDMsIDEsIDg0LCA3MCwgMjQ0LCAyMTMsIDcwLCA2LCAxLCA4NCwgNzAsIDE1NCwgNzAsIDMsIDEsIAotICAgIDg0LCA3MCwgMTU0LCA3MCwgNiwgMSwgMjM4LCA0NiwgMTU0LCA3MCwgMywgMSwgMjM4LCA0NiwgMTU0LCA3MCwgNiwgMSwgCi0gICAgODQsIDcwLCAyNDUsIDEwNiwgNzAsIDMsIDEsIDg0LCA3MCwgMjQ1LCAxMDYsIDcwLCA2LCAxLCA4NCwgNzAsIDI0NSwgMTMyLCAKLSAgICA3MCwgMywgMSwgODQsIDcwLCAyNDUsIDEzMiwgNzAsIDYsIDEsIDg0LCA3MCwgMjQ2LCAxNjUsIDcwLCAzLCAxLCA4NCwgNzAsIAotICAgIDI0NiwgMTY1LCA3MCwgNiwgMSwgODQsIDcwLCAyNDksIDE3NywgNzAsIDMsIDEsIDg0LCA3MCwgMjQ5LCAxNzcsIDcwLCA2LCAKLSAgICAxLCA4NCwgNzAsIDIyOSwgODAsIDcwLCAzLCAxLCA4NCwgNzAsIDIyOSwgODAsIDcwLCA2LCAxLCA4NCwgMjM0LCAyMDQsIAotICAgIDIyOSwgODAsIDcwLCAzLCAxLCA4NCwgMjM0LCAyMDQsIDIyOSwgODAsIDcwLCA2LCAxLCA4NCwgMjM0LCAyMDQsIDIzNSwgCi0gICAgMTE0LCA3MCwgMywgMSwgODQsIDIzNCwgMjA0LCAyMzUsIDExNCwgNzAsIDYsIDEsIDg0LCAyMzQsIDIwNCwgMjM0LCAxNjMsIAotICAgIDcwLCAzLCAxLCA4NCwgMjM0LCAyMDQsIDIzNCwgMTYzLCA3MCwgNiwgMSwgODQsIDIzNCwgMjA0LCAyMjQsIDE0OSwgNzAsIAotICAgIDMsIDEsIDg0LCAyMzQsIDIwNCwgMjI0LCAxNDksIDcwLCAxNCwgMjM5LCA1NiwgNzAsIDE0LCAyMzYsIDE1OCwgMjMxLCAKLSAgICAxMjIsIDcwLCAxNCwgMjMzLCA3MCwgMjMxLCAxMjIsIDcwLCAxNCwgMjI4LCA1NCwgNzAsIDE0LCAyMjcsIDYyLCAyMzEsIAotICAgIDEyMiwgNzAsIDE0LCAyMzgsIDIxMywgMjMxLCAxMjIsIDcwLCAxNCwgMjI5LCA4MSwgMjI4LCAyNDksIDcwLCA4NCwgMjM0LCAKLSAgICAyMDQsIDI0NiwgMjE4LCAyMjgsIDM4LCA3MCwgODQsIDIzNCwgMjA0LCAyNDksIDIwMSwgMjMyLCA2OSwgNzYsIDcwLCA4NCwgCi0gICAgMjM0LCAyMDQsIDI0MCwgNiwgMjMyLCA2OSwgNzYsIDcwLCA4NCwgMjM0LCAyMDQsIDIyNSwgMzIsIDI0OSwgMTg0LCA3MCwgCi0gICAgMjQ2LCAyMzUsIDE2OCwgMjQ1LCAxNTEsIDcwLCAyNDYsIDIxOCwgMjI4LCAzOCwgNzAsIDIzNiwgODAsIDI0OSwgMTg0LCAKLSAgICA4NywgMywgMSwgMjU0LCAxOTAsIDg3LCAzLCAxLCAyNTMsIDQ0LCA4NywgMywgMSwgMjQ2LCAxNjgsIDg3LCAzLCAxLCAyNDksIAotICAgIDE0OCwgODcsIDMsIDEsIDI0NywgMjM5LCA4NywgMywgMSwgMjI0LCAyMTksIDg3LCAzLCAxLCAyMjMsIDkyLCA4NywgMywgMSwgCi0gICAgMjI3LCA3MywgODcsIDMsIDEsIDI0MCwgMTYsIDg3LCAzLCAxLCAyMzksIDQ2LCA4NywgMywgMSwgMjM4LCA2LCA4NywgMywgCi0gICAgMSwgMjM3LCAzNSwgODcsIDMsIDEsIDIzNSwgMjMwLCA4NywgMywgMSwgMjM0LCA2MSwgODcsIDMsIDEsIDIzMywgMTk0LCAKLSAgICA4NywgMywgMSwgMjIzLCA4MSwgODcsIDMsIDEsIDIzMiwgMTUsIDg3LCAzLCAxLCAyMzAsIDI1MywgODcsIDMsIDEsIDIyNywgCi0gICAgNjcsIDg3LCAzLCAxLCAyMjUsIDEzOCwgODcsIDMsIDEsIDIzMywgOTIsIDg3LCAzLCAxLCAyMzgsIDIxOCwgODcsIDMsIDEsIAotICAgIDI0NiwgNjAsIDg3LCAzLCAxLCAyMzIsIDEyMywgODcsIDMsIDEsIDIyOSwgNzgsIDg3LCAzLCAxLCAyNTEsIDE2MSwgODcsIAotICAgIDMsIDEsIDI1MiwgMjYsIDg3LCAzLCAxLCAyMzksIDE0OSwgODcsIDMsIDEsIDI1MSwgMTA5LCA4NywgMywgMSwgMjUxLCAKLSAgICAxOTIsIDg3LCAzLCAxLCAyMjQsIDcwLCA4NywgMywgMSwgMjM5LCAxNTksIDg3LCAzLCAxLCAyNDUsIDE2NSwgODcsIDMsIDEsIAotICAgIDI0NSwgMTIxLCA4NywgMywgMSwgMjQ1LCA3MSwgODcsIDMsIDEsIDIyNCwgMTQxLCA4NywgMywgMSwgMjQ1LCAxNDEsIDg3LCAKLSAgICAzLCAxLCAyNDQsIDIyNSwgMjIxLCAxLCAxOTEsIDIyMSwgMSwgMjI0LCAxNywgMjIxLCAxLCAyMjQsIDE2LCAyMjEsIDEsIAotICAgIDIyNCwgOCwgMjIxLCAxLCAyMjQsIDYsIDIyMSwgMSwgMjUyLCAyMDQsIDI1NSwgNDMsIDIyNCwgMiwgMjIxLCAxLCAyMjQsIAotICAgIDIsIDIyMSwgMSwgMjI0LCAxNCwgMjIxLCAxLCAyMjQsIDExLCAyMjEsIDEsIDIyNCwgMTMsIDIyMSwgMSwgMjI0LCAxMiwgCi0gICAgMjIxLCAxLCAyMjMsIDIwNiwgMjIxLCAxLCAyMjQsIDksIDIyMSwgMSwgMjI0LCAxLCAyMjEsIDEsIDIyNSwgMjQ5LCAyMjQsIAotICAgIDEsIDIyMSwgMSwgMjIzLCAyNTQsIDIyMSwgMSwgMjI0LCA0LCAyMjEsIDEsIDI1MiwgMjA0LCAyNTUsIDQzLCAyMjQsIDQsIAotICAgIDIyMSwgMSwgMjI1LCAyNDksIDIyNCwgNCwgMjIxLCAxLCAyMjQsIDMsIDIyMSwgMSwgMjI0LCAyMSwgMjIxLCAxLCAyMjMsIAotICAgIDI1NSwgMjIxLCAxLCAyMjUsIDI0OSwgMjIzLCAyNTUsIDIyMSwgMSwgMjIzLCAyNDYsIDIyMSwgMSwgMjI1LCAyNDksIDIyMywgCi0gICAgMjQ2LCAyMjEsIDEsIDIyMywgMjAyLCAyMjEsIDEsIDIyMywgMjMwLCAyMjEsIDEsIDI1NSwgMSwgMjIzLCAyMzAsIDIyMSwgCi0gICAgMSwgMjI1LCAyNDksIDIyMywgMjMwLCAyMjEsIDEsIDIyMywgMjUzLCAyMjEsIDEsIDIyMywgMjUyLCAyMjEsIDEsIDIyMywgCi0gICAgMjUwLCAyMjEsIDEsIDIyNSwgMjQ5LCAyMjQsIDUsIDIyMSwgMSwgMjI1LCAyNDksIDIyMywgMjQ4LCAyMjEsIDEsIDIyMywgCi0gICAgMjQ3LCAyMjEsIDEsIDIyMywgMTU4LCAyMjEsIDEsIDIyMywgMjQ0LCAyMjEsIDEsIDIyMywgMjQzLCAyMjEsIDEsIDIyNCwgCi0gICAgNywgMjIxLCAxLCAyMjUsIDI0OSwgMjI0LCA3LCAyMjEsIDEsIDI1NCwgMzAsIDIyNCwgNywgMjIxLCAxLCAyMjMsIDI0MiwgCi0gICAgMjIxLCAxLCAyMjMsIDI0MCwgMjIxLCAxLCAyMjMsIDI0MSwgMjIxLCAxLCAyMjMsIDIzOSwgMjIxLCAxLCAyMjMsIDIzOCwgCi0gICAgMjIxLCAxLCAyMjQsIDE1LCAyMjEsIDEsIDIyMywgMjM2LCAyMjEsIDEsIDIyMywgMjM1LCAyMjEsIDEsIDIyMywgMjM0LCAKLSAgICAyMjEsIDEsIDIyMywgMjMzLCAyMjEsIDEsIDIyMywgMjMxLCAyMjEsIDEsIDIyNywgNTQsIDIyMywgMjMxLCAyMjEsIDEsIAotICAgIDIyMywgMjI5LCAyMjEsIDUyLCAxLCAyMzgsIDM4LCA3NiwgMjUsIDQsIDIzNywgMTQyLCAyNSwgNCwgMjM2LCAxMDIsIDI1LCAKLSAgICA0LCAyMzEsIDEyMCwgMjUsIDQsIDIyOCwgMTY4LCAyNSwgNCwgMjI5LCA3MCwgMjUsIDQsIDI1MiwgMTM3LCAyNSwgNCwgCi0gICAgMjI2LCAxMjQsIDI1LCA0LCAyNTEsIDY3LCAyNSwgNCwgMjM1LCA0LCAyNSwgNCwgMjM0LCAxNTEsIDI1LCA0LCAyNDYsIDE2LCAKLSAgICAyMzQsIDEwNSwgMjUsIDQsIDIyMywgMjYsIDI1LCA0LCAyNDksIDE1OSwgMjUsIDQsIDI1MCwgOTEsIDI1LCA0LCAyMzksIAotICAgIDExNiwgMjUsIDQsIDIyNiwgMjAwLCAyNSwgNCwgMjUxLCAxNDksIDI1LCA0LCAyMzMsIDc4LCAyNSwgNCwgMjMzLCAzLCAyNSwgCi0gICAgNCwgMjQ2LCA3MSwgMjUsIDQsIDI0NiwgNjcsIDI1LCA0LCAyNDYsIDY4LCAyNSwgNCwgMjQ2LCA2OSwgMjUsIDQsIDIyOCwgCi0gICAgMTEwLCAyNSwgNCwgMjI4LCA4MCwgMjUsIDQsIDIyOCwgOTEsIDI1LCA0LCAyMjgsIDEwOSwgMjUsIDQsIDIyOCwgOTQsIDI1LCAKLSAgICA0LCAyMjgsIDk1LCAyNSwgNCwgMjI4LCA4NCwgMjUsIDQsIDI1MSwgMjQ2LCAyNSwgNCwgMjUxLCAyMzMsIDI1LCA0LCAyNTEsIAotICAgIDIzNSwgMjUsIDQsIDI1MSwgMjQ1LCAyNSwgNCwgMjUxLCAyNDMsIDI1LCA0LCAyNTEsIDI0NCwgMjUsIDQsIDI1MSwgMjM0LCAKLSAgICAyNSwgNCwgMjIyLCAyNTMsIDI1LCA0LCAyMjIsIDIzMywgMjUsIDQsIDIyMiwgMjQ0LCAyNSwgNCwgMjIyLCAyNTIsIDI1LCAKLSAgICA0LCAyMjIsIDI0NywgMjUsIDQsIDIyMiwgMjQ4LCAyNSwgNCwgMjIyLCAyMzYsIDI1LCA0LCAyNTEsIDI0MiwgMjUsIDQsIAotICAgIDI1MSwgMjM2LCAyNSwgNCwgMjUxLCAyMzgsIDI1LCA0LCAyNTEsIDI0MSwgMjUsIDQsIDI1MSwgMjM5LCAyNSwgNCwgMjUxLCAKLSAgICAyNDAsIDI1LCA0LCAyNTEsIDIzNywgMjUsIDQsIDIzMiwgMzksIDI1LCA0LCAyMzIsIDI5LCAyNSwgNCwgMjMyLCAzNSwgMjUsIAotICAgIDQsIDIzMiwgMzgsIDI1LCA0LCAyMzIsIDM2LCAyNSwgNCwgMjMyLCAzNywgMjUsIDQsIDIzMiwgMzQsIDI1LCA0LCAyMzgsIAotICAgIDU3LCAyNSwgNCwgMjM4LCA0OSwgMjUsIDQsIDIzOCwgNTIsIDI1LCA0LCAyMzgsIDU2LCAyNSwgNCwgMjM4LCA1MywgMjUsIAotICAgIDQsIDIzOCwgNTQsIDI1LCA0LCAyMzgsIDUwLCAyNSwgNCwgMjI0LCAzOCwgMjUsIDQsIDIyNCwgMjgsIDI1LCA0LCAyMjQsIAotICAgIDM0LCAyNSwgNCwgMjI0LCAzNywgMjUsIDQsIDIyNCwgMzUsIDI1LCA0LCAyMjQsIDM2LCAyNSwgNCwgMjI0LCAzMywgMjUsIAotICAgIDQsIDI0NSwgMTgyLCAyNSwgNCwgMjQ1LCAxNzMsIDI1LCA0LCAyNDUsIDE3NiwgMjUsIDQsIDI0NSwgMTgxLCAyNSwgNCwgCi0gICAgMjQ1LCAxNzgsIDI1LCA0LCAyNDUsIDE3OSwgMjUsIDQsIDI0NSwgMTc1LCAzNiwgMjgsIDEsIDI1MiwgMjM4LCAzNiwgMjgsIAotICAgIDEsIDIyNSwgNDIsIDM2LCAyOCwgMSwgMjQ2LCA1OCwgMzYsIDI4LCAxLCAyNTAsIDc3LCAzNiwgMjgsIDEsIDIyMywgNzcsIAotICAgIDM2LCAyOCwgMSwgMjIzLCA5NywgMzYsIDI4LCAxLCAxNzcsIDM2LCAyOCwgMSwgMjQ4LCAyLCAzNiwgMjgsIDEsIDI0NywgCi0gICAgMjQ3LCAzNiwgMjgsIDEsIDI0NywgMjM5LCAzNiwgMjgsIDEsIDczLCAzNiwgMjgsIDEsIDIzMywgMTUxLCAzNiwgMjgsIDEsIAotICAgIDI0NywgMTk4LCAzNiwgMjgsIDEsIDI0NywgMTg4LCAzNiwgMjgsIDEsIDIyNywgNDQsIDM2LCAyOCwgMSwgMTU0LCAzNiwgCi0gICAgMjgsIDEsIDIyNiwgNDAsIDM2LCAyOCwgMSwgMjUxLCAxODIsIDM2LCAyOCwgMSwgMjI5LCAxNDYsIDM2LCAyOCwgMSwgMjI5LCAKLSAgICAxMTYsIDM2LCAyOCwgMSwgMjQ3LCAzOCwgMzYsIDI4LCAxLCAyNDcsIDE4NywgMzYsIDI4LCAxLCA1NywgMzYsIDI4LCAxLCAKLSAgICAyNDAsIDcyLCAzNiwgMjgsIDEsIDI0OSwgMTc1LCAzNiwgMjgsIDEsIDIzNiwgOTAsIDIyNSwgMTUzLCAzNiwgMjgsIDEsIAotICAgIDIyMywgMjM5LCAzNiwgMjgsIDEsIDIyMywgMTU4LCAzNiwgMjgsIDEsIDIzOSwgMjEzLCA1NywgMzYsIDI4LCAxLCAyMzcsIAotICAgIDE1NSwgMjIzLCAxMzksIDM2LCAyOCwgMSwgMjUyLCAxNzMsIDIyMywgMTM5LCAzNiwgMjgsIDEsIDIzOSwgMjEzLCAyNTIsIAotICAgIDE3MywgMjIzLCAxMzksIDQxLCAyNTQsIDE4MiwgMjI3LCAyNDgsIDIzNywgMTMsIDQxLCAyNTQsIDE4MiwgMjQ4LCAxMzgsIAotICAgIDIyNywgMjQ4LCAyMzcsIDEzLCA0MiwgMjI3LCAyNDgsIDEwNCwgNDEsIDIyNywgMjQ4LCAxMDQsIDQyLCAyNDgsIDEzOCwgCi0gICAgMjI3LCAyNDgsIDEwNCwgNDEsIDI0OCwgMTM4LCAyMjcsIDI0OCwgMTA0LCAyMzIsIDgsIDIzOSwgMjMxLCAyMzcsIDEzLCAKLSAgICAyMzIsIDgsIDI0OCwgMTM4LCAyMzksIDIzMSwgMjM3LCAxMywgMjQ4LCAxMzgsIDIyNiwgOTEsIDIzNywgMTMsIDQyLCAyMjYsIAotICAgIDkxLCAxMDQsIDQxLCAyMjYsIDkxLCAxMDQsIDIzMiwgOCwgMjI4LCAxMjAsIDQyLCAyMzIsIDgsIDIzNCwgNjMsIDEwNCwgCi0gICAgNDEsIDIzMiwgOCwgMjM0LCA2MywgMTA0LCAyNDgsIDM2LCAyNTEsIDgsIDIzMywgMTkwLCAyNDYsIDI1MSwgMjMzLCAxOTAsIAotICAgIDIwMCwgMjQ2LCAyNTEsIDIzMywgMTkwLCAyNDQsIDkyLCAyNDgsIDEzOCwgMjM0LCAxMDAsIDI0OCwgMTI1LCAyNTQsIDE4NywgCi0gICAgMjI1LCAxMDYsIDI1NCwgMTg3LCAyNDgsIDEzOCwgMjMxLCAxNTEsIDI1NCwgMTgxLCA0NywgMjM0LCA5NywgMjQ0LCA5NSwgCi0gICAgMjM5LCAyMjMsIDIzOSwgMjMwLCAyMzMsIDIyMywgMjUyLCAxMTIsIDI0NCwgOTYsIDIsIDIxOSwgMjI2LCAxNTksIDIsIAotICAgIDIzMSwgMTQwLCA0NiwgNDIsIDE4NCwgMjMzLCAxODIsIDEwNCwgNDEsIDE4NCwgMjMzLCAxODIsIDEwNCwgMjI2LCAxNTksIAotICAgIDIsIDU2LCA0NiwgMjI2LCAxNTksIDIsIDU2LCA1MSwgNDIsIDYxLCAyNTMsIDM2LCAyLCAyMzIsIDY1LCA0MSwgNjEsIDI1MywgCi0gICAgMzYsIDIsIDIzMiwgNjUsIDIyNiwgMTA2LCA0MiwgMTMyLCAxMDQsIDIyNiwgMTA2LCA0MSwgMTMyLCAxMDQsIDI1MiwgMTI2LCAKLSAgICA0MiwgMTMyLCAxMDQsIDI1MiwgMTI2LCA0MSwgMTMyLCAxMDQsIDQyLCAyMjksIDExLCA5NywgMTA0LCA0MSwgMjI5LCAxMSwgCi0gICAgOTcsIDEwNCwgNDIsIDQ3LCAyMzMsIDE4MCwgNDEsIDQ3LCAyMzMsIDE4MCwgMTM1LCAxOTcsIDEwNywgMTY4LCA1NiwgMjMyLCAKLSAgICAxNzAsIDE2OCwgNTYsIDEwNywgMTM1LCAxOTcsIDIzMiwgMTcwLCAyMjgsIDExOSwgMjQ2LCAyNDMsIDU2LCAyMzIsIDE3MCwgCi0gICAgMjQ3LCAzNywgNTYsIDc2LCAyMDAsIDIzMiwgNjksIDc2LCA2MSwgMjA1LCAyMzEsIDE0MCwgMjMyLCAyNTQsIDksIDI5LCAKLSAgICAyMzEsIDIxMSwgOSwgMjksIDI1MSwgODgsIDksIDI5LCAyMzAsIDIwOSwgMTE4LCA5LCAyOSwgMjMwLCAyMDksIDExMywgOSwgCi0gICAgMjksIDIzMCwgMjA5LCAxNjYsIDksIDI5LCAyMzMsIDExMiwgOSwgMjksIDI1MiwgMTE4LCA5LCAyOSwgMjI3LCA5OSwgOSwgCi0gICAgMjksIDIzOCwgMTU0LCAxMTgsIDksIDI5LCAyMzgsIDE1NCwgMTEzLCA5LCAyOSwgMjQ5LCAxODIsIDksIDI5LCAyMzAsIAotICAgIDIxMSwgOSwgMjksIDMsIDExOCwgOSwgMjksIDMsIDExMywgOSwgMjksIDIzOCwgMTUsIDExOCwgOSwgMjksIDIzOCwgMTUsIAotICAgIDExMywgOSwgMjksIDIzOCwgMTUsIDE2NiwgOSwgMjksIDIzOCwgMTUsIDE1OCwgOSwgMjksIDIyOCwgMTc2LCA5LCAyOSwgCi0gICAgMjI2LCAxOTIsIDksIDI5LCAyMjgsIDE3NCwgMTE4LCA5LCAyOSwgMjI4LCAxNzQsIDExMywgOSwgMjksIDI0NSwgMTE1LCAKLSAgICAxMTgsIDksIDI5LCAyNDUsIDExNSwgMTEzLCA5LCAyOSwgMjQ1LCAxNDYsIDksIDI5LCAyMzIsIDEsIDksIDI5LCAyNTEsIAotICAgIDE0NywgOSwgMjksIDIyNywgMjI3LCA5LCAyOSwgMjM2LCA4NCwgOSwgMjksIDI1MCwgNzUsIDksIDI5LCAyMzYsIDc3LCA5LCAKLSAgICAyOSwgMjUxLCA5OCwgOSwgMjksIDIyNCwgMTUyLCAxMTgsIDksIDI5LCAyMjQsIDE1MiwgMTEzLCA5LCAyOSwgMjQ3LCA0NiwgCi0gICAgOSwgMjksIDIzMywgMTYwLCAxMTgsIDksIDI5LCAyMzMsIDE2MCwgMTEzLCA5LCAyOSwgMjI4LCAyNDUsIDEzMiwgMjI2LCAKLSAgICA4NywgMjI2LCA0OSwgOSwgMjksIDI1MCwgMjUzLCA5LCAyOSwgMjQ5LCAxNTMsIDksIDI5LCAyMzksIDE3NywgOSwgMjksIAotICAgIDI1MiwgMTMzLCAxMDYsIDI1MSwgNzcsIDksIDI5LCAyNDcsIDEzNiwgOSwgMjksIDIyOCwgMTMyLCAxMTgsIDksIDI5LCAKLSAgICAyMjgsIDEzMiwgMTEzLCA5LCAyOSwgMjUzLCA0NiwgOSwgMjksIDIyOCwgMjUwLCA5LCAyOSwgMjUyLCA0MSwgMjI4LCAyNTAsIAotICAgIDksIDI5LCAyMzUsIDE0OCwgMTE4LCA5LCAyOSwgMjM1LCAxNDgsIDExMywgOSwgMjksIDIzNSwgMTQ4LCAxNjYsIDksIDI5LCAKLSAgICAyMzUsIDE0OCwgMTU4LCA5LCAyOSwgMjM2LCAyMDQsIDksIDI5LCAyMjksIDEwOCwgOSwgMjksIDIzMiwgNiwgOSwgMjksIAotICAgIDI0NywgMTU0LCA5LCAyOSwgMjM0LCA3MywgOSwgMjksIDI1MiwgOTcsIDExOCwgOSwgMjksIDI1MiwgOTcsIDExMywgOSwgCi0gICAgMjksIDIzNiwgMjMxLCA5LCAyOSwgMjM2LCA3OSwgOSwgMjksIDI0NSwgMjQwLCAxMTgsIDksIDI5LCAyNDUsIDI0MCwgMTEzLCAKLSAgICA5LCAyOSwgMjQ1LCAyNDAsIDE2NiwgOSwgMjksIDIyNiwgMTY3LCA5LCAyOSwgMjUxLCA3NiwgOSwgMjksIDIyNCwgMTMxLCAKLSAgICAxMTgsIDksIDI5LCAyMjQsIDEzMSwgMTEzLCA5LCAyOSwgMjUyLCA0MSwgMjMwLCAyMDMsIDksIDI5LCAyMjgsIDI0NSwgCi0gICAgMjQ0LCAxNjAsIDksIDI5LCAyNDQsIDE2MCwgOSwgMjksIDI1MiwgNDEsIDIyOCwgMTM4LCA5LCAyOSwgMjUyLCA0MSwgMjI5LCAKLSAgICAxMDMsIDksIDI5LCAyNDcsIDIsIDksIDI5LCAyNTIsIDQxLCAyNTIsIDIsIDksIDI5LCAyMjgsIDI0NSwgMjI0LCAxNjYsIDksIAotICAgIDI5LCAyMjQsIDE2NywgMTE4LCA5LCAyOSwgMjI0LCAxNjcsIDExMywgOSwgMjksIDI1MSwgOTksIDksIDI5LCAyNTIsIDQxLCAKLSAgICAyNDYsIDYsIDksIDI5LCAxODIsIDExOCwgOSwgMjksIDE4MiwgMTEzLCA5LCAyOSwgMjUyLCA0MSwgMjM3LCAxMzQsIDksIAotICAgIDI5LCAyNTIsIDQxLCAyNDYsIDE1MywgOSwgMjksIDIzNiwgNzYsIDExOCwgOSwgMjksIDIzNiwgNzYsIDExMywgOSwgMjksIAotICAgIDIzMiwgOSwgOSwgMjksIDI1MiwgMTQwLCA5LCAyOSwgMjUyLCA0MSwgMjI3LCA3MiwgMjM3LCAyNDAsIDksIDI5LCAyNTIsIAotICAgIDQxLCAyMzcsIDI0MSwgOSwgMjksIDI1MiwgNDEsIDIyNCwgMTExLCA5LCAyOSwgMjUyLCA0MSwgMjQ3LCAxMCwgOSwgMjksIAotICAgIDI0OCwgNDMsIDExOCwgOSwgMjksIDI0OCwgNDMsIDExMywgOSwgMjksIDI0OCwgNDMsIDE2NiwgOSwgMjksIDI1MiwgNDEsIAotICAgIDI0OCwgNDIsIDksIDI5LCAyNDUsIDExOCwgOSwgMjksIDI1MiwgNDEsIDI0NCwgMTU5LCA5LCAyOSwgMjUyLCAxMzIsIDksIAotICAgIDI5LCAyNDYsIDUzLCA5LCAyOSwgMjUyLCA0MSwgMjQ3LCA0MywgOSwgMjksIDI1MiwgNDEsIDI1MiwgMTY0LCA5LCAyOSwgCi0gICAgMjUyLCA0MSwgMjMxLCA3LCA5LCAyOSwgMjI4LCAyNDUsIDIyNCwgMTI2LCA5LCAyOSwgMjI4LCAyNDUsIDIyMywgMjIzLCA5LCAKLSAgICAyOSwgMjUyLCA0MSwgMjQ2LCAyMjUsIDksIDI5LCAyMzksIDE4MSwgMjQ3LCAxNTcsIDksIDI5LCAyNTIsIDQxLCAyNDcsIAotICAgIDE1NywgOSwgMjksIDIzOSwgMTgxLCAyMjYsIDEwNywgOSwgMjksIDI1MiwgNDEsIDIyNiwgMTA3LCA5LCAyOSwgMjM5LCAKLSAgICAxODEsIDI0OCwgMTE4LCA5LCAyOSwgMjUyLCA0MSwgMjQ4LCAxMTgsIDksIDI5LCAyMjUsIDIzMCwgOSwgMjksIDIzOSwgCi0gICAgMTgxLCAyMjUsIDIzMCwgOSwgMjksIDI1MiwgNDEsIDIyNSwgMjMwLCA0OSwgMjksIDExOCwgNDksIDI5LCAyMzcsIDE3MCwgCi0gICAgNDksIDI5LCAyNDksIDE0MCwgNDksIDI5LCAyMjgsIDE5NCwgNDksIDI5LCAyMzAsIDIwOCwgNDksIDI5LCA4OCwgNDksIDI5LCAKLSAgICAxMTMsIDQ5LCAyOSwgMjM3LCAxOTAsIDQ5LCAyOSwgMjM3LCAzNSwgNDksIDI5LCAyMzcsIDIyNiwgNDksIDI5LCAyNDcsIAotICAgIDIyMiwgNDksIDI5LCAxODcsIDQ5LCAyOSwgMTAzLCAyNTIsIDExOCwgNDksIDI5LCAyNTAsIDI1NCwgNDksIDI5LCAyNDQsIAotICAgIDY5LCA0OSwgMjksIDIyNywgOTksIDQ5LCAyOSwgMjM0LCA0NCwgMjUyLCAxMTgsIDQ5LCAyOSwgMjM4LCAxNTMsIDQ5LCAyOSwgCi0gICAgMjMyLCAyMzMsIDQ5LCAyOSwgMjI0LCA4NywgNDksIDI5LCAyMjgsIDEyOCwgNDksIDI5LCA0MSwgMjM0LCA0NCwgMjUyLCAKLSAgICAxMTgsIDQ5LCAyOSwgMjQ1LCA3MiwgMjQ3LCAyMzUsIDQ5LCAyOSwgMjI3LCAyMywgNDksIDI5LCAyNDksIDE4MiwgNDksIAotICAgIDI5LCAyMzAsIDIxMSwgNDksIDI5LCAyNTEsIDg4LCA0OSwgMjksIDIzMiwgMjAyLCA0OSwgMjksIDI1NSwgNywgNDksIDI5LCAKLSAgICAyMzYsIDcyLCA0OSwgMjksIDI0NywgMjM1LCA0OSwgMjksIDI0OCwgNDgsIDQ5LCAyOSwgMjMwLCAyMjQsIDQ5LCAyOSwgCi0gICAgMjQ2LCAxMSwgNDksIDI5LCAyNDYsIDEyLCAyMjgsIDE4NiwgNDksIDI5LCAyNDcsIDE1NiwgNDksIDI5LCAyNTIsIDE3MiwgCi0gICAgNDksIDI5LCAyMjQsIDEwMSwgNDksIDI5LCAyNTEsIDE2MywgNDksIDI5LCAyMzEsIDExMywgNDksIDI5LCAyNDAsIDE1LCAKLSAgICA0OSwgMjksIDIyOCwgMTg0LCA0OSwgMjksIDIzOCwgMTQsIDQ5LCAyOSwgMjUxLCA2LCA0OSwgMjksIDIyOCwgMTIzLCA0OSwgCi0gICAgMjksIDIzNiwgNzQsIDQ5LCAyOSwgMjMxLCAxMzEsIDQ5LCAyOSwgMjI0LCA4OSwgNDksIDI5LCAyMzQsIDU5LCA0OSwgMjksIAotICAgIDIyNSwgMjM1LCA0OSwgMjksIDI0OCwgMTA5LCA0OSwgMjksIDIyOSwgNjMsIDIyNiwgMTkyLCA0OSwgMjksIDI0OCwgMTM4LCAKLSAgICAyNTEsIDg4LCA0OSwgMjksIDE4MiwgMjI4LCAyNCwgNDksIDI5LCAxMzUsIDI0NSwgMTQ1LCA0OSwgMjksIDIyOSwgNjUsIAotICAgIDQ5LCAyOSwgMjUyLCAxMjEsIDQ5LCAyOSwgMjI4LCAxNzMsIDQ5LCAyOSwgMjUyLCAxMDEsIDQ5LCAyOSwgMjI4LCA0NywgCi0gICAgNDksIDI5LCAyNDUsIDExNCwgNDksIDI5LCAyNDUsIDE1MiwgNDksIDI5LCAyNDksIDE0MywgNDksIDI5LCAyNDUsIDE0NiwgCi0gICAgNDksIDI5LCAyNTIsIDExMiwgNDksIDI5LCAyMzIsIDEsIDQ5LCAyOSwgMjMwLCAyMTcsIDQ5LCAyOSwgMjQ5LCAyMDMsIDQ5LCAKLSAgICAyOSwgMjU0LCAzNSwgNDksIDI5LCAyMjgsIDEyMCwgNDksIDI5LCAyMzQsIDI0MiwgNDksIDI5LCAyMjcsIDIyNywgNDksIAotICAgIDI5LCAyMzAsIDIzNCwgNDksIDI5LCAyMzYsIDg0LCA0OSwgMjksIDIyNiwgODYsIDQ5LCAyOSwgMjM4LCAzNCwgNDksIDI5LCAKLSAgICAyMjgsIDM4LCA0OSwgMjksIDI1MCwgNzUsIDQ5LCAyOSwgMjI0LCAxNDAsIDQ5LCAyOSwgMjQ5LCAxNjIsIDIzNCwgMjQyLCAKLSAgICA0OSwgMjksIDI1MSwgNTEsIDQ5LCAyOSwgMjQ2LCAyMTIsIDQ5LCAyOSwgMjUxLCA5NiwgNDksIDI5LCAyMjgsIDUwLCA0OSwgCi0gICAgMjksIDIyNCwgMTUxLCA0OSwgMjksIDI0NywgNDYsIDQ5LCAyOSwgMjUxLCA5NSwgNDksIDI5LCAyNDcsIDEwMSwgNDksIDI5LCAKLSAgICA0NywgMjI0LCA3MywgNDksIDI5LCAxMzIsIDIyNiwgODcsIDIyNiwgNDksIDQ5LCAyOSwgMjI4LCAxOTEsIDQ5LCAyOSwgCi0gICAgMjQ3LCAxMDksIDQ5LCAyOSwgMjUwLCAyNTMsIDQ5LCAyOSwgMjQ5LCAxNTMsIDQ5LCAyOSwgMjMyLCAxOTksIDQ5LCAyOSwgCi0gICAgMjM5LCAxNzcsIDQ5LCAyOSwgMjM2LCAyMTcsIDQ5LCAyOSwgMjI2LCAxNTgsIDQ5LCAyOSwgMjI3LCAxOTUsIDQ5LCAyOSwgCi0gICAgMjM3LCAxODUsIDQ5LCAyOSwgMjI1LCA4NiwgNDksIDI5LCAyNDcsIDY5LCA0OSwgMjksIDI1MiwgMTMzLCAxMDYsIDI1MSwgCi0gICAgNzcsIDQ5LCAyOSwgMjI5LCAxMiwgNDksIDI5LCAyNDgsIDEzOCwgMjI3LCAyMSwgNDksIDI5LCAyMjQsIDEyMSwgNDksIDI5LCAKLSAgICAyMjgsIDIwMSwgNDksIDI5LCAyNDksIDE5NSwgNDksIDI5LCAyNDcsIDEzNiwgNDksIDI5LCAyMjgsIDE0MCwgNDksIDI5LCAKLSAgICA1OCwgNDksIDI5LCAyMjgsIDQwLCA0OSwgMjksIDIyOCwgMTMxLCA0OSwgMjksIDIyNiwgOTUsIDQ5LCAyOSwgMjQ1LCAyNDUsIAotICAgIDQ5LCAyOSwgMjUxLCAyNTEsIDQ5LCAyOSwgMjI4LCA2MiwgNDksIDI5LCAyNTMsIDQ2LCA0OSwgMjksIDIzMSwgMTc4LCA0OSwgCi0gICAgMjksIDIyOCwgMjUwLCA0OSwgMjksIDIzOSwgMTczLCA0OSwgMjksIDIzNSwgMTQ3LCA0OSwgMjksIDIyOSwgMTA4LCA0OSwgCi0gICAgMjksIDI0NywgOTQsIDQ5LCAyOSwgMjM0LCA3MywgNDksIDI5LCAyNTQsIDE4NiwgNDksIDI5LCAyMzMsIDE0LCA0OSwgMjksIAotICAgIDI0OCwgNTEsIDQ5LCAyOSwgMjUyLCA5NiwgNDksIDI5LCAyMzYsIDIzMSwgNDksIDI5LCAyMzYsIDEyMiwgNDksIDI5LCAKLSAgICAyMjksIDE5MiwgNDksIDI5LCAyNTQsIDk2LCA0OSwgMjksIDIzNiwgNzksIDQ5LCAyOSwgMjI2LCAxMTAsIDQ5LCAyOSwgCi0gICAgMjM0LCAzNiwgNDksIDI5LCAyNTIsIDEzNSwgNDksIDI5LCAyMjgsIDM2LCA0OSwgMjksIDI1MSwgNjAsIDQ5LCAyOSwgMjQ1LCAKLSAgICAyMzksIDQ5LCAyOSwgMjI2LCAxNjcsIDQ5LCAyOSwgMjM5LCAyNDUsIDQ5LCAyOSwgMjUyLCAxNDEsIDQ5LCAyOSwgMjI0LCAKLSAgICAxNjcsIDI0NywgMjM1LCA0OSwgMjksIDI1MSwgNzYsIDQ5LCAyOSwgMjI0LCAxMzAsIDQ5LCAyOSwgMjMwLCAyMDMsIDQ5LCAKLSAgICAyOSwgMjQ0LCAxNjAsIDQ5LCAyOSwgMjI4LCAxMzgsIDQ5LCAyOSwgMjI1LCA2MSwgNDksIDI5LCAyNTIsIDIzNSwgNDksIAotICAgIDI5LCAyMzMsIDQzLCA0OSwgMjksIDI1MywgNjAsIDQ5LCAyOSwgMjI5LCAxMDMsIDQ5LCAyOSwgMjMxLCAyMzAsIDQ5LCAyOSwgCi0gICAgMjMxLCA2MCwgNDksIDI5LCAyNDcsIDIsIDQ5LCAyOSwgMjUyLCAxMzQsIDQ5LCAyOSwgMjUyLCAyLCA0OSwgMjksIDI1MiwgCi0gICAgMTU1LCA0OSwgMjksIDIzNiwgODEsIDQ5LCAyOSwgMjI0LCAxNjYsIDQ5LCAyOSwgMjUxLCA5OSwgNDksIDI5LCAyMjQsIAotICAgIDEwOSwgNDksIDI5LCAyNDksIDE5MiwgNDksIDI5LCAyMjQsIDIyMCwgNDksIDI5LCAyNDYsIDYsIDQ5LCAyOSwgMjM3LCAKLSAgICAxMzQsIDQ5LCAyOSwgMjQ2LCAxNTMsIDQ5LCAyOSwgMjM2LCA3NSwgNDksIDI5LCAyMjgsIDE5MywgNDksIDI5LCAyMjksIAotICAgIDYzLCAyMjcsIDg4LCAyNTIsIDE2NCwgNDksIDI5LCAyMzIsIDksIDQ5LCAyOSwgMjUyLCAxNDAsIDQ5LCAyOSwgMjI0LCA4NCwgCi0gICAgNDksIDI5LCAyNDcsIDEyNSwgNDksIDI5LCAyMzcsIDI0MCwgNDksIDI5LCAyMjcsIDcyLCAyMzcsIDI0MCwgNDksIDI5LCAKLSAgICAyMzcsIDIzOCwgNDksIDI5LCAyMjgsIDE1NCwgNDksIDI5LCAyMzcsIDI0MSwgNDksIDI5LCAyMjQsIDExMSwgNDksIDI5LCAKLSAgICAyNDcsIDEwLCA0OSwgMjksIDI0OCwgNDIsIDQ5LCAyOSwgMjQ1LCAxMTgsIDQ5LCAyOSwgMjQ2LCAyMzMsIDQ5LCAyOSwgCi0gICAgMjQ0LCAxNTksIDQ5LCAyOSwgMjUyLCAxMzIsIDQ5LCAyOSwgMjI3LCA3NiwgNDksIDI5LCAyNDUsIDE1NywgNDksIDI5LCAKLSAgICAyNDcsIDYyLCA0OSwgMjksIDIzMSwgMjYsIDIyNCwgMTA5LCA0OSwgMjksIDI1MSwgMjUzLCA0OSwgMjksIDI0NiwgNTMsIAotICAgIDQ5LCAyOSwgMjQ3LCA0MywgNDksIDI5LCAyNTIsIDE2NCwgNDksIDI5LCAyMzEsIDcsIDQ5LCAyOSwgMjUwLCA2NSwgNDksIAotICAgIDI5LCAyMjQsIDEyNiwgNDksIDI5LCAyNDUsIDEwMSwgNDksIDI5LCAyMjMsIDIyMywgNDksIDI5LCAyMzYsIDEyOSwgNDksIAotICAgIDI5LCAyNTIsIDE1MCwgNDksIDI5LCAyNDcsIDI0NCwgNDksIDI5LCAyNDYsIDIyNSwgNDksIDI5LCAyMjYsIDY0LCA0OSwgCi0gICAgMjksIDI0OCwgMTExLCA0OSwgMjksIDIzMSwgMjUzLCA0OSwgMjksIDIzNCwgMjQzLCA0OSwgMjksIDI0NywgMTU3LCA0OSwgCi0gICAgMjksIDIyNiwgMTA3LCA0OSwgMjksIDI0OCwgMTE4LCA0OSwgMjksIDIyNSwgMjMwLCA0OSwgMjksIDI0NywgMTEsIDkwLCAKLSAgICAyNTAsIDMyLCAxMTYsIDQyLCAxODAsIDIzMSwgMTUzLCA5MCwgMjUwLCAzMiwgMTE2LCA2NCwgMTgwLCA1MSwgOTAsIDI1MCwgCi0gICAgMzIsIDExNiwgNDIsIDE4MCwgMjM2LCAxNTQsIDIyLCAyMzEsIDE1MywgOTAsIDI1MCwgMzIsIDExNiwgNjQsIDE4MCwgMjM2LCAKLSAgICAxNTQsIDIyLCA1MSwgOTAsIDI1MCwgMzIsIDExNiwgMjQ2LCAyMTgsIDIyNywgMjA3LCA5MCwgMjUwLCAzMiwgMTE2LCAyMjcsIAotICAgIDIwOCwgMjQ2LCAyMjQsIDQ2LCA5MCwgMjUwLCAzMiwgMTE2LCAyMjcsIDIwOCwgMjQ2LCAyMjQsIDUxLCA5MCwgMjUwLCAzMiwgCi0gICAgMTE2LCAyMjcsIDIwOCwgMjQ2LCAyMjQsIDIzNywgMjM3LCA5MCwgMjUwLCAzMiwgMTE2LCAyMjcsIDIwOCwgMjQ2LCAyMjQsIAotICAgIDIyNSwgMTEzLCAyMzcsIDIzNywgOTAsIDI1MCwgMzIsIDExNiwgMjI3LCAyMDgsIDI0NiwgMjI0LCAyMjUsIDExMywgMjMxLCAKLSAgICAxNTMsIDkwLCAyNTAsIDMyLCAxMTYsIDIyNywgMjA4LCAyNDYsIDIyNCwgMjAzLCAyMzcsIDIzNywgOTAsIDI1MCwgMzIsIAotICAgIDExNiwgMjM0LCA0LCA5MCwgMjI4LCAxNDUsIDkwLCAyNTEsIDU0LCA5MCwgMjQ2LCAyMTgsIDIyOCwgMzgsIDI0OSwgMTg5LCAKLSAgICA3NiwgMjM5LCAxNzQsIDI0MCwgNSwgMjI4LCA2MSwgOTgsIDkwLCAyMzksIDE5MywgNzYsIDkwLCAyNTEsIDc5LCA3NiwgOTAsIAotICAgIDY1LCAyMjMsIDg5LCA0MiwgMjU0LCAxODIsIDEwNCwgNDEsIDI1NCwgMTgyLCAxMDQsIDQyLCA0NywgMjU0LCAxODIsIDEwNCwgCi0gICAgNDEsIDQ3LCAyNTQsIDE4MiwgMTA0LCA0MiwgMjUxLCAxMSwgMTA0LCA0MSwgMjUxLCAxMSwgMTA0LCA0MiwgNjMsIDI1MSwgCi0gICAgMTEsIDEwNCwgNDEsIDYzLCAyNTEsIDExLCAxMDQsIDQyLCA4NiwgMjM3LCAyMTcsIDEwNCwgNDEsIDg2LCAyMzcsIDIxNywgCi0gICAgMTA0LCAyMzIsIDIzNywgNzYsIDI0NiwgMTA0LCA3NiwgNDIsIDIyNiwgMTAwLCAyMjksIDEwNCwgMTA0LCA0MSwgMjI2LCAKLSAgICAxMDAsIDIyOSwgMTA0LCAxMDQsIDQyLCA2MywgMjM3LCAyMTcsIDEwNCwgNDEsIDYzLCAyMzcsIDIxNywgMTA0LCA0MiwgNjMsIAotICAgIDIyNiwgMTAwLCAyMjksIDEwNCwgMTA0LCA0MSwgNjMsIDIyNiwgMTAwLCAyMjksIDEwNCwgMTA0LCA0MiwgNjMsIDM3LCAKLSAgICAxMDQsIDQxLCA2MywgMzcsIDEwNCwgMjI0LCAxNDgsIDI1MCwgMTMwLCAyMDAsIDQ3LCAyMzIsIDIwNiwgMjMyLCA1NywgNzYsIAotICAgIDQ3LCAyMzIsIDIwNiwgMjMyLCA1NywgNzYsIDE4NCwgNDcsIDIzMiwgMjA2LCAyMzIsIDU3LCA3NiwgMjMyLCAyMzcsIDE2NSwgCi0gICAgMjQ3LCAxMjUsIDI0NSwgMTQ0LCAyMDcsIDExOCwgMjQ1LCAxNDQsIDIwNywgMTEzLCAyNDUsIDE0NCwgMjA3LCAxNjYsIAotICAgIDI0NSwgMTQ0LCAyMDcsIDE1OCwgMjQ1LCAxNDQsIDIwNywgMTczLCAyNDUsIDE0NCwgMjA3LCAxODMsIDI0NSwgMTQ0LCAKLSAgICAyMDcsIDE5NCwgMjQ1LCAxNDQsIDIwNywgMTg3LCAyNDUsIDE0NCwgMjA3LCAxOTIsIDkwLCAyMzcsIDIwOSwgMjA2LCA3NiwgCi0gICAgOTAsIDIzMSwgMTM1LCAyMDYsIDc2LCA5MCwgMjUwLCAzOCwgMjA2LCA3NiwgOTAsIDI0NywgMjIxLCAyMDYsIDc2LCAyNiwgCi0gICAgMjI4LCAyNDEsIDU2LCAyMDYsIDc2LCAyNiwgNDcsIDU2LCAyMDYsIDc2LCAyMjQsIDE0NiwgMjUwLCAxMzAsIDYxLCAyMzksIAotICAgIDQ1LCAyMzEsIDIxMiwgNzYsIDYxLCAyMzksIDQ1LCAyMzEsIDIxMiwgMiwgMjI0LCAyMDQsIDIyOCwgMTU1LCA3NiwgNjEsIAotICAgIDIzOSwgNDUsIDIzMSwgMjEyLCAxNjUsIDIyNSwgMTEzLCAyNDUsIDE1MSwgNjEsIDIzOSwgNDUsIDIzMSwgMjEyLCAyLCAKLSAgICAyMjQsIDIwNCwgMjI4LCAxNTUsIDE2NSwgMjI1LCAxMTMsIDI0NSwgMTUxLCA2MSwgMjM5LCA0NSwgMjMxLCAyMTIsIDE2NSwgCi0gICAgMjAzLCAyNDUsIDE1MSwgMzMsIDIzMiwgMjM3LCA3NiwgOTAsIDE2NywgMjM3LCAxNzEsIDI0NywgOTEsIDIyOSwgMTc0LCAKLSAgICA5OCwgMjQ1LCAxNDQsIDIwNywgMjI3LCAyMywgMjQ1LCAxNDQsIDIwNywgMjI1LCAyMTYsIDI0NSwgMTQ0LCAyMDcsIDIyNiwgCi0gICAgMjA3LCA2MSwgOTAsIDIzOSwgMTkzLCA3NiwgMjM3LCAzLCA3NiwgMjMzLCAxNzYsIDI1NCwgMjAyLCA3NiwgOTAsIDM4LCAKLSAgICAyNDAsIDcsIDkwLCAxMzIsIDI0NywgNTUsIDIyOCwgMTQ1LCAxMjYsIDEsIDMsIDU3LCAxMjYsIDEsIDU3LCAxMjYsIDEsIDMsIAotICAgIDc0LCAxMjYsIDEsIDc0LCAxMjYsIDEsIDMsIDY2LCAxMjYsIDEsIDY2LCAxMjYsIDEsIDMsIDcyLCAxMjYsIDEsIDcyLCAKLSAgICAxMjYsIDEsIDMsIDczLCAxMjYsIDEsIDczLCAxMjYsIDEsIDE3NywgMTI2LCAxLCAyNDYsIDE5MywgMTI2LCAxLCAyMzgsIAotICAgIDE5OSwgMTI2LCAxLCAyNDYsIDQ2LCAxMjYsIDEsIDIzOCwgMTA3LCAxMjYsIDEsIDI0NSwgMjE4LCAxMjYsIDEsIDIzOSwgMywgCi0gICAgMTI2LCAxLCAyNDYsIDEzMSwgMTI2LCAxLCAyMzgsIDE1MCwgMTI2LCAxLCAyNDYsIDExLCAxMjYsIDEsIDIzMSwgMzEsIAotICAgIDEyNiwgMSwgMjIzLCAxMTcsIDEyNiwgMSwgMjI5LCAxNSwgMTI2LCAxLCAyMjMsIDQ3LCAxMjYsIDEsIDIyOCwgNiwgMTI2LCAKLSAgICAxLCAyMjMsIDE5LCAxMjYsIDEsIDIzMCwgMjEzLCAxMjYsIDEsIDIyMywgOTcsIDEyNiwgMSwgMjI4LCAxNjksIDEyNiwgMSwgCi0gICAgMjIzLCAyNywgMTI2LCAxLCAyMjcsIDEwNywgMTI2LCAxLCAyNTAsIDE4OSwgMTI2LCAxLCAyMjYsIDE3NSwgMTI2LCAxLCAKLSAgICAyNTAsIDQsIDEyNiwgMSwgMywgMjI1LCAyNTAsIDEyNiwgMSwgMjI1LCAyNTAsIDEyNiwgMSwgMjQ4LCAxMDcsIDEyNiwgMSwgCi0gICAgMjI3LCA0NCwgMTI2LCAxLCAyNTAsIDc3LCAxMjYsIDEsIDk2LCAxMjYsIDEsIDI0OSwgMTYxLCAxMjYsIDEsIDIzNiwgMSwgCi0gICAgMTI2LCAxLCAyMzUsIDg5LCAxMjYsIDEsIDIzNCwgMjA2LCAxMjYsIDEsIDIzNSwgMTYyLCAxMjYsIDEsIDIzNSwgNiwgMTI2LCAKLSAgICAxLCAxNTQsIDEyNiwgMSwgMjUzLCA3MCwgMTI2LCAxLCAyMTMsIDEyNiwgMSwgMjQ1LCA3NSwgMTI2LCAxLCAyNTIsIDE4MSwgCi0gICAgMTI2LCAxLCAyMzMsIDY5LCAxMjYsIDEsIDI0NCwgMTQ1LCAxMjYsIDEsIDI1MiwgOTAsIDEyNiwgMSwgMjMyLCAxNzMsIAotICAgIDEyNiwgMSwgMjQ1LCAxMjEsIDEyNiwgMSwgMjUyLCAyMzgsIDEyNiwgMSwgMjMzLCAxNTEsIDEyNiwgMSwgMjQ0LCAyMjcsIAotICAgIDEyNiwgMSwgMjUyLCAxMzgsIDEyNiwgMSwgMjMzLCA0LCAxMjYsIDEsIDE5OCwgMTI2LCAxLCAyMzYsIDE1NywgMTI2LCAxLCAKLSAgICAyMzYsIDY2LCAxMjYsIDEsIDIzNiwgMjM1LCAxMjYsIDEsIDIzNiwgMTAzLCAxMjYsIDEsIDMsIDE5MSwgMTI2LCAxLCAxOTEsIAotICAgIDEyNiwgMSwgMywgMjIzLCAxNTgsIDEyNiwgMSwgMjIzLCAxNTgsIDEyNiwgMSwgMywgMjIzLCAxODMsIDEyNiwgMSwgMjIzLCAKLSAgICAxODMsIDEyNiwgMSwgMjA4LCAxMjYsIDEsIDIzMSwgMTgwLCAxMjYsIDEsIDIzMSwgNzAsIDEyNiwgMSwgMjMxLCAyNDQsIAotICAgIDEyNiwgMSwgMjMxLCAxMjIsIDEyNiwgMSwgMywgMjI0LCAxNzMsIDEyNiwgMSwgMjI0LCAxNzMsIDEyNiwgMSwgMjI0LCAKLSAgICAxMTgsIDEyNiwgMSwgMjI0LCAxNDEsIDEyNiwgMSwgMjI0LCAxMDUsIDEyNiwgMSwgMTk5LCAxMjYsIDEsIDIyNCwgMTkwLCAKLSAgICAxMjYsIDEsIDMsIDE3NywgMTI2LCAxLCAzLCAyMzksIDMsIDM2LCAyMzksIDE5LCAyMjQsIDIwNCwgMjI4LCAxNTUsIDc2LCAKLSAgICAzNiwgMjM5LCAxOSwgMjI5LCAxOTEsIDIyOCwgMTU1LCA3NiwgMjM5LCAxOSwgMjI0LCAyMDQsIDIyOCwgMTU1LCA3NiwgCi0gICAgMjM5LCAxOSwgMjI5LCAxOTEsIDIyOCwgMTU1LCA3NiwgMTI2LCAyMzksIDE5MywgNzYsIDEyNiwgMjI0LCAyMDQsIDIzOSwgCi0gICAgMTkzLCA3NiwgMTI2LCAyNDksIDIyNCwgMjIzLCAxNzAsIDIzOSwgMTksIDQ3LCAyNDQsIDk1LCA0OCwgMSwgMywgNTcsIDQ4LCAKLSAgICAxLCA1NywgNDgsIDEsIDMsIDc0LCA0OCwgMSwgNzQsIDQ4LCAxLCAzLCA2NiwgNDgsIDEsIDY2LCA0OCwgMSwgMywgNzIsIAotICAgIDQ4LCAxLCA3MiwgNDgsIDEsIDMsIDczLCA0OCwgMSwgNzMsIDQ4LCAxLCAxNzcsIDQ4LCAxLCAyNDYsIDE5MywgNDgsIDEsIAotICAgIDIzOCwgMTk5LCA0OCwgMSwgMjQ2LCA0NiwgNDgsIDEsIDIzOCwgMTA3LCA0OCwgMSwgMjQ1LCAyMTgsIDQ4LCAxLCAyMzksIAotICAgIDMsIDQ4LCAxLCAyNDYsIDEzMSwgNDgsIDEsIDIzOCwgMTUwLCA0OCwgMSwgMjQ2LCAxMSwgNDgsIDEsIDIzMSwgMzEsIDQ4LCAKLSAgICAxLCAyMjMsIDExNywgNDgsIDEsIDIyOSwgMTUsIDQ4LCAxLCAyMjMsIDQ3LCA0OCwgMSwgMjI4LCA2LCA0OCwgMSwgMjIzLCAKLSAgICAxOSwgNDgsIDEsIDIzMCwgMjEzLCA0OCwgMSwgMjIzLCA5NywgNDgsIDEsIDIyOCwgMTY5LCA0OCwgMSwgMjIzLCAyNywgNDgsIAotICAgIDEsIDIyNywgMTA3LCA0OCwgMSwgMjUwLCAxODksIDQ4LCAxLCAyMjYsIDE3NSwgNDgsIDEsIDI1MCwgNCwgNDgsIDEsIDMsIAotICAgIDIyNSwgMjUwLCA0OCwgMSwgMjI1LCAyNTAsIDQ4LCAxLCAyNDgsIDEwNywgNDgsIDEsIDIyNywgNDQsIDQ4LCAxLCAyNTAsIAotICAgIDc3LCA0OCwgMSwgOTYsIDQ4LCAxLCAyNDksIDE2MSwgNDgsIDEsIDIzNiwgMSwgNDgsIDEsIDIzNSwgODksIDQ4LCAxLCAKLSAgICAyMzQsIDIwNiwgNDgsIDEsIDIzNSwgMTYyLCA0OCwgMSwgMjM1LCA2LCA0OCwgMSwgMTU0LCA0OCwgMSwgMjUzLCA3MCwgNDgsIAotICAgIDEsIDIxMywgNDgsIDEsIDI0NSwgNzUsIDQ4LCAxLCAyNTIsIDE4MSwgNDgsIDEsIDIzMywgNjksIDQ4LCAxLCAyNDQsIDE0NSwgCi0gICAgNDgsIDEsIDI1MiwgOTAsIDQ4LCAxLCAyMzIsIDE3MywgNDgsIDEsIDI0NSwgMTIxLCA0OCwgMSwgMjUyLCAyMzgsIDQ4LCAxLCAKLSAgICAyMzMsIDE1MSwgNDgsIDEsIDI0NCwgMjI3LCA0OCwgMSwgMjUyLCAxMzgsIDQ4LCAxLCAyMzMsIDQsIDQ4LCAxLCAxOTgsIAotICAgIDQ4LCAxLCAyMzYsIDE1NywgNDgsIDEsIDIzNiwgNjYsIDQ4LCAxLCAyMzYsIDIzNSwgNDgsIDEsIDIzNiwgMTAzLCA0OCwgMSwgCi0gICAgMywgMTkxLCA0OCwgMSwgMTkxLCA0OCwgMSwgMywgMjIzLCAxNTgsIDQ4LCAxLCAyMjMsIDE1OCwgNDgsIDEsIDMsIDIyMywgCi0gICAgMTgzLCA0OCwgMSwgMjIzLCAxODMsIDQ4LCAxLCAyMDgsIDQ4LCAxLCAyMzEsIDE4MCwgNDgsIDEsIDIzMSwgNzAsIDQ4LCAxLCAKLSAgICAyMzEsIDI0NCwgNDgsIDEsIDIzMSwgMTIyLCA0OCwgMSwgMywgMjI0LCAxNzMsIDQ4LCAxLCAyMjQsIDE3MywgNDgsIDEsIAotICAgIDIyNCwgMTE4LCA0OCwgMSwgMjI0LCAxNDEsIDQ4LCAxLCAyMjQsIDEwNSwgNDgsIDEsIDE5OSwgNDgsIDEsIDIyNCwgMTkwLCAKLSAgICA0OCwgMSwgMywgMTc3LCA0OCwgMSwgMywgMjM5LCAzLCA0OCwgMSwgMjI1LCA2NCwgNDgsIDEsIDIyNCwgMjI4LCA0OCwgMSwgCi0gICAgMjI1LCA0MiwgNDgsIDEsIDIyNCwgMjA2LCA0OCwgMjM2LCAxNTQsIDI0OSwgMTQwLCAyMzksIDE5LCAyMzIsIDE5NCwgMjI4LCAKLSAgICAxNTUsIDc2LCA0OCwgMjM5LCAxOTMsIDc2LCA0OCwgMjI0LCAyMDQsIDIzOSwgMTkzLCA3NiwgNDgsIDI0OSwgMjI0LCAyMzgsIAotICAgIDEyOSwgMTc2LCAxLCAyNTQsIDI3LCAxNzYsIDEsIDIzMywgMjQ0LCAxNzYsIDEsIDE4NSwgMTc2LCAxLCAyNDcsIDEzMCwgCi0gICAgMTc2LCAxLCAyMjIsIDIyMiwgMTc2LCAxLCAyMjcsIDEwOSwgMTc2LCAxLCAxOTksIDE3NiwgMSwgMTQ5LCAxNzYsIDEsIAotICAgIDIxNCwgMTc2LCAxLCAyMzksIDc2LCAxNzYsIDEsIDIxMiwgMTc2LCAxLCAyMzksIDE4MiwgMTc2LCAxLCAyMzIsIDEzOSwgCi0gICAgMTc2LCAxLCAyMjQsIDczLCAxNzYsIDEsIDIyMywgODYsIDE3NiwgMSwgMjUxLCAyMDUsIDE3NiwgMSwgMjI5LCAxNDgsIAotICAgIDE3NiwgMSwgMTQ2LCAxNzYsIDEsIDIyMywgMTE5LCAxNzYsIDEsIDI1MiwgNDQsIDE3NiwgMSwgMTkzLCAxNzYsIDEsIDU3LCAKLSAgICAxNzYsIDEsIDczLCAxNzYsIDEsIDcyLCAxNzYsIDEsIDI0OCwgMjQsIDE3NiwgMSwgMjU0LCAyNTMsIDE3NiwgMSwgMjQ4LCAKLSAgICAyMiwgMTc2LCAxLCAyNTQsIDUzLCAxNzYsIDEsIDIzNCwgMTMsIDE3NiwgMSwgMjU0LCAxOTAsIDE3NiwgMSwgMjQ3LCAyMzksIAotICAgIDE3NiwgMSwgMjU0LCAxODQsIDE3NiwgMSwgMjQ3LCAyMjgsIDE3NiwgMSwgMjQ3LCAxOTgsIDE3NiwgMSwgNzQsIDE3NiwgMSwgCi0gICAgNjYsIDE3NiwgMSwgMjM5LCAxOTIsIDE3NiwgMSwgMTk2LCAxNzYsIDEsIDIzNSwgMTM5LCAxNzYsIDEsIDI0NiwgMTUsIAotICAgIDE3NiwgMSwgMjQwLCA0OCwgMjYsIDEsIDIzOCwgMTczLCAyNiwgMSwgMjI4LCAxMDQsIDI2LCAxLCAyMzgsIDE3MSwgMjYsIAotICAgIDEsIDIzNSwgODIsIDI2LCAxLCAyMzUsIDgxLCAyNiwgMSwgMjM1LCA4MCwgMjYsIDEsIDIyNiwgMTYzLCAyNiwgMSwgMjI4LCAKLSAgICA5OSwgMjYsIDEsIDIzMSwgMTc0LCAyNiwgMSwgMjMxLCAxNzAsIDI2LCAxLCAyMzEsIDE2OCwgMjYsIDEsIDIzMSwgMTYyLCAKLSAgICAyNiwgMSwgMjMxLCAxNTksIDI2LCAxLCAyMzEsIDE1NywgMjYsIDEsIDIzMSwgMTYzLCAyNiwgMSwgMjMxLCAxNzMsIDI2LCAKLSAgICAxLCAyMzYsIDE0OCwgMjYsIDEsIDIzMywgNjAsIDI2LCAxLCAyMjgsIDEwMiwgMjYsIDEsIDIzMywgNTIsIDI2LCAxLCAyMjgsIAotICAgIDIzNiwgMjYsIDEsIDIyOCwgMTAwLCAyNiwgMSwgMjQwLCA2OCwgMjYsIDEsIDI1MSwgMTEzLCAyNiwgMSwgMjI4LCAxMDcsIAotICAgIDI2LCAxLCAyNTEsIDE2NywgMjYsIDEsIDIzOCwgMjEwLCAyNiwgMSwgMjI2LCAyMTgsIDI2LCAxLCAyMzMsIDg1LCAyNiwgMSwgCi0gICAgMjQ1LCA2OSwgMjYsIDEsIDU3LCAyNiwgMSwgMjU1LCAxOSwgMjYsIDEsIDE5MSwgMjYsIDEsIDIyNCwgMTAsIDI2LCAxLCAKLSAgICAyNDcsIDIxNywgMjYsIDEsIDcyLCAyNiwgMSwgMjIzLCAyMjEsIDI2LCAxLCAyMjMsIDIyOCwgMjYsIDEsIDczLCAyNiwgMSwgCi0gICAgMjI0LCAxNzMsIDI2LCAxLCAyMjQsIDE3MCwgMjYsIDEsIDIzNCwgODgsIDI2LCAxLCAyMjMsIDE4MywgMjYsIDEsIDY2LCAKLSAgICAyNiwgMSwgMjI0LCAxMzMsIDI2LCAxLCAyMjQsIDE0MSwgMjYsIDEsIDIyNCwgMTE4LCAyNiwgMSwgMjIzLCAxNTgsIDI2LCAKLSAgICAxLCAyNDcsIDE2NSwgMjYsIDEsIDIyMywgMjAyLCAyNiwgMSwgNzQsIDI2LCAyNDcsIDUyLCAyNiwgMSwgMjI4LCAxMDMsIAotICAgIDI2LCAxLCAyMzUsIDc0LCAyNiwgMSwgMjM1LCA3NiwgMjYsIDEsIDIzNSwgNzgsIDI2LCAxLCAyMzEsIDE2OSwgMjYsIDEsIAotICAgIDIzMSwgMTU2LCAyNiwgMSwgMjMxLCAxNjAsIDI2LCAxLCAyMzEsIDE2NCwgMjYsIDEsIDIzMSwgMTU0LCAyNiwgMSwgMjM2LCAKLSAgICAxNDMsIDI2LCAxLCAyMzYsIDE0MSwgMjYsIDEsIDIzNiwgMTQ0LCAyNiwgMSwgMjM5LCAzNCwgMjYsIDEsIDIzMywgNTYsIAotICAgIDI2LCAxLCAyMzMsIDQ1LCAyNiwgMSwgMjMzLCA1MCwgMjYsIDEsIDIzMywgNDgsIDI2LCAxLCAyMzMsIDU4LCAyNiwgMSwgCi0gICAgMjMzLCA0NiwgMjYsIDEsIDIzOSwgMzIsIDI2LCAxLCAyMzksIDMwLCAyNiwgMSwgMjI4LCAyMzAsIDI2LCAxLCAyMjgsIAotICAgIDIyOCwgMjYsIDEsIDIyOCwgMjIxLCAyNiwgMSwgMjI4LCAyMjYsIDI2LCAxLCAyMjgsIDIzNCwgMjYsIDEsIDIzMywgMjA0LCAKLSAgICAyNiwgMSwgMjI4LCAxMDUsIDI2LCAxLCAyMjMsIDIxMiwgMjYsIDEsIDIyMywgMjEwLCAyNiwgMSwgMjIzLCAyMTEsIDI2LCAKLSAgICAxLCAyMzksIDMzLCAyNiwgMSwgMjI4LCAxMDYsIDI2LCAxLCAyMjMsIDIxOCwgMjYsIDEsIDIyMywgMTgwLCAyNiwgMSwgCi0gICAgMjIzLCAxNzksIDI2LCAxLCAyMjMsIDE4MiwgMjYsIDEsIDIyMywgMTUxLCAyNiwgMSwgMjIzLCAxNTIsIDI2LCAxLCAyMjMsIAotICAgIDE1NCwgMjYsIDEsIDI1NCwgMTI4LCAyNiwgMSwgMjU0LCAxMjQsIDkwLCAyNTQsIDE3NSwgMjM3LCAxNjIsIDc2LCA5MCwgCi0gICAgMjU0LCAxNzUsIDIzMSwgMTkzLCA3NiwgOTAsIDI1NCwgMTc1LCAxNjgsIDc2LCA5MCwgMjU0LCAxNzUsIDEzNSwgNzYsIDkwLCAKLSAgICAyNTQsIDE3NSwgMTUyLCA3NiwgOTAsIDI1NCwgMTc1LCAyNDYsIDI0MywgNzYsIDkwLCAyNTQsIDE3NSwgMjI2LCAxMDYsIAotICAgIDc2LCA5MCwgMjU0LCAxNzUsIDIzNiwgMTU0LCA3NiwgOTAsIDI1NCwgMTc1LCAyNTIsIDEyNiwgNzYsIDkwLCAyNTQsIDE3NSwgCi0gICAgMjQ3LCA0NSwgNzYsIDkwLCAyNTQsIDE3NSwgMjMwLCAyMDksIDc2LCA5MCwgMjU0LCAxNzUsIDIyNiwgMjE0LCA3NiwgOTAsIAotICAgIDI1NCwgMTc1LCAyNDYsIDIzNywgNzYsIDkwLCAyNTQsIDE3NSwgMjQ1LCAxMTMsIDc2LCA5MCwgMjU0LCAxNzUsIDI0OCwgCi0gICAgNDksIDc2LCA5MCwgMjU0LCAxNzUsIDIzNywgMzYsIDc2LCAxNzYsIDEsIDI1MiwgOTAsIDE3NiwgMSwgMjIzLCA0NywgMTc2LCAKLSAgICAxLCAyMzksIDE1NiwgMTc2LCAxLCAyNDUsIDIxOCwgMTc2LCAxLCAyNDgsIDM1LCAxNzYsIDEsIDI0NywgMjI2LCAxNzYsIDEsIAotICAgIDIzNCwgNTIsIDE3NiwgMSwgMjM0LCA1NiwgMTc2LCAxLCAyMzksIDIxMCwgMTc2LCAxLCAyNTQsIDE3NiwgMTc2LCAxLCAKLSAgICAyMzksIDI1MCwgMTc2LCAxLCAyMjUsIDEyMSwgMTc2LCAxLCAyNDAsIDMwLCAxNzYsIDEsIDIzNSwgMTIzLCAxNzYsIDEsIAotICAgIDI1NCwgMjQ3LCAxNzYsIDEsIDI1NCwgNDksIDE3NiwgMSwgMjU0LCAxOTksIDE3NiwgMSwgMjM0LCA2OSwgMTc2LCAxLCAKLSAgICAyMzQsIDU4LCAxNzYsIDEsIDIzOSwgMjQ3LCAxNzYsIDM1LCAxLCAyMzMsIDI0NCwgMTc2LCAzNSwgMSwgMjI3LCAxMDksIAotICAgIDE3NiwgMzUsIDEsIDIzOSwgNzYsIDE3NiwgMzUsIDEsIDIxMiwgOSwgMTk1LCAyMjcsIDEwOSwgOSwgMTk1LCAyMjQsIDEyNywgCi0gICAgOSwgMTk1LCAyMjQsIDY1LCA5LCAxOTUsIDI1MiwgNTYsIDksIDE5NSwgMjI3LCAyMDEsIDksIDE5NSwgMjQ0LCA4NSwgOSwgCi0gICAgMTk1LCAyNDQsIDg5LCA5LCAxOTUsIDI0NCwgMTUxLCA5LCAxOTUsIDI0NCwgODYsIDksIDE5NSwgMjI3LCAxMTIsIDksIAotICAgIDE5NSwgMjQ0LCA4OCwgOSwgMTk1LCAyNDQsIDg0LCA5LCAxOTUsIDI0NCwgMTQ5LCA5LCAxOTUsIDI0NCwgODcsIDksIDE5NSwgCi0gICAgMjQ0LCA4MywgOSwgMTk1LCAxOTksIDksIDE5NSwgMjEyLCA5LCAxOTUsIDE5MywgOSwgMTk1LCAyMzMsIDI0NCwgOSwgMTk1LCAKLSAgICAyMjgsIDE0NywgOSwgMTk1LCAyMjIsIDIyMiwgOSwgMTk1LCAyNDQsIDkwLCA5LCAxOTUsIDI0NSwgODUsIDksIDE5NSwgCi0gICAgMjI3LCAxMjEsIDksIDE5NSwgMjI3LCAxODYsIDksIDE5NSwgMjI4LCA3MCwgOSwgMTk1LCAyMjksIDE1MywgOSwgMTk1LCAKLSAgICAyMzMsIDE1MywgOSwgMTk1LCAyMzIsIDE0MSwgOSwgMTk1LCAyMjYsIDEyNSwgOSwgMTk1LCAyMjcsIDExMSwgOSwgMTk1LCAKLSAgICAyMjcsIDE5NCwgOSwgMTk1LCAyNDQsIDk3LCA5LCAxOTUsIDI0NCwgODIsIDksIDE5NSwgMjMzLCA5OSwgOSwgMTk1LCAyMzIsIAotICAgIDEzOSwgNDgsIDEsIDMsIDIzOCwgMTA3LCA0OCwgMSwgMywgMjI5LCAxNSwgNDgsIDEsIDMsIDIyOCwgNiwgNDgsIDEsIDMsIAotICAgIDk2LCA0OCwgMSwgMywgMjM0LCAyMDYsIDQ4LCAxLCAzLCAxNTQsIDQ4LCAxLCAzLCAyNDUsIDc1LCA0OCwgMSwgMywgMjQ0LCAKLSAgICAxNDUsIDQ4LCAxLCAzLCAyNDUsIDEyMSwgNDgsIDEsIDMsIDI0NCwgMjI3LCA0OCwgMSwgMywgMjM2LCA2NiwgNDgsIDEsIDMsIAotICAgIDIwOCwgNDgsIDEsIDMsIDIzMSwgMTgwLCA0OCwgMSwgMywgMjMxLCA3MCwgNDgsIDEsIDMsIDIzMSwgMjQ0LCA0OCwgMSwgMywgCi0gICAgMjMxLCAxMjIsIDkzLCAyNiwgMjM4LCAxNzMsIDkzLCAyNiwgMjM1LCA4MiwgOTMsIDI2LCAyMjYsIDE2MywgOTMsIDI2LCAKLSAgICAyMzEsIDE3NCwgOTMsIDI2LCAyMzYsIDE0OCwgOTMsIDI2LCAyMzMsIDYwLCA5MywgMjYsIDIyOCwgMjM2LCA5MywgMjYsIAotICAgIDI0MCwgNjgsIDkzLCAyNiwgMjUxLCAxMTMsIDkzLCAyNiwgMjUxLCAxNjcsIDkzLCAyNiwgMjM4LCAyMTAsIDkzLCAyNiwgCi0gICAgMjI2LCAyMTgsIDkzLCAyNiwgMjMzLCA4NSwgOTMsIDI2LCAyNDUsIDY5LCA5MywgMjYsIDIzOCwgMTc0LCA1NywgOTMsIDI2LCAKLSAgICAyMzUsIDgzLCA1NywgOTMsIDI2LCAyMjYsIDE2NCwgNTcsIDkzLCAyNiwgMjMxLCAxNzUsIDU3LCA5MywgMjYsIDIzNiwgCi0gICAgMTQ5LCA1NywgOTMsIDI2LCAyMzMsIDYxLCA1NywgOTMsIDI2LCAyMjgsIDIzNywgNTcsIDkzLCAyNiwgMjQwLCA2OSwgNTcsIAotICAgIDkzLCAyNiwgMjUxLCAxMTQsIDU3LCA5MywgMjYsIDI1MSwgMTY4LCA1NywgOTMsIDI2LCAyMzgsIDIxMSwgNTcsIDkzLCAyNiwgCi0gICAgMjI2LCAyMTksIDU3LCA5MywgMjYsIDIzMywgODYsIDU3LCA5MywgMjYsIDI0NSwgNzAsIDU3LCA5MywgMjYsIDI1MSwgMTE0LCAKLSAgICA2NiwgOTMsIDIzOCwgMTMzLCAxMTYsIDIzNCwgNzgsIDkzLCAyMzgsIDEzMywgMTE2LCAxMzAsIDI0NCwgMTQ1LCA5MywgCi0gICAgMTMzLCAxMTgsIDkzLCAxMzMsIDExMywgOTMsIDEzMywgMTY2LCA5MywgMTMzLCAxNTgsIDkzLCAxMzMsIDE3MywgOTMsIAotICAgIDEzMywgMTgzLCA5MywgMTMzLCAxOTQsIDkzLCAxMzMsIDE4NywgOTMsIDEzMywgMTkyLCA5MywgMTMzLCAyMjcsIDIzLCA5MywgCi0gICAgMTMzLCAyMzYsIDg0LCA5MywgMTMzLCAyNDcsIDQ2LCA5MywgMTMzLCAyMjQsIDE1MSwgOTMsIDEzMywgMjI0LCA5NywgOTMsIAotICAgIDEzMywgMjM2LCAxOTksIDkzLCAxMzMsIDI0OCwgNDgsIDkzLCAxMzMsIDIyNywgMjI3LCA5MywgMTMzLCAyMjgsIDQxLCA5MywgCi0gICAgMTMzLCAyNDUsIDEyNywgOTMsIDEzMywgMjI4LCAxNjcsIDkzLCAxMzMsIDIzNSwgMjM3LCA5MywgMTMzLCAyMjgsIDEzOSwgCi0gICAgOTMsIDEzMywgMjQ3LCA1MSwgOTMsIDEzMywgMjUxLCA0MCwgOTMsIDEzMywgMjM4LCAzNywgOTMsIDEzMywgMjMxLCAyMDgsIAotICAgIDkzLCAxMzMsIDI1MiwgMzEsIDkzLCAxMzMsIDIyOCwgOSwgOTMsIDEzMywgMjI3LCAyMTYsIDkzLCAxMzMsIDI0NywgMjIwLCAKLSAgICA5MywgMTMzLCAyMzEsIDIwMSwgOTMsIDEzMywgMjU0LCAyMTIsIDkzLCAxMzMsIDI0NywgNzUsIDkzLCAxMzMsIDIzMSwgCi0gICAgMTk5LCA5MywgMTMzLCAyMjksIDE5MiwgOTMsIDEzMywgMjMxLCAyNDMsIDIzMywgMTczLCA1MywgMzMsIDY1LCAyMjUsIAotICAgIDIxNywgMTE4LCAzMywgNjUsIDIyNSwgMjE3LCAxMTMsIDMzLCA2NSwgMjI1LCAyMTcsIDE2NiwgMzMsIDY1LCAyMjUsIDIxNywgCi0gICAgMTU4LCAzMywgNjUsIDIyNSwgMjE3LCAxNzMsIDMzLCA2NSwgMjI1LCAyMTcsIDE4MywgMzMsIDY1LCAyMjUsIDIxNywgMTk0LCAKLSAgICAzMywgNjUsIDIyNSwgMjE3LCAxODcsIDMzLCA2NSwgMjI1LCAyMTcsIDE5MiwgMzMsIDY1LCAyMjYsIDIwNywgMzMsIDY1LCAKLSAgICAyMjYsIDIwOCwgMTE4LCAzMywgNjUsIDIyNiwgMjA4LCAxMTMsIDMzLCA2NSwgMjI2LCAyMDgsIDE2NiwgMzMsIDY1LCAyMjYsIAotICAgIDIwOCwgMTU4LCAzMywgNjUsIDIyNiwgMjA4LCAxNzMsIDMzLCAyNiwgMjM4LCAxNzMsIDMzLCAyNiwgMjM1LCA4MiwgMzMsIAotICAgIDI2LCAyMjYsIDE2MywgMzMsIDI2LCAyMzEsIDE3NCwgMzMsIDI2LCAyMzYsIDE0OCwgMzMsIDI2LCAyMzMsIDYwLCAzMywgCi0gICAgMjYsIDIyOCwgMjM2LCAzMywgMjYsIDI0MCwgNjgsIDMzLCAyNiwgMjUxLCAxMTMsIDMzLCAyNiwgMjUxLCAxNjcsIDMzLCAKLSAgICAyNiwgMjM4LCAyMTAsIDMzLCAyNiwgMjI2LCAyMTgsIDMzLCAyNiwgMjMzLCA4NSwgMzMsIDI2LCAyNDUsIDY5LCAzMywgMjYsIAotICAgIDIzOCwgMTc0LCA1NywgMzMsIDI2LCAyMzUsIDgzLCA1NywgMzMsIDI2LCAyMjYsIDE2NCwgNTcsIDMzLCAyNiwgMjMxLCAKLSAgICAxNzUsIDU3LCAzMywgMjYsIDIzNiwgMTQ5LCA1NywgMzMsIDI2LCAyMzMsIDYxLCA1NywgMzMsIDI2LCAyMjgsIDIzNywgNTcsIAotICAgIDMzLCAyNiwgMjQwLCA2OSwgNTcsIDMzLCAyNiwgMjUxLCAxMTQsIDU3LCAzMywgMjYsIDI1MSwgMTY4LCA1NywgMzMsIDI2LCAKLSAgICAyMzgsIDIxMSwgNTcsIDMzLCAyNiwgMjI2LCAyMTksIDU3LCAzMywgMjYsIDIzMywgODYsIDU3LCAzMywgMjYsIDI0NSwgNzAsIAotICAgIDU3LCAzMywgMjM4LCAxMzMsIDExNiwgMjUxLCAxOTcsIDMzLCAyMzgsIDEzMywgMTE2LCAyMzksIDk4LCAzMywgMjYsIDI0MCwgCi0gICAgNjksIDY2LCAyMzgsIDEzMywgMjI4LCA2MSwgOTgsIDMzLCAxMzMsIDExOCwgMzMsIDEzMywgMTEzLCAzMywgMTMzLCAxNjYsIAotICAgIDMzLCAxMzMsIDE1OCwgMzMsIDEzMywgMTczLCAzMywgMTMzLCAxODMsIDMzLCAxMzMsIDE5NCwgMzMsIDEzMywgMTg3LCAzMywgCi0gICAgMTMzLCAxOTIsIDMzLCAxMzMsIDIyNywgMjMsIDMzLCAxMzMsIDIzNiwgODQsIDMzLCAxMzMsIDI0NywgNDYsIDMzLCAxMzMsIAotICAgIDIyNCwgMTUxLCAzMywgMTMzLCAyMjQsIDk3LCAzMywgMTMzLCAyMzYsIDE5OSwgMzMsIDEzMywgMjQ4LCA0OCwgMzMsIDEzMywgCi0gICAgMjI3LCAyMjcsIDMzLCAxMzMsIDIyOCwgNDEsIDMzLCAxMzMsIDI0NSwgMTI3LCAzMywgMTMzLCAyMjgsIDE2NywgMzMsIAotICAgIDEzMywgMjM1LCAyMzcsIDMzLCAxMzMsIDIyOCwgMTM5LCAzMywgMTMzLCAyNDcsIDUxLCAzMywgMTMzLCAyNTEsIDQwLCAzMywgCi0gICAgMTMzLCAyMzgsIDM3LCAzMywgMTMzLCAyMzAsIDIwNywgMzMsIDEzMywgMjM3LCAzOCwgMzMsIDEzMywgMjQ3LCA4MiwgMzMsIAotICAgIDEzMywgMjI3LCAyMzgsIDMzLCAxMzMsIDI0NywgMTUxLCAzMywgMTMzLCAyMzIsIDIwMywgMzMsIDEzMywgMjU0LCA1NywgCi0gICAgMzMsIDEzMywgMjM5LCAxOTQsIDMzLCAxMzMsIDIzMSwgMTk5LCAzMywgMTMzLCAyNTEsIDE0LCAzMywgMTMzLCAyNTEsIDUsIAotICAgIDMzLCAxMzMsIDI0NSwgNjMsIDMzLCAxMzMsIDI1MSwgMjE4LCAzMywgMTMzLCAyMzcsIDExNywgMzMsIDEzMywgMjM3LCAKLSAgICAyMzcsIDMzLCAxMzMsIDIzMSwgMTUzLCAzMywgMTMzLCAyMzYsIDIyOSwgMzMsIDEzMywgMjMxLCAyMTgsIDMzLCAxMzMsIAotICAgIDIyOCwgOSwgMzMsIDEzMywgMjI3LCAyMTYsIDMzLCAxMzMsIDI0NywgMjIwLCAzMywgMTMzLCAyMzEsIDIwMSwgMzMsIDEzMywgCi0gICAgMjU0LCAyMTIsIDMzLCAxMzMsIDIzNSwgNzEsIDMzLCA2NSwgMjI2LCAyMDgsIDE4MywgMzMsIDY1LCAyMjYsIDIwOCwgMTk0LCAKLSAgICAzMywgNjUsIDIyNiwgMjA4LCAxODcsIDMzLCA2NSwgMjI2LCAyMDgsIDE5MiwgMzMsIDY1LCAyNDYsIDI0NSwgMzMsIDY1LCAKLSAgICAyNDYsIDI0NiwgMTE4LCAzMywgNjUsIDI0NiwgMjQ2LCAxMTMsIDMzLCA2NSwgMjQ2LCAyNDYsIDE2NiwgMzMsIDY1LCAyNDYsIAotICAgIDI0NiwgMTU4LCAzMywgNjUsIDI0NiwgMjQ2LCAxNzMsIDMzLCA2NSwgMjQ2LCAyNDYsIDE4MywgMzMsIDY1LCAyNDYsIDI0NiwgCi0gICAgMTk0LCAzMywgNjUsIDI0NiwgMjQ2LCAxODcsIDMzLCA2NSwgMjQ2LCAyNDYsIDE5MiwgMzMsIDY1LCAyNDcsIDYzLCA5MCwgCi0gICAgMTY3LCAxNCwgMzIsIDIzOSwgMTc1LCA5MCwgMTY3LCAxNCwgMzIsIDI0NywgOTMsIDkwLCAxNjcsIDE0LCAzMiwgMjM3LCAKLSAgICAxOSwgOTAsIDE2NywgMTQsIDMyLCAyNTQsIDEzNiwgOTAsIDE2NywgMTQsIDMyLCAyMzYsIDI1MiwgOTAsIDE2NywgMTQsIAotICAgIDMyLCAyMzksIDk2LCA5MCwgMTY3LCAxNCwgMzIsIDIzOSwgOTcsIDkwLCAxNjcsIDE0LCAzMiwgMjU0LCA1MCwgOTAsIDE2NywgCi0gICAgMTQsIDMyLCAyMjksIDE3MiwgOTAsIDE2NywgMTQsIDMyLCAyMzQsIDkxLCA5MCwgMTY3LCAxNCwgMzIsIDIzNCwgMjMzLCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgNzIsIDM3LCAyNDUsIDg1LCAzNywgMjQ3LCAxOTQsIDM3LCAyNDcsIDE1OSwgMjM3LCAKLSAgICAxNzYsIDIzNywgMTkyLCA1MywgMzMsIDQ4LCA1NywgMzMsIDQ4LCA3NCwgMzMsIDQ4LCA2NiwgMzMsIDQ4LCA3MiwgMzMsIAotICAgIDQ4LCA3MywgMzMsIDQ4LCAxNzcsIDMzLCA0OCwgMjM4LCAxOTksIDMzLCA0OCwgMjM4LCAxMDcsIDMzLCA0OCwgMjM5LCAzLCAKLSAgICAzMywgNDgsIDIzOCwgMTUwLCAzMywgNDgsIDIzMSwgMzEsIDMzLCA0OCwgMjI5LCAxNSwgMzMsIDQ4LCAyMjgsIDYsIDMzLCAKLSAgICA0OCwgMjMwLCAyMTMsIDMzLCA0OCwgMjI4LCAxNjksIDMzLCA0OCwgMjI3LCAxMDcsIDMzLCA0OCwgMjI2LCAxNzUsIDMzLCAKLSAgICA0OCwgMjI1LCAyNTAsIDMzLCA0OCwgMjI3LCA0NCwgMzMsIDQ4LCA5NiwgMzMsIDQ4LCAyMzYsIDEsIDMzLCA0OCwgMjM1LCAKLSAgICA4OSwgMzMsIDQ4LCAyMzQsIDIwNiwgMzMsIDQ4LCAyMzUsIDE2MiwgMzMsIDQ4LCAyMzUsIDYsIDMzLCA0OCwgMTU0LCAzMywgCi0gICAgNDgsIDI0NSwgNzUsIDMzLCA0OCwgMjQ0LCAxNDUsIDMzLCA0OCwgMjQ1LCAxMjEsIDMzLCA0OCwgMjQ0LCAyMjcsIDMzLCAKLSAgICA0OCwgMTk4LCAzMywgNDgsIDIzNiwgMTU3LCAzMywgNDgsIDIzNiwgNjYsIDMzLCA0OCwgMjM2LCAyMzUsIDMzLCA0OCwgCi0gICAgMjM2LCAxMDMsIDMzLCA0OCwgMTkxLCAzMywgNDgsIDIyMywgMTU4LCAzMywgNDgsIDIyMywgMTgzLCAzMywgNDgsIDIwOCwgCi0gICAgMzMsIDQ4LCAyMzEsIDE4MCwgMzMsIDQ4LCAyMzEsIDcwLCAzMywgNDgsIDIzMSwgMjQ0LCAzMywgNDgsIDIzMSwgMTIyLCAKLSAgICAzMywgNDgsIDIyNCwgMTczLCAzMywgNDgsIDIyNCwgMTE4LCAzMywgNDgsIDIyNCwgMTQxLCAzMywgNDgsIDIyNCwgMTA1LCAKLSAgICAzNywgMjU0LCAxNTYsIDM3LCAyNTQsIDg4LCAzNywgMjU0LCAxNzEsIDM3LCAyNTUsIDU3LCAzNywgMjM5LCAyNTEsIDM3LCAKLSAgICAyMzksIDIyNSwgMzcsIDIyNSwgMTE5LCAzNywgMjQ3LCAxNzQsIDM3LCAyNDgsIDMzLCAzNywgMjM0LCA1NSwgMzcsIDIzNCwgCi0gICAgNTAsIDM3LCAyMzksIDU1LCAzNywgMjM5LCAyOSwgMzcsIDIzOSwgMjcsIDM3LCAyNDYsIDE1NywgMzcsIDI0NiwgMTY0LCAKLSAgICAzNywgMjQ2LCAzNywgMzcsIDI0NiwgMzMsIDM3LCAyMzgsIDQ4LCAzNywgMjQ2LCAyNywgMzcsIDIzOCwgMTg0LCAzNywgCi0gICAgMjM4LCAxODMsIDM3LCAyMzgsIDE4MiwgMzcsIDIzOCwgMTgxLCAzNywgMjQ1LCAxOTYsIDM3LCAyNDUsIDE5NSwgMzcsIAotICAgIDIzOCwgODgsIDM3LCAyMzgsIDkwLCAzNywgMjM4LCAyNTUsIDM3LCAyMzgsIDEzMSwgMzcsIDIzOCwgMTM3LCAzNywgMjMxLCAKLSAgICAxNiwgMzcsIDIzMCwgMjQ5LCAzNywgMjI4LCAyMTksIDM3LCAyMjksIDE3NywgMzcsIDIyOSwgMTc2LCAzNywgMjUwLCAxODYsIAotICAgIDM3LCAyNTAsIDMxLCAzNywgMjQ5LCAxNDEsIDM3LCAyMjYsIDEyMCwgMzcsIDIzNSwgMjMzLCAzNywgMjM0LCAyMzQsIDM3LCAKLSAgICAyNDUsIDE1NiwgMzcsIDIzMywgMjM4LCAzNywgMjMzLCAyMzcsIDM3LCAyNTMsIDY4LCAzNywgMjMzLCA2NiwgMzcsIDIzMywgCi0gICAgMzksIDM3LCAyMzMsIDQwLCAzNywgMjUyLCAxNjIsIDM3LCAyNDQsIDE0NCwgMzcsIDI0NCwgMTQxLCAzNywgMjUyLCA2NSwgCi0gICAgMzcsIDI0NCwgMTI5LCAzNywgMjQ1LCAxMDQsIDM3LCAyMzMsIDEwNSwgMzcsIDIzMywgMTMyLCAzNywgMjQ1LCA5MSwgMzcsIAotICAgIDIzMywgMTMwLCAzNywgMjMzLCAxNDIsIDM3LCAyNTIsIDIyOCwgMzcsIDIzMiwgMjUwLCAzNywgMjUyLCAxMjgsIDM3LCAKLSAgICAyNDQsIDIxOSwgMzcsIDIzMiwgMjQ1LCAzNywgMjQ0LCAyMTUsIDM3LCAyNDQsIDIxNiwgMzcsIDIzNywgNDcsIDM3LCAyMzcsIAotICAgIDQ0LCAzNywgMjM3LCA1MSwgMzcsIDIzNywgOSwgMzcsIDIzNywgMjksIDM3LCAyMzYsIDEzMywgMzcsIDIzNiwgMTE1LCAzNywgCi0gICAgMjM2LCAxMTQsIDM3LCAyMzYsIDIyMSwgMzcsIDIzNiwgMjE5LCAzNywgMjM2LCAyMjIsIDM3LCAyMjQsIDIwLCAzNywgMjI0LCAKLSAgICAxOCwgMzcsIDIyMywgMTUwLCAzNywgMjMxLCAxMzMsIDM3LCAyMzEsIDEzNywgMzcsIDIzMSwgNTMsIDM3LCAyMzEsIDQ4LCAKLSAgICAzNywgMjMxLCAyMTcsIDM3LCAyMzEsIDIxNiwgMzcsIDIyNCwgMTUwLCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyMjMsIAotICAgIDg5LCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAxMTgsIDkwLCAxNjcsIDE0LCAzMiwgMjQ0LCAxNTUsIDExMywgOTAsIAotICAgIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMTY2LCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAxNTgsIDkwLCAxNjcsIDE0LCAKLSAgICAzMiwgMjQ0LCAxNTUsIDE3MywgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMTgzLCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgCi0gICAgMTU1LCAxOTQsIDkwLCAxNjcsIDE0LCAzMiwgMjQ0LCAxNTUsIDE4NywgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMTkyLCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyMjcsIDIzLCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyNDcsIDI1MiwgCi0gICAgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMjI1LCAyMTgsIDkwLCAxNjcsIDE0LCAzMiwgMjQ0LCAxNTUsIDIyNiwgMjA5LCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyNDYsIDIzOCwgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMjQ3LCA2NywgCi0gICAgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMjI4LCAyMTIsIDkwLCAxNjcsIDE0LCAzMiwgMjQ0LCAxNTUsIDIyOSwgMTYxLCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyNDgsIDE4LCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyMzUsIDU5LCAKLSAgICA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyMjUsIDIxNiwgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMjI1LCAyMTAsIAotICAgIDkwLCAxNjcsIDE0LCAzMiwgMjQ0LCAxNTUsIDIyNSwgMjA2LCA5MCwgMTY3LCAxNCwgMzIsIDI0NCwgMTU1LCAyMjUsIDIwNywgCi0gICAgOTAsIDE2NywgMTQsIDMyLCAyNDQsIDE1NSwgMjI1LCAyMTIsIDM3LCAyNDQsIDE1MCwgMzcsIDI1MCwgMTg5LCAzNywgMjU0LCAKLSAgICA1MywgMzcsIDEyNSwgMzcsIDIzNCwgNiwgMzcsIDIzMywgMTU0LCAzNywgMjQ5LCAxNjMsIDM3LCAyNDksIDE2NCwgMjI4LCAKLSAgICAxMTgsIDM3LCAyNDksIDE2NCwgMjUwLCAyMzEsIDM3LCAyMzksIDE5MiwgMzcsIDI0NywgMTk3LCAyMzUsIDIzOCwgMjQ1LCAKLSAgICAxMDUsIDM3LCAyNDcsIDE5NywgMjM1LCAyMzgsIDIyNywgMTI5LCAzNywgMjQ3LCAxOTcsIDIzNSwgMjM4LCAyMjcsIDg2LCAKLSAgICAzNywgMjQ3LCAxOTcsIDIzNSwgMjM4LCAyMzYsIDIxOCwgMzcsIDI1MSwgNywgMzcsIDIzMywgMjQyLCAyNTQsIDE5MiwgMzcsIAotICAgIDIzNiwgMSwgMzcsIDIzNiwgNjcsIDU3LCAzNywgMTk4LCAzNywgMTc3LCAzNywgMjM5LCA2LCAzNywgMjM2LCAyNDksIDM3LCAKLSAgICAyNDYsIDE0NSwgMzcsIDI1MiwgMzMsIDM3LCAyMzksIDUsIDM3LCAyMzMsIDEwMCwgMzcsIDIzNSwgMTQxLCAzNywgMjM2LCAKLSAgICA2NywgMjQ3LCAxMzAsIDM3LCAyMzYsIDY3LCAyMTQsIDM3LCAyMzYsIDE5MSwgMzcsIDIzOCwgMjI5LCAzNywgMjQ0LCA5MCwgCi0gICAgMzcsIDIzOCwgMjAxLCAzNywgMjM2LCAxNTksIDM3LCAyNDYsIDQ4LCAzNywgMjI2LCAxNzcsIDM3LCAyMzYsIDY3LCAxNDksIAotICAgIDM3LCAyMzYsIDExMCwgMzcsIDI0OSwgMTcxLCAzNywgMjM4LCAxNjEsIDM3LCAyNDcsIDksIDM3LCAyMzUsIDIwLCAzNywgCi0gICAgMjM2LCA2NywgMTg1LCAzNywgMjM2LCAxMDcsIDM3LCAyNTEsIDY5LCAzNywgMjM4LCAxNTUsIDM3LCAyMzYsIDEwOCwgMjI4LCAKLSAgICAxMTgsIDM3LCAyNTEsIDcwLCAyMjgsIDExOCwgMzcsIDIzNywgNjksIDIyOCwgMTE4LCAzNywgMjM4LCAxNTYsIDIyOCwgCi0gICAgMTE4LCAzNywgMjM2LCAxMDgsIDI1MCwgMjMxLCAzNywgMjUxLCA3MCwgMjUwLCAyMzEsIDM3LCAyMzcsIDY5LCAyNTAsIAotICAgIDIzMSwgMzcsIDIzOCwgMTU2LCAyNTAsIDIzMSwgMzcsIDIzNywgNjksIDEwNywgMTkzLCAzNywgMjM3LCA2OSwgMTA3LCAKLSAgICAyMzEsIDM1LCAyMjgsIDExOCwgMzcsIDIxMywgMzcsIDIzOCwgMTI2LCAzNywgMjM2LCA2OSwgMzcsIDI0NSwgMjQ4LCAzNywgCi0gICAgMjMyLCAxOCwgMzcsIDIzMiwgMTksIDEwNywgMTkzLCAzNywgMjMyLCAxOSwgMTA3LCAyMzEsIDM1LCAyMjgsIDExOCwgMzcsIAotICAgIDIzMiwgMTg0LCAzNywgMjM0LCAyMDcsIDM3LCAyMzYsIDY3LCAxOTMsIDM3LCAyMzYsIDY4LCAzNywgMjMyLCAxNTgsIDM3LCAKLSAgICAyMzQsIDE3OSwgMzcsIDIzNiwgNjcsIDE5NiwgMzcsIDIzNiwgMjIsIDM3LCAyMzgsIDgxLCAzNywgMjM2LCAyMywgMjM2LCAKLSAgICAyMjEsIDM3LCAyMzIsIDE1NywgMzcsIDIzNCwgMTc4LCAzNywgMjM2LCA2NywgMjI0LCAxNzQsIDM3LCAyMzYsIDIwLCAzNywgCi0gICAgMjM4LCA3OSwgMzcsIDIzNiwgMjEsIDIzNiwgMjIxLCAzNywgMjM5LCA3NywgMjM0LCA4MSwgMzcsIDIzNywgNjksIDIzNCwgCi0gICAgODEsIDM3LCAyNTQsIDE5OSwgMzcsIDI1MiwgMTE3LCAzNywgMjUxLCAyNDcsIDM3LCAyNTEsIDIzMiwgMzcsIDI1MiwgNDUsIAotICAgIDEwNywgMjM4LCAyMjksIDM3LCAyNTEsIDY4LCAzNywgMjUwLCAxMTgsIDM3LCAyNDUsIDE4MywgMzcsIDE1NCwgMzcsIDI0NCwgCi0gICAgMTUxLCAzNywgMjQwLCAxNiwgMzcsIDIzOCwgMTY4LCAzNywgMjM4LCAxNTYsIDI1MiwgMTUsIDM3LCAyMzgsIDEwOSwgMzcsIAotICAgIDIzNywgMTQ2LCAzNywgMjM3LCAxNDUsIDM3LCAyMzcsIDEzOSwgMzcsIDIzNywgODEsIDM3LCAyMzYsIDI1MCwgMjI4LCAKLSAgICAxODQsIDM3LCAyMzYsIDEzMiwgMzcsIDIzNiwgOTYsIDM3LCAyMzMsIDk4LCAzNywgMjMzLCA3LCAzNywgMjMyLCAyMjksIAotICAgIDM3LCAyMzIsIDIyOCwgMzcsIDIyOCwgMTEyLCAzNywgMjI3LCAyMDIsIDM3LCAyMjQsIDE0MiwgMzcsIDIyNSwgNjUsIDEwNywgCi0gICAgMTg1LCAzNywgMTAyLCAxMDcsIDE4NSwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMTE4LCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI1MCwgMTIxLCAxMTMsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDE2NiwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgCi0gICAgMTU4LCA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgMTIxLCAxNzMsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDE4MywgOTAsIAotICAgIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMTk0LCA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgMTIxLCAxODcsIDkwLCAxNjcsIDE0LCAKLSAgICAzMiwgMjUwLCAxMjEsIDE5MiwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMjI3LCAyMywgOTAsIDE2NywgMTQsIDMyLCAKLSAgICAyNTAsIDEyMSwgMjQ3LCAyNTIsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDIyNSwgMjE4LCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI1MCwgMTIxLCAyMjYsIDIwOSwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMjQ2LCAyMzgsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjUwLCAxMjEsIDI0NywgNjcsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDIyOCwgMjEyLCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI1MCwgMTIxLCAyMjksIDE2MSwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMjQ4LCAxOCwgOTAsIDE2NywgMTQsIDMyLCAKLSAgICAyNTAsIDEyMSwgMjM1LCA1OSwgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMjI1LCAyMTYsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjUwLCAxMjEsIDIyNSwgMjEwLCA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgMTIxLCAyMjUsIDIwNiwgOTAsIDE2NywgMTQsIDMyLCAKLSAgICAyNTAsIDEyMSwgMjI1LCAyMDcsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDIyNSwgMjEyLCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI1MCwgMTIxLCAyMjUsIDIxMywgOTAsIDE2NywgMTQsIDMyLCAyNTAsIDEyMSwgMjI1LCAyMDgsIDkwLCAxNjcsIDE0LCAzMiwgCi0gICAgMjUwLCAxMjEsIDIyNSwgMjA5LCA5MCwgMTY3LCAxNCwgMzIsIDI1MCwgMTIxLCAyMjUsIDIxNSwgOTAsIDE2NywgMTQsIDMyLCAKLSAgICAyNTAsIDEyMSwgMjI1LCAyMTEsIDkwLCAxNjcsIDE0LCAzMiwgMjUwLCAxMjEsIDIyNiwgMjA3LCA5MCwgMTY3LCAxNCwgMzIsIAotICAgIDI1MCwgMTIxLCAyMjYsIDIwNiwgMzcsIDI0NiwgMTc3LCAxODEsIDMyLCAyMjYsIDI0MCwgMjUwLCAyNTEsIDI0NSwgMTEyLCAKLSAgICAxODEsIDMyLCAyMjYsIDI0MCwgMjMxLCAyNDEsIDI0OCwgNDgsIDE4MSwgMzIsIDI0OSwgMjM0LCAyNTQsIDYzLCAyMjYsIAotICAgIDI0MCwgMjUyLCAyMjUsIDE4MSwgMzIsIDIyMywgMTY4LCAyNDcsIDUsIDE4MSwgMzIsIDIyNCwgMTY4LCAxODEsIDMyLCAKLSAgICAyNTEsIDQxLCAxODEsIDMyLCAyMjYsIDI0MCwgMjU0LCAxMDMsIDE4MSwgMzIsIDI0NCwgMjIyLCAyMjYsIDEyMSwgMTgxLCAKLSAgICAzMiwgMywgMjI3LCA3NCwgMTgxLCAzMiwgMjI2LCA4OCwgMTgxLCAzMiwgMjMzLCAxNDksIDE4MSwgMzIsIDIyOCwgNjAsIAotICAgIDE4MSwgMzIsIDI0NywgODQsIDE4MSwgMzIsIDI0NSwgMjMzLCAyMzIsIDIzOCwgMTgxLCAzMiwgMjM2LCA5OSwgMTgxLCAzMiwgCi0gICAgMjQ3LCAyMTksIDE4MSwgMzIsIDI0NywgNiwgMTgxLCAzMiwgMjI0LCA5MCwgMjM0LCA2MiwgMjI2LCAyNDAsIDI1MCwgNzMsIAotICAgIDE4MSwgMzIsIDI1NCwgMTQwLCAxODEsIDMyLCAyNTEsIDI1LCAxODEsIDMyLCAyNTIsIDE1NiwgMjI2LCAxODcsIDE4MSwgCi0gICAgMzIsIDI0NSwgMjQ2LCAxODEsIDMyLCAyMjgsIDEzMCwgMjU0LCAxNTUsIDE4MSwgMzIsIDIzMSwgMTk0LCAxODEsIDMyLCAKLSAgICAyMzksIDI0NiwgMTgxLCAzMiwgMjQ1LCAyMzMsIDIyNywgNzQsIDE4MSwgMzIsIDIzNiwgNzMsIDI1MSwgOSwgMTgxLCAzMiwgCi0gICAgMjQ1LCAyMzMsIDIzMiwgMjEwLCAxODEsIDMyLCAyMjYsIDI0MCwgMjU1LCA0NSwgMjI0LCAxNTEsIDE4MSwgMzIsIDIyNiwgCi0gICAgMjQwLCAyNTEsIDg2LCAyNDcsIDQ2LCAxODEsIDMyLCAyNDAsIDIsIDE4MSwgMzIsIDI0OCwgODYsIDE4MSwgMzIsIDIzMSwgCi0gICAgMTk3LCAxODEsIDMyLCAyNDUsIDIzMywgMjMyLCAyMzMsIDE4MSwgMzIsIDIzMiwgMTk4LCAxODEsIDMyLCAyNTAsIDEzNSwgCi0gICAgMTA2LCAyMjYsIDI0MCwgMjM3LCAxODQsIDE4MSwgMzIsIDIyNiwgMjQwLCAyNDcsIDExMiwgMTgxLCAzMiwgMjM0LCAzNCwgCi0gICAgMTgxLCAzMiwgMjM0LCA5MywgMTgxLCAzMiwgMjUwLCA1MSwgMTgxLCAzMiwgMjUwLCA2OSwgMTgxLCAzMiwgMjQwLCAxMiwgCi0gICAgMTgxLCAzMiwgMjUyLCAxMDksIDE4MSwgMzIsIDI1MSwgNTYsIDE4MCwgMjM2LCAyMjMsIDE4MSwgMzIsIDI0NiwgMTUyLCAKLSAgICAyMjYsIDEyMSwgMTgxLCAzMiwgMjMyLCAxNjEsIDIyNSwgMTA3LCAxODEsIDMyLCAyMzQsIDMzLCAxODEsIDMyLCAyMjYsIAotICAgIDI0MCwgMjI0LCAxMzUsIDE4MSwgMzIsIDIzMSwgMTg5LCAxODEsIDMyLCAyMjYsIDI0MCwgMjUxLCAyNTMsIDE4MSwgMzIsIAotICAgIDIyNiwgMjQwLCAyNTQsIDk5LCAyMjYsIDE4NSwgMTgxLCAzMiwgMjI2LCAyNDAsIDIzOSwgMCwgMjI4LCA0MywgMjM2LCA3NCwgCi0gICAgMTgxLCAzMiwgMjUwLCAyOSwgMTgxLCAzMiwgMjI2LCAyNDAsIDIzNywgMTEsIDIzNywgNDgsIDE4MSwgMzIsIDI1NSwgNDYsIAotICAgIDE4MSwgMzIsIDIyNiwgMjQwLCAyMjQsIDE2MywgMTgxLCAzMiwgMjI2LCAyNDAsIDI0NiwgMTE4LCAyMjQsIDExMSwgMTgxLCAKLSAgICAzMiwgMjI2LCAyNDAsIDIzOSwgMTAyLCAyMzgsIDI0LCAxODEsIDMyLCAyNDksIDE5MywgMTgxLCAzMiwgMjM3LCAxNzcsIAotICAgIDE4MSwgMzIsIDIzOSwgMjQ5LCAyMjYsIDQ4LCAxODEsIDMyLCAzLCAyMzIsIDIxMCwgMTgxLCAzMiwgMjU1LCA5LCAyNTEsIAotICAgIDQ4LCAxODEsIDMyLCAyNTIsIDIyNywgMjUxLCA0OCwgOCwgNCwgMjM5LCAxOTUsIDgsIDQsIDIzOSwgMTg5LCA4LCA0LCA3NCwgCi0gICAgOCwgNCwgMjM5LCAyMTIsIDgsIDQsIDI0MCwgNzAsIDgsIDQsIDI0MCwgNTUsIDgsIDQsIDI0MCwgNzIsIDgsIDQsIDI0MCwgCi0gICAgNzEsIDgsIDQsIDI1NCwgNjIsIDgsIDQsIDI1NCwgMzYsIDgsIDQsIDU3LCA4LCA0LCAyNTQsIDE1NywgOCwgNCwgMjI1LCAKLSAgICAxMTcsIDgsIDQsIDIyNSwgMTIwLCA4LCA0LCAyMjUsIDExOCwgOCwgNCwgMjM0LCAxOSwgOCwgNCwgMjMzLCAyNTMsIDgsIDQsIAotICAgIDczLCA4LCA0LCAyMzQsIDQ1LCA4LCA0LCAyNDcsIDE1MiwgOCwgNCwgNzIsIDgsIDQsIDIyNCwgODMsIDgsIDQsIDI1MiwgCi0gICAgMTU3LCA4LCA0LCAyNTIsIDE1NCwgOCwgNCwgMjUyLCAxODEsIDgsIDQsIDI1MiwgMTY1LCA4LCA0LCAyNTIsIDE3NSwgOCwgCi0gICAgNCwgMjUyLCAxNzQsIDgsIDQsIDI1MiwgMTc3LCA4LCA0LCAyNTIsIDE3NiwgOCwgNCwgMjUzLCAyMSwgOCwgNCwgMjUzLCAKLSAgICAxOCwgOCwgNCwgMjUzLCA3MCwgOCwgNCwgMjUzLCAzNywgOCwgNCwgMjUyLCA3MywgOCwgNCwgMjUyLCA3NywgOCwgNCwgCi0gICAgMjUyLCA3NCwgOCwgNCwgMjUyLCAxMjcsIDgsIDQsIDI1MiwgMTE4LCA4LCA0LCAyNTIsIDEzOCwgOCwgNCwgMjUyLCAxMjksIAotICAgIDgsIDQsIDI1MiwgMTkzLCA4LCA0LCAyNTIsIDIzOCwgOCwgNCwgMjUyLCAyMDUsIDgsIDQsIDI1MiwgNjMsIDgsIDQsIDI1MiwgCi0gICAgNjEsIDgsIDQsIDI1MiwgOTAsIDgsIDQsIDI1MiwgNzIsIDgsIDQsIDI1MiwgNjYsIDgsIDQsIDI1MiwgNzAsIDgsIDQsIAotICAgIDI1MiwgNDksIDgsIDQsIDI1MiwgNDgsIDgsIDQsIDI1MiwgNTQsIDgsIDQsIDI1MiwgNTIsIDgsIDQsIDI1MiwgNTAsIDgsIAotICAgIDQsIDI1MiwgNTEsIDgsIDQsIDIzMywgMzAsIDgsIDQsIDIzMywgMjYsIDgsIDQsIDIzMywgNjksIDgsIDQsIDIzMywgMzUsIAotICAgIDgsIDQsIDIzMywgNDQsIDgsIDQsIDIzMywgNjQsIDgsIDQsIDIzMywgNjIsIDgsIDQsIDIzMywgMTY3LCA4LCA0LCAyMzMsIAotICAgIDE1OCwgOCwgNCwgMjEzLCA4LCA0LCAyMzMsIDE5NywgOCwgNCwgMjMyLCAxNjYsIDgsIDQsIDIzMiwgMTY4LCA4LCA0LCAKLSAgICAyMzIsIDE2NywgOCwgNCwgMjMyLCAyMzUsIDgsIDQsIDIzMiwgMjMxLCA4LCA0LCAyMzMsIDQsIDgsIDQsIDIzMiwgMjQyLCAKLSAgICA4LCA0LCAyMzIsIDE2MCwgOCwgNCwgMjMyLCAxNTksIDgsIDQsIDIzMiwgMTczLCA4LCA0LCAyMzIsIDE2NSwgOCwgNCwgCi0gICAgMjMyLCAxNjIsIDgsIDQsIDIzMiwgMTY0LCA4LCA0LCAyMzIsIDE0MywgOCwgNCwgMjMyLCAxNDIsIDgsIDQsIDIzMiwgMTQ3LCAKLSAgICA4LCA0LCAyMzIsIDE0NiwgOCwgNCwgMjMyLCAxNDQsIDgsIDQsIDIzMiwgMTQ1LCA4LCA0LCAyNTMsIDMsIDgsIDQsIDI1MywgCi0gICAgMiwgOCwgNCwgMjUzLCA5LCA4LCA0LCAyNTMsIDQsIDgsIDQsIDI1MywgNiwgOCwgNCwgMjUzLCA1LCA4LCA0LCAyNTMsIDgsIAotICAgIDgsIDQsIDI1MywgNywgOCwgNCwgMjUzLCAxNCwgOCwgNCwgMjUzLCAxMywgOCwgNCwgMjUzLCAxNiwgOCwgNCwgMjUzLCAxNSwgCi0gICAgOCwgNCwgMjUyLCAyNTAsIDgsIDQsIDI1MiwgMjUyLCA4LCA0LCAyNTIsIDI1MSwgOCwgNCwgMjUyLCAyNTUsIDgsIDQsIAotICAgIDI1MiwgMjU0LCA4LCA0LCAyNTMsIDEsIDgsIDQsIDI1MywgMCwgOCwgNCwgMjUzLCAxMCwgOCwgNCwgMjUzLCAxMiwgOCwgNCwgCi0gICAgMjUzLCAxMSwgOCwgNCwgMjUyLCAyNDYsIDgsIDQsIDI1MiwgMjQ1LCA4LCA0LCAyNTIsIDI1MywgOCwgNCwgMjUyLCAyNDksIAotICAgIDgsIDQsIDI1MiwgMjQ3LCA4LCA0LCAyNTIsIDI0OCwgOCwgNCwgMjUyLCAyNDIsIDgsIDQsIDI1MiwgMjQxLCA4LCA0LCAKLSAgICAyNTIsIDI0NCwgOCwgNCwgMjUyLCAyNDMsIDgsIDQsIDIzNSwgMjA4LCA4LCA0LCAyMzUsIDIwNywgOCwgNCwgMjM1LCAyMTMsIAotICAgIDgsIDQsIDIzNSwgMjA5LCA4LCA0LCAyMzUsIDIxMCwgOCwgNCwgMjM1LCAyMTIsIDgsIDQsIDIzNSwgMjExLCA4LCA0LCAKLSAgICAyMzUsIDIxNSwgOCwgNCwgMjM1LCAyMTQsIDgsIDQsIDIzNSwgMjE3LCA4LCA0LCAyMzUsIDIxNiwgOCwgNCwgMjM1LCAyMDQsIAotICAgIDgsIDQsIDIzNSwgMjAzLCA4LCA0LCAyMzUsIDIwNiwgOCwgNCwgMjM1LCAyMDUsIDgsIDQsIDIzNSwgMTk4LCA4LCA0LCAKLSAgICAyMzUsIDE5NywgOCwgNCwgMjM1LCAyMDIsIDgsIDQsIDIzNSwgMjAxLCA4LCA0LCAyMzUsIDE5OSwgOCwgNCwgMjM1LCAyMDAsIAotICAgIDgsIDQsIDIzNSwgMTkyLCA4LCA0LCAyMzUsIDE5MSwgOCwgNCwgMjM1LCAxOTYsIDgsIDQsIDIzNSwgMTk1LCA4LCA0LCAKLSAgICAyMzUsIDE5MywgOCwgNCwgMjM1LCAxOTQsIDgsIDQsIDI0NSwgMTMsIDgsIDQsIDI0NSwgMTIsIDgsIDQsIDI0NSwgMTgsIDgsIAotICAgIDQsIDI0NSwgMTQsIDgsIDQsIDI0NSwgMTUsIDgsIDQsIDI0NSwgMTcsIDgsIDQsIDI0NSwgMTYsIDgsIDQsIDI0NSwgMjAsIAotICAgIDgsIDQsIDI0NSwgMTksIDgsIDQsIDI0NSwgMjIsIDgsIDQsIDI0NSwgMjEsIDgsIDQsIDI0NSwgNCwgOCwgNCwgMjQ1LCA2LCAKLSAgICA4LCA0LCAyNDUsIDUsIDgsIDQsIDI0NSwgOSwgOCwgNCwgMjQ1LCA4LCA4LCA0LCAyNDUsIDExLCA4LCA0LCAyNDUsIDEwLCAKLSAgICA4LCA0LCAyNDUsIDAsIDgsIDQsIDI0NCwgMjU1LCA4LCA0LCAyNDUsIDcsIDgsIDQsIDI0NSwgMywgOCwgNCwgMjQ1LCAxLCAKLSAgICA4LCA0LCAyNDUsIDIsIDgsIDQsIDI0NCwgMjUwLCA4LCA0LCAyNDQsIDI1NCwgOCwgNCwgMjQ0LCAyNTMsIDgsIDQsIDI0NCwgCi0gICAgMjUxLCA4LCA0LCAyNDQsIDI1MiwgOCwgNCwgMjM2LCAxMTIsIDgsIDQsIDIzNiwgMTExLCA4LCA0LCAyMzYsIDE1NywgOCwgCi0gICAgNCwgMjM2LCAxMTcsIDgsIDQsIDIzNiwgMTM5LCA4LCA0LCAyMzYsIDE1MSwgOCwgNCwgMjM2LCAxNTAsIDgsIDQsIDIzNywgCi0gICAgMiwgOCwgNCwgMjM2LCAyNTQsIDgsIDQsIDE5OCwgOCwgNCwgMjM3LCAyOCwgOCwgNCwgMjM2LCA0MywgOCwgNCwgMjM2LCAKLSAgICA0MiwgOCwgNCwgMjM2LCA0NSwgOCwgNCwgMjM2LCA0NCwgOCwgNCwgMjM2LCA3OCwgOCwgNCwgMjM2LCA3MCwgOCwgNCwgCi0gICAgMjM2LCAxMDMsIDgsIDQsIDIzNiwgODIsIDgsIDQsIDIzNiwgMTkzLCA4LCA0LCAyMzYsIDIzNSwgOCwgNCwgMjM2LCAyNywgCi0gICAgOCwgNCwgMjM2LCAyNCwgOCwgNCwgMjM2LCA2NiwgOCwgNCwgMjM2LCAzOSwgOCwgNCwgMjM2LCAzNCwgOCwgNCwgMjM2LCAKLSAgICAzNywgOCwgNCwgMjM2LCA3LCA4LCA0LCAyMzYsIDYsIDgsIDQsIDIzNiwgMTEsIDgsIDQsIDIzNiwgOSwgOCwgNCwgMjQ3LCAKLSAgICAzOSwgOCwgNCwgMjQ3LCAzNSwgOCwgNCwgMjQ3LCA3MCwgOCwgNCwgMjQ3LCA0NywgOCwgNCwgMjQ3LCAxMDYsIDgsIDQsIAotICAgIDI0NywgMTAwLCA4LCA0LCAyNDcsIDEyOSwgOCwgNCwgMjQ3LCAxMDgsIDgsIDQsIDI0NiwgMjM2LCA4LCA0LCAyNDcsIDcsIAotICAgIDgsIDQsIDI0NiwgMjU1LCA4LCA0LCAyNDYsIDIwOCwgOCwgNCwgMjQ2LCAyMDcsIDgsIDQsIDI0NiwgMjE5LCA4LCA0LCAKLSAgICAyNDYsIDIxMywgOCwgNCwgMjQ2LCAyMTEsIDgsIDQsIDI0NiwgMjEyLCA4LCA0LCAyNDYsIDE5OCwgOCwgNCwgMjQ2LCAxOTcsIAotICAgIDgsIDQsIDI0NiwgMjAxLCA4LCA0LCAyNDYsIDE5OSwgOCwgNCwgMjI0LCAyMDgsIDgsIDQsIDIyNCwgMjA3LCA4LCA0LCAKLSAgICAyMjQsIDIyOCwgOCwgNCwgMjI0LCAyMTcsIDgsIDQsIDIyNCwgMjIzLCA4LCA0LCAyMjQsIDIyMSwgOCwgNCwgMjI0LCAyMjUsIAotICAgIDgsIDQsIDIyNCwgMjI0LCA4LCA0LCAyMjUsIDQ5LCA4LCA0LCAyMjUsIDQ1LCA4LCA0LCAyMjUsIDY0LCA4LCA0LCAyMjUsIAotICAgIDU5LCA4LCA0LCAyMjQsIDE5NiwgOCwgNCwgMjI0LCAxOTIsIDgsIDQsIDIyNCwgMjA2LCA4LCA0LCAyMjQsIDE5NywgOCwgNCwgCi0gICAgMjI0LCAyMjksIDgsIDQsIDIyNSwgMzQsIDgsIDQsIDIyNCwgMTg1LCA4LCA0LCAyMjQsIDE4NCwgOCwgNCwgMjI0LCAxOTAsIAotICAgIDgsIDQsIDIyNCwgMTg4LCA4LCA0LCAyMjQsIDE4NiwgOCwgNCwgMjI0LCAxODcsIDgsIDQsIDIyNCwgMTc4LCA4LCA0LCAKLSAgICAyMjQsIDE3NywgOCwgNCwgMjI0LCAxODIsIDgsIDQsIDIyNCwgMTgxLCA4LCA0LCAyMjQsIDE3OSwgOCwgNCwgMjI0LCAxODAsIAotICAgIDgsIDQsIDI0OSwgMTkwLCA4LCA0LCAyNDksIDE3OCwgOCwgNCwgMjUwLCA0LCA4LCA0LCAyNDksIDIwNywgOCwgNCwgMjQ5LCAKLSAgICAyMzksIDgsIDQsIDI0OSwgMjQzLCA4LCA0LCAyNDksIDI0MiwgOCwgNCwgMjUwLCAxMjcsIDgsIDQsIDI1MCwgMTIyLCA4LCAKLSAgICA0LCAyNTAsIDE4OSwgOCwgNCwgMjUwLCAxNDYsIDgsIDQsIDI0OCwgOTEsIDgsIDQsIDI0OCwgOTIsIDgsIDQsIDI0OSwgCi0gICAgMTQwLCA4LCA0LCAyNDgsIDEyMywgOCwgNCwgMjQ5LCAxNjEsIDgsIDQsIDI0OSwgMTQyLCA4LCA0LCAyNTAsIDI3LCA4LCA0LCAKLSAgICAyNTAsIDc3LCA4LCA0LCAyNTAsIDM5LCA4LCA0LCAyNDgsIDg0LCA4LCA0LCAyNDgsIDgyLCA4LCA0LCAyNDgsIDEwNywgOCwgCi0gICAgNCwgMjQ4LCA5MCwgOCwgNCwgMjQ4LCA4NSwgOCwgNCwgMjQ4LCA4OCwgOCwgNCwgMjI2LCAxNDQsIDgsIDQsIDIyNiwgMTQwLCAKLSAgICA4LCA0LCAyMjYsIDE3NSwgOCwgNCwgMjI2LCAxNTAsIDgsIDQsIDIyNiwgMTY4LCA4LCA0LCAyMjYsIDE3MCwgOCwgNCwgCi0gICAgMjI2LCAxNjksIDgsIDQsIDIyNywgNjYsIDgsIDQsIDIyNywgNTMsIDgsIDQsIDIyNywgMTA3LCA4LCA0LCAyMjcsIDcwLCA4LCAKLSAgICA0LCAyMjUsIDI0MCwgOCwgNCwgMjI1LCAyMzksIDgsIDQsIDIyNSwgMjQyLCA4LCA0LCAyMjUsIDI0MSwgOCwgNCwgMjI2LCAKLSAgICA5OSwgOCwgNCwgMjI2LCA5NywgOCwgNCwgOTYsIDgsIDQsIDIyNiwgMTA1LCA4LCA0LCAyMjcsIDAsIDgsIDQsIDIyNywgNDQsIAotICAgIDgsIDQsIDIyNywgMTcsIDgsIDQsIDIyNSwgMjI4LCA4LCA0LCAyMjUsIDIyNSwgOCwgNCwgMjI1LCAyNTAsIDgsIDQsIDIyNSwgCi0gICAgMjM4LCA4LCA0LCAyMjUsIDIyOSwgOCwgNCwgMjI1LCAyMzYsIDgsIDQsIDI1MCwgOTQsIDgsIDQsIDI1MCwgOTMsIDgsIDQsIAotICAgIDI1MCwgOTksIDgsIDQsIDI1MCwgOTUsIDgsIDQsIDI1MCwgOTYsIDgsIDQsIDI1MCwgOTgsIDgsIDQsIDI1MCwgOTcsIDgsIAotICAgIDQsIDI1MCwgMTEwLCA4LCA0LCAyNTAsIDEwOSwgOCwgNCwgMjUwLCAxMTcsIDgsIDQsIDI1MCwgMTExLCA4LCA0LCAyNTAsIAotICAgIDg0LCA4LCA0LCAyNTAsIDg2LCA4LCA0LCAyNTAsIDg1LCA4LCA0LCAyNTAsIDg5LCA4LCA0LCAyNTAsIDg4LCA4LCA0LCAKLSAgICAyNTAsIDkyLCA4LCA0LCAyNTAsIDkwLCA4LCA0LCAyNTAsIDEwMiwgOCwgNCwgMjUwLCAxMDUsIDgsIDQsIDI1MCwgMTAzLCAKLSAgICA4LCA0LCAyNTAsIDgwLCA4LCA0LCAyNTAsIDc5LCA4LCA0LCAyNTAsIDg3LCA4LCA0LCAyNTAsIDgzLCA4LCA0LCAyNTAsIAotICAgIDgxLCA4LCA0LCAyNTAsIDgyLCA4LCA0LCAyMzUsIDE3NywgOCwgNCwgMjM1LCAxNzYsIDgsIDQsIDIzNSwgMTgxLCA4LCA0LCAKLSAgICAyMzUsIDE3OCwgOCwgNCwgMjM1LCAxNzksIDgsIDQsIDIzNSwgMTgwLCA4LCA0LCAyMzUsIDE4NywgOCwgNCwgMjM1LCAxODYsIAotICAgIDgsIDQsIDIzNSwgMTg5LCA4LCA0LCAyMzUsIDE4OCwgOCwgNCwgMjM1LCAxNzEsIDgsIDQsIDIzNSwgMTcwLCA4LCA0LCAKLSAgICAyMzUsIDE3NSwgOCwgNCwgMjM1LCAxNzIsIDgsIDQsIDIzNSwgMTgyLCA4LCA0LCAyMzUsIDE4NSwgOCwgNCwgMjM1LCAxODMsIAotICAgIDgsIDQsIDIzNSwgMTY1LCA4LCA0LCAyMzUsIDE2NCwgOCwgNCwgMjM1LCAxNjksIDgsIDQsIDIzNSwgMTY4LCA4LCA0LCAKLSAgICAyMzUsIDE2NiwgOCwgNCwgMjM1LCAxNjcsIDgsIDQsIDI0NCwgMjM2LCA4LCA0LCAyNDQsIDIzNSwgOCwgNCwgMjQ0LCAyNDIsIAotICAgIDgsIDQsIDI0NCwgMjM3LCA4LCA0LCAyNDQsIDIzOSwgOCwgNCwgMjQ0LCAyMzgsIDgsIDQsIDI0NCwgMjQxLCA4LCA0LCAKLSAgICAyNDQsIDI0MCwgOCwgNCwgMjQ0LCAyNDcsIDgsIDQsIDI0NCwgMjQ2LCA4LCA0LCAyNDQsIDI0OSwgOCwgNCwgMjQ0LCAyNDgsIAotICAgIDgsIDQsIDI0NCwgMjMwLCA4LCA0LCAyNDQsIDIzMSwgOCwgNCwgMjQ0LCAyMzMsIDgsIDQsIDI0NCwgMjMyLCA4LCA0LCAKLSAgICAyNDQsIDIzNCwgOCwgNCwgMjQ0LCAyNDMsIDgsIDQsIDI0NCwgMjQ1LCA4LCA0LCAyNDQsIDI0NCwgOCwgNCwgMjQ0LCAyMjksIAotICAgIDgsIDQsIDIzNSwgNTIsIDgsIDQsIDIzNSwgNTEsIDgsIDQsIDIzNSwgODksIDgsIDQsIDIzNSwgNTUsIDgsIDQsIDIzNSwgCi0gICAgNzMsIDgsIDQsIDIzNSwgODUsIDgsIDQsIDIzNSwgODQsIDgsIDQsIDIzNSwgMjIwLCA4LCA0LCAyMzYsIDEsIDgsIDQsIAotICAgIDIzNSwgMjMxLCA4LCA0LCAyMzQsIDE4NywgOCwgNCwgMjM0LCAxODksIDgsIDQsIDIzNCwgMTg4LCA4LCA0LCAyMzQsIDI0MiwgCi0gICAgOCwgNCwgMjM0LCAyMzEsIDgsIDQsIDIzNSwgNiwgOCwgNCwgMjM0LCAyNDksIDgsIDQsIDIzNSwgMTQzLCA4LCA0LCAyMzUsIAotICAgIDE2MiwgOCwgNCwgMjM1LCAxNTEsIDgsIDQsIDIzNCwgMTgzLCA4LCA0LCAyMzQsIDE4MCwgOCwgNCwgMjM0LCAyMDYsIDgsIAotICAgIDQsIDIzNCwgMTg2LCA4LCA0LCAyMzQsIDE4NCwgOCwgNCwgMjM0LCAxODUsIDgsIDQsIDI0NSwgNDIsIDgsIDQsIDI0NSwgCi0gICAgNDEsIDgsIDQsIDI0NSwgNDcsIDgsIDQsIDI0NSwgNDMsIDgsIDQsIDI0NSwgNDQsIDgsIDQsIDI0NSwgNDYsIDgsIDQsIAotICAgIDI0NSwgNDUsIDgsIDQsIDI0NSwgNTIsIDgsIDQsIDI0NSwgNTEsIDgsIDQsIDI0NSwgNTQsIDgsIDQsIDI0NSwgNTMsIDgsIAotICAgIDQsIDI0NSwgMzQsIDgsIDQsIDI0NSwgMzYsIDgsIDQsIDI0NSwgMzUsIDgsIDQsIDI0NSwgMzgsIDgsIDQsIDI0NSwgNDAsIAotICAgIDgsIDQsIDI0NSwgMzksIDgsIDQsIDI0NSwgNDgsIDgsIDQsIDI0NSwgNTAsIDgsIDQsIDI0NSwgNDksIDgsIDQsIDI0NSwgCi0gICAgMzAsIDgsIDQsIDI0NSwgMjksIDgsIDQsIDI0NSwgMzcsIDgsIDQsIDI0NSwgMzMsIDgsIDQsIDI0NSwgMzEsIDgsIDQsIAotICAgIDI0NSwgMzIsIDgsIDQsIDI0NSwgMjQsIDgsIDQsIDI0NSwgMjMsIDgsIDQsIDI0NSwgMjgsIDgsIDQsIDI0NSwgMjcsIDgsIAotICAgIDQsIDI0NSwgMjUsIDgsIDQsIDI0NSwgMjYsIDgsIDQsIDIzNywgMTU3LCA4LCA0LCAyMzcsIDE1MywgOCwgNCwgMjM3LCAKLSAgICAxOTMsIDgsIDQsIDIzNywgMTYxLCA4LCA0LCAyMzcsIDE4NywgOCwgNCwgMjM3LCAxODYsIDgsIDQsIDIzNywgMTg5LCA4LCAKLSAgICA0LCAyMzcsIDE4OCwgOCwgNCwgMjM4LCA0LCA4LCA0LCAyMzcsIDI1MiwgOCwgNCwgMjM4LCA0MywgOCwgNCwgMjM4LCAxMCwgCi0gICAgOCwgNCwgMjM3LCA5NiwgOCwgNCwgMjM3LCA5NSwgOCwgNCwgMjM3LCA5OCwgOCwgNCwgMjM3LCA5NywgOCwgNCwgMjM3LCAKLSAgICAxMjAsIDgsIDQsIDIzNywgMTE1LCA4LCA0LCAyMzcsIDE0MywgOCwgNCwgMjM3LCAxMjIsIDgsIDQsIDIzNywgMjA4LCA4LCAKLSAgICA0LCAyMzcsIDI0MywgOCwgNCwgMjM3LCAyMTUsIDgsIDQsIDIzNywgOTEsIDgsIDQsIDIzNywgOTAsIDgsIDQsIDIzNywgCi0gICAgMTEwLCA4LCA0LCAyMzcsIDk0LCA4LCA0LCAyMzcsIDkyLCA4LCA0LCAyMzcsIDkzLCA4LCA0LCAyMzcsIDczLCA4LCA0LCAKLSAgICAyMzcsIDcyLCA4LCA0LCAyMzcsIDgwLCA4LCA0LCAyMzcsIDc2LCA4LCA0LCAyMzcsIDc0LCA4LCA0LCAyMzcsIDc1LCA4LCAKLSAgICA0LCAyNDYsIDIzLCA4LCA0LCAyNDYsIDIyLCA4LCA0LCAyNDYsIDQ2LCA4LCA0LCAyNDYsIDMyLCA4LCA0LCAyNDYsIDM5LCAKLSAgICA4LCA0LCAyNDYsIDM4LCA4LCA0LCAyNDYsIDQxLCA4LCA0LCAyNDYsIDQwLCA4LCA0LCAyNDYsIDE1NCwgOCwgNCwgMjQ2LCAKLSAgICAxNDksIDgsIDQsIDI0NiwgMTkzLCA4LCA0LCAyNDYsIDE2MywgOCwgNCwgMjQ1LCAyMDEsIDgsIDQsIDI0NSwgMjAwLCA4LCAKLSAgICA0LCAyNDUsIDIwMywgOCwgNCwgMjQ1LCAyMDIsIDgsIDQsIDI0NSwgMjUxLCA4LCA0LCAyNDUsIDI0OSwgOCwgNCwgMjQ2LCAKLSAgICAxMSwgOCwgNCwgMjQ2LCAzLCA4LCA0LCAyNDYsIDEwNSwgOCwgNCwgMjQ2LCAxMDMsIDgsIDQsIDI0NiwgMTMxLCA4LCA0LCAKLSAgICAyNDYsIDExNSwgOCwgNCwgMjQ1LCAxOTEsIDgsIDQsIDI0NSwgMTkwLCA4LCA0LCAyNDUsIDIxOCwgOCwgNCwgMjQ1LCAxOTksIAotICAgIDgsIDQsIDI0NSwgMTkyLCA4LCA0LCAyNDUsIDE5OCwgOCwgNCwgMjM4LCAxNzYsIDgsIDQsIDIzOCwgMTc1LCA4LCA0LCAKLSAgICAyMzgsIDE5OSwgOCwgNCwgMjM4LCAxODYsIDgsIDQsIDIzOCwgMTkzLCA4LCA0LCAyMzgsIDE5NSwgOCwgNCwgMjM4LCAxOTQsIAotICAgIDgsIDQsIDIzOSwgMjAsIDgsIDQsIDIzOSwgMTEsIDgsIDQsIDE3NywgOCwgNCwgMjM5LCA0MSwgOCwgNCwgMjM4LCA5NCwgOCwgCi0gICAgNCwgMjM4LCA5NiwgOCwgNCwgMjM4LCA5NSwgOCwgNCwgMjM4LCAxMzAsIDgsIDQsIDIzOCwgMTI3LCA4LCA0LCAyMzgsIAotICAgIDE1MCwgOCwgNCwgMjM4LCAxMzYsIDgsIDQsIDIzOCwgMjM2LCA4LCA0LCAyMzgsIDIzNCwgOCwgNCwgMjM5LCAzLCA4LCA0LCAKLSAgICAyMzgsIDIzOCwgOCwgNCwgMjM4LCA4NCwgOCwgNCwgMjM4LCA4MiwgOCwgNCwgMjM4LCAxMDcsIDgsIDQsIDIzOCwgOTMsIDgsIAotICAgIDQsIDIzOCwgODcsIDgsIDQsIDIzOCwgOTEsIDgsIDQsIDI0NiwgODcsIDgsIDQsIDI0NiwgODYsIDgsIDQsIDI0NiwgOTEsIAotICAgIDgsIDQsIDI0NiwgODgsIDgsIDQsIDI0NiwgOTAsIDgsIDQsIDI0NiwgODksIDgsIDQsIDI0NiwgOTgsIDgsIDQsIDI0NiwgCi0gICAgOTcsIDgsIDQsIDI0NiwgMTAxLCA4LCA0LCAyNDYsIDk5LCA4LCA0LCAyNDYsIDc4LCA4LCA0LCAyNDYsIDc3LCA4LCA0LCAKLSAgICAyNDYsIDgwLCA4LCA0LCAyNDYsIDc5LCA4LCA0LCAyNDYsIDgzLCA4LCA0LCAyNDYsIDgyLCA4LCA0LCAyNDYsIDg1LCA4LCAKLSAgICA0LCAyNDYsIDg0LCA4LCA0LCAyNDYsIDkzLCA4LCA0LCAyNDYsIDkyLCA4LCA0LCAyNDYsIDk2LCA4LCA0LCAyNDYsIDk0LCAKLSAgICA4LCA0LCAyNDYsIDczLCA4LCA0LCAyNDYsIDcyLCA4LCA0LCAyNDYsIDgxLCA4LCA0LCAyNDYsIDc2LCA4LCA0LCAyNDYsIAotICAgIDc0LCA4LCA0LCAyNDYsIDc1LCA4LCA0LCAyMzYsIDE3NSwgOCwgNCwgMjM2LCAxNzYsIDgsIDQsIDIzNiwgMTg4LCA4LCA0LCAKLSAgICAyMzYsIDE4NywgOCwgNCwgMjM2LCAxOTAsIDgsIDQsIDIzNiwgMTg5LCA4LCA0LCAyMzYsIDE2NiwgOCwgNCwgMjM2LCAxNjgsIAotICAgIDgsIDQsIDIzNiwgMTY3LCA4LCA0LCAyMzYsIDE3MSwgOCwgNCwgMjM2LCAxNzAsIDgsIDQsIDIzNiwgMTczLCA4LCA0LCAKLSAgICAyMzYsIDE3MiwgOCwgNCwgMjM2LCAxNzcsIDgsIDQsIDIzNiwgMTc5LCA4LCA0LCAyMzYsIDE3OCwgOCwgNCwgMjM2LCAxNjIsIAotICAgIDgsIDQsIDIzNiwgMTYxLCA4LCA0LCAyMzYsIDE2OSwgOCwgNCwgMjM2LCAxNjUsIDgsIDQsIDIzNiwgMTYzLCA4LCA0LCAKLSAgICAyMzYsIDE2NCwgOCwgNCwgMjQ0LCAxMDcsIDgsIDQsIDI0NCwgMTA2LCA4LCA0LCAyNDQsIDExMywgOCwgNCwgMjQ0LCAxMDgsIAotICAgIDgsIDQsIDI0NCwgMTEwLCA4LCA0LCAyNDQsIDEwOSwgOCwgNCwgMjQ0LCAxMTIsIDgsIDQsIDI0NCwgMTExLCA4LCA0LCAKLSAgICAyNDQsIDExOCwgOCwgNCwgMjQ0LCAxMTcsIDgsIDQsIDI0NCwgMTIwLCA4LCA0LCAyNDQsIDExOSwgOCwgNCwgMjQ0LCA5OSwgCi0gICAgOCwgNCwgMjQ0LCA5OCwgOCwgNCwgMjQ0LCAxMDEsIDgsIDQsIDI0NCwgMTAwLCA4LCA0LCAyNDQsIDEwMywgOCwgNCwgMjQ0LCAKLSAgICAxMDIsIDgsIDQsIDI0NCwgMTA1LCA4LCA0LCAyNDQsIDEwNCwgOCwgNCwgMjQ0LCAxMTQsIDgsIDQsIDI0NCwgMTE2LCA4LCAKLSAgICA0LCAyNDQsIDExNSwgOCwgNCwgMjM1LCAxMTEsIDgsIDQsIDIzNSwgMTEzLCA4LCA0LCAyMzUsIDExMiwgOCwgNCwgMjM1LCAKLSAgICAxMzAsIDgsIDQsIDIzNSwgMTI5LCA4LCA0LCAyMzUsIDEzNywgOCwgNCwgMjM1LCAxMzIsIDgsIDQsIDIzNSwgOTYsIDgsIDQsIAotICAgIDIzNSwgOTUsIDgsIDQsIDIzNSwgOTcsIDgsIDQsIDIzNSwgMTAxLCA4LCA0LCAyMzUsIDEwMCwgOCwgNCwgMjM1LCAxMDcsIAotICAgIDgsIDQsIDIzNSwgMTAyLCA4LCA0LCAyMzUsIDEyNCwgOCwgNCwgMjM1LCAxMjgsIDgsIDQsIDIzNSwgMTI1LCA4LCA0LCAKLSAgICAyNDUsIDU3LCA4LCA0LCAyNDUsIDY0LCA4LCA0LCAyNDUsIDcxLCA4LCA0LCAyNDUsIDEzMiwgOCwgNCwgMjQ1LCAxMjYsIDgsIAotICAgIDQsIDE1NCwgOCwgNCwgMjQ1LCAxNDIsIDgsIDQsIDI0NCwgMTMxLCA4LCA0LCAyNDQsIDEzMCwgOCwgNCwgMjQ0LCAxMzMsIAotICAgIDgsIDQsIDI0NCwgMTMyLCA4LCA0LCAyNDQsIDE1NywgOCwgNCwgMjQ0LCAxNTIsIDgsIDQsIDI0NCwgMjI3LCA4LCA0LCAKLSAgICAyNDQsIDIxNCwgOCwgNCwgMjQ1LCA4NywgOCwgNCwgMjQ1LCAxMjEsIDgsIDQsIDI0NSwgOTcsIDgsIDQsIDIyNCwgMTU0LCAKLSAgICA4LCA0LCAyMjQsIDE0MywgOCwgNCwgMjI0LCAxNzMsIDgsIDQsIDIyNCwgMTYyLCA4LCA0LCAyMjQsIDc4LCA4LCA0LCAyMjQsIAotICAgIDgwLCA4LCA0LCAyMjQsIDc5LCA4LCA0LCAyMjQsIDg4LCA4LCA0LCAyMjQsIDEwNSwgOCwgNCwgMjI0LCA5MywgOCwgNCwgCi0gICAgMjI0LCAxMjgsIDgsIDQsIDIyNCwgMTQxLCA4LCA0LCAyMjQsIDEzMiwgOCwgNCwgMjIzLCAzNCwgOCwgNCwgMjIzLCAzMywgCi0gICAgOCwgNCwgMjIzLCA0NywgOCwgNCwgMjIzLCAzNSwgOCwgNCwgMjIzLCA0MCwgOCwgNCwgMjIzLCA0MiwgOCwgNCwgMjIzLCAKLSAgICA0MSwgOCwgNCwgMjIzLCAxMDQsIDgsIDQsIDIyMywgMTAxLCA4LCA0LCAyMjMsIDExNywgOCwgNCwgMjIzLCAxMDcsIDgsIDQsIAotICAgIDIyMywgMTIsIDgsIDQsIDIyMywgMTQsIDgsIDQsIDIyMywgMTMsIDgsIDQsIDIyMywgMjMsIDgsIDQsIDIyMywgMjIsIDgsIAotICAgIDQsIDIyMywgMjcsIDgsIDQsIDIyMywgMjQsIDgsIDQsIDIyMywgODcsIDgsIDQsIDIyMywgOTcsIDgsIDQsIDIyMywgOTEsIAotICAgIDgsIDQsIDIyMywgOCwgOCwgNCwgMjIzLCA3LCA4LCA0LCAyMjMsIDE5LCA4LCA0LCAyMjMsIDExLCA4LCA0LCAyMjMsIDksIAotICAgIDgsIDQsIDIyMywgMTAsIDgsIDQsIDIyMiwgMjU1LCA4LCA0LCAyMjIsIDI1NCwgOCwgNCwgMjIzLCA0LCA4LCA0LCAyMjMsIAotICAgIDIsIDgsIDQsIDIyMywgMCwgOCwgNCwgMjIzLCAxLCA4LCA0LCAyNTEsIDEwMCwgOCwgNCwgMjUxLCA5NywgOCwgNCwgMjUxLCAKLSAgICAxMTgsIDgsIDQsIDI1MSwgMTA4LCA4LCA0LCAyNTEsIDExNSwgOCwgNCwgMjUxLCAxMTEsIDgsIDQsIDI1MSwgMTE3LCA4LCAKLSAgICA0LCAyNTEsIDExNiwgOCwgNCwgMjUyLCAwLCA4LCA0LCAyNTEsIDI1MCwgOCwgNCwgMjUyLCAzOSwgOCwgNCwgMjUyLCAxNiwgCi0gICAgOCwgNCwgMjUwLCAyMjcsIDgsIDQsIDI1MCwgMjI5LCA4LCA0LCAyNTAsIDIyOCwgOCwgNCwgMjUxLCAzLCA4LCA0LCAyNTAsIAotICAgIDI1MiwgOCwgNCwgMjUxLCA2OCwgOCwgNCwgMjUxLCAxNiwgOCwgNCwgMjUxLCAyMDYsIDgsIDQsIDI1MSwgMjMxLCA4LCA0LCAKLSAgICAyNTEsIDIwOSwgOCwgNCwgMjUwLCAyMTIsIDgsIDQsIDI1MCwgMjExLCA4LCA0LCAyNTAsIDIzNSwgOCwgNCwgMjUwLCAyMjYsIAotICAgIDgsIDQsIDI1MCwgMjE1LCA4LCA0LCAyNTAsIDIyNSwgOCwgNCwgMjUwLCAxOTQsIDgsIDQsIDI1MCwgMTkzLCA4LCA0LCAKLSAgICAyNTAsIDIwMiwgOCwgNCwgMjUwLCAxOTksIDgsIDQsIDI1MCwgMTk1LCA4LCA0LCAyNTAsIDE5NywgOCwgNCwgMjIyLCAyMzgsIAotICAgIDgsIDQsIDIyMiwgMjM3LCA4LCA0LCAyMjIsIDI0NCwgOCwgNCwgMjIyLCAyMzksIDgsIDQsIDIyMiwgMjQxLCA4LCA0LCAKLSAgICAyMjIsIDI0MCwgOCwgNCwgMjIyLCAyNDMsIDgsIDQsIDIyMiwgMjQyLCA4LCA0LCAyMjIsIDI1MCwgOCwgNCwgMjIyLCAyNDksIAotICAgIDgsIDQsIDIyMiwgMjUzLCA4LCA0LCAyMjIsIDI1MSwgOCwgNCwgMjIyLCAyMzQsIDgsIDQsIDIyMiwgMjM2LCA4LCA0LCAKLSAgICAyMjIsIDIzNSwgOCwgNCwgMjIyLCAyNDUsIDgsIDQsIDIyMiwgMjQ4LCA4LCA0LCAyMjIsIDI0NiwgOCwgNCwgMjIyLCAyMjksIAotICAgIDgsIDQsIDIyMiwgMjMzLCA4LCA0LCAyMjIsIDIzMiwgOCwgNCwgMjIyLCAyMzAsIDgsIDQsIDIyMiwgMjMxLCA4LCA0LCAKLSAgICAyMjIsIDIyNCwgOCwgNCwgMjIyLCAyMjMsIDgsIDQsIDIyMiwgMjI4LCA4LCA0LCAyMjIsIDIyNywgOCwgNCwgMjIyLCAyMjUsIAotICAgIDgsIDQsIDIyMiwgMjI2LCA4LCA0LCAyMzQsIDEyNywgOCwgNCwgMjM0LCAxMjYsIDgsIDQsIDIzNCwgMTMyLCA4LCA0LCAKLSAgICAyMzQsIDEyOCwgOCwgNCwgMjM0LCAxMjksIDgsIDQsIDIzNCwgMTMxLCA4LCA0LCAyMzQsIDEzMCwgOCwgNCwgMjM0LCAxMzYsIAotICAgIDgsIDQsIDIzNCwgMTM1LCA4LCA0LCAyMzQsIDEzOCwgOCwgNCwgMjM0LCAxMzcsIDgsIDQsIDIzNCwgMTIxLCA4LCA0LCAKLSAgICAyMzQsIDEyMiwgOCwgNCwgMjM0LCAxMjQsIDgsIDQsIDIzNCwgMTI1LCA4LCA0LCAyMzQsIDEzMywgOCwgNCwgMjM0LCAxMzQsIAotICAgIDgsIDQsIDIzNCwgMTE3LCA4LCA0LCAyMzQsIDEyMywgOCwgNCwgMjM0LCAxMjAsIDgsIDQsIDIzNCwgMTE4LCA4LCA0LCAKLSAgICAyMzQsIDExOSwgOCwgNCwgMjM0LCAxMTIsIDgsIDQsIDIzNCwgMTExLCA4LCA0LCAyMzQsIDExNiwgOCwgNCwgMjM0LCAxMTUsIAotICAgIDgsIDQsIDIzNCwgMTEzLCA4LCA0LCAyMzQsIDExNCwgOCwgNCwgMjI4LCAyMTgsIDgsIDQsIDE4MywgOCwgNCwgMjI5LCAxNSwgCi0gICAgOCwgNCwgMjI4LCAyMjAsIDgsIDQsIDIyOSwgOCwgOCwgNCwgMjI5LCAxMCwgOCwgNCwgMjI5LCA5LCA4LCA0LCAyMzAsIAotICAgIDI0MCwgOCwgNCwgMjMwLCAyMzYsIDgsIDQsIDIzMSwgMzEsIDgsIDQsIDIzMCwgMjQ2LCA4LCA0LCAyMjcsIDIyMywgOCwgNCwgCi0gICAgMjI3LCAyMjUsIDgsIDQsIDIyNywgMjI0LCA4LCA0LCAyMjgsIDE1NywgOCwgNCwgMjI4LCAxNDgsIDgsIDQsIDIyOCwgMTY5LCAKLSAgICA4LCA0LCAyMjgsIDE1OCwgOCwgNCwgMjI5LCAxNTcsIDgsIDQsIDIzMCwgMjEzLCA4LCA0LCAyMjksIDE3NSwgOCwgNCwgCi0gICAgMjI3LCAyMDQsIDgsIDQsIDIyNywgMjAzLCA4LCA0LCAyMjgsIDYsIDgsIDQsIDIyNywgMjIyLCA4LCA0LCAyMjcsIDIwNiwgCi0gICAgOCwgNCwgMjI3LCAyMTMsIDgsIDQsIDIyNywgMTIzLCA4LCA0LCAyMjcsIDEyMiwgOCwgNCwgMjI3LCAxODUsIDgsIDQsIAotICAgIDIyNywgMTI4LCA4LCA0LCAyMjcsIDEyNCwgOCwgNCwgMjI3LCAxMjcsIDgsIDQsIDIyOCwgODYsIDgsIDQsIDIyOCwgODUsIAotICAgIDgsIDQsIDIyOCwgOTEsIDgsIDQsIDIyOCwgODcsIDgsIDQsIDIyOCwgODgsIDgsIDQsIDIyOCwgOTAsIDgsIDQsIDIyOCwgCi0gICAgODksIDgsIDQsIDIyOCwgOTcsIDgsIDQsIDIyOCwgOTYsIDgsIDQsIDIyOCwgMTEwLCA4LCA0LCAyMjgsIDk4LCA4LCA0LCAKLSAgICAyMjgsIDgyLCA4LCA0LCAyMjgsIDgxLCA4LCA0LCAyMjgsIDg0LCA4LCA0LCAyMjgsIDgzLCA4LCA0LCAyMjgsIDkyLCA4LCAKLSAgICA0LCAyMjgsIDk1LCA4LCA0LCAyMjgsIDkzLCA4LCA0LCAyMjgsIDc4LCA4LCA0LCAyMjgsIDc3LCA4LCA0LCAyMjgsIDgwLCAKLSAgICA4LCA0LCAyMjgsIDc5LCA4LCA0LCAyMjgsIDcyLCA4LCA0LCAyMjgsIDcxLCA4LCA0LCAyMjgsIDc2LCA4LCA0LCAyMjgsIAotICAgIDc1LCA4LCA0LCAyMjgsIDczLCA4LCA0LCAyMjgsIDc0LCA4LCA0LCAyMjMsIDgwLCA4LCA0LCAyMjMsIDc5LCA4LCA0LCAKLSAgICAyMjMsIDg1LCA4LCA0LCAyMjMsIDgyLCA4LCA0LCAyMjMsIDYyLCA4LCA0LCAyMjMsIDY0LCA4LCA0LCAyMjMsIDYzLCA4LCAKLSAgICA0LCAyMjMsIDY3LCA4LCA0LCAyMjMsIDY2LCA4LCA0LCAyMjMsIDcwLCA4LCA0LCAyMjMsIDY4LCA4LCA0LCAyMjMsIDc0LCAKLSAgICA4LCA0LCAyMjMsIDczLCA4LCA0LCAyMjMsIDc3LCA4LCA0LCAyMjMsIDc1LCA4LCA0LCAyMjMsIDU4LCA4LCA0LCAyMjMsIAotICAgIDU3LCA4LCA0LCAyMjMsIDY1LCA4LCA0LCAyMjMsIDYxLCA4LCA0LCAyMjMsIDU5LCA4LCA0LCAyMjMsIDYwLCA4LCA0LCAKLSAgICAyMjMsIDUwLCA4LCA0LCAyMjMsIDQ5LCA4LCA0LCAyMjMsIDU0LCA4LCA0LCAyMjMsIDUzLCA4LCA0LCAyMjMsIDUxLCA4LCAKLSAgICA0LCAyMjMsIDUyLCA4LCA0LCAyNTEsIDE4NywgOCwgNCwgMjUxLCAxODQsIDgsIDQsIDI1MSwgMjA0LCA4LCA0LCAyNTEsIAotICAgIDE5MywgOCwgNCwgMjUxLCAxMzIsIDgsIDQsIDI1MSwgMTMxLCA4LCA0LCAyNTEsIDEzNCwgOCwgNCwgMjUxLCAxMzMsIDgsIAotICAgIDQsIDI1MSwgMTQ0LCA4LCA0LCAyNTEsIDE0MywgOCwgNCwgMjUxLCAxNTAsIDgsIDQsIDI1MSwgMTQ2LCA4LCA0LCAyNTEsIAotICAgIDE3NCwgOCwgNCwgMjUxLCAxNzIsIDgsIDQsIDI1MSwgMTgyLCA4LCA0LCAyNTEsIDE3NiwgOCwgNCwgMjUxLCAxMjYsIDgsIAotICAgIDQsIDI1MSwgMTM2LCA4LCA0LCAyNTEsIDEzMCwgOCwgNCwgMjUxLCAxMjcsIDgsIDQsIDI1MSwgMTI5LCA4LCA0LCAyNTEsIAotICAgIDEyMCwgOCwgNCwgMjUxLCAxMTksIDgsIDQsIDI1MSwgMTI0LCA4LCA0LCAyNTEsIDEyMywgOCwgNCwgMjUxLCAxMjEsIDgsIAotICAgIDQsIDI1MSwgMTIyLCA4LCA0LCAyMzEsIDk4LCA4LCA0LCAyMzEsIDk5LCA4LCA0LCAyMzEsIDg1LCA4LCA0LCAyMzEsIDg2LCAKLSAgICA4LCA0LCAyMzEsIDg5LCA4LCA0LCAyMzEsIDg4LCA4LCA0LCAyMzEsIDkxLCA4LCA0LCAyMzEsIDkwLCA4LCA0LCAyMzEsIAotICAgIDkzLCA4LCA0LCAyMzEsIDkyLCA4LCA0LCAyMzEsIDk3LCA4LCA0LCAyMzEsIDk0LCA4LCA0LCAyMzEsIDgxLCA4LCA0LCAKLSAgICAyMzEsIDgwLCA4LCA0LCAyMzEsIDg3LCA4LCA0LCAyMzEsIDg0LCA4LCA0LCAyMzEsIDgyLCA4LCA0LCAyMzEsIDgzLCA4LCAKLSAgICA0LCAyMzEsIDc1LCA4LCA0LCAyMzEsIDc0LCA4LCA0LCAyMzEsIDc5LCA4LCA0LCAyMzEsIDc4LCA4LCA0LCAyMzEsIDc2LCAKLSAgICA4LCA0LCAyMzEsIDc3LCA4LCA0LCAyMzQsIDIyOCwgOCwgNCwgMjM0LCAyMjcsIDgsIDQsIDIzNCwgMjMwLCA4LCA0LCAyMzQsIAotICAgIDIyOSwgOCwgNCwgMjM0LCAyMjAsIDgsIDQsIDIzNCwgMjIyLCA4LCA0LCAyMzQsIDIyMSwgOCwgNCwgMjM0LCAyMjQsIDgsIAotICAgIDQsIDIzNCwgMjIzLCA4LCA0LCAyMzQsIDIyNiwgOCwgNCwgMjM0LCAyMjUsIDgsIDQsIDIzNCwgMjE1LCA4LCA0LCAyMzQsIAotICAgIDIxNCwgOCwgNCwgMjM0LCAyMTksIDgsIDQsIDIzNCwgMjE4LCA4LCA0LCAyMzQsIDIxNiwgOCwgNCwgMjM0LCAyMTcsIDgsIAotICAgIDQsIDIzNCwgMjA5LCA4LCA0LCAyMzQsIDIwOCwgOCwgNCwgMjM0LCAyMTMsIDgsIDQsIDIzNCwgMjEyLCA4LCA0LCAyMzQsIAotICAgIDIxMCwgOCwgNCwgMjM0LCAyMTEsIDgsIDQsIDIyOSwgMTIwLCA4LCA0LCAyMjksIDExNywgOCwgNCwgMjI5LCAxNDYsIDgsIAotICAgIDQsIDIyOSwgMTI5LCA4LCA0LCAyMjksIDM2LCA4LCA0LCAyMjksIDM4LCA4LCA0LCAyMjksIDM3LCA4LCA0LCAyMjksIDQ5LCAKLSAgICA4LCA0LCAyMjksIDQ3LCA4LCA0LCAyMjksIDcxLCA4LCA0LCAyMjksIDY0LCA4LCA0LCAyMjksIDk0LCA4LCA0LCAyMjksIAotICAgIDkyLCA4LCA0LCAyMjksIDExNCwgOCwgNCwgMjI5LCAxMDEsIDgsIDQsIDIyOSwgMzIsIDgsIDQsIDIyOSwgMzEsIDgsIDQsIAotICAgIDIyOSwgNDMsIDgsIDQsIDIyOSwgMzUsIDgsIDQsIDIyOSwgMzMsIDgsIDQsIDIyOSwgMzQsIDgsIDQsIDIyOSwgMTgsIDgsIAotICAgIDQsIDIyOSwgMTcsIDgsIDQsIDIyOSwgMjMsIDgsIDQsIDIyOSwgMjEsIDgsIDQsIDIyOSwgMTksIDgsIDQsIDIyOSwgMjAsIAotICAgIDgsIDQsIDIzMSwgMjUzLCA4LCA0LCAyMzEsIDI1MSwgOCwgNCwgMjA4LCA4LCA0LCAyMzIsIDEsIDgsIDQsIDIzMSwgNTYsIAotICAgIDgsIDQsIDIzMSwgNTgsIDgsIDQsIDIzMSwgNTcsIDgsIDQsIDIzMSwgMTA3LCA4LCA0LCAyMzEsIDEwMSwgOCwgNCwgMjMxLCAKLSAgICAxMjIsIDgsIDQsIDIzMSwgMTEwLCA4LCA0LCAyMzEsIDE4OCwgOCwgNCwgMjMxLCAyNDQsIDgsIDQsIDIzMSwgMjE1LCA4LCAKLSAgICA0LCAyMzEsIDQ5LCA4LCA0LCAyMzEsIDQ3LCA4LCA0LCAyMzEsIDcwLCA4LCA0LCAyMzEsIDU1LCA4LCA0LCAyMzEsIDUxLCAKLSAgICA4LCA0LCAyMzEsIDUyLCA4LCA0LCAyMzEsIDM4LCA4LCA0LCAyMzEsIDM3LCA4LCA0LCAyMzEsIDQzLCA4LCA0LCAyMzEsIAotICAgIDQxLCA4LCA0LCAyMzEsIDM5LCA4LCA0LCAyMzEsIDQwLCA4LCA0LCAyMzksIDE0NywgOCwgNCwgMjM5LCAxNDYsIDgsIDQsIAotICAgIDIzOSwgMTU2LCA4LCA0LCAyMzksIDE0OCwgOCwgNCwgMjM5LCAxNTIsIDgsIDQsIDIzOSwgMTUxLCA4LCA0LCAyMzksIDE1NCwgCi0gICAgOCwgNCwgMjM5LCAxNTMsIDgsIDQsIDIzOSwgOTIsIDgsIDQsIDIzOSwgOTEsIDgsIDQsIDIzOSwgOTQsIDgsIDQsIDIzOSwgCi0gICAgOTMsIDgsIDQsIDIzOSwgMTA1LCA4LCA0LCAyMzksIDEwNCwgOCwgNCwgMjM5LCAxMTcsIDgsIDQsIDIzOSwgMTA3LCA4LCA0LCAKLSAgICAyMzksIDg2LCA4LCA0LCAyMzksIDg1LCA4LCA0LCAyMzksIDEwMSwgOCwgNCwgMjM5LCA5MCwgOCwgNCwgMjM5LCA4NywgOCwgCi0gICAgNCwgMjM5LCA4OCwgOCwgNCwgMjM5LCA3OSwgOCwgNCwgMjM5LCA3OCwgOCwgNCwgMjM5LCA4MywgOCwgNCwgMjM5LCA4MiwgCi0gICAgOCwgNCwgMjM5LCA4MCwgOCwgNCwgMjM5LCA4MSwgOCwgNCwgMjMyLCA5NywgOCwgNCwgMjMyLCA5NiwgOCwgNCwgMjMyLCAKLSAgICAxMDQsIDgsIDQsIDIzMiwgOTgsIDgsIDQsIDIzMiwgMTAxLCA4LCA0LCAyMzIsIDEwMCwgOCwgNCwgMjMyLCAxMDMsIDgsIDQsIAotICAgIDIzMiwgMTAyLCA4LCA0LCAyMzIsIDU4LCA4LCA0LCAyMzIsIDU1LCA4LCA0LCAyMzIsIDYwLCA4LCA0LCAyMzIsIDU5LCA4LCAKLSAgICA0LCAyMzIsIDg3LCA4LCA0LCAyMzIsIDg2LCA4LCA0LCAyMzIsIDk1LCA4LCA0LCAyMzIsIDg5LCA4LCA0LCAyMzIsIDUwLCAKLSAgICA4LCA0LCAyMzIsIDQ2LCA4LCA0LCAyMzIsIDg0LCA4LCA0LCAyMzIsIDU0LCA4LCA0LCAyMzIsIDUyLCA4LCA0LCAyMzIsIAotICAgIDUzLCA4LCA0LCAyMzIsIDMwLCA4LCA0LCAyMzIsIDI4LCA4LCA0LCAyMzIsIDQwLCA4LCA0LCAyMzIsIDMzLCA4LCA0LCAKLSAgICAyMzIsIDMxLCA4LCA0LCAyMzIsIDMyLCA4LCA0LCAyMzksIDEzNiwgOCwgNCwgMjM5LCAxMzUsIDgsIDQsIDIzOSwgMTQyLCAKLSAgICA4LCA0LCAyMzksIDEzNywgOCwgNCwgMjM5LCAxMzksIDgsIDQsIDIzOSwgMTM4LCA4LCA0LCAyMzksIDE0MSwgOCwgNCwgCi0gICAgMjM5LCAxNDAsIDgsIDQsIDIzOSwgMTI3LCA4LCA0LCAyMzksIDEyOSwgOCwgNCwgMjM5LCAxMjgsIDgsIDQsIDIzOSwgMTMyLCAKLSAgICA4LCA0LCAyMzksIDEzMSwgOCwgNCwgMjM5LCAxMzQsIDgsIDQsIDIzOSwgMTMzLCA4LCA0LCAyMzksIDEyMywgOCwgNCwgCi0gICAgMjM5LCAxMjIsIDgsIDQsIDIzOSwgMTMwLCA4LCA0LCAyMzksIDEyNiwgOCwgNCwgMjM5LCAxMjQsIDgsIDQsIDIzOSwgMTI1LCAKLSAgICA4LCA0LCAyMzksIDExOSwgOCwgNCwgMjM5LCAxMTgsIDgsIDQsIDIzOSwgMTIxLCA4LCA0LCAyMzksIDEyMCwgOCwgNCwgCi0gICAgMjM1LCA0MCwgOCwgNCwgMjM1LCAzOSwgOCwgNCwgMjM1LCA0NiwgOCwgNCwgMjM1LCA0MSwgOCwgNCwgMjM1LCA0MywgOCwgCi0gICAgNCwgMjM1LCA0MiwgOCwgNCwgMjM1LCA0NSwgOCwgNCwgMjM1LCA0NCwgOCwgNCwgMjM1LCAzMSwgOCwgNCwgMjM1LCAzMiwgCi0gICAgOCwgNCwgMjM1LCAzNSwgOCwgNCwgMjM1LCAzNCwgOCwgNCwgMjM1LCAzOCwgOCwgNCwgMjM1LCAzNiwgOCwgNCwgMjM1LCAKLSAgICAyNywgOCwgNCwgMjM1LCAzMywgOCwgNCwgMjM1LCAzMCwgOCwgNCwgMjM1LCAyOCwgOCwgNCwgMjM1LCAyOSwgOCwgNCwgCi0gICAgMjM1LCAyMiwgOCwgNCwgMjM1LCAyMSwgOCwgNCwgMjM1LCAyNiwgOCwgNCwgMjM1LCAyNSwgOCwgNCwgMjM1LCAyMywgOCwgCi0gICAgNCwgMjM1LCAyNCwgOCwgNCwgMjM0LCAxNTUsIDgsIDQsIDIzNCwgMTU0LCA4LCA0LCAyMzQsIDE2MywgOCwgNCwgMjM0LCAKLSAgICAxNTcsIDgsIDQsIDIzNCwgMTYwLCA4LCA0LCAyMzQsIDE1OSwgOCwgNCwgMjM0LCAxNjIsIDgsIDQsIDIzNCwgMTYxLCA4LCAKLSAgICA0LCAyMzQsIDE0MywgOCwgNCwgMjM0LCAxNDUsIDgsIDQsIDIzNCwgMTQ0LCA4LCA0LCAyMzQsIDE0OCwgOCwgNCwgMjM0LCAKLSAgICAxNDcsIDgsIDQsIDIzNCwgMTUyLCA4LCA0LCAyMzQsIDE0OSwgOCwgNCwgMjM0LCAxNDEsIDgsIDQsIDIzNCwgMTQwLCA4LCAKLSAgICA0LCAyMzQsIDE0NiwgOCwgNCwgMjM0LCAxNDIsIDgsIDQsIDIyNCwgNTcsIDgsIDQsIDIyNCwgNTYsIDgsIDQsIDIyNCwgNjQsIAotICAgIDgsIDQsIDIyNCwgNTksIDgsIDQsIDIyNCwgNjEsIDgsIDQsIDIyNCwgNjAsIDgsIDQsIDIyNCwgNjMsIDgsIDQsIDIyNCwgCi0gICAgNjIsIDgsIDQsIDIyNCwgNDYsIDgsIDQsIDIyNCwgNDcsIDgsIDQsIDIyNCwgNTEsIDgsIDQsIDIyNCwgNTAsIDgsIDQsIAotICAgIDIyNCwgNTUsIDgsIDQsIDIyNCwgNTMsIDgsIDQsIDIyNCwgMjksIDgsIDQsIDIyNCwgMjcsIDgsIDQsIDIyNCwgMzksIDgsIAotICAgIDQsIDIyNCwgMzIsIDgsIDQsIDIyNCwgMzAsIDgsIDQsIDIyNCwgMzEsIDgsIDQsIDIyMywgMTg5LCA4LCA0LCAyMjMsIDE4NywgCi0gICAgOCwgNCwgMjIzLCAyMDIsIDgsIDQsIDIyMywgMTkwLCA4LCA0LCAyMjMsIDE5NywgOCwgNCwgMjIzLCAxOTYsIDgsIDQsIAotICAgIDIyMywgMTk5LCA4LCA0LCAyMjMsIDE5OCwgOCwgNCwgMjIzLCAxNDUsIDgsIDQsIDIyMywgMTQ0LCA4LCA0LCAyMjMsIDE0NywgCi0gICAgOCwgNCwgMjIzLCAxNDYsIDgsIDQsIDIyMywgMTY5LCA4LCA0LCAyMjMsIDE2NiwgOCwgNCwgMjIzLCAxODMsIDgsIDQsIAotICAgIDIyMywgMTcxLCA4LCA0LCAyMjMsIDEzOCwgOCwgNCwgMjIzLCAxMzYsIDgsIDQsIDIyMywgMTU4LCA4LCA0LCAyMjMsIDE0MywgCi0gICAgOCwgNCwgMjIzLCAxNDEsIDgsIDQsIDIyMywgMTQyLCA4LCA0LCAyMjMsIDEyMiwgOCwgNCwgMjIzLCAxMjEsIDgsIDQsIAotICAgIDIyMywgMTI3LCA4LCA0LCAyMjMsIDEyNSwgOCwgNCwgMjIzLCAxMjMsIDgsIDQsIDIyMywgMTI0LCA4LCAyOSwgMjMyLCA4NywgCi0gICAgOCwgMjksIDIzNywgMTkzLCA4LCAyOSwgMjM4LCAxNzYsIDgsIDI5LCAyMzQsIDE1NywgOCwgMjksIDI1MCwgMTk5LCA4LCAKLSAgICAyOSwgMjI4LCA5MSwgOCwgMjksIDI0NiwgODQsIDgsIDI5LCAyNDYsIDExNSwgOCwgMjksIDIzNiwgMTU3LCA4LCAyOSwgCi0gICAgMjQ0LCAxMDcsIDgsIDI5LCAyMzcsIDc1LCA4LCAyOSwgMjUyLCAyNDYsIDgsIDI5LCAyMzYsIDgyLCA4LCAyOSwgMjIzLCAKLSAgICAxODMsIDgsIDI5LCAyMzIsIDE2MCwgOCwgMjksIDI0NCwgMTAxLCA4LCAyOSwgMjI3LCA2NiwgOCwgMjksIDI0NiwgMTkzLCAKLSAgICA4LCAyOSwgMjIzLCAxMSwgOCwgMjksIDI1MCwgMTk0LCA4LCAyOSwgMjUwLCA4MiwgOCwgMjksIDI1MiwgNzAsIDgsIDI5LCAKLSAgICAyNDYsIDgwLCA4LCAyOSwgMjM0LCAxNDksIDgsIDI5LCAyMjUsIDI1MCwgOCwgMjksIDIzNCwgNDUsIDgsIDI5LCAyMzksIAotICAgIDEyMywgOCwgMjksIDIyMywgMjMsIDgsIDI5LCAyMzIsIDE0MywgOCwgMjksIDI0NSwgMTEsIDgsIDI5LCAyMjMsIDE4OSwgOCwgCi0gICAgMjksIDIyNCwgMTg3LCA4LCAyOSwgMjI5LCAyMywgOCwgMjksIDIyNSwgMzQsIDgsIDI5LCAyMjMsIDExNywgOCwgMjksIAotICAgIDIzOSwgMTE3LCA4LCAyOSwgMjM0LCAxMjAsIDgsIDI5LCAyMzksIDEyMSwgOCwgMjksIDI0NSwgMjUxLCA4LCAyOSwgMjM5LCAKLSAgICAxNDEsIDgsIDI5LCAyMjQsIDEwNSwgOCwgMjksIDI0OCwgMTA3LCA4LCAyOSwgMjI5LCAzNCwgOCwgMjksIDIzNywgMTg5LCAKLSAgICA4LCAyOSwgMjUwLCAyMDIsIDgsIDI5LCAyNTAsIDIyOCwgOCwgMjksIDI1MSwgMTA4LCA4LCAyOSwgMjQ0LCAxMDQsIDgsIAotICAgIDI5LCAyMjksIDEyMCwgOCwgMjksIDIyMywgMTAsIDgsIDI5LCAyMjksIDY0LCA4LCAyOSwgMjUxLCAxODIsIDgsIDI5LCAKLSAgICAyMjIsIDI0MSwgOCwgMjksIDIzNSwgMjEyLCA4LCAyOSwgMjM5LCAzLCAzNCwgNCwgMjQ4LCAzNSwgMzQsIDQsIDI0OCwgMzIsIAotICAgIDM0LCA0LCAyNDUsIDEwOSwgMzQsIDQsIDIyNCwgMTM4LCAzNCwgNCwgMjI0LCAxMzcsIDM0LCA0LCAyMzMsIDE0NCwgMzQsIAotICAgIDQsIDI1MiwgMTg4LCAzNCwgNCwgMjUyLCAyMzIsIDM0LCA0LCAyMzYsIDI0MywgMzQsIDQsIDIzOCwgMTIzLCAzNCwgNCwgCi0gICAgMjM2LCAxODQsIDM0LCA0LCAyNDYsIDE0MSwgMzQsIDQsIDI0NywgOTIsIDM0LCA0LCAyMjUsIDM4LCAzNCwgNCwgMjI3LCAKLSAgICAzNywgMzQsIDQsIDIyNiwgMjM4LCAzNCwgNCwgMjUwLCAxNiwgMzQsIDQsIDI1MCwgMTMsIDM0LCA0LCAyMzcsIDIzOSwgMzQsIAotICAgIDQsIDIzMSwgMjI5LCAzNCwgNCwgMjUwLCA2NywgMzQsIDQsIDIzNSwgMTg0LCAzNCwgNCwgMjMwLCAyMDMsIDM0LCA0LCAKLSAgICAyMjksIDExMiwgMzQsIDQsIDIyMywgOTUsIDM0LCA0LCAyMjMsIDc2LCAzNCwgNCwgMjUxLCAyMjUsIDM0LCA0LCAyMzksIAotICAgIDE2OSwgMzQsIDQsIDIzNSwgNDcsIDM0LCA0LCAyMjMsIDIyNSwgMzQsIDQsIDIzOSwgMiwgMzQsIDQsIDIzNSwgMTIwLCAzNCwgCi0gICAgNCwgMjQ2LCAxMjUsIDM0LCA0LCAyMzYsIDIyNiwgMzQsIDQsIDIzNSwgMTYwLCAzNCwgNCwgMjM0LCAxNjgsIDM0LCA0LCAKLSAgICA3NCwgMzQsIDQsIDI0MCwgMTYsIDM0LCA0LCAyNDUsIDc1LCAzNCwgNCwgMjQ1LCA2MCwgMzQsIDQsIDIyNCwgMTE4LCAzNCwgCi0gICAgNCwgMjI0LCAxMTIsIDM0LCA0LCAyMzMsIDY5LCAzNCwgNCwgMjUyLCAxODYsIDM0LCA0LCAyNTIsIDE4MSwgMzQsIDQsIAotICAgIDIzNiwgMjQyLCAzNCwgNCwgMjM4LCAxMjEsIDM0LCA0LCAyMzYsIDE4MywgMzQsIDQsIDI0NiwgMTM5LCAzNCwgNCwgMjQ3LCAKLSAgICA3MCwgMzQsIDQsIDIyNCwgMjI4LCAzNCwgNCwgMjI2LCAxNzUsIDM0LCA0LCAyMjYsIDIyMCwgMzQsIDQsIDI1MCwgOCwgMzQsIAotICAgIDQsIDI1MCwgMTIsIDM0LCA0LCAyMzcsIDE5MywgMzQsIDQsIDIzMSwgMTgwLCAzNCwgNCwgMjUwLCA0LCAzNCwgNCwgMjM1LCAKLSAgICAxODEsIDM0LCA0LCAyMjksIDE1LCAzNCwgNCwgMjI5LCA5MCwgMzQsIDQsIDIyMywgNDcsIDM0LCA0LCAyMjMsIDcyLCAzNCwgCi0gICAgNCwgMjUxLCAxMTgsIDM0LCA0LCAyMzksIDE1NiwgMzQsIDQsIDIzNSwgNDYsIDM0LCA0LCAyMjMsIDIwMiwgMzQsIDQsIAotICAgIDIzOCwgMTk5LCAzNCwgNCwgMjM1LCAxMTgsIDM0LCA0LCAyNDYsIDQ2LCAzNCwgNCwgMjM2LCAxNTcsIDM0LCA0LCAyMzUsIAotICAgIDg5LCAzNCwgNCwgMjM0LCAxNjMsIDM0LCA0LCA1NywgMzQsIDQsIDI1NCwgMTkwLCAzNCwgNCwgMjM1LCAxMzMsIDM0LCA0LCAKLSAgICAxNTQsIDM0LCA0LCAyNDUsIDE0OCwgMzQsIDQsIDIyNCwgMTczLCAzNCwgNCwgMjI0LCAxNjQsIDM0LCA0LCAyMTMsIDM0LCAKLSAgICA0LCAyNTIsIDE5MCwgMzQsIDQsIDI1MywgNzAsIDM0LCA0LCAyMzYsIDI0NSwgMzQsIDQsIDIzOCwgMTI2LCAzNCwgNCwgCi0gICAgMjM4LCAxMjUsIDM0LCA0LCAyMzYsIDE4NiwgMzQsIDQsIDI0NiwgMTQ0LCAzNCwgNCwgMjQ3LCAxMjksIDM0LCA0LCAyMjUsIAotICAgIDY0LCAzNCwgNCwgMjI3LCAxMDcsIDM0LCA0LCAyMjYsIDI1MSwgMzQsIDQsIDI1MCwgMjIsIDM0LCA0LCAyNTAsIDE1LCAzNCwgCi0gICAgNCwgMjM4LCA0MywgMzQsIDQsIDIwOCwgMzQsIDQsIDI1MCwgMTg5LCAzNCwgNCwgMjM1LCAxODksIDM0LCA0LCAyMzEsIDMxLCAKLSAgICAzNCwgNCwgMjI5LCAxNDYsIDM0LCA0LCAyMjMsIDExNywgMzQsIDQsIDIyMywgODUsIDM0LCA0LCAyNTIsIDM5LCAzNCwgNCwgCi0gICAgMjM5LCAxNzksIDM0LCA0LCAyMzUsIDQ5LCAzNCwgNCwgMTkxLCAzNCwgNCwgMTc3LCAzNCwgNCwgMjM5LCA0NiwgMzQsIDQsIAotICAgIDIzNSwgMTIyLCAzNCwgNCwgMjQ2LCAxOTMsIDM0LCA0LCAxOTgsIDM0LCA0LCAyMzYsIDEsIDM0LCA0LCAyMzQsIDE3MywgCi0gICAgMzQsIDQsIDIzNCwgNTIsIDM0LCA0LCAyMzQsIDQ5LCAzNCwgNCwgMjQ0LCAyMTgsIDM0LCA0LCAyMjQsIDk4LCAzNCwgNCwgCi0gICAgMjI0LCA5NCwgMzQsIDQsIDIzMiwgMjQ0LCAzNCwgNCwgMjUyLCAxODQsIDM0LCA0LCAyNTIsIDEzMSwgMzQsIDQsIDIzNiwgCi0gICAgMjQwLCAzNCwgNCwgMjM4LCAxMTksIDM0LCA0LCAyMzYsIDE4MSwgMzQsIDQsIDI0NiwgMTM2LCAzNCwgNCwgMjQ3LCAzLCAKLSAgICAzNCwgNCwgMjI0LCAxOTgsIDM0LCA0LCAyMjYsIDEwOCwgMzQsIDQsIDIyNiwgMTk4LCAzNCwgNCwgMjUwLCA2LCAzNCwgNCwgCi0gICAgMjUwLCAxMCwgMzQsIDQsIDIzNywgMTI1LCAzNCwgNCwgMjMxLCAxMTQsIDM0LCA0LCAyNDksIDE0NSwgMzQsIDQsIDIzNSwgCi0gICAgMTczLCAzNCwgNCwgMjI4LCAxNTksIDM0LCA0LCAyMjksIDY2LCAzNCwgNCwgMjIzLCAyNSwgMzQsIDQsIDIyMywgNjksIDM0LCAKLSAgICA0LCAyNTEsIDE3LCAzNCwgNCwgMjM5LCAxMDgsIDM0LCA0LCAyMzUsIDM3LCAzNCwgNCwgMjIzLCAxNzIsIDM0LCA0LCAyMzgsIAotICAgIDEzOSwgMzQsIDQsIDIzNSwgMTE2LCAzNCwgNCwgMjQ2LCA0LCAzNCwgNCwgMjM2LCA4NiwgMzQsIDQsIDIzNCwgMjUzLCAzNCwgCi0gICAgNCwgMjM0LCAxNTAsIDM0LCA0LCA2NiwgMzQsIDQsIDIyNSwgMTM4LCAzNCwgNCwgMjQ0LCAxNDUsIDM0LCA0LCAyNDQsIAotICAgIDEzNywgMzQsIDQsIDIyNCwgODMsIDM0LCA0LCAyMjQsIDgyLCAzNCwgNCwgMjMyLCAxNzMsIDM0LCA0LCAyNTIsIDE4MywgCi0gICAgMzQsIDQsIDI1MiwgOTAsIDM0LCA0LCAyMzYsIDIzOSwgMzQsIDQsIDIzOCwgMTE4LCAzNCwgNCwgMjM2LCAxODAsIDM0LCA0LCAKLSAgICAyNDYsIDEzNSwgMzQsIDQsIDI0NiwgMjE5LCAzNCwgNCwgMjI0LCAxOTAsIDM0LCA0LCAyMjUsIDI1MCwgMzQsIDQsIDIyNiwgCi0gICAgMTg2LCAzNCwgNCwgMjUwLCA1LCAzNCwgNCwgMjUwLCA5LCAzNCwgNCwgMjM3LCAxMTAsIDM0LCA0LCAyMzEsIDcwLCAzNCwgCi0gICAgNCwgMjQ4LCAxMDcsIDM0LCA0LCAyMzUsIDE2OSwgMzQsIDQsIDIyOCwgNiwgMzQsIDQsIDIyOSwgNDMsIDM0LCA0LCAyMjMsIAotICAgIDE5LCAzNCwgNCwgMjIzLCA2NSwgMzQsIDQsIDI1MCwgMjM1LCAzNCwgNCwgMjM5LCAxMDEsIDM0LCA0LCAyMzUsIDMzLCAzNCwgCi0gICAgNCwgMjIzLCAxNTgsIDM0LCA0LCAyMzgsIDEwNywgMzQsIDQsIDIzNSwgMTE1LCAzNCwgNCwgMjQ1LCAyMTgsIDM0LCA0LCAKLSAgICAyMzYsIDY2LCAzNCwgNCwgMjM0LCAyMDYsIDM0LCA0LCAyMzQsIDE0NiwgMzQsIDQsIDczLCAzNCwgNCwgMjM0LCA2MSwgMzQsIAotICAgIDQsIDIzNSwgMTA0LCAzNCwgNCwgMjQ0LCAyMjcsIDM0LCA0LCAyNDQsIDIxOSwgMzQsIDQsIDIyNCwgMTA1LCAzNCwgNCwgCi0gICAgMjI0LCA5OSwgMzQsIDQsIDIzMywgNCwgMzQsIDQsIDI1MiwgMTg1LCAzNCwgNCwgMjUyLCAxMzgsIDM0LCA0LCAyMzYsIAotICAgIDI0MSwgMzQsIDQsIDIzOCwgMTIwLCAzNCwgNCwgMjM2LCAxODIsIDM0LCA0LCAyNDYsIDEzOCwgMzQsIDQsIDI0NiwgMTM3LCAKLSAgICAzNCwgNCwgMjQ3LCA3LCAzNCwgNCwgMjI0LCAyMDYsIDM0LCA0LCA5NiwgMzQsIDQsIDIyNiwgMjAxLCAzNCwgNCwgMjUwLCAKLSAgICA3LCAzNCwgNCwgMjUwLCAxMSwgMzQsIDQsIDIzNywgMTQzLCAzNCwgNCwgMjMxLCAxMjIsIDM0LCA0LCAyNDksIDE2MSwgMzQsIAotICAgIDQsIDIzNSwgMTc1LCAzNCwgNCwgMjI4LCAxNjksIDM0LCA0LCAyMjksIDcxLCAzNCwgNCwgMjIzLCAyNywgMzQsIDQsIDIyMywgCi0gICAgNzAsIDM0LCA0LCAyNTEsIDY4LCAzNCwgNCwgMjM5LCAxMTcsIDM0LCA0LCAyMzUsIDM4LCAzNCwgNCwgMjIzLCAxODMsIDM0LCAKLSAgICA0LCAyMzgsIDE1MCwgMzQsIDQsIDIzNSwgMTE3LCAzNCwgNCwgMjQ2LCAxMSwgMzQsIDQsIDIzNiwgMTAzLCAzNCwgNCwgCi0gICAgMjM1LCA2LCAzNCwgNCwgMjM0LCAxNTIsIDM0LCA0LCA3MiwgMzQsIDQsIDI0NywgMjM5LCAzNCwgNCwgMjM1LCAxMjYsIDM0LCAKLSAgICA0LCAyNDUsIDEyMSwgMzQsIDQsIDI0NSwgMTAwLCAzNCwgNCwgMjI0LCAxNDEsIDM0LCA0LCAyMjQsIDEzNCwgMzQsIDQsIAotICAgIDIzMywgMTUxLCAzNCwgNCwgMjUyLCAxODksIDM0LCA0LCAyNTIsIDIzOCwgMzQsIDQsIDIzNiwgMjQ0LCAzNCwgNCwgMjM4LCAKLSAgICAxMjQsIDM0LCA0LCAyMzgsIDEyMiwgMzQsIDQsIDIzNiwgMTg1LCAzNCwgNCwgMjQ2LCAxNDIsIDM0LCA0LCAyNDYsIDE0MCwgCi0gICAgMzQsIDQsIDI0NywgOTcsIDM0LCA0LCAyMjUsIDQyLCAzNCwgNCwgMjI3LCA0NCwgMzQsIDQsIDIyNiwgMjM5LCAzNCwgNCwgCi0gICAgMjUwLCAxNywgMzQsIDQsIDI1MCwgMTQsIDM0LCA0LCAyMzcsIDI0MywgMzQsIDQsIDIzMSwgMjQ0LCAzNCwgNCwgMjUwLCAKLSAgICA3NywgMzQsIDQsIDIzNSwgMTg1LCAzNCwgNCwgMjMwLCAyMTMsIDM0LCA0LCAyMjksIDExNCwgMzQsIDQsIDIyMywgOTcsIAotICAgIDM0LCA0LCAyMjMsIDc3LCAzNCwgNCwgMjUxLCAyMzEsIDM0LCA0LCAyMzksIDE3MCwgMzQsIDQsIDIzNSwgNDgsIDM0LCA0LCAKLSAgICAyMjMsIDIyOCwgMzQsIDQsIDIzOSwgMywgMzQsIDQsIDIzNSwgMTIxLCAzNCwgNCwgMjM1LCAxMTksIDM0LCA0LCAyNDYsIAotICAgIDEzMSwgMzQsIDQsIDI0NiwgMTIyLCAzNCwgNCwgMjM2LCAyMzUsIDM0LCA0LCAyMzUsIDE2MiwgMzQsIDQsIDIzNCwgMTY5LCAKLSAgICAzNCwgNCwgMjM1LCAxMzksIDM0LCA0LCAyMzcsIDIxOCwgMzQsIDI1MSwgNTQsIDM0LCAyNDYsIDIxOCwgMjI4LCAzOCwgMzQsIAotICAgIDIzMiwgNjksIDc2LCAzNCwgNCwgMjM1LCAxNzQsIDI0NywgMTI5LCAzNCwgNCwgMjM1LCAxNzQsIDE3NywgMzQsIDQsIDIzNSwgCi0gICAgMTc0LCAyMjgsIDE1OSwgMzQsIDE0LCAyNDcsIDg5LCAzNCwgMTQsIDIzOSwgMSwgMzQsIDE0LCAyMjYsIDE1NCwgMzQsIDE0LCAKLSAgICAyMzUsIDY4LCAzNCwgMTQsIDI1MywgNDAsIDM0LCAxNCwgMjQ3LCAxMjgsIDM0LCAxNCwgMjI3LCAxMDQsIDM0LCAxNCwgCi0gICAgMjUwLCAxNDksIDM0LCAxNCwgMjQ5LCAxNDQsIDM0LCAxNCwgMjM4LCA5NywgMzQsIDE0LCAyMjYsIDExMSwgMzQsIDE0LCAKLSAgICAyNDksIDE2MCwgMzQsIDE0LCAyMzksIDEwOSwgMzQsIDIxLCAyMjMsIDg5LCAzNCwgMjEsIDExOCwgMzQsIDIxLCAxMTMsIAotICAgIDM0LCAyMSwgMTY2LCAzNCwgMjEsIDE1OCwgMzQsIDIxLCAxNzMsIDM0LCAyMSwgMTgzLCAzNCwgMjEsIDE5NCwgMzQsIDIxLCAKLSAgICAxODcsIDM0LCAyMSwgMTkyLCAzNCwgNCwgMjM1LCAxNzQsIDE5OCwgMzQsIDQsIDIzNSwgMTc0LCAyNDksIDE2MSwgMjgsIDYsIAotICAgIDEsIDIyMywgOTMsIDI4LCAzLCAxLCAyMjMsIDkzLCAyOCwgNiwgMSwgMjQ4LCA2NywgMjgsIDMsIDEsIDI0OCwgNjcsIDI4LCAKLSAgICA2LCAxLCAyMDAsIDI0OCwgNjksIDI4LCAzLCAxLCAyMDAsIDI0OCwgNjksIDI4LCA2LCAxLCAyMzksIDIxNSwgMjgsIDMsIDEsIAotICAgIDIzOSwgMjE1LCAyOCwgNiwgMSwgMjQ5LCAxNzUsIDI4LCAzLCAxLCAyNDksIDE3NSwgMjgsIDYsIDEsIDIzNiwgOTAsIDIyNSwgCi0gICAgMTUzLCAyOCwgMywgMSwgMjM2LCA5MCwgMjI1LCAxNTMsIDI4LCA2LCAxLCAyNTIsIDEwMCwgMjM0LCA2NiwgMjgsIDMsIDEsIAotICAgIDI1MiwgMTAwLCAyMzQsIDY2LCAyOCwgNiwgMSwgMjM1LCAxNDUsIDIyMywgMjE3LCAyOCwgMywgMSwgMjM1LCAxNDUsIDIyMywgCi0gICAgMjE3LCAyOCwgNiwgMSwgMjIzLCAyMTQsIDIsIDI1MywgNjcsIDIyMywgMjE3LCAyOCwgMywgMSwgMjIzLCAyMTQsIDIsIAotICAgIDI1MywgNjcsIDIyMywgMjE3LCAyOCwgNiwgMSwgMjM5LCAyMTMsIDIyMywgMjM5LCAyOCwgMywgMSwgMjM5LCAyMTMsIDIyMywgCi0gICAgMjM5LCAyOCwgNiwgMSwgMjAwLCAyMjMsIDE1OCwgMjgsIDMsIDEsIDIwMCwgMjIzLCAxNTgsIDI4LCA2LCAxLCAyMzksIAotICAgIDIxMywgNTcsIDI4LCAzLCAxLCAyMzksIDIxMywgNTcsIDI4LCA2LCAxLCAyNTEsIDgyLCAyMzcsIDE1NSwgMjIzLCAxMzksIAotICAgIDI4LCAzLCAxLCAyNTEsIDgyLCAyMzcsIDE1NSwgMjIzLCAxMzksIDI4LCA2LCAxLCAyNTIsIDE0MywgMjIzLCAxMzksIDI4LCAKLSAgICAzLCAxLCAyNTIsIDE0MywgMjIzLCAxMzksIDI4LCA2LCAxLCAyMzksIDIxMywgMjUxLCA4MiwgMjM3LCAxNTUsIDIyMywgCi0gICAgMTM5LCAyOCwgMywgMSwgMjM5LCAyMTMsIDI1MSwgODIsIDIzNywgMTU1LCAyMjMsIDEzOSwgMjgsIDYsIDEsIDIyMywgMTg1LCAKLSAgICAyOCwgMywgMSwgMjIzLCAxODUsIDI4LCA2LCAxLCAyMjgsIDE2NSwgMjUwLCA3NywgMjgsIDMsIDEsIDIyOCwgMTY1LCAyNTAsIAotICAgIDc3LCAyOCwgNiwgMSwgMjI4LCAxNjUsIDI0OCwgMiwgMjgsIDMsIDEsIDIyOCwgMTY1LCAyNDgsIDIsIDI4LCA2LCAxLCAKLSAgICAyMjgsIDE2NSwgMjQ3LCAyNDcsIDI4LCAzLCAxLCAyMjgsIDE2NSwgMjQ3LCAyNDcsIDI4LCA2LCAxLCAyMzYsIDk0LCA3MywgCi0gICAgMjgsIDMsIDEsIDIzNiwgOTQsIDczLCAyOCwgNiwgMSwgMjUyLCAxNjcsIDczLCAyOCwgMywgMSwgMjUyLCAxNjcsIDczLCAKLSAgICAyOCwgNiwgMSwgNDcsIDIzNiwgOTQsIDczLCAyOCwgMywgMSwgNDcsIDIzNiwgOTQsIDczLCAyOCwgMSwgMjM2LCA1NCwgNzMsIAotICAgIDM2LCAyOCwgMjI0LCAxNzYsIDM2LCAyOCwgMjI3LCAyNCwgMjM2LCAxMjgsIDUzLCAzNiwgMjgsIDI0NCwgMTM2LCAyMzYsIAotICAgIDEyOCwgNTMsIDM2LCAyOCwgMjI2LCAxOTUsIDIzNiwgMTI4LCA1MywgMjI4LCAxOTIsIDI1NCwgNjksIDM2LCAyOCwgMjM5LCAKLSAgICAxMiwgMzYsIDI4LCAyMzMsIDE1NiwgMjgsIDIzOSwgMTIsIDI4LCAyMzMsIDE1NiwgMjgsIDYsIDEsIDI0OCwgNzgsIDI4LCAKLSAgICAzLCAxLCAyNDgsIDc4LCAyOCwgNiwgMSwgMjQ4LCA2MCwgMjgsIDMsIDEsIDI0OCwgNjAsIDI4LCA2LCAxLCAyMjMsIDU1LCAKLSAgICAyOCwgMywgMSwgMjIzLCA1NSwgMjgsIDYsIDEsIDI1MSwgMjQwLCAyOCwgMywgMSwgMjUxLCAyNDAsIDI4LCA2LCAxLCAyNDgsIAotICAgIDU5LCAyOCwgMywgMSwgMjQ4LCA1OSwgMjgsIDYsIDEsIDIyNywgNDUsIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDMsIDEsIDIyNywgCi0gICAgNDUsIDIsIDIzNiwgMTU0LCA4OCwgMjgsIDYsIDEsIDIyNSwgMjIwLCAyOCwgMywgMSwgMjI1LCAyMjAsIDI4LCA2LCAxLCAKLSAgICAyMjYsIDIzLCAyOCwgMywgMSwgMjI2LCAyMywgMjgsIDYsIDEsIDIyNiwgMjcsIDI4LCAzLCAxLCAyMjYsIDI3LCAyOCwgNiwgCi0gICAgMSwgMjI3LCA1MCwgMjgsIDMsIDEsIDIyNywgNTAsIDI4LCA2LCAxLCAyNDQsIDEyNSwgMjgsIDMsIDEsIDI0NCwgMTI1LCAKLSAgICAyOCwgNiwgMSwgMjI5LCAyOCwgMjgsIDMsIDEsIDIyOSwgMjgsIDUyLCAxLCAyNTEsIDE2MCwgMjA2LCAyMjMsIDE5MywgCi0gICAgMjMzLCAzNywgNTIsIDEsIDI1MSwgMTYwLCAyMDYsIDIyMywgMjQ5LCAyMzMsIDM3LCA1MiwgMSwgMjUxLCAxNjAsIDIwNiwgCi0gICAgMjIzLCAxOTMsIDIyOSwgMTMwLCA1MiwgMSwgMjUxLCAxNjAsIDIwNiwgMjIzLCAyNDksIDIyOSwgMTMwLCA1MiwgMSwgMjUxLCAKLSAgICAxNjAsIDIwNiwgMjIzLCAxOTMsIDIzMiwgODQsIDUyLCAxLCAyNTEsIDE2MCwgMjA2LCAyMjMsIDI0OSwgMjMyLCA4NCwgNTIsIAotICAgIDEsIDI1MSwgMTYwLCAyMDYsIDIyMywgMTkzLCAyMzEsIDcwLCA1MiwgMSwgMjUxLCAxNjAsIDIwNiwgMjIzLCAyNDksIDIzMSwgCi0gICAgNzAsIDUyLCAxLCAyNDcsIDE0MCwgMjQ4LCAxMzgsIDIwNiwgMTI1LCA1MiwgMSwgMjAxLCAyNDgsIDEzOCwgMjA2LCAxMjUsIAotICAgIDUyLCAxLCAyMzYsIDE1NSwgMjQ4LCAxMzgsIDIwNiwgMTI1LCA1MiwgMSwgMTg0LCAyNDgsIDEzOCwgMjA2LCAxMjUsIDUyLCAKLSAgICAxLCAyNDcsIDEzOSwgMjQ4LCAxMzgsIDIwNiwgMTI1LCA1MiwgMSwgMjQ3LCAxNDAsIDI0OCwgMTM4LCAyMzcsIDIzMiwgCi0gICAgMjA2LCAxMjUsIDUyLCAxLCAyMDEsIDI0OCwgMTM4LCAyMzcsIDIzMiwgMjA2LCAxMjUsIDUyLCAxLCAyMzYsIDE1NSwgMjQ4LCAKLSAgICAxMzgsIDIzNywgMjMyLCAyMDYsIDEyNSwgNTIsIDEsIDE4NCwgMjQ4LCAxMzgsIDIzNywgMjMyLCAyMDYsIDEyNSwgNTIsIDEsIAotICAgIDI0NywgMTM5LCAyNDgsIDEzOCwgMjM3LCAyMzIsIDIwNiwgMTI1LCA1MiwgMSwgMjQ3LCAxNDAsIDIzNywgMjMyLCAyMDYsIAotICAgIDEyNSwgNTIsIDEsIDIwMSwgMjM3LCAyMzIsIDIwNiwgMTI1LCA1MiwgMSwgMjM2LCAxNTUsIDIzNywgMjMyLCAyMDYsIDEyNSwgCi0gICAgNTIsIDEsIDE4NCwgMjM3LCAyMzIsIDIwNiwgMTI1LCA1MiwgMSwgMjQ3LCAxMzksIDIzNywgMjMyLCAyMDYsIDEyNSwgNTIsIAotICAgIDEsIDU2LCA2MSwgMTI1LCA1MiwgMSwgNTYsIDIyOCwgMTk0LCA1MiwgMSwgNTYsIDE2OSwgMTI1LCA1MiwgMSwgMjAzLCA0MSwgCi0gICAgMjUxLCAxMSwgMjU0LCAxODEsIDUyLCAxLCAyMzIsIDgsIDk5LCA1OCwgNTIsIDEsIDIzMiwgOCwgMTAzLCA1OCwgNTIsIDEsIAotICAgIDIzMiwgOCwgMjQ3LCAxNDksIDc2LCA1MiwgMSwgMjMyLCA4LCAyMzksIDIyMywgMjQ3LCAxNDksIDc2LCA1MiwgMSwgMTg0LCAKLSAgICAyMzksIDIyMywgMjQ3LCAxNDksIDc2LCA1MiwgMSwgMjI4LCAyNywgMjIsIDIwMSwgMjI2LCAxMTgsIDUyLCAxLCAyMjgsIAotICAgIDI3LCAyMiwgMTg0LCAyMjYsIDExOCwgNywgNiwgMSwgMjQ4LCAyNiwgMjU0LCAyMjcsIDcsIDMsIDEsIDI0OCwgMjYsIDI1NCwgCi0gICAgMjI3LCA3LCA2LCAxLCAyNDgsIDI2LCAyNTQsIDI0OCwgNywgMywgMSwgMjQ4LCAyNiwgMjU0LCAyNDgsIDcsIDYsIDEsIAotICAgIDI0NSwgOTgsIDcsIDMsIDEsIDI0NSwgOTgsIDcsIDYsIDEsIDIyNSwgMTg3LCA3LCAzLCAxLCAyMjUsIDE4NywgNywgNiwgMSwgCi0gICAgMjI2LCA4MiwgNywgMywgMSwgMjI2LCA4MiwgNywgNiwgMSwgMjUwLCAyMzMsIDcsIDMsIDEsIDI1MCwgMjMzLCA3LCA2LCAxLCAKLSAgICAyNTAsIDIzNCwgMiwgMjUxLCA1NCwgNywgMywgMSwgMjUwLCAyMzQsIDIsIDI1MSwgNTQsIDcsIDEsIDMsIDYsIDI0NywgCi0gICAgMTMwLCA3LCAxLCAzLCA2LCAxOTMsIDcsIDYsIDEsIDI1NSwgNjMsIDcsIDMsIDEsIDI1NSwgNjMsIDcsIDYsIDEsIDI1NCwgCi0gICAgMTU4LCA3LCAzLCAxLCAyNTQsIDE1OCwgNywgNiwgMSwgMjU0LCA1MywgNywgMywgMSwgMjU0LCA1MywgNywgNiwgMSwgMjU0LCAKLSAgICA0MSwgNywgMywgMSwgMjU0LCA0MSwgNywgNiwgMSwgMjU0LCA0MiwgMiwgMTY5LCAxMjUsIDcsIDMsIDEsIDI1NCwgNDIsIDIsIAotICAgIDE2OSwgMTI1LCA3LCA2LCAxLCAyNTQsIDM0LCA3LCAzLCAxLCAyNTQsIDM0LCA3LCA2LCAxLCAyMDAsIDI1MiwgNDUsIDIsIAotICAgIDI0OSwgMTQwLCA3LCAzLCAxLCAyMDAsIDI1MiwgNDUsIDIsIDI0OSwgMTQwLCA3LCA2LCAxLCAyMzksIDc3LCAyLCA4MiwgNywgCi0gICAgMywgMSwgMjM5LCA3NywgMiwgODIsIDcsIDYsIDEsIDIzOSwgNzcsIDIsIDI1MCwgMSwgODIsIDcsIDMsIDEsIDIzOSwgNzcsIAotICAgIDIsIDI1MCwgMSwgODIsIDcsIDYsIDEsIDIzOSwgNzcsIDIsIDE5NSwgMjIsIDI1MCwgMSwgODIsIDcsIDMsIDEsIDIzOSwgCi0gICAgNzcsIDIsIDE5NSwgMjIsIDI1MCwgMSwgODIsIDcsIDYsIDEsIDI1MiwgOTksIDE0OSwgNywgMywgMSwgMjUyLCA5OSwgMTQ5LCAKLSAgICA3LCA2LCAxLCAyMzgsIDQ3LCAyLCAyMDEsIDgyLCA3LCAzLCAxLCAyMzgsIDQ3LCAyLCAyMDEsIDgyLCA3LCA2LCAxLCAxMzAsIAotICAgIDIsIDE4MiwgMTk1LCAyMzQsIDIsIDcsIDMsIDEsIDEzMCwgMiwgMTgyLCAxOTUsIDIzNCwgMiwgNywgNiwgMSwgMTMwLCAyLCAKLSAgICAyMzcsIDEyNCwgNywgMywgMSwgMTMwLCAyLCAyMzcsIDEyNCwgNywgNiwgMSwgMjM0LCA1MiwgNywgMywgMSwgMjM0LCA1MiwgCi0gICAgNywgNiwgMSwgMjMzLCAyNDUsIDIsIDE5NSwgMjI2LCAxODgsIDI1MCwgMzQsIDcsIDMsIDEsIDIzMywgMjQ1LCAyLCAxOTUsIAotICAgIDIyNiwgMTg4LCAyNTAsIDM0LCA3LCA2LCAxLCAyMzMsIDI0NSwgMiwgMjQ3LCAxNCwgNywgMywgMSwgMjMzLCAyNDUsIDIsIAotICAgIDI0NywgMTQsIDcsIDYsIDEsIDIzMywgMjQ1LCAyLCAyMjgsIDExNCwgMjI3LCA4OSwgNywgMywgMSwgMjMzLCAyNDUsIDIsIAotICAgIDIyOCwgMTE0LCAyMjcsIDg5LCA3LCA2LCAxLCAyMzIsIDE0MCwgMiwgMTk1LCAyMjYsIDE4OCwgMjUwLCAzNCwgNywgMywgMSwgCi0gICAgMjMyLCAxNDAsIDIsIDE5NSwgMjI2LCAxODgsIDI1MCwgMzQsIDcsIDYsIDEsIDIzMiwgMTQwLCAyLCAyNTAsIDEsIDgyLCA3LCAKLSAgICAzLCAxLCAyMzIsIDE0MCwgMiwgMjUwLCAxLCA4MiwgNywgNiwgMSwgMjMyLCAyNywgMjMxLCAxMDUsIDcsIDMsIDEsIDIzMiwgCi0gICAgMjcsIDIzMSwgMTA1LCA3LCA2LCAxLCAyMzEsIDYzLCAyMzEsIDEwNSwgNywgMywgMSwgMjMxLCA2MywgMjMxLCAxMDUsIDcsIAotICAgIDYsIDEsIDIyNSwgNjUsIDIsIDI1MCwgMSwgODIsIDcsIDMsIDEsIDIyNSwgNjUsIDIsIDI1MCwgMSwgODIsIDcsIDYsIDEsIAotICAgIDIyNCwgMTgyLCA3LCAzLCAxLCAyMjQsIDE4MiwgNywgNiwgMSwgMjI0LCAyMDksIDIyMywgMTE5LCA3LCAzLCAxLCAyMjQsIAotICAgIDIwOSwgMjIzLCAxMTksIDcsIDYsIDEsIDIyNiwgMTk3LCAyLCA4MiwgNywgMywgMSwgMjI2LCAxOTcsIDIsIDgyLCA3LCA2LCAKLSAgICAxLCAyMjYsIDE5NywgMiwgMTk1LCAyMjYsIDE4OCwgMjUwLCAzNCwgNywgMywgMSwgMjI2LCAxOTcsIDIsIDE5NSwgMjI2LCAKLSAgICAxODgsIDI1MCwgMzQsIDcsIDYsIDEsIDIyNSwgMzUsIDcsIDMsIDEsIDIyNSwgMzUsIDcsIDYsIDEsIDI0NywgMTczLCA3LCAKLSAgICAzLCAxLCAyNDcsIDE3MywgNywgNiwgMSwgMjM5LCAyMDUsIDcsIDMsIDEsIDIzOSwgMjA1LCA3LCA2LCAxLCAyNTEsIDQ0LCAKLSAgICA3LCAzLCAxLCAyNTEsIDQ0LCA1MiwgMSwgMjI1LCA4NywgNywgMywgMSwgMjQ4LCA5OCwgNywgMywgMSwgMjM3LCAxMDAsIDcsIAotICAgIDMsIDEsIDIzNiwgNDgsIDcsIDMsIDEsIDIzNCwgMTk5LCA3LCAzLCAxLCAyMzEsIDYyLCA3LCAxLCAzLCA2LCAyMzEsIDYyLCAKLSAgICA3LCAzLCAxLCAyMjUsIDI0NCwgNywgMywgMSwgMjI1LCAxNDUsIDcsIDYsIDEsIDIzOSwgMjQxLCAyMjIsIDIyMiwgNywgMywgCi0gICAgMSwgMjM5LCAyNDEsIDIyMiwgMjIyLCA3LCA2LCAxLCAyMzksIDI0MSwgMjQ3LCAxMzAsIDcsIDMsIDEsIDIzOSwgMjQxLCAKLSAgICAyNDcsIDEzMCwgNywgNiwgMSwgMjM5LCAyNDEsIDIxNCwgNywgNiwgMSwgMjA5LCAyMzksIDI0MSwgMjE0LCA3LCAzLCAxLCAKLSAgICAyMDksIDIzOSwgMjQxLCAyMTQsIDcsIDYsIDEsIDIwOSwgMTQ5LCA3LCAzLCAxLCAyMDksIDE0OSwgNywgNiwgMSwgMjM5LCAKLSAgICAyNDEsIDE0NiwgNywgMywgMSwgMjM5LCAyNDEsIDE0NiwgNywgNiwgMSwgMjM5LCAyNDEsIDE5MywgNywgMywgMSwgMjM5LCAKLSAgICAyNDEsIDE5MywgNywgNiwgMSwgMjM5LCAyNDEsIDIyNywgMTA5LCA3LCAzLCAxLCAyMzksIDI0MSwgMjI3LCAxMDksIDUyLCAKLSAgICAxLCAxODQsIDI1MSwgMTAyLCAyNTUsIDQxLCA1MiwgMSwgMjUxLCA2MSwgNTIsIDEsIDIyOSwgNjMsIDI0NywgMjA0LCA1MywgCi0gICAgNywgNiwgMSwgMjMxLCA2LCA3LCAzLCAxLCAyMzEsIDYsIDcsIDI0NywgMjA4LCAxLCAyMDAsIDI0NywgMTMwLCA3LCAyNDcsIAotICAgIDIwOCwgMSwgMjAwLCAyMzMsIDI0NCwgNywgMjQ3LCAyMDgsIDEsIDIzOSwgMjIzLCAxODUsIDcsIDI0NywgMjA4LCAxLCAKLSAgICAyNDQsIDgxLCAyMzcsIDEyNiwgNywgMjQ3LCAyMDgsIDEsIDI1NCwgMTIwLCAxODUsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgCi0gICAgNTcsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgNzQsIDIyNywgMTgzLCAyMzUsIDI0NCwgNSwgMjQ4LCA4MCwgMjI3LCAxODMsIAotICAgIDIzNSwgMjQ0LCAxLCA2NiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCA3MiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCA3MywgCi0gICAgMjI3LCAxODMsIDIzNSwgMjQ0LCA1LCAyNDUsIDEzNCwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzgsIDE1MCwgMjI3LCAKLSAgICAxODMsIDIzNSwgMjQ0LCAxLCAyMzgsIDIwOCwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyNDYsIDExLCAyMjcsIDE4MywgCi0gICAgMjM1LCAyNDQsIDEsIDI0NiwgNTQsIDIyNywgMTgzLCAyMzUsIDI0NCwgNSwgMjU0LCAxNjAsIDIyNywgMTgzLCAyMzUsIAotICAgIDI0NCwgMSwgMjUxLCA2OCwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyNTEsIDE1MCwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAKLSAgICAyMzksIDExNywgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzksIDE1NywgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMjYsIDUsIAotICAgIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgMjI2LCA3LCAyMjcsIDE4MywgMjM1LCAyNDQsIDEsIDI1MCwgOTIsIDIyNywgMTgzLCAKLSAgICAyMzUsIDI0NCwgMSwgMjUwLCAxMDAsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgOTYsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgCi0gICAgMjI2LCAyMDEsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgMjQ5LCAxNjEsIDIyNywgMTgzLCAyMzUsIDI0NCwgMSwgMjUwLCA3LCAKLSAgICAyMjcsIDE4MywgMjM1LCAyNDQsIDEsIDIzNSwgNiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzMsIDQsIDIyNywgMTgzLCAKLSAgICAyMzUsIDI0NCwgMSwgMjMzLCA3OSwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyNTIsIDEzOCwgMjI3LCAxODMsIDIzNSwgCi0gICAgMjQ0LCAxLCAyNTIsIDE4NSwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzYsIDEwMywgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAKLSAgICAyMzEsIDEyMiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzcsIDE0MywgMjI3LCAxODMsIDIzNSwgMjQ0LCAxLCAyMzEsIAotICAgIDkxLCAyMjcsIDE4MywgMjM1LCAyNDQsIDEsIDIyOCwgMTY5LCAyMjcsIDE4MywgMjM1LCAyNDQsIDEsIDI0NCwgMjI3LCAKLSAgICAyMjcsIDE4MywgMjM1LCAyNDQsIDMxLCA1LCA1NywgMjI3LCAxODMsIDIzNSwgMjQ0LCAzMSwgNSwgNzQsIDIyNywgMTgzLCAKLSAgICAyMzUsIDI0NCwgMzEsIDUsIDY2LCAyMjcsIDE4MywgMjM1LCAyNDQsIDMxLCA1LCA3MiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAKLSAgICAzMSwgNSwgMjM0LCA1MiwgMjI3LCAxODMsIDIzNSwgMjQ0LCAyMzMsIDAsIDIzNywgMTcsIDIyNywgMTgzLCAyMzUsIDI0NCwgCi0gICAgMjMzLCAwLCAyMzcsIDE2LCAyMjcsIDE4MywgMjM1LCAyNDQsIDIzMywgMCwgMjM3LCAxNSwgMjI3LCAxODMsIDIzNSwgMjQ0LCAKLSAgICAyMzMsIDAsIDIzNywgMTQsIDIxNywgMSwgMTc3LCAyMTcsIDEsIDIzOCwgMjI3LCAyMTcsIDEsIDI0NiwgMTkzLCAyMTcsIDEsIAotICAgIDIzNSwgMTM3LCAyMTcsIDEsIDI1MiwgMzksIDIxNywgMSwgMjUxLCAyMDQsIDIxNywgMSwgMjM5LCAxNzksIDIxNywgMSwgCi0gICAgMjM0LCAxNzMsIDIxNywgMSwgMjI3LCAxMDcsIDIxNywgMSwgMjI2LCAyNTEsIDIxNywgMSwgMjUwLCAxODksIDIxNywgMSwgCi0gICAgMjM2LCAxLCAyMTcsIDEsIDIxMywgMjE3LCAxLCAyMzMsIDk3LCAyMTcsIDEsIDI1MywgNzAsIDIxNywgMSwgMTk4LCAyMTcsIAotICAgIDEsIDIyNiwgNDQsIDIxNywgMSwgMjI2LCAzNywgMjE3LCAxLCAyNDgsIDcwLCAyMTcsIDEsIDIyNCwgMTczLCAyMTcsIDEsIAotICAgIDIyMywgODUsIDIxNywgMSwgMjIzLCAxMTcsIDIxNywgMSwgMywgNTcsIDIxNywgMSwgMTkxLCAyMTcsIDEsIDIwOCwgMjE3LCAKLSAgICAxLCAyMzgsIDQzLCAyMTcsIDEsIDIyOSwgMTQ2LCAyMTcsIDEsIDIzMSwgMzEsIDIxNywgMSwgMTU0LCAyMTcsIDEsIDU3LCAKLSAgICAyMTcsIDEsIDc0LCAyMTcsIDEsIDY2LCAyMTcsIDEsIDcyLCAyMTcsIDEsIDczLCAyMTcsIDEsIDIzMiwgMTM4LCAyMTcsIDEsIAotICAgIDIyNCwgNzIsIDIxNywgMSwgMjQ3LCAxMjksIDIxNywgMSwgMjQ2LCAxMDEsIDIxNywgMSwgMjQ4LCAzNSwgMjE3LCAyMjgsIAotICAgIDAsIDEsIDIyNCwgMTczLCAyMTcsIDIyOCwgMCwgMSwgMTkxLCAyMTcsIDEsIDIyNiwgMjAsIDIxNywgMSwgMjI2LCAxMCwgCi0gICAgMjE3LCAxLCAyNTAsIDExNywgMjE3LCAxLCAyMzUsIDE4LCAyMTcsIDEsIDI1NCwgMjAzLCAxOTEsIDIxNywgMSwgMjI0LCAKLSAgICAyMDMsIDIyOSwgMTQ2LCAyMTcsIDEsIDIyNCwgMjA0LCAxNTQsIDIxNywgMSwgMjU0LCA3NSwgMjQ3LCAxMjksIDIxNywgCi0gICAgMjI4LCAwLCAxLCAyMDgsIDIxNywgMjI3LCAyMjEsIDEsIDIwOCwgMjE3LCAxLCAyNTIsIDE5LCAyMTcsIDIyOCwgMjQxLCAKLSAgICAyNDUsIDExOSwgNzYsIDIxNywgNDcsIDI0NSwgMTE5LCA3NiwgMjE3LCAxNjUsIDIyOSwgMTM5LCAyMTcsIDE2NSwgNDcsIAotICAgIDIyOSwgMTM5LCAxNDEsIDUsIDI1NCwgMTYwLCAxNDEsIDUsIDIyNCwgMjExLCAxNDEsIDEsIDU3LCAxNDEsIDEsIDI1NSwgCi0gICAgNjMsIDE0MSwgMSwgNzQsIDE0MSwgMSwgMjQwLCA0NywgMTQxLCAxLCA2NiwgMTQxLCAxLCAyMjUsIDc2LCAxNDEsIDEsIAotICAgIDE1MywgMTQ2LCAxNDEsIDEsIDE1MywgMjMxLCAxMDAsIDE0MSwgMSwgMTUzLCAxNDksIDE0MSwgMSwgMTUzLCAyMzcsIDE0OSwgCi0gICAgMTQxLCAxLCA3MiwgMTQxLCAxLCAyNDgsIDM1LCAxNDEsIDEsIDI1NCwgMjUzLCAxNDEsIDEsIDczLCAxNDEsIDEsIDIzNCwgCi0gICAgNTIsIDE0MSwgMSwgMjU0LCA1MywgMTQxLCAxLCAxNzcsIDE0MSwgMSwgMjM4LCAyMjcsIDE0MSwgMSwgMjQ2LCAxOTMsIAotICAgIDE0MSwgMSwgMjQ2LCA2NiwgMTQxLCAxLCAyMzUsIDEzNywgMTQxLCAxLCAyNTIsIDM5LCAxNDEsIDEsIDI1MSwgMjA0LCAKLSAgICAxNDEsIDEsIDIzOSwgMTc5LCAxNDEsIDEsIDIzOSwgMTYwLCAxNDEsIDEsIDIzNCwgMTczLCAxNDEsIDEsIDIyNiwgMjAsIAotICAgIDE0MSwgMSwgMjI2LCAxMCwgMTQxLCAxLCAyNTAsIDExNywgMTQxLCAxLCAyNTAsIDEwMSwgMTQxLCAxLCAyMzUsIDE4LCAKLSAgICAxNDEsIDEsIDIyNywgMTA3LCAxNDEsIDEsIDIyNiwgMjUxLCAxNDEsIDEsIDI1MCwgMTg5LCAxNDEsIDEsIDI1MCwgMjIsIAotICAgIDE0MSwgMSwgMjM2LCAxLCAxNDEsIDEsIDIxMywgMTQxLCAxLCAyMzMsIDk3LCAxNDEsIDEsIDI1MywgNzAsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTAsIDE0MSwgMSwgMTk4LCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAyMDgsIDE0MSwgMSwgMjM4LCA0MywgMTQxLCAxLCAKLSAgICAyMjUsIDY0LCAxNDEsIDEsIDIyOSwgMTQ2LCAxNDEsIDEsIDIyOCwgMTEwLCAxNDEsIDEsIDIzMSwgMzEsIDE0MSwgMSwgCi0gICAgMTU0LCAxNDEsIDEsIDIzNywgMTQ4LCAxNDEsIDI1MSwgMzMsIDUsIDI0NSwgMTY2LCAxNDEsIDMxLCA1LCAyNTUsIDYzLCAKLSAgICAxNDEsIDMxLCA1LCA3NCwgMTQxLCAzMSwgNSwgMjQwLCA0NywgMTQxLCAzMSwgNSwgNjYsIDE0MSwgMzEsIDUsIDIyNSwgNzYsIAotICAgIDE0MSwgMzEsIDUsIDE1MywgMTQ2LCAxNDEsIDMxLCA1LCAxNTMsIDIzMSwgMTAwLCAxNDEsIDMxLCA1LCAxNTMsIDE0OSwgCi0gICAgMTQxLCAzMSwgNSwgMTUzLCAyMzcsIDE0OSwgMTQxLCAzMSwgNSwgNzIsIDE0MSwgMzEsIDUsIDI0OCwgMzUsIDE0MSwgMzEsIAotICAgIDUsIDI1NCwgMjUzLCAxNDEsIDMxLCA1LCA3MywgMTQxLCAzMSwgNSwgMjM0LCA1MiwgMTQxLCAzMSwgNSwgMjU0LCA1MywgCi0gICAgMTQxLCA1LCAyMjQsIDIxNiwgMTQxLCAyNTAsIDE1MSwgMTQxLCA0NywgMjUwLCAxNTEsIDE0MSwgMjEsIDIyMywgODksIAotICAgIDE0MSwgMjEsIDExOCwgMTQxLCAyMSwgMTEzLCAxNDEsIDIxLCAxNjYsIDE0MSwgMjEsIDE1OCwgMTQxLCAyMSwgMTczLCAKLSAgICAxNDEsIDIxLCAxODMsIDE0MSwgMjEsIDE5NCwgMTQxLCAyMSwgMTg3LCAxNDEsIDIxLCAxOTIsIDIzOSwgOSwgMjM3LCAxOTQsIAotICAgIDIxLCAyMjMsIDg5LCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTE4LCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTEzLCAyMzksIAotICAgIDksIDIzNywgMTk0LCAyMSwgMTY2LCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTU4LCAyMzksIDksIDIzNywgMTk0LCAyMSwgCi0gICAgMTczLCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTgzLCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTk0LCAyMzksIDksIDIzNywgCi0gICAgMTk0LCAyMSwgMTg3LCAyMzksIDksIDIzNywgMTk0LCAyMSwgMTkyLCAyMzksIDksIDIzNywgMTk0LCAxLCAxNzcsIDIzOSwgCi0gICAgOSwgMjM3LCAxOTQsIDEsIDIzOCwgMjI3LCAyMzksIDksIDIzNywgMTk0LCAxLCAyNDYsIDE5MywgMjM5LCA5LCAyMzcsIAotICAgIDE5NCwgMSwgMjM1LCAxMzcsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDIzMSwgMzEsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDIyOSwgCi0gICAgMTQ2LCAyMzksIDksIDIzNywgMTk0LCAxLCAyMjMsIDExNywgMjM5LCA5LCAyMzcsIDE5NCwgMSwgMjM0LCAxNzMsIDIzOSwgCi0gICAgOSwgMjM3LCAxOTQsIDEsIDIyNywgMTA3LCAyMzksIDksIDIzNywgMTk0LCAxLCAyNDQsIDE0NywgMjM5LCA5LCAyMzcsIAotICAgIDE5NCwgMSwgMjM2LCAxLCAyMzksIDksIDIzNywgMTk0LCAxLCAyMTMsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDIzMywgOTcsIAotICAgIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDE5OCwgMjM5LCA5LCAyMzcsIDE5NCwgMSwgMjUwLCAxODksIDIzOSwgOSwgMjM3LCAKLSAgICAxOTQsIDEsIDI1MywgNzAsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDIwOCwgMjM5LCA5LCAyMzcsIDE5NCwgMSwgMTkxLCAyMzksIAotICAgIDksIDIzNywgMTk0LCAxLCAyMzgsIDQzLCAyMzksIDksIDIzNywgMTk0LCAxLCAyMjQsIDE3MywgMjM5LCA5LCAyMzcsIDE5NCwgCi0gICAgMSwgMjI2LCAyNTEsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDE1NCwgMjM5LCA5LCAyMzcsIDE5NCwgMSwgMjI1LCA2NCwgMjM5LCAKLSAgICA5LCAyMzcsIDE5NCwgMSwgMjUyLCAzOSwgMjM5LCA5LCAyMzcsIDE5NCwgMSwgNTcsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIAotICAgIDIzNCwgODgsIDIzOSwgOSwgMjM3LCAxOTQsIDEsIDc0LCAyMzksIDksIDIzNywgMTk0LCAxLCAyMzQsIDUyLCAyMzksIDksIAotICAgIDIzNywgMTk0LCAzMSwgMjI1LCAxNTksIDIzOSwgOSwgMjM3LCAxOTQsIDMxLCA3MiwgMjM5LCA5LCAyMzcsIDE5NCwgMzEsIAotICAgIDY2LCAyMzksIDksIDIzNywgMTk0LCAzMSwgMjQ4LCAzNSwgMjM5LCA5LCAyMzcsIDE5NCwgMzEsIDczLCAyMzksIDksIDIzNywgCi0gICAgMTk0LCAyMDYsIDIzMywgMTUsIDIzOSwgOSwgMjM3LCAxOTQsIDIwNiwgMjUyLCAyOSwgMjM5LCA5LCAyMzcsIDE5NCwgMjA2LCAKLSAgICAyNTIsIDMwLCAyMzMsIDE1LCAyMzksIDksIDIzNywgMTk0LCA1LCAyNTAsIDIwNiwgMjM5LCA5LCAyMzcsIDE5NCwgNSwgCi0gICAgMjI5LCAyMiwgMjMxLCAyMjMsIDEsIDE3NywgMjMxLCAyMjMsIDEsIDI0NiwgMTkzLCAyMzEsIDIyMywgMSwgMjM1LCAxMzcsIAotICAgIDIzMSwgMjIzLCAxLCAyMjcsIDEwNywgMjMxLCAyMjMsIDEsIDI1MCwgMTg5LCAyMzEsIDIyMywgMSwgMjM2LCAxLCAyMzEsIAotICAgIDIyMywgMSwgMjEzLCAyMzEsIDIyMywgMSwgMjUzLCA3MCwgMjMxLCAyMjMsIDEsIDE5OCwgMjMxLCAyMjMsIDEsIDI1MiwgCi0gICAgMzksIDIzMSwgMjIzLCAxLCAyMzksIDE3OSwgMjMxLCAyMjMsIDEsIDIzNCwgMTczLCAyMzEsIDIyMywgMSwgMjMxLCAzMSwgCi0gICAgMjMxLCAyMjMsIDEsIDIwOCwgMjMxLCAyMjMsIDEsIDIzOCwgNDMsIDIzMSwgMjIzLCAxLCAxOTEsIDIzMSwgMjIzLCAxLCAKLSAgICAyMjQsIDE3MywgMjMxLCAyMjMsIDEsIDE1NCwgMjMxLCAyMjMsIDEsIDIzNiwgMjQ1LCAyMzEsIDIyMywgMSwgMjM1LCAxMjIsIAotICAgIDIzMSwgMjIzLCAxLCAyMzUsIDE4OSwgMjMxLCAyMjMsIDEsIDIzNCwgMTUzLCAyMzEsIDIyMywgMSwgNTcsIDIzMSwgMjIzLCAKLSAgICAzMSwgNSwgNzQsIDIzMSwgMjIzLCAzMSwgNSwgNjYsIDIzMSwgMjIzLCAzMSwgNSwgNzIsIDIzMSwgMjIzLCAzMSwgNSwgCi0gICAgMjU0LCAyNTMsIDIzMSwgMjIzLCAzMSwgNSwgNzMsIDIzMSwgMjIzLCAzMSwgNSwgMjU0LCA1MywgMjMxLCAyMjMsIDMxLCA1LCAKLSAgICAyNDcsIDE2NSwgMjMxLCAyMjMsIDMxLCA1LCAyNDgsIDU2LCAyMzEsIDIyMywgMjUxLCAzMywgNSwgMjM1LCAxMzksIDIzMSwgCi0gICAgMjIzLCAyNTEsIDMzLCA1LCAxOTksIDIzMSwgMjIzLCAyNTEsIDMzLCA1LCAxNDYsIDIzMSwgMjIzLCAyNTEsIDMzLCA1LCAKLSAgICAyMTIsIDIzMSwgMjIzLCAyMjQsIDIxNiwgMjMxLCAyMjMsIDIzMCwgMjA2LCA3NiwgMTM2LCAxLCA1NywgMTM2LCAxLCA3NCwgCi0gICAgMTM2LCAxLCA2NiwgMTM2LCAxLCA3MiwgMTM2LCAxLCAyNTQsIDI1MywgMTM2LCAxLCA3MywgMTM2LCAxLCAxNzcsIDEzNiwgCi0gICAgMSwgMjM4LCAyMjcsIDEzNiwgMSwgMjQ2LCAxOTMsIDEzNiwgMSwgMjQ2LCA2NiwgMTM2LCAxLCAyMzUsIDk4LCAxMzYsIDEsIAotICAgIDIzNSwgMTM3LCAxMzYsIDEsIDI1MSwgMjA0LCAxMzYsIDEsIDI1MSwgMTcxLCAxMzYsIDEsIDIzOSwgMTc5LCAxMzYsIDEsIAotICAgIDIzOSwgMTYwLCAxMzYsIDEsIDIzNSwgOTEsIDEzNiwgMSwgMjM1LCA5MywgMTM2LCAxLCAyMzUsIDkyLCAxMzYsIDEsIDIyNywgCi0gICAgMTA3LCAxMzYsIDEsIDIyNiwgMjUxLCAxMzYsIDEsIDI1MCwgMTg5LCAxMzYsIDEsIDI1MCwgMjIsIDEzNiwgMSwgMjM0LCAKLSAgICAyMDMsIDEzNiwgMSwgMjM2LCAxLCAxMzYsIDEsIDI1MCwgMTE3LCAxMzYsIDEsIDIxMywgMTM2LCAxLCAyMzIsIDIzMCwgCi0gICAgMTM2LCAxLCAyMzMsIDk3LCAxMzYsIDEsIDI1MywgNzAsIDEzNiwgMSwgMjUyLCAxOTAsIDEzNiwgMSwgMjM2LCA2MSwgMTM2LCAKLSAgICAxLCAxOTgsIDEzNiwgMSwgMjUzLCAxNiwgMTM2LCAxLCAxOTEsIDEzNiwgMSwgMjA4LCAxMzYsIDEsIDIzOCwgNDMsIDEzNiwgCi0gICAgMSwgMjI1LCA2NCwgMTM2LCAxLCAyMjgsIDExMCwgMTM2LCAxLCAyMzEsIDMxLCAxMzYsIDEsIDE1NCwgMTM2LCAzMSwgNSwgCi0gICAgMjU1LCA2MywgMTM2LCAzMSwgNSwgNzQsIDEzNiwgMzEsIDUsIDI0MCwgNDcsIDEzNiwgMzEsIDUsIDI0OCwgMjIsIDEzNiwgCi0gICAgMzEsIDUsIDY2LCAxMzYsIDMxLCA1LCAyMzQsIDg4LCAxMzYsIDMxLCA1LCA3MywgMTM2LCAzMSwgNSwgMjU0LCAyNTMsIAotICAgIDEzNiwgMzEsIDUsIDI1NCwgNTMsIDEzNiwgMzEsIDUsIDIyNSwgMTU5LCAxMzYsIDI1MSwgMzMsIDUsIDE5MSwgMTM2LCAKLSAgICAyNTEsIDMzLCA1LCAyMDgsIDEzNiwgMjUxLCAzMywgNSwgMjM4LCA0MywgMTM2LCAyNTEsIDMzLCA1LCAyMjQsIDE3MywgCi0gICAgMTM2LCAxLCAzNSwgMjM5LCA3NiwgMTM2LCAxLCAzNSwgMjE0LCAxMzYsIDEsIDM1LCAyMzUsIDEzOSwgMTM2LCAyNTEsIDMzLCAKLSAgICA1LCAzNSwgMjM1LCAxMzksIDEzNiwgMSwgMzUsIDI1MSwgMjA1LCAxMzYsIDEsIDM1LCAyMjcsIDEwOSwgMTM2LCAxLCAzNSwgCi0gICAgMTk5LCAxMzYsIDEsIDM1LCAyMzMsIDI0NCwgMTM2LCAxLCAzNSwgMjI0LCAyNSwgMTM2LCAxLCAzNSwgMTQ2LCAxMzYsIDEsIAotICAgIDM1LCAxNDksIDEzNiwgMSwgMzUsIDIyOCwgMTExLCAxMzYsIDI1MSwgMzMsIDUsIDM1LCAxODUsIDEzNiwgMjUxLCAzMywgNSwgCi0gICAgMzUsIDIxMiwgMTM2LCAyMSwgMjIzLCA4OSwgMTM2LCAyMSwgMTE4LCAxMzYsIDIxLCAxMTMsIDEzNiwgMjEsIDE2NiwgMTM2LCAKLSAgICAyMSwgMTU4LCAxMzYsIDIxLCAxNzMsIDEzNiwgMjEsIDE4MywgMTM2LCAyMSwgMTk0LCAxMzYsIDIxLCAxODcsIDEzNiwgMjEsIAotICAgIDE5MiwgMTM2LCAyMzIsIDE3MSwgMjI4LCAxMzQsIDEzNiwgMjMyLCAxNzEsIDI1MCwgMTUxLCAxMzYsIDIzMiwgMTcxLCA0NywgCi0gICAgMjUwLCAxNTEsIDEzNiwgMjMyLCAxNzEsIDIyNiwgNjYsIDI1MCwgMTUxLCA5LCAxMSwgMjQyLCAzMSwgOSwgMTEsIDI0MiwgCi0gICAgMzAsIDksIDExLCAyNDIsIDI5LCA5LCAxMSwgMjQyLCAyOCwgOSwgMTEsIDI0MiwgMjcsIDksIDExLCAyNDIsIDI2LCA5LCAKLSAgICAxMSwgMjQyLCAyNSwgOSwgMTEsIDI0MiwgMjQsIDksIDExLCAyNDIsIDIzLCA5LCAxMSwgMjQyLCAyMiwgOSwgMTEsIDI0MiwgCi0gICAgMjEsIDksIDExLCAyNDIsIDIwLCA5LCAxMSwgMjQyLCAxOSwgOSwgMTEsIDI0MiwgMTgsIDksIDExLCAyNDIsIDE3LCA5LCAKLSAgICAxMSwgMjQyLCAxNiwgOSwgMTEsIDI0MiwgMTUsIDksIDExLCAyNDIsIDE0LCA5LCAxMSwgMjQyLCAxMywgOSwgMTEsIDI0MiwgCi0gICAgMTIsIDksIDExLCAyNDIsIDExLCA5LCAxMSwgMjQyLCAxMCwgOSwgMTEsIDI0MiwgOSwgOSwgMTEsIDI0MiwgOCwgOSwgMTEsIAotICAgIDI0MiwgNywgOSwgMTEsIDI0MiwgNiwgOSwgMTEsIDI0MiwgNSwgOSwgMTEsIDI0MiwgNCwgOSwgMTEsIDI0MiwgMywgOSwgCi0gICAgMTEsIDI0MiwgMiwgOSwgMTEsIDI0MiwgMSwgOSwgMTEsIDI0MiwgMCwgOSwgMTEsIDI0MSwgMjU1LCA5LCAxMSwgMjQxLCAKLSAgICAyNTQsIDksIDExLCAyNDEsIDI1MywgOSwgMTEsIDI0MSwgMjUyLCA5LCAxMSwgMjQxLCAyNTEsIDksIDExLCAyNDEsIDI1MCwgCi0gICAgOSwgMTEsIDI0MSwgMjQ5LCA5LCAxMSwgMjQxLCAyNDgsIDksIDExLCAyNDEsIDI0NywgOSwgMTEsIDI0MSwgMjQ2LCA5LCAKLSAgICAxMSwgMjQxLCAyNDUsIDksIDExLCAyNDEsIDI0NCwgOSwgMTEsIDI0MSwgMjQzLCA5LCAxMSwgMjQxLCAyNDIsIDksIDExLCAKLSAgICAyNDEsIDI0MSwgOSwgMTEsIDI0MSwgMjQwLCA5LCAxMSwgMjQxLCAyMzksIDksIDExLCAyNDEsIDIzOCwgOSwgMTEsIDI0MSwgCi0gICAgMjM3LCA5LCAxMSwgMjQxLCAyMzYsIDksIDExLCAyNDEsIDIzNSwgOSwgMTEsIDI0MSwgMjM0LCA5LCAxMSwgMjQxLCAyMzMsIAotICAgIDksIDExLCAyNDEsIDIzMiwgOSwgMTEsIDI0MSwgMjMxLCA5LCAxMSwgMjQxLCAyMzAsIDksIDExLCAyNDEsIDIyOSwgOSwgCi0gICAgMTEsIDI0MSwgMjI4LCA5LCAxMSwgMjQxLCAyMjcsIDksIDExLCAyNDEsIDIyNiwgOSwgMTEsIDI0MSwgMjI1LCA5LCAxMSwgCi0gICAgMjQxLCAyMjQsIDksIDExLCAyNDEsIDIyMywgOSwgMTEsIDI0MSwgMjIyLCA5LCAxMSwgMjQxLCAyMjEsIDksIDExLCAyNDEsIAotICAgIDIyMCwgOSwgMTEsIDI0MSwgMjE5LCA5LCAxMSwgMjQxLCAyMTgsIDksIDExLCAyNDEsIDIxNywgOSwgMTEsIDI0MSwgMjE2LCAKLSAgICA5LCAxMSwgMjQxLCAyMTUsIDksIDExLCAyNDEsIDIxNCwgOSwgMTEsIDI0MSwgMjEzLCA5LCAxMSwgMjQxLCAyMTIsIDksIAotICAgIDExLCAyNDEsIDIxMSwgOSwgMTEsIDI0MSwgMjEwLCA5LCAxMSwgMjQxLCAyMDksIDksIDExLCAyNDEsIDIwOCwgOSwgMTEsIAotICAgIDI0MSwgMjA3LCA5LCAxMSwgMjQxLCAyMDYsIDksIDExLCAyNDEsIDIwNSwgOSwgMTEsIDI0MSwgMjA0LCA5LCAxMSwgMjQxLCAKLSAgICAyMDMsIDksIDExLCAyNDEsIDIwMiwgOSwgMTEsIDI0MSwgMjAxLCA5LCAxMSwgMjQxLCAyMDAsIDksIDExLCAyNDEsIDE5OSwgCi0gICAgOSwgMTEsIDI0MSwgMTk4LCA5LCAxMSwgMjQxLCAxOTcsIDksIDExLCAyNDEsIDE5NiwgOSwgMTEsIDI0MSwgMTk1LCA5LCAKLSAgICAxMSwgMjQxLCAxOTQsIDksIDExLCAyNDEsIDE5MywgOSwgMTEsIDI0MSwgMTkyLCA5LCAxMSwgMjQxLCAxOTEsIDksIDExLCAKLSAgICAyNDEsIDE5MCwgOSwgMTEsIDI0MSwgMTg5LCA5LCAxMSwgMjQxLCAxODgsIDksIDExLCAyNDEsIDE4NywgOSwgMTEsIDI0MSwgCi0gICAgMTg2LCA5LCAxMSwgMjQxLCAxODUsIDksIDExLCAyNDEsIDE4NCwgOSwgMTEsIDI0MSwgMTgzLCA5LCAxMSwgMjQxLCAxODIsIAotICAgIDksIDExLCAyNDEsIDE4MSwgOSwgMTEsIDI0MSwgMTgwLCA5LCAxMSwgMjQxLCAxNzksIDksIDExLCAyNDEsIDE3OCwgOSwgCi0gICAgMTEsIDI0MSwgMTc3LCA5LCAxMSwgMjQxLCAxNzYsIDksIDExLCAyNDEsIDE3NSwgOSwgMTEsIDI0MSwgMTc0LCA5LCAxMSwgCi0gICAgMjQxLCAxNzMsIDksIDExLCAyNDEsIDE3MiwgOSwgMTEsIDI0MSwgMTcxLCA5LCAxMSwgMjQxLCAxNzAsIDksIDExLCAyNDEsIAotICAgIDE2OSwgOSwgMTEsIDI0MSwgMTY4LCA5LCAxMSwgMjQxLCAxNjcsIDksIDExLCAyNDEsIDE2NiwgOSwgMTEsIDI0MSwgMTY1LCAKLSAgICA5LCAxMSwgMjQxLCAxNjQsIDksIDExLCAyNDEsIDE2MywgOSwgMTEsIDI0MSwgMTYyLCA5LCAxMSwgMjQxLCAxNjEsIDksIAotICAgIDExLCAyNDEsIDE2MCwgOSwgMTEsIDI0MSwgMTU5LCA5LCAxMSwgMjQxLCAxNTgsIDksIDExLCAyNDEsIDE1NywgOSwgMTEsIAotICAgIDI0MSwgMTU2LCA5LCAxMSwgMjQxLCAxNTUsIDksIDExLCAyNDEsIDE1NCwgOSwgMTEsIDI0MSwgMTUzLCA5LCAxMSwgMjQxLCAKLSAgICAxNTIsIDksIDExLCAyNDEsIDE1MSwgOSwgMTEsIDI0MSwgMTUwLCA5LCAxMSwgMjQxLCAxNDksIDksIDExLCAyNDEsIDE0OCwgCi0gICAgOSwgMTEsIDI0MSwgMTQ3LCA5LCAxMSwgMjQxLCAxNDYsIDksIDExLCAyNDEsIDE0NSwgOSwgMTEsIDI0MSwgMTQ0LCA5LCAKLSAgICAxMSwgMjQxLCAxNDMsIDksIDExLCAyNDEsIDE0MiwgOSwgMTEsIDI0MSwgMTQxLCA5LCAxMSwgMjQxLCAxNDAsIDksIDExLCAKLSAgICAyNDEsIDEzOSwgOSwgMTEsIDI0MSwgMTM4LCA5LCAxMSwgMjQxLCAxMzcsIDksIDExLCAyNDEsIDEzNiwgOSwgMTEsIDI0MSwgCi0gICAgMTM1LCA5LCAxMSwgMjQxLCAxMzQsIDksIDExLCAyNDEsIDEzMywgOSwgMTEsIDI0MSwgMTMyLCA5LCAxMSwgMjQxLCAxMzEsIAotICAgIDksIDExLCAyNDEsIDEzMCwgOSwgMTEsIDI0MSwgMTI5LCA5LCAxMSwgMjQxLCAxMjgsIDksIDExLCAyNDEsIDEyNywgOSwgCi0gICAgMTEsIDI0MSwgMTI2LCA5LCAxMSwgMjQxLCAxMjUsIDksIDExLCAyNDEsIDEyNCwgOSwgMTEsIDI0MSwgMTIzLCA5LCAxMSwgCi0gICAgMjQxLCAxMjIsIDksIDExLCAyNDEsIDEyMSwgOSwgMTEsIDI0MSwgMTIwLCA5LCAxMSwgMjQxLCAxMTksIDksIDExLCAyNDEsIAotICAgIDExOCwgOSwgMTEsIDI0MSwgMTE3LCA5LCAxMSwgMjQxLCAxMTYsIDksIDExLCAyNDEsIDExNSwgOSwgMTEsIDI0MSwgMTE0LCAKLSAgICA5LCAxMSwgMjQxLCAxMTMsIDksIDExLCAyNDEsIDExMiwgOSwgMTEsIDI0MSwgMTExLCA5LCAxMSwgMjQxLCAxMTAsIDksIAotICAgIDExLCAyNDEsIDEwOSwgOSwgMTEsIDI0MSwgMTA4LCA5LCAxMSwgMjQxLCAxMDcsIDksIDExLCAyNDEsIDEwNiwgOSwgMTEsIAotICAgIDI0MSwgMTA1LCA5LCAxMSwgMjQxLCAxMDQsIDksIDExLCAyNDEsIDEwMywgOSwgMTEsIDI0MSwgMTAyLCA5LCAxMSwgMjQxLCAKLSAgICAxMDEsIDksIDExLCAyNDEsIDEwMCwgOSwgMTEsIDI0MSwgOTksIDksIDExLCAyNDEsIDk4LCA5LCAxMSwgMjQxLCA5NywgOSwgCi0gICAgMTEsIDI0MSwgOTYsIDksIDExLCAyNDEsIDk1LCA5LCAxMSwgMjQxLCA5NCwgOSwgMTEsIDI0MSwgOTMsIDksIDExLCAyNDEsIAotICAgIDkyLCA5LCAxMSwgMjQxLCA5MSwgOSwgMTEsIDI0MSwgOTAsIDksIDExLCAyNDEsIDg5LCA5LCAxMSwgMjQxLCA4OCwgOSwgCi0gICAgMTEsIDI0MSwgODcsIDksIDExLCAyNDEsIDg2LCA5LCAxMSwgMjQxLCA4NSwgOSwgMTEsIDI0MSwgODQsIDksIDExLCAyNDEsIAotICAgIDgzLCA5LCAxMSwgMjQxLCA4MiwgOSwgMTEsIDI0MSwgODEsIDksIDExLCAyNDEsIDgwLCA5LCAxMSwgMjQxLCA3OSwgOSwgCi0gICAgMTEsIDI0MSwgNzgsIDksIDExLCAyNDEsIDc3LCA5LCAxMSwgMjQxLCA3NiwgOSwgMTEsIDI0MSwgNzUsIDksIDExLCAyNDEsIAotICAgIDc0LCA5LCAxMSwgMjQxLCA3MywgOSwgMTEsIDI0MSwgNzIsIDksIDExLCAyNDEsIDcxLCA5LCAxMSwgMjQxLCA3MCwgOSwgCi0gICAgMTEsIDI0MSwgNjksIDksIDExLCAyNDEsIDY4LCA5LCAxMSwgMjQxLCA2NywgOSwgMTEsIDI0MSwgNjYsIDksIDExLCAyNDEsIAotICAgIDY1LCA5LCAxMSwgMjQxLCA2NCwgOSwgMTEsIDI0MSwgNjMsIDksIDExLCAyNDEsIDYyLCA5LCAxMSwgMjQxLCA2MSwgOSwgCi0gICAgMTEsIDI0MSwgNjAsIDksIDExLCAyNDEsIDU5LCA5LCAxMSwgMjQxLCA1OCwgOSwgMTEsIDI0MSwgNTcsIDksIDExLCAyNDEsIAotICAgIDU2LCA5LCAxMSwgMjQxLCA1NSwgOSwgMTEsIDI0MSwgNTQsIDksIDExLCAyNDEsIDUzLCA5LCAxMSwgMjQxLCA1MiwgOSwgCi0gICAgMTEsIDI0MSwgNTEsIDksIDExLCAyNDEsIDUwLCA5LCAxMSwgMjQxLCA0OSwgOSwgMTEsIDI0MSwgNDgsIDksIDExLCAyNDEsIAotICAgIDQ3LCA5LCAxMSwgMjQxLCA0NiwgOSwgMTEsIDI0MSwgNDUsIDksIDExLCAyNDEsIDQ0LCA5LCAxMSwgMjQxLCA0MywgOSwgCi0gICAgMTEsIDI0MSwgNDIsIDksIDExLCAyNDEsIDQxLCA5LCAxMSwgMjQxLCA0MCwgOSwgMTEsIDI0MSwgMzksIDksIDExLCAyNDEsIAotICAgIDM4LCA5LCAxMSwgMjQxLCAzNywgOSwgMTEsIDI0MSwgMzYsIDksIDExLCAyNDEsIDM1LCA5LCAxMSwgMjQxLCAzNCwgOSwgCi0gICAgMTEsIDI0MSwgMzMsIDksIDExLCAyNDEsIDMyLCA5LCAxMSwgMjQxLCAzMSwgOSwgMTEsIDI0MSwgMzAsIDksIDExLCAyNDEsIAotICAgIDI5LCA5LCAxMSwgMjQxLCAyOCwgOSwgMTEsIDI0MSwgMjcsIDksIDExLCAyNDEsIDI2LCA5LCAxMSwgMjQxLCAyNSwgOSwgCi0gICAgMTEsIDI0MSwgMjQsIDksIDExLCAyNDEsIDIzLCA5LCAxMSwgMjQxLCAyMiwgOSwgMTEsIDI0MSwgMjEsIDksIDExLCAyNDEsIAotICAgIDIwLCA5LCAxMSwgMjQxLCAxOSwgOSwgMTEsIDI0MSwgMTgsIDksIDExLCAyNDEsIDE3LCA5LCAxMSwgMjQxLCAxNiwgOSwgCi0gICAgMTEsIDI0MSwgMTUsIDksIDExLCAyNDEsIDE0LCA5LCAxMSwgMjQxLCAxMywgOSwgMTEsIDI0MSwgMTIsIDksIDExLCAyNDEsIAotICAgIDExLCA5LCAxMSwgMjQxLCAxMCwgOSwgMTEsIDI0MSwgOSwgOSwgMTEsIDI0MSwgOCwgOSwgMTEsIDI0MSwgNywgOSwgMTEsIAotICAgIDI0MSwgNiwgOSwgMTEsIDI0MSwgNSwgOSwgMTEsIDI0MSwgNCwgOSwgMTEsIDI0MSwgMywgOSwgMTEsIDI0MSwgMiwgOSwgCi0gICAgMTEsIDI0MSwgMSwgOSwgMTEsIDI0MSwgMCwgOSwgMTEsIDI0MCwgMjU1LCA5LCAxMSwgMjQwLCAyNTQsIDksIDExLCAyNDAsIAotICAgIDI1MywgOSwgMTEsIDI0MCwgMjUyLCA5LCAxMSwgMjQwLCAyNTEsIDksIDExLCAyNDAsIDI1MCwgOSwgMTEsIDI0MCwgMjQ5LCAKLSAgICA5LCAxMSwgMjQwLCAyNDgsIDksIDExLCAyNDAsIDI0NywgOSwgMTEsIDI0MCwgMjQ2LCA5LCAxMSwgMjQwLCAyNDUsIDksIAotICAgIDExLCAyNDAsIDI0NCwgOSwgMTEsIDI0MCwgMjQzLCA5LCAxMSwgMjQwLCAyNDIsIDksIDExLCAyNDAsIDI0MSwgOSwgMTEsIAotICAgIDI0MCwgMjQwLCA5LCAxMSwgMjQwLCAyMzksIDksIDExLCAyNDAsIDIzOCwgOSwgMTEsIDI0MCwgMjM3LCA5LCAxMSwgMjQwLCAKLSAgICAyMzYsIDksIDExLCAyNDAsIDIzNSwgOSwgMTEsIDI0MCwgMjM0LCA5LCAxMSwgMjQwLCAyMzMsIDksIDExLCAyNDAsIDIzMiwgCi0gICAgOSwgMTEsIDI0MCwgMjMxLCA5LCAxMSwgMjQwLCAyMzAsIDksIDExLCAyNDAsIDIyOSwgOSwgMTEsIDI0MCwgMjI4LCA5LCAKLSAgICAxMSwgMjQwLCAyMjcsIDksIDExLCAyNDAsIDIyNiwgOSwgMTEsIDI0MCwgMjI1LCA5LCAxMSwgMjQwLCAyMjQsIDksIDExLCAKLSAgICAyNDAsIDIyMywgOSwgMTEsIDI0MCwgMjIyLCA5LCAxMSwgMjQwLCAyMjEsIDksIDExLCAyNDAsIDIyMCwgOSwgMTEsIDI0MCwgCi0gICAgMjE5LCA5LCAxMSwgMjQwLCAyMTgsIDksIDExLCAyNDAsIDIxNywgOSwgMTEsIDI0MCwgMjE2LCA5LCAxMSwgMjQwLCAyMTUsIAotICAgIDksIDExLCAyNDAsIDIxNCwgOSwgMTEsIDI0MCwgMjEzLCA5LCAxMSwgMjQwLCAyMTIsIDksIDExLCAyNDAsIDIxMSwgOSwgCi0gICAgMTEsIDI0MCwgMjEwLCA5LCAxMSwgMjQwLCAyMDksIDksIDExLCAyNDAsIDIwOCwgOSwgMTEsIDI0MCwgMjA3LCA5LCAxMSwgCi0gICAgMjQwLCAyMDYsIDksIDExLCAyNDAsIDIwNSwgOSwgMTEsIDI0MCwgMjA0LCA5LCAxMSwgMjQwLCAyMDMsIDksIDExLCAyNDAsIAotICAgIDIwMiwgOSwgMTEsIDI0MCwgMjAxLCA5LCAxMSwgMjQwLCAyMDAsIDksIDExLCAyNDAsIDE5OSwgOSwgMTEsIDI0MCwgMTk4LCAKLSAgICA5LCAxMSwgMjQwLCAxOTcsIDksIDExLCAyNDAsIDE5NiwgOSwgMTEsIDI0MCwgMTk1LCA5LCAxMSwgMjQwLCAxOTQsIDksIAotICAgIDExLCAyNDAsIDE5MywgOSwgMTEsIDI0MCwgMTkyLCA5LCAxMSwgMjQwLCAxOTEsIDksIDExLCAyNDAsIDE5MCwgOSwgMTEsIAotICAgIDI0MCwgMTg5LCA5LCAxMSwgMjQwLCAxODgsIDksIDExLCAyNDAsIDE4NywgOSwgMTEsIDI0MCwgMTg2LCA5LCAxMSwgMjQwLCAKLSAgICAxODUsIDksIDExLCAyNDAsIDE4NCwgOSwgMTEsIDI0MCwgMTgzLCA5LCAxMSwgMjQwLCAxODIsIDksIDExLCAyNDAsIDE4MSwgCi0gICAgOSwgMTEsIDI0MCwgMTgwLCA5LCAxMSwgMjQwLCAxNzksIDksIDExLCAyNDAsIDE3OCwgOSwgMTEsIDI0MCwgMTc3LCA5LCAKLSAgICAxMSwgMjQwLCAxNzYsIDksIDExLCAyNDAsIDE3NSwgOSwgMTEsIDI0MCwgMTc0LCA5LCAxMSwgMjQwLCAxNzMsIDksIDExLCAKLSAgICAyNDAsIDE3MiwgOSwgMTEsIDI0MCwgMTcxLCA5LCAxMSwgMjQwLCAxNzAsIDksIDExLCAyNDAsIDE2OSwgOSwgMTEsIDI0MCwgCi0gICAgMTY4LCA5LCAxMSwgMjQwLCAxNjcsIDksIDExLCAyNDAsIDE2NiwgOSwgMTEsIDI0MCwgMTY1LCA5LCAxMSwgMjQwLCAxNjQsIAotICAgIDksIDExLCAyNDAsIDE2MywgOSwgMTEsIDI0MCwgMTYyLCA5LCAxMSwgMjQwLCAxNjEsIDksIDExLCAyNDAsIDE2MCwgOSwgCi0gICAgMTEsIDI0MCwgMTU5LCA5LCAxMSwgMjQwLCAxNTgsIDksIDExLCAyNDAsIDE1NywgOSwgMTEsIDI0MCwgMTU2LCA5LCAxMSwgCi0gICAgMjQwLCAxNTUsIDksIDExLCAyNDAsIDE1NCwgOSwgMTEsIDI0MCwgMTUzLCA5LCAxMSwgMjQwLCAxNTIsIDksIDExLCAyNDAsIAotICAgIDE1MSwgOSwgMTEsIDI0MCwgMTUwLCA5LCAxMSwgMjQwLCAxNDksIDksIDExLCAyNDAsIDE0OCwgOSwgMTEsIDI0MCwgMTQ3LCAKLSAgICA5LCAxMSwgMjQwLCAxNDYsIDksIDExLCAyNDAsIDE0NSwgOSwgMTEsIDI0MCwgMTQ0LCA5LCAxMSwgMjQwLCAxNDMsIDksIAotICAgIDExLCAyNDAsIDE0MiwgOSwgMTEsIDI0MCwgMTQxLCA5LCAxMSwgMjQwLCAxNDAsIDksIDExLCAyNDAsIDEzOSwgOSwgMTEsIAotICAgIDI0MCwgMTM4LCA5LCAxMSwgMjQwLCAxMzcsIDksIDExLCAyNDAsIDEzNiwgOSwgMTEsIDI0MCwgMTM1LCA5LCAxMSwgMjQwLCAKLSAgICAxMzQsIDksIDExLCAyNDAsIDEzMywgOSwgMTEsIDI0MCwgMTMyLCA5LCAxMSwgMjQwLCAxMzEsIDksIDExLCAyNDAsIDEzMCwgCi0gICAgOSwgMTEsIDI0MCwgMTI5LCA5LCAxMSwgMjQwLCAxMjgsIDksIDExLCAyNDAsIDEyNywgOSwgMTEsIDI0MCwgMTI2LCA5LCAKLSAgICAxMSwgMjQwLCAxMjUsIDksIDExLCAyNDAsIDEyNCwgOSwgMTEsIDI0MCwgMTIzLCA5LCAxMSwgMjQwLCAxMjIsIDksIDExLCAKLSAgICAyNDAsIDEyMSwgOSwgMTEsIDI0MCwgMTIwLCA5LCAxMSwgMjQwLCAxMTksIDksIDExLCAyNDAsIDExOCwgOSwgMTEsIDI0MCwgCi0gICAgMTE3LCA5LCAxMSwgMjQwLCAxMTYsIDksIDExLCAyNDAsIDExNSwgOSwgMTEsIDI0MCwgMTE0LCA5LCAxMSwgMjQwLCAxMTMsIAotICAgIDksIDExLCAyNDAsIDExMiwgOSwgMTEsIDI0MCwgMTExLCA5LCAxMSwgMjQwLCAxMTAsIDksIDExLCAyNDAsIDEwOSwgOSwgCi0gICAgMTEsIDI0MCwgMTA4LCA5LCAxMSwgMjQwLCAxMDcsIDksIDExLCAyNDAsIDEwNiwgOSwgMTEsIDI0MCwgMTA1LCA5LCAxMSwgCi0gICAgMjQwLCAxMDQsIDksIDExLCAyNDAsIDEwMywgOSwgMTEsIDI0MCwgMTAyLCA5LCAxMSwgMjQwLCAxMDEsIDksIDExLCAyNDAsIAotICAgIDEwMCwgOSwgMTEsIDI0MCwgOTksIDksIDExLCAyNDAsIDk4LCA5LCAxMSwgMjQwLCA5NywgOSwgMTEsIDI0MCwgOTYsIDksIAotICAgIDExLCAyNDAsIDk1LCA5LCAxMSwgMjQwLCA5NCwgOSwgMTEsIDI0MCwgOTMsIDksIDExLCAyNDAsIDkyLCA5LCAxMSwgMjQwLCAKLSAgICA5MSwgOSwgMTEsIDI0MCwgOTAsIDksIDExLCAyNDAsIDg5LCA5LCAxMSwgMjQwLCA4OCwgOSwgMTEsIDI0MCwgODcsIDksIAotICAgIDExLCAyNDAsIDg2LCA5LCAxMSwgMjQwLCA4NSwgOSwgMTEsIDI0MCwgODQsIDksIDExLCAyNDAsIDgzLCA5LCAxMSwgMjQwLCAKLSAgICA4MiwgOSwgMTEsIDI0MCwgODEsIDksIDExLCAyNDAsIDgwLCA5LCAxMSwgMjQwLCA3OSwgOSwgMTEsIDI0MCwgNzgsIDksIAotICAgIDExLCAyNDAsIDc3LCA3LCAzLCAyMCwgMjQ3LCA3NCwgNywgMywgMjAsIDI0NywgNzAsIDcsIDMsIDIwLCAyNDcsIDMzLCA3LCAKLSAgICAzLCAyMCwgMjQ3LCA3MywgNywgMywgMjAsIDI0NywgNzIsIDcsIDMsIDIwLCAxODIsIDIzMSwgMzUsIDIyNywgMTA5LCA3LCAKLSAgICAzLCAyMCwgMjI4LCA3MCwgMTIwLCAzLCAyMCwgMjM2LCAyMTEsIDIzNCwgMjMyLCAxMjAsIDMsIDIwLCAyMzYsIDIxMSwgCi0gICAgMjQ4LCAzOSwgMTIwLCAzLCAyMCwgMjM2LCAyMTEsIDIzOSwgMjUyLCAxMjAsIDMsIDIwLCAyMjQsIDIzMSwgMjM0LCAyMzIsIAotICAgIDEyMCwgMywgMjAsIDIzNiwgMjExLCAyMjQsIDY3LCA3OCwgMSwgMjIzLCAxNzYsIDIsIDI0NSwgNTgsIDc4LCAyMzIsIDI1NSwgCi0gICAgMjM5LCAxMDAsIDIyNSwgNTMsIDc4LCAyMCwgMjIzLCAyMDAsIDIyMywgMTc2LCAyMjMsIDE3NiwgMjMzLCAxNjYsIDc4LCAxLCAKLSAgICAyNTQsIDIwMSwgMjU0LCAyOSwgNzgsIDEsIDIyNCwgMTE3LCAyNTQsIDIyNywgNzgsIDEsIDIyNCwgMTE3LCAyNTAsIDE2MCwgCi0gICAgNzgsIDEsIDIyNCwgMTE3LCAyNDUsIDEyMSwgNzgsIDEsIDIyNCwgMTE3LCAyMzksIDU5LCA3OCwgMSwgMjI0LCAxMTcsIAotICAgIDIzOCwgMTIsIDc4LCAxLCAyMjQsIDExNywgMzUsIDIzNiwgMjE1LCA3OCwgMSwgMjI0LCAxMTcsIDIzMSwgMjA1LCA3OCwgMSwgCi0gICAgMjI0LCAxMTcsIDIyNywgNTgsIDc4LCAxLCAyNTQsIDIwMSwgNzksIDUzLCA3OCwgMSwgMjI5LCA3OSwgMiwgMjI5LCA3OSwgCi0gICAgMjQ5LCAxNDAsIDc4LCAxLCAyMjksIDc5LCAyLCAyMjgsIDI0NCwgMjQ5LCAxNDAsIDc4LCAxLCAyMjksIDc5LCAyLCAyNTAsIAotICAgIDE3NiwgMjIsIDIyOSwgNzksIDI0OSwgMTQwLCA3OCwgMSwgMjI5LCA3OSwgMiwgMjUwLCAxNzYsIDIyLCAyMjgsIDI0NCwgCi0gICAgMjQ5LCAxNDAsIDc4LCAxLCA5MiwgMiwgMjMzLCAxNjYsIDc4LCAxLCA5MiwgMiwgMjMyLCAxMjYsIDc4LCAxLCA5MiwgMiwgCi0gICAgMjM3LCAyNywgNzgsIDEsIDI1MiwgMjAxLCAyLCAyNTAsIDE3NSwgNzgsIDEsIDI0NiwgMzUsIDIsIDI1MCwgMTc1LCA3OCwgCi0gICAgMSwgMjUwLCAxNjEsIDIsIDI1MCwgMTc1LCA3OCwgMSwgMjQ1LCAxMjIsIDIsIDIzNywgMjcsIDc4LCAxLCAyMjUsIDQ3LCAyLCAKLSAgICAyNTAsIDE3NSwgNzgsIDEsIDIyMywgMTAwLCAyLCAyNTAsIDE3NSwgNzgsIDEsIDIyNywgMTEsIDIsIDI1MCwgMTc1LCA3OCwgCi0gICAgMSwgMjIzLCAxNzYsIDIsIDI1MCwgMTc1LCA3OCwgMSwgMzUsIDIzOSwgNjAsIDIsIDI1MCwgMTc1LCA3OCwgMSwgMjM5LCAKLSAgICA2MCwgMiwgMjUwLCAxNzUsIDc4LCAxLCAyMzgsIDEzLCAyLCAyNTAsIDE3NSwgNzgsIDEsIDIzNiwgMjE2LCAyLCAyNTAsIAotICAgIDE3NSwgNzgsIDEsIDIzNCwgMTk1LCAyLCAyNTAsIDE3NSwgNzgsIDEsIDIzMSwgMywgMiwgMjUwLCAxNzUsIDc4LCAxLCAzNSwgCi0gICAgMjMzLCAxNTIsIDIsIDI1MCwgMTc1LCA3OCwgMSwgMjMzLCAxNTIsIDIsIDI1MCwgMTc1LCA3OCwgMSwgMjI2LCA0MiwgMiwgCi0gICAgMjUwLCAxNzUsIDc4LCAxLCAyMzIsIDkzLCAyLCAyNTAsIDE3NSwgNzgsIDEsIDIzMSwgMjA2LCAyLCAyNTAsIDE3NSwgNzgsIAotICAgIDEsIDIyOSwgNzksIDIsIDI1MCwgMTc1LCA3OCwgMSwgMjI3LCA1OSwgMiwgMjUwLCAxNzUsIDc4LCAxLCAyMjUsIDQ3LCAyLCAKLSAgICAyNDQsIDIyMywgNzgsIDEsIDI1MiwgMjAxLCAyLCAyMzIsIDE0LCA3OCwgMSwgMjM5LCA2MCwgMiwgMjMyLCAxNCwgNzgsIDEsIAotICAgIDIzMywgMTUyLCAyLCAyMzIsIDE0LCA3OCwgMjAsIDkyLCAyMzgsIDEyLCAxMCwgMSwgOTIsIDIyNCwgMTU4LCA0NCwgMTUsIAotICAgIDEwLCAxLCA5MiwgMjI0LCAxNTgsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjMxLCA0NCwgMTUsIDEwLCAxLCAyNTIsIDIzMSwgCi0gICAgMzUsIDE1LCAxMCwgMSwgMjUyLCAyMzEsIDU5LCAxNSwgMTAsIDEsIDI1MiwgMjMxLCAxMjQsIDE1LCAxMCwgMSwgMjMzLCAKLSAgICAxNDEsIDQ0LCAxNSwgMTAsIDEsIDIzMywgMTQxLCAzNSwgMTUsIDEwLCAxLCAyMzMsIDE0MSwgNTksIDE1LCAxMCwgMSwgCi0gICAgMjMzLCAxNDEsIDEyNCwgMTUsIDEwLCAxLCAyNTIsIDIyMiwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMjIsIDM1LCAxNSwgMTAsIAotICAgIDEsIDI1MiwgMjIyLCA1OSwgMTUsIDEwLCAxLCAyNTIsIDIyMiwgMTI0LCAxNSwgMTAsIDEsIDIyNiwgMTMsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDIyNiwgMTMsIDM1LCAxNSwgMTAsIDEsIDIyNiwgMTMsIDU5LCAxNSwgMTAsIDEsIDIyNiwgMTMsIDEyNCwgMTUsIAotICAgIDEwLCAxLCAyMjcsIDMzLCA0NCwgMTUsIDEwLCAxLCAyMjcsIDMzLCAzNSwgMTUsIDEwLCAxLCAyMjcsIDMzLCA1OSwgMTUsIAotICAgIDEwLCAxLCAyMjcsIDMzLCAxMjQsIDE1LCAxMCwgMSwgMjI2LCAxNSwgNDQsIDE1LCAxMCwgMSwgMjI2LCAxNSwgMzUsIDE1LCAKLSAgICAxMCwgMSwgMjI2LCAxNSwgNTksIDE1LCAxMCwgMSwgMjI2LCAxNSwgMTI0LCAxNSwgMTAsIDEsIDIyNSwgMzcsIDQ0LCAxNSwgCi0gICAgMTAsIDEsIDIyNSwgMzcsIDM1LCAxNSwgMTAsIDEsIDIyNSwgMzcsIDU5LCAxNSwgMTAsIDEsIDIyNSwgMzcsIDEyNCwgMTUsIAotICAgIDEwLCAxLCAyMzMsIDEzOSwgNDQsIDE1LCAxMCwgMSwgMjMzLCAxMzksIDM1LCAxNSwgMTAsIDEsIDIzMywgMTM5LCA1OSwgCi0gICAgMTUsIDEwLCAxLCAyMzMsIDEzOSwgMTI0LCAxNSwgMTAsIDEsIDI0OCwgNzYsIDQ0LCAxNSwgMTAsIDEsIDI0OCwgNzYsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDI0OCwgNzYsIDU5LCAxNSwgMTAsIDEsIDI0OCwgNzYsIDEyNCwgMTUsIDEwLCAxLCAyMzQsIDE2NywgNDQsIAotICAgIDE1LCAxMCwgMSwgMjM0LCAxNjcsIDM1LCAxNSwgMTAsIDEsIDIzNCwgMTY3LCA1OSwgMTUsIDEwLCAxLCAyMzQsIDE2NywgCi0gICAgMTI0LCAxNSwgMTAsIDEsIDIyNywgNDksIDQ0LCAxNSwgMTAsIDEsIDIyNywgNDksIDM1LCAxNSwgMTAsIDEsIDIyNywgNDksIAotICAgIDU5LCAxNSwgMTAsIDEsIDIyNywgNDksIDEyNCwgMTUsIDEwLCAxLCAyMjcsIDQ3LCA0NCwgMTUsIDEwLCAxLCAyMjcsIDQ3LCAKLSAgICAzNSwgMTUsIDEwLCAxLCAyMjcsIDQ3LCA1OSwgMTUsIDEwLCAxLCAyMjcsIDQ3LCAxMjQsIDE1LCAxMCwgMSwgMjUwLCAxMTUsIAotICAgIDQ0LCAxNSwgMTAsIDEsIDI1MCwgMTE1LCAzNSwgMTUsIDEwLCAxLCAyNTAsIDE3MiwgNDQsIDE1LCAxMCwgMSwgMjUwLCAKLSAgICAxNzIsIDM1LCAxNSwgMTAsIDEsIDI0OCwgMTAwLCA0NCwgMTUsIDEwLCAxLCAyNDgsIDEwMCwgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjUwLCAxMTMsIDQ0LCAxNSwgMTAsIDEsIDI1MCwgMTEzLCAzNSwgMTUsIDEwLCAxLCAyMzksIDE2NiwgNDQsIDE1LCAxMCwgCi0gICAgMSwgMjM5LCAxNjYsIDM1LCAxNSwgMTAsIDEsIDIzMSwgOTYsIDQ0LCAxNSwgMTAsIDEsIDIzMSwgOTYsIDM1LCAxNSwgMTAsIAotICAgIDEsIDIzOCwgMjUyLCA0NCwgMTUsIDEwLCAxLCAyMzgsIDI1MiwgMzUsIDE1LCAxMCwgMSwgMjM4LCAyNTIsIDU5LCAxNSwgCi0gICAgMTAsIDEsIDIzOCwgMjUyLCAxMjQsIDE1LCAxMCwgMSwgMjQ2LCAxODEsIDQ0LCAxNSwgMTAsIDEsIDI0NiwgMTgxLCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyNDYsIDE4MSwgNTksIDE1LCAxMCwgMSwgMjQ2LCAxODEsIDEyNCwgMTUsIDEwLCAxLCAyNDUsIDIxMSwgCi0gICAgNDQsIDE1LCAxMCwgMSwgMjQ1LCAyMTEsIDM1LCAxNSwgMTAsIDEsIDI0NSwgMjExLCA1OSwgMTUsIDEwLCAxLCAyNDUsIAotICAgIDIxMSwgMTI0LCAxNSwgMTAsIDEsIDIzNSwgMTA2LCA0NCwgMTUsIDEwLCAxLCAyMzUsIDEwNiwgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjM1LCAxMDYsIDU5LCAxNSwgMTAsIDEsIDIzNSwgMTA2LCAxMjQsIDE1LCAxMCwgMSwgMjM0LCAyNTIsIDI0NiwgNTEsIDQ0LCAKLSAgICAxNSwgMTAsIDEsIDIzNCwgMjUyLCAyNDYsIDUxLCAzNSwgMTUsIDEwLCAxLCAyMzEsIDEyNiwgNDQsIDE1LCAxMCwgMSwgCi0gICAgMjMxLCAxMjYsIDM1LCAxNSwgMTAsIDEsIDIzMSwgMTI2LCA1OSwgMTUsIDEwLCAxLCAyMzEsIDEyNiwgMTI0LCAxNSwgMTAsIAotICAgIDEsIDI0NSwgMTA4LCAyLCA2MiwgNjQsIDQ0LCAxNSwgMTAsIDEsIDI0NSwgMTA4LCAyLCA2MiwgNjQsIDM1LCAxNSwgMTAsIAotICAgIDEsIDI0NSwgMTA4LCAyNDYsIDksIDQ0LCAxNSwgMTAsIDEsIDI0NSwgMTA4LCAyNDYsIDksIDM1LCAxNSwgMTAsIDEsIDI0NSwgCi0gICAgMTA4LCAyNDYsIDksIDU5LCAxNSwgMTAsIDEsIDI0NSwgMTA4LCAyNDYsIDksIDEyNCwgMTUsIDEwLCAxLCAyNDUsIDEwOCwgCi0gICAgMjQ5LCAxNTgsIDQ0LCAxNSwgMTAsIDEsIDI0NSwgMTA4LCAyNDksIDE1OCwgMzUsIDE1LCAxMCwgMSwgMjQ1LCAxMDgsIAotICAgIDI0OSwgMTU4LCA1OSwgMTUsIDEwLCAxLCAyNDUsIDEwOCwgMjQ5LCAxNTgsIDEyNCwgMTUsIDEwLCAxLCA2MiwgMjUzLCAzMCwgCi0gICAgNDQsIDE1LCAxMCwgMSwgNjIsIDI1MywgMzAsIDM1LCAxNSwgMTAsIDEsIDYyLCAyNTMsIDMwLCAyLCAxNjQsIDY0LCA0NCwgCi0gICAgMTUsIDEwLCAxLCA2MiwgMjUzLCAzMCwgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgMjM1LCAxNDAsIDQ0LCAxNSwgMTAsIAotICAgIDEsIDIzNSwgMTQwLCAzNSwgMTUsIDEwLCAxLCAyMzUsIDE0MCwgNTksIDE1LCAxMCwgMSwgMjM1LCAxNDAsIDEyNCwgMTUsIAotICAgIDEwLCAxLCA5NywgNDQsIDE1LCAxMCwgMSwgOTcsIDM1LCAxNSwgMTAsIDEsIDIzNCwgODksIDQ0LCAxNSwgMTAsIDEsIDIzNCwgCi0gICAgODksIDM1LCAxNSwgMTAsIDEsIDIyMywgMTU5LCA0NCwgMTUsIDEwLCAxLCAyMjMsIDE1OSwgMzUsIDE1LCAxMCwgMSwgOTcsIAotICAgIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIDIyNSwgNDMsIDQ0LCAxNSwgMTAsIDEsIDIyNSwgNDMsIDM1LCAxNSwgMTAsIAotICAgIDEsIDIzOCwgMTg1LCAyMzQsIDg5LCA0NCwgMTUsIDEwLCAxLCAyMzgsIDE4NSwgMjM0LCA4OSwgMzUsIDE1LCAxMCwgMSwgCi0gICAgMjM4LCAxODUsIDIyMywgMTU5LCA0NCwgMTUsIDEwLCAxLCAyMzgsIDE4NSwgMjIzLCAxNTksIDM1LCAxNSwgMTAsIDEsIAotICAgIDE2MSwgNDQsIDE1LCAxMCwgMSwgMTYxLCAzNSwgMTUsIDEwLCAxLCAxNjEsIDU5LCAxNSwgMTAsIDEsIDE2MSwgMTI0LCAxNSwgCi0gICAgMTAsIDEsIDIyNSwgMTU1LCAyMzksIDcsIDIzOCwgMTg1LCA5MiwgMTc1LCA1OSwgMTUsIDEwLCAxLCAyMjUsIDE1NSwgMjM5LCAKLSAgICA3LCAyMzgsIDE4NSwgOTIsIDE3NSwgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMjU1LCAyMCwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyNTUsIDIwLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgCi0gICAgNjQsIDIsIDIyNCwgMTQ1LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIyNCwgMTQ1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDk3LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDk3LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIzNCwgODksIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgCi0gICAgMjM0LCA4OSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAyMjMsIDE1OSwgNDQsIDE1LCAxMCwgMjAsIDYyLCAKLSAgICAyLCAxNjQsIDY0LCAyLCAyMjMsIDE1OSwgMzUsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxNjEsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTYxLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDE2MSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDIyNSwgMTU1LCAyMzgsIDE4NSwgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyMjUsIDE1NSwgMjM4LCAxODUsIDYyLCAyLCAxNjQsIDY0LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjI1LCAxNTUsIDIzOCwgMTg1LCA2MiwgMiwgMTY0LCA2NCwgMiwgOTIsIDE3NSwgNTksIDE1LCAxMCwgMSwgMjQ3LCAxMDcsIAotICAgIDYyLCA0NCwgMTUsIDEwLCAxLCAyNDcsIDEwNywgNjIsIDM1LCAxNSwgMTAsIDEsIDI0NywgMTA3LCA2MiwgNTksIDE1LCAxMCwgCi0gICAgMSwgMjQ3LCAxMDcsIDYyLCAxMjQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMTY0LCA2NCwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDU1LCA0NCwgMTUsIAotICAgIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgCi0gICAgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjUyLCAyMjQsIDIsIDEwMSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgNTUsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCA2MiwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDEwMSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDIyNywgMzUsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjI3LCAKLSAgICAzNSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIAotICAgIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDIyNiwgMjM3LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDIyNiwgMjM3LCAyLCA5MiwgCi0gICAgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMTIzLCAyLCAxMDEsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAxMjMsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMTAxLCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAxMDEsIAotICAgIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjAyLCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDEwMSwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDIwMiwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgMjMwLCAyMDIsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAyMDIsIDQ0LCAxNSwgMTAsIDIwLCAyMzAsIAotICAgIDIwMiwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyMzEsIDI1LCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAyMzEsIDI1LCAyLCAKLSAgICA1NSwgNDQsIDE1LCAxMCwgMjAsIDI1MCwgMTg1LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgMTAxLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjUwLCAxODUsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDI1MCwgMTg1LCAyLCA1NSwgNDQsIAotICAgIDE1LCAxMCwgMjAsIDIyNywgOTIsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDIyNywgOTIsIDIsIDU1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjIzLCAxMTQsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIAotICAgIDI1NCwgMjQ5LCAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDI0NiwgNjQsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDI0NiwgCi0gICAgNjQsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgCi0gICAgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgNTUsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyNDcsIDg4LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgNjIsIDQ0LCAxNSwgCi0gICAgMTAsIDIwLCAyMzIsIDEzMiwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjMyLCAxMzIsIDIsIDU1LCA0NCwgMTUsIDEwLCAKLSAgICAyMCwgMjMyLCAxMzIsIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgNjIsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyMzksIDYwLCAyLCA5MiwgNDQsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDIzOSwgCi0gICAgNjAsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIAotICAgIDIxNiwgNDQsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgMjM5LCA2MCwgMiwgOTIsIDE3NSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCAyMTYsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA1NSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgNjIsIDQ0LCAxNSwgMTAsIAotICAgIDIwLCA1NSwgMiwgMTIzLCA0NCwgMTUsIDEwLCAyMCwgNTUsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDU1LCAyLCAyMDIsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCA1NSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCA1NSwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgCi0gICAgMjAsIDU1LCAyLCA2MiwgNDQsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCAxMjMsIDQ0LCAxNSwgMTAsIDIwLCAyMzQsIAotICAgIDI1MiwgMiwgMTAxLCA0NCwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIDIsIDIwMiwgNDQsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAKLSAgICAyLCA1NSwgNDQsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIDIsIAotICAgIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjQ1LCAxMDgsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDI0NSwgMTA4LCAyLCA1NSwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDI0NSwgMTA4LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjQ1LCAxMDgsIDIsIDYyLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDEyMywgNDQsIDE1LCAxMCwgMjAsIDYyLCAyLCAxMDEsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICA2MiwgMiwgMjAyLCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDkyLCAxNzUsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCA2MiwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyMjYsIDI0NiwgMiwgMjI3LCAyMTksIDkyLCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjMxLCAyMjYsIDIsIDIyNywgMjE5LCA5MiwgNDQsIDE1LCAxMCwgMjAsIDkyLCAxNzUsIDIsIDIyNywgCi0gICAgMjE5LCA5MiwgNDQsIDE1LCAxMCwgMjAsIDIyOSwgMTM4LCAyLCAyNTAsIDE1NSwgNDQsIDE1LCAxMCwgMjAsIDIyOSwgMTM4LCAKLSAgICAyLCAyMzksIDIyLCA0NCwgMTUsIDEwLCAyMCwgMjI5LCAxMzgsIDIsIDI0NywgMTA1LCA0NCwgMTUsIDEwLCAyMCwgMjI5LCAKLSAgICAxMzgsIDIsIDI1MCwgMTU3LCA0NCwgMTUsIDEwLCAyMCwgMjI5LCAxMzgsIDIsIDIzOSwgMjQsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyMjksIDEzOCwgMiwgMjI3LCAyMTksIDkyLCA0NCwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIzMSwgMjI2LCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIyMywgMTExLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgCi0gICAgNjQsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDIzNCwgMjUyLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgNjIsIDIsIDE2NCwgNjQsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNjIsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMjMxLCAyMjYsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMjIzLCAxMTEsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMjM0LCAyNTIsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDIzMSwgMjI2LCAzNSwgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgMjIzLCAKLSAgICAxMTEsIDM1LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDIzNCwgCi0gICAgMjUyLCAzNSwgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDYyLCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDIzMSwgMjI2LCAzNSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDIyMywgCi0gICAgMTExLCAzNSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDIzNCwgCi0gICAgMjUyLCAzNSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMjYsIDIzNywgMiwgCi0gICAgNjIsIDM1LCAxNSwgMTAsIDIwLCAyNDcsIDg4LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgNjIsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIzMiwgMTMyLCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDkyLCAzNSwgMTUsIDEwLCAyMCwgMjM5LCA2MCwgMiwgMjE2LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjM5LCA2MCwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjM5LCA2MCwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDU1LCAyLCA5MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCAyMzEsIDIyNiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDIzNCwgMjUyLCAyLCAyMjMsIDExMSwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDIzNCwgMjUyLCAyLCAyMzQsIDI1MiwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjM0LCAyNTIsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgOTIsIDE3NSwgMiwgMjI3LCAyMTksIDkyLCAzNSwgMTUsIAotICAgIDEwLCAyMCwgNjIsIDIsIDIzMSwgMjI2LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDIyMywgMTExLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgNjIsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDIzNCwgMjUyLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDkyLCAKLSAgICAxNzUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgMTIzLCAKLSAgICA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDE2NCwgNjQsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDYyLCAyLCAxNjQsIDY0LCAKLSAgICAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgCi0gICAgMTY0LCA2NCwgMiwgMjQ1LCAxMDgsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMjQsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIAotICAgIDIyNCwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTIsIDIyNCwgMiwgMjQ1LCAxMDgsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIAotICAgIDM1LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCAKLSAgICAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDI0NSwgCi0gICAgMTA4LCA1OSwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMTIzLCAyLCAxMDEsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMTAxLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAxMDEsIAotICAgIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjAyLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDU1LCA1OSwgMTUsIAotICAgIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAxMDEsIDU5LCAxNSwgMTAsIAotICAgIDIwLCAyMzAsIDIwMiwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjMxLCAyNSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjMxLCAyNSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjMxLCAKLSAgICAyNSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjUwLCAxODUsIDIsIAotICAgIDEwMSwgNTksIDE1LCAxMCwgMjAsIDI1MCwgMTg1LCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgNTUsIAotICAgIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDkyLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMjMsIDExNCwgMiwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNTQsIDI0OSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDU1LCA1OSwgMTUsIDEwLCAKLSAgICAyMCwgMjQ2LCA2NCwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjQ2LCA2NCwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNDcsIAotICAgIDg4LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyNDcsIDg4LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyNDcsIDg4LCAyLCAKLSAgICAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNDcsIDg4LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIzMiwgMTMyLCAyLCAxMDEsIAotICAgIDU5LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCAxMjMsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyMzksIDYwLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAKLSAgICAyMzksIDYwLCAyLCAyMTYsIDU5LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDIwMiwgNTksIDE1LCAKLSAgICAxMCwgMjAsIDIxNiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDI0NSwgMTA4LCA1OSwgMTUsIDEwLCAyMCwgNTUsIAotICAgIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCA1OSwgMTUsIAotICAgIDEwLCAyMCwgNTUsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDIzNCwgCi0gICAgMjUyLCAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCAyMzQsIDI1MiwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIAotICAgIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIDIsIDI0NSwgMTA4LCA1OSwgMTUsIDEwLCAyMCwgMjQ1LCAxMDgsIAotICAgIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIDI0NSwgMTA4LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI0NSwgMTA4LCAyLCAKLSAgICAyMjcsIDIxOSwgOTIsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgNjIsIDIsIDEwMSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDYyLCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgCi0gICAgMjQ1LCAxMDgsIDU5LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTY0LCA2NCwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgNjIsIDIsIAotICAgIDE2NCwgNjQsIDIsIDI0NSwgMTA4LCAxMjQsIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAKLSAgICAyNTIsIDIyNCwgMiwgMjQ1LCAxMDgsIDEyNCwgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgCi0gICAgMjI3LCAzNSwgMiwgMjQ1LCAxMDgsIDEyNCwgMTUsIDEwLCAyMCwgMjI2LCAyMzcsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIAotICAgIDIyNiwgMjM3LCAyLCAyNDUsIDEwOCwgMTI0LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgCi0gICAgMjMwLCAyMDIsIDIsIDI0NSwgMTA4LCAxMjQsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCAKLSAgICAyMjksIDExMSwgMiwgMjQ1LCAxMDgsIDEyNCwgMTUsIDEwLCAyMCwgMjM5LCA2MCwgMiwgMjE2LCAxMjQsIDE1LCAxMCwgMjAsIAotICAgIDIzOSwgNjAsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDIxNiwgMiwgNTUsIDEyNCwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIAotICAgIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCAyNDUsIDEwOCwgMTI0LCAxNSwgMTAsIDIwLCA2MiwgMiwgCi0gICAgNTUsIDEyNCwgMTUsIDEwLCAyMCwgNjIsIDIsIDI0NSwgMTA4LCAxMjQsIDE1LCAxMCwgMjAsIDIyOSwgMTM4LCAyLCAyNDcsIAotICAgIDEwNSwgMTI0LCAxNSwgMTAsIDIwLCAyMjksIDEzOCwgMiwgMjUwLCAxNTcsIDEyNCwgMTUsIDEwLCAyMCwgMjI5LCAxMzgsIAotICAgIDIsIDIzOSwgMjQsIDEyNCwgMTUsIDEwLCAyMCwgMjI3LCA5MiwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDIyNywgCi0gICAgOTIsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTQsIAotICAgIDI0OSwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyNDYsIDY0LCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjQ2LCA2NCwgCi0gICAgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAKLSAgICA2MiwgNDQsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIAotICAgIDYyLCA0NCwgMTUsIDEwLCAyMCwgMTAxLCAyLCA5MiwgMTc1LCA0NCwgMTUsIDEwLCAyMCwgMTAxLCAyLCA2MiwgNDQsIDE1LCAKLSAgICAxMCwgMjAsIDEyMywgMiwgOTIsIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDEyMywgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIAotICAgIDIsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyMDIsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjMxLCAyNSwgMiwgOTIsIAotICAgIDE3NSwgNDQsIDE1LCAxMCwgMjAsIDIzMSwgMjUsIDIsIDYyLCA0NCwgMTUsIDEwLCAyMCwgMjUwLCAxODUsIDIsIDkyLCAKLSAgICAxNzUsIDQ0LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgNjIsIDQ0LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMTIzLCAKLSAgICA0NCwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDEwMSwgNDQsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCAyMDIsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgNTUsIDQ0LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMjMxLCAyMjYsIDQ0LCAKLSAgICAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgMjMxLCAyMjYsIDQ0LCAxNSwgMTAsIDIwLCAyMzEsIDI1LCAyLCAyMzEsIDIyNiwgCi0gICAgNDQsIDE1LCAxMCwgMjAsIDI1MCwgMTg1LCAyLCAyMzEsIDIyNiwgNDQsIDE1LCAxMCwgMjAsIDIyNywgOTIsIDIsIDkyLCAKLSAgICAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMjcsIDkyLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI1NCwgMjQ5LCAyLCA5MiwgCi0gICAgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQ2LCA2NCwgMiwgOTIsIAotICAgIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgNjQsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDkyLCAKLSAgICAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgOTIsIAotICAgIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDEwMSwgMiwgOTIsIDE3NSwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjAyLCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjAyLCAyLCAKLSAgICA2MiwgMzUsIDE1LCAxMCwgMjAsIDIzMSwgMjUsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMzEsIDI1LCAyLCA2MiwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDI1MCwgMTg1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjUwLCAxODUsIDIsIDYyLCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDEyMywgMzUsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCAxMDEsIDM1LCAKLSAgICAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMjAyLCAzNSwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDU1LCAzNSwgMTUsIAotICAgIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDIzMSwgMjI2LCAzNSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDIzMSwgMjI2LCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjMxLCAyNSwgMiwgMjMxLCAyMjYsIDM1LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgMjMxLCAyMjYsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDEwMSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyMzAsIDIwMiwgMiwgMjQ1LCAxMDgsIDU5LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMjQ1LCAxMDgsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMjcsIDkyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAxMjMsIDEyNCwgMTUsIAotICAgIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDEwMSwgMTI0LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgMjAyLCAxMjQsIDE1LCAxMCwgCi0gICAgMjAsIDIyOSwgMTExLCAyLCAxMjMsIDEyNCwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDEwMSwgMTI0LCAxNSwgMTAsIDIwLCAKLSAgICAyMjksIDExMSwgMiwgMjAyLCAxMjQsIDE1LCAxMCwgMjAsIDIyNywgOTIsIDIsIDU1LCAxMjQsIDE1LCAxMCwgMjAsIDIyMywgCi0gICAgMTE0LCAyLCA1NSwgMTI0LCAxNSwgMTAsIDIwLCA5MiwgMiwgMjQ3LCAxMDMsIDM1LCAxNSwgMTAsIDIwLCA5MiwgMiwgMjQ3LCAKLSAgICAxMDMsIDQ0LCAxNSwgMjM0LCAyNCwgNDIsIDIzMywgMTgwLCAyMzQsIDI0LCA0MSwgMjMzLCAxODAsIDEwLCAyMCwgMjI3LCAKLSAgICAzNSwgMiwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDEwMSwgMiwgMTIzLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjI3LCAzNSwgMiwgMTAxLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCAxMDEsIDIsIDU1LCA1OSwgCi0gICAgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDU1LCAyLCAKLSAgICAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCA1NSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgCi0gICAgNTUsIDIsIDIwMiwgNTksIDE1LCAxMCwgMjAsIDEyMywgMiwgNTUsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgCi0gICAgNTUsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDEwMSwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMTAxLCAyLCAKLSAgICA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAxMDEsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDIzMCwgMjAyLCAyLCAxMjMsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAxMjMsIDIsIDkyLCAxNzUsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMzAsIDIwMiwgMiwgNTUsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCA1NSwgCi0gICAgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDU1LCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMzAsIAotICAgIDIwMiwgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDU1LCAyLCA1NSwgNTksIDE1LCAxMCwgCi0gICAgMjAsIDIzMSwgMjUsIDIsIDEwMSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgMjMxLCAyNSwgMiwgMTAxLCAyLCAxMDEsIDU5LCAKLSAgICAxNSwgMTAsIDIwLCAyMzEsIDI1LCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMTAxLCAyLCAKLSAgICA1NSwgMzUsIDE1LCAxMCwgMjAsIDIyOSwgMTExLCAyLCAxMDEsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIAotICAgIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgNTUsIDIsIDIwMiwgMzUsIDE1LCAxMCwgMjAsIDIyOSwgCi0gICAgMTExLCAyLCA1NSwgMiwgMjAyLCA1OSwgMTUsIDEwLCAyMCwgMjI5LCAxMTEsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDIyOSwgMTExLCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgMTAxLCAyLCA5MiwgMTc1LCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjUwLCAxODUsIDIsIDIwMiwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyNTAsIDE4NSwgMiwgCi0gICAgMjAyLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIyNywgOTIsIDIsIDU1LCAyLCAxMDEsIDM1LCAxNSwgMTAsIDIwLCAyMjcsIAotICAgIDkyLCAyLCA1NSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgMjI3LCA5MiwgMiwgNTUsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgCi0gICAgMjI3LCA5MiwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDEyMywgMiwgNTUsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyNTQsIDI0OSwgMiwgNTUsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjU0LCAyNDksIDIsIDU1LCAyLCA1NSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDI1NCwgMjQ5LCAyLCA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgNjQsIDIsIAotICAgIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgNjQsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDI0NiwgCi0gICAgNjQsIDIsIDU1LCAyLCA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgMjAyLCAyLCA1NSwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI0NywgODgsIDIsIDIwMiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgNTUsIDIsIDEwMSwgCi0gICAgMzUsIDE1LCAxMCwgMjAsIDIzMiwgMTMyLCAyLCA1NSwgMiwgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDEwMSwgMiwgCi0gICAgNTUsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDEwMSwgMiwgCi0gICAgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTIzLCAyLCAxMjMsIDU5LCAxNSwgMTAsIDIwLCAyMTYsIDIsIAotICAgIDEyMywgMiwgMTIzLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAyMDIsIDIsIDU1LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICAyMDIsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA1NSwgMiwgMTAxLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAKLSAgICA1NSwgMiwgMTAxLCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDEwMSwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIAotICAgIDEwMSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDU1LCAyLCAKLSAgICAxMjMsIDIsIDEwMSwgNTksIDE1LCAxMCwgMjAsIDU1LCAyLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIAotICAgIDIwMiwgMiwgMTIzLCA1OSwgMTUsIDEwLCAyMCwgNTUsIDIsIDIwMiwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgCi0gICAgMTIzLCAyLCAyMDIsIDU5LCAxNSwgMTAsIDIwLCAyNDUsIDEwOCwgMiwgNTUsIDIsIDEyMywgNTksIDE1LCAxMCwgMjAsIAotICAgIDI0NSwgMTA4LCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgMTAsIDIwLCAyMzQsIDI1MiwgMiwgMTAxLCAyLCA1NSwgNTksIDE1LCAKLSAgICAxMCwgMjAsIDIzNCwgMjUyLCAyLCAxMDEsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMzQsIDI1MiwgMiwgMTIzLCAKLSAgICAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCAxMjMsIDIsIDU1LCA1OSwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIAotICAgIDIsIDEyMywgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIAotICAgIDIwLCAyMzQsIDI1MiwgMiwgNTUsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgNTUsIDIsIDU1LCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1MiwgMjI0LCAyLCAyMDIsIDIsIDYyLCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMjI3LCAzNSwgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDEyMywgCi0gICAgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDIyNywgMzUsIDIsIDIwMiwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMjcsIAotICAgIDM1LCAyLCAyMDIsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAyMjcsIDM1LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgCi0gICAgMTAsIDIwLCAyMjcsIDM1LCAyLCA1NSwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIDEyMywgMiwgNTUsIDIsIDYyLCAKLSAgICAzNSwgMTUsIDEwLCAyMCwgMTIzLCAyLCAxMDEsIDIsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDIwLCAxMjMsIDIsIDU1LCAyLCAKLSAgICA5MiwgMTc1LCAzNSwgMTUsIDEwLCAyMCwgMjMwLCAyMDIsIDIsIDIwMiwgMiwgOTIsIDE3NSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDIzMSwgMjUsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMjksIDExMSwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDI1MCwgMTg1LCAyLCAxMDEsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCAxMjMsIDIsIDYyLCAzNSwgCi0gICAgMTUsIDEwLCAyMCwgMjE2LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCA2MiwgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAKLSAgICAxMCwgMjAsIDYyLCAyLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgNjIsIDIsIDU1LCAyLCA2MiwgMzUsIDE1LCAxMCwgCi0gICAgMjAsIDU1LCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAKLSAgICAyMCwgMjM0LCAyNTIsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMzIsIDEzMiwgMiwgNTUsIDIsIDEwMSwgNTksIAotICAgIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTAxLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDI1NCwgMjQ5LCAyLCA1NSwgMiwgNjIsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCA1NSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMzQsIDI1MiwgMiwgMTIzLCAKLSAgICAyLCAxMDEsIDU5LCAxNSwgMTAsIDIwLCA1NSwgMiwgMjAyLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgMTIzLCAKLSAgICAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIzOSwgNjAsIDIsIDU1LCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgCi0gICAgMTIzLCAyLCA1NSwgMzUsIDE1LCAxMCwgMjAsIDIzNCwgMjUyLCAyLCAxMjMsIDIsIDEwMSwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDEyMywgMiwgMTAxLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIDEwMSwgMiwgMTIzLCAyLCA2MiwgMzUsIDE1LCAxMCwgMjAsIAotICAgIDU1LCAyLCAxMjMsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjQ3LCA4OCwgMiwgNTUsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgCi0gICAgMjUyLCAyMjQsIDIsIDEwMSwgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMzksIDYwLCAyLCA1NSwgMiwgNTUsIDU5LCAxNSwgCi0gICAgMTAsIDIwLCAyNTQsIDI0OSwgMiwgMTIzLCAyLCA1NSwgNTksIDE1LCAxMCwgMjAsIDIzMSwgMjUsIDIsIDU1LCAyLCA1NSwgCi0gICAgNTksIDE1LCAxMCwgMjAsIDIzMCwgMjAyLCAyLCAyMDIsIDIsIDYyLCAzNSwgMTUsIDEwLCAyMCwgMjM0LCAyNTIsIDIsIAotICAgIDEyMywgMiwgNjIsIDM1LCAxNSwgMTAsIDIwLCAyMzEsIDksIDIyNSwgODUsIDI1NCwgODcsIDIzOCwgMTM0LCAyMjgsIDM5LCAKLSAgICA1LCA0NCwgMTUsIDEwLCAyMCwgMjMyLCAxMjgsIDIyNSwgODUsIDI1NCwgODcsIDIzOCwgMTM0LCAyMjgsIDM5LCA1LCA0NCwgCi0gICAgMTUsIDEwLCAyMCwgMjU0LCAyMTUsIDQ0LCAxNSwgMTAsIDIwLCAyNTQsIDIzNywgNDQsIDE1LCAxMCwgMjAsIDIzNiwgOTcsIAotICAgIDQ0LCAxNSwgMTAsIDIwLCAyMzEsIDEwLCA0NCwgMTUsIDEwLCAyMCwgMjMxLCAyNTQsIDQ0LCAxNSwgMTAsIDIwLCAyNTQsIAotICAgIDIyOSwgNDQsIDE1LCAxMCwgMjAsIDIyNCwgMTYwLCA0NCwgMTUsIDEwLCAyMCwgMjMxLCA5LCA0NCwgMTUsIDEwLCAyMCwgCi0gICAgMjMxLCA4LCAyNTQsIDIyOSwgMjI0LCAxNTksIDEwLCAyMCwgMjM5LCAxNzYsIDIzMSwgMTc5LCA1MywgMTAsIDIwLCAyNTIsIAotICAgIDE1OCwgMjU0LCAxMzIsIDI1NCwgMTMzLCAzOCwgMjMwLCAxOTIsIDM4LCAyMzAsIDgxLCAzOCwgMjMwLCAxMywgMzgsIDIzMCwgCi0gICAgMiwgMzgsIDIyOSwgMjQ3LCAzOCwgMjI5LCAyMzYsIDM4LCAyMjksIDIyNSwgMzgsIDIyOSwgMjE0LCAzOCwgMjI5LCAyMDMsIAotICAgIDM4LCAyMzAsIDE5MSwgMzgsIDIzMCwgMTgwLCAzOCwgMjMwLCAxNjksIDM4LCAyMzAsIDE1OCwgMzgsIDIzMCwgMTQ3LCAzOCwgCi0gICAgMjMwLCAxMzYsIDM4LCAyMzAsIDEyNSwgMjMyLCAyMDgsIDIxMSwgMzIsIDYxLCAyNTEsIDU0LCAyMzIsIDIwOCwgMjExLCAKLSAgICAzMiwgNjEsIDkwLCAyNTEsIDU0LCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDkwLCAyNDYsIDIxOCwgMjI4LCAzOCwgMjMyLCAKLSAgICAyMDgsIDIxMSwgMzIsIDYxLCAyNTEsIDYxLCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDIyOSwgMTg2LCAyMzIsIDIwOCwgCi0gICAgMjExLCAzMiwgNjEsIDI0NywgMTQ5LCA3NiwgMjMyLCAyMDgsIDIxMSwgMzIsIDYxLCAyMzIsIDY5LCA3NiwgMjMyLCAyMDgsIAotICAgIDIxMSwgMzIsIDYxLCA0MiwgNjMsIDIzNywgMjE3LCAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDEsIDYzLCAyMzcsIAotICAgIDIxNywgMjUyLCAxMTQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgMTY5LCAyNDcsIDI0OSwgMzYsIDIwLCA0MiwgMjQ1LCAKLSAgICAxNTEsIDM2LCAyMCwgNDEsIDI0NSwgMTUxLCAzNiwgNDcsIDIyNiwgMTU5LCA0MiwgMjQ1LCAxNTEsIDM2LCA0NywgMjI2LCAKLSAgICAxNTksIDQxLCAyNDUsIDE1MSwgMzYsIDIzNywgNjQsIDQyLCAyNDUsIDE1MSwgMzYsIDIzNywgNjQsIDQxLCAyNDUsIDE1MSwgCi0gICAgMzYsIDI1MSwgMzcsIDIzNywgNjMsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgMTM1LCA1NiwgMjM3LCAyNDIsIDIzMiwgMjA4LCAKLSAgICAyMTEsIDMyLCA2MSwgMjQ3LCAyNDgsIDI1MCwgMTMwLCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDI0NywgMjQwLCAyNTAsIAotICAgIDEzMCwgMjMyLCAyMDgsIDIxMSwgMzIsIDYxLCAxODQsIDIzNywgMTcwLCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDIyNCwgCi0gICAgMTQ2LCAxODQsIDIzNywgMTcwLCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDQyLCAyMzMsIDE4MCwgMjMyLCAyMDgsIDIxMSwgCi0gICAgMzIsIDYxLCA0MSwgMjMzLCAxODAsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDIsIDI1MCwgMjIzLCAxMDQsIDIzMiwgMjA4LCAKLSAgICAyMTEsIDMyLCA2MSwgNDEsIDI1MCwgMjIzLCAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDIsIDIyNiwgMTAwLCAyMjksIAotICAgIDEwNCwgMTA0LCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDQxLCAyMjYsIDEwMCwgMjI5LCAxMDQsIDEwNCwgMjMyLCAyMDgsIAotICAgIDIxMSwgMzIsIDYxLCA0MiwgODYsIDIzNywgMjE3LCAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDEsIDg2LCAyMzcsIAotICAgIDIxNywgMTA0LCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDQyLCA0NywgMjU0LCAxODIsIDEwNCwgMjMyLCAyMDgsIDIxMSwgCi0gICAgMzIsIDYxLCA0MSwgNDcsIDI1NCwgMTgyLCAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDIsIDI1NCwgMTgyLCAxMDQsIAotICAgIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDEsIDI1NCwgMTgyLCAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDIsIDI1MSwgCi0gICAgMTEsIDEwNCwgMjMyLCAyMDgsIDIxMSwgMzIsIDYxLCA0MSwgMjUxLCAxMSwgMTA0LCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIAotICAgIDQyLCA2MywgMjUxLCAxMSwgMTA0LCAyMzIsIDIwOCwgMjExLCAzMiwgNjEsIDQxLCA2MywgMjUxLCAxMSwgMTA0LCAyMjksIAotICAgIDE2OCwgMjQ5LCAxNDAsIDYzLCAyMjksIDE2OCwgMjQ5LCAxNDAsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDIsIDM3LCAKLSAgICAxMDQsIDIzMiwgMjA4LCAyMTEsIDMyLCA2MSwgNDEsIDM3LCAxMDQsIDI1MCwgMTI5LCAyMzQsIDEsIDI1MSwgMjE2LCAyMzQsIAotICAgIDEsIDIyNCwgMTQ2LCAyMzQsIDEsIDQ3LCAyMjQsIDE0NiwgMjM0LCAxLCAyNTAsIDEyOSwgMTg0LCAyMzcsIDE3MCwgMjUxLCAKLSAgICAyMTYsIDE4NCwgMjM3LCAxNzAsIDIyNCwgMTQ2LCAxODQsIDIzNywgMTcwLCAzLCAyNTEsIDU0LCAzLCA5MCwgMjUxLCA1NCwgCi0gICAgMywgMjQ2LCAyMTgsIDIyOCwgMzgsIDMsIDIyOSwgMTg2LCAzLCAyNTEsIDYxLCAzLCAyMzIsIDY5LCA3NiwgMywgMjQ3LCAKLSAgICAxNDksIDc2LCAzLCAyNDcsIDI0OCwgMjUwLCAxMzAsIDMsIDQyLCAyMzMsIDE4MCwgMywgNDEsIDIzMywgMTgwLCAzLCA0MiwgCi0gICAgMjUwLCAyMjMsIDEwNCwgMywgNDEsIDI1MCwgMjIzLCAxMDQsIDMsIDQyLCAyMjYsIDEwMCwgMjI5LCAxMDQsIDEwNCwgMywgCi0gICAgNDEsIDIyNiwgMTAwLCAyMjksIDEwNCwgMTA0LCAzLCA2NSwgNTMsIDMsIDI1NCwgMTkzLCAzLCAyNTQsIDY5LCAzLCA3OSwgCi0gICAgNTMsIDMsIDI0NCwgOTQsIDMsIDIzNywgMjEzLCA1MywgMywgMjQ1LCAyMzEsIDUzLCAzLCAyNDcsIDIwNCwgNTMsIDMsIAotICAgIDIzMSwgMTkzLCAyMjgsIDE2MSwgMywgMjQ5LCAxNTAsIDUzLCAzLCAyMzMsIDEyMywgNTMsIDMsIDI1MSwgNTMsIDI1NCwgCi0gICAgNjIsIDEwLCAyNDcsIDEwMywgNDQsIDE1LCAxMCwgMjI3LCA2NCwgMiwgMjQ3LCAxMDMsIDQ2LCAxMCwgMjUwLCAxNTUsIDQ0LCAKLSAgICAxNSwgMTAsIDIyNywgOTAsIDI0NiwgMjM0LCAxMCwgMjM5LCAyMiwgNDQsIDE1LCAxMCwgMjQ3LCAxMDUsIDQ0LCAxNSwgMTAsIAotICAgIDI0NywgMTA1LCAxMjQsIDE1LCAxMCwgMjUwLCAxNTcsIDQ0LCAxNSwgMTAsIDI1MCwgMTU3LCAxMjQsIDE1LCAxMCwgMjM5LCAKLSAgICAyNCwgNDQsIDE1LCAxMCwgMjM5LCAyNCwgMTI0LCAxNSwgMTAsIDIyOSwgMTM4LCA0NCwgMTUsIDEwLCAyMjksIDEzOCwgCi0gICAgMTI0LCAxNSwgMTAsIDIyNywgMjM1LCA0NCwgMTUsIDEwLCAyMjcsIDIzNSwgMTI0LCAxNSwgMTAsIDEsIDE2NCwgNDQsIDE1LCAKLSAgICAxMCwgMSwgOTIsIDIsIDIzNywgNTksIDY0LCA0NCwgMTUsIDEwLCAxLCA5MiwgMiwgMjM3LCA1OSwgNjQsIDM1LCAxNSwgMTAsIAotICAgIDEsIDkyLCAyLCAxNjQsIDY0LCA0NCwgMTUsIDEwLCAxLCA5MiwgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgMjI0LCAKLSAgICAxNDUsIDIsIDE2NCwgNjQsIDQ0LCAxNSwgMTAsIDEsIDIyNCwgMTQ1LCAyLCAxNjQsIDY0LCAzNSwgMTUsIDEwLCAxLCA5MiwgCi0gICAgMiwgMTY0LCAyNTIsIDIxNCwgNDQsIDE1LCAxMCwgMSwgOTIsIDIsIDE2NCwgMjUyLCAyMTQsIDM1LCAxNSwgMTAsIDEsIDYyLCAKLSAgICAyLCAxNjQsIDY0LCA0NCwgMTUsIDEwLCAxLCA2MiwgMiwgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMSwgNjIsIDIsIDE2NCwgNjQsIAotICAgIDU5LCAxNSwgMTAsIDEsIDYyLCAyLCAxNjQsIDY0LCAxMjQsIDE1LCAxMCwgMSwgOTIsIDQ0LCAxNSwgMTAsIDEsIDkyLCAzNSwgCi0gICAgMTUsIDEwLCAxLCAyNTIsIDIyNCwgNDQsIDE1LCAxMCwgMSwgMjUyLCAyMjQsIDM1LCAxNSwgMTAsIDEsIDI1MiwgMjI0LCAKLSAgICA1OSwgMTUsIDEwLCAxLCAyNTIsIDIyNCwgMTI0LCAxNSwgMTAsIDEsIDIyNywgMzUsIDIzNywgMjMsIDQ0LCAxNSwgMTAsIDEsIAotICAgIDIyNywgMzUsIDIzNywgMjMsIDM1LCAxNSwgMTAsIDEsIDIyNywgMzUsIDQ0LCAxNSwgMTAsIDEsIDIyNywgMzUsIDM1LCAxNSwgCi0gICAgMTAsIDEsIDIyNywgMzUsIDU5LCAxNSwgMTAsIDEsIDIyNywgMzUsIDEyNCwgMTUsIDEwLCAxLCAyMjYsIDIzNywgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjI2LCAyMzcsIDM1LCAxNSwgMTAsIDEsIDIyNiwgMjM3LCA1OSwgMTUsIDEwLCAxLCAyMjYsIDIzNywgMTI0LCAKLSAgICAxNSwgMTAsIDEsIDEyMywgNDQsIDE1LCAxMCwgMSwgMTIzLCAzNSwgMTUsIDEwLCAxLCAxMjMsIDU5LCAxNSwgMTAsIDEsIAotICAgIDEyMywgMTI0LCAxNSwgMTAsIDEsIDEwMSwgNDQsIDE1LCAxMCwgMSwgMTAxLCAzNSwgMTUsIDEwLCAxLCAxMDEsIDU5LCAxNSwgCi0gICAgMTAsIDEsIDEwMSwgMTI0LCAxNSwgMTAsIDEsIDIwMiwgNDQsIDE1LCAxMCwgMSwgMjAyLCAzNSwgMTUsIDEwLCAxLCAyMDIsIAotICAgIDU5LCAxNSwgMTAsIDEsIDIwMiwgMTI0LCAxNSwgMTAsIDEsIDI1MCwgMTY2LCA0NCwgMTUsIDEwLCAxLCAyNTAsIDE2NiwgCi0gICAgMzUsIDE1LCAxMCwgMSwgMjI2LCAyNDYsIDQ0LCAxNSwgMTAsIDEsIDIyNiwgMjQ2LCAzNSwgMTUsIDEwLCAxLCAyMzEsIAotICAgIDIyNiwgNDQsIDE1LCAxMCwgMSwgMjMxLCAyMjYsIDM1LCAxNSwgMTAsIDEsIDIyMywgMTExLCA0NCwgMTUsIDEwLCAxLCAKLSAgICAyMjMsIDExMSwgMzUsIDE1LCAxMCwgMSwgMjMwLCAyMDIsIDQ0LCAxNSwgMTAsIDEsIDIzMCwgMjAyLCAzNSwgMTUsIDEwLCAKLSAgICAxLCAyMzAsIDIwMiwgNTksIDE1LCAxMCwgMSwgMjMwLCAyMDIsIDEyNCwgMTUsIDEwLCAxLCAyMjksIDExMSwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjI5LCAxMTEsIDM1LCAxNSwgMTAsIDEsIDIyOSwgMTExLCA1OSwgMTUsIDEwLCAxLCAyMjksIDExMSwgMTI0LCAKLSAgICAxNSwgMTAsIDEsIDIzMSwgMjUsIDQ0LCAxNSwgMTAsIDEsIDIzMSwgMjUsIDM1LCAxNSwgMTAsIDEsIDIzMSwgMjUsIDU5LCAKLSAgICAxNSwgMTAsIDEsIDIzMSwgMjUsIDEyNCwgMTUsIDEwLCAxLCAyNTAsIDE4NSwgNDQsIDE1LCAxMCwgMSwgMjUwLCAxODUsIAotICAgIDM1LCAxNSwgMTAsIDEsIDI1MCwgMTg1LCA1OSwgMTUsIDEwLCAxLCAyNTAsIDE4NSwgMTI0LCAxNSwgMTAsIDEsIDIyNywgCi0gICAgOTIsIDQ0LCAxNSwgMTAsIDEsIDIyNywgOTIsIDM1LCAxNSwgMTAsIDEsIDIyNywgOTIsIDU5LCAxNSwgMTAsIDEsIDIyNywgCi0gICAgOTIsIDEyNCwgMTUsIDEwLCAxLCAyMjMsIDExNCwgNDQsIDE1LCAxMCwgMSwgMjIzLCAxMTQsIDM1LCAxNSwgMTAsIDEsIAotICAgIDIyMywgMTE0LCA1OSwgMTUsIDEwLCAxLCAyMjMsIDExNCwgMTI0LCAxNSwgMTAsIDEsIDI1NCwgMjQ5LCA0NCwgMTUsIDEwLCAKLSAgICAxLCAyNTQsIDI0OSwgMzUsIDE1LCAxMCwgMSwgMjU0LCAyNDksIDU5LCAxNSwgMTAsIDEsIDI1NCwgMjQ5LCAxMjQsIDE1LCAKLSAgICAxMCwgMSwgMjQ2LCA2NCwgNDQsIDE1LCAxMCwgMSwgMjQ2LCA2NCwgMzUsIDE1LCAxMCwgMSwgMjQ2LCA2NCwgNTksIDE1LCAKLSAgICAxMCwgMSwgMjQ2LCA2NCwgMTI0LCAxNSwgMTAsIDEsIDI0NywgODgsIDQ0LCAxNSwgMTAsIDEsIDI0NywgODgsIDM1LCAxNSwgCi0gICAgMTAsIDEsIDI0NywgODgsIDU5LCAxNSwgMTAsIDEsIDI0NywgODgsIDEyNCwgMTUsIDEwLCAxLCAyMzIsIDEzMiwgNDQsIDE1LCAKLSAgICAxMCwgMSwgMjMyLCAxMzIsIDM1LCAxNSwgMTAsIDEsIDIzMiwgMTMyLCA1OSwgMTUsIDEwLCAxLCAyMzIsIDEzMiwgMTI0LCAKLSAgICAxNSwgMTAsIDEsIDIzOSwgNjAsIDQ0LCAxNSwgMTAsIDEsIDIzOSwgNjAsIDM1LCAxNSwgMTAsIDEsIDIzOSwgNjAsIDU5LCAKLSAgICAxNSwgMTAsIDEsIDIzOSwgNjAsIDEyNCwgMTUsIDEwLCAxLCAyMTYsIDQ0LCAxNSwgMTAsIDEsIDIxNiwgMzUsIDE1LCAxMCwgCi0gICAgMSwgMjE2LCA1OSwgMTUsIDEwLCAxLCAyMTYsIDEyNCwgMTUsIDEwLCAxLCA1NSwgNDQsIDE1LCAxMCwgMSwgNTUsIDM1LCAKLSAgICAxNSwgMTAsIDEsIDU1LCA1OSwgMTUsIDEwLCAxLCA1NSwgMTI0LCAxNSwgMTAsIDEsIDIzNCwgMjUyLCA0NCwgMTUsIDEwLCAKLSAgICAxLCAyMzQsIDI1MiwgMzUsIDE1LCAxMCwgMSwgMjM0LCAyNTIsIDU5LCAxNSwgMTAsIDEsIDIzNCwgMjUyLCAxMjQsIDE1LCAKLSAgICAxMCwgMSwgMjQ1LCAxMDgsIDQ0LCAxNSwgMTAsIDEsIDI0NSwgMTA4LCAzNSwgMTUsIDEwLCAxLCAyNDUsIDEwOCwgNTksIAotICAgIDE1LCAxMCwgMSwgMjQ1LCAxMDgsIDEyNCwgMTUsIDEwLCAxLCAyMjQsIDE0NSwgNDQsIDE1LCAxMCwgMSwgMjI0LCAxNDUsIAotICAgIDM1LCAxNSwgMTAsIDEsIDkyLCAxNzUsIDQ0LCAxNSwgMTAsIDEsIDkyLCAxNzUsIDM1LCAxNSwgMTAsIDEsIDYyLCA0NCwgCi0gICAgMTUsIDEwLCAxLCA2MiwgMzUsIDE1LCAxMCwgMSwgNjIsIDU5LCAxNSwgMTAsIDEsIDYyLCAxMjQsIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgOTIsIDIsIDIzNywgNTksIDY0LCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgMjM3LCA1OSwgNjQsIAotICAgIDM1LCAxNSwgMTAsIDIwLCAyMTYsIDIsIDkyLCAyLCAxNjQsIDY0LCA0NCwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgMiwgCi0gICAgMTY0LCA2NCwgMzUsIDE1LCAxMCwgMjAsIDIxNiwgMiwgOTIsIDIsIDE2NCwgMjUyLCAyMTQsIDQ0LCAxNSwgMTAsIDIwLCAKLSAgICAyMTYsIDIsIDkyLCAyLCAxNjQsIDI1MiwgMjE0LCAzNSwgMTUsIDEwLCAyMCwgMjE2LCAyLCA5MiwgNDQsIDE1LCAxMCwgMjAsIAotICAgIDIxNiwgMiwgOTIsIDM1LCAxNSwgMjIzLCA5MCwgMjI0LCAxMTUsIDIzNSwgNSwgMjI4LCAxNDUsIDEwMCwgMjQ3LCAxNDksIAotICAgIDc2LCAxMDAsIDIzMiwgNTcsIDc2LCAxMDAsIDY1LCA1MywgMTAwLCAyNDksIDE1MCwgNTMsIDEwMCwgMjMzLCAxMjMsIDUzLCAKLSAgICAxMDAsIDI1NCwgMTkzLCAxMDAsIDI1NCwgMTQ0LCAxMDAsIDQyLCAyMzMsIDE4MCwgMTAwLCA0MSwgMjMzLCAxODAsIDEwMCwgCi0gICAgMjU0LCA2OSwgMTAwLCA3OSwgNTMsIDEwMCwgMjUxLCA1NCwgMTAwLCAyNDQsIDk0LCAxMDAsIDI0NiwgMjE4LCAyMjgsIDM4LCAKLSAgICAxMDAsIDIyOCwgMTYxLCAxMDAsIDIxLCAyMjMsIDg5LCAxMDAsIDIxLCAxMTgsIDEwMCwgMjEsIDExMywgMTAwLCAyMSwgCi0gICAgMTY2LCAxMDAsIDIxLCAxNTgsIDEwMCwgMjEsIDE3MywgMTAwLCAyMSwgMTgzLCAxMDAsIDIxLCAxOTQsIDEwMCwgMjEsIAotICAgIDE4NywgMTAwLCAyMSwgMTkyLCAxMDAsIDI1MSwgNjEsIDEwMCwgMjI5LCAxODYsIDEwMCwgMjM3LCAyMTMsIDUzLCAxMDAsIAotICAgIDI0NywgMjA0LCA1MywgMTAwLCAyNDUsIDIzMSwgNTMsIDEwMCwgMjMyLCA2OSwgNzYsIDEwMCwgMjUxLCA1MywgMjU0LCA2MiwgCi0gICAgMTAwLCA3LCA2LCAxLCA1NywgMTAwLCA3LCA2LCAxLCAyNTQsIDI3LCAxMDAsIDcsIDYsIDEsIDI1MiwgNDQsIDEwMCwgNywgCi0gICAgNiwgMSwgMjIyLCAyMjIsIDEwMCwgNywgNiwgMSwgNzIsIDEwMCwgNywgNiwgMSwgMjQ3LCAxMzAsIDEwMCwgNywgNiwgMSwgCi0gICAgMjE0LCAxMDAsIDcsIDYsIDEsIDIxMiwgMTAwLCA3LCA2LCAxLCA3NCwgMTAwLCA3LCA2LCAxLCAyMzksIDE4MiwgMTAwLCA3LCAKLSAgICA2LCAxLCAyMzksIDc2LCAxMDAsIDcsIDYsIDEsIDE0OSwgMTAwLCA3LCA2LCAxLCAxODUsIDEwMCwgNywgNiwgMSwgMTk5LCAKLSAgICAxMDAsIDcsIDYsIDEsIDczLCAxMDAsIDcsIDYsIDEsIDIzMywgMjQ0LCAxMDAsIDcsIDYsIDEsIDIzMiwgMTM5LCAxMDAsIDcsIAotICAgIDYsIDEsIDE0NiwgMTAwLCA3LCA2LCAxLCAxOTMsIDEwMCwgNywgNiwgMSwgMjI3LCAxMDksIDEwMCwgNywgNiwgMSwgNjYsIAotICAgIDEwMCwgNywgNiwgMSwgMTk2LCAxMDAsIDcsIDYsIDEsIDIyNCwgMTc0LCAxMDAsIDcsIDYsIDEsIDIyNCwgNzMsIDEwMCwgNywgCi0gICAgNiwgMSwgMjI0LCAyNSwgMTAwLCA3LCA2LCAxLCAyMjMsIDExOSwgMTAwLCA0MiwgMzcsIDEwNCwgMTAwLCAyMzEsIDE5MywgCi0gICAgMjI4LCAxNjEsIDEwMCwgNDEsIDM3LCAxMDQsIDEwMCwgMjUxLCAxMDIsIDI1NSwgNDEsIDEwMCwgMTg0LCAyMzcsIDE3MCwgCi0gICAgMTAwLCAyNDUsIDIzNywgMjU1LCA0MSwgMTAwLCA3LCAzLCAxLCA1NywgMTAwLCA3LCAzLCAxLCAyNTQsIDI3LCAxMDAsIDcsIAotICAgIDMsIDEsIDI1MiwgNDQsIDEwMCwgNywgMywgMSwgMjIyLCAyMjIsIDEwMCwgNywgMywgMSwgNzIsIDEwMCwgNywgMywgMSwgCi0gICAgMjQ3LCAxMzAsIDEwMCwgNywgMywgMSwgMjE0LCAxMDAsIDcsIDMsIDEsIDIxMiwgMTAwLCA3LCAzLCAxLCA3NCwgMTAwLCA3LCAKLSAgICAzLCAxLCAyMzksIDE4MiwgMTAwLCA3LCAzLCAxLCAyMzksIDc2LCAxMDAsIDcsIDMsIDEsIDE0OSwgMTAwLCA3LCAzLCAxLCAKLSAgICAxODUsIDEwMCwgNywgMywgMSwgMTk5LCAxMDAsIDcsIDMsIDEsIDczLCAxMDAsIDcsIDMsIDEsIDIzMywgMjQ0LCAxMDAsIDcsIAotICAgIDMsIDEsIDIzMiwgMTM5LCAxMDAsIDcsIDMsIDEsIDE0NiwgMTAwLCA3LCAzLCAxLCAxOTMsIDEwMCwgNywgMywgMSwgMjI3LCAKLSAgICAxMDksIDEwMCwgNywgMywgMSwgNjYsIDEwMCwgNywgMywgMSwgMTk2LCAxMDAsIDcsIDMsIDEsIDIyNCwgMTc0LCAxMDAsIDcsIAotICAgIDMsIDEsIDIyNCwgNzMsIDEwMCwgNywgMywgMSwgMjI0LCAyNSwgMTAwLCA3LCAzLCAxLCAyMjMsIDExOSwgMTAwLCA0MiwgCi0gICAgMjUwLCAyMjMsIDEwNCwgMTAwLCA2MSwgMjM3LCAxNzAsIDEwMCwgNDEsIDI1MCwgMjIzLCAxMDQsIDEwMCwgMjA1LCAxMDAsIAotICAgIDQyLCA2MywgMjMzLCAxODAsIDEwMCwgNDEsIDYzLCAyMzMsIDE4MCwgODMsIDkwLCAyNDYsIDIxOCwgMjI4LCAzOCwgODMsIAotICAgIDQyLCAyNTEsIDExLCAxMDQsIDgzLCA0MSwgMjUxLCAxMSwgMTA0LCA4MywgOTAsIDI1MSwgNTQsIDgzLCA0OCwgMjM2LCAKLSAgICAxNTQsIDI0OSwgMTQwLCA4MywgNDgsIDEsIDIyNCwgMTA1LCA4MywgNDgsIDEsIDMsIDU3LCA4MywgNDgsIDEsIDMsIDc0LCAKLSAgICA4MywgNDgsIDEsIDMsIDY2LCA4MywgNDgsIDEsIDMsIDcyLCA4MywgNDgsIDEsIDMsIDczLCA4MywgNDgsIDEsIDMsIDE5MSwgCi0gICAgODMsIDQ4LCAxLCAzLCAyMjMsIDE1OCwgODMsIDQ4LCAxLCAzLCAyMjMsIDE4MywgODMsIDQ4LCAxLCAzLCAyMjUsIDI1MCwgCi0gICAgODMsIDIzOSwgMTksIDIzMiwgMTk0LCAyMjgsIDE1NSwgNzYsIDgzLCA0OCwgMSwgNTcsIDgzLCA0OCwgMSwgNzQsIDgzLCAKLSAgICA0OCwgMSwgNjYsIDgzLCA0OCwgMSwgNzIsIDgzLCA0OCwgMSwgNzMsIDgzLCA0OCwgMSwgMTc3LCA4MywgNDgsIDEsIDIzOCwgCi0gICAgMTk5LCA4MywgNDgsIDEsIDIzOCwgMTA3LCA4MywgNDgsIDEsIDIzOSwgMywgODMsIDQ4LCAxLCAyMzgsIDE1MCwgODMsIDQ4LCAKLSAgICAxLCAyMzEsIDMxLCA4MywgNDgsIDEsIDIyOSwgMTUsIDgzLCA0OCwgMSwgMjI4LCA2LCA4MywgNDgsIDEsIDIzMCwgMjEzLCAKLSAgICA4MywgNDgsIDEsIDIyOCwgMTY5LCA4MywgNDgsIDEsIDIyNywgMTA3LCA4MywgNDgsIDEsIDIyNiwgMTc1LCA4MywgNDgsIDEsIAotICAgIDIyNSwgMjUwLCA4MywgNDgsIDEsIDIyNywgNDQsIDgzLCA0OCwgMSwgOTYsIDgzLCA0OCwgMSwgMjM2LCAxLCA4MywgNDgsIAotICAgIDEsIDIzNSwgODksIDgzLCA0OCwgMSwgMjM0LCAyMDYsIDgzLCA0OCwgMSwgMjM1LCAxNjIsIDgzLCA0OCwgMSwgMjM1LCA2LCAKLSAgICA4MywgNDgsIDEsIDE1NCwgODMsIDQ4LCAxLCAyNDUsIDc1LCA4MywgNDgsIDEsIDI0NCwgMTQ1LCA4MywgNDgsIDEsIDI0NSwgCi0gICAgMTIxLCA4MywgNDgsIDEsIDI0NCwgMjI3LCA4MywgNDgsIDEsIDE5OCwgODMsIDQ4LCAxLCAyMzYsIDE1NywgODMsIDQ4LCAxLCAKLSAgICAyMzYsIDY2LCA4MywgNDgsIDEsIDIzNiwgMjM1LCA4MywgNDgsIDEsIDIzNiwgMTAzLCA4MywgNDgsIDEsIDE5MSwgODMsIAotICAgIDQ4LCAxLCAyMjMsIDE1OCwgODMsIDQ4LCAxLCAyMjMsIDE4MywgODMsIDQ4LCAxLCAyMDgsIDgzLCA0OCwgMSwgMjMxLCAKLSAgICAxODAsIDgzLCA0OCwgMSwgMjMxLCA3MCwgODMsIDQ4LCAxLCAyMzEsIDI0NCwgODMsIDQ4LCAxLCAyMzEsIDEyMiwgODMsIAotICAgIDQ4LCAxLCAyMjQsIDE3MywgODMsIDQ4LCAxLCAxOTksIDgzLCA0OCwgMjI0LCAyMDQsIDIyOCwgMTU1LCA3NiwgODMsIDQ4LCAKLSAgICAyMjksIDE5MSwgMjI4LCAxNTUsIDc2LCA4MywgMjYsIDI0NywgNTIsIDgzLCAyNiwgMSwgMjM4LCAxNzMsIDgzLCAyNiwgMSwgCi0gICAgMjI4LCAxMDQsIDgzLCAyNiwgMSwgMjM4LCAxNzEsIDgzLCAyNiwgMSwgMjM1LCA4MiwgODMsIDI2LCAxLCAyMzUsIDgxLCAKLSAgICA4MywgMjYsIDEsIDIzNSwgODAsIDgzLCAyNiwgMSwgMjI2LCAxNjMsIDgzLCAyNiwgMSwgMjI4LCA5OSwgODMsIDI2LCAxLCAKLSAgICAyMzEsIDE3NCwgODMsIDI2LCAxLCAyMzEsIDE3MCwgODMsIDI2LCAxLCAyMzEsIDE2OCwgODMsIDI2LCAxLCAyMzEsIDE2MiwgCi0gICAgODMsIDI2LCAxLCAyMzEsIDE1OSwgODMsIDI2LCAxLCAyMzEsIDE1NywgODMsIDI2LCAxLCAyMzEsIDE2MywgODMsIDI2LCAxLCAKLSAgICAyMzEsIDE3MywgODMsIDI2LCAxLCAyMzYsIDE0OCwgODMsIDI2LCAxLCAyMzMsIDYwLCA4MywgMjYsIDEsIDIyOCwgMTAyLCAKLSAgICA4MywgMjYsIDEsIDIzMywgNTIsIDgzLCAyNiwgMSwgMjI4LCAyMzYsIDgzLCAyNiwgMSwgMjI4LCAxMDAsIDgzLCAyNiwgMSwgCi0gICAgMjQwLCA2OCwgODMsIDI2LCAxLCAyNTEsIDExMywgODMsIDI2LCAxLCAyMjgsIDEwNywgODMsIDI2LCAxLCAyNTEsIDE2NywgCi0gICAgODMsIDI2LCAxLCAyMzgsIDIxMCwgODMsIDI2LCAxLCAyMjYsIDIxOCwgODMsIDI2LCAxLCAyMzMsIDg1LCA4MywgMjYsIDEsIAotICAgIDI0NSwgNjksIDgzLCAyNiwgMSwgNTcsIDgzLCAyNiwgMSwgMjU1LCAxOSwgODMsIDI2LCAxLCAxOTEsIDgzLCAyNiwgMSwgCi0gICAgMjI0LCAxMCwgODMsIDI2LCAxLCAyNDcsIDIxNywgODMsIDI2LCAxLCA3MiwgODMsIDI2LCAxLCAyMjMsIDIyMSwgODMsIDI2LCAKLSAgICAxLCAyMjMsIDIyOCwgODMsIDI2LCAxLCA3MywgODMsIDI2LCAxLCAyMjQsIDE3MywgODMsIDI2LCAxLCAyMjQsIDE3MCwgODMsIAotICAgIDI2LCAxLCAyMzQsIDg4LCA4MywgMjYsIDEsIDIyMywgMTgzLCA4MywgMjYsIDEsIDY2LCA4MywgMjYsIDEsIDIyNCwgMTMzLCAKLSAgICA4MywgMjYsIDEsIDIyNCwgMTQxLCA4MywgMjYsIDEsIDIyNCwgMTE4LCA4MywgMjYsIDEsIDIyMywgMTU4LCA4MywgMjYsIDEsIAotICAgIDI0NywgMTY1LCA4MywgMjYsIDEsIDIyMywgMjAyLCA4MywgMjYsIDEsIDc0LCAxMDAsIDI1MSwgMjIwLCA1MywgMTAwLCAKLSAgICAyMzIsIDIzNCwgNTMsIDEwMCwgMTkwLCA1MywgMTAwLCAyMzcsIDYzLCAxMDAsIDI1MiwgOTksIDEyNSwgMTAwLCAyMjMsIAotICAgIDIyMiwgNTMsIDEwMCwgMjI0LCAxMDAsIDUzLCA4MywgMjQ2LCAyNDgsIDE1NywgMjI1LCAzMCwgODMsIDExNywgNTgsIDgzLCAKLSAgICAyMjUsIDEwNiwgNTgsIDgzLCA4MSwgNTgsIDgzLCAyNDgsIDEyNSwgNTgsIDgzLCA4NiwgMjI4LCAxMjAsIDgzLCA2MywgCi0gICAgMjUxLCAxMDYsIDIzOSwgMjMzLCAyNTQsIDE3NSwgMjU0LCAxODgsIDIzOSwgMjMzLCAyNTQsIDE3NSwgMjI5LCAxNzMsIAotICAgIDIzOSwgMjMzLCAyNTQsIDE3NSwgMjI3LCAxNiwgMjM0LCA5OCwgMjMxLCAyMDksIDI1MSwgMTkxLCAyMzEsIDIwOSwgMjUxLCAKLSAgICAxOTEsIDUwLCA0NSwgNCwgMjU0LCAxOSwgNTcsIDUwLCA0NSwgNCwgMjUzLCAyNDYsIDcyLCA1MCwgNDUsIDQsIDI1MywgCi0gICAgMjU1LCA3NCwgNTAsIDQ1LCA0LCAyNTMsIDIyMywgNzMsIDUwLCA0NSwgNCwgMjU0LCAxNywgNjYsIDUwLCA0NSwgNCwgMjU0LCAKLSAgICAyNiwgMjUwLCAxODksIDUwLCA0NSwgNCwgMjUzLCAyMzksIDI1MCwgNzcsIDUwLCA0NSwgNCwgMjU0LCAyMCwgMjUwLCA0LCAKLSAgICA1MCwgNDUsIDQsIDI1NCwgMTMsIDI0OSwgMTYxLCA1MCwgNDUsIDQsIDI1MywgMjMzLCAyNDgsIDEwNywgNTAsIDQ1LCA0LCAKLSAgICAyNTMsIDIyNywgMjM5LCAxNzksIDUwLCA0NSwgNCwgMjUzLCAyMzgsIDIzOSwgMTcwLCA1MCwgNDUsIDQsIDI1MywgMjQ4LCAKLSAgICAyMzksIDExNywgNTAsIDQ1LCA0LCAyNTMsIDIxOSwgMjM5LCAxMDEsIDUwLCA0NSwgNCwgMjUzLCAyMDcsIDE3NywgNTAsIAotICAgIDQ1LCA0LCAyNTMsIDI0MCwgMjM5LCAzLCA1MCwgNDUsIDQsIDI1MywgMjE3LCAyMzgsIDE5OSwgNTAsIDQ1LCA0LCAyNTMsIAotICAgIDIxNCwgMjM4LCAxNTAsIDUwLCA0NSwgNCwgMjUzLCAyMDMsIDIzOCwgMTA3LCA1MCwgNDUsIDQsIDI1MywgMjA0LCAxOTgsIAotICAgIDUwLCA0NSwgNCwgMjU0LCAxNCwgMjM2LCAyMzUsIDUwLCA0NSwgNCwgMjUzLCAyMTEsIDIzNiwgMTU3LCA1MCwgNDUsIDQsIAotICAgIDI1NCwgMTIsIDIzNiwgMTAzLCA1MCwgNDUsIDQsIDI1NCwgNCwgMjM2LCA2NiwgNTAsIDQ1LCA0LCAyNTQsIDIxLCAyMzYsIAotICAgIDEsIDUwLCA0NSwgNCwgMjU0LCAzLCAyMzUsIDE2MiwgNTAsIDQ1LCA0LCAyNTMsIDI1MywgMjM1LCA4OSwgNTAsIDQ1LCA0LCAKLSAgICAyNTMsIDIzMiwgMjM1LCA2LCA1MCwgNDUsIDQsIDI1MywgMjI5LCAyMzQsIDIwNiwgNTAsIDQ1LCA0LCAyNTQsIDI0LCAyMTMsIAotICAgIDUwLCA0NSwgNCwgMjUzLCAyMTIsIDIzMywgMTUxLCA1MCwgNDUsIDQsIDI1MywgMjQ1LCAyMzMsIDY5LCA1MCwgNDUsIDQsIAotICAgIDI1NCwgMTYsIDIzMywgNCwgNTAsIDQ1LCA0LCAyNTMsIDIzNCwgMjMyLCAxNzMsIDUwLCA0NSwgNCwgMjU0LCAxMSwgMjMyLCAKLSAgICAxMzgsIDUwLCA0NSwgNCwgMjUzLCAyMDYsIDIzMiwgMTE5LCA1MCwgNDUsIDQsIDI1NCwgNiwgMjMyLCAxMDQsIDUwLCA0NSwgCi0gICAgNCwgMjUzLCAyNTEsIDIzMiwgOTUsIDUwLCA0NSwgNCwgMjUzLCAyMjQsIDIwOCwgNTAsIDQ1LCA0LCAyNTQsIDAsIDIzMSwgCi0gICAgMjQ0LCA1MCwgNDUsIDQsIDI1MywgMjMxLCAyMzEsIDE4MCwgNTAsIDQ1LCA0LCAyNTQsIDI1LCAyMzEsIDEyMiwgNTAsIDQ1LCAKLSAgICA0LCAyNTQsIDEsIDIzMSwgNzAsIDUwLCA0NSwgNCwgMjUzLCAyNTIsIDIzMSwgMzEsIDUwLCA0NSwgNCwgMjU0LCAxOCwgCi0gICAgMjMwLCAyMTMsIDUwLCA0NSwgNCwgMjUzLCAyNDMsIDIyOSwgMTUsIDUwLCA0NSwgNCwgMjU0LCAxNSwgMjI4LCAxNjksIDUwLCAKLSAgICA0NSwgNCwgMjUzLCAyMjYsIDIyOCwgNiwgNTAsIDQ1LCA0LCAyNTMsIDIyNSwgMjI3LCAxMDcsIDUwLCA0NSwgNCwgMjU0LCAKLSAgICAyMywgMjI3LCA0NCwgNTAsIDQ1LCA0LCAyNTMsIDI0NywgMjI2LCAxNzUsIDUwLCA0NSwgNCwgMjU0LCAyMiwgOTYsIDUwLCAKLSAgICA0NSwgNCwgMjUzLCAyMTUsIDIyNSwgMjUwLCA1MCwgNDUsIDQsIDI1MywgMjMwLCAyMjQsIDE3MywgNTAsIDQ1LCA0LCAyNTMsIAotICAgIDIwOSwgMjI0LCAxNDEsIDUwLCA0NSwgNCwgMjUzLCAyNDQsIDIyNCwgMTE4LCA1MCwgNDUsIDQsIDI1MywgMjQyLCAyMjQsIAotICAgIDEwNSwgNTAsIDQ1LCA0LCAyNTQsIDEwLCAyMjMsIDExNywgNTAsIDQ1LCA0LCAyNTMsIDIxMCwgMjIzLCA5NywgNTAsIDQ1LCAKLSAgICA0LCAyNTQsIDcsIDIyMywgMjcsIDUwLCA0NSwgNCwgMjU0LCAyLCAyNTUsIDY1LCA1MCwgNDUsIDQsIDI1MywgMjQxLCAyNTUsIAotICAgIDY0LCA1MCwgNDUsIDQsIDI1MywgMjAwLCAyNTQsIDUzLCA1MCwgNDUsIDQsIDI1MywgMjEzLCAyNDgsIDc4LCA1MCwgNDUsIAotICAgIDQsIDI1MywgMTk2LCAyNDgsIDc3LCA1MCwgNDUsIDQsIDI1MywgMjM2LCAyMzQsIDE3NywgNTAsIDQ1LCA0LCAyNTMsIDI1NCwgCi0gICAgMjMyLCAxNzIsIDUwLCA0NSwgNCwgMjUzLCAyMjIsIDIzMiwgMTc1LCA1MCwgNDUsIDQsIDI1MywgMjA4LCAyMzIsIDI0LCAKLSAgICA1MCwgNDUsIDQsIDI1MywgMjUwLCAyMzIsIDIzLCA1MCwgNDUsIDQsIDI1MywgMjE2LCAyMzEsIDEyMSwgNTAsIDQ1LCA0LCAKLSAgICAyNTMsIDIxOCwgMjI3LCAxMDUsIDUwLCA0NSwgNCwgMjUzLCAxOTgsIDIyNSwgMjIwLCA1MCwgNDUsIDQsIDI1MywgMTk1LCAKLSAgICAxMTMsIDUwLCA0NSwgMTQsIDI1NCwgOSwgNTAsIDQ1LCAxNCwgMjU0LCA4LCA1MCwgNDUsIDE0LCAyNTQsIDUsIDUwLCA0NSwgCi0gICAgMTQsIDI1MywgMjQ5LCA1MCwgNDUsIDE0LCAyNTMsIDIzNywgNTAsIDQ1LCAxNCwgMjUzLCAyMzUsIDUwLCA0NSwgMTQsIAotICAgIDI1MywgMjI4LCA1MCwgNDUsIDE0LCAyNTMsIDIyMSwgNTAsIDQ1LCAxNCwgMjUzLCAyMjAsIDUwLCA0NSwgMTQsIDI1MywgCi0gICAgMjA1LCA1MCwgNDUsIDE0LCAyNTMsIDIwMiwgNTAsIDQ1LCAxNCwgMjUzLCAyMDEsIDUwLCA0NSwgMTQsIDI1MywgMTk5LCAKLSAgICA1MCwgNDUsIDE0LCAyNTMsIDE5NywgNTAsIDQ1LCA4OSwgMjUzLCAxOTQsIDIzNywgMzUsIDUwLCA0NSwgODksIDI1MywgCi0gICAgMTkzLCAyMjQsIDEwMSwgNTAsIDQ1LCA4OSwgMjUzLCAxOTIsIDI1MCwgNjUsIDUwLCA0NSwgODksIDI1MywgMTkxLCAyNDcsIAotICAgIDIwMSwgNTAsIDQ1LCA4OSwgMjUzLCAxOTAsIDIzNywgMTgsIDUwLCA0NSwgODksIDI1MywgMTg5LCAyMjgsIDY0LCA1MCwgCi0gICAgNDUsIDg5LCAyNTMsIDE4OCwgMjQ3LCAxNTQsIDUwLCA0NSwgODksIDI1MywgMTg3LCAyMzIsIDYsIDUwLCA0NSwgODksIAotICAgIDI1MywgMTg2LCAyMjksIDExMywgNTAsIDQ1LCA4OSwgMjUzLCAxODUsIDI0NSwgMTIwLCA1MCwgNDUsIDg5LCAyNTMsIDE4NCwgCi0gICAgMjI4LCAxNTAsIDUwLCA0NSwgODksIDI1MywgMTgzLCAyNTIsIDEzNiwgNTAsIDQ1LCA4OSwgMjUzLCAxODIsIDI1MCwgMjUzLCAKLSAgICA1MCwgNDUsIDg5LCAyNTMsIDE4MSwgMjUyLCA4NSwgNTAsIDQ1LCA4OSwgMjUzLCAxODAsIDIyNCwgMTI2LCA1MCwgNDUsIAotICAgIDg5LCAyNTMsIDE3OSwgMjUzLCAzMywgNTAsIDQ1LCA4OSwgMjUzLCAxNzgsIDIzNCwgNzAsIDUwLCA0NSwgODksIDI1MywgCi0gICAgMTc3LCAyMjgsIDEzNiwgNTAsIDQ1LCA4OSwgMjUzLCAxNzYsIDI1MCwgMTk4LCA1MCwgNDUsIDIzNiwgOTIsIDI1MywgMTc1LCAKLSAgICAyMzksIDM3LCA1MCwgNDUsIDIzNiwgOTIsIDI1MywgMTc0LCAyMzksIDQ0LCA1MCwgNDUsIDg5LCAyNTMsIDE3MywgMjM0LCAKLSAgICA3OSwgNTAsIDQ1LCA4OSwgMjUzLCAxNzIsIDIyNCwgMTA5LCA1MCwgNDUsIDg5LCAyNTMsIDE3MSwgNTAsIDQ1LCAyMzYsIAotICAgIDkyLCAyNTMsIDE3MCwgMjU0LCAxMTYsIDUwLCA0NSwgMjM2LCA5MiwgMjUzLCAxNjksIDIzNiwgMjA4LCA1MCwgNDUsIDg5LCAKLSAgICAyNTMsIDE2OCwgMjUyLCA5OCwgNTAsIDQ1LCA4OSwgMjUzLCAxNjcsIDI0NiwgNiwgNTAsIDQ1LCA4OSwgMjUzLCAxNjYsIAotICAgIDUwLCA0NSwgODksIDI1MywgMTY1LCAyMjQsIDk1LCA1MCwgNDUsIDg5LCAyNTMsIDE2NCwgNTAsIDQ1LCA4OSwgMjUzLCAKLSAgICAxNjMsIDUwLCA0NSwgODksIDI1MywgMTYyLCAyNDQsIDE2MCwgNTAsIDQ1LCA4OSwgMjUzLCAxNjEsIDUwLCA0NSwgODksIAotICAgIDI1MywgMTYwLCA1MCwgNDUsIDg5LCAyNTMsIDE1OSwgNTAsIDQ1LCAyMzYsIDkyLCAyNTMsIDE1NywgMjI1LCAyMzEsIDUwLCAKLSAgICA0NSwgODksIDI1MywgMTU2LCA1MCwgNDUsIDg5LCAyNTMsIDE1NSwgNTAsIDQ1LCA4OSwgMjUzLCAxNTQsIDI1MSwgNzcsIAotICAgIDUwLCA0NSwgODksIDI1MywgMTUzLCA1MCwgNDUsIDg5LCAyNTMsIDE1MiwgNTAsIDQ1LCA4OSwgMjUzLCAxNTEsIDI0NiwgCi0gICAgMTU4LCA1MCwgNDUsIDg5LCAyNTMsIDE1MCwgMjU0LCAxMDQsIDUwLCA0NSwgODksIDI1MywgMTQ5LCA1MCwgNDUsIDg5LCAKLSAgICAyNTMsIDE0OCwgNTAsIDQ1LCA4OSwgMjUzLCAxNDcsIDUwLCA0NSwgODksIDI1MywgMTQ2LCA1MCwgNDUsIDg5LCAyNTMsIAotICAgIDE0NSwgNTAsIDQ1LCA4OSwgMjUzLCAxNDQsIDUwLCA0NSwgODksIDI1MywgMTQzLCA1MCwgNDUsIDg5LCAyNTMsIDE0MiwgCi0gICAgNTAsIDQ1LCA4OSwgMjUzLCAxNDEsIDUwLCA0NSwgODksIDI1MywgMTQwLCAyMzYsIDg3LCA1MCwgNDUsIDg5LCAyNTMsIAotICAgIDEzOSwgNTAsIDQ1LCA4OSwgMjUzLCAxMzgsIDIyNiwgODYsIDUwLCA0NSwgODksIDI1MywgMTM3LCA1MCwgNDUsIDg5LCAKLSAgICAyNTMsIDEzNiwgNTAsIDQ1LCA4OSwgMjUzLCAxMzUsIDUwLCA0NSwgODksIDI1MywgMTM0LCA1MCwgNDUsIDg5LCAyNTMsIAotICAgIDEzMywgNTAsIDQ1LCA4OSwgMjUzLCAxMzIsIDUwLCA0NSwgODksIDI1MywgMTMxLCA1MCwgNDUsIDg5LCAyNTMsIDEzMCwgCi0gICAgNTAsIDQ1LCA4OSwgMjUzLCAxMjksIDUwLCA0NSwgODksIDI1MywgMTI4LCA1MCwgNDUsIDg5LCAyNTMsIDEyNywgNTAsIDQ1LCAKLSAgICA4OSwgMjUzLCAxMjYsIDI0NSwgMTAyLCA1MCwgNDUsIDg5LCAyNTMsIDEwNSwgMjQ3LCAwLCA1MCwgNDUsIDg5LCAyNTMsIAotICAgIDEwMiwgMjUzLCAxOSwgNTAsIDQ1LCA4OSwgMjUzLCA5NywgMjI4LCAxNDAsIDUwLCA0NSwgODksIDI1MywgOTYsIDU4LCA1MCwgCi0gICAgNDUsIDg5LCAyNTMsIDk1LCA1MCwgNDUsIDg5LCAyNTMsIDk0LCAyMjcsIDE4OSwgNTAsIDQ1LCA4OSwgMjUzLCA5MywgNTAsIAotICAgIDQ1LCA4OSwgMjUzLCA5MiwgNTAsIDQ1LCA4OSwgMjUzLCA5MSwgMjI0LCAxMjIsIDI1MSwgMTg4LCA1MCwgNDUsIDg5LCAKLSAgICAyNTMsIDkwLCAyNTEsIDE4OCwgNTAsIDQ1LCA4OSwgMjUzLCA4OSwgMjUxLCAxODksIDI0NiwgMjMyLCA1MCwgNDUsIDg5LCAKLSAgICAyNTMsIDg4LCAyMjQsIDEyNCwgNTAsIDQ1LCA4OSwgMjUzLCA4NywgNTAsIDQ1LCA4OSwgMjUzLCA4NiwgNTAsIDQ1LCAyMzYsIAotICAgIDkyLCAyNTMsIDg1LCAyNDksIDIwMiwgNTAsIDQ1LCA4OSwgMjUzLCA4NCwgNTAsIDQ1LCA4OSwgMjUzLCA4MywgNTAsIDQ1LCAKLSAgICA4OSwgMjUzLCA4MSwgNTAsIDQ1LCA4OSwgMjUzLCA4MCwgNTAsIDQ1LCA4OSwgMjUzLCA3OSwgNTAsIDQ1LCA4OSwgMjUzLCAKLSAgICA3OCwgMjUwLCAxMzMsIDUwLCA0NSwgODksIDI1MywgNzcsIDUwLCA0NSwgODksIDI1MywgNzYsIDUwLCA0NSwgODksIDI1MywgCi0gICAgNzUsIDUwLCA0NSwgODksIDI1MywgNzQsIDUwLCA0NSwgODksIDI1MywgNzMsIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIAotICAgIDE1OCwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTI1LCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCAxMjQsIDUwLCAKLSAgICA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDEyMywgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTIyLCA1MCwgNDUsIDg5LCAKLSAgICAyMjQsIDIzMywgMjUzLCAxMjEsIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDEyMCwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIAotICAgIDI1MywgMTE5LCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCAxMTgsIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDExNywgCi0gICAgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTE2LCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCAxMTUsIDUwLCA0NSwgCi0gICAgODksIDIyNCwgMjMzLCAyNTMsIDExNCwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTEzLCA1MCwgNDUsIDg5LCAyMjQsIAotICAgIDIzMywgMjUzLCAxMTIsIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDExMSwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgCi0gICAgMTEwLCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCAxMDksIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDEwOCwgNTAsIAotICAgIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTA3LCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCAxMDYsIDUwLCA0NSwgODksIAotICAgIDIyNCwgMjMzLCAyNTMsIDEwNCwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgMTAzLCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgCi0gICAgMjUzLCAxMDEsIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDEwMCwgNTAsIDQ1LCA4OSwgMjI0LCAyMzMsIDI1MywgOTksIAotICAgIDUwLCA0NSwgODksIDIyNCwgMjMzLCAyNTMsIDk4LCA1MCwgNDUsIDg5LCAyMjQsIDIzMywgMjUzLCA4MiwgNTAsIDQ1LCA4OSwgCi0gICAgMjI0LCAyMzMsIDI1MywgNzIsIDIxMCwgMjI0LCA5MiwgMjI5LCAxNzQsIDIzNywgMTcwLCAyMTAsIDIyNCwgOTIsIDIyOSwgCi0gICAgMTc0LCAyNDksIDE0MCwgMjEwLCAyNTEsIDE4MSwgNzYsIDIxMCwgNjUsIDExOCwgMjEwLCA2NSwgMTEzLCAyMTAsIDY1LCAKLSAgICAxNjYsIDIxMCwgNjUsIDE1OCwgMjEwLCA2NSwgMTczLCAyMTAsIDY1LCAxODMsIDIxMCwgNjUsIDE5NCwgMjEwLCA2NSwgCi0gICAgMTg3LCAyMTAsIDY1LCAxOTIsIDIxMCwgNjUsIDIyNywgMjMsIDIxMCwgNjUsIDIyNSwgMjE2LCAyMTAsIDY1LCAyMjYsIAotICAgIDIwNywgMjEwLCA2NSwgMjQ2LCAyNDUsIDIxMCwgNjUsIDI0NywgNjMsIDIxMCwgNjUsIDIyOCwgMjA2LCAyMTAsIDY1LCAKLSAgICAyMjksIDE1OSwgMjEwLCA2NSwgMjQ4LCAxMiwgMjEwLCA2NSwgMjM1LCA1NywgMjEwLCA2NSwgMTY4LCAyNDQsIDEzNSwgCi0gICAgMjEwLCA2NSwgMTM1LCAyNDQsIDEzNSwgMjEwLCA2NSwgMTUyLCAyNDQsIDEzNSwgMjEwLCA2NSwgMjQ2LCAyNDMsIDI0NCwgCi0gICAgMTM1LCAyMTAsIDY1LCAyNDcsIDM3LCAyNDQsIDEzNSwgMjEwLCA2NSwgMjI4LCAyMTcsIDI0NCwgMTM1LCAyMTAsIDY1LCAKLSAgICAyMjksIDE2MywgMjQ0LCAxMzUsIDIxMCwgNjUsIDI0OCwgMjAsIDI0NCwgMTM1LCAyMTAsIDY1LCAyMzUsIDYxLCAyNDQsIAotICAgIDEzNSwgMjEwLCA2NSwgMTY4LCAyMjYsIDE5NCwgMjEwLCA2NSwgMTM1LCAyMjYsIDE5NCwgMjEwLCA2NSwgMTUyLCAyMjYsIAotICAgIDE5NCwgMjEwLCA2NSwgMjQ2LCAyNDMsIDIyNiwgMTk0LCAyMTAsIDY1LCAyNDcsIDM3LCAyMjYsIDE5NCwgMjEwLCA2NSwgCi0gICAgMjI4LCAyMTcsIDIyNiwgMTk0LCAyMTAsIDY1LCAyMjksIDE2MywgMjI2LCAxOTQsIDIxMCwgNjUsIDI0OCwgMjAsIDIyNiwgCi0gICAgMTk0LCAyMTAsIDY1LCAyMzUsIDYxLCAyMjYsIDE5NCwgMjEwLCA2NSwgMjI3LCAyNCwgMjI2LCAxOTQsIDIxMCwgNjUsIAotICAgIDIyNSwgMjE3LCAyMjYsIDE5NCwgMjEwLCA2NSwgMjI2LCAyMDgsIDIyNiwgMTk0LCAyMTAsIDY1LCAyNDYsIDI0NiwgMjI2LCAKLSAgICAxOTQsIDIxMCwgNjUsIDI0NywgNjQsIDIyNiwgMTk0LCAyMTAsIDY1LCAyMjgsIDIwNywgMjI2LCAxOTQsIDIxMCwgNjUsIAotICAgIDIyOSwgMTYwLCAyMjYsIDE5NCwgMjEwLCA2NSwgMjQ4LCAxMywgMjI2LCAxOTQsIDIxMCwgNjUsIDIzNSwgNTgsIDIyNiwgCi0gICAgMTk0LCAyMTAsIDIyNCwgMTM2LCAyNTMsIDI1LCAyMjUsIDEyNSwgMjEwLCAyMjQsIDEzNiwgMjQ3LCA0NSwgMjI3LCAyNDcsIAotICAgIDIxMCwgMjI0LCAxMzYsIDIzMCwgMjA5LCAyMjcsIDI0NywgMjEwLCAyMjQsIDEzNiwgMjI2LCAyMTQsIDIyNywgMjQ3LCAKLSAgICAyMTAsIDIyNCwgMTM2LCAyNDYsIDIzNywgMjI3LCAyNDcsIDIxMCwgMjQ4LCAxMTAsIDIzNiwgMjM0LCAyNDcsIDQ1LCAyMjcsIAotICAgIDI0NywgMjEwLCAyMzcsIDE2MCwgMjM2LCAyMzQsIDI0NywgNDUsIDIyNywgMjQ3LCAyMTAsIDIzNiwgMjM0LCAyMzAsIDIwOSwgCi0gICAgMjI3LCAyNDcsIDIxMCwgMjM2LCAyMzQsIDIyNiwgMjE0LCAyMjcsIDI0NywgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgCi0gICAgMjMyLCA3NiwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgMjQ1LCAxNTEsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAxNjgsIAotICAgIDI0OCwgMTIxLCAxOSwgMjU1LCAzNiwgMjU0LCA1NSwgMTczLCAxOSwgMjU1LCAzNiwgMjU0LCA1NSwgMjQ3LCA2MywgMTksIAotICAgIDI1NSwgMzYsIDI1NCwgNTUsIDI0NywgMzcsIDI0NCwgMTM1LCAxOSwgMjU1LCAzNiwgMjU0LCA1NSwgMjQ3LCAzNywgMjI2LCAKLSAgICAxOTQsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyNDcsIDY0LCAyMjYsIDE5NCwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDI0NywgCi0gICAgMzcsIDIyNywgODAsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyMjcsIDI0LCAyMjcsIDgwLCAxOSwgMjU1LCAzNiwgMjU0LCAKLSAgICA1NSwgMjQ3LCA2NCwgMjI3LCA4MCwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgMjQ0LCAxMzYsIDIyNywgODAsIDE5LCAKLSAgICAyNTUsIDM2LCAyNTQsIDU1LCAyNDcsIDM3LCAyNDQsIDEzNiwgMjI3LCA4MCwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgCi0gICAgMjI2LCAxOTUsIDIyNywgODAsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyNDcsIDM3LCAyMjYsIDE5NSwgMjI3LCA4MCwgMTksIAotICAgIDI1NSwgMzYsIDI1NCwgNTUsIDI0NywgMzcsIDIyOCwgNTUsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyMjcsIDI0LCAyMjgsIAotICAgIDU1LCAxOSwgMjU1LCAzNiwgMjU0LCA1NSwgMjQ3LCA2NCwgMjI4LCA1NSwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgCi0gICAgMjQ0LCAxMzYsIDIyOCwgNTUsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyNDcsIDM3LCAyNDQsIDEzNiwgMjI4LCA1NSwgMTksIAotICAgIDI1NSwgMzYsIDI1NCwgNTUsIDE2OCwgMjI2LCAxOTUsIDIyOCwgNTUsIDE5LCAyNTUsIDM2LCAyNTQsIDU1LCAyMjcsIDI0LCAKLSAgICAyMjYsIDE5NSwgMjI4LCA1NSwgMTksIDI1NSwgMzYsIDI1NCwgNTUsIDI0NywgNjQsIDIyNiwgMTk1LCAyMjgsIDU1LCAxOSwgCi0gICAgMjU1LCAzNiwgMjU0LCA1NSwgMjI3LCAyNCwgMjM2LCAxMDYsIDE5LCAyNTUsIDM2LCAyNDUsIDk2LCAxNjgsIDIzMywgMTYsIAotICAgIDE5LCAyNTUsIDM2LCAyMjYsIDIyNSwgMTE4LCAxOSwgMjU1LCAzNiwgMjQ1LCA5NCwgMTE4LCAxOSwgMjU1LCAzNiwgMjQ3LCAKLSAgICAyMDksIDExMywgMTksIDI1NSwgMzYsIDIyNiwgMjI1LCAxMTMsIDE5LCAyNTUsIDM2LCAyNTAsIDE5NiwgMTM1LCAyNDgsIAotICAgIDEyMCwgMTksIDI1NSwgMzYsIDI0NywgMjA5LCAxMzUsIDI0OCwgMTIwLCAxOSwgMjU1LCAzNiwgMjI2LCA1OSwgMTczLCAxOSwgCi0gICAgMjU1LCAzNiwgMjI2LCA1OSwgMjI3LCAyMywgMTksIDI1NSwgMzYsIDIyNiwgNTksIDIyNywgMjQsIDI1NCwgMjAzLCAxNSwgCi0gICAgMTksIDI1NSwgMzYsIDI0NSwgOTQsIDIyNywgMjMsIDE5LCAyNTUsIDM2LCAyMzYsIDIwMSwgMjI3LCAyMywgMTksIDI1NSwgCi0gICAgMzYsIDIyNiwgMjI1LCAyMjcsIDIzLCAxOSwgMjU1LCAzNiwgMjI2LCAyMjUsIDIyNiwgMjA3LCAxOSwgMjU1LCAzNiwgMjI2LCAKLSAgICA1OSwgMjQ3LCA2MywgMTksIDI1NSwgMzYsIDIyNiwgNTksIDI0NywgNjQsIDI1NCwgMjAzLCAxNSwgMTksIDI1NSwgMzYsIAotICAgIDI0NSwgOTQsIDI0NywgNjMsIDE5LCAyNTUsIDM2LCAyMjYsIDIyNSwgMjQ3LCA2MywgMTksIDI1NSwgMzYsIDIyNiwgMjI1LCAKLSAgICAxNjgsIDI0NCwgMTM1LCAxOSwgMjU1LCAzNiwgMjI2LCAyMjUsIDE1MiwgMjQ0LCAxMzUsIDE5LCAyNTUsIDM2LCAyNDcsIAotICAgIDIwOSwgMjQ3LCAzNywgMjQ0LCAxMzUsIDE5LCAyNTUsIDM2LCAyMjYsIDU5LCAyNDcsIDM3LCAyNDQsIDEzNSwgMTksIDI1NSwgCi0gICAgMzYsIDIyNiwgMjI1LCAyNDcsIDM3LCAyNDQsIDEzNSwgMTksIDI1NSwgMzYsIDI1MiwgMSwgMjQ3LCAzNywgMjQ0LCAxMzUsIAotICAgIDE5LCAyNTUsIDM2LCAyMzUsIDIxOSwgMjQ3LCAzNywgMjQ0LCAxMzUsIDE5LCAyNTUsIDM2LCAyMjYsIDIyNSwgMTY4LCAKLSAgICAyMjYsIDE5NCwgMTksIDI1NSwgMzYsIDIyNiwgMjI1LCAyNDcsIDM3LCAyMjYsIDE5NCwgMTksIDI1NSwgMzYsIDI1MCwgNTAsIAotICAgIDI0NywgMzcsIDIzNiwgMTA2LCAxOSwgMjU1LCAzNiwgMjI4LCAyOSwgMjQ3LCA2NCwgMjM2LCAxMDYsIDE5LCAxNjgsIDEzMiwgCi0gICAgNTMsIDE5LCAxNjgsIDEzMiwgNSwgMjU0LCAyMDMsIDE1LCAxOSwgMTM1LCAyMjYsIDIxMiwgNTMsIDE5LCAxNTIsIDIzMiwgCi0gICAgNzUsIDUzLCAxOSwgMjIzLCAyMjYsIDUzLCAxOSwgMjI3LCA4MSwgNTMsIDE5LCAyNDgsIDEyMiwgNTMsIDE5LCAyMzQsIDk1LCAKLSAgICA1MywgMTksIDEzNSwgMjM0LCA5NCwgNTMsIDE5LCAxNTIsIDIzNCwgOTQsIDUzLCAxOSwgMjQ2LCAyNDMsIDIzNCwgOTQsIAotICAgIDUzLCAxOSwgMjQ3LCAzNywgMjM0LCA5NCwgNTMsIDE5LCAyMzYsIDE5NiwgNTMsIDE5LCAyMzgsIDU1LCAyNTMsIDI1LCA1MywgCi0gICAgMTksIDIzNywgMTU2LCA1MywgMTksIDIzNCwgMTEsIDUzLCAxOSwgMjI0LCA2NiwgNTMsIDE5LCAyNTQsIDg5LCA1MywgMTksIAotICAgIDI1NCwgMTAwLCA1MywgMTksIDI0NSwgMjQyLCA1MywgMTksIDIyNiwgNDcsIDI1MywgMjUsIDUzLCAxOSwgMjIzLCA5MCwgCi0gICAgNTMsIDIzMSwgMTE1LCAyMjksIDE1NiwgNTMsIDIzMSwgMTE1LCAyMjUsIDEzNSwgNTMsIDIzMSwgMTE1LCAyMjksIDE3OCwgCi0gICAgNTMsIDIzMSwgMTE1LCAyMjksIDE1NCwgNTMsIDIzMSwgMTE1LCAyNDksIDIxNywgMjI5LCAxNTQsIDUzLCAyMzEsIDExNSwgCi0gICAgMjI4LCAyNTEsIDUzLCAyMzEsIDExNSwgMjUwLCA0NiwgNTMsIDIzMSwgMTE1LCAyMzIsIDY0LCA1MywgMjMxLCAxMTUsIAotICAgIDIyOSwgMTY2LCA1MywgMjMxLCAxMTUsIDI0OCwgODksIDUzLCAyMzEsIDExNSwgMjU0LCA4NywgNTMsIDIzMSwgMTE1LCAKLSAgICAyNTEsIDIxNSwgNTMsIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMzMsIDE0NSwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDIzMywgCi0gICAgMTEsIDI0NSwgMTE4LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjI3LCA2NSwgMjQ1LCAxMTgsIDIzMywgOTQsIDI0OSwgMTk4LCAKLSAgICA1LCAyNTIsIDEyLCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjUxLCAxNjMsIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMjQsIAotICAgIDEwMSwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI0NSwgMTAyLCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjQ2LCAxNTAsIDIzMywgCi0gICAgOTQsIDI0OSwgMTk4LCA1LCAyMjYsIDE3NCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDU4LCAyMzMsIDk0LCAyNDksIDE5OCwgCi0gICAgNSwgMjUyLCAxMjEsIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMjksIDg3LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjUxLCAKLSAgICA3MywgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDIzNywgMzQsIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMzYsIDI1NSwgMjMzLCAKLSAgICA5NCwgMjQ5LCAxOTgsIDUsIDIzMCwgMjM3LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjM3LCAxOTAsIDIzMywgOTQsIDI0OSwgCi0gICAgMTk4LCA1LCAyNTIsIDEzMCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI1MiwgNCwgMjMzLCAxOCwgMjMzLCA5NCwgMjQ5LCAKLSAgICAxOTgsIDUsIDI0OSwgMTUxLCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjUxLCA1OCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIAotICAgIDIyOCwgMTkwLCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjUxLCA1OSwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI1MiwgMjI5LCAKLSAgICAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjI5LCA3NiwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI0NCwgMTYwLCAyMzMsIDk0LCAKLSAgICAyNDksIDE5OCwgNSwgMjQ1LCA3NCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI1MiwgODIsIDIzNywgMjI5LCAyMzMsIDk0LCAKLSAgICAyNDksIDE5OCwgNSwgMjUyLCAwLCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjMyLCA2LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgCi0gICAgMjQ4LCA1MywgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDI0OCwgMTI4LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjI1LCAyNDMsIAotICAgIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyNTIsIDIzMiwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDIzMywgMTksIDIyNiwgODYsIAotICAgIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMjQsIDIxOCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDIzMywgMTk1LCAyMzMsIDk0LCAKLSAgICAyNDksIDE5OCwgNSwgMjMxLCAxMDksIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMzcsIDE3OSwgMjMzLCA5NCwgMjQ5LCAxOTgsIAotICAgIDUsIDIzMywgMjU0LCAyNTMsIDY2LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjQ3LCAxMSwgMjMzLCA5NCwgMjQ5LCAxOTgsIAotICAgIDUsIDI0NSwgMjM4LCAyMzMsIDk0LCAyNDksIDE5OCwgNSwgMjI4LCAzMCwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDMsIDI1NCwgCi0gICAgMzUsIDIzMywgOTQsIDI0OSwgMTk4LCA1LCAyMjQsIDE0NiwgMjUzLCA0MSwgMjMzLCA5NCwgMjQ5LCAxOTgsIDUsIDM2LCAKLSAgICAyMzQsIDk3LCA4MiwgMjM3LCA3OSwgMSwgNTcsIDIzNywgNzksIDEsIDcyLCAyMzcsIDc5LCAxLCAyNTQsIDI3LCAyMzcsIAotICAgIDc5LCAxLCAyNTIsIDE5MSwgMjM3LCA3OSwgMSwgMjE0LCAyMzcsIDc5LCAxLCAyMjIsIDIyMiwgMjM3LCA3OSwgMSwgNzQsIAotICAgIDIzNywgNzksIDEsIDIyNCwgMTc0LCAyMzcsIDc5LCAxLCAyMjMsIDExOSwgMjM3LCA3OSwgMSwgMjI2LCAyNTMsIDIzNywgCi0gICAgNzksIDEsIDIzOSwgMTgyLCAyMzcsIDc5LCAxLCAyMzksIDc2LCAyMzcsIDc5LCAxLCAyMzIsIDEzOSwgMjM3LCA3OSwgMSwgCi0gICAgMTQ5LCAyMzcsIDc5LCAxLCAxODUsIDIzNywgNzksIDEsIDE5OSwgMjM3LCA3OSwgMSwgMjM2LCAxMDcsIDIzNywgNzksIDEsIAotICAgIDIzNSwgMTksIDIzNywgNzksIDEsIDY2LCAyMzcsIDc5LCAxLCAyMzMsIDI0NCwgMjM3LCA3OSwgMSwgMjM4LCAxNjgsIDIzNywgCi0gICAgNzksIDEsIDE0NiwgMjM3LCA3OSwgMSwgMTkzLCAyMzcsIDc5LCAxLCAyMjcsIDEwOSwgMjM3LCA3OSwgMSwgMjI2LCAyMiwgCi0gICAgMjM3LCA3OSwgMSwgMjU0LCAxOTAsIDIzNywgNzksIDEsIDI0NywgMjM5LCAyMzcsIDc5LCAxLCAyMTIsIDIzNywgNzksIDEsIAotICAgIDIyNCwgNzMsIDI1MiwgOCwgMSwgNTcsIDI1MiwgOCwgMSwgMjMzLCAyNDMsIDI1MiwgOCwgMSwgMjIyLCAyMjIsIDI1MiwgOCwgCi0gICAgMSwgMTQ5LCAyNTIsIDgsIDEsIDIyNSwgNzUsIDI1MiwgOCwgMSwgMTQ2LCAyNTIsIDgsIDEsIDIzNywgMjQ3LCAyNTIsIDgsIAotICAgIDEsIDI1NSwgNjUsIDI1MiwgOCwgMSwgMjMyLCAxMzksIDI1MiwgOCwgMSwgMjU0LCAyNywgMjUyLCA4LCAxLCAxODUsIDI1MiwgCi0gICAgOCwgMSwgNzMsIDI1MiwgOCwgMSwgMjUwLCAxOTEsIDI1MiwgOCwgMSwgMjI3LCAxMDksIDI1MiwgOCwgMSwgMjI5LCAxNDgsIAotICAgIDI1MiwgOCwgMSwgMjI5LCAxNDcsIDI1MiwgOCwgMSwgMTkzLCAyNTIsIDgsIDEsIDI1MiwgNDMsIDI1MiwgOCwgMSwgNjYsIAotICAgIDI1MiwgOCwgMSwgMjM1LCAxOSwgMjUyLCA4LCAxLCAyMjQsIDczLCAyNTIsIDgsIDEsIDE5OSwgMjUyLCA4LCAxLCAyMjYsIAotICAgIDIxLCAyNTIsIDgsIDEsIDIzMywgMjQ0LCAyNTIsIDgsIDEsIDIyOCwgMTExLCAyNTIsIDgsIDEsIDc0LCAyNTIsIDgsIDEsIAotICAgIDcyLCAyNTIsIDgsIDEsIDIyNSwgNzIsIDI1MiwgOCwgMSwgMjM5LCA3NiwgMjUyLCA4LCAxLCAyMzksIDc1LCAyNTIsIDgsIAotICAgIDEsIDIzNSwgMTkwLCAyNTIsIDgsIDEsIDIyNSwgNzYsIDI1MiwgOCwgMSwgMjE0LCAyNTIsIDgsIDEsIDI0NiwgMTk1LCAKLSAgICAyNTIsIDgsIDEsIDIyOCwgNzAsIDI1MiwgOCwgMSwgMjI4LCA2OSwgMjUyLCA4LCAxLCAyMzUsIDEzOSwgMjUyLCA4LCAxLCAKLSAgICAyNDAsIDQ3LCAyNTIsIDgsIDEsIDI1MiwgNDIsIDI1MiwgOCwgMSwgMjI2LCAyMiwgMjUyLCA4LCAxLCAyMjUsIDc0LCAyNTIsIAotICAgIDgsIDEsIDIzMSwgMTAwLCAyNTIsIDgsIDEsIDIzNiwgMjQ5LCAyNTIsIDgsIDEsIDIzNiwgMjQ4LCAyNTIsIDgsIDEsIDIzNiwgCi0gICAgMjQ3LCAyNTIsIDgsIDEsIDIzNiwgMjQ2LCAyNTIsIDgsIDEsIDIzNywgMjQ2LCAyNTIsIDgsIDEsIDI0OCwgNTcsIDI1MiwgCi0gICAgOCwgMSwgMjI1LCA3MywgODQsIDI3LCAxLCA1NywgODQsIDI3LCAxLCAyNTIsIDIzOCwgODQsIDI3LCAxLCAyMzksIDMsIDg0LCAKLSAgICAyNywgMSwgMjUwLCA3NywgODQsIDI3LCAxLCA3MiwgODQsIDI3LCAxLCAyMjUsIDQyLCA4NCwgMjcsIDEsIDIyMywgOTcsIAotICAgIDg0LCAyNywgMSwgMjQ1LCAxMjEsIDg0LCAyNywgMSwgMjI2LCAyMzksIDg0LCAyNywgMSwgNzQsIDg0LCAyNywgMSwgMTc3LCAKLSAgICA4NCwgMjcsIDEsIDI0OCwgMiwgODQsIDI3LCAxLCAyNDcsIDI0NywgODQsIDI3LCAxLCAyNDcsIDIzOSwgODQsIDI3LCAxLCAKLSAgICAyNDcsIDE4MywgODQsIDI3LCAxLCA3MywgODQsIDI3LCAxLCAyMzMsIDE1MSwgODQsIDI3LCAxLCAyMjksIDExNCwgODQsIAotICAgIDI3LCAxLCAyMzgsIDEwNywgODQsIDI3LCAxLCAyNDcsIDE5OCwgODQsIDI3LCAxLCAyNDcsIDE4OCwgODQsIDI3LCAxLCAKLSAgICAyMjcsIDQ0LCA4NCwgMjcsIDEsIDY2LCA4NCwgMjcsIDEsIDI0OCwgNSwgODQsIDI3LCAxLCAyMzMsIDkwLCA4NCwgMjcsIDEsIAotICAgIDIzOCwgMjE3LCA4NCwgMjcsIDEsIDI0OCwgMjksIDg0LCAyNywgMSwgMjQ3LCAxOTAsIDg0LCAyNywgMSwgMjUxLCAxODIsIAotICAgIDg0LCAyNywgMSwgMjQwLCA0NywgODQsIDI3LCAxLCAyMjUsIDc2LCA4NCwgMjcsIDIwNywgMTE4LCA4NCwgMjcsIDIwNywgCi0gICAgMTczLCA4NCwgMjcsIDIwNywgMjI3LCAyMywgODQsIDI3LCAyMDcsIDI0NywgNjMsIDI0NSwgMjUwLCAxLCAyNTUsIDAsIAotICAgIDI0NSwgMjUwLCAxLCAyNTMsIDUzLCAyNDUsIDI1MCwgMSwgMjQ2LCA0MywgMjQ1LCAyNTAsIDEsIDI1MCwgMTczLCAyNDUsIAotICAgIDI1MCwgMSwgMjU0LCAyNTIsIDI0NSwgMjUwLCAxLCAyMzIsIDEyOSwgMjQ1LCAyNTAsIDEsIDIzOSwgMTkxLCAyNDUsIDI1MCwgCi0gICAgMSwgMjQ1LCAxNjEsIDI0NSwgMjUwLCAxLCAyMjYsIDIwMywgMjQ1LCAyNTAsIDEsIDI0OCwgMTEsIDI0NSwgMjUwLCAxLCAKLSAgICAyMzgsIDg1LCAyNDUsIDI1MCwgMSwgMjM4LCAyNywgMjQ1LCAyNTAsIDEsIDIzNywgMzEsIDI0NSwgMjUwLCAxLCAyMzUsIAotICAgIDIyMSwgMjQ1LCAyNTAsIDEsIDIzOSwgMTY0LCAyNDUsIDI1MCwgMSwgMjI1LCA5MCwgMjQ1LCAyNTAsIDEsIDIzMywgMjMxLCAKLSAgICAyNDUsIDI1MCwgMSwgMjM1LCA1NywgMjQ1LCAyNTAsIDEsIDIzMiwgMTIsIDI0NSwgMjUwLCAxLCAyMzAsIDIzOCwgMjQ1LCAKLSAgICAyNTAsIDEsIDIyNywgMzEsIDI0NSwgMjUwLCAxLCAyMjQsIDEwOCwgMjQ1LCAyNTAsIDEsIDI0NywgMTE1LCAyNDUsIDI1MCwgCi0gICAgMSwgMjQwLCA1MSwgMjQ1LCAyNTAsIDEsIDI0NCwgMTI2LCAyNDUsIDI1MCwgMSwgMjM0LCAxOCwgMjQ1LCAyNTAsIDEsIAotICAgIDIzNSwgNjEsIDI0NCwgMTM1LCAyMjUsIDE1NiwgMSwgMjU0LCAyMDksIDIyNSwgMTU2LCAxLCAyNTIsIDE5OCwgMjI1LCAKLSAgICAxNTYsIDEsIDI0NiwgMTcwLCAyMjUsIDE1NiwgMSwgMjM4LCAyMjcsIDIyNSwgMTU2LCAxLCAyNTAsIDQ3LCAyMjUsIDE1NiwgCi0gICAgMSwgMjQ0LCAyMjcsIDIyNSwgMTU2LCAxLCAyMjQsIDEwNSwgMjI1LCAxNTYsIDEsIDIyMywgODgsIDIyNSwgMTU2LCAxLCAKLSAgICAyNDQsIDE1NiwgMjI1LCAxNTYsIDEsIDIyNywgMTAsIDIyNSwgMTU2LCAxLCAyMjMsIDE3NSwgMjI1LCAxNTYsIDEsIDIzOSwgCi0gICAgNTksIDIyNSwgMTU2LCAxLCAyMjksIDc4LCAyMjUsIDE1NiwgMSwgMjM4LCAxNiwgMjI1LCAxNTYsIDEsIDIzNiwgMjE1LCAKLSAgICAyMjUsIDE1NiwgMSwgMjUwLCAyMCwgMjI1LCAxNTYsIDEsIDIzNCwgMTk0LCAyMjUsIDE1NiwgMSwgMjIzLCAxOSwgMjI1LCAKLSAgICAxNTYsIDEsIDIzMSwgMSwgMjI1LCAxNTYsIDEsIDI1NCwgMjQ4LCAyMjUsIDE1NiwgMSwgMjMyLCAxNzMsIDIyNSwgMTU2LCAKLSAgICAxLCAyMzEsIDIzLCAyMjUsIDE1NiwgMSwgMjMyLCA4OCwgMjI1LCAxNTYsIDEsIDIzMSwgMjU1LCAyMjUsIDE1NiwgMSwgCi0gICAgMjI2LCAyNDIsIDIyNSwgMTU2LCAxLCAyNDYsIDYzLCAyMjUsIDE1NiwgMSwgOTYsIDIyNSwgMTU2LCAxLCA3NCwgMjI1LCAKLSAgICAxNTYsIDEsIDY2LCAyMjUsIDE1NiwgMSwgMjI4LCA4MCwgMjI1LCAxNTYsIDIyNCwgOTIsIDI0OSwgMTg0LCA4NCwgMjMzLCAKLSAgICAxMTMsIDUsIDU3LCA4NCwgMjMzLCAxMTMsIDUsIDc0LCA4NCwgMjMzLCAxMTMsIDUsIDY2LCA4NCwgMjMzLCAxMTMsIDUsIAotICAgIDE3NywgODQsIDIzMywgMTEzLCA1LCAyMzgsIDEwNywgODQsIDIzMywgMTEzLCA1LCAyNDYsIDE5MywgODQsIDIzMywgMTEzLCAKLSAgICA1LCAyNDUsIDIxOCwgODQsIDIzMywgMTEzLCA1LCAyMjQsIDcyLCA4NCwgMjMzLCAxMTMsIDUsIDI1MiwgMzksIDg0LCAyMzMsIAotICAgIDExMywgNSwgMjM5LCAxNzksIDg0LCAyMzMsIDExMywgNSwgMjM5LCAxNTYsIDg0LCAyMzMsIDExMywgNSwgMjI3LCAxMDcsIAotICAgIDg0LCAyMzMsIDExMywgNSwgMjI1LCAyNTAsIDg0LCAyMzMsIDExMywgNSwgMjUwLCAxODksIDg0LCAyMzMsIDExMywgNSwgCi0gICAgMjUwLCA0LCA4NCwgMjMzLCAxMTMsIDUsIDI0OCwgMTA3LCA4NCwgMjMzLCAxMTMsIDUsIDIyNiwgMjUxLCA4NCwgMjMzLCAKLSAgICAxMTMsIDUsIDIxMywgODQsIDIzMywgMTEzLCA1LCAyNTMsIDcwLCA4NCwgMjMzLCAxMTMsIDUsIDI0NywgMTI5LCA4NCwgCi0gICAgMjMzLCAxMTMsIDUsIDIzNiwgMSwgODQsIDIzMywgMTEzLCA1LCAyMzQsIDIwNiwgODQsIDIzMywgMTEzLCA1LCAxOTgsIDg0LCAKLSAgICAyMzMsIDExMywgNSwgMjM2LCAxNTcsIDg0LCAyMzMsIDExMywgNSwgMjM2LCA2NiwgODQsIDIzMywgMTEzLCA1LCAxOTEsIAotICAgIDg0LCAyMzMsIDExMywgNSwgMjI1LCA2NCwgODQsIDIzMywgMTEzLCA1LCAyMjQsIDIyOCwgODQsIDIzMywgMTEzLCA1LCAKLSAgICAyMDgsIDg0LCAyMzMsIDExMywgNSwgMjMxLCA3MCwgODQsIDIzMywgMTEzLCA1LCAyMzgsIDQzLCA4NCwgMjMzLCAxMTMsIDUsIAotICAgIDIzMSwgMzEsIDg0LCAyMzMsIDExMywgNSwgMjIzLCAxMTcsIDg0LCAyMzMsIDExMywgNSwgMjI5LCAxNDYsIDg0LCAyMzMsIAotICAgIDExMywgNSwgMjI4LCAxMTAsIDg0LCAyMzMsIDExMywgNSwgMTU0LCA4NCwgMjMzLCAxMTMsIDUsIDI1NCwgNDgsIDg0LCAKLSAgICAyMzMsIDExMywgNSwgMjU0LCA0NywgODQsIDIzMywgMTEzLCA1LCAyNTQsIDQ2LCA4NCwgMjMzLCAxMTMsIDUsIDIyNCwgNDksIAotICAgIDg0LCAyMzMsIDExMywgNSwgMjUwLCAxNzAsIDg0LCAyMzMsIDExMywgNSwgMjUwLCAxNjksIDg0LCAyMzMsIDExMywgNSwgCi0gICAgMjUzLCA1NywgODQsIDIzMywgMTEzLCA1LCAyNTIsIDYyLCA4NCwgMjMzLCAxMTMsIDIyNCwgOTIsIDI0OSwgMTg0LCA4NCwgCi0gICAgMjMzLCAxMTMsIDY1LCAxMTgsIDg0LCAyMzMsIDExMywgNjUsIDExMywgODQsIDIzMywgMTEzLCA2NSwgMjI3LCAyMywgODQsIAotICAgIDIzMywgMTEzLCA2NSwgMjI1LCAyMTYsIDg0LCAyMzMsIDExMywgNjUsIDI0NCwgMTM1LCAxNDMsIDYsIDEsIDE4MiwgNzQsIAotICAgIDE0MywgNiwgMSwgMTgyLCA3MiwgMTQzLCA2LCAxLCAxODIsIDU3LCAxNDMsIDYsIDEsIDE4MiwgMjU1LCAzLCAxNDMsIDYsIAotICAgIDEsIDE4MiwgNzMsIDE0MywgNiwgMSwgMTgyLCAyMzQsIDUyLCAxNDMsIDYsIDEsIDIyOSwgNjMsIDc0LCAxNDMsIDYsIDEsIAotICAgIDIyOSwgNjMsIDcyLCAxNDMsIDYsIDEsIDIyOSwgNjMsIDU3LCAxNDMsIDYsIDEsIDIyOSwgNjMsIDI1NSwgMywgMTQzLCA2LCAKLSAgICAxLCAyMjksIDYzLCA3MywgMTQzLCA2LCAxLCAyMjksIDYzLCAyMzQsIDUyLCAxNDMsIDYsIDEsIDI1NCwgMzQsIDE0MywgNiwgCi0gICAgMSwgMjMzLCAyNTUsIDE0MywgNiwgMSwgMjI0LCA4MywgMTQzLCA2LCAxLCAyMjMsIDIyNSwgMTQzLCA2LCAxLCAyMTIsIAotICAgIDE0MywgNiwgMSwgMjMzLCAxNDQsIDE0MywgNiwgMSwgMjUyLCAyMzIsIDE0MywgNiwgMSwgMjI3LCAzNywgMTQzLCA2LCAxLCAKLSAgICAyNTAsIDY3LCAxNDMsIDYsIDEsIDI1MSwgMTc5LCAxNDMsIDYsIDEsIDIzOSwgMTY5LCAxNDMsIDYsIDEsIDIzOSwgMTAsIAotICAgIDE0MywgNiwgMSwgMjQ2LCAxNDgsIDE0MywgNiwgMSwgMjQ4LCAyOSwgMTQzLCA2LCAxLCAyMjUsIDM4LCAxNDMsIDYsIDEsIAotICAgIDI0NywgMTY4LCAxNDMsIDYsIDEsIDIyNiwgMjM4LCAxNDMsIDYsIDEsIDI0NywgMTg4LCAxNDMsIDYsIDEsIDIyMywgOTUsIAotICAgIDE0MywgNiwgMSwgMjQ3LCAxODMsIDE0MywgNiwgMSwgMjIzLCA3NiwgMTQzLCA2LCAxLCAyNDcsIDE5OCwgMTQzLCA2LCAxLCAKLSAgICAyNDgsIDIsIDE0MywgNiwgMSwgMjQ3LCAyNDcsIDE0MywgNiwgMSwgMjQ3LCAyMzksIDE0MywgNiwgMSwgMjQ3LCAyMjgsIAotICAgIDE0MywgNiwgMSwgMjM0LCA4MCwgMTQzLCA2LCAxLCAyNDcsIDE1NSwgMTQzLCAzLCAxLCAxODIsIDc0LCAxNDMsIDMsIDEsIAotICAgIDE4MiwgNzIsIDE0MywgMywgMSwgMTgyLCA1NywgMTQzLCAzLCAxLCAxODIsIDI1NSwgMywgMTQzLCAzLCAxLCAxODIsIDczLCAKLSAgICAxNDMsIDMsIDEsIDE4MiwgMjM0LCA1MiwgMTQzLCAzLCAxLCAyMjksIDYzLCA3NCwgMTQzLCAzLCAxLCAyMjksIDYzLCA3MiwgCi0gICAgMTQzLCAzLCAxLCAyMjksIDYzLCA1NywgMTQzLCAzLCAxLCAyMjksIDYzLCAyNTUsIDMsIDE0MywgMywgMSwgMjI5LCA2MywgCi0gICAgNzMsIDE0MywgMywgMSwgMjI5LCA2MywgMjM0LCA1MiwgMTQzLCAzLCAxLCAyNTQsIDM0LCAxNDMsIDMsIDEsIDIzMywgMjU1LCAKLSAgICAxNDMsIDMsIDEsIDIyNCwgODMsIDE0MywgMywgMSwgMjIzLCAyMjUsIDE0MywgMywgMSwgMjEyLCAxNDMsIDMsIDEsIDIzMywgCi0gICAgMTQ0LCAxNDMsIDMsIDEsIDI1MiwgMjMyLCAxNDMsIDMsIDEsIDIyNywgMzcsIDE0MywgMywgMSwgMjUwLCA2NywgMTQzLCAzLCAKLSAgICAxLCAyNTEsIDE3OSwgMTQzLCAzLCAxLCAyMzksIDE2OSwgMTQzLCAzLCAxLCAyMzksIDEwLCAxNDMsIDMsIDEsIDI0NiwgCi0gICAgMTQ4LCAxNDMsIDMsIDEsIDI0OCwgMjksIDE0MywgMywgMSwgMjI1LCAzOCwgMTQzLCAzLCAxLCAyNDcsIDE2OCwgMTQzLCAzLCAKLSAgICAxLCAyMjYsIDIzOCwgMTQzLCAzLCAxLCAyNDcsIDE4OCwgMTQzLCAzLCAxLCAyMjMsIDk1LCAxNDMsIDMsIDEsIDI0NywgCi0gICAgMTgzLCAxNDMsIDMsIDEsIDIyMywgNzYsIDE0MywgMywgMSwgMjQ3LCAxOTgsIDE0MywgMywgMSwgMjQ4LCAyLCAxNDMsIDMsIAotICAgIDEsIDI0NywgMjQ3LCAxNDMsIDMsIDEsIDI0NywgMjM5LCAxNDMsIDMsIDEsIDI0NywgMjI4LCAxNDMsIDMsIDEsIDIzNCwgCi0gICAgODAsIDE0MywgMywgMSwgMjQ3LCAxNTUsIDIyOSwgMTE5LCAxLCAyMzMsIDE0MywgMjI5LCAxMTksIDEsIDIyNiwgOTksIAotICAgIDIyOSwgMTE5LCAxLCAyMzgsIDE5OCwgMjI5LCAxMTksIDEsIDI0NywgOTIsIDIyOSwgMTE5LCAxLCAyMjYsIDIxNywgMjI5LCAKLSAgICAxMTksIDEsIDIyOCwgMTY5LCAyMjksIDExOSwgMSwgMjI3LCAyMTAsIDIyOSwgMTE5LCAxLCAyNTEsIDEyOCwgMjI5LCAxMTksIAotICAgIDEsIDIyMywgMjI3LCAyMjksIDExOSwgMSwgMjQ0LCAxMzQsIDIyOSwgMTE5LCAxLCAyNTIsIDE4MCwgMjI5LCAxMTksIDEsIAotICAgIDI1MCwgNzYsIDIyOSwgMTE5LCAxLCAyNDYsIDE3OSwgMjI5LCAxMTksIDEsIDIyNCwgMTk0LCAyMjksIDExOSwgMSwgMjI2LCAKLSAgICAyMjEsIDIyOSwgMTE5LCAxLCAyMjMsIDI1LCAyMjksIDExOSwgMSwgMjM2LCAyMzMsIDIyOSwgMTE5LCAxLCAyMzksIDk5LCAKLSAgICAyMjksIDExOSwgMSwgMjI0LCAxMDMsIDIyOSwgMTE5LCAxLCAyNDUsIDE2OSwgMjI5LCAxMTksIDEsIDIzNywgMTM1LCAyMjksIAotICAgIDExOSwgMSwgMjM2LCAxMjYsIDIyOSwgMTE5LCAxLCAyNDAsIDU0LCAyMjksIDExOSwgMSwgMjQ4LCAyOCwgMjI5LCAxMTksIAotICAgIDEsIDI1NCwgODAsIDIyOSwgMTE5LCAxLCAyNTUsIDIyLCAyMjksIDExOSwgMSwgMjM0LCA2MSwgMjI5LCAxMTksIDEsIDIyNCwgCi0gICAgOTUsIDIyOSwgMTE5LCAxLCAyMzQsIDEwLCAyMjksIDExOSwgMSwgMjU1LCAzLCAyMjksIDExOSwgMSwgMjMxLCAxMTksIAotICAgIDIyOSwgMTE5LCAxLCAyMzQsIDE5NCwgMjI5LCAxMTksIDEsIDI0OCwgNDIsIDIyOSwgMTE5LCAxLCAyNTUsIDYsIDIyOSwgCi0gICAgMTE5LCAxLCAyNDQsIDY5LCAyMjksIDExOSwgMSwgMjI1LCAxMTYsIDIyOSwgMTE5LCAxLCAyMzQsIDEwMywgMjI5LCAxMTksIAotICAgIDEsIDIzNCwgNDYsIDIyOSwgMTE5LCAxLCAyMzQsIDc5LCAyMjksIDExOSwgMSwgMjU0LCAzNywgMjI5LCAxMTksIDEsIDI1NCwgCi0gICAgMTE3LCAyMjksIDExOSwgMSwgMjM0LCAzMSwgMjI5LCAxMTksIDEsIDI1NCwgMjQ1LCAyMjksIDExOSwgMSwgMjQ3LCAxOTIsIAotICAgIDIyOSwgMTE5LCAxLCAyNTQsIDk3LCAyMjksIDExOSwgMSwgMjQ4LCA1MSwgMjI5LCAxMTksIDEsIDI0NCwgNzMsIDIyOSwgCi0gICAgMTE5LCAxLCAyMjMsIDIwNywgMjM0LCAyMCwgMSwgMjU0LCAyMjcsIDIzNCwgMjAsIDEsIDI1MywgNzAsIDIzNCwgMjAsIDEsIAotICAgIDIyNywgMTA3LCAyMzQsIDIwLCAxLCAyMzksIDE3OSwgMjM0LCAyMCwgMSwgMjI0LCA3MiwgMjM0LCAyMCwgMSwgMjM4LCAKLSAgICAyMjcsIDIzNCwgMjAsIDEsIDI1MCwgNjYsIDIzNCwgMjAsIDEsIDIwOCwgMjM0LCAyMCwgMSwgMjMxLCAzMSwgMjM0LCAyMCwgCi0gICAgMSwgMjI5LCA4NCwgMjM0LCAyMCwgMSwgMjUwLCAyMiwgMjM0LCAyMCwgMSwgMjUxLCAyNDgsIDIzNCwgMjAsIDEsIDI0NiwgCi0gICAgMTkzLCAyMzQsIDIwLCAxLCAyNDcsIDEyOSwgMjM0LCAyMCwgMSwgMjMyLCAxMzYsIDIzNCwgMjAsIDEsIDIzOSwgNzEsIAotICAgIDIzNCwgMjAsIDEsIDIzOCwgMzksIDIzNCwgMjAsIDEsIDIzNiwgMTM2LCAyMzQsIDIwLCAxLCAyMzQsIDE4MSwgMjM0LCAyMCwgCi0gICAgMSwgMjI0LCAxNDQsIDIzNCwgMjAsIDEsIDE1NCwgMjM0LCAyMCwgMSwgMTkxLCAyMzQsIDIwLCAxLCA1NywgMjM0LCAyMCwgCi0gICAgMSwgNzIsIDIzNCwgMjAsIDEsIDc0LCAyMzQsIDIwLCAxLCA3MywgMjM0LCAyMCwgMSwgNjYsIDIzNCwgMjAsIDEsIDI1NSwgCi0gICAgNjMsIDIzNCwgMjAsIDEsIDI0OCwgMzUsIDIzNCwgMjAsIDEsIDIzNCwgNTIsIDIzNCwgMjAsIDIxLCAyMjMsIDg5LCAyMzQsIAotICAgIDIwLCAyMSwgMTE4LCAyMzQsIDIwLCAyMSwgMTEzLCAyMzQsIDIwLCAyMSwgMTY2LCAyMzQsIDIwLCAyMSwgMTU4LCAyMzQsIAotICAgIDIwLCAyMSwgMTczLCAyMzQsIDIwLCAyMSwgMTgzLCAyMzQsIDIwLCAyMSwgMTk0LCAyMzQsIDIwLCAyMSwgMTg3LCAyMzQsIAotICAgIDIwLCAyMSwgMTkyLCAyMTgsIDQsIDU3LCAyMTgsIDQsIDcyLCAyMTgsIDQsIDc0LCAyMTgsIDQsIDczLCAyMTgsIDQsIDY2LCAKLSAgICAyMTgsIDQsIDIzOSwgMTc5LCAyMTgsIDQsIDIzOSwgMTE3LCAyMTgsIDQsIDE3NywgMjE4LCA0LCAyMzksIDMsIDIxOCwgNCwgCi0gICAgMjM4LCAxOTksIDIxOCwgNCwgMjM4LCAxNTAsIDIxOCwgNCwgMjM4LCAxMDcsIDIxOCwgNCwgMjM4LCA0MywgMjE4LCA0LCAKLSAgICAyMzcsIDI0MywgMjE4LCA0LCAyMzcsIDE5MywgMjE4LCA0LCAyMzcsIDE0MywgMjE4LCA0LCAyMzcsIDExMCwgMjE4LCA0LCAKLSAgICAxOTgsIDIxOCwgNCwgMjM2LCAyMzUsIDIxOCwgNCwgMjM2LCAxNTcsIDIxOCwgNCwgMjM2LCAxMDMsIDIxOCwgNCwgMjM2LCAKLSAgICA2NiwgMjE4LCA0LCAyMzYsIDEsIDIxOCwgNCwgMjM1LCAxNjIsIDIxOCwgNCwgMjM1LCA4OSwgMjE4LCA0LCAyMzUsIDYsIAotICAgIDIxOCwgNCwgMjM0LCAyMDYsIDIxOCwgNCwgMjEzLCAyMTgsIDQsIDIzMywgMTUxLCAyMTgsIDQsIDIzMywgNjksIDIxOCwgNCwgCi0gICAgMjMzLCA0LCAyMTgsIDQsIDIzMiwgMTczLCAyMTgsIDQsIDIwOCwgMjE4LCA0LCAyMzEsIDI0NCwgMjE4LCA0LCAyMzEsIAotICAgIDE4MCwgMjE4LCA0LCAyMzEsIDEyMiwgMjE4LCA0LCAyMzEsIDcwLCAyMTgsIDQsIDIzMSwgMzEsIDIxOCwgNCwgMjMwLCAKLSAgICAyMTMsIDIxOCwgNCwgMjI5LCAxNSwgMjE4LCA0LCAyMjgsIDE2OSwgMjE4LCA0LCAyMjgsIDYsIDIxOCwgNCwgMjI3LCAxMDcsIAotICAgIDIxOCwgNCwgMjI3LCA0NCwgMjE4LCA0LCAyMjYsIDE3NSwgMjE4LCA0LCA5NiwgMjE4LCA0LCAyMjUsIDI1MCwgMjE4LCA0LCAKLSAgICAyMjQsIDE3MywgMjE4LCA0LCAyMjQsIDE0MSwgMjE4LCA0LCAyMjQsIDExOCwgMjE4LCA0LCAyMjQsIDEwNSwgMjE4LCA0LCAKLSAgICAyMjQsIDcyLCAyMTgsIDQsIDIyNCwgNjksIDIxOCwgNCwgMjIzLCAxMTcsIDIxOCwgNCwgMjIzLCAyNywgMjMzLCA3NywgMSwgCi0gICAgMjU0LCAyMjMsIDIzMywgNzcsIDEsIDI1MiwgMjAwLCAyMzMsIDc3LCAxLCAyNDYsIDE3MSwgMjMzLCA3NywgMSwgMjUwLCAKLSAgICA0OSwgMjMzLCA3NywgMSwgMjQ1LCAxMjEsIDIzMywgNzcsIDEsIDIyNCwgMTQ5LCAyMzMsIDc3LCAxLCAyMjMsIDExMiwgCi0gICAgMjMzLCA3NywgMSwgMjQ1LCA5MCwgMjMzLCA3NywgMSwgMjI3LCAxMCwgMjMzLCA3NywgMSwgMjIzLCAxNzUsIDIzMywgNzcsIAotICAgIDEsIDIzOSwgNTksIDIzMywgNzcsIDEsIDIzOCwgMTcsIDIzMywgNzcsIDEsIDIzNiwgMjE1LCAyMzMsIDc3LCAxLCAyMzQsIAotICAgIDE5NCwgMjMzLCA3NywgMSwgMjI5LCAxODAsIDIzMywgNzcsIDEsIDI1NCwgMjQ4LCAyMzMsIDc3LCAxLCAyMzMsIDE1MSwgCi0gICAgMjMzLCA3NywgMSwgMjMxLCAyMywgMjMzLCA3NywgMSwgMjMyLCA5MiwgMjMzLCA3NywgMSwgMjMxLCAxMDgsIDIzMywgNzcsIAotICAgIDEsIDIyOSwgNzgsIDIzMywgNzcsIDEsIDIyNywgNjEsIDIzMywgNzcsIDY1LCAxMTgsIDIzMywgNzcsIDY1LCAyMjcsIDIzLCAKLSAgICAyMzMsIDc3LCA2NSwgMjI1LCAyMTYsIDIzMywgNzcsIDY1LCAxNjgsIDI0NCwgMTM1LCAyMzMsIDc3LCAyMjQsIDkyLCAyMjksIAotICAgIDE3MywgMjM3LCA3OCwgMSwgNTcsIDIzNywgNzgsIDEsIDI1NCwgMjcsIDIzNywgNzgsIDEsIDIxNCwgMjM3LCA3OCwgMSwgCi0gICAgMjIyLCAyMjIsIDIzNywgNzgsIDEsIDcyLCAyMzcsIDc4LCAxLCAxOTYsIDIzNywgNzgsIDEsIDc0LCAyMzcsIDc4LCAxLCAKLSAgICAyMjQsIDI1LCAyMzcsIDc4LCAxLCAyMzksIDc2LCAyMzcsIDc4LCAxLCAxNDksIDIzNywgNzgsIDEsIDE4NSwgMjM3LCA3OCwgCi0gICAgMSwgMTk5LCAyMzcsIDc4LCAxLCA3MywgMjM3LCA3OCwgMSwgMTQ2LCAyMzcsIDc4LCAxLCAyMjgsIDExMSwgMjM3LCA3OCwgCi0gICAgMSwgMjI3LCAxMDksIDIzNywgNzgsIDEsIDY2LCAyMzcsIDc4LCAxLCAyNDcsIDEzMCwgMjM3LCA3OCwgMSwgMjMyLCAxMzksIAotICAgIDIzNywgNzgsIDEsIDE5MywgMjM3LCA3OCwgMSwgMjI2LCAyMiwgMjM3LCA3OCwgMSwgMjU0LCAxOTAsIDIzNywgNzgsIDEsIAotICAgIDI0NywgMjM5LCAyMzcsIDc4LCAxLCAyMzcsIDgwLCAyMzcsIDc4LCAxLCAyMzUsIDE5LCAyMzcsIDc4LCAxLCAyNTIsIDQ0LCAKLSAgICAyMzcsIDc4LCAyMjYsIDc1LCA3NiwgMTc4LCAxLCA1NywgMTc4LCAzMSwgNSwgNzQsIDE3OCwgMzEsIDUsIDY2LCAxNzgsIAotICAgIDMxLCA1LCAxNTMsIDE0NiwgMTc4LCAzMSwgNSwgNzIsIDE3OCwgMzEsIDUsIDczLCAxNzgsIDMxLCAyMzcsIDIxOSwgNzYsIAotICAgIDE3OCwgNSwgNDcsIDIzMSwgMTQwLCA1MSwgMTc4LCA1LCAyNTQsIDE2MCwgMTc4LCA1LCAyMjQsIDIxMSwgMTc4LCAxLCAKLSAgICAxNzcsIDE3OCwgMSwgMjM4LCAyMjcsIDE3OCwgMSwgMjQ2LCAxOTMsIDE3OCwgMSwgMjQ2LCA2NiwgMTc4LCAxLCAyNTIsIAotICAgIDM5LCAxNzgsIDEsIDI1MSwgMjA0LCAxNzgsIDEsIDIzOSwgMTc5LCAxNzgsIDEsIDIzNCwgMTczLCAxNzgsIDEsIDIyNiwgCi0gICAgMjAsIDE3OCwgMSwgMjI2LCAxMCwgMTc4LCAxLCAyNTAsIDExNywgMTc4LCAxLCAyNTAsIDEwMSwgMTc4LCAxLCAyMzUsIDE4LCAKLSAgICAxNzgsIDEsIDIyNywgMTA3LCAxNzgsIDEsIDIyNiwgMjUxLCAxNzgsIDEsIDI1MCwgMTg5LCAxNzgsIDEsIDI1MCwgMjIsIAotICAgIDE3OCwgMSwgMjM2LCAxLCAxNzgsIDEsIDIxMywgMTc4LCAxLCAyMzMsIDk3LCAxNzgsIDEsIDI1MywgNzAsIDE3OCwgMSwgCi0gICAgMjUyLCAxOTAsIDE3OCwgMSwgMTk4LCAxNzgsIDEsIDE5MSwgMTc4LCAxLCAyMDgsIDE3OCwgMSwgMjM4LCA0MywgMTc4LCAxLCAKLSAgICAyMjUsIDY0LCAxNzgsIDEsIDIyOSwgMTQ2LCAxNzgsIDEsIDIyOCwgMTEwLCAxNzgsIDEsIDIzMSwgMzEsIDE3OCwgMSwgCi0gICAgMjIzLCAxMTcsIDE3OCwgMSwgMTU0LCAxNzgsIDEsIDIzOCwgMTY3LCAxNzgsIDEsIDIyNSwgMjU0LCAxNzgsIDUsIDI1MywgCi0gICAgMzYsIDQ2LCAxNzgsIDUsIDI1MSwgMjU0LCAxNzgsIDUsIDU2LCA1MSwgMTc4LCAyMjQsIDIxNiwgMTc4LCAyMSwgMTE4LCAKLSAgICAxNzgsIDIxLCAxMTMsIDE3OCwgMjEsIDE2NiwgMTc4LCAyMSwgMTU4LCAxNzgsIDY1LCAyMjcsIDIzLCAxNzgsIDY1LCAyMjUsIAotICAgIDIxNiwgMTc4LCA2NSwgMTY4LCAyNDQsIDEzNSwgMTc4LCA2NSwgMTY4LCAyMjYsIDE5NCwgMTc4LCAyMzIsIDE3MSwgMjQ5LCAKLSAgICAxNDAsIDE3OCwgMjMyLCAxNzEsIDMsIDI1MSwgMTA2LCAxNzgsIDIzMiwgMTcxLCAyNTEsIDEwNiwgMTc4LCAyMzIsIDE3MSwgCi0gICAgMjUwLCAyNDgsIDEyNSwgMTc4LCAyMzIsIDE3MSwgMjM3LCAzMiwgMTc4LCAyMzIsIDE3MSwgMjM3LCAxMTksIDE3OCwgMjMyLCAKLSAgICAxNzEsIDI1MCwgMTUxLCAxNzgsIDIzMiwgMTcxLCA0NywgMjUwLCAxNTEsIDE3OCwgMjMyLCAxNzEsIDIzNywgMTY1LCAxMywgCi0gICAgNSwgNTcsIDEzLCA1LCAxMDIsIDI0LCA1NywgMTMsIDUsIDEwMiwgMjQsIDI1MywgNjEsIDEzLCA1LCAxMDIsIDI0LCAyNDYsIAotICAgIDE2NywgMjI3LCAxOSwgMTMsIDUsIDEwMiwgMjQsIDE1NCwgMTMsIDUsIDEwMiwgMjQsIDI0MCwgNDksIDEzLCA1LCAxMDIsIAotICAgIDI0LCAyMzgsIDMwLCAyNDUsIDIwNCwgMTMsIDUsIDEwMiwgMjQsIDIzNiwgMzIsIDEzLCA1LCAxMDIsIDI0LCAyMzEsIDE5LCAKLSAgICAxMywgNSwgMjU1LCA2NSwgMTMsIDUsIDI1NSwgNTIsIDEzLCA1LCAyNTUsIDUzLCAyNCwgMjU0LCA3OCwgMTMsIDUsIDI1NSwgCi0gICAgNTMsIDI0LCAyNDgsIDk2LCAyNDUsIDIwNCwgMTMsIDUsIDI1NSwgNTMsIDI0LCAyNDYsIDE3NywgMTMsIDUsIDI1NSwgNTMsIAotICAgIDI0LCAyNDYsIDE2NywgMjI3LCAxOSwgMTMsIDUsIDI1NSwgNTMsIDI0LCAxNTQsIDEzLCA1LCAyNTUsIDUzLCAyNCwgMjQwLCAKLSAgICA1MCwgMjQ1LCAyMDQsIDEzLCA1LCAyNTUsIDUzLCAyNCwgMjQwLCAyMywgMTMsIDUsIDI1NSwgNTMsIDI0LCAyMzgsIDMxLCAKLSAgICAxMywgNSwgMjU1LCA1MywgMjQsIDIyOSwgOTksIDEzLCA1LCAyNTUsIDUzLCAyNCwgOTcsIDc5LCA5NywgNzksIDY2LCAxMywgCi0gICAgNSwgMjU1LCA1MywgMjQ1LCAyMDQsIDEzLCA1LCAyNTUsIDUwLCAxMywgNSwgMjU1LCA1MSwgMjQsIDI1MywgNTAsIDEzLCA1LCAKLSAgICAyNTUsIDUxLCAyNCwgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyNTUsIDUxLCAyNCwgMjM2LCAyMzYsIDc5LCAyNDcsIAotICAgIDIzOSwgMTMsIDUsIDI1NSwgNTEsIDI0LCAyMjksIDE0NCwgMTMsIDUsIDI1NSwgNTEsIDI0LCAyMjcsIDg0LCAxMywgNSwgCi0gICAgMjU1LCAyOSwgMTMsIDUsIDI1NCwgMjQwLCAxMywgNSwgMjU0LCAyNDEsIDI0LCAyNDcsIDE5MywgMTMsIDUsIDI1NCwgMjQxLCAKLSAgICAyNCwgMjI5LCA3MywgNzksIDI0NiwgMjQsIDEzLCA1LCAyNTQsIDIzMywgMTMsIDUsIDI1NCwgMjM0LCAyNCwgMjU0LCAyMzMsIAotICAgIDEzLCA1LCAyNTQsIDIzNCwgMjQsIDI0OSwgMjIwLCAxMywgNSwgMjU0LCAyMzQsIDI0LCAyNDYsIDI0LCAxMywgNSwgMjU0LCAKLSAgICAyMzQsIDI0LCAxNTQsIDEzLCA1LCAyNTQsIDIzNCwgMjQsIDIzOSwgNjQsIDEzLCA1LCAyNTQsIDIzNCwgMjQsIDIzOCwgCi0gICAgMTk5LCAxMywgNSwgMjU0LCAyMzQsIDI0LCAyMjksIDExNCwgMTMsIDUsIDI1NCwgMjM0LCAyNCwgMjI1LCA4MywgMTMsIDUsIAotICAgIDI1NCwgMjMxLCAxMywgNSwgMjU0LCAyMjUsIDEzLCA1LCAyNTQsIDE5NiwgMTMsIDUsIDI1NCwgMTk3LCAyNCwgMjI5LCAKLSAgICAxMTQsIDEzLCA1LCAyNTQsIDE5MCwgMTMsIDUsIDI1NCwgMTkxLCAxMDcsIDI1NCwgMTkwLCAxMywgNSwgMjU0LCAxOTEsIAotICAgIDE1MiwgMjI2LCAxNTYsIDEzLCA1LCAyNTQsIDE5MSwgNzksIDIzNSwgMjQ3LCAyMzQsIDM1LCAyNTQsIDE5MSwgNzksIDIzNSwgCi0gICAgMjQ2LCAxMywgNSwgMjU0LCAxOTEsIDc5LCAyMzUsIDI0NywgMjI4LCAxMTgsIDEzLCA1LCAyNTQsIDE3MCwgMTMsIDUsIAotICAgIDI1NCwgMTUzLCAxMywgNSwgMjU0LCAxMjksIDEzLCA1LCAyNTQsIDEzMCwgMjQsIDIzOCwgOTEsIDEzLCA1LCAyNTQsIDEwOCwgCi0gICAgMTMsIDUsIDI1NCwgODUsIDEzLCA1LCAyNTQsIDgwLCAxMywgNSwgMjU0LCA4MSwgMjIzLCA0MywgMjI3LCAxOSwgMTMsIDUsIAotICAgIDI1NCwgODEsIDIzOSwgNjcsIDIyNywgMTksIDEzLCA1LCAyNTQsIDgxLCAxMDcsIDI1NCwgODEsIDIyNSwgMjQ4LCAxMDcsIAotICAgIDIyNSwgMjQ4LCAyMjUsIDI0OCwgMTA3LCAyMjUsIDI0OCwgMjMzLCAxOTcsIDEzLCA1LCAyNTQsIDgxLCAxMDcsIDI1NCwgCi0gICAgODEsIDEwNywgMjU0LCA4MCwgMTMsIDUsIDI1NCwgODEsIDEwNywgMjU0LCA4MSwgMTA3LCAyNTQsIDgxLCAyNTAsIDIzOCwgCi0gICAgMjU0LCA4MSwgMTA3LCAyNTQsIDgxLCAxMDcsIDI1NCwgODAsIDEzLCA1LCAyNTQsIDc4LCAxMywgNSwgMjU0LCA3NiwgMTMsIAotICAgIDUsIDI1MywgNzAsIDEzLCA1LCAyNTMsIDYxLCAxMywgNSwgMjUzLCA1OCwgMTMsIDUsIDI1MywgNTYsIDEzLCA1LCAyNTMsIAotICAgIDUxLCAxMywgNSwgMjUzLCA1MiwgMTA3LCAyNTMsIDUxLCAxMywgNSwgMjUzLCA1MCwgMTMsIDUsIDEyNSwgMTMsIDUsIDI1MywgCi0gICAgMzUsIDEzLCA1LCAyNTIsIDE4MSwgMTMsIDUsIDI1MiwgMTgyLCAyNCwgNTcsIDEzLCA1LCAyNTIsIDE4MiwgMjQsIDI0NiwgCi0gICAgMTYwLCAxMywgNSwgMjUyLCAxODIsIDI0LCAyNDAsIDUwLCAyNDUsIDIwNCwgMTMsIDUsIDI1MiwgOTAsIDEzLCA1LCAyNTIsIAotICAgIDkxLCAxMDcsIDI1MiwgOTEsIDI1NSwgNTIsIDEzLCA1LCAyNTIsIDkxLCAxMDcsIDI1MiwgOTEsIDIyNSwgMTM4LCAxMywgNSwgCi0gICAgMjUyLCA5MSwgMjUwLCAyMzgsIDI1MiwgOTAsIDEzLCA1LCAyNTIsIDc5LCAxMywgNSwgMjUyLCA4MCwgMTA3LCAyNTIsIDc5LCAKLSAgICAxMywgNSwgMjUyLCA3MCwgMTMsIDUsIDI1MiwgNjksIDEzLCA1LCAyNTAsIDE4OSwgMTMsIDUsIDI1MCwgMTgwLCAxMywgNSwgCi0gICAgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgMTAyLCA3OSwgMjM3LCA3LCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgCi0gICAgMjU0LCAxOTYsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIDI0LCAyNTMsIDUwLCAxMywgNSwgMjUwLCAxODEsIDIzOCwgCi0gICAgMTc4LCAyNCwgMjUyLCAxODEsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIDI0LCAyNDYsIDE5MywgMTMsIDUsIDI1MCwgCi0gICAgMTgxLCAyMzgsIDE3OCwgMjQsIDI0NiwgMTk0LCA3OSwgMjM3LCA3LCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgCi0gICAgMjQ2LCA0NiwgMTMsIDUsIDI1MCwgMTgxLCAyMzgsIDE3OCwgMjQsIDI0NiwgMzAsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAKLSAgICAxNzgsIDI0LCAyNDUsIDIxMiwgMTMsIDUsIDI1MCwgMTgxLCAyMzgsIDE3OCwgMjQsIDE1NCwgMTMsIDUsIDI1MCwgMTgxLCAKLSAgICAyMzgsIDE3OCwgMjQsIDIzOSwgMjEwLCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgMjM5LCAyMTEsIDc5LCAyMzcsIAotICAgIDExMCwgMTMsIDUsIDI1MCwgMTgxLCAyMzgsIDE3OCwgMjQsIDIzOSwgNTMsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIAotICAgIDI0LCAyMzgsIDQzLCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgMjM3LCAxMTAsIDEzLCA1LCAyNTAsIDE4MSwgCi0gICAgMjM4LCAxNzgsIDI0LCAyMzcsIDExMSwgNzksIDIzNywgNiwgMTMsIDUsIDI1MCwgMTgxLCAyMzgsIDE3OCwgMjQsIDIzNywgCi0gICAgMTAwLCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgMjM1LCAxNjIsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIAotICAgIDI0LCAyMzMsIDE5OCwgNzksIDIzMywgMTk3LCAxMywgNSwgMjUwLCAxODEsIDIzOCwgMTc4LCAyNCwgMjI5LCAxNSwgMTMsIAotICAgIDUsIDI1MCwgMTgxLCAyMzgsIDE3OCwgMjQsIDIyNywgODQsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIDI0LCAyMjUsIAotICAgIDE3MiwgNzksIDI0NiwgMzAsIDEzLCA1LCAyNTAsIDE4MSwgMjM4LCAxNzgsIDI0LCAyMjUsIDgzLCAxMywgNSwgMjUwLCAKLSAgICAxNTksIDEzLCA1LCAyNTAsIDE0MCwgMTMsIDUsIDI1MCwgMTM5LCAxMywgNSwgMjUwLCAxMzgsIDEzLCA1LCAyNTAsIDQsIAotICAgIDEzLCA1LCAyNDksIDI0NSwgMTMsIDUsIDI0OSwgMjIxLCAxMywgNSwgMjQ5LCAyMjIsIDI0LCAyMjksIDExNCwgMTMsIDUsIAotICAgIDI0OSwgMjIwLCAxMywgNSwgMjQ5LCAyMTAsIDEzLCA1LCAyNDksIDIxMSwgMjM5LCAyNiwgOTcsIDI0NSwgMjA1LCAyNDksIAotICAgIDE5NSwgMTMsIDUsIDI0OSwgMTk1LCAxMywgNSwgMjQ4LCAxMDcsIDEzLCA1LCAyNDgsIDEwOCwgMTA3LCAyNDgsIDEwNywgCi0gICAgMTMsIDUsIDI0OCwgMTA4LCAyNDUsIDIwNCwgMTMsIDUsIDI0OCwgMTA4LCAyMjksIDk2LCAxMywgNSwgMjQ4LCAxMDUsIDEzLCAKLSAgICA1LCAyNDgsIDEwNiwgMjQsIDI0NywgMTgwLCAxMywgNSwgMjQ4LCAxMDQsIDEzLCA1LCAyNDgsIDEwMywgMTMsIDUsIDI0OCwgCi0gICAgMTAyLCAxMywgNSwgMjQ4LCAxMDEsIDEzLCA1LCAyNDgsIDk3LCAxMywgNSwgMjQ4LCA5NSwgMTMsIDUsIDI0OCwgOTYsIAotICAgIDI0NSwgMjA0LCAxMywgNSwgMjQ4LCA5NiwgMjQ1LCAyMDUsIDI0NSwgMjA0LCAxMywgNSwgMjQ4LCA5NCwgMTMsIDUsIDI0OCwgCi0gICAgODcsIDEzLCA1LCA3MiwgMTMsIDUsIDE2MSwgMjQsIDIzMywgMTk3LCAxMywgNSwgMTYxLCAxMDcsIDE2MSwgMjM0LCAxOTUsIAotICAgIDEwNywgMjM0LCAxOTQsIDEzLCA1LCAyNDgsIDU3LCAxMywgNSwgMjQ4LCA1OCwgMjQsIDEwMiwgNzksIDI0NSwgMTcwLCA3OSwgCi0gICAgMjUwLCAxODksIDEzLCA1LCAyNDgsIDU4LCAyNCwgMjQ2LCAxNjAsIDEzLCA1LCAyNDgsIDU4LCAyNCwgMjM2LCAxNTcsIDEzLCAKLSAgICA1LCAyNDgsIDU4LCAyNCwgMjMxLCAxMiwgMTMsIDUsIDI0OCwgNTgsIDI0LCAyMjksIDExNCwgMTMsIDUsIDI0OCwgNTgsIAotICAgIDI0LCA2NiwgMTMsIDUsIDI0OCwgMzcsIDEzLCA1LCAyNDgsIDI3LCAxMywgNSwgMjQ4LCAyLCAxMywgNSwgMjQ3LCAyMzksIAotICAgIDEzLCA1LCAyNDcsIDI0MCwgMjQsIDI0NiwgMTY2LCAxMywgNSwgMjQ3LCAyNDAsIDI0LCAyNDYsIDE2NywgMjI3LCAxOSwgCi0gICAgMTMsIDUsIDI0NywgMjQwLCAyNCwgMjM2LCAyMzUsIDEzLCA1LCAyNDcsIDI0MCwgMjUwLCAyMzgsIDI0NywgMjM5LCAxMywgCi0gICAgNSwgMjQ3LCAyNDAsIDIzNCwgMzUsIDI0NywgMjM5LCAxMywgNSwgMjQ3LCAyNDAsIDIyOCwgMTE4LCAxMywgNSwgMjQ3LCAKLSAgICAxOTUsIDEzLCA1LCAyNDcsIDE5MywgMTMsIDUsIDI0NywgMTgwLCAxMywgNSwgMjQ3LCAxMzQsIDEzLCA1LCAyNDcsIDEzNSwgCi0gICAgMjQsIDU3LCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAxMDIsIDc5LCAyMzgsIDIxLCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAxMDIsIAotICAgIDc5LCAyMzgsIDIyLCAyNCwgMjM4LCAyMSwgMTMsIDUsIDI0NywgMTM1LCAyNCwgMjU0LCAxOTAsIDEzLCA1LCAyNDcsIDEzNSwgCi0gICAgMjQsIDI1MywgNjEsIDEzLCA1LCAyNDcsIDEzNSwgMjQsIDI0OCwgOTYsIDI0NSwgMjA0LCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAKLSAgICAyNDgsIDk2LCAyNDUsIDIwNSwgMjQ1LCAyMDQsIDEzLCA1LCAyNDcsIDEzNSwgMjQsIDE1NCwgMTMsIDUsIDI0NywgMTM1LCAKLSAgICAyNCwgMjQ1LCAxNzAsIDI0NSwgMjA0LCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAyNDAsIDUwLCAyNDUsIDIwNCwgMTMsIDUsIAotICAgIDI0NywgMTM1LCAyNCwgMjM5LCAyNSwgMTMsIDUsIDI0NywgMTM1LCAyNCwgMjM5LCAyNiwgMjI4LCAxMTgsIDEzLCA1LCAKLSAgICAyNDcsIDEzNSwgMjQsIDIzOCwgMTA1LCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAyMzgsIDQzLCAxMywgNSwgMjQ3LCAxMzUsIAotICAgIDI0LCAyMzgsIDIyLCAyNCwgMjM4LCAyMSwgMTMsIDUsIDI0NywgMTM1LCAyNCwgMjM3LCAxOTMsIDEzLCA1LCAyNDcsIDEzNSwgCi0gICAgMjQsIDIzNywgMTEwLCAxMywgNSwgMjQ3LCAxMzUsIDI0LCAyMjUsIDE3MSwgMTMsIDUsIDI0NywgMTM1LCAyNCwgMjI1LCAKLSAgICAxNjMsIDEzLCA1LCAyNDYsIDE5MywgMTMsIDUsIDI0NiwgMTk0LCAyNDUsIDIwNCwgMTMsIDUsIDI0NiwgMTkxLCAxMywgNSwgCi0gICAgMjQ2LCAxOTIsIDI0LCAxMDIsIDc5LCAyNTAsIDE5MCwgNzksIDE1NCwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMTAyLCA3OSwgCi0gICAgMTU0LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAxMDIsIDc5LCAyNDAsIDQ5LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNTUsIDUxLCAKLSAgICAyMjcsIDIwLCA3OSwgMjI3LCAxMDAsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI1NCwgMTkwLCAxMywgNSwgMjQ2LCAxOTIsIAotICAgIDI0LCAyNTQsIDgwLCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNTQsIDc5LCA3OSwgMjQ2LCAxNzcsIDEzLCA1LCAyNDYsIDE5MiwgCi0gICAgMjQsIDI1MywgNjEsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI1MywgMzYsIDc5LCAyMDgsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIAotICAgIDI1MiwgNzAsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI1MiwgNzEsIDc5LCAyMDgsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI1MCwgCi0gICAgMTg5LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNTAsIDQsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0OSwgMjIyLCAyNCwgMjI5LCAKLSAgICAxMTQsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0OCwgMTA1LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNDgsIDIsIDEzLCA1LCAKLSAgICAyNDYsIDE5MiwgMjQsIDI0OCwgMywgNzksIDIzOCwgNDMsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0NywgMjM5LCAxMywgNSwgCi0gICAgMjQ2LCAxOTIsIDI0LCAyNDcsIDI0MCwgMjQsIDI0NiwgMTY3LCAyMjcsIDE5LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNDYsIAotICAgIDE2NywgMjI3LCAxOSwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjQ2LCAxNjAsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0NiwgCi0gICAgNDYsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0NiwgNDQsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0NiwgNDUsIDc5LCA1NywgCi0gICAgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjQ2LCAzMSwgNzksIDIyOCwgNiwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjQ1LCAxNzAsIAotICAgIDc5LCAyMzcsIDExMSwgNzksIDI0NywgMTgwLCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNDUsIDE1NCwgMTMsIDUsIDI0NiwgCi0gICAgMTkyLCAyNCwgMjQ1LCAxNTUsIDc5LCAyMzgsIDQzLCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNDUsIDc2LCA3OSwgMjM3LCAKLSAgICAxOTMsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDI0NCwgMTQyLCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyNDAsIDUwLCAyNDUsIAotICAgIDIwNCwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjM5LCAyMDEsIDc5LCAyNDQsIDE0NiwgNzksIDI1NCwgODAsIDEzLCA1LCAKLSAgICAyNDYsIDE5MiwgMjQsIDIzOSwgNTMsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDIzOSwgMjUsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIAotICAgIDIzOCwgMTk2LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyMzgsIDE5NywgNzksIDIzOCwgMjEsIDEzLCA1LCAyNDYsIDE5MiwgCi0gICAgMjQsIDIzOCwgMTA2LCA3OSwgMjU0LCAxOTAsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDIzOCwgNDMsIDEzLCA1LCAyNDYsIAotICAgIDE5MiwgMjQsIDIzNiwgMjM2LCA3OSwgMjQ3LCAyMzksIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDIzNiwgMTU3LCAxMywgNSwgCi0gICAgMjQ2LCAxOTIsIDI0LCAyMzQsIDE5NCwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjM0LCAxOTUsIDEwNywgMjM0LCAxOTQsIDEzLCAKLSAgICA1LCAyNDYsIDE5MiwgMjQsIDIxMywgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjMxLCAxMiwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgCi0gICAgMjMwLCAyNDQsIDEzLCA1LCAyNDYsIDE5MiwgMjQsIDIyOSwgMTE0LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyMjksIDExNSwgCi0gICAgNzksIDIyNSwgMjM2LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyMjksIDg4LCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyMjcsIAotICAgIDIzMywgMTMsIDUsIDI0NiwgMTkyLCAyNCwgMjI3LCA4NCwgMTMsIDUsIDI0NiwgMTkyLCAyNCwgNjYsIDEzLCA1LCAyNDYsIAotICAgIDE5MiwgMjQsIDIyNSwgMTYzLCAxMywgNSwgMjQ2LCAxOTIsIDI0LCAyMjUsIDE2NCwgNzksIDI0OCwgMTA3LCAxMywgNSwgCi0gICAgMjQ2LCAxOTIsIDEwNywgMjQ2LCAxOTEsIDEzLCA1LCAyNDYsIDE4NiwgMTMsIDUsIDI0NiwgMTg3LCAyNTAsIDIzOCwgMjQ2LCAKLSAgICAxODYsIDEzLCA1LCAyNDYsIDE4NCwgMTMsIDUsIDI0NiwgMTg1LCAxMDcsIDI0NiwgMTg1LCAyNDYsIDE2MSwgMTA3LCAyNDYsIAotICAgIDE2MCwgMTMsIDUsIDI0NiwgMTc3LCAxMywgNSwgMjQ2LCAxNzgsIDI0NiwgMTg1LCAxMDcsIDI0NiwgMTg1LCAyNDYsIDE2MSwgCi0gICAgMTA3LCAyNDYsIDE2MCwgMTMsIDUsIDI0NiwgMTc2LCAxMywgNSwgMjQ2LCAxNzQsIDEzLCA1LCAyNDYsIDE2OCwgMTMsIDUsIAotICAgIDI0NiwgMTY2LCAxMywgNSwgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyNDYsIDE2NywgMTA3LCAyNDYsIDE2NiwgMTMsIAotICAgIDUsIDI0NiwgMTY3LCAyNTAsIDIzOCwgMjQ2LCAxNjYsIDEzLCA1LCAyNDYsIDE2MCwgMTMsIDUsIDI0NiwgMTU5LCAxMywgNSwgCi0gICAgMjQ2LCAxNTUsIDEzLCA1LCAyNDYsIDEwNywgMTMsIDUsIDI0NiwgMTA4LCAyNCwgMjM4LCA5MSwgMTMsIDUsIDI0NiwgNDYsIAotICAgIDEzLCA1LCAyNDYsIDQ3LCAyNCwgNzIsIDEzLCA1LCAyNDYsIDQ3LCAyNCwgNjYsIDEzLCA1LCAyNDYsIDQ3LCAyNTAsIDIzOCwgCi0gICAgMjQ2LCA0NiwgMTMsIDUsIDI0NiwgNDQsIDEzLCA1LCAyNDYsIDQ1LCAxMDcsIDI0NiwgNDQsIDEzLCA1LCAyNDYsIDQ1LCAKLSAgICAyNTAsIDIzOCwgMjQ2LCA0NCwgMTMsIDUsIDI0NiwgNDIsIDEzLCA1LCAyNDYsIDMwLCAxMywgNSwgMjQ2LCAzMSwgMjQ1LCAKLSAgICAyMDQsIDEzLCA1LCAyNDYsIDI4LCAxMywgNSwgMjQ2LCAyOSwgMjQsIDEwMiwgNzksIDI0MCwgNDksIDEzLCA1LCAyNDYsIAotICAgIDI5LCAyNCwgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyNDYsIDI5LCAyNCwgMjQwLCA0OSwgMTMsIDUsIDI0NiwgMjksIAotICAgIDI0LCAyMzcsIDExMSwgNzksIDI0MCwgNDksIDEzLCA1LCAyNDYsIDI5LCAyNCwgMjEzLCAxMywgNSwgMjQ2LCAyNiwgMTMsIAotICAgIDUsIDI0NiwgMjQsIDEzLCA1LCAyNDYsIDI1LCAyNTAsIDIzOCwgMjQ2LCAyNCwgMTMsIDUsIDI0NiwgMjUsIDI0LCAyNTMsIAotICAgIDYxLCAxMywgNSwgMjQ2LCAyNSwgMjQsIDIyNywgODQsIDEzLCA1LCAyNDYsIDI1LCAyMjcsIDE5LCAxMywgNSwgMjQ1LCAKLSAgICAyMTgsIDEzLCA1LCAyNDUsIDIxOSwgMjUwLCAyMzgsIDI0NSwgMjE4LCAxMywgNSwgMjQ1LCAyMTYsIDEzLCA1LCAyNDUsIAotICAgIDIxNywgMjQsIDIzOSwgNTMsIDEzLCA1LCAyNDUsIDIxNywgMjQsIDIzOSwgNTQsIDI0LCAyNDAsIDUwLCAyNDUsIDIwNCwgCi0gICAgMTMsIDUsIDI0NSwgMjE3LCAyNCwgMjM0LCAxOTQsIDEzLCA1LCAyNDUsIDIxNywgMjQsIDIzMSwgMTMsIDc5LCAyMjUsIAotICAgIDI0NywgMTMsIDUsIDI0NSwgMjE3LCAyNDUsIDIwNCwgMTMsIDUsIDI0NSwgMjEyLCAxMywgNSwgMjQ1LCAyMTMsIDI0LCAKLSAgICAxMDIsIDc5LCAyMzgsIDkxLCAxMywgNSwgMjQ1LCAyMTMsIDI0LCAyMzgsIDkxLCAxMywgNSwgMjQ1LCAyMTMsIDEwNywgCi0gICAgMjQ1LCAyMTMsIDIzNywgMTA1LCAxMywgNSwgMjQ1LCAyMDgsIDEzLCA1LCAyNDUsIDIwNiwgMTMsIDUsIDI0NSwgMjA3LCAKLSAgICAyNCwgMjI5LCAxMTQsIDEzLCA1LCAyNDUsIDE5OCwgMTMsIDUsIDI0NSwgMTk3LCAxMywgNSwgMjQ1LCAxOTQsIDEzLCA1LCAKLSAgICAyNDUsIDE5MywgMTMsIDUsIDE1NCwgMTMsIDUsIDI0NSwgMTcwLCAyMjcsIDE5LCAxMywgNSwgMjQ1LCAxNzAsIDI0NSwgCi0gICAgMjA0LCAxMywgNSwgMjQ1LCAxNTQsIDEzLCA1LCAyNDUsIDc1LCAxMywgNSwgMjQ1LCA3NiwgMjQsIDI1NCwgODAsIDEzLCA1LCAKLSAgICAyNDUsIDc2LCAyNCwgMjU0LCA3OCwgMTMsIDUsIDI0NSwgNzYsIDI0LCAyNTMsIDYxLCAxMywgNSwgMjQ1LCA3NiwgMjQsIAotICAgIDI0OSwgMTk1LCAxMywgNSwgMjQ1LCA3NiwgMjQsIDI0NiwgMTg0LCAxMywgNSwgMjQ1LCA3NiwgMjQsIDIzOCwgMTkwLCAxMywgCi0gICAgNSwgMjQ1LCA3NiwgMjQsIDIzNCwgMTk0LCAxMywgNSwgMjQ1LCA3NiwgMjQsIDIyOSwgMTE0LCAxMywgNSwgMjQ1LCA3NiwgCi0gICAgMjQsIDY2LCAxMywgNSwgMjQ0LCAxNDUsIDEzLCA1LCAyNDQsIDE0MiwgMTMsIDUsIDI0NCwgMTQzLCAyNCwgMjU0LCAxOTAsIAotICAgIDEzLCA1LCAyNDQsIDE0MywgMjQsIDI0NSwgMTU0LCAxMywgNSwgMjQ0LCAxNDMsIDI0LCAyMzksIDI1LCAxMywgNSwgMjQ0LCAKLSAgICAxNDMsIDI0LCAyMzcsIDE1OCwgMTMsIDUsIDI0NCwgMTQzLCAyNCwgMjI1LCAxNjMsIDEzLCA1LCAyNDQsIDE0MCwgMTMsIDUsIAotICAgIDc0LCAxMywgNSwgMjQ0LCA4MSwgNTcsIDEzLCA1LCAyNDQsIDcxLCAxMywgNSwgMjQwLCA3NSwgMTMsIDUsIDI0MCwgNzYsIAotICAgIDEwNywgMjQwLCA3NiwgMjUyLCA3MCwgMTMsIDUsIDI0MCwgNzYsIDEwNywgMjQwLCA3NiwgMjI4LCAxMTgsIDEzLCA1LCAKLSAgICAyNDAsIDUyLCAxMywgNSwgMjQwLCA0OSwgMTMsIDUsIDI0MCwgNTAsIDI0OSwgMjQ1LCAxMywgNSwgMjQwLCA1MCwgMjMxLCAKLSAgICAxODAsIDEzLCA1LCAyNDAsIDUwLCAxMDcsIDI0MCwgNTAsIDIyOSwgNzUsIDEwNywgMjI5LCA3NSwgMjI1LCAxNjQsIDEwNywgCi0gICAgMjI1LCAxNjMsIDEzLCA1LCAyNDAsIDUwLCAyNDUsIDIwNCwgMTMsIDUsIDI0MCwgNDEsIDEzLCA1LCAyNDAsIDQyLCAyNCwgCi0gICAgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyNDAsIDQwLCAxMywgNSwgMjQwLCAzMCwgMTMsIDUsIDI0MCwgMzEsIDI0LCAKLSAgICAyMjcsIDg0LCAxMywgNSwgMjQwLCAzMSwgMjUwLCAyMzgsIDI0MCwgMzAsIDEzLCA1LCAyNDAsIDMxLCAyMzQsIDM1LCAyNDAsIAotICAgIDMwLCAxMywgNSwgMjQwLCAzMSwgMjI4LCAxMTgsIDEzLCA1LCAyNDAsIDIzLCAxMywgNSwgMjQwLCAxNiwgMTMsIDUsIDIzOSwgCi0gICAgMjEwLCAxMywgNSwgMjM5LCAyMDAsIDEzLCA1LCAxNzcsIDEzLCA1LCAxODgsIDI0LCA1NywgMTMsIDUsIDE4OCwgMjQsIAotICAgIDI1NSwgMjksIDEzLCA1LCAxODgsIDI0LCAyNTUsIDMwLCA3OSwgMjM4LCAxMDUsIDEzLCA1LCAxODgsIDI0LCAyNTQsIDc4LCAKLSAgICAxMywgNSwgMTg4LCAyNCwgMjUzLCA2MSwgMTMsIDUsIDE4OCwgMjQsIDI1MywgNTAsIDEzLCA1LCAxODgsIDI0LCAxMjUsIAotICAgIDEzLCA1LCAxODgsIDI0LCAyNTIsIDE4MSwgMTMsIDUsIDE4OCwgMjQsIDI0NywgMTkzLCAxMywgNSwgMTg4LCAyNCwgMjQ3LCAKLSAgICAxODAsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDE5MywgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMTc3LCAxMywgNSwgMTg4LCAyNCwgCi0gICAgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAxODgsIDI0LCAyNDYsIDE2MCwgMTMsIDUsIDE4OCwgMjQsIDI0NiwgMTYxLCAKLSAgICA3OSwgMjI5LCAxNDUsIDc5LCA1NywgMTMsIDUsIDE4OCwgMjQsIDI0NiwgNDYsIDEzLCA1LCAxODgsIDI0LCAyNDYsIDMwLCAKLSAgICAxMywgNSwgMTg4LCAyNCwgMjQ2LCAyNSwgNzksIDIzMCwgMjQ0LCAxMywgNSwgMTg4LCAyNCwgMjQ2LCAyNSwgMjUwLCAyMzgsIAotICAgIDI0NiwgMjQsIDEzLCA1LCAxODgsIDI0LCAyNDUsIDIxOCwgMTMsIDUsIDE4OCwgMjQsIDI0NSwgMTk3LCAxMywgNSwgMTg4LCAKLSAgICAyNCwgMjQwLCA0OSwgMTMsIDUsIDE4OCwgMjQsIDI0MCwgMzAsIDEzLCA1LCAxODgsIDI0LCAyMzksIDUzLCAxMywgNSwgCi0gICAgMTg4LCAyNCwgMjM4LCAxOTksIDEzLCA1LCAxODgsIDI0LCAyMzgsIDE5NiwgMTMsIDUsIDE4OCwgMjQsIDIzNywgMTkzLCAKLSAgICAxMywgNSwgMTg4LCAyNCwgMjM3LCAxMTAsIDEzLCA1LCAxODgsIDI0LCAyMzYsIDIzNSwgMTMsIDUsIDE4OCwgMjQsIDIzNiwgCi0gICAgMjM2LCA3OSwgMjQ4LCAxMDcsIDEzLCA1LCAxODgsIDI0LCAyMzYsIDIzNiwgNzksIDI0NiwgNDYsIDEzLCA1LCAxODgsIDI0LCAKLSAgICAyMzYsIDIzNiwgNzksIDIyNywgNDQsIDEzLCA1LCAxODgsIDI0LCAyMzYsIDE1NywgMTMsIDUsIDE4OCwgMjQsIDIzNiwgCi0gICAgMTU4LCA3OSwgMjM0LCAxOTAsIDEzLCA1LCAxODgsIDI0LCAyMzUsIDE2MiwgMTMsIDUsIDE4OCwgMjQsIDIzNCwgMTk0LCAKLSAgICAxMywgNSwgMTg4LCAyNCwgMjMzLCA2OSwgMTMsIDUsIDE4OCwgMjQsIDIzMSwgNzAsIDEzLCA1LCAxODgsIDI0LCAyMzEsIAotICAgIDMxLCAxMywgNSwgMTg4LCAyNCwgMjMwLCAyNDQsIDEzLCA1LCAxODgsIDI0LCAyMjksIDE0NiwgMTMsIDUsIDE4OCwgMjQsIAotICAgIDIyOSwgMTE0LCAxMywgNSwgMTg4LCAyNCwgMjI5LCA4OCwgMTMsIDUsIDE4OCwgMjQsIDIyOSwgNDMsIDEzLCA1LCAxODgsIAotICAgIDI0LCAyMjksIDcsIDEzLCA1LCAxODgsIDI0LCAyMjcsIDI0MCwgMTMsIDUsIDE4OCwgMjQsIDIyNywgNjcsIDEzLCA1LCAKLSAgICAxODgsIDI0LCA2NiwgMTMsIDUsIDE4OCwgMjQsIDIyNSwgMTcxLCAxMywgNSwgMTg4LCAyNCwgMjI1LCAxNjMsIDEzLCA1LCAKLSAgICAxODgsIDI0LCAyMjUsIDE0MSwgMjQsIDIxMywgMTMsIDUsIDE4OCwgMjQsIDIyNSwgODMsIDEzLCA1LCAxODgsIDI0LCAyMjMsIAotICAgIDQ3LCAxMywgNSwgMjM5LCA3MywgMTMsIDUsIDIzOSwgNzQsIDI1MCwgMjM4LCAyMzksIDczLCAxMywgNSwgMjM5LCA2OCwgCi0gICAgMTMsIDUsIDIzOSwgNjYsIDEzLCA1LCAyMzksIDY0LCAxMywgNSwgMjM5LCA2MywgMTMsIDUsIDIzOSwgNjEsIDEzLCA1LCAKLSAgICAyMzksIDYyLCAxMDcsIDIzOSwgNjEsIDEzLCA1LCAyMzksIDUzLCAxMywgNSwgMjM5LCA1NCwgMjQsIDI0MCwgNTAsIDI0NSwgCi0gICAgMjA0LCAxMywgNSwgMjM5LCA0OSwgMTMsIDUsIDIzOSwgNTAsIDI0LCAyNTMsIDYxLCAxMywgNSwgMjM5LCA1MCwgMjUwLCAKLSAgICAyMzgsIDIzOSwgNDksIDEzLCA1LCAyMzksIDQ4LCAxMywgNSwgMjM5LCA0NywgMTMsIDUsIDIzOSwgMjUsIDEzLCA1LCAyMzksIAotICAgIDI2LCAyMTUsIDI0LCA5NywgMTA3LCAyMTUsIDI0LCA2NiwgMTMsIDUsIDIzOSwgMjYsIDEwNywgMjM5LCAyNiwgMjE1LCAyNCwgCi0gICAgOTcsIDEwNywgMjE1LCAyNCwgNjYsIDEzLCA1LCAyMzgsIDIzNywgMTMsIDUsIDIzOCwgMTk5LCAxMywgNSwgMjM4LCAyMDAsIAotICAgIDI0LCAyNTMsIDYxLCAxMywgNSwgMjM4LCAyMDAsIDI0LCA2NiwgMTMsIDUsIDIzOCwgMjAwLCAyNCwgMjI1LCAxNjMsIDEzLCAKLSAgICA1LCAyMzgsIDE5NiwgMTMsIDUsIDIzOCwgMTkwLCAxMywgNSwgMjM4LCAxODAsIDEzLCA1LCAyMzgsIDE3OSwgMTMsIDUsIAotICAgIDIzOCwgMTc3LCAxMywgNSwgMjM4LCAxNzgsIDEwNywgMjM4LCAxNzcsIDEzLCA1LCAyMzgsIDEwNywgMTMsIDUsIDIzOCwgCi0gICAgMTA4LCAxMDcsIDI0NSwgNzYsIDI0LCAyNTQsIDc5LCAyMzgsIDEwOCwgMTA3LCAyNDUsIDc2LCAyNCwgMjU0LCA3OCwgMTMsIAotICAgIDUsIDIzOCwgMTA1LCAxMywgNSwgMjM4LCAxMDMsIDEzLCA1LCAyMzgsIDEwNCwgMjI1LCA1NCwgMTUsIDEzLCA1LCAyMzgsIAotICAgIDEwMiwgMTMsIDUsIDIzOCwgMTAwLCAxMywgNSwgMjM4LCAxMDEsIDI0NSwgMjA0LCAxMywgNSwgMjM4LCA5OSwgMTMsIDUsIAotICAgIDIzOCwgOTEsIDEzLCA1LCAyMzgsIDkyLCAyMzQsIDM1LCAyMzgsIDkxLCAxMywgNSwgMjM4LCA4NiwgMTMsIDUsIDIzOCwgCi0gICAgNzAsIDEzLCA1LCAyMzgsIDQzLCAxMywgNSwgMjM4LCAzMSwgMTMsIDUsIDIxNSwgMjQsIDU3LCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMTAyLCA3OSwgMjUwLCAxOTAsIDc5LCAxNTQsIDEzLCA1LCAyMTUsIDI0LCAxMDIsIDc5LCAyNDYsIDE2MCwgMTMsIDUsIAotICAgIDIxNSwgMjQsIDEwMiwgNzksIDIzOCwgMjEsIDEzLCA1LCAyMTUsIDI0LCAyNTQsIDIzMywgMTMsIDUsIDIxNSwgMjQsIDI1NCwgCi0gICAgMTkwLCAxMywgNSwgMjE1LCAyNCwgMjU0LCA4MSwgMjIzLCA0MywgMjI3LCAxOSwgMTMsIDUsIDIxNSwgMjQsIDI1MywgNjEsIAotICAgIDEzLCA1LCAyMTUsIDI0LCAyNTIsIDE4MSwgMTMsIDUsIDIxNSwgMjQsIDI1MCwgMTQwLCAxMywgNSwgMjE1LCAyNCwgMjQ3LCAKLSAgICAyMzksIDEzLCA1LCAyMTUsIDI0LCAyNDYsIDE5MywgMTMsIDUsIDIxNSwgMjQsIDI0NiwgMTYwLCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMjQ1LCAyMTIsIDEzLCA1LCAyMTUsIDI0LCAyNDUsIDIxMywgNzksIDI0NSwgMjEyLCAxMywgNSwgMjE1LCAyNCwgMTU0LCAKLSAgICAxMywgNSwgMjE1LCAyNCwgMjQ1LCAxNTQsIDEzLCA1LCAyMTUsIDI0LCAyNDUsIDc2LCAyNCwgMjM0LCAxOTQsIDEzLCA1LCAKLSAgICAyMTUsIDI0LCAyNDAsIDUwLCAyNDUsIDIwNCwgMTMsIDUsIDIxNSwgMjQsIDI0MCwgMzAsIDEzLCA1LCAyMTUsIDI0LCAyNDAsIAotICAgIDMxLCA3OSwgMTU0LCAxMywgNSwgMjE1LCAyNCwgMjQwLCAzMSwgNzksIDIzNywgMTEwLCAxMywgNSwgMjE1LCAyNCwgMjM4LCAKLSAgICAxOTksIDEzLCA1LCAyMTUsIDI0LCAyMzgsIDE5MCwgMTMsIDUsIDIxNSwgMjQsIDIzOCwgMTA1LCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMjM4LCAxMDAsIDEzLCA1LCAyMTUsIDI0LCAyMzgsIDEwMSwgNzksIDI0NSwgNzYsIDc5LCA1NywgMTMsIDUsIDIxNSwgMjQsIAotICAgIDIzOCwgMzEsIDEzLCA1LCAyMTUsIDI0LCAyMzcsIDE1OCwgMTMsIDUsIDIxNSwgMjQsIDIzNywgMTEwLCAxMywgNSwgMjE1LCAKLSAgICAyNCwgMjM3LCAxMDIsIDEzLCA1LCAyMTUsIDI0LCAyMzYsIDIzNSwgMTMsIDUsIDIxNSwgMjQsIDIzNiwgMjM2LCA3OSwgCi0gICAgMjQ3LCAyMzksIDEzLCA1LCAyMTUsIDI0LCAyMzYsIDMyLCAxMywgNSwgMjE1LCAyNCwgMjM1LCAxNjIsIDEzLCA1LCAyMTUsIAotICAgIDI0LCAyMjksIDExNSwgNzksIDIyNywgMjMzLCAxMywgNSwgMjE1LCAyNCwgMjI5LCA3MywgNzksIDI0NiwgMjUsIDc5LCAKLSAgICAyNDcsIDE5MywgMTMsIDUsIDIxNSwgMjQsIDIyOSwgNzMsIDc5LCAyNDYsIDI1LCAyMjcsIDE5LCAxMywgNSwgMjE1LCAyNCwgCi0gICAgMjI5LCA0MSwgMTMsIDUsIDIxNSwgMjQsIDIyOSwgNDIsIDc5LCAyMjksIDQxLCAxMywgNSwgMjE1LCAyNCwgMjI3LCAyMzMsIAotICAgIDEzLCA1LCAyMTUsIDI0LCAyMjcsIDk1LCAxMywgNSwgMjE1LCAyNCwgMjI3LCA4NCwgMTMsIDUsIDIxNSwgMjQsIDIyNywgCi0gICAgNDUsIDc5LCAxMDIsIDc5LCAyMjgsIDcsIDc5LCAyMzYsIDEsIDEzLCA1LCAyMTUsIDI0LCA2NiwgMTMsIDUsIDIxNSwgMjQsIAotICAgIDk3LCA3OSwgNTcsIDEzLCA1LCAyMTUsIDI0LCA5NywgNzksIDk3LCA3OSwgNjYsIDEzLCA1LCAyMTUsIDI0LCAyMjUsIDE3MiwgCi0gICAgNzksIDI1NCwgODAsIDEzLCA1LCAyMTUsIDI0LCAyMjUsIDE2MywgMTMsIDUsIDIxNSwgMjQsIDIyNSwgODMsIDEzLCA1LCAKLSAgICAyMTUsIDIyOCwgMTE4LCAxMywgNSwgMjM4LCAyOSwgMTMsIDUsIDIzOCwgMzAsIDI0LCAyMjksIDExNCwgMTMsIDUsIDIzOCwgCi0gICAgMzAsIDI0LCAyMjksIDExNSwgNzksIDIyNywgMjMzLCAxMywgNSwgMjM4LCAzMCwgMjQ1LCAyMDQsIDEzLCA1LCAyMzgsIDMwLCAKLSAgICAyNDUsIDIwNSwgMTA3LCAyMzgsIDMwLCAyNDUsIDIwNSwgMjI5LCAxMTQsIDEzLCA1LCAyMzgsIDI2LCAxMywgNSwgMjM4LCAKLSAgICAyMSwgMTMsIDUsIDIzOCwgMjIsIDI0LCAyMzgsIDIxLCAxMywgNSwgMjM4LCAyMCwgMTMsIDUsIDIxNiwgMjQsIDIzOCwgOTEsIAotICAgIDEzLCA1LCAyMTYsIDI0LCAyMzgsIDkyLCA3OSwgMjMxLCA3MCwgMTMsIDUsIDIzNywgMTkzLCAxMywgNSwgMjM3LCAxODEsIAotICAgIDEzLCA1LCAyMzcsIDE3MywgMTMsIDUsIDIzNywgMTU4LCAxMywgNSwgMjM3LCAxMTAsIDEzLCA1LCAyMzcsIDExMSwgMjQsIAotICAgIDI1MywgNjEsIDEzLCA1LCAyMzcsIDEwOCwgMTMsIDUsIDIzNywgMTA5LCAyNCwgMjU0LCAyMzMsIDEzLCA1LCAyMzcsIDEwOSwgCi0gICAgMjQsIDI1MywgNjEsIDEzLCA1LCAyMzcsIDEwOSwgMjQsIDI0NywgMTgwLCAxMywgNSwgMjM3LCAxMDksIDI0LCAyNDcsIAotICAgIDE4MSwgMjI3LCAxOSwgMTMsIDUsIDIzNywgMTA5LCAyNCwgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyMzcsIDEwOSwgCi0gICAgMjQsIDI0NSwgNzYsIDI0LCAyNTMsIDYxLCAxMywgNSwgMjM3LCAxMDksIDI0LCAyNDAsIDMwLCAxMywgNSwgMjM3LCAxMDksIAotICAgIDI0LCAyMzksIDY2LCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMzksIDY0LCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMzksIDY1LCAKLSAgICA3OSwgMjU0LCA4MCwgMTMsIDUsIDIzNywgMTA5LCAyNCwgMjM4LCAxOTksIDEzLCA1LCAyMzcsIDEwOSwgMjQsIDIzOCwgNDQsIAotICAgIDc5LCAyNTQsIDgwLCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMzgsIDMxLCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMzYsIDIzNiwgCi0gICAgNzksIDI0NywgMjM5LCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMzUsIDE2MiwgMTMsIDUsIDIzNywgMTA5LCAyNCwgMjM0LCAKLSAgICAyMDYsIDEzLCA1LCAyMzcsIDEwOSwgMjQsIDIyOSwgMTYsIDc5LCAyNTQsIDgwLCAxMywgNSwgMjM3LCAxMDksIDI0LCAyMjgsIAotICAgIDI1NSwgNzksIDI1MiwgOTAsIDEzLCA1LCAyMzcsIDEwOSwgMjQsIDIyNSwgMjQ3LCAxMywgNSwgMjM3LCAxMDksIDIyNywgCi0gICAgMTksIDEzLCA1LCAyMzcsIDEwOSwgMjUwLCAyMzgsIDIzNywgMTA4LCAxMywgNSwgMjM3LCAxMDksIDIzNCwgMzUsIDIzNywgCi0gICAgMTA4LCAxMywgNSwgMjM3LCAxMDksIDIyOCwgMTE4LCAxMywgNSwgMjM3LCAxMDksIDIyOSwgOTYsIDEzLCA1LCAyMzcsIAotICAgIDEwNywgMTMsIDUsIDIzNywgMTA1LCAxMywgNSwgMjM3LCAxMDYsIDEwNywgMjM3LCAxMDUsIDEzLCA1LCAyMzcsIDEwNiwgCi0gICAgMjM0LCAzNSwgMjM3LCAxMDUsIDEzLCA1LCAyMzcsIDEwNiwgMjI5LCA5NiwgMTMsIDUsIDIzNywgMTA0LCAxMywgNSwgMjM3LCAKLSAgICAxMDIsIDEzLCA1LCAyMzcsIDEwMCwgMTMsIDUsIDIzNywgMTAxLCAxMDcsIDIzNywgMTAwLCAxMywgNSwgMjM3LCAxMDEsIAotICAgIDEwNywgMjM3LCAxMDEsIDI0NiwgMTYxLCAxMDcsIDI0NiwgMTYwLCAxMywgNSwgMTk4LCAxMywgNSwgMjM3LCA2OCwgMjQsIAotICAgIDIyNywgODQsIDEzLCA1LCAyMzcsIDY4LCAyNDUsIDIwNCwgMTMsIDUsIDIzNywgNjcsIDEzLCA1LCAyMzcsIDU1LCAxMywgNSwgCi0gICAgMjM3LCAyNCwgMTMsIDUsIDIzNywgNywgMTMsIDUsIDIzNywgNiwgMTMsIDUsIDIzNiwgMjM1LCAxMywgNSwgMjM2LCAyMDUsIAotICAgIDEzLCA1LCAyMzYsIDE1NywgMTMsIDUsIDIzNiwgMTI1LCAxMywgNSwgMjM2LCA2NiwgMTMsIDUsIDIzNiwgNjcsIDEwNywgCi0gICAgMjM2LCA2NiwgMTMsIDUsIDIzNiwgNTksIDEzLCA1LCAyMzYsIDYwLCAyNDUsIDIwNCwgMTMsIDUsIDIzNiwgNDYsIDEzLCA1LCAKLSAgICAyMzYsIDM1LCAxMywgNSwgMjM2LCAzMiwgMTMsIDUsIDIzNiwgMzMsIDI0LCA1NywgMTMsIDUsIDIzNiwgMzMsIDI0LCAyMzgsIAotICAgIDkxLCAxMywgNSwgMjM2LCAzMywgMjQsIDIyMywgMTE3LCAxMywgNSwgMjM2LCAzMywgMTA3LCAyMzYsIDMyLCAxMywgNSwgCi0gICAgMjM2LCAzMywgMTA3LCAyMzYsIDMzLCAyNCwgMTAyLCA3OSwgMjM2LCAxLCAxMywgNSwgMjM2LCAzMywgMjUwLCAyMzgsIAotICAgIDIzNiwgMzIsIDEzLCA1LCAyMzYsIDMwLCAxMywgNSwgMjM2LCAzMSwgMjQsIDU3LCAxMywgNSwgMjM2LCAzMSwgMjQsIDEwMiwgCi0gICAgNzksIDI1MCwgNCwgMTMsIDUsIDIzNiwgMzEsIDI0LCAyNTAsIDQsIDEzLCA1LCAyMzYsIDMxLCAyNDUsIDIwNCwgMTMsIDUsIAotICAgIDIzNiwgMSwgMTMsIDUsIDIzNiwgMCwgMTMsIDUsIDIzNSwgMjQ2LCAxMywgNSwgMjM1LCAyNDcsIDIzOSwgMjIyLCAxMywgNSwgCi0gICAgMjM1LCAyNDcsIDI0LCAyMjksIDQ0LCAyMjcsIDE5LCAxMywgNSwgMjM1LCAyNDcsIDIzNCwgMzUsIDIzNSwgMjQ2LCAxMywgCi0gICAgNSwgMjM1LCAyNDUsIDEzLCA1LCAyMzUsIDI0MSwgMjM0LCAxODIsIDEzLCA1LCAyMzUsIDI0MCwgMTMsIDUsIDIzNSwgMjM5LCAKLSAgICAxMywgNSwgMjM1LCAxNjIsIDEzLCA1LCAyMzUsIDE2MywgMjQsIDU3LCAxMywgNSwgMjM1LCAxNjMsIDI0LCAyMjUsIDE2MywgCi0gICAgMTMsIDUsIDIzNSwgMTYzLCAyMjksIDk2LCAxMywgNSwgMjM1LCA4OSwgMTMsIDUsIDIzNSwgOTAsIDI0LCA3MiwgMTMsIDUsIAotICAgIDIzNSwgODgsIDEzLCA1LCAyMzUsIDY0LCAxMywgNSwgMjM1LCA2NSwgMjQsIDI0NiwgMTY3LCAyMjcsIDE5LCAxMywgNSwgCi0gICAgMjM1LCA2NSwgMjQsIDI0NiwgMTYxLCA3OSwgMjQ2LCAxNjcsIDIyNywgMTksIDEzLCA1LCAyMzUsIDYyLCAxMywgNSwgMjM1LCAKLSAgICA2MywgMjQsIDI1NCwgMTkwLCAxMywgNSwgMjM1LCA2MywgMjQsIDI1NCwgODAsIDEzLCA1LCAyMzUsIDYzLCAyNCwgMjU0LCAKLSAgICA4MSwgNzksIDI1NCwgODAsIDEzLCA1LCAyMzUsIDYzLCAyNCwgMjQ1LCAyMTIsIDEzLCA1LCAyMzUsIDYzLCAyNCwgMjM2LCAKLSAgICAyMzYsIDc5LCAyNDYsIDE2NywgMjI3LCAxOSwgMTMsIDUsIDIzNSwgNjMsIDI0LCAyMzUsIDE2MiwgMTMsIDUsIDIzNSwgNjMsIAotICAgIDI0LCAyMzQsIDE5NCwgMTMsIDUsIDIzNSwgNjMsIDI0LCAyMjksIDExNCwgMTMsIDUsIDIzNSwgNjMsIDI0LCAyMjksIDExNSwgCi0gICAgNzksIDEwMiwgMjU0LCAxOTAsIDEzLCA1LCAyMzUsIDYzLCAyNCwgMjI5LCAxMTUsIDc5LCAyNTQsIDgwLCAxMywgNSwgMjM1LCAKLSAgICA2MywgMjQsIDIyOSwgMTE1LCA3OSwgMjU0LCA4MSwgNzksIDI1NCwgODAsIDEzLCA1LCAyMzUsIDYzLCAyNCwgMjI1LCAxNzIsIAotICAgIDc5LCAyNTQsIDgwLCAxMywgNSwgMjM1LCA2MywgMjQsIDIyNSwgODMsIDEzLCA1LCAyMzUsIDUzLCAxMywgNSwgMjM0LCAKLSAgICAyMDYsIDEzLCA1LCAyMzQsIDIwNSwgMTMsIDUsIDIzNCwgMTk0LCAxMywgNSwgMjM0LCAxOTUsIDIzOCwgMzAsIDI0LCAyNDYsIAotICAgIDE2MCwgMTMsIDUsIDIzNCwgMTk1LCAyMzgsIDMwLCAyNCwgMjM3LCA3LCAxMywgNSwgMjM0LCAxOTUsIDIzOCwgMzAsIDI0LCAKLSAgICAyMzEsIDEyLCAxMywgNSwgMjM0LCAxOTUsIDIzOCwgMzAsIDI0LCAyMzEsIDEzLCAxMDcsIDIzNCwgMTk1LCAyMzgsIDMwLCAKLSAgICAyNCwgMjMxLCAxMiwgMTMsIDUsIDIzNCwgMTk1LCAyMzgsIDMwLCAyNCwgMjI1LCA4MywgMTMsIDUsIDIzNCwgMTk1LCAyMjcsIAotICAgIDE5LCAxMywgNSwgMjM0LCAxOTUsIDEwNywgMjM0LCAxOTQsIDEzLCA1LCAyMzQsIDE5NSwgMjUwLCAyMzgsIDIzNCwgMTk0LCAKLSAgICAxMywgNSwgMjM0LCAxOTUsIDI1MCwgMjM4LCAyMzQsIDE5NSwgMjM4LCAzMCwgMTA3LCAyMzgsIDI5LCAxMywgNSwgMjM0LCAKLSAgICAxOTAsIDEzLCA1LCAyMzQsIDE5MSwgMjU1LCA1MSwgMjQsIDI1NCwgNzYsIDEzLCA1LCAyMzQsIDE5MSwgMjU1LCA1MSwgMjQsIAotICAgIDI1MiwgMTgxLCAxMywgNSwgMjM0LCAxOTEsIDI1NSwgNTEsIDI0LCAyNDgsIDEwMywgMTMsIDUsIDIzNCwgMTkxLCAyNTUsIAotICAgIDUxLCAyNCwgMjQ1LCAyMTIsIDEzLCA1LCAyMzQsIDE5MSwgMjU1LCA1MSwgMjQsIDI0MCwgNTAsIDI0NSwgMjA0LCAxMywgNSwgCi0gICAgMjM0LCAxOTEsIDI1NSwgNTEsIDI0LCAyMzksIDY0LCAxMywgNSwgMjM0LCAxOTEsIDI1NSwgNTEsIDI0LCAyMzgsIDQzLCAKLSAgICAxMywgNSwgMjM0LCAxOTEsIDI1NSwgNTEsIDI0LCAyMzUsIDE2MiwgMTMsIDUsIDIzNCwgMTkxLCAyNTUsIDUxLCAyNCwgCi0gICAgMjI4LCAyNTIsIDEzLCA1LCAyMzQsIDE5MSwgMjU1LCA1MSwgMjQsIDIyNSwgMTcxLCAxMywgNSwgMjM0LCAxOTEsIDIzOCwgCi0gICAgMTc4LCAyNCwgMjUyLCAxODEsIDEzLCA1LCAyMzQsIDE5MSwgMjM4LCAxNzgsIDI0LCAyNTIsIDE4MiwgNjYsIDEzLCA1LCAKLSAgICAyMTMsIDEzLCA1LCAyMzMsIDIzNSwgMTMsIDUsIDIzMywgMjEyLCAxMywgNSwgMjMzLCAxOTcsIDEzLCA1LCAyMzMsIDEwNywgCi0gICAgMTMsIDUsIDIzMywgNjksIDEzLCA1LCAyMzMsIDcwLCAyNCwgNTcsIDEzLCA1LCAyMzMsIDcwLCAyNCwgMjU1LCA1MiwgMTMsIAotICAgIDUsIDIzMywgNzAsIDI0LCAyNTIsIDE4MSwgMTMsIDUsIDIzMywgNzAsIDI0LCAyNTIsIDkwLCAxMywgNSwgMjMzLCA3MCwgCi0gICAgMjQsIDcyLCAxMywgNSwgMjMzLCA3MCwgMjQsIDc0LCAxMywgNSwgMjMzLCA3MCwgMjQsIDI0NCwgNzEsIDEzLCA1LCAyMzMsIAotICAgIDcwLCAyNCwgNjYsIDEzLCA1LCAyMzMsIDcwLCAyNCwgMjI1LCAxNzEsIDEzLCA1LCAyMzMsIDcwLCAyNTAsIDIzOCwgMjMzLCAKLSAgICA2OSwgMTMsIDUsIDIzMywgMzIsIDEzLCA1LCAyMzMsIDMzLCAyNCwgMjM5LCA0OSwgMTMsIDUsIDIzMywgMzMsIDI0LCAyMjUsIAotICAgIDE2MywgMTMsIDUsIDIzMywgMzMsIDI0LCAyMjMsIDExNywgMTMsIDUsIDIzMywgMzMsIDIzNCwgMzUsIDIzMywgMzIsIDEzLCAKLSAgICA1LCAyMDgsIDEzLCA1LCAyMzIsIDIwLCAxMywgNSwgMjMxLCAxODAsIDEzLCA1LCAyMzEsIDcwLCAxMywgNSwgMjMxLCAzMSwgCi0gICAgMTMsIDUsIDIzMSwgMjAsIDIzNCwgMTgyLCAxMywgNSwgMjMxLCAxOSwgMTMsIDUsIDIzMSwgMjAsIDI0LCA1NywgMTMsIDUsIAotICAgIDIzMSwgMjAsIDI0LCAyNDgsIDEwNywgMTMsIDUsIDIzMSwgMjAsIDI0LCAyNDgsIDEwNSwgMTMsIDUsIDIzMSwgMjAsIDI0LCAKLSAgICAxNTQsIDEzLCA1LCAyMzEsIDIwLCAyNCwgMjM5LCA1MywgMTMsIDUsIDIzMSwgMjAsIDI0LCAyMzgsIDkxLCAxMywgNSwgCi0gICAgMjMxLCAyMCwgMjQsIDIzNywgMTAwLCAxMywgNSwgMjMxLCAyMCwgMjQsIDIzNiwgMTU3LCAxMywgNSwgMjMxLCAyMCwgMjQsIAotICAgIDIzNCwgMTk0LCAxMywgNSwgMjMxLCAyMCwgMjQsIDIzMSwgMTIsIDEzLCA1LCAyMzEsIDIwLCAyNCwgMjI5LCA4OCwgMTMsIAotICAgIDUsIDIzMSwgMjAsIDI0LCAyMjcsIDEwMCwgMTMsIDUsIDIzMSwgMjAsIDI0LCAyMjUsIDE3MSwgMTMsIDUsIDIzMSwgMjAsIAotICAgIDI0LCAyMjUsIDE2OCwgMTMsIDUsIDIzMSwgMjAsIDI0LCAyMjUsIDE0NSwgMTMsIDUsIDIzMSwgMjAsIDI0LCAyMjUsIDEwMywgCi0gICAgMTMsIDUsIDIzMSwgMjAsIDI0LCAyMjUsIDgzLCAxMywgNSwgMjMxLCAyMCwgMTA3LCAyMzEsIDE5LCAxMywgNSwgMjMxLCAKLSAgICAyMCwgMjQ1LCAyMDQsIDEzLCA1LCAyMzEsIDEyLCAxMywgNSwgMjMxLCAxMywgMjE1LCAyNCwgMjU0LCA3OCwgMTMsIDUsIAotICAgIDIzMCwgMjUxLCAxMywgNSwgMjMwLCAyNDQsIDEzLCA1LCAyMjksIDE0NiwgMTMsIDUsIDIyOSwgMTQ0LCAxMywgNSwgMjI5LCAKLSAgICAxNDUsIDI0LCA1NywgMTMsIDUsIDIyOSwgMTQ1LCAyNCwgMjUzLCA2MSwgMTMsIDUsIDIyOSwgMTQ1LCAyNCwgMjQ2LCAyNCwgCi0gICAgMTMsIDUsIDIyOSwgMTQ1LCAyNCwgMjM1LCAxNjIsIDEzLCA1LCAyMjksIDE0NSwgMjQsIDIyOSwgNDEsIDEzLCA1LCAyMjksIAotICAgIDE0NSwgMjQsIDIyNSwgMjM2LCAxMywgNSwgMjI5LCAxNDUsIDI0LCA2NiwgMTMsIDUsIDIyOSwgMTQ1LCAyNCwgOTcsIDc5LCAKLSAgICA1NywgMTMsIDUsIDIyOSwgMTQzLCAxMywgNSwgMjI5LCAxNDEsIDEzLCA1LCAyMjksIDEyNSwgMTMsIDUsIDIyOSwgMTE0LCAKLSAgICAxMywgNSwgMjI5LCAxMTUsIDI0NCwgMTQ1LCAxMywgNSwgMjI5LCAxMTUsIDEwNywgMjI5LCAxMTUsIDI0NiwgMTg1LCAxMDcsIAotICAgIDI0NiwgMTg1LCAyNDYsIDE2MSwgMTA3LCAyNDYsIDE2MCwgMTMsIDUsIDIyOSwgMTE1LCAxMDcsIDIyOSwgMTE1LCAyMjcsIAotICAgIDEwMSwgMTA3LCAyMjcsIDEwMSwgMjQ2LCAxNjEsIDEwNywgMjQ2LCAxNjAsIDEzLCA1LCAyMjksIDEwNywgMTMsIDUsIDIyOSwgCi0gICAgMTAyLCAxMywgNSwgMjI5LCA5OSwgMTMsIDUsIDIyOSwgOTgsIDEzLCA1LCAyMjksIDk1LCAxMywgNSwgMjI5LCA4OCwgMTMsIAotICAgIDUsIDIyOSwgODksIDI0LCA1NywgMTMsIDUsIDIyOSwgODksIDI0LCAyNDAsIDMwLCAxMywgNSwgMjI5LCA4MiwgMTMsIDUsIAotICAgIDIyOSwgODMsIDI0LCA1NywgMTMsIDUsIDIyOSwgODMsIDI0LCAyNTMsIDUxLCAxMywgNSwgMjI5LCA4MywgMjQsIDI1MiwgCi0gICAgNzksIDEzLCA1LCAyMjksIDgzLCAyNCwgMjQ5LCAyMTAsIDEzLCA1LCAyMjksIDgzLCAyNCwgMjQ2LCAxNjAsIDEzLCA1LCAKLSAgICAyMjksIDgzLCAyNCwgMjQwLCA0OSwgMTMsIDUsIDIyOSwgODMsIDI0LCAyNDAsIDUwLCAyNDUsIDIwNCwgMTMsIDUsIDIyOSwgCi0gICAgODMsIDI0LCAyMzgsIDg2LCAxMywgNSwgMjI5LCA4MywgMjQsIDIzNywgMTAyLCAxMywgNSwgMjI5LCA4MywgMjQsIDIzNiwgCi0gICAgNTksIDEzLCA1LCAyMjksIDgzLCAyNCwgMjMxLCAxMiwgMTMsIDUsIDIyOSwgNzcsIDEzLCA1LCAyMjksIDc0LCAxMywgNSwgCi0gICAgMjI5LCA3NSwgMjI3LCAxOSwgMTMsIDUsIDIyOSwgNzUsIDEwNywgMjI5LCA3NSwgMjUyLCA3MSwgMTA3LCAyNTIsIDcwLCAKLSAgICAxMywgNSwgMjI5LCA3MiwgMTMsIDUsIDIyOSwgNDMsIDEzLCA1LCAyMjksIDQ0LCAxMDcsIDIzOSwgMjIzLCAyMjksIDQzLCAKLSAgICAxMywgNSwgMjI5LCA0MSwgMTMsIDUsIDIyOSwgNDAsIDEzLCA1LCAyMjksIDE1LCAxMywgNSwgMjI5LCAxNiwgMjQ1LCAyMDQsIAotICAgIDEzLCA1LCAyMjksIDcsIDEzLCA1LCAyMjksIDUsIDEzLCA1LCAyMjksIDYsIDEwNywgMjI5LCA2LCAyMjksIDQxLCAxMywgNSwgCi0gICAgMjI4LCAyNTQsIDEzLCA1LCAyMjgsIDI1MiwgMTMsIDUsIDIyOCwgNiwgMTMsIDUsIDIyOCwgNywgMTA3LCAyMjgsIDYsIDEzLCAKLSAgICA1LCAyMjcsIDI0MiwgMTMsIDUsIDIyNywgMjQxLCAxMywgNSwgMjI3LCAyNDAsIDEzLCA1LCAyMjcsIDIzMywgMTMsIDUsIAotICAgIDIyNywgMjMyLCAxMywgNSwgMjI3LCAyMTMsIDEzLCA1LCAyMjcsIDIxMiwgMTMsIDUsIDIyNywgMTA3LCAxMywgNSwgMjI3LCAKLSAgICAxMDgsIDI1NCwgNjksIDEzLCA1LCAyMjcsIDEwOCwgMjQsIDI0NSwgNzUsIDEzLCA1LCAyMjcsIDEwOCwgMjQsIDIzNiwgCi0gICAgMTU3LCAxMywgNSwgMjI3LCAxMDgsIDI0NSwgMjA0LCAxMywgNSwgMjI3LCAxMDAsIDEzLCA1LCAyMjcsIDEwMSwgMTA3LCAKLSAgICAyMjcsIDEwMSwgMjM1LCA5MCwgMTA3LCAyMzUsIDkwLCAyNDksIDE5NiwgMTA3LCAyNDksIDE5NSwgMTMsIDUsIDIyNywgCi0gICAgMTAxLCAyMjgsIDExOCwgMTMsIDUsIDIyNywgOTUsIDEzLCA1LCAxMDgsIDI0LCAyNTIsIDE4MSwgMTMsIDUsIDEwOCwgMjQsIAotICAgIDI0NSwgMjEyLCAxMywgNSwgMTA4LCAyNCwgMjI5LCAxMTQsIDEzLCA1LCAxMDgsIDI0LCAyMjksIDQzLCAxMywgNSwgMTA4LCAKLSAgICAyNCwgMjI1LCAyNDcsIDEzLCA1LCAxMDgsIDI0LCAyMjUsIDE2MywgMTMsIDUsIDIyNywgODQsIDEzLCA1LCAyMjcsIDY3LCAKLSAgICAxMywgNSwgMjI3LCA0NCwgMTMsIDUsIDIyNywgNDUsIDI0NSwgMjA0LCAxMywgNSwgMjI2LCAxNzUsIDEzLCA1LCAyMjYsIAotICAgIDE3NiwgMjI3LCAxOSwgMTMsIDUsIDIyNiwgMTYwLCAxMywgNSwgMjI2LCAxNDYsIDEzLCA1LCAyMjYsIDE0NywgMjQsIDIyNywgCi0gICAgODQsIDEzLCA1LCAyMjYsIDE0NywgMTA3LCAyMjYsIDE0NiwgMTMsIDUsIDIyNiwgMTQ3LCAxMDcsIDIyNiwgMTQ3LCAyNDYsIAotICAgIDE4NSwgMTA3LCAyNDYsIDE4NSwgMjQ2LCAxNjEsIDEwNywgMjQ2LCAxNjAsIDEzLCA1LCAyMjUsIDI1MCwgMTMsIDUsIDIyNSwgCi0gICAgMjQ3LCAxMywgNSwgMjI1LCAyNDUsIDEzLCA1LCAyMjUsIDI0NCwgMTMsIDUsIDIyNSwgMjM2LCAxMywgNSwgMjI1LCAyMzcsIAotICAgIDEwNywgMjI1LCAyMzcsIDIyMywgMTE4LCAxMDcsIDIyMywgMTE3LCAxMywgNSwgNjYsIDEzLCA1LCA5NywgMjQ1LCAyMTIsIAotICAgIDEzLCA1LCA5NywgOTcsIDY2LCAxMywgNSwgOTcsIDEwNywgOTcsIDIzMywgMjQyLCAxMDcsIDIzMywgMjQyLCAyNDYsIDE2MSwgCi0gICAgMTA3LCAyNDYsIDE2MCwgMTMsIDUsIDk3LCAxMDcsIDk3LCAyMjcsIDIxNCwgMTA3LCAyMjcsIDIxMywgMTMsIDUsIDk3LCAKLSAgICAxMDcsIDk3LCA5NywgMjAwLCAxMDcsIDk3LCAyMzEsIDE5MiwgMTMsIDUsIDIyNSwgMTcxLCAxMywgNSwgMjI1LCAxNjgsIAotICAgIDEzLCA1LCAyMjUsIDE2MywgMTMsIDUsIDIyNSwgMTY0LCAyMzgsIDg2LCAxMywgNSwgMjI1LCAxNjQsIDI0LCAyNTMsIDYxLCAKLSAgICAxMywgNSwgMjI1LCAxNjQsIDI0LCAyMzYsIDE1NywgMTMsIDUsIDIyNSwgMTY0LCAyNCwgOTcsIDc5LCA5NywgNzksIDY2LCAKLSAgICAxMywgNSwgMjI1LCAxNjQsIDI0LCA5NywgNzksIDk3LCA3OSwgOTcsIDI0NSwgMjA0LCAxMywgNSwgMjI1LCAxNjQsIDI0NSwgCi0gICAgMjA0LCAxMywgNSwgMjI1LCAxNjQsIDIyOSwgOTYsIDEzLCA1LCAyMjUsIDE2NCwgMjI5LCA5NywgMjQsIDI1MywgNjEsIDEzLCAKLSAgICA1LCAyMjUsIDE2MCwgMTMsIDUsIDIyNSwgMTQ1LCAxMywgNSwgMjI1LCAxNDYsIDI0LCAyMzgsIDMxLCAxMywgNSwgMjI1LCAKLSAgICAxNDYsIDI0LCAyMzYsIDIzNiwgNzksIDI1MCwgMTg5LCAxMywgNSwgMjI1LCAxNDYsIDI0LCAyMjksIDE0NCwgMTMsIDUsIAotICAgIDIyNSwgMTQ2LCAyNCwgNjYsIDEzLCA1LCAyMjUsIDE0NCwgMTMsIDUsIDIyNSwgMTQwLCAxMywgNSwgMjI1LCAxNDEsIDI0LCAKLSAgICAyMzksIDI1LCAxMywgNSwgMjI1LCAxNDEsIDI0LCAyMTMsIDEzLCA1LCAyMjUsIDEzOCwgMTMsIDUsIDIyNSwgMTM5LCAyNDUsIAotICAgIDIwNCwgMTMsIDUsIDIyNSwgMTAzLCAxMywgNSwgMjI1LCAxMDQsIDI1MCwgMjM4LCAyMjUsIDEwMywgMTMsIDUsIDIyNSwgCi0gICAgMTA0LCAyMjksIDk2LCAxMywgNSwgMjI1LCAxMDEsIDEzLCA1LCAyMjUsIDEwMiwgMjQsIDEwMiwgNzksIDE1NCwgMTMsIDUsIAotICAgIDIyNSwgMTAyLCAyNCwgMTAyLCA3OSwgMjM2LCAxLCAxMywgNSwgMjI1LCAxMDIsIDI0LCAyNTQsIDIzMywgMTMsIDUsIDIyNSwgCi0gICAgMTAyLCAyNCwgMTU0LCAxMywgNSwgMjI1LCAxMDIsIDI0LCAyMzQsIDE5NCwgMTMsIDUsIDIyNSwgMTAyLCAyNCwgMjI1LCAKLSAgICAxNzEsIDEzLCA1LCAyMjUsIDEwMiwgMjQsIDIyNSwgMTcyLCA3OSwgMjU0LCA4MCwgMTMsIDUsIDIyNSwgMTAyLCAyNCwgCi0gICAgMjI1LCAxNzIsIDc5LCAyNTIsIDE4MSwgMTMsIDUsIDIyNSwgMTAwLCAxMywgNSwgMjI1LCA5NywgMTMsIDUsIDIyNSwgOTYsIAotICAgIDEzLCA1LCAyMjUsIDkzLCAxMywgNSwgMjI1LCA5NCwgMjQsIDU3LCAxMywgNSwgMjI1LCA5NCwgMjQsIDI1NCwgNzYsIDEzLCAKLSAgICA1LCAyMjUsIDk0LCAyNCwgMTI1LCAxMywgNSwgMjI1LCA5NCwgMjQsIDI0OCwgOTcsIDEzLCA1LCAyMjUsIDk0LCAyNCwgCi0gICAgMjQ2LCAxOTMsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjQ2LCAxNzcsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjQ2LCAxNjcsIAotICAgIDIyNywgMTksIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjQ2LCAxNjAsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjQ1LCAyMTgsIDEzLCAKLSAgICA1LCAyMjUsIDk0LCAyNCwgMTU0LCAxMywgNSwgMjI1LCA5NCwgMjQsIDI0MCwgNDksIDEzLCA1LCAyMjUsIDk0LCAyNCwgCi0gICAgMjQwLCAzMCwgMTMsIDUsIDIyNSwgOTQsIDI0LCAyMzksIDIwMCwgMTMsIDUsIDIyNSwgOTQsIDI0LCAyMzgsIDE5OSwgMTMsIAotICAgIDUsIDIyNSwgOTQsIDI0LCAyMzcsIDEwMCwgMTMsIDUsIDIyNSwgOTQsIDI0LCAyMzYsIDEyNSwgMTMsIDUsIDIyNSwgOTQsIAotICAgIDI0LCAyMTMsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjI5LCAxMTQsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjI5LCA1LCAxMywgNSwgCi0gICAgMjI1LCA5NCwgMjQsIDIyNSwgMjUwLCAxMywgNSwgMjI1LCA5NCwgMjQsIDk3LCA3OSwgMjQ1LCAyMTIsIDEzLCA1LCAyMjUsIAotICAgIDk0LCAyNCwgMjI1LCAxNjMsIDEzLCA1LCAyMjUsIDk0LCAyNCwgMjI1LCA5MSwgMTMsIDUsIDIyNSwgOTEsIDEzLCA1LCAKLSAgICAyMjUsIDkyLCAyNCwgNjYsIDEzLCA1LCAyMjUsIDgzLCAxMywgNSwgMjI1LCA4NCwgMjQsIDU3LCAxMywgNSwgMjI1LCA4NCwgCi0gICAgMjQsIDIzOCwgMTA3LCAxMywgNSwgMjI1LCA4NCwgMjQsIDIzOCwgOTEsIDEzLCA1LCAyMjUsIDg0LCAyNCwgMjI3LCA4NCwgCi0gICAgMTMsIDUsIDIyNSwgODAsIDEzLCA1LCAyMjUsIDgyLCAxMywgNSwgMjI1LCA4MSwgMTMsIDUsIDIyNSwgNzcsIDEzLCA1LCAKLSAgICAyMjUsIDY3LCAxMywgNSwgMjI1LCA2OCwgMjQsIDIzOSwgMjUsIDEzLCA1LCAyMjUsIDY2LCAxMywgNSwgMjIzLCAxMTcsIAotICAgIDEzLCA1LCAyMjMsIDExOCwgMjI3LCAxOSwgMTMsIDUsIDIyMywgMTE4LCAyMjgsIDExOSwgMjQsIDIzOCwgOTEsIDEzLCA1LCAKLSAgICAyMjMsIDExNSwgMTMsIDUsIDIyMywgMTA4LCAxMywgNSwgMjIzLCA5NiwgMTMsIDUsIDIyMywgNDcsIDEzLCA1LCAyMjMsIAotICAgIDQ4LCAxMDcsIDIyMywgNDcsIDEzLCA1LCAyMjMsIDQ2LCAxMywgNSwgMjIzLCA0NCwgMTMsIDUsIDIyMywgNDUsIDIzOSwgCi0gICAgNjcsIDIyNywgMTksIDEzLCA1LCAyMjMsIDM5LCAxMywgNSwgMjIzLCAzMiwgMTMsIDUsIDIyMywgMTksIDEzLCA1LCAyMjMsIAotICAgIDE3LCAxMywgNSwgMjIzLCAxOCwgMjQsIDU3LCAxMywgNSwgMjIzLCAxNiwgMTMsIDUsIDIyMywgMTUsIDEzLCAxMTEsIDUsIAotICAgIDEzNSwgMjU0LCA4MCwgMTMsIDExMSwgNSwgMTUyLCAyNTQsIDgwLCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjU0LCA4MCwgCi0gICAgMTMsIDExMSwgNSwgMjQ3LCAzNywgMjU0LCA4MCwgMTMsIDExMSwgNSwgMjI4LCAyMTcsIDI1NCwgODAsIDEzLCAxMTEsIDUsIAotICAgIDIyOSwgMTYzLCAyNTQsIDgwLCAxMywgMTExLCA1LCAyNDgsIDIwLCAyNTQsIDgwLCAxMywgMTExLCA1LCAyMzUsIDYxLCAKLSAgICAyNTQsIDgwLCAxMywgMTExLCA1LCAxNTIsIDI0OSwgMTk1LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjQ5LCAxOTUsIDEzLCAKLSAgICAxMTEsIDUsIDI0NywgMzcsIDI0OSwgMTk1LCAxMywgMTExLCA1LCAyMjgsIDIxNywgMjQ5LCAxOTUsIDEzLCAxMTEsIDUsIAotICAgIDIyOSwgMTYzLCAyNDksIDE5NSwgMTMsIDExMSwgNSwgMjQ4LCAyMCwgMjQ5LCAxOTUsIDEzLCAxMTEsIDUsIDIzNSwgNjEsIAotICAgIDI0OSwgMTk1LCAxMywgMTExLCA1LCAyNDYsIDI0MywgNjYsIDEzLCAxMTEsIDUsIDI0NywgMzcsIDY2LCAxMywgMTExLCA1LCAKLSAgICAyMjgsIDIxNywgNjYsIDEzLCAxMTEsIDUsIDIyOSwgMTYzLCA2NiwgMTMsIDExMSwgNSwgMjQ4LCAyMCwgNjYsIDEzLCAxMTEsIAotICAgIDUsIDIzNSwgNjEsIDY2LCAxMywgMTExLCA1LCAxNjgsIDI0NiwgMTA5LCAxMywgMTExLCA1LCAxMzUsIDI0NiwgMTA5LCAxMywgCi0gICAgMTExLCA1LCAxNTIsIDI0NiwgMTA5LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjQ2LCAxMDksIDEzLCAxMTEsIDUsIDI0NywgCi0gICAgMzcsIDI0NiwgMTA5LCAxMywgMTExLCA1LCAyMjgsIDIxNywgMjQ2LCAxMDksIDEzLCAxMTEsIDUsIDIyOSwgMTYzLCAyNDYsIAotICAgIDEwOSwgMTMsIDExMSwgNSwgMjQ4LCAyMCwgMjQ2LCAxMDksIDEzLCAxMTEsIDUsIDIzNSwgNjEsIDI0NiwgMTA5LCAxMywgCi0gICAgMTExLCA1LCAxNjgsIDI0NiwgMTA2LCAxMywgMTExLCA1LCAxMzUsIDI0NiwgMTA2LCAxMywgMTExLCA1LCAxNTIsIDI0NiwgCi0gICAgMTA2LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjQ2LCAxMDYsIDEzLCAxMTEsIDUsIDI0NywgMzcsIDI0NiwgMTA2LCAxMywgCi0gICAgMTExLCA1LCAxMzUsIDIyOSwgMTI1LCAxMywgMTExLCA1LCAxNTIsIDIyOSwgMTI1LCAxMywgMTExLCA1LCAxNTIsIDIyOSwgCi0gICAgMTI2LCAyMjUsIDU0LCAxNSwgMTMsIDExMSwgNSwgMjQ2LCAyNDMsIDIyOSwgMTI1LCAxMywgMTExLCA1LCAyNDcsIDM3LCAKLSAgICAyMjksIDEyNSwgMTMsIDExMSwgNSwgMjI4LCAyMTcsIDIyOSwgMTI1LCAxMywgMTExLCA1LCAyMjksIDE2MywgMjI5LCAxMjUsIAotICAgIDEzLCAxMTEsIDUsIDI0OCwgMjAsIDIyOSwgMTI1LCAxMywgMTExLCA1LCAyMzUsIDYxLCAyMjksIDEyNSwgMTMsIDExMSwgNSwgCi0gICAgMTY4LCAyMjksIDEyMSwgMTMsIDExMSwgNSwgMTM1LCAyMjksIDEyMSwgMTMsIDExMSwgNSwgMTUyLCAyMjksIDEyMSwgMTMsIAotICAgIDExMSwgNSwgMTUyLCAyMjksIDEyMiwgMjI1LCA1NCwgMTUsIDEzLCAxMTEsIDUsIDI0NiwgMjQzLCAyMjksIDEyMSwgMTMsIAotICAgIDExMSwgNSwgMjQ3LCAzNywgMjI5LCAxMjEsIDEzLCAxMTEsIDUsIDIyOSwgMTI2LCAyNCwgMjQ2LCAxNzgsIDc5LCAyNDksIAotICAgIDE5NSwgMTMsIDExMSwgNSwgMjI5LCAxMjYsIDI0LCAyNDYsIDE3OCwgNzksIDIzNiwgMTI1LCAxMywgMTExLCA1LCAxNjgsIAotICAgIDI1MiwgNjcsIDEzLCAxMTEsIDUsIDEzNSwgMjUyLCA2NywgMTMsIDExMSwgNSwgMTUyLCAyNTIsIDY3LCAxMywgMTExLCA1LCAKLSAgICAxNTIsIDI1MiwgNjgsIDIyNSwgNTQsIDE1LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjUyLCA2NywgMTMsIDExMSwgNSwgCi0gICAgMjQ3LCAzNywgMjUyLCA2NywgMTMsIDExMSwgNSwgMTUyLCAyMjUsIDU0LCAyMTEsIDI0NywgMTgyLCAxMywgMTExLCA1LCAKLSAgICAxNTIsIDIyNSwgNTQsIDIxMSwgMjQ3LCAxNzksIDEzLCAxMTEsIDUsIDI0NiwgMjQzLCAyMjUsIDU0LCAyMTEsIDIzNywgCi0gICAgMTc0LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjI1LCA1NCwgMjExLCAyMzcsIDE3MiwgMTMsIDExMSwgNSwgMjQ2LCAyNDMsIAotICAgIDIyNSwgNTQsIDIxMSwgMjM3LCAxNzUsIDU3LCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjI1LCA1NCwgMjExLCAyMzcsIDE3NSwgCi0gICAgMjU0LCAyNywgMTMsIDExMSwgNSwgMjI4LCAyMTcsIDIyNSwgNTQsIDIxMSwgMjU0LCA3NywgMTMsIDExMSwgNSwgMjI5LCAKLSAgICAxNjMsIDIyNSwgNTQsIDIxMSwgMjQwLCAyMiwgMTMsIDExMSwgNSwgMjI5LCAxNjMsIDIyNSwgNTQsIDIxMSwgMjQwLCAyNCwgCi0gICAgNTcsIDEzLCAxMTEsIDUsIDIyOSwgMTYzLCAyMjUsIDU0LCAyMTEsIDI0MCwgMjQsIDI1NCwgMjcsIDEzLCAxMTEsIDUsIAotICAgIDI0OCwgMjAsIDIyNSwgNTQsIDIxMSwgMjI1LCA3OSwgMTMsIDExMSwgNSwgMjQ4LCAyMCwgMjI1LCA1NCwgMjExLCAyMjUsIAotICAgIDc4LCAxMywgMTExLCA1LCAyMzUsIDYxLCAyMjUsIDU0LCAyMTEsIDI0MCwgMzgsIDEzLCAxMTEsIDUsIDIzNSwgNjEsIDIyNSwgCi0gICAgNTQsIDIxMSwgMjQwLCAzNywgMTMsIDExMSwgNSwgMjM1LCA2MSwgMjI1LCA1NCwgMjExLCAyNDAsIDM2LCAxMywgMTExLCA1LCAKLSAgICAyMzUsIDYxLCAyMjUsIDU0LCAyMTEsIDI0MCwgMzksIDU3LCAxMywgMTExLCA1LCAxMzUsIDI1NCwgODEsIDIyNywgMTksIAotICAgIDEzLCAxMTEsIDUsIDE1MiwgMjU0LCA4MSwgMjI3LCAxOSwgMTMsIDExMSwgNSwgMjQ2LCAyNDMsIDI1NCwgODEsIDIyNywgCi0gICAgMTksIDEzLCAxMTEsIDUsIDI0NywgMzcsIDI1NCwgODEsIDIyNywgMTksIDEzLCAxMTEsIDUsIDIyOCwgMjE3LCAyNTQsIDgxLCAKLSAgICAyMjcsIDE5LCAxMywgMTExLCA1LCAxNjgsIDI1MywgNDIsIDEzLCAxMTEsIDUsIDEzNSwgMjUzLCA0MiwgMTMsIDExMSwgNSwgCi0gICAgMTUyLCAyNTMsIDQyLCAxMywgMTExLCA1LCAyNDYsIDI0MywgMjUzLCA0MiwgMTMsIDExMSwgNSwgMjQ2LCAyNDMsIDI1MywgCi0gICAgNDMsIDIyNSwgNTQsIDE1LCAxMywgMTExLCA1LCAyNDcsIDM3LCAyNTMsIDQyLCAxMywgMTExLCA1LCAyNDcsIDM3LCAyNTMsIAotICAgIDQzLCAyMjUsIDU0LCAxNSwgMTMsIDExMSwgNSwgMjM1LCA2OSwgMTMsIDExMSwgNSwgMjM1LCA3MCwgMTMsIDExMSwgNSwgCi0gICAgMTY4LCAyNDcsIDE3OCwgMTMsIDExMSwgNSwgMTM1LCAyNDcsIDE3OCwgMTMsIDExMSwgNSwgMTY4LCAyMjYsIDIxNCwgMjQ5LCAKLSAgICAxOTUsIDEzLCAxMTEsIDUsIDEzNSwgMjI2LCAyMTIsIDI0OSwgMTk1LCAxMywgMTExLCA1LCAyNDcsIDM3LCAyMjgsIDIwOSwgCi0gICAgMjQ5LCAxOTUsIDEzLCAxMTEsIDUsIDE2OCwgMjI2LCAyMTQsIDIyNSwgNTQsIDIxMSwgNTcsIDEzLCAxMTEsIDUsIDEzNSwgCi0gICAgMjI2LCAyMTIsIDIyNSwgNTQsIDIxMSwgNTcsIDEzLCAxMTEsIDUsIDE2OCwgMjQ4LCAxNywgMjU0LCA4MCwgMTMsIDExMSwgCi0gICAgNSwgMTY4LCAyMzIsIDc3LCAyNTQsIDgwLCAxMywgMTExLCA1LCA4NCwgMjU0LCA3MiwgMTY4LCAyMjgsIDIxMCwgMTMsIAotICAgIDExMSwgNSwgODQsIDI1NCwgNzIsIDE2OCwgMjMyLCA3NiwgMTMsIDIzMiwgMTcxLCA1LCA4NCwgMjU0LCA3MiwgMjI0LCA5MiwgCi0gICAgMjQ5LCAxODQsIDEzLCAyMzIsIDE3MSwgNSwgNjEsIDI1MSwgNjEsIDEzLCAyMzIsIDE3MSwgNSwgMjUwLCAxLCAyNTEsIDYxLCAKLSAgICAxMywgMjMyLCAxNzEsIDUsIDI1MCwgMSwgMjI2LCA3NCwgNDMsIDIzLCAxNCwgMjMyLCAxNzcsIDQzLCAyMywgMTQsIDI1MCwgCi0gICAgMTMyLCA0MywgMjMsIDE0LCAyMzMsIDExNywgNDMsIDIzLCAxNCwgMjMzLCAyNTIsIDI0OCwgNiwgNDMsIDIzLCAxNCwgMjMzLCAKLSAgICAyNTIsIDI0OSwgMjA1LCA0MywgMjMsIDE0LCAyMjUsIDU4LCAyNDgsIDYsIDQzLCAyMywgMTQsIDIyNSwgNTgsIDI0OSwgCi0gICAgMjA1LCA0MywgMjMsIDE0LCAyMzksIDE2LCA0MywgMjMsIDE0LCAyMjcsIDEyNSwgNDMsIDIzLCAxNCwgMjMzLCAxODYsIDQzLCAKLSAgICAyMywgMTQsIDIyMywgMTYzLCA0MywgMjMsIDE0LCAyMjMsIDE2NCwgMjQ5LCAyMDUsIDQzLCAyMywgMTQsIDIzOCwgMTEyLCAKLSAgICA0MywgMjMsIDE0LCAyNTQsIDE1NCwgMjQ4LCA2LCA0MywgMjMsIDE0LCAyNDcsIDE0NCwgMjQ4LCA2LCA0MywgMjMsIDE0LCAKLSAgICAyMjcsIDMwLCA0MywgMjMsIDE0LCAyMzgsIDIzOSwgNDMsIDIzLCAxNCwgMjU0LCAxNDUsIDQzLCAyMywgMTQsIDI1NCwgCi0gICAgMTQ2LCAyNDksIDIwNSwgNDMsIDIzLCAxNCwgMjI3LCAxMzAsIDQzLCAyMywgMTQsIDIyNiwgMjA0LCA0MywgMjMsIDE0LCAKLSAgICAyMzQsIDcxLCAyNTQsIDExOCwgNDMsIDIzLCAxNCwgMjQ2LCAwLCAyNTQsIDExOCwgNDMsIDIzLCAxNCwgMjMyLCAxNzYsIAotICAgIDQzLCAyMywgMTQsIDI1MSwgMTk4LCA0MywgMjMsIDE0LCAyMjUsIDQ4LCA0MywgMjMsIDE0LCAyMzksIDE5OSwgMjU0LCAKLSAgICAxMTgsIDQzLCAyMywgMTQsIDIzOCwgMjQxLCAyNTQsIDExOCwgNDMsIDIzLCAxNCwgMjM4LCAyNDAsIDI1NCwgMTE4LCA0MywgCi0gICAgMjMsIDE0LCAyMzAsIDIzNSwgNDMsIDIzLCAxNCwgMjMzLCAxNzcsIDQzLCAyMywgMTQsIDIyOCwgNTMsIDI1NCwgMTQ4LCAKLSAgICA0MywgMjMsIDE0LCAyMzMsIDI1MSwgMjU0LCAxMTgsIDQzLCAyMywgMTQsIDIyNSwgNTcsIDI1NCwgMTE4LCA0MywgMjMsIAotICAgIDE0LCAyNTQsIDE0OSwgMjU0LCAxMTgsIDQzLCAyMywgMTQsIDI1NCwgMTQzLCA0MywgMjMsIDE0LCAyMzgsIDE1OCwgNDMsIAotICAgIDIzLCAxNCwgMjMxLCAxOTAsIDQzLCAyMywgMTQsIDIzMywgNjcsIDI1NCwgMTE4LCA0MywgMjMsIDE0LCAyMjYsIDE1NSwgCi0gICAgNDMsIDIzLCAxNCwgMjU0LCAxODksIDQzLCAyMywgMTQsIDIzMCwgMTk0LCA0MywgMjMsIDE0LCAyMjcsIDEzMywgMjU0LCAKLSAgICAxMTgsIDQzLCAyMywgMTQsIDIyNywgMTMzLCAyMzYsIDIwMCwgMjI4LCA1MSwgNDMsIDIzLCAxNCwgMjMzLCAyNDYsIDI1NCwgCi0gICAgMTE4LCA0MywgMjMsIDE0LCAyMjYsIDIzNCwgNDMsIDIzLCAxNCwgMjM3LCAyMjIsIDQzLCAyMywgMTQsIDI0OCwgNzMsIDQzLCAKLSAgICAyMywgMTQsIDIyNiwgODAsIDQzLCAyMywgMTQsIDIyNywgMTIsIDQzLCAyMywgMTQsIDIzOCwgMTE1LCA0MywgMjMsIDE0LCAKLSAgICAyNTQsIDE1NCwgMjQ3LCAxNDQsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyNDYsIDIyMCwgMjU0LCAxMTgsIDQzLCAyMywgMTQsIAotICAgIDI0MCwgMjYsIDQzLCAyMywgMTQsIDIyNiwgNTYsIDI1NCwgMTE4LCA0MywgMjMsIDE0LCAyMzksIDE4LCAyMjYsIDU1LCA0MywgCi0gICAgMjMsIDE0LCAyMzMsIDEzNSwgNDMsIDIzLCAxNCwgMjMyLCAxODAsIDQzLCAyMywgMTQsIDIzOCwgMTQwLCA0MywgMjMsIDE0LCAKLSAgICAyNTEsIDE0NSwgMjU0LCAxMTgsIDQzLCAyMywgMTQsIDIzMiwgMCwgNDMsIDIzLCAxNCwgMjMzLCAxODksIDI1NCwgMTE4LCAKLSAgICA0MywgMjMsIDE0LCAyMzMsIDE4NywgMjU0LCAxMTgsIDQzLCAyMywgMTQsIDI0NCwgNjcsIDQzLCAyMywgMTQsIDIzNSwgCi0gICAgMjM2LCA0MywgMjMsIDE0LCAyMzMsIDEwMywgNDMsIDIzLCAxNCwgMjM4LCAxNDEsIDI1NCwgMjExLCA0MywgMjMsIDE0LCAKLSAgICAyMjYsIDU2LCAyNTQsIDIxMSwgNDMsIDIzLCAxNCwgMjI4LCAzNCwgNDMsIDIzLCAxNCwgMjQ1LCAyMjYsIDQzLCAyMywgMTQsIAotICAgIDIzOSwgMTk5LCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjM0LCA3MSwgMjM1LCAxNTIsIDQzLCAyMywgMTQsIDIzMywgMjUyLCAKLSAgICAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjMzLCAxMDIsIDQzLCAyMywgMTQsIDIzOCwgMTI4LCA0MywgMjMsIDE0LCAyMzMsIAotICAgIDEwMSwgNDMsIDIzLCAxNCwgMjM4LCAxMTQsIDQzLCAyMywgMTQsIDIzMywgMTM2LCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgCi0gICAgMjM4LCAyNDAsIDIzNSwgMTUzLCAyNTQsIDE3MiwgNDMsIDIzLCAxNCwgMjM4LCAyNDEsIDIzNSwgMTUzLCAyNTQsIDE3MiwgCi0gICAgNDMsIDIzLCAxNCwgMjIzLCAxNjEsIDQzLCAyMywgMTQsIDI1NCwgMTQ2LCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjU0LCAKLSAgICAxNDcsIDIyNywgMTMxLCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjIzLCAxNjIsIDQzLCAyMywgMTQsIDIzOCwgMTEzLCA0MywgCi0gICAgMjMsIDE0LCAyNDgsIDEsIDQzLCAyMywgMTQsIDI1MSwgMTk5LCA0MywgMjMsIDE0LCAyMzYsIDEzNCwgMjM5LCAxOTgsIDQzLCAKLSAgICAyMywgMTQsIDIyNSwgNTgsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyMzMsIDY3LCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgCi0gICAgMjMyLCAxODEsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyMzQsIDY4LCA0MywgMjMsIDE0LCAyNTQsIDE2NCwgNDMsIDIzLCAKLSAgICAxNCwgMjM3LCA3NywgNDMsIDIzLCAxNCwgMjMzLCAxODcsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyMzMsIDE4OSwgMjM1LCAKLSAgICAxNTIsIDQzLCAyMywgMTQsIDI0NywgMTY5LCAyMzMsIDE4OCwgNDMsIDIzLCAxNCwgMjM4LCA1MSwgNDMsIDIzLCAxNCwgCi0gICAgMjU0LCAxNjUsIDQzLCAyMywgMTQsIDIyNiwgNTYsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyNDgsIDQsIDQzLCAyMywgMTQsIAotICAgIDIyNywgMTMzLCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjI3LCAxMjYsIDQzLCAyMywgMTQsIDI1MSwgMTQ1LCAyMzUsIDE1MiwgCi0gICAgNDMsIDIzLCAxNCwgMjQ3LCAyMTAsIDQzLCAyMywgMTQsIDIzMCwgMTk1LCAyMzUsIDE1MiwgNDMsIDIzLCAxNCwgMjI0LCAKLSAgICA1OCwgMjM4LCAxNTgsIDQzLCAyMywgMTQsIDIyNiwgNTMsIDQzLCAyMywgMTQsIDIzMiwgMTgyLCA0MywgMjMsIDE0LCAyMjYsIAotICAgIDU3LCA0MywgMjMsIDE0LCAyMjYsIDU0LCA0MywgMjMsIDE0LCAyMzIsIDE3OSwgNDMsIDIzLCAxNCwgMjI2LCA1MiwgNDMsIAotICAgIDIzLCAxNCwgMjMyLCAxNzgsIDQzLCAyMywgMTQsIDI0NSwgMjU1LCA0MywgMjMsIDE0LCAyNTQsIDExMywgNDMsIDIzLCAxNCwgCi0gICAgMjQ3LCAxNjksIDI1NCwgMTEzLCA0MywgMjMsIDE0LCAyMzMsIDI0NiwgMjM1LCAxNTIsIDQzLCAyMywgMTQsIDIyNiwgMjMzLCAKLSAgICAyNDcsIDE3NywgNDMsIDIzLCAxNCwgMjI2LCAyMzMsIDI0NywgMTQzLCA0MywgMjMsIDE0LCAyMjYsIDIzNSwgMjU0LCAxNTAsIAotICAgIDQzLCAyMywgMTQsIDIyNiwgMjI4LCAyMzksIDU3LCAyNTQsIDE0MiwgNDMsIDIzLCAxNCwgMjM5LCAxNywgNDMsIDIzLCAxNCwgCi0gICAgMjQ3LCAyMjksIDQzLCAyMywgMTQsIDIyMywgMjA1LCAyMzksIDE1LCA0MywgMjMsIDE0LCAyMjMsIDIwNSwgMjU0LCAxNzIsIAotICAgIDQzLCAyMywgMTQsIDIyOCwgNTIsIDQzLCAyMywgMTQsIDIzOCwgMTU5LCAyNTQsIDE3MiwgNDMsIDIzLCAxNCwgMjQ5LCAKLSAgICAyMDYsIDI1NCwgMTE4LCA0MywgMjMsIDE0LCAyMzgsIDExNiwgMjU0LCAxMTgsIDQzLCAyMywgMTQsIDIzOCwgMTE2LCAyNTQsIAotICAgIDIxMSwgNDMsIDIzLCAxNCwgMjM4LCAxMTYsIDIzNSwgMTUyLCA0MywgMjMsIDE0LCAyNTQsIDE0OSwgMjM1LCAxNTIsIDQzLCAKLSAgICAyMywgMTQsIDI1NCwgMTUxLCA0MywgMjMsIDE0LCAyNDksIDIwNSwgNDMsIDIzLCAxNCwgMjI2LCA2NSwgNDMsIDIzLCAxNCwgCi0gICAgMjI3LCA0LCA0MywgMjMsIDE0LCAyMzgsIDEzMiwgNDMsIDIzLCAxNCwgMjM3LCAyMjUsIDI0NywgMjI1LCAyNTEsIDEzOCwgCi0gICAgNDMsIDIzLCAxNCwgMjM3LCAyMjUsIDI0OCwgNzQsIDI1MSwgMTM5LCA0MywgMjMsIDE0LCAyMzcsIDIyNSwgMjI2LCA2NywgCi0gICAgMjUxLCAxMzksIDQzLCAyMywgMTQsIDIzNywgMjI1LCAyMjcsIDE0LCAyNTEsIDEzOSwgNDMsIDIzLCAxNCwgMjM3LCAyMjUsIAotICAgIDI0MCwgMjEsIDI1MSwgMTM4LCA0MywgMjMsIDE0LCAyNDYsIDAsIDIzNSwgMTUzLCAyNTQsIDE3MiwgNDMsIDIzLCAxNCwgCi0gICAgMjQ2LCAwLCAyMzMsIDE3OCwgMjU0LCAxMDksIDQzLCAyMywgMTQsIDI0NiwgMCwgMjMzLCAxNzgsIDI1MCwgMjYsIDQzLCAKLSAgICAyMywgMTQsIDI0OSwgMjI4LCA0MywgMjMsIDE0LCAyNDksIDIyOSwgMjMzLCAxNzgsIDI1NCwgMTEwLCAyMzksIDE1LCA0MywgCi0gICAgMjMsIDE0LCAyNDksIDIyOSwgMjMzLCAxNzgsIDI1NCwgMTEwLCAyNTQsIDE3MiwgNDMsIDIzLCAxNCwgMjQ5LCAyMjksIAotICAgIDIzMywgMTc4LCAyNTAsIDI2LCA0MywgMjMsIDE0LCAyMjYsIDcxLCA0MywgMjMsIDE0LCAyNTQsIDExNCwgNDMsIDIzLCAxNCwgCi0gICAgMjQwLCAyOCwgNDMsIDIzLCAxNCwgMjQ5LCAyNDksIDQzLCAyMywgMTQsIDI1NSwgNCwgMjMyLCAyNDYsIDI1NCwgMTE1LCAKLSAgICA0MywgMjMsIDE0LCAyNTUsIDQsIDI1NCwgMTEyLCA0MywgMjMsIDE0LCAyNTUsIDQsIDI1NCwgMTE1LCA0MywgMjMsIDE0LCAKLSAgICAyNTUsIDQsIDIzNiwgMTk1LCA0MywgMjMsIDE0LCAyNTUsIDQsIDIzNiwgMjAzLCA0MywgMjMsIDE0LCAyNTUsIDQsIDI0NiwgCi0gICAgMSwgNDMsIDIzLCAxNCwgMjU1LCA0LCAyNDUsIDI1NCwgNDMsIDIzLCAxNCwgMjU1LCA0LCAyMzIsIDI0NiwgMjQ2LCAxLCAKLSAgICA0MywgMjMsIDE0LCAyMzcsIDEwLCAyMzIsIDE4NywgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjU0LCAyMTMsIAotICAgIDIzMiwgMTg3LCAyNDQsIDY1LCA0MywgMjMsIDE0LCAyMzcsIDEwLCAyNTAsIDI1LCAyNDQsIDY1LCA0MywgMjMsIDE0LCAKLSAgICAyMzcsIDEwLCAyNTQsIDIxMywgMjUwLCAyNSwgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjI2LCA2MCwgMjQ0LCAKLSAgICA2NSwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjI2LCA3MiwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjI3LCA4LCAyNDQsIDY1LCAKLSAgICA0MywgMjMsIDE0LCAyMzcsIDEwLCAyMjcsIDgsIDIzNywgMjI4LCAyNDQsIDY1LCA0MywgMjMsIDE0LCAyMzcsIDEwLCAyMzcsIAotICAgIDIyOCwgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjMzLCAyMiwgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjM5LCAKLSAgICAyMDMsIDIyNywgMjYsIDI0NCwgNjYsIDQzLCAyMywgMTQsIDI1NCwgMTQ3LCAyMjcsIDI2LCAyNDQsIDY2LCA0MywgMjMsIAotICAgIDE0LCAyNDcsIDExMCwgMjI3LCA1LCA0MywgMjMsIDE0LCAyNDcsIDExMCwgMjM2LCA5MywgNDMsIDIzLCAxNCwgMjQ3LCAKLSAgICAxMTAsIDI0OSwgMjMzLCA0MywgMjMsIDE0LCAyMzcsIDEwLCAyMjUsIDUyLCAyNDQsIDY1LCA0MywgMjMsIDE0LCAyMzcsIAotICAgIDEwLCAyMzIsIDE4NiwgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjM3LCAxMCwgMjMzLCAyMiwgMjI3LCA4LCAyNDQsIDY1LCA0MywgCi0gICAgMjMsIDE0LCAyNDUsIDI1MiwgMjM2LCA1LCAyNTQsIDE1MCwgNDMsIDIzLCAxNCwgMjQ1LCAyNTIsIDIzNiwgNSwgMjQ5LCAKLSAgICAyMDQsIDQzLCAyMywgMTQsIDI0NywgMjM3LCAyMzksIDU3LCAyNDYsIDIyMCwgMjI0LCAxOTUsIDQzLCAyMywgMTQsIDI0MCwgCi0gICAgMjcsIDQzLCAyMywgMTQsIDI0MCwgMjUsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyNTQsIDExOSwgMjUwLCAyNCwgMjQ0LCAKLSAgICA2NCwgNDMsIDIzLCAxNCwgMjQ2LCAyMjAsIDI0OSwgMjQ3LCAyMTMsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyNDksIDI0NywgCi0gICAgMjM1LCAyMzYsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyMzUsIDIzMiwgMjQ0LCA2NSwgNDMsIDIzLCAxNCwgMjQ2LCAyMjAsIAotICAgIDI0OSwgMjQ3LCAyNTAsIDQsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyMjgsIDIwMCwgMjQ5LCAyNDYsIDI1MCwgNCwgNDMsIAotICAgIDIzLCAxNCwgMjQ2LCAyMjAsIDI0OSwgMjQ3LCAyMzksIDMsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyNDksIDI0NywgMjIzLCAKLSAgICAyNywgNDMsIDIzLCAxNCwgMjQ2LCAyMjAsIDI0OSwgMjQ3LCAyMzUsIDkwLCAyMzksIDE1LCA0MywgMjMsIDE0LCAyNDYsIAotICAgIDIyMCwgMjQ5LCAyNDcsIDIzNSwgOTAsIDI1NCwgMTcyLCA0MywgMjMsIDE0LCAyNDYsIDIyMCwgMjM3LCA0MCwgMjUxLCAKLSAgICAxNDAsIDI0OSwgMjMzLCA0MywgMjMsIDE0LCAyNDYsIDIyMCwgMjM3LCA0MCwgMjUxLCAxNDAsIDIzNiwgOTMsIDQzLCAyMywgCi0gICAgMTQsIDI0NywgNzEsIDIyOCwgMjAwLCAyNTEsIDE0MCwgMjI1LCA1MSwgNDMsIDIzLCAxNCwgMjQ2LCAyMjAsIDIyOCwgMjAwLCAKLSAgICAyNTEsIDE0MCwgMjI3LCAxMzQsIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyMzUsIDE1NCwgNDMsIDIzLCAxNCwgMjUxLCAxNDEsIAotICAgIDIyMywgMywgNDMsIDIzLCAxNCwgMjUxLCAxNDEsIDIzOCwgMTU3LCA0MywgMjMsIDE0LCAyNTEsIDE0MSwgMjI4LCAxNDEsIAotICAgIDQzLCAyMywgMTQsIDI0NiwgMjIwLCAyNDQsIDgxLCAyMjMsIDIwNCwgMjI3LCA5LCA0MywgMjMsIDE0LCAyNDYsIDIyMCwgCi0gICAgMjQ3LCAyMzgsIDI1NCwgMTY2LCA0MywgMjMsIDE0LCAyMjMsIDIwNCwgMjI2LCA2MSwgNDMsIDIzLCAxNCwgMjQ5LCAyNDEsIAotICAgIDIyNiwgNjEsIDQzLCAyMywgMTQsIDI0OSwgMjQxLCAyMjcsIDksIDQzLCAyMywgMTQsIDI0OSwgMjQxLCAyNTQsIDE1MiwgCi0gICAgMjQ4LCA3NCwgMjQ5LCAxNTUsIDQzLCAyMywgMTQsIDI0OSwgMjQxLCAyMzYsIDkxLCAyMjcsIDEzLCAyNDksIDE1NSwgNDMsIAotICAgIDIzLCAxNCwgMjQ5LCAyNDEsIDI0OSwgMjI1LCAyNDcsIDE1MywgMjQ5LCAxNTUsIDQzLCAyMywgMTQsIDI0OSwgMjQxLCAKLSAgICAyMjYsIDY5LCAyMzQsIDc1LCAyNDksIDE1NSwgNDMsIDIzLCAxNCwgMjIzLCAyMDQsIDI1NCwgMTUyLCAyNDgsIDc0LCAyNDksIAotICAgIDE1NSwgNDMsIDIzLCAxNCwgMjIzLCAyMDQsIDIzNiwgOTEsIDIyNywgMTMsIDI0OSwgMTU1LCA0MywgMjMsIDE0LCAyMjMsIAotICAgIDIwNCwgMjQ5LCAyMjUsIDI0NywgMTUzLCAyNDksIDE1NSwgNDMsIDIzLCAxNCwgMjIzLCAyMDQsIDIyNiwgNjksIDIzNCwgCi0gICAgNzUsIDI0OSwgMTU1LCA0MywgMjMsIDE0LCAyNDYsIDEyMCwgMjQ5LCAyNDAsIDQzLCAyMywgMTQsIDI0NiwgMTIwLCAyMjMsIAotICAgIDIwMywgNDMsIDIzLCAxNCwgMjQ5LCAyNDgsIDI1NCwgMTUyLCAyMzYsIDEzNSwgNDMsIDIzLCAxNCwgMjQ5LCAyNDgsIDI1NCwgCi0gICAgMTUyLCAyMzYsIDIyMCwgNDMsIDIzLCAxNCwgMjQ5LCAyNDgsIDI0OSwgMjA1LCA0MywgMjMsIDE0LCAyNDksIDI0OCwgMjI2LCAKLSAgICAyMjYsIDQzLCAyMywgMTQsIDIyOCwgMjQ4LCAyMjYsIDIyNiwgNDMsIDIzLCAxNCwgMjI4LCAyNDgsIDIyNiwgMjI3LCAyNDksIAotICAgIDE5NCwgNDMsIDIzLCAxNCwgMjI4LCAyNDgsIDIyNiwgMjI3LCAyMjYsIDYyLCA0MywgMjMsIDE0LCAyMjgsIDI0OCwgMjI2LCAKLSAgICAyMjcsIDIyNywgMiwgNDMsIDIzLCAxNCwgMjI4LCAyNDgsIDI1NCwgOTAsIDQzLCAyMywgMTQsIDIyOCwgMjQ4LCAyNTQsIAotICAgIDkxLCAyNDksIDE5NCwgNDMsIDIzLCAxNCwgMjI4LCAyNDgsIDI1NCwgOTEsIDIyNiwgNjIsIDQzLCAyMywgMTQsIDIyOCwgCi0gICAgMjQ4LCAyNTQsIDkxLCAyMjcsIDIsIDQzLCAyMywgMTQsIDI0OSwgMjI2LCAyNDYsIDEwMiwgNDMsIDIzLCAxNCwgMjQ5LCAKLSAgICAyMzIsIDIzNCwgMTMsIDQzLCAyMywgMTQsIDIyOCwgNDYsIDQzLCAyMywgMTQsIDI1NCwgMTA3LCAyMTMsIDQzLCAyMywgMTQsIAotICAgIDI1NCwgMTA3LCAyMjQsIDE5NSwgNDMsIDIzLCAxNCwgMjU0LCAxMDcsIDI0NiwgMTkzLCA0MywgMjMsIDE0LCAyNTQsIDEwNywgCi0gICAgMjUwLCA0LCA0MywgMjMsIDE0LCAyNTQsIDEwNywgMjM5LCAzLCA0MywgMjMsIDE0LCAyNTQsIDEwNywgMjIzLCAyNywgNDMsIAotICAgIDIzLCAxNCwgMjU0LCAxMDcsIDIzNSwgODksIDQzLCAyMywgMTQsIDIzOCwgMjQwLCAyMzUsIDE1MywgMjM2LCAyMDIsIDQzLCAKLSAgICAyMywgMTQsIDIzOCwgMjQxLCAyMzUsIDE1MywgMjM2LCAyMDIsIDQzLCAyMywgMTQsIDIzOCwgMjQwLCAyMzUsIDE1MywgCi0gICAgMjM5LCAxNSwgNDMsIDIzLCAxNCwgMjM4LCAyNDEsIDIzNSwgMTUzLCAyMzksIDE1LCA0MywgMjMsIDE0LCAyMzgsIDE1OSwgCi0gICAgMjM5LCAxNSwgNDMsIDIzLCAxNCwgMjQ2LCAwLCAyMzUsIDE1MywgMjM5LCAxNSwgMjMsIDE0LCAyMjgsIDI0MSwgMjUzLCAKLSAgICAzMiwgMjMsIDE0LCA0NywgMjUzLCAzMiwgMjMsIDE0LCAzNSwgMjUzLCAzMiwgMjMsIDE0LCAyMzEsIDE5MywgMzUsIDI1MywgCi0gICAgMzIsIDIzLCAxNCwgMjUwLCAxMjksIDI1MywgMzIsIDIzLCAxNCwgMjI5LCA2MywgMjUzLCAzMiwgMjMsIDE0LCA0MiwgMjMxLCAKLSAgICAyMTIsIDUzLCAyMywgMTQsIDQxLCAyMzEsIDIxMiwgNTMsIDIzLCAxNCwgMjMxLCAyMTIsIDI0OSwgMTM4LCAyMywgMTQsIAotICAgIDI1MCwgMTY2LCAyMzAsIDE5OCwgMjMsIDE0LCAyNTAsIDE5MCwgMjUyLCAxNCwgMjMsIDE0LCAyMzAsIDE5OCwgMjMsIDE0LCAKLSAgICAyNTEsIDY2LCAyMywgMTQsIDIzMSwgMjEwLCAyNDcsIDYwLCAyMywgMTQsIDIzMSwgMjEwLCAyNDcsIDU5LCAyMywgMTQsIAotICAgIDIzMSwgMjEwLCAyNDcsIDU4LCAyMywgMTQsIDI0NywgNzYsIDIzLCAxNCwgMjQ3LCA3NywgNTEsIDIzLCAxNCwgMjUyLCAKLSAgICAxMDgsIDc2LCAyMywgMTQsIDI1MiwgMzQsIDIzLCAxNCwgMjUyLCAxMTYsIDIzLCAxNCwgMTA0LCAyMywgMTQsIDIzNCwgNjAsIAotICAgIDIyOCwgNjUsIDIzLCAxNCwgMjI1LCAyMDIsIDIyOCwgNjUsIDIzLCAxNCwgMjI2LCAxOTAsIDIyOCwgNjUsIDIzLCAxNCwgCi0gICAgMjQ2LCAyNDIsIDIyOCwgNjUsIDIzLCAxNCwgMjQ3LCAzNiwgMjI4LCA2NSwgMjMsIDE0LCAyMjgsIDIxNiwgMjI4LCA2NSwgCi0gICAgMjMsIDE0LCAyMjgsIDIxNCwgMjQ2LCAyMjgsIDIzLCAxNCwgMjQ2LCAyNDAsIDI0NiwgMjI4LCAyMywgMTQsIDI0NiwgMTk2LCAKLSAgICAyNTEsIDkyLCAyMywgMTQsIDI0NiwgMTk2LCAyNTEsIDkzLCAyMzQsIDE1LCAyNTQsIDIwNCwgMjMsIDE0LCAyNDYsIDE5NiwgCi0gICAgMjUxLCA5MywgMjM0LCAxNSwgMjUzLCAyMiwgMjMsIDE0LCAyNTIsIDQ1LCAyNTEsIDkyLCAyMywgMTQsIDI0NywgMTMxLCAKLSAgICAyNTEsIDkyLCAyMywgMTQsIDI0NywgMTMxLCAyNTEsIDkzLCAyMzQsIDE1LCAyNTQsIDIwNCwgMjMsIDE0LCAyNDcsIDEzMSwgCi0gICAgMjUxLCA5MywgMjM0LCAxNSwgMjUzLCAyMiwgMjMsIDE0LCAyNDgsIDExMiwgMjUxLCA5MSwgMjMsIDE0LCAyNDgsIDExMiwgCi0gICAgMjUxLCA5MCwgMjMsIDE0LCAyMzYsIDUzLCAyMzYsIDIzNCwgMjMxLCAxOTksIDIzLCAxNCwgNDcsIDIyOSwgMTIzLCAyMywgCi0gICAgMTQsIDQ3LCAyNDcsIDI0LCAyMywgMTQsIDI0NywgMjUsIDIyNSwgMTE2LCAyMywgMTQsIDI0NywgMjUsIDI0OCwgMTI3LCAKLSAgICAyMywgMTQsIDIzNSwgMjI0LCAyMjUsIDExNiwgMjMsIDE0LCAyMzUsIDIyNCwgMjQ4LCAxMjcsIDIzLCAxNCwgMjI5LCAxMjQsIAotICAgIDIyNSwgMTE2LCAyMywgMTQsIDIyOSwgMTI0LCAyNDgsIDEyNywgMjMsIDE0LCAyMzIsIDc3LCAyMDYsIDIyOSwgMTIzLCAyMywgCi0gICAgMTQsIDIzMiwgNzcsIDIwNiwgMjQ3LCAyNCwgMjMsIDE0LCAyNTEsIDUyLCAyMjYsIDE1NywgMjMsIDE0LCAyNTAsIDIxMywgCi0gICAgMjI2LCAxNTcsIDIzLCAxNCwgMjM0LCAxNSwgMjU0LCAyMDQsIDIzLCAxNCwgMjM0LCAxNSwgMjUzLCAyMiwgMjMsIDE0LCAKLSAgICAyMzIsIDYyLCAyNTQsIDIwNCwgMjMsIDE0LCAyMzIsIDYyLCAyNTMsIDIyLCAyMywgMTQsIDIzNiwgNTYsIDIzMSwgMTk5LCAKLSAgICAyMywgMTQsIDIyNCwgMTE5LCAyMzEsIDE5OSwgMjMsIDE0LCAxMzIsIDIzMSwgMTk5LCAyMywgMTQsIDIzMiwgNzcsIDIzMSwgCi0gICAgMTk5LCAyMywgMTQsIDI0OCwgMTcsIDIzMSwgMTk5LCAyMywgMTQsIDIyOCwgMjExLCAyMzEsIDE5OSwgMjMsIDE0LCAyMjYsIAotICAgIDIwNSwgMjMxLCAxOTksIDIzLCAxNCwgMjI4LCAyMDUsIDIzMSwgMTk5LCAyMywgMTQsIDE2OCwgMjQ0LCAxMzYsIDIyNSwgCi0gICAgMjE0LCAyMzEsIDE5OSwgMjMsIDE0LCAyMjQsIDc0LCAyMzQsIDIzNiwgMjMsIDE0LCA3OSwgMjM0LCAyMzYsIDIzLCAxNCwgCi0gICAgMjUxLCAxMDcsIDIyNCwgNzQsIDIzNCwgMjM2LCAyMywgMTQsIDM3LCAyMzQsIDIzNywgMjI0LCAxMjEsIDIzLCAxNCwgMzcsIAotICAgIDIzNCwgMjM3LCAyNTIsIDE1MCwgMjMsIDE0LCAyMjYsIDc5LCAyMzQsIDIzNywgOTksIDIyNCwgMTIxLCAyMywgMTQsIDIyNiwgCi0gICAgNzksIDIzNCwgMjM3LCA5OSwgMjUyLCAxNTAsIDIzLCAxNCwgMjI2LCA3OSwgMjM0LCAyMzcsIDQyLCAyMjQsIDEyMSwgMjMsIAotICAgIDE0LCAyMjYsIDc5LCAyMzQsIDIzNywgNDIsIDI1MiwgMTUwLCAyMywgMTQsIDIyNiwgNzksIDIzNCwgMjM3LCA0MSwgMjI0LCAKLSAgICAxMjEsIDIzLCAxNCwgMjI2LCA3OSwgMjM0LCAyMzcsIDQxLCAyNTIsIDE1MCwgMjMsIDE0LCAyMjYsIDc5LCAyMzQsIDIzNywgCi0gICAgMTAzLCAyMjQsIDEyMSwgMjMsIDE0LCAyMjYsIDc5LCAyMzQsIDIzNywgMTAzLCAyNTIsIDE1MCwgMjMsIDE0LCAyMjYsIDc5LCAKLSAgICAyMzQsIDIzNywgOTksIDQxLCAyMjQsIDEyMSwgMjMsIDE0LCAyMjYsIDc5LCAyMzQsIDIzNywgOTksIDQxLCAyNTIsIDE1MCwgCi0gICAgMjMsIDE0LCAyMzYsIDg1LCAyMzQsIDIzNywgMjI0LCAxMjEsIDIzLCAxNCwgMjM2LCA4NSwgMjM0LCAyMzcsIDI1MiwgMTUwLCAKLSAgICAyMywgMTQsIDIyNiwgNzYsIDIzNCwgMjM3LCAxMDMsIDIyNCwgMTIxLCAyMywgMTQsIDIyNiwgNzYsIDIzNCwgMjM3LCAxMDMsIAotICAgIDI1MiwgMTUwLCAyMywgMTQsIDIzMywgMTgxLCAyMzQsIDIzNiwgMjMsIDE0LCAyMjQsIDIwMSwgMjM0LCAyMzYsIDIzLCAxNCwgCi0gICAgMjM0LCAyMzcsIDI1MiwgMTUwLCAyMywgMTQsIDIzNCwgMjAxLCAyMzQsIDIzNiwgMjMsIDE0LCAyNTEsIDcxLCAyMzQsIAotICAgIDIzNywgMjI0LCAxMjEsIDIzLCAxNCwgMjUxLCA3MSwgMjM0LCAyMzcsIDI1MiwgMTUwLCAyMywgMTQsIDI1MiwgMTA2LCAyMywgCi0gICAgMTQsIDIyNCwgMTE5LCAyMzQsIDIzOCwgMjMsIDE0LCAxMzIsIDIzNCwgMjM4LCAyMywgMTQsIDIzMiwgNzcsIDIzNCwgMjM4LCAKLSAgICAyMywgMTQsIDI0OCwgMTcsIDIzNCwgMjM4LCAyMywgMTQsIDIyOCwgMjExLCAyMzQsIDIzOCwgMjMsIDE0LCAyMjYsIDIwNSwgCi0gICAgMjM0LCAyMzgsIDIzLCAxNCwgMjI4LCAyMDUsIDIzNCwgMjM4LCAyMywgMTQsIDE2OCwgMjQ0LCAxMzYsIDIyNSwgMjE0LCAKLSAgICAyMzQsIDIzOCwgMjMsIDE0LCAzNiwgMjI4LCA0OCwgMjMsIDE0LCAzNiwgMjI4LCAxMjYsIDIyOCwgNDgsIDIzLCAxNCwgMzYsIAotICAgIDIyNiwgODUsIDIzLCAxNCwgMzYsIDIyNiwgODQsIDIzLCAxNCwgMzYsIDIyNiwgODMsIDIzLCAxNCwgMjQ3LCA1MCwgMjI2LCAKLSAgICA4NSwgMjMsIDE0LCAyNDcsIDUwLCAyMjYsIDg0LCAyMywgMTQsIDI0NywgNTAsIDIyNiwgODMsIDIzLCAxNCwgMzYsIDI1NCwgCi0gICAgNTEsIDI0OSwgMTQwLCAyMywgMTQsIDM2LCAyNDcsIDMwLCAyMywgMTQsIDM2LCAyNDcsIDI5LCAyMywgMTQsIDM2LCAyNDcsIAotICAgIDI4LCAyMywgMTQsIDM2LCAyNDcsIDI3LCAyMywgMTQsIDM2LCAyNDcsIDI2LCAyMywgMTQsIDI1MiwgMjI2LCAyNTIsIDIzNywgCi0gICAgMjMsIDE0LCAyNDcsIDIzMywgMjUyLCAyMzcsIDIzLCAxNCwgMjUyLCAyMjYsIDIyNiwgMTcwLCAyMywgMTQsIDI0NywgMjMzLCAKLSAgICAyMjYsIDE3MCwgMjMsIDE0LCAyNTIsIDIyNiwgMjI4LCAxODUsIDIzLCAxNCwgMjQ3LCAyMzMsIDIyOCwgMTg1LCAyMywgMTQsIAotICAgIDI1MiwgMjI2LCAyMzMsIDc2LCAyMywgMTQsIDI0NywgMjMzLCAyMzMsIDc2LCAyMywgMTQsIDM2LCAyNTUsIDQxLCAyMywgCi0gICAgMTQsIDM2LCAyMjgsIDY3LCAyMywgMTQsIDM2LCAyMjcsIDE4LCAyMywgMTQsIDM2LCAyMjgsIDY4LCAyMywgMTQsIDM2LCAKLSAgICAyMzcsIDIxLCAyMywgMTQsIDM2LCAyMzcsIDIwLCAyMywgMTQsIDM2LCAyNTUsIDQwLCAyMywgMTQsIDM2LCAyMzcsIDExOCwgCi0gICAgMjMsIDE0LCAyNTQsIDk4LCAyMjUsIDExNiwgMjMsIDE0LCAyNTQsIDk4LCAyNDgsIDEyNywgMjMsIDE0LCAzNiwgMjQ5LCAKLSAgICAxNTIsIDIzLCAxNCwgMzYsIDIzMSwgMTM4LCAyMywgMTQsIDM2LCAyNDcsIDE4LCAyMywgMTQsIDM2LCAyMjgsIDE4MSwgMjMsIAotICAgIDE0LCAzNiwgMjUyLCAyMDksIDIzLCAxNCwgMzYsIDQ3LCAyMjYsIDExMCwgMjMsIDE0LCAzNiwgMjI2LCA2NiwgMjI2LCAKLSAgICAxMTAsIDIzLCAxNCwgMjMxLCAxNDEsIDIzLCAxNCwgMjI4LCAyLCAyMywgMTQsIDIyMywgMTE5LCAyMywgMTQsIDIzMywgNjgsIAotICAgIDIzLCAxNCwgMjM2LCAxOTIsIDIzLCAxNCwgMjQ2LCAyNDcsIDIzLCAxNCwgMjUwLCAyNDksIDIzLCAxNCwgMjUwLCA2OCwgCi0gICAgMjMsIDE0LCAyNDUsIDI0NywgMjM0LCAyMzksIDIyOCwgMTk0LCAyMywgMTQsIDI0NSwgMjQ3LCAyMzQsIDIzOSwgMjM1LCA3LCAKLSAgICAyMjgsIDE5NCwgMjMsIDE0LCAyMjYsIDk2LCAyMywgMTQsIDIyNSwgMjMzLCAyMywgMTQsIDIzOSwgMjIzLCAyMjUsIDIzMywgCi0gICAgMjMsIDE0LCAyMjUsIDIzNCwgMjI4LCAxOTQsIDIzLCAxNCwgMjI1LCAyMzQsIDIyNSwgMTE2LCAyMywgMTQsIDIzNCwgMjYsIAotICAgIDIyOCwgMjIsIDIzLCAxNCwgMjM0LCAyNiwgMjI4LCAxOSwgMjMsIDE0LCAyMzQsIDI2LCAyMjgsIDE4LCAyMywgMTQsIDIzNCwgCi0gICAgMjYsIDIyOCwgMTcsIDIzLCAxNCwgMjM0LCAyNiwgMjI4LCAxNiwgMjMsIDE0LCAyMzQsIDI2LCAyMjgsIDE1LCAyMywgMTQsIAotICAgIDIzNCwgMjYsIDIyOCwgMTQsIDIzLCAxNCwgMjM0LCAyNiwgMjI4LCAxMywgMjMsIDE0LCAyMzQsIDI2LCAyMjgsIDEyLCAyMywgCi0gICAgMTQsIDIzNCwgMjYsIDIyOCwgMjEsIDIzLCAxNCwgMjM0LCAyNiwgMjI4LCAyMCwgMjMsIDE0LCAyNDUsIDEyOCwgMjMsIDE0LCAKLSAgICAyMzUsIDE2MSwgMjMsIDE0LCAyNDcsIDIzMywgMTA2LCAyMjgsIDQyLCAyMywgMTQsIDI1MCwgNjIsIDIyOCwgMTk0LCAyMywgCi0gICAgMTQsIDM2LCAxMDMsIDI1MiwgMTIxLCAyMywgMTQsIDM2LCA5OSwgMjUyLCAxMjEsIDIzLCAxNCwgMzYsIDI0NSwgMTM3LCAKLSAgICAyMywgMTQsIDM2LCAyMjgsIDE3NSwgMjMzLCAyNSwgMjMsIDE0LCAyMzMsIDE0OCwgNzYsIDIzLCAxNCwgMjMzLCAxNDgsIAotICAgIDk5LCA3NiwgMjMsIDE0LCAxMzIsIDIzMywgMTQ4LCA3NiwgMjMsIDE0LCAyNDYsIDE3LCAyMjUsIDExNiwgMjMsIDE0LCAKLSAgICAyNDYsIDE3LCAyNDgsIDEyNywgMjMsIDE0LCAyLCAyNDcsIDQ5LCAyMywgMTQsIDI1MCwgMTUyLCAyMywgMTQsIDI1MCwgCi0gICAgMTUzLCAyNTQsIDIxNiwgMjMsIDE0LCAyMzYsIDI1MywgMjMsIDE0LCAyMzcsIDEyNiwgMjMsIDE0LCAyNTIsIDEwMywgMjMsIAotICAgIDE0LCAyMjksIDE5MCwgMjI0LCAxMjEsIDIzLCAxNCwgMjI5LCAxOTAsIDI1MiwgMTUwLCAyMywgMTQsIDIzNiwgMTIzLCAyMywgCi0gICAgMTQsIDIzNiwgMTI0LCAyNTIsIDE1MCwgMjMsIDE0LCAyMjksIDE4NCwgMjI0LCAxMjEsIDIzLCAxNCwgMjI5LCAxODQsIAotICAgIDI1MiwgMTUwLCAyMywgMTQsIDI0NiwgMjEwLCAyMjQsIDEyMSwgMjMsIDE0LCAyNDYsIDIxMCwgMjUyLCAxNTAsIDIzLCAxNCwgCi0gICAgMjM3LCAxMjcsIDIzMywgMTIxLCAyMzEsIDE5OSwgMjMsIDE0LCAyMzcsIDEyNywgMjQwLCAyMCwgMjMxLCAxOTksIDIzLCAKLSAgICAxNCwgMjUyLCAxMDQsIDIzMSwgMTk5LCAyMywgMTQsIDIyOSwgMTkwLCAyMzEsIDE5OSwgMjMsIDE0LCAyMzYsIDEyNCwgCi0gICAgMjMxLCAxOTksIDIzLCAxNCwgMjI5LCAxODQsIDIzMSwgMTk5LCAyMywgMTQsIDIyNywgMjUsIDIzMywgMTE5LCAyNTAsIAotICAgIDIzMCwgMjMyLCAxOTUsIDIzMywgMTIwLCAyMywgMTQsIDIyNywgMjUsIDIzMywgMTE5LCAyNTAsIDIzMCwgMjMyLCAxOTUsIAotICAgIDI0MCwgMTksIDIzLCAxNCwgMjI3LCAyNSwgMjMzLCAxMTksIDI1MCwgMjMwLCAyMzIsIDE5NSwgMjMzLCAxMjEsIDI0OSwgCi0gICAgMjE1LCAyMywgMTQsIDIyNywgMjUsIDI0MCwgMTgsIDI1MCwgMjMwLCAyMzIsIDE5NSwgMjMzLCAxMjAsIDIzLCAxNCwgMjI3LCAKLSAgICAyNSwgMjQwLCAxOCwgMjUwLCAyMzAsIDIzMiwgMTk1LCAyNDAsIDE5LCAyMywgMTQsIDIyNywgMjUsIDI0MCwgMTgsIDI1MCwgCi0gICAgMjMwLCAyMzIsIDE5NSwgMjQwLCAyMCwgMjQ5LCAyMTUsIDIzLCAxNCwgMjI3LCAyNSwgMjQwLCAxOCwgMjUwLCAyMzAsIAotICAgIDIzMiwgMTk1LCAyNDAsIDIwLCAyNDksIDIxNCwgMjMsIDE0LCAyMjcsIDI1LCAyNDAsIDE4LCAyNTAsIDIzMCwgMjMyLCAKLSAgICAxOTUsIDI0MCwgMjAsIDI0OSwgMjEzLCAyMywgMTQsIDI1MCwgMjQ2LCAyMywgMTQsIDI0NSwgMjI3LCAyNTIsIDQ1LCAyNTEsIAotICAgIDkyLCAyMywgMTQsIDI0NSwgMjI3LCAyNDcsIDEzMSwgMjUxLCA5MiwgMjMsIDE0LCAzNywgMjU0LCAyNywgMjMsIDE0LCAKLSAgICAyMjQsIDIxNSwgMjMsIDE0LCAyMzMsIDIsIDIzLCAxNCwgMjUxLCA4NSwgMjMsIDE0LCAyMzAsIDIyNiwgMjMsIDE0LCAyNTEsIAotICAgIDg3LCAyMywgMTQsIDIyNiwgMTAxLCAyMywgMTQsIDIzMiwgMjQwLCAyMywgMTQsIDIzMiwgMjQxLCAyNDcsIDIwLCAyMywgCi0gICAgMTQsIDIzMCwgMjI3LCAyNDcsIDIwLCAyMywgMTQsIDIyNiwgMTAyLCAyMzEsIDE5OCwgMjMsIDE0LCAyMzMsIDEwOSwgMjI3LCAKLSAgICAyNTQsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDE4MiwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTcxLCAxOSwgMjI0LCAKLSAgICAyMDUsIDE1MCwgMjI3LCAxNjEsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDE1NCwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgCi0gICAgMTQ2LCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxNDAsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDEzOSwgMTksIDIyNCwgCi0gICAgMjA1LCAxNTAsIDIyNywgMTM4LCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxMzcsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIAotICAgIDE4MSwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTgwLCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxNzksIDE5LCAyMjQsIAotICAgIDIwNSwgMTUwLCAyMjcsIDE3OCwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTc3LCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAKLSAgICAxNzYsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDE3NSwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTc0LCAxOSwgMjI0LCAKLSAgICAyMDUsIDE1MCwgMjI3LCAxNzMsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDE3MiwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgCi0gICAgMTcwLCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxNjksIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIDE2OCwgMTksIDIyNCwgCi0gICAgMjA1LCAxNTAsIDIyNywgMTY3LCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxNjYsIDE5LCAyMjQsIDIwNSwgMTUwLCAyMjcsIAotICAgIDE0NSwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTQ0LCAxOSwgMjI0LCAyMDUsIDE1MCwgMjI3LCAxNDMsIDE5LCAyMjQsIAotICAgIDIwNSwgMTUwLCAyMjcsIDE0MiwgMTksIDIyNCwgMjA1LCAxNTAsIDIyNywgMTQxLCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAKLSAgICAxODIsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE3MSwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTU0LCAxOSwgMjM5LCAKLSAgICAyNDIsIDE1MCwgMjI3LCAxNDYsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDEzOSwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgCi0gICAgMTM4LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxODAsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE3OSwgMTksIDIzOSwgCi0gICAgMjQyLCAxNTAsIDIyNywgMTc4LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNzcsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIAotICAgIDE3NCwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTczLCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNzIsIDE5LCAyMzksIAotICAgIDI0MiwgMTUwLCAyMjcsIDE2NywgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTY2LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAKLSAgICAxNjUsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE2NCwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTYzLCAxOSwgMjM5LCAKLSAgICAyNDIsIDE1MCwgMjI3LCAxNjIsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE2MCwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgCi0gICAgMTU5LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNTgsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE1NywgMTksIDIzOSwgCi0gICAgMjQyLCAxNTAsIDIyNywgMTU2LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNTUsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIAotICAgIDE1MywgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTUyLCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNTEsIDE5LCAyMzksIAotICAgIDI0MiwgMTUwLCAyMjcsIDE1MCwgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTQ5LCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAKLSAgICAxNDgsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE0NywgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgMTQ1LCAxOSwgMjM5LCAKLSAgICAyNDIsIDE1MCwgMjI3LCAxNDQsIDE5LCAyMzksIDI0MiwgMTUwLCAyMjcsIDE0MywgMTksIDIzOSwgMjQyLCAxNTAsIDIyNywgCi0gICAgMTQyLCAxOSwgMjM5LCAyNDIsIDE1MCwgMjI3LCAxNDEsIDM2LCAxOSwgMjMsIDIyNiwgNjMsIDM2LCAxOSwgMjMsIDIyNywgCi0gICAgMywgMzYsIDE5LCAyMywgMjMzLCAxMjgsIDE5LCAyMywgMjM3LCAyMjQsIDIzNiwgOTIsIDMyLCAyNDgsIDQ4LCAyNDksIAotICAgIDIyNywgMzIsIDI0NSwgMTExLCAyNDgsIDQ4LCAyNDksIDIyNywgMzIsIDI0NCwgMTM5LCAyNDgsIDQ4LCAyNDksIDIyNywgCi0gICAgMzIsIDI0OCwgNDcsIDI0NSwgMTEyLCAyNDksIDIyNywgMzIsIDI0OCwgNDcsIDI0NCwgMTM4LCAyNDksIDIyNywgMzIsIAotICAgIDI0OCwgNDgsIDE0MiwgMzIsIDI1MSwgMjE4LCAxNDIsIDMyLCAyNDYsIDIxOCwgMjUxLCAxMDYsIDE0MiwgMzIsIDIzNiwgCi0gICAgMTE2LCAxNDIsIDMyLCAyNTMsIDI3LCAxNDIsIDMyLCAyMzksIDAsIDIyOCwgMTg0LCAxNDIsIDMyLCAyNTEsIDE5LCAxNDIsIAotICAgIDMyLCAyNTQsIDgyLCAxNDIsIDMyLCAyMzQsIDM0LCAxNDIsIDMyLCAyNTIsIDExMSwgMjM0LCAxMCwgMTQyLCAzMiwgMjUwLCAKLSAgICA2NCwgMTQ1LCAyNDksIDE5MSwgMTQyLCAzMiwgMjQ5LCAxODgsIDE0MiwgMzIsIDIyMywgMTY3LCAxNDIsIDMyLCAyNDAsIAotICAgIDEyLCAxNDIsIDMyLCAyMzMsIDEzMywgMTQyLCAzMiwgMjMxLCAyNDMsIDE0MiwgMzIsIDI1MSwgMjksIDE0MiwgMzIsIDI0NCwgCi0gICAgMjIyLCAyNTMsIDY2LCAxNDIsIDMyLCAyMjQsIDE2OCwgMTQyLCAzMiwgMjQ3LCA2LCAxNDIsIDMyLCAyNTUsIDIxLCAxNDIsIAotICAgIDMyLCAyMzEsIDIxOSwgMTQyLCAzMiwgMjMxLCAyMDMsIDE0MiwgMzIsIDI0OCwgNDYsIDE0MiwgMzIsIDIzOSwgMTAzLCAKLSAgICAxNDIsIDMyLCAyNTEsIDI0LCAxNDIsIDMyLCAyNDcsIDIzMiwgMTQyLCAzMiwgMjQ4LCA4MywgMTQyLCAzMiwgMjUxLCAxOTQsIAotICAgIDE0MiwgMzIsIDI1MCwgNzAsIDE0MiwgMzIsIDE4LCAyMzEsIDIwMiwgMTQyLCAzMiwgMjMzLCAyMzYsIDE0MiwgMzIsIDIzNywgCi0gICAgMjI3LCAxNDIsIDMyLCAyNTEsIDgwLCAxNDIsIDMyLCAyMzgsIDE4OCwgMTQyLCAzMiwgMjQ2LCAxNTEsIDE0MiwgMzIsIAotICAgIDIyOCwgMjgsIDE0MiwgMzIsIDIzMiwgMTYzLCAxNDIsIDMyLCAyNDYsIDIxNywgMTQyLCAzMiwgMjMxLCAyMDQsIDE0MiwgCi0gICAgMzIsIDIzNywgMjUzLCAxNDUsIDIzNiwgMTAxLCAxNDIsIDMyLCAyMzEsIDIwMCwgMTQyLCAzMiwgMjQ2LCA3LCAxODAsIAotICAgIDIzNiwgMjIzLCAxNDIsIDMyLCAyNDcsIDIzNCwgMTQyLCAzMiwgMjI4LCAzNSwgMTQyLCAzMiwgMjQ1LCAyMjksIDE0MiwgCi0gICAgMzIsIDI0NywgMjI3LCAxNDIsIDMyLCAyMzMsIDE2MiwgMTQyLCAzMiwgMjMxLCAxMzIsIDE0MiwgMzIsIDI0NywgMTksIAotICAgIDE0MiwgMzIsIDIyNSwgNTAsIDE0NSwgMjI0LCAxNTUsIDE0MiwgMzIsIDI1MSwgMzIsIDE0MiwgMzIsIDIzNiwgMjMzLCAKLSAgICAxNDIsIDMyLCAyNDcsIDE3MCwgMTQyLCAzMiwgMjI1LCAxMjQsIDE0MiwgMzIsIDI0OSwgMjE2LCAxNDIsIDMyLCAyNTEsIAotICAgIDgyLCAyMzYsIDcyLCAxNDIsIDMyLCAyNDUsIDIxNCwgMTQyLCAzMiwgMjQ2LCAxNTIsIDI0MCwgMTYsIDE0MiwgMzIsIDIzNywgCi0gICAgNCwgMTQyLCAzMiwgMjU1LCAzOCwgMTQyLCAzMiwgMjQ3LCAyNDUsIDE0MiwgMzIsIDI0OCwgMTI5LCAxNDIsIDMyLCAyMjQsIAotICAgIDE1MywgMTQyLCAzMiwgMjI4LCAyMzgsIDE0MiwgMzIsIDIzOSwgMjQ4LCAxNDIsIDMyLCAyNTAsIDM3LCAxNDIsIDMyLCAKLSAgICAyNTAsIDEzNCwgMTQyLCAzMiwgMjQ5LCAyMTIsIDE0MiwgMzIsIDI0NywgMTQ3LCAxNDIsIDMyLCAyMjksIDE1OCwgMTQyLCAKLSAgICAzMiwgMjI4LCAzNywgMTQyLCAzMiwgMjQ1LCAxMzksIDE0MiwgMzIsIDI1MSwgNDgsIDE0MiwgMzIsIDI1MSwgNzgsIDE0MiwgCi0gICAgMzIsIDI0NywgMTE0LCAxNDIsIDMyLCAyNTUsIDUsIDE0MiwgMzIsIDI1MSwgNDcsIDE0MiwgMzIsIDIzNCwgNjIsIDIyNiwgCi0gICAgMjQwLCAyMjUsIDMzLCAxNDIsIDMyLCAyNDksIDIzNSwgMTQyLCAzMiwgMjM4LCAzNiwgMTQyLCAzMiwgMjQ2LCAyNDQsIAotICAgIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAxMTgsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAKLSAgICAxMTMsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAxNjYsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIAotICAgIDIxLCAxNTgsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAxNzMsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAKLSAgICAxMjYsIDIxLCAxODMsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAxOTQsIDI1MCwgMjU1LCAyMzEsIDExNiwgCi0gICAgMjI1LCAxMjYsIDIxLCAxODcsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI1LCAxMjYsIDIxLCAxOTIsIDI1MCwgMjU1LCAyMzEsIAotICAgIDExNiwgMjI3LCAyMiwgMjEsIDExOCwgMjUwLCAyNTUsIDIzMSwgMTE2LCAyMjcsIDIyLCAyMSwgMTEzLCAyNTAsIDI1NSwgCi0gICAgMjMxLCAxMTYsIDIyNywgMjIsIDIxLCAxNjYsIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI3LCAyMiwgMjEsIDE1OCwgMjUwLCAKLSAgICAyNTUsIDIzMSwgMTE2LCAyMjcsIDIyLCAyMSwgMTczLCAyNTAsIDI1NSwgMjMxLCAxMTYsIDIyNywgMjIsIDIxLCAxODMsIAotICAgIDI1MCwgMjU1LCAyMzEsIDExNiwgMjI3LCAyMiwgMjEsIDE5NCwgMjUwLCAyNTUsIDIzMSwgMTE2LCAyMjcsIDIyLCAyMSwgCi0gICAgMTg3LCAyNTAsIDI1NSwgMjMxLCAxMTYsIDIyNywgMjIsIDIxLCAxOTIsIDEyLCAxOCwgNiwgNTcsIDEyLCAxOCwgNiwgMjU0LCAKLSAgICAyNywgMTIsIDE4LCA2LCAyNTIsIDQ0LCAxMiwgMTgsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDYsIDcyLCAxMiwgMTgsIDYsIAotICAgIDI0NywgMTMwLCAxMiwgMTgsIDYsIDIxNCwgMTIsIDE4LCA2LCAyMTIsIDEyLCAxOCwgNiwgNzQsIDEyLCAxOCwgNiwgMjM5LCAKLSAgICAxODIsIDEyLCAxOCwgNiwgMjM5LCA3NiwgMTIsIDE4LCA2LCAxNDksIDEyLCAxOCwgNiwgMTg1LCAxMiwgMTgsIDYsIDE5OSwgCi0gICAgMTIsIDE4LCA2LCA3MywgMTIsIDE4LCA2LCAyMzMsIDI0NCwgMTIsIDE4LCA2LCAyMzIsIDEzOSwgMTIsIDE4LCA2LCAxNDYsIAotICAgIDEyLCAxOCwgNiwgMTkzLCAxMiwgMTgsIDYsIDIyNywgMTA5LCAxMiwgMTgsIDYsIDY2LCAxMiwgMTgsIDYsIDE5NiwgMTIsIAotICAgIDE4LCA2LCAyMjQsIDE3NCwgMTIsIDE4LCA2LCAyMjQsIDczLCAxMiwgMTgsIDYsIDIyNCwgMjUsIDEyLCAxOCwgNiwgMjIzLCAKLSAgICAxMTksIDEyLCAxOCwgMywgNTcsIDEyLCAxOCwgMywgMjU0LCAyNywgMTIsIDE4LCAzLCAyNTIsIDQ0LCAxMiwgMTgsIDMsIAotICAgIDIyMiwgMjIyLCAxMiwgMTgsIDMsIDcyLCAxMiwgMTgsIDMsIDI0NywgMTMwLCAxMiwgMTgsIDMsIDIxNCwgMTIsIDE4LCAzLCAKLSAgICAyMTIsIDEyLCAxOCwgMywgNzQsIDEyLCAxOCwgMywgMjM5LCAxODIsIDEyLCAxOCwgMywgMjM5LCA3NiwgMTIsIDE4LCAzLCAKLSAgICAxNDksIDEyLCAxOCwgMywgMTg1LCAxMiwgMTgsIDMsIDE5OSwgMTIsIDE4LCAzLCA3MywgMTIsIDE4LCAzLCAyMzMsIDI0NCwgCi0gICAgMTIsIDE4LCAzLCAyMzIsIDEzOSwgMTIsIDE4LCAzLCAxNDYsIDEyLCAxOCwgMywgMTkzLCAxMiwgMTgsIDMsIDIyNywgMTA5LCAKLSAgICAxMiwgMTgsIDMsIDY2LCAxMiwgMTgsIDMsIDE5NiwgMTIsIDE4LCAzLCAyMjQsIDE3NCwgMTIsIDE4LCAzLCAyMjQsIDczLCAKLSAgICAxMiwgMTgsIDMsIDIyNCwgMjUsIDEyLCAxOCwgMywgMjIzLCAxMTksIDEyLCAyNywgNiwgNTcsIDEyLCAyNywgNiwgMjU0LCAKLSAgICAyNywgMTIsIDI3LCA2LCAyNTIsIDQ0LCAxMiwgMjcsIDYsIDIyMiwgMjIyLCAxMiwgMjcsIDYsIDcyLCAxMiwgMjcsIDYsIAotICAgIDI0NywgMTMwLCAxMiwgMjcsIDYsIDIxNCwgMTIsIDI3LCA2LCAyMTIsIDEyLCAyNywgNiwgNzQsIDEyLCAyNywgNiwgMjM5LCAKLSAgICAxODIsIDEyLCAyNywgNiwgMjM5LCA3NiwgMTIsIDI3LCA2LCAxNDksIDEyLCAyNywgNiwgMTg1LCAxMiwgMjcsIDYsIDE5OSwgCi0gICAgMTIsIDI3LCA2LCA3MywgMTIsIDI3LCA2LCAyMzMsIDI0NCwgMTIsIDI3LCA2LCAyMzIsIDEzOSwgMTIsIDI3LCA2LCAxNDYsIAotICAgIDEyLCAyNywgNiwgMTkzLCAxMiwgMjcsIDYsIDIyNywgMTA5LCAxMiwgMjcsIDYsIDY2LCAxMiwgMjcsIDYsIDE5NiwgMTIsIAotICAgIDI3LCA2LCAyMjQsIDE3NCwgMTIsIDI3LCA2LCAyMjQsIDczLCAxMiwgMjcsIDYsIDIyNCwgMjUsIDEyLCAyNywgNiwgMjIzLCAKLSAgICAxMTksIDEyLCAyNywgMywgNTcsIDEyLCAyNywgMywgMjU0LCAyNywgMTIsIDI3LCAzLCAyNTIsIDQ0LCAxMiwgMjcsIDMsIAotICAgIDIyMiwgMjIyLCAxMiwgMjcsIDMsIDcyLCAxMiwgMjcsIDMsIDI0NywgMTMwLCAxMiwgMjcsIDMsIDIxNCwgMTIsIDI3LCAzLCAKLSAgICA3NCwgMTIsIDI3LCAzLCAyMzksIDE4MiwgMTIsIDI3LCAzLCAyMzksIDc2LCAxMiwgMjcsIDMsIDE0OSwgMTIsIDI3LCAzLCAKLSAgICAxODUsIDEyLCAyNywgMywgMTk5LCAxMiwgMjcsIDMsIDczLCAxMiwgMjcsIDMsIDIzMywgMjQ0LCAxMiwgMjcsIDMsIDIzMiwgCi0gICAgMTM5LCAxMiwgMjcsIDMsIDE0NiwgMTIsIDI3LCAzLCAxOTMsIDEyLCAyNywgMywgMjI3LCAxMDksIDEyLCAyNywgMywgNjYsIAotICAgIDEyLCAyNywgMywgMTk2LCAxMiwgMjcsIDMsIDIyNCwgMTc0LCAxMiwgMjcsIDMsIDIyNCwgNzMsIDEyLCAyNywgMywgMjI0LCAKLSAgICAyNSwgMTIsIDI3LCAzLCAyMjMsIDExOSwgMTIsIDE4LCAyNywgNiwgNTcsIDEyLCAxOCwgMjcsIDYsIDI1NCwgMjcsIDEyLCAKLSAgICAxOCwgMjcsIDYsIDI1MiwgNDQsIDEyLCAxOCwgMjcsIDYsIDIyMiwgMjIyLCAxMiwgMTgsIDI3LCA2LCA3MiwgMTIsIDE4LCAKLSAgICAyNywgNiwgMjQ3LCAxMzAsIDEyLCAxOCwgMjcsIDYsIDIxNCwgMTIsIDE4LCAyNywgNiwgMjEyLCAxMiwgMTgsIDI3LCA2LCAKLSAgICA3NCwgMTIsIDE4LCAyNywgNiwgMjM5LCAxODIsIDEyLCAxOCwgMjcsIDYsIDIzOSwgNzYsIDEyLCAxOCwgMjcsIDYsIDE0OSwgCi0gICAgMTIsIDE4LCAyNywgNiwgMTg1LCAxMiwgMTgsIDI3LCA2LCAxOTksIDEyLCAxOCwgMjcsIDYsIDczLCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyMzMsIDI0NCwgMTIsIDE4LCAyNywgNiwgMjMyLCAxMzksIDEyLCAxOCwgMjcsIDYsIDE0NiwgMTIsIDE4LCAyNywgNiwgCi0gICAgMTkzLCAxMiwgMTgsIDI3LCA2LCAyMjcsIDEwOSwgMTIsIDE4LCAyNywgNiwgNjYsIDEyLCAxOCwgMjcsIDYsIDE5NiwgMTIsIAotICAgIDE4LCAyNywgNiwgMjI0LCAxNzQsIDEyLCAxOCwgMjcsIDYsIDIyNCwgNzMsIDEyLCAxOCwgMjcsIDYsIDIyNCwgMjUsIDEyLCAKLSAgICAxOCwgMjcsIDYsIDIyMywgMTE5LCAxMiwgMTgsIDI3LCAzLCA1NywgMTIsIDE4LCAyNywgMywgMjU0LCAyNywgMTIsIDE4LCAKLSAgICAyNywgMywgMjUyLCA0NCwgMTIsIDE4LCAyNywgMywgMjIyLCAyMjIsIDEyLCAxOCwgMjcsIDMsIDcyLCAxMiwgMTgsIDI3LCAKLSAgICAzLCAyNDcsIDEzMCwgMTIsIDE4LCAyNywgMywgMjE0LCAxMiwgMTgsIDI3LCAzLCAyMTIsIDEyLCAxOCwgMjcsIDMsIDc0LCAKLSAgICAxMiwgMTgsIDI3LCAzLCAyMzksIDE4MiwgMTIsIDE4LCAyNywgMywgMjM5LCA3NiwgMTIsIDE4LCAyNywgMywgMTQ5LCAxMiwgCi0gICAgMTgsIDI3LCAzLCAxODUsIDEyLCAxOCwgMjcsIDMsIDE5OSwgMTIsIDE4LCAyNywgMywgNzMsIDEyLCAxOCwgMjcsIDMsIAotICAgIDIzMywgMjQ0LCAxMiwgMTgsIDI3LCAzLCAyMzIsIDEzOSwgMTIsIDE4LCAyNywgMywgMTQ2LCAxMiwgMTgsIDI3LCAzLCAKLSAgICAxOTMsIDEyLCAxOCwgMjcsIDMsIDIyNywgMTA5LCAxMiwgMTgsIDI3LCAzLCA2NiwgMTIsIDE4LCAyNywgMywgMTk2LCAxMiwgCi0gICAgMTgsIDI3LCAzLCAyMjQsIDE3NCwgMTIsIDE4LCAyNywgMywgMjI0LCA3MywgMTIsIDE4LCAyNywgMywgMjI0LCAyNSwgMTIsIAotICAgIDE4LCAyNywgMywgMjIzLCAxMTksIDEyLCA5NSwgNiwgNTcsIDEyLCA5NSwgNiwgMjUyLCA0NCwgMTIsIDk1LCA2LCAyMjIsIAotICAgIDIyMiwgMTIsIDk1LCA2LCAyMTQsIDEyLCA5NSwgNiwgMjM5LCAxODIsIDEyLCA5NSwgNiwgMjM5LCA3NiwgMTIsIDk1LCA2LCAKLSAgICAxOTksIDEyLCA5NSwgNiwgNzMsIDEyLCA5NSwgNiwgMjMzLCAyNDQsIDEyLCA5NSwgNiwgMjMyLCAxMzksIDEyLCA5NSwgNiwgCi0gICAgMTkzLCAxMiwgOTUsIDYsIDIyNywgMTA5LCAxMiwgOTUsIDYsIDY2LCAxMiwgOTUsIDYsIDE5NiwgMTIsIDk1LCA2LCAyMjQsIAotICAgIDE3NCwgMTIsIDk1LCA2LCAyMjQsIDczLCAxMiwgOTUsIDYsIDIyNCwgMjUsIDEyLCA5NSwgNiwgMjIzLCAxMTksIDEyLCA5NSwgCi0gICAgMywgNTcsIDEyLCA5NSwgMywgMjU0LCAyNywgMTIsIDk1LCAzLCAyNTIsIDQ0LCAxMiwgOTUsIDMsIDIyMiwgMjIyLCAxMiwgCi0gICAgOTUsIDMsIDI0NywgMTMwLCAxMiwgOTUsIDMsIDIxMiwgMTIsIDk1LCAzLCA3NCwgMTIsIDk1LCAzLCAyMzksIDE4MiwgMTIsIAotICAgIDk1LCAzLCAyMzksIDc2LCAxMiwgOTUsIDMsIDE0OSwgMTIsIDk1LCAzLCAxODUsIDEyLCA5NSwgMywgMTk5LCAxMiwgOTUsIAotICAgIDMsIDIzMywgMjQ0LCAxMiwgOTUsIDMsIDIzMiwgMTM5LCAxMiwgOTUsIDMsIDE0NiwgMTIsIDk1LCAzLCAxOTMsIDEyLCA5NSwgCi0gICAgMywgMjI3LCAxMDksIDEyLCA5NSwgMywgNjYsIDEyLCA5NSwgMywgMTk2LCAxMiwgOTUsIDMsIDIyNCwgMTc0LCAxMiwgOTUsIAotICAgIDMsIDIyNCwgNzMsIDEyLCA5NSwgMywgMjI0LCAyNSwgMTIsIDk1LCAzLCAyMjMsIDExOSwgMTIsIDE4LCA5NSwgNiwgNTcsIAotICAgIDEyLCAxOCwgOTUsIDYsIDI1NCwgMjcsIDEyLCAxOCwgOTUsIDYsIDI1MiwgNDQsIDEyLCAxOCwgOTUsIDYsIDIyMiwgMjIyLCAKLSAgICAxMiwgMTgsIDk1LCA2LCA3MiwgMTIsIDE4LCA5NSwgNiwgMjQ3LCAxMzAsIDEyLCAxOCwgOTUsIDYsIDIxNCwgMTIsIDE4LCAKLSAgICA5NSwgNiwgMjEyLCAxMiwgMTgsIDk1LCA2LCA3NCwgMTIsIDE4LCA5NSwgNiwgMjM5LCAxODIsIDEyLCAxOCwgOTUsIDYsIAotICAgIDIzOSwgNzYsIDEyLCAxOCwgOTUsIDYsIDE0OSwgMTIsIDE4LCA5NSwgNiwgMTg1LCAxMiwgMTgsIDk1LCA2LCAxOTksIDEyLCAKLSAgICAxOCwgOTUsIDYsIDczLCAxMiwgMTgsIDk1LCA2LCAyMzMsIDI0NCwgMTIsIDE4LCA5NSwgNiwgMjMyLCAxMzksIDEyLCAxOCwgCi0gICAgOTUsIDYsIDE0NiwgMTIsIDE4LCA5NSwgNiwgMTkzLCAxMiwgMTgsIDk1LCA2LCAyMjcsIDEwOSwgMTIsIDE4LCA5NSwgNiwgCi0gICAgNjYsIDEyLCAxOCwgOTUsIDYsIDE5NiwgMTIsIDE4LCA5NSwgNiwgMjI0LCAxNzQsIDEyLCAxOCwgOTUsIDYsIDIyNCwgNzMsIAotICAgIDEyLCAxOCwgOTUsIDYsIDIyNCwgMjUsIDEyLCAxOCwgOTUsIDYsIDIyMywgMTE5LCAxMiwgMTgsIDk1LCAzLCA1NywgMTIsIAotICAgIDE4LCA5NSwgMywgMjU0LCAyNywgMTIsIDE4LCA5NSwgMywgMjUyLCA0NCwgMTIsIDE4LCA5NSwgMywgMjIyLCAyMjIsIDEyLCAKLSAgICAxOCwgOTUsIDMsIDcyLCAxMiwgMTgsIDk1LCAzLCAyNDcsIDEzMCwgMTIsIDE4LCA5NSwgMywgMjE0LCAxMiwgMTgsIDk1LCAKLSAgICAzLCAyMTIsIDEyLCAxOCwgOTUsIDMsIDc0LCAxMiwgMTgsIDk1LCAzLCAyMzksIDE4MiwgMTIsIDE4LCA5NSwgMywgMjM5LCAKLSAgICA3NiwgMTIsIDE4LCA5NSwgMywgMTQ5LCAxMiwgMTgsIDk1LCAzLCAxODUsIDEyLCAxOCwgOTUsIDMsIDE5OSwgMTIsIDE4LCAKLSAgICA5NSwgMywgNzMsIDEyLCAxOCwgOTUsIDMsIDIzMywgMjQ0LCAxMiwgMTgsIDk1LCAzLCAyMzIsIDEzOSwgMTIsIDE4LCA5NSwgCi0gICAgMywgMTQ2LCAxMiwgMTgsIDk1LCAzLCAxOTMsIDEyLCAxOCwgOTUsIDMsIDIyNywgMTA5LCAxMiwgMTgsIDk1LCAzLCA2NiwgCi0gICAgMTIsIDE4LCA5NSwgMywgMTk2LCAxMiwgMTgsIDk1LCAzLCAyMjQsIDE3NCwgMTIsIDE4LCA5NSwgMywgMjI0LCA3MywgMTIsIAotICAgIDE4LCA5NSwgMywgMjI0LCAyNSwgMTIsIDE4LCA5NSwgMywgMjIzLCAxMTksIDEyLCAxMTAsIDYsIDU3LCAxMiwgMTEwLCA2LCAKLSAgICAyNTQsIDI3LCAxMiwgMTEwLCA2LCAyMjIsIDIyMiwgMTIsIDExMCwgNiwgNzIsIDEyLCAxMTAsIDYsIDI0NywgMTMwLCAxMiwgCi0gICAgMTEwLCA2LCAyMTQsIDEyLCAxMTAsIDYsIDIzOSwgMTgyLCAxMiwgMTEwLCA2LCAyMzksIDc2LCAxMiwgMTEwLCA2LCAxNDksIAotICAgIDEyLCAxMTAsIDYsIDE4NSwgMTIsIDExMCwgNiwgMTk5LCAxMiwgMTEwLCA2LCA3MywgMTIsIDExMCwgNiwgMjMzLCAyNDQsIAotICAgIDEyLCAxMTAsIDYsIDIzMiwgMTM5LCAxMiwgMTEwLCA2LCAxOTMsIDEyLCAxMTAsIDYsIDIyNywgMTA5LCAxMiwgMTEwLCA2LCAKLSAgICA2NiwgMTIsIDExMCwgNiwgMTk2LCAxMiwgMTEwLCA2LCAyMjQsIDE3NCwgMTIsIDExMCwgNiwgMjI0LCA3MywgMTIsIDExMCwgCi0gICAgNiwgMjI0LCAyNSwgMTIsIDExMCwgMywgNTcsIDEyLCAxMTAsIDMsIDI1NCwgMjcsIDEyLCAxMTAsIDMsIDI1MiwgNDQsIDEyLCAKLSAgICAxMTAsIDMsIDIyMiwgMjIyLCAxMiwgMTEwLCAzLCA3MiwgMTIsIDExMCwgMywgMjQ3LCAxMzAsIDEyLCAxMTAsIDMsIDIxNCwgCi0gICAgMTIsIDExMCwgMywgMjEyLCAxMiwgMTEwLCAzLCA3NCwgMTIsIDExMCwgMywgMjM5LCAxODIsIDEyLCAxMTAsIDMsIDIzOSwgCi0gICAgNzYsIDEyLCAxMTAsIDMsIDE0OSwgMTIsIDExMCwgMywgMTg1LCAxMiwgMTEwLCAzLCAxOTksIDEyLCAxMTAsIDMsIDczLCAKLSAgICAxMiwgMTEwLCAzLCAyMzMsIDI0NCwgMTIsIDExMCwgMywgMjMyLCAxMzksIDEyLCAxMTAsIDMsIDE0NiwgMTIsIDExMCwgMywgCi0gICAgMTkzLCAxMiwgMTEwLCAzLCAyMjcsIDEwOSwgMTIsIDExMCwgMywgNjYsIDEyLCAxMTAsIDMsIDE5NiwgMTIsIDExMCwgMywgCi0gICAgMjI0LCAxNzQsIDEyLCAxMTAsIDMsIDIyNCwgNzMsIDEyLCAxMTAsIDMsIDIyNCwgMjUsIDEyLCAxMTAsIDMsIDIyMywgMTE5LCAKLSAgICAxMiwgMTU5LCA2LCA1NywgMTIsIDE1OSwgNiwgMjU0LCAyNywgMTIsIDE1OSwgNiwgMjIyLCAyMjIsIDEyLCAxNTksIDYsIAotICAgIDcyLCAxMiwgMTU5LCA2LCAyNDcsIDEzMCwgMTIsIDE1OSwgNiwgMjE0LCAxMiwgMTU5LCA2LCA3NCwgMTIsIDE1OSwgNiwgCi0gICAgMjM5LCAxODIsIDEyLCAxNTksIDYsIDIzOSwgNzYsIDEyLCAxNTksIDYsIDE0OSwgMTIsIDE1OSwgNiwgMTg1LCAxMiwgMTU5LCAKLSAgICA2LCA3MywgMTIsIDE1OSwgNiwgMTkzLCAxMiwgMTU5LCA2LCAyMjcsIDEwOSwgMTIsIDE1OSwgNiwgNjYsIDEyLCAxNTksIDYsIAotICAgIDE5NiwgMTIsIDE1OSwgNiwgMjI0LCAxNzQsIDEyLCAxNTksIDYsIDIyNCwgNzMsIDEyLCAxNTksIDYsIDIyNCwgMjUsIDEyLCAKLSAgICAxNTksIDMsIDU3LCAxMiwgMTU5LCAzLCAyNTQsIDI3LCAxMiwgMTU5LCAzLCAyNTIsIDQ0LCAxMiwgMTU5LCAzLCAyMjIsIAotICAgIDIyMiwgMTIsIDE1OSwgMywgNzIsIDEyLCAxNTksIDMsIDI0NywgMTMwLCAxMiwgMTU5LCAzLCAyMTQsIDEyLCAxNTksIDMsIAotICAgIDIxMiwgMTIsIDE1OSwgMywgNzQsIDEyLCAxNTksIDMsIDIzOSwgMTgyLCAxMiwgMTU5LCAzLCAyMzksIDc2LCAxMiwgMTU5LCAKLSAgICAzLCAxNDksIDEyLCAxNTksIDMsIDE4NSwgMTIsIDE1OSwgMywgMTk5LCAxMiwgMTU5LCAzLCA3MywgMTIsIDE1OSwgMywgCi0gICAgMjMzLCAyNDQsIDEyLCAxNTksIDMsIDIzMiwgMTM5LCAxMiwgMTU5LCAzLCAxNDYsIDEyLCAxNTksIDMsIDE5MywgMTIsIAotICAgIDE1OSwgMywgMjI3LCAxMDksIDEyLCAxNTksIDMsIDY2LCAxMiwgMTU5LCAzLCAxOTYsIDEyLCAxNTksIDMsIDIyNCwgMTc0LCAKLSAgICAxMiwgMTU5LCAzLCAyMjQsIDczLCAxMiwgMTU5LCAzLCAyMjQsIDI1LCAxMiwgMTU5LCAzLCAyMjMsIDExOSwgMTIsIDE4LCAKLSAgICAxMTAsIDYsIDU3LCAxMiwgMTgsIDExMCwgNiwgMjU0LCAyNywgMTIsIDE4LCAxMTAsIDYsIDI1MiwgNDQsIDEyLCAxOCwgCi0gICAgMTEwLCA2LCAyMjIsIDIyMiwgMTIsIDE4LCAxMTAsIDYsIDcyLCAxMiwgMTgsIDExMCwgNiwgMjQ3LCAxMzAsIDEyLCAxOCwgCi0gICAgMTEwLCA2LCAyMTQsIDEyLCAxOCwgMTEwLCA2LCAyMTIsIDEyLCAxOCwgMTEwLCA2LCA3NCwgMTIsIDE4LCAxMTAsIDYsIAotICAgIDIzOSwgMTgyLCAxMiwgMTgsIDExMCwgNiwgMjM5LCA3NiwgMTIsIDE4LCAxMTAsIDYsIDE0OSwgMTIsIDE4LCAxMTAsIDYsIAotICAgIDE4NSwgMTIsIDE4LCAxMTAsIDYsIDE5OSwgMTIsIDE4LCAxMTAsIDYsIDczLCAxMiwgMTgsIDExMCwgNiwgMjMzLCAyNDQsIAotICAgIDEyLCAxOCwgMTEwLCA2LCAyMzIsIDEzOSwgMTIsIDE4LCAxMTAsIDYsIDE0NiwgMTIsIDE4LCAxMTAsIDYsIDE5MywgMTIsIAotICAgIDE4LCAxMTAsIDYsIDIyNywgMTA5LCAxMiwgMTgsIDExMCwgNiwgNjYsIDEyLCAxOCwgMTEwLCA2LCAxOTYsIDEyLCAxOCwgCi0gICAgMTEwLCA2LCAyMjQsIDE3NCwgMTIsIDE4LCAxMTAsIDYsIDIyNCwgNzMsIDEyLCAxOCwgMTEwLCA2LCAyMjQsIDI1LCAxMiwgCi0gICAgMTgsIDExMCwgNiwgMjIzLCAxMTksIDEyLCAxOCwgMTEwLCAzLCA1NywgMTIsIDE4LCAxMTAsIDMsIDI1NCwgMjcsIDEyLCAKLSAgICAxOCwgMTEwLCAzLCAyNTIsIDQ0LCAxMiwgMTgsIDExMCwgMywgMjIyLCAyMjIsIDEyLCAxOCwgMTEwLCAzLCA3MiwgMTIsIAotICAgIDE4LCAxMTAsIDMsIDI0NywgMTMwLCAxMiwgMTgsIDExMCwgMywgMjE0LCAxMiwgMTgsIDExMCwgMywgMjEyLCAxMiwgMTgsIAotICAgIDExMCwgMywgNzQsIDEyLCAxOCwgMTEwLCAzLCAyMzksIDE4MiwgMTIsIDE4LCAxMTAsIDMsIDIzOSwgNzYsIDEyLCAxOCwgCi0gICAgMTEwLCAzLCAxNDksIDEyLCAxOCwgMTEwLCAzLCAxODUsIDEyLCAxOCwgMTEwLCAzLCAxOTksIDEyLCAxOCwgMTEwLCAzLCAKLSAgICA3MywgMTIsIDE4LCAxMTAsIDMsIDIzMywgMjQ0LCAxMiwgMTgsIDExMCwgMywgMjMyLCAxMzksIDEyLCAxOCwgMTEwLCAzLCAKLSAgICAxNDYsIDEyLCAxOCwgMTEwLCAzLCAxOTMsIDEyLCAxOCwgMTEwLCAzLCAyMjcsIDEwOSwgMTIsIDE4LCAxMTAsIDMsIDY2LCAKLSAgICAxMiwgMTgsIDExMCwgMywgMTk2LCAxMiwgMTgsIDExMCwgMywgMjI0LCAxNzQsIDEyLCAxOCwgMTEwLCAzLCAyMjQsIDczLCAKLSAgICAxMiwgMTgsIDExMCwgMywgMjI0LCAyNSwgMTIsIDE4LCAxMTAsIDMsIDIyMywgMTE5LCAxMiwgMzAsIDYsIDU3LCAxMiwgMzAsIAotICAgIDYsIDI1NCwgMjcsIDEyLCAzMCwgNiwgMjUyLCA0NCwgMTIsIDMwLCA2LCAyMjIsIDIyMiwgMTIsIDMwLCA2LCA3MiwgMTIsIAotICAgIDMwLCA2LCAyNDcsIDEzMCwgMTIsIDMwLCA2LCAyMTQsIDEyLCAzMCwgNiwgMjEyLCAxMiwgMzAsIDYsIDc0LCAxMiwgMzAsIAotICAgIDYsIDIzOSwgMTgyLCAxMiwgMzAsIDYsIDIzOSwgNzYsIDEyLCAzMCwgNiwgMTQ5LCAxMiwgMzAsIDYsIDE4NSwgMTIsIDMwLCAKLSAgICA2LCAxOTksIDEyLCAzMCwgNiwgNzMsIDEyLCAzMCwgNiwgMjMzLCAyNDQsIDEyLCAzMCwgNiwgMjMyLCAxMzksIDEyLCAzMCwgCi0gICAgNiwgMTQ2LCAxMiwgMzAsIDYsIDE5MywgMTIsIDMwLCA2LCAyMjcsIDEwOSwgMTIsIDMwLCA2LCA2NiwgMTIsIDMwLCA2LCAKLSAgICAxOTYsIDEyLCAzMCwgNiwgMjI0LCAxNzQsIDEyLCAzMCwgNiwgMjI0LCA3MywgMTIsIDMwLCA2LCAyMjQsIDI1LCAxMiwgMzAsIAotICAgIDYsIDIyMywgMTE5LCAxMiwgMzAsIDMsIDU3LCAxMiwgMzAsIDMsIDI1NCwgMjcsIDEyLCAzMCwgMywgMjUyLCA0NCwgMTIsIAotICAgIDMwLCAzLCAyMjIsIDIyMiwgMTIsIDMwLCAzLCA3MiwgMTIsIDMwLCAzLCAyNDcsIDEzMCwgMTIsIDMwLCAzLCAyMTQsIDEyLCAKLSAgICAzMCwgMywgMjEyLCAxMiwgMzAsIDMsIDc0LCAxMiwgMzAsIDMsIDIzOSwgMTgyLCAxMiwgMzAsIDMsIDIzOSwgNzYsIDEyLCAKLSAgICAzMCwgMywgMTQ5LCAxMiwgMzAsIDMsIDE4NSwgMTIsIDMwLCAzLCAxOTksIDEyLCAzMCwgMywgNzMsIDEyLCAzMCwgMywgCi0gICAgMjMzLCAyNDQsIDEyLCAzMCwgMywgMjMyLCAxMzksIDEyLCAzMCwgMywgMTQ2LCAxMiwgMzAsIDMsIDE5MywgMTIsIDMwLCAzLCAKLSAgICAyMjcsIDEwOSwgMTIsIDMwLCAzLCA2NiwgMTIsIDMwLCAzLCAxOTYsIDEyLCAzMCwgMywgMjI0LCAxNzQsIDEyLCAzMCwgMywgCi0gICAgMjI0LCA3MywgMTIsIDMwLCAzLCAyMjQsIDI1LCAxMiwgMzAsIDMsIDIyMywgMTE5LCAxMiwgMzAsIDE4LCA2LCA1NywgMTIsIAotICAgIDMwLCAxOCwgNiwgMjU0LCAyNywgMTIsIDMwLCAxOCwgNiwgMjUyLCA0NCwgMTIsIDMwLCAxOCwgNiwgMjIyLCAyMjIsIDEyLCAKLSAgICAzMCwgMTgsIDYsIDcyLCAxMiwgMzAsIDE4LCA2LCAyNDcsIDEzMCwgMTIsIDMwLCAxOCwgNiwgMjE0LCAxMiwgMzAsIDE4LCAKLSAgICA2LCAyMTIsIDEyLCAzMCwgMTgsIDYsIDc0LCAxMiwgMzAsIDE4LCA2LCAyMzksIDE4MiwgMTIsIDMwLCAxOCwgNiwgMjM5LCAKLSAgICA3NiwgMTIsIDMwLCAxOCwgNiwgMTQ5LCAxMiwgMzAsIDE4LCA2LCAxODUsIDEyLCAzMCwgMTgsIDYsIDE5OSwgMTIsIDMwLCAKLSAgICAxOCwgNiwgNzMsIDEyLCAzMCwgMTgsIDYsIDIzMywgMjQ0LCAxMiwgMzAsIDE4LCA2LCAyMzIsIDEzOSwgMTIsIDMwLCAxOCwgCi0gICAgNiwgMTQ2LCAxMiwgMzAsIDE4LCA2LCAxOTMsIDEyLCAzMCwgMTgsIDYsIDIyNywgMTA5LCAxMiwgMzAsIDE4LCA2LCA2NiwgCi0gICAgMTIsIDMwLCAxOCwgNiwgMTk2LCAxMiwgMzAsIDE4LCA2LCAyMjQsIDE3NCwgMTIsIDMwLCAxOCwgNiwgMjI0LCA3MywgMTIsIAotICAgIDMwLCAxOCwgNiwgMjI0LCAyNSwgMTIsIDMwLCAxOCwgNiwgMjIzLCAxMTksIDEyLCAzMCwgMTgsIDMsIDU3LCAxMiwgMzAsIAotICAgIDE4LCAzLCAyNTQsIDI3LCAxMiwgMzAsIDE4LCAzLCAyNTIsIDQ0LCAxMiwgMzAsIDE4LCAzLCAyMjIsIDIyMiwgMTIsIDMwLCAKLSAgICAxOCwgMywgNzIsIDEyLCAzMCwgMTgsIDMsIDI0NywgMTMwLCAxMiwgMzAsIDE4LCAzLCAyMTQsIDEyLCAzMCwgMTgsIDMsIAotICAgIDIxMiwgMTIsIDMwLCAxOCwgMywgNzQsIDEyLCAzMCwgMTgsIDMsIDIzOSwgMTgyLCAxMiwgMzAsIDE4LCAzLCAyMzksIDc2LCAKLSAgICAxMiwgMzAsIDE4LCAzLCAxNDksIDEyLCAzMCwgMTgsIDMsIDE4NSwgMTIsIDMwLCAxOCwgMywgMTk5LCAxMiwgMzAsIDE4LCAKLSAgICAzLCA3MywgMTIsIDMwLCAxOCwgMywgMjMzLCAyNDQsIDEyLCAzMCwgMTgsIDMsIDIzMiwgMTM5LCAxMiwgMzAsIDE4LCAzLCAKLSAgICAxNDYsIDEyLCAzMCwgMTgsIDMsIDE5MywgMTIsIDMwLCAxOCwgMywgMjI3LCAxMDksIDEyLCAzMCwgMTgsIDMsIDY2LCAxMiwgCi0gICAgMzAsIDE4LCAzLCAxOTYsIDEyLCAzMCwgMTgsIDMsIDIyNCwgMTc0LCAxMiwgMzAsIDE4LCAzLCAyMjQsIDczLCAxMiwgMzAsIAotICAgIDE4LCAzLCAyMjQsIDI1LCAxMiwgMzAsIDE4LCAzLCAyMjMsIDExOSwgMTIsIDMwLCAyNywgNiwgNTcsIDEyLCAzMCwgMjcsIAotICAgIDYsIDI1NCwgMjcsIDEyLCAzMCwgMjcsIDYsIDI1MiwgNDQsIDEyLCAzMCwgMjcsIDYsIDIyMiwgMjIyLCAxMiwgMzAsIDI3LCAKLSAgICA2LCA3MiwgMTIsIDMwLCAyNywgNiwgMjQ3LCAxMzAsIDEyLCAzMCwgMjcsIDYsIDIxNCwgMTIsIDMwLCAyNywgNiwgMjEyLCAKLSAgICAxMiwgMzAsIDI3LCA2LCA3NCwgMTIsIDMwLCAyNywgNiwgMjM5LCAxODIsIDEyLCAzMCwgMjcsIDYsIDIzOSwgNzYsIDEyLCAKLSAgICAzMCwgMjcsIDYsIDE0OSwgMTIsIDMwLCAyNywgNiwgMTg1LCAxMiwgMzAsIDI3LCA2LCAxOTksIDEyLCAzMCwgMjcsIDYsIAotICAgIDczLCAxMiwgMzAsIDI3LCA2LCAyMzMsIDI0NCwgMTIsIDMwLCAyNywgNiwgMjMyLCAxMzksIDEyLCAzMCwgMjcsIDYsIDE0NiwgCi0gICAgMTIsIDMwLCAyNywgNiwgMTkzLCAxMiwgMzAsIDI3LCA2LCAyMjcsIDEwOSwgMTIsIDMwLCAyNywgNiwgNjYsIDEyLCAzMCwgCi0gICAgMjcsIDYsIDE5NiwgMTIsIDMwLCAyNywgNiwgMjI0LCAxNzQsIDEyLCAzMCwgMjcsIDYsIDIyNCwgNzMsIDEyLCAzMCwgMjcsIAotICAgIDYsIDIyNCwgMjUsIDEyLCAzMCwgMjcsIDYsIDIyMywgMTE5LCAxMiwgMzAsIDI3LCAzLCA1NywgMTIsIDMwLCAyNywgMywgCi0gICAgMjU0LCAyNywgMTIsIDMwLCAyNywgMywgMjUyLCA0NCwgMTIsIDMwLCAyNywgMywgMjIyLCAyMjIsIDEyLCAzMCwgMjcsIDMsIAotICAgIDcyLCAxMiwgMzAsIDI3LCAzLCAyNDcsIDEzMCwgMTIsIDMwLCAyNywgMywgMjE0LCAxMiwgMzAsIDI3LCAzLCAyMTIsIDEyLCAKLSAgICAzMCwgMjcsIDMsIDc0LCAxMiwgMzAsIDI3LCAzLCAyMzksIDE4MiwgMTIsIDMwLCAyNywgMywgMjM5LCA3NiwgMTIsIDMwLCAKLSAgICAyNywgMywgMTQ5LCAxMiwgMzAsIDI3LCAzLCAxODUsIDEyLCAzMCwgMjcsIDMsIDE5OSwgMTIsIDMwLCAyNywgMywgNzMsIAotICAgIDEyLCAzMCwgMjcsIDMsIDIzMywgMjQ0LCAxMiwgMzAsIDI3LCAzLCAyMzIsIDEzOSwgMTIsIDMwLCAyNywgMywgMTQ2LCAxMiwgCi0gICAgMzAsIDI3LCAzLCAxOTMsIDEyLCAzMCwgMjcsIDMsIDIyNywgMTA5LCAxMiwgMzAsIDI3LCAzLCA2NiwgMTIsIDMwLCAyNywgCi0gICAgMywgMTk2LCAxMiwgMzAsIDI3LCAzLCAyMjQsIDE3NCwgMTIsIDMwLCAyNywgMywgMjI0LCA3MywgMTIsIDMwLCAyNywgMywgCi0gICAgMjI0LCAyNSwgMTIsIDMwLCAyNywgMywgMjIzLCAxMTksIDEyLCAzMCwgMTgsIDI3LCA2LCA1NywgMTIsIDMwLCAxOCwgMjcsIAotICAgIDYsIDI1NCwgMjcsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTIsIDQ0LCAxMiwgMzAsIDE4LCAyNywgNiwgMjIyLCAyMjIsIDEyLCAKLSAgICAzMCwgMTgsIDI3LCA2LCA3MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDI0NywgMTMwLCAxMiwgMzAsIDE4LCAyNywgNiwgMjE0LCAKLSAgICAxMiwgMzAsIDE4LCAyNywgNiwgMjEyLCAxMiwgMzAsIDE4LCAyNywgNiwgNzQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMzksIAotICAgIDE4MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzOSwgNzYsIDEyLCAzMCwgMTgsIDI3LCA2LCAxNDksIDEyLCAzMCwgMTgsIDI3LCAKLSAgICA2LCAxODUsIDEyLCAzMCwgMTgsIDI3LCA2LCAxOTksIDEyLCAzMCwgMTgsIDI3LCA2LCA3MywgMTIsIDMwLCAxOCwgMjcsIDYsIAotICAgIDIzMywgMjQ0LCAxMiwgMzAsIDE4LCAyNywgNiwgMjMyLCAxMzksIDEyLCAzMCwgMTgsIDI3LCA2LCAxNDYsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCA2LCAxOTMsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjcsIDEwOSwgMTIsIDMwLCAxOCwgMjcsIDYsIDY2LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgNiwgMTk2LCAxMiwgMzAsIDE4LCAyNywgNiwgMjI0LCAxNzQsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjQsIAotICAgIDczLCAxMiwgMzAsIDE4LCAyNywgNiwgMjI0LCAyNSwgMTIsIDMwLCAxOCwgMjcsIDYsIDIyMywgMTE5LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMywgNTcsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTQsIDI3LCAxMiwgMzAsIDE4LCAyNywgMywgMjUyLCA0NCwgMTIsIAotICAgIDMwLCAxOCwgMjcsIDMsIDIyMiwgMjIyLCAxMiwgMzAsIDE4LCAyNywgMywgNzIsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNDcsIAotICAgIDEzMCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIxNCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIxMiwgMTIsIDMwLCAxOCwgMjcsIDMsIAotICAgIDc0LCAxMiwgMzAsIDE4LCAyNywgMywgMjM5LCAxODIsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzksIDc2LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMywgMTQ5LCAxMiwgMzAsIDE4LCAyNywgMywgMTg1LCAxMiwgMzAsIDE4LCAyNywgMywgMTk5LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMywgNzMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzMsIDI0NCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzMiwgMTM5LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMywgMTQ2LCAxMiwgMzAsIDE4LCAyNywgMywgMTkzLCAxMiwgMzAsIDE4LCAyNywgMywgMjI3LCAxMDksIAotICAgIDEyLCAzMCwgMTgsIDI3LCAzLCA2NiwgMTIsIDMwLCAxOCwgMjcsIDMsIDE5NiwgMTIsIDMwLCAxOCwgMjcsIDMsIDIyNCwgCi0gICAgMTc0LCAxMiwgMzAsIDE4LCAyNywgMywgMjI0LCA3MywgMTIsIDMwLCAxOCwgMjcsIDMsIDIyNCwgMjUsIDEyLCAzMCwgMTgsIAotICAgIDI3LCAzLCAyMjMsIDExOSwgMTIsIDE4OSwgNiwgNTcsIDEyLCAxODksIDYsIDI1NCwgMjcsIDEyLCAxODksIDYsIDI1MiwgCi0gICAgNDQsIDEyLCAxODksIDYsIDIyMiwgMjIyLCAxMiwgMTg5LCA2LCA3MiwgMTIsIDE4OSwgNiwgMjQ3LCAxMzAsIDEyLCAxODksIAotICAgIDYsIDIxNCwgMTIsIDE4OSwgNiwgMjEyLCAxMiwgMTg5LCA2LCA3NCwgMTIsIDE4OSwgNiwgMjM5LCAxODIsIDEyLCAxODksIAotICAgIDYsIDIzOSwgNzYsIDEyLCAxODksIDYsIDE0OSwgMTIsIDE4OSwgNiwgMTg1LCAxMiwgMTg5LCA2LCAxOTksIDEyLCAxODksIAotICAgIDYsIDczLCAxMiwgMTg5LCA2LCAyMzMsIDI0NCwgMTIsIDE4OSwgNiwgMjMyLCAxMzksIDEyLCAxODksIDYsIDE0NiwgMTIsIAotICAgIDE4OSwgNiwgMTkzLCAxMiwgMTg5LCA2LCAyMjcsIDEwOSwgMTIsIDE4OSwgNiwgNjYsIDEyLCAxODksIDYsIDE5NiwgMTIsIAotICAgIDE4OSwgNiwgMjI0LCAxNzQsIDEyLCAxODksIDYsIDIyNCwgNzMsIDEyLCAxODksIDYsIDIyNCwgMjUsIDEyLCAxODksIDYsIAotICAgIDIyMywgMTE5LCAxMiwgMTg5LCAzLCA1NywgMTIsIDE4OSwgMywgMjU0LCAyNywgMTIsIDE4OSwgMywgMjUyLCA0NCwgMTIsIAotICAgIDE4OSwgMywgMjIyLCAyMjIsIDEyLCAxODksIDMsIDcyLCAxMiwgMTg5LCAzLCAyNDcsIDEzMCwgMTIsIDE4OSwgMywgMjE0LCAKLSAgICAxMiwgMTg5LCAzLCAyMTIsIDEyLCAxODksIDMsIDc0LCAxMiwgMTg5LCAzLCAyMzksIDE4MiwgMTIsIDE4OSwgMywgMjM5LCAKLSAgICA3NiwgMTIsIDE4OSwgMywgMTQ5LCAxMiwgMTg5LCAzLCAxODUsIDEyLCAxODksIDMsIDE5OSwgMTIsIDE4OSwgMywgNzMsIAotICAgIDEyLCAxODksIDMsIDIzMywgMjQ0LCAxMiwgMTg5LCAzLCAyMzIsIDEzOSwgMTIsIDE4OSwgMywgMTQ2LCAxMiwgMTg5LCAzLCAKLSAgICAxOTMsIDEyLCAxODksIDMsIDIyNywgMTA5LCAxMiwgMTg5LCAzLCA2NiwgMTIsIDE4OSwgMywgMTk2LCAxMiwgMTg5LCAzLCAKLSAgICAyMjQsIDE3NCwgMTIsIDE4OSwgMywgMjI0LCA3MywgMTIsIDE4OSwgMywgMjI0LCAyNSwgMTIsIDE4OSwgMywgMjIzLCAxMTksIAotICAgIDEyLCAyNywgMywgMjQ5LCAxMzksIDc0LCAxMiwgMjcsIDMsIDI0OSwgMTM5LCAyMzksIDE4MiwgMTIsIDE4LCA2LCAyNTQsIAotICAgIDIwNSwgMTIsIDE4LCA2LCAyNTIsIDE5OCwgMTIsIDE4LCA2LCAyNDYsIDE2OSwgMTIsIDE4LCA2LCAyNTAsIDQ3LCAxMiwgCi0gICAgMTgsIDYsIDI0NywgMjA2LCAxMiwgMTgsIDYsIDIyMywgODgsIDEyLCAxOCwgNiwgMjQ3LCAxNzEsIDEyLCAxOCwgNiwgMjI2LCAKLSAgICAyMjMsIDEyLCAxOCwgNiwgMjM5LCAyMTUsIDEyLCAxOCwgNiwgMjM5LCAzNSwgMTIsIDE4LCA2LCAyMzgsIDE2LCAxMiwgMTgsIAotICAgIDYsIDIzNiwgNjYsIDEyLCAxOCwgNiwgMjM0LCAyMDYsIDEyLCAxOCwgNiwgMjI0LCA2NCwgMTIsIDE4LCA2LCAyMzQsIDY0LCAKLSAgICAxMiwgMTgsIDYsIDIzMywgNjksIDEyLCAxOCwgNiwgMjMxLCAxODIsIDEyLCAxOCwgNiwgMjI2LCAyMjQsIDk4LCAxMiwgMTgsIAotICAgIDYsIDIyOSwgMiwgMTIsIDE4LCA2LCAyMjcsIDYxLCAxMiwgMTgsIDYsIDIyNSwgMTEwLCAxMiwgMTgsIDYsIDIzMywgODcsIAotICAgIDEyLCAxOCwgNiwgMjUxLCAxNjksIDEyLCAxOCwgNiwgMjMyLCAxODMsIDEyLCAxOCwgNiwgMjM0LCA2NiwgMTIsIDE4LCAKLSAgICAyMzUsIDI1MCwgMTIsIDE4LCAzLCAyNTQsIDIwNSwgMTIsIDE4LCAzLCAyNTIsIDE5OCwgMTIsIDE4LCAzLCAyNDYsIDE2OSwgCi0gICAgMTIsIDE4LCAzLCAyNTAsIDQ3LCAxMiwgMTgsIDMsIDI0NywgMjA2LCAxMiwgMTgsIDMsIDIyMywgODgsIDEyLCAxOCwgMywgCi0gICAgMjQ3LCAxNzEsIDEyLCAxOCwgMywgMjI2LCAyMjMsIDEyLCAxOCwgMywgMjM5LCAyMTUsIDEyLCAxOCwgMywgMjM5LCAzNSwgCi0gICAgMTIsIDE4LCAzLCAyMzgsIDE2LCAxMiwgMTgsIDMsIDIzNiwgNjYsIDEyLCAxOCwgMywgMjM0LCAyMDYsIDEyLCAxOCwgMywgCi0gICAgMjI0LCA2NCwgMTIsIDE4LCAzLCAyMzQsIDY0LCAxMiwgMTgsIDMsIDIzMywgNjksIDEyLCAxOCwgMywgMjMxLCAxODIsIDEyLCAKLSAgICAxOCwgMywgMzUsIDIyOSwgMiwgMTIsIDE4LCAzLCAyMjksIDIsIDEyLCAxOCwgMywgMjI3LCA2MSwgMTIsIDE4LCAzLCAyMjUsIAotICAgIDExMCwgMTIsIDE4LCAzLCAyMzMsIDg3LCAxMiwgMTgsIDMsIDI1MSwgMTY5LCAxMiwgMTgsIDMsIDIzMiwgMTgzLCAxMiwgCi0gICAgMTgsIDMsIDIzNCwgNjYsIDEyLCAxOCwgMjMzLCAxNzUsIDI0OSwgMjM2LCAxMiwgMTgsIDI0NywgMjA3LCA5OCwgMTIsIDE4LCAKLSAgICAyMjYsIDIyNCwgOTgsIDEyLCAxOCwgMjM5LCAzNiwgOTgsIDEyLCAxOCwgMjMzLCA4OCwgOTgsIDEyLCAxOCwgMjMxLCAxODMsIAotICAgIDk4LCAxMiwgMTgsIDIzMywgNzAsIDk4LCAxMiwgMjcsIDYsIDI1NCwgMjA1LCAxMiwgMjcsIDYsIDI1MiwgMTk4LCAxMiwgCi0gICAgMjcsIDYsIDI0NiwgMTY5LCAxMiwgMjcsIDYsIDI1MCwgNDcsIDEyLCAyNywgNiwgMjQ3LCAyMDYsIDEyLCAyNywgNiwgMjIzLCAKLSAgICA4OCwgMTIsIDI3LCA2LCAyNDcsIDE3MSwgMTIsIDI3LCA2LCAyMjYsIDIyMywgMTIsIDI3LCA2LCAyMzksIDIxNSwgMTIsIAotICAgIDI3LCA2LCAyMzksIDM1LCAxMiwgMjcsIDYsIDIzOCwgMTYsIDEyLCAyNywgNiwgMjM2LCA2NiwgMTIsIDI3LCA2LCAyMzQsIAotICAgIDIwNiwgMTIsIDI3LCA2LCAyMjQsIDY0LCAxMiwgMjcsIDYsIDIzNCwgNjQsIDEyLCAyNywgNiwgMjMzLCA2OSwgMTIsIDI3LCAKLSAgICA2LCAyMzEsIDE4MiwgMTIsIDI3LCA2LCAyMjYsIDIyNCwgOTgsIDEyLCAyNywgNiwgMjI5LCAyLCAxMiwgMjcsIDYsIDIyNywgCi0gICAgNjEsIDEyLCAyNywgNiwgMjI1LCAxMTAsIDEyLCAyNywgNiwgMjMzLCA4NywgMTIsIDI3LCA2LCAyNTEsIDE2OSwgMTIsIDI3LCAKLSAgICA2LCAyMzIsIDE4MywgMTIsIDI3LCA2LCAyMzQsIDY2LCAxMiwgMjcsIDIzNSwgMjUwLCAxMiwgMjcsIDMsIDI1NCwgMjA1LCAKLSAgICAxMiwgMjcsIDMsIDI1MiwgMTk4LCAxMiwgMjcsIDMsIDI0NiwgMTY5LCAxMiwgMjcsIDMsIDI1MCwgNDcsIDEyLCAyNywgMywgCi0gICAgMjQ3LCAyMDYsIDEyLCAyNywgMywgMjIzLCA4OCwgMTIsIDI3LCAzLCAyNDcsIDE3MSwgMTIsIDI3LCAzLCAyMjYsIDIyMywgCi0gICAgMTIsIDI3LCAzLCAyMzksIDIxNSwgMTIsIDI3LCAzLCAyMzksIDM1LCAxMiwgMjcsIDMsIDIzOCwgMTYsIDEyLCAyNywgMywgCi0gICAgMjM2LCA2NiwgMTIsIDI3LCAzLCAyMzQsIDIwNiwgMTIsIDI3LCAzLCAyMjQsIDY0LCAxMiwgMjcsIDMsIDIzNCwgNjQsIDEyLCAKLSAgICAyNywgMywgMjMzLCA2OSwgMTIsIDI3LCAzLCAyMzEsIDE4MiwgMTIsIDI3LCAzLCAzNSwgMjI5LCAyLCAxMiwgMjcsIDMsIAotICAgIDIyOSwgMiwgMTIsIDI3LCAzLCAyMjcsIDYxLCAxMiwgMjcsIDMsIDIyNSwgMTEwLCAxMiwgMjcsIDMsIDIzMywgODcsIDEyLCAKLSAgICAyNywgMywgMjUxLCAxNjksIDEyLCAyNywgMywgMjMyLCAxODMsIDEyLCAyNywgMywgMjM0LCA2NiwgMTIsIDI3LCAyMzMsIAotICAgIDE3NSwgMjQ5LCAyMzYsIDEyLCAyNywgMjQ3LCAyMDcsIDk4LCAxMiwgMjcsIDIyNiwgMjI0LCA5OCwgMTIsIDI3LCAyMzksIAotICAgIDM2LCA5OCwgMTIsIDI3LCAyMzMsIDg4LCA5OCwgMTIsIDI3LCAyMzEsIDE4MywgOTgsIDEyLCAyNywgMjMzLCA3MCwgOTgsIAotICAgIDEyLCAxOCwgMjcsIDYsIDI1NCwgMjA1LCAxMiwgMTgsIDI3LCA2LCAyNTIsIDE5OCwgMTIsIDE4LCAyNywgNiwgMjQ2LCAKLSAgICAxNjksIDEyLCAxOCwgMjcsIDYsIDI1MCwgNDcsIDEyLCAxOCwgMjcsIDYsIDI0NywgMjA2LCAxMiwgMTgsIDI3LCA2LCAyMjMsIAotICAgIDg4LCAxMiwgMTgsIDI3LCA2LCAyNDcsIDE3MSwgMTIsIDE4LCAyNywgNiwgMjI2LCAyMjMsIDEyLCAxOCwgMjcsIDYsIDIzOSwgCi0gICAgMjE1LCAxMiwgMTgsIDI3LCA2LCAyMzksIDM1LCAxMiwgMTgsIDI3LCA2LCAyMzgsIDE2LCAxMiwgMTgsIDI3LCA2LCAyMzYsIAotICAgIDY2LCAxMiwgMTgsIDI3LCA2LCAyMzQsIDIwNiwgMTIsIDE4LCAyNywgNiwgMjI0LCA2NCwgMTIsIDE4LCAyNywgNiwgMjM0LCAKLSAgICA2NCwgMTIsIDE4LCAyNywgNiwgMjMzLCA2OSwgMTIsIDE4LCAyNywgNiwgMjMxLCAxODIsIDEyLCAxOCwgMjcsIDYsIDIyNiwgCi0gICAgMjI0LCA5OCwgMTIsIDE4LCAyNywgNiwgMjI5LCAyLCAxMiwgMTgsIDI3LCA2LCAyMjcsIDYxLCAxMiwgMTgsIDI3LCA2LCAKLSAgICAyMjUsIDExMCwgMTIsIDE4LCAyNywgNiwgMjMzLCA4NywgMTIsIDE4LCAyNywgNiwgMjUxLCAxNjksIDEyLCAxOCwgMjcsIDYsIAotICAgIDIzMiwgMTgzLCAxMiwgMTgsIDI3LCA2LCAyMzQsIDY2LCAxMiwgMTgsIDI3LCAyMzUsIDI1MCwgMTIsIDE4LCAyNywgMywgCi0gICAgMjU0LCAyMDUsIDEyLCAxOCwgMjcsIDMsIDI1MiwgMTk4LCAxMiwgMTgsIDI3LCAzLCAyNDYsIDE2OSwgMTIsIDE4LCAyNywgCi0gICAgMywgMjUwLCA0NywgMTIsIDE4LCAyNywgMywgMjQ3LCAyMDYsIDEyLCAxOCwgMjcsIDMsIDIyMywgODgsIDEyLCAxOCwgMjcsIAotICAgIDMsIDI0NywgMTcxLCAxMiwgMTgsIDI3LCAzLCAyMjYsIDIyMywgMTIsIDE4LCAyNywgMywgMjM5LCAyMTUsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDIzOSwgMzUsIDEyLCAxOCwgMjcsIDMsIDIzOCwgMTYsIDEyLCAxOCwgMjcsIDMsIDIzNiwgNjYsIDEyLCAxOCwgCi0gICAgMjcsIDMsIDIzNCwgMjA2LCAxMiwgMTgsIDI3LCAzLCAyMjQsIDY0LCAxMiwgMTgsIDI3LCAzLCAyMzQsIDY0LCAxMiwgMTgsIAotICAgIDI3LCAzLCAyMzMsIDY5LCAxMiwgMTgsIDI3LCAzLCAyMzEsIDE4MiwgMTIsIDE4LCAyNywgMywgMzUsIDIyOSwgMiwgMTIsIAotICAgIDE4LCAyNywgMywgMjI5LCAyLCAxMiwgMTgsIDI3LCAzLCAyMjcsIDYxLCAxMiwgMTgsIDI3LCAzLCAyMjUsIDExMCwgMTIsIAotICAgIDE4LCAyNywgMywgMjMzLCA4NywgMTIsIDE4LCAyNywgMywgMjUxLCAxNjksIDEyLCAxOCwgMjcsIDMsIDIzMiwgMTgzLCAxMiwgCi0gICAgMTgsIDI3LCAzLCAyMzQsIDY2LCAxMiwgMTgsIDI3LCAyMzMsIDE3NSwgMjQ5LCAyMzYsIDEyLCAxOCwgMjcsIDI0NywgMjA3LCAKLSAgICA5OCwgMTIsIDE4LCAyNywgMjI2LCAyMjQsIDk4LCAxMiwgMTgsIDI3LCAyMzksIDM2LCA5OCwgMTIsIDE4LCAyNywgMjMzLCAKLSAgICA4OCwgOTgsIDEyLCAxOCwgMjcsIDIzMSwgMTgzLCA5OCwgMTIsIDE4LCAyNywgMjMzLCA3MCwgOTgsIDEyLCAzMCwgMTgsIDYsIAotICAgIDI1NCwgMjA1LCAxMiwgMzAsIDE4LCA2LCAyNTIsIDE5OCwgMTIsIDMwLCAxOCwgNiwgMjQ2LCAxNjksIDEyLCAzMCwgMTgsIAotICAgIDYsIDI1MCwgNDcsIDEyLCAzMCwgMTgsIDYsIDI0NywgMjA2LCAxMiwgMzAsIDE4LCA2LCAyMjMsIDg4LCAxMiwgMzAsIDE4LCAKLSAgICA2LCAyNDcsIDE3MSwgMTIsIDMwLCAxOCwgNiwgMjI2LCAyMjMsIDEyLCAzMCwgMTgsIDYsIDIzOSwgMjE1LCAxMiwgMzAsIAotICAgIDE4LCA2LCAyMzksIDM1LCAxMiwgMzAsIDE4LCA2LCAyMzgsIDE2LCAxMiwgMzAsIDE4LCA2LCAyMzYsIDY2LCAxMiwgMzAsIAotICAgIDE4LCA2LCAyMzQsIDIwNiwgMTIsIDMwLCAxOCwgNiwgMjI0LCA2NCwgMTIsIDMwLCAxOCwgNiwgMjM0LCA2NCwgMTIsIDMwLCAKLSAgICAxOCwgNiwgMjMzLCA2OSwgMTIsIDMwLCAxOCwgNiwgMjMxLCAxODIsIDEyLCAzMCwgMTgsIDYsIDIyNiwgMjI0LCA5OCwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjI5LCAyLCAxMiwgMzAsIDE4LCA2LCAyMjcsIDYxLCAxMiwgMzAsIDE4LCA2LCAyMjUsIDExMCwgMTIsIAotICAgIDMwLCAxOCwgNiwgMjMzLCA4NywgMTIsIDMwLCAxOCwgNiwgMjUxLCAxNjksIDEyLCAzMCwgMTgsIDYsIDIzMiwgMTgzLCAxMiwgCi0gICAgMzAsIDE4LCA2LCAyMzQsIDY2LCAxMiwgMzAsIDE4LCAyMzUsIDI1MCwgMTIsIDMwLCAxOCwgMywgMjU0LCAyMDUsIDEyLCAKLSAgICAzMCwgMTgsIDMsIDI1MiwgMTk4LCAxMiwgMzAsIDE4LCAzLCAyNDYsIDE2OSwgMTIsIDMwLCAxOCwgMywgMjUwLCA0NywgMTIsIAotICAgIDMwLCAxOCwgMywgMjQ3LCAyMDYsIDEyLCAzMCwgMTgsIDMsIDIyMywgODgsIDEyLCAzMCwgMTgsIDMsIDI0NywgMTcxLCAxMiwgCi0gICAgMzAsIDE4LCAzLCAyMjYsIDIyMywgMTIsIDMwLCAxOCwgMywgMjM5LCAyMTUsIDEyLCAzMCwgMTgsIDMsIDIzOSwgMzUsIDEyLCAKLSAgICAzMCwgMTgsIDMsIDIzOCwgMTYsIDEyLCAzMCwgMTgsIDMsIDIzNiwgNjYsIDEyLCAzMCwgMTgsIDMsIDIzNCwgMjA2LCAxMiwgCi0gICAgMzAsIDE4LCAzLCAyMjQsIDY0LCAxMiwgMzAsIDE4LCAzLCAyMzQsIDY0LCAxMiwgMzAsIDE4LCAzLCAyMzMsIDY5LCAxMiwgCi0gICAgMzAsIDE4LCAzLCAyMzEsIDE4MiwgMTIsIDMwLCAxOCwgMywgMzUsIDIyOSwgMiwgMTIsIDMwLCAxOCwgMywgMjI5LCAyLCAKLSAgICAxMiwgMzAsIDE4LCAzLCAyMjcsIDYxLCAxMiwgMzAsIDE4LCAzLCAyMjUsIDExMCwgMTIsIDMwLCAxOCwgMywgMjMzLCA4NywgCi0gICAgMTIsIDMwLCAxOCwgMywgMjUxLCAxNjksIDEyLCAzMCwgMTgsIDMsIDIzMiwgMTgzLCAxMiwgMzAsIDE4LCAzLCAyMzQsIDY2LCAKLSAgICAxMiwgMzAsIDE4LCAyMzMsIDE3NSwgMjQ5LCAyMzYsIDEyLCAzMCwgMTgsIDI0NywgMjA3LCA5OCwgMTIsIDMwLCAxOCwgCi0gICAgMjI2LCAyMjQsIDk4LCAxMiwgMzAsIDE4LCAyMzksIDM2LCA5OCwgMTIsIDMwLCAxOCwgMjMzLCA4OCwgOTgsIDEyLCAzMCwgCi0gICAgMTgsIDIzMSwgMTgzLCA5OCwgMTIsIDMwLCAxOCwgMjMzLCA3MCwgOTgsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTQsIDIwNSwgCi0gICAgMTIsIDMwLCAxOCwgMjcsIDYsIDI1MiwgMTk4LCAxMiwgMzAsIDE4LCAyNywgNiwgMjQ2LCAxNjksIDEyLCAzMCwgMTgsIDI3LCAKLSAgICA2LCAyNTAsIDQ3LCAxMiwgMzAsIDE4LCAyNywgNiwgMjQ3LCAyMDYsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjMsIDg4LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgNiwgMjQ3LCAxNzEsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjYsIDIyMywgMTIsIDMwLCAxOCwgMjcsIDYsIAotICAgIDIzOSwgMjE1LCAxMiwgMzAsIDE4LCAyNywgNiwgMjM5LCAzNSwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzOCwgMTYsIDEyLCAzMCwgCi0gICAgMTgsIDI3LCA2LCAyMzYsIDY2LCAxMiwgMzAsIDE4LCAyNywgNiwgMjM0LCAyMDYsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjQsIAotICAgIDY0LCAxMiwgMzAsIDE4LCAyNywgNiwgMjM0LCA2NCwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzMywgNjksIDEyLCAzMCwgMTgsIAotICAgIDI3LCA2LCAyMzEsIDE4MiwgMTIsIDMwLCAxOCwgMjcsIDYsIDIyNiwgMjI0LCA5OCwgMTIsIDMwLCAxOCwgMjcsIDYsIDIyOSwgCi0gICAgMiwgMTIsIDMwLCAxOCwgMjcsIDYsIDIyNywgNjEsIDEyLCAzMCwgMTgsIDI3LCA2LCAyMjUsIDExMCwgMTIsIDMwLCAxOCwgCi0gICAgMjcsIDYsIDIzMywgODcsIDEyLCAzMCwgMTgsIDI3LCA2LCAyNTEsIDE2OSwgMTIsIDMwLCAxOCwgMjcsIDYsIDIzMiwgMTgzLCAKLSAgICAxMiwgMzAsIDE4LCAyNywgNiwgMjM0LCA2NiwgMTIsIDMwLCAxOCwgMjcsIDIzNSwgMjUwLCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjU0LCAyMDUsIDEyLCAzMCwgMTgsIDI3LCAzLCAyNTIsIDE5OCwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NiwgMTY5LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMywgMjUwLCA0NywgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NywgMjA2LCAxMiwgMzAsIDE4LCAyNywgMywgCi0gICAgMjIzLCA4OCwgMTIsIDMwLCAxOCwgMjcsIDMsIDI0NywgMTcxLCAxMiwgMzAsIDE4LCAyNywgMywgMjI2LCAyMjMsIDEyLCAKLSAgICAzMCwgMTgsIDI3LCAzLCAyMzksIDIxNSwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzOSwgMzUsIDEyLCAzMCwgMTgsIDI3LCAzLCAKLSAgICAyMzgsIDE2LCAxMiwgMzAsIDE4LCAyNywgMywgMjM2LCA2NiwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzNCwgMjA2LCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgMjI0LCA2NCwgMTIsIDMwLCAxOCwgMjcsIDMsIDIzNCwgNjQsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzMsIAotICAgIDY5LCAxMiwgMzAsIDE4LCAyNywgMywgMjMxLCAxODIsIDEyLCAzMCwgMTgsIDI3LCAzLCAzNSwgMjI5LCAyLCAxMiwgMzAsIAotICAgIDE4LCAyNywgMywgMjI5LCAyLCAxMiwgMzAsIDE4LCAyNywgMywgMjI3LCA2MSwgMTIsIDMwLCAxOCwgMjcsIDMsIDIyNSwgCi0gICAgMTEwLCAxMiwgMzAsIDE4LCAyNywgMywgMjMzLCA4NywgMTIsIDMwLCAxOCwgMjcsIDMsIDI1MSwgMTY5LCAxMiwgMzAsIDE4LCAKLSAgICAyNywgMywgMjMyLCAxODMsIDEyLCAzMCwgMTgsIDI3LCAzLCAyMzQsIDY2LCAxMiwgMzAsIDE4LCAyNywgMjMzLCAxNzUsIAotICAgIDI0OSwgMjM2LCAxMiwgMzAsIDE4LCAyNywgMjQ3LCAyMDcsIDk4LCAxMiwgMzAsIDE4LCAyNywgMjI2LCAyMjQsIDk4LCAxMiwgCi0gICAgMzAsIDE4LCAyNywgMjM5LCAzNiwgOTgsIDEyLCAzMCwgMTgsIDI3LCAyMzMsIDg4LCA5OCwgMTIsIDMwLCAxOCwgMjcsIAotICAgIDIzMSwgMTgzLCA5OCwgMTIsIDMwLCAxOCwgMjcsIDIzMywgNzAsIDk4LCAxMiwgMTgsIDYsIDI0OSwgMjMwLCAxMiwgMTgsIAotICAgIDMsIDI0OSwgMjMwLCAxMiwgMTgsIDIxLCAyMjMsIDg5LCAxMiwgMTgsIDIxLCAxMTgsIDEyLCAxOCwgMjEsIDExMywgMTIsIAotICAgIDE4LCAyMSwgMTY2LCAxMiwgMTgsIDIxLCAxNTgsIDEyLCAxOCwgMjEsIDE3MywgMTIsIDE4LCAyMSwgMTgzLCAxMiwgMTgsIAotICAgIDIxLCAxOTQsIDEyLCAxOCwgMjEsIDE4NywgMTIsIDE4LCAyMSwgMTkyLCAxMiwgMTU5LCAyMSwgMjIzLCA4OSwgMTIsIDE1OSwgCi0gICAgMjEsIDExOCwgMTIsIDE1OSwgMjEsIDExMywgMTIsIDE1OSwgMjEsIDE2NiwgMTIsIDE1OSwgMjEsIDE1OCwgMTIsIDE1OSwgCi0gICAgMjEsIDE3MywgMTIsIDE1OSwgMjEsIDE4MywgMTIsIDE1OSwgMjEsIDE5NCwgMTIsIDE1OSwgMjEsIDE4NywgMTIsIDE1OSwgCi0gICAgMjEsIDE5MiwgMTIsIDMwLCAyMSwgMjIzLCA4OSwgMTIsIDMwLCAyMSwgMTE4LCAxMiwgMzAsIDIxLCAxMTMsIDEyLCAzMCwgCi0gICAgMjEsIDE2NiwgMTIsIDMwLCAyMSwgMTU4LCAxMiwgMzAsIDIxLCAxNzMsIDEyLCAzMCwgMjEsIDE4MywgMTIsIDMwLCAyMSwgCi0gICAgMTk0LCAxMiwgMzAsIDIxLCAxODcsIDEyLCAzMCwgMjEsIDE5MiwgMTIsIDMwLCAxOCwgMjEsIDIyMywgODksIDEyLCAzMCwgCi0gICAgMTgsIDIxLCAxMTgsIDEyLCAzMCwgMTgsIDIxLCAxMTMsIDEyLCAzMCwgMTgsIDIxLCAxNjYsIDEyLCAzMCwgMTgsIDIxLCAKLSAgICAxNTgsIDEyLCAzMCwgMTgsIDIxLCAxNzMsIDEyLCAzMCwgMTgsIDIxLCAxODMsIDEyLCAzMCwgMTgsIDIxLCAxOTQsIDEyLCAKLSAgICAzMCwgMTgsIDIxLCAxODcsIDEyLCAzMCwgMTgsIDIxLCAxOTIsIDEyLCAxODksIDIxLCAyMjMsIDg5LCAxMiwgMTg5LCAyMSwgCi0gICAgMTE4LCAxMiwgMTg5LCAyMSwgMTEzLCAxMiwgMTg5LCAyMSwgMTY2LCAxMiwgMTg5LCAyMSwgMTU4LCAxMiwgMTg5LCAyMSwgCi0gICAgMTczLCAxMiwgMTg5LCAyMSwgMTgzLCAxMiwgMTg5LCAyMSwgMTk0LCAxMiwgMTg5LCAyMSwgMTg3LCAxMiwgMTg5LCAyMSwgCi0gICAgMTkyLCAyMzcsIDUwLCA3NSwgMjQ4LCA0NSwgMjI0LCAxMTEsIDIzNywgNTAsIDc1LCAyMjgsIDE1MiwgMjI0LCAxMTEsIAotICAgIDIzNywgNTAsIDc1LCAyMjQsIDEzMSwgMjI0LCAxMTEsIDIzNywgNTAsIDc1LCAyMzQsIDI0NSwgMjI0LCAxMTEsIDIzNywgCi0gICAgNTAsIDc1LCAyMzEsIDIzMSwgMjQ4LCAxMTgsIDIzNywgNTAsIDc1LCAyNDUsIDIyOCwgMjQ4LCAxMTgsIDIzNywgNTAsIDc1LCAKLSAgICA2MywgMjQ4LCAxMTgsIDIzNywgNTAsIDc1LCAxNjgsIDEwNiwgMjUxLCAxOTAsIDIzNywgNTAsIDc1LCAxMzUsIDEwNiwgCi0gICAgMjUxLCAxOTAsIDIzNywgNTAsIDc1LCAxNTIsIDEwNiwgMjUxLCAxOTAsIDIzNywgNTAsIDc1LCAyNDYsIDI0MywgMTA2LCAKLSAgICAyNTEsIDE5MCwgMjM3LCA1MCwgNzUsIDI0NywgMzcsIDEwNiwgMjUxLCAxOTAsIDIzNywgNTAsIDc1LCAyMjgsIDIxNywgCi0gICAgMTA2LCAyNTEsIDE5MCwgMjM3LCA1MCwgNzUsIDIyOSwgMTYzLCAxMDYsIDI1MSwgMTkwLCAyMzcsIDUwLCA3NSwgMjQ4LCAKLSAgICAyMCwgMTA2LCAyNTEsIDE5MCwgMjM3LCA1MCwgNzUsIDIzNSwgNjEsIDEwNiwgMjUxLCAxOTAsIDIzNywgNTAsIDc1LCAxNjgsIAotICAgIDEwNiwgMjUzLCA0NSwgMjM3LCA1MCwgNzUsIDEzNSwgMTA2LCAyNTMsIDQ1LCAyMzcsIDUwLCA3NSwgMTUyLCAxMDYsIDI1MywgCi0gICAgNDUsIDIzNywgNTAsIDc1LCAyNDYsIDI0MywgMTA2LCAyNTMsIDQ1LCAyMzcsIDUwLCA3NSwgMjQ3LCAzNywgMTA2LCAyNTMsIAotICAgIDQ1LCAyMzcsIDUwLCA3NSwgMjI4LCAyMTcsIDEwNiwgMjUzLCA0NSwgMjM3LCA1MCwgNzUsIDIyOSwgMTYzLCAxMDYsIDI1MywgCi0gICAgNDUsIDIzNywgNTAsIDc1LCAyNDgsIDIwLCAxMDYsIDI1MywgNDUsIDIzNywgNTAsIDc1LCAyMzUsIDYxLCAxMDYsIDI1MywgCi0gICAgNDUsIDIzNywgNTAsIDc1LCAxNjgsIDEwNiwgMjUxLCAxMDUsIDIzNywgNTAsIDc1LCAxMzUsIDEwNiwgMjUxLCAxMDUsIAotICAgIDIzNywgNTAsIDc1LCAxNTIsIDEwNiwgMjUxLCAxMDUsIDIzNywgNTAsIDc1LCAyNDYsIDI0MywgMTA2LCAyNTEsIDEwNSwgCi0gICAgMjM3LCA1MCwgNzUsIDI0NywgMzcsIDEwNiwgMjUxLCAxMDUsIDIzNywgNTAsIDc1LCAyMjgsIDIxNywgMTA2LCAyNTEsIAotICAgIDEwNSwgMjM3LCA1MCwgNzUsIDIyOSwgMTYzLCAxMDYsIDI1MSwgMTA1LCAyMzcsIDUwLCA3NSwgMjQ4LCAyMCwgMTA2LCAKLSAgICAyNTEsIDEwNSwgMjM3LCA1MCwgNzUsIDIzNSwgNjEsIDEwNiwgMjUxLCAxMDUsIDIzNywgNTAsIDc1LCAyMzMsIDEyLCAyMzcsIAotICAgIDUwLCA3NSwgMjM0LCAzMCwgMjM3LCA1MCwgNzUsIDI1MywgNDYsIDIzNywgNTAsIDc1LCAyNTEsIDEzNywgMjM3LCA1MCwgCi0gICAgNzUsIDIyOCwgMTI1LCAyMzcsIDUwLCA3NSwgMjI3LCAyMjksIDIzNywgNTAsIDc1LCAyNTQsIDQ0LCAyMzcsIDUwLCA3NSwgCi0gICAgMjI0LCAxMDcsIDIzNywgNTAsIDc1LCAyMzksIDExMSwgMjM3LCA1MCwgNzUsIDI1MywgNjYsIDEwOSwgNzUsIDE2OSwgMjUzLCAKLSAgICA2NiwgMTA5LCA3NSwgMjQ0LCAyMTEsIDEwOSwgNzUsIDI0NCwgMjEwLCAxMDksIDc1LCAyNDQsIDIwOSwgMTA5LCA3NSwgCi0gICAgMjQ0LCAyMDgsIDEwOSwgNzUsIDI0NCwgMjA3LCAxMDksIDc1LCAyNDQsIDIwNiwgMTA5LCA3NSwgMjQ0LCAyMDUsIDEwOSwgCi0gICAgNzUsIDI0NCwgMjA0LCAxMDksIDc1LCAyNDQsIDIwMywgMTA5LCA3NSwgMjQ0LCAyMDIsIDEwOSwgNzUsIDI0NCwgMjAxLCAKLSAgICAxMDksIDc1LCAyNDQsIDIwMCwgMTA5LCA3NSwgMjQ0LCAxOTksIDEwOSwgNzUsIDI0NCwgMTk4LCAxMDksIDc1LCAyNDQsIAotICAgIDE5NywgMTA5LCA3NSwgMjQ0LCAxOTYsIDEwOSwgNzUsIDI0NCwgMTk1LCAxMDksIDc1LCAyNDQsIDE5NCwgMTA5LCA3NSwgCi0gICAgMjQ0LCAxOTMsIDEwOSwgNzUsIDI0NCwgMTkyLCAxMDksIDc1LCAyNDQsIDE5MSwgMTA5LCA3NSwgMjQ0LCAxOTAsIDEwOSwgCi0gICAgNzUsIDI0NCwgMTg5LCAxMDksIDc1LCAyNDQsIDE4OCwgMTA5LCA3NSwgMjQ0LCAxODcsIDEwOSwgNzUsIDI0NCwgMTg2LCAKLSAgICAxMDksIDc1LCAyNDQsIDE4NSwgMTA5LCA3NSwgMjQ0LCAxODQsIDEwOSwgNzUsIDI0NCwgMTgzLCAxMDksIDc1LCAyNDQsIAotICAgIDE4MiwgMTA5LCA3NSwgMjQ0LCAxODEsIDEwOSwgNzUsIDI0NCwgMTgwLCAxMDksIDc1LCAyNDQsIDE3OSwgMTA5LCA3NSwgCi0gICAgMjQ0LCAxNzgsIDEwOSwgNzUsIDI0NCwgMTc3LCAxMDksIDc1LCAyNDQsIDE3NiwgMTA5LCA3NSwgMjQ0LCAxNzUsIDEwOSwgCi0gICAgNzUsIDI0NCwgMTc0LCAxMDksIDc1LCAyNDQsIDE3MywgMTA5LCA3NSwgMjQ0LCAxNzIsIDEwOSwgNzUsIDI0NCwgMTcxLCAKLSAgICAxMDksIDc1LCAyNDQsIDE3MCwgMTA5LCA3NSwgMjQ0LCAxNjksIDEwOSwgNzUsIDI0NCwgMTY4LCAxMDksIDc1LCAyNDQsIAotICAgIDE2NywgMTA5LCA3NSwgMjQ0LCAxNjYsIDEwOSwgNzUsIDI0NCwgMTY1LCAxMDksIDc1LCAyNDQsIDE2NCwgMTA5LCA3NSwgCi0gICAgMjQ0LCAxNjMsIDEwOSwgNzUsIDYxLCAyNTMsIDY2LCAxMDksIDc1LCAyMjUsIDI5LCAxMDksIDc1LCAyMjUsIDI4LCAxMDksIAotICAgIDc1LCAyMjUsIDI3LCAxMDksIDc1LCAyMjUsIDI2LCAxMDksIDc1LCAyMjUsIDI1LCAxMDksIDc1LCAyMjUsIDI0LCAxMDksIAotICAgIDc1LCAyMjUsIDIzLCAxMDksIDc1LCAyMjUsIDIyLCAxMDksIDc1LCAyMjUsIDIxLCAxMDksIDc1LCAyMjUsIDIwLCAxMDksIAotICAgIDc1LCAyMjUsIDE5LCAxMDksIDc1LCAyMjUsIDE4LCAxMDksIDc1LCAyMjUsIDE3LCAxMDksIDc1LCAyMjUsIDE2LCAxMDksIAotICAgIDc1LCAyMjUsIDE1LCAxMDksIDc1LCAyMjUsIDE0LCAxMDksIDc1LCAyMjUsIDEzLCAxMDksIDc1LCAyMjUsIDEyLCAxMDksIAotICAgIDc1LCAyMjUsIDExLCAxMDksIDc1LCAyMjUsIDEwLCAxMDksIDc1LCAyMjUsIDksIDEwOSwgNzUsIDIyNSwgOCwgMTA5LCA3NSwgCi0gICAgMjI1LCA3LCAxMDksIDc1LCAyMjUsIDYsIDEwOSwgNzUsIDIyNSwgNSwgMTA5LCA3NSwgMjI1LCA0LCAxMDksIDc1LCAyMjUsIAotICAgIDMsIDEwOSwgNzUsIDIyNSwgMiwgMTA5LCA3NSwgMjI1LCAxLCAxMDksIDc1LCAyMjUsIDAsIDEwOSwgNzUsIDIyNCwgMjU1LCAKLSAgICAxMDksIDc1LCAyMjQsIDI1NCwgMTA5LCA3NSwgMjI0LCAyNTMsIDEwOSwgNzUsIDIyNCwgMjUyLCAxMDksIDc1LCAyMjQsIAotICAgIDI1MSwgMTA5LCA3NSwgMjI0LCAyNTAsIDEwOSwgNzUsIDIyNCwgMjQ5LCAxMDksIDc1LCAyMjQsIDI0OCwgMTA5LCA3NSwgCi0gICAgMjI0LCAyNDcsIDEwOSwgNzUsIDIyNCwgMjQ2LCAxMDksIDc1LCAyMjQsIDI0NSwgMTA5LCA3NSwgMjI0LCAyNDQsIDEwOSwgCi0gICAgNzUsIDIyNCwgMjQzLCAxMDksIDc1LCAyMjQsIDI0MiwgMTA5LCA3NSwgMjI0LCAyNDEsIDEwOSwgNzUsIDIyNCwgMjQwLCAKLSAgICAxMDksIDc1LCAyMjQsIDIzOSwgMTA5LCA3NSwgMjI0LCAyMzgsIDEwOSwgNzUsIDIyNCwgMjM3LCA5LCAxMSwgMjQ0LCA2MSwgCi0gICAgOSwgMTEsIDI0NCwgNjAsIDksIDExLCAyNDQsIDU5LCA5LCAxMSwgMjQ0LCA1OCwgOSwgMTEsIDI0NCwgNTcsIDksIDExLCAKLSAgICAyNDQsIDU2LCA5LCAxMSwgMjQ0LCA1NSwgOSwgMTEsIDI0NCwgNTQsIDksIDExLCAyNDQsIDUzLCA5LCAxMSwgMjQ0LCA1MiwgCi0gICAgOSwgMTEsIDI0NCwgNTEsIDksIDExLCAyNDQsIDUwLCA5LCAxMSwgMjQ0LCA0OSwgOSwgMTEsIDI0NCwgNDgsIDksIDExLCAKLSAgICAyNDQsIDQ3LCA5LCAxMSwgMjQ0LCA0NiwgOSwgMTEsIDI0NCwgNDUsIDksIDExLCAyNDQsIDQ0LCA5LCAxMSwgMjQ0LCA0MywgCi0gICAgOSwgMTEsIDI0NCwgNDIsIDksIDExLCAyNDQsIDQxLCA5LCAxMSwgMjQ0LCA0MCwgOSwgMTEsIDI0NCwgMzksIDksIDExLCAKLSAgICAyNDQsIDM4LCA5LCAxMSwgMjQ0LCAzNywgOSwgMTEsIDI0NCwgMzYsIDksIDExLCAyNDQsIDM1LCA5LCAxMSwgMjQ0LCAzNCwgCi0gICAgOSwgMTEsIDI0NCwgMzMsIDksIDExLCAyNDQsIDMyLCA5LCAxMSwgMjQ0LCAzMSwgOSwgMTEsIDI0NCwgMzAsIDksIDExLCAKLSAgICAyNDQsIDI5LCA5LCAxMSwgMjQ0LCAyOCwgOSwgMTEsIDI0NCwgMjcsIDksIDExLCAyNDQsIDI2LCA5LCAxMSwgMjQ0LCAyNSwgCi0gICAgOSwgMTEsIDI0NCwgMjQsIDksIDExLCAyNDQsIDIzLCA5LCAxMSwgMjQ0LCAyMiwgOSwgMTEsIDI0NCwgMjEsIDksIDExLCAKLSAgICAyNDQsIDIwLCA5LCAxMSwgMjQ0LCAxOSwgOSwgMTEsIDI0NCwgMTgsIDksIDExLCAyNDQsIDE3LCA5LCAxMSwgMjQ0LCAxNiwgCi0gICAgOSwgMTEsIDI0NCwgMTUsIDksIDExLCAyNDQsIDE0LCA5LCAxMSwgMjQ0LCAxMywgOSwgMTEsIDI0NCwgMTIsIDksIDExLCAKLSAgICAyNDQsIDExLCA5LCAxMSwgMjQ0LCAxMCwgOSwgMTEsIDI0NCwgOSwgOSwgMTEsIDI0NCwgOCwgOSwgMTEsIDI0NCwgNywgOSwgCi0gICAgMTEsIDI0NCwgNiwgOSwgMTEsIDI0NCwgNSwgOSwgMTEsIDI0NCwgNCwgOSwgMTEsIDI0NCwgMywgOSwgMTEsIDI0NCwgMiwgCi0gICAgOSwgMTEsIDI0NCwgMSwgOSwgMTEsIDI0NCwgMCwgOSwgMTEsIDI0MywgMjU1LCA5LCAxMSwgMjQzLCAyNTQsIDksIDExLCAKLSAgICAyNDMsIDI1MywgOSwgMTEsIDI0MywgMjUyLCA5LCAxMSwgMjQzLCAyNTEsIDksIDExLCAyNDMsIDI1MCwgOSwgMTEsIDI0MywgCi0gICAgMjQ5LCA5LCAxMSwgMjQzLCAyNDgsIDksIDExLCAyNDMsIDI0NywgOSwgMTEsIDI0MywgMjQ2LCA5LCAxMSwgMjQzLCAyNDUsIAotICAgIDksIDExLCAyNDMsIDI0NCwgOSwgMTEsIDI0MywgMjQzLCA5LCAxMSwgMjQzLCAyNDIsIDksIDExLCAyNDMsIDI0MSwgOSwgCi0gICAgMTEsIDI0MywgMjQwLCA5LCAxMSwgMjQzLCAyMzksIDksIDExLCAyNDMsIDIzOCwgOSwgMTEsIDI0MywgMjM3LCA5LCAxMSwgCi0gICAgMjQzLCAyMzYsIDksIDExLCAyNDMsIDIzNSwgOSwgMTEsIDI0MywgMjM0LCA5LCAxMSwgMjQzLCAyMzMsIDksIDExLCAyNDMsIAotICAgIDIzMiwgOSwgMTEsIDI0MywgMjMxLCA5LCAxMSwgMjQzLCAyMzAsIDksIDExLCAyNDMsIDIyOSwgOSwgMTEsIDI0MywgMjI4LCAKLSAgICA5LCAxMSwgMjQzLCAyMjcsIDksIDExLCAyNDMsIDIyNiwgOSwgMTEsIDI0MywgMjI1LCA5LCAxMSwgMjQzLCAyMjQsIDksIAotICAgIDExLCAyNDMsIDIyMywgOSwgMTEsIDI0MywgMjIyLCA5LCAxMSwgMjQzLCAyMjEsIDksIDExLCAyNDMsIDIyMCwgOSwgMTEsIAotICAgIDI0MywgMjE5LCA5LCAxMSwgMjQzLCAyMTgsIDksIDExLCAyNDMsIDIxNywgOSwgMTEsIDI0MywgMjE2LCA5LCAxMSwgMjQzLCAKLSAgICAyMTUsIDksIDExLCAyNDMsIDIxNCwgOSwgMTEsIDI0MywgMjEzLCA5LCAxMSwgMjQzLCAyMTIsIDksIDExLCAyNDMsIDIxMSwgCi0gICAgOSwgMTEsIDI0MywgMjEwLCA5LCAxMSwgMjQzLCAyMDksIDksIDExLCAyNDMsIDIwOCwgOSwgMTEsIDI0MywgMjA3LCA5LCAKLSAgICAxMSwgMjQzLCAyMDYsIDksIDExLCAyNDMsIDIwNSwgOSwgMTEsIDI0MywgMjA0LCA5LCAxMSwgMjQzLCAyMDMsIDksIDExLCAKLSAgICAyNDMsIDIwMiwgOSwgMTEsIDI0MywgMjAxLCA5LCAxMSwgMjQzLCAyMDAsIDksIDExLCAyNDMsIDE5OSwgOSwgMTEsIDI0MywgCi0gICAgMTk4LCA5LCAxMSwgMjQzLCAxOTcsIDksIDExLCAyNDMsIDE5NiwgOSwgMTEsIDI0MywgMTk1LCA5LCAxMSwgMjQzLCAxOTQsIAotICAgIDksIDExLCAyNDMsIDE5MywgOSwgMTEsIDI0MywgMTkyLCA5LCAxMSwgMjQzLCAxOTEsIDksIDExLCAyNDMsIDE5MCwgOSwgCi0gICAgMTEsIDI0MywgMTg5LCA5LCAxMSwgMjQzLCAxODgsIDksIDExLCAyNDMsIDE4NywgOSwgMTEsIDI0MywgMTg2LCA5LCAxMSwgCi0gICAgMjQzLCAxODUsIDksIDExLCAyNDMsIDE4NCwgOSwgMTEsIDI0MywgMTgzLCA5LCAxMSwgMjQzLCAxODIsIDksIDExLCAyNDMsIAotICAgIDE4MSwgOSwgMTEsIDI0MywgMTgwLCA5LCAxMSwgMjQzLCAxNzksIDksIDExLCAyNDMsIDE3OCwgOSwgMTEsIDI0MywgMTc3LCAKLSAgICA5LCAxMSwgMjQzLCAxNzYsIDksIDExLCAyNDMsIDE3NSwgOSwgMTEsIDI0MywgMTc0LCA5LCAxMSwgMjQzLCAxNzMsIDksIAotICAgIDExLCAyNDMsIDE3MiwgOSwgMTEsIDI0MywgMTcxLCA5LCAxMSwgMjQzLCAxNzAsIDksIDExLCAyNDMsIDE2OSwgOSwgMTEsIAotICAgIDI0MywgMTY4LCA5LCAxMSwgMjQzLCAxNjcsIDksIDExLCAyNDMsIDE2NiwgOSwgMTEsIDI0MywgMTY1LCA5LCAxMSwgMjQzLCAKLSAgICAxNjQsIDksIDExLCAyNDMsIDE2MywgOSwgMTEsIDI0MywgMTYyLCA5LCAxMSwgMjQzLCAxNjEsIDksIDExLCAyNDMsIDE2MCwgCi0gICAgOSwgMTEsIDI0MywgMTU5LCA5LCAxMSwgMjQzLCAxNTgsIDksIDExLCAyNDMsIDE1NywgOSwgMTEsIDI0MywgMTU2LCA5LCAKLSAgICAxMSwgMjQzLCAxNTUsIDksIDExLCAyNDMsIDE1NCwgOSwgMTEsIDI0MywgMTUzLCA5LCAxMSwgMjQzLCAxNTIsIDksIDExLCAKLSAgICAyNDMsIDE1MSwgOSwgMTEsIDI0MywgMTUwLCA5LCAxMSwgMjQzLCAxNDksIDksIDExLCAyNDMsIDE0OCwgOSwgMTEsIDI0MywgCi0gICAgMTQ3LCA5LCAxMSwgMjQzLCAxNDYsIDksIDExLCAyNDMsIDE0NSwgOSwgMTEsIDI0MywgMTQ0LCA5LCAxMSwgMjQzLCAxNDMsIAotICAgIDksIDExLCAyNDMsIDE0MiwgOSwgMTEsIDI0MywgMTQxLCA5LCAxMSwgMjQzLCAxNDAsIDksIDExLCAyNDMsIDEzOSwgOSwgCi0gICAgMTEsIDI0MywgMTM4LCA5LCAxMSwgMjQzLCAxMzcsIDksIDExLCAyNDMsIDEzNiwgOSwgMTEsIDI0MywgMTM1LCA5LCAxMSwgCi0gICAgMjQzLCAxMzQsIDksIDExLCAyNDMsIDEzMywgOSwgMTEsIDI0MywgMTMyLCA5LCAxMSwgMjQzLCAxMzEsIDksIDExLCAyNDMsIAotICAgIDEzMCwgOSwgMTEsIDI0MywgMTI5LCA5LCAxMSwgMjQzLCAxMjgsIDksIDExLCAyNDMsIDEyNywgOSwgMTEsIDI0MywgMTI2LCAKLSAgICA5LCAxMSwgMjQzLCAxMjUsIDksIDExLCAyNDMsIDEyNCwgOSwgMTEsIDI0MywgMTIzLCA5LCAxMSwgMjQzLCAxMjIsIDksIAotICAgIDExLCAyNDMsIDEyMSwgOSwgMTEsIDI0MywgMTIwLCA5LCAxMSwgMjQzLCAxMTksIDksIDExLCAyNDMsIDExOCwgOSwgMTEsIAotICAgIDI0MywgMTE3LCA5LCAxMSwgMjQzLCAxMTYsIDksIDExLCAyNDMsIDExNSwgOSwgMTEsIDI0MywgMTE0LCA5LCAxMSwgMjQzLCAKLSAgICAxMTMsIDksIDExLCAyNDMsIDExMiwgOSwgMTEsIDI0MywgMTExLCA5LCAxMSwgMjQzLCAxMTAsIDksIDExLCAyNDMsIDEwOSwgCi0gICAgOSwgMTEsIDI0MywgMTA4LCA5LCAxMSwgMjQzLCAxMDcsIDksIDExLCAyNDMsIDEwNiwgOSwgMTEsIDI0MywgMTA1LCA5LCAKLSAgICAxMSwgMjQzLCAxMDQsIDksIDExLCAyNDMsIDEwMywgOSwgMTEsIDI0MywgMTAyLCA5LCAxMSwgMjQzLCAxMDEsIDksIDExLCAKLSAgICAyNDMsIDEwMCwgOSwgMTEsIDI0MywgOTksIDksIDExLCAyNDMsIDk4LCA5LCAxMSwgMjQzLCA5NywgOSwgMTEsIDI0MywgOTYsIAotICAgIDksIDExLCAyNDMsIDk1LCA5LCAxMSwgMjQzLCA5NCwgOSwgMTEsIDI0MywgOTMsIDksIDExLCAyNDMsIDkyLCA5LCAxMSwgCi0gICAgMjQzLCA5MSwgOSwgMTEsIDI0MywgOTAsIDksIDExLCAyNDMsIDg5LCA5LCAxMSwgMjQzLCA4OCwgOSwgMTEsIDI0MywgODcsIAotICAgIDksIDExLCAyNDMsIDg2LCA5LCAxMSwgMjQzLCA4NSwgOSwgMTEsIDI0MywgODQsIDksIDExLCAyNDMsIDgzLCA5LCAxMSwgCi0gICAgMjQzLCA4MiwgOSwgMTEsIDI0MywgODEsIDksIDExLCAyNDMsIDgwLCA5LCAxMSwgMjQzLCA3OSwgOSwgMTEsIDI0MywgNzgsIAotICAgIDksIDExLCAyNDMsIDc3LCA5LCAxMSwgMjQzLCA3NiwgOSwgMTEsIDI0MywgNzUsIDksIDExLCAyNDMsIDc0LCA5LCAxMSwgCi0gICAgMjQzLCA3MywgOSwgMTEsIDI0MywgNzIsIDksIDExLCAyNDMsIDcxLCA5LCAxMSwgMjQzLCA3MCwgOSwgMTEsIDI0MywgNjksIAotICAgIDksIDExLCAyNDMsIDY4LCA5LCAxMSwgMjQzLCA2NywgOSwgMTEsIDI0MywgNjYsIDksIDExLCAyNDMsIDY1LCA5LCAxMSwgCi0gICAgMjQzLCA2NCwgOSwgMTEsIDI0MywgNjMsIDksIDExLCAyNDMsIDYyLCA5LCAxMSwgMjQzLCA2MSwgOSwgMTEsIDI0MywgNjAsIAotICAgIDksIDExLCAyNDMsIDU5LCA5LCAxMSwgMjQzLCA1OCwgOSwgMTEsIDI0MywgNTcsIDksIDExLCAyNDMsIDU2LCA5LCAxMSwgCi0gICAgMjQzLCA1NSwgOSwgMTEsIDI0MywgNTQsIDksIDExLCAyNDMsIDUzLCA5LCAxMSwgMjQzLCA1MiwgOSwgMTEsIDI0MywgNTEsIAotICAgIDksIDExLCAyNDMsIDUwLCA5LCAxMSwgMjQzLCA0OSwgOSwgMTEsIDI0MywgNDgsIDksIDExLCAyNDMsIDQ3LCA5LCAxMSwgCi0gICAgMjQzLCA0NiwgOSwgMTEsIDI0MywgNDUsIDksIDExLCAyNDMsIDQ0LCA5LCAxMSwgMjQzLCA0MywgOSwgMTEsIDI0MywgNDIsIAotICAgIDksIDExLCAyNDMsIDQxLCA5LCAxMSwgMjQzLCA0MCwgOSwgMTEsIDI0MywgMzksIDksIDExLCAyNDMsIDM4LCA5LCAxMSwgCi0gICAgMjQzLCAzNywgOSwgMTEsIDI0MywgMzYsIDksIDExLCAyNDMsIDM1LCA5LCAxMSwgMjQzLCAzNCwgOSwgMTEsIDI0MywgMzMsIAotICAgIDksIDExLCAyNDMsIDMyLCA5LCAxMSwgMjQzLCAzMSwgOSwgMTEsIDI0MywgMzAsIDksIDExLCAyNDMsIDI5LCA5LCAxMSwgCi0gICAgMjQzLCAyOCwgOSwgMTEsIDI0MywgMjcsIDksIDExLCAyNDMsIDI2LCA5LCAxMSwgMjQzLCAyNSwgOSwgMTEsIDI0MywgMjQsIAotICAgIDksIDExLCAyNDMsIDIzLCA5LCAxMSwgMjQzLCAyMiwgOSwgMTEsIDI0MywgMjEsIDksIDExLCAyNDMsIDIwLCA5LCAxMSwgCi0gICAgMjQzLCAxOSwgOSwgMTEsIDI0MywgMTgsIDksIDExLCAyNDMsIDE3LCA5LCAxMSwgMjQzLCAxNiwgOSwgMTEsIDI0MywgMTUsIAotICAgIDksIDExLCAyNDMsIDE0LCA5LCAxMSwgMjQzLCAxMywgOSwgMTEsIDI0MywgMTIsIDksIDExLCAyNDMsIDExLCA5LCAxMSwgCi0gICAgMjQzLCAxMCwgOSwgMTEsIDI0MywgOSwgOSwgMTEsIDI0MywgOCwgOSwgMTEsIDI0MywgNywgOSwgMTEsIDI0MywgNiwgOSwgCi0gICAgMTEsIDI0MywgNSwgOSwgMTEsIDI0MywgNCwgOSwgMTEsIDI0MywgMywgOSwgMTEsIDI0MywgMiwgOSwgMTEsIDI0MywgMSwgCi0gICAgOSwgMTEsIDI0MywgMCwgOSwgMTEsIDI0MiwgMjU1LCA5LCAxMSwgMjQyLCAyNTQsIDksIDExLCAyNDIsIDI1MywgOSwgMTEsIAotICAgIDI0MiwgMjUyLCA5LCAxMSwgMjQyLCAyNTEsIDksIDExLCAyNDIsIDI1MCwgOSwgMTEsIDI0MiwgMjQ5LCA5LCAxMSwgMjQyLCAKLSAgICAyNDgsIDksIDExLCAyNDIsIDI0NywgOSwgMTEsIDI0MiwgMjQ2LCA5LCAxMSwgMjQyLCAyNDUsIDksIDExLCAyNDIsIDI0NCwgCi0gICAgOSwgMTEsIDI0MiwgMjQzLCA5LCAxMSwgMjQyLCAyNDIsIDksIDExLCAyNDIsIDI0MSwgOSwgMTEsIDI0MiwgMjQwLCA5LCAKLSAgICAxMSwgMjQyLCAyMzksIDksIDExLCAyNDIsIDIzOCwgOSwgMTEsIDI0MiwgMjM3LCA5LCAxMSwgMjQyLCAyMzYsIDksIDExLCAKLSAgICAyNDIsIDIzNSwgOSwgMTEsIDI0MiwgMjM0LCA5LCAxMSwgMjQyLCAyMzMsIDksIDExLCAyNDIsIDIzMiwgOSwgMTEsIDI0MiwgCi0gICAgMjMxLCA5LCAxMSwgMjQyLCAyMzAsIDksIDExLCAyNDIsIDIyOSwgOSwgMTEsIDI0MiwgMjI4LCA5LCAxMSwgMjQyLCAyMjcsIAotICAgIDksIDExLCAyNDIsIDIyNiwgOSwgMTEsIDI0MiwgMjI1LCA5LCAxMSwgMjQyLCAyMjQsIDksIDExLCAyNDIsIDIyMywgOSwgCi0gICAgMTEsIDI0MiwgMjIyLCA5LCAxMSwgMjQyLCAyMjEsIDksIDExLCAyNDIsIDIyMCwgOSwgMTEsIDI0MiwgMjE5LCA5LCAxMSwgCi0gICAgMjQyLCAyMTgsIDksIDExLCAyNDIsIDIxNywgOSwgMTEsIDI0MiwgMjE2LCA5LCAxMSwgMjQyLCAyMTUsIDksIDExLCAyNDIsIAotICAgIDIxNCwgOSwgMTEsIDI0MiwgMjEzLCA5LCAxMSwgMjQyLCAyMTIsIDksIDExLCAyNDIsIDIxMSwgOSwgMTEsIDI0MiwgMjEwLCAKLSAgICA5LCAxMSwgMjQyLCAyMDksIDksIDExLCAyNDIsIDIwOCwgOSwgMTEsIDI0MiwgMjA3LCA5LCAxMSwgMjQyLCAyMDYsIDksIAotICAgIDExLCAyNDIsIDIwNSwgOSwgMTEsIDI0MiwgMjA0LCA5LCAxMSwgMjQyLCAyMDMsIDksIDExLCAyNDIsIDIwMiwgOSwgMTEsIAotICAgIDI0MiwgMjAxLCA5LCAxMSwgMjQyLCAyMDAsIDksIDExLCAyNDIsIDE5OSwgOSwgMTEsIDI0MiwgMTk4LCA5LCAxMSwgMjQyLCAKLSAgICAxOTcsIDksIDExLCAyNDIsIDE5NiwgOSwgMTEsIDI0MiwgMTk1LCA5LCAxMSwgMjQyLCAxOTQsIDksIDExLCAyNDIsIDE5MywgCi0gICAgOSwgMTEsIDI0MiwgMTkyLCA5LCAxMSwgMjQyLCAxOTEsIDksIDExLCAyNDIsIDE5MCwgOSwgMTEsIDI0MiwgMTg5LCA5LCAKLSAgICAxMSwgMjQyLCAxODgsIDksIDExLCAyNDIsIDE4NywgOSwgMTEsIDI0MiwgMTg2LCA5LCAxMSwgMjQyLCAxODUsIDksIDExLCAKLSAgICAyNDIsIDE4NCwgOSwgMTEsIDI0MiwgMTgzLCA5LCAxMSwgMjQyLCAxODIsIDksIDExLCAyNDIsIDE4MSwgOSwgMTEsIDI0MiwgCi0gICAgMTgwLCA5LCAxMSwgMjQyLCAxNzksIDksIDExLCAyNDIsIDE3OCwgOSwgMTEsIDI0MiwgMTc3LCA5LCAxMSwgMjQyLCAxNzYsIAotICAgIDksIDExLCAyNDIsIDE3NSwgOSwgMTEsIDI0MiwgMTc0LCA5LCAxMSwgMjQyLCAxNzMsIDksIDExLCAyNDIsIDE3MiwgOSwgCi0gICAgMTEsIDI0MiwgMTcxLCA5LCAxMSwgMjQyLCAxNzAsIDksIDExLCAyNDIsIDE2OSwgOSwgMTEsIDI0MiwgMTY4LCA5LCAxMSwgCi0gICAgMjQyLCAxNjcsIDksIDExLCAyNDIsIDE2NiwgOSwgMTEsIDI0MiwgMTY1LCA5LCAxMSwgMjQyLCAxNjQsIDksIDExLCAyNDIsIAotICAgIDE2MywgOSwgMTEsIDI0MiwgMTYyLCA5LCAxMSwgMjQyLCAxNjEsIDksIDExLCAyNDIsIDE2MCwgOSwgMTEsIDI0MiwgMTU5LCAKLSAgICA5LCAxMSwgMjQyLCAxNTgsIDksIDExLCAyNDIsIDE1NywgOSwgMTEsIDI0MiwgMTU2LCA5LCAxMSwgMjQyLCAxNTUsIDksIAotICAgIDExLCAyNDIsIDE1NCwgOSwgMTEsIDI0MiwgMTUzLCA5LCAxMSwgMjQyLCAxNTIsIDksIDExLCAyNDIsIDE1MSwgOSwgMTEsIAotICAgIDI0MiwgMTUwLCA5LCAxMSwgMjQyLCAxNDksIDksIDExLCAyNDIsIDE0OCwgOSwgMTEsIDI0MiwgMTQ3LCA5LCAxMSwgMjQyLCAKLSAgICAxNDYsIDksIDExLCAyNDIsIDE0NSwgOSwgMTEsIDI0MiwgMTQ0LCA5LCAxMSwgMjQyLCAxNDMsIDksIDExLCAyNDIsIDE0MiwgCi0gICAgOSwgMTEsIDI0MiwgMTQxLCA5LCAxMSwgMjQyLCAxNDAsIDksIDExLCAyNDIsIDEzOSwgOSwgMTEsIDI0MiwgMTM4LCA5LCAKLSAgICAxMSwgMjQyLCAxMzcsIDksIDExLCAyNDIsIDEzNiwgOSwgMTEsIDI0MiwgMTM1LCA5LCAxMSwgMjQyLCAxMzQsIDksIDExLCAKLSAgICAyNDIsIDEzMywgOSwgMTEsIDI0MiwgMTMyLCA5LCAxMSwgMjQyLCAxMzEsIDksIDExLCAyNDIsIDEzMCwgOSwgMTEsIDI0MiwgCi0gICAgMTI5LCA5LCAxMSwgMjQyLCAxMjgsIDksIDExLCAyNDIsIDEyNywgOSwgMTEsIDI0MiwgMTI2LCA5LCAxMSwgMjQyLCAxMjUsIAotICAgIDksIDExLCAyNDIsIDEyNCwgOSwgMTEsIDI0MiwgMTIzLCA5LCAxMSwgMjQyLCAxMjIsIDksIDExLCAyNDIsIDEyMSwgOSwgCi0gICAgMTEsIDI0MiwgMTIwLCA5LCAxMSwgMjQyLCAxMTksIDksIDExLCAyNDIsIDExOCwgOSwgMTEsIDI0MiwgMTE3LCA5LCAxMSwgCi0gICAgMjQyLCAxMTYsIDksIDExLCAyNDIsIDExNSwgOSwgMTEsIDI0MiwgMTE0LCA5LCAxMSwgMjQyLCAxMTMsIDksIDExLCAyNDIsIAotICAgIDExMiwgOSwgMTEsIDI0MiwgMTExLCA5LCAxMSwgMjQyLCAxMTAsIDksIDExLCAyNDIsIDEwOSwgOSwgMTEsIDI0MiwgMTA4LCAKLSAgICA5LCAxMSwgMjQyLCAxMDcsIDksIDExLCAyNDIsIDEwNiwgOSwgMTEsIDI0MiwgMTA1LCA5LCAxMSwgMjQyLCAxMDQsIDksIAotICAgIDExLCAyNDIsIDEwMywgOSwgMTEsIDI0MiwgMTAyLCA5LCAxMSwgMjQyLCAxMDEsIDksIDExLCAyNDIsIDEwMCwgOSwgMTEsIAotICAgIDI0MiwgOTksIDksIDExLCAyNDIsIDk4LCA5LCAxMSwgMjQyLCA5NywgOSwgMTEsIDI0MiwgOTYsIDksIDExLCAyNDIsIDk1LCAKLSAgICA5LCAxMSwgMjQyLCA5NCwgOSwgMTEsIDI0MiwgOTMsIDksIDExLCAyNDIsIDkyLCA5LCAxMSwgMjQyLCA5MSwgOSwgMTEsIAotICAgIDI0MiwgOTAsIDksIDExLCAyNDIsIDg5LCA5LCAxMSwgMjQyLCA4OCwgOSwgMTEsIDI0MiwgODcsIDksIDExLCAyNDIsIDg2LCAKLSAgICA5LCAxMSwgMjQyLCA4NSwgOSwgMTEsIDI0MiwgODQsIDksIDExLCAyNDIsIDgzLCA5LCAxMSwgMjQyLCA4MiwgOSwgMTEsIAotICAgIDI0MiwgODEsIDksIDExLCAyNDIsIDgwLCA5LCAxMSwgMjQyLCA3OSwgOSwgMTEsIDI0MiwgNzgsIDksIDExLCAyNDIsIDc3LCAKLSAgICA5LCAxMSwgMjQyLCA3NiwgOSwgMTEsIDI0MiwgNzUsIDksIDExLCAyNDIsIDc0LCA5LCAxMSwgMjQyLCA3MywgOSwgMTEsIAotICAgIDI0MiwgNzIsIDksIDExLCAyNDIsIDcxLCA5LCAxMSwgMjQyLCA3MCwgOSwgMTEsIDI0MiwgNjksIDksIDExLCAyNDIsIDY4LCAKLSAgICA5LCAxMSwgMjQyLCA2NywgOSwgMTEsIDI0MiwgNjYsIDksIDExLCAyNDIsIDY1LCA5LCAxMSwgMjQyLCA2NCwgOSwgMTEsIAotICAgIDI0MiwgNjMsIDksIDExLCAyNDIsIDYyLCA5LCAxMSwgMjQyLCA2MSwgOSwgMTEsIDI0MiwgNjAsIDksIDExLCAyNDIsIDU5LCAKLSAgICA5LCAxMSwgMjQyLCA1OCwgOSwgMTEsIDI0MiwgNTcsIDksIDExLCAyNDIsIDU2LCA5LCAxMSwgMjQyLCA1NSwgOSwgMTEsIAotICAgIDI0MiwgNTQsIDksIDExLCAyNDIsIDUzLCA5LCAxMSwgMjQyLCA1MiwgOSwgMTEsIDI0MiwgNTEsIDksIDExLCAyNDIsIDUwLCAKLSAgICA5LCAxMSwgMjQyLCA0OSwgOSwgMTEsIDI0MiwgNDgsIDksIDExLCAyNDIsIDQ3LCA5LCAxMSwgMjQyLCA0NiwgOSwgMTEsIAotICAgIDI0MiwgNDUsIDksIDExLCAyNDIsIDQ0LCA5LCAxMSwgMjQyLCA0MywgOSwgMTEsIDI0MiwgNDIsIDksIDExLCAyNDIsIDQxLCAKLSAgICA5LCAxMSwgMjQyLCA0MCwgOSwgMTEsIDI0MiwgMzksIDksIDExLCAyNDIsIDM4LCA5LCAxMSwgMjQyLCAzNywgOSwgMTEsIAotICAgIDI0MiwgMzYsIDksIDExLCAyNDIsIDM1LCA5LCAxMSwgMjQyLCAzNCwgOSwgMTEsIDI0MiwgMzMsIDksIDExLCAyNDIsIDMyLCAKLSAgICAyMzgsIDExLCAyMjcsIDk1LCAxMDgsIDIyOCwgMTQ1LCAxMDgsIDI0NywgMTQ5LCA3NiwgMTA4LCAyMzIsIDU3LCA3NiwgCi0gICAgMTA4LCA2NSwgNTMsIDEwOCwgMjQ5LCAxNTAsIDUzLCAxMDgsIDIzMywgMTIzLCA1MywgMTA4LCAyNTQsIDE5MywgMTA4LCAKLSAgICAyNTQsIDE0NCwgMTA4LCA0MiwgMjMzLCAxODAsIDEwOCwgNDEsIDIzMywgMTgwLCAxMDgsIDI1NCwgNjksIDEwOCwgNzksIAotICAgIDUzLCAxMDgsIDI1MSwgNTQsIDEwOCwgMjQ0LCA5NCwgMTA4LCAyNDYsIDIxOCwgMjI4LCAzOCwgMTA4LCAyMjgsIDE2MSwgCi0gICAgMTA4LCAyMSwgMjIzLCA4OSwgMTA4LCAyMSwgMTE4LCAxMDgsIDIxLCAxMTMsIDEwOCwgMjEsIDE2NiwgMTA4LCAyMSwgMTU4LCAKLSAgICAxMDgsIDIxLCAxNzMsIDEwOCwgMjEsIDE4MywgMTA4LCAyMSwgMTk0LCAxMDgsIDIxLCAxODcsIDEwOCwgMjEsIDE5MiwgCi0gICAgMTA4LCAyNTEsIDYxLCAxMDgsIDIyOSwgMTg2LCAxMDgsIDIzNywgMjEzLCA1MywgMTA4LCAyNDcsIDIwNCwgNTMsIDEwOCwgCi0gICAgMjQ1LCAyMzEsIDUzLCAxMDgsIDIzMiwgNjksIDc2LCAxMDgsIDI1MSwgNTMsIDI1NCwgNjIsIDEwOCwgNywgNiwgMSwgNTcsIAotICAgIDEwOCwgNywgNiwgMSwgMjU0LCAyNywgMTA4LCA3LCA2LCAxLCAyNTIsIDQ0LCAxMDgsIDcsIDYsIDEsIDIyMiwgMjIyLCAKLSAgICAxMDgsIDcsIDYsIDEsIDcyLCAxMDgsIDcsIDYsIDEsIDI0NywgMTMwLCAxMDgsIDcsIDYsIDEsIDIxNCwgMTA4LCA3LCA2LCAKLSAgICAxLCAyMTIsIDEwOCwgNywgNiwgMSwgNzQsIDEwOCwgNywgNiwgMSwgMjM5LCAxODIsIDEwOCwgNywgNiwgMSwgMjM5LCA3NiwgCi0gICAgMTA4LCA3LCA2LCAxLCAxNDksIDEwOCwgNywgNiwgMSwgMTg1LCAxMDgsIDcsIDYsIDEsIDE5OSwgMTA4LCA3LCA2LCAxLCAKLSAgICA3MywgMTA4LCA3LCA2LCAxLCAyMzMsIDI0NCwgMTA4LCA3LCA2LCAxLCAyMzIsIDEzOSwgMTA4LCA3LCA2LCAxLCAxNDYsIAotICAgIDEwOCwgNywgNiwgMSwgMTkzLCAxMDgsIDcsIDYsIDEsIDIyNywgMTA5LCAxMDgsIDcsIDYsIDEsIDY2LCAxMDgsIDcsIDYsIAotICAgIDEsIDE5NiwgMTA4LCA3LCA2LCAxLCAyMjQsIDE3NCwgMTA4LCA3LCA2LCAxLCAyMjQsIDczLCAxMDgsIDcsIDYsIDEsIDIyNCwgCi0gICAgMjUsIDEwOCwgNywgNiwgMSwgMjIzLCAxMTksIDEwOCwgNDIsIDM3LCAxMDQsIDEwOCwgMjMxLCAxOTMsIDIyOCwgMTYxLCAKLSAgICAxMDgsIDQxLCAzNywgMTA0LCAxMDgsIDI1MSwgMTAyLCAyNTUsIDQxLCAxMDgsIDE4NCwgMjM3LCAxNzAsIDEwOCwgMjQ1LCAKLSAgICAyMzcsIDI1NSwgNDEsIDEwOCwgNywgMywgMSwgNTcsIDEwOCwgNywgMywgMSwgMjU0LCAyNywgMTA4LCA3LCAzLCAxLCAyNTIsIAotICAgIDQ0LCAxMDgsIDcsIDMsIDEsIDIyMiwgMjIyLCAxMDgsIDcsIDMsIDEsIDcyLCAxMDgsIDcsIDMsIDEsIDI0NywgMTMwLCAKLSAgICAxMDgsIDcsIDMsIDEsIDIxNCwgMTA4LCA3LCAzLCAxLCAyMTIsIDEwOCwgNywgMywgMSwgNzQsIDEwOCwgNywgMywgMSwgCi0gICAgMjM5LCAxODIsIDEwOCwgNywgMywgMSwgMjM5LCA3NiwgMTA4LCA3LCAzLCAxLCAxNDksIDEwOCwgNywgMywgMSwgMTg1LCAKLSAgICAxMDgsIDcsIDMsIDEsIDE5OSwgMTA4LCA3LCAzLCAxLCA3MywgMTA4LCA3LCAzLCAxLCAyMzMsIDI0NCwgMTA4LCA3LCAzLCAKLSAgICAxLCAyMzIsIDEzOSwgMTA4LCA3LCAzLCAxLCAxNDYsIDEwOCwgNywgMywgMSwgMTkzLCAxMDgsIDcsIDMsIDEsIDIyNywgCi0gICAgMTA5LCAxMDgsIDcsIDMsIDEsIDY2LCAxMDgsIDcsIDMsIDEsIDE5NiwgMTA4LCA3LCAzLCAxLCAyMjQsIDE3NCwgMTA4LCA3LCAKLSAgICAzLCAxLCAyMjQsIDczLCAxMDgsIDcsIDMsIDEsIDIyNCwgMjUsIDEwOCwgNywgMywgMSwgMjIzLCAxMTksIDEwOCwgNDIsIAotICAgIDI1MCwgMjIzLCAxMDQsIDEwOCwgNjEsIDIzNywgMTcwLCAxMDgsIDQxLCAyNTAsIDIyMywgMTA0LCAxMDgsIDIwNSwgMjUyLCAKLSAgICAyNSwgMjI3LCA5NSwgMzgsIDIzMCwgMTE0LCAzOCwgMjMwLCAxMDMsIDM4LCAyMzAsIDkyLCAzOCwgMjMwLCA4MCwgMzgsIAotICAgIDIzMCwgNjksIDM4LCAyMzAsIDU4LCAzOCwgMjMwLCA0NywgMzgsIDIzMCwgMzYsIDM4LCAyMzAsIDI1LCAzOCwgMjMwLCAxNywgCi0gICAgMzgsIDIzMCwgMTYsIDM4LCAyMzAsIDE1LCAzOCwgMjMwLCAxNCwgMzgsIDIzMCwgMTIsIDM4LCAyMzAsIDExLCAzOCwgMjMwLCAKLSAgICAxMCwgMzgsIDIzMCwgOSwgMzgsIDIzMCwgOCwgMzgsIDIzMCwgNywgMzgsIDIzMCwgNiwgMzgsIDIzMCwgNSwgMzgsIDIzMCwgCi0gICAgNCwgMzgsIDIzMCwgMywgMzgsIDIzMCwgMSwgMzgsIDIzMCwgMCwgMzgsIDIyOSwgMjU1LCAzOCwgMjI5LCAyNTQsIDM4LCAKLSAgICAyMjksIDI1MywgMzgsIDIyOSwgMjUyLCAzOCwgMjI5LCAyNTEsIDM4LCAyMjksIDI1MCwgMzgsIDIyOSwgMjQ5LCAzOCwgCi0gICAgMjI5LCAyNDgsIDM4LCAyMjksIDI0NiwgMzgsIDIyOSwgMjQ1LCAzOCwgMjI5LCAyNDQsIDM4LCAyMjksIDI0MywgMzgsIAotICAgIDIyOSwgMjQyLCAzOCwgMjI5LCAyNDEsIDM4LCAyMjksIDI0MCwgMzgsIDIyOSwgMjM5LCAzOCwgMjI5LCAyMzgsIDM4LCAKLSAgICAyMjksIDIzNywgMzgsIDIyOSwgMjM1LCAzOCwgMjI5LCAyMzQsIDM4LCAyMjksIDIzMywgMzgsIDIyOSwgMjMyLCAzOCwgCi0gICAgMjI5LCAyMzEsIDM4LCAyMjksIDIzMCwgMzgsIDIyOSwgMjI5LCAzOCwgMjI5LCAyMjgsIDM4LCAyMjksIDIyNywgMzgsIAotICAgIDIyOSwgMjI2LCAzOCwgMjI5LCAyMjQsIDM4LCAyMjksIDIyMywgMzgsIDIyOSwgMjIyLCAzOCwgMjI5LCAyMjEsIDM4LCAKLSAgICAyMjksIDIyMCwgMzgsIDIyOSwgMjE5LCAzOCwgMjI5LCAyMTgsIDM4LCAyMjksIDIxNywgMzgsIDIyOSwgMjE2LCAzOCwgCi0gICAgMjI5LCAyMTUsIDM4LCAyMjksIDIxMywgMzgsIDIyOSwgMjEyLCAzOCwgMjI5LCAyMTEsIDM4LCAyMjksIDIxMCwgMzgsIAotICAgIDIyOSwgMjA5LCAzOCwgMjI5LCAyMDgsIDM4LCAyMjksIDIwNywgMzgsIDIyOSwgMjA2LCAzOCwgMjI5LCAyMDUsIDM4LCAKLSAgICAyMjksIDIwNCwgMzgsIDIyOSwgMjAyLCAzOCwgMjI5LCAyMDEsIDM4LCAyMjksIDIwMCwgMzgsIDIyOSwgMTk5LCAzOCwgCi0gICAgMjI5LCAxOTgsIDM4LCAyMjksIDE5NywgMzgsIDIyOSwgMTk2LCAzOCwgMjI5LCAxOTUsIDM4LCAyMjksIDE5NCwgMzgsIAotICAgIDIyOSwgMTkzLCAzOCwgMjMwLCAxOTAsIDM4LCAyMzAsIDE4OSwgMzgsIDIzMCwgMTg4LCAzOCwgMjMwLCAxODcsIDM4LCAKLSAgICAyMzAsIDE4NiwgMzgsIDIzMCwgMTg1LCAzOCwgMjMwLCAxODQsIDM4LCAyMzAsIDE4MywgMzgsIDIzMCwgMTgyLCAzOCwgCi0gICAgMjMwLCAxODEsIDM4LCAyMzAsIDE3OSwgMzgsIDIzMCwgMTc4LCAzOCwgMjMwLCAxNzcsIDM4LCAyMzAsIDE3NiwgMzgsIAotICAgIDIzMCwgMTc1LCAzOCwgMjMwLCAxNzQsIDM4LCAyMzAsIDE3MywgMzgsIDIzMCwgMTcyLCAzOCwgMjMwLCAxNzEsIDM4LCAKLSAgICAyMzAsIDE3MCwgMzgsIDIzMCwgMTY4LCAzOCwgMjMwLCAxNjcsIDM4LCAyMzAsIDE2NiwgMzgsIDIzMCwgMTY1LCAzOCwgCi0gICAgMjMwLCAxNjQsIDM4LCAyMzAsIDE2MywgMzgsIDIzMCwgMTYyLCAzOCwgMjMwLCAxNjEsIDM4LCAyMzAsIDE2MCwgMzgsIAotICAgIDIzMCwgMTU5LCAzOCwgMjMwLCAxNTcsIDM4LCAyMzAsIDE1NiwgMzgsIDIzMCwgMTU1LCAzOCwgMjMwLCAxNTQsIDM4LCAKLSAgICAyMzAsIDE1MywgMzgsIDIzMCwgMTUyLCAzOCwgMjMwLCAxNTEsIDM4LCAyMzAsIDE1MCwgMzgsIDIzMCwgMTQ5LCAzOCwgCi0gICAgMjMwLCAxNDgsIDM4LCAyMzAsIDE0NiwgMzgsIDIzMCwgMTQ1LCAzOCwgMjMwLCAxNDQsIDM4LCAyMzAsIDE0MywgMzgsIAotICAgIDIzMCwgMTQyLCAzOCwgMjMwLCAxNDEsIDM4LCAyMzAsIDE0MCwgMzgsIDIzMCwgMTM5LCAzOCwgMjMwLCAxMzgsIDM4LCAKLSAgICAyMzAsIDEzNywgMzgsIDIzMCwgMTM1LCAzOCwgMjMwLCAxMzQsIDM4LCAyMzAsIDEzMywgMzgsIDIzMCwgMTMyLCAzOCwgCi0gICAgMjMwLCAxMzEsIDM4LCAyMzAsIDEzMCwgMzgsIDIzMCwgMTI5LCAzOCwgMjMwLCAxMjgsIDM4LCAyMzAsIDEyNywgMzgsIAotICAgIDIzMCwgMTI2LCAzOCwgMjMwLCAxMjQsIDM4LCAyMzAsIDEyMywgMzgsIDIzMCwgMTIyLCAzOCwgMjMwLCAxMjEsIDM4LCAKLSAgICAyMzAsIDEyMCwgMzgsIDIzMCwgMTE5LCAzOCwgMjMwLCAxMTgsIDM4LCAyMzAsIDExNywgMzgsIDIzMCwgMTE2LCAzOCwgCi0gICAgMjMwLCAxMTUsIDM4LCAyMzAsIDExMywgMzgsIDIzMCwgMTEyLCAzOCwgMjMwLCAxMTEsIDM4LCAyMzAsIDExMCwgMzgsIAotICAgIDIzMCwgMTA5LCAzOCwgMjMwLCAxMDgsIDM4LCAyMzAsIDEwNywgMzgsIDIzMCwgMTA2LCAzOCwgMjMwLCAxMDUsIDM4LCAKLSAgICAyMzAsIDEwNCwgMzgsIDIzMCwgMTAyLCAzOCwgMjMwLCAxMDEsIDM4LCAyMzAsIDEwMCwgMzgsIDIzMCwgOTksIDM4LCAyMzAsIAotICAgIDk4LCAzOCwgMjMwLCA5NywgMzgsIDIzMCwgOTYsIDM4LCAyMzAsIDk1LCAzOCwgMjMwLCA5NCwgMzgsIDIzMCwgOTMsIDM4LCAKLSAgICAyMzAsIDkxLCAzOCwgMjMwLCA5MCwgMzgsIDIzMCwgODksIDM4LCAyMzAsIDg4LCAzOCwgMjMwLCA4NywgMzgsIDIzMCwgODYsIAotICAgIDM4LCAyMzAsIDg1LCAzOCwgMjMwLCA4NCwgMzgsIDIzMCwgODMsIDM4LCAyMzAsIDgyLCAzOCwgMjMwLCA3OSwgMzgsIDIzMCwgCi0gICAgNzgsIDM4LCAyMzAsIDc3LCAzOCwgMjMwLCA3NiwgMzgsIDIzMCwgNzUsIDM4LCAyMzAsIDc0LCAzOCwgMjMwLCA3MywgMzgsIAotICAgIDIzMCwgNzIsIDM4LCAyMzAsIDcxLCAzOCwgMjMwLCA3MCwgMzgsIDIzMCwgNjgsIDM4LCAyMzAsIDY3LCAzOCwgMjMwLCA2NiwgCi0gICAgMzgsIDIzMCwgNjUsIDM4LCAyMzAsIDY0LCAzOCwgMjMwLCA2MywgMzgsIDIzMCwgNjIsIDM4LCAyMzAsIDYxLCAzOCwgMjMwLCAKLSAgICA2MCwgMzgsIDIzMCwgNTksIDM4LCAyMzAsIDU3LCAzOCwgMjMwLCA1NiwgMzgsIDIzMCwgNTUsIDM4LCAyMzAsIDU0LCAzOCwgCi0gICAgMjMwLCA1MywgMzgsIDIzMCwgNTIsIDM4LCAyMzAsIDUxLCAzOCwgMjMwLCA1MCwgMzgsIDIzMCwgNDksIDM4LCAyMzAsIDQ4LCAKLSAgICAzOCwgMjMwLCA0NiwgMzgsIDIzMCwgNDUsIDM4LCAyMzAsIDQ0LCAzOCwgMjMwLCA0MywgMzgsIDIzMCwgNDIsIDM4LCAyMzAsIAotICAgIDQxLCAzOCwgMjMwLCA0MCwgMzgsIDIzMCwgMzksIDM4LCAyMzAsIDM4LCAzOCwgMjMwLCAzNywgMzgsIDIzMCwgMzUsIDM4LCAKLSAgICAyMzAsIDM0LCAzOCwgMjMwLCAzMywgMzgsIDIzMCwgMzIsIDM4LCAyMzAsIDMxLCAzOCwgMjMwLCAzMCwgMzgsIDIzMCwgMjksIAotICAgIDM4LCAyMzAsIDI4LCAzOCwgMjMwLCAyNywgMzgsIDIzMCwgMjYsIDM4LCAyMzAsIDI0LCAzOCwgMjMwLCAyMywgMzgsIDIzMCwgCi0gICAgMjIsIDM4LCAyMzAsIDIxLCAzOCwgMjMwLCAyMCwgMzgsIDIzMCwgMTksIDM4LCAyMzAsIDE4LCAKKyAgICAwLCAyMTksIDIwNiwgMjQ0LCAyNTQsIDc3LCAyMjQsIDE0MywgNzcsIDUwLCA1MiwgMjQ3LCA4NiwgNTIsIDIyNiwgNTcsIAorICAgIDUyLCAyNTQsIDM1LCAyNTMsIDIyNiwgNDIsIDIyNiwgMTMxLCA0NiwgMjI2LCAxMzEsIDI1MywgMTMyLCA5NCwgNTIsIDI0OSwgCisgICAgMTU3LCAyNDAsIDE1OSwgMjQzLCAyMDAsIDIxOSwgNjksIDIxOSwgMjMxLCAyMSwgMjEyLCA3OSwgMjEsIDExNiwgMjEsIAorICAgIDEwOSwgMjEsIDE2NiwgMjEsIDE2MywgMjEsIDE4MCwgMjEsIDE4OSwgMjEsIDE5OCwgMjEsIDE5NSwgMjEsIDIwMCwgMjQ5LCAKKyAgICAxNjQsIDIyMSwgNzAsIDIzMywgMzksIDUyLCAyNDUsIDYxLCA1MiwgMjQyLCAxMDcsIDUyLCAyMjQsIDE1OCwgNzcsIDI0OSwgCisgICAgMTU2LCAyNTMsIDEyMiwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgNzQsIDcsIDYsIDEsIDI1MCwgMjUyLCA3LCA2LCAxLCAKKyAgICAyNDksIDMsIDcsIDYsIDEsIDc0LCA3LCA2LCAxLCAyNDQsIDIzMCwgNywgNiwgMSwgMjQzLCAxNzcsIDcsIDYsIDEsIDI0MiwgCisgICAgNDEsIDcsIDYsIDEsIDcyLCA3LCA2LCAxLCAyMzUsIDE0MiwgNywgNiwgMSwgMjM1LCAyNywgNywgNiwgMSwgMTUwLCA3LCA2LCAKKyAgICAxLCAxODMsIDcsIDYsIDEsIDIwNCwgNywgNiwgMSwgNzUsIDcsIDYsIDEsIDIyNiwgMjI5LCA3LCA2LCAxLCAyMjQsIDI0MCwgCisgICAgNywgNiwgMSwgMTQ5LCA3LCA2LCAxLCAxOTcsIDcsIDYsIDEsIDIxOCwgOTksIDcsIDYsIDEsIDY5LCA3LCA2LCAxLCAyMTUsIAorICAgIDc5LCA3LCA2LCAxLCAyMTQsIDgyLCA3LCA2LCAxLCAyMTMsIDE2NiwgNywgNiwgMSwgMjEzLCAxMDUsIDcsIDYsIDEsIDIxMiwgCisgICAgMTUyLCA0MiwgNDEsIDEyNSwgMjIzLCAyMDMsIDIxOSwgMjMxLCA0NiwgNDEsIDEyNSwgMjQ5LCAyMjQsIDI1NCwgMTc0LCAKKyAgICAxMTUsIDIzMiwgMjQyLCAyNDIsIDExNCwgMjU0LCAxNzQsIDcsIDMsIDEsIDYxLCA3LCAzLCAxLCAyNTMsIDc0LCA3LCAzLCAKKyAgICAxLCAyNTAsIDI1MiwgNywgMywgMSwgMjQ5LCAzLCA3LCAzLCAxLCA3NCwgNywgMywgMSwgMjQ0LCAyMzAsIDcsIDMsIDEsIAorICAgIDI0MywgMTc3LCA3LCAzLCAxLCAyNDIsIDQxLCA3LCAzLCAxLCA3MiwgNywgMywgMSwgMjM1LCAxNDIsIDcsIDMsIDEsIDIzNSwgCisgICAgMjcsIDcsIDMsIDEsIDE1MCwgNywgMywgMSwgMTgzLCA3LCAzLCAxLCAyMDQsIDcsIDMsIDEsIDc1LCA3LCAzLCAxLCAyMjYsIAorICAgIDIyOSwgNywgMywgMSwgMjI0LCAyNDAsIDcsIDMsIDEsIDE0OSwgNywgMywgMSwgMTk3LCA3LCAzLCAxLCAyMTgsIDk5LCA3LCAKKyAgICAzLCAxLCA2OSwgNywgMywgMSwgMjE1LCA3OSwgNywgMywgMSwgMjE0LCA4MiwgNywgMywgMSwgMjEzLCAxNjYsIDcsIDMsIDEsIAorICAgIDIxMywgMTA1LCA3LCAzLCAxLCAyMTIsIDE1MiwgNDIsIDI0OSwgNDAsIDEyNSwgNzEsIDIzMiwgMjQyLCA0NiwgMjQ5LCA0MCwgCisgICAgMTI1LCAyMTcsIDQyLCAyMjgsIDE4NCwgMjE5LCAyMDYsIDIzNSwgMTkxLCAyNDQsIDI1NCwgNzcsIDI1MCwgMTEwLCA1MiwgCisgICAgMjI1LCAxMDgsIDUyLCAyNDksIDM5LCA1MiwgMjEzLCAzMSwgNTIsIDI1MSwgNjMsIDEzNCwgMjIyLCA5MiwgNTIsIDI0NywgCisgICAgMjA5LCAyNDksIDEwMiwgNTIsIDI0NCwgMTA1LCAyMjcsIDIxLCAyMzUsIDIzNSwgMjMzLCA2NiwgNTEsIDI1NCwgMTksIAorICAgIDIyNCwgMTQzLCA3NywgMjI4LCAxNjMsIDUyLCAyMTksIDIzNiwgMjQwLCAxNjAsIDIyMywgMjUyLCA1MiwgMjMyLCAzNywgCisgICAgMjQ4LCAyMiwgNTIsIDIyNSwgMTU1LCA1MiwgMjE4LCAyMjMsIDEwOSwgMjE4LCAyMjMsIDE2NiwgMjU0LCAxNjQsIDI1NCwgCisgICAgMTc0LCAyMzEsIDQxLCA1MiwgMjI1LCAyMDAsIDUyLCAyMzEsIDM3LCAyNDcsIDc0LCAyNTAsIDExNywgMjE4LCAyMjMsIAorICAgIDExNiwgMjMxLCAyMTEsIDIyNywgMjEsIDIzNSwgMjM1LCAyMjMsIDE0NCwgNTEsIDI1NCwgMTksIDIyNCwgMTQzLCA3NywgCisgICAgMjE0LCA5NywgMjQzLCAyMjgsIDEyMiwgMjI0LCAxNjYsIDIxNCwgOTcsIDI0MywgMjI4LCAxMjIsIDI0MiwgOSwgMjE0LCAKKyAgICA5NywgMjQzLCAyMjgsIDEzMywgMjI0LCAxNjQsIDIzNSwgMTkxLCAyMjQsIDE1OCwgNzcsIDcsIDYsIDEsIDExOCwgMiwgCisgICAgMjQyLCAxMTMsIDcsIDYsIDEsIDExOCwgMiwgMTc5LCA3LCA2LCAxLCAxMTgsIDIsIDI0OSwgMjIzLCA3LCA2LCAxLCAxMTgsIAorICAgIDIsIDIxNywgNDIsIDcsIDYsIDEsIDExOCwgMiwgMjQ3LCAyMDksIDcsIDYsIDEsIDExOCwgMiwgMjIzLCAxMzEsIDQ5LCA3LCAKKyAgICA2LCAxLCAyNTQsIDE0OCwgNywgNiwgMSwgMjUwLCAyNTMsIDIsIDI1MCwgMTE3LCA3LCA2LCAxLCAxOTEsIDIsIDI0MiwgCisgICAgMTEzLCA3LCA2LCAxLCAxOTEsIDIsIDE3OSwgNywgNiwgMSwgMTkxLCAyLCAyNDksIDIyMywgNywgNiwgMSwgMTkxLCAyLCAKKyAgICAyNDcsIDIwOSwgNywgNiwgMSwgMjQwLCAxNDYsIDIsIDI0MiwgMTEzLCA3LCA2LCAxLCAyNDAsIDE0NiwgMiwgMTc5LCA3LCAKKyAgICA2LCAxLCAyNDAsIDE0NiwgMiwgMjQ5LCAyMjMsIDcsIDYsIDEsIDI0MCwgMTQ2LCAyLCAyNDcsIDIwOSwgNywgNiwgMSwgCisgICAgMjQ1LCAyNSwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjE3LCA0MiwgNywgNiwgMSwgMTU3LCAyLCAyNDIsIDExMywgNywgNiwgCisgICAgMSwgMTU3LCAyLCAxNzksIDcsIDYsIDEsIDE1NywgMiwgMjQ5LCAyMjMsIDcsIDYsIDEsIDE1NywgMiwgMjE3LCA0MiwgNywgCisgICAgNiwgMSwgMTU3LCAyLCAyNDcsIDIwOSwgMjMwLCAxNTQsIDUyLCA3LCA2LCAxLCAxNTcsIDIsIDkwLCA3LCA2LCAxLCAxMTEsIAorICAgIDIsIDI0MiwgMTEzLCA3LCA2LCAxLCAxMTEsIDIsIDE3OSwgNywgNiwgMSwgMTExLCAyLCAyNDksIDIyMywgNywgNiwgMSwgCisgICAgMTExLCAyLCAyNDcsIDIwOSwgNywgNiwgMSwgMjEzLCAxMDYsIDIsIDE3OSwgNywgNiwgMSwgMjE3LCAxMDQsIDcsIDMsIDEsIAorICAgIDIyMCwgMjU1LCAxOTcsIDcsIDMsIDEsIDExOCwgMiwgMjQyLCAxMTMsIDcsIDMsIDEsIDExOCwgMiwgMTc5LCA3LCAzLCAxLCAKKyAgICAxMTgsIDIsIDI0OSwgMjIzLCA3LCAzLCAxLCAxMTgsIDIsIDIxNywgNDIsIDcsIDMsIDEsIDExOCwgMiwgMjQ3LCAyMDksIDcsIAorICAgIDMsIDEsIDExOCwgMiwgMjIzLCAxMzEsIDQ5LCA3LCAzLCAxLCAyNTQsIDE0OCwgNywgMywgMSwgMjUwLCAyNTMsIDIsIDI1MCwgCisgICAgMTE3LCA3LCAzLCAxLCAxOTEsIDIsIDI0MiwgMTEzLCA3LCAzLCAxLCAxOTEsIDIsIDE3OSwgNywgMywgMSwgMTkxLCAyLCAKKyAgICAyNDksIDIyMywgNywgMywgMSwgMTkxLCAyLCAyNDcsIDIwOSwgNywgMywgMSwgMjQwLCAxNDYsIDIsIDI0MiwgMTEzLCA3LCAKKyAgICAzLCAxLCAyNDAsIDE0NiwgMiwgMTc5LCA3LCAzLCAxLCAyNDAsIDE0NiwgMiwgMjQ5LCAyMjMsIDcsIDMsIDEsIDI0MCwgCisgICAgMTQ2LCAyLCAyNDcsIDIwOSwgNywgMywgMSwgMjQ1LCAyNSwgNywgMywgMSwgMjMwLCA5OCwgMiwgMjE3LCA0MiwgNywgMywgCisgICAgMSwgMTU3LCAyLCAyNDIsIDExMywgNywgMywgMSwgMTU3LCAyLCAxNzksIDcsIDMsIDEsIDE1NywgMiwgMjQ5LCAyMjMsIDcsIAorICAgIDMsIDEsIDE1NywgMiwgMjE3LCA0MiwgNywgMywgMSwgMTU3LCAyLCAyNDcsIDIwOSwgMjQ3LCAxMjEsIDUyLCA3LCAzLCAxLCAKKyAgICAxNTcsIDIsIDkwLCA3LCAzLCAxLCAxMTEsIDIsIDI0MiwgMTEzLCA3LCAzLCAxLCAxMTEsIDIsIDE3OSwgNywgMywgMSwgCisgICAgMTExLCAyLCAyNDksIDIyMywgNywgMywgMSwgMTExLCAyLCAyNDcsIDIwOSwgNywgMywgMSwgMjEzLCAxMDYsIDIsIDE3OSwgCisgICAgNywgMywgMSwgMjE3LCAxMDQsIDcsIDMsIDEsIDIxMywgMTA2LCAyLCAyNDcsIDIwOSwgNywgNiwgMSwgMTE4LCAyLCAyMzIsIAorICAgIDM3LCA3LCAzLCAxLCAxMTgsIDIsIDIzMiwgMzcsIDcsIDYsIDEsIDExOCwgMiwgMjUxLCA3NCwgNywgMywgMSwgMTE4LCAyLCAKKyAgICAyNTEsIDc0LCA3LCA2LCAxLCAxMTgsIDIsIDIyNywgOTAsIDcsIDMsIDEsIDExOCwgMiwgMjI3LCA5MCwgNywgNiwgMSwgCisgICAgMjUwLCAyNTMsIDIsIDE3OSwgNywgMywgMSwgMjUwLCAyNTMsIDIsIDE3OSwgNywgNiwgMSwgMjUwLCAyNTMsIDIsIDI0OSwgCisgICAgMjIzLCA3LCAzLCAxLCAyNTAsIDI1MywgMiwgMjQ5LCAyMjMsIDcsIDYsIDEsIDI1MCwgMjUzLCAyLCA2MiwgNDksIDcsIDMsIAorICAgIDEsIDI1MCwgMjUzLCAyLCA2MiwgNDksIDcsIDYsIDEsIDI1MCwgMjUzLCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjUwLCAKKyAgICAyNTMsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAyNDksIDQsIDIsIDI1MCwgMTY2LCA3LCAzLCAxLCAyNDksIDQsIDIsIDI1MCwgCisgICAgMTY2LCA3LCA2LCAxLCAyNDksIDQsIDIsIDkwLCA3LCAzLCAxLCAyNDksIDQsIDIsIDkwLCA3LCA2LCAxLCAxOTEsIDIsIAorICAgIDIzMiwgMzcsIDcsIDMsIDEsIDE5MSwgMiwgMjMyLCAzNywgNywgNiwgMSwgMTkxLCAyLCAyNTEsIDc0LCA3LCAzLCAxLCAKKyAgICAxOTEsIDIsIDI1MSwgNzQsIDcsIDYsIDEsIDE5MSwgMiwgNjIsIDQ5LCA3LCAzLCAxLCAxOTEsIDIsIDYyLCA0OSwgNywgNiwgCisgICAgMSwgMTkxLCAyLCAyMjcsIDkwLCA3LCAzLCAxLCAxOTEsIDIsIDIyNywgOTAsIDcsIDYsIDEsIDE5MSwgMiwgMjUwLCAxNjYsIAorICAgIDcsIDMsIDEsIDE5MSwgMiwgMjUwLCAxNjYsIDcsIDYsIDEsIDI0MywgMTc4LCAyLCAyNDksIDIyMywgNywgMywgMSwgMjQzLCAKKyAgICAxNzgsIDIsIDI0OSwgMjIzLCA3LCA2LCAxLCAyNDMsIDE3OCwgMiwgMjUxLCA3NCwgNywgMywgMSwgMjQzLCAxNzgsIDIsIAorICAgIDI1MSwgNzQsIDcsIDYsIDEsIDI0MywgMTc4LCAyLCA2MiwgNDksIDcsIDMsIDEsIDI0MywgMTc4LCAyLCA2MiwgNDksIDcsIAorICAgIDYsIDEsIDI0MywgMTc4LCAyLCAyNTAsIDExNywgNywgMywgMSwgMjQzLCAxNzgsIDIsIDI1MCwgMTE3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDQyLCAyLCAyNDksIDIyMywgNywgMywgMSwgMjQyLCA0MiwgMiwgMjQ5LCAyMjMsIDcsIDYsIDEsIDI0MiwgNDIsIDIsIAorICAgIDkwLCA3LCAzLCAxLCAyNDIsIDQyLCAyLCA5MCwgNywgNiwgMSwgMjQwLCAxNDYsIDIsIDIxNywgNDIsIDcsIDMsIDEsIDI0MCwgCisgICAgMTQ2LCAyLCAyMTcsIDQyLCA3LCA2LCAxLCAyNDAsIDE0NiwgMiwgMjMyLCAzNywgNywgMywgMSwgMjQwLCAxNDYsIDIsIAorICAgIDIzMiwgMzcsIDcsIDYsIDEsIDI0MCwgMTQ2LCAyLCAyNTEsIDc0LCA3LCAzLCAxLCAyNDAsIDE0NiwgMiwgMjUxLCA3NCwgNywgCisgICAgNiwgMSwgMjQwLCAxNDYsIDIsIDIyNywgOTAsIDcsIDMsIDEsIDI0MCwgMTQ2LCAyLCAyMjcsIDkwLCA3LCA2LCAxLCAyNDAsIAorICAgIDE0NiwgMiwgNjIsIDQ5LCA3LCAzLCAxLCAyNDcsIDczLCA3MiwgNywgNiwgMjYsIDIzNiwgMjYsIDcsIDMsIDI2LCAyMzYsIAorICAgIDI2LCA3LCA2LCAxLCAyMzUsIDE0MywgMiwgMjQ5LCAyMjMsIDcsIDMsIDEsIDIzNSwgMTQzLCAyLCAyNDksIDIyMywgNywgNiwgCisgICAgMSwgMjM1LCAyOCwgMiwgMjUwLCAxMTcsIDcsIDMsIDEsIDIzNSwgMjgsIDIsIDI1MCwgMTE3LCA3LCAzLCAxLCAyMzMsIAorICAgIDI0OCwgNywgNiwgMSwgMjMzLCAxNzEsIDIsIDE3OSwgNywgMywgMSwgMjMzLCAxNzEsIDIsIDE3OSwgNywgNiwgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDI1MCwgMTE3LCA3LCAzLCAxLCAyMzMsIDE3MSwgMiwgMjUwLCAxMTcsIDcsIDYsIDEsIDIzMywgMTcxLCAyLCAKKyAgICAyNTAsIDE2NiwgNywgMywgMSwgMjMzLCAxNzEsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAyMzMsIDE3MSwgMiwgMjMxLCAzNywgCisgICAgMjQ3LCA3NCwgNywgMywgMSwgMjMzLCAxNzEsIDIsIDIzMSwgMzcsIDI0NywgNzQsIDcsIDYsIDEsIDIzMywgMTcxLCAyLCAKKyAgICA5MCwgNywgMywgMSwgMjMzLCAxNzEsIDIsIDkwLCA3LCA2LCAxLCAyMzAsIDk4LCAyLCAxNzksIDcsIDMsIDEsIDIzMCwgOTgsIAorICAgIDIsIDE3OSwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjUwLCAxMTcsIDcsIDMsIDEsIDIzMCwgOTgsIDIsIDI1MCwgMTE3LCA3LCAKKyAgICA2LCAxLCAyMzAsIDk4LCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjMwLCA5OCwgMiwgMjUwLCAxNjYsIDcsIDMsIDEsIDIzMCwgCisgICAgOTgsIDIyNSwgODQsIDI1MSwgNywgMjUzLCAyMjYsIDcsIDYsIDEsIDI0NSwgOTYsIDcsIDMsIDEsIDI0NSwgOTYsIDcsIDYsIAorICAgIDEsIDE1NywgMiwgMjMyLCAzNywgNywgMywgMSwgMTU3LCAyLCAyMzIsIDM3LCA3LCA2LCAxLCAxNTcsIDIsIDI1MSwgNzQsIAorICAgIDcsIDMsIDEsIDE1NywgMiwgMjUxLCA3NCwgNywgNiwgMSwgMTU3LCAyLCA1MSwgMTc5LCA3LCAzLCAxLCAxNTcsIDIsIDUxLCAKKyAgICAxNzksIDcsIDYsIDI2LCAyMjcsIDk5LCA3LCAzLCAyNiwgMjI3LCA5OSwgNywgNiwgMSwgMjI0LCAxMTMsIDIsIDE3OSwgNywgCisgICAgMywgMSwgMjI0LCAxMTMsIDIsIDE3OSwgNywgNiwgMSwgMjI0LCAxMTMsIDIsIDI1MCwgMTE3LCA3LCAzLCAxLCAyMjQsIAorICAgIDExMywgMiwgMjUwLCAxMTcsIDcsIDYsIDEsIDIyNCwgMTEzLCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjI0LCAxMTMsIDIsIAorICAgIDI1MCwgMTY2LCA3LCA2LCAxLCAyMjMsIDQsIDIsIDE3OSwgNywgMywgMSwgMjIzLCA0LCAyLCAxNzksIDcsIDYsIDEsIDIyMywgCisgICAgNCwgMiwgMjQ5LCAyMjMsIDcsIDMsIDEsIDIyMywgNCwgMiwgMjQ5LCAyMjMsIDcsIDYsIDEsIDIyMywgNCwgMiwgMjUwLCAKKyAgICAxMTcsIDcsIDMsIDEsIDIyMywgNCwgMiwgMjUwLCAxMTcsIDcsIDYsIDEsIDIyMywgNCwgMiwgMjUwLCAxNjYsIDcsIDMsIDEsIAorICAgIDIyMywgNCwgMiwgMjUwLCAxNjYsIDcsIDYsIDEsIDIxOCwgMTAwLCAyLCAyNTAsIDExNywgNywgMywgMSwgMjE4LCAxMDAsIAorICAgIDIsIDI1MCwgMTE3LCA3LCA2LCAxLCAyMTgsIDEwMCwgMiwgMjUwLCAxNjYsIDcsIDMsIDEsIDIxOCwgMTAwLCAyLCAyNTAsIAorICAgIDE2NiwgNywgNiwgMSwgMjE4LCAxMDAsIDIsIDkwLCA3LCAzLCAxLCAyMTgsIDEwMCwgMiwgOTAsIDcsIDYsIDEsIDExMSwgMiwgCisgICAgMjE3LCA0MiwgNywgMywgMSwgMTExLCAyLCAyMTcsIDQyLCA3LCA2LCAxLCAxMTEsIDIsIDIzMiwgMzcsIDcsIDMsIDEsIAorICAgIDExMSwgMiwgMjMyLCAzNywgNywgNiwgMSwgMTExLCAyLCAyNTEsIDc0LCA3LCAzLCAxLCAxMTEsIDIsIDI1MSwgNzQsIDcsIAorICAgIDYsIDEsIDExMSwgMiwgMjIzLCAxMzEsIDQ5LCA3LCAzLCAxLCAxMTEsIDIsIDIyMywgMTMxLCA0OSwgNywgNiwgMSwgMTExLCAKKyAgICAyLCA1MSwgMTc5LCA3LCAzLCAxLCAxMTEsIDIsIDUxLCAxNzksIDcsIDYsIDEsIDExMSwgMiwgMjI3LCA5MCwgNywgMywgMSwgCisgICAgMTExLCAyLCAyMjcsIDkwLCA3LCA2LCAxLCAyMTQsIDgzLCAyLCAyNDksIDIyMywgNywgMywgMSwgMjE0LCA4MywgMiwgMjQ5LCAKKyAgICAyMjMsIDcsIDYsIDEsIDIxMywgMTA2LCAyLCAyNDksIDIyMywgNywgMywgMSwgMjEzLCAxMDYsIDIsIDI0OSwgMjIzLCA3LCAKKyAgICA2LCAxLCAyMTMsIDEwNiwgMiwgMjQ3LCAyMDksIDcsIDYsIDEsIDIxMiwgMTUzLCAyLCAxNzksIDcsIDMsIDEsIDIxMiwgCisgICAgMTUzLCAyLCAxNzksIDcsIDYsIDEsIDIxMiwgMTUzLCAyLCA2MiwgNDksIDcsIDMsIDEsIDIxMiwgMTUzLCAyLCA2MiwgNDksIAorICAgIDcsIDYsIDEsIDIxMiwgMTUzLCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjEyLCAxNTMsIDIsIDI1MCwgMTY2LCA3LCAzLCAxLCAKKyAgICAxODQsIDE5NywgNywgMywgMSwgNTQsIDIsIDkwLCA3LCA2LCAxLCA1NCwgMiwgMTAxLCA3LCA2LCAxLCA1NCwgMiwgMjE2LCAKKyAgICAyMjQsIDcsIDMsIDEsIDU0LCAyLCAyMTYsIDIyNCwgNywgNiwgMSwgMTYwLCAxODksIDcsIDMsIDEsIDE2MCwgMTg5LCA3LCAKKyAgICA2LCAxLCAyMjcsIDQwLCA3NSwgNywgNiwgMSwgMjUwLCAyNTMsIDIsIDEwMSwgNywgMywgMSwgMjUwLCAyNTMsIDIsIDEwMSwgCisgICAgNywgNiwgMSwgMjU0LCAxMjQsIDI0OSwgMywgNywgNiwgMSwgMjQ5LCA0LCAyLCAxMDEsIDcsIDYsIDEsIDI0OSwgNCwgMiwgCisgICAgMjE2LCAyMjQsIDcsIDMsIDEsIDI0OSwgNCwgMiwgMjE2LCAyMjQsIDcsIDMsIDEsIDIxNiwgNTgsIDI0OCwgNSwgNywgNiwgCisgICAgMSwgMjIzLCAyMDIsIDc0LCA3LCA2LCAxLCAyMjIsIDExMywgNywgNiwgMSwgMjI3LCA0MCwgNzQsIDcsIDYsIDEsIDI0NCwgCisgICAgMjMxLCAyLCAxMDEsIDcsIDMsIDEsIDI0NCwgMjMxLCAyLCAxMDEsIDcsIDYsIDEsIDI0MywgMTc4LCAyLCAxMDEsIDcsIDYsIAorICAgIDEsIDI0MywgODMsIDcsIDMsIDEsIDI0MCwgMTkzLCA3LCA2LCAxLCAyMzUsIDE4MywgNywgNiwgMSwgMjQwLCAxNDYsIDIsIAorICAgIDkwLCA3LCA2LCAxLCAyMzUsIDI4LCAyLCAxMDEsIDcsIDMsIDEsIDIzNSwgMjgsIDIsIDEwMSwgNywgMywgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDEzNCwgNywgMywgMSwgMjMzLCAxMjQsIDIsIDkwLCA3LCA2LCAxLCAyMTYsIDU4LCAxODMsIDcsIDYsIDEsIAorICAgIDIzMCwgOTgsIDIsIDQyLCAxMDEsIDcsIDMsIDEsIDIzMCwgOTgsIDIsIDE4NCwgNDYsIDIzMywgNjAsIDcsIDYsIDEsIDE1NywgCisgICAgMiwgMjMxLCAzNywgMjE3LCA0MiwgNywgNiwgMSwgMTU3LCAyLCAyNDAsIDIzNSwgNywgMywgMSwgMTU3LCAyLCAyNDAsIAorICAgIDIzNSwgNywgNiwgMSwgMjI3LCA4NSwgNywgMywgMSwgMjI3LCA4NSwgNywgNiwgMSwgMjI2LCAyMzAsIDIsIDEwMSwgNywgMywgCisgICAgMSwgMjI2LCAyMzAsIDIsIDEwMSwgNywgMSwgMjEyLCAyMDUsIDcsIDYsIDEsIDE2MCwgMTA5LCA3LCAzLCAxLCAxNjAsIAorICAgIDEwOSwgNywgNiwgMSwgMjQ1LCA0MCwgNywgMSwgMjIzLCAyMDIsIDI0NSwgNDEsIDIzMiwgMTc3LCA3LCAzLCAxLCAyMTgsIAorICAgIDEwMCwgMiwgMjI2LCAxOTMsIDEwMSwgNywgNiwgMSwgMjE4LCAxMDAsIDIsIDEwMSwgNywgMywgMSwgMjE4LCAxMDAsIDIsIAorICAgIDEwMSwgNywgNiwgMSwgMjE4LCAxMDAsIDIsIDIyMywgMjA3LCAxMDEsIDcsIDYsIDEsIDExMSwgMiwgMjQwLCAyMzUsIDcsIAorICAgIDMsIDEsIDExMSwgMiwgMjQwLCAyMzUsIDcsIDYsIDEsIDIxNSwgMTI4LCA3LCA2LCAxLCAyMTUsIDgwLCAyLCAxMDEsIDcsIAorICAgIDYsIDEsIDIxMywgMTA2LCAyLCAxMDEsIDcsIDMsIDEsIDIxMywgMTA2LCAyLCAxMDEsIDcsIDYsIDEsIDIxMiwgMTUzLCAyLCAKKyAgICA5MCwgNywgMywgMSwgMjEyLCAxNTMsIDIsIDkwLCA3LCA2LCAxLCAyNDQsIDIzMiwgNywgNiwgMSwgMjQ0LCAyMzMsIDIyMywgCisgICAgMjAxLCA3LCAzLCAxLCAyNDQsIDIzMywgMjIzLCAyMDEsIDcsIDMsIDEsIDI0NCwgMjMzLCAyLCAyMTgsIDI3LCA3LCAxLCAKKyAgICAxMTcsIDIsIDkwLCA3LCA2LCAxLCAxNjAsIDE4MCwgNywgMywgMSwgMTYwLCAxODAsIDcsIDEsIDIzNSwgMTkxLCAyNDIsIAorICAgIDE1NiwgMjE5LCA3MCwgMiwgOTAsIDcsIDEsIDIxMywgMTY5LCA3LCAxLCAyNDcsIDI1NCwgMjQ5LCAyMDQsIDcsIDEsIDIzMywgCisgICAgMTAwLCAyNDksIDIwNCwgNywgMSwgMjU0LCA0NiwgMjQ5LCAyMDQsIDcsIDEsIDIyMywgMjA3LCAyNDksIDIwNCwgNywgNiwgCisgICAgMSwgMjQ1LCAyNTEsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAyNDksIDQsIDIsIDMsIDEsIDIxMiwgMTUzLCAyLCAyNTAsIAorICAgIDE2NiwgNywgMywgMSwgMjQ1LCAyNTEsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAyMzIsIDIxNywgNywgNiwgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDMsIDEsIDIzNSwgMTQyLCA3LCAzLCAxLCAyMzIsIDIxNywgNywgNiwgMSwgMjI5LCAxNywgNywgNiwgMSwgCisgICAgMjMwLCA5OCwgMiwgMywgMSwgMjM1LCAxNDIsIDcsIDMsIDEsIDIyOSwgMTcsIDcsIDYsIDEsIDExOCwgMiwgMjUwLCAxNjYsIAorICAgIDcsIDMsIDEsIDExOCwgMiwgMjUwLCAxNjYsIDcsIDYsIDEsIDI0MCwgMTQ2LCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjQwLCAKKyAgICAxNDYsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAxNTcsIDIsIDI1MCwgMTY2LCA3LCAzLCAxLCAxNTcsIDIsIDI1MCwgMTY2LCAKKyAgICA3LCA2LCAxLCAxMTEsIDIsIDI1MCwgMTY2LCA3LCAzLCAxLCAxMTEsIDIsIDI1MCwgMTY2LCA3LCA2LCAxLCAxMTEsIDIsIAorICAgIDI0NywgMjEwLCAyNCwgMjMyLCAzNywgNywgMywgMSwgMTExLCAyLCAyNDcsIDIxMCwgMjQsIDIzMiwgMzcsIDcsIDYsIDEsIAorICAgIDExMSwgMiwgMjQ3LCAyMTAsIDI0LCAxNzksIDcsIDMsIDEsIDExMSwgMiwgMjQ3LCAyMTAsIDI0LCAxNzksIDcsIDYsIDEsIAorICAgIDExMSwgMiwgMjQ3LCAyMTAsIDI0LCAyNTAsIDE2NiwgNywgMywgMSwgMTExLCAyLCAyNDcsIDIxMCwgMjQsIDI1MCwgMTY2LCAKKyAgICA3LCA2LCAxLCAxMTEsIDIsIDI0NywgMjEwLCAyNCwgMjQyLCAxMTMsIDcsIDMsIDEsIDExMSwgMiwgMjQ3LCAyMTAsIDI0LCAKKyAgICAyNDIsIDExMywgNywgMywgMSwgMjE2LCA1OCwgNzQsIDcsIDYsIDEsIDExOCwgMiwgMjQ3LCAyMTAsIDI0LCAyMzIsIDM3LCAKKyAgICA3LCAzLCAxLCAxMTgsIDIsIDI0NywgMjEwLCAyNCwgMjMyLCAzNywgNywgNiwgMSwgMTE4LCAyLCA2MiwgNzgsIDI0LCAyMzIsIAorICAgIDM3LCA3LCAzLCAxLCAxMTgsIDIsIDYyLCA3OCwgMjQsIDIzMiwgMzcsIDcsIDYsIDEsIDI1NCwgMTQ5LCAyLCAyMzIsIDM3LCAKKyAgICA3LCAzLCAxLCAyNTQsIDE0OSwgMiwgMjMyLCAzNywgNywgNiwgMSwgMjQzLCAxNzgsIDIsIDkwLCA3LCAzLCAxLCAyNDMsIAorICAgIDE3OCwgMiwgOTAsIDcsIDYsIDEsIDI0MywgMTc4LCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjQzLCAxNzgsIDIsIDI1MCwgCisgICAgMTY2LCA3LCA2LCAxLCAyMzUsIDI4LCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjM1LCAyOCwgMiwgMjUwLCAxNjYsIDcsIDYsIAorICAgIDEsIDE1NywgMiwgMjI3LCA5MCwgNywgMywgMSwgMTU3LCAyLCAyMjcsIDkwLCA3LCA2LCAxLCAxNTcsIDIsIDIyNywgOTEsIAorICAgIDI0LCAyMzIsIDM3LCA3LCAzLCAxLCAxNTcsIDIsIDIyNywgOTEsIDI0LCAyMzIsIDM3LCA3LCA2LCAxLCAyNDQsIDIzMywgMiwgCisgICAgMjUwLCAxNjYsIDcsIDMsIDEsIDI0NCwgMjMzLCAyLCAyNTAsIDE2NiwgNywgMywgMSwgMjM1LCAxNDMsIDIsIDI1MCwgMTY2LCAKKyAgICA3LCA2LCAxLCAyNDUsIDI1MCwgNywgNiwgMSwgMjQ5LCA0LCAyLCAzLCAxLCAyMTIsIDE1MiwgNywgMywgMSwgMjQ1LCAyNTAsIAorICAgIDcsIDYsIDEsIDI0MywgMTc4LCAyLCAxNzksIDcsIDMsIDEsIDI0MywgMTc4LCAyLCAxNzksIDcsIDYsIDEsIDI0MCwgMTkxLCAKKyAgICA3LCA2LCAxLCAyMTMsIDE2OSwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjQyLCAxMTMsIDcsIDMsIDEsIDIzMCwgOTgsIDIsIAorICAgIDI0MiwgMTEzLCA3LCA2LCAxLCAxMTgsIDIsIDIyMywgMTMxLCA3OCwgMjQsIDE3OSwgNywgMywgMSwgMTE4LCAyLCAyMjMsIAorICAgIDEzMSwgNzgsIDI0LCAxNzksIDcsIDYsIDEsIDI1NCwgMTQ5LCAyLCAxNzksIDcsIDMsIDEsIDI1NCwgMTQ5LCAyLCAxNzksIAorICAgIDcsIDYsIDEsIDE1NywgMiwgMjE5LCA0NSwgMjQsIDE3OSwgNywgMywgMSwgMTU3LCAyLCAyMTksIDQ1LCAyNCwgMTc5LCA3LCAKKyAgICA2LCAxLCAxMTgsIDIsIDUxLCAyNDIsIDExMywgNywgMywgMSwgMTE4LCAyLCA1MSwgMjQyLCAxMTMsIDcsIDYsIDEsIDExOCwgCisgICAgMiwgMjM1LCAxOTEsIDI1MSwgNzQsIDcsIDMsIDEsIDExOCwgMiwgMjM1LCAxOTEsIDI1MSwgNzQsIDcsIDYsIDEsIDE5MSwgCisgICAgMiwgNTEsIDI0MiwgMTEzLCA3LCAzLCAxLCAxOTEsIDIsIDUxLCAyNDIsIDExMywgNywgNiwgMSwgMTkxLCAyLCAyMzUsIAorICAgIDE5MSwgMjUxLCA3NCwgNywgMywgMSwgMTkxLCAyLCAyMzUsIDE5MSwgMjUxLCA3NCwgNywgNiwgMSwgMjQwLCAxNDYsIDIsIAorICAgIDUxLCAyNDIsIDExMywgNywgMywgMSwgMjQwLCAxNDYsIDIsIDUxLCAyNDIsIDExMywgNywgNiwgMSwgMjQwLCAxNDYsIDIsIAorICAgIDIzNSwgMTkxLCAyNTEsIDc0LCA3LCAzLCAxLCAyNDAsIDE0NiwgMiwgMjM1LCAxOTEsIDI1MSwgNzQsIDcsIDYsIDEsIDE1NywgCisgICAgMiwgNTEsIDI0MiwgMTEzLCA3LCAzLCAxLCAxNTcsIDIsIDUxLCAyNDIsIDExMywgNywgNiwgMSwgMTU3LCAyLCAyMzUsIAorICAgIDE5MSwgMjUxLCA3NCwgNywgMywgMSwgMTU3LCAyLCAyMzUsIDE5MSwgMjUxLCA3NCwgNywgNiwgMSwgMjI0LCAxMTMsIDIsIAorICAgIDUxLCAyNDIsIDExMywgNywgMywgMSwgMjI0LCAxMTMsIDIsIDUxLCAyNDIsIDExMywgNywgNiwgMSwgMjI0LCAxMTMsIDIsIAorICAgIDIzNSwgMTkxLCAyNTEsIDc0LCA3LCAzLCAxLCAyMjQsIDExMywgMiwgMjM1LCAxOTEsIDI1MSwgNzQsIDcsIDYsIDEsIDExMSwgCisgICAgMiwgNTEsIDI0MiwgMTEzLCA3LCAzLCAxLCAxMTEsIDIsIDUxLCAyNDIsIDExMywgNywgNiwgMSwgMTExLCAyLCAyMzUsIAorICAgIDE5MSwgMjUxLCA3NCwgNywgMywgMSwgMTExLCAyLCAyMzUsIDE5MSwgMjUxLCA3NCwgNywgNiwgMSwgMjIzLCA0LCAyLCAKKyAgICAyNDksIDE1OCwgNTUsIDcsIDMsIDEsIDIyMywgNCwgMiwgMjQ5LCAxNTgsIDU1LCA3LCA2LCAxLCAyMTgsIDEwMCwgMiwgCisgICAgMjQ5LCAxNTgsIDU1LCA3LCAzLCAxLCAyMTgsIDEwMCwgMiwgMjQ5LCAxNTgsIDU1LCA3LCA2LCAxLCAyMTIsIDIyMiwgNywgCisgICAgMywgMSwgMjEyLCAyMjIsIDcsIDYsIDEsIDI0MiwgNDIsIDIsIDI1MCwgMTY2LCA3LCAzLCAxLCAyNDIsIDQyLCAyLCAyNTAsIAorICAgIDE2NiwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMTg0LCA0NiwgMjMzLCA2MCwgNywgMywgMSwgMjQ5LCA0LCAyLCAyNDksIDQxLCAKKyAgICA3LCA2LCAxLCAyMjcsIDIsIDcsIDMsIDEsIDIyNywgMiwgNywgNiwgMSwgMjEyLCAxNTMsIDIsIDEwMSwgNywgMywgMSwgCisgICAgMjEyLCAxNTMsIDIsIDEwMSwgNywgNiwgMSwgMTE4LCAyLCA2MiwgNDksIDcsIDMsIDEsIDExOCwgMiwgNjIsIDQ5LCA3LCA2LCAKKyAgICAxLCAxOTEsIDIsIDI1MCwgMTE3LCA3LCAzLCAxLCAxOTEsIDIsIDI1MCwgMTE3LCA3LCA2LCAxLCAxNTcsIDIsIDI0NywgCisgICAgMjEwLCAyNCwgMjMyLCAzNywgNywgMywgMSwgMTU3LCAyLCAyNDcsIDIxMCwgMjQsIDIzMiwgMzcsIDcsIDYsIDEsIDE1NywgCisgICAgMiwgMjE3LCA0MywgMjQsIDIzMiwgMzcsIDcsIDMsIDEsIDE1NywgMiwgMjE3LCA0MywgMjQsIDIzMiwgMzcsIDcsIDYsIDEsIAorICAgIDE1NywgMiwgNjIsIDQ5LCA3LCAzLCAxLCAxNTcsIDIsIDYyLCA0OSwgNywgNiwgMSwgMTU3LCAyLCA2MiwgNzgsIDI0LCAKKyAgICAyMzIsIDM3LCA3LCAzLCAxLCAxNTcsIDIsIDYyLCA3OCwgMjQsIDIzMiwgMzcsIDcsIDYsIDEsIDIxMywgMTA2LCAyLCAyMzIsIAorICAgIDM3LCA3LCAzLCAxLCAyMTMsIDEwNiwgMiwgMjMyLCAzNywgNywgMywgMSwgMjMzLCAxNzEsIDIsIDI0OSwgNDEsIDcsIDMsIAorICAgIDEsIDIzMCwgOTgsIDIsIDI0OSwgNDEsIDcsIDMsIDEsIDIxOCwgMTAwLCAyLCAyNDksIDQxLCA3LCAzLCAxLCAyNDcsIDczLCAKKyAgICAyMzUsIDE0MiwgNywgMywgMSwgMjQ4LCA4OSwgMjQ3LCAxNzIsIDcsIDMsIDEsIDIyNCwgMTc2LCAyNDcsIDE3MiwgNywgNiwgCisgICAgMSwgMTE4LCAyLCA5MCwgNywgNiwgMSwgMjUwLCAyNTMsIDIsIDkwLCA3LCAzLCAxLCAyNTAsIDI1MywgMiwgOTAsIDcsIDYsIAorICAgIDEsIDIzMywgMTcxLCAyLCAxMzQsIDcsIDYsIDEsIDIxOCwgMTAwLCAyLCAyNDcsIDIwNywgOTAsIDcsIDMsIDEsIDIyMywgNCwgCisgICAgMiwgMjE4LCAxOTUsIDIxOCwgMjcsIDcsIDMsIDEsIDIxMiwgMTUzLCAyLCAyMTgsIDE5NSwgMjE4LCAyNywgNywgNiwgMSwgCisgICAgMjQyLCAxNTYsIDIxOSwgNjksIDcsIDMsIDEsIDI0MiwgMTU2LCAyMTksIDY5LCA3LCA2LCAxLCA1NCwgMiwgOTAsIDcsIDYsIAorICAgIDEsIDExMSwgMTM0LCA3LCA2LCAxLCAyMTYsIDU4LCAyMTUsIDc5LCA3LCA2LCAxLCAxOTEsIDIsIDkwLCA3LCAzLCAxLCAKKyAgICAxOTEsIDIsIDkwLCA3LCA2LCAxLCAyMzUsIDE0MywgMiwgOTAsIDcsIDMsIDEsIDIzNSwgMTQzLCAyLCA5MCwgNywgNiwgMSwgCisgICAgMywgMjI0LCAyNDEsIDIsIDI0MSwgMzgsIDIxOCwgMjcsIDcsIDMsIDEsIDIyNCwgMjQxLCAyLCAyNDEsIDM4LCAyMTgsIDI3LCAKKyAgICA3LCA2LCAxLCAyMjQsIDExMywgMiwgOTAsIDcsIDMsIDEsIDIyNCwgMTEzLCAyLCA5MCwgNywgNiwgMSwgMjEzLCAxMDYsIDIsIAorICAgIDkwLCA3LCAzLCAxLCAyMTMsIDEwNiwgMiwgOTAsIDcsIDMsIDEsIDIxNiwgNTgsIDYxLCA3LCAzLCAxLCAyNTQsIDUyLCA3LCAKKyAgICAzLCAxLCAyMTYsIDU4LCAyNTQsIDUyLCA3LCAzLCAxLCA1NCwgMiwgMTAxLCA3LCAzLCAxLCAyMjcsIDQwLCA3NSwgNywgMywgCisgICAgMSwgMjUwLCAyNTMsIDIsIDI0OSwgNDEsIDcsIDMsIDEsIDI0OSwgNCwgMiwgMjE4LCAyNywgNywgMywgMSwgMjQ5LCA0LCAyLCAKKyAgICAxMDEsIDcsIDMsIDEsIDIyMywgMjAyLCA3NCwgNywgMywgMSwgMjIyLCAxMTMsIDcsIDMsIDEsIDIyMiwgMTE0LCAyLCAxMDEsIAorICAgIDcsIDMsIDEsIDIyNywgNDAsIDc0LCA3LCAzLCAxLCAyMjMsIDIwMiwgMjI3LCA0MCwgNzQsIDcsIDMsIDEsIDIyMywgMjAyLCAKKyAgICAyMjcsIDQwLCAxOTEsIDIsIDEwMSwgNywgMywgMSwgMjQ5LCAxOTMsIDIyMywgMjAyLCAyMjcsIDQwLCA3NCwgNywgMywgMSwgCisgICAgMjQ3LCA3MywgMjM1LCAxNDMsIDIsIDkwLCA3LCAzLCAxLCAyNDMsIDE3OCwgMiwgMTAxLCA3LCAzLCAxLCAxMTMsIDI0MywgCisgICAgMTc3LCA3LCAxLCAzLCA2LCAyNDMsIDE3NywgNywgMywgMSwgMjQzLCA4MywgNywgMywgMSwgMjI0LCA0MywgMjQwLCAyMzUsIAorICAgIDcsIDMsIDEsIDIxNiwgNTgsIDI0MiwgNDEsIDcsIDMsIDEsIDI0MiwgNDIsIDIsIDEwMSwgNywgMywgMSwgMjQxLCAxOTIsIAorICAgIDIsIDEwMSwgNywgMywgMSwgMjQwLCAxNDYsIDIsIDkwLCA3LCAzLCAxLCAyMzUsIDE4MywgNywgMSwgMywgNiwgNzIsIDcsIAorICAgIDMsIDEsIDIzMywgMTcxLCAyLCAyMzEsIDM3LCAyMTcsIDQyLCA3LCAzLCAxLCAyMzMsIDE3MSwgMiwgMjUxLCAyMTgsIDcsIAorICAgIDMsIDEsIDIzMywgMTcxLCAyLCAyMjMsIDIwNywgMTAxLCA3LCAzLCAxLCAyMzMsIDI3LCA3LCAzLCAxLCAyMTYsIDU4LCAKKyAgICAxODMsIDcsIDMsIDEsIDIxNiwgNTgsIDIzMiwgMTEwLCAyLCAxODQsIDIzMywgNjAsIDcsIDMsIDEsIDIzMiwgMTEwLCAyLCAKKyAgICAxMDEsIDcsIDMsIDEsIDIzMCwgOTgsIDIsIDQyLCAxMDEsIDcsIDMsIDEsIDIzMCwgOTgsIDIsIDIyMywgMjA3LCAxMDEsIDcsIAorICAgIDEsIDMsIDYsIDIwNCwgNywgMywgMSwgMjUyLCA1NCwgNzUsIDcsIDEsIDMsIDYsIDIyNywgOTksIDcsIDMsIDEsIDI0OSwgCisgICAgMTkzLCAyMjcsIDY3LCA3LCAzLCAxLCAyMjYsIDksIDcsIDMsIDEsIDIxNiwgNTgsIDE0OSwgNywgMywgMSwgMjE2LCA1OCwgCisgICAgMjI0LCAxMTMsIDIsIDE4NCwgMjMzLCA2MCwgNywgMywgMSwgMjE2LCA1OCwgMjI0LCAxMTMsIDIsIDEwMSwgNywgMywgMSwgCisgICAgMjI0LCAxMTMsIDIsIDE4NCwgMjMzLCA2MCwgNywgMywgMSwgMjI0LCAxMTMsIDIsIDIxOCwgMjcsIDcsIDMsIDEsIDIyNCwgCisgICAgMTEzLCAyLCAyNDQsIDU2LCA3LCAzLCAxLCAyMjMsIDIwMiwgMjI0LCAxMTMsIDIsIDI0NCwgNTYsIDcsIDEsIDMsIDYsIAorICAgIDE0OSwgNywgMSwgMywgNiwgMjM1LCAxOTEsIDE0OSwgNywgMywgMSwgMjIzLCA0LCAyLCAxMDEsIDcsIDMsIDEsIDI0NSwgCisgICAgNDAsIDcsIDMsIDEsIDI0NywgNzMsIDIzNSwgMTQzLCAyLCAyMTksIDQ1LCAyNCwgMTAxLCA3LCAzLCAxLCAyMTksIDE2MywgCisgICAgMjIzLCAyMDIsIDI0NSwgNDAsIDcsIDMsIDEsIDI0NSwgNDEsIDIsIDI0OSwgNDEsIDcsIDMsIDEsIDIxNiwgNTgsIDIxOCwgCisgICAgOTksIDcsIDMsIDEsIDIxOCwgMTAwLCAyLCAyMjMsIDIwNywgMTAxLCA3LCAzLCAxLCAxMTEsIDEzNCwgNywgMywgMSwgMjE1LCAKKyAgICAxMjgsIDcsIDMsIDEsIDIxNSwgODAsIDIsIDEwMSwgNywgMywgMSwgMjE2LCA1OCwgMjE1LCA3OSwgNywgMywgMSwgMjE2LCAKKyAgICA1OCwgMjE0LCA4MiwgNywgMywgMSwgMjE2LCA1OCwgMjEzLCAxMDUsIDcsIDEsIDMsIDYsIDIxMywgMTA1LCA3LCAzLCAxLCAKKyAgICAyMTIsIDE1MywgMiwgMjIzLCAyMDcsIDEwMSwgNywgMywgMSwgMjEyLCAxNTMsIDIsIDI0OSwgNDEsIDcsIDMsIDEsIDI0NCwgCisgICAgMjMyLCA3LCAzLCAxLCAyNDQsIDIzMywgMiwgMjQ5LCA0MSwgNywgMSwgMjQyLCAxNTYsIDIxOSwgNjksIDcsIDEsIDIyNiwgCisgICAgMTUsIDIxNCwgMTE2LCAyNDMsIDIxOSwgNywgMSwgMjM1LCAxOTEsIDI0MiwgMTU2LCAyMTksIDY5LCA3LCAxLCAyMTksIDUwLCAKKyAgICAyNTAsIDI1MiwgNywgMSwgMjUxLCAxNjksIDI0OSwgMjA0LCA3LCAxLCAzLCA2LCAyNTMsIDc0LCA3LCAzLCAxLCAyNDksIAorICAgIDE5MywgMjI3LCA0MCwgNzQsIDcsIDEsIDMsIDYsIDI0MywgMTc4LCAyLCAxMDEsIDcsIDEsIDMsIDYsIDI0MiwgNDEsIDcsIAorICAgIDMsIDEsIDIzNSwgMTQzLCAyLCAyNDksIDY3LCA3LCAzLCAxLCAyMTYsIDU4LCAyMzUsIDI3LCA3LCAxLCAzLCA2LCAxNTAsIAorICAgIDcsIDMsIDEsIDIyNCwgMjQxLCAyLCAxMDEsIDcsIDEsIDI0MiwgMTU2LCAyMTksIDcwLCAyLCA5MCwgNywgMSwgMjIzLCAKKyAgICAyMDIsIDI0MiwgMTU2LCAyMTksIDcwLCAyLCA5MCwgNywgMywgMSwgMjQ1LCAyNTEsIDI0NywgMTcyLCA3LCAzLCAxLCAyNDcsIAorICAgIDIzMywgMjQ3LCAxNzIsIDcsIDMsIDEsIDI0NSwgMjUxLCAyNDcsIDE3MywgMiwgMjQ5LCA0MSwgNywgMywgMSwgMjE2LCAKKyAgICAxNDMsIDI0NywgMTcyLCA3LCAzLCAxLCAyMTcsIDE4OCwgMjQ3LCAxNzIsIDcsIDMsIDEsIDIxNywgMjM2LCAyNDcsIDE3MywgCisgICAgMiwgMjQ5LCA0MSwgNywgMywgMSwgMjQ0LCAxMDMsIDI0NywgMTcyLCA3LCAzLCAxLCAyMzIsIDE1OCwgMjQ3LCAxNzIsIDcsIAorICAgIDMsIDEsIDIzMiwgMTExLCAyNDcsIDE3MiwgNywgMSwgMjUxLCAxNjksIDIyNiwgNTYsIDcsIDEsIDI1MSwgMTc3LCAyMjYsIAorICAgIDU2LCA3LCAzLCAxLCAyMTYsIDU4LCAyNDIsIDQyLCAyLCAyNDQsIDU2LCA3LCAzLCAxLCAyMTYsIDU4LCAyNDIsIDQyLCAyLCAKKyAgICAyNDQsIDU3LCAyNCwgMjE4LCAyNywgNTksIDEsIDMsIDI0MiwgNDEsIDU5LCAxLCAzLCAyNDIsIDQyLCAyLCAxMDEsIDU5LCAKKyAgICAxLCAzLCAyMzUsIDE0MiwgNTksIDEsIDMsIDE0OSwgNTksIDEsIDMsIDIxNiwgNTgsIDE0OSwgNTksIDEsIDMsIDIxNiwgNTgsIAorICAgIDIyNCwgMTEzLCAyLCAxMDEsIDU5LCAxLCAzLCA2LCAyMzUsIDE5MSwgMTQ5LCA1OSwgMSwgMywgMjE0LCA4MiwgNTksIDEsIAorICAgIDMsIDIxMywgMTA1LCA1OSwgMSwgMjI1LCA3MSwgNTksIDEsIDUxLCAyMjUsIDcxLCA1OSwgMSwgMjE2LCA1OCwgMjQ5LCAKKyAgICAxNTcsIDU5LCAxLCAyNTMsIDIyNiwgNTksIDEsIDIyMywgMjAyLCAyNDksIDE1NywgNTksIDEsIDQ2LCAxNTEsIDIyMywgCisgICAgMTMwLCA1OSwgMSwgNDIsIDE1MSwgMjIzLCAxMzAsIDU5LCAxLCAyNDIsIDE1NiwgMjE5LCA2OSwgNTksIDEsIDIyMywgMjAyLCAKKyAgICAyNDIsIDE1NiwgMjE5LCA2OSwgNTksIDEsIDQyLCAyNTMsIDE2NCwgNTksIDEsIDQ2LCAyNTMsIDE2NCwgNTksIDEsIDExNCwgCisgICAgMjUzLCAxNjQsIDU5LCAxLCAxMTksIDI1MywgMTY0LCA1OSwgMSwgMjQ5LCAyMjQsIDI1NCwgMTc0LCAyNTAsIDE2NiwgNTksIAorICAgIDEsIDcxLCAyMzIsIDI0MiwgNTksIDEsIDIzMiwgMzcsIDU5LCAxLCAyNTQsIDE2NCwgMjU0LCAxNzQsIDU5LCAxLCAyNDIsIAorICAgIDExNCwgMjU0LCAxNzQsIDU5LCAxLCAxMTUsIDcxLCAyMzIsIDI0MiwgNTksIDEsIDExNSwgMjMyLCAzNywgNTksIDEsIDExNSwgCisgICAgMjQyLCAxMTQsIDI1NCwgMTc0LCA1OSwgMSwgMTE1LCAyNTQsIDE2NCwgMjU0LCAxNzQsIDU5LCAxLCAyMTYsIDE4MCwgMjQ5LCAKKyAgICAxNjQsIDU5LCAxLCAxNTEsIDIxNiwgMTgwLCAyNDksIDE2NCwgNTksIDEsIDI1MCwgMTA3LCA0NiwgMTUxLCAyMjMsIDEzMCwgCisgICAgNTksIDEsIDI1MCwgMTA3LCA0MiwgMTUxLCAyMjMsIDEzMCwgNTksIDEsIDExNCwgMjE4LCAzNiwgNTksIDEsIDExOSwgMjE4LCAKKyAgICAzNiwgNTksIDEsIDk0LCA1MiwgNTksIDEsIDIzMCwgMjUxLCA1MiwgMjUxLCA3NCwgNjIsIDQ5LCAyMjMsIDEzMSwgNDksIAorICAgIDIyNywgOTAsIDMsIDIxNywgNDIsIDUxLCAyNTQsIDE2NCwgMjU0LCAxNzQsIDU5LCAxLCAyMjMsIDE4OSwgMTAxLCA1OSwgMSwgCisgICAgMjQ5LCA3MSwgMjU0LCAxNzQsIDU5LCAxLCAzLCAyNDMsIDgzLCA1OSwgMSwgMywgMTUwLCA1OSwgMSwgMywgMTk3LCA1OSwgCisgICAgMSwgMywgMjEzLCAxNjYsIDU5LCAxLCAzLCAyMjMsIDIwMiwgMjQyLCAxNTYsIDIxOSwgNjksIDU5LCAxLCAyNDQsIDI0NCwgCisgICAgMTYwLCAxMzQsIDU5LCAxLCAxMjQsIDE2MCwgMTM0LCA1OSwgMSwgMjMxLCAzOCwgMTYwLCAxMzQsIDU5LCAxLCAxMTUsIAorICAgIDE2MCwgMTM0LCA1OSwgMSwgMjQ0LCAyNDMsIDE2MCwgMTM0LCA1OSwgMSwgMjEyLCAyNDUsIDI0NywgMjUxLCAxNjAsIDc3LCAKKyAgICA1OSwgMSwgMjEzLCA1OSwgMjQ3LCAyNTEsIDE2MCwgNzcsIDU5LCAxLCAyMTQsIDExNCwgNTksIDEsIDIxNSwgMTU2LCA1OSwgCisgICAgMSwgNTEsIDI1MywgMjI2LCA1OSwgMSwgMTE1LCAxMTksIDI1MywgMTY0LCA1OSwgMSwgMTE1LCAxMTQsIDI1MywgMTY0LCAKKyAgICA1OSwgMSwgMTE1LCA0MiwgMjUzLCAxNjQsIDU5LCAxLCAxMTUsIDQ2LCAyNTMsIDE2NCwgNTksIDEsIDExNSwgMjIzLCAxMzAsIAorICAgIDU5LCAxLCAyMzEsIDM3LCAyNDIsIDExNCwgMjU0LCAxNzQsIDU5LCAxLCAyMzEsIDM3LCA1MSwgMjQyLCAxMTQsIDI1NCwgCisgICAgMTc0LCA1OSwgMSwgMjMxLCAzNywgNTEsIDI1NCwgMTY0LCAyNTQsIDE3NCwgNTksIDEsIDExNSwgMjE3LCA0MiwgNTksIDEsIAorICAgIDIyNCwgNDgsIDI0OSwgMTY0LCA1OSwgMSwgMjUxLCAyMzQsIDEyNCwgMjE2LCAyNDEsIDU5LCAxLCAyNDUsIDEwMSwgMTI0LCAKKyAgICAyMTYsIDI0MSwgNTksIDEsIDI1MSwgMjM0LCAxMTUsIDIxNiwgMjQxLCA1OSwgMSwgMjQ1LCAxMDEsIDExNSwgMjE2LCAyNDEsIAorICAgIDU5LCAxLCAyMjAsIDIzNCwgNTksIDEsIDIyNywgNDAsIDIyMCwgMjM0LCA1OSwgMSwgMTE1LCA0MiwgNjgsIDM3LCAyNDIsIAorICAgIDExNCwgMjU0LCAxNzQsIDM3LCAyNTQsIDE2NCwgMjU0LCAxNzQsIDM3LCAyNDksIDIyNCwgMjU0LCAxNzQsIDM3LCAyMTcsIAorICAgIDQyLCAzNywgMjMyLCAzNywgMzcsIDIyNiwgMjQzLCAzNywgMjUxLCA3NCwgMzcsIDYyLCA0OSwgMzcsIDI0NywgMjA5LCAzNywgCisgICAgMjQxLCAzOCwgNDksIDM3LCAyMjMsIDEzMSwgNDksIDM3LCA1MSwgMjU0LCAxNjQsIDI1NCwgMTc0LCAzNywgMjUwLCAxNjYsIAorICAgIDM3LCA3MSwgMjMyLCAyNDMsIDQ5LCAzNywgNTEsIDcxLCAyMzIsIDI0MywgNDksIDM3LCA1MSwgMjQyLCAxMTQsIDI1NCwgCisgICAgMTc0LCAzNywgMjUwLCAxODcsIDM3LCAyMzUsIDE5MSwgMjUxLCA3NCwgMzcsIDIxNiwgNTgsIDI0OSwgMTU4LCA0OSwgMzcsIAorICAgIDI0OSwgMTU4LCA0OSwgMzcsIDIyMywgMjAyLCAyNDksIDE1OCwgNDksIDM3LCAyNDksIDE1OCwgNzgsIDIyMywgMTQ4LCAzNywgCisgICAgMjQyLCAxMTQsIDI1NCwgMTc1LCA1NSwgMzcsIDI1NCwgMTY0LCAyNTQsIDE3NSwgNTUsIDM3LCA0MiwgMjE4LCAzNywgNTUsIAorICAgIDM3LCA0NiwgMjE4LCAzNywgNTUsIDM3LCA0MiwgMjU0LCAxOSwgNDksIDM3LCAyNDAsIDIzNSwgMzcsIDQyLCAxNTEsIDIyMywgCisgICAgMTMxLCA1NSwgMzcsIDExNCwgMjE4LCAzNywgNTUsIDM3LCAxMTksIDIxOCwgMzcsIDU1LCAzNywgOTQsIDUsIDU1LCAzNywgCisgICAgMjMwLCAyNTEsIDUsIDU1LCAzNywgMjI2LCAxOTEsIDI0MSwgMzgsIDU1LCAzNywgMjIzLCAyMDcsIDI0MSwgMzgsIDU1LCAKKyAgICAzNywgNjIsIDU1LCAzNywgMjQ3LCAyMTAsIDU1LCAzNywgMjIzLCAxMzEsIDU1LCAzNywgMjQ5LCAxNTgsIDU1LCAzNywgCisgICAgMjUwLCAxMTcsIDM3LCAyMjcsIDkwLCAzNywgNzEsIDIzMiwgMjQzLCA1NSwgMzcsIDI1MSwgNjgsIDU1LCAzNywgMjM1LCAKKyAgICAxOTEsIDUxLCAyNTMsIDE5NCwgNTUsIDM3LCAyNTAsIDE2NywgNTUsIDM3LCAyNDksIDIyNCwgMjU0LCAxNzUsIDU1LCAzNywgCisgICAgMjUxLCA3NSwgNTUsIDM3LCAyMzUsIDE5MSwgMjUxLCA3NSwgNTUsIDM3LCAyMTcsIDQzLCA1NSwgMzcsIDIzMiwgMzgsIDU1LCAKKyAgICAzNywgMTE1LCAyMzIsIDI0MiwgMzcsIDUxLCAxMTUsIDIzMiwgMjQyLCAzNywgMjE3LCA0MywgMjI2LCAyNDQsIDM3LCAyMjAsIAorICAgIDE3NSwgMjE5LCA0NSwgMjI2LCAyNDQsIDM3LCAxODQsIDIxOSwgNDUsIDIyNiwgMjQ0LCAzNywgMjIwLCAxNzUsIDIxOSwgCisgICAgMjMyLCAyMjYsIDI0NCwgMzcsIDE4NCwgMjE5LCAyMzIsIDIyNiwgMjQ0LCAzNywgNDYsIDE1MSwgMjIzLCAxMzEsIDU1LCAKKyAgICAzNywgMjM1LCAxOTEsIDI1MSwgNjgsIDU1LCAzNywgNDEsIDU1LCAzNywgMjIyLCA5OSwgNTUsIDM3LCAyMTMsIDE2NywgNDksIAorICAgIDM3LCA3MSwgMjE3LCA0MiwgMzcsIDUxLCAyMjYsIDI0MywgMzcsIDI0MiwgMTE0LCAxNjAsIDc3LCAzNywgMjU0LCAxNjQsIAorICAgIDE2MCwgNzcsIDM3LCAyNSwgMjI2LCA1MCwgMzcsIDI1LCAyMzQsIDExLCAzNywgMjUsIDI0NywgMjA0LCAyMTYsIDIzMSwgCisgICAgMzcsIDI1LCAyMTIsIDIxMCwgMzcsIDI1MSwgNjgsIDQ5LCAzNywgMjQ1LCA2MSwgNSwgNTUsIDM3LCA1MSwgNzEsIDIzMiwgCisgICAgMjQzLCA1NSwgMzcsIDQyLCAyNTQsIDE5LCA1NSwgMzcsIDIyOCwgMTYzLCAyMTcsIDQzLCA0OSwgMzcsIDI0MSwgNDQsIDQ5LCAKKyAgICAzNywgMjU0LCA1NywgMTIzLCAyMTEsIDIxMSwgNDksIDM3LCA0MiwgNDYsIDc2LCA1NSwgMzcsIDIxNSwgMTI0LCA3NiwgNTUsIAorICAgIDM3LCAyNDIsIDExOCwgMjM1LCA2NiwgMzcsIDQ2LCAyNTMsIDE2NSwgNDksIDM3LCA0MiwgMTUxLCAyMjMsIDEzMSwgNDksIAorICAgIDM3LCAyNDQsIDEwMCwgMzcsIDIxMywgMTY3LCA1NSwgMzcsIDQyLCAyNTMsIDE2NSwgNTUsIDM3LCA0NiwgMjUzLCAxNjUsIAorICAgIDU1LCAzNywgNDYsIDI1MywgMTY1LCAyNCwgMTE0LCAyNTMsIDE2NSwgNTUsIDM3LCA0NiwgMTUxLCAyMjMsIDEzMSwgNDksIAorICAgIDM3LCA2MiwgNzgsIDIyMywgMTQ4LCAzNywgMjUzLCAxMzMsIDU1LCAzNywgNTEsIDIyMywgMTMxLCA1NSwgMzcsIDIxMiwgCisgICAgMjgsIDQ5LCAzNywgNTEsIDI1MSwgNzUsIDU1LCAzNywgNTEsIDI1MSwgNzQsIDM3LCA1MSwgMjMyLCAzNywgMzcsIDUxLCAKKyAgICAyMzIsIDM4LCA1NSwgMzcsIDUxLCAyMTcsIDQyLCAzNywgNTEsIDIzNSwgMTkxLCAyNTEsIDc0LCAzNywgNTEsIDk1LCA3NiwgCisgICAgNTUsIDM3LCA3LCAzLCAxLCA2MSwgMzcsIDcsIDMsIDEsIDc0LCAzNywgNywgMywgMSwgNzIsIDM3LCA3LCAzLCAxLCA3NSwgCisgICAgMzcsIDcsIDMsIDEsIDY5LCAzNywgNywgMywgMSwgMjUwLCAyNTIsIDM3LCA3LCAzLCAxLCAyNDksIDMsIDM3LCA3LCAzLCAxLCAKKyAgICAyNDIsIDQxLCAzNywgNywgMywgMSwgMTgzLCAzNywgNywgMywgMSwgMTQ5LCAzNywgNywgMywgMSwgMjE4LCA5OSwgMzcsIDcsIAorICAgIDMsIDEsIDIxNSwgNzksIDM3LCA3LCAzLCAxLCAyMTMsIDE2NiwgMjUsIDYsIDEsIDI0MSwgMTgxLCAyNSwgMywgMSwgMjQxLCAKKyAgICAxODEsIDI1LCA2LCAxLCAyNTMsIDE5MywgMjIyLCAxNjEsIDI1LCAzLCAxLCAyNTMsIDE5MywgMjIyLCAxNjEsIDI1LCAyMjgsIAorICAgIDU0LCA1MiwgMjUsIDIzMiwgMTYzLCAyMjgsIDU0LCA1MiwgMjUsIDYsIDEsIDIyNiwgMTc4LCAyNDcsIDE3OSwgMjUsIDMsIAorICAgIDEsIDIyNiwgMTc4LCAyNDcsIDE3OSwgMjUsIDIxMiwgMjEwLCAyNSwgMywgMjIzLCAyMDIsIDIzMiwgMTQxLCAyMjAsIDEwNCwgCisgICAgODcsIDI1LCAzLCAyNDYsIDcyLCAyMzIsIDE0MSwgMjIwLCAxMDQsIDg3LCAyNSwgMywgMjIzLCAyMDIsIDI0NiwgNzIsIAorICAgIDIzMiwgMTQxLCAyMjAsIDEwNCwgODcsIDI1LCAyMjQsIDE1OCwgNzcsIDI1LCAyMTYsIDIzMSwgMjUsIDI0NywgMjA0LCAKKyAgICAyMTYsIDIzMSwgMjUsIDYsIDEsIDI1NCwgNTMsIDIsIDIxNiwgMjMxLCAyNSwgMjU0LCA4LCAyMTcsIDIxMSwgMjUsIDYsIDEsIAorICAgIDI0NSwgNjQsIDIsIDIxNiwgMjMxLCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgMjE2LCAyMzEsIDI1LCA2LCAxLCAyMzUsIDE4NCwgCisgICAgMiwgMjE2LCAyMzEsIDI1LCA2LCAxLCAyMjcsIDY2LCAyLCAyMTYsIDIzMSwgMjUsIDYsIDEsIDIxNSwgMTI5LCAyLCAyMTYsIAorICAgIDIzMSwgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIxNiwgMjMxLCAyNSwgMywgMSwgMjM1LCAxODQsIDIsIDI0NywgMjA0LCAyNCwgCisgICAgMjE2LCAyMzEsIDI1LCA2LCAxLCAyNTQsIDUyLCAyNSwgNiwgMSwgMjUxLCAyMDMsIDI1LCA2LCAxLCAyNDMsIDgzLCAyNSwgCisgICAgNiwgMSwgMjQ4LCA1LCAyNSwgNiwgMSwgMjQ1LCA2MywgMjUsIDYsIDEsIDIxMiwgNzgsIDI1LCA2LCAxLCAyNDUsIDI4LCAKKyAgICAyNSwgNiwgMSwgMjE3LCAxMzIsIDI1LCA2LCAxLCAyMzUsIDE4MywgMjUsIDYsIDEsIDIzNCwgMjI3LCAyNSwgNiwgMSwgCisgICAgMjMzLCAxMjIsIDI1LCA2LCAxLCAyMzAsIDE3MiwgMjUsIDYsIDEsIDIyOCwgOTIsIDI1LCA2LCAxLCAyMTMsIDE0NSwgMjUsIAorICAgIDYsIDEsIDIyNywgNjUsIDI1LCA2LCAxLCAyMjUsIDI0MCwgMjUsIDYsIDEsIDIyMywgMTkwLCAyNSwgNiwgMSwgMjIwLCAKKyAgICAxMDMsIDI1LCA2LCAxLCAyMTcsIDI0OCwgMjUsIDYsIDEsIDIxNSwgMTI4LCAyNSwgNiwgMSwgMjI2LCA5LCAyNSwgNiwgMSwgCisgICAgMjUwLCA0NywgMjUsIDYsIDEsIDIyNSwgNDYsIDI1LCA2LCAxLCAyMjcsIDY3LCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIAorICAgIDI0NywgMjAzLCAyNSwgNiwgMSwgMjE1LCAxMjksIDIsIDI0NywgMjAzLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjE2LCAKKyAgICAyMzEsIDI1LCAzLCAxLCAyNDUsIDY0LCAyLCAyMTYsIDIzMSwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIxNiwgMjMxLCAyNSwgCisgICAgMywgMSwgMjM1LCAxODQsIDIsIDIxNiwgMjMxLCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDI0NywgMjA0LCAyNCwgMjE2LCAKKyAgICAyMzEsIDI1LCAzLCAxLCAyNTQsIDUyLCAyNSwgMywgMSwgMjUxLCAyMDMsIDI1LCAzLCAxLCAyNDMsIDgzLCAyNSwgMywgMSwgCisgICAgMjQ4LCA1LCAyNSwgMywgMSwgMjQ1LCA2MywgMjUsIDMsIDEsIDIxMiwgNzgsIDI1LCAzLCAxLCAyNDUsIDI4LCAyNSwgMywgCisgICAgMSwgMjE3LCAxMzIsIDI1LCAzLCAxLCAyMzUsIDE4MywgMjUsIDMsIDEsIDIzNCwgMjI3LCAyNSwgMywgMSwgMjMzLCAxMjIsIAorICAgIDI1LCAzLCAxLCAyMzAsIDE3MiwgMjUsIDMsIDEsIDIyOCwgOTIsIDI1LCAzLCAxLCAyMTMsIDE0NSwgMjUsIDMsIDEsIDIyNywgCisgICAgNjUsIDI1LCAzLCAxLCAyMjUsIDI0MCwgMjUsIDMsIDEsIDIyMywgMTkwLCAyNSwgMywgMSwgNDAsIDIyMCwgMTAzLCAyNSwgCisgICAgMywgMSwgMjIwLCAxMDMsIDI1LCAzLCAxLCAyMTcsIDI0OCwgMjUsIDMsIDEsIDIxNSwgMTI4LCAyNSwgMywgMSwgMjI2LCA5LCAKKyAgICAyNSwgMywgMSwgMjUwLCA0NywgMjUsIDMsIDEsIDIyNSwgNDYsIDI1LCAzLCAxLCAyMjcsIDY3LCAyNSwgMywgMSwgMjM1LCAKKyAgICAxODQsIDIsIDI0NywgMjAzLCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDI0NywgMjAzLCAyNSwgMywgMSwgMjI3LCA2NiwgMiwgCisgICAgMjE2LCAyMzEsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjE2LCAyMzEsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMTYsIAorICAgIDIzMSwgMjUsIDYsIDIzNCwgMjUxLCA4NywgMjUsIDI1MSwgMjA0LCA4NywgMjUsIDIxNywgMTMzLCA4NywgMjUsIDIxNSwgCisgICAgMTI5LCAyLCAyNDEsIDM4LCA4NywgMjUsIDIxNSwgMTI5LCAyLCAyNTQsIDE2NCwgMjQsIDI0MSwgMzgsIDg3LCAyNSwgMjE1LCAKKyAgICAxMjksIDIsIDI0NywgMjEwLCAyNCwgMjQxLCAzOCwgODcsIDI1LCAyMjYsIDEwLCA4NywgMjUsIDIyNSwgMjQxLCA4NywgMjUsIAorICAgIDIzNCwgMjUxLCA4NywgMjUsIDEsIDI1MywgMTkzLCAyMzQsIDE1LCAyNSwgMywgMSwgMjUzLCAxOTMsIDIzNCwgMTUsIDI1LCAKKyAgICAxLCAyMTksIDc3LCAyNSwgMywgMSwgMjE5LCA3NywgMjUsIDEsIDI0NywgMTc5LCAyNSwgMywgMSwgMjQ3LCAxNzksIDI1LCAKKyAgICAxLCAyMzQsIDE1LCAyNSwgMywgMSwgMjM0LCAxNSwgMjUsIDEsIDIyMiwgMTYxLCAyNSwgMywgMSwgMjIyLCAxNjEsIDc5LCAKKyAgICA2LCAxLCAyMjAsIDIzNSwgNzksIDMsIDEsIDIyMCwgMjM1LCA3OSwgNiwgMSwgMjQ0LCAxMDksIDc5LCAzLCAxLCAyNDQsIAorICAgIDEwOSwgNzksIDYsIDEsIDIzNCwgMTIzLCA3OSwgMywgMSwgMjM0LCAxMjMsIDc5LCA2LCAxLCAyNDEsIDMyLCA3OSwgMywgMSwgCisgICAgMjQxLCAzMiwgNzksIDYsIDEsIDI0MywgNzgsIDc5LCAzLCAxLCAyNDMsIDc4LCA3OSwgNiwgMSwgMjIwLCAyMDIsIDc5LCAzLCAKKyAgICAxLCAyMjAsIDIwMiwgNzksIDYsIDEsIDI0OCwgMjAsIDc5LCAzLCAxLCAyNDgsIDIwLCAyNSwgMjM0LCAyMjgsIDg3LCAyNSwgCisgICAgMjIzLCAxOTEsIDg3LCAyNSwgMjMyLCAxNDEsIDIyMCwgMTA0LCA4NywgMjUsIDEsIDIxMiwgMjE1LCAyNSwgNiwgMjE3LCAKKyAgICAxMzMsIDg3LCAyNSwgMjMyLCAxNDEsIDI0NSwgNjQsIDg3LCAyNSwgMjIzLCAyMDIsIDIzMiwgMTQxLCAyNDUsIDY0LCA4NywgCisgICAgMjUsIDYsIDEsIDIyMCwgMTg3LCAyNSwgMywgMSwgMjIwLCAxODcsIDI1LCA2LCAyMzIsIDE0MSwgMjIwLCAxMDQsIDg3LCAKKyAgICAyNSwgNiwgMSwgMjIyLCAxNTksIDI1LCAzLCAxLCAyMjIsIDE1OSwgMjUsIDIyMywgMTkxLCAyLCAyMTksIDQ1LCA4NywgMjUsIAorICAgIDYsIDIyMywgMjAyLCAyMzIsIDE0MSwgMjIwLCAxMDQsIDg3LCAyNSwgNiwgMjQ2LCA3MiwgMjMyLCAxNDEsIDIyMCwgMTA0LCAKKyAgICA4NywgMjUsIDYsIDIyMywgMjAyLCAyNDYsIDcyLCAyMzIsIDE0MSwgMjIwLCAxMDQsIDg3LCAzMywgNiwgMSwgMjM2LCA1NiwgCisgICAgMiwgMjQyLCAxMTMsIDMzLCA2LCAxLCAyMzUsIDE4NywgMzMsIDYsIDEsIDI0NywgMTE0LCAzMywgNiwgMSwgMjQyLCAxNjMsIAorICAgIDMzLCA2LCAxLCAyMTUsIDE3MiwgMjM2LCA1NSwgMzMsIDYsIDEsIDI0NSwgMjQ3LCAzMywgNiwgMSwgMjUxLCA1LCA3MiwgCisgICAgMzMsIDYsIDEsIDIxMiwgMjU1LCAzMywgNiwgMSwgMjM1LCAxMjcsIDMzLCA2LCAxLCAyMzIsIDIxNiwgMzMsIDYsIDEsIAorICAgIDIyOSwgOSwgMzMsIDYsIDEsIDIxNiwgMTMyLCAzMywgNiwgMSwgMjM0LCA1NywgMzMsIDYsIDEsIDI0MCwgMTQ2LCAyLCAKKyAgICAyNDIsIDExMywgMzMsIDYsIDEsIDIyMCwgMTc1LCA2OSwgMzMsIDYsIDEsIDI0NSwgMjQzLCAzMywgNiwgMSwgNjEsIDMzLCAKKyAgICA2LCAxLCAyNTEsIDI1MSwgMzMsIDYsIDEsIDIxNCwgMjMyLCAzMywgNiwgMSwgMjQyLCAyMTIsIDMzLCA2LCAxLCAyNDgsIAorICAgIDQxLCAzMywgNiwgMSwgMjM2LCA1NSwgMzMsIDYsIDEsIDIxMiwgNjcsIDMzLCA2LCAxLCAyMTIsIDg3LCAzMywgNiwgMSwgCisgICAgNzIsIDMzLCA2LCAxLCAyMjAsIDE3NSwgNzIsIDMzLCA2LCAxLCAxODEsIDMzLCA2LCAxLCAyNDUsIDEzMSwgMzMsIDYsIDEsIAorICAgIDI0NSwgMTE3LCAzMywgNiwgMSwgMjQ1LCAxMDgsIDMzLCA2LCAxLCA3NSwgMzMsIDYsIDEsIDIyNiwgOTYsIDMzLCA2LCAxLCAKKyAgICAyNDUsIDU1LCAzMywgNiwgMSwgMjQ1LCA0NSwgMzMsIDYsIDEsIDIxNywgMjI5LCAzMywgNiwgMSwgNjksIDMzLCA2LCAxLCAKKyAgICAyNDUsIDE1OSwgMzMsIDYsIDEsIDE1OSwgMzMsIDYsIDEsIDIxNiwgMTM2LCAzMywgNiwgMSwgMjUwLCA2NywgMzMsIDYsIDEsIAorICAgIDIyMSwgMjQsIDMzLCA2LCAxLCAyMjAsIDI0NSwgMzMsIDYsIDEsIDI0MSwgMjQyLCA1MiwgMzMsIDYsIDEsIDIxMywgMTgsIAorICAgIDMzLCA2LCAxLCAyMTksIDIzNiwgNTIsIDMzLCA2LCAxLCA3NCwgMzMsIDYsIDEsIDIxMiwgMjAzLCAzMywgNiwgMSwgMTg2LCAKKyAgICAzMywgMywgMSwgNjEsIDMzLCAzLCAxLCAyNTEsIDI1MSwgMzMsIDMsIDEsIDIxNCwgMjMyLCAzMywgMywgMSwgMjQyLCAyMTIsIAorICAgIDMzLCAzLCAxLCAyNDgsIDQxLCAzMywgMywgMSwgMjM2LCA1NSwgMzMsIDMsIDEsIDIxMiwgNjcsIDMzLCAzLCAxLCAyMTIsIAorICAgIDg3LCAzMywgMywgMSwgNzIsIDMzLCAzLCAxLCAyMjAsIDE3NSwgNzIsIDMzLCAzLCAxLCAxODEsIDMzLCAzLCAxLCAyNDUsIAorICAgIDEzMSwgMzMsIDMsIDEsIDI0NSwgMTE3LCAzMywgMywgMSwgMjQ1LCAxMDgsIDMzLCAzLCAxLCA3NSwgMzMsIDMsIDEsIDIyNiwgCisgICAgOTYsIDMzLCAzLCAxLCAyNDUsIDU1LCAzMywgMywgMSwgMjQ1LCA0NSwgMzMsIDMsIDEsIDIxNywgMjI5LCAzMywgMywgMSwgCisgICAgNjksIDMzLCAzLCAxLCAyNDUsIDE1OSwgMzMsIDMsIDEsIDE1OSwgMzMsIDMsIDEsIDIxNiwgMTM2LCAzMywgMywgMSwgMjUwLCAKKyAgICA2NywgMzMsIDMsIDEsIDIyMSwgMjQsIDMzLCAzLCAxLCAyMjAsIDI0NSwgMzMsIDMsIDEsIDI0MSwgMjQyLCA1MiwgMzMsIDMsIAorICAgIDEsIDIxMywgMTgsIDMzLCAzLCAxLCAyMTksIDIzNiwgNTIsIDMzLCAzLCAxLCA3NCwgMzMsIDMsIDEsIDIxMiwgMjAzLCAzMywgCisgICAgMywgMSwgMTg2LCAzMywgMywgMSwgMjM2LCA1NiwgMiwgMjQyLCAxMTMsIDMzLCAzLCAxLCAyMzUsIDE4NywgMzMsIDMsIDEsIAorICAgIDI0NywgMTE0LCAzMywgMywgMSwgMjQyLCAxNjMsIDMzLCAzLCAxLCAyMTUsIDE3MiwgMjM2LCA1NSwgMzMsIDMsIDEsIDI0NSwgCisgICAgMjQ3LCAzMywgMywgMSwgMjUxLCA1LCA3MiwgMzMsIDMsIDEsIDIxMiwgMjU1LCAzMywgMywgMSwgMjM1LCAxMjcsIDMzLCAzLCAKKyAgICAxLCAyMzIsIDIxNiwgMzMsIDMsIDEsIDIyOSwgOSwgMzMsIDMsIDEsIDIxNiwgMTMyLCAzMywgMywgMSwgMjM0LCA1NywgMzMsIAorICAgIDMsIDEsIDI0MCwgMTQ2LCAyLCAyNDIsIDExMywgMzMsIDMsIDEsIDIyMCwgMTc1LCA2OSwgMzMsIDMsIDEsIDI0NSwgMjQzLCAKKyAgICAzMywgNiwgMSwgMjI3LCA2NywgMzMsIDMsIDEsIDIyNywgNjcsIDMzLCA2LCAxLCAyMTMsIDQ5LCAzMywgMywgMSwgMjEzLCAKKyAgICA0OSwgMzMsIDYsIDEsIDIzNSwgMTgxLCA3NCwgMzMsIDMsIDEsIDIzNSwgMTgxLCA3NCwgMzMsIDYsIDEsIDIzMiwgMjIxLCAKKyAgICAyMTIsIDE3NCwgMzMsIDMsIDEsIDIzMiwgMjIxLCAyMTIsIDE3NCwgMzMsIDYsIDEsIDIzNSwgMTgxLCAyMzIsIDIyMSwgCisgICAgMjEyLCAxNzQsIDMzLCAzLCAxLCAyMzUsIDE4MSwgMjMyLCAyMjEsIDIxMiwgMTc0LCAzMywgNiwgMSwgMjUxLCAxNzIsIAorICAgIDIxMiwgMTc0LCAzMywgMywgMSwgMjUxLCAxNzIsIDIxMiwgMTc0LCAzMywgNiwgMSwgMjM1LCAxODEsIDI1MSwgMTcyLCAKKyAgICAyMTIsIDE3NCwgMzMsIDMsIDEsIDIzNSwgMTgxLCAyNTEsIDE3MiwgMjEyLCAxNzQsIDMzLCA2LCAxLCAyMzMsIDI0MiwgMzMsIAorICAgIDMsIDEsIDIzMywgMjQyLCAzMywgNiwgMSwgMjI1LCA0NiwgMzMsIDMsIDEsIDIyNSwgNDYsIDMzLCA2LCAxLCAyNDQsIDUxLCAKKyAgICAzMywgMywgMSwgMjQ0LCA1MSwgMzMsIDYsIDEsIDIzNSwgMTQ0LCAzMywgMywgMSwgMjM1LCAxNDQsIDMzLCA2LCAxLCAyMzUsIAorICAgIDE0NSwgMiwgNTEsIDI0MiwgMTE0LCAyNTQsIDE3NCwgMzMsIDMsIDEsIDIzNSwgMTQ1LCAyLCA1MSwgMjQyLCAxMTQsIDI1NCwgCisgICAgMTc0LCAzMywgNiwgMSwgMjE1LCAxNzUsIDMzLCAzLCAxLCAyMTUsIDE3NSwgMzMsIDYsIDEsIDIyMywgODcsIDIyNywgNjcsIAorICAgIDMzLCAzLCAxLCAyMjMsIDg3LCAyMjcsIDY3LCAzMywgNiwgMSwgMjI3LCA2OCwgMiwgMjE3LCAxOCwgMzMsIDMsIDEsIDIyNywgCisgICAgNjgsIDIsIDIxNywgMTgsIDMzLCA2LCAxLCAyMjcsIDgsIDMzLCAzLCAxLCAyMjcsIDgsIDMzLCA2LCAxLCAyMzQsIDE1LCAKKyAgICAzMywgMywgMSwgMjM0LCAxNSwgMzMsIDIxNywgOTksIDUyLCAzNywgMzMsIDIxNywgMTgsIDM3LCAzMywgMjI2LCAxOTIsIAorICAgIDM3LCAzMywgMjA3LCAyMjUsIDE1MiwgMzcsIDMzLCAyMjUsIDQwLCAyMjUsIDE1MiwgMzcsIDMzLCAyMjUsIDEzNywgMzcsIAorICAgIDMzLCAyNDAsIDIwMSwgMjE3LCA5OSwgNTIsIDM3LCAzMywgMjMxLCA0LCA1MiwgMzMsIDYsIDEsIDIyMCwgMTc1LCAyNDAsIAorICAgIDE0NiwgMiwgMjE4LCAyNywgMzMsIDMsIDEsIDIyMCwgMTc1LCAyNDAsIDE0NiwgMiwgMjE4LCAyNywgMzMsIDYsIDEsIDIyMSwgCisgICAgNjYsIDUyLCAzMywgMywgMSwgMjIxLCA2NiwgNTIsIDMzLCA2LCAxLCAyNDUsIDU2LCAyLCAyMTcsIDY4LCAzMywgMywgMSwgCisgICAgMjQ1LCA1NiwgMiwgMjE3LCA2OCwgMzMsIDYsIDEsIDI0MiwgMjEzLCAyLCAyMTUsIDEyNywgMzMsIDMsIDEsIDI0MiwgMjEzLCAKKyAgICAyLCAyMTUsIDEyNywgMzMsIDYsIDEsIDI0MiwgMjEzLCAyLCA5MCwgMzMsIDMsIDEsIDI0MiwgMjEzLCAyLCA5MCwgMzMsIDYsIAorICAgIDEsIDI0MiwgMjEzLCAyLCAyMzEsIDM3LCAxMDEsIDMzLCAzLCAxLCAyNDIsIDIxMywgMiwgMjMxLCAzNywgMTAxLCAzMywgNiwgCisgICAgMSwgMjEyLCA2OCwgMiwgMjQ3LCAyNDYsIDMzLCAzLCAxLCAyMTIsIDY4LCAyLCAyNDcsIDI0NiwgMzMsIDYsIDEsIDIxMiwgCisgICAgODgsIDIsIDI0NywgMjQ2LCAzMywgMywgMSwgMjEyLCA4OCwgMiwgMjQ3LCAyNDYsIDMzLCA2LCAxLCAyMzUsIDE3LCAyLCAKKyAgICAyNDcsIDI0NiwgMzMsIDMsIDEsIDIzNSwgMTcsIDIsIDI0NywgMjQ2LCAzMywgNiwgMSwgMjM1LCAxNywgMiwgNzEsIDkwLCAKKyAgICAzMywgMywgMSwgMjM1LCAxNywgMiwgNzEsIDkwLCAzMywgNiwgMSwgMjM1LCAxNywgMiwgOTAsIDMzLCAzLCAxLCAyMzUsIAorICAgIDE3LCAyLCA5MCwgMzMsIDYsIDEsIDI1MiwgNDQsIDE4MSwgMzMsIDMsIDEsIDI1MiwgNDQsIDE4MSwgMzMsIDYsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyNDcsIDI0NiwgMzMsIDMsIDEsIDI0NSwgMTA5LCAyLCAyNDcsIDI0NiwgMzMsIDYsIDI2LCAyNDUsIDEwOSwgCisgICAgMjQyLCAyMTIsIDMzLCAzLCAyNiwgMjQ1LCAxMDksIDI0MiwgMjEyLCAzMywgNiwgMSwgMjI2LCA5NywgMiwgMjMxLCAzNywgCisgICAgMTAxLCAzMywgMywgMSwgMjI2LCA5NywgMiwgMjMxLCAzNywgMTAxLCAzMywgNiwgMSwgMjU0LCAxODAsIDE1OSwgMzMsIDMsIAorICAgIDEsIDI1NCwgMTgwLCAxNTksIDMzLCA2LCAxLCAyNDUsIDQ2LCAyLCAyNDcsIDI0NiwgMzMsIDMsIDEsIDI0NSwgNDYsIDIsIAorICAgIDI0NywgMjQ2LCAzMywgNiwgMSwgMjE3LCAyMzAsIDIsIDI0NywgMjQ2LCAzMywgMywgMSwgMjE3LCAyMzAsIDIsIDI0NywgCisgICAgMjQ2LCAzMywgNiwgMSwgMjE5LCA2MSwgNjksIDMzLCAzLCAxLCAyMTksIDYxLCA2OSwgMzMsIDYsIDEsIDIxOSwgNjEsIAorICAgIDExMSwgMiwgOTAsIDMzLCAzLCAxLCAyMTksIDYxLCAxMTEsIDIsIDkwLCAzMywgNiwgMSwgMjQyLCAzMCwgMiwgMjQ3LCAKKyAgICAyNDYsIDMzLCAzLCAxLCAyNDIsIDMwLCAyLCAyNDcsIDI0NiwgMzMsIDYsIDI2LCAyMTcsIDIzMCwgMjE2LCAxMzYsIDMzLCAKKyAgICAzLCAyNiwgMjE3LCAyMzAsIDIxNiwgMTM2LCAzMywgNiwgMSwgMjUwLCA2OCwgMiwgMjQ3LCAyNDYsIDMzLCAzLCAxLCAyNTAsIAorICAgIDY4LCAyLCAyNDcsIDI0NiwgMzMsIDYsIDEsIDI1MCwgNjgsIDIsIDcxLCA5MCwgMzMsIDMsIDEsIDI1MCwgNjgsIDIsIDcxLCAKKyAgICA5MCwgMzMsIDYsIDEsIDIyMCwgMjEzLCAzMywgMywgMSwgMjIwLCAyMTMsIDMzLCA2LCAxLCAyNTQsIDE4MCwgMjUwLCA2NywgCisgICAgMzMsIDMsIDEsIDI1NCwgMTgwLCAyNTAsIDY3LCAzMywgNiwgMSwgMjU0LCAxODAsIDI1MCwgNjgsIDIsIDI0NywgMjQ2LCAKKyAgICAzMywgMywgMSwgMjU0LCAxODAsIDI1MCwgNjgsIDIsIDI0NywgMjQ2LCAzMywgMSwgMjI2LCAxODUsIDMzLCA2LCAxLCAyMTIsIAorICAgIDY4LCAyLCAyNTEsIDc0LCAzMywgMywgMSwgMjEyLCA2OCwgMiwgMjUxLCA3NCwgMzMsIDYsIDEsIDIzNSwgMTcsIDIsIDEwMSwgCisgICAgMzMsIDMsIDEsIDIzNSwgMTcsIDIsIDEwMSwgMzMsIDYsIDEsIDI0NSwgMTMyLCAyLCAyMTgsIDI3LCAzMywgMywgMSwgMjQ1LCAKKyAgICAxMzIsIDIsIDIxOCwgMjcsIDMzLCA2LCAxLCAyNDUsIDEwOSwgMiwgMTAxLCAzMywgMywgMSwgMjQ1LCAxMDksIDIsIDEwMSwgCisgICAgMzMsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTgsIDI3LCAzMywgMywgMSwgMjQ1LCAxMDksIDIsIDIxOCwgMjcsIDMzLCA2LCAxLCAKKyAgICAyMzQsIDEzMywgMjUwLCA2NywgMzMsIDMsIDEsIDIzNCwgMTMzLCAyNTAsIDY3LCAzMywgNiwgMSwgMjQ1LCAxMTgsIDIsIAorICAgIDIxOCwgMjcsIDMzLCAzLCAxLCAyNDUsIDExOCwgMiwgMjE4LCAyNywgMzMsIDMsIDEsIDIyNiwgMTg1LCAzMywgNiwgMSwgCisgICAgMTE4LCAyLCAyNTEsIDc0LCAzMywgMywgMSwgMTE4LCAyLCAyNTEsIDc0LCAzMywgNiwgMSwgMTE4LCAyLCAyNDcsIDIwOSwgCisgICAgMzMsIDMsIDEsIDExOCwgMiwgMjQ3LCAyMDksIDMzLCA2LCAyNiwgMTE4LCAyMzYsIDU1LCAzMywgMywgMjYsIDExOCwgMjM2LCAKKyAgICA1NSwgMzMsIDYsIDEsIDIzNiwgNTYsIDIsIDI1MSwgNzQsIDMzLCAzLCAxLCAyMzYsIDU2LCAyLCAyNTEsIDc0LCAzMywgNiwgCisgICAgMSwgMjIyLCAxMTMsIDMzLCAzLCAxLCAyMjIsIDExMywgMzMsIDYsIDEsIDIyMiwgMTE0LCAyLCAyNDcsIDIwOSwgMzMsIDMsIAorICAgIDEsIDIyMiwgMTE0LCAyLCAyNDcsIDIwOSwgMzMsIDYsIDEsIDIxMiwgNjgsIDIsIDI0NywgMjA5LCAzMywgMywgMSwgMjEyLCAKKyAgICA2OCwgMiwgMjQ3LCAyMDksIDMzLCA2LCAxLCAyMTIsIDg4LCAyLCAyNDcsIDIwOSwgMzMsIDMsIDEsIDIxMiwgODgsIDIsIAorICAgIDI0NywgMjA5LCAzMywgNiwgMSwgMjU0LCAxODAsIDI0NSwgMjQ3LCAzMywgMywgMSwgMjU0LCAxODAsIDI0NSwgMjQ3LCAzMywgCisgICAgNiwgMSwgMjQwLCAxNDYsIDIsIDIzMiwgMzcsIDMzLCAzLCAxLCAyNDAsIDE0NiwgMiwgMjMyLCAzNywgMzMsIDYsIDEsIAorICAgIDI0MCwgMTQ2LCAyLCAyNDcsIDIwOSwgMzMsIDMsIDEsIDI0MCwgMTQ2LCAyLCAyNDcsIDIwOSwgMzMsIDYsIDEsIDE1NywgMiwgCisgICAgMjQ3LCAyMDksIDMzLCAzLCAxLCAxNTcsIDIsIDI0NywgMjA5LCAzMywgNiwgMSwgMjUyLCA1NCwgNzUsIDMzLCAzLCAxLCAKKyAgICAyNTIsIDU0LCA3NSwgMzMsIDYsIDEsIDI1MiwgNTQsIDE1NywgMiwgMjQ3LCAyMDksIDMzLCAzLCAxLCAyNTIsIDU0LCAxNTcsIAorICAgIDIsIDI0NywgMjA5LCAzMywgNiwgMSwgMTkxLCAyLCAyNDcsIDIwOSwgMzMsIDMsIDEsIDE5MSwgMiwgMjQ3LCAyMDksIDMzLCAKKyAgICA2LCAxLCAxMTEsIDIsIDIzMiwgMzcsIDMzLCAzLCAxLCAxMTEsIDIsIDIzMiwgMzcsIDMzLCA2LCAxLCAxMTEsIDIsIDI0NywgCisgICAgMjA5LCAzMywgMywgMSwgMTExLCAyLCAyNDcsIDIwOSwgMzMsIDYsIDEsIDExMSwgMiwgNTEsIDE3OSwgMzMsIDMsIDEsIAorICAgIDExMSwgMiwgNTEsIDE3OSwgMzMsIDYsIDEsIDI1MCwgNjgsIDIsIDI0NywgMjA5LCAzMywgMywgMSwgMjUwLCA2OCwgMiwgCisgICAgMjQ3LCAyMDksIDMzLCA2LCAxLCAyNDIsIDIxMywgMiwgMjQ3LCAyNDYsIDMzLCAzLCAxLCAyNDIsIDIxMywgMiwgMjQ3LCAKKyAgICAyNDYsIDMzLCA2LCAxLCAyMTMsIDE5LCAyLCAyNDcsIDIwOSwgMzMsIDMsIDEsIDIxMywgMTksIDIsIDI0NywgMjA5LCAzMywgCisgICAgNiwgMSwgMjQyLCAyMTMsIDIsIDIxOSwgNDUsIDI0LCAxMDEsIDMzLCAzLCAxLCAyNDIsIDIxMywgMiwgMjE5LCA0NSwgMjQsIAorICAgIDEwMSwgMzMsIDYsIDEsIDI0MiwgMzAsIDIsIDEwMSwgMzMsIDMsIDEsIDI0MiwgMzAsIDIsIDEwMSwgMzMsIDYsIDEsIDI0MiwgCisgICAgMzAsIDIsIDkwLCAzMywgMywgMSwgMjQyLCAzMCwgMiwgOTAsIDMzLCA2LCAxLCAyMzQsIDIzLCAyNDgsIDQxLCAzMywgMywgCisgICAgMSwgMjM0LCAyMywgMjQ4LCA0MSwgMzMsIDYsIDEsIDIzNCwgMjMsIDI0NywgMTE0LCAzMywgMywgMSwgMjM0LCAyMywgMjQ3LCAKKyAgICAxMTQsIDMzLCA2LCAxLCAyMzQsIDIzLCAyMTIsIDIwLCAzMywgMywgMSwgMjM0LCAyMywgMjEyLCAyMCwgMzMsIDYsIDEsIAorICAgIDIzNCwgMjMsIDI0NSwgMjQxLCAzMywgMywgMSwgMjM0LCAyMywgMjQ1LCAyNDEsIDMzLCA2LCAxLCAyMzQsIDIzLCAyMzIsIAorICAgIDIxNiwgMzMsIDMsIDEsIDIzNCwgMjMsIDIzMiwgMjE2LCAzMywgNiwgMSwgMjM0LCAyMywgMjI5LCA5LCAzMywgMywgMSwgCisgICAgMjM0LCAyMywgMjI5LCA5LCAzMywgNiwgMSwgMjM0LCAyMywgMjIwLCAzNywgMzMsIDMsIDEsIDIzNCwgMjMsIDIyMCwgMzcsIAorICAgIDMzLCA2LCAxLCAyMzQsIDIzLCAyMTcsIDEzLCAzMywgMywgMSwgMjM0LCAyMywgMjE3LCAxMywgMzMsIDYsIDEsIDIyMywgCisgICAgMjAyLCAyMTIsIDg3LCAzMywgMywgMSwgMjIzLCAyMDIsIDIxMiwgODcsIDMzLCA2LCAxLCAyNDUsIDEzMiwgMiwgMTAxLCAKKyAgICAzMywgMywgMSwgMjQ1LCAxMzIsIDIsIDEwMSwgMzMsIDYsIDEsIDIzMywgMjUsIDMzLCAzLCAxLCAyMzMsIDI1LCAzMywgNiwgCisgICAgMSwgMjIzLCAxOTIsIDMzLCAzLCAxLCAyMjMsIDE5MiwgMzMsIDYsIDEsIDIxMywgODAsIDMzLCAzLCAxLCAyMTMsIDgwLCAKKyAgICAzMywgNiwgMSwgMjI0LCAyMzIsIDMzLCAzLCAxLCAyMjQsIDIzMiwgMzMsIDYsIDEsIDIxNCwgNiwgMzMsIDMsIDEsIDIxNCwgCisgICAgNiwgMzMsIDYsIDEsIDI1NCwgNzUsIDE4MSwgMzMsIDMsIDEsIDI1NCwgNzUsIDE4MSwgMzMsIDYsIDEsIDI0NSwgMTMyLCAyLCAKKyAgICAyMzEsIDM3LCAxMDEsIDMzLCAzLCAxLCAyNDUsIDEzMiwgMiwgMjMxLCAzNywgMTAxLCAzMywgNiwgMSwgMjQ1LCAxMDksIDIsIAorICAgIDIzMSwgMzcsIDEwMSwgMzMsIDMsIDEsIDI0NSwgMTA5LCAyLCAyMzEsIDM3LCAxMDEsIDMzLCA2LCAxLCAyMjYsIDk3LCAyLCAKKyAgICAyNDcsIDI0NiwgMzMsIDMsIDEsIDIyNiwgOTcsIDIsIDI0NywgMjQ2LCAzMywgNiwgMSwgMjIwLCAyMTQsIDIsIDI0NywgCisgICAgMjQ2LCAzMywgMywgMSwgMjIwLCAyMTQsIDIsIDI0NywgMjQ2LCAxNDEsIDYsIDEsIDI1MywgODAsIDE0MSwgNiwgMSwgMjUxLCAKKyAgICAyMTYsIDE0MSwgNiwgMSwgMjQyLCAxNzksIDE0MSwgNiwgMSwgMjQ4LCAxNjQsIDE0MSwgNiwgMSwgMjQ1LCAxNjksIDE0MSwgCisgICAgNiwgMSwgMjEyLCAxMDksIDE0MSwgNiwgMSwgMjQ1LCAxNTQsIDE0MSwgNiwgMSwgMjQ1LCAzMCwgMTQxLCA2LCAxLCAxMDgsIAorICAgIDE0MSwgNiwgMSwgMjEyLCA2NywgMTQxLCA2LCAxLCAyMzUsIDIyNCwgMTQxLCA2LCAxLCAyMzIsIDIxOSwgMTQxLCA2LCAxLCAKKyAgICAyMTMsIDE0OCwgMTQxLCA2LCAxLCAyNTAsIDIxOSwgMTQxLCA2LCAxLCAyMzQsIDE3MSwgMTQxLCA2LCAxLCAyNDEsIDU0LCAKKyAgICAxNDEsIDYsIDEsIDIzNSwgMTM5LCAxNDEsIDYsIDEsIDI0MiwgMjIyLCAxNDEsIDYsIDEsIDI1MCwgNjIsIDE0MSwgNiwgMSwgCisgICAgMjMxLCAxMjIsIDE0MSwgNiwgMSwgMjEyLCAyNTUsIDE0MSwgNiwgMSwgMjI4LCAxNTAsIDE0MSwgNiwgMSwgMjIxLCAyNCwgCisgICAgMTQxLCA2LCAxLCAyMTQsIDExOSwgMTQxLCA2LCAxLCAyNTAsIDkyLCAxNDEsIDYsIDEsIDIyNiwgODAsIDE0MSwgNiwgMSwgCisgICAgMjM1LCAxMTIsIDE0MSwgNiwgMSwgMjAzLCAxNDEsIDYsIDEsIDIyMiwgODAsIDE0MSwgNiwgMSwgMjE0LCAxNTYsIDE0MSwgCisgICAgNiwgMSwgMjE3LCAxNSwgMTQxLCA2LCAxLCAyMjMsIDI0NSwgMTQxLCA2LCAxLCAyNDksIDE3NSwgMTQxLCA2LCAxLCAyMTIsIAorICAgIDI0MCwgMTQxLCA2LCAxLCAyMjUsIDE3OCwgMTQxLCA2LCAxLCAyMzQsIDE4MiwgMTQxLCA2LCAxLCAyMjcsIDg4LCAxNDEsIAorICAgIDYsIDEsIDI0NCwgMTExLCAxNDEsIDU5LCAxLCA0MiwgMTUxLCAyMjMsIDEzMCwgMTQxLCAyNTMsIDIyNiwgMTQxLCAyNDUsIAorICAgIDExMiwgNzcsIDE0MSwgMjQ0LCAyNTQsIDc3LCAxNDEsIDI0OSwgMTU3LCAxNDEsIDIyNCwgMTU4LCA3NywgMTQxLCAyNTQsIAorICAgIDE4MSwgNzcsIDE0MSwgMywgMSwgMjUzLCA4MCwgMTQxLCAzLCAxLCAyNTEsIDIxNiwgMTQxLCAzLCAxLCAyNDIsIDE3OSwgCisgICAgMTQxLCAzLCAxLCAyNDgsIDE2NCwgMTQxLCAzLCAxLCAyNDUsIDE2OSwgMTQxLCAzLCAxLCAyMTIsIDEwOSwgMTQxLCAzLCAxLCAKKyAgICAyNDUsIDE1NCwgMTQxLCAzLCAxLCAyNDUsIDMwLCAxNDEsIDMsIDEsIDEwOCwgMTQxLCAzLCAxLCAyMTIsIDY3LCAxNDEsIDMsIAorICAgIDEsIDIzNSwgMjI0LCAxNDEsIDMsIDEsIDIzMiwgMjE5LCAxNDEsIDMsIDEsIDIxMywgMTQ4LCAxNDEsIDMsIDEsIDI1MCwgCisgICAgMjE5LCAxNDEsIDMsIDEsIDIzNCwgMTcxLCAxNDEsIDMsIDEsIDI0MSwgNTQsIDE0MSwgMywgMSwgMjM1LCAxMzksIDE0MSwgCisgICAgMywgMSwgMjQyLCAyMjIsIDE0MSwgMywgMSwgMjUwLCA2MiwgMTQxLCAzLCAxLCAyMzEsIDEyMiwgMTQxLCAzLCAxLCAyMTIsIAorICAgIDI1NSwgMTQxLCAzLCAxLCAyMjgsIDE1MCwgMTQxLCAzLCAxLCAyMjEsIDI0LCAxNDEsIDMsIDEsIDIxNCwgMTE5LCAxNDEsIAorICAgIDMsIDEsIDI1MCwgOTIsIDE0MSwgMywgMSwgMjI2LCA4MCwgMTQxLCAzLCAxLCAyMzUsIDExMiwgMTQxLCAzLCAxLCAyMDMsIAorICAgIDE0MSwgMywgMSwgMjIyLCA4MCwgMTQxLCAzLCAxLCAyMTQsIDE1NiwgMTQxLCAzLCAxLCAyMTcsIDE1LCAxNDEsIDMsIDEsIAorICAgIDIyMywgMjQ1LCAxNDEsIDMsIDEsIDI0OSwgMTc1LCAxNDEsIDMsIDEsIDIxMiwgMjQwLCAxNDEsIDMsIDEsIDIyNSwgMTc4LCAKKyAgICAxNDEsIDMsIDEsIDIzNCwgMTgyLCAxNDEsIDMsIDEsIDIyNywgODgsIDE0MSwgMywgMSwgMjQ0LCAxMTEsIDE0MSwgMywgMjYsIAorICAgIDI0NSwgMTcwLCAyMTIsIDI0MCwgMTQxLCAyNDMsIDIwMCwgMjE5LCA2OSwgMTQxLCAyNDAsIDE2MCwgOTMsIDI1NCwgMTc1LCAKKyAgICAyNDUsIDIzLCA5MywgMjU0LCAxNzUsIDIyMiwgODEsIDkzLCAyNTQsIDE3NSwgMjIxLCAxMSwgOTMsIDI1NCwgMTc1LCAyMTIsIAorICAgIDk3LCAyMjQsIDIxNSwgOTMsIDI1NCwgMTc1LCAyMTIsIDk3LCAyNDMsIDEwMCwgOTMsIDI1NCwgMTc1LCAyMTcsIDI4LCA5MywgCisgICAgMjU0LCAxNzUsIDIyMywgMjAwLCA5MywgMjU0LCAxNzUsIDIxMiwgOTYsIDkzLCAyNTQsIDE3NSwgMjI2LCAxMTgsIDkzLCAKKyAgICAyNTQsIDE3NSwgMjEzLCAxMSwgOTMsIDI1NCwgMTc1LCAyMTcsIDE2NywgOTMsIDI1NCwgMTc1LCAyNDMsIDE3LCA5MywgCisgICAgMjU0LCAxNzUsIDI0MywgMTgsIDIzMCwgMTM5LCA5MywgMjU0LCAxNzUsIDI0MywgMTUsIDkzLCAyNTQsIDE3NSwgMjI0LCAKKyAgICAyMTYsIDIyNiwgMTQ0LCA5MywgMjU0LCAxNzUsIDIxNywgMjA2LCAyNDMsIDMyLCA5MywgMjU0LCAxNzUsIDIyNiwgMTAwLCAKKyAgICA5MywgMjU0LCAxNzUsIDI1MywgMTE2LCAyNDIsIDIyLCA5MywgMjU0LCAxNzUsIDIzMCwgMTQ5LCA5MywgMjU0LCAxNzUsIAorICAgIDIzMiwgMTMsIDkzLCAyNTQsIDE3NSwgMjMxLCAxMTMsIDkzLCAyNTQsIDE3NSwgMjMxLCAxMTQsIDIzNCwgMTgzLCA5MywgCisgICAgMjU0LCAxNzUsIDI0OCwgMTA4LCA5MywgMjU0LCAxNzUsIDIyNCwgMjI3LCA5MywgMjU0LCAxNzUsIDIxNywgMjA2LCAyMjQsIAorICAgIDIxMSwgOTMsIDI1NCwgMTc1LCAyMTMsIDIxLCAyNTEsIDIxNywgMjEyLCAyMjEsIDkzLCAyNTQsIDE3NSwgMjI3LCA3MywgCisgICAgOTMsIDI1NCwgMTc1LCAyMzYsIDE0LCA5MywgMjU0LCAxNzUsIDI0OCwgMjEsIDkzLCAyNTQsIDE3NSwgMjEyLCAyNiwgOTMsIAorICAgIDE1MiwgMjMxLCAyMDYsIDI0OSwgMjI4LCA5MywgMjI1LCAxNDUsIDIyMCwgMjE2LCA5MywgMjI1LCAxNDUsIDI0MSwgMjMzLCAKKyAgICAyMjIsIDgxLCA5MywgMjI1LCAxNDUsIDI0MSwgMjMzLCAyMjYsIDExMiwgOTMsIDIyNSwgMTQ1LCAyNDEsIDIzMywgMjI0LCAKKyAgICAyMjAsIDkzLCAyMjUsIDE0NSwgMjQxLCAxNDQsIDkzLCAyMjUsIDE0NSwgMjE2LCAxMzQsIDkzLCAyMjUsIDE0NSwgMjIyLCAKKyAgICA4MSwgOTMsIDIyNSwgMTQ1LCAyMjYsIDExMiwgOTMsIDIyNSwgMTQ1LCAyMjQsIDIyMCwgOTMsIDIyNSwgMTQ1LCAyNDEsIAorICAgIDQ3LCA5MywgMjI1LCAxNDUsIDI0MSwgNDgsIDI0MSwgMjM1LCAzMSwgMjE0LCAyMzYsIDkzLCAyMjUsIDE0NSwgMjI0LCAKKyAgICAxNjIsIDkzLCAyMjUsIDE0NSwgMjQ4LCAxNTEsIDE2NywgMjMxLCAyMzQsIDkzLCAyMjUsIDE0NSwgMjMxLCAxMDUsIDkzLCAKKyAgICAyMjUsIDI3LCAyMzEsIDIzMSwgOTMsIDIyNSwgMTQ1LCAyMjQsIDU5LCA5MywgMjI1LCAyNywgMjI2LCAxMjAsIDkzLCAyMjUsIAorICAgIDE0NSwgMjIwLCAyMDEsIDI0NywgNzQsIDkzLCAyMjUsIDE0NSwgMjIwLCA4NSwgMjQ3LCA3NCwgOTMsIDIyNSwgMjcsIDIxOSwgCisgICAgMjM3LCAyMjYsIDExNCwgOTMsIDE1MiwgMjE1LCAxMzEsIDI0NywgNzQsIDkzLCAxNTIsIDIzMiwgMTYzLCAyNDcsIDc0LCAKKyAgICA5MywgMjI1LCAyNywgMjI4LCA1MSwgMjQyLCAyMSwgOTMsIDIyNSwgMTQ1LCAyMjQsIDIyMSwgMjI0LCAyMTUsIDkzLCAxLCAKKyAgICAyNTQsIDc4LCA5MywgMSwgMjUxLCAyMDUsIDkzLCAxLCAyNDIsIDE3NywgOTMsIDEsIDI0OCwgMTM0LCA5MywgMSwgMjQxLCAKKyAgICAyMjIsIDkzLCAxLCAyMTQsIDIzNiwgOTMsIDEsIDIxMiwgOTAsIDkzLCAxLCAyNDEsIDE4MiwgOTMsIDEsIDIxNywgMTgzLCAKKyAgICA5MywgMSwgMjEyLCAyMjQsIDkzLCAxLCA0MCwgMjM0LCAyNTQsIDkzLCAxLCAyMzQsIDI1NCwgOTMsIDEsIDIzMywgMTE4LCAKKyAgICA5MywgMSwgNDAsIDIzMSwgMTI5LCA5MywgMSwgMjMxLCAxMjksIDkzLCAxLCA0MCwgMjI4LCA1MCwgOTMsIDEsIDIyOCwgNTAsIAorICAgIDkzLCAxLCAyMjIsIDE2NCwgOTMsIDEsIDI1MywgNzgsIDkzLCAxLCA0MCwgMjI2LCA5NiwgOTMsIDEsIDIyNiwgOTYsIDkzLCAKKyAgICAxLCA0MCwgMjE2LCAxMzcsIDkzLCAxLCAyMTYsIDEzNywgOTMsIDEsIDIyNCwgMTg0LCA5MywgMSwgMjIzLCAyMTksIDkzLCAKKyAgICAxLCAyMjAsIDIwMCwgOTMsIDEsIDIxNywgMjQ1LCA5MywgMjYsIDIxMiwgMjUzLCA1MSwgMjE0LCAyMzYsIDkzLCAyNiwgCisgICAgMjEyLCAyNTMsIDIxNCwgMjM3LCAyMTIsIDIyNCwgOTMsIDI2LCAyMTIsIDI1MywgNTEsIDIxMiwgMjI0LCA5MywgMjI1LCAKKyAgICAyNywgMjQzLCAxNywgOTMsIDIyNSwgMjcsIDI0MywgMTUsIDEyLCA1MCwgNTIsIDEyLCA1LCAyMjIsIDE1OCwgMTIsIDI0MywgCisgICAgMjU1LCAyMzEsIDIxNywgMTIsIDUsIDIyMiwgMTkyLCAyNTMsIDIwNywgMjQ5LCA1MCwgMjIzLCA5NSwgMjUzLCAyMDcsIAorICAgIDI0MywgMjMwLCAyMjMsIDk1LCAxMiwgMjI0LCAyNywgMjUzLCAyMDcsIDIyNiwgNTgsIDIzMSwgNiwgNTIsIDI1MywgMjA3LCAKKyAgICAyMjYsIDU4LCAyMTcsIDIwMSwgMjE3LCAxMDEsIDUyLCAyNTQsIDEyNiwgNTIsIDEyLCAyNDksIDE1NywgMTIsIDI0OCwgOTYsIAorICAgIDIyMSwgNTcsIDEyLCAyMjUsIDE0NywgMjE0LCAyMTgsIDUyLCAxMiwgNSwgMjMwLCAyNDMsIDEyLCA1LCAyMjIsIDE3NCwgCisgICAgMjU0LCA4MCwgMjE0LCAyOSwgMTIsIDUsIDI1NCwgODAsIDI1MywgMTM3LCAxMiwgNSwgMjI0LCA1OCwgMjU0LCA3OSwgMTIsIAorICAgIDUsIDIyNCwgNjUsIDI1NCwgNjEsIDI1NCwgMTQsIDEyLCA1LCAyMTgsIDIwLCAxMiwgMywgMTI0LCAyMTgsIDI5LCAxMiwgMywgCisgICAgMTI0LCAyNiwgMTA2LCAyLCAyMzMsIDEyNywgMiwgMjEzLCAzNCwgMTIsIDMsIDEyNCwgMjEyLCAxMDEsIDEyLCAzLCAyNDQsIAorICAgIDEzMywgMTIsIDMsIDI0OCwgMTI5LCAxMiwgMywgMjM0LCAyMTAsIDEyLCAyMjEsIDcwLCAxMiwgMjE2LCAxNjksIDYyLCAKKyAgICAyMjUsIDI3LCA3NywgMTIsIDIyNCwgMTU4LCA3NywgMTIsIDEsIDIzNCwgMjE0LCAyMTMsIDM0LCAxMiwgMSwgMjQyLCAyLCAKKyAgICAxMiwgMSwgMTA2LCAyLCAyMzIsIDMzLCA0OSwgMTIsIDEsIDEwNiwgMiwgMTkyLCA0OSwgMTIsIDEsIDIxNCwgMTUsIDIsIAorICAgIDE5MiwgNDksIDEyLCAxLCAxMDYsIDIsIDE5MiwgNTUsIDEyLCAxLCA3MywgMiwgMTkyLCA0OSwgMTIsIDEsIDI1NCwgNzgsIAorICAgIDEyLCAxLCAyNTEsIDIzMCwgMTIsIDEsIDIxNywgMjE2LCAyMzEsIDIyNywgMTIsIDEsIDIxNywgMjE1LCAxMiwgMSwgMjE3LCAKKyAgICAxNDUsIDEyLCAxLCAyMzUsIDEyNCwgMTIsIDEsIDI0MiwgMTgsIDEyLCAxLCAyMzQsIDEzNSwgMTIsIDEsIDI0OCwgMTQwLCAKKyAgICAxMiwgMSwgMjE3LCAxNTUsIDEyLCAxLCAyMjMsIDI0NSwgMTIsIDEsIDIxMiwgMTAxLCAxMiwgMSwgMjIyLCA4NSwgMTIsIDEsIAorICAgIDIyMCwgMjM5LCAxMiwgMSwgMjIyLCAxOTUsIDEyLCAxLCAyNDgsIDE1OSwgMTIsIDEsIDIxOCwgMjksIDEyLCAxLCAyMTIsIAorICAgIDEwNCwgMTIsIDEsIDI1NCwgMTAzLCAxMiwgMSwgMjQyLCAyMjAsIDEyLCAxLCAyMzQsIDE4MSwgMiwgMTE3LCAxNzYsIDQ5LCAKKyAgICAxMiwgMSwgMjM0LCAxODEsIDIsIDEzMywgMTc2LCA1NSwgMTIsIDEsIDI0NCwgMTM2LCA3MywgMiwgMjM1LCAxOTEsIDIxNSwgCisgICAgNzksIDEyLCAxLCAyNDQsIDEzNiwgNzMsIDIsIDExNywgMTc2LCA0OSwgMTIsIDEsIDI0NCwgMTM2LCA3MywgMiwgMTMzLCAKKyAgICAxNzYsIDQ5LCAxMiwgMjE3LCAyNTAsIDEyLCAxLCAyNDQsIDExMSwgMTIsIDEsIDIyNCwgMjI1LCAxMiwgMSwgMjM0LCAyNTQsIAorICAgIDEyLCAxLCAyMzMsIDEyNiwgMTIsIDEsIDIzMSwgMTQzLCAxMiwgMSwgMjI4LCAxNzMsIDEyLCAxLCAyNDEsIDIwMiwgMTIsIAorICAgIDEsIDIxNCwgMTQsIDEyLCAxLCAxMDYsIDIzMSwgMjU1LCAxMiwgMSwgMjEzLCAzNCwgMTIsIDI0NCwgMTMxLCAxMiwgMjQ4LCAKKyAgICAxMjcsIDEyLCAyMzQsIDIwOCwgMTIsIDI0NCwgMTMzLCAxMiwgMjQ4LCAxMjksIDEyLCAyMzQsIDIxMCwgMTIsIDIyMSwgMTUsIAorICAgIDEyLCAyMTgsIDI0NiwgMTIsIDIzMiwgMzEsIDQ5LCAxMiwgMTkyLCA0OSwgMTIsIDE5MiwgNTUsIDEyLCAyMTksIDEwLCAKKyAgICAyNTQsIDc4LCAxMiwgMjM1LCAxOTEsIDI0OCwgMTI5LCAxMiwgMTUyLCAyMjgsIDE3NCwgMjQyLCAxOTQsIDEyLCAyMTEsIAorICAgIDI1MCwgMTIsIDMwLCA1LCAzLCAyMTUsIDgwLCA0OSwgMTIsIDMwLCA1LCAyMzUsIDE5MSwgMywgMjE1LCA4MCwgNDksIDEyLCAKKyAgICAzMCwgNSwgNjIsIDU1LCAxMiwgMjIzLCAyMDIsIDI0OCwgMTI5LCAxMiwgMjQ0LCAxMzQsIDIsIDExNywgMjQ3LCA3MiwgMTIsIAorICAgIDIxNCwgMTYsIDE5MiwgNTUsIDI1MywgMjA3LCAyMSwgMjEyLCA3OSwgMjUzLCAyMDcsIDIxLCAxMTYsIDI1MywgMjA3LCAyMSwgCisgICAgMTA5LCAyNTMsIDIwNywgMjEsIDE2NiwgMjUzLCAyMDcsIDIxLCAxNjMsIDI1MywgMjA3LCAyMSwgMTgwLCAyNTMsIDIwNywgCisgICAgMjEsIDE4OSwgMjUzLCAyMDcsIDIxLCAxOTgsIDI1MywgMjA3LCAyMSwgMTk1LCAyNTMsIDIwNywgMjEsIDIwMCwgMTIsIAorICAgIDIyNiwgNTcsIDUyLCAxMiwgMjQ4LCAzNCwgMjIxLCA1NywgMTIsIDIxNywgOTksIDIyMSwgNTcsIDEyLCAyNDQsIDUwLCAKKyAgICAyMjUsIDE0MywgMjE5LCA5NSwgMTIsIDEsIDI0NywgNzMsIDI1MSwgMjMwLCAxMiwgMSwgMjQ3LCA3MywgMjI0LCAyMjUsIAorICAgIDEyLCAxLCAyMTgsIDIyMywgMjU0LCA3OCwgMTIsIDEsIDEwNiwgMjE0LCAzMCwgMTIsIDEsIDEwNiwgMiwgMjE0LCAxNiwgCisgICAgMTkyLCA0OSwgMTIsIDEsIDEwNiwgMiwgMjE0LCAxNiwgMTkyLCA1NSwgMTIsIDEsIDEyNCwgMjQyLCAyLCAxMiwgMSwgMTI0LCAKKyAgICAxOTIsIDI1NCwgNzgsIDEyLCAxLCAxMjQsIDE5MiwgMjE0LCAxNCwgMTIsIDEsIDExMSwgMiwgMTkyLCA0OSwgMTIsIDEsIAorICAgIDEyNCwgMTkyLCAyMTMsIDM0LCAxMiwgMSwgMjE2LCAxMDksIDEyLCAxLCAyMTYsIDEwNywgMTIsIDEsIDI1MSwgMjQwLCAxMiwgCisgICAgMSwgMjE3LCAyMTYsIDIsIDIyMywgMTMwLCAxMiwgMSwgMjE3LCAyMTYsIDIsIDEzMywgMTc2LCA3OCwgMjQ2LCA1NywgMTIsIAorICAgIDEsIDIyNiwgODAsIDEyLCAxLCAyMTcsIDIxMywgMTIsIDEsIDI1MSwgMjI4LCAxMiwgMSwgMTIxLCAyLCAxOTIsIDQ5LCAxMiwgCisgICAgMSwgMTIxLCAyLCAxMTcsIDE3NiwgNzEsIDQ5LCAxMiwgMSwgMjI4LCAxNCwgMTIsIDEsIDI0NSwgMjU0LCAxMiwgMSwgMTIxLCAKKyAgICAyLCAxMzMsIDE3NiwgNDksIDEyLCAxLCAyMTcsIDIzMywgMTIsIDEsIDIxNywgMjMxLCAxMiwgMSwgMjQ4LCA4MSwgMTIsIDEsIAorICAgIDI0OCwgMTQxLCAyLCAyMjMsIDEzMCwgMTIsIDEsIDI0OCwgMTQxLCAyLCA2MiwgNTUsIDEyLCAxLCAyNDgsIDE0MSwgMiwgCisgICAgNjIsIDI1MSwgMjIwLCAyNCwgMywgMjE4LCAyOSwgMTIsIDEsIDI0OCwgMTQ2LCAxMiwgMSwgMjQ4LCA4MywgMTIsIDEsIAorICAgIDI0NiwgMjUsIDEyLCAxLCAyNDgsIDE0MSwgMiwgMTMzLCAxNzYsIDc4LCAyNDYsIDU3LCAxMiwgMSwgMjQ4LCAxNDEsIDIsIAorICAgIDI0MywgMjM3LCAxNzYsIDQ5LCAxMiwgMSwgMjIzLCA3NywgMTIsIDEsIDIyMywgMjQ2LCAyLCAzLCAyMTUsIDc5LCAxMiwgMSwgCisgICAgMjIzLCAyNDYsIDIsIDIyMywgMTMwLCAxMiwgMSwgMjIzLCAyNDYsIDIsIDYyLCA1NSwgMTIsIDEsIDIyMywgMjQ2LCAyLCAzLCAKKyAgICAyMTUsIDgwLCA1NSwgMTIsIDEsIDIyMywgMjQ2LCAyLCA2MiwgMjUxLCAyMjAsIDI0LCA2MiwgNDksIDEyLCAxLCAyMjMsIAorICAgIDI0NiwgMiwgMTE3LCAxNzYsIDQ5LCAxMiwgMSwgMjM1LCAxMjEsIDEyLCAxLCAyMjMsIDI0NiwgMiwgMjQzLCAyMzcsIDE3NiwgCisgICAgNDksIDEyLCAxLCAyMjIsIDg2LCAyLCA2MiwgMjUxLCAyMjAsIDI0LCA2MiwgNDksIDEyLCAxLCAyMjIsIDg2LCAyLCAxMzMsIAorICAgIDE3NiwgNTUsIDEyLCAxLCAyMjIsIDg2LCAyLCAxMzMsIDE3NiwgMjUxLCAyMjAsIDI0LCAxMzMsIDE3NiwgNDksIDEyLCAxLCAKKyAgICAyMjIsIDE5NiwgMiwgMTE3LCAxNzYsIDU1LCAxMiwgMSwgMjIyLCAxOTYsIDIsIDEzMywgMTc2LCA0OSwgMTIsIDEsIDIxOCwgCisgICAgMzAsIDIsIDEzMywgMTc2LCA0OSwgMTIsIDEsIDI1NCwgMTA0LCAyLCAxMzMsIDE3NiwgNDksIDEyLCAxLCAyNDcsIDczLCAKKyAgICAyNDQsIDExMSwgMTIsIDEsIDI0NCwgMTEyLCAyLCA2MiwgMjMwLCAxNzksIDU1LCAxMiwgMSwgMjQ0LCAxMTIsIDIsIDYyLCAKKyAgICA1NSwgMTIsIDEsIDIxNCwgMjI1LCAxMiwgMSwgMjQ0LCAxMTIsIDIsIDEzMywgMTc2LCA1NSwgMTIsIDEsIDIyNiwgNzgsIAorICAgIDEyLCAxLCAyMjQsIDIyNiwgMiwgNjIsIDQ5LCAxMiwgMSwgMjI0LCAyMjYsIDIsIDEzMywgMTc2LCA0OSwgMTIsIDEsIDIzNCwgCisgICAgMTgwLCAxMiwgMSwgMjE4LCAxOTUsIDIzNCwgMjU0LCAxMiwgMSwgMjM0LCAyNTUsIDIsIDIyMywgMTMwLCAxMiwgMSwgMjM0LCAKKyAgICAyNTUsIDIsIDYyLCA0OSwgMTIsIDEsIDIyOSwgMTYxLCAxMiwgMSwgMjM0LCAyNTUsIDIsIDEzMywgMTc2LCA1NSwgMTIsIDEsIAorICAgIDI0MywgOTcsIDEyLCAxLCAyNDMsIDk4LCAyLCAyMjMsIDEzMCwgMTIsIDEsIDIyOSwgODgsIDEyLCAxLCAyNDMsIDk4LCAyLCAKKyAgICAxMTcsIDE3NiwgNTUsIDEyLCAxLCAyNDIsIDgyLCAxMiwgMSwgMjQzLCA5OCwgMiwgMTMzLCAxNzYsIDQ5LCAxMiwgMSwgCisgICAgMjMzLCAxMjcsIDIsIDMsIDIxNSwgNzksIDEyLCAxLCAyMzMsIDEyNywgMiwgNjIsIDQ5LCAxMiwgMSwgMjMzLCAxMjcsIDIsIAorICAgIDEzMywgMTc2LCA0OSwgMTIsIDEsIDIzMywgMTI3LCAyLCAxMzMsIDE3NiwgNTUsIDEyLCAxLCAyMjgsIDE3NCwgMiwgNjIsIAorICAgIDU1LCAxMiwgMSwgMjI4LCAxNzQsIDI0MiwgMTk0LCAxMiwgMSwgMjIzLCAxMTUsIDEyLCAxLCAyMjgsIDE3NCwgMiwgMjIzLCAKKyAgICAxMzAsIDEyLCAxLCAyMjgsIDE3NCwgMiwgMTMzLCAxNzYsIDQ5LCAxMiwgMSwgMjQxLCAyMDMsIDI0NywgOTUsIDEyLCAxLCAKKyAgICAyMTcsIDIzNCwgMiwgNjIsIDQ5LCAxMiwgMSwgMjQxLCAyMDMsIDIsIDczLCA0OSwgMTIsIDEsIDI0MSwgMjAzLCAyNDIsIAorICAgIDE0NywgMTIsIDEsIDI0MSwgMjAzLCAyNDIsIDE0OCwgMiwgMTkyLCA0OSwgMTIsIDEsIDIxNywgMjE2LCAyMzEsIDIyOCwgCisgICAgMjQyLCAxNDcsIDEyLCAxLCAyMTQsIDE1LCAyLCAyMjMsIDEzMCwgMTIsIDEsIDIzNCwgODIsIDIyNywgOTksIDEyLCAxLCAKKyAgICAyMjcsIDk5LCAxMiwgMSwgNjksIDEyLCAxLCAyMTIsIDIwMywgMTIsIDEsIDIzNCwgODIsIDIxMiwgMjAzLCAxMiwgMSwgCisgICAgMjE0LCAxNSwgMiwgMTE3LCAxNzYsIDQ5LCAxMiwgMSwgMjE0LCAyMzIsIDEyLCAxLCAyNDQsIDEzNiwgMjEzLCAzNCwgMTIsIAorICAgIDEsIDczLCAyLCAyMTgsIDI3LCAxMiwgMSwgNzMsIDIsIDMsIDIxNSwgNzksIDEyLCAxLCAyMTQsIDE1LCAyLCA2MiwgNDksIAorICAgIDEyLCAxLCA3NCwgMTIsIDEsIDczLCAyLCAxMzMsIDE3NiwgNTUsIDEyLCAxLCA3MywgMjUyLCA1MiwgMTIsIDEsIDczLCAKKyAgICAyNTIsIDUzLCAyLCAxOTIsIDQ5LCAxMiwgMjQzLCAyMDAsIDIxOSwgNjksIDEyLCAxLCAyNTQsIDE0OCwgMTIsIDMsIDEyNCwgCisgICAgMjYsIDIyMiwgMTk2LCAyLCAyMzMsIDEyNywgMiwgMTA2LCAyMzEsIDI1NSwgMTIsIDMsIDEyNCwgMjYsIDIyNCwgMjI2LCAyLCAKKyAgICAyMzMsIDEyNywgMiwgMTA2LCAyMzEsIDI1NSwgMTIsIDMsIDEyNCwgNjMsIDcwLCAxNywgMTIsIDMsIDEyNCwgMjMzLCAxMjcsIAorICAgIDI1NCwgNzgsIDEyLCAzLCAxMjQsIDIzNSwgMTI0LCAxMiwgMywgMTI0LCAxMzMsIDI0NywgNzIsIDEyLCAzLCAxMjQsIDIyMiwgCisgICAgODUsIDEyLCAyNDUsIDEwMSwgNjUsIDI1MywgODIsIDEyLCAyMTksIDkxLCA2NSwgMjIzLCA0OSwgMjQ1LCAxMzIsIDI0MSwgCisgICAgMTQxLCAxMiwgMywgMTI0LCAyMjMsIDg1LCAyMTIsIDc5LCAxMiwgMywgMTI0LCAyMTUsIDEzMCwgMjI0LCA4LCAyMTIsIDc5LCAKKyAgICAxMiwgMywgMTI0LCAyNDcsIDczLCAyNDEsIDIyMCwgNjUsIDIzNCwgMTM1LCAxMiwgMywgMTI0LCA2MywgNDgsIDE3LCAxMiwgCisgICAgMywgMTE1LCAyMjIsIDg1LCAxMiwgMywgMTI0LCAyMzIsIDMyLCAxMiwgMywgMjE0LCAxNCwgMTIsIDMsIDIxMywgMzQsIDEyLCAKKyAgICAzLCAxMjQsIDIxMywgMzQsIDEyLCAzLCAxMjQsIDIyOCwgMTczLCAxMiwgMjI1LCAxNzMsIDY1LCAyMjIsIDE4NCwgMTIsIAorICAgIDI0NSwgMTEwLCAyNTAsIDEwOSwgMTE1LCAyMTksIDY5LCAxMiwgMjQ1LCAxMTAsIDI1MCwgMTA5LCAxMjQsIDIxOSwgNjksIAorICAgIDEyLCAyMjMsIDg1LCAxMjQsIDIxOSwgNzAsIDIsIDI0NCwgNzMsIDI1MCwgMTA4LCAxMiwgMywgMTE1LCAyMzEsIDE0MywgCisgICAgMTIsIDEsIDI0OCwgMTQxLCAyLCAyMzUsIDE5MSwgMjE1LCA3OSwgMTIsIDEsIDIyMywgMjQ2LCAyLCAyMzUsIDE5MSwgMjE1LCAKKyAgICA3OSwgMjQ0LCAyNDYsIDI1MywgMjA3LCAyMSwgMjEyLCA3OSwgMjQ0LCAyNDYsIDI1MywgMjA3LCAyMSwgMTE2LCAyNDQsIAorICAgIDI0NiwgMjUzLCAyMDcsIDIxLCAxMDksIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDE2NiwgMjQ0LCAyNDYsIDI1MywgMjA3LCAKKyAgICAyMSwgMTYzLCAyNDQsIDI0NiwgMjUzLCAyMDcsIDIxLCAxODAsIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDE4OSwgMjQ0LCAKKyAgICAyNDYsIDI1MywgMjA3LCAyMSwgMTk4LCAyNDQsIDI0NiwgMjUzLCAyMDcsIDIxLCAxOTUsIDI0NCwgMjQ2LCAyNTMsIDIwNywgCisgICAgMjEsIDIwMCwgMTIsIDEsIDIyMCwgMjQwLCAyLCA2MiwgNTUsIDEyLCAxLCAyNDgsIDE2MCwgMiwgNjIsIDU1LCAxMiwgMSwgCisgICAgMjQyLCAyMjEsIDIsIDYyLCA1NSwgMTIsIDUsIDIyMCwgODQsIDI1NCwgMzUsIDEyLCA1LCAyMjAsIDg0LCAyMjUsIDExNSwgCisgICAgMjMxLCAxMjIsIDEyLCAxLCAyNDEsIDIwMywgMiwgMjM1LCAxOTEsIDIxNSwgNzksIDE3NSwgMjQ1LCAxMDEsIDY1LCAyMjYsIAorICAgIDE0MiwgMTc1LCAyMTgsIDIxOSwgMjQzLCAyMDAsIDIxOSwgNjksIDE3NSwgMjE5LCAxMiwgMjQzLCAyMDAsIDIxOSwgNjksIAorICAgIDE3NSwgMjE4LCAyMTksIDI0OSwgMTY0LCAxNzUsIDIxOSwgMTIsIDI0OSwgMTY0LCAxNzUsIDE5OSwgMjQ5LCAxNjQsIDE3NSwgCisgICAgMjQ5LCAxNjUsIDIyMCwgMzQsIDIzMywgNzAsIDE3NSwgMjQ5LCAxNjUsIDIyMCwgMzQsIDIyMywgMTQ4LCAxNzUsIDIxOCwgCisgICAgMjE5LCAyNDksIDE2NSwgMjIwLCAzNCwgMjMzLCA3MCwgMTc1LCAyMTksIDEyLCAyNDksIDE2NSwgMjIwLCAzNCwgMjIzLCAKKyAgICAxNDgsIDE3NSwgMjQ5LCAxMTksIDE3NSwgMjQxLCAyNDAsIDIyNywgMTE0LCAxNzUsIDI0MSwgMjQwLCAyMzEsIDEwMywgCisgICAgMTc1LCAyNDEsIDI0MCwgMjUzLCAxMzQsIDE3NSwgMjU0LCAxODEsIDc3LCAxNzUsIDEsIDI1NCwgODIsIDE3NSwgMSwgMjE4LCAKKyAgICAyMjMsIDI1NCwgODIsIDE3NSwgMSwgMjUxLCAyMDIsIDE3NSwgMSwgMjQzLCA4OSwgMTc1LCAxLCAyNDMsIDkwLCAyNDMsIAorICAgIDY3LCAxNzUsIDEsIDI0OCwgMTM3LCAxNzUsIDEsIDI0NywgNzMsIDI0OCwgMTM4LCAyMjMsIDEyNiwgMTc1LCAxLCAyNDEsIAorICAgIDIyMiwgMTc1LCAxLCAyMTQsIDE0LCAxNzUsIDEsIDIxMiwgMTAxLCAxNzUsIDEsIDI0MSwgMTgwLCAxNzUsIDEsIDIxNywgCisgICAgMTc5LCAxNzUsIDEsIDIxNywgMTgwLCAyNDMsIDY3LCAxNzUsIDEsIDIxMiwgMTkwLCAxNzUsIDEsIDIxMiwgMTkxLCAyNDEsIAorICAgIDIyMiwgMTc1LCAxLCAyMzQsIDIzMCwgMTc1LCAxLCAyMzMsIDEyNSwgMTc1LCAxLCAyMzEsIDMsIDE3NSwgMSwgMjI4LCA1MCwgCisgICAgMTc1LCAxLCAyMjEsIDYzLCAxNzUsIDEsIDQwLCAyMjEsIDYzLCAxNzUsIDEsIDc0LCAxNzUsIDEsIDIyNiwgOTYsIDE3NSwgCisgICAgMSwgMjIzLCAyMDIsIDIyNiwgOTYsIDE3NSwgMSwgMjIyLCAxOTMsIDE3NSwgMSwgMjI0LCAyMTksIDE3NSwgMSwgMjIzLCAKKyAgICAxMjYsIDE3NSwgMSwgMjIwLCAyMDAsIDE3NSwgMSwgMjE3LCAyNDMsIDE3NSwgMSwgMjI2LCA0NSwgMjUxLCAxOTAsIDE3NSwgCisgICAgMSwgMjI2LCA0NSwgMjQyLCAyMTgsIDE3NSwgMSwgMjI2LCA0NSwgMjQ3LCAyMjgsIDE3NSwgMjI1LCAzNiwgNDksIDE3NSwgCisgICAgMjI1LCAzNiwgNTUsIDE3NSwgMjI1LCAzNiwgMjQ2LCA3MSwgMTc1LCAyMTIsIDEwLCA0OSwgMTc1LCAyMTIsIDEwLCA1NSwgCisgICAgMTc1LCAyMTIsIDEwLCAyNDYsIDcxLCAxNzUsIDIyNCwgMjQsIDQ5LCAxNzUsIDIyNCwgMjQsIDU1LCAxNzUsIDI0NiwgNzIsIAorICAgIDIxMiwgMTcsIDI0MSwgMzEsIDE3NSwgMjQ2LCA3MiwgMjEyLCAxNywgMjU0LCAxNSwgMTc1LCAyNDEsIDIyNSwgNDksIDE3NSwgCisgICAgMjQxLCAyMjUsIDU1LCAxNzUsIDI0MSwgMjI0LCAyNDYsIDcxLCAxNzUsIDI0NSwgNDMsIDQ5LCAxNzUsIDI0NSwgNDMsIDU1LCAKKyAgICAxNzUsIDIyMywgMTksIDE3NSwgMjQ0LCAxMDUsIDI0NywgNzQsIDE3NSwgMjI0LCAxMzcsIDE3NSwgMjIzLCA0NSwgMTc1LCAKKyAgICAxMTcsIDcxLCAxNzYsIDQ5LCAxNzUsIDExNywgNzEsIDE3NiwgNTUsIDE3NSwgMTMzLCAxNzYsIDQ5LCAxNzUsIDEzMywgCisgICAgMTc2LCA1NSwgMTc1LCAyMjcsIDExMiwgMjMyLCAyNDMsIDQ5LCAxNzUsIDIyNywgMTEyLCAyMzIsIDI0MywgNTUsIDE3NSwgCisgICAgMjMwLCAxMjYsIDE3NSwgMjUyLCA1MSwgMTc1LCAxLCAyMTksIDIzMywgMjEyLCA3MywgMTc1LCAxLCAyMTksIDIzMywgMjM0LCAKKyAgICAxMjgsIDE3NSwgMSwgMjE5LCAyMzMsIDI0NCwgMTIzLCAxMiwgMSwgMjUxLCAyMzEsIDIsIDEzMywgMTc2LCAyNDAsIDIzNywgCisgICAgNTUsIDEyLCAxLCAyNTEsIDIzMSwgMiwgNjIsIDI1MSwgMjIwLCAyNCwgMTMzLCAxNzYsIDQ5LCAxMiwgMSwgMjUxLCAyMzEsIAorICAgIDIsIDEzMywgMTc2LCAyMjUsIDE0MSwgMjE1LCAxMjQsIDU1LCAxMiwgMSwgMjUxLCAyMzEsIDIsIDEzMywgMTc2LCAyMjUsIAorICAgIDE0MSwgMjE1LCAxMjQsIDI1MSwgMjIwLCAyNCwgMTE3LCAxNzYsIDQ5LCAxMiwgMSwgMjUxLCAyMzEsIDIsIDExNywgMTc2LCAKKyAgICAyNTEsIDIyMCwgMjQsIDYyLCA0OSwgMTIsIDEsIDI1MSwgMjMxLCAyLCAyMzUsIDE5MSwgMywgMjE1LCA4MCwgNTUsIDEyLCAKKyAgICAxLCAyNTEsIDIzMSwgMiwgMywgMjE1LCA3OSwgMTIsIDEsIDEyMSwgMiwgMTE3LCAxNzYsIDQ5LCAxMiwgMSwgMTIxLCAyLCAKKyAgICAxMzMsIDE3NiwgMjI1LCAxNDEsIDIxNSwgMTI0LCA1NSwgMTIsIDEsIDI0OCwgMTQxLCAyLCAxMTcsIDE3NiwgMjE0LCAxNjYsIAorICAgIDI1MSwgMjIwLCAyNCwgMywgMjE4LCAyOSwgMTIsIDEsIDI0OCwgMTQxLCAyLCAyMzUsIDE5MSwgMywgMjE1LCA4MCwgNTUsIAorICAgIDEyLCAxLCAyMjMsIDI0NiwgMiwgOTAsIDEyLCAxLCAyMjIsIDg2LCAyLCAyNDMsIDIzNywgMTc2LCA0OSwgMTIsIDEsIDI1NCwgCisgICAgMTA0LCAyLCAxMTcsIDE3NiwgNDksIDEyLCAxLCAyNTQsIDEwNCwgMiwgMTMzLCAxNzYsIDIyNSwgMTQxLCAyNDYsIDU4LCAKKyAgICA0OSwgMTIsIDEsIDI1NCwgMTA0LCAyLCAxMTcsIDE3NiwgMjE0LCAxNjYsIDQ5LCAxMiwgMSwgMjQ0LCAxMTIsIDIsIDExNywgCisgICAgMTc2LCA1NSwgMTIsIDEsIDI0NCwgMTEyLCAyLCAxMzMsIDE3NiwgMjI1LCAxNDEsIDIxNSwgMTI0LCA1NSwgMTIsIDEsIAorICAgIDIzNCwgMTgxLCAyLCA2MiwgNDksIDEyLCAxLCAyMzQsIDE4MSwgMiwgMTMzLCAxNzYsIDQ5LCAxMiwgMSwgMjM0LCAxODEsIAorICAgIDIsIDEzMywgMTc2LCAyMjUsIDE0MSwgMjE1LCAxMjQsIDU1LCAxMiwgMSwgNjMsIDIsIDYyLCA0OSwgMTIsIDEsIDYzLCAyLCAKKyAgICA2MiwgNTUsIDEyLCAxLCAyMjgsIDE3NCwgMiwgMTE3LCAxNzYsIDU1LCAxMiwgMSwgMjI4LCAxNzQsIDIsIDMsIDIxOCwgMjksIAorICAgIDEyLCAxLCAyMjgsIDE3NCwgMiwgMywgMjE1LCA3OSwgMTIsIDEsIDIzMywgMTI3LCAyLCAxMzQsIDEyLCAxLCAyMjMsIDI0NiwgCisgICAgMiwgMTE3LCAxNzYsIDIxNCwgMTY2LCA0OSwgMTIsIDEsIDIyMywgMjQ2LCAyLCAxOTIsIDQ5LCAxMiwgMSwgMjIyLCA4NiwgCisgICAgMiwgMTE3LCAxNzYsIDIxNCwgMTY2LCA0OSwgMTIsIDEsIDEyMSwgMiwgMywgMTIsIDEsIDIxOCwgMzAsIDU1LCAxMiwgMSwgCisgICAgMTIxLCAyLCAzLCAxMiwgMSwgMjE4LCAzMCwgMjQsIDExNywgMjQ3LCA3MiwgMTIsIDEsIDIyMiwgODYsIDIsIDMsIDEyLCAxLCAKKyAgICAyMTgsIDMwLCAyNCwgMTE3LCAyNDcsIDcyLCAxMiwgMSwgMjIzLCAyNDYsIDIsIDMsIDEyLCAxLCAyMTgsIDMwLCAyNCwgCisgICAgMTE3LCAyNDcsIDcyLCAxMiwgMSwgMTIxLCAyLCAzLCAxMiwgMSwgMjE4LCAzMCwgNDksIDEyLCAxLCAxMDYsIDIsIDI0NCwgCisgICAgMjQ2LCAyNTMsIDIwNywgMjEsIDExNywgNDksIDEyLCAxLCAxMDYsIDIsIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDEzMywgCisgICAgNDksIDEyLCAxLCAyNDQsIDEzNiwgNzMsIDIsIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDExNywgNDksIDEyLCAxLCAyNDQsIAorICAgIDEzNiwgNzMsIDIsIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDEzMywgNDksIDEyLCAxLCAyNDQsIDEzNiwgNzMsIDIsIDI0NCwgCisgICAgMjQ2LCAyNTMsIDIwNywgMjEsIDI0MywgMjM3LCA1NSwgMTIsIDEsIDIxNCwgMTUsIDIsIDI0NCwgMjQ2LCAyNTMsIDIwNywgCisgICAgMjEsIDExNywgNDksIDEyLCAxLCAyMTQsIDE1LCAyLCAyNDQsIDI0NiwgMjUzLCAyMDcsIDIxLCAxMzMsIDQ5LCAxMiwgMSwgCisgICAgNzMsIDI1MiwgNTMsIDIsIDI0NCwgMjQ2LCAyNTMsIDIwNywgMjEsIDExNywgNDksIDEyLCAxLCA3MywgMjUyLCA1MywgMiwgCisgICAgMjQ0LCAyNDYsIDI1MywgMjA3LCAyMSwgMTMzLCA0OSwgMTIsIDEsIDEyMSwgMiwgMjQ0LCAyNDYsIDI1MywgMjA3LCAyMSwgCisgICAgMjQzLCAyMzcsIDU1LCAxMiwgMSwgMjIyLCA4NiwgMiwgMjQ0LCAyNDYsIDI1MywgMjA3LCAyMSwgMjQzLCAyMzcsIDQ5LCAKKyAgICAxMiwgMSwgMjIyLCA4NiwgMiwgMjM1LCAxOTEsIDIxNSwgNzksIDEyLCAxLCAyMzQsIDI1NSwgMiwgMTE3LCAxNzYsIDQ5LCAKKyAgICAyMTcsIDE1OCwgMSwgMjQyLCAyNywgMjE3LCAxNTgsIDEsIDIyMCwgMjQ4LCAyMTcsIDE1OCwgMSwgMjI4LCAxNzIsIDIxNywgCisgICAgMTU4LCAxLCAyMjQsIDc0LCAyMTcsIDE1OCwgMSwgMjUyLCAxMDYsIDIxNywgMTU4LCAxLCAyMzMsIDIyLCAyMTcsIDE1OCwgCisgICAgMSwgMjM1LCAxMiwgMjE3LCAxNTgsIDEsIDI1NCwgNjgsIDIxNywgMTU4LCAxLCAyMTQsIDI1NSwgMjE3LCAxNTgsIDEsIAorICAgIDIzMSwgMTQyLCAyMTcsIDE1OCwgMSwgMjQ0LCAxNjIsIDIxNywgMTU4LCAxLCAyNDcsIDIzMSwgMjE3LCAxNTgsIDEsIDIxNywgCisgICAgMTYwLCAyMTcsIDE1OCwgMSwgMjMzLCAxNTMsIDIxNywgMTU4LCAxLCAyNDMsIDEwNiwgMjE3LCAxNTgsIDEsIDI0MiwgMTUzLCAKKyAgICAyMTcsIDE1OCwgMSwgMjIyLCA4NCwgMjE3LCAxNTgsIDEsIDI0OCwgOTQsIDIxNywgMTU4LCAxLCAyMTIsIDkzLCAyMTcsIAorICAgIDE1OCwgMSwgMjE3LCAyNDQsIDIxNywgMTU4LCAxLCAyMTMsIDkxLCAyMTcsIDE1OCwgMSwgMjI2LCAxMDcsIDIxNywgMTU4LCAKKyAgICAxLCAyMzUsIDEyOSwgMjE3LCAxNTgsIDEsIDI1MCwgNzAsIDIxNywgMTU4LCAxLCAyMTYsIDExNCwgMjE3LCAxNTgsIDEsIAorICAgIDI0MSwgMTczLCAyMTcsIDE1OCwgMSwgMjM0LCAxMzcsIDIxNywgMTU4LCAxLCAyMTcsIDE1OSwgMjE3LCAxNTgsIDEsIDIxMiwgCisgICAgMTA4LCAyMTcsIDE1OCwgMSwgMjIwLCAyMzgsIDIxNywgMTU4LCAxLCAyMjIsIDE5OSwgMjE3LCAxNTgsIDEsIDI0OCwgMTYyLCAKKyAgICAyMTcsIDE1OCwgMSwgMTA4LCAyMTcsIDE1OCwgMSwgMjEyLCAxNiwgMjE3LCAxNTgsIDEsIDI1NCwgMTAxLCAyMTcsIDE1OCwgCisgICAgMSwgMjQyLCAyMTksIDIxNywgMTU4LCAxLCAyMjQsIDIyOSwgMjE3LCAxNTgsIDEsIDIxNCwgNDcsIDIxNywgMTU4LCAyNTQsIAorICAgIDE4MiwgMjE3LCAxNTgsIDI1NCwgMTk3LCAyMTcsIDE1OCwgMjQwLCAxMDcsIDIxNywgMTU4LCAyNDUsIDE2NCwgMjE3LCAKKyAgICAxNTgsIDIxNSwgMTkxLCAyMTcsIDE1OCwgMjI3LCA0OCwgMjE3LCAxNTgsIDI0NSwgMTcyLCAyMTcsIDE1OCwgMjQ0LCAyNDAsIAorICAgIDIxNywgMTU4LCAyMjcsIDExMSwgMjE3LCAxNTgsIDIyNywgMTE5LCAyMTcsIDE1OCwgMjE4LCAyNDYsIDIxNywgMTU4LCAxLCAKKyAgICAyMzAsIDQzLCAyMjgsIDIyNCwgMjEsIDIxMiwgNzksIDIyOCwgMjI0LCAyMSwgMTE2LCAyMjgsIDIyNCwgMjEsIDEwOSwgCisgICAgMjI4LCAyMjQsIDIxLCAxNjYsIDIyOCwgMjI0LCAyMSwgMTYzLCAyMjgsIDIyNCwgMjEsIDE4MCwgMjI4LCAyMjQsIDIxLCAKKyAgICAxODksIDIyOCwgMjI0LCAyMSwgMTk4LCAyMjgsIDIyNCwgMjEsIDE5NSwgMjI4LCAyMjQsIDIxLCAyMDAsIDIyOCwgMjI0LCAKKyAgICAxLCA2MSwgMjI4LCAyMjQsIDEsIDI0NSwgMTY1LCAyMjgsIDIyNCwgMSwgNzIsIDIyOCwgMjI0LCAxLCA3NCwgMjI4LCAyMjQsIAorICAgIDEsIDY5LCAyMjgsIDIyNCwgMSwgMjI3LCA0OSwgMjI4LCAyMjQsIDEsIDc1LCAyMjgsIDIyNCwgMSwgMjQ4LCAxNTIsIDIyOCwgCisgICAgMjI0LCAxLCAyMDQsIDIyOCwgMjI0LCAxLCAyNTIsIDEwNywgMjI4LCAyMjQsIDEsIDE5MywgMjI4LCAyMjQsIDEsIDIxOCwgCisgICAgNTIsIDIyOCwgMjI0LCAxLCAyMzUsIDEzOSwgMjI4LCAyMjQsIDEsIDI1MCwgOTIsIDIyOCwgMjI0LCAxLCAyNDgsIDE2NCwgCisgICAgMjI4LCAyMjQsIDEsIDIwMywgMjI4LCAyMjQsIDEsIDIyMywgODEsIDIyOCwgMjI0LCAxLCAyMjIsIDIwMiwgMjI4LCAyMjQsIAorICAgIDEsIDI0MywgNTUsIDIyOCwgMjI0LCAxLCAyNDQsIDE2NCwgMjI4LCAyMjQsIDEsIDE4MSwgMjI4LCAyMjQsIDEsIDIzMywgCisgICAgMTU3LCAyMjgsIDIyNCwgMSwgMjMwLCA0NiwgMjEzLCAyMTAsIDIyOCwgMjI0LCAxLCAxODgsIDIyOCwgMjI0LCAxLCAyMjgsIAorICAgIDIzLCAyMjgsIDIyNCwgMSwgMjA1LCAyMjgsIDIyNCwgMSwgMTU5LCAyMjgsIDIyNCwgMSwgMjE0LCA0OSwgMjI4LCAyMjQsIAorICAgIDEsIDE4NiwgMjI4LCAyMjQsIDEsIDIyOCwgMjQsIDIxMywgMjEwLCAyMjgsIDIyNCwgMSwgMjM1LCA2NCwgMjM1LCAxMzksIAorICAgIDIyOCwgMjI0LCAxLCAyMzUsIDY0LCAyNTAsIDkyLCAyMjgsIDIyNCwgMSwgMjM1LCA2NCwgMjAzLCAyMjgsIDIyNCwgMzcsIAorICAgIDIyMCwgMTc1LCAxMjQsIDIxNiwgMjQxLCAyMjgsIDIyNCwgMzcsIDIyMCwgMTc1LCAxMTUsIDIxNiwgMjQxLCAyMjgsIDIyNCwgCisgICAgMzcsIDIyMCwgMTc1LCAyMjMsIDEyNSwgMjE2LCAyNDEsIDIyOCwgMjI0LCAzNywgMTg0LCAyNDcsIDI0NSwgMjE2LCAyNDEsIAorICAgIDIyOCwgMjI0LCAzNywgMTg0LCAxMjQsIDIxNiwgMjQxLCAyMjgsIDIyNCwgMzcsIDE4NCwgMTE1LCAyMTYsIDI0MSwgMjI4LCAKKyAgICAyMjQsIDM3LCAxODQsIDIyMywgMTI1LCAyMTYsIDI0MSwgMjI4LCAyMjQsIDM3LCAyMzAsIDEzLCA3NywgMjI4LCAyMjQsIAorICAgIDM3LCA1MSwgNjIsIDQ5LCAyMjgsIDIyNCwgMTI0LCAxNjAsIDI1MywgMjI2LCAyMjgsIDIyNCwgMTE1LCAxNjAsIDI1MywgCisgICAgMjI2LCAyMjgsIDIyNCwgMTYsIDIyNywgNTAsIDI0OCwgMSwgMjI4LCAyMjQsIDE2LCAyNDMsIDU0LCAyMjgsIDIyNCwgMjQ5LCAKKyAgICAxNTcsIDIyOCwgMjI0LCAyNDQsIDI1NCwgNzcsIDIyOCwgMjI0LCAyMzMsIDEzMiwgMjIyLCAxNjcsIDEsIDI1NCwgODQsIAorICAgIDIyMiwgMTY3LCAxLCAyNTEsIDE1MSwgMjIyLCAxNjcsIDEsIDI0MywgODgsIDIyMiwgMTY3LCAxLCAyNDgsIDEzOSwgMjIyLCAKKyAgICAxNjcsIDEsIDIzNSwgMTUwLCAyMjIsIDE2NywgMSwgMjUyLCAxMDYsIDIyMiwgMTY3LCAxLCAyMTIsIDgyLCAyMjIsIDE2NywgCisgICAgMSwgMjM1LCAxNTgsIDIyMiwgMTY3LCAxLCAyMTcsIDIwLCAyMjIsIDE2NywgMSwgMjEyLCAxNzMsIDIyMiwgMTY3LCAxLCAKKyAgICAyMzUsIDEzLCAyMjIsIDE2NywgMSwgMjMzLCAxNTAsIDIyMiwgMTY3LCAxLCAyMzEsIDMsIDIyMiwgMTY3LCAxLCAyMjgsIAorICAgIDUwLCAyMjIsIDE2NywgMSwgMjIwLCA4MiwgMjIyLCAxNjcsIDEsIDIzNSwgMjUxLCAyMjIsIDE2NywgMSwgMjQ0LCA5MCwgCisgICAgMjIyLCAxNjcsIDEsIDIxNiwgMTM5LCAyMjIsIDE2NywgMSwgMjI0LCAxNTUsIDIyMiwgMTY3LCAxLCAyMjMsIDEyNiwgMjIyLCAKKyAgICAxNjcsIDEsIDIyMSwgOCwgMjIyLCAxNjcsIDEsIDIxOCwgNDgsIDIyMiwgMTY3LCAxNTIsIDIzNSwgMjUxLCAyMjIsIDE2NywgCisgICAgMTUyLCAyMzUsIDI1MCwgMjIyLCAxNjcsIDE1MiwgMjI3LCAxMDcsIDIyMiwgMTY3LCAxNTIsIDI0OCwgMTUwLCAyMjIsIAorICAgIDE2NywgNTksIDEsIDI0NSwgNjgsIDIxMiwgMTczLCAyMjIsIDE2NywgMTUyLCAyNDUsIDY4LCAyMTIsIDE3MywgMjIyLCAKKyAgICAxNjcsIDMwLCA1LCAxODQsIDc0LCAyMjIsIDE2NywgMzAsIDUsIDc0LCAyMjIsIDE2NywgMzAsIDUsIDIyNiwgMjQyLCAyNTQsIAorICAgIDIzMiwgMjIyLCAxNjcsIDMwLCA1LCAxODQsIDI1NCwgMjMyLCAyMjIsIDE2NywgMzAsIDUsIDI1NCwgMjMyLCAyMjIsIDE2NywgCisgICAgMzAsIDUsIDIyNiwgMjQyLCA2MSwgMjIyLCAxNjcsIDMwLCA1LCAxODQsIDYxLCAyMjIsIDE2NywgMzAsIDUsIDYxLCAyMjIsIAorICAgIDE2NywgNTksIDEsIDIyMCwgMTc1LCA2MSwgMjIyLCAxNjcsIDMwLCA1LCAyMjAsIDE3NSwgNjEsIDIyMiwgMTY3LCAzMCwgNSwgCisgICAgMTg0LCA2OSwgMjIyLCAxNjcsIDMwLCA1LCA2OSwgMjIyLCAxNjcsIDU5LCAxLCA3MiwgMjIyLCAxNjcsIDMwLCA1LCAxODQsIAorICAgIDcyLCAyMjIsIDE2NywgMzAsIDUsIDcyLCAyMjIsIDE2NywgMzAsIDUsIDc1LCAyMjIsIDE2NywgMzAsIDUsIDIxOCwgMjQ2LCAKKyAgICAyMjIsIDE2NywgMTUyLCAyMjksIDE3NCwgMjIyLCAxNjcsIDIyNSwgMjcsIDIyOSwgMTc0LCAyMjIsIDE2NywgMjI1LCAyNywgCisgICAgMjU0LCAxMjMsIDIyMiwgMTY3LCAyMjUsIDI3LCAyNTQsIDIzLCAyMjIsIDE2NywgMjI1LCAyNywgMjUyLCAzNCwgMjIyLCAKKyAgICAxNjcsIDIyNSwgMjcsIDI1MywgMTE3LCAyMjIsIDE2NywgMjI1LCAyNywgMjIwLCAxODgsIDIyMiwgMTY3LCAyNTQsIDE4MSwgCisgICAgNzcsIDIyMiwgMTY3LCAyMjUsIDI3LCAyMzEsIDEzMiwgMjI0LCAxOTAsIDIyMiwgMTY3LCAyMjUsIDI3LCAyMTIsIDI0LCAKKyAgICAyMjIsIDE2NywgMjI1LCAyNywgMjI0LCAxOTAsIDIyMiwgMTY3LCAyMjUsIDI3LCAyMTIsIDEwNywgMjIyLCAxNjcsIDIyNSwgCisgICAgMjcsIDIxNiwgNTQsIDIyMiwgMTY3LCAyMjUsIDI3LCAyNTMsIDE4MCwgMjIyLCAxNjcsIDIyNSwgMjcsIDIxOSwgMjM3LCAKKyAgICAyMzEsIDIwOCwgMjIyLCAxNjcsIDIyNSwgMjcsIDI1NCwgMTEsIDIzMSwgMjQ1LCAxLCAyNDIsIDcsIDIzMSwgMjQ1LCAxLCAKKyAgICAyNTQsIDE4NSwgMjMxLCAyNDUsIDEsIDI1NCwgMTIxLCAyMzEsIDI0NSwgMSwgMjU0LCAxNjAsIDIzMSwgMjQ1LCAxLCAyNTQsIAorICAgIDExNCwgMjMxLCAyNDUsIDEsIDIxNSwgOTgsIDIzMSwgMjQ1LCAxLCAyNTMsIDc2LCAyMzEsIDI0NSwgMSwgMjM1LCAxNTgsIAorICAgIDIzMSwgMjQ1LCAxLCAyNTMsIDExNCwgMjMxLCAyNDUsIDEsIDI1NCwgODksIDIzMSwgMjQ1LCAxLCAyNTQsIDk0LCAyMzEsIAorICAgIDI0NSwgMSwgMjU0LCA4NiwgMjMxLCAyNDUsIDEsIDI1NCwgNDUsIDIzMSwgMjQ1LCAxLCAyNTQsIDMyLCAyMzEsIDI0NSwgMSwgCisgICAgMjUzLCAxNTIsIDIzMSwgMjQ1LCAxLCAyMzUsIDI1MSwgMjMxLCAyNDUsIDEsIDI1MywgMjM5LCAyMzEsIDI0NSwgMSwgMjUzLCAKKyAgICAxMjQsIDIzMSwgMjQ1LCAxLCAyNTMsIDIxNSwgMjMxLCAyNDUsIDEsIDI1MywgMjExLCAyMzEsIDI0NSwgMSwgMjUzLCAxNDYsIAorICAgIDIzMSwgMjQ1LCAxLCAyNTMsIDEyMiwgMjMxLCAyNDUsIDEsIDI0NiwgMTAsIDIzMSwgMjQ1LCAxLCAyMzUsIDYsIDIzMSwgCisgICAgMjQ1LCAxLCAyNTQsIDEwMywgMjMxLCAyNDUsIDI1NCwgMTI3LCA3NywgMjMxLCAyNDUsIDIxNCwgMTE3LCA3NywgMjMxLCAKKyAgICAyNDUsIDI0MywgMjksIDc3LCAyMzEsIDI0NSwgMjI1LCAyNiwgODIsIDUsIDIzNSwgMTkxLCAyNTAsIDE4NywgODIsIDUsIAorICAgIDI1MCwgMTg3LCA4MiwgNSwgMjUzLCAyNDIsIDgyLCA1LCAyMTQsIDEyOCwgODIsIDEsIDIyMCwgMTc1LCA2MSwgODIsIDEsIAorICAgIDYxLCA4MiwgMSwgMjU0LCAyMzIsIDgyLCAxLCA3MiwgODIsIDEsIDIzNiwgMjgsIDgyLCAxLCA2OSwgODIsIDEsIDIxNSwgCisgICAgOTIsIDgyLCAxLCAxNjEsIDE0OSwgODIsIDEsIDE2MSwgMTUwLCA4MiwgMSwgMjUwLCAxOTAsIDc0LCA4MiwgMSwgMjIwLCAKKyAgICAxNzUsIDc0LCA4MiwgMSwgNzQsIDgyLCAxLCAyNTQsIDEwOCwgODIsIDEsIDI1MCwgMTkwLCA3NSwgODIsIDEsIDIyMCwgCisgICAgMTc1LCA3NSwgODIsIDEsIDc1LCA4MiwgMSwgMjUzLCAxMDgsIDgyLCAxLCAxODEsIDgyLCAxLCAyMzQsIDEzOCwgODIsIDEsIAorICAgIDI0MywgMTEwLCA4MiwgMSwgMjQyLCAyMjUsIDgyLCAxLCAyMjksIDE1OSwgODIsIDEsIDI1MCwgMjE5LCA4MiwgMSwgMjUwLCAKKyAgICA5MiwgODIsIDEsIDIzNSwgMTM5LCA4MiwgMSwgMjM1LCAxMTUsIDgyLCAxLCAyMjgsIDIzLCA4MiwgMSwgMjE2LCAxMTUsIAorICAgIDgyLCAxLCAyMTYsIDEwNSwgODIsIDEsIDI0OCwgODYsIDgyLCAxLCAyNDgsIDcwLCA4MiwgMSwgMjI4LCAxOTgsIDgyLCAxLCAKKyAgICAyMTgsIDUyLCA4MiwgMSwgMjE3LCAxNjEsIDgyLCAxLCAyNDgsIDE2NCwgODIsIDEsIDI0NywgMjMyLCA4MiwgMSwgMjA1LCAKKyAgICA4MiwgMSwgMjI4LCAxODksIDgyLCAxLCAxOTMsIDgyLCAxLCAyMjYsIDIzLCA4MiwgMSwgMjUyLCAxMDcsIDgyLCAxLCAyNTEsIAorICAgIDE5NSwgODIsIDEsIDE4OCwgODIsIDEsIDE4NiwgODIsIDEsIDIwMywgODIsIDEsIDIyMywgODEsIDgyLCAxLCAyMzMsIDE1NywgCisgICAgODIsIDEsIDIzMiwgMjEzLCA4MiwgMSwgMjMyLCAyMTIsIDgyLCAxLCAyMTUsIDEsIDgyLCAxLCAyMjEsIDI0LCA4MiwgMSwgCisgICAgMjE5LCAxNTcsIDgyLCAxLCAyMjIsIDIwMiwgODIsIDEsIDE1OSwgODIsIDMwLCA1LCAyMjcsIDk5LCA4MiwgMzAsIDUsIAorICAgIDIyNywgNDcsIDgyLCA1LCAyMjgsIDYwLCA4MiwgNSwgMjUzLCA5MSwgODIsIDMwLCA1LCAyNTQsIDIzMiwgODIsIDMwLCA1LCAKKyAgICA3MiwgODIsIDMwLCA1LCAyMzYsIDI4LCA4MiwgMzAsIDUsIDY5LCA4MiwgMzAsIDUsIDIxNSwgOTIsIDgyLCAzMCwgNSwgCisgICAgMTYxLCAxNDksIDgyLCAzMCwgNSwgMTYxLCAyMjMsIDgyLCA4MiwgMzAsIDUsIDI1MCwgMTkwLCA3NCwgODIsIDMwLCA1LCAKKyAgICAyMjAsIDE3NSwgNzQsIDgyLCAzMCwgNSwgNzQsIDgyLCAzMCwgNSwgMjU0LCAxMDgsIDgyLCAzMCwgNSwgMjUwLCAxOTAsIAorICAgIDc1LCA4MiwgMzAsIDUsIDIyMCwgMTc1LCA3NSwgODIsIDMwLCA1LCA3NSwgODIsIDMwLCA1LCAyNTMsIDEwOCwgODIsIDUsIAorICAgIDIxNCwgMTMzLCA4MiwgMzAsIDUsIDIyNSwgNjYsIDc0LCA4MiwgMzAsIDUsIDI1MywgODcsIDgyLCAyMjcsIDcwLCA4MiwgCisgICAgMjE5LCA1MSwgNSwgMjE1LCAxODUsIDgyLCAyMTksIDUxLCA1LCAyNTMsIDI0NCwgODIsIDI0MiwgMTE0LCAyNTQsIDE3NCwgCisgICAgODIsIDI1NCwgMTY0LCAyNTQsIDE3NCwgODIsIDMwLCA1LCAyNTAsIDE5MCwgMTg0LCA3NCwgODIsIDMwLCA1LCAyMTUsIAorICAgIDE4MywgODIsIDMwLCA1LCAyMTUsIDkxLCA4MiwgMSwgMjI0LCAyMzIsIDgyLCAxLCAyMzQsIDEyMSwgODIsIDEsIDI0MiwgCisgICAgMjAyLCA4MiwgMSwgMjEyLCAxMDksIDgyLCAxLCAyNDgsIDc1LCA4MiwgMSwgMjIzLCAxOTIsIDgyLCAxLCAyNDQsIDE2NCwgCisgICAgODIsIDEsIDIxMiwgMTYwLCA4MiwgMSwgMTYxLCAyMjMsIDgyLCA4MiwgMSwgMTYxLCAyMzIsIDIxNCwgODIsIDMwLCA1LCAKKyAgICAxNjEsIDE1MCwgODIsIDMwLCA1LCAxNjEsIDIzMiwgMjE0LCA4MiwgMjQ4LCAxMjMsIDgyLCA1MSwgMjQ4LCAxMjMsIDgyLCAKKyAgICAyMSwgMjEyLCA3OSwgODIsIDIxLCAxMTYsIDgyLCAyMSwgMTA5LCA4MiwgMjEsIDE2NiwgODIsIDIxLCAxNjMsIDgyLCAyMSwgCisgICAgMTgwLCA4MiwgMjEsIDE4OSwgODIsIDIxLCAxOTgsIDgyLCAyMSwgMTk1LCA4MiwgMjEsIDIwMCwgODIsIDI1NCwgMTgxLCAKKyAgICA1MiwgODIsIDUsIDEyNCwgMjE5LCAyMDUsIDI0NywgNzQsIDgyLCAxLCAyNTAsIDE5MCwgNjEsIDgyLCAxLCAyMjcsIDk5LCAKKyAgICA4MiwgMSwgMjI3LCA0NywgODIsIDEsIDI1MywgODcsIDgyLCAxLCAyMTUsIDE4MywgODIsIDEsIDIxNSwgOTEsIDgyLCAxLCAKKyAgICAyMTIsIDc1LCA4MiwgMSwgMTA3LCAxODYsIDgyLCAxLCAyNDMsIDUsIDgyLCAxLCAyMzUsIDk5LCA4MiwgMSwgMjQyLCAxNTYsIAorICAgIDIxOSwgNjksIDgyLCAxLCAyNDgsIDc2LCA4MiwgMSwgMjUyLCAzMSwgMTQwLCA1LCAyNTAsIDE4NywgMTQwLCA1LCAyNTMsIAorICAgIDI0MiwgMTQwLCA1LCAyMTQsIDEyOCwgMTQwLCAxLCA2MSwgMTQwLCAxLCAyNTQsIDIzMiwgMTQwLCAxLCA3MiwgMTQwLCAxLCAKKyAgICAyMzYsIDI4LCAxNDAsIDEsIDY5LCAxNDAsIDEsIDIxNSwgOTIsIDE0MCwgMSwgMTYxLCAxNDksIDE0MCwgMSwgMTYxLCAxNTAsIAorICAgIDE0MCwgMSwgNzQsIDE0MCwgMSwgMjU0LCAxMDgsIDE0MCwgMSwgNzUsIDE0MCwgMSwgMjUzLCAxMDgsIDE0MCwgMSwgMTgxLCAKKyAgICAxNDAsIDEsIDIzNCwgMTM4LCAxNDAsIDEsIDI0MywgMTEwLCAxNDAsIDEsIDI0MiwgMjI1LCAxNDAsIDEsIDIyOSwgMTU5LCAKKyAgICAxNDAsIDEsIDI1MCwgMjE5LCAxNDAsIDEsIDI1MCwgOTIsIDE0MCwgMSwgMjM1LCAxMzksIDE0MCwgMSwgMjM1LCAxMTUsIAorICAgIDE0MCwgMSwgMjI4LCAyMywgMTQwLCAxLCAyMTYsIDExNSwgMTQwLCAxLCAyMTYsIDEwNSwgMTQwLCAxLCAyNDgsIDg2LCAKKyAgICAxNDAsIDEsIDI0OCwgNzAsIDE0MCwgMSwgMjI4LCAxOTgsIDE0MCwgMSwgMjE4LCA1MiwgMTQwLCAxLCAyMTcsIDE2MSwgCisgICAgMTQwLCAxLCAyNDgsIDE2NCwgMTQwLCAxLCAyNDcsIDIzMiwgMTQwLCAxLCAyMDUsIDE0MCwgMSwgMTkzLCAxNDAsIDEsIAorICAgIDIyNiwgMjMsIDE0MCwgMSwgMjUyLCAxMDcsIDE0MCwgMSwgMjUxLCAxOTUsIDE0MCwgMSwgMTg4LCAxNDAsIDEsIDE4NiwgCisgICAgMTQwLCAxLCAyMDMsIDE0MCwgMSwgMjMzLCAxNTcsIDE0MCwgMSwgMjIxLCAyNCwgMTQwLCAxLCAyMTksIDE1NywgMTQwLCAxLCAKKyAgICAyMjIsIDIwMiwgMTQwLCAxLCAxNTksIDE0MCwgNSwgMjI4LCA2MCwgMTQwLCA1LCAyNTMsIDkxLCAxNDAsIDMwLCA1LCAyNTQsIAorICAgIDIzMiwgMTQwLCAzMCwgNSwgNzIsIDE0MCwgMzAsIDUsIDIzNiwgMjgsIDE0MCwgMzAsIDUsIDY5LCAxNDAsIDMwLCA1LCAKKyAgICAyMTUsIDkyLCAxNDAsIDMwLCA1LCAxNjEsIDE0OSwgMTQwLCAzMCwgNSwgMTYxLCAyMjMsIDgyLCAxNDAsIDMwLCA1LCA3NCwgCisgICAgMTQwLCAzMCwgNSwgMjU0LCAxMDgsIDE0MCwgMzAsIDUsIDc1LCAxNDAsIDMwLCA1LCAyNTMsIDEwOCwgMTQwLCA1LCAyMTQsIAorICAgIDEzMywgMTQwLCAxLCAyMzQsIDEzMCwgMjE4LCA1MiwgMTQwLCAyNTMsIDEwOSwgMjMzLCA0NywgNzcsIDE0MCwgMSwgMjIzLCAKKyAgICA4MSwgMTQwLCAxLCAyMjMsIDE5MiwgMTQwLCAxLCAyMTIsIDE2MCwgMTQwLCAxLCAxNjEsIDIyMywgODIsIDE0MCwgMSwgCisgICAgMTYxLCAyMzIsIDIxNCwgMTQwLCAzMCwgNSwgMTYxLCAxNTAsIDE0MCwgMzAsIDUsIDE2MSwgMjMyLCAyMTQsIDE0MCwgMjEsIAorICAgIDIxMiwgNzksIDE0MCwgMjEsIDExNiwgMTQwLCAyMSwgMTA5LCAxNDAsIDIxLCAxNjYsIDE0MCwgMjEsIDE2MywgMTQwLCAyMSwgCisgICAgMTgwLCAxNDAsIDIxLCAxODksIDE0MCwgMjEsIDE5OCwgMTQwLCAyMSwgMTk1LCAxNDAsIDIxLCAyMDAsIDE0MCwgMSwgMjI0LCAKKyAgICA3NywgMiwgMjMxLCAzNywgMjQ3LCAyMDYsIDE0MCwgMSwgMjI0LCA3NywgMiwgMjMyLCAxNjMsIDI0NywgMjA2LCAxNDAsIAorICAgIDIyMywgMjksIDc3LCAxNDAsIDIyMywgMjksIDUyLCAxNDAsIDI0OSwgMzksIDIyOCwgNTMsIDExNiwgMTQwLCAyNDksIDM5LCAKKyAgICAyMjgsIDUzLCAxMDksIDE0MCwgMjQ5LCAzOSwgMjI4LCA1MywgMTY2LCAxNDAsIDI0OSwgMzksIDIyOCwgNTMsIDE2MywgCisgICAgMTQwLCAyNDksIDM5LCAyMjgsIDUzLCAxMjIsIDIzMywgNDAsIDIxNywgMTU0LCAyMTcsIDE0OSwgMjQ3LCAyNTUsIDE0MCwgCisgICAgMjQ5LCAzOSwgMjQ4LCAwLCAyMjAsIDQ3LCAxNDAsIDIzNSwgMTU5LCAxNDAsIDI0MywgNzksIDc3LCAxNzMsIDUsIDI1NCwgCisgICAgMTU5LCAyNTEsIDE2NiwgMTczLCA1LCAyNTEsIDE2NiwgMTczLCA1LCAyMTQsIDEyOCwgMTczLCAxLCA2MSwgMTczLCAxLCAKKyAgICAyNTQsIDIzMiwgMTczLCAxLCA3MiwgMTczLCAxLCAyMzYsIDI4LCAxNzMsIDEsIDY5LCAxNzMsIDEsIDIxNSwgOTIsIDE3MywgCisgICAgMSwgMjQ1LCAxNjUsIDE3MywgMSwgMjU0LCAxMDgsIDE3MywgMSwgMjI3LCA0OSwgMTczLCAxLCAyNTMsIDEwOCwgMTczLCAxLCAKKyAgICAxODEsIDE3MywgMSwgMjM0LCAxMzgsIDE3MywgMSwgMjQzLCAxMTAsIDE3MywgMSwgMjQyLCAyMjUsIDE3MywgMSwgMjI5LCAKKyAgICAxNTksIDE3MywgMSwgMjUwLCAyMTksIDE3MywgMSwgMjUwLCA5MiwgMTczLCAxLCAyMzUsIDEzOSwgMTczLCAxLCAyMzUsIAorICAgIDExNSwgMTczLCAxLCAyMjgsIDIzLCAxNzMsIDEsIDIxNiwgMTE1LCAxNzMsIDEsIDIxNiwgMTA1LCAxNzMsIDEsIDI0OCwgCisgICAgODYsIDE3MywgMSwgMjQ4LCA3MCwgMTczLCAxLCAyMjgsIDE5OCwgMTczLCAxLCAyMTgsIDUyLCAxNzMsIDEsIDIxNywgMTYxLCAKKyAgICAxNzMsIDEsIDI0OCwgMTY0LCAxNzMsIDEsIDI0NywgMjMyLCAxNzMsIDEsIDIwNSwgMTczLCAxLCAxOTMsIDE3MywgMSwgCisgICAgMjI2LCAyMywgMTczLCAxLCAyNTIsIDEwNywgMTczLCAxLCAyNTEsIDE5NSwgMTczLCAxLCAxODgsIDE3MywgMSwgMTg2LCAKKyAgICAxNzMsIDEsIDIwMywgMTczLCAxLCAyMzMsIDE1NywgMTczLCAxLCAyMzIsIDIxMywgMTczLCAxLCAyMTUsIDEsIDE3MywgMSwgCisgICAgMjIxLCAyNCwgMTczLCAxLCAyMjIsIDIwMiwgMTczLCAxLCAxNTksIDE3MywgNSwgMjI4LCA2MCwgMTczLCAzMCwgNSwgMjU0LCAKKyAgICAyMzIsIDE3MywgMzAsIDUsIDcyLCAxNzMsIDMwLCA1LCAyMzYsIDI4LCAxNzMsIDMwLCA1LCA2OSwgMTczLCAzMCwgNSwgCisgICAgMjE1LCA5MiwgMTczLCAzMCwgNSwgMjQ1LCAxNjUsIDE3MywgMzAsIDUsIDI1NCwgMTA4LCAxNzMsIDMwLCA1LCAyMjcsIDQ5LCAKKyAgICAxNzMsIDMwLCA1LCAyNTMsIDEwOCwgMTczLCA1LCAyMTQsIDEzMywgMTczLCA1LCAyMTUsIDE4NywgMTczLCAxLCAyMzQsIAorICAgIDEyMSwgMTczLCAxLCAyNDIsIDIwMiwgMTczLCAxLCAyMTIsIDEwOSwgMTczLCAxLCAyMjMsIDgxLCAxNzMsIDEsIDI0NCwgCisgICAgMTY0LCAxNzMsIDIxLCAyMTIsIDc5LCAxNzMsIDIxLCAxMTYsIDE3MywgMjEsIDEwOSwgMTczLCAyMSwgMTY2LCAxNzMsIDIxLCAKKyAgICAxNjMsIDE3MywgMjEsIDE4MCwgMTczLCAyMSwgMTg5LCAxNzMsIDIxLCAxOTgsIDE3MywgMjEsIDE5NSwgMTczLCAyMSwgCisgICAgMjAwLCAxNzMsIDIxNywgMjcsIDE3MywgMjU0LCAxNTgsIDE3MywgMjM1LCAxNzYsIDE3MywgMjE1LCAxMTcsIDE3MywgMjQ1LCAKKyAgICAxMzgsIDIyNywgNTQsIDE3MywgNSwgMjEzLCA2NywgMTY0LCA1LCAyNTAsIDE4NywgMTY0LCA1LCAyNTMsIDI0MiwgMTY0LCAKKyAgICA1LCAyMTQsIDEyOCwgMTY0LCAxLCA2MSwgMTY0LCAxLCAyNTQsIDIzMiwgMTY0LCAxLCA3MiwgMTY0LCAxLCAyMzYsIDI4LCAKKyAgICAxNjQsIDEsIDY5LCAxNjQsIDEsIDIxNSwgOTIsIDE2NCwgMSwgMTYxLCAxNDksIDE2NCwgMSwgMTYxLCAxNTAsIDE2NCwgMzAsIAorICAgIDI1MCwgMTkwLCA3NCwgMTY0LCAxLCA3NCwgMTY0LCAxLCAyNTQsIDEwOCwgMTY0LCAzMCwgMjUwLCAxOTAsIDc1LCAxNjQsIAorICAgIDEsIDc1LCAxNjQsIDEsIDI1MywgMTA4LCAxNjQsIDEsIDE4MSwgMTY0LCAxLCAyMzQsIDEzOCwgMTY0LCAxLCAyNDMsIDExMCwgCisgICAgMTY0LCAxLCAyNDIsIDIyNSwgMTY0LCAxLCAyMjksIDE1OSwgMTY0LCAxLCAyNTAsIDIxOSwgMTY0LCAxLCAyNTAsIDkyLCAKKyAgICAxNjQsIDEsIDIzNSwgMTM5LCAxNjQsIDEsIDIzNSwgMTE1LCAxNjQsIDEsIDIyOCwgMjMsIDE2NCwgMSwgMjE2LCAxMTUsIAorICAgIDE2NCwgMSwgMjE2LCAxMDUsIDE2NCwgMSwgMjQ4LCA4NiwgMTY0LCAxLCAyNDgsIDcwLCAxNjQsIDEsIDIyOCwgMTk4LCAKKyAgICAxNjQsIDEsIDIxOCwgNTIsIDE2NCwgMSwgMjE3LCAxNjEsIDE2NCwgMSwgMjQ4LCAxNjQsIDE2NCwgMSwgMjQ3LCAyMzIsIAorICAgIDE2NCwgMSwgMjA1LCAxNjQsIDEsIDE5MywgMTY0LCAxLCAyMjYsIDIzLCAxNjQsIDEsIDI1MiwgMTA3LCAxNjQsIDEsIDI1MSwgCisgICAgMTk1LCAxNjQsIDEsIDE4OCwgMTY0LCAxLCAxODYsIDE2NCwgMSwgMjAzLCAxNjQsIDEsIDIzMywgMTU3LCAxNjQsIDEsIAorICAgIDIzMiwgMjEzLCAxNjQsIDEsIDIxNSwgMSwgMTY0LCAxLCAyMjEsIDI0LCAxNjQsIDEsIDIxOSwgMTU3LCAxNjQsIDEsIDIyMiwgCisgICAgMjAyLCAxNjQsIDEsIDE1OSwgMTY0LCA1LCAyMjgsIDYwLCAxNjQsIDUsIDI1MywgOTEsIDE2NCwgMzAsIDUsIDI1NCwgMjMyLCAKKyAgICAxNjQsIDMwLCA1LCA3MiwgMTY0LCAzMCwgNSwgMjM2LCAyOCwgMTY0LCAzMCwgNSwgNjksIDE2NCwgMzAsIDUsIDIxNSwgOTIsIAorICAgIDE2NCwgMzAsIDUsIDE2MSwgMTQ5LCAxNjQsIDMwLCA1LCAxNjEsIDIyMywgODIsIDE2NCwgMzAsIDUsIDI1MCwgMTkwLCA3NCwgCisgICAgMTY0LCAzMCwgNSwgNzQsIDE2NCwgMzAsIDUsIDI1NCwgMTA4LCAxNjQsIDMwLCA1LCAyNTAsIDE5MCwgNzUsIDE2NCwgMzAsIAorICAgIDUsIDc1LCAxNjQsIDMwLCA1LCAyNTMsIDEwOCwgMTY0LCA1LCAyMTQsIDEzMywgMTY0LCAyMjcsIDcwLCAxNjQsIDEsIDE2MSwgCisgICAgMjIzLCA4MiwgMTY0LCAxLCAxNjEsIDIzMiwgMjE0LCAxNjQsIDMwLCA1LCAxNjEsIDE1MCwgMTY0LCAzMCwgNSwgMTYxLCAKKyAgICAyMzIsIDIxNCwgMTY0LCAyMSwgMjEyLCA3OSwgMTY0LCAyMSwgMTE2LCAxNjQsIDIxLCAxMDksIDE2NCwgMjEsIDE2NiwgCisgICAgMTY0LCAyMSwgMTYzLCAxNjQsIDIxLCAxODAsIDE2NCwgMjEsIDE4OSwgMTY0LCAyMSwgMTk4LCAxNjQsIDIxLCAxOTUsIAorICAgIDE2NCwgMjEsIDIwMCwgMTY0LCAyMjMsIDI5LCA1MiwgMTQ3LCA1LCAyNTAsIDE4NywgMTQ3LCA1LCAyNTMsIDI0MiwgMTQ3LCAKKyAgICA1LCAyMTQsIDEyOCwgMTQ3LCAxLCA2MSwgMTQ3LCAxLCAyNTQsIDIzMiwgMTQ3LCAxLCA3MiwgMTQ3LCAxLCAyMzYsIDI4LCAKKyAgICAxNDcsIDEsIDY5LCAxNDcsIDEsIDIxNSwgOTIsIDE0NywgMSwgMTYxLCAxNDksIDE0NywgMSwgMTYxLCAxNTAsIDE0NywgMSwgCisgICAgNzQsIDE0NywgMSwgMjU0LCAxMDgsIDE0NywgMSwgNzUsIDE0NywgMSwgMjUzLCAxMDgsIDE0NywgMSwgMTgxLCAxNDcsIDEsIAorICAgIDIzNCwgMTM4LCAxNDcsIDEsIDI0MywgMTEwLCAxNDcsIDEsIDI0MiwgMjI1LCAxNDcsIDEsIDIyOSwgMTU5LCAxNDcsIDEsIAorICAgIDI1MCwgMjE5LCAxNDcsIDEsIDI1MCwgOTIsIDE0NywgMSwgMjM1LCAxMzksIDE0NywgMSwgMjM1LCAxMTUsIDE0NywgMSwgCisgICAgMjI4LCAyMywgMTQ3LCAxLCAyMTYsIDExNSwgMTQ3LCAxLCAyMTYsIDEwNSwgMTQ3LCAxLCAyNDgsIDg2LCAxNDcsIDEsIAorICAgIDI0OCwgNzAsIDE0NywgMSwgMjI4LCAxOTgsIDE0NywgMSwgMjE4LCA1MiwgMTQ3LCAxLCAyMTcsIDE2MSwgMTQ3LCAxLCAKKyAgICAyNDgsIDE2NCwgMTQ3LCAxLCAyNDcsIDIzMiwgMTQ3LCAxLCAyMDUsIDE0NywgMSwgMTkzLCAxNDcsIDEsIDIyNiwgMjMsIAorICAgIDE0NywgMSwgMjUyLCAxMDcsIDE0NywgMSwgMjUxLCAxOTUsIDE0NywgMSwgMTg4LCAxNDcsIDEsIDE4NiwgMTQ3LCAxLCAKKyAgICAyMDMsIDE0NywgMSwgMjMzLCAxNTcsIDE0NywgMSwgMjMyLCAyMTMsIDE0NywgMSwgMjE1LCAxLCAxNDcsIDEsIDIyMSwgMjQsIAorICAgIDE0NywgMSwgMjE5LCAxNTcsIDE0NywgMSwgMjIyLCAyMDIsIDE0NywgMSwgMTU5LCAxNDcsIDUsIDIyOCwgNjAsIDE0NywgNSwgCisgICAgMjUzLCA5MSwgMTQ3LCAzMCwgNSwgMjU0LCAyMzIsIDE0NywgMzAsIDUsIDcyLCAxNDcsIDMwLCA1LCAyMzYsIDI4LCAxNDcsIAorICAgIDMwLCA1LCA2OSwgMTQ3LCAzMCwgNSwgMjE1LCA5MiwgMTQ3LCAzMCwgNSwgMTYxLCAxNDksIDE0NywgMzAsIDUsIDE2MSwgCisgICAgMjIzLCA4MiwgMTQ3LCAzMCwgNSwgNzQsIDE0NywgMzAsIDUsIDI1NCwgMTA4LCAxNDcsIDMwLCA1LCA3NSwgMTQ3LCAzMCwgCisgICAgNSwgMjUzLCAxMDgsIDE0NywgNSwgMjE0LCAxMzMsIDE0NywgMjU0LCAxMDksIDIzMywgNDcsIDc3LCAxNDcsIDI1MywgMTA5LCAKKyAgICAyMzMsIDQ3LCA3NywgMTQ3LCAxLCAyMjMsIDgxLCAxNDcsIDEsIDIyMywgMTkyLCAxNDcsIDEsIDIxMiwgMTYwLCAxNDcsIDEsIAorICAgIDE2MSwgMjIzLCA4MiwgMTQ3LCAxLCAxNjEsIDIzMiwgMjE0LCAxNDcsIDMwLCA1LCAxNjEsIDE1MCwgMTQ3LCAzMCwgNSwgCisgICAgMTYxLCAyMzIsIDIxNCwgMTQ3LCAyMSwgMjEyLCA3OSwgMTQ3LCAyMSwgMTE2LCAxNDcsIDIxLCAxMDksIDE0NywgMjEsIAorICAgIDE2NiwgMTQ3LCAyMSwgMTYzLCAxNDcsIDIxLCAxODAsIDE0NywgMjEsIDE4OSwgMTQ3LCAyMSwgMTk4LCAxNDcsIDIxLCAKKyAgICAxOTUsIDE0NywgMjEsIDIwMCwgMTQ3LCAyMzUsIDE1OSwgMTQ3LCAxLCAyMTQsIDQ5LCAxNDcsIDI0MywgMjI4LCAxMjIsIAorICAgIDIyNCwgMTY2LCAxNDcsIDI0MywgMjI4LCAxMjIsIDI0MiwgOSwgMTQ3LCAyNDMsIDIyOCwgMTMzLCAyMjQsIDE2NCwgMTQ3LCAKKyAgICAyNDMsIDIyOCwgMTIyLCAyMjAsIDQ1LCAxNDcsIDI0MywgMjI4LCAxMjIsIDI0NSwgMTQ1LCAxNDcsIDI0MywgMjI4LCAxMzMsIAorICAgIDIyMCwgNDQsIDE3OCwgNSwgMjUzLCAyNDIsIDE3OCwgNSwgMjE0LCAxMjgsIDE3OCwgMSwgNjEsIDE3OCwgMSwgMjU0LCAKKyAgICAyMzIsIDE3OCwgMSwgNzIsIDE3OCwgMSwgMjM2LCAyOCwgMTc4LCAxLCA2OSwgMTc4LCAxLCAyMTUsIDkyLCAxNzgsIDEsIAorICAgIDc0LCAxNzgsIDEsIDI0NSwgMTY1LCAxNzgsIDEsIDI1NCwgMTA4LCAxNzgsIDEsIDc1LCAxNzgsIDEsIDIyNywgNDksIDE3OCwgCisgICAgMSwgMjUzLCAxMDgsIDE3OCwgMSwgMTgxLCAxNzgsIDEsIDIyOSwgMTU5LCAxNzgsIDEsIDI1MCwgMjE5LCAxNzgsIDEsIAorICAgIDIzNSwgMTM5LCAxNzgsIDEsIDIyOCwgMjMsIDE3OCwgMSwgMjE2LCAxMTUsIDE3OCwgMSwgMjI4LCAxOTgsIDE3OCwgMSwgCisgICAgMjE4LCA1MiwgMTc4LCAxLCAyMDUsIDE3OCwgMSwgMjI4LCAxODksIDE3OCwgMSwgMTkzLCAxNzgsIDEsIDE4OCwgMTc4LCAxLCAKKyAgICAxODYsIDE3OCwgMSwgMjAzLCAxNzgsIDEsIDIyMywgODEsIDE3OCwgMSwgMjMzLCAxNTcsIDE3OCwgMSwgMjMyLCAyMTMsIAorICAgIDE3OCwgMSwgMjMyLCAyMTIsIDE3OCwgMSwgMjE1LCAxLCAxNzgsIDEsIDIyMSwgMjQsIDE3OCwgMSwgMjE5LCAxNTcsIDE3OCwgCisgICAgMSwgMjIyLCAyMDIsIDE3OCwgMSwgMTU5LCAxNzgsIDMwLCA1LCAyNTQsIDIzMiwgMTc4LCAzMCwgNSwgNzIsIDE3OCwgMzAsIAorICAgIDUsIDIzNiwgMjgsIDE3OCwgMzAsIDUsIDY5LCAxNzgsIDMwLCA1LCAyMTUsIDkyLCAxNzgsIDMwLCA1LCA3NCwgMTc4LCAzMCwgCisgICAgNSwgMjQ1LCAxNjUsIDE3OCwgMzAsIDUsIDI1NCwgMTA4LCAxNzgsIDMwLCA1LCA3NSwgMTc4LCAzMCwgNSwgMjI3LCA0OSwgCisgICAgMTc4LCAzMCwgNSwgMjUzLCAxMDgsIDE3OCwgNSwgMjE0LCAxMzMsIDE3OCwgMjI3LCA3MCwgMTc4LCAyNTMsIDEwOSwgMjMzLCAKKyAgICA0NywgNzcsIDE3OCwgMjEsIDIxMiwgNzksIDE3OCwgMjEsIDExNiwgMTc4LCAyMSwgMTA5LCAxNzgsIDIxLCAxNjYsIDE3OCwgCisgICAgMjEsIDE2MywgMTc4LCAyMSwgMTgwLCAxNzgsIDIxLCAxODksIDE3OCwgMjEsIDE5OCwgMTc4LCAyMSwgMTk1LCAxNzgsIDIxLCAKKyAgICAyMDAsIDE3OCwgNTAsIDIxNywgMjAwLCAxNzgsIDUwLCAxMjIsIDI0MCwgMjAwLCAxNzgsIDUwLCAxMjIsIDIxNywgMTAwLCAKKyAgICAxNzgsIDI0OCwgOTIsIDUyLCAxNzgsIDIzMCwgMjA1LCA1MiwgMTc4LCAyMTMsIDM2LCA1MiwgMTc4LCAyNDgsIDM4LCA1MiwgCisgICAgMTc4LCAyNDksIDc5LCA1MiwgMTc4LCAyNTMsIDE1MywgNzgsIDUyLCAxNzgsIDIyMywgMjksIDUyLCAxNzgsIDUwLCA1MiwgCisgICAgMTM5LCA1LCAyNTAsIDE4NywgMTM5LCA1LCAyNTMsIDI0MiwgMTM5LCA1LCAyMTQsIDEyOCwgMTM5LCAxLCA2MSwgMTM5LCAxLCAKKyAgICAyNTQsIDIzMiwgMTM5LCAxLCA3MiwgMTM5LCAxLCAyMzYsIDI4LCAxMzksIDEsIDY5LCAxMzksIDEsIDIxNSwgOTIsIDEzOSwgCisgICAgMSwgMTYxLCAxNDksIDEzOSwgMSwgMTYxLCAxNTAsIDEzOSwgMSwgNzQsIDEzOSwgMSwgMjQ1LCAxNjUsIDEzOSwgMSwgMjU0LCAKKyAgICAxMDgsIDEzOSwgMSwgNzUsIDEzOSwgMSwgMjI3LCA0OSwgMTM5LCAxLCAyNTMsIDEwOCwgMTM5LCAxLCAxODEsIDEzOSwgMSwgCisgICAgMjM0LCAxMzgsIDEzOSwgMSwgMjQzLCAxMTAsIDEzOSwgMSwgMjQyLCAyMjUsIDEzOSwgMSwgMjI5LCAxNTksIDEzOSwgMSwgCisgICAgMjUwLCAyMTksIDEzOSwgMSwgMjUwLCA5MiwgMTM5LCAxLCAyMzUsIDEzOSwgMTM5LCAxLCAyMzUsIDExNSwgMTM5LCAxLCAKKyAgICAyMjgsIDIzLCAxMzksIDEsIDIxNiwgMTE1LCAxMzksIDEsIDIxNiwgMTA1LCAxMzksIDEsIDI0OCwgODYsIDEzOSwgMSwgCisgICAgMjQ4LCA3MCwgMTM5LCAxLCAyMjgsIDE5OCwgMTM5LCAxLCAyMTgsIDUyLCAxMzksIDEsIDIxNywgMTYxLCAxMzksIDEsIAorICAgIDI0OCwgMTY0LCAxMzksIDEsIDI0NywgMjMyLCAxMzksIDEsIDIwNSwgMTM5LCAxLCAxOTMsIDEzOSwgMSwgMjI2LCAyMywgCisgICAgMTM5LCAxLCAyNTIsIDEwNywgMTM5LCAxLCAyNTEsIDE5NSwgMTM5LCAxLCAxODgsIDEzOSwgMSwgMTg2LCAxMzksIDEsIAorICAgIDIwMywgMTM5LCAxLCAyMjMsIDgxLCAxMzksIDEsIDIzMywgMTU3LCAxMzksIDEsIDIzMiwgMjEzLCAxMzksIDEsIDIxNSwgMSwgCisgICAgMTM5LCAxLCAyMjEsIDI0LCAxMzksIDEsIDIxOSwgMTU3LCAxMzksIDEsIDIyMiwgMjAyLCAxMzksIDEsIDE1OSwgMTM5LCA1LCAKKyAgICAyNTMsIDkxLCAxMzksIDMwLCA1LCAyNTQsIDIzMiwgMTM5LCAzMCwgNSwgNzIsIDEzOSwgMzAsIDUsIDIzNiwgMjgsIDEzOSwgCisgICAgMzAsIDUsIDY5LCAxMzksIDMwLCA1LCAyMTUsIDkyLCAxMzksIDMwLCA1LCAxNjEsIDE0OSwgMTM5LCAzMCwgNSwgMTYxLCAKKyAgICAyMjMsIDgyLCAxMzksIDMwLCA1LCA3NCwgMTM5LCAzMCwgNSwgMjQ1LCAxNjUsIDEzOSwgMzAsIDUsIDI1NCwgMTA4LCAxMzksIAorICAgIDMwLCA1LCA3NSwgMTM5LCAzMCwgNSwgMjI3LCA0OSwgMTM5LCAzMCwgNSwgMjUzLCAxMDgsIDEzOSwgNSwgMjE0LCAxMzMsIAorICAgIDEzOSwgMjMzLCA0NywgNzcsIDEzOSwgMjU0LCAxMDksIDIzMywgNDcsIDc3LCAxMzksIDEsIDIxNiwgMTQxLCAxMzksIDEsIAorICAgIDI0NSwgMjQ5LCAxMzksIDEsIDE2MSwgMjIzLCA4MiwgMTM5LCAxLCAxNjEsIDIzMiwgMjE0LCAxMzksIDMwLCA1LCAxNjEsIAorICAgIDE1MCwgMTM5LCAzMCwgNSwgMTYxLCAyMzIsIDIxNCwgMTM5LCAyMSwgMjEyLCA3OSwgMTM5LCAyMSwgMTE2LCAxMzksIDIxLCAKKyAgICAxMDksIDEzOSwgMjEsIDE2NiwgMTM5LCAyMSwgMTYzLCAxMzksIDIxLCAxODAsIDEzOSwgMjEsIDE4OSwgMTM5LCAyMSwgCisgICAgMTk4LCAxMzksIDIxLCAxOTUsIDEzOSwgMjEsIDIwMCwgMTM5LCAyNDMsIDIyOCwgMjEsIDIxMiwgODAsIDMxLCAyMjcsIAorICAgIDEwMiwgMjI1LCAxMDMsIDY1LCAxNjMsIDEzOSwgMjQzLCAyMjgsIDIxLCAxMjIsIDMxLCAyMjcsIDEwMiwgMjI1LCAxMDMsIAorICAgIDY1LCAxNjMsIDEzOSwgMjQzLCAyMjgsIDIxLCAxMTcsIDMxLCAyMjcsIDEwMiwgMjI1LCAxMDMsIDY1LCAxNjMsIDEzOSwgCisgICAgMjQzLCAyMjgsIDIxLCAxMzMsIDMxLCAyMjcsIDEwMiwgMjI1LCAxMDMsIDY1LCAxNjMsIDEzOSwgMjQzLCAyMjgsIDIxLCAKKyAgICAxMjIsIDMxLCAyNDUsIDksIDIyNSwgMTAzLCA2NSwgMTYzLCAxMzksIDI0MywgMjI4LCAyMSwgMTE3LCAzMSwgMjQ1LCA5LCAKKyAgICAyMjUsIDEwMywgNjUsIDE2MywgMTM5LCAyNDMsIDIyOCwgMjEsIDEzMywgMzEsIDI0NSwgOSwgMjI1LCAxMDMsIDY1LCAxNjMsIAorICAgIDEzOSwgNSwgMjE2LCA0OSwgMTU1LCA1LCAyNTMsIDI0MiwgMTU1LCA1LCAyMTQsIDEyOCwgMTU1LCAxLCA2MSwgMTU1LCAxLCAKKyAgICAyNTQsIDIzMiwgMTU1LCAxLCA3MiwgMTU1LCAxLCAyMzYsIDI4LCAxNTUsIDEsIDY5LCAxNTUsIDEsIDIxNSwgOTIsIDE1NSwgCisgICAgMSwgMTYxLCAxNDksIDE1NSwgMSwgMTYxLCAxNTAsIDE1NSwgMSwgNzQsIDE1NSwgMSwgMjQ1LCAxNjUsIDE1NSwgMSwgMjU0LCAKKyAgICAxMDgsIDE1NSwgMSwgNzUsIDE1NSwgMSwgMjI3LCA0OSwgMTU1LCAxLCAyNTMsIDEwOCwgMTU1LCAxLCAxODEsIDE1NSwgMSwgCisgICAgMjM0LCAxMzgsIDE1NSwgMSwgMjQzLCAxMTAsIDE1NSwgMSwgMjQyLCAyMjUsIDE1NSwgMSwgMjI5LCAxNTksIDE1NSwgMSwgCisgICAgMjUwLCAyMTksIDE1NSwgMSwgMjUwLCA5MiwgMTU1LCAxLCAyMzUsIDEzOSwgMTU1LCAxLCAyMzUsIDExNSwgMTU1LCAxLCAKKyAgICAyMjgsIDIzLCAxNTUsIDEsIDIxNiwgMTE1LCAxNTUsIDEsIDIxNiwgMTA1LCAxNTUsIDEsIDI0OCwgODYsIDE1NSwgMSwgCisgICAgMjQ4LCA3MCwgMTU1LCAxLCAyMjgsIDE5OCwgMTU1LCAxLCAyMTgsIDUyLCAxNTUsIDEsIDIxNywgMTYxLCAxNTUsIDEsIAorICAgIDI0OCwgMTY0LCAxNTUsIDEsIDI0NywgMjMyLCAxNTUsIDEsIDIwNSwgMTU1LCAxLCAxOTMsIDE1NSwgMSwgMjI2LCAyMywgCisgICAgMTU1LCAxLCAyNTIsIDEwNywgMTU1LCAxLCAyNTEsIDE5NSwgMTU1LCAxLCAxODgsIDE1NSwgMSwgMTg2LCAxNTUsIDEsIAorICAgIDIwMywgMTU1LCAxLCAyMjMsIDgxLCAxNTUsIDEsIDIzMywgMTU3LCAxNTUsIDEsIDIzMiwgMjEzLCAxNTUsIDEsIDIxNSwgMSwgCisgICAgMTU1LCAxLCAyMjEsIDI0LCAxNTUsIDEsIDIxOSwgMTU3LCAxNTUsIDEsIDIyMiwgMjAyLCAxNTUsIDEsIDE1OSwgMTU1LCA1LCAKKyAgICAyMjgsIDYwLCAxNTUsIDUsIDI1MywgOTEsIDE1NSwgMzAsIDUsIDI1NCwgMjMyLCAxNTUsIDMwLCA1LCA3MiwgMTU1LCAzMCwgCisgICAgNSwgMjM2LCAyOCwgMTU1LCAzMCwgNSwgNjksIDE1NSwgMzAsIDUsIDIxNSwgOTIsIDE1NSwgMzAsIDUsIDE2MSwgMTQ5LCAKKyAgICAxNTUsIDMwLCA1LCAxNjEsIDIyMywgODIsIDE1NSwgMzAsIDUsIDc0LCAxNTUsIDMwLCA1LCAyNDUsIDE2NSwgMTU1LCAzMCwgCisgICAgNSwgMjU0LCAxMDgsIDE1NSwgMzAsIDUsIDc1LCAxNTUsIDMwLCA1LCAyMjcsIDQ5LCAxNTUsIDMwLCA1LCAyNTMsIDEwOCwgCisgICAgMTU1LCA1LCAyMTQsIDEzMywgMTU1LCAyMzMsIDQ3LCA3NywgMTU1LCAyNTQsIDEwOSwgMjMzLCA0NywgNzcsIDE1NSwgMSwgCisgICAgMjQ0LCAxNjQsIDE1NSwgMSwgMTYxLCAyMjMsIDgyLCAxNTUsIDEsIDE2MSwgMjMyLCAyMTQsIDE1NSwgMzAsIDUsIDE2MSwgCisgICAgMTUwLCAxNTUsIDMwLCA1LCAxNjEsIDIzMiwgMjE0LCAxNTUsIDIxLCAyMTIsIDc5LCAxNTUsIDIxLCAxMTYsIDE1NSwgMjEsIAorICAgIDEwOSwgMTU1LCAyMSwgMTY2LCAxNTUsIDIxLCAxNjMsIDE1NSwgMjEsIDE4MCwgMTU1LCAyMSwgMTg5LCAxNTUsIDIxLCAKKyAgICAxOTgsIDE1NSwgMjEsIDE5NSwgMTU1LCAyMSwgMjAwLCAxNTUsIDUsIDIzNSwgMTA0LCAxNTUsIDUsIDIxNSwgMTMyLCAxMzAsIAorICAgIDUsIDI1MywgMjQyLCAxMzAsIDUsIDIxNCwgMTI4LCAxMzAsIDEsIDYxLCAxMzAsIDEsIDI1NCwgMjMyLCAxMzAsIDEsIDcyLCAKKyAgICAxMzAsIDEsIDIzNiwgMjgsIDEzMCwgMSwgNjksIDEzMCwgMSwgMjE1LCA5MiwgMTMwLCAxLCAxNjEsIDE0OSwgMTMwLCAxLCAKKyAgICAxNjEsIDE1MCwgMTMwLCAxLCA3NCwgMTMwLCAxLCAyNDUsIDE2NSwgMTMwLCAxLCAyNTQsIDEwOCwgMTMwLCAxLCA3NSwgCisgICAgMTMwLCAxLCAyMjcsIDQ5LCAxMzAsIDEsIDI1MywgMTA4LCAxMzAsIDEsIDE4MSwgMTMwLCAxLCAyMzQsIDEzOCwgMTMwLCAxLCAKKyAgICAyNDMsIDExMCwgMTMwLCAxLCAyNDIsIDIyNSwgMTMwLCAxLCAyMjksIDE1OSwgMTMwLCAxLCAyNTAsIDIxOSwgMTMwLCAxLCAKKyAgICAyNTAsIDkyLCAxMzAsIDEsIDIzNSwgMTM5LCAxMzAsIDEsIDIzNSwgMTE1LCAxMzAsIDEsIDIyOCwgMjMsIDEzMCwgMSwgCisgICAgMjE2LCAxMTUsIDEzMCwgMSwgMjE2LCAxMDUsIDEzMCwgMSwgMjQ4LCA4NiwgMTMwLCAxLCAyNDgsIDcwLCAxMzAsIDEsIAorICAgIDIyOCwgMTk4LCAxMzAsIDEsIDIxOCwgNTIsIDEzMCwgMSwgMjE3LCAxNjEsIDEzMCwgMSwgMjQ4LCAxNjQsIDEzMCwgMSwgCisgICAgMjQ3LCAyMzIsIDEzMCwgMSwgMjA1LCAxMzAsIDEsIDIyOCwgMTg5LCAxMzAsIDEsIDE5MywgMTMwLCAxLCAyMjYsIDIzLCAKKyAgICAxMzAsIDEsIDI1MiwgMTA3LCAxMzAsIDEsIDI1MSwgMTk1LCAxMzAsIDEsIDE4OCwgMTMwLCAxLCAxODYsIDEzMCwgMSwgCisgICAgMjAzLCAxMzAsIDEsIDIyMywgODEsIDEzMCwgMSwgMjMzLCAxNTcsIDEzMCwgMSwgMjMyLCAyMTMsIDEzMCwgMSwgMjMyLCAKKyAgICAyMTIsIDEzMCwgMSwgMjE1LCAxLCAxMzAsIDEsIDIyMSwgMjQsIDEzMCwgMSwgMjE5LCAxNTcsIDEzMCwgMSwgMjIyLCAyMDIsIAorICAgIDEzMCwgMSwgMTU5LCAxMzAsIDEsIDIxNiwgODgsIDEzMCwgNSwgMjUzLCA5MSwgMTMwLCAzMCwgNSwgMjU0LCAyMzIsIDEzMCwgCisgICAgMzAsIDUsIDcyLCAxMzAsIDMwLCA1LCAyMzYsIDI4LCAxMzAsIDMwLCA1LCA2OSwgMTMwLCAzMCwgNSwgMjE1LCA5MiwgMTMwLCAKKyAgICAzMCwgNSwgMTYxLCAxNDksIDEzMCwgMzAsIDUsIDE2MSwgMjIzLCA4MiwgMTMwLCAzMCwgNSwgNzQsIDEzMCwgMzAsIDUsIAorICAgIDI0NSwgMTY1LCAxMzAsIDMwLCA1LCAyNTQsIDEwOCwgMTMwLCAzMCwgNSwgNzUsIDEzMCwgMzAsIDUsIDIyNywgNDksIDEzMCwgCisgICAgMzAsIDUsIDI1MywgMTA4LCAxMzAsIDUsIDIxNCwgMTMzLCAxMzAsIDEsIDYyLCAyMjMsIDIyNSwgMTMwLCAyNTMsIDEwOSwgCisgICAgMjMzLCA0NywgNzcsIDEzMCwgMSwgMTYxLCAyMjMsIDgyLCAxMzAsIDEsIDE2MSwgMjMyLCAyMTQsIDEzMCwgMzAsIDUsIAorICAgIDE2MSwgMTUwLCAxMzAsIDMwLCA1LCAxNjEsIDIzMiwgMjE0LCAxMzAsIDIxLCAyMTIsIDc5LCAxMzAsIDIxLCAxMTYsIDEzMCwgCisgICAgMjEsIDEwOSwgMTMwLCAyMSwgMTY2LCAxMzAsIDIxLCAxNjMsIDEzMCwgMjEsIDE4MCwgMTMwLCAyMSwgMTg5LCAxMzAsIDIxLCAKKyAgICAxOTgsIDEzMCwgMjEsIDE5NSwgMTMwLCAyMSwgMjAwLCAxMzAsIDUwLCAyMTcsIDIwMCwgMTMwLCA1MCwgMTIyLCAyNDAsIAorICAgIDIwMCwgMTMwLCA1MCwgMTIyLCAyMTcsIDEwMCwgMTMwLCAyNDMsIDIyOCwgMTIyLCAyMjQsIDE2NiwgMTMwLCAyNDMsIDIyOCwgCisgICAgMTIyLCAyNDIsIDksIDEzMCwgMjQzLCAyMjgsIDEzMywgMjI0LCAxNjQsIDEzMCwgMjQ4LCA5NiwgNzcsIDEzMCwgMSwgMjUwLCAKKyAgICAzNiwgMjI4LCAxOTksIDEzMCwgMSwgMjUwLCAzNiwgMjA0LCAxMzAsIDEsIDI1MCwgMzYsIDIyMywgODIsIDEzMCwgMSwgCisgICAgMjUwLCAzNiwgMTUwLCAxMzAsIDEsIDI1MCwgMzYsIDIzMiwgMjE0LCAxMzAsIDEsIDI1MCwgMzYsIDIzNSwgMjcsIDE3MiwgCisgICAgNSwgMjUzLCAyNDEsIDE3MiwgNSwgMjE0LCAxMjcsIDE3MiwgMSwgMjUzLCA4MSwgMTcyLCAxLCAyNTQsIDE4NywgMTcyLCAxLCAKKyAgICAyNTQsIDEyOCwgMTcyLCAxLCAyNTQsIDE0MywgMTcyLCAxLCAyMzUsIDE0OSwgMTcyLCAxLCAyMzYsIDI3LCAxNzIsIDEsIAorICAgIDIxNSwgODQsIDE3MiwgMSwgMjE1LCA4NiwgMTcyLCAxLCAyMzUsIDE3MSwgMTcyLCAxLCAyMzUsIDE3MiwgMTcyLCAxLCAKKyAgICAyMzYsIDEzLCAxNzIsIDEsIDIzNiwgMTUsIDE3MiwgMSwgMjQ0LCAyNDEsIDE3MiwgMSwgMjQ1LCAxNjEsIDE3MiwgMSwgCisgICAgMjU0LCA5NiwgMTcyLCAxLCAyMjYsIDIzMiwgMTcyLCAxLCAyMjcsIDQzLCAxNzIsIDEsIDI1MywgOTQsIDE3MiwgMSwgMjU0LCAKKyAgICA1NSwgMjM0LCAxOTMsIDE3MiwgMSwgMjMyLCAxNCwgMjM0LCAxOTMsIDE3MiwgMSwgMjU0LCA1NSwgMjQzLCA1OCwgMTcyLCAKKyAgICAxLCAyMzIsIDE0LCAyNDMsIDU4LCAxNzIsIDEsIDIzNCwgMjM0LCAyMzAsIDQwLCAxNzIsIDEsIDIyMiwgMTUyLCAyNDMsIAorICAgIDU4LCAxNzIsIDEsIDI1NCwgNTUsIDI1MCwgMTQ5LCAxNzIsIDEsIDIzMiwgMTQsIDI1MCwgMTQ5LCAxNzIsIDEsIDI1NCwgCisgICAgNTUsIDIzNSwgMTI4LCAxNzIsIDEsIDIzMiwgMTQsIDIzNSwgMTI4LCAxNzIsIDEsIDIxOCwgNDYsIDIzMCwgNDAsIDE3MiwgCisgICAgMSwgMjE4LCA0NiwgMjIyLCAxNTEsIDIzMCwgNDEsIDE3MiwgMSwgMjIyLCAxNTIsIDIzNSwgMTI4LCAxNzIsIDEsIDI1NCwgCisgICAgNTUsIDIxNiwgMTEzLCAxNzIsIDEsIDIzMiwgMTQsIDIxNiwgMTEzLCAxNzIsIDEsIDI1NCwgNTUsIDI0OCwgNzcsIDE3MiwgCisgICAgMSwgMjMyLCAxNCwgMjQ4LCA3NywgMTcyLCAxLCAyMzAsIDEyNCwgMjMwLCAyLCAxNzIsIDEsIDIyMiwgMTUyLCAyNDgsIDc3LCAKKyAgICAxNzIsIDEsIDI1NCwgNTUsIDIxNywgMjM3LCAxNzIsIDEsIDIzMiwgMTQsIDIxNywgMjM3LCAxNzIsIDEsIDI1NCwgNTUsIAorICAgIDI0OCwgOTAsIDE3MiwgMSwgMjMyLCAxNCwgMjQ4LCA5MCwgMTcyLCAxLCAyNDgsIDExOSwgMjMwLCAyLCAxNzIsIDEsIDIyMiwgCisgICAgMTUyLCAyNDgsIDkwLCAxNzIsIDEsIDI1NCwgNTUsIDIyNiwgMTAyLCAxNzIsIDEsIDIzMiwgMTQsIDIyNiwgMTAyLCAxNzIsIAorICAgIDEsIDI1NCwgNTUsIDI1MiwgMzIsIDE3MiwgMSwgMjMyLCAxNCwgMjUyLCAzMiwgMTcyLCAxLCAyMzEsIDE5NSwgMTcyLCAxLCAKKyAgICAyNTQsIDQwLCAyNTIsIDMyLCAxNzIsIDEsIDIxMywgNDIsIDE3MiwgMSwgMjI0LCAyNiwgMTcyLCAxLCAyNDgsIDExOSwgCisgICAgMjMzLCA5MSwgMTcyLCAxLCAyMTQsIDIzNCwgMTcyLCAxLCAyMTgsIDQ2LCAyMjIsIDEyOCwgMTcyLCAxLCAyMzAsIDEyNCwgCisgICAgMjIyLCAxMjgsIDE3MiwgMSwgMjQ4LCAxMTksIDIyMiwgMTI4LCAxNzIsIDEsIDI0MSwgMjI2LCAxNzIsIDEsIDIzMCwgMTI0LCAKKyAgICAyMzMsIDkxLCAxNzIsIDEsIDI0NCwgMTI1LCAxNzIsIDUsIDI1NCwgODUsIDE3MiwgMzAsIDUsIDI1NCwgMTM4LCAxNzIsIAorICAgIDMwLCA1LCAyMzQsIDE2MSwgMjU0LCAxNDUsIDE3MiwgMzAsIDUsIDI0NywgMTgwLCAyNTQsIDE0NSwgMTcyLCAzMCwgNSwgCisgICAgMjM0LCAxNjEsIDIzNSwgMTY4LCAxNzIsIDMwLCA1LCAyNDcsIDE4MCwgMjM1LCAxNjgsIDE3MiwgMzAsIDUsIDIzNCwgMTYxLCAKKyAgICAyMjYsIDIxMiwgMTcyLCAzMCwgNSwgMjQ3LCAxODAsIDIyNiwgMjEyLCAxNzIsIDMwLCA1LCAyNDMsIDk5LCAxNzIsIDMwLCAKKyAgICA1LCAyMzQsIDI0LCAxNzIsIDMwLCA1LCAyNDcsIDE4MCwgMjM0LCAyNCwgMTcyLCAzMCwgNSwgMjM0LCAyNiwgMjQ4LCAxOCwgCisgICAgMTcyLCAzMCwgNSwgMjM0LCAyNSwgMjQyLCAyOCwgMjU0LCAxMzgsIDE3MiwgMzAsIDUsIDIzNCwgMjUsIDI0MiwgMjgsIAorICAgIDI0NywgMTgwLCAyNTQsIDEzOCwgMTcyLCAzMCwgNSwgMjM0LCAyNSwgMjQyLCAyOCwgMjQzLCA1NywgMTcyLCAzMCwgNSwgCisgICAgMjQzLCA1NywgMTcyLCAzMCwgNSwgMjQ3LCAxODAsIDI0MywgOTksIDE3MiwgMzAsIDUsIDI0NywgMTgwLCAyNDMsIDU3LCAKKyAgICAxNzIsIDIyNSwgMjcsIDIzMywgMjI4LCAxNTQsIDEzNywgMjM0LCAzOCwgMjM0LCAyNTAsIDE1NCwgMTM3LCAyMzQsIDExNCwgCisgICAgMjM0LCAxMzQsIDE1NCwgMTM3LCAyMzQsIDExNCwgMjM0LCAxMDcsIDE1NCwgMTM3LCAyMzQsIDExNCwgMjM0LCAxMDQsIAorICAgIDE1NCwgMTM3LCAyMzQsIDExNCwgMjM0LCAxMTEsIDE1NCwgMTM3LCAyMzQsIDExNCwgMjI0LCA0NiwgMTU0LCAxMzcsIDIyOSwgCisgICAgOTEsIDIyOSwgNzgsIDE1NCwgMTM3LCAyNTAsIDI0LCAyNTAsIDgzLCAxNTQsIDEzNywgMjUwLCAyNCwgMjUwLCAzMiwgMTU0LCAKKyAgICAxMzcsIDI1MCwgMjQsIDI1MCwgODIsIDE1NCwgMTM3LCAyMTksIDI0MywgMjE5LCAyNDIsIDE1NCwgMTM3LCAyNTAsIDI0LCAKKyAgICAyNTAsIDIwLCAxNTQsIDEzNywgMjEyLCAyMzYsIDIxMiwgMjQzLCAxNTQsIDEzNywgMjQ3LCAxMDAsIDI1MCwgODksIDE1NCwgCisgICAgMTM3LCAyMTEsIDIxMSwgMjI2LCAxMTEsIDE1NCwgMTM3LCAyMTcsIDExMCwgMjE3LCAxNTMsIDE1NCwgMTM3LCAyMTcsIAorICAgIDExMCwgMjMwLCAyMSwgMTU0LCAxMzcsIDIxNywgMTEwLCAyMjUsIDI0MywgMTU0LCAxMzcsIDIyOCwgMTg2LCAyMjksIDE4MCwgCisgICAgMTU0LCAxMzcsIDI0NywgMTAwLCAyNDgsIDE5LCAxNTQsIDEzNywgMjExLCAyMTEsIDIxOCwgNiwgMTU0LCAxMzcsIDIxNywgCisgICAgMTEwLCAyMTcsIDg1LCAxNTQsIDEzNywgMjE3LCAxMTAsIDIxNywgMTU3LCAxNTQsIDEzNywgMjE3LCAxMTAsIDIxNywgMTA3LCAKKyAgICAxNTQsIDEzNywgMjI4LCAxODYsIDIyOCwgOTIsIDE1NCwgMTM3LCAyNTEsIDEyOSwgMjUyLCA4MywgMTU0LCAxMzcsIDIyNSwgCisgICAgMTUxLCAyMjUsIDE3NCwgMTU0LCAxMzcsIDIyNSwgMjU0LCAyMjUsIDI0NSwgMTU0LCAxMzcsIDI0NCwgMTMsIDI0NCwgMTY0LCAKKyAgICAxNTQsIDEzNywgMjI1LCAyNTQsIDIyNiwgMTcsIDE1NCwgMTM3LCAyNDQsIDEzLCAyNDQsIDE0MSwgMTU0LCAxMzcsIDIyNSwgCisgICAgMjU0LCAyMjIsIDE2MiwgMTU0LCAxMzcsIDIzMCwgMjMyLCAxODgsIDE1NCwgMTM3LCAyMTIsIDIzNiwgMjEzLCA2OCwgMTU0LCAKKyAgICAxMzcsIDIyMywgMTEzLCAyMjMsIDUwLCAxNTQsIDEzNywgMjIzLCA1MSwgMTU0LCAxMzcsIDIzMiwgMjA5LCAyMzIsIDIzNSwgCisgICAgMTU0LCAxMzcsIDIzMiwgMTU2LCAxNTQsIDEzNywgMjEzLCAyMTUsIDIxNCwgNDUsIDE1NCwgMTM3LCAyMTksIDI0MywgMjIyLCAKKyAgICAxNzcsIDE1NCwgMTM3LCAyMTksIDI0MywgMjIzLCAyNSwgMTU0LCAxMzcsIDIxOSwgMjQzLCAyMTksIDI2LCAxNTQsIDEzNywgCisgICAgMjQxLCA1NSwgMjQxLCAxNDUsIDE1NCwgMTM3LCAyMzIsIDIwOSwgMjUwLCA1LCAxNTQsIDEzNywgMTU3LCAyNTQsIDI0LCAKKyAgICAxNTQsIDEzNywgMjQxLCA1NSwgMjI4LCAxODEsIDE1NCwgMTM3LCAyMjYsIDE5NSwgMTU0LCAxMzcsIDIyMiwgMTQ2LCA2MSwgCisgICAgMTU0LCAxMzcsIDIzMiwgOSwgMjQyLCAwLCAxNTQsIDEzNywgMjIyLCAxNDYsIDI1NCwgMjMyLCAxNTQsIDEzNywgMjIyLCAKKyAgICAxNDYsIDI1NCwgNDUsIDE1NCwgMTM3LCAyMjIsIDE0NiwgNzIsIDE1NCwgMTM3LCAyMjIsIDE0NiwgMjM2LCAyOCwgMTU0LCAKKyAgICAxMzcsIDIyMiwgMTQ2LCAyMTUsIDE4MywgMTU0LCAxMzcsIDIyMiwgMTQ2LCAyMTUsIDE4MSwgMTU0LCAxMzcsIDIyMiwgCisgICAgMTQ2LCA2OSwgMTU0LCAxMzcsIDIyMiwgMTQ2LCAyMTUsIDkyLCAxNTQsIDEzNywgMjI2LCAwLCAxNTQsIDI0OSwgMzksIDE2LCAKKyAgICAyNTIsIDg0LCAxNTQsIDEzNywgMjIyLCAxNDYsIDc0LCAxNTQsIDEzNywgMjIyLCAxNDYsIDI1NCwgMTQ4LCAxNTQsIDEzNywgCisgICAgMjIyLCAxNDYsIDc1LCAxNTQsIDEzNywgMjIyLCAxNDYsIDI1NCwgMTA5LCAyMzIsIDQsIDE1NCwgMTM3LCAyMjIsIDE0NiwgCisgICAgMjU0LCAxMDksIDIzMiwgNSwgMTU0LCAxMzcsIDIzMywgMTMwLCAxNTQsIDEzNywgMjMyLCAxLCAxNTQsIDEzNywgMjMyLCAyLCAKKyAgICAxNTQsIDEzNywgMjMyLCA5LCAyNDUsIDEzNywgMTU0LCAxMzcsIDIzMiwgOSwgMjE3LCAxMDksIDE1NCwgMTM3LCAyMzIsIDksIAorICAgIDIxNiwgMTg2LCAxNTQsIDEzNywgMjMyLCA5LCAyNTAsIDcxLCAxNTQsIDEzNywgMjE3LCAxNTEsIDE1NCwgMTM3LCAyMjksIAorICAgIDM2LCAxNTQsIDEzNywgMjEzLCA2MiwgMTU0LCAxMzcsIDI0NCwgNCwgMTU0LCAyMSwgMjEyLCA3OSwgMTU0LCAyMSwgMTE2LCAKKyAgICAxNTQsIDIxLCAxMDksIDE1NCwgMjEsIDE2NiwgMTU0LCAyMSwgMTYzLCAxNTQsIDIxLCAxODAsIDE1NCwgMjEsIDE4OSwgCisgICAgMTU0LCAyMSwgMTk4LCAxNTQsIDIxLCAxOTUsIDE1NCwgMjEsIDIwMCwgMTU0LCAxMzcsIDI1NCwgMjAsIDE1NCwgMTM3LCAKKyAgICAyMzQsIDExMiwgMjMzLCAxMTIsIDEsIDIzNCwgMzcsIDIzMywgMTEyLCAxLCAyMzQsIDExNCwgMjE4LCAyMzUsIDIzMywgCisgICAgMTEyLCAxLCAyMzQsIDExNCwgMjE4LCAxMywgMjMzLCAxMTIsIDEsIDIyOSwgOTAsIDIzMywgMTEyLCAxLCAyNDksIDE3NSwgCisgICAgMjMzLCAxMTIsIDEsIDIxOSwgMjQzLCAyMTgsIDEzLCAyMzMsIDExMiwgMSwgMjI3LCAyNTMsIDIzMywgMTEyLCAxLCAyNDcsIAorICAgIDk5LCAyMzMsIDExMiwgMSwgMTA4LCAyMzMsIDExMiwgMSwgMjE3LCAxMTAsIDIxOCwgMjM1LCAyMzMsIDExMiwgMSwgMjE3LCAKKyAgICAxMTAsIDIxOCwgMTMsIDIzMywgMTEyLCAxLCAyMjgsIDE4NSwgMjMzLCAxMTIsIDEsIDI1MSwgMTI4LCAyMzMsIDExMiwgMSwgCisgICAgMjI1LCAxNTAsIDIzMywgMTEyLCAxLCAyMjUsIDI1NCwgMjE4LCAyMzUsIDIzMywgMTEyLCAxLCAyNDQsIDEzLCAyMTgsIDEzLCAKKyAgICAyMzMsIDExMiwgMSwgMjI1LCAyNTQsIDIxOCwgMTMsIDIzMywgMTEyLCAxLCAyNDQsIDEzLCAyMTgsIDIzNSwgMjMzLCAxMTIsIAorICAgIDEsIDIzMCwgMjMxLCAyMzMsIDExMiwgMSwgMjEyLCAyMzUsIDIzMywgMTEyLCAxLCAyMzIsIDIwOSwgMjMyLCAyMzUsIDIzMywgCisgICAgMTEyLCAxLCAyMzIsIDIwOSwgMjMyLCAxNzYsIDIzMywgMTEyLCAxLCAyMTMsIDIxNCwgMjMzLCAxMTIsIDEsIDIxOSwgMjQzLCAKKyAgICAyMTgsIDIzNSwgMjMzLCAxMTIsIDEsIDI0MSwgNTUsIDIxOCwgMjM1LCAyMzMsIDExMiwgMSwgNzUsIDIzMywgMTEyLCAxLCAKKyAgICAyNDEsIDU1LCAyMTgsIDEzLCAyMzMsIDExMiwgMjQ1LCAxMjAsIDIzMywgMTEyLCAzMCwgNSwgNjEsIDIzMywgMTEyLCAzMCwgCisgICAgNSwgMjMyLCA5LCAyMzQsIDIzOSwgMjMzLCAxMTIsIDMwLCA1LCAyNTQsIDIzMiwgMjMzLCAxMTIsIDMwLCA1LCAyNTQsIDQ1LCAKKyAgICAyMzMsIDExMiwgMzAsIDUsIDcyLCAyMzMsIDExMiwgMzAsIDUsIDIzNiwgMjgsIDIzMywgMTEyLCAzMCwgNSwgMjEzLCAxMDUsIAorICAgIDIzMywgMTEyLCAzMCwgNSwgMjEyLCAxNjEsIDIzMywgMTEyLCAzMCwgNSwgNjksIDIzMywgMTEyLCAzMCwgNSwgMjE1LCA5MiwgCisgICAgMjMzLCAxMTIsIDMwLCA1LCAyMzIsIDksIDIzNCwgMjIsIDIzMywgMTEyLCAyMjEsIDY1LCA1LCAyMzIsIDIwOCwgMjMzLCAKKyAgICAxMTIsIDIyMSwgNjUsIDUsIDIyNywgMjUzLCAyMzMsIDExMiwgMzAsIDUsIDc0LCAyMzMsIDExMiwgMzAsIDUsIDI0NSwgCisgICAgMTUyLCAyMzMsIDExMiwgMzAsIDUsIDc1LCAyMzMsIDExMiwgMzAsIDUsIDI1MywgODMsIDIzMywgMTEyLCAzMCwgNSwgMjU0LCAKKyAgICAxMDgsIDIzMywgMTEyLCAyMzQsIDM4LCAyMzMsIDE1NywgMjMzLCAxMTIsIDE2MCwgMjMyLCA5LCAyNDUsIDEzNywgMjMzLCAKKyAgICAxMTIsIDE2MCwgMjMyLCA5LCAyMTcsIDEwOSwgMjMzLCAxMTIsIDE2MCwgMjMyLCA5LCAyMTcsIDcxLCAyMzMsIDExMiwgCisgICAgMTYwLCAyMzIsIDksIDI1MCwgMTU1LCAyMzMsIDExMiwgMjUwLCAxOTIsIDc3LCAyMzMsIDExMiwgMjI5LCA0NSwgMjMzLCAKKyAgICAxMTIsIDIxLCAyMTIsIDc5LCAyMzMsIDExMiwgMjEsIDExNiwgMjMzLCAxMTIsIDIxLCAxMDksIDIzMywgMTEyLCAyMSwgCisgICAgMTY2LCAyMzMsIDExMiwgMjEsIDE2MywgMjMzLCAxMTIsIDIxLCAxODAsIDIzMywgMTEyLCAyMSwgMTg5LCAyMzMsIDExMiwgCisgICAgMjEsIDE5OCwgMjMzLCAxMTIsIDIxLCAxOTUsIDIzMywgMTEyLCAyMSwgMjAwLCAyMzMsIDExMiwgMjQxLCA1NSwgMjI4LCAKKyAgICAxODUsIDIzMywgMTEyLCAyNDEsIDU1LCAyMzAsIDIzMSwgNjAsIDQsIDIyNywgNzAsIDYwLCAxNTIsIDI0MiwgOTQsIDIxMiwgCisgICAgMjQ3LCAyMzEsIDU5LCAyMTYsIDE0NywgNjEsIDYwLCAxNTIsIDI0MiwgOTQsIDIxMiwgMjQ3LCAyMzEsIDU5LCAyNTUsIDYyLCAKKyAgICAyMjMsIDExNywgMjUxLCAyNTMsIDE4OCwgNjAsIDE1MiwgMjQyLCA5NCwgMjEyLCAyNDcsIDIzMSwgNTksIDI1NSwgNjIsIAorICAgIDI0MiwgOTQsIDIxNiwgMTMxLCAxODgsIDYwLCAxNTIsIDcwLCAyMTIsIDI0NywgMjMxLCA1OSwgMjMxLCAxNTgsIDE4OCwgCisgICAgNjAsIDE1MiwgMjQ5LCAxODksIDIxMiwgMjQ3LCAyMzEsIDU5LCAyMjEsIDMwLCAxODgsIDYwLCAxNTIsIDI1MCwgMTcxLCAKKyAgICAyMTIsIDI0NywgMjMxLCA1OSwgMjI1LCAyNDQsIDIyMSwgMTgsIDE4OCwgNjAsIDE1MiwgMjEyLCAyNDcsIDIzMSwgNTksIAorICAgIDIxNiwgMTMxLCAyMjEsIDE4LCAxODgsIDYwLCAxNTIsIDIyMiwgMTI2LCAyMjEsIDE3LCA2MCwgMTUyLCAyNTEsIDU3LCAKKyAgICAyMTIsIDI0NywgMjMxLCA1OCwgNjAsIDE1MiwgMjUxLCAxNDYsIDIyMCwgMTgzLCAyMTIsIDI0NywgMjMxLCA1OCwgNjAsIAorICAgIDE1MiwgMjM1LCAxOTQsIDIxNiwgMTMwLCA2MCwgMTUyLCAyNDgsIDEyLCAyMTYsIDEzMSwgMjUxLCA1NiwgNjAsIDE1MiwgCisgICAgMjIxLCAxNywgNjAsIDE1MiwgMjI4LCAyLCAyMjEsIDE3LCA2MCwgMTUyLCAyMTYsIDEzMSwgMjIxLCAxNywgNjAsIDE1MiwgCisgICAgMjI4LCAyLCAyMTYsIDEzMSwgMjIxLCAxNywgNjAsIDE1MiwgMjIzLCAxMzMsIDI1MCwgNTksIDIxOSwgMTY4LCAyMjEsIDE3LCAKKyAgICA2MCwgMTUyLCAyMjMsIDE5NSwgMjQyLCAxMjIsIDIyMSwgMTcsIDYwLCAxNTIsIDI1MCwgMTcxLCAyNTUsIDY2LCAyMjMsIAorICAgIDU1LCAyMzEsIDE1NywgMTg0LCAyNTAsIDE5NSwgNjAsIDE1MiwgMjQyLCA5NCwgMjE2LCAxMzAsIDYwLCAyMzIsIDE5NywgNSwgCisgICAgMjUwLCA5MCwgMjIzLCA1NCwgNjAsIDIzMiwgMTk3LCA1LCAyMzMsIDIzLCAyMjMsIDU0LCA2MCwgMjUzLCAxMjgsIDUsIAorICAgIDIyMSwgMjcsIDI0MywgNDEsIDI1NSwgNjcsIDIyMywgNTQsIDYwLCAyNTMsIDEyOCwgNSwgMjU1LCA2NCwgMTkzLCA2MCwgCisgICAgMjUzLCAxMjgsIDUsIDIyMiwgMTAxLCAyMTYsIDEyNiwgNjAsIDUsIDIyNCwgMjMsIDI0NywgMTExLCAyNDMsIDQwLCA2MCwgCisgICAgNSwgMjI0LCAyMywgMjQ3LCAxMTEsIDI0MiwgMTUyLCA2MCwgNSwgMjI0LCAyMywgMjQ3LCAxMTEsIDI0MiwgOTUsIDYwLCA1LCAKKyAgICAyMjQsIDIzLCAyMzAsIDM3LCAyNDMsIDQwLCA2MCwgNSwgMjI0LCAyMywgMjMwLCAzNywgMjQyLCAxNTIsIDYwLCA1LCAyMjQsIAorICAgIDIzLCAyNDcsIDExMSwgMjI0LCAyMywgMjMwLCAzNiwgNjAsIDIxLCAyMTIsIDc5LCA2MCwgMjEsIDExNiwgNjAsIDIxLCAKKyAgICAxMDksIDYwLCAyMSwgMTY2LCA2MCwgMjEsIDE2MywgNjAsIDIxLCAxODAsIDYwLCAyMSwgMTg5LCA2MCwgMjEsIDE5OCwgNjAsIAorICAgIDIxLCAxOTUsIDYwLCAyMSwgMjAwLCA2MCwgMjEsIDE1MSwgMTE2LCA2MCwgMjEsIDE1MSwgMTA5LCA2MCwgMjEsIDE1MSwgCisgICAgMTY2LCA2MCwgMjEsIDE1MSwgMTYzLCA2MCwgMjEsIDE1MSwgMTgwLCA2MCwgMjEsIDE1MSwgMTg5LCA2MCwgMjEsIDE1MSwgCisgICAgMTk4LCA2MCwgMjEsIDE1MSwgMTk1LCA2MCwgMjEsIDE1MSwgMjAwLCA2MCwgMjEsIDE1MSwgMjEyLCA3OSwgNjAsIDE1MiwgCisgICAgMjUxLCA1OSwgMjIzLCA1NCwgNjAsIDE1MiwgMjI5LCAxNTEsIDI1MCwgMjU0LCAyMjgsIDExLCAyMTIsIDE4LCA2MCwgMTUyLCAKKyAgICAyNTAsIDE3MSwgMjU1LCA2NiwgMjIzLCA1NSwgMjUwLCAyNTUsIDIzMSwgMTUsIDI1MCwgMTk1LCA2MCwgMTUyLCAyMjksIAorICAgIDE1MSwgMjUwLCAyNTQsIDIyMSwgMjgsIDIyMywgNTQsIDYwLCAxNTIsIDI1MCwgNjgsIDIzMSwgNTgsIDYwLCAxNTIsIDIxNiwgCisgICAgMTQyLCAyNTUsIDYzLCA2MCwgMTUyLCAyNDIsIDgxLCAyMjMsIDU1LCAyNDIsIDQ0LCA2MCwgMTUyLCAyNDIsIDgxLCAyMjMsIAorICAgIDU1LCAyNDIsIDUwLCA2MCwgMTUyLCAyNTQsIDI1LCAyMzQsIDEyOSwgMjQyLCA0NCwgNjAsIDE1MiwgMjU0LCAyNSwgMjM0LCAKKyAgICAxMjksIDI0MiwgNTAsIDYwLCA1LCAyMTMsIDU1LCAyMTYsIDEyOSwgNjAsIDUsIDIzMSwgMjMwLCAyMTYsIDEyOSwgNjAsIDEsIAorICAgIDE4MSwgNjAsIDEsIDIzNCwgMTM4LCA2MCwgMSwgMjQzLCAxMTAsIDYwLCAxLCAyNDIsIDIyNSwgNjAsIDEsIDIyOSwgMTU5LCAKKyAgICA2MCwgMSwgMjUwLCAyMTksIDYwLCAxLCAyNTAsIDkyLCA2MCwgMSwgMjM1LCAxMzksIDYwLCAxLCAyMjgsIDIzLCA2MCwgMSwgCisgICAgMjE2LCAxMTUsIDYwLCAxLCAyMTYsIDEwNSwgNjAsIDEsIDI0OCwgODYsIDYwLCAxLCAyNDgsIDcwLCA2MCwgMSwgMjI4LCAKKyAgICAxOTgsIDYwLCAxLCAyMTgsIDUyLCA2MCwgMSwgMjE3LCAxNjEsIDYwLCAxLCAyNDgsIDE2NCwgNjAsIDEsIDI0NywgMjMyLCAKKyAgICA2MCwgMSwgMjA1LCA2MCwgMSwgMTkzLCA2MCwgMSwgMjI2LCAyMywgNjAsIDEsIDI1MiwgMTA3LCA2MCwgMSwgMjUxLCAxOTUsIAorICAgIDYwLCAxLCAxODgsIDYwLCAxLCAyMTYsIDE0MSwgNjAsIDEsIDIxNiwgMTMzLCA2MCwgMSwgMjQ1LCAyNDksIDYwLCAxLCAKKyAgICAyNDUsIDI0NCwgNjAsIDEsIDIxNCwgNDksIDYwLCAxLCAyMTIsIDc1LCA2MCwgMSwgMjEyLCAxMDksIDYwLCAxLCAyNTUsIAorICAgIDY5LCA2MCwgMSwgMTg2LCA2MCwgMSwgMjAzLCA2MCwgMSwgMjMzLCAxNTcsIDYwLCAxLCAyMjEsIDI0LCA2MCwgMSwgMjE5LCAKKyAgICAxNTcsIDYwLCAxLCAyMjIsIDIwMiwgNjAsIDEsIDE1OSwgNjAsIDEsIDYxLCA2MCwgMSwgMjMzLCAyNDEsIDYwLCAxLCAyNDQsIAorICAgIDQ2LCAyMDMsIDYwLCAxLCAyMzQsIDU1LCA2MCwgMSwgMjIzLCA4MSwgNjAsIDMwLCA1LCAyNTQsIDIzMiwgNjAsIDMwLCA1LCAKKyAgICA3MiwgNjAsIDMwLCA1LCAyMzYsIDI4LCA2MCwgMzAsIDUsIDY5LCA2MCwgMzAsIDUsIDIxNSwgOTIsIDYwLCAzMCwgNSwgCisgICAgMTYxLCAxNDksIDYwLCAzMCwgNSwgMTYxLCAyMjMsIDgyLCA2MCwgMzAsIDUsIDE2MSwgMTUwLCA2MCwgMzAsIDUsIDE2MSwgCisgICAgMjMyLCAyMTQsIDYwLCAzMCwgNSwgNzQsIDYwLCAzMCwgNSwgMjQ1LCAxNjUsIDYwLCAzMCwgNSwgNzUsIDYwLCAzMCwgNSwgCisgICAgMjI3LCA0OSwgNjAsIDUsIDIyMywgMTE4LCAyMTksIDI4LCAyMjksIDE2MCwgMjIzLCAxMTIsIDYwLCA1LCAyMjMsIDExNywgCisgICAgMjUxLCAyNTIsIDYwLCAzMCwgNSwgMjIzLCAyMDIsIDcyLCA2MCwgMzAsIDUsIDIyMywgMjAyLCAyMzYsIDI4LCA2MCwgNSwgCisgICAgMjI4LCAxMSwgMjEyLCAxOSwgMjMwLCA0NCwgMjQ4LCAxNjQsIDYwLCA1LCAyMTksIDI1NSwgMjMzLCA4NCwgNjAsIDE1MiwgCisgICAgMjQyLCAxMSwgNjAsIDE1MiwgMjI2LCAxODQsIDYwLCA1LCAyMzMsIDg3LCAyMjMsIDU0LCA2MCwgNSwgMjEzLCA1OSwgMjIzLCAKKyAgICA1NCwgNjAsIDUsIDIzMywgODgsIDIxNiwgMTQyLCAyNTAsIDE5NSwgNjAsIDUsIDIzMSwgMTU5LCAyNTAsIDE5NSwgNjAsIDUsIAorICAgIDI0MiwgOTcsIDI1MCwgMTk2LCAyMjMsIDE5MywgNjAsIDUsIDI0MiwgOTcsIDIzMSwgMTUwLCAyMjMsIDE5MywgNjAsIDUsIAorICAgIDIzNSwgMTkxLCAyMzEsIDE1OSwgMjUwLCAxOTUsIDYwLCAyMTksIDE4LCA1LCAyMzMsIDg4LCAyMTYsIDE0MiwgMjUwLCAKKyAgICAxOTUsIDYwLCAyMTksIDE4LCA1LCAyMzEsIDE1OSwgMjUwLCAxOTUsIDYwLCAyMTksIDE4LCA1LCAyMzUsIDE5MSwgMjMxLCAKKyAgICAxNTksIDI1MCwgMTk1LCA2MCwgMjE5LCAxOCwgMSwgMTgxLCA2MCwgMjE5LCAxOCwgMSwgMjM0LCAxMzgsIDYwLCAyMTksIAorICAgIDE4LCAxLCAyNDMsIDExMCwgNjAsIDIxOSwgMTgsIDEsIDI0MiwgMjI1LCA2MCwgMjE5LCAxOCwgMSwgMjI5LCAxNTksIDYwLCAKKyAgICAyMTksIDE4LCAxLCAyNTAsIDIxOSwgNjAsIDIxOSwgMTgsIDEsIDI1MCwgOTIsIDYwLCAyMTksIDE4LCAxLCAyMzUsIDEzOSwgCisgICAgNjAsIDIxOSwgMTgsIDEsIDIyOCwgMjMsIDYwLCAyMTksIDE4LCAxLCAyMTYsIDExNSwgNjAsIDIxOSwgMTgsIDEsIDIxNiwgCisgICAgMTA1LCA2MCwgMjE5LCAxOCwgMSwgMjQ4LCA4NiwgNjAsIDIxOSwgMTgsIDEsIDI0OCwgNzAsIDYwLCAyMTksIDE4LCAxLCAKKyAgICAyMjgsIDE5OCwgNjAsIDIxOSwgMTgsIDEsIDIxOCwgNTIsIDYwLCAyMTksIDE4LCAxLCAyMTcsIDE2MSwgNjAsIDIxOSwgMTgsIAorICAgIDEsIDI0OCwgMTY0LCA2MCwgMjE5LCAxOCwgMSwgMjQ3LCAyMzIsIDYwLCAyMTksIDE4LCAxLCAyMDUsIDYwLCAyMTksIDE4LCAKKyAgICAxLCAxOTMsIDYwLCAyMTksIDE4LCAxLCAyMjYsIDIzLCA2MCwgMjE5LCAxOCwgMSwgMjUyLCAxMDcsIDYwLCAyMTksIDE4LCAKKyAgICAxLCAyNTEsIDE5NSwgNjAsIDIxOSwgMTgsIDEsIDE4OCwgNjAsIDIxOSwgMTgsIDEsIDIxNiwgMTQxLCA2MCwgMjE5LCAxOCwgCisgICAgMSwgMjE2LCAxMzMsIDYwLCAyMTksIDE4LCAxLCAyNDUsIDI0OSwgNjAsIDIxOSwgMTgsIDEsIDI0NSwgMjQ0LCA2MCwgMjE5LCAKKyAgICAxOCwgMSwgMjE0LCA0OSwgNjAsIDIxOSwgMTgsIDEsIDIxMiwgNzUsIDYwLCAyMTksIDE4LCAxLCAyMTIsIDEwOSwgNjAsIAorICAgIDIxOSwgMTgsIDEsIDI1NSwgNjksIDYwLCAyMTksIDE4LCAxLCAxODYsIDYwLCAyMTksIDE4LCAxLCAyMDMsIDYwLCAyMTksIAorICAgIDE4LCAxLCAyMzMsIDE1NywgNjAsIDIxOSwgMTgsIDEsIDIyMSwgMjQsIDYwLCAyMTksIDE4LCAxLCAyMTksIDE1NywgNjAsIAorICAgIDIxOSwgMTgsIDEsIDIyMiwgMjAyLCA2MCwgMjE5LCAxOCwgMSwgMTU5LCA2MCwgMjE5LCAxOCwgMSwgNjEsIDYwLCAyMTksIAorICAgIDE4LCAxLCAyMzMsIDI0MSwgNjAsIDIxOSwgMTgsIDEsIDI0NCwgNDYsIDIxNCwgNDksIDYwLCAyMTksIDE4LCAxLCAyNDQsIAorICAgIDQ2LCAxODYsIDYwLCAyMTksIDE4LCAxLCAyNDQsIDQ2LCAyMDMsIDYwLCAyMzMsIDIzOSwgMjIzLCA1MiwgMjM0LCAxMzgsIAorICAgIDYwLCAyMzMsIDIzOSwgMjIzLCA1MiwgMjM0LCAxMzksIDI1MCwgMjU1LCAyMzEsIDE1LCAyNTAsIDE5NSwgNjAsIDI1MCwgCisgICAgMTg0LCA1LCAxMDcsIDI1MSwgMjQ2LCA2MCwgMjUwLCAxODQsIDUsIDE3NywgMjUxLCAyNDYsIDYwLCAyNTAsIDE4NCwgNSwgCisgICAgMjUwLCAxODUsIDIxNywgMjI4LCA2MCwgMjUwLCAxODQsIDUsIDIyMiwgMTI1LCAyNTUsIDY4LCA2MCwgMTYsIDI0NiwgNDYsIAorICAgIDI1MSwgNTQsIDYwLCAxNiwgMjI0LCAyMiwgMjIzLCAxMTksIDYwLCAxNiwgMjI2LCAyMDIsIDI0MywgMzksIDYwLCAxNiwgCisgICAgMjI0LCAyMiwgMjIzLCAxMjAsIDIyMywgMTk1LCAyNDIsIDEyMSwgNjAsIDE2LCAyMjUsIDI0NCwgMTkzLCA2MCwgMTYsIAorICAgIDIyOCwgMTcwLCAyNTEsIDU0LCA2MCwgMTYsIDIyOCwgMTcwLCAyNTEsIDU1LCAyMjgsIDIsIDI1NSwgNjUsIDYwLCAxNiwgCisgICAgMjI4LCAxNzAsIDI1MSwgNTUsIDI0MiwgOTYsIDI1NSwgNjUsIDYwLCAxNiwgMjI4LCAxNzAsIDI1MSwgNTUsIDI1MCwgMjU1LCAKKyAgICAyNTUsIDY1LCA2MCwgNSwgMjI0LCAyMywgMjMwLCAzNywgMjI0LCAyMywgMjQ3LCAxMTAsIDYwLCA1LCAyMjQsIDIzLCAyMzAsIAorICAgIDM3LCAyNDIsIDk1LCA2MCwgMTUyLCAyNTEsIDU4LCAyMjAsIDE4MywgMjQyLCAxOTEsIDIzMSwgNTksIDIyMywgMTk0LCA2MCwgCisgICAgMTUyLCAyMzAsIDIzMywgMjEyLCAyNDcsIDI0MiwgMTkxLCAyMzEsIDU5LCAyMjMsIDE5NCwgNjAsIDE1MiwgMjI4LCAyLCAKKyAgICAyMTYsIDEzMCwgNjAsIDE1MiwgNzAsIDI1MSwgNzksIDIyMywgMTE0LCAyMTIsIDI0NywgMjMxLCA1OSwgMjMxLCAxNTgsIAorICAgIDE4OCwgNjAsIDE1MiwgMjQ5LCAxODksIDI1MSwgNzksIDIyMywgMTE0LCAyMTIsIDI0NywgMjMxLCA1OSwgMjIxLCAzMCwgCisgICAgMTg4LCAyMjMsIDE0NywgMjE4LCAyMDAsIDUyLCAyMzMsIDY5LCAyMTgsIDIwMCwgNTIsIDIyMywgMTQ3LCAyMTgsIDIwMCwgCisgICAgNSwgMiwgMjQ3LCA3MiwgMjMzLCA2OSwgMjE4LCAyMDAsIDUsIDIsIDI0NywgNzIsIDYwLCAxNTIsIDIzMywgNzksIDIzMSwgCisgICAgMTYwLCAyMjMsIDU0LCA2MCwgMTUyLCAyMTYsIDIwNywgMjMxLCAxNjAsIDIyMywgNTQsIDY0LCAxLCAxODEsIDY0LCAxLCAKKyAgICAyMzQsIDEzOCwgNjQsIDEsIDI0MywgMTEwLCA2NCwgMSwgMjQyLCAyMjUsIDY0LCAxLCAyMjksIDE1OSwgNjQsIDEsIDI1MCwgCisgICAgMjE5LCA2NCwgMSwgMjUwLCA5MiwgNjQsIDEsIDIzNSwgMTM5LCA2NCwgMSwgMjM1LCAxMTUsIDY0LCAxLCAyMjgsIDIzLCAKKyAgICA2NCwgMSwgMjI4LCAxODcsIDY0LCAxLCAyMTYsIDExNSwgNjQsIDEsIDIxNiwgMTA1LCA2NCwgMSwgMjQ4LCA4NiwgNjQsIDEsIAorICAgIDI0OCwgNzAsIDY0LCAxLCAyMjgsIDE5OCwgNjQsIDEsIDIxOCwgNTIsIDY0LCAxLCAyMTcsIDE2MSwgNjQsIDEsIDI0OCwgCisgICAgMTY0LCA2NCwgMSwgMjQ3LCAyMzIsIDY0LCAxLCAyMDUsIDY0LCAxLCAxOTMsIDY0LCAxLCAyMjYsIDIzLCA2NCwgMSwgMjUyLCAKKyAgICAxMDcsIDY0LCAxLCAyNTEsIDE5NSwgNjQsIDEsIDE4OCwgNjQsIDEsIDE4NiwgNjQsIDEsIDIwMywgNjQsIDEsIDIzMywgCisgICAgMTU3LCA2NCwgMSwgMjE0LCA0OSwgNjQsIDEsIDIyMiwgMjAyLCA2NCwgMSwgMTU5LCA2NCwgMSwgMjMyLCAyMTMsIDY0LCAxLCAKKyAgICA2MSwgNjQsIDEsIDIyMSwgOSwgNjEsIDY0LCAxLCA3MiwgNjQsIDEsIDIzNiwgMjgsIDY0LCAxLCA2OSwgNjQsIDEsIDIxNSwgCisgICAgOTIsIDY0LCAxLCA3NCwgNjQsIDEsIDIzMCwgMjIxLCA3NCwgNjQsIDEsIDc1LCA2NCwgMSwgMjUzLCAxMDgsIDY0LCAzMCwgCisgICAgNSwgMjE4LCAxNSwgMjU0LCAyMzIsIDY0LCAzMCwgNSwgMjU0LCAyMzIsIDY0LCAzMCwgNSwgNzIsIDY0LCAzMCwgNSwgMjM2LCAKKyAgICAyOCwgNjQsIDMwLCA1LCA2OSwgNjQsIDMwLCA1LCAyMTUsIDkyLCA2NCwgMzAsIDUsIDc0LCA2NCwgMzAsIDUsIDI1NCwgCisgICAgMTA4LCA2NCwgMzAsIDUsIDIzMCwgMjIxLCAyMzYsIDI4LCA2NCwgMzAsIDUsIDIzMCwgMjIxLCA3NSwgNjQsIDMwLCA1LCAKKyAgICAxOTEsIDQ5LCA2NCwgNSwgMjUzLCAyNDIsIDY0LCA1LCA2MiwgNTUsIDY0LCA1LCAyMTQsIDEyOCwgNjQsIDUsIDIxNCwgCisgICAgMTMzLCA2NCwgNSwgMjUzLCAxNTAsIDY0LCAyNDksIDEzMywgNSwgMTM4LCAxODYsIDY0LCAyNDksIDEzMywgNSwgMTM4LCAKKyAgICAyMDMsIDY0LCAyNDksIDEzMywgNSwgMTM4LCAyMTQsIDQ5LCA2NCwgMjQ5LCAxMzMsIDUsIDEzOCwgMTU5LCA2NCwgMSwgCisgICAgMjQyLCAxMDksIDIyMiwgMjAyLCA2NCwgMjEsIDIxMiwgNzksIDY0LCAyMSwgMTE2LCA2NCwgMjEsIDEwOSwgNjQsIDIxLCAKKyAgICAxNjYsIDY0LCAyMSwgMTYzLCA2NCwgMjEsIDE4MCwgNjQsIDIxLCAxODksIDY0LCAyMSwgMTk4LCA2NCwgMjEsIDE5NSwgNjQsIAorICAgIDIxLCAyMDAsIDY0LCA1LCAyMzIsIDIyMSwgMjIyLCA5MSwgNjQsIDUsIDIyMiwgOTEsIDY0LCAxNiwgMjMyLCAyMDUsIDY0LCAKKyAgICAxNiwgMjQ5LCAxNTIsIDY0LCAxNiwgMjU0LCAxMjUsIDY0LCAxNiwgMjQzLCAyNCwgNjQsIDEsIDIyMSwgMjQsIDY0LCAxLCAKKyAgICAyMTksIDE1NywgNjQsIDEsIDE2MSwgMTQ5LCA2NCwgMSwgMTYxLCAyMjMsIDgyLCA2NCwgMSwgMTYxLCAxNTAsIDY0LCAxLCAKKyAgICAxNjEsIDIzMiwgMjE0LCA2NCwgMzAsIDUsIDE2MSwgMTQ5LCA2NCwgMzAsIDUsIDE2MSwgMjIzLCA4MiwgNjQsIDMwLCA1LCAKKyAgICAxNjEsIDE1MCwgNjQsIDMwLCA1LCAxNjEsIDIzMiwgMjE0LCA2NCwgMSwgMjMwLCAyMjEsIDIyOSwgMTU5LCA2NCwgMSwgCisgICAgMjMwLCAyMjEsIDIzNSwgMTE1LCA2NCwgMSwgMjMwLCAyMjEsIDI1MiwgMzEsIDY0LCAxLCAyMzAsIDIyMSwgMjUyLCAyNiwgCisgICAgNjQsIDI0OSwgMTMzLCA1LCAyMzAsIDIyMSwgMTM4LCAyMDUsIDY0LCAyNDksIDEzMywgNSwgMjMwLCAyMjEsIDEzOCwgMTg4LCAKKyAgICA2NCwgMjQ5LCAxMzMsIDUsIDIzMCwgMjIxLCAxMzgsIDIzMywgMTU3LCA2NCwgMSwgMjIxLCAyOSwgMjM0LCAyMTgsIDIyMSwgCisgICAgMjQsIDY0LCAzMCwgNSwgMjIxLCAyOSwgMjM0LCAyMTgsIDI0NSwgMjIsIDY0LCAxNjAsIDE1MiwgMjIxLCAyOSwgMjM0LCAKKyAgICAyMTgsIDI0MSwgMjMwLCA2NCwgMTYwLCAxNTIsIDIyMSwgMjksIDIzNCwgMjE4LCAyMzQsIDE4OSwgMjI1LCAyNTMsIDY0LCAKKyAgICAxLCAyMTMsIDI0OCwgMjI0LCAyNTIsIDIzNCwgMjE4LCAyMTcsIDE2MSwgNjQsIDEsIDIxMywgMjQ4LCAyMjQsIDI1MiwgCisgICAgMjM0LCAyMTgsIDIyNSwgMiwgNjQsIDMwLCA1LCAyMTMsIDI0OCwgMjI0LCAyNTIsIDIzNCwgMjE4LCAyNDUsIDIyLCA2NCwgCisgICAgMzAsIDUsIDIxMywgMjQ4LCAyMjQsIDI1MiwgMjM0LCAyMTgsIDIxNSwgMTgzLCA2NCwgNSwgMjEzLCAyNDgsIDIyNCwgMjUyLCAKKyAgICAyMzQsIDIxOCwgMjE2LCAyNDAsIDY0LCA1LCAyMTMsIDI0OCwgMjI0LCAyNTIsIDIzNCwgMjE4LCAyMTYsIDIzOSwgNjQsIDUsIAorICAgIDIxMywgMjQ4LCAyMjQsIDI1MiwgMjM0LCAyMTgsIDIxNiwgMjM4LCA2NCwgNSwgMjEzLCAyNDgsIDIyNCwgMjUyLCAyMzQsIAorICAgIDIxOCwgMjE2LCAyMzcsIDY0LCA1LCAyMTMsIDI0OCwgMjI0LCAyNTIsIDIzNCwgMjE4LCAyMTYsIDIzNiwgNjQsIDEsIDI0NSwgCisgICAgMTc1LCAyMjQsIDI1MiwgMjM0LCAyMTgsIDIyOCwgMTk4LCA2NCwgMSwgMjQ1LCAxNzUsIDIyNCwgMjUyLCAyMzQsIDIxOCwgCisgICAgMjEyLCAxNjgsIDY0LCAxLCAyNDUsIDE3NSwgMjI0LCAyNTIsIDIzNCwgMjE4LCAyNDIsIDE5MywgNjQsIDMwLCA1LCAyNDMsIAorICAgIDM1LCAyMzQsIDIxOCwgNzIsIDY0LCAzMCwgNSwgMjM0LCAxOTQsIDIyNywgOTksIDY0LCAzMCwgNSwgMjM0LCAxOTQsIDY5LCAKKyAgICA2NCwgMzAsIDUsIDIzNCwgMTk0LCAyNDUsIDE2NSwgNjQsIDEsIDIyMSwgOSwgMTgxLCA2NCwgMSwgMjIxLCA5LCAyMzQsIAorICAgIDEzOCwgNjQsIDEsIDIyMSwgOSwgMjQzLCAxMTAsIDY0LCAxLCAyMjEsIDksIDI1MCwgMjE5LCA2NCwgMSwgMjIxLCA5LCAKKyAgICAyMTIsIDEwOSwgNjQsIDEsIDIyMSwgOSwgMjI4LCAyMywgNjQsIDEsIDIyMSwgOSwgMjQ4LCAxNjQsIDY0LCAxLCAyMjEsIDksIAorICAgIDIwNSwgNjQsIDEsIDIyMSwgOSwgMjI2LCAyMywgNjQsIDEsIDIyMSwgOSwgMjQ0LCAxNjQsIDY0LCAxLCAyMjEsIDksIDI1MiwgCisgICAgMTA3LCA2NCwgMSwgMjIxLCA5LCAyMTcsIDE2MSwgNjQsIDEsIDIyMSwgOSwgMTU5LCA2NCwgMjQ5LCAxMzMsIDUsIDIyMSwgCisgICAgOSwgMTM4LCAyMTQsIDQ5LCA2NCwgMzAsIDUsIDIyMSwgOSwgMjU0LCAyMzIsIDY0LCAzMCwgNSwgMjIxLCA5LCA3NCwgNjQsIAorICAgIDMwLCA1LCAyMjEsIDksIDE5MSwgNDksIDY0LCAzMCwgNSwgMjIxLCA5LCA0MCwgMjEzLCAxMDUsIDY0LCA1LCAyMjEsIDksIAorICAgIDIxNiwgMjM5LCA2NCwgNSwgMjIxLCA5LCAyMTYsIDIzOCwgNjQsIDUsIDIyMSwgOSwgMjE2LCAyMzYsIDY0LCA1LCAyMjEsIAorICAgIDksIDIxNiwgMjM1LCA2NCwgNSwgMjIxLCA5LCAyNDksIDkxLCAyMTYsIDIzOSwgNjQsIDUsIDIyMSwgOSwgMjQ5LCA5MSwgCisgICAgMjE2LCAyMzgsIDY0LCA1LCAyMjEsIDksIDI0OSwgOTEsIDI0NSwgMTExLCAyMTYsIDI0MSwgNjQsIDEsIDIyMywgMzksIAorICAgIDIyNiwgMTkwLCAyNDQsIDE2NCwgNjQsIDUsIDIyMywgMzksIDIyNiwgMTkwLCAyMTYsIDIzNiwgNjQsIDIyMSwgOSwgMjEsIAorICAgIDIxMiwgNzksIDY0LCAyMjEsIDksIDIxLCAxMTYsIDY0LCAyMjEsIDksIDIxLCAxMDksIDY0LCAyMjEsIDksIDIxLCAxNjYsIAorICAgIDY0LCAyMjEsIDksIDIxLCAxNjMsIDY0LCAyMjEsIDksIDIxLCAxODAsIDY0LCAyMjEsIDksIDIxLCAxODksIDY0LCAyMjEsIAorICAgIDksIDIxLCAxOTgsIDY0LCAyMjEsIDksIDIxLCAxOTUsIDY0LCAyMjEsIDksIDIxLCAyMDAsIDY0LCA1LCAyMzQsIDEzMiwgCisgICAgMjE2LCAyNDAsIDY0LCA1LCAyMzQsIDEzMiwgMjE2LCAyMzgsIDY0LCAzMCwgNSwgMjU0LCA5OCwgNjEsIDY0LCAzMCwgNSwgCisgICAgMjU0LCA5OCwgMjU0LCAxMDgsIDY0LCAxNiwgMjIxLCA5LCAxMTYsIDY0LCAxNiwgMjIxLCA5LCAyNDQsIDI1MywgMTAwLCA2LCAKKyAgICAxLCAyNTQsIDMyLCAxMDAsIDYsIDEsIDI1MiwgNzEsIDEwMCwgNiwgMSwgMjQzLCA4MiwgMTAwLCA2LCAxLCAyNDcsIDgyLCAKKyAgICAxMDAsIDYsIDEsIDI0NSwgMTA4LCAxMDAsIDYsIDEsIDIxNCwgMTQxLCAxMDAsIDYsIDEsIDIxMiwgODIsIDEwMCwgNiwgMSwgCisgICAgMjE4LCAxMSwgMTAwLCA2LCAxLCAyMzUsIDI1MSwgMTAwLCA2LCAxLCAyMzQsIDIzOSwgMTAwLCA2LCAxLCAyMzMsIDEwNCwgCisgICAgMTAwLCA2LCAxLCAyMzEsIDI0OCwgMTAwLCA2LCAxLCAyMzAsIDE1LCAxMDAsIDYsIDEsIDIyNywgNjIsIDEwMCwgNiwgMSwgCisgICAgMjI2LCAxNDUsIDEwMCwgNiwgMSwgMjEyLCA3MSwgMTAwLCA2LCAxLCAyMjQsIDYxLCAxMDAsIDYsIDEsIDIyMiwgMTU5LCAKKyAgICAxMDAsIDYsIDEsIDIxOCwgMSwgMTAwLCA2LCAxLCAyMTUsIDE2MCwgMTAwLCA2LCAxLCAyMjYsIDE2LCAxMDAsIDYsIDEsIAorICAgIDIzNCwgMTI3LCAxMDAsIDYsIDEsIDI0MiwgMjE3LCAxMDAsIDYsIDEsIDIyNCwgMjE3LCAxMDAsIDYsIDEsIDIyMCwgMjAwLCAKKyAgICAxMDAsIDYsIDEsIDI1MCwgMzQsIDEwMCwgNiwgMSwgMjUwLCAxOTUsIDEwMCwgNiwgMSwgMjM1LCAxMDMsIDEwMCwgNiwgMSwgCisgICAgMjQ5LCAyMzMsIDEwMCwgNiwgMSwgMjUwLCA3OSwgMTAwLCA2LCAxLCAyMTMsIDE1MSwgMTAwLCA2LCAxLCAyMzUsIDExMywgCisgICAgMTAwLCA2LCAxLCAyNDIsIDI0LCAxMDAsIDYsIDEsIDI0MSwgMjIyLCAxMDAsIDYsIDEsIDI0MSwgMTYwLCAxMDAsIDYsIDEsIAorICAgIDIxNCwgNiwgMTAwLCA2LCAxLCAyNDEsIDI0MywgMTAwLCA2LCAxLCAyNDEsIDUxLCAxMDAsIDEsIDI1NCwgMzIsIDEwMCwgMSwgCisgICAgMjUyLCA3MSwgMTAwLCAxLCAyNDMsIDgyLCAxMDAsIDEsIDI0NywgODIsIDEwMCwgMSwgMjQ1LCAxMDgsIDEwMCwgMSwgMjE0LCAKKyAgICAxNDEsIDEwMCwgMSwgMjEyLCA4MiwgMTAwLCAxLCAyMTgsIDExLCAxMDAsIDEsIDIzNSwgMjUxLCAxMDAsIDEsIDIzNCwgCisgICAgMjM5LCAxMDAsIDEsIDIzMywgMTA0LCAxMDAsIDEsIDIzMSwgMjQ4LCAxMDAsIDEsIDIzMCwgMTUsIDEwMCwgMSwgMjI3LCAKKyAgICA2MiwgMTAwLCAxLCAyMjYsIDE0NSwgMTAwLCAxLCAyMTIsIDcxLCAxMDAsIDEsIDIyNCwgNjEsIDEwMCwgMSwgMjIyLCAxNTksIAorICAgIDEwMCwgMSwgMjE4LCAxLCAxMDAsIDEsIDIxNSwgMTYwLCAxMDAsIDEsIDIyNiwgMTYsIDEwMCwgMSwgMjM0LCAxMjcsIDEwMCwgCisgICAgMSwgMjQyLCAyMTcsIDEwMCwgMSwgMjI0LCAyMTcsIDEwMCwgMSwgMjIwLCAyMDAsIDEwMCwgMSwgMjUwLCAzNCwgMTAwLCAxLCAKKyAgICAyNTAsIDE5NSwgMTAwLCAxLCAyMzUsIDEwMywgMTAwLCAxLCAyNDksIDIzMywgMTAwLCAxLCAyNTAsIDc5LCAxMDAsIDEsIAorICAgIDIxMywgMTUxLCAxMDAsIDEsIDIzNSwgMTEzLCAxMDAsIDEsIDI0MiwgMjQsIDEwMCwgMSwgMjQxLCAyMjIsIDEwMCwgMSwgCisgICAgMjQxLCAxNjAsIDEwMCwgMSwgMjE0LCA2LCAxMDAsIDEsIDI0MSwgMjQzLCAxMDAsIDEsIDI0MSwgNTEsIDEwMCwgMSwgMjQ0LCAKKyAgICA5MCwgMTAwLCAxLCAyMTIsIDIzNywgMTAwLCAxLCAyNDUsIDEyMiwgMTAwLCAxLCAyMTYsIDU4LCAyNDMsIDgyLCAxMDAsIDEsIAorICAgIDI1NCwgMTAzLCAxMDAsIDIyNiwgMTQzLCAyMjEsIDU3LCA1OSwgMSwgMTAwLCAyMzAsIDE1LCAyMywgOTcsIDIzNCwgNjcsIAorICAgIDIzLCA5NywgMjE5LCAxNTAsIDIzLCA5NywgMjI5LCA1NywgMjMsIDk3LCAyMTcsIDU1LCAyMywgOTcsIDIxOSwgMTM5LCAyMywgCisgICAgOTcsIDIyMywgMTc5LCAyMywgOTcsIDIzMSwgMzAsIDIzLCA5NywgMjI1LCAyMjcsIDIzLCA5NywgMjE5LCAxNDcsIDIzLCAKKyAgICA5NywgMjIwLCA3NiwgMjMsIDk3LCAyMTksIDE0NCwgMjMsIDk3LCAyMzYsIDUxLCAyMywgOTcsIDI0OSwgMjM5LCAyMywgOTcsIAorICAgIDIxOSwgMTU0LCAyMywgOTcsIDI1MCwgNDMsIDIzLCA5NywgMjM0LCAxMTYsIDIzLCA5NywgMjE3LCAxMjYsIDIzLCA5NywgCisgICAgMjI2LCA3LCAyMywgOTcsIDI0MSwgMTU4LCAyMywgOTcsIDIyOSwgNTMsIDIzLCA5NywgMjE5LCAxNDgsIDIzLCA5NywgMjI5LCAKKyAgICA0NywgMjMsIDk3LCAyMjksIDUxLCAyMywgOTcsIDIxNywgNTIsIDIzLCA5NywgMjIzLCAxNjcsIDIzLCA5NywgMjE5LCAxNDYsIAorICAgIDIzLCA5NywgMjIzLCAxNzcsIDIzLCA5NywgMjM0LCAyMjMsIDIzLCA5NywgMjMxLCAyMywgMjMsIDk3LCAyMzQsIDIyNiwgCisgICAgMjMsIDk3LCAyMjUsIDIyMiwgMjMsIDk3LCAyMjUsIDIyMCwgMjMsIDk3LCAyMjUsIDIwOCwgMjMsIDk3LCAyMjUsIDIxNiwgCisgICAgMjMsIDk3LCAyMjUsIDIxNCwgMjMsIDk3LCAyMjUsIDIxMSwgMjMsIDk3LCAyMjUsIDIxMywgMjMsIDk3LCAyMjUsIDIxMCwgCisgICAgMjMsIDk3LCAyMjUsIDIxNSwgMjMsIDk3LCAyMjUsIDIyNSwgMjMsIDk3LCAyMjUsIDIyNiwgMjMsIDk3LCAyMjUsIDIwOSwgCisgICAgMjMsIDk3LCAyMjUsIDIxOSwgMjMsIDk3LCAyMzQsIDIyNCwgMjMsIDk3LCAyMzQsIDIyMiwgMjMsIDk3LCAyMjAsIDY5LCAKKyAgICAyMywgOTcsIDIyMCwgNjcsIDIzLCA5NywgMjIwLCA1OSwgMjMsIDk3LCAyMjAsIDYyLCAyMywgOTcsIDIyMCwgNjgsIDIzLCAKKyAgICA5NywgMjIwLCA2NCwgMjMsIDk3LCAyMjAsIDYzLCAyMywgOTcsIDIyMCwgNjEsIDIzLCA5NywgMjIwLCA3MiwgMjMsIDk3LCAKKyAgICAyMjAsIDc0LCAyMywgOTcsIDIyMCwgNzUsIDIzLCA5NywgMjIwLCA3MCwgMjMsIDk3LCAyMjAsIDYwLCAyMywgOTcsIDIyMCwgCisgICAgNjUsIDIzLCA5NywgMjIwLCA3MywgMjMsIDk3LCAyNTAsIDI3LCAyMywgOTcsIDI1MCwgMjUsIDIzLCA5NywgMjUwLCAxMDIsIAorICAgIDIzLCA5NywgMjUwLCAxMDAsIDIzLCA5NywgMjI2LCAxNjAsIDIzLCA5NywgMjM2LCA0NiwgMjMsIDk3LCAyMzYsIDM3LCAyMywgCisgICAgOTcsIDIzNiwgNDUsIDIzLCA5NywgMjM2LCA0MiwgMjMsIDk3LCAyMzYsIDQwLCAyMywgOTcsIDIzNiwgNDQsIDIzLCA5NywgCisgICAgMjE5LCAxNTEsIDIzLCA5NywgMjM2LCA0OSwgMjMsIDk3LCAyMzYsIDUwLCAyMywgOTcsIDIzNiwgMzgsIDIzLCA5NywgMjM2LCAKKyAgICA0MywgMjMsIDk3LCAyMTMsIDE3LCAyMywgOTcsIDI0OSwgMjM4LCAyMywgOTcsIDI1MCwgMjgsIDIzLCA5NywgMjUwLCAyNiwgCisgICAgMjMsIDk3LCAyNTAsIDEwMywgMjMsIDk3LCAyNTAsIDEwMSwgMjMsIDk3LCAyNTAsIDQxLCAyMywgOTcsIDI1MCwgNDIsIDIzLCAKKyAgICA5NywgMjUwLCAyOSwgMjMsIDk3LCAyNTAsIDEwNCwgMjMsIDk3LCAyMjYsIDUsIDIzLCA5NywgMjM0LCAyMjUsIDIzLCA5NywgCisgICAgMjE5LCAxNTIsIDIzLCA5NywgMjEzLCAyMywgMjMsIDk3LCAyMzQsIDU4LCAyMywgOTcsIDIyOSwgNDksIDIzLCA5NywgMjI5LCAKKyAgICA1NSwgMjMsIDk3LCAyMjksIDU0LCAyMywgOTcsIDIxNywgNDksIDIzLCA5NywgMjQ0LCA3MiwgMjMsIDEzNSwgMjQ0LCA3MiwgCisgICAgMjMsIDEzNSwgNjEsIDIzLCAxMzUsIDI1NCwgMTQ4LCAyMywgMTM1LCAxODYsIDIzLCAxMzUsIDIxMywgODAsIDIzLCAxMzUsIAorICAgIDI0NSwgNzYsIDIzLCAxMzUsIDc0LCAyMywgMTM1LCAyMTMsIDI3LCAyMywgMTM1LCAyMTMsIDM4LCAyMywgMTM1LCA3NSwgCisgICAgMjMsIDEzNSwgMjE0LCA0OSwgMjMsIDEzNSwgMjE0LCA0NiwgMjMsIDEzNSwgMjI3LCA5OSwgMjMsIDEzNSwgMjEyLCAyMzUsIAorICAgIDIzLCAxMzUsIDY5LCAyMywgMTM1LCAyMTMsIDI1MiwgMjMsIDEzNSwgMjE0LCA2LCAyMywgMTM1LCAyMTMsIDIzNSwgMjMsIAorICAgIDEzNSwgMjEyLCAyMDMsIDIzLCAxMzUsIDI0NSwgMjIsIDIzLCAxMzUsIDIxMiwgMjU1LCAyMywgMTM1LCA3MiwgMjMsIDEzNSwgCisgICAgMjU1LCA2MCwgMjMsIDEzNSwgMjU1LCA1OSwgMjMsIDEzNSwgMjEzLCA5NCwgMjMsIDEzNSwgMjEzLCA5MiwgMjMsIDEzNSwgCisgICAgMjQ1LCA3NCwgMjMsIDEzNSwgMjQ1LCA3MywgMjMsIDEzNSwgMjQ1LCA3NSwgMjMsIDEzNSwgMjEzLCAyNiwgMjMsIDEzNSwgCisgICAgMjEzLCAyNSwgMjMsIDEzNSwgMjI3LCAyMDQsIDIzLCAxMzUsIDIyNywgMjA1LCAyMywgMTM1LCAyMjcsIDE5OCwgMjMsIAorICAgIDEzNSwgMjI3LCAyMDMsIDIzLCAxMzUsIDIyNywgMjAxLCAyMywgMTM1LCAyMTIsIDIyOSwgMjMsIDEzNSwgMjEyLCAyMjgsIAorICAgIDIzLCAxMzUsIDIxMiwgMjI3LCAyMywgMTM1LCAyMTIsIDIzMCwgMjMsIDEzNSwgMjEyLCAyMzEsIDIzLCAxMzUsIDIxNSwgCisgICAgMjUyLCAyMywgMTM1LCAyMTUsIDI1MSwgMjMsIDEzNSwgMjE1LCAyNTAsIDIzLCAxMzUsIDIxNSwgMjQ3LCAyMywgMTM1LCAKKyAgICAyMTUsIDI0OCwgMjMsIDEzNSwgMjEyLCAyMDIsIDIzLCAxMzUsIDIxMiwgMTk5LCAyMywgMTM1LCAyMTIsIDIwMCwgMjMsIAorICAgIDEzNSwgMjEyLCAxOTQsIDIzLCAxMzUsIDIxMiwgMTk1LCAyMywgMTM1LCAyMTIsIDE5NiwgMjMsIDEzNSwgMjEyLCAxOTgsIAorICAgIDIzLCAxMzUsIDI0NSwgMTYsIDIzLCAxMzUsIDI0NSwgMTgsIDIzLCAxMzUsIDIxMiwgMjU0LCAyMywgMTM1LCAyNDAsIDE0NSwgCisgICAgMjMsIDEzNSwgMjQwLCAxMzcsIDIzLCAxMzUsIDI0MCwgMTQwLCAyMywgMTM1LCAyNDAsIDEzOCwgMjMsIDEzNSwgMjQwLCAKKyAgICAxNDIsIDIzLCAxMzUsIDI0MCwgMTQ0LCAyMywgMTM1LCAyNTMsIDIwNCwgMjMsIDEzNSwgMjUzLCAyMDEsIDIzLCAxMzUsIAorICAgIDI1MywgMTk5LCAyMywgMTM1LCAyNTMsIDIwMCwgMjMsIDEzNSwgMjE5LCAxNTUsIDIzLCAxMzUsIDI1NSwgNjEsIDIzLCAKKyAgICAxMzUsIDIxMywgOTMsIDIzLCAxMzUsIDIxMywgMjQsIDIzLCAxMzUsIDIyNywgMjAwLCAyMywgMTM1LCAyMjcsIDE5OSwgMjMsIAorICAgIDg5LCAyMzQsIDY3LCAyMywgODksIDIxOSwgMTUwLCAyMywgODksIDIzNCwgNjAsIDIzLCA4OSwgMjI5LCA1NywgMjMsIDg5LCAKKyAgICAyMjksIDU1LCAyMywgODksIDIyOSwgNTQsIDIzLCA4OSwgMjE3LCA1NSwgMjMsIDg5LCAyMjMsIDE3OSwgMjMsIDg5LCAyMjMsIAorICAgIDE3NCwgMjMsIDg5LCAyMjMsIDE3MSwgMjMsIDg5LCAyMjMsIDE2NCwgMjMsIDg5LCAyMjMsIDE1OSwgMjMsIDg5LCAyMjMsIAorICAgIDE1NCwgMjMsIDg5LCAyMjMsIDE2NSwgMjMsIDg5LCAyMjMsIDE3NywgMjMsIDg5LCAyMzEsIDMwLCAyMywgODksIDIyNSwgCisgICAgMjI3LCAyMywgODksIDIyNSwgMjE2LCAyMywgODksIDIyMCwgNzYsIDIzLCA4OSwgMjE5LCAxNDQsIDIzLCA4OSwgMjM2LCAKKyAgICA1MSwgMjMsIDg5LCAyNDksIDIzOSwgMjMsIDg5LCAyNTAsIDQzLCAyMywgODksIDIzNCwgMTE2LCAyMywgODksIDIxNywgCisgICAgMTI2LCAyMywgODksIDIyNiwgNywgMjMsIDg5LCAyNDEsIDE1OCwgMjMsIDg5LCAyMzQsIDYxLCAyMywgODksIDIzNCwgNTksIAorICAgIDIzLCA4OSwgMjI5LCA1MywgMjMsIDg5LCAyMjksIDQ3LCAyMywgODksIDIyOSwgNDksIDIzLCA4OSwgMjI5LCA1MiwgMjMsIAorICAgIDg5LCAyMjksIDQ4LCAyMywgODksIDIxNywgNTIsIDIzLCA4OSwgMjE3LCA0OSwgMjMsIDg5LCAyMjMsIDE3MiwgMjMsIDg5LCAKKyAgICAyMjMsIDE2NywgMjMsIDg5LCAyMjMsIDE1MywgMjMsIDg5LCAyMjMsIDE1MiwgMjMsIDg5LCAyMTksIDE0NiwgMjMsIDg5LCAKKyAgICAyMjMsIDE2OSwgMjMsIDg5LCAyMjMsIDE2OCwgMjMsIDg5LCAyMjMsIDE2MSwgMjMsIDg5LCAyMjMsIDE2MywgMjMsIDg5LCAKKyAgICAyMjMsIDE3NiwgMjMsIDg5LCAyMjMsIDE1NiwgMjMsIDg5LCAyMjMsIDE2NiwgMjMsIDg5LCAyMjMsIDE3NSwgMjMsIDg5LCAKKyAgICAyMjMsIDE1MSwgMjMsIDg5LCAyMzEsIDI2LCAyMywgODksIDIzMSwgMjEsIDIzLCA4OSwgMjMxLCAyMywgMjMsIDg5LCAyMzEsIAorICAgIDIwLCAyMywgODksIDIzMSwgMTgsIDIzLCA4OSwgMjMxLCAyNCwgMjMsIDg5LCAyMzEsIDI5LCAyMywgODksIDIzMSwgMjcsIAorICAgIDIzLCA4OSwgMjM0LCAyMjYsIDIzLCA4OSwgMjI1LCAyMTgsIDIzLCA4OSwgMjI1LCAyMTksIDIzLCA4OSwgMjI1LCAyMjQsIAorICAgIDIzLCA4OSwgMjM0LCAyMjQsIDIzLCA4OSwgMjIwLCA2OSwgMjMsIDg5LCAyMjAsIDU5LCAyMywgODksIDIyMCwgNjIsIDIzLCAKKyAgICA4OSwgMjIwLCA2NCwgMjMsIDg5LCAyMjYsIDE2MCwgMjMsIDg5LCAyMzYsIDQ2LCAyMywgODksIDIzNiwgMzksIDIzLCA4OSwgCisgICAgMjE5LCAxNTEsIDIzLCA4OSwgMjM2LCA0NywgMjMsIDg5LCAyMTMsIDE3LCAyMywgODksIDIxMywgMTMsIDIzLCA4OSwgMjEzLCAKKyAgICAxNCwgMjMsIDg5LCAyMjYsIDUsIDIzLCA4OSwgMjM0LCAyMjUsIDIzLCA4OSwgMjQxLCAxNTYsIDIzLCA4OSwgMjQxLCAxNTQsIAorICAgIDIzLCA4OSwgMjQxLCAxNTcsIDIzLCA4OSwgMjQxLCAxNTUsIDIzLCA4OSwgMjEzLCAyMywgMjMsIDg5LCAyMzQsIDYzLCAyMywgCisgICAgODksIDIzNCwgNjIsIDIzLCA4OSwgMjM0LCA2NiwgMjMsIDg5LCAyMzQsIDY0LCAyMywgODksIDIzNCwgNjUsIDIzLCA4OSwgCisgICAgMjE5LCAxNDgsIDI4LCA0LCAxNTksIDI4LCA0LCAyNDAsIDIxMiwgMjgsIDQsIDI0MSwgMTY1LCAyOCwgNCwgMjQyLCAyNywgCisgICAgMjgsIDQsIDI0MSwgMjA0LCAyOCwgNCwgMjQxLCAyMjIsIDI4LCA0LCAyNDEsIDU0LCAyOCwgNCwgMjQxLCA1MywgMjgsIDQsIAorICAgIDIzMywgMTU3LCAyOCwgNCwgMjMyLCAxNTYsIDI4LCA0LCAyMzMsIDEzLCAyOCwgNCwgMjMzLCAxNTYsIDI4LCA0LCAyMzMsIAorICAgIDc0LCAyOCwgNCwgMjMzLCA4MiwgMjgsIDQsIDIzMiwgMjA4LCAyOCwgNCwgMjMyLCAxMjksIDI4LCA0LCAyNDEsIDE3NCwgCisgICAgMjgsIDQsIDI0MSwgMTY4LCAyOCwgNCwgMjQxLCAxNzAsIDI4LCA0LCAyNDEsIDE3MywgMjgsIDQsIDI0MSwgMTcxLCAyOCwgCisgICAgNCwgMjQxLCAxNzIsIDI4LCA0LCAyNDEsIDE2OSwgMjgsIDQsIDI0MSwgMTY3LCAyOCwgNCwgMTg4LCAyOCwgNCwgMjMwLCAKKyAgICAxNzIsIDI4LCA0LCAyMzEsIDQyLCAyOCwgNCwgMjMyLCA0MSwgMjgsIDQsIDIzMSwgMTQ1LCAyOCwgNCwgMjMxLCAxNTYsIAorICAgIDI4LCA0LCAyMzAsIDIzMSwgMjgsIDQsIDIzMCwgMTE0LCAyOCwgNCwgMjE4LCAxMTAsIDI4LCA0LCAyMTgsIDEwNCwgMjgsIAorICAgIDQsIDIxOCwgMTA2LCAyOCwgNCwgMjE4LCAxMDksIDI4LCA0LCAyMTgsIDEwNywgMjgsIDQsIDIxOCwgMTA4LCAyOCwgNCwgCisgICAgMjE4LCAxMDUsIDI4LCA0LCAyMTgsIDEwMywgMjgsIDQsIDIwMywgMjgsIDQsIDIyMywgNTEsIDI4LCA0LCAyMjMsIDE4OCwgCisgICAgMjgsIDQsIDIyNCwgNzQsIDI4LCA0LCAyMjQsIDEsIDI4LCA0LCAyMjQsIDIxLCAyOCwgNCwgMjIzLCAxMTIsIDI4LCA0LCAKKyAgICAyMjMsIDIxLCAyOCwgNCwgMjIyLCAyMDIsIDI4LCA0LCAyMTksIDI3LCAyOCwgNCwgMjIwLCAxMTcsIDI4LCA0LCAyMjIsIAorICAgIDIwMCwgMjgsIDQsIDIyMiwgODksIDI4LCA0LCAyMjIsIDEwMCwgMjgsIDQsIDIxOSwgMjQyLCAyOCwgNCwgMjE4LCAxOTgsIAorICAgIDI4LCA0LCAyMjEsIDI0LCAyOCwgNCwgMjIwLCAxNTAsIDI4LCA0LCAyMjAsIDIxMiwgMjgsIDQsIDIyMSwgMjAsIDI4LCA0LCAKKyAgICAyMjAsIDI0MSwgMjgsIDQsIDIyMCwgMjQzLCAyOCwgNCwgMjIwLCAxODcsIDI4LCA0LCAyMjAsIDEzNCwgMjgsIDQsIDIyNCwgCisgICAgMjMyLCAyOCwgNCwgMjI0LCAxNzUsIDI4LCA0LCAyMjQsIDE5OCwgMjgsIDQsIDIyNCwgMjMxLCAyOCwgNCwgMjI0LCAyMTIsIAorICAgIDI4LCA0LCAyMjQsIDIxMywgMjgsIDQsIDIyNCwgMTg3LCAyOCwgNCwgMjI0LCAxODYsIDI4LCA0LCAyMjQsIDEzMSwgMjgsIAorICAgIDQsIDIyNCwgMTI3LCAyOCwgNCwgMjI0LCAxMzAsIDI4LCA0LCAyMjQsIDEyOCwgMjgsIDQsIDIyNCwgMTI5LCAyOCwgNCwgCisgICAgMjI0LCAyMTAsIDI4LCA0LCAyMjQsIDIwNCwgMjgsIDQsIDIyNCwgMjA2LCAyOCwgNCwgMjI0LCAyMDksIDI4LCA0LCAyMjQsIAorICAgIDIwNywgMjgsIDQsIDIyNCwgMjA4LCAyOCwgNCwgMjI0LCAyMDUsIDI4LCA0LCAyMjQsIDIwMywgMjgsIDQsIDIyNCwgMTk5LCAKKyAgICAyOCwgNCwgMjI0LCAyMDIsIDI4LCA0LCAyMjQsIDIwMCwgMjgsIDQsIDIyNCwgMjAxLCAyOCwgNCwgMjUyLCAxMDcsIDI4LCAKKyAgICA0LCAyNTEsIDU0LCAyOCwgNCwgMjUxLCAxODQsIDI4LCA0LCAyNTIsIDEwNiwgMjgsIDQsIDI1MSwgMjQyLCAyOCwgNCwgCisgICAgMjUxLCAyNTEsIDI4LCA0LCAyNTEsIDEyOCwgMjgsIDQsIDI1MSwgMTIsIDI4LCA0LCAyMTUsIDEsIDI4LCA0LCAyMTQsIDk5LCAKKyAgICAyOCwgNCwgMjE0LCAxNTQsIDI4LCA0LCAyMTUsIDAsIDI4LCA0LCAyMTQsIDIyNywgMjgsIDQsIDIxNCwgMjMyLCAyOCwgNCwgCisgICAgMjE0LCAxMTksIDI4LCA0LCAyMTQsIDkxLCAyOCwgNCwgMjE4LCA1MiwgMjgsIDQsIDIxNiwgODIsIDI4LCA0LCAyMTcsIDcxLCAKKyAgICAyOCwgNCwgMjE4LCA0OSwgMjgsIDQsIDIxNywgMjE5LCAyOCwgNCwgMjE3LCAyMjksIDI4LCA0LCAxMDgsIDI4LCA0LCAyMTYsIAorICAgIDQ1LCAyOCwgNCwgMjUwLCAyMTksIDI4LCA0LCAyNDksIDUzLCAyOCwgNCwgMjQ5LCAyNDQsIDI4LCA0LCAyNTAsIDIxOCwgCisgICAgMjgsIDQsIDI1MCwgMTE2LCAyOCwgNCwgMjUwLCAxMjQsIDI4LCA0LCAyNDksIDE3NSwgMjgsIDQsIDI0OSwgMjQsIDI4LCA0LCAKKyAgICAyMTMsIDE1MywgMjgsIDQsIDIxMywgMTI5LCAyOCwgNCwgMjEzLCAxNDUsIDI4LCA0LCAyMTMsIDE1MiwgMjgsIDQsIDIxMywgCisgICAgMTQ5LCAyOCwgNCwgMjEzLCAxNTAsIDI4LCA0LCAyMTMsIDEzNiwgMjgsIDQsIDIxMywgMTM1LCAyOCwgNCwgMjEzLCAxMjQsIAorICAgIDI4LCA0LCAyMTMsIDEyMCwgMjgsIDQsIDIxMywgMTIzLCAyOCwgNCwgMjEzLCAxMjEsIDI4LCA0LCAyMTMsIDEyMiwgMjgsIAorICAgIDQsIDIwNSwgMjgsIDQsIDIyOCwgOTIsIDI4LCA0LCAyMjksIDY0LCAyOCwgNCwgMjMwLCA0MywgMjgsIDQsIDIyOSwgMTg0LCAKKyAgICAyOCwgNCwgMjI5LCAxODcsIDI4LCA0LCAyMjgsIDE4NSwgMjgsIDQsIDIyOCwgMzEsIDI4LCA0LCAyMjgsIDIzLCAyOCwgNCwgCisgICAgMjI3LCAyNDcsIDI4LCA0LCAyMjgsIDEwLCAyOCwgNCwgMjI4LCAyMiwgMjgsIDQsIDIyOCwgMTYsIDI4LCA0LCAyMjgsIDE3LCAKKyAgICAyOCwgNCwgMjI3LCAyNTMsIDI4LCA0LCAyMjcsIDIzOSwgMjgsIDQsIDI0MiwgMTU2LCA2MSwgMjgsIDQsIDI0MiwgMTU2LCAKKyAgICA2OSwgMjgsIDQsIDI0MiwgMTU2LCA3MiwgMjgsIDQsIDI0MiwgMTU2LCAyNTQsIDIzMiwgMjgsIDQsIDI0MiwgMTU2LCAyNDUsIAorICAgIDE2NSwgMjgsIDQsIDI0MiwgMTU2LCA3NCwgMjgsIDQsIDI0MiwgMTU2LCA3NSwgMjgsIDQsIDI0MiwgMTU2LCAyMTQsIDQ5LCAKKyAgICAyOCwgNCwgMTgxLCAyOCwgNCwgMjMzLCAyMzgsIDI4LCA0LCAyMzQsIDEwMSwgMjgsIDQsIDIzNSwgMTQsIDI4LCA0LCAyMzQsIAorICAgIDE4NywgMjgsIDQsIDIzNCwgMTg4LCAyOCwgNCwgMjM0LCAzNywgMjgsIDQsIDIzNCwgMzYsIDI4LCA0LCAyMzMsIDIwNCwgCisgICAgMjgsIDQsIDIzMywgMTk4LCAyOCwgNCwgMjMzLCAyMDMsIDI4LCA0LCAyMzMsIDE5OSwgMjgsIDQsIDIzMywgMjAwLCAyOCwgCisgICAgNCwgMjMzLCAxOTMsIDI4LCA0LCAyMzMsIDE4NywgMjgsIDQsIDIzMywgMTg5LCAyOCwgNCwgMjMzLCAxOTIsIDI4LCA0LCAKKyAgICAyMzMsIDE5MCwgMjgsIDQsIDIzMywgMTkxLCAyOCwgNCwgMjMzLCAxODgsIDI4LCA0LCAyMzMsIDE4NiwgMjgsIDQsIDIzMywgCisgICAgMTgyLCAyOCwgNCwgMjMzLCAxODUsIDI4LCA0LCAyMzMsIDE4MywgMjgsIDQsIDIzMywgMTg0LCAyOCwgNCwgMjE0LCA0OSwgCisgICAgMjgsIDQsIDIxMywgMTgzLCAyOCwgNCwgMjEzLCAyMzUsIDI4LCA0LCAyMTQsIDQ4LCAyOCwgNCwgMjE0LCAxLCAyOCwgNCwgCisgICAgMjE0LCA2LCAyOCwgNCwgMjEzLCAyMTQsIDI4LCA0LCAyMTMsIDIxMywgMjgsIDQsIDIyNiwgMTUsIDYxLCAyOCwgNCwgMjI2LCAKKyAgICAxNSwgNjksIDI4LCA0LCAyMjYsIDE1LCA3MiwgMjgsIDQsIDIyNiwgMTUsIDI1NCwgMjMyLCAyOCwgNCwgMjI2LCAxNSwgCisgICAgMjQ1LCAxNjUsIDI4LCA0LCAyMjYsIDE1LCA3NCwgMjgsIDQsIDIyNiwgMTUsIDc1LCAyOCwgNCwgMjEyLCAxMDksIDI4LCA0LCAKKyAgICAyMTIsIDgsIDI4LCA0LCAyMTIsIDM3LCAyOCwgNCwgMjEyLCAxMDgsIDI4LCA0LCAyMTIsIDg1LCAyOCwgNCwgMjEyLCA4NywgCisgICAgMjgsIDQsIDIxMiwgMTYsIDI4LCA0LCAyMTEsIDI1MSwgMjgsIDQsIDIxMiwgNzUsIDI4LCA0LCAyMTIsIDU1LCAyOCwgNCwgCisgICAgMjEyLCA2MiwgMjgsIDQsIDIxMiwgNzQsIDI4LCA0LCAyMTIsIDY2LCAyOCwgNCwgMjEyLCA2NywgMjgsIDQsIDIxMiwgNjAsIAorICAgIDI4LCA0LCAyMTIsIDQ2LCAyOCwgNCwgMTg2LCAyOCwgNCwgMjEyLCAyMDMsIDI4LCA0LCAyMTIsIDI1NSwgMjgsIDQsIDIxMywgCisgICAgOTEsIDI4LCA0LCAyMTMsIDM1LCAyOCwgNCwgMjEzLCAzOCwgMjgsIDQsIDIxMiwgMjM1LCAyOCwgNCwgMjEyLCAyMjYsIDI4LCAKKyAgICA0LCAyNDgsIDE2NCwgMjgsIDQsIDI0NiwgMzMsIDI4LCA0LCAyNDcsIDIxMSwgMjgsIDQsIDI0OCwgMTYzLCAyOCwgNCwgCisgICAgMjQ4LCAyOCwgMjgsIDQsIDI0OCwgNDEsIDI4LCA0LCAyNDcsIDk5LCAyOCwgNCwgMjQ2LCAyLCAyOCwgNCwgMjQ4LCA4NiwgCisgICAgMjgsIDQsIDI0OCwgNTEsIDI4LCA0LCAyNDgsIDYzLCAyOCwgNCwgMjQ4LCA4NSwgMjgsIDQsIDI0OCwgNzMsIDI4LCA0LCAKKyAgICAyNDgsIDc0LCAyOCwgNCwgMjQ4LCA1NiwgMjgsIDQsIDI0OCwgNDIsIDI4LCA0LCAyMzUsIDEzOSwgMjgsIDQsIDIzNSwgNTQsIAorICAgIDI4LCA0LCAyMzUsIDExMCwgMjgsIDQsIDIzNSwgMTM4LCAyOCwgNCwgMjM1LCAxMjUsIDI4LCA0LCAyMzUsIDEyNywgMjgsIAorICAgIDQsIDIzNSwgNzEsIDI4LCA0LCAyMzUsIDM1LCAyOCwgNCwgMjQzLCAxMTAsIDI4LCA0LCAyNDIsIDkyLCAyOCwgNCwgMjQyLCAKKyAgICAxOTAsIDI4LCA0LCAyNDMsIDEwNywgMjgsIDQsIDI0MywgMzEsIDI4LCA0LCAyNDMsIDM4LCAyOCwgNCwgMjQyLCAxNTAsIAorICAgIDI4LCA0LCAyNDIsIDE0OSwgMjgsIDQsIDI0MiwgNTksIDI4LCA0LCAyNDIsIDU1LCAyOCwgNCwgMjQyLCA1OCwgMjgsIDQsIAorICAgIDI0MiwgNTYsIDI4LCA0LCAyNDIsIDU3LCAyOCwgNCwgMjQzLCA1LCAyOCwgNCwgMjQyLCAyNDEsIDI4LCA0LCAyNDIsIDI1MSwgCisgICAgMjgsIDQsIDI0MywgNCwgMjgsIDQsIDI0MiwgMjU1LCAyOCwgNCwgMjQzLCAwLCAyOCwgNCwgMjQyLCAyNDUsIDI4LCA0LCAKKyAgICAyNDIsIDIzMCwgMjgsIDQsIDIxNywgMTYxLCAyOCwgNCwgMjE3LCA5MCwgMjgsIDQsIDIxNywgMTI4LCAyOCwgNCwgMjE3LCAKKyAgICAxNjAsIDI4LCA0LCAyMTcsIDE0NywgMjgsIDQsIDIxNywgMTQ4LCAyOCwgNCwgMjE3LCAxMDksIDI4LCA0LCAyMTcsIDgyLCAKKyAgICAyOCwgNCwgMjUwLCA5MiwgMjgsIDQsIDI1MCwgNiwgMjgsIDQsIDI1MCwgNDcsIDI4LCA0LCAyNTAsIDkxLCAyOCwgNCwgCisgICAgMjUwLCA2NCwgMjgsIDQsIDI1MCwgNjcsIDI4LCA0LCAyNTAsIDIzLCAyOCwgNCwgMjQ5LCAyNTEsIDI4LCA0LCAyMjYsIDIzLCAKKyAgICAyOCwgNCwgMjI1LCAyNDYsIDI4LCA0LCAyMjYsIDksIDI4LCA0LCAyMjYsIDIyLCAyOCwgNCwgMjI2LCAxMSwgMjgsIDQsIAorICAgIDIyNiwgMTIsIDI4LCA0LCAyMjUsIDI1MywgMjgsIDQsIDIyNSwgMjQyLCAyOCwgNCwgMjE2LCAxNDEsIDI4LCA0LCAyMTYsIAorICAgIDEyMiwgMjgsIDQsIDIxNiwgMTI1LCAyOCwgNCwgMjE2LCAxNDAsIDI4LCA0LCAyMTYsIDEzNSwgMjgsIDQsIDIxNiwgMTM2LCAKKyAgICAyOCwgNCwgMjE2LCAxMjQsIDI4LCA0LCAyMTYsIDEyMCwgMjgsIDQsIDIxNiwgNSwgMjgsIDQsIDIxNSwgMjUzLCAyOCwgNCwgCisgICAgMjE2LCAxLCAyOCwgNCwgMjE2LCA0LCAyOCwgNCwgMjE2LCAyLCAyOCwgNCwgMjE2LCAzLCAyOCwgNCwgMjE1LCAyNTUsIDI4LCAKKyAgICA0LCAyMTUsIDI1NCwgMjgsIDQsIDI0NCwgMTY0LCAyOCwgNCwgMjQzLCAyMDUsIDI4LCA0LCAyNDQsIDkwLCAyOCwgNCwgCisgICAgMjQ0LCAxNjMsIDI4LCA0LCAyNDQsIDExNiwgMjgsIDQsIDI0NCwgMTIzLCAyOCwgNCwgMjQ0LCAxMiwgMjgsIDQsIDI0MywgCisgICAgMTg4LCAyOCwgNCwgMTkzLCAyOCwgNCwgMjI1LCAzNSwgMjgsIDQsIDIyNSwgMjQwLCAyOCwgNCwgMjI2LCAyMTMsIDI4LCA0LCAKKyAgICAyMjYsIDg2LCAyOCwgNCwgMjI2LCA5NiwgMjgsIDQsIDIyNSwgMTUwLCAyOCwgNCwgMjI1LCAyLCAyOCwgNCwgMjIzLCAxMSwgCisgICAgMjgsIDQsIDIzMCwgMTAzLCAyOCwgNCwgMjQzLCAxODIsIDI4LCAzNywgMjQzLCAyOSwgMjQsIDMwLCAyMzMsIDQ3LCA3NywgCisgICAgMjgsIDM3LCAzMCwgMjMzLCA0NywgNzcsIDI4LCAzNywgMjQzLCAyOSwgNzcsIDI4LCAyMjIsIDkyLCA3NywgMjgsIDIxMywgCisgICAgMTk1LCAyOCwgMjQzLCAyMDAsIDIxOSwgNjksIDI4LCAyNDksIDE1NywgMjgsIDIyMSwgNzAsIDI4LCAyNDksIDE2NCwgMjgsIAorICAgIDIyNSwgNzksIDI0OSwgMTY0LCAyOCwgMjI0LCAxNTgsIDc3LCAyOCwgMjI2LCAxNDMsIDIyMSwgNTcsIDI4LCAyMSwgMTE2LCAKKyAgICAyOCwgMjEsIDEwOSwgMjgsIDIxLCAxNjYsIDI4LCAyMSwgMTYzLCAyOCwgMjEsIDE4MCwgMjgsIDIxLCAxODksIDI4LCAyMSwgCisgICAgMTk4LCAyOCwgMjEsIDE5NSwgMjgsIDIxLCAyMDAsIDI4LCA1MCwgMjE3LCAyMDAsIDI4LCA1MCwgMjE2LCAzOCwgMjgsIDUwLCAKKyAgICAyMTcsIDExNSwgMjgsIDUwLCAyNDMsIDI0MCwgMjgsIDUwLCAyNDQsIDgzLCAyOCwgNTAsIDIyMCwgMzksIDI4LCA1MCwgCisgICAgMjIxLCAzNywgMjgsIDUwLCAyNDUsIDE0MSwgMjgsIDUwLCAyMjksIDI2LCAyOCwgNTAsIDI0MCwgMjAwLCAyOCwgNTAsIAorICAgIDIxNywgMjAxLCAyMTcsIDEwMCwgMjgsIDQsIDIyMiwgOTYsIDIzMCwgMTE0LCAyOCwgNCwgMjMwLCAxMTAsIDI4LCA0LCAKKyAgICAyMzAsIDExMSwgMjgsIDQsIDIzMCwgMTEyLCAyOCwgNCwgMjIyLCA5NiwgMjUxLCAxMiwgMjgsIDQsIDI1MSwgOSwgMjgsIDQsIAorICAgIDI1MSwgMTAsIDI4LCA0LCAyNTEsIDExLCAyOCwgNCwgMjIyLCA5NiwgMjQzLCAxODgsIDI4LCA0LCAyNDMsIDE4NCwgMjgsIAorICAgIDQsIDI0MywgMTg1LCAyOCwgNCwgMjQzLCAxODYsIDI4LCA0LCAyMjIsIDk2LCAyMjUsIDIsIDI4LCA0LCAyMjQsIDI1NCwgCisgICAgMjgsIDQsIDIyNCwgMjU1LCAyOCwgNCwgMjI1LCAwLCAyOCwgMjE2LCAyNDIsIDE1MiwgMjEyLCAyMzgsIDI4LCAyMTYsIAorICAgIDI0MiwgMTUyLCAyNDcsIDI0OCwgMjgsIDIxNiwgMjQyLCAxNTIsIDIyMywgMTM1LCAyOCwgMjE2LCAyNDIsIDE1MiwgMjIwLCAKKyAgICAxNzUsIDIyMywgMTM1LCAyOCwgMjE2LCAyNDIsIDE1MiwgMjQ3LCAxODcsIDI4LCAyMTYsIDI0MiwgMTUyLCAyMzQsIDE3MCwgCisgICAgMjgsIDIxNiwgMjQyLCAxNTIsIDI1MCwgMzEsIDI4LCAyMTYsIDI0MiwgMTUyLCAyNDEsIDE2MiwgMjgsIDIxNiwgMjQyLCAKKyAgICAxNTIsIDI0NywgMjQ3LCAyOCwgMjE2LCAyNDIsIDE1MiwgMjMzLCAyMTUsIDE1OCwgMSwgNjEsIDE1OCwgMSwgNzQsIDE1OCwgCisgICAgMSwgNzIsIDE1OCwgMSwgNzUsIDE1OCwgMSwgNjksIDE1OCwgMSwgMjE1LCA3OSwgMTU4LCAxLCAyNDMsIDExMCwgMTU4LCAxLCAKKyAgICAxODEsIDE1OCwgMSwgMjQzLCAzOCwgMTU4LCAxLCAyNDIsIDE5MCwgMTU4LCAxLCAyNDIsIDE1MCwgMTU4LCAxLCAyNDIsIAorICAgIDkyLCAxNTgsIDEsIDI0MiwgNjAsIDE1OCwgMSwgMTU5LCAxNTgsIDEsIDI0MSwgMjIyLCAxNTgsIDEsIDI0MSwgMTY1LCAKKyAgICAxNTgsIDEsIDI0MSwgNTQsIDE1OCwgMSwgMjQwLCAyMTIsIDE1OCwgMSwgMjQwLCAxOTMsIDE1OCwgMSwgMjMzLCAxNTcsIAorICAgIDE1OCwgMSwgMjMzLCA4MiwgMTU4LCAxLCAyMzMsIDEzLCAxNTgsIDEsIDIzMiwgMjA4LCAxNTgsIDEsIDIzMiwgMTU2LCAKKyAgICAxNTgsIDEsIDIzMiwgMTMwLCAxNTgsIDEsIDE4OCwgMTU4LCAxLCAyMzEsIDE1NiwgMTU4LCAxLCAyMzEsIDQyLCAxNTgsIDEsIAorICAgIDIzMCwgMjMxLCAxNTgsIDEsIDIzMCwgMTcyLCAxNTgsIDEsIDIwNSwgMTU4LCAxLCAyNDEsIDc2LCAxNTgsIDEsIDIzMCwgCisgICAgMzEsIDE1OCwgMSwgMjI5LCAxODcsIDE1OCwgMSwgMjI5LCA2NCwgMTU4LCAxLCAyMjgsIDE4NSwgMTU4LCAxLCAyMjgsIDkyLCAKKyAgICAxNTgsIDEsIDIyOCwgMzMsIDE1OCwgMSwgMjI0LCAxNzQsIDE1OCwgMSwgMjI0LCAxNjEsIDE1OCwgMSwgMjI0LCAxNTQsIAorICAgIDE1OCwgMSwgMjI0LCAxNDYsIDE1OCwgMSwgMjI0LCAxMzUsIDE1OCwgMSwgMjI0LCAxMzMsIDE1OCwgMSwgMjIyLCAyMDIsIAorICAgIDE1OCwgMSwgMTk3LCAxNTgsIDEsIDIyMiwgMTAwLCAxNTgsIDEsIDIyMCwgMTE3LCAxNTgsIDEsIDIxOSwgMjQyLCAxNTgsIAorICAgIDEsIDIxOSwgMjcsIDE1OCwgMSwgMjE4LCAyMDMsIDE1OCwgMSwgMjQ4LCAxNjQsIDE1OCwgMSwgMjE4LCA1MiwgMTU4LCAxLCAKKyAgICAyNDgsIDQxLCAxNTgsIDEsIDIxNywgMjI5LCAxNTgsIDEsIDI0NywgMjExLCAxNTgsIDEsIDIxNywgNzEsIDE1OCwgMSwgCisgICAgMjQ3LCA5OSwgMTU4LCAxLCAyNDYsIDMzLCAxNTgsIDEsIDI0NiwgNSwgMTU4LCAxLCAyNDcsIDEwOCwgMTU4LCAxLCAyMTcsIAorICAgIDEyLCAxNTgsIDEsIDIxNywgMTEsIDE1OCwgMSwgMjE3LCAxLCAxNTgsIDEsIDIxNywgMCwgMTU4LCAxLCAyMTYsIDI1NSwgCisgICAgMTU4LCAxLCAyMTYsIDI1NCwgMTU4LCAxLCAyMTYsIDE0MSwgMTU4LCAxLCAyMTYsIDEzNiwgMTU4LCAxLCAyMTYsIDEyNSwgCisgICAgMTU4LCAxLCAyMTYsIDEyNCwgMTU4LCAxLCAyMTYsIDEyMiwgMTU4LCAxLCAyMTYsIDEyMSwgMTU4LCAxLCAyMTQsIDQ5LCAKKyAgICAxNTgsIDEsIDIxNCwgNiwgMTU4LCAxLCAyMTMsIDIzNSwgMTU4LCAxLCAyMTMsIDIxNCwgMTU4LCAxLCAyMTMsIDE4MywgCisgICAgMTU4LCAxLCAyMTMsIDE3MSwgMTU4LCAxLCAxODYsIDE1OCwgMSwgMjEzLCAzOCwgMTU4LCAxLCAyMTIsIDI1NSwgMTU4LCAxLCAKKyAgICAyMTIsIDIzNSwgMTU4LCAxLCAyMTIsIDIwMywgMTU4LCAxLCAyMTIsIDE2OSwgMTgsIDE5LCAyNDAsIDE2MCwgMTgsIDE5LCAKKyAgICA3NCwgMTgsIDE5LCAyNTQsIDE5NiwgMTgsIDE5LCA3MiwgMTgsIDE5LCAyMzYsIDI4LCAxOCwgMTksIDc1LCAxOCwgMTksIAorICAgIDIyNywgNDksIDE4LCAxOSwgMjEzLCAxMDQsIDIyNywgNDksIDE4LCAxOSwgNjYsIDI0NSwgMTY1LCAxOCwgMTksIDY2LCA3MiwgCisgICAgMTgsIDE5LCA2MSwgMTgsIDE5LCAyNTQsIDIzMiwgMTgsIDE5LCAyMTQsIDYsIDE4LCAxOSwgMTQ4LCAyMTQsIDYsIDE4LCAKKyAgICAxOSwgMjEzLCAyMzUsIDE4LCAxOSwgMTQ4LCAyMTMsIDIzNSwgMTgsIDE5LCAyMTMsIDIyNywgMTgsIDE5LCAxNDgsIDIxMywgCisgICAgMjI3LCAxOCwgMTksIDIxMywgMjE0LCAxOCwgMTksIDE0OCwgMjEzLCAyMTQsIDE4LCAxOSwgMjEzLCAyMDIsIDE4LCAxOSwgCisgICAgMTQ4LCAyMTMsIDIwMiwgMTgsIDE5LCAyMzAsIDExLCAyMTMsIDIwMiwgMTgsIDE5LCAyMTQsIDQ5LCAxOCwgMTksIDE0OCwgCisgICAgMjE0LCA0OSwgMTgsIDE5LCAyMTQsIDQ4LCAxOCwgMTksIDE0OCwgMjE0LCA0OCwgMTgsIDE5LCAyMzAsIDExLCAyMTQsIDQ4LCAKKyAgICAxOCwgMTksIDI1NCwgMTA4LCAxOCwgMTksIDIxMywgMTA0LCAyMTQsIDgyLCAxOCwgMTksIDI0MiwgMTU2LCAyMTksIDY5LCAKKyAgICAxOCwgMTksIDQwLCAxNzksIDE4LCAxOSwgNDAsIDI0MiwgMTEzLCAxOCwgMTksIDQwLCAyNTEsIDEwMSwgMTUxLCAyMjMsIAorICAgIDEzMCwgMTgsIDE5LCA0MCwgMjE2LCAyMjcsIDE1MSwgMjIzLCAxMzAsIDE4LCAxOSwgNDAsIDQ2LCAxNTEsIDIyMywgMTMwLCAKKyAgICAxOCwgMTksIDQwLCAyMjMsIDEzMCwgMTgsIDE5LCA0MCwgNTEsIDE3OSwgMTgsIDE5LCA0MCwgNTEsIDIyMCwgMTc1LCA3MSwgCisgICAgMjE5LCAzMiwgMTgsIDE5LCA0MCwgMjMxLCAzNywgMjQ3LCA3NCwgMTgsIDE5LCA0MCwgMjIwLCAxNzUsIDE5OSwgOTAsIDE4LCAKKyAgICAxOSwgNDAsIDIyNSwgMTU2LCAxOCwgMTksIDQwLCAxMTksIDIxOCwgMzYsIDE4LCAxOSwgMjQ1LCAxMDgsIDE4LCAxOSwgCisgICAgMjM1LCAyNTEsIDE4LCAxOSwgMjI3LCA2MiwgMTgsIDE5LCAyNTQsIDMyLCAxOCwgMTksIDIyNiwgOTYsIDE4LCAxOSwgMjI2LCAKKyAgICAyMTEsIDE4LCAxOSwgMjI1LCAyNDAsIDE4LCAxOSwgMjI1LCAyMDMsIDE4LCAxOSwgMjI1LCAxNTAsIDE4LCAxOSwgMjI1LCAKKyAgICAxMjksIDE4LCAxOSwgMjEzLCAxMDQsIDIyNSwgMTI5LCAxOCwgMTksIDY2LCAyNDEsIDIwNCwgMTgsIDE5LCA2NiwgMjQxLCAKKyAgICAxNjUsIDE4LCAxOSwgMTkzLCAxOCwgMTksIDIyNiwgMjEzLCAxOCwgMTksIDIyNSwgMCwgMTgsIDE5LCAxNDgsIDIyNSwgMCwgCisgICAgMTgsIDE5LCAyMjQsIDI1NCwgMTgsIDE5LCAxNDgsIDIyNCwgMjU0LCAxOCwgMTksIDIyNCwgMjUzLCAxOCwgMTksIDE0OCwgCisgICAgMjI0LCAyNTMsIDE4LCAxOSwgMjI0LCAyNTEsIDE4LCAxOSwgMTQ4LCAyMjQsIDI1MSwgMTgsIDE5LCAyMjQsIDI1MCwgMTgsIAorICAgIDE5LCAxNDgsIDIyNCwgMjUwLCAxOCwgMTksIDIyNSwgMiwgMTgsIDE5LCAxNDgsIDIyNSwgMiwgMTgsIDE5LCAyMjUsIDEsIAorICAgIDE4LCAxOSwgMTQ4LCAyMjUsIDEsIDE4LCAxOSwgMjEzLCAxMDQsIDIyNSwgMSwgMTgsIDE5LCAyMjYsIDIyOSwgMTgsIDE5LCAKKyAgICAxNDgsIDIyNiwgMjI5LCAxOCwgMTksIDY2LCAyNDIsIDQxLCAxOCwgMTksIDIxNywgMjI5LCAxOCwgMTksIDIxOCwgNDcsIAorICAgIDE4LCAxOSwgMjE3LCA3MSwgMTgsIDE5LCAyMTcsIDU3LCAxOCwgMTksIDEwOCwgMTgsIDE5LCAyMTYsIDIzMCwgMTgsIDE5LCAKKyAgICAyMTMsIDEwNCwgMjE2LCAyMzAsIDE4LCAxOSwgNjYsIDI0OCwgMjgsIDE4LCAxOSwgNjYsIDI0NywgMjExLCAxOCwgMTksIAorICAgIDIxOCwgNTIsIDE4LCAxOSwgMjE4LCA0OSwgMTgsIDE5LCAyMTYsIDQzLCAxOCwgMTksIDE0OCwgMjE2LCA0MywgMTgsIDE5LCAKKyAgICAyMTYsIDI3LCAxOCwgMTksIDE0OCwgMjE2LCAyNywgMTgsIDE5LCAyMTYsIDI2LCAxOCwgMTksIDE0OCwgMjE2LCAyNiwgMTgsIAorICAgIDE5LCAxMDksIDE4LCAxOSwgMTQ4LCAxMDksIDE4LCAxOSwgMjE2LCAyMCwgMTgsIDE5LCAxNDgsIDIxNiwgMjAsIDE4LCAxOSwgCisgICAgMjE2LCA0NSwgMTgsIDE5LCAxNDgsIDIxNiwgNDUsIDE4LCAxOSwgMjE2LCA0NCwgMTgsIDE5LCAxNDgsIDIxNiwgNDQsIDE4LCAKKyAgICAxOSwgMjMwLCAxMSwgMjE2LCA0NCwgMTgsIDE5LCAyMTgsIDk5LCAxOCwgMTksIDIxNiwgMTEyLCAxOCwgMTksIDIxNiwgOTYsIAorICAgIDE4LCAxOSwgMjE2LCA5NSwgMTgsIDE5LCAyMTYsIDExNSwgMTgsIDE5LCAyMzQsIDE4OCwgMTgsIDE5LCAyMzUsIDExLCAxOCwgCisgICAgMTksIDIzNCwgMTAxLCAxOCwgMTksIDIzNCwgOTIsIDE4LCAxOSwgMjM0LCAzNywgMTgsIDE5LCAyMzQsIDE5LCAxOCwgMTksIAorICAgIDIxMywgMTA0LCAyMzQsIDE5LCAxOCwgMTksIDE4MSwgMTgsIDE5LCAyMzUsIDE0LCAxOCwgMTksIDIzMywgMjAwLCAxOCwgCisgICAgMTksIDE0OCwgMjMzLCAyMDAsIDE4LCAxOSwgMjMzLCAxOTgsIDE4LCAxOSwgMTQ4LCAyMzMsIDE5OCwgMTgsIDE5LCAyMzMsIAorICAgIDE5NywgMTgsIDE5LCAxNDgsIDIzMywgMTk3LCAxOCwgMTksIDIzMywgMTk2LCAxOCwgMTksIDE0OCwgMjMzLCAxOTYsIDE4LCAKKyAgICAxOSwgMjMzLCAxOTUsIDE4LCAxOSwgMTQ4LCAyMzMsIDE5NSwgMTgsIDE5LCAyMzMsIDIwNCwgMTgsIDE5LCAxNDgsIDIzMywgCisgICAgMjA0LCAxOCwgMTksIDIzMywgMjAzLCAxOCwgMTksIDE0OCwgMjMzLCAyMDMsIDE4LCAxOSwgMjMwLCAxMSwgMjMzLCAyMDMsIAorICAgIDE4LCAxOSwgMjM1LCAyNywgMTgsIDE5LCAyMzMsIDIwNSwgMTgsIDE5LCAyMTksIDIxNCwgMjM0LCAxODIsIDE4LCAxOSwgCisgICAgMjE5LCAyMTQsIDIzNCwgOTMsIDE4LCAxOSwgMjE5LCAyMTQsIDIzNCwgMzIsIDE4LCAxOSwgMjE5LCAyMTQsIDIzNCwgMjUyLCAKKyAgICAxOCwgMTksIDI1MCwgMTI0LCAxOCwgMTksIDI1MCwgMjE3LCAxOCwgMTksIDI0OSwgMjQ0LCAxOCwgMTksIDI0OSwgMjM0LCAKKyAgICAxOCwgMTksIDI0OSwgMTc1LCAxOCwgMTksIDI0OSwgMTEzLCAxOCwgMTksIDIxMywgMTA0LCAyNDksIDExMywgMTgsIDE5LCAKKyAgICAyNTAsIDIxOSwgMTgsIDE5LCAyNTAsIDIxOCwgMTgsIDE5LCAyNDksIDIyLCAxOCwgMTksIDE0OCwgMjQ5LCAyMiwgMTgsIAorICAgIDE5LCAyNDksIDIwLCAxOCwgMTksIDE0OCwgMjQ5LCAyMCwgMTgsIDE5LCAyNDksIDE5LCAxOCwgMTksIDE0OCwgMjQ5LCAxOSwgCisgICAgMTgsIDE5LCAyNDksIDE4LCAxOCwgMTksIDE0OCwgMjQ5LCAxOCwgMTgsIDE5LCAyNDksIDE3LCAxOCwgMTksIDE0OCwgMjQ5LCAKKyAgICAxNywgMTgsIDE5LCAyNDksIDI0LCAxOCwgMTksIDE0OCwgMjQ5LCAyNCwgMTgsIDE5LCAyNDksIDIzLCAxOCwgMTksIDE0OCwgCisgICAgMjQ5LCAyMywgMTgsIDE5LCAyMzAsIDExLCAyNDksIDIzLCAxOCwgMTksIDI1MCwgMjUyLCAxOCwgMTksIDIyMiwgMTI3LCAKKyAgICAyMTcsIDE2MywgMTgsIDE5LCAyMzEsIDE1NiwgMTgsIDE5LCAyMzIsIDQwLCAxOCwgMTksIDIzMSwgNDIsIDE4LCAxOSwgCisgICAgMjMxLCAxNCwgMTgsIDE5LCAyMzAsIDIzMSwgMTgsIDE5LCAyMzAsIDIwMiwgMTgsIDE5LCAyMTMsIDEwNCwgMjMwLCAyMDIsIAorICAgIDE4LCAxOSwgMTg4LCAxOCwgMTksIDIzMiwgNDEsIDE4LCAxOSwgMjMwLCAxMTIsIDE4LCAxOSwgMTQ4LCAyMzAsIDExMiwgCisgICAgMTgsIDE5LCAyMzAsIDExMCwgMTgsIDE5LCAxNDgsIDIzMCwgMTEwLCAxOCwgMTksIDIzMCwgMTA5LCAxOCwgMTksIDE0OCwgCisgICAgMjMwLCAxMDksIDE4LCAxOSwgMjMwLCAxMDgsIDE4LCAxOSwgMTQ4LCAyMzAsIDEwOCwgMTgsIDE5LCAyMzAsIDEwNywgMTgsIAorICAgIDE5LCAxNDgsIDIzMCwgMTA3LCAxOCwgMTksIDIzMCwgMTE0LCAxOCwgMTksIDE0OCwgMjMwLCAxMTQsIDE4LCAxOSwgMjMwLCAKKyAgICAxMTMsIDE4LCAxOSwgMTQ4LCAyMzAsIDExMywgMTgsIDE5LCAyMzAsIDExLCAyMzAsIDExMywgMTgsIDE5LCAxODMsIDE4LCAKKyAgICAxOSwgMTQ4LCAxODMsIDE4LCAxOSwgMjMxLCA0NSwgMTgsIDE5LCAyNTMsIDEyMSwgMTgzLCAxOCwgMTksIDIyMiwgMTI3LCAKKyAgICAxODMsIDE4LCAxOSwgMjI5LCAxODcsIDE4LCAxOSwgMjMwLCA0MiwgMTgsIDE5LCAyMjksIDY0LCAxOCwgMTksIDIyOSwgMzksIAorICAgIDE4LCAxOSwgMjI4LCAxODUsIDE4LCAxOSwgMjI4LCAxNzUsIDE4LCAxOSwgMjEzLCAxMDQsIDIyOCwgMTc1LCAxOCwgMTksIAorICAgIDIwNSwgMTgsIDE5LCAyMzAsIDQzLCAxOCwgMTksIDIyOCwgMjksIDE4LCAxOSwgMTQ4LCAyMjgsIDI5LCAxOCwgMTksIDIyOCwgCisgICAgMzEsIDE4LCAxOSwgMTQ4LCAyMjgsIDMxLCAxOCwgMTksIDIyOCwgMzAsIDE4LCAxOSwgMTQ4LCAyMjgsIDMwLCAxOCwgMTksIAorICAgIDIzMCwgMTEsIDIyOCwgMzAsIDE4LCAxOSwgMjA0LCAxOCwgMTksIDY2LCAyMjksIDE2MSwgMTgsIDE5LCAyMjksIDY5LCAxOCwgCisgICAgMTksIDIzMywgODIsIDE4LCAxOSwgMjMzLCAxNTUsIDE4LCAxOSwgMjMzLCAxMywgMTgsIDE5LCAyMzIsIDI1NSwgMTgsIDE5LCAKKyAgICAyMzIsIDIwOCwgMTgsIDE5LCAyMzIsIDE4MCwgMTgsIDE5LCAyMTMsIDEwNCwgMjMyLCAxODAsIDE4LCAxOSwgMjMzLCAxNTcsIAorICAgIDE4LCAxOSwgMjMzLCAxNTYsIDE4LCAxOSwgMjMyLCAxMjcsIDE4LCAxOSwgMTQ4LCAyMzIsIDEyNywgMTgsIDE5LCAyMzIsIAorICAgIDEyNiwgMTgsIDE5LCAxNDgsIDIzMiwgMTI2LCAxOCwgMTksIDIzMiwgMTI1LCAxOCwgMTksIDE0OCwgMjMyLCAxMjUsIDE4LCAKKyAgICAxOSwgMjMyLCAxMjQsIDE4LCAxOSwgMTQ4LCAyMzIsIDEyNCwgMTgsIDE5LCAyMzIsIDEyMywgMTgsIDE5LCAxNDgsIDIzMiwgCisgICAgMTIzLCAxOCwgMTksIDIzMiwgMTI5LCAxOCwgMTksIDE0OCwgMjMyLCAxMjksIDE4LCAxOSwgMjMyLCAxMjgsIDE4LCAxOSwgCisgICAgMTQ4LCAyMzIsIDEyOCwgMTgsIDE5LCAxNTAsIDE4LCAxOSwgMTQ4LCAxNTAsIDE4LCAxOSwgMTM4LCAxNTAsIDE4LCAxOSwgCisgICAgMjIyLCAxMDAsIDE4LCAxOSwgMjIyLCAxOTgsIDE4LCAxOSwgMjIwLCAxMTcsIDE4LCAxOSwgMjIwLCAxMDEsIDE4LCAxOSwgCisgICAgMjE5LCAyNDIsIDE4LCAxOSwgMjE5LCAyMjYsIDE4LCAxOSwgMjEzLCAxMDQsIDIxOSwgMjI2LCAxOCwgMTksIDIyMiwgMjAyLCAKKyAgICAxOCwgMTksIDIyMiwgMjAwLCAxOCwgMTksIDIxOCwgMTk0LCAxOCwgMTksIDE0OCwgMjE4LCAxOTQsIDE4LCAxOSwgMjE4LCAKKyAgICAxODgsIDE4LCAxOSwgMTQ4LCAyMTgsIDE4OCwgMTgsIDE5LCAyMTgsIDE4NywgMTgsIDE5LCAxNDgsIDIxOCwgMTg3LCAxOCwgCisgICAgMTksIDIxOCwgMTgzLCAxOCwgMTksIDE0OCwgMjE4LCAxODMsIDE4LCAxOSwgMjE4LCAxODIsIDE4LCAxOSwgMTQ4LCAyMTgsIAorICAgIDE4MiwgMTgsIDE5LCAyMTgsIDE5OCwgMTgsIDE5LCAxNDgsIDIxOCwgMTk4LCAxOCwgMTksIDIxOCwgMTk3LCAxOCwgMTksIAorICAgIDE0OCwgMjE4LCAxOTcsIDE4LCAxOSwgMjMwLCAxMSwgMjE4LCAxOTcsIDE4LCAxOSwgMTk3LCAxOCwgMTksIDI1MywgMTIxLCAKKyAgICAxOTcsIDE4LCAxOSwgMjE4LCAxOTksIDE4LCAxOSwgMjUxLCAxNDEsIDE5NywgMTgsIDE5LCAyMzAsIDE5NywgMjIwLCAzNiwgCisgICAgMTgsIDE5LCAyMzAsIDExLCAyMjAsIDI3LCAxOCwgMTksIDIzMCwgMTEsIDIyMywgMiwgMTgsIDE5LCAyMzAsIDExLCAyMTksIAorICAgIDE2NywgMTgsIDE5LCAyMzAsIDExLCAyMTksIDI5LCAxOCwgMTksIDIzMCwgMTEsIDIyMCwgMjYsIDE4LCAxOSwgMjMwLCAxMSwgCisgICAgMjIyLCAxMDMsIDE4LCAxOSwgMjIwLCAyNDMsIDE4LCAxOSwgMjIwLCAyMTIsIDE4LCAxOSwgMjIwLCAyMDcsIDE4LCAxOSwgCisgICAgMjIwLCAxODcsIDE4LCAxOSwgMjIwLCAxODEsIDE4LCAxOSwgMjIxLCAyNCwgMTgsIDE5LCAyMjEsIDIwLCAxOCwgMTksIAorICAgIDIyMCwgMTMyLCAxOCwgMTksIDE0OCwgMjIwLCAxMzIsIDE4LCAxOSwgMjIwLCAxMzEsIDE4LCAxOSwgMTQ4LCAyMjAsIDEzMSwgCisgICAgMTgsIDE5LCAyMjAsIDEzMCwgMTgsIDE5LCAxNDgsIDIyMCwgMTMwLCAxOCwgMTksIDIyMCwgMTI5LCAxOCwgMTksIDE0OCwgCisgICAgMjIwLCAxMjksIDE4LCAxOSwgMjIwLCAxMjgsIDE4LCAxOSwgMTQ4LCAyMjAsIDEyOCwgMTgsIDE5LCAyMjAsIDEzNCwgMTgsIAorICAgIDE5LCAxNDgsIDIyMCwgMTM0LCAxOCwgMTksIDIyMCwgMTMzLCAxOCwgMTksIDE0OCwgMjIwLCAxMzMsIDE4LCAxOSwgMjIxLCAKKyAgICAyNiwgMTgsIDE5LCAyMTMsIDM4LCAxOCwgMTksIDIxMywgODksIDE4LCAxOSwgMjEyLCAyNTUsIDE4LCAxOSwgMjEyLCAyNDYsIAorICAgIDE4LCAxOSwgMjEyLCAyMzUsIDE4LCAxOSwgMjEyLCAyMjAsIDE4LCAxOSwgMjEzLCAxMDQsIDIxMiwgMjIwLCAxOCwgMTksIAorICAgIDE4NiwgMTgsIDE5LCAyMTMsIDkxLCAxOCwgMTksIDIxMiwgMTY2LCAxOCwgMTksIDE0OCwgMjEyLCAxNjYsIDE4LCAxOSwgCisgICAgMjEyLCAxNjUsIDE4LCAxOSwgMTQ4LCAyMTIsIDE2NSwgMTgsIDE5LCAyMTIsIDE2NCwgMTgsIDE5LCAxNDgsIDIxMiwgMTY0LCAKKyAgICAxOCwgMTksIDIxMiwgMTYzLCAxOCwgMTksIDE0OCwgMjEyLCAxNjMsIDE4LCAxOSwgMjEyLCAxNjIsIDE4LCAxOSwgMTQ4LCAKKyAgICAyMTIsIDE2MiwgMTgsIDE5LCAyMTIsIDE2OCwgMTgsIDE5LCAxNDgsIDIxMiwgMTY4LCAxOCwgMTksIDIxMiwgMTY3LCAxOCwgCisgICAgMTksIDE0OCwgMjEyLCAxNjcsIDE4LCAxOSwgMjMwLCAxMSwgMjEyLCAxNjcsIDE4LCAxOSwgMjEzLCAxMDUsIDE4LCAxOSwgCisgICAgMjUxLCAxODIsIDIxMywgMTA1LCAxOCwgMTksIDE0OCwgMjEzLCAxMDUsIDE4LCAxOSwgMjIyLCAxMjcsIDIxMiwgMjU1LCAKKyAgICAxOCwgMTksIDIyNCwgMjEsIDE4LCAxOSwgMjI0LCAxMTIsIDIyNCwgMjEsIDE4LCAxOSwgMTQ4LCAyMzMsIDgyLCAxOCwgMTksIAorICAgIDIyNCwgNzMsIDE4LCAxOSwgMjIzLCAxODgsIDE4LCAxOSwgMjIzLCAxMzYsIDE4LCAxOSwgMjIzLCAxMTIsIDE4LCAxOSwgCisgICAgMjIzLCA5OSwgMTgsIDE5LCAxNDgsIDIzMiwgMjA4LCAxOCwgMTksIDIwMywgMTgsIDE5LCAyMjQsIDc0LCAxOCwgMTksIAorICAgIDE0OCwgMjMzLCAxNTcsIDE4LCAxOSwgMjIzLCAyMCwgMTgsIDE5LCAxNDgsIDIyMywgMjAsIDE4LCAxOSwgMTQ5LCAxOCwgCisgICAgMTksIDE0OCwgMTQ5LCAxOCwgMTksIDEzOCwgMTQ5LCAxOCwgMTksIDI0NCwgMTIzLCAxOCwgMTksIDI0NCwgMTYxLCAxOCwgCisgICAgMTksIDI0NCwgOTAsIDE4LCAxOSwgMjQ0LCA3NywgMTgsIDE5LCAyNDQsIDEyLCAxOCwgMTksIDI0NCwgMywgMTgsIDE5LCAKKyAgICAyNDQsIDE2NCwgMTgsIDE5LCAyNDQsIDE2MywgMTgsIDE5LCAyNDMsIDE4NywgMTgsIDE5LCAxNDgsIDI0MywgMTg3LCAxOCwgCisgICAgMTksIDI0NCwgMjMwLCAxOCwgMTksIDIxNywgMTQ4LCAxOCwgMTksIDIzMCwgOTYsIDIxNywgMTQ4LCAxOCwgMTksIDIxNywgCisgICAgMTI4LCAxOCwgMTksIDIzMCwgOTYsIDIxNywgMTI4LCAxOCwgMTksIDIxNywgMTI0LCAxOCwgMTksIDIzMCwgOTYsIDIxNywgCisgICAgMTI0LCAxOCwgMTksIDIxNywgMTA5LCAxOCwgMTksIDIxNywgMTA2LCAxOCwgMTksIDIxNywgMTYxLCAxOCwgMTksIDIxNywgCisgICAgMTYwLCAxOCwgMTksIDIxNywgODEsIDE4LCAxOSwgMTQ4LCAyMTcsIDgxLCAxOCwgMTksIDIxNywgMTYzLCAxOCwgMTksIAorICAgIDIxNiwgMTAzLCAxOCwgMTksIDIxNiwgMTAxLCAxOCwgMTksIDIxNiwgMTAwLCAxOCwgMTksIDIxNiwgMTA1LCAxOCwgMTksIAorICAgIDIxNiwgMTA2LCAxOCwgMTksIDIxNiwgMTgsIDE4LCAxOSwgMjE2LCAxNywgMTgsIDE5LCAyMTYsIDE2LCAxOCwgMTksIDIxNiwgCisgICAgMTksIDE4LCAxOSwgMjI4LCA0OSwgMjQxLCAyMjIsIDE4LCAxOSwgMjI4LCA0OSwgMjQxLCAxNjUsIDE4LCAxOSwgMjI4LCAKKyAgICA0OSwgMjQxLCAxNDcsIDE4LCAxOSwgMjI4LCA0OSwgMjQxLCA1NCwgMTgsIDE5LCAyMjgsIDQ5LCAyNDEsIDM5LCAxOCwgMTksIAorICAgIDIyOCwgNDksIDE1OSwgMTgsIDE5LCAyMjgsIDQ5LCAyNDIsIDI3LCAxOCwgMTksIDIyOCwgNDksIDI0MiwgNDEsIDE4LCAxOSwgCisgICAgMjI4LCA0OCwgMjQyLCA0MSwgMTgsIDE5LCAyNDEsIDE0MCwgMTgsIDE5LCAyMjQsIDIyOCwgMTgsIDE5LCAyMjQsIDE5OCwgCisgICAgMTgsIDE5LCAyMjQsIDE5MywgMTgsIDE5LCAyMjQsIDE4NywgMTgsIDE5LCAyMjQsIDE4MiwgMTgsIDE5LCAyMjQsIDIzMiwgCisgICAgMTgsIDE5LCAyMjQsIDIzMSwgMTgsIDE5LCAyMjQsIDI0MCwgMTgsIDE5LCAyMTcsIDgsIDE4LCAxOSwgMjE3LCA2LCAxOCwgCisgICAgMTksIDIxNywgNSwgMTgsIDE5LCAyMTcsIDksIDE4LCAxOSwgMTQ4LCAyMjQsIDIxLCAxOCwgMTksIDE0OCwgMjIzLCAxODgsIAorICAgIDE4LCAxOSwgMTQ4LCAyMjMsIDExMiwgMTgsIDE5LCAxNDgsIDIwMywgMTgsIDE5LCAyMjksIDE1NywgMTgsIDE5LCAyMjksIAorICAgIDExMywgMTgsIDE5LCAyMjksIDEwOSwgMTgsIDE5LCAyMjksIDkwLCAxOCwgMTksIDIyOSwgODUsIDE4LCAxOSwgMjI5LCAKKyAgICAxNTksIDE4LCAxOSwgMjI5LCAxNTgsIDE4LCAxOSwgMjI5LCAxNjEsIDE4LCAxOSwgMjI4LCAxOTYsIDE4LCAxOSwgMjIyLCAKKyAgICAxMjcsIDIyMCwgMjQzLCAxOCwgMTksIDIyMiwgMTI3LCAyMjAsIDIxMiwgMTgsIDE5LCAyMjIsIDEyNywgMjIwLCAxODcsIAorICAgIDE4LCAxOSwgMjIyLCAxMjcsIDIyMSwgMjQsIDE4LCAxOSwgMjEzLCAyMDAsIDIxNywgMTQ4LCAxOCwgMTksIDIxMywgMjAwLCAKKyAgICAyMTcsIDEyOCwgMTgsIDE5LCAyMTMsIDIwMCwgMjE3LCAxMDksIDE4LCAxOSwgMjEzLCAyMDAsIDIxNywgMTYxLCAxOCwgMTksIAorICAgIDIxMywgMjAwLCAyMTcsIDE2MywgMTgsIDE5LCAyMzMsIDE5LCAxOCwgMTksIDIzMywgMTgsIDE4LCAxOSwgMjMzLCAxNywgCisgICAgMTgsIDE5LCAyMzMsIDE2LCAxOCwgMTksIDIzMywgMjUsIDE4LCAxOSwgMjMzLCAyNCwgMTgsIDE5LCAyMzMsIDI2LCAxOCwgCisgICAgMTksIDIxNywgMTYyLCAyMTcsIDE0OCwgMTgsIDE5LCAyMTcsIDE2MiwgMjE3LCAxMjgsIDE4LCAxOSwgMjE3LCAxNjIsIAorICAgIDIxNywgMTI0LCAxOCwgMTksIDIxNywgMTYyLCAyMTcsIDEwOSwgMTgsIDE5LCAyMTcsIDE2MiwgMjE3LCAxMDYsIDE4LCAxOSwgCisgICAgMjE3LCAxNjIsIDIxNywgMTYxLCAxOCwgMTksIDIxNywgMTYyLCAyMTcsIDE2MCwgMTgsIDE5LCAyMTcsIDE2MiwgMjE3LCAKKyAgICAxNjMsIDE4LCAxOSwgMjU0LCA5NywgMjUzLCA3NCwgMTgsIDE5LCAyNTEsIDE0MSwgNzQsIDE4LCAxOSwgMjUxLCAxNDEsIAorICAgIDcyLCAxOCwgMTksIDI1MSwgMTQxLCA3NSwgMTgsIDE5LCAyNTEsIDE0MSwgNjEsIDE4LCAxOSwgMjUxLCAxNDEsIDIxNCwgNiwgCisgICAgMTgsIDE5LCAyNTEsIDE0MSwgMjEzLCAyMzUsIDE4LCAxOSwgMjUxLCAxNDEsIDIxMywgMjE0LCAxOCwgMTksIDI1MSwgMTQxLCAKKyAgICAyMTQsIDQ5LCAxOCwgMTksIDI1MSwgMTQxLCAyMjksIDE4NywgMTgsIDE5LCAyNTEsIDE0MSwgMjI5LCA2NCwgMTgsIDE5LCAKKyAgICAyNTEsIDE0MSwgMjI4LCAxODUsIDE4LCAxOSwgMjUxLCAxNDEsIDIwNSwgMTgsIDE5LCAyNTEsIDE0MSwgMjM0LCAxODgsIAorICAgIDE4LCAxOSwgMjUxLCAxNDEsIDIzNCwgMTAxLCAxOCwgMTksIDI1MSwgMTQxLCAyMzQsIDM3LCAxOCwgMTksIDI1MSwgMTQxLCAKKyAgICAxODEsIDE4LCAxOSwgMjIyLCAxMjcsIDI0MSwgMjIyLCAxOCwgMTksIDIyMiwgMTI3LCAyNDEsIDE2NSwgMTgsIDE5LCAyMjIsIAorICAgIDEyNywgMjQxLCA1NCwgMTgsIDE5LCAyMjIsIDEyNywgMTU5LCAxOCwgMTksIDY2LCAyNDIsIDE5NiwgMTgsIDE5LCA2NiwgCisgICAgMjQyLCAyMDAsIDE4LCAxOSwgNjYsIDI0MiwgMjEyLCAxOCwgMTksIDY2LCAyNDIsIDIxMSwgMTgsIDE5LCA2NiwgMjQyLCAKKyAgICAyMDEsIDE4LCAxOSwgNjYsIDI0MiwgMjI1LCAxOCwgMTksIDY2LCAyMjMsIDUxLCAxOCwgMTksIDY2LCAyMjMsIDExMiwgMTgsIAorICAgIDE5LCA2NiwgMjI0LCAyMSwgMTgsIDE5LCA2NiwgMjI0LCAxLCAxOCwgMTksIDY2LCAyMjMsIDE4OCwgMTgsIDE5LCA2NiwgCisgICAgMjAzLCAxOCwgMTksIDY2LCAyMTMsIDE4MywgMTgsIDE5LCA2NiwgMjEzLCAyMTQsIDE4LCAxOSwgNjYsIDIxNCwgNiwgMTgsIAorICAgIDE5LCA2NiwgMjE0LCAxLCAxOCwgMTksIDY2LCAyMTMsIDIzNSwgMTgsIDE5LCA2NiwgMjE0LCA0OSwgMTgsIDE5LCA2NiwgCisgICAgMjQwLCAxODYsIDE4LCAxOSwgNjYsIDI0MCwgMTg3LCAxOCwgMTksIDY2LCAyNDAsIDE5MCwgMTgsIDE5LCA2NiwgMjQwLCAKKyAgICAxODksIDE4LCAxOSwgNjYsIDI0MCwgMTg4LCAxOCwgMTksIDY2LCAyNDAsIDE5MiwgMTgsIDE5LCA2NiwgMjE3LCA5MCwgMTgsIAorICAgIDE5LCA2NiwgMjE3LCAxMDksIDE4LCAxOSwgNjYsIDIxNywgMTQ4LCAxOCwgMTksIDY2LCAyMTcsIDE0NywgMTgsIDE5LCA2NiwgCisgICAgMjE3LCAxMjgsIDE4LCAxOSwgNjYsIDIxNywgMTYxLCAxOCwgMTksIDY2LCAyMTYsIDg2LCAxOCwgMTksIDY2LCAyMTYsIDk1LCAKKyAgICAxOCwgMTksIDY2LCAyMTYsIDExMiwgMTgsIDE5LCA2NiwgMjE2LCAxMTEsIDE4LCAxOSwgNjYsIDIxNiwgOTYsIDE4LCAxOSwgCisgICAgNjYsIDIxNiwgMTE1LCAxOCwgMTksIDY2LCAyMjUsIDM1LCAxOCwgMTksIDY2LCAyMjUsIDE1MCwgMTgsIDE5LCA2NiwgMjI2LCAKKyAgICA5NiwgMTgsIDE5LCA2NiwgMjI2LCA4NiwgMTgsIDE5LCA2NiwgMjI1LCAyNDAsIDE4LCAxOSwgNjYsIDE5MywgMTgsIDE5LCAKKyAgICA2NiwgMjI2LCAyMjksIDE4LCAxOSwgNjYsIDI0MiwgOTIsIDE4LCAxOSwgNjYsIDI0MiwgMTUwLCAxOCwgMTksIDY2LCAyNDMsIAorICAgIDM4LCAxOCwgMTksIDY2LCAyNDMsIDMxLCAxOCwgMTksIDY2LCAyNDIsIDE5MCwgMTgsIDE5LCA2NiwgMjQzLCAxMTAsIDE4LCAKKyAgICAxOSwgNjYsIDIzNCwgMTA4LCAxOCwgMTksIDY2LCAyMzQsIDExMywgMTgsIDE5LCA2NiwgMjM0LCAxMjUsIDE4LCAxOSwgNjYsIAorICAgIDIzNCwgMTI0LCAxOCwgMTksIDY2LCAyMzQsIDExOCwgMTgsIDE5LCA2NiwgMjM0LCAxMzgsIDE4LCAxOSwgNjYsIDIzNCwgCisgICAgNTAsIDE4LCAxOSwgNjYsIDIzNCwgNTEsIDE4LCAxOSwgNjYsIDIzNCwgNTQsIDE4LCAxOSwgNjYsIDIzNCwgNTMsIDE4LCAKKyAgICAxOSwgNjYsIDIzNCwgNTIsIDE4LCAxOSwgNjYsIDIzNCwgNTUsIDE4LCAxOSwgNjYsIDIzNCwgNTYsIDE4LCAxOSwgNjYsIAorICAgIDIyOCwgOTIsIDE4LCAxOSwgNjYsIDIyOCwgMTg1LCAxOCwgMTksIDY2LCAyMjksIDE4NywgMTgsIDE5LCA2NiwgMjI5LCAKKyAgICAxODQsIDE4LCAxOSwgNjYsIDIyOSwgNjQsIDE4LCAxOSwgNjYsIDIwNSwgMTgsIDE5LCA2NiwgMjMwLCAxNzIsIDE4LCAxOSwgCisgICAgNjYsIDIzMCwgMjMxLCAxOCwgMTksIDY2LCAyMzEsIDE1NiwgMTgsIDE5LCA2NiwgMjMxLCAxNDUsIDE4LCAxOSwgNjYsIAorICAgIDIzMSwgNDIsIDE4LCAxOSwgNjYsIDE4OCwgMTgsIDE5LCA2NiwgMjEyLCAyMDMsIDE4LCAxOSwgNjYsIDIxMiwgMjM1LCAxOCwgCisgICAgMTksIDY2LCAyMTMsIDM4LCAxOCwgMTksIDY2LCAyMTMsIDM1LCAxOCwgMTksIDY2LCAyMTIsIDI1NSwgMTgsIDE5LCA2NiwgCisgICAgMTg2LCAxOCwgMTksIDY2LCAyMzUsIDU0LCAxOCwgMTksIDIyMiwgMTI3LCAyMzUsIDU0LCAxOCwgMTksIDY2LCAyMzUsIDcxLCAKKyAgICAxOCwgMTksIDY2LCAyMzUsIDEyNywgMTgsIDE5LCA2NiwgMjM1LCAxMjUsIDE4LCAxOSwgNjYsIDIzNSwgMTEwLCAxOCwgMTksIAorICAgIDIyMiwgMTI3LCAyMzUsIDExMCwgMTgsIDE5LCA2NiwgMjM1LCAxMzksIDE4LCAxOSwgNjYsIDIzNSwgODQsIDE4LCAxOSwgCisgICAgNjYsIDIzNSwgODgsIDE4LCAxOSwgNjYsIDIzNSwgOTgsIDE4LCAxOSwgNjYsIDIzNSwgOTcsIDE4LCAxOSwgNjYsIDIzNSwgCisgICAgOTYsIDE4LCAxOSwgNjYsIDIzNSwgOTksIDE4LCAxOSwgNjYsIDIzMiwgMTU2LCAxOCwgMTksIDY2LCAyMzIsIDIwOCwgMTgsIAorICAgIDE5LCA2NiwgMjMzLCA4MiwgMTgsIDE5LCA2NiwgMjMzLCA3NCwgMTgsIDE5LCA2NiwgMjMzLCAxMywgMTgsIDE5LCA2NiwgCisgICAgMjMzLCAxNTcsIDE4LCAxOSwgNjYsIDI0NywgMTAzLCAxOCwgMTksIDY2LCAyNDcsIDEwNCwgMTgsIDE5LCA2NiwgMjQ3LCAKKyAgICAxMDcsIDE4LCAxOSwgNjYsIDI0NywgMTA2LCAxOCwgMTksIDY2LCAyNDcsIDEwNSwgMTgsIDE5LCA2NiwgMjQ3LCAxMDgsIAorICAgIDE4LCAxOSwgNjYsIDIzMywgMTUsIDE4LCAxOSwgNjYsIDIzMywgMTcsIDE4LCAxOSwgNjYsIDIzMywgMjEsIDE4LCAxOSwgCisgICAgNjYsIDIzMywgMjAsIDE4LCAxOSwgNjYsIDIzMywgMTksIDE4LCAxOSwgNjYsIDIzMywgMjUsIDE4LCAxOSwgNjYsIDIxNywgCisgICAgMywgMTgsIDE5LCA2NiwgMjE3LCA1LCAxOCwgMTksIDY2LCAyMTcsIDgsIDE4LCAxOSwgNjYsIDIxNywgNywgMTgsIDE5LCAKKyAgICA2NiwgMjE3LCA2LCAxOCwgMTksIDY2LCAyMTcsIDksIDE4LCAxOSwgNjYsIDIxNiwgMjU1LCAxOCwgMTksIDY2LCAyMTcsIDAsIAorICAgIDE4LCAxOSwgNjYsIDIxNywgMTEsIDE4LCAxOSwgNjYsIDIxNywgMTAsIDE4LCAxOSwgNjYsIDIxNywgMSwgMTgsIDE5LCA2NiwgCisgICAgMjE3LCAxMiwgMTgsIDE5LCA2NiwgMjEyLCA4LCAxOCwgMTksIDY2LCAyMTIsIDE2LCAxOCwgMTksIDY2LCAyMTIsIDg3LCAKKyAgICAxOCwgMTksIDY2LCAyMTIsIDg1LCAxOCwgMTksIDY2LCAyMTIsIDM3LCAxOCwgMTksIDY2LCAyMTIsIDEwOSwgMTgsIDE5LCAKKyAgICA2NiwgMjEyLCAxNTIsIDE4LCAxOSwgNjYsIDcwLCAyMTIsIDE1MiwgMTgsIDE5LCA2NiwgMjQ1LCAyMzksIDE4LCAxOSwgNjYsIAorICAgIDI0NSwgMjQwLCAxOCwgMTksIDY2LCAyNDUsIDI0NywgMTgsIDE5LCA2NiwgMjQ1LCAyNDYsIDE4LCAxOSwgNjYsIDI0NSwgCisgICAgMjQyLCAxOCwgMTksIDY2LCAyNDUsIDI0OSwgMTgsIDE5LCA2NiwgMjE5LCAyNywgMTgsIDE5LCA2NiwgMjE5LCAyNDIsIDE4LCAKKyAgICAxOSwgNjYsIDIyMiwgMTAwLCAxOCwgMTksIDY2LCAyMjIsIDg5LCAxOCwgMTksIDY2LCAyMjAsIDExNywgMTgsIDE5LCA2NiwgCisgICAgMjIyLCAyMDIsIDE4LCAxOSwgNjYsIDIyMCwgMTUwLCAxOCwgMTksIDY2LCAyMjAsIDE4NywgMTgsIDE5LCA2NiwgMjIwLCAKKyAgICAyNDMsIDE4LCAxOSwgNjYsIDIyMCwgMjQxLCAxOCwgMTksIDY2LCAyMjAsIDIxMiwgMTgsIDE5LCA2NiwgMjIxLCAyNCwgMTgsIAorICAgIDE5LCA2NiwgMjIxLCAyNiwgMTgsIDE5LCA2NiwgMjE2LCAxMjIsIDE4LCAxOSwgNjYsIDIxNiwgMTI0LCAxOCwgMTksIDY2LCAKKyAgICAyMTYsIDEzNiwgMTgsIDE5LCA2NiwgMjE2LCAxMzUsIDE4LCAxOSwgNjYsIDIxNiwgMTI1LCAxOCwgMTksIDY2LCAyMTYsIAorICAgIDE0MSwgMTgsIDE5LCA2NiwgMjUwLCA2LCAxOCwgMTksIDY2LCAyNTAsIDIzLCAxOCwgMTksIDY2LCAyNTAsIDY3LCAxOCwgCisgICAgMTksIDY2LCAyNTAsIDY0LCAxOCwgMTksIDY2LCAyNTAsIDQ3LCAxOCwgMTksIDY2LCAyNTAsIDkyLCAxOCwgMTksIDY2LCAKKyAgICAyMTYsIDg5LCAxOCwgMTksIDY2LCAyMTYsIDkwLCAxOCwgMTksIDY2LCAyMTYsIDkzLCAxOCwgMTksIDY2LCAyMTYsIDkyLCAKKyAgICAxOCwgMTksIDY2LCAyMTYsIDkxLCAxOCwgMTksIDY2LCAyMTYsIDk0LCAxOCwgMTksIDI1MCwgNDgsIDUyLCAxOCwgMTksIAorICAgIDI0MywgMjAwLCAyMTksIDY5LCAxOCwgMTksIDIyNCwgMjI0LCAxOCwgMTksIDIyOSwgMTU2LCAxOCwgMTksIDIyOCwgMTkzLCAKKyAgICAxOCwgMTksIDIyOCwgMTkyLCAxOCwgMTksIDIyOCwgMTkxLCAxOCwgMTksIDIyOCwgMTkwLCAxOCwgMTksIDIyOCwgMTk1LCAKKyAgICAxOCwgMTksIDIyOCwgMTk0LCAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDc5LCAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDc4LCAKKyAgICAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDc3LCAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDc2LCAxOCwgMTksIDIxMywgMjAwLCAKKyAgICAyMTcsIDc1LCAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDgyLCAxOCwgMTksIDIxMywgMjAwLCAyMTcsIDgxLCAxOCwgMTksIAorICAgIDIxMywgMjAwLCA0MCwgMjE3LCAxNjMsIDE4LCAxOSwgMjUxLCAxNDEsIDIxNCwgODIsIDIyNywgOTIsIDIxOSwgMjA3LCA3NywgCisgICAgMjI3LCA5MiwgMSwgMjUxLCAyMjQsIDIyNywgOTIsIDEsIDIzMiwgMTQ1LCAyMjcsIDkyLCAxLCAyNDQsIDEyMCwgMjI3LCAKKyAgICA5MiwgMSwgMjIyLCAxODYsIDIyNywgOTIsIDEsIDIyOSwgMjQsIDIyNywgOTIsIDEsIDIxNSwgMTk1LCAyMjcsIDkyLCAxLCAKKyAgICAyNDgsIDE0MiwgMjI3LCA5MiwgMSwgMjE3LCAzMywgMjI3LCA5MiwgMSwgMjQ5LCAxNjcsIDIyNywgOTIsIDEsIDI1MCwgCisgICAgMTE0LCAyMjcsIDkyLCAxLCAyMzAsIDE2MSwgMjI3LCA5MiwgMSwgMjQyLCAxMzIsIDIyNywgOTIsIDEsIDIyOSwgMTQ3LCAKKyAgICAyMjcsIDkyLCAxLCAyMTksIDYyLCAyMjcsIDkyLCAxLCAyMjMsIDQ2LCAyMjcsIDkyLCAxLCAyNTQsIDEwNSwgMjI3LCA5MiwgCisgICAgMSwgMjI3LCA1MywgMjI3LCA5MiwgMSwgMjE1LCAxMjEsIDIyNywgOTIsIDEsIDI0NSwgMTg3LCAyMjcsIDkyLCAxLCAyMzUsIAorICAgIDE4NiwgMjI3LCA5MiwgMSwgMjQ1LCAxODgsIDIyNywgOTIsIDEsIDIyNywgMjQsIDIyNywgOTIsIDEsIDIxNSwgMTc2LCAKKyAgICAyMjcsIDkyLCAxLCAyMzYsIDM0LCAyMjcsIDkyLCAxLCAyNDUsIDE4NSwgMjI3LCA5MiwgMSwgMjI2LCA3NywgMjI3LCA5MiwgCisgICAgMjQ0LCAxMTksIDc3LCAyMjcsIDkyLCAyMjMsIDIwMiwgMjQ0LCAxMTksIDc3LCAxNjgsIDEsIDI0NCwgMTEwLCAyNDQsIAorICAgIDEwMiwgMjQ0LCAxMjQsIDI0NCwgMjMwLCAxNjgsIDEsIDIxNSwgNzksIDE2OCwgMSwgMjE1LCAxMDYsIDIxNSwgMTIyLCA2OSwgCisgICAgMTY4LCAxLCAyMTIsIDIwNSwgMTY4LCAxLCAyMTMsIDEwNSwgMTY4LCAxLCAyMTQsIDgyLCAxNjgsIDEsIDIxNywgODQsIAorICAgIDIxNywgODMsIDIxNywgMTA0LCAxNjgsIDEsIDI0NSwgMjUsIDE2OCwgMSwgMjU0LCA0LCA2MSwgMTY4LCAxLCAyMjcsIDEwLCAKKyAgICA3NSwgMTY4LCAxLCAyNTQsIDE3NywgNjEsIDE2OCwgMSwgMjU0LCAxMzIsIDE2OCwgMSwgMjMyLCAxODYsIDc1LCAxNjgsIDEsIAorICAgIDIyMCwgMTY4LCA3NSwgMTY4LCAxLCA3NSwgMTY4LCAxLCAyMjcsIDk5LCAxNjgsIDEsIDIyNywgNjIsIDE2OCwgMSwgMjI0LCAKKyAgICA1NSwgMjI0LCA2NywgMjIzLCAyNDQsIDE0OSwgMTY4LCAxLCAyMzQsIDE5OSwgMTY4LCAxLCAyNTAsIDExMSwgMTY4LCAxLCAKKyAgICAyMzQsIDIwMCwgMjM1LCAyNywgMTY4LCAxLCAyNDMsIDE3NywgMTY4LCAxLCAyNDUsIDk2LCAxNjgsIDEsIDI0MywgMzQsIAorICAgIDI0MiwgNDcsIDI0MywgMTc3LCAxNjgsIDEsIDI0MywgNzIsIDE2OCwgMSwgMjEzLCAxNzYsIDIxMywgMTcwLCAyMTQsIDgyLCAKKyAgICAxNjgsIDEsIDI0MiwgMTksIDI0MiwgNDEsIDE2OCwgMSwgMjQyLCAyMywgMjQyLCA0MSwgMTY4LCAxLCAyMzIsIDE4OCwgCisgICAgMjQyLCA0MSwgMTY4LCAxLCAyMjAsIDE3MSwgMjQyLCA0MSwgMTY4LCAxLCAyMzAsIDcsIDIyOCwgMTgsIDIzMCwgOCwgMjA0LCAKKyAgICAxNjgsIDEsIDIyMCwgMTY5LCAyMDQsIDE2OCwgMSwgMjQ2LCA2OSwgMTY4LCAxLCAyMzUsIDE2NiwgMjM1LCAxNzAsIDIzNSwgCisgICAgMTYwLCA3MiwgMTY4LCAxLCA3NCwgMTY4LCAxLCAyMzUsIDExOCwgMjM1LCAxNDIsIDE2OCwgMSwgMjQzLCAxOSwgMTY4LCAxLCAKKyAgICAyMzIsIDE4OSwgMjU0LCAxNDgsIDE2OCwgMSwgMjIwLCAxNzMsIDYxLCAxNjgsIDEsIDIzNSwgMTUyLCAyNDUsIDcyLCAxNjgsIAorICAgIDEsIDIyNiwgNDAsIDIyNiwgNjEsIDIyNiwgMjI5LCAxNjgsIDEsIDI1NCwgNzIsIDI0NSwgNzEsIDE2OCwgMSwgMjE5LCAKKyAgICAyMTEsIDE5NywgMTY4LCAxLCAyMjAsIDEwNSwgMjMyLCAxODUsIDE5NywgMTY4LCAxLCAyMjAsIDE2NywgMTk3LCAxNjgsIDEsIAorICAgIDI1MCwgMjUyLCAxNjgsIDEsIDIxMiwgMTUyLCAxNjgsIDEsIDIxNywgMTYsIDIxNywgMjYsIDIxNiwgNywgMjE4LCA5OSwgCisgICAgMTY4LCAxLCAyMjAsIDE2NiwgMjE4LCA5OSwgMTY4LCAxLCAyNDksIDMsIDE2OCwgMSwgMjUxLCAyMDgsIDI1MSwgMjExLCAKKyAgICAyNTEsIDE0NywgMjUzLCA3NCwgMTY4LCAxLCAyMjAsIDE3MiwgMjUzLCA3NCwgMTY4LCAxLCAyNDYsIDY4LCAxNjgsIDEsIAorICAgIDIyNywgMzYsIDE2OCwgMSwgMjQ1LCAxNTMsIDI0NSwgMTU1LCA3NCwgMTY4LCAxLCAyMzEsIDI0MSwgMjMxLCAyNDksIDE4MywgCisgICAgMTY4LCAxLCAyMzIsIDE4NywgMTgzLCAxNjgsIDEsIDIyMCwgMTcwLCAxODMsIDE2OCwgMSwgMjMzLCA5NywgMjMzLCAxMzcsIAorICAgIDIzMiwgMTk2LCAxNTAsIDE2OCwgMSwgMjQ2LCA3MCwgMTY4LCAxLCAyMzUsIDIyNywgMTY4LCAxLCAyMzUsIDIyOCwgMTY4LCAKKyAgICAxLCAyNDgsIDE1MywgMjQ4LCAxNTgsIDI0OSwgMywgMTY4LCAxLCAyMjcsIDYsIDI0NSwgMjQsIDc1LCAxNjgsIDEsIDI0NSwgCisgICAgMTgzLCAxNjgsIDEsIDIzNSwgMTg1LCAxNjgsIDEsIDI0OSwgMjEsIDE2OCwgMSwgMjUwLCAyMDUsIDE2OCwgMSwgMjUwLCAKKyAgICAxMjMsIDE2OCwgMSwgMjE5LCAxMDAsIDE2OCwgMSwgMjMyLCAxODQsIDE2OCwgMSwgMjIwLCAxNjUsIDE2OCwgMSwgMjQwLCAKKyAgICAxMDMsIDE2OCwgMSwgMjI0LCAyNDAsIDE2OCwgMSwgMjEzLCAxNjYsIDE2OCwgMjIwLCA4MSwgMjI1LCAyNiwgMTY4LCAyMzAsIAorICAgIDE1NSwgMjI1LCAyNiwgMTY4LCAyNDksIDcxLCAyMjUsIDI2LCAxNjgsIDI1MywgMTc3LCA4NywgMTY4LCAyMTYsIDQ3LCA4NywgCisgICAgMTY4LCAyNTEsIDIyMywgODcsIDIxOCwgMzIsIDEsIDYxLCAyMTgsIDMyLCAxLCA3MiwgMjE4LCAzMiwgMSwgNjksIDIxOCwgCisgICAgMzIsIDEsIDE4MSwgMjE4LCAzMiwgMSwgMjQzLCAxMTAsIDIxOCwgMzIsIDEsIDIyOSwgMTU5LCAyMTgsIDMyLCAxLCAyMTgsIAorICAgIDUyLCAyMTgsIDMyLCAxLCAyNDgsIDE2NCwgMjE4LCAzMiwgMSwgMjA1LCAyMTgsIDMyLCAxLCAxOTMsIDIxOCwgMzIsIDEsIAorICAgIDI1MiwgMTA3LCAyMTgsIDMyLCAxLCAxODgsIDIxOCwgMzIsIDEsIDE4NiwgMjE4LCAzMiwgMSwgMjMzLCAxNTcsIDIxOCwgCisgICAgMzIsIDEsIDIxNCwgNDksIDIxOCwgMzIsIDEsIDIyMiwgMjAyLCAyMTgsIDMyLCAxLCAxNTksIDIxOCwgMzIsIDMwLCA1LCAKKyAgICA3MiwgMjE4LCAzMiwgMzAsIDUsIDY5LCAyMTgsIDMyLCA1LCAyMTQsIDEzMywgMjQxLCAyNDYsIDEsIDYxLCAyNDEsIDI0NiwgCisgICAgMSwgNzIsIDI0MSwgMjQ2LCAxLCA2OSwgMjQxLCAyNDYsIDEsIDE4MSwgMjQxLCAyNDYsIDEsIDI0MywgMTEwLCAyNDEsIAorICAgIDI0NiwgMSwgMjI5LCAxNTksIDI0MSwgMjQ2LCAxLCAyMTgsIDUyLCAyNDEsIDI0NiwgMSwgMjQ4LCAxNjQsIDI0MSwgMjQ2LCAKKyAgICAxLCAyMDUsIDI0MSwgMjQ2LCAxLCAxOTMsIDI0MSwgMjQ2LCAxLCAyNTIsIDEwNywgMjQxLCAyNDYsIDEsIDE4OCwgMjQxLCAKKyAgICAyNDYsIDEsIDE4NiwgMjQxLCAyNDYsIDEsIDIwMywgMjQxLCAyNDYsIDEsIDIzMywgMTU3LCAyNDEsIDI0NiwgMSwgMjE0LCAKKyAgICA0OSwgMjQxLCAyNDYsIDEsIDIyMiwgMjAyLCAyNDEsIDI0NiwgMSwgMTU5LCAyNDEsIDI0NiwgMzAsIDUsIDcyLCAyNDEsIAorICAgIDI0NiwgMzAsIDUsIDY5LCAyNDEsIDI0NiwgNSwgMjI2LCAxNzYsIDIyNiwgMiwgMjIwLCA4MSwgMjI1LCAyNiwgMjI2LCAyLCAKKyAgICA1MSwgMjI1LCAyNiwgMjUxLCA0OSwgMSwgNjEsIDI1MSwgNDksIDEsIDcyLCAyNTEsIDQ5LCAxLCA2OSwgMjUxLCA0OSwgMSwgCisgICAgMTgxLCAyNTEsIDQ5LCAxLCAyNDMsIDExMCwgMjUxLCA0OSwgMSwgMjI5LCAxNTksIDI1MSwgNDksIDEsIDIxOCwgNTIsIAorICAgIDI1MSwgNDksIDEsIDI0OCwgMTY0LCAyNTEsIDQ5LCAxLCAyMDUsIDI1MSwgNDksIDEsIDE5MywgMjUxLCA0OSwgMSwgMjUyLCAKKyAgICAxMDcsIDI1MSwgNDksIDEsIDE4OCwgMjUxLCA0OSwgMSwgMTg2LCAyNTEsIDQ5LCAxLCAyMDMsIDI1MSwgNDksIDEsIDIzMywgCisgICAgMTU3LCAyNTEsIDQ5LCAxLCAyMTQsIDQ5LCAyNTEsIDQ5LCAxLCAyMjIsIDIwMiwgMjUxLCA0OSwgMSwgMTU5LCAyNTEsIDQ5LCAKKyAgICAzMCwgNSwgNzIsIDI1MSwgNDksIDMwLCA1LCA2OSwgMjE4LCAzMSwgMSwgNjEsIDIxOCwgMzEsIDEsIDcyLCAyMTgsIDMxLCAKKyAgICAxLCA2OSwgMjE4LCAzMSwgMSwgMTgxLCAyMTgsIDMxLCAxLCAyNDMsIDExMCwgMjE4LCAzMSwgMSwgMjI5LCAxNTksIDIxOCwgCisgICAgMzEsIDEsIDIxOCwgNTIsIDIxOCwgMzEsIDEsIDI0OCwgMTY0LCAyMTgsIDMxLCAxLCAyMDUsIDIxOCwgMzEsIDEsIDE5MywgCisgICAgMjE4LCAzMSwgMSwgMjUyLCAxMDcsIDIxOCwgMzEsIDEsIDE4OCwgMjE4LCAzMSwgMSwgMTg2LCAyMTgsIDMxLCAxLCAyMzMsIAorICAgIDE1NywgMjE4LCAzMSwgMSwgMjE0LCA0OSwgMjE4LCAzMSwgMSwgMjIyLCAyMDIsIDIxOCwgMzEsIDMwLCA1LCA3MiwgMjE4LCAKKyAgICAzMSwgMzAsIDUsIDY5LCA4NCwgMSwgMTgxLCA4NCwgMSwgMjM0LCAxMzgsIDg0LCAxLCAyMzQsIDM3LCA4NCwgMSwgMjM0LCAKKyAgICAxMTMsIDg0LCAxLCAyMjksIDkwLCA4NCwgMSwgMjUwLCAyMTksIDg0LCAxLCAyNTAsIDkyLCA4NCwgMSwgMjQ5LCAxNzUsIAorICAgIDg0LCAxLCAyNTAsIDIzLCA4NCwgMSwgMjI3LCAyNTMsIDg0LCAxLCAyNDgsIDE2NCwgODQsIDEsIDIxNiwgMTA1LCA4NCwgMSwgCisgICAgMjQ3LCA5OSwgODQsIDEsIDIxNiwgMTAwLCA4NCwgMSwgMjI4LCAxODgsIDg0LCAxLCAyMTgsIDUyLCA4NCwgMSwgMjE3LCAKKyAgICAxNjEsIDg0LCAxLCAxMDgsIDg0LCAxLCAyMTcsIDEwOSwgODQsIDEsIDIyOCwgMTg1LCA4NCwgMSwgMjUyLCAxMDcsIDg0LCAKKyAgICAxLCAyMjYsIDIzLCA4NCwgMSwgMjI1LCAxNTAsIDg0LCAxLCAyMjUsIDI1MywgODQsIDEsIDIzMCwgMjMxLCA4NCwgMSwgCisgICAgMjEyLCAyMzUsIDg0LCAxLCAyMjMsIDExMiwgODQsIDEsIDIzMiwgMjA4LCA4NCwgMSwgMjE0LCAxMTksIDg0LCAxLCAyMjEsIAorICAgIDI0LCA4NCwgMSwgMjE5LCAxMjEsIDg0LCAxLCAyMjIsIDIwMiwgODQsIDEsIDE1OSwgODQsIDEsIDIzMywgMTU3LCA4NCwgMSwgCisgICAgMjI0LCAyMzIsIDg0LCAyMzUsIDI0MCwgMzAsIDIyNCwgMjE4LCA4NCwgMjM1LCAyNDAsIDMwLCAyMjQsIDIzMSwgODQsIAorICAgIDIzNSwgMjQwLCAzMCwgMjI0LCAxOTgsIDg0LCAyMzUsIDI0MCwgMzAsIDIyNCwgMTkzLCA4NCwgMjM1LCAyNDAsIDMwLCAKKyAgICAyMjQsIDE3NSwgODQsIDIzNSwgMjQwLCAzMCwgMjI0LCAxNDcsIDg0LCAyMzUsIDI0MCwgMzAsIDIyNCwgMTM1LCA4NCwgCisgICAgMjM1LCAyNDAsIDMwLCAyMjQsIDEzNCwgODQsIDIzNSwgMjQwLCAzMCwgMjIzLCAxMiwgODQsIDIzNSwgMjQwLCAzMCwgMjIzLCAKKyAgICA1LCA4NCwgMjM1LCAyNDAsIDMwLCAyMzIsIDEyMSwgODQsIDIzNSwgMjQwLCAzMCwgMjMyLCAxMTIsIDg0LCAyMzUsIDI0MCwgCisgICAgMzAsIDIyNCwgMjEzLCA4NCwgMjM1LCAyNDAsIDMwLCAyMjQsIDIyNCwgODQsIDIzNSwgMjQwLCAzMCwgMjI0LCAxODMsIAorICAgIDIxNiwgMTUsIDExNiwgODQsIDIzNSwgMjQwLCAzMCwgMjI0LCAxODMsIDIxNiwgMTUsIDEwOSwgODQsIDIzNSwgMjQwLCAzMCwgCisgICAgMjI0LCAyMTQsIDg0LCAzMCwgMjM1LCAyMjYsIDI1MywgMjE1LCA4NCwgMzAsIDIzNSwgMjI2LCAyNTQsIDIzMiwgODQsIDMwLCAKKyAgICA1LCAyNTQsIDIzMiwgODQsIDMwLCA1LCA3MiwgODQsIDMwLCA1LCAyMzYsIDI4LCA4NCwgMzAsIDUsIDIxMywgMTA1LCA4NCwgCisgICAgMzAsIDUsIDIxMiwgMTYxLCA4NCwgMzAsIDUsIDY5LCA4NCwgMzAsIDUsIDIxNSwgOTIsIDg0LCAzMCwgNSwgMjE1LCAxOTYsIAorICAgIDg0LCAzMCwgNSwgMjI3LCA5OSwgODQsIDMwLCA1LCAxODYsIDg0LCAzMCwgNSwgMjM2LCA1NSwgODQsIDMwLCA1LCA3NCwgCisgICAgODQsIDMwLCA1LCAyNTQsIDE0OCwgODQsIDMwLCA1LCAyNTQsIDEwOCwgODQsIDMwLCA1LCAyMjcsIDQ5LCA4NCwgMzAsIDUsIAorICAgIDI1MywgMTA4LCA4NCwgNSwgMjI5LCAzNywgODQsIDUsIDIyNCwgMTksIDg0LCA1LCAyMTIsIDE3MiwgODQsIDUsIDIzMCwgCisgICAgMTIzLCA4NCwgNSwgMjE2LCAxNzEsIDg0LCA1LCAyNTIsIDYyLCA4NCwgNSwgMjIzLCAxMDcsIDg0LCA1LCAyMTYsIDI1MSwgCisgICAgODQsIDUsIDIzNCwgMjQ2LCA4NCwgNSwgMjU0LCAxMTAsIDg0LCA1LCAyMjIsIDE2MCwgMjIyLCAxNTQsIDg0LCA1LCAyMTQsIAorICAgIDEzMCwgODQsIDUsIDI0OSwgMTcwLCA4NCwgNSwgMjUyLCAzNywgODQsIDUsIDIzNCwgMTMxLCA4NCwgNSwgMjUyLCA1NywgCisgICAgODQsIDUsIDI1MCwgMTk3LCAyMjUsIDIwNCwgMjMzLCAyMDksIDg0LCA1LCAyMzMsIDU0LCAyMTYsIDIzMCwgODQsIDUsIAorICAgIDI1MSwgMTk3LCA4NCwgNSwgMjI1LCAyNTUsIDIzMCwgMTY5LCA4NCwgNSwgMjM0LCAxOCwgODQsIDI0OSwgMzksIDE2LCAKKyAgICAyMjMsIDE4MSwgODQsIDUsIDI1MywgOTAsIDg0LCA1LCAyNTMsIDExMSwgODQsIDIxLCAyMTIsIDc5LCA4NCwgMjEsIDExNiwgCisgICAgODQsIDIxLCAxMDksIDg0LCAyMSwgMTY2LCA4NCwgMjEsIDE2MywgODQsIDIxLCAxODAsIDg0LCAyMSwgMTg5LCA4NCwgMjEsIAorICAgIDE5OCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMjAwLCA4NCwgMTYsIDIzMywgNTQsIDI1MywgMTEzLCAyMTksIDIyOSwgODQsIAorICAgIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjMwLCAxNDEsIDg0LCAxNiwgMjMzLCA1NCwgMjUzLCAxMTMsIDIyNSwgMjAzLCA4NCwgCisgICAgMTYsIDIzMywgNTQsIDI1MywgMTEzLCAyNTEsIDIyNSwgODQsIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjUxLCAzMiwgODQsIAorICAgIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjI1LCA5NSwgODQsIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjI1LCA4OSwgODQsIAorICAgIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjI1LCA4NywgODQsIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjI1LCA5MywgODQsIAorICAgIDE2LCAyMzMsIDU0LCAyNTMsIDExMywgMjI1LCA5MSwgODEsIDI1MSwgMTU5LCA4MSwgMjQ1LCAxMjAsIDgxLCAyNDksIDE1NywgCisgICAgODEsIDI0MywgMjAwLCAyMTksIDY5LCA4MSwgMjQ5LCAxNjQsIDgxLCAyNDMsIDIzNywgMjQ3LCA3MiwgODEsIDIxNiwgMjUwLCAKKyAgICAyMTksIDIzNiwgMjQwLCAxNjAsIDgxLCAyMjAsIDExNiwgNCwgMjUxLCA5OCwgMjMxLCAyMTcsIDgxLCAyMzEsIDI0NiwgCisgICAgMjQ5LCAxNTcsIDgxLCAyMzEsIDI0NiwgMjQzLCAyMDAsIDIxOSwgNjksIDgxLCAyMjksIDIyLCA4MSwgMjQzLCAyMjMsIDQzLCAKKyAgICAyMjIsIDc3LCAxMTYsIDgxLCAyNDMsIDIyMywgNDMsIDIyMiwgNzcsIDEwOSwgODEsIDI0MywgMjIzLCA0MywgMjIyLCA3NywgCisgICAgMTY2LCA4MSwgMzAsIDIyMSwgNTcsIDgxLCAyMSwgMjEyLCA3OSwgODEsIDIxLCAxMTYsIDgxLCAyMSwgMTA5LCA4MSwgMjEsIAorICAgIDE2NiwgODEsIDIxLCAxNjMsIDgxLCAyMSwgMTgwLCA4MSwgMjEsIDE4OSwgODEsIDIxLCAxOTgsIDgxLCAyMSwgMTk1LCA4MSwgCisgICAgMjEsIDIwMCwgODEsIDEsIDYxLCA4MSwgMSwgNzQsIDgxLCAxLCA3MiwgODEsIDEsIDc1LCA4MSwgMSwgNjksIDgxLCAxLCAKKyAgICAyMjcsIDk5LCA4MSwgMSwgMjE1LCAxODMsIDgxLCAxLCAyNDUsIDE2NSwgODEsIDEsIDIwNSwgODEsIDEsIDI1NCwgMjQsIAorICAgIDgxLCAxLCAyNTIsIDEwNywgODEsIDEsIDE5MywgODEsIDEsIDIyNCwgMjMyLCA4MSwgMSwgMjQzLCAxMTAsIDgxLCAxLCAKKyAgICAxODgsIDgxLCAxLCAyMzMsIDE1NywgODEsIDEsIDIyMiwgMjAyLCA4MSwgMSwgMjIxLCAyNCwgODEsIDEsIDIxOCwgNTIsIAorICAgIDgxLCAxLCAyNDgsIDE2NCwgODEsIDEsIDI1MCwgOTIsIDgxLCAxLCAyMzUsIDEzOSwgODEsIDEsIDE4NiwgODEsIDEsIDIwMywgCisgICAgODEsIDEsIDIxNCwgNDksIDgxLCAxLCAyNDQsIDE2NCwgODEsIDEsIDE4MSwgODEsIDEsIDIzNCwgMTM4LCA4MSwgMSwgMjE2LCAKKyAgICAxNDEsIDgxLCAxLCAyMTIsIDEwOSwgODEsIDEsIDI0MiwgMjcsIDgxLCAxLCAyMTIsIDksIDgxLCAxLCAyMzMsIDI1LCA4MSwgCisgICAgMSwgMjEyLCA2MiwgODEsIDEsIDI1MCwgNDcsIDgxLCAxLCAyMTYsIDI1MCwgMTg0LCAzMCwgNTIsIDgxLCAxLCAyMTYsIAorICAgIDI1MCwgNzQsIDgxLCAxLCAyMTYsIDI1MCwgNzIsIDgxLCAxLCAyMTYsIDI1MCwgNzUsIDgxLCAxLCAyMTYsIDI1MCwgNjksIAorICAgIDgxLCAxLCAyMTYsIDI1MCwgMjI3LCA5OSwgODEsIDEsIDIxNiwgMjUwLCAyMTUsIDE4MywgODEsIDEsIDIxNiwgMjUwLCAKKyAgICAyNTQsIDI0LCA4MSwgMSwgMjE2LCAyNTAsIDI1MiwgMTA3LCA4MSwgMSwgMjE2LCAyNTAsIDE5MywgODEsIDEsIDIxNiwgCisgICAgMjUwLCAyMjQsIDIzMiwgODEsIDEsIDIxNiwgMjUwLCAyNDMsIDExMCwgODEsIDEsIDIxNiwgMjUwLCAxODgsIDgxLCAxLCAKKyAgICAyMTYsIDI1MCwgMjE4LCA1MiwgODEsIDEsIDIxNiwgMjUwLCAyNDgsIDE2NCwgODEsIDEsIDIxNiwgMjUwLCAyNTAsIDkyLCAKKyAgICA4MSwgMSwgMjE2LCAyNTAsIDIzNSwgMTM5LCA4MSwgMSwgMjE2LCAyNTAsIDIxNiwgMTQxLCA4MSwgMSwgMjE2LCAyNTAsIAorICAgIDE4NiwgODEsIDEsIDIxNiwgMjUwLCAyMTQsIDQ5LCA4MSwgMSwgMjE2LCAyNTAsIDE4MSwgODEsIDEsIDIxNiwgMjUwLCAKKyAgICAyNDMsIDEwNywgODEsIDEsIDIxNiwgMjUwLCAyNDIsIDI3LCA4MSwgMSwgMjE2LCAyNTAsIDIzNSwgMTA5LCA4MSwgMSwgCisgICAgMjE2LCAyNTAsIDIyOSwgNjIsIDgxLCAxLCAyMTYsIDI1MCwgMjQ1LCAyNDksIDgxLCAxLCAyMjAsIDExNiwgNzQsIDgxLCAxLCAKKyAgICAyMjAsIDExNiwgNzIsIDgxLCAxLCAyMjAsIDExNiwgMjM1LCAxNTAsIDgxLCAxLCAyMjAsIDExNiwgMjE1LCAxODMsIDgxLCAKKyAgICAxLCAyMjAsIDExNiwgNjksIDgxLCAxLCAyMjAsIDExNiwgMjU0LCAyNCwgODEsIDEsIDIyMCwgMTE2LCAxODEsIDgxLCAxLCAKKyAgICAyMjAsIDExNiwgMjQzLCAxMTAsIDgxLCAxLCAyMjAsIDExNiwgMTU5LCA4MSwgMSwgMjIwLCAxMTYsIDE5MywgODEsIDEsIAorICAgIDIyMCwgMTE2LCAyMjEsIDI0LCA4MSwgMSwgMjIwLCAxMTYsIDIxOCwgNTIsIDgxLCAxLCAyMjAsIDExNiwgMjQ4LCAxNjQsIAorICAgIDgxLCAxLCAyMjAsIDExNiwgMjM1LCAxMzksIDgxLCAxLCAyMjAsIDExNiwgMjQ0LCAxNjQsIDgxLCAxLCAyMjAsIDExNiwgCisgICAgMjQzLCAxMDcsIDgxLCAxLCAyMjAsIDExNiwgMjQyLCAyNywgODEsIDEsIDIyMCwgMTE2LCAyMTYsIDE0MSwgODEsIDEsIAorICAgIDIyMCwgMTE2LCAyMTIsIDEwOSwgODEsIDEsIDIyMCwgMTE2LCAyMjQsIDc0LCA4MSwgMSwgMjIwLCAxMTYsIDI1MCwgOTIsIAorICAgIDgxLCAxLCAyMjAsIDExNiwgMjEyLCA3NSwgODEsIDEsIDIzMSwgMjQ2LCA3MiwgODEsIDEsIDIzMSwgMjQ2LCAxODEsIDgxLCAKKyAgICAxLCAyMzEsIDI0NiwgMjAzLCA4MSwgMSwgMjMxLCAyNDYsIDI0NCwgMTY0LCA4MSwgMSwgMjMxLCAyNDYsIDIxMiwgNzUsIAorICAgIDgxLCAxLCAyNTQsIDcxLCAyNDMsIDkyLCAyNTMsIDI0MywgMTE2LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMjE0LCAKKyAgICAxMjksIDExNiwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDI0OCwgMTMxLCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgCisgICAgMjE1LCAxOTMsIDgxLCAxLCAyNTQsIDcxLCAyNDMsIDkyLCAyMzUsIDE5MSwgMjE1LCAxOTMsIDgxLCAxLCAyNTQsIDcxLCAKKyAgICAyNDMsIDkyLCAyNTIsIDc0LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMTMzLCAyNTIsIDc0LCA4MSwgMSwgMjU0LCA3MSwgCisgICAgMjQzLCA5MiwgNjEsIDgxLCAxLCAyNTQsIDcxLCAyNDMsIDkyLCA3MiwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDE4MSwgCisgICAgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDIyOSwgMTU5LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMjUwLCAyMTksIDgxLCAKKyAgICAxLCAyNTQsIDcxLCAyNDMsIDkyLCAyMTYsIDExNSwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDIxNiwgMTA1LCA4MSwgMSwgCisgICAgMjU0LCA3MSwgMjQzLCA5MiwgMjQ4LCA4NiwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDIyOCwgMTk4LCA4MSwgMSwgMjU0LCAKKyAgICA3MSwgMjQzLCA5MiwgMjE4LCA1MiwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDI0OCwgMTY0LCA4MSwgMSwgMjU0LCA3MSwgCisgICAgMjQzLCA5MiwgMTkzLCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMjI2LCAyMywgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIAorICAgIDIxOSwgMTU3LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMjEyLCA3NSwgODEsIDEsIDI1NCwgNzEsIDI0MywgOTIsIDIxMiwgCisgICAgMTA5LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCA5MiwgMjU0LCAxMTQsIDgxLCAxLCAyMTYsIDI1MCwgMjU0LCA3MSwgMjQzLCAKKyAgICA5MiwgMjE4LCA1MiwgODEsIDEsIDIxNiwgMjUwLCAyNTQsIDcxLCAyNDMsIDkyLCAyMTIsIDc1LCA4MSwgMSwgMjMxLCAyNDYsIAorICAgIDI1NCwgNzEsIDI0MywgOTIsIDI0MiwgMjI1LCA4MSwgMSwgMjMxLCAyNDYsIDI1NCwgNzEsIDI0MywgOTIsIDIyOSwgMTU5LCAKKyAgICA4MSwgMSwgMjMxLCAyNDYsIDI1NCwgNzEsIDI0MywgOTIsIDI1MCwgMjE5LCA4MSwgMSwgMjMxLCAyNDYsIDI1NCwgNzEsIAorICAgIDI0MywgOTIsIDIzNSwgMTE1LCA4MSwgMSwgMjMxLCAyNDYsIDI1NCwgNzEsIDI0MywgOTIsIDIxNiwgMTE1LCA4MSwgMSwgCisgICAgMjMxLCAyNDYsIDI1NCwgNzEsIDI0MywgOTIsIDI0OCwgNzAsIDgxLCAxLCAyMzEsIDI0NiwgMjU0LCA3MSwgMjQzLCA5MiwgCisgICAgMjE4LCA1MiwgODEsIDEsIDIzMSwgMjQ2LCAyNTQsIDcxLCAyNDMsIDkyLCAyNDcsIDIzMiwgODEsIDEsIDIzMSwgMjQ2LCAKKyAgICAyNTQsIDcxLCAyNDMsIDkyLCAyMTksIDE1NywgODEsIDEsIDIzMSwgMjQ2LCAyNTQsIDcxLCAyNDMsIDkyLCAyNDksIDE1LCAKKyAgICA4MSwgMSwgMjMxLCAyNDYsIDI1NCwgNzEsIDI0MywgOTIsIDIxMiwgNzUsIDgxLCAxLCAyMzEsIDI0NiwgMjU0LCA3MSwgCisgICAgMjQzLCA5MiwgMjEyLCAxMDksIDgxLCAxLCAyNTQsIDcxLCAyNDMsIDkyLCAxNTEsIDY5LCA4MSwgMSwgMjU0LCA3MSwgMjQzLCAKKyAgICA5MiwgMTUxLCAxODYsIDgxLCAxLCAyMzEsIDI0NiwgMjU0LCA3MSwgMjQzLCA5MiwgMjUxLCAxOTUsIDgxLCAxLCAyNTQsIAorICAgIDcxLCAyNDMsIDkyLCAyNDgsIDE1NCwgODEsIDEsIDIzMSwgMjQ2LCAyNTQsIDcxLCAyNDMsIDkyLCAyMzMsIDI1LCAxOCwgCisgICAgMTksIDIyNiwgMjMzLCAxOCwgMTksIDI1MywgODMsIDE4LCAxOSwgMjU0LCAxODgsIDE4LCAxOSwgMjE0LCA5LCAxOCwgMTksIAorICAgIDIyNSwgMTAxLCAxOCwgMTksIDIyNiwgMTAzLCAxOCwgMTksIDIyNCwgMjQ5LCAxOCwgMTksIDIxNywgMjM4LCAxOCwgMTksIAorICAgIDIzNCwgMTk1LCAxOCwgMTksIDIzMywgMjAxLCAxOCwgMTksIDIzMSwgMTk2LCAxOCwgMTksIDIyOCwgMTQ4LCAxOCwgMTksIAorICAgIDIzMCwgMywgMTgsIDE5LCAyMzMsIDkyLCAxOCwgMTksIDIxOSwgMjA5LCAxOCwgMTksIDIyMiwgMTI5LCAxOCwgMTksIDIyMCwgCisgICAgMTU2LCAxOCwgMTksIDIyMCwgMjQ2LCAxOCwgMTksIDIyMCwgMTI3LCAxOCwgMTksIDIxMiwgMjExLCAxOCwgMTksIDIxMywgCisgICAgNDMsIDE4LCAxOSwgMjI0LCAyNywgMTgsIDE5LCAyMjgsIDI4LCAxOCwgMTksIDIyNywgODIsIDIyOCwgMjgsIDE4LCAxOSwgCisgICAgMjI4LCAyNywgMTgsIDE5LCAyMjcsIDgyLCAyMjgsIDI3LCAxOCwgMTksIDIyOCwgMjYsIDE4LCAxOSwgMjI3LCA4MiwgMjI4LCAKKyAgICAyNiwgMTgsIDE5LCAyMjgsIDI1LCAxOCwgMTksIDIyNywgODIsIDIyOCwgMjUsIDE4LCAxOSwgMjIzLCAxNywgMTgsIDE5LCAKKyAgICAyMjMsIDE2LCAxOCwgMTksIDIyMywgMTUsIDE4LCAxOSwgMjIzLCAxNCwgMTgsIDE5LCAyMjMsIDEzLCAxOCwgMTksIDIyMywgCisgICAgMjEsIDE4LCAxOSwgMjI3LCA4MiwgMjI2LCAyMjksIDE4LCAxOSwgMjI3LCA4MiwgMjE4LCA5OSwgMTgsIDE5LCAyMjcsIDgyLCAKKyAgICAyMzUsIDI3LCAxOCwgMTksIDIyNywgODIsIDI1MCwgMjUyLCAxOCwgMTksIDIyNywgODIsIDE4MywgMTgsIDE5LCAyMjcsIAorICAgIDgyLCAyMDQsIDE4LCAxOSwgMjI3LCA4MiwgMTk3LCAxOCwgMTksIDIyNywgODIsIDIyMSwgMjYsIDE4LCAxOSwgMjQ1LCAKKyAgICAxNzUsIDIxNCwgODIsIDE4LCAxOSwgMjEzLCAyNDgsIDIxNCwgODIsIDE4LCAxOSwgNDAsIDMsIDIyMywgMTMwLCAxOCwgMTksIAorICAgIDQwLCAyMjQsIDQ4LCAyNDcsIDc0LCAxOCwgMTksIDIyNCwgMTEyLCAyMjMsIDE4LCAxOCwgMTksIDE0OCwgMjMyLCAxODAsIAorICAgIDE4LCAxOSwgMTQ4LCAyMzMsIDE1NiwgMTgsIDE5LCAyMTcsIDgwLCAxOCwgMTksIDIxNywgODIsIDE4LCAxOSwgMjE2LCA5NywgCisgICAgMTgsIDE5LCAyMTYsIDk5LCAxOCwgMTksIDIxNiwgMTA0LCAxOCwgMTksIDIxNywgMiwgMTgsIDE5LCAyMTcsIDQsIDE4LCAKKyAgICAxOSwgMjIyLCAxMjcsIDIyMCwgMTMyLCAxOCwgMTksIDIyMiwgMTI3LCAyMjAsIDE4MSwgMTgsIDE5LCAyMjIsIDEyNywgCisgICAgMjQxLCAzOSwgMTgsIDE5LCA2NiwgMjQyLCA1NCwgMTgsIDE5LCA2NiwgMjQ4LCAzLCAyNDMsIDMxLCAxOCwgMTksIDY2LCAKKyAgICAyNDMsIDEwNywgMTgsIDE5LCA2NiwgMjQyLCA1OSwgMTgsIDE5LCAyMjIsIDEyNywgMjM1LCAzNywgMTgsIDE5LCA2NiwgCisgICAgMjM1LCAzNSwgMTgsIDE5LCAyNTEsIDI0NCwgMjQ4LCAzLCAxNTAsIDE4LCAxOSwgMjUxLCAyNDQsIDI0OCwgMywgMTQ5LCAKKyAgICAxOCwgMTksIDY2LCAyNDcsIDI1NCwgMTk3LCAyMDksIDIxNCwgMTAzLCAyMzMsIDM0LCAyMDksIDEsIDE4MSwgMjA5LCAxLCAKKyAgICAyMzQsIDEzOCwgMjA5LCAxLCAyNDMsIDExMCwgMjA5LCAxLCAyNDIsIDIyNSwgMjA5LCAxLCAyMjksIDE1OSwgMjA5LCAxLCAKKyAgICAyNTAsIDIxOSwgMjA5LCAxLCAyNTAsIDkyLCAyMDksIDEsIDIzNSwgMTM5LCAyMDksIDEsIDIzNSwgMTE1LCAyMDksIDEsIAorICAgIDIxMywgNjAsIDIwOSwgMSwgMjE4LCA1MiwgMjA5LCAxLCAyMTcsIDE2MSwgMjA5LCAxLCAyNDgsIDE2NCwgMjA5LCAxLCAKKyAgICAyNDcsIDIzMiwgMjA5LCAxLCAyMDUsIDIwOSwgMSwgMTkzLCAyMDksIDEsIDIyNiwgMjMsIDIwOSwgMSwgMjUyLCAxMDcsIAorICAgIDIwOSwgMSwgMjUxLCAxOTUsIDIwOSwgMSwgMTg4LCAyMDksIDEsIDE4NiwgMjA5LCAxLCAyMDMsIDIwOSwgMSwgMjMzLCAKKyAgICAxNTcsIDIwOSwgMSwgMjE0LCA0OSwgMjA5LCAxLCAyMjEsIDI0LCAyMDksIDEsIDIxOSwgMTU3LCAyMDksIDEsIDIyMiwgCisgICAgMjAyLCAyMDksIDEsIDE1OSwgMjA5LCAzMCwgNSwgNjEsIDIwOSwgMzAsIDUsIDcyLCAyMDksIDMwLCA1LCA2OSwgMjA5LCAKKyAgICAzMCwgNSwgMjQ1LCAxNjUsIDIwOSwgMzAsIDUsIDI1NCwgMTA4LCAyMDksIDMwLCA1LCAyMjcsIDQ5LCAyMDksIDMwLCA1LCAKKyAgICAyNTMsIDEwOCwgMjA5LCAzMCwgNSwgNzQsIDIwOSwgMzAsIDUsIDc1LCAyMDksIDIxOSwgMTgsIDEsIDE4NiwgMjA5LCAyMTksIAorICAgIDE4LCAxLCAyMDMsIDIwOSwgMjE5LCAxOCwgMSwgMjE0LCA0OSwgMjA5LCAzLCAxLCAxODEsIDIwOSwgMywgMSwgMjI5LCAKKyAgICAxNTksIDIwOSwgMywgMSwgMjUzLCAyNDIsIDIwOSwgMywgMSwgMjE4LCA1MiwgMjA5LCAzLCAxLCAyMDUsIDIwOSwgMywgMSwgCisgICAgMTkzLCAyMDksIDMsIDEsIDE4OCwgMjA5LCAzLCAxLCAyMDMsIDIwOSwgMywgMSwgMjMzLCAxNTcsIDIwOSwgNSwgMjMwLCAKKyAgICAxNTksIDIwOSwgNSwgMjM0LCAxNzcsIDIwOSwgNSwgMjIyLCAyMDEsIDIwOSwgNSwgMjMyLCAxODAsIDIwOSwgMjQ0LCAyNTQsIAorICAgIDc3LCAyMDksIDIyNCwgMTU4LCA3NywgMjA5LCAyMSwgMjEyLCA3OSwgMjA5LCAyMSwgMTE2LCAyMDksIDIxLCAxMDksIDIwOSwgCisgICAgMjEsIDE2NiwgMjA5LCAyMSwgMTYzLCAyMDksIDIxLCAxODAsIDIwOSwgMjEsIDE4OSwgMjA5LCAyMSwgMTk4LCAyMDksIDIxLCAKKyAgICAxOTUsIDIwOSwgMjEsIDIwMCwgMzgsIDIzMywgODMsIDEsIDE4MSwgMzgsIDIzMywgODMsIDEsIDIxMywgMTUzLCAzOCwgCisgICAgMjMzLCA4MywgMSwgMjI5LCAxNTksIDM4LCAyMzMsIDgzLCAxLCAyMTYsIDE0MSwgMzgsIDIzMywgODMsIDEsIDIyMiwgMjAyLCAKKyAgICAzOCwgMjMzLCA4MywgMSwgMTg2LCAzOCwgMjMzLCA4MywgMSwgMjE4LCA1MiwgMzgsIDIzMywgODMsIDEsIDIxNywgMTYxLCAKKyAgICAzOCwgMjMzLCA4MywgMSwgMjMzLCAxNTcsIDM4LCAyMzMsIDgzLCAxLCAxOTMsIDM4LCAyMzMsIDgzLCAxLCAyMjYsIDIzLCAKKyAgICAzOCwgMjMzLCA4MywgMSwgMTg4LCAzOCwgMjMzLCA4MywgMSwgMjQ0LCAxNjQsIDM4LCAyMzMsIDgzLCAxLCAyMTUsIDEsIAorICAgIDM4LCAyMzMsIDgzLCAxLCAxNTksIDM4LCAyMzMsIDgzLCAxLCAyMjQsIDIzMiwgMzgsIDIzMywgODMsIDEsIDIzNCwgMTM4LCAKKyAgICAzOCwgMjMzLCA4MywgMSwgMjE2LCAxMzMsIDM4LCAyMzMsIDgzLCAxLCAyMDUsIDM4LCAyMzMsIDgzLCAxLCA2MSwgMzgsIAorICAgIDIzMywgODMsIDEsIDcyLCAzOCwgMjMzLCA4MywgMSwgMjQ1LCAxNjUsIDM4LCAyMzMsIDgzLCAxLCAyNDUsIDE1NCwgMzgsIAorICAgIDIzMywgODMsIDEsIDY5LCAzOCwgMjMzLCA4MywgMSwgMjI3LCA0OSwgMzgsIDIzMywgODMsIDEsIDc1LCAzOCwgMjMzLCA4MywgCisgICAgMSwgMjE1LCAxODMsIDM4LCAyMzMsIDgzLCAxLCA3NCwgMzgsIDIzMywgODMsIDEsIDI1MywgMTA2LCAzOCwgMjMzLCA4MywgCisgICAgMSwgMjU0LCAxMDgsIDM4LCAyMzMsIDgzLCAxLCAyMTYsIDIzOSwgMzgsIDIzMywgODMsIDEsIDIxNiwgMjM4LCAzOCwgMjMzLCAKKyAgICA4MywgMSwgMjE2LCAyMzcsIDM4LCAyMzMsIDgzLCAxLCAyMTYsIDIzNiwgMzgsIDIzMywgODMsIDEsIDIxNiwgMjM1LCAxNTYsIAorICAgIDM4LCAxNjUsIDEsIDEyNCwgMjI0LCAyMzIsIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyMjQsIDIzMiwgMTU2LCAzOCwgMTY1LCAKKyAgICAxLCAxMjQsIDE4MSwgMTU2LCAzOCwgMTY1LCAxLCAxMjQsIDIxMywgMTUzLCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMjI5LCAKKyAgICAxNTksIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAxODEsIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyMTMsIDE1MywgMTU2LCAzOCwgCisgICAgMTY1LCAxLCAxMTUsIDIyOSwgMTU5LCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMjE2LCAxNDEsIDE1NiwgMzgsIDE2NSwgMSwgCisgICAgMTI0LCAyMjIsIDIwMiwgMTU2LCAzOCwgMTY1LCAxLCAxMjQsIDE4NiwgMTU2LCAzOCwgMTY1LCAxLCAxMTUsIDIxNiwgMTQxLCAKKyAgICAxNTYsIDM4LCAxNjUsIDEsIDExNSwgMjIyLCAyMDIsIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAxODYsIDE1NiwgMzgsIDE2NSwgCisgICAgMSwgMTI0LCAyMTgsIDUyLCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMjE3LCAxNjEsIDE1NiwgMzgsIDE2NSwgMSwgMTI0LCAKKyAgICAyMDUsIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyMTgsIDUyLCAxNTYsIDM4LCAxNjUsIDEsIDExNSwgMjE3LCAxNjEsIDE1NiwgCisgICAgMzgsIDE2NSwgMSwgMTE1LCAyMDUsIDE1NiwgMzgsIDE2NSwgMSwgMTI0LCAxOTMsIDE1NiwgMzgsIDE2NSwgMSwgMTI0LCAKKyAgICAyMjYsIDIzLCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMTg4LCAxNTYsIDM4LCAxNjUsIDEsIDExNSwgMTkzLCAxNTYsIDM4LCAKKyAgICAxNjUsIDEsIDExNSwgMjI2LCAyMywgMTU2LCAzOCwgMTY1LCAxLCAxMTUsIDE4OCwgMTU2LCAzOCwgMTY1LCAxLCAxMjQsIAorICAgIDI0NCwgMTY0LCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMjE1LCAxLCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMjMzLCAxNTcsIAorICAgIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyNDQsIDE2NCwgMTU2LCAzOCwgMTY1LCAxLCAxMTUsIDIxNSwgMSwgMTU2LCAzOCwgCisgICAgMTY1LCAxLCAxMTUsIDIzMywgMTU3LCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgMTU5LCAxNTYsIDM4LCAxNjUsIDEsIDEyNCwgCisgICAgMjQ4LCAxNjQsIDE1NiwgMzgsIDE2NSwgMSwgMTI0LCAyNTIsIDEwNywgMTU2LCAzOCwgMTY1LCAxLCAxMTUsIDE1OSwgMTU2LCAKKyAgICAzOCwgMTY1LCAxLCAxMTUsIDI0OCwgMTY0LCAxNTYsIDM4LCAxNjUsIDEsIDExNSwgMjUyLCAxMDcsIDE1NiwgMzgsIDE2NSwgCisgICAgMSwgMTI0LCAyMzMsIDIwNiwgMTU2LCAzOCwgMTY1LCAxLCAxMjQsIDIxMywgMTI2LCAxNTYsIDM4LCAxNjUsIDEsIDExNSwgCisgICAgMjMzLCAyMDYsIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyMTMsIDEyNiwgMTU2LCAzOCwgMTY1LCAxLCAxMjQsIDIxOSwgMjYsIAorICAgIDE1NiwgMzgsIDE2NSwgMSwgMTE1LCAyMTksIDI2LCAxNTYsIDM4LCAxNjUsIDMwLCA1LCAzMCwgMjIwLCAxNjMsIDE1NiwgCisgICAgMzgsIDE2NSwgMzAsIDUsIDI1NCwgMjMyLCAxNTYsIDM4LCAxNjUsIDMwLCA1LCAyMzYsIDI4LCAxNTYsIDM4LCAxNjUsIDMwLCAKKyAgICA1LCA2OSwgMTU2LCAzOCwgMTY1LCAzMCwgNSwgMjE1LCA5MiwgMTU2LCAzOCwgMTY1LCAzMCwgNSwgNzQsIDE1NiwgMzgsIAorICAgIDE2NSwgMzAsIDUsIDI1NCwgMTQ4LCAxNTYsIDM4LCAxNjUsIDMwLCA1LCA3NSwgMTU2LCAzOCwgMTY1LCAzMCwgNSwgMjI3LCAKKyAgICAxMjAsIDE1NiwgMzgsIDE2NSwgMzAsIDUsIDIxNSwgMTgzLCAxNTYsIDM4LCAxNjUsIDMwLCA1LCAyNTMsIDgzLCAxNTYsIAorICAgIDM4LCAxNjUsIDMwLCA1LCAyNTQsIDE4OCwgMTU2LCAzOCwgMTY1LCAzMCwgNSwgMjE1LCA4NSwgMTU2LCAzOCwgMTY1LCAzMCwgCisgICAgNSwgMjI2LCAyMzMsIDE1NiwgMzgsIDE2NSwgMzAsIDUsIDIyNywgMTE3LCAxNTYsIDM4LCAxNjUsIDMwLCA1LCAyMTUsIAorICAgIDE4MCwgMTU2LCAzOCwgMTY1LCAzMCwgNSwgMjM1LCAxNTAsIDE1NiwgMzgsIDE2NSwgMSwgNDAsIDIxNSwgNzksIDE1NiwgCisgICAgMzgsIDE2NSwgMSwgNDAsIDIyOSwgMTYxLCAxNTYsIDM4LCAxNjUsIDEsIDQwLCAyMDQsIDE1NiwgMzgsIDE2NSwgMSwgNDAsIAorICAgIDE4MywgMTU2LCAzOCwgMTY1LCAxLCA0MCwgMjM1LCAyNywgMTU2LCAzOCwgMTY1LCAxLCA0MCwgMjQ5LCAzLCAxNTYsIDM4LCAKKyAgICAxNjUsIDEsIDQwLCAyNTMsIDc0LCAxNTYsIDM4LCAxNjUsIDE2MCwgMjMxLCAyMjEsIDE1NiwgMzgsIDE2NSwgMTYwLCAyMzEsIAorICAgIDIyMCwgMTU2LCAzOCwgMTY1LCAyMSwgMjEyLCA3OSwgMTU2LCAzOCwgMTY1LCAyMSwgMTE2LCAxNTYsIDM4LCAxNjUsIDIxLCAKKyAgICAxMDksIDE1NiwgMzgsIDE2NSwgMjEsIDE2NiwgMTU2LCAzOCwgMTY1LCAyMSwgMTYzLCAxNTYsIDM4LCAxNjUsIDIxLCAxODAsIAorICAgIDE1NiwgMzgsIDE2NSwgMjEsIDE4OSwgMTU2LCAzOCwgMTY1LCAyMSwgMTk4LCAxNTYsIDM4LCAxNjUsIDIxLCAxOTUsIDE1NiwgCisgICAgMzgsIDE2NSwgMjEsIDIwMCwgMTU2LCAzOCwgMTY1LCA4OCwgMjEsIDExNiwgMTU2LCAzOCwgMTY1LCA1LCAyMzMsIDE0MywgCisgICAgMTU2LCAzOCwgMTY1LCA1LCAyMzMsIDE0MiwgODQsIDE2LCAyMjYsIDEwOSwgODQsIDE2LCAyMzAsIDE0MiwgMjM0LCAzNCwgCisgICAgODQsIDE2LCAyMjUsIDIwNCwgMjM0LCAzNCwgODQsIDE2LCAyNTEsIDIyNiwgMjM0LCAzNCwgODQsIDE2LCAyNTEsIDMzLCAKKyAgICAyMzQsIDM0LCA4NCwgMTYsIDIyNSwgOTYsIDIzNCwgMzQsIDg0LCAxNiwgMjI1LCA5MCwgMjM0LCAzNCwgODQsIDE2LCAyMjUsIAorICAgIDg4LCAyMzQsIDM0LCA4NCwgMTYsIDIyNSwgOTQsIDIzNCwgMzQsIDg0LCAxNiwgMjI1LCA5MiwgMjM0LCAzNCwgODQsIDE2LCAKKyAgICAyNDgsIDExOCwgMjM0LCAzNCwgODQsIDE2LCAyNDgsIDExNCwgMjM0LCAzNCwgODQsIDE2LCAyNDgsIDExMywgMjM0LCAzNCwgCisgICAgODQsIDE2LCAyNDgsIDExNiwgMjM0LCAzNCwgODQsIDE2LCAyNDgsIDExNSwgMjM0LCAzNCwgODQsIDE2LCAyNDgsIDExMiwgCisgICAgMjM0LCAzNCwgODQsIDE2LCAyMTYsIDUxLCA4NCwgMTYsIDIzMCwgMTQyLCAyMjMsIDEwNiwgODQsIDE2LCAyMjUsIDIwNCwgCisgICAgMjIzLCAxMDYsIDg0LCAxNiwgMjUxLCAyMjYsIDIyMywgMTA2LCA4NCwgMTYsIDI1MSwgMzMsIDIyMywgMTA2LCA4NCwgMTYsIAorICAgIDIyNSwgOTYsIDIyMywgMTA2LCA4NCwgMTYsIDIyNSwgOTAsIDIyMywgMTA2LCA4NCwgMTYsIDIyNSwgODgsIDIyMywgMTA2LCAKKyAgICA4NCwgMTYsIDIyNSwgOTQsIDIyMywgMTA2LCA4NCwgMTYsIDIyNSwgOTIsIDIyMywgMTA2LCA4NCwgMTYsIDI0OCwgMTE4LCAKKyAgICAyMjMsIDEwNiwgODQsIDE2LCAyNDgsIDExNCwgMjIzLCAxMDYsIDg0LCAxNiwgMjQ4LCAxMTMsIDIyMywgMTA2LCA4NCwgMTYsIAorICAgIDI0OCwgMTE2LCAyMjMsIDEwNiwgODQsIDE2LCAyNDgsIDExNSwgMjIzLCAxMDYsIDg0LCAxNiwgMjQ4LCAxMTIsIDIyMywgCisgICAgMTA2LCAyNTEsIDUwLCAxLCAxODEsIDI1MSwgNTAsIDEsIDI0MywgMTEwLCAyNTEsIDUwLCAxLCAyMjksIDE1OSwgMjUxLCAKKyAgICA1MCwgMSwgMjI5LCAxMDgsIDI1MSwgNTAsIDEsIDE5MywgMjUxLCA1MCwgMSwgMjUyLCAxMDcsIDI1MSwgNTAsIDEsIDE4OCwgCisgICAgMjUxLCA1MCwgMSwgMjMwLCAxNzUsIDI1MSwgNTAsIDEsIDIxOCwgNTIsIDI1MSwgNTAsIDEsIDI0OCwgMTY0LCAyNTEsIDUwLCAKKyAgICAxLCAyMDUsIDI1MSwgNTAsIDEsIDIyOCwgMTQ3LCAyNTEsIDUwLCAxLCAyNTAsIDIxOSwgMjUxLCA1MCwgMSwgMjM1LCAxMzksIAorICAgIDI1MSwgNTAsIDEsIDIyOCwgMjMsIDI1MSwgNTAsIDEsIDIyOCwgMTksIDI1MSwgNTAsIDEsIDE4NiwgMjUxLCA1MCwgMSwgCisgICAgMjAzLCAyNTEsIDUwLCAxLCAyMzMsIDE1NywgMjUxLCA1MCwgMSwgMjE1LCAxLCAyNTEsIDUwLCAxLCAyMjIsIDIwMiwgMjUxLCAKKyAgICA1MCwgMSwgNjEsIDI1MSwgNTAsIDEsIDE1OSwgMjUxLCA1MCwgMzAsIDUsIDcyLCAyNTEsIDUwLCAzMCwgNSwgNjksIDI1MSwgCisgICAgNTAsIDMwLCA1LCA3NCwgMjUxLCA1MCwgMzAsIDUsIDc1LCAyNTEsIDUwLCAzMCwgNSwgMjU0LCAxNDgsIDI1MSwgNTAsIAorICAgIDIyNiwgMTg3LCAyNTEsIDUwLCAyNDUsIDEwMSwgNjUsIDIyMiwgOTEsIDM4LCA4OCwgMSwgMTI0LCAxODEsIDM4LCA4OCwgMSwgCisgICAgMTI0LCAyMzQsIDEzOCwgMzgsIDg4LCAxLCAxMjQsIDIzMywgMTkzLCAzOCwgODgsIDEsIDExNSwgMTgxLCAzOCwgODgsIDEsIAorICAgIDExNSwgMjMzLCAxOTMsIDM4LCA4OCwgMSwgMTE1LCAyMzQsIDEzOCwgMzgsIDg4LCAxLCAyMjksIDE1OSwgMzgsIDg4LCAxLCAKKyAgICAxMjQsIDI1MCwgMjE5LCAzOCwgODgsIDEsIDEyNCwgMjUwLCA5MiwgMzgsIDg4LCAxLCAxMTUsIDI1MCwgMjE5LCAzOCwgODgsIAorICAgIDEsIDExNSwgMjIyLCAyMDIsIDM4LCA4OCwgMSwgMTE1LCAyNTAsIDkyLCAzOCwgODgsIDEsIDIyOCwgMjMsIDM4LCA4OCwgMSwgCisgICAgMjI0LCAzMiwgMzgsIDg4LCAxLCAxMjQsIDIyNCwgMzAsIDM4LCA4OCwgMSwgMjQ4LCAxNjQsIDM4LCA4OCwgMSwgMTE1LCAKKyAgICAyMjQsIDMwLCAzOCwgODgsIDEsIDIyNCwgNDEsIDM4LCA4OCwgMSwgMTI0LCAyMTgsIDUyLCAzOCwgODgsIDEsIDEyNCwgCisgICAgMjE3LCAxNjEsIDM4LCA4OCwgMSwgMTE1LCAyMTgsIDUyLCAzOCwgODgsIDEsIDExNSwgMjE3LCAxNjEsIDM4LCA4OCwgMSwgCisgICAgMjA1LCAzOCwgODgsIDEsIDI1MiwgMTA3LCAzOCwgODgsIDEsIDEyNCwgMTkzLCAzOCwgODgsIDEsIDEyNCwgMjI2LCAyMywgCisgICAgMzgsIDg4LCAxLCAxMjQsIDI0NCwgMTY0LCAzOCwgODgsIDEsIDExNSwgMTkzLCAzOCwgODgsIDEsIDExNSwgMjQ0LCAxNjQsIAorICAgIDM4LCA4OCwgMSwgMTE1LCAyMjYsIDIzLCAzOCwgODgsIDEsIDE4OCwgMzgsIDg4LCAxLCAxMTUsIDE4NiwgMzgsIDg4LCAxLCAKKyAgICAxMjQsIDE4NiwgMzgsIDg4LCAxLCAyMDMsIDM4LCA4OCwgMSwgMjIzLCA0OCwgMzgsIDg4LCAxLCAyMzMsIDE1NywgMzgsIAorICAgIDg4LCAxLCAyMzIsIDE1MSwgMzgsIDg4LCAxLCAyMTQsIDQ5LCAzOCwgODgsIDEsIDEyNCwgMjIxLCAyNCwgMzgsIDg4LCAxLCAKKyAgICAxMjQsIDIxOSwgMTU3LCAzOCwgODgsIDEsIDEyNCwgMjIyLCAyMDIsIDM4LCA4OCwgMSwgMTI0LCAxNTksIDM4LCA4OCwgMSwgCisgICAgMjMyLCAyMTMsIDM4LCA4OCwgMSwgNjEsIDM4LCA4OCwgMSwgMTE1LCAxNTksIDM4LCA4OCwgMSwgNzIsIDM4LCA4OCwgMSwgCisgICAgMjM2LCAyOCwgMzgsIDg4LCAxLCA2OSwgMzgsIDg4LCAxLCAyMTUsIDkyLCAzOCwgODgsIDEsIDI0NSwgMTY1LCAzOCwgODgsIAorICAgIDEsIDIyNywgNDksIDM4LCA4OCwgMSwgMjMzLCAxNDMsIDM4LCA4OCwgMSwgMjQyLCAxMDksIDIyMiwgMjAyLCAzOCwgODgsIAorICAgIDI0OSwgMTMzLCA1LCAxMzgsIDIwMywgMzgsIDg4LCAyNDksIDEzMywgNSwgMTM4LCAyMzMsIDE1NywgMzgsIDg4LCAyNDksIAorICAgIDEzMywgNSwgMjMzLCAxNTgsIDIxOCwgOSwgMjMzLCAxMzMsIDM4LCA4OCwgNSwgMjMyLCA5LCAyMzQsIDIzNiwgMjMzLCAKKyAgICAxMzMsIDM4LCA4OCwgMjQ5LCAxMzMsIDUsIDQwLCAyMjksIDE1OSwgMzgsIDg4LCAyNDksIDEzMywgNSwgMTE1LCAxOTMsIAorICAgIDM4LCA4OCwgMjQ5LCAxMzMsIDUsIDEyNCwgMjI0LCAzMSwgMTY3LCAxMTUsIDE5MywgMzgsIDg4LCAyNDksIDEzMywgNSwgCisgICAgMTg4LCAzOCwgODgsIDI0OSwgMTMzLCA1LCAyNTIsIDEwNywgMzgsIDg4LCAyNDksIDEzMywgNSwgMjIyLCAyMDIsIDM4LCAKKyAgICA4OCwgNSwgMjIyLCAxODEsIDM4LCA4OCwgMzAsIDUsIDYxLCAzOCwgODgsIDMwLCA1LCAyMzIsIDksIDIyMiwgMTQyLCAzOCwgCisgICAgODgsIDMwLCA1LCAyNTQsIDIzMiwgMzgsIDg4LCAzMCwgNSwgMjE4LCAxNSwgMjU0LCAyMzIsIDM4LCA4OCwgMzAsIDUsIDcyLCAKKyAgICAzOCwgODgsIDMwLCA1LCAyMzYsIDI4LCAzOCwgODgsIDMwLCA1LCAyMTUsIDE4MywgMzgsIDg4LCAzMCwgNSwgMjE1LCA5MSwgCisgICAgMzgsIDg4LCAzMCwgNSwgNjksIDM4LCA4OCwgMzAsIDUsIDIxNSwgOTIsIDM4LCA4OCwgMzAsIDUsIDc1LCAzOCwgODgsIDMwLCAKKyAgICA1LCAyMjcsIDEyMSwgNTUsIDM4LCA4OCwgMzAsIDUsIDIyNiwgMjMzLCAzOCwgODgsIDMwLCA1LCA3NCwgMzgsIDg4LCAzMCwgCisgICAgNSwgMjU0LCAxNDgsIDM4LCA4OCwgMzAsIDUsIDIyNywgNDksIDM4LCA4OCwgMzAsIDUsIDI1NCwgMTA4LCAzOCwgODgsIDMwLCAKKyAgICA1LCA4OCwgMjU0LCAxMDgsIDM4LCA4OCwgMzAsIDUsIDIyNywgMTIxLCA0OSwgMzgsIDg4LCA1LCAyMzIsIDksIDIzNCwgCisgICAgMjM1LCAzOCwgODgsIDUsIDIxNiwgMjQwLCAzOCwgODgsIDUsIDIxNiwgMjM5LCAzOCwgODgsIDUsIDIzNCwgMTA2LCAyMTYsIAorICAgIDIzOCwgMzgsIDg4LCA1LCAyMzQsIDEwNiwgMjE2LCAyMzcsIDM4LCA4OCwgNSwgMjM0LCAxMDYsIDIxNiwgMjM2LCAzOCwgCisgICAgODgsIDUsIDIyNCwgNzcsIDI0MiwgMjYsIDM4LCA4OCwgNSwgMjMyLCA5LCAyMjIsIDE2OCwgMzgsIDg4LCA1LCAyMzQsIAorICAgIDEwNSwgMjM0LCAyMjAsIDM4LCA4OCwgMzcsIDI0OSwgNTUsIDI0NywgNzQsIDM4LCA4OCwgMjQxLCAzMywgMjEsIDIxMiwgCisgICAgNzksIDM4LCA4OCwgMjQxLCAzMywgMjEsIDExNiwgMzgsIDg4LCAyNDEsIDMzLCAyMSwgMTA5LCAzOCwgODgsIDI0MSwgMzMsIAorICAgIDIxLCAxNjYsIDM4LCA4OCwgMjQxLCAzMywgMjEsIDE2MywgMzgsIDg4LCAyNDEsIDMzLCAyMSwgMTgwLCAzOCwgODgsIDI0MSwgCisgICAgMzMsIDIxLCAxODksIDM4LCA4OCwgMjQxLCAzMywgMjEsIDE5OCwgMzgsIDg4LCAyNDEsIDMzLCAyMSwgMTk1LCAzOCwgODgsIAorICAgIDI0MSwgMzMsIDIxLCAyMDAsIDM4LCA4OCwgODgsIDIxLCAyMTIsIDc5LCAzOCwgODgsIDg4LCAyMSwgMTE2LCAzOCwgODgsIAorICAgIDg4LCAyMSwgMTA5LCAzOCwgODgsIDg4LCAyMSwgMTY2LCAzOCwgODgsIDg4LCAyMSwgMTYzLCAzOCwgODgsIDg4LCAyMSwgCisgICAgMTgwLCAzOCwgODgsIDg4LCAyMSwgMTg5LCAzOCwgODgsIDg4LCAyMSwgMTk4LCAzOCwgODgsIDg4LCAyMSwgMTk1LCAzOCwgCisgICAgODgsIDg4LCAyMSwgMjAwLCAzOCwgODgsIDUsIDIxMywgMjM0LCAzOCwgODgsIDUsIDIxMywgMjMzLCAzOCwgODgsIDUsIAorICAgIDIyMiwgMTMzLCAzOCwgODgsIDUsIDIzNCwgMTY2LCAzOCwgODgsIDUsIDI0MCwgMjE5LCAzOCwgODgsIDUsIDI0NywgODgsIAorICAgIDM4LCA4OCwgNSwgMjIzLCAyMDIsIDIyMywgODksIDIyNCwgNDEsIDM4LCA4OCwgNSwgMjMyLCA5LCAyMTMsIDYxLCAzOCwgCisgICAgODgsIDUsIDIzNSwgMTAsIDM4LCA4OCwgNSwgMjM1LCA5LCAzOCwgODgsIDUsIDIyMiwgMTM5LCAzOCwgODgsIDUsIDIyMiwgCisgICAgMTM4LCAzOCwgODgsIDUsIDI0MSwgMjQ4LCAzOCwgODgsIDUsIDI1MCwgMjE2LCA5OSwgNSwgMjE1LCAxNzAsIDIyMywgMTgzLCAKKyAgICA5OSwgNSwgMjE1LCAxNzAsIDI1MCwgMTg5LCA5OSwgNSwgMjUwLCAxMjAsIDk5LCA1LCAyMTgsIDIxNSwgOTksIDUsIDI1MSwgCisgICAgMTU2LCA5OSwgMSwgMjU0LCA5MiwgOTksIDEsIDI1NCwgOTMsIDIxNywgMjIxLCA5OSwgMSwgMjM2LCAyNCwgOTksIDEsIAorICAgIDIzNiwgMjUsIDIxNywgMjIxLCA5OSwgMSwgMjE1LCAxNzMsIDk5LCAxLCAyMTUsIDE3NCwgMjE3LCAyMjEsIDk5LCAxLCAKKyAgICAyMjQsIDc3LCAyMjMsIDIyOSwgOTksIDEsIDIyNCwgNzcsIDIyMywgMjMwLCAyMTcsIDIyMSwgOTksIDEsIDIzMywgMTU4LCAKKyAgICAyMzMsIDQ4LCA5OSwgMSwgMjMzLCAxNTgsIDIzMywgNDksIDIxNywgMjIxLCA5OSwgMSwgMjQ1LCAxMzYsIDk5LCAxLCAyNTQsIAorICAgIDEwNiwgOTksIDEsIDIyNywgNzgsIDk5LCAxLCAyMjcsIDc5LCAyMTcsIDIyMSwgOTksIDEsIDE4MSwgOTksIDEsIDIzNSwgCisgICAgMTcsIDIzMiwgMTIsIDk5LCAxLCAyNDMsIDExMCwgOTksIDEsIDI0MywgMTExLCAyNDIsIDEzNywgOTksIDEsIDIyOSwgMTU5LCAKKyAgICA5OSwgMSwgMjUwLCAyMTksIDk5LCAxLCAyNTAsIDIyMCwgMjMzLCAxNDYsIDk5LCAxLCAyMzUsIDEzOSwgOTksIDEsIDIzNSwgCisgICAgMTQwLCAyMzUsIDExOSwgOTksIDEsIDIyOCwgMjMsIDk5LCAxLCAyMTgsIDUzLCAyMzMsIDk5LCA5OSwgMSwgMjE4LCA1MywgCisgICAgMjMwLCAxMzcsIDIzMiwgMTIsIDk5LCAxLCAyNDgsIDE2NSwgMjMwLCAxMzcsIDI1NCwgNTQsIDk5LCAxLCAyNDgsIDE2NSwgCisgICAgMjMwLCAxMzcsIDIzMiwgMTIsIDk5LCAxLCAyMzAsIDQ2LCAyMjQsIDQ0LCA5OSwgMSwgMjE4LCA1MiwgOTksIDEsIDIxOCwgCisgICAgNTMsIDIxNywgMjQyLCA5OSwgMSwgMjQ4LCAxNjQsIDk5LCAxLCAyNDgsIDE2NSwgMjMyLCAzMCwgOTksIDEsIDIwNSwgOTksIAorICAgIDEsIDE5MywgOTksIDEsIDIyNiwgMjE0LCAyMzQsIDIzMSwgOTksIDEsIDI1MiwgMTA3LCA5OSwgMSwgMjUyLCAxMDgsIDIzNCwgCisgICAgMTc4LCA5OSwgMSwgMTg4LCA5OSwgMSwgMTg2LCA5OSwgMSwgMjAzLCA5OSwgMSwgMjMzLCAxNTcsIDk5LCAxLCAyMTQsIDQ5LCAKKyAgICA5OSwgMSwgMjIyLCAyMDMsIDIyMiwgMTg5LCA5OSwgMSwgMjIyLCAyMDMsIDIyMiwgMTQ5LCA5OSwgMSwgMjIyLCAyMDIsIAorICAgIDk5LCAxLCAxNTksIDk5LCA1LCAyMjMsIDIyMiwgOTksIDMwLCA1LCAyMTcsIDIyMSwgOTksIDMwLCA1LCAyMTUsIDE2OSwgCisgICAgOTksIDMwLCA1LCAyMTUsIDE3MCwgMjIyLCAxNDUsIDk5LCAzMCwgNSwgMjE4LCAyNDgsIDk5LCAzMCwgNSwgMjE4LCAyNDksIAorICAgIDIzNiwgMTYsIDk5LCAzMCwgNSwgMjI0LCA3NywgMjIzLCAyMjksIDk5LCAzMCwgNSwgMjI0LCA3NywgMjIzLCAyMzAsIDIxNywgCisgICAgMjIxLCA5OSwgMzAsIDUsIDIzMywgMTU4LCAyMzMsIDQ4LCA5OSwgMzAsIDUsIDIzMywgMTU4LCAyMzMsIDQ5LCAyMTcsIAorICAgIDIyMSwgOTksIDMwLCA1LCAyMTgsIDE2LCA5OSwgMzAsIDUsIDIxOCwgMTcsIDIyMywgMjI5LCA5OSwgMzAsIDUsIDIxOCwgCisgICAgMTcsIDIxNywgMjIxLCA5OSwgMzAsIDUsIDIxOCwgMTcsIDIyMywgMjMwLCAyMTcsIDIyMSwgOTksIDMwLCA1LCAyMjYsIDU5LCAKKyAgICA5OSwgMzAsIDUsIDIyNiwgNjAsIDIxNywgMjIxLCA5OSwgMjU0LCAxNTUsIDI1NCwgMTU0LCA5OSwgMSwgMjM0LCAyNTUsIAorICAgIDIyMiwgMTQ0LCA5OSwgMSwgMjM0LCAxMTAsIDIyMiwgMTQ0LCA5OSwgMSwgMjE2LCAwLCAyMjIsIDE0NCwgOTksIDEsIDI0NSwgCisgICAgMTYwLCAyMjIsIDE0NCwgOTksIDEsIDIxNCwgMjMzLCAyMjIsIDE0NCwgOTksIDEsIDIxMiwgMTAwLCAyMjIsIDE0NCwgOTksIAorICAgIDEsIDI1MywgMTI1LCAyMjIsIDE0NCwgOTksIDIxLCAyMTIsIDc5LCA5OSwgMjEsIDExNiwgOTksIDIxLCAxMDksIDk5LCAyMSwgCisgICAgMTY2LCA5OSwgMjEsIDE2MywgOTksIDIxLCAxODAsIDk5LCAyMSwgMTg5LCA5OSwgMjEsIDE5OCwgOTksIDIxLCAxOTUsIDk5LCAKKyAgICAyMSwgMjAwLCA5OSwgMjI2LCAxNTcsIDk5LCAyMjYsIDE4MiwgOTksIDIxMywgMjIzLCA5OSwgMjUwLCAxNjgsIDIyNiwgCisgICAgMTc1LCA5OSwgMjUwLCAxNjgsIDIyMCwgOTgsIDk5LCAyNTAsIDE2OCwgMjI2LCAxMzAsIDk5LCAyMjYsIDE4MSwgOTksIDI3LCAKKyAgICAxNiwgMjQ3LCA4MCwgOTksIDI3LCAxNiwgMjQ4LCAyLCA5OSwgMjcsIDE2LCAyNDYsIDE5LCA5OSwgMjcsIDE2LCAyNDgsIAorICAgIDEyMSwgOTksIDI3LCAxNiwgMjQ4LCAxMjIsIDIxOCwgMjE1LCA5OSwgMjcsIDE2LCAyNDcsIDE1NywgOTksIDI3LCAxNiwgCisgICAgMjQ4LCAxNTcsIDk5LCAyNywgMTYsIDI0NywgMjQwLCA5OSwgMjcsIDE2LCAyNDgsIDE0MywgOTksIDI3LCAxNiwgMjQ4LCAKKyAgICAxMjIsIDI0MywgMzMsIDk5LCAyNywgMTYsIDM3LCAyMTcsIDIxNywgOTksIDI3LCAxNiwgMzcsIDI0NSwgOTksIDk5LCAyNywgCisgICAgMTYsIDM3LCAyMzQsIDE3MywgOTksIDI3LCAxNiwgMzcsIDIzNCwgMTc1LCA5OSwgMjcsIDE2LCAzNywgMjM1LCAxMjMsIDk5LCAKKyAgICAyNywgMTYsIDM3LCAyMzQsIDE3NCwgMiwgMjM1LCAxMjMsIDk5LCAyNywgMTYsIDM3LCAyMzQsIDE3NiwgMiwgMjM1LCAxMjMsIAorICAgIDk5LCAyNywgMTYsIDM3LCAyNTEsIDIxNCwgOTksIDI3LCAxNiwgMzcsIDI0MiwgMTQxLCA5OSwgMjcsIDE2LCAyMjMsIDE0NiwgCisgICAgMjI3LCA0MCwgMjQ2LCAyOSwgOTksIDI3LCAxNiwgMjIzLCAxNDYsIDIyNywgNDAsIDI0OCwgMTU1LCA5OSwgMjcsIDE2LCAKKyAgICAyMjMsIDE0NiwgMjQ5LCAxOTMsIDIxNiwgNzUsIDk5LCAyNywgMTYsIDIyMywgMTQ2LCAyNDksIDE5MywgMjE4LCAyMywgOTksIAorICAgIDI3LCAxNiwgMjMzLCA2OCwgMjI3LCA0MCwgMjI2LCAxNzAsIDk5LCAyNywgMTYsIDIzMywgNjgsIDIyNywgNDAsIDIyNSwgCisgICAgMjUsIDk5LCAyNywgMTYsIDIzMywgNjgsIDI0OSwgMTkzLCAyMjUsIDE3MCwgOTksIDI3LCAxNiwgMjMzLCA2OCwgMjQ5LCAKKyAgICAxOTMsIDIyNSwgMTYwLCA5OSwgMjcsIDE2LCAyMzMsIDY4LCAyMjcsIDQwLCAyMjUsIDE5MywgMjE4LCAyMzcsIDUsIDIyNiwgCisgICAgMTU0LCAyMTgsIDIzNywgNSwgMjI2LCAxNjYsIDIxOCwgMjM3LCA1LCAyMjYsIDE2MywgMjE4LCAyMzcsIDEsIDYxLCAyMTgsIAorICAgIDIzNywgMSwgNzIsIDIxOCwgMjM3LCAxLCA2OSwgMjE4LCAyMzcsIDEsIDI1NCwgMTQ4LCAyMTgsIDIzNywgMSwgNzUsIDIxOCwgCisgICAgMjM3LCAxLCA3NCwgMjE4LCAyMzcsIDEsIDI0NSwgMjIsIDIxOCwgMjM3LCAxLCAxODEsIDIxOCwgMjM3LCAxLCAyMjQsIAorICAgIDIzMiwgMjE4LCAyMzcsIDEsIDI0MywgMTEwLCAyMTgsIDIzNywgMSwgMjI5LCAxNTksIDIxOCwgMjM3LCAxLCAyNTAsIDIxOSwgCisgICAgMjE4LCAyMzcsIDEsIDIzNSwgMTM5LCAyMTgsIDIzNywgMSwgMjEyLCAxMDksIDIxOCwgMjM3LCAxLCAyMjgsIDIzLCAyMTgsIAorICAgIDIzNywgMSwgMjE4LCA1MiwgMjE4LCAyMzcsIDEsIDI0OCwgMTY0LCAyMTgsIDIzNywgMSwgMjA1LCAyMTgsIDIzNywgMSwgCisgICAgMTkzLCAyMTgsIDIzNywgMSwgMjQ0LCAxNjQsIDIxOCwgMjM3LCAxLCAyMTUsIDEsIDIxOCwgMjM3LCAxLCAyNTIsIDEwNywgCisgICAgMjE4LCAyMzcsIDEsIDE4OCwgMjE4LCAyMzcsIDEsIDE4NiwgMjE4LCAyMzcsIDEsIDIwMywgMjE4LCAyMzcsIDEsIDIzMywgCisgICAgMTU3LCAyMTgsIDIzNywgMSwgMjE0LCA0OSwgMjE4LCAyMzcsIDEsIDIyMiwgMjAyLCAyMTgsIDIzNywgMSwgMjEzLCAxNTMsIAorICAgIDIxOCwgMjM3LCAxLCAxNTksIDIxOCwgMjM3LCAyNDksIDEzMywgNSwgMjI2LCAxNzksIDIxOCwgMjM3LCAyNDksIDEzMywgNSwgCisgICAgMjI2LCAxNTYsIDIxOCwgMjM3LCAyNDksIDEzMywgNSwgMjI2LCAxNTMsIDIxOCwgMjM3LCAzMCwgNSwgMjI2LCAxNjksIAorICAgIDIxOCwgMjM3LCAzMCwgNSwgMjI2LCAxNTIsIDIxOCwgMjM3LCAzMCwgNSwgMjI2LCAxNzMsIDIxOCwgMjM3LCAzMCwgNSwgCisgICAgMjI2LCAxNjIsIDIxOCwgMjM3LCAzMCwgNSwgMjI2LCAxODAsIDIxOCwgMjM3LCAzMCwgNSwgMjI2LCAxNzEsIDIxOCwgMjM3LCAKKyAgICA1LCAyMjYsIDE4MywgMjE4LCAyMzcsIDEsIDIzNCwgMTM4LCAyMTgsIDIzNywgMSwgMjE4LCAxNzYsIDIxOCwgMjM3LCAyMSwgCisgICAgMjEyLCA3OSwgMjE4LCAyMzcsIDIxLCAxMTYsIDIxOCwgMjM3LCAyMSwgMTA5LCAyMTgsIDIzNywgMjEsIDE2NiwgMjE4LCAKKyAgICAyMzcsIDIxLCAxNjMsIDIxOCwgMjM3LCAyMSwgMTgwLCAyMTgsIDIzNywgMjEsIDE4OSwgMjE4LCAyMzcsIDIxLCAxOTgsIAorICAgIDIxOCwgMjM3LCAyMSwgMTk1LCAyMTgsIDIzNywgMjEsIDIwMCwgMjUyLCA0MCwgMSwgNjEsIDI1MiwgNDAsIDEsIDIyMCwgCisgICAgOTAsIDYxLCAyNTIsIDQwLCAxLCAxNTksIDI1MiwgNDAsIDEsIDIyMCwgOTAsIDE1OSwgMjUyLCA0MCwgMSwgMjMxLCAyNDQsIAorICAgIDE1OSwgMjUyLCA0MCwgMSwgMjUyLCAxMDcsIDI1MiwgNDAsIDEsIDIzNCwgMjE3LCAyNTIsIDEwNywgMjUyLCA0MCwgMSwgCisgICAgMTkzLCAyNTIsIDQwLCAxLCAyMjAsIDkwLCAxOTMsIDI1MiwgNDAsIDEsIDIwNSwgMjUyLCA0MCwgMSwgMjMxLCAyNDQsIAorICAgIDIwNSwgMjUyLCA0MCwgMSwgMjE0LCA0OSwgMjUyLCA0MCwgMSwgMjIwLCA5MCwgMjE0LCA0OSwgMjUyLCA0MCwgMSwgMjI2LCAKKyAgICAxOTQsIDIxNCwgNDksIDI1MiwgNDAsIDEsIDI0MywgMTEwLCAyNTIsIDQwLCAxLCAyMjAsIDkwLCAyNDMsIDExMCwgMjUyLCAKKyAgICA0MCwgMSwgMjM1LCAxMzksIDI1MiwgNDAsIDEsIDI0OCwgMTY0LCAyNTIsIDQwLCAxLCAyMDMsIDI1MiwgNDAsIDEsIDIyMCwgCisgICAgOTAsIDIwMywgMjUyLCA0MCwgMSwgMTg4LCAyNTIsIDQwLCAxLCAyMjAsIDkwLCAxODgsIDI1MiwgNDAsIDEsIDIxOSwgMjEzLCAKKyAgICAyMTgsIDUyLCAyNTIsIDQwLCAxLCAyMjgsIDE2NiwgMjE4LCA1MiwgMjUyLCA0MCwgMSwgMjIyLCAyMDIsIDI1MiwgNDAsIDEsIAorICAgIDIyMCwgOTAsIDIyMiwgMjAyLCAyNTIsIDQwLCAxLCAyMzEsIDI0NCwgMjIyLCAyMDIsIDI1MiwgNDAsIDEsIDE4NiwgMjUyLCAKKyAgICA0MCwgMSwgMjIwLCA5MCwgMTg2LCAyNTIsIDQwLCAxLCAyMjksIDE1OSwgMjUyLCA0MCwgMSwgMjMzLCAxNTcsIDI1MiwgNDAsIAorICAgIDEsIDIyMCwgOTAsIDIzMywgMTU3LCAyNTIsIDQwLCAxLCAyMjgsIDIzLCAyNTIsIDQwLCAxLCAyNTAsIDIxOSwgMjUyLCA0MCwgCisgICAgMSwgMjI5LCAyMjgsIDI1MiwgNDAsIDEsIDIzMSwgMTg3LCAyNTIsIDQwLCAxLCA3MiwgMjUyLCA0MCwgMSwgNjksIDI1MiwgCisgICAgNDAsIDUsIDIxNiwgMjQ0LCAyNTIsIDQwLCAzMCwgNSwgNzQsIDI1MiwgNDAsIDMwLCA1LCAyMjYsIDE5NCwgNzQsIDI1MiwgCisgICAgNDAsIDMwLCA1LCAyNDUsIDE2NSwgMjUyLCA0MCwgMzAsIDUsIDcyLCAyNTIsIDQwLCAzMCwgNSwgMjM0LCAyMTcsIDcyLCAKKyAgICAyNTIsIDQwLCAzMCwgNSwgNzUsIDI1MiwgNDAsIDMwLCA1LCAyMzQsIDIxNywgNzUsIDI1MiwgNDAsIDMwLCA1LCA2OSwgCisgICAgMjUyLCA0MCwgMzAsIDUsIDExMSwgMzEsIDIyMCwgOTAsIDIyMiwgMjAyLCAyNTIsIDQwLCAyNDksIDEzMywgNSwgMjI5LCAKKyAgICAxNjEsIDI1MiwgNDAsIDI0OSwgMTMzLCA1LCAyNDIsIDQxLCAyNTIsIDQwLCAyMjYsIDE2NSwgMjUyLCA0MCwgMjI2LCAxNjEsIAorICAgIDI1MiwgNDAsIDE2LCAyNTEsIDE2NCwgMjMwLCA0NiwgMjMxLCAxMDQsIDI1MiwgNDAsIDE2LCAyNTEsIDE2NCwgMjI1LCAKKyAgICAxOTYsIDI1MiwgNDAsIDE2LCAyNTEsIDE2NCwgMjM1LCA1MSwgMjUyLCA0MCwgMTYsIDI1MSwgMTY0LCAyMjYsIDE2NSwgCisgICAgMTgyLCAxLCAxODEsIDE4MiwgMSwgMjM0LCA0OCwgMTgyLCAxLCAyMzQsIDEzOCwgMTgyLCAxLCAyNDMsIDExMCwgMTgyLCAxLCAKKyAgICAyNDIsIDE2MiwgMTgyLCAxLCAyMjksIDE1OSwgMTgyLCAxLCAyNTAsIDIxOSwgMTgyLCAxLCAyNTAsIDkyLCAxODIsIDEsIAorICAgIDIzNSwgMTM5LCAxODIsIDEsIDIyOCwgMjMsIDE4MiwgMSwgMjE4LCA1MiwgMTgyLCAxLCAyMTcsIDE2MSwgMTgyLCAxLCAKKyAgICAyNDgsIDE2NCwgMTgyLCAxLCAyMDUsIDE4MiwgMSwgMTkzLCAxODIsIDEsIDIyNSwgMTc0LCAxODIsIDEsIDIyNiwgMjMsIAorICAgIDE4MiwgMSwgMjQ0LCAxNjQsIDE4MiwgMSwgMjQ0LCA0NCwgMTgyLCAxLCAyNTIsIDEwNywgMTgyLCAxLCAyNTEsIDE0NSwgCisgICAgMTgyLCAxLCAxODgsIDE4MiwgMSwgMjMwLCAyMzcsIDE4MiwgMSwgMjE2LCAxNDEsIDE4MiwgMSwgMjE2LCAxMzMsIDE4MiwgCisgICAgMSwgMjQ1LCAyNDksIDE4MiwgMSwgMTg2LCAxODIsIDEsIDIwMywgMTgyLCAxLCAyMzMsIDE1NywgMTgyLCAxLCAxNTksIAorICAgIDE4MiwgMSwgMjQxLCAxMzksIDE4MiwgMSwgMjE1LCAxLCAxODIsIDEsIDIyMiwgMjAyLCAxODIsIDEsIDIyMSwgMjQsIDE4MiwgCisgICAgMSwgMjE0LCA0OSwgMTgyLCAxLCA2MSwgMTgyLCAyMTksIDE4LCAxLCAxODYsIDE4MiwgMjE5LCAxOCwgMSwgMjAzLCAxODIsIAorICAgIDMwLCA1LCAyNTQsIDIzMiwgMTgyLCAzMCwgNSwgNzIsIDE4MiwgMzAsIDUsIDc1LCAxODIsIDMwLCA1LCAyMjcsIDQ5LCAKKyAgICAxODIsIDMwLCA1LCA2OSwgMTgyLCAzMCwgNSwgMjE1LCA5MiwgMTgyLCAzMCwgNSwgNzQsIDE4MiwgMjQ5LCAxMzMsIDUsIAorICAgIDIzNSwgMjcsIDE4MiwgMjQ5LCAxMzMsIDUsIDE4MywgMTgyLCAyNDksIDEzMywgNSwgMTUwLCAxODIsIDI0OSwgMTMzLCA1LCAKKyAgICAyMDQsIDE4MiwgMjQ5LCAxMzMsIDUsIDIyNiwgMjI5LCAxODIsIDI0OSwgMTMzLCA1LCAxNDksIDE4MiwgMjQ5LCAxMzMsIDUsIAorICAgIDIxOCwgOTksIDE4MiwgMjQ5LCAxMzMsIDUsIDIyOCwgNSwgMTgyLCAyNDksIDEzMywgNSwgMjM0LCAyMzUsIDE4MiwgNSwgCisgICAgMjI0LCA0MiwgMTgyLCA1LCAyMjgsIDYwLCAxODIsIDIyNSwgMjcsIDIxOCwgNTEsIDE4MiwgMjI1LCAyNywgMjI4LCAxMywgCisgICAgMjE3LCA3NCwgMjE4LCA1MSwgMTgyLCAyMjUsIDI3LCAyNTAsIDk4LCAxODIsIDIyNSwgMjcsIDIxNiwgMTI4LCAyNTAsIDk4LCAKKyAgICAxODIsIDIyNSwgMjcsIDIxNiwgMTI3LCAxODIsIDIxLCAyMTIsIDc5LCAxODIsIDIxLCAxMTYsIDE4MiwgMjEsIDEwOSwgCisgICAgMTgyLCAyMSwgMTY2LCAxODIsIDIxLCAxNjMsIDE4MiwgMjEsIDE4MCwgMTgyLCAyMSwgMTg5LCAxODIsIDIxLCAxOTgsIAorICAgIDE4MiwgMjEsIDE5NSwgMTgyLCAyMSwgMjAwLCAxODIsIDEsIDIxNiwgMTE1LCAxODIsIDEsIDIxNiwgMTA1LCAxODIsIDEsIAorICAgIDI0OCwgODYsIDIyNywgNzYsIDI1MCwgNDAsIDIxLCAyMTIsIDc5LCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMTE2LCAyMjcsIAorICAgIDc2LCAyNTAsIDQwLCAyMSwgMTA5LCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMTY2LCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgCisgICAgMTYzLCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMTgwLCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMTg5LCAyMjcsIDc2LCAyNTAsIAorICAgIDQwLCAyMSwgMTk4LCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMTk1LCAyMjcsIDc2LCAyNTAsIDQwLCAyMSwgMjAwLCAyMjcsIAorICAgIDc2LCAyNTAsIDQwLCAxLCAyMzMsIDE1NywgMjI3LCA3NiwgMjUwLCA0MCwgMSwgMjUzLCAxMjIsIDIyNywgNzYsIDI1MCwgCisgICAgNDAsIDEsIDI1NCwgMTIxLCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyNTQsIDI0LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyNTQsIAorICAgIDg2LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMzMsIDE1NiwgMjI3LCA3NiwgMjUwLCA0MCwgMSwgMjU0LCAxOTQsIDIyNywgCisgICAgNzYsIDI1MCwgNDAsIDEsIDI1NCwgMTk1LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyNTQsIDE5MywgMjI3LCA3NiwgMjUwLCAKKyAgICA0MCwgMSwgMjU0LCAxODksIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIzMywgMTMsIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIzNSwgCisgICAgMTY5LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMzYsIDI5LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMzUsIDE4OCwgMjI3LCAKKyAgICA3NiwgMjUwLCA0MCwgMSwgMjM1LCAxNzcsIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIzMiwgMTU2LCAyMjcsIDc2LCAyNTAsIAorICAgIDQwLCAxLCAyMTUsIDE5MCwgMjI3LCA3NiwgMjUwLCA0MCwgMSwgMjE1LCAxODgsIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIxNSwgCisgICAgMTM5LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMTUsIDg1LCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMzMsIDgyLCAyMjcsIDc2LCAKKyAgICAyNTAsIDQwLCAxLCAyNDUsIDcwLCAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyNDUsIDE2OCwgMjI3LCA3NiwgMjUwLCA0MCwgMSwgCisgICAgMjQ1LCAxMDgsIDIyNywgNzYsIDI1MCwgNDAsIDEsIDI0NSwgNDksIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIzMiwgMjA4LCAKKyAgICAyMjcsIDc2LCAyNTAsIDQwLCAxLCAyMjcsIDUsIDIyNywgNzYsIDI1MCwgNDAsIDEsIDIyNywgMTE2LCAyMjcsIDc2LCAyNTAsIAorICAgIDQwLCAxLCAyMjYsIDI0OSwgMjI3LCA3NiwgMjUwLCA0MCwgMSwgMjI3LCA4OCwgMjI3LCA3NiwgMjUwLCA0MCwgMjMwLCAKKyAgICAxNzMsIDIxNiwgODQsIDIyNywgNzYsIDI1MCwgNDAsIDI0MywgMTA1LCAyMTYsIDg1LCAyMjcsIDc2LCAyNTAsIDQwLCAyMzAsIAorICAgIDE3MSwgMjE2LCA4NSwgMjI3LCA3NiwgMjUwLCA0MCwgMjIzLCAyNDIsIDIyNywgNzYsIDI1MCwgNDAsIDIyNiwgMjEsIDIyNywgCisgICAgNzYsIDI1MCwgNDAsIDI1NCwgMTEzLCAyMjcsIDc2LCAyNTAsIDQwLCAyMjUsIDI3LCAyMzAsIDE2OCwgMjI3LCA3NiwgMjUwLCAKKyAgICA0MCwgMjI1LCAyNywgNTEsIDIzMCwgMTY4LCAyMTQsIDIyOSwgMTYwLCAyMzQsIDIxNSwgMjE0LCAyMjksIDE2MCwgMjIxLCAKKyAgICAwLCAyMTQsIDIyOSwgMTYwLCAyMjUsIDc4LCAyMTQsIDIyOSwgNSwgMjI5LCA0MCwgMjE0LCAyMjksIDUsIDIxMywgNjksIAorICAgIDIzMSwgMzUsIDIxOCwgMjAxLCAyMTQsIDIyOSwgMTYwLCAyMTMsIDY5LCAyNTQsIDExOCwgMjM1LCAyNDAsIDIxOCwgMjAxLCAKKyAgICAyMTQsIDIyOSwgMTYwLCAyMTMsIDY5LCAyMzUsIDI0MCwgMjE4LCAyMDEsIDIxNCwgMjI5LCAxNjAsIDIxMywgNjksIDIzNCwgCisgICAgMjAzLCAyMzUsIDI0MCwgMjE4LCAyMDEsIDIxNCwgMjI5LCAxNjAsIDI1MCwgMTkwLCA1NSwgMjE0LCAyMjksIDE2MCwgMjEzLCAKKyAgICA2OSwgMjM0LCAyMDMsIDIzNSwgMjQwLCAyMTgsIDIwMiwgMjIyLCAxMTUsIDIxNCwgMjI5LCAxNjAsIDUxLCAyMTgsIDIwMSwgCisgICAgMjE0LCAyMjksIDE2MCwgMjE2LCAxNjksIDIxOCwgMjAxLCAyMTQsIDIyOSwgMTYwLCAyMzQsIDIwMywgMjUzLCAyNDQsIAorICAgIDIxNCwgMjI5LCAxNjAsIDYyLCA1NSwgMjE0LCAyMjksIDE2MCwgMTE3LCAxNzYsIDU1LCAyMTQsIDIyOSwgMTYwLCAxMzMsIAorICAgIDE3NiwgNTUsIDIxNCwgMjI5LCAxNjAsIDIyMywgMTM3LCAyMzQsIDIxNCwgMjM1LCAyNDAsIDIxOCwgMjAxLCAyMTQsIDIyOSwgCisgICAgMTYwLCAyNTMsIDEyMCwgMjM1LCAyNDAsIDIxOCwgMjAxLCAyMTQsIDIyOSwgNSwgMjE0LCAxMjksIDIxOCwgMjAxLCAyMTQsIAorICAgIDIyOSwgNSwgMjE0LCAxMjksIDIxNSwgMTg1LCAyMTQsIDIyOSwgNSwgMjIzLCAyMDIsIDIxNCwgMTI5LCAyMTUsIDE4NSwgCisgICAgMjE0LCAyMjksIDUsIDIxNCwgMTI5LCAyNTMsIDI0NCwgMjE0LCAyMjksIDUsIDIyMywgMjAyLCAyMTQsIDEyOSwgMjUzLCAKKyAgICAyNDQsIDIxNCwgMjI5LCA1LCAyMTQsIDEyOSwgMjE1LCAxODYsIDIsIDIxOCwgMjcsIDIxNCwgMjI5LCA1LCAyMTQsIDEyOSwgCisgICAgMjUzLCAyNDUsIDIsIDIxOCwgMjcsIDIxNCwgMjI5LCA1LCAyNTMsIDI0MywgMjU0LCAyLCAyMTQsIDIyOSwgNSwgMjUzLCAKKyAgICAyNDMsIDI1MiwgODUsIDIxNCwgMjI5LCA1LCAyNTMsIDI0MywgMjE0LCAyNTIsIDIxNCwgMjI5LCA1LCAyNTMsIDI0MywgCisgICAgMjE0LCAyNTMsIDIsIDIxOCwgMjcsIDIxNCwgMjI5LCA1LCAyMTcsIDIxLCAyMTQsIDIyOSwgNSwgMjQxLCAxNzYsIDE4NCwgCisgICAgMjUzLCAyNDIsIDIxNCwgMjI5LCA1LCAxODQsIDI1MywgMjQyLCAyMTQsIDIyOSwgNSwgMjIzLCA1MywgMTg0LCAyNTMsIAorICAgIDI0MiwgMjE0LCAyMjksIDUsIDI1MywgMjQzLCAyMTUsIDE5MiwgMjMwLCAxNjAsIDIxNCwgMjI5LCA1LCAyNTMsIDE5MCwgNywgCisgICAgMSwgMywgNiwgNjEsIDcsIDEsIDMsIDYsIDI1NCwgMTQ4LCA3LCAzLCAxLCAyMTYsIDU4LCAyNTQsIDE0OCwgNywgMSwgMywgCisgICAgNiwgMjUyLCA1NCwgMjUzLCA3NCwgNywgMSwgMywgNiwgMjUwLCAyNTIsIDcsIDEsIDMsIDYsIDI0OSwgMywgNywgMSwgMywgCisgICAgNiwgMjQ1LCAyNSwgNywgMSwgMywgNiwgNzQsIDcsIDMsIDEsIDIxNiwgNTgsIDIyNywgNDAsIDc0LCA3LCAzLCAxLCAyMTYsIAorICAgIDU4LCA3MiwgNywgMSwgMywgNiwgMjM1LCAxNDIsIDcsIDEsIDMsIDYsIDIzNSwgMjcsIDcsIDEsIDMsIDYsIDIzMywgMTcxLCAKKyAgICAyLCA5MCwgNywgMSwgMywgNiwgMTgzLCA3LCAxLCAzLCA2LCAyMjMsIDIwMiwgMjA0LCA3LCAxLCAzLCA2LCA3NSwgNywgMSwgCisgICAgMywgNiwgMjI3LCA0MCwgNzUsIDcsIDMsIDEsIDIyMCwgMTEzLCA3NSwgNywgMywgMSwgMjIwLCAxMTMsIDIyNywgNDAsIDc1LCAKKyAgICA3LCAzLCAxLCAyMjAsIDExMywgMTU3LCAyLCA5MCwgNywgMywgMSwgMjE2LCA1OCwgMjI3LCA5OSwgNywgMSwgMywgNiwgCisgICAgMjI3LCAyLCA3LCAzLCAxLCAyMTYsIDIyNywgMTUxLCA3NSwgNywgMywgMSwgMjUxLCAxMDEsIDE1MSwgNzUsIDcsIDEsIDMsIAorICAgIDYsIDIyNiwgMjI5LCA3LCAxLCAzLCA2LCAyMjMsIDIwMiwgMTQ5LCA3LCAxLCAzLCA2LCAyMTYsIDU4LCAxNDksIDcsIDEsIAorICAgIDMsIDYsIDIxOCwgOTksIDcsIDEsIDMsIDYsIDY5LCA3LCAzLCAxLCAyMjAsIDExMywgNjksIDcsIDMsIDEsIDIyMCwgMTEzLCAKKyAgICAyNDcsIDIwOCwgNjksIDcsIDMsIDEsIDIyMCwgMTEzLCAyMTYsIDU4LCAxODMsIDcsIDEsIDMsIDYsIDIxNSwgNzksIDcsIDEsIAorICAgIDMsIDYsIDIxNCwgODIsIDcsIDEsIDMsIDYsIDIxMiwgMTUyLCA3LCAxLCAzLCA2LCAyNDQsIDIzMiwgNywgMSwgMjE0LCAKKyAgICAxMTYsIDIzMywgMTA1LCAyMTksIDE4MiwgNywgMSwgMjU0LCAxMDMsIDI1LCAxLCAzLCA2LCAyNDMsIDgzLCAyNSwgMSwgMywgCisgICAgNiwgMjMzLCAxMjIsIDI1LCAxLCAzLCA2LCAyMjUsIDI0MCwgMjUsIDEsIDMsIDYsIDIyMywgMTkwLCAyNSwgMSwgMywgNiwgCisgICAgMjI1LCA0NiwgMzMsIDEsIDMsIDYsIDI0NSwgMTMxLCA1OSwgMSwgNiwgNjEsIDU5LCAxLCA2LCAyNTQsIDE0OCwgNTksIDEsIAorICAgIDYsIDI1MywgNzQsIDU5LCAxLCA2LCAyNTIsIDU0LCAyNTMsIDc0LCA1OSwgMSwgNiwgMjQ5LCAzLCA1OSwgMSwgNiwgNzQsIAorICAgIDU5LCAxLCA2LCAyMjMsIDIwMiwgNzQsIDU5LCAxLCA2LCAyNDMsIDE3NywgNTksIDEsIDYsIDI0MiwgNDEsIDU5LCAxLCA2LCAKKyAgICA3MiwgNTksIDEsIDYsIDIzNSwgMTQyLCA1OSwgMSwgNiwgMjM1LCAyNywgNTksIDEsIDYsIDE1MCwgNTksIDEsIDYsIDE4MywgCisgICAgNTksIDEsIDYsIDIwNCwgNTksIDEsIDYsIDIyMywgMjAyLCAyMDQsIDU5LCAxLCA2LCA3NSwgNTksIDEsIDYsIDIyNywgMiwgCisgICAgNTksIDEsIDYsIDIyNiwgMjI5LCA1OSwgMSwgNiwgMTQ5LCA1OSwgMSwgNiwgMjE4LCA5OSwgNTksIDEsIDYsIDY5LCA1OSwgCisgICAgMSwgNiwgMjE0LCA4MiwgNTksIDEsIDMsIDYxLCA1OSwgMSwgMywgMjE2LCA1OCwgNjEsIDU5LCAxLCAzLCAyNTQsIDUyLCAKKyAgICA1OSwgMSwgMywgMjE2LCA1OCwgMjU0LCAxNDgsIDU5LCAxLCAzLCAyNTMsIDc0LCA1OSwgMSwgMywgMjQ5LCAzLCA1OSwgMSwgCisgICAgMywgNzQsIDU5LCAxLCAzLCAyMjIsIDExMywgNTksIDEsIDMsIDIyNywgNDAsIDc0LCA1OSwgMSwgMywgMjE2LCA1OCwgMjI3LCAKKyAgICA0MCwgNzQsIDU5LCAxLCAzLCAyNDMsIDE3NywgNTksIDEsIDMsIDIxNiwgNTgsIDcyLCA1OSwgMSwgMywgMjM1LCAyNywgNTksIAorICAgIDEsIDMsIDE4MywgNTksIDEsIDMsIDI0NSwgOTYsIDU5LCAxLCAzLCA3NSwgNTksIDEsIDMsIDIyNywgNDAsIDc1LCA1OSwgMSwgCisgICAgMywgMjE2LCAyMjcsIDE1MSwgNzUsIDU5LCAxLCAzLCAyNTEsIDEwMSwgMTUxLCA3NSwgNTksIDEsIDMsIDIyNiwgMjI5LCAKKyAgICA1OSwgMSwgMywgMjE4LCA5OSwgNTksIDEsIDMsIDY5LCA1OSwgMSwgMywgMjIwLCAxMTMsIDY5LCA1OSwgMSwgMywgMjE2LCAKKyAgICA1OCwgMTgzLCA1OSwgMSwgMywgMjE1LCA3OSwgNTksIDEsIDMsIDI1NCwgMTAzLCA1OSwgMSwgMywgMjUxLCAyMDMsIDU5LCAKKyAgICAxLCAzLCAyNSwgMjQzLCA4MywgNTksIDEsIDMsIDI0OCwgNSwgNTksIDEsIDMsIDI1LCAyMjYsIDksIDU5LCAxLCAzLCAyNTAsIAorICAgIDQ3LCA3LCAyMTksIDEwLCAzLCAxLCA3MiwgNywgMjE5LCAxMCwgMywgMSwgMTQ5LCA3LCAyMTksIDEwLCAzLCAxLCA2OSwgNywgCisgICAgMjE5LCAxMCwgMywgMSwgMjE1LCA3OSwgMjUsIDIxOSwgMTAsIDMsIDEsIDI1MSwgMjAzLCAyNSwgMjE5LCAxMCwgMywgMSwgCisgICAgMjQzLCA4MywgMjUsIDIxOSwgMTAsIDMsIDEsIDIyMywgMTkwLCAyNSwgMjE5LCAxMCwgMywgMSwgMjI2LCA5LCAyNSwgMjE5LCAKKyAgICAxMCwgMywgMSwgMjUwLCA0NywgNywgMywgMSwgMjE1LCAxODMsIDcsIDMsIDEsIDU0LCAyLCAyMzEsIDM3LCAyMTcsIDQyLCAKKyAgICA3LCAzLCAxLCAyNDksIDQsIDIsIDIzMSwgMzcsIDIxNywgNDIsIDcsIDMsIDEsIDI0NCwgMjMxLCAyLCAyMzEsIDM3LCAyMTcsIAorICAgIDQyLCA3LCAzLCAxLCAyMzIsIDExMCwgMiwgMjMxLCAzNywgMjE3LCA0MiwgNywgMywgMSwgMjMwLCA5OCwgMiwgMjMxLCAzNywgCisgICAgMjE3LCA0MiwgNywgMywgMSwgMjI2LCAyMzAsIDIsIDIzMSwgMzcsIDIxNywgNDIsIDcsIDMsIDEsIDIyNCwgMTEzLCAyLCAKKyAgICAyMzEsIDM3LCAyMTcsIDQyLCA3LCAzLCAxLCAyMjQsIDExMywgMiwgMjQ0LCA1NywgMjQsIDIzMSwgMzcsIDIxNywgNDIsIDcsIAorICAgIDMsIDEsIDIyMywgNCwgMiwgMjMxLCAzNywgMjE3LCA0MiwgNywgMywgMSwgMjE4LCAxMDAsIDIsIDIzMSwgMzcsIDIxNywgCisgICAgNDIsIDcsIDMsIDEsIDIxMiwgMTUzLCAyLCAyMzEsIDM3LCAyMTcsIDQyLCA3LCAzLCAxLCAyMTYsIDU4LCAyNDMsIDE3NywgCisgICAgNTksIDEsIDMzLCAyNDUsIDEwOCwgNywgMywgMSwgMjM1LCAyMTAsIDI0MywgMTc3LCA3LCAzLCAxLCAyMTcsIDE2NCwgMiwgCisgICAgMjE5LCA0NywgNywgMywgNiwgMSwgMjQwLCAxNDYsIDIsIDkwLCA3LCAzLCAxLCAyMzUsIDE4NCwgMiwgOTAsIDcsIDMsIDEsIAorICAgIDIyNiwgMjMwLCAyLCA5MCwgNywgMywgNiwgMSwgMTExLCAyLCA5MCwgNywgMywgMSwgMjE1LCAxMjksIDIsIDkwLCA3LCAzLCAKKyAgICAxLCA1NCwgMiwgMjI2LCAxOTMsIDEwMSwgNywgMywgMSwgMjQ5LCA0LCAyLCAyMjYsIDE5MywgMTAxLCA3LCAzLCAxLCAyNDQsIAorICAgIDIzMSwgMiwgMjI2LCAxOTMsIDEwMSwgNywgMywgMSwgMjQzLCAxNzgsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDIzNSwgCisgICAgMjgsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDIzMywgMTcxLCAyLCAyMjYsIDE5MywgMTAxLCA3LCAzLCAxLCAyMzIsIAorICAgIDExMCwgMiwgMjI2LCAxOTMsIDEwMSwgNywgMywgMSwgMjMwLCA5OCwgMiwgMjI2LCAxOTMsIDEwMSwgNywgMywgMSwgMjI2LCAKKyAgICAyMzAsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDIyNCwgMTEzLCAyLCAyMjYsIDE5MywgMTAxLCA3LCAzLCAxLCAyMjMsIAorICAgIDQsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDI0NSwgNDEsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDIxNSwgCisgICAgODAsIDIsIDIyNiwgMTkzLCAxMDEsIDcsIDMsIDEsIDIxMywgMTY3LCAyLCAyMjYsIDE5MywgMTAxLCA3LCAzLCAxLCAyMTIsIAorICAgIDE1MywgMiwgMjI2LCAxOTMsIDEwMSwgNywgMywgMSwgMTE4LCAyLCAyMjMsIDIwNywgMTAxLCA3LCAzLCAxLCAyNTQsIDUzLCAKKyAgICAyLCAyMjMsIDIwNywgMTAxLCA3LCAzLCAxLCAyNDksIDQsIDIsIDI0MSwgMzgsIDI0LCAyMTgsIDI3LCA3LCAzLCAxLCAxOTEsIAorICAgIDIsIDIyMywgMjA3LCAxMDEsIDcsIDMsIDEsIDIyNywgNDAsIDE5MSwgMiwgMjIzLCAyMDcsIDEwMSwgNywgMywgMSwgMjIzLCAKKyAgICAyMDIsIDIyNywgNDAsIDE5MSwgMiwgMjIzLCAyMDcsIDEwMSwgNywgMywgMSwgMjIyLCAxMTQsIDIsIDIyMywgMjA3LCAxMDEsIAorICAgIDcsIDMsIDEsIDI0MCwgMTQ2LCAyLCAyMjMsIDIwNywgMTAxLCA3LCAzLCAxLCAyMjcsIDQwLCAxNTcsIDIsIDIyMywgMjA3LCAKKyAgICAxMDEsIDcsIDMsIDEsIDI0NSwgNDEsIDIsIDIyMywgMjA3LCAxMDEsIDcsIDMsIDEsIDExMSwgMiwgMjIzLCAyMDcsIDEwMSwgCisgICAgNywgMywgMSwgMjQ0LCAyMzMsIDIsIDIyMywgMjA3LCAxMDEsIDU5LCAxLCAzLCAyMTYsIDU4LCAyNTQsIDUyLCA1OSwgMSwgCisgICAgMywgMjUwLCAyNTIsIDU5LCAxLCAzLCAyNTAsIDI1MywgMiwgMjQ5LCA0MSwgNTksIDEsIDMsIDI0NSwgMjUsIDU5LCAxLCAzLCAKKyAgICAyMjMsIDIwMiwgMjI3LCA0MCwgNzQsIDU5LCAxLCAzLCAyNDQsIDIzMCwgNTksIDEsIDMsIDI0NywgNzMsIDIzNSwgMTQzLCAKKyAgICAyLCA5MCwgNTksIDEsIDMsIDExMywgMjQzLCAxNzcsIDU5LCAxLCAzLCAyMTYsIDU4LCAyNDIsIDQxLCA1OSwgMSwgMywgCisgICAgMjQwLCAxNDYsIDIsIDkwLCA1OSwgMSwgMywgMjM1LCAxODMsIDU5LCAxLCAzLCA2LCA3MiwgNTksIDEsIDMsIDYsIDI0MCwgCisgICAgMTQ2LCAyLCA5MCwgNTksIDEsIDMsIDIzNSwgMTQzLCAyLCAyNDksIDY3LCA1OSwgMSwgMywgMjMzLCAxNzEsIDIsIDIyMywgCisgICAgMjA3LCAxMDEsIDU5LCAxLCAzLCAyMzMsIDE3MSwgMiwgMjI2LCAxOTMsIDEwMSwgNTksIDEsIDMsIDYsIDE1MCwgNTksIDEsIAorICAgIDMsIDIzMiwgMTEwLCAyLCAxMDEsIDU5LCAxLCAzLCAyMTYsIDU4LCAyMzIsIDExMCwgMiwgMTg0LCAyMzMsIDYwLCA1OSwgMSwgCisgICAgMywgMjMwLCA5OCwgMiwgNDIsIDEwMSwgNTksIDEsIDMsIDIzMCwgOTgsIDIsIDIyMywgMjA3LCAxMDEsIDU5LCAxLCAzLCA2LCAKKyAgICAyMDQsIDU5LCAxLCAzLCAyNTIsIDU0LCA3NSwgNTksIDEsIDMsIDIyNiwgOSwgNTksIDEsIDMsIDIyMywgNCwgMiwgMTAxLCAKKyAgICA1OSwgMSwgMywgMjQ1LCA0MCwgNTksIDEsIDMsIDIxOCwgMTAwLCAyLCAyMjYsIDE5MywgMTAxLCA1OSwgMSwgMywgMTExLCAKKyAgICAxMzQsIDU5LCAxLCAzLCAyMTUsIDEyOCwgNTksIDEsIDMsIDYsIDY5LCA1OSwgMSwgMywgMjE1LCA4MCwgMiwgMTAxLCA1OSwgCisgICAgMSwgMywgMjE2LCA1OCwgMjE1LCA3OSwgNTksIDEsIDMsIDIxMiwgMTUyLCA1OSwgMSwgMywgMjEyLCAxNTMsIDIsIDIyMywgCisgICAgMjA3LCAxMDEsIDU5LCAxLCAzLCAyMTIsIDE1MywgMiwgMjQ5LCA0MSwgNTksIDEsIDMsIDI0NCwgMjMyLCA1OSwgMSwgMywgCisgICAgMjE3LCAxMzIsIDM3LCAyNDYsIDcyLCAyNDIsIDExNCwgMjU0LCAxNzQsIDM3LCAyNDYsIDcyLCAyNTQsIDE2NCwgMjU0LCAKKyAgICAxNzQsIDM3LCAyMTksIDI1MywgNTUsIDM3LCAyMTgsIDIwNywgNzcsIDM3LCAyMzIsIDM2LCAzNywgMjQyLCAxMTEsIDM3LCAKKyAgICAyMzIsIDM0LCAzNywgMjU0LCAxNjIsIDM3LCAyNDIsIDExMiwgMzcsIDI1NCwgMTYzLCAzNywgNywgMywgMSwgMjI0LCAxMTMsIAorICAgIDU1LCAzNywgMjUxLCA3MywgMzcsIDIzMiwgMzUsIDM3LCA1MSwgMjQ5LCAyMjQsIDQ5LCAzNywgMjI3LCA5MSwgNDksIDM3LCAKKyAgICAyMTIsIDI4LCA1NSwgMzcsIDIzNSwgMTcwLCA1NSwgMzcsIDIxNSwgMTIyLCA0OSwgMzcsIDIxNSwgMTA1LCA0OSwgMzcsIDcsIAorICAgIDMsIDEsIDI0NCwgMzIsIDIyNywgNDAsIDExOCwgNDksIDM3LCA3LCAzLCAxLCAyNTQsIDE0OCwgMzcsIDcsIDMsIDEsIDI1MywgCisgICAgMjQwLCAzNywgNywgMywgMSwgMjUzLCA5MiwgMzcsIDcsIDMsIDEsIDI1MCwgMjUzLCAyNTAsIDExNywgMzcsIDcsIDMsIDEsIAorICAgIDIzNSwgMjEwLCAyNDksIDMsIDM3LCA3LCAzLCAxLCAyNDUsIDI1LCAzNywgNywgMywgMSwgMjQzLCAxNzcsIDM3LCA3LCAxLCAKKyAgICAzLCA2LCAyNDMsIDE3NywgMzcsIDcsIDMsIDEsIDIzNSwgMjcsIDM3LCA3LCAzLCAxLCAxNTAsIDM3LCA3LCAxLCAzLCA2LCAKKyAgICAxNTAsIDM3LCA3LCAxLCAzLCA2LCAxODMsIDM3LCA3LCAzLCAxLCAyMDQsIDM3LCA3LCAxLCAzLCA2LCAyMDQsIDM3LCA3LCAKKyAgICAxLCAzLCA2LCAxNDksIDM3LCA3LCAzLCAxLCAyMjQsIDExMywgMjIzLCA4OCwgMzcsIDcsIDMsIDEsIDE5NywgMzcsIDcsIDMsIAorICAgIDEsIDE4NCwgMTk3LCAzNywgNywgMywgMSwgMjEyLCAxNTIsIDM3LCA1MSwgMjM1LCAxOTEsIDI1MSwgNzUsIDU1LCAzNywgCisgICAgMjU0LCA1NywgMTIzLCAyMTEsIDIxMSwgNTUsIDM3LCA0MiwgMjUzLCAxNjUsIDQ5LCAzNywgNDYsIDI1MywgMTY1LCAyNCwgCisgICAgMTE5LCAyNTMsIDE2NSwgNTUsIDcsIDYsIDEsIDExOCwgMiwgMjIzLCAxMzEsIDU1LCA3LCAzLCAxLCAxMTgsIDIsIDIyMywgCisgICAgMTMxLCA1NSwgNywgNiwgMSwgNTQsIDIsIDYyLCA0OSwgNywgMywgMSwgNTQsIDIsIDYyLCA0OSwgNywgNiwgMSwgNTQsIDIsIAorICAgIDYyLCA1NSwgNywgMywgMSwgNTQsIDIsIDYyLCA1NSwgNywgNiwgMSwgNTQsIDIsIDIzMiwgMjQzLCA1NSwgNywgMywgMSwgCisgICAgNTQsIDIsIDIzMiwgMjQzLCA1NSwgNywgNiwgMSwgMjUwLCAyNTMsIDIsIDI1MCwgMTE4LCAyNCwgMTc5LCA3LCAzLCAxLCAKKyAgICAyNTAsIDI1MywgMiwgMjUwLCAxMTgsIDI0LCAxNzksIDcsIDYsIDEsIDI0OSwgNCwgMiwgNjIsIDQ5LCA3LCAzLCAxLCAyNDksIAorICAgIDQsIDIsIDYyLCA0OSwgNywgNiwgMSwgMjQ5LCA0LCAyLCA2MiwgNTUsIDcsIDMsIDEsIDI0OSwgNCwgMiwgNjIsIDU1LCA3LCAKKyAgICA2LCAxLCAyNDksIDQsIDIsIDIzMiwgMjQzLCA1NSwgNywgMywgMSwgMjQ5LCA0LCAyLCAyMzIsIDI0MywgNTUsIDcsIDYsIDEsIAorICAgIDI0OSwgNCwgMiwgMjUwLCAxMTcsIDcsIDMsIDEsIDI0OSwgNCwgMiwgMjUwLCAxMTcsIDcsIDYsIDEsIDI0OSwgNCwgMiwgCisgICAgMjQ5LCAyMjQsIDU1LCA3LCAzLCAxLCAyNDksIDQsIDIsIDI0OSwgMjI0LCA1NSwgNywgNiwgMSwgMTkxLCAyLCAyMzIsIDM4LCAKKyAgICAyNCwgMjQyLCAxMTMsIDcsIDMsIDEsIDE5MSwgMiwgMjMyLCAzOCwgMjQsIDI0MiwgMTEzLCA3LCA2LCAxLCAxOTEsIDIsIAorICAgIDIzMiwgMzgsIDI0LCAxNzksIDcsIDMsIDEsIDE5MSwgMiwgMjMyLCAzOCwgMjQsIDE3OSwgNywgNiwgMSwgMTkxLCAyLCAKKyAgICAyNDksIDIyNCwgNTUsIDcsIDMsIDEsIDE5MSwgMiwgMjQ5LCAyMjQsIDU1LCA3LCA2LCAxLCAxOTEsIDIsIDIxNywgNDMsIAorICAgIDU1LCA3LCAzLCAxLCAxOTEsIDIsIDIxNywgNDMsIDU1LCA3LCA2LCAxLCAxOTEsIDIsIDI1MCwgMTE4LCAyNCwgMjUxLCA3NCwgCisgICAgNywgMywgMSwgMTkxLCAyLCAyNTAsIDExOCwgMjQsIDI1MSwgNzQsIDcsIDYsIDEsIDI0NCwgMjMxLCAyLCA2MiwgNDksIDcsIAorICAgIDMsIDEsIDI0NCwgMjMxLCAyLCA2MiwgNDksIDcsIDYsIDEsIDI0MywgMTc4LCAyLCAyMzIsIDM3LCA3LCAzLCAxLCAyNDMsIAorICAgIDE3OCwgMiwgMjMyLCAzNywgNywgNiwgMSwgMjQyLCA0MiwgMiwgNjIsIDQ5LCA3LCAzLCAxLCAyNDIsIDQyLCAyLCA2MiwgCisgICAgNDksIDcsIDYsIDEsIDI0MiwgNDIsIDIsIDYyLCA1NSwgNywgMywgMSwgMjQyLCA0MiwgMiwgNjIsIDU1LCA3LCA2LCAxLCAKKyAgICAyNDIsIDQyLCAyLCAyNDcsIDIwOSwgNywgMywgMSwgMjQyLCA0MiwgMiwgMjQ3LCAyMDksIDcsIDYsIDEsIDI0MiwgNDIsIDIsIAorICAgIDI1MCwgMTE3LCA3LCAzLCAxLCAyNDIsIDQyLCAyLCAyNTAsIDExNywgNywgNiwgMSwgMjQyLCA0MiwgMiwgMjUxLCA3NSwgCisgICAgNTUsIDcsIDMsIDEsIDI0MiwgNDIsIDIsIDI1MSwgNzUsIDU1LCA3LCA2LCAxLCAyNDAsIDE0NiwgMiwgMjE3LCA0MywgNTUsIAorICAgIDcsIDMsIDEsIDI0MCwgMTQ2LCAyLCAyMTcsIDQzLCA1NSwgNywgNiwgMSwgMjQwLCAxNDYsIDIsIDI0NywgMjEwLCAyNCwgCisgICAgMTc5LCA3LCAzLCAxLCAyNDAsIDE0NiwgMiwgMjQ3LCAyMTAsIDI0LCAxNzksIDcsIDYsIDEsIDIzNSwgMjgsIDIsIDE3OSwgCisgICAgNywgMywgMSwgMjM1LCAyOCwgMiwgMTc5LCA3LCA2LCAxLCAyMzUsIDI4LCAyLCA2MiwgNTUsIDcsIDMsIDEsIDIzNSwgMjgsIAorICAgIDIsIDYyLCA1NSwgNywgNiwgMSwgMjM1LCAyOCwgMiwgMjMyLCAyNDMsIDU1LCA3LCAzLCAxLCAyMzUsIDI4LCAyLCAyMzIsIAorICAgIDI0MywgNTUsIDcsIDYsIDEsIDIzMywgMTcxLCAyLCA2MiwgNTUsIDcsIDMsIDEsIDIzMywgMTcxLCAyLCA2MiwgNTUsIDcsIAorICAgIDYsIDEsIDIzMywgMTcxLCAyLCA2MiwgMjUxLCAyMjAsIDI0LCAyMzIsIDM3LCA3LCAzLCAxLCAyMzMsIDE3MSwgMiwgNjIsIAorICAgIDI1MSwgMjIwLCAyNCwgMjMyLCAzNywgNywgNiwgMSwgMjMzLCAxNzEsIDIsIDIzMiwgMjQzLCA1NSwgNywgMywgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDIzMiwgMjQzLCA1NSwgNywgNiwgMSwgMjMzLCAxNzEsIDIsIDI0OSwgMjI0LCA1NSwgNywgMywgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDI0OSwgMjI0LCA1NSwgNywgNiwgMSwgMjMyLCAxMTAsIDIsIDE3OSwgNywgMywgMSwgMjMyLCAxMTAsIDIsIAorICAgIDE3OSwgNywgNiwgMSwgMjMyLCAxMTAsIDIsIDYyLCA0OSwgNywgMywgMSwgMjMyLCAxMTAsIDIsIDYyLCA0OSwgNywgNiwgMSwgCisgICAgMjMyLCAxMTAsIDIsIDYyLCA1NSwgNywgMywgMSwgMjMyLCAxMTAsIDIsIDYyLCA1NSwgNywgNiwgMSwgMjMwLCA5OCwgMiwgCisgICAgNjIsIDQ5LCA3LCAzLCAxLCAyMzAsIDk4LCAyLCA2MiwgNDksIDcsIDYsIDEsIDIzMCwgOTgsIDIsIDYyLCA1NSwgNywgMywgCisgICAgMSwgMjMwLCA5OCwgMiwgNjIsIDU1LCA3LCA2LCAxLCAyMzAsIDk4LCAyLCAyMzIsIDI0MywgNTUsIDcsIDMsIDEsIDIzMCwgCisgICAgOTgsIDIsIDIzMiwgMjQzLCA1NSwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjQ5LCAyMjQsIDU1LCA3LCAzLCAxLCAyMzAsIDk4LCAKKyAgICAyLCAyNDksIDIyNCwgNTUsIDcsIDYsIDEsIDE1NywgMiwgMjE3LCA0MywgMjQsIDE3OSwgNywgMywgMSwgMTU3LCAyLCAyMTcsIAorICAgIDQzLCAyNCwgMTc5LCA3LCA2LCAxLCAxNTcsIDIsIDIxNywgNDMsIDI0LCAyNDcsIDIwOSwgNywgMywgMSwgMTU3LCAyLCAKKyAgICAyMTcsIDQzLCAyNCwgMjQ3LCAyMDksIDcsIDYsIDEsIDE1NywgMiwgMjMyLCAzOCwgMjQsIDI0MiwgMTEzLCA3LCAzLCAxLCAKKyAgICAxNTcsIDIsIDIzMiwgMzgsIDI0LCAyNDIsIDExMywgNywgNiwgMSwgMTU3LCAyLCAyMzIsIDM4LCAyNCwgMTc5LCA3LCAzLCAKKyAgICAxLCAxNTcsIDIsIDIzMiwgMzgsIDI0LCAxNzksIDcsIDYsIDEsIDIyNiwgMjMwLCAyLCAxNzksIDcsIDMsIDEsIDIyNiwgCisgICAgMjMwLCAyLCAxNzksIDcsIDYsIDEsIDIyNiwgMjMwLCAyLCA2MiwgNDksIDcsIDMsIDEsIDIyNiwgMjMwLCAyLCA2MiwgNDksIAorICAgIDcsIDYsIDEsIDIyNCwgMTEzLCAyLCA2MiwgNDksIDcsIDMsIDEsIDIyNCwgMTEzLCAyLCA2MiwgNDksIDcsIDYsIDEsIDIyNCwgCisgICAgMTEzLCAyLCA2MiwgNTUsIDcsIDMsIDEsIDIyNCwgMTEzLCAyLCA2MiwgNTUsIDcsIDYsIDEsIDIyNCwgMTEzLCAyLCA2MiwgCisgICAgMjUxLCAyMjAsIDI0LCAyMzIsIDM3LCA3LCAzLCAxLCAyMjQsIDExMywgMiwgNjIsIDI1MSwgMjIwLCAyNCwgMjMyLCAzNywgCisgICAgNywgNiwgMSwgMjI0LCAxMTMsIDIsIDIzMiwgMjQzLCA1NSwgNywgMywgMSwgMjI0LCAxMTMsIDIsIDIzMiwgMjQzLCA1NSwgCisgICAgNywgNiwgMSwgMjIzLCA0LCAyLCA2MiwgNDksIDcsIDMsIDEsIDIyMywgNCwgMiwgNjIsIDQ5LCA3LCA2LCAxLCAyMjMsIDQsIAorICAgIDIsIDYyLCA1NSwgNywgMywgMSwgMjIzLCA0LCAyLCA2MiwgNTUsIDcsIDYsIDEsIDIyMywgNCwgMiwgMjU0LCAxNjQsIDI0LCAKKyAgICA2MiwgNDksIDcsIDMsIDEsIDIyMywgNCwgMiwgMjU0LCAxNjQsIDI0LCA2MiwgNDksIDcsIDYsIDEsIDIyMywgNCwgMiwgCisgICAgMjUwLCAxNjcsIDI0LCA2MiwgNDksIDcsIDMsIDEsIDIyMywgNCwgMiwgMjUwLCAxNjcsIDI0LCA2MiwgNDksIDcsIDYsIDEsIAorICAgIDIyMywgNCwgMiwgNjIsIDI1MSwgMjIwLCAyNCwgNjIsIDQ5LCA3LCAzLCAxLCAyMjMsIDQsIDIsIDYyLCAyNTEsIDIyMCwgCisgICAgMjQsIDYyLCA0OSwgNywgNiwgMSwgMjE4LCAxMDAsIDIsIDYyLCA0OSwgNywgMywgMSwgMjE4LCAxMDAsIDIsIDYyLCA0OSwgCisgICAgNywgNiwgMSwgMjE4LCAxMDAsIDIsIDYyLCA1NSwgNywgMywgMSwgMjE4LCAxMDAsIDIsIDYyLCA1NSwgNywgNiwgMSwgMjE4LCAKKyAgICAxMDAsIDIsIDIzMiwgMjQzLCA1NSwgNywgMywgMSwgMjE4LCAxMDAsIDIsIDIzMiwgMjQzLCA1NSwgNywgNiwgMSwgMjE4LCAKKyAgICAxMDAsIDIsIDI0OSwgMjI0LCA1NSwgNywgMywgMSwgMjE4LCAxMDAsIDIsIDI0OSwgMjI0LCA1NSwgNywgNiwgMSwgMTExLCAKKyAgICAyLCAyNDcsIDIxMCwgNTUsIDcsIDMsIDEsIDExMSwgMiwgMjQ3LCAyMTAsIDU1LCA3LCA2LCAxLCAxMTEsIDIsIDIxNywgNDMsIAorICAgIDU1LCA3LCAzLCAxLCAxMTEsIDIsIDIxNywgNDMsIDU1LCA3LCA2LCAxLCAxMTEsIDIsIDI0OSwgMjI0LCA1NSwgNywgMywgMSwgCisgICAgMTExLCAyLCAyNDksIDIyNCwgNTUsIDcsIDYsIDEsIDExMSwgMiwgMjE3LCA0MywgMjQsIDE3OSwgNywgMywgMSwgMTExLCAyLCAKKyAgICAyMTcsIDQzLCAyNCwgMTc5LCA3LCA2LCAxLCAxMTEsIDIsIDIzMiwgMzgsIDI0LCAyNDcsIDIwOSwgNywgMywgMSwgMTExLCAKKyAgICAyLCAyMzIsIDM4LCAyNCwgMjQ3LCAyMDksIDcsIDYsIDEsIDIxNSwgODAsIDIsIDIxNywgNDIsIDcsIDMsIDEsIDIxNSwgODAsIAorICAgIDIsIDIxNywgNDIsIDcsIDYsIDEsIDIxNSwgODAsIDIsIDYyLCA1NSwgNywgMywgMSwgMjE1LCA4MCwgMiwgNjIsIDU1LCA3LCAKKyAgICA2LCAxLCAyMTQsIDgzLCAyLCAyNDIsIDExMywgNywgMywgMSwgMjE0LCA4MywgMiwgMjQyLCAxMTMsIDcsIDYsIDEsIDIxNCwgCisgICAgODMsIDIsIDE3OSwgNywgMywgMSwgMjE0LCA4MywgMiwgMTc5LCA3LCA2LCAxLCAyMTQsIDgzLCAyLCAyNDcsIDIwOSwgNywgCisgICAgMywgMSwgMjE0LCA4MywgMiwgMjQ3LCAyMDksIDcsIDYsIDEsIDIxNCwgODMsIDIsIDYyLCA0OSwgNywgMywgMSwgMjE0LCAKKyAgICA4MywgMiwgNjIsIDQ5LCA3LCA2LCAxLCAyMTQsIDgzLCAyLCA2MiwgNTUsIDcsIDMsIDEsIDIxNCwgODMsIDIsIDYyLCA1NSwgCisgICAgNywgNiwgMSwgMjEzLCAxNjcsIDIsIDYyLCA0OSwgNywgMywgMSwgMjEzLCAxNjcsIDIsIDYyLCA0OSwgNywgNiwgMSwgMjEzLCAKKyAgICAxNjcsIDIsIDI0NywgMjA5LCA3LCAzLCAxLCAyMTMsIDE2NywgMiwgMjQ3LCAyMDksIDcsIDYsIDEsIDIxMywgMTA2LCAyLCAKKyAgICA2MiwgNDksIDcsIDMsIDEsIDIxMywgMTA2LCAyLCA2MiwgNDksIDcsIDYsIDEsIDIxMiwgMTUzLCAyLCAyNDksIDIyMywgNywgCisgICAgMywgMSwgMjEyLCAxNTMsIDIsIDI0OSwgMjIzLCA3LCA2LCAxLCAyMTIsIDE1MywgMiwgNjIsIDU1LCA3LCAzLCAxLCAyMTIsIAorICAgIDE1MywgMiwgNjIsIDU1LCA3LCA2LCAxLCAyMTIsIDE1MywgMiwgMjMyLCAyNDMsIDU1LCA3LCAzLCAxLCAyMTIsIDE1MywgMiwgCisgICAgMjMyLCAyNDMsIDU1LCA3LCAzLCAxLCAyNDIsIDQyLCAyLCAyMzIsIDI0MywgNTUsIDcsIDMsIDEsIDIxOCwgMTAwLCAyLCAKKyAgICAyNDcsIDIwOSwgNywgMywgMSwgMjE0LCA4MywgMiwgMjIzLCAxMzEsIDQ5LCA3LCAzLCAxLCAyMTMsIDEwNiwgMiwgMjIzLCAKKyAgICAxMzEsIDQ5LCA3LCAzLCAxLCAxMTgsIDIsIDQ2LCAxNTEsIDIyMywgMTMwLCA3LCAzLCAxLCAxODQsIDIyMywgNCwgMiwgNjIsIAorICAgIDQ5LCA3LCAzLCAxLCAxODQsIDIyMywgNCwgMiwgMjQ3LCAyMDcsIDkwLCA3LCAzLCAxLCAxODQsIDIyMywgNCwgMiwgMTI0LCAKKyAgICA5MCwgNywgNiwgMSwgMjIwLCAyNTUsIDE5NywgNywgMywgMSwgMjQ4LCA1LCA3LCA2LCAxLCAxMTgsIDIsIDYyLCA1NSwgNywgCisgICAgMywgMSwgMTE4LCAyLCA2MiwgNTUsIDcsIDYsIDEsIDExOCwgMiwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIDExOCwgMiwgMjQxLCAKKyAgICAzOCwgNDksIDcsIDYsIDEsIDExOCwgMiwgMjQ5LCAyMjQsIDI0LCAxNzksIDcsIDMsIDEsIDExOCwgMiwgMjQ5LCAyMjQsIAorICAgIDI0LCAxNzksIDcsIDYsIDEsIDExOCwgMiwgMjQ5LCAyMjQsIDI0LCAyNDIsIDExMywgNywgMywgMSwgMTE4LCAyLCAyNDksIAorICAgIDIyNCwgMjQsIDI0MiwgMTEzLCA3LCA2LCAxLCAxMTgsIDIsIDI0OSwgMjI0LCAyNCwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIAorICAgIDExOCwgMiwgMjQ5LCAyMjQsIDI0LCAyNDEsIDM4LCA0OSwgNywgNiwgMSwgMTE4LCAyLCAyNDksIDIyNCwgMjQsIDIxNywgCisgICAgNDIsIDcsIDMsIDEsIDExOCwgMiwgMjQ5LCAyMjQsIDI0LCAyMTcsIDQyLCA3LCA2LCAxLCAxMTgsIDIsIDI0OSwgMjI0LCAKKyAgICAyNCwgNjIsIDU1LCA3LCAzLCAxLCAxMTgsIDIsIDI0OSwgMjI0LCAyNCwgNjIsIDU1LCA3LCA2LCAxLCAxMTgsIDIsIDI1MSwgCisgICAgNzUsIDI0LCAxNzksIDcsIDMsIDEsIDExOCwgMiwgMjUxLCA3NSwgMjQsIDE3OSwgNywgNiwgMSwgMTE4LCAyLCAyNTEsIDc1LCAKKyAgICAyNCwgMjQyLCAxMTMsIDcsIDMsIDEsIDExOCwgMiwgMjUxLCA3NSwgMjQsIDI0MiwgMTEzLCA3LCA2LCAxLCAxMTgsIDIsIAorICAgIDI1MSwgNzUsIDI0LCAyNDEsIDM4LCA0OSwgNywgMywgMSwgMTE4LCAyLCAyNTEsIDc1LCAyNCwgMjQxLCAzOCwgNDksIDcsIAorICAgIDYsIDEsIDExOCwgMiwgMjUxLCA3NSwgMjQsIDIxNywgNDIsIDcsIDMsIDEsIDExOCwgMiwgMjUxLCA3NSwgMjQsIDIxNywgCisgICAgNDIsIDcsIDYsIDEsIDExOCwgMiwgMjUxLCA3NSwgMjQsIDYyLCA1NSwgNywgMywgMSwgMTE4LCAyLCAyNTEsIDc1LCAyNCwgCisgICAgNjIsIDU1LCA3LCA2LCAxLCAxOTEsIDIsIDYyLCA1NSwgNywgMywgMSwgMTkxLCAyLCA2MiwgNTUsIDcsIDYsIDEsIDE5MSwgCisgICAgMiwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIDE5MSwgMiwgMjQxLCAzOCwgNDksIDcsIDYsIDEsIDE5MSwgMiwgMjE3LCA0MiwgCisgICAgNywgMywgMSwgMTkxLCAyLCAyMTcsIDQyLCA3LCA2LCAxLCAxOTEsIDIsIDI0OSwgMjI0LCAyNCwgMTc5LCA3LCAzLCAxLCAKKyAgICAxOTEsIDIsIDI0OSwgMjI0LCAyNCwgMTc5LCA3LCA2LCAxLCAxOTEsIDIsIDI0OSwgMjI0LCAyNCwgMjQyLCAxMTMsIDcsIDMsIAorICAgIDEsIDE5MSwgMiwgMjQ5LCAyMjQsIDI0LCAyNDIsIDExMywgNywgNiwgMSwgMTkxLCAyLCAyNDksIDIyNCwgMjQsIDI0MSwgCisgICAgMzgsIDQ5LCA3LCAzLCAxLCAxOTEsIDIsIDI0OSwgMjI0LCAyNCwgMjQxLCAzOCwgNDksIDcsIDYsIDEsIDE5MSwgMiwgMjQ5LCAKKyAgICAyMjQsIDI0LCAyMTcsIDQyLCA3LCAzLCAxLCAxOTEsIDIsIDI0OSwgMjI0LCAyNCwgMjE3LCA0MiwgNywgNiwgMSwgMTkxLCAKKyAgICAyLCAyNDksIDIyNCwgMjQsIDYyLCA1NSwgNywgMywgMSwgMTkxLCAyLCAyNDksIDIyNCwgMjQsIDYyLCA1NSwgNywgNiwgMSwgCisgICAgMjQwLCAxNDYsIDIsIDI0MSwgMzgsIDQ5LCA3LCAzLCAxLCAyNDAsIDE0NiwgMiwgMjQxLCAzOCwgNDksIDcsIDYsIDEsIAorICAgIDI0MCwgMTQ2LCAyLCA2MiwgNTUsIDcsIDMsIDEsIDI0MCwgMTQ2LCAyLCA2MiwgNTUsIDcsIDYsIDEsIDE1NywgMiwgNjIsIAorICAgIDU1LCA3LCAzLCAxLCAxNTcsIDIsIDYyLCA1NSwgNywgNiwgMSwgMTU3LCAyLCAyNDEsIDM4LCA0OSwgNywgMywgMSwgMTU3LCAKKyAgICAyLCAyNDEsIDM4LCA0OSwgNywgNiwgMSwgMTU3LCAyLCAyNDksIDIyNCwgMjQsIDE3OSwgNywgMywgMSwgMTU3LCAyLCAyNDksIAorICAgIDIyNCwgMjQsIDE3OSwgNywgNiwgMSwgMTU3LCAyLCAyNDksIDIyNCwgMjQsIDI0MiwgMTEzLCA3LCAzLCAxLCAxNTcsIDIsIAorICAgIDI0OSwgMjI0LCAyNCwgMjQyLCAxMTMsIDcsIDYsIDEsIDE1NywgMiwgMjQ5LCAyMjQsIDI0LCAyNDEsIDM4LCA0OSwgNywgMywgCisgICAgMSwgMTU3LCAyLCAyNDksIDIyNCwgMjQsIDI0MSwgMzgsIDQ5LCA3LCA2LCAxLCAxNTcsIDIsIDI0OSwgMjI0LCAyNCwgMjE3LCAKKyAgICA0MiwgNywgMywgMSwgMTU3LCAyLCAyNDksIDIyNCwgMjQsIDIxNywgNDIsIDcsIDYsIDEsIDE1NywgMiwgMjQ5LCAyMjQsIAorICAgIDI0LCA2MiwgNTUsIDcsIDMsIDEsIDE1NywgMiwgMjQ5LCAyMjQsIDI0LCA2MiwgNTUsIDcsIDYsIDEsIDE1NywgMiwgMjQwLCAKKyAgICAyMzYsIDI0LCAxNzksIDcsIDMsIDEsIDE1NywgMiwgMjQwLCAyMzYsIDI0LCAxNzksIDcsIDYsIDEsIDE1NywgMiwgMjQwLCAKKyAgICAyMzYsIDI0LCAyNDIsIDExMywgNywgMywgMSwgMTU3LCAyLCAyNDAsIDIzNiwgMjQsIDI0MiwgMTEzLCA3LCA2LCAxLCAxNTcsIAorICAgIDIsIDI0MCwgMjM2LCAyNCwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIDE1NywgMiwgMjQwLCAyMzYsIDI0LCAyNDEsIDM4LCA0OSwgCisgICAgNywgNiwgMSwgMTU3LCAyLCAyNDAsIDIzNiwgMjQsIDIxNywgNDIsIDcsIDMsIDEsIDE1NywgMiwgMjQwLCAyMzYsIDI0LCAKKyAgICAyMTcsIDQyLCA3LCA2LCAxLCAxNTcsIDIsIDI0MCwgMjM2LCAyNCwgNjIsIDU1LCA3LCAzLCAxLCAxNTcsIDIsIDI0MCwgCisgICAgMjM2LCAyNCwgNjIsIDU1LCA3LCA2LCAxLCAxMTEsIDIsIDYyLCA1NSwgNywgMywgMSwgMTExLCAyLCA2MiwgNTUsIDcsIDYsIAorICAgIDEsIDExMSwgMiwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIDExMSwgMiwgMjQxLCAzOCwgNDksIDcsIDYsIDEsIDExMSwgMiwgCisgICAgMjQwLCAyMzYsIDI0LCAxNzksIDcsIDMsIDEsIDExMSwgMiwgMjQwLCAyMzYsIDI0LCAxNzksIDcsIDYsIDEsIDExMSwgMiwgCisgICAgMjQwLCAyMzYsIDI0LCAyNDIsIDExMywgNywgMywgMSwgMTExLCAyLCAyNDAsIDIzNiwgMjQsIDI0MiwgMTEzLCA3LCA2LCAxLCAKKyAgICAxMTEsIDIsIDI0MCwgMjM2LCAyNCwgMjQxLCAzOCwgNDksIDcsIDMsIDEsIDExMSwgMiwgMjQwLCAyMzYsIDI0LCAyNDEsIAorICAgIDM4LCA0OSwgNywgNiwgMSwgMTExLCAyLCAyNDAsIDIzNiwgMjQsIDIxNywgNDIsIDcsIDMsIDEsIDExMSwgMiwgMjQwLCAKKyAgICAyMzYsIDI0LCAyMTcsIDQyLCA3LCA2LCAxLCAxMTEsIDIsIDI0MCwgMjM2LCAyNCwgNjIsIDU1LCA3LCAzLCAxLCAxMTEsIDIsIAorICAgIDI0MCwgMjM2LCAyNCwgNjIsIDU1LCA3LCA2LCAxLCAyMTMsIDEwNiwgMiwgMjQyLCAxMTMsIDcsIDMsIDEsIDIxMywgMTA2LCAKKyAgICAyLCAyNDIsIDExMywgNywgNiwgMSwgMjEzLCAxMDYsIDIsIDYyLCA1NSwgNywgMywgMSwgMjEzLCAxMDYsIDIsIDYyLCA1NSwgCisgICAgNywgNiwgMSwgMjEzLCAxMDYsIDIsIDI0MSwgMzgsIDQ5LCA3LCAzLCAxLCAyMTMsIDEwNiwgMiwgMjQxLCAzOCwgNDksIDcsIAorICAgIDYsIDEsIDIxMywgMTA2LCAyLCAyMTcsIDQyLCA3LCAzLCAxLCAyMTMsIDEwNiwgMiwgMjE3LCA0MiwgNywgNiwgMSwgMjMxLCAKKyAgICAzNiwgMjMyLCAyMTQsIDcsIDMsIDEsIDIzMSwgMzYsIDIzMiwgMjE0LCA3LCA2LCAxLCAyMzEsIDM2LCAyMTUsIDc5LCA3LCAKKyAgICAzLCAxLCAyMzEsIDM2LCAyMTUsIDc5LCA3LCA2LCAxLCAyMTMsIDEwNiwgMiwgMjMyLCAxNzcsIDcsIDMsIDEsIDIxMywgCisgICAgMTA2LCAyLCAyMzIsIDE3NywgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIyNSwgMzksIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAKKyAgICAyNDgsIDk5LCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjU0LCA1MywgCisgICAgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAKKyAgICAxLCAyNTQsIDUzLCAyLCAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIyNSwgNDAsIDI0LCAyMjYsIAorICAgIDUwLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjI2LCA1MCwgMjUsIDYsIDEsIDI1NCwgNTMsIDIsIDIyNSwgCisgICAgMzksIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAyNDgsIDk5LCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjI1LCA0MCwgMjQsIAorICAgIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAKKyAgICAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDYsIDEsIAorICAgIDI1NCwgNTMsIDIsIDIyNSwgNDAsIDI0LCAyMjYsIDUwLCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjI2LCA1MCwgCisgICAgMjUsIDMsIDEsIDI0NSwgNjQsIDIsIDIyNSwgMzksIDI1LCAzLCAxLCAyNDUsIDY0LCAyLCAyNDgsIDk5LCAyNSwgMywgMSwgCisgICAgMjQ1LCA2NCwgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjQ1LCA2NCwgMiwgMjA3LCAyNCwgMjE0LCAKKyAgICAyNDUsIDI1LCAzLCAxLCAyNDUsIDY0LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyNDUsIDY0LCAyLCAKKyAgICAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNSwgMzksIDI1LCA2LCAxLCAyNDUsIDY0LCAyLCAKKyAgICAyNDgsIDk5LCAyNSwgNiwgMSwgMjQ1LCA2NCwgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjQ1LCA2NCwgCisgICAgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCA2LCAKKyAgICAxLCAyNDUsIDY0LCAyLCAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIyNSwgMzksIDI1LCAzLCAKKyAgICAxLCAyNDUsIDI5LCAyLCAyNDgsIDk5LCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgCisgICAgMywgMSwgMjQ1LCAyOSwgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCAzLCAxLCAyNDUsIDI5LCAyLCAyMjUsIDQwLCAyNCwgCisgICAgMjI2LCAyMzQsIDI1LCAzLCAxLCAyNDUsIDI5LCAyLCAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIAorICAgIDIyNSwgNDAsIDI0LCAyMjYsIDUwLCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjA3LCAyNCwgMjI2LCA1MCwgMjUsIDYsIDEsIAorICAgIDI0NSwgMjksIDIsIDIyNSwgMzksIDI1LCA2LCAxLCAyNDUsIDI5LCAyLCAyNDgsIDk5LCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgCisgICAgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCA2LCAxLCAKKyAgICAyNDUsIDI5LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCA2LCAxLCAyNDUsIDI5LCAyLCAyMDcsIDI0LCAyMjYsIAorICAgIDIzNCwgMjUsIDYsIDEsIDI0NSwgMjksIDIsIDIyNSwgNDAsIDI0LCAyMjYsIDUwLCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgCisgICAgMjA3LCAyNCwgMjI2LCA1MCwgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMjUsIDM5LCAyNSwgMywgMSwgMjM1LCAxODQsIDIsIAorICAgIDI0OCwgOTksIDI1LCAzLCAxLCAyMzUsIDE4NCwgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjM1LCAKKyAgICAxODQsIDIsIDIwNywgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjM1LCAxODQsIDIsIDIyNSwgNDAsIDI0LCAyMjYsIDIzNCwgCisgICAgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMjUsIDQwLCAKKyAgICAyNCwgMjI2LCA1MCwgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMDcsIDI0LCAyMjYsIDUwLCAyNSwgNiwgMSwgMjM1LCAxODQsIAorICAgIDIsIDIyNSwgMzksIDI1LCA2LCAxLCAyMzUsIDE4NCwgMiwgMjQ4LCA5OSwgMjUsIDYsIDEsIDIzNSwgMTg0LCAyLCAyMjUsIAorICAgIDQwLCAyNCwgMjE0LCAyNDUsIDI1LCA2LCAxLCAyMzUsIDE4NCwgMiwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCA2LCAxLCAKKyAgICAyMzUsIDE4NCwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIDIwNywgMjQsIDIyNiwgCisgICAgMjM0LCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIDIyNSwgNDAsIDI0LCAyMjYsIDUwLCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIAorICAgIDIwNywgMjQsIDIyNiwgNTAsIDI1LCAzLCAxLCAyMjcsIDY2LCAyLCAyMjUsIDM5LCAyNSwgMywgMSwgMjI3LCA2NiwgMiwgCisgICAgMjQ4LCA5OSwgMjUsIDMsIDEsIDIyNywgNjYsIDIsIDIyNSwgNDAsIDI0LCAyMTQsIDI0NSwgMjUsIDMsIDEsIDIyNywgNjYsIAorICAgIDIsIDIwNywgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjI3LCA2NiwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgMjM0LCAyNSwgMywgCisgICAgMSwgMjI3LCA2NiwgMiwgMjA3LCAyNCwgMjI2LCAyMzQsIDI1LCA2LCAxLCAyMjcsIDY2LCAyLCAyMjUsIDM5LCAyNSwgNiwgCisgICAgMSwgMjI3LCA2NiwgMiwgMjQ4LCA5OSwgMjUsIDYsIDEsIDIyNywgNjYsIDIsIDIyNSwgNDAsIDI0LCAyMTQsIDI0NSwgMjUsIAorICAgIDYsIDEsIDIyNywgNjYsIDIsIDIwNywgMjQsIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjI3LCA2NiwgMiwgMjI1LCA0MCwgMjQsIAorICAgIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjI3LCA2NiwgMiwgMjA3LCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgCisgICAgMjI1LCAzOSwgMjUsIDMsIDEsIDIxNSwgMTI5LCAyLCAyNDgsIDk5LCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDIyNSwgNDAsIAorICAgIDI0LCAyMTQsIDI0NSwgMjUsIDMsIDEsIDIxNSwgMTI5LCAyLCAyMDcsIDI0LCAyMTQsIDI0NSwgMjUsIDMsIDEsIDIxNSwgCisgICAgMTI5LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjA3LCAyNCwgMjI2LCAyMzQsIAorICAgIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgNTAsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjA3LCAKKyAgICAyNCwgMjI2LCA1MCwgMjUsIDYsIDEsIDIxNSwgMTI5LCAyLCAyNDgsIDk5LCAyNSwgNiwgMSwgMjE1LCAxMjksIDIsIDIwNywgCisgICAgMjQsIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjE1LCAxMjksIDIsIDIwNywgMjQsIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjE1LCAKKyAgICAxMjksIDIsIDIwNywgMjQsIDIyNiwgNTAsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjUsIDM5LCAyNSwgMywgMSwgMjI3LCAKKyAgICA2OCwgMiwgMjQ4LCA5OSwgMjUsIDMsIDEsIDIyNywgNjgsIDIsIDIyNSwgNDAsIDI0LCAyMTQsIDI0NSwgMjUsIDMsIDEsIAorICAgIDIyNywgNjgsIDIsIDIwNywgMjQsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgCisgICAgMjM0LCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjA3LCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjUsIAorICAgIDQwLCAyNCwgMjI2LCA1MCwgMjUsIDMsIDEsIDIyNywgNjgsIDIsIDIwNywgMjQsIDIyNiwgNTAsIDI1LCA2LCAxLCAyMjcsIAorICAgIDY4LCAyLCAyMjUsIDM5LCAyNSwgNiwgMSwgMjI3LCA2OCwgMiwgMjQ4LCA5OSwgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIyNSwgCisgICAgNDAsIDI0LCAyMTQsIDI0NSwgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIwNywgMjQsIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjI3LCAKKyAgICA2OCwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjI3LCA2OCwgMiwgMjA3LCAyNCwgMjI2LCAyMzQsIAorICAgIDI1LCA2LCAxLCAyMjcsIDY4LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCA1MCwgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIwNywgCisgICAgMjQsIDIyNiwgNTAsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMTQsIDI0NSwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIyNiwgCisgICAgMjM0LCAyNSwgMywgMSwgMjQ1LCA2NCwgMiwgMjE0LCAyNDUsIDI1LCAzLCAxLCAyNDUsIDY0LCAyLCAyMjYsIDIzNCwgMjUsIAorICAgIDMsIDEsIDI0NSwgMjksIDIsIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjI2LCAyMzQsIDI1LCAzLCAxLCAKKyAgICAyMzUsIDE4NCwgMiwgMjE0LCAyNDUsIDI1LCAzLCAxLCAyMzUsIDE4NCwgMiwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyMjcsIAorICAgIDY2LCAyLCAyMTQsIDI0NSwgMjUsIDMsIDEsIDIyNywgNjYsIDIsIDIyNiwgMjM0LCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIAorICAgIDIxNCwgMjQ1LCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDIyNiwgMjM0LCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjE0LCAKKyAgICAyNDUsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjYsIDIzNCwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIyNSwgNDAsIDI0LCAKKyAgICAyMTIsIDIxMCwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIwNywgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgCisgICAgMjI1LCA0MCwgMjQsIDIxNCwgMjQ2LCAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMDcsIDI0LCAyMTQsIAorICAgIDI0NiwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjI1LCA0MCwgMjQsIDIyNiwgMjM1LCAyNCwgMjEyLCAKKyAgICAyMTAsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMDcsIDI0LCAyMjYsIDIzNSwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgCisgICAgMjU0LCA1MywgMiwgMjI1LCA0MCwgMjQsIDIyNiwgNTEsIDI0LCAyMTIsIDIxMCwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIAorICAgIDIwNywgMjQsIDIyNiwgNTEsIDI0LCAyMTIsIDIxMCwgMjUsIDYsIDEsIDI1NCwgNTMsIDIsIDIyNSwgNDAsIDI0LCAyMjUsIAorICAgIDUxLCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDI1NCwgNTMsIDIsIDIyNSwgCisgICAgNDAsIDI0LCAyMTQsIDI0NiwgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAyMDcsIDI0LCAyMTQsIDI0NiwgCisgICAgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAyMjUsIDQwLCAyNCwgMjI2LCAyMzUsIDI0LCAyMjUsIDUxLCAKKyAgICAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjI2LCAyMzUsIDI0LCAyMjUsIDUxLCAyNSwgNiwgMSwgMjU0LCA1MywgCisgICAgMiwgMjI1LCA0MCwgMjQsIDIyNiwgNTEsIDI0LCAyMjUsIDUxLCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjA3LCAyNCwgMjI2LCAKKyAgICA1MSwgMjQsIDIyNSwgNTEsIDI1LCAzLCAxLCAyNDUsIDI5LCAyLCAyMjUsIDQwLCAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAKKyAgICAyNDUsIDI5LCAyLCAyMDcsIDI0LCAyMTIsIDIxMCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIyNSwgNDAsIDI0LCAyMTQsIAorICAgIDI0NiwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjA3LCAyNCwgMjE0LCAyNDYsIDI0LCAyMTIsIDIxMCwgCisgICAgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIyNSwgNDAsIDI0LCAyMjYsIDIzNSwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjQ1LCAKKyAgICAyOSwgMiwgMjA3LCAyNCwgMjI2LCAyMzUsIDI0LCAyMTIsIDIxMCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIyNSwgNDAsIAorICAgIDI0LCAyMjYsIDUxLCAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAyNDUsIDI5LCAyLCAyMDcsIDI0LCAyMjYsIDUxLCAyNCwgCisgICAgMjEyLCAyMTAsIDI1LCA2LCAxLCAyNDUsIDI5LCAyLCAyMjUsIDQwLCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDI0NSwgMjksIAorICAgIDIsIDIwNywgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAyNDUsIDI5LCAyLCAyMjUsIDQwLCAyNCwgMjE0LCAyNDYsIDI0LCAKKyAgICAyMjUsIDUxLCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgMjA3LCAyNCwgMjE0LCAyNDYsIDI0LCAyMjUsIDUxLCAyNSwgNiwgMSwgCisgICAgMjQ1LCAyOSwgMiwgMjI1LCA0MCwgMjQsIDIyNiwgMjM1LCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDI0NSwgMjksIDIsIAorICAgIDIwNywgMjQsIDIyNiwgMjM1LCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDI0NSwgMjksIDIsIDIyNSwgNDAsIDI0LCAyMjYsIAorICAgIDUxLCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDI0NSwgMjksIDIsIDIwNywgMjQsIDIyNiwgNTEsIDI0LCAyMjUsIDUxLCAyNSwgCisgICAgMywgMSwgMjI3LCA2OCwgMiwgMjI1LCA0MCwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjA3LCAyNCwgCisgICAgMjEyLCAyMTAsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjUsIDQwLCAyNCwgMjE0LCAyNDYsIDI0LCAyMTIsIDIxMCwgMjUsIAorICAgIDMsIDEsIDIyNywgNjgsIDIsIDIwNywgMjQsIDIxNCwgMjQ2LCAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAKKyAgICAyMjUsIDQwLCAyNCwgMjI2LCAyMzUsIDI0LCAyMTIsIDIxMCwgMjUsIDMsIDEsIDIyNywgNjgsIDIsIDIwNywgMjQsIDIyNiwgCisgICAgMjM1LCAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCA1MSwgMjQsIDIxMiwgCisgICAgMjEwLCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjA3LCAyNCwgMjI2LCA1MSwgMjQsIDIxMiwgMjEwLCAyNSwgNiwgMSwgMjI3LCAKKyAgICA2OCwgMiwgMjI1LCA0MCwgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAyMjcsIDY4LCAyLCAyMDcsIDI0LCAyMjUsIDUxLCAyNSwgCisgICAgNiwgMSwgMjI3LCA2OCwgMiwgMjI1LCA0MCwgMjQsIDIxNCwgMjQ2LCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDIyNywgNjgsIAorICAgIDIsIDIwNywgMjQsIDIxNCwgMjQ2LCAyNCwgMjI1LCA1MSwgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIyNSwgNDAsIDI0LCAKKyAgICAyMjYsIDIzNSwgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAyMjcsIDY4LCAyLCAyMDcsIDI0LCAyMjYsIDIzNSwgMjQsIDIyNSwgCisgICAgNTEsIDI1LCA2LCAxLCAyMjcsIDY4LCAyLCAyMjUsIDQwLCAyNCwgMjI2LCA1MSwgMjQsIDIyNSwgNTEsIDI1LCA2LCAxLCAKKyAgICAyMjcsIDY4LCAyLCAyMDcsIDI0LCAyMjYsIDUxLCAyNCwgMjI1LCA1MSwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIxNCwgCisgICAgMTAxLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjMyLCAzNywgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIxNCwgMjQ2LCAyNCwgCisgICAgMjEyLCAyMTAsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMTIsIDIxMCwgMjUsIDMsIDEsIDI1NCwgNTMsIDIsIDIyNiwgMjM1LCAKKyAgICAyNCwgMjEyLCAyMTAsIDI1LCAzLCAxLCAyNTQsIDUzLCAyLCAyMjYsIDUwLCAyNSwgMywgMSwgMjU0LCA1MywgMiwgMjI2LCAKKyAgICA1MSwgMjQsIDIxMiwgMjEwLCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjE0LCAxMDEsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAKKyAgICAyMzIsIDM3LCAyNSwgNiwgMSwgMjU0LCA1MywgMiwgMjE0LCAyNDUsIDI1LCA2LCAxLCAyNTQsIDUzLCAyLCAyMjYsIDIzNCwgCisgICAgMjUsIDYsIDEsIDI1NCwgNTMsIDIsIDIyNSwgNTEsIDI1LCAyMzQsIDExLCAyNSwgMjI1LCA1MSwgMjUsIDIyNSwgMzksIDI1LCAKKyAgICAyMjYsIDUwLCAyNSwgMjQ3LCAyMDQsIDI0LCAyMjYsIDUwLCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjE0LCAyNDYsIDI0LCAKKyAgICAyMTIsIDIxMCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjQ1LCAyOSwgMiwgMjI2LCAyMzUsIAorICAgIDI0LCAyMTIsIDIxMCwgMjUsIDMsIDEsIDI0NSwgMjksIDIsIDIyNiwgNTAsIDI1LCAzLCAxLCAyNDUsIDI5LCAyLCAyMjYsIAorICAgIDUxLCAyNCwgMjEyLCAyMTAsIDI1LCA2LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDI0NSwgMjUsIDYsIDEsIDI0NSwgNjQsIDIsIAorICAgIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjQ1LCAyOSwgMiwgMjE0LCAyNDUsIDI1LCA2LCAxLCAyNDUsIDI5LCAyLCAyMjYsIDIzNCwgCisgICAgMjUsIDYsIDEsIDI0NSwgMjksIDIsIDIyNSwgNTEsIDI1LCAyMjUsIDQwLCAyNCwgMjE0LCAyNDUsIDI1LCAyMjUsIDQwLCAKKyAgICAyNCwgMjI2LCAyMzQsIDI1LCAyMjUsIDQwLCAyNCwgMjI2LCA1MCwgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMTQsIDEwMSwgCisgICAgMjUsIDMsIDEsIDIzNSwgMTg0LCAyLCAyMzIsIDM3LCAyNSwgMywgMSwgMjM1LCAxODQsIDIsIDI0NywgMjA0LCAyNCwgMjE0LCAKKyAgICAyNDUsIDI1LCAzLCAxLCAyMzUsIDE4NCwgMiwgMjQ3LCAyMDQsIDI0LCAyMjYsIDIzNCwgMjUsIDMsIDEsIDIzNSwgMTg0LCAKKyAgICAyLCAyMjYsIDUwLCAyNSwgMywgMSwgMjM1LCAxODQsIDIsIDI0NywgMjA0LCAyNCwgMjI2LCA1MCwgMjUsIDYsIDEsIDIzNSwgCisgICAgMTg0LCAyLCAyMTQsIDEwMSwgMjUsIDYsIDEsIDIzNSwgMTg0LCAyLCAyMzIsIDM3LCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIAorICAgIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjM1LCAxODQsIDIsIDIyNiwgMjM0LCAyNSwgMjA3LCAyNCwgMjE0LCAyNDUsIDI1LCAKKyAgICAyMDcsIDI0LCAyMjYsIDIzNCwgMjUsIDIwNywgMjQsIDIyNiwgNTAsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjE0LCAxMDEsIAorICAgIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjMyLCAzNywgMjUsIDMsIDEsIDIxNSwgMTI5LCAyLCAyNDcsIDIwNCwgMjQsIDIxNCwgCisgICAgMjQ1LCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDI0NywgMjA0LCAyNCwgMjI2LCAyMzQsIDI1LCAzLCAxLCAyMjMsIDE5MSwgCisgICAgMiwgMjI1LCAzOSwgMjUsIDMsIDEsIDIyMywgMTkxLCAyLCAyNDgsIDk5LCAyNSwgMywgMSwgMjE1LCAxMjksIDIsIDIyNiwgCisgICAgNTAsIDI1LCAzLCAxLCAyMTUsIDEyOSwgMiwgMjQ3LCAyMDQsIDI0LCAyMjYsIDUwLCAyNSwgNiwgMSwgMjE1LCAxMjksIDIsIAorICAgIDIxNCwgMTAxLCAyNSwgNiwgMSwgMjE1LCAxMjksIDIsIDIzMiwgMzcsIDI1LCA2LCAxLCAyMTUsIDEyOSwgMiwgMjE0LCAKKyAgICAyNDUsIDI1LCA2LCAxLCAyMTUsIDEyOSwgMiwgMjI2LCAyMzQsIDI1LCA2LCAxLCAyMjMsIDE5MSwgMiwgMjQ4LCA5OSwgMjUsIAorICAgIDI0NywgMjA0LCAyNCwgMjE0LCAyNDUsIDI1LCAyNDcsIDIwNCwgMjQsIDIyNiwgMjM0LCAyNSwgMjE0LCAyNDUsIDI1LCAzLCAKKyAgICAxLCAyMjcsIDY4LCAyLCAyMTQsIDI0NiwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjEyLCAyMTAsIAorICAgIDI1LCAzLCAxLCAyMjcsIDY4LCAyLCAyMjYsIDIzNSwgMjQsIDIxMiwgMjEwLCAyNSwgMywgMSwgMjI3LCA2OCwgMiwgMjI2LCAKKyAgICA1MCwgMjUsIDMsIDEsIDIyNywgNjgsIDIsIDIyNiwgNTEsIDI0LCAyMTIsIDIxMCwgMjUsIDYsIDEsIDIyNywgNjYsIDIsIAorICAgIDIxNCwgMjQ1LCAyNSwgNiwgMSwgMjI3LCA2NiwgMiwgMjI2LCAyMzQsIDI1LCA2LCAxLCAyMjcsIDY4LCAyLCAyMTQsIDI0NSwgCisgICAgMjUsIDYsIDEsIDIyNywgNjgsIDIsIDIyNiwgMjM0LCAyNSwgNiwgMSwgMjI3LCA2OCwgMiwgMjI1LCA1MSwgMjUsIDIyNiwgCisgICAgMjM0LCAyNSwgMjQ4LCA5OSwgMjQ1LCAxMDksIDIyNCwgMTcyLCAyNDUsIDExOCwgMjI0LCAxNzIsIDI0NSwgMTA5LCAyMTksIAorICAgIDIwNiwgMjQ1LCAxMTgsIDIxOSwgMjA2LCAyMTcsIDk1LCAyMTksIDIwNiwgMjQzLCAyMzUsIDIxOSwgMjA2LCAyMjAsIDUxLCAKKyAgICAyMTksIDIwNiwgMjQ0LCA4MSwgMjE5LCAyMDYsIDIyNSwgMjcsIDIxOSwgMjA2LCAyMTcsIDEyMywgMjE5LCAyMDYsIDI0MiwgCisgICAgMTcsIDIxOSwgMjA2LCAyMTIsIDgwLCAyMTMsIDIzMCwgMjE5LCAyMDYsIDIxMiwgODAsIDIxMywgMjMwLCAyMjgsIDE3OCwgCisgICAgMjEyLCA4MCwgMjEzLCAyMzAsIDIzNSwgNjYsIDIzMywgNjIsIDc3LCAyMjMsIDE0MCwgNzcsIDI0MCwgMTYwLCAyMjgsIAorICAgIDE3OSwgMjQwLCAxNjAsIDI0NCwgODEsIDI0OCwgMTAxLCAyNDUsIDEwOSwgMjQ4LCAxMDEsIDI0NSwgMTE4LCAyNDgsIDEwMSwgCisgICAgMTk5LCAxMzQsIDUxLCA3MSwgMjMyLCAyNDIsIDUxLCAxMTUsIDIzMiwgMjQyLCA0MiwgMjIwLCA4MSwgMjI0LCAxNDMsIDc3LCAKKyAgICA0NiwgMjIwLCA4MSwgMjI0LCAxNDMsIDc3LCAyMjAsIDgxLCAyMzIsIDE2NCwgMjI0LCAxNDMsIDc3LCAyMjAsIDgxLCAyNDEsIAorICAgIDE0OSwgMjI0LCAxNDMsIDc3LCA0MiwgNTEsIDIyNCwgMTQzLCA3NywgNDYsIDUxLCAyMjQsIDE0MywgNzcsIDUxLCAyMzIsIAorICAgIDE2NCwgMjI0LCAxNDMsIDc3LCA1MSwgMjQxLCAxNDksIDIyNCwgMTQzLCA3NywgMjQ4LCAxNDksIDUxLCAyNDgsIDE0OSwgCisgICAgMjUxLCA0MiwgMjE2LCAxODAsIDI1MSwgNDIsIDEyMiwgNjIsIDIzMywgODAsIDExNywgNjIsIDIzMywgODAsIDE5OSwgMjQ1LCAKKyAgICAxMjAsIDI0MCwgMTU4LCAyMjUsIDE0NCwgMjMyLCAyNDMsIDIyMSwgNTcsIDIyNiwgMTQzLCAyMjEsIDU3LCAyMzMsIDYyLCAKKyAgICAyNDUsIDExNiwgMjIzLCAxNDAsIDI0NSwgMTE2LCAyMjUsIDEyNiwgMjQ3LCAxNDgsIDI0MywgMjQ0LCAyMzMsIDYyLCAyMjYsIAorICAgIDI0MSwgMjIzLCAxNDAsIDIyNiwgMjQxLCAyMzAsIDE0LCAyMjgsIDE4NCwgMjE5LCAyMDYsIDIyNiwgNTgsIDIzMSwgNiwgCisgICAgNTIsIDIyNiwgNTgsIDIxNywgMjAxLCAyMTcsIDEwMSwgNTIsIDIyNSwgNzEsIDUxLCAyMjUsIDcxLCAyMTYsIDE2OSwgMjI1LCAKKyAgICA3MSwgMjIzLCAyMDIsIDIyNSwgNzEsIDIyMywgMjAyLCA1MSwgMjI1LCA3MSwgMjIzLCAyMDIsIDIxNiwgMTY5LCAyMjUsIAorICAgIDcxLCAyNTAsIDE3MCwgMjIwLCA4MSwgMjMzLCA2NiwgMjU0LCAxOSwgMjI0LCAxNDMsIDc3LCAyMjAsIDgxLCAyMjMsIDE0NCwgCisgICAgMjU0LCAxOSwgMjI0LCAxNDMsIDc3LCAyMjQsIDAsIDc3LCA1MSwgMjQ0LCAyNTQsIDc3LCAyMzUsIDE5OCwgMjI2LCAyNDMsIAorICAgIDIxNSwgMTUwLCAxMzcsIDIxNywgNjUsIDI1MCwgMTcxLCAyMzUsIDIxMywgMjI1LCAxNDQsIDI1MywgMTMwLCAyNDAsIDE2MSwgCisgICAgMjUxLCA0MiwgMjQzLCAyMjgsIDIyMCwgMjMsIDQyLCA0MSwgMjUxLCA4NSwgMiwgMjI0LCAxNTIsIDQ2LCA0MSwgMjUxLCAKKyAgICA4NSwgMiwgMjI0LCAxNTIsIDUxLCAyMjQsIDE1OCwgNzcsIDIyNCwgMTU4LCAyNDQsIDI1NCwgNzcsIDI0NCwgMjU0LCAyMjQsIAorICAgIDE1OCwgNzcsIDIxNywgMjMsIDUsIDI0NSwgMzAsIDIyMywgMjAyLCAyMjUsIDIwMCwgNTIsIDgzLCAxMzIsIDI1MSwgNDIsIAorICAgIDgzLCA5NSwgMjUxLCA0MiwgMTE1LCAyNTMsIDEzMiwgMjIzLCAyMDIsIDIyMSwgNzAsIDI0OSwgMTk0LCAyMTUsIDEzNCwgCisgICAgMTE3LCAyNTMsIDEzMSwgMjU0LCA2NywgMjE0LCAxNjUsIDI0OSwgMTU2LCAyMzAsIDI1MSwgNTIsIDIxOCwgMTc5LCAyNDgsIAorICAgIDEwMSwgMjM1LCAxOTEsIDIxNSwgMTUwLCAyNDQsIDIxLCAyMjUsIDI3LCA3NywgMTMzLCA2MiwgMjI1LCAyNiwgMjI0LCAKKyAgICAxNjksIDIyNSwgNzEsIDI0MywgMjM3LCA2MiwgMjI1LCAyNiwgMjQ0LCA1MCwgNjIsIDIyNSwgMjYsIDExNywgNjIsIDIyNSwgCisgICAgMjYsIDI0MywgMjM3LCA2MiwgNzcsIDI0NiwgNzIsIDI0OSwgNzAsIDIxNiwgMTc5LCA3MSwgMjQzLCAyMzcsIDI0NywgNzIsIAorICAgIDIzMSwgMTQ3LCAxNCwgMjE5LCAyMDYsIDIxMywgMTk2LCAyMzUsIDY2LCAyNDMsIDE5OCwgMjUzLCAyMjIsIDIzNSwgMTg5LCAKKyAgICAyMTcsIDM4LCAyMzUsIDE4OSwgMjIxLCA1NywgMjM1LCAxODksIDIyNSwgMTU2LCAyMzUsIDIyNSwgMjE4LCAxMjcsIDIxOCwgCisgICAgMTk2LCAyNTQsIDE2NiwgMjE4LCAxMjcsIDIxOCwgMTk2LCAyMzUsIDIyNSwgMTIsIDI0MywgMjQ1LCAyMjEsIDMsIDI1NCwgCisgICAgMTY2LCAxMiwgMjQzLCAyNDUsIDIyMSwgMywgMjMwLCAxMCwgMjEsIDIyMSwgNCwgMjI4LCAxODAsIDIxLCAyMjEsIDQsIAorICAgIDIxOCwgMjIzLCAyMTIsIDc5LCAyMTgsIDIyMywgNywgMywgMSwgNzIsIDIxOCwgMjIzLCAxNjMsIDIxOCwgMjIzLCAxODAsIAorICAgIDIxOCwgMjIzLCAxODksIDIxOCwgMjIzLCAxOTgsIDIxOCwgMjIzLCAxOTUsIDIxOCwgMjIzLCAyMDAsIDIxOCwgMjIzLCA5NCwgCisgICAgNTIsIDIxOCwgMjIzLCAyMzAsIDI1MCwgMjE4LCAyMjMsIDI0NSwgNjEsIDUyLCAyMTgsIDIyMywgNDIsIDIyNiwgMTMxLCAKKyAgICAyMTgsIDIyMywgNDYsIDIyNiwgMTMxLCAyMTgsIDIyMywgNywgMywgMSwgMjA0LCAyMTksIDEwLCAyMTIsIDc5LCAyMTksIAorICAgIDEwLCAxMTYsIDIxOSwgMTAsIDEwOSwgMjE5LCAxMCwgMTY2LCAyMTksIDEwLCAxNjMsIDIxOSwgMTAsIDE4MCwgMjE5LCAxMCwgCisgICAgMTg5LCAyMTksIDEwLCAxOTgsIDIxOSwgMTAsIDE5NSwgMjE5LCAxMCwgMjAwLCAyMTksIDEwLCA5NCwgNTIsIDIxOSwgMTAsIAorICAgIDIzMCwgMjUwLCAyMTksIDEwLCAyNDUsIDYxLCA1MiwgMjE5LCAxMCwgNDIsIDIyNiwgMTMxLCAyMTksIDEwLCA0NiwgMjI2LCAKKyAgICAxMzEsIDcsIDIxOSwgMTAsIDMsIDEsIDYxLCA3LCAyMTksIDEwLCAzLCAxLCA3NCwgNywgMjE5LCAxMCwgMywgMSwgNzUsIDcsIAorICAgIDIxOSwgMTAsIDMsIDEsIDIxMywgMTY2LCA3LCAyMTksIDEwLCAzLCAxLCAyMjIsIDExMywgNywgMjE5LCAxMCwgMywgMSwgCisgICAgMjQyLCA0MSwgNywgMjE5LCAxMCwgMywgMSwgMjM1LCAyNywgNywgMjE5LCAxMCwgMywgMSwgMTUwLCA3LCAyMTksIDEwLCAzLCAKKyAgICAxLCAxODMsIDcsIDIxOSwgMTAsIDMsIDEsIDIwNCwgNywgMjE5LCAxMCwgMywgMSwgMjI2LCAyMjksIDcsIDIxOSwgMTAsIDMsIAorICAgIDEsIDE5NywgNywgMjE5LCAxMCwgMywgMSwgMjE4LCA5OSwgMjQ1LCAxMywgNTIsIDI0OSwgMTY1LCA1MiwgMjQ5LCA1NywgCisgICAgNTIsIDI0MywgMjIxLCAyNDMsIDIyNCwgNTIsIDIzMiwgMjI3LCA1MiwgMjMxLCA3LCA1MiwgMjMwLCAyOSwgNTIsIDIyNiwgCisgICAgMzgsIDUyLCAyMjMsIDI5LCA1MiwgMjEzLCAyMDQsIDUyLCAxNTYsIDIyMCwgMjI5LCA1MiwgMjQ3LCA4MSwgNTIsIDI0NSwgCisgICAgMTQsIDUyLCAyMzQsIDg1LCA1MiwgMjE2LCA3NiwgNTIsIDI0NiwgNTUsIDUyLCAyNDMsIDE2LCAyMjYsIDY4LCA1MiwgMjI2LCAKKyAgICAzNiwgNTIsIDI0MiwgODgsIDUyLCAyNTMsIDk4LCA1MiwgMjQwLCAyMTUsIDUyLCAyNTAsIDExOSwgNTIsIDIzMiwgMjIwLCAKKyAgICAyMTYsIDIxNiwgNTIsIDIxOSwgMTg4LCA1MiwgMjE3LCAxOTgsIDUyLCAyMzUsIDIzOCwgMjIzLCAyOSwgNTIsIDM3LCA0MiwgCisgICAgMjQxLCAyMzgsIDQ5LCAzNywgNDYsIDI0MSwgMjM4LCA0OSwgMzcsIDE4NCwgNzEsIDIzMiwgMjQzLCAyMjYsIDI0NCwgMzcsIAorICAgIDIyMCwgMTc1LCA3MSwgMjMyLCAyNDMsIDIyNiwgMjQ0LCAzNywgMjUzLCAyNTUsIDc2LCA0OSwgMzcsIDI0OSwgMTk1LCA3NiwgCisgICAgNDksIDM3LCA0MiwgNzYsIDQ5LCAzNywgNDYsIDc2LCA0OSwgMzcsIDIyMywgMTMxLCAyMjYsIDI0NCwgMzcsIDI0OSwgMTk1LCAKKyAgICAyMjMsIDEzMSwgMjI2LCAyNDQsIDM3LCAyNTMsIDI1NSwgMjIzLCAxMzEsIDIyNiwgMjQ0LCAzNywgMTMzLCAxNzYsIDQ5LCAKKyAgICAzNywgMjQzLCAyMzcsIDE3NiwgNDksIDM3LCAyNDUsIDEwNCwgMjQ5LCAyMjgsIDM3LCAyNDUsIDEwNCwgMjE5LCAxNjYsIAorICAgIDM3LCAyNDUsIDEwNCwgMjQ3LCAyMDAsIDM3LCAyNDUsIDEwNCwgMjQ5LCAyMjksIDI1MiwgOTcsIDM3LCA0MiwgNDYsIDc2LCAKKyAgICA0OSwgMzcsIDI0NSwgMTA0LCAyMjIsIDEwNywgMzcsIDI0NSwgMTA0LCAyMzQsIDE0MSwgMzcsIDI0NSwgMTA0LCAyMTUsIAorICAgIDEyNiwgMjI1LCAxNDEsIDIxNiwgMTgzLCAzNywgMjIzLCAyMDMsIDIxOSwgMjMyLCAyMjYsIDI0NCwgMzcsIDUxLCA3MSwgCisgICAgMjE5LCA0NSwgMjI2LCAyNDQsIDM3LCAyNTQsIDksIDg3LCAzNywgMjE2LCAxNjksIDIxNSwgMTUyLCAzNywgMjEzLCAyMzIsIAorICAgIDI1MSwgNjgsIDQ5LCAzNywgMTMyLCA3NiwgMjI2LCAyNDQsIDM3LCAxODQsIDUxLCAyMTksIDIzMiwgMjI2LCAyNDQsIDM3LCAKKyAgICA5NSwgMjQxLCAyMzgsIDIsIDIwNiwgMjQ2LCA1NywgMzcsIDEzMiwgMjQxLCAyMzgsIDIsIDIwNiwgMjQ2LCA1NywgMzcsIAorICAgIDQyLCA3NiwgNTUsIDM3LCA0NiwgNzYsIDU1LCAzNywgMjUzLCAxMzMsIDQ5LCAyNTQsIDE3MSwgMjI3LCA5NywgMjU0LCAKKyAgICAxNTYsIDIxMSwgMjExLCAyMTcsIDE0OSwgMjE5LCAxOSwgMTg3LCA2LCAyNTAsIDI1MiwgMjQ4LCAyMiwgMjUwLCAxMTIsIAorICAgIDI1MCwgMTA5LCAyMzIsIDI0MywgODcsIDI1MCwgMTcyLCAyMjcsIDk3LCAyNTAsIDIxMiwgMjE1LCAxNTksIDI0NSwgMTUsIAorICAgIDI0OSwgMTMwLCAyMjIsIDEwNCwgMjQ4LCAyMiwgMjQ0LCAxNDcsIDExMywgMywgMjQzLCAxNzcsIDExMywgNiwgMjQyLCA0MSwgCisgICAgMjUxLCAxNDIsIDYsIDI0MiwgNDEsIDE4NywgNiwgMjQyLCA0MSwgMjI1LCAxNjksIDI0OSwgMTMwLCAyMjUsIDE2OSwgMjQ5LCAKKyAgICAxMzEsIDExMCwgMTE3LCAyMjUsIDI0MCwgMTEzLCA2LCA3MiwgMjUxLCAxNDIsIDYsIDcyLCAxMTMsIDYsIDE1MCwgMTEzLCAKKyAgICAzLCAxNTAsIDIzMywgMTcxLCA1NCwgMjUyLCA2MCwgODcsIDE4NywgNiwgMjA0LCAyMjgsIDUyLCA1MiwgMjE5LCAyMTgsIAorICAgIDIyNCwgMTIsIDI0OSwgMTAxLCAxMTMsIDYsIDIyNiwgMjI5LCAxODcsIDYsIDIyNiwgMjI5LCAxODcsIDYsIDIyNCwgMjQwLCAKKyAgICAxMTMsIDYsIDE0OSwgMjUxLCAxNDIsIDYsIDE0OSwgMTg3LCA2LCAxNDksIDIyNSwgNzYsIDIxOCwgMjEsIDIyMywgMjE0LCAKKyAgICAyMjEsIDUzLCA3NywgMjE3LCAyMTAsIDUyLCAyMTYsIDIxMCwgMTUyLCA1MiwgMjE0LCAyMTcsIDE4NywgNiwgMjEyLCAxNTIsIAorICAgIDIyNywgMSwgNTIsIDIyNywgODcsIDUyLCAyMzUsIDE5MSwgMjI3LCA4NywgNTIsIDI1MSwgMTQyLCA2LCAyMTIsIDE1MiwgCisgICAgMjE2LCA1OCwgMjUsIDMsIDEsIDIzNSwgMTgzLCAyMzQsIDE3OSwgNTIsIDI1NCwgMTYsIDUyLCAxMTMsIDYsIDI1MywgNzQsIAorICAgIDI1MSwgMTQyLCA2LCAyNTAsIDI1MiwgMjQ1LCAzMywgODcsIDExMywgMywgNzQsIDExMywgNiwgNzQsIDExMywgNiwgMjQ0LCAKKyAgICAyMzAsIDIxNiwgNTgsIDYsIDI0NCwgMjMwLCAxMTMsIDYsIDE4MywgMTEzLCAzLCA3NSwgMTA2LCA4NywgMjUxLCAyMDYsIAorICAgIDg3LCAyNDIsIDE3OCwgODcsIDI0OCwgMTM1LCA4NywgMjM1LCAyMjksIDIxOSwgMjE2LCAyMjMsIDg5LCA2LCAyMjQsIDI0MCwgCisgICAgMjQ0LCAxNTAsIDUyLCAxODcsIDMsIDIyNSwgMjQwLCAxODcsIDMsIDI0MywgODMsIDE4NywgNiwgMjQzLCA4MywgMTg3LCA2LCAKKyAgICAyMjUsIDI0MCwgMTg3LCAyMzAsIDk3LCAyMTgsIDI0MSwgMjE2LCA1OCwgMzUsIDYsIDI0MywgMTc3LCAyMTYsIDU4LCAzNSwgCisgICAgNiwgMTUwLCAyMjMsIDIwMiwgMzUsIDYsIDE1MCwgMjE2LCA1OCwgMzUsIDYsIDIxMywgMTA1LCAxODcsIDMyLCA2LCAyNDksIAorICAgIDMsIDE4NywgMzIsIDMsIDI0OSwgMywgMTg3LCAzMiwgMywgNzQsIDE4NywgMzIsIDMsIDcyLCAxODcsIDMyLCAzLCAyMzUsIAorICAgIDE0MiwgMjI1LCA1NCwgMjMyLCAyNDIsIDIxNiwgNTgsIDI1NCwgMzUsIDIyNiwgNTgsIDUyLCAyNTQsIDg4LCAyMTYsIDU4LCAKKyAgICAzLCAyNDQsIDIzMCwgMTYsIDMxLCAyMjIsIDE2NywgMjE5LCAyMTYsIDIxNCwgOTcsIDI0MywgMjI4LCAxMjIsIDIyMSwgMzksIAorICAgIDIxNCwgOTcsIDI0MywgMjI4LCAxMjIsIDIyOSwgMjUsIDIxNCwgOTcsIDI0MywgMjI4LCAxMjIsIDIxNywgMTk0LCAyMTQsIAorICAgIDk3LCAyNDMsIDIyOCwgMTIyLCAyMTcsIDEyMSwgMjE0LCA5NywgMjQzLCAyMjgsIDExNywgMjE3LCAxMTksIDIxNCwgOTcsIAorICAgIDI0MywgMjI4LCAxMjIsIDI0NCwgODYsIDIxNCwgOTcsIDI0MywgMjI4LCAxMTcsIDI0NCwgODUsIDIxNCwgOTcsIDI0MywgCisgICAgMjI4LCAxMzMsIDI0NCwgODUsIDIxNCwgOTcsIDI0MywgMjI4LCAyNDMsIDIzNywgMjQ0LCA4NSwgMjE0LCA5NywgMjQzLCAKKyAgICAyMjgsIDEyMiwgMjIwLCA0MywgMjE0LCA5NywgMjQzLCAyMjgsIDI0NCwgNTAsIDIyMCwgNDEsIDIxNCwgOTcsIDI0MywgCisgICAgMjI4LCAxMjIsIDI0NSwgMTQ1LCAyMTQsIDk3LCAyNDMsIDIyOCwgMTMzLCAyNDUsIDE0MywgMjE0LCA5NywgMjQzLCAyMjgsIAorICAgIDI0NCwgNTAsIDI0NSwgMTQzLCAyMTQsIDk3LCAyNDMsIDIyOCwgMjIxLCA0MywgMjQ1LCAxNDMsIDI0MywgMjI4LCAyMjgsIAorICAgIDUzLCAxMTYsIDIyMywgMTAwLCAyMjgsIDU0LCAxMTYsIDIyMywgMTAwLCAyMjgsIDU0LCAxMDksIDIyMywgMTAwLCAyMjgsIAorICAgIDU0LCAxNjYsIDIyMywgMTAwLCAyMjgsIDU0LCAxNjMsIDIyMywgMTAwLCAyMjgsIDU0LCAxODAsIDIyMywgMTAwLCAyMjgsIAorICAgIDU0LCAxODksIDIyMywgMTAwLCAyMjgsIDU0LCAxOTgsIDIyMywgMTAwLCAyMjgsIDU0LCAxOTUsIDIyMywgMTAwLCAyMjgsIAorICAgIDU0LCAyMDAsIDIyMywgMTAwLCAyMjgsIDU0LCAyMTcsIDIwMCwgMjIzLCAxMDAsIDIyOCwgNTQsIDI0NSwgMTI0LCAyMjMsIAorICAgIDEwMCwgMjI4LCA1NCwgMjE2LCA0MSwgMjIzLCAxMDAsIDIyOCwgNTQsIDI0NCwgODMsIDIyMywgMTAwLCAyMjgsIDU0LCAKKyAgICAxMjIsIDI0MCwgMjAwLCAyMjMsIDEwMCwgMjI4LCA1NCwgMjQ0LCA1MCwgMjQwLCAyMDAsIDIyMywgMTAwLCAyMjgsIDU0LCAKKyAgICAxMjIsIDIxNywgMTAwLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTE2LCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTA5LCAzLCAKKyAgICAyMjMsIDEwMCwgMjI4LCA1NCwgMTY2LCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTYzLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgCisgICAgMTgwLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTg5LCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTk4LCAzLCAyMjMsIDEwMCwgCisgICAgMjI4LCA1NCwgMTk1LCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMjAwLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMjE3LCAyMDAsIAorICAgIDMsIDIyMywgMTAwLCAyMjgsIDU0LCAyNDUsIDEyNCwgMywgMjIzLCAxMDAsIDIyOCwgNTQsIDIxNiwgNDEsIDMsIDIyMywgCisgICAgMTAwLCAyMjgsIDU0LCAyNDQsIDgzLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTIyLCAyNDAsIDIwMCwgMywgMjIzLCAxMDAsIAorICAgIDIyOCwgNTQsIDI0NCwgNTAsIDI0MCwgMjAwLCAzLCAyMjMsIDEwMCwgMjI4LCA1NCwgMTIyLCAyMTcsIDEwMCwgMjIzLCAKKyAgICAxMDAsIDIyOCwgNTQsIDEyMiwgMjE3LCAxMDEsIDI1MCwgMjUzLCAyNDksIDMsIDIyMywgMTAwLCAyMjgsIDU0LCAyNDQsIAorICAgIDUwLCAyMTcsIDEwMCwgMjIzLCAxMDAsIDIyOCwgNTQsIDIxNywgMjAxLCAyMTcsIDEwMCwgMjIzLCAxMDAsIDIyOCwgNTQsIAorICAgIDIyMywgMjAyLCAxMjIsIDI0MCwgMjAwLCA3LCAzLCAxLCAyMjMsIDIwMiwgMjUwLCAyNTIsIDIyMywgMTAwLCAyMjgsIDU0LCAKKyAgICAyMjAsIDUzLCAyMzMsIDEwMSwgMTcsIDIyMywgMTAwLCAyMjgsIDU0LCAyNDQsIDg0LCAyNDUsIDE4MiwgMTcsIDIyMywgCisgICAgMTAwLCAyMjgsIDU0LCAyNDQsIDg0LCAyMTcsIDEwMCwgMjIzLCAxMDAsIDIyOCwgNTQsIDEyMiwgMjQwLCAyMDEsIDIxNywgCisgICAgMTAwLCAyMTQsIDk3LCAyNDMsIDIyOCwgMjEyLCA4MCwgMjE3LCAxMTksIDEzMiwgNjgsIDIxNSwgMTI0LCA2OCwgOTUsIDY4LCAKKyAgICAyNDYsIDU4LCA2OCwgNDIsIDQ2LCA2OCwgMTE0LCAxMTksIDY4LCAyMjgsIDE2NywgMjEzLCAyNTAsIDY4LCAyMjgsIDE2NywgCisgICAgMjQ1LCAxNzYsIDY4LCAyMTksIDIxNSwgMjQ1LCAxNzYsIDY4LCAyMTksIDIxNSwgMjEzLCAyNTAsIDY4LCAxMzIsIDc2LCAyLCAKKyAgICA5MCwgOTUsIDc2LCAyLCA5MCwgMTMyLCAyMTQsIDIwLCA2OCwgOTUsIDIxNCwgMjAsIDY4LCAxMzIsIDExNywgMjQxLCAyMTgsIAorICAgIDY4LCAyMTUsIDEyNCwgMTE3LCAyNDEsIDIxOCwgNjgsIDk1LCAxMTcsIDI0MSwgMjE4LCA2OCwgMjQ2LCA1OCwgMTE3LCAKKyAgICAyNDEsIDIxOCwgNjgsIDEzMiwgNzYsIDIsIDIxOCwgMjcsIDk1LCA3NiwgMiwgMjE4LCAyNywgMTMyLCA3NiwgMjQzLCAyMTMsIAorICAgIDEzNCwgMjE1LCAxMjQsIDc2LCAyNDMsIDIxMywgMTM0LCA5NSwgNzYsIDI0MywgMjEzLCAxMzQsIDI0NiwgNTgsIDc2LCAKKyAgICAyNDMsIDIxMywgMTM0LCAxMTQsIDExOSwgNzYsIDIsIDI1MiwgNDcsIDEzMiwgNzYsIDIsIDEwMSwgOTUsIDc2LCAyLCAxMDEsIAorICAgIDEzMiwgNzYsIDIsIDIzMiwgMTc3LCA5NSwgNzYsIDIsIDIzMiwgMTc3LCA0MiwgNDYsIDIxNCwgMjAsIDY4LCA0MiwgNDYsIAorICAgIDc2LCAyLCA5MCwgMjQ2LCA1OCwgMjEyLCAyOCwgNjgsIDIxNSwgMTI0LCA3NiwgMiwgMjE3LCAzMCwgMjMzLCA2MSwgMjE1LCAKKyAgICAxMjQsIDc2LCAyLCAyMTcsIDMwLCAyMjMsIDEzOCwgMjQ2LCA1OCwgNzYsIDIsIDIxNywgMzAsIDIzMywgNjEsIDI0NiwgNTgsIAorICAgIDc2LCAyLCAyMTcsIDMwLCAyMjMsIDEzOCwgOTUsIDc2LCAyLCAyNDksIDEwMCwgMjQ2LCA1NywgMjQ2LCA1OCwgNzYsIDIsIAorICAgIDI0OSwgMTAwLCAyMzMsIDYxLCAyNTMsIDI1NSwgMjE2LCAyMjcsIDIyMSwgNzMsIDY4LCAyNDksIDE5NSwgMjE2LCAyMjcsIAorICAgIDIyMSwgNzMsIDY4LCAyMjgsIDE2NywgMjEzLCAyNTAsIDc2LCAyMTEsIDIxMSwgMTg0LCAxMzQsIDEzMiwgNzYsIDIxMSwgCisgICAgMjExLCAyNTIsIDYwLCAxMTAsIDk1LCA3NiwgMjExLCAyMTEsIDEzNCwgMjUzLCAyNTUsIDIyNywgNDAsIDI0OSwgMjI5LCAKKyAgICA2OCwgMjQ5LCAxOTUsIDIyNywgNDAsIDI0OSwgMjI5LCA2OCwgMTMyLCAyNDEsIDIzOCwgMiwgMjA2LCAyMTUsIDEyMywgCisgICAgMTMyLCAyNDEsIDIzOCwgMiwgMjA2LCAyNDYsIDU3LCAyMTUsIDEyNCwgMjQxLCAyMzgsIDIsIDIwNiwgMjIzLCAxMzgsIAorICAgIDIxNSwgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCAyMzMsIDYxLCA5NSwgMjQxLCAyMzgsIDIsIDIwNiwgMjE1LCAxMjMsIDk1LCAKKyAgICAyNDEsIDIzOCwgMiwgMjA2LCAyNDYsIDU3LCAyNDYsIDU4LCAyNDEsIDIzOCwgMiwgMjA2LCAyMjMsIDEzOCwgMjQ2LCA1OCwgCisgICAgMjQxLCAyMzgsIDIsIDIwNiwgMjMzLCA2MSwgOTUsIDc2LCAxMTAsIDEzMiwgNjgsIDIxNSwgMTI0LCA3NiwgMTMyLCA2NSwgCisgICAgMjQ2LCA1OCwgNjgsIDEzMiwgNzYsIDExMCwgOTUsIDY4LCAxMzIsIDIyNiwgMTk3LCAyNTMsIDE2MiwgMjE1LCAxMjQsIAorICAgIDIyNiwgMTk3LCAyNTMsIDE2MiwgOTUsIDIyNiwgMTk3LCAyNTMsIDE2MiwgMjQ2LCA1OCwgMjI2LCAxOTcsIDI1MywgMTYyLCAKKyAgICAxMzIsIDI0MSwgMjM4LCAxMTAsIDk1LCAyNDEsIDIzNywgOTUsIDI0MSwgMjM4LCAxMTAsIDEzMiwgMjQxLCAyMzcsIDEzMiwgCisgICAgNTEsIDc2LCAyLCA5MCwgNDIsIDQ2LCA1MSwgNzYsIDIsIDkwLCA5NSwgNTEsIDc2LCAyLCA5MCwgMTMyLCA1MSwgNjgsIAorICAgIDIxNSwgMTI0LCA1MSwgNjgsIDk1LCA1MSwgNjgsIDI0NiwgNTgsIDUxLCA2OCwgNDIsIDQ2LCA1MSwgNjgsIDExNCwgMTE5LCAKKyAgICA1MSwgNjgsIDIyOCwgMTY3LCAyMTMsIDI1MCwgNTEsIDY4LCAyMjgsIDE2NywgMjQ1LCAxNzYsIDUxLCA2OCwgMjE5LCAyMTUsIAorICAgIDI0NSwgMTc2LCA1MSwgNjgsIDIxOSwgMjE1LCAyMTMsIDI1MCwgNTEsIDY4LCAxMzIsIDIxNiwgMTY5LCA2OCwgOTUsIDIxNiwgCisgICAgMTY5LCA2OCwgMTMyLCAyMTksIDE2MiwgNjgsIDk1LCAyMTksIDE2MiwgNjgsIDIxNSwgMTI0LCA3NiwgMiwgNTEsIDkwLCAKKyAgICAyNDYsIDU4LCA3NiwgMiwgNTEsIDkwLCAxMzIsIDI0OCwgMTAwLCA2OCwgMjE1LCAxMjQsIDI0OCwgMTAwLCA2OCwgOTUsIAorICAgIDI0OCwgMTAwLCA2OCwgMjQ2LCA1OCwgMjQ4LCAxMDAsIDY4LCAxMzIsIDc2LCAyMTEsIDIxMSwgMTM0LCA5NSwgNzYsIDIxMSwgCisgICAgMjExLCAxMzQsIDEzMiwgNjcsIDY4LCAyMTUsIDEyNCwgNjcsIDY4LCA5NSwgNjcsIDY4LCAyNDYsIDU4LCA2NywgNjgsIAorICAgIDIxNSwgMTI0LCA2NywgNzYsIDI0MywgMjEzLCAxMzQsIDIxNSwgMTI0LCA2NywgNzYsIDIyNywgNjMsIDIyNiwgODksIDIxNSwgCisgICAgMTI0LCA2NywgNzYsIDIyNywgNjMsIDIyNiwgOTAsIDIsIDE5OSwgMTM0LCAyMTUsIDEyNCwgNjcsIDc2LCAyMjcsIDYzLCAKKyAgICAyMjYsIDkwLCAyLCA3MSwgMTM0LCAyMTUsIDEyNCwgNjcsIDUxLCA2OCwgMjE1LCAxMjQsIDY3LCA1MSwgNzYsIDIyNywgNjMsIAorICAgIDIyNiwgODksIDk1LCA2NywgNzYsIDI0MywgMjEzLCAyMTQsIDQwLCAyMjgsIDE2NywgMjEzLCAyNTAsIDc2LCAyMTEsIDIxMSwgCisgICAgMjQ5LCA5OSwgMjE5LCAyMTUsIDI0NSwgMTc2LCA3NiwgMjExLCAyMTEsIDI0OSwgOTksIDExNCwgMTE5LCA2NywgNjgsIDQ2LCAKKyAgICA3NiwgMiwgMywgMjQ5LCAyMjgsIDI0NiwgNTgsIDc2LCAxMzIsIDY1LCAyMTUsIDEyNCwgNjgsIDEzMywgOTUsIDI1MywgCisgICAgMTYyLCAxMzIsIDc2LCAyLCA3MSwgOTAsIDk1LCA3NiwgMiwgNzEsIDkwLCA0MiwgNDYsIDc2LCAyLCA3MSwgOTAsIDEzMiwgCisgICAgNzYsIDIsIDUxLCA3MSwgOTAsIDk1LCA3NiwgMiwgNTEsIDcxLCA5MCwgNDIsIDQ2LCA3NiwgMiwgNTEsIDcxLCA5MCwgMTMyLCAKKyAgICAyMjcsIDM4LCA2OCwgOTUsIDIyNywgMzgsIDY4LCA0MiwgNDYsIDIyNywgMzgsIDY4LCAzMSwgMjU0LCA2MywgMjQ5LCAxNTMsIAorICAgIDIyNiwgMTI1LCAyNDcsIDE4NSwgMjE3LCAxNDAsIDI0NCwgMjUwLCAyMTcsIDE0MCwgMjQ3LCA5MiwgMjI4LCAxNjMsIDI0NCwgCisgICAgMjUxLCAyNDUsIDExMCwgMjIxLCA0OCwgMjM1LCAyNDEsIDIzMCwgMzksIDI0NSwgMTI3LCAyMjcsIDk3LCAyMjgsIDE2MywgCisgICAgMjU0LCAzMywgMjQ1LCAxMjcsIDIyNywgOTcsIDMsIDI0NSwgMTI3LCAyMjcsIDk3LCAyNDksIDEyNSwgMjUzLCAxNTMsIAorICAgIDIzMSwgMTI2LCAyNDcsIDkyLCAyMjgsIDE2MywgMjQ5LCAxMjcsIDI1MywgMTUzLCAyMzEsIDEyNiwgMywgMjQ5LCAxMjUsIAorICAgIDI1MywgMTUzLCAyMzEsIDEyNiwgMjQ1LCAxMDEsIDY1LCAyMjUsIDU2LCAyMzAsIDk3LCAyMjUsIDYzLCAyMzAsIDk3LCAKKyAgICAyNDksIDEwNCwgMjMwLCA5NywgMjE4LCAyNDEsIDIzMCwgMjUxLCA1MiwgMjMwLCAyNDksIDUyLCA2MiwgMjI1LCAxNTYsIAorICAgIDI0NywgMTIxLCAyMjAsIDIzLCAyMjEsIDQ5LCAyMzAsIDI1MCwgMjUzLCAxMzMsIDIyNywgMzMsIDIyMywgMTMxLCAyMjcsIAorICAgIDMzLCAyNTEsIDQzLCAyMjcsIDMzLCA0MSwgMjIzLCA5NSwgMjQ5LCA1MCwgMjIzLCA5NSwgMjQzLCAyMzAsIDIyMywgOTUsIAorICAgIDIyNSwgNTIsIDEwOCwgMjM1LCAyMzEsIDQ2LCAyNTQsIDE4LCAyNTQsIDE4LCAyMzEsIDE1MywgMjU0LCAxOCwgMjE5LCAKKyAgICAxODcsIDI1NCwgMTgsIDI0NywgMTIzLCAyNDcsIDkyLCAyMjgsIDE2MywgMjQ3LCAxMjYsIDIyNiwgMTM2LCAxMDgsIDIyOCwgCisgICAgMTYzLCAyMjYsIDEzNiwgMTA4LCAyMzIsIDE5OSwgMjU0LCAyNywgMjMyLCAxOTksIDIyNywgMjQsIDIzNSwgMTk1LCAyMTUsIAorICAgIDE0NiwgMjM1LCAyMDgsIDUxLCAyMzUsIDIwOCwgMjE2LCAxNjksIDIzNSwgMjA4LCAyNDksIDEyMSwgMjM1LCAyMDgsIDIxOCwgCisgICAgMjEzLCAyMzUsIDIwOCwgMjE0LCAxMTAsIDIzNSwgMjA4LCAyNDksIDE5NSwgMjM1LCAyMDgsIDI0OSwgMTk1LCAyNDksIAorICAgIDEyMSwgMjM1LCAyMDgsIDI1MywgMjU1LCAyNDksIDEyMSwgMjM1LCAyMDgsIDIxNywgMTM5LCAyNTEsIDI0MywgMjI0LCAyOSwgCisgICAgMjI1LCA1MywgNjIsIDIzMCwgMjUwLCAyNDUsIDAsIDI0MywgMjIsIDIyNSwgNTMsIDI0MSwgNDMsIDIxNywgNDMsIDIyNywgCisgICAgMzMsIDIyMywgMjAyLCAyMTcsIDQyLCAyMzUsIDE5MSwgMjMzLCA4OSwgMTk3LCAyMjAsIDgzLCAyMTQsIDE5LCAyMTMsIAorICAgIDE4OCwgMjI1LCA2MywgMjI4LCAxNjMsIDIxNywgNDIsIDIzMCwgMjUxLCAyMTcsIDQyLCAyNTMsIDEyNiwgMTIzLCAxMDgsIAorICAgIDIyOCwgMTYzLCAyNTMsIDEyNiwgMTIzLCAxMDgsIDI1MywgMjE4LCAxMjMsIDEwOCwgMjUzLCAyMTgsIDI1MSwgMTcsIDIyOCwgCisgICAgMTYzLCAyNTQsIDE2NSwgMTIzLCAxMDgsIDIyOSwgMTgxLCAyNTMsIDIxOCwgMjI4LCAxNzAsIDI1NCwgMTY1LCAxMjMsIAorICAgIDEwOCwgMjU0LCA1NywgMTIzLCAxMDgsIDIyOCwgMTYzLCAyNTQsIDU3LCAxMjMsIDEwOCwgMjU0LCA1NywgMTIzLCAxNjcsIAorICAgIDEyMywgMTA4LCAyMTYsIDE2OSwgMjE3LCA0MiwgMjU0LCA2NCwgMTIzLCAxMDgsIDI0NSwgNTcsIDEwOCwgMjQzLCAyMSwgCisgICAgMjQ1LCA1NywgMTA4LCAyNDcsIDE4NiwgMjUxLCAyMDAsIDI1MywgMjIwLCAyMTcsIDE0OSwgMjMyLCAyNTAsIDI0MywgMjEsIAorICAgIDEyMywgMTA4LCAyNTMsIDIxOCwgMTIzLCAyMTEsIDIxMSwgMTY3LCAyMTcsIDE0OSwgMjM2LCAxMCwgMjI3LCA5NywgMjM2LCAKKyAgICAxMCwgNjUsIDE2NywgMjUzLCAyMTgsIDEyMywgMTA4LCAyNDksIDE2NSwgMjQ1LCA2MCwgMjQ1LCA2MSwgMjQ5LCAxNjQsIAorICAgIDIyMywgMTMxLCAyMzUsIDI1MiwgMTIzLCAxMDgsIDIyMywgMTMxLCAxMjMsIDEwOCwgMjQ5LCA5MywgMTA4LCAyNDUsIDMyLCAKKyAgICAyNDUsIDU5LCAxMDgsIDIxOSwgOTYsIDI0NSwgNjAsIDI0OCwgNiwgMTIzLCAxMDgsIDEyMywgMjExLCAyMTEsIDI1MSwgNywgCisgICAgMjQ4LCAyMywgMjMxLCAxNTMsIDI1MSwgNiwgMjI0LCAxNTYsIDEyMywgMTA4LCAyMjgsIDE2MywgMTIzLCAxMDgsIDI0MCwgCisgICAgOTcsIDEwOCwgMjI4LCAxNjMsIDI0MCwgOTcsIDEwOCwgMjE5LCA0OSwgMjQ1LCA1NywgMTA4LCAyMzMsIDM5LCAxNjcsIAorICAgIDEyMywgMTA4LCAyNDIsIDEwNywgMTY3LCAxMjMsIDEwOCwgMjMzLCAzOSwgMTEwLCAxMjMsIDEwOCwgMjQyLCAxMDcsIDExMCwgCisgICAgMTIzLCAxMDgsIDIzMywgMzksIDI1MSwgMTcsIDIyOCwgMTYzLCAxMjMsIDEwOCwgMjQyLCAxMDcsIDI1MSwgMTcsIDIyOCwgCisgICAgMTYzLCAxMjMsIDEwOCwgMjMwLCAxNjcsIDIzMywgMzgsIDIzMCwgMTY3LCAyNDIsIDEwNiwgMjUxLCAyMDAsIDIyOCwgMTYzLCAKKyAgICAyNDUsIDU3LCAxMDgsIDIyOCwgMTYzLCAyMzMsIDM4LCAyMjgsIDE2MywgMjQyLCAxMDYsIDIyOSwgMTgxLCAyMzMsIDM5LCAKKyAgICAyMjgsIDE3MCwgMTIzLCAxMDgsIDIyOSwgMTgxLCAyNDIsIDEwNywgMjI4LCAxNzAsIDEyMywgMTA4LCAyMzMsIDM5LCAxNjcsIAorICAgIDI0NSwgNTcsIDEwOCwgMjQyLCAxMDcsIDE2NywgMjQ1LCA1NywgMTA4LCAyMjksIDE4MSwgMjMzLCAzOSwgMjI4LCAxNzAsIAorICAgIDI0NSwgNTcsIDEwOCwgMjI5LCAxODEsIDI0MiwgMTA3LCAyMjgsIDE3MCwgMjQ1LCA1NywgMTA4LCAyMzMsIDM5LCAxNjcsIAorICAgIDI0MiwgMTA2LCAyNDIsIDEwNywgMTY3LCAyMzMsIDM4LCAyMjksIDE4MSwgMjMzLCAzOSwgMjI4LCAxNzAsIDI0MiwgMTA2LCAKKyAgICAyMjksIDE4MSwgMjQyLCAxMDcsIDIyOCwgMTcwLCAyMzMsIDM4LCAyMjUsIDgyLCAyMTksIDAsIDIyNSwgODMsIDE2NywgCisgICAgMTIzLCAxMDgsIDIxOSwgMSwgMTY3LCAxMjMsIDEwOCwgMjI1LCA4MywgMTY3LCAyNDUsIDU3LCAxMDgsIDIxOSwgMSwgMTY3LCAKKyAgICAyNDUsIDU3LCAxMDgsIDI0NywgOTIsIDIyOCwgMTYzLCAyMjUsIDg1LCAyNDcsIDkyLCAyMjgsIDE2MywgMjE5LCAyLCAyMTksIAorICAgIDksIDIyNywgOTcsIDIxOCwgMjIyLCAyMjcsIDk3LCAyMjgsIDE2MywgMTE4LCAyMTksIDksIDIyNywgOTcsIDIyOCwgMTYzLCAKKyAgICAxMTgsIDIxOCwgMjIyLCAyMjcsIDk3LCAyMTksIDksIDY1LCAxNjcsIDEyMywgMTA4LCAyMTgsIDIyMiwgNjUsIDE2NywgCisgICAgMTIzLCAxMDgsIDIyOSwgMTgxLCAxMTgsIDIxOSwgOSwgNjUsIDIyOCwgMTcwLCAxMjMsIDEwOCwgMjI5LCAxODEsIDExOCwgCisgICAgMjE4LCAyMjIsIDY1LCAyMjgsIDE3MCwgMTIzLCAxMDgsIDIxOSwgOSwgNjUsIDIsIDIyOCwgMTYzLCAxMjMsIDEwOCwgMjE4LCAKKyAgICAyMjIsIDY1LCAyLCAyMjgsIDE2MywgMTIzLCAxMDgsIDIzMCwgMTUxLCAyMzAsIDE1MiwgMjMwLCAxNTMsIDIzMCwgMTUyLCAKKyAgICAyMTUsIDE0NiwgNDEsIDIzNiwgMTAsIDIyNywgOTcsIDQxLCAyMjcsIDE3LCAyMjcsIDk3LCA0MSwgMjM2LCAxMCwgNjUsIAorICAgIDE2NywgMTIzLCAxMDgsIDQxLCAyMjcsIDE3LCA2NSwgMTY3LCAxMjMsIDEwOCwgNDEsIDI1MCwgMTgzLCA0MSwgMjQ5LCA0MywgCisgICAgMzYsIDIyNSwgMTU2LCAzNiwgMjMwLCAyNTAsIDM2LCAyMTcsIDM4LCAzNiwgMjQ3LCAxMjEsIDIyMCwgMjMsIDM2LCA2MiwgCisgICAgMjI3LCAzMywgMzYsIDIyMywgMTMxLCAyMjcsIDMzLCAzNiwgMjUzLCAxMzMsIDIyNywgMzMsIDM2LCAyNDUsIDYwLCAzNiwgCisgICAgMjQ4LCAxMDEsIDkxLCAyMjUsIDE1NiwgOTEsIDIzMCwgMjUwLCA5MSwgMjE3LCAzOCwgOTEsIDYyLCAyMjcsIDMzLCA0NiwgCisgICAgMjE4LCAzNiwgNDIsIDIxOCwgMzYsIDExOSwgMjE4LCAzNiwgMTE0LCAyMTgsIDM2LCAyNTMsIDEzNiwgMjMwLCAyMjYsIAorICAgIDIxNiwgMTQ5LCAyNDMsIDI1MCwgMjE2LCAxNjksIDcxLCAyNTIsIDYwLCA0NiwgMjE2LCA1NywgNTEsIDcxLCAyNTIsIDYwLCAKKyAgICA1MSwgNDYsIDIxNiwgNTcsIDI0NywgOTIsIDIyOCwgMTYzLCAyMjUsIDQ4LCAyMjgsIDE2MywgMjE2LCAxNDksIDI0NywgOTIsIAorICAgIDIyOCwgMTYzLCAyNDMsIDI1MSwgMjI5LCAxODMsIDUxLCA3MSwgMjUyLCA2MCwgNTEsIDQ2LCAyMTYsIDU3LCAyMjUsIDgzLCAKKyAgICAyMTUsIDE1NCwgMjIzLCAyNDEsIDIxOSwgMSwgMjE1LCAxNTQsIDIyMywgMjQxLCAyMjgsIDE2OCwgMjE5LCAyMiwgMjI3LCAKKyAgICA5NywgMjQ5LCAxMjUsIDI1MywgMTUzLCAyMjgsIDE2OCwgMjE5LCAyMSwgMjI4LCAxNjgsIDIxOSwgMjIsIDY1LCAxNjcsIAorICAgIDEyMywgMTA4LCAyNDksIDEyNSwgMjUzLCAxNTMsIDIyOCwgMTY4LCAyMTksIDIyLCAxNjcsIDEyMywgMTA4LCAyMjcsIDE3LCAKKyAgICAyMjcsIDk3LCAyMzYsIDEwLCAyMjcsIDk3LCAyMzAsIDE1NywgMjQxLCAxODUsIDI0OSwgMTM2LCAyMzEsIDIwMCwgMjM1LCAKKyAgICAyMDUsIDIxMywgMTMzLCAyMzAsIDIyLCAyMjgsIDE2OSwgNDYsIDI1NCwgMTksIDIsIDI1MywgMTk1LCA0NiwgMjE2LCAxODMsIAorICAgIDIzMCwgOTcsIDIzMiwgMTk5LCAyNTQsIDI3LCAyMzAsIDk3LCAyMzIsIDE5OSwgMjI3LCAyNCwgMjMwLCA5NywgMjM1LCAKKyAgICAxOTUsIDIzMCwgOTcsIDIxNSwgMTQ2LCAyNDcsIDIwMSwgMjI3LCAzMywgNjIsIDIyNywgMzMsIDIxOSwgOTYsIDIyNywgMzMsIAorICAgIDI0NywgMTIxLCAyMTcsIDM4LCAyNTEsIDkwLCA0MiwgMjI4LCAxNjgsIDI0NCwgMTQ5LCAyMjEsIDY5LCAyMjUsIDYzLCA0NiwgCisgICAgMjI4LCAxNjgsIDI0NCwgMTQ5LCAyMjEsIDY5LCAyMjUsIDYzLCA0MiwgMjIxLCA2OSwgMjI1LCA2MywgNDYsIDIyMSwgNjksIAorICAgIDIyNSwgNjMsIDIyMywgMjAyLCAyMTcsIDQzLCAyNDUsIDYwLCAyNDksIDQwLCAyMzIsIDE5OSwgMjI3LCAyNCwgMjQ5LCA0MCwgCisgICAgMjMyLCAxOTksIDI1NCwgMjcsIDUxLCAyMTksIDgsIDUxLCAyMTgsIDIyMSwgNTEsIDIzNSwgMTk1LCA1MSwgMjE1LCAxNDYsIAorICAgIDIyNSwgMTc5LCAxMjMsIDI0LCAyMjYsIDEzNiwgMTA4LCAyMzMsIDM5LCAyLCAyNDcsIDc0LCAyNDIsIDEwNywgMiwgMjQ3LCAKKyAgICA3NCwgMjE0LCAxNjQsIDIzMCwgMTY3LCAyMzMsIDM4LCAyMTQsIDE2NCwgMjMwLCAxNjcsIDI0MiwgMTA2LCAyMzMsIDM5LCAKKyAgICAxMjMsIDIxMSwgMjExLCAxNjcsIDI0MiwgMTA2LCAyNDIsIDEwNywgMTIzLCAyMTEsIDIxMSwgMTY3LCAyMzMsIDM4LCAxMjMsIAorICAgIDIxMSwgMjExLCAxNjcsIDIzMywgMzgsIDEyMywgMjExLCAyMTEsIDE2NywgMjQyLCAxMDYsIDEyMywgMjExLCAyMTEsIDE2NywgCisgICAgMjI1LCA4MiwgMTIzLCAyMTEsIDIxMSwgMTY3LCAyMTksIDAsIDI0NywgOTIsIDIyOCwgMTYzLCAyMjUsIDg2LCAxNjcsIAorICAgIDI0NSwgNjIsIDI0NywgOTIsIDIyOCwgMTYzLCAyMTksIDMsIDE2NywgMjQ1LCA2MiwgMjI4LCAxNjMsIDQxLCAyMzYsIDEwLCAKKyAgICA2NSwgMTY3LCAxMjMsIDEwOCwgMjI4LCAxNjMsIDQxLCAyMjcsIDE3LCA2NSwgMTY3LCAxMjMsIDEwOCwgNDEsIDIzNiwgMTAsIAorICAgIDY1LCAxNjcsIDIyOCwgMTYzLCAxMjMsIDEwOCwgNDEsIDIyNywgMTcsIDY1LCAxNjcsIDIyOCwgMTYzLCAxMjMsIDEwOCwgCisgICAgMjMzLCAzOSwgMjUxLCAxNywgMjI4LCAxNjMsIDI0NSwgNTcsIDEwOCwgMjQyLCAxMDcsIDI1MSwgMTcsIDIyOCwgMTYzLCAKKyAgICAyNDUsIDU3LCAxMDgsIDIyNSwgODMsIDI1MSwgMTcsIDIyOCwgMTYzLCAyNDUsIDU3LCAxMDgsIDIxOSwgMSwgMjUxLCAxNywgCisgICAgMjI4LCAxNjMsIDI0NSwgNTcsIDEwOCwgMjI4LCAxNjMsIDIyOCwgMTY4LCAyMTksIDIyLCAyMjcsIDk3LCAyNDcsIDkyLCAKKyAgICAyMjgsIDE2MywgMjQ5LCAxMjcsIDI1MywgMTUzLCAyMjgsIDE2OCwgMjE5LCAyMSwgMjI4LCAxNjMsIDIyOCwgMTY4LCAyMTksIAorICAgIDIyLCA2NSwgMTY3LCAxMjMsIDEwOCwgMjQ3LCA5MiwgMjI4LCAxNjMsIDI0OSwgMTI3LCAyNTMsIDE1MywgMjI4LCAxNjgsIAorICAgIDIxOSwgMjIsIDE2NywgMjQ1LCA2MiwgNzEsIDI0NSwgMTIwLCAyMzEsIDM1LCAxOTksIDI0NSwgMTIwLCAxMTQsIDQ2LCAKKyAgICAyNDcsIDIwNywgMjQ1LCAxMjAsIDExOSwgNDYsIDI0NywgMjA3LCAyNDUsIDEyMCwgMjQ1LCAxMjcsIDY1LCAyLCAxODQsIAorICAgIDE5OSwgOTAsIDI0NSwgMTI3LCA2NSwgMiwgNzEsIDI1MiwgNjAsIDI1MywgMTIzLCAyNDUsIDEwMSwgNjUsIDE5OSwgOTAsIAorICAgIDMsIDI0NSwgMTI3LCA2NSwgMiwgNzEsIDI1MiwgNjAsIDI1MywgMTIzLCAyNDUsIDEwMSwgNjUsIDE5OSwgOTAsIDI0NSwgCisgICAgMTI3LCA2NSwgMiwgNjIsIDQ5LCAyNDUsIDEyNywgNjUsIDIsIDIyNiwgMjQ3LCAzLCAyNDUsIDEyNywgNjUsIDIsIDIyNiwgCisgICAgMjQ3LCAyNDUsIDEyNywgNjUsIDIsIDIxNSwgMTUzLCAyNDUsIDEyNywgNjUsIDIsIDExNywgMTk5LCAyMTksIDMyLCAyNDksIAorICAgIDEyNSwgMiwgMTg0LCAxOTksIDkwLCAyNDksIDEyNSwgMiwgNzEsIDI1MiwgNjAsIDI1MywgMTIzLCAyNDUsIDEwMSwgNjUsIAorICAgIDE5OSwgOTAsIDMsIDI0OSwgMTI1LCAyLCA3MSwgMjUyLCA2MCwgMjUzLCAxMjMsIDI0NSwgMTAxLCA2NSwgMTk5LCA5MCwgCisgICAgMjQ5LCAxMjUsIDIsIDIyNiwgMjQ3LCAzLCAyNDksIDEyNSwgMiwgMjI2LCAyNDcsIDIxMiwgMTUzLCAxNzQsIDI1MiwgOTEsIAorICAgIDIzMSwgMTI1LCAyNDcsIDIwMiwgNTIsIDI0NSwgMTI5LCA2OCwgMjQwLCAyMjEsIDExNCwgMjUzLCAxNjQsIDExOSwgMjUzLCAKKyAgICAxNjQsIDIyNSwgNTksIDIyNiwgNDEsIDIxNCwgMTYsIDIzMiwgMjQyLCA0MiwgMjUwLCAxMTUsIDQ2LCAyNTAsIDExNSwgNDIsIAorICAgIDI0NCwgMjYsIDQ2LCAyNDQsIDI2LCAyNTEsIDEwMSwgNDYsIDI0OSwgNzIsIDI1MSwgMTAxLCA0MiwgMjQ5LCA3MiwgMjE2LCAKKyAgICAyMjcsIDQ2LCAyNDksIDcyLCAyMTYsIDIyNywgNDIsIDI0OSwgNzIsIDIyMywgMjAyLCAyMjgsIDE2MywgNTIsIDQxLCAyMzIsIAorICAgIDE1OSwgMjUzLCAxOTUsIDIyMiwgODMsIDIyMiwgOTAsIDIxNywgMjEwLCAyMjQsIDEzLCAyMjUsIDEyMSwgMjM1LCAyMzUsIAorICAgIDIxNCwgMTQ1LCAyMTksIDE2NiwgMjI1LCAxNzMsIDY1LCAyMzUsIDIwNCwgNTIsIDIxNiwgNTgsIDIyOCwgMTYzLCA1MiwgCisgICAgMjE0LCAyNiwgMjQwLCAyMjMsIDIxNiwgMjI3LCA0MiwgMjQ5LCA5OSwgMjE2LCAyMjcsIDQ2LCAyNDksIDk5LCAyNTEsIAorICAgIDEwMSwgNDIsIDI0OSwgOTksIDI1MSwgMTAxLCA0NiwgMjQ5LCA5OSwgMjE2LCAyMjcsIDE1MSwgMjM1LCAyMDgsIDI1MSwgCisgICAgMTAxLCAxNTEsIDIzNSwgMjA4LCAyNDMsIDIxMCwgMjIwLCAzLCAxMTQsIDI1MywgMTY1LCAyNTEsIDIwMSwgMTE3LCAxOTksIAorICAgIDI1MiwgNDksIDIyNywgMjYsIDIzNCwgMTQ0LCAyNDUsIDUzLCAyMTEsIDIxMSwgMjE3LCAxNDksIDIyMywgMTQ4LCAyMTMsIAorICAgIDE2NywgMjM1LCAyNTIsIDExOCwgMjI0LCAxMCwgMjUxLCA4OSwgMjM0LCAxNDMsIDIzMywgNjYsIDI1NCwgMTksIDEyNSwgCisgICAgMjIzLCAxNDQsIDI1NCwgMTksIDEyNSwgMjQ1LCA1MywgMjExLCAyMTEsIDIxNywgMTQ5LCAyMzMsIDcwLCAyNTEsIDIxMiwgCisgICAgMjIzLCAxMzAsIDI0OSwgMTMsIDI1NCwgNjQsIDI1MywgMTcyLCAyMTgsIDEyNiwgMjE2LCAyMTcsIDIyMywgMzQsIDI0NywgCisgICAgMTY3LCAyMjcsIDE4LCAyNDksIDEzOCwgMjE4LCAzLCAyMjAsIDE0LCAyNDksIDkwLCAyNDksIDg5LCAxOTQsIDE5NiwgMTYsIAorICAgIDI0MCwgMTQzLCAxOTQsIDE5NiwgMTYsIDIxOSwgMTYwLCAyMjQsIDE3MiwgMTk0LCAxOTYsIDE2LCAyMjQsIDE3MywgMjQ1LCAKKyAgICA2MiwgMTk0LCAxOTYsIDE2LCAyMjQsIDE3MywgMjQ3LCAxMjYsIDE5NCwgMTk2LCAxNiwgMjI0LCAxNzMsIDI0NywgMjAwLCAKKyAgICAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyMzUsIDU5LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyNDksIDIyOCwgMTk0LCAKKyAgICAxOTYsIDE2LCAyNDksIDIyOSwgMjE5LCA3NSwgMTk0LCAxOTYsIDE2LCAyNDksIDIyOSwgMjM1LCA1OSwgMTk0LCAxOTYsIAorICAgIDE2LCAyMjAsIDI0LCAxMzQsIDE5NCwgMTk2LCAxNiwgMjUyLCA5OCwgMTM0LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAKKyAgICAyMjAsIDIzLCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyNTIsIDk3LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyMzMsIAorICAgIDM4LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyNDIsIDEwNiwgMTk0LCAxOTYsIDE2LCAxMzIsIDIxNCwgMjUxLCAxOTQsIAorICAgIDE5NiwgMTYsIDk1LCAyMTQsIDI1MSwgMTk0LCAxOTYsIDE2LCAyMjQsIDE3MywgMTMyLCA2OCwgMTk0LCAxOTYsIDE2LCAKKyAgICAyMjQsIDE3MywgOTUsIDY4LCAxOTQsIDE5NiwgMTYsIDI0OSwgMjI5LCAyNTIsIDk3LCAxOTQsIDE5NiwgMTYsIDExOSwgCisgICAgMjE4LCAzNywgMjE1LCAxNTMsIDE5NCwgMTk2LCAxNiwgMjQ4LCA2LCAyMTksIDc1LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAKKyAgICAxMTksIDI1MCwgMTcwLCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyNDgsIDUsIDE5NCwgMTk2LCAxNiwgMTE5LCAyMTgsIAorICAgIDM3LCAyMzUsIDU5LCAxOTQsIDE5NiwgMTYsIDIxNSwgMTI0LCAyMTQsIDI1MSwgMTk0LCAxOTYsIDE2LCAyMjQsIDE3MywgCisgICAgMjE1LCAxMjQsIDY4LCAxOTQsIDE5NiwgMTYsIDExNCwgMjE4LCAzNywgMjI2LCAyNDcsIDE5NCwgMTk2LCAxNiwgMjQ4LCAKKyAgICAxNywgMjE5LCA3NSwgMTk0LCAxOTYsIDE2LCAyMjQsIDE3MywgMTE0LCAyNTAsIDE3MCwgMTk0LCAxOTYsIDE2LCAyMjQsIAorICAgIDE3MywgMjQ4LCAxNiwgMTk0LCAxOTYsIDE2LCAxMTQsIDIxOCwgMzcsIDIzNSwgNTksIDE5NCwgMTk2LCAxNiwgMjQ2LCA1OCwgCisgICAgMjE0LCAyNTEsIDE5NCwgMTk2LCAxNiwgMjI0LCAxNzMsIDI0NiwgNTgsIDY4LCAxOTQsIDE5NiwgMTYsIDIyNCwgMTQyLCAKKyAgICAyMTUsIDE1MywgMTk0LCAxOTYsIDE2LCAyNDgsIDYsIDIxNSwgMTUzLCAxOTQsIDE5NiwgMTYsIDI0NywgMjAxLCAyMTUsIAorICAgIDE1MywgMTk0LCAxOTYsIDE2LCAyMzUsIDYwLCAyMTUsIDE1MywgMTk0LCAxOTYsIDE2LCAyNDksIDIyOSwgMjE1LCAxNTMsIAorICAgIDE5NCwgMTk2LCAxNiwgMTE0LCAyMjAsIDE4NSwgMjM1LCA1OSwgMTk0LCAxOTYsIDE2LCAyMjQsIDE0MiwgMjI0LCAxNzIsIAorICAgIDE5NCwgMTk2LCAxNiwgMjQ5LCAyMjksIDIxOSwgOTUsIDE5NCwgMTk2LCAxNiwgMjI0LCAxNzMsIDI0OSwgMTY0LCAxOTQsIAorICAgIDE5NiwgMTYsIDExNCwgMjE4LCAzNywgMjQ3LCAyMDksIDE5NCwgMTk2LCAxNiwgMjQ4LCAxNywgMjQ3LCAyMDksIDE5NCwgCisgICAgMTk2LCAxNiwgMjE5LCA5NiwgMjQ3LCAyMDksIDE5NCwgMTk2LCAxNiwgMjM1LCA2MCwgMjQ3LCAyMDksIDE5NCwgMTk2LCAKKyAgICAxNiwgMjQ5LCAyMjksIDI0NywgMjA5LCAxOTQsIDE5NiwgMTYsIDExOSwgMjIwLCAxODUsIDIxOSwgNzUsIDE5NCwgMTk2LCAKKyAgICAxNiwgNDIsIDIyMCwgMTg1LCAyMTksIDc1LCAxOTQsIDE5NiwgMTYsIDIxNywgNDMsIDI0NywgMjA5LCAxOTQsIDE5NiwgMTYsIAorICAgIDI0MiwgMTA3LCAyNDcsIDIwOSwgMTk0LCAxOTYsIDE2LCAyNDksIDE1OCwgMTM0LCAxOTQsIDE5NiwgMTYsIDI0OCwgMTcsIAorICAgIDIxNywgNDIsIDE5NCwgMTk2LCAxNiwgMjEyLCAyNywgMTk0LCAxOTYsIDE2LCAyMTksIDc2LCAyMTcsIDQyLCAxOTQsIDE5NiwgCisgICAgMTYsIDIyMSwgNzEsIDIxNSwgMTUzLCAxOTQsIDE5NiwgMTYsIDIyNCwgMTczLCAyMjgsIDE2MywgMjQ1LCA2MiwgMTk0LCAKKyAgICAxOTYsIDE2LCAyMjQsIDE3MywgMjI0LCAxNTcsIDE5NCwgMTk2LCAxNiwgMTE5LCAyNTAsIDE3MSwgMjE3LCA0MiwgMTk0LCAKKyAgICAxOTYsIDE2LCAxMTQsIDI1MCwgMTcxLCAyMTcsIDQyLCAxOTQsIDE5NiwgMTYsIDIzNSwgMTgzLCAxOTQsIDE5NiwgMTYsIAorICAgIDIyMywgMTkwLCAxOTQsIDE5NiwgMTYsIDIyNywgNjcsIDE5NCwgMTk2LCAxNiwgMjU0LCA1MywgMjE1LCAxNTMsIDE5NCwgCisgICAgMTk2LCAxNiwgMjQ1LCA2NCwgMjE1LCAxNTMsIDE5NCwgMTk2LCAxNiwgMjM1LCAxODQsIDIxNSwgMTUzLCAxOTQsIDE5NiwgCisgICAgMTYsIDIyNywgNjgsIDIxNSwgMTUzLCAxOTQsIDE5NiwgMTYsIDI1NCwgNTIsIDIyOCwgMTYzLCAyNTAsIDY2LCA3NywgNDYsIAorICAgIDI1NCwgMTksIDIsIDI0NiwgNTgsIDIxMiwgMjgsIDY4LCAyMjAsIDE1OSwgMjI3LCA0MCwgMjUxLCA4OSwgMjUxLCAyMjIsIAorICAgIDg3LCA3MSwgMjMyLCAyNDMsIDIsIDIzMSwgMzcsIDI0NywgNzQsIDIzNSwgMjEzLCA4NywgMjQ5LCAxMjIsIDIxNSwgMTUxLCAKKyAgICA4NywgMjQ3LCAxNDEsIDIxNSwgMTUxLCA4NywgMjQ1LCAxMTIsIDg3LCAyNDksIDE0OSwgODcsIDY3LCA0MSwgMiwgMjUwLCAKKyAgICAxMDksIDcxLCAyMzIsIDI0MiwgMjQ1LCA4OSwgODcsIDI1NCwgNDgsIDIzNCwgMTQ1LCA4NywgMjQxLCAxOTcsIDg3LCAzNiwgCisgICAgMTk5LCAyNTIsIDYwLCAyLCAyMjgsIDE2MSwgMzYsIDIxNiwgMTg0LCAyNDYsIDYwLCAyNTEsIDYzLCAyNDksIDIyOSwgMiwgCisgICAgMjI4LCAxNjUsIDY4LCAyMTUsIDE0OSwgODcsIDIzMCwgMjA3LCA4NywgMjQwLCAxNTYsIDg3LCAyMjcsIDM5LCAyNDIsIDQwLCAKKyAgICA4NywgMjI3LCAzOSwgMjMzLCAxNjksIDg3LCAyMjYsIDExNywgODcsIDIyNiwgMTE2LCA4NywgMjQ3LCAxNDksIDI0OSwgMzgsIAorICAgIDE2LCAyNDMsIDI0NSwgMTA5LCAyMTksIDIzNCwgODcsIDE5NCwgMTk2LCAxNiwgMjI0LCAxNzIsIDI0OCwgMzQsIDIyMSwgCisgICAgNTgsIDIzNCwgMTQ1LCA4NywgMjI1LCA3MywgMjI2LCAyMDAsIDIyOSwgMTY0LCAyMjYsIDIwMCwgMjI1LCA2OSwgMjIyLCAKKyAgICAxMDgsIDg3LCAyNDksIDIxMCwgMjIyLCAxMDgsIDg3LCA0MiwgMjI2LCAxMzIsIDIxNSwgMTMxLCAxMDEsIDQyLCAyMjYsIAorICAgIDEzMiwgMjQ0LCAyNDUsIDQyLCAyMjYsIDEzMiwgMjMyLCAxNjMsIDEwMSwgNDYsIDIyNiwgMTMyLCAyMTUsIDEzMSwgMTAxLCAKKyAgICA0NiwgMjI2LCAxMzIsIDI0NCwgMjQ1LCA0NiwgMjI2LCAxMzIsIDIzMiwgMTYzLCAxMDEsIDQyLCA0MSwgMjUxLCA4NSwgCisgICAgMjE1LCAxMzEsIDI0OSwgOTksIDQyLCA0MSwgMjUxLCA4NSwgMjQ0LCAyNDUsIDQyLCA0MSwgMjUxLCA4NSwgMjMyLCAxNjMsIAorICAgIDI0OSwgOTksIDQ2LCA0MSwgMjUxLCA4NSwgMjE1LCAxMzEsIDI0OSwgOTksIDQ2LCA0MSwgMjUxLCA4NSwgMjQ0LCAyNDUsIAorICAgIDQ2LCA0MSwgMjUxLCA4NSwgMjMyLCAxNjMsIDI0OSwgOTksIDQyLCAyNDksIDQwLCAyNTEsIDg1LCAyMTUsIDEzMSwgMTAxLCAKKyAgICA0MiwgMjQ5LCA0MCwgMjUxLCA4NSwgMjMxLCAzNywgMjI1LCAyMzMsIDQyLCAyNDksIDQwLCAyNTEsIDg1LCAyMzIsIDE2MywgCisgICAgMTAxLCAyNDksIDQwLCAyNTEsIDg1LCAyNDQsIDI0NSwgNDYsIDI0OSwgNDAsIDI1MSwgODUsIDIxNSwgMTMxLCAxMDEsIDQ2LCAKKyAgICAyNDksIDQwLCAyNTEsIDg1LCAyMzEsIDM3LCAyMjUsIDIzMywgNDYsIDI0OSwgNDAsIDI1MSwgODUsIDIzMiwgMTYzLCAxMDEsIAorICAgIDIzNSwgMjA5LCAyNDQsIDI0NSwgMTk5LCAyMzIsIDI0MywgMjQ0LCAyNDUsIDIxNSwgMTMxLCA0MiwgMTY3LCAyMzIsIDE2MywgCisgICAgNDYsIDI0OSwgNDAsIDI1MSwgODUsIDIyMiwgOTEsIDIxNSwgMTMxLCA0NiwgMTY3LCAyMzIsIDE2MywgNDIsIDI0OSwgNDAsIAorICAgIDI1MSwgODUsIDIyMiwgOTEsIDIxOCwgMjQyLCAyMTYsIDIyNiwgMjE4LCAyNDIsIDI1MSwgMTAwLCAyMTYsIDIyNywgNDEsIAorICAgIDEyNSwgMjUxLCAxMDEsIDQxLCAxMjUsIDI1MSwgMTAxLCA0MSwgMjUxLCA4NSwgMTEwLCAyMTYsIDIyNywgNDEsIDEyNSwgCisgICAgMzQsIDE2LCAyNTEsIDEwMCwgNDIsIDcxLCA5MiwgMjMyLCAyNDIsIDQ2LCA3MSwgOTIsIDIzMiwgMjQyLCAxOTksIDIyMiwgCisgICAgMTIzLCAyMzIsIDI0MSwgMTk5LCAyMjIsIDEyMywgMjMyLCAyNDAsIDE5OSwgMjIyLCAxMjMsIDIzMiwgMjM5LCAxOTksIAorICAgIDIyMiwgMTIzLCAyMzIsIDIzOCwgMjQ3LCAyNTMsIDE2LCAxNzcsIDcxLCAyNCwgMjE2LCAyMjcsIDIyMywgMTQ4LCAyNDcsIAorICAgIDI1MywgMTYsIDE3NywgNzEsIDI0LCAyNTEsIDEwMSwgMjIzLCAxNDgsIDI0NywgMjUzLCAxNiwgMTc3LCA3MSwgMiwgMjQ5LCAKKyAgICAyMjgsIDI0NywgMjUzLCAxNiwgMTc3LCAxMTksIDI0LCAxOTksIDIsIDI0OSwgMjI4LCAyNDcsIDI1MywgMTYsIDE3NywgCisgICAgMTE0LCAyNCwgMTk5LCAyLCAyNDksIDIyOCwgMjQ3LCAyNTMsIDE2LCAxNzcsIDcxLCAyLCAyMTYsIDE4MywgMjQ3LCAyNTMsIAorICAgIDE2LCAxNzcsIDExOSwgMjQsIDE5OSwgMiwgMjE2LCAxODMsIDI0NywgMjUzLCAxNiwgMTc3LCAxMTQsIDI0LCAxOTksIDIsIAorICAgIDIxNiwgMTgzLCAyNDcsIDI1MywgMTYsIDE3NywgNzEsIDI0LCAyMTQsIDE5LCAyNDcsIDI1MywgMTYsIDE3NywgMTE5LCAyNCwgCisgICAgMTk5LCAyLCAyMTQsIDE5LCAyNDcsIDI1MywgMTYsIDE3NywgMTE0LCAyNCwgMTk5LCAyLCAyMTQsIDE5LCAyNDcsIDI1MywgCisgICAgMTYsIDE3NywgMTE5LCAyNCwgMjQxLCAzMSwgMjQ3LCAyNTMsIDE2LCAxNzcsIDExNCwgMjQsIDI0MSwgMzEsIDI0NywgMjUzLCAKKyAgICAxNiwgMTc3LCA3MSwgMjQsIDIxNiwgMjI3LCAyMzMsIDcwLCAyNDcsIDI1MywgMTYsIDE3NywgNzEsIDI0LCAyNTEsIDEwMSwgCisgICAgMjMzLCA3MCwgNDEsIDI0NCwgMSwgMjIzLCAyMDYsIDg3LCAyNDUsIDEzOSwgODcsIDcxLCAyMzIsIDI0MywgMjQ0LCAyNDUsIAorICAgIDIzMSwgMTAwLCAyNTEsIDc0LCAyMzEsIDEwMCwgMTg0LCAxMTAsIDIyMCwgMTc0LCAyMzEsIDEwMCwgMjIwLCAxNzUsIDExMCwgCisgICAgMjMyLCAxOTAsIDIzMSwgMTAwLCAxODQsIDExMCwgMTE3LCAyMjAsIDE2MSwgMjMxLCAxMDAsIDExNywgMjIwLCAxNjIsIAorICAgIDExMCwgMjMyLCAxOTAsIDIzMSwgMTAwLCAxMTcsIDIyMCwgMTYyLCAyMzUsIDY3LCAyMzEsIDEwMCwgMjE2LCAxNjYsIDIzMSwgCisgICAgMTAwLCAyMTcsIDE3NiwgMjMxLCAxMDAsIDIyNiwgNjMsIDI0NSwgMTgwLCAyNDIsIDEwMCwgMjQzLCAxOTEsIDIxNiwgMjI3LCAKKyAgICAyMjYsIDEzMSwgMjUxLCAxMDEsIDIyNiwgMTMxLCAyMTYsIDIyNywgMjQ5LCA0MCwgMTI1LCAyNTEsIDEwMSwgMjQ5LCA0MCwgCisgICAgMTI1LCAyMTYsIDIyNywgMjE2LCAyMTksIDIyMCwgMjMzLCAxMjUsIDI1MSwgMTAxLCAyMTYsIDIxOSwgMjIwLCAyMzMsIAorICAgIDEyNSwgNjcsIDIxNiwgMTk3LCAyNTEsIDIxMiwgMjIzLCAxMzEsIDIsIDI0OSwgMjI4LCAyMTksIDYwLCAyNDQsIDMzLCAKKyAgICAyNTQsIDE3NywgMjQ5LCAzNywgMjQ1LCAxMjgsIDIzNSwgMTk1LCAyNDgsIDM0LCAyNDQsIDI0NywgODcsIDgzLCAyMjMsIAorICAgIDE0NCwgNTEsIDIxNiwgMTgzLCA4MywgMjMzLCA2NiwgNTEsIDIxNiwgMTgzLCA4MywgMjE1LCAxMzMsIDUxLCAyMTYsIDE4MywgCisgICAgODMsIDI0NiwgNTksIDUxLCAyMTYsIDE4MywgODMsIDIyMywgMTQ0LCA1MSwgMjE2LCAxODQsIDIsIDcxLCAxMzQsIDgzLCAKKyAgICAyMzMsIDY2LCA1MSwgMjE2LCAxODQsIDIsIDcxLCAxMzQsIDgzLCAyMjMsIDE0NCwgMjE2LCAxODQsIDIsIDUxLCA3MSwgCisgICAgMTM0LCAyNTQsIDgxLCAyNDksIDE5NiwgMjE5LCA2NiwgMjE3LCAzOSwgMjQ5LCAxOTYsIDI0MCwgMjI0LCAyLCAyNDQsIDE5LCAKKyAgICAyMjIsIDE1NywgMTYsIDMxLCAyMjgsIDU4LCAxNiwgMzEsIDIxOSwgOTEsIDY1LCAyNDEsIDIxNywgMTYsIDMxLCAyMTksIAorICAgIDkxLCA2NSwgMjE3LCAxNjUsIDE2LCAzMSwgMjQ1LCAxMDEsIDY1LCAyMTcsIDE2NSwgMTYsIDMxLCAyNDUsIDEwMSwgNjUsIAorICAgIDIxNiwgMjAwLCAxNiwgMzEsIDI0NSwgOTEsIDE2LCAzMSwgMjU0LCAxNjgsIDE2LCAzMSwgMjUxLCAyMjEsIDE2LCAzMSwgCisgICAgMjUyLCA5NiwgMTYsIDMxLCAxOTksIDIxOCwgMzgsIDE2LCAzMSwgMjMyLCAyNDMsIDI0NCwgMTE0LCAxNiwgMzEsIDcxLCAKKyAgICAyMTgsIDM4LCAxNiwgMzEsIDI0MywgMjQ1LCAyNDQsIDExNCwgMTYsIDMxLCAyNTAsIDE2MiwgMjIzLCAyMDUsIDE2LCAzMSwgCisgICAgMjIwLCAyMDgsIDIyNiwgMjU0LCAxNiwgMzEsIDIyMCwgMjA4LCAyMzUsIDI1MSwgMTYsIDMxLCAyNDgsIDk3LCAyMzIsIAorICAgIDIzMywgMjQ1LCA0MiwgMTYsIDMxLCAyNDcsIDIzOCwgMjQ5LCAxMTcsIDExNiwgMTYsIDMxLCAyNDcsIDIzOCwgMjQ5LCAKKyAgICAxMTcsIDEwOSwgMTYsIDMxLCAyNDcsIDIzOCwgMjQ5LCAxMTcsIDE2NiwgMTYsIDMxLCAyNDcsIDIzOCwgMjQ5LCAxMTcsIAorICAgIDE2MywgMTYsIDMxLCAxNDYsIDI1NCwgMTY4LCAxNiwgMzEsIDIxOCwgMTIzLCAyMzYsIDU3LCAxNiwgMzEsIDI0NSwgMTAxLCAKKyAgICA2NSwgMjE2LCAyMDEsIDI1MSwgMTM2LCAxNiwgMzEsIDI1MCwgMTkzLCAxNiwgMzEsIDI0NSwgMTAxLCA2NSwgMjMxLCAxNDYsIAorICAgIDE2LCAzMSwgMjE5LCA2LCAxNiwgMzEsIDI0NSwgNDIsIDE2LCAzMSwgMjQ0LCA3NiwgMjIxLCA1NywgMTYsIDMxLCAyNDIsIAorICAgIDk5LCAyMjEsIDU3LCAxNiwgMzEsIDIyNCwgMTQsIDIyMSwgNTcsIDE2LCAzMSwgMjE1LCAxNDUsIDIyMSwgNTcsIDE2LCAzMSwgCisgICAgMjE5LCAyMDYsIDE2LCAzMSwgMjQ4LCAxNCwgMjUxLCAxMzksIDg3LCAyMjcsIDQwLCAyNTEsIDg5LCAxNiwgMzEsIDIyOSwgCisgICAgMTY3LCAxNiwgMzEsIDI0OCwgMTUsIDI0MywgMjQ1LCAxMDksIDE2LCAzMSwgMjE5LCA3LCAyNDMsIDI0NSwgMTA5LCAyMjcsIAorICAgIDEwNSwgMTAxLCAyMjcsIDEwNSwgMjUwLCA4NywgMjI3LCAxMDUsIDI0MywgMjQ4LCAyMjcsIDEwNSwgMjM1LCAxOTEsIDI0MywgCisgICAgMjQ4LCAyMjcsIDEwNSwgMjUxLCAyMTksIDI1MSwgNTMsIDIyNywgMTA1LCAyNTEsIDk2LCAyMTcsIDY1LCAyMjcsIDEwNSwgCisgICAgMjUxLCA4MiwgMjUyLCA2NSwgMjQwLCA5NiwgMjI3LCAxMDUsIDI1NCwgMzYsIDY1LCAyNTAsIDY1LCAyMjcsIDEwNSwgMjQ4LCAKKyAgICAxMDEsIDIyNywgMTA1LCAyNDksIDI5LCAyNTQsIDE3MSwgMjI4LCA1NiwgMjI3LCAxMDUsIDUxLCAyNTIsIDk3LCAzNiwgMjEsIAorICAgIDExNiwgMzYsIDIxLCAxMDksIDM2LCAyMSwgMTY2LCAzNiwgMjEsIDE2MywgMzYsIDIxLCAxODAsIDM2LCAyMSwgMTg5LCAzNiwgCisgICAgMjEsIDE5OCwgMzYsIDIxLCAxOTUsIDM2LCAyMSwgMjAwLCAzNiwgNTAsIDIxNywgMjAwLCAzNiwgNTAsIDI0NSwgMTI0LCAKKyAgICAzNiwgNTAsIDIxNiwgNDEsIDM2LCA1MCwgMjE3LCAxMTcsIDM2LCA1MCwgMjQzLCAyMzEsIDM2LCA1MCwgMjQ0LCA4NywgMzYsIAorICAgIDUwLCAyMjAsIDQ3LCAzNiwgNTAsIDIyMSwgNDAsIDM2LCA1MCwgMjQ1LCAxNDcsIDM2LCA1MCwgMjI5LCAyOCwgMzYsIDUwLCAKKyAgICAyMTYsIDM4LCA4NiwgMjEsIDExNiwgODYsIDIxLCAxMDksIDg2LCAyMSwgMTY2LCA4NiwgMjEsIDE2MywgODYsIDIxLCAxODAsIAorICAgIDg2LCAyMSwgMTg5LCA4NiwgMjEsIDE5OCwgODYsIDIxLCAxOTUsIDg2LCAyMSwgMjAwLCA4NiwgNTAsIDIxNywgMjAwLCA4NiwgCisgICAgNTAsIDI0NSwgMTI0LCA4NiwgNTAsIDIxNiwgNDEsIDg2LCA1MCwgMjE3LCAxMTcsIDg2LCA1MCwgMjQzLCAyMzEsIDg2LCAKKyAgICA1MCwgMjQ0LCA4NywgODYsIDUwLCAyMjAsIDQ3LCA4NiwgNTAsIDIyMSwgNDAsIDg2LCA1MCwgMjQ1LCAxNDcsIDg2LCA1MCwgCisgICAgMjI5LCAyOCwgODYsIDUwLCAyMTYsIDM4LCAyMSwgMTIyLCAyNDMsIDIwMCwgMjE5LCA2OSwgMjEsIDExNywgMjQzLCAyMDAsIAorICAgIDIxOSwgNjksIDIxLCAxMzMsIDI0MywgMjAwLCAyMTksIDY5LCAyMSwgMjQzLCAyMzcsIDI0MywgMjAwLCAyMTksIDY5LCAyMSwgCisgICAgMjQ0LCA1MCwgMjQzLCAyMDAsIDIxOSwgNjksIDIxLCAyMjAsIDUzLCAyNDMsIDIwMCwgMjE5LCA2OSwgMjEsIDIyMSwgNDMsIAorICAgIDI0MywgMjAwLCAyMTksIDY5LCAyMSwgMjQ1LCAxNTAsIDI0MywgMjAwLCAyMTksIDY5LCAyMSwgMjI5LCAzMSwgMjQzLCAKKyAgICAyMDAsIDIxOSwgNjksIDUwLCAyMTcsIDIwMSwgMjQzLCAyMDAsIDIxOSwgNjksIDUwLCAyNDUsIDEyNSwgMjQzLCAyMDAsIAorICAgIDIxOSwgNjksIDUwLCAyMTYsIDQyLCAyNDMsIDIwMCwgMjE5LCA2OSwgNTAsIDIxNywgMTE4LCAyNDMsIDIwMCwgMjE5LCA2OSwgCisgICAgNTAsIDI0MywgMjMyLCAyNDMsIDIwMCwgMjE5LCA2OSwgNTAsIDI0NCwgODgsIDI0MywgMjAwLCAyMTksIDY5LCA1MCwgMjIwLCAKKyAgICA0OCwgMjQzLCAyMDAsIDIxOSwgNjksIDUwLCAyMjEsIDQxLCAyNDMsIDIwMCwgMjE5LCA2OSwgNTAsIDI0NSwgMTQ4LCAyNDMsIAorICAgIDIwMCwgMjE5LCA2OSwgNTAsIDIyOSwgMjksIDI0MywgMjAwLCAyMTksIDY5LCA1MCwgMjE2LCAzOSwgMjQzLCAyMDAsIDIxOSwgCisgICAgNjksIDg2LCA3LCAzLCAxLCA2MSwgODYsIDcsIDMsIDEsIDI1MywgNzQsIDg2LCA3LCAzLCAxLCAyNTAsIDI1MiwgODYsIDcsIAorICAgIDMsIDEsIDI0OSwgMywgODYsIDcsIDMsIDEsIDc0LCA4NiwgNywgMywgMSwgMjQ0LCAyMzAsIDg2LCA3LCAzLCAxLCAyNDMsIAorICAgIDE3NywgODYsIDcsIDMsIDEsIDI0MiwgNDEsIDg2LCA3LCAzLCAxLCA3MiwgODYsIDcsIDMsIDEsIDIzNSwgMTQyLCA4NiwgNywgCisgICAgMywgMSwgMjM1LCAyNywgODYsIDcsIDMsIDEsIDE1MCwgODYsIDcsIDMsIDEsIDE4MywgODYsIDcsIDMsIDEsIDIwNCwgODYsIAorICAgIDcsIDMsIDEsIDc1LCA4NiwgNywgMywgMSwgMjI2LCAyMjksIDg2LCA3LCAzLCAxLCAyMjQsIDI0MCwgODYsIDcsIDMsIDEsIAorICAgIDE0OSwgODYsIDcsIDMsIDEsIDE5NywgODYsIDcsIDMsIDEsIDIxOCwgOTksIDg2LCA3LCAzLCAxLCA2OSwgODYsIDcsIDMsIAorICAgIDEsIDIxNSwgNzksIDg2LCA3LCAzLCAxLCAyMTQsIDgyLCA4NiwgNywgMywgMSwgMjEzLCAxNjYsIDg2LCA3LCAzLCAxLCAKKyAgICAyMTMsIDEwNSwgODYsIDcsIDMsIDEsIDIxMiwgMTUyLCAzNiwgNywgNiwgMSwgNjEsIDM2LCA3LCA2LCAxLCAyNTMsIDc0LCAKKyAgICAzNiwgNywgNiwgMSwgMjUwLCAyNTIsIDM2LCA3LCA2LCAxLCAyNDksIDMsIDM2LCA3LCA2LCAxLCA3NCwgMzYsIDcsIDYsIDEsIAorICAgIDI0NCwgMjMwLCAzNiwgNywgNiwgMSwgMjQzLCAxNzcsIDM2LCA3LCA2LCAxLCAyNDIsIDQxLCAzNiwgNywgNiwgMSwgNzIsIAorICAgIDM2LCA3LCA2LCAxLCAyMzUsIDE0MiwgMzYsIDcsIDYsIDEsIDIzNSwgMjcsIDM2LCA3LCA2LCAxLCAxNTAsIDM2LCA3LCA2LCAKKyAgICAxLCAxODMsIDM2LCA3LCA2LCAxLCAyMDQsIDM2LCA3LCA2LCAxLCA3NSwgMzYsIDcsIDYsIDEsIDIyNiwgMjI5LCAzNiwgNywgCisgICAgNiwgMSwgMjI0LCAyNDAsIDM2LCA3LCA2LCAxLCAxNDksIDM2LCA3LCA2LCAxLCAxOTcsIDM2LCA3LCA2LCAxLCAyMTgsIDk5LCAKKyAgICAzNiwgNywgNiwgMSwgNjksIDM2LCA3LCA2LCAxLCAyMTUsIDc5LCAzNiwgNywgNiwgMSwgMjE0LCA4MiwgMzYsIDcsIDYsIDEsIAorICAgIDIxMywgMTY2LCAzNiwgNywgNiwgMSwgMjEzLCAxMDUsIDM2LCA3LCA2LCAxLCAyMTIsIDE1MiwgMzYsIDcsIDMsIDEsIDYxLCAKKyAgICAzNiwgNywgMywgMSwgMjUzLCA3NCwgMzYsIDcsIDMsIDEsIDI1MCwgMjUyLCAzNiwgNywgMywgMSwgMjQ5LCAzLCAzNiwgNywgCisgICAgMywgMSwgNzQsIDM2LCA3LCAzLCAxLCAyNDQsIDIzMCwgMzYsIDcsIDMsIDEsIDI0MywgMTc3LCAzNiwgNywgMywgMSwgMjQyLCAKKyAgICA0MSwgMzYsIDcsIDMsIDEsIDcyLCAzNiwgNywgMywgMSwgMjM1LCAxNDIsIDM2LCA3LCAzLCAxLCAyMzUsIDI3LCAzNiwgNywgCisgICAgMywgMSwgMTUwLCAzNiwgNywgMywgMSwgMTgzLCAzNiwgNywgMywgMSwgMjA0LCAzNiwgNywgMywgMSwgNzUsIDM2LCA3LCAzLCAKKyAgICAxLCAyMjYsIDIyOSwgMzYsIDcsIDMsIDEsIDIyNCwgMjQwLCAzNiwgNywgMywgMSwgMTQ5LCAzNiwgNywgMywgMSwgMTk3LCAKKyAgICAzNiwgNywgMywgMSwgMjE4LCA5OSwgMzYsIDcsIDMsIDEsIDY5LCAzNiwgNywgMywgMSwgMjE1LCA3OSwgMzYsIDcsIDMsIDEsIAorICAgIDIxNCwgODIsIDM2LCA3LCAzLCAxLCAyMTMsIDE2NiwgMzYsIDcsIDMsIDEsIDIxMywgMTA1LCAzNiwgNywgMywgMSwgMjEyLCAKKyAgICAxNTIsIDM2LCAyMSwgMjEyLCA3OSwgMTQ2LCAzNiwgNTAsIDI0NSwgMTI0LCAxNDYsIDM2LCA1MCwgMjE2LCA0MSwgMTQ2LCAKKyAgICAzNiwgNTAsIDIxNywgMTE3LCAxNDYsIDM2LCA1MCwgMjQzLCAyMzEsIDE0NiwgMzYsIDUwLCAyNDQsIDg3LCAxNDYsIDM2LCAKKyAgICA1MCwgMjIwLCA0NywgMTQ2LCAzNiwgNTAsIDIyMSwgNDAsIDE0NiwgMzYsIDUwLCAyNDUsIDE0NywgMTQ2LCAzNiwgNTAsIAorICAgIDIyOSwgMjgsIDE0NiwgMzYsIDUwLCAyMTYsIDM4LCA1MSwgMzYsIDIxLCAxMTYsIDUxLCAzNiwgMjEsIDEwOSwgNTEsIDM2LCAKKyAgICAyMSwgMTY2LCA1MSwgMzYsIDIxLCAxNjMsIDUxLCAzNiwgMjEsIDE4MCwgNTEsIDM2LCAyMSwgMTg5LCA1MSwgMzYsIDIxLCAKKyAgICAxOTgsIDUxLCAzNiwgMjEsIDE5NSwgNTEsIDM2LCAyMSwgMjAwLCA1MSwgMzYsIDUwLCAyMTcsIDIwMCwgMTQ2LCAzNiwgMjEsIAorICAgIDIxMiwgNzksIDkyLCA5NiwgMTc3LCAyNDEsIDMxLCA5MiwgOTYsIDEwNywgMjQxLCAzMSwgOTIsIDk2LCAxNzcsIDIxNCwgCisgICAgMjE2LCA5MiwgOTYsIDEwNywgMjE0LCAyMTYsIDkyLCA5NiwgMTc3LCAyMTYsIDE2OSwgMjQ4LCAxMDIsIDI0MSwgMzEsIDkyLCAKKyAgICA5NiwgMTA3LCAyMTYsIDE2OSwgMjQ4LCAxMDIsIDI0MSwgMzEsIDkyLCA5NiwgMTc3LCAyMTYsIDE2OSwgMjQ4LCAxMDIsIAorICAgIDIxNCwgMjE2LCA5MiwgOTYsIDEwNywgMjE2LCAxNjksIDI0OCwgMTAyLCAyMTQsIDIxNiwgOTIsIDk2LCAxNzcsIDIyNCwgCisgICAgMTY5LCAyNDgsIDEwMiwgMjQxLCAzMSwgOTIsIDk2LCAxMDcsIDIyNCwgMTY5LCAyNDgsIDEwMiwgMjQxLCAzMSwgOTIsIDk2LCAKKyAgICAxNzcsIDIyNCwgMTY5LCAyNDgsIDEwMiwgMjE0LCAyMTYsIDkyLCA5NiwgMTA3LCAyMjQsIDE2OSwgMjQ4LCAxMDIsIDIxNCwgCisgICAgMjE2LCA5MiwgOTYsIDE3NywgMTE5LCAyNCwgMjIzLCAxNDgsIDkyLCA5NiwgMTE5LCAxNzcsIDI0LCA0NiwgMjQxLCAyMDUsIAorICAgIDkyLCA5NiwgMTE5LCAxMDcsIDI0LCA0NiwgMjMzLCAyLCA5MiwgOTYsIDEwNywgMTE5LCAyNCwgMjIzLCAxNDgsIDkyLCA5NiwgCisgICAgMTc3LCAxMTksIDI0LCAyMzMsIDcwLCA5MiwgOTYsIDExOSwgMTc3LCAyNCwgNDIsIDI0MSwgMjA1LCA5MiwgOTYsIDExOSwgCisgICAgMTA3LCAyNCwgNDIsIDIzMywgMiwgOTIsIDk2LCAxMDcsIDExOSwgMjQsIDIzMywgNzAsIDkyLCA5NiwgMTc3LCAxMTQsIDI0LCAKKyAgICAyMjMsIDE0OCwgOTIsIDk2LCAxMTQsIDE3NywgMjQsIDQ2LCAyNDEsIDIwNSwgOTIsIDk2LCAxMTQsIDEwNywgMjQsIDQ2LCAKKyAgICAyMzMsIDIsIDkyLCA5NiwgMTA3LCAxMTQsIDI0LCAyMjMsIDE0OCwgOTIsIDk2LCAxNzcsIDExNCwgMjQsIDIzMywgNzAsIAorICAgIDkyLCA5NiwgMTE0LCAxNzcsIDI0LCA0MiwgMjQxLCAyMDUsIDkyLCA5NiwgMTE0LCAxMDcsIDI0LCA0MiwgMjMzLCAyLCA5MiwgCisgICAgOTYsIDEwNywgMTE0LCAyNCwgMjMzLCA3MCwgOTIsIDk2LCAxNzcsIDcxLCAyNCwgMjIzLCAxNDgsIDkyLCA5NiwgNzEsIAorICAgIDE3NywgMjQsIDQ2LCAyNDEsIDIwNSwgOTIsIDk2LCAxMTQsIDEwNywgMjQsIDQ2LCAxMTksIDIzMywgMiwgOTIsIDk2LCAKKyAgICAxMTksIDEwNywgMjQsIDQ2LCAxMTQsIDIzMywgMiwgOTIsIDk2LCA3MSwgMTA3LCAyNCwgNDYsIDIzMywgMiwgOTIsIDk2LCAKKyAgICAxMTksIDE3NywgMjQsIDQ2LCAxMTQsIDI0MSwgMjA1LCA5MiwgOTYsIDExNCwgMTc3LCAyNCwgNDYsIDExOSwgMjQxLCAyMDUsIAorICAgIDkyLCA5NiwgMTA3LCA3MSwgMjQsIDIyMywgMTQ4LCA5MiwgOTYsIDE3NywgNzEsIDI0LCAyMzMsIDcwLCA5MiwgOTYsIDcxLCAKKyAgICAxNzcsIDI0LCA0MiwgMjQxLCAyMDUsIDkyLCA5NiwgMTE0LCAxMDcsIDI0LCA0MiwgMTE5LCAyMzMsIDIsIDkyLCA5NiwgCisgICAgMTE5LCAxMDcsIDI0LCA0MiwgMTE0LCAyMzMsIDIsIDkyLCA5NiwgNzEsIDEwNywgMjQsIDQyLCAyMzMsIDIsIDkyLCA5NiwgCisgICAgMTE5LCAxNzcsIDI0LCA0MiwgMTE0LCAyNDEsIDIwNSwgOTIsIDk2LCAxMTQsIDE3NywgMjQsIDQyLCAxMTksIDI0MSwgMjA1LCAKKyAgICA5MiwgOTYsIDEwNywgNzEsIDI0LCAyMzMsIDcwLCA5MiwgOTYsIDE3NywgMTE5LCAyNCwgMjQxLCAzMSwgOTIsIDk2LCA0MiwgCisgICAgMTA3LCAyNCwgNDYsIDExOSwgMjMzLCAyLCA5MiwgOTYsIDQ2LCAxMDcsIDI0LCA0MiwgMTE5LCAyMzMsIDIsIDkyLCA5NiwgCisgICAgMTE5LCAxNzcsIDI0LCAxOTksIDI0MSwgMjA1LCA5MiwgOTYsIDExOSwgMTA3LCAyNCwgMTk5LCAyMzMsIDIsIDkyLCA5NiwgCisgICAgNDYsIDE3NywgMjQsIDQyLCAxMTksIDI0MSwgMjA1LCA5MiwgOTYsIDQyLCAxNzcsIDI0LCA0NiwgMTE5LCAyNDEsIDIwNSwgCisgICAgOTIsIDk2LCAxMDcsIDExOSwgMjQsIDI0MSwgMzEsIDkyLCA5NiwgMTc3LCAxMTQsIDI0LCAyNDEsIDMxLCA5MiwgOTYsIDQyLCAKKyAgICAxMDcsIDI0LCA0NiwgMTE0LCAyMzMsIDIsIDkyLCA5NiwgNDYsIDEwNywgMjQsIDQyLCAxMTQsIDIzMywgMiwgOTIsIDk2LCAKKyAgICAxMTQsIDE3NywgMjQsIDE5OSwgMjQxLCAyMDUsIDkyLCA5NiwgMTE0LCAxMDcsIDI0LCAxOTksIDIzMywgMiwgOTIsIDk2LCAKKyAgICA0NiwgMTc3LCAyNCwgNDIsIDExNCwgMjQxLCAyMDUsIDkyLCA5NiwgNDIsIDE3NywgMjQsIDQ2LCAxMTQsIDI0MSwgMjA1LCAKKyAgICA5MiwgOTYsIDEwNywgMTE0LCAyNCwgMjQxLCAzMSwgOTIsIDk2LCAxNzcsIDcxLCAyNCwgMjQxLCAzMSwgOTIsIDk2LCA0MiwgCisgICAgMTA3LCAyNCwgNDYsIDcxLCAyMzMsIDIsIDkyLCA5NiwgNDYsIDEwNywgMjQsIDQyLCA3MSwgMjMzLCAyLCA5MiwgOTYsIDcxLCAKKyAgICAxNzcsIDI0LCAxOTksIDI0MSwgMjA1LCA5MiwgOTYsIDExNCwgMTA3LCAyNCwgMTE5LCAxOTksIDIzMywgMiwgOTIsIDk2LCAKKyAgICAxMTksIDEwNywgMjQsIDExNCwgMTk5LCAyMzMsIDIsIDkyLCA5NiwgNzEsIDEwNywgMjQsIDE5OSwgMjMzLCAyLCA5MiwgOTYsIAorICAgIDQyLCAxMTQsIDEwNywgMjQsIDQ2LCAxMTksIDIzMywgMiwgOTIsIDk2LCA0NiwgMTE0LCAxMDcsIDI0LCA0MiwgMTE5LCAKKyAgICAyMzMsIDIsIDkyLCA5NiwgNDIsIDExOSwgMTA3LCAyNCwgNDYsIDExNCwgMjMzLCAyLCA5MiwgOTYsIDQ2LCAxMTksIDEwNywgCisgICAgMjQsIDQyLCAxMTQsIDIzMywgMiwgOTIsIDk2LCAxMTksIDE3NywgMjQsIDExNCwgMTk5LCAyNDEsIDIwNSwgOTIsIDk2LCAKKyAgICAxMTQsIDE3NywgMjQsIDExOSwgMTk5LCAyNDEsIDIwNSwgOTIsIDk2LCA0NiwgMTc3LCAyNCwgNDIsIDcxLCAyNDEsIDIwNSwgCisgICAgOTIsIDk2LCA0MiwgMTc3LCAyNCwgNDYsIDcxLCAyNDEsIDIwNSwgOTIsIDk2LCAxMDcsIDcxLCAyNCwgMjQxLCAzMSwgOTIsIAorICAgIDk2LCAxNzcsIDUxLCAyNDgsIDEwMiwgMjQxLCAzMSwgOTIsIDk2LCAxMDcsIDUxLCAyNDgsIDEwMiwgMjQxLCAzMSwgOTIsIAorICAgIDk2LCAxNzcsIDUxLCAyNDgsIDEwMiwgMjE0LCAyMTYsIDkyLCA5NiwgMTA3LCA1MSwgMjQ4LCAxMDIsIDIxNCwgMjE2LCA5MiwgCisgICAgOTYsIDUxLCAyNDEsIDMxLCA5MiwgOTYsIDUxLCAyMTQsIDIxNiwgOTIsIDk2LCAxMTksIDIyMCwgODEsIDI0LCA0NiwgMjQ2LCAKKyAgICA2NywgOTIsIDk2LCAxMTksIDUxLCAyNCwgNDYsIDIyMCwgODAsIDkyLCA5NiwgNTEsIDExOSwgMjQsIDIyMywgMTQ4LCA5MiwgCisgICAgOTYsIDExOSwgMjIwLCA4MSwgMjQsIDQyLCAyNDYsIDY3LCA5MiwgOTYsIDExOSwgNTEsIDI0LCA0MiwgMjIwLCA4MCwgOTIsIAorICAgIDk2LCA1MSwgMTE5LCAyNCwgMjMzLCA3MCwgOTIsIDk2LCAxMTQsIDIyMCwgODEsIDI0LCA0NiwgMjQ2LCA2NywgOTIsIDk2LCAKKyAgICAxMTQsIDUxLCAyNCwgNDYsIDIyMCwgODAsIDkyLCA5NiwgNTEsIDExNCwgMjQsIDIyMywgMTQ4LCA5MiwgOTYsIDExNCwgCisgICAgMjIwLCA4MSwgMjQsIDQyLCAyNDYsIDY3LCA5MiwgOTYsIDExNCwgNTEsIDI0LCA0MiwgMjIwLCA4MCwgOTIsIDk2LCA1MSwgCisgICAgMTE0LCAyNCwgMjMzLCA3MCwgOTIsIDk2LCA3MSwgMjIwLCA4MSwgMjQsIDQ2LCAyNDYsIDY3LCA5MiwgOTYsIDcxLCA1MSwgCisgICAgMjQsIDQ2LCAyMjAsIDgwLCA5MiwgOTYsIDUxLCA3MSwgMjQsIDIyMywgMTQ4LCA5MiwgOTYsIDcxLCAyMjAsIDgxLCAyNCwgCisgICAgNDIsIDI0NiwgNjcsIDkyLCA5NiwgNzEsIDUxLCAyNCwgNDIsIDIyMCwgODAsIDkyLCA5NiwgNTEsIDcxLCAyNCwgMjMzLCAKKyAgICA3MCwgOTIsIDk2LCAxMTksIDIyMCwgODEsIDI0LCAxOTksIDI0NiwgNjcsIDkyLCA5NiwgMTE5LCA1MSwgMjQsIDE5OSwgCisgICAgMjIwLCA4MCwgOTIsIDk2LCA1MSwgMTE5LCAyNCwgMjQxLCAzMSwgOTIsIDk2LCAxMTQsIDIyMCwgODEsIDI0LCAxOTksIAorICAgIDI0NiwgNjcsIDkyLCA5NiwgMTE0LCA1MSwgMjQsIDE5OSwgMjIwLCA4MCwgOTIsIDk2LCA1MSwgMTE0LCAyNCwgMjQxLCAzMSwgCisgICAgOTIsIDk2LCA3MSwgMjIwLCA4MSwgMjQsIDE5OSwgMjQ2LCA2NywgOTIsIDk2LCA3MSwgNTEsIDI0LCAxOTksIDIyMCwgODAsIAorICAgIDkyLCA5NiwgNTEsIDcxLCAyNCwgMjQxLCAzMSwgOTIsIDk2LCAxNzcsIDI1MywgMTk2LCAxMTksIDI0LCAyMjMsIDE0OCwgCisgICAgOTIsIDk2LCAxNzcsIDI1MywgMTk2LCAxMTksIDI0LCAyMzMsIDcwLCA5MiwgOTYsIDE3NywgMjUzLCAxOTYsIDExNCwgMjQsIAorICAgIDIzMywgNzAsIDkyLCA5NiwgMTc3LCAyNTMsIDE5NiwgMTE0LCAyNCwgMjIzLCAxNDgsIDkyLCA5NiwgMTc3LCAyNDcsIDIwNywgCisgICAgMjE1LCAxMzEsIDQ2LCAyMTEsIDIxMSwgMjMyLCAxNjMsIDIzMywgNzAsIDkyLCA5NiwgMTc3LCAyNDcsIDIwNywgMjE1LCAKKyAgICAxMzEsIDQyLCAyMTEsIDIxMSwgMjMyLCAxNjMsIDIyMywgMTQ4LCA5MiwgOTYsIDE3NywgMjQ3LCAyMDcsIDI0OSwgNzAsIAorICAgIDkyLCA5NiwgMTc3LCAyMzMsIDcwLCA5MiwgOTYsIDE3NywgMjE1LCAxMzQsIDkyLCA5NiwgMTc3LCAyMjMsIDE0OCwgOTIsIAorICAgIDk2LCAxNzcsIDI0NiwgNjAsIDkyLCA5NiwgMTA3LCAyMzMsIDcwLCA5MiwgOTYsIDEwNywgMjE1LCAxMzQsIDkyLCA5NiwgCisgICAgMTA3LCAyMjMsIDE0OCwgOTIsIDk2LCAxMDcsIDI0NiwgNjAsIDkyLCA5NiwgMTc3LCA0MiwgMjQsIDEwNywgMjIzLCAxNDgsIAorICAgIDkyLCA5NiwgMTc3LCAxMTQsIDI0LCAxMDcsIDI0NiwgNjAsIDkyLCA5NiwgMTA3LCA0MiwgMjQsIDE3NywgMjIzLCAxNDgsIAorICAgIDkyLCA5NiwgMTA3LCAxMTQsIDI0LCAxNzcsIDI0NiwgNjAsIDIxNSwgMTMxLCAxNTEsIDI1MSwgMTM2LCAyMzIsIDE2MywgCisgICAgMTIyLCAyNDUsIDE0NiwgMjUxLCAxMzYsIDIzMiwgMTYzLCAxMjIsIDIyNCwgMTY3LCAyNTEsIDEzNiwgMjMyLCAxNjMsIAorICAgIDEzMywgMjQ1LCAxNDQsIDI1MSwgMTM2LCAyMzIsIDE2MywgMTUxLCAyNTEsIDEzNiwgMjMyLCAxNjMsIDI0NCwgNTAsIDI0NSwgCisgICAgMTQ0LCAyNTEsIDEzNiwgMjMyLCAxNjMsIDEzMywgMjI0LCAxNjUsIDI1MSwgMTM2LCAyMzIsIDE2MywgMjIxLCA0MywgMjQ1LCAKKyAgICAxNDQsIDI1MSwgMTM2LCAyNDMsIDIwMCwgMjUxLCAxMzYsIDQyLCAyMjEsIDQzLCAyNDUsIDE0NCwgMjUxLCAxMzYsIDQyLCAKKyAgICAxMzMsIDIyNCwgMTY1LCAyNTEsIDEzNiwgNDIsIDI0NCwgNTAsIDI0NSwgMTQ0LCAyNTEsIDEzNiwgNDIsIDE1MSwgMjUxLCAKKyAgICAxMzYsIDQyLCAxMzMsIDI0NSwgMTQ0LCAyNTEsIDEzNiwgNDIsIDEyMiwgMjI0LCAxNjcsIDI1MSwgMTM2LCA0MiwgMTIyLCAKKyAgICAyNDUsIDE0NiwgMjUxLCAxMzYsIDQ2LCAxNTEsIDI1MSwgMTM2LCAxNzcsIDIyMSwgMTQsIDIzMSwgMTQ3LCAyMjEsIDE0LCAKKyAgICAyNDgsIDEwNywgMjIxLCAxNCwgMjE1LCAxMzEsIDEyMiwgMjQ1LCAxNDYsIDI1MSwgMTM2LCA0NiwgMTIyLCAyNDUsIDE0NiwgCisgICAgMjUxLCAxMzYsIDIyNCwgMTcxLCAyMzIsIDE2MywgMjMzLCA3MCwgMjI0LCAxNzEsIDIzMiwgMTYzLCAyMjMsIDE0OCwgMjI0LCAKKyAgICAxNzEsIDIxNSwgMTMxLCAyMzMsIDcwLCAyMjQsIDE3MSwgMjE1LCAxMzEsIDQyLCAyNCwgMjMyLCAxNjMsIDQyLCAyNCwgCisgICAgMjMyLCAxNjMsIDIyMywgMTQ4LCAyMjQsIDE3MSwgMjE1LCAxMzEsIDQyLCAyNCwgMjMyLCAxNjMsIDIyMywgMTQ4LCAyMjQsIAorICAgIDE3MSwgMjE1LCAxMzEsIDQyLCAyNCwgMjE1LCAxMzEsIDQ2LCAyNCwgMjMyLCAxNjMsIDIzMywgNzAsIDIyNCwgMTcxLCAKKyAgICAyMTUsIDEzMSwgNDIsIDI0LCAyMTUsIDEzMSwgNDYsIDI0LCAyMzIsIDE2MywgMjIzLCAxNDgsIDIyNCwgMTcxLCAyMTUsIAorICAgIDEzMSwgMjIzLCAxNDgsIDIyNCwgMTcxLCAyMTUsIDEzMSwgNDYsIDI0LCAyMzIsIDE2MywgMjMzLCA3MCwgMjI0LCAxNzEsIAorICAgIDIxNSwgMTMxLCA0NiwgMjQsIDIzMiwgMTYzLCA0MiwgMjQsIDIzMiwgMTYzLCAyMjMsIDE0OCwgODMsIDIxOSwgMTY2LCA2NywgCisgICAgMjE5LCAxNjYsIDY3LCA0MSwgMiwgMjIzLCA4NSwgMjQ5LCA5OCwgNjcsIDQxLCAyNDksIDEyNiwgODMsIDMsIDIxOSwgMTY2LCAKKyAgICA0MSwgMiwgMTk5LCAyNDQsIDc0LCA0MSwgMiwgNzEsIDI0NCwgNzQsIDQxLCAyLCAyMjcsIDExLCAyNDksIDY2LCAyNDQsIAorICAgIDc0LCA0MSwgMiwgMjE1LCAxMzEsIDQyLCAyMTEsIDIxMSwgMjMyLCAxNjMsIDQ2LCAyNDQsIDc0LCA0MSwgMiwgMjE1LCAKKyAgICAxMzEsIDQ2LCAyMTEsIDIxMSwgMjMyLCAxNjMsIDQyLCAyNDQsIDc0LCA0MSwgMiwgMjQ3LCAyMDcsIDI0OSwgNjYsIDI0NCwgCisgICAgNzQsIDgzLCAzLCAyMTksIDE2NiwgNjcsIDMsIDIxOSwgMTY2LCA4MywgMjI0LCA5LCA2NywgMjI0LCA5LCA4MywgNzEsIAorICAgIDIyNCwgOSwgNjcsIDcxLCAyMjQsIDksIDgzLCAyMjYsIDEzNCwgNjcsIDIyNiwgMTM0LCA4MywgMjE1LCAxMzMsIDIxNiwgCisgICAgMTgzLCA2NywgMjE1LCAxMzMsIDIxNiwgMTgzLCA4MywgMjE1LCAxMzMsIDMsIDIxNiwgMTgzLCA2NywgMjE1LCAxMzMsIDMsIAorICAgIDIxNiwgMTgzLCA4MywgMjIzLCAxNDQsIDIxNiwgMTgzLCA2NywgMjIzLCAxNDQsIDIxNiwgMTgzLCA4MywgMjIzLCAxNDQsIAorICAgIDMsIDIxNiwgMTgzLCA2NywgMjIzLCAxNDQsIDMsIDIxNiwgMTgzLCA4MywgMjIzLCAxNDQsIDIyNSwgMTQyLCA2NywgMjIzLCAKKyAgICAxNDQsIDIyNSwgMTQyLCA4MywgMjQ2LCA1OSwgMjE2LCAxODMsIDY3LCAyNDYsIDU5LCAyMTYsIDE4MywgODMsIDI0NiwgNTksIAorICAgIDMsIDIxNiwgMTgzLCA2NywgMjQ2LCA1OSwgMywgMjE2LCAxODMsIDgzLCAyMzMsIDY2LCAyMTYsIDE4MywgNjcsIDIzMywgCisgICAgNjYsIDIxNiwgMTgzLCA4MywgMjMzLCA2NiwgMywgMjE2LCAxODMsIDY3LCAyMzMsIDY2LCAzLCAyMTYsIDE4MywgODMsIAorICAgIDIzMywgNjYsIDIyNSwgMTQyLCA2NywgMjMzLCA2NiwgMjI1LCAxNDIsIDgzLCAyNDcsIDIwMCwgNjcsIDI0NywgMjAwLCA2NywgCisgICAgMjQ3LCAyMDEsIDI0OSwgMTI2LCA4MywgMywgMjQ3LCAyMDAsIDI0NCwgNTgsIDIzMiwgMTU5LCA2NywgMjQ5LCAyMjgsIAorICAgIDI0NiwgNzIsIDI0OSwgMjI4LCAyNDksIDIyOSwgMiwgNzEsIDI0NCwgNzQsIDI1MSwgNDAsIDgzLCAyNDksIDIyOCwgMjQ5LCAKKyAgICAyMjksIDIsIDQyLCAxNTEsIDI1MSwgMTQ0LCAyNDksIDIyOSwgMiwgNDYsIDE1MSwgMjUxLCAxNDQsIDI0OSwgMjI5LCAyLCAKKyAgICAyMzIsIDE2MywgMTUxLCAyNTEsIDE0NCwgMjQ5LCAyMjksIDIsIDIxNSwgMTMxLCAxNTEsIDI1MSwgMTQ0LCAyNDksIDIyOSwgCisgICAgMiwgMjE1LCAxMzEsIDQ2LCAyMjQsIDE3MSwgMjUxLCAxNDQsIDI0OSwgMjI5LCAyLCAyNTQsIDY0LCAyNTEsIDE3LCAyMTUsIAorICAgIDEzMSwgNDIsIDIyNCwgMTcxLCAyNTEsIDE0NCwgNDIsIDE1MSwgODMsIDI0OSwgMjI4LCA0NiwgMTUxLCA4MywgMjQ5LCAKKyAgICAyMjgsIDIzNSwgMTkyLCAyNTEsIDQyLCAyMzUsIDE5MiwgNjcsIDI0OSwgMjI4LCAyMTUsIDEzMSwgMTUxLCAyMzUsIDE5MiwgCisgICAgNjcsIDI0OSwgMjI4LCAyMzIsIDE2MywgMTUxLCAyMzUsIDE5MiwgNjcsIDI0OSwgMjI4LCAyMTUsIDEzMSwgNDIsIDIyNCwgCisgICAgMTcxLCAyNDksIDIyNiwgMjUzLCAxOTUsIDIxNSwgMTMxLCA0NiwgMjI0LCAxNzEsIDI0OSwgMjI2LCAyNTMsIDE5NSwgMjMyLCAKKyAgICAxNjMsIDQ2LCAyMjQsIDE3MSwgMjQ5LCAyMjYsIDI1MywgMTk1LCAyMzIsIDE2MywgNDIsIDIyNCwgMTcxLCAyNDksIDIyNiwgCisgICAgMjUzLCAxOTUsIDIxNSwgMTMxLCAxNTEsIDI0OSwgMjI4LCAyMzIsIDE2MywgMTUxLCAyNDksIDIyOCwgODMsIDIzMiwgMTYzLCAKKyAgICA0NiwgMjE2LCAxODMsIDgzLCAyMzIsIDE2MywgNDIsIDIxNiwgMTgzLCA4MywgMjE1LCAxMzEsIDQyLCAyMTYsIDE4MywgODMsIAorICAgIDIxNSwgMTMxLCA0NiwgMjE2LCAxODMsIDY3LCAyNTEsIDQyLCA0MSwgMiwgNDIsIDE1MSwgMjUxLCAxNDQsIDQxLCAyLCA0NiwgCisgICAgMTUxLCAyNTEsIDE0NCwgNDEsIDIsIDIxNSwgMTMxLCA0MiwgMjQ3LCAyMDcsIDE1MSwgMjUxLCAxNDQsIDQxLCAyLCAyMzIsIAorICAgIDE2MywgNDYsIDI0NywgMjA3LCAxNTEsIDI1MSwgMTQ0LCA2NywgNDEsIDIsIDcxLCAyNTEsIDE1NSwgMjMyLCAyNDIsIDY3LCAKKyAgICAyMTUsIDEzMywgMjE2LCAxODQsIDIsIDI0NywgNzQsIDIxNSwgMTMzLCAyMTYsIDE4NCwgMiwgNDIsIDE1MSwgMjUxLCAxNDQsIAorICAgIDIxNSwgMTMzLCAyMTYsIDE4NCwgMiwgNDYsIDE1MSwgMjUxLCAxNDQsIDIzMywgMTA4LCAyNDksIDIyOCwgNjcsIDQxLCAyLCAKKyAgICAyMTUsIDEzMSwgNDIsIDIyNCwgMTcwLCA2NywgNDEsIDIsIDIzMiwgMTYzLCA0MiwgMjI0LCAxNzAsIDY3LCA0MSwgMiwgCisgICAgMjMyLCAxNjMsIDQ2LCAyMjQsIDE3MCwgNjcsIDQxLCAyLCAyMTUsIDEzMSwgNDYsIDIyNCwgMTcwLCA2NywgMjQ5LCAyMjksIAorICAgIDIsIDIxNSwgMTMxLCA0MiwgMjI0LCAxNzAsIDY3LCAyNDksIDIyOSwgMiwgMjMyLCAxNjMsIDQyLCAyMjQsIDE3MCwgNjcsIAorICAgIDI0OSwgMjI5LCAyLCAyMzIsIDE2MywgNDYsIDIyNCwgMTcwLCA2NywgMjQ5LCAyMjksIDIsIDIxNSwgMTMxLCA0NiwgMjI0LCAKKyAgICAxNzAsIDIxNSwgMTMxLCA0MiwgMjE2LCAxODMsIDIxNSwgMTMxLCA0NiwgMjE2LCAxODMsIDIzMiwgMTYzLCA0MiwgMjE2LCAKKyAgICAxODMsIDY3LCAyMzEsIDE0NywgMjE5LCAxNjYsIDgzLCAyMzEsIDE0NywgMjE5LCAxNjYsIDY3LCAyMzEsIDE0NywgMywgCisgICAgMjE5LCAxNjYsIDgzLCAyMzEsIDE0NywgMywgMjE5LCAxNjYsIDIzMiwgMTYzLCA0NiwgMjE2LCAxODMsIDgzLCAyMTgsIAorICAgIDIzOSwgMiwgMjI0LCAyNSwgMjQ5LCAxODQsIDIxNSwgMTY0LCAyMTksIDI0NCwgMjQ5LCAxNjAsIDgzLCAyMTksIDk1LCA2NywgCisgICAgMjE5LCA5NSwgMjMzLCAwLCAyMTcsIDg2LCAyMTgsIDIzOCwgMjUzLCAxNDksIDIyOCwgMTgyLCAyNDcsIDI0NSwgMjI4LCAKKyAgICAxODIsIDI0OSwgMTM1LCAyMjcsIDI5LCA4MywgMjE3LCAyMDksIDY3LCAyMTcsIDIwOSwgMjUyLCA3NSwgMjUxLCA4OSwgCisgICAgMjUyLCA3NSwgOTIsIDIsIDI1MCwgNjUsIDI1MiwgNzUsIDkyLCAyLCAyMTMsIDE2NiwgMjIyLCAxNjksIDIxNSwgMTY1LCAyLCAKKyAgICAyMjQsIDUxLCAyNDYsIDM5LCAyNDAsIDIzMCwgMjUxLCAxOTksIDY3LCAyMjAsIDE4MiwgMjI1LCAyMzMsIDgzLCAyMjAsIAorICAgIDE4MiwgMjI1LCAyMzMsIDIyMSwgMTAsIDIyMywgMjAyLCAyMjMsIDg5LCAyNDQsIDI0LCAyNDEsIDIxMiwgMjUxLCA0MiwgCisgICAgODMsIDQyLCAyMjUsIDE0MSwgMjM1LCAyMzksIDgzLCA0NiwgMjI1LCAxNDEsIDIzNSwgMjM5LCA2NywgNDIsIDIyNSwgMTQxLCAKKyAgICAyMzUsIDIzOSwgNjcsIDExNCwgMjI1LCAxNDEsIDIzNSwgMjM5LCA2NywgNDYsIDIyNSwgMTQxLCAyMzUsIDIzOSwgNjcsIAorICAgIDExOSwgMjI1LCAxNDEsIDIzNSwgMjM5LCAyMjAsIDI5LCAyNCwgMjQ5LCA2OSwgMjUwLCAxNTIsIDUyLCAyMjQsIDYyLCA1MiwgCisgICAgMjUxLCAxNjIsIDUyLCAyNTAsIDIxMSwgMjU0LCAxMywgMjI3LCAxMiwgMjQ5LCA3MCwgMjUwLCA0OCwgMjIzLCAxOTAsIAorICAgIDI0OSwgNzEsIDY1LCAyMzIsIDE3MywgMjQ5LCA3MSwgNjUsIDIzNSwgMTE3LCAyMTksIDk2LCAyNCwgMjQ5LCA3NiwgMjQ0LCAKKyAgICAxMzYsIDg3LCAyNTQsIDE1MywgMjIxLCAxMiwgMjQyLCA1LCAyNCwgMjIwLCAxMTUsIDIyNiwgOTUsIDg3LCAyMTIsIDI0NSwgCisgICAgMjEzLCA1OCwgMjE2LCAxNzMsIDMxLCAyNDEsIDIwNywgMjE2LCAxNzMsIDMxLCAyMzMsIDEzMSwgMjE2LCAxNzMsIDMxLCAKKyAgICAyNDQsIDY1LCAyMTYsIDE3MywgMzEsIDIxNywgODcsIDIxNiwgMTczLCAzMSwgMjEzLCAyMjQsIDIxNiwgMTczLCAzMSwgCisgICAgMjE0LCAyNCwgMjE2LCAxNzMsIDMxLCAyMzAsIDE4NSwgMjE2LCAxNzMsIDMxLCAyNDUsIDE3OSwgMjEzLCAyNDIsIDY1LCAKKyAgICAyNDcsIDIyNiwgNjcsIDI0MywgMjA5LCAyNDQsIDE1OCwgNjcsIDIyMCwgMiwgMjQ0LCAxNTgsIDgzLCAyMjAsIDIsIDI0NCwgCisgICAgMTU4LCA2NywgMjE4LCAyMzksIDIsIDIyNCwgMjUsIDI0NCwgNjEsIDIyNCwgMTY3LCAyMzAsIDE5OCwgMjMzLCAxMDMsIAorICAgIDIyNCwgMTY3LCAyMzAsIDE5OCwgMjMxLCAxMTgsIDI0NCwgMTA3LCA1MiwgMjQ1LCAxNzksIDIzMSwgMjUzLCA1MiwgMjM1LCAKKyAgICA0MSwgMjIyLCAxMzcsIDIxNSwgMTE2LCAyMjksIDE3NSwgMjI1LCAxNTQsIDI1MywgMTgzLCAyMTcsIDI0NywgMjQzLCAyOCwgCisgICAgMjUwLCAxOTEsIDIzMywgNDMsIDIxNCwgMTMxLCAyMzMsIDEwLCAyMjIsIDExMCwgMjIyLCAxODgsIDI1MCwgMTgwLCAyNTMsIAorICAgIDIxMiwgMjI1LCAxODQsIDY3LCAyNTAsIDU0LCAyMzQsIDg3LCA2NywgMjUwLCA1NCwgMjI0LCAxNTksIDY3LCAyNTAsIDU0LCAKKyAgICAyMjMsIDk3LCA2NywgMjUwLCA1NCwgMjUxLCAxNTQsIDY3LCAyNTAsIDU0LCAyMzQsIDM5LCA2NywgMjUwLCA1NCwgMjI2LCAKKyAgICAxMDUsIDgzLCAyNTAsIDU0LCAyMzQsIDg3LCA4MywgMjUwLCA1NCwgMjI0LCAxNTksIDgzLCAyNTAsIDU0LCAyMjMsIDk3LCAKKyAgICA4MywgMjUwLCA1NCwgMjUxLCAxNTQsIDgzLCAyNTAsIDU0LCAyMzQsIDM5LCA4MywgMjUwLCA1NCwgMjI2LCAxMDUsIDgzLCAKKyAgICAyMTksIDIwNCwgMjE4LCAyNTEsIDY3LCAyNDEsIDIxMiwgMjE4LCAyNTEsIDY3LCAyNDcsIDIwMSwgMjE4LCAyNTEsIDgzLCAKKyAgICAyNDksIDE4MiwgMjE4LCAyNTEsIDY3LCAyMTksIDIwNCwgMjE4LCAyNTEsIDgzLCAyNDEsIDIxMiwgMjE4LCAyNTEsIDgzLCAKKyAgICAyNDcsIDIwMSwgMjE4LCAyNTEsIDY3LCAyNDksIDE4MiwgMjE4LCAyNTEsIDI0MCwgMjMwLCAyMTksIDE3MCwgMjI0LCAxNjcsIAorICAgIDIyOCwgMTU4LCAyNDUsIDE0NiwgMjI4LCAxNTgsIDI1MSwgMjQ5LCAyNDUsIDE0NiwgMjI4LCAxNTMsIDI1MSwgMjQ5LCAKKyAgICAyMjAsIDQ2LCAyMjgsIDE1MywgMjMwLCAxMjcsIDI0NCwgMzUsIDUyLCAyMzAsIDEyNywgMjMwLCA5LCA1MiwgMjMwLCAxMjcsIAorICAgIDIyMCwgMjU1LCA1MiwgMjEzLCAyNTAsIDE3NSwgMjQ5LCA3MCwgMjQ1LCAxNzYsIDE3NSwgMjQ5LCA3MCwgMjE1LCAxNDIsIAorICAgIDIyNCwgNSwgODcsIDIyNCwgNSwgMTYsIDMxLCAyMTYsIDE0LCAyMjUsIDE2NiwgMjI0LCA1LCAxNiwgMzEsIDIxNiwgMTMsIAorICAgIDIyNSwgMTY2LCAyMjQsIDUsIDE2LCAzMSwgMjE2LCAxMiwgMjI1LCAxNjYsIDIyNCwgNSwgMTYsIDMxLCAyMTYsIDExLCAKKyAgICAyMjUsIDE2NiwgMjI0LCA1LCAxNiwgMzEsIDIxNiwgMTAsIDIyNSwgMTY2LCAyMjQsIDUsIDE2LCAzMSwgMjE2LCA5LCAyMjUsIAorICAgIDE2NiwgMjI0LCA1LCAxNiwgMzEsIDIxNiwgOCwgMjI1LCAxNjYsIDIyNCwgNSwgMTYsIDMxLCAyNDMsIDI2LCAyMzEsIDIwMSwgCisgICAgODMsIDIxNSwgMTQyLCAyMjQsIDUsIDg3LCAyMjQsIDYsIDIyNiwgMTQ4LCA4NywgMjI2LCAxMjQsIDIyNiwgMTQ4LCA4NywgCisgICAgMjI2LCA0OSwgMjI2LCAxNDgsIDUyLCAyMTMsIDI0MCwgODcsIDI0NywgMTkzLCAyNDQsIDE1NywgMjQ3LCAxOTMsIDI0NCwgCisgICAgMTU2LCAyNDcsIDE5MywgMjQ0LCAxNTUsIDI0NywgMTkzLCAyNDQsIDE1NCwgMjQ3LCAxOTMsIDI0NCwgMTUzLCAyNDcsIAorICAgIDE5MywgMjQ0LCAxNTIsIDY3LCAyNDksIDIyOSwgMiwgNjIsIDIyMywgMTQ4LCA2NywgMjQ5LCAyMjksIDIsIDExNywgMjQ3LCAKKyAgICA3MiwgODMsIDI0OSwgMjI5LCAyLCA2NywgNjIsIDIyMywgMTQ4LCA4MywgMjQ5LCAyMjksIDIsIDExNywgNjcsIDI0NywgNzIsIAorICAgIDIzMCwgMjEyLCAzMSwgMjEzLCA1OCwgMjMwLCAyMTIsIDMxLCAyMTIsIDI0NCwgMjQ3LCAxNzYsIDMxLCAyNDIsIDEwOCwgCisgICAgMjEzLCA1OCwgMjQ3LCAxNzYsIDMxLCAyMzMsIDM3LCAyMTIsIDI0NCwgMjQ3LCAxNzYsIDMxLCAyMzMsIDM3LCAyMTMsIDU4LCAKKyAgICAyNDcsIDE3NiwgMzEsIDI0MiwgMTA4LCAyMTIsIDI0NCwgNjcsIDI0NCwgNDIsIDgzLCAyNDQsIDQyLCAyNDIsIDUsIDI0LCAKKyAgICAyMjUsIDIzNiwgMjU0LCAyOSwgMjQ5LCA2OCwgMjE4LCAxODAsIDIxOSwgMTAzLCA2NSwgMjU0LCAxMzEsIDIyMiwgMTI0LCAKKyAgICAyNTQsIDc3LCAyNDQsIDIwLCAyNDMsIDM2LCAyMTksIDEwMywgNjUsIDI0MSwgMTg3LCAyNTMsIDExNSwgODcsIDI0NCwgMzEsIAorICAgIDIyNiwgMjUwLCA2NywgMjE5LCA5NSwgMTMzLCAyMzIsIDIzNywgMjQ5LCAxMTQsIDIyMywgMTQ4LCAxMzMsIDIzMiwgMjM3LCAKKyAgICAyNDksIDExNCwgMjMzLCA3MCwgMjE0LCAzNCwgNTIsIDEyNCwgMjE0LCAxMTEsIDUyLCAyNDYsIDY0LCAyNDQsIDEwNywgNTIsIAorICAgIDI0NiwgNjQsIDIzMSwgMjUzLCA1MiwgMjM1LCAyMDAsIDI0NCwgMTA3LCAyNCwgMjMxLCAyNTMsIDUyLCAyMzEsIDI1MywgCisgICAgMjQsIDI0NCwgMTA3LCA1MiwgMjMxLCAyNTMsIDIsIDIxOSwgNDUsIDUyLCAyMzEsIDI1MywgMiwgMjE5LCA0NSwgMjQsIAorICAgIDIzMSwgMjUzLCAyNCwgMjQ0LCAxMDcsIDUyLCA3MSwgMjMxLCAyNTMsIDIsIDIxOSwgNDUsIDUyLCAxOTksIDIzMSwgMjUzLCAKKyAgICAyLCAyMTksIDQ1LCA1MiwgMjMxLCAxNDcsIDY3LCAyNDksIDIyOCwgMjMxLCAxNDcsIDgzLCAyNDksIDIyOCwgMjMxLCAxNDcsIAorICAgIDMsIDY3LCAyNDksIDIyOCwgMjMxLCAyMTYsIDg3LCAyNDcsIDExOSwgODcsIDIxNSwgMTQwLCAyMjYsIDEyMywgODcsIDI0OSwgCisgICAgMTY5LCAyNDMsIDE5NiwgMjE1LCAxMTIsIDIyOSwgMTcwLCAyNTAsIDk1LCAyMjYsIDE4OCwgMjM1LCA0NywgMjE0LCAxNjIsIAorICAgIDI1MCwgMzAsIDgzLCAyMzAsIDE5OSwgMjMyLCAyNTMsIDIyMSwgMzMsIDIyMSwgNjcsIDIyNCwgMTUwLCAyMjEsIDUxLCAKKyAgICAyMTksIDIzOSwgMjUyLCA3OCwgMjUyLCA0NiwgOTEsIDIzNCwgMTQ0LCA2NywgMjQ2LCA0OCwgMjMxLCAyNDgsIDY3LCAyNDYsIAorICAgIDQ4LCAyMzQsIDg3LCA4MywgMjQ2LCA0OCwgMjMxLCAyNDgsIDgzLCAyNDYsIDQ4LCAyMzQsIDg3LCAyMTksIDI0NSwgMjEzLCAKKyAgICAyMTYsIDIxOSwgMjQ4LCAyMTgsIDIzOSwgMjUxLCAyMjcsIDI0OSwgMTg0LCAyMjQsIDUwLCA4MywgMjE5LCAyNDQsIDIxNywgCisgICAgODgsIDI0OSwgMTg1LCAyNCwgMjI0LCA1MCwgMjE2LCA1OCwgNjcsIDIyMCwgMTgyLCAyMjUsIDIzMywgMjE2LCA1OCwgODMsIAorICAgIDIyMCwgMTgyLCAyMjUsIDIzMywgNjcsIDI0NywgMjAxLCAyMzUsIDI1MiwgMjE5LCAxNjYsIDI0OSwgNjUsIDIzMywgMTE1LCAKKyAgICAyNDcsIDE0NSwgMjUwLCAxNzYsIDIyNywgMzIsIDIyNSwgMjM2LCAyNTAsIDE3NywgMjIwLCAxNiwgMjQxLCAxOTYsIDIsIAorICAgIDY3LCAyNDksIDcwLCAzNiwgMjQ5LCA2NSwgMjMzLCAxMTUsIDI1MCwgODgsIDIyOCwgMTg2LCAyNDUsIDgzLCAyNTQsIDUwLCAKKyAgICAyMjcsIDU3LCA0MiwgMjE0LCAxMCwgMjE2LCAyMDgsIDgzLCAyMTYsIDIxLCA0MiwgMjE0LCAxMCwgMjE2LCAyMDgsIDY3LCAKKyAgICAyMTYsIDIxLCA0MiwgMjE0LCAxMCwgMjE2LCAyMDgsIDgzLCA0MiwgMjMzLCAxMTYsIDIzMSwgMTE3LCA2NywgNDIsIDIzMywgCisgICAgMTE2LCAyMzEsIDExNywgMjQ2LCA0NCwgMjIwLCAxMCwgNTIsIDEwNywgNjcsIDI0NiwgNTksIDIxNiwgMTgzLCA0MiwgMjQ5LCAKKyAgICAxOTMsIDI0NSwgODMsIDkxLCAyMjIsIDE2OSwgMjQ0LCAxNDMsIDI0NywgMjA3LCAyMzUsIDI1MiwgNjcsIDI0OSwgMjI5LCAKKyAgICAyMzUsIDI1MiwgODMsIDIxOSwgMTY2LCA4MywgMjE2LCAxNTAsIDIyMywgMjEyLCA0MiwgMjQ1LCA4MiwgMjIzLCAyMTIsIAorICAgIDQyLCAyNDUsIDgxLCAyNTMsIDEyNywgMTYsIDMxLCAyMTUsIDExNiwgMTA3LCAyNDksIDIyOSwgMiwgMjE5LCA0NSwgMjQsIAorICAgIDExNywgMTc2LCA0OSwgMjI2LCA2NCwgMjIzLCAxNDUsIDIzNSwgMjAyLCAyMjYsIDY0LCAyMzMsIDY3LCAyMzUsIDIwMiwgCisgICAgMjI2LCA2NCwgMjM1LCAxOTEsIDIyNiwgNjQsIDgzLCAyNDksIDcxLCAyMjcsIDYzLCAyMjAsIDIwOSwgMjIwLCAxOTcsIAorICAgIDIyMCwgMTU0LCAyNDksIDI1NCwgMjUwLCAxNTgsIDI0MSwgMTQzLCAyMjAsIDU0LCAyNDMsIDM3LCAyMTMsIDIxNiwgMjQwLCAKKyAgICAyMTAsIDI0MywgMzcsIDIsIDI0MSwgMjUxLCAyMzEsIDIzNiwgMTYsIDMxLCAyMzMsIDEsIDIzMCwgMTg1LCAyMTUsIDE2NSwgCisgICAgMjI3LCA2MywgMjQyLCAxMDAsIDI0MywgMjM4LCAyNDQsIDQzLCAyMzUsIDI1MiwgMjQxLCA0NSwgMjQ0LCA5OCwgMjIyLCAKKyAgICAxODUsIDQxLCAyNDMsIDIzNywgMjQ5LCA5OCwgMjIwLCAzMiwgMjQwLCAxMDUsIDIyMCwgMzUsIDIyNiwgNDQsIDIsIDI1MiwgCisgICAgNzgsIDIxNywgMTk1LCAyMzUsIDEzMSwgMjUyLCA2NSwgODcsIDI0MSwgMjE1LCAyNDIsIDExMCwgODcsIDI0MywgMjAzLCAKKyAgICAyMjUsIDI4LCAyNDksIDQ0LCAyMjcsIDYzLCA4MywgMjE5LCAxNjYsIDY3LCAyNDQsIDQzLCAyLCAxOTksIDIzMSwgMzcsIAorICAgIDgzLCAyMTksIDQ2LCAyMTUsIDEzMSwgMjUxLCAxNDAsIDIyMiwgMTEyLCA4MywgMjIyLCAxMTIsIDIzMiwgMTYzLCAyNTEsIAorICAgIDE0MCwgMjIyLCAxMTIsIDY3LCAyMjIsIDExMiwgNjcsIDEwNywgMjUwLCA2NiwgNzcsIDIxNywgMjEwLCAyMzIsIDIwNiwgCisgICAgNTIsIDIxOCwgNCwgMjQ2LCA0MywgMjU0LCA5OSwgMjQ1LCA3OCwgMjI0LCA0OCwgMjQ0LCA1NCwgMjI0LCA0OCwgMjQxLCAKKyAgICAyNTQsIDIxNCwgMTUyLCAyNDEsIDI1NCwgMjEzLCAxODYsIDI0MSwgMjU0LCAyMzIsIDE2MywgNDYsIDIyNiwgNzMsIDIyNiwgCisgICAgNzMsIDIxNSwgMTMxLCA0NiwgMjI2LCA3MywgNjcsIDIyOSwgNjEsIDgzLCAyMjksIDYxLCAyNTAsIDY2LCA3NywgMTA3LCAKKyAgICAyNTAsIDY2LCA3NywgMjMwLCAxNTQsIDIxMywgMTY2LCAxMDcsIDIzMCwgMTU0LCAyMTMsIDE2NiwgMjUyLCA3NSwgMjEzLCAKKyAgICAxNjYsIDEwNywgMjUyLCA3NSwgMjEzLCAxNjYsIDIyNiwgMjUwLCAyNSwgMjQ5LCA3MCwgMTA3LCAyNSwgMjQ5LCA3MCwgCisgICAgMjI3LCA0MCwgMjUwLCAxMDksIDI0OSwgNzAsIDEwNywgMjI3LCA0MCwgMjUwLCAxMDksIDI0OSwgNzAsIDcsIDI0OSwgNzAsIAorICAgIDIyMSwgMTMsIDY3LCA3LCAyNDksIDcwLCAyMjYsIDI1MCwgNywgMjQ5LCA3MCwgMjMxLCAyNTAsIDI0OSwgNzAsIDIxOSwgCisgICAgOTYsIDY1LCAyNDgsIDk1LCAyNDMsIDIzNywgMjE3LCAyMjMsIDI1MywgMTMyLCAyNDMsIDIzNywgMjUyLCA3NiwgMjUzLCAKKyAgICAxMzIsIDEwNywgMjQzLCAyMzcsIDI1MiwgNzYsIDI1MywgMTMyLCAyNDMsIDIzNywgMjQ5LCAxODAsIDI1MywgMTMyLCA4MywgCisgICAgMjQzLCAyMzcsIDIyNSwgMTQzLCAyMTksIDk1LCA2NywgMjQzLCAyMzcsIDIyNSwgMTQzLCAyMTksIDk1LCAyMTksIDE5OSwgCisgICAgMjE5LCA1MSwgMjI2LCAyNTAsIDY3LCAyMTksIDk1LCAzNiwgNjcsIDIxOSwgOTUsIDIyNywgNDAsIDI1MCwgMTA5LCA4MywgCisgICAgMjE5LCA5NSwgODMsIDI1MCwgMTA5LCA2NywgMjE5LCA5NSwgMjI2LCAyNTAsIDgzLCAyMTksIDk1LCAxMDcsIDIyNiwgMjUwLCAKKyAgICA4MywgMjE5LCA5NSwgMjI1LCAxOTIsIDIxOSwgOTUsIDIyMSwgMTMsIDY3LCAyMTksIDk1LCAxMDcsIDI1MywgMTMyLCAyMjcsIAorICAgIDQwLCAyNTAsIDEwOSwgMjUzLCAxMzIsIDI0NSwgMTUwLCAyMTksIDE3NiwgMjUzLCAxMzIsIDI0NSwgMTUwLCAyMjUsIDE0MywgCisgICAgODMsIDIxOSwgOTUsIDI0NSwgMTUwLCAyMjUsIDE0MywgMjI1LCAxOTIsIDIxOSwgOTUsIDIyMCwgNTMsIDIyNSwgMTQzLCAKKyAgICA4MywgMjE5LCA5NSwgMjQ1LCAxNTAsIDIyNSwgMTQzLCAyMjQsIDcsIDgzLCAyMTksIDk1LCAxMDcsIDI0NSwgMTUwLCAyMjUsIAorICAgIDE0MywgMjI0LCA3LCA4MywgMjE5LCA5NSwgMjE2LCA0MiwgMjI1LCAxNDMsIDgzLCAyMTksIDk1LCAyMjAsIDQ4LCAyMjUsIAorICAgIDE0MywgMjUzLCAxMzIsIDIxNywgMjIzLCAyNTMsIDEzMiwgMjI3LCA0MCwgMjUwLCAxMDksIDIxNywgMjIzLCAyNTMsIDEzMiwgCisgICAgMTA3LCAyMTcsIDIyMywgMjUzLCAxMzIsIDIyMCwgNTMsIDIyNiwgMzMsIDgzLCAyNCwgNjcsIDI0NCwgMjMsIDgzLCAyNDQsIAorICAgIDIzLCA2NywgMjQ0LCAyMywgMjQ1LCAxNTAsIDIyNiwgMzMsIDIyNiwgMjUwLCA4MywgMjQ0LCAyMywgMzYsIDIyNywgNDAsIAorICAgIDI1MCwgMTA5LCAyNDUsIDE1MCwgMjI1LCAxNDMsIDIxOSwgOTUsIDEwNywgMjE3LCAyMjMsIDIyNSwgMTkyLCAyNTMsIDEzMiwgCisgICAgMjE5LCAyNDYsIDIxNywgNTksIDIxNiwgMTc2LCAyMTksIDI0NiwgMTA3LCAyNTAsIDUxLCAyMTksIDI0NiwgMjE5LCAyMDEsIAorICAgIDEwNywgMjE5LCAyMDEsIDI1MiwgNzYsIDI1MywgMTMyLCAyNDUsIDE1MCwgMjE3LCAyMjMsIDIyNSwgNTUsIDI1MywgMTMyLCAKKyAgICAxMDcsIDI0NSwgMTUwLCAyMTcsIDIyMywgMjI1LCA1NSwgMjUzLCAxMzIsIDI0OSwgNzEsIDc3LCAyMjEsIDEzLCA2NywgCisgICAgMjQ5LCAyMjgsIDE0NiwgOTEsIDI0OSwgNzEsIDc3LCAyMzIsIDE2MywgNDYsIDI0NiwgNDEsIDY3LCAyMTksIDE2NiwgMjE1LCAKKyAgICAxMzEsIDQ2LCAyNDYsIDQxLCA2NywgMjE5LCAxNjYsIDIzMiwgMTYzLCA0NiwgMjIxLCAxMywgNjcsIDIxOSwgMTY2LCAyMTUsIAorICAgIDEzMSwgNDYsIDIyMSwgMTMsIDY3LCAyMTksIDE2NiwgODMsIDIyNCwgMTU4LCAxNTIsIDIyNywgMTQsIDY3LCAyMjQsIDE1OCwgCisgICAgMTUyLCAyMjcsIDE0LCA2NywgMjQ0LCAyNTQsIDE1MiwgMjI3LCAxNCwgODMsIDI0NywgMjAxLCAyMzAsIDI1MSwgNjcsIAorICAgIDIxMywgMTY2LCAxMDcsIDI0NCwgMjU0LCAxNTIsIDg3LCAxNzcsIDcxLCAxMzQsIDIzMSwgMTQ3LCA3MSwgMTM0LCAxMDcsIAorICAgIDcxLCAxMzQsIDEwNywgMjIwLCA4MSwgMjE2LCA1OCwgMjQ5LCAxNTgsIDIyNCwgMTQzLCAxNTIsIDIyNywgMTQsIDEwNywgCisgICAgMjIwLCA4MSwgMjQ5LCAxNTgsIDIyNCwgMTQzLCAxNTIsIDIyNywgMTQsIDEwNywgNTEsIDIxNiwgNTgsIDI0OSwgMTU4LCAKKyAgICAyMjQsIDE0MywgMTUyLCAyMjcsIDE0LCAxMDcsIDUxLCAyNDksIDE1OCwgMjI0LCAxNDMsIDE1MiwgMjI3LCAxNCwgMTA3LCAKKyAgICAxMTUsIDIyMCwgODEsIDI0OSwgMTU4LCAyMjQsIDE0MywgMTUyLCAyMjcsIDE0LCAxMDcsIDExNSwgNTEsIDI0OSwgMTU4LCAKKyAgICAyMjQsIDE0MywgMTUyLCAyMjcsIDE0LCAyNDksIDMzLCAyMTksIDgwLCAyMjYsIDE0MywgNSwgMjI3LCAxNCwgMTA3LCAyNDQsIAorICAgIDI1NCwgMTUyLCAyMjcsIDE0LCAxMDcsIDI0MSwgMjEyLCAyNDQsIDI1NCwgMTUyLCAyMjcsIDE0LCAxMDcsIDgzLCAyNDEsIAorICAgIDIxMSwgMjIzLCA4OSwgMTA3LCA4MywgMjQxLCAyMTIsIDI1MSwgNDIsIDI0NCwgMjQsIDI0MSwgMjExLCAyMjMsIDg5LCAKKyAgICAyNDQsIDI0LCAyNDEsIDIxMiwgMjUxLCA0MiwgMjMxLCAxNDcsIDQyLCAyMjYsIDEzMiwgMjI3LCAxNCwgMjMxLCAxNDcsIAorICAgIDQ2LCAyMjYsIDEzMiwgMjI3LCAxNCwgMjMxLCAxNDcsIDI0NCwgMzIsIDQyLCAyMjYsIDEzMiwgMjI3LCAxNCwgMjMxLCAKKyAgICAxNDcsIDI0NCwgMzIsIDQ2LCAyMjYsIDEzMiwgMjI3LCAxNCwgMjMxLCAxNDcsIDIzMywgNjYsIDI1NCwgMTksIDI1MSwgODUsIAorICAgIDIyNywgMTQsIDIzMSwgMTQ3LCAyMjMsIDE0NCwgMjU0LCAxOSwgMjUxLCA4NSwgMjI3LCAxNCwgMTA3LCAyMzMsIDY2LCAKKyAgICAyNTQsIDE5LCAyMjQsIDE0MywgMTUyLCAyMjcsIDE0LCAxMDcsIDIyMywgMTQ0LCAyNTQsIDE5LCAyMjQsIDE0MywgMTUyLCAKKyAgICAyMjcsIDE0LCAxMDcsIDIzMywgNjYsIDI1NCwgMTksIDI1MSwgODUsIDIyNywgMTQsIDEwNywgMjIzLCAxNDQsIDI1NCwgMTksIAorICAgIDI1MSwgODUsIDIyNywgMTQsIDE3NywgNDIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NSwgMjI3LCAxNCwgMTc3LCA0NiwgCisgICAgMjE2LCAyMTksIDIyMCwgMjMzLCAyNTEsIDg1LCAyMjcsIDE0LCAyMzEsIDE0NywgNDIsIDI0OSwgNDAsIDI1MSwgODUsIAorICAgIDIyNywgMTQsIDIzMSwgMTQ3LCA0NiwgMjQ5LCA0MCwgMjUxLCA4NSwgMjI3LCAxNCwgMjQ3LCAxNTYsIDE0NiwgMzYsIDIxLCAKKyAgICAxMTYsIDI0NywgMTU2LCAxNDYsIDM2LCAyMSwgMTA5LCAyNDcsIDE1NiwgMTQ2LCAzNiwgMjEsIDE2NiwgMjQ3LCAxNTYsIAorICAgIDE0NiwgMzYsIDIxLCAxNjMsIDI0NywgMTU2LCAxNDYsIDM2LCAyMSwgMTgwLCAyNDcsIDE1NiwgMTQ2LCAzNiwgMjEsIDE4OSwgCisgICAgMjQ3LCAxNTYsIDE0NiwgMzYsIDIxLCAxOTgsIDI0NywgMTU2LCAxNDYsIDM2LCAyMSwgMTk1LCAyNDcsIDE1NiwgMTQ2LCAKKyAgICAzNiwgMjEsIDIwMCwgMjQ3LCAxNTYsIDE0NiwgMzYsIDUwLCAyMTcsIDIwMCwgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDExNiwgCisgICAgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDEwOSwgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDE2NiwgMjQ3LCAxNTYsIDM2LCAzNSwgCisgICAgMjEsIDE2MywgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDE4MCwgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDE4OSwgMjQ3LCAxNTYsIAorICAgIDM2LCAzNSwgMjEsIDE5OCwgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDE5NSwgMjQ3LCAxNTYsIDM2LCAzNSwgMjEsIDIwMCwgCisgICAgMjQ3LCAxNTYsIDM2LCAzNSwgNTAsIDIxNywgMjAwLCAyNDcsIDE1NiwgMTQ2LCAzNiwgMzUsIDIxLCAxMTYsIDI0NywgMTU2LCAKKyAgICAxNDYsIDM2LCAzNSwgMjEsIDEwOSwgMjQ3LCAxNTYsIDE0NiwgMzYsIDM1LCAyMSwgMTY2LCAyNDcsIDE1NiwgMTQ2LCAzNiwgCisgICAgMzUsIDIxLCAxNjMsIDI0NywgMTU2LCAxNDYsIDM2LCAzNSwgMjEsIDE4MCwgMjQ3LCAxNTYsIDE0NiwgMzYsIDM1LCAyMSwgCisgICAgMTg5LCAyNDcsIDE1NiwgMTQ2LCAzNiwgMzUsIDIxLCAxOTgsIDI0NywgMTU2LCAxNDYsIDM2LCAzNSwgMjEsIDE5NSwgMjQ3LCAKKyAgICAxNTYsIDE0NiwgMzYsIDM1LCAyMSwgMjAwLCAyNDcsIDE1NiwgMTQ2LCAzNiwgMzUsIDUwLCAyMTcsIDIwMCwgMTA3LCAyMTMsIAorICAgIDIzMSwgOTUsIDY4LCAxMDcsIDk0LCA1MiwgMTA3LCAyMzAsIDI1MSwgNTIsIDEwNywgMjQ3LCAxMjEsIDUyLCAxMDcsIDIxOSwgCisgICAgMjE1LCAyNDUsIDE3NiwgNjgsIDEwNywgOTUsIDY4LCAxMDcsIDIyOCwgMTY3LCAyNDUsIDE3NiwgNjgsIDI0NiwgNTIsIAorICAgIDIyNSwgMTQ1LCA5NSwgNjgsIDEwNywgMjIzLCA4NiwgOTUsIDY4LCAyMTYsIDE4MiwgOTUsIDY4LCAxMDcsIDIxNiwgMTgyLCAKKyAgICA5NSwgNjgsIDI0OCwgMTAwLCAyMTYsIDE4MiwgOTUsIDY4LCAxMDcsIDI0OCwgMTAwLCAyMTYsIDE4MiwgOTUsIDY4LCA4MywgCisgICAgOTUsIDY4LCAyMTcsIDk3LCAyMTYsIDIyNSwgOTUsIDI1MywgMTY0LCAyMTcsIDk3LCAyNTEsIDk5LCA5NSwgMjUzLCAxNjQsIAorICAgIDgzLCA5NSwgMjUzLCAxNjQsIDEwNywgODMsIDI0OSwgMzMsIDI0NiwgNTgsIDI0LCA5NSwgNjgsIDEwNywgODMsIDI0OSwgCisgICAgMzMsIDIxNSwgMTI0LCAyNCwgOTUsIDY4LCAyMTksIDE2MywgODMsIDk1LCA2OCwgMTA3LCAyNDksIDE0NSwgODMsIDk1LCAKKyAgICA2OCwgMjIzLCAxNDMsIDY3LCA5NSwgNjgsIDIzMywgNjUsIDY3LCA5NSwgNjgsIDI1MiwgMTAwLCAyMjEsIDEzLCA2NywgOTUsIAorICAgIDY4LCAyNDMsIDIxMSwgMjIxLCAxMywgNjcsIDk1LCA2OCwgMTA3LCAyMzIsIDE2MywgMjIzLCAxNDIsIDY3LCA5NSwgNjgsIAorICAgIDEwNywgMjE1LCAxMzEsIDIyMywgMTQyLCA2NywgOTUsIDY4LCAyMjgsIDE2MCwgMjMyLCAxNjMsIDIyMywgMTQyLCA2NywgCisgICAgOTUsIDY4LCAyNDksIDQwLCAyMzIsIDE3NywgMjI4LCAxNjAsIDIxNSwgMTMxLCAyMjMsIDE0MiwgNjcsIDk1LCA2OCwgMzYsIAorICAgIDEwNywgNjcsIDk1LCA2OCwgMjEzLCAyMzcsIDk1LCA2OCwgMjUxLCAxNDMsIDIxOSwgMjE1LCAyNDUsIDE3NiwgNjgsIDI1MSwgCisgICAgMTQzLCA5NSwgNjgsIDI1MSwgMTQzLCAyMjgsIDE2NywgMjQ1LCAxNzYsIDY4LCAxMDcsIDI1MSwgMTQzLCAyMTksIDIxNSwgCisgICAgMjQ1LCAxNzYsIDY4LCAxMDcsIDI1MSwgMTQzLCA5NSwgNjgsIDEwNywgMjUxLCAxNDMsIDIyOCwgMTY3LCAyNDUsIDE3NiwgCisgICAgNjgsIDIxNywgMjI1LCA5NSwgNjgsIDEwNywgMjE3LCAyMjQsIDk1LCA2OCwgMjE0LCAyLCA5NSwgNjgsIDEwNywgMjE0LCAyLCAKKyAgICA5NSwgNjgsIDIyNywgMzcsIDk1LCA2OCwgNTEsIDI0OSwgNDAsIDIzMiwgMTc3LCAxMzMsIDI0NywgMTY2LCAyNTQsIDE4LCAKKyAgICA2NywgMjE2LCAxODQsIDI0OSwgMTI2LCAzLCA2NywgMjE2LCAxODMsIDIyNiwgNDcsIDIyNywgNDAsIDIxOSwgOCwgMjI3LCAKKyAgICA0MCwgMjE4LCAyMjEsIDQyLCAyMjMsIDMsIDI1MiwgOTEsIDI0OCwgMTEsIDQ2LCAyMjMsIDMsIDI1MiwgOTEsIDI0OCwgMTEsIAorICAgIDE2NywgMiwgNjIsIDIzNSwgMjEyLCAyMjMsIDIwMywgMjE5LCAyMzIsIDIyNSwgODEsIDIxOSwgOCwgMjE4LCAyMjIsIDIyNSwgCisgICAgODEsIDIxOSwgMjMxLCA3MSwgMjUyLCA2MCwgMiwgMTk5LCA5MCwgMTg0LCAyNDcsIDEyMCwgOTEsIDIzMiwgMTk5LCAyNTQsIAorICAgIDI3LCA5MSwgMjMyLCAxOTksIDIyNywgMjQsIDY3LCAyNDcsIDIwMSwgMiwgMjUwLCAxMDcsIDI0NywgNzQsIDI0LCAyLCAKKyAgICAyNDcsIDc0LCAyNDUsIDEyNywgNjUsIDIyNywgMzUsIDIxNSwgMTIzLCAyMzIsIDE2MywgNDYsIDI0OSwgMTAwLCAyLCAyNDcsIAorICAgIDc0LCAyMTUsIDEzMSwgNDIsIDI0OSwgMTAwLCAyLCAyNDcsIDc0LCA0MiwgMjI2LCAyNTIsIDIzNSwgNjksIDQ2LCAyMjYsIAorICAgIDI1MiwgMjM1LCA2OSwgMjQzLCAyMDAsIDIyNiwgMjUyLCAyMzUsIDY5LCAyMzMsIDEwOCwgMTE0LCAyMTgsIDM2LCAyMzMsIAorICAgIDEwOCwgMTE5LCAyMTgsIDM2LCA0MiwgMjQsIDQ2LCA1MSwgMjE2LCA1NywgNDIsIDI0LCA0NiwgMjE4LCAzNiwgNDIsIDIzMCwgCisgICAgMTU3LCAxODQsIDQ2LCAyMTgsIDM2LCAxODQsIDQyLCAyMTgsIDM2LCAxMTQsIDIxOCwgMzcsIDIsIDI0OSwgMjI5LCA0OSwgCisgICAgMjMyLCAxNjAsIDI0NywgMTI1LCAyNTEsIDcsIDE5OSwgMjIzLCA0NCwgNjcsIDI0OSwgMTQ0LCAyNDcsIDIwMCwgNjcsIAorICAgIDI0OSwgMTQ0LCAyNDcsIDIwMSwgMiwgMTMyLCAyMTcsIDY4LCA2NywgMjQ5LCAxNDQsIDI0NywgMjAxLCAyLCA5NSwgMjE3LCAKKyAgICA2OCwgNjcsIDQxLCAyLCAxMzIsIDIxNywgNjgsIDY3LCA0MSwgMiwgOTUsIDIxNywgNjgsIDE0LCA0MiwgNjcsIDQxLCAxMjUsIAorICAgIDE0LCA0NiwgNjcsIDQxLCAxMjUsIDE0LCA0MiwgMjU0LCAxOSwgMTI1LCAxNCwgNDYsIDI1NCwgMTksIDEyNSwgMTQsIDQyLCAKKyAgICA1MSwgMjU0LCAxOSwgMTI1LCAxNCwgNDYsIDUxLCAyNTQsIDE5LCAxMjUsIDE0LCA0MiwgNjcsIDIxNiwgMjE5LCAyMjAsIAorICAgIDIzMywgMTI1LCAxNCwgNDYsIDY3LCAyMTYsIDIxOSwgMjIwLCAyMzMsIDEyNSwgMTQsIDQyLCAyNDQsIDMyLCAyMjYsIDEzMSwgCisgICAgMTQsIDQ2LCAyNDQsIDMyLCAyMjYsIDEzMSwgMjE1LCAxMjQsIDIyNCwgMTY5LCA2OCwgMjQ2LCA1OCwgMjI0LCAxNjksIDY4LCAKKyAgICAyNTMsIDI1NSwgMjQzLCA3NCwgMjQ5LCAyMjksIDY4LCAyNDksIDE5NSwgMjQzLCA3NCwgMjQ5LCAyMjksIDY4LCA0NiwgNzYsIAorICAgIDIsIDM2LCAyMjUsIDE1NiwgMTg0LCAxMzIsIDY4LCAxODQsIDk1LCA2OCwgMTg0LCA0MiwgNDYsIDY4LCAxODQsIDEzMiwgCisgICAgNTEsIDY4LCAxODQsIDk1LCA1MSwgNjgsIDE4NCwgNDIsIDQ2LCA1MSwgNjgsIDE4NCwgMTMyLCA3NiwgMjQzLCAyMTMsIAorICAgIDEzNCwgMTg0LCA5NSwgNzYsIDI0MywgMjEzLCAxMzQsIDE4NCwgMTMyLCA1MSwgNzYsIDI0MywgMjEzLCAxMzQsIDE4NCwgCisgICAgOTUsIDUxLCA3NiwgMjQzLCAyMTMsIDEzNCwgMTg0LCA5NSwgMjE5LCAxNjIsIDY4LCA0NCwgNDUsIDI1MSwgMTM4LCA0NCwgCisgICAgNDUsIDI0NywgNzEsIDQ0LCA0NSwgMjQ2LCAxOTksIDQ0LCA0NSwgMjQ3LCA3MCwgNDQsIDQ1LCAyNDYsIDEzNSwgNDQsIDQ1LCAKKyAgICAyNDcsIDYsIDQ0LCA0NSwgMjQ2LCAxOTgsIDQ0LCA0NSwgMjQ3LCA2OSwgNDQsIDQ1LCAyNDYsIDEwMywgNDQsIDQ1LCAyNDYsIAorICAgIDIzMCwgNDQsIDQ1LCAyNDYsIDE2NiwgNDQsIDQ1LCAyNDcsIDM3LCA0NCwgNDUsIDI0NiwgMTM0LCA0NCwgNDUsIDI0NywgNSwgCisgICAgNDQsIDQ1LCAyNDYsIDE5NywgNDQsIDQ1LCAyNDcsIDY4LCA0NCwgNDUsIDI0NiwgODcsIDQ0LCA0NSwgMjQ2LCAyMTQsIDQ0LCAKKyAgICA0NSwgMjQ2LCAxNTAsIDQ0LCA0NSwgMjQ3LCAyMSwgNDQsIDQ1LCAyNDYsIDExOCwgNDQsIDQ1LCAyNDYsIDI0NSwgNDQsIAorICAgIDQ1LCAyNDYsIDE4MSwgNDQsIDQ1LCAyNDcsIDUyLCA0NCwgNDUsIDI0NiwgMTAyLCA0NCwgNDUsIDI0NiwgMjI5LCA0NCwgCisgICAgNDUsIDI0NiwgMTY1LCA0NCwgNDUsIDI0NywgMzYsIDQ0LCA0NSwgMjQ2LCAxMzMsIDQ0LCA0NSwgMjQ3LCA0LCA0NCwgNDUsIAorICAgIDI0NiwgMTk2LCA0NCwgNDUsIDI0NywgNjcsIDQ0LCA0NSwgMjQ2LCA3OSwgNDQsIDQ1LCAyNDYsIDIwNiwgNDQsIDQ1LCAKKyAgICAyNDYsIDE0MiwgNDQsIDQ1LCAyNDcsIDEzLCA0NCwgNDUsIDI0NiwgMTEwLCA0NCwgNDUsIDI0NiwgMjM3LCA0NCwgNDUsIAorICAgIDI0NiwgMTczLCA0NCwgNDUsIDI0NywgNDQsIDQ0LCA0NSwgMjQ2LCA5NCwgNDQsIDQ1LCAyNDYsIDIyMSwgNDQsIDQ1LCAKKyAgICAyNDYsIDE1NywgNDQsIDQ1LCAyNDcsIDI4LCA0NCwgNDUsIDI0NiwgMTI1LCA0NCwgNDUsIDI0NiwgMjUyLCA0NCwgNDUsIAorICAgIDI0NiwgMTg4LCA0NCwgNDUsIDI0NywgNTksIDQ0LCA0NSwgMjQ2LCA4NiwgNDQsIDQ1LCAyNDYsIDIxMywgNDQsIDQ1LCAKKyAgICAyNDYsIDE0OSwgNDQsIDQ1LCAyNDcsIDIwLCA0NCwgNDUsIDI0NiwgMTE3LCA0NCwgNDUsIDI0NiwgMjQ0LCA0NCwgNDUsIAorICAgIDI0NiwgMTgwLCA0NCwgNDUsIDI0NywgNTEsIDQ0LCA0NSwgMjQ2LCAxMDEsIDQ0LCA0NSwgMjQ2LCAyMjgsIDQ0LCA0NSwgCisgICAgMjQ2LCAxNjQsIDQ0LCA0NSwgMjQ3LCAzNSwgNDQsIDQ1LCAyNDYsIDEzMiwgNDQsIDQ1LCAyNDcsIDMsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxOTUsIDQ0LCA0NSwgMjQ3LCA2NiwgNDQsIDQ1LCAyNDYsIDc1LCA0NCwgNDUsIDI0NiwgMjAyLCA0NCwgNDUsIDI0NiwgCisgICAgMTM4LCA0NCwgNDUsIDI0NywgOSwgNDQsIDQ1LCAyNDYsIDEwNiwgNDQsIDQ1LCAyNDYsIDIzMywgNDQsIDQ1LCAyNDYsIAorICAgIDE2OSwgNDQsIDQ1LCAyNDcsIDQwLCA0NCwgNDUsIDI0NiwgOTAsIDQ0LCA0NSwgMjQ2LCAyMTcsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNTMsIDQ0LCA0NSwgMjQ3LCAyNCwgNDQsIDQ1LCAyNDYsIDEyMSwgNDQsIDQ1LCAyNDYsIDI0OCwgNDQsIDQ1LCAyNDYsIAorICAgIDE4NCwgNDQsIDQ1LCAyNDcsIDU1LCA0NCwgNDUsIDI0NiwgODIsIDQ0LCA0NSwgMjQ2LCAyMDksIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNDUsIDQ0LCA0NSwgMjQ3LCAxNiwgNDQsIDQ1LCAyNDYsIDExMywgNDQsIDQ1LCAyNDYsIDI0MCwgNDQsIDQ1LCAyNDYsIAorICAgIDE3NiwgNDQsIDQ1LCAyNDcsIDQ3LCA0NCwgNDUsIDI0NiwgOTcsIDQ0LCA0NSwgMjQ2LCAyMjQsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNjAsIDQ0LCA0NSwgMjQ3LCAzMSwgNDQsIDQ1LCAyNDYsIDEyOCwgNDQsIDQ1LCAyNDYsIDI1NSwgNDQsIDQ1LCAyNDYsIAorICAgIDE5MSwgNDQsIDQ1LCAyNDcsIDYyLCA0NCwgNDUsIDI0NiwgNzgsIDQ0LCA0NSwgMjQ2LCAyMDUsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNDEsIDQ0LCA0NSwgMjQ3LCAxMiwgNDQsIDQ1LCAyNDYsIDEwOSwgNDQsIDQ1LCAyNDYsIDIzNiwgNDQsIDQ1LCAyNDYsIAorICAgIDE3MiwgNDQsIDQ1LCAyNDcsIDQzLCA0NCwgNDUsIDI0NiwgOTMsIDQ0LCA0NSwgMjQ2LCAyMjAsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNTYsIDQ0LCA0NSwgMjQ3LCAyNywgNDQsIDQ1LCAyNDYsIDEyNCwgNDQsIDQ1LCAyNDYsIDI1MSwgNDQsIDQ1LCAyNDYsIAorICAgIDE4NywgNDQsIDQ1LCAyNDcsIDU4LCA0NCwgNDUsIDI0NiwgODUsIDQ0LCA0NSwgMjQ2LCAyMTIsIDQ0LCA0NSwgMjQ2LCAKKyAgICAxNDgsIDQ0LCA0NSwgMjQ3LCAxOSwgNDQsIDQ1LCAyNDYsIDExNiwgNDQsIDQ1LCAyNDYsIDI0MywgNDQsIDQ1LCAyNDYsIAorICAgIDE3OSwgNDQsIDQ1LCAyNDcsIDUwLCA0NCwgNDUsIDI0NiwgMTAwLCA0NCwgNDUsIDI0NiwgMjI3LCA0NCwgNDUsIDI0NiwgCisgICAgMTYzLCA0NCwgNDUsIDI0NywgMzQsIDQ0LCA0NSwgMjQ2LCAxMzEsIDQ0LCA0NSwgMjQ3LCAyLCA0NCwgNDUsIDI0NiwgMTk0LCAKKyAgICA0NCwgNDUsIDI0NywgNjUsIDQ0LCA0NSwgMjQ2LCA3MywgNDQsIDQ1LCAyNDYsIDIwMCwgNDQsIDQ1LCAyNDYsIDEzNiwgNDQsIAorICAgIDQ1LCAyNDcsIDcsIDQ0LCA0NSwgMjQ2LCAxMDQsIDQ0LCA0NSwgMjQ2LCAyMzEsIDQ0LCA0NSwgMjQ2LCAxNjcsIDQ0LCA0NSwgCisgICAgMjQ3LCAzOCwgNDQsIDQ1LCAyNDYsIDg4LCA0NCwgNDUsIDI0NiwgMjE1LCA0NCwgNDUsIDI0NiwgMTUxLCA0NCwgNDUsIAorICAgIDI0NywgMjIsIDQ0LCA0NSwgMjQ2LCAxMTksIDQ0LCA0NSwgMjQ2LCAyNDYsIDQ0LCA0NSwgMjQ2LCAxODIsIDQ0LCA0NSwgCisgICAgMjQ3LCA1MywgNDQsIDQ1LCAyNDYsIDgwLCA0NCwgNDUsIDI0NiwgMjA3LCA0NCwgNDUsIDI0NiwgMTQzLCA0NCwgNDUsIAorICAgIDI0NywgMTQsIDQ0LCA0NSwgMjQ2LCAxMTEsIDQ0LCA0NSwgMjQ2LCAyMzgsIDQ0LCA0NSwgMjQ2LCAxNzQsIDQ0LCA0NSwgCisgICAgMjQ3LCA0NSwgNDQsIDQ1LCAyNDYsIDk1LCA0NCwgNDUsIDI0NiwgMjIyLCA0NCwgNDUsIDI0NiwgMTU4LCA0NCwgNDUsIAorICAgIDI0NywgMjksIDQ0LCA0NSwgMjQ2LCAxMjYsIDQ0LCA0NSwgMjQ2LCAyNTMsIDQ0LCA0NSwgMjQ2LCAxODksIDQ0LCA0NSwgCisgICAgMjQ3LCA2MCwgNDQsIDQ1LCAyNDYsIDc2LCA0NCwgNDUsIDI0NiwgMjAzLCA0NCwgNDUsIDI0NiwgMTM5LCA0NCwgNDUsIAorICAgIDI0NywgMTAsIDQ0LCA0NSwgMjQ2LCAxMDcsIDQ0LCA0NSwgMjQ2LCAyMzQsIDQ0LCA0NSwgMjQ2LCAxNzAsIDQ0LCA0NSwgCisgICAgMjQ3LCA0MSwgNDQsIDQ1LCAyNDYsIDkxLCA0NCwgNDUsIDI0NiwgMjE4LCA0NCwgNDUsIDI0NiwgMTU0LCA0NCwgNDUsIAorICAgIDI0NywgMjUsIDQ0LCA0NSwgMjQ2LCAxMjIsIDQ0LCA0NSwgMjQ2LCAyNDksIDQ0LCA0NSwgMjQ2LCAxODUsIDQ0LCA0NSwgCisgICAgMjQ3LCA1NiwgNDQsIDQ1LCAyNDYsIDgzLCA0NCwgNDUsIDI0NiwgMjEwLCA0NCwgNDUsIDI0NiwgMTQ2LCA0NCwgNDUsIAorICAgIDI0NywgMTcsIDQ0LCA0NSwgMjQ2LCAxMTQsIDQ0LCA0NSwgMjQ2LCAyNDEsIDQ0LCA0NSwgMjQ2LCAxNzcsIDQ0LCA0NSwgCisgICAgMjQ3LCA0OCwgNDQsIDQ1LCAyNDYsIDk4LCA0NCwgNDUsIDI0NiwgMjI1LCA0NCwgNDUsIDI0NiwgMTYxLCA0NCwgNDUsIAorICAgIDI0NywgMzIsIDQ0LCA0NSwgMjQ2LCAxMjksIDQ0LCA0NSwgMjQ3LCAwLCA0NCwgNDUsIDI0NiwgMTkyLCA0NCwgNDUsIDI0NywgCisgICAgNjMsIDQ0LCA0NSwgMjQ2LCA3NCwgNDQsIDQ1LCAyNDYsIDIwMSwgNDQsIDQ1LCAyNDYsIDEzNywgNDQsIDQ1LCAyNDcsIDgsIAorICAgIDQ0LCA0NSwgMjQ2LCAxMDUsIDQ0LCA0NSwgMjQ2LCAyMzIsIDQ0LCA0NSwgMjQ2LCAxNjgsIDQ0LCA0NSwgMjQ3LCAzOSwgCisgICAgNDQsIDQ1LCAyNDYsIDg5LCA0NCwgNDUsIDI0NiwgMjE2LCA0NCwgNDUsIDI0NiwgMTUyLCA0NCwgNDUsIDI0NywgMjMsIDQ0LCAKKyAgICA0NSwgMjQ2LCAxMjAsIDQ0LCA0NSwgMjQ2LCAyNDcsIDQ0LCA0NSwgMjQ2LCAxODMsIDQ0LCA0NSwgMjQ3LCA1NCwgNDQsIAorICAgIDQ1LCAyNDYsIDgxLCA0NCwgNDUsIDI0NiwgMjA4LCA0NCwgNDUsIDI0NiwgMTQ0LCA0NCwgNDUsIDI0NywgMTUsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMTIsIDQ0LCA0NSwgMjQ2LCAyMzksIDQ0LCA0NSwgMjQ2LCAxNzUsIDQ0LCA0NSwgMjQ3LCA0NiwgNDQsIDQ1LCAKKyAgICAyNDYsIDk2LCA0NCwgNDUsIDI0NiwgMjIzLCA0NCwgNDUsIDI0NiwgMTU5LCA0NCwgNDUsIDI0NywgMzAsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMjcsIDQ0LCA0NSwgMjQ2LCAyNTQsIDQ0LCA0NSwgMjQ2LCAxOTAsIDQ0LCA0NSwgMjQ3LCA2MSwgNDQsIDQ1LCAKKyAgICAyNDYsIDc3LCA0NCwgNDUsIDI0NiwgMjA0LCA0NCwgNDUsIDI0NiwgMTQwLCA0NCwgNDUsIDI0NywgMTEsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMDgsIDQ0LCA0NSwgMjQ2LCAyMzUsIDQ0LCA0NSwgMjQ2LCAxNzEsIDQ0LCA0NSwgMjQ3LCA0MiwgNDQsIDQ1LCAKKyAgICAyNDYsIDkyLCA0NCwgNDUsIDI0NiwgMjE5LCA0NCwgNDUsIDI0NiwgMTU1LCA0NCwgNDUsIDI0NywgMjYsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMjMsIDQ0LCA0NSwgMjQ2LCAyNTAsIDQ0LCA0NSwgMjQ2LCAxODYsIDQ0LCA0NSwgMjQ3LCA1NywgNDQsIDQ1LCAKKyAgICAyNDYsIDg0LCA0NCwgNDUsIDI0NiwgMjExLCA0NCwgNDUsIDI0NiwgMTQ3LCA0NCwgNDUsIDI0NywgMTgsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMTUsIDQ0LCA0NSwgMjQ2LCAyNDIsIDQ0LCA0NSwgMjQ2LCAxNzgsIDQ0LCA0NSwgMjQ3LCA0OSwgNDQsIDQ1LCAKKyAgICAyNDYsIDk5LCA0NCwgNDUsIDI0NiwgMjI2LCA0NCwgNDUsIDI0NiwgMTYyLCA0NCwgNDUsIDI0NywgMzMsIDQ0LCA0NSwgCisgICAgMjQ2LCAxMzAsIDQ0LCA0NSwgMjQ3LCAxLCA0NCwgNDUsIDI0NiwgMTkzLCA0NCwgNDUsIDI0NywgNjQsIDk1LCAyMTYsIDI0LCAKKyAgICA3NiwgMiwgNzEsIDkwLCA5NSwgMjE2LCAyNCwgNzYsIDIsIDUxLCA3MSwgOTAsIDEzMiwgNTEsIDc2LCAyLCA3MSwgOTAsIAorICAgIDk1LCA1MSwgNzYsIDIsIDcxLCA5MCwgNDIsIDQ2LCA1MSwgNzYsIDIsIDcxLCA5MCwgOTUsIDIxNiwgMjQsIDc2LCAyNDMsIAorICAgIDIxMywgMTM0LCAxMzIsIDUxLCA3NiwgMjQzLCAyMTMsIDEzNCwgOTUsIDUxLCA3NiwgMjQzLCAyMTMsIDEzNCwgMjQ2LCA1OCwgCisgICAgNzYsIDIsIDE5OSwgOTAsIDIxNSwgMTI0LCA3NiwgMiwgMTk5LCA5MCwgMjE1LCAxMjQsIDIxNiwgMTY5LCA2OCwgMjQ2LCAKKyAgICA1OCwgMjE2LCAxNjksIDY4LCAxMzIsIDUxLCAyNDgsIDEwMiwgNjgsIDk1LCA1MSwgMjQ4LCAxMDIsIDY4LCAxMzIsIDIxNiwgCisgICAgMTY5LCAyNDgsIDEwMiwgNjgsIDk1LCAyMTYsIDE2OSwgMjQ4LCAxMDIsIDY4LCA5NSwgMjE2LCAyNCwgMjE2LCAxNjksIAorICAgIDI0OCwgMTAyLCA2OCwgOTUsIDc2LCAyLCAyNDYsIDcyLCAyMTksIDc5LCAyMTUsIDEyNCwgNzYsIDIxMSwgMjExLCAxMzQsIAorICAgIDI0NiwgNTgsIDc2LCAyMTEsIDIxMSwgMTM0LCA5NSwgNzYsIDIsIDIxOCwgMjgsIDIsIDcxLCA5MCwgOTUsIDc2LCAyLCAKKyAgICAyMTgsIDI4LCAyLCA1MSwgNzEsIDkwLCA5NSwgMjE2LCAyNCwgNzYsIDIsIDIxOCwgMjcsIDk1LCAyMTYsIDI0LCA3NiwgMiwgCisgICAgMjE4LCAyOCwgMiwgNzEsIDkwLCA5NSwgMjE2LCAyNCwgNzYsIDIsIDIxOCwgMjgsIDIsIDUxLCA3MSwgOTAsIDEzMiwgMjUzLCAKKyAgICAxNjYsIDk1LCAyNTMsIDE2NiwgMTMyLCA1MSwgMjUzLCAxNjYsIDk1LCA1MSwgMjUzLCAxNjYsIDEzMiwgNzYsIDIxMSwgCisgICAgMjExLCA4MywgMjQ3LCAyMDAsIDk1LCA3NiwgMjExLCAyMTEsIDgzLCAyNDcsIDIwMCwgMTMyLCA3NiwgMjQzLCAyMTMsIAorICAgIDI1MiwgNjAsIDIxMSwgMjExLCA4MywgMjQ3LCAyMDAsIDk1LCA3NiwgMjQzLCAyMTMsIDI1MiwgNjAsIDIxMSwgMjExLCA4MywgCisgICAgMjQ3LCAyMDAsIDIyOCwgMTY3LCAyMTMsIDI1MCwgMjQsIDIxOSwgMjE1LCAyNDUsIDE3NiwgNjgsIDIyOCwgMTY3LCAyNDUsIAorICAgIDE3NiwgMjQsIDIxOSwgMjE1LCAyMTMsIDI1MCwgNjgsIDIyOCwgMTY3LCAyMTMsIDI1MCwgNzYsIDIsIDEwMSwgMjI4LCAKKyAgICAxNjcsIDI0NSwgMTc2LCA3NiwgMiwgMTAxLCAyMTksIDIxNSwgMjQ1LCAxNzYsIDc2LCAyLCAxMDEsIDIxOSwgMjE1LCAyMTMsIAorICAgIDI1MCwgNzYsIDIsIDEwMSwgMjI4LCAxNjcsIDIxMywgMjUwLCA3NiwgMjQsIDIyOCwgMTY3LCAyNDUsIDE3NiwgNjgsIDIyOCwgCisgICAgMTY3LCAyNDUsIDE3NiwgNzYsIDI0LCAyMTksIDIxNSwgMjQ1LCAxNzYsIDY4LCAyMTksIDIxNSwgMjQ1LCAxNzYsIDc2LCAKKyAgICAyNCwgMjE5LCAyMTUsIDIxMywgMjUwLCA2OCwgMjE5LCAyMTUsIDIxMywgMjUwLCA3NiwgMjQsIDIyOCwgMTY3LCAyMTMsIAorICAgIDI1MCwgNjgsIDIyMywgMTI1LCAyNDcsIDIwNywgMjQ5LCA2NSwgMjQ0LCAxNDMsIDI0NywgMjA2LCAyNDQsIDE0MywgMjQ3LCAKKyAgICAyMDcsIDI0OSwgNjUsIDIyMywgMTI1LCAyNDcsIDIwNiwgMjE5LCAyMTUsIDI0NSwgMTc2LCA3NiwgMjQ5LCA2NSwgMjI4LCAKKyAgICAxNjcsIDI0NSwgMTc2LCA2OCwgMjI4LCAxNjcsIDI0NSwgMTc2LCA3NiwgMjQ5LCA2NSwgMjE5LCAyMTUsIDI0NSwgMTc2LCAKKyAgICA2OCwgMjQ0LCAxNDMsIDI0NywgMjA3LCAyNDksIDY1LCAyMjgsIDE2NywgMjQ1LCAxNzYsIDY4LCAyMjMsIDEyNSwgMjQ3LCAKKyAgICAyMDcsIDI0OSwgNjUsIDIxOSwgMjE1LCAyNDUsIDE3NiwgNjgsIDIyOCwgMTY3LCAyNDUsIDE3NiwgNzYsIDI0OSwgNjUsIAorICAgIDIyOCwgMTY3LCAyMTMsIDI1MCwgNjgsIDIyOCwgMTY3LCAyMTMsIDI1MCwgNzYsIDI0OSwgNjUsIDIyOCwgMTY3LCAyNDUsIAorICAgIDE3NiwgNjgsIDIxNCwgMjAsIDc2LCAyMjUsIDE0MSwgMjQ3LCAxNDcsIDIyMywgMTQ4LCA3NiwgMjI1LCAxNDEsIDk1LCAKKyAgICAyMTcsIDE0MSwgMjQ5LCAzMiwgMjE1LCAxMjMsIDc2LCAyMjUsIDE0MSwgOTUsIDIxNywgMTQxLCAyNDksIDMyLCAyNDYsIAorICAgIDU3LCA3NiwgMjI1LCAxNDEsIDI0NiwgNTgsIDIxNywgMTQxLCAyNDksIDMyLCAyMzMsIDYxLCA3NiwgMjI1LCAxNDEsIDI0NiwgCisgICAgNTgsIDIxNywgMTQxLCAyNDksIDMyLCAyMjMsIDEzOCwgMjIzLCAxNDEsIDI1MywgMTk2LCAyNDksIDE5NSwgNjgsIDIzMywgCisgICAgNjQsIDI1MywgMTk2LCAyNTMsIDI1NSwgNjgsIDIxNiwgMjI3LCAyNTMsIDE5NiwgMjUzLCAyNTUsIDY4LCAyNTEsIDEwMSwgCisgICAgMjUzLCAxOTYsIDI1MywgMjU1LCA2OCwgMjE2LCAyMjcsIDI1MywgMTk2LCAyNDksIDE5NSwgNzYsIDIsIDIzMCwgMjUwLCAKKyAgICAyMTYsIDIyNywgMjUzLCAxOTYsIDI1MywgMjU1LCA3NiwgMiwgMjI1LCAxNTYsIDIzMiwgMTYzLCA0NiwgMjIxLCA3MiwgCisgICAgMjQ5LCAxOTUsIDY4LCAyMzIsIDE2MywgNDIsIDIyMSwgNzIsIDI1MywgMjU1LCA2OCwgMjUzLCAyNTUsIDI0OSwgMTkzLCAKKyAgICAyNDksIDIyOSwgNjgsIDI0OSwgMTk1LCAyNDksIDE5MywgMjQ5LCAyMjksIDY4LCA5NSwgNzYsIDc4LCAyMjAsIDE3NSwgCisgICAgMTMyLCA2OCwgMTMyLCA3NiwgNzgsIDIyMCwgMTc1LCA5NSwgNjgsIDIyMCwgMTc1LCA5NSwgNzYsIDc4LCAxMzIsIDY4LCAKKyAgICA5NSwgNzYsIDIsIDk0LCA1NSwgMTMyLCA3NiwgMiwgOTQsIDU1LCA5NSwgNzYsIDIxNywgOTMsIDIxMywgMTY2LCA0MiwgNDYsIAorICAgIDc2LCAyMTcsIDkzLCAzLCAyNDksIDIyOCwgMjE1LCAxMjQsIDIxNiwgMjQsIDc2LCAyNDMsIDIxMywgMywgMjQ5LCAyMjgsIAorICAgIDQyLCAyMDYsIDExNCwgNDYsIDIwNiwgMTE5LCAyNDEsIDIzNywgNDIsIDIwNiwgMTE5LCA0NiwgMjA2LCAxMTQsIDI0MSwgCisgICAgMjM3LCAxMTQsIDIwNiwgNDYsIDExOSwgMjA2LCA0MiwgMjQxLCAyMzcsIDExNCwgMjA2LCA0MiwgMTE5LCAyMDYsIDQ2LCAKKyAgICAyNDEsIDIzNywgNDIsIDIwNiwgMTE0LCA0NiwgMjA2LCAxMTQsIDI0MSwgMjM3LCAxMTQsIDIwNiwgNDYsIDExOSwgMjA2LCAKKyAgICA0NiwgMjQxLCAyMzcsIDQyLCAyMDYsIDExOSwgNDYsIDIwNiwgMTE5LCAyNDEsIDIzNywgMTE0LCAyMDYsIDQyLCAxMTksIAorICAgIDIwNiwgNDIsIDI0MSwgMjM3LCAxMzIsIDI0MSwgMjM4LCAyLCAyMDYsIDExNCwgMjExLCAyMTEsIDEzNCwgOTUsIDI0MSwgCisgICAgMjM4LCAyLCAyMDYsIDExNCwgMjExLCAyMTEsIDEzNCwgMjE1LCAxMjQsIDI0MSwgMjM4LCAyLCAyMDYsIDQ2LCAyMTEsIAorICAgIDIxMSwgMTM0LCAyNDYsIDU4LCAyNDEsIDIzOCwgMiwgMjA2LCA0NiwgMjExLCAyMTEsIDEzNCwgMTMyLCAyNDEsIDIzOCwgMiwgCisgICAgMjA2LCAxMTksIDIxMSwgMjExLCAxMzQsIDk1LCAyNDEsIDIzOCwgMiwgMjA2LCAxMTksIDIxMSwgMjExLCAxMzQsIDIxNSwgCisgICAgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjExLCAyMTEsIDEzNCwgMjQ2LCA1OCwgMjQxLCAyMzgsIDIsIDIwNiwgNDIsIAorICAgIDIxMSwgMjExLCAxMzQsIDEzMiwgMjQxLCAyMzgsIDIsIDIwNiwgMTE0LCAyNDMsIDIxMywgMTM0LCA5NSwgMjQxLCAyMzgsIAorICAgIDIsIDIwNiwgMTE0LCAyNDMsIDIxMywgMTM0LCAyMTUsIDEyNCwgMjQxLCAyMzgsIDIsIDIwNiwgNDYsIDI0MywgMjEzLCAKKyAgICAxMzQsIDI0NiwgNTgsIDI0MSwgMjM4LCAyLCAyMDYsIDQ2LCAyNDMsIDIxMywgMTM0LCAxMzIsIDI0MSwgMjM4LCAyLCAyMDYsIAorICAgIDExOSwgMjQzLCAyMTMsIDEzNCwgOTUsIDI0MSwgMjM4LCAyLCAyMDYsIDExOSwgMjQzLCAyMTMsIDEzNCwgMjE1LCAxMjQsIAorICAgIDI0MSwgMjM4LCAyLCAyMDYsIDQyLCAyNDMsIDIxMywgMTM0LCAyNDYsIDU4LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjQzLCAKKyAgICAyMTMsIDEzNCwgMTMyLCAyNDEsIDIzOCwgMiwgMjA2LCAxMTQsIDc4LCAxMzIsIDI0MSwgMjM4LCAyLCAyMDYsIDI0NiwgNjAsIAorICAgIDIxNSwgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjUxLCAyMDcsIDIxNSwgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCAKKyAgICAyMjMsIDE0OCwgOTUsIDI0MSwgMjM4LCAyLCAyMDYsIDExNCwgNzgsIDk1LCAyNDEsIDIzOCwgMiwgMjA2LCAyNDYsIDYwLCAKKyAgICAyNDYsIDU4LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjUxLCAyMDcsIDI0NiwgNTgsIDI0MSwgMjM4LCAyLCAyMDYsIDIyMywgCisgICAgMTQ4LCAxMzIsIDI0MSwgMjM4LCAyLCAyMDYsIDExNCwgNzgsIDk1LCAyNDEsIDIzOCwgMiwgMjA2LCAyMTUsIDEzNCwgMTMyLCAKKyAgICAyNDEsIDIzOCwgMiwgMjA2LCAxMTksIDc4LCA5NSwgMjQxLCAyMzgsIDIsIDIwNiwgMjQ2LCA2MCwgOTUsIDI0MSwgMjM4LCAKKyAgICAyLCAyMDYsIDExNCwgNzgsIDEzMiwgMjQxLCAyMzgsIDIsIDIwNiwgMjE1LCAxMzQsIDk1LCAyNDEsIDIzOCwgMiwgMjA2LCAKKyAgICAxMTksIDc4LCAxMzIsIDI0MSwgMjM4LCAyLCAyMDYsIDI0NiwgNjAsIDEzMiwgMjQxLCAyMzgsIDIsIDIwNiwgMTE0LCA3OCwgCisgICAgMTg0LCAyNDgsIDEwMSwgMTMyLCAyNDEsIDIzOCwgMiwgMjA2LCAxMTksIDI1MSwgMjIwLCAxODQsIDI0OCwgMTAxLCA5NSwgCisgICAgMjQxLCAyMzgsIDIsIDIwNiwgMTE0LCA3OCwgMTg0LCAyNDgsIDEwMSwgOTUsIDI0MSwgMjM4LCAyLCAyMDYsIDExOSwgMjUxLCAKKyAgICAyMjAsIDE4NCwgMjQ4LCAxMDEsIDIxNSwgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjUxLCAyMDcsIDI0NiwgNTgsIAorICAgIDI0MSwgMjM4LCAyLCAyMDYsIDIyMywgMTQ4LCAyNDYsIDU4LCAyNDEsIDIzOCwgMiwgMjA2LCA0MiwgMjUxLCAyMDcsIDIxNSwgCisgICAgMTI0LCAyNDEsIDIzOCwgMiwgMjA2LCAyMjMsIDE0OCwgNDYsIDUxLCA3NiwgMiwgMjIzLCA4NSwgMjQxLCAyMTksIDI0NSwgCisgICAgNjEsIDUsIDc4LCA5NSwgNjgsIDIxNywgNDMsIDIyNywgMzQsIDc4LCA5NSwgNjgsIDEzMiwgNzYsIDc4LCAyMTcsIDQzLCAKKyAgICAyMjcsIDMzLCA5NSwgNzYsIDc4LCAyMTcsIDQzLCAyMjcsIDMzLCA5NSwgNzYsIDc4LCAyNTQsIDU3LCAxMjMsIDEwOCwgCisgICAgMjMzLCAzOSwgNzgsIDEzMiwgNjgsIDEzMiwgNzYsIDIxNywgOTMsIDIzMywgMzgsIDI0MiwgMTA3LCA3OCwgOTUsIDY4LCAKKyAgICAyMTksIDksIDc4LCA5NSwgNjgsIDEzMiwgNzYsIDIxNywgOTMsIDIxOSwgOCwgMjE4LCAyMjIsIDc4LCAxMzIsIDY4LCA0MiwgCisgICAgMjQ0LCA2MCwgMjE4LCAyNywgNDYsIDI0NCwgNjAsIDIxOCwgMjcsIDExNCwgMjQ0LCA2MCwgMjE4LCAyNywgMTE5LCAyNDQsIAorICAgIDYwLCAyMTgsIDI3LCAyMTYsIDE2OSwgNzEsIDI1MiwgNjAsIDI0OCwgMTEsIDIxMiwgMTUzLCAxNzQsIDIxOSwgMTc0LCAKKyAgICAyMTIsIDE1MywgMTc0LCAyMTYsIDE1LCAyNDksIDE2NCwgNDIsIDY3LCAyNDksIDQwLCAxMjUsIDQ2LCA2NywgMjQ5LCA0MCwgCisgICAgMTI1LCA0MiwgNjcsIDIyNiwgMTMxLCA0NiwgNjcsIDIyNiwgMTMxLCAyMTIsIDE1MywgMTc0LCA0MiwgMjM2LCAxMCwgMTI1LCAKKyAgICAyMTIsIDE1MywgMTc0LCA0NiwgMjM2LCAxMCwgMTI1LCAyMTIsIDE1MywgMTc0LCA0MiwgMjUxLCAxNjUsIDEyNSwgMjEyLCAKKyAgICAxNTMsIDE3NCwgNDYsIDI1MSwgMTY1LCAxMjUsIDQyLCA0MSwgMjUxLCA4NSwgMiwgMjE1LCAxNTMsIDQ2LCA0MSwgMjUxLCAKKyAgICA4NSwgMiwgMjE1LCAxNTMsIDQyLCA0MSwgMjUxLCA4NSwgMiwgMjE3LCA2OSwgMjM1LCAyNTIsIDIxNiwgMjI3LCAyNDksIAorICAgIDk5LCA0NiwgNDEsIDI1MSwgODUsIDIsIDIxNywgNjksIDIzNSwgMjUyLCAyNTEsIDEwMSwgMjQ5LCA5OSwgNDIsIDQxLCAKKyAgICAyNTEsIDg1LCAyLCAyMTcsIDY5LCAyMzUsIDI1MiwgMjUxLCAxMDEsIDI0OSwgOTksIDQ2LCA0MSwgMjUxLCA4NSwgMiwgCisgICAgMjE3LCA2OSwgMjM1LCAyNTIsIDIxNiwgMjI3LCAyNDksIDk5LCA0MiwgMjU0LCAxOSwgMjUxLCA4NSwgMiwgMjQ3LCA3NCwgCisgICAgNDYsIDI1NCwgMTksIDI1MSwgODUsIDIsIDI0NywgNzQsIDQyLCAyNTMsIDE5NiwgMjMzLCAzOSwgMTI1LCA0NiwgMjUzLCAKKyAgICAxOTYsIDI0MiwgMTA3LCAxMjUsIDUxLCA0MiwgMjUzLCAxOTYsIDI0MiwgMTA3LCAxMjUsIDUxLCA0NiwgMjUzLCAxOTYsIAorICAgIDIzMywgMzksIDEyNSwgNDIsIDgzLCAyMTYsIDIxOSwgMjIwLCAyMzMsIDEyNSwgNDYsIDgzLCAyMTYsIDIxOSwgMjIwLCAKKyAgICAyMzMsIDEyNSwgMjQ2LCA3MiwgMjQ0LCAxMDQsIDcxLCAyMTIsIDI4LCAyMzIsIDI0MiwgMjMxLCAxNTMsIDI1NCwgMTksIAorICAgIDIyNywgMzUsIDIzMywgNzAsIDQ2LCAyNTQsIDE5LCAyMTQsIDI0NCwgMiwgMjE5LCAxNjYsIDIzMSwgMTUzLCA0NiwgMjU0LCAKKyAgICAxOSwgMiwgMjQ3LCA3NCwgMjU0LCAxOSwgMiwgMjIzLCA0LCAyMzUsIDIxMiwgMjU0LCAxNjQsIDI1NCwgMTgsIDIxOSwgCisgICAgMTg3LCAyNTQsIDE5LCAyMjcsIDM1LCAyMzMsIDcwLCAyMTksIDE4NywgMjU0LCAxOSwgMjI3LCAzNSwgMjE1LCAxMzQsIAorICAgIDIxNiwgNTgsIDI1NCwgMTgsIDIyMywgMjAyLCAyNTQsIDE4LCAyNTQsIDE5LCAyLCAyMTUsIDE1MywgMjIzLCAyMDIsIDI1NCwgCisgICAgMTksIDIsIDIxNSwgMTUzLCAyMjcsIDExMiwgMjU0LCAxOSwgMjI3LCAzNSwgMjE1LCAxMzQsIDIyNywgMTEyLCAyNTQsIDE5LCAKKyAgICAyMjcsIDM1LCAyNDYsIDYwLCAyMzEsIDE1MywgMjU0LCAxOSwgMiwgMjI3LCA0MCwgMjUzLCAxNzYsIDI0NSwgOTgsIDIzNSwgCisgICAgMjUyLCA3NiwgMjI1LCAxNDEsIDExNCwgMjQsIDIyMywgMTQ4LCAyMzEsIDE1MywgMjU0LCAxOSwgMiwgMjI3LCA0MCwgMjUzLCAKKyAgICAxNzYsIDI0NSwgOTgsIDIzNSwgMjUyLCA3NiwgMjI1LCAxNDEsIDExNCwgMjQsIDIzMywgNzAsIDIzMSwgMTUzLCAyNTQsIAorICAgIDE5LCAyLCAyMjcsIDQwLCAyNTMsIDE3NiwgMjQ1LCA5OCwgMjM1LCAyNTIsIDc2LCAyMjUsIDE0MSwgMTE5LCAyNCwgMjIzLCAKKyAgICAxNDgsIDIzMSwgMTUzLCAyNTQsIDE5LCAyLCAyMjcsIDQwLCAyNTMsIDE3NiwgMjQ1LCA5OCwgMjM1LCAyNTIsIDc2LCAyMjUsIAorICAgIDE0MSwgMTE5LCAyNCwgMjMzLCA3MCwgMjMxLCAxNTMsIDI1NCwgMTksIDIsIDIyNywgNDAsIDI1MywgMTc2LCAyNDUsIDk4LCAKKyAgICAyMzUsIDI1MiwgNzYsIDIyNSwgMTQxLCA0NiwgMjQsIDIxNSwgMTM0LCAyMzEsIDE1MywgMjU0LCAxOSwgMiwgMjI3LCA0MCwgCisgICAgMjUzLCAxNzYsIDI0NSwgOTgsIDIzNSwgMjUyLCA3NiwgMjI1LCAxNDEsIDQyLCAyNCwgMjE1LCAxMzQsIDIzMSwgMTUzLCAKKyAgICAyNTQsIDE5LCAyLCAyMjcsIDQwLCAyNTMsIDE3NiwgMjQ1LCA5OCwgMjM1LCAyNTIsIDc2LCAyMjUsIDE0MSwgNDYsIDI0LCAKKyAgICAyNDYsIDYwLCAyMzEsIDE1MywgMjU0LCAxOSwgMiwgMjI3LCA0MCwgMjUzLCAxNzYsIDI0NSwgOTgsIDIzNSwgMjUyLCA3NiwgCisgICAgMjI1LCAxNDEsIDQyLCAyNCwgMjQ2LCA2MCwgMjIzLCAyMDIsIDI0NSwgMTEwLCAyMjEsIDQ4LCAyNDUsIDExMCwgMjIxLCAKKyAgICA0OSwgMiwgMjI2LCAyNDcsIDI0NSwgMTEwLCAyMjEsIDQ5LCAyLCAzLCAyNDksIDIyOSwgNDksIDI0NSwgMTEwLCAyMjEsIAorICAgIDQ5LCAyLCA0NiwgNzYsIDQ5LCAyNDUsIDExMCwgMjIxLCA0OSwgMiwgNDIsIDc2LCA0OSwgMjQ5LCAyMjksIDIsIDE5OSwgCisgICAgMTM0LCAzNiwgNzEsIDEzNCwgMzYsIDIyNiwgMTM1LCAzNiwgMjIzLCAyMDMsIDIxOSwgMjMxLCAzNiwgMjI2LCA0NywgMjQ5LCAKKyAgICAyMjksIDI0NywgMTI1LCAyNTEsIDcsIDE5OSwgMjUyLCA2MCwgMjQsIDIxNiwgMjI3LCAxNTEsIDI0NywgMTI1LCAyNTEsIDcsIAorICAgIDcxLCAxMzQsIDI0OSwgMjI5LCAyLCAyMTgsIDIyNCwgMjEzLCAxNjYsIDM2LCAyNTMsIDI1NCwgMjQ3LCAxMjEsIDUyLCAKKyAgICAxMTQsIDc2LCAyMTcsIDkzLCAyNDksIDIyOCwgMzYsIDY3LCAyNTEsIDQyLCAzNiwgMjUxLCA0MiwgMzYsIDIzMywgMzgsIAorICAgIDM2LCAyNDIsIDEwNiwgMjQ5LCAyMjksIDIsIDMsIDI0OSwgMjI5LCAyMTEsIDIxMSwgMjE3LCAxNDksIDIyMywgMTQ4LCAKKyAgICAyNDksIDIyOSwgMiwgMTE3LCAxOTksIDIxOSwgMzMsIDIxMSwgMjExLCAyMTcsIDE0OSwgMjIzLCAxNDgsIDkxLCAyMjMsIAorICAgIDEyNSwgMjQ3LCAyMDcsIDIyMCwgMjMsIDkxLCAyNDQsIDE0MywgMjQ3LCAyMDcsIDIyMCwgMjMsIDkxLCAyNTMsIDEzMiwgCisgICAgOTEsIDMsIDI0OSwgMjI4LCA5MSwgMjE5LCAxNjYsIDExNywgMjM1LCA2OCwgMjE5LCAxNjQsIDIxNiwgMTg0LCAyLCA2MiwgCisgICAgNDksIDIxNiwgMTg0LCAyLCAyMTUsIDE1MywgMjIzLCA0LCAyMzUsIDI1MiwgMjE2LCAxODMsIDIxNiwgMTg0LCAyLCAyMjEsIAorICAgIDU1LCAyNTMsIDEyMywgMjUxLCAxMDAsIDQ2LCAyMTYsIDE4NCwgNzgsIDQyLCAyMTYsIDE4MywgNDIsIDIxNiwgMTg0LCAKKyAgICAyNTEsIDIwNywgNzEsIDEzNCwgNzEsIDI1MiwgNjAsIDI1MSwgMjA3LCA0NiwgMjE2LCAxODMsIDI1MSwgOTEsIDIsIDQyLCAKKyAgICAxNTEsIDI1MSwgMTQ0LCAyNTEsIDkxLCAyLCA0NiwgMTUxLCAyNTEsIDE0NCwgODMsIDI1MSwgOTAsIDI5LCAyLCA0MiwgCisgICAgMTUxLCAyNTEsIDE0NCwgMjksIDIsIDQ2LCAxNTEsIDI1MSwgMTQ0LCA2NywgMjQwLCAyMjMsIDgzLCAyNDAsIDIyMywgNDIsIAorICAgIDIxMywgMjI5LCAyNDQsIDEwNCwgNDYsIDIxMywgMjI5LCAyNDQsIDEwNCwgNDIsIDUxLCAyMTMsIDIyOSwgMjQ0LCAxMDQsIAorICAgIDQ2LCA1MSwgMjEzLCAyMjksIDI0NCwgMTA0LCAyMzUsIDI0NCwgMjM1LCAyMzEsIDIxNywgNjYsIDExMCwgMjM1LCAyMzEsIAorICAgIDIzNSwgMjMyLCAyMjksIDE4MywgMiwgNzEsIDEzNCwgMjQ2LCA2NiwgMjMwLCAxNTcsIDQxLCAyLCAyNDksIDEyMCwgMjI2LCAKKyAgICAyNTEsIDIzNSwgMjQyLCAyNTMsIDE1MiwgMjIwLCAxNDQsIDIyNSwgNjMsIDI0NSwgNjEsIDUsIDI0LCAyMjAsIDI1LCAyMjYsIAorICAgIDEzNSwgMjQ1LCA2MSwgNSwgMjQsIDIyMCwgMjUsIDIyNiwgMTM2LCAyLCAyMTcsIDQzLCA0OSwgMjQwLCA5NywgMjExLCAKKyAgICAyMTEsIDI0LCAyMjAsIDI1LCAyMjYsIDEzNSwgMjQyLCAxNTksIDIxOSwgOTQsIDIxNywgMTM4LCAyNDYsIDU5LCAyMTYsIAorICAgIDE4NCwgMiwgNDIsIDE1MSwgMjUxLCAxNDQsIDI0NiwgNTksIDIxNiwgMTg0LCAyLCA0NiwgMTUxLCAyNTEsIDE0NCwgODMsIAorICAgIDI0NywgMjAxLCAyLCAxMTksIDY4LCA4MywgMjMyLCAxNTksIDY3LCAyNDksIDIyOSwgMiwgMTE5LCA2OCwgODMsIDI0OSwgCisgICAgMjI5LCAyLCAxMTksIDY4LCAyNDUsIDQ4LCA2NywgMjE5LCAxNjYsIDI0NSwgNDgsIDgzLCAyMTksIDE2NiwgMjQ1LCA0OCwgCisgICAgNjcsIDI0NywgMjAwLCAyNDUsIDQ4LCA4MywgMjQ3LCAyMDAsIDI0NSwgNDgsIDY3LCAyNDksIDIyOCwgMjQ1LCA0OCwgODMsIAorICAgIDI0OSwgMjI4LCAyMjMsIDQzLCAyMjMsIDIwMywgMjE5LCAyMzIsIDIyNywgMzMsIDIxOSwgMjMyLCAyLCAyMjYsIDI0NywgCisgICAgMjIzLCAyMDMsIDIxOSwgMjMyLCAyLCAxOTksIDkwLCAyNTEsIDE3MiwgMjE5LCAyMzEsIDI1MSwgMTcyLCAyMjMsIDIwMywgCisgICAgMjE5LCAyMzEsIDUxLCAyMjUsIDE1NiwgMjE2LCAxNjksIDIyNSwgMTU2LCAyMzMsIDY2LCAyNDksIDMzLCAyNTQsIDE5LCAKKyAgICAxMjUsIDIyMywgMTQ0LCAyNDksIDMzLCAyNTQsIDE5LCAxMjUsIDIxNywgMzEsIDIzMCwgMjQ4LCAyMzAsIDk3LCAzNiwgNjIsIAorICAgIDIyNywgMzMsIDIzMCwgOTcsIDM2LCA5NCwgMjI3LCAzMywgMjMwLCA5NywgMzYsIDI5LCAyMjcsIDMzLCAyMzAsIDk3LCAKKyAgICAyMTUsIDE0NywgMjI3LCAzNCwgMiwgMjQ3LCA3NCwgMjMwLCA5NywgMjE1LCAxNDcsIDIyNywgMzQsIDIsIDIyNSwgMTU2LCAKKyAgICAyMzAsIDk3LCA0MSwgMjM1LCAxOTYsIDIyNywgMzMsIDIzMCwgOTcsIDQxLCAyMTUsIDE0NywgMjI3LCAzMywgMTE3LCAyMzIsIAorICAgIDE5OSwgMjQsIDIyNywgMzMsIDExNywgMjMyLCAxOTksIDE2NywgMjI3LCAzMywgMjMwLCA5NywgMjksIDIyNywgMzMsIDIzMCwgCisgICAgMjI0LCAxMTcsIDIxOCwgMjQ0LCAyMTgsIDI0MiwgMiwgMjM1LCAyMDgsIDIyNCwgMTY5LCAyMzUsIDIwOSwgMjI3LCAzMywgCisgICAgMjQ0LCA2OCwgMjI2LCAxMjcsIDIzNSwgMjA4LCAyMzUsIDIwOSwgMiwgNTEsIDkwLCAyMzUsIDIwOSwgMjUzLCA4OSwgMiwgCisgICAgMjIwLCAyMywgMjQ5LCAyMjUsIDI0MywgMTk3LCAyNTMsIDI1NSwgMjM1LCAyMDYsIDIzMiwgMjQzLCAyMzUsIDIwNywgMiwgCisgICAgMjI0LCA4LCAyMjYsIDExMCwgMjUzLCAxNzMsIDIyNSwgMTM1LCAyMzIsIDI0MywgMjM1LCAyMDcsIDIsIDIyMSwgNzIsIAorICAgIDIyNiwgMTEwLCAyNTMsIDE3MywgMjI1LCAxMzUsIDIzMiwgMjQzLCAyMzUsIDIwNywgMjI4LCAxNjMsIDIzNSwgMjQ2LCAKKyAgICAyMTcsIDE0OSwgMjI1LCAxMzUsIDIzNSwgMjA5LCAyNTMsIDE3MywgMTE4LCAyMjUsIDE0NSwgMjI3LCAzMywgMjI0LCAxNjMsIAorICAgIDIzNSwgMjA5LCAyMjcsIDMzLCAyMzUsIDIwOSwgMiwgMTMyLCA3NiwgMiwgMTAxLCAyMzUsIDIwOSwgMiwgMjksIDUyLCAKKyAgICAyMzUsIDIwOSwgMiwgMjM1LCAxOTUsIDIzNSwgMjA5LCAyLCAyMTUsIDE0NiwgMjM1LCAyMDksIDIsIDIyNiwgMjQ3LCAyMzUsIAorICAgIDIwOSwgMiwgMjE1LCAxNTMsIDIzNSwgNjksIDIzMywgMTA4LCA0MiwgMjE2LCAxODQsIDIyNywgMzMsIDIxMiwgMTUzLCAKKyAgICAxNzQsIDIyMiwgMTE5LCAyNDksIDE0OCwgMjEyLCAxNTMsIDE3NCwgMjIyLCAxMTksIDIyNSwgMTg4LCAyMTIsIDE1MywgCisgICAgMTc0LCAyMjIsIDExOSwgMjI1LCA2MCwgOTQsIDUsIDIsIDMsIDI0OSwgMjI5LCA0OSwgOTQsIDUsIDIsIDI0OSwgMjI0LCAKKyAgICAyNTQsIDE3NSwgNDksIDk0LCA1LCAyLCAyMTcsIDQzLCA0OSwgOTQsIDUsIDIsIDYyLCA1NSwgOTQsIDUsIDIsIDIxNywgNDMsIAorICAgIDU1LCA5NCwgNSwgMiwgMjE5LCAxMCwgMTA5LCA5NCwgNSwgMiwgODMsIDIxNiwgMTgzLCAyMzAsIDI1MSwgNSwgMiwgMjQ5LCAKKyAgICAxNTgsIDQ5LCAyMzAsIDI1MSwgNSwgMiwgNjIsIDU1LCAyMzAsIDI1MSwgNSwgMiwgMjQ0LCAxNDMsIDI0NywgNzIsIDIzMCwgCisgICAgMjUxLCA1LCAyLCAyMjMsIDEyNSwgMjQ3LCA3MiwgOTQsIDUsIDIzNSwgMjUyLCA0MiwgMTUxLCAyNDksIDIyOCwgOTQsIDUsIAorICAgIDIzNSwgMjUyLCA0NiwgMTUxLCAyNDksIDIyOCwgMjE0LCAyMzEsIDE2NywgMjQ5LCA3MSwgMjI1LCA2MywgMjMwLCAxNTQsIAorICAgIDUsIDIsIDYyLCA0OSwgMjMwLCAxNTQsIDUsIDIsIDIxNSwgMTUzLCAyMjEsIDY5LCAyMjUsIDY0LCAyLCAyNTEsIDEwMSwgCisgICAgMjQ5LCAxOTIsIDIyMCwgNSwgMjI1LCA2MywgMjMwLCAxNTQsIDUsIDIzNSwgMjUyLCA0MiwgMTUxLCAyNDksIDIyOCwgMjMwLCAKKyAgICAxNTQsIDUsIDIzNSwgMjUyLCA0NiwgMTUxLCAyNDksIDIyOCwgMzYsIDIzMCwgMTU0LCA1LCAyLCAyNDksIDIyNCwgMjU0LCAKKyAgICAxNzQsIDIzMCwgMTU0LCA1LCAyMzUsIDI1MiwgNTEsIDI0OSwgMjI4LCAzNiwgMjQ3LCAxMjEsIDUyLCA5NCwgNSwgMjM1LCAKKyAgICAyNTIsIDIxNiwgMTgzLCAyMzAsIDI1MSwgNSwgMjM1LCAyNTIsIDIxNiwgMTgzLCAyMzAsIDE1NCwgNSwgMjM1LCAyNTIsIAorICAgIDIxNiwgMTgzLCAyMzUsIDIwMywgMjI1LCA2MywgMjIzLCAxMzksIDIzNSwgMjAzLCAyMjUsIDYzLCAyMTIsIDE1MywgMTc0LCAKKyAgICAyMjMsIDI0MCwgMjQ5LCAxNDgsIDI1NCwgNDMsIDE2NywgMjQ5LCAxMDQsIDIzNSwgMTk2LCAyLCAyNDcsIDc0LCAyMTUsIAorICAgIDE0NywgMiwgMjMwLCAyNTEsIDUyLCAyMTUsIDE0NywgMiwgMjI2LCAyNDcsIDIzNSwgMTk2LCAyLCAyMjYsIDI0NywgMjM1LCAKKyAgICAxOTYsIDIsIDIzMiwgMTk5LCAyNTQsIDI3LCAyMTUsIDE0NywgMiwgMjMyLCAxOTksIDIyNywgMjQsIDIxNSwgMTQ3LCA3OCwgCisgICAgMjM1LCAxOTUsIDIzNSwgMTk2LCA3OCwgMjE1LCAxNDYsIDIxNSwgMTQ3LCA3OCwgMjUyLCA2MCwgNzgsIDIzNSwgMTk1LCAKKyAgICAyMzUsIDE5NiwgNzgsIDI1MiwgNjAsIDc4LCAyMTUsIDE0NiwgMjE1LCAxNDcsIDI1MSwgMjA3LCAyNCwgMjM1LCA2OCwgMiwgCisgICAgMjE1LCAxNDYsIDIzNSwgMTk2LCAyNTEsIDIwNywgMjQsIDIzNSwgNjgsIDIsIDIzNSwgMTk1LCAyNDksIDE5MywgMjE1LCAKKyAgICAxNDcsIDIsIDIyMSwgNTQsIDI0OSwgMTkzLCAyMzUsIDE5NiwgMiwgMjIxLCA1NCwgNTEsIDQxLCAyMzUsIDE5NSwgNTEsIAorICAgIDQxLCAyMTUsIDE0NiwgMjQ5LCAxOTMsIDIxNSwgMTQ3LCAyLCAyMjEsIDU1LCAyNCwgMjIwLCA1LCAyMjUsIDYzLCAyMzIsIAorICAgIDE5OSwgMjQsIDIsIDYyLCA0OSwgMjMyLCAxOTksIDE2NywgMiwgNjIsIDQ5LCA1MSwgMjMyLCAxOTksIDI1NCwgMjcsIDUxLCAKKyAgICAyMzIsIDE5OSwgMjI3LCAyNCwgMTE3LCAyMzUsIDE5NywgMjMyLCAxOTksIDI1NCwgMjcsIDExNywgMjM1LCAxOTcsIDIzMiwgCisgICAgMTk5LCAyMjcsIDI0LCAyMjAsIDEzLCAyMzMsIDEwOCwgMjI3LCAyNCwgMjIwLCAxMywgMjMzLCAxMDgsIDI1NCwgMjcsIAorICAgIDIzMiwgMTk5LCAxNjcsIDIyNiwgMjQ1LCAyMzIsIDE5OSwgMjU0LCAyNywgMjMyLCAxOTksIDI0LCAyLCAyMzEsIDM3LCAKKyAgICAyMTksIDc5LCAyMzIsIDE5OSwgMTY3LCAyLCAyMzEsIDM3LCAyMTksIDc5LCAyMzIsIDE5OSwgMjQsIDIsIDE5OSwgMjQ4LCAKKyAgICAxMDEsIDIzMiwgMTk5LCAxNjcsIDIsIDE5OSwgMjQ4LCAxMDEsIDIzMiwgMTk5LCAyNCwgMiwgNTEsIDIyNiwgMjQ3LCAyMzIsIAorICAgIDE5OSwgMjQsIDIsIDIxNSwgMTUzLCAyMzIsIDE5OSwgMjQsIDIsIDUxLCAyMTUsIDE1MywgMywgMjE0LCAyMjgsIDIsIDIxNSwgCisgICAgMTUzLCAyMzIsIDE5OSwgMTY3LCAyLCA1MSwgMjI2LCAyNDcsIDIzMiwgMTk5LCAxNjcsIDIsIDUxLCAyMTUsIDE1MywgMjEyLCAKKyAgICAxNTMsIDE3NCwgMjQ3LCA4MywgMjUzLCAyNDYsIDIxMiwgMTUzLCAxNzQsIDIyNCwgNDAsIDI1MywgMjQ2LCAyNDUsIDYxLCAKKyAgICA1LCAyLCA2MiwgNTUsIDI0MCwgOTcsIDIsIDYyLCA0OSwgMjE2LCAxNjksIDE5OSwgMjUyLCA2MCwgMiwgNTEsIDcxLCA5MCwgCisgICAgMjE2LCAxNjksIDE5OSwgMjUyLCA2MCwgMiwgMjE2LCAxNjksIDcxLCA5MCwgMjE3LCA0MywgMjI3LCAzNCwgMiwgNjIsIDQ5LCAKKyAgICAyMTcsIDQzLCAyMjcsIDM0LCAyLCAyMjMsIDEyNSwgMjQ3LCA3MiwgMjIwLCA4OCwgMjMwLCAyNTEsIDIyMCwgODcsIDI0OSwgCisgICAgMTM5LCAyLCA2MiwgNDksIDI0NSwgNjEsIDIsIDI1MywgMTMyLCAyNTQsIDU3LCAxMjMsIDIxMSwgMjExLCAyLCAyNDksIAorICAgIDIyNCwgMjU0LCAxNzQsIDI1MywgMjE4LCAxMjMsIDE2NywgMTIzLCAxMDgsIDI0NSwgNjEsIDUsIDc4LCA5NCwgNTIsIDk0LCAKKyAgICA1LCA3OCwgMjQ1LCA2MSwgNTIsIDI0NSwgNjEsIDUsIDc4LCAyMTcsIDQzLCAyMjcsIDMzLCA1MSwgMjQ5LCAxNjUsIDI0NSwgCisgICAgNjIsIDExNywgMjQ5LCAxMzQsIDI0NSwgNjEsIDIyMCwgMTAyLCAxMzMsIDI0OSwgMTM0LCAyNDUsIDYxLCAyMjAsIDEwMiwgCisgICAgMjQ1LCA2MSwgNSwgMiwgMTE3LCAxNzYsIDc4LCAyNCwgMTE3LCAxNzYsIDU1LCAyNDUsIDU3LCAyLCAyNDMsIDIzNywgMTc2LCAKKyAgICA0OSwgMjMzLCAzOSwgMiwgMjQ5LCAyMjksIDIzNSwgMjEyLCAyNDIsIDEwNywgMiwgMjQ5LCAyMjksIDIzNSwgMjEyLCAyMzMsIAorICAgIDM5LCAyLCAyMjQsIDE1OCwgMTUyLCA0OSwgMjQyLCAxMDcsIDIsIDIyNCwgMTU4LCAxNTIsIDQ5LCAyMzMsIDM5LCAxNjcsIAorICAgIDIyMCwgMjUsIDEyMywgMTA4LCAyNDIsIDEwNywgMTY3LCAyMjAsIDI1LCAxMjMsIDEwOCwgMjMzLCAzOSwgMTY3LCAyMjAsIAorICAgIDI1LCAxMjMsIDIxMSwgMjExLCAyLCA2MiwgMjM1LCAyMTIsIDI0MiwgMTA3LCAxNjcsIDIyMCwgMjUsIDEyMywgMjExLCAKKyAgICAyMTEsIDIsIDYyLCAyMzUsIDIxMiwgMjMzLCAzOSwgMTY3LCAyMjAsIDI1LCAxMjMsIDIxMSwgMjExLCAyLCA2MiwgNDksIAorICAgIDI0MiwgMTA3LCAxNjcsIDIyMCwgMjUsIDEyMywgMjExLCAyMTEsIDIsIDYyLCA0OSwgMjMzLCAzOSwgMTY3LCAyMjAsIDI1LCAKKyAgICAxMjMsIDIxMSwgMjExLCAyLCA2MiwgNzgsIDIyMywgMTQ4LCAyNDIsIDEwNywgMTY3LCAyMjAsIDI1LCAxMjMsIDIxMSwgCisgICAgMjExLCAyLCA2MiwgNzgsIDIzMywgNzAsIDIzMywgMzksIDE2NywgMjUzLCAyMTksIDI0MiwgMTA3LCAxNjcsIDI1MywgMjE5LCAKKyAgICAyMzMsIDM5LCAyNCwgMjIwLCA3OSwgMjI4LCAxNjMsIDEyMywgMTA4LCAyNDIsIDEwNywgMjQsIDIyMCwgNzksIDIyOCwgCisgICAgMTYzLCAxMjMsIDEwOCwgMjMzLCAzOSwgMjQsIDIyOCwgMTYzLCAyNTMsIDIxOSwgMjQyLCAxMDcsIDI0LCAyMjgsIDE2MywgCisgICAgMjUzLCAyMTksIDIzMywgMzksIDc4LCAyNDYsIDY1LCAxMjMsIDc4LCAyNDIsIDEwNiwgMjQyLCAxMDcsIDc4LCAyNDYsIDY1LCAKKyAgICAxMjMsIDc4LCAyMzMsIDM4LCAyMzMsIDM5LCA3OCwgMjIwLCA4OCwgMTY3LCAyNDUsIDYyLCAyNDIsIDEwNywgNzgsIDIyMCwgCisgICAgODgsIDE2NywgMjQ1LCA2MiwgMjMzLCAzOSwgNzgsIDIyMCwgODgsIDc4LCAyNDIsIDEwNiwgMjQyLCAxMDcsIDc4LCAyMjAsIAorICAgIDg4LCA3OCwgMjMzLCAzOCwgMjMzLCAzOSwgNzgsIDI0MiwgMTA3LCA3OCwgMjQ2LCA2NSwgMjQ1LCA2MiwgMjQyLCAxMDcsIAorICAgIDc4LCAyMzMsIDM5LCA3OCwgMjQ2LCA2NSwgMjQ1LCA2MiwgMjMzLCAzOSwgNzgsIDIyMCwgMjUsIDEyMywgNzgsIDI0MiwgCisgICAgMTA3LCA3OCwgMjIwLCAyNSwgMjQ1LCA2MiwgMjQyLCAxMDcsIDc4LCAyMjAsIDI1LCAxMjMsIDc4LCAyMzMsIDM5LCA3OCwgCisgICAgMjIwLCAyNSwgMjQ1LCA2MiwgMjIwLCAyNSwgMTIzLCAyMTEsIDIxMSwgMTY3LCAyMzMsIDM4LCAyMjAsIDI1LCAxMjMsIAorICAgIDIxMSwgMjExLCAxNjcsIDI0MiwgMTA2LCAyMjAsIDI1LCAxMjMsIDIxMSwgMjExLCAxNjcsIDIzMywgMzksIDIsIDYyLCAKKyAgICAyMzUsIDIxMiwgMjIwLCAyNSwgMTIzLCAyMTEsIDIxMSwgMTY3LCAyNDIsIDEwNywgMiwgNjIsIDIzNSwgMjEyLCAyNDYsIAorICAgIDY1LCAxMjMsIDIxMSwgMjExLCAxNjcsIDIzMywgMzgsIDI0NiwgNjUsIDEyMywgMjExLCAyMTEsIDE2NywgMjQyLCAxMDYsIAorICAgIDI0NiwgNjUsIDIyMCwgMjUsIDEyMywgMjExLCAyMTEsIDE2NywgMjMzLCAzOCwgMjQ2LCA2NSwgMjIwLCAyNSwgMTIzLCAKKyAgICAyMTEsIDIxMSwgMTY3LCAyNDIsIDEwNiwgMjIwLCA4OCwgMTY3LCAyMzMsIDM4LCAyMjAsIDg4LCAxNjcsIDI0MiwgMTA2LCAKKyAgICAyMjAsIDg4LCA3OCwgMjMzLCAzOSwgNzgsIDI0NSwgNjEsIDUyLCAyMjAsIDg4LCA3OCwgMjQyLCAxMDcsIDc4LCAyNDUsIAorICAgIDYxLCA1MiwgNTEsIDIyOSwgMTczLCAyMzMsIDM4LCA1MSwgMjI5LCAxNzMsIDI0MiwgMTA2LCA1MSwgMjI5LCAxNzMsIDIzMywgCisgICAgMzksIDIsIDIxNSwgMTUzLCAyNDIsIDEwNywgMjI2LCAyNDUsIDIzMywgMzgsIDI0MiwgMTA3LCAyNTEsIDIwNywgMjMzLCAKKyAgICAzOCwgMjMzLCAzOSwgMjQ5LCAxOTMsIDI1MSwgNywgMjQ5LCAzNCwgMjQyLCAxMDcsIDI0OSwgMTkzLCAyNTEsIDcsIDI0OSwgCisgICAgMzQsIDIzMywgMzksIDI0OSwgMTkzLCAyNTEsIDcsIDI0OSwgMzUsIDc4LCAyMjAsIDI1LCAyNDUsIDYyLCAyNDIsIDEwNywgCisgICAgMjQ5LCAxOTMsIDI1MSwgNywgMjQ5LCAzNSwgNzgsIDIyMCwgMjUsIDI0NSwgNjIsIDIyMCwgNiwgMjE3LCAxNTMsIDIzMywgCisgICAgMTA2LCAyMTcsIDE1MywgMjIwLCA2LCAyMTcsIDE1NCwgMTY3LCAxMjMsIDEwOCwgMjMzLCAxMDYsIDIxNywgMTU0LCAxNjcsIAorICAgIDEyMywgMTA4LCAyNDUsIDYxLCA1LCAyLCAyNTEsIDM3LCA0OSwgMjI1LCA4MywgNzgsIDIyMCwgNzksIDI0NSwgNjEsIDUyLCAKKyAgICAyMTksIDEsIDc4LCAyMjAsIDc5LCAyNDUsIDYxLCA1MiwgMjI1LCA4MywgNzgsIDIyMCwgNzksIDIyOCwgMTYzLCAxMjMsIAorICAgIDEwOCwgMjE5LCAxLCA3OCwgMjIwLCA3OSwgMjI4LCAxNjMsIDEyMywgMTA4LCAyMjUsIDgzLCA3OCwgMjQ1LCA2MSwgNTIsIAorICAgIDIxOSwgMSwgNzgsIDI0NSwgNjEsIDUyLCAyMjUsIDgzLCA3OCwgMjI4LCAxNjMsIDEyMywgMTA4LCAyMTksIDEsIDc4LCAKKyAgICAyMjgsIDE2MywgMTIzLCAxMDgsIDIyNSwgODMsIDc4LCAyNTQsIDU3LCAxMjMsIDEwOCwgMjE5LCAxLCA3OCwgMjU0LCA1NywgCisgICAgMTIzLCAxMDgsIDIyNSwgODMsIDc4LCAyMjgsIDE2MywgMjU0LCA1NywgMTIzLCAxMDgsIDIxOSwgMSwgNzgsIDIyOCwgMTYzLCAKKyAgICAyNTQsIDU3LCAxMjMsIDEwOCwgNTEsIDIyNSwgODIsIDUxLCAyMTksIDAsIDIxOSwgOSwgMiwgMjQ3LCA3NCwgMjE4LCAyMjIsIAorICAgIDIsIDI0NywgNzQsIDIxOSwgOSwgMiwgOTQsIDUsIDU1LCAyMTgsIDIyMiwgMiwgOTQsIDUsIDU1LCAyMTksIDksIDIsIDIzMCwgCisgICAgMTU0LCA1LCA1NSwgMjE4LCAyMjIsIDIsIDIzMCwgMTU0LCA1LCA1NSwgMjE5LCA5LCA2NSwgMTY3LCAxMjMsIDIxMSwgMjExLCAKKyAgICAyLCA2MiwgNDksIDIxOCwgMjIyLCA2NSwgMTY3LCAxMjMsIDIxMSwgMjExLCAyLCA2MiwgNDksIDIxOSwgOSwgNjUsIDc4LCAKKyAgICAyNDUsIDYxLCA1MiwgMjE4LCAyMjIsIDY1LCA3OCwgMjQ1LCA2MSwgNTIsIDIxOSwgOSwgNjUsIDc4LCAyMTcsIDQzLCAyMjcsIAorICAgIDMzLCAyMTgsIDIyMiwgNjUsIDc4LCAyMTcsIDQzLCAyMjcsIDMzLCAyMTksIDksIDY1LCA3OCwgMjU0LCA1NywgMTIzLCAKKyAgICAxMDgsIDIxOCwgMjIyLCA2NSwgNzgsIDI1NCwgNTcsIDEyMywgMTA4LCAyMTksIDksIDY1LCA3OCwgMjI4LCAxNjMsIDEyMywgCisgICAgMTA4LCAyMTgsIDIyMiwgNjUsIDc4LCAyMjgsIDE2MywgMTIzLCAxMDgsIDQxLCA0MiwgMjI3LCA0MCwgOTIsIDIyNywgMzMsIAorICAgIDQxLCA0NiwgMjI3LCA0MCwgOTIsIDIyNywgMzMsIDI0OSwgMTkzLCAyMTksIDgsIDI0OSwgMTkzLCAyMTgsIDIyMSwgMjQ5LCAKKyAgICAxOTMsIDIxOSwgOSwgMTY3LCAxMjMsIDEwOCwgMjQ5LCAxOTMsIDIxOCwgMjIyLCAxNjcsIDEyMywgMTA4LCAyMTksIDksIAorICAgIDc4LCAyMTgsIDIyMSwgMjE4LCAyMjIsIDc4LCAyMTksIDgsIDIxOSwgOSwgNzgsIDIxOSwgOCwgMjE4LCAyMjIsIDc4LCAKKyAgICAyMTgsIDIyMSwgMjE4LCAyMjIsIDI1MSwgMjA3LCAyMTksIDgsIDIxOCwgMjIyLCAyNTEsIDIwNywgMjQsIDIzNSwgNjgsIAorICAgIDI1MSwgNywgMjQ4LCAxMDIsIDIsIDIxOSwgOCwgMjQ1LCAxMjcsIDY1LCAyMjcsIDM1LCAyNDYsIDU3LCAyMjUsIDE4MCwgMiwgCisgICAgMjE3LCAyMjAsIDIxNiwgMjI2LCAyMTYsIDE5OCwgMjM1LCAxOTUsIDI0MywgMjQ2LCAyMjgsIDE3NiwgMjIwLCAxNzUsIDQyLCAKKyAgICAyMTgsIDM2LCAyMjAsIDE3NSwgMTE5LCAyMTgsIDM2LCAyMjAsIDE3NSwgMTE0LCAyMTgsIDM2LCAyMjYsIDQ4LCAyLCAxOTcsIAorICAgIDcxLCAyNTIsIDYwLCAyMTYsIDE2OSwgNDYsIDIxNiwgNTcsIDUxLCA3MSwgMjUyLCA2MCwgNDIsIDIxNiwgNTcsIDcxLCAKKyAgICAyNTIsIDYwLCA1MSwgNDIsIDIxNiwgNTcsIDUxLCA3MSwgMjUyLCA2MCwgNTEsIDQyLCAyMTYsIDU3LCAxODQsIDI0OCwgCisgICAgMTAyLCAyNDMsIDIxMywgNDIsIDIzMSwgMTI3LCA2NSwgNTEsIDIxNCwgMjE2LCAyMjAsIDE3NSwgMTE5LCAyMTgsIDM3LCAyLCAKKyAgICAyMjYsIDI0NywgMjIwLCAxNzUsIDExNCwgMjE4LCAzNywgMiwgMjE1LCAxNTMsIDIyMCwgMTc1LCAxMTQsIDIxOCwgMzcsIAorICAgIDc4LCAyMjAsIDE3NSwgMTE5LCAyMTgsIDM2LCA1MSwgMTE5LCAyMTgsIDM2LCA1MSwgMTE0LCAyMTgsIDM2LCA1MSwgMjE5LCAKKyAgICA0NSwgMjI4LCAxNjMsIDUyLCAyMjMsIDIwMiwgNTEsIDIxOSwgNDUsIDIyOCwgMTYzLCA1MiwgMjQ3LCA5MiwgMjI4LCAxNjMsIAorICAgIDI0NywgMTI3LCAyLCAyMjMsIDIwMiwgMjI5LCAxODIsIDIyMCwgMjMsIDcxLCAyMzIsIDI0MywgMiwgMjQ5LCAyMjksIDQ5LCAKKyAgICA3MSwgMjMyLCAyNDMsIDIsIDI0OSwgMjI5LCA1NSwgMTE5LCAyMTgsIDM3LCAyLCAyNDksIDIyOSwgNTUsIDIyNiwgMTM2LCAKKyAgICAyLCAxOTksIDkwLCAyMjYsIDEzNiwgMiwgMjE3LCA0MywgMjI3LCAzMywgMjE2LCAxNjksIDcxLCAyNTIsIDYwLCAyNTEsIAorICAgIDE2NywgMjIzLCAyNDEsIDIxNiwgMTY5LCA3MSwgMjUyLCA2MCwgMiwgMTk5LCA5MCwgMjE2LCAxNjksIDI0OSwgMTY1LCAKKyAgICAyMjcsIDMzLCAyMTYsIDE2OSwgMjI5LCAxNzMsIDIzMywgMzgsIDIxNiwgMTY5LCAyMjksIDE3MywgMjQyLCAxMDYsIDI0NiwgCisgICAgNjUsIDIyMCwgMjUsIDIzMywgMzksIDE2NywgMTIzLCAxMDgsIDI0NiwgNjUsIDIyMCwgMjUsIDI0MiwgMTA3LCAxNjcsIAorICAgIDEyMywgMTA4LCAyMTYsIDE2OSwgMjE5LCAyMzIsIDI1MSwgMTY3LCAyMjMsIDI0MSwgMjMzLCAxMDgsIDIxNiwgMTY5LCA3MSwgCisgICAgMjUyLCA2MCwgMjI3LCAzMywgNTEsIDIxOSwgMjMyLCAyMjcsIDMzLCA2NywgNzEsIDEzNCwgMjMwLCA5NywgNjcsIDcxLCAKKyAgICAxMzQsIDIyOCwgMTY3LCAyNDUsIDE3NiwgNjcsIDY4LCAyMjgsIDE2NywgMjEzLCAyNTAsIDY3LCA2OCwgMjE5LCAyMTUsIAorICAgIDI0NSwgMTc2LCA2NywgNjgsIDIxOSwgMjE1LCAyMTMsIDI1MCwgNjcsIDY4LCA0MiwgNDYsIDY3LCA2OCwgMTMyLCA4MywgCisgICAgNjgsIDIxNSwgMTI0LCA4MywgNjgsIDI0NiwgNTgsIDgzLCA2OCwgMjI4LCAxNjcsIDI0NSwgMTc2LCA4MywgNjgsIDIyOCwgCisgICAgMTY3LCAyMTMsIDI1MCwgODMsIDY4LCAyMTksIDIxNSwgMjQ1LCAxNzYsIDgzLCA2OCwgMjE5LCAyMTUsIDIxMywgMjUwLCAKKyAgICA4MywgNjgsIDQyLCA0NiwgODMsIDY4LCAxMTQsIDExOSwgODMsIDY4LCA5NSwgNzYsIDIsIDIxNywgMzAsIDI0NiwgNTcsIAorICAgIDk1LCA3NiwgMiwgMjE3LCAzMCwgMjE1LCAxMjMsIDEzMiwgNzYsIDIsIDIxNywgMzAsIDI0NiwgNTcsIDEzMiwgNzYsIDIsIAorICAgIDIxNywgMzAsIDIxNSwgMTIzLCA0MSwgMiwgMjE2LCAyMjcsIDE1MSwgMjUxLCAxNDQsIDQxLCAyLCAyNTEsIDEwMSwgMTUxLCAKKyAgICAyNTEsIDE0NCwgNDEsIDIsIDIxNSwgMTMxLCA0NiwgMjQ3LCAyMDcsIDE1MSwgMjUxLCAxNDQsIDQxLCAyLCAyMzIsIDE2MywgCisgICAgNDIsIDI0NywgMjA3LCAxNTEsIDI1MSwgMTQ0LCAyNDcsIDIwMSwgMiwgNDIsIDE1MSwgMjUxLCAxNDQsIDI0NywgMjAxLCAyLCAKKyAgICA0NiwgMTUxLCAyNTEsIDE0NCwgMjQ3LCAyMDEsIDIsIDIxNiwgMjI3LCAxNTEsIDI1MSwgMTQ0LCAyNDcsIDIwMSwgMiwgCisgICAgMjUxLCAxMDEsIDE1MSwgMjUxLCAxNDQsIDI0NiwgNzIsIDIxOSwgMTY2LCA4MywgMjMzLCAxMDgsIDIxOSwgMTY2LCA2NywgCisgICAgMjMzLCAxMDgsIDIxOSwgMTY2LCA4MywgMjE0LCAxNjQsIDMsIDIxOSwgMTY2LCA2NywgMjE0LCAxNjQsIDMsIDIxOSwgMTY2LCAKKyAgICA4MywgMjI2LCA2NSwgNjcsIDIyNiwgNjUsIDY3LCAyNDEsIDE3OCwgODMsIDI0MSwgMTc4LCAxOTksIDgzLCAyNDEsIDE3OCwgCisgICAgODMsIDIzMywgMTA4LCAyNDksIDIyOCwgODMsIDIzMSwgMTQ3LCAyNDcsIDIwMCwgNjcsIDIzMSwgMTQ3LCAyNDcsIDIwMCwgCisgICAgODMsIDIzMSwgMTQ3LCAyMzIsIDE1OSwgNjcsIDIzMSwgMTQ3LCAyMzIsIDE1OSwgODMsIDMsIDI0NywgMjAwLCA4MywgMywgCisgICAgMjMyLCAxNTksIDY3LCAzLCAyMzIsIDE1OSwgODMsIDE5OSwgMjQ1LCAxMjEsIDY3LCAxOTksIDI0NSwgMTIxLCA4MywgNzEsIAorICAgIDI0NSwgMTIxLCA2NywgNzEsIDI0NSwgMTIxLCA0MiwgNzYsIDIsIDMsIDI0OSwgMjI4LCAxMzMsIDEzMiwgMjUzLCAxNjIsIAorICAgIDQyLCA3NiwgMiwgMzYsIDIyNSwgMTU2LCAxODQsIDEzMiwgMjE5LCAxNjIsIDY4LCAxMzIsIDIxNiwgMjQsIDc2LCAyLCA3MSwgCisgICAgOTAsIDEzMiwgMjE2LCAyNCwgNzYsIDIsIDUxLCA3MSwgOTAsIDEzMiwgMjE2LCAyNCwgNzYsIDI0MywgMjEzLCAxMzQsIAorICAgIDEzMiwgMjE2LCAyNCwgMjE2LCAxNjksIDI0OCwgMTAyLCA2OCwgMTMyLCA3NiwgMiwgMjQ2LCA3MiwgMjE5LCA3OSwgMTMyLCAKKyAgICA3NiwgMiwgMjE4LCAyOCwgMiwgNzEsIDkwLCAxMzIsIDc2LCAyLCAyMTgsIDI4LCAyLCA1MSwgNzEsIDkwLCAxMzIsIDIxNiwgCisgICAgMjQsIDc2LCAyLCAyMTgsIDI3LCAxMzIsIDIxNiwgMjQsIDc2LCAyLCAyMTgsIDI4LCAyLCA3MSwgOTAsIDEzMiwgMjE2LCAKKyAgICAyNCwgNzYsIDIsIDIxOCwgMjgsIDIsIDUxLCA3MSwgOTAsIDEzMiwgNzYsIDIxNywgOTMsIDIxMywgMTY2LCAyMTQsIDIwLCAKKyAgICA3NiwgMjI1LCAxNDEsIDI0NywgMTQ3LCAyMzMsIDcwLCAyNDUsIDYxLCA1LCA3OCwgMTMyLCA2OCwgMjIzLCAyMDMsIDIxNywgCisgICAgNDMsIDIyNywgMzQsIDc4LCAxMzIsIDY4LCAxMzIsIDc2LCA3OCwgMjIzLCAyMDMsIDI1NCwgNTcsIDEyMywgMTA4LCA5NSwgCisgICAgNzYsIDIxNywgOTMsIDI0MiwgMTA2LCA5NSwgNzYsIDIxNywgOTMsIDIxOCwgMjIxLCAxMzIsIDIyNCwgMTY5LCA2OCwgOTUsIAorICAgIDIyNCwgMTY5LCA2OCwgMjIzLCAyMDMsIDIxNywgNDMsIDIyNywgMzQsIDc4LCA5NSwgNjgsIDk1LCA3NiwgNzgsIDIyMywgCisgICAgMjAzLCAyNTQsIDU3LCAxMjMsIDEwOCwgMjE3LCA0MywgMjI3LCAzNCwgNzgsIDEzMiwgNjgsIDEzMiwgNzYsIDc4LCAyNTQsIAorICAgIDU3LCAxMjMsIDEwOCwgMTMyLCA3NiwgNzgsIDIyMywgMjAzLCAyMTcsIDQzLCAyMjcsIDMzLCA5NSwgNzYsIDc4LCAyMjMsIAorICAgIDIwMywgMjE3LCA0MywgMjI3LCAzMywgNjcsIDIzMSwgMTQ3LCAyMTksIDk1LCA4MywgMywgMjE5LCA5NSwgNjcsIDMsIDIxOSwgCisgICAgOTUsIDgzLCAyMjMsIDE0NCwgMjI2LCA2NSwgNjcsIDIyMywgMTQ0LCAyMjYsIDY1LCAxMDcsIDIzMywgMTA4LCAyNDksIAorICAgIDIyOCwgMTA3LCAyMjYsIDI0OCwgMiwgMjI2LCAyNDgsIDIzNSwgMjEyLCAxMDcsIDI0OSwgMjI5LCAyLCAyNDksIDIyOSwgCisgICAgMjM1LCAyMTIsIDEwNywgMjQ5LCAyMjgsIDEwNywgMzYsIDIyMiwgMTY5LCAxMzYsIDYsIDEsIDI1MywgNzUsIDEzNiwgNiwgCisgICAgMSwgMjUxLCA0NiwgMTM2LCA2LCAxLCAyMTQsIDIzMCwgMTM2LCA2LCAxLCAyNDIsIDE2MSwgMTM2LCA2LCAxLCAyNDcsIDk0LCAKKyAgICAxMzYsIDYsIDEsIDIxMywgMTIsIDEzNiwgNiwgMSwgMjEyLCA2MSwgMTM2LCA2LCAxLCAyNDUsIDI0NSwgMTM2LCA2LCAxLCAKKyAgICAyMTIsIDg0LCAxMzYsIDYsIDEsIDIzNSwgMTQ2LCAxMzYsIDYsIDEsIDcwLCAyMzUsIDE0NiwgMTM2LCA2LCAxLCA3MiwgCisgICAgMTM2LCA2LCAxLCAyNDcsIDExMiwgMTM2LCA2LCAxLCAyMzQsIDI0NSwgMTM2LCA2LCAxLCAyMzIsIDIxNSwgMTM2LCA2LCAxLCAKKyAgICAyMzAsIDEwMSwgMTM2LCA2LCAxLCAyMzAsIDEyLCAxMzYsIDYsIDEsIDIyNywgNTEsIDEzNiwgNiwgMSwgMjI1LCAxMzgsIAorICAgIDEzNiwgNiwgMSwgMjIzLCAxMjQsIDEzNiwgNiwgMSwgMjIwLCAxMSwgMTM2LCA2LCAxLCAyMTYsIDQ2LCAxMzYsIDYsIDEsIAorICAgIDIxNSwgMTcxLCAxMzYsIDYsIDEsIDI0MywgMjE2LCAxMzYsIDYsIDEsIDI0MSwgMTg0LCAxMzYsIDYsIDEsIDIyNywgMywgCisgICAgMTM2LCA2LCAxLCAyMjYsIDk2LCAxMzYsIDYsIDEsIDIyMCwgMTUzLCAxMzYsIDYsIDEsIDIxNiwgMTI1LCAxMzYsIDYsIDEsIAorICAgIDI1MCwgMTIsIDEzNiwgNiwgMSwgMjIxLCAyNCwgMTM2LCA2LCAxLCAyMTMsIDE4LCAxMzYsIDYsIDEsIDIxMywgMjAsIDEzNiwgCisgICAgNiwgMSwgMjEzLCA0NywgMTM2LCA2LCAxLCAyMTksIDE4NSwgMTU5LCAxMzYsIDYsIDEsIDIxMiwgMjAzLCAxMzYsIDYsIDEsIAorICAgIDMsIDIxMiwgMTc0LCAxMzYsIDYsIDEsIDMsIDIxMiwgMTc1LCAyLCAyMTgsIDI3LCAxMzYsIDYsIDEsIDIxMiwgMjM1LCAKKyAgICAxMzYsIDYsIDEsIDIzNSwgMTgyLCAzLCAyMTIsIDE3NCwgMTM2LCA2LCAxLCAyNTEsIDE3MiwgMjEyLCAxNzQsIDEzNiwgNiwgCisgICAgMSwgMjM1LCAxODIsIDI1MSwgMTcyLCAyMTIsIDE3NCwgMTM2LCA2LCAxLCAyNDQsIDUxLCAxMzYsIDYsIDEsIDIzNSwgMTQ0LCAKKyAgICAxMzYsIDYsIDEsIDIyMCwgMTUyLCAxMzYsIDYsIDEsIDIxNiwgMTYwLCA2MSwgMTM2LCA2LCAxLCAyMzMsIDk4LCAyMzAsIAorICAgIDEwMSwgMTM2LCAzLCAxLCAyNTMsIDc1LCAxMzYsIDMsIDEsIDI1MSwgNDYsIDEzNiwgMywgMSwgMjE0LCAyMzAsIDEzNiwgMywgCisgICAgMSwgMjQyLCAxNjEsIDEzNiwgMywgMSwgMjQ3LCA5NCwgMTM2LCAzLCAxLCAyMTMsIDEyLCAxMzYsIDMsIDEsIDIxMiwgNjEsIAorICAgIDEzNiwgMywgMSwgMjQ1LCAyNDUsIDEzNiwgMywgMSwgMjEyLCA4NCwgMTM2LCAzLCAxLCAyMzUsIDE0NiwgMTM2LCAzLCAxLCAKKyAgICA3MCwgMjM1LCAxNDYsIDEzNiwgMywgMSwgNzIsIDEzNiwgMywgMSwgMjQ3LCAxMTIsIDEzNiwgMywgMSwgMjM0LCAyNDUsIAorICAgIDEzNiwgMywgMSwgMjMyLCAyMTUsIDEzNiwgMywgMSwgMjMwLCAxMDEsIDEzNiwgMywgMSwgMjMwLCAxMiwgMTM2LCAzLCAxLCAKKyAgICAyMjcsIDUxLCAxMzYsIDMsIDEsIDIyNSwgMTM4LCAxMzYsIDMsIDEsIDIyMywgMTI0LCAxMzYsIDMsIDEsIDIyMCwgMTEsIAorICAgIDEzNiwgMywgMSwgMjE2LCA0NiwgMTM2LCAzLCAxLCAyMTUsIDE3MSwgMTM2LCAzLCAxLCAyNDMsIDIxNiwgMTM2LCAzLCAxLCAKKyAgICAyNDEsIDE4NCwgMTM2LCAzLCAxLCAyMjcsIDMsIDEzNiwgMywgMSwgMjI2LCA5NiwgMTM2LCAzLCAxLCAyMjAsIDE1MywgCisgICAgMTM2LCAzLCAxLCAyMTYsIDEyNSwgMTM2LCAzLCAxLCAyNTAsIDEyLCAxMzYsIDMsIDEsIDIyMSwgMjQsIDEzNiwgMywgMSwgCisgICAgMjEzLCAxOCwgMTM2LCAzLCAxLCAyMTMsIDIwLCAxMzYsIDMsIDEsIDIxMywgNDcsIDEzNiwgMywgMSwgMjE5LCAxODUsIAorICAgIDE1OSwgMTM2LCAzLCAxLCAyMTIsIDIwMywgMTM2LCAzLCAxLCAzLCAyMTIsIDE3NCwgMTM2LCAzLCAxLCAzLCAyMTIsIDE3NSwgCisgICAgMiwgMjE4LCAyNywgMTM2LCAzLCAxLCAyMTIsIDIzNSwgMTM2LCAzLCAxLCAyMzUsIDE4MiwgMywgMjEyLCAxNzQsIDEzNiwgCisgICAgMywgMSwgMjUxLCAxNzIsIDIxMiwgMTc0LCAxMzYsIDMsIDEsIDIzNSwgMTgyLCAyNTEsIDE3MiwgMjEyLCAxNzQsIDEzNiwgCisgICAgMywgMSwgMjQ0LCA1MSwgMTM2LCAzLCAxLCAyMzUsIDE0NCwgMTM2LCAzLCAxLCAyMjAsIDE1MiwgMTM2LCAzLCAxLCAyMTYsIAorICAgIDE2MCwgNjEsIDEzNiwgMywgMSwgMjMzLCA5OCwgMjMwLCAxMDEsIDcsIDYsIDEsIDIzMywgMTcxLCAyLCA1MSwgMTM0LCA3LCAKKyAgICAzLCAxLCAyMzMsIDE3MSwgMiwgNTEsIDEzNCwgNywgNiwgMSwgMjMzLCAxNzEsIDIsIDIzMSwgMzcsIDIxNywgNDIsIDcsIDYsIAorICAgIDEsIDIyNiwgMjMwLCAyLCA5MCwgNywgNiwgMSwgMjI0LCAxMTMsIDIsIDIxOCwgMjcsIDcsIDMsIDEsIDExOCwgMiwgOTAsIAorICAgIDcsIDMsIDEsIDIxOCwgMTAwLCAyLCAyNDcsIDIwNywgOTAsIDcsIDYsIDEsIDI0MiwgNDIsIDIsIDI0NywgMjQ2LCA3LCAzLCAKKyAgICAxLCAyNDIsIDQyLCAyLCAyNDcsIDI0NiwgNywgNiwgMSwgMjM1LCAyOCwgMiwgMjQ3LCAyNDYsIDcsIDMsIDEsIDIzNSwgMjgsIAorICAgIDIsIDI0NywgMjQ2LCA3LCA2LCAxLCAyMTIsIDE1MywgMiwgMjQ3LCAyNDYsIDcsIDMsIDEsIDIxMiwgMTUzLCAyLCAyNDcsIAorICAgIDI0NiwgNywgNiwgMSwgMjU0LCA1MiwgNywgNiwgMSwgMjMyLCAxMTAsIDIsIDEwMSwgNywgNiwgMSwgMjE2LCA1OCwgNjEsIAorICAgIDcsIDYsIDEsIDIxNiwgNTgsIDI1NCwgNTIsIDcsIDMsIDEsIDIxNSwgODAsIDIsIDQ2LCAxMDEsIDcsIDYsIDEsIDIxNCwgCisgICAgODMsIDIsIDEwMSwgNywgMywgMSwgMjE0LCA4MywgMiwgMTAxLCA3LCAzLCAxLCAyMTUsIDgwLCAyLCAyNDksIDQxLCA3LCA2LCAKKyAgICAxLCAxNTEsIDI0MiwgNDEsIDcsIDMsIDEsIDE1MSwgMjQyLCA0MSwgNywgMywgMSwgMjE4LCAyNSwgMjI2LCA5LCA3LCAzLCAKKyAgICAxLCAxOTEsIDIsIDIyOCwgMTYxLCA3LCAzLCAxLCAyMTYsIDU4LCAyMjQsIDExMywgMiwgMjE4LCAyNywgNywgMywgMSwgCisgICAgMTU3LCAyLCAxMTUsIDIyMywgMTMxLCAyMzUsIDIxMiwgNywgMSwgMywgNiwgMjE2LCA1OCwgNzQsIDcsIDIxOSwgMTAsIDMsIAorICAgIDEsIDIzNSwgMTQyLCA1OSwgMSwgNiwgMjE1LCA3OSwgNywgNiwgMSwgMjIzLCA0LCAyLCAyMTgsIDE5NSwgMjE4LCAyNywgNywgCisgICAgNiwgMSwgMjEyLCAxNTMsIDIsIDIxOCwgMTk1LCAyMTgsIDI3LCA3OSwgNiwgMSwgMjU0LCA3MywgNzksIDMsIDEsIDI1NCwgCisgICAgNzMsIDc5LCA2LCAxLCAyMTQsIDE1MSwgNzksIDMsIDEsIDIxNCwgMTUxLCA3OSwgNiwgMSwgMjQzLCA4MywgNzksIDMsIDEsIAorICAgIDI0MywgODMsIDc5LCA2LCAxLCAyNDgsIDEzNiwgNzksIDMsIDEsIDI0OCwgMTM2LCA3OSwgNiwgMSwgMjQ1LCAxNTEsIDc5LCAKKyAgICAzLCAxLCAyNDUsIDE1MSwgNzksIDYsIDEsIDIxOSwgMjIwLCA3OSwgMywgMSwgMjE5LCAyMjAsIDc5LCA2LCAxLCAyMTIsIAorICAgIDk0LCA3OSwgMywgMSwgMjEyLCA5NCwgNzksIDYsIDEsIDI0MSwgMjMxLCA3OSwgMywgMSwgMjQxLCAyMzEsIDc5LCA2LCAxLCAKKyAgICAyMTcsIDEzMCwgNzksIDMsIDEsIDIxNywgMTMwLCA3OSwgNiwgMSwgMjQwLCAxMDksIDc5LCAzLCAxLCAyNDAsIDEwOSwgNzksIAorICAgIDYsIDEsIDIzNCwgMjMyLCA3OSwgMywgMSwgMjM0LCAyMzIsIDc5LCA2LCAxLCAyMzMsIDk2LCA3OSwgMywgMSwgMjMzLCA5NiwgCisgICAgNzksIDYsIDEsIDIzMSwgNDIsIDc5LCAzLCAxLCAyMzEsIDQyLCA3OSwgNiwgMSwgMjI5LCA2NCwgNzksIDMsIDEsIDIyOSwgCisgICAgNjQsIDc5LCA2LCAxLCAyMzMsIDI0MiwgNzksIDMsIDEsIDIzMywgMjQyLCA3OSwgNiwgMSwgNzUsIDc5LCAzLCAxLCA3NSwgCisgICAgNzksIDYsIDEsIDIyNSwgMjQwLCA3OSwgMywgMSwgMjI1LCAyNDAsIDc5LCA2LCAxLCAyMjMsIDExMiwgNzksIDMsIDEsIAorICAgIDIyMywgMTEyLCA3OSwgNiwgMSwgMjIwLCA5MSwgNzksIDMsIDEsIDIyMCwgOTEsIDc5LCA2LCAxLCAyMTcsIDI0OCwgNzksIAorICAgIDMsIDEsIDIxNywgMjQ4LCA3OSwgNiwgMSwgMjE1LCAxOTYsIDc5LCAzLCAxLCAyMTUsIDE5NiwgNzksIDYsIDEsIDI0NCwgCisgICAgOTAsIDc5LCAzLCAxLCAyNDQsIDkwLCA3OSwgNiwgMSwgMjM0LCAxMTgsIDc5LCAzLCAxLCAyMzQsIDExOCwgNzksIDYsIDEsIAorICAgIDIyNSwgNDYsIDc5LCAzLCAxLCAyMjUsIDQ2LCA3OSwgNiwgMSwgMjI3LCA0NCwgNzksIDMsIDEsIDIyNywgNDQsIDc5LCA2LCAKKyAgICAxLCAyNDcsIDIwNSwgMjU0LCA3OCwgNzksIDMsIDEsIDI0NywgMjA1LCAyNTQsIDc4LCA3OSwgNiwgMSwgNTMsIDc5LCAyNTQsIAorICAgIDEwMywgNzksIDMsIDEsIDUzLCA3OSwgMjU0LCAxMDMsIDc5LCA2LCAxLCAyNDksIDU1LCAyNDUsIDE1MSwgNzksIDMsIDEsIAorICAgIDI0OSwgNTUsIDI0NSwgMTUxLCA3OSwgNiwgMSwgMjQ3LCAyMDUsIDIzNCwgMjMyLCA3OSwgMywgMSwgMjQ3LCAyMDUsIDIzNCwgCisgICAgMjMyLCA3OSwgNiwgMSwgMjQ3LCAyMDUsIDIyOSwgNjQsIDc5LCAzLCAxLCAyNDcsIDIwNSwgMjI5LCA2NCwgNzksIDYsIDEsIAorICAgIDI0OSwgNTUsIDIyOSwgNjQsIDc5LCAzLCAxLCAyNDksIDU1LCAyMjksIDY0LCA3OSwgNiwgMSwgNTMsIDc5LCAyMjcsIDQ0LCAKKyAgICA3OSwgMywgMSwgNTMsIDc5LCAyMjcsIDQ0LCA3OSwgNiwgMSwgMjIyLCAxNjEsIDc5LCAzLCAxLCAyMjIsIDE2MSwgNzksIDYsIAorICAgIDEsIDI0OSwgNjgsIDIyMCwgMjM1LCA3OSwgMywgMSwgMjQ5LCA2OCwgMjIwLCAyMzUsIDc5LCA2LCAxLCA1MywgNzksIDIyMCwgCisgICAgMjM1LCA3OSwgMywgMSwgNTMsIDc5LCAyMjAsIDIzNSwgNzksIDYsIDEsIDUzLCA3OSwgMjQ1LCA0MCwgNzksIDMsIDEsIDUzLCAKKyAgICA3OSwgMjQ1LCA0MCwgNzksIDYsIDEsIDI1NCwgOTAsIDIzNCwgMTIzLCA3OSwgMywgMSwgMjU0LCA5MCwgMjM0LCAxMjMsIAorICAgIDc5LCA2LCAxLCAyNDcsIDIwNSwgMjQxLCAzMiwgNzksIDMsIDEsIDI0NywgMjA1LCAyNDEsIDMyLCA3OSwgNiwgMSwgNTMsIAorICAgIDc5LCAyNDEsIDMyLCA3OSwgMywgMSwgNTMsIDc5LCAyNDEsIDMyLCA3OSwgNiwgMSwgNTMsIDc5LCAxNTksIDc5LCAzLCAxLCAKKyAgICA1MywgNzksIDE1OSwgNzksIDYsIDEsIDIzMywgMTcwLCAxNTksIDc5LCAzLCAxLCAyMzMsIDE3MCwgMTU5LCA3OSwgNiwgMSwgCisgICAgNTMsIDc5LCAyNDEsIDIwMSwgNzksIDMsIDEsIDUzLCA3OSwgMjQxLCAyMDEsIDc5LCA2LCAxLCA1MywgNzksIDI0MSwgMjM0LCAKKyAgICA3OSwgMywgMSwgNTMsIDc5LCAyNDEsIDIzNCwgNzksIDYsIDEsIDUzLCA3OSwgMjQzLCA3OCwgNzksIDMsIDEsIDUzLCA3OSwgCisgICAgMjQzLCA3OCwgNzksIDYsIDEsIDUzLCA3OSwgMjQ3LCAxMTUsIDc5LCAzLCAxLCA1MywgNzksIDI0NywgMTE1LCA3OSwgNiwgCisgICAgMSwgNTMsIDc5LCAyMjAsIDIwMiwgNzksIDMsIDEsIDUzLCA3OSwgMjIwLCAyMDIsIDc5LCA2LCAxLCA1MywgMjI4LCA2MywgCisgICAgMjIwLCAyMDIsIDc5LCAzLCAxLCA1MywgMjI4LCA2MywgMjIwLCAyMDIsIDc5LCA2LCAxLCA1MywgMjI4LCA2MywgMjI5LCAKKyAgICAxMTMsIDc5LCAzLCAxLCA1MywgMjI4LCA2MywgMjI5LCAxMTMsIDc5LCA2LCAxLCA1MywgMjI4LCA2MywgMjI4LCAxMCwgNzksIAorICAgIDMsIDEsIDUzLCAyMjgsIDYzLCAyMjgsIDEwLCA3OSwgNiwgMSwgNTMsIDIyOCwgNjMsIDIxNCwgMjEsIDc5LCAzLCAxLCA1MywgCisgICAgMjI4LCA2MywgMjE0LCAyMSwgNzksIDE2LCAyMzQsIDI1MCwgNzksIDE2LCAyMzEsIDQzLCAyMjMsIDExMiwgNzksIDE2LCAKKyAgICAyMjUsIDI0MSwgMjIzLCAxMTIsIDc5LCAxNiwgMjE5LCA4NywgNzksIDE2LCAyMTcsIDI0OSwgMjIzLCAxMTIsIDc5LCAxNiwgCisgICAgMjM0LCAxMTksIDIyMywgMTEyLCA3OSwgMTYsIDIyMCwgMjAzLCAyMjAsIDkxLCA3OSwgNiwgMSwgMjQ5LCA1NSwgMjIwLCAKKyAgICAyMzUsIDc5LCAzLCAxLCAyNDksIDU1LCAyMjAsIDIzNSwgNzksIDYsIDEsIDI0OSwgNTUsIDI0MywgNzgsIDc5LCAzLCAxLCAKKyAgICAyNDksIDU1LCAyNDMsIDc4LCA3OSwgMzcsIDIyOSwgNjUsIDQ5LCA3OSwgMzcsIDIxOSwgMTc5LCAyNTMsIDEzOSwgNzksIAorICAgIDM3LCAyMTksIDE3OSwgMjMzLCA0NSwgNzksIDUzLCAyMjgsIDYzLCAyNDMsIDIwMCwgMjE5LCA2OSwgNzksIDUzLCAyMjgsIAorICAgIDYzLCAyNDcsIDE0OSwgMjI0LCAxNTgsIDc3LCA3OSwgNTMsIDIyOCwgNjMsIDIzNSwgMjM0LCAyMjQsIDE1OCwgNzcsIDc5LCAKKyAgICA1MywgMjI4LCA2MywgMjE0LCAyMTgsIDI0NywgMTI0LCA3OSwgMjQzLCAyMjgsIDEyMiwgMjQyLCA5LCA3OSwgMjQzLCAyMDAsIAorICAgIDIxOSwgNjksIDc5LCAyMzAsIDE5NCwgMjQ3LCAxMjQsIDEwMCwgMywgMSwgMjU0LCAzMiwgMTAwLCAzLCAxLCAyNTIsIDcxLCAKKyAgICAxMDAsIDMsIDEsIDI0MywgODIsIDEwMCwgMywgMSwgMjQ3LCA4MiwgMTAwLCAzLCAxLCAyNDUsIDEwOCwgMTAwLCAzLCAxLCAKKyAgICAyMTQsIDE0MSwgMTAwLCAzLCAxLCAyMTIsIDgyLCAxMDAsIDMsIDEsIDIxOCwgMTEsIDEwMCwgMywgMSwgMjM1LCAyNTEsIAorICAgIDEwMCwgMywgMSwgMjM0LCAyMzksIDEwMCwgMywgMSwgMjMzLCAxMDQsIDEwMCwgMywgMSwgMjMxLCAyNDgsIDEwMCwgMywgMSwgCisgICAgMjMwLCAxNSwgMTAwLCAzLCAxLCAyMjcsIDYyLCAxMDAsIDMsIDEsIDIyNiwgMTQ1LCAxMDAsIDMsIDEsIDIxMiwgNzEsIAorICAgIDEwMCwgMywgMSwgMjI0LCA2MSwgMTAwLCAzLCAxLCAyMjIsIDE1OSwgMTAwLCAzLCAxLCAyMTgsIDEsIDEwMCwgMywgMSwgCisgICAgMjE1LCAxNjAsIDEwMCwgMywgMSwgMjI2LCAxNiwgMTAwLCAzLCAxLCAyMzQsIDEyNywgMTAwLCAzLCAxLCAyNDIsIDIxNywgCisgICAgMTAwLCAzLCAxLCAyMjQsIDIxNywgMTAwLCAzLCAxLCAyMjAsIDIwMCwgMTAwLCAzLCAxLCAyNTAsIDM0LCAxMDAsIDMsIDEsIAorICAgIDI1MCwgMTk1LCAxMDAsIDMsIDEsIDIzNSwgMTAzLCAxMDAsIDMsIDEsIDI0OSwgMjMzLCAxMDAsIDMsIDEsIDI1MCwgNzksIAorICAgIDEwMCwgMywgMSwgMjEzLCAxNTEsIDEwMCwgMywgMSwgMjM1LCAxMTMsIDEwMCwgMywgMSwgMjQyLCAyNCwgMTAwLCAzLCAxLCAKKyAgICAyNDEsIDIyMiwgMTAwLCAzLCAxLCAyNDEsIDE2MCwgMTAwLCAzLCAxLCAyMTQsIDYsIDEwMCwgMywgMSwgMjQxLCAyNDMsIAorICAgIDEwMCwgMywgMSwgMjQxLCA1MSwgMjE3LCA2MiwgMSwgMTg2LCAyMTcsIDYyLCAxLCAyMTMsIDg3LCAyMTcsIDYyLCAxLCAKKyAgICAyMTMsIDg2LCAyMTcsIDYyLCAxLCAyMTMsIDc2LCAyMTcsIDYyLCAxLCAyMTMsIDc0LCAyMTcsIDYyLCAxLCAyNTEsIDIwOSwgCisgICAgMjU0LCAxNzYsIDIxMywgNzAsIDIxNywgNjIsIDEsIDIxMywgNzAsIDIxNywgNjIsIDEsIDIxMywgODQsIDIxNywgNjIsIDEsIAorICAgIDIxMywgODEsIDIxNywgNjIsIDEsIDIxMywgODMsIDIxNywgNjIsIDEsIDIxMywgODIsIDIxNywgNjIsIDEsIDIxMywgMywgCisgICAgMjE3LCA2MiwgMSwgMjEzLCA3OCwgMjE3LCA2MiwgMSwgMjEzLCA2OCwgMjE3LCA2MiwgMSwgMjE2LCA3OSwgMjEzLCA2OCwgCisgICAgMjE3LCA2MiwgMSwgMjEzLCA2NSwgMjE3LCA2MiwgMSwgMjEzLCA3MiwgMjE3LCA2MiwgMSwgMjUxLCAyMDksIDI1NCwgMTc2LCAKKyAgICAyMTMsIDcyLCAyMTcsIDYyLCAxLCAyMTYsIDc5LCAyMTMsIDcyLCAyMTcsIDYyLCAxLCAyMTMsIDcxLCAyMTcsIDYyLCAxLCAKKyAgICAyMTMsIDkxLCAyMTcsIDYyLCAxLCAyMTMsIDY2LCAyMTcsIDYyLCAxLCAyMTYsIDc5LCAyMTMsIDY2LCAyMTcsIDYyLCAxLCAKKyAgICAyMTMsIDU2LCAyMTcsIDYyLCAxLCAyMTYsIDc5LCAyMTMsIDU2LCAyMTcsIDYyLCAxLCAyMTIsIDI1NSwgMjE3LCA2MiwgMSwgCisgICAgMjEzLCA0MCwgMjE3LCA2MiwgMSwgMjU0LCAxMTIsIDIxMywgNDAsIDIxNywgNjIsIDEsIDIxNiwgNzksIDIxMywgNDAsIAorICAgIDIxNywgNjIsIDEsIDIxMywgNjQsIDIxNywgNjIsIDEsIDIxMywgNjMsIDIxNywgNjIsIDEsIDIxMywgNjAsIDIxNywgNjIsIAorICAgIDEsIDIxNiwgNzksIDIxMywgNzMsIDIxNywgNjIsIDEsIDIxNiwgNzksIDIxMywgNTgsIDIxNywgNjIsIDEsIDIxMywgNTcsIAorICAgIDIxNywgNjIsIDEsIDIxMiwgMjAzLCAyMTcsIDYyLCAxLCAyMTMsIDU0LCAyMTcsIDYyLCAxLCAyMTMsIDUzLCAyMTcsIDYyLCAKKyAgICAxLCAyMTMsIDc1LCAyMTcsIDYyLCAxLCAyMTYsIDc5LCAyMTMsIDc1LCAyMTcsIDYyLCAxLCAyNTMsIDc5LCAyMTMsIDc1LCAKKyAgICAyMTcsIDYyLCAxLCAyMTMsIDUyLCAyMTcsIDYyLCAxLCAyMTMsIDUwLCAyMTcsIDYyLCAxLCAyMTMsIDUxLCAyMTcsIDYyLCAKKyAgICAxLCAyMTMsIDQ5LCAyMTcsIDYyLCAxLCAyMTMsIDQ4LCAyMTcsIDYyLCAxLCAyMTMsIDg1LCAyMTcsIDYyLCAxLCAyMTMsIAorICAgIDQ2LCAyMTcsIDYyLCAxLCAyMTMsIDQ1LCAyMTcsIDYyLCAxLCAyMTMsIDQ0LCAyMTcsIDYyLCAxLCAyMTMsIDQzLCAyMTcsIAorICAgIDYyLCAxLCAyMTMsIDQxLCAyMTcsIDYyLCAxLCAyMTcsIDI0MSwgMjEzLCA0MSwgMjE3LCA2MiwgMSwgMjEzLCAzOSwgMjE3LCAKKyAgICA2MiwgNTksIDEsIDIzMywgMTQ5LCA3NywgMjE3LCA2MiwgMjIxLCA1OCwgNzcsIDIxNywgNjIsIDI0OSwgMTMzLCAyMzUsIAorICAgIDY2LCAyOCwgNCwgMjMyLCAyMDcsIDI4LCA0LCAyMzAsIDIzMCwgMjgsIDQsIDIyMywgMTEwLCAyOCwgNCwgMjE5LCAyNDEsIAorICAgIDI4LCA0LCAyMjAsIDE4NiwgMjgsIDQsIDI1MSwgMTI3LCAyOCwgNCwgMjE2LCAyNTIsIDI4LCA0LCAyNDksIDE3NCwgMjgsIAorICAgIDQsIDIyOCwgMTgzLCAyOCwgNCwgMjI3LCAyNTIsIDI4LCA0LCAyNDIsIDE1NiwgMjI3LCAxMjAsIDI4LCA0LCAyMTIsIDE1LCAKKyAgICAyOCwgNCwgMjQ3LCA5NywgMjgsIDQsIDI0OCwgNTUsIDI4LCA0LCAyMzUsIDcwLCAyOCwgNCwgMjE3LCAxMDgsIDI4LCA0LCAKKyAgICAyNTAsIDIyLCAyOCwgNCwgMjI1LCAyNTIsIDI4LCA0LCAyMjUsIDE0OSwgMjgsIDQsIDI0MiwgMjMxLCAyOCwgNCwgMjQyLCAKKyAgICAyMjcsIDI4LCA0LCAyNDIsIDIyOCwgMjgsIDQsIDI0MiwgMjI5LCAyOCwgNCwgMjE5LCAxNTcsIDI4LCA0LCAyMTksIDExNywgCisgICAgMjgsIDQsIDIxOSwgMTI4LCAyOCwgNCwgMjE5LCAxNTYsIDI4LCA0LCAyMTksIDEzMiwgMjgsIDQsIDIxOSwgMTMzLCAyOCwgCisgICAgNCwgMjE5LCAxMjEsIDI4LCA0LCAyNTAsIDE0NiwgMjgsIDQsIDI1MCwgMTI2LCAyOCwgNCwgMjUwLCAxMjgsIDI4LCA0LCAKKyAgICAyNTAsIDE0NSwgMjgsIDQsIDI1MCwgMTQzLCAyOCwgNCwgMjUwLCAxNDQsIDI4LCA0LCAyNTAsIDEyNywgMjgsIDQsIDIxMSwgCisgICAgMjQyLCAyOCwgNCwgMjExLCAyMjIsIDI4LCA0LCAyMTEsIDIzMywgMjgsIDQsIDIxMSwgMjQxLCAyOCwgNCwgMjExLCAyMzYsIAorICAgIDI4LCA0LCAyMTEsIDIzNywgMjgsIDQsIDIxMSwgMjI1LCAyOCwgNCwgMjUwLCAxNDIsIDI4LCA0LCAyNTAsIDEyOSwgMjgsIAorICAgIDQsIDI1MCwgMTMxLCAyOCwgNCwgMjUwLCAxNDEsIDI4LCA0LCAyNTAsIDEzOSwgMjgsIDQsIDI1MCwgMTQwLCAyOCwgNCwgCisgICAgMjUwLCAxMzAsIDI4LCA0LCAyMjQsIDEyNSwgMjgsIDQsIDIyNCwgMTE1LCAyOCwgNCwgMjI0LCAxMjEsIDI4LCA0LCAyMjQsIAorICAgIDEyNCwgMjgsIDQsIDIyNCwgMTIyLCAyOCwgNCwgMjI0LCAxMjMsIDI4LCA0LCAyMjQsIDEyMCwgMjgsIDQsIDIzMywgMTgxLCAKKyAgICAyOCwgNCwgMjMzLCAxNzMsIDI4LCA0LCAyMzMsIDE3NiwgMjgsIDQsIDIzMywgMTgwLCAyOCwgNCwgMjMzLCAxNzcsIDI4LCAKKyAgICA0LCAyMzMsIDE3OCwgMjgsIDQsIDIzMywgMTc0LCAyOCwgNCwgMjEzLCAxMTgsIDI4LCA0LCAyMTMsIDEwOCwgMjgsIDQsIAorICAgIDIxMywgMTE0LCAyOCwgNCwgMjEzLCAxMTcsIDI4LCA0LCAyMTMsIDExNSwgMjgsIDQsIDIxMywgMTE2LCAyOCwgNCwgMjEzLCAKKyAgICAxMTMsIDI4LCA0LCAyNDIsIDUyLCAyOCwgNCwgMjQyLCA0MywgMjgsIDQsIDI0MiwgNDYsIDI4LCA0LCAyNDIsIDUxLCAyOCwgCisgICAgNCwgMjQyLCA0OCwgMjgsIDQsIDI0MiwgNDksIDI4LCA0LCAyNDIsIDQ1LCAzNywgMzMsIDEsIDI1MSwgMjUxLCAzNywgMzMsIAorICAgIDEsIDIxNCwgMjMyLCAzNywgMzMsIDEsIDI0MiwgMjEyLCAzNywgMzMsIDEsIDI0OCwgNDEsIDM3LCAzMywgMSwgMjEyLCA2NywgCisgICAgMzcsIDMzLCAxLCAyMTIsIDg3LCAzNywgMzMsIDEsIDE4MSwgMzcsIDMzLCAxLCAyNDUsIDEzMSwgMzcsIDMzLCAxLCAyNDUsIAorICAgIDExNywgMzcsIDMzLCAxLCAyNDUsIDEwOCwgMzcsIDMzLCAxLCA3NSwgMzcsIDMzLCAxLCAyMjYsIDk2LCAzNywgMzMsIDEsIAorICAgIDI0NSwgNTUsIDM3LCAzMywgMSwgMjQ1LCA0NSwgMzcsIDMzLCAxLCAyMTcsIDIyOSwgMzcsIDMzLCAxLCAxNTksIDM3LCAzMywgCisgICAgMSwgMjE2LCAxMzYsIDM3LCAzMywgMSwgMjUwLCA2NywgMzcsIDMzLCAxLCAyMjEsIDI0LCAzNywgMzMsIDEsIDIyMCwgMjQ1LCAKKyAgICAzNywgMzMsIDEsIDI0NCwgNTEsIDM3LCAzMywgMSwgMjQ1LCA0NCwgMzcsIDMzLCAxLCA2MSwgMzcsIDMzLCAxLCAyMzYsIAorICAgIDU1LCAzNywgMzMsIDEsIDI0NywgMTEzLCAzNywgMzMsIDEsIDIzMCwgMjEwLCAyMTUsIDE3NSwgMzcsIDMzLCAxLCAyMTMsIAorICAgIDQ5LCAzNywgMzMsIDEsIDIxMiwgMjAzLCAzNywgMzMsIDEsIDIzNSwgMTgxLCA2MSwgMzcsIDMzLCAxLCAyMzIsIDIyMSwgCisgICAgMjEyLCAxNzQsIDM3LCAzMywgMSwgMjUxLCAxNzIsIDIxMiwgMTc0LCAzNywgMzMsIDEsIDIzNSwgMTgxLCAyNTEsIDE3MiwgCisgICAgMjEyLCAxNzQsIDQ2LCAyNTQsIDE5LCAyMTksIDUsIDIzMSwgMjE3LCA0NiwgMjU0LCAxOSwgMjQ2LCA3MiwgMjE5LCA1LCAKKyAgICAyMzEsIDIxNywgNDIsIDIxOSwgNSwgMTI1LCA0NiwgMjE5LCA1LCAxMjUsIDQyLCAyNDYsIDcyLCAyMTksIDUsIDEyNSwgNDYsIAorICAgIDI0NiwgNzIsIDIxOSwgNSwgMTI1LCAyMjQsIDQ4LCAyMzUsIDE5OSwgMjMxLCAyMTcsIDIyNCwgNDgsIDI0NiwgNzIsIDIzNSwgCisgICAgMTk5LCAyMzEsIDIxNywgMjQ2LCA3MiwgMjE2LCAxOTksIDIzMSwgMjE3LCA0MiwgMjE2LCAxOTksIDEyNSwgNDYsIDIxNiwgCisgICAgMTk5LCAxMjUsIDIyNCwgNDgsIDIxOSwgMTY2LCA0MiwgMjI0LCA0OCwgMjI3LCA2NCwgMTI1LCA0NiwgMjI0LCA0OCwgMjI3LCAKKyAgICA2NCwgMTI1LCAyNDUsIDE2NiwgMjQ5LCA5NywgMjI2LCAxNDEsIDI0MywgMjQ3LCAyMjYsIDE0MSwgMjIzLCAyMDIsIDI0MywgCisgICAgMjQ3LCAyMjYsIDE0MSwgMjQwLCAxNTcsIDI0NiwgNzIsIDIyNywgMTE1LCAyNDYsIDU4LCAyNTQsIDI4LCAyMTUsIDEyNCwgCisgICAgMjU0LCAyOCwgMjQ2LCA3MiwgMjIzLCAxNDQsIDI1NCwgMTgsIDUxLCAyMjcsIDExMiwgMjQwLCAxNjAsIDIzNSwgMTkxLCAKKyAgICAyMzUsIDE5OCwgMjI2LCAxODYsIDI1MSwgODEsIDI0MCwgMTYxLCAyLCAyNDcsIDIwOSwgMjE3LCA0MywgMiwgMjIzLCAxMzEsIAorICAgIDQ5LCA0MiwgMTE1LCAyMjYsIDEzMywgMTI1LCA0NiwgMTE1LCAyMjYsIDEzMywgMTI1LCAyMTcsIDQzLCAyLCA2MiwgNDksIAorICAgIDIxNywgNDMsIDIsIDYyLCA1NSwgNDIsIDcxLCAyNTIsIDYwLCAyLCAyMjQsIDE1MiwgNDYsIDcxLCAyNTIsIDYwLCAyLCAKKyAgICAyMjQsIDE1MiwgMjE2LCAyMjcsIDQyLCAxNTEsIDEyNSwgMjE2LCAyMjcsIDQ2LCAxNTEsIDEyNSwgMjUxLCAxMDEsIDQyLCAKKyAgICAxNTEsIDEyNSwgMjUxLCAxMDEsIDQ2LCAxNTEsIDEyNSwgNDIsIDIyMCwgMTEzLCAxMTEsIDEyNSwgNDYsIDIyMCwgMTEzLCAKKyAgICAxMTEsIDEyNSwgNDIsIDUxLCAyMjYsIDEzMSwgNDYsIDUxLCAyMjYsIDEzMSwgMTE3LCAxNzYsIDExMCwgMTIyLCA2MiwgCisgICAgMjI1LCAyNiwgMTIyLCA2MiwgMTEwLCAxMTcsIDE3NiwgMjI1LCAyNiwgOTEsIDI0MywgMjM3LCA2MiwgMjI1LCAyNiwgMjQ0LCAKKyAgICA1MCwgNjIsIDc3LCAyMjMsIDIwMiwgMjI0LCAxNTgsIDc3LCA3MSwgMjE3LCA0MiwgMjIzLCAxMzEsIDIyNSwgMTQ0LCAyMTMsIAorICAgIDE5NiwgMjIxLCA1OCwgMjMxLCAzNywgMjQ3LCA3NCwgOSwgMzQsIDIyMywgMjI3LCA5LCAzNCwgMjQ5LCAyMDMsIDksIDM0LCAKKyAgICAyMjIsIDk1LCAxMTYsIDksIDM0LCAyMjIsIDk1LCAxMDksIDksIDM0LCAyMjIsIDk1LCAxNjYsIDksIDM0LCAyMjYsIDQzLCAKKyAgICA5LCAzNCwgMjUxLCA4OSwgOSwgMzQsIDIxOCwgNDAsIDksIDM0LCAyMzQsIDQyLCAxMTYsIDksIDM0LCAyMzQsIDQyLCAxMDksIAorICAgIDksIDM0LCAyNDcsIDEyMiwgOSwgMzQsIDIyMiwgOTgsIDksIDM0LCAzLCAxMTYsIDksIDM0LCAzLCAxMDksIDksIDM0LCAKKyAgICAyMzMsIDEyMSwgMTE2LCA5LCAzNCwgMjMzLCAxMjEsIDEwOSwgOSwgMzQsIDIzMywgMTIxLCAxNjYsIDksIDM0LCAyMzMsIAorICAgIDEyMSwgMTYzLCA5LCAzNCwgMjE5LCAyNTIsIDksIDM0LCAyMTcsIDk4LCA5LCAzNCwgMjE5LCAyNTAsIDExNiwgOSwgMzQsIAorICAgIDIxOSwgMjUwLCAxMDksIDksIDM0LCAyNDEsIDIxMiwgMTE2LCA5LCAzNCwgMjQxLCAyMTIsIDEwOSwgOSwgMzQsIDI0MSwgCisgICAgMjU0LCA5LCAzNCwgMjI0LCAzOSwgOSwgMzQsIDI1MCwgMTksIDksIDM0LCAyMTgsIDIzOCwgOSwgMzQsIDIzMCwgMTk4LCA5LCAKKyAgICAzNCwgMjQ4LCAzOSwgOSwgMzQsIDIzMCwgMTkwLCA5LCAzNCwgMjQ5LCAyMTgsIDksIDM0LCAyMTQsIDI1LCAxMTYsIDksIAorICAgIDM0LCAyMTQsIDI1LCAxMDksIDksIDM0LCAyNDQsIDY1LCA5LCAzNCwgMjI2LCAxMDYsIDExNiwgOSwgMzQsIDIyNiwgMTA2LCAKKyAgICAxMDksIDksIDM0LCAyMjAsIDg2LCAxNTEsIDIxNiwgMTk0LCAyMTYsIDE0NiwgOSwgMzQsIDI0OSwgODQsIDksIDM0LCAyNDcsIAorICAgIDkwLCA5LCAzNCwgMjM1LCAxMzUsIDksIDM0LCAyNTEsIDEyMiwgNjUsIDI0OSwgMTg3LCA5LCAzNCwgMjQ0LCAyMzksIDksIAorICAgIDM0LCAyMTksIDE4MSwgMTE2LCA5LCAzNCwgMjE5LCAxODEsIDEwOSwgOSwgMzQsIDI1MiwgNzMsIDksIDM0LCAyMjAsIDkzLCAKKyAgICA5LCAzNCwgMjUwLCAyNDksIDIyMCwgOTMsIDksIDM0LCAyMjksIDE3MiwgMTE2LCA5LCAzNCwgMjI5LCAxNzIsIDEwOSwgOSwgCisgICAgMzQsIDIyOSwgMTcyLCAxNjYsIDksIDM0LCAyMjksIDE3MiwgMTYzLCA5LCAzNCwgMjMxLCAxMTEsIDksIDM0LCAyMjAsIAorICAgIDIzNywgOSwgMzQsIDIyNCwgNDUsIDksIDM0LCAyNDUsIDQsIDksIDM0LCAyMjcsIDc1LCA5LCAzNCwgMjUxLCA2MSwgMTE2LCAKKyAgICA5LCAzNCwgMjUxLCA2MSwgMTA5LCA5LCAzNCwgMjMxLCAxNTEsIDksIDM0LCAyMzAsIDE5MywgOSwgMzQsIDI0MiwgMTE3LCAKKyAgICAxMTYsIDksIDM0LCAyNDIsIDExNywgMTA5LCA5LCAzNCwgMjQyLCAxMTcsIDE2NiwgOSwgMzQsIDIxNywgNjAsIDksIDM0LCAKKyAgICAyNDksIDE4NiwgOSwgMzQsIDIxMywgMjUwLCAxMTYsIDksIDM0LCAyMTMsIDI1MCwgMTA5LCA5LCAzNCwgMjUwLCAyNDksIAorICAgIDIyMiwgODksIDksIDM0LCAyMjAsIDg2LCAyNDAsIDIzNSwgOSwgMzQsIDI0MCwgMjM1LCA5LCAzNCwgMjUwLCAyNDksIDIxOSwgCisgICAgMTkwLCA5LCAzNCwgMjUwLCAyNDksIDIyMCwgMjMyLCA5LCAzNCwgMjQ0LCAxLCA5LCAzNCwgMjUwLCAyNDksIDI1MCwgMTYwLCAKKyAgICA5LCAzNCwgMjIwLCA4NiwgMjE0LCA0MSwgOSwgMzQsIDIxNCwgNDIsIDExNiwgOSwgMzQsIDIxNCwgNDIsIDEwOSwgOSwgMzQsIAorICAgIDI0OSwgMjIwLCA5LCAzNCwgMjUwLCAyNDksIDI0MiwgMTQyLCA5LCAzNCwgMTg0LCAxMTYsIDksIDM0LCAxODQsIDEwOSwgOSwgCisgICAgMzQsIDI1MCwgMjQ5LCAyMzIsIDE5MCwgOSwgMzQsIDI1MCwgMjQ5LCAyNDMsIDY0LCA5LCAzNCwgMjMwLCAxODksIDExNiwgCisgICAgOSwgMzQsIDIzMCwgMTg5LCAxMDksIDksIDM0LCAyMjQsIDUwLCA5LCAzNCwgMjUxLCAxMzAsIDksIDM0LCAyNTAsIDI0OSwgCisgICAgMjE4LCA3LCAyMzMsIDc2LCA5LCAzNCwgMjUwLCAyNDksIDIzMywgNzcsIDksIDM0LCAyNTAsIDI0OSwgMjEzLCAyMjQsIDksIAorICAgIDM0LCAyNTAsIDI0OSwgMjQ0LCAxNSwgOSwgMzQsIDI0NSwgMTc0LCAxMTYsIDksIDM0LCAyNDUsIDE3NCwgMTA5LCA5LCAzNCwgCisgICAgMjQ1LCAxNzQsIDE2NiwgOSwgMzQsIDI1MCwgMjQ5LCAyNDUsIDE3MywgOSwgMzQsIDI0MSwgMjE5LCA5LCAzNCwgMjUwLCAKKyAgICAyNDksIDI0MCwgMjMyLCA5LCAzNCwgMjUxLCAxMTksIDksIDM0LCAyNDIsIDE5OCwgOSwgMzQsIDI1MCwgMjQ5LCAyNDQsIAorICAgIDU5LCA5LCAzNCwgMjUwLCAyNDksIDI1MSwgMTYwLCA5LCAzNCwgMjUwLCAyNDksIDIyMiwgMTcyLCA5LCAzNCwgMjIwLCA4NiwgCisgICAgMjEzLCAyNDMsIDksIDM0LCAyMjAsIDg2LCAyMTMsIDMyLCA5LCAzNCwgMjUwLCAyNDksIDI0MywgMjE0LCA5LCAzNCwgMjM1LCAKKyAgICAxNDEsIDI0NSwgOCwgOSwgMzQsIDI1MCwgMjQ5LCAyNDUsIDgsIDksIDM0LCAyMzUsIDE0MSwgMjE2LCAyMjgsIDksIDM0LCAKKyAgICAyNTAsIDI0OSwgMjE2LCAyMjgsIDksIDM0LCAyMzUsIDE0MSwgMjQ2LCA1MCwgOSwgMzQsIDI1MCwgMjQ5LCAyNDYsIDUwLCAKKyAgICA5LCAzNCwgMjE2LCA1NSwgOSwgMzQsIDIzNSwgMTQxLCAyMTYsIDU1LCA5LCAzNCwgMjUwLCAyNDksIDIxNiwgNTUsIDU3LCAKKyAgICAzNCwgMTE2LCA1NywgMzQsIDIzMiwgMjQyLCA1NywgMzQsIDI0NywgNzQsIDU3LCAzNCwgMjIwLCAyMywgNTcsIDM0LCAyMjIsIAorICAgIDk0LCA1NywgMzQsIDEwMSwgNTcsIDM0LCAxMDksIDU3LCAzNCwgMjMzLCA5LCA1NywgMzQsIDIzMSwgMjQ4LCA1NywgMzQsIAorICAgIDIzMywgNTcsIDU3LCAzNCwgMjQ1LCA4OCwgNTcsIDM0LCAxOTUsIDU3LCAzNCwgMTE5LCAyNTEsIDg5LCA1NywgMzQsIDI0OSwgCisgICAgODYsIDU3LCAzNCwgMjQwLCAxMDQsIDU3LCAzNCwgMjE4LCA0MCwgNTcsIDM0LCAyMjcsIDQwLCAyNTEsIDg5LCA1NywgMzQsIAorICAgIDIzNCwgNDEsIDU3LCAzNCwgMjI1LCAxMDQsIDU3LCAzNCwgMjEzLCAxOTAsIDU3LCAzNCwgMjE5LCAxNzUsIDU3LCAzNCwgCisgICAgNDYsIDIyNywgNDAsIDI1MSwgODksIDU3LCAzNCwgMjQxLCAxNjEsIDI0NSwgMTAzLCA1NywgMzQsIDIxNywgMjAwLCA1NywgCisgICAgMzQsIDI0NywgMTIyLCA1NywgMzQsIDIyMiwgOTgsIDU3LCAzNCwgMjQ5LCAyMDMsIDU3LCAzNCwgMjI1LCA2NSwgNTcsIDM0LCAKKyAgICAyNTQsIDEyMCwgNTcsIDM0LCAyMzAsIDE4MCwgNTcsIDM0LCAyNDUsIDEwMywgNTcsIDM0LCAyNDUsIDE3OSwgNTcsIDM0LCAKKyAgICAyMjIsIDExOCwgNTcsIDM0LCAyNDIsIDE1MCwgNTcsIDM0LCAyNDIsIDE1MSwgMjIwLCA5LCA1NywgMzQsIDI0NSwgNywgNTcsIAorICAgIDM0LCAyNTEsIDE3MSwgNTcsIDM0LCAyMTMsIDIwOCwgNTcsIDM0LCAyNTAsIDM4LCA1NywgMzQsIDIyMywgOTgsIDU3LCAzNCwgCisgICAgMjM1LCAyNDcsIDU3LCAzNCwgMjIwLCA3LCA1NywgMzQsIDIzMywgMTIwLCA1NywgMzQsIDI0OSwgOTUsIDU3LCAzNCwgMjE5LCAKKyAgICAxNjksIDU3LCAzNCwgMjMwLCAxODUsIDU3LCAzNCwgMjIzLCAxMjEsIDU3LCAzNCwgMjEzLCAxOTMsIDU3LCAzNCwgMjI3LCAKKyAgICA1NiwgNTcsIDM0LCAyMTYsIDYxLCA1NywgMzQsIDI0NiwgMzUsIDU3LCAzNCwgMjIwLCAxNzUsIDIxNywgOTgsIDU3LCAzNCwgCisgICAgMjQ2LCA3MiwgMjQ5LCAyMDMsIDU3LCAzNCwgMTg0LCAyMTksIDQ4LCA1NywgMzQsIDExNywgMjQxLCAyNDksIDU3LCAzNCwgCisgICAgMjIwLCAxODAsIDU3LCAzNCwgMjUxLCA5NSwgNTcsIDM0LCAyMTksIDI0OSwgNTcsIDM0LCAyNTEsIDY1LCA1NywgMzQsIAorICAgIDIxOSwgNzgsIDU3LCAzNCwgMjQxLCAyMTEsIDU3LCAzNCwgMjQyLCAxMCwgNTcsIDM0LCAyNDcsIDc3LCA1NywgMzQsIDI0MSwgCisgICAgMjU0LCA1NywgMzQsIDI1MSwgODEsIDU3LCAzNCwgMjI0LCAzOSwgNTcsIDM0LCAyMjIsIDEwNiwgNTcsIDM0LCAyNDcsIAorICAgIDE1MSwgNTcsIDM0LCAyNTMsIDg0LCA1NywgMzQsIDIxOSwgMTY2LCA1NywgMzQsIDIyOCwgMTYyLCA1NywgMzQsIDIxOCwgCisgICAgMjM4LCA1NywgMzQsIDIyMiwgMTI5LCA1NywgMzQsIDIzMCwgMTk4LCA1NywgMzQsIDIxNiwgMTkzLCA1NywgMzQsIDIzMywgCisgICAgMTQ1LCA1NywgMzQsIDIxOSwgNjksIDU3LCAzNCwgMjQ4LCAzOSwgNTcsIDM0LCAyMTQsIDUsIDU3LCAzNCwgMjQ3LCAxMDAsIAorICAgIDIyOCwgMTYyLCA1NywgMzQsIDI0OSwgMTU0LCA1NywgMzQsIDI0MywgMTk0LCA1NywgMzQsIDI0OSwgMjE0LCA1NywgMzQsIAorICAgIDIxOSwgODIsIDU3LCAzNCwgMjE0LCAyNCwgNTcsIDM0LCAyNDQsIDY1LCA1NywgMzQsIDI0OSwgMjExLCA1NywgMzQsIDI0NCwgCisgICAgMTI5LCA1NywgMzQsIDUxLCAyMTMsIDE2NiwgNTcsIDM0LCAxNTEsIDIxNiwgMTk0LCAyMTYsIDE0NiwgNTcsIDM0LCAyMjAsIAorICAgIDE3LCA1NywgMzQsIDI0NCwgMTM5LCA1NywgMzQsIDI0OSwgODQsIDU3LCAzNCwgMjQ3LCA5MCwgNTcsIDM0LCAyMjUsIDYyLCAKKyAgICA1NywgMzQsIDIzNSwgMTM1LCA1NywgMzQsIDIzMSwgMTMxLCA1NywgMzQsIDIxNywgNDEsIDU3LCAzNCwgMjE4LCAxOTAsIAorICAgIDU3LCAzNCwgMjMzLCAzLCA1NywgMzQsIDIxNSwgMTAzLCA1NywgMzQsIDI0NCwgODksIDU3LCAzNCwgMjUxLCAxMjIsIDY1LCAKKyAgICAyNDksIDE4NywgNTcsIDM0LCAyMjAsIDExNCwgNTcsIDM0LCAyNDYsIDcyLCAyMTcsIDE5NSwgNTcsIDM0LCAyMTMsIDIzOCwgCisgICAgNTcsIDM0LCAyMjAsIDMxLCA1NywgMzQsIDI0NywgMTM5LCA1NywgMzQsIDI0NCwgMjM5LCA1NywgMzQsIDIxOSwgMTkzLCAKKyAgICA1NywgMzQsIDY4LCA1NywgMzQsIDIxOSwgNzEsIDU3LCAzNCwgMjE5LCAxODAsIDU3LCAzNCwgMjE2LCAyMTIsIDU3LCAzNCwgCisgICAgMjQyLCAxMjMsIDU3LCAzNCwgMjUwLCAxNTEsIDU3LCAzNCwgMjE5LCA5OSwgNTcsIDM0LCAyNTIsIDczLCA1NywgMzQsIAorICAgIDIyMywgMTg0LCA1NywgMzQsIDIyMCwgOTMsIDU3LCAzNCwgMjM1LCAxMzAsIDU3LCAzNCwgMjI5LCAxNzEsIDU3LCAzNCwgCisgICAgMjIwLCAyMzcsIDU3LCAzNCwgMjQ0LCAxMTgsIDU3LCAzNCwgMjI3LCA3NSwgNTcsIDM0LCAyNTQsIDI3LCA1NywgMzQsIAorICAgIDIyNSwgMTYyLCA1NywgMzQsIDI0NSwgMTgzLCA1NywgMzQsIDI1MSwgNjAsIDU3LCAzNCwgMjMxLCAxNTEsIDU3LCAzNCwgCisgICAgMjMwLCAyNTIsIDU3LCAzNCwgMjIxLCA3NiwgNTcsIDM0LCAyNTMsIDE2NywgNTcsIDM0LCAyMzAsIDE5MywgNTcsIDM0LCAKKyAgICAyMTYsIDIzMiwgNTcsIDM0LCAyMjcsIDMxLCA1NywgMzQsIDI1MSwgMTI0LCA1NywgMzQsIDIxOSwgNjcsIDU3LCAzNCwgCisgICAgMjQ5LCAxNjMsIDU3LCAzNCwgMjQyLCAxMTYsIDU3LCAzNCwgMjE3LCA2MCwgNTcsIDM0LCAyMzUsIDIxNCwgNTcsIDM0LCAKKyAgICAyNTEsIDEzNCwgNTcsIDM0LCAyMTQsIDQyLCAyNDUsIDEwMywgNTcsIDM0LCAyNDksIDE4NiwgNTcsIDM0LCAyMTMsIDI0OSwgCisgICAgNTcsIDM0LCAyMjIsIDg5LCA1NywgMzQsIDI0MCwgMjM1LCA1NywgMzQsIDIxOSwgMTkwLCA1NywgMzQsIDIxNCwgMjU0LCAKKyAgICA1NywgMzQsIDI1MSwgMjQ4LCA1NywgMzQsIDIyNSwgMjA1LCA1NywgMzQsIDI1MiwgOTIsIDU3LCAzNCwgMjIwLCAyMzIsIAorICAgIDU3LCAzNCwgMjI0LCAzLCA1NywgMzQsIDIyMywgMzcsIDU3LCAzNCwgMjQ0LCAxLCA1NywgMzQsIDI1MSwgMTIzLCA1NywgCisgICAgMzQsIDI1MCwgMTYwLCA1NywgMzQsIDI1MSwgMTQ5LCA1NywgMzQsIDIzMCwgMTk1LCA1NywgMzQsIDIxNCwgNDEsIDU3LCAKKyAgICAzNCwgMjQ5LCAyMjAsIDU3LCAzNCwgMjEzLCAyMjEsIDU3LCAzNCwgMjQ3LCAxMzIsIDU3LCAzNCwgMjE0LCAxNDIsIDU3LCAKKyAgICAzNCwgMjQyLCAxNDIsIDU3LCAzNCwgMjMyLCAxOTAsIDU3LCAzNCwgMjQzLCA2NCwgNTcsIDM0LCAyMzAsIDE4OCwgNTcsIAorICAgIDM0LCAyMjAsIDIyLCA1NywgMzQsIDIyMCwgMTc1LCAyMTgsIDI2LCAyNTEsIDE2MCwgNTcsIDM0LCAyMjQsIDUwLCA1NywgCisgICAgMzQsIDI1MSwgMTMwLCA1NywgMzQsIDIxMywgMTg1LCA1NywgMzQsIDI0NCwgMTU4LCA1NywgMzQsIDIzMywgNzYsIDU3LCAKKyAgICAzNCwgMjE4LCA3LCAyMzMsIDc2LCA1NywgMzQsIDIzMywgNzIsIDU3LCAzNCwgMjE5LCAyMTcsIDU3LCAzNCwgMjMzLCA3NywgCisgICAgNTcsIDM0LCAyMTMsIDIyNCwgNTcsIDM0LCAyNDQsIDE1LCA1NywgMzQsIDI0NSwgMTczLCA1NywgMzQsIDI0MSwgMjE5LCAKKyAgICA1NywgMzQsIDI0MywgMjI2LCA1NywgMzQsIDI0MCwgMjMyLCA1NywgMzQsIDI1MSwgMTE5LCA1NywgMzQsIDIxOCwgMTQsIAorICAgIDU3LCAzNCwgMjQyLCAxNiwgNTcsIDM0LCAyNDQsIDgyLCA1NywgMzQsIDIyMiwgMTk3LCAyMTMsIDIyMSwgNTcsIDM0LCAKKyAgICAyNTAsIDE1MywgNTcsIDM0LCAyNDIsIDE5OCwgNTcsIDM0LCAyNDQsIDU5LCA1NywgMzQsIDI1MSwgMTYwLCA1NywgMzQsIAorICAgIDIyMiwgMTcyLCA1NywgMzQsIDI0OCwgMjUsIDU3LCAzNCwgMjEzLCAyNDMsIDU3LCAzNCwgMjQxLCAxOTQsIDU3LCAzNCwgCisgICAgMjEzLCAzMiwgNTcsIDM0LCAyMzEsIDUsIDU3LCAzNCwgMjUxLCAxNDQsIDU3LCAzNCwgMjQ1LCAxMTMsIDU3LCAzNCwgMjQzLCAKKyAgICAyMTQsIDU3LCAzNCwgMjE2LCAxNjcsIDU3LCAzNCwgMjQ2LCAzNywgNTcsIDM0LCAyMjQsIDMzLCA1NywgMzQsIDIyOCwgCisgICAgMTY0LCA1NywgMzQsIDI0NSwgOCwgNTcsIDM0LCAyMTYsIDIyOCwgNTcsIDM0LCAyNDYsIDUwLCA1NywgMzQsIDIxNiwgNTUsIAorICAgIDU3LCAzNCwgMjQ0LCAxNywgMTA1LCAyNDcsIDI0NCwgMTM3LCA0MiwgMjExLCAyMTEsIDIyMywgMTQ4LCAxMDUsIDI0NywgCisgICAgMjQ0LCAxMzcsIDc4LCAyMTEsIDIxMSwgNTUsIDEwNSwgMjQ3LCAyNDQsIDEzNywgNDIsIDIxMSwgMjExLCAyMzEsIDM3LCAKKyAgICAyNCwgMjIzLCAxNDgsIDEwNSwgMjQ3LCAyNDQsIDEzNywgNzgsIDIxMSwgMjExLCAyMzEsIDM3LCAyNCwgNTUsIDEwNSwgCisgICAgMjQ3LCAyNDQsIDEzNywgMjQzLCAyMDAsIDIxOCwgMjEwLCAxMDUsIDI0NywgMjQ0LCAxMzcsIDIxOCwgMjExLCAyNDMsIAorICAgIDIxMywgNDksIDEwNSwgMjQ3LCAyNDQsIDEzNywgMjE4LCAyMTEsIDI0MywgMjEzLCA1NSwgMTA1LCAyNDcsIDI0NCwgMTM3LCAKKyAgICAyMTgsIDIxMSwgMjQzLCAyMTMsIDIzMywgNzAsIDEwNSwgMjQ3LCAyNDQsIDEzNywgMjE4LCAyMTEsIDI0MywgMjEzLCAyMTUsIAorICAgIDEzMSwgMjMzLCA3MCwgMTA1LCAyNDcsIDI0NCwgMTM3LCAyMTgsIDIxMSwgMjQzLCAyMTMsIDIxNSwgMTMxLCAyMjMsIDE0OCwgCisgICAgMTA1LCAyNDcsIDI0NCwgMTM3LCAyMTgsIDIxMSwgMjQzLCAyMTMsIDIzMiwgMTYzLCAyMzMsIDcwLCAxMDUsIDI0NywgMjQ0LCAKKyAgICAxMzcsIDIyNiwgMjQ2LCAxMDUsIDIxOSwgMjA2LCAxMDUsIDI0OSwgMTU3LCAxMDUsIDI0MywgMjAwLCAyMTksIDY5LCAyNDcsIAorICAgIDEyOSwgNzcsIDIzNSwgMTMxLCAyMzUsIDIzMywgMjE5LCA5OCwgODcsIDEwNSwgMjM1LCAxNTYsIDc3LCAxMDUsIDI0OSwgCisgICAgMTg5LCA3NywgMTA1LCA1MCwgMjEyLCA3OSwgNDIsIDI1NCwgMTksIDEyNSwgNDYsIDI1NCwgMTksIDEyNSwgNDIsIDUxLCAKKyAgICAyNTQsIDE5LCAxMjUsIDQ2LCA1MSwgMjU0LCAxOSwgMTI1LCA0MiwgMjQ5LCAxMDAsIDEyNSwgNDYsIDI0OSwgMTAwLCAxMjUsIAorICAgIDQyLCA2NywgMjQ5LCAxMDAsIDEyNSwgNDYsIDY3LCAyNDksIDEwMCwgMTI1LCA0MiwgODMsIDIzMywgNDQsIDEyNSwgNDYsIAorICAgIDgzLCAyMzMsIDQ0LCAxMjUsIDIyNSwgMTE3LCA3NywgMjQzLCA4LCA3NywgNDIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMTI1LCAKKyAgICA0NiwgMjE2LCAyMTksIDIyMCwgMjMzLCAxMjUsIDQyLCA2NywgMjMzLCA0NCwgMTI1LCA0NiwgNjcsIDIzMywgNDQsIDEyNSwgCisgICAgNDIsIDY3LCAyMTYsIDIxOSwgMjIwLCAyMzMsIDEyNSwgNDYsIDY3LCAyMTYsIDIxOSwgMjIwLCAyMzMsIDEyNSwgNDIsIDY3LCAKKyAgICA0MSwgMTI1LCA0NiwgNjcsIDQxLCAxMjUsIDIxNCwgMjAsIDI0OCwgMTAxLCAyMjMsIDIwMiwgNTEsIDIyNSwgNzIsIDIyNCwgCisgICAgMTQzLCA3NywgNTEsIDIyNSwgNzIsIDIyNCwgMTQzLCA3NywgMTE1LCA1MSwgMjI1LCA3MiwgMjI0LCAxNDMsIDc3LCAyMjUsIAorICAgIDExNywgMTUyLCAyNDQsIDE1OCwgMjQxLCAyNDcsIDIyOCwgNTQsIDExNiwgMjQxLCAyNDcsIDIyOCwgNTQsIDEwOSwgMjQxLCAKKyAgICAyNDcsIDIyOCwgNTQsIDE2NiwgMjQxLCAyNDcsIDIyOCwgNTQsIDE2MywgMjQxLCAyNDcsIDIyOCwgNTQsIDE4MCwgMjQxLCAKKyAgICAyNDcsIDIyOCwgNTQsIDE4OSwgMjQxLCAyNDcsIDIyOCwgNTQsIDE5OCwgMjQxLCAyNDcsIDIyOCwgNTQsIDE5NSwgMjQxLCAKKyAgICAyNDcsIDIyOCwgNTQsIDIwMCwgMTA1LCAyMzMsIDI5LCAxNjAsIDc3LCAxMDUsIDIyMywgMTI1LCAxNjAsIDc3LCAxMDUsIAorICAgIDI0NywgMjUxLCAxNjAsIDc3LCAxMDUsIDI0NSwgODcsIDE2MCwgNzcsIDIzLCAyMjAsIDgxLCA2MiwgMTYwLCA3NywgMjMsIAorICAgIDUxLCA2MiwgMTYwLCA3NywgMjE0LCAxNiwgMjQ4LCAxMDEsIDcxLCAyMzQsIDIzOCwgMjIzLCAyMjgsIDc3LCA3MSwgMjM0LCAKKyAgICAyMzgsIDIyMywgMjI4LCAyLCAyMTQsIDExNiwgMjE5LCAyMTgsIDc3LCA3MSwgMjM0LCAyMzgsIDIyMywgMjI4LCAxNTIsIAorICAgIDIxNSwgMTMxLCAyNDIsIDksIDcxLCAyMzQsIDIzOCwgMjIzLCAyMjgsIDIsIDIxNCwgMTE2LCAyMTksIDIxOCwgMTUyLCAKKyAgICAyMTUsIDEzMSwgMjQyLCA5LCA3MSwgMjM0LCAyMzgsIDIyMywgMjI4LCAxNTIsIDIzMiwgMTYzLCAyNDIsIDksIDM2LCAyMjUsIAorICAgIDExNywgNzcsIDEwNSwgMjAxLCAyMzIsIDI0MywgMjQ0LCAxMTUsIDIyMSwgNTgsIDg3LCAyNDEsIDI0NywgMjI4LCA1NCwgCisgICAgMjE3LCAyMDAsIDI0MSwgMjQ3LCAyMjgsIDU0LCAyMTYsIDM4LCAyNDEsIDI0NywgMjI4LCA1NCwgMjE3LCAxMTUsIDcxLCAKKyAgICAxMDUsIDIzNSwgMTU2LCA3NywgMjMxLCAyMDMsIDc3LCAyMjYsIDEyNywgMjU0LCA0OSwgNzcsIDEwNSwgNDMsIDIzNSwgCisgICAgMjM1LCAxMDUsIDE1MSwgMjQ0LCA3NSwgMjE5LCAyMDYsIDE0MiwgMSwgMywgNjEsIDE0MiwgMSwgNjEsIDE0MiwgMSwgMywgCisgICAgNzIsIDE0MiwgMSwgNzIsIDE0MiwgMSwgMywgNjksIDE0MiwgMSwgNjksIDE0MiwgMSwgMywgNzQsIDE0MiwgMSwgNzQsIAorICAgIDE0MiwgMSwgMywgNzUsIDE0MiwgMSwgNzUsIDE0MiwgMSwgMTgxLCAxNDIsIDEsIDI0MywgMTEwLCAxNDIsIDEsIDIzNCwgCisgICAgMTAxLCAxNDIsIDEsIDI0MiwgMTkwLCAxNDIsIDEsIDIzMywgMjM4LCAxNDIsIDEsIDI0MiwgOTIsIDE0MiwgMSwgMjM0LCAKKyAgICAxODgsIDE0MiwgMSwgMjQzLCAzOCwgMTQyLCAxLCAyMzQsIDM3LCAxNDIsIDEsIDI0MiwgMTUwLCAxNDIsIDEsIDIyMiwgCisgICAgMjAyLCAxNDIsIDEsIDIxMiwgMTA5LCAxNDIsIDEsIDIyMCwgMTE3LCAxNDIsIDEsIDIxMiwgMzcsIDE0MiwgMSwgMjE5LCAKKyAgICAyNywgMTQyLCAxLCAyMTIsIDgsIDE0MiwgMSwgMjIyLCAxMDAsIDE0MiwgMSwgMjEyLCA4NywgMTQyLCAxLCAyMTksIDI0MiwgCisgICAgMTQyLCAxLCAyMTIsIDE2LCAxNDIsIDEsIDIxOCwgNTIsIDE0MiwgMSwgMjQ4LCAxNjQsIDE0MiwgMSwgMjE3LCA3MSwgMTQyLCAKKyAgICAxLCAyNDcsIDIxMSwgMTQyLCAxLCAzLCAyMTYsIDgyLCAxNDIsIDEsIDIxNiwgODIsIDE0MiwgMSwgMjQ2LCAzMywgMTQyLCAKKyAgICAxLCAyMTcsIDIyOSwgMTQyLCAxLCAyNDgsIDQxLCAxNDIsIDEsIDEwOCwgMTQyLCAxLCAyNDcsIDk5LCAxNDIsIDEsIDIwNSwgCisgICAgMTQyLCAxLCAyMjksIDY0LCAxNDIsIDEsIDIyOCwgOTIsIDE0MiwgMSwgMjI5LCAxODcsIDE0MiwgMSwgMjI4LCAxODUsIAorICAgIDE0MiwgMSwgMTU5LCAxNDIsIDEsIDI1MiwgMTA3LCAxNDIsIDEsIDE5MywgMTQyLCAxLCAyNDEsIDE2NSwgMTQyLCAxLCAKKyAgICAyNTEsIDE4NCwgMTQyLCAxLCAyMjUsIDI0MCwgMTQyLCAxLCAyNDAsIDIxMiwgMTQyLCAxLCAyNTEsIDU0LCAxNDIsIDEsIAorICAgIDIyNSwgMzUsIDE0MiwgMSwgMjQxLCAyMjIsIDE0MiwgMSwgMjUxLCAyNTEsIDE0MiwgMSwgMjI2LCA5NiwgMTQyLCAxLCAKKyAgICAyNDEsIDU0LCAxNDIsIDEsIDI1MSwgMTI4LCAxNDIsIDEsIDIyNSwgMTUwLCAxNDIsIDEsIDE4OCwgMTQyLCAxLCAyMzEsIAorICAgIDQyLCAxNDIsIDEsIDIzMCwgMTcyLCAxNDIsIDEsIDIzMSwgMTU2LCAxNDIsIDEsIDIzMCwgMjMxLCAxNDIsIDEsIDMsIDE4NiwgCisgICAgMTQyLCAxLCAxODYsIDE0MiwgMSwgMywgMjEyLCAyMDMsIDE0MiwgMSwgMjEyLCAyMDMsIDE0MiwgMSwgMywgMjEyLCAyMzUsIAorICAgIDE0MiwgMSwgMjEyLCAyMzUsIDE0MiwgMSwgMjAzLCAxNDIsIDEsIDIyMywgMTg4LCAxNDIsIDEsIDIyMywgNTEsIDE0MiwgMSwgCisgICAgMjI0LCAyMSwgMTQyLCAxLCAyMjMsIDExMiwgMTQyLCAxLCAzLCAyMTQsIDQ5LCAxNDIsIDEsIDIxNCwgNDksIDE0MiwgMSwgCisgICAgMjEzLCAyMzUsIDE0MiwgMSwgMjE0LCA2LCAxNDIsIDEsIDIxMywgMjE0LCAxNDIsIDEsIDIwNCwgMTQyLCAxLCAyMTQsIDk5LCAKKyAgICAxNDIsIDEsIDMsIDE4MSwgMTQyLCAxLCAzLCAyMzQsIDE4OCwgMzcsIDIzNCwgMjA2LCAyMTQsIDExNiwgMjE5LCAyMTgsIAorICAgIDc3LCAzNywgMjM0LCAyMDYsIDIyMSwgNzUsIDIxOSwgMjE4LCA3NywgMjM0LCAyMDYsIDIxNCwgMTE2LCAyMTksIDIxOCwgCisgICAgNzcsIDIzNCwgMjA2LCAyMjEsIDc1LCAyMTksIDIxOCwgNzcsIDE0MiwgMjM1LCAxNTYsIDc3LCAxNDIsIDIxNCwgMTE2LCAKKyAgICAyMzUsIDE1NiwgNzcsIDE0MiwgMjQ3LCAxNzMsIDIxMiwgMjE2LCAyMzQsIDIwNiwgNTEsIDI0MCwgMTYwLCA1NiwgMSwgMywgCisgICAgNjEsIDU2LCAxLCA2MSwgNTYsIDEsIDMsIDcyLCA1NiwgMSwgNzIsIDU2LCAxLCAzLCA2OSwgNTYsIDEsIDY5LCA1NiwgMSwgCisgICAgMywgNzQsIDU2LCAxLCA3NCwgNTYsIDEsIDMsIDc1LCA1NiwgMSwgNzUsIDU2LCAxLCAxODEsIDU2LCAxLCAyNDMsIDExMCwgCisgICAgNTYsIDEsIDIzNCwgMTAxLCA1NiwgMSwgMjQyLCAxOTAsIDU2LCAxLCAyMzMsIDIzOCwgNTYsIDEsIDI0MiwgOTIsIDU2LCAxLCAKKyAgICAyMzQsIDE4OCwgNTYsIDEsIDI0MywgMzgsIDU2LCAxLCAyMzQsIDM3LCA1NiwgMSwgMjQyLCAxNTAsIDU2LCAxLCAyMjIsIAorICAgIDIwMiwgNTYsIDEsIDIxMiwgMTA5LCA1NiwgMSwgMjIwLCAxMTcsIDU2LCAxLCAyMTIsIDM3LCA1NiwgMSwgMjE5LCAyNywgCisgICAgNTYsIDEsIDIxMiwgOCwgNTYsIDEsIDIyMiwgMTAwLCA1NiwgMSwgMjEyLCA4NywgNTYsIDEsIDIxOSwgMjQyLCA1NiwgMSwgCisgICAgMjEyLCAxNiwgNTYsIDEsIDIxOCwgNTIsIDU2LCAxLCAyNDgsIDE2NCwgNTYsIDEsIDIxNywgNzEsIDU2LCAxLCAyNDcsIAorICAgIDIxMSwgNTYsIDEsIDMsIDIxNiwgODIsIDU2LCAxLCAyMTYsIDgyLCA1NiwgMSwgMjQ2LCAzMywgNTYsIDEsIDIxNywgMjI5LCAKKyAgICA1NiwgMSwgMjQ4LCA0MSwgNTYsIDEsIDEwOCwgNTYsIDEsIDI0NywgOTksIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjksIDY0LCAKKyAgICA1NiwgMSwgMjI4LCA5MiwgNTYsIDEsIDIyOSwgMTg3LCA1NiwgMSwgMjI4LCAxODUsIDU2LCAxLCAxNTksIDU2LCAxLCAyNTIsIAorICAgIDEwNywgNTYsIDEsIDE5MywgNTYsIDEsIDI0MSwgMTY1LCA1NiwgMSwgMjUxLCAxODQsIDU2LCAxLCAyMjUsIDI0MCwgNTYsIAorICAgIDEsIDI0MCwgMjEyLCA1NiwgMSwgMjUxLCA1NCwgNTYsIDEsIDIyNSwgMzUsIDU2LCAxLCAyNDEsIDIyMiwgNTYsIDEsIDI1MSwgCisgICAgMjUxLCA1NiwgMSwgMjI2LCA5NiwgNTYsIDEsIDI0MSwgNTQsIDU2LCAxLCAyNTEsIDEyOCwgNTYsIDEsIDIyNSwgMTUwLCAKKyAgICA1NiwgMSwgMTg4LCA1NiwgMSwgMjMxLCA0MiwgNTYsIDEsIDIzMCwgMTcyLCA1NiwgMSwgMjMxLCAxNTYsIDU2LCAxLCAyMzAsIAorICAgIDIzMSwgNTYsIDEsIDMsIDE4NiwgNTYsIDEsIDE4NiwgNTYsIDEsIDMsIDIxMiwgMjAzLCA1NiwgMSwgMjEyLCAyMDMsIDU2LCAKKyAgICAxLCAzLCAyMTIsIDIzNSwgNTYsIDEsIDIxMiwgMjM1LCA1NiwgMSwgMjAzLCA1NiwgMSwgMjIzLCAxODgsIDU2LCAxLCAyMjMsIAorICAgIDUxLCA1NiwgMSwgMjI0LCAyMSwgNTYsIDEsIDIyMywgMTEyLCA1NiwgMSwgMywgMjE0LCA0OSwgNTYsIDEsIDIxNCwgNDksIAorICAgIDU2LCAxLCAyMTMsIDIzNSwgNTYsIDEsIDIxNCwgNiwgNTYsIDEsIDIxMywgMjE0LCA1NiwgMSwgMjA0LCA1NiwgMSwgMjE0LCAKKyAgICA5OSwgNTYsIDEsIDMsIDE4MSwgNTYsIDEsIDMsIDIzNCwgMTg4LCA1NiwgMSwgMjE1LCAxLCA1NiwgMSwgMjE0LCAxNTQsIAorICAgIDU2LCAxLCAyMTQsIDIzMiwgNTYsIDEsIDIxNCwgMTE5LCA1NiwgMjMxLCAzNywgMjQ3LCA3NCwgMjM0LCAyMDYsIDIyNSwgCisgICAgNTcsIDIxOSwgMjE4LCA3NywgNTYsIDIzNSwgMTU2LCA3NywgNTYsIDIxNCwgMTE2LCAyMzUsIDE1NiwgNzcsIDU2LCAyNDcsIAorICAgIDE3MywgMjM0LCA4LCAyMDIsIDEsIDI1MywgNzQsIDIwMiwgMSwgMjI2LCAyMjksIDIwMiwgMSwgMTgzLCAyMDIsIDEsIDI0NCwgCisgICAgMjMwLCAyMDIsIDEsIDI0OSwgMywgMjAyLCAxLCAyMTgsIDk5LCAyMDIsIDEsIDIwNCwgMjAyLCAxLCAxNTAsIDIwMiwgMSwgCisgICAgMjQzLCAxNzcsIDIwMiwgMSwgMjM1LCAyNywgMjAyLCAxLCAyNDIsIDQxLCAyMDIsIDEsIDIzNSwgMTQyLCAyMDIsIDEsIAorICAgIDIyNCwgMjQwLCAyMDIsIDEsIDIxMywgMTY2LCAyMDIsIDEsIDIxMiwgNzYsIDIwMiwgMSwgMjUwLCA5MywgMjAyLCAxLCAKKyAgICAyMjEsIDI2LCAyMDIsIDEsIDE0OSwgMjAyLCAxLCAyMTIsIDE1MiwgMjAyLCAxLCAyNTAsIDI1MiwgMjAyLCAxLCAxOTcsIAorICAgIDIwMiwgMSwgNjEsIDIwMiwgMSwgNzUsIDIwMiwgMSwgNzQsIDIwMiwgMSwgMjQ1LCAxNTQsIDIwMiwgMSwgMjU0LCAxMDgsIAorICAgIDIwMiwgMSwgMjQ1LCAxNTIsIDIwMiwgMSwgMjUzLCAxMDgsIDIwMiwgMSwgMjI3LCAyLCAyMDIsIDEsIDI1NCwgMzIsIDIwMiwgCisgICAgMSwgMjQ1LCAxMDgsIDIwMiwgMSwgMjU0LCAyNCwgMjAyLCAxLCAyNDUsIDk2LCAyMDIsIDEsIDI0NSwgNTUsIDIwMiwgMSwgCisgICAgNzIsIDIwMiwgMSwgNjksIDIwMiwgMSwgMjM1LCAxNTQsIDIwMiwgMSwgMjE1LCA3OSwgMjAyLCAxLCAyMjksIDE2MSwgMjAyLCAKKyAgICAxLCAyNDIsIDE1NCwgMjAyLCAxLCAyMzYsIDI5LCAyMywgMSwgMjM0LCA2NywgMjMsIDEsIDIxOSwgMTUwLCAyMywgMSwgCisgICAgMjM0LCA2MCwgMjMsIDEsIDIyOSwgNTcsIDIzLCAxLCAyMjksIDU1LCAyMywgMSwgMjI5LCA1NCwgMjMsIDEsIDIxNywgNTUsIAorICAgIDIzLCAxLCAyMTksIDEzOSwgMjMsIDEsIDIyMywgMTc5LCAyMywgMSwgMjIzLCAxNzQsIDIzLCAxLCAyMjMsIDE3MSwgMjMsIAorICAgIDEsIDIyMywgMTY0LCAyMywgMSwgMjIzLCAxNTksIDIzLCAxLCAyMjMsIDE1NCwgMjMsIDEsIDIyMywgMTY1LCAyMywgMSwgCisgICAgMjIzLCAxNzcsIDIzLCAxLCAyMzEsIDMwLCAyMywgMSwgMjI1LCAyMjcsIDIzLCAxLCAyMTksIDE0NywgMjMsIDEsIDIyNSwgCisgICAgMjE2LCAyMywgMSwgMjIwLCA3NiwgMjMsIDEsIDIxOSwgMTQ0LCAyMywgMSwgMjM2LCA1MSwgMjMsIDEsIDI0OSwgMjM5LCAKKyAgICAyMywgMSwgMjE5LCAxNTQsIDIzLCAxLCAyNTAsIDQzLCAyMywgMSwgMjM0LCAxMTYsIDIzLCAxLCAyMTcsIDEyNiwgMjMsIDEsIAorICAgIDIyNiwgNywgMjMsIDEsIDI0MSwgMTU4LCAyMywgMSwgNjEsIDIzLCAxLCAyNTQsIDE0OCwgMjMsIDEsIDE4NiwgMjMsIDEsIAorICAgIDIxMywgODAsIDIzLCAxLCAyNDUsIDc2LCAyMywgMSwgNzQsIDIzLCAxLCAyMTMsIDI3LCAyMywgMSwgMjEzLCAzOCwgMjMsIAorICAgIDEsIDc1LCAyMywgMSwgMjE0LCA0OSwgMjMsIDEsIDIxNCwgNDYsIDIzLCAxLCAyMjcsIDk5LCAyMywgMSwgMjEyLCAyMzUsIAorICAgIDIzLCAxLCA2OSwgMjMsIDEsIDIxMywgMjUyLCAyMywgMSwgMjE0LCA2LCAyMywgMSwgMjEzLCAyMzUsIDIzLCAxLCAyMTIsIAorICAgIDIwMywgMjMsIDEsIDI0NSwgMjIsIDIzLCAxLCAyMTIsIDI1NSwgMjMsIDEsIDcyLCAyMywgMjQ0LCA3MiwgMjMsIDEsIDIxOSwgCisgICAgMTQ4LCAyMywgMSwgMjI5LCA0NywgMjMsIDEsIDIyOSwgNDksIDIzLCAxLCAyMjksIDUyLCAyMywgMSwgMjIzLCAxNzIsIDIzLCAKKyAgICAxLCAyMjMsIDE1MywgMjMsIDEsIDIyMywgMTYxLCAyMywgMSwgMjIzLCAxNjYsIDIzLCAxLCAyMjMsIDE1MSwgMjMsIDEsIAorICAgIDIzMSwgMjMsIDIzLCAxLCAyMzEsIDIwLCAyMywgMSwgMjMxLCAyNCwgMjMsIDEsIDIzNCwgMjI2LCAyMywgMSwgMjI1LCAKKyAgICAyMjIsIDIzLCAxLCAyMjUsIDIwOCwgMjMsIDEsIDIyNSwgMjE0LCAyMywgMSwgMjI1LCAyMTEsIDIzLCAxLCAyMjUsIDIyNSwgCisgICAgMjMsIDEsIDIyNSwgMjA5LCAyMywgMSwgMjM0LCAyMjQsIDIzLCAxLCAyMzQsIDIyMiwgMjMsIDEsIDIyMCwgNjksIDIzLCAxLCAKKyAgICAyMjAsIDY3LCAyMywgMSwgMjIwLCA1OSwgMjMsIDEsIDIyMCwgNjQsIDIzLCAxLCAyMjAsIDc0LCAyMywgMSwgMjI2LCAxNjAsIAorICAgIDIzLCAxLCAyMTksIDE1MSwgMjMsIDEsIDIxMywgMTcsIDIzLCAxLCAyMTMsIDEzLCAyMywgMSwgMjEzLCAxNCwgMjMsIDEsIAorICAgIDIzNCwgMjI1LCAyMywgMSwgMjE5LCAxNTIsIDIzLCAxLCAyMTMsIDIzLCAyMywgMSwgMjEyLCAyMjksIDIzLCAxLCAyMTIsIAorICAgIDIyOCwgMjMsIDEsIDIxMiwgMjMxLCAyMywgMSwgMjEyLCAxOTQsIDIzLCAxLCAyMTIsIDE5NSwgMjMsIDEsIDIxMiwgMTk4LCAKKyAgICAyMywgMSwgMjUzLCAyMDQsIDIzLCAxLCAyNTMsIDE5OCwgMTA1LCAyNTQsIDEwLCAyMzIsIDIzMiwgNzcsIDEwNSwgMjU0LCAKKyAgICAxMCwgMjIzLCAyMDMsIDc3LCAxMDUsIDI1NCwgMTAsIDEyMiwgNzcsIDEwNSwgMjU0LCAxMCwgMTE3LCA3NywgMTA1LCAyNTQsIAorICAgIDEwLCAxMzMsIDc3LCAxMDUsIDI1NCwgMTAsIDI0MywgMjM3LCA3NywgMTA1LCAyNTQsIDEwLCAyMTYsIDIyNywgNzcsIDEwNSwgCisgICAgMjU0LCAxMCwgMjMxLCAzNywgNzcsIDEwNSwgMjU0LCAxMCwgMjUxLCAxMDEsIDc3LCAxMDUsIDI1NCwgMTAsIDI0NCwgNjEsIAorICAgIDc3LCAxMDUsIDI1NCwgMTAsIDIyMiwgOTUsIDc3LCAxMDUsIDI1NCwgMTAsIDIxNywgMTIyLCA3NywgMTA1LCAyNTQsIDEwLCAKKyAgICAyNDMsIDIzMCwgNzcsIDEwNSwgMjU0LCAxMCwgMjQxLCAyMDgsIDc3LCAxMDUsIDI1NCwgMTAsIDI0NSwgMTgwLCA3NywgCisgICAgMTA1LCAyNTQsIDEwLCAyMzEsIDI0OSwgNzcsIDIwMiwgMSwgMjUxLCA1NCwgMjAyLCAxLCAyMTIsIDM3LCAyMDIsIDEsIAorICAgIDIzNSwgMTEwLCAyMDIsIDEsIDI0MiwgOTIsIDIwMiwgMSwgMjQ1LCAxNjUsIDIwMiwgMSwgMjQ1LCA5MywgMjAyLCAxLCAKKyAgICAyMjcsIDQ5LCAyMDIsIDEsIDIyNywgNTMsIDIwMiwgMSwgMjM1LCAxNzcsIDIwMiwgMSwgMjU0LCAxMiwgMjAyLCAxLCAyMzUsIAorICAgIDIyMSwgMjAyLCAxLCAyMTUsIDEzOSwgMjAyLCAxLCAyMzYsIDExLCAyMDIsIDEsIDIyOSwgMTQyLCAyMDIsIDEsIDI1NCwgCisgICAgMTAyLCAyMDIsIDEsIDI1MywgMTAzLCAyMDIsIDEsIDI1NCwgNDUsIDIwMiwgMSwgMjI3LCA3MCwgMjAyLCAxLCAyMjcsIDU1LCAKKyAgICAyMDIsIDEsIDIzNSwgMjE4LCAyMDIsIDQwLCAxLCAyMjYsIDIyOSwgMjAyLCA0MCwgMSwgMjE4LCA5OSwgMjAyLCA0MCwgMSwgCisgICAgMjM1LCAyNywgMjAyLCA0MCwgMSwgMjQyLCA0MSwgMjAyLCAxLCAyNDIsIDIyNiwgMjAyLCAxLCAyMzMsIDI2LCAyMDIsIDEsIAorICAgIDIxMSwgMjQ5LCA5LCAyMTksIDQ1LCAyMTgsIDk5LCA5LCAyMTksIDQ1LCAyMTMsIDI0NSwgOSwgMjE5LCA0NSwgMjEzLCAKKyAgICAxNDYsIDksIDIxOSwgNDUsIDI1MSwgOCwgOSwgMjE5LCA0NSwgMjE4LCAxOTksIDksIDIxOSwgNDUsIDI0MCwgMTUwLCA5LCAKKyAgICAyMTksIDQ1LCAyNDAsIDE1NCwgOSwgMjE5LCA0NSwgMjQwLCAyMTgsIDksIDIxOSwgNDUsIDI0MCwgMTUxLCA5LCAyMTksIAorICAgIDQ1LCAyMTgsIDEwMiwgOSwgMjE5LCA0NSwgMjQwLCAxNTMsIDksIDIxOSwgNDUsIDI0MCwgMTQ5LCA5LCAyMTksIDQ1LCAKKyAgICAyNDAsIDIxNiwgOSwgMjE5LCA0NSwgMjQwLCAxNTIsIDksIDIxOSwgNDUsIDI0MCwgMTQ4LCA5LCAyMTksIDQ1LCAyMDQsIDksIAorICAgIDIxOSwgNDUsIDI0MiwgNDEsIDksIDIxOSwgNDUsIDE5NywgOSwgMjE5LCA0NSwgMjI2LCAyMjksIDksIDIxOSwgNDUsIDIxOSwgCisgICAgMjA4LCA5LCAyMTksIDQ1LCAyNDksIDMsIDksIDIxOSwgNDUsIDI0MCwgMTU1LCA5LCAyMTksIDQ1LCAyNDEsIDE3NSwgOSwgCisgICAgMjE5LCA0NSwgMjE4LCAxMTEsIDksIDIxOSwgNDUsIDIxOCwgMTc4LCA5LCAyMTksIDQ1LCAyMTksIDEwNywgOSwgMjE5LCAKKyAgICA0NSwgMjIxLCAzMSwgOSwgMjE5LCA0NSwgMjI2LCA5OCwgOSwgMjE5LCA0NSwgMjI0LCAyNDIsIDksIDIxOSwgNDUsIDIxNiwgCisgICAgMjUzLCA5LCAyMTksIDQ1LCAyMTgsIDEwMSwgOSwgMjE5LCA0NSwgMjE4LCAxODksIDksIDIxOSwgNDUsIDI0MCwgMTYyLCA5LCAKKyAgICAyMTksIDQ1LCAyNDAsIDE0NywgOSwgMjE5LCA0NSwgMjI2LCAyNSwgOSwgMjE5LCA0NSwgMjI0LCAyNDAsIDU2LCAxLCAzLCAKKyAgICAyMzMsIDIzOCwgNTYsIDEsIDMsIDIyMCwgMTE3LCA1NiwgMSwgMywgMjE5LCAyNywgNTYsIDEsIDMsIDEwOCwgNTYsIDEsIDMsIAorICAgIDIyOCwgOTIsIDU2LCAxLCAzLCAxNTksIDU2LCAxLCAzLCAyNDEsIDE2NSwgNTYsIDEsIDMsIDI0MCwgMjEyLCA1NiwgMSwgMywgCisgICAgMjQxLCAyMjIsIDU2LCAxLCAzLCAyNDEsIDU0LCA1NiwgMSwgMywgMjMwLCAxNzIsIDU2LCAxLCAzLCAyMDMsIDU2LCAxLCAzLCAKKyAgICAyMjMsIDE4OCwgNTYsIDEsIDMsIDIyMywgNTEsIDU2LCAxLCAzLCAyMjQsIDIxLCA1NiwgMSwgMywgMjIzLCAxMTIsIDg2LCAKKyAgICAyMywgMjM0LCA2NywgODYsIDIzLCAyMjksIDU3LCA4NiwgMjMsIDIxNywgNTUsIDg2LCAyMywgMjIzLCAxNzksIDg2LCAyMywgCisgICAgMjMxLCAzMCwgODYsIDIzLCAyMjUsIDIyNywgODYsIDIzLCAyMjAsIDc2LCA4NiwgMjMsIDIzNiwgNTEsIDg2LCAyMywgMjQ5LCAKKyAgICAyMzksIDg2LCAyMywgMjUwLCA0MywgODYsIDIzLCAyMzQsIDExNiwgODYsIDIzLCAyMTcsIDEyNiwgODYsIDIzLCAyMjYsIDcsIAorICAgIDg2LCAyMywgMjQxLCAxNTgsIDg2LCAyMywgMjM0LCA2OCwgNjEsIDg2LCAyMywgMjI5LCA1OCwgNjEsIDg2LCAyMywgMjE3LCAKKyAgICA1NiwgNjEsIDg2LCAyMywgMjIzLCAxODAsIDYxLCA4NiwgMjMsIDIzMSwgMzEsIDYxLCA4NiwgMjMsIDIyNSwgMjI4LCA2MSwgCisgICAgODYsIDIzLCAyMjAsIDc3LCA2MSwgODYsIDIzLCAyMzYsIDUyLCA2MSwgODYsIDIzLCAyNDksIDI0MCwgNjEsIDg2LCAyMywgCisgICAgMjUwLCA0NCwgNjEsIDg2LCAyMywgMjM0LCAxMTcsIDYxLCA4NiwgMjMsIDIxNywgMTI3LCA2MSwgODYsIDIzLCAyMjYsIDgsIAorICAgIDYxLCA4NiwgMjMsIDI0MSwgMTU5LCA2MSwgODYsIDIzLCAyNDksIDI0MCwgNjksIDg2LCAyMzQsIDEyLCAxMzcsIDIyNywgCisgICAgODMsIDg2LCAyMzQsIDEyLCAxMzcsIDE1NywgMjQwLCAyMTIsIDg2LCAxNDMsIDExNiwgODYsIDE0MywgMTA5LCA4NiwgMTQzLCAKKyAgICAxNjYsIDg2LCAxNDMsIDE2MywgODYsIDE0MywgMTgwLCA4NiwgMTQzLCAxODksIDg2LCAxNDMsIDE5OCwgODYsIDE0MywgCisgICAgMTk1LCA4NiwgMTQzLCAyMDAsIDg2LCAxNDMsIDIxNywgMjAwLCA4NiwgMTQzLCAyMzAsIDE5OCwgODYsIDE0MywgMjQ0LCAKKyAgICA2NSwgODYsIDE0MywgMjE0LCAyNCwgODYsIDE0MywgMjEzLCAyMDEsIDg2LCAxNDMsIDIzMSwgMTA2LCA4NiwgMTQzLCAyNDUsIAorICAgIDE3OSwgODYsIDE0MywgMjE4LCAyMzgsIDg2LCAxNDMsIDIxOSwgNzIsIDg2LCAxNDMsIDI0MSwgMjI4LCA4NiwgMTQzLCAKKyAgICAyMTksIDIzOCwgODYsIDE0MywgMjMwLCAyNCwgODYsIDE0MywgMjE5LCAxOTIsIDg2LCAxNDMsIDI0NCwgNzEsIDg2LCAxNDMsIAorICAgIDI0OSwgMTQwLCA4NiwgMTQzLCAyMzMsIDE0OCwgODYsIDE0MywgMjIzLCAyMjMsIDg2LCAxNDMsIDI1MCwgMjAzLCA4NiwgCisgICAgMTQzLCAyMTksIDMwLCA4NiwgMTQzLCAyMTgsIDIyMCwgODYsIDE0MywgMjQ1LCA4NiwgODYsIDE0MywgMjIzLCAyMTUsIDg2LCAKKyAgICAxNDMsIDI1NCwgNTksIDg2LCAxNDMsIDI0NCwgOTcsIDg2LCAxNDMsIDIyMywgMjEzLCA4NiwgMTQzLCAyMjEsIDc2LCA4NiwgCisgICAgMTQzLCAyMjQsIDIwLCAzNiwgMTQzLCAyMjQsIDE1NywgMzYsIDE0MywgMjM0LCA4OSwgMzYsIDE0MywgMjIyLCAxMTYsIDM2LCAKKyAgICAxNDMsIDIzNCwgOCwgMzYsIDUwLCAyMTcsIDIwMSwgMjI3LCA2MywgODMsIDIxOSwgMTY2LCAzNiwgNTAsIDIxNiwgMzksIAorICAgIDIyNywgNjMsIDgzLCAyMTksIDE2NiwgMzYsIDUwLCAyMTcsIDExNiwgMjI3LCA2MywgODMsIDIxOSwgMTY2LCAzNiwgNTAsIAorICAgIDI0MywgMjQxLCAyMjcsIDYzLCA4MywgMjE5LCAxNjYsIDM2LCA1MCwgMjQ0LCA4NCwgMjI3LCA2MywgODMsIDIxOSwgMTY2LCAKKyAgICAzNiwgNTAsIDIyMCwgNDAsIDIyNywgNjMsIDgzLCAyMTksIDE2NiwgMzYsIDUwLCAyMjEsIDM4LCAyMjcsIDYzLCA4MywgCisgICAgMjE5LCAxNjYsIDM2LCA1MCwgMjQ1LCAxNDIsIDIyNywgNjMsIDgzLCAyMTksIDE2NiwgMjI2LCAxMjMsIDUyLCAzNiwgNTAsIAorICAgIDIxNiwgMzksIDExNiwgMzYsIDUwLCAyMTYsIDM5LCAxMDksIDM2LCA1MCwgMjE2LCAzOSwgMTY2LCAzNiwgNTAsIDIxNiwgCisgICAgMzksIDE2MywgMzYsIDUwLCAyMTYsIDM5LCAxODAsIDM2LCA1MCwgMjE2LCAzOSwgMTg5LCAzNiwgNTAsIDIxNiwgMzksIAorICAgIDE5OCwgMzYsIDUwLCAyMTYsIDM5LCAxOTUsIDM2LCA1MCwgMjE2LCAzOSwgMjAwLCAzNiwgNTAsIDIxNywgMTE1LCAzNiwgCisgICAgNTAsIDIxNywgMTE2LCAxMTYsIDM2LCA1MCwgMjE3LCAxMTYsIDEwOSwgMzYsIDUwLCAyMTcsIDExNiwgMTY2LCAzNiwgNTAsIAorICAgIDIxNywgMTE2LCAxNjMsIDM2LCA1MCwgMjE3LCAxMTYsIDE4MCwgMzYsIDIzLCAyMzQsIDY3LCAzNiwgMjMsIDIyOSwgNTcsIAorICAgIDM2LCAyMywgMjE3LCA1NSwgMzYsIDIzLCAyMjMsIDE3OSwgMzYsIDIzLCAyMzEsIDMwLCAzNiwgMjMsIDIyNSwgMjI3LCAzNiwgCisgICAgMjMsIDIyMCwgNzYsIDM2LCAyMywgMjM2LCA1MSwgMzYsIDIzLCAyNDksIDIzOSwgMzYsIDIzLCAyNTAsIDQzLCAzNiwgMjMsIAorICAgIDIzNCwgMTE2LCAzNiwgMjMsIDIxNywgMTI2LCAzNiwgMjMsIDIyNiwgNywgMzYsIDIzLCAyNDEsIDE1OCwgMzYsIDIzLCAKKyAgICAyMzQsIDY4LCA2MSwgMzYsIDIzLCAyMjksIDU4LCA2MSwgMzYsIDIzLCAyMTcsIDU2LCA2MSwgMzYsIDIzLCAyMjMsIDE4MCwgCisgICAgNjEsIDM2LCAyMywgMjMxLCAzMSwgNjEsIDM2LCAyMywgMjI1LCAyMjgsIDYxLCAzNiwgMjMsIDIyMCwgNzcsIDYxLCAzNiwgCisgICAgMjMsIDIzNiwgNTIsIDYxLCAzNiwgMjMsIDI0OSwgMjQwLCA2MSwgMzYsIDIzLCAyNTAsIDQ0LCA2MSwgMzYsIDIzLCAyMzQsIAorICAgIDExNywgNjEsIDM2LCAyMywgMjE3LCAxMjcsIDYxLCAzNiwgMjMsIDIyNiwgOCwgNjEsIDM2LCAyMywgMjQxLCAxNTksIDYxLCAKKyAgICAzNiwgMjM0LCAxMiwgMTM3LCAyNTAsIDg0LCAzNiwgMjM0LCAxMiwgMTM3LCAyMzUsIDUwLCAzNiwgMjMsIDIzNiwgNTIsIAorICAgIDY5LCAyMzQsIDEyLCAyMTksIDk4LCA4NywgMzYsIDE0MywgMTE2LCAzNiwgMTQzLCAxMDksIDM2LCAxNDMsIDE2NiwgMzYsIAorICAgIDE0MywgMTYzLCAzNiwgMTQzLCAxODAsIDM2LCAxNDMsIDE4OSwgMzYsIDE0MywgMTk4LCAzNiwgMTQzLCAxOTUsIDM2LCAKKyAgICAxNDMsIDIwMCwgMzYsIDE0MywgMjE3LCAyMDAsIDM2LCAxNDMsIDIzMCwgMTk4LCAzNiwgMTQzLCAyNDQsIDY1LCAzNiwgCisgICAgMTQzLCAyMTQsIDI0LCAzNiwgMTQzLCAyMTMsIDIwMSwgMzYsIDE0MywgMjMxLCAxMDYsIDM2LCAxNDMsIDI0NSwgMTc5LCAKKyAgICAzNiwgMTQzLCAyMTgsIDIzOCwgMzYsIDE0MywgMjE5LCA3MiwgMzYsIDE0MywgMjQxLCAyMjgsIDM2LCAxNDMsIDIxOSwgCisgICAgMjM4LCAzNiwgMTQzLCAyMzAsIDI0LCAzNiwgMTQzLCAyMTksIDE5MiwgMzYsIDE0MywgMjQ0LCA3MSwgMzYsIDE0MywgMjQ5LCAKKyAgICAxNDAsIDM2LCAxNDMsIDIzMywgMTQ4LCAzNiwgMTQzLCAyMjIsIDkzLCAzNiwgMTQzLCAyMzEsIDI1MiwgMzYsIDE0MywgCisgICAgMjQ0LCAxMDYsIDM2LCAxNDMsIDIxOCwgMjUwLCAzNiwgMTQzLCAyNDUsIDEsIDM2LCAxNDMsIDIyNSwgNjgsIDM2LCAxNDMsIAorICAgIDI1MywgMTEyLCAzNiwgMTQzLCAyMzUsIDE1NywgMzYsIDE0MywgMjIzLCAyMTMsIDM2LCAxNDMsIDI0OSwgMTAzLCAzNiwgCisgICAgMTQzLCAyNDksIDk0LCAzNiwgMTQzLCAyNDEsIDE1MSwgMzYsIDE0MywgMjUwLCAxMDgsIDM2LCAxNDMsIDIzMiwgMTY1LCAKKyAgICAzNiwgMTQzLCAyMzMsIDcwLCAzNiwgMTQzLCAyMjMsIDE0OCwgMzYsIDE0MywgMjMxLCAxNDgsIDM2LCAxNDMsIDIyMywgCisgICAgMjM3LCAzNiwgMTQzLCAyMTksIDMwLCAzNiwgMTQzLCAyMTgsIDIyMCwgMzYsIDE0MywgMjQ1LCA4NiwgMzYsIDE0MywgMjIzLCAKKyAgICAyMTUsIDM2LCAxNDMsIDI1NCwgNTksIDM2LCAxNDMsIDIyOSwgNDMsIDM2LCA1MCwgMjE3LCAxMTYsIDE4OSwgMzYsIDUwLCAKKyAgICAyMTcsIDExNiwgMTk4LCAzNiwgNTAsIDIxNywgMTE2LCAxOTUsIDM2LCA1MCwgMjE3LCAxMTYsIDIwMCwgMzYsIDUwLCAyNDMsIAorICAgIDI0MCwgMzYsIDUwLCAyNDMsIDI0MSwgMTE2LCAzNiwgNTAsIDI0MywgMjQxLCAxMDksIDM2LCA1MCwgMjQzLCAyNDEsIDE2NiwgCisgICAgMzYsIDUwLCAyNDMsIDI0MSwgMTYzLCAzNiwgNTAsIDI0MywgMjQxLCAxODAsIDM2LCA1MCwgMjQzLCAyNDEsIDE4OSwgMzYsIAorICAgIDUwLCAyNDMsIDI0MSwgMTk4LCAzNiwgNTAsIDI0MywgMjQxLCAxOTUsIDM2LCA1MCwgMjQzLCAyNDEsIDIwMCwgMzYsIDUwLCAKKyAgICAyNDQsIDgzLCAxMDUsIDIwMSwgMTYsIDMxLCAyMzUsIDEzMywgMTA1LCAyMDEsIDE2LCAzMSwgMjQ0LCAxMTcsIDEwNSwgCisgICAgMjAxLCAxNiwgMzEsIDIzMSwgMjIzLCAxMDUsIDIwMSwgMTYsIDMxLCAyNTMsIDIxNywgMTA1LCAyMDEsIDE2LCAzMSwgMjMxLCAKKyAgICAxOTYsIDEwNSwgMjAxLCAxNiwgMzEsIDIzNSwgNDgsIDEwNSwgMjAxLCAxNiwgMzEsIDIzNSwgNDksIDEwNSwgMjAxLCAxNiwgCisgICAgMzEsIDI1MywgMTA0LCAxMDUsIDIwMSwgMTYsIDMxLCAyMjEsIDU2LCAxMDUsIDIwMSwgMTYsIDMxLCAyMjcsIDEwNCwgMTA1LCAKKyAgICAyMDEsIDE2LCAzMSwgMjI4LCAxNTEsIDEwNSwgMjAxLCAxNiwgMzEsIDI0OCwgMzYsIDQxLCAyNDEsIDE3NSwgNDEsIDI0NSwgCisgICAgNTEsIDQxLCAyNDUsIDEwLCAyMzIsIDI0OCwgMjMzLCAxMiwgNTIsIDM2LCA1NiwgNjEsIDM2LCA1NiwgNzIsIDM2LCA1NiwgCisgICAgNjksIDM2LCA1NiwgNzQsIDM2LCA1NiwgNzUsIDM2LCA1NiwgMTgxLCAzNiwgNTYsIDIzNCwgMTAxLCAzNiwgNTYsIDIzMywgCisgICAgMjM4LCAzNiwgNTYsIDIzNCwgMTg4LCAzNiwgNTYsIDIzNCwgMzcsIDM2LCA1NiwgMjIyLCAyMDIsIDM2LCA1NiwgMjIwLCAKKyAgICAxMTcsIDM2LCA1NiwgMjE5LCAyNywgMzYsIDU2LCAyMjIsIDEwMCwgMzYsIDU2LCAyMTksIDI0MiwgMzYsIDU2LCAyMTgsIAorICAgIDUyLCAzNiwgNTYsIDIxNywgNzEsIDM2LCA1NiwgMjE2LCA4MiwgMzYsIDU2LCAyMTcsIDIyOSwgMzYsIDU2LCAxMDgsIDM2LCAKKyAgICA1NiwgMjA1LCAzNiwgNTYsIDIyOSwgNjQsIDM2LCA1NiwgMjI4LCA5MiwgMzYsIDU2LCAyMjksIDE4NywgMzYsIDU2LCAyMjgsIAorICAgIDE4NSwgMzYsIDU2LCAxNTksIDM2LCA1NiwgMjQxLCAxNjUsIDM2LCA1NiwgMjQwLCAyMTIsIDM2LCA1NiwgMjQxLCAyMjIsIAorICAgIDM2LCA1NiwgMjQxLCA1NCwgMzYsIDU2LCAxODgsIDM2LCA1NiwgMjMxLCA0MiwgMzYsIDU2LCAyMzAsIDE3MiwgMzYsIDU2LCAKKyAgICAyMzEsIDE1NiwgMzYsIDU2LCAyMzAsIDIzMSwgMzYsIDU2LCAxODYsIDM2LCA1NiwgMjEyLCAyMDMsIDM2LCA1NiwgMjEyLCAKKyAgICAyMzUsIDM2LCA1NiwgMjAzLCAzNiwgNTYsIDIyMywgMTg4LCAzNiwgNTYsIDIyMywgNTEsIDM2LCA1NiwgMjI0LCAyMSwgMzYsIAorICAgIDU2LCAyMjMsIDExMiwgMzYsIDU2LCAyMTQsIDQ5LCAzNiwgNTYsIDIxMywgMjM1LCAzNiwgNTYsIDIxNCwgNiwgMzYsIDU2LCAKKyAgICAyMTMsIDIxNCwgNDEsIDI1MywgMjM4LCA0MSwgMjUzLCAxNTQsIDQxLCAyNTQsIDYsIDQxLCAyNTQsIDE5MCwgNDEsIDIzNSwgCisgICAgMjIzLCA0MSwgMjM1LCAxOTMsIDQxLCAyMTUsIDEzNywgNDEsIDI0NSwgMzEsIDQxLCAyNDUsIDE2MywgNDEsIDIyNywgNTIsIAorICAgIDQxLCAyMjcsIDQ2LCA0MSwgMjM0LCAyNDksIDQxLCAyMzQsIDIxOSwgNDEsIDIzNCwgMjE2LCA0MSwgMjQzLCA2OCwgNDEsIAorICAgIDI0MywgNzcsIDQxLCAyNDIsIDE4MCwgNDEsIDI0MiwgMTc2LCA0MSwgMjMzLCAxNzIsIDQxLCAyNDIsIDE2OSwgNDEsIDIzNCwgCisgICAgODEsIDQxLCAyMzQsIDgwLCA0MSwgMjM0LCA3OSwgNDEsIDIzNCwgNzgsIDQxLCAyNDIsIDY3LCA0MSwgMjQyLCA2NiwgNDEsIAorICAgIDIzMywgMjE0LCA0MSwgMjMzLCAyMTYsIDQxLCAyMzQsIDE4NCwgNDEsIDIzNCwgMTAsIDQxLCAyMzQsIDE3LCA0MSwgMjIyLCAKKyAgICAxODcsIDQxLCAyMjIsIDE1MywgNDEsIDIyMCwgNTcsIDQxLCAyMjEsIDYxLCA0MSwgMjIxLCA2MCwgNDEsIDI0OCwgMTYxLCAKKyAgICA0MSwgMjQ3LCAyNDMsIDQxLCAyNDcsIDc1LCA0MSwgMjE2LCAyNDMsIDQxLCAyMzAsIDIwLCA0MSwgMjI4LCAxNTIsIDQxLCAKKyAgICAyNDIsIDE0LCA0MSwgMjI2LCAyMDgsIDQxLCAyMjYsIDIwNywgNDEsIDI1MiwgMTA1LCA0MSwgMjI1LCAyMzcsIDQxLCAyMjUsIAorICAgIDIwMSwgNDEsIDIyNSwgMjAyLCA0MSwgMjUxLCAxNTcsIDQxLCAyNDAsIDIxMSwgNDEsIDI0MCwgMjA3LCA0MSwgMjUxLCAyMCwgCisgICAgNDEsIDI0MCwgMTk0LCA0MSwgMjQxLCAxOTksIDQxLCAyMjYsIDM1LCA0MSwgMjI2LCA2OSwgNDEsIDI0MSwgMTgzLCA0MSwgCisgICAgMjI2LCA2NiwgNDEsIDIyNiwgODIsIDQxLCAyNTEsIDIzNywgNDEsIDIyNSwgMTQwLCA0MSwgMjUxLCAxMDYsIDQxLCAyNDEsIAorICAgIDQyLCA0MSwgMjI1LCAxMzAsIDQxLCAyNDEsIDM1LCA0MSwgMjQxLCAzNywgNDEsIDIzMiwgNywgNDEsIDIzMiwgMywgNDEsIAorICAgIDIzMiwgMTEsIDQxLCAyMzEsIDIxMywgNDEsIDIzMSwgMjM4LCA0MSwgMjMxLCAxMCwgNDEsIDIzMCwgMjQ1LCA0MSwgMjMwLCAKKyAgICAyNDQsIDQxLCAyMzEsIDEzOCwgNDEsIDIzMSwgMTM1LCA0MSwgMjMxLCAxMzksIDQxLCAyMTMsIDkwLCA0MSwgMjEzLCA4OCwgCisgICAgNDEsIDIxMiwgMTkyLCA0MSwgMjIzLCAxMjMsIDQxLCAyMjMsIDEyNywgNDEsIDIyMywgMjgsIDQxLCAyMjMsIDIzLCA0MSwgCisgICAgMjIzLCAyMzUsIDQxLCAyMjMsIDIzMiwgNDEsIDIxNCwgMjIsIDEwNSwgMjAxLCAxNiwgMzEsIDI0MCwgMjI2LCAyMTIsIDc5LCAKKyAgICAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTE2LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTA5LCAxMDUsIAorICAgIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTY2LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTYzLCAxMDUsIDIwMSwgCisgICAgMTYsIDMxLCAyNDAsIDIyNiwgMTgwLCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTg5LCAxMDUsIDIwMSwgMTYsIDMxLCAKKyAgICAyNDAsIDIyNiwgMTk4LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMTk1LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIAorICAgIDIyNiwgMjAwLCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMjE3LCAyMDAsIDEwNSwgMjAxLCAxNiwgMzEsIDI0MCwgCisgICAgMjI2LCAyNDUsIDEyNCwgMTA1LCAyMDEsIDE2LCAzMSwgMjQwLCAyMjYsIDIxNiwgNDEsIDEwNSwgMjAxLCAxNiwgMzEsIAorICAgIDI0MCwgMjI2LCAyMTcsIDExNywgMTA1LCAyMDEsIDE2LCAzMSwgMjQwLCAyMjYsIDI0MywgMjMxLCAxMDUsIDIwMSwgMTYsIAorICAgIDMxLCAyNDAsIDIyNiwgMjQ0LCA4NywgMTA1LCAyMDEsIDE2LCAzMSwgMjQwLCAyMjYsIDIyMCwgNDcsIDEwNSwgMjAxLCAxNiwgCisgICAgMzEsIDI0MCwgMjI2LCAyMjEsIDQwLCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMjQ1LCAxNDcsIDEwNSwgMjAxLCAKKyAgICAxNiwgMzEsIDI0MCwgMjI2LCAyMjksIDI4LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDAsIDIyNiwgMjE2LCAzOCwgMTA1LCAyMDEsIAorICAgIDE2LCAzMSwgMjQwLCAyMjYsIDIxNiwgMzIsIDEwNSwgMjAxLCAxNiwgMzEsIDI0MCwgMjI2LCAyMTYsIDI4LCAxMDUsIDIwMSwgCisgICAgMTYsIDMxLCAyNDAsIDIyNiwgMjE2LCAyOSwgMTA1LCAyMDEsIDE2LCAzMSwgMjQwLCAyMjYsIDIxNiwgMzQsIDQxLCAyNDAsIAorICAgIDIxNywgNDEsIDI0OCwgMTY0LCA0MSwgMjUzLCAxMDgsIDQxLCAxMzQsIDQxLCAyMjYsIDI0OSwgNDEsIDIyNiwgOTksIDQxLCAKKyAgICAyNDcsIDEwMSwgNDEsIDI0NywgMTAyLCAyMTksIDE2NSwgNDEsIDI0NywgMTAyLCAyNDksIDQ5LCA0MSwgMjM1LCAxNTQsIAorICAgIDQxLCAyNDUsIDU0LCAyMzAsIDI1LCAyNDEsIDIwMCwgNDEsIDI0NSwgNTQsIDIzMCwgMjUsIDIxOCwgMTIwLCA0MSwgMjQ1LCAKKyAgICA1NCwgMjMwLCAyNSwgMjE4LCAyNCwgNDEsIDI0NSwgNTQsIDIzMCwgMjUsIDIzMSwgMTM0LCA0MSwgMjQ5LCA5NiwgNDEsIAorICAgIDIyNiwgMjE0LCAyNTQsIDM0LCA0MSwgMjA1LCA0MSwgMjMwLCAxNzMsIDYxLCA0MSwgMTg4LCA0MSwgMTgxLCA0MSwgMjM0LCAKKyAgICAxOTEsIDQxLCAyMzEsIDE5MiwgNDEsIDI0MywgNTYsIDQxLCAyNTAsIDIwNiwgNDEsIDIzNCwgMTkwLCA0MSwgMjI2LCAyNiwgCisgICAgNDEsIDIyOSwgMTYzLCA0MSwgMjMwLCAxNzMsIDI0NCwgMjMwLCA0MSwgMjMwLCAxNzMsIDI0MywgMTc3LCA0MSwgMjMxLCAKKyAgICA4MiwgNDEsIDIzNCwgMTQwLCA0MSwgMjQwLCAxNTUsIDQxLCAyMzQsIDEwMywgNDEsIDIzMSwgNDQsIDQxLCAyNDIsIDE5MiwgCisgICAgNDEsIDIxNywgNzMsIDQxLCAyMzAsIDE3MywgMTUwLCA0MSwgMjMwLCAyMzgsIDQxLCAyNDcsIDEwOSwgNDEsIDIzNCwgNDksIAorICAgIDQxLCAyNDQsIDE0LCA0MSwgMjI4LCAyMDAsIDQxLCAyMzAsIDE3MywgMTgzLCA0MSwgMjMwLCAyMzUsIDQxLCAyNDksIDE3NiwgCisgICAgNDEsIDIzNCwgNDMsIDQxLCAyMzAsIDIzNiwgMjE5LCAxNjUsIDQxLCAyNDksIDE3NywgMjE5LCAxNjUsIDQxLCAyMzIsIAorICAgIDExMCwgMjE5LCAxNjUsIDQxLCAyMzQsIDQ0LCAyMTksIDE2NSwgNDEsIDIzMCwgMjM2LCAyNDksIDQ5LCA0MSwgMjQ5LCAKKyAgICAxNzcsIDI0OSwgNDksIDQxLCAyMzIsIDExMCwgMjQ5LCA0OSwgNDEsIDIzNCwgNDQsIDI0OSwgNDksIDQxLCAyMzIsIDExMCwgCisgICAgMTEwLCAxOTcsIDQxLCAyMzIsIDExMCwgMTEwLCAyMjMsIDQsIDIxOSwgMTY1LCA0MSwgMTkzLCA0MSwgMjM0LCA0LCA0MSwgCisgICAgMjMwLCAxNzUsIDQxLCAyNDIsIDEyNywgNDEsIDIyNCwgNjYsIDQxLCAyMjQsIDY3LCAxMTAsIDE5NywgNDEsIDIyNCwgNjcsIAorICAgIDExMCwgMjIzLCA0LCAyMTksIDE2NSwgNDEsIDIyNSwgNDcsIDQxLCAyMjgsIDEyNCwgNDEsIDIzMCwgMTczLCAxOTcsIDQxLCAKKyAgICAyMzAsIDE3NCwgNDEsIDIyNSwgNCwgNDEsIDIyOCwgMzMsIDQxLCAyMzAsIDE3MywgMjE1LCA3OSwgNDEsIDIzMCwgMTIwLCAKKyAgICA0MSwgMjMzLCAyMDcsIDQxLCAyMzAsIDEyMSwgMjMxLCAxMzgsIDQxLCAyMjUsIDMsIDQxLCAyMjgsIDMyLCA0MSwgMjMwLCAKKyAgICAxNzMsIDIxNCwgODIsIDQxLCAyMzAsIDExNSwgNDEsIDIzMywgMjA1LCA0MSwgMjMwLCAxMTYsIDIzMSwgMTM4LCA0MSwgCisgICAgMjM1LCAyOCwgMjI3LCA4NiwgNDEsIDIzMiwgMTEwLCAyMjcsIDg2LCA0MSwgMjU0LCA0NSwgNDEsIDI1MSwgODcsIDQxLCAKKyAgICAyNTAsIDE0NywgNDEsIDI1MCwgMTI1LCA0MSwgMjUwLCAyNTMsIDExMCwgMjM0LCAxNDAsIDQxLCAyNDksIDE3NSwgNDEsIAorICAgIDI0OCwgODgsIDQxLCAyNDIsIDUzLCA0MSwgMTU5LCA0MSwgMjQwLCAyMTgsIDQxLCAyMzUsIDI1MSwgNDEsIDIzNCwgNTYsIAorICAgIDQxLCAyMzQsIDQ0LCAyNTAsIDE4MiwgNDEsIDIzMywgMjQwLCA0MSwgMjMyLCAyMTEsIDQxLCAyMzIsIDIxMCwgNDEsIDIzMiwgCisgICAgMjAwLCA0MSwgMjMyLCAxMjIsIDQxLCAyMzEsIDE5MywgMjIwLCA3LCA0MSwgMjMxLCA5LCA0MSwgMjMwLCAyMjIsIDQxLCAKKyAgICAyMjYsIDI0LCA0MSwgMjI1LCAxNTMsIDQxLCAyMjUsIDk5LCA0MSwgMjI1LCA5NywgNDEsIDIxOSwgMTU5LCA0MSwgMjE4LCAKKyAgICAyMDMsIDQxLCAyMTQsIDgsIDQxLCAyMTUsIDgwLCAxMTAsIDE4MywgNDEsIDExOCwgMTEwLCAxODMsIDEwNSwgMjAxLCAxNiwgCisgICAgMzEsIDI0OCwgOTIsIDExNiwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMTA5LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIAorICAgIDkyLCAxNjYsIDEwNSwgMjAxLCAxNiwgMzEsIDI0OCwgOTIsIDE2MywgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMTgwLCAKKyAgICAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIDkyLCAxODksIDEwNSwgMjAxLCAxNiwgMzEsIDI0OCwgOTIsIDE5OCwgMTA1LCAyMDEsIAorICAgIDE2LCAzMSwgMjQ4LCA5MiwgMTk1LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIDkyLCAyMDAsIDEwNSwgMjAxLCAxNiwgMzEsIAorICAgIDI0OCwgOTIsIDIxNywgMjAwLCAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIDkyLCAyNDUsIDEyNCwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCA0MSwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE3LCAxMTcsIDEwNSwgMjAxLCAxNiwgMzEsIAorICAgIDI0OCwgOTIsIDI0MywgMjMxLCAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIDkyLCAyNDQsIDg3LCAxMDUsIDIwMSwgMTYsIDMxLCAKKyAgICAyNDgsIDkyLCAyMjAsIDQ3LCAxMDUsIDIwMSwgMTYsIDMxLCAyNDgsIDkyLCAyMjEsIDQwLCAxMDUsIDIwMSwgMTYsIDMxLCAKKyAgICAyNDgsIDkyLCAyNDUsIDE0NywgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjI5LCAyOCwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCAzOCwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE2LCAzMiwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCAyOCwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE2LCAyOSwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCAzNCwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE2LCAzNSwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCAzMCwgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE2LCAzMSwgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE2LCAzNywgMTA1LCAyMDEsIDE2LCAzMSwgMjQ4LCA5MiwgMjE2LCAzMywgMTA1LCAyMDEsIDE2LCAzMSwgCisgICAgMjQ4LCA5MiwgMjE3LCAxMTUsIDEwNSwgMjAxLCAxNiwgMzEsIDI0OCwgOTIsIDIxNywgMTE0LCA0MSwgMjQzLCA5NCwgMjQxLCAKKyAgICAxNzcsIDMxLCAyMTcsIDE0OSwgMjQ5LCA4MCwgMjQxLCAyMDcsIDI0MSwgMTc3LCAzMSwgMjE3LCAxNDksIDIyNCwgMTUsIAorICAgIDI0NSwgMTc5LCAyNDEsIDE3NywgMzEsIDI0NywgMTgzLCAyNTMsIDEyMywgMjE3LCAxNDksIDI1MSwgMjMyLCAyNDEsIDE3NywgCisgICAgMzEsIDIxMiwgMjE0LCAyNDQsIDcsIDI0MSwgMTc3LCAzMSwgMjE0LCA0MywgMjQxLCAxNzcsIDMxLCAyNDksIDE0MiwgMjQxLCAKKyAgICAxNzcsIDMxLCAyMTcsIDE0OSwgMjUzLCAxNzQsIDI0MSwgMTc3LCAzMSwgMjQxLCA0NiwgMjE2LCAyNDksIDI0MSwgMTc3LCAKKyAgICAzMSwgMywgMjE4LCAxMiwgMjQxLCAxNzcsIDMxLCAyMTYsIDE5NSwgMjQxLCAxNzcsIDMxLCAyMjYsIDk0LCAyNDEsIDE3NywgCisgICAgMzEsIDIxOSwgOTcsIDI0MSwgMTc3LCAzMSwgMjQ0LCAxMDgsIDI0MSwgMTc3LCAzMSwgMjQyLCAxMDksIDIyNSwgMTIwLCAKKyAgICAyNDEsIDE3NywgMzEsIDIzMCwgMjI1LCAyNDEsIDE3NywgMzEsIDI0NSwgODUsIDI0MSwgMTc3LCAzMSwgMjQ0LCA4LCAyNDEsIAorICAgIDE3NywgMzEsIDIxMywgMTk0LCAyMjcsIDYzLCAyMTcsIDE0OSwgMjQ4LCAzNywgMjQxLCAxNzcsIDMxLCAyNTMsIDIyMSwgCisgICAgMjQxLCAxNzcsIDMxLCAyNDksIDEyNCwgMjQxLCAxNzcsIDMxLCAyNTEsIDE1MCwgMjE3LCA5MiwgMjQxLCAxNzcsIDMxLCAKKyAgICAyNDIsIDEyNSwgMjQxLCAxNzcsIDMxLCAyMTksIDE3NywgMjUzLCAyMzcsIDI0MSwgMTc3LCAzMSwgMjIzLCAyMDUsIDI0MSwgCisgICAgMTc3LCAzMSwgMjM1LCAyMTcsIDI0MSwgMTc3LCAzMSwgMjQyLCAxMDksIDIxOCwgMTIsIDI0MSwgMTc3LCAzMSwgMjMwLCAKKyAgICAxODEsIDI0OSwgOTgsIDI0MSwgMTc3LCAzMSwgMjQyLCAxMDksIDIyNSwgNzcsIDI0MSwgMTc3LCAzMSwgMjE3LCAxNDksIAorICAgIDI1NCwgMTc4LCAyMTQsIDI0LCAyNDEsIDE3NywgMzEsIDIxNywgMTQ5LCAyNDksIDIwMSwgMjQ0LCA2NSwgMjQxLCAxNzcsIAorICAgIDMxLCAyMzUsIDIzMCwgMjQxLCAxNzcsIDMxLCAyNDYsIDEyLCAyNDEsIDE3NywgMzEsIDIyMywgMjA4LCAyNDEsIDE3NywgCisgICAgMzEsIDI0MiwgMTA5LCAyMjUsIDEwNCwgMjQxLCAxNzcsIDMxLCAyMjUsIDYxLCAyNDEsIDE3NywgMzEsIDI0OCwgMTA2LCAKKyAgICA2NSwgMjE3LCAxNDksIDIzMywgMiwgMjQxLCAxNzcsIDMxLCAyMTcsIDE0OSwgMjQ0LCAxNDIsIDI0MSwgMTc3LCAzMSwgCisgICAgMjI3LCAyOSwgMjQxLCAxNzcsIDMxLCAyMjcsIDEwOCwgMjQxLCAxNzcsIDMxLCAyNDgsIDEwLCAyNDEsIDE3NywgMzEsIAorICAgIDI0OCwgMzAsIDI0MSwgMTc3LCAzMSwgMjM1LCAyNDMsIDI0MSwgMTc3LCAzMSwgMjUxLCA3NywgMjQxLCAxNzcsIDMxLCAKKyAgICAyNDksIDE1OSwgMjExLCAyMTEsIDIzMSwgMTQxLCAyNDEsIDE3NywgMzEsIDI0MywgNjMsIDIxNiwgMjQ5LCAyNDEsIDE3NywgCisgICAgMzEsIDIyNSwgMTIsIDIxNSwgMTI1LCAyNDEsIDE3NywgMzEsIDIyNywgMjgsIDI0MSwgMTc3LCAzMSwgMjE3LCAxNDksIAorICAgIDIxMywgMjU0LCAyNDEsIDE3NywgMzEsIDIyMywgMTk4LCAyNDEsIDE3NywgMzEsIDIxNywgMTQ5LCAyNTAsIDE1MywgMjQxLCAKKyAgICAxNzcsIDMxLCAyMTcsIDE0OSwgMjUzLCAxNzAsIDIxNywgODcsIDI0MSwgMTc3LCAzMSwgMjE3LCAxNDksIDIzNCwgMTg1LCAKKyAgICAyMTksIDc0LCAyMzAsIDE4NSwgMjQxLCAxNzcsIDMxLCAyNDcsIDIzOSwgMjQxLCAxNzcsIDMxLCAyMTcsIDE0OSwgMjMxLCAKKyAgICAyMTUsIDIzMiwgOCwgMjQxLCAxNzcsIDMxLCAyNTQsIDE3OSwgMjQxLCAxNzcsIDMxLCAyMTcsIDE0OSwgMjE0LCAzOCwgCisgICAgMjQxLCAxNzcsIDMxLCAyMTcsIDE0OSwgMjQzLCAyMywgMjEzLCAyMjQsIDI0MSwgMTc3LCAzMSwgMjE3LCAxNDksIDIzNSwgCisgICAgNTUsIDIzMywgMTMxLCAyNDEsIDE3NywgMzEsIDI0NywgMTM2LCAyNDEsIDE3NywgMzEsIDIzMiwgMjQ5LCAyNDEsIDE3NywgCisgICAgMzEsIDIzNSwgMjIwLCAyMTYsIDE0NSwgMjQxLCAxNzcsIDMxLCAzLCAyMjUsIDc3LCAyNDEsIDE3NywgMzEsIDI1NCwgMTIyLCAKKyAgICAyNDksIDE1MSwgMjQxLCAxNzcsIDMxLCAyNTEsIDIzNSwgMjQ5LCAxNTEsIDgsIDQsIDIzNSwgMTU4LCA4LCA0LCAyMzUsIAorICAgIDE1MSwgOCwgNCwgNzIsIDgsIDQsIDIzNSwgMTgwLCA4LCA0LCAyMzYsIDUzLCA4LCA0LCAyMzYsIDM2LCA4LCA0LCAyMzYsIAorICAgIDU1LCA4LCA0LCAyMzYsIDU0LCA4LCA0LCAyNTMsIDEyMiwgOCwgNCwgMjUzLCA4NSwgOCwgNCwgNjEsIDgsIDQsIDI1MywgCisgICAgMjM5LCA4LCA0LCAyMTUsIDEzNSwgOCwgNCwgMjE1LCAxMzgsIDgsIDQsIDIxNSwgMTM2LCA4LCA0LCAyMjcsIDgsIDgsIDQsIAorICAgIDIyNiwgMjM4LCA4LCA0LCA3NSwgOCwgNCwgMjI3LCA0MSwgOCwgNCwgMjQ1LCAyLCA4LCA0LCA3NCwgOCwgNCwgMjEzLCAKKyAgICAxODMsIDgsIDQsIDI1MSwgMTUxLCA4LCA0LCAyNTEsIDE0OCwgOCwgNCwgMjUxLCAxODQsIDgsIDQsIDI1MSwgMTYxLCA4LCAKKyAgICA0LCAyNTEsIDE3NCwgOCwgNCwgMjUxLCAxNzMsIDgsIDQsIDI1MSwgMTc2LCA4LCA0LCAyNTEsIDE3NSwgOCwgNCwgMjUyLCAKKyAgICA0MSwgOCwgNCwgMjUyLCAzMywgOCwgNCwgMjUyLCAxMDcsIDgsIDQsIDI1MiwgNjEsIDgsIDQsIDI1MSwgMzAsIDgsIDQsIAorICAgIDI1MSwgMzQsIDgsIDQsIDI1MSwgMzEsIDgsIDQsIDI1MSwgMTA1LCA4LCA0LCAyNTEsIDg5LCA4LCA0LCAyNTEsIDEyOCwgOCwgCisgICAgNCwgMjUxLCAxMTAsIDgsIDQsIDI1MSwgMTk4LCA4LCA0LCAyNTEsIDI1MSwgOCwgNCwgMjUxLCAyMTAsIDgsIDQsIDI1MSwgCisgICAgMTYsIDgsIDQsIDI1MSwgMTMsIDgsIDQsIDI1MSwgNTQsIDgsIDQsIDI1MSwgMjksIDgsIDQsIDI1MSwgMjMsIDgsIDQsIAorICAgIDI1MSwgMjcsIDgsIDQsIDI1MSwgMSwgOCwgNCwgMjUxLCAwLCA4LCA0LCAyNTEsIDYsIDgsIDQsIDI1MSwgNCwgOCwgNCwgCisgICAgMjUxLCAyLCA4LCA0LCAyNTEsIDMsIDgsIDQsIDIyNSwgMTgxLCA4LCA0LCAyMjUsIDE3NywgOCwgNCwgMjI1LCAyNDAsIDgsIAorICAgIDQsIDIyNSwgMTkxLCA4LCA0LCAyMjUsIDIwNywgOCwgNCwgMjI1LCAyMzQsIDgsIDQsIDIyNSwgMjMwLCA4LCA0LCAyMjYsIAorICAgIDExMywgOCwgNCwgMjI2LCAxMDQsIDgsIDQsIDE5MywgOCwgNCwgMjI2LCAxNDksIDgsIDQsIDIyNSwgMjEsIDgsIDQsIDIyNSwgCisgICAgMjMsIDgsIDQsIDIyNSwgMjIsIDgsIDQsIDIyNSwgMTEzLCA4LCA0LCAyMjUsIDEwMiwgOCwgNCwgMjI1LCAxNTAsIDgsIDQsIAorICAgIDIyNSwgMTI1LCA4LCA0LCAyMjUsIDgsIDgsIDQsIDIyNSwgNSwgOCwgNCwgMjI1LCAzNSwgOCwgNCwgMjI1LCAyMCwgOCwgNCwgCisgICAgMjI1LCAxMywgOCwgNCwgMjI1LCAxOCwgOCwgNCwgMjI0LCAyNDQsIDgsIDQsIDIyNCwgMjQzLCA4LCA0LCAyMjQsIDI0OCwgCisgICAgOCwgNCwgMjI0LCAyNDcsIDgsIDQsIDIyNCwgMjQ1LCA4LCA0LCAyMjQsIDI0NiwgOCwgNCwgMjUyLCAxNiwgOCwgNCwgMjUyLCAKKyAgICAxNSwgOCwgNCwgMjUyLCAyMiwgOCwgNCwgMjUyLCAxNywgOCwgNCwgMjUyLCAxOSwgOCwgNCwgMjUyLCAxOCwgOCwgNCwgCisgICAgMjUyLCAyMSwgOCwgNCwgMjUyLCAyMCwgOCwgNCwgMjUyLCAyOCwgOCwgNCwgMjUyLCAyNywgOCwgNCwgMjUyLCAzMSwgOCwgCisgICAgNCwgMjUyLCAyOSwgOCwgNCwgMjUyLCA3LCA4LCA0LCAyNTIsIDksIDgsIDQsIDI1MiwgOCwgOCwgNCwgMjUyLCAxMiwgOCwgCisgICAgNCwgMjUyLCAxMSwgOCwgNCwgMjUyLCAxNCwgOCwgNCwgMjUyLCAxMywgOCwgNCwgMjUyLCAyMywgOCwgNCwgMjUyLCAyNiwgCisgICAgOCwgNCwgMjUyLCAyNCwgOCwgNCwgMjUyLCAzLCA4LCA0LCAyNTIsIDIsIDgsIDQsIDI1MiwgMTAsIDgsIDQsIDI1MiwgNiwgCisgICAgOCwgNCwgMjUyLCA0LCA4LCA0LCAyNTIsIDUsIDgsIDQsIDI1MSwgMjU1LCA4LCA0LCAyNTEsIDI1NCwgOCwgNCwgMjUyLCAxLCAKKyAgICA4LCA0LCAyNTIsIDAsIDgsIDQsIDIyOSwgMjQ4LCA4LCA0LCAyMjksIDI0NywgOCwgNCwgMjI5LCAyNTMsIDgsIDQsIDIyOSwgCisgICAgMjQ5LCA4LCA0LCAyMjksIDI1MCwgOCwgNCwgMjI5LCAyNTIsIDgsIDQsIDIyOSwgMjUxLCA4LCA0LCAyMjksIDI1NSwgOCwgCisgICAgNCwgMjI5LCAyNTQsIDgsIDQsIDIzMCwgMSwgOCwgNCwgMjMwLCAwLCA4LCA0LCAyMjksIDI0NCwgOCwgNCwgMjI5LCAyNDMsIAorICAgIDgsIDQsIDIyOSwgMjQ2LCA4LCA0LCAyMjksIDI0NSwgOCwgNCwgMjI5LCAyMzgsIDgsIDQsIDIyOSwgMjM3LCA4LCA0LCAKKyAgICAyMjksIDI0MiwgOCwgNCwgMjI5LCAyNDEsIDgsIDQsIDIyOSwgMjM5LCA4LCA0LCAyMjksIDI0MCwgOCwgNCwgMjI5LCAyMzIsIAorICAgIDgsIDQsIDIyOSwgMjMxLCA4LCA0LCAyMjksIDIzNiwgOCwgNCwgMjI5LCAyMzUsIDgsIDQsIDIyOSwgMjMzLCA4LCA0LCAKKyAgICAyMjksIDIzNCwgOCwgNCwgMjQxLCA5NiwgOCwgNCwgMjQxLCA5NSwgOCwgNCwgMjQxLCAxMDEsIDgsIDQsIDI0MSwgOTcsIDgsIAorICAgIDQsIDI0MSwgOTgsIDgsIDQsIDI0MSwgMTAwLCA4LCA0LCAyNDEsIDk5LCA4LCA0LCAyNDEsIDEwNCwgOCwgNCwgMjQxLCAKKyAgICAxMDMsIDgsIDQsIDI0MSwgMTA2LCA4LCA0LCAyNDEsIDEwNSwgOCwgNCwgMjQxLCA4NywgOCwgNCwgMjQxLCA4OSwgOCwgNCwgCisgICAgMjQxLCA4OCwgOCwgNCwgMjQxLCA5MiwgOCwgNCwgMjQxLCA5MSwgOCwgNCwgMjQxLCA5NCwgOCwgNCwgMjQxLCA5MywgOCwgCisgICAgNCwgMjQxLCA4MywgOCwgNCwgMjQxLCA4MiwgOCwgNCwgMjQxLCA5MCwgOCwgNCwgMjQxLCA4NiwgOCwgNCwgMjQxLCA4NCwgCisgICAgOCwgNCwgMjQxLCA4NSwgOCwgNCwgMjQxLCA3NywgOCwgNCwgMjQxLCA4MSwgOCwgNCwgMjQxLCA4MCwgOCwgNCwgMjQxLCAKKyAgICA3OCwgOCwgNCwgMjQxLCA3OSwgOCwgNCwgMjMwLCAyNDEsIDgsIDQsIDIzMCwgMjQwLCA4LCA0LCAyMzEsIDQyLCA4LCA0LCAKKyAgICAyMzAsIDI0NywgOCwgNCwgMjMxLCAxNiwgOCwgNCwgMjMxLCAzNCwgOCwgNCwgMjMxLCAzMiwgOCwgNCwgMjMxLCAyMDIsIDgsIAorICAgIDQsIDIzMSwgMTk4LCA4LCA0LCAxODgsIDgsIDQsIDIzMSwgMjM1LCA4LCA0LCAyMzAsIDE0NCwgOCwgNCwgMjMwLCAxNDMsIAorICAgIDgsIDQsIDIzMCwgMTQ3LCA4LCA0LCAyMzAsIDE0NSwgOCwgNCwgMjMwLCAxOTEsIDgsIDQsIDIzMCwgMTc3LCA4LCA0LCAKKyAgICAyMzAsIDIzMSwgOCwgNCwgMjMwLCAxOTYsIDgsIDQsIDIzMSwgOTMsIDgsIDQsIDIzMSwgMTU2LCA4LCA0LCAyMzAsIDEyNSwgCisgICAgOCwgNCwgMjMwLCAxMjIsIDgsIDQsIDIzMCwgMTcyLCA4LCA0LCAyMzAsIDE0MCwgOCwgNCwgMjMwLCAxMzMsIDgsIDQsIAorICAgIDIzMCwgMTM4LCA4LCA0LCAyMzAsIDEwMCwgOCwgNCwgMjMwLCA5OSwgOCwgNCwgMjMwLCAxMDUsIDgsIDQsIDIzMCwgMTAyLCAKKyAgICA4LCA0LCAyNDQsIDUyLCA4LCA0LCAyNDQsIDQ3LCA4LCA0LCAyNDQsIDkwLCA4LCA0LCAyNDQsIDY3LCA4LCA0LCAyNDQsIAorICAgIDEzNSwgOCwgNCwgMjQ0LCAxMjYsIDgsIDQsIDI0NCwgMTY0LCA4LCA0LCAyNDQsIDEzOCwgOCwgNCwgMjQzLCAyMjksIDgsIAorICAgIDQsIDI0NCwgMTIsIDgsIDQsIDI0MywgMjUyLCA4LCA0LCAyNDMsIDE5MCwgOCwgNCwgMjQzLCAxODksIDgsIDQsIDI0MywgCisgICAgMjA1LCA4LCA0LCAyNDMsIDE5NSwgOCwgNCwgMjQzLCAxOTMsIDgsIDQsIDI0MywgMTk0LCA4LCA0LCAyNDMsIDE4MCwgOCwgCisgICAgNCwgMjQzLCAxNzksIDgsIDQsIDI0MywgMTgzLCA4LCA0LCAyNDMsIDE4MSwgOCwgNCwgMjE0LCAxMjUsIDgsIDQsIDIxNCwgCisgICAgMTIwLCA4LCA0LCAyMTQsIDE1NCwgOCwgNCwgMjE0LCAxMzQsIDgsIDQsIDIxNCwgMTQ2LCA4LCA0LCAyMTQsIDE0MywgOCwgCisgICAgNCwgMjE0LCAxNDgsIDgsIDQsIDIxNCwgMTQ3LCA4LCA0LCAyMTQsIDIzOSwgOCwgNCwgMjE0LCAyMzUsIDgsIDQsIDIxNSwgCisgICAgMSwgOCwgNCwgMjE0LCAyNTAsIDgsIDQsIDIxNCwgMTA2LCA4LCA0LCAyMTQsIDEwMiwgOCwgNCwgMjE0LCAxMTksIDgsIDQsIAorICAgIDIxNCwgMTA3LCA4LCA0LCAyMTQsIDE1NSwgOCwgNCwgMjE0LCAyMjEsIDgsIDQsIDIxNCwgOTMsIDgsIDQsIDIxNCwgOTIsIAorICAgIDgsIDQsIDIxNCwgOTksIDgsIDQsIDIxNCwgOTYsIDgsIDQsIDIxNCwgOTQsIDgsIDQsIDIxNCwgOTUsIDgsIDQsIDIxNCwgCisgICAgODYsIDgsIDQsIDIxNCwgODUsIDgsIDQsIDIxNCwgOTAsIDgsIDQsIDIxNCwgODksIDgsIDQsIDIxNCwgODcsIDgsIDQsIAorICAgIDIxNCwgODgsIDgsIDQsIDI0NywgMTMwLCA4LCA0LCAyNDcsIDExOCwgOCwgNCwgMjQ3LCAyMTEsIDgsIDQsIDI0NywgMTU1LCAKKyAgICA4LCA0LCAyNDcsIDE4OCwgOCwgNCwgMjQ3LCAxOTIsIDgsIDQsIDI0NywgMTkxLCA4LCA0LCAyNDgsIDk4LCA4LCA0LCAyNDgsIAorICAgIDkzLCA4LCA0LCAyNDgsIDE2NCwgOCwgNCwgMjQ4LCAxMTcsIDgsIDQsIDI0NiwgMTcsIDgsIDQsIDI0NiwgMTgsIDgsIDQsIAorICAgIDI0NywgNzQsIDgsIDQsIDI0NiwgNTYsIDgsIDQsIDI0NywgOTksIDgsIDQsIDI0NywgNzYsIDgsIDQsIDI0NywgMjM3LCA4LCAKKyAgICA0LCAyNDgsIDQxLCA4LCA0LCAyNDcsIDI1MiwgOCwgNCwgMjQ2LCA4LCA4LCA0LCAyNDYsIDYsIDgsIDQsIDI0NiwgMzMsIDgsIAorICAgIDQsIDI0NiwgMTYsIDgsIDQsIDI0NiwgMTEsIDgsIDQsIDI0NiwgMTQsIDgsIDQsIDIxNywgMjAsIDgsIDQsIDIxNywgMTQsIAorICAgIDgsIDQsIDIxNywgNzEsIDgsIDQsIDIxNywgMjksIDgsIDQsIDIxNywgNjMsIDgsIDQsIDIxNywgNjUsIDgsIDQsIDIxNywgCisgICAgNjQsIDgsIDQsIDIxNywgMjUzLCA4LCA0LCAyMTcsIDI0MCwgOCwgNCwgMjE4LCA1MiwgOCwgNCwgMjE4LCA1LCA4LCA0LCAKKyAgICAyMTYsIDY2LCA4LCA0LCAyMTYsIDY1LCA4LCA0LCAyMTYsIDY4LCA4LCA0LCAyMTYsIDY3LCA4LCA0LCAyMTYsIDIxOCwgOCwgCisgICAgNCwgMjE2LCAyMTQsIDgsIDQsIDEwOCwgOCwgNCwgMjE2LCAyMjYsIDgsIDQsIDIxNywgMTY2LCA4LCA0LCAyMTcsIDIyOSwgCisgICAgOCwgNCwgMjE3LCAxOTAsIDgsIDQsIDIxNiwgNTIsIDgsIDQsIDIxNiwgNDgsIDgsIDQsIDIxNiwgODIsIDgsIDQsIDIxNiwgCisgICAgNjQsIDgsIDQsIDIxNiwgNTMsIDgsIDQsIDIxNiwgNjIsIDgsIDQsIDI0OCwgNTgsIDgsIDQsIDI0OCwgNTcsIDgsIDQsIAorICAgIDI0OCwgNjMsIDgsIDQsIDI0OCwgNTksIDgsIDQsIDI0OCwgNjAsIDgsIDQsIDI0OCwgNjIsIDgsIDQsIDI0OCwgNjEsIDgsIAorICAgIDQsIDI0OCwgNzksIDgsIDQsIDI0OCwgNzgsIDgsIDQsIDI0OCwgODYsIDgsIDQsIDI0OCwgODAsIDgsIDQsIDI0OCwgNDgsIAorICAgIDgsIDQsIDI0OCwgNTAsIDgsIDQsIDI0OCwgNDksIDgsIDQsIDI0OCwgNTMsIDgsIDQsIDI0OCwgNTIsIDgsIDQsIDI0OCwgCisgICAgNTYsIDgsIDQsIDI0OCwgNTQsIDgsIDQsIDI0OCwgNzEsIDgsIDQsIDI0OCwgNzQsIDgsIDQsIDI0OCwgNzIsIDgsIDQsIAorICAgIDI0OCwgNDQsIDgsIDQsIDI0OCwgNDMsIDgsIDQsIDI0OCwgNTEsIDgsIDQsIDI0OCwgNDcsIDgsIDQsIDI0OCwgNDUsIDgsIAorICAgIDQsIDI0OCwgNDYsIDgsIDQsIDIyOSwgMjA2LCA4LCA0LCAyMjksIDIwNSwgOCwgNCwgMjI5LCAyMTMsIDgsIDQsIDIyOSwgCisgICAgMjA4LCA4LCA0LCAyMjksIDIwOSwgOCwgNCwgMjI5LCAyMTAsIDgsIDQsIDIyOSwgMjIyLCA4LCA0LCAyMjksIDIyMSwgOCwgCisgICAgNCwgMjI5LCAyMjgsIDgsIDQsIDIyOSwgMjIzLCA4LCA0LCAyMjksIDE5OCwgOCwgNCwgMjI5LCAxOTcsIDgsIDQsIDIyOSwgCisgICAgMjA0LCA4LCA0LCAyMjksIDE5OSwgOCwgNCwgMjI5LCAyMTQsIDgsIDQsIDIyOSwgMjIwLCA4LCA0LCAyMjksIDIxOCwgOCwgCisgICAgNCwgMjI5LCAxOTAsIDgsIDQsIDIyOSwgMTg5LCA4LCA0LCAyMjksIDE5NSwgOCwgNCwgMjI5LCAxOTMsIDgsIDQsIDIyOSwgCisgICAgMTkxLCA4LCA0LCAyMjksIDE5MiwgOCwgNCwgMjQxLCA2MywgOCwgNCwgMjQxLCA2MiwgOCwgNCwgMjQxLCA2OSwgOCwgNCwgCisgICAgMjQxLCA2NCwgOCwgNCwgMjQxLCA2NiwgOCwgNCwgMjQxLCA2NSwgOCwgNCwgMjQxLCA2OCwgOCwgNCwgMjQxLCA2NywgOCwgCisgICAgNCwgMjQxLCA3NCwgOCwgNCwgMjQxLCA3MywgOCwgNCwgMjQxLCA3NiwgOCwgNCwgMjQxLCA3NSwgOCwgNCwgMjQxLCA1NywgCisgICAgOCwgNCwgMjQxLCA1OCwgOCwgNCwgMjQxLCA2MCwgOCwgNCwgMjQxLCA1OSwgOCwgNCwgMjQxLCA2MSwgOCwgNCwgMjQxLCAKKyAgICA3MCwgOCwgNCwgMjQxLCA3MiwgOCwgNCwgMjQxLCA3MSwgOCwgNCwgMjQxLCA1NiwgOCwgNCwgMjI5LCAyMCwgOCwgNCwgCisgICAgMjI5LCAxOCwgOCwgNCwgMjI5LCA2NCwgOCwgNCwgMjI5LCAyMywgOCwgNCwgMjI5LCA0NiwgOCwgNCwgMjI5LCA2MCwgOCwgCisgICAgNCwgMjI5LCA1OSwgOCwgNCwgMjMwLCA1LCA4LCA0LCAyMDUsIDgsIDQsIDIzMCwgMTcsIDgsIDQsIDIyOCwgNDIsIDgsIDQsIAorICAgIDIyOCwgNDQsIDgsIDQsIDIyOCwgNDMsIDgsIDQsIDIyOCwgMTYyLCA4LCA0LCAyMjgsIDE0OSwgOCwgNCwgMjI4LCAxODUsIAorICAgIDgsIDQsIDIyOCwgMTcxLCA4LCA0LCAyMjksIDE2NSwgOCwgNCwgMjI5LCAxODcsIDgsIDQsIDIyOSwgMTc2LCA4LCA0LCAKKyAgICAyMjgsIDM3LCA4LCA0LCAyMjgsIDM0LCA4LCA0LCAyMjgsIDkyLCA4LCA0LCAyMjgsIDQxLCA4LCA0LCAyMjgsIDM5LCA4LCAKKyAgICA0LCAyMjgsIDQwLCA4LCA0LCAyNDEsIDEyNywgOCwgNCwgMjQxLCAxMjYsIDgsIDQsIDI0MSwgMTMyLCA4LCA0LCAyNDEsIAorICAgIDEyOCwgOCwgNCwgMjQxLCAxMjksIDgsIDQsIDI0MSwgMTMxLCA4LCA0LCAyNDEsIDEzMCwgOCwgNCwgMjQxLCAxMzcsIDgsIAorICAgIDQsIDI0MSwgMTM2LCA4LCA0LCAyNDEsIDEzOSwgOCwgNCwgMjQxLCAxMzgsIDgsIDQsIDI0MSwgMTE5LCA4LCA0LCAyNDEsIAorICAgIDEyMSwgOCwgNCwgMjQxLCAxMjAsIDgsIDQsIDI0MSwgMTIzLCA4LCA0LCAyNDEsIDEyNSwgOCwgNCwgMjQxLCAxMjQsIDgsIAorICAgIDQsIDI0MSwgMTMzLCA4LCA0LCAyNDEsIDEzNSwgOCwgNCwgMjQxLCAxMzQsIDgsIDQsIDI0MSwgMTE1LCA4LCA0LCAyNDEsIAorICAgIDExNCwgOCwgNCwgMjQxLCAxMjIsIDgsIDQsIDI0MSwgMTE4LCA4LCA0LCAyNDEsIDExNiwgOCwgNCwgMjQxLCAxMTcsIDgsIAorICAgIDQsIDI0MSwgMTA5LCA4LCA0LCAyNDEsIDEwOCwgOCwgNCwgMjQxLCAxMTMsIDgsIDQsIDI0MSwgMTEyLCA4LCA0LCAyNDEsIAorICAgIDExMCwgOCwgNCwgMjQxLCAxMTEsIDgsIDQsIDIzMiwgMjI0LCA4LCA0LCAyMzIsIDIxOCwgOCwgNCwgMjMzLCAxMywgOCwgNCwgCisgICAgMjMyLCAyMzEsIDgsIDQsIDIzMywgNSwgOCwgNCwgMjMzLCA0LCA4LCA0LCAyMzMsIDgsIDgsIDQsIDIzMywgNiwgOCwgNCwgCisgICAgMjMzLCAxMDIsIDgsIDQsIDIzMywgOTMsIDgsIDQsIDIzMywgMTU3LCA4LCA0LCAyMzMsIDExMSwgOCwgNCwgMjMyLCAxMzcsIAorICAgIDgsIDQsIDIzMiwgMTM2LCA4LCA0LCAyMzIsIDEzOSwgOCwgNCwgMjMyLCAxMzgsIDgsIDQsIDIzMiwgMTcxLCA4LCA0LCAKKyAgICAyMzIsIDE2MSwgOCwgNCwgMjMyLCAyMDgsIDgsIDQsIDIzMiwgMTc1LCA4LCA0LCAyMzMsIDI4LCA4LCA0LCAyMzMsIDgyLCAKKyAgICA4LCA0LCAyMzMsIDQxLCA4LCA0LCAyMzIsIDEzMiwgOCwgNCwgMjMyLCAxMzEsIDgsIDQsIDIzMiwgMTU2LCA4LCA0LCAyMzIsIAorICAgIDEzNSwgOCwgNCwgMjMyLCAxMzMsIDgsIDQsIDIzMiwgMTM0LCA4LCA0LCAyMzIsIDExNCwgOCwgNCwgMjMyLCAxMTMsIDgsIAorICAgIDQsIDIzMiwgMTIxLCA4LCA0LCAyMzIsIDExNywgOCwgNCwgMjMyLCAxMTUsIDgsIDQsIDIzMiwgMTE2LCA4LCA0LCAyNDIsIAorICAgIDE2NSwgOCwgNCwgMjQyLCAxNjQsIDgsIDQsIDI0MiwgMTkwLCA4LCA0LCAyNDIsIDE3NSwgOCwgNCwgMjQyLCAxODIsIDgsIAorICAgIDQsIDI0MiwgMTgxLCA4LCA0LCAyNDIsIDE4NCwgOCwgNCwgMjQyLCAxODMsIDgsIDQsIDI0MywgNjUsIDgsIDQsIDI0MywgCisgICAgNjAsIDgsIDQsIDI0MywgMTEwLCA4LCA0LCAyNDMsIDc1LCA4LCA0LCAyNDIsIDcyLCA4LCA0LCAyNDIsIDcxLCA4LCA0LCAKKyAgICAyNDIsIDc0LCA4LCA0LCAyNDIsIDczLCA4LCA0LCAyNDIsIDEzMCwgOCwgNCwgMjQyLCAxMjgsIDgsIDQsIDI0MiwgMTUwLCAKKyAgICA4LCA0LCAyNDIsIDEzOCwgOCwgNCwgMjQzLCA5LCA4LCA0LCAyNDMsIDcsIDgsIDQsIDI0MywgMzgsIDgsIDQsIDI0MywgMjAsIAorICAgIDgsIDQsIDI0MiwgNjIsIDgsIDQsIDI0MiwgNjEsIDgsIDQsIDI0MiwgOTIsIDgsIDQsIDI0MiwgNzAsIDgsIDQsIDI0MiwgCisgICAgNjMsIDgsIDQsIDI0MiwgNjksIDgsIDQsIDIzNCwgNzAsIDgsIDQsIDIzNCwgNjksIDgsIDQsIDIzNCwgMTAxLCA4LCA0LCAKKyAgICAyMzQsIDg0LCA4LCA0LCAyMzQsIDk0LCA4LCA0LCAyMzQsIDk3LCA4LCA0LCAyMzQsIDk1LCA4LCA0LCAyMzQsIDIwNywgOCwgCisgICAgNCwgMjM0LCAxOTYsIDgsIDQsIDE4MSwgOCwgNCwgMjM0LCAyMzMsIDgsIDQsIDIzMywgMjIxLCA4LCA0LCAyMzMsIDIyNiwgCisgICAgOCwgNCwgMjMzLCAyMjMsIDgsIDQsIDIzNCwgOSwgOCwgNCwgMjM0LCA1LCA4LCA0LCAyMzQsIDM3LCA4LCA0LCAyMzQsIDE2LCAKKyAgICA4LCA0LCAyMzQsIDE2MiwgOCwgNCwgMjM0LCAxNDYsIDgsIDQsIDIzNCwgMTg4LCA4LCA0LCAyMzQsIDE2NSwgOCwgNCwgCisgICAgMjMzLCAyMTAsIDgsIDQsIDIzMywgMjA4LCA4LCA0LCAyMzMsIDIzOCwgOCwgNCwgMjMzLCAyMjAsIDgsIDQsIDIzMywgMjEzLCAKKyAgICA4LCA0LCAyMzMsIDIxNywgOCwgNCwgMjQyLCAyNDcsIDgsIDQsIDI0MiwgMjQ2LCA4LCA0LCAyNDIsIDI1MSwgOCwgNCwgCisgICAgMjQyLCAyNDgsIDgsIDQsIDI0MiwgMjUwLCA4LCA0LCAyNDIsIDI0OSwgOCwgNCwgMjQzLCAyLCA4LCA0LCAyNDMsIDEsIDgsIAorICAgIDQsIDI0MywgNSwgOCwgNCwgMjQzLCAzLCA4LCA0LCAyNDIsIDIzOCwgOCwgNCwgMjQyLCAyMzcsIDgsIDQsIDI0MiwgMjQwLCAKKyAgICA4LCA0LCAyNDIsIDIzOSwgOCwgNCwgMjQyLCAyNDMsIDgsIDQsIDI0MiwgMjQyLCA4LCA0LCAyNDIsIDI0NSwgOCwgNCwgCisgICAgMjQyLCAyNDQsIDgsIDQsIDI0MiwgMjUzLCA4LCA0LCAyNDIsIDI1MiwgOCwgNCwgMjQzLCAwLCA4LCA0LCAyNDIsIDI1NCwgCisgICAgOCwgNCwgMjQyLCAyMzMsIDgsIDQsIDI0MiwgMjMyLCA4LCA0LCAyNDIsIDI0MSwgOCwgNCwgMjQyLCAyMzYsIDgsIDQsIAorICAgIDI0MiwgMjM0LCA4LCA0LCAyNDIsIDIzNSwgOCwgNCwgMjMxLCA2MCwgOCwgNCwgMjMxLCA2MSwgOCwgNCwgMjMxLCA3OSwgOCwgCisgICAgNCwgMjMxLCA3OCwgOCwgNCwgMjMxLCA4MSwgOCwgNCwgMjMxLCA4MCwgOCwgNCwgMjMxLCA1MSwgOCwgNCwgMjMxLCA1MywgCisgICAgOCwgNCwgMjMxLCA1MiwgOCwgNCwgMjMxLCA1NiwgOCwgNCwgMjMxLCA1NSwgOCwgNCwgMjMxLCA1OCwgOCwgNCwgMjMxLCAKKyAgICA1NywgOCwgNCwgMjMxLCA2MiwgOCwgNCwgMjMxLCA2NCwgOCwgNCwgMjMxLCA2MywgOCwgNCwgMjMxLCA0NywgOCwgNCwgCisgICAgMjMxLCA0NiwgOCwgNCwgMjMxLCA1NCwgOCwgNCwgMjMxLCA1MCwgOCwgNCwgMjMxLCA0OCwgOCwgNCwgMjMxLCA0OSwgOCwgCisgICAgNCwgMjQwLCAxNzIsIDgsIDQsIDI0MCwgMTcxLCA4LCA0LCAyNDAsIDE3OCwgOCwgNCwgMjQwLCAxNzMsIDgsIDQsIDI0MCwgCisgICAgMTc1LCA4LCA0LCAyNDAsIDE3NCwgOCwgNCwgMjQwLCAxNzcsIDgsIDQsIDI0MCwgMTc2LCA4LCA0LCAyNDAsIDE4MywgOCwgCisgICAgNCwgMjQwLCAxODIsIDgsIDQsIDI0MCwgMTg1LCA4LCA0LCAyNDAsIDE4NCwgOCwgNCwgMjQwLCAxNjQsIDgsIDQsIDI0MCwgCisgICAgMTYzLCA4LCA0LCAyNDAsIDE2NiwgOCwgNCwgMjQwLCAxNjUsIDgsIDQsIDI0MCwgMTY4LCA4LCA0LCAyNDAsIDE2NywgOCwgCisgICAgNCwgMjQwLCAxNzAsIDgsIDQsIDI0MCwgMTY5LCA4LCA0LCAyNDAsIDE3OSwgOCwgNCwgMjQwLCAxODEsIDgsIDQsIDI0MCwgCisgICAgMTgwLCA4LCA0LCAyMjksIDExMCwgOCwgNCwgMjI5LCAxMTIsIDgsIDQsIDIyOSwgMTExLCA4LCA0LCAyMjksIDE1MCwgOCwgCisgICAgNCwgMjI5LCAxNDksIDgsIDQsIDIyOSwgMTU5LCA4LCA0LCAyMjksIDE1MywgOCwgNCwgMjI5LCA3MywgOCwgNCwgMjI5LCAKKyAgICA3MiwgOCwgNCwgMjI5LCA3NCwgOCwgNCwgMjI5LCA4MiwgOCwgNCwgMjI5LCA3OSwgOCwgNCwgMjI5LCA5MCwgOCwgNCwgCisgICAgMjI5LCA4NCwgOCwgNCwgMjI5LCAxNDMsIDgsIDQsIDIyOSwgMTQ4LCA4LCA0LCAyMjksIDE0NSwgOCwgNCwgMjQxLCAxNDIsIAorICAgIDgsIDQsIDI0MSwgMTUyLCA4LCA0LCAyNDEsIDE2MCwgOCwgNCwgMjQxLCAyMzQsIDgsIDQsIDI0MSwgMjI3LCA4LCA0LCAKKyAgICAxNTksIDgsIDQsIDI0MSwgMjQ1LCA4LCA0LCAyNDAsIDE5NiwgOCwgNCwgMjQwLCAxOTUsIDgsIDQsIDI0MCwgMTk4LCA4LCAKKyAgICA0LCAyNDAsIDE5NywgOCwgNCwgMjQwLCAyMjksIDgsIDQsIDI0MCwgMjIwLCA4LCA0LCAyNDEsIDU0LCA4LCA0LCAyNDEsIAorICAgIDM0LCA4LCA0LCAyNDEsIDE3OSwgOCwgNCwgMjQxLCAyMjIsIDgsIDQsIDI0MSwgMTkwLCA4LCA0LCAyMTQsIDI3LCA4LCA0LCAKKyAgICAyMTQsIDEyLCA4LCA0LCAyMTQsIDQ5LCA4LCA0LCAyMTQsIDM1LCA4LCA0LCAyMTMsIDE3MywgOCwgNCwgMjEzLCAxNzUsIDgsIAorICAgIDQsIDIxMywgMTc0LCA4LCA0LCAyMTMsIDE5MSwgOCwgNCwgMjEzLCAyMTQsIDgsIDQsIDIxMywgMTk3LCA4LCA0LCAyMTMsIAorICAgIDI0NiwgOCwgNCwgMjE0LCA2LCA4LCA0LCAyMTMsIDI1MSwgOCwgNCwgMjEyLCAyMywgOCwgNCwgMjEyLCAyMiwgOCwgNCwgCisgICAgMjEyLCAzNywgOCwgNCwgMjEyLCAyNSwgOCwgNCwgMjEyLCAzMCwgOCwgNCwgMjEyLCAzMiwgOCwgNCwgMjEyLCAzMSwgOCwgCisgICAgNCwgMjEyLCA5NSwgOCwgNCwgMjEyLCA5MiwgOCwgNCwgMjEyLCAxMDksIDgsIDQsIDIxMiwgOTgsIDgsIDQsIDIxMiwgMSwgCisgICAgOCwgNCwgMjEyLCAzLCA4LCA0LCAyMTIsIDIsIDgsIDQsIDIxMiwgMTIsIDgsIDQsIDIxMiwgMTEsIDgsIDQsIDIxMiwgMTYsIAorICAgIDgsIDQsIDIxMiwgMTMsIDgsIDQsIDIxMiwgNzcsIDgsIDQsIDIxMiwgODcsIDgsIDQsIDIxMiwgODEsIDgsIDQsIDIxMSwgCisgICAgMjUzLCA4LCA0LCAyMTEsIDI1MiwgOCwgNCwgMjEyLCA4LCA4LCA0LCAyMTIsIDAsIDgsIDQsIDIxMSwgMjU0LCA4LCA0LCAKKyAgICAyMTEsIDI1NSwgOCwgNCwgMjExLCAyNDQsIDgsIDQsIDIxMSwgMjQzLCA4LCA0LCAyMTEsIDI0OSwgOCwgNCwgMjExLCAyNDcsIAorICAgIDgsIDQsIDIxMSwgMjQ1LCA4LCA0LCAyMTEsIDI0NiwgOCwgNCwgMjQ5LCAyMjEsIDgsIDQsIDI0OSwgMjE3LCA4LCA0LCAKKyAgICAyNDksIDI0NCwgOCwgNCwgMjQ5LCAyMzAsIDgsIDQsIDI0OSwgMjQxLCA4LCA0LCAyNDksIDIzNSwgOCwgNCwgMjQ5LCAyNDMsIAorICAgIDgsIDQsIDI0OSwgMjQyLCA4LCA0LCAyNTAsIDE1NiwgOCwgNCwgMjUwLCAxNTAsIDgsIDQsIDI1MCwgMjE5LCA4LCA0LCAKKyAgICAyNTAsIDE4MywgOCwgNCwgMjQ5LCA0NSwgOCwgNCwgMjQ5LCA0NywgOCwgNCwgMjQ5LCA0NiwgOCwgNCwgMjQ5LCA5MiwgOCwgCisgICAgNCwgMjQ5LCA4MywgOCwgNCwgMjQ5LCAxNzUsIDgsIDQsIDI0OSwgMTA4LCA4LCA0LCAyNTAsIDk0LCA4LCA0LCAyNTAsIAorICAgIDEyNCwgOCwgNCwgMjUwLCA5OSwgOCwgNCwgMjQ5LCAyNiwgOCwgNCwgMjQ5LCAyNSwgOCwgNCwgMjQ5LCA1MywgOCwgNCwgCisgICAgMjQ5LCA0MywgOCwgNCwgMjQ5LCAzMSwgOCwgNCwgMjQ5LCA0MiwgOCwgNCwgMjQ5LCA2LCA4LCA0LCAyNDksIDUsIDgsIDQsIAorICAgIDI0OSwgMTYsIDgsIDQsIDI0OSwgMTIsIDgsIDQsIDI0OSwgNywgOCwgNCwgMjQ5LCA5LCA4LCA0LCAyMTEsIDIyNywgOCwgNCwgCisgICAgMjExLCAyMjYsIDgsIDQsIDIxMSwgMjMzLCA4LCA0LCAyMTEsIDIyOCwgOCwgNCwgMjExLCAyMzAsIDgsIDQsIDIxMSwgMjI5LCAKKyAgICA4LCA0LCAyMTEsIDIzMiwgOCwgNCwgMjExLCAyMzEsIDgsIDQsIDIxMSwgMjM5LCA4LCA0LCAyMTEsIDIzOCwgOCwgNCwgCisgICAgMjExLCAyNDIsIDgsIDQsIDIxMSwgMjQwLCA4LCA0LCAyMTEsIDIyMywgOCwgNCwgMjExLCAyMjUsIDgsIDQsIDIxMSwgMjI0LCAKKyAgICA4LCA0LCAyMTEsIDIzNCwgOCwgNCwgMjExLCAyMzcsIDgsIDQsIDIxMSwgMjM1LCA4LCA0LCAyMTEsIDIxOCwgOCwgNCwgCisgICAgMjExLCAyMjIsIDgsIDQsIDIxMSwgMjIxLCA4LCA0LCAyMTEsIDIxOSwgOCwgNCwgMjExLCAyMjAsIDgsIDQsIDIxMSwgMjEzLCAKKyAgICA4LCA0LCAyMTEsIDIxMiwgOCwgNCwgMjExLCAyMTcsIDgsIDQsIDIxMSwgMjE2LCA4LCA0LCAyMTEsIDIxNCwgOCwgNCwgCisgICAgMjExLCAyMTUsIDgsIDQsIDIyNywgMjI0LCA4LCA0LCAyMjcsIDIyMywgOCwgNCwgMjI3LCAyMjksIDgsIDQsIDIyNywgMjI1LCAKKyAgICA4LCA0LCAyMjcsIDIyNiwgOCwgNCwgMjI3LCAyMjgsIDgsIDQsIDIyNywgMjI3LCA4LCA0LCAyMjcsIDIzNCwgOCwgNCwgCisgICAgMjI3LCAyMzMsIDgsIDQsIDIyNywgMjM3LCA4LCA0LCAyMjcsIDIzNiwgOCwgNCwgMjI3LCAyMTcsIDgsIDQsIDIyNywgMjE4LCAKKyAgICA4LCA0LCAyMjcsIDIyMSwgOCwgNCwgMjI3LCAyMjIsIDgsIDQsIDIyNywgMjMwLCA4LCA0LCAyMjcsIDIzMiwgOCwgNCwgCisgICAgMjI3LCAyMTIsIDgsIDQsIDIyNywgMjIwLCA4LCA0LCAyMjcsIDIxNiwgOCwgNCwgMjI3LCAyMTMsIDgsIDQsIDIyNywgMjE0LCAKKyAgICA4LCA0LCAyMjcsIDIwNywgOCwgNCwgMjI3LCAyMDYsIDgsIDQsIDIyNywgMjExLCA4LCA0LCAyMjcsIDIxMCwgOCwgNCwgCisgICAgMjI3LCAyMDgsIDgsIDQsIDIyNywgMjA5LCA4LCA0LCAyMjAsIDU1LCA4LCA0LCAxODksIDgsIDQsIDIyMCwgMTE3LCA4LCA0LCAKKyAgICAyMjAsIDU4LCA4LCA0LCAyMjAsIDEwOSwgOCwgNCwgMjIwLCAxMTIsIDgsIDQsIDIyMCwgMTEwLCA4LCA0LCAyMjIsIDE0MiwgCisgICAgOCwgNCwgMjIyLCAxMzIsIDgsIDQsIDIyMiwgMjAyLCA4LCA0LCAyMjIsIDE1MCwgOCwgNCwgMjE4LCAyMjgsIDgsIDQsIAorICAgIDIxOCwgMjMwLCA4LCA0LCAyMTgsIDIyOSwgOCwgNCwgMjE5LCAyMjEsIDgsIDQsIDIxOSwgMjEwLCA4LCA0LCAyMTksIDI0MiwgCisgICAgOCwgNCwgMjE5LCAyMjQsIDgsIDQsIDIyMSwgMzUsIDgsIDQsIDIyMiwgMTAwLCA4LCA0LCAyMjEsIDU5LCA4LCA0LCAyMTgsIAorICAgIDIwNiwgOCwgNCwgMjE4LCAyMDQsIDgsIDQsIDIxOSwgMjcsIDgsIDQsIDIxOCwgMjI3LCA4LCA0LCAyMTgsIDIwOSwgOCwgNCwgCisgICAgMjE4LCAyMTcsIDgsIDQsIDIxOCwgMTEzLCA4LCA0LCAyMTgsIDExMiwgOCwgNCwgMjE4LCAxNzcsIDgsIDQsIDIxOCwgMTE5LCAKKyAgICA4LCA0LCAyMTgsIDExNCwgOCwgNCwgMjE4LCAxMTgsIDgsIDQsIDIxOSwgMTIzLCA4LCA0LCAyMTksIDEyMiwgOCwgNCwgCisgICAgMjE5LCAxMjgsIDgsIDQsIDIxOSwgMTI0LCA4LCA0LCAyMTksIDEyNSwgOCwgNCwgMjE5LCAxMjcsIDgsIDQsIDIxOSwgMTI2LCAKKyAgICA4LCA0LCAyMTksIDEzNSwgOCwgNCwgMjE5LCAxMzQsIDgsIDQsIDIxOSwgMTU3LCA4LCA0LCAyMTksIDEzNiwgOCwgNCwgCisgICAgMjE5LCAxMTksIDgsIDQsIDIxOSwgMTE4LCA4LCA0LCAyMTksIDEyMSwgOCwgNCwgMjE5LCAxMjAsIDgsIDQsIDIxOSwgMTMwLCAKKyAgICA4LCA0LCAyMTksIDEzMywgOCwgNCwgMjE5LCAxMzEsIDgsIDQsIDIxOSwgMTE1LCA4LCA0LCAyMTksIDExNCwgOCwgNCwgCisgICAgMjE5LCAxMTcsIDgsIDQsIDIxOSwgMTE2LCA4LCA0LCAyMTksIDEwOSwgOCwgNCwgMjE5LCAxMDgsIDgsIDQsIDIxOSwgMTEzLCAKKyAgICA4LCA0LCAyMTksIDExMiwgOCwgNCwgMjE5LCAxMTAsIDgsIDQsIDIxOSwgMTExLCA4LCA0LCAyMTIsIDcwLCA4LCA0LCAyMTIsIAorICAgIDY5LCA4LCA0LCAyMTIsIDc1LCA4LCA0LCAyMTIsIDcyLCA4LCA0LCAyMTIsIDUyLCA4LCA0LCAyMTIsIDU0LCA4LCA0LCAKKyAgICAyMTIsIDUzLCA4LCA0LCAyMTIsIDU3LCA4LCA0LCAyMTIsIDU2LCA4LCA0LCAyMTIsIDYwLCA4LCA0LCAyMTIsIDU4LCA4LCAKKyAgICA0LCAyMTIsIDY0LCA4LCA0LCAyMTIsIDYzLCA4LCA0LCAyMTIsIDY3LCA4LCA0LCAyMTIsIDY1LCA4LCA0LCAyMTIsIDQ4LCAKKyAgICA4LCA0LCAyMTIsIDQ3LCA4LCA0LCAyMTIsIDU1LCA4LCA0LCAyMTIsIDUxLCA4LCA0LCAyMTIsIDQ5LCA4LCA0LCAyMTIsIAorICAgIDUwLCA4LCA0LCAyMTIsIDQwLCA4LCA0LCAyMTIsIDM5LCA4LCA0LCAyMTIsIDQ0LCA4LCA0LCAyMTIsIDQzLCA4LCA0LCAKKyAgICAyMTIsIDQxLCA4LCA0LCAyMTIsIDQyLCA4LCA0LCAyNTAsIDcyLCA4LCA0LCAyNTAsIDY5LCA4LCA0LCAyNTAsIDkyLCA4LCAKKyAgICA0LCAyNTAsIDgwLCA4LCA0LCAyNTAsIDIsIDgsIDQsIDI1MCwgMSwgOCwgNCwgMjUwLCA0LCA4LCA0LCAyNTAsIDMsIDgsIDQsIAorICAgIDI1MCwgMTYsIDgsIDQsIDI1MCwgMTUsIDgsIDQsIDI1MCwgMjMsIDgsIDQsIDI1MCwgMTgsIDgsIDQsIDI1MCwgNTIsIDgsIAorICAgIDQsIDI1MCwgNTAsIDgsIDQsIDI1MCwgNjcsIDgsIDQsIDI1MCwgNTgsIDgsIDQsIDI0OSwgMjUyLCA4LCA0LCAyNTAsIDYsIAorICAgIDgsIDQsIDI1MCwgMCwgOCwgNCwgMjQ5LCAyNTMsIDgsIDQsIDI0OSwgMjU1LCA4LCA0LCAyNDksIDI0NiwgOCwgNCwgMjQ5LCAKKyAgICAyNDUsIDgsIDQsIDI0OSwgMjUwLCA4LCA0LCAyNDksIDI0OSwgOCwgNCwgMjQ5LCAyNDcsIDgsIDQsIDI0OSwgMjQ4LCA4LCAKKyAgICA0LCAyMjMsIDgwLCA4LCA0LCAyMjMsIDgxLCA4LCA0LCAyMjMsIDY3LCA4LCA0LCAyMjMsIDY4LCA4LCA0LCAyMjMsIDcxLCAKKyAgICA4LCA0LCAyMjMsIDcwLCA4LCA0LCAyMjMsIDczLCA4LCA0LCAyMjMsIDcyLCA4LCA0LCAyMjMsIDc1LCA4LCA0LCAyMjMsIAorICAgIDc0LCA4LCA0LCAyMjMsIDc5LCA4LCA0LCAyMjMsIDc2LCA4LCA0LCAyMjMsIDYzLCA4LCA0LCAyMjMsIDYyLCA4LCA0LCAKKyAgICAyMjMsIDY5LCA4LCA0LCAyMjMsIDY2LCA4LCA0LCAyMjMsIDY0LCA4LCA0LCAyMjMsIDY1LCA4LCA0LCAyMjMsIDU3LCA4LCAKKyAgICA0LCAyMjMsIDU2LCA4LCA0LCAyMjMsIDYxLCA4LCA0LCAyMjMsIDYwLCA4LCA0LCAyMjMsIDU4LCA4LCA0LCAyMjMsIDU5LCAKKyAgICA4LCA0LCAyMjgsIDE0NSwgOCwgNCwgMjI4LCAxNDQsIDgsIDQsIDIyOCwgMTQ3LCA4LCA0LCAyMjgsIDE0NiwgOCwgNCwgCisgICAgMjI4LCAxMzcsIDgsIDQsIDIyOCwgMTM5LCA4LCA0LCAyMjgsIDEzOCwgOCwgNCwgMjI4LCAxNDEsIDgsIDQsIDIyOCwgMTQwLCAKKyAgICA4LCA0LCAyMjgsIDE0MywgOCwgNCwgMjI4LCAxNDIsIDgsIDQsIDIyOCwgMTMyLCA4LCA0LCAyMjgsIDEzMSwgOCwgNCwgCisgICAgMjI4LCAxMzYsIDgsIDQsIDIyOCwgMTM1LCA4LCA0LCAyMjgsIDEzMywgOCwgNCwgMjI4LCAxMzQsIDgsIDQsIDIyOCwgMTI2LCAKKyAgICA4LCA0LCAyMjgsIDEyNSwgOCwgNCwgMjI4LCAxMzAsIDgsIDQsIDIyOCwgMTI5LCA4LCA0LCAyMjgsIDEyNywgOCwgNCwgCisgICAgMjI4LCAxMjgsIDgsIDQsIDIyMCwgMjUxLCA4LCA0LCAyMjAsIDI0NywgOCwgNCwgMjIxLCAyNCwgOCwgNCwgMjIxLCA2LCA4LCAKKyAgICA0LCAyMjAsIDE0MCwgOCwgNCwgMjIwLCAxNDIsIDgsIDQsIDIyMCwgMTQxLCA4LCA0LCAyMjAsIDE2MCwgOCwgNCwgMjIwLCAKKyAgICAxNTcsIDgsIDQsIDIyMCwgMTg3LCA4LCA0LCAyMjAsIDE3OCwgOCwgNCwgMjIwLCAyMjIsIDgsIDQsIDIyMCwgMjE1LCA4LCAKKyAgICA0LCAyMjAsIDI0MywgOCwgNCwgMjIwLCAyMzAsIDgsIDQsIDIyMCwgMTM2LCA4LCA0LCAyMjAsIDEzNSwgOCwgNCwgMjIwLCAKKyAgICAxNTAsIDgsIDQsIDIyMCwgMTM5LCA4LCA0LCAyMjAsIDEzNywgOCwgNCwgMjIwLCAxMzgsIDgsIDQsIDIyMCwgMTIwLCA4LCAKKyAgICA0LCAyMjAsIDExOSwgOCwgNCwgMjIwLCAxMjYsIDgsIDQsIDIyMCwgMTIzLCA4LCA0LCAyMjAsIDEyMSwgOCwgNCwgMjIwLCAKKyAgICAxMjIsIDgsIDQsIDIyNCwgMzMsIDgsIDQsIDIyNCwgMjgsIDgsIDQsIDIwMywgOCwgNCwgMjI0LCAzOSwgOCwgNCwgMjIzLCAKKyAgICAzMSwgOCwgNCwgMjIzLCAzMywgOCwgNCwgMjIzLCAzMiwgOCwgNCwgMjIzLCA5MCwgOCwgNCwgMjIzLCA4MywgOCwgNCwgCisgICAgMjIzLCAxMTIsIDgsIDQsIDIyMywgOTQsIDgsIDQsIDIyMywgMTk2LCA4LCA0LCAyMjQsIDIxLCA4LCA0LCAyMjMsIDIzMSwgCisgICAgOCwgNCwgMjIzLCAyNCwgOCwgNCwgMjIzLCAyMiwgOCwgNCwgMjIzLCA1MSwgOCwgNCwgMjIzLCAzMCwgOCwgNCwgMjIzLCAKKyAgICAyNiwgOCwgNCwgMjIzLCAyNywgOCwgNCwgMjIzLCA3LCA4LCA0LCAyMjMsIDYsIDgsIDQsIDIyMywgMTIsIDgsIDQsIDIyMywgCisgICAgMTAsIDgsIDQsIDIyMywgOCwgOCwgNCwgMjIzLCA5LCA4LCA0LCAyMzUsIDEwMSwgOCwgNCwgMjM1LCAxMDAsIDgsIDQsIAorICAgIDIzNSwgMTEwLCA4LCA0LCAyMzUsIDEwMiwgOCwgNCwgMjM1LCAxMDYsIDgsIDQsIDIzNSwgMTA1LCA4LCA0LCAyMzUsIDEwOCwgCisgICAgOCwgNCwgMjM1LCAxMDcsIDgsIDQsIDIzNSwgNDQsIDgsIDQsIDIzNSwgNDMsIDgsIDQsIDIzNSwgNDYsIDgsIDQsIDIzNSwgCisgICAgNDUsIDgsIDQsIDIzNSwgNTksIDgsIDQsIDIzNSwgNTcsIDgsIDQsIDIzNSwgNzEsIDgsIDQsIDIzNSwgNjEsIDgsIDQsIAorICAgIDIzNSwgMzgsIDgsIDQsIDIzNSwgMzYsIDgsIDQsIDIzNSwgNTQsIDgsIDQsIDIzNSwgNDIsIDgsIDQsIDIzNSwgMzksIDgsIAorICAgIDQsIDIzNSwgNDAsIDgsIDQsIDIzNSwgMzAsIDgsIDQsIDIzNSwgMjksIDgsIDQsIDIzNSwgMzQsIDgsIDQsIDIzNSwgMzMsIAorICAgIDgsIDQsIDIzNSwgMzEsIDgsIDQsIDIzNSwgMzIsIDgsIDQsIDIyNCwgMTkxLCA4LCA0LCAyMjQsIDE4OSwgOCwgNCwgMjI0LCAKKyAgICAxOTgsIDgsIDQsIDIyNCwgMTkyLCA4LCA0LCAyMjQsIDE5NSwgOCwgNCwgMjI0LCAxOTQsIDgsIDQsIDIyNCwgMTk3LCA4LCAKKyAgICA0LCAyMjQsIDE5NiwgOCwgNCwgMjI0LCAxNDQsIDgsIDQsIDIyNCwgMTQxLCA4LCA0LCAyMjQsIDE0NiwgOCwgNCwgMjI0LCAKKyAgICAxNDUsIDgsIDQsIDIyNCwgMTc4LCA4LCA0LCAyMjQsIDE3NywgOCwgNCwgMjI0LCAxODcsIDgsIDQsIDIyNCwgMTgxLCA4LCAKKyAgICA0LCAyMjQsIDEzNiwgOCwgNCwgMjI0LCAxMzIsIDgsIDQsIDIyNCwgMTc1LCA4LCA0LCAyMjQsIDE0MCwgOCwgNCwgMjI0LCAKKyAgICAxMzgsIDgsIDQsIDIyNCwgMTM5LCA4LCA0LCAyMjQsIDExNiwgOCwgNCwgMjI0LCAxMTQsIDgsIDQsIDIyNCwgMTI2LCA4LCAKKyAgICA0LCAyMjQsIDExOSwgOCwgNCwgMjI0LCAxMTcsIDgsIDQsIDIyNCwgMTE4LCA4LCA0LCAyMzUsIDkwLCA4LCA0LCAyMzUsIAorICAgIDg5LCA4LCA0LCAyMzUsIDk2LCA4LCA0LCAyMzUsIDkxLCA4LCA0LCAyMzUsIDkzLCA4LCA0LCAyMzUsIDkyLCA4LCA0LCAKKyAgICAyMzUsIDk1LCA4LCA0LCAyMzUsIDk0LCA4LCA0LCAyMzUsIDgxLCA4LCA0LCAyMzUsIDgzLCA4LCA0LCAyMzUsIDgyLCA4LCAKKyAgICA0LCAyMzUsIDg2LCA4LCA0LCAyMzUsIDg1LCA4LCA0LCAyMzUsIDg4LCA4LCA0LCAyMzUsIDg3LCA4LCA0LCAyMzUsIDc3LCAKKyAgICA4LCA0LCAyMzUsIDc2LCA4LCA0LCAyMzUsIDg0LCA4LCA0LCAyMzUsIDgwLCA4LCA0LCAyMzUsIDc4LCA4LCA0LCAyMzUsIAorICAgIDc5LCA4LCA0LCAyMzUsIDczLCA4LCA0LCAyMzUsIDcyLCA4LCA0LCAyMzUsIDc1LCA4LCA0LCAyMzUsIDc0LCA4LCA0LCAKKyAgICAyMjgsIDI0OSwgOCwgNCwgMjI4LCAyNDgsIDgsIDQsIDIyOSwgMCwgOCwgNCwgMjI4LCAyNTAsIDgsIDQsIDIyOCwgMjUyLCAKKyAgICA4LCA0LCAyMjgsIDI1MSwgOCwgNCwgMjI4LCAyNTUsIDgsIDQsIDIyOCwgMjUzLCA4LCA0LCAyMjgsIDIzOCwgOCwgNCwgCisgICAgMjI4LCAyMzksIDgsIDQsIDIyOCwgMjQ0LCA4LCA0LCAyMjgsIDI0MywgOCwgNCwgMjI4LCAyNDcsIDgsIDQsIDIyOCwgMjQ1LCAKKyAgICA4LCA0LCAyMjgsIDIzMywgOCwgNCwgMjI4LCAyNDIsIDgsIDQsIDIyOCwgMjM3LCA4LCA0LCAyMjgsIDIzNCwgOCwgNCwgCisgICAgMjI4LCAyMzUsIDgsIDQsIDIyOCwgMjI4LCA4LCA0LCAyMjgsIDIyNywgOCwgNCwgMjI4LCAyMzIsIDgsIDQsIDIyOCwgMjMxLCAKKyAgICA4LCA0LCAyMjgsIDIyOSwgOCwgNCwgMjI4LCAyMzAsIDgsIDQsIDIyOCwgMCwgOCwgNCwgMjI3LCAyNTUsIDgsIDQsIDIyOCwgCisgICAgMTAsIDgsIDQsIDIyOCwgNCwgOCwgNCwgMjI4LCA3LCA4LCA0LCAyMjgsIDYsIDgsIDQsIDIyOCwgOSwgOCwgNCwgMjI4LCA4LCAKKyAgICA4LCA0LCAyMjcsIDI0MywgOCwgNCwgMjI3LCAyNDUsIDgsIDQsIDIyNywgMjQ0LCA4LCA0LCAyMjcsIDI0OSwgOCwgNCwgCisgICAgMjI3LCAyNDgsIDgsIDQsIDIyNywgMjUzLCA4LCA0LCAyMjcsIDI1MCwgOCwgNCwgMjI3LCAyNDEsIDgsIDQsIDIyNywgMjQwLCAKKyAgICA4LCA0LCAyMjcsIDI0NywgOCwgNCwgMjI3LCAyNDIsIDgsIDQsIDIxMywgMTM4LCA4LCA0LCAyMTMsIDEzNywgOCwgNCwgCisgICAgMjEzLCAxNDUsIDgsIDQsIDIxMywgMTQwLCA4LCA0LCAyMTMsIDE0MiwgOCwgNCwgMjEzLCAxNDEsIDgsIDQsIDIxMywgMTQ0LCAKKyAgICA4LCA0LCAyMTMsIDE0MywgOCwgNCwgMjEzLCAxMjcsIDgsIDQsIDIxMywgMTI4LCA4LCA0LCAyMTMsIDEzMiwgOCwgNCwgCisgICAgMjEzLCAxMzEsIDgsIDQsIDIxMywgMTM2LCA4LCA0LCAyMTMsIDEzNCwgOCwgNCwgMjEzLCAxMDksIDgsIDQsIDIxMywgMTA3LCAKKyAgICA4LCA0LCAyMTMsIDExOSwgOCwgNCwgMjEzLCAxMTIsIDgsIDQsIDIxMywgMTEwLCA4LCA0LCAyMTMsIDExMSwgOCwgNCwgCisgICAgMjEyLCAyNDEsIDgsIDQsIDIxMiwgMjM5LCA4LCA0LCAyMTIsIDI1NSwgOCwgNCwgMjEyLCAyNDIsIDgsIDQsIDIxMiwgMjQ5LCAKKyAgICA4LCA0LCAyMTIsIDI0OCwgOCwgNCwgMjEyLCAyNTIsIDgsIDQsIDIxMiwgMjUwLCA4LCA0LCAyMTIsIDE4MiwgOCwgNCwgCisgICAgMjEyLCAxODEsIDgsIDQsIDIxMiwgMTg1LCA4LCA0LCAyMTIsIDE4MywgOCwgNCwgMjEyLCAyMTUsIDgsIDQsIDIxMiwgMjEyLCAKKyAgICA4LCA0LCAyMTIsIDIzNSwgOCwgNCwgMjEyLCAyMTksIDgsIDQsIDIxMiwgMTczLCA4LCA0LCAyMTIsIDE3MCwgOCwgNCwgCisgICAgMjEyLCAyMDMsIDgsIDQsIDIxMiwgMTgwLCA4LCA0LCAyMTIsIDE3NiwgOCwgNCwgMjEyLCAxNzcsIDgsIDQsIDIxMiwgMTU1LCAKKyAgICA4LCA0LCAyMTIsIDE1NCwgOCwgNCwgMjEyLCAxNjEsIDgsIDQsIDIxMiwgMTU4LCA4LCA0LCAyMTIsIDE1NiwgOCwgNCwgCisgICAgMjEyLCAxNTcsIDgsIDM0LCAyMjQsIDE3OCwgOCwgMzQsIDIzMywgMTMsIDgsIDM0LCAyMzQsIDcwLCA4LCAzNCwgMjI4LCA0LCAKKyAgICA4LCAzNCwgMjQ5LCAxMiwgOCwgMzQsIDIxOSwgMTI4LCA4LCAzNCwgMjQyLCAyNDQsIDgsIDM0LCAyNDMsIDIwLCA4LCAzNCwgCisgICAgMjMxLCA0MiwgOCwgMzQsIDI0MCwgMTcyLCA4LCAzNCwgMjMyLCAxMTYsIDgsIDM0LCAyNTIsIDMsIDgsIDM0LCAyMzAsIAorICAgIDE5NiwgOCwgMzQsIDIxMiwgMjM1LCA4LCAzNCwgMjI1LCA4LCA4LCAzNCwgMjQwLCAxNjYsIDgsIDM0LCAyMTcsIDI1MywgOCwgCisgICAgMzQsIDI0MywgMTEwLCA4LCAzNCwgMjEyLCAwLCA4LCAzNCwgMjQ5LCA2LCA4LCAzNCwgMjQ4LCA0NiwgOCwgMzQsIDI1MSwgCisgICAgMjcsIDgsIDM0LCAyNDIsIDI0MCwgOCwgMzQsIDIyNywgMjUwLCA4LCAzNCwgMjE2LCA4MiwgOCwgMzQsIDIyNywgNDEsIDgsIAorICAgIDM0LCAyMzUsIDc3LCA4LCAzNCwgMjEyLCAxMiwgOCwgMzQsIDIyNCwgMjQ0LCA4LCAzNCwgMjQxLCA5NCwgOCwgMzQsIDIxMiwgCisgICAgMjQxLCA4LCAzNCwgMjE0LCA5NSwgOCwgMzQsIDIyMCwgMTI2LCA4LCAzNCwgMjE0LCAyMjEsIDgsIDM0LCAyMTIsIDEwOSwgCisgICAgOCwgMzQsIDIzNSwgNzEsIDgsIDM0LCAyMjcsIDIxNiwgOCwgMzQsIDIzNSwgNzUsIDgsIDM0LCAyNDIsIDEzMCwgOCwgMzQsIAorICAgIDIzNSwgOTUsIDgsIDM0LCAyMTMsIDIxNCwgOCwgMzQsIDI0NiwgMzMsIDgsIDM0LCAyMjAsIDEzOCwgOCwgMzQsIDIzMywgOCwgCisgICAgOCwgMzQsIDI0OSwgMTYsIDgsIDM0LCAyNDksIDQ2LCA4LCAzNCwgMjQ5LCAyMzAsIDgsIDM0LCAyNDAsIDE2OSwgOCwgMzQsIAorICAgIDIyMCwgMjUxLCA4LCAzNCwgMjExLCAyNTUsIDgsIDM0LCAyMjAsIDE3OCwgOCwgMzQsIDI1MCwgNjcsIDgsIDM0LCAyMTEsIAorICAgIDIzMCwgOCwgMzQsIDIyOSwgMjUyLCA4LCAzNCwgMjM0LCAxODgsIDIzMiwgMjI1LCAxLCAyNTIsIDEwNywgMjMyLCAyMjUsIAorICAgIDEsIDE5MywgMjMyLCAyMjUsIDEsIDIyNiwgMjMsIDIzMiwgMjI1LCAxLCAyNDgsIDE2NCwgMjMyLCAyMjUsIDEsIDIxOCwgCisgICAgNTIsIDIzMiwgMjI1LCAxLCAyMTcsIDE2MSwgMjMyLCAyMjUsIDEsIDI0MywgMTEwLCAyMzIsIDIyNSwgMSwgMTgxLCAyMzIsIAorICAgIDIyNSwgMSwgMjM0LCAxMzgsIDIzMiwgMjI1LCAxLCAyMzUsIDEzOSwgMjMyLCAyMjUsIDEsIDI1MCwgMjE5LCAyMzIsIDIyNSwgCisgICAgMSwgMjUwLCA5MiwgMjMyLCAyMjUsIDEsIDI0NSwgMjQ5LCAyMzIsIDIyNSwgMSwgMjE2LCAxNDEsIDIzMiwgMjI1LCAxLCAKKyAgICAyMTYsIDEzMywgMjMyLCAyMjUsIDEsIDE4OCwgMjMyLCAyMjUsIDEsIDIwNSwgMjMyLCAyMjUsIDEsIDIzMywgMTU3LCAyMzIsIAorICAgIDIyNSwgMSwgMjIyLCAyMDIsIDIzMiwgMjI1LCAxLCAyMTIsIDc1LCAyMzIsIDIyNSwgMSwgMjEyLCAxMDksIDIzMiwgMjI1LCAKKyAgICAxLCAyMjksIDE1OSwgMjMyLCAyMjUsIDEsIDE1OSwgMjMyLCAyMjUsIDEsIDIxMywgMTUzLCAyMzIsIDIyNSwgMSwgMjQxLCAKKyAgICAxNzQsIDIzMiwgMjI1LCAxLCAyNDQsIDE2NCwgMjMyLCAyMjUsIDEsIDIxNCwgNDksIDIzMiwgMjI1LCAxLCAyMjEsIDI0LCAKKyAgICAyMzIsIDIyNSwgMSwgMTg2LCAyMzIsIDIyNSwgMSwgMjQyLCAyMjUsIDIzMiwgMjI1LCAxLCA2MSwgMjMyLCAyMjUsIDEsIAorICAgIDI1NCwgMTQ4LCAyMzIsIDIyNSwgMSwgNzQsIDIzMiwgMjI1LCAxLCAyNDUsIDIyLCAyMzIsIDIyNSwgMSwgNzIsIDIzMiwgCisgICAgMjI1LCAxLCA3NSwgMjMyLCAyMjUsIDEsIDY5LCAyMzIsIDIyNSwgMSwgMjE1LCAxODMsIDIzMiwgMjI1LCAxLCAyMTUsIAorICAgIDE3OCwgMjMyLCAyMjUsIDEsIDIyNywgOTksIDIzMiwgMjI1LCAxLCAxNjAsIDIzMCwgMTA0LCAyMTcsIDcxLCAyMzIsIDIyNSwgCisgICAgMSwgMTYwLCAyMzAsIDQ2LCAyMjUsIDE1MCwgMjMyLCAyMjUsIDEsIDE2MCwgMjMwLCAxMDQsIDI0OSwgMTUsIDIzMiwgMjI1LCAKKyAgICAxLCAxNjAsIDIzMCwgMTA0LCAyNTEsIDEyOCwgMjMyLCAyMjUsIDEsIDE2MCwgMjMwLCAxMDQsIDIwNSwgMjMyLCAyMjUsIDEsIAorICAgIDE2MCwgMjMwLCAxMDQsIDIzNSwgMTE2LCAyMzIsIDIyNSwgMjI1LCAyNywgMjQ5LCAxNTcsIDIzMiwgMjI1LCAyMjUsIDI3LCAKKyAgICAyNDMsIDIwMCwgMjE5LCA2OSwgMzksIDQsIDI0NSwgMTY1LCAzOSwgNCwgMjQ1LCAxNjIsIDM5LCA0LCAyNDEsIDIwNCwgMzksIAorICAgIDQsIDIxNCwgMSwgMzksIDQsIDIxNCwgMCwgMzksIDQsIDIyNiwgODYsIDM5LCA0LCAyNTEsIDE5MSwgMzksIDQsIDI1MSwgCisgICAgMjQyLCAzOSwgNCwgMjMxLCAxNzksIDM5LCA0LCAyMzQsIDAsIDM5LCA0LCAyMzEsIDczLCAzOSwgNCwgMjQzLCA1MSwgMzksIAorICAgIDQsIDI0NCwgMTE2LCAzOSwgNCwgMjE0LCAyMjcsIDM5LCA0LCAyMTcsIDIxOSwgMzksIDQsIDIxNywgMTQ3LCAzOSwgNCwgCisgICAgMjQ3LCAyMjQsIDM5LCA0LCAyNDcsIDIyMSwgMzksIDQsIDIzMywgNzQsIDM5LCA0LCAyMjQsIDEsIDM5LCA0LCAyNDgsIDI4LCAKKyAgICAzOSwgNCwgMjI5LCAyMTksIDM5LCA0LCAyMjIsIDg5LCAzOSwgNCwgMjIwLCAyNDEsIDM5LCA0LCAyMTIsIDg1LCAzOSwgNCwgCisgICAgMjEyLCA2NiwgMzksIDQsIDI1MCwgMTE2LCAzOSwgNCwgMjM1LCAxMjUsIDM5LCA0LCAyMjksIDcsIDM5LCA0LCAyMTMsIDM1LCAKKyAgICAzOSwgNCwgMjM0LCAxODcsIDM5LCA0LCAyMjksIDEzNiwgMzksIDQsIDI0MywgMzEsIDM5LCA0LCAyMzEsIDE0NSwgMzksIDQsIAorICAgIDIyOSwgMTg0LCAzOSwgNCwgMjI4LCAxNiwgMzksIDQsIDcyLCAzOSwgNCwgMjM1LCAyNTEsIDM5LCA0LCAyNDEsIDE2NSwgCisgICAgMzksIDQsIDI0MSwgMTQ2LCAzOSwgNCwgMjEzLCAyMzUsIDM5LCA0LCAyMTMsIDIyNiwgMzksIDQsIDIyNSwgMjQwLCAzOSwgCisgICAgNCwgMjUxLCAxODksIDM5LCA0LCAyNTEsIDE4NCwgMzksIDQsIDIzMSwgMTcyLCAzOSwgNCwgMjMzLCAyNTMsIDM5LCA0LCAKKyAgICAyMzEsIDcwLCAzOSwgNCwgMjQzLCA0NywgMzksIDQsIDI0NCwgOTAsIDM5LCA0LCAyMTQsIDE1NCwgMzksIDQsIDIxNywgNzEsIAorICAgIDM5LCA0LCAyMTcsIDEyOCwgMzksIDQsIDI0NywgMjE2LCAzOSwgNCwgMjQ3LCAyMjAsIDM5LCA0LCAyMzMsIDEzLCAzOSwgNCwgCisgICAgMjIzLCAxODgsIDM5LCA0LCAyNDcsIDIxMSwgMzksIDQsIDIyOSwgMjEzLCAzOSwgNCwgMjIwLCAxMTcsIDM5LCA0LCAyMjAsIAorICAgIDIxMiwgMzksIDQsIDIxMiwgMzcsIDM5LCA0LCAyMTIsIDYyLCAzOSwgNCwgMjQ5LCAyNDQsIDM5LCA0LCAyMzUsIDExMCwgCisgICAgMzksIDQsIDIyOSwgMCwgMzksIDQsIDIxMiwgMjU1LCAzOSwgNCwgMjM0LCAxMDEsIDM5LCA0LCAyMjksIDEyOCwgMzksIDQsIAorICAgIDI0MiwgMTkwLCAzOSwgNCwgMjMxLCA0MiwgMzksIDQsIDIyOSwgNjQsIDM5LCA0LCAyMjgsIDEwLCAzOSwgNCwgNjEsIDM5LCAKKyAgICA0LCAyNTQsIDMyLCAzOSwgNCwgMjI5LCAxNTUsIDM5LCA0LCAxNTksIDM5LCA0LCAyNDIsIDEsIDM5LCA0LCAyMTQsIDQ5LCAKKyAgICAzOSwgNCwgMjE0LCAzOSwgMzksIDQsIDE5MywgMzksIDQsIDI1MSwgMTk1LCAzOSwgNCwgMjUyLCAxMDcsIDM5LCA0LCAyMzEsIAorICAgIDE4NywgMzksIDQsIDIzNCwgNCwgMzksIDQsIDIzNCwgMywgMzksIDQsIDIzMSwgNzcsIDM5LCA0LCAyNDMsIDU1LCAzOSwgNCwgCisgICAgMjQ0LCAxNjQsIDM5LCA0LCAyMTUsIDEsIDM5LCA0LCAyMTgsIDUyLCAzOSwgNCwgMjE3LCAxNjEsIDM5LCA0LCAyNDcsIAorICAgIDIzMiwgMzksIDQsIDI0NywgMjIzLCAzOSwgNCwgMjMzLCAxNTcsIDM5LCA0LCAyMDMsIDM5LCA0LCAyNDgsIDE2NCwgMzksIAorICAgIDQsIDIyOSwgMjI4LCAzOSwgNCwgMjIyLCAyMDIsIDM5LCA0LCAyMjEsIDI0LCAzOSwgNCwgMjEyLCAxMDksIDM5LCA0LCAKKyAgICAyMTIsIDc1LCAzOSwgNCwgMjUwLCAyMTksIDM5LCA0LCAyMzUsIDEzOSwgMzksIDQsIDIyOSwgMTYsIDM5LCA0LCAxODYsIAorICAgIDM5LCA0LCAxODEsIDM5LCA0LCAyMzQsIDIzOSwgMzksIDQsIDIyOSwgMTQxLCAzOSwgNCwgMjQzLCAxMTAsIDM5LCA0LCAKKyAgICAxODgsIDM5LCA0LCAyMDUsIDM5LCA0LCAyMjgsIDIzLCAzOSwgNCwgMjI3LCA0OSwgMzksIDQsIDIyNywgNDUsIDM5LCA0LCAKKyAgICAyNDEsIDM5LCAzOSwgNCwgMjEzLCAyMDIsIDM5LCA0LCAyMTMsIDE5OCwgMzksIDQsIDIyNSwgMTI5LCAzOSwgNCwgMjUxLCAKKyAgICAxODcsIDM5LCA0LCAyNTEsIDExOCwgMzksIDQsIDIzMSwgMTY3LCAzOSwgNCwgMjMzLCAyNTEsIDM5LCA0LCAyMzEsIDY2LCAKKyAgICAzOSwgNCwgMjQzLCA0MywgMzksIDQsIDI0NCwgMywgMzksIDQsIDIxNCwgMTA4LCAzOSwgNCwgMjE2LCAyMzAsIDM5LCA0LCAKKyAgICAyMTcsIDEwNiwgMzksIDQsIDI0NywgMjE0LCAzOSwgNCwgMjQ3LCAyMTgsIDM5LCA0LCAyMzIsIDE4MCwgMzksIDQsIDIyMywgCisgICAgOTksIDM5LCA0LCAyNDcsIDc5LCAzOSwgNCwgMjI5LCAyMDAsIDM5LCA0LCAyMTksIDIyNiwgMzksIDQsIDIyMCwgMTgxLCAKKyAgICAzOSwgNCwgMjEyLCAxNCwgMzksIDQsIDIxMiwgNTksIDM5LCA0LCAyNDksIDExMywgMzksIDQsIDIzNSwgNjIsIDM5LCA0LCAKKyAgICAyMjgsIDI0NiwgMzksIDQsIDIxMiwgMjIwLCAzOSwgNCwgMjM0LCAxOSwgMzksIDQsIDIyOSwgMTI2LCAzOSwgNCwgMjQyLCAKKyAgICAxNDAsIDM5LCA0LCAyMzAsIDIwMiwgMzksIDQsIDIyOCwgMTc1LCAzOSwgNCwgMjI3LCAyNTEsIDM5LCA0LCA2OSwgMzksIDQsIAorICAgIDIxNSwgMTYwLCAzOSwgNCwgMjQwLCAyMTIsIDM5LCA0LCAyNDAsIDIwMiwgMzksIDQsIDIxMywgMTgzLCAzOSwgNCwgMjEzLCAKKyAgICAxNzcsIDM5LCA0LCAyMjUsIDM1LCAzOSwgNCwgMjUxLCAxODYsIDM5LCA0LCAyNTEsIDU0LCAzOSwgNCwgMjMxLCAxNjYsIAorICAgIDM5LCA0LCAyMzMsIDI0OSwgMzksIDQsIDIzMSwgNjUsIDM5LCA0LCAyNDMsIDQyLCAzOSwgNCwgMjQzLCAyMDUsIDM5LCA0LCAKKyAgICAyMTQsIDk5LCAzOSwgNCwgMjE2LCA4MiwgMzksIDQsIDIxNywgOTAsIDM5LCA0LCAyNDcsIDIxMiwgMzksIDQsIDI0NywgCisgICAgMjE3LCAzOSwgNCwgMjMyLCAxNTYsIDM5LCA0LCAyMjMsIDUxLCAzOSwgNCwgMjQ2LCAzMywgMzksIDQsIDIyOSwgMTk1LCAKKyAgICAzOSwgNCwgMjE5LCAyNywgMzksIDQsIDIyMCwgMTUwLCAzOSwgNCwgMjEyLCA4LCAzOSwgNCwgMjEyLCA1NSwgMzksIDQsIAorICAgIDI0OSwgNTMsIDM5LCA0LCAyMzUsIDU0LCAzOSwgNCwgMjI4LCAyNDIsIDM5LCA0LCAyMTIsIDIwMywgMzksIDQsIDIzMywgCisgICAgMjM4LCAzOSwgNCwgMjI5LCAxMjUsIDM5LCA0LCAyNDIsIDkyLCAzOSwgNCwgMjMwLCAxNzIsIDM5LCA0LCAyMjgsIDkyLCAKKyAgICAzOSwgNCwgMjI3LCAyNDcsIDM5LCA0LCA3NSwgMzksIDQsIDIyNywgNjIsIDM5LCA0LCAyMjksIDg2LCAzOSwgNCwgMjQxLCAKKyAgICA1NCwgMzksIDQsIDI0MSwgNDIsIDM5LCA0LCAyMTMsIDIxNCwgMzksIDQsIDIxMywgMjAzLCAzOSwgNCwgMjI1LCAxNTAsIAorICAgIDM5LCA0LCAyNTEsIDE4OCwgMzksIDQsIDI1MSwgMTI4LCAzOSwgNCwgMjMxLCAxNjgsIDM5LCA0LCAyMzMsIDI1MiwgMzksIAorICAgIDQsIDIzMSwgNjgsIDM5LCA0LCAyNDMsIDQ1LCAzOSwgNCwgMjQzLCA0NCwgMzksIDQsIDI0NCwgMTIsIDM5LCA0LCAyMTQsIAorICAgIDExOSwgMzksIDQsIDEwOCwgMzksIDQsIDIxNywgMTA5LCAzOSwgNCwgMjQ3LCAyMTUsIDM5LCA0LCAyNDcsIDIxOSwgMzksIAorICAgIDQsIDIzMiwgMjA4LCAzOSwgNCwgMjIzLCAxMTIsIDM5LCA0LCAyNDcsIDk5LCAzOSwgNCwgMjI5LCAyMDQsIDM5LCA0LCAKKyAgICAyMTksIDI0MiwgMzksIDQsIDIyMCwgMTg3LCAzOSwgNCwgMjEyLCAxNiwgMzksIDQsIDIxMiwgNjAsIDM5LCA0LCAyNDksIAorICAgIDE3NSwgMzksIDQsIDIzNSwgNzEsIDM5LCA0LCAyMjgsIDI0NywgMzksIDQsIDIxMiwgMjM1LCAzOSwgNCwgMjM0LCAzNywgCisgICAgMzksIDQsIDIyOSwgMTI3LCAzOSwgNCwgMjQyLCAxNTAsIDM5LCA0LCAyMzAsIDIzMSwgMzksIDQsIDIyOCwgMTg1LCAzOSwgCisgICAgNCwgMjI3LCAyNTMsIDM5LCA0LCA3NCwgMzksIDQsIDI0NSwgMTA4LCAzOSwgNCwgMjI5LCAxNDYsIDM5LCA0LCAyNDEsIAorICAgIDIyMiwgMzksIDQsIDI0MSwgMTkzLCAzOSwgNCwgMjE0LCA2LCAzOSwgNCwgMjEzLCAyNTMsIDM5LCA0LCAyMjYsIDk2LCAzOSwgCisgICAgNCwgMjUxLCAxOTIsIDM5LCA0LCAyNTEsIDI1MSwgMzksIDQsIDIzMSwgMTgwLCAzOSwgNCwgMjM0LCAxLCAzOSwgNCwgMjMzLCAKKyAgICAyNTUsIDM5LCA0LCAyMzEsIDc0LCAzOSwgNCwgMjQzLCA1MiwgMzksIDQsIDI0MywgNTAsIDM5LCA0LCAyNDQsIDEyMywgMzksIAorICAgIDQsIDIxNCwgMjMyLCAzOSwgNCwgMjE3LCAyMjksIDM5LCA0LCAyMTcsIDE0OCwgMzksIDQsIDI0NywgMjI1LCAzOSwgNCwgCisgICAgMjQ3LCAyMjIsIDM5LCA0LCAyMzMsIDgyLCAzOSwgNCwgMjI0LCAyMSwgMzksIDQsIDI0OCwgNDEsIDM5LCA0LCAyMjksIAorICAgIDIyMCwgMzksIDQsIDIyMiwgMTAwLCAzOSwgNCwgMjIwLCAyNDMsIDM5LCA0LCAyMTIsIDg3LCAzOSwgNCwgMjEyLCA2NywgCisgICAgMzksIDQsIDI1MCwgMTI0LCAzOSwgNCwgMjM1LCAxMjcsIDM5LCA0LCAyMjksIDksIDM5LCA0LCAyMTMsIDM4LCAzOSwgNCwgCisgICAgMjM0LCAxODgsIDM5LCA0LCAyMjksIDEzNywgMzksIDQsIDIyOSwgMTMzLCAzOSwgNCwgMjQzLCAzOCwgMzksIDQsIDI0MywgCisgICAgMjcsIDM5LCA0LCAyMzEsIDE1NiwgMzksIDQsIDIyOSwgMTg3LCAzOSwgNCwgMjI4LCAxNywgMzksIDQsIDIyOSwgMTYxLCAKKyAgICAzOSwgNCwgMjMzLCA0NiwgMzksIDI0OSwgMTU3LCAzOSwgMjQzLCAyMDAsIDIxOSwgNjksIDM5LCAyMjQsIDE1OCwgNzcsIAorICAgIDM5LCA0LCAyMjksIDIwMywgMjQ0LCAxNjQsIDM5LCA0LCAyMjksIDIwMywgMTgxLCAzOSwgNCwgMjI5LCAyMDMsIDIxOSwgCisgICAgMjI2LCAzOSwgMTYsIDI0NCwgMTEzLCAzOSwgMTYsIDIzNCwgMTg2LCAzOSwgMTYsIDIxNywgMzQsIDM5LCAxNiwgMjI5LCAKKyAgICAzOSwgMzksIDE2LCAyNTIsIDY2LCAzOSwgMTYsIDI0NCwgMTYzLCAzOSwgMTYsIDIxOCwgNDksIDM5LCAxNiwgMjQ4LCAxMjEsIAorICAgIDM5LCAxNiwgMjQ3LCA3OCwgMzksIDE2LCAyMzMsIDIyNywgMzksIDE2LCAyMTYsIDIzNCwgMzksIDE2LCAyNDcsIDk4LCAzOSwgCisgICAgMTYsIDIzNSwgNjMsIDM5LCAyMSwgMjEyLCA3OSwgMzksIDIxLCAxMTYsIDM5LCAyMSwgMTA5LCAzOSwgMjEsIDE2NiwgMzksIAorICAgIDIxLCAxNjMsIDM5LCAyMSwgMTgwLCAzOSwgMjEsIDE4OSwgMzksIDIxLCAxOTgsIDM5LCAyMSwgMTk1LCAzOSwgMjEsIDIwMCwgCisgICAgMzksIDQsIDIyOSwgMjAzLCAxODgsIDM5LCA0LCAyMjksIDIwMywgMjQ3LCA5OSwgMzMsIDYsIDEsIDIxMiwgODMsIDMzLCAzLCAKKyAgICAxLCAyMTIsIDgzLCAzMywgNiwgMSwgMjQ1LCAyNDUsIDMzLCAzLCAxLCAyNDUsIDI0NSwgMzMsIDYsIDEsIDIyMywgMjAyLCAKKyAgICAyNDUsIDI0NywgMzMsIDMsIDEsIDIyMywgMjAyLCAyNDUsIDI0NywgMzMsIDYsIDEsIDIzNSwgMTgzLCAzMywgMywgMSwgCisgICAgMjM1LCAxODMsIDMzLCA2LCAxLCAyNDcsIDExMywgMzMsIDMsIDEsIDI0NywgMTEzLCAzMywgNiwgMSwgMjMwLCAyMTAsIAorICAgIDIxNSwgMTc1LCAzMywgMywgMSwgMjMwLCAyMTAsIDIxNSwgMTc1LCAzMywgNiwgMSwgMjUxLCA2NCwgMjI3LCA2NywgMzMsIAorICAgIDMsIDEsIDI1MSwgNjQsIDIyNywgNjcsIDMzLCA2LCAxLCAyMjksIDE2OSwgMjEzLCAyMiwgMzMsIDMsIDEsIDIyOSwgMTY5LCAKKyAgICAyMTMsIDIyLCAzMywgNiwgMSwgMjEzLCAxOSwgMiwgMjUyLCAxMDIsIDIxMywgMjIsIDMzLCAzLCAxLCAyMTMsIDE5LCAyLCAKKyAgICAyNTIsIDEwMiwgMjEzLCAyMiwgMzMsIDYsIDEsIDIzNSwgMTgxLCAyMTMsIDQ5LCAzMywgMywgMSwgMjM1LCAxODEsIDIxMywgCisgICAgNDksIDMzLCA2LCAxLCAyMjMsIDIwMiwgMjEyLCAyMDMsIDMzLCAzLCAxLCAyMjMsIDIwMiwgMjEyLCAyMDMsIDMzLCA2LCAxLCAKKyAgICAyMzUsIDE4MSwgNjEsIDMzLCAzLCAxLCAyMzUsIDE4MSwgNjEsIDMzLCA2LCAxLCAyNDksIDE5MywgMjMyLCAyMjEsIDIxMiwgCisgICAgMTc0LCAzMywgMywgMSwgMjQ5LCAxOTMsIDIzMiwgMjIxLCAyMTIsIDE3NCwgMzMsIDYsIDEsIDI1MSwgMTM3LCAyMTIsIAorICAgIDE3NCwgMzMsIDMsIDEsIDI1MSwgMTM3LCAyMTIsIDE3NCwgMzMsIDYsIDEsIDIzNSwgMTgxLCAyNDksIDE5MywgMjMyLCAKKyAgICAyMjEsIDIxMiwgMTc0LCAzMywgMywgMSwgMjM1LCAxODEsIDI0OSwgMTkzLCAyMzIsIDIyMSwgMjEyLCAxNzQsIDMzLCA2LCAKKyAgICAxLCAyMTIsIDIzNywgMzMsIDMsIDEsIDIxMiwgMjM3LCAzMywgNiwgMSwgMjIzLCAyMDIsIDIxNiwgMTM2LCAzMywgMywgMSwgCisgICAgMjIzLCAyMDIsIDIxNiwgMTM2LCAzMywgNiwgMSwgMjE5LCAyMzYsIDI0OCwgNDEsIDMzLCAzLCAxLCAyMTksIDIzNiwgMjQ4LCAKKyAgICA0MSwgMzMsIDYsIDEsIDIxOSwgMjM2LCAyNDUsIDEzMSwgMzMsIDMsIDEsIDIxOSwgMjM2LCAyNDUsIDEzMSwgMzMsIDYsIDEsIAorICAgIDIxOSwgMjM2LCAyNDUsIDExNywgMzMsIDMsIDEsIDIxOSwgMjM2LCAyNDUsIDExNywgMzMsIDYsIDEsIDIzMCwgMjE0LCA3NSwgCisgICAgMzMsIDMsIDEsIDIzMCwgMjE0LCA3NSwgMzMsIDYsIDEsIDI1MSwgMTYzLCA3NSwgMzMsIDMsIDEsIDI1MSwgMTYzLCA3NSwgCisgICAgMzMsIDYsIDEsIDUxLCAyMzAsIDIxNCwgNzUsIDMzLCAzLCAxLCA1MSwgMjMwLCAyMTQsIDc1LCAzMywgMSwgMjMwLCAxNTYsIAorICAgIDc1LCAzNywgMzMsIDIxNCwgODQsIDM3LCAzMywgMjE3LCAyMDEsIDIzMSwgNCwgNTIsIDM3LCAzMywgMjQwLCAyMDEsIDIzMSwgCisgICAgNCwgNTIsIDM3LCAzMywgMjE3LCAxMDEsIDIzMSwgNCwgNTIsIDIyMCwgMjEsIDI1MywgMTMyLCAzNywgMzMsIDIzNCwgMTk4LCAKKyAgICAzNywgMzMsIDIyNiwgMTAxLCAzMywgMjM0LCAxOTgsIDMzLCAyMjYsIDEwMSwgMzMsIDYsIDEsIDI0NiwgMSwgMzMsIDMsIDEsIAorICAgIDI0NiwgMSwgMzMsIDYsIDEsIDI0NSwgMjM4LCAzMywgMywgMSwgMjQ1LCAyMzgsIDMzLCA2LCAxLCAyMTIsIDQ1LCAzMywgMywgCisgICAgMSwgMjEyLCA0NSwgMzMsIDYsIDEsIDI1MCwgMTQwLCAzMywgMywgMSwgMjUwLCAxNDAsIDMzLCA2LCAxLCAyNDUsIDIzNywgCisgICAgMzMsIDMsIDEsIDI0NSwgMjM3LCAzMywgNiwgMSwgMjE3LCAyMzAsIDIsIDIzMSwgMzcsIDEwMSwgMzMsIDMsIDEsIDIxNywgCisgICAgMjMwLCAyLCAyMzEsIDM3LCAxMDEsIDMzLCA2LCAxLCAyMTYsIDQzLCAzMywgMywgMSwgMjE2LCA0MywgMzMsIDYsIDEsIAorICAgIDIxNiwgMTE5LCAzMywgMywgMSwgMjE2LCAxMTksIDMzLCA2LCAxLCAyMTYsIDEyMywgMzMsIDMsIDEsIDIxNiwgMTIzLCAzMywgCisgICAgNiwgMSwgMjE3LCAyMzUsIDMzLCAzLCAxLCAyMTcsIDIzNSwgMzMsIDYsIDEsIDI0MCwgMTkwLCAzMywgMywgMSwgMjQwLCAKKyAgICAxOTAsIDMzLCA2LCAxLCAyMjAsIDEzMiwgMzMsIDMsIDEsIDIyMCwgMTMyLCAyMCwgMSwgNjEsIDIwLCAxLCAxODEsIDIwLCAKKyAgICAxLCA2OSwgMjAsIDEsIDIzMywgMjM4LCAyMCwgMSwgMjQ1LCAxNjUsIDIwLCAxLCAyMjQsIDEsIDIwLCAxLCAyMTgsIDM1LCAKKyAgICAyMCwgMSwgNzUsIDIwLCAxLCAyMjgsIDEwLCAyMCwgMSwgNzIsIDIwLCAxLCAyMzMsIDE1NywgMjAsIDEsIDE5MywgMjAsIDEsIAorICAgIDIyMywgMTM2LCAyMCwgMSwgMjIzLCAxODIsIDIwLCAxLCAyMzMsIDczLCAyMCwgMSwgMjMxLCAxNDQsIDIwLCAxLCAyMTgsIAorICAgIDQ5LCAyMCwgMSwgMjI5LCAyMjYsIDIwLCAxLCAyMjksIDE0LCAyMCwgMSwgMTgzLCAyMCwgMSwgMjE4LCAyMDUsIDIwLCAxLCAKKyAgICAyMzAsIDE3MiwgMjAsIDEsIDIyMCwgMjA3LCAyMCwgMSwgMjIwLCAxMTcsIDIwLCAxLCAyMjAsIDIxNywgMjAsIDEsIDIyMSwgCisgICAgNDQsIDIwLCAxLCAyMzMsIDE3NywgMjAsIDEsIDIzNCwgMTYyLCAyMCwgMSwgMjI4LCA2NCwgMjAsIDEsIDIyOCwgOTIsIDIwLCAKKyAgICAxLCAyMjgsIDI0MSwgMjAsIDEsIDIxMiwgMjE3LCAyMCwgMSwgMjIwLCAxNTAsIDIwLCAxLCAyMTIsIDE3OCwgMjAsIDEsIAorICAgIDE4NiwgMjAsIDEsIDIyOCwgMTIwLCAyMCwgMSwgMjM0LCAxNDgsIDIwLCAxLCAyMjYsIDI3LCAyMCwgMSwgMjI5LCA3LCAyMCwgCisgICAgMSwgMjI4LCAxMDEsIDIwLCAxLCAyMjUsIDMwLCAyMCwgMSwgMjEzLCAxODAsIDIwLCAxLCAyMjYsIDg2LCAyMCwgMSwgMjQ0LCAKKyAgICAxMTYsIDIwLCAxLCAyMjMsIDUxLCAyMCwgMSwgMjMyLCAxNTYsIDIwLCAxLCAyMzEsIDQyLCAyMCwgMSwgMjI5LCA2NCwgMjAsIAorICAgIDEsIDIyMywgMjA0LCAyMCwgMSwgMjI0LCA2MSwgMjAsIDEsIDIzNCwgMTcxLCAyMCwgMSwgMjI5LCA5MywgMjAsIDEsIDIyOSwgCisgICAgMTQxLCAyMCwgMSwgMjI5LCAxNTksIDIwLCAxLCAyMjAsIDE4NywgMjAsIDEsIDIyNSwgMzMsIDIwLCAxLCAyNDMsIDIwNSwgCisgICAgMjAsIDEsIDI0NCwgNiwgMjAsIDEsIDIxNCwgNDksIDIwLCAxLCAyMDUsIDIwLCAxLCAyMzMsIDEzLCAyMCwgMSwgMjI1LCAKKyAgICAyNDAsIDIwLCAxLCAyMzIsIDE3NCwgMjAsIDEsIDIzNCwgMzcsIDIwLCAxLCAyMzEsIDE3NywgMjAsIDEsIDIyMywgMjMzLCAKKyAgICAyMCwgMSwgMjMxLCAxMjIsIDIwLCAxLCAxODgsIDIwLCAxLCAyMTcsIDcxLCAyMCwgMSwgMjM0LCAxMDEsIDIwLCAxLCAyMzAsIAorICAgIDIzMSwgMjAsIDEsIDIzMSwgMTg1LCAyMCwgMSwgMjE3LCAxODMsIDIwLCAxLCAyMzQsIDQsIDIwLCAxLCAyMTcsIDIwMCwgCisgICAgMjAsIDEsIDIyOCwgOTMsIDIwLCAxLCAyMjIsIDE2NiwgMjAsIDEsIDI0NCwgMTYwLCAyMCwgMSwgMjM0LCA2LCAyMCwgMSwgCisgICAgMjM0LCAzMywgMjAsIDM3LCAxNTIsIDIzNCwgMTQsIDIwLCAzNywgMTUyLCAyMTYsIDc0LCAyMCwgMjI5LCAxMywgMjAsIAorICAgIDI0MywgMjAwLCAyMTksIDY5LCAyMCwgMjQ5LCAxNjQsIDIwLCAyNDksIDE1NywgMjAsIDIyMSwgNzAsIDIwLCAyMjQsIDE1OCwgCisgICAgNzcsIDU5LCAxLCAyNTAsIDMzLCAxNjAsIDIxMiwgMjQ1LCAyMjUsIDE5MywgNTksIDEsIDI1MCwgMzMsIDE2MCwgMjEzLCAKKyAgICA1OSwgMjI1LCAxOTMsIDU5LCAxLCAyNTAsIDMzLCAxNjAsIDIxMiwgMjQ1LCAyMjEsIDcsIDU5LCAxLCAyNTAsIDMzLCAxNjAsIAorICAgIDIxMywgNTksIDIyMSwgNywgNTksIDEsIDI1MCwgMzMsIDE2MCwgMjEyLCAyNDUsIDIyNCwgMTc1LCA1OSwgMSwgMjUwLCAzMywgCisgICAgMTYwLCAyMTMsIDU5LCAyMjQsIDE3NSwgNTksIDEsIDI1MCwgMzMsIDE2MCwgMjEyLCAyNDUsIDIyMywgNTEsIDU5LCAxLCAKKyAgICAyNTAsIDMzLCAxNjAsIDIxMywgNTksIDIyMywgNTEsIDU5LCAxLCAyNDQsIDI0NCwgMjQ2LCA3MiwgMTYwLCAxMzQsIDU5LCAKKyAgICAxLCAxMjQsIDI0NiwgNzIsIDE2MCwgMTM0LCA1OSwgMSwgMjMxLCAzOCwgMjQ2LCA3MiwgMTYwLCAxMzQsIDU5LCAxLCAxMTUsIAorICAgIDI0NiwgNzIsIDE2MCwgMTM0LCA1OSwgMSwgMjQ0LCAyNDMsIDI0NiwgNzIsIDE2MCwgMTM0LCA1OSwgMSwgMjQ0LCAyNDQsIAorICAgIDI0NiwgNzIsIDIzMywgNjMsIDE2MCwgMTM0LCA1OSwgMSwgMTI0LCAyNDYsIDcyLCAyMzMsIDYzLCAxNjAsIDEzNCwgNTksIAorICAgIDEsIDIzMSwgMzgsIDI0NiwgNzIsIDIzMywgNjMsIDE2MCwgMTM0LCA1OSwgMSwgMTE1LCAyNDYsIDcyLCAyMzMsIDYzLCAKKyAgICAxNjAsIDEzNCwgNTksIDEsIDI0NCwgMjQzLCAyNDYsIDcyLCAyMzMsIDYzLCAxNjAsIDEzNCwgNTksIDEsIDI0NCwgMjQ0LCAKKyAgICAyMzMsIDYzLCAxNjAsIDEzNCwgNTksIDEsIDEyNCwgMjMzLCA2MywgMTYwLCAxMzQsIDU5LCAxLCAyMzEsIDM4LCAyMzMsIAorICAgIDYzLCAxNjAsIDEzNCwgNTksIDEsIDExNSwgMjMzLCA2MywgMTYwLCAxMzQsIDU5LCAxLCAyNDQsIDI0MywgMjMzLCA2MywgCisgICAgMTYwLCAxMzQsIDU5LCAxLCA2MiwgNzEsIDEzNCwgNTksIDEsIDYyLCAyMjAsIDIzLCA1OSwgMSwgNjIsIDE5OSwgMTM0LCAKKyAgICA1OSwgMSwgMjMyLCAxNjMsIDQ2LCAyNDksIDEwMCwgMjU0LCAxOCwgNTksIDEsIDIyNCwgNDgsIDExNCwgNjgsIDU5LCAxLCAKKyAgICAyMjQsIDQ4LCAxMTksIDY4LCA1OSwgMSwgMjI0LCA0OCwgMjQ0LCAyNTQsIDc3LCA1OSwgMSwgMjI0LCA0OCwgMjM1LCAxOTEsIAorICAgIDI0NCwgMjU0LCA3NywgNTksIDEsIDExNSwgMjM1LCAxOTEsIDI0NCwgMjU0LCA3NywgNTksIDEsIDIxOSwgNTEsIDI0LCAKKyAgICAxMjQsIDIxNiwgMjQxLCA1OSwgMSwgMjE5LCA1MSwgMjQsIDExNSwgMjE2LCAyNDEsIDcsIDYsIDEsIDI0NSwgMTU2LCAyNTQsIAorICAgIDc4LCA3LCAzLCAxLCAyNDUsIDE1NiwgMjU0LCA3OCwgNywgNiwgMSwgMjQ1LCAxNTYsIDI1NCwgMTAzLCA3LCAzLCAxLCAKKyAgICAyNDUsIDE1NiwgMjU0LCAxMDMsIDcsIDYsIDEsIDI0MSwgMTkxLCA3LCAzLCAxLCAyNDEsIDE5MSwgNywgNiwgMSwgMjE2LCAKKyAgICA2LCA3LCAzLCAxLCAyMTYsIDYsIDcsIDYsIDEsIDIxNiwgMTg3LCA3LCAzLCAxLCAyMTYsIDE4NywgNywgNiwgMSwgMjQ5LCAKKyAgICA1MSwgNywgMywgMSwgMjQ5LCA1MSwgNywgNiwgMSwgMjQ5LCA1MiwgMiwgMjQ5LCAxNTcsIDcsIDMsIDEsIDI0OSwgNTIsIDIsIAorICAgIDI0OSwgMTU3LCA3LCAxLCAzLCA2LCAyNDQsIDIzMCwgNywgMSwgMywgNiwgMTk3LCA3LCA2LCAxLCAyNTQsIDIzMiwgNywgMywgCisgICAgMSwgMjU0LCAyMzIsIDcsIDYsIDEsIDI1MywgMjQwLCA3LCAzLCAxLCAyNTMsIDI0MCwgNywgNiwgMSwgMjUzLCAxMDgsIDcsIAorICAgIDMsIDEsIDI1MywgMTA4LCA3LCA2LCAxLCAyNTMsIDkyLCA3LCAzLCAxLCAyNTMsIDkyLCA3LCA2LCAxLCAyNTMsIDkzLCAyLCAKKyAgICAxOTksIDEzNCwgNywgMywgMSwgMjUzLCA5MywgMiwgMTk5LCAxMzQsIDcsIDYsIDEsIDI1MywgODMsIDcsIDMsIDEsIDI1MywgCisgICAgODMsIDcsIDYsIDEsIDIyMywgMjAyLCAyNTAsIDI1MywgMiwgMjQ3LCA3NCwgNywgMywgMSwgMjIzLCAyMDIsIDI1MCwgMjUzLCAKKyAgICAyLCAyNDcsIDc0LCA3LCA2LCAxLCAyMzUsIDI4LCAyLCA5MCwgNywgMywgMSwgMjM1LCAyOCwgMiwgOTAsIDcsIDYsIDEsIAorICAgIDIzNSwgMjgsIDIsIDI0NywgMjA3LCA5MCwgNywgMywgMSwgMjM1LCAyOCwgMiwgMjQ3LCAyMDcsIDkwLCA3LCA2LCAxLCAKKyAgICAyMzUsIDI4LCAyLCAyMTksIDQ1LCAyNCwgMjQ3LCAyMDcsIDkwLCA3LCAzLCAxLCAyMzUsIDI4LCAyLCAyMTksIDQ1LCAyNCwgCisgICAgMjQ3LCAyMDcsIDkwLCA3LCA2LCAxLCAyNTEsIDYzLCAxNTAsIDcsIDMsIDEsIDI1MSwgNjMsIDE1MCwgNywgNiwgMSwgMjMzLCAKKyAgICAxNzEsIDIsIDEyNCwgOTAsIDcsIDMsIDEsIDIzMywgMTcxLCAyLCAxMjQsIDkwLCA3LCA2LCAxLCAxNTcsIDIsIDE4NCwgCisgICAgMjE5LCA0NSwgMjI2LCAyNDQsIDcsIDMsIDEsIDE1NywgMiwgMTg0LCAyMTksIDQ1LCAyMjYsIDI0NCwgNywgNiwgMSwgMTU3LCAKKyAgICAyLCAyMzIsIDE3NywgNywgMywgMSwgMTU3LCAyLCAyMzIsIDE3NywgNywgNiwgMSwgMjI3LCA0OSwgNywgMywgMSwgMjI3LCAKKyAgICA0OSwgNywgNiwgMSwgMjI2LCAyMzAsIDIsIDIxOSwgNDUsIDIxNywgOTMsIDI0NywgMjQ2LCA3LCAzLCAxLCAyMjYsIDIzMCwgCisgICAgMiwgMjE5LCA0NSwgMjE3LCA5MywgMjQ3LCAyNDYsIDcsIDYsIDEsIDIyNiwgMjMwLCAyLCAyNDQsIDIyLCA3LCAzLCAxLCAKKyAgICAyMjYsIDIzMCwgMiwgMjQ0LCAyMiwgNywgNiwgMSwgMjI2LCAyMzAsIDIsIDIxOSwgMTYxLCAyMTgsIDI3LCA3LCAzLCAxLCAKKyAgICAyMjYsIDIzMCwgMiwgMjE5LCAxNjEsIDIxOCwgMjcsIDcsIDYsIDEsIDIyNCwgMjQxLCAyLCAyMTksIDQ1LCAyMTcsIDkzLCAKKyAgICAyNDcsIDI0NiwgNywgMywgMSwgMjI0LCAyNDEsIDIsIDIxOSwgNDUsIDIxNywgOTMsIDI0NywgMjQ2LCA3LCA2LCAxLCAyMjQsIAorICAgIDI0MSwgMiwgMjQ3LCAyMDcsIDkwLCA3LCAzLCAxLCAyMjQsIDI0MSwgMiwgMjQ3LCAyMDcsIDkwLCA3LCA2LCAxLCAyMjQsIAorICAgIDExMywgMjIzLCA4OCwgNywgMywgMSwgMjI0LCAxMTMsIDIyMywgODgsIDcsIDYsIDEsIDIyMywgNDEsIDIyMywgODgsIDcsIAorICAgIDMsIDEsIDIyMywgNDEsIDIyMywgODgsIDcsIDYsIDEsIDIxNSwgODAsIDIsIDI0NywgMjA3LCA5MCwgNywgMywgMSwgMjE1LCAKKyAgICA4MCwgMiwgMjQ3LCAyMDcsIDkwLCA3LCA2LCAxLCAyMTQsIDkwLCA3LCAzLCAxLCAyMTQsIDkwLCA3LCA2LCAxLCAyMTQsIAorICAgIDEyNiwgMjEyLCAxNTIsIDcsIDMsIDEsIDIxNCwgMTI2LCAyMTIsIDE1MiwgNywgNiwgMSwgMjE3LCAxMDUsIDIsIDkwLCA3LCAKKyAgICAzLCAxLCAyMTcsIDEwNSwgMiwgOTAsIDcsIDYsIDEsIDIxNywgMTA1LCAyLCAyMTksIDQ1LCAyMTcsIDkzLCAyNDcsIDI0NiwgCisgICAgNywgMywgMSwgMjE3LCAxMDUsIDIsIDIxOSwgNDUsIDIxNywgOTMsIDI0NywgMjQ2LCA3LCA2LCAxLCAyMTQsIDIyMiwgNywgCisgICAgMywgMSwgMjE0LCAyMjIsIDcsIDYsIDEsIDI0NSwgMzAsIDcsIDMsIDEsIDI0NSwgMzAsIDcsIDYsIDEsIDIzNSwgMTY5LCA3LCAKKyAgICAzLCAxLCAyMzUsIDE2OSwgNywgNiwgMSwgMjQ5LCAxNDYsIDcsIDMsIDEsIDI0OSwgMTQ2LCA1OSwgMSwgMjE1LCAxMDQsIDcsIAorICAgIDMsIDEsIDI0NiwgMjQsIDcsIDMsIDEsIDIzMiwgMTQyLCA3LCAzLCAxLCAyMzAsIDE1MCwgNywgMywgMSwgMjI4LCA1NywgNywgCisgICAgMywgMSwgMjIzLCA0MCwgNywgMSwgMywgNiwgMjIzLCA0MCwgNywgMywgMSwgMjE2LCA3MiwgNywgMywgMSwgMjE1LCAxNjcsIAorICAgIDcsIDYsIDEsIDIzNSwgMjEwLCAyNDksIDMsIDcsIDMsIDEsIDIzNSwgMjEwLCAyNDksIDMsIDcsIDYsIDEsIDIzNSwgMjEwLCAKKyAgICAyNDQsIDIzMCwgNywgMywgMSwgMjM1LCAyMTAsIDI0NCwgMjMwLCA3LCA2LCAxLCAyMzUsIDIxMCwgMjQzLCAxNzcsIDcsIDYsIAorICAgIDEsIDIxNiwgNTgsIDIzNSwgMjEwLCAyNDMsIDE3NywgNywgMywgMSwgMjE2LCA1OCwgMjM1LCAyMTAsIDI0MywgMTc3LCA3LCAKKyAgICA2LCAxLCAyMTYsIDU4LCAxNTAsIDcsIDMsIDEsIDIxNiwgNTgsIDE1MCwgNywgNiwgMSwgMjM1LCAyMTAsIDE0OSwgNywgMywgCisgICAgMSwgMjM1LCAyMTAsIDE0OSwgNywgNiwgMSwgMjM1LCAyMTAsIDE5NywgNywgMywgMSwgMjM1LCAyMTAsIDE5NywgNywgNiwgCisgICAgMSwgMjM1LCAyMTAsIDIxOCwgOTksIDcsIDMsIDEsIDIzNSwgMjEwLCAyMTgsIDk5LCA1OSwgMSwgMTE1LCAyNDksIDIyNCwgCisgICAgMjU0LCAxNzQsIDU5LCAxLCAyNDksIDE2NCwgNTksIDEsIDIyMCwgMTc1LCAyNDUsIDYxLCA1MiwgNywgNiwgMSwgMjIyLCAKKyAgICAxNzAsIDcsIDMsIDEsIDIyMiwgMTcwLCA3LCA2LCAxLCAyMTYsIDU4LCAyNDIsIDQxLCA3LCAzLCAxLCAyMzMsIDE3MSwgMiwgCisgICAgMjIzLCAyMDcsIDI0MSwgMzgsIDI0LCAyNTEsIDIxOCwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjQ3LCAyNDYsIDcsIDMsIDEsIAorICAgIDIzMCwgOTgsIDIsIDI0NywgMjQ2LCA3LCA2LCAxLCAyNDMsIDE3OCwgMiwgMjI3LCAxMTIsIDkwLCA3LCAzLCAxLCAyNDMsIAorICAgIDE3OCwgMiwgMjI3LCAxMTIsIDkwLCA3LCA2LCAxLCAyMzUsIDI4LCAyLCAyMjcsIDExMiwgOTAsIDcsIDMsIDEsIDIzNSwgCisgICAgMjgsIDIsIDIyNywgMTEyLCA5MCwgNywgNiwgMSwgMjMwLCA5OCwgMiwgMjI3LCAxMTIsIDkwLCA3LCAzLCAxLCAyMzAsIDk4LCAKKyAgICAyLCAyMjcsIDExMiwgOTAsIDcsIDYsIDEsIDIyNCwgMTEzLCAyLCAyMjcsIDExMiwgOTAsIDcsIDMsIDEsIDIyNCwgMTEzLCAKKyAgICAyLCAyMjcsIDExMiwgOTAsIDcsIDYsIDEsIDIyMywgNCwgMiwgMjI3LCAxMTIsIDkwLCA3LCAzLCAxLCAyMjMsIDQsIDIsIAorICAgIDIyNywgMTEyLCA5MCwgNywgMSwgMywgNiwgMjE2LCA1OCwgMTgzLCA3LCAyNDUsIDY2LCAxLCAyMjMsIDIwMiwgMjQ0LCAKKyAgICAyMzAsIDcsIDI0NSwgNjYsIDEsIDIyMywgMjAyLCAyMjYsIDIyOSwgNywgMjQ1LCA2NiwgMSwgMjM1LCAxOTEsIDE4MywgNywgCisgICAgMjQ1LCA2NiwgMSwgMjQwLCAxNDYsIDIzMiwgMTgyLCA3LCAyNDUsIDY2LCAxLCAyNTMsIDE5MywgMTgzLCAyMTgsIDE3NSwgCisgICAgMjMwLCAzMiwgMSwgNjEsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCA3MiwgMjE4LCAxNzUsIDIzMCwgMzIsIDUsIDI0NiwgMywgCisgICAgMjE4LCAxNzUsIDIzMCwgMzIsIDEsIDY5LCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgNzQsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAKKyAgICA3NSwgMjE4LCAxNzUsIDIzMCwgMzIsIDUsIDI0MSwgMjM2LCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjM0LCAzNywgMjE4LCAKKyAgICAxNzUsIDIzMCwgMzIsIDEsIDIzNCwgMTEzLCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjQyLCAxNTAsIDIxOCwgMTc1LCAyMzAsIAorICAgIDMyLCAxLCAyNDIsIDIwMCwgMjE4LCAxNzUsIDIzMCwgMzIsIDUsIDI1MywgMjQyLCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgCisgICAgMjQ5LCAxNzUsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyNTAsIDIzLCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjM1LCA3MSwgCisgICAgMjE4LCAxNzUsIDIzMCwgMzIsIDEsIDIzNSwgMTExLCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjE2LCA5NSwgMjE4LCAxNzUsIAorICAgIDIzMCwgMzIsIDEsIDIxNiwgMTAwLCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjQ4LCA1NiwgMjE4LCAxNzUsIDIzMCwgMzIsIAorICAgIDEsIDI0OCwgNjUsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAxMDgsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyMTcsIDEwOSwgCisgICAgMjE4LCAxNzUsIDIzMCwgMzIsIDEsIDI0NywgOTksIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyNDcsIDIxNSwgMjE4LCAxNzUsIAorICAgIDIzMCwgMzIsIDEsIDIyOCwgMTg1LCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjI1LCAxNTAsIDIxOCwgMTc1LCAyMzAsIDMyLCAKKyAgICAxLCAyMjUsIDI1MywgMjE4LCAxNzUsIDIzMCwgMzIsIDEsIDI1MSwgMTI4LCAyMTgsIDE3NSwgMjMwLCAzMiwgMSwgMjUxLCAKKyAgICAxODgsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyMzAsIDIzMSwgMjE4LCAxNzUsIDIzMCwgMzIsIDEsIDIyMywgMTEyLCAyMTgsIAorICAgIDE3NSwgMjMwLCAzMiwgMSwgMjMyLCAyMDgsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyMjMsIDczLCAyMTgsIDE3NSwgMjMwLCAKKyAgICAzMiwgMSwgMjE5LCAyNDIsIDIxOCwgMTc1LCAyMzAsIDMyLCAxLCAyNDEsIDU0LCAyMTgsIDE3NSwgMjMwLCAzMiwgMzAsIDUsIAorICAgIDYxLCAyMTgsIDE3NSwgMjMwLCAzMiwgMzAsIDUsIDcyLCAyMTgsIDE3NSwgMjMwLCAzMiwgMzAsIDUsIDY5LCAyMTgsIDE3NSwgCisgICAgMjMwLCAzMiwgMzAsIDUsIDc0LCAyMTgsIDE3NSwgMjMwLCAzMiwgMzAsIDUsIDIyNywgNDksIDIxOCwgMTc1LCAyMzAsIDMyLCAKKyAgICAyMjUsIDE0NiwgMjMxLCAyMjEsIDIxOCwgMTc1LCAyMzAsIDMyLCAyMjUsIDE0NiwgMjMxLCAyMjAsIDIxOCwgMTc1LCAyMzAsIAorICAgIDMyLCAyMjUsIDE0NiwgMjMxLCAyMTksIDIxOCwgMTc1LCAyMzAsIDMyLCAyMjUsIDE0NiwgMjMxLCAyMTgsIDIyOCwgMTY3LCAKKyAgICAyMzUsIDIzNywgMjQzLCAyMjgsIDEyMiwgMjI0LCAxNjYsIDIyOCwgMTY3LCAyMzUsIDIzNywgMjQzLCAyMjgsIDEyMiwgCisgICAgMjQyLCA5LCAyMjgsIDE2NywgMjM1LCAyMzcsIDI0MywgMjI4LCAxMzMsIDIyNCwgMTY0LCAyMjgsIDE2NywgMjM1LCAyMzcsIAorICAgIDI0MywgMjI4LCAxMjIsIDIyMCwgNDUsIDIyOCwgMTY3LCAyMzUsIDIzNywgMjQzLCAyMjgsIDEyMiwgMjQ1LCAxNDUsIDIyOCwgCisgICAgMTY3LCAyMzUsIDIzNywgMjQzLCAyMjgsIDEzMywgMjIwLCA0NCwgMjI4LCAxNjcsIDIzNSwgMjM3LCAyMjQsIDE2NywgNzcsIAorICAgIDIyOCwgMTY3LCAyMzUsIDIzNywgMjI1LCAxNzIsIDc3LCAyMjgsIDE2NywgMjM1LCAyMzcsIDIyMywgMjksIDc3LCAyMjgsIAorICAgIDE2NywgMjM1LCAyMzcsIDIyNCwgMTY4LCA3NywgMjI2LCAyMCwgMSwgMTgxLCAyMjYsIDIwLCAxLCAyMzQsIDEzOCwgMjI2LCAKKyAgICAyMCwgMSwgMjQzLCAxMTAsIDIyNiwgMjAsIDEsIDIyOSwgMTU5LCAyMjYsIDIwLCAxLCAyNTAsIDIxOSwgMjI2LCAyMCwgMSwgCisgICAgMjUwLCA5MiwgMjI2LCAyMCwgMSwgMjM1LCAxMzksIDIyNiwgMjAsIDEsIDIyOCwgMjMsIDIyNiwgMjAsIDEsIDIxOCwgNTIsIAorICAgIDIyNiwgMjAsIDEsIDIxNywgMTYxLCAyMjYsIDIwLCAxLCAyNDgsIDE2NCwgMjI2LCAyMCwgMSwgMjA1LCAyMjYsIDIwLCAxLCAKKyAgICAxOTMsIDIyNiwgMjAsIDEsIDIyNiwgMjMsIDIyNiwgMjAsIDEsIDI1MiwgMTA3LCAyMjYsIDIwLCAxLCAxODgsIDIyNiwgMjAsIAorICAgIDEsIDIxNiwgMTQxLCAyMjYsIDIwLCAxLCAyMTYsIDEzMywgMjI2LCAyMCwgMSwgMjQ1LCAyNDksIDIyNiwgMjAsIDEsIDIxNCwgCisgICAgNDksIDIyNiwgMjAsIDEsIDIxMiwgNzUsIDIyNiwgMjAsIDEsIDIxMiwgMTA5LCAyMjYsIDIwLCAxLCAzLCA2MSwgMjI2LCAKKyAgICAyMCwgMSwgMTg2LCAyMjYsIDIwLCAxLCAyMDMsIDIyNiwgMjAsIDEsIDIzMywgMTU3LCAyMjYsIDIwLCAxLCAyMjEsIDI0LCAKKyAgICAyMjYsIDIwLCAxLCAyMjIsIDIwMiwgMjI2LCAyMCwgMSwgMTU5LCAyMjYsIDIwLCAxLCA2MSwgMjI2LCAyMCwgMSwgNzIsIAorICAgIDIyNiwgMjAsIDEsIDY5LCAyMjYsIDIwLCAxLCA3NCwgMjI2LCAyMCwgMSwgNzUsIDIyNiwgMjAsIDEsIDIyNCwgMjMyLCAKKyAgICAyMjYsIDIwLCAxLCAyMTMsIDE1MywgMjI2LCAyMCwgMSwgMjQ0LCAxNjQsIDIyNiwgMjAsIDEsIDI0MywgNSwgMjI2LCAyMCwgCisgICAgMSwgMjQ1LCAxNjUsIDIyNiwgMjAsIDIxOSwgMTgsIDEsIDIxNCwgNDksIDIyNiwgMjAsIDIxOSwgMTgsIDEsIDE4NiwgMjI2LCAKKyAgICAyMCwgMSwgMjE2LCAxMTUsIDIyNiwgMjAsIDEsIDIxNiwgMTA1LCAyMjYsIDIwLCAxLCAyNDgsIDg2LCAyMjYsIDIwLCAxLCAKKyAgICAyMjgsIDE5OCwgMjI2LCAyMCwgMSwgMjU0LCA1MCwgMTg2LCAyMjYsIDIwLCAxLCAyMTQsIDExNSwgMjIxLCAyNCwgMjI2LCAKKyAgICAyMCwgMSwgMjE0LCAxMTYsIDE1OSwgMjI2LCAyMCwgMSwgMjUzLCAxMzgsIDI0NCwgMTY0LCAyMjYsIDIwLCAyMTksIDE4LCAKKyAgICAxLCAyMDMsIDIyNiwgMjAsIDIxOCwgMjI1LCAxLCAyMDMsIDIyNiwgMjAsIDEsIDI1MCwgMTg3LCAyMjYsIDIwLCAyMjAsIAorICAgIDgxLCAyNDEsIDIyMCwgNzcsIDIyNiwgMjAsIDUxLCAyNDEsIDIyMCwgNzcsIDIyNiwgMjAsIDE1MiwgMjIxLCAxNywgMjI2LCAKKyAgICAyMCwgMTUyLCA1MSwgMjIxLCAxNywgMTY5LCA1LCAyNTMsIDI0MiwgMTY5LCA1LCAyMTQsIDEyOCwgMTY5LCAxLCA2MSwgCisgICAgMTY5LCAxLCAyNTQsIDIzMiwgMTY5LCAxLCA3MiwgMTY5LCAxLCAyMzYsIDI4LCAxNjksIDEsIDY5LCAxNjksIDEsIDIxNSwgCisgICAgOTIsIDE2OSwgMSwgMTYxLCAxNDksIDE2OSwgMSwgMTYxLCAyMjMsIDgyLCAxNjksIDEsIDE2MSwgMTUwLCAxNjksIDEsIAorICAgIDE2MSwgMjMyLCAyMTQsIDE2OSwgMSwgNzQsIDE2OSwgMSwgMjQ1LCAxNjUsIDE2OSwgMSwgMjU0LCAxMDgsIDE2OSwgMSwgCisgICAgNzUsIDE2OSwgMSwgMjI3LCA0OSwgMTY5LCAxLCAyNTMsIDEwOCwgMTY5LCAxLCAxODEsIDE2OSwgMSwgMjM0LCAxMzgsIAorICAgIDE2OSwgMSwgMjQzLCAxMTAsIDE2OSwgMSwgMjQyLCAyMjUsIDE2OSwgMSwgMjI5LCAxNTksIDE2OSwgMSwgMjUwLCAyMTksIAorICAgIDE2OSwgMSwgMjUwLCA5MiwgMTY5LCAxLCAyMzUsIDEzOSwgMTY5LCAxLCAyMzUsIDExNSwgMTY5LCAxLCAyMjgsIDIzLCAKKyAgICAxNjksIDEsIDIxNiwgMTE1LCAxNjksIDEsIDIxNiwgMTA1LCAxNjksIDEsIDI0OCwgODYsIDE2OSwgMSwgMjQ4LCA3MCwgCisgICAgMTY5LCAxLCAyMjgsIDE5OCwgMTY5LCAxLCAyMTgsIDUyLCAxNjksIDEsIDIxNywgMTYxLCAxNjksIDEsIDI0OCwgMTY0LCAKKyAgICAxNjksIDEsIDI0NywgMjMyLCAxNjksIDEsIDIwNSwgMTY5LCAxLCAxOTMsIDE2OSwgMSwgMjI2LCAyMywgMTY5LCAxLCAyNTIsIAorICAgIDEwNywgMTY5LCAxLCAyNTEsIDE5NSwgMTY5LCAxLCAxODgsIDE2OSwgMSwgMTg2LCAxNjksIDEsIDIwMywgMTY5LCAxLCAKKyAgICAyMzMsIDE1NywgMTY5LCAxLCAyMTUsIDEsIDE2OSwgMSwgMjIxLCAyNCwgMTY5LCAxLCAyMTksIDE1NywgMTY5LCAxLCAyMjIsIAorICAgIDIwMiwgMTY5LCAxLCAxNTksIDE2OSwgMSwgMjMyLCAyMTMsIDE2OSwgMjQ5LCAxMzMsIDUsIDI0MiwgMjUsIDE2OSwgMzAsIAorICAgIDUsIDI1NCwgMjMyLCAxNjksIDMwLCA1LCA3MiwgMTY5LCAzMCwgNSwgMjM2LCAyOCwgMTY5LCAzMCwgNSwgNjksIDE2OSwgCisgICAgMzAsIDUsIDIxNSwgOTIsIDE2OSwgMzAsIDUsIDE2MSwgMTQ5LCAxNjksIDMwLCA1LCAxNjEsIDIyMywgODIsIDE2OSwgMzAsIAorICAgIDUsIDE2MSwgMTUwLCAxNjksIDMwLCA1LCAxNjEsIDIzMiwgMjE0LCAxNjksIDMwLCA1LCA3NCwgMTY5LCAzMCwgNSwgMjQ1LCAKKyAgICAxNjUsIDE2OSwgMzAsIDUsIDI1NCwgMTA4LCAxNjksIDMwLCA1LCA3NSwgMTY5LCAzMCwgNSwgMjI3LCA0OSwgMTY5LCAzMCwgCisgICAgNSwgMjUzLCAxMDgsIDE2OSwgNSwgMjE0LCAxMzMsIDE2OSwgMjQ4LCAxMjMsIDE2OSwgNTEsIDI0OCwgMTIzLCAxNjksIDIxLCAKKyAgICAyMTIsIDc5LCAxNjksIDIxLCAxMTYsIDE2OSwgMjEsIDEwOSwgMTY5LCAyMSwgMTY2LCAxNjksIDIxLCAxNjMsIDE2OSwgMjEsIAorICAgIDE4MCwgMTY5LCAyMSwgMTg5LCAxNjksIDIxLCAxOTgsIDE2OSwgMjEsIDE5NSwgMTY5LCAyMSwgMjAwLCAzNywgODIsIDIxLCAKKyAgICAyMTIsIDc5LCAzNywgODIsIDIxLCAxMTYsIDM3LCA4MiwgMjEsIDEwOSwgMzcsIDgyLCAyMSwgMTY2LCAzNywgODIsIDIxLCAKKyAgICAxNjMsIDM3LCA4MiwgMjEsIDE4MCwgMzcsIDgyLCAyMSwgMTg5LCAzNywgODIsIDIxLCAxOTgsIDM3LCA4MiwgMjEsIDE5NSwgCisgICAgMzcsIDgyLCAyMSwgMjAwLCAzNywgODIsIDEsIDYxLCAzNywgODIsIDEsIDY5LCAzNywgODIsIDEsIDE4MSwgMzcsIDgyLCAxLCAKKyAgICAyMDUsIDM3LCA4MiwgMSwgMTkzLCAzNywgODIsIDEsIDIwMywgMzcsIDgyLCAxLCAyMTQsIDE1NCwgMzcsIDgyLCA1LCAyNTMsIAorICAgIDkxLCA4MiwgNSwgMjE5LCAyMDUsIDI1MCwgMTg3LCA4MiwgNSwgMjUwLCAxODgsIDIxNCwgMTMzLCA4MiwgNSwgNTEsIDI1MCwgCisgICAgMTg4LCAyMTQsIDEzMywgODIsIDUsIDI1MCwgMTg4LCAxMDksIDgyLCA1LCAyNTAsIDE4OCwgMTY2LCA4MiwgNSwgMjUwLCAKKyAgICAxODgsIDI1MywgOTEsIDgyLCA1LCAyMjUsIDExLCA4MiwgMjQzLCA3NiwgMjQ0LCA3MiwgODIsIDI1MCwgMTcwLCA4MiwgCisgICAgMjQxLCAyMTQsIDIzNCwgMTk0LCAyMzMsIDE0LCAyMSwgMjEyLCA3OSwgMjM0LCAxOTQsIDIzMywgMTQsIDIxLCAxMTYsIAorICAgIDIzNCwgMTk0LCAyMzMsIDE0LCAyMSwgMTA5LCAyMzQsIDE5NCwgMjMzLCAxNCwgMjEsIDE2NiwgMjM0LCAxOTQsIDIzMywgCisgICAgMTQsIDIxLCAxNjMsIDIzNCwgMTk0LCAyMzMsIDE0LCAyMSwgMTgwLCAyMzQsIDE5NCwgMjMzLCAxNCwgMjEsIDE4OSwgMjM0LCAKKyAgICAxOTQsIDIzMywgMTQsIDIxLCAxOTgsIDIzNCwgMTk0LCAyMzMsIDE0LCAyMSwgMTk1LCAyMzQsIDE5NCwgMjMzLCAxNCwgMjEsIAorICAgIDIwMCwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDE4MSwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDIzNCwgMTM4LCAyMzQsIDE5NCwgCisgICAgMjMzLCAxNCwgMSwgMjQzLCAxMTAsIDIzNCwgMTk0LCAyMzMsIDE0LCAxLCAyMjksIDE1OSwgMjM0LCAxOTQsIDIzMywgMTQsIAorICAgIDEsIDIyMiwgMjAyLCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjIxLCAyNCwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDIxMiwgCisgICAgMTA5LCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjI4LCAyMywgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDIxOCwgNTIsIDIzNCwgCisgICAgMTk0LCAyMzMsIDE0LCAxLCAyNDAsIDIxNCwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDIwNSwgMjM0LCAxOTQsIDIzMywgMTQsIAorICAgIDEsIDE5MywgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDIyNiwgMjMsIDIzNCwgMTk0LCAyMzMsIDE0LCAxLCAxODgsIDIzNCwgCisgICAgMTk0LCAyMzMsIDE0LCAxLCAyNDgsIDE2NCwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDI1MiwgMTA3LCAyMzQsIDE5NCwgMjMzLCAKKyAgICAxNCwgMSwgMjAzLCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMTg2LCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjMzLCAxNTcsIAorICAgIDIzNCwgMTk0LCAyMzMsIDE0LCAxLCAyMTQsIDQ5LCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjE3LCAxNjEsIDIzNCwgMTk0LCAKKyAgICAyMzMsIDE0LCAxLCAxNTksIDIzNCwgMTk0LCAyMzMsIDE0LCAxLCAyMTUsIDEsIDIzNCwgMTk0LCAyMzMsIDE0LCAxLCAyNTAsIAorICAgIDIxOSwgMjM0LCAxOTQsIDIzMywgMTQsIDEsIDYxLCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjI3LCA5OSwgMjM0LCAxOTQsIAorICAgIDIzMywgMTQsIDEsIDcyLCAyMzQsIDE5NCwgMjMzLCAxNCwgMSwgMjI3LCA0OSwgMjM0LCAxOTQsIDIzMywgMTQsIDMwLCAKKyAgICAyMTUsIDE4MywgMjM0LCAxOTQsIDIzMywgMTQsIDMwLCA3NCwgMjM0LCAxOTQsIDIzMywgMTQsIDMwLCA2OSwgMjM0LCAxOTQsIAorICAgIDIzMywgMTQsIDMwLCAyNDUsIDE2NSwgMjM0LCAxOTQsIDIzMywgMTQsIDMwLCA3NSwgMjM0LCAxOTQsIDIzMywgMTQsIDE2MCwgCisgICAgMjI1LCAxNjMsIDIzNCwgMTk0LCAyMzMsIDE0LCAxNjAsIDI1MCwgMjAwLCAyMzQsIDE5NCwgMjMzLCAxNCwgMTYwLCAyNTAsIAorICAgIDIwMSwgMjI1LCAxNjMsIDIzNCwgMTk0LCAyMzMsIDE0LCA1LCAyNDksIDIwLCAyMzQsIDE5NCwgMjMzLCAxNCwgNSwgMjIwLCAKKyAgICAxMjUsIDIyMywgMjQzLCAxLCAxODEsIDIyMywgMjQzLCAxLCAyNDMsIDExMCwgMjIzLCAyNDMsIDEsIDIyOSwgMTU5LCAyMjMsIAorICAgIDI0MywgMSwgMjE4LCA1MiwgMjIzLCAyNDMsIDEsIDI0OCwgMTY0LCAyMjMsIDI0MywgMSwgMjA1LCAyMjMsIDI0MywgMSwgCisgICAgMTkzLCAyMjMsIDI0MywgMSwgMjUyLCAxMDcsIDIyMywgMjQzLCAxLCAxODgsIDIyMywgMjQzLCAxLCAyNTAsIDIxOSwgMjIzLCAKKyAgICAyNDMsIDEsIDIzNSwgMTM5LCAyMjMsIDI0MywgMSwgMjI4LCAyMywgMjIzLCAyNDMsIDEsIDIyMiwgMjAyLCAyMjMsIDI0MywgCisgICAgMSwgMjAzLCAyMjMsIDI0MywgMSwgMjMzLCAxNTcsIDIyMywgMjQzLCAxLCAxODYsIDIyMywgMjQzLCAxLCAyMTQsIDQ5LCAKKyAgICAyMjMsIDI0MywgMSwgMTU5LCAyMjMsIDI0MywgMSwgMjMxLCAxODcsIDIyMywgMjQzLCAxLCAyMjksIDE0MSwgMjIzLCAyNDMsIAorICAgIDEsIDIyOSwgMjI4LCAyMjMsIDI0MywgMSwgMjI3LCAyNTQsIDIyMywgMjQzLCAxLCA2MSwgMjIzLCAyNDMsIDMwLCA1LCA3MiwgCisgICAgMjIzLCAyNDMsIDMwLCA1LCA2OSwgMjIzLCAyNDMsIDMwLCA1LCA3NCwgMjIzLCAyNDMsIDMwLCA1LCAyNTQsIDEwOCwgMjIzLCAKKyAgICAyNDMsIDMwLCA1LCA3NSwgMjIzLCAyNDMsIDMwLCA1LCAyNTMsIDEwOCwgMjIzLCAyNDMsIDMwLCA1LCAyNDUsIDIyLCAyMjMsIAorICAgIDI0MywgMzAsIDUsIDI0NSwgMTg5LCAyMjMsIDI0MywgMjQ5LCAxMzMsIDUsIDIyOSwgMTYxLCAyMjMsIDI0MywgMjQ5LCAKKyAgICAxMzMsIDUsIDIwNCwgMjIzLCAyNDMsIDI0OSwgMTMzLCA1LCAxNDksIDIyMywgMjQzLCAyNDksIDEzMywgNSwgMjQyLCA0MSwgCisgICAgMjIzLCAyNDMsIDIxNCwgMTMzLCAyMjMsIDI0MywgMjIyLCA5MiwgNzcsIDIzLCA5NywgMjE3LCA1MSwgMjMsIDk3LCAyMTcsIAorICAgIDUwLCAyMywgOTcsIDIxNywgNDgsIDIzLCA5NywgMjE3LCA1MywgMjMsIDk3LCAyMjMsIDE3NCwgMjMsIDk3LCAyMjMsIDE1OCwgCisgICAgMjMsIDk3LCAyMjMsIDE1MywgMjMsIDk3LCAyMjMsIDE1NSwgMjMsIDk3LCAyMjMsIDE3MSwgMjMsIDk3LCAyMjMsIDE2NCwgCisgICAgMjMsIDk3LCAyMjMsIDE1NywgMjMsIDk3LCAyMjMsIDE3NiwgMjMsIDk3LCAyMjMsIDE1OSwgMjMsIDk3LCAyMjMsIDE3OCwgCisgICAgMjMsIDk3LCAyMjMsIDE3NSwgMjMsIDk3LCAyMzEsIDI2LCAyMywgOTcsIDIzMSwgMTcsIDIzLCA5NywgMjMxLCAyMCwgMjMsIAorICAgIDk3LCAyMjUsIDIxMiwgMjMsIDk3LCAyMjUsIDIyMywgMjMsIDk3LCAyMjUsIDIyNCwgMjMsIDk3LCAyMTksIDE0MiwgMjMsIAorICAgIDk3LCAyMzYsIDQxLCAyMywgOTcsIDIzNiwgNDgsIDIzLCA5NywgMjE5LCAxNTMsIDIzLCA5NywgMjE5LCAxNDAsIDIzLCA5NywgCisgICAgMjI2LCA2LCAyMywgOTcsIDI0MSwgMTUzLCAyMywgOTcsIDIxOSwgMTM3LCAxNDQsIDUsIDIyNiwgMTU1LCAxNDQsIDUsIAorICAgIDI1MCwgMTIxLCAxNDQsIDUsIDIzMywgOTAsIDE0NCwgNSwgMjEzLCAyMjgsIDE0NCwgMSwgNjEsIDE0NCwgMSwgMjQwLCAKKyAgICAxNDYsIDIzNCwgMTk3LCAxNDQsIDEsIDcyLCAxNDQsIDEsIDIzNiwgMjgsIDE0NCwgMSwgNjksIDE0NCwgMSwgMjI2LCAyMTQsIAorICAgIDI1MCwgOTcsIDE0NCwgMSwgMjI5LCAxNjAsIDIzMywgNTIsIDE0NCwgMSwgMjI5LCAxNjAsIDIzMywgNTMsIDIyNCwgMzQsIAorICAgIDE0NCwgMSwgNzQsIDE0NCwgMSwgMjU0LCAxMDgsIDE0NCwgMSwgNzUsIDE0NCwgMSwgMTgxLCAxNDQsIDEsIDIzNSwgMTcsIAorICAgIDIyMiwgMTQ0LCAxNDQsIDEsIDIzNSwgMTcsIDIzMCwgMTM2LCAxNDQsIDEsIDI0MywgMTEwLCAxNDQsIDEsIDI0MywgMTExLCAKKyAgICAyMzAsIDEzNiwgMTQ0LCAxLCAyMjksIDE1OSwgMTQ0LCAxLCAyNTAsIDIxOSwgMTQ0LCAxLCAyNTAsIDIyMCwgMjMwLCAxMzYsIAorICAgIDE0NCwgMSwgMjM1LCAxMzksIDE0NCwgMSwgMjI4LCAyNCwgMjMwLCAxMzYsIDE0NCwgMSwgMjM1LCAxNDAsIDIzMiwgMTIsIAorICAgIDE0NCwgMSwgMjI4LCAyMywgMTQ0LCAxLCAyMTYsIDExNSwgMTQ0LCAxLCAyMTYsIDExNiwgMjMyLCAxMiwgMTQ0LCAxLCAKKyAgICAyNDgsIDg2LCAxNDQsIDEsIDI0OCwgODcsIDIzMiwgMTIsIDE0NCwgMSwgMjMwLCA0NiwgMjMwLCAxMzYsIDE0NCwgMSwgCisgICAgMjE4LCA1MiwgMTQ0LCAxLCAyMTgsIDUzLCAyMzAsIDEzNiwgMTQ0LCAxLCAyNDgsIDE2NCwgMTQ0LCAxLCAyNDgsIDE2NSwgCisgICAgMjMyLCAxMiwgMTQ0LCAxLCAyMDUsIDE0NCwgMSwgMTkzLCAxNDQsIDEsIDIyNiwgMjE0LCAyMzAsIDEzNiwgMTQ0LCAxLCAKKyAgICAyNTIsIDEwNywgMTQ0LCAxLCAyNTIsIDEwOCwgMjMwLCAxMzYsIDE0NCwgMSwgMTg4LCAxNDQsIDEsIDE4NiwgMTQ0LCAxLCAKKyAgICAyMDMsIDE0NCwgMSwgMjI0LCA3NywgMjU0LCAxMTUsIDE0NCwgMSwgMjMzLCAxNTcsIDE0NCwgMSwgMjE0LCA0OSwgMTQ0LCAKKyAgICAxLCAyMjIsIDIwMywgMjMwLCAxMzYsIDE0NCwgMSwgMjIyLCAyMDMsIDIzMiwgMTIsIDE0NCwgMSwgMjIyLCAyMDIsIDE0NCwgCisgICAgMSwgMTU5LCAxNDQsIDUsIDI1MCwgMTIyLCAyMTcsIDIwMywgMTQ0LCAzMCwgNSwgMjE3LCAyNTQsIDE0NCwgMzAsIDUsIAorICAgIDIxNiwgMjQ2LCAxNDQsIDMwLCA1LCAyMTMsIDE3OCwgMTQ0LCAzMCwgNSwgMjEzLCAxNzksIDIzMSwgMTMzLCAxNDQsIDMwLCAKKyAgICA1LCAyMTgsIDI0OCwgMTQ0LCAzMCwgNSwgMjE4LCAyNDksIDIzMSwgMTIxLCAxNDQsIDMwLCA1LCAyMTgsIDE2LCAxNDQsIAorICAgIDMwLCA1LCAyNDcsIDE0NiwgMjMwLCAxMzUsIDE0NCwgMzAsIDUsIDIyNiwgNTksIDE0NCwgMjQ5LCAxMzMsIDUsIDIzNCwgCisgICAgMTY0LCAxNDQsIDI0OSwgMTMzLCA1LCAyMjYsIDcxLCAxNDQsIDI0OSwgMTMzLCA1LCAyNTAsIDIwNywgMTQ0LCAyMjYsIAorICAgIDE2NywgMTQ0LCA0MiwgMjIzLCAyMjEsIDE0NCwgNDYsIDIyMywgMjIxLCAxNDQsIDIyNiwgMjAzLCAyNTQsIDI2LCAxNDQsIAorICAgIDIyNiwgMjAzLCAyMzIsIDI5LCAxNDQsIDIyNiwgMjAzLCAyMzIsIDE0NiwgMTQ0LCAyMjYsIDIwMywgMjEzLCAyMjMsIDE0NCwgCisgICAgMjI2LCAyMDMsIDIyNiwgMTY4LCAxNDQsIDIyNiwgMjAzLCAyMzIsIDIzNCwgMTQ0LCAyMjYsIDIwMywgMjMyLCAxNDAsIAorICAgIDE0NCwgMjI2LCAyMDMsIDI1NCwgMTU0LCAxNDQsIDIyNiwgMjAzLCAyNTQsIDE1NSwgMjU0LCAxNTQsIDE0NCwgMjI2LCAKKyAgICAyMDMsIDIyNSwgMTgzLCAxNDQsIDIxNiwgNTgsIDIyNiwgMjAzLCAyMjUsIDE4MywgMTQ0LCAyMjYsIDE2NCwgMTQ0LCAyMSwgCisgICAgMjEyLCA3OSwgMTQ0LCAyMSwgMTE2LCAxNDQsIDIxLCAxMDksIDE0NCwgMjEsIDE2NiwgMTQ0LCAyMSwgMTYzLCAxNDQsIDIxLCAKKyAgICAxODAsIDE0NCwgMjEsIDE4OSwgMTQ0LCAyMSwgMTk4LCAxNDQsIDIxLCAxOTUsIDE0NCwgMjEsIDIwMCwgMTQ0LCAyMjYsIAorICAgIDIwMywgMjE3LCAyMiwgMjE2LCA3MCwgMTQ0LCAyMjYsIDIwMywgMjM1LCAxNjUsIDE2MiwgMSwgNjEsIDE2MiwgMSwgNzIsIAorICAgIDE2MiwgMSwgNjksIDE2MiwgMSwgNzQsIDE2MiwgMSwgMjU0LCAxMDgsIDE2MiwgMSwgNzUsIDE2MiwgMSwgMTgxLCAxNjIsIAorICAgIDEsIDIzNCwgMTM4LCAxNjIsIDEsIDI0MywgMTEwLCAxNjIsIDEsIDI0MiwgMjI1LCAxNjIsIDEsIDIyOSwgNzUsIDE2MiwgMSwgCisgICAgMjI5LCAxNTksIDE2MiwgMSwgMjUwLCA5MiwgMTYyLCAxLCAyNTAsIDQ5LCAxNjIsIDEsIDIzNSwgMTM5LCAxNjIsIDEsIAorICAgIDIzNSwgMTE1LCAxNjIsIDEsIDIyOSwgNjYsIDE2MiwgMSwgMjI5LCA2OCwgMTYyLCAxLCAyMjksIDY3LCAxNjIsIDEsIDIxOCwgCisgICAgNTIsIDE2MiwgMSwgMjE3LCAxNjEsIDE2MiwgMSwgMjQ4LCAxNjQsIDE2MiwgMSwgMjQ3LCAyMzIsIDE2MiwgMSwgMjI4LCAKKyAgICA2MiwgMTYyLCAxLCAyMDUsIDE2MiwgMSwgMjQ4LCA4NiwgMTYyLCAxLCAxOTMsIDE2MiwgMSwgMjI1LCAxMDAsIDE2MiwgMSwgCisgICAgMjI2LCAyMywgMTYyLCAxLCAyNTIsIDEwNywgMTYyLCAxLCAyNTEsIDE5NSwgMTYyLCAxLCAyMzAsIDE2NSwgMTYyLCAxLCAKKyAgICAxODgsIDE2MiwgMSwgMjUyLCAzMSwgMTYyLCAxLCAxODYsIDE2MiwgMSwgMjAzLCAxNjIsIDEsIDIzMywgMTU3LCAxNjIsIDEsIAorICAgIDIxNSwgMSwgMTYyLCAxLCAyMTksIDE1NywgMTYyLCAxLCAyMjIsIDIwMiwgMTYyLCAxLCAxNTksIDE2MiwgMzAsIDUsIDI1NCwgCisgICAgMjMyLCAxNjIsIDMwLCA1LCA3MiwgMTYyLCAzMCwgNSwgMjM2LCAyOCwgMTYyLCAzMCwgNSwgMjQ1LCAxNTIsIDE2MiwgMzAsIAorICAgIDUsIDY5LCAxNjIsIDMwLCA1LCAyMjcsIDk5LCAxNjIsIDMwLCA1LCA3NSwgMTYyLCAzMCwgNSwgMjU0LCAxMDgsIDE2MiwgCisgICAgMzAsIDUsIDI1MywgMTA4LCAxNjIsIDMwLCA1LCAyMTUsIDE4MywgMTYyLCAyNDksIDEzMywgNSwgMTg2LCAxNjIsIDI0OSwgCisgICAgMTMzLCA1LCAyMDMsIDE2MiwgMjQ5LCAxMzMsIDUsIDIzMywgMTU3LCAxNjIsIDI0OSwgMTMzLCA1LCAyMTQsIDQ5LCAxNjIsIAorICAgIDEsIDQwLCAyMzUsIDI3LCAxNjIsIDEsIDQwLCAyNDMsIDE3NywgMTYyLCAxLCA0MCwgMjI5LCAxNjEsIDE2MiwgMjQ5LCAKKyAgICAxMzMsIDUsIDQwLCAyMjksIDE2MSwgMTYyLCAxLCA0MCwgMjUwLCA5MywgMTYyLCAxLCA0MCwgMjE4LCA5OSwgMTYyLCAxLCAKKyAgICA0MCwgMjA0LCAxNjIsIDEsIDQwLCAyMjYsIDIyOSwgMTYyLCAxLCA0MCwgMjEzLCAxMDUsIDE2MiwgMSwgNDAsIDE0OSwgCisgICAgMTYyLCAxLCA0MCwgMTUwLCAxNjIsIDEsIDQwLCAyMTksIDE1OCwgMTYyLCAyNDksIDEzMywgNSwgNDAsIDE4MywgMTYyLCAKKyAgICAyNDksIDEzMywgNSwgNDAsIDI0MiwgNDEsIDE2MiwgMjEsIDIxMiwgNzksIDE2MiwgMjEsIDExNiwgMTYyLCAyMSwgMTA5LCAKKyAgICAxNjIsIDIxLCAxNjYsIDE2MiwgMjEsIDE2MywgMTYyLCAyMSwgMTgwLCAxNjIsIDIxLCAxODksIDE2MiwgMjEsIDE5OCwgCisgICAgMTYyLCAyMSwgMTk1LCAxNjIsIDIxLCAyMDAsIDE2MiwgMjI1LCAyNywgMjE5LCAxODMsIDE2MiwgMjI1LCAyNywgMjQ4LCAKKyAgICAxMjMsIDE2MiwgMjI1LCAyNywgNTEsIDI0OCwgMTIzLCAxNjIsIDIyNSwgMjcsIDIxNiwgMTY5LCAyNDgsIDEyMywgNjQsIDEsIAorICAgIDIzNCwgMTMyLCAyNDMsIDExMCwgNjQsIDEsIDIzNCwgMTMyLCAyNTAsIDIxOSwgNjQsIDEsIDIzNCwgMTMyLCAyNTAsIDkyLCAKKyAgICA2NCwgMSwgMjM0LCAxMzIsIDIzNSwgMTM5LCA2NCwgMSwgMjM0LCAxMzIsIDIzNSwgMTE1LCA2NCwgMSwgMjM0LCAxMzIsIAorICAgIDIyOCwgMjMsIDY0LCAxLCAyMzQsIDEzMiwgMjE2LCAxMTUsIDY0LCAxLCAyMzQsIDEzMiwgMjE2LCAxMDUsIDY0LCAxLCAKKyAgICAyMzQsIDEzMiwgMjQ4LCA4NiwgNjQsIDEsIDIzNCwgMTMyLCAyNDgsIDcwLCA2NCwgMSwgMjM0LCAxMzIsIDI0NywgMjMyLCAKKyAgICA2NCwgMSwgMjM0LCAxMzIsIDIwNSwgNjQsIDEsIDIzNCwgMTMyLCAyMjIsIDIwMiwgNjQsIDEsIDIzNCwgMTMyLCAxNTksIAorICAgIDY0LCAxLCAyMzQsIDEzMiwgMjQxLCAxNzQsIDY0LCAxLCAyMzQsIDEzMiwgMjQ0LCAxNjQsIDY0LCA1OSwgMSwgMjM0LCAKKyAgICAxMzIsIDIyNCwgMiwgNjQsIDEsIDIzNCwgMTMyLCAyMTMsIDE1MywgNjQsIDEsIDIzNCwgMTMyLCAyMTIsIDEwOSwgNjQsIDEsIAorICAgIDIzNCwgMTMyLCAyMDMsIDY0LCAyMzIsIDE5OCwgMjM0LCAxMzIsIDIyNywgMTE3LCA2NCwgMjMyLCAxOTgsIDIzNCwgMTMyLCAKKyAgICAyMjQsIDE4OCwgNjQsIDIzMiwgMTk4LCAyMzQsIDEzMiwgMjQxLCAxMDcsIDY0LCAxNiwgMjU0LCA5OCwgMjQ0LCAyNTMsIAorICAgIDY0LCAxNiwgMjU0LCA5OCwgMTE2LCA2NCwgMTYsIDI1NCwgOTgsIDEwOSwgNjQsIDEsIDI1NCwgOTgsIDIwMywgNjQsIDUsIAorICAgIDIyNiwgMTUxLCAyMzQsIDIxOCwgMjE2LCAyNDEsIDM4LCAxOTAsIDEsIDExNSwgMjM0LCAzNywgMzgsIDE5MCwgMSwgMTI0LCAKKyAgICAyMzQsIDM3LCAzOCwgMTkwLCAxLCAxMTUsIDIzNCwgMTEzLCAzOCwgMTkwLCAxLCAxMjQsIDIzNCwgMTEzLCAzOCwgMTkwLCAKKyAgICAxLCAxMTUsIDIzNCwgMTIwLCAzOCwgMTkwLCAxLCAxMjQsIDIzNCwgMTIwLCAzOCwgMTkwLCAxLCAxMTUsIDI0MiwgMTUwLCAKKyAgICAzOCwgMTkwLCAxLCAxMjQsIDI0MiwgMTUwLCAzOCwgMTkwLCAxLCAxMTUsIDIyOSwgOTAsIDM4LCAxOTAsIDEsIDEyNCwgCisgICAgMjI5LCA5MCwgMzgsIDE5MCwgMSwgMTE1LCAyNDksIDE3NSwgMzgsIDE5MCwgMSwgMTI0LCAyNDksIDE3NSwgMzgsIDE5MCwgCisgICAgMSwgMTE1LCAyNTAsIDIzLCAzOCwgMTkwLCAxLCAxMjQsIDI1MCwgMjMsIDM4LCAxOTAsIDEsIDExNSwgMjE5LCAyNDIsIDM4LCAKKyAgICAxOTAsIDEsIDEyNCwgMjE5LCAyNDIsIDM4LCAxOTAsIDEsIDExNSwgMjI3LCAyNTMsIDM4LCAxOTAsIDEsIDEyNCwgMjI3LCAKKyAgICAyNTMsIDM4LCAxOTAsIDEsIDExNSwgMjQ3LCA5OSwgMzgsIDE5MCwgMSwgMTI0LCAyNDcsIDk5LCAzOCwgMTkwLCAxLCAxMTUsIAorICAgIDEwOCwgMzgsIDE5MCwgMSwgMTI0LCAxMDgsIDM4LCAxOTAsIDEsIDExNSwgMjE3LCAxMDksIDM4LCAxOTAsIDEsIDEyNCwgCisgICAgMjE3LCAxMDksIDM4LCAxOTAsIDEsIDExNSwgMjI4LCAxODUsIDM4LCAxOTAsIDEsIDEyNCwgMjI4LCAxODUsIDM4LCAxOTAsIAorICAgIDEsIDExNSwgMjUxLCAxMjgsIDM4LCAxOTAsIDEsIDEyNCwgMjUxLCAxMjgsIDM4LCAxOTAsIDEsIDExNSwgMjI1LCAxNTAsIAorICAgIDM4LCAxOTAsIDEsIDEyNCwgMjI1LCAxNTAsIDM4LCAxOTAsIDEsIDExNSwgMjI1LCAyNTMsIDM4LCAxOTAsIDEsIDEyNCwgCisgICAgMjI1LCAyNTMsIDM4LCAxOTAsIDEsIDExNSwgMjQ0LCAxMiwgMzgsIDE5MCwgMSwgMTI0LCAyNDQsIDEyLCAzOCwgMTkwLCAxLCAKKyAgICAxMTUsIDIzMCwgMjMxLCAzOCwgMTkwLCAxLCAxMjQsIDIzMCwgMjMxLCAzOCwgMTkwLCAxLCAxMTUsIDIxMiwgMjM1LCAzOCwgCisgICAgMTkwLCAxLCAxMjQsIDIxMiwgMjM1LCAzOCwgMTkwLCAxLCAxMTUsIDIyMywgMTEyLCAzOCwgMTkwLCAxLCAxMjQsIDIyMywgCisgICAgMTEyLCAzOCwgMTkwLCAxLCAxMTUsIDIzMiwgMjA4LCAzOCwgMTkwLCAxLCAxMjQsIDIzMiwgMjA4LCAzOCwgMTkwLCAxLCAKKyAgICAxMTUsIDIxNCwgMTE5LCAzOCwgMTkwLCAxLCAxMjQsIDIxNCwgMTE5LCAzOCwgMTkwLCAxLCAxMTUsIDI0MSwgNTQsIDM4LCAKKyAgICAxOTAsIDEsIDEyNCwgMjQxLCA1NCwgMzgsIDE5MCwgMSwgMTE1LCA3NSwgMzgsIDE5MCwgMSwgMTI0LCA3NSwgMzgsIDE5MCwgCisgICAgMjMyLCA5LCAyMzQsIDIzNSwgMzgsIDE5MCwgMzAsIDI1NCwgMjMyLCAzOCwgMTkwLCAzMCwgNzIsIDM4LCAxOTAsIDMwLCAKKyAgICAyMTUsIDE4MywgMzgsIDE5MCwgMzAsIDY5LCAzOCwgMTkwLCAzMCwgNzQsIDM4LCAxOTAsIDMwLCA3NSwgMzgsIDE5MCwgCisgICAgMjMyLCA5LCAyMzQsIDExNSwgMzgsIDE5MCwgMzAsIDI0MCwgMTExLCAzOCwgMTkwLCAzMCwgMjE1LCAxODIsIDM4LCAxOTAsIAorICAgIDMwLCAyMTUsIDE5NiwgMzgsIDE5MCwgMzAsIDI1MywgMTA2LCAzOCwgMTkwLCAzMCwgMjUzLCA4MywgMzgsIDE5MCwgMzAsIAorICAgIDI1NCwgMzIsIDM4LCAxOTAsIDMwLCAyNTQsIDQ1LCAzOCwgMTkwLCAxNjAsIDIzMiwgOSwgMjQ1LCAxMzcsIDM4LCAxOTAsIAorICAgIDE2MCwgMjMyLCA5LCAyMjgsIDYxLCAzOCwgMTkwLCAxNjAsIDIzMiwgOSwgMjE3LCAxMDksIDM4LCAxOTAsIDE2MCwgMjMyLCAKKyAgICA5LCAyMTksIDIyOCwgMzgsIDE5MCwgMTYsIDIzNCwgMjIsIDM4LCAxOTAsIDE2LCAyMjgsIDYxLCAzOCwgMTkwLCAxNiwgCisgICAgMjIyLCAxNjgsIDM4LCAxOTAsIDE2LCAyNDEsIDU1LCAyNDEsIDUwLCAzOCwgMTkwLCAxNiwgMjM0LCAzMSwgMjM0LCAzMCwgCisgICAgMjgsIDQsIDIxNiwgOTgsIDI4LCA0LCAyMTYsIDEwMSwgMjgsIDQsIDIxNiwgMTA0LCAyOCwgNCwgMjE2LCAxMDIsIDI4LCA0LCAKKyAgICAyMTYsIDEwMywgMjgsIDQsIDIxNiwgMTAwLCAyOCwgNCwgMjQ4LCA2NCwgMjgsIDQsIDI0OCwgNjYsIDI4LCA0LCAyNDgsIAorICAgIDY5LCAyOCwgNCwgMjQ4LCA2NywgMjgsIDQsIDI0OCwgNjgsIDI4LCA0LCAyNDgsIDY1LCAyOCwgNCwgMjQ1LCAyMzksIDI4LCAKKyAgICA0LCAyNDUsIDI0MiwgMjgsIDQsIDI0NSwgMjQ4LCAyOCwgNCwgMjQ1LCAyNDYsIDI4LCA0LCAyNDUsIDI0NywgMjgsIDQsIAorICAgIDI0NSwgMjQwLCAyOCwgNCwgMjUwLCAxMzgsIDI4LCA0LCAyNTAsIDEzMiwgMjgsIDQsIDI1MCwgMTM0LCAyOCwgNCwgMjUwLCAKKyAgICAxMzcsIDI4LCA0LCAyNTAsIDEzNSwgMjgsIDQsIDI1MCwgMTM2LCAyOCwgNCwgMjUwLCAxMzMsIDI4LCA0LCAyNTIsIDMxLCAKKyAgICAyOCwgNCwgMjUyLCAxMCwgMjgsIDQsIDI1MiwgMjIsIDI4LCA0LCAyNTIsIDMwLCAyOCwgNCwgMjUyLCAyNSwgMjgsIDQsIAorICAgIDI1MiwgMjYsIDI4LCA0LCAyNTIsIDE0LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIzNCwgMjgsIDIzMSwgMTQwLCAyMzEsIAorICAgIDE5NCwgMSwgMjIyLCAxNjgsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjMzLCAxMzMsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgCisgICAgMjMwLCAyNDEsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMTkzLCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIwNSwgMjMxLCAKKyAgICAxNDAsIDIzMSwgMTk0LCAxLCAyNTAsIDM5LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIxNywgNDQsIDIzMSwgMTQwLCAyMzEsIAorICAgIDE5NCwgMSwgMjM0LCAxMDksIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjI5LCA4MCwgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAKKyAgICAyMTcsIDEwMywgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAyMTQsIDQ0LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIxMywgNTgsIAorICAgIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjQwLCAyMDYsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjE1LCAxNjAsIDIzMSwgCisgICAgMTQwLCAyMzEsIDE5NCwgMSwgNzIsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjI2LCAxOCwgMjMxLCAxNDAsIDIzMSwgMTk0LCAKKyAgICAxLCAyNTMsIDExOCwgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAyNDIsIDE0MywgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAyMzUsIAorICAgIDExNCwgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAyMjQsIDU3LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDI1MiwgMTA3LCAKKyAgICAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIzNSwgMTAzLCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDI0NywgMTcxLCAyMzEsIAorICAgIDE0MCwgMjMxLCAxOTQsIDEsIDI0MiwgMTk3LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDI0NywgMjEzLCAyMzEsIDE0MCwgCisgICAgMjMxLCAxOTQsIDEsIDI1MSwgMTk0LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIzNCwgMjksIDIzMiwgMTgxLCAyMzEsIAorICAgIDE0MCwgMjMxLCAxOTQsIDEsIDIzMywgMTM0LCAyMzIsIDE4MSwgMjMxLCAxNDAsIDIzMSwgMTk0LCAxLCAyMzAsIDI0MiwgCisgICAgMjMyLCAxODEsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMSwgMjI2LCAyMTQsIDIzMiwgMTgxLCAyMzEsIDE0MCwgMjMxLCAxOTQsIAorICAgIDEsIDIzMCwgNDYsIDIzMiwgMTgxLCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDIxNywgNDUsIDIzMiwgMTgxLCAyMzEsIDE0MCwgCisgICAgMjMxLCAxOTQsIDEsIDIyOSwgODEsIDIzMiwgMTgxLCAyMzEsIDE0MCwgMjMxLCAxOTQsIDEsIDI0MCwgMTQ2LCAyMzIsIAorICAgIDE4MSwgMjMxLCAxNDAsIDIzMSwgMTk0LCAzMCwgNSwgMjI3LCA2MSwgMjMxLCAxNDAsIDIzMSwgMTk0LCAzMCwgNSwgMjM1LCAKKyAgICAyNDksIDIzMSwgMTQwLCAyMzEsIDE5NCwgMzAsIDUsIDI1NCwgMzEsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMzAsIDUsIDIxMywgCisgICAgMjksIDIzMSwgMTQwLCAyMzEsIDE5NCwgMzAsIDUsIDIxOSwgMjE5LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDMwLCA1LCAyMTUsIAorICAgIDE1NywgMjMxLCAxNDAsIDIzMSwgMTk0LCAzMCwgNSwgMjUwLCA2MCwgMjMxLCAxNDAsIDIzMSwgMTk0LCAzMCwgNSwgMjI4LCAKKyAgICA0NywgMjMxLCAxNDAsIDIzMSwgMTk0LCAyNTAsIDYxLCAyMzEsIDE0MCwgMjMxLCAxOTQsIDIzMiwgMTQzLCAyMzUsIDE0OCwgCisgICAgMjMxLCAxNDAsIDIzMSwgMTk0LCAyNTMsIDIxNiwgMjM1LCAxNDgsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMjEsIDIxMiwgNzksIAorICAgIDIzMSwgMTQwLCAyMzEsIDE5NCwgMjEsIDExNiwgMjMxLCAxNDAsIDIzMSwgMTk0LCAyMSwgMTA5LCAyMzEsIDE0MCwgMjMxLCAKKyAgICAxOTQsIDIxLCAxNjYsIDIzMSwgMTQwLCAyMzEsIDE5NCwgMjEsIDE2MywgMjMxLCAxNDAsIDIzMSwgMTk0LCAyMSwgMTgwLCAKKyAgICAyMzEsIDE0MCwgMjMxLCAxOTQsIDIxLCAxODksIDIzMSwgMTQwLCAyMzEsIDE5NCwgMjEsIDE5OCwgMjMxLCAxNDAsIDIzMSwgCisgICAgMTk0LCAyMSwgMTk1LCAyMzEsIDE0MCwgMjMxLCAxOTQsIDIxLCAyMDAsIDIzLCAxMzUsIDIyNywgMTk3LCAyMywgMTM1LCAKKyAgICAyMjcsIDIwMiwgMjMsIDEzNSwgMjEyLCAyMzQsIDIzLCAxMzUsIDIxMiwgMjMzLCAyMywgMTM1LCAyMTIsIDIzMiwgMjMsIAorICAgIDEzNSwgMjE1LCAyNDYsIDIzLCAxMzUsIDIxNSwgMjQ5LCAyMywgMTM1LCAyMTIsIDIwMSwgMjMsIDEzNSwgMjEyLCAxOTcsIAorICAgIDIzLCAxMzUsIDI0NSwgMjEsIDIzLCAxMzUsIDI0NSwgMTksIDIzLCAxMzUsIDI0NSwgMjAsIDIzLCAxMzUsIDI0NSwgMTcsIAorICAgIDIzLCAxMzUsIDI0MCwgMTM2LCAyMywgMTM1LCAyNDAsIDEzNSwgMjMsIDEzNSwgMjQwLCAxMzMsIDIzLCAxMzUsIDI0MCwgCisgICAgMTM0LCAyMywgMTM1LCAyNDAsIDEzOSwgMjMsIDEzNSwgMjQwLCAxMzIsIDIzLCAxMzUsIDI0MCwgMTMxLCAyMywgMTM1LCAKKyAgICAyNDAsIDE0MSwgMjMsIDEzNSwgMjUzLCAyMDMsIDIzLCAxMzUsIDI1MywgMjAyLCAyMywgODksIDIyOSwgNTAsIDIzLCA4OSwgCisgICAgMjI5LCA1NiwgMjMsIDg5LCAyMTksIDEzOSwgMjMsIDg5LCAyMTksIDEzOCwgMjMsIDg5LCAyMTcsIDUwLCAyMywgODksIAorICAgIDIxNywgNDgsIDIzLCA4OSwgMjE3LCA0NywgMjMsIDg5LCAyMTcsIDUzLCAyMywgODksIDIxNywgNTQsIDIzLCA4OSwgMjE3LCAKKyAgICA0NiwgMjMsIDg5LCAyMjMsIDE1OCwgMjMsIDg5LCAyMjMsIDE3MywgMjMsIDg5LCAyMTksIDE0NSwgMjMsIDg5LCAyMjMsIAorICAgIDE3MCwgMjMsIDg5LCAyMjMsIDE2MCwgMjMsIDg5LCAyMjMsIDE2MiwgMjMsIDg5LCAyMjMsIDE0OSwgMjMsIDg5LCAyMjMsIAorICAgIDE1MCwgMjMsIDg5LCAyMzQsIDIyMywgMjMsIDg5LCAyMzEsIDI1LCAyMywgODksIDIzMSwgMTksIDIzLCA4OSwgMjE5LCAKKyAgICAxNDksIDIzLCA4OSwgMjMxLCAyMiwgMjMsIDg5LCAyMzEsIDI4LCAyMywgODksIDIyNSwgMjA4LCAyMywgODksIDIyNSwgCisgICAgMjE3LCAyMywgODksIDIyNSwgMjIxLCAyMywgODksIDIxOSwgMTQ3LCAyMywgODksIDIyNSwgMjExLCAyMywgODksIDIyNSwgCisgICAgMjI1LCAyMywgODksIDIyNSwgMjI2LCAyMywgODksIDIyMCwgNjgsIDIzLCA4OSwgMjIwLCA3MSwgMjMsIDg5LCAyMTksIAorICAgIDE0MywgMjMsIDg5LCAyMTksIDE0MSwgMjMsIDg5LCAyMjAsIDY2LCAyMywgODksIDIyMCwgNzQsIDIzLCA4OSwgMjIwLCA3NSwgCisgICAgMjMsIDg5LCAyMjAsIDYwLCAyMywgODksIDIyMCwgNzMsIDIzLCA4OSwgMjI2LCAxNTgsIDIzLCA4OSwgMjI2LCAxNTksIDIzLCAKKyAgICA4OSwgMjEzLCAxNSwgMjMsIDg5LCAyMTMsIDE2LCAyMywgODksIDI0OSwgMjM3LCAyMywgODksIDI0OSwgMjM2LCAyMywgODksIAorICAgIDIxOSwgMTU0LCAyMywgODksIDIyNiwgNCwgMjMsIDg5LCAyMjYsIDMsIDksIDEzLCAyMzgsIDE3LCA5LCAxMywgMjM4LCAxNiwgCisgICAgOSwgMTMsIDIzOCwgMTUsIDksIDEzLCAyMzgsIDE0LCA5LCAxMywgMjM4LCAxMywgOSwgMTMsIDIzOCwgMTIsIDksIDEzLCAKKyAgICAyMzgsIDExLCA5LCAxMywgMjM4LCAxMCwgOSwgMTMsIDIzOCwgOSwgOSwgMTMsIDIzOCwgOCwgOSwgMTMsIDIzOCwgNywgOSwgCisgICAgMTMsIDIzOCwgNiwgOSwgMTMsIDIzOCwgNSwgOSwgMTMsIDIzOCwgNCwgOSwgMTMsIDIzOCwgMywgOSwgMTMsIDIzOCwgMiwgCisgICAgOSwgMTMsIDIzOCwgMSwgOSwgMTMsIDIzOCwgMCwgOSwgMTMsIDIzNywgMjU1LCA5LCAxMywgMjM3LCAyNTQsIDksIDEzLCAKKyAgICAyMzcsIDI1MywgOSwgMTMsIDIzNywgMjUyLCA5LCAxMywgMjM3LCAyNTEsIDksIDEzLCAyMzcsIDI1MCwgOSwgMTMsIDIzNywgCisgICAgMjQ5LCA5LCAxMywgMjM3LCAyNDgsIDksIDEzLCAyMzcsIDI0NywgOSwgMTMsIDIzNywgMjQ2LCA5LCAxMywgMjM3LCAyNDUsIAorICAgIDksIDEzLCAyMzcsIDI0NCwgOSwgMTMsIDIzNywgMjQzLCA5LCAxMywgMjM3LCAyNDIsIDksIDEzLCAyMzcsIDI0MSwgOSwgCisgICAgMTMsIDIzNywgMjQwLCA5LCAxMywgMjM3LCAyMzksIDksIDEzLCAyMzcsIDIzOCwgOSwgMTMsIDIzNywgMjM3LCA5LCAxMywgCisgICAgMjM3LCAyMzYsIDksIDEzLCAyMzcsIDIzNSwgOSwgMTMsIDIzNywgMjM0LCA5LCAxMywgMjM3LCAyMzMsIDksIDEzLCAyMzcsIAorICAgIDIzMiwgOSwgMTMsIDIzNywgMjMxLCA5LCAxMywgMjM3LCAyMzAsIDksIDEzLCAyMzcsIDIyOSwgOSwgMTMsIDIzNywgMjI4LCAKKyAgICA5LCAxMywgMjM3LCAyMjcsIDksIDEzLCAyMzcsIDIyNiwgOSwgMTMsIDIzNywgMjI1LCA5LCAxMywgMjM3LCAyMjQsIDksIAorICAgIDEzLCAyMzcsIDIyMywgOSwgMTMsIDIzNywgMjIyLCA5LCAxMywgMjM3LCAyMjEsIDksIDEzLCAyMzcsIDIyMCwgOSwgMTMsIAorICAgIDIzNywgMjE5LCA5LCAxMywgMjM3LCAyMTgsIDksIDEzLCAyMzcsIDIxNywgOSwgMTMsIDIzNywgMjE2LCA5LCAxMywgMjM3LCAKKyAgICAyMTUsIDksIDEzLCAyMzcsIDIxNCwgOSwgMTMsIDIzNywgMjEzLCA5LCAxMywgMjM3LCAyMTIsIDksIDEzLCAyMzcsIDIxMSwgCisgICAgOSwgMTMsIDIzNywgMjEwLCA5LCAxMywgMjM3LCAyMDksIDksIDEzLCAyMzcsIDIwOCwgOSwgMTMsIDIzNywgMjA3LCA5LCAKKyAgICAxMywgMjM3LCAyMDYsIDksIDEzLCAyMzcsIDIwNSwgOSwgMTMsIDIzNywgMjA0LCA5LCAxMywgMjM3LCAyMDMsIDksIDEzLCAKKyAgICAyMzcsIDIwMiwgOSwgMTMsIDIzNywgMjAxLCA5LCAxMywgMjM3LCAyMDAsIDksIDEzLCAyMzcsIDE5OSwgOSwgMTMsIDIzNywgCisgICAgMTk4LCA5LCAxMywgMjM3LCAxOTcsIDksIDEzLCAyMzcsIDE5NiwgOSwgMTMsIDIzNywgMTk1LCA5LCAxMywgMjM3LCAxOTQsIAorICAgIDksIDEzLCAyMzcsIDE5MywgOSwgMTMsIDIzNywgMTkyLCA5LCAxMywgMjM3LCAxOTEsIDksIDEzLCAyMzcsIDE5MCwgOSwgCisgICAgMTMsIDIzNywgMTg5LCA5LCAxMywgMjM3LCAxODgsIDksIDEzLCAyMzcsIDE4NywgOSwgMTMsIDIzNywgMTg2LCA5LCAxMywgCisgICAgMjM3LCAxODUsIDksIDEzLCAyMzcsIDE4NCwgOSwgMTMsIDIzNywgMTgzLCA5LCAxMywgMjM3LCAxODIsIDksIDEzLCAyMzcsIAorICAgIDE4MSwgOSwgMTMsIDIzNywgMTgwLCA5LCAxMywgMjM3LCAxNzksIDksIDEzLCAyMzcsIDE3OCwgOSwgMTMsIDIzNywgMTc3LCAKKyAgICA5LCAxMywgMjM3LCAxNzYsIDksIDEzLCAyMzcsIDE3NSwgOSwgMTMsIDIzNywgMTc0LCA5LCAxMywgMjM3LCAxNzMsIDksIAorICAgIDEzLCAyMzcsIDE3MiwgOSwgMTMsIDIzNywgMTcxLCA5LCAxMywgMjM3LCAxNzAsIDksIDEzLCAyMzcsIDE2OSwgOSwgMTMsIAorICAgIDIzNywgMTY4LCA5LCAxMywgMjM3LCAxNjcsIDksIDEzLCAyMzcsIDE2NiwgOSwgMTMsIDIzNywgMTY1LCA5LCAxMywgMjM3LCAKKyAgICAxNjQsIDksIDEzLCAyMzcsIDE2MywgOSwgMTMsIDIzNywgMTYyLCA5LCAxMywgMjM3LCAxNjEsIDksIDEzLCAyMzcsIDE2MCwgCisgICAgOSwgMTMsIDIzNywgMTU5LCA5LCAxMywgMjM3LCAxNTgsIDksIDEzLCAyMzcsIDE1NywgOSwgMTMsIDIzNywgMTU2LCA5LCAKKyAgICAxMywgMjM3LCAxNTUsIDksIDEzLCAyMzcsIDE1NCwgOSwgMTMsIDIzNywgMTUzLCA5LCAxMywgMjM3LCAxNTIsIDksIDEzLCAKKyAgICAyMzcsIDE1MSwgOSwgMTMsIDIzNywgMTUwLCA5LCAxMywgMjM3LCAxNDksIDksIDEzLCAyMzcsIDE0OCwgOSwgMTMsIDIzNywgCisgICAgMTQ3LCA5LCAxMywgMjM3LCAxNDYsIDksIDEzLCAyMzcsIDE0NSwgOSwgMTMsIDIzNywgMTQ0LCA5LCAxMywgMjM3LCAxNDMsIAorICAgIDksIDEzLCAyMzcsIDE0MiwgOSwgMTMsIDIzNywgMTQxLCA5LCAxMywgMjM3LCAxNDAsIDksIDEzLCAyMzcsIDEzOSwgOSwgCisgICAgMTMsIDIzNywgMTM4LCA5LCAxMywgMjM3LCAxMzcsIDksIDEzLCAyMzcsIDEzNiwgOSwgMTMsIDIzNywgMTM1LCA5LCAxMywgCisgICAgMjM3LCAxMzQsIDksIDEzLCAyMzcsIDEzMywgOSwgMTMsIDIzNywgMTMyLCA5LCAxMywgMjM3LCAxMzEsIDksIDEzLCAyMzcsIAorICAgIDEzMCwgOSwgMTMsIDIzNywgMTI5LCA5LCAxMywgMjM3LCAxMjgsIDksIDEzLCAyMzcsIDEyNywgOSwgMTMsIDIzNywgMTI2LCAKKyAgICA5LCAxMywgMjM3LCAxMjUsIDksIDEzLCAyMzcsIDEyNCwgOSwgMTMsIDIzNywgMTIzLCA5LCAxMywgMjM3LCAxMjIsIDksIAorICAgIDEzLCAyMzcsIDEyMSwgOSwgMTMsIDIzNywgMTIwLCA5LCAxMywgMjM3LCAxMTksIDksIDEzLCAyMzcsIDExOCwgOSwgMTMsIAorICAgIDIzNywgMTE3LCA5LCAxMywgMjM3LCAxMTYsIDksIDEzLCAyMzcsIDExNSwgOSwgMTMsIDIzNywgMTE0LCA5LCAxMywgMjM3LCAKKyAgICAxMTMsIDksIDEzLCAyMzcsIDExMiwgOSwgMTMsIDIzNywgMTExLCA5LCAxMywgMjM3LCAxMTAsIDksIDEzLCAyMzcsIDEwOSwgCisgICAgOSwgMTMsIDIzNywgMTA4LCA5LCAxMywgMjM3LCAxMDcsIDksIDEzLCAyMzcsIDEwNiwgOSwgMTMsIDIzNywgMTA1LCA5LCAKKyAgICAxMywgMjM3LCAxMDQsIDksIDEzLCAyMzcsIDEwMywgOSwgMTMsIDIzNywgMTAyLCA5LCAxMywgMjM3LCAxMDEsIDksIDEzLCAKKyAgICAyMzcsIDEwMCwgOSwgMTMsIDIzNywgOTksIDksIDEzLCAyMzcsIDk4LCA5LCAxMywgMjM3LCA5NywgOSwgMTMsIDIzNywgOTYsIAorICAgIDksIDEzLCAyMzcsIDk1LCA5LCAxMywgMjM3LCA5NCwgOSwgMTMsIDIzNywgOTMsIDksIDEzLCAyMzcsIDkyLCA5LCAxMywgCisgICAgMjM3LCA5MSwgOSwgMTMsIDIzNywgOTAsIDksIDEzLCAyMzcsIDg5LCA5LCAxMywgMjM3LCA4OCwgOSwgMTMsIDIzNywgODcsIAorICAgIDksIDEzLCAyMzcsIDg2LCA5LCAxMywgMjM3LCA4NSwgOSwgMTMsIDIzNywgODQsIDksIDEzLCAyMzcsIDgzLCA5LCAxMywgCisgICAgMjM3LCA4MiwgOSwgMTMsIDIzNywgODEsIDksIDEzLCAyMzcsIDgwLCA5LCAxMywgMjM3LCA3OSwgOSwgMTMsIDIzNywgNzgsIAorICAgIDksIDEzLCAyMzcsIDc3LCA5LCAxMywgMjM3LCA3NiwgOSwgMTMsIDIzNywgNzUsIDksIDEzLCAyMzcsIDc0LCA5LCAxMywgCisgICAgMjM3LCA3MywgOSwgMTMsIDIzNywgNzIsIDksIDEzLCAyMzcsIDcxLCA5LCAxMywgMjM3LCA3MCwgOSwgMTMsIDIzNywgNjksIAorICAgIDksIDEzLCAyMzcsIDY4LCA5LCAxMywgMjM3LCA2NywgOSwgMTMsIDIzNywgNjYsIDksIDEzLCAyMzcsIDY1LCA5LCAxMywgCisgICAgMjM3LCA2NCwgOSwgMTMsIDIzNywgNjMsIDksIDEzLCAyMzcsIDYyLCA5LCAxMywgMjM3LCA2MSwgOSwgMTMsIDIzNywgNjAsIAorICAgIDksIDEzLCAyMzcsIDU5LCA5LCAxMywgMjM3LCA1OCwgOSwgMTMsIDIzNywgNTcsIDksIDEzLCAyMzcsIDU2LCA5LCAxMywgCisgICAgMjM3LCA1NSwgOSwgMTMsIDIzNywgNTQsIDksIDEzLCAyMzcsIDUzLCA5LCAxMywgMjM3LCA1MiwgOSwgMTMsIDIzNywgNTEsIAorICAgIDksIDEzLCAyMzcsIDUwLCA5LCAxMywgMjM3LCA0OSwgOSwgMTMsIDIzNywgNDgsIDksIDEzLCAyMzcsIDQ3LCA5LCAxMywgCisgICAgMjM3LCA0NiwgOSwgMTMsIDIzNywgNDUsIDksIDEzLCAyMzcsIDQ0LCA5LCAxMywgMjM3LCA0MywgOSwgMTMsIDIzNywgNDIsIAorICAgIDksIDEzLCAyMzcsIDQxLCA5LCAxMywgMjM3LCA0MCwgOSwgMTMsIDIzNywgMzksIDksIDEzLCAyMzcsIDM4LCA5LCAxMywgCisgICAgMjM3LCAzNywgOSwgMTMsIDIzNywgMzYsIDksIDEzLCAyMzcsIDM1LCA5LCAxMywgMjM3LCAzNCwgOSwgMTMsIDIzNywgMzMsIAorICAgIDksIDEzLCAyMzcsIDMyLCA5LCAxMywgMjM3LCAzMSwgOSwgMTMsIDIzNywgMzAsIDksIDEzLCAyMzcsIDI5LCA5LCAxMywgCisgICAgMjM3LCAyOCwgOSwgMTMsIDIzNywgMjcsIDksIDEzLCAyMzcsIDI2LCA5LCAxMywgMjM3LCAyNSwgOSwgMTMsIDIzNywgMjQsIAorICAgIDksIDEzLCAyMzcsIDIzLCA5LCAxMywgMjM3LCAyMiwgOSwgMTMsIDIzNywgMjEsIDksIDEzLCAyMzcsIDIwLCA5LCAxMywgCisgICAgMjM3LCAxOSwgOSwgMTMsIDIzNywgMTgsIDksIDEzLCAyMzcsIDE3LCA5LCAxMywgMjM3LCAxNiwgOSwgMTMsIDIzNywgMTUsIAorICAgIDksIDEzLCAyMzcsIDE0LCA5LCAxMywgMjM3LCAxMywgOSwgMTMsIDIzNywgMTIsIDksIDEzLCAyMzcsIDExLCA5LCAxMywgCisgICAgMjM3LCAxMCwgOSwgMTMsIDIzNywgOSwgOSwgMTMsIDIzNywgOCwgOSwgMTMsIDIzNywgNywgOSwgMTMsIDIzNywgNiwgOSwgCisgICAgMTMsIDIzNywgNSwgOSwgMTMsIDIzNywgNCwgOSwgMTMsIDIzNywgMywgOSwgMTMsIDIzNywgMiwgOSwgMTMsIDIzNywgMSwgCisgICAgOSwgMTMsIDIzNywgMCwgOSwgMTMsIDIzNiwgMjU1LCA5LCAxMywgMjM2LCAyNTQsIDksIDEzLCAyMzYsIDI1MywgOSwgMTMsIAorICAgIDIzNiwgMjUyLCA5LCAxMywgMjM2LCAyNTEsIDksIDEzLCAyMzYsIDI1MCwgOSwgMTMsIDIzNiwgMjQ5LCA5LCAxMywgMjM2LCAKKyAgICAyNDgsIDksIDEzLCAyMzYsIDI0NywgOSwgMTMsIDIzNiwgMjQ2LCA5LCAxMywgMjM2LCAyNDUsIDksIDEzLCAyMzYsIDI0NCwgCisgICAgOSwgMTMsIDIzNiwgMjQzLCA5LCAxMywgMjM2LCAyNDIsIDksIDEzLCAyMzYsIDI0MSwgOSwgMTMsIDIzNiwgMjQwLCA5LCAKKyAgICAxMywgMjM2LCAyMzksIDksIDEzLCAyMzYsIDIzOCwgOSwgMTMsIDIzNiwgMjM3LCA5LCAxMywgMjM2LCAyMzYsIDksIDEzLCAKKyAgICAyMzYsIDIzNSwgOSwgMTMsIDIzNiwgMjM0LCA5LCAxMywgMjM2LCAyMzMsIDksIDEzLCAyMzYsIDIzMiwgOSwgMTMsIDIzNiwgCisgICAgMjMxLCA5LCAxMywgMjM2LCAyMzAsIDksIDEzLCAyMzYsIDIyOSwgOSwgMTMsIDIzNiwgMjI4LCA5LCAxMywgMjM2LCAyMjcsIAorICAgIDksIDEzLCAyMzYsIDIyNiwgOSwgMTMsIDIzNiwgMjI1LCA5LCAxMywgMjM2LCAyMjQsIDksIDEzLCAyMzYsIDIyMywgOSwgCisgICAgMTMsIDIzNiwgMjIyLCA5LCAxMywgMjM2LCAyMjEsIDksIDEzLCAyMzYsIDIyMCwgOSwgMTMsIDIzNiwgMjE5LCA5LCAxMywgCisgICAgMjM2LCAyMTgsIDksIDEzLCAyMzYsIDIxNywgOSwgMTMsIDIzNiwgMjE2LCA5LCAxMywgMjM2LCAyMTUsIDksIDEzLCAyMzYsIAorICAgIDIxNCwgOSwgMTMsIDIzNiwgMjEzLCA5LCAxMywgMjM2LCAyMTIsIDksIDEzLCAyMzYsIDIxMSwgOSwgMTMsIDIzNiwgMjEwLCAKKyAgICA5LCAxMywgMjM2LCAyMDksIDksIDEzLCAyMzYsIDIwOCwgOSwgMTMsIDIzNiwgMjA3LCA5LCAxMywgMjM2LCAyMDYsIDksIAorICAgIDEzLCAyMzYsIDIwNSwgOSwgMTMsIDIzNiwgMjA0LCA5LCAxMywgMjM2LCAyMDMsIDksIDEzLCAyMzYsIDIwMiwgOSwgMTMsIAorICAgIDIzNiwgMjAxLCA5LCAxMywgMjM2LCAyMDAsIDksIDEzLCAyMzYsIDE5OSwgOSwgMTMsIDIzNiwgMTk4LCA5LCAxMywgMjM2LCAKKyAgICAxOTcsIDksIDEzLCAyMzYsIDE5NiwgOSwgMTMsIDIzNiwgMTk1LCA5LCAxMywgMjM2LCAxOTQsIDksIDEzLCAyMzYsIDE5MywgCisgICAgOSwgMTMsIDIzNiwgMTkyLCA5LCAxMywgMjM2LCAxOTEsIDksIDEzLCAyMzYsIDE5MCwgOSwgMTMsIDIzNiwgMTg5LCA5LCAKKyAgICAxMywgMjM2LCAxODgsIDksIDEzLCAyMzYsIDE4NywgOSwgMTMsIDIzNiwgMTg2LCA5LCAxMywgMjM2LCAxODUsIDksIDEzLCAKKyAgICAyMzYsIDE4NCwgOSwgMTMsIDIzNiwgMTgzLCA5LCAxMywgMjM2LCAxODIsIDksIDEzLCAyMzYsIDE4MSwgOSwgMTMsIDIzNiwgCisgICAgMTgwLCA5LCAxMywgMjM2LCAxNzksIDksIDEzLCAyMzYsIDE3OCwgOSwgMTMsIDIzNiwgMTc3LCA5LCAxMywgMjM2LCAxNzYsIAorICAgIDksIDEzLCAyMzYsIDE3NSwgOSwgMTMsIDIzNiwgMTc0LCA5LCAxMywgMjM2LCAxNzMsIDksIDEzLCAyMzYsIDE3MiwgOSwgCisgICAgMTMsIDIzNiwgMTcxLCA5LCAxMywgMjM2LCAxNzAsIDksIDEzLCAyMzYsIDE2OSwgOSwgMTMsIDIzNiwgMTY4LCA5LCAxMywgCisgICAgMjM2LCAxNjcsIDksIDEzLCAyMzYsIDE2NiwgOSwgMTMsIDIzNiwgMTY1LCA5LCAxMywgMjM2LCAxNjQsIDksIDEzLCAyMzYsIAorICAgIDE2MywgOSwgMTMsIDIzNiwgMTYyLCA5LCAxMywgMjM2LCAxNjEsIDksIDEzLCAyMzYsIDE2MCwgOSwgMTMsIDIzNiwgMTU5LCAKKyAgICA5LCAxMywgMjM2LCAxNTgsIDksIDEzLCAyMzYsIDE1NywgOSwgMTMsIDIzNiwgMTU2LCA5LCAxMywgMjM2LCAxNTUsIDksIAorICAgIDEzLCAyMzYsIDE1NCwgOSwgMTMsIDIzNiwgMTUzLCA5LCAxMywgMjM2LCAxNTIsIDksIDEzLCAyMzYsIDE1MSwgOSwgMTMsIAorICAgIDIzNiwgMTUwLCA5LCAxMywgMjM2LCAxNDksIDksIDEzLCAyMzYsIDE0OCwgOSwgMTMsIDIzNiwgMTQ3LCA5LCAxMywgMjM2LCAKKyAgICAxNDYsIDksIDEzLCAyMzYsIDE0NSwgOSwgMTMsIDIzNiwgMTQ0LCA5LCAxMywgMjM2LCAxNDMsIDksIDEzLCAyMzYsIDE0MiwgCisgICAgOSwgMTMsIDIzNiwgMTQxLCA5LCAxMywgMjM2LCAxNDAsIDksIDEzLCAyMzYsIDEzOSwgOSwgMTMsIDIzNiwgMTM4LCA5LCAKKyAgICAxMywgMjM2LCAxMzcsIDksIDEzLCAyMzYsIDEzNiwgOSwgMTMsIDIzNiwgMTM1LCA5LCAxMywgMjM2LCAxMzQsIDksIDEzLCAKKyAgICAyMzYsIDEzMywgOSwgMTMsIDIzNiwgMTMyLCA5LCAxMywgMjM2LCAxMzEsIDksIDEzLCAyMzYsIDEzMCwgOSwgMTMsIDIzNiwgCisgICAgMTI5LCA5LCAxMywgMjM2LCAxMjgsIDksIDEzLCAyMzYsIDEyNywgOSwgMTMsIDIzNiwgMTI2LCA5LCAxMywgMjM2LCAxMjUsIAorICAgIDksIDEzLCAyMzYsIDEyNCwgOSwgMTMsIDIzNiwgMTIzLCA5LCAxMywgMjM2LCAxMjIsIDksIDEzLCAyMzYsIDEyMSwgOSwgCisgICAgMTMsIDIzNiwgMTIwLCA5LCAxMywgMjM2LCAxMTksIDksIDEzLCAyMzYsIDExOCwgOSwgMTMsIDIzNiwgMTE3LCA5LCAxMywgCisgICAgMjM2LCAxMTYsIDksIDEzLCAyMzYsIDExNSwgOSwgMTMsIDIzNiwgMTE0LCA5LCAxMywgMjM2LCAxMTMsIDksIDEzLCAyMzYsIAorICAgIDExMiwgOSwgMTMsIDIzNiwgMTExLCA5LCAxMywgMjM2LCAxMTAsIDksIDEzLCAyMzYsIDEwOSwgOSwgMTMsIDIzNiwgMTA4LCAKKyAgICA5LCAxMywgMjM2LCAxMDcsIDksIDEzLCAyMzYsIDEwNiwgOSwgMTMsIDIzNiwgMTA1LCA5LCAxMywgMjM2LCAxMDQsIDksIAorICAgIDEzLCAyMzYsIDEwMywgOSwgMTMsIDIzNiwgMTAyLCA5LCAxMywgMjM2LCAxMDEsIDksIDEzLCAyMzYsIDEwMCwgOSwgMTMsIAorICAgIDIzNiwgOTksIDksIDEzLCAyMzYsIDk4LCA5LCAxMywgMjM2LCA5NywgOSwgMTMsIDIzNiwgOTYsIDksIDEzLCAyMzYsIDk1LCAKKyAgICA5LCAxMywgMjM2LCA5NCwgOSwgMTMsIDIzNiwgOTMsIDksIDEzLCAyMzYsIDkyLCA5LCAxMywgMjM2LCA5MSwgOSwgMTMsIAorICAgIDIzNiwgOTAsIDksIDEzLCAyMzYsIDg5LCA5LCAxMywgMjM2LCA4OCwgOSwgMTMsIDIzNiwgODcsIDksIDEzLCAyMzYsIDg2LCAKKyAgICA5LCAxMywgMjM2LCA4NSwgOSwgMTMsIDIzNiwgODQsIDksIDEzLCAyMzYsIDgzLCA5LCAxMywgMjM2LCA4MiwgOSwgMTMsIAorICAgIDIzNiwgODEsIDksIDEzLCAyMzYsIDgwLCA5LCAxMywgMjM2LCA3OSwgOSwgMTMsIDIzNiwgNzgsIDksIDEzLCAyMzYsIDc3LCAKKyAgICA5LCAxMywgMjM2LCA3NiwgOSwgMTMsIDIzNiwgNzUsIDksIDEzLCAyMzYsIDc0LCA5LCAxMywgMjM2LCA3MywgOSwgMTMsIAorICAgIDIzNiwgNzIsIDksIDEzLCAyMzYsIDcxLCA5LCAxMywgMjM2LCA3MCwgOSwgMTMsIDIzNiwgNjksIDksIDEzLCAyMzYsIDY4LCAKKyAgICA5LCAxMywgMjM2LCA2NywgOSwgMTMsIDIzNiwgNjYsIDksIDEzLCAyMzYsIDY1LCA5LCAxMywgMjM2LCA2NCwgOSwgMTMsIAorICAgIDIzNiwgNjMsIDksIDEzLCAyMzYsIDYyLCA5LCAxMywgMjM2LCA2MSwgOSwgMTMsIDIzNiwgNjAsIDcsIDMsIDI2LCAyNDQsIAorICAgIDk0LCA3LCAzLCAyNiwgMjQ0LCA5MCwgNywgMywgMjYsIDI0NCwgNDUsIDcsIDMsIDI2LCAyNDQsIDkzLCA3LCAzLCAyNiwgCisgICAgMjQ0LCA5MiwgNywgMywgMjYsIDE4NCwgMjIzLCA0LCAyMTgsIDk5LCA3LCAzLCAyNiwgMjE5LCAxMDcsIDE0MSwgMywgMjYsIAorICAgIDIzMSwgMTIzLCAyMjgsIDE1MCwgMTQxLCAzLCAyNiwgMjMxLCAxMjMsIDI0NSwgMTY5LCAxNDEsIDMsIDI2LCAyMzEsIDEyMywgCisgICAgMjM1LCAyMjQsIDE0MSwgMywgMjYsIDIxNCwgMTU3LCAyMjgsIDE1MCwgMTQxLCAzLCAyNiwgMjMxLCAxMjMsIDIxMywgMTQ4LCAKKyAgICA5MywgMSwgMjEyLCAyMjUsIDIsIDI0MSwgMTQ0LCA5MywgMjI1LCAxNDUsIDIzNSwgNTMsIDIxNCwgMjQzLCA5MywgMjYsIAorICAgIDIxMiwgMjUzLCAyMTIsIDIyNSwgMjEyLCAyMjUsIDIyNiwgMTEyLCA5MywgMSwgMjU0LCA0OCwgMjUzLCA3OCwgOTMsIDEsIAorICAgIDIxMywgMjMyLCAyNTQsIDc4LCA5MywgMSwgMjEzLCAyMzIsIDI0OCwgMTM0LCA5MywgMSwgMjEzLCAyMzIsIDI0MSwgMjIyLCAKKyAgICA5MywgMSwgMjEzLCAyMzIsIDIzNCwgMjU0LCA5MywgMSwgMjEzLCAyMzIsIDIzMywgMTE4LCA5MywgMSwgMjEzLCAyMzIsIAorICAgIDQwLCAyMzEsIDEyOSwgOTMsIDEsIDIxMywgMjMyLCAyMjMsIDIxOSwgOTMsIDEsIDIxMywgMjMyLCAyMTcsIDI0NSwgOTMsIAorICAgIDEsIDI1NCwgNDgsIDk0LCA1MiwgOTMsIDEsIDIyMCwgMjAxLCAyLCAyMjAsIDIwMSwgMjQ3LCA3NCwgOTMsIDEsIDIyMCwgCisgICAgMjAxLCAyLCAyMjAsIDg1LCAyNDcsIDc0LCA5MywgMSwgMjIwLCAyMDEsIDIsIDI0OCwgMTUxLCAyNCwgMjIwLCAyMDEsIAorICAgIDI0NywgNzQsIDkzLCAxLCAyMjAsIDIwMSwgMiwgMjQ4LCAxNTEsIDI0LCAyMjAsIDg1LCAyNDcsIDc0LCA5MywgMSwgMTA2LCAKKyAgICAyLCAyMjYsIDExMiwgOTMsIDEsIDEwNiwgMiwgMjI0LCAyMjAsIDkzLCAxLCAxMDYsIDIsIDIzMSwgMjM0LCA5MywgMSwgCisgICAgMjUxLCAyMDYsIDIsIDI0OCwgMTUwLCA5MywgMSwgMjQyLCAxNzgsIDIsIDI0OCwgMTUwLCA5MywgMSwgMjQ4LCAxMzUsIDIsIAorICAgIDI0OCwgMTUwLCA5MywgMSwgMjQxLCAyMjMsIDIsIDIzMSwgMjM0LCA5MywgMSwgMjE0LCAyMzcsIDIsIDI0OCwgMTUwLCA5MywgCisgICAgMSwgMjEyLCA5MSwgMiwgMjQ4LCAxNTAsIDkzLCAxLCAyMTcsIDE4NCwgMiwgMjQ4LCAxNTAsIDkzLCAxLCAyMTIsIDIyNSwgCisgICAgMiwgMjQ4LCAxNTAsIDkzLCAxLCA0MCwgMjM0LCAyNTUsIDIsIDI0OCwgMTUwLCA5MywgMSwgMjM0LCAyNTUsIDIsIDI0OCwgCisgICAgMTUwLCA5MywgMSwgMjMzLCAxMTksIDIsIDI0OCwgMTUwLCA5MywgMSwgMjMxLCAxMzAsIDIsIDI0OCwgMTUwLCA5MywgMSwgCisgICAgMjI4LCA1MSwgMiwgMjQ4LCAxNTAsIDkzLCAxLCAyMjIsIDE2NSwgMiwgMjQ4LCAxNTAsIDkzLCAxLCA0MCwgMjI2LCA5NywgCisgICAgMiwgMjQ4LCAxNTAsIDkzLCAxLCAyMjYsIDk3LCAyLCAyNDgsIDE1MCwgOTMsIDEsIDIxNiwgMTM4LCAyLCAyNDgsIDE1MCwgCisgICAgOTMsIDEsIDIyNCwgMTg1LCAyLCAyNDgsIDE1MCwgOTMsIDEsIDIyMywgMjIwLCAyLCAyNDgsIDE1MCwgOTMsIDEsIDIyMCwgCisgICAgMjAxLCAyLCAyNDgsIDE1MCwgOTMsIDEsIDIxNywgMjQ2LCAyLCAyNDgsIDE1MCwgOTMsIDEsIDIxNCwgMjM3LCAyLCAyNDEsIAorICAgIDQ3LCA5MywgMSwgMjUxLCAyMDYsIDIsIDIyNCwgNTksIDkzLCAxLCAyMzQsIDI1NSwgMiwgMjI0LCA1OSwgOTMsIDEsIDIyNiwgCisgICAgOTcsIDIsIDIyNCwgNTksIDkzLCAyNiwgMTA2LCAyMzMsIDExOCwgMTIsIDEsIDEwNiwgMjE0LCAzMSwgNDgsIDE3LCAxMiwgCisgICAgMSwgMTA2LCAyMTQsIDMxLCA0MCwgMTcsIDEyLCAxLCAyNTEsIDI0MSwgNDgsIDE3LCAxMiwgMSwgMjUxLCAyNDEsIDQwLCAKKyAgICAxNywgMTIsIDEsIDI1MSwgMjQxLCA3MCwgMTcsIDEyLCAxLCAyNTEsIDI0MSwgMTM4LCAxNywgMTIsIDEsIDIyNiwgODEsIAorICAgIDQ4LCAxNywgMTIsIDEsIDIyNiwgODEsIDQwLCAxNywgMTIsIDEsIDIyNiwgODEsIDcwLCAxNywgMTIsIDEsIDIyNiwgODEsIAorICAgIDEzOCwgMTcsIDEyLCAxLCAyNTEsIDIyOSwgNDgsIDE3LCAxMiwgMSwgMjUxLCAyMjksIDQwLCAxNywgMTIsIDEsIDI1MSwgCisgICAgMjI5LCA3MCwgMTcsIDEyLCAxLCAyNTEsIDIyOSwgMTM4LCAxNywgMTIsIDEsIDIxNiwgMTA4LCA0OCwgMTcsIDEyLCAxLCAKKyAgICAyMTYsIDEwOCwgNDAsIDE3LCAxMiwgMSwgMjE2LCAxMDgsIDcwLCAxNywgMTIsIDEsIDIxNiwgMTA4LCAxMzgsIDE3LCAxMiwgCisgICAgMSwgMjE3LCAyMTQsIDQ4LCAxNywgMTIsIDEsIDIxNywgMjE0LCA0MCwgMTcsIDEyLCAxLCAyMTcsIDIxNCwgNzAsIDE3LCAKKyAgICAxMiwgMSwgMjE3LCAyMTQsIDEzOCwgMTcsIDEyLCAxLCAyMTYsIDExMCwgNDgsIDE3LCAxMiwgMSwgMjE2LCAxMTAsIDQwLCAKKyAgICAxNywgMTIsIDEsIDIxNiwgMTEwLCA3MCwgMTcsIDEyLCAxLCAyMTYsIDExMCwgMTM4LCAxNywgMTIsIDEsIDIxNCwgMjI2LCAKKyAgICA0OCwgMTcsIDEyLCAxLCAyMTQsIDIyNiwgNDAsIDE3LCAxMiwgMSwgMjE0LCAyMjYsIDcwLCAxNywgMTIsIDEsIDIxNCwgCisgICAgMjI2LCAxMzgsIDE3LCAxMiwgMSwgMjI2LCA3OSwgNDgsIDE3LCAxMiwgMSwgMjI2LCA3OSwgNDAsIDE3LCAxMiwgMSwgMjI2LCAKKyAgICA3OSwgNzAsIDE3LCAxMiwgMSwgMjI2LCA3OSwgMTM4LCAxNywgMTIsIDEsIDI0NSwgMjU1LCA0OCwgMTcsIDEyLCAxLCAyNDUsIAorICAgIDI1NSwgNDAsIDE3LCAxMiwgMSwgMjQ1LCAyNTUsIDcwLCAxNywgMTIsIDEsIDI0NSwgMjU1LCAxMzgsIDE3LCAxMiwgMSwgCisgICAgMjI4LCAxNSwgNDgsIDE3LCAxMiwgMSwgMjI4LCAxNSwgNDAsIDE3LCAxMiwgMSwgMjI4LCAxNSwgNzAsIDE3LCAxMiwgMSwgCisgICAgMjI4LCAxNSwgMTM4LCAxNywgMTIsIDEsIDIxNywgMjM0LCA0OCwgMTcsIDEyLCAxLCAyMTcsIDIzNCwgNDAsIDE3LCAxMiwgCisgICAgMSwgMjE3LCAyMzQsIDcwLCAxNywgMTIsIDEsIDIxNywgMjM0LCAxMzgsIDE3LCAxMiwgMSwgMjE3LCAyMzIsIDQ4LCAxNywgCisgICAgMTIsIDEsIDIxNywgMjMyLCA0MCwgMTcsIDEyLCAxLCAyMTcsIDIzMiwgNzAsIDE3LCAxMiwgMSwgMjE3LCAyMzIsIDEzOCwgCisgICAgMTcsIDEyLCAxLCAyNDgsIDg0LCA0OCwgMTcsIDEyLCAxLCAyNDgsIDg0LCA0MCwgMTcsIDEyLCAxLCAyNDgsIDE0NywgNDgsIAorICAgIDE3LCAxMiwgMSwgMjQ4LCAxNDcsIDQwLCAxNywgMTIsIDEsIDI0NiwgMjYsIDQ4LCAxNywgMTIsIDEsIDI0NiwgMjYsIDQwLCAKKyAgICAxNywgMTIsIDEsIDI0OCwgODIsIDQ4LCAxNywgMTIsIDEsIDI0OCwgODIsIDQwLCAxNywgMTIsIDEsIDIzNSwgMTIyLCA0OCwgCisgICAgMTcsIDEyLCAxLCAyMzUsIDEyMiwgNDAsIDE3LCAxMiwgMSwgMjIzLCA3OCwgNDgsIDE3LCAxMiwgMSwgMjIzLCA3OCwgNDAsIAorICAgIDE3LCAxMiwgMSwgMjM0LCAxODEsIDQ4LCAxNywgMTIsIDEsIDIzNCwgMTgxLCA0MCwgMTcsIDEyLCAxLCAyMzQsIDE4MSwgCisgICAgNzAsIDE3LCAxMiwgMSwgMjM0LCAxODEsIDEzOCwgMTcsIDEyLCAxLCAyNDMsIDk4LCA0OCwgMTcsIDEyLCAxLCAyNDMsIDk4LCAKKyAgICA0MCwgMTcsIDEyLCAxLCAyNDMsIDk4LCA3MCwgMTcsIDEyLCAxLCAyNDMsIDk4LCAxMzgsIDE3LCAxMiwgMSwgMjQyLCA4MywgCisgICAgNDgsIDE3LCAxMiwgMSwgMjQyLCA4MywgNDAsIDE3LCAxMiwgMSwgMjQyLCA4MywgNzAsIDE3LCAxMiwgMSwgMjQyLCA4MywgCisgICAgMTM4LCAxNywgMTIsIDEsIDIyOSwgODksIDQ4LCAxNywgMTIsIDEsIDIyOSwgODksIDQwLCAxNywgMTIsIDEsIDIyOSwgODksIAorICAgIDcwLCAxNywgMTIsIDEsIDIyOSwgODksIDEzOCwgMTcsIDEyLCAxLCAyMjgsIDE3NCwgMjQyLCAxOTUsIDQ4LCAxNywgMTIsIAorICAgIDEsIDIyOCwgMTc0LCAyNDIsIDE5NSwgNDAsIDE3LCAxMiwgMSwgMjIzLCAxMTYsIDQ4LCAxNywgMTIsIDEsIDIyMywgMTE2LCAKKyAgICA0MCwgMTcsIDEyLCAxLCAyMjMsIDExNiwgNzAsIDE3LCAxMiwgMSwgMjIzLCAxMTYsIDEzOCwgMTcsIDEyLCAxLCAyNDEsIAorICAgIDIwMywgMiwgNzMsIDc4LCA0OCwgMTcsIDEyLCAxLCAyNDEsIDIwMywgMiwgNzMsIDc4LCA0MCwgMTcsIDEyLCAxLCAyNDEsIAorICAgIDIwMywgMjQyLCAxNDgsIDQ4LCAxNywgMTIsIDEsIDI0MSwgMjAzLCAyNDIsIDE0OCwgNDAsIDE3LCAxMiwgMSwgMjQxLCAKKyAgICAyMDMsIDI0MiwgMTQ4LCA3MCwgMTcsIDEyLCAxLCAyNDEsIDIwMywgMjQyLCAxNDgsIDEzOCwgMTcsIDEyLCAxLCAyNDEsIAorICAgIDIwMywgMjQ3LCA5NiwgNDgsIDE3LCAxMiwgMSwgMjQxLCAyMDMsIDI0NywgOTYsIDQwLCAxNywgMTIsIDEsIDI0MSwgMjAzLCAKKyAgICAyNDcsIDk2LCA3MCwgMTcsIDEyLCAxLCAyNDEsIDIwMywgMjQ3LCA5NiwgMTM4LCAxNywgMTIsIDEsIDczLCAyNTIsIDUzLCAKKyAgICA0OCwgMTcsIDEyLCAxLCA3MywgMjUyLCA1MywgNDAsIDE3LCAxMiwgMSwgNzMsIDI1MiwgNTMsIDIsIDE5MiwgNzgsIDQ4LCAKKyAgICAxNywgMTIsIDEsIDczLCAyNTIsIDUzLCAyLCAxOTIsIDc4LCA0MCwgMTcsIDEyLCAxNiwgNjIsIDQ5LCAxMiwgMTYsIDYyLCAKKyAgICA1NSwgMTIsIDE2LCAxMTcsIDE3NiwgNDksIDEyLCAxNiwgMTE3LCAxNzYsIDU1LCAxMiwgMTYsIDEzMywgMTc2LCA0OSwgMTIsIAorICAgIDE2LCAxMzMsIDE3NiwgNTUsIDEyLCAxNiwgMTMzLCAxNzYsIDIyNSwgMTQxLCAyNDYsIDU4LCA0OSwgMTIsIDE2LCAxMzMsIAorICAgIDE3NiwgMjI1LCAxNDEsIDI0NiwgNTgsIDU1LCAxMiwgMTYsIDI0MywgMjM3LCAxNzYsIDQ5LCAxMiwgMTYsIDI0MywgMjM3LCAKKyAgICAxNzYsIDU1LCAxMiwgMTYsIDUxLCA3MSwgMjUyLCA2MCwgNTUsIDEyLCAxNiwgMTE3LCAxNzYsIDIxNCwgMTY2LCA0OSwgMTIsIAorICAgIDE2LCAxMTcsIDE3NiwgMjE0LCAxNjYsIDU1LCAxMiwgMTYsIDIyMywgMTMwLCAxMiwgMTYsIDMsIDIxOCwgMzAsIDQ5LCAxMiwgCisgICAgMTYsIDMsIDIxOCwgMzAsIDU1LCAxMiwgMSwgMjI5LCAxNjIsIDQ4LCAxNywgMTIsIDEsIDIyOSwgMTYyLCA0MCwgMTcsIDEyLCAKKyAgICAxLCAyMjksIDE2MiwgNzAsIDE3LCAxMiwgMSwgMjI5LCAxNjIsIDEzOCwgMTcsIDEyLCAxLCAxMTEsIDQ4LCAxNywgMTIsIDEsIAorICAgIDExMSwgNDAsIDE3LCAxMiwgMSwgMjI3LCAxMDAsIDQ4LCAxNywgMTIsIDEsIDIyNywgMTAwLCA0MCwgMTcsIDEyLCAxLCAKKyAgICAyMTIsIDIwNCwgNDgsIDE3LCAxMiwgMSwgMjEyLCAyMDQsIDQwLCAxNywgMTIsIDEsIDExMSwgMiwgMTkyLCA3OCwgNDgsIAorICAgIDE3LCAxMiwgMSwgMjE0LCAyMzMsIDQ4LCAxNywgMTIsIDEsIDIxNCwgMjMzLCA0MCwgMTcsIDEyLCAxLCAyMzQsIDgyLCAKKyAgICAyMjcsIDEwMCwgNDgsIDE3LCAxMiwgMSwgMjM0LCA4MiwgMjI3LCAxMDAsIDQwLCAxNywgMTIsIDEsIDIzNCwgODIsIDIxMiwgCisgICAgMjA0LCA0OCwgMTcsIDEyLCAxLCAyMzQsIDgyLCAyMTIsIDIwNCwgNDAsIDE3LCAxMiwgMSwgMTkxLCA0OCwgMTcsIDEyLCAxLCAKKyAgICAxOTEsIDQwLCAxNywgMTIsIDEsIDE5MSwgNzAsIDE3LCAxMiwgMSwgMTkxLCAxMzgsIDE3LCAxMiwgMSwgMjE1LCAxNzcsIAorICAgIDIzNCwgMTkyLCAyMzQsIDgyLCAxMDYsIDIxMCwgNzAsIDE3LCAxMiwgMSwgMjE1LCAxNzcsIDIzNCwgMTkyLCAyMzQsIDgyLCAKKyAgICAxMDYsIDIxMCwgMTM4LCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMTA2LCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIAorICAgIDE5MiwgNzgsIDIsIDEwNiwgNDAsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAyNTQsIDE0OSwgNDgsIDE3LCAxMiwgCisgICAgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAyNTQsIDE0OSwgNDAsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAyMTQsIAorICAgIDE1LCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDIxNCwgMTUsIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgCisgICAgMTkyLCA3OCwgMiwgMTExLCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDExMSwgNDAsIDE3LCAxMiwgMjYsIAorICAgIDczLCAyLCAxOTIsIDc4LCAyLCAyMjcsIDEwMCwgNDgsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAyMjcsIDEwMCwgCisgICAgNDAsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAyMTIsIDIwNCwgNDgsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIAorICAgIDc4LCAyLCAyMTIsIDIwNCwgNDAsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAxOTEsIDQ4LCAxNywgMTIsIDI2LCAKKyAgICA3MywgMiwgMTkyLCA3OCwgMiwgMTkxLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDE5MSwgNzAsIDE3LCAKKyAgICAxMiwgMjYsIDIxNSwgMTc3LCAyMzQsIDgyLCA3MywgMiwgMTkyLCA3OCwgMiwgMTA2LCAyMTAsIDQ4LCAxNywgMTIsIDI2LCAKKyAgICAyMTUsIDE3NywgMjM0LCA4MiwgNzMsIDIsIDE5MiwgNzgsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjE1LCAxNzcsIAorICAgIDIzNCwgODIsIDczLCAyLCAxOTIsIDc4LCAyLCAxMDYsIDIxMCwgNzAsIDE3LCAxMiwgMSwgMjQ0LCAxMzYsIDczLCA0OCwgCisgICAgMTcsIDEyLCAxLCAyNDQsIDEzNiwgNzMsIDQwLCAxNywgMTIsIDEsIDI0NCwgMTM2LCA3MywgNzAsIDE3LCAxMiwgMSwgMjQ0LCAKKyAgICAxMzYsIDczLCAxMzgsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCA3MywgMiwgCisgICAgMTkyLCA3OCwgMiwgMTIxLCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgCisgICAgNzMsIDIsIDE5MiwgNzgsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDczLCA0OCwgCisgICAgMTcsIDEyLCAyNiwgMjUxLCAyMzEsIDIsIDE0NSwgNDgsIDE3LCAxMiwgMjYsIDI1MSwgMjMxLCAyLCAxMjEsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyNTEsIDIzMSwgMiwgMjM0LCAxMzYsIDQ4LCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgNjMsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyNTEsIDIzMSwgMiwgMTA2LCAyMTAsIDQ4LCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgNzMsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyMTcsIDIxNiwgMiwgMTQ1LCA0OCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDEyMSwgNDgsIDE3LCAxMiwgCisgICAgMjYsIDIxNywgMjE2LCAyLCAyMzQsIDEzNiwgNDgsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCA2MywgNDgsIDE3LCAxMiwgCisgICAgMjYsIDIxNywgMjE2LCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCA3MywgNDgsIDE3LCAxMiwgCisgICAgMjYsIDIxNywgMTQ2LCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAKKyAgICAyMTcsIDE0NiwgMiwgMTA2LCAyMTAsIDQ4LCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAKKyAgICAxNDUsIDIsIDEyMSwgNDgsIDE3LCAxMiwgMjYsIDE0NSwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAxMjEsIDIsIDE0NSwgNDgsIAorICAgIDE3LCAxMiwgMjYsIDEyMSwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyMzQsIDEzNiwgMiwgMTQ1LCA0OCwgMTcsIDEyLCAyNiwgCisgICAgMjM0LCAxMzYsIDIsIDEyMSwgNDgsIDE3LCAxMiwgMjYsIDIzNCwgMTM2LCAyLCA2MywgNDgsIDE3LCAxMiwgMjYsIDIyMiwgCisgICAgODYsIDIsIDE0NSwgNDgsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDEyMSwgNDgsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIAorICAgIDIzNCwgMTM2LCA0OCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyMjIsIDE5NiwgMiwgCisgICAgMTIxLCA0OCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgMjQ4LCAxNjAsIDIsIDE0NSwgCisgICAgNDgsIDE3LCAxMiwgMjYsIDI0OCwgMTYwLCAyLCAxMjEsIDQ4LCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgMjM0LCAxMzYsIAorICAgIDQ4LCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyMTgsIDMwLCAyLCAxMjEsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyMTgsIDMwLCAyLCA2MywgNDgsIDE3LCAxMiwgMjYsIDIxMiwgMTA1LCAyLCA2MywgNDgsIDE3LCAxMiwgMjYsIAorICAgIDI1NCwgMTA0LCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCAyNTQsIDEwNCwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyNDIsIAorICAgIDIyMSwgMiwgMTQ1LCA0OCwgMTcsIDEyLCAyNiwgMjQyLCAyMjEsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgMjQ0LCAxMTIsIAorICAgIDIsIDE0NSwgNDgsIDE3LCAxMiwgMjYsIDI0NCwgMTEyLCAyLCAxMjEsIDQ4LCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgCisgICAgMjM0LCAxMzYsIDQ4LCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgCisgICAgMTA2LCAyMTAsIDQ4LCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAyMjQsIDIyNiwgMiwgCisgICAgMTIxLCA0OCwgMTcsIDEyLCAyNiwgMjI0LCAyMjYsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgMjI0LCAyMjYsIDIsIDEwNiwgCisgICAgMjEwLCA0OCwgMTcsIDEyLCAyNiwgMjI0LCAyMjYsIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDEwNiwgCisgICAgNDgsIDE3LCAxMiwgMjYsIDIzNCwgMjU1LCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCAyMzQsIDI1NSwgMiwgMTIxLCA0OCwgCisgICAgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzNCwgMTM2LCA0OCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzMywgMTI3LCAKKyAgICA0OCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDEwNiwgMjEwLCAKKyAgICA0OCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDE0NSwgNDgsIAorICAgIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMjEsIDQ4LCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMjM0LCAxMzYsIDQ4LCAKKyAgICAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgNjMsIDQ4LCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMTA2LCAyMTAsIDQ4LCAKKyAgICAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCA2MywgMiwgMTQ1LCA0OCwgMTcsIDEyLCAyNiwgCisgICAgNjMsIDIsIDEyMSwgNDgsIDE3LCAxMiwgMjYsIDYzLCAyLCAyMzQsIDEzNiwgNDgsIDE3LCAxMiwgMjYsIDYzLCAyLCA2MywgCisgICAgNDgsIDE3LCAxMiwgMjYsIDYzLCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDYzLCAyLCA3MywgNDgsIDE3LCAxMiwgCisgICAgMjYsIDIyOCwgMTc0LCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCAyMjgsIDE3NCwgMiwgMTIxLCA0OCwgMTcsIDEyLCAyNiwgCisgICAgMjI4LCAxNzQsIDIsIDIzNCwgMTM2LCA0OCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgCisgICAgMjI4LCAxNzQsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgCisgICAgMjQxLCAyMDMsIDIsIDE0NSwgNDgsIDE3LCAxMiwgMjYsIDI0MSwgMjAzLCAyLCA2MywgNDgsIDE3LCAxMiwgMjYsIDI0MSwgCisgICAgMjAzLCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDI0MSwgMjAzLCAyLCA3MywgNDgsIDE3LCAxMiwgMjYsIDczLCAyLCAKKyAgICAxNDUsIDQ4LCAxNywgMTIsIDI2LCA3MywgMiwgMTIxLCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDIzNCwgMTM2LCA0OCwgMTcsIAorICAgIDEyLCAyNiwgNzMsIDIsIDYzLCA0OCwgMTcsIDEyLCAyNiwgNzMsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIDEyLCAyNiwgNzMsIAorICAgIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgMjE3LCAxNTYsIDIsIDIxOCwgMjIzLCAxMDYsIDQ4LCAxNywgMTIsIDI2LCAyMjMsIAorICAgIDI0NiwgMiwgMjE4LCAyMjMsIDEwNiwgNDgsIDE3LCAxMiwgMjYsIDEwNiwgMjEwLCAyLCAyMTgsIDIyMywgMTA2LCA0OCwgCisgICAgMTcsIDEyLCAyNiwgMjIxLCAxNiwgMiwgMjQ4LCAxMjgsIDQ4LCAxNywgMTIsIDI2LCAyMjEsIDE2LCAyLCAyMzQsIDIwOSwgCisgICAgNDgsIDE3LCAxMiwgMjYsIDIyMSwgMTYsIDIsIDI0NCwgMTM0LCA0OCwgMTcsIDEyLCAyNiwgMjIxLCAxNiwgMiwgMjQ4LCAKKyAgICAxMzAsIDQ4LCAxNywgMTIsIDI2LCAyMjEsIDE2LCAyLCAyMzQsIDIxMSwgNDgsIDE3LCAxMiwgMjYsIDIyMSwgMTYsIDIsIAorICAgIDIxOCwgMjIzLCAxMDYsIDQ4LCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMjIzLCAyNDYsIDQwLCAxNywgMTIsIAorICAgIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMjEyLCAxMDIsIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgNjMsIAorICAgIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMjI4LCAxNzQsIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCAKKyAgICA3OCwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyNTEsIDIzMSwgMiwgMjIzLCAyNDYsIDQwLCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgMjEyLCAxMDIsIDQwLCAxNywgMTIsIAorICAgIDI2LCAyNTEsIDIzMSwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgMjI4LCAxNzQsIDQwLCAxNywgMTIsIAorICAgIDI2LCAyNTEsIDIzMSwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgNzMsIDQwLCAxNywgMTIsIAorICAgIDI2LCAyMTcsIDIxNiwgMiwgMjIzLCAyNDYsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDIxNiwgMiwgMjEyLCAxMDIsIDQwLCAxNywgCisgICAgMTIsIDI2LCAyMTcsIDIxNiwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDIxNiwgMiwgMjI4LCAxNzQsIDQwLCAxNywgCisgICAgMTIsIDI2LCAyMTcsIDIxNiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDIxNiwgMiwgNzMsIDQwLCAxNywgCisgICAgMTIsIDI2LCAyMTcsIDE0NiwgMiwgMjIzLCAyNDYsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgMjEyLCAxMDIsIDQwLCAKKyAgICAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgMjI4LCAxNzQsIDQwLCAKKyAgICAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgNzMsIDQwLCAKKyAgICAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgNzMsIDQwLCAKKyAgICAxNywgMTIsIDI2LCAyMjQsIDIyNiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMjQsIDIyNiwgMiwgNzMsIDQwLCAKKyAgICAxNywgMTIsIDI2LCAyMzQsIDI1NSwgMiwgMTA2LCA0MCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzMywgMTI3LCA0MCwgCisgICAgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDEwNiwgMjEwLCA0MCwgCisgICAgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDYzLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMjMzLCAxMjcsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDczLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgNjMsIDIsIDEwNiwgNDAsIDE3LCAxMiwgMjYsIDYzLCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAKKyAgICAyMjMsIDI0NiwgNDAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAyMTIsIDEwMiwgNDAsIDE3LCAxMiwgMjYsIDIyOCwgCisgICAgMTc0LCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAyMjgsIDE3NCwgNDAsIDE3LCAxMiwgMjYsIDIyOCwgCisgICAgMTc0LCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDEwNiwgCisgICAgMjEwLCAyLCAyMTgsIDIyMywgMTA2LCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDIyMywgMjQ2LCA0MCwgMTcsIDEyLCAyNiwgCisgICAgNzMsIDIsIDIxMiwgMTAyLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDIyOCwgCisgICAgMTc0LCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDczLCA0MCwgMTcsIAorICAgIDEyLCAyNiwgNzMsIDIsIDE5MiwgNzgsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDczLCAyLCAxOTIsIDc4LCAyLCAxMjEsIAorICAgIDcwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCAKKyAgICA3OCwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgMjQxLCAyMDMsIDcwLCAxNywgMTIsIDI2LCAKKyAgICAyNTEsIDIzMSwgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgMjUxLCAyMzEsIDIsIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDI1MSwgCisgICAgMjMxLCAyLCAyMzQsIDEzNiwgNzAsIDE3LCAxMiwgMjYsIDI1MSwgMjMxLCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDI1MSwgCisgICAgMjMxLCAyLCAyNDEsIDIwMywgNzAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAxNDUsIDcwLCAxNywgMTIsIDI2LCAyMTcsIAorICAgIDIxNiwgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAKKyAgICAyMTYsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDI0MSwgMjAzLCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAKKyAgICAxNDYsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMTQ1LCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCAxNDUsIDIsIDYzLCA3MCwgCisgICAgMTcsIDEyLCAyNiwgMTIxLCAyLCAxNDUsIDcwLCAxNywgMTIsIDI2LCAxMjEsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjM0LCAKKyAgICAxMzYsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDIzNCwgMTM2LCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIAorICAgIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDIzNCwgCisgICAgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyMjIsIDE5NiwgMiwgMTIxLCAKKyAgICA3MCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIDYzLCAKKyAgICA3MCwgMTcsIDEyLCAyNiwgMjQ4LCAxNjAsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDI0OCwgMTYwLCAyLCAxMjEsIDcwLCAKKyAgICAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgNjMsIDcwLCAKKyAgICAxNywgMTIsIDI2LCAyMTgsIDMwLCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCAyMTIsIDEwNSwgMiwgNjMsIDcwLCAxNywgMTIsIAorICAgIDI2LCAyNTQsIDEwNCwgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgMjU0LCAxMDQsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgCisgICAgMjQyLCAyMjEsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDI0MiwgMjIxLCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDI0NCwgCisgICAgMTEyLCAyLCAxNDUsIDcwLCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMjQ0LCAxMTIsIAorICAgIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjQ0LCAxMTIsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjI0LCAyMjYsIAorICAgIDIsIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDIyNCwgMjI2LCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIzNCwgMjU1LCAyLCAKKyAgICAxNDUsIDcwLCAxNywgMTIsIDI2LCAyMzQsIDI1NSwgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzNCwgCisgICAgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzMywgMTI3LCA3MCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIAorICAgIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMjEsIAorICAgIDcwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgNjMsIAorICAgIDcwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMjQxLCAyMDMsIDcwLCAxNywgMTIsIDI2LCA2MywgMiwgMTQ1LCA3MCwgCisgICAgMTcsIDEyLCAyNiwgNjMsIDIsIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDYzLCAyLCAyMzQsIDEzNiwgNzAsIDE3LCAxMiwgMjYsIAorICAgIDYzLCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAxNDUsIDcwLCAxNywgMTIsIDI2LCAyMjgsIDE3NCwgMiwgCisgICAgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIAorICAgIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDI0MSwgMjAzLCA3MCwgMTcsIDEyLCAyNiwgMjQxLCAyMDMsIDIsIAorICAgIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDI0MSwgMjAzLCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDI0MSwgMjAzLCAyLCAyMTgsIAorICAgIDIyMywgMTA2LCA3MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDczLCAyLCAxMjEsIDcwLCAxNywgCisgICAgMTIsIDI2LCA3MywgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCA3MywgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCA3MywgCisgICAgMiwgMjQxLCAyMDMsIDcwLCAxNywgMTIsIDI2LCA3MywgMiwgMTkyLCA3OCwgMiwgNjMsIDEzOCwgMTcsIDEyLCAyNiwgNzMsIAorICAgIDIsIDE5MiwgNzgsIDIsIDI0MSwgMjAzLCAxMzgsIDE3LCAxMiwgMjYsIDI1MSwgMjMxLCAyLCA2MywgMTM4LCAxNywgMTIsIAorICAgIDI2LCAyNTEsIDIzMSwgMiwgMjQxLCAyMDMsIDEzOCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDYzLCAxMzgsIDE3LCAxMiwgCisgICAgMjYsIDIxNywgMjE2LCAyLCAyNDEsIDIwMywgMTM4LCAxNywgMTIsIDI2LCAyMTcsIDE0NiwgMiwgNjMsIDEzOCwgMTcsIDEyLCAKKyAgICAyNiwgMjE3LCAxNDYsIDIsIDI0MSwgMjAzLCAxMzgsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDYzLCAxMzgsIDE3LCAxMiwgCisgICAgMjYsIDIyMiwgODYsIDIsIDI0MSwgMjAzLCAxMzgsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCA2MywgMTM4LCAxNywgMTIsIAorICAgIDI2LCAyMjAsIDI0MCwgMiwgMjQxLCAyMDMsIDEzOCwgMTcsIDEyLCAyNiwgMjM0LCAyNTUsIDIsIDIzMywgMTI3LCAxMzgsIAorICAgIDE3LCAxMiwgMjYsIDIzNCwgMjU1LCAyLCA2MywgMTM4LCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgNjMsIDEzOCwgMTcsIAorICAgIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDYzLCAxMzgsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAyNDEsIDIwMywgMTM4LCAxNywgCisgICAgMTIsIDI2LCA3MywgMiwgNjMsIDEzOCwgMTcsIDEyLCAyNiwgNzMsIDIsIDI0MSwgMjAzLCAxMzgsIDE3LCAxMiwgMjYsIAorICAgIDIyMSwgMTYsIDIsIDI0NCwgMTM0LCAxMzgsIDE3LCAxMiwgMjYsIDIyMSwgMTYsIDIsIDI0OCwgMTMwLCAxMzgsIDE3LCAxMiwgCisgICAgMjYsIDIyMSwgMTYsIDIsIDIzNCwgMjExLCAxMzgsIDE3LCAxMiwgMjYsIDIxOCwgMzAsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIAorICAgIDEyLCAyNiwgMjE4LCAzMCwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAyNTQsIDEwNCwgMiwgMTA2LCAyMTAsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyNTQsIDEwNCwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAyNDIsIDIyMSwgMiwgMTA2LCAyMTAsIDQ4LCAxNywgCisgICAgMTIsIDI2LCAyNDIsIDIyMSwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAKKyAgICAxMiwgMjYsIDIyMiwgODYsIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIAorICAgIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDczLCA0OCwgMTcsIDEyLCAyNiwgMTIxLCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgCisgICAgMjYsIDEyMSwgMiwgNzMsIDQ4LCAxNywgMTIsIDI2LCAxNDUsIDIsIDEwNiwgMjEwLCA0OCwgMTcsIDEyLCAyNiwgMTQ1LCAyLCAKKyAgICA3MywgNDgsIDE3LCAxMiwgMjYsIDIzNCwgMTM2LCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDIzNCwgMTM2LCAyLCAKKyAgICA3MywgNDgsIDE3LCAxMiwgMjYsIDIyMiwgMTk2LCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDIyMiwgMTk2LCAyLCAKKyAgICA3MywgNDgsIDE3LCAxMiwgMjYsIDI0OCwgMTYwLCAyLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMjYsIDI0OCwgMTYwLCAyLCAKKyAgICA3MywgNDgsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAxNDUsIDQ4LCAxNywgMTIsIDI2LCAyMjAsIDI0MCwgMiwgMTIxLCAKKyAgICA0OCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDIzNCwgMTM2LCA0OCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDYzLCAKKyAgICA0OCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDIyMywgMjQ2LCA0OCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgMjIzLCAKKyAgICAyNDYsIDQ4LCAxNywgMTIsIDI2LCAyMjIsIDE5NiwgMiwgMjIzLCAyNDYsIDQ4LCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgCisgICAgMjIzLCAyNDYsIDQ4LCAxNywgMTIsIDI2LCAyMTgsIDMwLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDIxOCwgMzAsIAorICAgIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjU0LCAxMDQsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjU0LCAxMDQsIAorICAgIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjQyLCAyMjEsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjQyLCAyMjEsIAorICAgIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCAKKyAgICA3MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAKKyAgICA3MywgNDAsIDE3LCAxMiwgMjYsIDEyMSwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAxMjEsIDIsIDczLCA0MCwgMTcsIAorICAgIDEyLCAyNiwgMTQ1LCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDE0NSwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyMzQsIDEzNiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMzQsIDEzNiwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyMjIsIDE5NiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMjIsIDE5NiwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyNDgsIDE2MCwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyMjAsIDI0MCwgMiwgMTQ1LCA0MCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDEyMSwgNDAsIDE3LCAxMiwgMjYsIDIyMCwgCisgICAgMjQwLCAyLCAyMzQsIDEzNiwgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgCisgICAgMjQwLCAyLCAyMjMsIDI0NiwgNDAsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDIyMywgMjQ2LCA0MCwgMTcsIDEyLCAyNiwgCisgICAgMjIyLCAxOTYsIDIsIDIyMywgMjQ2LCA0MCwgMTcsIDEyLCAyNiwgMjQ4LCAxNjAsIDIsIDIyMywgMjQ2LCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMjIwLCAyNDAsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCAKKyAgICAyMjAsIDI0MCwgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCAyMjAsIDI0MCwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAKKyAgICAyMjIsIDg2LCAyLCAyNDEsIDIwMywgNzAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAyNDEsIDIwMywgNzAsIDE3LCAxMiwgCisgICAgMjYsIDIxOCwgMzAsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgMTQ1LCAxMzgsIDE3LCAxMiwgMjYsIAorICAgIDIyMiwgODYsIDIsIDEyMSwgMTM4LCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCAyMzQsIDEzNiwgMTM4LCAxNywgMTIsIDI2LCAKKyAgICAyMjAsIDI0MCwgMiwgMTQ1LCAxMzgsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAxMjEsIDEzOCwgMTcsIDEyLCAyNiwgCisgICAgMjIwLCAyNDAsIDIsIDIzNCwgMTM2LCAxMzgsIDE3LCAxMiwgMjYsIDIxOCwgMzAsIDIsIDYzLCAxMzgsIDE3LCAxMiwgMjYsIAorICAgIDIxMiwgMTA1LCAyLCA2MywgMTM4LCAxNywgMTIsIDI2LCAxMDYsIDIsIDI0NCwgMTMyLCA0MCwgMTcsIDEyLCAyNiwgMTA2LCAKKyAgICAyLCAyNDQsIDEzMiwgNDgsIDE3LCAyMjcsIDEzLCA0MiwgMjI2LCAxMzEsIDIyNywgMTMsIDQ2LCAyMjYsIDEzMSwgMTIsIAorICAgIDI2LCAyMTcsIDIxNiwgMiwgMTQ1LCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAxMjEsIDIsIDE0NSwgCisgICAgNDAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAxMjEsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAKKyAgICAxMjEsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDIzNCwgMTM2LCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIAorICAgIDIxNywgMjE2LCAyLCA2MywgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgMjE3LCAyMTYsIDIsIDYzLCAyLCAxMjEsIDcwLCAxNywgCisgICAgMTIsIDI2LCAyMTcsIDIxNiwgMiwgNjMsIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMTQ1LCAyLCA2MywgMiwgMTIxLCAKKyAgICA0MCwgMTcsIDEyLCAyNiwgMTQ1LCAyLCA2MywgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMTIxLCAyLCA2MywgMiwgNzMsIAorICAgIDQwLCAxNywgMTIsIDI2LCAxMjEsIDIsIDYzLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDIyMiwgODYsIDIsIDEyMSwgCisgICAgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgMTQ1LCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCAyMjIsIDg2LCAKKyAgICAyLCAxNDUsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgNjMsIDIsIDEyMSwgNDAsIDE3LCAxMiwgCisgICAgMjYsIDIyMiwgODYsIDIsIDYzLCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCA2MywgMiwgMTQ1LCA3MCwgCisgICAgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgNjMsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgMjIyLCA4NiwgMiwgNjMsIDIsIDYzLCAKKyAgICA3MCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIDEyMSwgMiwgMTIxLCA0MCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIAorICAgIDEyMSwgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgMjIyLCAxOTYsIDIsIDYzLCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgCisgICAgMjQwLCAyLCAxMjEsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgMjIwLCAyNDAsIDIsIDEyMSwgMiwgNjMsIDcwLCAxNywgMTIsIAorICAgIDI2LCAyMjAsIDI0MCwgMiwgMTQ1LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCA2MywgMiwgMjM0LCAKKyAgICAxMzYsIDQwLCAxNywgMTIsIDI2LCAyMjAsIDI0MCwgMiwgNjMsIDIsIDIzNCwgMTM2LCA3MCwgMTcsIDEyLCAyNiwgMjIwLCAKKyAgICAyNDAsIDIsIDYzLCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCA2MywgMiwgNjMsIDcwLCAxNywgMTIsIAorICAgIDI2LCAyNDgsIDE2MCwgMiwgMTIxLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDI0OCwgMTYwLCAyLCAyMzQsIDEzNiwgCisgICAgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyNDgsIDE2MCwgMiwgMjM0LCAxMzYsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjE4LCAKKyAgICAzMCwgMiwgNjMsIDIsIDEyMSwgNDAsIDE3LCAxMiwgMjYsIDIxOCwgMzAsIDIsIDYzLCAyLCAxMjEsIDcwLCAxNywgMTIsIAorICAgIDI2LCAyMTgsIDMwLCAyLCA2MywgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyMTgsIDMwLCAyLCA2MywgMiwgNzMsIDQwLCAxNywgCisgICAgMTIsIDI2LCAyNTQsIDEwNCwgMiwgMTQ1LCAyLCA2MywgNDAsIDE3LCAxMiwgMjYsIDI1NCwgMTA0LCAyLCA2MywgMiwgNjMsIAorICAgIDQwLCAxNywgMTIsIDI2LCAyNTQsIDEwNCwgMiwgNjMsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjU0LCAxMDQsIDIsIDYzLCAKKyAgICAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDI0MiwgMjIxLCAyLCA2MywgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyNDIsIAorICAgIDIyMSwgMiwgNjMsIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjQyLCAyMjEsIDIsIDYzLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAKKyAgICAxMiwgMjYsIDI0NCwgMTEyLCAyLCAyMzQsIDEzNiwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyNDQsIDExMiwgMiwgMjM0LCAKKyAgICAxMzYsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjI0LCAyMjYsIDIsIDYzLCAyLCAxMjEsIDQwLCAxNywgMTIsIDI2LCAyMjQsIAorICAgIDIyNiwgMiwgNjMsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDEyMSwgMiwgNjMsIDQwLCAxNywgMTIsIAorICAgIDI2LCAyMzMsIDEyNywgMiwgMTIxLCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMjEsIDIsIDEwNiwgCisgICAgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDE0NSwgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIAorICAgIDIsIDE0NSwgMiwgMTQ1LCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDIzNCwgMTM2LCAyLCA2MywgNDAsIDE3LCAxMiwgCisgICAgMjYsIDIzMywgMTI3LCAyLCAyMzQsIDEzNiwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgNjMsIDIsIAorICAgIDEyMSwgNDAsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCA2MywgMiwgMTIxLCA3MCwgMTcsIDEyLCAyNiwgNjMsIDIsIDEyMSwgCisgICAgMiwgMTQ1LCA3MCwgMTcsIDEyLCAyNiwgNjMsIDIsIDEyMSwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCA2MywgMiwgMTIxLCAyLCAKKyAgICA3MywgNDAsIDE3LCAxMiwgMjYsIDYzLCAyLCAxNDUsIDIsIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDYzLCAyLCAxNDUsIDIsIAorICAgIDYzLCA3MCwgMTcsIDEyLCAyNiwgNjMsIDIsIDIzNCwgMTM2LCAyLCAxNDUsIDcwLCAxNywgMTIsIDI2LCA2MywgMiwgMjM0LCAKKyAgICAxMzYsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgNjMsIDIsIDE0NSwgMiwgMjM0LCAxMzYsIDcwLCAxNywgMTIsIDI2LCAyNDEsIAorICAgIDIwMywgMiwgNjMsIDIsIDE0NSwgNzAsIDE3LCAxMiwgMjYsIDI0MSwgMjAzLCAyLCA2MywgMiwgNjMsIDcwLCAxNywgMTIsIAorICAgIDI2LCAyMjgsIDE3NCwgMiwgMTIxLCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAxMjEsIDIsIDEwNiwgCisgICAgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDE0NSwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyMjgsIDE3NCwgCisgICAgMiwgMTQ1LCAyLCA2MywgNzAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCAxNDUsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMjI4LCAxNzQsIDIsIDYzLCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIyOCwgMTc0LCAyLCA2MywgMiwgMTA2LCAyMTAsIAorICAgIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgNjMsIDIsIDYzLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDYzLCAyLCA2MywgNzAsIAorICAgIDE3LCAxMiwgMjYsIDI1MSwgMjMxLCAyLCAyMzQsIDEzNiwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDIxNiwgMiwgCisgICAgMTQ1LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAxNDUsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMjE3LCAyMTYsIDIsIDIzNCwgMTM2LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIxNywgMjE2LCAyLCAyMzQsIDEzNiwgCisgICAgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMTcsIDIxNiwgMiwgNjMsIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgMjE3LCAKKyAgICAyMTYsIDIsIDYzLCAyLCAxMDYsIDIxMCwgNDAsIDE3LCAxMiwgMjYsIDE0NSwgMiwgNjMsIDIsIDczLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMTQ1LCAyLCAxMjEsIDIsIDEwNiwgMjEwLCA0MCwgMTcsIDEyLCAyNiwgMTQ1LCAyLCA2MywgMiwgMTA2LCAyMTAsIAorICAgIDQwLCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCAyMzQsIDEzNiwgMiwgMTA2LCAyMTAsIDQwLCAxNywgMTIsIDI2LCAyMjIsIAorICAgIDE5NiwgMiwgMTIxLCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIyMCwgMjQwLCAyLCAxMjEsIDIsIDczLCA0MCwgMTcsIDEyLCAKKyAgICAyNiwgMjQ4LCAxNjAsIDIsIDEyMSwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMTQ1LCAyLCA3MywgNDAsIAorICAgIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCA2MywgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCA3MywgMiwgMTIxLCAyLCA3MywgCisgICAgNDAsIDE3LCAxMiwgMjYsIDczLCAyLCAxNDUsIDIsIDczLCA0MCwgMTcsIDEyLCAyNiwgNzMsIDIsIDYzLCAyLCA3MywgNDAsIAorICAgIDE3LCAxMiwgMjYsIDYzLCAyLCA2MywgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAyMjQsIDIyNiwgMiwgNjMsIDIsIDczLCA0MCwgCisgICAgMTcsIDEyLCAyNiwgMjI4LCAxNzQsIDIsIDEyMSwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAyMjQsIDIyNiwgMiwgNjMsIDIsIAorICAgIDEyMSwgNzAsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMjEsIDIsIDYzLCA3MCwgMTcsIDEyLCAyNiwgMjU0LCAxMDQsIAorICAgIDIsIDYzLCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIzNCwgMjU1LCAyLCA2MywgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAKKyAgICAyMjgsIDE3NCwgMiwgMTQ1LCAyLCAxMjEsIDcwLCAxNywgMTIsIDI2LCA2MywgMiwgMjM0LCAxMzYsIDIsIDczLCA0MCwgMTcsIAorICAgIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDE0NSwgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyMzQsIDI1NSwgMiwgNjMsIDIsIDYzLCAKKyAgICA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDE0NSwgMiwgNjMsIDQwLCAxNywgMTIsIDI2LCAyMjgsIDE3NCwgMiwgCisgICAgMTQ1LCAyLCAxMjEsIDQwLCAxNywgMTIsIDI2LCAxNDUsIDIsIDEyMSwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAxMjEsIDIsIAorICAgIDE0NSwgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCA2MywgMiwgMTQ1LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDI0NCwgMTEyLCAKKyAgICAyLCA2MywgMiwgNzMsIDQwLCAxNywgMTIsIDI2LCAyNTEsIDIzMSwgMiwgMTIxLCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIAorICAgIDIzNCwgMjU1LCAyLCA2MywgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyNTQsIDEwNCwgMiwgMTQ1LCAyLCA2MywgNzAsIDE3LCAKKyAgICAxMiwgMjYsIDIyMiwgMTk2LCAyLCA2MywgMiwgNjMsIDcwLCAxNywgMTIsIDI2LCAyMjIsIDg2LCAyLCAyMzQsIDEzNiwgMiwgCisgICAgNzMsIDQwLCAxNywgMTIsIDI2LCAyMjgsIDE3NCwgMiwgMTQ1LCAyLCA3MywgNDAsIDE3LCAxMiwgMjYsIDIyMiwgMTc1LCAKKyAgICAyMTUsIDEwMiwgMjUzLCAxNTMsIDIzNCwgMTMsIDIxOSwgNzAsIDUsIDQ4LCAxNywgMTIsIDI2LCAyMjQsIDIyMiwgMjE1LCAKKyAgICAxMDIsIDI1MywgMTUzLCAyMzQsIDEzLCAyMTksIDcwLCA1LCA0OCwgMTcsIDEyLCAyNiwgMjU0LCA2MiwgNDgsIDE3LCAxMiwgCisgICAgMjYsIDI1NCwgOTEsIDQ4LCAxNywgMTIsIDI2LCAyMzAsIDIyMywgNDgsIDE3LCAxMiwgMjYsIDIyMiwgMTc2LCA0OCwgMTcsIAorICAgIDEyLCAyNiwgMjI0LCAzNSwgNDgsIDE3LCAxMiwgMjYsIDI1NCwgODAsIDQ4LCAxNywgMTIsIDI2LCAyMTQsIDMzLCA0OCwgCisgICAgMTcsIDEyLCAyNiwgMjIyLCAxNzUsIDQ4LCAxNywgMTIsIDI2LCAyMjIsIDE3NCwgMjU0LCA4MCwgMjE0LCAzMiwgMTIsIDI2LCAKKyAgICAyMzUsIDEzNCwgMjIzLCAxODcsIDUyLCAxMiwgMjYsIDI1MSwgMTUzLCAyNTMsIDIwOSwgMjUzLCAyMTAsIDQzLCAyMjIsIAorICAgIDc2LCA0MywgMjIxLCAyMjEsIDQzLCAyMjEsIDE1MywgNDMsIDIyMSwgMTQyLCA0MywgMjIxLCAxMzEsIDQzLCAyMjEsIDEyMCwgCisgICAgNDMsIDIyMSwgMTA5LCA0MywgMjIxLCA5OCwgNDMsIDIyMSwgODcsIDQzLCAyMjIsIDc1LCA0MywgMjIyLCA2NCwgNDMsIAorICAgIDIyMiwgNTMsIDQzLCAyMjIsIDQyLCA0MywgMjIyLCAzMSwgNDMsIDIyMiwgMjAsIDQzLCAyMjIsIDksIDIyNSwgNzQsIDI0MywgCisgICAgMjQ1LCAzMSwgNzEsIDI0OSwgMTU3LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCAxMDUsIDI0OSwgMTU3LCAyMjUsIDc0LCAKKyAgICAyNDMsIDI0NSwgMzEsIDcxLCAxMDUsIDI0MywgMjAwLCAyMTksIDY5LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCAyNDksIAorICAgIDE2NCwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgMjIxLCA3MCwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgMjQ0LCAKKyAgICAyNTQsIDc3LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCAyMjQsIDE1OCwgNzcsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgCisgICAgNzEsIDQyLCA2NywgMjMzLCA0NCwgMTI1LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0NiwgNjcsIDIzMywgNDQsIAorICAgIDI1MSwgODMsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDE5OSwgMjQ1LCAxMjAsIDM3LCAyNiwgNDIsIDI0MiwgOSwgCisgICAgMzcsIDI2LCA0NiwgMjQyLCA5LCAzNywgNTEsIDIxNywgNDMsIDQyLCAyNDIsIDksIDM3LCA1MSwgMjE3LCA0MywgNDYsIAorICAgIDI0MiwgOSwgMzcsIDIzMiwgMzgsIDQyLCAyNDIsIDksIDM3LCAyMzIsIDM4LCA0NiwgMjQyLCA5LCAzNywgMjQ5LCAxMzcsIAorICAgIDIzMiwgMzcsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDExNywgNjIsIDIzMywgODAsIDIyNSwgNzQsIDI0MywgMjQ1LCAKKyAgICAzMSwgNzEsIDI0NSwgMTE4LCAyNDgsIDEwMSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgMjQ1LCAxMDksIDI0OCwgCisgICAgMTAxLCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCAxMTUsIDIzMiwgMjQyLCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCAKKyAgICAyMTQsIDE2LCAxMTUsIDIzMiwgMjQyLCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0MiwgMjI2LCAxMzEsIDIyNSwgNzQsIAorICAgIDI0MywgMjQ1LCAzMSwgNzEsIDQ2LCAyMjYsIDEzMSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgNDIsIDI0OSwgNDAsIAorICAgIDEyNSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgNDYsIDI0OSwgNDAsIDEyNSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCAKKyAgICA3MSwgNDIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMTI1LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0NiwgMjE2LCAyMTksIAorICAgIDIyMCwgMjMzLCAxMjUsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDQyLCA4MywgMjMzLCA0NCwgMTI1LCAyMjUsIDc0LCAKKyAgICAyNDMsIDI0NSwgMzEsIDcxLCA0NiwgODMsIDIzMywgNDQsIDEyNSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgNDIsIAorICAgIDUxLCAyNTQsIDE5LCAxMjUsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDQ2LCA1MSwgMjU0LCAxOSwgMTI1LCAyMjUsIAorICAgIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0MiwgMjU0LCAxOSwgMTI1LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0NiwgCisgICAgMjU0LCAxOSwgMTI1LCAyMjUsIDc0LCAyNDMsIDI0NSwgMzEsIDcxLCA0MiwgMjQ5LCAxMDAsIDEyNSwgMjI1LCA3NCwgMjQzLCAKKyAgICAyNDUsIDMxLCA3MSwgNDYsIDI0OSwgMTAwLCAxMjUsIDIyNSwgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDQyLCA2NywgMjQ5LCAKKyAgICAxMDAsIDEyNSwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgNDYsIDY3LCAyNDksIDEwMCwgMTI1LCAyMjEsIDUyLCAyNDcsIAorICAgIDc0LCA2NywgMjIxLCA1MiwgMjQ3LCA3NCwgMjI1LCA3NCwgMjQzLCAyNDUsIDMxLCA3MSwgNDIsIDQxLCAxMjUsIDIyNSwgCisgICAgNzQsIDI0MywgMjQ1LCAzMSwgNzEsIDQ2LCA0MSwgMTI1LCAyNDgsIDEwMCwgMjI2LCAyNDMsIDI1MCwgMTA2LCAyMjYsIAorICAgIDI0MywgMjE0LCAxNiwgMjI2LCAyNDMsIDUxLCAyMTQsIDE2LCAyMjYsIDI0MywgMjQ4LCAxMDAsIDExNSwgMjMyLCAyNDIsIAorICAgIDI1MCwgMTA2LCAxMTUsIDIzMiwgMjQyLCAyMTQsIDE2LCAxMTUsIDIzMiwgMjQyLCAzLCAyNDksIDE1NywgMywgMTA1LCAKKyAgICAyNDksIDE1NywgMywgMjQzLCAyMDAsIDIxOSwgNjksIDMsIDIyMSwgNzAsIDMsIDI0OSwgMTY0LCAzLCAyMjQsIDE1OCwgNzcsIAorICAgIDMsIDI0NCwgMjU0LCA3NywgMywgMjQ1LCAxMTgsIDI0OCwgMTAxLCAzLCA0MiwgMjI2LCAxMzEsIDMsIDQ2LCAyMjYsIDEzMSwgCisgICAgMywgNDIsIDI0OSwgNDAsIDEyNSwgMywgNDYsIDI0OSwgNDAsIDEyNSwgMywgNDIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMTI1LCAKKyAgICAzLCA0NiwgMjE2LCAyMTksIDIyMCwgMjMzLCAxMjUsIDMsIDUwLCA1MiwgMywgMjU0LCAzNSwgMywgMjUzLCAxMzIsIDMsIAorICAgIDk0LCA1MiwgMywgMjQwLCAxNTksIDMsIDIzMywgMzksIDUyLCAzLCAyNDIsIDEwNywgNTIsIDMsIDI0NSwgNjEsIDUyLCAzLCAKKyAgICAyMjMsIDIwMywgMjE5LCAyMzEsIDMsIDI0NywgODYsIDUyLCAzLCAyMjYsIDU3LCA1MiwgMywgMjQ5LCAxNTYsIDI1MywgCisgICAgMTIyLCAxMiwgMjQ0LCAxMzIsIDQ4LCAxNywgMTIsIDIxNywgMjUxLCAyLCAyNDQsIDEzMiwgNDksIDEyLCAyNDgsIDEyOCwgCisgICAgNDgsIDE3LCAxMiwgMjE4LCAyOCwgMjQzLCAyMjcsIDEyLCAyMzQsIDIwOSwgNDgsIDE3LCAxMiwgMjQ0LCAxMzQsIDQ4LCAKKyAgICAxNywgMTIsIDI0NCwgMTM0LCAxMzgsIDE3LCAxMiwgMjQ4LCAxMzAsIDQ4LCAxNywgMTIsIDI0OCwgMTMwLCAxMzgsIDE3LCAKKyAgICAxMiwgMjM0LCAyMTEsIDQ4LCAxNywgMTIsIDIzNCwgMjExLCAxMzgsIDE3LCAxMiwgMjIxLCAxNiwgNDgsIDE3LCAxMiwgCisgICAgMjIxLCAxNiwgMTM4LCAxNywgMTIsIDIxOCwgMjQ3LCA0OCwgMTcsIDEyLCAyMTgsIDI0NywgMTM4LCAxNywgMTIsIDEsIAorICAgIDE5MiwgNDgsIDE3LCAxMiwgMSwgMTA2LCAyLCAyMzIsIDMzLCA3OCwgNDgsIDE3LCAxMiwgMSwgMTA2LCAyLCAyMzIsIDMzLCAKKyAgICA3OCwgNDAsIDE3LCAxMiwgMSwgMTA2LCAyLCAxOTIsIDc4LCA0OCwgMTcsIDEyLCAxLCAxMDYsIDIsIDE5MiwgNzgsIDQwLCAKKyAgICAxNywgMTIsIDEsIDIxNCwgMTUsIDIsIDE5MiwgNzgsIDQ4LCAxNywgMTIsIDEsIDIxNCwgMTUsIDIsIDE5MiwgNzgsIDQwLCAKKyAgICAxNywgMTIsIDEsIDEwNiwgMiwgMTkyLCAyNTEsIDIyMCwgNDgsIDE3LCAxMiwgMSwgMTA2LCAyLCAxOTIsIDI1MSwgMjIwLCAKKyAgICA0MCwgMTcsIDEyLCAxLCA3MywgMiwgMTkyLCA3OCwgNDgsIDE3LCAxMiwgMSwgNzMsIDIsIDE5MiwgNzgsIDQwLCAxNywgMTIsIAorICAgIDEsIDczLCAyLCAxOTIsIDc4LCA3MCwgMTcsIDEyLCAxLCA3MywgMiwgMTkyLCA3OCwgMTM4LCAxNywgMTIsIDEsIDEwNiwgCisgICAgNDgsIDE3LCAxMiwgMSwgMTA2LCA0MCwgMTcsIDEyLCAxLCAyNTEsIDIzMSwgNDgsIDE3LCAxMiwgMSwgMjUxLCAyMzEsIDQwLCAKKyAgICAxNywgMTIsIDEsIDI1MSwgMjMxLCA3MCwgMTcsIDEyLCAxLCAyNTEsIDIzMSwgMTM4LCAxNywgMTIsIDEsIDIxNywgMjE2LCAKKyAgICAyMzEsIDIyOCwgNDgsIDE3LCAxMiwgMSwgMjE3LCAyMTYsIDIzMSwgMjI4LCA0MCwgMTcsIDEyLCAxLCAyMTcsIDIxNiwgNDgsIAorICAgIDE3LCAxMiwgMSwgMjE3LCAyMTYsIDQwLCAxNywgMTIsIDEsIDIxNywgMjE2LCA3MCwgMTcsIDEyLCAxLCAyMTcsIDIxNiwgCisgICAgMTM4LCAxNywgMTIsIDEsIDIxNywgMTQ2LCA0OCwgMTcsIDEyLCAxLCAyMTcsIDE0NiwgNDAsIDE3LCAxMiwgMSwgMjE3LCAKKyAgICAxNDYsIDcwLCAxNywgMTIsIDEsIDIxNywgMTQ2LCAxMzgsIDE3LCAxMiwgMSwgMTQ1LCA0OCwgMTcsIDEyLCAxLCAxNDUsIAorICAgIDQwLCAxNywgMTIsIDEsIDE0NSwgNzAsIDE3LCAxMiwgMSwgMTQ1LCAxMzgsIDE3LCAxMiwgMSwgMTIxLCA0OCwgMTcsIDEyLCAKKyAgICAxLCAxMjEsIDQwLCAxNywgMTIsIDEsIDEyMSwgNzAsIDE3LCAxMiwgMSwgMTIxLCAxMzgsIDE3LCAxMiwgMSwgMjM0LCAxMzYsIAorICAgIDQ4LCAxNywgMTIsIDEsIDIzNCwgMTM2LCA0MCwgMTcsIDEyLCAxLCAyMzQsIDEzNiwgNzAsIDE3LCAxMiwgMSwgMjM0LCAKKyAgICAxMzYsIDEzOCwgMTcsIDEyLCAxLCAyNDgsIDE0MSwgNDgsIDE3LCAxMiwgMSwgMjQ4LCAxNDEsIDQwLCAxNywgMTIsIDEsIAorICAgIDIxNywgMTU2LCA0OCwgMTcsIDEyLCAxLCAyMTcsIDE1NiwgNDAsIDE3LCAxMiwgMSwgMjIzLCAyNDYsIDQ4LCAxNywgMTIsIAorICAgIDEsIDIyMywgMjQ2LCA0MCwgMTcsIDEyLCAxLCAyMTIsIDEwMiwgNDgsIDE3LCAxMiwgMSwgMjEyLCAxMDIsIDQwLCAxNywgCisgICAgMTIsIDEsIDIyMiwgODYsIDQ4LCAxNywgMTIsIDEsIDIyMiwgODYsIDQwLCAxNywgMTIsIDEsIDIyMiwgODYsIDcwLCAxNywgCisgICAgMTIsIDEsIDIyMiwgODYsIDEzOCwgMTcsIDEyLCAxLCAyMjAsIDI0MCwgNDgsIDE3LCAxMiwgMSwgMjIwLCAyNDAsIDQwLCAKKyAgICAxNywgMTIsIDEsIDIyMCwgMjQwLCA3MCwgMTcsIDEyLCAxLCAyMjAsIDI0MCwgMTM4LCAxNywgMTIsIDEsIDIyMiwgMTk2LCAKKyAgICA0OCwgMTcsIDEyLCAxLCAyMjIsIDE5NiwgNDAsIDE3LCAxMiwgMSwgMjIyLCAxOTYsIDcwLCAxNywgMTIsIDEsIDIyMiwgCisgICAgMTk2LCAxMzgsIDE3LCAxMiwgMSwgMjQ4LCAxNjAsIDQ4LCAxNywgMTIsIDEsIDI0OCwgMTYwLCA0MCwgMTcsIDEyLCAxLCAKKyAgICAyNDgsIDE2MCwgNzAsIDE3LCAxMiwgMSwgMjQ4LCAxNjAsIDEzOCwgMTcsIDEyLCAxLCAyMTgsIDMwLCA0OCwgMTcsIDEyLCAKKyAgICAxLCAyMTgsIDMwLCA0MCwgMTcsIDEyLCAxLCAyMTgsIDMwLCA3MCwgMTcsIDEyLCAxLCAyMTgsIDMwLCAxMzgsIDE3LCAxMiwgCisgICAgMSwgMjEyLCAxMDUsIDQ4LCAxNywgMTIsIDEsIDIxMiwgMTA1LCA0MCwgMTcsIDEyLCAxLCAyMTIsIDEwNSwgNzAsIDE3LCAKKyAgICAxMiwgMSwgMjEyLCAxMDUsIDEzOCwgMTcsIDEyLCAxLCAyNTQsIDEwNCwgNDgsIDE3LCAxMiwgMSwgMjU0LCAxMDQsIDQwLCAKKyAgICAxNywgMTIsIDEsIDI1NCwgMTA0LCA3MCwgMTcsIDEyLCAxLCAyNTQsIDEwNCwgMTM4LCAxNywgMTIsIDEsIDI0MiwgMjIxLCAKKyAgICA0OCwgMTcsIDEyLCAxLCAyNDIsIDIyMSwgNDAsIDE3LCAxMiwgMSwgMjQyLCAyMjEsIDcwLCAxNywgMTIsIDEsIDI0MiwgCisgICAgMjIxLCAxMzgsIDE3LCAxMiwgMSwgMjQ0LCAxMTIsIDQ4LCAxNywgMTIsIDEsIDI0NCwgMTEyLCA0MCwgMTcsIDEyLCAxLCAKKyAgICAyNDQsIDExMiwgNzAsIDE3LCAxMiwgMSwgMjQ0LCAxMTIsIDEzOCwgMTcsIDEyLCAxLCAyMjQsIDIyNiwgNDgsIDE3LCAxMiwgCisgICAgMSwgMjI0LCAyMjYsIDQwLCAxNywgMTIsIDEsIDIyNCwgMjI2LCA3MCwgMTcsIDEyLCAxLCAyMjQsIDIyNiwgMTM4LCAxNywgCisgICAgMTIsIDEsIDIzNCwgMjU1LCA0OCwgMTcsIDEyLCAxLCAyMzQsIDI1NSwgNDAsIDE3LCAxMiwgMSwgMjM0LCAyNTUsIDcwLCAKKyAgICAxNywgMTIsIDEsIDIzNCwgMjU1LCAxMzgsIDE3LCAxMiwgMSwgMjMzLCAxMjcsIDQ4LCAxNywgMTIsIDEsIDIzMywgMTI3LCAKKyAgICA0MCwgMTcsIDEyLCAxLCAyMzMsIDEyNywgNzAsIDE3LCAxMiwgMSwgMjMzLCAxMjcsIDEzOCwgMTcsIDEyLCAxLCA2MywgNDgsIAorICAgIDE3LCAxMiwgMSwgNjMsIDQwLCAxNywgMTIsIDEsIDYzLCA3MCwgMTcsIDEyLCAxLCA2MywgMTM4LCAxNywgMTIsIDEsIDIyOCwgCisgICAgMTc0LCA0OCwgMTcsIDEyLCAxLCAyMjgsIDE3NCwgNDAsIDE3LCAxMiwgMSwgMjI4LCAxNzQsIDcwLCAxNywgMTIsIDEsIAorICAgIDIyOCwgMTc0LCAxMzgsIDE3LCAxMiwgMSwgMjQxLCAyMDMsIDQ4LCAxNywgMTIsIDEsIDI0MSwgMjAzLCA0MCwgMTcsIDEyLCAKKyAgICAxLCAyNDEsIDIwMywgNzAsIDE3LCAxMiwgMSwgMjQxLCAyMDMsIDEzOCwgMTcsIDEyLCAxLCAyMTQsIDE1LCA0OCwgMTcsIAorICAgIDEyLCAxLCAyMTQsIDE1LCA0MCwgMTcsIDEyLCAxLCAxMDYsIDIxMCwgNDgsIDE3LCAxMiwgMSwgMTA2LCAyMTAsIDQwLCAxNywgCisgICAgMTIsIDEsIDczLCA0OCwgMTcsIDEyLCAxLCA3MywgNDAsIDE3LCAxMiwgMSwgNzMsIDcwLCAxNywgMTIsIDEsIDczLCAxMzgsIAorICAgIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMDYsIDIsIDIzMiwgMzMsIDc4LCA0OCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIAorICAgIDIsIDEwNiwgMiwgMjMyLCAzMywgNzgsIDQwLCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMTA2LCAyLCAxOTIsIDc4LCA0OCwgCisgICAgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDEwNiwgMiwgMTkyLCA3OCwgNDAsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAKKyAgICAxMDYsIDIsIDE5MiwgMjUxLCAyMjAsIDQ4LCAxNywgMTIsIDI2LCAyMzMsIDEyNywgMiwgMTA2LCAyLCAxOTIsIDI1MSwgCisgICAgMjIwLCA0MCwgMTcsIDEyLCAyNiwgMjMzLCAxMjcsIDIsIDEwNiwgNDgsIDE3LCAxMiwgMjYsIDIzMywgMTI3LCAyLCAxMDYsIAorICAgIDQwLCAxNywgMjEyLCA4MCwgMjEzLCAyMzAsIDIyOCwgMTg0LCAyMTksIDIwNiwgMTIwLCAyNDQsIDI1NCwgNzcsIDEyMCwgCisgICAgMjI0LCAxNDMsIDc3LCAxMjAsIDUwLCA1MiwgMTIwLCAyNDcsIDg2LCA1MiwgMTIwLCAyMjYsIDU3LCA1MiwgMTIwLCAyNTQsIAorICAgIDM1LCAxMjAsIDI1MywgMjI2LCAxMjAsIDQyLCAyMjYsIDEzMSwgMTIwLCA0NiwgMjI2LCAxMzEsIDEyMCwgMjUzLCAxMzIsIAorICAgIDEyMCwgOTQsIDUyLCAxMjAsIDI0OSwgMTU3LCAxMjAsIDI0MCwgMTU5LCAxMjAsIDI0MywgMjAwLCAyMTksIDY5LCAxMjAsIAorICAgIDIxOSwgMjMxLCAxMjAsIDIxLCAyMTIsIDc5LCAxMjAsIDIxLCAxMTYsIDEyMCwgMjEsIDEwOSwgMTIwLCAyMSwgMTY2LCAKKyAgICAxMjAsIDIxLCAxNjMsIDEyMCwgMjEsIDE4MCwgMTIwLCAyMSwgMTg5LCAxMjAsIDIxLCAxOTgsIDEyMCwgMjEsIDE5NSwgCisgICAgMTIwLCAyMSwgMjAwLCAxMjAsIDI0OSwgMTY0LCAxMjAsIDIyMSwgNzAsIDEyMCwgMjMzLCAzOSwgNTIsIDEyMCwgMjQ1LCAKKyAgICA2MSwgNTIsIDEyMCwgMjQyLCAxMDcsIDUyLCAxMjAsIDIyNCwgMTU4LCA3NywgMTIwLCAyNDksIDE1NiwgMjUzLCAxMjIsIAorICAgIDEyMCwgNywgNiwgMSwgNjEsIDEyMCwgNywgNiwgMSwgMjUzLCA3NCwgMTIwLCA3LCA2LCAxLCAyNTAsIDI1MiwgMTIwLCA3LCAKKyAgICA2LCAxLCAyNDksIDMsIDEyMCwgNywgNiwgMSwgNzQsIDEyMCwgNywgNiwgMSwgMjQ0LCAyMzAsIDEyMCwgNywgNiwgMSwgCisgICAgMjQzLCAxNzcsIDEyMCwgNywgNiwgMSwgMjQyLCA0MSwgMTIwLCA3LCA2LCAxLCA3MiwgMTIwLCA3LCA2LCAxLCAyMzUsIAorICAgIDE0MiwgMTIwLCA3LCA2LCAxLCAyMzUsIDI3LCAxMjAsIDcsIDYsIDEsIDE1MCwgMTIwLCA3LCA2LCAxLCAxODMsIDEyMCwgNywgCisgICAgNiwgMSwgMjA0LCAxMjAsIDcsIDYsIDEsIDc1LCAxMjAsIDcsIDYsIDEsIDIyNiwgMjI5LCAxMjAsIDcsIDYsIDEsIDIyNCwgCisgICAgMjQwLCAxMjAsIDcsIDYsIDEsIDE0OSwgMTIwLCA3LCA2LCAxLCAxOTcsIDEyMCwgNywgNiwgMSwgMjE4LCA5OSwgMTIwLCA3LCAKKyAgICA2LCAxLCA2OSwgMTIwLCA3LCA2LCAxLCAyMTUsIDc5LCAxMjAsIDcsIDYsIDEsIDIxNCwgODIsIDEyMCwgNywgNiwgMSwgCisgICAgMjEzLCAxNjYsIDEyMCwgNywgNiwgMSwgMjEzLCAxMDUsIDEyMCwgNywgNiwgMSwgMjEyLCAxNTIsIDEyMCwgNDIsIDQxLCAKKyAgICAxMjUsIDEyMCwgMjIzLCAyMDMsIDIxOSwgMjMxLCAxMjAsIDQ2LCA0MSwgMTI1LCAxMjAsIDI0OSwgMjI0LCAyNTQsIDE3NCwgCisgICAgMTIwLCAxMTUsIDIzMiwgMjQyLCAxMjAsIDI0MiwgMTE0LCAyNTQsIDE3NCwgMTIwLCA3LCAzLCAxLCA2MSwgMTIwLCA3LCAzLCAKKyAgICAxLCAyNTMsIDc0LCAxMjAsIDcsIDMsIDEsIDI1MCwgMjUyLCAxMjAsIDcsIDMsIDEsIDI0OSwgMywgMTIwLCA3LCAzLCAxLCAKKyAgICA3NCwgMTIwLCA3LCAzLCAxLCAyNDQsIDIzMCwgMTIwLCA3LCAzLCAxLCAyNDMsIDE3NywgMTIwLCA3LCAzLCAxLCAyNDIsIAorICAgIDQxLCAxMjAsIDcsIDMsIDEsIDcyLCAxMjAsIDcsIDMsIDEsIDIzNSwgMTQyLCAxMjAsIDcsIDMsIDEsIDIzNSwgMjcsIDEyMCwgCisgICAgNywgMywgMSwgMTUwLCAxMjAsIDcsIDMsIDEsIDE4MywgMTIwLCA3LCAzLCAxLCAyMDQsIDEyMCwgNywgMywgMSwgNzUsIAorICAgIDEyMCwgNywgMywgMSwgMjI2LCAyMjksIDEyMCwgNywgMywgMSwgMjI0LCAyNDAsIDEyMCwgNywgMywgMSwgMTQ5LCAxMjAsIAorICAgIDcsIDMsIDEsIDE5NywgMTIwLCA3LCAzLCAxLCAyMTgsIDk5LCAxMjAsIDcsIDMsIDEsIDY5LCAxMjAsIDcsIDMsIDEsIDIxNSwgCisgICAgNzksIDEyMCwgNywgMywgMSwgMjE0LCA4MiwgMTIwLCA3LCAzLCAxLCAyMTMsIDE2NiwgMTIwLCA3LCAzLCAxLCAyMTMsIAorICAgIDEwNSwgMTIwLCA3LCAzLCAxLCAyMTIsIDE1MiwgMTIwLCA0MiwgMjQ5LCA0MCwgMTI1LCAxMjAsIDcxLCAyMzIsIDI0MiwgCisgICAgMTIwLCA0NiwgMjQ5LCA0MCwgMTI1LCAxMjAsIDIxNywgNDIsIDEyMCwgNDIsIDY3LCAyMjYsIDEzMSwgMTIwLCA0NiwgNjcsIAorICAgIDIyNiwgMTMxLCA5OCwgMTA1LCAyNDMsIDIwMCwgMjE5LCA2OSwgOTgsIDQyLCAyNDksIDEwMCwgMTI1LCA5OCwgNDYsIDI0OSwgCisgICAgMTAwLCAxMjUsIDk4LCAxMDUsIDI0OSwgMTU3LCA5OCwgNTYsIDIzMSwgMzcsIDI0NywgNzQsIDk4LCA1NiwgMSwgMjEzLCAKKyAgICAyMTQsIDk4LCA1NiwgMSwgMywgNjEsIDk4LCA1NiwgMSwgMywgNzIsIDk4LCA1NiwgMSwgMywgNjksIDk4LCA1NiwgMSwgMywgCisgICAgNzQsIDk4LCA1NiwgMSwgMywgNzUsIDk4LCA1NiwgMSwgMywgMTg2LCA5OCwgNTYsIDEsIDMsIDIxMiwgMjAzLCA5OCwgNTYsIAorICAgIDEsIDMsIDIxMiwgMjM1LCA5OCwgNTYsIDEsIDMsIDIxNiwgODIsIDk4LCAyMzQsIDIwNiwgMjI1LCA1NywgMjE5LCAyMTgsIAorICAgIDc3LCA5OCwgNTYsIDEsIDYxLCA5OCwgNTYsIDEsIDcyLCA5OCwgNTYsIDEsIDY5LCA5OCwgNTYsIDEsIDc0LCA5OCwgNTYsIAorICAgIDEsIDc1LCA5OCwgNTYsIDEsIDE4MSwgOTgsIDU2LCAxLCAyMzQsIDEwMSwgOTgsIDU2LCAxLCAyMzMsIDIzOCwgOTgsIDU2LCAKKyAgICAxLCAyMzQsIDE4OCwgOTgsIDU2LCAxLCAyMzQsIDM3LCA5OCwgNTYsIDEsIDIyMiwgMjAyLCA5OCwgNTYsIDEsIDIyMCwgCisgICAgMTE3LCA5OCwgNTYsIDEsIDIxOSwgMjcsIDk4LCA1NiwgMSwgMjIyLCAxMDAsIDk4LCA1NiwgMSwgMjE5LCAyNDIsIDk4LCAKKyAgICA1NiwgMSwgMjE4LCA1MiwgOTgsIDU2LCAxLCAyMTcsIDcxLCA5OCwgNTYsIDEsIDIxNiwgODIsIDk4LCA1NiwgMSwgMjE3LCAKKyAgICAyMjksIDk4LCA1NiwgMSwgMTA4LCA5OCwgNTYsIDEsIDIwNSwgOTgsIDU2LCAxLCAyMjksIDY0LCA5OCwgNTYsIDEsIDIyOCwgCisgICAgOTIsIDk4LCA1NiwgMSwgMjI5LCAxODcsIDk4LCA1NiwgMSwgMjI4LCAxODUsIDk4LCA1NiwgMSwgMTU5LCA5OCwgNTYsIDEsIAorICAgIDI0MSwgMTY1LCA5OCwgNTYsIDEsIDI0MCwgMjEyLCA5OCwgNTYsIDEsIDI0MSwgMjIyLCA5OCwgNTYsIDEsIDI0MSwgNTQsIAorICAgIDk4LCA1NiwgMSwgMTg4LCA5OCwgNTYsIDEsIDIzMSwgNDIsIDk4LCA1NiwgMSwgMjMwLCAxNzIsIDk4LCA1NiwgMSwgMjMxLCAKKyAgICAxNTYsIDk4LCA1NiwgMSwgMjMwLCAyMzEsIDk4LCA1NiwgMSwgMTg2LCA5OCwgNTYsIDEsIDIxMiwgMjAzLCA5OCwgNTYsIDEsIAorICAgIDIxMiwgMjM1LCA5OCwgNTYsIDEsIDIwMywgOTgsIDU2LCAxLCAyMjMsIDE4OCwgOTgsIDU2LCAxLCAyMjMsIDUxLCA5OCwgCisgICAgNTYsIDEsIDIyNCwgMjEsIDk4LCA1NiwgMSwgMjIzLCAxMTIsIDk4LCA1NiwgMSwgMjE0LCA0OSwgOTgsIDU2LCAxLCAyMDQsIAorICAgIDk4LCA1NiwgMjE0LCAxMTYsIDIxOSwgMjE4LCA3NywgOTgsIDU2LCAyMjEsIDc1LCAyMTksIDIxOCwgNzcsIDk4LCAyMywgCisgICAgMjQ0LCA3MiwgOTgsIDIzLCAxLCAyMzQsIDY3LCA5OCwgMjMsIDEsIDIxOSwgMTUwLCA5OCwgMjMsIDEsIDIzNCwgNjAsIDk4LCAKKyAgICAyMywgMSwgMjI5LCA1NywgOTgsIDIzLCAxLCAyMjksIDU1LCA5OCwgMjMsIDEsIDIyOSwgNTQsIDk4LCAyMywgMSwgMjE3LCAKKyAgICA1NSwgOTgsIDIzLCAxLCAyMTksIDEzOSwgOTgsIDIzLCAxLCAyMjMsIDE3OSwgOTgsIDIzLCAxLCAyMjMsIDE3NCwgOTgsIAorICAgIDIzLCAxLCAyMjMsIDE3MSwgOTgsIDIzLCAxLCAyMjMsIDE2NCwgOTgsIDIzLCAxLCAyMjMsIDE1OSwgOTgsIDIzLCAxLCAKKyAgICAyMjMsIDE1NCwgOTgsIDIzLCAxLCAyMjMsIDE2NSwgOTgsIDIzLCAxLCAyMjMsIDE3NywgOTgsIDIzLCAxLCAyMzEsIDMwLCAKKyAgICA5OCwgMjMsIDEsIDIyNSwgMjI3LCA5OCwgMjMsIDEsIDIxOSwgMTQ3LCA5OCwgMjMsIDEsIDIyNSwgMjE2LCA5OCwgMjMsIDEsIAorICAgIDIyMCwgNzYsIDk4LCAyMywgMSwgMjE5LCAxNDQsIDk4LCAyMywgMSwgMjM2LCA1MSwgOTgsIDIzLCAxLCAyNDksIDIzOSwgCisgICAgOTgsIDIzLCAxLCAyMTksIDE1NCwgOTgsIDIzLCAxLCAyNTAsIDQzLCA5OCwgMjMsIDEsIDIzNCwgMTE2LCA5OCwgMjMsIDEsIAorICAgIDIxNywgMTI2LCA5OCwgMjMsIDEsIDIyNiwgNywgOTgsIDIzLCAxLCAyNDEsIDE1OCwgOTgsIDIzLCAxLCA2MSwgOTgsIDIzLCAKKyAgICAxLCAyNTQsIDE0OCwgOTgsIDIzLCAxLCAxODYsIDk4LCAyMywgMSwgMjEzLCA4MCwgOTgsIDIzLCAxLCAyNDUsIDc2LCA5OCwgCisgICAgMjMsIDEsIDc0LCA5OCwgMjMsIDEsIDIxMywgMjcsIDk4LCAyMywgMSwgMjEzLCAzOCwgOTgsIDIzLCAxLCA3NSwgOTgsIDIzLCAKKyAgICAxLCAyMTQsIDQ5LCA5OCwgMjMsIDEsIDIxNCwgNDYsIDk4LCAyMywgMSwgMjI3LCA5OSwgOTgsIDIzLCAxLCAyMTIsIDIzNSwgCisgICAgOTgsIDIzLCAxLCA2OSwgOTgsIDIzLCAxLCAyMTMsIDI1MiwgOTgsIDIzLCAxLCAyMTQsIDYsIDk4LCAyMywgMSwgMjEzLCAKKyAgICAyMzUsIDk4LCAyMywgMSwgMjEyLCAyMDMsIDk4LCAyMywgMSwgMjQ1LCAyMiwgOTgsIDIzLCAxLCAyMTIsIDI1NSwgOTgsIAorICAgIDIzLCAxLCA3MiwgMTIwLCAyNTAsIDExMCwgNTIsIDEyMCwgMjI1LCAxMDgsIDUyLCAxMjAsIDIyOCwgMTYzLCA1MiwgMTIwLCAKKyAgICAyMzIsIDM3LCAxMjAsIDI1MSwgNjMsIDEzNCwgMTIwLCAyMTMsIDMxLCA1MiwgMTIwLCAyMTMsIDIwNCwgNTIsIDk4LCAyNDMsIAorICAgIDI0MywgMTc3LCAyMTQsIDIxNiwgOTgsIDEzMiwgNjgsIDk4LCAyMTUsIDEyNCwgNjgsIDk4LCA5NSwgNjgsIDk4LCAyNDYsIAorICAgIDU4LCA2OCwgOTgsIDgzLCAyMTksIDE2NiwgOTgsIDY3LCAyNDksIDIyOCwgMjM1LCAyMDEsIDI1NCwgMTAsIDI1NCwgMjksIAorICAgIDIzNSwgMjAxLCAyNTQsIDEwLCAyMjEsIDU3LCAyMzUsIDIwMSwgMjU0LCAxMCwgMjE3LCAxODksIDIyNywgMTEzLCAyMjMsIAorICAgIDIyNCwgMjUwLCA3OCwgMjIzLCAyMjQsIDI1MCwgNzgsIDU4LCA1NCwgNCwgMjUzLCA1OCwgNjEsIDU4LCA1NCwgNCwgMjUzLCAKKyAgICAyNywgNzQsIDU4LCA1NCwgNCwgMjUzLCAzNiwgNzIsIDU4LCA1NCwgNCwgMjUzLCA0LCA3NSwgNTgsIDU0LCA0LCAyNTMsIAorICAgIDU0LCA2OSwgNTgsIDU0LCA0LCAyNTMsIDczLCAyNDgsIDE2NCwgNTgsIDU0LCA0LCAyNTMsIDIwLCAyNDgsIDQxLCA1OCwgCisgICAgNTQsIDQsIDI1MywgNjAsIDI0NywgMjExLCA1OCwgNTQsIDQsIDI1MywgNTAsIDI0NywgOTksIDU4LCA1NCwgNCwgMjUzLCAKKyAgICAxNCwgMjQ2LCAzMywgNTgsIDU0LCA0LCAyNTMsIDgsIDIzNSwgMTM5LCA1OCwgNTQsIDQsIDI1MywgMTksIDIzNSwgMTI3LCAKKyAgICA1OCwgNTQsIDQsIDI1MywgMjksIDIzNSwgNzEsIDU4LCA1NCwgNCwgMjUzLCAwLCAyMzUsIDU0LCA1OCwgNTQsIDQsIDI1MiwgCisgICAgMjQ0LCAxODEsIDU4LCA1NCwgNCwgMjUzLCAyMSwgMjM0LCAxODgsIDU4LCA1NCwgNCwgMjUyLCAyNTQsIDIzNCwgMTAxLCAKKyAgICA1OCwgNTQsIDQsIDI1MiwgMjUxLCAyMzQsIDM3LCA1OCwgNTQsIDQsIDI1MiwgMjQwLCAyMzMsIDIzOCwgNTgsIDU0LCA0LCAKKyAgICAyNTIsIDI0MSwgMTg4LCA1OCwgNTQsIDQsIDI1MywgNTEsIDIzMSwgMTU2LCA1OCwgNTQsIDQsIDI1MiwgMjQ4LCAyMzEsIAorICAgIDQyLCA1OCwgNTQsIDQsIDI1MywgNDksIDIzMCwgMjMxLCA1OCwgNTQsIDQsIDI1MywgNDEsIDIzMCwgMTcyLCA1OCwgNTQsIAorICAgIDQsIDI1MywgNjIsIDIwNSwgNTgsIDU0LCA0LCAyNTMsIDQwLCAyMjksIDE4NywgNTgsIDU0LCA0LCAyNTMsIDM0LCAyMjksIAorICAgIDY0LCA1OCwgNTQsIDQsIDI1MywgMTMsIDIyOCwgMTg1LCA1OCwgNTQsIDQsIDI1MywgMTAsIDIyOCwgOTIsIDU4LCA1NCwgNCwgCisgICAgMjUzLCA2OSwgMTkzLCA1OCwgNTQsIDQsIDI1MiwgMjQ5LCAyMjYsIDk2LCA1OCwgNTQsIDQsIDI1MywgMjYsIDIyNSwgMjQwLCAKKyAgICA1OCwgNTQsIDQsIDI1MywgNTMsIDIyNSwgMTUwLCA1OCwgNTQsIDQsIDI1MywgMTUsIDIyNSwgMzUsIDU4LCA1NCwgNCwgCisgICAgMjUzLCA0OCwgMjI0LCAyMzIsIDU4LCA1NCwgNCwgMjUyLCAyNDMsIDIyNCwgMjEzLCA1OCwgNTQsIDQsIDI1MywgNDMsIAorICAgIDIyNCwgMTk4LCA1OCwgNTQsIDQsIDI1MywgMzIsIDIyNCwgMTg3LCA1OCwgNTQsIDQsIDI1MywgNSwgMjAzLCA1OCwgNTQsIAorICAgIDQsIDI1MywgMzcsIDIyNCwgMjEsIDU4LCA1NCwgNCwgMjUzLCAxMiwgMjIzLCAxODgsIDU4LCA1NCwgNCwgMjUzLCA3MSwgCisgICAgMjIzLCAxMTIsIDU4LCA1NCwgNCwgMjUzLCAzOCwgMjIzLCA1MSwgNTgsIDU0LCA0LCAyNTMsIDMzLCAyMjIsIDIwMiwgNTgsIAorICAgIDU0LCA0LCAyNTMsIDU2LCAyMjIsIDEwMCwgNTgsIDU0LCA0LCAyNTMsIDI0LCAyMjAsIDExNywgNTgsIDU0LCA0LCAyNTMsIAorICAgIDUyLCAyMTksIDI0MiwgNTgsIDU0LCA0LCAyNTMsIDcsIDIxOSwgMjcsIDU4LCA1NCwgNCwgMjUzLCA2LCAyMTgsIDUyLCA1OCwgCisgICAgNTQsIDQsIDI1MywgNjcsIDIxNywgMjI5LCA1OCwgNTQsIDQsIDI1MywgMjgsIDIxNywgNzEsIDU4LCA1NCwgNCwgMjUzLCAKKyAgICA2NSwgMTA4LCA1OCwgNTQsIDQsIDI1MiwgMjUyLCAyMTYsIDgyLCA1OCwgNTQsIDQsIDI1MywgMTEsIDIxNCwgNDksIDU4LCAKKyAgICA1NCwgNCwgMjUyLCAyNDYsIDIxNCwgNiwgNTgsIDU0LCA0LCAyNTMsIDI1LCAyMTMsIDIzNSwgNTgsIDU0LCA0LCAyNTMsIAorICAgIDIzLCAyMTMsIDIxNCwgNTgsIDU0LCA0LCAyNTMsIDQ3LCAyMTIsIDEwOSwgNTgsIDU0LCA0LCAyNTIsIDI0NywgMjEyLCA4NywgCisgICAgNTgsIDU0LCA0LCAyNTMsIDQ0LCAyMTIsIDE2LCA1OCwgNTQsIDQsIDI1MywgMzksIDI1NCwgMjM0LCA1OCwgNTQsIDQsIAorICAgIDI1MywgMjIsIDI1NCwgMjMzLCA1OCwgNTQsIDQsIDI1MiwgMjM3LCAyNTMsIDEwOCwgNTgsIDU0LCA0LCAyNTIsIDI1MCwgCisgICAgMjQ2LCAxLCA1OCwgNTQsIDQsIDI1MiwgMjMzLCAyNDYsIDAsIDU4LCA1NCwgNCwgMjUzLCAxNywgMjI4LCAzMSwgNTgsIDU0LCAKKyAgICA0LCAyNTMsIDM1LCAyMjUsIDM0LCA1OCwgNTQsIDQsIDI1MywgMywgMjI1LCAzNywgNTgsIDU0LCA0LCAyNTIsIDI0NSwgCisgICAgMjI0LCA3NiwgNTgsIDU0LCA0LCAyNTMsIDMxLCAyMjQsIDc1LCA1OCwgNTQsIDQsIDI1MiwgMjUzLCAyMjMsIDExMSwgNTgsIAorICAgIDU0LCA0LCAyNTIsIDI1NSwgMjE4LCA1MCwgNTgsIDU0LCA0LCAyNTIsIDIzNSwgMjE2LCA0MywgNTgsIDU0LCA0LCAyNTIsIAorICAgIDIzMiwgMTA5LCA1OCwgNTQsIDE2LCAyNTMsIDQ2LCA1OCwgNTQsIDE2LCAyNTMsIDQ1LCA1OCwgNTQsIDE2LCAyNTMsIDQyLCAKKyAgICA1OCwgNTQsIDE2LCAyNTMsIDMwLCA1OCwgNTQsIDE2LCAyNTMsIDE4LCA1OCwgNTQsIDE2LCAyNTMsIDE2LCA1OCwgNTQsIAorICAgIDE2LCAyNTMsIDksIDU4LCA1NCwgMTYsIDI1MywgMiwgNTgsIDU0LCAxNiwgMjUzLCAxLCA1OCwgNTQsIDE2LCAyNTIsIDI0MiwgCisgICAgNTgsIDU0LCAxNiwgMjUyLCAyMzksIDU4LCA1NCwgMTYsIDI1MiwgMjM4LCA1OCwgNTQsIDE2LCAyNTIsIDIzNiwgNTgsIDU0LCAKKyAgICAxNiwgMjUyLCAyMzQsIDU4LCA1NCwgMTAyLCAyNTIsIDIzMSwgMjMxLCAyNDgsIDU4LCA1NCwgMTAyLCAyNTIsIDIzMCwgCisgICAgMjEzLCAyMDgsIDU4LCA1NCwgMTAyLCAyNTIsIDIyOSwgMjQ4LCAyNSwgNTgsIDU0LCAxMDIsIDI1MiwgMjI4LCAyNDUsIDU4LCAKKyAgICA1OCwgNTQsIDEwMiwgMjUyLCAyMjcsIDIzMSwgMjIyLCA1OCwgNTQsIDEwMiwgMjUyLCAyMjYsIDIxOSwgMTAxLCA1OCwgNTQsIAorICAgIDEwMiwgMjUyLCAyMjUsIDI0NSwgNCwgNTgsIDU0LCAxMDIsIDI1MiwgMjI0LCAyMjQsIDQ1LCA1OCwgNTQsIDEwMiwgMjUyLCAKKyAgICAyMjMsIDIyMCwgMjQyLCA1OCwgNTQsIDEwMiwgMjUyLCAyMjIsIDI0MSwgMjIxLCA1OCwgNTQsIDEwMiwgMjUyLCAyMjEsIAorICAgIDIxOSwgMjEyLCA1OCwgNTQsIDEwMiwgMjUyLCAyMjAsIDI1MSwgMTI2LCA1OCwgNTQsIDEwMiwgMjUyLCAyMTksIDI0OSwgCisgICAgODQsIDU4LCA1NCwgMTAyLCAyNTIsIDIxOCwgMjUxLCA0NCwgNTgsIDU0LCAxMDIsIDI1MiwgMjE3LCAyMTMsIDI0MywgNTgsIAorICAgIDU0LCAxMDIsIDI1MiwgMjE2LCAyNTIsIDU2LCA1OCwgNTQsIDEwMiwgMjUyLCAyMTUsIDIyNywgNzEsIDU4LCA1NCwgMTAyLCAKKyAgICAyNTIsIDIxNCwgMjE5LCAxODYsIDU4LCA1NCwgMTAyLCAyNTIsIDIxMywgMjQ5LCAxMSwgNTgsIDU0LCAyMzAsIDIxMiwgCisgICAgMjUyLCAyMTIsIDIzNCwgMjI5LCA1OCwgNTQsIDIzMCwgMjEyLCAyNTIsIDIxMSwgMjM0LCAyMzcsIDU4LCA1NCwgMTAyLCAKKyAgICAyNTIsIDIxMCwgMjI3LCA4NCwgNTgsIDU0LCAxMDIsIDI1MiwgMjA5LCAyMTMsIDIyMSwgNTgsIDU0LCAxMDIsIDI1MiwgCisgICAgMjA4LCA1OCwgNTQsIDIzMCwgMjEyLCAyNTIsIDIwNywgMjUzLCAxODgsIDU4LCA1NCwgMjMwLCAyMTIsIDI1MiwgMjA2LCAKKyAgICAyMzEsIDExNiwgNTgsIDU0LCAxMDIsIDI1MiwgMjA1LCAyNTEsIDYyLCA1OCwgNTQsIDEwMiwgMjUyLCAyMDQsIDI0MiwgCisgICAgMTQyLCA1OCwgNTQsIDEwMiwgMjUyLCAyMDMsIDU4LCA1NCwgMTAyLCAyNTIsIDIwMiwgMjEzLCAxOTksIDU4LCA1NCwgMTAyLCAKKyAgICAyNTIsIDIwMSwgNTgsIDU0LCAxMDIsIDI1MiwgMjAwLCA1OCwgNTQsIDEwMiwgMjUyLCAxOTksIDI0MCwgMjM1LCA1OCwgNTQsIAorICAgIDEwMiwgMjUyLCAxOTgsIDU4LCA1NCwgMTAyLCAyNTIsIDE5NywgNTgsIDU0LCAxMDIsIDI1MiwgMTk2LCA1OCwgNTQsIDIzMCwgCisgICAgMjEyLCAyNTIsIDE5NCwgMjE2LCA1NiwgNTgsIDU0LCAxMDIsIDI1MiwgMTkzLCA1OCwgNTQsIDEwMiwgMjUyLCAxOTIsIDU4LCAKKyAgICA1NCwgMTAyLCAyNTIsIDE5MSwgMjQ5LCAxODcsIDU4LCA1NCwgMTAyLCAyNTIsIDE5MCwgNTgsIDU0LCAxMDIsIDI1MiwgCisgICAgMTg5LCA1OCwgNTQsIDEwMiwgMjUyLCAxODgsIDI0MywgNjksIDU4LCA1NCwgMTAyLCAyNTIsIDE4NywgMjUzLCAxNzUsIDU4LCAKKyAgICA1NCwgMTAyLCAyNTIsIDE4NiwgNTgsIDU0LCAxMDIsIDI1MiwgMTg1LCA1OCwgNTQsIDEwMiwgMjUyLCAxODQsIDU4LCA1NCwgCisgICAgMTAyLCAyNTIsIDE4MywgNTgsIDU0LCAxMDIsIDI1MiwgMTgyLCA1OCwgNTQsIDEwMiwgMjUyLCAxODEsIDU4LCA1NCwgMTAyLCAKKyAgICAyNTIsIDE4MCwgNTgsIDU0LCAxMDIsIDI1MiwgMTc5LCA1OCwgNTQsIDEwMiwgMjUyLCAxNzgsIDU4LCA1NCwgMTAyLCAyNTIsIAorICAgIDE3NywgMjMwLCAyMDQsIDU4LCA1NCwgMTAyLCAyNTIsIDE3NiwgNTgsIDU0LCAxMDIsIDI1MiwgMTc1LCAyMTYsIDE5MywgCisgICAgNTgsIDU0LCAxMDIsIDI1MiwgMTc0LCA1OCwgNTQsIDEwMiwgMjUyLCAxNzMsIDU4LCA1NCwgMTAyLCAyNTIsIDE3MiwgNTgsIAorICAgIDU0LCAxMDIsIDI1MiwgMTcxLCA1OCwgNTQsIDEwMiwgMjUyLCAxNzAsIDU4LCA1NCwgMTAyLCAyNTIsIDE2OSwgNTgsIDU0LCAKKyAgICAxMDIsIDI1MiwgMTY4LCA1OCwgNTQsIDEwMiwgMjUyLCAxNjcsIDU4LCA1NCwgMTAyLCAyNTIsIDE2NiwgNTgsIDU0LCAxMDIsIAorICAgIDI1MiwgMTY1LCA1OCwgNTQsIDEwMiwgMjUyLCAxNjQsIDU4LCA1NCwgMTAyLCAyNTIsIDE2MywgMjQxLCAxOTUsIDU4LCA1NCwgCisgICAgMTAyLCAyNTIsIDE0MiwgMjQzLCAyNTMsIDU4LCA1NCwgMTAyLCAyNTIsIDEzOSwgMjUyLCAzNiwgNTgsIDU0LCAxMDIsIAorICAgIDI1MiwgMTM0LCAyMTksIDE5MywgNTgsIDU0LCAxMDIsIDI1MiwgMTMzLCA2OCwgNTgsIDU0LCAxMDIsIDI1MiwgMTMyLCA1OCwgCisgICAgNTQsIDEwMiwgMjUyLCAxMzEsIDIxOCwgMTgxLCA1OCwgNTQsIDEwMiwgMjUyLCAxMzAsIDU4LCA1NCwgMTAyLCAyNTIsIAorICAgIDEyOSwgNTgsIDU0LCAxMDIsIDI1MiwgMTI4LCAyMTMsIDIzOSwgMjUwLCA3NSwgNTgsIDU0LCAxMDIsIDI1MiwgMTI3LCAKKyAgICAyNTAsIDc1LCA1OCwgNTQsIDEwMiwgMjUyLCAxMjYsIDI1MCwgNzYsIDI0MywgMjI1LCA1OCwgNTQsIDEwMiwgMjUyLCAxMjUsIAorICAgIDIxMywgMjQxLCA1OCwgNTQsIDEwMiwgMjUyLCAxMjQsIDU4LCA1NCwgMTAyLCAyNTIsIDEyMywgNTgsIDU0LCAyMzAsIDIxMiwgCisgICAgMjUyLCAxMjIsIDI0NywgMTUwLCA1OCwgNTQsIDEwMiwgMjUyLCAxMjEsIDU4LCA1NCwgMTAyLCAyNTIsIDEyMCwgNTgsIDU0LCAKKyAgICAxMDIsIDI1MiwgMTE4LCA1OCwgNTQsIDEwMiwgMjUyLCAxMTcsIDU4LCA1NCwgMTAyLCAyNTIsIDExNiwgNTgsIDU0LCAxMDIsIAorICAgIDI1MiwgMTE1LCAyNDgsIDEwNCwgNTgsIDU0LCAxMDIsIDI1MiwgMTE0LCA1OCwgNTQsIDEwMiwgMjUyLCAxMTMsIDU4LCA1NCwgCisgICAgMTAyLCAyNTIsIDExMiwgNTgsIDU0LCAxMDIsIDI1MiwgMTExLCA1OCwgNTQsIDEwMiwgMjUyLCAxMTAsIDU4LCA1NCwgMTAyLCAKKyAgICAyMTQsIDE2MywgMjUyLCAxOTUsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNjIsIDU4LCA1NCwgMTAyLCAyMTQsIAorICAgIDE2MywgMjUyLCAxNjEsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNjAsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgCisgICAgMjUyLCAxNTksIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTgsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAKKyAgICAxNTcsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTYsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTUsIAorICAgIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTQsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTMsIDU4LCA1NCwgCisgICAgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTIsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNTEsIDU4LCA1NCwgMTAyLCAKKyAgICAyMTQsIDE2MywgMjUyLCAxNTAsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDksIDU4LCA1NCwgMTAyLCAyMTQsIAorICAgIDE2MywgMjUyLCAxNDgsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDcsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgCisgICAgMjUyLCAxNDYsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDUsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAKKyAgICAxNDQsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDMsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDEsIAorICAgIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxNDAsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxMzgsIDU4LCA1NCwgCisgICAgMTAyLCAyMTQsIDE2MywgMjUyLCAxMzcsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxMzYsIDU4LCA1NCwgMTAyLCAKKyAgICAyMTQsIDE2MywgMjUyLCAxMzUsIDU4LCA1NCwgMTAyLCAyMTQsIDE2MywgMjUyLCAxMTksIDU4LCA1NCwgMTAyLCAyMTQsIAorICAgIDE2MywgMjUyLCAxMDksIDI1NCwgMTQxLCAyMTMsIDE5NiwgMjIxLCA1OCwgMjMyLCAyNDIsIDI1NCwgMTQxLCAyMTMsIDE5NiwgCisgICAgMjIxLCA1OCwgMjQ3LCA3NCwgMjU0LCAxNDEsIDI1MCwgNjYsIDc3LCAyNTQsIDE0MSwgNTAsIDExNiwgMjU0LCAxNDEsIDUwLCAKKyAgICAxMDksIDI1NCwgMTQxLCA1MCwgMTY2LCAyNTQsIDE0MSwgNTAsIDE2MywgMjU0LCAxNDEsIDUwLCAxODAsIDI1NCwgMTQxLCAKKyAgICA1MCwgMTg5LCAyNTQsIDE0MSwgNTAsIDE5OCwgMjU0LCAxNDEsIDUwLCAxOTUsIDI1NCwgMTQxLCA1MCwgMjAwLCAyNTQsIAorICAgIDE0MSwgNTAsIDIxNywgMjAwLCAyNTQsIDE0MSwgNTAsIDIxNiwgMzgsIDI1NCwgMTQxLCA1MCwgMjE3LCAxMTUsIDI1NCwgCisgICAgMTQxLCA1MCwgMjQzLCAyNDAsIDI1NCwgMTQxLCA1MCwgMjQ0LCA4MywgMjU0LCAxNDEsIDUwLCAyMjAsIDM5LCAyNTQsIAorICAgIDE0MSwgNTAsIDIyMSwgMzcsIDI1NCwgMTQxLCA1MCwgMjQ1LCAxNDEsIDI1NCwgMTQxLCA1MCwgMjI5LCAyNiwgMjU0LCAKKyAgICAxNDEsIDUwLCAxMjIsIDI0MCwgMjAwLCAyNTQsIDE0MSwgNTAsIDExNywgMjQwLCAyMDAsIDI1NCwgMTQxLCA1MCwgMTMzLCAKKyAgICAyNDAsIDIwMCwgMjU0LCAxNDEsIDUwLCAyNDMsIDIzNywgMjQwLCAyMDAsIDI1NCwgMTQxLCA1MCwgMjQ0LCA1MCwgMjQwLCAKKyAgICAyMDAsIDI1NCwgMTQxLCA1MCwgMjIwLCA1MywgMjQwLCAyMDAsIDI1NCwgMTQxLCA1MCwgMjIxLCA0MywgMjQwLCAyMDAsIAorICAgIDI1NCwgMTQxLCA1MCwgMjQ1LCAxNTAsIDI0MCwgMjAwLCAyNTQsIDE0MSwgNTAsIDIyOSwgMzEsIDI0MCwgMjAwLCAyNTQsIAorICAgIDE0MSwgNTAsIDEyMiwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgMTE3LCAyMTcsIDEwMCwgMjU0LCAxNDEsIDUwLCAxMzMsIAorICAgIDIxNywgMTAwLCAyNTQsIDE0MSwgNTAsIDI0MywgMjM3LCAyMTcsIDEwMCwgMjU0LCAxNDEsIDUwLCAyNDQsIDUwLCAyMTcsIAorICAgIDEwMCwgMjU0LCAxNDEsIDUwLCAyMjAsIDUzLCAyMTcsIDEwMCwgMjU0LCAxNDEsIDUwLCAyMjEsIDQzLCAyMTcsIDEwMCwgCisgICAgMjU0LCAxNDEsIDUwLCAyNDUsIDE1MCwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgMjI5LCAzMSwgMjE3LCAxMDAsIDI1NCwgCisgICAgMTQxLCA1MCwgMjE3LCAyMDEsIDIxNywgMTAwLCAyNTQsIDE0MSwgNTAsIDIxNiwgMzksIDIxNywgMTAwLCAyNTQsIDE0MSwgCisgICAgNTAsIDIxNywgMTE2LCAyMTcsIDEwMCwgMjU0LCAxNDEsIDUwLCAyNDMsIDI0MSwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgCisgICAgMjQ0LCA4NCwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgMjIwLCA0MCwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgMjIxLCAKKyAgICAzOCwgMjE3LCAxMDAsIDI1NCwgMTQxLCA1MCwgMjQ1LCAxNDIsIDIxNywgMTAwLCAyNTQsIDE0MSwgNTAsIDIyOSwgMjcsIAorICAgIDIxNywgMTAwLCAyNTQsIDE0MSwgMjEzLCAyNTUsIDI1MiwgNDgsIDIxNSwgMTQ0LCAyNTQsIDE0MSwgMjEzLCAyNTUsIDI0NCwgCisgICAgNjEsIDIxOSwgNCwgMjU0LCAxNDEsIDIxMywgMjU1LCAyMjIsIDk1LCAyMTksIDQsIDI1NCwgMTQxLCAyMTMsIDI1NSwgMjE3LCAKKyAgICAxMjIsIDIxOSwgNCwgMjU0LCAxNDEsIDIxMywgMjU1LCAyNDMsIDIzMCwgMjE5LCA0LCAyNTQsIDE0MSwgMjQ2LCAzNiwgCisgICAgMjMxLCAxNTUsIDI0NCwgNjEsIDIxOSwgNCwgMjU0LCAxNDEsIDIzMiwgMjI4LCAyMzEsIDE1NSwgMjQ0LCA2MSwgMjE5LCA0LCAKKyAgICAyNTQsIDE0MSwgMjMxLCAxNTUsIDIyMiwgOTUsIDIxOSwgNCwgMjU0LCAxNDEsIDIzMSwgMTU1LCAyMTcsIDEyMiwgMjE5LCAKKyAgICA0LCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAxMjIsIDIyNCwgMTY2LCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAxMjIsIAorICAgIDI0MiwgOSwgMjUsIDI1NCwgMTY3LCAyNTMsIDExMCwgMTIyLCAyNDYsIDU0LCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAKKyAgICAxODAsIDI1LCAyNTQsIDE2NywgMjUzLCAxMTAsIDI0NCwgODMsIDI1LCAyNTQsIDE2NywgMjUzLCAxMTAsIDI0NCwgNTAsIAorICAgIDI0MCwgMjAwLCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAyNDQsIDUwLCAyMTcsIDEwMCwgMjUsIDI1NCwgMTY3LCAyNTMsIAorICAgIDExMCwgMjQ0LCA4NCwgMjE3LCAxMDAsIDI1LCAyNTQsIDE2NywgMjUzLCAxMTAsIDI0NCwgNTAsIDIxOCwgMTgsIDI1LCAKKyAgICAyNTQsIDE2NywgMjUzLCAxMTAsIDIxNywgMjAxLCAyMTgsIDE4LCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAyNDQsIDg0LCAKKyAgICAyMTgsIDE4LCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAxMjIsIDI0MCwgMjAxLCAyMTgsIDE4LCAyNSwgMjU0LCAxNjcsIAorICAgIDI1MywgMTEwLCAyNDQsIDUwLCAyNDAsIDIwMSwgMjE4LCAxOCwgMjUsIDI1NCwgMTY3LCAyNTMsIDExMCwgMTIyLCAyMTcsIAorICAgIDEwMSwgMjE4LCAxOCwgMjUsIDI1NCwgMTY3LCAyNTMsIDExMCwgMjQ0LCA1MCwgMjE3LCAxMDEsIDIxOCwgMTgsIDI1LCAKKyAgICAyNTQsIDE2NywgMjUzLCAxMTAsIDI0NCwgNTAsIDIxOSwgOTAsIDI1LCAyNTQsIDE2NywgMjUzLCAxMTAsIDIxNywgMjAxLCAKKyAgICAyMTksIDkwLCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAyNDQsIDg0LCAyMTksIDkwLCAyNSwgMjU0LCAxNjcsIDI1MywgCisgICAgMTEwLCAxMjIsIDI0MCwgMjAxLCAyMTksIDkwLCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAyNDQsIDUwLCAyNDAsIDIwMSwgCisgICAgMjE5LCA5MCwgMjUsIDI1NCwgMTY3LCAyNTMsIDExMCwgMTIyLCAyMTcsIDEwMSwgMjE5LCA5MCwgMjUsIDI1NCwgMTY3LCAKKyAgICAyNTMsIDExMCwgMjE3LCAyMDEsIDIxNywgMTAxLCAyMTksIDkwLCAyNSwgMjU0LCAxNjcsIDI1MywgMTEwLCAyNDQsIDg0LCAKKyAgICAyMTcsIDEwMSwgMjE5LCA5MCwgMjUsIDI1NCwgMTY3LCAyNTMsIDExMCwgMjE3LCAyMDEsIDIzMCwgMjM0LCAyNSwgMjU0LCAKKyAgICAxNjcsIDI0MSwgMTg5LCAxMjIsIDIyNSwgMTY0LCAyNSwgMjU0LCAxNjcsIDIxNywgMTM0LCAxMTYsIDI1LCAyNTQsIDE2NywgCisgICAgMjQxLCAxODYsIDExNiwgMjUsIDI1NCwgMTY3LCAyNDUsIDY3LCAxMDksIDI1LCAyNTQsIDE2NywgMjE3LCAxMzQsIDEwOSwgCisgICAgMjUsIDI1NCwgMTY3LCAyNDksIDgsIDExNywgMjQ2LCA1MywgMjUsIDI1NCwgMTY3LCAyNDUsIDY3LCAxMTcsIDI0NiwgNTMsIAorICAgIDI1LCAyNTQsIDE2NywgMjE2LCAxNjEsIDE4MCwgMjUsIDI1NCwgMTY3LCAyMTYsIDE2MSwgMjE3LCAyMDAsIDI1LCAyNTQsIAorICAgIDE2NywgMjE2LCAxNjEsIDIxNywgMjAxLCAyNTQsIDUwLCAxNywgMjUsIDI1NCwgMTY3LCAyNDEsIDE4NiwgMjE3LCAyMDAsIAorICAgIDI1LCAyNTQsIDE2NywgMjMxLCAxMDgsIDIxNywgMjAwLCAyNSwgMjU0LCAxNjcsIDIxNywgMTM0LCAyMTcsIDIwMCwgMjUsIAorICAgIDI1NCwgMTY3LCAyMTcsIDEzNCwgMjE3LCAxMTUsIDI1LCAyNTQsIDE2NywgMjE2LCAxNjEsIDI0NCwgODMsIDI1LCAyNTQsIAorICAgIDE2NywgMjE2LCAxNjEsIDI0NCwgODQsIDI1NCwgNTAsIDE3LCAyNSwgMjU0LCAxNjcsIDI0MSwgMTg2LCAyNDQsIDgzLCAyNSwgCisgICAgMjU0LCAxNjcsIDIxNywgMTM0LCAyNDQsIDgzLCAyNSwgMjU0LCAxNjcsIDIxNywgMTM0LCAxMjIsIDI0MCwgMjAwLCAyNSwgCisgICAgMjU0LCAxNjcsIDIxNywgMTM0LCAxMzMsIDI0MCwgMjAwLCAyNSwgMjU0LCAxNjcsIDI0NSwgNjcsIDI0NCwgNTAsIDI0MCwgCisgICAgMjAwLCAyNSwgMjU0LCAxNjcsIDIxNiwgMTYxLCAyNDQsIDUwLCAyNDAsIDIwMCwgMjUsIDI1NCwgMTY3LCAyMTcsIDEzNCwgCisgICAgMjQ0LCA1MCwgMjQwLCAyMDAsIDI1LCAyNTQsIDE2NywgMjUwLCAxNTksIDI0NCwgNTAsIDI0MCwgMjAwLCAyNSwgMjU0LCAKKyAgICAxNjcsIDIzMCwgNCwgMjQ0LCA1MCwgMjQwLCAyMDAsIDI1LCAyNTQsIDE2NywgMjE3LCAxMzQsIDEyMiwgMjE3LCAxMDAsIAorICAgIDI1LCAyNTQsIDE2NywgMjE3LCAxMzQsIDI0NCwgNTAsIDIxNywgMTAwLCAyNSwgMjU0LCAxNjcsIDI0OCwgOCwgMjQ0LCA1MCwgCisgICAgMjMwLCAyMzQsIDI1LCAyNTQsIDE2NywgMjE5LCA1OCwgMjQ0LCA4NCwgMjMwLCAyMzQsIDI1LCAxMjIsIDE1MSwgNTIsIDI1LCAKKyAgICAxMjIsIDE1MSwgNSwgMjU0LCA1MCwgMTcsIDI1LCAxMTcsIDIxNywgMTIwLCA1MiwgMjUsIDEzMywgMjI0LCAxNjUsIDUyLCAKKyAgICAyNSwgMjEzLCAzNiwgNTIsIDI1LCAyMTgsIDE5LCA1MiwgMjUsIDI0NiwgNTUsIDUyLCAyNSwgMjI3LCAxMTAsIDUyLCAyNSwgCisgICAgMTE3LCAyMjcsIDEwOSwgNTIsIDI1LCAxMzMsIDIyNywgMTA5LCA1MiwgMjUsIDI0MywgMjM3LCAyMjcsIDEwOSwgNTIsIDI1LCAKKyAgICAyNDQsIDUwLCAyMjcsIDEwOSwgNTIsIDI1LCAyMzEsIDEwMiwgNTIsIDI1LCAyMzMsIDE3OSwgMjUyLCA0OCwgNTIsIDI1LCAKKyAgICAyMzIsIDIyMywgNTIsIDI1LCAyMjYsIDI1NSwgNTIsIDI1LCAyMTMsIDE0NywgNTIsIDI1LCAyNTMsIDE1OCwgNTIsIDI1LCAKKyAgICAyNTMsIDE3MSwgNTIsIDI1LCAyNDIsIDEyMCwgNTIsIDI1LCAyMTYsIDE0NCwgMjUyLCA0OCwgNTIsIDI1LCAyMTIsIDgwLCAKKyAgICA1MiwgMjIzLCAxMDAsIDIyMSwgMzQsIDUyLCAyMjMsIDEwMCwgMjE1LCAxNTUsIDUyLCAyMjMsIDEwMCwgMjIxLCA2MiwgNTIsIAorICAgIDIyMywgMTAwLCAyMjEsIDMyLCA1MiwgMjIzLCAxMDAsIDI0NywgMTY1LCAyMjEsIDMyLCA1MiwgMjIzLCAxMDAsIDIyMCwgCisgICAgOTQsIDUyLCAyMjMsIDEwMCwgMjQ4LCA0LCA1MiwgMjIzLCAxMDAsIDIyNCwgMTUxLCA1MiwgMjIzLCAxMDAsIDIyMSwgNTAsIAorICAgIDUyLCAyMjMsIDEwMCwgMjQ2LCAxNSwgNTIsIDIyMywgMTAwLCAyNTMsIDE1MywgNTIsIDIyMywgMTAwLCAyNTAsIDEwNSwgCisgICAgNTIsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyMjYsIDg4LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjI1LCAxNTgsIDI0MSwgCisgICAgMjE5LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjE3LCAyNTIsIDI0MSwgMjE5LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjUwLCAKKyAgICAxNzksIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNTAsIDM4LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjEzLCAyMDgsIDIyNiwgCisgICAgMTksIDI0NywgMTQzLCA1LCAyNDEsIDE5NSwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDI0MywgNjEsIDIyNiwgMTksIDI0NywgCisgICAgMTQzLCA1LCAyMTcsIDcwLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgNjgsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNTEsIDk1LCAKKyAgICAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjIwLCAyMDksIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNDksIDE4MSwgMjI2LCAxOSwgCisgICAgMjQ3LCAxNDMsIDUsIDIzMSwgMjQ3LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjMxLCAxOTksIDIyNiwgMTksIDI0NywgMTQzLCAKKyAgICA1LCAyMjIsIDEzNCwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDIzMywgOSwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDI1MSwgCisgICAgMTEzLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjUwLCAxNjMsIDIyNSwgMTY3LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjQ3LCAKKyAgICA4NywgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDI0OSwgMTYxLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjIwLCAxNSwgMjI2LCAKKyAgICAxOSwgMjQ3LCAxNDMsIDUsIDI0OSwgMTYyLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjUxLCAyMzksIDIyNiwgMTksIDI0NywgCisgICAgMTQzLCA1LCAyMjAsIDE5NiwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDI0MCwgMjM1LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgCisgICAgMjQxLCAxNjMsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNTEsIDQxLCAyMzMsIDYwLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgCisgICAgMjUwLCAxNTYsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyMjQsIDQ1LCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjQ1LCAxODYsIAorICAgIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNDYsIDYxLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjE2LCA2OSwgMjI2LCAxOSwgCisgICAgMjQ3LCAxNDMsIDUsIDI1MSwgMjQyLCAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjI1LCAxNjgsIDIxNiwgMTkzLCAyMjYsIDE5LCAKKyAgICAyNDcsIDE0MywgNSwgMjE0LCAxNDAsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyMjYsIDE0NiwgMjI2LCAxOSwgMjQ3LCAxNDMsIAorICAgIDUsIDIyMywgOTIsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyMzIsIDI1MiwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDIyNiwgCisgICAgMjM5LCAyNTIsIDEwMSwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDI0NCwgMTcsIDIyNiwgMTksIDI0NywgMTQzLCA1LCAyNDIsIAorICAgIDExNSwgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDIxOSwgNTksIDIyNiwgMTksIDI0NywgMTQzLCA1LCAzLCAyNTMsIDg0LCAKKyAgICAyMjYsIDE5LCAyNDcsIDE0MywgNSwgMjE0LCAxNiwgMjUyLCA2NywgMjI2LCAxOSwgMjQ3LCAxNDMsIDUsIDM3LCAyMjcsIAorICAgIDExMiwgOTAsIDIzMiwgMTIwLCAxLCA2MSwgMjMyLCAxMjAsIDEsIDc0LCAyMzIsIDEyMCwgMSwgMjUzLCA3NCwgMjMyLCAKKyAgICAxMjAsIDEsIDI1MSwgMTk2LCAyMzIsIDEyMCwgMSwgMjQzLCAxNzcsIDIzMiwgMTIwLCAxLCAyNDksIDMsIDIzMiwgMTIwLCAKKyAgICAxLCA3MiwgMjMyLCAxMjAsIDEsIDIxNCwgODIsIDIzMiwgMTIwLCAxLCAyMTIsIDE1MiwgMjMyLCAxMjAsIDEsIDIxNywgCisgICAgMTYzLCAyMzIsIDEyMCwgMSwgMjM1LCAxNDIsIDIzMiwgMTIwLCAxLCAyMzUsIDI3LCAyMzIsIDEyMCwgMSwgMjI0LCAyNDAsIAorICAgIDIzMiwgMTIwLCAxLCAxNTAsIDIzMiwgMTIwLCAxLCAxODMsIDIzMiwgMTIwLCAxLCAyMDQsIDIzMiwgMTIwLCAxLCAyMzAsIAorICAgIDIzNSwgMjMyLCAxMjAsIDEsIDIyOCwgMTk5LCAyMzIsIDEyMCwgMSwgNjksIDIzMiwgMTIwLCAxLCAyMjYsIDIyOSwgMjMyLCAKKyAgICAxMjAsIDEsIDIzNCwgNTYsIDIzMiwgMTIwLCAxLCAxNDksIDIzMiwgMTIwLCAxLCAxOTcsIDIzMiwgMTIwLCAxLCAyMTgsIAorICAgIDk5LCAyMzIsIDEyMCwgMSwgMjE2LCAxMTgsIDIzMiwgMTIwLCAxLCAyNTQsIDMyLCAyMzIsIDEyMCwgMSwgMjQ1LCAxMDgsIAorICAgIDIzMiwgMTIwLCAxLCAyNDIsIDQxLCAyMzIsIDEyMCwgMSwgMjEzLCAxNjYsIDI1MCwgMTY5LCAxLCA2MSwgMjUwLCAxNjksIAorICAgIDEsIDIyNiwgMjE1LCAyNTAsIDE2OSwgMSwgMjQ5LCAzLCAyNTAsIDE2OSwgMSwgMTUwLCAyNTAsIDE2OSwgMSwgMjE1LCA5MCwgCisgICAgMjUwLCAxNjksIDEsIDE0OSwgMjUwLCAxNjksIDEsIDIzMywgODYsIDI1MCwgMTY5LCAxLCAyNTQsIDIzNCwgMjUwLCAxNjksIAorICAgIDEsIDIyNCwgMjQwLCAyNTAsIDE2OSwgMSwgMjUzLCA3NCwgMjUwLCAxNjksIDEsIDE4MywgMjUwLCAxNjksIDEsIDc1LCAKKyAgICAyNTAsIDE2OSwgMSwgMjQ4LCAxNjYsIDI1MCwgMTY5LCAxLCAyMTgsIDk5LCAyNTAsIDE2OSwgMSwgMjIxLCAyNiwgMjUwLCAKKyAgICAxNjksIDEsIDIyMSwgMjUsIDI1MCwgMTY5LCAxLCAxOTcsIDI1MCwgMTY5LCAxLCAyNTAsIDI1MSwgMjUwLCAxNjksIDEsIAorICAgIDY5LCAyNTAsIDE2OSwgMSwgMjI4LCAxOTksIDI1MCwgMTY5LCAxLCAyMTMsIDE2NiwgMjUwLCAxNjksIDEsIDIwNCwgMjUwLCAKKyAgICAxNjksIDEsIDIxNiwgMTE3LCAyNTAsIDE2OSwgMSwgMjI2LCAyMjksIDI1MCwgMTY5LCAxLCAyMTksIDE1OCwgMjUwLCAxNjksIAorICAgIDEsIDcyLCAyNTAsIDE2OSwgMSwgNzQsIDI1MCwgMTY5LCAxLCAyMTUsIDg3LCAyNTAsIDE2OSwgMSwgMjM1LCAyNywgMjUwLCAKKyAgICAxNjksIDEsIDIzNSwgMTgsIDI1MCwgMTY5LCAxLCAyMjksIDIzMCwgMjUwLCAxNjksIDEsIDIxNSwgOTIsIDI1MCwgMTY5LCAKKyAgICAxLCAyNDMsIDE3NywgMjUwLCAxNjksIDEsIDI0MywgMTEyLCAyNTAsIDE2OSwgMSwgMjE5LCAxMDcsIDI1MCwgMTY5LCAxLCAKKyAgICAyMTksIDEwNiwgMjUwLCAxNjksIDEsIDIyOSwgMTYxLCAyNTAsIDE2OSwgMSwgMjM2LCAyOCwgMjUwLCAxNjksIDEsIDI1MCwgCisgICAgMjUwLCAyNTAsIDE2OSwgMSwgMjE2LCAxMTgsIDI1MCwgMTY5LCAxLCAyMTUsIDg5LCAyNTAsIDE2OSwgMSwgMjIzLCA4MiwgCisgICAgMjUwLCAxNjksIDEsIDIzMSwgMTkyLCAyNTAsIDE2OSwgMSwgMjMxLCAxOTEsIDI1MCwgMTY5LCAxLCAyMzEsIDE5MCwgMjUwLCAKKyAgICAxNjksIDEsIDIzMSwgMTg5LCAyNTAsIDE2OSwgMSwgMjMzLCA4NSwgMjUwLCAxNjksIDEsIDI0NSwgMTkwLCAyNTAsIDE2OSwgCisgICAgMSwgMjE1LCA4OCwgNTMsIDMyLCAxLCA2MSwgNTMsIDMyLCAxLCAyNTEsIDI1MSwgNTMsIDMyLCAxLCAyMzQsIDE4OCwgNTMsIAorICAgIDMyLCAxLCAyNDgsIDQxLCA1MywgMzIsIDEsIDc0LCA1MywgMzIsIDEsIDIxNCwgMjMyLCA1MywgMzIsIDEsIDIxMiwgODcsIAorICAgIDUzLCAzMiwgMSwgMjQxLCAyMjIsIDUzLCAzMiwgMSwgMjE3LCAxNDgsIDUzLCAzMiwgMSwgNzIsIDUzLCAzMiwgMSwgMTgxLCAKKyAgICA1MywgMzIsIDEsIDI0NSwgMTMxLCA1MywgMzIsIDEsIDI0NSwgMTE3LCA1MywgMzIsIDEsIDI0NSwgMTA4LCA1MywgMzIsIDEsIAorICAgIDI0NSwgNDAsIDUzLCAzMiwgMSwgNzUsIDUzLCAzMiwgMSwgMjI2LCA5NiwgNTMsIDMyLCAxLCAyMjAsIDI0MywgNTMsIDMyLCAKKyAgICAxLCAyMzMsIDIzOCwgNTMsIDMyLCAxLCAyNDUsIDU1LCA1MywgMzIsIDEsIDI0NSwgNDUsIDUzLCAzMiwgMSwgMjE3LCAyMjksIAorICAgIDUzLCAzMiwgMSwgNjksIDUzLCAzMiwgMSwgMjQ1LCAxMzQsIDUzLCAzMiwgMSwgMjI2LCAxMiwgNTMsIDMyLCAxLCAyMzQsIAorICAgIDEyNSwgNTMsIDMyLCAxLCAyNDUsIDE1OSwgNTMsIDMyLCAxLCAyNDUsIDQ3LCA1MywgMzIsIDEsIDI1MCwgNjcsIDUzLCAzMiwgCisgICAgMSwgMjM2LCAyOCwgNTMsIDMyLCAxLCAyMTUsIDkyLCA1MywgMzIsIDIyOCwgNTQsIDExNiwgNTMsIDMyLCAyMjgsIDU0LCAKKyAgICAxODAsIDUzLCAzMiwgMjI4LCA1NCwgMjE3LCAyMDAsIDUzLCAzMiwgMjI4LCA1NCwgMjQ0LCA4MywgMjQyLCAxMjksIDEsIAorICAgIDI1NCwgMTExLCAyNDIsIDEyOSwgMSwgMjUyLCA4MiwgMjQyLCAxMjksIDEsIDI0MiwgMTg3LCAyNDIsIDEyOSwgMSwgMjQ4LCAKKyAgICAxNDgsIDI0MiwgMTI5LCAxLCAyNTQsIDEwNywgMjQyLCAxMjksIDEsIDIyNCwgMjIzLCAyNDIsIDEyOSwgMSwgMjM1LCAxNTMsIAorICAgIDI0MiwgMTI5LCAxLCAyNDIsIDIwLCAyNDIsIDEyOSwgMSwgMjE3LCAxMTEsIDI0MiwgMTI5LCAxLCAyNDUsIDE0MCwgMjQyLCAKKyAgICAxMjksIDEsIDIzMywgMjExLCAyNDIsIDEyOSwgMSwgMjMzLCAxMzYsIDI0MiwgMTI5LCAxLCAyMzEsIDI0MiwgMjQyLCAxMjksIAorICAgIDEsIDIzMCwgNiwgMjQyLCAxMjksIDEsIDIzNSwgMTIwLCAyNDIsIDEyOSwgMSwgMjE1LCAxMDcsIDI0MiwgMTI5LCAxLCAKKyAgICAyMjYsIDE5NiwgMjQyLCAxMjksIDEsIDIyOSwgMjYsIDI0MiwgMTI5LCAxLCAyMjQsIDU2LCAyNDIsIDEyOSwgMSwgMjIyLCAKKyAgICAxMzYsIDI0MiwgMTI5LCAxLCAyMTcsIDIxMiwgMjQyLCAxMjksIDEsIDIxMywgMjE5LCAyNDIsIDEyOSwgMSwgMjQ0LCAxNDYsIAorICAgIDI0MiwgMTI5LCAxLCAyMzYsIDMyLCAyNDIsIDEyOSwgMSwgMjQwLCAxOTEsIDI0MiwgMTI5LCAxLCAyMjcsIDcsIDI0MiwgCisgICAgMTI5LCAxLCAyMjksIDMxLCAyNDAsIDIwMCwgMjE1LCAxNzksIDEsIDI1NCwgNTYsIDIxNSwgMTc5LCAxLCAyNTEsIDIwMywgCisgICAgMjE1LCAxNzksIDEsIDI0MywgODQsIDIxNSwgMTc5LCAxLCAyMzQsIDEzOCwgMjE1LCAxNzksIDEsIDI0OCwgNSwgMjE1LCAKKyAgICAxNzksIDEsIDI0MSwgNTQsIDIxNSwgMTc5LCAxLCAyMTMsIDIxNCwgMjE1LCAxNzksIDEsIDIxMiwgNzgsIDIxNSwgMTc5LCAKKyAgICAxLCAyNDAsIDIyOCwgMjE1LCAxNzksIDEsIDIxNywgMTgzLCAyMTUsIDE3OSwgMSwgMjEyLCAyMjQsIDIxNSwgMTc5LCAxLCAKKyAgICAyMzQsIDI1NCwgMjE1LCAxNzksIDEsIDIyMCwgMjAwLCAyMTUsIDE3OSwgMSwgMjMzLCAxMjIsIDIxNSwgMTc5LCAxLCAyMzEsIAorICAgIDEyOSwgMjE1LCAxNzksIDEsIDI0NywgMjI5LCAyMTUsIDE3OSwgMSwgMjI4LCA1MCwgMjE1LCAxNzksIDEsIDIxMiwgOCwgCisgICAgMjE1LCAxNzksIDEsIDIyMiwgMTYzLCAyMTUsIDE3OSwgMSwgMjU0LCAxMDMsIDIxNSwgMTc5LCAxLCAyMjUsIDM1LCAyMTUsIAorICAgIDE3OSwgMSwgMjIyLCAxOTQsIDIxNSwgMTc5LCAxLCAyMjQsIDE4MCwgMjE1LCAxNzksIDEsIDIyNCwgMzYsIDIxNSwgMTc5LCAKKyAgICAxLCAyMTcsIDE1MiwgMjE1LCAxNzksIDEsIDI0MiwgMjIwLCAyMTUsIDE3OSwgMSwgMTA4LCAyMTUsIDE3OSwgMSwgNzIsIAorICAgIDIxNSwgMTc5LCAxLCA2OSwgMjE1LCAxNzksIDEsIDIxOSwgMTE3LCAyMTUsIDE3OSwgMjEzLCAxOTYsIDI0NywgMTI0LCA1MywgCisgICAgMjI2LCA0NSwgNSwgNjEsIDUzLCAyMjYsIDQ1LCA1LCA3MiwgNTMsIDIyNiwgNDUsIDUsIDY5LCA1MywgMjI2LCA0NSwgNSwgCisgICAgMTgxLCA1MywgMjI2LCA0NSwgNSwgMjMzLCAyMzgsIDUzLCAyMjYsIDQ1LCA1LCAyNDMsIDExMCwgNTMsIDIyNiwgNDUsIDUsIAorICAgIDI0MiwgOTIsIDUzLCAyMjYsIDQ1LCA1LCAyMTMsIDE1MywgNTMsIDIyNiwgNDUsIDUsIDI1MCwgMjE5LCA1MywgMjI2LCA0NSwgCisgICAgNSwgMjM1LCAxMzksIDUzLCAyMjYsIDQ1LCA1LCAyMzUsIDExMCwgNTMsIDIyNiwgNDUsIDUsIDIxOCwgNTIsIDUzLCAyMjYsIAorICAgIDQ1LCA1LCAyMTYsIDgyLCA1MywgMjI2LCA0NSwgNSwgMjQ4LCAxNjQsIDUzLCAyMjYsIDQ1LCA1LCAyNDcsIDIxMSwgNTMsIAorICAgIDIyNiwgNDUsIDUsIDI0NiwgMzMsIDUzLCAyMjYsIDQ1LCA1LCAyMTcsIDE2MSwgNTMsIDIyNiwgNDUsIDUsIDE5MywgNTMsIAorICAgIDIyNiwgNDUsIDUsIDI1MiwgMTA3LCA1MywgMjI2LCA0NSwgNSwgMjQ0LCAxNjQsIDUzLCAyMjYsIDQ1LCA1LCAyMDUsIDUzLCAKKyAgICAyMjYsIDQ1LCA1LCAyMjgsIDkyLCA1MywgMjI2LCA0NSwgNSwgMTg4LCA1MywgMjI2LCA0NSwgNSwgMjMxLCA0MiwgNTMsIAorICAgIDIyNiwgNDUsIDUsIDIzMCwgMTcyLCA1MywgMjI2LCA0NSwgNSwgMTg2LCA1MywgMjI2LCA0NSwgNSwgMjE1LCAxLCA1MywgCisgICAgMjI2LCA0NSwgNSwgMjE0LCAxNTQsIDUzLCAyMjYsIDQ1LCA1LCAyMDMsIDUzLCAyMjYsIDQ1LCA1LCAyMjMsIDUxLCA1MywgCisgICAgMjI2LCA0NSwgNSwgMjMzLCAxNTcsIDUzLCAyMjYsIDQ1LCA1LCAyMjIsIDIwMiwgNTMsIDIyNiwgNDUsIDUsIDIxMiwgMTA5LCAKKyAgICA1MywgMjI2LCA0NSwgNSwgMjIxLCAyNCwgNTMsIDIyNiwgNDUsIDUsIDIxOSwgMTU3LCA1MywgMjI2LCA0NSwgNSwgMTU5LCAKKyAgICA1MywgMjI2LCA0NSwgNSwgMjUzLCAxMDIsIDUzLCAyMjYsIDQ1LCA1LCAyNTMsIDEwMSwgNTMsIDIyNiwgNDUsIDUsIDI1MywgCisgICAgMTAwLCA1MywgMjI2LCA0NSwgNSwgMjEzLCAxMzAsIDUzLCAyMjYsIDQ1LCA1LCAyNDgsIDE0NSwgNTMsIDIyNiwgNDUsIDUsIAorICAgIDI0OCwgMTQ0LCA1MywgMjI2LCA0NSwgNSwgMjUyLCA4OCwgNTMsIDIyNiwgNDUsIDUsIDI1MSwgMTQsIDUzLCAyMjYsIDQ1LCAKKyAgICAyMTMsIDE5NiwgMjQ3LCAxMjQsIDUzLCAyMjYsIDQ1LCA1MCwgMTE2LCA1MywgMjI2LCA0NSwgNTAsIDEwOSwgNTMsIDIyNiwgCisgICAgNDUsIDUwLCAyMTcsIDIwMCwgNTMsIDIyNiwgNDUsIDUwLCAyMTYsIDM4LCA1MywgMjI2LCA0NSwgNTAsIDI0MCwgMjAwLCAKKyAgICAxNzEsIDYsIDEsIDE4NCwgNzIsIDE3MSwgNiwgMSwgMTg0LCA3NCwgMTcxLCA2LCAxLCAxODQsIDYxLCAxNzEsIDYsIDEsIAorICAgIDE4NCwgMjU0LCAxMTQsIDE3MSwgNiwgMSwgMTg0LCA3NSwgMTcxLCA2LCAxLCAxODQsIDIyNywgNDksIDE3MSwgNiwgMSwgCisgICAgMjIwLCAxNzUsIDcyLCAxNzEsIDYsIDEsIDIyMCwgMTc1LCA3NCwgMTcxLCA2LCAxLCAyMjAsIDE3NSwgNjEsIDE3MSwgNiwgCisgICAgMSwgMjIwLCAxNzUsIDI1NCwgMTE0LCAxNzEsIDYsIDEsIDIyMCwgMTc1LCA3NSwgMTcxLCA2LCAxLCAyMjAsIDE3NSwgMjI3LCAKKyAgICA0OSwgMTcxLCA2LCAxLCAyNTMsIDgzLCAxNzEsIDYsIDEsIDIyNiwgMjQwLCAxNzEsIDYsIDEsIDIxMywgMTgzLCAxNzEsIDYsIAorICAgIDEsIDIxMywgMzUsIDE3MSwgNiwgMSwgMjQyLCA0MSwgMTcxLCA2LCAxLCAyMjYsIDg2LCAxNzEsIDYsIDEsIDI1MSwgMjQyLCAKKyAgICAxNzEsIDYsIDEsIDIxNywgMjE5LCAxNzEsIDYsIDEsIDI0OCwgMjgsIDE3MSwgNiwgMSwgMjUwLCA2NCwgMTcxLCA2LCAxLCAKKyAgICAyMzUsIDEyNSwgMTcxLCA2LCAxLCAyMzQsIDE5NSwgMTcxLCA2LCAxLCAyNDMsIDU5LCAxNzEsIDYsIDEsIDI0NSwgMTU5LCAKKyAgICAxNzEsIDYsIDEsIDIxNCwgMjI3LCAxNzEsIDYsIDEsIDI0NSwgMjUsIDE3MSwgNiwgMSwgMjE3LCAxNDcsIDE3MSwgNiwgMSwgCisgICAgMjQ1LCA0NSwgMTcxLCA2LCAxLCAyMTIsIDg1LCAxNzEsIDYsIDEsIDI0NSwgNDAsIDE3MSwgNiwgMSwgMjEyLCA2NiwgMTcxLCAKKyAgICA2LCAxLCAyNDUsIDU1LCAxNzEsIDYsIDEsIDI0NSwgMTMxLCAxNzEsIDYsIDEsIDI0NSwgMTE3LCAxNzEsIDYsIDEsIDI0NSwgCisgICAgMTA4LCAxNzEsIDYsIDEsIDI0NSwgOTYsIDE3MSwgNiwgMSwgMjI3LCA4NSwgMTcxLCA2LCAxLCAyNDUsIDUsIDE3MSwgMywgCisgICAgMSwgMTg0LCA3MiwgMTcxLCAzLCAxLCAxODQsIDc0LCAxNzEsIDMsIDEsIDE4NCwgNjEsIDE3MSwgMywgMSwgMTg0LCAyNTQsIAorICAgIDExNCwgMTcxLCAzLCAxLCAxODQsIDc1LCAxNzEsIDMsIDEsIDE4NCwgMjI3LCA0OSwgMTcxLCAzLCAxLCAyMjAsIDE3NSwgCisgICAgNzIsIDE3MSwgMywgMSwgMjIwLCAxNzUsIDc0LCAxNzEsIDMsIDEsIDIyMCwgMTc1LCA2MSwgMTcxLCAzLCAxLCAyMjAsIAorICAgIDE3NSwgMjU0LCAxMTQsIDE3MSwgMywgMSwgMjIwLCAxNzUsIDc1LCAxNzEsIDMsIDEsIDIyMCwgMTc1LCAyMjcsIDQ5LCAKKyAgICAxNzEsIDMsIDEsIDI1MywgODMsIDE3MSwgMywgMSwgMjI2LCAyNDAsIDE3MSwgMywgMSwgMjEzLCAxODMsIDE3MSwgMywgMSwgCisgICAgMjEzLCAzNSwgMTcxLCAzLCAxLCAyNDIsIDQxLCAxNzEsIDMsIDEsIDIyNiwgODYsIDE3MSwgMywgMSwgMjUxLCAyNDIsIAorICAgIDE3MSwgMywgMSwgMjE3LCAyMTksIDE3MSwgMywgMSwgMjQ4LCAyOCwgMTcxLCAzLCAxLCAyNTAsIDY0LCAxNzEsIDMsIDEsIAorICAgIDIzNSwgMTI1LCAxNzEsIDMsIDEsIDIzNCwgMTk1LCAxNzEsIDMsIDEsIDI0MywgNTksIDE3MSwgMywgMSwgMjQ1LCAxNTksIAorICAgIDE3MSwgMywgMSwgMjE0LCAyMjcsIDE3MSwgMywgMSwgMjQ1LCAyNSwgMTcxLCAzLCAxLCAyMTcsIDE0NywgMTcxLCAzLCAxLCAKKyAgICAyNDUsIDQ1LCAxNzEsIDMsIDEsIDIxMiwgODUsIDE3MSwgMywgMSwgMjQ1LCA0MCwgMTcxLCAzLCAxLCAyMTIsIDY2LCAxNzEsIAorICAgIDMsIDEsIDI0NSwgNTUsIDE3MSwgMywgMSwgMjQ1LCAxMzEsIDE3MSwgMywgMSwgMjQ1LCAxMTcsIDE3MSwgMywgMSwgMjQ1LCAKKyAgICAxMDgsIDE3MSwgMywgMSwgMjQ1LCA5NiwgMTcxLCAzLCAxLCAyMjcsIDg1LCAxNzEsIDMsIDEsIDI0NSwgNSwgMjIwLCAyNDksIAorICAgIDEsIDIyNiwgODQsIDIyMCwgMjQ5LCAxLCAyMTYsIDIxOCwgMjIwLCAyNDksIDEsIDIzNCwgMTAwLCAyMjAsIDI0OSwgMSwgCisgICAgMjQ0LCAxMTYsIDIyMCwgMjQ5LCAxLCAyMTcsIDEyNSwgMjIwLCAyNDksIDEsIDIxOSwgMjQyLCAyMjAsIDI0OSwgMSwgMjE4LCAKKyAgICAyMTQsIDIyMCwgMjQ5LCAxLCAyNDksIDI1NCwgMjIwLCAyNDksIDEsIDIxMywgMzcsIDIyMCwgMjQ5LCAxLCAyNDAsIDE5OSwgCisgICAgMjIwLCAyNDksIDEsIDI1MSwgMTgzLCAyMjAsIDI0OSwgMSwgMjQ4LCA0MCwgMjIwLCAyNDksIDEsIDI0MywgOTYsIDIyMCwgCisgICAgMjQ5LCAxLCAyMTQsIDEwNCwgMjIwLCAyNDksIDEsIDIxNywgMTI5LCAyMjAsIDI0OSwgMSwgMjEyLCAxNCwgMjIwLCAyNDksIAorICAgIDEsIDIzMSwgMTU0LCAyMjAsIDI0OSwgMSwgMjM1LCA1MiwgMjIwLCAyNDksIDEsIDIxMywgMjEyLCAyMjAsIDI0OSwgMSwgCisgICAgMjQyLCAyOSwgMjIwLCAyNDksIDEsIDIzMiwgMTk1LCAyMjAsIDI0OSwgMSwgMjMxLCAyLCAyMjAsIDI0OSwgMSwgMjM2LCAKKyAgICAzNSwgMjIwLCAyNDksIDEsIDI0NSwgMTU4LCAyMjAsIDI0OSwgMSwgMjUzLCAxNDYsIDIyMCwgMjQ5LCAxLCAyNTQsIDE1MiwgCisgICAgMjIwLCAyNDksIDEsIDIyNywgNjIsIDIyMCwgMjQ5LCAxLCAyMTMsIDE5OSwgMjIwLCAyNDksIDEsIDIyNiwgMjU0LCAyMjAsIAorICAgIDI0OSwgMSwgMjU0LCAxMTQsIDIyMCwgMjQ5LCAxLCAyMjMsIDEwOSwgMjIwLCAyNDksIDEsIDIyOCwgNTAsIDIyMCwgMjQ5LCAKKyAgICAxLCAyNDUsIDE3MywgMjIwLCAyNDksIDEsIDI1NCwgMTE5LCAyMjAsIDI0OSwgMSwgMjQwLCAxMDQsIDIyMCwgMjQ5LCAxLCAKKyAgICAyMTUsIDEzNCwgMjIwLCAyNDksIDEsIDIyNywgMTE4LCAyMjAsIDI0OSwgMSwgMjI3LCA0MiwgMjIwLCAyNDksIDEsIDIyNywgCisgICAgODQsIDIyMCwgMjQ5LCAxLCAyNTMsIDg2LCAyMjAsIDI0OSwgMSwgMjUzLCAxODksIDIyMCwgMjQ5LCAxLCAyMjcsIDI0LCAKKyAgICAyMjAsIDI0OSwgMSwgMjU0LCAxMDAsIDIyMCwgMjQ5LCAxLCAyNDUsIDQ5LCAyMjAsIDI0OSwgMSwgMjUzLCAxNjgsIDIyMCwgCisgICAgMjQ5LCAxLCAyNDUsIDE4MywgMjIwLCAyNDksIDEsIDI0MCwgMTEwLCAyMjAsIDI0OSwgMSwgMjEzLCA0LCAyMjcsIDksIDEsIAorICAgIDI1NCwgNzgsIDIyNywgOSwgMSwgMjUyLCAxMDcsIDIyNywgOSwgMSwgMjE4LCA1MiwgMjI3LCA5LCAxLCAyMzUsIDEzOSwgCisgICAgMjI3LCA5LCAxLCAyMTMsIDE1MywgMjI3LCA5LCAxLCAyMzQsIDEzOCwgMjI3LCA5LCAxLCAyNDgsIDI3LCAyMjcsIDksIDEsIAorICAgIDIwMywgMjI3LCA5LCAxLCAyMjIsIDIwMiwgMjI3LCA5LCAxLCAyMjAsIDIwNiwgMjI3LCA5LCAxLCAyNDcsIDIzMiwgMjI3LCAKKyAgICA5LCAxLCAyNTAsIDE0OCwgMjI3LCA5LCAxLCAyNDMsIDExMCwgMjI3LCA5LCAxLCAyNDQsIDE2NCwgMjI3LCA5LCAxLCAyMjQsIAorICAgIDIzMCwgMjI3LCA5LCAxLCAyMzUsIDEzLCAyMjcsIDksIDEsIDIzMywgMTUyLCAyMjcsIDksIDEsIDIzMSwgMTMsIDIyNywgOSwgCisgICAgMSwgMjI4LCAzNSwgMjI3LCA5LCAxLCAyMTQsIDE0LCAyMjcsIDksIDEsIDE1OSwgMjI3LCA5LCAxLCAxODYsIDIyNywgOSwgCisgICAgMSwgNjEsIDIyNywgOSwgMSwgNzQsIDIyNywgOSwgMSwgNzIsIDIyNywgOSwgMSwgNzUsIDIyNywgOSwgMSwgNjksIDIyNywgCisgICAgOSwgMSwgMjU0LCAyMzIsIDIyNywgOSwgMSwgMjQ1LCAxNjUsIDIyNywgOSwgMSwgMjI3LCA0OSwgMjI3LCA5LCAyMSwgMjEyLCAKKyAgICA3OSwgMjI3LCA5LCAyMSwgMTE2LCAyMjcsIDksIDIxLCAxMDksIDIyNywgOSwgMjEsIDE2NiwgMjI3LCA5LCAyMSwgMTYzLCAKKyAgICAyMjcsIDksIDIxLCAxODAsIDIyNywgOSwgMjEsIDE4OSwgMjI3LCA5LCAyMSwgMTk4LCAyMjcsIDksIDIxLCAxOTUsIDIyNywgCisgICAgOSwgMjEsIDIwMCwgMjQ5LCAxMCwgNCwgNjEsIDI0OSwgMTAsIDQsIDc0LCAyNDksIDEwLCA0LCA3MiwgMjQ5LCAxMCwgNCwgCisgICAgNzUsIDI0OSwgMTAsIDQsIDY5LCAyNDksIDEwLCA0LCAyMzUsIDEzOSwgMjQ5LCAxMCwgNCwgMjM1LCA3MSwgMjQ5LCAxMCwgCisgICAgNCwgMTgxLCAyNDksIDEwLCA0LCAyMzQsIDE4OCwgMjQ5LCAxMCwgNCwgMjM0LCAxMDEsIDI0OSwgMTAsIDQsIDIzNCwgMzcsIAorICAgIDI0OSwgMTAsIDQsIDIzMywgMjM4LCAyNDksIDEwLCA0LCAyMzMsIDE1NywgMjQ5LCAxMCwgNCwgMjMzLCA4MiwgMjQ5LCAxMCwgCisgICAgNCwgMjMzLCAxMywgMjQ5LCAxMCwgNCwgMjMyLCAyMDgsIDI0OSwgMTAsIDQsIDIzMiwgMTU2LCAyNDksIDEwLCA0LCAxODgsIAorICAgIDI0OSwgMTAsIDQsIDIzMSwgMTU2LCAyNDksIDEwLCA0LCAyMzEsIDQyLCAyNDksIDEwLCA0LCAyMzAsIDIzMSwgMjQ5LCAxMCwgCisgICAgNCwgMjMwLCAxNzIsIDI0OSwgMTAsIDQsIDIwNSwgMjQ5LCAxMCwgNCwgMjI5LCAxODcsIDI0OSwgMTAsIDQsIDIyOSwgNjQsIAorICAgIDI0OSwgMTAsIDQsIDIyOCwgMTg1LCAyNDksIDEwLCA0LCAyMjgsIDkyLCAyNDksIDEwLCA0LCAxOTMsIDI0OSwgMTAsIDQsIAorICAgIDIyNiwgOTYsIDI0OSwgMTAsIDQsIDIyNSwgMjQwLCAyNDksIDEwLCA0LCAyMjUsIDE1MCwgMjQ5LCAxMCwgNCwgMjI1LCAzNSwgCisgICAgMjQ5LCAxMCwgNCwgMjAzLCAyNDksIDEwLCA0LCAyMjQsIDIxLCAyNDksIDEwLCA0LCAyMjMsIDE4OCwgMjQ5LCAxMCwgNCwgCisgICAgMjIzLCAxMTIsIDI0OSwgMTAsIDQsIDIyMywgNTEsIDI0OSwgMTAsIDQsIDIyMiwgMjAyLCAyNDksIDEwLCA0LCAyMjIsIAorICAgIDEwMCwgMjQ5LCAxMCwgNCwgMjIwLCAxMTcsIDI0OSwgMTAsIDQsIDIxOSwgMjQyLCAyNDksIDEwLCA0LCAyMTksIDI3LCAKKyAgICAyNDksIDEwLCA0LCAyMTgsIDUyLCAyNDksIDEwLCA0LCAyMTcsIDIyOSwgMjQ5LCAxMCwgNCwgMjE3LCA3MSwgMjQ5LCAxMCwgCisgICAgNCwgMTA4LCAyNDksIDEwLCA0LCAyMTYsIDgyLCAyNDksIDEwLCA0LCAyMTQsIDQ5LCAyNDksIDEwLCA0LCAyMTQsIDYsIAorICAgIDI0OSwgMTAsIDQsIDIxMywgMjM1LCAyNDksIDEwLCA0LCAyMTMsIDIxNCwgMjQ5LCAxMCwgNCwgMjEzLCAxNTMsIDI0OSwgCisgICAgMTAsIDQsIDIxMywgMTUwLCAyNDksIDEwLCA0LCAyMTIsIDEwOSwgMjQ5LCAxMCwgNCwgMjEyLCAxNiwgMjM1LCAyNTMsIAorICAgIDI1MywgMTk3LCAxLCAyNTQsIDc2LCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIDI1MSwgMjAyLCAyMzUsIDI1MywgMjUzLCAKKyAgICAxOTcsIDEsIDI0MiwgMTc3LCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIDI0OCwgMTMzLCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIAorICAgIDI0MSwgMjIyLCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIDIxNCwgMTQsIDIzNSwgMjUzLCAyNTMsIDE5NywgMSwgMjEyLCA5MCwgCisgICAgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyNDEsIDE4MCwgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMTcsIDE3OSwgMjM1LCAKKyAgICAyNTMsIDI1MywgMTk3LCAxLCAyMTIsIDIyMywgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMzQsIDIzMCwgMjM1LCAyNTMsIAorICAgIDI1MywgMTk3LCAxLCAyMzMsIDExNywgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMzEsIDEyOSwgMjM1LCAyNTMsIDI1MywgCisgICAgMTk3LCAxLCAyMjgsIDUwLCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIDIyMiwgMTY0LCAyMzUsIDI1MywgMjUzLCAxOTcsIDEsIAorICAgIDI1MywgNzgsIDIzNSwgMjUzLCAyNTMsIDE5NywgMSwgMjI2LCA5NiwgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMjIsIDE5MywgCisgICAgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMjQsIDE3OSwgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMjMsIDIxOSwgMjM1LCAKKyAgICAyNTMsIDI1MywgMTk3LCAxLCAyMjAsIDIwMCwgMjM1LCAyNTMsIDI1MywgMTk3LCAxLCAyMTcsIDI0MywgMjM1LCAyNTMsIAorICAgIDI1MywgMTk3LCAyMjIsIDkyLCA1MiwgMjM1LCAyNTMsIDI1MywgMTk3LCA1MCwgMTE2LCAyMzUsIDI1MywgMjUzLCAxOTcsIAorICAgIDUwLCAxMDksIDIzNSwgMjUzLCAyNTMsIDE5NywgNTAsIDE2NiwgMjM1LCAyNTMsIDI1MywgMTk3LCA1MCwgMjE3LCAyMDAsIAorICAgIDIzNSwgMjUzLCAyNTMsIDE5NywgNTAsIDIxNiwgMzgsIDIzNSwgMjUzLCAyNTMsIDE5NywgNTAsIDEyMiwgMjQwLCAyMDAsIAorICAgIDIzNSwgMjUzLCAyNTMsIDE5NywgNTAsIDEyMiwgMjE3LCAxMDAsIDIzNSwgMjUzLCAyNTMsIDE5NywgNTAsIDIxNywgMjAxLCAKKyAgICAyMTcsIDEwMCwgMjI1LCAyNTEsIDEsIDI1NCwgNzQsIDIyNSwgMjUxLCAxLCAyNTEsIDIwNSwgMjI1LCAyNTEsIDEsIDI0MywgCisgICAgODUsIDIyNSwgMjUxLCAxLCAyNDgsIDcsIDIyNSwgMjUxLCAxLCAyNDEsIDIyMiwgMjI1LCAyNTEsIDEsIDIxNCwgMjEsIAorICAgIDIyNSwgMjUxLCAxLCAyMTIsIDEwMywgMjI1LCAyNTEsIDEsIDI0MSwgMTgyLCAyMjUsIDI1MSwgMSwgMjE3LCAxODMsIDIyNSwgCisgICAgMjUxLCAxLCAyMTIsIDIyNCwgMjI1LCAyNTEsIDEsIDIzNCwgMjU0LCAyMjUsIDI1MSwgMSwgMjMzLCAxMjMsIDIyNSwgMjUxLCAKKyAgICAxLCAyMzEsIDEyOSwgMjI1LCAyNTEsIDEsIDIyOCwgNTAsIDIyNSwgMjUxLCAxLCAyMjEsIDY0LCAyMjUsIDI1MSwgMSwgCisgICAgMjU0LCAxMDMsIDIyNSwgMjUxLCAxLCAyMjYsIDk2LCAyMjUsIDI1MSwgMSwgMjIyLCAxOTQsIDIyNSwgMjUxLCAxLCAyMjQsIAorICAgIDE4NCwgMjI1LCAyNTEsIDEsIDIyMywgOTEsIDIyNSwgMjUxLCAxLCAyMjAsIDIwMCwgMjI1LCAyNTEsIDEsIDIxNywgMjQ4LCAKKyAgICAyMjUsIDI1MSwgNTAsIDExNiwgMjI1LCAyNTEsIDUwLCAyMTcsIDIwMCwgMjI1LCAyNTEsIDUwLCAyMTYsIDM4LCAyMjUsIAorICAgIDI1MSwgNTAsIDEyMiwgMjQwLCAyMDAsIDIyNSwgMjUxLCA1MCwgMTA5LCAyMjUsIDI1MSwgNTAsIDE2NiwgMjI1LCAyNTEsIAorICAgIDIxMywgMTk2LCAyMjEsIDU3LCAyMzIsIDExOSwgMSwgNjEsIDIzMiwgMTE5LCAxLCAyNTMsIDc0LCAyMzIsIDExOSwgMSwgCisgICAgMjQzLCAxNzcsIDIzMiwgMTE5LCAxLCAyNDksIDMsIDIzMiwgMTE5LCAxLCA3NCwgMjMyLCAxMTksIDEsIDIxNSwgNzksIAorICAgIDIzMiwgMTE5LCAxLCA3MiwgMjMyLCAxMTksIDEsIDIxMywgMTA1LCAyMzIsIDExOSwgMSwgMjM1LCAyNywgMjMyLCAxMTksIAorICAgIDEsIDE1MCwgMjMyLCAxMTksIDEsIDE4MywgMjMyLCAxMTksIDEsIDIwNCwgMjMyLCAxMTksIDEsIDc1LCAyMzIsIDExOSwgMSwgCisgICAgMTQ5LCAyMzIsIDExOSwgMSwgMjE5LCAxNTgsIDIzMiwgMTE5LCAxLCAyMTgsIDk5LCAyMzIsIDExOSwgMSwgNjksIDIzMiwgCisgICAgMTE5LCAxLCAyNDQsIDIzMCwgMjMyLCAxMTksIDEsIDIyNCwgMjQwLCAyMzIsIDExOSwgMSwgMTk3LCAyMzIsIDExOSwgMSwgCisgICAgMjE2LCAxMTgsIDIzMiwgMTE5LCAxLCAyNTQsIDMyLCAyMzIsIDExOSwgMSwgMjQ1LCAxMDgsIDIzMiwgMTE5LCAxLCAyMzIsIAorICAgIDEyMSwgMjMyLCAxMTksIDEsIDIyOCwgMTk5LCAyMzIsIDExOSwgMSwgMjUwLCAyNTIsIDIzMiwgMTE5LCAyMTYsIDE4MCwgCisgICAgNzcsIDIzNCwgMTI2LCAxLCA2MSwgMjM0LCAxMjYsIDMwLCA1LCA3MiwgMjM0LCAxMjYsIDMwLCA1LCA2OSwgMjM0LCAxMjYsIAorICAgIDMwLCA1LCAxNjEsIDE0OSwgMjM0LCAxMjYsIDMwLCA1LCA3NCwgMjM0LCAxMjYsIDMwLCA1LCA3NSwgMjM0LCAxMjYsIDMwLCAKKyAgICAyMzMsIDQ3LCA3NywgMjM0LCAxMjYsIDUsIDUxLCAyMjMsIDEzMSwgNTUsIDIzNCwgMTI2LCA1LCAyNTMsIDI0MiwgMjM0LCAKKyAgICAxMjYsIDUsIDIxNCwgMTI4LCAyMzQsIDEyNiwgMSwgMTgxLCAyMzQsIDEyNiwgMSwgMjM0LCAxMzgsIDIzNCwgMTI2LCAxLCAKKyAgICAyNDMsIDExMCwgMjM0LCAxMjYsIDEsIDI0MiwgMjI1LCAyMzQsIDEyNiwgMSwgMjUwLCAyMTksIDIzNCwgMTI2LCAxLCAyNTAsIAorICAgIDkyLCAyMzQsIDEyNiwgMSwgMjM1LCAxMzksIDIzNCwgMTI2LCAxLCAyMjgsIDIzLCAyMzQsIDEyNiwgMSwgMjE2LCAxMTUsIAorICAgIDIzNCwgMTI2LCAxLCAyMTYsIDEwNSwgMjM0LCAxMjYsIDEsIDI0OCwgODYsIDIzNCwgMTI2LCAxLCAyNDgsIDcwLCAyMzQsIAorICAgIDEyNiwgMSwgMjI4LCAxOTgsIDIzNCwgMTI2LCAxLCAyMTgsIDUyLCAyMzQsIDEyNiwgMSwgMjE3LCAxNjEsIDIzNCwgMTI2LCAKKyAgICAxLCAyNDgsIDE2NCwgMjM0LCAxMjYsIDEsIDI0NywgMjMyLCAyMzQsIDEyNiwgMSwgMjA1LCAyMzQsIDEyNiwgMSwgMTkzLCAKKyAgICAyMzQsIDEyNiwgMSwgMjI2LCAyMywgMjM0LCAxMjYsIDEsIDI1MiwgMTA3LCAyMzQsIDEyNiwgMSwgMjUxLCAxOTUsIDIzNCwgCisgICAgMTI2LCAxLCAxODgsIDIzNCwgMTI2LCAxLCAxODYsIDIzNCwgMTI2LCAxLCAyMDMsIDIzNCwgMTI2LCAxLCAyMzMsIDE1NywgCisgICAgMjM0LCAxMjYsIDEsIDIxNSwgMSwgMjM0LCAxMjYsIDEsIDIyMSwgMjQsIDIzNCwgMTI2LCAxLCAyMTksIDE1NywgMjM0LCAKKyAgICAxMjYsIDEsIDIyMiwgMjAyLCAyMzQsIDEyNiwgMSwgMjEyLCAxMDksIDIzNCwgMTI2LCAxLCAxNTksIDIzNCwgMTI2LCAxLCAKKyAgICAyMzQsIDU1LCAyMzQsIDEyNiwgMSwgMjE2LCA4NywgMjM0LCAxMjYsIDUsIDI1MiwgNjAsIDQ5LCAyMzQsIDEyNiwgNSwgCisgICAgMjUwLCAxNTQsIDIzNCwgMTI2LCA1LCA2MiwgNTUsIDIzNCwgMTI2LCAyMTQsIDEzMywgMjM0LCAxMjYsIDIxLCAxMTYsIAorICAgIDIzNCwgMTI2LCAyMSwgMTA5LCAyMzQsIDEyNiwgMjEsIDE2NiwgMjM0LCAxMjYsIDIxLCAxNjMsIDIzNCwgMTI2LCA1MCwgCisgICAgMjE3LCAyMDAsIDIzNCwgMTI2LCA1MCwgMjE2LCAzOCwgMjM0LCAxMjYsIDUwLCAxMjIsIDI0MCwgMjAwLCAyMzQsIDEyNiwgCisgICAgNTAsIDEyMiwgMjE3LCAxMDAsIDIzNCwgMTI2LCAyMjUsIDI3LCAyNDcsIDc0LCAyMzQsIDEyNiwgMjI1LCAyNywgMywgMjQ5LCAKKyAgICAyMjgsIDIzNCwgMTI2LCAyMjUsIDI3LCAyNDksIDIyOCwgMjM0LCAxMjYsIDIyNSwgMjcsIDI0OSwgNzcsIDEzNCwgMjM0LCAKKyAgICAxMjYsIDIyNSwgMjcsIDIzMSwgMjQzLCAyMzQsIDEyNiwgMjI1LCAyNywgMjMyLCAxNzAsIDIzNCwgMTI2LCAyMjUsIDI3LCAKKyAgICAyNDgsIDEyMywgMjM0LCAxMjYsIDIyNSwgMjcsIDUxLCAyNDgsIDEyMywgMjM0LCAxMjYsIDIyNSwgMjcsIDIzMiwgMjM2LCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyNDEsIDIyMiwgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjMzLCAxMTcsIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDI0MSwgMTgwLCA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyMzEsIDEyOSwgCisgICAgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjI0LCAxNzksIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIxNCwgMTQsIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIyMCwgMjAwLCA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyMjMsIDIxOSwgCisgICAgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjUxLCAyMDIsIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIxNywgMjQzLCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyMjIsIDE0MiwgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjM0LCAyMzAsIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIyOCwgNTAsIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIzNCwgMTIyLCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyMjIsIDE5MywgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjIyLCAxNjQsIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDI0NCwgMTIzLCA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyNTQsIDc4LCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyNTMsIDc3LCA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyNDcsIDIzMCwgCisgICAgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjQyLCAxNzcsIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDI0OCwgMTMzLCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyNDIsIDIxNCwgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjE3LCAxNzksIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIxMiwgODksIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDI0NywgMjI3LCAKKyAgICA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCAxLCAyMTIsIDIyMywgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMSwgMjE3LCAxNTAsIAorICAgIDUzLCAyMTksIDIxNSwgMjUzLCAyMDgsIDEsIDIxNywgMTMxLCA1MywgMjE5LCAyMTUsIDI1MywgMjA4LCA1MCwgMTE2LCA1MywgCisgICAgMjE5LCAyMTUsIDI1MywgMjA4LCA1MCwgMjQ0LCA4MywgNTMsIDIxOSwgMjE1LCAyNTMsIDIwOCwgMTI4LCAyMzUsIDIzNSwgCisgICAgMjUzLCA4OCwgMSwgNjEsIDI1MywgODgsIDEsIDI1NCwgMjMyLCAyNTMsIDg4LCAxLCAyNTMsIDI0MCwgMjUzLCA4OCwgMSwgCisgICAgMjU0LCAxOTEsIDI1MywgODgsIDEsIDI1NCwgMzIsIDI1MywgODgsIDEsIDI1NCwgMTkyLCAyNTMsIDg4LCAxLCAyNTQsIAorICAgIDE0OCwgMjUzLCA4OCwgMSwgMjU0LCAxNDQsIDI1MywgODgsIDEsIDc0LCAyNTMsIDg4LCAxLCAyNDUsIDE2NSwgMjUzLCA4OCwgCisgICAgMSwgNzUsIDI1MywgODgsIDEsIDIyNywgNDksIDI1MywgODgsIDEsIDcyLCAyNTMsIDg4LCAxLCAyMzYsIDI4LCAyNTMsIDg4LCAKKyAgICAxLCA2OSwgMjUzLCA4OCwgMSwgMjE1LCA5MiwgMjUzLCA4OCwgMSwgMjM0LCAxODgsIDI1MywgODgsIDEsIDIxMywgMTUwLCAKKyAgICAyNTMsIDg4LCAxLCAyMTMsIDExNiwgMjUzLCA4OCwgMSwgMjEzLCAxMjUsIDI1MywgODgsIDEsIDI0MywgMzgsIDI1MywgODgsIAorICAgIDEsIDI0MywgMCwgMjUzLCA4OCwgMSwgMjQyLCAyMTIsIDI1MywgODgsIDEsIDI1MCwgMTI0LCAyNTMsIDg4LCAxLCAyMzUsIAorICAgIDEyNywgMjUzLCA4OCwgMSwgMjE3LCAyMjksIDI1MywgODgsIDEsIDIxNywgMTQ4LCAyNTMsIDg4LCAxLCAyNDgsIDQxLCAKKyAgICAyNTMsIDg4LCAxLCAyNDcsIDIyNSwgMjUzLCA4OCwgMSwgMjE2LCAxMTIsIDI1MywgODgsIDEsIDIyNiwgOTYsIDI1MywgODgsIAorICAgIDEsIDI0NCwgMTIzLCAyNTMsIDg4LCAxLCAyNTEsIDI1MSwgMjUzLCA4OCwgMSwgMjUxLCAxOTIsIDI1MywgODgsIDEsIDIyOSwgCisgICAgMTQ4LCAyNTMsIDg4LCAxLCAyMjksIDcwLCAyNTMsIDg4LCAxLCAyMjksIDcxLCAyNTMsIDg4LCAxLCAyMjksIDE4NywgMjUzLCAKKyAgICA4OCwgMSwgMjI4LCAxNywgMjUzLCA4OCwgMSwgMjI4LCAxOTcsIDI1MywgODgsIDEsIDIzMSwgMTU2LCAyNTMsIDg4LCAxLCAKKyAgICAyNDEsIDEwMiwgMjUzLCA4OCwgMSwgMjEyLCAxNTksIDI1MywgODgsIDEsIDIxMywgMzgsIDI1MywgODgsIDEsIDIxNCwgCisgICAgMjMyLCAyNTMsIDg4LCAxLCAyMjQsIDIxLCAyNTMsIDg4LCAxLCAyMzMsIDgyLCAyNTMsIDg4LCAxLCAyMjIsIDEwMCwgMjUzLCAKKyAgICA4OCwgMSwgMjEyLCA4NywgMjUzLCA4OCwgMSwgMjIwLCAyNDMsIDI1MywgODgsIDEsIDIxMiwgNjcsIDI1MywgODgsIDEsIAorICAgIDIyMCwgMTI0LCAyNTMsIDg4LCAxLCAyMTksIDEyOSwgMjUzLCA4OCwgMSwgMjQxLCAyMjIsIDI1MywgODgsIDI1NCwgMTgxLCAKKyAgICA3NywgMjE3LCAzMiwgMTE3LCAxNzYsIDExMCwgMTIyLCA2MiwgMjI1LCAyNiwgMywgMTE3LCAxNzYsIDExMCwgMTIyLCA2MiwgCisgICAgMjI1LCAyNiwgMjMzLCAxMDgsIDExNywgMTc2LCAxMTAsIDEyMiwgNjIsIDIyNSwgMjYsIDIzMywgMTA4LCAxMjIsIDYyLCAKKyAgICAxMTAsIDExNywgMTc2LCAyMjUsIDI2LCAyMzMsIDEwOCwgMTE3LCAyMjMsIDEyOSwgMTEwLCAxMjIsIDIyMywgMTMxLCAyMjUsIAorICAgIDI2LCAyMzMsIDEwOCwgMTIyLCAyMjMsIDEzMSwgMTEwLCAxMTcsIDIyMywgMTI5LCAyMjUsIDI2LCAyMzUsIDIxNSwgMjI2LCAKKyAgICAxMjYsIDEsIDI1NCwgNzYsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjUxLCAyMDIsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgCisgICAgMjQyLCAxNzcsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjQ4LCAxMzMsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjQxLCAKKyAgICAyMjIsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjE0LCAxNCwgMjM1LCAyMTUsIDIyNiwgMTI2LCAxLCAyMTIsIDkwLCAyMzUsIAorICAgIDIxNSwgMjI2LCAxMjYsIDEsIDI0MSwgMTgwLCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIxNywgMTc5LCAyMzUsIDIxNSwgCisgICAgMjI2LCAxMjYsIDEsIDIxMiwgMjIzLCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIzNCwgMjMwLCAyMzUsIDIxNSwgMjI2LCAKKyAgICAxMjYsIDEsIDIzMywgMTE3LCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIzMSwgMTI5LCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIAorICAgIDIyOCwgNTAsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjIyLCAxNjQsIDIzNSwgMjE1LCAyMjYsIDEyNiwgMSwgMjUzLCA3OCwgCisgICAgMjM1LCAyMTUsIDIyNiwgMTI2LCAxLCAyMjYsIDk2LCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIyMiwgMTkzLCAyMzUsIAorICAgIDIxNSwgMjI2LCAxMjYsIDEsIDIyNCwgMTc5LCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIyMywgMjE5LCAyMzUsIDIxNSwgCisgICAgMjI2LCAxMjYsIDEsIDIyMCwgMjAwLCAyMzUsIDIxNSwgMjI2LCAxMjYsIDEsIDIxNywgMjQzLCAyMzUsIDIxNSwgMjI2LCAKKyAgICAxMjYsIDUwLCAxMTYsIDIzNSwgMjE1LCAyMjYsIDEyNiwgNTAsIDEwOSwgMjM1LCAyMTUsIDIyNiwgMTI2LCA1MCwgMTY2LCAKKyAgICAyMzUsIDIxNSwgMjI2LCAxMjYsIDUwLCAxNjMsIDIzNSwgMjE1LCAyMjYsIDEyNiwgNTAsIDIxNywgMjAwLCAyMzUsIDIxNSwgCisgICAgMjI2LCAxMjYsIDUwLCAyMTYsIDM4LCAyMzUsIDIxNSwgMjI2LCAxMjYsIDUwLCAxMjIsIDI0MCwgMjAwLCAyMzUsIDIxNSwgCisgICAgMjI2LCAxMjYsIDUwLCAxMjIsIDIxNywgMTAwLCAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDI1NCwgNzYsIDIzNSwgMjE1LCAKKyAgICAyMjYsIDE5OCwgMSwgMjUxLCAyMDIsIDIzNSwgMjE1LCAyMjYsIDE5OCwgMSwgMjQyLCAxNzcsIDIzNSwgMjE1LCAyMjYsIAorICAgIDE5OCwgMSwgMjQ4LCAxMzMsIDIzNSwgMjE1LCAyMjYsIDE5OCwgMSwgMjQxLCAyMjIsIDIzNSwgMjE1LCAyMjYsIDE5OCwgMSwgCisgICAgMjE0LCAxMywgMjM1LCAyMTUsIDIyNiwgMTk4LCAxLCAyMTIsIDkwLCAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDI0MSwgMTgwLCAKKyAgICAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDIxNywgMTc5LCAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDIxMiwgMjIzLCAyMzUsIAorICAgIDIxNSwgMjI2LCAxOTgsIDEsIDIzNCwgMjMwLCAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDIzMywgMTE3LCAyMzUsIDIxNSwgCisgICAgMjI2LCAxOTgsIDEsIDIzMSwgMTI4LCAyMzUsIDIxNSwgMjI2LCAxOTgsIDEsIDIyOCwgNTAsIDIzNSwgMjE1LCAyMjYsIAorICAgIDE5OCwgMSwgMjIyLCAxNjQsIDIzNSwgMjE1LCAyMjYsIDE5OCwgMSwgMjI2LCA5NiwgMjM1LCAyMTUsIDIyNiwgMTk4LCAxLCAKKyAgICAyMjIsIDE5MywgMjM1LCAyMTUsIDIyNiwgMTk4LCAxLCAyMjAsIDIwMCwgMjM1LCAyMTUsIDIyNiwgMTk4LCAxLCAyMTcsIAorICAgIDI0MywgMjM1LCAyMTUsIDIyNiwgMTk4LCA1MCwgMTE2LCAyMzUsIDIxNSwgMjI2LCAxOTgsIDUwLCAxMDksIDIzNSwgMjE1LCAKKyAgICAyMjYsIDE5OCwgNTAsIDE2NiwgMjM1LCAyMTUsIDIyNiwgMTk4LCA1MCwgMTYzLCAyMzUsIDIxNSwgMjI2LCAxOTgsIDUwLCAKKyAgICAyMTcsIDIwMCwgMjM1LCAyMTUsIDIyNiwgMTk4LCA1MCwgMjE2LCAzOCwgMjM1LCAyMTUsIDIyNiwgMTk4LCA1MCwgMTIyLCAKKyAgICAyNDAsIDIwMCwgMjM1LCAyMTUsIDIyNiwgMTk4LCA1MCwgMTIyLCAyMTcsIDEwMCwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgNjEsIAorICAgIDUzLCAxODUsIDEsIDIxMywgMjgsIDYxLCA1MywgMTg1LCAxLCAyMTMsIDI4LCAyNTQsIDE0OCwgNTMsIDE4NSwgMSwgMjI3LCAKKyAgICAxNiwgNzIsIDUzLCAxODUsIDEsIDIxMywgMjgsIDcyLCA1MywgMTg1LCAxLCAyMTMsIDI4LCA3NCwgNTMsIDE4NSwgMSwgCisgICAgMjI3LCAxNiwgNzUsIDUzLCAxODUsIDEsIDIyNywgMTYsIDIyNywgOTksIDUzLCAxODUsIDEsIDIxMywgMjgsIDIyNywgOTksIAorICAgIDUzLCAxODUsIDEsIDIyNywgMTYsIDI1NCwgMTg1LCA1MywgMTg1LCAxLCAyMTMsIDI4LCAyNTQsIDE4NSwgNTMsIDE4NSwgMSwgCisgICAgMjI3LCAxNiwgMjU0LCAxNDcsIDUzLCAxODUsIDEsIDIxMywgMjgsIDI1NCwgMTQ3LCA1MywgMTg1LCAxLCAyMjcsIDE2LCAKKyAgICAyNTQsIDEyMSwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjU0LCAxMjEsIDUzLCAxODUsIDEsIDIyNywgMTYsIDI1NCwgMTQyLCAKKyAgICA1MywgMTg1LCAxLCAyMTMsIDI4LCAyNTQsIDE0MiwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjU0LCAxNjAsIDUzLCAxODUsIDEsIAorICAgIDIxMywgMjgsIDI1NCwgMTYwLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNTQsIDE0NiwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgCisgICAgMjQ0LCAyMzYsIDUzLCAxODUsIDEsIDIxMywgMjgsIDI0NCwgMjM2LCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNTMsIDgzLCAKKyAgICA1MywgMTg1LCAxLCAyMTMsIDI4LCAyNTMsIDgzLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNTQsIDEyOSwgNTMsIDE4NSwgMSwgCisgICAgMjEzLCAyOCwgMjU0LCAxMjksIDUzLCAxODUsIDEsIDIyNywgMTYsIDI1NCwgMTQwLCA1MywgMTg1LCAxLCAyMTMsIDI4LCAKKyAgICAyNTQsIDE0MCwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjI3LCA5OCwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjI3LCA5OCwgNTMsIAorICAgIDE4NSwgMSwgMjI3LCAxNiwgMjU0LCA4NiwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjU0LCA4NiwgNTMsIDE4NSwgMSwgMjI3LCAKKyAgICAxNiwgMjU0LCAxMzksIDUzLCAxODUsIDEsIDIyNywgMTYsIDI0NSwgMTE5LCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNDUsIAorICAgIDExNywgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjU0LCAzMiwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjU0LCAxMzcsIDUzLCAKKyAgICAxODUsIDEsIDIxMywgMjgsIDI1NCwgMTM3LCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNDUsIDkwLCA1MywgMTg1LCAxLCAyMTMsIAorICAgIDI4LCAyNDUsIDkwLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNDUsIDEwNSwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjQ1LCAKKyAgICAxMDUsIDUzLCAxODUsIDEsIDIyNywgMTYsIDI0NSwgNzcsIDUzLCAxODUsIDEsIDIxMywgMjgsIDI0NSwgNzcsIDUzLCAxODUsIAorICAgIDEsIDIxMywgMjgsIDI1NCwgMjQsIDUzLCAxODUsIDEsIDIyNywgMTYsIDI0NSwgOTYsIDUzLCAxODUsIDEsIDIxMywgMjgsIAorICAgIDI1NCwgMTM2LCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNDUsIDcwLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyMjcsIDQxLCA1MywgCisgICAgMTg1LCAxLCAyMjcsIDE2LCAyNDAsIDEwNiwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjQ1LCAxNzEsIDUzLCAxODUsIDEsIAorICAgIDIxMywgMjgsIDI0NSwgMTcxLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNTMsIDIxNSwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgCisgICAgMjUzLCAyMTUsIDUzLCAxODUsIDEsIDIyNywgMTYsIDIzNSwgMTc5LCA1MywgMTg1LCAxLCAyMTMsIDI4LCAyMzUsIDE3OSwgCisgICAgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjI3LCAyNSwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjI3LCAyNSwgNTMsIDE4NSwgMSwgCisgICAgMjI3LCAxNiwgMjUzLCAyMTEsIDUzLCAxODUsIDEsIDIxMywgMjgsIDI1MywgMjExLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAKKyAgICAyNTQsIDEzNSwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjUzLCAxNTIsIDUzLCAxODUsIDEsIDIyNywgMTYsIDI1NCwgMTMzLCAKKyAgICA1MywgMTg1LCAxLCAyMjcsIDE2LCAyNTMsIDE0NiwgNTMsIDE4NSwgMSwgMjEzLCAyOCwgMjUzLCAxNDYsIDUzLCAxODUsIDEsIAorICAgIDIyNywgMTYsIDI0NSwgNDAsIDUzLCAxODUsIDEsIDIxMywgMjgsIDI0NSwgNDAsIDUzLCAxODUsIDEsIDIyNywgMTYsIDI1MywgCisgICAgMTIyLCA1MywgMTg1LCAxLCAyMTMsIDI4LCAyNTMsIDEyMiwgNTMsIDE4NSwgMSwgMjI3LCAxNiwgMjU0LCAxMzAsIDUzLCAKKyAgICAxODUsIDEsIDIxMywgMjgsIDI1NCwgMTMwLCA1MywgMTg1LCAxLCAyMjcsIDE2LCAyMjcsIDgsIDUzLCAxODUsIDEsIDIyNywgCisgICAgMTYsIDI1MiwgNDUsIDIyMywgMzgsIDIxLCAxMTYsIDIyMywgMzgsIDIxLCAxMDksIDIyMywgMzgsIDIxLCAxNjYsIDIyMywgCisgICAgMzgsIDIxLCAxNjMsIDIyMywgMzgsIDIxLCAxODAsIDIyMywgMzgsIDIxLCAxODksIDIyMywgMzgsIDIxLCAxOTgsIDIyMywgCisgICAgMzgsIDIxLCAxOTUsIDIyMywgMzgsIDIxLCAyMDAsIDIyMywgMzgsIDUwLCAyMTcsIDIwMCwgMjIzLCAzOCwgNTAsIDIxNiwgCisgICAgMzgsIDIyMywgMzgsIDUwLCAyMTcsIDExNSwgMjIzLCAzOCwgNTAsIDI0MywgMjQwLCAyMjMsIDM4LCA1MCwgMjQ0LCA4MywgCisgICAgMjIzLCAzOCwgNTAsIDIyMCwgMzksIDIyMywgMzgsIDUwLCAyMjEsIDM3LCAyMjMsIDM4LCA1MCwgMjQ1LCAxNDEsIDIyMywgCisgICAgMzgsIDUwLCAyMjksIDI2LCAyMjMsIDM4LCA1MCwgMTIyLCAyNDAsIDIwMCwgMjIzLCAzOCwgNTAsIDExNywgMjQwLCAyMDAsIAorICAgIDIyMywgMzgsIDUwLCAxMzMsIDI0MCwgMjAwLCAyMjMsIDM4LCA1MCwgMjQzLCAyMzcsIDI0MCwgMjAwLCAyMjMsIDM4LCA1MCwgCisgICAgMjQ0LCA1MCwgMjQwLCAyMDAsIDIyMywgMzgsIDUwLCAyMjAsIDUzLCAyNDAsIDIwMCwgMjIzLCAzOCwgNTAsIDIyMSwgNDMsIAorICAgIDI0MCwgMjAwLCAyMjMsIDM4LCA1MCwgMjQ1LCAxNTAsIDI0MCwgMjAwLCAyMjMsIDM4LCA1MCwgMjI5LCAzMSwgMjQwLCAKKyAgICAyMDAsIDIyMywgMzgsIDI0MywgMjI4LCAxMjIsIDI0MiwgOSwgMjIzLCAzOCwgMjQzLCAyMjgsIDEyMiwgMjI0LCAxNjYsIAorICAgIDIyMywgMzgsIDI0MywgMjI4LCAxMjIsIDIxNywgMTIxLCAyMjMsIDM4LCAyNDMsIDIyOCwgMTE3LCAyMTcsIDExOSwgMTEyLCAKKyAgICA1LCAyNTAsIDE4NywgMTEyLCA1LCAyNTMsIDI0MiwgMTEyLCA1LCAyMTQsIDEyOCwgMTEyLCA1LCAyMzUsIDEwNCwgMTEyLCAKKyAgICA1LCAyMTUsIDEzMiwgMTEyLCAxLCA2MSwgMTEyLCAxLCAyNTQsIDIzMiwgMTEyLCAxLCA3MiwgMTEyLCAxLCAyMzYsIDI4LCAKKyAgICAxMTIsIDEsIDY5LCAxMTIsIDEsIDIxNSwgOTIsIDExMiwgMSwgMTYxLCAxNDksIDExMiwgMSwgMTYxLCAyMjMsIDgyLCAxMTIsIAorICAgIDEsIDE2MSwgMTUwLCAxMTIsIDEsIDE2MSwgMjMyLCAyMTQsIDExMiwgMSwgNzQsIDExMiwgMSwgMjU0LCAxMDgsIDExMiwgMSwgCisgICAgNzUsIDExMiwgMSwgMjUzLCAxMDgsIDExMiwgMSwgMTgxLCAxMTIsIDEsIDIzNCwgMTM4LCAxMTIsIDEsIDI0MywgMTEwLCAKKyAgICAxMTIsIDEsIDI0MiwgMjI1LCAxMTIsIDEsIDIyOSwgMTU5LCAxMTIsIDEsIDI1MCwgMjE5LCAxMTIsIDEsIDI1MCwgOTIsIAorICAgIDExMiwgMSwgMjM1LCAxMzksIDExMiwgMSwgMjM1LCAxMTUsIDExMiwgMSwgMjI4LCAyMywgMTEyLCAxLCAyMTYsIDExNSwgCisgICAgMTEyLCAxLCAyMTYsIDEwNSwgMTEyLCAxLCAyNDgsIDg2LCAxMTIsIDEsIDI0OCwgNzAsIDExMiwgMSwgMjI4LCAxOTgsIAorICAgIDExMiwgMSwgMjE4LCA1MiwgMTEyLCAxLCAyMTcsIDE2MSwgMTEyLCAxLCAyNDgsIDE2NCwgMTEyLCAxLCAyNDcsIDIzMiwgCisgICAgMTEyLCAxLCAyMDUsIDExMiwgMSwgMTkzLCAxMTIsIDEsIDIyNiwgMjMsIDExMiwgMSwgMjUyLCAxMDcsIDExMiwgMSwgMjUxLCAKKyAgICAxOTUsIDExMiwgMSwgMTg4LCAxMTIsIDEsIDE4NiwgMTEyLCAxLCAyMDMsIDExMiwgMSwgMjMzLCAxNTcsIDExMiwgMSwgCisgICAgMjE1LCAxLCAxMTIsIDEsIDIyMSwgMjQsIDExMiwgMSwgMjE5LCAxNTcsIDExMiwgMSwgMjIyLCAyMDIsIDExMiwgMSwgMTU5LCAKKyAgICAxMTIsIDEsIDIzMiwgMjEzLCAxMTIsIDEsIDUzLCAxNzgsIDIzMiwgMjEyLCAxMTIsIDEsIDUzLCAxNzgsIDIyMywgODEsIAorICAgIDExMiwgMSwgNTMsIDE3OCwgMjI4LCAxODksIDExMiwgMzAsIDUsIDI1NCwgMjMyLCAxMTIsIDMwLCA1LCAyNTEsIDE5MywgCisgICAgMjU0LCAyMzIsIDExMiwgMzAsIDUsIDcyLCAxMTIsIDMwLCA1LCAyMzYsIDI4LCAxMTIsIDMwLCA1LCA2OSwgMTEyLCAzMCwgCisgICAgNSwgMjE1LCA5MiwgMTEyLCAzMCwgNSwgMTYxLCAxNDksIDExMiwgMzAsIDUsIDE2MSwgMjIzLCA4MiwgMTEyLCAzMCwgNSwgCisgICAgMTYxLCAxNTAsIDExMiwgMzAsIDUsIDE2MSwgMjMyLCAyMTQsIDExMiwgMzAsIDUsIDc0LCAxMTIsIDMwLCA1LCAyNTQsIAorICAgIDEwOCwgMTEyLCAzMCwgNSwgNzUsIDExMiwgMzAsIDUsIDI1MywgMTA4LCAxMTIsIDIxNCwgMTMzLCAxMTIsIDI0OCwgMTIzLCAKKyAgICAxMTIsIDUxLCAyNDgsIDEyMywgMTEyLCAyMjUsIDI3LCAyNDcsIDc0LCAxMTIsIDIyNSwgMjcsIDUxLCAyNDcsIDc0LCAxMTIsIAorICAgIDIyNSwgMjcsIDIzMiwgMjQyLCAxMTIsIDIyNSwgMjcsIDI0OSwgNzcsIDEzNCwgMTEyLCAyMjUsIDI3LCAyMzIsIDE3MCwgCisgICAgMTEyLCA1MCwgMTE2LCAxMTIsIDUwLCAxMDksIDExMiwgNTAsIDE2NiwgMTEyLCA1MCwgMTYzLCAxMTIsIDUwLCAxODAsIAorICAgIDExMiwgNTAsIDE4OSwgMTEyLCA1MCwgMTk4LCAxMTIsIDUwLCAxOTUsIDExMiwgNTAsIDIwMCwgMTEyLCA1MCwgMjE3LCAKKyAgICAyMDAsIDExMiwgNTAsIDIxNiwgMzgsIDExMiwgNTAsIDIxNywgMTE1LCAxMTIsIDUwLCAyNDMsIDI0MCwgMTEyLCA1MCwgCisgICAgMjQ0LCA4MywgMTEyLCA1MCwgMjIwLCAzOSwgMTEyLCA1MCwgMjIxLCAzNywgMTEyLCA1MCwgMjQ1LCAxNDEsIDExMiwgNTAsIAorICAgIDIyOSwgMjYsIDExMiwgNTAsIDEyMiwgMjQwLCAyMDAsIDExMiwgNTAsIDEyMiwgMjE3LCAxMDAsIDExMiwgMjEsIDIxMiwgCisgICAgNzksIDExMiwgMjEsIDExNiwgMTEyLCAyMSwgMTA5LCAxMTIsIDIxLCAxNjYsIDExMiwgMjEsIDE2MywgMTEyLCAyMSwgMTgwLCAKKyAgICAxMTIsIDIxLCAxODksIDExMiwgMjEsIDE5OCwgMTEyLCAyMSwgMTk1LCAxMTIsIDIxLCAyMDAsIDIwOCwgNSwgMjUwLCAxODcsIAorICAgIDIwOCwgNSwgMjUzLCAyNDIsIDIwOCwgNSwgMjE0LCAxMjgsIDIwOCwgMSwgNjEsIDIwOCwgMSwgMjU0LCAyMzIsIDIwOCwgMSwgCisgICAgNzIsIDIwOCwgMSwgMjM2LCAyOCwgMjA4LCAxLCA2OSwgMjA4LCAxLCAyMTUsIDkyLCAyMDgsIDEsIDc0LCAyMDgsIDEsIAorICAgIDI1NCwgMTA4LCAyMDgsIDEsIDc1LCAyMDgsIDEsIDI1MywgMTA4LCAyMDgsIDEsIDE4MSwgMjA4LCAxLCAyMzQsIDEzOCwgCisgICAgMjA4LCAxLCAyNDMsIDExMCwgMjA4LCAxLCAyNDIsIDIyNSwgMjA4LCAxLCAyMjksIDE1OSwgMjA4LCAxLCAyNTAsIDIxOSwgCisgICAgMjA4LCAxLCAyNTAsIDkyLCAyMDgsIDEsIDIzNSwgMTM5LCAyMDgsIDEsIDIzNSwgMTE1LCAyMDgsIDEsIDIyOCwgMjMsIAorICAgIDIwOCwgMSwgMjE2LCAxMTUsIDIwOCwgMSwgMjE2LCAxMDUsIDIwOCwgMSwgMjQ4LCA4NiwgMjA4LCAxLCAyNDgsIDc1LCAKKyAgICAyMDgsIDEsIDI0OCwgNzAsIDIwOCwgMSwgMjIzLCAxOTIsIDIwOCwgMSwgMjI4LCAxOTgsIDIwOCwgMSwgMjE4LCA1MiwgCisgICAgMjA4LCAxLCAyMTcsIDE2MSwgMjA4LCAxLCAyNDgsIDE2NCwgMjA4LCAxLCAyNDcsIDIzMiwgMjA4LCAxLCAyMDUsIDIwOCwgCisgICAgMSwgMTkzLCAyMDgsIDEsIDIyNiwgMjMsIDIwOCwgMSwgMjUyLCAxMDcsIDIwOCwgMSwgMjUxLCAxOTUsIDIwOCwgMSwgMTg4LCAKKyAgICAyMDgsIDEsIDE4NiwgMjA4LCAxLCAyMDMsIDIwOCwgMSwgMjMzLCAxNTcsIDIwOCwgMSwgMjE1LCAxLCAyMDgsIDEsIDIyMSwgCisgICAgMjQsIDIwOCwgMSwgMjE5LCAxNTcsIDIwOCwgMSwgMjIyLCAyMDIsIDIwOCwgMSwgMTU5LCAyMDgsIDMwLCA1LCAyNTQsIAorICAgIDIzMiwgMjA4LCAzMCwgNSwgNzIsIDIwOCwgMzAsIDUsIDIzNiwgMjgsIDIwOCwgMzAsIDUsIDY5LCAyMDgsIDMwLCA1LCAKKyAgICAyMTUsIDkyLCAyMDgsIDMwLCA1LCA3NCwgMjA4LCAzMCwgNSwgMjU0LCAxMDgsIDIwOCwgMzAsIDUsIDc1LCAyMDgsIDMwLCAKKyAgICA1LCAyNTMsIDEwOCwgMjA4LCA1LCAyMTQsIDEzMywgMjA4LCA1LCAyMjgsIDYwLCAyMDgsIDI1NCwgMTgxLCA1MiwgMjA4LCAKKyAgICAyNDUsIDgwLCA1MiwgMjA4LCA1MCwgNTIsIDIwOCwgMjIyLCA5MiwgNzcsIDIwOCwgNTEsIDIyMiwgOTIsIDc3LCAyMDgsIAorICAgIDI0OCwgMTIzLCAyMDgsIDUxLCAyNDgsIDEyMywgMTUsIDUsIDYxLCAxNSwgNSwgMTE4LCAyOSwgNjEsIDE1LCA1LCAxMTgsIAorICAgIDI5LCAyNTIsIDk0LCAxNSwgNSwgMTE4LCAyOSwgMjQzLCA4MSwgMjE3LCAxOTIsIDE1LCA1LCAxMTgsIDI5LCAxNTksIDE1LCAKKyAgICA1LCAxMTgsIDI5LCAyMzYsIDMwLCAxNSwgNSwgMTE4LCAyOSwgMjMzLCAxMzksIDI0MiwgNzUsIDE1LCA1LCAxMTgsIDI5LCAKKyAgICAyMzAsIDEzMSwgMTUsIDUsIDExOCwgMjksIDIyMiwgMTkwLCAxNSwgNSwgMjU0LCAyMzQsIDE1LCA1LCAyNTQsIDE4NSwgMTUsIAorICAgIDUsIDI1NCwgMTg2LCAyOSwgMjUzLCAxNDQsIDE1LCA1LCAyNTQsIDE4NiwgMjksIDI0NiwgMjIsIDI0MiwgNzUsIDE1LCA1LCAKKyAgICAyNTQsIDE4NiwgMjksIDI0MywgOTQsIDE1LCA1LCAyNTQsIDE4NiwgMjksIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgCisgICAgMjU0LCAxODYsIDI5LCAxNTksIDE1LCA1LCAyNTQsIDE4NiwgMjksIDIzNiwgMzEsIDI0MiwgNzUsIDE1LCA1LCAyNTQsIAorICAgIDE4NiwgMjksIDIzNiwgNCwgMTUsIDUsIDI1NCwgMTg2LCAyOSwgMjMzLCAxNDAsIDE1LCA1LCAyNTQsIDE4NiwgMjksIDIyMCwgCisgICAgMjI4LCAxNSwgNSwgMjU0LCAxODYsIDI5LCAxMTEsIDk0LCAxMTEsIDk0LCA2OSwgMTUsIDUsIDI1NCwgMTg2LCAyNDIsIDc1LCAKKyAgICAxNSwgNSwgMjU0LCAxODMsIDE1LCA1LCAyNTQsIDE4NCwgMjksIDI1MiwgNzksIDE1LCA1LCAyNTQsIDE4NCwgMjksIDI0MywgCisgICAgODEsIDIxNywgMTkyLCAxNSwgNSwgMjU0LCAxODQsIDI5LCAyMzEsIDE1NywgOTQsIDI0NSwgMTA4LCAxNSwgNSwgMjU0LCAKKyAgICAxODQsIDI5LCAyMjEsIDIyLCAxNSwgNSwgMjU0LCAxODQsIDI5LCAyMTgsIDIyLCAxNSwgNSwgMjU0LCAxNjAsIDE1LCA1LCAKKyAgICAyNTQsIDk0LCAxNSwgNSwgMjU0LCA5NSwgMjksIDI0NSwgNTAsIDE1LCA1LCAyNTQsIDk1LCAyOSwgMjIwLCAxOTAsIDk0LCAKKyAgICAyNDIsIDE2NiwgMTUsIDUsIDI1NCwgODYsIDE1LCA1LCAyNTQsIDg3LCAyOSwgMjU0LCA4NiwgMTUsIDUsIDI1NCwgODcsIAorICAgIDI5LCAyNDcsIDE2OCwgMTUsIDUsIDI1NCwgODcsIDI5LCAyNDIsIDE2NiwgMTUsIDUsIDI1NCwgODcsIDI5LCAxNTksIDE1LCAKKyAgICA1LCAyNTQsIDg3LCAyOSwgMjM1LCAzLCAxNSwgNSwgMjU0LCA4NywgMjksIDIzNCwgMTAxLCAxNSwgNSwgMjU0LCA4NywgMjksIAorICAgIDIyMCwgMjQzLCAxNSwgNSwgMjU0LCA4NywgMjksIDIxNSwgMTAwLCAxNSwgNSwgMjU0LCA4MywgMTUsIDUsIDI1NCwgNzYsIAorICAgIDE1LCA1LCAyNTQsIDQxLCAxNSwgNSwgMjU0LCA0MiwgMjksIDIyMCwgMjQzLCAxNSwgNSwgMjU0LCAzMiwgMTUsIDUsIDI1NCwgCisgICAgMzMsIDExMCwgMjU0LCAzMiwgMTUsIDUsIDI1NCwgMzMsIDEzMywgMjE3LCAzOCwgMTUsIDUsIDI1NCwgMzMsIDk0LCAyMzAsIAorICAgIDM1LCAyMjcsIDMwLCAyNTQsIDMzLCA5NCwgMjMwLCAzNCwgMTUsIDUsIDI1NCwgMzMsIDk0LCAyMzAsIDM1LCAyMTksIDE2NSwgCisgICAgMTUsIDUsIDI1NCwgNSwgMTUsIDUsIDI1MywgMjM1LCAxNSwgNSwgMjUzLCAyMDUsIDE1LCA1LCAyNTMsIDIwNiwgMjksIAorICAgIDIzMywgMjE3LCAxNSwgNSwgMjUzLCAxNzksIDE1LCA1LCAyNTMsIDE1MSwgMTUsIDUsIDI1MywgMTQ2LCAxNSwgNSwgMjUzLCAKKyAgICAxNDcsIDIxMiwgMzMsIDIxNywgMTkyLCAxNSwgNSwgMjUzLCAxNDcsIDIzNSwgNywgMjE3LCAxOTIsIDE1LCA1LCAyNTMsIAorICAgIDE0NywgMTEwLCAyNTMsIDE0NywgMjE2LCA3OCwgMTEwLCAyMTYsIDc4LCAyMTYsIDc4LCAxMTAsIDIxNiwgNzgsIDIyNiwgCisgICAgMTQ5LCAxNSwgNSwgMjUzLCAxNDcsIDExMCwgMjUzLCAxNDcsIDExMCwgMjUzLCAxNDYsIDE1LCA1LCAyNTMsIDE0NywgMTEwLCAKKyAgICAyNTMsIDE0NywgMTEwLCAyNTMsIDE0NywgMjQ5LCA2NSwgMjUzLCAxNDcsIDExMCwgMjUzLCAxNDcsIDExMCwgMjUzLCAxNDYsIAorICAgIDE1LCA1LCAyNTMsIDE0NCwgMTUsIDUsIDI1MywgMTQxLCAxNSwgNSwgMjUyLCAxMDcsIDE1LCA1LCAyNTIsIDk0LCAxNSwgNSwgCisgICAgMjUyLCA4OSwgMTUsIDUsIDI1MiwgODYsIDE1LCA1LCAyNTIsIDgwLCAxNSwgNSwgMjUyLCA4MSwgMTEwLCAyNTIsIDgwLCAKKyAgICAxNSwgNSwgMjUyLCA3OSwgMTUsIDUsIDEzNCwgMTUsIDUsIDI1MiwgNTksIDE1LCA1LCAyNTEsIDE4NCwgMTUsIDUsIDI1MSwgCisgICAgMTg1LCAyOSwgNjEsIDE1LCA1LCAyNTEsIDE4NSwgMjksIDI0MywgNzIsIDE1LCA1LCAyNTEsIDE4NSwgMjksIDIzNiwgMzEsIAorICAgIDI0MiwgNzUsIDE1LCA1LCAyNTEsIDU0LCAxNSwgNSwgMjUxLCA1NSwgMTEwLCAyNTEsIDU1LCAyNTQsIDE4NSwgMTUsIDUsIAorICAgIDI1MSwgNTUsIDExMCwgMjUxLCA1NSwgMjE1LCAxNjAsIDE1LCA1LCAyNTEsIDU1LCAyNDksIDY1LCAyNTEsIDU0LCAxNSwgNSwgCisgICAgMjUxLCAzOCwgMTUsIDUsIDI1MSwgMzksIDExMCwgMjUxLCAzOCwgMTUsIDUsIDI1MSwgMjcsIDE1LCA1LCAyNTEsIDI2LCAKKyAgICAxNSwgNSwgMjQ4LCAxNjQsIDE1LCA1LCAyNDgsIDE1NSwgMTUsIDUsIDI0OCwgMTU2LCAyMzQsIDc1LCAyOSwgMTE4LCA5NCwgCisgICAgMjMxLCAyMTAsIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCA3NSwgMjksIDI1NCwgNDEsIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCAKKyAgICA3NSwgMjksIDI1MiwgNzksIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCA3NSwgMjksIDI1MSwgMTg0LCAxNSwgNSwgMjQ4LCAxNTYsIAorICAgIDIzNCwgNzUsIDI5LCAyNDMsIDExMCwgMTUsIDUsIDI0OCwgMTU2LCAyMzQsIDc1LCAyOSwgMjQzLCAxMTEsIDk0LCAyMzEsIAorICAgIDIxMCwgMTUsIDUsIDI0OCwgMTU2LCAyMzQsIDc1LCAyOSwgMjQyLCAxOTAsIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCA3NSwgCisgICAgMjksIDI0MiwgMTczLCAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAyNDIsIDg0LCAxNSwgNSwgMjQ4LCAxNTYsIAorICAgIDIzNCwgNzUsIDI5LCAxNTksIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCA3NSwgMjksIDIzNSwgMTc3LCAxNSwgNSwgMjQ4LCAKKyAgICAxNTYsIDIzNCwgNzUsIDI5LCAyMzUsIDE3OCwgOTQsIDIzMiwgMTU2LCAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAKKyAgICAyMzQsIDI0NywgMTUsIDUsIDI0OCwgMTU2LCAyMzQsIDc1LCAyOSwgMjMzLCAxNTcsIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCAKKyAgICA3NSwgMjksIDIzMiwgMTU2LCAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAyMzIsIDE1NywgOTQsIDIzMSwgMjA5LCAKKyAgICAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAyMzIsIDE0MiwgMTUsIDUsIDI0OCwgMTU2LCAyMzQsIDc1LCAyOSwgCisgICAgMjI5LCAxODcsIDE1LCA1LCAyNDgsIDE1NiwgMjM0LCA3NSwgMjksIDIyNiwgMTUwLCA5NCwgMjI2LCAxNDksIDE1LCA1LCAKKyAgICAyNDgsIDE1NiwgMjM0LCA3NSwgMjksIDIyMCwgMTE3LCAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAyMTgsIDIyLCAKKyAgICAxNSwgNSwgMjQ4LCAxNTYsIDIzNCwgNzUsIDI5LCAyMTUsIDE5OCwgOTQsIDI0MiwgMTczLCAxNSwgNSwgMjQ4LCAxNTYsIAorICAgIDIzNCwgNzUsIDI5LCAyMTUsIDEwMCwgMTUsIDUsIDI0OCwgMTMyLCAxNSwgNSwgMjQ4LCAxMTEsIDE1LCA1LCAyNDgsIDExMCwgCisgICAgMTUsIDUsIDI0OCwgMTA5LCAxNSwgNSwgMjQ3LCAyMTEsIDE1LCA1LCAyNDcsIDE5NCwgMTUsIDUsIDI0NywgMTY5LCAxNSwgCisgICAgNSwgMjQ3LCAxNzAsIDI5LCAyMjAsIDI0MywgMTUsIDUsIDI0NywgMTY4LCAxNSwgNSwgMjQ3LCAxNTgsIDE1LCA1LCAyNDcsIAorICAgIDE1OSwgMjM0LCAyMTMsIDExMSwgMjQyLCA3NiwgMjQ3LCAxMzksIDE1LCA1LCAyNDcsIDEzOSwgMTUsIDUsIDI0NiwgMzMsIAorICAgIDE1LCA1LCAyNDYsIDM0LCAxMTAsIDI0NiwgMzMsIDE1LCA1LCAyNDYsIDM0LCAyNDIsIDc1LCAxNSwgNSwgMjQ2LCAzNCwgCisgICAgMjIwLCAyMjUsIDE1LCA1LCAyNDYsIDMxLCAxNSwgNSwgMjQ2LCAzMiwgMjksIDI0NSwgMzcsIDE1LCA1LCAyNDYsIDMwLCAKKyAgICAxNSwgNSwgMjQ2LCAyOSwgMTUsIDUsIDI0NiwgMjgsIDE1LCA1LCAyNDYsIDI3LCAxNSwgNSwgMjQ2LCAyMywgMTUsIDUsIAorICAgIDI0NiwgMjEsIDE1LCA1LCAyNDYsIDIyLCAyNDIsIDc1LCAxNSwgNSwgMjQ2LCAyMiwgMjQyLCA3NiwgMjQyLCA3NSwgMTUsIAorICAgIDUsIDI0NiwgMjAsIDE1LCA1LCAyNDYsIDEzLCAxNSwgNSwgNzQsIDE1LCA1LCAxOTEsIDI5LCAyMjYsIDE0OSwgMTUsIDUsIAorICAgIDE5MSwgMTEwLCAxOTEsIDIyOCwgNTEsIDExMCwgMjI4LCA1MCwgMTUsIDUsIDI0NSwgMTkwLCAxNSwgNSwgMjQ1LCAxOTEsIAorICAgIDI5LCAxMTgsIDk0LCAyNDIsIDMwLCA5NCwgMjQ4LCAxNjQsIDE1LCA1LCAyNDUsIDE5MSwgMjksIDI0MywgNzIsIDE1LCA1LCAKKyAgICAyNDUsIDE5MSwgMjksIDIzMSwgNDIsIDE1LCA1LCAyNDUsIDE5MSwgMjksIDIyMiwgMTc5LCAxNSwgNSwgMjQ1LCAxOTEsIAorICAgIDI5LCAyMjAsIDI0MywgMTUsIDUsIDI0NSwgMTkxLCAyOSwgNjksIDE1LCA1LCAyNDUsIDE2NywgMTUsIDUsIDI0NSwgMTU3LCAKKyAgICAxNSwgNSwgMjQ1LCAxMzEsIDE1LCA1LCAyNDUsIDEwOCwgMTUsIDUsIDI0NSwgMTA5LCAyOSwgMjQzLCA4MCwgMTUsIDUsIAorICAgIDI0NSwgMTA5LCAyOSwgMjQzLCA4MSwgMjE3LCAxOTIsIDE1LCA1LCAyNDUsIDEwOSwgMjksIDIzMSwgMTU2LCAxNSwgNSwgCisgICAgMjQ1LCAxMDksIDI0OSwgNjUsIDI0NSwgMTA4LCAxNSwgNSwgMjQ1LCAxMDksIDIyNywgMzAsIDI0NSwgMTA4LCAxNSwgNSwgCisgICAgMjQ1LCAxMDksIDIxOSwgMTY1LCAxNSwgNSwgMjQ1LCA1MiwgMTUsIDUsIDI0NSwgNTAsIDE1LCA1LCAyNDUsIDM3LCAxNSwgCisgICAgNSwgMjQ0LCAyMzQsIDE1LCA1LCAyNDQsIDIzNSwgMjksIDYxLCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAxMTgsIDk0LCAyMzMsIAorICAgIDEyOCwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgMTE4LCA5NCwgMjMzLCAxMjksIDI5LCAyMzMsIDEyOCwgMTUsIDUsIDI0NCwgCisgICAgMjM1LCAyOSwgMjU0LCAzMiwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgMjUyLCA5NCwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgMjQ2LCAKKyAgICAyMiwgMjQyLCA3NSwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgMjQ2LCAyMiwgMjQyLCA3NiwgMjQyLCA3NSwgMTUsIDUsIDI0NCwgCisgICAgMjM1LCAyOSwgMTU5LCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAyNDIsIDMwLCAyNDIsIDc1LCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAKKyAgICAyMzYsIDMxLCAyNDIsIDc1LCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAyMzQsIDIxMiwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgCisgICAgMjM0LCAyMTMsIDIxOSwgMTY1LCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAyMzMsIDIzNiwgMTUsIDUsIDI0NCwgMjM1LCAyOSwgCisgICAgMjMzLCAxNTcsIDE1LCA1LCAyNDQsIDIzNSwgMjksIDIzMywgMTI5LCAyOSwgMjMzLCAxMjgsIDE1LCA1LCAyNDQsIDIzNSwgCisgICAgMjksIDIzMywgMTMsIDE1LCA1LCAyNDQsIDIzNSwgMjksIDIzMiwgMTU2LCAxNSwgNSwgMjQ0LCAyMzUsIDI5LCAyMTUsIAorICAgIDE5NywgMTUsIDUsIDI0NCwgMjM1LCAyOSwgMjE1LCAxODgsIDE1LCA1LCAyNDMsIDExMCwgMTUsIDUsIDI0MywgMTExLCAKKyAgICAyNDIsIDc1LCAxNSwgNSwgMjQzLCAxMDgsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDExOCwgOTQsIDI0OCwgMTY1LCA5NCwgCisgICAgMTU5LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAxMTgsIDk0LCAxNTksIDE1LCA1LCAyNDMsIDEwOSwgMjksIDExOCwgOTQsIAorICAgIDIzNiwgMzAsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI1NCwgMTg0LCAyMTcsIDE5MywgOTQsIDIxOCwgNDEsIDE1LCA1LCAKKyAgICAyNDMsIDEwOSwgMjksIDI1NCwgMzIsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI1MywgMTQ2LCAxNSwgNSwgMjQzLCAxMDksIAorICAgIDI5LCAyNTMsIDE0NSwgOTQsIDI0MywgOTQsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI1MiwgOTQsIDE1LCA1LCAyNDMsIDEwOSwgCisgICAgMjksIDI1MiwgNjAsIDk0LCAyMDMsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI1MSwgMjcsIDE1LCA1LCAyNDMsIDEwOSwgMjksIAorICAgIDI1MSwgMjgsIDk0LCAyMDMsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0OCwgMTY0LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAKKyAgICAyNDcsIDIxMSwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjQ3LCAxNzAsIDI5LCAyMjAsIDI0MywgMTUsIDUsIDI0MywgMTA5LCAKKyAgICAyOSwgMjQ2LCAzMSwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjQ1LCAxMzEsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0NSwgCisgICAgMTMyLCA5NCwgMjMzLCAxNTcsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0NSwgMTA4LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAKKyAgICAyNDUsIDEwOSwgMjksIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgMjQzLCAxMDksIDI5LCAyNDMsIDgxLCAyMTcsIDE5MiwgCisgICAgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjQzLCA3MiwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjQyLCAxOTAsIDE1LCA1LCAyNDMsIAorICAgIDEwOSwgMjksIDI0MiwgMTg4LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAyNDIsIDE4OSwgOTQsIDYxLCAxNSwgNSwgMjQzLCAKKyAgICAxMDksIDI5LCAyNDIsIDE3NCwgOTQsIDIxOSwgMjcsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0MiwgMzAsIDk0LCAyMzIsIAorICAgIDE1NywgOTQsIDI0NSwgMzcsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0MiwgMTIsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDI0MiwgCisgICAgMTMsIDk0LCAyMzMsIDE1NywgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjQxLCAxNjYsIDk0LCAyMzMsIDEzLCAxNSwgNSwgMjQzLCAKKyAgICAxMDksIDI5LCAyNDAsIDIwOCwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjM2LCAzMSwgMjQyLCA3NSwgMTUsIDUsIDI0MywgCisgICAgMTA5LCAyOSwgMjM1LCAxNjQsIDk0LCAyNDAsIDIxMywgOTQsIDI1MywgMTQ2LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAyMzQsIAorICAgIDI0NywgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjM0LCAyMTIsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDIzNCwgOTgsIDE1LCA1LCAKKyAgICAyNDMsIDEwOSwgMjksIDIzNCwgOTksIDk0LCAyMzMsIDEyOCwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjMzLCAyMzcsIDk0LCAKKyAgICAyNTQsIDMyLCAxNSwgNSwgMjQzLCAxMDksIDI5LCAyMzMsIDE1NywgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjMxLCAxNTcsIAorICAgIDk0LCAyNDUsIDEwOCwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjMxLCA0MiwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjI4LCA1MCwgCisgICAgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjI4LCA1MSwgMTEwLCAyMjgsIDUwLCAxNSwgNSwgMjQzLCAxMDksIDI5LCAxOTMsIDE1LCAKKyAgICA1LCAyNDMsIDEwOSwgMjksIDIyMiwgMTc5LCAxNSwgNSwgMjQzLCAxMDksIDI5LCAyMjIsIDE0NywgMTUsIDUsIDI0MywgCisgICAgMTA5LCAyOSwgMjIwLCAyNDMsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDIyMCwgMjQ0LCA5NCwgMjE2LCA2MiwgMTUsIDUsIAorICAgIDI0MywgMTA5LCAyOSwgMjIwLCAyMTAsIDE1LCA1LCAyNDMsIDEwOSwgMjksIDIxOCwgMjQ0LCAxNSwgNSwgMjQzLCAxMDksIAorICAgIDI5LCAyMTgsIDIyLCAxNSwgNSwgMjQzLCAxMDksIDI5LCA2OSwgMTUsIDUsIDI0MywgMTA5LCAyOSwgMjE1LCAxODgsIDE1LCAKKyAgICA1LCAyNDMsIDEwOSwgMjksIDIxNSwgMTg5LCA5NCwgMjQ2LCAzMywgMTUsIDUsIDI0MywgMTA5LCAxMTAsIDI0MywgMTA4LCAKKyAgICAxNSwgNSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEwNCwgMjQ5LCA2NSwgMjQzLCAxMDMsIDE1LCA1LCAyNDMsIDEwMSwgMTUsIAorICAgIDUsIDI0MywgMTAyLCAxMTAsIDI0MywgMTAyLCAyNDMsIDczLCAxMTAsIDI0MywgNzIsIDE1LCA1LCAyNDMsIDk0LCAxNSwgNSwgCisgICAgMjQzLCA5NSwgMjQzLCAxMDIsIDExMCwgMjQzLCAxMDIsIDI0MywgNzMsIDExMCwgMjQzLCA3MiwgMTUsIDUsIDI0MywgOTMsIAorICAgIDE1LCA1LCAyNDMsIDkxLCAxNSwgNSwgMjQzLCA4MiwgMTUsIDUsIDI0MywgODAsIDE1LCA1LCAyNDMsIDgxLCAyMTcsIDE5MiwgCisgICAgMTUsIDUsIDI0MywgODEsIDExMCwgMjQzLCA4MCwgMTUsIDUsIDI0MywgODEsIDI0OSwgNjUsIDI0MywgODAsIDE1LCA1LCAKKyAgICAyNDMsIDcyLCAxNSwgNSwgMjQzLCA3MSwgMTUsIDUsIDI0MywgNjYsIDE1LCA1LCAyNDMsIDEyLCAxNSwgNSwgMjQzLCAxMywgCisgICAgMjksIDIzMywgMjE3LCAxNSwgNSwgMjQyLCAxOTAsIDE1LCA1LCAyNDIsIDE5MSwgMjksIDc0LCAxNSwgNSwgMjQyLCAxOTEsIAorICAgIDI5LCA2OSwgMTUsIDUsIDI0MiwgMTkxLCAyNDksIDY1LCAyNDIsIDE5MCwgMTUsIDUsIDI0MiwgMTg4LCAxNSwgNSwgMjQyLCAKKyAgICAxODksIDExMCwgMjQyLCAxODgsIDE1LCA1LCAyNDIsIDE4OSwgMjQ5LCA2NSwgMjQyLCAxODgsIDE1LCA1LCAyNDIsIDE4NSwgCisgICAgMTUsIDUsIDI0MiwgMTczLCAxNSwgNSwgMjQyLCAxNzQsIDI0MiwgNzUsIDE1LCA1LCAyNDIsIDE3MSwgMTUsIDUsIDI0MiwgCisgICAgMTcyLCAyOSwgMTE4LCA5NCwgMjM2LCAzMCwgMTUsIDUsIDI0MiwgMTcyLCAyOSwgMjQzLCA4MSwgMjE3LCAxOTIsIDE1LCA1LCAKKyAgICAyNDIsIDE3MiwgMjksIDIzNiwgMzAsIDE1LCA1LCAyNDIsIDE3MiwgMjksIDIzMiwgMTU3LCA5NCwgMjM2LCAzMCwgMTUsIDUsIAorICAgIDI0MiwgMTcyLCAyOSwgMTkzLCAxNSwgNSwgMjQyLCAxNjgsIDE1LCA1LCAyNDIsIDE2NiwgMTUsIDUsIDI0MiwgMTY3LCAKKyAgICAyNDksIDY1LCAyNDIsIDE2NiwgMTUsIDUsIDI0MiwgMTY3LCAyOSwgMjUyLCA5NCwgMTUsIDUsIDI0MiwgMTY3LCAyOSwgCisgICAgMjE4LCAyMiwgMTUsIDUsIDI0MiwgMTY3LCAyMTcsIDE5MiwgMTUsIDUsIDI0MiwgOTIsIDE1LCA1LCAyNDIsIDkzLCAyNDksIAorICAgIDY1LCAyNDIsIDkyLCAxNSwgNSwgMjQyLCA5MCwgMTUsIDUsIDI0MiwgOTEsIDI5LCAyMzQsIDI0NywgMTUsIDUsIDI0MiwgCisgICAgOTEsIDI5LCAyMzQsIDI0OCwgMjksIDIzNiwgMzEsIDI0MiwgNzUsIDE1LCA1LCAyNDIsIDkxLCAyOSwgMjI4LCA1MCwgMTUsIAorICAgIDUsIDI0MiwgOTEsIDI5LCAyMjIsIDE4MCwgOTQsIDIxNiwgNzcsIDE1LCA1LCAyNDIsIDkxLCAyNDIsIDc1LCAxNSwgNSwgCisgICAgMjQyLCA4NCwgMTUsIDUsIDI0MiwgODUsIDI5LCAxMTgsIDk0LCAyMzMsIDIxNywgMTUsIDUsIDI0MiwgODUsIDI5LCAyMzMsIAorICAgIDIxNywgMTUsIDUsIDI0MiwgODUsIDExMCwgMjQyLCA4NSwgMjMyLCAxNDksIDE1LCA1LCAyNDIsIDc5LCAxNSwgNSwgMjQyLCAKKyAgICA3NywgMTUsIDUsIDI0MiwgNzgsIDI5LCAyMjAsIDI0MywgMTUsIDUsIDI0MiwgNjksIDE1LCA1LCAyNDIsIDY4LCAxNSwgNSwgCisgICAgMjQyLCA2NSwgMTUsIDUsIDI0MiwgNjQsIDE1LCA1LCAxNTksIDE1LCA1LCAyNDIsIDMwLCAyMTcsIDE5MiwgMTUsIDUsIAorICAgIDI0MiwgMzAsIDI0MiwgNzUsIDE1LCA1LCAyNDIsIDEyLCAxNSwgNSwgMjQxLCAxNjUsIDE1LCA1LCAyNDEsIDE2NiwgMjksIAorICAgIDI1MywgMTQ2LCAxNSwgNSwgMjQxLCAxNjYsIDI5LCAyNTMsIDE0NCwgMTUsIDUsIDI0MSwgMTY2LCAyOSwgMjUyLCA5NCwgCisgICAgMTUsIDUsIDI0MSwgMTY2LCAyOSwgMjQ3LCAxMzksIDE1LCA1LCAyNDEsIDE2NiwgMjksIDI0MywgMTAxLCAxNSwgNSwgMjQxLCAKKyAgICAxNjYsIDI5LCAyMzQsIDkwLCAxNSwgNSwgMjQxLCAxNjYsIDI5LCAyMjgsIDUwLCAxNSwgNSwgMjQxLCAxNjYsIDI5LCAyMjAsIAorICAgIDI0MywgMTUsIDUsIDI0MSwgMTY2LCAyOSwgNjksIDE1LCA1LCAyNDAsIDIxMiwgMTUsIDUsIDI0MCwgMjA4LCAxNSwgNSwgCisgICAgMjQwLCAyMDksIDI5LCAyNTQsIDMyLCAxNSwgNSwgMjQwLCAyMDksIDI5LCAyNDIsIDEyLCAxNSwgNSwgMjQwLCAyMDksIDI5LCAKKyAgICAyMzQsIDIxMiwgMTUsIDUsIDI0MCwgMjA5LCAyOSwgMjMyLCAyMjYsIDE1LCA1LCAyNDAsIDIwOSwgMjksIDIxNSwgMTg4LCAKKyAgICAxNSwgNSwgMjQwLCAyMDUsIDE1LCA1LCA3MiwgMTUsIDUsIDI0MCwgMTQ2LCA2MSwgMTUsIDUsIDI0MCwgMTA4LCAxNSwgNSwgCisgICAgMjM2LCA1OCwgMTUsIDUsIDIzNiwgNTksIDExMCwgMjM2LCA1OSwgMjUxLCAyNywgMTUsIDUsIDIzNiwgNTksIDExMCwgMjM2LCAKKyAgICA1OSwgMjE5LCAxNjUsIDE1LCA1LCAyMzYsIDMzLCAxNSwgNSwgMjM2LCAzMCwgMTUsIDUsIDIzNiwgMzEsIDI0NywgMTk0LCAKKyAgICAxNSwgNSwgMjM2LCAzMSwgMjIzLCAxODgsIDE1LCA1LCAyMzYsIDMxLCAxMTAsIDIzNiwgMzEsIDIyMCwgMTk0LCAxMTAsIAorICAgIDIyMCwgMTk0LCAyMTUsIDE4OSwgMTEwLCAyMTUsIDE4OCwgMTUsIDUsIDIzNiwgMzEsIDI0MiwgNzUsIDE1LCA1LCAyMzYsIAorICAgIDIyLCAxNSwgNSwgMjM2LCAyMywgMjksIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgMjM2LCAyMSwgMTUsIDUsIDIzNiwgCisgICAgMTEsIDE1LCA1LCAyMzYsIDEyLCAyOSwgMjE4LCAyMiwgMTUsIDUsIDIzNiwgMTIsIDI0OSwgNjUsIDIzNiwgMTEsIDE1LCA1LCAKKyAgICAyMzYsIDEyLCAyMjcsIDMwLCAyMzYsIDExLCAxNSwgNSwgMjM2LCAxMiwgMjE5LCAxNjUsIDE1LCA1LCAyMzYsIDQsIDE1LCAKKyAgICA1LCAyMzUsIDI1MSwgMTUsIDUsIDIzNSwgMTc3LCAxNSwgNSwgMjM1LCAxNjMsIDE1LCA1LCAxODEsIDE1LCA1LCAyMzUsIAorICAgIDE3LCAyOSwgNjEsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjU0LCAxNjAsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjU0LCAxNjEsIAorICAgIDk0LCAyMzMsIDIzNiwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNTMsIDE0NCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNTIsIDk0LCAKKyAgICAxNSwgNSwgMjM1LCAxNywgMjksIDI1MiwgNzksIDE1LCA1LCAyMzUsIDE3LCAyOSwgMTM0LCAxNSwgNSwgMjM1LCAxNywgMjksIAorICAgIDI1MSwgMTg0LCAxNSwgNSwgMjM1LCAxNywgMjksIDI0NSwgNTAsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjQ1LCAzNywgMTUsIAorICAgIDUsIDIzNSwgMTcsIDI5LCAyNDMsIDExMCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNDMsIDk0LCAxNSwgNSwgMjM1LCAxNywgCisgICAgMjksIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgMjM1LCAxNywgMjksIDI0MywgNzIsIDE1LCA1LCAyMzUsIDE3LCAyOSwgCisgICAgMjQzLCA3MywgOTQsIDIyMSwgMjMsIDk0LCA2MSwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgCisgICAgMTcsIDI5LCAyNDIsIDE3MywgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNDIsIDE2NywgOTQsIDIyMiwgMTQ3LCAxNSwgNSwgMjM1LCAKKyAgICAxNywgMjksIDI0MiwgMTY3LCAyNDksIDY1LCAyNDIsIDE2NiwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyNDIsIDkyLCAxNSwgNSwgCisgICAgMjM1LCAxNywgMjksIDI0MiwgNjgsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjM2LCAzMCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAKKyAgICAyMzYsIDExLCAxNSwgNSwgMjM1LCAxNywgMjksIDIzNCwgMjQ3LCAxNSwgNSwgMjM1LCAxNywgMjksIDIzNCwgMTAxLCAxNSwgCisgICAgNSwgMjM1LCAxNywgMjksIDIzNCwgOTgsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjMzLCAxMywgMTUsIDUsIDIzNSwgMTcsIDI5LCAKKyAgICAyMzIsIDE1NiwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyMzEsIDE1NiwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyMzEsIDE1NywgOTQsIAorICAgIDI0NiwgMzMsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjMxLCAxNTcsIDk0LCAyNDIsIDE5MCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAKKyAgICAyMzEsIDE1NywgOTQsIDIxNywgMjI5LCAxNSwgNSwgMjM1LCAxNywgMjksIDIzMSwgNDIsIDE1LCA1LCAyMzUsIDE3LCAyOSwgCisgICAgMjMxLCA0MywgOTQsIDIyOCwgNDUsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjI5LCAxODcsIDE1LCA1LCAyMzUsIDE3LCAyOSwgCisgICAgMjI4LCA1MCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyMjUsIDI0MCwgMTUsIDUsIDIzNSwgMTcsIDI5LCAyMjMsIDUxLCAxNSwgCisgICAgNSwgMjM1LCAxNywgMjksIDIyMiwgMjAyLCAxNSwgNSwgMjM1LCAxNywgMjksIDIyMiwgMTQ3LCAxNSwgNSwgMjM1LCAxNywgCisgICAgMjksIDIyMSwgMjQsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjIwLCAyNDMsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjIwLCAyMTAsIAorICAgIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjIwLCAxNTAsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjIwLCAxMDgsIDE1LCA1LCAyMzUsIAorICAgIDE3LCAyOSwgMjE4LCAyNTIsIDE1LCA1LCAyMzUsIDE3LCAyOSwgMjE4LCAxLCAxNSwgNSwgMjM1LCAxNywgMjksIDY5LCAxNSwgCisgICAgNSwgMjM1LCAxNywgMjksIDIxNSwgMTk3LCAxNSwgNSwgMjM1LCAxNywgMjksIDIxNSwgMTg4LCAxNSwgNSwgMjM1LCAxNywgCisgICAgMjksIDIxNSwgMTYzLCAyOSwgMTkzLCAxNSwgNSwgMjM1LCAxNywgMjksIDIxNSwgMTAwLCAxNSwgNSwgMjM1LCAxNywgMjksIAorICAgIDIxMiwgMzcsIDE1LCA1LCAyMzUsIDE1LCAxNSwgNSwgMjM1LCAxNiwgMjQ5LCA2NSwgMjM1LCAxNSwgMTUsIDUsIDIzNSwgOCwgCisgICAgMTUsIDUsIDIzNSwgNSwgMTUsIDUsIDIzNSwgMywgMTUsIDUsIDIzNSwgMiwgMTUsIDUsIDIzNSwgMCwgMTUsIDUsIDIzNSwgCisgICAgMSwgMTEwLCAyMzUsIDAsIDE1LCA1LCAyMzQsIDI0NywgMTUsIDUsIDIzNCwgMjQ4LCAyOSwgMjM2LCAzMSwgMjQyLCA3NSwgCisgICAgMTUsIDUsIDIzNCwgMjQzLCAxNSwgNSwgMjM0LCAyNDQsIDI5LCAyNTIsIDk0LCAxNSwgNSwgMjM0LCAyNDQsIDI0OSwgNjUsIAorICAgIDIzNCwgMjQzLCAxNSwgNSwgMjM0LCAyNDEsIDE1LCA1LCAyMzQsIDI0MCwgMTUsIDUsIDIzNCwgMjEyLCAxNSwgNSwgMjM0LCAKKyAgICAyMTMsIDIzMywgMTQxLCAyOSwgMTExLCAxMTAsIDIzMywgMTQxLCAyOSwgNjksIDE1LCA1LCAyMzQsIDIxMywgMTEwLCAyMzQsIAorICAgIDIxMywgMjMzLCAxNDEsIDI5LCAxMTEsIDExMCwgMjMzLCAxNDEsIDI5LCA2OSwgMTUsIDUsIDIzNCwgMTYzLCAxNSwgNSwgCisgICAgMjM0LCAxMDEsIDE1LCA1LCAyMzQsIDEwMiwgMjksIDI1MiwgOTQsIDE1LCA1LCAyMzQsIDEwMiwgMjksIDY5LCAxNSwgNSwgCisgICAgMjM0LCAxMDIsIDI5LCAyMTUsIDE4OCwgMTUsIDUsIDIzNCwgOTgsIDE1LCA1LCAyMzQsIDkwLCAxNSwgNSwgMjM0LCA3NywgCisgICAgMTUsIDUsIDIzNCwgNzYsIDE1LCA1LCAyMzQsIDc0LCAxNSwgNSwgMjM0LCA3NSwgMTEwLCAyMzQsIDc0LCAxNSwgNSwgMjMzLCAKKyAgICAyMzgsIDE1LCA1LCAyMzMsIDIzOSwgMTEwLCAyNDEsIDE2NiwgMjksIDI1MywgMTQ1LCAyMzMsIDIzOSwgMTEwLCAyNDEsIAorICAgIDE2NiwgMjksIDI1MywgMTQ0LCAxNSwgNSwgMjMzLCAyMzYsIDE1LCA1LCAyMzMsIDIzNCwgMTUsIDUsIDIzMywgMjM1LCAKKyAgICAyMTQsIDI0NCwgMTcsIDE1LCA1LCAyMzMsIDIzMywgMTUsIDUsIDIzMywgMjMwLCAxNSwgNSwgMjMzLCAyMzEsIDI0MiwgNzUsIAorICAgIDE1LCA1LCAyMzMsIDIyOSwgMTUsIDUsIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAyMTgsIDIyNywgMzAsIDIzMywgMjE3LCAxNSwgCisgICAgNSwgMjMzLCAyMTIsIDE1LCA1LCAyMzMsIDE5NCwgMTUsIDUsIDIzMywgMTU3LCAxNSwgNSwgMjMzLCAxNDAsIDE1LCA1LCAKKyAgICAyMzMsIDE0MSwgMjksIDYxLCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAxMTgsIDk0LCAyNDgsIDE2NSwgOTQsIDE1OSwgMTUsIDUsIAorICAgIDIzMywgMTQxLCAyOSwgMTE4LCA5NCwgMjQzLCA3MiwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMTE4LCA5NCwgMjMzLCAxMjgsIAorICAgIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI1NCwgODYsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI1NCwgMzIsIDE1LCA1LCAyMzMsIAorICAgIDE0MSwgMjksIDI1MywgMTQ3LCAyMTIsIDMzLCAyMTcsIDE5MiwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjUyLCA5NCwgMTUsIAorICAgIDUsIDIzMywgMTQxLCAyOSwgMjUxLCAxODQsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI0OCwgMTExLCAxNSwgNSwgMjMzLCAKKyAgICAxNDEsIDI5LCAyNDUsIDEwOCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjQzLCAxMTAsIDE1LCA1LCAyMzMsIDE0MSwgMjksIAorICAgIDI0MywgNzIsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI0MiwgODQsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI0MiwgODUsIDk0LCAKKyAgICAyNDIsIDg0LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAxNTksIDE1LCA1LCAyMzMsIDE0MSwgMjksIDI0MiwgMTIsIDE1LCA1LCAKKyAgICAyMzMsIDE0MSwgMjksIDI0MSwgMTY2LCAyOSwgMjI4LCA1MCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjM2LCAzMSwgMjQyLCAKKyAgICA3NSwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjM2LCAxMSwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjM2LCAxMiwgOTQsIDE1OSwgCisgICAgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjM2LCAxMiwgOTQsIDIzMiwgMTU2LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMzQsIAorICAgIDEwMSwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjM0LCA5MCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjMzLCAyMzYsIDE1LCA1LCAKKyAgICAyMzMsIDE0MSwgMjksIDIzMywgMjMwLCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMzMsIDIzMSwgOTQsIDI0MSwgMTY2LCA5NCwgCisgICAgNjEsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDIzMywgMTQwLCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMzIsIDIyNiwgMTUsIDUsIAorICAgIDIzMywgMTQxLCAyOSwgMjMyLCAxNTYsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDIzMiwgMTQ0LCAxNSwgNSwgMjMzLCAxNDEsIAorICAgIDI5LCAyMzEsIDE1NiwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjMxLCAxNTcsIDk0LCAyNDUsIDEwOCwgMTUsIDUsIDIzMywgCisgICAgMTQxLCAyOSwgMjMwLCAxMzEsIDE1LCA1LCAyMzMsIDE0MSwgMjksIDIyOSwgMTg3LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAKKyAgICAyMjAsIDI0NCwgOTQsIDIxOCwgMjQ0LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMjAsIDE5MCwgOTQsIDI0MiwgMTY3LCA5NCwgCisgICAgMjQ1LCA1MCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjIwLCAxOTAsIDk0LCAyNDIsIDE2NywgMjE3LCAxOTIsIDE1LCA1LCAKKyAgICAyMzMsIDE0MSwgMjksIDIyMCwgMTQ4LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMjAsIDE0OSwgOTQsIDIyMCwgMTQ4LCAxNSwgCisgICAgNSwgMjMzLCAxNDEsIDI5LCAyMTgsIDI0NCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjE4LCAzMywgMTUsIDUsIDIzMywgMTQxLCAKKyAgICAyOSwgMjE4LCAyMiwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjE3LCAyMzAsIDk0LCAxMTgsIDk0LCAyMTksIDI4LCA5NCwgCisgICAgMjA1LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCA2OSwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMTExLCA5NCwgNjEsIDE1LCA1LCAKKyAgICAyMzMsIDE0MSwgMjksIDExMSwgOTQsIDExMSwgOTQsIDY5LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMTUsIDE5OCwgOTQsIAorICAgIDI1MywgMTQ2LCAxNSwgNSwgMjMzLCAxNDEsIDI5LCAyMTUsIDE4OCwgMTUsIDUsIDIzMywgMTQxLCAyOSwgMjE1LCAxMDAsIAorICAgIDE1LCA1LCAyMzMsIDE0MSwgMjE5LCAxNjUsIDE1LCA1LCAyMzMsIDEzOCwgMTUsIDUsIDIzMywgMTM5LCAyOSwgMjIwLCAKKyAgICAyNDMsIDE1LCA1LCAyMzMsIDEzOSwgMjksIDIyMCwgMjQ0LCA5NCwgMjE4LCAyNDQsIDE1LCA1LCAyMzMsIDEzOSwgMjQyLCAKKyAgICA3NSwgMTUsIDUsIDIzMywgMTM5LCAyNDIsIDc2LCAxMTAsIDIzMywgMTM5LCAyNDIsIDc2LCAyMjAsIDI0MywgMTUsIDUsIAorICAgIDIzMywgMTM1LCAxNSwgNSwgMjMzLCAxMjgsIDE1LCA1LCAyMzMsIDEyOSwgMjksIDIzMywgMTI4LCAxNSwgNSwgMjMzLCAKKyAgICAxMjYsIDE1LCA1LCAyMzMsIDEyNywgMjksIDIzMywgMjE3LCAxNSwgNSwgMjMzLCAxMjcsIDI5LCAyMzMsIDIxOCwgOTQsIAorICAgIDIyMywgNTEsIDE1LCA1LCAyMzMsIDEzLCAxNSwgNSwgMjMyLCAyNTQsIDE1LCA1LCAyMzIsIDI0NSwgMTUsIDUsIDIzMiwgCisgICAgMjI2LCAxNSwgNSwgMjMyLCAxNTYsIDE1LCA1LCAyMzIsIDE1NywgMjksIDI1MiwgOTQsIDE1LCA1LCAyMzIsIDE1NCwgMTUsIAorICAgIDUsIDIzMiwgMTU1LCAyOSwgMjU0LCA4NiwgMTUsIDUsIDIzMiwgMTU1LCAyOSwgMjUyLCA5NCwgMTUsIDUsIDIzMiwgMTU1LCAKKyAgICAyOSwgMjQ1LCAzNywgMTUsIDUsIDIzMiwgMTU1LCAyOSwgMjQ1LCAzOCwgMjE3LCAxOTIsIDE1LCA1LCAyMzIsIDE1NSwgMjksIAorICAgIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgMjMyLCAxNTUsIDI5LCAyNDEsIDE2NiwgMjksIDI1MiwgOTQsIDE1LCA1LCAKKyAgICAyMzIsIDE1NSwgMjksIDIzNiwgMTEsIDE1LCA1LCAyMzIsIDE1NSwgMjksIDIzNSwgNSwgMTUsIDUsIDIzMiwgMTU1LCAyOSwgCisgICAgMjM1LCAzLCAxNSwgNSwgMjMyLCAxNTUsIDI5LCAyMzUsIDQsIDk0LCAyNTMsIDE0NiwgMTUsIDUsIDIzMiwgMTU1LCAyOSwgCisgICAgMjM0LCAxMDEsIDE1LCA1LCAyMzIsIDE1NSwgMjksIDIzMywgMTU4LCA5NCwgMjUzLCAxNDYsIDE1LCA1LCAyMzIsIDE1NSwgCisgICAgMjksIDIzMywgMTQwLCAxNSwgNSwgMjMyLCAxNTUsIDI5LCAyMzEsIDE1NywgOTQsIDI0NSwgMTA4LCAxNSwgNSwgMjMyLCAKKyAgICAxNTUsIDI5LCAyMjksIDE4NywgMTUsIDUsIDIzMiwgMTU1LCAyOSwgMjI4LCA5MiwgMTUsIDUsIDIzMiwgMTU1LCAyOSwgCisgICAgMjIwLCAxMTgsIDk0LCAyNTMsIDE0NiwgMTUsIDUsIDIzMiwgMTU1LCAyOSwgMjIwLCAxMDAsIDk0LCAyNTEsIDU0LCAxNSwgCisgICAgNSwgMjMyLCAxNTUsIDI5LCAyMTYsIDc3LCAxNSwgNSwgMjMyLCAxNTUsIDIxNywgMTkyLCAxNSwgNSwgMjMyLCAxNTUsIAorICAgIDI0OSwgNjUsIDIzMiwgMTU0LCAxNSwgNSwgMjMyLCAxNTUsIDIyNywgMzAsIDIzMiwgMTU0LCAxNSwgNSwgMjMyLCAxNTUsIAorICAgIDIxOSwgMTY1LCAxNSwgNSwgMjMyLCAxNTUsIDIyMCwgMjI1LCAxNSwgNSwgMjMyLCAxNTMsIDE1LCA1LCAyMzIsIDE0OSwgCisgICAgMTUsIDUsIDIzMiwgMTUwLCAxMTAsIDIzMiwgMTQ5LCAxNSwgNSwgMjMyLCAxNTAsIDIyNywgMzAsIDIzMiwgMTQ5LCAxNSwgCisgICAgNSwgMjMyLCAxNTAsIDIyMCwgMjI1LCAxNSwgNSwgMjMyLCAxNDcsIDE1LCA1LCAyMzIsIDE0NCwgMTUsIDUsIDIzMiwgMTQyLCAKKyAgICAxNSwgNSwgMjMyLCAxNDMsIDExMCwgMjMyLCAxNDIsIDE1LCA1LCAyMzIsIDE0MywgMTEwLCAyMzIsIDE0MywgMjQzLCA3MywgCisgICAgMTEwLCAyNDMsIDcyLCAxNSwgNSwgMTg4LCAxNSwgNSwgMjMyLCA0MywgMjksIDIxOCwgMjIsIDE1LCA1LCAyMzIsIDQzLCAKKyAgICAyNDIsIDc1LCAxNSwgNSwgMjMyLCA0MiwgMTUsIDUsIDIzMiwgMTUsIDE1LCA1LCAyMzEsIDIyOSwgMTUsIDUsIDIzMSwgCisgICAgMjEwLCAxNSwgNSwgMjMxLCAyMDksIDE1LCA1LCAyMzEsIDE1NiwgMTUsIDUsIDIzMSwgMTEyLCAxNSwgNSwgMjMxLCA0MiwgCisgICAgMTUsIDUsIDIzMSwgMSwgMTUsIDUsIDIzMCwgMTcyLCAxNSwgNSwgMjMwLCAxNzMsIDExMCwgMjMwLCAxNzIsIDE1LCA1LCAKKyAgICAyMzAsIDE2MywgMTUsIDUsIDIzMCwgMTY0LCAyNDIsIDc1LCAxNSwgNSwgMjMwLCAxNDgsIDE1LCA1LCAyMzAsIDEzNCwgMTUsIAorICAgIDUsIDIzMCwgMTMxLCAxNSwgNSwgMjMwLCAxMzIsIDI5LCA2MSwgMTUsIDUsIDIzMCwgMTMyLCAyOSwgMjMzLCAyMTcsIDE1LCAKKyAgICA1LCAyMzAsIDEzMiwgMjksIDIxMiwgMTA5LCAxNSwgNSwgMjMwLCAxMzIsIDExMCwgMjMwLCAxMzEsIDE1LCA1LCAyMzAsIAorICAgIDEzMiwgMTEwLCAyMzAsIDEzMiwgMjksIDExOCwgOTQsIDIwNSwgMTUsIDUsIDIzMCwgMTMyLCAyNDksIDY1LCAyMzAsIDEzMSwgCisgICAgMTUsIDUsIDIzMCwgMTI5LCAxNSwgNSwgMjMwLCAxMzAsIDI5LCA2MSwgMTUsIDUsIDIzMCwgMTMwLCAyOSwgMTE4LCA5NCwgCisgICAgMjQ3LCAyMTEsIDE1LCA1LCAyMzAsIDEzMCwgMjksIDI0NywgMjExLCAxNSwgNSwgMjMwLCAxMzAsIDI0MiwgNzUsIDE1LCA1LCAKKyAgICAyMDUsIDE1LCA1LCAyMzAsIDQ1LCAxNSwgNSwgMjMwLCAzNCwgMTUsIDUsIDIzMCwgMzUsIDIzNSwgMTkwLCAxNSwgNSwgCisgICAgMjMwLCAzNSwgMjksIDIyMCwgMTUxLCAyMTcsIDE5MiwgMTUsIDUsIDIzMCwgMzUsIDIyNywgMzAsIDIzMCwgMzQsIDE1LCA1LCAKKyAgICAyMzAsIDMzLCAxNSwgNSwgMjMwLCAyOCwgMjI4LCAzNiwgMTUsIDUsIDIzMCwgMjcsIDE1LCA1LCAyMzAsIDI2LCAxNSwgNSwgCisgICAgMjI5LCAxODcsIDE1LCA1LCAyMjksIDE4OCwgMjksIDYxLCAxNSwgNSwgMjI5LCAxODgsIDI5LCAyMTUsIDE4OCwgMTUsIDUsIAorICAgIDIyOSwgMTg4LCAyMjAsIDIyNSwgMTUsIDUsIDIyOSwgNjQsIDE1LCA1LCAyMjksIDY1LCAyOSwgNzQsIDE1LCA1LCAyMjksIAorICAgIDYzLCAxNSwgNSwgMjI5LCAzNCwgMTUsIDUsIDIyOSwgMzUsIDI5LCAyNDMsIDgxLCAyMTcsIDE5MiwgMTUsIDUsIDIyOSwgCisgICAgMzUsIDI5LCAyNDMsIDczLCA5NCwgMjQzLCA4MSwgMjE3LCAxOTIsIDE1LCA1LCAyMjksIDMyLCAxNSwgNSwgMjI5LCAzMywgCisgICAgMjksIDI1NCwgMzIsIDE1LCA1LCAyMjksIDMzLCAyOSwgMjUzLCAxNDYsIDE1LCA1LCAyMjksIDMzLCAyOSwgMjUzLCAxNDcsIAorICAgIDk0LCAyNTMsIDE0NiwgMTUsIDUsIDIyOSwgMzMsIDI5LCAyNDIsIDg0LCAxNSwgNSwgMjI5LCAzMywgMjksIDIzMSwgMTU3LCAKKyAgICA5NCwgMjQzLCA4MSwgMjE3LCAxOTIsIDE1LCA1LCAyMjksIDMzLCAyOSwgMjI5LCAxODcsIDE1LCA1LCAyMjksIDMzLCAyOSwgCisgICAgMjI4LCA1MCwgMTUsIDUsIDIyOSwgMzMsIDI5LCAyMjAsIDI0MywgMTUsIDUsIDIyOSwgMzMsIDI5LCAyMjAsIDI0NCwgOTQsIAorICAgIDExOCwgMjU0LCAzMiwgMTUsIDUsIDIyOSwgMzMsIDI5LCAyMjAsIDI0NCwgOTQsIDI1MywgMTQ2LCAxNSwgNSwgMjI5LCAzMywgCisgICAgMjksIDIyMCwgMjQ0LCA5NCwgMjUzLCAxNDcsIDk0LCAyNTMsIDE0NiwgMTUsIDUsIDIyOSwgMzMsIDI5LCAyMTUsIDE5OCwgCisgICAgOTQsIDI1MywgMTQ2LCAxNSwgNSwgMjI5LCAzMywgMjksIDIxNSwgMTAwLCAxNSwgNSwgMjI5LCAyMSwgMTUsIDUsIDIyOCwgCisgICAgOTIsIDE1LCA1LCAyMjgsIDY1LCAxNSwgNSwgMjI4LCA1MCwgMTUsIDUsIDIyOCwgNTEsIDIzMywgMTM5LCAyOSwgMjQzLCAKKyAgICA3MiwgMTUsIDUsIDIyOCwgNTEsIDIzMywgMTM5LCAyOSwgMjMxLCAyMTAsIDE1LCA1LCAyMjgsIDUxLCAyMzMsIDEzOSwgMjksIAorICAgIDIyMiwgMTc5LCAxNSwgNSwgMjI4LCA1MSwgMjMzLCAxMzksIDI5LCAyMjIsIDE4MCwgMTEwLCAyMjgsIDUxLCAyMzMsIDEzOSwgCisgICAgMjksIDIyMiwgMTc5LCAxNSwgNSwgMjI4LCA1MSwgMjMzLCAxMzksIDI5LCAyMTUsIDEwMCwgMTUsIDUsIDIyOCwgNTEsIAorICAgIDIxNywgMTkyLCAxNSwgNSwgMjI4LCA1MSwgMTEwLCAyMjgsIDUwLCAxNSwgNSwgMjI4LCA1MSwgMjQ5LCA2NSwgMjI4LCA1MCwgCisgICAgMTUsIDUsIDIyOCwgNTEsIDI0OSwgNjUsIDIyOCwgNTEsIDIzMywgMTM5LCAxMTAsIDIzMywgMTM4LCAxNSwgNSwgMjI4LCAKKyAgICA0NSwgMTUsIDUsIDIyOCwgNDYsIDI1NCwgMTg0LCAyOSwgMjUzLCAxNDEsIDE1LCA1LCAyMjgsIDQ2LCAyNTQsIDE4NCwgMjksIAorICAgIDI1MSwgMTg0LCAxNSwgNSwgMjI4LCA0NiwgMjU0LCAxODQsIDI5LCAyNDYsIDI5LCAxNSwgNSwgMjI4LCA0NiwgMjU0LCAKKyAgICAxODQsIDI5LCAyNDIsIDg0LCAxNSwgNSwgMjI4LCA0NiwgMjU0LCAxODQsIDI5LCAyMzYsIDMxLCAyNDIsIDc1LCAxNSwgNSwgCisgICAgMjI4LCA0NiwgMjU0LCAxODQsIDI5LCAyMzUsIDMsIDE1LCA1LCAyMjgsIDQ2LCAyNTQsIDE4NCwgMjksIDIzMywgMTU3LCAKKyAgICAxNSwgNSwgMjI4LCA0NiwgMjU0LCAxODQsIDI5LCAyMjksIDE4NywgMTUsIDUsIDIyOCwgNDYsIDI1NCwgMTg0LCAyOSwgCisgICAgMjIwLCA5NywgMTUsIDUsIDIyOCwgNDYsIDI1NCwgMTg0LCAyOSwgMjE1LCAxOTcsIDE1LCA1LCAyMjgsIDQ2LCAyMzQsIDc1LCAKKyAgICAyOSwgMjUxLCAxODQsIDE1LCA1LCAyMjgsIDQ2LCAyMzQsIDc1LCAyOSwgMjUxLCAxODUsIDY5LCAxNSwgNSwgMTkzLCAxNSwgCisgICAgNSwgMjI2LCAyMDQsIDE1LCA1LCAyMjYsIDE3NCwgMTUsIDUsIDIyNiwgMTQ5LCAxNSwgNSwgMjI2LCAzNywgMTUsIDUsIAorICAgIDIyNSwgMjQwLCAxNSwgNSwgMjI1LCAyNDEsIDI5LCA2MSwgMTUsIDUsIDIyNSwgMjQxLCAyOSwgMjU0LCAxODUsIDE1LCA1LCAKKyAgICAyMjUsIDI0MSwgMjksIDI1MSwgMTg0LCAxNSwgNSwgMjI1LCAyNDEsIDI5LCAyNTEsIDU0LCAxNSwgNSwgMjI1LCAyNDEsIAorICAgIDI5LCA3NCwgMTUsIDUsIDIyNSwgMjQxLCAyOSwgNzIsIDE1LCA1LCAyMjUsIDI0MSwgMjksIDI0MCwgMTA4LCAxNSwgNSwgCisgICAgMjI1LCAyNDEsIDI5LCA2OSwgMTUsIDUsIDIyNSwgMjQxLCAyOSwgMjE1LCAxOTcsIDE1LCA1LCAyMjUsIDI0MSwgMjQ5LCAKKyAgICA2NSwgMjI1LCAyNDAsIDE1LCA1LCAyMjUsIDE4NSwgMTUsIDUsIDIyNSwgMTg2LCAyOSwgMjM0LCAyNDMsIDE1LCA1LCAyMjUsIAorICAgIDE4NiwgMjksIDIxNSwgMTg4LCAxNSwgNSwgMjI1LCAxODYsIDI5LCAyMTIsIDEwOSwgMTUsIDUsIDIyNSwgMTg2LCAyMjcsIAorICAgIDMwLCAyMjUsIDE4NSwgMTUsIDUsIDIwMywgMTUsIDUsIDIyNCwgNzIsIDE1LCA1LCAyMjMsIDE4OCwgMTUsIDUsIDIyMywgCisgICAgNTEsIDE1LCA1LCAyMjIsIDIwMiwgMTUsIDUsIDIyMiwgMTkxLCAyMjgsIDM2LCAxNSwgNSwgMjIyLCAxOTAsIDE1LCA1LCAKKyAgICAyMjIsIDE5MSwgMjksIDYxLCAxNSwgNSwgMjIyLCAxOTEsIDI5LCAyNDYsIDMzLCAxNSwgNSwgMjIyLCAxOTEsIDI5LCAyNDYsIAorICAgIDMxLCAxNSwgNSwgMjIyLCAxOTEsIDI5LCAxNTksIDE1LCA1LCAyMjIsIDE5MSwgMjksIDIzNCwgMjQ3LCAxNSwgNSwgMjIyLCAKKyAgICAxOTEsIDI5LCAyMzMsIDIxNywgMTUsIDUsIDIyMiwgMTkxLCAyOSwgMjMyLCAxNDIsIDE1LCA1LCAyMjIsIDE5MSwgMjksIAorICAgIDIzMSwgNDIsIDE1LCA1LCAyMjIsIDE5MSwgMjksIDIyOCwgNTAsIDE1LCA1LCAyMjIsIDE5MSwgMjksIDIyMiwgMTc5LCAxNSwgCisgICAgNSwgMjIyLCAxOTEsIDI5LCAyMjAsIDIxMCwgMTUsIDUsIDIyMiwgMTkxLCAyOSwgMjE4LCA0MSwgMTUsIDUsIDIyMiwgMTkxLCAKKyAgICAyOSwgMjE1LCAxOTcsIDE1LCA1LCAyMjIsIDE5MSwgMjksIDIxNSwgMTk0LCAxNSwgNSwgMjIyLCAxOTEsIDI5LCAyMTUsIAorICAgIDE2NywgMTUsIDUsIDIyMiwgMTkxLCAyOSwgMjE1LCAxMjEsIDE1LCA1LCAyMjIsIDE5MSwgMjksIDIxNSwgMTAwLCAxNSwgNSwgCisgICAgMjIyLCAxOTEsIDExMCwgMjIyLCAxOTAsIDE1LCA1LCAyMjIsIDE5MSwgMjQyLCA3NSwgMTUsIDUsIDIyMiwgMTc5LCAxNSwgCisgICAgNSwgMjIyLCAxODAsIDIzMywgMTQxLCAyOSwgMjUzLCAxNDQsIDE1LCA1LCAyMjIsIDE1NSwgMTUsIDUsIDIyMiwgMTQ3LCAKKyAgICAxNSwgNSwgMjIxLCAyNCwgMTUsIDUsIDIyMSwgMjIsIDE1LCA1LCAyMjEsIDIzLCAyOSwgNjEsIDE1LCA1LCAyMjEsIDIzLCAKKyAgICAyOSwgMjUyLCA5NCwgMTUsIDUsIDIyMSwgMjMsIDI5LCAyNDIsIDE2NiwgMTUsIDUsIDIyMSwgMjMsIDI5LCAyMjksIDE4NywgCisgICAgMTUsIDUsIDIyMSwgMjMsIDI5LCAyMjAsIDE0OCwgMTUsIDUsIDIyMSwgMjMsIDI5LCAyMTYsIDYyLCAxNSwgNSwgMjIxLCAKKyAgICAyMywgMjksIDY5LCAxNSwgNSwgMjIxLCAyMywgMjksIDExMSwgOTQsIDYxLCAxNSwgNSwgMjIxLCAyMSwgMTUsIDUsIDIyMSwgCisgICAgMTksIDE1LCA1LCAyMjEsIDEsIDE1LCA1LCAyMjAsIDI0MywgMTUsIDUsIDIyMCwgMjQ0LCAyNDAsIDIxMiwgMTUsIDUsIAorICAgIDIyMCwgMjQ0LCAxMTAsIDIyMCwgMjQ0LCAyNDMsIDEwMiwgMTEwLCAyNDMsIDEwMiwgMjQzLCA3MywgMTEwLCAyNDMsIDcyLCAKKyAgICAxNSwgNSwgMjIwLCAyNDQsIDExMCwgMjIwLCAyNDQsIDIxOCwgNDIsIDExMCwgMjE4LCA0MiwgMjQzLCA3MywgMTEwLCAyNDMsIAorICAgIDcyLCAxNSwgNSwgMjIwLCAyMzYsIDE1LCA1LCAyMjAsIDIzMSwgMTUsIDUsIDIyMCwgMjI4LCAxNSwgNSwgMjIwLCAyMjcsIAorICAgIDE1LCA1LCAyMjAsIDIyNCwgMTUsIDUsIDIyMCwgMjEwLCAxNSwgNSwgMjIwLCAyMTEsIDI5LCA2MSwgMTUsIDUsIDIyMCwgCisgICAgMjExLCAyOSwgMjM2LCAxMSwgMTUsIDUsIDIyMCwgMjA0LCAxNSwgNSwgMjIwLCAyMDUsIDI5LCA2MSwgMTUsIDUsIDIyMCwgCisgICAgMjA1LCAyOSwgMjUyLCA4MCwgMTUsIDUsIDIyMCwgMjA1LCAyOSwgMjUxLCAzOCwgMTUsIDUsIDIyMCwgMjA1LCAyOSwgMjQ3LCAKKyAgICAxNTgsIDE1LCA1LCAyMjAsIDIwNSwgMjksIDI0MywgNzIsIDE1LCA1LCAyMjAsIDIwNSwgMjksIDIzNiwgMzAsIDE1LCA1LCAKKyAgICAyMjAsIDIwNSwgMjksIDIzNiwgMzEsIDI0MiwgNzUsIDE1LCA1LCAyMjAsIDIwNSwgMjksIDIzMywgMjEyLCAxNSwgNSwgCisgICAgMjIwLCAyMDUsIDI5LCAyMzIsIDE0NCwgMTUsIDUsIDIyMCwgMjA1LCAyOSwgMjMwLCAxNjMsIDE1LCA1LCAyMjAsIDIwNSwgCisgICAgMjksIDIyMiwgMTc5LCAxNSwgNSwgMjIwLCAxOTgsIDE1LCA1LCAyMjAsIDE5MywgMTUsIDUsIDIyMCwgMTk0LCAyMTcsIAorICAgIDE5MiwgMTUsIDUsIDIyMCwgMTk0LCAxMTAsIDIyMCwgMTk0LCAyNTEsIDI4LCAxMTAsIDI1MSwgMjcsIDE1LCA1LCAyMjAsIAorICAgIDE4OSwgMTUsIDUsIDIyMCwgMTUwLCAxNSwgNSwgMjIwLCAxNTEsIDExMCwgMjM1LCAxOTEsIDIyMCwgMTUwLCAxNSwgNSwgCisgICAgMjIwLCAxNDgsIDE1LCA1LCAyMjAsIDE0NywgMTUsIDUsIDIyMCwgMTE3LCAxNSwgNSwgMjIwLCAxMTgsIDI0MiwgNzUsIDE1LCAKKyAgICA1LCAyMjAsIDEwOCwgMTUsIDUsIDIyMCwgMTA2LCAxNSwgNSwgMjIwLCAxMDcsIDExMCwgMjIwLCAxMDcsIDIyMCwgMTQ4LCAKKyAgICAxNSwgNSwgMjIwLCA5OSwgMTUsIDUsIDIyMCwgOTcsIDE1LCA1LCAyMTksIDI3LCAxNSwgNSwgMjE5LCAyOCwgMTEwLCAyMTksIAorICAgIDI3LCAxNSwgNSwgMjE4LCAyNTUsIDE1LCA1LCAyMTgsIDI1NCwgMTUsIDUsIDIxOCwgMjUyLCAxNSwgNSwgMjE4LCAyNDQsIAorICAgIDE1LCA1LCAyMTgsIDI0MywgMTUsIDUsIDIxOCwgMjE3LCAxNSwgNSwgMjE4LCAyMTYsIDE1LCA1LCAyMTgsIDUyLCAxNSwgNSwgCisgICAgMjE4LCA1MywgMjUzLCAxMzIsIDE1LCA1LCAyMTgsIDUzLCAyOSwgMjQxLCAxNjUsIDE1LCA1LCAyMTgsIDUzLCAyOSwgMjMxLCAKKyAgICA0MiwgMTUsIDUsIDIxOCwgNTMsIDI0MiwgNzUsIDE1LCA1LCAyMTgsIDQxLCAxNSwgNSwgMjE4LCA0MiwgMTEwLCAyMTgsIAorICAgIDQyLCAyMjksIDY1LCAxMTAsIDIyOSwgNjUsIDI0NywgMTQwLCAxMTAsIDI0NywgMTM5LCAxNSwgNSwgMjE4LCA0MiwgMjE5LCAKKyAgICAxNjUsIDE1LCA1LCAyMTgsIDMzLCAxNSwgNSwgMTI2LCAyOSwgMjUxLCAxODQsIDE1LCA1LCAxMjYsIDI5LCAyNDIsIDg0LCAKKyAgICAxNSwgNSwgMTI2LCAyOSwgMjIwLCAyNDMsIDE1LCA1LCAxMjYsIDI5LCAyMjAsIDE1MCwgMTUsIDUsIDEyNiwgMjksIDIxNiwgCisgICAgNzcsIDE1LCA1LCAxMjYsIDI5LCAyMTUsIDE4OCwgMTUsIDUsIDIxOCwgMjIsIDE1LCA1LCAyMTgsIDEsIDE1LCA1LCAyMTcsIAorICAgIDIyOSwgMTUsIDUsIDIxNywgMjMwLCAyNDIsIDc1LCAxNSwgNSwgMjE3LCA3MSwgMTUsIDUsIDIxNywgNzIsIDIxNywgMTkyLCAKKyAgICAxNSwgNSwgMjE3LCA0NCwgMTUsIDUsIDIxNywgMjUsIDE1LCA1LCAyMTcsIDI2LCAyOSwgMjE4LCAyMiwgMTUsIDUsIDIxNywgCisgICAgMjYsIDExMCwgMjE3LCAyNSwgMTUsIDUsIDIxNywgMjYsIDExMCwgMjE3LCAyNiwgMjQzLCAxMDIsIDExMCwgMjQzLCAxMDIsIAorICAgIDI0MywgNzMsIDExMCwgMjQzLCA3MiwgMTUsIDUsIDIxNiwgODIsIDE1LCA1LCAyMTYsIDc3LCAxNSwgNSwgMjE2LCA3NSwgCisgICAgMTUsIDUsIDIxNiwgNzIsIDE1LCA1LCAyMTYsIDYyLCAxNSwgNSwgMjE2LCA2MywgMTEwLCAyMTYsIDYzLCAyMTIsIDExMCwgCisgICAgMTEwLCAyMTIsIDEwOSwgMTUsIDUsIDY5LCAxNSwgNSwgMTExLCAyNDIsIDg0LCAxNSwgNSwgMTExLCAxMTEsIDY5LCAxNSwgCisgICAgNSwgMTExLCAxMTAsIDExMSwgMjI2LCAyMTQsIDExMCwgMjI2LCAyMTQsIDI0MywgNzMsIDExMCwgMjQzLCA3MiwgMTUsIDUsIAorICAgIDExMSwgMTEwLCAxMTEsIDIxOCwgMjE4LCAxMTAsIDIxOCwgMjE3LCAxNSwgNSwgMTExLCAxMTAsIDExMSwgMTExLCAyMjMsIAorICAgIDIwMiwgMTEwLCAxMTEsIDIyMywgMjAxLCAxNSwgNSwgMjE1LCAxOTcsIDE1LCA1LCAyMTUsIDE5NCwgMTUsIDUsIDIxNSwgCisgICAgMTg4LCAxNSwgNSwgMjE1LCAxODksIDIzMywgMjEyLCAxNSwgNSwgMjE1LCAxODksIDI5LCAyNTIsIDk0LCAxNSwgNSwgMjE1LCAKKyAgICAxODksIDI5LCAyMzEsIDQyLCAxNSwgNSwgMjE1LCAxODksIDI5LCAxMTEsIDk0LCAxMTEsIDk0LCA2OSwgMTUsIDUsIDIxNSwgCisgICAgMTg5LCAyOSwgMTExLCA5NCwgMTExLCA5NCwgMTExLCAyNDIsIDc1LCAxNSwgNSwgMjE1LCAxODksIDI0MiwgNzUsIDE1LCA1LCAKKyAgICAyMTUsIDE4OSwgMjIwLCAyMjUsIDE1LCA1LCAyMTUsIDE4OSwgMjIwLCAyMjYsIDI5LCAyNTIsIDk0LCAxNSwgNSwgMjE1LCAKKyAgICAxODQsIDE1LCA1LCAyMTUsIDE2NywgMTUsIDUsIDIxNSwgMTY4LCAyOSwgMjMzLCAxNDAsIDE1LCA1LCAyMTUsIDE2OCwgMjksIAorICAgIDIzMSwgMTU3LCA5NCwgMjQ4LCAxNjQsIDE1LCA1LCAyMTUsIDE2OCwgMjksIDIyMSwgMjIsIDE1LCA1LCAyMTUsIDE2OCwgCisgICAgMjksIDY5LCAxNSwgNSwgMjE1LCAxNjYsIDE1LCA1LCAyMTUsIDE2MiwgMTUsIDUsIDIxNSwgMTYzLCAyOSwgMjM0LCAyMTIsIAorICAgIDE1LCA1LCAyMTUsIDE2MywgMjksIDE5MywgMTUsIDUsIDIxNSwgMTYwLCAxNSwgNSwgMjE1LCAxNjEsIDI0MiwgNzUsIDE1LCAKKyAgICA1LCAyMTUsIDEyMSwgMTUsIDUsIDIxNSwgMTIyLCAyNDksIDY1LCAyMTUsIDEyMSwgMTUsIDUsIDIxNSwgMTIyLCAyMjAsIAorICAgIDIyNSwgMTUsIDUsIDIxNSwgMTE5LCAxNSwgNSwgMjE1LCAxMjAsIDI5LCAxMTgsIDk0LCAxNTksIDE1LCA1LCAyMTUsIDEyMCwgCisgICAgMjksIDExOCwgOTQsIDIwNSwgMTUsIDUsIDIxNSwgMTIwLCAyOSwgMjU0LCA4NiwgMTUsIDUsIDIxNSwgMTIwLCAyOSwgMTU5LCAKKyAgICAxNSwgNSwgMjE1LCAxMjAsIDI5LCAyMjgsIDUwLCAxNSwgNSwgMjE1LCAxMjAsIDI5LCAyMTUsIDE5NywgMTUsIDUsIDIxNSwgCisgICAgMTIwLCAyOSwgMjE1LCAxOTgsIDk0LCAyNTMsIDE0NiwgMTUsIDUsIDIxNSwgMTIwLCAyOSwgMjE1LCAxOTgsIDk0LCAyNTEsIAorICAgIDE4NCwgMTUsIDUsIDIxNSwgMTE4LCAxNSwgNSwgMjE1LCAxMTUsIDE1LCA1LCAyMTUsIDExNCwgMTUsIDUsIDIxNSwgMTEwLCAKKyAgICAxNSwgNSwgMjE1LCAxMTEsIDI5LCA2MSwgMTUsIDUsIDIxNSwgMTExLCAyOSwgMjUzLCAxNDEsIDE1LCA1LCAyMTUsIDExMSwgCisgICAgMjksIDEzNCwgMTUsIDUsIDIxNSwgMTExLCAyOSwgMjQ2LCAyMywgMTUsIDUsIDIxNSwgMTExLCAyOSwgMjQzLCAxMTAsIDE1LCAKKyAgICA1LCAyMTUsIDExMSwgMjksIDI0MywgOTQsIDE1LCA1LCAyMTUsIDExMSwgMjksIDI0MywgODEsIDIxNywgMTkyLCAxNSwgNSwgCisgICAgMjE1LCAxMTEsIDI5LCAyNDMsIDcyLCAxNSwgNSwgMjE1LCAxMTEsIDI5LCAyNDIsIDkyLCAxNSwgNSwgMjE1LCAxMTEsIDI5LCAKKyAgICAxNTksIDE1LCA1LCAyMTUsIDExMSwgMjksIDIzNiwgMzAsIDE1LCA1LCAyMTUsIDExMSwgMjksIDIzNiwgMTEsIDE1LCA1LCAKKyAgICAyMTUsIDExMSwgMjksIDIzNSwgMTYzLCAxNSwgNSwgMjE1LCAxMTEsIDI5LCAyMzQsIDEwMSwgMTUsIDUsIDIxNSwgMTExLCAKKyAgICAyOSwgMjMyLCAxNDIsIDE1LCA1LCAyMTUsIDExMSwgMjksIDIzMSwgMSwgMTUsIDUsIDIxNSwgMTExLCAyOSwgMTkzLCAxNSwgCisgICAgNSwgMjE1LCAxMTEsIDI5LCAyMjAsIDI0MywgMTUsIDUsIDIxNSwgMTExLCAyOSwgMjIwLCAxMDYsIDE1LCA1LCAyMTUsIAorICAgIDExMSwgMjksIDIxNiwgODIsIDE1LCA1LCAyMTUsIDExMSwgMjksIDExMSwgOTQsIDI0MiwgODQsIDE1LCA1LCAyMTUsIDExMSwgCisgICAgMjksIDIxNSwgMTg4LCAxNSwgNSwgMjE1LCAxMTEsIDI5LCAyMTUsIDEwOCwgMTUsIDUsIDIxNSwgMTA4LCAxNSwgNSwgMjE1LCAKKyAgICAxMDksIDI5LCA2OSwgMTUsIDUsIDIxNSwgMTAwLCAxNSwgNSwgMjE1LCAxMDEsIDI5LCA2MSwgMTUsIDUsIDIxNSwgMTAxLCAKKyAgICAyOSwgMjMzLCAyMzgsIDE1LCA1LCAyMTUsIDEwMSwgMjksIDIzMywgMjE3LCAxNSwgNSwgMjE1LCAxMDEsIDI5LCAyMTgsIAorICAgIDIyLCAxNSwgNSwgMjE1LCA5NiwgMTUsIDUsIDIxNSwgOTksIDE1LCA1LCAyMTUsIDk3LCAxNSwgNSwgMjE1LCA5MywgMTUsIAorICAgIDUsIDIxNSwgODIsIDE1LCA1LCAyMTUsIDgzLCAyOSwgMjM0LCAyMTIsIDE1LCA1LCAyMTUsIDgxLCAxNSwgNSwgMjEyLCAKKyAgICAxMDksIDE1LCA1LCAyMTIsIDExMCwgMjE3LCAxOTIsIDE1LCA1LCAyMTIsIDExMCwgOTEsIDI5LCAyMzMsIDIxNywgMTUsIDUsIAorICAgIDIxMiwgMTA2LCAxNSwgNSwgMjEyLCA5OSwgMTUsIDUsIDIxMiwgODYsIDE1LCA1LCAyMTIsIDM3LCAxNSwgNSwgMjEyLCAzOCwgCisgICAgMTEwLCAyMTIsIDM3LCAxNSwgNSwgMjEyLCAzNiwgMTUsIDUsIDIxMiwgMzQsIDE1LCA1LCAyMTIsIDM1LCAyMzUsIDcsIAorICAgIDIxNywgMTkyLCAxNSwgNSwgMjEyLCAyOSwgMTUsIDUsIDIxMiwgMjEsIDE1LCA1LCAyMTIsIDgsIDE1LCA1LCAyMTIsIDYsIAorICAgIDE1LCA1LCAyMTIsIDcsIDI5LCA2MSwgMTUsIDUsIDIxMiwgNSwgMTUsIDUsIDIxMiwgNCwgMTUsIDEyOCwgNSwgMTE3LCAKKyAgICAyNTMsIDE0NiwgMTUsIDEyOCwgNSwgMTMzLCAyNTMsIDE0NiwgMTUsIDEyOCwgNSwgMjQzLCAyMzcsIDI1MywgMTQ2LCAxNSwgCisgICAgMTI4LCA1LCAyNDQsIDUwLCAyNTMsIDE0NiwgMTUsIDEyOCwgNSwgMjIwLCA1MywgMjUzLCAxNDYsIDE1LCAxMjgsIDUsIAorICAgIDIyMSwgNDMsIDI1MywgMTQ2LCAxNSwgMTI4LCA1LCAyNDUsIDE1MCwgMjUzLCAxNDYsIDE1LCAxMjgsIDUsIDIyOSwgMzEsIAorICAgIDI1MywgMTQ2LCAxNSwgMTI4LCA1LCAxMzMsIDI0NywgMTM5LCAxNSwgMTI4LCA1LCAyNDMsIDIzNywgMjQ3LCAxMzksIDE1LCAKKyAgICAxMjgsIDUsIDI0NCwgNTAsIDI0NywgMTM5LCAxNSwgMTI4LCA1LCAyMjAsIDUzLCAyNDcsIDEzOSwgMTUsIDEyOCwgNSwgCisgICAgMjIxLCA0MywgMjQ3LCAxMzksIDE1LCAxMjgsIDUsIDI0NSwgMTUwLCAyNDcsIDEzOSwgMTUsIDEyOCwgNSwgMjI5LCAzMSwgCisgICAgMjQ3LCAxMzksIDE1LCAxMjgsIDUsIDI0MywgMjM3LCA2OSwgMTUsIDEyOCwgNSwgMjQ0LCA1MCwgNjksIDE1LCAxMjgsIDUsIAorICAgIDIyMCwgNTMsIDY5LCAxNSwgMTI4LCA1LCAyMjEsIDQzLCA2OSwgMTUsIDEyOCwgNSwgMjQ1LCAxNTAsIDY5LCAxNSwgMTI4LCAKKyAgICA1LCAyMjksIDMxLCA2OSwgMTUsIDEyOCwgNSwgMTIyLCAyNDMsIDE0LCAxNSwgMTI4LCA1LCAxMTcsIDI0MywgMTQsIDE1LCAKKyAgICAxMjgsIDUsIDEzMywgMjQzLCAxNCwgMTUsIDEyOCwgNSwgMjQzLCAyMzcsIDI0MywgMTQsIDE1LCAxMjgsIDUsIDI0NCwgNTAsIAorICAgIDI0MywgMTQsIDE1LCAxMjgsIDUsIDIyMCwgNTMsIDI0MywgMTQsIDE1LCAxMjgsIDUsIDIyMSwgNDMsIDI0MywgMTQsIDE1LCAKKyAgICAxMjgsIDUsIDI0NSwgMTUwLCAyNDMsIDE0LCAxNSwgMTI4LCA1LCAyMjksIDMxLCAyNDMsIDE0LCAxNSwgMTI4LCA1LCAxMjIsIAorICAgIDI0MywgMTEsIDE1LCAxMjgsIDUsIDExNywgMjQzLCAxMSwgMTUsIDEyOCwgNSwgMTMzLCAyNDMsIDExLCAxNSwgMTI4LCA1LCAKKyAgICAyNDMsIDIzNywgMjQzLCAxMSwgMTUsIDEyOCwgNSwgMjQ0LCA1MCwgMjQzLCAxMSwgMTUsIDEyOCwgNSwgMTE3LCAyMjEsIDEsIAorICAgIDE1LCAxMjgsIDUsIDEzMywgMjIxLCAxLCAxNSwgMTI4LCA1LCAxMzMsIDIyMSwgMiwgMjE0LCAyNDQsIDE3LCAxNSwgMTI4LCAKKyAgICA1LCAyNDMsIDIzNywgMjIxLCAxLCAxNSwgMTI4LCA1LCAyNDQsIDUwLCAyMjEsIDEsIDE1LCAxMjgsIDUsIDIyMCwgNTMsIAorICAgIDIyMSwgMSwgMTUsIDEyOCwgNSwgMjIxLCA0MywgMjIxLCAxLCAxNSwgMTI4LCA1LCAyNDUsIDE1MCwgMjIxLCAxLCAxNSwgCisgICAgMTI4LCA1LCAyMjksIDMxLCAyMjEsIDEsIDE1LCAxMjgsIDUsIDEyMiwgMjIwLCAyNTIsIDE1LCAxMjgsIDUsIDExNywgMjIwLCAKKyAgICAyNTIsIDE1LCAxMjgsIDUsIDEzMywgMjIwLCAyNTIsIDE1LCAxMjgsIDUsIDEzMywgMjIwLCAyNTMsIDIxNCwgMjQ0LCAxNywgCisgICAgMTUsIDEyOCwgNSwgMjQzLCAyMzcsIDIyMCwgMjUyLCAxNSwgMTI4LCA1LCAyNDQsIDUwLCAyMjAsIDI1MiwgMTUsIDEyOCwgCisgICAgNSwgMjIxLCAyLCAyOSwgMjQzLCA5NSwgOTQsIDI0NywgMTM5LCAxNSwgMTI4LCA1LCAyMjEsIDIsIDI5LCAyNDMsIDk1LCAKKyAgICA5NCwgMjMxLCAxLCAxNSwgMTI4LCA1LCAxMjIsIDI1MSwgMjQsIDE1LCAxMjgsIDUsIDExNywgMjUxLCAyNCwgMTUsIDEyOCwgCisgICAgNSwgMTMzLCAyNTEsIDI0LCAxNSwgMTI4LCA1LCAxMzMsIDI1MSwgMjUsIDIxNCwgMjQ0LCAxNywgMTUsIDEyOCwgNSwgMjQzLCAKKyAgICAyMzcsIDI1MSwgMjQsIDE1LCAxMjgsIDUsIDI0NCwgNTAsIDI1MSwgMjQsIDE1LCAxMjgsIDUsIDEzMywgMjE0LCAyNDQsIAorICAgIDI0MywgMjQ1LCAyNDUsIDM5LCAxNSwgMTI4LCA1LCAxMzMsIDIxNCwgMjQ0LCAyNDMsIDI0NSwgMjQ1LCAzNiwgMTUsIDEyOCwgCisgICAgNSwgMjQzLCAyMzcsIDIxNCwgMjQ0LCAyNDMsIDI0NSwgMjMyLCAyNDYsIDE1LCAxMjgsIDUsIDI0MywgMjM3LCAyMTQsIAorICAgIDI0NCwgMjQzLCAyNDUsIDIzMiwgMjQ0LCAxNSwgMTI4LCA1LCAyNDMsIDIzNywgMjE0LCAyNDQsIDI0MywgMjQ1LCAyMzIsIAorICAgIDI0NywgNjEsIDE1LCAxMjgsIDUsIDI0MywgMjM3LCAyMTQsIDI0NCwgMjQzLCAyNDUsIDIzMiwgMjQ3LCAyNTMsIDc0LCAxNSwgCisgICAgMTI4LCA1LCAyMjAsIDUzLCAyMTQsIDI0NCwgMjQzLCAyNDUsIDI1MywgMTQzLCAxNSwgMTI4LCA1LCAyMjEsIDQzLCAyMTQsIAorICAgIDI0NCwgMjQzLCAyNDUsIDIzNiwgMywgMTUsIDEyOCwgNSwgMjIxLCA0MywgMjE0LCAyNDQsIDI0MywgMjQ1LCAyMzYsIDUsIAorICAgIDYxLCAxNSwgMTI4LCA1LCAyMjEsIDQzLCAyMTQsIDI0NCwgMjQzLCAyNDUsIDIzNiwgNSwgMjUzLCA3NCwgMTUsIDEyOCwgNSwgCisgICAgMjQ1LCAxNTAsIDIxNCwgMjQ0LCAyNDMsIDI0NSwgMjE1LCA5NSwgMTUsIDEyOCwgNSwgMjQ1LCAxNTAsIDIxNCwgMjQ0LCAKKyAgICAyNDMsIDI0NSwgMjE1LCA5NCwgMTUsIDEyOCwgNSwgMjI5LCAzMSwgMjE0LCAyNDQsIDI0MywgMjQ1LCAyMzYsIDE5LCAxNSwgCisgICAgMTI4LCA1LCAyMjksIDMxLCAyMTQsIDI0NCwgMjQzLCAyNDUsIDIzNiwgMTgsIDE1LCAxMjgsIDUsIDIyOSwgMzEsIDIxNCwgCisgICAgMjQ0LCAyNDMsIDI0NSwgMjM2LCAxNywgMTUsIDEyOCwgNSwgMjI5LCAzMSwgMjE0LCAyNDQsIDI0MywgMjQ1LCAyMzYsIDIwLCAKKyAgICA2MSwgMTUsIDEyOCwgNSwgMTE3LCAyNTMsIDE0NywgMjE3LCAxOTIsIDE1LCAxMjgsIDUsIDEzMywgMjUzLCAxNDcsIDIxNywgCisgICAgMTkyLCAxNSwgMTI4LCA1LCAyNDMsIDIzNywgMjUzLCAxNDcsIDIxNywgMTkyLCAxNSwgMTI4LCA1LCAyNDQsIDUwLCAyNTMsIAorICAgIDE0NywgMjE3LCAxOTIsIDE1LCAxMjgsIDUsIDIyMCwgNTMsIDI1MywgMTQ3LCAyMTcsIDE5MiwgMTUsIDEyOCwgNSwgMTIyLCAKKyAgICAyNTIsIDY5LCAxNSwgMTI4LCA1LCAxMTcsIDI1MiwgNjksIDE1LCAxMjgsIDUsIDEzMywgMjUyLCA2OSwgMTUsIDEyOCwgNSwgCisgICAgMjQzLCAyMzcsIDI1MiwgNjksIDE1LCAxMjgsIDUsIDI0MywgMjM3LCAyNTIsIDcwLCAyMTQsIDI0NCwgMTcsIDE1LCAxMjgsIAorICAgIDUsIDI0NCwgNTAsIDI1MiwgNjksIDE1LCAxMjgsIDUsIDI0NCwgNTAsIDI1MiwgNzAsIDIxNCwgMjQ0LCAxNywgMTUsIDEyOCwgCisgICAgNSwgMjI5LCA0MSwgMTUsIDEyOCwgNSwgMjI5LCA0MiwgMTUsIDEyOCwgNSwgMTIyLCAyNDUsIDM1LCAxNSwgMTI4LCA1LCAKKyAgICAxMTcsIDI0NSwgMzUsIDE1LCAxMjgsIDUsIDEyMiwgMjE3LCAxMjIsIDI0NywgMTM5LCAxNSwgMTI4LCA1LCAxMTcsIDIxNywgCisgICAgMTIwLCAyNDcsIDEzOSwgMTUsIDEyOCwgNSwgMjQ0LCA1MCwgMjIwLCA0MiwgMjQ3LCAxMzksIDE1LCAxMjgsIDUsIDEyMiwgCisgICAgMjE3LCAxMjIsIDIxNCwgMjQ0LCAyNDMsIDI0NSwgNjEsIDE1LCAxMjgsIDUsIDExNywgMjE3LCAxMjAsIDIxNCwgMjQ0LCAKKyAgICAyNDMsIDI0NSwgNjEsIDE1LCAxMjgsIDUsIDEyMiwgMjQ1LCAxNDYsIDI1MywgMTQ2LCAxNSwgMTI4LCA1LCAxMjIsIDIyNCwgCisgICAgMTY3LCAyNTMsIDE0NiwgMTUsIDEyOCwgNSwgNTMsIDI1MywgMTM1LCAxMjIsIDIyMCwgNDMsIDE1LCAxMjgsIDUsIDUzLCAKKyAgICAyNTMsIDEzNSwgMTIyLCAyMjQsIDE2NiwgMTUsIDIyNSwgMjcsIDUsIDUzLCAyNTMsIDEzNSwgMjEzLCAxOTYsIDI0NywgCisgICAgMTI0LCAxNSwgMjI1LCAyNywgNSwgNzEsIDI0OSwgMTY0LCAxNSwgMjI1LCAyNywgNSwgMjQ3LCAyMDcsIDI0OSwgMTY0LCAKKyAgICAxNSwgMjI1LCAyNywgNSwgMjQ3LCAyMDcsIDIxNiwgMTc5LCAxMCwgMTEsIDI1NSwgNTgsIDEwLCAxMSwgMjU1LCA1NywgMTAsIAorICAgIDExLCAyNTUsIDU2LCAxMCwgMTEsIDI1NSwgNTUsIDEwLCAxMSwgMjU1LCA1NCwgMTAsIDExLCAyNTUsIDUzLCAxMCwgMTEsIAorICAgIDI1NSwgNTIsIDEwLCAxMSwgMjU1LCA1MSwgMTAsIDExLCAyNTUsIDUwLCAxMCwgMTEsIDI1NSwgNDksIDEwLCAxMSwgMjU1LCAKKyAgICA0OCwgMTAsIDExLCAyNTUsIDQ3LCAxMCwgMTEsIDI1NSwgNDYsIDEwLCAxMSwgMjU1LCA0NSwgMTAsIDExLCAyNTUsIDQ0LCAKKyAgICAxMCwgMTEsIDI1NSwgNDMsIDEwLCAxMSwgMjU1LCA0MiwgMTAsIDExLCAyNTUsIDQxLCAxMCwgMTEsIDI1NSwgNDAsIDEwLCAKKyAgICAxMSwgMjU1LCAzOSwgMTAsIDExLCAyNTUsIDM4LCAxMCwgMTEsIDI1NSwgMzcsIDEwLCAxMSwgMjU1LCAzNiwgMTAsIDExLCAKKyAgICAyNTUsIDM1LCAxMCwgMTEsIDI1NSwgMzQsIDEwLCAxMSwgMjU1LCAzMywgMTAsIDExLCAyNTUsIDMyLCAxMCwgMTEsIDI1NSwgCisgICAgMzEsIDEwLCAxMSwgMjU1LCAzMCwgMTAsIDExLCAyNTUsIDI5LCAxMCwgMTEsIDI1NSwgMjgsIDEwLCAxMSwgMjU1LCAyNywgCisgICAgMTAsIDExLCAyNTUsIDI2LCAxMCwgMTEsIDI1NSwgMjUsIDEwLCAxMSwgMjU1LCAyNCwgMTAsIDExLCAyNTUsIDIzLCAxMCwgCisgICAgMTEsIDI1NSwgMjIsIDEwLCAxMSwgMjU1LCAyMSwgMTAsIDExLCAyNTUsIDIwLCAxMCwgMTEsIDI1NSwgMTksIDEwLCAxMSwgCisgICAgMjU1LCAxOCwgMTAsIDExLCAyNTUsIDE3LCAxMCwgMTEsIDI1NSwgMTYsIDEwLCAxMSwgMjU1LCAxNSwgMTAsIDExLCAyNTUsIAorICAgIDE0LCAxMCwgMTEsIDI1NSwgMTMsIDEwLCAxMSwgMjU1LCAxMiwgMTAsIDExLCAyNTUsIDExLCAxMCwgMTEsIDI1NSwgMTAsIAorICAgIDEwLCAxMSwgMjU1LCA5LCAxMCwgMTEsIDI1NSwgOCwgMTAsIDExLCAyNTUsIDcsIDEwLCAxMSwgMjU1LCA2LCAxMCwgMTEsIAorICAgIDI1NSwgNSwgMTAsIDExLCAyNTUsIDQsIDEwLCAxMSwgMjU1LCAzLCAxMCwgMTEsIDI1NSwgMiwgMTAsIDExLCAyNTUsIDEsIAorICAgIDEwLCAxMSwgMjU1LCAwLCAxMCwgMTEsIDI1NCwgMjU1LCAxMCwgMTEsIDI1NCwgMjU0LCAxMCwgMTEsIDI1NCwgMjUzLCAxMCwgCisgICAgMTEsIDI1NCwgMjUyLCAxMCwgMTEsIDI1NCwgMjUxLCAxMCwgMTEsIDI1NCwgMjUwLCAxMCwgMTEsIDI1NCwgMjQ5LCAxMCwgCisgICAgMTEsIDI1NCwgMjQ4LCAxMCwgMTEsIDI1NCwgMjQ3LCAxMCwgMTEsIDI1NCwgMjQ2LCAxMCwgMTEsIDI1NCwgMjQ1LCAxMCwgCisgICAgMTEsIDI1NCwgMjQ0LCAxMCwgMTEsIDI1NCwgMjQzLCAxMCwgMTEsIDI1NCwgMjQyLCAxMCwgMTEsIDI1NCwgMjQxLCAxMCwgCisgICAgMTEsIDI1NCwgMjQwLCAxMCwgMTEsIDI1NCwgMjM5LCAxMCwgMTEsIDI1NCwgMjM4LCAxMCwgMTEsIDI1NCwgMjM3LCAxMCwgCisgICAgMTEsIDI1NCwgMjM2LCAxMCwgMTEsIDI1NCwgMjM1LCAxMCwgMTEsIDI1MywgNzIsIDEwLCAxMSwgMjUzLCA3MCwgMTAsIDExLCAKKyAgICAyNTMsIDY4LCAxMCwgMTEsIDI1MywgNjYsIDEwLCAxMSwgMjUzLCA2NCwgMTAsIDExLCAyNTMsIDYzLCAxMCwgMTEsIDI1MywgCisgICAgNjEsIDEwLCAxMSwgMjUzLCA1OSwgMTAsIDExLCAyNTMsIDU3LCAxMCwgMTEsIDI1MywgNTUsIDEwLCAxMSwgMjUwLCAyNDgsIAorICAgIDEwLCAxMSwgMjUwLCAyNDcsIDEwLCAxMSwgMjUwLCAyNDYsIDEwLCAxMSwgMjUwLCAyNDUsIDEwLCAxMSwgMjUwLCAyNDQsIAorICAgIDEwLCAxMSwgMjUwLCAyNDMsIDEwLCAxMSwgMjUwLCAyNDIsIDEwLCAxMSwgMjUwLCAyNDEsIDEwLCAxMSwgMjUwLCAyNDAsIAorICAgIDEwLCAxMSwgMjUwLCAyMzksIDEwLCAxMSwgMjUwLCAyMzgsIDEwLCAxMSwgMjUwLCAyMzcsIDEwLCAxMSwgMjUwLCAyMzYsIAorICAgIDEwLCAxMSwgMjUwLCAyMzUsIDEwLCAxMSwgMjUwLCAyMzQsIDEwLCAxMSwgMjUwLCAyMzMsIDEwLCAxMSwgMjUwLCAyMzIsIAorICAgIDEwLCAxMSwgMjUwLCAyMzEsIDEwLCAxMSwgMjUwLCAyMzAsIDEwLCAxMSwgMjUwLCAyMjksIDEwLCAxMSwgMjUwLCAyMjgsIAorICAgIDEwLCAxMSwgMjUwLCAyMjcsIDEwLCAxMSwgMjUwLCAyMjYsIDEwLCAxMSwgMjUwLCAyMjUsIDEwLCAxMSwgMjUwLCAyMjQsIAorICAgIDEwLCAxMSwgMjUwLCAyMjMsIDEwLCAxMSwgMjUwLCAyMjIsIDEwLCAxMSwgMjUwLCAyMjEsIDEwLCAxMSwgMjQ5LCAyLCAxMCwgCisgICAgMTEsIDI0OSwgMSwgMTAsIDExLCAyNDksIDAsIDEwLCAxMSwgMjQ4LCAyNTUsIDEwLCAxMSwgMjQ4LCAyNTQsIDEwLCAxMSwgCisgICAgMjQ4LCAyNTMsIDEwLCAxMSwgMjQ4LCAyNTIsIDEwLCAxMSwgMjQ4LCAyNTEsIDEwLCAxMSwgMjQ4LCAyNTAsIDEwLCAxMSwgCisgICAgMjQ4LCAyNDksIDEwLCAxMSwgMjQ4LCAyNDgsIDEwLCAxMSwgMjQ4LCAyNDcsIDEwLCAxMSwgMjQ4LCAyNDYsIDEwLCAxMSwgCisgICAgMjQ4LCAyNDUsIDEwLCAxMSwgMjQ4LCAyNDQsIDEwLCAxMSwgMjQ4LCAyNDMsIDEwLCAxMSwgMjQ4LCAyNDIsIDEwLCAxMSwgCisgICAgMjQ4LCAyNDEsIDEwLCAxMSwgMjQ4LCAyNDAsIDEwLCAxMSwgMjQ4LCAyMzksIDEwLCAxMSwgMjQ4LCAyMzgsIDEwLCAxMSwgCisgICAgMjQ4LCAyMzcsIDEwLCAxMSwgMjQ4LCAyMzYsIDEwLCAxMSwgMjQ4LCAyMzUsIDEwLCAxMSwgMjQ4LCAyMzQsIDEwLCAxMSwgCisgICAgMjQ4LCAyMzMsIDEwLCAxMSwgMjQ4LCAyMzIsIDEwLCAxMSwgMjQ4LCAyMzEsIDEwLCAxMSwgMjQ4LCAyMzAsIDEwLCAxMSwgCisgICAgMjQ4LCAyMjksIDEwLCAxMSwgMjQ4LCAyMjgsIDEwLCAxMSwgMjQ4LCAyMjcsIDEwLCAxMSwgMjQ4LCAyMjYsIDEwLCAxMSwgCisgICAgMjQ4LCAyMjUsIDEwLCAxMSwgMjQ4LCAyMjQsIDEwLCAxMSwgMjQ4LCAyMjMsIDEwLCAxMSwgMjQ4LCAyMjIsIDEwLCAxMSwgCisgICAgMjQ4LCAyMjEsIDEwLCAxMSwgMjQ4LCAyMjAsIDEwLCAxMSwgMjQ4LCAyMTksIDEwLCAxMSwgMjQ4LCAyMTgsIDEwLCAxMSwgCisgICAgMjQ4LCAyMTcsIDEwLCAxMSwgMjQ4LCAyMTYsIDEwLCAxMSwgMjQ4LCAyMTUsIDEwLCAxMSwgMjQ4LCAyMTQsIDEwLCAxMSwgCisgICAgMjQ4LCAyMTMsIDEwLCAxMSwgMjQ4LCAyMTIsIDEwLCAxMSwgMjQ4LCAyMTEsIDEwLCAxMSwgMjQ4LCAyMTAsIDEwLCAxMSwgCisgICAgMjQ4LCAyMDksIDEwLCAxMSwgMjQ4LCAyMDgsIDEwLCAxMSwgMjQ4LCAyMDcsIDEwLCAxMSwgMjQ4LCAyMDYsIDEwLCAxMSwgCisgICAgMjQ4LCAyMDUsIDEwLCAxMSwgMjQ4LCAyMDQsIDEwLCAxMSwgMjQ4LCAyMDMsIDEwLCAxMSwgMjQ4LCAyMDIsIDEwLCAxMSwgCisgICAgMjQ4LCAyMDEsIDEwLCAxMSwgMjQ4LCAyMDAsIDEwLCAxMSwgMjQ4LCAxOTksIDEwLCAxMSwgMjQ4LCAxOTgsIDEwLCAxMSwgCisgICAgMjQ4LCAxOTcsIDEwLCAxMSwgMjQ4LCAxOTYsIDEwLCAxMSwgMjQ4LCAxOTUsIDEwLCAxMSwgMjQ4LCAxOTQsIDEwLCAxMSwgCisgICAgMjQ4LCAxOTMsIDEwLCAxMSwgMjQ4LCAxOTIsIDEwLCAxMSwgMjQ4LCAxOTEsIDEwLCAxMSwgMjQ4LCAxOTAsIDEwLCAxMSwgCisgICAgMjQ4LCAxODksIDEwLCAxMSwgMjQ4LCAxODgsIDEwLCAxMSwgMjQ4LCAxODcsIDEwLCAxMSwgMjQ4LCAxODYsIDEwLCAxMSwgCisgICAgMjQ4LCAxODUsIDEwLCAxMSwgMjQ4LCAxODQsIDEwLCAxMSwgMjQ4LCAxODMsIDEwLCAxMSwgMjQ4LCAxODIsIDEwLCAxMSwgCisgICAgMjQ4LCAxODEsIDEwLCAxMSwgMjQ4LCAxODAsIDEwLCAxMSwgMjQ4LCAxNzksIDEwLCAxMSwgMjQ4LCAxNzgsIDEwLCAxMSwgCisgICAgMjQ4LCAxNzcsIDEwLCAxMSwgMjQ4LCAxNzYsIDEwLCAxMSwgMjQ4LCAxNzUsIDEwLCAxMSwgMjQ4LCAxNzQsIDEwLCAxMSwgCisgICAgMjQ4LCAxNzMsIDEwLCAxMSwgMjQ4LCAxNzIsIDEwLCAxMSwgMjQ4LCAxNzEsIDEwLCAxMSwgMjQ4LCAxNzAsIDEwLCAxMSwgCisgICAgMjQ4LCAxNjksIDEwLCAxMSwgMjQ4LCAxNjgsIDEwLCAxMSwgMjQ4LCAxNjcsIDEwLCAxMSwgMjQ1LCAyMzUsIDEwLCAxMSwgCisgICAgMjQ1LCAyMzQsIDEwLCAxMSwgMjQ1LCAyMzMsIDEwLCAxMSwgMjQ1LCAyMzIsIDEwLCAxMSwgMjQ1LCAyMzEsIDEwLCAxMSwgCisgICAgMjQ1LCAyMzAsIDEwLCAxMSwgMjQ1LCAyMjksIDEwLCAxMSwgMjQ1LCAyMjgsIDEwLCAxMSwgMjQ1LCAyMjcsIDEwLCAxMSwgCisgICAgMjQ1LCAyMjYsIDEwLCAxMSwgMjQ1LCAyMjUsIDEwLCAxMSwgMjQ1LCAyMjQsIDEwLCAxMSwgMjQ1LCAyMjMsIDEwLCAxMSwgCisgICAgMjQ1LCAyMjIsIDEwLCAxMSwgMjQ1LCAyMjEsIDEwLCAxMSwgMjQ1LCAyMjAsIDEwLCAxMSwgMjQ1LCAyMTksIDEwLCAxMSwgCisgICAgMjQ1LCAyMTgsIDEwLCAxMSwgMjQ1LCAyMTcsIDEwLCAxMSwgMjQ1LCAyMTYsIDEwLCAxMSwgMjQ1LCAyMTUsIDEwLCAxMSwgCisgICAgMjQ1LCAyMTQsIDEwLCAxMSwgMjQ1LCAyMTMsIDEwLCAxMSwgMjQ1LCAyMTIsIDEwLCAxMSwgMjQ1LCAyMTEsIDEwLCAxMSwgCisgICAgMjQ1LCAyMTAsIDEwLCAxMSwgMjQ1LCAyMDksIDEwLCAxMSwgMjQ1LCAyMDgsIDEwLCAxMSwgMjQ1LCAyMDcsIDEwLCAxMSwgCisgICAgMjQ1LCAyMDYsIDEwLCAxMSwgMjQ1LCAyMDUsIDEwLCAxMSwgMjQ1LCAyMDQsIDEwLCAxMSwgMjQ1LCAyMDMsIDEwLCAxMSwgCisgICAgMjQ1LCAyMDIsIDEwLCAxMSwgMjQ1LCAyMDEsIDEwLCAxMSwgMjQ1LCAyMDAsIDEwLCAxMSwgMjQ1LCAxOTksIDEwLCAxMSwgCisgICAgMjQ1LCAxOTgsIDEwLCAxMSwgMjQ1LCAxOTcsIDEwLCAxMSwgMjQ1LCAxOTYsIDEwLCAxMSwgMjQ1LCAxOTUsIDEwLCAxMSwgCisgICAgMjQ1LCAxOTQsIDEwLCAxMSwgMjQ1LCAxOTMsIDEwLCAxMSwgMjQ1LCAxOTIsIDEwLCAxMSwgMjQ0LCAyMjksIDEwLCAxMSwgCisgICAgMjQ0LCAyMjgsIDEwLCAxMSwgMjQ0LCAyMjcsIDEwLCAxMSwgMjQ0LCAyMjYsIDEwLCAxMSwgMjQ0LCAyMjUsIDEwLCAxMSwgCisgICAgMjQ0LCAyMjQsIDEwLCAxMSwgMjQ0LCAyMjMsIDEwLCAxMSwgMjQ0LCAyMjIsIDEwLCAxMSwgMjQ0LCAyMjEsIDEwLCAxMSwgCisgICAgMjQ0LCAyMjAsIDEwLCAxMSwgMjQ0LCAyMTksIDEwLCAxMSwgMjQ0LCAyMTgsIDEwLCAxMSwgMjQ0LCAyMTcsIDEwLCAxMSwgCisgICAgMjQ0LCAyMTYsIDEwLCAxMSwgMjQ0LCAyMTUsIDEwLCAxMSwgMjQ0LCAyMTQsIDEwLCAxMSwgMjQ0LCAyMTMsIDEwLCAxMSwgCisgICAgMjQ0LCAyMTIsIDEwLCAxMSwgMjQ0LCAyMTEsIDEwLCAxMSwgMjQ0LCAyMTAsIDEwLCAxMSwgMjQ0LCAyMDksIDEwLCAxMSwgCisgICAgMjQ0LCAyMDgsIDEwLCAxMSwgMjQ0LCAyMDcsIDEwLCAxMSwgMjQ0LCAyMDYsIDEwLCAxMSwgMjQ0LCAyMDUsIDEwLCAxMSwgCisgICAgMjQ0LCAyMDQsIDEwLCAxMSwgMjQ0LCAyMDMsIDEwLCAxMSwgMjQ0LCAyMDIsIDEwLCAxMSwgMjQ0LCAyMDEsIDEwLCAxMSwgCisgICAgMjQ0LCAyMDAsIDEwLCAxMSwgMjQ0LCAxOTksIDEwLCAxMSwgMjQ0LCAxOTgsIDEwLCAxMSwgMjQ0LCAxOTcsIDEwLCAxMSwgCisgICAgMjQ0LCAxOTYsIDEwLCAxMSwgMjQ0LCAxOTUsIDEwLCAxMSwgMjQ0LCAxOTQsIDEwLCAxMSwgMjQ0LCAxOTMsIDEwLCAxMSwgCisgICAgMjQ0LCAxOTIsIDEwLCAxMSwgMjQ0LCAxOTEsIDEwLCAxMSwgMjQ0LCAxOTAsIDEwLCAxMSwgMjQ0LCAxODksIDEwLCAxMSwgCisgICAgMjQ0LCAxODgsIDEwLCAxMSwgMjQ0LCAxODcsIDEwLCAxMSwgMjQ0LCAxODYsIDEwLCAxMSwgMjQ0LCAxODUsIDEwLCAxMSwgCisgICAgMjQ0LCAxODQsIDEwLCAxMSwgMjQ0LCAxODMsIDEwLCAxMSwgMjQ0LCAxODIsIDEwLCAxMSwgMjQ0LCAxODEsIDEwLCAxMSwgCisgICAgMjQ0LCAxODAsIDEwLCAxMSwgMjQ0LCAxNzksIDEwLCAxMSwgMjQ0LCAxNzgsIDEwLCAxMSwgMjQ0LCAxNzcsIDEwLCAxMSwgCisgICAgMjQ0LCAxNzYsIDEwLCAxMSwgMjQ0LCAxNzUsIDEwLCAxMSwgMjQ0LCAxNzQsIDEwLCAxMSwgMjQ0LCAxNzMsIDEwLCAxMSwgCisgICAgMjQ0LCAxNzIsIDEwLCAxMSwgMjQ0LCAxNzEsIDEwLCAxMSwgMjQ0LCAxNzAsIDEwLCAxMSwgMjQ0LCAxNjksIDEwLCAxMSwgCisgICAgMjQ0LCAxNjgsIDEwLCAxMSwgMjQ0LCAxNjcsIDEwLCAxMSwgMjQ0LCAxNjYsIDEwLCAxMSwgMjQ0LCAxNjUsIDEwLCAxMSwgCisgICAgMjQzLCAxNzYsIDEwLCAxMSwgMjQzLCAxNzUsIDEwLCAxMSwgMjQzLCAxNzQsIDEwLCAxMSwgMjQzLCAxNzMsIDEwLCAxMSwgCisgICAgMjQzLCAxNzIsIDEwLCAxMSwgMjQzLCAxNzEsIDEwLCAxMSwgMjQzLCAxNzAsIDEwLCAxMSwgMjQzLCAxNjksIDEwLCAxMSwgCisgICAgMjQzLCAxNjgsIDEwLCAxMSwgMjQzLCAxNjcsIDEwLCAxMSwgMjQzLCAxNjYsIDEwLCAxMSwgMjQzLCAxNjUsIDEwLCAxMSwgCisgICAgMjQzLCAxNjQsIDEwLCAxMSwgMjQzLCAxNjMsIDEwLCAxMSwgMjQzLCAxNjIsIDEwLCAxMSwgMjQzLCAxNjEsIDEwLCAxMSwgCisgICAgMjQzLCAxNjAsIDEwLCAxMSwgMjQzLCAxNTksIDEwLCAxMSwgMjQzLCAxNTgsIDEwLCAxMSwgMjQzLCAxNTcsIDEwLCAxMSwgCisgICAgMjQzLCAxNTYsIDEwLCAxMSwgMjQzLCAxNTUsIDEwLCAxMSwgMjQzLCAxNTQsIDEwLCAxMSwgMjQzLCAxNTMsIDEwLCAxMSwgCisgICAgMjQzLCAxNTIsIDEwLCAxMSwgMjQzLCAxNTEsIDEwLCAxMSwgMjQzLCAxNTAsIDEwLCAxMSwgMjQzLCAxNDksIDEwLCAxMSwgCisgICAgMjQzLCAxNDgsIDEwLCAxMSwgMjQzLCAxNDcsIDEwLCAxMSwgMjQzLCAxNDYsIDEwLCAxMSwgMjQzLCAxNDUsIDEwLCAxMSwgCisgICAgMjQzLCAxNDQsIDEwLCAxMSwgMjQzLCAxNDMsIDEwLCAxMSwgMjQzLCAxNDIsIDEwLCAxMSwgMjQzLCAxNDEsIDEwLCAxMSwgCisgICAgMjQzLCAxNDAsIDEwLCAxMSwgMjQzLCAxMzksIDEwLCAxMSwgMjQzLCAxMzgsIDEwLCAxMSwgMjQzLCAxMzcsIDEwLCAxMSwgCisgICAgMjQzLCAxMzYsIDEwLCAxMSwgMjQzLCAxMzUsIDEwLCAxMSwgMjQzLCAxMzQsIDEwLCAxMSwgMjQzLCAxMzMsIDEwLCAxMSwgCisgICAgMjQzLCAxMzIsIDEwLCAxMSwgMjQzLCAxMzEsIDEwLCAxMSwgMjQzLCAxMzAsIDEwLCAxMSwgMjQzLCAxMjksIDEwLCAxMSwgCisgICAgMjQzLCAxMjgsIDEwLCAxMSwgMjQzLCAxMjcsIDEwLCAxMSwgMjQzLCAxMjYsIDEwLCAxMSwgMjQzLCAxMjUsIDEwLCAxMSwgCisgICAgMjQzLCAxMjQsIDEwLCAxMSwgMjQzLCAxMjMsIDEwLCAxMSwgMjQzLCAxMjIsIDEwLCAxMSwgMjQzLCAxMjEsIDEwLCAxMSwgCisgICAgMjQzLCAxMjAsIDEwLCAxMSwgMjQzLCAxMTksIDEwLCAxMSwgMjQzLCAxMTgsIDEwLCAxMSwgMjQzLCAxMTcsIDEwLCAxMSwgCisgICAgMjQzLCAxMTYsIDEwLCAxMSwgMjQzLCAxMTUsIDEwLCAxMSwgMjQzLCAxMTQsIDEwLCAxMSwgMjQzLCAxMTMsIDEwLCAxMSwgCisgICAgMjQyLCAzOSwgMTAsIDExLCAyNDIsIDM4LCAxMCwgMTEsIDI0MiwgMzcsIDEwLCAxMSwgMjQyLCAzNiwgMTAsIDExLCAyNDIsIAorICAgIDM1LCAxMCwgMTEsIDI0MiwgMzQsIDEwLCAxMSwgMjQyLCAzMywgMTAsIDExLCAyNDIsIDMyLCAxMCwgMTEsIDI0MiwgMzEsIAorICAgIDEwLCAxMSwgMjQwLCAxMzAsIDEwLCAxMSwgMjQwLCAxMjksIDEwLCAxMSwgMjQwLCAxMjgsIDEwLCAxMSwgMjQwLCAxMjcsIAorICAgIDEwLCAxMSwgMjQwLCAxMjYsIDEwLCAxMSwgMjQwLCAxMjUsIDEwLCAxMSwgMjQwLCAxMjQsIDEwLCAxMSwgMjQwLCAxMjMsIAorICAgIDEwLCAxMSwgMjQwLCAxMjIsIDEwLCAxMSwgMjQwLCAxMjEsIDEwLCAxMSwgMjQwLCAxMjAsIDEwLCAxMSwgMjQwLCAxMTksIAorICAgIDEwLCAxMSwgMjQwLCAxMTgsIDEwLCAxMSwgMjQwLCAxMTcsIDEwLCAxMSwgMjQwLCAxMTYsIDEwLCAxMSwgMjQwLCAxMTUsIAorICAgIDEwLCAxMSwgMjQwLCAxMTQsIDEwLCAxMSwgMjQwLCAxMTMsIDEwLCAxMSwgMjQwLCAxMTIsIDEwLCAxMSwgMjM1LCAyNiwgCisgICAgMTAsIDExLCAyMzUsIDI1LCAxMCwgMTEsIDIzNSwgMjQsIDEwLCAxMSwgMjM1LCAyMywgMTAsIDExLCAyMzUsIDIyLCAxMCwgCisgICAgMTEsIDIzNSwgMjEsIDEwLCAxMSwgMjM1LCAyMCwgMTAsIDExLCAyMzUsIDE5LCAxMCwgMTEsIDIzMywgMTY4LCAxMCwgMTEsIAorICAgIDIzMywgMTY3LCAxMCwgMTEsIDIzMywgMTY2LCAxMCwgMTEsIDIzMywgMTY1LCAxMCwgMTEsIDIzMywgMTY0LCAxMCwgMTEsIAorICAgIDIzMywgMTYzLCAxMCwgMTEsIDIzMywgMTYyLCAxMCwgMTEsIDIzMywgMTYxLCAxMCwgMTEsIDIzMywgMTYwLCAxMCwgMTEsIAorICAgIDIzMywgMTU5LCAxMCwgMTEsIDIzMiwgMTA5LCAxMCwgMTEsIDIzMiwgMTA4LCAxMCwgMTEsIDIzMiwgMTA3LCAxMCwgMTEsIAorICAgIDIzMiwgMTA2LCAxMCwgMTEsIDIzMiwgMTA1LCAxMCwgMTEsIDIzMiwgMTA0LCAxMCwgMTEsIDIzMiwgMTAzLCAxMCwgMTEsIAorICAgIDIzMiwgMTAyLCAxMCwgMTEsIDIzMiwgMTAxLCAxMCwgMTEsIDIzMiwgMTAwLCAxMCwgMTEsIDIzMiwgOTksIDEwLCAxMSwgCisgICAgMjMyLCA5OCwgMTAsIDExLCAyMzIsIDk3LCAxMCwgMTEsIDIzMiwgOTYsIDEwLCAxMSwgMjMyLCA5NSwgMTAsIDExLCAyMzIsIAorICAgIDk0LCAxMCwgMTEsIDIzMiwgOTMsIDEwLCAxMSwgMjMyLCA5MiwgMTAsIDExLCAyMzIsIDkxLCAxMCwgMTEsIDIzMiwgOTAsIAorICAgIDEwLCAxMSwgMjMyLCA4OSwgMTAsIDExLCAyMzIsIDg4LCAxMCwgMTEsIDIzMiwgODcsIDEwLCAxMSwgMjMyLCA4NiwgMTAsIAorICAgIDExLCAyMzIsIDg1LCAxMCwgMTEsIDIzMiwgODQsIDEwLCAxMSwgMjMyLCA4MywgMTAsIDExLCAyMzIsIDgyLCAxMCwgMTEsIAorICAgIDIzMiwgODEsIDEwLCAxMSwgMjMyLCA4MCwgMTAsIDExLCAyMzIsIDc5LCAxMCwgMTEsIDIzMiwgNzgsIDEwLCAxMSwgMjMyLCAKKyAgICA3NywgMTAsIDExLCAyMzIsIDc2LCAxMCwgMTEsIDIzMiwgNzUsIDEwLCAxMSwgMjMyLCA3NCwgMTAsIDExLCAyMzIsIDczLCAKKyAgICAxMCwgMTEsIDIzMiwgNzIsIDEwLCAxMSwgMjMyLCA3MSwgMTAsIDExLCAyMzIsIDcwLCAxMCwgMTEsIDIzMiwgNjksIDEwLCAKKyAgICAxMSwgMjMyLCA2OCwgMTAsIDExLCAyMzIsIDY3LCAxMCwgMTEsIDIzMiwgNjYsIDEwLCAxMSwgMjMyLCA2NSwgMTAsIDExLCAKKyAgICAyMzIsIDY0LCAxMCwgMTEsIDIzMiwgNjMsIDEwLCAxMSwgMjMyLCA2MiwgMTAsIDExLCAyMzIsIDYxLCAxMCwgMTEsIDIzMiwgCisgICAgNjAsIDEwLCAxMSwgMjMyLCA1OSwgMTAsIDExLCAyMzIsIDU4LCAxMCwgMTEsIDIzMiwgNTcsIDEwLCAxMSwgMjMyLCA1NiwgCisgICAgMTAsIDExLCAyMzIsIDU1LCAxMCwgMTEsIDIzMiwgNTQsIDEwLCAxMSwgMjMyLCA1MywgMTAsIDExLCAyMzIsIDUyLCAxMCwgCisgICAgMTEsIDIzMiwgNTEsIDEwLCAxMSwgMjMyLCA1MCwgMTAsIDExLCAyMzIsIDQ5LCAxMCwgMTEsIDIzMiwgNDgsIDEwLCAxMSwgCisgICAgMjMyLCA0NywgMTAsIDExLCAyMzIsIDQ2LCAxMCwgMTEsIDIzMiwgNDUsIDEwLCAxMSwgMjMyLCA0NCwgMTAsIDExLCAyMzAsIAorICAgIDk1LCAxMCwgMTEsIDIzMCwgOTQsIDEwLCAxMSwgMjMwLCA5MywgMTAsIDExLCAyMzAsIDkyLCAxMCwgMTEsIDIzMCwgOTEsIAorICAgIDEwLCAxMSwgMjMwLCA5MCwgMTAsIDExLCAyMzAsIDg5LCAxMCwgMTEsIDIzMCwgODgsIDEwLCAxMSwgMjMwLCA4NywgMTAsIAorICAgIDExLCAyMzAsIDg2LCAxMCwgMTEsIDIzMCwgODUsIDEwLCAxMSwgMjMwLCA4NCwgMTAsIDExLCAyMzAsIDgzLCAxMCwgMTEsIAorICAgIDIzMCwgODIsIDEwLCAxMSwgMjMwLCA4MSwgMTAsIDExLCAyMzAsIDgwLCAxMCwgMTEsIDIzMCwgNzksIDEwLCAxMSwgMjMwLCAKKyAgICA3OCwgMTAsIDExLCAyMzAsIDc3LCAxMCwgMTEsIDIzMCwgNzYsIDEwLCAxMSwgMjMwLCA3NSwgMTAsIDExLCAyMzAsIDc0LCAKKyAgICAxMCwgMTEsIDIzMCwgNzMsIDEwLCAxMSwgMjMwLCA3MiwgMTAsIDExLCAyMzAsIDcxLCAxMCwgMTEsIDIzMCwgNzAsIDEwLCAKKyAgICAxMSwgMjMwLCA2OSwgMTAsIDExLCAyMzAsIDY4LCAxMCwgMTEsIDIzMCwgNjcsIDEwLCAxMSwgMjMwLCA2NiwgMTAsIDExLCAKKyAgICAyMzAsIDY1LCAxMCwgMTEsIDIzMCwgNjQsIDEwLCAxMSwgMjMwLCA2MywgMTAsIDExLCAyMzAsIDYyLCAxMCwgMTEsIDIzMCwgCisgICAgNjEsIDEwLCAxMSwgMjMwLCA2MCwgMTAsIDExLCAyMzAsIDU5LCAxMCwgMTEsIDIzMCwgNTgsIDEwLCAxMSwgMjMwLCA1NywgCisgICAgMTAsIDExLCAyMzAsIDU2LCAxMCwgMTEsIDIzMCwgNTUsIDEwLCAxMSwgMjMwLCA1NCwgMTAsIDExLCAyMzAsIDUzLCAxMCwgCisgICAgMTEsIDIzMCwgNTIsIDEwLCAxMSwgMjMwLCA1MSwgMTAsIDExLCAyMzAsIDUwLCAxMCwgMTEsIDIzMCwgNDksIDEwLCAxMSwgCisgICAgMjMwLCA0OCwgMTAsIDExLCAyMzAsIDQ3LCAxMCwgMTEsIDIyOCwgMjIyLCAxMCwgMTEsIDIyOCwgMjIxLCAxMCwgMTEsIAorICAgIDIyOCwgMjIwLCAxMCwgMTEsIDIyOCwgMjE5LCAxMCwgMTEsIDIyOCwgMjE4LCAxMCwgMTEsIDIyOCwgMjE3LCAxMCwgMTEsIAorICAgIDIyOCwgMjE2LCAxMCwgMTEsIDIyOCwgMjE1LCAxMCwgMTEsIDIyOCwgMjE0LCAxMCwgMTEsIDIyOCwgMjEzLCAxMCwgMTEsIAorICAgIDIyOCwgMjEyLCAxMCwgMTEsIDIyOCwgMjExLCAxMCwgMTEsIDIyOCwgMjEwLCAxMCwgMTEsIDIyOCwgMjA5LCAxMCwgMTEsIAorICAgIDIyOCwgMjA4LCAxMCwgMTEsIDIyOCwgMjA3LCAxMCwgMTEsIDIyOCwgMjA2LCAxMCwgMTEsIDIyOCwgMjA1LCAxMCwgMTEsIAorICAgIDIyOCwgMjA0LCAxMCwgMTEsIDIyOCwgMjAzLCAxMCwgMTEsIDIyOCwgMjAyLCAxMCwgMTEsIDIyOCwgMjAxLCAxMCwgMTEsIAorICAgIDIyOCwgOTEsIDEwLCAxMSwgMjI4LCA5MCwgMTAsIDExLCAyMjgsIDg5LCAxMCwgMTEsIDIyOCwgODgsIDEwLCAxMSwgMjI4LCAKKyAgICA4NywgMTAsIDExLCAyMjgsIDg2LCAxMCwgMTEsIDIyOCwgODUsIDEwLCAxMSwgMjI4LCA4NCwgMTAsIDExLCAyMjgsIDgzLCAKKyAgICAxMCwgMTEsIDIyOCwgODIsIDEwLCAxMSwgMjI4LCA4MSwgMTAsIDExLCAyMjgsIDgwLCAxMCwgMTEsIDIyOCwgNzksIDEwLCAKKyAgICAxMSwgMjI4LCA3OCwgMTAsIDExLCAyMjgsIDc3LCAxMCwgMTEsIDIyOCwgNzYsIDEwLCAxMSwgMjI4LCA3NSwgMTAsIDExLCAKKyAgICAyMjgsIDc0LCAxMCwgMTEsIDIyOCwgNzMsIDEwLCAxMSwgMjI4LCA3MiwgMTAsIDExLCAyMjgsIDcxLCAxMCwgMTEsIDIyOCwgCisgICAgNzAsIDEwLCAxMSwgMjI4LCA2OSwgMTAsIDExLCAyMjgsIDY4LCAxMCwgMTEsIDIyOCwgNjcsIDEwLCAxMSwgMjI4LCA2NiwgCisgICAgMTAsIDExLCAyMjcsIDE5NiwgMTAsIDExLCAyMjcsIDE5NSwgMTAsIDExLCAyMjcsIDE5NCwgMTAsIDExLCAyMjcsIDE5MywgCisgICAgMTAsIDExLCAyMjcsIDE5MiwgMTAsIDExLCAyMjcsIDE5MSwgMTAsIDExLCAyMjcsIDE5MCwgMTAsIDExLCAyMjcsIDE4OSwgCisgICAgMTAsIDExLCAyMjcsIDE4OCwgMTAsIDExLCAyMjcsIDE4NywgMTAsIDExLCAyMjcsIDE4NiwgMTAsIDExLCAyMjcsIDE4NSwgCisgICAgMTAsIDExLCAyMjcsIDE4NCwgMTAsIDExLCAyMjcsIDE4MywgMTAsIDExLCAyMjcsIDE4MiwgMTAsIDExLCAyMjcsIDE4MSwgCisgICAgMTAsIDExLCAyMjcsIDE4MCwgMTAsIDExLCAyMjcsIDE3OSwgMTAsIDExLCAyMjcsIDE3OCwgMTAsIDExLCAyMjcsIDE3NywgCisgICAgMTAsIDExLCAyMjcsIDE3NiwgMTAsIDExLCAyMjcsIDE3NSwgMTAsIDExLCAyMjcsIDE3NCwgMTAsIDExLCAyMjcsIDE3MywgCisgICAgMTAsIDExLCAyMjcsIDE3MiwgMTAsIDExLCAyMjcsIDE3MSwgMTAsIDExLCAyMjcsIDE3MCwgMTAsIDExLCAyMjcsIDE2OSwgCisgICAgMTAsIDExLCAyMjcsIDE2OCwgMTAsIDExLCAyMjcsIDE2NywgMTAsIDExLCAyMjcsIDE2NiwgMTAsIDExLCAyMjcsIDE2NSwgCisgICAgMTAsIDExLCAyMjcsIDE2NCwgMTAsIDExLCAyMjcsIDE2MywgMTAsIDExLCAyMjcsIDE2MiwgMTAsIDExLCAyMjcsIDE2MSwgCisgICAgMTAsIDExLCAyMjcsIDE2MCwgMTAsIDExLCAyMjcsIDE1OSwgMTAsIDExLCAyMjcsIDE1OCwgMTAsIDExLCAyMjcsIDE1NywgCisgICAgMTAsIDExLCAyMjcsIDE1NiwgMTAsIDExLCAyMjcsIDE1NSwgMTAsIDExLCAyMjcsIDE1NCwgMTAsIDExLCAyMjcsIDE1MywgCisgICAgMTAsIDExLCAyMjcsIDE1MiwgMTAsIDExLCAyMjcsIDE1MSwgMTAsIDExLCAyMjcsIDE1MCwgMTAsIDExLCAyMjcsIDE0OSwgCisgICAgMTAsIDExLCAyMjcsIDE0OCwgMTAsIDExLCAyMjcsIDE0NywgMTAsIDExLCAyMjcsIDE0NiwgMTAsIDExLCAyMjcsIDE0NSwgCisgICAgMTAsIDExLCAyMjcsIDE0NCwgMTAsIDExLCAyMjcsIDE0MywgMTAsIDExLCAyMjcsIDE0MiwgMTAsIDExLCAyMjcsIDE0MSwgCisgICAgMTAsIDExLCAyMjcsIDE0MCwgMTAsIDExLCAyMjcsIDEzOSwgMTAsIDExLCAyMjcsIDEzOCwgMTAsIDExLCAyMjcsIDEzNywgCisgICAgMTAsIDExLCAyMjcsIDEzNiwgMTAsIDExLCAyMjcsIDEzNSwgMTAsIDExLCAyMjcsIDEzNCwgMTAsIDExLCAyMjcsIDEzMywgCisgICAgMTAsIDExLCAyMjcsIDEzMiwgMTAsIDExLCAyMjcsIDEzMSwgMTAsIDExLCAyMjcsIDEzMCwgMTAsIDExLCAyMjcsIDEyOSwgCisgICAgMTAsIDExLCAyMjcsIDEyOCwgMTAsIDExLCAyMjcsIDEyNywgMTAsIDExLCAyMjcsIDEyNiwgMTAsIDExLCAyMjcsIDEyNSwgCisgICAgMTAsIDExLCAyMjcsIDEyNCwgMTAsIDExLCAyMjcsIDEyMywgMTAsIDExLCAyMjcsIDEyMiwgMTAsIDExLCAyMjYsIDIyOCwgCisgICAgMTAsIDExLCAyMjYsIDIyNywgMTAsIDExLCAyMjYsIDIyNiwgMTAsIDExLCAyMjYsIDIyNSwgMTAsIDExLCAyMjYsIDIyNCwgCisgICAgMTAsIDExLCAyMjYsIDIyMywgMTAsIDExLCAyMjYsIDIyMiwgMTAsIDExLCAyMjYsIDIyMSwgMTAsIDExLCAyMjYsIDIyMCwgCisgICAgMTAsIDExLCAyMjYsIDIxOSwgMTAsIDExLCAyMjYsIDIxOCwgMTAsIDExLCAyMjYsIDIxNywgMTAsIDExLCAyMjYsIDIxNiwgCisgICAgMTAsIDExLCAyMjQsIDIzOSwgMTAsIDExLCAyMjQsIDIzOCwgMTAsIDExLCAyMjQsIDIzNywgMTAsIDExLCAyMjQsIDIzNiwgCisgICAgMTAsIDExLCAyMjQsIDIzNSwgMTAsIDExLCAyMjQsIDIzNCwgMTAsIDExLCAyMjQsIDIzMywgMTAsIDExLCAyMjQsIDExMSwgCisgICAgMTAsIDExLCAyMjQsIDExMCwgMTAsIDExLCAyMjQsIDEwOSwgMTAsIDExLCAyMjQsIDEwOCwgMTAsIDExLCAyMjQsIDEwNywgCisgICAgMTAsIDExLCAyMjQsIDEwNiwgMTAsIDExLCAyMjQsIDEwNSwgMTAsIDExLCAyMjQsIDEwNCwgMTAsIDExLCAyMjQsIDEwMywgCisgICAgMTAsIDExLCAyMjQsIDEwMiwgMTAsIDExLCAyMjQsIDEwMSwgMTAsIDExLCAyMjQsIDEwMCwgMTAsIDExLCAyMjQsIDk5LCAKKyAgICAxMCwgMTEsIDIyNCwgOTgsIDEwLCAxMSwgMjI0LCA5NywgMTAsIDExLCAyMjQsIDk2LCAxMCwgMTEsIDIyNCwgOTUsIDEwLCAKKyAgICAxMSwgMjI0LCA5NCwgMTAsIDExLCAyMjQsIDkzLCAxMCwgMTEsIDIyNCwgOTIsIDEwLCAxMSwgMjI0LCA5MSwgMTAsIDExLCAKKyAgICAyMjQsIDkwLCAxMCwgMTEsIDIyNCwgODksIDEwLCAxMSwgMjI0LCA4OCwgMTAsIDExLCAyMjQsIDg3LCAxMCwgMTEsIDIyNCwgCisgICAgODYsIDEwLCAxMSwgMjI0LCA4NSwgMTAsIDExLCAyMjQsIDg0LCAxMCwgMTEsIDIyNCwgODMsIDEwLCAxMSwgMjI0LCA4MiwgCisgICAgMTAsIDExLCAyMjQsIDgxLCAxMCwgMTEsIDIyNCwgODAsIDEwLCAxMSwgMjI0LCA3OSwgMTAsIDExLCAyMjQsIDc4LCAxMCwgCisgICAgMTEsIDIyMywgMSwgMTAsIDExLCAyMjMsIDAsIDEwLCAxMSwgMjIyLCAyNTUsIDEwLCAxMSwgMjIyLCAyNTQsIDEwLCAxMSwgCisgICAgMjIyLCAyNTMsIDEwLCAxMSwgMjIyLCAyNTIsIDEwLCAxMSwgMjIyLCAyNTEsIDEwLCAxMSwgMjIyLCAyNTAsIDEwLCAxMSwgCisgICAgMjIyLCAyNDksIDEwLCAxMSwgMjIyLCAyNDgsIDEwLCAxMSwgMjIyLCAyNDcsIDEwLCAxMSwgMjIyLCAyNDYsIDEwLCAxMSwgCisgICAgMjIyLCAyNDUsIDEwLCAxMSwgMjIyLCAyNDQsIDEwLCAxMSwgMjIyLCAyNDMsIDEwLCAxMSwgMjIyLCAyNDIsIDEwLCAxMSwgCisgICAgMjIyLCAyNDEsIDEwLCAxMSwgMjIyLCAyNDAsIDEwLCAxMSwgMjIyLCAyMzksIDEwLCAxMSwgMjIyLCAyMzgsIDEwLCAxMSwgCisgICAgMjIyLCAyMzcsIDEwLCAxMSwgMjIyLCAyMzYsIDEwLCAxMSwgMjIyLCAyMzUsIDEwLCAxMSwgMjIyLCAyMzQsIDEwLCAxMSwgCisgICAgMjIyLCAyMzMsIDEwLCAxMSwgMjIyLCAyMzIsIDEwLCAxMSwgMjIyLCAyMzEsIDEwLCAxMSwgMjIyLCAyMzAsIDEwLCAxMSwgCisgICAgMjIyLCAyMjksIDEwLCAxMSwgMjIyLCAyMjgsIDEwLCAxMSwgMjIyLCAyMjcsIDEwLCAxMSwgMjIyLCAyMjYsIDEwLCAxMSwgCisgICAgMjIyLCAyMjUsIDEwLCAxMSwgMjIyLCAyMjQsIDEwLCAxMSwgMjIyLCAyMjMsIDEwLCAxMSwgMjIyLCAyMjIsIDEwLCAxMSwgCisgICAgMjIyLCAyMjEsIDEwLCAxMSwgMjIyLCAyMjAsIDEwLCAxMSwgMjIyLCAyMTksIDEwLCAxMSwgMjIyLCAyMTgsIDEwLCAxMSwgCisgICAgMjIyLCAyMTcsIDEwLCAxMSwgMjIyLCAyMTYsIDEwLCAxMSwgMjIyLCAyMTUsIDEwLCAxMSwgMjIyLCAyMTQsIDEwLCAxMSwgCisgICAgMjIyLCAyMTMsIDEwLCAxMSwgMjIyLCAyMTIsIDEwLCAxMSwgMjIyLCAyMTEsIDEwLCAxMSwgMjIyLCAyMTAsIDEwLCAxMSwgCisgICAgMjIyLCAyMDksIDEwLCAxMSwgMjIyLCAyMDgsIDEwLCAxMSwgMjIyLCAyMDcsIDEwLCAxMSwgMjIyLCAyMDYsIDEwLCAxMSwgCisgICAgMjIyLCAyMDUsIDEwLCAxMSwgMjIyLCAyMDQsIDEwLCAxMSwgMjE4LCA5NywgMTAsIDExLCAyMTgsIDk2LCAxMCwgMTEsIAorICAgIDIxOCwgOTUsIDEwLCAxMSwgMjE4LCA5NCwgMTAsIDExLCAyMTgsIDkzLCAxMCwgMTEsIDIxOCwgOTIsIDEwLCAxMSwgMjE4LCAKKyAgICA5MSwgMTAsIDExLCAyMTgsIDkwLCAxMCwgMTEsIDIxOCwgODksIDEwLCAxMSwgMjE4LCA4OCwgMTAsIDExLCAyMTgsIDg3LCAKKyAgICAxMCwgMTEsIDIxOCwgODYsIDEwLCAxMSwgMjE4LCA4NSwgMTAsIDExLCAyMTgsIDg0LCAxMCwgMTEsIDIxOCwgODMsIDEwLCAKKyAgICAxMSwgMjE4LCA4MiwgMTAsIDExLCAyMTgsIDgxLCAxMCwgMTEsIDIxOCwgODAsIDEwLCAxMSwgMjE4LCA3OSwgMTAsIDExLCAKKyAgICAyMTgsIDc4LCAxMCwgMTEsIDIxOCwgNzcsIDEwLCAxMSwgMjE4LCA3NiwgMTAsIDExLCAyMTgsIDc1LCAxMCwgMTEsIDIxOCwgCisgICAgNzQsIDEwLCAxMSwgMjE4LCA3MywgMTAsIDExLCAyMTgsIDcyLCAxMCwgMTEsIDIxOCwgNzEsIDEwLCAxMSwgMjE4LCA3MCwgCisgICAgMTAsIDExLCAyMTgsIDY5LCAxMCwgMTEsIDIxOCwgNjgsIDEwLCAxMSwgMjE4LCA2NywgMTAsIDExLCAyMTgsIDY2LCAxMCwgCisgICAgMTEsIDIxOCwgNjUsIDEwLCAxMSwgMjE4LCA2NCwgMTAsIDExLCAyMTgsIDYzLCAxMCwgMTEsIDIxOCwgNjIsIDEwLCAxMSwgCisgICAgMjE4LCA2MSwgMTAsIDExLCAyMTgsIDYwLCAxMCwgMTEsIDIxOCwgNTksIDEwLCAxMSwgMjE4LCA1OCwgMTAsIDExLCAyMTgsIAorICAgIDU3LCAxMCwgMTEsIDIxOCwgNTYsIDEwLCAxMSwgMjE4LCA1NSwgMTAsIDExLCAyMTgsIDU0LCAxMCwgMTEsIDIxNSwgMjQ1LCAKKyAgICAxMCwgMTEsIDIxNSwgMjQ0LCAxMCwgMTEsIDIxNSwgMjQzLCAxMCwgMTEsIDIxNSwgMjQyLCAxMCwgMTEsIDIxNSwgMjQxLCAKKyAgICAxMCwgMTEsIDIxNSwgMjQwLCAxMCwgMTEsIDIxNSwgMjM5LCAxMCwgMTEsIDIxNSwgMjM4LCAxMCwgMTEsIDIxNSwgMjM3LCAKKyAgICAxMCwgMTEsIDIxNSwgMjM2LCAxMCwgMTEsIDIxNSwgMjM1LCAxMCwgMTEsIDIxNSwgMjM0LCAxMCwgMTEsIDIxNSwgMjMzLCAKKyAgICAxMCwgMTEsIDIxNSwgMjMyLCAxMCwgMTEsIDIxNSwgMjMxLCAxMCwgMTEsIDIxNSwgMjMwLCAxMCwgMTEsIDIxNSwgMjI5LCAKKyAgICAxMCwgMTEsIDIxNSwgMjI4LCAxMCwgMTEsIDIxNSwgMjI3LCAxMCwgMTEsIDIxNSwgMjI2LCAxMCwgMTEsIDIxNSwgMjI1LCAKKyAgICAxMCwgMTEsIDIxNSwgMjI0LCAxMCwgMTEsIDIxNSwgMjIzLCAxMCwgMTEsIDIxNSwgMjIyLCAxMCwgMTEsIDIxNSwgMjIxLCAKKyAgICAxMCwgMTEsIDIxNSwgMjIwLCAxMCwgMTEsIDIxNSwgMjE5LCAxMCwgMTEsIDIxNSwgMjE4LCAxMCwgMTEsIDIxNSwgMjE3LCAKKyAgICAxMCwgMTEsIDIxNSwgMjE2LCAxMCwgMTEsIDIxNSwgMjE1LCAxMCwgMTEsIDIxNSwgMjE0LCAxMCwgMTEsIDIxNSwgMjEzLCAKKyAgICAxMCwgMTEsIDIxNSwgMjEyLCAxMCwgMTEsIDIxNSwgMjExLCAxMCwgMTEsIDIxNSwgMjEwLCAxMCwgMTEsIDIxNSwgMjA5LCAKKyAgICAxMCwgMTEsIDIxNSwgMjA4LCAxMCwgMTEsIDIxNSwgMjA3LCAxMCwgMTEsIDIxNSwgMjA2LCAxMCwgMTEsIDIxNSwgMjA1LCAKKyAgICAxMCwgMTEsIDIxNSwgMjA0LCAxMCwgMTEsIDIxNSwgMjAzLCAxMCwgMTEsIDIxNSwgMjAyLCAxMCwgMTEsIDIxNSwgMjAxLCAKKyAgICAxMCwgMTEsIDIxNSwgMjAwLCAxMCwgMTEsIDIxNSwgMTk5LCAxMCwgMTEsIDIxNSwgNzgsIDEwLCAxMSwgMjE1LCA3NywgMTAsIAorICAgIDExLCAyMTUsIDc2LCAxMCwgMTEsIDIxNSwgNzUsIDEwLCAxMSwgMjE1LCA3NCwgMTAsIDExLCAyMTUsIDczLCAxMCwgMTEsIAorICAgIDIxNSwgNzIsIDEwLCAxMSwgMjE1LCA3MSwgMTAsIDExLCAyMTUsIDcwLCAxMCwgMTEsIDIxNSwgNjksIDEwLCAxMSwgMjE1LCAKKyAgICA2OCwgMTAsIDExLCAyMTUsIDY3LCAxMCwgMTEsIDIxNSwgNjYsIDEwLCAxMSwgMjE1LCA2NSwgMTAsIDExLCAyMTUsIDY0LCAKKyAgICAxMCwgMTEsIDIxNSwgNjMsIDEwLCAxMSwgMjE1LCA2MiwgMTAsIDExLCAyMTUsIDYxLCAxMCwgMTEsIDIxNSwgNjAsIDEwLCAKKyAgICAxMSwgMjE1LCA1OSwgMTAsIDExLCAyMTUsIDU4LCAxMCwgMTEsIDIxNSwgNTcsIDEwLCAxMSwgMjE1LCA1NiwgMTAsIDExLCAKKyAgICAyMTUsIDU1LCAxMCwgMTEsIDIxNSwgNTQsIDEwLCAxMSwgMjE1LCA1MywgMTAsIDExLCAyMTUsIDUyLCAxMCwgMTEsIDIxNSwgCisgICAgNTEsIDEwLCAxMSwgMjE1LCA1MCwgMTAsIDExLCAyMTUsIDQ5LCAxMCwgMTEsIDIxNSwgNDgsIDEwLCAxMSwgMjE1LCA0NywgCisgICAgMTAsIDExLCAyMTUsIDQ2LCAxMCwgMTEsIDIxNSwgNDUsIDEwLCAxMSwgMjE1LCA0NCwgMTAsIDExLCAyMTUsIDQzLCAxMCwgCisgICAgMTEsIDIxNSwgNDIsIDEwLCAxMSwgMjE1LCA0MSwgMTAsIDExLCAyMTUsIDQwLCAxMCwgMTEsIDIxNSwgMzksIDEwLCAxMSwgCisgICAgMjE1LCAzOCwgMTAsIDExLCAyMTUsIDM3LCAxMCwgMTEsIDIxNSwgMzYsIDEwLCAxMSwgMjE1LCAzNSwgMTAsIDExLCAyMTUsIAorICAgIDM0LCAxMCwgMTEsIDIxNSwgMzMsIDEwLCAxMSwgMjE1LCAzMiwgMTAsIDExLCAyMTUsIDMxLCAxMCwgMTEsIDIxNSwgMzAsIAorICAgIDEwLCAxMSwgMjE1LCAyOSwgMTAsIDExLCAyMTUsIDI4LCAxMCwgMTEsIDIxNSwgMjcsIDEwLCAxMSwgMjE1LCAyNiwgMTAsIAorICAgIDExLCAyMTUsIDI1LCAxMCwgMTEsIDIxNSwgMjQsIDEwLCAxMSwgMjE1LCAyMywgMTAsIDExLCAyMTUsIDIyLCAxMCwgMTEsIAorICAgIDIxNSwgMjEsIDEwLCAxMSwgMjE1LCAyMCwgMTAsIDExLCAyMTUsIDE5LCAxMCwgMTEsIDIxNSwgMTgsIDEwLCAxMSwgMjE1LCAKKyAgICAxNywgMTAsIDExLCAyMTUsIDE2LCAxMCwgMTEsIDIxNSwgMTUsIDEwLCAxMSwgMjE1LCAxNCwgMTAsIDExLCAyMTUsIDEzLCAKKyAgICAxMCwgMTEsIDIxNSwgMTIsIDEwLCAxMSwgMjE1LCAxMSwgMTAsIDExLCAyMTUsIDEwLCAxMCwgMTEsIDIxNSwgOSwgMTAsIAorICAgIDExLCAyMTUsIDgsIDEwLCAxMSwgMjE1LCA3LCAxMCwgMTEsIDIxNSwgNiwgMTAsIDExLCAyMTUsIDUsIDEwLCAxMSwgMjE1LCAKKyAgICA0LCAxMCwgMTEsIDIxNSwgMywgMTAsIDExLCAyMTUsIDIsIDEwLCAxMSwgMjE0LCA4MSwgMTAsIDExLCAyMTQsIDgwLCAxMCwgCisgICAgMTEsIDIxNCwgNzksIDEwLCAxMSwgMjE0LCA3OCwgMTAsIDExLCAyMTQsIDc3LCAxMCwgMTEsIDIxNCwgNzYsIDEwLCAxMSwgCisgICAgMjE0LCA3NSwgMTAsIDExLCAyMTQsIDc0LCAxMCwgMTEsIDIxNCwgNzMsIDEwLCAxMSwgMjE0LCA3MiwgMTAsIDExLCAyMTQsIAorICAgIDcxLCAxMCwgMTEsIDIxNCwgNzAsIDEwLCAxMSwgMjE0LCA2OSwgMTAsIDExLCAyMTQsIDY4LCAxMCwgMTEsIDIxNCwgNjcsIAorICAgIDEwLCAxMSwgMjE0LCA2NiwgMTAsIDExLCAyMTQsIDY1LCAxMCwgMTEsIDIxNCwgNjQsIDEwLCAxMSwgMjE0LCA2MywgMTAsIAorICAgIDExLCAyMTQsIDYyLCAxMCwgMTEsIDIxNCwgNjEsIDEwLCAxMSwgMjE0LCA2MCwgMTAsIDExLCAyMTQsIDU5LCAxMCwgMTEsIAorICAgIDIxNCwgNTgsIDEwLCAxMSwgMjE0LCA1NywgMTAsIDExLCAyMTQsIDU2LCAxMCwgMTEsIDIxNCwgNTUsIDEwLCAxMSwgMjE0LCAKKyAgICA1NCwgMTAsIDExLCAyMTQsIDUzLCAxMCwgMTEsIDIxNCwgNTIsIDEwLCAxMSwgMjE0LCA1MSwgMTAsIDExLCAyMTQsIDUwLCAKKyAgICAxMCwgMTEsIDIxMywgMTY1LCAxMCwgMTEsIDIxMywgMTY0LCAxMCwgMTEsIDIxMywgMTYzLCAxMCwgMTEsIDIxMywgMTYyLCAKKyAgICAxMCwgMTEsIDIxMywgMTYxLCAxMCwgMTEsIDIxMywgMTYwLCAxMCwgMTEsIDIxMywgMTU5LCAxMCwgMTEsIDIxMywgMTU4LCAKKyAgICAxMCwgMTEsIDIxMywgMTU3LCAxMCwgMTEsIDIxMywgMTU2LCAxMCwgMTEsIDIxMywgMTU1LCAxMCwgMTEsIDIxMywgMTU0LCAKKyAgICAxMCwgMTEsIDIxMywgMTAzLCAxMCwgMTEsIDIxMywgMTAyLCAxMCwgMTEsIDIxMywgMTAxLCAxMCwgMTEsIDIxMywgMTAwLCAKKyAgICAxMCwgMTEsIDIxMywgOTksIDEwLCAxMSwgMjEzLCA5OCwgMTAsIDExLCAyMTMsIDk3LCAxMCwgMTEsIDIxMywgOTYsIDEwLCAKKyAgICAxMSwgMjEzLCA5NSwgMTAsIDExLCAyMTIsIDE1MSwgMTAsIDExLCAyMTIsIDE1MCwgMTAsIDExLCAyMTIsIDE0OSwgMTAsIAorICAgIDExLCAyMTIsIDE0OCwgMTAsIDExLCAyMTIsIDE0NywgMTAsIDExLCAyMTIsIDE0NiwgMTAsIDExLCAyMTIsIDE0NSwgMTAsIAorICAgIDExLCAyMTIsIDE0NCwgMTAsIDExLCAyMTIsIDE0MywgMTAsIDExLCAyMTIsIDE0MiwgMTAsIDExLCAyMTIsIDE0MSwgMTAsIAorICAgIDExLCAyMTIsIDE0MCwgMTAsIDExLCAyMTIsIDEzOSwgMTAsIDExLCAyMTIsIDEzOCwgMTAsIDExLCAyMTIsIDEzNywgMTAsIAorICAgIDExLCAyMTIsIDEzNiwgMTAsIDExLCAyMTIsIDEzNSwgMTAsIDExLCAyMTIsIDEzNCwgMTAsIDExLCAyMTIsIDEzMywgMTAsIAorICAgIDExLCAyMTIsIDEzMiwgMTAsIDExLCAyMTIsIDEzMSwgMTAsIDExLCAyMTIsIDEzMCwgMTAsIDExLCAyMTIsIDEyOSwgMTAsIAorICAgIDExLCAyMTIsIDEyOCwgMTAsIDExLCAyMTIsIDEyNywgMTAsIDExLCAyMTIsIDEyNiwgMTAsIDExLCAyMTIsIDEyNSwgMTAsIAorICAgIDExLCAyMTIsIDEyNCwgMTAsIDExLCAyMTIsIDEyMywgMTAsIDExLCAyMTIsIDEyMiwgMTAsIDExLCAyMTIsIDEyMSwgMTAsIAorICAgIDExLCAyMTIsIDEyMCwgMTAsIDExLCAyMTIsIDExOSwgMTAsIDExLCAyMTIsIDExOCwgMTAsIDExLCAyMTIsIDExNywgMTAsIAorICAgIDExLCAyMTIsIDExNiwgMTAsIDExLCAyMTIsIDExNSwgMTAsIDExLCAyMTIsIDExNCwgMTAsIDExLCAyMTIsIDExMywgMTAsIAorICAgIDExLCAyMTIsIDExMiwgMTAsIDExLCAyMTIsIDExMSwgMTAsIDExLCAyNTQsIDIzMSwgMTAsIDExLCAyNTQsIDIzMCwgMTAsIAorICAgIDExLCAyNTQsIDIyOSwgMTAsIDExLCAyNTQsIDIyOCwgMTAsIDExLCAyNTQsIDIyNywgMTAsIDExLCAyNTQsIDIyNiwgMTAsIAorICAgIDExLCAyNTQsIDIyNSwgMTAsIDExLCAyNTQsIDIyNCwgMTAsIDExLCAyNTQsIDIyMywgMTAsIDExLCAyNTQsIDIyMiwgMTAsIAorICAgIDExLCAyNTQsIDIyMSwgMTAsIDExLCAyNTQsIDIyMCwgMTAsIDExLCAyNTQsIDIxOSwgMTAsIDExLCAyNTQsIDIxOCwgMTAsIAorICAgIDExLCAyNTQsIDIxNywgMTAsIDExLCAyNTQsIDIxNiwgMTAsIDExLCAyNTQsIDIxNSwgMTAsIDExLCAyNTQsIDIxNCwgMTAsIAorICAgIDExLCAyNTQsIDIxMywgMTAsIDExLCAyNTQsIDIxMiwgMTAsIDExLCAyNTQsIDIxMSwgMTAsIDExLCAyNTQsIDIxMCwgMTAsIAorICAgIDExLCAyNTQsIDIwOSwgMTAsIDExLCAyNTQsIDIwOCwgMTAsIDExLCAyNTQsIDIwNywgMTAsIDExLCAyNTQsIDIwNiwgMTAsIAorICAgIDExLCAyNTQsIDIwNSwgMTAsIDExLCAyNTQsIDIwNCwgMTAsIDExLCAyNTQsIDIwMywgMTAsIDExLCAyNTQsIDIwMiwgMTAsIAorICAgIDExLCAyNTQsIDIwMSwgMTAsIDExLCAyNTQsIDIwMCwgMTAsIDExLCAyNTQsIDE5OSwgMTAsIDExLCAyNTQsIDE5OCwgMjAsIAorICAgIDEsIDE1MywgMjI5LCA5OCwgMjMxLCA4MywgMjAsIDEsIDE1MywgMjQzLCA0NiwgMjQ0LCA1LCAyMCwgMSwgMTUzLCAyMjUsIAorICAgIDEzMSwgMjMxLCA4NCwgMjI1LCAxODksIDIwLCAxLCAxNTMsIDIyNSwgMTMxLCAyMzEsIDg0LCAyMjUsIDE5MCwgMjAsIDEsIAorICAgIDE1MywgMjMwLCA0NCwgMjMxLCA4MywgMjAsIDEsIDE1MywgMjIwLCAxNDYsIDIwLCAxLCAxNTMsIDIxNywgMTksIDIzMSwgCisgICAgODMsIDIwLCAxLCAxNTMsIDIyNywgMjM4LCAyMzEsIDgzLCAyMCwgMSwgMTUzLCAyMjAsIDE5OSwgMjI2LCAyMTQsIDIyOSwgCisgICAgMCwgMjAsIDEsIDE1MywgMjI1LCAxMzEsIDIyNiwgMjE0LCAyMjksIDEsIDIyNSwgMTg5LCAyMCwgMSwgMTUzLCAyMjUsIAorICAgIDEzMSwgMjI2LCAyMTQsIDIyOSwgMSwgMjI1LCAxOTAsIDIwLCAxLCAxNTMsIDIzMiwgMjMsIDIwLCAxLCAxNTMsIDIxNiwgCisgICAgODMsIDIzMiwgMjQsIDIwLCAxLCAxNTMsIDIyOSwgMTU0LCAyMCwgMSwgMTUzLCAyMzIsIDIwLCAyMCwgMSwgMTUzLCAyMzEsIAorICAgIDIzOSwgMjAsIDEsIDE1MywgMjMwLCAxMTksIDIwLCAxLCAxNTMsIDIyMSwgNDUsIDIwLCAxLCAxNTMsIDIyOCwgOTYsIDIwLCAKKyAgICAxLCAxNTMsIDIzNCwgMTU1LCAyMCwgMSwgMTUzLCAyMjgsIDIyNSwgMjAsIDEsIDE1MywgMjE4LCAyMDUsIDIwLCAxLCAxNTMsIAorICAgIDIyOSwgOTcsIDIwLCAxLCAxNTMsIDIzMywgMTEwLCAyMCwgMSwgMTUzLCAyMzMsIDM2LCAyMzMsIDIxMCwgMjAsIDEsIDE1MywgCisgICAgMjI4LCAxMDMsIDIzMSwgOTEsIDIwLCAxLCAxNTMsIDIzMiwgMjcsIDIwLCAxLCAxNTMsIDIyNiwgMTE5LCAyMCwgMSwgMTUzLCAKKyAgICAyNDIsIDIwNywgMjAsIDEsIDE1MywgMjI2LCAxNzcsIDIwLCAxLCAxNTMsIDIzMCwgMjIxLCAyMjksIDEzMCwgMjAsIDEsIAorICAgIDE1MywgMjI3LCAyMTksIDIzMSwgOTQsIDIwLCAxLCAxNTMsIDExMSwgMjEyLCAxNzksIDIzMCwgMzgsIDIwLCAxLCAxNTMsIAorICAgIDI0MiwgMjA4LCAyMCwgMSwgMTUzLCAyMjgsIDEwMywgMjI4LCAxMDQsIDIwLCAxLCAxNTMsIDIyMCwgNTYsIDIwLCAxLCAKKyAgICAxNTMsIDIzMSwgNzYsIDIwLCAxLCAxNTMsIDIzMSwgOTcsIDIwLCAxLCAxNTMsIDIzMCwgMjAwLCAyMCwgMSwgMTUzLCAyMzQsIAorICAgIDI1MywgMjAsIDEsIDE1MywgMjI2LCAyMTQsIDIzMywgNzEsIDIwLCAxLCAxNTMsIDIyOSwgMjI5LCAyMzMsIDcxLCAyMCwgMSwgCisgICAgMTUzLCAyMjYsIDM0LCAyMCwgMSwgMTUzLCAyMzIsIDIxLCAyMCwgMSwgMTUzLCAyMjksIDM4LCAyMCwgMSwgMTUzLCAyMjUsIAorICAgIDIwLCAyMCwgMSwgMTUzLCAyMTYsIDgwLCAyMCwgMSwgMTUzLCAyMzIsIDE1MiwgMjAsIDEsIDE1MywgMjE5LCAyMjcsIDIwLCAKKyAgICAxLCAxNTMsIDIxNywgMTY5LCAyMCwgMSwgMTUzLCAyMzIsIDE4LCAyMCwgMSwgMTUzLCAyMzQsIDE2MiwgMjAsIDEsIDE1MywgCisgICAgMjI5LCAyMjUsIDIwLCAxLCAxNTMsIDIzMywgMjIyLCAyMCwgMSwgMTUzLCAyMzAsIDIwMSwgMjAsIDEsIDE1MywgMjIwLCAKKyAgICAxNDMsIDIwLCAxLCAxNTMsIDIzMiwgMTkxLCAyMCwgMSwgMTUzLCAyNDQsIDYyLCAyMCwgMSwgMTUzLCAyMjMsIDEwMSwgMjAsIAorICAgIDEsIDE1MywgMjMzLCAyNTAsIDIwLCAxLCAxNTMsIDIxOSwgMjIzLCAyMCwgMSwgMTUzLCAyMzEsIDIzNiwgMjI1LCAyMzEsIAorICAgIDIwLCAxLCAxNTMsIDIyMCwgMTkyLCAyMCwgMSwgMTUzLCAyMjgsIDEwMiwgMjAsIDEsIDE1MywgMjIwLCAxNzcsIDIyOCwgCisgICAgMTEzLCAyMTIsIDE4NywgMjAsIDEsIDE1MywgMjI4LCAxLCAyMzAsIDIxOCwgMjAsIDEsIDE1MywgMjI2LCAyMDksIDIwLCAxLCAKKyAgICAxNTMsIDIyOCwgMjI2LCAyMCwgMSwgMTUzLCAyMTUsIDE0MSwgMjAsIDEsIDE1MywgMjI5LCAxMzMsIDIwLCAxLCAxNTMsIAorICAgIDIzMiwgMTcsIDIwLCAxLCAxNTMsIDIyOSwgMTIsIDIwLCAxLCAxNTMsIDIzMSwgMTgyLCAyMCwgMSwgMTUzLCAyMjgsIDEyLCAKKyAgICAyMCwgMSwgMTUzLCAyMTcsIDE3MywgMjAsIDEsIDE1MywgMjE5LCAyMjEsIDIwLCAxLCAxNTMsIDIyNiwgMjEwLCAyMCwgMSwgCisgICAgMTUzLCAyMjgsIDExNywgMjAsIDEsIDE1MywgMjMyLCAyNSwgMjAsIDEsIDE1MywgMjI4LCAxMCwgMjAsIDEsIDE1MywgMjM0LCAKKyAgICAyMjEsIDIwLCAxLCAxNTMsIDIyOCwgMTIwLCAyMCwgMSwgMTUzLCAyMTQsIDIyNywgMjAsIDEsIDE1MywgMjMyLCAxNTYsIAorICAgIDIwLCAxLCAxNTMsIDIyOSwgMTgwLCAyMCwgMSwgMTUzLCAyMzAsIDE2LCAyMCwgMSwgMTUzLCAyMzEsIDE4MSwgMjAsIDEsIAorICAgIDIyNiwgMTQsIDIyOCwgMTE1LCAyMCwgMSwgMjI2LCAxNCwgMjE2LCA4MywgMjMyLCAyMiwgMjAsIDEsIDIyNiwgMTQsIDIyMCwgCisgICAgMTExLCAyMCwgMSwgMjI2LCAxNCwgMjIxLCA0OSwgMjE2LCA4MiwgMjAsIDEsIDIyNiwgMTQsIDIzMiwgMTkzLCAyMjgsIDk5LCAKKyAgICAyMCwgMSwgMjI2LCAxNCwgMjMxLCAxODgsIDIzMiwgMjYsIDIwLCAxLCAyMjYsIDE0LCAyMzQsIDk2LCAyMCwgMSwgMjI2LCAKKyAgICAxNCwgMjEzLCA2LCAyMCwgMSwgMjI2LCAxNCwgMjMxLCAxODMsIDIwLCAxLCAyMjYsIDE0LCAyMzQsIDI0MiwgMjAsIDEsIAorICAgIDIyNiwgMTQsIDIyNiwgODMsIDIwLCAxLCAyMjYsIDE0LCAyMTMsIDc3LCAyMzMsIDcxLCAyMCwgMSwgMjI2LCAxNCwgMjMzLCAKKyAgICAxMjcsIDIyOCwgMTEzLCAyMjgsIDIwLCAyMCwgMSwgMjI2LCAxNCwgMjI4LCA5NywgMjIwLCAyMTgsIDIwLCAxLCAyMjYsIAorICAgIDE0LCAyMjksIDE5NiwgMjI5LCAxNSwgMjAsIDEsIDIyNiwgMTQsIDI0MiwgMjA1LCAyMCwgMSwgMjI2LCAxNCwgMjI1LCAKKyAgICAxODEsIDIwLCAxLCAyMjYsIDE0LCAyMTYsIDgzLCAyMjgsIDExMSwgMjAsIDEsIDIyNiwgMTQsIDIyMCwgMjIzLCAyMjksIAorICAgIDEwLCAyMCwgMSwgMjI2LCAxNCwgMjIwLCAyMTksIDIwLCAxLCAyMjYsIDE0LCAyMzEsIDg0LCAyMTcsIDE3MiwgMjAsIDEsIAorICAgIDIyNiwgMTQsIDIzMSwgMTcwLCAyMzEsIDE4NCwgMjAsIDEsIDIyNiwgMTQsIDIyOCwgMTEsIDIyOCwgOTksIDIwLCAxLCAKKyAgICAyMjYsIDE0LCAyMzQsIDE1MSwgMjAsIDEsIDIyNiwgMTQsIDI0MiwgMjA2LCAyMCwgMSwgMjI2LCAxNCwgMjM0LCAxNDcsIAorICAgIDIwLCAxLCAyMjYsIDE0LCAyMzMsIDE1MSwgMjAsIDEsIDIyNiwgMTQsIDIyNiwgMTIxLCAyMCwgMSwgMjI2LCAxNCwgMjE0LCAKKyAgICAxNTksIDIwLCAxLCAyMjYsIDE0LCAyMjksIDk5LCAyMzAsIDExNywgMjAsIDEsIDIyNiwgMTQsIDIyOSwgMTMyLCAyMzEsIAorICAgIDE2NiwgMjAsIDEsIDIyNiwgMTQsIDIxMywgMTgxLCAyMCwgMSwgMjI2LCAxNCwgMjIyLCAxODIsIDIwLCAxLCAyMjYsIDE0LCAKKyAgICAyMTgsIDQ1LCAyMCwgMSwgMjI2LCAxNCwgMjMxLCA5NiwgMjAsIDEsIDIyNiwgMTQsIDIyOSwgMTE3LCAyMCwgMSwgMjI2LCAKKyAgICAxNCwgMjI5LCAxMTgsIDIzMywgMTA3LCAyMCwgMSwgMjI2LCAxNCwgMjMxLCA4NiwgMjAsIDEsIDIyNiwgMTQsIDIxOCwgCisgICAgMjUzLCAyMCwgMSwgMjI2LCAxNCwgMjMxLCAxNzQsIDIwLCAxLCAyMjYsIDE0LCAyMzAsIDIwMywgMjAsIDEsIDIyNiwgMTQsIAorICAgIDIyOCwgMjEsIDIwLCAxLCAyMjYsIDE0LCAyMjUsIDI0LCAyMCwgMSwgMjI2LCAxNCwgMjMxLCA5NSwgMjI5LCAxMzQsIDIwLCAKKyAgICAxLCAyMjYsIDE0LCAyNDQsIDk1LCAyMCwgMSwgMjI2LCAxNCwgMjMxLCAxNjEsIDIwLCAxLCAyMjYsIDE0LCAyNDQsIDExNiwgCisgICAgMjAsIDEsIDIyNiwgMTQsIDIzNCwgMTU5LCAyMCwgMSwgMjI2LCAxNCwgMjMyLCA0MywgMjI5LCA0LCAyMCwgMSwgMjI2LCAKKyAgICAxNCwgMjMyLCA0MywgMjI4LCAyMzYsIDIwLCAxLCAyMjYsIDE0LCAyMzMsIDM1LCAyMCwgMSwgMjI2LCAxNCwgMjI5LCAxNDAsIAorICAgIDIwLCAxLCAyMjYsIDE0LCAyMjgsIDEyMiwgMjAsIDEsIDIyNiwgMTQsIDE4OCwgMjAsIDEsIDIyNiwgMTQsIDIzNCwgODMsIAorICAgIDIwLCAxLCAyMjYsIDE0LCAyMjksIDg3LCAyMCwgMSwgMTMxLCAyMjksIDk4LCAyMzIsIDI0LCAyMCwgMSwgMTMxLCAyMjcsIAorICAgIDIzNywgMjAsIDEsIDEzMSwgMjEyLCAxODcsIDIwLCAxLCAxMzEsIDIxNCwgMzcsIDIwLCAxLCAxMzEsIDIyOSwgMTMzLCAyMCwgCisgICAgMSwgMTMxLCAyMjksIDIxNywgMjAsIDEsIDEzMSwgMjI5LCAxMDUsIDIwLCAxLCAxMzEsIDI0MiwgMjE1LCAyMCwgMSwgMTMxLCAKKyAgICAyMzEsIDE3OCwgMjAsIDEsIDEzMSwgMjQzLCA1MywgMjAsIDEsIDEzMSwgMjI4LCAzLCAyMzAsIDIzOSwgMjMxLCA5OCwgMjAsIAorICAgIDEsIDEzMSwgMjI4LCA5NSwgMjMxLCAxNjksIDIwLCAxLCAxMzEsIDIzMSwgMTc1LCAyMCwgMSwgMTMxLCAyMjUsIDE4NywgCisgICAgMjAsIDEsIDEzMSwgMjI5LCAyMDIsIDIwLCAxLCAxMzEsIDIzMSwgMTg2LCAyNTAsIDIxNSwgMjAsIDEsIDEzMSwgMjM0LCAKKyAgICAxNDksIDIwLCAxLCAxMzEsIDI0MiwgMjE2LCAyMCwgMSwgMTMxLCAyMzQsIDE1NiwgMjAsIDEsIDEzMSwgMjEyLCAyMDQsIAorICAgIDIzMCwgMTQ2LCAyMCwgMSwgMTMxLCAyMjcsIDIzMSwgMjAsIDEsIDEzMSwgMjMxLCAxNjMsIDIwLCAxLCAxMzEsIDIyOCwgCisgICAgMTIxLCAyMCwgMSwgMTMxLCAyMzEsIDE2OSwgMjAsIDEsIDEzMSwgMjEzLCA3LCAyMCwgMSwgMTMxLCAyMzQsIDIsIDIwLCAxLCAKKyAgICAxMzEsIDIzNSwgMTQsIDIwLCAxLCAxMzEsIDIyMSwgNDQsIDIwLCAxLCAxMzEsIDIyOSwgMjExLCAyMCwgMSwgMTMxLCAyMTgsIAorICAgIDQzLCAyMCwgMSwgMTMxLCAyMjgsIDI0MCwgMjAsIDEsIDEzMSwgMjE3LCAxOSwgMjEyLCAxODksIDIwLCAxLCAxMzEsIDIxOSwgCisgICAgMjMsIDIwLCAxLCAxMzEsIDIyOSwgMTI0LCAyMjgsIDIwLCAyMCwgMSwgMTMxLCAyMTQsIDE1OCwgMjAsIDEsIDEzMSwgMjMwLCAKKyAgICAxOSwgMjAsIDEsIDEzMSwgMjMyLCA0MywgMjM0LCAxNTgsIDIwLCAxLCAxMzEsIDIyOCwgMTA0LCAyMCwgMSwgMTMxLCAyMjksIAorICAgIDExOSwgMjAsIDEsIDEzMSwgMjMzLCAxMTEsIDIwLCAxLCAxMzEsIDIzMSwgMTcxLCAyMCwgMSwgMTMxLCAyMzEsIDc1LCAyMCwgCisgICAgMSwgMTMxLCAyMjgsIDk4LCAyMCwgMSwgMTMxLCAyMTcsIDE2OCwgMjAsIDEsIDEzMSwgMjI5LCAxMjEsIDIwLCAxLCAxMzEsIAorICAgIDI0MywgMjA0LCAyMCwgMSwgMTMxLCAyMjksIDIxNiwgMjAsIDEsIDEzMSwgMjI4LCAxMjMsIDIwLCAxLCAxMzEsIDIyOCwgCisgICAgMTE5LCAyMCwgMSwgMTMxLCAyNTEsIDM2LCAyMCwgMSwgMTMxLCAyMTQsIDE2MCwgMjAsIDEsIDEzMSwgMjMxLCAxNzYsIDIwLCAKKyAgICAxLCAxMzEsIDIyMywgNTEsIDIwLCAxLCAxMzEsIDIyOSwgMTQsIDIwLCAxLCAxMzEsIDIzMywgMTI2LCAyMCwgMSwgMTMxLCAKKyAgICAyMTcsIDE3LCAyMCwgMSwgMTMxLCAyMjgsIDEwNSwgMjI5LCA4NywgMjAsIDEsIDEzMSwgMjI5LCA2LCAyMCwgMSwgMTMxLCAKKyAgICAyMzQsIDE2MiwgMjAsIDEsIDEzMSwgMjI5LCAxMjUsIDIwLCAxLCAxMzEsIDIzMiwgMTcsIDIwLCAxLCAxMzEsIDIzMSwgCisgICAgMTY0LCAyMCwgMSwgMTMxLCAyMzIsIDE1NiwgMjAsIDEsIDEzMSwgMjMzLCAyMTAsIDIwLCAxLCAxMzEsIDIyOSwgMTIsIDIwLCAKKyAgICAxLCAxMzEsIDIyOSwgODcsIDIwLCAxLCAxMzEsIDIxMywgMTcyLCAyMCwgMSwgMTMxLCAyMjksIDEyMiwgMjAsIDEsIDEzMSwgCisgICAgMjI4LCAxMDgsIDIwLCAxLCAxMzEsIDIyOCwgMTAwLCAyMCwgMSwgMTMxLCAyMzMsIDIyNCwgMjI4LCAyMjYsIDIwLCAxLCAKKyAgICAxMzEsIDIyOCwgMTA2LCAyMCwgMSwgMTMxLCAyMjksIDIyNCwgMjAsIDEsIDEzMSwgMjMyLCA0MywgMjI4LCAxMTEsIDIwLCAKKyAgICAxLCAxMzEsIDIxMywgOTEsIDIwLCAxLCAxMzEsIDIyOSwgMjIzLCAyMCwgMSwgMTMxLCAyMjAsIDE0NSwgMjAsIDEsIDEzMSwgCisgICAgMjIxLCA0NywgMjAsIDEsIDEzMSwgMjMxLCAxNzIsIDIwLCAxLCAxMzEsIDIzMiwgMjQsIDIwLCAxLCAxMzEsIDIzMSwgMTgyLCAKKyAgICAyMCwgMSwgMTMxLCAyMzQsIDE1MCwgMjAsIDEsIDEzMSwgMjMxLCAxNzMsIDIwLCAxLCAxMzEsIDIzNCwgMTU0LCAyMCwgMSwgCisgICAgMTMxLCAyMzEsIDE4NiwgMjI1LCAyMzUsIDIwLCAxLCAxMzEsIDIxMiwgMTcxLCAyMCwgMSwgMTMxLCAyMjksIDIsIDIwLCAxLCAKKyAgICAxMzEsIDIzMSwgMzMsIDIwLCAxLCAxMzEsIDIzMCwgMTcwLCAyMCwgMSwgMTMxLCAyMjAsIDE5NSwgMjAsIDEsIDEzMSwgCisgICAgMjM0LCAxNzIsIDIzMywgOTQsIDIwLCAxLCAxMzEsIDIzNCwgMTcyLCAyNDQsIDEyOCwgMjAsIDEsIDEzMSwgMjI5LCAxNTIsIAorICAgIDIwLCAxLCAxMzEsIDIzMCwgMTYsIDIwLCAxLCAxMzEsIDIzMiwgMjI5LCAyMCwgMSwgMTMxLCAyMjUsIDE5NywgMjAsIDEsIAorICAgIDEzMSwgMjI2LCA3NCwgMjAsIDEsIDEzMSwgMjE3LCAxODMsIDIwLCAxLCAxMDMsIDIzMSwgMTYyLCAyMCwgMSwgMTAzLCAKKyAgICAyMTQsIDM1LCAyMCwgMSwgMTAzLCAyMjksIDAsIDIwLCAxLCAxMDMsIDIzMSwgODMsIDIwLCAxLCAxMDMsIDIyOCwgMjU0LCAKKyAgICAyMCwgMSwgMTAzLCAyMzMsIDcsIDIwLCAxLCAxMDMsIDIyOSwgMywgMjAsIDEsIDEwMywgMjI4LCAxMTgsIDIwLCAxLCAxMDMsIAorICAgIDIyOSwgMTM5LCAyMCwgMSwgMTAzLCAyMjgsIDIwLCAyMCwgMSwgMTAzLCAyMTMsIDE4MiwgMjAsIDEsIDEwMywgMjI5LCA5NSwgCisgICAgMjAsIDEsIDEwMywgMjIwLCAyNDEsIDIwLCAxLCAxMDMsIDIyOSwgMTA2LCAyMCwgMSwgMTAzLCAyMzQsIDE1NywgMjAsIDEsIAorICAgIDEwMywgMjE3LCAxNzAsIDIwLCAxLCAxMDMsIDIyMCwgMjIxLCAyMCwgMSwgMTAzLCAyMjksIDExLCAyMCwgMSwgMTAzLCAKKyAgICAyMTgsIDI1MywgMjAsIDEsIDEwMywgMjM0LCAxNjIsIDIwLCAxLCAxMDMsIDIxMywgNzksIDIwLCAxLCAxMDMsIDIzMywgCisgICAgMjI1LCAyMCwgMSwgMTAzLCAyMjIsIDE1MCwgMjAsIDEsIDEwMywgMjMxLCA4OCwgMjAsIDEsIDEwMywgMjI5LCAyMTUsIDIwLCAKKyAgICAxLCAxMDMsIDIzMSwgMjUxLCAyMCwgMSwgMTAzLCAyMzEsIDk0LCAyMCwgMSwgMTAzLCAyMjEsIDQ2LCAyMCwgMSwgMTAzLCAKKyAgICAyMTMsIDMwLCAyMCwgMSwgMTAzLCAyMjksIDUsIDIwLCAxLCAxMDMsIDIzNCwgMTUzLCAyMzEsIDE2NSwgMjAsIDEsIDEwMywgCisgICAgMjI5LCAxMDIsIDIwLCAxLCAxMDMsIDIxNiwgODIsIDIwLCAxLCAxMDMsIDI0MiwgMjI0LCAyMCwgMSwgMTAzLCAyMjksIDkyLCAKKyAgICAyMCwgMSwgMTAzLCAyNDQsIDk2LCAyMCwgMSwgMTAzLCAyMjksIDIxOSwgMjAsIDEsIDEwMywgMjMxLCA2NywgMjAsIDEsIAorICAgIDEwMywgMjMzLCAzMSwgMjAsIDEsIDEwMywgMjI5LCAyMDEsIDIwLCAxLCAxMDMsIDIzMCwgMjE3LCAyMCwgMSwgMTAzLCAKKyAgICAyMzEsIDcxLCAyMCwgMSwgMTAzLCAyMjUsIDYsIDIwLCAxLCAxMDMsIDIzMSwgNjksIDIwLCAxLCAxMDMsIDIzMSwgODUsIAorICAgIDIwLCAxLCAxMDMsIDIzMiwgMTQyLCAyMCwgMSwgMTAzLCAyMjgsIDExMCwgMjAsIDEsIDEwMywgMjMxLCAxODUsIDIwLCAxLCAKKyAgICAxMDMsIDIzMywgMjAyLCAyMCwgMSwgMTAzLCAyMjgsIDEyLCAyMCwgMSwgMTAzLCAyMTcsIDE3MywgMjAsIDEsIDEwMywgCisgICAgMjE5LCAyMjEsIDIwLCAxLCAxMDMsIDIxMiwgMTcxLCAyMCwgMSwgMTAzLCAyMzQsIDE1NCwgMjAsIDEsIDEwMywgMjI0LCAKKyAgICA2MCwgMjAsIDEsIDEwMywgMjE3LCAyMTgsIDIwLCAxLCAxMDMsIDIyOSwgMTAzLCAyMCwgMSwgMTAzLCAyMzEsIDkwLCAyMCwgCisgICAgMSwgMTAzLCAyMjgsIDEwOSwgMjAsIDEsIDEwMywgMjM0LCAxNTIsIDIwLCAxLCAxMDMsIDIyNSwgMTkxLCAyMCwgMSwgMTAzLCAKKyAgICAyMjYsIDI4LCAyMCwgMSwgMTAzLCAyMjcsIDI0NiwgMjAsIDEsIDEwMywgMjMzLCAzNSwgMjAsIDEsIDEwMywgMjI5LCAxNDAsIAorICAgIDIwLCAxLCAxMDMsIDIzMSwgODcsIDIwLCAxLCAxMDMsIDIyOSwgMTE0LCAyMCwgMSwgMTAzLCAyMTIsIDE4NCwgMjAsIDEsIAorICAgIDEwMywgMjI2LCAxNDksIDIwLCAxLCAxMDMsIDIxMiwgMTgzLCAyMCwgMSwgMTAzLCAyMjksIDIyNCwgMjAsIDEsIDEwMywgCisgICAgMjI4LCA5OSwgMjAsIDEsIDEwMywgMjE5LCAyNSwgMjAsIDEsIDEwMywgMjMzLCAyMjksIDIwLCAxLCAxMDMsIDIyOSwgMTI5LCAKKyAgICAyMCwgMSwgMTAzLCAyMjksIDEwMCwgMjAsIDEsIDEwMywgMjE2LCA2NiwgMjAsIDEsIDEwMywgMjMxLCA5OCwgMjAsIDEsIAorICAgIDEwMywgMjMzLCAyMTksIDIwLCAxLCAxMDMsIDIyOCwgMTA3LCAyMCwgMSwgMTAzLCAyMTcsIDE3MSwgMjAsIDEsIDEwMywgCisgICAgMjMyLCAxOSwgMjAsIDEsIDEwMywgMjI5LCAxMzgsIDIwLCAxLCAxMDMsIDIzMywgMzAsIDIwLCAxLCAxMDMsIDIyOSwgMTIwLCAKKyAgICAyMCwgMSwgMTAzLCAyMjgsIDExMiwgMjAsIDEsIDEwMywgMjI4LCAyNDAsIDIwLCAxLCAxMDMsIDI0MiwgMjA5LCAyMCwgMSwgCisgICAgMTAzLCAyMzMsIDIzOCwgMjAsIDEsIDEwMywgMjIzLCAyMzQsIDIyNywgNzUsIDIwLCAxLCAxMDMsIDIxOCwgMzUsIDIwLCAxLCAKKyAgICAxMDMsIDIxNiwgMjIzLCAyMCwgMSwgMTAzLCAyMjgsIDEwLCAyMCwgMSwgMTAzLCAyMjMsIDEzNiwgMjAsIDEsIDEwMywgCisgICAgMjMzLCA3MywgMjAsIDEsIDEwMywgMjMxLCAxNDQsIDIwLCAxLCAxMDMsIDE4MywgMjAsIDEsIDEwMywgMjE4LCAyMDUsIDIwLCAKKyAgICAxLCAxMDMsIDIzMCwgMTcyLCAyMCwgMSwgMTAzLCAyMjAsIDIwNywgMjAsIDEsIDEwMywgMjIwLCAyMTcsIDIwLCAxLCAxMDMsIAorICAgIDIzMywgMTc3LCAyMCwgMSwgMTAzLCAyMjgsIDkyLCAyMCwgMSwgMTAzLCAyMjAsIDE1MCwgMjAsIDEsIDEwMywgMjI4LCAKKyAgICAxMDEsIDIwLCAxLCAxMDMsIDIyNiwgODYsIDIwLCAxLCAxMDMsIDIyOSwgNjQsIDIwLCAxLCAxMDMsIDIyMCwgMTc2LCAyMCwgCisgICAgMSwgMTAzLCAyMjUsIDE5LCAyMCwgMSwgMTAzLCAyMzAsIDExNywgMjAsIDEsIDEwMywgMjMyLCAxNzQsIDIwLCAxLCAxMDMsIAorICAgIDIyMywgMjM0LCAyMzAsIDE2NiwgMjAsIDEsIDEwMywgMjE3LCA3MSwgMjAsIDEsIDEwMywgMjI4LCA5MywgMjAsIDEsIDEwMywgCisgICAgMjMxLCAxODYsIDE5OCwgMjAsIDEsIDEwMywgMjIyLCAxNDgsIDIwLCAxLCAxMDMsIDI0NCwgMTYzLCAyMCwgMSwgODAsIAorICAgIDIyOSwgMjIzLCAyMCwgMSwgODAsIDIxNiwgMjI5LCAyMCwgMSwgODAsIDIzMSwgMTc1LCAyMCwgMSwgODAsIDIzMywgMTExLCAKKyAgICAyMCwgMSwgODAsIDIxNCwgMTA5LCAyMCwgMSwgODAsIDIzMiwgMTc4LCAyMCwgMSwgODAsIDIyNiwgMjEzLCAyMCwgMSwgODAsIAorICAgIDIxOSwgMjMwLCAyMCwgMSwgODAsIDIyNCwgMzcsIDIwLCAxLCA4MCwgMjI4LCAxMTQsIDIwLCAxLCA4MCwgMjI5LCAxOTQsIAorICAgIDIwLCAxLCA4MCwgMjI1LCAzMywgMjAsIDEsIDgwLCAyMTgsIDEzLCAyMCwgMSwgODAsIDIyOSwgMTA4LCAyMCwgMSwgODAsIAorICAgIDIzMywgMjU0LCAyMCwgMSwgODAsIDIxMywgMTc1LCAyMCwgMSwgODAsIDIyMiwgODksIDIwLCAxLCA4MCwgMjI5LCAxMzAsIAorICAgIDIwLCAxLCA4MCwgMjI2LCAyMTAsIDIwLCAxLCA4MCwgMjE2LCAyMzAsIDIwLCAxLCA4MCwgMjMzLCAyMjMsIDIwLCAxLCA4MCwgCisgICAgMjMyLCAxOTIsIDIwLCAxLCA4MCwgMjI4LCAxMTcsIDIwLCAxLCA4MCwgMjI5LCA4NCwgMjAsIDEsIDgwLCAyMzIsIDI1LCAKKyAgICAyMCwgMSwgODAsIDIyOSwgMTAxLCAyMCwgMSwgODAsIDIyOSwgODMsIDIwLCAxLCA4MCwgMjI4LCAxMTYsIDIwLCAxLCA4MCwgCisgICAgMjIzLCAxMzQsIDIwLCAxLCA4MCwgMjI5LCAyLCAyMCwgMSwgODAsIDIyNiwgODUsIDIwLCAxLCA4MCwgMjIyLCAyMDAsIDIwLCAKKyAgICAxLCA4MCwgMjI5LCAxMTUsIDIwLCAxLCA4MCwgMjMxLCA3NywgMjAsIDEsIDgwLCAyNDIsIDIwMywgMjAsIDEsIDgwLCAyMjksIAorICAgIDEwNCwgMjAsIDEsIDgwLCAyMjksIDEzLCAyMCwgMSwgODAsIDIzMSwgMjM1LCAyMCwgMSwgODAsIDIzMiwgMTc2LCAyMCwgMSwgCisgICAgODAsIDIyOSwgMTM1LCAyMCwgMSwgODAsIDIyOSwgMjA3LCAyMCwgMSwgODAsIDIxOCwgMzQsIDIyOCwgOTksIDIwLCAxLCAKKyAgICA4MCwgMjIxLCA0OCwgMjAsIDEsIDgwLCAyMjUsIDI5LCAyMCwgMSwgODAsIDIyOSwgMjI3LCAyMTksIDIzNSwgMjAsIDEsIAorICAgIDgwLCAyMjksIDEyMywgMjI4LCAyMCwgMjAsIDEsIDgwLCAyMTIsIDI1MSwgMjAsIDEsIDgwLCAyNDIsIDIwNCwgMjAsIDEsIAorICAgIDgwLCAyMTYsIDgxLCAyMCwgMSwgODAsIDIxMywgMTAsIDIwLCAxLCA4MCwgMjI1LCAxNTAsIDIwLCAxLCA4MCwgMjE2LCA3MSwgCisgICAgMjAsIDEsIDgwLCAyMzQsIDE2MCwgMjAsIDEsIDgwLCAyMTksIDI0LCAyMCwgMSwgODAsIDIxNywgMTcyLCAyMCwgMSwgODAsIAorICAgIDIxNCwgMTYxLCAyMCwgMSwgODAsIDIxMywgMjQ3LCAyMCwgMSwgODAsIDIzMywgMTU0LCAyMCwgMSwgODAsIDIyNSwgMzUsIAorICAgIDIwLCAxLCA4MCwgMjE4LCA0NCwgMjAsIDEsIDgwLCAyNDIsIDIyMywgMjAsIDEsIDgwLCAyMjksIDE0NCwgMjAsIDEsIDgwLCAKKyAgICAyMjAsIDIyMCwgMjAsIDEsIDgwLCAyMzEsIDcyLCAyMCwgMSwgODAsIDIzMSwgMTc5LCAyMCwgMSwgODAsIDIyNywgMjM1LCAKKyAgICAyMCwgMSwgODAsIDIyOCwgMjIzLCAyMCwgMSwgODAsIDI0MywgNDksIDIwLCAxLCA4MCwgMjE2LCA3MiwgMjAsIDEsIDgwLCAKKyAgICAyMzMsIDIzMiwgMjAsIDEsIDgwLCAyMTMsIDU3LCAyMCwgMSwgODAsIDIyOCwgMTEsIDI0OSwgMjA5LCAyMCwgMSwgODAsIAorICAgIDIxMiwgMjQxLCAyMCwgMSwgODAsIDIzMSwgODksIDIwLCAxLCA4MCwgMjI5LCAyMTIsIDIwLCAxLCA4MCwgMjI1LCAyMzIsIAorICAgIDIwLCAxLCA4MCwgMjEyLCAxODgsIDIwLCAxLCA4MCwgMjMzLCAzMiwgMjAsIDEsIDgwLCAyNDMsIDIwNCwgMjAsIDEsIDgwLCAKKyAgICAyNDMsIDQ4LCAyMCwgMSwgODAsIDIyOSwgOTQsIDIwLCAxLCA4MCwgMjM0LCAxNjIsIDIwLCAxLCA4MCwgMjMyLCAyOCwgMjAsIAorICAgIDEsIDgwLCAyMjksIDEwNywgMjAsIDEsIDgwLCAyNDIsIDIxMCwgMjAsIDEsIDgwLCAyNDQsIDE2NCwgMjAsIDEsIDgwLCAKKyAgICAyMjgsIDk0LCAyMCwgMSwgODAsIDIyNiwgMjksIDIwLCAxLCA4MCwgMjEzLCA4LCAyMCwgMSwgODAsIDIyOSwgMTMxLCAyMCwgCisgICAgMSwgODAsIDIyOCwgMTEsIDI1MSwgMjAwLCAyMCwgMSwgODAsIDIyNywgMjE1LCAyMCwgMSwgODAsIDIyNSwgMTI3LCAyMCwgCisgICAgMSwgODAsIDIzMSwgMzMsIDIwLCAxLCA4MCwgMjQzLCAyMDIsIDIwLCAxLCA4MCwgMjMwLCAzOCwgMjAsIDEsIDgwLCAyMzAsIAorICAgIDE3MCwgMjAsIDEsIDgwLCAyNDIsIDIwOSwgMjAsIDEsIDgwLCAyNDMsIDIwNiwgNzIsIDIwLCAxLCA4MCwgMjMwLCAxMTgsIAorICAgIDIwLCAxLCA4MCwgMjI1LCAzMiwgMjAsIDEsIDgwLCAyMjksIDk2LCAyMCwgMSwgODAsIDIzMywgMjEwLCAyMCwgMSwgODAsIAorICAgIDIyNSwgMjI5LCAyMCwgMSwgODAsIDIyOCwgMTAyLCAyMCwgMSwgODAsIDIxMywgOSwgMjAsIDEsIDgwLCAyMjksIDExNiwgCisgICAgMjAsIDEsIDgwLCAyMjYsIDIxNCwgMjI2LCA2MiwgMjAsIDEsIDgwLCAyNDMsIDIwNiwgMjUwLCAyMDMsIDIwLCAxLCA4MCwgCisgICAgMjQ0LCA2LCAyMCwgMSwgODAsIDIyOSwgNywgMjAsIDEsIDgwLCA2MSwgMjAsIDEsIDgwLCAyMTYsIDIyMywgMjAsIDEsIDgwLCAKKyAgICA3NSwgMjAsIDEsIDgwLCA3MiwgMjAsIDEsIDgwLCAyMzMsIDEwOSwgMjAsIDEsIDgwLCAyMjYsIDIxNCwgMjI1LCAxNTcsIAorICAgIDIwLCAxLCA4MCwgMjE4LCA0OSwgMjAsIDEsIDgwLCAyMTgsIDIsIDIwLCAxLCA4MCwgMjI5LCAyMjcsIDIzMCwgMTA2LCAKKyAgICAyNDAsIDIyMSwgMjAsIDEsIDgwLCAyMjAsIDE5NSwgMjAsIDEsIDgwLCAyMTMsIDUsIDIwLCAxLCA4MCwgMjI5LCA3NywgMjAsIAorICAgIDEsIDgwLCAyMTIsIDE5MywgMjAsIDEsIDgwLCAyMTIsIDIxOCwgMjE4LCAxODUsIDIwLCAxLCA4MCwgMjEyLCAyMTgsIDI0OSwgCisgICAgODYsIDIwLCAxLCA4MCwgMjEyLCAxNzgsIDIwLCAxLCA4MCwgMjEyLCAxODYsIDIwLCAxLCA4MCwgMjM0LCAxNDgsIDIwLCAxLCAKKyAgICA4MCwgMjI2LCAyNywgMjAsIDEsIDgwLCAyMjksIDgsIDI0NSwgNjUsIDIwLCAxLCA4MCwgMjI1LCAzMCwgMjAsIDEsIDgwLCAKKyAgICAyMTMsIDE4MCwgMjAsIDEsIDgwLCAyNDQsIDExNiwgMjAsIDEsIDgwLCAyMTQsIDIyNywgMjAsIDEsIDgwLCAyMzIsIDE1NiwgCisgICAgMjAsIDEsIDgwLCAyMzEsIDQyLCAyMCwgMSwgODAsIDIyMywgMjA0LCAyMCwgMSwgODAsIDIyNCwgNjEsIDIwLCAxLCA4MCwgCisgICAgMjI5LCA3NiwgMjAsIDEsIDgwLCAyMjksIDE1OSwgMjAsIDEsIDgwLCAyMjAsIDE4NywgMjAsIDEsIDgwLCAyMjAsIDE3NiwgCisgICAgMjAsIDEsIDgwLCAyNDMsIDIwNiwgMjIzLCAyMzYsIDIwLCAxLCA4MCwgMjA1LCAyMCwgMSwgODAsIDIyNSwgMjQwLCAyMCwgCisgICAgMSwgODAsIDIzMiwgMTc0LCAyMCwgMSwgODAsIDIzNCwgMzcsIDIwLCAxLCA4MCwgMjMxLCAxMjIsIDIwLCAxLCA4MCwgMTg4LCAKKyAgICAyMCwgMSwgODAsIDIzMSwgMjMyLCAyMCwgMSwgODAsIDIxNywgMTc0LCAyMCwgMSwgODAsIDIzNCwgMTAxLCAyMCwgMSwgODAsIAorICAgIDIzMCwgMjIwLCAyMCwgMSwgODAsIDIxNywgMjAwLCAyMCwgMSwgODAsIDI0NCwgMTM3LCAyMCwgMSwgODAsIDI0MiwgMTk5LCAKKyAgICAyMCwgMSwgMjI2LCAxMywgMTgxLCAyMCwgMSwgMjI2LCAxMywgNjksIDIwLCAxLCAyMjYsIDEzLCAyMzMsIDIzOCwgMjAsIDEsIAorICAgIDIyNiwgMTMsIDI0NSwgMTY1LCAyMCwgMSwgMjI2LCAxMywgMjI0LCAxLCAyMCwgMSwgMjI2LCAxMywgMjE4LCAzNSwgMjAsIAorICAgIDEsIDIyNiwgMTMsIDIyOCwgMTAsIDIwLCAxLCAyMjYsIDEzLCAyMzMsIDE1NywgMjAsIDEsIDIyNiwgMTMsIDIyMywgMTM2LCAKKyAgICAyMCwgMSwgMjI2LCAxMywgMjIzLCAxODIsIDIwLCAxLCAyMjYsIDEzLCAyMzEsIDE0NCwgMjAsIDEsIDIyNiwgMTMsIDIxOCwgCisgICAgNDksIDIwLCAxLCAyMjYsIDEzLCAyMjksIDIyNiwgMjAsIDEsIDIyNiwgMTMsIDIyOSwgMTQsIDIwLCAxLCAyMjYsIDEzLCAKKyAgICAxODMsIDIwLCAxLCAyMjYsIDEzLCAyMTgsIDIwNSwgMjAsIDEsIDIyNiwgMTMsIDIyMCwgMjA3LCAyMCwgMSwgMjI2LCAxMywgCisgICAgMjIwLCAxMTcsIDIwLCAxLCAyMjYsIDEzLCAyMjEsIDQ0LCAyMCwgMSwgMjI2LCAxMywgMjMzLCAxNzcsIDIwLCAxLCAyMjYsIAorICAgIDEzLCAyMzQsIDE2MiwgMjAsIDEsIDIyNiwgMTMsIDIyOCwgNjQsIDIwLCAxLCAyMjYsIDEzLCAyMjgsIDkyLCAyMCwgMSwgCisgICAgMjI2LCAxMywgMjI4LCAyNDEsIDIwLCAxLCAyMjYsIDEzLCAyMTIsIDIxNywgMjAsIDEsIDIyNiwgMTMsIDIyMCwgMTUwLCAKKyAgICAyMCwgMSwgMjI2LCAxMywgMTg2LCAyMCwgMSwgMjI2LCAxMywgMjI4LCAxMjAsIDIwLCAxLCAyMjYsIDEzLCAyMjYsIDI3LCAKKyAgICAyMCwgMSwgMjI2LCAxMywgMjI4LCAxMDEsIDIwLCAxLCAyMjYsIDEzLCAyMTMsIDE4MCwgMjAsIDEsIDIyNiwgMTMsIDIyNiwgCisgICAgODYsIDIwLCAxLCAyMjYsIDEzLCAyMjMsIDUxLCAyMCwgMSwgMjI2LCAxMywgMjI5LCA2NCwgMjAsIDEsIDIyNiwgMTMsIAorICAgIDIyMywgMjA0LCAyMCwgMSwgMjI2LCAxMywgMjM0LCAxNzEsIDIwLCAxLCAyMjYsIDEzLCAyMjksIDkzLCAyMCwgMSwgMjI2LCAKKyAgICAxMywgMjI5LCAxNDEsIDIwLCAxLCAyMjYsIDEzLCAyMjAsIDE4NywgMjAsIDEsIDIyNiwgMTMsIDIyNSwgMzMsIDIwLCAxLCAKKyAgICAyMjYsIDEzLCAyNDQsIDYsIDIwLCAxLCAyMjYsIDEzLCAyMTQsIDQ5LCAyMCwgMSwgMjI2LCAxMywgMjMzLCAxMywgMjAsIDEsIAorICAgIDIyNiwgMTMsIDIzMiwgMTc0LCAyMCwgMSwgMjI2LCAxMywgMjM0LCAzNywgMjAsIDEsIDIyNiwgMTMsIDIzMSwgMTc3LCAyMCwgCisgICAgMSwgMjI2LCAxMywgMjIzLCAyMzMsIDIwLCAxLCAyMjYsIDEzLCAxODgsIDIwLCAxLCAyMjYsIDEzLCAyMzAsIDIzMSwgMjAsIAorICAgIDEsIDIyNiwgMTMsIDIzMSwgMTg1LCAyMCwgMSwgMjI2LCAxMywgMjE3LCAxODMsIDIwLCAxLCAyMjYsIDEzLCAyMzQsIDQsIAorICAgIDIwLCAxLCAyMjYsIDEzLCAyMjIsIDE2NiwgMjAsIDEsIDIyNiwgMTMsIDIxNCwgOTgsIDU2LCAxLCAyNTMsIDE5MywgNzQsIAorICAgIDE0MiwgMSwgMjUzLCAxOTMsIDIxMywgMzgsIDQ3LCAyNywgMTYsIDIyNSwgMzksIDQ3LCAyNywgMTYsIDI0OCwgMTAzLCA0NywgCisgICAgMjcsIDE2LCAyMjYsIDUwLCA0NywgMjcsIDE2LCAyMjYsIDIzNywgMjQ1LCAxMzUsIDQ3LCAyNywgMTYsIDIyNiwgMjM3LCAKKyAgICAyNDcsIDE1MywgNDcsIDI3LCAxNiwgMjE0LCAyNDgsIDI0NSwgMTM1LCA0NywgMjcsIDE2LCAyMTQsIDI0OCwgMjQ3LCAxNTMsIAorICAgIDQ3LCAyNywgMTYsIDIzNCwgMjAyLCA0NywgMjcsIDE2LCAyMTgsIDExNSwgNDcsIDI3LCAxNiwgMjI2LCAxMzcsIDQ3LCAyNywgCisgICAgMTYsIDIxMiwgMjA4LCA0NywgMjcsIDE2LCAyMTIsIDIwOSwgMjQ3LCAxNTMsIDQ3LCAyNywgMTYsIDIzMywgMjQzLCA0NywgCisgICAgMjcsIDE2LCAyNTMsIDIzNiwgMjQ1LCAxMzUsIDQ3LCAyNywgMTYsIDI0NCwgMjQ5LCAyNDUsIDEzNSwgNDcsIDI3LCAxNiwgCisgICAgMjE3LCAyMTEsIDQ3LCAyNywgMTYsIDIzNCwgMTY3LCA0NywgMjcsIDE2LCAyNTMsIDIyNywgNDcsIDI3LCAxNiwgMjUzLCAKKyAgICAyMjgsIDI0NywgMTUzLCA0NywgMjcsIDE2LCAyMTgsIDEyMSwgNDcsIDI3LCAxNiwgMjE3LCAxMTIsIDQ3LCAyNywgMTYsIAorICAgIDIyNywgNzIsIDI1MywgMTkxLCA0NywgMjcsIDE2LCAyNDIsIDEzNSwgMjUzLCAxOTEsIDQ3LCAyNywgMTYsIDIyNSwgMzgsIAorICAgIDQ3LCAyNywgMTYsIDI1MCwgODUsIDQ3LCAyNywgMTYsIDIxNCwgMjM4LCA0NywgMjcsIDE2LCAyMzUsIDE2MiwgMjUzLCAKKyAgICAxOTEsIDQ3LCAyNywgMTYsIDIzNCwgMTY5LCAyNTMsIDE5MSwgNDcsIDI3LCAxNiwgMjM0LCAxNjgsIDI1MywgMTkxLCA0NywgCisgICAgMjcsIDE2LCAyMjIsIDEzMSwgNDcsIDI3LCAxNiwgMjI2LCAxMjgsIDQ3LCAyNywgMTYsIDIxOSwgODYsIDI1MywgMjMwLCAKKyAgICA0NywgMjcsIDE2LCAyMjYsIDIzNiwgMjUzLCAxOTEsIDQ3LCAyNywgMTYsIDIxNCwgMjQ3LCAyNTMsIDE5MSwgNDcsIDI3LCAKKyAgICAxNiwgMjUzLCAyMzEsIDI1MywgMTkxLCA0NywgMjcsIDE2LCAyNTMsIDIyNSwgNDcsIDI3LCAxNiwgMjM0LCA0NiwgNDcsIAorICAgIDI3LCAxNiwgMjIzLCAxOTksIDQ3LCAyNywgMTYsIDIyNSwgMjM4LCAyNTMsIDE5MSwgNDcsIDI3LCAxNiwgMjE3LCAzNiwgCisgICAgNDcsIDI3LCAxNiwgMjU0LCAzMCwgNDcsIDI3LCAxNiwgMjIyLCA3OCwgNDcsIDI3LCAxNiwgMjE4LCAxMjQsIDI1MywgMTkxLCAKKyAgICA0NywgMjcsIDE2LCAyMTgsIDEyNCwgMjMxLCAxMDcsIDIxOSwgODQsIDQ3LCAyNywgMTYsIDIyNiwgMjMxLCAyNTMsIDE5MSwgCisgICAgNDcsIDI3LCAxNiwgMjE3LCAxNDMsIDQ3LCAyNywgMTYsIDIzMywgNTEsIDQ3LCAyNywgMTYsIDI0NSwgMjUyLCA0NywgMjcsIAorICAgIDE2LCAyMTYsIDE4NSwgNDcsIDI3LCAxNiwgMjE3LCAxODUsIDQ3LCAyNywgMTYsIDIzMywgMjQ2LCA0NywgMjcsIDE2LCAKKyAgICAyNTMsIDIzNiwgMjQ0LCAyNDksIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyNDMsIDIwNywgMjUzLCAxOTEsIDQ3LCAyNywgMTYsIAorICAgIDIzNiwgNywgNDcsIDI3LCAxNiwgMjE2LCAxNTcsIDI1MywgMTkxLCA0NywgMjcsIDE2LCAyMzQsIDIwNSwgMjE2LCAxNTYsIAorICAgIDQ3LCAyNywgMTYsIDIyNiwgNzUsIDQ3LCAyNywgMTYsIDIyNSwgNDMsIDQ3LCAyNywgMTYsIDIzNCwgMjAsIDQ3LCAyNywgCisgICAgMTYsIDI1MCwgMTcsIDI1MywgMTkxLCA0NywgMjcsIDE2LCAyMjQsIDM4LCA0NywgMjcsIDE2LCAyMjYsIDE0MCwgMjUzLCAKKyAgICAxOTEsIDQ3LCAyNywgMTYsIDIyNiwgMTM4LCAyNTMsIDE5MSwgNDcsIDI3LCAxNiwgMjQwLCAxMDIsIDQ3LCAyNywgMTYsIAorICAgIDIzMCwgMjMsIDQ3LCAyNywgMTYsIDIyNiwgMzIsIDQ3LCAyNywgMTYsIDIzNCwgMjEsIDI1NCwgNTgsIDQ3LCAyNywgMTYsIAorICAgIDIxNiwgMTU3LCAyNTQsIDU4LCA0NywgMjcsIDE2LCAyMTksIDYzLCA0NywgMjcsIDE2LCAyNDIsIDEwMSwgNDcsIDI3LCAxNiwgCisgICAgMjM1LCAxNjIsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMjcsIDcyLCAyMjksIDE3NywgNDcsIDI3LCAxNiwgMjI2LCAyMzcsIAorICAgIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMjYsIDMxLCA0NywgMjcsIDE2LCAyMzQsIDcsIDQ3LCAyNywgMTYsIDIyNiwgMzAsIAorICAgIDQ3LCAyNywgMTYsIDIzMywgMjQ1LCA0NywgMjcsIDE2LCAyMjYsIDc2LCAyMjksIDE3NywgNDcsIDI3LCAxNiwgMjM0LCAKKyAgICAxNjgsIDIyOSwgMTc4LCAyNTQsIDcsIDQ3LCAyNywgMTYsIDIzNCwgMTY5LCAyMjksIDE3OCwgMjU0LCA3LCA0NywgMjcsIAorICAgIDE2LCAyMTIsIDIwNiwgNDcsIDI3LCAxNiwgMjUzLCAyMjgsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyNTMsIDIyOSwgMjE4LCAKKyAgICAxMjIsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMTIsIDIwNywgNDcsIDI3LCAxNiwgMjMzLCAyNDQsIDQ3LCAyNywgMTYsIAorICAgIDI0NSwgMTMwLCA0NywgMjcsIDE2LCAyNTAsIDg2LCA0NywgMjcsIDE2LCAyMzEsIDExLCAyMzUsIDE2MSwgNDcsIDI3LCAxNiwgCisgICAgMjE0LCAyNDgsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMjUsIDIzOCwgMjI5LCAxNzcsIDQ3LCAyNywgMTYsIDIyNSwgNDQsIAorICAgIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMjcsIDY5LCA0NywgMjcsIDE2LCAyNTMsIDI1MSwgNDcsIDI3LCAxNiwgMjMyLCAKKyAgICAxMTgsIDQ3LCAyNywgMTYsIDIyNiwgMTM4LCAyMjksIDE3NywgNDcsIDI3LCAxNiwgMjI2LCAxNDAsIDIyOSwgMTc3LCA0NywgCisgICAgMjcsIDE2LCAyNDUsIDI2LCAyMjYsIDEzOSwgNDcsIDI3LCAxNiwgMjMzLCAxNzUsIDQ3LCAyNywgMTYsIDI1MywgMjUyLCAKKyAgICA0NywgMjcsIDE2LCAyMTYsIDE1NywgMjI5LCAxNzcsIDQ3LCAyNywgMTYsIDI0NSwgMTMzLCA0NywgMjcsIDE2LCAyMTgsIAorICAgIDEyNCwgMjI5LCAxNzcsIDQ3LCAyNywgMTYsIDIxOCwgMTE2LCA0NywgMjcsIDE2LCAyNTAsIDE3LCAyMjksIDE3NywgNDcsIAorICAgIDI3LCAxNiwgMjQ1LCA2OSwgNDcsIDI3LCAxNiwgMjIyLCA3OSwgMjI5LCAxNzcsIDQ3LCAyNywgMTYsIDIxMywgMTM5LCAKKyAgICAyMzQsIDQ2LCA0NywgMjcsIDE2LCAyMTYsIDE1NCwgNDcsIDI3LCAxNiwgMjI1LCA0NSwgNDcsIDI3LCAxNiwgMjE2LCAxNTgsIAorICAgIDQ3LCAyNywgMTYsIDIxNiwgMTU1LCA0NywgMjcsIDE2LCAyMjUsIDQyLCA0NywgMjcsIDE2LCAyMTYsIDE1MywgNDcsIDI3LCAKKyAgICAxNiwgMjI1LCA0MSwgNDcsIDI3LCAxNiwgMjQyLCAxMzQsIDQ3LCAyNywgMTYsIDI1MywgMTg1LCA0NywgMjcsIDE2LCAyNDUsIAorICAgIDI2LCAyNTMsIDE4NSwgNDcsIDI3LCAxNiwgMjI2LCAyMzEsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAyMTcsIDE0MiwgMjQ1LCAKKyAgICAzNCwgNDcsIDI3LCAxNiwgMjE3LCAxNDIsIDI0NCwgMjQ4LCA0NywgMjcsIDE2LCAyMTcsIDE0NCwgMjUzLCAyMzIsIDQ3LCAKKyAgICAyNywgMTYsIDIxNywgMTM3LCAyMzQsIDI1MSwgMjUzLCAyMjQsIDQ3LCAyNywgMTYsIDIzNCwgMjA0LCA0NywgMjcsIDE2LCAKKyAgICAyNDUsIDk3LCA0NywgMjcsIDE2LCAyMTMsIDIsIDIzNCwgMjAxLCA0NywgMjcsIDE2LCAyMTMsIDIsIDI1NCwgNywgNDcsIAorICAgIDI3LCAxNiwgMjE5LCA4NSwgNDcsIDI3LCAxNiwgMjM0LCA0NywgMjU0LCA3LCA0NywgMjcsIDE2LCAyNDcsIDE1NCwgMjUzLCAKKyAgICAxOTEsIDQ3LCAyNywgMTYsIDIzMywgMjQ3LCAyNTMsIDE5MSwgNDcsIDI3LCAxNiwgMjMzLCAyNDcsIDI1NCwgNTgsIDQ3LCAKKyAgICAyNywgMTYsIDIzMywgMjQ3LCAyMjksIDE3NywgNDcsIDI3LCAxNiwgMjUzLCAyMzEsIDIyOSwgMTc3LCA0NywgMjcsIDE2LCAKKyAgICAyNTMsIDIzMywgNDcsIDI3LCAxNiwgMjQ3LCAxNTMsIDQ3LCAyNywgMTYsIDIxNiwgMTY4LCA0NywgMjcsIDE2LCAyMTcsIAorICAgIDE3NywgNDcsIDI3LCAxNiwgMjM0LCAxMSwgNDcsIDI3LCAxNiwgMjMzLCA1NiwgMjQ1LCA5MiwgMjUwLCA4LCA0NywgMjcsIAorICAgIDE2LCAyMzMsIDU2LCAyNDUsIDI1MywgMjUwLCA5LCA0NywgMjcsIDE2LCAyMzMsIDU2LCAyMTYsIDE3MCwgMjUwLCA5LCA0NywgCisgICAgMjcsIDE2LCAyMzMsIDU2LCAyMTcsIDE4NywgMjUwLCA5LCA0NywgMjcsIDE2LCAyMzMsIDU2LCAyMzYsIDIsIDI1MCwgOCwgCisgICAgNDcsIDI3LCAxNiwgMjQyLCAxMzUsIDIyOSwgMTc4LCAyNTQsIDcsIDQ3LCAyNywgMTYsIDI0MiwgMTM1LCAyMjYsIDEyOSwgCisgICAgMjUzLCAxODEsIDQ3LCAyNywgMTYsIDI0MiwgMTM1LCAyMjYsIDEyOSwgMjQ3LCAyMzYsIDQ3LCAyNywgMTYsIDI0NywgMTc3LCAKKyAgICA0NywgMjcsIDE2LCAyNDcsIDE3OCwgMjI2LCAxMjksIDI1MywgMTgyLCAyMzQsIDIwMSwgNDcsIDI3LCAxNiwgMjQ3LCAxNzgsIAorICAgIDIyNiwgMTI5LCAyNTMsIDE4MiwgMjU0LCA3LCA0NywgMjcsIDE2LCAyNDcsIDE3OCwgMjI2LCAxMjksIDI0NywgMjM2LCA0NywgCisgICAgMjcsIDE2LCAyMTYsIDE3NCwgNDcsIDI3LCAxNiwgMjUzLCAxODYsIDQ3LCAyNywgMTYsIDIzNiwgOSwgNDcsIDI3LCAxNiwgCisgICAgMjQ3LCAxOTgsIDQ3LCAyNywgMTYsIDI1NCwgMTE2LCAyMjUsIDEzNCwgMjUzLCAxODcsIDQ3LCAyNywgMTYsIDI1NCwgMTE2LCAKKyAgICAyNTMsIDE4NCwgNDcsIDI3LCAxNiwgMjU0LCAxMTYsIDI1MywgMTg3LCA0NywgMjcsIDE2LCAyNTQsIDExNiwgMjMxLCAxMDEsIAorICAgIDQ3LCAyNywgMTYsIDI1NCwgMTE2LCAyMzEsIDExMCwgNDcsIDI3LCAxNiwgMjU0LCAxMTYsIDI0MiwgMTM2LCA0NywgMjcsIAorICAgIDE2LCAyNTQsIDExNiwgMjQyLCAxMzMsIDQ3LCAyNywgMTYsIDI1NCwgMTE2LCAyMjUsIDEzNCwgMjQyLCAxMzYsIDQ3LCAyNywgCisgICAgMTYsIDIzMSwgMjE0LCAyMjUsIDUwLCAyNDAsIDEwMCwgNDcsIDI3LCAxNiwgMjMxLCAyMTQsIDI1NCwgNjAsIDIyNSwgNTAsIAorICAgIDI0MCwgMTAwLCA0NywgMjcsIDE2LCAyMzEsIDIxNCwgMjQ3LCAyMzUsIDI0MCwgMTAwLCA0NywgMjcsIDE2LCAyMzEsIDIxNCwgCisgICAgMjU0LCA2MCwgMjQ3LCAyMzUsIDI0MCwgMTAwLCA0NywgMjcsIDE2LCAyMzEsIDIxNCwgMjE2LCAxNjMsIDI0MCwgMTAwLCAKKyAgICA0NywgMjcsIDE2LCAyMzEsIDIxNCwgMjE2LCAxNzUsIDQ3LCAyNywgMTYsIDIzMSwgMjE0LCAyMTcsIDE4MSwgMjQwLCAxMDAsIAorICAgIDQ3LCAyNywgMTYsIDIzMSwgMjE0LCAyMTcsIDE4MSwgMjMzLCA1OSwgMjQwLCAxMDAsIDQ3LCAyNywgMTYsIDIzMSwgMjE0LCAKKyAgICAyMzMsIDU5LCAyNDAsIDEwMCwgNDcsIDI3LCAxNiwgMjMxLCAyMTQsIDIyNSwgMTcxLCAyNDAsIDEwMCwgNDcsIDI3LCAxNiwgCisgICAgMjM1LCAxNjcsIDIxNywgMjA0LCAyNDAsIDEwMSwgNDcsIDI3LCAxNiwgMjUzLCAyMjksIDIxNywgMjA0LCAyNDAsIDEwMSwgCisgICAgNDcsIDI3LCAxNiwgMjQ0LCAxNDAsIDIxNywgMTc4LCA0NywgMjcsIDE2LCAyNDQsIDE0MCwgMjMwLCAyMTMsIDQ3LCAyNywgCisgICAgMTYsIDI0NCwgMTQwLCAyNDcsIDE4MiwgNDcsIDI3LCAxNiwgMjMxLCAyMTQsIDIxNCwgMjQyLCAyNDAsIDEwMCwgNDcsIDI3LCAKKyAgICAxNiwgMjMxLCAyMTQsIDIyNSwgNDksIDI0MCwgMTAwLCA0NywgMjcsIDE2LCAyMzEsIDIxNCwgMjI1LCAxNzEsIDIxNywgCisgICAgMTgxLCAyNDAsIDEwMCwgNDcsIDI3LCAxNiwgMjQyLCAxMzEsIDIzMCwgOTgsIDI1MywgMjMyLCA0NywgMjcsIDE2LCAyNDIsIAorICAgIDEzMSwgMjMwLCA5OCwgMjQ3LCAxNTIsIDQ3LCAyNywgMTYsIDI0NSwgMTA2LCAyMzQsIDI1MSwgMjQzLCAyMDcsIDIxNCwgCisgICAgMTA1LCA0NywgMjcsIDE2LCAyMzYsIDgsIDQ3LCAyNywgMTYsIDIzNiwgNiwgNDcsIDI3LCAxNiwgMjQzLCAyMDcsIDI1MywgCisgICAgMTkyLCAyNDcsIDIzNCwgMjQwLCA5OSwgNDcsIDI3LCAxNiwgMjQzLCAyMDcsIDI0NywgMTk2LCAxOTMsIDQ3LCAyNywgMTYsIAorICAgIDI0MywgMjA3LCAyNDcsIDE5NiwgMjMwLCAyMywgNDcsIDI3LCAxNiwgMjQzLCAyMDcsIDIzMCwgMTgsIDI0MCwgMTAwLCA0NywgCisgICAgMjcsIDE2LCAyNDMsIDIwNywgMjQ3LCAxOTYsIDI0NywgMjExLCA0NywgMjcsIDE2LCAyNDMsIDIwNywgMjIwLCAzMCwgMjQ3LCAKKyAgICAxOTUsIDI0NywgMjExLCA0NywgMjcsIDE2LCAyNDMsIDIwNywgMjQ3LCAxOTYsIDIzNCwgMTg4LCA0NywgMjcsIDE2LCAyNDMsIAorICAgIDIwNywgMjQ3LCAxOTYsIDIxMiwgMTYsIDQ3LCAyNywgMTYsIDI0MywgMjA3LCAyNDcsIDE5NiwgMjI5LCA2NSwgMjM0LCAKKyAgICAyMDEsIDQ3LCAyNywgMTYsIDI0MywgMjA3LCAyNDcsIDE5NiwgMjI5LCA2NSwgMjU0LCA3LCA0NywgMjcsIDE2LCAyNDMsIAorICAgIDIwNywgMjMxLCAyNTQsIDI1MCwgMTAsIDI0NywgMTgyLCA0NywgMjcsIDE2LCAyNDMsIDIwNywgMjMxLCAyNTQsIDI1MCwgCisgICAgMTAsIDIzMCwgMjEzLCA0NywgMjcsIDE2LCAyNDQsIDkxLCAyMjAsIDMwLCAyNTAsIDEwLCAyMTQsIDI0MSwgNDcsIDI3LCAKKyAgICAxNiwgMjQzLCAyMDcsIDIyMCwgMzAsIDI1MCwgMTAsIDIxOCwgMTI1LCA0NywgMjcsIDE2LCAyNDMsIDIwNywgMjI5LCAxNzksIAorICAgIDQ3LCAyNywgMTYsIDI1MCwgMTEsIDIxMSwgMjQ4LCA0NywgMjcsIDE2LCAyNTAsIDExLCAyMzQsIDQ1LCA0NywgMjcsIDE2LCAKKyAgICAyNTAsIDExLCAyMTksIDE5NywgNDcsIDI3LCAxNiwgMjQzLCAyMDcsIDI0MCwgMTQ2LCAyMTMsIDEsIDIxNywgMTgyLCA0NywgCisgICAgMjcsIDE2LCAyNDMsIDIwNywgMjQ1LCAxMDcsIDI1MywgMjUzLCA0NywgMjcsIDE2LCAyMTMsIDEsIDIxNiwgMTY0LCA0NywgCisgICAgMjcsIDE2LCAyNDcsIDE5MCwgMjE2LCAxNjQsIDQ3LCAyNywgMTYsIDI0NywgMTkwLCAyMTcsIDE4MiwgNDcsIDI3LCAxNiwgCisgICAgMjQ3LCAxOTAsIDI1MywgMjM0LCAyNDUsIDI1MywgMjQ3LCA5MywgNDcsIDI3LCAxNiwgMjQ3LCAxOTAsIDIzMCwgMjExLCAKKyAgICAyMTcsIDE4NiwgMjQ3LCA5MywgNDcsIDI3LCAxNiwgMjQ3LCAxOTAsIDI0NywgMTc0LCAyNDUsIDMsIDI0NywgOTMsIDQ3LCAKKyAgICAyNywgMTYsIDI0NywgMTkwLCAyMTYsIDE3MiwgMjI3LCA3NywgMjQ3LCA5MywgNDcsIDI3LCAxNiwgMjEzLCAxLCAyNTMsIAorICAgIDIzNCwgMjQ1LCAyNTMsIDI0NywgOTMsIDQ3LCAyNywgMTYsIDIxMywgMSwgMjMwLCAyMTEsIDIxNywgMTg2LCAyNDcsIDkzLCAKKyAgICA0NywgMjcsIDE2LCAyMTMsIDEsIDI0NywgMTc0LCAyNDUsIDMsIDI0NywgOTMsIDQ3LCAyNywgMTYsIDIxMywgMSwgMjE2LCAKKyAgICAxNzIsIDIyNywgNzcsIDI0NywgOTMsIDQ3LCAyNywgMTYsIDI0MywgMjUsIDI0NywgMTg5LCA0NywgMjcsIDE2LCAyNDMsIAorICAgIDI1LCAyMTMsIDAsIDQ3LCAyNywgMTYsIDI0NywgMTk3LCAyNTMsIDIzNCwgMjMxLCAxMiwgNDcsIDI3LCAxNiwgMjQ3LCAKKyAgICAxOTcsIDI1MywgMjM0LCAyMzEsIDEzNywgNDcsIDI3LCAxNiwgMjQ3LCAxOTcsIDI0NywgMTUzLCA0NywgMjcsIDE2LCAyNDcsIAorICAgIDE5NywgMjE3LCAxMzUsIDQ3LCAyNywgMTYsIDIyMCwgODksIDIxNywgMTM1LCA0NywgMjcsIDE2LCAyMjAsIDg5LCAyMTcsIAorICAgIDEzNiwgMjQ3LCAxMzgsIDQ3LCAyNywgMTYsIDIyMCwgODksIDIxNywgMTM2LCAyMTYsIDE2NSwgNDcsIDI3LCAxNiwgMjIwLCAKKyAgICA4OSwgMjE3LCAxMzYsIDIxNywgMTc1LCA0NywgMjcsIDE2LCAyMjAsIDg5LCAyNTMsIDE1OSwgNDcsIDI3LCAxNiwgMjIwLCAKKyAgICA4OSwgMjUzLCAxNjAsIDI0NywgMTM4LCA0NywgMjcsIDE2LCAyMjAsIDg5LCAyNTMsIDE2MCwgMjE2LCAxNjUsIDQ3LCAyNywgCisgICAgMTYsIDIyMCwgODksIDI1MywgMTYwLCAyMTcsIDE3NSwgNDcsIDI3LCAxNiwgMjQ3LCAxNzUsIDI0MywgNiwgNDcsIDI3LCAKKyAgICAxNiwgMjQ3LCAxODEsIDIyNywgMiwgNDcsIDI3LCAxNiwgMjE5LCA3NywgNDcsIDI3LCAxNiwgMjUzLCAxNzgsIDE5MywgNDcsIAorICAgIDI3LCAxNiwgMjUzLCAxNzgsIDIxNCwgMTA1LCA0NywgMjcsIDE2LCAyNTMsIDE3OCwgMjQzLCAxMTAsIDQ3LCAyNywgMTYsIAorICAgIDI1MywgMTc4LCAyNDcsIDIxMSwgNDcsIDI3LCAxNiwgMjUzLCAxNzgsIDIzNCwgMTg4LCA0NywgMjcsIDE2LCAyNTMsIDE3OCwgCisgICAgMjEyLCAxNiwgNDcsIDI3LCAxNiwgMjUzLCAxNzgsIDIyOSwgNjQsIDQ3LCAyNywgMTYsIDIzNCwgMTY4LCAyMjksIDE3OCwgCisgICAgMjMxLCAxMDksIDQ3LCAyNywgMTYsIDIzNCwgMTY5LCAyMjksIDE3OCwgMjMxLCAxMDksIDQ3LCAyNywgMTYsIDIzNCwgMTY4LCAKKyAgICAyMjksIDE3OCwgMjM0LCAyMDEsIDQ3LCAyNywgMTYsIDIzNCwgMTY5LCAyMjksIDE3OCwgMjM0LCAyMDEsIDQ3LCAyNywgMTYsIAorICAgIDIzNCwgNDcsIDIzNCwgMjAxLCA0NywgMjcsIDE2LCAyNDIsIDEzNSwgMjI5LCAxNzgsIDIzNCwgMjAxLCAyNywgMTYsIDIyMCwgCisgICAgODEsIDI1MiwgNTUsIDI3LCAxNiwgNTEsIDI1MiwgNTUsIDI3LCAxNiwgNDAsIDI1MiwgNTUsIDI3LCAxNiwgMjIzLCAyMDMsIAorICAgIDQwLCAyNTIsIDU1LCAyNywgMTYsIDI0OCwgMTAwLCAyNTIsIDU1LCAyNywgMTYsIDIyMCwgMTc1LCAyNTIsIDU1LCAyNywgCisgICAgMTYsIDQyLCAyMjMsIDIyOCwgNTIsIDI3LCAxNiwgNDYsIDIyMywgMjI4LCA1MiwgMjcsIDE2LCAyMjMsIDIyOCwgMjQ3LCAKKyAgICA3MiwgMjcsIDE2LCAyNDgsIDE0MSwgMjIyLCA4MiwgMjcsIDE2LCAyNDgsIDE2NSwgMjUwLCAxODEsIDI3LCAxNiwgMjIyLCAKKyAgICA4MiwgMjcsIDE2LCAyNDksIDE3MSwgMjcsIDE2LCAyMjMsIDIyNiwgMjQ0LCA4MCwgMjcsIDE2LCAyMjMsIDIyNiwgMjQ0LCAKKyAgICA3OSwgMjcsIDE2LCAyMjMsIDIyNiwgMjQ0LCA3OCwgMjcsIDE2LCAyNDQsIDEwMCwgMjcsIDE2LCAyNDQsIDEwMSwgNTUsIAorICAgIDI3LCAxNiwgMjUxLCA3NiwgNzcsIDI3LCAxNiwgMjUwLCAyMTAsIDI3LCAxNiwgMjUxLCA4NiwgMjcsIDE2LCAxMjUsIDI3LCAKKyAgICAxNiwgMjI3LCA1OSwgMjE5LCAxMDIsIDI3LCAxNiwgMjE2LCAyMywgMjE5LCAxMDIsIDI3LCAxNiwgMjE3LCA5NiwgMjE5LCAKKyAgICAxMDIsIDI3LCAxNiwgMjQzLCAyMzYsIDIxOSwgMTAyLCAyNywgMTYsIDI0NCwgNDksIDIxOSwgMTAyLCAyNywgMTYsIDIyMCwgCisgICAgNTIsIDIxOSwgMTAyLCAyNywgMTYsIDIyMCwgNTAsIDI0MywgMjIwLCAyNywgMTYsIDI0MywgMjM0LCAyNDMsIDIyMCwgMjcsIAorICAgIDE2LCAyNDMsIDE3OCwgMjQ5LCAyMDcsIDI3LCAxNiwgMjQzLCAxNzgsIDI0OSwgMjA4LCAyMjcsIDQsIDI1NCwgNTEsIDI3LCAKKyAgICAxNiwgMjQzLCAxNzgsIDI0OSwgMjA4LCAyMjcsIDQsIDI1MiwgNDIsIDI3LCAxNiwgMjUwLCAyNTMsIDI0OSwgMjA3LCAyNywgCisgICAgMTYsIDI0NCwgMjMxLCAyNDksIDIwNywgMjcsIDE2LCAyNDQsIDIzMSwgMjQ5LCAyMDgsIDIyNywgNCwgMjU0LCA1MSwgMjcsIAorICAgIDE2LCAyNDQsIDIzMSwgMjQ5LCAyMDgsIDIyNywgNCwgMjUyLCA0MiwgMjcsIDE2LCAyNDYsIDM4LCAyNDksIDIwNiwgMjcsIAorICAgIDE2LCAyNDYsIDM4LCAyNDksIDIwNSwgMjcsIDE2LCAyMzAsIDE1NSwgMjMxLCAxNTUsIDIyMywgMjEzLCAyNywgMTYsIDUxLCAKKyAgICAyMjAsIDI1NCwgMjcsIDE2LCA1MSwgMjQ0LCAzNCwgMjcsIDE2LCAyNDQsIDM1LCAyMTUsIDEzNCwgMjcsIDE2LCAyNDQsIAorICAgIDM1LCAyNDYsIDYwLCAyNywgMTYsIDIzMCwgOSwgMjE1LCAxMzQsIDI3LCAxNiwgMjMwLCA5LCAyNDYsIDYwLCAyNywgMTYsIAorICAgIDIyMCwgMjU1LCAyMTUsIDEzNCwgMjcsIDE2LCAyMjAsIDI1NSwgMjQ2LCA2MCwgMjcsIDE2LCAyMjQsIDE2NywgMTYwLCAKKyAgICAyMjAsIDI1NCwgMjcsIDE2LCAyMjQsIDE2NywgMTYwLCAyNDQsIDM0LCAyNywgMTYsIDI0OSwgMTU1LCAyMTcsIDQwLCAyNywgCisgICAgMTYsIDI0OSwgMjcsIDIxNywgNDAsIDI3LCAxNiwgMjI3LCA0LCAyNTQsIDUxLCAyNywgMTYsIDIyNywgNCwgMjUyLCA0MiwgCisgICAgMjcsIDE2LCAyMjQsIDE0OSwgMjU0LCA1MSwgMjcsIDE2LCAyMjQsIDE0OSwgMjUyLCA0MiwgMjcsIDE2LCAyMzAsIDE1OCwgCisgICAgMjIzLCAyMTMsIDI3LCAxNiwgMjEzLCAyMzYsIDIyMywgMjEzLCAyNywgMTYsIDE1MSwgMjIzLCAyMTMsIDI3LCAxNiwgMjI0LCAKKyAgICAxNjcsIDIyMywgMjEzLCAyNywgMTYsIDI0NSwgMTQ2LCAyMjMsIDIxMywgMjcsIDE2LCAyMjAsIDQ2LCAyMjMsIDIxMywgMjcsIAorICAgIDE2LCAyMTcsIDExMywgMjIzLCAyMTMsIDI3LCAxNiwgMjIwLCAzOCwgMjIzLCAyMTMsIDI3LCAxNiwgMTIyLCAyNDAsIDIwMSwgCisgICAgMjE2LCAzNiwgMjIzLCAyMTMsIDI3LCAxNiwgMjEzLCAxNjcsIDIyOCwgMTU0LCAyNywgMTYsIDk0LCAyMjgsIDE1NCwgMjcsIAorICAgIDE2LCAyNDksIDIyOSwgMjEzLCAxNjcsIDIyOCwgMTU0LCAyNywgMTYsIDQxLCAyMjgsIDE1NSwgMjEzLCAyMzgsIDI3LCAxNiwgCisgICAgNDEsIDIyOCwgMTU1LCAyNTEsIDE0NCwgMjcsIDE2LCAyMTYsIDE4NCwgMjI4LCAxNTUsIDExNCwgMjEzLCAyMzgsIDI3LCAKKyAgICAxNiwgMjE2LCAxODQsIDIyOCwgMTU1LCAxMTQsIDI1MSwgMTQ0LCAyNywgMTYsIDIxNiwgMTg0LCAyMjgsIDE1NSwgNDIsIAorICAgIDIxMywgMjM4LCAyNywgMTYsIDIxNiwgMTg0LCAyMjgsIDE1NSwgNDIsIDI1MSwgMTQ0LCAyNywgMTYsIDIxNiwgMTg0LCAKKyAgICAyMjgsIDE1NSwgNDYsIDIxMywgMjM4LCAyNywgMTYsIDIxNiwgMTg0LCAyMjgsIDE1NSwgNDYsIDI1MSwgMTQ0LCAyNywgMTYsIAorICAgIDIxNiwgMTg0LCAyMjgsIDE1NSwgMTE5LCAyMTMsIDIzOCwgMjcsIDE2LCAyMTYsIDE4NCwgMjI4LCAxNTUsIDExOSwgMjUxLCAKKyAgICAxNDQsIDI3LCAxNiwgMjE2LCAxODQsIDIyOCwgMTU1LCAxMTQsIDQ2LCAyMTMsIDIzOCwgMjcsIDE2LCAyMTYsIDE4NCwgCisgICAgMjI4LCAxNTUsIDExNCwgNDYsIDI1MSwgMTQ0LCAyNywgMTYsIDIzMCwgMTk5LCAyMjgsIDE1NSwgMjEzLCAyMzgsIDI3LCAKKyAgICAxNiwgMjMwLCAxOTksIDIyOCwgMTU1LCAyNTEsIDE0NCwgMjcsIDE2LCAyMTYsIDE4MSwgMjI4LCAxNTUsIDExOSwgMjEzLCAKKyAgICAyMzgsIDI3LCAxNiwgMjE2LCAxODEsIDIyOCwgMTU1LCAxMTksIDI1MSwgMTQ0LCAyNywgMTYsIDIyNiwgMTMyLCAyMjgsIAorICAgIDE1NCwgMjcsIDE2LCAyMTQsIDExMywgMjI4LCAxNTQsIDI3LCAxNiwgMjI4LCAxNTUsIDI1MSwgMTQ0LCAyNywgMTYsIDIyOCwgCisgICAgNTksIDIyOCwgMTU0LCAyNywgMTYsIDI0OSwgMTc4LCAyMjgsIDE1NSwgMjEzLCAyMzgsIDI3LCAxNiwgMjQ5LCAxNzgsIAorICAgIDIyOCwgMTU1LCAyNTEsIDE0NCwgMjcsIDE2LCAyNTEsIDc0LCAyNywgMTYsIDIxMywgMjM2LCAyMjgsIDE1OCwgMjcsIDE2LCAKKyAgICAxNTEsIDIyOCwgMTU4LCAyNywgMTYsIDIyNCwgMTY3LCAyMjgsIDE1OCwgMjcsIDE2LCAyNDUsIDE0NiwgMjI4LCAxNTgsIAorICAgIDI3LCAxNiwgMjIwLCA0NiwgMjI4LCAxNTgsIDI3LCAxNiwgMjE3LCAxMTMsIDIyOCwgMTU4LCAyNywgMTYsIDIyMCwgMzgsIAorICAgIDIyOCwgMTU4LCAyNywgMTYsIDEyMiwgMjQwLCAyMDEsIDIxNiwgMzYsIDIyOCwgMTU4LCAyNywgMTYsIDM3LCAyMTksIDc5LCAKKyAgICAyNywgMTYsIDM3LCAyMTksIDE3MiwgMjE5LCA3OSwgMjcsIDE2LCAzNywgMjE2LCAxOTIsIDI3LCAxNiwgMzcsIDIxNiwgCisgICAgMTkxLCAyNywgMTYsIDM3LCAyMTYsIDE5MCwgMjcsIDE2LCAyNDQsIDcwLCAyMTYsIDE5MiwgMjcsIDE2LCAyNDQsIDcwLCAKKyAgICAyMTYsIDE5MSwgMjcsIDE2LCAyNDQsIDcwLCAyMTYsIDE5MCwgMjcsIDE2LCAzNywgMjUzLCAxMDUsIDI0NywgNzQsIDI3LCAKKyAgICAxNiwgMzcsIDI0NCwgNDEsIDI3LCAxNiwgMzcsIDI0NCwgNDAsIDI3LCAxNiwgMzcsIDI0NCwgMzksIDI3LCAxNiwgMzcsIAorICAgIDI0NCwgMzgsIDI3LCAxNiwgMzcsIDI0NCwgMzcsIDI3LCAxNiwgMjUxLCAyMzQsIDI1MSwgMjUwLCAyNywgMTYsIDI0NSwgCisgICAgMTAxLCAyNTEsIDI1MCwgMjcsIDE2LCAyNTEsIDIzNCwgMjE3LCA2NSwgMjcsIDE2LCAyNDUsIDEwMSwgMjE3LCA2NSwgMjcsIAorICAgIDE2LCAyNTEsIDIzNCwgMjIwLCA4LCAyNywgMTYsIDI0NSwgMTAxLCAyMjAsIDgsIDI3LCAxNiwgMjUxLCAyMzQsIDIyNSwgCisgICAgMjQ3LCAyNywgMTYsIDI0NSwgMTAxLCAyMjUsIDI0NywgMjcsIDE2LCAzNywgMjU0LCAxNzQsIDI3LCAxNiwgMzcsIDIxOSwgCisgICAgMTA0LCAyNywgMTYsIDM3LCAyMTcsIDE5MSwgMjcsIDE2LCAzNywgMjE5LCAxMDUsIDI3LCAxNiwgMzcsIDIzMSwgMjI1LCAKKyAgICAyNywgMTYsIDM3LCAyMzEsIDIyNCwgMjcsIDE2LCAzNywgMjU0LCAxNzMsIDI3LCAxNiwgMzcsIDIzMiwgMTY3LCAyNywgMTYsIAorICAgIDI1MywgMTY5LCAyMTUsIDEzNCwgMjcsIDE2LCAyNTMsIDE2OSwgMjQ2LCA2MCwgMjcsIDE2LCAzNywgMjQ3LCA4OSwgMjcsIAorICAgIDE2LCAzNywgMjIzLCAxMjgsIDI3LCAxNiwgMzcsIDI0NCwgMjcsIDI3LCAxNiwgMzcsIDIyMCwgNCwgMjcsIDE2LCAzNywgCisgICAgMjUxLCAyMTUsIDI3LCAxNiwgMzcsIDUxLCAyMTYsIDIzMiwgMjcsIDE2LCAzNywgMjE2LCAxNjksIDIxNiwgMjMyLCAyNywgCisgICAgMTYsIDIyMywgMTMyLCAyNywgMTYsIDIxOSwgMjAsIDI3LCAxNiwgMjEyLCAxNTIsIDI3LCAxNiwgMjI1LCAyMzksIDI3LCAKKyAgICAxNiwgMjMxLCA5MiwgMjcsIDE2LCAyNDMsIDI0MiwgMjcsIDE2LCAyNDksIDc4LCAyNywgMTYsIDI0OCwgMjksIDI3LCAxNiwgCisgICAgMjQyLCAxMjYsIDIyOCwgMTU5LCAyMjAsIDIzLCAyNywgMTYsIDI0MiwgMTI2LCAyMjgsIDE1OSwgMjI4LCAxODYsIDIyMCwgCisgICAgMjMsIDI3LCAxNiwgMjE2LCAyMTMsIDI3LCAxNiwgMjE2LCA1OSwgMjcsIDE2LCAyMzUsIDE5MSwgMjE2LCA1OSwgMjcsIDE2LCAKKyAgICAyMTYsIDYwLCAyMjAsIDIzLCAyNywgMTYsIDIxNiwgNjAsIDIxNSwgMTM0LCAyNywgMTYsIDIyNywgMTUsIDIxOSwgNDQsIAorICAgIDI3LCAxNiwgMjI3LCAxNSwgMjE5LCA0MSwgMjcsIDE2LCAyMjcsIDE1LCAyMTksIDQwLCAyNywgMTYsIDIyNywgMTUsIDIxOSwgCisgICAgMzksIDI3LCAxNiwgMjI3LCAxNSwgMjE5LCAzOCwgMjcsIDE2LCAyMjcsIDE1LCAyMTksIDM3LCAyNywgMTYsIDIyNywgMTUsIAorICAgIDIxOSwgMzYsIDI3LCAxNiwgMjI3LCAxNSwgMjE5LCAzNSwgMjcsIDE2LCAyMjcsIDE1LCAyMTksIDM0LCAyNywgMTYsIDIyNywgCisgICAgMTUsIDIxOSwgNDMsIDI3LCAxNiwgMjI3LCAxNSwgMjE5LCA0MiwgMjcsIDE2LCAyNDEsIDIyOSwgMjcsIDE2LCAyMjksIAorICAgIDE4NiwgMjcsIDE2LCAyNDUsIDEwMSwgNjUsIDIxOSwgNzMsIDI3LCAxNiwgMjQ4LCAyMiwgMjIwLCAyMywgMjcsIDE2LCAzNywgCisgICAgMTE5LCAyNTEsIDk1LCAyNywgMTYsIDM3LCAxMTQsIDI1MSwgOTUsIDI3LCAxNiwgMzcsIDI0MSwgMjM5LCAyNywgMTYsIDM3LCAKKyAgICAyMTksIDI1MSwgMjI1LCAxNzUsIDI3LCAxNiwgMjI2LCA5MSwgNzcsIDI3LCAxNiwgMjI2LCA5MSwgMTE0LCA3NywgMjcsIAorICAgIDE2LCAxNTEsIDIyNiwgOTEsIDc3LCAyNywgMTYsIDI0MiwgMTU4LCAyMTUsIDEzNCwgMjcsIDE2LCAyNDIsIDE1OCwgMjQ2LCAKKyAgICA2MCwgMjcsIDE2LCAyLCAyNDQsIDY5LCAyNywgMTYsIDI0OCwgMTI1LCAyNywgMTYsIDI0OCwgMTI2LCAyNTQsIDYzLCAyNywgCisgICAgMTYsIDIzMSwgMTk3LCAyNywgMTYsIDIzMiwgMTgyLCAyNywgMTYsIDI1MSwgNzEsIDI3LCAxNiwgMjIxLCA3NCwgMjEzLCAKKyAgICAyMzgsIDI3LCAxNiwgMjIxLCA3NCwgMjUxLCAxNDQsIDI3LCAxNiwgMjMwLCAyNTMsIDI3LCAxNiwgMjMwLCAyNTQsIDI1MSwgCisgICAgMTQ0LCAyNywgMTYsIDIyMSwgNjgsIDIxMywgMjM4LCAyNywgMTYsIDIyMSwgNjgsIDI1MSwgMTQ0LCAyNywgMTYsIDI0MywgCisgICAgMTkyLCAyMTMsIDIzOCwgMjcsIDE2LCAyNDMsIDE5MiwgMjUxLCAxNDQsIDI3LCAxNiwgMjMyLCAxODMsIDIyNiwgNTUsIAorICAgIDIyMywgMjEzLCAyNywgMTYsIDIzMiwgMTgzLCAyMzYsIDAsIDIyMywgMjEzLCAyNywgMTYsIDI1MSwgNzIsIDIyMywgMjEzLCAKKyAgICAyNywgMTYsIDIyMSwgNzQsIDIyMywgMjEzLCAyNywgMTYsIDIzMCwgMjU0LCAyMjMsIDIxMywgMjcsIDE2LCAyMjEsIDY4LCAKKyAgICAyMjMsIDIxMywgMjcsIDE2LCAyMTcsIDIwMiwgMjI2LCA1MywgMjQ5LCA0OCwgMjI1LCA1OCwgMjI2LCA1NCwgMjcsIDE2LCAKKyAgICAyMTcsIDIwMiwgMjI2LCA1MywgMjQ5LCA0OCwgMjI1LCA1OCwgMjM1LCAyNTUsIDI3LCAxNiwgMjE3LCAyMDIsIDIyNiwgNTMsIAorICAgIDI0OSwgNDgsIDIyNSwgNTgsIDIyNiwgNTUsIDI0NywgMTYzLCAyNywgMTYsIDIxNywgMjAyLCAyMzUsIDI1NCwgMjQ5LCA0OCwgCisgICAgMjI1LCA1OCwgMjI2LCA1NCwgMjcsIDE2LCAyMTcsIDIwMiwgMjM1LCAyNTQsIDI0OSwgNDgsIDIyNSwgNTgsIDIzNSwgMjU1LCAKKyAgICAyNywgMTYsIDIxNywgMjAyLCAyMzUsIDI1NCwgMjQ5LCA0OCwgMjI1LCA1OCwgMjM2LCAwLCAyNDcsIDE2MywgMjcsIDE2LCAKKyAgICAyMTcsIDIwMiwgMjM1LCAyNTQsIDI0OSwgNDgsIDIyNSwgNTgsIDIzNiwgMCwgMjQ3LCAxNjIsIDI3LCAxNiwgMjE3LCAyMDIsIAorICAgIDIzNSwgMjU0LCAyNDksIDQ4LCAyMjUsIDU4LCAyMzYsIDAsIDI0NywgMTYxLCAyNywgMTYsIDI0OSwgNzMsIDI3LCAxNiwgCisgICAgMjQyLCAxMDMsIDI1MCwgMjUzLCAyNDksIDIwNywgMjcsIDE2LCAyNDIsIDEwMywgMjQ0LCAyMzEsIDI0OSwgMjA3LCAyNywgCisgICAgMTYsIDQxLCAyNTMsIDc0LCAyNywgMTYsIDIxNCwgMTMyLCAyNywgMTYsIDIyNSwgMTQ4LCAyNywgMTYsIDI0OSwgMTk4LCAKKyAgICAyNywgMTYsIDIyMiwgMTIxLCAyNywgMTYsIDI0OSwgMjAyLCAyNywgMTYsIDIxNiwgMjIwLCAyNywgMTYsIDIyNSwgMTIyLCAKKyAgICAyNywgMTYsIDIyNSwgMTIzLCAyNDQsIDI5LCAyNywgMTYsIDIyMiwgMTIyLCAyNDQsIDI5LCAyNywgMTYsIDIxNiwgMjIxLCAKKyAgICAyMjMsIDIxMCwgMjcsIDE2LCAyMjYsIDM5LCAyMTksIDExLCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxNzQsIDI1LCAyMTQsIAorICAgIDExOCwgMTc0LCAyMTgsIDE2MywgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgMTUzLCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAKKyAgICAxNDYsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDEzOCwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgMTMyLCAyNSwgMjE0LCAKKyAgICAxMTgsIDE3NCwgMjE4LCAxMzEsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDEzMCwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgCisgICAgMTI5LCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxNzMsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDE3MiwgMjUsIDIxNCwgCisgICAgMTE4LCAxNzQsIDIxOCwgMTcxLCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxNzAsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIAorICAgIDE2OSwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgMTY4LCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxNjcsIDI1LCAyMTQsIAorICAgIDExOCwgMTc0LCAyMTgsIDE2NiwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgMTY1LCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAKKyAgICAxNjQsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDE2MiwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgMTYxLCAyNSwgMjE0LCAKKyAgICAxMTgsIDE3NCwgMjE4LCAxNjAsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDE1OSwgMjUsIDIxNCwgMTE4LCAxNzQsIDIxOCwgCisgICAgMTU4LCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxMzcsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIDEzNiwgMjUsIDIxNCwgCisgICAgMTE4LCAxNzQsIDIxOCwgMTM1LCAyNSwgMjE0LCAxMTgsIDE3NCwgMjE4LCAxMzQsIDI1LCAyMTQsIDExOCwgMTc0LCAyMTgsIAorICAgIDEzMywgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTc0LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNjMsIDI1LCAyMzUsIAorICAgIDIxMSwgMTc0LCAyMTgsIDE0NiwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTM4LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAKKyAgICAxMzEsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDEzMCwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTcyLCAyNSwgMjM1LCAKKyAgICAyMTEsIDE3NCwgMjE4LCAxNzEsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDE3MCwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgCisgICAgMTY5LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNjYsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDE2NSwgMjUsIDIzNSwgCisgICAgMjExLCAxNzQsIDIxOCwgMTY0LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNTksIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIAorICAgIDE1OCwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTU3LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNTYsIDI1LCAyMzUsIAorICAgIDIxMSwgMTc0LCAyMTgsIDE1NSwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTU0LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAKKyAgICAxNTIsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDE1MSwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTUwLCAyNSwgMjM1LCAKKyAgICAyMTEsIDE3NCwgMjE4LCAxNDksIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDE0OCwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgCisgICAgMTQ3LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNDUsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDE0NCwgMjUsIDIzNSwgCisgICAgMjExLCAxNzQsIDIxOCwgMTQzLCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxNDIsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIAorICAgIDE0MSwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTQwLCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAxMzksIDI1LCAyMzUsIAorICAgIDIxMSwgMTc0LCAyMTgsIDEzNywgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTM2LCAyNSwgMjM1LCAyMTEsIDE3NCwgMjE4LCAKKyAgICAxMzUsIDI1LCAyMzUsIDIxMSwgMTc0LCAyMTgsIDEzNCwgMjUsIDIzNSwgMjExLCAxNzQsIDIxOCwgMTMzLCAzNywgMjUsIAorICAgIDI3LCAyMTYsIDE2NiwgMzcsIDI1LCAyNywgMjE3LCAxNzYsIDM3LCAyNSwgMjcsIDIyNiwgNjMsIDI1LCAyNywgMjMzLCA1NSwgCisgICAgMjMwLCAyMTIsIDMxLCAyNDUsIDE3OSwgMjQ3LCAxNzYsIDMxLCAyNDEsIDIwNiwgMjQ1LCAxNzksIDI0NywgMTc2LCAzMSwgCisgICAgMjQwLCAyMDQsIDI0NSwgMTc5LCAyNDcsIDE3NiwgMzEsIDI0NSwgMTc4LCAyNDEsIDIwNywgMjQ3LCAxNzYsIDMxLCAyNDUsIAorICAgIDE3OCwgMjQwLCAyMDMsIDI0NywgMTc2LCAzMSwgMjQ1LCAxNzksIDE3MCwgMzEsIDI1MCwgMTA4LCAxNzAsIDMxLCAyNDMsIAorICAgIDIwMCwgMjQ5LCAyMjgsIDE3MCwgMzEsIDIzMCwgMjQ2LCAxNzAsIDMxLCAyNTIsIDUwLCAxNzAsIDMxLCAyMzQsIDE4NSwgCisgICAgMjIwLCA3LCAxNzAsIDMxLCAyNDksIDExOCwgMTcwLCAzMSwgMjUzLCAxNDgsIDE3MCwgMzEsIDIyNywgMjksIDE3MCwgMzEsIAorICAgIDI1MSwgODAsIDIyNiwgMjU0LCAxNzAsIDMxLCAyNDgsIDI0LCAxNjcsIDI0NywgMTMxLCAxNzAsIDMxLCAyNDcsIDEyOCwgCisgICAgMTcwLCAzMSwgMjEyLCAyMTMsIDE3MCwgMzEsIDIzNSwgMjQzLCAxNzAsIDMxLCAyMjYsIDcyLCAxNzAsIDMxLCAyMjQsIDIwLCAKKyAgICAxNzAsIDMxLCAyNDksIDEyOCwgMTcwLCAzMSwgMjQxLCA0NiwgMjUyLCAxMDEsIDE3MCwgMzEsIDIxNCwgNDMsIDE3MCwgMzEsIAorICAgIDI0NCwgOCwgMTcwLCAzMSwgMjU0LCAxNTEsIDE3MCwgMzEsIDIyMywgMjM5LCAxNzAsIDMxLCAyMjMsIDIxNywgMTcwLCAzMSwgCisgICAgMjQ1LCAxNzcsIDE3MCwgMzEsIDIzNSwgNTYsIDE3MCwgMzEsIDI0OSwgMTIzLCAxNzAsIDMxLCAyNDUsIDEwMCwgMTcwLCAKKyAgICAzMSwgMjQ2LCA3LCAxNzAsIDMxLCAyNTAsIDgxLCAxNzAsIDMxLCAyNDgsIDMzLCAxNzAsIDMxLCAyMiwgMjIzLCAyMTYsIAorICAgIDE3MCwgMzEsIDIyNiwgMjA1LCAxNzAsIDMxLCAyMzMsIDU4LCAxNzAsIDMxLCAyNDksIDE5MSwgMTcwLCAzMSwgMjM0LCA4NiwgCisgICAgMTcwLCAzMSwgMjQzLCA2MiwgMTcwLCAzMSwgMjE5LCA1MiwgMTcwLCAzMSwgMjI1LCAxNiwgMTcwLCAzMSwgMjQzLCAxOTksIAorICAgIDE3MCwgMzEsIDIyMywgMjE4LCAxNzAsIDMxLCAyMzMsIDk1LCAxNjcsIDIzMCwgMjI3LCAxNzAsIDMxLCAyMjMsIDIxNCwgCisgICAgMTcwLCAzMSwgMjQyLCAxNDQsIDIxMSwgMjExLCAyMzEsIDE0MSwgMTcwLCAzMSwgMjQ1LCAxMDIsIDE3MCwgMzEsIDIxOSwgCisgICAgNjQsIDE3MCwgMzEsIDI0MiwgMTA1LCAxNzAsIDMxLCAyNDUsIDk0LCAxNzAsIDMxLCAyMjYsIDEwOCwgMTcwLCAzMSwgMjIzLCAKKyAgICAxMjIsIDE3MCwgMzEsIDI0NCwgMjgsIDE3MCwgMzEsIDIxNCwgMjQwLCAxNjcsIDIxNCwgMjgsIDE3MCwgMzEsIDI0OSwgCisgICAgMTMyLCAxNzAsIDMxLCAyMzEsIDE1NCwgMTcwLCAzMSwgMjQ1LCAyNywgMTcwLCAzMSwgMjE1LCAxNDMsIDE3MCwgMzEsIAorICAgIDI0NywgMTY0LCAxNzAsIDMxLCAyNDksIDE5MywgMjMwLCAxODAsIDE3MCwgMzEsIDI0MiwgODcsIDE3MCwgMzEsIDI0MywgCisgICAgNjMsIDIzNSwgMjUxLCAxNzAsIDMxLCAyMzEsIDIwNCwgMTcwLCAzMSwgMjU0LCAxNzAsIDE3MCwgMzEsIDI0NSwgMTE1LCAKKyAgICAxNzAsIDMxLCAyNDYsIDYzLCAxNzAsIDMxLCAyMTQsIDI2LCAxNzAsIDMxLCAyMjAsIDc4LCAxNzAsIDMxLCAyMzUsIDIxOSwgCisgICAgMTcwLCAzMSwgMjQ3LCAyNDksIDE3MCwgMzEsIDI0OCwgMTA1LCAxNzAsIDMxLCAyNDcsIDE2MCwgMTcwLCAzMSwgMjQ0LCAKKyAgICAyNTIsIDE3MCwgMzEsIDIyMSwgMzYsIDE3MCwgMzEsIDIxOSwgNjgsIDE3MCwgMzEsIDI0MSwgMjQxLCAxNzAsIDMxLCAyNDksIAorICAgIDE1MSwgMTcwLCAzMSwgMjQ5LCAxODgsIDE3MCwgMzEsIDI0NCwgMTQ1LCAxNzAsIDMxLCAyNTQsIDExNywgMTcwLCAzMSwgCisgICAgMjQ5LCAxNTAsIDE3MCwgMzEsIDIyNywgNjMsIDIxNywgMTQ5LCAyMTQsIDIxOSwgMTcwLCAzMSwgMjQ3LCAxODQsIDE3MCwgCisgICAgMzEsIDIzMywgMTQ3LCAxNzAsIDMxLCAyNDMsIDIzOSwgMjQ5LCA4OCwgMjIzLCAxMDMsIDIxNSwgMTQ1LCAyMSwgMTE2LCAKKyAgICAyNDksIDg4LCAyMjMsIDEwMywgMjE1LCAxNDUsIDIxLCAxMDksIDI0OSwgODgsIDIyMywgMTAzLCAyMTUsIDE0NSwgMjEsIAorICAgIDE2NiwgMjQ5LCA4OCwgMjIzLCAxMDMsIDIxNSwgMTQ1LCAyMSwgMTYzLCAyNDksIDg4LCAyMjMsIDEwMywgMjE1LCAxNDUsIAorICAgIDIxLCAxODAsIDI0OSwgODgsIDIyMywgMTAzLCAyMTUsIDE0NSwgMjEsIDE4OSwgMjQ5LCA4OCwgMjIzLCAxMDMsIDIxNSwgCisgICAgMTQ1LCAyMSwgMTk4LCAyNDksIDg4LCAyMjMsIDEwMywgMjE1LCAxNDUsIDIxLCAxOTUsIDI0OSwgODgsIDIyMywgMTAzLCAKKyAgICAyMTUsIDE0NSwgMjEsIDIwMCwgMjQ5LCA4OCwgMjIzLCAxMDMsIDIxNywgMTk2LCAyMSwgMTE2LCAyNDksIDg4LCAyMjMsIAorICAgIDEwMywgMjE3LCAxOTYsIDIxLCAxMDksIDI0OSwgODgsIDIyMywgMTAzLCAyMTcsIDE5NiwgMjEsIDE2NiwgMjQ5LCA4OCwgCisgICAgMjIzLCAxMDMsIDIxNywgMTk2LCAyMSwgMTYzLCAyNDksIDg4LCAyMjMsIDEwMywgMjE3LCAxOTYsIDIxLCAxODAsIDI0OSwgCisgICAgODgsIDIyMywgMTAzLCAyMTcsIDE5NiwgMjEsIDE4OSwgMjQ5LCA4OCwgMjIzLCAxMDMsIDIxNywgMTk2LCAyMSwgMTk4LCAKKyAgICAyNDksIDg4LCAyMjMsIDEwMywgMjE3LCAxOTYsIDIxLCAxOTUsIDI0OSwgODgsIDIyMywgMTAzLCAyMTcsIDE5NiwgMjEsIAorICAgIDIwMCwgMTQsIDIyLCA2LCA2MSwgMTQsIDIyLCA2LCAyNTMsIDc0LCAxNCwgMjIsIDYsIDI1MCwgMjUyLCAxNCwgMjIsIDYsIAorICAgIDI0OSwgMywgMTQsIDIyLCA2LCA3NCwgMTQsIDIyLCA2LCAyNDQsIDIzMCwgMTQsIDIyLCA2LCAyNDMsIDE3NywgMTQsIDIyLCAKKyAgICA2LCAyNDIsIDQxLCAxNCwgMjIsIDYsIDcyLCAxNCwgMjIsIDYsIDIzNSwgMTQyLCAxNCwgMjIsIDYsIDIzNSwgMjcsIDE0LCAKKyAgICAyMiwgNiwgMTUwLCAxNCwgMjIsIDYsIDE4MywgMTQsIDIyLCA2LCAyMDQsIDE0LCAyMiwgNiwgNzUsIDE0LCAyMiwgNiwgCisgICAgMjI2LCAyMjksIDE0LCAyMiwgNiwgMjI0LCAyNDAsIDE0LCAyMiwgNiwgMTQ5LCAxNCwgMjIsIDYsIDE5NywgMTQsIDIyLCA2LCAKKyAgICAyMTgsIDk5LCAxNCwgMjIsIDYsIDY5LCAxNCwgMjIsIDYsIDIxNSwgNzksIDE0LCAyMiwgNiwgMjE0LCA4MiwgMTQsIDIyLCAKKyAgICA2LCAyMTMsIDE2NiwgMTQsIDIyLCA2LCAyMTMsIDEwNSwgMTQsIDIyLCA2LCAyMTIsIDE1MiwgMTQsIDIyLCAzLCA2MSwgMTQsIAorICAgIDIyLCAzLCAyNTMsIDc0LCAxNCwgMjIsIDMsIDI1MCwgMjUyLCAxNCwgMjIsIDMsIDI0OSwgMywgMTQsIDIyLCAzLCA3NCwgCisgICAgMTQsIDIyLCAzLCAyNDQsIDIzMCwgMTQsIDIyLCAzLCAyNDMsIDE3NywgMTQsIDIyLCAzLCAyNDIsIDQxLCAxNCwgMjIsIDMsIAorICAgIDcyLCAxNCwgMjIsIDMsIDIzNSwgMTQyLCAxNCwgMjIsIDMsIDIzNSwgMjcsIDE0LCAyMiwgMywgMTUwLCAxNCwgMjIsIDMsIAorICAgIDE4MywgMTQsIDIyLCAzLCAyMDQsIDE0LCAyMiwgMywgNzUsIDE0LCAyMiwgMywgMjI2LCAyMjksIDE0LCAyMiwgMywgMjI0LCAKKyAgICAyNDAsIDE0LCAyMiwgMywgMTQ5LCAxNCwgMjIsIDMsIDE5NywgMTQsIDIyLCAzLCAyMTgsIDk5LCAxNCwgMjIsIDMsIDY5LCAKKyAgICAxNCwgMjIsIDMsIDIxNSwgNzksIDE0LCAyMiwgMywgMjE0LCA4MiwgMTQsIDIyLCAzLCAyMTMsIDE2NiwgMTQsIDIyLCAzLCAKKyAgICAyMTMsIDEwNSwgMTQsIDIyLCAzLCAyMTIsIDE1MiwgMTQsIDMyLCA2LCA2MSwgMTQsIDMyLCA2LCAyNTMsIDc0LCAxNCwgMzIsIAorICAgIDYsIDI1MCwgMjUyLCAxNCwgMzIsIDYsIDI0OSwgMywgMTQsIDMyLCA2LCA3NCwgMTQsIDMyLCA2LCAyNDQsIDIzMCwgMTQsIAorICAgIDMyLCA2LCAyNDMsIDE3NywgMTQsIDMyLCA2LCAyNDIsIDQxLCAxNCwgMzIsIDYsIDcyLCAxNCwgMzIsIDYsIDIzNSwgMTQyLCAKKyAgICAxNCwgMzIsIDYsIDIzNSwgMjcsIDE0LCAzMiwgNiwgMTUwLCAxNCwgMzIsIDYsIDE4MywgMTQsIDMyLCA2LCAyMDQsIDE0LCAKKyAgICAzMiwgNiwgNzUsIDE0LCAzMiwgNiwgMjI2LCAyMjksIDE0LCAzMiwgNiwgMjI0LCAyNDAsIDE0LCAzMiwgNiwgMTQ5LCAxNCwgCisgICAgMzIsIDYsIDE5NywgMTQsIDMyLCA2LCAyMTgsIDk5LCAxNCwgMzIsIDYsIDY5LCAxNCwgMzIsIDYsIDIxNSwgNzksIDE0LCAKKyAgICAzMiwgNiwgMjE0LCA4MiwgMTQsIDMyLCA2LCAyMTMsIDE2NiwgMTQsIDMyLCA2LCAyMTMsIDEwNSwgMTQsIDMyLCA2LCAyMTIsIAorICAgIDE1MiwgMTQsIDMyLCAzLCA2MSwgMTQsIDMyLCAzLCAyNTMsIDc0LCAxNCwgMzIsIDMsIDI1MCwgMjUyLCAxNCwgMzIsIDMsIAorICAgIDI0OSwgMywgMTQsIDMyLCAzLCA3NCwgMTQsIDMyLCAzLCAyNDQsIDIzMCwgMTQsIDMyLCAzLCAyNDMsIDE3NywgMTQsIDMyLCAKKyAgICAzLCA3MiwgMTQsIDMyLCAzLCAyMzUsIDE0MiwgMTQsIDMyLCAzLCAyMzUsIDI3LCAxNCwgMzIsIDMsIDE1MCwgMTQsIDMyLCAKKyAgICAzLCAxODMsIDE0LCAzMiwgMywgMjA0LCAxNCwgMzIsIDMsIDc1LCAxNCwgMzIsIDMsIDIyNiwgMjI5LCAxNCwgMzIsIDMsIAorICAgIDIyNCwgMjQwLCAxNCwgMzIsIDMsIDE0OSwgMTQsIDMyLCAzLCAxOTcsIDE0LCAzMiwgMywgMjE4LCA5OSwgMTQsIDMyLCAzLCAKKyAgICA2OSwgMTQsIDMyLCAzLCAyMTUsIDc5LCAxNCwgMzIsIDMsIDIxNCwgODIsIDE0LCAzMiwgMywgMjEzLCAxNjYsIDE0LCAzMiwgCisgICAgMywgMjEzLCAxMDUsIDE0LCAzMiwgMywgMjEyLCAxNTIsIDE0LCAyMiwgMzIsIDYsIDYxLCAxNCwgMjIsIDMyLCA2LCAyNTMsIAorICAgIDc0LCAxNCwgMjIsIDMyLCA2LCAyNTAsIDI1MiwgMTQsIDIyLCAzMiwgNiwgMjQ5LCAzLCAxNCwgMjIsIDMyLCA2LCA3NCwgCisgICAgMTQsIDIyLCAzMiwgNiwgMjQ0LCAyMzAsIDE0LCAyMiwgMzIsIDYsIDI0MywgMTc3LCAxNCwgMjIsIDMyLCA2LCAyNDIsIDQxLCAKKyAgICAxNCwgMjIsIDMyLCA2LCA3MiwgMTQsIDIyLCAzMiwgNiwgMjM1LCAxNDIsIDE0LCAyMiwgMzIsIDYsIDIzNSwgMjcsIDE0LCAKKyAgICAyMiwgMzIsIDYsIDE1MCwgMTQsIDIyLCAzMiwgNiwgMTgzLCAxNCwgMjIsIDMyLCA2LCAyMDQsIDE0LCAyMiwgMzIsIDYsIAorICAgIDc1LCAxNCwgMjIsIDMyLCA2LCAyMjYsIDIyOSwgMTQsIDIyLCAzMiwgNiwgMjI0LCAyNDAsIDE0LCAyMiwgMzIsIDYsIDE0OSwgCisgICAgMTQsIDIyLCAzMiwgNiwgMTk3LCAxNCwgMjIsIDMyLCA2LCAyMTgsIDk5LCAxNCwgMjIsIDMyLCA2LCA2OSwgMTQsIDIyLCAKKyAgICAzMiwgNiwgMjE1LCA3OSwgMTQsIDIyLCAzMiwgNiwgMjE0LCA4MiwgMTQsIDIyLCAzMiwgNiwgMjEzLCAxNjYsIDE0LCAyMiwgCisgICAgMzIsIDYsIDIxMywgMTA1LCAxNCwgMjIsIDMyLCA2LCAyMTIsIDE1MiwgMTQsIDIyLCAzMiwgMywgNjEsIDE0LCAyMiwgMzIsIAorICAgIDMsIDI1MywgNzQsIDE0LCAyMiwgMzIsIDMsIDI1MCwgMjUyLCAxNCwgMjIsIDMyLCAzLCAyNDksIDMsIDE0LCAyMiwgMzIsIAorICAgIDMsIDc0LCAxNCwgMjIsIDMyLCAzLCAyNDQsIDIzMCwgMTQsIDIyLCAzMiwgMywgMjQzLCAxNzcsIDE0LCAyMiwgMzIsIDMsIAorICAgIDI0MiwgNDEsIDE0LCAyMiwgMzIsIDMsIDcyLCAxNCwgMjIsIDMyLCAzLCAyMzUsIDE0MiwgMTQsIDIyLCAzMiwgMywgMjM1LCAKKyAgICAyNywgMTQsIDIyLCAzMiwgMywgMTUwLCAxNCwgMjIsIDMyLCAzLCAxODMsIDE0LCAyMiwgMzIsIDMsIDIwNCwgMTQsIDIyLCAKKyAgICAzMiwgMywgNzUsIDE0LCAyMiwgMzIsIDMsIDIyNiwgMjI5LCAxNCwgMjIsIDMyLCAzLCAyMjQsIDI0MCwgMTQsIDIyLCAzMiwgCisgICAgMywgMTQ5LCAxNCwgMjIsIDMyLCAzLCAxOTcsIDE0LCAyMiwgMzIsIDMsIDIxOCwgOTksIDE0LCAyMiwgMzIsIDMsIDY5LCAKKyAgICAxNCwgMjIsIDMyLCAzLCAyMTUsIDc5LCAxNCwgMjIsIDMyLCAzLCAyMTQsIDgyLCAxNCwgMjIsIDMyLCAzLCAyMTMsIDE2NiwgCisgICAgMTQsIDIyLCAzMiwgMywgMjEzLCAxMDUsIDE0LCAyMiwgMzIsIDMsIDIxMiwgMTUyLCAxNCwgMTEzLCA2LCA2MSwgMTQsIAorICAgIDExMywgNiwgMjUwLCAyNTIsIDE0LCAxMTMsIDYsIDI0OSwgMywgMTQsIDExMywgNiwgMjQzLCAxNzcsIDE0LCAxMTMsIDYsIAorICAgIDIzNSwgMTQyLCAxNCwgMTEzLCA2LCAyMzUsIDI3LCAxNCwgMTEzLCA2LCAyMDQsIDE0LCAxMTMsIDYsIDc1LCAxNCwgMTEzLCAKKyAgICA2LCAyMjYsIDIyOSwgMTQsIDExMywgNiwgMjI0LCAyNDAsIDE0LCAxMTMsIDYsIDE5NywgMTQsIDExMywgNiwgMjE4LCA5OSwgCisgICAgMTQsIDExMywgNiwgNjksIDE0LCAxMTMsIDYsIDIxNSwgNzksIDE0LCAxMTMsIDYsIDIxNCwgODIsIDE0LCAxMTMsIDYsIAorICAgIDIxMywgMTY2LCAxNCwgMTEzLCA2LCAyMTMsIDEwNSwgMTQsIDExMywgNiwgMjEyLCAxNTIsIDE0LCAxMTMsIDMsIDYxLCAxNCwgCisgICAgMTEzLCAzLCAyNTMsIDc0LCAxNCwgMTEzLCAzLCAyNTAsIDI1MiwgMTQsIDExMywgMywgMjQ5LCAzLCAxNCwgMTEzLCAzLCAKKyAgICAyNDQsIDIzMCwgMTQsIDExMywgMywgMjQyLCA0MSwgMTQsIDExMywgMywgNzIsIDE0LCAxMTMsIDMsIDIzNSwgMTQyLCAxNCwgCisgICAgMTEzLCAzLCAyMzUsIDI3LCAxNCwgMTEzLCAzLCAxNTAsIDE0LCAxMTMsIDMsIDE4MywgMTQsIDExMywgMywgMjA0LCAxNCwgCisgICAgMTEzLCAzLCAyMjYsIDIyOSwgMTQsIDExMywgMywgMjI0LCAyNDAsIDE0LCAxMTMsIDMsIDE0OSwgMTQsIDExMywgMywgMTk3LCAKKyAgICAxNCwgMTEzLCAzLCAyMTgsIDk5LCAxNCwgMTEzLCAzLCA2OSwgMTQsIDExMywgMywgMjE1LCA3OSwgMTQsIDExMywgMywgCisgICAgMjE0LCA4MiwgMTQsIDExMywgMywgMjEzLCAxNjYsIDE0LCAxMTMsIDMsIDIxMywgMTA1LCAxNCwgMTEzLCAzLCAyMTIsIAorICAgIDE1MiwgMTQsIDIyLCAxMTMsIDYsIDYxLCAxNCwgMjIsIDExMywgNiwgMjUzLCA3NCwgMTQsIDIyLCAxMTMsIDYsIDI1MCwgCisgICAgMjUyLCAxNCwgMjIsIDExMywgNiwgMjQ5LCAzLCAxNCwgMjIsIDExMywgNiwgNzQsIDE0LCAyMiwgMTEzLCA2LCAyNDQsIAorICAgIDIzMCwgMTQsIDIyLCAxMTMsIDYsIDI0MywgMTc3LCAxNCwgMjIsIDExMywgNiwgMjQyLCA0MSwgMTQsIDIyLCAxMTMsIDYsIAorICAgIDcyLCAxNCwgMjIsIDExMywgNiwgMjM1LCAxNDIsIDE0LCAyMiwgMTEzLCA2LCAyMzUsIDI3LCAxNCwgMjIsIDExMywgNiwgCisgICAgMTUwLCAxNCwgMjIsIDExMywgNiwgMTgzLCAxNCwgMjIsIDExMywgNiwgMjA0LCAxNCwgMjIsIDExMywgNiwgNzUsIDE0LCAKKyAgICAyMiwgMTEzLCA2LCAyMjYsIDIyOSwgMTQsIDIyLCAxMTMsIDYsIDIyNCwgMjQwLCAxNCwgMjIsIDExMywgNiwgMTQ5LCAxNCwgCisgICAgMjIsIDExMywgNiwgMTk3LCAxNCwgMjIsIDExMywgNiwgMjE4LCA5OSwgMTQsIDIyLCAxMTMsIDYsIDY5LCAxNCwgMjIsIAorICAgIDExMywgNiwgMjE1LCA3OSwgMTQsIDIyLCAxMTMsIDYsIDIxNCwgODIsIDE0LCAyMiwgMTEzLCA2LCAyMTMsIDE2NiwgMTQsIAorICAgIDIyLCAxMTMsIDYsIDIxMywgMTA1LCAxNCwgMjIsIDExMywgNiwgMjEyLCAxNTIsIDE0LCAyMiwgMTEzLCAzLCA2MSwgMTQsIAorICAgIDIyLCAxMTMsIDMsIDI1MywgNzQsIDE0LCAyMiwgMTEzLCAzLCAyNTAsIDI1MiwgMTQsIDIyLCAxMTMsIDMsIDI0OSwgMywgCisgICAgMTQsIDIyLCAxMTMsIDMsIDc0LCAxNCwgMjIsIDExMywgMywgMjQ0LCAyMzAsIDE0LCAyMiwgMTEzLCAzLCAyNDMsIDE3NywgCisgICAgMTQsIDIyLCAxMTMsIDMsIDI0MiwgNDEsIDE0LCAyMiwgMTEzLCAzLCA3MiwgMTQsIDIyLCAxMTMsIDMsIDIzNSwgMTQyLCAKKyAgICAxNCwgMjIsIDExMywgMywgMjM1LCAyNywgMTQsIDIyLCAxMTMsIDMsIDE1MCwgMTQsIDIyLCAxMTMsIDMsIDE4MywgMTQsIAorICAgIDIyLCAxMTMsIDMsIDIwNCwgMTQsIDIyLCAxMTMsIDMsIDc1LCAxNCwgMjIsIDExMywgMywgMjI2LCAyMjksIDE0LCAyMiwgCisgICAgMTEzLCAzLCAyMjQsIDI0MCwgMTQsIDIyLCAxMTMsIDMsIDE0OSwgMTQsIDIyLCAxMTMsIDMsIDE5NywgMTQsIDIyLCAxMTMsIAorICAgIDMsIDIxOCwgOTksIDE0LCAyMiwgMTEzLCAzLCA2OSwgMTQsIDIyLCAxMTMsIDMsIDIxNSwgNzksIDE0LCAyMiwgMTEzLCAzLCAKKyAgICAyMTQsIDgyLCAxNCwgMjIsIDExMywgMywgMjEzLCAxNjYsIDE0LCAyMiwgMTEzLCAzLCAyMTMsIDEwNSwgMTQsIDIyLCAxMTMsIAorICAgIDMsIDIxMiwgMTUyLCAxNCwgMTI5LCA2LCA2MSwgMTQsIDEyOSwgNiwgMjUzLCA3NCwgMTQsIDEyOSwgNiwgMjQ5LCAzLCAxNCwgCisgICAgMTI5LCA2LCA3NCwgMTQsIDEyOSwgNiwgMjQ0LCAyMzAsIDE0LCAxMjksIDYsIDI0MywgMTc3LCAxNCwgMTI5LCA2LCAyMzUsIAorICAgIDE0MiwgMTQsIDEyOSwgNiwgMjM1LCAyNywgMTQsIDEyOSwgNiwgMTUwLCAxNCwgMTI5LCA2LCAxODMsIDE0LCAxMjksIDYsIAorICAgIDIwNCwgMTQsIDEyOSwgNiwgNzUsIDE0LCAxMjksIDYsIDIyNiwgMjI5LCAxNCwgMTI5LCA2LCAyMjQsIDI0MCwgMTQsIDEyOSwgCisgICAgNiwgMTk3LCAxNCwgMTI5LCA2LCAyMTgsIDk5LCAxNCwgMTI5LCA2LCA2OSwgMTQsIDEyOSwgNiwgMjE1LCA3OSwgMTQsIAorICAgIDEyOSwgNiwgMjE0LCA4MiwgMTQsIDEyOSwgNiwgMjEzLCAxNjYsIDE0LCAxMjksIDYsIDIxMywgMTA1LCAxNCwgMTI5LCAzLCAKKyAgICA2MSwgMTQsIDEyOSwgMywgMjUzLCA3NCwgMTQsIDEyOSwgMywgMjUwLCAyNTIsIDE0LCAxMjksIDMsIDI0OSwgMywgMTQsIAorICAgIDEyOSwgMywgNzQsIDE0LCAxMjksIDMsIDI0NCwgMjMwLCAxNCwgMTI5LCAzLCAyNDMsIDE3NywgMTQsIDEyOSwgMywgMjQyLCAKKyAgICA0MSwgMTQsIDEyOSwgMywgNzIsIDE0LCAxMjksIDMsIDIzNSwgMTQyLCAxNCwgMTI5LCAzLCAyMzUsIDI3LCAxNCwgMTI5LCAKKyAgICAzLCAxNTAsIDE0LCAxMjksIDMsIDE4MywgMTQsIDEyOSwgMywgMjA0LCAxNCwgMTI5LCAzLCA3NSwgMTQsIDEyOSwgMywgCisgICAgMjI2LCAyMjksIDE0LCAxMjksIDMsIDIyNCwgMjQwLCAxNCwgMTI5LCAzLCAxNDksIDE0LCAxMjksIDMsIDE5NywgMTQsIAorICAgIDEyOSwgMywgMjE4LCA5OSwgMTQsIDEyOSwgMywgNjksIDE0LCAxMjksIDMsIDIxNSwgNzksIDE0LCAxMjksIDMsIDIxNCwgCisgICAgODIsIDE0LCAxMjksIDMsIDIxMywgMTY2LCAxNCwgMTI5LCAzLCAyMTMsIDEwNSwgMTQsIDEyOSwgMywgMjEyLCAxNTIsIDE0LCAKKyAgICAxODcsIDYsIDYxLCAxNCwgMTg3LCA2LCAyNTMsIDc0LCAxNCwgMTg3LCA2LCAyNDksIDMsIDE0LCAxODcsIDYsIDc0LCAxNCwgCisgICAgMTg3LCA2LCAyNDQsIDIzMCwgMTQsIDE4NywgNiwgMjQzLCAxNzcsIDE0LCAxODcsIDYsIDcyLCAxNCwgMTg3LCA2LCAyMzUsIAorICAgIDE0MiwgMTQsIDE4NywgNiwgMjM1LCAyNywgMTQsIDE4NywgNiwgMTUwLCAxNCwgMTg3LCA2LCAxODMsIDE0LCAxODcsIDYsIAorICAgIDc1LCAxNCwgMTg3LCA2LCAxOTcsIDE0LCAxODcsIDYsIDIxOCwgOTksIDE0LCAxODcsIDYsIDY5LCAxNCwgMTg3LCA2LCAKKyAgICAyMTUsIDc5LCAxNCwgMTg3LCA2LCAyMTQsIDgyLCAxNCwgMTg3LCA2LCAyMTMsIDE2NiwgMTQsIDE4NywgNiwgMjEzLCAxMDUsIAorICAgIDE0LCAxODcsIDMsIDYxLCAxNCwgMTg3LCAzLCAyNTMsIDc0LCAxNCwgMTg3LCAzLCAyNTAsIDI1MiwgMTQsIDE4NywgMywgCisgICAgMjQ5LCAzLCAxNCwgMTg3LCAzLCA3NCwgMTQsIDE4NywgMywgMjQ0LCAyMzAsIDE0LCAxODcsIDMsIDI0MywgMTc3LCAxNCwgCisgICAgMTg3LCAzLCAyNDIsIDQxLCAxNCwgMTg3LCAzLCA3MiwgMTQsIDE4NywgMywgMjM1LCAxNDIsIDE0LCAxODcsIDMsIDIzNSwgCisgICAgMjcsIDE0LCAxODcsIDMsIDE1MCwgMTQsIDE4NywgMywgMTgzLCAxNCwgMTg3LCAzLCAyMDQsIDE0LCAxODcsIDMsIDc1LCAKKyAgICAxNCwgMTg3LCAzLCAyMjYsIDIyOSwgMTQsIDE4NywgMywgMjI0LCAyNDAsIDE0LCAxODcsIDMsIDE0OSwgMTQsIDE4NywgMywgCisgICAgMTk3LCAxNCwgMTg3LCAzLCAyMTgsIDk5LCAxNCwgMTg3LCAzLCA2OSwgMTQsIDE4NywgMywgMjE1LCA3OSwgMTQsIDE4NywgCisgICAgMywgMjE0LCA4MiwgMTQsIDE4NywgMywgMjEzLCAxNjYsIDE0LCAxODcsIDMsIDIxMywgMTA1LCAxNCwgMTg3LCAzLCAyMTIsIAorICAgIDE1MiwgMTQsIDIyLCAxMjksIDYsIDYxLCAxNCwgMjIsIDEyOSwgNiwgMjUzLCA3NCwgMTQsIDIyLCAxMjksIDYsIDI1MCwgCisgICAgMjUyLCAxNCwgMjIsIDEyOSwgNiwgMjQ5LCAzLCAxNCwgMjIsIDEyOSwgNiwgNzQsIDE0LCAyMiwgMTI5LCA2LCAyNDQsIAorICAgIDIzMCwgMTQsIDIyLCAxMjksIDYsIDI0MywgMTc3LCAxNCwgMjIsIDEyOSwgNiwgMjQyLCA0MSwgMTQsIDIyLCAxMjksIDYsIAorICAgIDcyLCAxNCwgMjIsIDEyOSwgNiwgMjM1LCAxNDIsIDE0LCAyMiwgMTI5LCA2LCAyMzUsIDI3LCAxNCwgMjIsIDEyOSwgNiwgCisgICAgMTUwLCAxNCwgMjIsIDEyOSwgNiwgMTgzLCAxNCwgMjIsIDEyOSwgNiwgMjA0LCAxNCwgMjIsIDEyOSwgNiwgNzUsIDE0LCAKKyAgICAyMiwgMTI5LCA2LCAyMjYsIDIyOSwgMTQsIDIyLCAxMjksIDYsIDIyNCwgMjQwLCAxNCwgMjIsIDEyOSwgNiwgMTQ5LCAxNCwgCisgICAgMjIsIDEyOSwgNiwgMTk3LCAxNCwgMjIsIDEyOSwgNiwgMjE4LCA5OSwgMTQsIDIyLCAxMjksIDYsIDY5LCAxNCwgMjIsIAorICAgIDEyOSwgNiwgMjE1LCA3OSwgMTQsIDIyLCAxMjksIDYsIDIxNCwgODIsIDE0LCAyMiwgMTI5LCA2LCAyMTMsIDE2NiwgMTQsIAorICAgIDIyLCAxMjksIDYsIDIxMywgMTA1LCAxNCwgMjIsIDEyOSwgNiwgMjEyLCAxNTIsIDE0LCAyMiwgMTI5LCAzLCA2MSwgMTQsIAorICAgIDIyLCAxMjksIDMsIDI1MywgNzQsIDE0LCAyMiwgMTI5LCAzLCAyNTAsIDI1MiwgMTQsIDIyLCAxMjksIDMsIDI0OSwgMywgCisgICAgMTQsIDIyLCAxMjksIDMsIDc0LCAxNCwgMjIsIDEyOSwgMywgMjQ0LCAyMzAsIDE0LCAyMiwgMTI5LCAzLCAyNDMsIDE3NywgCisgICAgMTQsIDIyLCAxMjksIDMsIDI0MiwgNDEsIDE0LCAyMiwgMTI5LCAzLCA3MiwgMTQsIDIyLCAxMjksIDMsIDIzNSwgMTQyLCAKKyAgICAxNCwgMjIsIDEyOSwgMywgMjM1LCAyNywgMTQsIDIyLCAxMjksIDMsIDE1MCwgMTQsIDIyLCAxMjksIDMsIDE4MywgMTQsIAorICAgIDIyLCAxMjksIDMsIDIwNCwgMTQsIDIyLCAxMjksIDMsIDc1LCAxNCwgMjIsIDEyOSwgMywgMjI2LCAyMjksIDE0LCAyMiwgCisgICAgMTI5LCAzLCAyMjQsIDI0MCwgMTQsIDIyLCAxMjksIDMsIDE0OSwgMTQsIDIyLCAxMjksIDMsIDE5NywgMTQsIDIyLCAxMjksIAorICAgIDMsIDIxOCwgOTksIDE0LCAyMiwgMTI5LCAzLCA2OSwgMTQsIDIyLCAxMjksIDMsIDIxNSwgNzksIDE0LCAyMiwgMTI5LCAzLCAKKyAgICAyMTQsIDgyLCAxNCwgMjIsIDEyOSwgMywgMjEzLCAxNjYsIDE0LCAyMiwgMTI5LCAzLCAyMTMsIDEwNSwgMTQsIDIyLCAxMjksIAorICAgIDMsIDIxMiwgMTUyLCAxNCwgMzUsIDYsIDYxLCAxNCwgMzUsIDYsIDI1MywgNzQsIDE0LCAzNSwgNiwgMjUwLCAyNTIsIDE0LCAKKyAgICAzNSwgNiwgMjQ5LCAzLCAxNCwgMzUsIDYsIDc0LCAxNCwgMzUsIDYsIDI0NCwgMjMwLCAxNCwgMzUsIDYsIDI0MywgMTc3LCAKKyAgICAxNCwgMzUsIDYsIDI0MiwgNDEsIDE0LCAzNSwgNiwgNzIsIDE0LCAzNSwgNiwgMjM1LCAxNDIsIDE0LCAzNSwgNiwgMjM1LCAKKyAgICAyNywgMTQsIDM1LCA2LCAxNTAsIDE0LCAzNSwgNiwgMTgzLCAxNCwgMzUsIDYsIDIwNCwgMTQsIDM1LCA2LCA3NSwgMTQsIAorICAgIDM1LCA2LCAyMjYsIDIyOSwgMTQsIDM1LCA2LCAyMjQsIDI0MCwgMTQsIDM1LCA2LCAxNDksIDE0LCAzNSwgNiwgMTk3LCAxNCwgCisgICAgMzUsIDYsIDIxOCwgOTksIDE0LCAzNSwgNiwgNjksIDE0LCAzNSwgNiwgMjE1LCA3OSwgMTQsIDM1LCA2LCAyMTQsIDgyLCAKKyAgICAxNCwgMzUsIDYsIDIxMywgMTY2LCAxNCwgMzUsIDYsIDIxMywgMTA1LCAxNCwgMzUsIDYsIDIxMiwgMTUyLCAxNCwgMzUsIDMsIAorICAgIDYxLCAxNCwgMzUsIDMsIDI1MywgNzQsIDE0LCAzNSwgMywgMjUwLCAyNTIsIDE0LCAzNSwgMywgMjQ5LCAzLCAxNCwgMzUsIAorICAgIDMsIDc0LCAxNCwgMzUsIDMsIDI0NCwgMjMwLCAxNCwgMzUsIDMsIDI0MywgMTc3LCAxNCwgMzUsIDMsIDI0MiwgNDEsIDE0LCAKKyAgICAzNSwgMywgNzIsIDE0LCAzNSwgMywgMjM1LCAxNDIsIDE0LCAzNSwgMywgMjM1LCAyNywgMTQsIDM1LCAzLCAxNTAsIDE0LCAKKyAgICAzNSwgMywgMTgzLCAxNCwgMzUsIDMsIDIwNCwgMTQsIDM1LCAzLCA3NSwgMTQsIDM1LCAzLCAyMjYsIDIyOSwgMTQsIDM1LCAKKyAgICAzLCAyMjQsIDI0MCwgMTQsIDM1LCAzLCAxNDksIDE0LCAzNSwgMywgMTk3LCAxNCwgMzUsIDMsIDIxOCwgOTksIDE0LCAzNSwgCisgICAgMywgNjksIDE0LCAzNSwgMywgMjE1LCA3OSwgMTQsIDM1LCAzLCAyMTQsIDgyLCAxNCwgMzUsIDMsIDIxMywgMTY2LCAxNCwgCisgICAgMzUsIDMsIDIxMywgMTA1LCAxNCwgMzUsIDMsIDIxMiwgMTUyLCAxNCwgMzUsIDIyLCA2LCA2MSwgMTQsIDM1LCAyMiwgNiwgCisgICAgMjUzLCA3NCwgMTQsIDM1LCAyMiwgNiwgMjUwLCAyNTIsIDE0LCAzNSwgMjIsIDYsIDI0OSwgMywgMTQsIDM1LCAyMiwgNiwgCisgICAgNzQsIDE0LCAzNSwgMjIsIDYsIDI0NCwgMjMwLCAxNCwgMzUsIDIyLCA2LCAyNDMsIDE3NywgMTQsIDM1LCAyMiwgNiwgMjQyLCAKKyAgICA0MSwgMTQsIDM1LCAyMiwgNiwgNzIsIDE0LCAzNSwgMjIsIDYsIDIzNSwgMTQyLCAxNCwgMzUsIDIyLCA2LCAyMzUsIDI3LCAKKyAgICAxNCwgMzUsIDIyLCA2LCAxNTAsIDE0LCAzNSwgMjIsIDYsIDE4MywgMTQsIDM1LCAyMiwgNiwgMjA0LCAxNCwgMzUsIDIyLCAKKyAgICA2LCA3NSwgMTQsIDM1LCAyMiwgNiwgMjI2LCAyMjksIDE0LCAzNSwgMjIsIDYsIDIyNCwgMjQwLCAxNCwgMzUsIDIyLCA2LCAKKyAgICAxNDksIDE0LCAzNSwgMjIsIDYsIDE5NywgMTQsIDM1LCAyMiwgNiwgMjE4LCA5OSwgMTQsIDM1LCAyMiwgNiwgNjksIDE0LCAKKyAgICAzNSwgMjIsIDYsIDIxNSwgNzksIDE0LCAzNSwgMjIsIDYsIDIxNCwgODIsIDE0LCAzNSwgMjIsIDYsIDIxMywgMTY2LCAxNCwgCisgICAgMzUsIDIyLCA2LCAyMTMsIDEwNSwgMTQsIDM1LCAyMiwgNiwgMjEyLCAxNTIsIDE0LCAzNSwgMjIsIDMsIDYxLCAxNCwgMzUsIAorICAgIDIyLCAzLCAyNTMsIDc0LCAxNCwgMzUsIDIyLCAzLCAyNTAsIDI1MiwgMTQsIDM1LCAyMiwgMywgMjQ5LCAzLCAxNCwgMzUsIAorICAgIDIyLCAzLCA3NCwgMTQsIDM1LCAyMiwgMywgMjQ0LCAyMzAsIDE0LCAzNSwgMjIsIDMsIDI0MywgMTc3LCAxNCwgMzUsIDIyLCAKKyAgICAzLCAyNDIsIDQxLCAxNCwgMzUsIDIyLCAzLCA3MiwgMTQsIDM1LCAyMiwgMywgMjM1LCAxNDIsIDE0LCAzNSwgMjIsIDMsIAorICAgIDIzNSwgMjcsIDE0LCAzNSwgMjIsIDMsIDE1MCwgMTQsIDM1LCAyMiwgMywgMTgzLCAxNCwgMzUsIDIyLCAzLCAyMDQsIDE0LCAKKyAgICAzNSwgMjIsIDMsIDc1LCAxNCwgMzUsIDIyLCAzLCAyMjYsIDIyOSwgMTQsIDM1LCAyMiwgMywgMjI0LCAyNDAsIDE0LCAzNSwgCisgICAgMjIsIDMsIDE0OSwgMTQsIDM1LCAyMiwgMywgMTk3LCAxNCwgMzUsIDIyLCAzLCAyMTgsIDk5LCAxNCwgMzUsIDIyLCAzLCAKKyAgICA2OSwgMTQsIDM1LCAyMiwgMywgMjE1LCA3OSwgMTQsIDM1LCAyMiwgMywgMjE0LCA4MiwgMTQsIDM1LCAyMiwgMywgMjEzLCAKKyAgICAxNjYsIDE0LCAzNSwgMjIsIDMsIDIxMywgMTA1LCAxNCwgMzUsIDIyLCAzLCAyMTIsIDE1MiwgMTQsIDM1LCAzMiwgNiwgNjEsIAorICAgIDE0LCAzNSwgMzIsIDYsIDI1MywgNzQsIDE0LCAzNSwgMzIsIDYsIDI1MCwgMjUyLCAxNCwgMzUsIDMyLCA2LCAyNDksIDMsIAorICAgIDE0LCAzNSwgMzIsIDYsIDc0LCAxNCwgMzUsIDMyLCA2LCAyNDQsIDIzMCwgMTQsIDM1LCAzMiwgNiwgMjQzLCAxNzcsIDE0LCAKKyAgICAzNSwgMzIsIDYsIDI0MiwgNDEsIDE0LCAzNSwgMzIsIDYsIDcyLCAxNCwgMzUsIDMyLCA2LCAyMzUsIDE0MiwgMTQsIDM1LCAKKyAgICAzMiwgNiwgMjM1LCAyNywgMTQsIDM1LCAzMiwgNiwgMTUwLCAxNCwgMzUsIDMyLCA2LCAxODMsIDE0LCAzNSwgMzIsIDYsIAorICAgIDIwNCwgMTQsIDM1LCAzMiwgNiwgNzUsIDE0LCAzNSwgMzIsIDYsIDIyNiwgMjI5LCAxNCwgMzUsIDMyLCA2LCAyMjQsIDI0MCwgCisgICAgMTQsIDM1LCAzMiwgNiwgMTQ5LCAxNCwgMzUsIDMyLCA2LCAxOTcsIDE0LCAzNSwgMzIsIDYsIDIxOCwgOTksIDE0LCAzNSwgCisgICAgMzIsIDYsIDY5LCAxNCwgMzUsIDMyLCA2LCAyMTUsIDc5LCAxNCwgMzUsIDMyLCA2LCAyMTQsIDgyLCAxNCwgMzUsIDMyLCA2LCAKKyAgICAyMTMsIDE2NiwgMTQsIDM1LCAzMiwgNiwgMjEzLCAxMDUsIDE0LCAzNSwgMzIsIDYsIDIxMiwgMTUyLCAxNCwgMzUsIDMyLCAKKyAgICAzLCA2MSwgMTQsIDM1LCAzMiwgMywgMjUzLCA3NCwgMTQsIDM1LCAzMiwgMywgMjUwLCAyNTIsIDE0LCAzNSwgMzIsIDMsIAorICAgIDI0OSwgMywgMTQsIDM1LCAzMiwgMywgNzQsIDE0LCAzNSwgMzIsIDMsIDI0NCwgMjMwLCAxNCwgMzUsIDMyLCAzLCAyNDMsIAorICAgIDE3NywgMTQsIDM1LCAzMiwgMywgMjQyLCA0MSwgMTQsIDM1LCAzMiwgMywgNzIsIDE0LCAzNSwgMzIsIDMsIDIzNSwgMTQyLCAKKyAgICAxNCwgMzUsIDMyLCAzLCAyMzUsIDI3LCAxNCwgMzUsIDMyLCAzLCAxNTAsIDE0LCAzNSwgMzIsIDMsIDE4MywgMTQsIDM1LCAKKyAgICAzMiwgMywgMjA0LCAxNCwgMzUsIDMyLCAzLCA3NSwgMTQsIDM1LCAzMiwgMywgMjI2LCAyMjksIDE0LCAzNSwgMzIsIDMsIAorICAgIDIyNCwgMjQwLCAxNCwgMzUsIDMyLCAzLCAxNDksIDE0LCAzNSwgMzIsIDMsIDE5NywgMTQsIDM1LCAzMiwgMywgMjE4LCA5OSwgCisgICAgMTQsIDM1LCAzMiwgMywgNjksIDE0LCAzNSwgMzIsIDMsIDIxNSwgNzksIDE0LCAzNSwgMzIsIDMsIDIxNCwgODIsIDE0LCAKKyAgICAzNSwgMzIsIDMsIDIxMywgMTY2LCAxNCwgMzUsIDMyLCAzLCAyMTMsIDEwNSwgMTQsIDM1LCAzMiwgMywgMjEyLCAxNTIsIAorICAgIDE0LCAzNSwgMjIsIDMyLCA2LCA2MSwgMTQsIDM1LCAyMiwgMzIsIDYsIDI1MywgNzQsIDE0LCAzNSwgMjIsIDMyLCA2LCAKKyAgICAyNTAsIDI1MiwgMTQsIDM1LCAyMiwgMzIsIDYsIDI0OSwgMywgMTQsIDM1LCAyMiwgMzIsIDYsIDc0LCAxNCwgMzUsIDIyLCAKKyAgICAzMiwgNiwgMjQ0LCAyMzAsIDE0LCAzNSwgMjIsIDMyLCA2LCAyNDMsIDE3NywgMTQsIDM1LCAyMiwgMzIsIDYsIDI0MiwgNDEsIAorICAgIDE0LCAzNSwgMjIsIDMyLCA2LCA3MiwgMTQsIDM1LCAyMiwgMzIsIDYsIDIzNSwgMTQyLCAxNCwgMzUsIDIyLCAzMiwgNiwgCisgICAgMjM1LCAyNywgMTQsIDM1LCAyMiwgMzIsIDYsIDE1MCwgMTQsIDM1LCAyMiwgMzIsIDYsIDE4MywgMTQsIDM1LCAyMiwgMzIsIAorICAgIDYsIDIwNCwgMTQsIDM1LCAyMiwgMzIsIDYsIDc1LCAxNCwgMzUsIDIyLCAzMiwgNiwgMjI2LCAyMjksIDE0LCAzNSwgMjIsIAorICAgIDMyLCA2LCAyMjQsIDI0MCwgMTQsIDM1LCAyMiwgMzIsIDYsIDE0OSwgMTQsIDM1LCAyMiwgMzIsIDYsIDE5NywgMTQsIDM1LCAKKyAgICAyMiwgMzIsIDYsIDIxOCwgOTksIDE0LCAzNSwgMjIsIDMyLCA2LCA2OSwgMTQsIDM1LCAyMiwgMzIsIDYsIDIxNSwgNzksIAorICAgIDE0LCAzNSwgMjIsIDMyLCA2LCAyMTQsIDgyLCAxNCwgMzUsIDIyLCAzMiwgNiwgMjEzLCAxNjYsIDE0LCAzNSwgMjIsIDMyLCAKKyAgICA2LCAyMTMsIDEwNSwgMTQsIDM1LCAyMiwgMzIsIDYsIDIxMiwgMTUyLCAxNCwgMzUsIDIyLCAzMiwgMywgNjEsIDE0LCAzNSwgCisgICAgMjIsIDMyLCAzLCAyNTMsIDc0LCAxNCwgMzUsIDIyLCAzMiwgMywgMjUwLCAyNTIsIDE0LCAzNSwgMjIsIDMyLCAzLCAyNDksIAorICAgIDMsIDE0LCAzNSwgMjIsIDMyLCAzLCA3NCwgMTQsIDM1LCAyMiwgMzIsIDMsIDI0NCwgMjMwLCAxNCwgMzUsIDIyLCAzMiwgMywgCisgICAgMjQzLCAxNzcsIDE0LCAzNSwgMjIsIDMyLCAzLCAyNDIsIDQxLCAxNCwgMzUsIDIyLCAzMiwgMywgNzIsIDE0LCAzNSwgMjIsIAorICAgIDMyLCAzLCAyMzUsIDE0MiwgMTQsIDM1LCAyMiwgMzIsIDMsIDIzNSwgMjcsIDE0LCAzNSwgMjIsIDMyLCAzLCAxNTAsIDE0LCAKKyAgICAzNSwgMjIsIDMyLCAzLCAxODMsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMDQsIDE0LCAzNSwgMjIsIDMyLCAzLCA3NSwgMTQsIAorICAgIDM1LCAyMiwgMzIsIDMsIDIyNiwgMjI5LCAxNCwgMzUsIDIyLCAzMiwgMywgMjI0LCAyNDAsIDE0LCAzNSwgMjIsIDMyLCAzLCAKKyAgICAxNDksIDE0LCAzNSwgMjIsIDMyLCAzLCAxOTcsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMTgsIDk5LCAxNCwgMzUsIDIyLCAzMiwgCisgICAgMywgNjksIDE0LCAzNSwgMjIsIDMyLCAzLCAyMTUsIDc5LCAxNCwgMzUsIDIyLCAzMiwgMywgMjE0LCA4MiwgMTQsIDM1LCAKKyAgICAyMiwgMzIsIDMsIDIxMywgMTY2LCAxNCwgMzUsIDIyLCAzMiwgMywgMjEzLCAxMDUsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMTIsIAorICAgIDE1MiwgMTQsIDIzMCwgMjA4LCA2LCA2MSwgMTQsIDIzMCwgMjA4LCA2LCAyNTMsIDc0LCAxNCwgMjMwLCAyMDgsIDYsIDI1MCwgCisgICAgMjUyLCAxNCwgMjMwLCAyMDgsIDYsIDI0OSwgMywgMTQsIDIzMCwgMjA4LCA2LCA3NCwgMTQsIDIzMCwgMjA4LCA2LCAyNDQsIAorICAgIDIzMCwgMTQsIDIzMCwgMjA4LCA2LCAyNDMsIDE3NywgMTQsIDIzMCwgMjA4LCA2LCAyNDIsIDQxLCAxNCwgMjMwLCAyMDgsIAorICAgIDYsIDcyLCAxNCwgMjMwLCAyMDgsIDYsIDIzNSwgMTQyLCAxNCwgMjMwLCAyMDgsIDYsIDIzNSwgMjcsIDE0LCAyMzAsIDIwOCwgCisgICAgNiwgMTUwLCAxNCwgMjMwLCAyMDgsIDYsIDE4MywgMTQsIDIzMCwgMjA4LCA2LCAyMDQsIDE0LCAyMzAsIDIwOCwgNiwgNzUsIAorICAgIDE0LCAyMzAsIDIwOCwgNiwgMjI2LCAyMjksIDE0LCAyMzAsIDIwOCwgNiwgMjI0LCAyNDAsIDE0LCAyMzAsIDIwOCwgNiwgCisgICAgMTQ5LCAxNCwgMjMwLCAyMDgsIDYsIDE5NywgMTQsIDIzMCwgMjA4LCA2LCAyMTgsIDk5LCAxNCwgMjMwLCAyMDgsIDYsIDY5LCAKKyAgICAxNCwgMjMwLCAyMDgsIDYsIDIxNSwgNzksIDE0LCAyMzAsIDIwOCwgNiwgMjE0LCA4MiwgMTQsIDIzMCwgMjA4LCA2LCAyMTMsIAorICAgIDE2NiwgMTQsIDIzMCwgMjA4LCA2LCAyMTMsIDEwNSwgMTQsIDIzMCwgMjA4LCA2LCAyMTIsIDE1MiwgMTQsIDIzMCwgMjA4LCAKKyAgICAzLCA2MSwgMTQsIDIzMCwgMjA4LCAzLCAyNTMsIDc0LCAxNCwgMjMwLCAyMDgsIDMsIDI1MCwgMjUyLCAxNCwgMjMwLCAyMDgsIAorICAgIDMsIDI0OSwgMywgMTQsIDIzMCwgMjA4LCAzLCA3NCwgMTQsIDIzMCwgMjA4LCAzLCAyNDQsIDIzMCwgMTQsIDIzMCwgMjA4LCAKKyAgICAzLCAyNDMsIDE3NywgMTQsIDIzMCwgMjA4LCAzLCAyNDIsIDQxLCAxNCwgMjMwLCAyMDgsIDMsIDcyLCAxNCwgMjMwLCAyMDgsIAorICAgIDMsIDIzNSwgMTQyLCAxNCwgMjMwLCAyMDgsIDMsIDIzNSwgMjcsIDE0LCAyMzAsIDIwOCwgMywgMTUwLCAxNCwgMjMwLCAKKyAgICAyMDgsIDMsIDE4MywgMTQsIDIzMCwgMjA4LCAzLCAyMDQsIDE0LCAyMzAsIDIwOCwgMywgNzUsIDE0LCAyMzAsIDIwOCwgMywgCisgICAgMjI2LCAyMjksIDE0LCAyMzAsIDIwOCwgMywgMjI0LCAyNDAsIDE0LCAyMzAsIDIwOCwgMywgMTQ5LCAxNCwgMjMwLCAyMDgsIAorICAgIDMsIDE5NywgMTQsIDIzMCwgMjA4LCAzLCAyMTgsIDk5LCAxNCwgMjMwLCAyMDgsIDMsIDY5LCAxNCwgMjMwLCAyMDgsIDMsIAorICAgIDIxNSwgNzksIDE0LCAyMzAsIDIwOCwgMywgMjE0LCA4MiwgMTQsIDIzMCwgMjA4LCAzLCAyMTMsIDE2NiwgMTQsIDIzMCwgCisgICAgMjA4LCAzLCAyMTMsIDEwNSwgMTQsIDIzMCwgMjA4LCAzLCAyMTIsIDE1MiwgMTQsIDMyLCAzLCAyNDcsIDczLCA3MiwgMTQsIAorICAgIDMyLCAzLCAyNDcsIDczLCAyMzUsIDE0MiwgMTQsIDIyLCA2LCAyNTQsIDUyLCAxNCwgMjIsIDYsIDI1MSwgMjAzLCAxNCwgCisgICAgMjIsIDYsIDI0MywgODMsIDE0LCAyMiwgNiwgMjQ4LCA1LCAxNCwgMjIsIDYsIDI0NSwgNjMsIDE0LCAyMiwgNiwgMjEyLCAKKyAgICA3OCwgMTQsIDIyLCA2LCAyNDUsIDI4LCAxNCwgMjIsIDYsIDIxNywgMTMyLCAxNCwgMjIsIDYsIDIzNSwgMTgzLCAxNCwgMjIsIAorICAgIDYsIDIzNCwgMjI3LCAxNCwgMjIsIDYsIDIzMywgMTIyLCAxNCwgMjIsIDYsIDIzMCwgMTcyLCAxNCwgMjIsIDYsIDIyOCwgCisgICAgOTIsIDE0LCAyMiwgNiwgMjEzLCAxNDUsIDE0LCAyMiwgNiwgMjI3LCA2NSwgMTQsIDIyLCA2LCAyMjUsIDI0MCwgMTQsIDIyLCAKKyAgICA2LCAyMjMsIDE5MCwgMTQsIDIyLCA2LCAyMTcsIDEzMywgODcsIDE0LCAyMiwgNiwgMjIwLCAxMDMsIDE0LCAyMiwgNiwgCisgICAgMjE3LCAyNDgsIDE0LCAyMiwgNiwgMjE1LCAxMjgsIDE0LCAyMiwgNiwgMjI2LCA5LCAxNCwgMjIsIDYsIDI1MCwgNDcsIDE0LCAKKyAgICAyMiwgNiwgMjI1LCA0NiwgMTQsIDIyLCA2LCAyMjcsIDY3LCAxNCwgMjIsIDIzMCwgMzksIDE0LCAyMiwgMywgMjU0LCA1MiwgCisgICAgMTQsIDIyLCAzLCAyNTEsIDIwMywgMTQsIDIyLCAzLCAyNDMsIDgzLCAxNCwgMjIsIDMsIDI0OCwgNSwgMTQsIDIyLCAzLCAKKyAgICAyNDUsIDYzLCAxNCwgMjIsIDMsIDIxMiwgNzgsIDE0LCAyMiwgMywgMjQ1LCAyOCwgMTQsIDIyLCAzLCAyMTcsIDEzMiwgMTQsIAorICAgIDIyLCAzLCAyMzUsIDE4MywgMTQsIDIyLCAzLCAyMzQsIDIyNywgMTQsIDIyLCAzLCAyMzMsIDEyMiwgMTQsIDIyLCAzLCAKKyAgICAyMzAsIDE3MiwgMTQsIDIyLCAzLCAyMjgsIDkyLCAxNCwgMjIsIDMsIDIxMywgMTQ1LCAxNCwgMjIsIDMsIDIyNywgNjUsIAorICAgIDE0LCAyMiwgMywgMjI1LCAyNDAsIDE0LCAyMiwgMywgMjIzLCAxOTAsIDE0LCAyMiwgMywgNDAsIDIyMCwgMTAzLCAxNCwgCisgICAgMjIsIDMsIDIyMCwgMTAzLCAxNCwgMjIsIDMsIDIxNywgMjQ4LCAxNCwgMjIsIDMsIDIxNSwgMTI4LCAxNCwgMjIsIDMsIAorICAgIDIyNiwgOSwgMTQsIDIyLCAzLCAyNTAsIDQ3LCAxNCwgMjIsIDMsIDIyNSwgNDYsIDE0LCAyMiwgMywgMjI3LCA2NywgMTQsIAorICAgIDIyLCAyMjYsIDEyNSwgMjQ3LCAxODUsIDE0LCAyMiwgMjQ1LCA2NCwgODcsIDE0LCAyMiwgMjE3LCAxMzMsIDg3LCAxNCwgCisgICAgMjIsIDIzNCwgMjI4LCA4NywgMTQsIDIyLCAyMjYsIDEwLCA4NywgMTQsIDIyLCAyMjMsIDE5MSwgODcsIDE0LCAyMiwgMjI1LCAKKyAgICAyNDEsIDg3LCAxNCwgMzIsIDYsIDI1NCwgNTIsIDE0LCAzMiwgNiwgMjUxLCAyMDMsIDE0LCAzMiwgNiwgMjQzLCA4MywgMTQsIAorICAgIDMyLCA2LCAyNDgsIDUsIDE0LCAzMiwgNiwgMjQ1LCA2MywgMTQsIDMyLCA2LCAyMTIsIDc4LCAxNCwgMzIsIDYsIDI0NSwgCisgICAgMjgsIDE0LCAzMiwgNiwgMjE3LCAxMzIsIDE0LCAzMiwgNiwgMjM1LCAxODMsIDE0LCAzMiwgNiwgMjM0LCAyMjcsIDE0LCAKKyAgICAzMiwgNiwgMjMzLCAxMjIsIDE0LCAzMiwgNiwgMjMwLCAxNzIsIDE0LCAzMiwgNiwgMjI4LCA5MiwgMTQsIDMyLCA2LCAyMTMsIAorICAgIDE0NSwgMTQsIDMyLCA2LCAyMjcsIDY1LCAxNCwgMzIsIDYsIDIyNSwgMjQwLCAxNCwgMzIsIDYsIDIyMywgMTkwLCAxNCwgCisgICAgMzIsIDYsIDIxNywgMTMzLCA4NywgMTQsIDMyLCA2LCAyMjAsIDEwMywgMTQsIDMyLCA2LCAyMTcsIDI0OCwgMTQsIDMyLCA2LCAKKyAgICAyMTUsIDEyOCwgMTQsIDMyLCA2LCAyMjYsIDksIDE0LCAzMiwgNiwgMjUwLCA0NywgMTQsIDMyLCA2LCAyMjUsIDQ2LCAxNCwgCisgICAgMzIsIDYsIDIyNywgNjcsIDE0LCAzMiwgMjMwLCAzOSwgMTQsIDMyLCAzLCAyNTQsIDUyLCAxNCwgMzIsIDMsIDI1MSwgMjAzLCAKKyAgICAxNCwgMzIsIDMsIDI0MywgODMsIDE0LCAzMiwgMywgMjQ4LCA1LCAxNCwgMzIsIDMsIDI0NSwgNjMsIDE0LCAzMiwgMywgCisgICAgMjEyLCA3OCwgMTQsIDMyLCAzLCAyNDUsIDI4LCAxNCwgMzIsIDMsIDIxNywgMTMyLCAxNCwgMzIsIDMsIDIzNSwgMTgzLCAKKyAgICAxNCwgMzIsIDMsIDIzNCwgMjI3LCAxNCwgMzIsIDMsIDIzMywgMTIyLCAxNCwgMzIsIDMsIDIzMCwgMTcyLCAxNCwgMzIsIDMsIAorICAgIDIyOCwgOTIsIDE0LCAzMiwgMywgMjEzLCAxNDUsIDE0LCAzMiwgMywgMjI3LCA2NSwgMTQsIDMyLCAzLCAyMjUsIDI0MCwgCisgICAgMTQsIDMyLCAzLCAyMjMsIDE5MCwgMTQsIDMyLCAzLCA0MCwgMjIwLCAxMDMsIDE0LCAzMiwgMywgMjIwLCAxMDMsIDE0LCAKKyAgICAzMiwgMywgMjE3LCAyNDgsIDE0LCAzMiwgMywgMjE1LCAxMjgsIDE0LCAzMiwgMywgMjI2LCA5LCAxNCwgMzIsIDMsIDI1MCwgCisgICAgNDcsIDE0LCAzMiwgMywgMjI1LCA0NiwgMTQsIDMyLCAzLCAyMjcsIDY3LCAxNCwgMzIsIDIyNiwgMTI1LCAyNDcsIDE4NSwgCisgICAgMTQsIDMyLCAyNDUsIDY0LCA4NywgMTQsIDMyLCAyMTcsIDEzMywgODcsIDE0LCAzMiwgMjM0LCAyMjgsIDg3LCAxNCwgMzIsIAorICAgIDIyNiwgMTAsIDg3LCAxNCwgMzIsIDIyMywgMTkxLCA4NywgMTQsIDMyLCAyMjUsIDI0MSwgODcsIDE0LCAyMiwgMzIsIDYsIAorICAgIDI1NCwgNTIsIDE0LCAyMiwgMzIsIDYsIDI1MSwgMjAzLCAxNCwgMjIsIDMyLCA2LCAyNDMsIDgzLCAxNCwgMjIsIDMyLCA2LCAKKyAgICAyNDgsIDUsIDE0LCAyMiwgMzIsIDYsIDI0NSwgNjMsIDE0LCAyMiwgMzIsIDYsIDIxMiwgNzgsIDE0LCAyMiwgMzIsIDYsIAorICAgIDI0NSwgMjgsIDE0LCAyMiwgMzIsIDYsIDIxNywgMTMyLCAxNCwgMjIsIDMyLCA2LCAyMzUsIDE4MywgMTQsIDIyLCAzMiwgNiwgCisgICAgMjM0LCAyMjcsIDE0LCAyMiwgMzIsIDYsIDIzMywgMTIyLCAxNCwgMjIsIDMyLCA2LCAyMzAsIDE3MiwgMTQsIDIyLCAzMiwgCisgICAgNiwgMjI4LCA5MiwgMTQsIDIyLCAzMiwgNiwgMjEzLCAxNDUsIDE0LCAyMiwgMzIsIDYsIDIyNywgNjUsIDE0LCAyMiwgMzIsIAorICAgIDYsIDIyNSwgMjQwLCAxNCwgMjIsIDMyLCA2LCAyMjMsIDE5MCwgMTQsIDIyLCAzMiwgNiwgMjE3LCAxMzMsIDg3LCAxNCwgCisgICAgMjIsIDMyLCA2LCAyMjAsIDEwMywgMTQsIDIyLCAzMiwgNiwgMjE3LCAyNDgsIDE0LCAyMiwgMzIsIDYsIDIxNSwgMTI4LCAKKyAgICAxNCwgMjIsIDMyLCA2LCAyMjYsIDksIDE0LCAyMiwgMzIsIDYsIDI1MCwgNDcsIDE0LCAyMiwgMzIsIDYsIDIyNSwgNDYsIAorICAgIDE0LCAyMiwgMzIsIDYsIDIyNywgNjcsIDE0LCAyMiwgMzIsIDIzMCwgMzksIDE0LCAyMiwgMzIsIDMsIDI1NCwgNTIsIDE0LCAKKyAgICAyMiwgMzIsIDMsIDI1MSwgMjAzLCAxNCwgMjIsIDMyLCAzLCAyNDMsIDgzLCAxNCwgMjIsIDMyLCAzLCAyNDgsIDUsIDE0LCAKKyAgICAyMiwgMzIsIDMsIDI0NSwgNjMsIDE0LCAyMiwgMzIsIDMsIDIxMiwgNzgsIDE0LCAyMiwgMzIsIDMsIDI0NSwgMjgsIDE0LCAKKyAgICAyMiwgMzIsIDMsIDIxNywgMTMyLCAxNCwgMjIsIDMyLCAzLCAyMzUsIDE4MywgMTQsIDIyLCAzMiwgMywgMjM0LCAyMjcsIAorICAgIDE0LCAyMiwgMzIsIDMsIDIzMywgMTIyLCAxNCwgMjIsIDMyLCAzLCAyMzAsIDE3MiwgMTQsIDIyLCAzMiwgMywgMjI4LCA5MiwgCisgICAgMTQsIDIyLCAzMiwgMywgMjEzLCAxNDUsIDE0LCAyMiwgMzIsIDMsIDIyNywgNjUsIDE0LCAyMiwgMzIsIDMsIDIyNSwgMjQwLCAKKyAgICAxNCwgMjIsIDMyLCAzLCAyMjMsIDE5MCwgMTQsIDIyLCAzMiwgMywgNDAsIDIyMCwgMTAzLCAxNCwgMjIsIDMyLCAzLCAyMjAsIAorICAgIDEwMywgMTQsIDIyLCAzMiwgMywgMjE3LCAyNDgsIDE0LCAyMiwgMzIsIDMsIDIxNSwgMTI4LCAxNCwgMjIsIDMyLCAzLCAKKyAgICAyMjYsIDksIDE0LCAyMiwgMzIsIDMsIDI1MCwgNDcsIDE0LCAyMiwgMzIsIDMsIDIyNSwgNDYsIDE0LCAyMiwgMzIsIDMsIAorICAgIDIyNywgNjcsIDE0LCAyMiwgMzIsIDIyNiwgMTI1LCAyNDcsIDE4NSwgMTQsIDIyLCAzMiwgMjQ1LCA2NCwgODcsIDE0LCAyMiwgCisgICAgMzIsIDIxNywgMTMzLCA4NywgMTQsIDIyLCAzMiwgMjM0LCAyMjgsIDg3LCAxNCwgMjIsIDMyLCAyMjYsIDEwLCA4NywgMTQsIAorICAgIDIyLCAzMiwgMjIzLCAxOTEsIDg3LCAxNCwgMjIsIDMyLCAyMjUsIDI0MSwgODcsIDE0LCAzNSwgMjIsIDYsIDI1NCwgNTIsIAorICAgIDE0LCAzNSwgMjIsIDYsIDI1MSwgMjAzLCAxNCwgMzUsIDIyLCA2LCAyNDMsIDgzLCAxNCwgMzUsIDIyLCA2LCAyNDgsIDUsIAorICAgIDE0LCAzNSwgMjIsIDYsIDI0NSwgNjMsIDE0LCAzNSwgMjIsIDYsIDIxMiwgNzgsIDE0LCAzNSwgMjIsIDYsIDI0NSwgMjgsIAorICAgIDE0LCAzNSwgMjIsIDYsIDIxNywgMTMyLCAxNCwgMzUsIDIyLCA2LCAyMzUsIDE4MywgMTQsIDM1LCAyMiwgNiwgMjM0LCAKKyAgICAyMjcsIDE0LCAzNSwgMjIsIDYsIDIzMywgMTIyLCAxNCwgMzUsIDIyLCA2LCAyMzAsIDE3MiwgMTQsIDM1LCAyMiwgNiwgCisgICAgMjI4LCA5MiwgMTQsIDM1LCAyMiwgNiwgMjEzLCAxNDUsIDE0LCAzNSwgMjIsIDYsIDIyNywgNjUsIDE0LCAzNSwgMjIsIDYsIAorICAgIDIyNSwgMjQwLCAxNCwgMzUsIDIyLCA2LCAyMjMsIDE5MCwgMTQsIDM1LCAyMiwgNiwgMjE3LCAxMzMsIDg3LCAxNCwgMzUsIAorICAgIDIyLCA2LCAyMjAsIDEwMywgMTQsIDM1LCAyMiwgNiwgMjE3LCAyNDgsIDE0LCAzNSwgMjIsIDYsIDIxNSwgMTI4LCAxNCwgCisgICAgMzUsIDIyLCA2LCAyMjYsIDksIDE0LCAzNSwgMjIsIDYsIDI1MCwgNDcsIDE0LCAzNSwgMjIsIDYsIDIyNSwgNDYsIDE0LCAKKyAgICAzNSwgMjIsIDYsIDIyNywgNjcsIDE0LCAzNSwgMjIsIDIzMCwgMzksIDE0LCAzNSwgMjIsIDMsIDI1NCwgNTIsIDE0LCAzNSwgCisgICAgMjIsIDMsIDI1MSwgMjAzLCAxNCwgMzUsIDIyLCAzLCAyNDMsIDgzLCAxNCwgMzUsIDIyLCAzLCAyNDgsIDUsIDE0LCAzNSwgCisgICAgMjIsIDMsIDI0NSwgNjMsIDE0LCAzNSwgMjIsIDMsIDIxMiwgNzgsIDE0LCAzNSwgMjIsIDMsIDI0NSwgMjgsIDE0LCAzNSwgCisgICAgMjIsIDMsIDIxNywgMTMyLCAxNCwgMzUsIDIyLCAzLCAyMzUsIDE4MywgMTQsIDM1LCAyMiwgMywgMjM0LCAyMjcsIDE0LCAKKyAgICAzNSwgMjIsIDMsIDIzMywgMTIyLCAxNCwgMzUsIDIyLCAzLCAyMzAsIDE3MiwgMTQsIDM1LCAyMiwgMywgMjI4LCA5MiwgMTQsIAorICAgIDM1LCAyMiwgMywgMjEzLCAxNDUsIDE0LCAzNSwgMjIsIDMsIDIyNywgNjUsIDE0LCAzNSwgMjIsIDMsIDIyNSwgMjQwLCAxNCwgCisgICAgMzUsIDIyLCAzLCAyMjMsIDE5MCwgMTQsIDM1LCAyMiwgMywgNDAsIDIyMCwgMTAzLCAxNCwgMzUsIDIyLCAzLCAyMjAsIAorICAgIDEwMywgMTQsIDM1LCAyMiwgMywgMjE3LCAyNDgsIDE0LCAzNSwgMjIsIDMsIDIxNSwgMTI4LCAxNCwgMzUsIDIyLCAzLCAKKyAgICAyMjYsIDksIDE0LCAzNSwgMjIsIDMsIDI1MCwgNDcsIDE0LCAzNSwgMjIsIDMsIDIyNSwgNDYsIDE0LCAzNSwgMjIsIDMsIAorICAgIDIyNywgNjcsIDE0LCAzNSwgMjIsIDIyNiwgMTI1LCAyNDcsIDE4NSwgMTQsIDM1LCAyMiwgMjQ1LCA2NCwgODcsIDE0LCAzNSwgCisgICAgMjIsIDIxNywgMTMzLCA4NywgMTQsIDM1LCAyMiwgMjM0LCAyMjgsIDg3LCAxNCwgMzUsIDIyLCAyMjYsIDEwLCA4NywgMTQsIAorICAgIDM1LCAyMiwgMjIzLCAxOTEsIDg3LCAxNCwgMzUsIDIyLCAyMjUsIDI0MSwgODcsIDE0LCAzNSwgMjIsIDMyLCA2LCAyNTQsIAorICAgIDUyLCAxNCwgMzUsIDIyLCAzMiwgNiwgMjUxLCAyMDMsIDE0LCAzNSwgMjIsIDMyLCA2LCAyNDMsIDgzLCAxNCwgMzUsIDIyLCAKKyAgICAzMiwgNiwgMjQ4LCA1LCAxNCwgMzUsIDIyLCAzMiwgNiwgMjQ1LCA2MywgMTQsIDM1LCAyMiwgMzIsIDYsIDIxMiwgNzgsIAorICAgIDE0LCAzNSwgMjIsIDMyLCA2LCAyNDUsIDI4LCAxNCwgMzUsIDIyLCAzMiwgNiwgMjE3LCAxMzIsIDE0LCAzNSwgMjIsIDMyLCAKKyAgICA2LCAyMzUsIDE4MywgMTQsIDM1LCAyMiwgMzIsIDYsIDIzNCwgMjI3LCAxNCwgMzUsIDIyLCAzMiwgNiwgMjMzLCAxMjIsIAorICAgIDE0LCAzNSwgMjIsIDMyLCA2LCAyMzAsIDE3MiwgMTQsIDM1LCAyMiwgMzIsIDYsIDIyOCwgOTIsIDE0LCAzNSwgMjIsIDMyLCAKKyAgICA2LCAyMTMsIDE0NSwgMTQsIDM1LCAyMiwgMzIsIDYsIDIyNywgNjUsIDE0LCAzNSwgMjIsIDMyLCA2LCAyMjUsIDI0MCwgMTQsIAorICAgIDM1LCAyMiwgMzIsIDYsIDIyMywgMTkwLCAxNCwgMzUsIDIyLCAzMiwgNiwgMjE3LCAxMzMsIDg3LCAxNCwgMzUsIDIyLCAzMiwgCisgICAgNiwgMjIwLCAxMDMsIDE0LCAzNSwgMjIsIDMyLCA2LCAyMTcsIDI0OCwgMTQsIDM1LCAyMiwgMzIsIDYsIDIxNSwgMTI4LCAKKyAgICAxNCwgMzUsIDIyLCAzMiwgNiwgMjI2LCA5LCAxNCwgMzUsIDIyLCAzMiwgNiwgMjUwLCA0NywgMTQsIDM1LCAyMiwgMzIsIDYsIAorICAgIDIyNSwgNDYsIDE0LCAzNSwgMjIsIDMyLCA2LCAyMjcsIDY3LCAxNCwgMzUsIDIyLCAzMiwgMjMwLCAzOSwgMTQsIDM1LCAyMiwgCisgICAgMzIsIDMsIDI1NCwgNTIsIDE0LCAzNSwgMjIsIDMyLCAzLCAyNTEsIDIwMywgMTQsIDM1LCAyMiwgMzIsIDMsIDI0MywgODMsIAorICAgIDE0LCAzNSwgMjIsIDMyLCAzLCAyNDgsIDUsIDE0LCAzNSwgMjIsIDMyLCAzLCAyNDUsIDYzLCAxNCwgMzUsIDIyLCAzMiwgMywgCisgICAgMjEyLCA3OCwgMTQsIDM1LCAyMiwgMzIsIDMsIDI0NSwgMjgsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMTcsIDEzMiwgMTQsIDM1LCAKKyAgICAyMiwgMzIsIDMsIDIzNSwgMTgzLCAxNCwgMzUsIDIyLCAzMiwgMywgMjM0LCAyMjcsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMzMsIAorICAgIDEyMiwgMTQsIDM1LCAyMiwgMzIsIDMsIDIzMCwgMTcyLCAxNCwgMzUsIDIyLCAzMiwgMywgMjI4LCA5MiwgMTQsIDM1LCAyMiwgCisgICAgMzIsIDMsIDIxMywgMTQ1LCAxNCwgMzUsIDIyLCAzMiwgMywgMjI3LCA2NSwgMTQsIDM1LCAyMiwgMzIsIDMsIDIyNSwgMjQwLCAKKyAgICAxNCwgMzUsIDIyLCAzMiwgMywgMjIzLCAxOTAsIDE0LCAzNSwgMjIsIDMyLCAzLCA0MCwgMjIwLCAxMDMsIDE0LCAzNSwgMjIsIAorICAgIDMyLCAzLCAyMjAsIDEwMywgMTQsIDM1LCAyMiwgMzIsIDMsIDIxNywgMjQ4LCAxNCwgMzUsIDIyLCAzMiwgMywgMjE1LCAKKyAgICAxMjgsIDE0LCAzNSwgMjIsIDMyLCAzLCAyMjYsIDksIDE0LCAzNSwgMjIsIDMyLCAzLCAyNTAsIDQ3LCAxNCwgMzUsIDIyLCAKKyAgICAzMiwgMywgMjI1LCA0NiwgMTQsIDM1LCAyMiwgMzIsIDMsIDIyNywgNjcsIDE0LCAzNSwgMjIsIDMyLCAyMjYsIDEyNSwgCisgICAgMjQ3LCAxODUsIDE0LCAzNSwgMjIsIDMyLCAyNDUsIDY0LCA4NywgMTQsIDM1LCAyMiwgMzIsIDIxNywgMTMzLCA4NywgMTQsIAorICAgIDM1LCAyMiwgMzIsIDIzNCwgMjI4LCA4NywgMTQsIDM1LCAyMiwgMzIsIDIyNiwgMTAsIDg3LCAxNCwgMzUsIDIyLCAzMiwgCisgICAgMjIzLCAxOTEsIDg3LCAxNCwgMzUsIDIyLCAzMiwgMjI1LCAyNDEsIDg3LCAxNCwgMjIsIDYsIDI0NywgMTc5LCAxNCwgMjIsIAorICAgIDMsIDI0NywgMTc5LCAxNCwgMjIsIDIxLCAyMTIsIDc5LCAxNCwgMjIsIDIxLCAxMTYsIDE0LCAyMiwgMjEsIDEwOSwgMTQsIAorICAgIDIyLCAyMSwgMTY2LCAxNCwgMjIsIDIxLCAxNjMsIDE0LCAyMiwgMjEsIDE4MCwgMTQsIDIyLCAyMSwgMTg5LCAxNCwgMjIsIAorICAgIDIxLCAxOTgsIDE0LCAyMiwgMjEsIDE5NSwgMTQsIDIyLCAyMSwgMjAwLCAxNCwgMTg3LCAyMSwgMjEyLCA3OSwgMTQsIDE4NywgCisgICAgMjEsIDExNiwgMTQsIDE4NywgMjEsIDEwOSwgMTQsIDE4NywgMjEsIDE2NiwgMTQsIDE4NywgMjEsIDE2MywgMTQsIDE4NywgCisgICAgMjEsIDE4MCwgMTQsIDE4NywgMjEsIDE4OSwgMTQsIDE4NywgMjEsIDE5OCwgMTQsIDE4NywgMjEsIDE5NSwgMTQsIDE4NywgCisgICAgMjEsIDIwMCwgMTQsIDM1LCAyMSwgMjEyLCA3OSwgMTQsIDM1LCAyMSwgMTE2LCAxNCwgMzUsIDIxLCAxMDksIDE0LCAzNSwgCisgICAgMjEsIDE2NiwgMTQsIDM1LCAyMSwgMTYzLCAxNCwgMzUsIDIxLCAxODAsIDE0LCAzNSwgMjEsIDE4OSwgMTQsIDM1LCAyMSwgCisgICAgMTk4LCAxNCwgMzUsIDIxLCAxOTUsIDE0LCAzNSwgMjEsIDIwMCwgMTQsIDM1LCAyMiwgMjEsIDIxMiwgNzksIDE0LCAzNSwgCisgICAgMjIsIDIxLCAxMTYsIDE0LCAzNSwgMjIsIDIxLCAxMDksIDE0LCAzNSwgMjIsIDIxLCAxNjYsIDE0LCAzNSwgMjIsIDIxLCAKKyAgICAxNjMsIDE0LCAzNSwgMjIsIDIxLCAxODAsIDE0LCAzNSwgMjIsIDIxLCAxODksIDE0LCAzNSwgMjIsIDIxLCAxOTgsIDE0LCAKKyAgICAzNSwgMjIsIDIxLCAxOTUsIDE0LCAzNSwgMjIsIDIxLCAyMDAsIDE0LCAyMzAsIDIwOCwgMjEsIDIxMiwgNzksIDE0LCAyMzAsIAorICAgIDIwOCwgMjEsIDExNiwgMTQsIDIzMCwgMjA4LCAyMSwgMTA5LCAxNCwgMjMwLCAyMDgsIDIxLCAxNjYsIDE0LCAyMzAsIDIwOCwgCisgICAgMjEsIDE2MywgMTQsIDIzMCwgMjA4LCAyMSwgMTgwLCAxNCwgMjMwLCAyMDgsIDIxLCAxODksIDE0LCAyMzAsIDIwOCwgMjEsIAorICAgIDE5OCwgMTQsIDIzMCwgMjA4LCAyMSwgMTk1LCAxNCwgMjMwLCAyMDgsIDIxLCAyMDAsIDIzMiwgMTAsIDg1LCAyNDUsIDE3NiwgCisgICAgMjEzLCAyMjQsIDIzMiwgMTAsIDg1LCAyMTksIDIxNSwgMjEzLCAyMjQsIDIzMiwgMTAsIDg1LCAyMTMsIDI1MCwgMjEzLCAKKyAgICAyMjQsIDIzMiwgMTAsIDg1LCAyMjgsIDE2NywgMjEzLCAyMjQsIDIzMiwgMTAsIDg1LCAyMjQsIDQsIDI0NiwgNTAsIDIzMiwgCisgICAgMTAsIDg1LCAyNDIsIDEwNCwgMjQ2LCA1MCwgMjMyLCAxMCwgODUsIDY3LCAyNDYsIDUwLCAyMzIsIDEwLCA4NSwgMTIyLCAKKyAgICA2NSwgMjUwLCA3NywgMjMyLCAxMCwgODUsIDExNywgNjUsIDI1MCwgNzcsIDIzMiwgMTAsIDg1LCAxMzMsIDY1LCAyNTAsIAorICAgIDc3LCAyMzIsIDEwLCA4NSwgMjQzLCAyMzcsIDY1LCAyNTAsIDc3LCAyMzIsIDEwLCA4NSwgMjQ0LCA1MCwgNjUsIDI1MCwgCisgICAgNzcsIDIzMiwgMTAsIDg1LCAyMjAsIDUzLCA2NSwgMjUwLCA3NywgMjMyLCAxMCwgODUsIDIyMSwgNDMsIDY1LCAyNTAsIDc3LCAKKyAgICAyMzIsIDEwLCA4NSwgMjQ1LCAxNTAsIDY1LCAyNTAsIDc3LCAyMzIsIDEwLCA4NSwgMjI5LCAzMSwgNjUsIDI1MCwgNzcsIAorICAgIDIzMiwgMTAsIDg1LCAxMjIsIDY1LCAyNTIsIDcyLCAyMzIsIDEwLCA4NSwgMTE3LCA2NSwgMjUyLCA3MiwgMjMyLCAxMCwgCisgICAgODUsIDEzMywgNjUsIDI1MiwgNzIsIDIzMiwgMTAsIDg1LCAyNDMsIDIzNywgNjUsIDI1MiwgNzIsIDIzMiwgMTAsIDg1LCAKKyAgICAyNDQsIDUwLCA2NSwgMjUyLCA3MiwgMjMyLCAxMCwgODUsIDIyMCwgNTMsIDY1LCAyNTIsIDcyLCAyMzIsIDEwLCA4NSwgCisgICAgMjIxLCA0MywgNjUsIDI1MiwgNzIsIDIzMiwgMTAsIDg1LCAyNDUsIDE1MCwgNjUsIDI1MiwgNzIsIDIzMiwgMTAsIDg1LCAKKyAgICAyMjksIDMxLCA2NSwgMjUyLCA3MiwgMjMyLCAxMCwgODUsIDEyMiwgNjUsIDI0OSwgMjI3LCAyMzIsIDEwLCA4NSwgMTE3LCAKKyAgICA2NSwgMjQ5LCAyMjcsIDIzMiwgMTAsIDg1LCAxMzMsIDY1LCAyNDksIDIyNywgMjMyLCAxMCwgODUsIDI0MywgMjM3LCA2NSwgCisgICAgMjQ5LCAyMjcsIDIzMiwgMTAsIDg1LCAyNDQsIDUwLCA2NSwgMjQ5LCAyMjcsIDIzMiwgMTAsIDg1LCAyMjAsIDUzLCA2NSwgCisgICAgMjQ5LCAyMjcsIDIzMiwgMTAsIDg1LCAyMjEsIDQzLCA2NSwgMjQ5LCAyMjcsIDIzMiwgMTAsIDg1LCAyNDUsIDE1MCwgNjUsIAorICAgIDI0OSwgMjI3LCAyMzIsIDEwLCA4NSwgMjI5LCAzMSwgNjUsIDI0OSwgMjI3LCAyMzIsIDEwLCA4NSwgMjI1LCAxNTksIDIzMiwgCisgICAgMTAsIDg1LCAyMjcsIDIyLCAyMzIsIDEwLCA4NSwgMjUyLCA3MywgMjMyLCAxMCwgODUsIDI1MCwgNywgMjMyLCAxMCwgODUsIAorICAgIDIxOSwgMTcxLCAyMzIsIDEwLCA4NSwgMjE4LCAyNDAsIDIzMiwgMTAsIDg1LCAyNTMsIDk1LCAyMzIsIDEwLCA4NSwgMjEzLCAKKyAgICAyMTcsIDIzMiwgMTAsIDg1LCAyMzUsIDY1LCAyMzIsIDEwLCA4NSwgMjUyLCAxMDEsIDEyNywgODUsIDE5OSwgMjUyLCAxMDEsIAorICAgIDEyNywgODUsIDI0MSwgMzAsIDEyNywgODUsIDI0MSwgMjksIDEyNywgODUsIDI0MSwgMjgsIDEyNywgODUsIDI0MSwgMjcsIAorICAgIDEyNywgODUsIDI0MSwgMjYsIDEyNywgODUsIDI0MSwgMjUsIDEyNywgODUsIDI0MSwgMjQsIDEyNywgODUsIDI0MSwgMjMsIAorICAgIDEyNywgODUsIDI0MSwgMjIsIDEyNywgODUsIDI0MSwgMjEsIDEyNywgODUsIDI0MSwgMjAsIDEyNywgODUsIDI0MSwgMTksIAorICAgIDEyNywgODUsIDI0MSwgMTgsIDEyNywgODUsIDI0MSwgMTcsIDEyNywgODUsIDI0MSwgMTYsIDEyNywgODUsIDI0MSwgMTUsIAorICAgIDEyNywgODUsIDI0MSwgMTQsIDEyNywgODUsIDI0MSwgMTMsIDEyNywgODUsIDI0MSwgMTIsIDEyNywgODUsIDI0MSwgMTEsIAorICAgIDEyNywgODUsIDI0MSwgMTAsIDEyNywgODUsIDI0MSwgOSwgMTI3LCA4NSwgMjQxLCA4LCAxMjcsIDg1LCAyNDEsIDcsIDEyNywgCisgICAgODUsIDI0MSwgNiwgMTI3LCA4NSwgMjQxLCA1LCAxMjcsIDg1LCAyNDEsIDQsIDEyNywgODUsIDI0MSwgMywgMTI3LCA4NSwgCisgICAgMjQxLCAyLCAxMjcsIDg1LCAyNDEsIDEsIDEyNywgODUsIDI0MSwgMCwgMTI3LCA4NSwgMjQwLCAyNTUsIDEyNywgODUsIAorICAgIDI0MCwgMjU0LCAxMjcsIDg1LCAyNDAsIDI1MywgMTI3LCA4NSwgMjQwLCAyNTIsIDEyNywgODUsIDI0MCwgMjUxLCAxMjcsIAorICAgIDg1LCAyNDAsIDI1MCwgMTI3LCA4NSwgMjQwLCAyNDksIDEyNywgODUsIDI0MCwgMjQ4LCAxMjcsIDg1LCAyNDAsIDI0NywgCisgICAgMTI3LCA4NSwgMjQwLCAyNDYsIDEyNywgODUsIDI0MCwgMjQ1LCAxMjcsIDg1LCAyNDAsIDI0NCwgMTI3LCA4NSwgMjQwLCAKKyAgICAyNDMsIDEyNywgODUsIDI0MCwgMjQyLCAxMjcsIDg1LCAyNDAsIDI0MSwgMTI3LCA4NSwgMjQwLCAyNDAsIDEyNywgODUsIAorICAgIDI0MCwgMjM5LCAxMjcsIDg1LCAyNDAsIDIzOCwgMTI3LCA4NSwgNzEsIDI1MiwgMTAxLCAxMjcsIDg1LCAyMTQsIDIxNSwgCisgICAgMTI3LCA4NSwgMjE0LCAyMTQsIDEyNywgODUsIDIxNCwgMjEzLCAxMjcsIDg1LCAyMTQsIDIxMiwgMTI3LCA4NSwgMjE0LCAKKyAgICAyMTEsIDEyNywgODUsIDIxNCwgMjEwLCAxMjcsIDg1LCAyMTQsIDIwOSwgMTI3LCA4NSwgMjE0LCAyMDgsIDEyNywgODUsIAorICAgIDIxNCwgMjA3LCAxMjcsIDg1LCAyMTQsIDIwNiwgMTI3LCA4NSwgMjE0LCAyMDUsIDEyNywgODUsIDIxNCwgMjA0LCAxMjcsIAorICAgIDg1LCAyMTQsIDIwMywgMTI3LCA4NSwgMjE0LCAyMDIsIDEyNywgODUsIDIxNCwgMjAxLCAxMjcsIDg1LCAyMTQsIDIwMCwgCisgICAgMTI3LCA4NSwgMjE0LCAxOTksIDEyNywgODUsIDIxNCwgMTk4LCAxMjcsIDg1LCAyMTQsIDE5NywgMTI3LCA4NSwgMjE0LCAKKyAgICAxOTYsIDEyNywgODUsIDIxNCwgMTk1LCAxMjcsIDg1LCAyMTQsIDE5NCwgMTI3LCA4NSwgMjE0LCAxOTMsIDEyNywgODUsIAorICAgIDIxNCwgMTkyLCAxMjcsIDg1LCAyMTQsIDE5MSwgMTI3LCA4NSwgMjE0LCAxOTAsIDEyNywgODUsIDIxNCwgMTg5LCAxMjcsIAorICAgIDg1LCAyMTQsIDE4OCwgMTI3LCA4NSwgMjE0LCAxODcsIDEyNywgODUsIDIxNCwgMTg2LCAxMjcsIDg1LCAyMTQsIDE4NSwgCisgICAgMTI3LCA4NSwgMjE0LCAxODQsIDEyNywgODUsIDIxNCwgMTgzLCAxMjcsIDg1LCAyMTQsIDE4MiwgMTI3LCA4NSwgMjE0LCAKKyAgICAxODEsIDEyNywgODUsIDIxNCwgMTgwLCAxMjcsIDg1LCAyMTQsIDE3OSwgMTI3LCA4NSwgMjE0LCAxNzgsIDEyNywgODUsIAorICAgIDIxNCwgMTc3LCAxMjcsIDg1LCAyMTQsIDE3NiwgMTI3LCA4NSwgMjE0LCAxNzUsIDEyNywgODUsIDIxNCwgMTc0LCAxMjcsIAorICAgIDg1LCAyMTQsIDE3MywgMTI3LCA4NSwgMjE0LCAxNzIsIDEyNywgODUsIDIxNCwgMTcxLCAxMjcsIDg1LCAyMTQsIDE3MCwgCisgICAgMTI3LCA4NSwgMjE0LCAxNjksIDEyNywgODUsIDIxNCwgMTY4LCAxMjcsIDg1LCAyMTQsIDE2NywgMjI1LCAxNjUsIDI1MCwgCisgICAgMTc1LCAyNTIsIDEwMSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyNTQsIDE2OSwgNjUsIDIxOSwgMjAzLCAyMjUsIDE2NSwgMjUwLCAKKyAgICAxNzUsIDExNywgNjUsIDIxOSwgMjAzLCAyMjUsIDE2NSwgMjUwLCAxNzUsIDEzMywgNjUsIDIxOSwgMjAzLCAyMjUsIDE2NSwgCisgICAgMjUwLCAxNzUsIDI0MywgMjM3LCA2NSwgMjE5LCAyMDMsIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjQ0LCA1MCwgNjUsIDIxOSwgCisgICAgMjAzLCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIyMCwgNTMsIDY1LCAyMTksIDIwMywgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjEsIAorICAgIDQzLCA2NSwgMjE5LCAyMDMsIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjQ1LCAxNTAsIDY1LCAyMTksIDIwMywgMjI1LCAxNjUsIAorICAgIDI1MCwgMTc1LCAyMjksIDMxLCA2NSwgMjE5LCAyMDMsIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjE3LCAyMDEsIDY1LCAyMTksIAorICAgIDIwMywgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMzUsIDEzNywgNjUsIDIxOSwgMjAzLCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIzNCwgCisgICAgNDAsIDY1LCAyMTksIDIwMywgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjQsIDE2MCwgNjUsIDIxOSwgMjAzLCAyMjUsIDE2NSwgCisgICAgMjUwLCAxNzUsIDIzNCwgODgsIDY1LCAyMTksIDIwMywgMjI1LCAxNjUsIDI1MCwgMTc1LCAyNTQsIDE2OSwgNjUsIDI0MSwgCisgICAgMjA5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDExNywgNjUsIDI0MSwgMjA5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDEzMywgNjUsIAorICAgIDI0MSwgMjA5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDI0MywgMjM3LCA2NSwgMjQxLCAyMDksIDIyNSwgMTY1LCAyNTAsIDE3NSwgCisgICAgMjQ0LCA1MCwgNjUsIDI0MSwgMjA5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIyMCwgNTMsIDY1LCAyNDEsIDIwOSwgMjI1LCAKKyAgICAxNjUsIDI1MCwgMTc1LCAyMjEsIDQzLCA2NSwgMjQxLCAyMDksIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjQ1LCAxNTAsIDY1LCAKKyAgICAyNDEsIDIwOSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjksIDMxLCA2NSwgMjQxLCAyMDksIDIyNSwgMTY1LCAyNTAsIDE3NSwgCisgICAgMjE3LCAyMDEsIDY1LCAyNDEsIDIwOSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMzUsIDEzNywgNjUsIDI0MSwgMjA5LCAyMjUsIAorICAgIDE2NSwgMjUwLCAxNzUsIDIzNCwgNDAsIDY1LCAyNDEsIDIwOSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjQsIDE2MCwgNjUsIAorICAgIDI0MSwgMjA5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIzNCwgODgsIDY1LCAyNDEsIDIwOSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAKKyAgICAyNTQsIDE2OSwgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDExNywgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgCisgICAgMjUwLCAxNzUsIDEzMywgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDI0MywgMjM3LCA2NSwgMjQ3LCAxOTksIAorICAgIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjQ0LCA1MCwgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIyMCwgNTMsIAorICAgIDY1LCAyNDcsIDE5OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjEsIDQzLCA2NSwgMjQ3LCAxOTksIDIyNSwgMTY1LCAyNTAsIAorICAgIDE3NSwgMjQ1LCAxNTAsIDY1LCAyNDcsIDE5OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjksIDMxLCA2NSwgMjQ3LCAxOTksIAorICAgIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjE3LCAyMDEsIDY1LCAyNDcsIDE5OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMzUsIDEzNywgCisgICAgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIzNCwgNDAsIDY1LCAyNDcsIDE5OSwgMjI1LCAxNjUsIDI1MCwgCisgICAgMTc1LCAyMjQsIDE2MCwgNjUsIDI0NywgMTk5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIzNCwgODgsIDY1LCAyNDcsIDE5OSwgCisgICAgMjI1LCAxNjUsIDI1MCwgMTc1LCA4MywgMjM1LCA2NSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyNTQsIDE2OSwgNjUsIDI0OSwgCisgICAgMTc5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDExNywgNjUsIDI0OSwgMTc5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDEzMywgNjUsIAorICAgIDI0OSwgMTc5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDI0MywgMjM3LCA2NSwgMjQ5LCAxNzksIDIyNSwgMTY1LCAyNTAsIDE3NSwgCisgICAgMjQ0LCA1MCwgNjUsIDI0OSwgMTc5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIyMCwgNTMsIDY1LCAyNDksIDE3OSwgMjI1LCAKKyAgICAxNjUsIDI1MCwgMTc1LCAyMjEsIDQzLCA2NSwgMjQ5LCAxNzksIDIyNSwgMTY1LCAyNTAsIDE3NSwgMjQ1LCAxNTAsIDY1LCAKKyAgICAyNDksIDE3OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjksIDMxLCA2NSwgMjQ5LCAxNzksIDIyNSwgMTY1LCAyNTAsIDE3NSwgCisgICAgMjE3LCAyMDEsIDY1LCAyNDksIDE3OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMzUsIDEzNywgNjUsIDI0OSwgMTc5LCAyMjUsIAorICAgIDE2NSwgMjUwLCAxNzUsIDIzNCwgNDAsIDY1LCAyNDksIDE3OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAyMjQsIDE2MCwgNjUsIAorICAgIDI0OSwgMTc5LCAyMjUsIDE2NSwgMjUwLCAxNzUsIDIzNCwgODgsIDY1LCAyNDksIDE3OSwgMjI1LCAxNjUsIDI1MCwgMTc1LCAKKyAgICA2NywgMjM1LCA2NSwgMjEsIDIxMiwgODAsIDI0MywgMjAwLCAyMTksIDY5LCAyMSwgMjEyLCA4MCwgMjQ5LCAxNTcsIDIxLCAKKyAgICAxMjIsIDI0OSwgMTU3LCAyMSwgMTE3LCAyNDksIDE1NywgMjEsIDEzMywgMjQ5LCAxNTcsIDIxLCAyNDMsIDIzNywgMjQ5LCAKKyAgICAxNTcsIDIxLCAyNDQsIDUwLCAyNDksIDE1NywgMjEsIDIyMCwgNTMsIDI0OSwgMTU3LCAyMSwgMjIxLCA0MywgMjQ5LCAxNTcsIAorICAgIDIxLCAyNDUsIDE1MCwgMjQ5LCAxNTcsIDIxLCAyMjksIDMxLCAyNDksIDE1NywgODYsIDcsIDYsIDEsIDYxLCA4NiwgNywgNiwgCisgICAgMSwgMjUzLCA3NCwgODYsIDcsIDYsIDEsIDI1MCwgMjUyLCA4NiwgNywgNiwgMSwgMjQ5LCAzLCA4NiwgNywgNiwgMSwgNzQsIAorICAgIDg2LCA3LCA2LCAxLCAyNDQsIDIzMCwgODYsIDcsIDYsIDEsIDI0MywgMTc3LCA4NiwgNywgNiwgMSwgMjQyLCA0MSwgODYsIAorICAgIDcsIDYsIDEsIDcyLCA4NiwgNywgNiwgMSwgMjM1LCAxNDIsIDg2LCA3LCA2LCAxLCAyMzUsIDI3LCA4NiwgNywgNiwgMSwgCisgICAgMTUwLCA4NiwgNywgNiwgMSwgMTgzLCA4NiwgNywgNiwgMSwgMjA0LCA4NiwgNywgNiwgMSwgNzUsIDg2LCA3LCA2LCAxLCAKKyAgICAyMjYsIDIyOSwgODYsIDcsIDYsIDEsIDIyNCwgMjQwLCA4NiwgNywgNiwgMSwgMTQ5LCA4NiwgNywgNiwgMSwgMTk3LCA4NiwgCisgICAgNywgNiwgMSwgMjE4LCA5OSwgODYsIDcsIDYsIDEsIDY5LCA4NiwgNywgNiwgMSwgMjE1LCA3OSwgODYsIDcsIDYsIDEsIAorICAgIDIxNCwgODIsIDg2LCA3LCA2LCAxLCAyMTMsIDE2NiwgODYsIDcsIDYsIDEsIDIxMywgMTA1LCA4NiwgNywgNiwgMSwgMjEyLCAKKyAgICAxNTIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgNywgNiwgMSwgMTk3LCAzNiwgMzIsIDcsIDYsIDEsIDI1MCwgCisgICAgMjUyLCAzNiwgMzIsIDcsIDYsIDEsIDE0OSwgMzYsIDI1MCwgMTI1LCAzNiwgMjEzLCAxNjgsIDkxLCA3LCA2LCAxLCA2MSwgCisgICAgOTEsIDcsIDYsIDEsIDI1MywgNzQsIDkxLCA3LCA2LCAxLCAyNTAsIDI1MiwgOTEsIDcsIDYsIDEsIDI0OSwgMywgOTEsIDcsIAorICAgIDYsIDEsIDc0LCA5MSwgNywgNiwgMSwgMjQ0LCAyMzAsIDkxLCA3LCA2LCAxLCAyNDMsIDE3NywgOTEsIDcsIDYsIDEsIDI0MiwgCisgICAgNDEsIDkxLCA3LCA2LCAxLCA3MiwgOTEsIDcsIDYsIDEsIDIzNSwgMTQyLCA5MSwgNywgNiwgMSwgMjM1LCAyNywgOTEsIDcsIAorICAgIDYsIDEsIDE1MCwgOTEsIDcsIDYsIDEsIDE4MywgOTEsIDcsIDYsIDEsIDIwNCwgOTEsIDcsIDYsIDEsIDc1LCA5MSwgNywgNiwgCisgICAgMSwgMjI2LCAyMjksIDkxLCA3LCA2LCAxLCAyMjQsIDI0MCwgOTEsIDcsIDYsIDEsIDE0OSwgOTEsIDcsIDYsIDEsIDE5NywgCisgICAgOTEsIDcsIDYsIDEsIDIxOCwgOTksIDkxLCA3LCA2LCAxLCA2OSwgOTEsIDcsIDYsIDEsIDIxNSwgNzksIDkxLCA3LCA2LCAxLCAKKyAgICAyMTQsIDgyLCA5MSwgNywgNiwgMSwgMjEzLCAxNjYsIDkxLCA3LCA2LCAxLCAyMTMsIDEwNSwgOTEsIDcsIDYsIDEsIDIxMiwgCisgICAgMTUyLCA5MSwgMjQwLCAxOTMsIDkxLCAyMzAsIDEyMCwgOTEsIDIyMiwgMTAyLCA5MSwgMjE5LCAxNTgsIDkxLCAyMjUsIDk4LCAKKyAgICA5MSwgMjE0LCA3LCAxNDYsIDM2LCA3LCA2LCAxLCA2MSwgMTQ2LCAzNiwgNywgNiwgMSwgMjUzLCA3NCwgMTQ2LCAzNiwgNywgCisgICAgNiwgMSwgMjUwLCAyNTIsIDE0NiwgMzYsIDcsIDYsIDEsIDI0OSwgMywgMTQ2LCAzNiwgNywgNiwgMSwgNzQsIDE0NiwgMzYsIAorICAgIDcsIDYsIDEsIDI0NCwgMjMwLCAxNDYsIDM2LCA3LCA2LCAxLCAyNDMsIDE3NywgMTQ2LCAzNiwgNywgNiwgMSwgMjQyLCA0MSwgCisgICAgMTQ2LCAzNiwgNywgNiwgMSwgNzIsIDE0NiwgMzYsIDcsIDYsIDEsIDIzNSwgMTQyLCAxNDYsIDM2LCA3LCA2LCAxLCAyMzUsIAorICAgIDI3LCAxNDYsIDM2LCA3LCA2LCAxLCAxNTAsIDE0NiwgMzYsIDcsIDYsIDEsIDE4MywgMTQ2LCAzNiwgNywgNiwgMSwgMjA0LCAKKyAgICAxNDYsIDM2LCA3LCA2LCAxLCA3NSwgMTQ2LCAzNiwgNywgNiwgMSwgMjI2LCAyMjksIDE0NiwgMzYsIDcsIDYsIDEsIDIyNCwgCisgICAgMjQwLCAxNDYsIDM2LCA3LCA2LCAxLCAxNDksIDE0NiwgMzYsIDcsIDYsIDEsIDE5NywgMTQ2LCAzNiwgNywgNiwgMSwgMjE4LCAKKyAgICA5OSwgMTQ2LCAzNiwgNywgNiwgMSwgNjksIDE0NiwgMzYsIDcsIDYsIDEsIDIxNSwgNzksIDE0NiwgMzYsIDcsIDYsIDEsIAorICAgIDIxNCwgODIsIDE0NiwgMzYsIDcsIDYsIDEsIDIxMywgMTY2LCAxNDYsIDM2LCA3LCA2LCAxLCAyMTMsIDEwNSwgMTQ2LCAzNiwgCisgICAgNywgNiwgMSwgMjEyLCAxNTIsIDE0NiwgOTEsIDcsIDYsIDEsIDYxLCAxNDYsIDkxLCA3LCA2LCAxLCAyNTMsIDc0LCAxNDYsIAorICAgIDkxLCA3LCA2LCAxLCAyNTAsIDI1MiwgMTQ2LCA5MSwgNywgNiwgMSwgMjQ5LCAzLCAxNDYsIDkxLCA3LCA2LCAxLCA3NCwgCisgICAgMTQ2LCA5MSwgNywgNiwgMSwgMjQ0LCAyMzAsIDE0NiwgOTEsIDcsIDYsIDEsIDI0MywgMTc3LCAxNDYsIDkxLCA3LCA2LCAxLCAKKyAgICAyNDIsIDQxLCAxNDYsIDkxLCA3LCA2LCAxLCA3MiwgMTQ2LCA5MSwgNywgNiwgMSwgMjM1LCAxNDIsIDE0NiwgOTEsIDcsIDYsIAorICAgIDEsIDIzNSwgMjcsIDE0NiwgOTEsIDcsIDYsIDEsIDE1MCwgMTQ2LCA5MSwgNywgNiwgMSwgMTgzLCAxNDYsIDkxLCA3LCA2LCAKKyAgICAxLCAyMDQsIDE0NiwgOTEsIDcsIDYsIDEsIDc1LCAxNDYsIDkxLCA3LCA2LCAxLCAyMjYsIDIyOSwgMTQ2LCA5MSwgNywgNiwgCisgICAgMSwgMjI0LCAyNDAsIDE0NiwgOTEsIDcsIDYsIDEsIDE0OSwgMTQ2LCA5MSwgNywgNiwgMSwgMTk3LCAxNDYsIDkxLCA3LCA2LCAKKyAgICAxLCAyMTgsIDk5LCAxNDYsIDkxLCA3LCA2LCAxLCA2OSwgMTQ2LCA5MSwgNywgNiwgMSwgMjE1LCA3OSwgMTQ2LCA5MSwgNywgCisgICAgNiwgMSwgMjE0LCA4MiwgMTQ2LCA5MSwgNywgNiwgMSwgMjEzLCAxNjYsIDE0NiwgOTEsIDcsIDYsIDEsIDIxMywgMTA1LCAKKyAgICAxNDYsIDkxLCA3LCA2LCAxLCAyMTIsIDE1MiwgMjQ5LCA2OCwgMTQ2LCA5MSwgNywgNiwgMSwgMjI2LCAyMjksIDE0NiwgOTEsIAorICAgIDI0MCwgMTA2LCAxNDYsIDkxLCAxOTMsIDE0NiwgOTEsIDIyMiwgMjAyLCAxNDYsIDkxLCAyNTQsIDE4NSwgMTQ2LCA5MSwgCisgICAgMjE0LCA3LCA0MSwgMjQ3LCAxMTYsIDkxLCAyNDksIDIxNiwgOTEsIDI0OSwgMTA5LCA5MSwgMjQzLCAyMjIsIDkxLCAyNDAsIAorICAgIDk4LCA5MSwgMjI5LCAxNjgsIDkxLCAyMjksIDE2MSwgOTEsIDIyNywgODAsIDkxLCAyMTksIDIyMiwgOTEsIDExNCwgMiwgCisgICAgMjQ0LCAyNTQsIDc3LCA5MSwgMjE0LCAxMDAsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIDYxLCAyMjMsIDI1MywgMjM1LCAKKyAgICAyMzYsIDE2LCAxLCAyNTMsIDc0LCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCAyNTAsIDI1MiwgMjIzLCAyNTMsIDIzNSwgCisgICAgMjM2LCAxNiwgMSwgMjQ5LCAzLCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCA3NCwgMjIzLCAyNTMsIDIzNSwgMjM2LCAKKyAgICAxNiwgMSwgMjQ0LCAyMzAsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIDI0MywgMTc3LCAyMjMsIDI1MywgMjM1LCAyMzYsIAorICAgIDE2LCAxLCAyNDIsIDQxLCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCA3MiwgMjIzLCAyNTMsIDIzNSwgMjM2LCAxNiwgMSwgCisgICAgMjM1LCAxNDIsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIDIzNSwgMjcsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIAorICAgIDE1MCwgMjIzLCAyNTMsIDIzNSwgMjM2LCAxNiwgMSwgMTgzLCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCAyMDQsIDIyMywgCisgICAgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIDc1LCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCAyMjYsIDIyOSwgMjIzLCAyNTMsIAorICAgIDIzNSwgMjM2LCAxNiwgMSwgMjI0LCAyNDAsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIDE0OSwgMjIzLCAyNTMsIDIzNSwgCisgICAgMjM2LCAxNiwgMSwgMTk3LCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCAyMTgsIDk5LCAyMjMsIDI1MywgMjM1LCAyMzYsIAorICAgIDE2LCAxLCA2OSwgMjIzLCAyNTMsIDIzNSwgMjM2LCAxNiwgMSwgMjE1LCA3OSwgMjIzLCAyNTMsIDIzNSwgMjM2LCAxNiwgMSwgCisgICAgMjE0LCA4MiwgMjIzLCAyNTMsIDIzNSwgMjM2LCAxNiwgMSwgMjEzLCAxNjYsIDIyMywgMjUzLCAyMzUsIDIzNiwgMTYsIDEsIAorICAgIDIxMywgMTA1LCAyMjMsIDI1MywgMjM1LCAyMzYsIDE2LCAxLCAyMTIsIDE1MiwgNDEsIDE0MiwgMjQxLCA0OSwgOTEsIDU2LCAKKyAgICAyMzQsIDI3LCA5MSwgNTYsIDIyMiwgMjAyLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNDMsIDkxLCA5LCAyMTUsIDE0OCwgCisgICAgMjM4LCA0NywgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDU1LCA5MSwgNTYsIDI0OCwgNDEsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAKKyAgICA2MiwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDQ5LCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgMjEsIDkxLCA5LCAyMTUsIDE0OCwgCisgICAgMjM4LCA0OCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDYxLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgMzUsIDkxLCA5LCAyMTUsIAorICAgIDE0OCwgMjM4LCAyOCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDM3LCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNTgsIDkxLCA5LCAKKyAgICAyMTUsIDE0OCwgMjM4LCA0NCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDYwLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgMzYsIAorICAgIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCA1OSwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDIyLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgCisgICAgMjcsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAyMCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDUwLCA5MSwgOSwgMjE1LCAxNDgsIAorICAgIDIzOCwgNTIsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAzMCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDQxLCA5MSwgOSwgMjE1LCAKKyAgICAxNDgsIDIzOCwgMzksIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCA2NSwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDY0LCA5MSwgOSwgCisgICAgMjE1LCAxNDgsIDIzOCwgMTgsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCA0NSwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIDYzLCAKKyAgICA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNTQsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCA0MCwgOTEsIDksIDIxNSwgMTQ4LCAyMzgsIAorICAgIDE5LCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNDIsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAyNCwgOTEsIDksIDIxNSwgMTQ4LCAKKyAgICAyMzgsIDIzLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNTMsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAzMSwgOTEsIDksIDIxNSwgCisgICAgMTQ4LCAyMzgsIDMzLCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgMzQsIDkxLCA5LCAyMTUsIDE0OCwgMjM4LCAyNiwgOTEsIDksIAorICAgIDIxNSwgMTQ4LCAyMzgsIDU3LCA5MSwgOSwgMjE1LCAxNDgsIDIzOCwgNTEsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgCisgICAgOSwgMjE1LCAxNDgsIDIzOCwgMzIsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgNjQsIAorICAgIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgNjIsIDIxNiwgMjE5LCAyMjAsIDIzMywgCisgICAgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgNDYsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIAorICAgIDIzOCwgMjksIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgNDIsIDIxNiwgMjE5LCAKKyAgICAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgMjUsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgCisgICAgMjE1LCAxNDgsIDIzOCwgNTYsIDIxNiwgMjE5LCAyMjAsIDIzMywgMjUxLCA4NCwgOSwgMjE1LCAxNDgsIDIzOCwgMzgsIDM2LCAKKyAgICAxNDMsIDI1NCwgMTUwLCAzNiwgMTQzLCAyNTQsIDE3MiwgMjQ5LCAxNCwgMjQ0LCAxMSwgMjQ5LCAxOTMsIDIxNSwgMTY0LCAKKyAgICAyMjksIDQ0LCAyLCAyMTksIDkyLCAyMTgsIDIzMywgMTEwLCAyMzAsIDE4NCwgMjE4LCAyMzIsIDI0OSwgMjE5LCAyNTMsIAorICAgIDEyMywgMjQ2LCA5LCAyMTgsIDIzMSwgMTEwLCAyNTEsIDQ3LCAyMjQsIDQ5LCAyNTEsIDY4LCAyNTMsIDEyMywgMjI5LCA0MywgCisgICAgMjE0LCAyNSwgMjE0LCAxOSwgMjE0LCAxMTIsIDIzMSwgOCwgMjE0LCA5LCAyNDUsIDE4MCwgMjQyLCAxNTcsIDI0NSwgMTIsIAorICAgIDI0NSwgMTgwLCAyNDIsIDE1NywgMjU0LCAzNywgMjQ1LCAxODAsIDI0MiwgMTU3LCAyNTMsIDE0MCwgMjQyLCAxNTcsIDIsIAorICAgIDIzMSwgMTE1LCAxNTYsIDIzMCwgMTk5LCA4NywgMjE0LCAxMSwgMjQ5LCA3NywgMjMwLCAxOTksIDg3LCAyNDQsIDYxLCAKKyAgICAyMjQsIDE2NywgMjMwLCAxOTksIDg3LCAyMTQsIDExLCAyNDIsIDE4NiwgMjMwLCAxOTksIDg3LCAyNDMsIDIwMCwgMjMwLCAKKyAgICAxOTksIDg3LCAyMTQsIDM2LCAyNDIsIDE4NiwgMjMwLCAxOTksIDg3LCAyMzMsIDEwMywgMjI0LCAxNjcsIDIzMCwgMTk5LCAKKyAgICA4NywgMjE0LCAzNiwgMjQ5LCA3NywgMjMwLCAxOTksIDg3LCAyNDksIDc3LCAyMzAsIDE5OCwgMTU2LCAyMzAsIDE5OSwgMiwgCisgICAgMjQ0LCAxNTgsIDI0NCwgNjEsIDIyNCwgMTY3LCAyMzAsIDE5OSwgMiwgMjQ0LCAxNTgsIDIzMywgMTAzLCAyMjQsIDE2NywgCisgICAgMjMwLCAxOTksIDIsIDI0NCwgMTU4LCAyNDMsIDIwMCwgMjMwLCAxOTksIDIsIDI0NCwgMTU4LCAyMTgsIDIzOSwgMiwgMjQ0LCAKKyAgICAxNTgsIDI0MiwgMTU1LCAyMTksIDk1LCAyMjAsIDE3OSwgMjE5LCA5NSwgMjUwLCA1MywgMjIyLCA4NywgMjQ1LCA2LCAyMTYsIAorICAgIDE5MywgMjQ4LCAzNSwgMjE2LCAxOTMsIDIyNiwgMTg2LCAyMTYsIDE5MywgMjUwLCAyMTMsIDIxNiwgNzMsIDI1MCwgNTUsIAorICAgIDI1MSwgMTMzLCAyMjMsIDkzLCAyNDEsIDE2NCwgMjE4LCAyMzYsIDI1MSwgMTMzLCAyNDUsIDE4NCwgNjUsIDIzMiwgMCwgCisgICAgMjQ1LCAxODQsIDY1LCAyMjMsIDE4NCwgMjQxLCAxODgsIDI0MywgMjM3LCAyMzMsIDc4LCAyNDksIDE4MywgMjMxLCAyMzMsIAorICAgIDIzMywgNzcsIDI0NCwgMTQ0LCAyMzMsIDc3LCAyMzMsIDc4LCAyNDQsIDE2LCAyMzUsIDI1MiwgMjEzLCAyMjQsIDIzMCwgCisgICAgMTI4LCAyMTYsIDI0NSwgMjUzLCAxMDcsIDI0MiwgMTE5LCAyMzEsIDEzMSwgMjE0LCAyMywgMjE4LCA4LCAyMzMsIDUwLCAKKyAgICAyNTIsIDY4LCAyMjUsIDE5NCwgMjI0LCA0LCAyNTMsIDIyMywgMjQyLCAxMDQsIDI1MywgMjIzLCAyMjYsIDkyLCAyMjYsIAorICAgIDkzLCAyNTAsIDU2LCAyMTksIDU0LCAyNDIsIDYsIDIyMCwgMTgsIDY1LCAyMjUsIDE3NiwgMjMxLCAxNTIsIDIyNywgNjMsIAorICAgIDI1MSwgMTE5LCAyMjUsIDEwOSwgMjMzLCA2MCwgMjIzLCAxODUsIDI0OSwgODIsIDIyMywgMTg1LCAyNTIsIDc4LCAyNDksIAorICAgIDExMiwgMjIzLCAxODQsIDI0OSwgMzYsIDI0LCAyMjMsIDE4NCwgMjE5LCA4MSwgMjUxLCA5MywgMjE5LCAyMDIsIDI1MSwgCisgICAgNzgsIDI0MywgMjIxLCAyNDMsIDIxNywgMjIzLCAxMDgsIDIxOCwgMTkxLCAyMjUsIDExMSwgMjQ4LCAxMjAsIDIyNywgMTAxLCAKKyAgICAyMTgsIDIwOCwgMjQzLCAyMTgsIDIyMCwgMTU1LCAyNDQsIDYwLCAyNTAsIDIwOSwgMiwgMjE4LCAxODQsIDI0NywgMjQyLCAKKyAgICAyMTksIDIzNiwgMjQwLCAxMDUsIDI0OSwgODEsIDIyMCwgMjUwLCAyNDAsIDEwNCwgMjQwLCAxMDUsIDI0OSwgODEsIDI0NiwgCisgICAgNjIsIDI0OSwgMTExLCAyNTAsIDIxLCAxMzQsIDI1MCwgMTg2LCAyMzIsIDE5NCwgMjQ5LCAzMCwgMjQxLCA0MSwgMjI1LCAKKyAgICAxMTMsIDIyMCwgMTY0LCAyNTEsIDIxMywgMjUxLCA4OSwgMjI1LCAxMTQsIDY1LCAyNDQsIDIsIDI0OSwgMTEwLCAyNDMsIAorICAgIDI0OSwgMjQsIDIzNCwgNDEsIDIxNywgMjI3LCAyMTMsIDIxNiwgMjQxLCAyNTIsIDIyMiwgMTgzLCAyNTEsIDEwMywgMjQsIAorICAgIDI0OSwgNDMsIDIxMywgMjIyLCAyNDIsIDE2MCwgMjQ5LCAxNzIsIDI0MiwgMTYwLCAyMTYsIDE1MSwgMjQ2LCA0NSwgMjUxLCAKKyAgICAyMzgsIDIzMCwgMTYzLCAyNDksIDIwMCwgMjUxLCAyMzgsIDIzMCwgMTYyLCAyNTIsIDEwNCwgMjUxLCAxMDIsIDIyMywgCisgICAgMTg2LCAyMTMsIDE4OSwgMjI1LCA3NSwgMjUxLCAxNTgsIDI1MCwgMjA4LCAyMzUsIDEzNiwgMjUwLCAxNCwgMjE2LCAxOTMsIAorICAgIDI0NCwgMTMwLCAyNTAsIDEzLCAyNDQsIDYzLCAyNDQsIDY0LCAyMTksIDIwMCwgMjUyLCA3NywgMjI2LCAxMjIsIDIyNSwgCisgICAgMTI0LCAyNDksIDE0MywgMjUyLCA3OCwgMjE4LCAxMCwgMjE2LCAxOTMsIDI0OSwgNjgsIDI0NCwgMzYsIDIyNSwgMTk1LCAKKyAgICAyNDgsIDMyLCAyMzUsIDEzMSwgMjQ3LCA4NSwgMjUwLCAxNjQsIDIxOSwgNTMsIDIxMywgMjI1LCAyNTAsIDM1LCAyMzAsIAorICAgIDE5OSwgMjE0LCAxNDQsIDI1MCwgOTYsIDIyMiwgMTE3LCAyMjIsIDE0MSwgMjQyLCAxMjQsIDI1MCwgMTgzLCAyNTAsIDE2NSwgCisgICAgMjQwLCAyMzIsIDI0NCwgOTksIDIxMywgMjQxLCAyMjMsIDEwMiwgMjQ5LCAxNzMsIDI0NCwgNTUsIDIyNSwgMTM2LCAyNCwgCisgICAgMjQ0LCA1OSwgMjMxLCA0MCwgMjMwLCAxNzgsIDI1MCwgMTk4LCAyNDksIDIzMiwgMjQxLCAyMTYsIDI1MywgMTU2LCAyMjYsIAorICAgIDE4OSwgMjE2LCAyMjcsIDI0MSwgMjM0LCAyNDksIDIyMiwgMjE3LCAxOTUsIDIxNywgNjcsIDI0OSwgMjEzLCAyNTEsIDEyNSwgCisgICAgMjI2LCA1MiwgMjUzLCAxNTUsIDIxNCwgMTUwLCAyNDMsIDg2LCAyNDcsIDE0OSwgMjQxLCAxNDIsIDIyMCwgMTIsIDIzMiwgCisgICAgMzksIDI1MSwgMTY4LCAyNDMsIDg3LCAyNDcsIDE5MiwgMjUxLCA5MiwgMjQ0LCAyMSwgMjI1LCAxNjUsIDI1MCwgMTczLCAKKyAgICAyNywgMjI4LCAxNTgsIDIzMCwgMTU1LCAyNywgMjI4LCAxNTMsIDIyMiwgMTMwLCAyNDIsIDgwLCAyNywgMjM0LCAxNDMsIAorICAgIDIxNiwgMTQ4LCAyMTQsIDEzNSwgMjcsIDIyMiwgMTExLCAyMjMsIDM1LCAyMjAsIDE5MSwgMiwgMjIyLCAxNDMsIDIxNywgCisgICAgMTk3LCAyMjQsIDY4LCAyNCwgMjUyLCA3OCwgMjIwLCAzMywgMjQsIDIyMCwgMzMsIDI1MSwgMTEyLCAyNTIsIDQzLCAyNCwgCisgICAgMjQxLCAzNiwgMjUwLCA1NywgMjQ0LCA0MiwgMjE5LCAyNDcsIDIyMywgMzYsIDIxOCwgMjEyLCAyMTYsIDE1MiwgMjQwLCAKKyAgICAyMzMsIDIyNCwgNjksIDI1NCwgMzgsIDI0NCwgMCwgMjIzLCA0NywgMjQ0LCAwLCAyMTgsIDE4NiwgMjQwLCAyMjIsIDI1MSwgCisgICAgNDgsIDI0MCwgMjIyLCAyLCAyNDMsIDcwLCAyMjcsIDk1LCAyNTEsIDQ4LCAyMzUsIDEzMSwgMjI1LCAxMTksIDIyNywgOTQsIAorICAgIDI0NSwgMTEsIDIyNSwgMTE5LCAyMjcsIDk0LCAyNDAsIDIzMSwgMjUyLCA2NCwgMjUzLCA5NywgMjE3LCAyMDUsIDIzMiwgCisgICAgMzksIDI0MCwgMjI3LCAyMzIsIDE2NiwgMjQwLCAyMjcsIDI0OSwgMTE1LCAyMTksIDY1LCAyMjIsIDExNiwgMjQ3LCAyNTAsIAorICAgIDIxOSwgNjUsIDI0NCwgMTQ4LCAyMzUsIDE0NywgMjMzLCAxMTMsIDIzNSwgMTMxLCAyNTAsIDE1OCwgMjQ1LCAxMSwgMjUwLCAKKyAgICAxNTgsIDIyNCwgMzMsIDIzMCwgMTgyLCAyMjYsIDIzOCwgMjE0LCAyNSwgMjUxLCA1MiwgMjQ5LCA4NCwgMjE3LCA2MCwgCisgICAgMjMzLCA0MiwgMjI0LCA3MCwgMjUwLCAxNTYsIDI0NiwgNTAsIDI0OSwgNzUsIDIxMywgMjQ0LCAyMTksIDI1NCwgMjE5LCAKKyAgICAyNTIsIDI0MCwgMjMyLCAyMjQsIDQ1LCAyNDIsIDE0NiwgMjIwLCAyMzcsIDIzMCwgMjE1LCAyMjMsIDk2LCAyNTAsIDQ1LCAKKyAgICAyNDcsIDkwLCAyMjUsIDIwNSwgMjUxLCAxMjYsIDI0NSwgMTI2LCAyMjcsIDEwMywgMjE5LCAxODQsIDIyMCwgMjMyLCAyNTEsIAorICAgIDUxLCAyNTQsIDMsIDI0MSwgNDAsIDIzMywgMTQ0LCAyNTEsIDIzNiwgMjQ0LCA1OSwgMjE2LCAxNTEsIDI0NCwgNTksIDI1MSwgCisgICAgMTMyLCAyMTYsIDU1LCAyNDEsIDIzMiwgMjUwLCA0NiwgMjUyLCAxMDQsIDI1MCwgNDYsIDI0MywgMjEyLCAyNTIsIDEwNCwgCisgICAgMjUwLCA0NiwgMjUxLCAxNjAsIDIyNiwgNzAsIDIzNCwgMzUsIDIyNSwgMTI4LCAyNDYsIDQyLCAyNTAsIDE5OSwgMjUyLCAKKyAgICA5NSwgMjUwLCAxOTksIDI0NywgODQsIDIzMCwgMTgzLCAyNDQsIDE1OCwgMjQ5LCA4NSwgMjQ0LCAxNTgsIDIxNywgNjEsIAorICAgIDI0NCwgMTU4LCAyMjQsIDcxLCAyNDQsIDE1OCwgMjUwLCAxNTcsIDI0NCwgMTU4LCAyNDYsIDUxLCAyNDQsIDE1OCwgMjE5LCAKKyAgICAxNzMsIDIxMywgMjQ0LCAyNDAsIDIzMywgMjQ0LCAxNTgsIDIzMCwgMjE2LCAyNDQsIDE1OCwgMjQ3LCA5MSwgMjQ0LCAxNTgsIAorICAgIDIyNSwgMjA2LCAyNDQsIDE1OCwgMjQzLCAyMTUsIDI0NCwgMTU4LCAyNDIsIDMsIDI0NCwgMTU4LCAyMTMsIDIxMSwgMjQ0LCAKKyAgICAxNTgsIDI1MSwgMjQ3LCAyNDQsIDE1OCwgMjI2LCAxNzIsIDI0NCwgMTU4LCAyMjUsIDIwNiwgMjI4LCAxNjQsIDIyNiwgCisgICAgMTA2LCAyMjUsIDY3LCAyNDQsIDIzNywgMjQ1LCAxODMsIDIyOCwgMTY0LCAyMzAsIDE4MCwgMjE2LCAyMzIsIDY3LCAxMTQsIAorICAgIDIyNSwgMTQxLCAyNTIsIDk5LCAyMzUsIDIzOSwgNjcsIDExOSwgMjI1LCAxNDEsIDI1MiwgOTksIDIzNSwgMjM5LCA2NywgCisgICAgNDIsIDIyNSwgMTQxLCAyNTIsIDk5LCAyMzUsIDIzOSwgNjcsIDQ2LCAyMjUsIDE0MSwgMjUyLCA5OSwgMjM1LCAyMzksIAorICAgIDI0NCwgNTMsIDI0MSwgMjU1LCA1MiwgMjE0LCAxNywgMjQxLCAyNTUsIDUyLCAyMjcsIDgxLCAyNDEsIDI1NSwgNTIsIDIxNywgCisgICAgODksIDExNCwgNTIsIDIxNywgODksIDExOSwgNTIsIDI0OSwgMjEyLCAyNDEsIDI1MCwgNTIsIDIyNywgNDAsIDI0MSwgMjUwLCAKKyAgICA1MiwgMjQ5LCA2MywgMjEzLCAyMDcsIDI0MSwgMjM0LCAyNDQsIDIzOCwgMjI5LCAxODUsIDIxOCwgOTgsIDIzNSwgMTI2LCAKKyAgICAyNDYsIDQ3LCAyMzQsIDkxLCAyNTEsIDE3MCwgMjEzLCAyMDcsIDI0OSwgMTg2LCAyMjUsIDE0LCAyNDEsIDI1MywgMjI1LCAKKyAgICAxMTAsIDIzMSwgMjQwLCAyMjAsIDE4NCwgMjUzLCAxMTksIDIyMCwgMTg0LCAyNDEsIDE1MCwgMjIwLCAxODQsIDIxMywgCisgICAgMjA3LCAyMjIsIDE1NiwgMjEzLCAyMDcsIDI1MSwgMTExLCAyNDMsIDI1NCwgMjUxLCAxOSwgMjM1LCAyNTIsIDIyMCwgOTUsIAorICAgIDI1MSwgMTgsIDIzNSwgMjUyLCAyMjAsIDk1LCAyNTEsIDg4LCAyNDIsIDE3MCwgMjMxLCAyNDgsIDIxMywgMjA4LCAyNDQsIAorICAgIDE0MiwgMjMxLCAyNDksIDI0LCAyMTMsIDIwOSwgMjQxLCA0NiwgMjQxLCAyNDksIDExNywgMjMxLCAxMjMsIDI0MSwgNDYsIAorICAgIDI0MSwgMjQ5LCAxMTcsIDIxMywgMjA2LCAyNDEsIDQ2LCAyNDEsIDI0OSwgMjI1LCAxMzMsIDIyNywgOTMsIDIxMywgMjA5LCAKKyAgICAyLCAyNTEsIDM1LCAyNDUsIDE4MSwgMjUxLCA2OSwgMiwgMjE0LCAyMjMsIDIyNiwgNDQsIDIsIDI1MSwgMTM1LCAyNDIsIAorICAgIDE2LCAyMzEsIDI0OSwgMiwgMjQyLCA4OSwgMjI1LCAyNDEsIDIzMSwgMjM3LCAyMzEsIDI0OSwgMiwgMjE2LCA2MSwgMjI3LCAKKyAgICA3NCwgMjMxLCAyNDgsIDIyNywgNzQsIDIxMywgMjA4LCAyNTIsIDEwMywgMjQ5LCAxMjksIDIxMywgMTkyLCAyMjUsIDcwLCAKKyAgICAyMzUsIDEzMSwgMjI3LCA4OSwgMjM1LCAxMzEsIDI0MiwgMTQ1LCAyNDIsIDE5OCwgMjUyLCAxMDQsIDI1NCwgMjIsIDI0NCwgCisgICAgMjQyLCAyNTQsIDY5LCAyNTQsIDcwLCAyMzAsIDIwNiwgMjM2LCAxLCAyMjAsIDI4LCAyMzUsIDIyOSwgMjQ3LCAyNDEsIAorICAgIDIyNiwgNDMsIDI0MiwgODYsIDI0OCwgMTI0LCAyMzIsIDIzMCwgMjMwLCAzMCwgMjI1LCAxMzIsIDI0NCwgMTU5LCAyMzEsIAorICAgIDIwNSwgMjQyLCAxNSwgMjUyLCA1OCwgMjI1LCAxMzUsIDIxOCwgMTE3LCAyMjUsIDE5OCwgMjM0LCA3MywgNzcsIDIzMiwgCisgICAgMTY2LCAyMzMsIDM0LCAyMjMsIDEzMCwgMjQzLCAzMCwgMjE5LCA3MSwgMjM0LCA3MiwgMjUxLCA5NywgMjQ5LCA4NywgMiwgCisgICAgMjQxLCAyMTEsIDIxNCwgMywgMjUxLCAyNDUsIDI0MSwgMjExLCAyNTEsIDYzLCAyNDEsIDIxMSwgMTE3LCAyNDEsIDIwOSwgCisgICAgMjE5LCAxOTgsIDI0MSwgMjExLCAyNDIsIDk4LCAyNDEsIDIxMSwgMjQxLCAyMTIsIDIsIDY4LCAyNTEsIDEzMSwgMjQxLCAKKyAgICAyMTEsIDI0MiwgMTA0LCAyNDEsIDIxMSwgMjEzLCAzMywgMjQxLCAyMTEsIDIyNSwgMTUsIDI0MSwgMjExLCAyNDEsIDIxMiwgCisgICAgMiwgMjIzLCAxODYsIDIyMywgMTk3LCAyNDEsIDIwOSwgMjQxLCAyMTIsIDI0OCwgMzIsIDI0NywgMjAxLCAyMjEsIDUsIDIsIAorICAgIDExOCwgNjIsIDIzNSwgMjEyLCAyNDUsIDEyOSwgMTc3LCAyNTEsIDQ1LCAyNTQsIDIxLCA4NywgMjUxLCAxMjAsIDIyMCwgCisgICAgMjAsIDg3LCAyNDksIDE2NiwgODcsIDIxOSwgMTc4LCAyMTgsIDE5MywgODcsIDI0NiwgNDAsIDI0OCwgMTAyLCA4NywgMjI1LCAKKyAgICAxOTksIDY1LCAyMjUsIDEyOSwgMjQ0LCAzMCwgMjUxLCAxODEsIDI0NywgMTE3LCA4NywgMjE5LCAxOTEsIDI1MiwgNzcsIAorICAgIDIxNywgMTAyLCAyNTIsIDc3LCA2NywgMjQ0LCAyMCwgMjQwLCAyMDEsIDIyNSwgMTM5LCA4NywgMjMwLCAyMTksIDI1MiwgCisgICAgOTAsIDI0OSwgMzksIDI0NCwgMjU1LCAxMDcsIDI0NywgODYsIDUyLCAyNDksIDc5LCAyNTAsIDE3NCwgMjUyLCA2MywgMiwgCisgICAgMjEzLCAzMSwgNTIsIDI1MiwgNjMsIDIsIDI0NywgODYsIDUyLCAyNTIsIDYzLCAyLCAyNDUsIDE0LCA1MiwgMjUyLCA2MywgCisgICAgMiwgMjI1LCAxMDgsIDUyLCAyMzAsIDIxOSwgMiwgMjEzLCAyMjAsIDI1MCwgNzQsIDIsIDIxNSwgMTI0LCAyMTYsIDE4OSwgCisgICAgMjQsIDIxMywgMzEsIDUyLCAyMjIsIDk3LCAyMjYsIDQyLCAyNDksIDE0NywgMjUxLCA2NywgMjMwLCAyNTUsIDI0NCwgMjUsIAorICAgIDI0NywgMTM3LCAyMjcsIDI3LCAyNDcsIDE0MiwgMjQ2LCA0LCAyNDQsIDc2LCAyNDQsIDksIDIyNywgNDAsIDI0NCwgNzYsIAorICAgIDI0NCwgOSwgMjI2LCAyMDEsIDIsIDI0OSwgNDEsIDIyNiwgMjAxLCAyNDQsIDE1MSwgMjE1LCAxMzQsIDI1MCwgMjA0LCAKKyAgICAyMTcsIDIyNiwgMjUwLCAyMDQsIDI1MCwgMTc1LCAyMzUsIDIzOSwgMjUwLCA3NCwgMiwgMjE1LCAxMjQsIDIxNiwgMTg4LCAKKyAgICAyNTAsIDc0LCAyLCAyNDYsIDU4LCAyMTYsIDE4OCwgMjUyLCA2MCwgMjUwLCA3MywgMjQ5LCAxOTksIDIyNSwgMTAsIDIyMywgCisgICAgODcsIDIyNSwgMTAsIDIyNiwgMTQ3LCAyMTksIDYxLCAyMjMsIDQyLCAyMTYsIDE4MCwgMjIzLCA0MiwgMjUxLCAxMTYsIAorICAgIDIxOCwgMzksIDIzMywgNzUsIDIyOCwgMTU2LCAyMjgsIDE1NywgMiwgMjQ4LCAzMSwgMjQ5LCA4NiwgMjQ5LCAxOTMsIDI1MSwgCisgICAgMTE3LCAyMjcsIDQwLCAyNTEsIDExNywgMjQyLCAxMDQsIDI1MSwgMTE3LCAyNTEsIDEzMSwgMjUxLCAxMTcsIDIyNywgMjMsIAorICAgIDI1MSwgMTE3LCAyNTEsIDExNCwgMjMwLCAyNSwgMjUyLCA5MywgMjIyLCAxMDUsIDIzMSwgMTI0LCAyMTcsIDIxMCwgMjI0LCAKKyAgICAxNiwgMjI2LCAxOTksIDI0NCwgMTI3LCAyMzIsIDM5LCAyMjIsIDE0MCwgMjU0LCAwLCAyMjUsIDMxLCAyNTQsIDE1NywgCisgICAgMjMyLCAxNjgsIDI1MCwgNjMsIDIzMSwgMTM2LCAyMjYsIDI1MywgMjE2LCAxOTYsIDIzNSwgMjQ4LCAyMTYsIDE5NiwgMjI2LCAKKyAgICAyMDYsIDI0NSwgMjM2LCA4NywgMjM1LCAyNDUsIDI0NSwgNzgsIDI0NSwgNzksIDIsIDI0NiwgNTgsIDc2LCA0OSwgMjQ5LCAKKyAgICAxOTMsIDIzMiwgNiwgMiwgMjMyLCAxNjIsIDI0NCwgNDIsIDI0OSwgMTkzLCAyMzIsIDYsIDIsIDIyNCwgNDgsIDI0NCwgNDIsIAorICAgIDIyNywgNDAsIDIzMiwgNiwgMiwgMjI0LCA0OCwgMjQ0LCA0MiwgMjI3LCA0MCwgMjMyLCA2LCAyLCAyMzIsIDE2MiwgMjQ0LCAKKyAgICA0MiwgMjI1LCAxMTYsIDIyNSwgMTE3LCAyNDAsIDIzNSwgMjI5LCAxNjYsIDIzMCwgMjI5LCAyMjUsIDI0OSwgMjMwLCAyMjksIAorICAgIDIyNSwgMjUwLCAyLCA5NSwgNzYsIDI1MywgMTIzLCAyMzMsIDcwLCAyMTQsIDE1MywgMjMwLCAyMjgsIDIzMCwgMjI5LCAKKyAgICAyMjUsIDI1MCwgMjI3LCA5NiwgMjI4LCAxODYsIDIzMCwgMjI5LCAyMjUsIDI0OCwgMjU0LCAxLCAyLCAyNTIsIDQ5LCAyNTAsIAorICAgIDE5OCwgMjE0LCAxNTAsIDI1MCwgMTk4LCAyMTcsIDIwNywgMjI0LCA2MywgMjE0LCAxNDksIDIxNiwgMjUsIDk1LCAyNTMsIAorICAgIDE2MiwgMjQ5LCAxOTUsIDk1LCAyNCwgMTMyLCAyMjcsIDQwLCAyNDksIDIyOSwgMjUzLCAxNjIsIDI0OSwgMTk1LCA5NSwgCisgICAgMjQsIDEzMiwgMjI3LCA0MCwgMjQ5LCAyMjksIDI1MywgMTYzLCAyLCAzNiwgMTIyLCAyMjYsIDI0NCwgMjQ5LCAxOTUsIAorICAgIDI0NiwgNTgsIDI0LCAyMTUsIDEyNCwgMjI3LCA0MCwgMjQ5LCAyMjksIDI1MywgMTYyLCAyNTMsIDI1NSwgMjQ2LCA1OCwgCisgICAgMjQsIDIxNSwgMTI0LCAyMjcsIDQwLCAyNDksIDIyOSwgMjUzLCAxNjIsIDExNSwgMjUxLCA2NiwgODcsIDEyNCwgMjUxLCAKKyAgICA2NiwgODcsIDIxOSwgMTk1LCAyLCAyNTAsIDE5MiwgOTAsIDIxOSwgMTk0LCAyMTksIDE5NSwgMiwgMTIyLCAyMTksIDIxOCwgCisgICAgMjE0LCAxOSwgMjE5LCAxOTUsIDIsIDEzMywgMjE5LCAyMTgsIDIxNCwgMTgsIDI1MiwgMzUsIDI0NSwgMTI5LCAyMjUsIAorICAgIDE2MSwgMjMzLCA2NiwgMjMyLCAxNiwgMjQyLCAxNjAsIDIyMywgMTQ0LCAyMzIsIDE2LCAyNDIsIDE2MCwgMjMyLCAyMDQsIAorICAgIDIsIDIzNSwgMjIyLCAyMjYsIDc0LCAyNDksIDE5MywgMjMyLCAyMDQsIDIsIDIzNCwgMTQ0LCAyMzQsIDE0NCwgMjMyLCAKKyAgICAyMDMsIDIyNywgNDAsIDIzMiwgMjAzLCAyNTEsIDIyMSwgMjUxLCAyMjIsIDIsIDI1MCwgMTkyLCA5MCwgMjUxLCAxMTUsIAorICAgIDIzMiwgMjMzLCA4NywgMjI0LCA2NCwgMjUxLCAxNSwgMjUyLCAxMDIsIDIsIDEzMiwgNzYsIDQ5LCAyNDUsIDEwMSwgMiwgCisgICAgMTMyLCA3NiwgNDksIDIyNywgNjMsIDIsIDI0NCwgMjU0LCAxNTIsIDIsIDQyLCA0NiwgNzYsIDQ5LCAyMTksIDIyNSwgMiwgCisgICAgOTUsIDc2LCA0OSwgMjE2LCAyMjcsIDIsIDIxNSwgMTI0LCA3NiwgNDksIDIyOCwgMTg2LCAxMjIsIDIxNSwgMTU0LCAyNDUsIAorICAgIDE0OCwgODcsIDIzNCwgMTQyLCAyMTcsIDIwMCwgMjM1LCAyMTYsIDE2LCAzMSwgNywgNiwgMjMzLCAzMywgMjM1LCAyMTYsIAorICAgIDE2LCAzMSwgNywgMywgMjMzLCAzMywgMjM1LCAyMTYsIDE2LCAzMSwgMjI4LCA1NSwgMjM1LCAyMTYsIDE2LCAzMSwgMjE4LCAKKyAgICAxMjgsIDIzNSwgMjE2LCAxNiwgMzEsIDcsIDIzMywgMzMsIDI0NCwgNjUsIDI0NSwgMTI5LCAyMTYsIDIyMiwgMjEzLCAxODcsIAorICAgIDI0MiwgNCwgMjI4LCAzOCwgMjQsIDI1MSwgMTIxLCAyNDEsIDUyLCAyMjUsIDE4MiwgMjMxLCAzOSwgMjE3LCAyMDgsIDI0OSwgCisgICAgNTQsIDI1MiwgNzgsIDIyMCwgNTMsIDIyNSwgMTQzLCAyMTksIDk2LCAyLCAyMzEsIDM3LCAyNDcsIDc0LCAyMzUsIDEzMSwgCisgICAgMTYsIDMxLCAyNTEsIDIzMywgMjE2LCAxNzgsIDI0NSwgMTE0LCA4MywgNDEsIDI1MSwgMTUsIDY3LCA0MSwgMjUxLCAxNSwgCisgICAgMjMzLCAxMDgsIDIyNCwgNCwgMjQ5LCAyMjgsIDIzMywgMTA4LCAyNTEsIDEzMSwgMjQ5LCAyMjgsIDIzMywgMTA4LCAyMjcsIAorICAgIDIzLCAyNDcsIDIwMCwgMjMzLCAxMDgsIDI1MSwgMTMxLCAyNDcsIDIwMCwgMywgMjI3LCAyMywgMjQ3LCAyMDAsIDMsIDI1MSwgCisgICAgMTMxLCAyNDcsIDIwMCwgMjE1LCAxMzMsIDIyNCwgNCwgMjE2LCAxODMsIDI0NiwgNTksIDIyNCwgNCwgMjE2LCAxODMsIAorICAgIDIxNSwgMTMzLCAzLCAyMjQsIDQsIDIxNiwgMTgzLCAyNDYsIDU5LCAzLCAyMjQsIDQsIDIxNiwgMTgzLCAyNDksIDE5NywgCisgICAgMjQ0LCAxNTksIDEyMiwgMjI3LCAxMDYsIDI0OSwgMTk3LCAyNDQsIDE1OSwgMTE3LCAyMjcsIDEwNiwgMjQ5LCAxOTcsIAorICAgIDI0NCwgMTU5LCAxMzMsIDIyNywgMTA2LCAyNDksIDE5NywgMjQ0LCAxNTksIDI0MywgMjM3LCAyMjcsIDEwNiwgMjQ5LCAKKyAgICAxOTcsIDI0NCwgMTU5LCAyNDQsIDUwLCAyMjcsIDEwNiwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyMjAsIDUzLCAyMjcsIDEwNiwgCisgICAgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyMjEsIDQzLCAyMjcsIDEwNiwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyNDUsIDE1MCwgMjI3LCAKKyAgICAxMDYsIDI0OSwgMTk3LCAyNDQsIDE1OSwgMjI5LCAzMSwgMjI3LCAxMDYsIDI0OSwgMTk3LCAyNDQsIDE1OSwgMjE3LCAyMDEsIAorICAgIDIyNywgMTA2LCAyNDksIDE5NywgMjQ0LCAxNTksIDI0NSwgMTI1LCAyMjcsIDEwNiwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAKKyAgICAyMTYsIDQyLCAyMjcsIDEwNiwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyMjcsIDU4LCAyNDksIDE5NywgMjQ0LCAxNTksIDIxNiwgCisgICAgMjIsIDI0OSwgMTk3LCAyNDQsIDE1OSwgMjE3LCA5NCwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyNDMsIDIzMywgMjQ5LCAxOTcsIAorICAgIDI0NCwgMTU5LCAyNDQsIDQ4LCAyNDksIDE5NywgMjQ0LCAxNTksIDIyMCwgNDksIDI0OSwgMTk3LCAyNDQsIDE1OSwgMjIxLCAKKyAgICA0MiwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyNDUsIDE0OSwgMjQ5LCAxOTcsIDI0NCwgMTU5LCAyMjksIDMwLCAyNDksIDE5NywgCisgICAgMjQ0LCAxNTksIDIxNywgMTk5LCAyNDksIDE5NywgMjQ0LCAxNTksIDI0NSwgMTIzLCAyNDksIDE5NywgMjQ0LCAxNTksIAorICAgIDIxNiwgNDAsIDIzMCwgMTg3LCAyNDMsIDIwMSwgMjE2LCAyNDcsIDIxNiwgMjE1LCAyMTksIDg4LCA2NSwgMjMzLCAxMSwgCisgICAgMjIwLCA5NiwgNjUsIDIzNSwgMTMyLCAyMzAsIDE3NiwgMjQyLCAxMDIsIDI0NCwgMTU5LCAyLCAyMjAsIDIsIDI0NCwgMjM3LCAKKyAgICAyNDQsIDE1OSwgMiwgMjE3LCAyMjIsIDY1LCAyMzUsIDU2LCAyMjAsIDIsIDI0NCwgMTU5LCAyLCAyMjcsIDQwLCAyMzAsIAorICAgIDE4MCwgMjIwLCAyLCAyNDQsIDE1OSwgMiwgMjI3LCA0MCwgMjMwLCAxODEsIDI0LCAyMjAsIDIsIDI0NCwgMjM3LCAyMjAsIAorICAgIDIsIDI0NCwgMTU5LCAyLCAyMjcsIDQwLCAyMzAsIDE4MSwgMjQsIDI0OSwgMTY4LCAyMTgsIDE5MiwgMjIwLCAyLCAyNDQsIAorICAgIDE1OSwgMiwgMjI3LCA0MCwgMjMwLCAxODEsIDI0LCAyMTcsIDU4LCAyNDQsIDIzNywgMjIwLCAyLCAyNDQsIDE1OSwgMiwgCisgICAgMjQyLCA4LCAyMjAsIDIsIDI0NCwgMTU5LCAyLCAyNDAsIDIzNCwgMjEzLCAyMTgsIDI0NCwgMTU4LCAyMjAsIDIsIDI0NCwgCisgICAgMTU5LCAyLCAyMjAsIDIsIDI0NCwgMjM3LCAyNDQsIDE1OSwgMjIyLCAxMzUsIDI0OCwgMTMsIDI0NCwgMiwgMjIzLCAyMzgsIAorICAgIDI0NCwgMTU4LCAyMjAsIDIsIDI0NCwgMTU5LCAyLCAyNDEsIDIxMCwgMjQ0LCAyMzcsIDIyMCwgMiwgMjQ0LCAxNTksIDIsIAorICAgIDIxOCwgMjM0LCAyMjAsIDEsIDI0NCwgMTU4LCAyMjksIDE2OSwgMjQ0LCAxNTgsIDIxNSwgMTU4LCAyNDQsIDE1OCwgMjQ0LCAKKyAgICAxNTksIDIsIDI0OSwgMTY4LCAyMTgsIDE5MiwgMjI2LCA2NywgMjQ0LCAxNTgsIDI0OSwgMTQxLCAyNDQsIDE1OCwgMjQ0LCAKKyAgICAxNTksIDIxNywgOTEsIDExOCwgMjM0LCA3MiwgMjM0LCA3MSwgMjQ0LCAxNTksIDIsIDI0OSwgMTkzLCAyNDQsIDIzNywgCisgICAgMjQ0LCAxNTksIDIsIDIxOSwgMzEsIDIxNiwgMjMzLCAyNCwgMjEzLCAyMTgsIDI0NCwgMjM5LCAyNDQsIDE1OSwgMiwgMjE5LCAKKyAgICAzMSwgMjE2LCAyMzMsIDI0LCAyMTcsIDU4LCAyNDQsIDIzNywgMjQ3LCAxNDQsIDI0NCwgMTU4LCAyNTQsIDE3LCAyNDQsIAorICAgIDE1OCwgMjI1LCAxMDcsIDI0NCwgMTU4LCAyNDksIDU2LCAyNDQsIDE1OCwgMjI2LCA0NiwgMjQ0LCAxNTgsIDI0NCwgMTU5LCAKKyAgICAyLCAyMzIsIDE3OSwgNjUsIDIxNiwgMTYyLCAyNDcsIDE0NCwgMjUxLCAxNywgMjIzLCAyMzgsIDI0NCwgMTU4LCAyNDQsIAorICAgIDEyMSwgMjQ0LCAxNTgsIDIxNCwgNCwgMjQ0LCAxNTgsIDIyMCwgMTksIDI0NCwgMTU4LCAyMTcsIDI0LCAyNDQsIDE1OCwgCisgICAgMjMyLCAxNjksIDI0OSwgNTYsIDI0NCwgMTU4LCAyNDQsIDE1OSwgMiwgMjI3LCA0MCwgMjMwLCAxODEsIDI0LCAyNDksIAorICAgIDE2OCwgMjE4LCAxOTIsIDI0NCwgMTU5LCAyMjIsIDEwOSwgMjM1LCAyNTIsIDI0NCwgMTIyLCAyNTMsIDEyOSwgMjQ0LCAKKyAgICAxNTgsIDI0NCwgMTgsIDI0NCwgMTU4LCAyNDcsIDExNywgMjQ0LCAxNTgsIDI0NCwgMTU5LCAyMTMsIDIxNiwgMjMwLCAxODAsIAorICAgIDI0NCwgMTU5LCAyLCAyMzEsIDE0OSwgMjMxLCAyMDcsIDI0MiwgMTAyLCAyNTAsIDE1NywgMjQ0LCAxNTksIDIsIDIyMCwgMiwgCisgICAgMjQ0LCAyMzcsIDI1MCwgMTU3LCAyNDQsIDE1OSwgMiwgMjE3LCAyMjIsIDY1LCAyMzUsIDU2LCAyMjAsIDIsIDI1MCwgMTU3LCAKKyAgICAyNDQsIDE1OSwgMiwgMjI3LCA0MCwgMjMwLCAxODAsIDIyMCwgMiwgMjUwLCAxNTcsIDI0NCwgMTU5LCAyLCAyNDEsIDIxMCwgCisgICAgMjQ0LCAyMzcsIDI1MCwgMTU3LCAyNDQsIDE1OSwgMiwgMjEzLCAxODQsIDIyMCwgMywgMjM0LCA3MSwgMjUwLCAxNTcsIAorICAgIDI0NCwgMTU5LCAyLCAyNDksIDE5MywgMjQ0LCAyMzcsIDIyNSwgMTA3LCAyNTAsIDE1NywgMjQ0LCAxNTgsIDI0OSwgNTYsIAorICAgIDI1MCwgMTU3LCAyNDQsIDE1OCwgMjE0LCA0LCAyNTAsIDE1NywgMjQ0LCAxNTgsIDI0NCwgMTU5LCAyLCAyMjgsIDE4NiwgCisgICAgMjQyLCAxMzksIDI0MywgMTAsIDI0NCwgMTU5LCAyLCAyMjcsIDgxLCAyNDMsIDEwLCAyMjYsIDQ0LCAyNTEsIDk0LCAyNDgsIAorICAgIDI2LCAyMjIsIDg4LCAyMzAsIDIxNSwgMjQxLCAyMTMsIDIzMCwgMjE1LCAyMTksIDE5NiwgMjMwLCAyMTUsIDI0MSwgMjQ0LCAKKyAgICAyMjYsIDQ0LCAyMjQsIDQ3LCAxMjIsIDI0MSwgMjU0LCAyMjYsIDQ0LCAyMjQsIDQ3LCAyNTEsIDEwNCwgMjQxLCAyNTAsIAorICAgIDIzNSwgMjUyLCAyNTAsIDExMywgMjI2LCA0NCwgMjQzLCAyMDgsIDIyNiwgNDQsIDIsIDIyNSwgMTA3LCAyNDQsIDE1OCwgCisgICAgMjI2LCA0NCwgMiwgMjQ0LCAxMCwgMjQxLCAyNDksIDIyMywgMTA0LCAyNDEsIDE5OCwgMjE5LCA4MywgMjMyLCAyMDIsIAorICAgIDIyNCwgNTMsIDI1MCwgMTc2LCAyNDEsIDE0OCwgMjE2LCAyMDUsIDI0MSwgMTQ4LCAyMTYsIDIwNiwgMiwgMjUxLCA0MywgCisgICAgMjI4LCAxNjQsIDIxNiwgMjA1LCAyMzEsIDk5LCAxNzcsIDIyNCwgNTQsIDIxOSwgODksIDIxNiwgMjAzLCAyMTYsIDIwNCwgCisgICAgMjUwLCAxNzYsIDI1MSwgMjEsIDIyNywgNjAsIDI1MSwgMjEsIDIxNiwgMTU5LCAyNTEsIDIyLCAyMTksIDY5LCAyMzEsIDAsIAorICAgIDI1NCwgMzksIDI0NCwgNjYsIDI0NSwgOTUsIDIyNSwgMTMzLCAyNTAsIDE3NiwgMjI3LCA2MCwgMjI1LCAxMzMsIDI1MCwgCisgICAgMTc2LCAyMTcsIDIzOSwgMjI3LCA2MCwgMjE3LCAyMzksIDI1MywgOTYsIDIyNywgNjAsIDI1MywgOTYsIDIyNCwgMTEsIAorICAgIDIxNCwgMjI0LCAyNDgsIDksIDIxNiwgMTUwLCAyNTMsIDE1NywgMjMyLCAxNzIsIDIxNiwgMjExLCAyMzAsIDIwOSwgMjMwLCAKKyAgICAxODYsIDIyNCwgNTIsIDIxOCwgMjA3LCAyMjQsIDUyLCAyMzAsIDE4NiwgMjUwLCAyMTQsIDI1NCwgMTM0LCAyMTYsIDIwMiwgCisgICAgMjIwLCAxOTYsIDIyMywgODQsIDIxOSwgMTg5LCAxOTksIDIxNiwgMjA5LCAyMzMsIDIsIDcxLCAyMTYsIDIwOSwgMjMzLCAyLCAKKyAgICAyNDksIDEyOSwgNTIsIDIyNSwgMTMzLCAyNTAsIDE2MSwgMjIzLCAxOTcsIDIzMywgMiwgMjE2LCAxODAsIDI0NCwgNDMsIAorICAgIDIyNywgNjMsIDIyNSwgMTE4LCAyNDcsIDc3LCAyMjgsIDE4NiwgMjQ1LCA4NCwgNTIsIDIyMCwgMCwgODcsIDIyOCwgMTg2LCAKKyAgICAyMjAsIDAsIDg3LCAyMjUsIDksIDIzMiwgMjIyLCAyMzUsIDI1MiwgMjM1LCAxNTUsIDIyNSwgMTczLCA4NywgMjQ3LCAxMDAsIAorICAgIDIyOCwgMTYzLCAyMzIsIDIyMiwgODcsIDIyNSwgMTEyLCAyMTQsIDI1LCA4NywgMjI4LCAxNzcsIDIxNCwgMjUsIDg3LCAKKyAgICAyNTEsIDE4MCwgMjI4LCAxODYsIDI1MSwgMTc5LCAyNTEsIDE3OCwgMjMwLCAxODYsIDI1MSwgMTc4LCAyMjYsIDg4LCAyMjgsIAorICAgIDE4NiwgMjI2LCA4NywgMjUwLCAzNywgMjQ5LCA2NCwgMjMxLCAxMjAsIDg3LCAyMTMsIDIwNSwgODcsIDIyMywgMjExLCAKKyAgICAyNTIsIDEwNCwgODcsIDIxNiwgMjQ4LCAyMTQsIDI1LCAyNDksIDE5MCwgMjIwLCAxNTgsIDI1MiwgMzgsIDI1MiwgMzYsIAorICAgIDIyNiwgMTE1LCAyNDksIDExNiwgMjQ5LCAyOCwgMjUyLCA4NywgMjQ5LCAyMTUsIDQyLCAyMzIsIDE0OCwgMTA0LCAxNiwgCisgICAgMzEsIDIyNCwgMTQ4LCAxMDQsIDE2LCAzMSwgMjU0LCAxMDAsIDEwNCwgMTYsIDMxLCAyNDQsIDY1LCAxMDQsIDE2LCAzMSwgCisgICAgMjQ1LCAxNzksIDEwNCwgMTYsIDMxLCAyMTQsIDI0LCAxMDQsIDE2LCAzMSwgMjUzLCAyMTMsIDEwNCwgMTYsIDMxLCAyNTMsIAorICAgIDIxNCwgMjIzLCAyNTUsIDEwNCwgMTYsIDMxLCAyNTMsIDIxNCwgMjIzLCAyNTQsIDEwNCwgMTYsIDMxLCAyNTMsIDIxNCwgCisgICAgMjE0LCAxMjQsIDEwNCwgMTYsIDMxLCAyNTMsIDIxNCwgMjE0LCAxMjMsIDEwNCwgMTYsIDMxLCAyMTQsIDEzOCwgMTA0LCAKKyAgICAxNiwgMzEsIDIxNCwgMTM3LCAxMDQsIDE2LCAzMSwgMjE0LCAxMzYsIDEwNCwgMTYsIDMxLCAyMTgsIDI0NSwgMTA0LCAxNiwgCisgICAgMzEsIDIyNiwgMSwgMjE4LCAyNDUsIDEwNCwgMTYsIDMxLCA4MywgMjE4LCAyNDUsIDEwNCwgMTYsIDMxLCAyMzEsIDExOSwgCisgICAgMjE5LCAxNiwgMTA0LCAxNiwgMzEsIDIzMSwgMTE5LCAyMTksIDE1LCAxMDQsIDE2LCAzMSwgMjMxLCAxMTksIDIxOSwgMTQsIAorICAgIDEwNCwgMTYsIDMxLCAyNDksIDIzMSwgMTA0LCAxNiwgMzEsIDIyMiwgMTcyLCAxMDQsIDE2LCAzMSwgMjI5LCAxOSwgMTA0LCAKKyAgICAxNiwgMzEsIDIxNCwgMTIyLCAxMDQsIDE2LCAzMSwgMjE0LCAxMjEsIDEwNCwgMTYsIDMxLCAyMjMsIDEwNSwgMjIyLCAxNzIsIAorICAgIDEwNCwgMTYsIDMxLCAyMjMsIDEwNSwgMjIyLCAxNzEsIDEwNCwgMTYsIDMxLCAyNDIsIDE0MiwgMTA0LCAxNiwgMzEsIDIyMCwgCisgICAgOTIsIDEwNCwgMTYsIDMxLCAyMzUsIDE3NSwgMjI3LCAyMCwgMTA0LCAxNiwgMzEsIDIzNSwgMTc1LCAyMjcsIDE5LCAxMDQsIAorICAgIDE2LCAzMSwgMjQ5LCA3NCwgNjUsIDIzNSwgMTc0LCAxMDQsIDE2LCAzMSwgMjIzLCAyNTEsIDY1LCAyMzUsIDE3NCwgMTA0LCAKKyAgICAxNiwgMzEsIDI0OSwgMTA3LCAyMjcsIDIwLCAxMDQsIDE2LCAzMSwgMjM1LCAxNzMsIDIyNywgMjAsIDEwNCwgMTYsIDMxLCAKKyAgICAyMTksIDE3LCA2NSwgMjQ5LCAxMDYsIDEwNCwgMTYsIDMxLCAyNDksIDc0LCA2NSwgMjQ5LCAxMDYsIDEwNCwgMTYsIDMxLCAKKyAgICAyNDksIDc0LCA2NSwgMjQ5LCAxMDUsIDEwNCwgMTYsIDMxLCAyNDksIDEwNywgMjUzLCAyNTAsIDEwNCwgMTYsIDMxLCAyMjIsIAorICAgIDE3MywgNjUsIDI0OSwgMTA3LCAyNTMsIDI1MCwgMTA0LCAxNiwgMzEsIDIxOSwgMTcsIDY1LCAyMjIsIDE3MywgNjUsIDI0OSwgCisgICAgMTA2LCAxMDQsIDE2LCAzMSwgMjE0LCAyMjAsIDEwNCwgMTYsIDMxLCAyMTcsIDM3LCAyMjcsIDIwLCAxMDQsIDE2LCAzMSwgCisgICAgMjMzLCA4MSwgMjI3LCAyMCwgMTA0LCAxNiwgMzEsIDI1MywgMjQ5LCAyMjcsIDIwLCAxMDQsIDE2LCAzMSwgMjE5LCAxNywgCisgICAgNjUsIDI1MywgMjQ4LCAxMDQsIDE2LCAzMSwgMjIyLCAxNzMsIDY1LCAyNTMsIDI0OCwgMTA0LCAxNiwgMzEsIDIxOSwgMTcsIAorICAgIDY1LCAyMjIsIDE3MywgNjUsIDI1MywgMjQ4LCAxMDQsIDE2LCAzMSwgMjE0LCAxMzksIDY1LCAyNTMsIDI0OCwgMTA0LCAxNiwgCisgICAgMzEsIDIyMywgMjUxLCA2NSwgMjUzLCAyNDgsIDEwNCwgMTYsIDMxLCAyMjMsIDI1MSwgNjUsIDI1MywgMjQ3LCAxMDQsIDE2LCAKKyAgICAzMSwgMjIzLCAyNTAsIDEwNCwgMTYsIDMxLCAyMjMsIDI0OSwgMTA0LCAxNiwgMzEsIDIyMywgMjQ4LCAxMDQsIDE2LCAzMSwgCisgICAgMjIzLCAyNDcsIDEwNCwgMTYsIDMxLCAyNTQsIDY2LCAxMDQsIDE2LCAzMSwgMjU0LCA2NSwgMTA0LCAxNiwgMzEsIDIzMSwgCisgICAgMjI2LCAxMDQsIDE2LCAzMSwgMjIyLCAxNzgsIDEwNCwgMTYsIDMxLCAyNTMsIDE2MSwgMTA0LCAxNiwgMzEsIDIyNCwgMTgsIAorICAgIDEwNCwgMTYsIDMxLCAyMjQsIDE3LCAxMDQsIDE2LCAzMSwgMjUzLCA5OSwgMTA0LCAxNiwgMzEsIDI1MSwgMTUyLCAyMjcsIAorICAgIDIwLCAxMDQsIDE2LCAzMSwgMjE4LCAwLCAxMDQsIDE2LCAzMSwgMjE3LCAyNTUsIDEwNCwgMTYsIDMxLCAyMjQsIDE1MywgCisgICAgMjMyLCAyNTEsIDEwNCwgMTYsIDMxLCAyNTEsIDEwOSwgMTA0LCAxNiwgMzEsIDI1MSwgMTA4LCAxMDQsIDE2LCAzMSwgMjUxLCAKKyAgICAxMDcsIDEwNCwgMTYsIDMxLCAyNTQsIDQ3LCAxMDQsIDE2LCAzMSwgMjI3LCA4NCwgMTA0LCAxNiwgMzEsIDIxOSwgMTgwLCAKKyAgICAxMDQsIDE2LCAzMSwgMjE3LCAzNSwgMTA0LCAxNiwgMzEsIDI0MiwgNzcsIDEwNCwgMTYsIDMxLCAyMTQsIDEyLCAxMDQsIAorICAgIDE2LCAzMSwgMjI1LCAxMDYsIDEwNCwgMTYsIDMxLCAyNTAsIDIwMiwgMTA0LCAxNiwgMzEsIDIxNiwgNTAsIDEwNCwgMTYsIAorICAgIDMxLCAyNTAsIDE3OCwgMjMwLCAxOTIsIDEwNCwgMTYsIDMxLCAyMjIsIDEyMCwgNjUsIDIzNSwgNTgsIDEwNCwgMTYsIDMxLCAKKyAgICAyNTAsIDIxMSwgMTA0LCAxNiwgMzEsIDIxNiwgMTc3LCAxMDQsIDE2LCAzMSwgMjE5LCA5MywgMjE2LCAxNzcsIDEwNCwgMTYsIAorICAgIDMxLCAyMzIsIDIwMSwgMTA0LCAxNiwgMzEsIDIxOSwgMjQwLCAxMDQsIDE2LCAzMSwgMjE1LCAxMTMsIDEwNCwgMTYsIDMxLCAKKyAgICAyNDAsIDIzMywgMjQ2LCAxOSwgMTA0LCAxNiwgMzEsIDI1MywgMTQyLCAxMDQsIDE2LCAzMSwgMjI1LCAxMTQsIDI1MywgCisgICAgMTQyLCAxMDQsIDE2LCAzMSwgMjUxLCA3MCwgMTA0LCAxNiwgMzEsIDIyNSwgMTA1LCAyNTEsIDcwLCAxMDQsIDE2LCAzMSwgCisgICAgMjU0LCA0NCwgMTA0LCAxNiwgMzEsIDIxOSwgNTcsIDIxOCwgMjI2LCAyMTksIDU2LCAxMDQsIDE2LCAzMSwgMjE5LCA1NywgCisgICAgMjE4LCAyMjYsIDIxOSwgNTUsIDEwNCwgMTYsIDMxLCAyMTksIDEzLCAxMDQsIDE2LCAzMSwgMjI1LCA4MCwgMTA0LCAxNiwgCisgICAgMzEsIDI0NywgMTMzLCAxMDQsIDE2LCAzMSwgMjQ3LCAxMzUsIDEwNCwgMTYsIDMxLCAyNDcsIDEzNCwgMTA0LCAxNiwgMzEsIAorICAgIDIyNSwgMTcsIDEwNCwgMTYsIDMxLCAyMjUsIDcsIDEwNCwgMTYsIDMxLCAyNDksIDYyLCAxMDQsIDE2LCAzMSwgMjQ5LCA2MSwgCisgICAgMTA0LCAxNiwgMzEsIDI0OSwgNjAsIDEwNCwgMTYsIDMxLCAyNDksIDU5LCAxMDQsIDE2LCAzMSwgMjQ5LCA1OCwgMTA0LCAKKyAgICAxNiwgMzEsIDI1NCwgNzcsIDEwNCwgMTYsIDMxLCAyNTIsIDM5LCA2NSwgMjMxLCAyMTIsIDEwNCwgMTYsIDMxLCAyNTIsIAorICAgIDM5LCA2NSwgMjE0LCAyNDksIDEwNCwgMTYsIDMxLCAyMjMsIDIwOSwgMTA0LCAxNiwgMzEsIDI0MCwgMjI1LCAxMDQsIDE2LCAKKyAgICAzMSwgMjI5LCA0MywgMTA0LCAxNiwgMzEsIDI0OCwgOTEsIDEwNCwgMTYsIDMxLCAyMzAsIDIwNCwgMTA0LCAxNiwgMzEsIAorICAgIDE1MSwgMjQ2LCA0OSwgMTA0LCAxNiwgMzEsIDE1MSwgMjI3LCAwLCA5LCAxMywgMjQwLCA5NSwgOSwgMTMsIDI0MCwgOTQsIAorICAgIDksIDEzLCAyNDAsIDkzLCA5LCAxMywgMjQwLCA5MiwgOSwgMTMsIDI0MCwgOTEsIDksIDEzLCAyNDAsIDkwLCA5LCAxMywgCisgICAgMjQwLCA4OSwgOSwgMTMsIDI0MCwgODgsIDksIDEzLCAyNDAsIDg3LCA5LCAxMywgMjQwLCA4NiwgOSwgMTMsIDI0MCwgODUsIAorICAgIDksIDEzLCAyNDAsIDg0LCA5LCAxMywgMjQwLCA4MywgOSwgMTMsIDI0MCwgODIsIDksIDEzLCAyNDAsIDgxLCA5LCAxMywgCisgICAgMjQwLCA4MCwgOSwgMTMsIDI0MCwgNzksIDksIDEzLCAyNDAsIDc4LCA5LCAxMywgMjQwLCA3NywgOSwgMTMsIDI0MCwgNzYsIAorICAgIDksIDEzLCAyNDAsIDc1LCA5LCAxMywgMjQwLCA3NCwgOSwgMTMsIDI0MCwgNzMsIDksIDEzLCAyNDAsIDcyLCA5LCAxMywgCisgICAgMjQwLCA3MSwgOSwgMTMsIDI0MCwgNzAsIDksIDEzLCAyNDAsIDY5LCA5LCAxMywgMjQwLCA2OCwgOSwgMTMsIDI0MCwgNjcsIAorICAgIDksIDEzLCAyNDAsIDY2LCA5LCAxMywgMjQwLCA2NSwgOSwgMTMsIDI0MCwgNjQsIDksIDEzLCAyNDAsIDYzLCA5LCAxMywgCisgICAgMjQwLCA2MiwgOSwgMTMsIDI0MCwgNjEsIDksIDEzLCAyNDAsIDYwLCA5LCAxMywgMjQwLCA1OSwgOSwgMTMsIDI0MCwgNTgsIAorICAgIDksIDEzLCAyNDAsIDU3LCA5LCAxMywgMjQwLCA1NiwgOSwgMTMsIDI0MCwgNTUsIDksIDEzLCAyNDAsIDU0LCA5LCAxMywgCisgICAgMjQwLCA1MywgOSwgMTMsIDI0MCwgNTIsIDksIDEzLCAyNDAsIDUxLCA5LCAxMywgMjQwLCA1MCwgOSwgMTMsIDI0MCwgNDksIAorICAgIDksIDEzLCAyNDAsIDQ4LCA5LCAxMywgMjQwLCA0NywgOSwgMTMsIDI0MCwgNDYsIDksIDEzLCAyNDAsIDQ1LCA5LCAxMywgCisgICAgMjQwLCA0NCwgOSwgMTMsIDI0MCwgNDMsIDksIDEzLCAyNDAsIDQyLCA5LCAxMywgMjQwLCA0MSwgOSwgMTMsIDI0MCwgNDAsIAorICAgIDksIDEzLCAyNDAsIDM5LCA5LCAxMywgMjQwLCAzOCwgOSwgMTMsIDI0MCwgMzcsIDksIDEzLCAyNDAsIDM2LCA5LCAxMywgCisgICAgMjQwLCAzNSwgOSwgMTMsIDI0MCwgMzQsIDksIDEzLCAyNDAsIDMzLCA5LCAxMywgMjQwLCAzMiwgOSwgMTMsIDI0MCwgMzEsIAorICAgIDksIDEzLCAyNDAsIDMwLCA5LCAxMywgMjQwLCAyOSwgOSwgMTMsIDI0MCwgMjgsIDksIDEzLCAyNDAsIDI3LCA5LCAxMywgCisgICAgMjQwLCAyNiwgOSwgMTMsIDI0MCwgMjUsIDksIDEzLCAyNDAsIDI0LCA5LCAxMywgMjQwLCAyMywgOSwgMTMsIDI0MCwgMjIsIAorICAgIDksIDEzLCAyNDAsIDIxLCA5LCAxMywgMjQwLCAyMCwgOSwgMTMsIDI0MCwgMTksIDksIDEzLCAyNDAsIDE4LCA5LCAxMywgCisgICAgMjQwLCAxNywgOSwgMTMsIDI0MCwgMTYsIDksIDEzLCAyNDAsIDE1LCA5LCAxMywgMjQwLCAxNCwgOSwgMTMsIDI0MCwgMTMsIAorICAgIDksIDEzLCAyNDAsIDEyLCA5LCAxMywgMjQwLCAxMSwgOSwgMTMsIDI0MCwgMTAsIDksIDEzLCAyNDAsIDksIDksIDEzLCAKKyAgICAyNDAsIDgsIDksIDEzLCAyNDAsIDcsIDksIDEzLCAyNDAsIDYsIDksIDEzLCAyNDAsIDUsIDksIDEzLCAyNDAsIDQsIDksIAorICAgIDEzLCAyNDAsIDMsIDksIDEzLCAyNDAsIDIsIDksIDEzLCAyNDAsIDEsIDksIDEzLCAyNDAsIDAsIDksIDEzLCAyMzksIDI1NSwgCisgICAgOSwgMTMsIDIzOSwgMjU0LCA5LCAxMywgMjM5LCAyNTMsIDksIDEzLCAyMzksIDI1MiwgOSwgMTMsIDIzOSwgMjUxLCA5LCAKKyAgICAxMywgMjM5LCAyNTAsIDksIDEzLCAyMzksIDI0OSwgOSwgMTMsIDIzOSwgMjQ4LCA5LCAxMywgMjM5LCAyNDcsIDksIDEzLCAKKyAgICAyMzksIDI0NiwgOSwgMTMsIDIzOSwgMjQ1LCA5LCAxMywgMjM5LCAyNDQsIDksIDEzLCAyMzksIDI0MywgOSwgMTMsIDIzOSwgCisgICAgMjQyLCA5LCAxMywgMjM5LCAyNDEsIDksIDEzLCAyMzksIDI0MCwgOSwgMTMsIDIzOSwgMjM5LCA5LCAxMywgMjM5LCAyMzgsIAorICAgIDksIDEzLCAyMzksIDIzNywgOSwgMTMsIDIzOSwgMjM2LCA5LCAxMywgMjM5LCAyMzUsIDksIDEzLCAyMzksIDIzNCwgOSwgCisgICAgMTMsIDIzOSwgMjMzLCA5LCAxMywgMjM5LCAyMzIsIDksIDEzLCAyMzksIDIzMSwgOSwgMTMsIDIzOSwgMjMwLCA5LCAxMywgCisgICAgMjM5LCAyMjksIDksIDEzLCAyMzksIDIyOCwgOSwgMTMsIDIzOSwgMjI3LCA5LCAxMywgMjM5LCAyMjYsIDksIDEzLCAyMzksIAorICAgIDIyNSwgOSwgMTMsIDIzOSwgMjI0LCA5LCAxMywgMjM5LCAyMjMsIDksIDEzLCAyMzksIDIyMiwgOSwgMTMsIDIzOSwgMjIxLCAKKyAgICA5LCAxMywgMjM5LCAyMjAsIDksIDEzLCAyMzksIDIxOSwgOSwgMTMsIDIzOSwgMjE4LCA5LCAxMywgMjM5LCAyMTcsIDksIAorICAgIDEzLCAyMzksIDIxNiwgOSwgMTMsIDIzOSwgMjE1LCA5LCAxMywgMjM5LCAyMTQsIDksIDEzLCAyMzksIDIxMywgOSwgMTMsIAorICAgIDIzOSwgMjEyLCA5LCAxMywgMjM5LCAyMTEsIDksIDEzLCAyMzksIDIxMCwgOSwgMTMsIDIzOSwgMjA5LCA5LCAxMywgMjM5LCAKKyAgICAyMDgsIDksIDEzLCAyMzksIDIwNywgOSwgMTMsIDIzOSwgMjA2LCA5LCAxMywgMjM5LCAyMDUsIDksIDEzLCAyMzksIDIwNCwgCisgICAgOSwgMTMsIDIzOSwgMjAzLCA5LCAxMywgMjM5LCAyMDIsIDksIDEzLCAyMzksIDIwMSwgOSwgMTMsIDIzOSwgMjAwLCA5LCAKKyAgICAxMywgMjM5LCAxOTksIDksIDEzLCAyMzksIDE5OCwgOSwgMTMsIDIzOSwgMTk3LCA5LCAxMywgMjM5LCAxOTYsIDksIDEzLCAKKyAgICAyMzksIDE5NSwgOSwgMTMsIDIzOSwgMTk0LCA5LCAxMywgMjM5LCAxOTMsIDksIDEzLCAyMzksIDE5MiwgOSwgMTMsIDIzOSwgCisgICAgMTkxLCA5LCAxMywgMjM5LCAxOTAsIDksIDEzLCAyMzksIDE4OSwgOSwgMTMsIDIzOSwgMTg4LCA5LCAxMywgMjM5LCAxODcsIAorICAgIDksIDEzLCAyMzksIDE4NiwgOSwgMTMsIDIzOSwgMTg1LCA5LCAxMywgMjM5LCAxODQsIDksIDEzLCAyMzksIDE4MywgOSwgCisgICAgMTMsIDIzOSwgMTgyLCA5LCAxMywgMjM5LCAxODEsIDksIDEzLCAyMzksIDE4MCwgOSwgMTMsIDIzOSwgMTc5LCA5LCAxMywgCisgICAgMjM5LCAxNzgsIDksIDEzLCAyMzksIDE3NywgOSwgMTMsIDIzOSwgMTc2LCA5LCAxMywgMjM5LCAxNzUsIDksIDEzLCAyMzksIAorICAgIDE3NCwgOSwgMTMsIDIzOSwgMTczLCA5LCAxMywgMjM5LCAxNzIsIDksIDEzLCAyMzksIDE3MSwgOSwgMTMsIDIzOSwgMTcwLCAKKyAgICA5LCAxMywgMjM5LCAxNjksIDksIDEzLCAyMzksIDE2OCwgOSwgMTMsIDIzOSwgMTY3LCA5LCAxMywgMjM5LCAxNjYsIDksIAorICAgIDEzLCAyMzksIDE2NSwgOSwgMTMsIDIzOSwgMTY0LCA5LCAxMywgMjM5LCAxNjMsIDksIDEzLCAyMzksIDE2MiwgOSwgMTMsIAorICAgIDIzOSwgMTYxLCA5LCAxMywgMjM5LCAxNjAsIDksIDEzLCAyMzksIDE1OSwgOSwgMTMsIDIzOSwgMTU4LCA5LCAxMywgMjM5LCAKKyAgICAxNTcsIDksIDEzLCAyMzksIDE1NiwgOSwgMTMsIDIzOSwgMTU1LCA5LCAxMywgMjM5LCAxNTQsIDksIDEzLCAyMzksIDE1MywgCisgICAgOSwgMTMsIDIzOSwgMTUyLCA5LCAxMywgMjM5LCAxNTEsIDksIDEzLCAyMzksIDE1MCwgOSwgMTMsIDIzOSwgMTQ5LCA5LCAKKyAgICAxMywgMjM5LCAxNDgsIDksIDEzLCAyMzksIDE0NywgOSwgMTMsIDIzOSwgMTQ2LCA5LCAxMywgMjM5LCAxNDUsIDksIDEzLCAKKyAgICAyMzksIDE0NCwgOSwgMTMsIDIzOSwgMTQzLCA5LCAxMywgMjM5LCAxNDIsIDksIDEzLCAyMzksIDE0MSwgOSwgMTMsIDIzOSwgCisgICAgMTQwLCA5LCAxMywgMjM5LCAxMzksIDksIDEzLCAyMzksIDEzOCwgOSwgMTMsIDIzOSwgMTM3LCA5LCAxMywgMjM5LCAxMzYsIAorICAgIDksIDEzLCAyMzksIDEzNSwgOSwgMTMsIDIzOSwgMTM0LCA5LCAxMywgMjM5LCAxMzMsIDksIDEzLCAyMzksIDEzMiwgOSwgCisgICAgMTMsIDIzOSwgMTMxLCA5LCAxMywgMjM5LCAxMzAsIDksIDEzLCAyMzksIDEyOSwgOSwgMTMsIDIzOSwgMTI4LCA5LCAxMywgCisgICAgMjM5LCAxMjcsIDksIDEzLCAyMzksIDEyNiwgOSwgMTMsIDIzOSwgMTI1LCA5LCAxMywgMjM5LCAxMjQsIDksIDEzLCAyMzksIAorICAgIDEyMywgOSwgMTMsIDIzOSwgMTIyLCA5LCAxMywgMjM5LCAxMjEsIDksIDEzLCAyMzksIDEyMCwgOSwgMTMsIDIzOSwgMTE5LCAKKyAgICA5LCAxMywgMjM5LCAxMTgsIDksIDEzLCAyMzksIDExNywgOSwgMTMsIDIzOSwgMTE2LCA5LCAxMywgMjM5LCAxMTUsIDksIAorICAgIDEzLCAyMzksIDExNCwgOSwgMTMsIDIzOSwgMTEzLCA5LCAxMywgMjM5LCAxMTIsIDksIDEzLCAyMzksIDExMSwgOSwgMTMsIAorICAgIDIzOSwgMTEwLCA5LCAxMywgMjM5LCAxMDksIDksIDEzLCAyMzksIDEwOCwgOSwgMTMsIDIzOSwgMTA3LCA5LCAxMywgMjM5LCAKKyAgICAxMDYsIDksIDEzLCAyMzksIDEwNSwgOSwgMTMsIDIzOSwgMTA0LCA5LCAxMywgMjM5LCAxMDMsIDksIDEzLCAyMzksIDEwMiwgCisgICAgOSwgMTMsIDIzOSwgMTAxLCA5LCAxMywgMjM5LCAxMDAsIDksIDEzLCAyMzksIDk5LCA5LCAxMywgMjM5LCA5OCwgOSwgMTMsIAorICAgIDIzOSwgOTcsIDksIDEzLCAyMzksIDk2LCA5LCAxMywgMjM5LCA5NSwgOSwgMTMsIDIzOSwgOTQsIDksIDEzLCAyMzksIDkzLCAKKyAgICA5LCAxMywgMjM5LCA5MiwgOSwgMTMsIDIzOSwgOTEsIDksIDEzLCAyMzksIDkwLCA5LCAxMywgMjM5LCA4OSwgOSwgMTMsIAorICAgIDIzOSwgODgsIDksIDEzLCAyMzksIDg3LCA5LCAxMywgMjM5LCA4NiwgOSwgMTMsIDIzOSwgODUsIDksIDEzLCAyMzksIDg0LCAKKyAgICA5LCAxMywgMjM5LCA4MywgOSwgMTMsIDIzOSwgODIsIDksIDEzLCAyMzksIDgxLCA5LCAxMywgMjM5LCA4MCwgOSwgMTMsIAorICAgIDIzOSwgNzksIDksIDEzLCAyMzksIDc4LCA5LCAxMywgMjM5LCA3NywgOSwgMTMsIDIzOSwgNzYsIDksIDEzLCAyMzksIDc1LCAKKyAgICA5LCAxMywgMjM5LCA3NCwgOSwgMTMsIDIzOSwgNzMsIDksIDEzLCAyMzksIDcyLCA5LCAxMywgMjM5LCA3MSwgOSwgMTMsIAorICAgIDIzOSwgNzAsIDksIDEzLCAyMzksIDY5LCA5LCAxMywgMjM5LCA2OCwgOSwgMTMsIDIzOSwgNjcsIDksIDEzLCAyMzksIDY2LCAKKyAgICA5LCAxMywgMjM5LCA2NSwgOSwgMTMsIDIzOSwgNjQsIDksIDEzLCAyMzksIDYzLCA5LCAxMywgMjM5LCA2MiwgOSwgMTMsIAorICAgIDIzOSwgNjEsIDksIDEzLCAyMzksIDYwLCA5LCAxMywgMjM5LCA1OSwgOSwgMTMsIDIzOSwgNTgsIDksIDEzLCAyMzksIDU3LCAKKyAgICA5LCAxMywgMjM5LCA1NiwgOSwgMTMsIDIzOSwgNTUsIDksIDEzLCAyMzksIDU0LCA5LCAxMywgMjM5LCA1MywgOSwgMTMsIAorICAgIDIzOSwgNTIsIDksIDEzLCAyMzksIDUxLCA5LCAxMywgMjM5LCA1MCwgOSwgMTMsIDIzOSwgNDksIDksIDEzLCAyMzksIDQ4LCAKKyAgICA5LCAxMywgMjM5LCA0NywgOSwgMTMsIDIzOSwgNDYsIDksIDEzLCAyMzksIDQ1LCA5LCAxMywgMjM5LCA0NCwgOSwgMTMsIAorICAgIDIzOSwgNDMsIDksIDEzLCAyMzksIDQyLCA5LCAxMywgMjM5LCA0MSwgOSwgMTMsIDIzOSwgNDAsIDksIDEzLCAyMzksIDM5LCAKKyAgICA5LCAxMywgMjM5LCAzOCwgOSwgMTMsIDIzOSwgMzcsIDksIDEzLCAyMzksIDM2LCA5LCAxMywgMjM5LCAzNSwgOSwgMTMsIAorICAgIDIzOSwgMzQsIDksIDEzLCAyMzksIDMzLCA5LCAxMywgMjM5LCAzMiwgOSwgMTMsIDIzOSwgMzEsIDksIDEzLCAyMzksIDMwLCAKKyAgICA5LCAxMywgMjM5LCAyOSwgOSwgMTMsIDIzOSwgMjgsIDksIDEzLCAyMzksIDI3LCA5LCAxMywgMjM5LCAyNiwgOSwgMTMsIAorICAgIDIzOSwgMjUsIDksIDEzLCAyMzksIDI0LCA5LCAxMywgMjM5LCAyMywgOSwgMTMsIDIzOSwgMjIsIDksIDEzLCAyMzksIDIxLCAKKyAgICA5LCAxMywgMjM5LCAyMCwgOSwgMTMsIDIzOSwgMTksIDksIDEzLCAyMzksIDE4LCA5LCAxMywgMjM5LCAxNywgOSwgMTMsIAorICAgIDIzOSwgMTYsIDksIDEzLCAyMzksIDE1LCA5LCAxMywgMjM5LCAxNCwgOSwgMTMsIDIzOSwgMTMsIDksIDEzLCAyMzksIDEyLCAKKyAgICA5LCAxMywgMjM5LCAxMSwgOSwgMTMsIDIzOSwgMTAsIDksIDEzLCAyMzksIDksIDksIDEzLCAyMzksIDgsIDksIDEzLCAyMzksIAorICAgIDcsIDksIDEzLCAyMzksIDYsIDksIDEzLCAyMzksIDUsIDksIDEzLCAyMzksIDQsIDksIDEzLCAyMzksIDMsIDksIDEzLCAKKyAgICAyMzksIDIsIDksIDEzLCAyMzksIDEsIDksIDEzLCAyMzksIDAsIDksIDEzLCAyMzgsIDI1NSwgOSwgMTMsIDIzOCwgMjU0LCAKKyAgICA5LCAxMywgMjM4LCAyNTMsIDksIDEzLCAyMzgsIDI1MiwgOSwgMTMsIDIzOCwgMjUxLCA5LCAxMywgMjM4LCAyNTAsIDksIAorICAgIDEzLCAyMzgsIDI0OSwgOSwgMTMsIDIzOCwgMjQ4LCA5LCAxMywgMjM4LCAyNDcsIDksIDEzLCAyMzgsIDI0NiwgOSwgMTMsIAorICAgIDIzOCwgMjQ1LCA5LCAxMywgMjM4LCAyNDQsIDksIDEzLCAyMzgsIDI0MywgOSwgMTMsIDIzOCwgMjQyLCA5LCAxMywgMjM4LCAKKyAgICAyNDEsIDksIDEzLCAyMzgsIDI0MCwgOSwgMTMsIDIzOCwgMjM5LCA5LCAxMywgMjM4LCAyMzgsIDksIDEzLCAyMzgsIDIzNywgCisgICAgOSwgMTMsIDIzOCwgMjM2LCA5LCAxMywgMjM4LCAyMzUsIDksIDEzLCAyMzgsIDIzNCwgOSwgMTMsIDIzOCwgMjMzLCA5LCAKKyAgICAxMywgMjM4LCAyMzIsIDksIDEzLCAyMzgsIDIzMSwgOSwgMTMsIDIzOCwgMjMwLCA5LCAxMywgMjM4LCAyMjksIDksIDEzLCAKKyAgICAyMzgsIDIyOCwgOSwgMTMsIDIzOCwgMjI3LCA5LCAxMywgMjM4LCAyMjYsIDksIDEzLCAyMzgsIDIyNSwgOSwgMTMsIDIzOCwgCisgICAgMjI0LCA5LCAxMywgMjM4LCAyMjMsIDksIDEzLCAyMzgsIDIyMiwgOSwgMTMsIDIzOCwgMjIxLCA5LCAxMywgMjM4LCAyMjAsIAorICAgIDksIDEzLCAyMzgsIDIxOSwgOSwgMTMsIDIzOCwgMjE4LCA5LCAxMywgMjM4LCAyMTcsIDksIDEzLCAyMzgsIDIxNiwgOSwgCisgICAgMTMsIDIzOCwgMjE1LCA5LCAxMywgMjM4LCAyMTQsIDksIDEzLCAyMzgsIDIxMywgOSwgMTMsIDIzOCwgMjEyLCA5LCAxMywgCisgICAgMjM4LCAyMTEsIDksIDEzLCAyMzgsIDIxMCwgOSwgMTMsIDIzOCwgMjA5LCA5LCAxMywgMjM4LCAyMDgsIDksIDEzLCAyMzgsIAorICAgIDIwNywgOSwgMTMsIDIzOCwgMjA2LCA5LCAxMywgMjM4LCAyMDUsIDksIDEzLCAyMzgsIDIwNCwgOSwgMTMsIDIzOCwgMjAzLCAKKyAgICA5LCAxMywgMjM4LCAyMDIsIDksIDEzLCAyMzgsIDIwMSwgOSwgMTMsIDIzOCwgMjAwLCA5LCAxMywgMjM4LCAxOTksIDksIAorICAgIDEzLCAyMzgsIDE5OCwgOSwgMTMsIDIzOCwgMTk3LCA5LCAxMywgMjM4LCAxOTYsIDksIDEzLCAyMzgsIDE5NSwgOSwgMTMsIAorICAgIDIzOCwgMTk0LCA5LCAxMywgMjM4LCAxOTMsIDksIDEzLCAyMzgsIDE5MiwgOSwgMTMsIDIzOCwgMTkxLCA5LCAxMywgMjM4LCAKKyAgICAxOTAsIDksIDEzLCAyMzgsIDE4OSwgOSwgMTMsIDIzOCwgMTg4LCA5LCAxMywgMjM4LCAxODcsIDksIDEzLCAyMzgsIDE4NiwgCisgICAgOSwgMTMsIDIzOCwgMTg1LCA5LCAxMywgMjM4LCAxODQsIDksIDEzLCAyMzgsIDE4MywgOSwgMTMsIDIzOCwgMTgyLCA5LCAKKyAgICAxMywgMjM4LCAxODEsIDksIDEzLCAyMzgsIDE4MCwgOSwgMTMsIDIzOCwgMTc5LCA5LCAxMywgMjM4LCAxNzgsIDksIDEzLCAKKyAgICAyMzgsIDE3NywgOSwgMTMsIDIzOCwgMTc2LCA5LCAxMywgMjM4LCAxNzUsIDksIDEzLCAyMzgsIDE3NCwgOSwgMTMsIDIzOCwgCisgICAgMTczLCA5LCAxMywgMjM4LCAxNzIsIDksIDEzLCAyMzgsIDE3MSwgOSwgMTMsIDIzOCwgMTcwLCA5LCAxMywgMjM4LCAxNjksIAorICAgIDksIDEzLCAyMzgsIDE2OCwgOSwgMTMsIDIzOCwgMTY3LCA5LCAxMywgMjM4LCAxNjYsIDksIDEzLCAyMzgsIDE2NSwgOSwgCisgICAgMTMsIDIzOCwgMTY0LCA5LCAxMywgMjM4LCAxNjMsIDksIDEzLCAyMzgsIDE2MiwgOSwgMTMsIDIzOCwgMTYxLCA5LCAxMywgCisgICAgMjM4LCAxNjAsIDksIDEzLCAyMzgsIDE1OSwgOSwgMTMsIDIzOCwgMTU4LCA5LCAxMywgMjM4LCAxNTcsIDksIDEzLCAyMzgsIAorICAgIDE1NiwgOSwgMTMsIDIzOCwgMTU1LCA5LCAxMywgMjM4LCAxNTQsIDksIDEzLCAyMzgsIDE1MywgOSwgMTMsIDIzOCwgMTUyLCAKKyAgICA5LCAxMywgMjM4LCAxNTEsIDksIDEzLCAyMzgsIDE1MCwgOSwgMTMsIDIzOCwgMTQ5LCA5LCAxMywgMjM4LCAxNDgsIDksIAorICAgIDEzLCAyMzgsIDE0NywgOSwgMTMsIDIzOCwgMTQ2LCA5LCAxMywgMjM4LCAxNDUsIDksIDEzLCAyMzgsIDE0NCwgOSwgMTMsIAorICAgIDIzOCwgMTQzLCA5LCAxMywgMjM4LCAxNDIsIDksIDEzLCAyMzgsIDE0MSwgOSwgMTMsIDIzOCwgMTQwLCA5LCAxMywgMjM4LCAKKyAgICAxMzksIDksIDEzLCAyMzgsIDEzOCwgOSwgMTMsIDIzOCwgMTM3LCA5LCAxMywgMjM4LCAxMzYsIDksIDEzLCAyMzgsIDEzNSwgCisgICAgOSwgMTMsIDIzOCwgMTM0LCA5LCAxMywgMjM4LCAxMzMsIDksIDEzLCAyMzgsIDEzMiwgOSwgMTMsIDIzOCwgMTMxLCA5LCAKKyAgICAxMywgMjM4LCAxMzAsIDksIDEzLCAyMzgsIDEyOSwgOSwgMTMsIDIzOCwgMTI4LCA5LCAxMywgMjM4LCAxMjcsIDksIDEzLCAKKyAgICAyMzgsIDEyNiwgOSwgMTMsIDIzOCwgMTI1LCA5LCAxMywgMjM4LCAxMjQsIDksIDEzLCAyMzgsIDEyMywgOSwgMTMsIDIzOCwgCisgICAgMTIyLCA5LCAxMywgMjM4LCAxMjEsIDksIDEzLCAyMzgsIDEyMCwgOSwgMTMsIDIzOCwgMTE5LCA5LCAxMywgMjM4LCAxMTgsIAorICAgIDksIDEzLCAyMzgsIDExNywgOSwgMTMsIDIzOCwgMTE2LCA5LCAxMywgMjM4LCAxMTUsIDksIDEzLCAyMzgsIDExNCwgOSwgCisgICAgMTMsIDIzOCwgMTEzLCA5LCAxMywgMjM4LCAxMTIsIDksIDEzLCAyMzgsIDExMSwgOSwgMTMsIDIzOCwgMTEwLCA5LCAxMywgCisgICAgMjM4LCAxMDksIDksIDEzLCAyMzgsIDEwOCwgOSwgMTMsIDIzOCwgMTA3LCA5LCAxMywgMjM4LCAxMDYsIDksIDEzLCAyMzgsIAorICAgIDEwNSwgOSwgMTMsIDIzOCwgMTA0LCA5LCAxMywgMjM4LCAxMDMsIDksIDEzLCAyMzgsIDEwMiwgOSwgMTMsIDIzOCwgMTAxLCAKKyAgICA5LCAxMywgMjM4LCAxMDAsIDksIDEzLCAyMzgsIDk5LCA5LCAxMywgMjM4LCA5OCwgOSwgMTMsIDIzOCwgOTcsIDksIDEzLCAKKyAgICAyMzgsIDk2LCA5LCAxMywgMjM4LCA5NSwgOSwgMTMsIDIzOCwgOTQsIDksIDEzLCAyMzgsIDkzLCA5LCAxMywgMjM4LCA5MiwgCisgICAgOSwgMTMsIDIzOCwgOTEsIDksIDEzLCAyMzgsIDkwLCA5LCAxMywgMjM4LCA4OSwgOSwgMTMsIDIzOCwgODgsIDksIDEzLCAKKyAgICAyMzgsIDg3LCA5LCAxMywgMjM4LCA4NiwgOSwgMTMsIDIzOCwgODUsIDksIDEzLCAyMzgsIDg0LCA5LCAxMywgMjM4LCA4MywgCisgICAgOSwgMTMsIDIzOCwgODIsIDksIDEzLCAyMzgsIDgxLCA5LCAxMywgMjM4LCA4MCwgOSwgMTMsIDIzOCwgNzksIDksIDEzLCAKKyAgICAyMzgsIDc4LCA5LCAxMywgMjM4LCA3NywgOSwgMTMsIDIzOCwgNzYsIDksIDEzLCAyMzgsIDc1LCA5LCAxMywgMjM4LCA3NCwgCisgICAgOSwgMTMsIDIzOCwgNzMsIDksIDEzLCAyMzgsIDcyLCA5LCAxMywgMjM4LCA3MSwgOSwgMTMsIDIzOCwgNzAsIDksIDEzLCAKKyAgICAyMzgsIDY5LCA5LCAxMywgMjM4LCA2OCwgOSwgMTMsIDIzOCwgNjcsIDksIDEzLCAyMzgsIDY2LCAyMzMsIDExNCwgMjE4LCAKKyAgICAzMywgMTI2LCAyMTksIDIwNiwgMTI2LCAyNDQsIDI1NCwgNzcsIDEyNiwgMjI0LCAxNDMsIDc3LCAxMjYsIDUwLCA1MiwgCisgICAgMTI2LCAyNDcsIDg2LCA1MiwgMTI2LCAyMjYsIDU3LCA1MiwgMTI2LCAyNTQsIDM1LCAxMjYsIDI1MywgMjI2LCAxMjYsIDQyLCAKKyAgICAyMjYsIDEzMSwgMTI2LCA0NiwgMjI2LCAxMzEsIDEyNiwgMjUzLCAxMzIsIDEyNiwgOTQsIDUyLCAxMjYsIDI0OSwgMTU3LCAKKyAgICAxMjYsIDI0MCwgMTU5LCAxMjYsIDI0MywgMjAwLCAyMTksIDY5LCAxMjYsIDIxOSwgMjMxLCAxMjYsIDIxLCAyMTIsIDc5LCAKKyAgICAxMjYsIDIxLCAxMTYsIDEyNiwgMjEsIDEwOSwgMTI2LCAyMSwgMTY2LCAxMjYsIDIxLCAxNjMsIDEyNiwgMjEsIDE4MCwgCisgICAgMTI2LCAyMSwgMTg5LCAxMjYsIDIxLCAxOTgsIDEyNiwgMjEsIDE5NSwgMTI2LCAyMSwgMjAwLCAxMjYsIDI0OSwgMTY0LCAKKyAgICAxMjYsIDIyMSwgNzAsIDEyNiwgMjMzLCAzOSwgNTIsIDEyNiwgMjQ1LCA2MSwgNTIsIDEyNiwgMjQyLCAxMDcsIDUyLCAxMjYsIAorICAgIDIyNCwgMTU4LCA3NywgMTI2LCAyNDksIDE1NiwgMjUzLCAxMjIsIDEyNiwgNywgNiwgMSwgNjEsIDEyNiwgNywgNiwgMSwgCisgICAgMjUzLCA3NCwgMTI2LCA3LCA2LCAxLCAyNTAsIDI1MiwgMTI2LCA3LCA2LCAxLCAyNDksIDMsIDEyNiwgNywgNiwgMSwgNzQsIAorICAgIDEyNiwgNywgNiwgMSwgMjQ0LCAyMzAsIDEyNiwgNywgNiwgMSwgMjQzLCAxNzcsIDEyNiwgNywgNiwgMSwgMjQyLCA0MSwgCisgICAgMTI2LCA3LCA2LCAxLCA3MiwgMTI2LCA3LCA2LCAxLCAyMzUsIDE0MiwgMTI2LCA3LCA2LCAxLCAyMzUsIDI3LCAxMjYsIDcsIAorICAgIDYsIDEsIDE1MCwgMTI2LCA3LCA2LCAxLCAxODMsIDEyNiwgNywgNiwgMSwgMjA0LCAxMjYsIDcsIDYsIDEsIDc1LCAxMjYsIAorICAgIDcsIDYsIDEsIDIyNiwgMjI5LCAxMjYsIDcsIDYsIDEsIDIyNCwgMjQwLCAxMjYsIDcsIDYsIDEsIDE0OSwgMTI2LCA3LCA2LCAKKyAgICAxLCAxOTcsIDEyNiwgNywgNiwgMSwgMjE4LCA5OSwgMTI2LCA3LCA2LCAxLCA2OSwgMTI2LCA3LCA2LCAxLCAyMTUsIDc5LCAKKyAgICAxMjYsIDcsIDYsIDEsIDIxNCwgODIsIDEyNiwgNywgNiwgMSwgMjEzLCAxNjYsIDEyNiwgNywgNiwgMSwgMjEzLCAxMDUsIAorICAgIDEyNiwgNywgNiwgMSwgMjEyLCAxNTIsIDEyNiwgNDIsIDQxLCAxMjUsIDEyNiwgMjIzLCAyMDMsIDIxOSwgMjMxLCAxMjYsIAorICAgIDQ2LCA0MSwgMTI1LCAxMjYsIDI0OSwgMjI0LCAyNTQsIDE3NCwgMTI2LCAxMTUsIDIzMiwgMjQyLCAxMjYsIDI0MiwgMTE0LCAKKyAgICAyNTQsIDE3NCwgMTI2LCA3LCAzLCAxLCA2MSwgMTI2LCA3LCAzLCAxLCAyNTMsIDc0LCAxMjYsIDcsIDMsIDEsIDI1MCwgCisgICAgMjUyLCAxMjYsIDcsIDMsIDEsIDI0OSwgMywgMTI2LCA3LCAzLCAxLCA3NCwgMTI2LCA3LCAzLCAxLCAyNDQsIDIzMCwgMTI2LCAKKyAgICA3LCAzLCAxLCAyNDMsIDE3NywgMTI2LCA3LCAzLCAxLCAyNDIsIDQxLCAxMjYsIDcsIDMsIDEsIDcyLCAxMjYsIDcsIDMsIDEsIAorICAgIDIzNSwgMTQyLCAxMjYsIDcsIDMsIDEsIDIzNSwgMjcsIDEyNiwgNywgMywgMSwgMTUwLCAxMjYsIDcsIDMsIDEsIDE4MywgCisgICAgMTI2LCA3LCAzLCAxLCAyMDQsIDEyNiwgNywgMywgMSwgNzUsIDEyNiwgNywgMywgMSwgMjI2LCAyMjksIDEyNiwgNywgMywgCisgICAgMSwgMjI0LCAyNDAsIDEyNiwgNywgMywgMSwgMTQ5LCAxMjYsIDcsIDMsIDEsIDE5NywgMTI2LCA3LCAzLCAxLCAyMTgsIDk5LCAKKyAgICAxMjYsIDcsIDMsIDEsIDY5LCAxMjYsIDcsIDMsIDEsIDIxNSwgNzksIDEyNiwgNywgMywgMSwgMjE0LCA4MiwgMTI2LCA3LCAKKyAgICAzLCAxLCAyMTMsIDE2NiwgMTI2LCA3LCAzLCAxLCAyMTMsIDEwNSwgMTI2LCA3LCAzLCAxLCAyMTIsIDE1MiwgMTI2LCA0MiwgCisgICAgMjQ5LCA0MCwgMTI1LCAxMjYsIDcxLCAyMzIsIDI0MiwgMTI2LCA0NiwgMjQ5LCA0MCwgMTI1LCAxMjYsIDIxNywgNDIsIAorICAgIDI1MCwgMTk0LCAyMTgsIDMzLCA0MywgMjIxLCAyNTQsIDQzLCAyMjEsIDI0MywgNDMsIDIyMSwgMjMyLCA0MywgMjIxLCAKKyAgICAyMjAsIDQzLCAyMjEsIDIwOSwgNDMsIDIyMSwgMTk4LCA0MywgMjIxLCAxODcsIDQzLCAyMjEsIDE3NiwgNDMsIDIyMSwgCisgICAgMTY1LCA0MywgMjIxLCAxNTcsIDQzLCAyMjEsIDE1NiwgNDMsIDIyMSwgMTU1LCA0MywgMjIxLCAxNTQsIDQzLCAyMjEsIAorICAgIDE1MiwgNDMsIDIyMSwgMTUxLCA0MywgMjIxLCAxNTAsIDQzLCAyMjEsIDE0OSwgNDMsIDIyMSwgMTQ4LCA0MywgMjIxLCAKKyAgICAxNDcsIDQzLCAyMjEsIDE0NiwgNDMsIDIyMSwgMTQ1LCA0MywgMjIxLCAxNDQsIDQzLCAyMjEsIDE0MywgNDMsIDIyMSwgCisgICAgMTQxLCA0MywgMjIxLCAxNDAsIDQzLCAyMjEsIDEzOSwgNDMsIDIyMSwgMTM4LCA0MywgMjIxLCAxMzcsIDQzLCAyMjEsIAorICAgIDEzNiwgNDMsIDIyMSwgMTM1LCA0MywgMjIxLCAxMzQsIDQzLCAyMjEsIDEzMywgNDMsIDIyMSwgMTMyLCA0MywgMjIxLCAKKyAgICAxMzAsIDQzLCAyMjEsIDEyOSwgNDMsIDIyMSwgMTI4LCA0MywgMjIxLCAxMjcsIDQzLCAyMjEsIDEyNiwgNDMsIDIyMSwgCisgICAgMTI1LCA0MywgMjIxLCAxMjQsIDQzLCAyMjEsIDEyMywgNDMsIDIyMSwgMTIyLCA0MywgMjIxLCAxMjEsIDQzLCAyMjEsIAorICAgIDExOSwgNDMsIDIyMSwgMTE4LCA0MywgMjIxLCAxMTcsIDQzLCAyMjEsIDExNiwgNDMsIDIyMSwgMTE1LCA0MywgMjIxLCAKKyAgICAxMTQsIDQzLCAyMjEsIDExMywgNDMsIDIyMSwgMTEyLCA0MywgMjIxLCAxMTEsIDQzLCAyMjEsIDExMCwgNDMsIDIyMSwgCisgICAgMTA4LCA0MywgMjIxLCAxMDcsIDQzLCAyMjEsIDEwNiwgNDMsIDIyMSwgMTA1LCA0MywgMjIxLCAxMDQsIDQzLCAyMjEsIAorICAgIDEwMywgNDMsIDIyMSwgMTAyLCA0MywgMjIxLCAxMDEsIDQzLCAyMjEsIDEwMCwgNDMsIDIyMSwgOTksIDQzLCAyMjEsIDk3LCAKKyAgICA0MywgMjIxLCA5NiwgNDMsIDIyMSwgOTUsIDQzLCAyMjEsIDk0LCA0MywgMjIxLCA5MywgNDMsIDIyMSwgOTIsIDQzLCAyMjEsIAorICAgIDkxLCA0MywgMjIxLCA5MCwgNDMsIDIyMSwgODksIDQzLCAyMjEsIDg4LCA0MywgMjIxLCA4NiwgNDMsIDIyMSwgODUsIDQzLCAKKyAgICAyMjEsIDg0LCA0MywgMjIxLCA4MywgNDMsIDIyMSwgODIsIDQzLCAyMjEsIDgxLCA0MywgMjIxLCA4MCwgNDMsIDIyMSwgNzksIAorICAgIDQzLCAyMjEsIDc4LCA0MywgMjIxLCA3NywgNDMsIDIyMiwgNzQsIDQzLCAyMjIsIDczLCA0MywgMjIyLCA3MiwgNDMsIDIyMiwgCisgICAgNzEsIDQzLCAyMjIsIDcwLCA0MywgMjIyLCA2OSwgNDMsIDIyMiwgNjgsIDQzLCAyMjIsIDY3LCA0MywgMjIyLCA2NiwgNDMsIAorICAgIDIyMiwgNjUsIDQzLCAyMjIsIDYzLCA0MywgMjIyLCA2MiwgNDMsIDIyMiwgNjEsIDQzLCAyMjIsIDYwLCA0MywgMjIyLCA1OSwgCisgICAgNDMsIDIyMiwgNTgsIDQzLCAyMjIsIDU3LCA0MywgMjIyLCA1NiwgNDMsIDIyMiwgNTUsIDQzLCAyMjIsIDU0LCA0MywgMjIyLCAKKyAgICA1MiwgNDMsIDIyMiwgNTEsIDQzLCAyMjIsIDUwLCA0MywgMjIyLCA0OSwgNDMsIDIyMiwgNDgsIDQzLCAyMjIsIDQ3LCA0MywgCisgICAgMjIyLCA0NiwgNDMsIDIyMiwgNDUsIDQzLCAyMjIsIDQ0LCA0MywgMjIyLCA0MywgNDMsIDIyMiwgNDEsIDQzLCAyMjIsIDQwLCAKKyAgICA0MywgMjIyLCAzOSwgNDMsIDIyMiwgMzgsIDQzLCAyMjIsIDM3LCA0MywgMjIyLCAzNiwgNDMsIDIyMiwgMzUsIDQzLCAyMjIsIAorICAgIDM0LCA0MywgMjIyLCAzMywgNDMsIDIyMiwgMzIsIDQzLCAyMjIsIDMwLCA0MywgMjIyLCAyOSwgNDMsIDIyMiwgMjgsIDQzLCAKKyAgICAyMjIsIDI3LCA0MywgMjIyLCAyNiwgNDMsIDIyMiwgMjUsIDQzLCAyMjIsIDI0LCA0MywgMjIyLCAyMywgNDMsIDIyMiwgMjIsIAorICAgIDQzLCAyMjIsIDIxLCA0MywgMjIyLCAxOSwgNDMsIDIyMiwgMTgsIDQzLCAyMjIsIDE3LCA0MywgMjIyLCAxNiwgNDMsIDIyMiwgCisgICAgMTUsIDQzLCAyMjIsIDE0LCA0MywgMjIyLCAxMywgNDMsIDIyMiwgMTIsIDQzLCAyMjIsIDExLCA0MywgMjIyLCAxMCwgNDMsIAorICAgIDIyMiwgOCwgNDMsIDIyMiwgNywgNDMsIDIyMiwgNiwgNDMsIDIyMiwgNSwgNDMsIDIyMiwgNCwgNDMsIDIyMiwgMywgNDMsIAorICAgIDIyMiwgMiwgNDMsIDIyMiwgMSwgNDMsIDIyMiwgMCwgNDMsIDIyMSwgMjU1LCA0MywgMjIxLCAyNTMsIDQzLCAyMjEsIDI1MiwgCisgICAgNDMsIDIyMSwgMjUxLCA0MywgMjIxLCAyNTAsIDQzLCAyMjEsIDI0OSwgNDMsIDIyMSwgMjQ4LCA0MywgMjIxLCAyNDcsIDQzLCAKKyAgICAyMjEsIDI0NiwgNDMsIDIyMSwgMjQ1LCA0MywgMjIxLCAyNDQsIDQzLCAyMjEsIDI0MiwgNDMsIDIyMSwgMjQxLCA0MywgCisgICAgMjIxLCAyNDAsIDQzLCAyMjEsIDIzOSwgNDMsIDIyMSwgMjM4LCA0MywgMjIxLCAyMzcsIDQzLCAyMjEsIDIzNiwgNDMsIAorICAgIDIyMSwgMjM1LCA0MywgMjIxLCAyMzQsIDQzLCAyMjEsIDIzMywgNDMsIDIyMSwgMjMxLCA0MywgMjIxLCAyMzAsIDQzLCAKKyAgICAyMjEsIDIyOSwgNDMsIDIyMSwgMjI4LCA0MywgMjIxLCAyMjcsIDQzLCAyMjEsIDIyNiwgNDMsIDIyMSwgMjI1LCA0MywgCisgICAgMjIxLCAyMjQsIDQzLCAyMjEsIDIyMywgNDMsIDIyMSwgMjIyLCA0MywgMjIxLCAyMTksIDQzLCAyMjEsIDIxOCwgNDMsIAorICAgIDIyMSwgMjE3LCA0MywgMjIxLCAyMTYsIDQzLCAyMjEsIDIxNSwgNDMsIDIyMSwgMjE0LCA0MywgMjIxLCAyMTMsIDQzLCAKKyAgICAyMjEsIDIxMiwgNDMsIDIyMSwgMjExLCA0MywgMjIxLCAyMTAsIDQzLCAyMjEsIDIwOCwgNDMsIDIyMSwgMjA3LCA0MywgCisgICAgMjIxLCAyMDYsIDQzLCAyMjEsIDIwNSwgNDMsIDIyMSwgMjA0LCA0MywgMjIxLCAyMDMsIDQzLCAyMjEsIDIwMiwgNDMsIAorICAgIDIyMSwgMjAxLCA0MywgMjIxLCAyMDAsIDQzLCAyMjEsIDE5OSwgNDMsIDIyMSwgMTk3LCA0MywgMjIxLCAxOTYsIDQzLCAKKyAgICAyMjEsIDE5NSwgNDMsIDIyMSwgMTk0LCA0MywgMjIxLCAxOTMsIDQzLCAyMjEsIDE5MiwgNDMsIDIyMSwgMTkxLCA0MywgCisgICAgMjIxLCAxOTAsIDQzLCAyMjEsIDE4OSwgNDMsIDIyMSwgMTg4LCA0MywgMjIxLCAxODYsIDQzLCAyMjEsIDE4NSwgNDMsIAorICAgIDIyMSwgMTg0LCA0MywgMjIxLCAxODMsIDQzLCAyMjEsIDE4MiwgNDMsIDIyMSwgMTgxLCA0MywgMjIxLCAxODAsIDQzLCAKKyAgICAyMjEsIDE3OSwgNDMsIDIyMSwgMTc4LCA0MywgMjIxLCAxNzcsIDQzLCAyMjEsIDE3NSwgNDMsIDIyMSwgMTc0LCA0MywgCisgICAgMjIxLCAxNzMsIDQzLCAyMjEsIDE3MiwgNDMsIDIyMSwgMTcxLCA0MywgMjIxLCAxNzAsIDQzLCAyMjEsIDE2OSwgNDMsIAorICAgIDIyMSwgMTY4LCA0MywgMjIxLCAxNjcsIDQzLCAyMjEsIDE2NiwgNDMsIDIyMSwgMTY0LCA0MywgMjIxLCAxNjMsIDQzLCAKKyAgICAyMjEsIDE2MiwgNDMsIDIyMSwgMTYxLCA0MywgMjIxLCAxNjAsIDQzLCAyMjEsIDE1OSwgNDMsIDIyMSwgMTU4LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tfb2Zmc2V0MVtdID0gewotICAgIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNiwgMTcsIDE4LCAxOSwgCi0gICAgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgCi0gICAgMzgsIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCAxNiwgNTIsIDUzLCA1NCwgCi0gICAgMTYsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgCi0gICAgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgMTYsIDg0LCA4NSwgODYsIDg3LCA4OCwgCi0gICAgODksIDkwLCA5MSwgOTIsIDkzLCA5NCwgOTUsIDk2LCA5NywgOTgsIDk5LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxMDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgCi0gICAgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxNiwgMTIwLCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTIxLCAxMjIsIDEyMywgMTI0LCAKLSAgICAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTYsIAotICAgIDEzOSwgMTQwLCAxNDEsIDE0MiwgMTQzLCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNDQsIDE2LCAxNDUsIDE2LCAxNDYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNDcsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDE2LCAxNTQsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDE2LCAxNTUsIDE1NiwgMTU3LCAxNTgsIDE1OSwgMTYsIDE2MCwgMTYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIAotICAgIDE2NywgMTY4LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNjksIDE3MCwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNzYsIAotICAgIDE2LCAxNzcsIDE3OCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAKKyAgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIAorICAgIDIxLCAyMiwgMjMsIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIAorICAgIDM5LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIAorICAgIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIAorICAgIDc1LCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMsIDg0LCA4NSwgODYsIDE3LCA4NywgODgsIDg5LCA5MCwgOTEsIAorICAgIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTAzLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEwNCwgMTA1LCAxMDYsIDEwNywgMTA4LCAKKyAgICAxMDksIDExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgCisgICAgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDEyOCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTI5LCAxMzAsIAorICAgIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAKKyAgICAxNDUsIDE0NiwgMTcsIDE0NywgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNTIsIDE3LCAKKyAgICAxNTMsIDE3LCAxNTQsIDE3LCAxNTUsIDE3LCAxNTYsIDE3LCAxNywgMTcsIDE1NywgMTcsIDE3LCAxNywgMTU4LCAxNTksIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE2MCwgMTYxLCAxNjIsIDE2MywgMTY0LCAKKyAgICAxNjUsIDE2NiwgMTcsIDE2NywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTczLCAKKyAgICAxNzQsIDE3NSwgMTc2LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTc3LCAKKyAgICAxNzgsIDE3OSwgMTgwLCAxODEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxODIsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxNywgMTg4LCAKKyAgICAxNywgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAxNywgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIAorICAgIDIwNywgMjA4LCAyMDksIDIxMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMjExLCAyMTIsIDIxMywgCisgICAgMjE0LCAyMTUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDIxNiwgMTcsIDIxNywgMjE4LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBwaHJhc2Vib29rX29mZnNldDJbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAzLCA2LCA5LCAxMSwgMTQsIDE3LCAxOSwgMjEsIDI0LCAyNywgMjksIDMxLCAKICAgICAzMywgMzUsIDM5LCA0MSwgNDQsIDQ2LCA0OCwgNTAsIDUyLCA1NCwgNTYsIDU4LCA2MCwgNjIsIDY0LCA2NiwgNjksIDcyLCAKLSAgICA3NSwgNzgsIDgyLCA4NiwgOTEsIDk2LCAxMDEsIDEwNSwgMTEwLCAxMTQsIDExOCwgMTIyLCAxMjcsIDEzMiwgMTM2LCAxNDAsIAotICAgIDE0NCwgMTQ4LCAxNTMsIDE1OCwgMTYyLCAxNjYsIDE3MSwgMTc1LCAxNzksIDE4NCwgMTg5LCAxOTQsIDE5OSwgMjAyLCAKLSAgICAyMDYsIDIwOSwgMjEzLCAyMTYsIDIyMCwgMjI0LCAyMjksIDIzNCwgMjM5LCAyNDMsIDI0OCwgMjUyLCAyNTYsIDI2MCwgCi0gICAgMjY1LCAyNzAsIDI3NCwgMjc4LCAyODIsIDI4NiwgMjkxLCAyOTYsIDMwMCwgMzA0LCAzMDksIDMxMywgMzE3LCAzMjIsIAotICAgIDMyNywgMzMyLCAzMzcsIDM0MSwgMzQ0LCAzNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0OSwgMzUzLCAzNTgsIAotICAgIDM2MSwgMzY0LCAzNjcsIDM3MCwgMzczLCAzNzYsIDM3NywgMzgwLCAzODYsIDM5NCwgMzk2LCA0MDAsIDQwMywgNDA1LCAKLSAgICA0MDgsIDQxMSwgNDE0LCA0MTcsIDQyMSwgNDI0LCA0MjcsIDQzMSwgNDMzLCA0MzYsIDQ0MiwgNDUwLCA0NTcsIDQ2NCwgCi0gICAgNDcxLCA0NzYsIDQ4MywgNDg5LCA0OTYsIDUwMiwgNTA4LCA1MTYsIDUyMSwgNTI5LCA1MzYsIDU0MiwgNTQ5LCA1NTUsIAotICAgIDU2MywgNTcwLCA1NzgsIDU4NSwgNTkwLCA1OTcsIDYwNCwgNjEwLCA2MTcsIDYyMywgNjI5LCA2MzIsIDYzOCwgNjQ1LCAKLSAgICA2NTEsIDY1OCwgNjY0LCA2NzEsIDY3NiwgNjgyLCA2ODksIDY5NSwgNzAyLCA3MDgsIDcxNCwgNzIyLCA3MjcsIDczNSwgCi0gICAgNzQyLCA3NDgsIDc1NSwgNzYxLCA3NjksIDc3NiwgNzg0LCA3OTEsIDc5NiwgODAzLCA4MTAsIDgxNiwgODIzLCA4MjksIAotICAgIDgzNSwgODM4LCA4NDQsIDg1MSwgODU3LCA4NjQsIDg3MCwgODc3LCA4ODIsIDg4OSwgODk2LCA5MDMsIDkxMCwgOTE3LCAKLSAgICA5MjQsIDkzMSwgOTM4LCA5NDUsIDk1MywgOTYxLCA5NjksIDk3NywgOTg1LCA5OTMsIDEwMDEsIDEwMDksIDEwMTYsIDEwMjMsIAotICAgIDEwMzAsIDEwMzcsIDEwNDQsIDEwNTEsIDEwNTgsIDEwNjUsIDEwNzIsIDEwNzksIDEwODYsIDEwOTMsIDExMDEsIDExMDksIAotICAgIDExMTcsIDExMjUsIDExMzMsIDExNDEsIDExNDksIDExNTcsIDExNjUsIDExNzMsIDExODAsIDExODcsIDExOTQsIDEyMDEsIAotICAgIDEyMDksIDEyMTcsIDEyMjUsIDEyMzMsIDEyNDEsIDEyNDksIDEyNTcsIDEyNjMsIDEyNjgsIDEyNzMsIDEyODEsIDEyODksIAotICAgIDEyOTcsIDEzMDUsIDEzMTAsIDEzMTcsIDEzMjQsIDEzMzIsIDEzNDAsIDEzNDgsIDEzNTYsIDEzNjYsIDEzNzYsIDEzODMsIAotICAgIDEzOTAsIDEzOTcsIDE0MDQsIDE0MTIsIDE0MjAsIDE0MjgsIDE0MzYsIDE0NDcsIDE0NTIsIDE0NTcsIDE0NjQsIDE0NzEsIAotICAgIDE0NzgsIDE0ODUsIDE0OTIsIDE0OTksIDE1MDQsIDE1MDksIDE1MTYsIDE1MjMsIDE1MzEsIDE1MzksIDE1NDcsIDE1NTUsIAotICAgIDE1NjIsIDE1NjksIDE1NzcsIDE1ODUsIDE1OTMsIDE2MDEsIDE2MDksIDE2MTcsIDE2MjUsIDE2MzMsIDE2NDEsIDE2NDksIAotICAgIDE2NTYsIDE2NjMsIDE2NjksIDE2NzUsIDE2ODIsIDE2ODksIDE2OTYsIDE3MDMsIDE3MTEsIDE3MTksIDE3MjYsIDE3MzMsIAotICAgIDE3NDAsIDE3NDcsIDE3NTUsIDE3NjMsIDE3NzEsIDE3NzksIDE3ODYsIDE3OTMsIDE4MDAsIDE4MDgsIDE4MTYsIDE4MjQsIAotICAgIDE4MzIsIDE4MzcsIDE4NDMsIDE4NDksIDE4NTYsIDE4NjMsIDE4NjgsIDE4NzMsIDE4NzksIDE4ODYsIDE4OTMsIDE5MDAsIAotICAgIDE5MDcsIDE5MTUsIDE5MjMsIDE5MjksIDE5MzQsIDE5MzksIDE5NDUsIDE5NTIsIDE5NTksIDE5NjYsIDE5NzEsIDE5NzYsIAotICAgIDE5ODEsIDE5ODgsIDE5OTUsIDIwMDIsIDIwMDksIDIwMTYsIDIwMjEsIDIwMjksIDIwMzksIDIwNDcsIDIwNTQsIDIwNjEsIAotICAgIDIwNjYsIDIwNzEsIDIwNzgsIDIwODUsIDIwODksIDIwOTQsIDIwOTksIDIxMDQsIDIxMTEsIDIxMjAsIDIxMjcsIDIxMzQsIAotICAgIDIxNDMsIDIxNTAsIDIxNTcsIDIxNjIsIDIxNjksIDIxNzYsIDIxODMsIDIxOTAsIDIxOTcsIDIyMDIsIDIyMDksIDIyMTYsIAotICAgIDIyMjQsIDIyMjksIDIyMzQsIDIyMzksIDIyNDksIDIyNTMsIDIyNTksIDIyNjUsIDIyNzEsIDIyNzcsIDIyODUsIDIyOTgsIAotICAgIDIzMDYsIDIzMTEsIDIzMjEsIDIzMjYsIDIzMzEsIDIzNDEsIDIzNDYsIDIzNTMsIDIzNjAsIDIzNjgsIDIzNzYsIDIzODMsIAotICAgIDIzOTAsIDIzOTcsIDI0MDQsIDI0MTQsIDI0MjQsIDI0MzMsIDI0NDIsIDI0NTIsIDI0NjIsIDI0NzIsIDI0ODIsIDI0ODcsIAotICAgIDI0OTcsIDI1MDcsIDI1MTcsIDI1MjcsIDI1MzUsIDI1NDMsIDI1NTAsIDI1NTcsIDI1NjUsIDI1NzMsIDI1ODEsIDI1ODksIAotICAgIDI1OTYsIDI2MDMsIDI2MTMsIDI2MjMsIDI2MzEsIDI2MzksIDI2NDcsIDI2NTIsIDI2NjIsIDI2NjcsIDI2NzQsIDI2ODEsIAotICAgIDI2ODYsIDI2OTEsIDI2OTksIDI3MDcsIDI3MTcsIDI3MjcsIDI3MzQsIDI3NDEsIDI3NDksIDI3NTcsIDI3NjUsIDI3NzMsIAotICAgIDI3ODIsIDI3OTEsIDI3OTksIDI4MDcsIDI4MTYsIDI4MjUsIDI4MzQsIDI4NDMsIDI4NTMsIDI4NjMsIDI4NzEsIDI4NzksIAotICAgIDI4ODgsIDI4OTcsIDI5MDYsIDI5MTUsIDI5MjUsIDI5MzUsIDI5NDMsIDI5NTEsIDI5NjAsIDI5NjksIDI5NzgsIDI5ODcsIAotICAgIDI5OTYsIDMwMDUsIDMwMTAsIDMwMTUsIDMwMjMsIDMwMzEsIDMwNDEsIDMwNDksIDMwNTQsIDMwNTksIDMwNjYsIDMwNzMsIAotICAgIDMwODAsIDMwODcsIDMwOTQsIDMxMDEsIDMxMTEsIDMxMjEsIDMxMzEsIDMxNDEsIDMxNDgsIDMxNTUsIDMxNjUsIDMxNzUsIAotICAgIDMxODMsIDMxOTEsIDMxOTksIDMyMDcsIDMyMTUsIDMyMjIsIDMyMjksIDMyMzYsIDMyNDIsIDMyNDksIDMyNTYsIDMyNjMsIAotICAgIDMyNzIsIDMyODIsIDMyOTIsIDMyOTksIDMzMDYsIDMzMTIsIDMzMTcsIDMzMjIsIDMzMjgsIDMzMzQsIDMzNDEsIDMzNDgsIAotICAgIDMzNTksIDMzNjksIDMzNzYsIDMzODMsIDMzOTAsIDMzOTcsIDM0MDIsIDM0MDcsIDM0MTMsIDM0MTksIDM0MjUsIDM0MzMsIAotICAgIDM0NDEsIDM0NDgsIDM0NTMsIDM0NTgsIDM0NjUsIDM0NzEsIDM0NzgsIDM0ODcsIDM0OTYsIDM1MDUsIDM1MTIsIDM1MTcsIAotICAgIDM1MjIsIDM1MjcsIDM1MzQsIDM1MzksIDM1NDYsIDM1NTMsIDM1NjAsIDM1NjUsIDM1NzAsIDM1NzksIDM1ODcsIDM1OTYsIAotICAgIDM2MDEsIDM2MDYsIDM2MTYsIDM2MjMsIDM2MzEsIDM2NDAsIDM2NDUsIDM2NTEsIDM2NTcsIDM2NjQsIDM2NjksIDM2NzQsIAotICAgIDM2ODQsIDM2OTIsIDM3MDEsIDM3MDksIDM3MTcsIDM3MjYsIDM3MzEsIDM3MzgsIDM3NDUsIDM3NTAsIDM3NjEsIDM3NjksIAotICAgIDM3NzcsIDM3ODMsIDM3OTIsIDM3OTcsIDM4MDIsIDM4MDksIDM4MTQsIDM4MjAsIDM4MjYsIDM4MzIsIDM4NDEsIDM4NDksIAotICAgIDM4NTQsIDM4NjIsIDM4NjgsIDM4NzYsIDM4ODQsIDM4OTAsIDM4OTYsIDM5MDIsIDM5MTAsIDM5MTgsIDM5MjMsIDM5MzEsIAotICAgIDM5MzcsIDM5NDIsIDM5NDksIDM5NTcsIDM5NjYsIDM5NzMsIDM5ODAsIDM5OTAsIDM5OTcsIDQwMDQsIDQwMTQsIDQwMjEsIAotICAgIDQwMjgsIDQwMzUsIDQwNDEsIDQwNDcsIDQwNTYsIDQwNjgsIDQwNzIsIDQwNzksIDQwODQsIDQwODgsIDQwOTMsIDQxMDEsIAotICAgIDQxMDgsIDQxMTMsIDQxMTgsIDQxMjIsIDQxMjcsIDQxMzIsIDQxMzYsIDQxNDEsIDQxNDcsIDQxNTMsIDQxNTksIDQxNjYsIAotICAgIDQxNzEsIDQxNzYsIDQxODEsIDQxODYsIDQxOTIsIDQxOTQsIDQxOTksIDQyMDMsIDQyMDksIDQyMTUsIDQyMjEsIDQyMjYsIAotICAgIDQyMzMsIDQyNDAsIDQyNDYsIDQyNTMsIDQyNjEsIDQyNjksIDQyNzQsIDQyNzksIDQyODMsIDQyODgsIDQyOTAsIDQyOTIsIAotICAgIDQyOTUsIDQyOTcsIDQyOTksIDQzMDQsIDQzMDksIDQzMTUsIDQzMjAsIDQzMjQsIDQzMjgsIDQzMzMsIDQzNDEsIDQzNDcsIAotICAgIDQzNTIsIDQzNTgsIDQzNjMsIDQzNjksIDQzNzcsIDQzODUsIDQzODksIDQzOTMsIDQzOTgsIDQ0MDQsIDQ0MTAsIDQ0MTYsIAotICAgIDQ0MjIsIDQ0MjcsIDQ0MzUsIDQ0NDQsIDQ0NTMsIDQ0NTcsIDQ0NjMsIDQ0NzAsIDQ0NzcsIDQ0ODQsIDQ0OTEsIDQ0OTUsIAotICAgIDQ1MDEsIDQ1MDYsIDQ1MTEsIDQ1MTYsIDQ1MjEsIDQ1MjMsIDQ1MjYsIDQ1MjksIDQ1MzIsIDQ1MzUsIDQ1MzcsIDQ1NDEsIAotICAgIDQ1NDUsIDQ1NTEsIDQ1NTQsIDQ1NTksIDQ1NjUsIDQ1NzEsIDQ1NzQsIDQ1NzksIDQ1ODQsIDQ1ODgsIDQ1OTMsIDQ1OTksIAotICAgIDQ2MDUsIDQ2MTEsIDQ2MTYsIDQ2MjEsIDQ2MjYsIDQ2MjksIDQ2MzUsIDQ2NDAsIDQ2NDUsIDQ2NDksIDQ2NTQsIDQ2NjAsIAotICAgIDQ2NjYsIDQ2NjksIDQ2NzMsIDQ2NzcsIDQ2ODEsIDQ2ODQsIDQ2ODcsIDQ2OTIsIDQ2OTYsIDQ3MDMsIDQ3MDcsIDQ3MTMsIAotICAgIDQ3MTcsIDQ3MjMsIDQ3MjcsIDQ3MzEsIDQ3MzUsIDQ3NDAsIDQ3NDUsIDQ3NTEsIDQ3NTYsIDQ3NjMsIDQ3NjksIDQ3NzUsIAotICAgIDQ3ODEsIDQ3ODQsIDQ3ODgsIDQ3OTIsIDQ3OTUsIDQ3OTksIDQ4MDQsIDQ4MDksIDQ4MTMsIDQ4MTcsIDQ4MjMsIDQ4MjcsIAotICAgIDQ4MzEsIDQ4MzYsIDQ4NDIsIDQ4NDcsIDQ4NTIsIDQ4NTYsIDQ4NjIsIDQ4NjcsIDQ4NzIsIDQ4NzcsIDQ4ODIsIDQ4ODgsIAotICAgIDQ4OTEsIDQ4OTUsIDQ5MDAsIDQ5MDUsIDQ5MTQsIDQ5MjAsIDQ5MjUsIDQ5MjksIDQ5MzQsIDQ5MzgsIDQ5NDMsIDQ5NDcsIAotICAgIDQ5NTEsIDQ5NTYsIDQ5NTksIDQ5NjUsIDQ5NzAsIDQ5NzUsIDQ5ODAsIDQ5ODUsIDQ5OTAsIDQ5OTUsIDUwMDEsIDUwMDcsIAotICAgIDUwMTIsIDUwMTcsIDUwMjIsIDUwMjgsIDUwMzMsIDUwMzksIDUwNDQsIDUwNDksIDUwNTYsIDUwNjMsIDUwNjYsIDUwNzAsIAotICAgIDUwNzcsIDAsIDAsIDUwODQsIDUwODcsIDUwOTUsIDUxMDQsIDUxMTQsIDAsIDAsIDAsIDAsIDAsIDUxMTgsIDUxMjEsIAotICAgIDUxMjYsIDUxMzQsIDUxMzksIDUxNDcsIDUxNTUsIDAsIDUxNjMsIDAsIDUxNzEsIDUxNzksIDUxODcsIDUxOTgsIDUyMDMsIAotICAgIDUyMDgsIDUyMTMsIDUyMTgsIDUyMjMsIDUyMjgsIDUyMzMsIDUyMzgsIDUyNDMsIDUyNDgsIDUyNTMsIDUyNTgsIDUyNjMsIAotICAgIDUyNjgsIDUyNzMsIDUyNzgsIDAsIDUyODMsIDUyODgsIDUyOTMsIDUyOTgsIDUzMDMsIDUzMDgsIDUzMTMsIDUzMTgsIAotICAgIDUzMjYsIDUzMzQsIDUzNDIsIDUzNTAsIDUzNTgsIDUzNjYsIDUzNzcsIDUzODIsIDUzODcsIDUzOTIsIDUzOTcsIDU0MDIsIAotICAgIDU0MDcsIDU0MTIsIDU0MTcsIDU0MjIsIDU0MjcsIDU0MzIsIDU0MzcsIDU0NDIsIDU0NDcsIDU0NTIsIDU0NTcsIDU0NjIsIAotICAgIDU0NjgsIDU0NzMsIDU0NzgsIDU0ODMsIDU0ODgsIDU0OTMsIDU0OTgsIDU1MDMsIDU1MTEsIDU1MTksIDU1MjcsIDU1MzUsIAotICAgIDU1NDMsIDU1NDgsIDU1NTIsIDU1NTYsIDU1NjMsIDU1NzMsIDU1ODMsIDU1ODcsIDU1OTEsIDU1OTUsIDU2MDEsIDU2MDgsIAotICAgIDU2MTIsIDU2MTcsIDU2MjEsIDU2MjYsIDU2MzAsIDU2MzUsIDU2MzksIDU2NDQsIDU2NDksIDU2NTQsIDU2NTksIDU2NjQsIAotICAgIDU2NjksIDU2NzQsIDU2NzksIDU2ODQsIDU2ODksIDU2OTQsIDU2OTksIDU3MDQsIDU3MDksIDU3MTQsIDU3MTgsIDU3MjIsIAotICAgIDU3MjgsIDU3MzIsIDU3MzcsIDU3NDMsIDU3NTAsIDU3NTUsIDU3NjAsIDU3NjcsIDU3NzIsIDU3NzcsIDU3ODMsIDU3OTEsIAotICAgIDU4MDAsIDU4MTAsIDU4MTgsIDU4MjMsIDU4MjgsIDU4MzMsIDU4NDAsIDU4NDUsIDU4NTEsIDU4NTYsIDU4NjEsIDU4NjYsIAotICAgIDU4NzEsIDU4NzYsIDU4ODEsIDU4ODksIDU4OTUsIDU5MDAsIDU5MDQsIDU5MDksIDU5MTQsIDU5MTksIDU5MjQsIDU5MjksIAotICAgIDU5MzQsIDU5MzksIDU5NDMsIDU5NDksIDU5NTMsIDU5NTgsIDU5NjMsIDU5NjgsIDU5NzIsIDU5NzcsIDU5ODIsIDU5ODcsIAotICAgIDU5OTIsIDU5OTYsIDYwMDEsIDYwMDUsIDYwMTAsIDYwMTUsIDYwMjAsIDYwMjUsIDYwMzEsIDYwMzYsIDYwNDIsIDYwNDYsIAotICAgIDYwNTEsIDYwNTUsIDYwNTksIDYwNjQsIDYwNjksIDYwNzQsIDYwNzksIDYwODQsIDYwODksIDYwOTQsIDYwOTgsIDYxMDQsIAotICAgIDYxMDgsIDYxMTMsIDYxMTgsIDYxMjMsIDYxMjcsIDYxMzIsIDYxMzcsIDYxNDIsIDYxNDcsIDYxNTEsIDYxNTYsIDYxNjAsIAotICAgIDYxNjUsIDYxNzAsIDYxNzUsIDYxODAsIDYxODYsIDYxOTEsIDYxOTcsIDYyMDEsIDYyMDYsIDYyMTAsIDYyMTgsIDYyMjMsIAotICAgIDYyMjgsIDYyMzMsIDYyNDAsIDYyNDUsIDYyNTEsIDYyNTYsIDYyNjEsIDYyNjYsIDYyNzEsIDYyNzYsIDYyODEsIDYyODksIAotICAgIDYyOTUsIDYzMDAsIDYzMDUsIDYzMTAsIDYzMTUsIDYzMjAsIDYzMjYsIDYzMzIsIDYzMzksIDYzNDYsIDYzNTUsIDYzNjQsIAotICAgIDYzNzEsIDYzNzgsIDYzODcsIDYzOTYsIDY0MDEsIDY0MDYsIDY0MTEsIDY0MTYsIDY0MjEsIDY0MjYsIDY0MzEsIDY0MzYsIAotICAgIDY0NDcsIDY0NTgsIDY0NjMsIDY0NjgsIDY0NzUsIDY0ODIsIDY0OTAsIDY0OTgsIDY1MDMsIDY1MDgsIDY1MTMsIDY1MTgsIAotICAgIDY1MjIsIDY1MjYsIDY1MzAsIDY1MzUsIDY1NDAsIDY1NDQsIDY1NTEsIDY1NTYsIDY1NjYsIDY1NzYsIDY1ODIsIDY1ODgsIAotICAgIDY1OTYsIDY2MDQsIDY2MTIsIDY2MjAsIDY2MjcsIDY2MzQsIDY2NDMsIDY2NTIsIDY2NjAsIDY2NjgsIDY2NzYsIDY2ODQsIAotICAgIDY2OTEsIDY2OTgsIDY3MDUsIDY3MTIsIDY3MTgsIDY3MjQsIDY3MzAsIDY3MzYsIDY3NDQsIDY3NTIsIDY3NTksIDY3NjYsIAotICAgIDY3NzUsIDY3ODQsIDY3OTAsIDY3OTYsIDY4MDQsIDY4MTIsIDY4MjAsIDY4MjgsIDY4MzQsIDY4NDAsIDY4NDgsIDY4NTYsIAotICAgIDY4NjQsIDY4NzIsIDY4NzksIDY4ODYsIDY4OTQsIDY5MDIsIDY5MTAsIDY5MTgsIDY5MjMsIDY5MjgsIDY5MzUsIDY5NDIsIAotICAgIDY5NTIsIDY5NjIsIDY5NjYsIDY5NzQsIDY5ODIsIDY5ODgsIDY5OTQsIDcwMDIsIDcwMTAsIDcwMTcsIDcwMjQsIDcwMzIsIAotICAgIDcwNDAsIDcwNDcsIDcwNTQsIDcwNjIsIDcwNzAsIDcwNzUsIDcwODIsIDcwODksIDcwOTUsIDcxMDEsIDcxMDcsIDcxMTMsIAotICAgIDcxMjEsIDcxMjksIDcxMzQsIDcxMzksIDcxNDYsIDcxNTMsIDcxNjAsIDcxNjcsIDcxNzQsIDcxODEsIDcxODgsIDcxOTUsIAotICAgIDcyMDMsIDcyMTEsIDcyMTgsIDcyMjUsIDcyMzEsIDcyMzcsIDcyNDMsIDcyNDksIDcyNTcsIDcyNjUsIDcyNzEsIDcyNzcsIAotICAgIDcyODQsIDcyOTEsIDcyOTcsIDczMDMsIDczMTAsIDczMTcsIDczMjQsIDczMzEsIDczMzksIDczNDcsIDczNTQsIDczNjEsIAotICAgIDczNzAsIDczNzksIDczODYsIDczOTMsIDc0MDAsIDc0MDcsIDc0MTQsIDc0MjEsIDc0MjgsIDc0MzUsIDc0NDIsIDc0NDksIAotICAgIDc0NTYsIDc0NjMsIDc0NzAsIDc0NzcsIDc0ODQsIDc0OTEsIDc0OTgsIDc1MDUsIDc1MTIsIDc1MTksIDc1MjUsIDc1MzEsIAotICAgIDc1MzgsIDc1NDUsIDc1NTAsIDc1NTUsIDc1NjAsIDc1NjUsIDc1NzAsIDc1NzUsIDc1ODAsIDc1ODUsIDc1OTAsIDc1OTUsIAotICAgIDc2MDEsIDc2MDcsIDc2MTYsIDc2MjUsIDc2MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc2NDMsIDc2NDgsIDc2NTMsIDc2NTgsIDc2NjMsIDc2NjgsIDc2NzMsIDc2NzgsIDc2ODMsIDc2ODcsIDc2OTIsIDc2OTcsIAotICAgIDc3MDIsIDc3MDcsIDc3MTIsIDc3MTcsIDc3MjIsIDc3MjcsIDc3MzIsIDc3MzcsIDc3NDIsIDc3NDcsIDc3NTIsIDc3NTcsIAotICAgIDc3NjIsIDc3NjcsIDc3NzIsIDc3NzcsIDc3ODEsIDc3ODYsIDc3OTEsIDc3OTYsIDc4MDEsIDc4MDYsIDc4MTEsIDc4MTYsIAotICAgIDc4MjEsIDc4MjYsIDAsIDAsIDc4MzEsIDc4MzgsIDc4NDEsIDc4NDUsIDc4NDksIDc4NTIsIDc4NTYsIDAsIDc4NjAsIAotICAgIDc4NjUsIDc4NzAsIDc4NzUsIDc4ODAsIDc4ODUsIDc4OTAsIDc4OTUsIDc5MDAsIDc5MDQsIDc5MDksIDc5MTQsIDc5MTksIAotICAgIDc5MjQsIDc5MjksIDc5MzQsIDc5MzksIDc5NDQsIDc5NDksIDc5NTQsIDc5NTksIDc5NjQsIDc5NjksIDc5NzQsIDc5NzksIAotICAgIDc5ODQsIDc5ODksIDc5OTQsIDc5OTgsIDgwMDMsIDgwMDgsIDgwMTMsIDgwMTgsIDgwMjMsIDgwMjgsIDgwMzMsIDgwMzgsIAotICAgIDgwNDMsIDgwNDgsIDAsIDgwNTUsIDgwNjAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwNjMsIDgwNjgsIDgwNzMsIDgwNzgsIAotICAgIDgwODUsIDgwOTIsIDgwOTcsIDgxMDIsIDgxMDcsIDgxMTIsIDgxMTcsIDgxMjIsIDgxMjcsIDgxMzQsIDgxMzksIDgxNDYsIAotICAgIDgxNTMsIDgxNTgsIDgxNjUsIDgxNzAsIDgxNzUsIDgxODAsIDgxODcsIDgxOTIsIDgxOTcsIDgyMDQsIDgyMTMsIDgyMTgsIAotICAgIDgyMjMsIDgyMjgsIDgyMzMsIDgyMzksIDgyNDQsIDgyNTEsIDgyNTgsIDgyNjUsIDgyNzAsIDgyNzUsIDgyODAsIDgyODUsIAotICAgIDgyOTAsIDgyOTUsIDgzMDUsIDgzMTAsIDgzMTgsIDgzMjMsIDgzMjgsIDgzMzMsIDgzMzgsIDgzNDUsIDgzNTIsIDgzNTksIAotICAgIDgzNjUsIDgzNzAsIDgzNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgzODQsIDgzODgsIDgzOTIsIDgzOTYsIDg0MDAsIAotICAgIDg0MDQsIDg0MDgsIDg0MTIsIDg0MTYsIDg0MjAsIDg0MjQsIDg0MjksIDg0MzMsIDg0MzcsIDg0NDIsIDg0NDYsIDg0NTEsIAotICAgIDg0NTUsIDg0NTksIDg0NjMsIDg0NjgsIDg0NzIsIDg0NzcsIDg0ODEsIDg0ODUsIDg0ODksIDg0OTMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDg0OTcsIDg1MDQsIDg1MTIsIDg1MTksIDg1MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1MjksIAotICAgIDg1MzIsIDg1MzYsIDg1NDEsIDAsIDAsIDg1NDUsIDg1NTEsIDg1NTcsIDg1NjAsIDg1NjcsIDg1NzYsIDg1NzksIDg1ODIsIAotICAgIDg1ODcsIDg1OTMsIDg1OTcsIDg2MDUsIDg2MTEsIDg2MTcsIDg2MjUsIDg2MjksIDg2MzQsIDg2NDQsIDg2NDksIDg2NTMsIAotICAgIDg2NTcsIDg2NjEsIDAsIDAsIDg2NjQsIDg2NzEsIDAsIDg2NzUsIDg2NzksIDg2ODYsIDg2OTIsIDg2OTksIDg3MDUsIAotICAgIDg3MTEsIDg3MTUsIDg3MTksIDg3MjUsIDg3MjksIDg3MzMsIDg3MzcsIDg3NDEsIDg3NDUsIDg3NDksIDg3NTMsIDg3NTcsIAotICAgIDg3NjEsIDg3NjUsIDg3NjksIDg3NzMsIDg3NzcsIDg3ODEsIDg3ODUsIDg3ODksIDg3OTMsIDg4MDEsIDg4MDksIDg4MTgsIAotICAgIDg4MjcsIDg4MzYsIDg4MzksIDg4NDMsIDg4NDcsIDg4NTEsIDg4NTUsIDg4NTksIDg4NjMsIDg4NjcsIDg4NzEsIDg4NzYsIAotICAgIDg4ODAsIDg4ODMsIDg4ODYsIDg4ODksIDg4OTIsIDg4OTUsIDg4OTgsIDg5MDEsIDg5MDQsIDg5MDgsIDg5MTEsIDg5MTQsIAotICAgIDg5MTksIDg5MjQsIDg5MzAsIDg5MzMsIDg5NDAsIDg5NDksIDg5NTQsIDg5NTgsIDAsIDg5NjUsIDg5NzAsIDg5NzQsIAotICAgIDg5NzgsIDg5ODIsIDg5ODYsIDg5OTAsIDg5OTQsIDg5OTgsIDkwMDIsIDkwMDYsIDkwMTAsIDkwMTUsIDkwMjAsIDkwMjcsIAotICAgIDkwMzMsIDkwMzksIDkwNDUsIDkwNTAsIDkwNTgsIDkwNjYsIDkwNzEsIDkwNzcsIDkwODMsIDkwODksIDkwOTUsIDkwOTksIAotICAgIDkxMDMsIDkxMDcsIDkxMTQsIDkxMjQsIDkxMjgsIDkxMzIsIDkxMzYsIDkxNDIsIDkxNTAsIDkxNTQsIDkxNTgsIDkxNjUsIAotICAgIDkxNjksIDkxNzMsIDkxNzcsIDkxODQsIDkxOTEsIDkyMDMsIDkyMDcsIDkyMTEsIDkyMTUsIDkyMjUsIDkyMzQsIDkyMzgsIAotICAgIDkyNDUsIDkyNTIsIDkyNTksIDkyNjgsIDkyNzksIDkyODcsIDkyOTEsIDkzMDAsIDkzMTEsIDkzMTksIDkzMzIsIDkzNDAsIAotICAgIDkzNDgsIDkzNTYsIDkzNjQsIDkzNzAsIDkzNzksIDkzODYsIDkzOTAsIDkzOTgsIDk0MDIsIDk0MDksIDk0MTcsIDk0MjEsIAotICAgIDk0MjcsIDk0MzQsIDk0NDEsIDk0NDUsIDk0NTMsIDk0NTcsIDk0NjQsIDk0NjgsIDk0NzYsIDk0ODAsIDk0ODgsIDk0OTQsIAotICAgIDk1MDAsIDk1MDcsIDk1MTQsIDk1MjEsIDk1MjcsIDk1MzEsIDk1MzgsIDk1NDYsIDk1NTIsIDk1NTksIDk1NjYsIDk1NzIsIAotICAgIDk1ODEsIDk1ODksIDk1OTYsIDk2MDIsIDk2MDYsIDk2MDksIDk2MTMsIDk2MTksIDk2MjcsIDk2MzEsIDk2MzcsIDk2NDMsIAotICAgIDk2NDksIDk2NTYsIDk2NTksIDk2NjYsIDk2NzEsIDk2NzksIDk2ODQsIDk2ODgsIDk3MDAsIDk3MTIsIDk3MTgsIDk3MjQsIAotICAgIDk3MjksIDk3MzUsIDk3NDAsIDk3NDYsIDk3NTYsIDk3NjMsIDk3NzIsIDk3ODIsIDk3ODgsIDk3OTMsIDk3OTgsIDk4MDIsIAotICAgIDk4MDYsIDk4MTEsIDk4MTYsIDk4MjIsIDk4MzAsIDk4MzgsIDk4NDksIDk4NTQsIDk4NjIsIDk4NzAsIDk4NzcsIDk4ODMsIAotICAgIDk4ODksIDk4OTUsIDk5MDEsIDk5MDcsIDk5MTMsIDk5MTksIDk5MjUsIDk5MzEsIDk5MzgsIDk5NDUsIDk5NTIsIDk5NTgsIAotICAgIDk5NjYsIDk5NzQsIDk5ODAsIDk5ODcsIDk5OTQsIDk5OTksIDEwMDA0LCAxMDAwOCwgMTAwMTUsIDEwMDIyLCAxMDAzMSwgCi0gICAgMTAwNDAsIDEwMDQzLCAxMDA0OCwgMTAwNTMsIDAsIDEwMDU4LCAxMDA2MiwgMTAwNjYsIDEwMDcyLCAxMDA3NiwgMTAwODAsIAotICAgIDEwMDg2LCAxMDA5MCwgMTAwOTgsIDEwMTAyLCAxMDEwNiwgMTAxMTAsIDEwMTE0LCAxMDExOCwgMTAxMjQsIDEwMTI4LCAKLSAgICAxMDEzNCwgMTAxMzgsIDEwMTQyLCAxMDE0NiwgMTAxNTAsIDEwMTU0LCAxMDE1OSwgMTAxNjIsIDEwMTY2LCAxMDE3MSwgCi0gICAgMTAxNzUsIDEwMTc5LCAxMDE4MywgMTAxODcsIDEwMTkxLCAxMDE5NywgMTAyMDMsIDEwMjA5LCAxMDIxMywgMTAyMTcsIAotICAgIDEwMjIyLCAxMDIyNiwgMTAyMzAsIDEwMjM1LCAxMDIzOSwgMTAyNDMsIDEwMjUwLCAxMDI1NywgMTAyNjEsIDEwMjY1LCAKLSAgICAxMDI3MCwgMTAyNzQsIDEwMjc4LCAxMDI4MSwgMTAyODYsIDEwMjg5LCAxMDI5MiwgMTAyOTcsIDEwMzAyLCAxMDMwNiwgCi0gICAgMTAzMTAsIDEwMzE2LCAxMDMyMiwgMTAzMjUsIDAsIDAsIDEwMzI4LCAxMDMzNCwgMTAzNDAsIDEwMzQ2LCAxMDM1NiwgCi0gICAgMTAzNjgsIDEwMzgwLCAxMDM5NywgMTA0MDksIDEwNDIwLCAxMDQyNywgMTA0MzQsIDEwNDQ1LCAxMDQ2MCwgMTA0NzEsIAotICAgIDEwNDc3LCAxMDQ4NiwgMTA0OTQsIDEwNTA2LCAxMDUxNiwgMTA1MjQsIDEwNTM2LCAxMDU0MywgMTA1NTEsIDEwNTYzLCAKLSAgICAxMDU2OSwgMTA1NzUsIDEwNTgzLCAxMDU5MSwgMTA1OTgsIDEwNjAzLCAxMDYxMywgMTA2MjAsIDEwNjMwLCAxMDY0MCwgCi0gICAgMTA2NTMsIDEwNjY3LCAxMDY4MSwgMTA2OTEsIDEwNzAyLCAxMDcxMywgMTA3MjYsIDEwNzM5LCAxMDc1MywgMTA3NjUsIAotICAgIDEwNzc3LCAxMDc5MCwgMTA4MDMsIDEwODE1LCAxMDgyOCwgMTA4MzYsIDEwODQ0LCAxMDg0OSwgMTA4NTQsIDEwODU5LCAKLSAgICAxMDg2NCwgMTA4NjksIDEwODc0LCAxMDg3OSwgMTA4ODQsIDEwODg5LCAxMDg5NCwgMTA4OTksIDEwOTA0LCAxMDkwOSwgCi0gICAgMTA5MTQsIDEwOTE5LCAxMDkyNCwgMTA5MjksIDEwOTM0LCAxMDkzOSwgMTA5NDQsIDEwOTQ5LCAxMDk1NCwgMTA5NTksIAotICAgIDEwOTY0LCAxMDk2OSwgMTA5NzQsIDEwOTc5LCAxMDk4NCwgMTA5ODksIDEwOTk0LCAxMDk5OSwgMTEwMDQsIDExMDA4LCAKLSAgICAxMTAxMywgMTEwMTgsIDExMDIzLCAxMTAyOCwgMTEwMzMsIDExMDM3LCAxMTA0MSwgMTEwNDUsIDExMDQ5LCAxMTA1MywgCi0gICAgMTEwNTcsIDExMDYxLCAxMTA2NSwgMTEwNjksIDExMDczLCAxMTA3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTEwODIsIDExMDg2LCAxMTA4OSwgMTEwOTIsIDExMDk1LCAxMTA5OCwgMTExMDEsIDExMTA0LCAKLSAgICAxMTEwNywgMTExMTAsIDExMTEzLCAxMTExNiwgMTExMjAsIDExMTIzLCAxMTEyNiwgMTExMjksIDExMTMzLCAxMTEzNiwgCi0gICAgMTExNDAsIDExMTQzLCAxMTE0NywgMTExNTAsIDExMTU0LCAxMTE1OCwgMTExNjIsIDExMTY2LCAxMTE2OSwgMTExNzMsIAotICAgIDExMTc3LCAxMTE4MSwgMTExODUsIDExMTg4LCAxMTE5MiwgMTExOTgsIDExMjAxLCAxMTIwNSwgMTEyMDksIDExMjEyLCAKLSAgICAxMTIxNiwgMTEyMTksIDExMjI1LCAxMTIzMSwgMTEyMzcsIDExMjQyLCAxMTI0OSwgMTEyNTYsIDExMjY0LCAxMTI3MSwgCi0gICAgMTEyNzcsIDExMjgzLCAxMTI5MCwgMTEyOTUsIDExMzAwLCAxMTMwNSwgMTEzMTAsIDExMzE2LCAxMTMyMCwgMTEzMjMsIAotICAgIDExMzI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3NSwgNzgsIDgyLCA4NiwgOTEsIDk2LCAxMDEsIDEwNSwgMTEwLCAxMTUsIDEyMCwgMTI0LCAxMjksIDEzNCwgMTM4LCAxNDIsIAorICAgIDE0NiwgMTUwLCAxNTUsIDE2MCwgMTY0LCAxNjgsIDE3MywgMTc3LCAxODIsIDE4NywgMTkyLCAxOTcsIDIwMiwgMjA1LCAKKyAgICAyMDksIDIxMiwgMjE2LCAyMTksIDIyMywgMjI3LCAyMzIsIDIzNywgMjQyLCAyNDYsIDI1MSwgMjU2LCAyNjEsIDI2NSwgCisgICAgMjcwLCAyNzUsIDI3OSwgMjgzLCAyODcsIDI5MSwgMjk2LCAzMDEsIDMwNSwgMzA5LCAzMTQsIDMxOCwgMzIzLCAzMjgsIAorICAgIDMzMywgMzM4LCAzNDMsIDM0NywgMzUwLCAzNTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1NiwgMzYwLCAzNjUsIAorICAgIDM2OCwgMzcxLCAzNzQsIDM3NywgMzgwLCAzODMsIDM4NSwgMzg4LCAzOTQsIDQwMiwgNDA1LCA0MDksIDQxMiwgNDE0LCAKKyAgICA0MTcsIDQyMCwgNDIzLCA0MjYsIDQzMCwgNDMzLCA0MzYsIDQ0MCwgNDQyLCA0NDUsIDQ1MSwgNDU5LCA0NjYsIDQ3MywgCisgICAgNDgwLCA0ODUsIDQ5MiwgNDk4LCA1MDUsIDUxMiwgNTE5LCA1MjcsIDUzMiwgNTQwLCA1NDcsIDU1MywgNTYwLCA1NjcsIAorICAgIDU3NSwgNTgyLCA1OTAsIDU5OCwgNjAzLCA2MTEsIDYxOCwgNjI0LCA2MzEsIDYzOCwgNjQ1LCA2NDgsIDY1NCwgNjYxLCAKKyAgICA2NjcsIDY3NCwgNjgxLCA2ODgsIDY5MywgNjk5LCA3MDYsIDcxMiwgNzE5LCA3MjYsIDczMywgNzQxLCA3NDYsIDc1NCwgCisgICAgNzYxLCA3NjcsIDc3NCwgNzgxLCA3ODksIDc5NiwgODA0LCA4MTIsIDgxNywgODI1LCA4MzIsIDgzOCwgODQ1LCA4NTIsIAorICAgIDg1OSwgODYyLCA4NjgsIDg3NSwgODgxLCA4ODgsIDg5NSwgOTAyLCA5MDcsIDkxNSwgOTIyLCA5MjksIDkzNiwgOTQzLCAKKyAgICA5NTAsIDk1NywgOTY0LCA5NzEsIDk3OSwgOTg3LCA5OTUsIDEwMDMsIDEwMTEsIDEwMTksIDEwMjcsIDEwMzUsIDEwNDIsIAorICAgIDEwNDksIDEwNTYsIDEwNjMsIDEwNzAsIDEwNzcsIDEwODQsIDEwOTEsIDEwOTgsIDExMDUsIDExMTIsIDExMTksIDExMjcsIAorICAgIDExMzUsIDExNDMsIDExNTEsIDExNTksIDExNjcsIDExNzUsIDExODMsIDExOTEsIDExOTksIDEyMDYsIDEyMTMsIDEyMjEsIAorICAgIDEyMjksIDEyMzcsIDEyNDUsIDEyNTMsIDEyNjEsIDEyNjksIDEyNzcsIDEyODUsIDEyOTEsIDEyOTYsIDEzMDEsIDEzMDksIAorICAgIDEzMTcsIDEzMjUsIDEzMzMsIDEzMzgsIDEzNDUsIDEzNTIsIDEzNjAsIDEzNjgsIDEzNzYsIDEzODQsIDEzOTQsIDE0MDQsIAorICAgIDE0MTEsIDE0MTgsIDE0MjUsIDE0MzIsIDE0NDAsIDE0NDgsIDE0NTYsIDE0NjQsIDE0NzUsIDE0ODAsIDE0ODUsIDE0OTIsIAorICAgIDE0OTksIDE1MDYsIDE1MTMsIDE1MjAsIDE1MjcsIDE1MzIsIDE1MzcsIDE1NDQsIDE1NTEsIDE1NTksIDE1NjcsIDE1NzUsIAorICAgIDE1ODMsIDE1OTAsIDE1OTcsIDE2MDUsIDE2MTMsIDE2MjEsIDE2MjksIDE2MzcsIDE2NDUsIDE2NTMsIDE2NjEsIDE2NjksIAorICAgIDE2NzcsIDE2ODQsIDE2OTEsIDE2OTgsIDE3MDUsIDE3MTIsIDE3MTksIDE3MjYsIDE3MzMsIDE3NDEsIDE3NDksIDE3NTYsIAorICAgIDE3NjMsIDE3NzAsIDE3NzcsIDE3ODUsIDE3OTMsIDE4MDEsIDE4MDksIDE4MTcsIDE4MjQsIDE4MzEsIDE4MzksIDE4NDcsIAorICAgIDE4NTUsIDE4NjMsIDE4NjgsIDE4NzQsIDE4ODAsIDE4ODcsIDE4OTQsIDE4OTksIDE5MDQsIDE5MTAsIDE5MTcsIDE5MjQsIAorICAgIDE5MzEsIDE5MzgsIDE5NDYsIDE5NTQsIDE5NjEsIDE5NjcsIDE5NzIsIDE5NzgsIDE5ODUsIDE5OTIsIDE5OTksIDIwMDQsIAorICAgIDIwMDksIDIwMTQsIDIwMjEsIDIwMjgsIDIwMzUsIDIwNDIsIDIwNDksIDIwNTUsIDIwNjMsIDIwNzMsIDIwODIsIDIwODksIAorICAgIDIwOTYsIDIxMDEsIDIxMDYsIDIxMTMsIDIxMjAsIDIxMjQsIDIxMjksIDIxMzQsIDIxMzksIDIxNDcsIDIxNTYsIDIxNjMsIAorICAgIDIxNzAsIDIxNzksIDIxODYsIDIxOTMsIDIxOTgsIDIyMDUsIDIyMTIsIDIyMTksIDIyMjYsIDIyMzMsIDIyMzgsIDIyNDUsIAorICAgIDIyNTIsIDIyNjAsIDIyNjUsIDIyNzAsIDIyNzUsIDIyODUsIDIyODksIDIyOTUsIDIzMDEsIDIzMDcsIDIzMTMsIDIzMjEsIAorICAgIDIzMzQsIDIzNDIsIDIzNDcsIDIzNTcsIDIzNjIsIDIzNjcsIDIzNzcsIDIzODIsIDIzODksIDIzOTYsIDI0MDQsIDI0MTIsIAorICAgIDI0MTksIDI0MjYsIDI0MzMsIDI0NDAsIDI0NTAsIDI0NjAsIDI0NjksIDI0NzgsIDI0ODgsIDI0OTgsIDI1MDgsIDI1MTgsIAorICAgIDI1MjQsIDI1MzQsIDI1NDQsIDI1NTQsIDI1NjQsIDI1NzIsIDI1ODAsIDI1ODcsIDI1OTQsIDI2MDIsIDI2MTAsIDI2MTgsIAorICAgIDI2MjYsIDI2MzMsIDI2NDAsIDI2NTAsIDI2NjAsIDI2NjgsIDI2NzYsIDI2ODQsIDI2ODksIDI2OTksIDI3MDQsIDI3MTEsIAorICAgIDI3MTgsIDI3MjMsIDI3MjgsIDI3MzYsIDI3NDQsIDI3NTQsIDI3NjQsIDI3NzEsIDI3NzgsIDI3ODcsIDI3OTYsIDI4MDQsIAorICAgIDI4MTIsIDI4MjEsIDI4MzAsIDI4MzgsIDI4NDYsIDI4NTUsIDI4NjQsIDI4NzMsIDI4ODIsIDI4OTIsIDI5MDIsIDI5MTAsIAorICAgIDI5MTgsIDI5MjcsIDI5MzYsIDI5NDUsIDI5NTQsIDI5NjQsIDI5NzQsIDI5ODIsIDI5OTAsIDI5OTksIDMwMDgsIDMwMTcsIAorICAgIDMwMjYsIDMwMzUsIDMwNDQsIDMwNDksIDMwNTQsIDMwNjIsIDMwNzAsIDMwODAsIDMwODgsIDMwOTMsIDMwOTgsIDMxMDUsIAorICAgIDMxMTIsIDMxMTksIDMxMjYsIDMxMzMsIDMxNDAsIDMxNTAsIDMxNjAsIDMxNzAsIDMxODAsIDMxODcsIDMxOTQsIDMyMDQsIAorICAgIDMyMTQsIDMyMjIsIDMyMzAsIDMyMzgsIDMyNDYsIDMyNTQsIDMyNjEsIDMyNjgsIDMyNzUsIDMyODEsIDMyODgsIDMyOTUsIAorICAgIDMzMDIsIDMzMTEsIDMzMjEsIDMzMzEsIDMzMzgsIDMzNDUsIDMzNTEsIDMzNTYsIDMzNjMsIDMzNjksIDMzNzUsIDMzODIsIAorICAgIDMzODksIDM0MDAsIDM0MTAsIDM0MTcsIDM0MjQsIDM0MzEsIDM0MzgsIDM0NDQsIDM0NDksIDM0NTYsIDM0NjIsIDM0NjgsIAorICAgIDM0NzYsIDM0ODQsIDM0OTEsIDM0OTcsIDM1MDIsIDM1MDksIDM1MTUsIDM1MjMsIDM1MzMsIDM1NDMsIDM1NTIsIDM1NTksIAorICAgIDM1NjUsIDM1NzEsIDM1NzYsIDM1ODMsIDM1OTAsIDM1OTcsIDM2MDQsIDM2MTEsIDM2MTYsIDM2MjEsIDM2MzEsIDM2MzksIAorICAgIDM2NDgsIDM2NTMsIDM2NTksIDM2NzAsIDM2NzcsIDM2ODUsIDM2OTQsIDM2OTksIDM3MDUsIDM3MTEsIDM3MTgsIDM3MjMsIAorICAgIDM3MjksIDM3NDAsIDM3NDksIDM3NTgsIDM3NjYsIDM3NzQsIDM3ODQsIDM3ODksIDM3OTYsIDM4MDMsIDM4MDgsIDM4MjAsIAorICAgIDM4MjksIDM4MzcsIDM4NDQsIDM4NTMsIDM4NTgsIDM4NjMsIDM4NzAsIDM4NzcsIDM4ODQsIDM4OTEsIDM4OTcsIDM5MDYsIAorICAgIDM5MTQsIDM5MTksIDM5MjcsIDM5MzMsIDM5NDEsIDM5NDksIDM5NTUsIDM5NjEsIDM5NjcsIDM5NzUsIDM5ODMsIDM5ODksIAorICAgIDM5OTcsIDQwMDQsIDQwMDksIDQwMTYsIDQwMjQsIDQwMzQsIDQwNDEsIDQwNDgsIDQwNTgsIDQwNjUsIDQwNzIsIDQwODIsIAorICAgIDQwODksIDQwOTYsIDQxMDMsIDQxMDksIDQxMTUsIDQxMjUsIDQxMzgsIDQxNDMsIDQxNTAsIDQxNTUsIDQxNTksIDQxNjUsIAorICAgIDQxNzQsIDQxODEsIDQxODYsIDQxOTEsIDQxOTUsIDQyMDAsIDQyMDYsIDQyMTAsIDQyMTYsIDQyMjIsIDQyMjgsIDQyMzQsIAorICAgIDQyNDIsIDQyNDcsIDQyNTIsIDQyNTcsIDQyNjIsIDQyNjgsIDQyNzAsIDQyNzUsIDQyNzksIDQyODUsIDQyOTEsIDQyOTcsIAorICAgIDQzMDIsIDQzMDksIDQzMTYsIDQzMjIsIDQzMjksIDQzMzcsIDQzNDUsIDQzNTAsIDQzNTUsIDQzNTksIDQzNjQsIDQzNjYsIAorICAgIDQzNjgsIDQzNzEsIDQzNzMsIDQzNzYsIDQzODEsIDQzODYsIDQzOTIsIDQzOTcsIDQ0MDEsIDQ0MDUsIDQ0MTAsIDQ0MTksIAorICAgIDQ0MjUsIDQ0MzAsIDQ0MzYsIDQ0NDEsIDQ0NDcsIDQ0NTUsIDQ0NjMsIDQ0NjcsIDQ0NzEsIDQ0NzYsIDQ0ODIsIDQ0ODgsIAorICAgIDQ0OTQsIDQ1MDAsIDQ1MDUsIDQ1MTMsIDQ1MjIsIDQ1MzEsIDQ1MzYsIDQ1NDIsIDQ1NDksIDQ1NTYsIDQ1NjMsIDQ1NzAsIAorICAgIDQ1NzQsIDQ1ODAsIDQ1ODUsIDQ1OTAsIDQ1OTUsIDQ2MDAsIDQ2MDMsIDQ2MDYsIDQ2MDksIDQ2MTIsIDQ2MTUsIDQ2MTgsIAorICAgIDQ2MjIsIDQ2MjYsIDQ2MzIsIDQ2MzUsIDQ2NDAsIDQ2NDYsIDQ2NTIsIDQ2NTUsIDQ2NjAsIDQ2NjYsIDQ2NzAsIDQ2NzYsIAorICAgIDQ2ODIsIDQ2ODgsIDQ2OTQsIDQ2OTksIDQ3MDQsIDQ3MDksIDQ3MTIsIDQ3MTgsIDQ3MjMsIDQ3MjgsIDQ3MzIsIDQ3MzcsIAorICAgIDQ3NDMsIDQ3NDksIDQ3NTIsIDQ3NTYsIDQ3NjAsIDQ3NjQsIDQ3NjcsIDQ3NzAsIDQ3NzUsIDQ3NzksIDQ3ODYsIDQ3OTAsIAorICAgIDQ3OTYsIDQ4MDAsIDQ4MDYsIDQ4MTAsIDQ4MTQsIDQ4MTgsIDQ4MjMsIDQ4MjgsIDQ4MzUsIDQ4NDEsIDQ4NDgsIDQ4NTQsIAorICAgIDQ4NjAsIDQ4NjYsIDQ4NjksIDQ4NzMsIDQ4NzcsIDQ4ODEsIDQ4ODUsIDQ4OTAsIDQ4OTUsIDQ4OTksIDQ5MDMsIDQ5MDksIAorICAgIDQ5MTMsIDQ5MTcsIDQ5MjIsIDQ5MjgsIDQ5MzMsIDQ5MzksIDQ5NDMsIDQ5NTAsIDQ5NTUsIDQ5NjAsIDQ5NjUsIDQ5NzAsIAorICAgIDQ5NzYsIDQ5NzksIDQ5ODMsIDQ5ODgsIDQ5OTMsIDUwMDIsIDUwMDgsIDUwMTMsIDUwMTcsIDUwMjIsIDUwMjYsIDUwMzEsIAorICAgIDUwMzUsIDUwMzksIDUwNDQsIDUwNDgsIDUwNTQsIDUwNTksIDUwNjQsIDUwNjksIDUwNzQsIDUwNzksIDUwODQsIDUwOTAsIAorICAgIDUwOTYsIDUxMDIsIDUxMDcsIDUxMTIsIDUxMTgsIDUxMjQsIDUxMzAsIDUxMzUsIDUxNDAsIDUxNDcsIDUxNTQsIDUxNTgsIAorICAgIDUxNjQsIDUxNzEsIDAsIDAsIDUxNzgsIDUxODEsIDUxOTAsIDUxOTksIDUyMTAsIDAsIDAsIDAsIDAsIDAsIDUyMTQsIAorICAgIDUyMTcsIDUyMjIsIDUyMzAsIDUyMzUsIDUyNDMsIDUyNTEsIDAsIDUyNTksIDAsIDUyNjcsIDUyNzUsIDUyODMsIDUyOTQsIAorICAgIDUyOTksIDUzMDQsIDUzMDksIDUzMTQsIDUzMTksIDUzMjQsIDUzMjksIDUzMzQsIDUzMzksIDUzNDQsIDUzNDksIDUzNTQsIAorICAgIDUzNTksIDUzNjQsIDUzNjksIDUzNzQsIDAsIDUzNzksIDUzODQsIDUzODksIDUzOTQsIDUzOTksIDU0MDQsIDU0MDksIAorICAgIDU0MTQsIDU0MjIsIDU0MzAsIDU0MzgsIDU0NDYsIDU0NTQsIDU0NjIsIDU0NzMsIDU0NzgsIDU0ODMsIDU0ODgsIDU0OTMsIAorICAgIDU0OTgsIDU1MDMsIDU1MDgsIDU1MTMsIDU1MTgsIDU1MjMsIDU1MjgsIDU1MzMsIDU1MzgsIDU1NDMsIDU1NDgsIDU1NTMsIAorICAgIDU1NTgsIDU1NjQsIDU1NjksIDU1NzQsIDU1NzksIDU1ODQsIDU1ODksIDU1OTQsIDU1OTksIDU2MDcsIDU2MTUsIDU2MjMsIAorICAgIDU2MzEsIDU2MzksIDU2NDQsIDU2NDgsIDU2NTIsIDU2NTksIDU2NjksIDU2NzksIDU2ODMsIDU2ODcsIDU2OTEsIDU2OTcsIAorICAgIDU3MDQsIDU3MDgsIDU3MTMsIDU3MTcsIDU3MjIsIDU3MjYsIDU3MzEsIDU3MzUsIDU3NDAsIDU3NDUsIDU3NTAsIDU3NTUsIAorICAgIDU3NjAsIDU3NjUsIDU3NzAsIDU3NzUsIDU3ODAsIDU3ODUsIDU3OTAsIDU3OTUsIDU4MDAsIDU4MDUsIDU4MTAsIDU4MTQsIAorICAgIDU4MTgsIDU4MjQsIDU4MjgsIDU4MzMsIDU4MzksIDU4NDcsIDU4NTIsIDU4NTcsIDU4NjQsIDU4NjksIDU4NzQsIDU4ODEsIAorICAgIDU4OTAsIDU4OTksIDU5MTAsIDU5MTgsIDU5MjMsIDU5MjgsIDU5MzMsIDU5NDAsIDU5NDUsIDU5NTEsIDU5NTYsIDU5NjEsIAorICAgIDU5NjYsIDU5NzEsIDU5NzYsIDU5ODEsIDU5ODksIDU5OTUsIDYwMDAsIDYwMDQsIDYwMDksIDYwMTQsIDYwMTksIDYwMjQsIAorICAgIDYwMjksIDYwMzQsIDYwMzksIDYwNDMsIDYwNDksIDYwNTMsIDYwNTgsIDYwNjMsIDYwNjgsIDYwNzIsIDYwNzcsIDYwODIsIAorICAgIDYwODcsIDYwOTIsIDYwOTYsIDYxMDEsIDYxMDUsIDYxMTAsIDYxMTUsIDYxMjAsIDYxMjUsIDYxMzEsIDYxMzYsIDYxNDIsIAorICAgIDYxNDYsIDYxNTEsIDYxNTUsIDYxNTksIDYxNjQsIDYxNjksIDYxNzQsIDYxNzksIDYxODQsIDYxODksIDYxOTQsIDYxOTgsIAorICAgIDYyMDQsIDYyMDgsIDYyMTMsIDYyMTgsIDYyMjMsIDYyMjcsIDYyMzIsIDYyMzcsIDYyNDIsIDYyNDcsIDYyNTEsIDYyNTYsIAorICAgIDYyNjAsIDYyNjUsIDYyNzAsIDYyNzUsIDYyODAsIDYyODYsIDYyOTEsIDYyOTcsIDYzMDEsIDYzMDYsIDYzMTAsIDYzMTgsIAorICAgIDYzMjMsIDYzMjgsIDYzMzMsIDYzNDAsIDYzNDUsIDYzNTEsIDYzNTYsIDYzNjEsIDYzNjYsIDYzNzEsIDYzNzYsIDYzODEsIAorICAgIDYzODksIDYzOTUsIDY0MDAsIDY0MDUsIDY0MTAsIDY0MTUsIDY0MjAsIDY0MjYsIDY0MzIsIDY0MzksIDY0NDYsIDY0NTUsIAorICAgIDY0NjQsIDY0NzEsIDY0NzgsIDY0ODcsIDY0OTYsIDY1MDEsIDY1MDYsIDY1MTEsIDY1MTYsIDY1MjEsIDY1MjYsIDY1MzEsIAorICAgIDY1MzYsIDY1NDcsIDY1NTgsIDY1NjMsIDY1NjgsIDY1NzUsIDY1ODIsIDY1OTAsIDY1OTgsIDY2MDMsIDY2MDgsIDY2MTMsIAorICAgIDY2MTgsIDY2MjIsIDY2MjYsIDY2MzAsIDY2MzUsIDY2NDEsIDY2NDUsIDY2NTIsIDY2NTcsIDY2NjcsIDY2NzcsIDY2ODMsIAorICAgIDY2ODksIDY2OTcsIDY3MDUsIDY3MTMsIDY3MjEsIDY3MjgsIDY3MzUsIDY3NDQsIDY3NTMsIDY3NjEsIDY3NjksIDY3NzcsIAorICAgIDY3ODUsIDY3OTMsIDY4MDEsIDY4MDksIDY4MTcsIDY4MjQsIDY4MzEsIDY4MzcsIDY4NDMsIDY4NTEsIDY4NTksIDY4NjYsIAorICAgIDY4NzMsIDY4ODIsIDY4OTEsIDY4OTcsIDY5MDMsIDY5MTEsIDY5MTksIDY5MjcsIDY5MzUsIDY5NDEsIDY5NDcsIDY5NTUsIAorICAgIDY5NjMsIDY5NzEsIDY5NzksIDY5ODYsIDY5OTMsIDcwMDEsIDcwMDksIDcwMTcsIDcwMjUsIDcwMzAsIDcwMzUsIDcwNDIsIAorICAgIDcwNDksIDcwNTksIDcwNjksIDcwNzMsIDcwODEsIDcwODksIDcwOTYsIDcxMDMsIDcxMTEsIDcxMTksIDcxMjYsIDcxMzMsIAorICAgIDcxNDEsIDcxNDksIDcxNTYsIDcxNjMsIDcxNzEsIDcxNzksIDcxODQsIDcxOTEsIDcxOTgsIDcyMDUsIDcyMTIsIDcyMTgsIAorICAgIDcyMjQsIDcyMzIsIDcyNDAsIDcyNDUsIDcyNTAsIDcyNTgsIDcyNjYsIDcyNzQsIDcyODIsIDcyOTAsIDcyOTgsIDczMDUsIAorICAgIDczMTIsIDczMjAsIDczMjgsIDczMzYsIDczNDQsIDczNTEsIDczNTgsIDczNjQsIDczNzAsIDczNzksIDczODgsIDczOTUsIAorICAgIDc0MDIsIDc0MDksIDc0MTYsIDc0MjMsIDc0MzAsIDc0MzcsIDc0NDQsIDc0NTIsIDc0NjAsIDc0NjgsIDc0NzYsIDc0ODQsIAorICAgIDc0OTIsIDc1MDIsIDc1MTIsIDc1MTksIDc1MjYsIDc1MzMsIDc1NDAsIDc1NDcsIDc1NTQsIDc1NjEsIDc1NjgsIDc1NzUsIAorICAgIDc1ODIsIDc1ODksIDc1OTYsIDc2MDMsIDc2MTAsIDc2MTcsIDc2MjQsIDc2MzEsIDc2MzgsIDc2NDUsIDc2NTIsIDc2NTksIAorICAgIDc2NjYsIDc2NzMsIDc2ODAsIDc2ODUsIDc2OTAsIDc2OTUsIDc3MDAsIDc3MDUsIDc3MTAsIDc3MTUsIDc3MjAsIDc3MjUsIAorICAgIDc3MzAsIDc3MzYsIDc3NDIsIDc3NTEsIDc3NjAsIDc3NjksIDc3NzgsIDc3ODYsIDc3OTQsIDc4MDIsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDc4MTAsIDc4MTUsIDc4MjAsIDc4MjUsIDc4MzAsIDc4MzUsIDc4NDAsIDc4NDUsIDc4NTAsIAorICAgIDc4NTQsIDc4NTksIDc4NjQsIDc4NjksIDc4NzQsIDc4NzksIDc4ODQsIDc4ODksIDc4OTQsIDc4OTksIDc5MDQsIDc5MDksIAorICAgIDc5MTQsIDc5MTksIDc5MjQsIDc5MjksIDc5MzQsIDc5MzksIDc5NDQsIDc5NDgsIDc5NTMsIDc5NTgsIDc5NjMsIDc5NjgsIAorICAgIDc5NzMsIDc5NzgsIDc5ODMsIDc5ODgsIDc5OTMsIDAsIDAsIDc5OTgsIDgwMDUsIDgwMDgsIDgwMTIsIDgwMTYsIDgwMTksIAorICAgIDgwMjMsIDAsIDgwMjcsIDgwMzIsIDgwMzcsIDgwNDIsIDgwNDcsIDgwNTIsIDgwNTcsIDgwNjIsIDgwNjcsIDgwNzEsIAorICAgIDgwNzYsIDgwODEsIDgwODYsIDgwOTEsIDgwOTYsIDgxMDEsIDgxMDYsIDgxMTEsIDgxMTYsIDgxMjEsIDgxMjYsIDgxMzEsIAorICAgIDgxMzYsIDgxNDEsIDgxNDYsIDgxNTEsIDgxNTYsIDgxNjEsIDgxNjUsIDgxNzAsIDgxNzUsIDgxODAsIDgxODUsIDgxOTAsIAorICAgIDgxOTUsIDgyMDAsIDgyMDUsIDgyMTAsIDgyMTUsIDAsIDgyMjIsIDgyMjcsIDAsIDAsIDAsIDAsIDAsIDAsIDgyMzAsIAorICAgIDgyMzUsIDgyNDAsIDgyNDUsIDgyNTIsIDgyNTksIDgyNjQsIDgyNjksIDgyNzQsIDgyNzksIDgyODQsIDgyODksIDgyOTQsIAorICAgIDgzMDEsIDgzMDYsIDgzMTMsIDgzMjAsIDgzMjUsIDgzMzIsIDgzMzcsIDgzNDIsIDgzNDcsIDgzNTQsIDgzNTksIDgzNjQsIAorICAgIDgzNzEsIDgzODAsIDgzODUsIDgzOTAsIDgzOTUsIDg0MDAsIDg0MDYsIDg0MTEsIDg0MTgsIDg0MjUsIDg0MzIsIDg0MzcsIAorICAgIDg0NDIsIDg0NDcsIDg0NTIsIDg0NTcsIDg0NjIsIDg0NzIsIDg0NzcsIDg0ODUsIDg0OTAsIDg0OTUsIDg1MDAsIDg1MDUsIAorICAgIDg1MTIsIDg1MTksIDg1MjYsIDg1MzIsIDg1MzgsIDg1NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg1NTIsIDg1NTYsIAorICAgIDg1NjAsIDg1NjQsIDg1NjgsIDg1NzIsIDg1NzYsIDg1ODAsIDg1ODQsIDg1ODgsIDg1OTIsIDg1OTcsIDg2MDEsIDg2MDUsIAorICAgIDg2MTAsIDg2MTQsIDg2MTksIDg2MjMsIDg2MjcsIDg2MzEsIDg2MzYsIDg2NDAsIDg2NDUsIDg2NDksIDg2NTMsIDg2NTcsIAorICAgIDg2NjEsIDAsIDAsIDAsIDAsIDAsIDg2NjUsIDg2NzIsIDg2ODAsIDg2ODcsIDg2OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDg2OTcsIDg3MDAsIDg3MDQsIDg3MDksIDAsIDAsIDg3MTMsIDg3MTksIDg3MjUsIDg3MjgsIDg3MzUsIAorICAgIDg3NDQsIDg3NDcsIDg3NTAsIDg3NTUsIDg3NjEsIDg3NjUsIDg3NzMsIDg3NzksIDg3ODUsIDg3OTMsIDg3OTcsIDg4MDIsIAorICAgIDg4MTMsIDg4MTgsIDg4MjIsIDg4MjYsIDg4MzAsIDAsIDAsIDg4MzMsIDg4NDAsIDg4NDQsIDg4NTAsIDg4NTQsIDg4NjEsIAorICAgIDg4NjcsIDg4NzQsIDg4ODAsIDg4ODYsIDg4OTAsIDg4OTQsIDg5MDAsIDg5MDQsIDg5MDgsIDg5MTIsIDg5MTYsIDg5MjAsIAorICAgIDg5MjQsIDg5MjgsIDg5MzIsIDg5MzYsIDg5NDAsIDg5NDQsIDg5NDgsIDg5NTIsIDg5NTYsIDg5NjAsIDg5NjQsIDg5NjgsIAorICAgIDg5NzYsIDg5ODQsIDg5OTQsIDkwMDMsIDkwMTIsIDkwMTUsIDkwMTksIDkwMjMsIDkwMjcsIDkwMzEsIDkwMzUsIDkwMzksIAorICAgIDkwNDMsIDkwNDcsIDkwNTIsIDkwNTYsIDkwNTksIDkwNjIsIDkwNjUsIDkwNjgsIDkwNzEsIDkwNzQsIDkwNzcsIDkwODAsIAorICAgIDkwODQsIDkwODcsIDkwOTAsIDkwOTUsIDkxMDAsIDkxMDYsIDkxMDksIDkxMTYsIDkxMjUsIDkxMzAsIDkxMzUsIDkxNDIsIAorICAgIDkxNDcsIDkxNTIsIDkxNTYsIDkxNjAsIDkxNjQsIDkxNjgsIDkxNzIsIDkxNzYsIDkxODAsIDkxODQsIDkxODgsIDkxOTIsIAorICAgIDkxOTcsIDkyMDIsIDkyMDksIDkyMTUsIDkyMjEsIDkyMjcsIDkyMzIsIDkyNDAsIDkyNDgsIDkyNTMsIDkyNTksIDkyNjUsIAorICAgIDkyNzEsIDkyNzcsIDkyODEsIDkyODUsIDkyODksIDkyOTYsIDkzMDYsIDkzMTAsIDkzMTQsIDkzMTgsIDkzMjQsIDkzMzIsIAorICAgIDkzMzYsIDkzNDAsIDkzNDcsIDkzNTEsIDkzNTUsIDkzNTksIDkzNjYsIDkzNzMsIDkzODUsIDkzODksIDkzOTMsIDkzOTcsIAorICAgIDk0MDcsIDk0MTYsIDk0MjAsIDk0MjgsIDk0MzUsIDk0NDIsIDk0NTEsIDk0NjIsIDk0NzAsIDk0NzQsIDk0ODMsIDk0OTQsIAorICAgIDk1MDIsIDk1MTUsIDk1MjMsIDk1MzEsIDk1MzksIDk1NDcsIDk1NTMsIDk1NjIsIDk1NjksIDk1NzMsIDk1ODEsIDk1ODUsIAorICAgIDk1OTIsIDk2MDAsIDk2MDQsIDk2MTAsIDk2MTcsIDk2MjQsIDk2MjgsIDk2MzYsIDk2NDAsIDk2NDcsIDk2NTEsIDk2NTksIAorICAgIDk2NjMsIDk2NzEsIDk2NzksIDk2ODYsIDk2OTQsIDk3MDIsIDk3MDksIDk3MTUsIDk3MTksIDk3MjYsIDk3MzQsIDk3NDAsIAorICAgIDk3NDcsIDk3NTQsIDk3NjAsIDk3NjksIDk3NzcsIDk3ODQsIDk3OTAsIDk3OTQsIDk3OTcsIDk4MDEsIDk4MDcsIDk4MTUsIAorICAgIDk4MTksIDk4MjUsIDk4MzEsIDk4MzgsIDk4NDUsIDk4NDgsIDk4NTUsIDk4NjAsIDk4NjgsIDk4NzMsIDk4NzcsIDk4OTAsIAorICAgIDk5MDMsIDk5MDksIDk5MTYsIDk5MjEsIDk5MjcsIDk5MzIsIDk5MzgsIDk5NDgsIDk5NTUsIDk5NjQsIDk5NzQsIDk5ODAsIAorICAgIDk5ODUsIDk5OTAsIDk5OTQsIDk5OTgsIDEwMDAzLCAxMDAwOCwgMTAwMTQsIDEwMDIyLCAxMDAzMCwgMTAwNDEsIDEwMDQ2LCAKKyAgICAxMDA1NSwgMTAwNjQsIDEwMDcxLCAxMDA3NywgMTAwODMsIDEwMDg5LCAxMDA5NSwgMTAxMDEsIDEwMTA3LCAxMDExMywgCisgICAgMTAxMTksIDEwMTI1LCAxMDEzMiwgMTAxMzksIDEwMTQ2LCAxMDE1MiwgMTAxNjAsIDEwMTY5LCAxMDE3NSwgMTAxODIsIAorICAgIDEwMTg5LCAxMDE5NCwgMTAxOTksIDEwMjAzLCAxMDIxMCwgMTAyMTcsIDEwMjI2LCAxMDIzNSwgMTAyMzgsIDEwMjQzLCAKKyAgICAxMDI0OCwgMCwgMTAyNTMsIDEwMjU3LCAxMDI2MSwgMTAyNjcsIDEwMjcxLCAxMDI3NSwgMTAyODEsIDEwMjg1LCAxMDI5MywgCisgICAgMTAyOTcsIDEwMzAxLCAxMDMwNSwgMTAzMDksIDEwMzEzLCAxMDMxOSwgMTAzMjMsIDEwMzI5LCAxMDMzMywgMTAzMzcsIAorICAgIDEwMzQxLCAxMDM0NSwgMTAzNDksIDEwMzU0LCAxMDM1NywgMTAzNjEsIDEwMzY3LCAxMDM3MSwgMTAzNzUsIDEwMzc5LCAKKyAgICAxMDM4MywgMTAzODcsIDEwMzkzLCAxMDM5OSwgMTA0MDUsIDEwNDA5LCAxMDQxMywgMTA0MTgsIDEwNDIyLCAxMDQyNiwgCisgICAgMTA0MzEsIDEwNDM1LCAxMDQzOSwgMTA0NDYsIDEwNDUzLCAxMDQ1NywgMTA0NjEsIDEwNDY2LCAxMDQ3MCwgMTA0NzQsIAorICAgIDEwNDc3LCAxMDQ4MiwgMTA0ODUsIDEwNDg4LCAxMDQ5MywgMTA0OTgsIDEwNTAyLCAxMDUwNiwgMTA1MTIsIDEwNTE4LCAKKyAgICAxMDUyMSwgMCwgMCwgMTA1MjQsIDEwNTMwLCAxMDUzNiwgMTA1NDIsIDEwNTUyLCAxMDU2NCwgMTA1NzYsIDEwNTkzLCAKKyAgICAxMDYwNSwgMTA2MTYsIDEwNjI0LCAxMDYzMSwgMTA2NDIsIDEwNjU3LCAxMDY2OCwgMTA2NzQsIDEwNjgzLCAxMDY5MSwgCisgICAgMTA3MDMsIDEwNzEzLCAxMDcyMSwgMTA3MzMsIDEwNzQwLCAxMDc0OCwgMTA3NjAsIDEwNzY2LCAxMDc3MiwgMTA3ODAsIAorICAgIDEwNzg4LCAxMDc5NiwgMTA4MDIsIDEwODEyLCAxMDgxOSwgMTA4MjksIDEwODM5LCAxMDg1MiwgMTA4NjYsIDEwODgwLCAKKyAgICAxMDg5MCwgMTA5MDEsIDEwOTEyLCAxMDkyNSwgMTA5MzgsIDEwOTUyLCAxMDk2NCwgMTA5NzYsIDEwOTg5LCAxMTAwMiwgCisgICAgMTEwMTQsIDExMDI3LCAxMTAzNiwgMTEwNDQsIDExMDQ5LCAxMTA1NCwgMTEwNTksIDExMDY0LCAxMTA2OSwgMTEwNzQsIAorICAgIDExMDc5LCAxMTA4NCwgMTEwODksIDExMDk0LCAxMTA5OSwgMTExMDQsIDExMTA5LCAxMTExNCwgMTExMTksIDExMTI0LCAKKyAgICAxMTEyOSwgMTExMzQsIDExMTM5LCAxMTE0NCwgMTExNDksIDExMTU0LCAxMTE1OSwgMTExNjQsIDExMTY5LCAxMTE3NCwgCisgICAgMTExNzksIDExMTg0LCAxMTE4OSwgMTExOTQsIDExMTk5LCAxMTIwNCwgMTEyMDgsIDExMjEzLCAxMTIxOCwgMTEyMjMsIAorICAgIDExMjI4LCAxMTIzMywgMTEyMzcsIDExMjQxLCAxMTI0NSwgMTEyNDksIDExMjUzLCAxMTI1NywgMTEyNjEsIDExMjY1LCAKKyAgICAxMTI2OSwgMTEyNzMsIDExMjc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI4MiwgCisgICAgMTEyODcsIDExMjkxLCAxMTI5NSwgMTEyOTksIDExMzAzLCAxMTMwNywgMTEzMTEsIDExMzE1LCAxMTMxOSwgMTEzMjMsIAorICAgIDExMzI3LCAxMTMzMiwgMTEzMzYsIDExMzQwLCAxMTM0NCwgMTEzNDksIDExMzUzLCAxMTM1OCwgMTEzNjIsIDExMzY3LCAKKyAgICAxMTM3MSwgMTEzNzYsIDExMzgxLCAxMTM4NiwgMTEzOTEsIDExMzk1LCAxMTQwMCwgMTE0MDUsIDExNDEwLCAxMTQxNSwgCisgICAgMTE0MTksIDExNDI0LCAxMTQzMSwgMTE0MzUsIDExNDQwLCAxMTQ0NCwgMTE0NDgsIDExNDUzLCAxMTQ1NywgMTE0NjQsIAorICAgIDExNDcxLCAxMTQ3OCwgMTE0ODQsIDExNDkyLCAxMTUwMCwgMTE1MDksIDExNTE3LCAxMTUyNCwgMTE1MzEsIDExNTM5LCAKKyAgICAxMTU0NSwgMTE1NTEsIDExNTU3LCAxMTU2MywgMTE1NzAsIDExNTc1LCAxMTU3OSwgMTE1ODQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExNTg4LCAxMTU5MywgMTE1OTgsIDExNjAzLCAxMTYwOCwgMTE2MTMsIDExNjE4LCAxMTYyMywgMTE2MjgsIDExNjMzLCAKKyAgICAxMTYzOCwgMTE2NDMsIDExNjQ4LCAxMTY1MywgMTE2NTgsIDExNjYzLCAxMTY2OCwgMTE2NzMsIDExNjc4LCAxMTY4MywgCisgICAgMTE2ODgsIDExNjkzLCAxMTY5OCwgMTE3MDMsIDExNzA4LCAxMTcxMywgMTE3MTgsIDExNzI2LCAxMTczMywgMTE3MzksIAorICAgIDExNzQ0LCAxMTc1MiwgMTE3NTksIDExNzY1LCAxMTc3MiwgMTE3NzgsIDExNzgzLCAxMTc5MCwgMTE3OTcsIDExODAzLCAKKyAgICAxMTgwOCwgMTE4MTMsIDExODE5LCAxMTgyNCwgMTE4MjksIDExODM1LCAwLCAwLCAxMTg0MCwgMTE4NDYsIDExODUyLCAKKyAgICAxMTg1OCwgMTE4NjQsIDExODcwLCAxMTg3NiwgMTE4ODEsIDExODg5LCAxMTg5NSwgMTE5MDEsIDExOTA3LCAxMTkxMywgCisgICAgMTE5MTksIDExOTI3LCAwLCAxMTkzMywgMTE5MzgsIDExOTQzLCAxMTk0OCwgMTE5NTMsIDExOTU4LCAxMTk2MywgMTE5NjgsIAorICAgIDExOTczLCAxMTk3OCwgMTE5ODMsIDExOTg4LCAxMTk5MywgMTE5OTgsIDEyMDAzLCAxMjAwOCwgMTIwMTMsIDEyMDE4LCAKKyAgICAxMjAyMywgMTIwMjgsIDEyMDMzLCAxMjAzOCwgMTIwNDMsIDEyMDQ4LCAxMjA1MywgMTIwNTgsIDEyMDYzLCAxMjA2OCwgMCwgCisgICAgMCwgMTIwNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzMwLCAxMTMzNCwgMTEzMzgsIAotICAgIDExMzQyLCAxMTM0NywgMTEzNTAsIDExMzU0LCAxMTM1NywgMTEzNjEsIDExMzY0LCAxMTM2OCwgMTEzNzIsIDExMzc2LCAKLSAgICAxMTM4MSwgMTEzODYsIDExMzg5LCAxMTM5MywgMTEzOTgsIDExNDAzLCAxMTQwNiwgMTE0MTAsIDExNDEzLCAxMTQxNywgCi0gICAgMTE0MjEsIDExNDI1LCAxMTQyOSwgMTE0MzMsIDExNDM3LCAxMTQ0MSwgMTE0NDUsIDExNDQ5LCAxMTQ1MywgMTE0NTcsIAotICAgIDExNDYxLCAxMTQ2NSwgMTE0NjksIDExNDczLCAxMTQ3NywgMTE0ODEsIDExNDg1LCAxMTQ4OSwgMTE0OTMsIDExNDk2LCAKLSAgICAxMTUwMCwgMTE1MDQsIDExNTA4LCAxMTUxMSwgMTE1MTQsIDExNTE3LCAxMTUyMSwgMTE1MjUsIDExNTI5LCAxMTUzMywgCi0gICAgMTE1MzcsIDExNTQxLCAxMTU0NSwgMTE1NDksIDAsIDAsIDExNTUyLCAxMTU1NiwgMTE1NjAsIDExNTY1LCAxMTU2OSwgCi0gICAgMTE1NzQsIDExNTc4LCAxMTU4MywgMTE1ODgsIDExNTk0LCAxMTYwMCwgMTE2MDYsIDExNjEwLCAxMTYxNSwgMTE2MjEsIAotICAgIDExNjI3LCAxMTYzMSwgMTE2MzYsIDAsIDAsIDExNjQwLCAxMTY0MywgMTE2NDksIDExNjU1LCAxMTY2MCwgMCwgMCwgMCwgCi0gICAgMTE2NjUsIDExNjY5LCAxMTY3MywgMTE2NzcsIDExNjgxLCAxMTY4NSwgMTE2ODksIDExNjkzLCAxMTY5NywgMTE3MDIsIAotICAgIDExNzA3LCAxMTcxMiwgMTE3MTgsIDExNzIxLCAxMTcyNSwgMTE3MjksIDExNzMyLCAxMTczNSwgMTE3MzgsIDExNzQxLCAKLSAgICAxMTc0NCwgMTE3NDcsIDExNzUwLCAxMTc1MywgMTE3NTYsIDExNzYwLCAxMTc2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE3NzIsIDExNzc2LCAxMTc4MCwgMTE3ODYsIDExNzkwLCAwLCAxMTc5NCwgMTE3OTgsIDExODAyLCAwLCAxMTgwNiwgCi0gICAgMTE4MDksIDExODEzLCAxMTgxNiwgMTE4MjAsIDExODIzLCAxMTgyNywgMTE4MzEsIDAsIDAsIDExODM1LCAxMTgzOCwgMCwgCi0gICAgMCwgMTE4NDIsIDExODQ1LCAxMTg0OSwgMTE4NTIsIDExODU2LCAxMTg2MCwgMTE4NjQsIDExODY4LCAxMTg3MiwgMTE4NzYsIAotICAgIDExODgwLCAxMTg4NCwgMTE4ODgsIDExODkyLCAxMTg5NiwgMTE5MDAsIDExOTA0LCAxMTkwOCwgMTE5MTIsIDExOTE2LCAKLSAgICAxMTkyMCwgMTE5MjQsIDAsIDExOTI4LCAxMTkzMSwgMTE5MzUsIDExOTM5LCAxMTk0MywgMTE5NDYsIDExOTQ5LCAwLCAKLSAgICAxMTk1MiwgMCwgMCwgMCwgMTE5NTYsIDExOTYwLCAxMTk2NCwgMTE5NjgsIDAsIDAsIDExOTcxLCAxMTk3NSwgMTE5NzksIAotICAgIDExOTg0LCAxMTk4OCwgMTE5OTMsIDExOTk3LCAxMjAwMiwgMTIwMDcsIDAsIDAsIDEyMDEzLCAxMjAxNywgMCwgMCwgCi0gICAgMTIwMjIsIDEyMDI2LCAxMjAzMSwgMTIwMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQxLCAwLCAwLCAwLCAwLCAKLSAgICAxMjA0NywgMTIwNTEsIDAsIDEyMDU1LCAxMjA1OSwgMTIwNjQsIDEyMDY5LCAxMjA3NCwgMCwgMCwgMTIwODAsIDEyMDg0LCAKLSAgICAxMjA4NywgMTIwOTAsIDEyMDkzLCAxMjA5NiwgMTIwOTksIDEyMTAyLCAxMjEwNSwgMTIxMDgsIDEyMTExLCAxMjEyMCwgCi0gICAgMTIxMjgsIDEyMTMyLCAxMjEzNiwgMTIxNDIsIDEyMTQ4LCAxMjE1NCwgMTIxNjAsIDEyMTc0LCAxMjE4MSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTIxODQsIDEyMTkwLCAxMjE5NCwgMCwgMTIxOTgsIDEyMjAxLCAxMjIwNSwgMTIyMDgsIDEyMjEyLCAKLSAgICAxMjIxNSwgMCwgMCwgMCwgMCwgMTIyMTksIDEyMjIzLCAwLCAwLCAxMjIyNywgMTIyMzEsIDEyMjM1LCAxMjIzOCwgMTIyNDIsIAotICAgIDEyMjQ2LCAxMjI1MCwgMTIyNTQsIDEyMjU4LCAxMjI2MiwgMTIyNjYsIDEyMjcwLCAxMjI3NCwgMTIyNzgsIDEyMjgyLCAKLSAgICAxMjI4NiwgMTIyOTAsIDEyMjk0LCAxMjI5OCwgMTIzMDIsIDEyMzA2LCAxMjMxMCwgMCwgMTIzMTQsIDEyMzE3LCAxMjMyMSwgCi0gICAgMTIzMjUsIDEyMzI5LCAxMjMzMiwgMTIzMzUsIDAsIDEyMzM4LCAxMjM0MiwgMCwgMTIzNDYsIDEyMzUwLCAwLCAxMjM1NCwgCi0gICAgMTIzNTgsIDAsIDAsIDEyMzYxLCAwLCAxMjM2NSwgMTIzNzAsIDEyMzc0LCAxMjM3OSwgMTIzODMsIDAsIDAsIDAsIDAsIAotICAgIDEyMzg4LCAxMjM5MywgMCwgMCwgMTIzOTgsIDEyNDAzLCAxMjQwOCwgMCwgMCwgMCwgMTI0MTIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEyNDE2LCAxMjQyMCwgMTI0MjQsIDEyNDI4LCAwLCAxMjQzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MzYsIAotICAgIDEyNDQwLCAxMjQ0MywgMTI0NDYsIDEyNDQ5LCAxMjQ1MiwgMTI0NTUsIDEyNDU4LCAxMjQ2MSwgMTI0NjQsIDEyNDY3LCAKLSAgICAxMjQ3MCwgMTI0NzMsIDEyNDc2LCAxMjQ3OSwgMTI0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyNDg4LCAxMjQ5MiwgMTI0OTYsIDAsIDEyNTAwLCAxMjUwMywgMTI1MDcsIDEyNTEwLCAxMjUxNCwgMTI1MTcsIDEyNTIxLCAKLSAgICAxMjUyNSwgMTI1MjksIDAsIDEyNTM0LCAxMjUzNywgMTI1NDEsIDAsIDEyNTQ2LCAxMjU0OSwgMTI1NTMsIDEyNTU2LCAKLSAgICAxMjU2MCwgMTI1NjQsIDEyNTY4LCAxMjU3MiwgMTI1NzYsIDEyNTgwLCAxMjU4NCwgMTI1ODgsIDEyNTkyLCAxMjU5NiwgCi0gICAgMTI2MDAsIDEyNjA0LCAxMjYwOCwgMTI2MTIsIDEyNjE2LCAxMjYyMCwgMTI2MjQsIDEyNjI4LCAwLCAxMjYzMiwgMTI2MzUsIAotICAgIDEyNjM5LCAxMjY0MywgMTI2NDcsIDEyNjUwLCAxMjY1MywgMCwgMTI2NTYsIDEyNjYwLCAwLCAxMjY2NCwgMTI2NjgsIAotICAgIDEyNjcyLCAxMjY3NiwgMTI2ODAsIDAsIDAsIDEyNjgzLCAxMjY4NywgMTI2OTEsIDEyNjk2LCAxMjcwMCwgMTI3MDUsIAotICAgIDEyNzA5LCAxMjcxNCwgMTI3MTksIDEyNzI1LCAwLCAxMjczMSwgMTI3MzUsIDEyNzQwLCAwLCAxMjc0NiwgMTI3NTAsIAotICAgIDEyNzU1LCAwLCAwLCAxMjc1OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI3NjIsIAotICAgIDEyNzY3LCAxMjc3MiwgMTI3NzcsIDAsIDAsIDEyNzgzLCAxMjc4NywgMTI3OTAsIDEyNzkzLCAxMjc5NiwgMTI3OTksIAotICAgIDEyODAyLCAxMjgwNSwgMTI4MDgsIDEyODExLCAwLCAxMjgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTI4MTgsIDEyODIyLCAxMjgyNiwgMCwgMTI4MzAsIDEyODMzLCAxMjgzNywgMTI4NDAsIDEyODQ0LCAKLSAgICAxMjg0NywgMTI4NTEsIDEyODU1LCAwLCAwLCAxMjg1OSwgMTI4NjIsIDAsIDAsIDEyODY2LCAxMjg2OSwgMTI4NzMsIAotICAgIDEyODc2LCAxMjg4MCwgMTI4ODQsIDEyODg4LCAxMjg5MiwgMTI4OTYsIDEyOTAwLCAxMjkwNCwgMTI5MDgsIDEyOTEyLCAKLSAgICAxMjkxNiwgMTI5MjAsIDEyOTI0LCAxMjkyOCwgMTI5MzIsIDEyOTM2LCAxMjk0MCwgMTI5NDQsIDEyOTQ4LCAwLCAxMjk1MiwgCi0gICAgMTI5NTUsIDEyOTU5LCAxMjk2MywgMTI5NjcsIDEyOTcwLCAxMjk3MywgMCwgMTI5NzYsIDEyOTgwLCAwLCAxMjk4NCwgCi0gICAgMTI5ODgsIDEyOTkyLCAxMjk5NiwgMTMwMDAsIDAsIDAsIDEzMDAzLCAxMzAwNywgMTMwMTEsIDEzMDE2LCAxMzAyMCwgCi0gICAgMTMwMjUsIDEzMDI5LCAxMzAzNCwgMTMwMzksIDAsIDAsIDEzMDQ1LCAxMzA0OSwgMCwgMCwgMTMwNTQsIDEzMDU4LCAKLSAgICAxMzA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMwNjcsIDEzMDczLCAwLCAwLCAwLCAwLCAxMzA3OSwgMTMwODMsIDAsIAotICAgIDEzMDg3LCAxMzA5MSwgMTMwOTYsIDEzMTAxLCAxMzEwNiwgMCwgMCwgMTMxMTIsIDEzMTE2LCAxMzExOSwgMTMxMjIsIAotICAgIDEzMTI1LCAxMzEyOCwgMTMxMzEsIDEzMTM0LCAxMzEzNywgMTMxNDAsIDEzMTQzLCAxMzE0NiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxNTAsIDEzMTU0LCAwLCAxMzE1OCwgMTMxNjEsIDEzMTY1LCAKLSAgICAxMzE2OCwgMTMxNzIsIDEzMTc1LCAwLCAwLCAwLCAxMzE3OSwgMTMxODIsIDEzMTg2LCAwLCAxMzE5MCwgMTMxOTMsIAotICAgIDEzMTk3LCAxMzIwMSwgMCwgMCwgMCwgMTMyMDQsIDEzMjA4LCAwLCAxMzIxMiwgMCwgMTMyMTYsIDEzMjIwLCAwLCAwLCAwLCAKLSAgICAxMzIyNCwgMTMyMjgsIDAsIDAsIDAsIDEzMjMyLCAxMzIzNiwgMTMyNDAsIDAsIDAsIDAsIDEzMjQzLCAxMzI0NiwgMTMyNDksIAotICAgIDEzMjUyLCAxMzI1NiwgMTMyNjAsIDEzMjY0LCAxMzI2OCwgMTMyNzIsIDEzMjc2LCAxMzI4MCwgMTMyODQsIDAsIDAsIDAsIAotICAgIDAsIDEzMjg3LCAxMzI5MiwgMTMyOTYsIDEzMzAxLCAxMzMwNSwgMCwgMCwgMCwgMTMzMTAsIDEzMzE0LCAxMzMxOSwgMCwgCi0gICAgMTMzMjQsIDEzMzI4LCAxMzMzMywgMTMzMzgsIDAsIDAsIDEzMzQyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzM0NSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMzNTEsIDEzMzU1LCAxMzM1OCwgMTMzNjEsIDEzMzY0LCAKLSAgICAxMzM2NywgMTMzNzAsIDEzMzczLCAxMzM3NiwgMTMzNzksIDEzMzgyLCAxMzM4NiwgMTMzOTEsIDEzMzk2LCAxMzQwMCwgCi0gICAgMTM0MDQsIDEzNDA4LCAxMzQxMiwgMTM0MTYsIDEzNDIxLCAxMzQyNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0MjgsIDEzNDMyLCAKLSAgICAxMzQzNiwgMCwgMTM0NDAsIDEzNDQzLCAxMzQ0NywgMTM0NTAsIDEzNDU0LCAxMzQ1NywgMTM0NjEsIDEzNDY1LCAwLCAKLSAgICAxMzQ2OSwgMTM0NzIsIDEzNDc2LCAwLCAxMzQ4MCwgMTM0ODMsIDEzNDg3LCAxMzQ5MSwgMTM0OTQsIDEzNDk4LCAxMzUwMiwgCi0gICAgMTM1MDYsIDEzNTEwLCAxMzUxNCwgMTM1MTgsIDEzNTIyLCAxMzUyNiwgMTM1MzAsIDEzNTM0LCAxMzUzOCwgMTM1NDIsIAotICAgIDEzNTQ2LCAxMzU1MCwgMTM1NTQsIDEzNTU4LCAxMzU2MiwgMTM1NjYsIDAsIDEzNTcwLCAxMzU3MywgMTM1NzcsIDEzNTgxLCAKLSAgICAxMzU4NSwgMTM1ODgsIDEzNTkxLCAxMzU5NCwgMTM1OTgsIDEzNjAyLCAwLCAxMzYwNiwgMTM2MTAsIDEzNjE0LCAxMzYxOCwgCi0gICAgMTM2MjIsIDAsIDAsIDAsIDEzNjI1LCAxMzYyOSwgMTM2MzQsIDEzNjM4LCAxMzY0MywgMTM2NDcsIDEzNjUyLCAxMzY1NywgCi0gICAgMCwgMTM2NjMsIDEzNjY3LCAxMzY3MiwgMCwgMTM2NzcsIDEzNjgxLCAxMzY4NiwgMTM2OTEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEzNjk1LCAxMzY5OSwgMCwgMTM3MDUsIDEzNzA5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMzcxMywgMTM3MTgsIDEzNzIzLCAKLSAgICAxMzcyOCwgMCwgMCwgMTM3MzQsIDEzNzM4LCAxMzc0MSwgMTM3NDQsIDEzNzQ3LCAxMzc1MCwgMTM3NTMsIDEzNzU2LCAKLSAgICAxMzc1OSwgMTM3NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNzY1LCAxMzc3OCwgMTM3OTAsIDEzODAyLCAxMzgxNCwgCi0gICAgMTM4MjYsIDEzODM4LCAxMzg1MCwgMCwgMCwgMTM4NTQsIDEzODU4LCAwLCAxMzg2MiwgMTM4NjUsIDEzODY5LCAxMzg3MiwgCi0gICAgMTM4NzYsIDEzODc5LCAxMzg4MywgMTM4ODcsIDAsIDEzODkxLCAxMzg5NCwgMTM4OTgsIDAsIDEzOTAyLCAxMzkwNSwgCi0gICAgMTM5MDksIDEzOTEzLCAxMzkxNiwgMTM5MjAsIDEzOTI0LCAxMzkyOCwgMTM5MzIsIDEzOTM2LCAxMzk0MCwgMTM5NDQsIAotICAgIDEzOTQ4LCAxMzk1MiwgMTM5NTYsIDEzOTYwLCAxMzk2NCwgMTM5NjgsIDEzOTcyLCAxMzk3NiwgMTM5ODAsIDEzOTg0LCAKLSAgICAxMzk4OCwgMCwgMTM5OTIsIDEzOTk1LCAxMzk5OSwgMTQwMDMsIDE0MDA3LCAxNDAxMCwgMTQwMTMsIDE0MDE2LCAxNDAyMCwgCi0gICAgMTQwMjQsIDAsIDE0MDI4LCAxNDAzMiwgMTQwMzYsIDE0MDQwLCAxNDA0NCwgMCwgMCwgMTQwNDcsIDE0MDUxLCAxNDA1NSwgCi0gICAgMTQwNjAsIDE0MDY0LCAxNDA2OSwgMTQwNzMsIDE0MDc4LCAxNDA4MywgMCwgMTQwODksIDE0MDkzLCAxNDA5OCwgMCwgCi0gICAgMTQxMDMsIDE0MTA3LCAxNDExMiwgMTQxMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0MTIxLCAxNDEyNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTQxMzEsIDAsIDE0MTM1LCAxNDE0MCwgMTQxNDUsIDE0MTUwLCAwLCAwLCAxNDE1NiwgMTQxNjAsIAotICAgIDE0MTYzLCAxNDE2NiwgMTQxNjksIDE0MTcyLCAxNDE3NSwgMTQxNzgsIDE0MTgxLCAxNDE4NCwgMCwgMTQxODcsIDE0MTkxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDE5NSwgMTQxOTksIDAsIDE0MjAzLCAKLSAgICAxNDIwNiwgMTQyMTAsIDE0MjEzLCAxNDIxNywgMTQyMjAsIDE0MjI0LCAxNDIyOCwgMCwgMTQyMzIsIDE0MjM1LCAxNDIzOSwgCi0gICAgMCwgMTQyNDMsIDE0MjQ2LCAxNDI1MCwgMTQyNTQsIDE0MjU3LCAxNDI2MSwgMTQyNjUsIDE0MjY5LCAxNDI3MywgMTQyNzcsIAotICAgIDE0MjgxLCAxNDI4NSwgMTQyODksIDE0MjkzLCAxNDI5NywgMTQzMDEsIDE0MzA1LCAxNDMwOSwgMTQzMTMsIDE0MzE3LCAKLSAgICAxNDMyMSwgMTQzMjUsIDE0MzI5LCAwLCAxNDMzMywgMTQzMzYsIDE0MzQwLCAxNDM0NCwgMTQzNDgsIDE0MzUxLCAxNDM1NCwgCi0gICAgMTQzNTcsIDE0MzYxLCAxNDM2NSwgMTQzNjksIDE0MzczLCAxNDM3NywgMTQzODEsIDE0Mzg1LCAxNDM4OSwgMCwgMCwgMCwgCi0gICAgMTQzOTIsIDE0Mzk2LCAxNDQwMSwgMTQ0MDUsIDE0NDEwLCAxNDQxNCwgMTQ0MTksIDE0NDI0LCAwLCAxNDQzMCwgMTQ0MzQsIAotICAgIDE0NDM5LCAwLCAxNDQ0NCwgMTQ0NDgsIDE0NDUzLCAxNDQ1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0NjIsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDY4LCAxNDQ3MywgMTQ0NzgsIDE0NDgzLCAwLCAwLCAxNDQ4OSwgMTQ0OTMsIAotICAgIDE0NDk2LCAxNDQ5OSwgMTQ1MDIsIDE0NTA1LCAxNDUwOCwgMTQ1MTEsIDE0NTE0LCAxNDUxNywgMTQ1MjAsIDE0NTI0LCAKLSAgICAxNDUyOSwgMTQ1MzQsIDE0NTQwLCAxNDU0NiwgMCwgMCwgMCwgMTQ1NTIsIDE0NTU2LCAxNDU2MiwgMTQ1NjcsIDE0NTczLCAKLSAgICAxNDU3OCwgMTQ1ODQsIDAsIDAsIDE0NTkwLCAxNDU5NCwgMCwgMTQ1OTgsIDE0NjAyLCAxNDYwNiwgMTQ2MTAsIDE0NjE0LCAKLSAgICAxNDYxOCwgMTQ2MjIsIDE0NjI2LCAxNDYzMCwgMTQ2MzQsIDE0NjM4LCAxNDY0MiwgMTQ2NDYsIDE0NjUwLCAxNDY1NCwgCi0gICAgMTQ2NTgsIDE0NjYyLCAxNDY2NiwgMCwgMCwgMCwgMTQ2NzAsIDE0Njc2LCAxNDY4MiwgMTQ2ODgsIDE0Njk0LCAxNDcwMCwgCi0gICAgMTQ3MDYsIDE0NzEyLCAxNDcxOCwgMTQ3MjQsIDE0NzMwLCAxNDczNiwgMTQ3NDQsIDE0NzUwLCAxNDc1NiwgMTQ3NjIsIAotICAgIDE0NzY4LCAxNDc3NCwgMTQ3ODAsIDE0Nzg2LCAxNDc5MiwgMTQ3OTgsIDE0ODA0LCAxNDgxMCwgMCwgMTQ4MTYsIDE0ODIyLCAKLSAgICAxNDgyOCwgMTQ4MzQsIDE0ODQwLCAxNDg0NiwgMTQ4NTAsIDE0ODU2LCAxNDg2MCwgMCwgMTQ4NjQsIDAsIDAsIDE0ODcwLCAKLSAgICAxNDg3NCwgMTQ4ODAsIDE0ODg2LCAxNDg5MiwgMTQ4OTYsIDE0OTAyLCAwLCAwLCAwLCAxNDkwNiwgMCwgMCwgMCwgMCwgCi0gICAgMTQ5MTAsIDE0OTE1LCAxNDkyMiwgMTQ5MjksIDE0OTM2LCAxNDk0MywgMCwgMTQ5NTAsIDAsIDE0OTU3LCAxNDk2MiwgCi0gICAgMTQ5NjcsIDE0OTc0LCAxNDk4MSwgMTQ5OTAsIDE1MDAxLCAxNTAxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUwMTUsIDE1MDIyLCAxNTAyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTUwMzQsIDE1MDQwLCAxNTA0NiwgMTUwNTIsIDE1MDU4LCAxNTA2NCwgMTUwNzAsIDE1MDc2LCAxNTA4MiwgCi0gICAgMTUwODgsIDE1MDk0LCAxNTEwMCwgMTUxMDYsIDE1MTEyLCAxNTExOCwgMTUxMjMsIDE1MTI5LCAxNTEzNSwgMTUxNDEsIAotICAgIDE1MTQ3LCAxNTE1MywgMTUxNTgsIDE1MTY0LCAxNTE3MCwgMTUxNzYsIDE1MTgyLCAxNTE4OCwgMTUxOTQsIDE1MjAwLCAKLSAgICAxNTIwNiwgMTUyMTIsIDE1MjE4LCAxNTIyNCwgMTUyMjksIDE1MjM1LCAxNTI0MSwgMTUyNDUsIDE1MjUxLCAxNTI1NSwgCi0gICAgMTUyNjEsIDE1MjY3LCAxNTI3MywgMTUyNzksIDE1Mjg1LCAxNTI5MSwgMTUyOTYsIDE1MzAyLCAxNTMwNiwgMTUzMTEsIAotICAgIDE1MzE3LCAxNTMyMywgMTUzMjksIDE1MzM0LCAxNTM0MCwgMTUzNDYsIDE1MzUyLCAxNTM1NywgMTUzNjMsIDAsIDAsIDAsIAotICAgIDAsIDE1MzY3LCAxNTM3MywgMTUzNzgsIDE1Mzg0LCAxNTM4OSwgMTUzOTcsIDE1NDA1LCAxNTQwOSwgMTU0MTMsIDE1NDE3LCAKLSAgICAxNTQyMywgMTU0MjksIDE1NDM1LCAxNTQ0MSwgMTU0NDUsIDE1NDQ5LCAxNTQ1MywgMTU0NTcsIDE1NDYxLCAxNTQ2NCwgCi0gICAgMTU0NjcsIDE1NDcwLCAxNTQ3MywgMTU0NzYsIDE1NDc5LCAxNTQ4MiwgMTU0ODUsIDE1NDg4LCAxNTQ5MiwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU0OTYsIDE1NTAwLCAwLCAxNTUwNiwgMCwgMCwgMTU1MTIsIDE1NTE2LCAKLSAgICAwLCAxNTUyMCwgMCwgMCwgMTU1MjYsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTMwLCAxNTUzNCwgMTU1MzcsIDE1NTQzLCAwLCAKLSAgICAxNTU0OSwgMTU1NTMsIDE1NTU3LCAxNTU2MSwgMTU1NjcsIDE1NTczLCAxNTU3OSwgMCwgMTU1ODUsIDE1NTg5LCAxNTU5MywgCi0gICAgMCwgMTU1OTksIDAsIDE1NjA1LCAwLCAwLCAxNTYwOSwgMTU2MTUsIDAsIDE1NjIxLCAxNTYyNCwgMTU2MzAsIDE1NjMzLCAKLSAgICAxNTYzNywgMTU2NDQsIDE1NjQ5LCAxNTY1NCwgMTU2NTgsIDE1NjYzLCAxNTY2OCwgMTU2NzMsIDE1Njc3LCAwLCAxNTY4MiwgCi0gICAgMTU2ODksIDE1Njk1LCAwLCAwLCAxNTcwMSwgMTU3MDUsIDE1NzEwLCAxNTcxNCwgMTU3MTksIDAsIDE1NzI0LCAwLCAKLSAgICAxNTcyOSwgMTU3MzUsIDE1NzQxLCAxNTc0NywgMTU3NTMsIDE1NzU3LCAwLCAwLCAxNTc2MCwgMTU3NjQsIDE1NzY3LCAKLSAgICAxNTc3MCwgMTU3NzMsIDE1Nzc2LCAxNTc3OSwgMTU3ODIsIDE1Nzg1LCAxNTc4OCwgMCwgMCwgMTU3OTEsIDE1Nzk2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA3NywgMTIwODMsIAorICAgIDEyMDg3LCAxMjA5MSwgMTIwOTUsIDEyMTAwLCAxMjEwMywgMTIxMDcsIDEyMTEwLCAxMjExNCwgMTIxMTcsIDEyMTIxLCAKKyAgICAxMjEyNSwgMTIxMjksIDEyMTM0LCAxMjEzOSwgMTIxNDIsIDEyMTQ2LCAxMjE1MSwgMTIxNTYsIDEyMTU5LCAxMjE2MywgCisgICAgMTIxNjYsIDEyMTcwLCAxMjE3NCwgMTIxNzgsIDEyMTgyLCAxMjE4NiwgMTIxOTAsIDEyMTk0LCAxMjE5OCwgMTIyMDIsIAorICAgIDEyMjA2LCAxMjIxMCwgMTIyMTQsIDEyMjE4LCAxMjIyMiwgMTIyMjYsIDEyMjMwLCAxMjIzNCwgMTIyMzgsIDEyMjQxLCAKKyAgICAxMjI0NSwgMTIyNDgsIDEyMjUyLCAxMjI1NiwgMTIyNjAsIDEyMjYzLCAxMjI2NiwgMTIyNjksIDEyMjczLCAxMjI3NywgCisgICAgMTIyODEsIDEyMjg1LCAxMjI4OSwgMTIyOTMsIDEyMjk3LCAxMjMwMSwgMTIzMDQsIDEyMzA5LCAxMjMxNCwgMTIzMTgsIAorICAgIDEyMzIyLCAxMjMyNywgMTIzMzEsIDEyMzM2LCAxMjM0MCwgMTIzNDUsIDEyMzUwLCAxMjM1NiwgMTIzNjIsIDEyMzY4LCAKKyAgICAxMjM3MiwgMTIzNzcsIDEyMzgzLCAxMjM4OSwgMTIzOTMsIDEyMzk4LCAxMjQwMiwgMTI0MDgsIDEyNDEzLCAxMjQxNiwgCisgICAgMTI0MjIsIDEyNDI4LCAxMjQzMywgMTI0MzgsIDEyNDQ1LCAxMjQ1MCwgMTI0NTUsIDEyNDU5LCAxMjQ2MywgMTI0NjcsIAorICAgIDEyNDcxLCAxMjQ3NSwgMTI0NzksIDEyNDgzLCAxMjQ4NywgMTI0OTIsIDEyNDk3LCAxMjUwMiwgMTI1MDgsIDEyNTExLCAKKyAgICAxMjUxNSwgMTI1MTksIDEyNTIyLCAxMjUyNSwgMTI1MjgsIDEyNTMxLCAxMjUzNCwgMTI1MzcsIDEyNTQwLCAxMjU0MywgCisgICAgMTI1NDYsIDEyNTUwLCAxMjU1NywgMTI1NjIsIDEyNTY2LCAxMjU3MCwgMTI1NzQsIDEyNTc4LCAwLCAxMjU4MiwgMTI1ODYsIAorICAgIDEyNTkwLCAxMjU5NCwgMTI1OTgsIDEyNjA0LCAxMjYwOCwgMCwgMTI2MTIsIDEyNjE2LCAxMjYyMCwgMCwgMTI2MjQsIAorICAgIDEyNjI3LCAxMjYzMSwgMTI2MzQsIDEyNjM4LCAxMjY0MSwgMTI2NDUsIDEyNjQ5LCAwLCAwLCAxMjY1MywgMTI2NTYsIDAsIAorICAgIDAsIDEyNjYwLCAxMjY2MywgMTI2NjcsIDEyNjcwLCAxMjY3NCwgMTI2NzgsIDEyNjgyLCAxMjY4NiwgMTI2OTAsIDEyNjk0LCAKKyAgICAxMjY5OCwgMTI3MDIsIDEyNzA2LCAxMjcxMCwgMTI3MTQsIDEyNzE4LCAxMjcyMiwgMTI3MjYsIDEyNzMwLCAxMjczNCwgCisgICAgMTI3MzgsIDEyNzQyLCAwLCAxMjc0NSwgMTI3NDgsIDEyNzUyLCAxMjc1NiwgMTI3NjAsIDEyNzYzLCAxMjc2NiwgMCwgCisgICAgMTI3NjksIDAsIDAsIDAsIDEyNzczLCAxMjc3NywgMTI3ODEsIDEyNzg1LCAwLCAwLCAxMjc4OCwgMTI3OTIsIDEyNzk2LCAKKyAgICAxMjgwMSwgMTI4MDUsIDEyODEwLCAxMjgxNCwgMTI4MTksIDEyODI0LCAwLCAwLCAxMjgzMCwgMTI4MzQsIDAsIDAsIAorICAgIDEyODM5LCAxMjg0MywgMTI4NDgsIDEyODUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjg1OCwgMCwgMCwgMCwgMCwgCisgICAgMTI4NjQsIDEyODY4LCAwLCAxMjg3MiwgMTI4NzYsIDEyODgxLCAxMjg4NiwgMTI4OTEsIDAsIDAsIDEyODk3LCAxMjkwMSwgCisgICAgMTI5MDQsIDEyOTA3LCAxMjkxMCwgMTI5MTMsIDEyOTE2LCAxMjkxOSwgMTI5MjIsIDEyOTI1LCAxMjkyOCwgMTI5MzcsIAorICAgIDEyOTQ2LCAxMjk1MCwgMTI5NTQsIDEyOTYwLCAxMjk2NiwgMTI5NzIsIDEyOTc4LCAxMjk5MiwgMTI5OTksIDEzMDAyLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMzAwNiwgMTMwMTIsIDEzMDE2LCAwLCAxMzAyMCwgMTMwMjMsIDEzMDI3LCAxMzAzMCwgMTMwMzQsIAorICAgIDEzMDM3LCAwLCAwLCAwLCAwLCAxMzA0MSwgMTMwNDUsIDAsIDAsIDEzMDQ5LCAxMzA1MywgMTMwNTcsIDEzMDYwLCAxMzA2NCwgCisgICAgMTMwNjgsIDEzMDcyLCAxMzA3NiwgMTMwODAsIDEzMDg0LCAxMzA4OCwgMTMwOTIsIDEzMDk2LCAxMzEwMCwgMTMxMDQsIAorICAgIDEzMTA4LCAxMzExMiwgMTMxMTYsIDEzMTIwLCAxMzEyNCwgMTMxMjgsIDEzMTMyLCAwLCAxMzEzNSwgMTMxMzgsIDEzMTQyLCAKKyAgICAxMzE0NiwgMTMxNTAsIDEzMTUzLCAxMzE1NiwgMCwgMTMxNTksIDEzMTYzLCAwLCAxMzE2NywgMTMxNzEsIDAsIDEzMTc1LCAKKyAgICAxMzE3OSwgMCwgMCwgMTMxODIsIDAsIDEzMTg2LCAxMzE5MSwgMTMxOTUsIDEzMjAwLCAxMzIwNCwgMCwgMCwgMCwgMCwgCisgICAgMTMyMDksIDEzMjE0LCAwLCAwLCAxMzIxOSwgMTMyMjQsIDEzMjI5LCAwLCAwLCAwLCAxMzIzMywgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTMyMzcsIDEzMjQxLCAxMzI0NSwgMTMyNDksIDAsIDEzMjUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzI1NywgCisgICAgMTMyNjEsIDEzMjY0LCAxMzI2NywgMTMyNzAsIDEzMjczLCAxMzI3NiwgMTMyNzksIDEzMjgyLCAxMzI4NSwgMTMyODgsIAorICAgIDEzMjkxLCAxMzI5NCwgMTMyOTcsIDEzMzAwLCAxMzMwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTMzMDksIDEzMzEzLCAxMzMxNywgMCwgMTMzMjEsIDEzMzI0LCAxMzMyOCwgMTMzMzEsIDEzMzM1LCAxMzMzOCwgMTMzNDIsIAorICAgIDEzMzQ2LCAxMzM1MCwgMCwgMTMzNTUsIDEzMzU4LCAxMzM2MiwgMCwgMTMzNjcsIDEzMzcwLCAxMzM3NCwgMTMzNzcsIAorICAgIDEzMzgxLCAxMzM4NSwgMTMzODksIDEzMzkzLCAxMzM5NywgMTM0MDEsIDEzNDA1LCAxMzQwOSwgMTM0MTMsIDEzNDE3LCAKKyAgICAxMzQyMSwgMTM0MjUsIDEzNDI5LCAxMzQzMywgMTM0MzcsIDEzNDQxLCAxMzQ0NSwgMTM0NDksIDAsIDEzNDUyLCAxMzQ1NSwgCisgICAgMTM0NTksIDEzNDYzLCAxMzQ2NywgMTM0NzAsIDEzNDczLCAwLCAxMzQ3NiwgMTM0ODAsIDAsIDEzNDg0LCAxMzQ4OCwgCisgICAgMTM0OTIsIDEzNDk2LCAxMzUwMCwgMCwgMCwgMTM1MDMsIDEzNTA3LCAxMzUxMSwgMTM1MTYsIDEzNTIwLCAxMzUyNSwgCisgICAgMTM1MjksIDEzNTM0LCAxMzUzOSwgMTM1NDUsIDAsIDEzNTUxLCAxMzU1NSwgMTM1NjAsIDAsIDEzNTY2LCAxMzU3MCwgCisgICAgMTM1NzUsIDAsIDAsIDEzNTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzU4MiwgCisgICAgMTM1ODcsIDEzNTkyLCAxMzU5NywgMCwgMCwgMTM2MDMsIDEzNjA3LCAxMzYxMCwgMTM2MTMsIDEzNjE2LCAxMzYxOSwgCisgICAgMTM2MjIsIDEzNjI1LCAxMzYyOCwgMTM2MzEsIDAsIDEzNjM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMzYzOCwgMTM2NDIsIDEzNjQ2LCAwLCAxMzY1MCwgMTM2NTMsIDEzNjU3LCAxMzY2MCwgMTM2NjQsIAorICAgIDEzNjY3LCAxMzY3MSwgMTM2NzUsIDAsIDAsIDEzNjc5LCAxMzY4MiwgMCwgMCwgMTM2ODYsIDEzNjg5LCAxMzY5MywgCisgICAgMTM2OTYsIDEzNzAwLCAxMzcwNCwgMTM3MDgsIDEzNzEyLCAxMzcxNiwgMTM3MjAsIDEzNzI0LCAxMzcyOCwgMTM3MzIsIAorICAgIDEzNzM2LCAxMzc0MCwgMTM3NDQsIDEzNzQ4LCAxMzc1MiwgMTM3NTYsIDEzNzYwLCAxMzc2NCwgMTM3NjgsIDAsIDEzNzcxLCAKKyAgICAxMzc3NCwgMTM3NzgsIDEzNzgyLCAxMzc4NiwgMTM3ODksIDEzNzkyLCAwLCAxMzc5NSwgMTM3OTksIDAsIDEzODAzLCAKKyAgICAxMzgwNywgMTM4MTEsIDEzODE1LCAxMzgxOSwgMCwgMCwgMTM4MjIsIDEzODI2LCAxMzgzMCwgMTM4MzUsIDEzODM5LCAKKyAgICAxMzg0NCwgMTM4NDgsIDEzODUzLCAxMzg1OCwgMCwgMCwgMTM4NjQsIDEzODY4LCAwLCAwLCAxMzg3MywgMTM4NzcsIAorICAgIDEzODgyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzg4NiwgMTM4OTIsIDAsIDAsIDAsIDAsIDEzODk4LCAxMzkwMiwgMCwgCisgICAgMTM5MDYsIDEzOTEwLCAxMzkxNSwgMTM5MjAsIDEzOTI1LCAwLCAwLCAxMzkzMSwgMTM5MzUsIDEzOTM4LCAxMzk0MSwgCisgICAgMTM5NDQsIDEzOTQ3LCAxMzk1MCwgMTM5NTMsIDEzOTU2LCAxMzk1OSwgMTM5NjIsIDEzOTY1LCAxMzk2OSwgMTM5NzUsIAorICAgIDEzOTgxLCAxMzk4NywgMTM5OTMsIDEzOTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDAwNSwgMTQwMDksIAorICAgIDAsIDE0MDEzLCAxNDAxNiwgMTQwMjAsIDE0MDIzLCAxNDAyNywgMTQwMzAsIDAsIDAsIDAsIDE0MDM0LCAxNDAzNywgCisgICAgMTQwNDEsIDAsIDE0MDQ1LCAxNDA0OCwgMTQwNTIsIDE0MDU2LCAwLCAwLCAwLCAxNDA1OSwgMTQwNjMsIDAsIDE0MDY3LCAwLCAKKyAgICAxNDA3MSwgMTQwNzUsIDAsIDAsIDAsIDE0MDc5LCAxNDA4MywgMCwgMCwgMCwgMTQwODcsIDE0MDkwLCAxNDA5NCwgMCwgMCwgCisgICAgMCwgMTQwOTcsIDE0MTAwLCAxNDEwMywgMTQxMDYsIDE0MTEwLCAxNDExNCwgMTQxMTgsIDE0MTIyLCAxNDEyNiwgMTQxMzAsIAorICAgIDE0MTM0LCAxNDEzOCwgMCwgMCwgMCwgMCwgMTQxNDEsIDE0MTQ2LCAxNDE1MCwgMTQxNTUsIDE0MTU5LCAwLCAwLCAwLCAKKyAgICAxNDE2NCwgMTQxNjgsIDE0MTczLCAwLCAxNDE3OCwgMTQxODIsIDE0MTg3LCAxNDE5MiwgMCwgMCwgMTQxOTYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0MTk5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDIwNSwgMTQyMDksIAorICAgIDE0MjEyLCAxNDIxNSwgMTQyMTgsIDE0MjIxLCAxNDIyNCwgMTQyMjcsIDE0MjMwLCAxNDIzMywgMTQyMzYsIDE0MjQwLCAKKyAgICAxNDI0NSwgMTQyNTAsIDE0MjU0LCAxNDI1OCwgMTQyNjIsIDE0MjY2LCAxNDI3MCwgMTQyNzUsIDE0Mjc5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxNDI4MiwgMTQyODYsIDE0MjkwLCAwLCAxNDI5NCwgMTQyOTcsIDE0MzAxLCAxNDMwNCwgMTQzMDgsIAorICAgIDE0MzExLCAxNDMxNSwgMTQzMTksIDAsIDE0MzIzLCAxNDMyNiwgMTQzMzAsIDAsIDE0MzM0LCAxNDMzNywgMTQzNDEsIAorICAgIDE0MzQ1LCAxNDM0OCwgMTQzNTIsIDE0MzU2LCAxNDM2MCwgMTQzNjQsIDE0MzY4LCAxNDM3MiwgMTQzNzYsIDE0MzgwLCAKKyAgICAxNDM4NCwgMTQzODgsIDE0MzkyLCAxNDM5NiwgMTQ0MDAsIDE0NDA0LCAxNDQwOCwgMTQ0MTIsIDE0NDE2LCAxNDQyMCwgMCwgCisgICAgMTQ0MjMsIDE0NDI2LCAxNDQzMCwgMTQ0MzQsIDE0NDM4LCAxNDQ0MSwgMTQ0NDQsIDE0NDQ3LCAxNDQ1MSwgMTQ0NTUsIDAsIAorICAgIDE0NDU5LCAxNDQ2MywgMTQ0NjcsIDE0NDcxLCAxNDQ3NSwgMCwgMCwgMCwgMTQ0NzgsIDE0NDgyLCAxNDQ4NywgMTQ0OTEsIAorICAgIDE0NDk2LCAxNDUwMCwgMTQ1MDUsIDE0NTEwLCAwLCAxNDUxNiwgMTQ1MjAsIDE0NTI1LCAwLCAxNDUzMCwgMTQ1MzQsIAorICAgIDE0NTM5LCAxNDU0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1NDgsIDE0NTUyLCAwLCAxNDU1OCwgMTQ1NjIsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE0NTY2LCAxNDU3MSwgMTQ1NzYsIDE0NTgxLCAwLCAwLCAxNDU4NywgMTQ1OTEsIDE0NTk0LCAxNDU5NywgCisgICAgMTQ2MDAsIDE0NjAzLCAxNDYwNiwgMTQ2MDksIDE0NjEyLCAxNDYxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ2MTgsIAorICAgIDE0NjMxLCAxNDY0MywgMTQ2NTUsIDE0NjY3LCAxNDY3OSwgMTQ2OTEsIDE0NzAzLCAwLCAwLCAxNDcwNywgMTQ3MTEsIDAsIAorICAgIDE0NzE1LCAxNDcxOCwgMTQ3MjIsIDE0NzI1LCAxNDcyOSwgMTQ3MzIsIDE0NzM2LCAxNDc0MCwgMCwgMTQ3NDQsIDE0NzQ3LCAKKyAgICAxNDc1MSwgMCwgMTQ3NTUsIDE0NzU4LCAxNDc2MiwgMTQ3NjYsIDE0NzY5LCAxNDc3MywgMTQ3NzcsIDE0NzgxLCAxNDc4NSwgCisgICAgMTQ3ODksIDE0NzkzLCAxNDc5NywgMTQ4MDEsIDE0ODA1LCAxNDgwOSwgMTQ4MTMsIDE0ODE3LCAxNDgyMSwgMTQ4MjUsIAorICAgIDE0ODI5LCAxNDgzMywgMTQ4MzcsIDE0ODQxLCAwLCAxNDg0NCwgMTQ4NDcsIDE0ODUxLCAxNDg1NSwgMTQ4NTksIDE0ODYyLCAKKyAgICAxNDg2NSwgMTQ4NjgsIDE0ODcyLCAxNDg3NiwgMCwgMTQ4ODAsIDE0ODg0LCAxNDg4OCwgMTQ4OTIsIDE0ODk2LCAwLCAwLCAKKyAgICAxNDg5OSwgMTQ5MDMsIDE0OTA3LCAxNDkxMiwgMTQ5MTYsIDE0OTIxLCAxNDkyNSwgMTQ5MzAsIDE0OTM1LCAwLCAxNDk0MSwgCisgICAgMTQ5NDUsIDE0OTUwLCAwLCAxNDk1NSwgMTQ5NTksIDE0OTY0LCAxNDk2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ5NzMsIAorICAgIDE0OTc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDk4MywgMCwgMTQ5ODcsIDE0OTkyLCAxNDk5NywgMTUwMDIsIDAsIDAsIAorICAgIDE1MDA4LCAxNTAxMiwgMTUwMTUsIDE1MDE4LCAxNTAyMSwgMTUwMjQsIDE1MDI3LCAxNTAzMCwgMTUwMzMsIDE1MDM2LCAwLCAKKyAgICAxNTAzOSwgMTUwNDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MDQ3LCAxNTA1MSwgCisgICAgMCwgMTUwNTUsIDE1MDU4LCAxNTA2MiwgMTUwNjUsIDE1MDY5LCAxNTA3MiwgMTUwNzYsIDE1MDgwLCAwLCAxNTA4NCwgCisgICAgMTUwODcsIDE1MDkxLCAwLCAxNTA5NSwgMTUwOTgsIDE1MTAyLCAxNTEwNiwgMTUxMDksIDE1MTEzLCAxNTExNywgMTUxMjEsIAorICAgIDE1MTI1LCAxNTEyOSwgMTUxMzMsIDE1MTM3LCAxNTE0MSwgMTUxNDUsIDE1MTQ5LCAxNTE1MywgMTUxNTcsIDE1MTYxLCAKKyAgICAxNTE2NSwgMTUxNjksIDE1MTczLCAxNTE3NywgMTUxODEsIDE1MTg0LCAxNTE4OCwgMTUxOTEsIDE1MTk1LCAxNTE5OSwgCisgICAgMTUyMDMsIDE1MjA2LCAxNTIwOSwgMTUyMTIsIDE1MjE2LCAxNTIyMCwgMTUyMjQsIDE1MjI4LCAxNTIzMiwgMTUyMzYsIAorICAgIDE1MjQwLCAxNTI0NCwgMTUyNDcsIDAsIDAsIDE1MjUxLCAxNTI1NSwgMTUyNjAsIDE1MjY0LCAxNTI2OSwgMTUyNzMsIAorICAgIDE1Mjc4LCAxNTI4MywgMCwgMTUyODksIDE1MjkzLCAxNTI5OCwgMCwgMTUzMDMsIDE1MzA3LCAxNTMxMiwgMTUzMTcsIAorICAgIDE1MzIxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTMyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUzMzIsIAorICAgIDE1MzM3LCAxNTM0MiwgMTUzNDcsIDAsIDAsIDE1MzUzLCAxNTM1NywgMTUzNjAsIDE1MzYzLCAxNTM2NiwgMTUzNjksIAorICAgIDE1MzcyLCAxNTM3NSwgMTUzNzgsIDE1MzgxLCAxNTM4NCwgMTUzODgsIDE1MzkzLCAxNTM5OCwgMTU0MDQsIDE1NDEwLCAwLCAKKyAgICAwLCAwLCAxNTQxNiwgMTU0MjAsIDE1NDI2LCAxNTQzMSwgMTU0MzcsIDE1NDQyLCAxNTQ0OCwgMCwgMCwgMTU0NTQsIAorICAgIDE1NDU4LCAwLCAxNTQ2MiwgMTU0NjYsIDE1NDcwLCAxNTQ3NCwgMTU0NzgsIDE1NDgyLCAxNTQ4NiwgMTU0OTAsIDE1NDk0LCAKKyAgICAxNTQ5OCwgMTU1MDIsIDE1NTA2LCAxNTUxMCwgMTU1MTQsIDE1NTE4LCAxNTUyMiwgMTU1MjYsIDE1NTMwLCAwLCAwLCAwLCAKKyAgICAxNTUzNCwgMTU1NDAsIDE1NTQ2LCAxNTU1MiwgMTU1NTgsIDE1NTY0LCAxNTU3MCwgMTU1NzYsIDE1NTgyLCAxNTU4OCwgCisgICAgMTU1OTQsIDE1NjAwLCAxNTYwOCwgMTU2MTQsIDE1NjIwLCAxNTYyNiwgMTU2MzIsIDE1NjM4LCAxNTY0NCwgMTU2NTAsIAorICAgIDE1NjU2LCAxNTY2MiwgMTU2NjgsIDE1Njc0LCAwLCAxNTY4MCwgMTU2ODYsIDE1NjkyLCAxNTY5OCwgMTU3MDQsIDE1NzEwLCAKKyAgICAxNTcxNCwgMTU3MjAsIDE1NzI0LCAwLCAxNTcyOCwgMCwgMCwgMTU3MzQsIDE1NzM4LCAxNTc0NCwgMTU3NTAsIDE1NzU2LCAKKyAgICAxNTc2MCwgMTU3NjYsIDAsIDAsIDAsIDE1NzcwLCAwLCAwLCAwLCAwLCAxNTc3NCwgMTU3NzksIDE1Nzg2LCAxNTc5MywgCisgICAgMTU4MDAsIDE1ODA3LCAwLCAxNTgxNCwgMCwgMTU4MjEsIDE1ODI2LCAxNTgzMSwgMTU4MzgsIDE1ODQ1LCAxNTg1NCwgCisgICAgMTU4NjUsIDE1ODc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNTg3OSwgMTU4ODYsIDE1ODkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTg5OCwgMTU5MDQsIAorICAgIDE1OTEwLCAxNTkxNiwgMTU5MjIsIDE1OTI4LCAxNTkzNCwgMTU5NDAsIDE1OTQ2LCAxNTk1MiwgMTU5NTgsIDE1OTY0LCAKKyAgICAxNTk3MCwgMTU5NzYsIDE1OTgyLCAxNTk4OCwgMTU5OTQsIDE2MDAwLCAxNjAwNiwgMTYwMTIsIDE2MDE4LCAxNjAyNCwgCisgICAgMTYwMzAsIDE2MDM2LCAxNjA0MiwgMTYwNDgsIDE2MDU0LCAxNjA2MCwgMTYwNjYsIDE2MDcyLCAxNjA3OCwgMTYwODQsIAorICAgIDE2MDkwLCAxNjA5NSwgMTYxMDEsIDE2MTA3LCAxNjExMSwgMTYxMTcsIDE2MTIxLCAxNjEyNywgMTYxMzMsIDE2MTM5LCAKKyAgICAxNjE0NSwgMTYxNTEsIDE2MTU3LCAxNjE2MiwgMTYxNjgsIDE2MTcyLCAxNjE3NywgMTYxODMsIDE2MTg5LCAxNjE5NSwgCisgICAgMTYyMDAsIDE2MjA2LCAxNjIxMiwgMTYyMTgsIDE2MjIzLCAxNjIyOSwgMCwgMCwgMCwgMCwgMTYyMzMsIDE2MjM5LCAKKyAgICAxNjI0NCwgMTYyNTAsIDE2MjU1LCAxNjI2MywgMTYyNzEsIDE2Mjc1LCAxNjI3OSwgMTYyODMsIDE2Mjg5LCAxNjI5NSwgCisgICAgMTYzMDEsIDE2MzA3LCAxNjMxMSwgMTYzMTUsIDE2MzE5LCAxNjMyMywgMTYzMjcsIDE2MzMwLCAxNjMzMywgMTYzMzYsIAorICAgIDE2MzM5LCAxNjM0MiwgMTYzNDUsIDE2MzQ4LCAxNjM1MSwgMTYzNTQsIDE2MzU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTgwMSwgMTU4MDUsIDE1ODE2LCAxNTgzMSwgMTU4NDYsIDE1ODU2LCAKLSAgICAxNTg2NywgMTU4ODAsIDE1ODkxLCAxNTg5NywgMTU5MDUsIDE1OTE1LCAxNTkyMSwgMTU5MjksIDE1OTMzLCAxNTkzOSwgCi0gICAgMTU5NDUsIDE1OTUzLCAxNTk2MywgMTU5NzEsIDE1OTg0LCAxNTk5MCwgMTU5OTgsIDE2MDA2LCAxNjAxOCwgMTYwMjUsIAotICAgIDE2MDMzLCAxNjA0MSwgMTYwNDksIDE2MDU3LCAxNjA2NSwgMTYwNzMsIDE2MDgzLCAxNjA4NywgMTYwOTAsIDE2MDkzLCAKLSAgICAxNjA5NiwgMTYwOTksIDE2MTAyLCAxNjEwNSwgMTYxMDgsIDE2MTExLCAxNjExNCwgMTYxMTgsIDE2MTIyLCAxNjEyNiwgCi0gICAgMTYxMzAsIDE2MTM0LCAxNjEzOCwgMTYxNDIsIDE2MTQ2LCAxNjE1MCwgMTYxNTUsIDE2MTYxLCAxNjE3MSwgMTYxODUsIAotICAgIDE2MTk1LCAxNjIwMSwgMTYyMDcsIDE2MjE1LCAxNjIyMywgMTYyMzEsIDE2MjM5LCAxNjI0NSwgMTYyNTEsIDE2MjU0LCAKLSAgICAxNjI1OCwgMTYyNjIsIDE2MjY2LCAxNjI3MCwgMTYyNzQsIDE2Mjc4LCAwLCAxNjI4MiwgMTYyODYsIDE2MjkwLCAxNjI5NCwgCi0gICAgMTYyOTgsIDE2MzAyLCAxNjMwNiwgMTYzMTAsIDE2MzE0LCAxNjMxOCwgMTYzMjIsIDE2MzI2LCAxNjMyOSwgMTYzMzMsIAotICAgIDE2MzM3LCAxNjM0MSwgMTYzNDQsIDE2MzQ4LCAxNjM1MiwgMTYzNTYsIDE2MzYwLCAxNjM2NCwgMTYzNjgsIDE2MzcyLCAKLSAgICAxNjM3NiwgMTYzNzksIDE2MzgyLCAxNjM4NiwgMTYzOTAsIDE2Mzk0LCAxNjM5OCwgMTY0MDEsIDE2NDA0LCAxNjQwOCwgCi0gICAgMTY0MTMsIDE2NDE3LCAwLCAwLCAwLCAwLCAxNjQyMSwgMTY0MjYsIDE2NDMwLCAxNjQzNSwgMTY0MzksIDE2NDQ0LCAKLSAgICAxNjQ0OSwgMTY0NTUsIDE2NDYwLCAxNjQ2NiwgMTY0NzAsIDE2NDc1LCAxNjQ3OSwgMTY0ODQsIDE2NDk0LCAxNjUwMCwgCi0gICAgMTY1MDUsIDE2NTExLCAxNjUyMSwgMTY1MjcsIDE2NTMxLCAxNjUzNSwgMTY1NDEsIDE2NTQ3LCAxNjU1NSwgMTY1NjEsIAotICAgIDE2NTY5LCAwLCAwLCAwLCAwLCAxNjU3NywgMTY1ODIsIDE2NTg4LCAxNjU5NCwgMTY2MDAsIDE2NjA2LCAxNjYxMiwgCi0gICAgMTY2MTgsIDAsIDE2NjI0LCAxNjYzMCwgMTY2MzYsIDE2NjQyLCAxNjY0OCwgMTY2NTQsIDE2NjYwLCAxNjY2NiwgMTY2NzIsIAotICAgIDE2Njc4LCAxNjY4NCwgMTY2OTAsIDE2Njk1LCAxNjcwMSwgMTY3MDcsIDE2NzEzLCAxNjcxOCwgMTY3MjQsIDE2NzMwLCAKLSAgICAxNjczNiwgMTY3NDIsIDE2NzQ4LCAxNjc1NCwgMTY3NjAsIDE2NzY2LCAxNjc3MSwgMTY3NzYsIDE2NzgyLCAxNjc4OCwgCi0gICAgMTY3OTQsIDE2ODAwLCAxNjgwNSwgMTY4MTAsIDE2ODE2LCAxNjgyNCwgMTY4MzEsIDAsIDE2ODM4LCAxNjg0NSwgMTY4NTgsIAotICAgIDE2ODY1LCAxNjg3MiwgMTY4ODAsIDE2ODg4LCAxNjg5NCwgMTY5MDAsIDE2OTA2LCAxNjkxNiwgMTY5MjEsIDE2OTI3LCAKLSAgICAxNjkzNywgMTY5NDcsIDAsIDE2OTU3LCAxNjk2NywgMTY5NzUsIDE2OTg3LCAxNjk5OSwgMTcwMDUsIDE3MDE5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNjM2MiwgMTYzNjcsIDAsIDE2Mzc0LCAwLCAwLCAxNjM4MSwgMTYzODYsIDAsIDE2MzkxLCAwLCAKKyAgICAwLCAxNjM5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY0MDMsIDE2NDA4LCAxNjQxMiwgMTY0MTksIDAsIDE2NDI2LCAxNjQzMSwgCisgICAgMTY0MzYsIDE2NDQxLCAxNjQ0OCwgMTY0NTUsIDE2NDYyLCAwLCAxNjQ2OSwgMTY0NzQsIDE2NDc5LCAwLCAxNjQ4NiwgMCwgCisgICAgMTY0OTMsIDAsIDAsIDE2NDk4LCAxNjUwNSwgMCwgMTY1MTIsIDE2NTE2LCAxNjUyMywgMTY1MjcsIDE2NTMyLCAxNjU0MCwgCisgICAgMTY1NDYsIDE2NTUyLCAxNjU1NywgMTY1NjMsIDE2NTY5LCAxNjU3NSwgMTY1ODAsIDAsIDE2NTg2LCAxNjU5NCwgMTY2MDEsIAorICAgIDAsIDAsIDE2NjA4LCAxNjYxMywgMTY2MTksIDE2NjI0LCAxNjYzMCwgMCwgMTY2MzYsIDAsIDE2NjQyLCAxNjY0OSwgCisgICAgMTY2NTYsIDE2NjYzLCAxNjY3MCwgMTY2NzUsIDAsIDAsIDE2Njc5LCAxNjY4NCwgMTY2ODgsIDE2NjkyLCAxNjY5NiwgCisgICAgMTY3MDAsIDE2NzA0LCAxNjcwOCwgMTY3MTIsIDE2NzE2LCAwLCAwLCAxNjcyMCwgMTY3MjYsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MDM0LCAxNzAzNywgMTcwNDEsIAotICAgIDE3MDQ1LCAxNzA0OSwgMTcwNTMsIDE3MDU3LCAxNzA2MSwgMTcwNjUsIDE3MDY5LCAxNzA3MywgMTcwNzcsIDE3MDgxLCAKLSAgICAxNzA4NSwgMTcwODksIDE3MDkzLCAxNzA5NywgMTcxMDEsIDE3MTA1LCAxNzEwOSwgMTcxMTMsIDE3MTE3LCAxNzEyMCwgCi0gICAgMTcxMjQsIDE3MTI4LCAxNzEzMiwgMTcxMzUsIDE3MTM4LCAxNzE0MSwgMTcxNDUsIDE3MTQ5LCAxNzE1MywgMTcxNTYsIAotICAgIDE3MTYwLCAxNzE2MywgMTcxNjgsIDE3MTcxLCAxNzE3NSwgMTcxNzgsIDE3MTgyLCAxNzE4NSwgMTcxOTAsIDE3MTkzLCAKLSAgICAxNzE5NywgMTcyMDQsIDE3MjA5LCAxNzIxMywgMTcyMTgsIDE3MjIyLCAxNzIyNywgMTcyMzEsIDE3MjM2LCAxNzI0MywgCi0gICAgMTcyNDksIDE3MjU0LCAxNzI1OCwgMTcyNjIsIDE3MjY2LCAxNzI3MCwgMTcyNzQsIDE3MjgwLCAxNzI4NiwgMTcyOTMsIAotICAgIDE3Mjk5LCAxNzMwNSwgMTczMDksIDE3MzEyLCAxNzMxNSwgMTczMTgsIDE3MzIxLCAxNzMyNCwgMTczMjcsIDE3MzMwLCAKLSAgICAxNzMzMywgMTczMzYsIDE3MzQyLCAxNzM0NiwgMTczNTAsIDE3MzU0LCAxNzM1OCwgMTczNjIsIDE3MzY2LCAxNzM3MCwgCi0gICAgMTczNzQsIDE3Mzc5LCAxNzM4MywgMTczODgsIDE3MzkzLCAxNzM5OSwgMTc0MDQsIDE3NDEwLCAxNzQxNiwgMTc0MjIsIAotICAgIDE3NDI4LCAxNzQzNCwgMTc0NDMsIDE3NDUxLCAxNzQ2MCwgMTc0NjgsIDE3NDc3LCAxNzQ4NiwgMTc0OTcsIDE3NTA3LCAKLSAgICAxNzUxNywgMTc1MjgsIDE3NTM5LCAxNzU0OSwgMTc1NTksIDE3NTY5LCAxNzU3OSwgMTc1ODksIDE3NTk5LCAxNzYwOSwgCi0gICAgMTc2MTksIDE3NjI3LCAxNzYzNCwgMTc2NDAsIDE3NjQ3LCAxNzY1MiwgMTc2NTgsIDE3NjY0LCAxNzY3MCwgMTc2NzYsIAotICAgIDE3NjgyLCAxNzY4OCwgMTc2OTQsIDE3NzAwLCAxNzcwNiwgMTc3MTIsIDE3NzE4LCAxNzcyMywgMTc3MzIsIDE3NzM5LCAKLSAgICAxNzc0NSwgMTc3NTIsIDE3NzYwLCAxNzc2NiwgMTc3NzIsIDE3Nzc4LCAxNzc4NCwgMTc3OTIsIDE3ODAwLCAxNzgxMCwgCi0gICAgMTc4MTgsIDE3ODI2LCAxNzgzMiwgMTc4MzcsIDE3ODQyLCAxNzg0NywgMTc4NTIsIDE3ODU3LCAxNzg2MiwgMTc4NjcsIAotICAgIDE3ODcyLCAwLCAwLCAwLCAwLCAxNzg3NywgMTc4ODIsIDE3ODg4LCAxNzg5MywgMTc4OTgsIDE3OTAzLCAxNzkwOCwgCi0gICAgMTc5MTMsIDE3OTE4LCAxNzkyMywgMTc5MjgsIDE3OTMzLCAxNzkzOCwgMTc5NDMsIDE3OTQ4LCAxNzk1MywgMTc5NTgsIAotICAgIDE3OTYzLCAxNzk2OCwgMTc5NzMsIDE3OTc4LCAxNzk4MywgMTc5ODgsIDE3OTkzLCAxNzk5OCwgMTgwMDMsIDE4MDA4LCAKLSAgICAxODAxMywgMTgwMTgsIDE4MDIzLCAxODAyOCwgMTgwMzMsIDE4MDM4LCAxODA0MywgMTgwNDgsIDE4MDUzLCAxODA1OCwgCi0gICAgMTgwNjMsIDE4MDY4LCAxODA3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTgwNzgsIDE4MDgyLCAxODA4NiwgCi0gICAgMTgwOTAsIDE4MDk0LCAxODA5OCwgMTgxMDIsIDE4MTA2LCAxODExMCwgMTgxMTQsIDE4MTE4LCAxODEyMiwgMTgxMjYsIAotICAgIDE4MTMwLCAxODEzNCwgMTgxMzgsIDE4MTQyLCAxODE0NiwgMTgxNTAsIDE4MTU0LCAxODE1OCwgMTgxNjIsIDE4MTY2LCAKLSAgICAxODE3MCwgMTgxNzQsIDE4MTc4LCAxODE4MiwgMTgxODYsIDE4MTkwLCAxODE5NCwgMTgxOTgsIDE4MjAyLCAxODIwNiwgCi0gICAgMTgyMTAsIDE4MjE0LCAxODIxOCwgMTgyMjIsIDE4MjI2LCAxODIzMCwgMTgyMzQsIDE4MjM4LCAxODI0MiwgMTgyNDcsIAotICAgIDE4MjUxLCAxODI1NiwgMCwgMCwgMCwgMTgyNjEsIDE4MjY1LCAxODI2OSwgMTgyNzMsIDE4Mjc3LCAxODI4MSwgMTgyODUsIAotICAgIDE4Mjg5LCAxODI5MywgMTgyOTcsIDE4MzAxLCAxODMwNSwgMTgzMDksIDE4MzEzLCAxODMxNywgMTgzMjEsIDE4MzI1LCAKLSAgICAxODMyOSwgMTgzMzMsIDE4MzM3LCAxODM0MSwgMTgzNDUsIDE4MzQ5LCAxODM1MywgMTgzNTcsIDE4MzYxLCAxODM2NSwgCi0gICAgMTgzNjksIDE4MzczLCAxODM3NywgMTgzODEsIDE4Mzg1LCAxODM4OSwgMTgzOTMsIDE4Mzk3LCAxODQwMSwgMTg0MDUsIAotICAgIDE4NDA5LCAxODQxMywgMTg0MTcsIDE4NDIxLCAxODQyNSwgMTg0MjksIDE4NDMzLCAxODQzNywgMTg0NDEsIDE4NDQ1LCAKLSAgICAxODQ0OSwgMTg0NTMsIDE4NDU3LCAxODQ2MSwgMTg0NjUsIDE4NDY5LCAxODQ3MywgMTg0NzcsIDE4NDgxLCAxODQ4NSwgCi0gICAgMTg0ODksIDE4NDkzLCAxODQ5NywgMTg1MDEsIDE4NTA1LCAxODUwOSwgMTg1MTMsIDE4NTE3LCAxODUyMSwgMTg1MjUsIAotICAgIDE4NTI5LCAxODUzMywgMTg1MzcsIDE4NTQxLCAxODU0NSwgMTg1NDksIDE4NTUzLCAxODU1NywgMTg1NjEsIDE4NTY1LCAKLSAgICAxODU2OSwgMTg1NzMsIDE4NTc3LCAxODU4MSwgMTg1ODUsIDE4NTg5LCAxODU5MywgMTg1OTcsIDE4NjAxLCAxODYwNSwgCi0gICAgMTg2MDksIDE4NjEzLCAxODYxNywgMCwgMCwgMCwgMCwgMCwgMTg2MjEsIDE4NjI1LCAxODYyOSwgMTg2MzIsIDE4NjM2LCAKLSAgICAxODYzOSwgMTg2NDMsIDE4NjQ3LCAxODY1MCwgMTg2NTQsIDE4NjU4LCAxODY2MSwgMTg2NjUsIDE4NjY5LCAxODY3MywgCi0gICAgMTg2NzcsIDE4NjgwLCAxODY4NCwgMTg2ODgsIDE4NjkyLCAxODY5NiwgMTg3MDAsIDE4NzA0LCAxODcwNywgMTg3MTEsIAotICAgIDE4NzE1LCAxODcxOSwgMTg3MjMsIDE4NzI3LCAxODczMSwgMTg3MzUsIDE4NzM5LCAxODc0MywgMTg3NDcsIDE4NzUxLCAKLSAgICAxODc1NSwgMTg3NTksIDE4NzYzLCAxODc2NywgMTg3NzEsIDE4Nzc1LCAxODc3OSwgMTg3ODMsIDE4Nzg3LCAxODc5MSwgCi0gICAgMTg3OTUsIDE4Nzk5LCAxODgwMywgMTg4MDcsIDE4ODExLCAxODgxNSwgMTg4MTksIDE4ODIzLCAxODgyNywgMTg4MzEsIAotICAgIDE4ODM1LCAxODgzOSwgMTg4NDMsIDE4ODQ3LCAxODg1MSwgMTg4NTUsIDE4ODU5LCAxODg2MywgMTg4NjcsIDE4ODcxLCAKLSAgICAxODg3NSwgMTg4NzksIDE4ODgzLCAwLCAwLCAwLCAwLCAwLCAxODg4NywgMTg4OTEsIDE4ODk1LCAxODg5OSwgMTg5MDMsIAotICAgIDE4OTA3LCAxODkxMSwgMTg5MTUsIDE4OTE5LCAxODkyMywgMTg5MjcsIDE4OTMxLCAxODkzNSwgMTg5MzksIDE4OTQzLCAKLSAgICAxODk0NywgMTg5NTEsIDE4OTU1LCAxODk1OSwgMTg5NjMsIDE4OTY3LCAxODk3MSwgMTg5NzUsIDE4OTc5LCAxODk4MywgCi0gICAgMTg5ODcsIDE4OTkxLCAxODk5NSwgMTg5OTksIDE5MDAzLCAxOTAwNywgMTkwMTEsIDE5MDE1LCAxOTAxOSwgMTkwMjMsIAotICAgIDE5MDI3LCAxOTAzMSwgMTkwMzUsIDE5MDM5LCAxOTA0MywgMTkwNDcsIDE5MDUxLCAxOTA1NSwgMTkwNTksIDE5MDYzLCAKLSAgICAxOTA2NywgMTkwNzEsIDE5MDc1LCAxOTA3OSwgMTkwODMsIDE5MDg3LCAxOTA5MSwgMTkwOTUsIDE5MDk5LCAxOTEwMywgCi0gICAgMTkxMDcsIDE5MTExLCAxOTExNSwgMTkxMTksIDE5MTIzLCAxOTEyNywgMTkxMzEsIDE5MTM1LCAxOTEzOSwgMTkxNDMsIAotICAgIDE5MTQ3LCAxOTE1MSwgMTkxNTUsIDE5MTU5LCAxOTE2MywgMTkxNjcsIDE5MTcxLCAxOTE3NSwgMTkxNzksIDE5MTgzLCAKLSAgICAxOTE4NywgMTkxOTEsIDE5MTk1LCAxOTE5OSwgMTkyMDMsIDE5MjA3LCAxOTIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTkyMTUsIAotICAgIDE5MjE4LCAxOTIyMiwgMTkyMjYsIDE5MjMwLCAxOTIzNCwgMTkyMzgsIDE5MjQyLCAxOTI0NiwgMTkyNTAsIDE5MjU0LCAKLSAgICAxOTI1OCwgMTkyNjIsIDE5MjY2LCAxOTI3MCwgMTkyNzQsIDE5Mjc4LCAxOTI4MiwgMTkyODYsIDE5MjkwLCAxOTI5NCwgCi0gICAgMTkyOTgsIDE5MzAyLCAxOTMwNiwgMTkzMTAsIDE5MzEzLCAxOTMxNywgMTkzMjEsIDE5MzI1LCAxOTMyOSwgMTkzMzMsIAotICAgIDE5MzM3LCAxOTM0MSwgMTkzNDUsIDE5MzQ5LCAxOTM1MywgMTkzNTcsIDE5MzYxLCAxOTM2NSwgMTkzNjksIDE5MzczLCAKLSAgICAxOTM3NiwgMTkzODAsIDE5Mzg0LCAxOTM4OCwgMTkzOTIsIDE5Mzk2LCAxOTQwMCwgMTk0MDQsIDE5NDA4LCAxOTQxMiwgCi0gICAgMTk0MTYsIDE5NDIwLCAxOTQyNCwgMTk0MjgsIDE5NDMyLCAxOTQzNiwgMTk0NDAsIDE5NDQ0LCAxOTQ0OCwgMTk0NTIsIAotICAgIDE5NDU2LCAxOTQ2MCwgMTk0NjQsIDE5NDY4LCAxOTQ3MiwgMTk0NzYsIDE5NDgwLCAxOTQ4NCwgMTk0ODgsIDE5NDkyLCAKLSAgICAxOTQ5NiwgMTk1MDAsIDAsIDE5NTA0LCAxOTUwOCwgMTk1MTIsIDE5NTE2LCAwLCAwLCAxOTUyMCwgMTk1MjQsIDE5NTI4LCAKLSAgICAxOTUzMiwgMTk1MzYsIDE5NTQwLCAxOTU0NCwgMCwgMTk1NDgsIDAsIDE5NTUyLCAxOTU1NiwgMTk1NjAsIDE5NTY0LCAwLCAKLSAgICAwLCAxOTU2OCwgMTk1NzIsIDE5NTc2LCAxOTU4MCwgMTk1ODQsIDE5NTg4LCAxOTU5MiwgMTk1OTYsIDE5NjAwLCAxOTYwNCwgCi0gICAgMTk2MDgsIDE5NjEyLCAxOTYxNiwgMTk2MjAsIDE5NjI0LCAxOTYyOCwgMTk2MzIsIDE5NjM2LCAxOTY0MCwgMTk2NDQsIAotICAgIDE5NjQ4LCAxOTY1MiwgMTk2NTYsIDE5NjU5LCAxOTY2MywgMTk2NjcsIDE5NjcxLCAxOTY3NSwgMTk2NzksIDE5NjgzLCAKLSAgICAxOTY4NywgMTk2OTEsIDE5Njk1LCAxOTY5OSwgMTk3MDMsIDE5NzA3LCAxOTcxMSwgMTk3MTUsIDE5NzE5LCAxOTcyMywgCi0gICAgMTk3MjcsIDAsIDE5NzMxLCAxOTczNSwgMTk3MzksIDE5NzQzLCAwLCAwLCAxOTc0NywgMTk3NTEsIDE5NzU1LCAxOTc1OSwgCi0gICAgMTk3NjMsIDE5NzY3LCAxOTc3MSwgMTk3NzUsIDE5Nzc5LCAxOTc4MywgMTk3ODcsIDE5NzkxLCAxOTc5NSwgMTk3OTksIAotICAgIDE5ODAzLCAxOTgwNywgMTk4MTEsIDE5ODE2LCAxOTgyMSwgMTk4MjYsIDE5ODMyLCAxOTgzOCwgMTk4NDMsIDE5ODQ4LCAKLSAgICAxOTg1NCwgMTk4NTcsIDE5ODYxLCAxOTg2NSwgMTk4NjksIDE5ODczLCAxOTg3NywgMTk4ODEsIDE5ODg1LCAwLCAxOTg4OSwgCi0gICAgMTk4OTMsIDE5ODk3LCAxOTkwMSwgMCwgMCwgMTk5MDUsIDE5OTA5LCAxOTkxMywgMTk5MTcsIDE5OTIxLCAxOTkyNSwgCi0gICAgMTk5MjksIDAsIDE5OTMzLCAwLCAxOTkzNywgMTk5NDEsIDE5OTQ1LCAxOTk0OSwgMCwgMCwgMTk5NTMsIDE5OTU3LCAKLSAgICAxOTk2MSwgMTk5NjUsIDE5OTY5LCAxOTk3MywgMTk5NzcsIDE5OTgxLCAxOTk4NSwgMTk5OTAsIDE5OTk1LCAyMDAwMCwgCi0gICAgMjAwMDYsIDIwMDEyLCAyMDAxNywgMCwgMjAwMjIsIDIwMDI2LCAyMDAzMCwgMjAwMzQsIDIwMDM4LCAyMDA0MiwgMjAwNDYsIAotICAgIDIwMDUwLCAyMDA1NCwgMjAwNTgsIDIwMDYyLCAyMDA2NiwgMjAwNzAsIDIwMDc0LCAyMDA3OCwgMjAwODIsIDIwMDg2LCAKLSAgICAyMDA4OSwgMjAwOTMsIDIwMDk3LCAyMDEwMSwgMjAxMDUsIDIwMTA5LCAyMDExMywgMjAxMTcsIDIwMTIxLCAyMDEyNSwgCi0gICAgMjAxMjksIDIwMTMzLCAyMDEzNywgMjAxNDEsIDIwMTQ1LCAyMDE0OSwgMjAxNTMsIDIwMTU3LCAyMDE2MSwgMjAxNjUsIAotICAgIDIwMTY5LCAyMDE3MywgMjAxNzcsIDIwMTgxLCAyMDE4NSwgMjAxODksIDIwMTkzLCAyMDE5NywgMjAyMDEsIDIwMjA1LCAKLSAgICAyMDIwOSwgMjAyMTMsIDIwMjE3LCAyMDIyMSwgMjAyMjUsIDIwMjI5LCAyMDIzMywgMjAyMzcsIDIwMjQxLCAyMDI0NSwgMCwgCi0gICAgMjAyNDksIDIwMjUzLCAyMDI1NywgMjAyNjEsIDAsIDAsIDIwMjY1LCAyMDI2OSwgMjAyNzMsIDIwMjc3LCAyMDI4MSwgCi0gICAgMjAyODUsIDIwMjg5LCAyMDI5MywgMjAyOTcsIDIwMzAxLCAyMDMwNSwgMjAzMDksIDIwMzEzLCAyMDMxNywgMjAzMjEsIAotICAgIDIwMzI1LCAyMDMyOSwgMjAzMzMsIDIwMzM3LCAyMDM0MSwgMjAzNDUsIDIwMzQ5LCAyMDM1MywgMjAzNTcsIDIwMzYxLCAKLSAgICAyMDM2NSwgMjAzNjksIDIwMzczLCAyMDM3NywgMjAzODEsIDIwMzg1LCAyMDM4OSwgMjAzOTMsIDIwMzk3LCAyMDQwMSwgCi0gICAgMjA0MDUsIDIwNDA5LCAyMDQxMywgMjA0MTcsIDIwNDIxLCAyMDQyNSwgMjA0MjksIDIwNDMzLCAyMDQzNywgMjA0NDEsIAotICAgIDIwNDQ1LCAyMDQ0OSwgMjA0NTMsIDIwNDU3LCAyMDQ2MSwgMjA0NjUsIDIwNDY5LCAyMDQ3MywgMjA0NzcsIDIwNDgxLCAKLSAgICAyMDQ4NSwgMjA0ODksIDIwNDkyLCAyMDQ5NiwgMjA1MDAsIDIwNTA0LCAyMDUwOCwgMjA1MTIsIDIwNTE2LCAyMDUyMCwgCi0gICAgMjA1MjQsIDIwNTI4LCAwLCAwLCAwLCAwLCAyMDUzMiwgMjA1MzcsIDIwNTQxLCAyMDU0NCwgMjA1NDksIDIwNTUyLCAKLSAgICAyMDU1NSwgMjA1NTgsIDIwNTYzLCAyMDU2NywgMjA1NzIsIDIwNTc1LCAyMDU3OCwgMjA1ODEsIDIwNTg0LCAyMDU4NywgCi0gICAgMjA1OTAsIDIwNTkzLCAyMDU5NiwgMjA1OTksIDIwNjAzLCAyMDYwNywgMjA2MTEsIDIwNjE1LCAyMDYxOSwgMjA2MjMsIAotICAgIDIwNjI3LCAyMDYzMSwgMjA2MzUsIDIwNjM5LCAwLCAwLCAwLCAyMDY0NSwgMjA2NTEsIDIwNjU1LCAyMDY1OSwgMjA2NjMsIAotICAgIDIwNjY5LCAyMDY3MywgMjA2NzcsIDIwNjgxLCAyMDY4NywgMjA2OTEsIDIwNjk1LCAyMDY5OSwgMjA3MDUsIDIwNzA5LCAKLSAgICAyMDcxMywgMjA3MTcsIDIwNzIzLCAyMDcyOSwgMjA3MzUsIDIwNzQzLCAyMDc0OSwgMjA3NTUsIDIwNzYxLCAyMDc2NywgCi0gICAgMjA3NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDIwNzc5LCAyMDc4MiwgMjA3ODUsIDIwNzg4LCAyMDc5MSwgMjA3OTQsIDIwNzk3LCAKLSAgICAyMDgwMSwgMjA4MDQsIDIwODA4LCAyMDgxMiwgMjA4MTYsIDIwODIwLCAyMDgyNCwgMjA4MjcsIDIwODMxLCAyMDgzNSwgCi0gICAgMjA4MzksIDIwODQzLCAyMDg0NywgMjA4NTEsIDIwODU1LCAyMDg1OSwgMjA4NjMsIDIwODY3LCAyMDg3MSwgMjA4NzQsIAotICAgIDIwODc4LCAyMDg4MiwgMjA4ODYsIDIwODkwLCAyMDg5NCwgMjA4OTgsIDIwOTAyLCAyMDkwNiwgMjA5MTAsIDIwOTE0LCAKLSAgICAyMDkxOCwgMjA5MjIsIDIwOTI2LCAyMDkzMCwgMjA5MzQsIDIwOTM4LCAyMDk0MiwgMjA5NDYsIDIwOTUwLCAyMDk1MywgCi0gICAgMjA5NTcsIDIwOTYxLCAyMDk2NSwgMjA5NjksIDIwOTczLCAyMDk3NywgMjA5ODEsIDIwOTg1LCAyMDk4OSwgMjA5OTMsIAotICAgIDIwOTk3LCAyMTAwMSwgMjEwMDUsIDIxMDA5LCAyMTAxMywgMjEwMTcsIDIxMDIxLCAyMTAyNSwgMjEwMjksIDIxMDMzLCAKLSAgICAyMTAzNywgMjEwNDEsIDIxMDQ1LCAyMTA0OSwgMjEwNTMsIDIxMDU3LCAyMTA2MSwgMjEwNjUsIDIxMDY5LCAyMTA3MywgCi0gICAgMjEwNzcsIDIxMDgxLCAyMTA4NSwgMjEwODgsIDIxMDkyLCAyMTA5NiwgMjExMDAsIDIxMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAyMTEwOCwgMjExMTEsIDIxMTE1LCAyMTExOCwgMjExMjIsIDIxMTI1LCAyMTEyOSwgMjExMzUsIAotICAgIDIxMTQwLCAyMTE0NCwgMjExNDcsIDIxMTUxLCAyMTE1NSwgMjExNjAsIDIxMTY0LCAyMTE2OSwgMjExNzMsIDIxMTc4LCAKLSAgICAyMTE4MiwgMjExODcsIDIxMTkxLCAyMTE5NiwgMjEyMDIsIDIxMjA2LCAyMTIxMSwgMjEyMTUsIDIxMjIwLCAyMTIyNiwgCi0gICAgMjEyMzAsIDIxMjM2LCAyMTI0MiwgMjEyNDYsIDIxMjUxLCAyMTI1OSwgMjEyNjcsIDIxMjc0LCAyMTI3OSwgMjEyODQsIAotICAgIDIxMjkzLCAyMTMwMCwgMjEzMDcsIDIxMzEyLCAyMTMxOCwgMjEzMjIsIDIxMzI2LCAyMTMzMCwgMjEzMzQsIDIxMzM4LCAKLSAgICAyMTM0MiwgMjEzNDYsIDIxMzUwLCAyMTM1NCwgMjEzNTgsIDIxMzY0LCAyMTM2OSwgMjEzNzQsIDIxMzc3LCAyMTM4MSwgCi0gICAgMjEzODUsIDIxMzkwLCAyMTM5NCwgMjEzOTksIDIxNDAzLCAyMTQwOCwgMjE0MTIsIDIxNDE3LCAyMTQyMSwgMjE0MjYsIAotICAgIDIxNDMwLCAyMTQzNSwgMjE0MzksIDIxNDQ0LCAyMTQ1MCwgMjE0NTQsIDIxNDU5LCAyMTQ2MywgMjE0NjcsIDIxNDcxLCAKLSAgICAyMTQ3NSwgMjE0NzksIDIxNDgyLCAyMTQ4NiwgMjE0OTIsIDIxNDk3LCAyMTUwMiwgMjE1MDYsIDIxNTEwLCAyMTUxNCwgCi0gICAgMjE1MTksIDIxNTIzLCAyMTUyOCwgMjE1MzIsIDIxNTM3LCAyMTU0MCwgMjE1NDQsIDIxNTQ4LCAyMTU1MywgMjE1NTcsIAotICAgIDIxNTYyLCAyMTU2NiwgMjE1NzEsIDIxNTc3LCAyMTU4MSwgMjE1ODUsIDIxNTg5LCAyMTU5MywgMjE1OTcsIDIxNjAxLCAKLSAgICAyMTYwNSwgMjE2MDksIDIxNjEzLCAyMTYxNywgMjE2MjEsIDIxNjI3LCAyMTYzMCwgMjE2MzQsIDIxNjM4LCAyMTY0MywgCi0gICAgMjE2NDcsIDIxNjUyLCAyMTY1NiwgMjE2NjEsIDIxNjY1LCAyMTY3MCwgMjE2NzQsIDIxNjc5LCAyMTY4MywgMjE2ODgsIAotICAgIDIxNjkyLCAyMTY5NywgMjE3MDMsIDIxNzA3LCAyMTcxMSwgMjE3MTcsIDIxNzIzLCAyMTcyOSwgMjE3MzUsIDIxNzM5LCAKLSAgICAyMTc0MywgMjE3NDcsIDIxNzUxLCAyMTc1NSwgMjE3NTksIDIxNzY1LCAyMTc2OSwgMjE3NzMsIDIxNzc3LCAyMTc4MiwgCi0gICAgMjE3ODYsIDIxNzkxLCAyMTc5NSwgMjE4MDAsIDIxODA0LCAyMTgwOSwgMjE4MTMsIDIxODE4LCAyMTgyMiwgMjE4MjcsIAotICAgIDIxODMxLCAyMTgzNiwgMjE4NDIsIDIxODQ2LCAyMTg1MiwgMjE4NTYsIDIxODYwLCAyMTg2NCwgMjE4NjgsIDIxODcyLCAKLSAgICAyMTg3NiwgMjE4ODIsIDIxODg1LCAyMTg4OSwgMjE4OTMsIDIxODk4LCAyMTkwMiwgMjE5MDcsIDIxOTExLCAyMTkxNiwgCi0gICAgMjE5MjAsIDIxOTI1LCAyMTkyOSwgMjE5MzQsIDIxOTM4LCAyMTk0MywgMjE5NDcsIDIxOTUyLCAyMTk1OCwgMjE5NjEsIAotICAgIDIxOTY1LCAyMTk2OSwgMjE5NzQsIDIxOTc5LCAyMTk4MywgMjE5ODcsIDIxOTkxLCAyMTk5NSwgMjE5OTksIDIyMDAzLCAKLSAgICAyMjAwOSwgMjIwMTMsIDIyMDE3LCAyMjAyMSwgMjIwMjYsIDIyMDMwLCAyMjAzNSwgMjIwMzksIDIyMDQ0LCAyMjA1MCwgCi0gICAgMjIwNTMsIDIyMDU4LCAyMjA2MiwgMjIwNjYsIDIyMDcwLCAyMjA3NCwgMjIwNzgsIDIyMDgyLCAyMjA4NiwgMjIwOTIsIAotICAgIDIyMDk2LCAyMjEwMCwgMjIxMDQsIDIyMTA5LCAyMjExMywgMjIxMTgsIDIyMTIyLCAyMjEyNywgMjIxMzEsIDIyMTM2LCAKLSAgICAyMjE0MCwgMjIxNDUsIDIyMTQ5LCAyMjE1NCwgMjIxNTgsIDIyMTYzLCAyMjE2NiwgMjIxNzAsIDIyMTc0LCAyMjE3OCwgCi0gICAgMjIxODIsIDIyMTg2LCAyMjE5MCwgMjIxOTQsIDIyMTk4LCAyMjIwNCwgMjIyMDgsIDIyMjEyLCAyMjIxNiwgMjIyMjEsIAotICAgIDIyMjI1LCAyMjIzMCwgMjIyMzQsIDIyMjM5LCAyMjI0MywgMjIyNDgsIDIyMjUyLCAyMjI1NywgMjIyNjEsIDIyMjY2LCAKLSAgICAyMjI3MCwgMjIyNzUsIDIyMjgxLCAyMjI4NCwgMjIyODksIDIyMjkzLCAyMjI5OCwgMjIzMDQsIDIyMzEwLCAyMjMxNiwgCi0gICAgMjIzMjIsIDIyMzI4LCAyMjMzNCwgMjIzNDAsIDIyMzQ0LCAyMjM0OCwgMjIzNTIsIDIyMzU2LCAyMjM2MCwgMjIzNjQsIAotICAgIDIyMzY4LCAyMjM3MiwgMjIzNzcsIDIyMzgxLCAyMjM4NiwgMjIzOTAsIDIyMzk1LCAyMjM5OSwgMjI0MDQsIDIyNDA4LCAKLSAgICAyMjQxMywgMjI0MTcsIDIyNDIyLCAyMjQyNiwgMjI0MzEsIDIyNDM1LCAyMjQzOSwgMjI0NDMsIDIyNDQ3LCAyMjQ1MSwgCi0gICAgMjI0NTUsIDIyNDU5LCAyMjQ2NSwgMjI0NjgsIDIyNDcyLCAyMjQ3NiwgMjI0ODEsIDIyNDg1LCAyMjQ5MCwgMjI0OTQsIAotICAgIDIyNDk5LCAyMjUwMywgMjI1MDgsIDIyNTEyLCAyMjUxNywgMjI1MjEsIDIyNTI2LCAyMjUzMCwgMjI1MzUsIDIyNTQxLCAKLSAgICAyMjU0NSwgMjI1NTEsIDIyNTU2LCAyMjU2MiwgMjI1NjYsIDIyNTcyLCAyMjU3NywgMjI1ODEsIDIyNTg1LCAyMjU4OSwgCi0gICAgMjI1OTMsIDIyNTk3LCAyMjYwMiwgMjI2MDUsIDIyNjA5LCAyMjYxNCwgMjI2MTgsIDIyNjIzLCAyMjYyNiwgMjI2MzAsIAotICAgIDIyNjM0LCAyMjYzOCwgMjI2NDIsIDIyNjQ2LCAyMjY1MCwgMjI2NTQsIDIyNjU4LCAyMjY2MiwgMjI2NjYsIDIyNjcwLCAKLSAgICAyMjY3NSwgMjI2NzksIDIyNjgzLCAyMjY4OSwgMjI2OTMsIDIyNjk5LCAyMjcwMywgMjI3MDksIDIyNzEzLCAyMjcxNywgCi0gICAgMjI3MjEsIDIyNzI1LCAyMjcyOSwgMjI3MzQsIDIyNzM4LCAyMjc0MiwgMjI3NDYsIDIyNzUwLCAyMjc1NCwgMjI3NTgsIAotICAgIDIyNzYyLCAyMjc2NiwgMjI3NzAsIDIyNzc0LCAyMjc4MCwgMjI3ODYsIDIyNzkyLCAyMjc5OCwgMjI4MDQsIDIyODA5LCAKLSAgICAyMjgxNSwgMjI4MjAsIDIyODI1LCAyMjgyOSwgMjI4MzMsIDIyODM3LCAyMjg0MSwgMjI4NDUsIDIyODQ5LCAyMjg1MywgCi0gICAgMjI4NTcsIDIyODYxLCAyMjg2NSwgMjI4NjksIDIyODczLCAyMjg3NywgMjI4ODIsIDIyODg3LCAyMjg5MiwgMjI4OTYsIAotICAgIDIyOTAwLCAyMjkwNCwgMjI5MDgsIDIyOTEyLCAyMjkxNiwgMjI5MjAsIDIyOTI0LCAyMjkyOCwgMjI5MzIsIDIyOTM4LCAKLSAgICAyMjk0NCwgMjI5NTAsIDIyOTU2LCAyMjk2MiwgMjI5NjgsIDIyOTc0LCAyMjk4MCwgMjI5ODYsIDIyOTkwLCAyMjk5NCwgCi0gICAgMjI5OTgsIDIzMDAyLCAyMzAwNiwgMjMwMTAsIDIzMDE0LCAyMzAyMCwgMjMwMjYsIDIzMDMyLCAyMzAzOCwgMjMwNDQsIAotICAgIDIzMDUwLCAyMzA1NiwgMjMwNjIsIDIzMDY4LCAyMzA3MywgMjMwNzgsIDIzMDgzLCAyMzA4OCwgMjMwOTQsIDIzMTAwLCAKLSAgICAyMzEwNiwgMjMxMTIsIDIzMTE4LCAyMzEyNCwgMjMxMzAsIDIzMTM2LCAyMzE0MiwgMjMxNDgsIDIzMTU0LCAyMzE1OSwgCi0gICAgMjMxNjUsIDIzMTcxLCAyMzE3NywgMjMxODIsIDIzMTg3LCAyMzE5MiwgMjMxOTcsIDIzMjAyLCAyMzIwNywgMjMyMTIsIAotICAgIDIzMjE3LCAyMzIyMiwgMjMyMjcsIDIzMjMyLCAyMzIzNywgMjMyNDEsIDIzMjQ2LCAyMzI1MSwgMjMyNTYsIDIzMjYxLCAKLSAgICAyMzI2NiwgMjMyNzEsIDIzMjc2LCAyMzI4MSwgMjMyODYsIDIzMjkxLCAyMzI5NiwgMjMzMDEsIDIzMzA2LCAyMzMxMSwgCi0gICAgMjMzMTYsIDIzMzIxLCAyMzMyNiwgMjMzMzEsIDIzMzM2LCAyMzM0MSwgMjMzNDYsIDIzMzUxLCAyMzM1NiwgMjMzNjEsIAotICAgIDIzMzY2LCAyMzM3MSwgMjMzNzYsIDIzMzgxLCAyMzM4NiwgMjMzOTAsIDIzMzk1LCAyMzQwMCwgMjM0MDUsIDIzNDEwLCAKLSAgICAyMzQxNSwgMjM0MjAsIDIzNDI1LCAyMzQzMCwgMjM0MzUsIDIzNDQwLCAyMzQ0NSwgMjM0NTAsIDIzNDU1LCAyMzQ2MCwgCi0gICAgMjM0NjUsIDIzNDcwLCAyMzQ3NSwgMjM0ODAsIDIzNDg1LCAyMzQ5MCwgMjM0OTUsIDIzNTAwLCAyMzUwNSwgMjM1MTAsIAotICAgIDIzNTE1LCAyMzUyMCwgMjM1MjUsIDIzNTMwLCAyMzUzNSwgMjM1NDAsIDIzNTQ1LCAyMzU0OSwgMjM1NTQsIDIzNTU5LCAKLSAgICAyMzU2NCwgMjM1NjksIDIzNTc0LCAyMzU3OCwgMjM1ODMsIDIzNTg5LCAyMzU5NCwgMjM1OTksIDIzNjA0LCAyMzYwOSwgCi0gICAgMjM2MTUsIDIzNjIwLCAyMzYyNSwgMjM2MzAsIDIzNjM1LCAyMzY0MCwgMjM2NDUsIDIzNjUwLCAyMzY1NSwgMjM2NjAsIAotICAgIDIzNjY1LCAyMzY3MCwgMjM2NzUsIDIzNjgwLCAyMzY4NSwgMjM2OTAsIDIzNjk1LCAyMzcwMCwgMjM3MDUsIDIzNzEwLCAKLSAgICAyMzcxNSwgMjM3MjAsIDIzNzI1LCAyMzczMCwgMjM3MzUsIDIzNzQwLCAyMzc0NSwgMjM3NTAsIDIzNzU1LCAyMzc2MCwgCi0gICAgMjM3NjUsIDIzNzcwLCAyMzc3NSwgMjM3ODAsIDIzNzg1LCAyMzc5MCwgMjM3OTUsIDIzODAwLCAyMzgwNSwgMjM4MTAsIAotICAgIDIzODE1LCAyMzgyMCwgMjM4MjUsIDIzODMwLCAyMzgzNSwgMjM4NDEsIDIzODQ2LCAyMzg1MSwgMjM4NTYsIDIzODYxLCAKLSAgICAyMzg2NiwgMjM4NzEsIDIzODc2LCAyMzg4MSwgMjM4ODYsIDIzODkxLCAyMzg5NiwgMjM5MDEsIDIzOTA2LCAyMzkxMSwgCi0gICAgMjM5MTYsIDIzOTIxLCAyMzkyNiwgMjM5MzEsIDIzOTM2LCAyMzk0MSwgMjM5NDYsIDIzOTUxLCAyMzk1NiwgMjM5NjEsIAotICAgIDIzOTY2LCAyMzk3MSwgMjM5NzYsIDIzOTgxLCAyMzk4NiwgMjM5OTEsIDIzOTk2LCAyNDAwMSwgMjQwMDYsIDI0MDExLCAKLSAgICAyNDAxNiwgMjQwMjEsIDI0MDI2LCAyNDAzMSwgMjQwMzcsIDI0MDQxLCAyNDA0NSwgMjQwNDksIDI0MDUzLCAyNDA1NywgCi0gICAgMjQwNjEsIDI0MDY1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDA2OSwgMjQwNzQsIDI0MDc5LCAyNDA4NCwgCi0gICAgMjQwODksIDI0MDk0LCAyNDA5OSwgMjQxMDQsIDI0MTA5LCAyNDExNCwgMjQxMTksIDI0MTI0LCAyNDEyOSwgMjQxMzQsIAotICAgIDI0MTM5LCAyNDE0NCwgMjQxNDksIDI0MTU0LCAyNDE1OSwgMjQxNjQsIDI0MTY5LCAyNDE3NCwgMjQxNzksIDI0MTg0LCAKLSAgICAyNDE4OSwgMjQxOTQsIDI0MTk5LCAyNDIwNCwgMjQyMDksIDAsIDAsIDAsIDI0MjE1LCAyNDIyNSwgMjQyMjgsIDI0MjM1LCAKLSAgICAyNDIzOSwgMjQyNDMsIDI0MjQ3LCAyNDI1NSwgMjQyNTksIDI0MjY0LCAyNDI2OSwgMjQyNzQsIDI0Mjc4LCAyNDI4MywgCi0gICAgMjQyODgsIDI0MjkxLCAyNDI5NSwgMjQyOTksIDI0MzA4LCAyNDMxMiwgMjQzMTYsIDI0MzIyLCAyNDMyNSwgMjQzMjksIAotICAgIDI0MzM2LCAyNDM0MCwgMjQzNDgsIDI0MzUzLCAyNDM1OCwgMjQzNjMsIDI0MzY4LCAyNDM3NywgMjQzODIsIDI0Mzg2LCAKLSAgICAyNDM5NSwgMjQzOTgsIDI0NDA0LCAyNDQwOCwgMjQ0MTQsIDI0NDE5LCAyNDQyNSwgMjQ0MzMsIDI0NDM5LCAyNDQ0NCwgCi0gICAgMjQ0NTEsIDI0NDU2LCAyNDQ2MCwgMjQ0NjQsIDI0NDc0LCAyNDQ4MCwgMjQ0ODQsIDI0NDk0LCAyNDUwMCwgMjQ1MDQsIAotICAgIDI0NTA4LCAyNDUxNSwgMjQ1MjIsIDI0NTI3LCAyNDUzMiwgMjQ1NDEsIDI0NTQ1LCAyNDU0OSwgMjQ1NTMsIDI0NTYxLCAKLSAgICAyNDU2OCwgMjQ1NzIsIDI0NTc2LCAyNDU4MCwgMjQ1ODQsIDI0NTg4LCAyNDU5MiwgMjQ1OTYsIDI0NjAwLCAyNDYwNCwgCi0gICAgMjQ2MDgsIDI0NjEyLCAyNDYxNywgMjQ2MjIsIDI0NjI3LCAyNDYzMSwgMjQ2MzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NjM5LCAyNDY0MywgMjQ2NDcsIDI0NjUxLCAyNDY1NSwgMjQ2NjAsIDI0NjY1LCAKLSAgICAyNDY3MCwgMjQ2NzUsIDI0NjgwLCAyNDY4NCwgMjQ2ODksIDI0NjkzLCAwLCAyNDY5NywgMjQ3MDIsIDI0NzA3LCAyNDcxMiwgCi0gICAgMjQ3MTYsIDI0NzIxLCAyNDcyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ3MzEsIDI0NzM1LCAKLSAgICAyNDczOSwgMjQ3NDMsIDI0NzQ3LCAyNDc1MiwgMjQ3NTcsIDI0NzYyLCAyNDc2NywgMjQ3NzIsIDI0Nzc2LCAyNDc4MSwgCi0gICAgMjQ3ODUsIDI0Nzg5LCAyNDc5MywgMjQ3OTgsIDI0ODAzLCAyNDgwOCwgMjQ4MTIsIDI0ODE3LCAyNDgyMiwgMjQ4MjcsIAotICAgIDI0ODMzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDgzOCwgMjQ4NDIsIDI0ODQ2LCAyNDg1MCwgMjQ4NTQsIAotICAgIDI0ODU5LCAyNDg2NCwgMjQ4NjksIDI0ODc0LCAyNDg3OSwgMjQ4ODMsIDI0ODg4LCAyNDg5MiwgMjQ4OTYsIDI0OTAwLCAKLSAgICAyNDkwNSwgMjQ5MTAsIDI0OTE1LCAyNDkxOSwgMjQ5MjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0OTI5LCAyNDkzMywgMjQ5MzcsIDI0OTQxLCAyNDk0NSwgMjQ5NTAsIDI0OTU1LCAyNDk2MCwgMjQ5NjUsIDI0OTcwLCAKLSAgICAyNDk3NCwgMjQ5NzksIDI0OTgzLCAwLCAyNDk4NywgMjQ5OTIsIDI0OTk3LCAwLCAyNTAwMiwgMjUwMDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1MDEyLCAyNTAxNSwgMjUwMTksIDI1MDIzLCAyNTAyNywgMjUwMzEsIDI1MDM1LCAKLSAgICAyNTAzOSwgMjUwNDMsIDI1MDQ3LCAyNTA1MSwgMjUwNTUsIDI1MDU5LCAyNTA2MywgMjUwNjcsIDI1MDcxLCAyNTA3NSwgCi0gICAgMjUwNzksIDI1MDgyLCAyNTA4NiwgMjUwOTAsIDI1MDk0LCAyNTA5OCwgMjUxMDIsIDI1MTA2LCAyNTExMCwgMjUxMTQsIAotICAgIDI1MTE4LCAyNTEyMiwgMjUxMjYsIDI1MTMwLCAyNTEzNCwgMjUxMzgsIDI1MTQxLCAyNTE0NSwgMjUxNDksIDI1MTU1LCAKLSAgICAyNTE2MSwgMjUxNjcsIDI1MTczLCAyNTE3OSwgMjUxODUsIDI1MTkxLCAyNTE5NywgMjUyMDMsIDI1MjA5LCAyNTIxNSwgCi0gICAgMjUyMjEsIDI1MjI3LCAyNTIzMywgMjUyNDIsIDI1MjUxLCAyNTI1NywgMjUyNjMsIDI1MjY5LCAyNTI3NCwgMjUyNzgsIAotICAgIDI1MjgzLCAyNTI4OCwgMjUyOTMsIDI1Mjk3LCAyNTMwMiwgMjUzMDcsIDI1MzEyLCAyNTMxNiwgMjUzMjEsIDI1MzI1LCAKLSAgICAyNTMzMCwgMjUzMzUsIDI1MzQwLCAyNTM0NSwgMjUzNDksIDI1MzUzLCAyNTM1NywgMjUzNjEsIDI1MzY1LCAyNTM2OSwgCi0gICAgMjUzNzMsIDI1Mzc3LCAyNTM4MSwgMjUzODUsIDI1MzkxLCAyNTM5NSwgMjUzOTksIDI1NDAzLCAyNTQwNywgMjU0MTEsIAotICAgIDI1NDE5LCAyNTQyNSwgMjU0MjksIDI1NDM1LCAyNTQzOSwgMjU0NDUsIDI1NDQ5LCAwLCAwLCAyNTQ1MywgMjU0NTcsIAotICAgIDI1NDYwLCAyNTQ2MywgMjU0NjYsIDI1NDY5LCAyNTQ3MiwgMjU0NzUsIDI1NDc4LCAyNTQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjU0ODQsIDI1NDkyLCAyNTUwMCwgMjU1MDgsIDI1NTE2LCAyNTUyNCwgMjU1MzIsIDI1NTQwLCAyNTU0OCwgMjU1NTYsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI1NTY0LCAyNTU2NywgMjU1NzAsIDI1NTczLCAyNTU3OCwgMjU1ODEsIDI1NTg2LCAyNTU5MywgCi0gICAgMjU2MDEsIDI1NjA2LCAyNTYxMywgMjU2MTYsIDI1NjIzLCAyNTYzMCwgMjU2MzcsIDAsIDI1NjQxLCAyNTY0NSwgMjU2NDgsIAotICAgIDI1NjUxLCAyNTY1NCwgMjU2NTcsIDI1NjYwLCAyNTY2MywgMjU2NjYsIDI1NjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNTY3MiwgCi0gICAgMjU2NzUsIDI1Njc4LCAyNTY4MSwgMjU2ODQsIDI1Njg3LCAyNTY5MSwgMjU2OTUsIDI1Njk5LCAyNTcwMywgMjU3MDcsIAotICAgIDI1NzExLCAyNTcxNCwgMjU3MTgsIDI1NzIyLCAyNTcyNSwgMjU3MjksIDI1NzMzLCAyNTczNywgMjU3NDEsIDI1NzQ1LCAKLSAgICAyNTc0OSwgMjU3NTMsIDI1NzU2LCAyNTc1OSwgMjU3NjMsIDI1NzY3LCAyNTc3MCwgMjU3NzQsIDI1Nzc4LCAyNTc4MiwgCi0gICAgMjU3ODYsIDI1NzkwLCAyNTc5NCwgMjU3OTgsIDI1ODAyLCAyNTgwOSwgMjU4MTQsIDI1ODE5LCAyNTgyNCwgMjU4MjksIAotICAgIDI1ODM1LCAyNTg0MSwgMjU4NDcsIDI1ODUzLCAyNTg1OCwgMjU4NjQsIDI1ODcwLCAyNTg3NSwgMjU4ODEsIDI1ODg3LCAKLSAgICAyNTg5MywgMjU4OTksIDI1OTA1LCAyNTkxMCwgMjU5MTYsIDI1OTIxLCAyNTkyNywgMjU5MzMsIDI1OTM5LCAyNTk0NSwgCi0gICAgMjU5NTEsIDI1OTU2LCAyNTk2MSwgMjU5NjcsIDI1OTczLCAyNTk3OCwgMjU5ODQsIDI1OTg5LCAyNTk5NSwgMjYwMDAsIAotICAgIDI2MDA1LCAyNjAxMSwgMjYwMTcsIDI2MDIzLCAyNjAyOSwgMjYwMzUsIDI2MDQxLCAyNjA0NywgMjYwNTMsIDI2MDU5LCAKLSAgICAyNjA2NSwgMjYwNzEsIDI2MDc3LCAyNjA4MiwgMjYwODcsIDI2MDkyLCAyNjA5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMjYxMDQsIDI2MTEzLCAyNjEyMiwgMjYxMzAsIDI2MTM4LCAyNjE0OCwgMjYxNTYsIDI2MTY1LCAyNjE3MiwgMjYxNzksIAotICAgIDI2MTg2LCAyNjE5NCwgMjYyMDIsIDI2MjEwLCAyNjIxOCwgMjYyMjYsIDI2MjM0LCAyNjI0MiwgMjYyNTAsIDI2MjU3LCAKLSAgICAyNjI2NSwgMjYyNzMsIDI2MjgxLCAyNjI4OSwgMjYyOTcsIDI2MzA3LCAyNjMxNywgMjYzMjcsIDI2MzM3LCAyNjM0NywgCi0gICAgMjYzNTcsIDI2MzY3LCAyNjM3NywgMjYzODcsIDI2Mzk3LCAyNjQwNywgMjY0MTcsIDI2NDI3LCAyNjQzNywgMjY0NDUsIAotICAgIDI2NDUzLCAyNjQ2MywgMjY0NzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDE2NzMyLCAxNjczNiwgMTY3NDcsIDE2NzYyLCAxNjc3NywgMTY3ODcsIDE2Nzk4LCAxNjgxMSwgCisgICAgMTY4MjIsIDE2ODI4LCAxNjgzNiwgMTY4NDYsIDE2ODUyLCAxNjg2MCwgMTY4NjQsIDE2ODcwLCAxNjg3NiwgMTY4ODQsIAorICAgIDE2ODk0LCAxNjkwMiwgMTY5MTUsIDE2OTIxLCAxNjkyOSwgMTY5MzcsIDE2OTQ5LCAxNjk1NiwgMTY5NjQsIDE2OTcyLCAKKyAgICAxNjk4MCwgMTY5ODgsIDE2OTk2LCAxNzAwNCwgMTcwMTQsIDE3MDE4LCAxNzAyMSwgMTcwMjQsIDE3MDI3LCAxNzAzMCwgCisgICAgMTcwMzMsIDE3MDM2LCAxNzAzOSwgMTcwNDIsIDE3MDQ1LCAxNzA0OSwgMTcwNTMsIDE3MDU3LCAxNzA2MSwgMTcwNjUsIAorICAgIDE3MDY5LCAxNzA3MywgMTcwNzcsIDE3MDgxLCAxNzA4NiwgMTcwOTIsIDE3MTAyLCAxNzExNiwgMTcxMjYsIDE3MTMyLCAKKyAgICAxNzEzOCwgMTcxNDYsIDE3MTU0LCAxNzE2MiwgMTcxNzAsIDE3MTc2LCAxNzE4MiwgMTcxODUsIDE3MTg5LCAxNzE5MywgCisgICAgMTcxOTcsIDE3MjAxLCAxNzIwNSwgMTcyMDksIDAsIDE3MjEzLCAxNzIxNywgMTcyMjEsIDE3MjI1LCAxNzIyOSwgMTcyMzMsIAorICAgIDE3MjM3LCAxNzI0MSwgMTcyNDUsIDE3MjQ5LCAxNzI1MywgMTcyNTYsIDE3MjU5LCAxNzI2MywgMTcyNjcsIDE3MjcxLCAKKyAgICAxNzI3NCwgMTcyNzgsIDE3MjgyLCAxNzI4NiwgMTcyOTAsIDE3Mjk0LCAxNzI5OCwgMTczMDIsIDE3MzA2LCAxNzMwOSwgCisgICAgMTczMTIsIDE3MzE2LCAxNzMyMCwgMTczMjQsIDE3MzI4LCAxNzMzMSwgMTczMzQsIDE3MzM4LCAxNzM0MywgMTczNDcsIDAsIAorICAgIDAsIDAsIDAsIDE3MzUxLCAxNzM1NiwgMTczNjAsIDE3MzY1LCAxNzM2OSwgMTczNzQsIDE3Mzc5LCAxNzM4NSwgMTczOTAsIAorICAgIDE3Mzk2LCAxNzQwMCwgMTc0MDUsIDE3NDA5LCAxNzQxNCwgMTc0MjQsIDE3NDMwLCAxNzQzNiwgMTc0NDMsIDE3NDUzLCAKKyAgICAxNzQ1OSwgMTc0NjMsIDE3NDY3LCAxNzQ3MywgMTc0NzksIDE3NDg3LCAxNzQ5MywgMTc1MDEsIDE3NTA5LCAxNzUxNywgCisgICAgMTc1MjcsIDE3NTM1LCAxNzU0NSwgMTc1NTAsIDE3NTU2LCAxNzU2MiwgMTc1NjgsIDE3NTc0LCAxNzU4MCwgMTc1ODYsIDAsIAorICAgIDE3NTkyLCAxNzU5OCwgMTc2MDQsIDE3NjEwLCAxNzYxNiwgMTc2MjIsIDE3NjI4LCAxNzYzNCwgMTc2NDAsIDE3NjQ2LCAKKyAgICAxNzY1MiwgMTc2NTcsIDE3NjYyLCAxNzY2OCwgMTc2NzQsIDE3NjgwLCAxNzY4NSwgMTc2OTEsIDE3Njk3LCAxNzcwMywgCisgICAgMTc3MDksIDE3NzE1LCAxNzcyMSwgMTc3MjcsIDE3NzMzLCAxNzczOCwgMTc3NDMsIDE3NzQ5LCAxNzc1NSwgMTc3NjEsIAorICAgIDE3NzY3LCAxNzc3MiwgMTc3NzcsIDE3NzgzLCAxNzc5MSwgMTc3OTgsIDAsIDE3ODA1LCAxNzgxMiwgMTc4MjUsIDE3ODMyLCAKKyAgICAxNzgzOSwgMTc4NDcsIDE3ODU1LCAxNzg2MSwgMTc4NjcsIDE3ODczLCAxNzg4MywgMTc4ODgsIDE3ODk0LCAxNzkwNCwgCisgICAgMTc5MTQsIDAsIDE3OTI0LCAxNzkzNCwgMTc5NDIsIDE3OTU0LCAxNzk2NiwgMTc5NzIsIDE3OTg2LCAxODAwMSwgMTgwMDYsIAorICAgIDE4MDExLCAxODAxOSwgMTgwMjcsIDE4MDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODA0MywgCisgICAgMTgwNDYsIDE4MDUwLCAxODA1NCwgMTgwNTgsIDE4MDYyLCAxODA2NiwgMTgwNzAsIDE4MDc0LCAxODA3OCwgMTgwODIsIAorICAgIDE4MDg2LCAxODA5MCwgMTgwOTQsIDE4MDk4LCAxODEwMiwgMTgxMDYsIDE4MTEwLCAxODExNCwgMTgxMTgsIDE4MTIyLCAKKyAgICAxODEyNSwgMTgxMjgsIDE4MTMyLCAxODEzNiwgMTgxNDAsIDE4MTQzLCAxODE0NiwgMTgxNDksIDE4MTUzLCAxODE1NywgCisgICAgMTgxNjEsIDE4MTY0LCAxODE2OCwgMTgxNzEsIDE4MTc2LCAxODE3OSwgMTgxODMsIDE4MTg2LCAxODE5MCwgMTgxOTMsIAorICAgIDE4MTk4LCAxODIwMSwgMTgyMDUsIDE4MjEyLCAxODIxNywgMTgyMjEsIDE4MjI2LCAxODIzMCwgMTgyMzUsIDE4MjM5LCAKKyAgICAxODI0NCwgMTgyNTEsIDE4MjU3LCAxODI2MiwgMTgyNjYsIDE4MjcwLCAxODI3NCwgMTgyNzgsIDE4MjgyLCAxODI4OCwgCisgICAgMTgyOTQsIDE4MzAxLCAxODMwNywgMTgzMTMsIDE4MzE3LCAxODMyMCwgMTgzMjMsIDE4MzI2LCAxODMyOSwgMTgzMzIsIAorICAgIDE4MzM1LCAxODMzOCwgMTgzNDEsIDE4MzQ0LCAxODM1MCwgMTgzNTQsIDE4MzU4LCAxODM2MiwgMTgzNjYsIDE4MzcwLCAKKyAgICAxODM3NCwgMTgzNzgsIDE4MzgyLCAxODM4NywgMTgzOTEsIDE4Mzk2LCAxODQwMSwgMTg0MDcsIDE4NDEyLCAxODQxOCwgCisgICAgMTg0MjQsIDE4NDMwLCAxODQzNiwgMTg0NDIsIDE4NDUwLCAxODQ1OCwgMTg0NjcsIDE4NDc1LCAxODQ4NCwgMTg0OTMsIAorICAgIDE4NTA0LCAxODUxNCwgMTg1MjQsIDE4NTM1LCAxODU0NiwgMTg1NTYsIDE4NTY2LCAxODU3NiwgMTg1ODYsIDE4NTk2LCAKKyAgICAxODYwNiwgMTg2MTYsIDE4NjI2LCAxODYzNCwgMTg2NDEsIDE4NjQ3LCAxODY1NCwgMTg2NTksIDE4NjY1LCAxODY3MSwgCisgICAgMTg2NzcsIDE4NjgzLCAxODY4OSwgMTg2OTUsIDE4NzAwLCAxODcwNiwgMTg3MTIsIDE4NzE4LCAxODcyNCwgMTg3MjksIAorICAgIDE4NzM4LCAxODc0NSwgMTg3NTEsIDE4NzU4LCAxODc2NiwgMTg3NzIsIDE4Nzc4LCAxODc4NCwgMTg3OTAsIDE4Nzk4LCAKKyAgICAxODgwNiwgMTg4MTYsIDE4ODI0LCAxODgzMiwgMTg4MzgsIDE4ODQzLCAxODg0OCwgMTg4NTMsIDE4ODU4LCAxODg2MywgCisgICAgMTg4NjgsIDE4ODczLCAxODg3OCwgMTg4ODMsIDE4ODg5LCAxODg5NSwgMTg5MDEsIDE4OTA4LCAxODkxMywgMTg5MTksIAorICAgIDE4OTI0LCAxODkyOSwgMTg5MzQsIDE4OTM5LCAxODk0NCwgMTg5NDksIDE4OTU0LCAxODk1OSwgMTg5NjQsIDE4OTY5LCAKKyAgICAxODk3NCwgMTg5NzksIDE4OTg0LCAxODk4OSwgMTg5OTQsIDE4OTk5LCAxOTAwNCwgMTkwMDksIDE5MDE0LCAxOTAxOSwgCisgICAgMTkwMjQsIDE5MDI5LCAxOTAzNCwgMTkwMzksIDE5MDQ0LCAxOTA0OSwgMTkwNTQsIDE5MDU5LCAxOTA2NCwgMTkwNjksIAorICAgIDE5MDc0LCAxOTA3OSwgMTkwODQsIDE5MDg5LCAxOTA5NCwgMTkwOTksIDE5MTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxOTEwOSwgMTkxMTMsIDE5MTE3LCAxOTEyMSwgMTkxMjUsIDE5MTI5LCAxOTEzMywgMTkxMzcsIDE5MTQxLCAKKyAgICAxOTE0NSwgMTkxNDksIDE5MTUzLCAxOTE1NywgMTkxNjEsIDE5MTY1LCAxOTE2OSwgMTkxNzMsIDE5MTc3LCAxOTE4MSwgCisgICAgMTkxODUsIDE5MTg5LCAxOTE5MywgMTkxOTcsIDE5MjAxLCAxOTIwNSwgMTkyMDksIDE5MjEzLCAxOTIxNywgMTkyMjEsIAorICAgIDE5MjI1LCAxOTIyOSwgMTkyMzMsIDE5MjM3LCAxOTI0MSwgMTkyNDUsIDE5MjQ5LCAxOTI1MywgMTkyNTcsIDE5MjYxLCAKKyAgICAxOTI2NSwgMTkyNjksIDE5MjczLCAxOTI3OSwgMTkyODMsIDE5Mjg4LCAwLCAwLCAwLCAxOTI5MywgMTkyOTcsIDE5MzAxLCAKKyAgICAxOTMwNSwgMTkzMDksIDE5MzEzLCAxOTMxNywgMTkzMjEsIDE5MzI1LCAxOTMyOSwgMTkzMzMsIDE5MzM3LCAxOTM0MSwgCisgICAgMTkzNDUsIDE5MzQ5LCAxOTM1MywgMTkzNTcsIDE5MzYxLCAxOTM2NSwgMTkzNjksIDE5MzczLCAxOTM3NywgMTkzODEsIAorICAgIDE5Mzg1LCAxOTM4OSwgMTkzOTMsIDE5Mzk3LCAxOTQwMSwgMTk0MDUsIDE5NDA5LCAxOTQxMywgMTk0MTcsIDE5NDIxLCAKKyAgICAxOTQyNSwgMTk0MjksIDE5NDMzLCAxOTQzNywgMTk0NDEsIDE5NDQ1LCAxOTQ0OSwgMTk0NTMsIDE5NDU3LCAxOTQ2MSwgCisgICAgMTk0NjUsIDE5NDY5LCAxOTQ3MywgMTk0NzcsIDE5NDgxLCAxOTQ4NSwgMTk0ODksIDE5NDkzLCAxOTQ5NywgMTk1MDEsIAorICAgIDE5NTA1LCAxOTUwOSwgMTk1MTMsIDE5NTE3LCAxOTUyMSwgMTk1MjUsIDE5NTI5LCAxOTUzMywgMTk1MzcsIDE5NTQxLCAKKyAgICAxOTU0NSwgMTk1NDksIDE5NTUzLCAxOTU1NywgMTk1NjEsIDE5NTY1LCAxOTU2OSwgMTk1NzMsIDE5NTc3LCAxOTU4MSwgCisgICAgMTk1ODUsIDE5NTg5LCAxOTU5MywgMTk1OTcsIDE5NjAxLCAxOTYwNSwgMTk2MDksIDE5NjEzLCAxOTYxNywgMTk2MjEsIAorICAgIDE5NjI1LCAxOTYyOSwgMTk2MzMsIDE5NjM3LCAxOTY0MSwgMTk2NDUsIDE5NjQ5LCAxOTY1MywgMTk2NTcsIDE5NjYxLCAKKyAgICAxOTY2NSwgMTk2NjksIDE5NjczLCAxOTY3NywgMTk2ODEsIDE5Njg0LCAxOTY4OCwgMTk2OTEsIDE5Njk1LCAxOTY5OSwgCisgICAgMTk3MDIsIDE5NzA2LCAxOTcxMCwgMTk3MTMsIDE5NzE3LCAxOTcyMSwgMTk3MjUsIDE5NzI5LCAxOTczMiwgMTk3MzYsIAorICAgIDE5NzQwLCAxOTc0NCwgMTk3NDgsIDE5NzUyLCAxOTc1NiwgMTk3NTksIDE5NzYzLCAxOTc2NywgMTk3NzEsIDE5Nzc1LCAKKyAgICAxOTc3OSwgMTk3ODMsIDE5Nzg3LCAxOTc5MSwgMTk3OTUsIDE5Nzk5LCAxOTgwMywgMTk4MDcsIDE5ODExLCAxOTgxNSwgCisgICAgMTk4MTksIDE5ODIzLCAxOTgyNywgMTk4MzEsIDE5ODM1LCAxOTgzOSwgMTk4NDMsIDE5ODQ3LCAxOTg1MSwgMTk4NTUsIAorICAgIDE5ODU5LCAxOTg2MywgMTk4NjcsIDE5ODcxLCAxOTg3NSwgMTk4NzksIDE5ODgzLCAxOTg4NywgMTk4OTEsIDE5ODk1LCAKKyAgICAxOTg5OSwgMTk5MDMsIDE5OTA3LCAxOTkxMSwgMTk5MTUsIDE5OTE5LCAxOTkyMywgMTk5MjcsIDE5OTMxLCAxOTkzNSwgCisgICAgMTk5MzksIDE5OTQzLCAxOTk0NywgMTk5NTEsIDE5OTU1LCAxOTk1OSwgMTk5NjMsIDE5OTY3LCAxOTk3MSwgMTk5NzUsIAorICAgIDE5OTc5LCAxOTk4MywgMTk5ODcsIDE5OTkxLCAxOTk5NSwgMTk5OTksIDIwMDAzLCAyMDAwNywgMjAwMTEsIDIwMDE1LCAKKyAgICAyMDAxOSwgMjAwMjMsIDIwMDI3LCAyMDAzMSwgMjAwMzUsIDIwMDM5LCAyMDA0MywgMjAwNDcsIDIwMDUxLCAyMDA1NSwgCisgICAgMjAwNTksIDIwMDYzLCAyMDA2NywgMjAwNzEsIDIwMDc1LCAyMDA3OSwgMjAwODMsIDIwMDg3LCAyMDA5MSwgMjAwOTUsIAorICAgIDIwMDk5LCAyMDEwMywgMjAxMDcsIDIwMTExLCAyMDExNSwgMjAxMTksIDIwMTIzLCAyMDEyNywgMjAxMzEsIDIwMTM1LCAKKyAgICAyMDEzOSwgMjAxNDMsIDIwMTQ3LCAyMDE1MSwgMjAxNTUsIDIwMTU5LCAyMDE2MywgMjAxNjcsIDIwMTcxLCAyMDE3NSwgCisgICAgMjAxNzksIDIwMTgzLCAyMDE4NywgMjAxOTEsIDIwMTk1LCAyMDE5OSwgMjAyMDMsIDIwMjA3LCAyMDIxMSwgMjAyMTUsIAorICAgIDIwMjE5LCAyMDIyMywgMjAyMjcsIDIwMjMxLCAyMDIzNSwgMjAyMzksIDIwMjQzLCAyMDI0NywgMjAyNTEsIDIwMjU1LCAKKyAgICAyMDI1OSwgMjAyNjMsIDIwMjY3LCAyMDI3MSwgMjAyNzUsIDIwMjc5LCAyMDI4MywgMjAyODcsIDIwMjkxLCAyMDI5NSwgCisgICAgMjAyOTksIDIwMzAzLCAyMDMwNywgMjAzMTEsIDIwMzE0LCAyMDMxOCwgMjAzMjIsIDIwMzI2LCAyMDMzMCwgMjAzMzQsIAorICAgIDIwMzM4LCAyMDM0MiwgMjAzNDYsIDIwMzUwLCAyMDM1NCwgMjAzNTgsIDIwMzYyLCAyMDM2NiwgMjAzNzAsIDIwMzc0LCAKKyAgICAyMDM3OCwgMjAzODIsIDIwMzg2LCAyMDM5MCwgMjAzOTQsIDIwMzk4LCAyMDQwMiwgMjA0MDYsIDIwNDA5LCAyMDQxMywgCisgICAgMjA0MTcsIDIwNDIxLCAyMDQyNSwgMjA0MjksIDIwNDMzLCAyMDQzNywgMjA0NDEsIDIwNDQ1LCAyMDQ0OSwgMjA0NTMsIAorICAgIDIwNDU3LCAyMDQ2MSwgMjA0NjUsIDIwNDY5LCAyMDQ3MiwgMjA0NzYsIDIwNDgwLCAyMDQ4NCwgMjA0ODgsIDIwNDkyLCAKKyAgICAyMDQ5NiwgMjA1MDAsIDIwNTA0LCAyMDUwOCwgMjA1MTIsIDIwNTE2LCAyMDUyMCwgMjA1MjQsIDIwNTI4LCAyMDUzMiwgCisgICAgMjA1MzYsIDIwNTQwLCAyMDU0NCwgMjA1NDgsIDIwNTUyLCAyMDU1NiwgMjA1NjAsIDIwNTY0LCAyMDU2OCwgMjA1NzIsIAorICAgIDIwNTc2LCAyMDU4MCwgMjA1ODQsIDIwNTg4LCAyMDU5MiwgMjA1OTYsIDAsIDIwNjAwLCAyMDYwNCwgMjA2MDgsIDIwNjEyLCAKKyAgICAwLCAwLCAyMDYxNiwgMjA2MjAsIDIwNjI0LCAyMDYyOCwgMjA2MzIsIDIwNjM2LCAyMDY0MCwgMCwgMjA2NDQsIDAsIAorICAgIDIwNjQ4LCAyMDY1MiwgMjA2NTYsIDIwNjYwLCAwLCAwLCAyMDY2NCwgMjA2NjgsIDIwNjcyLCAyMDY3NiwgMjA2ODAsIAorICAgIDIwNjg0LCAyMDY4OCwgMjA2OTIsIDIwNjk2LCAyMDcwMCwgMjA3MDQsIDIwNzA4LCAyMDcxMiwgMjA3MTYsIDIwNzIwLCAKKyAgICAyMDcyNCwgMjA3MjgsIDIwNzMyLCAyMDczNiwgMjA3NDAsIDIwNzQ0LCAyMDc0OCwgMjA3NTIsIDIwNzU1LCAyMDc1OSwgCisgICAgMjA3NjMsIDIwNzY3LCAyMDc3MSwgMjA3NzUsIDIwNzc5LCAyMDc4MywgMjA3ODcsIDIwNzkxLCAyMDc5NSwgMjA3OTksIAorICAgIDIwODAzLCAyMDgwNywgMjA4MTEsIDIwODE1LCAyMDgxOSwgMjA4MjMsIDAsIDIwODI3LCAyMDgzMSwgMjA4MzUsIDIwODM5LCAKKyAgICAwLCAwLCAyMDg0MywgMjA4NDYsIDIwODUwLCAyMDg1NCwgMjA4NTgsIDIwODYyLCAyMDg2NiwgMjA4NzAsIDIwODc0LCAKKyAgICAyMDg3OCwgMjA4ODIsIDIwODg2LCAyMDg5MCwgMjA4OTQsIDIwODk4LCAyMDkwMiwgMjA5MDYsIDIwOTExLCAyMDkxNiwgCisgICAgMjA5MjEsIDIwOTI3LCAyMDkzMywgMjA5MzgsIDIwOTQzLCAyMDk0OSwgMjA5NTIsIDIwOTU2LCAyMDk2MCwgMjA5NjQsIAorICAgIDIwOTY4LCAyMDk3MiwgMjA5NzYsIDIwOTgwLCAwLCAyMDk4NCwgMjA5ODgsIDIwOTkyLCAyMDk5NiwgMCwgMCwgMjEwMDAsIAorICAgIDIxMDA0LCAyMTAwOCwgMjEwMTIsIDIxMDE2LCAyMTAyMCwgMjEwMjQsIDAsIDIxMDI4LCAwLCAyMTAzMiwgMjEwMzYsIAorICAgIDIxMDQwLCAyMTA0NCwgMCwgMCwgMjEwNDgsIDIxMDUyLCAyMTA1NiwgMjEwNjAsIDIxMDY0LCAyMTA2OCwgMjEwNzIsIAorICAgIDIxMDc2LCAyMTA4MCwgMjEwODUsIDIxMDkwLCAyMTA5NSwgMjExMDEsIDIxMTA3LCAyMTExMiwgMCwgMjExMTcsIDIxMTIxLCAKKyAgICAyMTEyNSwgMjExMjksIDIxMTMzLCAyMTEzNywgMjExNDEsIDIxMTQ1LCAyMTE0OSwgMjExNTMsIDIxMTU3LCAyMTE2MSwgCisgICAgMjExNjUsIDIxMTY5LCAyMTE3MywgMjExNzcsIDIxMTgxLCAyMTE4NCwgMjExODgsIDIxMTkyLCAyMTE5NiwgMjEyMDAsIAorICAgIDIxMjA0LCAyMTIwOCwgMjEyMTIsIDIxMjE2LCAyMTIyMCwgMjEyMjQsIDIxMjI4LCAyMTIzMiwgMjEyMzYsIDIxMjQwLCAKKyAgICAyMTI0NCwgMjEyNDgsIDIxMjUyLCAyMTI1NiwgMjEyNjAsIDIxMjY0LCAyMTI2OCwgMjEyNzIsIDIxMjc2LCAyMTI4MCwgCisgICAgMjEyODQsIDIxMjg4LCAyMTI5MiwgMjEyOTYsIDIxMzAwLCAyMTMwNCwgMjEzMDgsIDIxMzEyLCAyMTMxNiwgMjEzMjAsIAorICAgIDIxMzI0LCAyMTMyOCwgMjEzMzIsIDIxMzM2LCAyMTM0MCwgMCwgMjEzNDQsIDIxMzQ4LCAyMTM1MiwgMjEzNTYsIDAsIDAsIAorICAgIDIxMzYwLCAyMTM2NCwgMjEzNjgsIDIxMzcyLCAyMTM3NiwgMjEzODAsIDIxMzg0LCAyMTM4OCwgMjEzOTIsIDIxMzk2LCAKKyAgICAyMTQwMCwgMjE0MDQsIDIxNDA4LCAyMTQxMiwgMjE0MTYsIDIxNDIwLCAyMTQyNCwgMjE0MjgsIDIxNDMyLCAyMTQzNiwgCisgICAgMjE0NDAsIDIxNDQ0LCAyMTQ0OCwgMjE0NTIsIDIxNDU2LCAyMTQ2MCwgMjE0NjQsIDIxNDY4LCAyMTQ3MiwgMjE0NzYsIAorICAgIDIxNDgwLCAyMTQ4NCwgMjE0ODgsIDIxNDkyLCAyMTQ5NiwgMjE1MDAsIDIxNTA0LCAyMTUwOCwgMjE1MTIsIDIxNTE2LCAKKyAgICAyMTUyMCwgMjE1MjQsIDIxNTI4LCAyMTUzMiwgMjE1MzYsIDIxNTQwLCAyMTU0NCwgMjE1NDgsIDIxNTUyLCAyMTU1NiwgCisgICAgMjE1NjAsIDIxNTY0LCAyMTU2OCwgMjE1NzIsIDIxNTc2LCAyMTU4MCwgMjE1ODQsIDIxNTg3LCAyMTU5MSwgMjE1OTUsIAorICAgIDIxNTk5LCAyMTYwMywgMjE2MDcsIDIxNjExLCAyMTYxNSwgMjE2MTksIDIxNjIzLCAwLCAwLCAyMTYyNywgMjE2MzYsIAorICAgIDIxNjQyLCAyMTY0NywgMjE2NTEsIDIxNjU0LCAyMTY1OSwgMjE2NjIsIDIxNjY1LCAyMTY2OCwgMjE2NzMsIDIxNjc3LCAKKyAgICAyMTY4MiwgMjE2ODUsIDIxNjg4LCAyMTY5MSwgMjE2OTQsIDIxNjk3LCAyMTcwMCwgMjE3MDMsIDIxNzA2LCAyMTcwOSwgCisgICAgMjE3MTMsIDIxNzE3LCAyMTcyMSwgMjE3MjUsIDIxNzI5LCAyMTczMywgMjE3MzcsIDIxNzQxLCAyMTc0NSwgMjE3NDksIDAsIAorICAgIDAsIDAsIDIxNzU1LCAyMTc2MSwgMjE3NjUsIDIxNzY5LCAyMTc3MywgMjE3NzksIDIxNzgzLCAyMTc4NywgMjE3OTEsIAorICAgIDIxNzk3LCAyMTgwMSwgMjE4MDUsIDIxODA5LCAyMTgxNSwgMjE4MTksIDIxODIzLCAyMTgyNywgMjE4MzMsIDIxODM5LCAKKyAgICAyMTg0NSwgMjE4NTMsIDIxODU5LCAyMTg2NSwgMjE4NzEsIDIxODc3LCAyMTg4MywgMCwgMCwgMCwgMCwgMCwgMCwgMjE4ODksIAorICAgIDIxODkyLCAyMTg5NSwgMjE4OTgsIDIxOTAxLCAyMTkwNCwgMjE5MDgsIDIxOTEyLCAyMTkxNSwgMjE5MTksIDIxOTIzLCAKKyAgICAyMTkyNywgMjE5MzEsIDIxOTM1LCAyMTkzOCwgMjE5NDIsIDIxOTQ2LCAyMTk1MCwgMjE5NTQsIDIxOTU4LCAyMTk2MiwgCisgICAgMjE5NjYsIDIxOTcwLCAyMTk3NCwgMjE5NzgsIDIxOTgyLCAyMTk4NSwgMjE5ODksIDIxOTkzLCAyMTk5NywgMjIwMDEsIAorICAgIDIyMDA0LCAyMjAwOCwgMjIwMTIsIDIyMDE2LCAyMjAyMCwgMjIwMjQsIDIyMDI4LCAyMjAzMiwgMjIwMzYsIDIyMDQwLCAKKyAgICAyMjA0NCwgMjIwNDgsIDIyMDUyLCAyMjA1NiwgMjIwNjAsIDIyMDYzLCAyMjA2NywgMjIwNzEsIDIyMDc1LCAyMjA3OSwgCisgICAgMjIwODMsIDIyMDg3LCAyMjA5MSwgMjIwOTUsIDIyMDk5LCAyMjEwMywgMjIxMDcsIDIyMTExLCAyMjExNSwgMjIxMTksIAorICAgIDIyMTIzLCAyMjEyNywgMjIxMzEsIDIyMTM1LCAyMjEzOSwgMjIxNDMsIDIyMTQ3LCAyMjE1MSwgMjIxNTUsIDIyMTU5LCAKKyAgICAyMjE2MywgMjIxNjcsIDIyMTcxLCAyMjE3NSwgMjIxNzksIDIyMTgzLCAyMjE4NywgMjIxOTEsIDIyMTk1LCAyMjE5OCwgCisgICAgMjIyMDIsIDIyMjA2LCAyMjIxMCwgMjIyMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMjE4LCAKKyAgICAyMjIyMiwgMjIyMjUsIDIyMjI5LCAyMjIzMiwgMjIyMzYsIDIyMjM5LCAyMjI0MywgMjIyNDksIDIyMjU0LCAyMjI1OCwgCisgICAgMjIyNjEsIDIyMjY1LCAyMjI2OSwgMjIyNzQsIDIyMjc4LCAyMjI4MywgMjIyODcsIDIyMjkyLCAyMjI5NiwgMjIzMDEsIAorICAgIDIyMzA1LCAyMjMxMCwgMjIzMTYsIDIyMzIwLCAyMjMyNSwgMjIzMjksIDIyMzM0LCAyMjM0MCwgMjIzNDQsIDIyMzUwLCAKKyAgICAyMjM1NiwgMjIzNjAsIDIyMzY1LCAyMjM3MywgMjIzODEsIDIyMzg4LCAyMjM5MywgMjIzOTgsIDIyNDA3LCAyMjQxNCwgCisgICAgMjI0MjEsIDIyNDI2LCAyMjQzMiwgMjI0MzYsIDIyNDQwLCAyMjQ0NCwgMjI0NDgsIDIyNDUyLCAyMjQ1NiwgMjI0NjAsIAorICAgIDIyNDY0LCAyMjQ2OCwgMjI0NzIsIDIyNDc4LCAyMjQ4MywgMjI0ODgsIDIyNDkxLCAyMjQ5NSwgMjI0OTksIDIyNTA0LCAKKyAgICAyMjUwOCwgMjI1MTMsIDIyNTE3LCAyMjUyMiwgMjI1MjYsIDIyNTMxLCAyMjUzNSwgMjI1NDAsIDIyNTQ0LCAyMjU0OSwgCisgICAgMjI1NTMsIDIyNTU4LCAyMjU2NCwgMjI1NjgsIDIyNTczLCAyMjU3OCwgMjI1ODIsIDIyNTg2LCAyMjU5MCwgMjI1OTQsIAorICAgIDIyNTk3LCAyMjYwMSwgMjI2MDcsIDIyNjEyLCAyMjYxNywgMjI2MjEsIDIyNjI1LCAyMjYyOSwgMjI2MzQsIDIyNjM4LCAKKyAgICAyMjY0MywgMjI2NDcsIDIyNjUyLCAyMjY1NSwgMjI2NTksIDIyNjYzLCAyMjY2OCwgMjI2NzIsIDIyNjc3LCAyMjY4MSwgCisgICAgMjI2ODYsIDIyNjkyLCAyMjY5NiwgMjI3MDAsIDIyNzA0LCAyMjcwOCwgMjI3MTIsIDIyNzE2LCAyMjcyMCwgMjI3MjQsIAorICAgIDIyNzI4LCAyMjczMiwgMjI3MzYsIDIyNzQyLCAyMjc0NSwgMjI3NDksIDIyNzUzLCAyMjc1OCwgMjI3NjIsIDIyNzY3LCAKKyAgICAyMjc3MSwgMjI3NzYsIDIyNzgwLCAyMjc4NSwgMjI3ODksIDIyNzk0LCAyMjc5OCwgMjI4MDMsIDIyODA3LCAyMjgxMiwgCisgICAgMjI4MTgsIDIyODIyLCAyMjgyNiwgMjI4MzIsIDIyODM4LCAyMjg0NCwgMjI4NTAsIDIyODU0LCAyMjg1OCwgMjI4NjIsIAorICAgIDIyODY2LCAyMjg3MCwgMjI4NzQsIDIyODgwLCAyMjg4NCwgMjI4ODgsIDIyODkyLCAyMjg5NywgMjI5MDEsIDIyOTA2LCAKKyAgICAyMjkxMCwgMjI5MTUsIDIyOTE5LCAyMjkyNCwgMjI5MjgsIDIyOTMzLCAyMjkzNywgMjI5NDIsIDIyOTQ2LCAyMjk1MSwgCisgICAgMjI5NTcsIDIyOTYxLCAyMjk2NywgMjI5NzEsIDIyOTc1LCAyMjk3OSwgMjI5ODMsIDIyOTg3LCAyMjk5MSwgMjI5OTcsIAorICAgIDIzMDAwLCAyMzAwNCwgMjMwMDgsIDIzMDEzLCAyMzAxNywgMjMwMjIsIDIzMDI2LCAyMzAzMSwgMjMwMzUsIDIzMDQwLCAKKyAgICAyMzA0NCwgMjMwNDksIDIzMDUzLCAyMzA1OCwgMjMwNjIsIDIzMDY3LCAyMzA3MywgMjMwNzYsIDIzMDgwLCAyMzA4NCwgCisgICAgMjMwODksIDIzMDk0LCAyMzA5OCwgMjMxMDIsIDIzMTA2LCAyMzExMCwgMjMxMTQsIDIzMTE4LCAyMzEyNCwgMjMxMjcsIAorICAgIDIzMTMxLCAyMzEzNSwgMjMxNDAsIDIzMTQ0LCAyMzE0OSwgMjMxNTMsIDIzMTU4LCAyMzE2NCwgMjMxNjcsIDIzMTcyLCAKKyAgICAyMzE3NiwgMjMxODAsIDIzMTg0LCAyMzE4OCwgMjMxOTIsIDIzMTk2LCAyMzIwMCwgMjMyMDYsIDIzMjEwLCAyMzIxNCwgCisgICAgMjMyMTgsIDIzMjIzLCAyMzIyNywgMjMyMzIsIDIzMjM2LCAyMzI0MSwgMjMyNDUsIDIzMjUwLCAyMzI1NCwgMjMyNTksIAorICAgIDIzMjYzLCAyMzI2OCwgMjMyNzIsIDIzMjc3LCAyMzI4MCwgMjMyODQsIDIzMjg4LCAyMzI5MiwgMjMyOTYsIDIzMzAwLCAKKyAgICAyMzMwNCwgMjMzMDgsIDIzMzEyLCAyMzMxOCwgMjMzMjIsIDIzMzI2LCAyMzMzMCwgMjMzMzUsIDIzMzM5LCAyMzM0NCwgCisgICAgMjMzNDgsIDIzMzUzLCAyMzM1NywgMjMzNjIsIDIzMzY2LCAyMzM3MSwgMjMzNzUsIDIzMzgwLCAyMzM4NCwgMjMzODksIAorICAgIDIzMzk1LCAyMzM5OCwgMjM0MDMsIDIzNDA3LCAyMzQxMiwgMjM0MTgsIDIzNDI0LCAyMzQzMCwgMjM0MzYsIDIzNDQyLCAKKyAgICAyMzQ0OCwgMjM0NTQsIDIzNDU4LCAyMzQ2MiwgMjM0NjYsIDIzNDcwLCAyMzQ3NCwgMjM0NzgsIDIzNDgyLCAyMzQ4NiwgCisgICAgMjM0OTEsIDIzNDk1LCAyMzUwMCwgMjM1MDQsIDIzNTA5LCAyMzUxMywgMjM1MTgsIDIzNTIyLCAyMzUyNywgMjM1MzEsIAorICAgIDIzNTM2LCAyMzU0MCwgMjM1NDUsIDIzNTQ5LCAyMzU1MywgMjM1NTcsIDIzNTYxLCAyMzU2NSwgMjM1NjksIDIzNTczLCAKKyAgICAyMzU3OSwgMjM1ODIsIDIzNTg2LCAyMzU5MCwgMjM1OTUsIDIzNTk5LCAyMzYwNCwgMjM2MDgsIDIzNjEzLCAyMzYxNywgCisgICAgMjM2MjIsIDIzNjI2LCAyMzYzMSwgMjM2MzUsIDIzNjQwLCAyMzY0NCwgMjM2NDksIDIzNjU1LCAyMzY1OSwgMjM2NjUsIAorICAgIDIzNjcwLCAyMzY3NiwgMjM2ODAsIDIzNjg2LCAyMzY5MSwgMjM2OTUsIDIzNjk5LCAyMzcwMywgMjM3MDcsIDIzNzExLCAKKyAgICAyMzcxNiwgMjM3MTksIDIzNzIzLCAyMzcyOCwgMjM3MzIsIDIzNzM3LCAyMzc0MCwgMjM3NDQsIDIzNzQ4LCAyMzc1MiwgCisgICAgMjM3NTYsIDIzNzYwLCAyMzc2NCwgMjM3NjgsIDIzNzcyLCAyMzc3NiwgMjM3ODAsIDIzNzg0LCAyMzc4OSwgMjM3OTMsIAorICAgIDIzNzk3LCAyMzgwMywgMjM4MDcsIDIzODEzLCAyMzgxNywgMjM4MjMsIDIzODI3LCAyMzgzMSwgMjM4MzUsIDIzODM5LCAKKyAgICAyMzg0MywgMjM4NDgsIDIzODUyLCAyMzg1NiwgMjM4NjAsIDIzODY0LCAyMzg2OCwgMjM4NzIsIDIzODc2LCAyMzg4MCwgCisgICAgMjM4ODQsIDIzODg4LCAyMzg5NCwgMjM5MDAsIDIzOTA2LCAyMzkxMiwgMjM5MTgsIDIzOTIzLCAyMzkyOSwgMjM5MzUsIAorICAgIDIzOTQxLCAyMzk0NSwgMjM5NDksIDIzOTUzLCAyMzk1NywgMjM5NjEsIDIzOTY1LCAyMzk2OSwgMjM5NzMsIDIzOTc3LCAKKyAgICAyMzk4MSwgMjM5ODUsIDIzOTg5LCAyMzk5MywgMjM5OTgsIDI0MDAzLCAyNDAwOCwgMjQwMTIsIDI0MDE2LCAyNDAyMCwgCisgICAgMjQwMjQsIDI0MDI4LCAyNDAzMiwgMjQwMzYsIDI0MDQwLCAyNDA0NCwgMjQwNDgsIDI0MDU0LCAyNDA2MCwgMjQwNjYsIAorICAgIDI0MDcyLCAyNDA3OCwgMjQwODQsIDI0MDkwLCAyNDA5NiwgMjQxMDIsIDI0MTA2LCAyNDExMCwgMjQxMTQsIDI0MTE4LCAKKyAgICAyNDEyMiwgMjQxMjYsIDI0MTMwLCAyNDEzNiwgMjQxNDIsIDI0MTQ4LCAyNDE1NCwgMjQxNjAsIDI0MTY2LCAyNDE3MiwgCisgICAgMjQxNzgsIDI0MTg0LCAyNDE4OSwgMjQxOTQsIDI0MTk5LCAyNDIwNCwgMjQyMTAsIDI0MjE2LCAyNDIyMiwgMjQyMjgsIAorICAgIDI0MjM0LCAyNDI0MCwgMjQyNDYsIDI0MjUxLCAyNDI1NywgMjQyNjMsIDI0MjY5LCAyNDI3NCwgMjQyODAsIDI0Mjg2LCAKKyAgICAyNDI5MiwgMjQyOTcsIDI0MzAyLCAyNDMwNywgMjQzMTIsIDI0MzE3LCAyNDMyMiwgMjQzMjcsIDI0MzMyLCAyNDMzNywgCisgICAgMjQzNDIsIDI0MzQ3LCAyNDM1MiwgMjQzNTYsIDI0MzYxLCAyNDM2NiwgMjQzNzEsIDI0Mzc2LCAyNDM4MSwgMjQzODYsIAorICAgIDI0MzkxLCAyNDM5NiwgMjQ0MDEsIDI0NDA2LCAyNDQxMSwgMjQ0MTYsIDI0NDIxLCAyNDQyNiwgMjQ0MzEsIDI0NDM2LCAKKyAgICAyNDQ0MSwgMjQ0NDYsIDI0NDUxLCAyNDQ1NiwgMjQ0NjEsIDI0NDY2LCAyNDQ3MSwgMjQ0NzYsIDI0NDgxLCAyNDQ4NiwgCisgICAgMjQ0OTEsIDI0NDk2LCAyNDUwMSwgMjQ1MDUsIDI0NTEwLCAyNDUxNSwgMjQ1MjAsIDI0NTI1LCAyNDUzMCwgMjQ1MzUsIAorICAgIDI0NTQwLCAyNDU0NSwgMjQ1NTAsIDI0NTU1LCAyNDU2MCwgMjQ1NjUsIDI0NTcwLCAyNDU3NSwgMjQ1ODAsIDI0NTg1LCAKKyAgICAyNDU5MCwgMjQ1OTUsIDI0NjAwLCAyNDYwNSwgMjQ2MTAsIDI0NjE1LCAyNDYyMCwgMjQ2MjUsIDI0NjMwLCAyNDYzNCwgCisgICAgMjQ2MzksIDI0NjQ0LCAyNDY0OSwgMjQ2NTQsIDI0NjU5LCAyNDY2MywgMjQ2NjgsIDI0NjczLCAyNDY3OCwgMjQ2ODMsIAorICAgIDI0Njg4LCAyNDY5MiwgMjQ2OTcsIDI0NzAzLCAyNDcwOCwgMjQ3MTMsIDI0NzE4LCAyNDcyMywgMjQ3MjksIDI0NzM0LCAKKyAgICAyNDczOSwgMjQ3NDQsIDI0NzQ5LCAyNDc1NCwgMjQ3NTksIDI0NzY0LCAyNDc2OSwgMjQ3NzQsIDI0Nzc5LCAyNDc4NCwgCisgICAgMjQ3ODksIDI0Nzk0LCAyNDc5OSwgMjQ4MDQsIDI0ODA5LCAyNDgxNCwgMjQ4MTksIDI0ODI0LCAyNDgyOSwgMjQ4MzQsIAorICAgIDI0ODM5LCAyNDg0NCwgMjQ4NDksIDI0ODU0LCAyNDg1OSwgMjQ4NjQsIDI0ODY5LCAyNDg3NCwgMjQ4NzksIDI0ODg0LCAKKyAgICAyNDg4OSwgMjQ4OTQsIDI0ODk5LCAyNDkwNCwgMjQ5MDksIDI0OTE0LCAyNDkxOSwgMjQ5MjQsIDI0OTI5LCAyNDkzNCwgCisgICAgMjQ5MzksIDI0OTQ0LCAyNDk0OSwgMjQ5NTUsIDI0OTYwLCAyNDk2NSwgMjQ5NzAsIDI0OTc1LCAyNDk4MCwgMjQ5ODUsIAorICAgIDI0OTkwLCAyNDk5NSwgMjUwMDAsIDI1MDA1LCAyNTAxMCwgMjUwMTUsIDI1MDIwLCAyNTAyNSwgMjUwMzAsIDI1MDM1LCAKKyAgICAyNTA0MCwgMjUwNDUsIDI1MDUwLCAyNTA1NSwgMjUwNjAsIDI1MDY1LCAyNTA3MCwgMjUwNzUsIDI1MDgwLCAyNTA4NSwgCisgICAgMjUwOTAsIDI1MDk1LCAyNTEwMCwgMjUxMDUsIDI1MTEwLCAyNTExNSwgMjUxMjAsIDI1MTI1LCAyNTEzMCwgMjUxMzUsIAorICAgIDI1MTQwLCAyNTE0NSwgMjUxNTEsIDI1MTU1LCAyNTE1OSwgMjUxNjMsIDI1MTY3LCAyNTE3MSwgMjUxNzUsIDI1MTc5LCAKKyAgICAyNTE4MywgMjUxODksIDI1MTk1LCAyNTIwMSwgMjUyMDcsIDI1MjEzLCAyNTIxOSwgMjUyMjUsIDI1MjMyLCAyNTIzOCwgCisgICAgMjUyNDMsIDI1MjQ4LCAyNTI1MywgMjUyNTgsIDI1MjYzLCAyNTI2OCwgMjUyNzMsIDI1Mjc4LCAyNTI4MywgMjUyODgsIAorICAgIDI1MjkzLCAyNTI5OCwgMjUzMDMsIDI1MzA4LCAyNTMxMywgMjUzMTgsIDI1MzIzLCAyNTMyOCwgMjUzMzMsIDI1MzM4LCAKKyAgICAyNTM0MywgMjUzNDgsIDI1MzUzLCAyNTM1OCwgMjUzNjMsIDI1MzY4LCAyNTM3MywgMjUzNzgsIDAsIDAsIDAsIDI1Mzg1LCAKKyAgICAyNTM5NSwgMjUzOTksIDI1NDA2LCAyNTQxMCwgMjU0MTQsIDI1NDE4LCAyNTQyNiwgMjU0MzAsIDI1NDM1LCAyNTQ0MCwgCisgICAgMjU0NDUsIDI1NDQ5LCAyNTQ1NCwgMjU0NTksIDI1NDYyLCAyNTQ2NiwgMjU0NzAsIDI1NDc5LCAyNTQ4MywgMjU0ODcsIAorICAgIDI1NDkzLCAyNTQ5NywgMjU1MDEsIDI1NTA5LCAyNTUxMywgMjU1MjEsIDI1NTI3LCAyNTUzMywgMjU1MzksIDI1NTQ1LCAKKyAgICAyNTU1NCwgMjU1NTksIDI1NTYzLCAyNTU3MiwgMjU1NzUsIDI1NTgxLCAyNTU4NSwgMjU1OTEsIDI1NTk2LCAyNTYwMiwgCisgICAgMjU2MTAsIDI1NjE2LCAyNTYyMSwgMjU2MjgsIDI1NjMzLCAyNTYzNywgMjU2NDEsIDI1NjUxLCAyNTY1NywgMjU2NjEsIAorICAgIDI1NjcxLCAyNTY3NywgMjU2ODEsIDI1Njg1LCAyNTY5MiwgMjU2OTksIDI1NzA0LCAyNTcwOSwgMjU3MTgsIDI1NzIyLCAKKyAgICAyNTcyNiwgMjU3MzAsIDI1NzM4LCAyNTc0NSwgMjU3NDksIDI1NzUzLCAyNTc1NywgMjU3NjEsIDI1NzY1LCAyNTc2OSwgCisgICAgMjU3NzMsIDI1Nzc3LCAyNTc4MSwgMjU3ODUsIDI1Nzg5LCAyNTc5NCwgMjU3OTksIDI1ODA0LCAyNTgwOCwgMjU4MTIsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI1ODE2LCAyNTgyMCwgMjU4MjQsIDI1ODI4LCAKKyAgICAyNTgzMiwgMjU4MzcsIDI1ODQyLCAyNTg0NywgMjU4NTIsIDI1ODU2LCAyNTg2MCwgMjU4NjUsIDI1ODY5LCAwLCAyNTg3MywgCisgICAgMjU4NzgsIDI1ODgzLCAyNTg4OCwgMjU4OTIsIDI1ODk3LCAyNTkwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMjU5MDcsIDI1OTExLCAyNTkxNSwgMjU5MTksIDI1OTIzLCAyNTkyOCwgMjU5MzMsIDI1OTM4LCAyNTk0MywgMjU5NDcsIAorICAgIDI1OTUxLCAyNTk1NiwgMjU5NjAsIDI1OTY0LCAyNTk2OCwgMjU5NzMsIDI1OTc4LCAyNTk4MywgMjU5ODcsIDI1OTkyLCAKKyAgICAyNTk5NywgMjYwMDIsIDI2MDA4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjAxMywgMjYwMTcsIDI2MDIxLCAKKyAgICAyNjAyNSwgMjYwMjksIDI2MDM0LCAyNjAzOSwgMjYwNDQsIDI2MDQ5LCAyNjA1MywgMjYwNTcsIDI2MDYyLCAyNjA2NiwgCisgICAgMjYwNzAsIDI2MDc0LCAyNjA3OSwgMjYwODQsIDI2MDg5LCAyNjA5MywgMjYwOTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2MTAzLCAyNjEwNywgMjYxMTEsIDI2MTE1LCAyNjExOSwgMjYxMjQsIDI2MTI5LCAyNjEzNCwgCisgICAgMjYxMzksIDI2MTQzLCAyNjE0NywgMjYxNTIsIDI2MTU2LCAwLCAyNjE2MCwgMjYxNjUsIDI2MTcwLCAwLCAyNjE3NSwgCisgICAgMjYxODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2MTg1LCAyNjE4OCwgMjYxOTIsIDI2MTk2LCAKKyAgICAyNjIwMCwgMjYyMDQsIDI2MjA4LCAyNjIxMiwgMjYyMTYsIDI2MjIwLCAyNjIyNCwgMjYyMjgsIDI2MjMyLCAyNjIzNiwgCisgICAgMjYyNDAsIDI2MjQ0LCAyNjI0OCwgMjYyNTIsIDI2MjU1LCAyNjI1OSwgMjYyNjMsIDI2MjY3LCAyNjI3MSwgMjYyNzUsIAorICAgIDI2Mjc5LCAyNjI4MywgMjYyODcsIDI2MjkxLCAyNjI5NSwgMjYyOTksIDI2MzAzLCAyNjMwNywgMjYzMTEsIDI2MzE0LCAKKyAgICAyNjMxOCwgMjYzMjIsIDI2MzI4LCAyNjMzNCwgMjYzNDAsIDI2MzQ2LCAyNjM1MiwgMjYzNTgsIDI2MzY0LCAyNjM3MCwgCisgICAgMjYzNzYsIDI2MzgyLCAyNjM4OCwgMjYzOTQsIDI2NDAwLCAyNjQwNiwgMjY0MTUsIDI2NDI0LCAyNjQzMCwgMjY0MzYsIAorICAgIDI2NDQyLCAyNjQ0NywgMjY0NTEsIDI2NDU2LCAyNjQ2MSwgMjY0NjYsIDI2NDcwLCAyNjQ3NSwgMjY0ODAsIDI2NDg1LCAKKyAgICAyNjQ4OSwgMjY0OTQsIDI2NDk4LCAyNjUwMywgMjY1MDgsIDI2NTEzLCAyNjUxOCwgMjY1MjIsIDI2NTI2LCAyNjUzMCwgCisgICAgMjY1MzQsIDI2NTM4LCAyNjU0MiwgMjY1NDYsIDI2NTUwLCAyNjU1NCwgMjY1NTgsIDI2NTY0LCAyNjU2OCwgMjY1NzIsIAorICAgIDI2NTc2LCAyNjU4MCwgMjY1ODQsIDI2NTkyLCAyNjU5OCwgMjY2MDIsIDI2NjA4LCAyNjYxMiwgMjY2MTgsIDI2NjIyLCAwLCAKKyAgICAwLCAyNjYyNiwgMjY2MzAsIDI2NjMzLCAyNjYzNiwgMjY2MzksIDI2NjQyLCAyNjY0NSwgMjY2NDgsIDI2NjUxLCAyNjY1NCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMjY2NTcsIDI2NjY1LCAyNjY3MywgMjY2ODEsIDI2Njg5LCAyNjY5NywgMjY3MDUsIDI2NzEzLCAKKyAgICAyNjcyMSwgMjY3MjksIDAsIDAsIDAsIDAsIDAsIDAsIDI2NzM3LCAyNjc0MCwgMjY3NDMsIDI2NzQ2LCAyNjc1MSwgMjY3NTQsIAorICAgIDI2NzU5LCAyNjc2NiwgMjY3NzQsIDI2Nzc5LCAyNjc4NiwgMjY3ODksIDI2Nzk2LCAyNjgwMywgMjY4MTAsIDAsIDI2ODE0LCAKKyAgICAyNjgxOCwgMjY4MjEsIDI2ODI0LCAyNjgyNywgMjY4MzAsIDI2ODMzLCAyNjgzNiwgMjY4MzksIDI2ODQyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNjg0NSwgMjY4NDgsIDI2ODUxLCAyNjg1NCwgMjY4NTcsIDI2ODYwLCAyNjg2NCwgMjY4NjgsIDI2ODcyLCAKKyAgICAyNjg3NSwgMjY4NzksIDI2ODgzLCAyNjg4NiwgMjY4OTAsIDI2ODk0LCAyNjg5NywgMjY5MDEsIDI2OTA1LCAyNjkwOSwgCisgICAgMjY5MTMsIDI2OTE3LCAyNjkyMSwgMjY5MjUsIDI2OTI4LCAyNjkzMSwgMjY5MzUsIDI2OTM5LCAyNjk0MiwgMjY5NDYsIAorICAgIDI2OTUwLCAyNjk1NCwgMjY5NTgsIDI2OTYyLCAyNjk2NiwgMjY5NzAsIDI2OTc0LCAyNjk4MSwgMjY5ODYsIDI2OTkxLCAKKyAgICAyNjk5NiwgMjcwMDEsIDI3MDA3LCAyNzAxMywgMjcwMTksIDI3MDI1LCAyNzAzMCwgMjcwMzYsIDI3MDQyLCAyNzA0NywgCisgICAgMjcwNTMsIDI3MDU5LCAyNzA2NSwgMjcwNzEsIDI3MDc3LCAyNzA4MiwgMjcwODgsIDI3MDkzLCAyNzA5OSwgMjcxMDUsIAorICAgIDI3MTExLCAyNzExNywgMjcxMjMsIDI3MTI4LCAyNzEzMywgMjcxMzksIDI3MTQ1LCAyNzE1MCwgMjcxNTYsIDI3MTYxLCAKKyAgICAyNzE2NywgMjcxNzIsIDI3MTc3LCAyNzE4MywgMjcxODksIDI3MTk1LCAyNzIwMSwgMjcyMDcsIDI3MjEzLCAyNzIxOSwgCisgICAgMjcyMjUsIDI3MjMxLCAyNzIzNywgMjcyNDMsIDI3MjQ5LCAyNzI1NCwgMjcyNTksIDI3MjY0LCAyNzI3MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjcyNzYsIDI3Mjg1LCAyNzI5NCwgMjczMDIsIDI3MzEwLCAyNzMyMCwgMjczMjgsIDI3MzM3LCAKKyAgICAyNzM0NCwgMjczNTEsIDI3MzU4LCAyNzM2NiwgMjczNzQsIDI3MzgyLCAyNzM5MCwgMjczOTgsIDI3NDA2LCAyNzQxNCwgCisgICAgMjc0MjIsIDI3NDI5LCAyNzQzNywgMjc0NDUsIDI3NDUzLCAyNzQ2MSwgMjc0NjksIDI3NDc5LCAyNzQ4OSwgMjc0OTksIAorICAgIDI3NTA5LCAyNzUxOSwgMjc1MjksIDI3NTM5LCAyNzU0OSwgMjc1NTksIDI3NTY5LCAyNzU3OSwgMjc1ODksIDI3NTk5LCAKKyAgICAyNzYwOSwgMjc2MTcsIDI3NjI1LCAyNzYzNSwgMjc2NDMsIDAsIDAsIDAsIDAsIDAsIDI3NjUzLCAyNzY1NywgMjc2NjEsIAorICAgIDI3NjY1LCAyNzY2OSwgMjc2NzMsIDI3Njc3LCAyNzY4MSwgMjc2ODUsIDI3Njg5LCAyNzY5MywgMjc2OTcsIDI3NzAxLCAKKyAgICAyNzcwNSwgMjc3MDksIDI3NzEzLCAyNzcxNywgMjc3MjEsIDI3NzI1LCAyNzcyOSwgMjc3MzMsIDI3NzM3LCAyNzc0MSwgCisgICAgMjc3NDUsIDI3NzUxLCAyNzc1NSwgMjc3NjEsIDI3NzY1LCAyNzc3MSwgMjc3NzUsIDI3NzgxLCAyNzc4NSwgMjc3ODksIAorICAgIDI3NzkzLCAyNzc5NywgMjc4MDEsIDI3ODA1LCAyNzgxMSwgMjc4MTcsIDI3ODIzLCAyNzgyOSwgMjc4MzQsIDI3ODM5LCAKKyAgICAyNzg0NCwgMjc4NTAsIDI3ODU2LCAyNzg2MiwgMjc4NjgsIDI3ODc1LCAyNzg4MSwgMjc4ODYsIDI3ODkxLCAyNzg5NSwgCisgICAgMjc4OTksIDI3OTAzLCAyNzkwNywgMjc5MTEsIDI3OTE1LCAyNzkxOSwgMjc5MjUsIDI3OTMxLCAyNzkzNywgMjc5NDIsIAorICAgIDI3OTQ5LCAyNzk1NCwgMjc5NTksIDI3OTY1LCAyNzk3MCwgMjc5NzcsIDI3OTg0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAyNzk5MCwgMjc5OTUsIDI3OTk4LCAyODAwMiwgMjgwMDYsIDI4MDEwLCAyODAxNCwgMjgwMTgsIDI4MDIyLCAKKyAgICAyODAyNiwgMjgwMzAsIDI4MDM0LCAyODAzOCwgMjgwNDIsIDI4MDQ2LCAyODA1MCwgMjgwNTMsIDI4MDU2LCAyODA2MCwgCisgICAgMjgwNjQsIDI4MDY4LCAyODA3MSwgMjgwNzQsIDI4MDc3LCAyODA4MSwgMjgwODUsIDI4MDg5LCAyODA5MywgMjgwOTcsIDAsIAorICAgIDAsIDAsIDI4MTAwLCAyODEwNCwgMjgxMDgsIDI4MTEyLCAyODExNywgMjgxMjIsIDI4MTI3LCAyODEzMiwgMjgxMzYsIAorICAgIDI4MTQwLCAyODE0NSwgMjgxNTAsIDAsIDAsIDAsIDAsIDI4MTU2LCAyODE2MCwgMjgxNjUsIDI4MTcwLCAyODE3NSwgCisgICAgMjgxNzksIDI4MTgzLCAyODE4NywgMjgxOTEsIDI4MTk2LCAyODIwMCwgMjgyMDQsIDAsIDAsIDAsIDAsIDI4MjA4LCAwLCAwLCAKKyAgICAwLCAyODIxMiwgMjgyMTYsIDI4MjIwLCAyODIyNCwgMjgyMjcsIDI4MjMwLCAyODIzMywgMjgyMzYsIDI4MjM5LCAyODI0MiwgCisgICAgMjgyNDUsIDI4MjQ4LCAyODI1MSwgMjgyNTYsIDI4MjYyLCAyODI2OCwgMjgyNzQsIDI4MjgwLCAyODI4NSwgMjgyOTEsIAorICAgIDI4Mjk3LCAyODMwMywgMjgzMDgsIDI4MzE0LCAyODMxOSwgMjgzMjUsIDI4MzMxLCAyODMzNiwgMjgzNDIsIDI4MzQ4LCAKKyAgICAyODM1NCwgMjgzNTksIDI4MzY0LCAyODM2OSwgMjgzNzUsIDI4MzgxLCAyODM4NiwgMjgzOTIsIDI4Mzk3LCAyODQwMywgCisgICAgMjg0MDgsIDI4NDE0LCAwLCAwLCAyODQyMCwgMjg0MjYsIDI4NDMyLCAyODQzOCwgMjg0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI4NDUwLCAyODQ1NywgMjg0NjQsIDI4NDcwLCAyODQ3NywgMjg0ODQsIDI4NDkwLCAyODQ5NywgCisgICAgMjg1MDQsIDI4NTExLCAyODUxOCwgMjg1MjQsIDI4NTMxLCAyODUzOCwgMjg1NDQsIDI4NTUxLCAyODU1OCwgMjg1NjQsIAorICAgIDI4NTcxLCAyODU3OCwgMjg1ODQsIDI4NTkwLCAyODU5NywgMjg2MDMsIDI4NjA5LCAyODYxNiwgMjg2MjIsIDI4NjI5LCAKKyAgICAyODYzNiwgMjg2NDMsIDI4NjUwLCAyODY1NywgMjg2NjQsIDI4NjcwLCAyODY3NywgMjg2ODQsIDI4NjkwLCAyODY5NywgCisgICAgMjg3MDQsIDI4NzExLCAyODcxOCwgMjg3MjUsIDI4NzMyLCAyODczOSwgMCwgMCwgMCwgMCwgMjg3NDYsIDI4NzU0LCAKKyAgICAyODc2MSwgMjg3NjgsIDI4Nzc0LCAyODc4MSwgMjg3ODcsIDI4Nzk0LCAyODgwMCwgMjg4MDcsIDI4ODE0LCAyODgyMSwgCisgICAgMjg4MjgsIDI4ODM1LCAyODg0MiwgMjg4NDksIDI4ODU2LCAyODg2MywgMjg4NzAsIDI4ODc3LCAyODg4MywgMjg4ODksIAorICAgIDI4ODk2LCAyODkwMywgMjg5MTAsIDI4OTE2LCAwLCAwLCAwLCAwLCAwLCAwLCAyODkyMiwgMjg5MjgsIDI4OTMzLCAyODkzOCwgCisgICAgMjg5NDMsIDI4OTQ4LCAyODk1MywgMjg5NTgsIDI4OTYzLCAyODk2OCwgMjg5NzMsIDAsIDAsIDAsIDI4OTc5LCAyODk4NSwgCisgICAgMjg5OTEsIDI4OTk1LCAyOTAwMSwgMjkwMDcsIDI5MDEzLCAyOTAxOSwgMjkwMjUsIDI5MDMxLCAyOTAzNywgMjkwNDMsIAorICAgIDI5MDQ5LCAyOTA1NSwgMjkwNjEsIDI5MDY3LCAyOTA3MywgMjkwNzksIDI5MDg1LCAyOTA4OSwgMjkwOTUsIDI5MTAxLCAKKyAgICAyOTEwNywgMjkxMTMsIDI5MTE5LCAyOTEyNSwgMjkxMzEsIDI5MTM3LCAyOTE0MywgMjkxNDksIDI5MTU1LCAyOTE2MSwgCisgICAgMjkxNjcsIDI5MTczLCAyOTE3OSwgMjkxODMsIDI5MTg4LCAyOTE5MywgMjkxOTgsIDI5MjAyLCAyOTIwNywgMjkyMTEsIAorICAgIDI5MjE2LCAyOTIyMSwgMjkyMjYsIDI5MjMwLCAyOTIzNSwgMjkyNDAsIDI5MjQ1LCAyOTI1MCwgMjkyNTUsIDI5MjU5LCAKKyAgICAyOTI2MywgMjkyNjgsIDI5MjczLCAyOTI3OCwgMjkyODIsIDI5Mjg2LCAyOTI5MSwgMjkyOTYsIDI5MzAxLCAyOTMwNiwgMCwgCisgICAgMCwgMjkzMTIsIDI5MzE2LCAyOTMyMywgMjkzMjgsIDI5MzM0LCAyOTM0MCwgMjkzNDUsIDI5MzUxLCAyOTM1NywgMjkzNjIsIAorICAgIDI5MzY4LCAyOTM3NCwgMjkzODAsIDI5Mzg2LCAyOTM5MiwgMjkzOTcsIDI5NDAyLCAyOTQwOCwgMjk0MTMsIDI5NDE5LCAKKyAgICAyOTQyNCwgMjk0MzAsIDI5NDM2LCAyOTQ0MiwgMjk0NDgsIDI5NDUyLCAyOTQ1NywgMjk0NjIsIDI5NDY4LCAyOTQ3NCwgCisgICAgMjk0NzksIDI5NDg1LCAyOTQ5MSwgMjk0OTUsIDI5NTAwLCAyOTUwNSwgMjk1MDksIDI5NTE0LCAyOTUxOSwgMjk1MjQsIAorICAgIDI5NTI5LCAyOTUzNSwgMjk1NDEsIDI5NTQ3LCAyOTU1MiwgMjk1NTcsIDI5NTYxLCAyOTU2NiwgMjk1NzAsIDI5NTc1LCAKKyAgICAyOTU3OSwgMjk1ODQsIDI5NTg5LCAyOTU5NCwgMjk1OTksIDI5NjA2LCAyOTYxMywgMjk2MjEsIDI5NjMyLCAyOTY0MSwgCisgICAgMjk2NDksIDI5NjU2LCAyOTY2NywgMjk2NzMsIDI5NjgwLCAwLCAyOTY4NywgMjk2OTIsIDI5Njk3LCAyOTcwNSwgMjk3MTEsIAorICAgIDI5NzE5LCAyOTcyNCwgMjk3MzAsIDI5NzM2LCAyOTc0MiwgMjk3NDcsIDI5NzUzLCAyOTc1OCwgMjk3NjUsIDI5NzcxLCAKKyAgICAyOTc3NiwgMjk3ODIsIDI5Nzg4LCAyOTc5NCwgMjk4MDEsIDI5ODA4LCAyOTgxNSwgMjk4MjAsIDI5ODI1LCAyOTgzMiwgCisgICAgMjk4MzksIDI5ODQ2LCAyOTg1MywgMjk4NjAsIDAsIDAsIDI5ODY3LCAyOTg3NCwgMjk4ODEsIDI5ODg3LCAyOTg5MywgCisgICAgMjk4OTksIDI5OTA1LCAyOTkxMSwgMjk5MTcsIDI5OTIzLCAyOTkyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMjk5MzUsIDI5OTQxLCAKKyAgICAyOTk0NiwgMjk5NTEsIDI5OTU2LCAyOTk2MSwgMjk5NjYsIDI5OTcxLCAyOTk3NiwgMjk5ODEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI5OTg2LCAyOTk5MSwgMjk5OTYsIDMwMDAxLCAzMDAwNiwgMzAwMTEsIDMwMDE2LCAzMDAyNSwgMzAwMzIsIDMwMDM3LCAKKyAgICAzMDA0MiwgMzAwNDcsIDMwMDUyLCAzMDA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjY0ODEsIDI2NDg2LCAKLSAgICAyNjQ4OSwgMjY0OTMsIDI2NDk3LCAyNjUwMSwgMjY1MDUsIDI2NTA5LCAyNjUxMywgMjY1MTcsIDI2NTIxLCAyNjUyNSwgCi0gICAgMjY1MjksIDI2NTMzLCAyNjUzNywgMjY1NDEsIDI2NTQ1LCAyNjU0OCwgMjY1NTIsIDI2NTU2LCAyNjU2MCwgMjY1NjMsIAotICAgIDI2NTY2LCAyNjU2OSwgMjY1NzMsIDI2NTc3LCAyNjU4MSwgMjY1ODUsIDI2NTg5LCAwLCAwLCAwLCAyNjU5MiwgMjY1OTYsIAotICAgIDI2NjAwLCAyNjYwNCwgMjY2MDksIDI2NjE0LCAyNjYxOSwgMjY2MjQsIDI2NjI4LCAyNjYzMiwgMjY2MzcsIDI2NjQyLCAwLCAKLSAgICAwLCAwLCAwLCAyNjY0OCwgMjY2NTIsIDI2NjU3LCAyNjY2MiwgMjY2NjcsIDI2NjcyLCAyNjY3NiwgMjY2ODAsIDI2Njg0LCAKLSAgICAyNjY4OSwgMjY2OTMsIDI2Njk3LCAwLCAwLCAwLCAwLCAyNjcwMSwgMCwgMCwgMCwgMjY3MDUsIDI2NzA5LCAyNjcxMywgCi0gICAgMjY3MTcsIDI2NzIwLCAyNjcyMywgMjY3MjYsIDI2NzI5LCAyNjczMiwgMjY3MzUsIDI2NzM4LCAyNjc0MSwgMjY3NDQsIAotICAgIDI2NzQ5LCAyNjc1NSwgMjY3NjEsIDI2NzY3LCAyNjc3MywgMjY3NzgsIDI2Nzg0LCAyNjc5MCwgMjY3OTYsIDI2ODAxLCAKLSAgICAyNjgwNywgMjY4MTIsIDI2ODE4LCAyNjgyNCwgMjY4MjksIDI2ODM1LCAyNjg0MSwgMjY4NDcsIDI2ODUzLCAyNjg1OCwgCi0gICAgMjY4NjMsIDI2ODY5LCAyNjg3NSwgMjY4ODAsIDI2ODg2LCAyNjg5MSwgMjY4OTcsIDI2OTAyLCAyNjkwOCwgMCwgMCwgCi0gICAgMjY5MTQsIDI2OTIwLCAyNjkyNiwgMjY5MzIsIDI2OTM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAyNjk0NCwgMjY5NTEsIDI2OTU4LCAyNjk2NCwgMjY5NzEsIDI2OTc4LCAyNjk4NCwgMjY5OTEsIDI2OTk4LCAyNzAwNSwgCi0gICAgMjcwMTIsIDI3MDE4LCAyNzAyNSwgMjcwMzIsIDI3MDM4LCAyNzA0NSwgMjcwNTIsIDI3MDU5LCAyNzA2NiwgMjcwNzMsIAotICAgIDI3MDgwLCAyNzA4NiwgMjcwOTMsIDI3MDk5LCAyNzEwNSwgMjcxMTIsIDI3MTE4LCAyNzEyNSwgMjcxMzIsIDI3MTM5LCAKLSAgICAyNzE0NiwgMjcxNTMsIDI3MTYwLCAyNzE2NiwgMjcxNzMsIDI3MTgwLCAyNzE4NiwgMjcxOTMsIDI3MjAwLCAyNzIwNywgCi0gICAgMjcyMTQsIDI3MjIxLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzIyOCwgMjcyMzYsIDI3MjQzLCAyNzI1MCwgMjcyNTYsIDI3MjYzLCAKLSAgICAyNzI2OSwgMjcyNzYsIDI3MjgyLCAyNzI4OSwgMjcyOTYsIDI3MzAzLCAyNzMxMCwgMjczMTcsIDI3MzI0LCAyNzMzMSwgCi0gICAgMjczMzgsIDI3MzQ1LCAyNzM1MSwgMjczNTgsIDI3MzY0LCAyNzM3MCwgMjczNzcsIDI3Mzg0LCAyNzM5MSwgMjczOTcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3NDAzLCAyNzQwOSwgMjc0MTQsIDI3NDE5LCAyNzQyNCwgMjc0MjksIDI3NDM0LCAyNzQzOSwgCi0gICAgMjc0NDQsIDI3NDQ5LCAwLCAwLCAwLCAwLCAyNzQ1NCwgMjc0NjAsIDI3NDY2LCAyNzQ3MCwgMjc0NzYsIDI3NDgyLCAKLSAgICAyNzQ4OCwgMjc0OTQsIDI3NTAwLCAyNzUwNiwgMjc1MTIsIDI3NTE4LCAyNzUyNCwgMjc1MzAsIDI3NTM2LCAyNzU0MiwgCi0gICAgMjc1NDgsIDI3NTU0LCAyNzU2MCwgMjc1NjQsIDI3NTcwLCAyNzU3NiwgMjc1ODIsIDI3NTg4LCAyNzU5NCwgMjc2MDAsIAotICAgIDI3NjA2LCAyNzYxMiwgMjc2MTgsIDI3NjI0LCAyNzYzMCwgMjc2MzYsIDI3NjQyLCAyNzY0OCwgMjc2NTQsIDI3NjU4LCAKLSAgICAyNzY2MywgMjc2NjgsIDI3NjczLCAyNzY3NywgMjc2ODIsIDI3Njg2LCAyNzY5MSwgMjc2OTYsIDI3NzAxLCAyNzcwNiwgCi0gICAgMjc3MTEsIDI3NzE2LCAyNzcyMSwgMjc3MjYsIDI3NzMxLCAyNzczNSwgMjc3MzksIDI3NzQ0LCAyNzc0OSwgMjc3NTQsIAotICAgIDI3NzU4LCAyNzc2MiwgMjc3NjcsIDI3NzcyLCAyNzc3NywgMjc3ODIsIDAsIDAsIDI3Nzg4LCAyNzc5MiwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzAwNjIsIDMwMDY4LCAKKyAgICAzMDA3NCwgMzAwNzgsIDMwMDgyLCAzMDA4NiwgMzAwOTAsIDMwMDk2LCAzMDEwMCwgMzAxMDYsIDMwMTEwLCAzMDExNiwgCisgICAgMzAxMjIsIDMwMTMwLCAzMDEzNiwgMzAxNDQsIDMwMTQ4LCAzMDE1MiwgMzAxNTYsIDMwMTYyLCAzMDE2NSwgMzAxNzEsIAorICAgIDMwMTc1LCAzMDE4MSwgMzAxODUsIDMwMTg5LCAzMDE5NSwgMzAxOTksIDMwMjA1LCAzMDIwOSwgMzAyMTUsIDMwMjIzLCAKKyAgICAzMDIzMSwgMzAyMzksIDMwMjQ1LCAzMDI0OSwgMzAyNTUsIDMwMjU5LCAzMDI2NSwgMzAyNjgsIDMwMjcxLCAzMDI3NywgCisgICAgMzAyODEsIDMwMjg3LCAzMDI5MCwgMzAyOTMsIDMwMjk2LCAzMDMwMCwgMzAzMDQsIDMwMzEwLCAzMDMxNiwgMzAzMjAsIAorICAgIDMwMzIzLCAzMDMyNywgMzAzMzIsIDMwMzM3LCAzMDM0NCwgMzAzNDksIDMwMzU2LCAzMDM2MywgMzAzNzIsIDMwMzc5LCAKKyAgICAzMDM4OCwgMzAzOTMsIDMwNDAwLCAzMDQwNywgMzA0MTYsIDMwNDIxLCAzMDQyOCwgMzA0MzMsIDMwNDM5LCAzMDQ0NSwgCisgICAgMzA0NTEsIDMwNDU3LCAzMDQ2MywgMzA0NjksIDAsIDAsIDAsIDAsIDMwNDc1LCAzMDQ3OSwgMzA0ODIsIDMwNDg1LCAKKyAgICAzMDQ4OCwgMzA0OTEsIDMwNDk0LCAzMDQ5NywgMzA1MDAsIDMwNTAzLCAzMDUwNiwgMzA1MDksIDMwNTEyLCAzMDUxNSwgCisgICAgMzA1MjAsIDMwNTI1LCAzMDUzMCwgMzA1MzMsIDMwNTM4LCAzMDU0MywgMzA1NDgsIDMwNTUzLCAzMDU2MCwgMzA1NjUsIAorICAgIDMwNTcwLCAzMDU3NSwgMzA1ODAsIDMwNTg3LCAzMDU5MywgMzA1OTksIDMwNjA1LCAzMDYxMSwgMzA2MTcsIDMwNjI2LCAKKyAgICAzMDYzNSwgMzA2NDEsIDMwNjQ3LCAzMDY1NiwgMzA2NjUsIDMwNjc0LCAzMDY4MywgMzA2OTIsIDMwNzAxLCAzMDcxMCwgCisgICAgMzA3MTksIDAsIDAsIDAsIDMwNzI4LCAzMDczMywgMzA3MzgsIDMwNzQzLCAzMDc0NywgMzA3NTEsIDMwNzU1LCAzMDc2MCwgCisgICAgMzA3NjQsIDMwNzY4LCAzMDc3MywgMzA3NzcsIDMwNzgyLCAzMDc4NywgMzA3OTIsIDMwNzk3LCAzMDgwMiwgMzA4MDcsIAorICAgIDMwODEyLCAzMDgxNywgMzA4MjIsIDMwODI2LCAzMDgzMCwgMzA4MzUsIDMwODQwLCAzMDg0NSwgMzA4NDksIDMwODUzLCAKKyAgICAzMDg1NywgMzA4NjIsIDMwODY3LCAzMDg3MiwgMzA4NzcsIDMwODgxLCAzMDg4OCwgMzA4OTUsIDMwOTAyLCAzMDkwOCwgCisgICAgMzA5MTQsIDMwOTIwLCAzMDkyNiwgMzA5MzIsIDMwOTM4LCAwLCAwLCAwLCAzMDk0MywgMzA5NDgsIDMwOTUzLCAzMDk1OCwgCisgICAgMzA5NjIsIDMwOTY2LCAzMDk3MCwgMzA5NzQsIDMwOTc4LCAzMDk4MiwgMzA5ODYsIDMwOTkwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMDk5NCwgMzA5OTgsIDMxMDA0LCAzMTAwOCwgMzEwMTQsIDMxMDIwLCAzMTAyNSwgMzEwMzIsIDMxMDM2LCAzMTA0MiwgCisgICAgMzEwNDYsIDMxMDUyLCAzMTA1NywgMzEwNjQsIDMxMDcxLCAzMTA3NiwgMzEwODMsIDMxMDg4LCAzMTA5MywgMzEwOTcsIAorICAgIDMxMTAzLCAzMTEwNywgMzExMTMsIDMxMTIwLCAzMTEyNywgMzExMzIsIDMxMTM5LCAzMTE0NiwgMzExNTAsIDMxMTU2LCAKKyAgICAzMTE2MSwgMzExNjYsIDMxMTczLCAzMTE3OCwgMzExODMsIDMxMTg4LCAzMTE5MywgMzExOTcsIDMxMjAxLCAzMTIwNiwgCisgICAgMzEyMTEsIDMxMjE4LCAzMTIyNCwgMzEyMjksIDMxMjM2LCAzMTI0MSwgMzEyNDgsIDMxMjUzLCAzMTI2MywgMzEyNzAsIAorICAgIDMxMjc3LCAzMTI4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzEyODUsIDMxMjk0LCAzMTMwMSwgMzEzMDgsIDMxMzE1LCAKKyAgICAzMTMxOCwgMzEzMjIsIDMxMzI2LCAzMTMzMCwgMzEzMzQsIDMxMzM4LCAzMTM0MiwgMzEzNDYsIDMxMzUwLCAzMTM1NCwgCisgICAgMzEzNTgsIDMxMzYyLCAzMTM2NiwgMzEzNjksIDMxMzcyLCAzMTM3NiwgMzEzODAsIDMxMzg0LCAzMTM4OCwgMzEzOTIsIAorICAgIDMxMzk2LCAzMTM5OSwgMzE0MDMsIDMxNDA3LCAzMTQxMSwgMzE0MTUsIDMxNDE4LCAzMTQyMSwgMzE0MjUsIDMxNDI4LCAKKyAgICAzMTQzMiwgMzE0MzYsIDMxNDQwLCAzMTQ0NCwgMzE0NDgsIDMxNDUxLCAzMTQ1NiwgMzE0NjEsIDMxNDY2LCAzMTQ3MCwgCisgICAgMzE0NzQsIDMxNDc5LCAzMTQ4MywgMzE0ODgsIDMxNDkyLCAzMTQ5OCwgMzE1MDMsIDMxNTA4LCAzMTUxMywgMzE1MTksIAorICAgIDMxNTI0LCAzMTUzMCwgMzE1MzYsIDMxNTQyLCAzMTU0NiwgMCwgMCwgMCwgMzE1NTAsIDMxNTU1LCAzMTU2NCwgMzE1NjksIAorICAgIDMxNTc2LCAzMTU4MSwgMzE1ODUsIDMxNTg4LCAzMTU5MSwgMzE1OTQsIDMxNTk3LCAzMTYwMCwgMzE2MDMsIDMxNjA2LCAKKyAgICAzMTYwOSwgMCwgMCwgMCwgMzE2MTIsIDMxNjE2LCAzMTYyMCwgMzE2MjQsIDMxNjMxLCAzMTYzNywgMzE2NDMsIDMxNjQ5LCAKKyAgICAzMTY1NSwgMzE2NjEsIDMxNjY3LCAzMTY3MywgMzE2NzksIDMxNjg1LCAzMTY5MiwgMzE2OTksIDMxNzA2LCAzMTcxMywgCisgICAgMzE3MjAsIDMxNzI3LCAzMTczNCwgMzE3NDEsIDMxNzQ4LCAzMTc1NSwgMzE3NjIsIDMxNzY5LCAzMTc3NiwgMzE3ODMsIAorICAgIDMxNzkwLCAzMTc5NywgMzE4MDQsIDMxODExLCAzMTgxOCwgMzE4MjUsIDMxODMyLCAzMTgzOSwgMzE4NDYsIDMxODUzLCAKKyAgICAzMTg2MCwgMzE4NjcsIDMxODc0LCAzMTg4MSwgMzE4ODgsIDMxODk1LCAzMTkwMywgMzE5MTEsIDMxOTE5LCAzMTkyNSwgCisgICAgMzE5MzEsIDMxOTM3LCAzMTk0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE5NTQsIDMxOTU5LCAzMTk2NCwgMzE5NjksIAorICAgIDMxOTc0LCAzMTk4MywgMzE5OTQsIDMyMDAzLCAzMjAxNCwgMzIwMjAsIDMyMDMzLCAzMjAzOSwgMzIwNDYsIDMyMDUzLCAKKyAgICAzMjA1OCwgMzIwNjQsIDMyMDcwLCAzMjA4MSwgMzIwOTAsIDMyMDk3LCAzMjEwNCwgMzIxMTMsIDMyMTIwLCAzMjEyOSwgCisgICAgMzIxMzksIDMyMTQ5LCAzMjE1NiwgMzIxNjMsIDMyMTcwLCAzMjE4MCwgMzIxODUsIDMyMTkzLCAzMjE5OSwgMzIyMDcsIAorICAgIDMyMjE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjIyMSwgMzIyMjYsIDMyMjMyLCAzMjIzOSwgCisgICAgMzIyNDcsIDMyMjUzLCAzMjI1OSwgMzIyNjUsIDMyMjcwLCAzMjI3OCwgMzIyODQsIDMyMjkwLCAzMjI5NiwgMzIzMDQsIAorICAgIDMyMzA5LCAzMjMxNiwgMzIzMjEsIDMyMzI4LCAzMjMzNCwgMzIzNDIsIDMyMzUwLCAzMjM1NywgMzIzNjMsIDMyMzcwLCAKKyAgICAzMjM3NywgMzIzODMsIDMyMzkwLCAzMjM5NywgMzI0MDMsIDMyNDA4LCAzMjQxNCwgMzI0MjIsIDMyNDMwLCAzMjQzNiwgCisgICAgMzI0NDIsIDMyNDQ4LCAzMjQ1NCwgMzI0NjIsIDMyNDY2LCAzMjQ3MiwgMzI0NzgsIDMyNDg0LCAzMjQ5MCwgMzI0OTYsIAorICAgIDMyNTAyLCAzMjUwNiwgMzI1MTEsIDMyNTE2LCAzMjUyMywgMzI1MjgsIDMyNTMyLCAzMjUzOCwgMzI1NDMsIDMyNTQ4LCAKKyAgICAzMjU1MiwgMzI1NTcsIDMyNTYyLCAzMjU2NiwgMzI1NzAsIDMyNTc0LCAzMjU4MCwgMzI1ODQsIDMyNTg5LCAzMjU5NCwgCisgICAgMzI1OTgsIDMyNjAzLCAzMjYwNywgMzI2MTIsIDMyNjE2LCAzMjYyMiwgMzI2MjcsIDMyNjM0LCAzMjYzOSwgMzI2NDQsIAorICAgIDMyNjQ4LCAzMjY1MywgMzI2NTksIDMyNjY3LCAzMjY3MiwgMzI2NzgsIDMyNjgzLCAzMjY4NywgMzI2OTIsIDMyNjk2LCAKKyAgICAzMjcwMiwgMzI3MDksIDMyNzE2LCAzMjcyMSwgMzI3MjYsIDMyNzMwLCAzMjczNiwgMzI3NDIsIDMyNzQ3LCAzMjc1MiwgCisgICAgMzI3NTcsIDMyNzYzLCAzMjc2OCwgMzI3NzQsIDMyNzc5LCAzMjc4NSwgMzI3OTEsIDMyNzk3LCAzMjgwNCwgMzI4MTEsIAorICAgIDMyODE4LCAzMjgyNSwgMzI4MzIsIDMyODM5LCAzMjg0NCwgMzI4NTMsIDMyODYzLCAzMjg3MywgMzI4ODMsIDMyODkzLCAKKyAgICAzMjkwMywgMzI5MTMsIDMyOTI2LCAzMjkzNiwgMzI5NDYsIDMyOTU2LCAzMjk2MywgMzI5NjgsIDMyOTc1LCAzMjk4MywgCisgICAgMzI5OTEsIDMyOTk4LCAzMzAwNSwgMzMwMTIsIDMzMDE5LCAzMzAyNywgMzMwMzYsIDMzMDQ1LCAzMzA1NCwgMzMwNjMsIAorICAgIDMzMDcyLCAzMzA4MSwgMzMwOTAsIDMzMDk5LCAzMzEwOCwgMzMxMTcsIDMzMTI2LCAzMzEzNSwgMzMxNDQsIDMzMTUzLCAKKyAgICAzMzE2MSwgMzMxNzAsIDMzMTgxLCAzMzE4OSwgMzMxOTksIDMzMjExLCAzMzIyMCwgMzMyMjksIDMzMjM5LCAzMzI0OCwgCisgICAgMzMyNTYsIDMzMjY1LCAzMzI3MiwgMzMyNzcsIDMzMjg1LCAzMzI5MCwgMzMyOTgsIDMzMzAzLCAzMzMxMiwgMzMzMTgsIAorICAgIDMzMzI1LCAzMzMzMiwgMzMzMzcsIDMzMzQyLCAzMzM1MCwgMzMzNTgsIDMzMzY3LCAzMzM3NiwgMzMzODEsIDMzMzg4LCAKKyAgICAzMzM5OSwgMzM0MDcsIDMzNDE2LCAzMzQyMSwgMzM0MjcsIDMzNDMyLCAzMzQzOSwgMzM0NDQsIDMzNDUzLCAzMzQ1OCwgCisgICAgMzM0NjMsIDMzNDY4LCAzMzQ3NSwgMzM0ODIsIDMzNDg3LCAzMzQ5NiwgMzM1MDQsIDMzNTA5LCAzMzUxNCwgMzM1MjEsIAorICAgIDMzNTI4LCAzMzUzMiwgMzM1MzYsIDMzNTM5LCAzMzU0MiwgMzM1NDUsIDMzNTQ4LCAzMzU1MSwgMzM1NTQsIDMzNTYxLCAKKyAgICAzMzU2NCwgMzM1NjcsIDMzNTcyLCAzMzU3NiwgMzM1ODAsIDMzNTg0LCAzMzU4OCwgMzM1OTIsIDMzNjAyLCAzMzYwOCwgCisgICAgMzM2MTQsIDMzNjIwLCAzMzYyOCwgMzM2MzYsIDMzNjQyLCAzMzY0OCwgMzM2NTUsIDMzNjYxLCAzMzY2NiwgMzM2NzIsIAorICAgIDMzNjc4LCAzMzY4MywgMzM2ODksIDMzNjk1LCAzMzcwMywgMzM3MDgsIDMzNzE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMzcyMCwgMzM3MjcsIDMzNzM0LCAzMzczOSwgMzM3NDgsIAorICAgIDMzNzU2LCAzMzc2NCwgMzM3NzEsIDMzNzc4LCAzMzc4NSwgMzM3OTIsIDMzODAwLCAzMzgwOCwgMzM4MTgsIDMzODI4LCAKKyAgICAzMzgzNiwgMzM4NDQsIDMzODUyLCAzMzg2MCwgMzM4NjksIDMzODc4LCAzMzg4NiwgMzM4OTQsIDMzOTAzLCAzMzkxMiwgCisgICAgMzM5MjIsIDMzOTMyLCAzMzk0MSwgMzM5NTAsIDMzOTU4LCAzMzk2NiwgMzM5NzQsIDMzOTgyLCAzMzk5MiwgMzQwMDIsIAorICAgIDM0MDEwLCAzNDAxOCwgMzQwMjYsIDM0MDM0LCAzNDA0MiwgMzQwNTAsIDM0MDU4LCAzNDA2NiwgMzQwNzQsIDM0MDgyLCAKKyAgICAzNDA5MCwgMzQwOTgsIDM0MTA3LCAzNDExNiwgMzQxMjUsIDM0MTM0LCAzNDE0NCwgMzQxNTQsIDM0MTYxLCAzNDE2OCwgCisgICAgMzQxNzYsIDM0MTg0LCAzNDE5MywgMzQyMDIsIDM0MjEwLCAzNDIxOCwgMzQyMzAsIDM0MjQyLCAzNDI1MSwgMzQyNjAsIAorICAgIDM0MjY5LCAzNDI3OCwgMzQyODUsIDM0MjkyLCAzNDMwMCwgMzQzMDgsIDM0MzE2LCAzNDMyNCwgMzQzMzIsIDM0MzQwLCAKKyAgICAzNDM0OCwgMzQzNTYsIDM0MzY1LCAzNDM3NCwgMzQzODMsIDM0MzkyLCAzNDQwMSwgMzQ0MTAsIDM0NDIwLCAzNDQzMCwgCisgICAgMzQ0NDAsIDM0NDUwLCAzNDQ1OSwgMzQ0NjgsIDM0NDc1LCAzNDQ4MiwgMzQ0OTAsIDM0NDk4LCAzNDUwNiwgMzQ1MTQsIAorICAgIDM0NTIyLCAzNDUzMCwgMzQ1NDIsIDM0NTU0LCAzNDU2MywgMzQ1NzIsIDM0NTgwLCAzNDU4OCwgMzQ1OTYsIDM0NjA0LCAKKyAgICAzNDYxNSwgMzQ2MjYsIDM0NjM3LCAzNDY0OCwgMzQ2NjAsIDM0NjcyLCAzNDY4MCwgMzQ2ODgsIDM0Njk2LCAzNDcwNCwgCisgICAgMzQ3MTMsIDM0NzIyLCAzNDczMSwgMzQ3NDAsIDM0NzQ4LCAzNDc1NiwgMzQ3NjQsIDM0NzcyLCAzNDc4MCwgMzQ3ODgsIAorICAgIDM0Nzk3LCAzNDgwNiwgMzQ4MTYsIDM0ODI2LCAzNDgzNCwgMzQ4NDIsIDM0ODUwLCAzNDg1OCwgMzQ4NjYsIDM0ODc0LCAKKyAgICAzNDg4MSwgMzQ4ODgsIDM0ODk2LCAzNDkwNCwgMzQ5MTIsIDM0OTIwLCAzNDkyOCwgMzQ5MzYsIDM0OTQ0LCAzNDk1MiwgCisgICAgMzQ5NjAsIDM0OTY4LCAzNDk3NiwgMzQ5ODQsIDM0OTkyLCAzNTAwMCwgMzUwMDgsIDM1MDE2LCAzNTAyNSwgMzUwMzQsIAorICAgIDM1MDQzLCAzNTA1MSwgMzUwNjAsIDM1MDY5LCAzNTA3OCwgMzUwODcsIDM1MDk3LCAzNTEwNiwgMzUxMTIsIDM1MTE3LCAKKyAgICAzNTEyNCwgMzUxMzEsIDM1MTM5LCAzNTE0NywgMzUxNTYsIDM1MTY1LCAzNTE3NSwgMzUxODUsIDM1MTk2LCAzNTIwNywgCisgICAgMzUyMTcsIDM1MjI3LCAzNTIzNywgMzUyNDcsIDM1MjU2LCAzNTI2NSwgMzUyNzUsIDM1Mjg1LCAzNTI5NiwgMzUzMDcsIAorICAgIDM1MzE3LCAzNTMyNywgMzUzMzcsIDM1MzQ3LCAzNTM1NCwgMzUzNjEsIDM1MzY5LCAzNTM3NywgMzUzODQsIDM1MzkxLCAKKyAgICAzNTQwMCwgMzU0MDksIDM1NDE5LCAzNTQyOSwgMzU0NDAsIDM1NDUxLCAzNTQ2MSwgMzU0NzEsIDM1NDgxLCAzNTQ5MSwgCisgICAgMzU1MDAsIDM1NTA5LCAzNTUxNywgMzU1MjUsIDM1NTMyLCAzNTUzOSwgMzU1NDcsIDM1NTU1LCAzNTU2NCwgMzU1NzMsIAorICAgIDM1NTgzLCAzNTU5MywgMzU2MDQsIDM1NjE1LCAzNTYyNSwgMzU2MzUsIDM1NjQ1LCAzNTY1NSwgMzU2NjQsIDM1NjczLCAKKyAgICAzNTY4MywgMzU2OTMsIDM1NzA0LCAzNTcxNSwgMzU3MjUsIDM1NzM1LCAzNTc0NSwgMzU3NTUsIDM1NzYyLCAzNTc2OSwgCisgICAgMzU3NzcsIDM1Nzg1LCAzNTc5NCwgMzU4MDMsIDM1ODEzLCAzNTgyMywgMzU4MzQsIDM1ODQ1LCAzNTg1NSwgMzU4NjUsIAorICAgIDM1ODc1LCAzNTg4NSwgMzU4OTMsIDM1OTAxLCAzNTkwOSwgMzU5MTcsIDM1OTI2LCAzNTkzNSwgMzU5NDMsIDM1OTUxLCAKKyAgICAzNTk1OCwgMzU5NjUsIDM1OTcyLCAzNTk3OSwgMzU5ODcsIDM1OTk1LCAzNjAwMywgMzYwMTEsIDM2MDIyLCAzNjAzMiwgCisgICAgMzYwNDMsIDM2MDUzLCAzNjA2NCwgMzYwNzQsIDM2MDgyLCAzNjA5MCwgMzYxMDEsIDM2MTExLCAzNjEyMiwgMzYxMzIsIAorICAgIDM2MTQzLCAzNjE1MywgMzYxNjEsIDM2MTY5LCAzNjE4MCwgMzYxOTAsIDM2MjAxLCAwLCAwLCAzNjIxMSwgMzYyMTksIAorICAgIDM2MjI3LCAzNjIzOCwgMzYyNDgsIDM2MjU5LCAwLCAwLCAzNjI2OSwgMzYyNzcsIDM2Mjg1LCAzNjI5NiwgMzYzMDYsIAorICAgIDM2MzE3LCAzNjMyNywgMzYzMzgsIDM2MzQ4LCAzNjM1NiwgMzYzNjQsIDM2Mzc1LCAzNjM4NSwgMzYzOTYsIDM2NDA2LCAKKyAgICAzNjQxNywgMzY0MjcsIDM2NDM1LCAzNjQ0MywgMzY0NTQsIDM2NDY0LCAzNjQ3NSwgMzY0ODUsIDM2NDk2LCAzNjUwNiwgCisgICAgMzY1MTQsIDM2NTIyLCAzNjUzMywgMzY1NDMsIDM2NTU0LCAzNjU2NCwgMzY1NzUsIDM2NTg1LCAzNjU5MywgMzY2MDEsIAorICAgIDM2NjEyLCAzNjYyMiwgMzY2MzMsIDAsIDAsIDM2NjQzLCAzNjY1MSwgMzY2NTksIDM2NjcwLCAzNjY4MCwgMzY2OTEsIDAsIAorICAgIDAsIDM2NzAxLCAzNjcwOSwgMzY3MTcsIDM2NzI4LCAzNjczOCwgMzY3NDksIDM2NzU5LCAzNjc3MCwgMCwgMzY3ODAsIDAsIAorICAgIDM2Nzg4LCAwLCAzNjc5OCwgMCwgMzY4MDgsIDM2ODE4LCAzNjgyNiwgMzY4MzQsIDM2ODQ1LCAzNjg1NSwgMzY4NjYsIAorICAgIDM2ODc2LCAzNjg4NywgMzY4OTcsIDM2OTA1LCAzNjkxMywgMzY5MjQsIDM2OTM0LCAzNjk0NSwgMzY5NTUsIDM2OTY2LCAKKyAgICAzNjk3NiwgMzY5ODQsIDM2OTkyLCAzNzAwMCwgMzcwMDgsIDM3MDE2LCAzNzAyNCwgMzcwMzIsIDM3MDQwLCAzNzA0OCwgCisgICAgMzcwNTYsIDM3MDY0LCAzNzA3MiwgMzcwODAsIDAsIDAsIDM3MDg4LCAzNzA5OSwgMzcxMDksIDM3MTIzLCAzNzEzNiwgCisgICAgMzcxNTAsIDM3MTYzLCAzNzE3NywgMzcxOTAsIDM3MjAxLCAzNzIxMSwgMzcyMjUsIDM3MjM4LCAzNzI1MiwgMzcyNjUsIAorICAgIDM3Mjc5LCAzNzI5MiwgMzczMDMsIDM3MzEzLCAzNzMyNywgMzczNDAsIDM3MzU0LCAzNzM2NywgMzczODEsIDM3Mzk0LCAKKyAgICAzNzQwNSwgMzc0MTUsIDM3NDI5LCAzNzQ0MiwgMzc0NTYsIDM3NDY5LCAzNzQ4MywgMzc0OTYsIDM3NTA3LCAzNzUxNywgCisgICAgMzc1MzEsIDM3NTQ0LCAzNzU1OCwgMzc1NzEsIDM3NTg1LCAzNzU5OCwgMzc2MDksIDM3NjE5LCAzNzYzMywgMzc2NDYsIAorICAgIDM3NjYwLCAzNzY3MywgMzc2ODcsIDM3NzAwLCAzNzcwOCwgMzc3MTYsIDM3NzI3LCAzNzczNSwgMCwgMzc3NDYsIDM3NzU0LCAKKyAgICAzNzc2NSwgMzc3NzMsIDM3NzgxLCAzNzc4OSwgMzc3OTcsIDM3ODA1LCAzNzgwOCwgMzc4MTEsIDM3ODE0LCAzNzgxNywgCisgICAgMzc4MjMsIDM3ODM0LCAzNzg0MiwgMCwgMzc4NTMsIDM3ODYxLCAzNzg3MiwgMzc4ODAsIDM3ODg4LCAzNzg5NiwgMzc5MDQsIAorICAgIDM3OTEyLCAzNzkxOCwgMzc5MjQsIDM3OTMwLCAzNzkzOCwgMzc5NDYsIDM3OTU3LCAwLCAwLCAzNzk2OCwgMzc5NzYsIAorICAgIDM3OTg3LCAzNzk5NSwgMzgwMDMsIDM4MDExLCAwLCAzODAxOSwgMzgwMjQsIDM4MDI5LCAzODAzNCwgMzgwNDIsIDM4MDUwLCAKKyAgICAzODA2MSwgMzgwNzIsIDM4MDgwLCAzODA4OCwgMzgwOTYsIDM4MTA3LCAzODExNSwgMzgxMjMsIDM4MTMxLCAzODEzOSwgCisgICAgMzgxNDcsIDM4MTUzLCAzODE1OSwgMCwgMCwgMzgxNjIsIDM4MTczLCAzODE4MSwgMCwgMzgxOTIsIDM4MjAwLCAzODIxMSwgCisgICAgMzgyMTksIDM4MjI3LCAzODIzNSwgMzgyNDMsIDM4MjUxLCAzODI1NCwgMCwgMzgyNTcsIDM4MjYxLCAzODI2NSwgMzgyNjksIAorICAgIDM4MjczLCAzODI3NywgMzgyODEsIDM4Mjg1LCAzODI4OSwgMzgyOTMsIDM4Mjk3LCAzODMwMSwgMzgzMDcsIDM4MzEzLCAKKyAgICAzODMxOSwgMzgzMjIsIDM4MzI1LCAzODMyNywgMzgzMzEsIDM4MzM1LCAzODMzOSwgMzgzNDMsIDM4MzQ1LCAzODM0OSwgCisgICAgMzgzNTMsIDM4MzU5LCAzODM2NSwgMzgzNzIsIDM4Mzc5LCAzODM4NCwgMzgzODksIDM4Mzk1LCAzODQwMSwgMzg0MDMsIAorICAgIDM4NDA2LCAzODQwOCwgMzg0MTIsIDM4NDE2LCAzODQyMCwgMzg0MjMsIDM4NDI3LCAzODQzMSwgMzg0MzUsIDM4NDM5LCAKKyAgICAzODQ0MywgMzg0NDksIDM4NDUzLCAzODQ1NywgMzg0NjMsIDM4NDY4LCAzODQ3NSwgMzg0NzcsIDM4NDgwLCAzODQ4NCwgCisgICAgMzg0ODgsIDM4NDkzLCAzODQ5OSwgMzg1MDEsIDM4NTEwLCAzODUxOSwgMzg1MjIsIDM4NTI2LCAzODUyOCwgMzg1MzAsIAorICAgIDM4NTMyLCAzODUzNSwgMzg1NDEsIDM4NTQzLCAzODU0NywgMzg1NTEsIDM4NTU4LCAzODU2NSwgMzg1NjksIDM4NTc0LCAKKyAgICAzODU3OSwgMzg1ODQsIDM4NTg5LCAzODU5MywgMzg1OTcsIDM4NjAwLCAzODYwNCwgMzg2MDgsIDM4NjE1LCAzODYyMCwgCisgICAgMzg2MjQsIDM4NjI4LCAzODYzMywgMzg2MzcsIDM4NjQxLCAzODY0NiwgMzg2NTEsIDM4NjU1LCAzODY1OSwgMzg2NjMsIAorICAgIDM4NjY1LCAzODY3MCwgMzg2NzUsIDM4Njc5LCAzODY4MywgMzg2ODcsIDM4NjkxLCAwLCAwLCAwLCAwLCAwLCAzODY5NSwgCisgICAgMzg3MDEsIDM4NzA3LCAzODcxNCwgMzg3MjEsIDM4NzI2LCAzODczMSwgMzg3MzUsIDAsIDAsIDM4NzQxLCAzODc0NCwgCisgICAgMzg3NDcsIDM4NzUwLCAzODc1MywgMzg3NTYsIDM4NzU5LCAzODc2MywgMzg3NjcsIDM4NzcyLCAzODc3NywgMzg3ODIsIAorICAgIDM4Nzg4LCAzODc5MiwgMzg3OTUsIDM4Nzk4LCAzODgwMSwgMzg4MDQsIDM4ODA3LCAzODgxMCwgMzg4MTMsIDM4ODE2LCAKKyAgICAzODgxOSwgMzg4MjMsIDM4ODI3LCAzODgzMiwgMzg4MzcsIDAsIDM4ODQyLCAzODg0OCwgMzg4NTQsIDM4ODYwLCAzODg2NywgCisgICAgMzg4NzQsIDM4ODgxLCAzODg4OCwgMzg4OTQsIDM4OTAwLCAzODkwNiwgMzg5MTMsIDM4OTE5LCAwLCAwLCAwLCAzODkyNiwgCisgICAgMzg5MjksIDM4OTMyLCAzODkzNSwgMzg5NDAsIDM4OTQzLCAzODk0NiwgMzg5NDksIDM4OTUyLCAzODk1NSwgMzg5NTgsIAorICAgIDM4OTYyLCAzODk2NSwgMzg5NjgsIDM4OTcxLCAzODk3NCwgMzg5NzcsIDM4OTgyLCAzODk4NSwgMzg5ODgsIDM4OTkxLCAKKyAgICAzODk5NCwgMzg5OTcsIDM5MDAyLCAzOTAwNSwgMzkwMDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MDEzLCAzOTAxOCwgMzkwMjMsIDM5MDMwLCAzOTAzOCwgMzkwNDMsIAorICAgIDM5MDQ4LCAzOTA1MiwgMzkwNTYsIDM5MDYxLCAzOTA2OCwgMzkwNzUsIDM5MDc5LCAzOTA4NCwgMzkwODksIDM5MDk0LCAKKyAgICAzOTA5OSwgMzkxMDYsIDM5MTExLCAzOTExNiwgMzkxMjEsIDM5MTMwLCAzOTEzNywgMzkxNDQsIDM5MTQ4LCAzOTE1MywgCisgICAgMzkxNTksIDM5MTY0LCAzOTE3MSwgMzkxNzksIDM5MTg3LCAzOTE5MSwgMzkxOTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5MTk5LCAzOTIwMywgMzkyMTEsIDM5MjE1LCAzOTIxOSwgMzkyMjQsIDM5MjI4LCAKKyAgICAzOTIzMiwgMzkyMzYsIDM5MjM4LCAzOTI0MiwgMzkyNDYsIDM5MjUwLCAzOTI1NSwgMzkyNTksIDM5MjYzLCAzOTI3MSwgCisgICAgMzkyNzQsIDM5Mjc4LCAzOTI4MSwgMzkyODQsIDM5MjkwLCAzOTI5MywgMzkyOTYsIDM5MzAyLCAzOTMwNiwgMzkzMTAsIAorICAgIDM5MzE0LCAzOTMxNywgMzkzMjEsIDM5MzI0LCAzOTMyOCwgMzkzMzAsIDM5MzMzLCAzOTMzNiwgMzkzNDAsIDM5MzQyLCAKKyAgICAzOTM0NiwgMzkzNDksIDM5MzUyLCAzOTM1NywgMzkzNjIsIDM5MzY5LCAzOTM3MiwgMzkzNzUsIDM5Mzc5LCAzOTM4NCwgCisgICAgMzkzODcsIDM5MzkwLCAzOTM5MywgMzkzOTcsIDM5NDAyLCAzOTQwNSwgMzk0MDgsIDM5NDEwLCAzOTQxMywgMzk0MTYsIAorICAgIDM5NDE5LCAzOTQyMywgMzk0MjgsIDM5NDMxLCAzOTQzNSwgMzk0MzksIDM5NDQzLCAzOTQ0NywgMzk0NTIsIDM5NDU4LCAKKyAgICAzOTQ2MywgMzk0NjgsIDM5NDc0LCAzOTQ3OSwgMzk0ODQsIDM5NDg4LCAzOTQ5MiwgMzk0OTcsIDM5NTAxLCAzOTUwNSwgCisgICAgMzk1MDgsIDM5NTEwLCAzOTUxNSwgMzk1MjEsIDM5NTI4LCAzOTUzNSwgMzk1NDIsIDM5NTQ5LCAzOTU1NiwgMzk1NjMsIAorICAgIDM5NTcwLCAzOTU3NywgMzk1ODUsIDM5NTkyLCAzOTYwMCwgMzk2MDcsIDM5NjE0LCAzOTYyMiwgMzk2MzAsIDM5NjM1LCAKKyAgICAzOTY0MCwgMzk2NDUsIDM5NjUwLCAzOTY1NSwgMzk2NjAsIDM5NjY1LCAzOTY3MCwgMzk2NzUsIDM5NjgwLCAzOTY4NiwgCisgICAgMzk2OTIsIDM5Njk4LCAzOTcwNCwgMzk3MTEsIDM5NzE5LCAzOTcyNiwgMzk3MzIsIDM5NzM4LCAzOTc0NCwgMzk3NTAsIAorICAgIDM5NzU2LCAzOTc2MiwgMzk3NjgsIDM5Nzc0LCAzOTc4MCwgMzk3ODcsIDM5Nzk0LCAzOTgwMSwgMzk4MDgsIDM5ODE2LCAKKyAgICAzOTgyNSwgMzk4MzMsIDM5ODQ0LCAzOTg1MiwgMzk4NjAsIDM5ODY5LCAzOTg3NiwgMzk4ODUsIDM5ODk0LCAzOTkwMiwgCisgICAgMzk5MTEsIDAsIDAsIDAsIDAsIDAsIDAsIDM5OTE5LCAzOTkyMSwgMzk5MjQsIDM5OTI2LCAzOTkyOSwgMzk5MzIsIDM5OTM1LCAKKyAgICAzOTk0MCwgMzk5NDUsIDM5OTUwLCAzOTk1NSwgMzk5NTksIDM5OTYzLCAzOTk2NywgMzk5NzEsIDM5OTc2LCAzOTk4MiwgCisgICAgMzk5ODcsIDM5OTkzLCAzOTk5OCwgNDAwMDMsIDQwMDA4LCA0MDAxNCwgNDAwMTksIDQwMDI1LCA0MDAzMSwgNDAwMzUsIAorICAgIDQwMDM5LCA0MDA0NCwgNDAwNDksIDQwMDU0LCA0MDA1OSwgNDAwNjQsIDQwMDcyLCA0MDA4MCwgNDAwODgsIDQwMDk2LCAKKyAgICA0MDEwMywgNDAxMTEsIDQwMTE4LCA0MDEyNSwgNDAxMzQsIDQwMTQ2LCA0MDE1MywgNDAxNjAsIDQwMTY3LCA0MDE3NCwgCisgICAgNDAxODIsIDQwMTkwLCA0MDE5NywgNDAyMDQsIDQwMjEyLCA0MDIyMCwgNDAyMjUsIDQwMjMzLCA0MDIzOCwgNDAyNDMsIAorICAgIDQwMjQ5LCA0MDI1NCwgNDAyNjAsIDQwMjY3LCA0MDI3NCwgNDAyNzksIDQwMjg1LCA0MDI5MCwgNDAyOTMsIDQwMjk3LCAKKyAgICA0MDMwMCwgNDAzMDQsIDQwMzA4LCA0MDMxMiwgNDAzMTgsIDQwMzI0LCA0MDMzMCwgNDAzMzYsIDQwMzQwLCA0MDM0NCwgCisgICAgNDAzNDgsIDQwMzUyLCA0MDM1OCwgNDAzNjQsIDQwMzY4LCA0MDM3MywgNDAzNzcsIDQwMzgyLCA0MDM4NywgNDAzOTIsIAorICAgIDQwMzk1LCA0MDM5OSwgNDA0MDIsIDQwNDA2LCA0MDQxMywgNDA0MjEsIDQwNDMyLCA0MDQ0MywgNDA0NDgsIDQwNDU3LCAKKyAgICA0MDQ2NCwgNDA0NzMsIDQwNDgyLCA0MDQ4NiwgNDA0OTIsIDQwNTAwLCA0MDUwNCwgNDA1MDksIDQwNTE0LCA0MDUyMCwgCisgICAgNDA1MjYsIDQwNTMyLCA0MDUzOSwgNDA1NDMsIDQwNTQ3LCA0MDU1MiwgNDA1NTUsIDQwNTU3LCA0MDU2MSwgNDA1NjUsIAorICAgIDQwNTczLCA0MDU3NywgNDA1NzksIDQwNTgxLCA0MDU4NSwgNDA1OTMsIDQwNTk4LCA0MDYwNCwgNDA2MTQsIDQwNjIxLCAKKyAgICA0MDYyNiwgNDA2MzAsIDQwNjM0LCA0MDYzOCwgNDA2NDEsIDQwNjQ0LCA0MDY0NywgNDA2NTEsIDQwNjU1LCA0MDY1OSwgCisgICAgNDA2NjMsIDQwNjY3LCA0MDY3MCwgNDA2NzQsIDQwNjc4LCA0MDY4MSwgNDA2ODMsIDQwNjg2LCA0MDY4OCwgNDA2OTIsIAorICAgIDQwNjk2LCA0MDY5OCwgNDA3MDQsIDQwNzA3LCA0MDcxMiwgNDA3MTYsIDQwNzIwLCA0MDcyMiwgNDA3MjQsIDQwNzI2LCAKKyAgICA0MDcyOSwgNDA3MzMsIDQwNzM3LCA0MDc0MSwgNDA3NDUsIDQwNzQ5LCA0MDc1NSwgNDA3NjEsIDQwNzYzLCA0MDc2NSwgCisgICAgNDA3NjcsIDQwNzY5LCA0MDc3MiwgNDA3NzQsIDQwNzc4LCA0MDc4MCwgNDA3ODQsIDQwNzg4LCA0MDc5MywgNDA3OTcsIAorICAgIDQwODAxLCA0MDgwNSwgNDA4MDksIDQwODEzLCA0MDgxOSwgNDA4MjMsIDQwODMzLCA0MDg0MywgNDA4NDcsIDQwODUzLCAKKyAgICA0MDg1OSwgNDA4NjMsIDQwODY3LCA0MDg3MCwgNDA4NzUsIDQwODc5LCA0MDg4NSwgNDA4ODksIDQwOTAxLCA0MDkwOSwgCisgICAgNDA5MTMsIDQwOTE3LCA0MDkyMywgNDA5MjcsIDQwOTMwLCA0MDkzMiwgNDA5MzUsIDQwOTM5LCA0MDk0MywgNDA5NTAsIAorICAgIDQwOTU0LCA0MDk1OCwgNDA5NjIsIDQwOTY1LCA0MDk3MCwgNDA5NzUsIDQwOTgwLCA0MDk4NSwgNDA5OTAsIDQwOTk1LCAKKyAgICA0MTAwMywgNDEwMTEsIDQxMDE1LCA0MTAxOSwgNDEwMjEsIDQxMDI2LCA0MTAzMCwgNDEwMzQsIDQxMDQyLCA0MTA1MCwgCisgICAgNDEwNTYsIDQxMDYyLCA0MTA3MSwgNDEwODAsIDQxMDg1LCA0MTA5MCwgNDEwOTgsIDQxMTA2LCA0MTEwOCwgNDExMTAsIAorICAgIDQxMTE1LCA0MTEyMCwgNDExMjYsIDQxMTMyLCA0MTEzOCwgNDExNDQsIDQxMTQ4LCA0MTE1MiwgNDExNTksIDQxMTY2LCAKKyAgICA0MTE3MiwgNDExNzgsIDQxMTg4LCA0MTE5OCwgNDEyMDYsIDQxMjE0LCA0MTIxNiwgNDEyMjAsIDQxMjI0LCA0MTIyOSwgCisgICAgNDEyMzQsIDQxMjQxLCA0MTI0OCwgNDEyNTEsIDQxMjU0LCA0MTI1NywgNDEyNjAsIDQxMjYzLCA0MTI2OCwgNDEyNzIsIAorICAgIDQxMjc3LCA0MTI4MiwgNDEyODUsIDQxMjg4LCA0MTI5MSwgNDEyOTQsIDQxMjk3LCA0MTMwMSwgNDEzMDQsIDQxMzA3LCAKKyAgICA0MTMxMCwgNDEzMTMsIDQxMzE1LCA0MTMxNywgNDEzMTksIDQxMzIxLCA0MTMyOSwgNDEzMzcsIDQxMzQzLCA0MTM0NywgCisgICAgNDEzNTMsIDQxMzYzLCA0MTM2OSwgNDEzNzUsIDQxMzgxLCA0MTM4OSwgNDEzOTcsIDQxNDA4LCA0MTQxMiwgNDE0MTYsIAorICAgIDQxNDE4LCA0MTQyNCwgNDE0MjYsIDQxNDI4LCA0MTQzMCwgNDE0MzIsIDQxNDM4LCA0MTQ0MSwgNDE0NDcsIDQxNDUzLCAKKyAgICA0MTQ1NywgNDE0NjEsIDQxNDY1LCA0MTQ2OCwgNDE0NzIsIDQxNDc2LCA0MTQ3OCwgNDE0ODcsIDQxNDk2LCA0MTUwMSwgCisgICAgNDE1MDYsIDQxNTEyLCA0MTUxOCwgNDE1MjQsIDQxNTI3LCA0MTUzMCwgNDE1MzMsIDQxNTM2LCA0MTUzOCwgNDE1NDMsIAorICAgIDQxNTQ4LCA0MTU1MywgNDE1NTksIDQxNTY1LCA0MTU3MywgNDE1ODEsIDQxNTg3LCA0MTU5MywgNDE1OTksIDQxNjA1LCAKKyAgICA0MTYxNCwgNDE2MjMsIDQxNjMyLCA0MTY0MSwgNDE2NTAsIDQxNjU5LCA0MTY2OCwgNDE2NzcsIDQxNjg2LCA0MTY5NSwgCisgICAgNDE3MDMsIDQxNzE1LCA0MTcyNSwgNDE3NDAsIDQxNzQzLCA0MTc0OCwgNDE3NTQsIDQxNzYwLCA0MTc2NywgNDE3ODEsIAorICAgIDQxNzk2LCA0MTgwMiwgNDE4MDgsIDQxODE1LCA0MTgyMSwgNDE4MjksIDQxODM1LCA0MTg0OCwgNDE4NjIsIDQxODY3LCAKKyAgICA0MTg3MywgNDE4ODAsIDQxODgzLCA0MTg4NiwgNDE4ODgsIDQxODkxLCA0MTg5NCwgNDE4OTYsIDQxODk4LCA0MTkwMiwgCisgICAgNDE5MDUsIDQxOTA4LCA0MTkxMSwgNDE5MTQsIDQxOTE5LCA0MTkyNCwgNDE5MjksIDQxOTM0LCA0MTkzOSwgNDE5NDIsIAorICAgIDQxOTQ0LCA0MTk0NiwgNDE5NDgsIDQxOTUyLCA0MTk1NiwgNDE5NjAsIDQxOTY2LCA0MTk3MSwgNDE5NzMsIDQxOTc1LCAKKyAgICA0MTk4MCwgNDE5ODUsIDQxOTkwLCA0MTk5NSwgNDIwMDAsIDQyMDA1LCA0MjAwNywgNDIwMDksIDQyMDE4LCA0MjAyMiwgCisgICAgNDIwMzAsIDQyMDM5LCA0MjA0MSwgNDIwNDYsIDQyMDUxLCA0MjA1OSwgNDIwNjMsIDQyMDY1LCA0MjA2OSwgNDIwNzEsIAorICAgIDQyMDc1LCA0MjA3OSwgNDIwODMsIDQyMDg1LCA0MjA4NywgNDIwODksIDQyMDk0LCA0MjEwMSwgNDIxMDgsIDQyMTE1LCAKKyAgICA0MjEyMiwgNDIxMjksIDQyMTM2LCA0MjE0MywgNDIxNTAsIDQyMTU2LCA0MjE2MiwgNDIxNjksIDQyMTc2LCA0MjE4MywgCisgICAgNDIxOTAsIDQyMTk2LCA0MjIwMiwgNDIyMDksIDQyMjE2LCA0MjIyMywgNDIyMzEsIDQyMjM4LCA0MjI0NiwgNDIyNTMsIAorICAgIDQyMjYxLCA0MjI2OCwgNDIyNzYsIDQyMjg0LCA0MjI5MSwgNDIyOTksIDQyMzA2LCA0MjMxNCwgNDIzMjEsIDQyMzI5LCAKKyAgICA0MjMzNiwgNDIzNDMsIDQyMzUwLCA0MjM1NywgNDIzNjQsIDQyMzcyLCA0MjM3OSwgNDIzODYsIDQyMzkzLCA0MjQwMSwgCisgICAgNDI0MDgsIDQyNDE1LCA0MjQyMiwgNDI0MjksIDQyNDM3LCA0MjQ0NSwgNDI0NTIsIDQyNDU5LCA0MjQ2NSwgNDI0NzIsIAorICAgIDQyNDc3LCA0MjQ4NCwgNDI0OTEsIDQyNTAwLCA0MjUwNywgNDI1MTUsIDQyNTIzLCA0MjUyOCwgNDI1MzMsIDQyNTM4LCAKKyAgICA0MjU0NSwgNDI1NTIsIDQyNTU5LCA0MjU2NiwgNDI1NzEsIDQyNTc2LCA0MjU4NSwgNDI1OTEsIDQyNTk0LCA0MjYwMiwgCisgICAgNDI2MDUsIDQyNjEwLCA0MjYxNSwgNDI2MTgsIDQyNjIxLCA0MjYyOSwgNDI2MzIsIDQyNjM3LCA0MjY0MCwgNDI2NDcsIAorICAgIDQyNjUyLCA0MjY2MCwgNDI2NjMsIDQyNjY2LCA0MjY2OSwgNDI2NzQsIDQyNjc5LCA0MjY4MiwgNDI2ODUsIDQyNjkzLCAKKyAgICA0MjY5NiwgNDI3MDEsIDQyNzA4LCA0MjcxMiwgNDI3MTYsIDQyNzIxLCA0MjcyNiwgNDI3MzIsIDQyNzM3LCA0Mjc0MywgCisgICAgNDI3NDksIDQyNzU0LCA0Mjc2MCwgNDI3NjgsIDQyNzc0LCA0Mjc4MiwgNDI3OTAsIDQyNzk2LCA0MjgwNCwgNDI4MTIsIAorICAgIDQyODIxLCA0MjgyOSwgNDI4MzUsIDQyODQzLCA0Mjg1MiwgNDI4NjAsIDQyODY0LCA0Mjg2OSwgNDI4ODIsIDQyODk1LCAKKyAgICA0Mjg5OSwgNDI5MDMsIDQyOTA3LCA0MjkxMSwgNDI5MjEsIDQyOTI1LCA0MjkzMCwgNDI5MzUsIDQyOTQwLCA0Mjk0NSwgCisgICAgNDI5NTAsIDQyOTU1LCA0Mjk2NSwgNDI5NzUsIDQyOTgzLCA0Mjk5MywgNDMwMDMsIDQzMDExLCA0MzAyMSwgNDMwMzEsIAorICAgIDQzMDM5LCA0MzA0OSwgNDMwNTksIDQzMDY3LCA0MzA3NSwgNDMwODUsIDQzMDk1LCA0MzA5OCwgNDMxMDEsIDQzMTA0LCAKKyAgICA0MzEwOSwgNDMxMTMsIDQzMTE5LCA0MzEyNiwgNDMxMzMsIDQzMTQxLCA0MzE0OCwgNDMxNTIsIDQzMTU2LCA0MzE2MCwgCisgICAgNDMxNjQsIDQzMTY2LCA0MzE3MCwgNDMxNzQsIDQzMTc5LCA0MzE4NCwgNDMxOTEsIDQzMTk4LCA0MzIwMSwgNDMyMDgsIAorICAgIDQzMjEwLCA0MzIxMiwgNDMyMTYsIDQzMjIwLCA0MzIyNSwgNDMyMzEsIDQzMjM3LCA0MzI0MywgNDMyNDksIDQzMjU4LCAKKyAgICA0MzI2NywgNDMyNzYsIDQzMjgwLCA0MzI4MiwgNDMyODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQzMjkzLCA0MzI5NywgNDMzMDQsIDQzMzExLCA0MzMxOCwgNDMzMjUsIDQzMzI5LCA0MzMzMywgNDMzMzcsIDQzMzQxLCAKKyAgICA0MzM0NiwgNDMzNTIsIDQzMzU3LCA0MzM2MywgNDMzNjksIDQzMzc1LCA0MzM4MSwgNDMzODksIDQzMzk2LCA0MzQwMywgCisgICAgNDM0MTAsIDQzNDE3LCA0MzQyMiwgNDM0MjgsIDQzNDM3LCA0MzQ0MSwgNDM0NDgsIDQzNDUyLCA0MzQ1NiwgNDM0NjIsIAorICAgIDQzNDY4LCA0MzQ3NCwgNDM0ODAsIDQzNDg0LCA0MzQ4OCwgNDM0OTEsIDQzNDk1LCA0MzQ5OSwgNDM1MDYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzNTEzLCAKKyAgICA0MzUxNiwgNDM1MjAsIDQzNTI0LCA0MzUzMCwgNDM1MzYsIDQzNTQyLCA0MzU1MCwgNDM1NTcsIDQzNTYxLCA0MzU2OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM1NzQsIDQzNTc3LCAKKyAgICA0MzU4MCwgNDM1ODMsIDQzNTg2LCA0MzU4OSwgNDM1OTIsIDQzNTk1LCA0MzU5OCwgNDM2MDEsIDQzNjA1LCA0MzYwOSwgCisgICAgNDM2MTMsIDQzNjE3LCA0MzYyMSwgNDM2MjUsIDQzNjI5LCA0MzYzMywgNDM2MzcsIDQzNjQxLCA0MzY0NSwgNDM2NDgsIAorICAgIDQzNjUxLCA0MzY1NCwgNDM2NTcsIDQzNjYwLCA0MzY2MywgNDM2NjYsIDQzNjY5LCA0MzY3MiwgNDM2NzYsIDQzNjgwLCAKKyAgICA0MzY4NCwgNDM2ODgsIDQzNjkyLCA0MzY5NiwgNDM3MDAsIDQzNzA0LCA0MzcwOCwgNDM3MTIsIDQzNzE2LCA0MzcyMiwgCisgICAgNDM3MjgsIDQzNzM0LCA0Mzc0MSwgNDM3NDgsIDQzNzU1LCA0Mzc2MiwgNDM3NjksIDQzNzc2LCA0Mzc4MywgNDM3OTAsIAorICAgIDQzNzk3LCA0MzgwNCwgNDM4MTEsIDQzODE4LCA0MzgyNSwgNDM4MzIsIDQzODM5LCA0Mzg0NiwgNDM4NTMsIDQzODU4LCAKKyAgICA0Mzg2NCwgNDM4NzAsIDQzODc2LCA0Mzg4MSwgNDM4ODcsIDQzODkzLCA0Mzg5OSwgNDM5MDQsIDQzOTEwLCA0MzkxNiwgCisgICAgNDM5MjEsIDQzOTI2LCA0MzkzMSwgNDM5MzYsIDQzOTQyLCA0Mzk0OCwgNDM5NTMsIDQzOTU4LCA0Mzk2NCwgNDM5NjksIAorICAgIDQzOTc1LCA0Mzk4MSwgNDM5ODcsIDQzOTkzLCA0Mzk5OSwgNDQwMDQsIDQ0MDEwLCA0NDAxNiwgNDQwMjIsIDQ0MDI3LCAKKyAgICA0NDAzMywgNDQwMzksIDQ0MDQ1LCA0NDA1MCwgNDQwNTYsIDQ0MDYyLCA0NDA2NywgNDQwNzIsIDQ0MDc3LCA0NDA4MiwgCisgICAgNDQwODgsIDQ0MDk0LCA0NDA5OSwgNDQxMDQsIDQ0MTEwLCA0NDExNSwgNDQxMjEsIDQ0MTI3LCA0NDEzMywgNDQxMzksIAorICAgIDQ0MTQ1LCA0NDE1MCwgNDQxNTYsIDQ0MTYyLCA0NDE2OCwgNDQxNzMsIDQ0MTc5LCA0NDE4NSwgNDQxOTEsIDQ0MTk2LCAKKyAgICA0NDIwMiwgNDQyMDgsIDQ0MjEzLCA0NDIxOCwgNDQyMjMsIDQ0MjI4LCA0NDIzNCwgNDQyNDAsIDQ0MjQ1LCA0NDI1MCwgCisgICAgNDQyNTYsIDQ0MjYxLCA0NDI2NywgNDQyNzMsIDQ0Mjc5LCA0NDI4NSwgNDQyOTEsIDQ0Mjk1LCA0NDMwMCwgNDQzMDUsIAorICAgIDQ0MzEwLCA0NDMxNSwgNDQzMjAsIDQ0MzI1LCA0NDMzMCwgNDQzMzUsIDQ0MzQwLCA0NDM0NSwgNDQzNDksIDQ0MzUzLCAKKyAgICA0NDM1NywgNDQzNjEsIDQ0MzY1LCA0NDM2OSwgNDQzNzMsIDQ0Mzc3LCA0NDM4MSwgNDQzODYsIDQ0MzkxLCA0NDM5NiwgCisgICAgNDQ0MDEsIDQ0NDA2LCA0NDQxMSwgNDQ0MjAsIDQ0NDI5LCA0NDQzOCwgNDQ0NDcsIDQ0NDU2LCA0NDQ2NSwgNDQ0NzQsIAorICAgIDQ0NDgzLCA0NDQ5MCwgNDQ0OTgsIDQ0NTA2LCA0NDUxMywgNDQ1MjAsIDQ0NTI4LCA0NDUzNiwgNDQ1NDMsIDQ0NTUwLCAKKyAgICA0NDU1OCwgNDQ1NjYsIDQ0NTczLCA0NDU4MCwgNDQ1ODgsIDQ0NTk2LCA0NDYwMywgNDQ2MTAsIDQ0NjE4LCA0NDYyNywgCisgICAgNDQ2MzYsIDQ0NjQ0LCA0NDY1MywgNDQ2NjIsIDQ0NjY5LCA0NDY3NiwgNDQ2ODQsIDQ0NjkzLCA0NDcwMiwgNDQ3MTAsIAorICAgIDQ0NzE5LCA0NDcyOCwgNDQ3MzUsIDQ0NzQyLCA0NDc1MSwgNDQ3NjAsIDQ0NzY4LCA0NDc3NiwgNDQ3ODUsIDQ0Nzk0LCAKKyAgICA0NDgwMSwgNDQ4MDgsIDQ0ODE3LCA0NDgyNiwgNDQ4MzQsIDQ0ODQyLCA0NDg1MSwgNDQ4NjAsIDQ0ODY3LCA0NDg3NCwgCisgICAgNDQ4ODMsIDQ0ODkyLCA0NDkwMCwgNDQ5MDksIDQ0OTE4LCA0NDkyNiwgNDQ5MzYsIDQ0OTQ2LCA0NDk1NiwgNDQ5NjYsIAorICAgIDQ0OTc1LCA0NDk4NCwgNDQ5OTMsIDQ1MDAyLCA0NTAwOSwgNDUwMTcsIDQ1MDI1LCA0NTAzMywgNDUwNDEsIDQ1MDQ2LCAKKyAgICA0NTA1MSwgNDUwNjAsIDQ1MDY4LCA0NTA3NSwgNDUwODQsIDQ1MDkyLCA0NTA5OSwgNDUxMDgsIDQ1MTE2LCA0NTEyMywgCisgICAgNDUxMzIsIDQ1MTQwLCA0NTE0NywgNDUxNTYsIDQ1MTY0LCA0NTE3MSwgNDUxODAsIDQ1MTg4LCA0NTE5NSwgNDUyMDQsIAorICAgIDQ1MjEyLCA0NTIxOSwgNDUyMjgsIDQ1MjM2LCA0NTI0MywgNDUyNTIsIDQ1MjYwLCA0NTI2NywgNDUyNzYsIDQ1Mjg1LCAKKyAgICA0NTI5NCwgNDUzMDMsIDQ1MzE3LCA0NTMzMSwgNDUzMzgsIDQ1MzQzLCA0NTM0OCwgNDUzNTMsIDQ1MzU4LCA0NTM2MywgCisgICAgNDUzNjgsIDQ1MzczLCA0NTM3OCwgNDUzODYsIDQ1Mzk0LCA0NTQwMiwgNDU0MTAsIDQ1NDE1LCA0NTQyMiwgNDU0MjksIAorICAgIDQ1NDM2LCA0NTQ0MSwgNDU0NDksIDQ1NDU2LCA0NTQ2NCwgNDU0NjgsIDQ1NDc1LCA0NTQ4MSwgNDU0ODgsIDQ1NDkyLCAKKyAgICA0NTQ5OCwgNDU1MDQsIDQ1NTEwLCA0NTUxNCwgNDU1MTcsIDQ1NTIxLCA0NTUyNSwgNDU1MzIsIDQ1NTM4LCA0NTU0NCwgCisgICAgNDU1NTAsIDQ1NTU2LCA0NTU3MCwgNDU1ODAsIDQ1NTk0LCA0NTYwOCwgNDU2MTQsIDQ1NjI0LCA0NTYzOCwgNDU2NDEsIAorICAgIDQ1NjQ0LCA0NTY1MSwgNDU2NTksIDQ1NjY0LCA0NTY2OSwgNDU2NzcsIDQ1Njg5LCA0NTcwMSwgNDU3MDksIDQ1NzEzLCAKKyAgICA0NTcxNywgNDU3MjAsIDQ1NzIzLCA0NTcyNywgNDU3MzEsIDQ1NzM0LCA0NTczNywgNDU3NDIsIDQ1NzQ3LCA0NTc1MywgCisgICAgNDU3NTksIDQ1NzY0LCA0NTc2OSwgNDU3NzUsIDQ1NzgxLCA0NTc4NiwgNDU3OTEsIDQ1Nzk2LCA0NTgwMSwgNDU4MDcsIAorICAgIDQ1ODEzLCA0NTgxOCwgNDU4MjMsIDQ1ODI5LCA0NTgzNSwgNDU4NDAsIDQ1ODQ1LCA0NTg0OCwgNDU4NTEsIDQ1ODYwLCAKKyAgICA0NTg2MiwgNDU4NjQsIDQ1ODY3LCA0NTg3MSwgNDU4NzcsIDQ1ODc5LCA0NTg4MiwgNDU4ODksIDQ1ODk2LCA0NTkwNCwgCisgICAgNDU5MTIsIDQ1OTIyLCA0NTkzNiwgNDU5NDEsIDQ1OTQ2LCA0NTk1MCwgNDU5NTUsIDQ1OTYzLCA0NTk3MSwgNDU5ODAsIAorICAgIDQ1OTg5LCA0NTk5OCwgNDYwMDcsIDQ2MDEyLCA0NjAxNywgNDYwMjMsIDQ2MDI5LCA0NjAzNSwgNDYwNDEsIDQ2MDQ0LCAKKyAgICA0NjA1MCwgNDYwNTYsIDQ2MDY2LCA0NjA3NiwgNDYwODQsIDQ2MDkyLCA0NjEwMSwgNDYxMTAsIDQ2MTE0LCA0NjEyMiwgCisgICAgNDYxMzAsIDQ2MTM4LCA0NjE0NiwgNDYxNTUsIDQ2MTY0LCA0NjE3MywgNDYxODIsIDQ2MTg3LCA0NjE5MiwgNDYxOTcsIAorICAgIDQ2MjAyLCA0NjIwNywgNDYyMTMsIDQ2MjE5LCA0NjIyNCwgNDYyMzAsIDQ2MjMyLCA0NjIzNCwgNDYyMzYsIDQ2MjM4LCAKKyAgICA0NjI0MSwgNDYyNDQsIDQ2MjQ2LCA0NjI0OCwgNDYyNTAsIDQ2MjU0LCA0NjI1OCwgNDYyNjAsIDQ2MjYyLCA0NjI2NSwgCisgICAgNDYyNjgsIDQ2MjcyLCA0NjI3OCwgNDYyODQsIDQ2Mjg2LCA0NjI5MywgNDYyOTcsIDQ2MzAyLCA0NjMwNywgNDYzMDksIAorICAgIDQ2MzE5LCA0NjMyNSwgNDYzMzEsIDQ2MzM3LCA0NjM0MywgNDYzNDksIDQ2MzU1LCA0NjM2MCwgNDYzNjMsIDQ2MzY2LCAKKyAgICA0NjM2OSwgNDYzNzEsIDQ2MzczLCA0NjM3NywgNDYzODEsIDQ2Mzg2LCA0NjM5MSwgNDYzOTYsIDQ2Mzk5LCA0NjQwMywgCisgICAgNDY0MDgsIDQ2NDExLCA0NjQxNSwgNDY0MjAsIDQ2NDI1LCA0NjQzMCwgNDY0MzUsIDQ2NDQwLCA0NjQ0NSwgNDY0NTAsIAorICAgIDQ2NDU1LCA0NjQ2MCwgNDY0NjUsIDQ2NDcwLCA0NjQ3NSwgNDY0ODEsIDQ2NDg3LCA0NjQ5MywgNDY0OTUsIDQ2NDk4LCAKKyAgICA0NjUwMCwgNDY1MDMsIDQ2NTA1LCA0NjUwNywgNDY1MDksIDQ2NTExLCA0NjUxMywgNDY1MTUsIDQ2NTE3LCA0NjUxOSwgCisgICAgNDY1MjEsIDQ2NTIzLCA0NjUyNSwgNDY1MjcsIDQ2NTI5LCA0NjUzMSwgNDY1MzMsIDQ2NTM1LCA0NjUzNywgNDY1NDIsIAorICAgIDQ2NTQ3LCA0NjU1MiwgNDY1NTcsIDQ2NTYyLCA0NjU2NywgNDY1NzIsIDQ2NTc3LCA0NjU4MiwgNDY1ODcsIDQ2NTkyLCAKKyAgICA0NjU5NywgNDY2MDIsIDQ2NjA3LCA0NjYxMiwgNDY2MTcsIDQ2NjIyLCA0NjYyNywgNDY2MzIsIDQ2NjM3LCA0NjY0MSwgCisgICAgNDY2NDUsIDQ2NjQ5LCA0NjY1NSwgNDY2NjEsIDQ2NjY2LCA0NjY3MSwgNDY2NzYsIDQ2NjgxLCA0NjY4NiwgNDY2OTEsIAorICAgIDQ2Njk5LCA0NjcwNywgNDY3MTUsIDQ2NzIzLCA0NjczMSwgNDY3MzksIDQ2NzQ3LCA0Njc1NSwgNDY3NjEsIDQ2NzY2LCAKKyAgICA0Njc3MSwgNDY3NzYsIDQ2Nzc5LCA0Njc4MywgNDY3ODcsIDQ2NzkxLCA0Njc5NSwgNDY3OTksIDQ2ODAzLCA0NjgxMCwgCisgICAgNDY4MTcsIDQ2ODI1LCA0NjgzMywgNDY4MzgsIDQ2ODQzLCA0Njg1MCwgNDY4NTcsIDQ2ODY0LCA0Njg3MSwgNDY4NzQsIAorICAgIDQ2ODc3LCA0Njg4MiwgNDY4ODQsIDQ2ODg4LCA0Njg5MywgNDY4OTUsIDQ2ODk3LCA0Njg5OSwgNDY5MDEsIDQ2OTA2LCAKKyAgICA0NjkwOSwgNDY5MTEsIDQ2OTE2LCA0NjkyMywgNDY5MzAsIDQ2OTMzLCA0NjkzNywgNDY5NDIsIDQ2OTQ3LCA0Njk1NSwgCisgICAgNDY5NjEsIDQ2OTY3LCA0Njk3OSwgNDY5ODYsIDQ2OTkzLCA0Njk5OCwgNDcwMDMsIDQ3MDA5LCA0NzAxMiwgNDcwMTUsIAorICAgIDQ3MDIwLCA0NzAyMiwgNDcwMjYsIDQ3MDI4LCA0NzAzMCwgNDcwMzIsIDQ3MDM0LCA0NzAzNiwgNDcwMzgsIDQ3MDQzLCAKKyAgICA0NzA0NSwgNDcwNDcsIDQ3MDQ5LCA0NzA1MSwgNDcwNTUsIDQ3MDU3LCA0NzA2MCwgNDcwNjUsIDQ3MDcwLCA0NzA3NSwgCisgICAgNDcwODAsIDQ3MDg2LCA0NzA5MiwgNDcwOTQsIDQ3MDk3LCA0NzEwNCwgNDcxMTEsIDQ3MTE4LCA0NzEyNSwgNDcxMjksIAorICAgIDQ3MTMzLCA0NzEzNSwgNDcxMzcsIDQ3MTQxLCA0NzE0NywgNDcxNTIsIDQ3MTU0LCA0NzE1OCwgNDcxNjcsIDQ3MTc1LCAKKyAgICA0NzE4MywgNDcxODksIDQ3MTk1LCA0NzIwMCwgNDcyMDYsIDQ3MjExLCA0NzIxNCwgNDcyMjgsIDQ3MjMxLCA0NzIzNiwgCisgICAgNDcyNDEsIDQ3MjQ3LCA0NzI1NywgNDcyNTksIDQ3MjY1LCA0NzI3MSwgNDcyNzUsIDQ3MjgyLCA0NzI4NiwgNDcyODgsIAorICAgIDQ3MjkwLCA0NzI5NCwgNDczMDAsIDQ3MzA1LCA0NzMxMSwgNDczMTMsIDQ3MzE5LCA0NzMyMSwgNDczMjcsIDQ3MzI5LCAKKyAgICA0NzMzMSwgNDczMzYsIDQ3MzM4LCA0NzM0MiwgNDczNDcsIDQ3MzQ5LCA0NzM1NCwgNDczNTksIDQ3MzYzLCA0NzM3MCwgMCwgCisgICAgNDczODAsIDQ3Mzg2LCA0NzM4OSwgNDczOTUsIDQ3Mzk4LCA0NzQwMywgNDc0MDgsIDQ3NDEyLCA0NzQxNCwgNDc0MTYsIAorICAgIDQ3NDIwLCA0NzQyNCwgNDc0MjgsIDQ3NDMyLCA0NzQzNywgNDc0MzksIDQ3NDQ0LCA0NzQ0NywgNDc0NTAsIDQ3NDUzLCAKKyAgICA0NzQ1NywgNDc0NjEsIDQ3NDY2LCA0NzQ3MCwgNDc0NzUsIDQ3NDgwLCA0NzQ4NCwgNDc0OTAsIDQ3NDk3LCA0NzUwMCwgCisgICAgNDc1MDYsIDQ3NTExLCA0NzUxNSwgNDc1MjAsIDQ3NTI2LCA0NzUzMiwgNDc1MzksIDQ3NTQ1LCA0NzU1MiwgNDc1NTksIAorICAgIDQ3NTYxLCA0NzU2OCwgNDc1NzIsIDQ3NTc5LCA0NzU4NSwgNDc1OTAsIDQ3NTk2LCA0NzYwMCwgNDc2MDUsIDQ3NjA4LCAKKyAgICA0NzYxNCwgNDc2MjAsIDQ3NjI3LCA0NzYzNSwgNDc2NDIsIDQ3NjUxLCA0NzY2MSwgNDc2NjgsIDQ3Njc0LCA0NzY3OCwgCisgICAgNDc2ODYsIDQ3NjkxLCA0NzcwMCwgNDc3MDMsIDQ3NzA2LCA0NzcxNSwgNDc3MjYsIDQ3NzMzLCA0NzczNSwgNDc3NDEsIAorICAgIDQ3NzQ2LCA0Nzc0OCwgNDc3NTEsIDQ3NzU1LCA0Nzc2MywgNDc3NzIsIDQ3Nzc1LCA0Nzc4MCwgNDc3ODUsIDQ3NzkzLCAKKyAgICA0NzgwMSwgNDc4MDksIDQ3ODE3LCA0NzgyMywgNDc4MjksIDQ3ODM1LCA0Nzg0MywgNDc4NDgsIDQ3ODUxLCA0Nzg1NSwgCisgICAgNDc4NTgsIDQ3ODcwLCA0Nzg4MCwgNDc4OTEsIDQ3OTAwLCA0NzkxMSwgNDc5MjEsIDQ3OTMwLCA0NzkzNiwgNDc5NDQsIAorICAgIDQ3OTQ4LCA0Nzk1NiwgNDc5NjAsIDQ3OTY4LCA0Nzk3NSwgNDc5ODIsIDQ3OTkxLCA0ODAwMCwgNDgwMTAsIDQ4MDIwLCAKKyAgICA0ODAzMCwgNDgwNDAsIDQ4MDQ5LCA0ODA1OCwgNDgwNjgsIDQ4MDc4LCA0ODA4NywgNDgwOTYsIDQ4MTAyLCA0ODEwOCwgCisgICAgNDgxMTQsIDQ4MTIwLCA0ODEyNiwgNDgxMzIsIDQ4MTM4LCA0ODE0NCwgNDgxNTAsIDQ4MTU3LCA0ODE2MywgNDgxNjksIAorICAgIDQ4MTc1LCA0ODE4MSwgNDgxODcsIDQ4MTkzLCA0ODE5OSwgNDgyMDUsIDQ4MjExLCA0ODIxOCwgNDgyMjUsIDQ4MjMyLCAKKyAgICA0ODIzOSwgNDgyNDYsIDQ4MjUzLCA0ODI2MCwgNDgyNjcsIDQ4Mjc0LCA0ODI4MSwgNDgyODksIDQ4Mjk0LCA0ODI5NywgCisgICAgNDgzMDEsIDQ4MzA1LCA0ODMxMSwgNDgzMTQsIDQ4MzIwLCA0ODMyNiwgNDgzMzEsIDQ4MzM1LCA0ODM0MCwgNDgzNDYsIAorICAgIDQ4MzUzLCA0ODM1NiwgNDgzNjMsIDQ4MzcwLCA0ODM3NCwgNDgzODMsIDQ4MzkyLCA0ODM5NywgNDg0MDMsIDQ4NDA4LCAKKyAgICA0ODQxMywgNDg0MjAsIDQ4NDI3LCA0ODQzNSwgNDg0NDMsIDQ4NDUyLCA0ODQ1NiwgNDg0NjUsIDQ4NDcwLCA0ODQ3NCwgCisgICAgNDg0ODEsIDQ4NDg1LCA0ODQ5MiwgNDg1MDAsIDQ4NTA1LCA0ODUxMywgNDg1MTcsIDQ4NTIyLCA0ODUyNiwgNDg1MzEsIAorICAgIDQ4NTM1LCA0ODU0MCwgNDg1NDUsIDQ4NTU0LCA0ODU1NiwgNDg1NjAsIDQ4NTY0LCA0ODU3MSwgNDg1NzgsIDQ4NTgzLCAKKyAgICA0ODU5MSwgNDg1OTcsIDAsIDQ4NjAzLCAwLCA0ODYwNiwgNDg2MTEsIDQ4NjE2LCA0ODYyNCwgNDg2MjgsIDQ4NjM1LCAKKyAgICA0ODY0MywgNDg2NTEsIDQ4NjU2LCA0ODY2MSwgNDg2NjcsIDQ4NjcyLCA0ODY3NywgNDg2ODMsIDQ4Njg4LCA0ODY5MSwgCisgICAgNDg2OTUsIDQ4Njk5LCA0ODcwNiwgNDg3MTUsIDQ4NzIwLCA0ODcyOSwgNDg3MzgsIDQ4NzQ0LCA0ODc1MCwgNDg3NTUsIAorICAgIDQ4NzYwLCA0ODc2NSwgNDg3NzAsIDQ4Nzc2LCA0ODc4MiwgNDg3OTAsIDQ4Nzk4LCA0ODgwNCwgNDg4MTAsIDQ4ODE1LCAKKyAgICA0ODgyMCwgNDg4MjcsIDQ4ODM0LCA0ODg0MCwgNDg4NDMsIDQ4ODQ2LCA0ODg1MCwgNDg4NTQsIDQ4ODU4LCA0ODg2MywgCisgICAgNDg4NjksIDQ4ODc1LCA0ODg4MiwgNDg4ODksIDQ4ODk0LCA0ODg5OCwgNDg5MDIsIDQ4OTA2LCA0ODkxMCwgNDg5MTQsIAorICAgIDQ4OTE4LCA0ODkyMiwgNDg5MjYsIDQ4OTMwLCA0ODkzNCwgNDg5MzgsIDQ4OTQyLCA0ODk0NiwgNDg5NTAsIDQ4OTU0LCAKKyAgICA0ODk1OCwgNDg5NjIsIDQ4OTY2LCA0ODk3MCwgNDg5NzQsIDQ4OTc4LCA0ODk4MiwgNDg5ODYsIDQ4OTkwLCA0ODk5NCwgCisgICAgNDg5OTgsIDQ5MDAyLCA0OTAwNiwgNDkwMTAsIDQ5MDE0LCA0OTAxOCwgNDkwMjIsIDQ5MDI2LCA0OTAzMCwgNDkwMzQsIAorICAgIDQ5MDM4LCA0OTA0MiwgNDkwNDYsIDQ5MDUwLCA0OTA1NCwgNDkwNTgsIDQ5MDYyLCA0OTA2NiwgNDkwNzAsIDQ5MDc0LCAKKyAgICA0OTA3OCwgNDkwODIsIDQ5MDg2LCA0OTA5MCwgNDkwOTQsIDQ5MDk4LCA0OTEwMiwgNDkxMDYsIDQ5MTEwLCA0OTExNCwgCisgICAgNDkxMTgsIDQ5MTIyLCA0OTEyNiwgNDkxMzAsIDQ5MTM0LCA0OTEzOCwgNDkxNDIsIDQ5MTQ2LCA0OTE1MCwgNDkxNTQsIAorICAgIDQ5MTU4LCA0OTE2MiwgNDkxNjYsIDQ5MTcwLCA0OTE3NCwgNDkxNzgsIDQ5MTgyLCA0OTE4NiwgNDkxOTAsIDQ5MTk0LCAKKyAgICA0OTE5OCwgNDkyMDIsIDQ5MjA2LCA0OTIxMCwgNDkyMTQsIDQ5MjE4LCA0OTIyMiwgNDkyMjYsIDQ5MjMwLCA0OTIzNCwgCisgICAgNDkyMzgsIDQ5MjQyLCA0OTI0NiwgNDkyNTAsIDQ5MjU0LCA0OTI1OCwgNDkyNjIsIDQ5MjY2LCA0OTI3MCwgNDkyNzQsIAorICAgIDQ5Mjc4LCA0OTI4MiwgNDkyODYsIDQ5MjkwLCA0OTI5NCwgNDkyOTgsIDQ5MzAyLCA0OTMwNiwgNDkzMTAsIDQ5MzE0LCAKKyAgICA0OTMxOCwgNDkzMjIsIDQ5MzI2LCA0OTMzMCwgNDkzMzQsIDQ5MzM4LCA0OTM0MiwgNDkzNDYsIDQ5MzUwLCA0OTM1NCwgCisgICAgNDkzNTgsIDQ5MzYyLCA0OTM2NiwgNDkzNzAsIDQ5Mzc0LCA0OTM3OCwgNDkzODIsIDQ5Mzg2LCA0OTM5MCwgNDkzOTQsIAorICAgIDQ5Mzk4LCA0OTQwMiwgNDk0MDYsIDQ5NDEwLCA0OTQxNCwgNDk0MTgsIDQ5NDIyLCA0OTQyNiwgNDk0MzAsIDQ5NDM0LCAKKyAgICA0OTQzOCwgNDk0NDIsIDQ5NDQ2LCA0OTQ1MCwgNDk0NTQsIDQ5NDU4LCA0OTQ2MiwgNDk0NjYsIDQ5NDcwLCA0OTQ3NCwgCisgICAgNDk0NzgsIDQ5NDgyLCA0OTQ4NiwgNDk0OTAsIDQ5NDk0LCA0OTQ5OCwgNDk1MDIsIDQ5NTA2LCA0OTUxMCwgNDk1MTQsIAorICAgIDQ5NTE4LCA0OTUyMiwgNDk1MjYsIDQ5NTMwLCA0OTUzNCwgNDk1MzgsIDQ5NTQyLCA0OTU0NiwgNDk1NTAsIDQ5NTU0LCAKKyAgICA0OTU1OCwgNDk1NjIsIDQ5NTY2LCA0OTU3MCwgNDk1NzQsIDQ5NTc4LCA0OTU4MiwgNDk1ODYsIDQ5NTkwLCA0OTU5NCwgCisgICAgNDk1OTgsIDQ5NjAyLCA0OTYwNiwgNDk2MTAsIDQ5NjE0LCA0OTYxOCwgNDk2MjIsIDQ5NjI2LCA0OTYzMCwgNDk2MzQsIAorICAgIDQ5NjM4LCA0OTY0MiwgNDk2NDYsIDQ5NjUwLCA0OTY1NCwgNDk2NTgsIDQ5NjYyLCA0OTY2NiwgNDk2NzAsIDQ5Njc0LCAKKyAgICA0OTY3OCwgNDk2ODIsIDQ5Njg2LCA0OTY5MCwgNDk2OTQsIDQ5Njk4LCA0OTcwMiwgNDk3MDYsIDQ5NzEwLCA0OTcxNCwgCisgICAgNDk3MTgsIDQ5NzIyLCA0OTcyNiwgNDk3MzAsIDQ5NzM0LCA0OTczOCwgNDk3NDIsIDQ5NzQ2LCA0OTc1MCwgNDk3NTQsIAorICAgIDQ5NzU4LCA0OTc2MiwgNDk3NjYsIDQ5NzcwLCA0OTc3NCwgNDk3NzgsIDQ5NzgyLCA0OTc4NiwgNDk3OTAsIDQ5Nzk0LCAKKyAgICA0OTc5OCwgNDk4MDIsIDQ5ODA2LCA0OTgxMCwgNDk4MTQsIDQ5ODE4LCA0OTgyMiwgNDk4MjYsIDQ5ODMwLCA0OTgzNCwgCisgICAgNDk4MzgsIDQ5ODQyLCA0OTg0NiwgNDk4NTAsIDQ5ODU0LCA0OTg1OCwgNDk4NjIsIDQ5ODY2LCA0OTg3MCwgNDk4NzQsIAorICAgIDQ5ODc4LCA0OTg4MiwgNDk4ODYsIDQ5ODkwLCA0OTg5NCwgNDk4OTgsIDQ5OTAyLCA0OTkwNiwgNDk5MTAsIDQ5OTE0LCAKKyAgICA0OTkxOCwgNDk5MjUsIDQ5OTMzLCA0OTkzOSwgNDk5NDUsIDQ5OTUyLCA0OTk1OSwgNDk5NjUsIDQ5OTcxLCA0OTk3NywgCisgICAgNDk5ODMsIDQ5OTg4LCA0OTk5MywgNDk5OTgsIDUwMDAzLCA1MDAwOSwgNTAwMTUsIDUwMDIzLCA1MDAzMCwgNTAwMzYsIAorICAgIDUwMDQyLCA1MDA1MCwgNTAwNTksIDUwMDY2LCA1MDA3NiwgNTAwODcsIDUwMDkwLCA1MDA5MywgNTAwOTcsIDUwMTAxLCAKKyAgICA1MDEwOCwgNTAxMTUsIDUwMTI2LCA1MDEzNywgNTAxNDcsIDUwMTU3LCA1MDE2NCwgNTAxNzEsIDUwMTc4LCA1MDE4NSwgCisgICAgNTAxOTYsIDUwMjA3LCA1MDIxOCwgNTAyMjksIDUwMjM5LCA1MDI0OSwgNTAyNjEsIDUwMjczLCA1MDI4NCwgNTAyOTUsIAorICAgIDUwMzA3LCA1MDMxOSwgNTAzMjgsIDUwMzM4LCA1MDM0OCwgNTAzNTksIDUwMzcwLCA1MDM3NywgNTAzODQsIDUwMzkxLCAKKyAgICA1MDM5OCwgNTA0MDgsIDUwNDE4LCA1MDQyNiwgNTA0MzQsIDUwNDQxLCA1MDQ0OCwgNTA0NTUsIDUwNDYyLCA1MDQ2OSwgCisgICAgNTA0NzQsIDUwNDc5LCA1MDQ4NSwgNTA0OTMsIDUwNTAzLCA1MDUxMSwgNTA1MTksIDUwNTI3LCA1MDUzNSwgNTA1NDMsIAorICAgIDUwNTUxLCA1MDU1OSwgNTA1NjcsIDUwNTc2LCA1MDU4NSwgNTA1OTUsIDUwNjA1LCA1MDYxNCwgNTA2MjMsIDUwNjMzLCAKKyAgICA1MDY0MywgNTA2NTIsIDUwNjYxLCA1MDY3MSwgNTA2ODEsIDUwNjkwLCA1MDY5OSwgNTA3MDksIDUwNzE5LCA1MDczMywgCisgICAgNTA3NTAsIDUwNzY0LCA1MDc4MSwgNTA3OTUsIDUwODA5LCA1MDgyMywgNTA4MzcsIDUwODQ3LCA1MDg1OCwgNTA4NjgsIAorICAgIDUwODc5LCA1MDg5NiwgNTA5MTMsIDUwOTIxLCA1MDkyNywgNTA5MzQsIDUwOTQxLCA1MDk0OCwgNTA5NTUsIDUwOTYwLCAKKyAgICA1MDk2NiwgNTA5NzEsIDUwOTc2LCA1MDk4MiwgNTA5ODcsIDUwOTkyLCA1MDk5NywgNTEwMDIsIDUxMDA3LCA1MTAxNCwgCisgICAgNTEwMTksIDUxMDI2LCA1MTAzMSwgNTEwMzYsIDUxMDQwLCA1MTA0NCwgNTEwNTEsIDUxMDU4LCA1MTA2NSwgNTEwNzIsIAorICAgIDUxMDc5LCA1MTA4NiwgNTEwOTksIDUxMTEyLCA1MTEyNSwgNTExMzgsIDUxMTQ2LCA1MTE1NCwgNTExNjAsIDUxMTY2LCAKKyAgICA1MTE3MywgNTExODAsIDUxMTg3LCA1MTE5NCwgNTExOTgsIDUxMjAzLCA1MTIxMSwgNTEyMTksIDUxMjI3LCA1MTIzNCwgCisgICAgNTEyMzgsIDUxMjQ2LCA1MTI1NCwgNTEyNTgsIDUxMjYyLCA1MTI2NywgNTEyNzQsIDUxMjgyLCA1MTI5MCwgNTEzMTAsIAorICAgIDUxMzMwLCA1MTM1MCwgNTEzNzAsIDUxMzkwLCA1MTQxMCwgNTE0MzAsIDUxNDUwLCA1MTQ1NiwgNTE0NjMsIDUxNDcyLCAKKyAgICA1MTQ4MCwgNTE0ODgsIDUxNDkzLCA1MTQ5NiwgNTE0OTksIDUxNTA0LCA1MTUwNywgNTE1MjYsIDUxNTMzLCA1MTUzOSwgCisgICAgNTE1NDUsIDUxNTQ5LCA1MTU1MiwgNTE1NTUsIDUxNTU4LCA1MTU3MCwgNTE1ODMsIDUxNTkwLCA1MTU5NywgNTE2MDAsIAorICAgIDUxNjA0LCA1MTYwNywgNTE2MTIsIDUxNjE3LCA1MTYyMiwgNTE2MjgsIDUxNjM3LCA1MTY0NCwgNTE2NTEsIDUxNjU5LCAKKyAgICA1MTY2NiwgNTE2NzMsIDUxNjc2LCA1MTY4MiwgNTE2ODgsIDUxNjkxLCA1MTY5NCwgNTE2OTksIDUxNzA0LCA1MTcxMCwgCisgICAgNTE3MTYsIDUxNzIwLCA1MTcyNSwgNTE3MzIsIDUxNzM2LCA1MTc0MiwgNTE3NDYsIDUxNzUwLCA1MTc1OCwgNTE3NzAsIAorICAgIDUxNzc5LCA1MTc4MywgNTE3ODUsIDUxNzk0LCA1MTgwMywgNTE4MDksIDUxODEyLCA1MTgxOCwgNTE4MjQsIDUxODI5LCAKKyAgICA1MTgzNCwgNTE4MzksIDUxODQ0LCA1MTg0OSwgNTE4NTQsIDUxODU2LCA1MTg2MiwgNTE4NjcsIDUxODc0LCA1MTg3OCwgCisgICAgNTE4ODQsIDUxODg3LCA1MTg5MSwgNTE4OTgsIDUxOTA1LCA1MTkwNywgNTE5MDksIDUxOTE1LCA1MTkyMSwgNTE5MjcsIAorICAgIDUxOTM2LCA1MTk0NSwgNTE5NTIsIDUxOTU5LCA1MTk2NSwgNTE5NzEsIDUxOTc2LCA1MTk4MSwgNTE5ODYsIDUxOTkyLCAKKyAgICA1MTk5OCwgNTIwMDMsIDUyMDEwLCA1MjAxNCwgNTIwMTgsIDUyMDMxLCA1MjA0NCwgNTIwNTYsIDUyMDY1LCA1MjA3MSwgCisgICAgNTIwNzgsIDUyMDgzLCA1MjA4OCwgNTIwOTMsIDUyMDk4LCA1MjEwMywgNTIxMDUsIDUyMTEyLCA1MjExOSwgNTIxMjYsIAorICAgIDUyMTMzLCA1MjE0MCwgNTIxNDgsIDUyMTU0LCA1MjE1OSwgNTIxNjUsIDUyMTcxLCA1MjE3NywgNTIxODQsIDUyMTkwLCAKKyAgICA1MjE5OCwgNTIyMDYsIDUyMjE0LCA1MjIyMiwgNTIyMjksIDUyMjM1LCA1MjI0MSwgNTIyNTAsIDUyMjU0LCA1MjI2MywgCisgICAgNTIyNzIsIDUyMjgxLCA1MjI4OSwgNTIyOTMsIDUyMjk5LCA1MjMwNiwgNTIzMTMsIDUyMzE3LCA1MjMyMywgNTIzMzAsIAorICAgIDUyMzM1LCA1MjM0MCwgNTIzNDYsIDUyMzUxLCA1MjM1NiwgNTIzNjMsIDUyMzcwLCA1MjM3NSwgNTIzODAsIDUyMzg4LCAKKyAgICA1MjM5NiwgNTI0MDYsIDUyNDE2LCA1MjQyMywgNTI0MzAsIDUyNDM0LCA1MjQzOCwgNTI0NTAsIDUyNDU2LCA1MjQ2MiwgCisgICAgNTI0NjcsIDUyNDcyLCA1MjQ3OSwgNTI0ODYsIDUyNDkyLCA1MjQ5OCwgNTI1MDcsIDUyNTE1LCA1MjUyMywgNTI1MzAsIAorICAgIDUyNTM3LCA1MjU0NCwgNTI1NTAsIDUyNTU3LCA1MjU2MywgNTI1NzAsIDUyNTc3LCA1MjU4NCwgNTI1OTEsIDUyNTk3LCAKKyAgICA1MjYwMiwgNTI2MTEsIDUyNjIxLCA1MjYyOCwgNTI2MzcsIDUyNjQzLCA1MjY0OCwgNTI2NTMsIDUyNjYzLCA1MjY2OSwgCisgICAgNTI2NzUsIDUyNjgxLCA1MjY4OSwgNTI2OTQsIDUyNzAxLCA1MjcwOCwgNTI3MTksIDUyNzI2LCA1MjczMywgNTI3NDAsIAorICAgIDUyNzQ3LCA1Mjc1NCwgNTI3NjEsIDUyNzY4LCA1Mjc4MCwgNTI3OTIsIDUyODAzLCA1MjgxNCwgNTI4MjcsIDUyODQwLCAKKyAgICA1Mjg0NSwgNTI4NTAsIDUyODU5LCA1Mjg2OCwgNTI4NzUsIDUyODgyLCA1Mjg5MSwgNTI5MDAsIDUyOTA4LCA1MjkxNiwgCisgICAgNTI5MjQsIDUyOTMyLCA1Mjk0MiwgNTI5NTIsIDUyOTY2LCA1Mjk4MCwgNTI5ODgsIDUyOTk2LCA1MzAwOCwgNTMwMjAsIAorICAgIDUzMDI4LCA1MzAzNiwgNTMwNDYsIDUzMDU2LCA1MzA2MSwgNTMwNjYsIDUzMDc1LCA1MzA4NCwgNTMwODksIDUzMDk0LCAKKyAgICA1MzEwMiwgNTMxMDgsIDUzMTE0LCA1MzEyMiwgNTMxMzAsIDUzMTQzLCA1MzE1NiwgNTMxNjAsIDUzMTY0LCA1MzE3MSwgCisgICAgNTMxNzgsIDUzMTg1LCA1MzE5MywgNTMyMDEsIDUzMjEwLCA1MzIxOSwgNTMyMjUsIDUzMjMxLCA1MzIzOCwgNTMyNDUsIAorICAgIDUzMjUyLCA1MzI1OSwgNTMyNjgsIDUzMjc3LCA1MzI4MCwgNTMyODMsIDUzMjg4LCA1MzI5MywgNTMyOTksIDUzMzA1LCAKKyAgICA1MzMxMiwgNTMzMTksIDUzMzI5LCA1MzMzOSwgNTMzNDYsIDUzMzUzLCA1MzM2MSwgNTMzNjksIDUzMzc3LCA1MzM4NSwgCisgICAgNTMzOTMsIDUzNDAxLCA1MzQwOCwgNTM0MTUsIDUzNDE5LCA1MzQyMywgNTM0MzAsIDUzNDM3LCA1MzQ0MiwgNTM0NDcsIAorICAgIDUzNDUyLCA1MzQ1NywgNTM0NjMsIDUzNDc3LCA1MzQ4NCwgNTM0OTEsIDUzNDk1LCA1MzQ5NywgNTM0OTksIDUzNTA0LCAKKyAgICA1MzUwOSwgNTM1MTQsIDUzNTE4LCA1MzUyNiwgNTM1MzMsIDUzNTQwLCA1MzU0OCwgNTM1NjAsIDUzNTY4LCA1MzU3NiwgCisgICAgNTM1ODcsIDUzNTkxLCA1MzU5NSwgNTM2MDEsIDUzNjA5LCA1MzYyMiwgNTM2MjksIDUzNjM2LCA1MzY0MywgNTM2NDgsIAorICAgIDUzNjU1LCA1MzY2NCwgNTM2NzIsIDUzNjc4LCA1MzY4NCwgNTM2OTAsIDUzNjk5LCA1MzcwOCwgNTM3MTYsIDUzNzI1LCAKKyAgICA1MzczMCwgNTM3MzMsIDUzNzM4LCA1Mzc0NCwgNTM3NTAsIDUzNzU2LCA1Mzc2MiwgNTM3NjYsIDUzNzY5LCA1Mzc3MywgCisgICAgNTM3NzcsIDUzNzgzLCA1Mzc4OSwgNTM3OTUsIDUzODAxLCA1MzgwNSwgNTM4MDksIDUzODE2LCA1MzgyMywgNTM4MzAsIAorICAgIDUzODM3LCA1Mzg0NCwgNTM4NTEsIDUzODYxLCA1Mzg3MSwgNTM4NzgsIDUzODg1LCA1Mzg5MywgNTM5MDEsIDUzOTA1LCAKKyAgICA1MzkxMCwgNTM5MTUsIDUzOTIxLCA1MzkyNywgNTM5MzAsIDUzOTMzLCA1MzkzNiwgNTM5MzksIDUzOTQzLCA1Mzk0OCwgCisgICAgNTM5NTMsIDUzOTU4LCA1Mzk2MywgNTM5NjgsIDUzOTcyLCA1Mzk3NiwgNTM5ODAsIDUzOTg0LCA1Mzk4OCwgNTM5OTIsIAorICAgIDUzOTk2LCA1NDAwMiwgNTQwMDYsIDU0MDEyLCA1NDAxNywgNTQwMjQsIDU0MDMyLCA1NDAzOSwgNTQwNDcsIDU0MDU0LCAKKyAgICA1NDA2MiwgNTQwNzEsIDU0MDc4LCA1NDA4OCwgNTQwOTksIDU0MTA1LCA1NDExNCwgNTQxMjAsIDU0MTI5LCA1NDEzOCwgCisgICAgNTQxNDQsIDU0MTUwLCA1NDE1NCwgNTQxNTgsIDU0MTY3LCA1NDE3NiwgNTQxODMsIDU0MTkwLCA1NDE5OSwgMCwgMCwgMCwgCisgICAgNTQyMDgsIDU0MjEzLCA1NDIxNywgNTQyMjEsIDU0MjI2LCA1NDIzMSwgNTQyMzYsIDU0MjQ0LCA1NDI1MiwgNTQyNTUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0MjU5LCA1NDI2NCwgNTQyNjksIDU0Mjc0LCA1NDI3OSwgCisgICAgNTQyODQsIDU0Mjg5LCA1NDI5NCwgNTQyOTksIDU0MzA0LCA1NDMwOSwgNTQzMTUsIDU0MzE5LCA1NDMyNCwgNTQzMjksIAorICAgIDU0MzM0LCA1NDMzOSwgNTQzNDQsIDU0MzQ5LCA1NDM1NCwgNTQzNTksIDU0MzY0LCA1NDM2OSwgNTQzNzQsIDU0Mzc5LCAKKyAgICA1NDM4NCwgNTQzODksIDU0Mzk0LCA1NDM5OSwgNTQ0MDQsIDU0NDA5LCA1NDQxNCwgNTQ0MTksIDU0NDI0LCA1NDQyOSwgCisgICAgNTQ0MzUsIDU0NDQwLCA1NDQ0NiwgNTQ0NTUsIDU0NDYwLCA1NDQ2OCwgNTQ0NzUsIDU0NDg0LCA1NDQ4OSwgNTQ0OTQsIAorICAgIDU0NDk5LCA1NDUwNSwgMCwgNTQ1MTIsIDU0NTE3LCA1NDUyMiwgNTQ1MjcsIDU0NTMyLCA1NDUzNywgNTQ1NDIsIDU0NTQ3LCAKKyAgICA1NDU1MiwgNTQ1NTcsIDU0NTYyLCA1NDU2OCwgNTQ1NzIsIDU0NTc3LCA1NDU4MiwgNTQ1ODcsIDU0NTkyLCA1NDU5NywgCisgICAgNTQ2MDIsIDU0NjA3LCA1NDYxMiwgNTQ2MTcsIDU0NjIyLCA1NDYyNywgNTQ2MzIsIDU0NjM3LCA1NDY0MiwgNTQ2NDcsIAorICAgIDU0NjUyLCA1NDY1NywgNTQ2NjIsIDU0NjY3LCA1NDY3MiwgNTQ2NzcsIDU0NjgyLCA1NDY4OCwgNTQ2OTMsIDU0Njk5LCAKKyAgICA1NDcwOCwgNTQ3MTMsIDU0NzIxLCA1NDcyOCwgNTQ3MzcsIDU0NzQyLCA1NDc0NywgNTQ3NTIsIDU0NzU4LCAwLCA1NDc2NSwgCisgICAgNTQ3NzMsIDU0NzgxLCA1NDc5MSwgNTQ3OTgsIDU0ODA2LCA1NDgxMiwgNTQ4MjEsIDU0ODI5LCA1NDgzNywgNTQ4NDUsIAorICAgIDU0ODUzLCA1NDg2MSwgNTQ4NjksIDU0ODc0LCA1NDg4MSwgNTQ4ODcsIDU0ODk0LCA1NDkwMiwgNTQ5MDksIDU0OTE2LCAKKyAgICA1NDkyNCwgNTQ5MzAsIDU0OTM2LCA1NDk0MywgNTQ5NTAsIDU0OTYwLCA1NDk3MCwgNTQ5NzcsIDU0OTg0LCA1NDk4OSwgCisgICAgNTQ5OTksIDU1MDA5LCA1NTAxNCwgNTUwMTksIDU1MDI0LCA1NTAyOSwgNTUwMzQsIDU1MDM5LCA1NTA0NCwgNTUwNDksIAorICAgIDU1MDU0LCA1NTA1OSwgNTUwNjQsIDU1MDY5LCA1NTA3NCwgNTUwNzksIDU1MDg0LCA1NTA4OSwgNTUwOTQsIDU1MDk5LCAKKyAgICA1NTEwNCwgNTUxMDksIDU1MTE0LCA1NTExOSwgNTUxMjQsIDU1MTI5LCA1NTEzNCwgNTUxMzksIDU1MTQ0LCA1NTE0OSwgCisgICAgNTUxNTQsIDU1MTU5LCA1NTE2MywgNTUxNjcsIDU1MTcyLCA1NTE3NywgNTUxODIsIDU1MTg3LCA1NTE5MiwgNTUxOTcsIAorICAgIDU1MjAyLCA1NTIwNywgNTUyMTIsIDU1MjE3LCA1NTIyMiwgNTUyMjcsIDU1MjMyLCA1NTIzNywgNTUyNDIsIDU1MjQ3LCAKKyAgICA1NTI1MiwgNTUyNTcsIDU1MjY0LCA1NTI3MSwgNTUyNzgsIDU1Mjg1LCA1NTI5MiwgNTUyOTksIDU1MzA2LCA1NTMxMywgCisgICAgNTUzMjAsIDU1MzI3LCA1NTMzNCwgNTUzNDEsIDU1MzQ4LCA1NTM1NSwgNTUzNjAsIDU1MzY1LCA1NTM3MiwgNTUzNzksIAorICAgIDU1Mzg2LCA1NTM5MywgNTU0MDAsIDU1NDA3LCA1NTQxNCwgNTU0MjEsIDU1NDI4LCA1NTQzNSwgNTU0NDIsIDU1NDQ5LCAKKyAgICA1NTQ1NSwgNTU0NjEsIDU1NDY3LCA1NTQ3MywgNTU0ODAsIDU1NDg3LCA1NTQ5NCwgNTU1MDEsIDU1NTA4LCA1NTUxNSwgCisgICAgNTU1MjIsIDU1NTI5LCA1NTUzNiwgNTU1NDMsIDU1NTUxLCA1NTU1OSwgNTU1NjcsIDU1NTc1LCA1NTU4MywgNTU1OTEsIAorICAgIDU1NTk5LCA1NTYwNywgNTU2MTEsIDU1NjE3LCA1NTYyMywgNTU2MjcsIDU1NjMzLCA1NTYzOSwgNTU2NDUsIDU1NjUyLCAKKyAgICA1NTY1OSwgNTU2NjYsIDU1NjczLCA1NTY3OCwgNTU2ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1NjkwLCA1NTY5OCwgCisgICAgNTU3MDcsIDU1NzE2LCA1NTcyNCwgNTU3MzAsIDU1NzM1LCA1NTc0MCwgNTU3NDUsIDU1NzUwLCA1NTc1NSwgNTU3NjAsIAorICAgIDU1NzY1LCA1NTc3MCwgNTU3NzUsIDU1NzgwLCA1NTc4NSwgNTU3OTAsIDU1Nzk1LCA1NTgwMCwgNTU4MDUsIDU1ODEwLCAKKyAgICA1NTgxNSwgNTU4MjAsIDU1ODI1LCA1NTgzMCwgNTU4MzUsIDU1ODQwLCA1NTg0NSwgNTU4NTAsIDU1ODU1LCA1NTg2MCwgCisgICAgNTU4NjUsIDU1ODcwLCA1NTg3NSwgNTU4ODAsIDU1ODg1LCA1NTg5MCwgNTU4OTUsIDU1OTAwLCA1NTkwNSwgNTU5MTAsIAorICAgIDU1OTE1LCA1NTkyMCwgNTU5MjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU1OTMwLCA1NTkzNCwgNTU5MzksIAorICAgIDU1OTQ0LCA1NTk0OSwgNTU5NTQsIDU1OTYzLCA1NTk2OCwgNTU5NzMsIDU1OTc4LCA1NTk4MywgNTU5ODgsIDU1OTkzLCAKKyAgICA1NTk5OCwgNTYwMDMsIDU2MDEwLCA1NjAxNSwgNTYwMjAsIDU2MDI5LCA1NjAzNiwgNTYwNDEsIDU2MDQ2LCA1NjA1MSwgCisgICAgNTYwNTgsIDU2MDYzLCA1NjA3MCwgNTYwNzUsIDU2MDgwLCA1NjA4NywgNTYwOTQsIDU2MDk5LCA1NjEwNCwgNTYxMDksIAorICAgIDU2MTE2LCA1NjEyMywgNTYxMjgsIDU2MTMzLCA1NjEzOCwgNTYxNDMsIDU2MTQ4LCA1NjE1NSwgNTYxNjIsIDU2MTY3LCAKKyAgICA1NjE3MiwgNTYxNzcsIDU2MTgyLCA1NjE4NywgNTYxOTIsIDU2MTk3LCA1NjIwMiwgNTYyMDcsIDU2MjEyLCA1NjIxNywgCisgICAgNTYyMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU2MjI5LCA1NjIzNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNTYyNDEsIDU2MjQ3LCA1NjI1MSwgNTYyNTUsIDU2MjU5LCA1NjI2MywgNTYyNjcsIDU2MjcxLCAKKyAgICA1NjI3NSwgNTYyNzksIDU2MjgzLCA1NjI4NywgNTYyOTMsIDU2Mjk3LCA1NjMwMSwgNTYzMDUsIDU2MzA5LCA1NjMxMywgCisgICAgNTYzMTcsIDU2MzIxLCA1NjMyNSwgNTYzMjksIDU2MzMzLCA1NjMzNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTYzNDEsIDU2MzQ1LCA1NjM0OSwgNTYzNTMsIDU2MzU3LCA1NjM2MSwgNTYzNjUsIDAsIDU2MzY5LCA1NjM3MywgNTYzNzcsIAorICAgIDU2MzgxLCA1NjM4NSwgNTYzODksIDU2MzkzLCAwLCA1NjM5NywgNTY0MDEsIDU2NDA1LCA1NjQwOSwgNTY0MTMsIDU2NDE3LCAKKyAgICA1NjQyMSwgMCwgNTY0MjUsIDU2NDI5LCA1NjQzMywgNTY0MzcsIDU2NDQxLCA1NjQ0NSwgNTY0NDksIDAsIDU2NDUzLCAKKyAgICA1NjQ1NywgNTY0NjEsIDU2NDY1LCA1NjQ2OSwgNTY0NzMsIDU2NDc3LCAwLCA1NjQ4MSwgNTY0ODUsIDU2NDg5LCA1NjQ5MywgCisgICAgNTY0OTcsIDU2NTAxLCA1NjUwNSwgMCwgNTY1MDksIDU2NTEzLCA1NjUxNywgNTY1MjEsIDU2NTI1LCA1NjUyOSwgNTY1MzMsIAorICAgIDAsIDU2NTM3LCA1NjU0MSwgNTY1NDUsIDU2NTQ5LCA1NjU1MywgNTY1NTcsIDU2NTYxLCAwLCA1NjU2NSwgNTY1NzAsIAorICAgIDU2NTc1LCA1NjU4MCwgNTY1ODUsIDU2NTkwLCA1NjU5NSwgNTY1OTksIDU2NjA0LCA1NjYwOSwgNTY2MTQsIDU2NjE4LCAKKyAgICA1NjYyMywgNTY2MjgsIDU2NjMzLCA1NjYzOCwgNTY2NDIsIDU2NjQ3LCA1NjY1MiwgNTY2NTcsIDU2NjYyLCA1NjY2NywgCisgICAgNTY2NzIsIDU2Njc2LCA1NjY4MSwgNTY2ODYsIDU2NjkzLCA1NjY5OCwgNTY3MDMsIDU2NzA5LCA1NjcxNiwgNTY3MjMsIAorICAgIDU2NzMyLCA1NjczOSwgNTY3NDgsIDU2NzUyLCA1Njc1NiwgNTY3NjIsIDU2NzY4LCA1Njc3NCwgNTY3ODIsIDU2Nzg4LCAKKyAgICA1Njc5MiwgNTY3OTYsIDU2ODAwLCA1NjgwNiwgNTY4MTIsIDU2ODE2LCA1NjgxOCwgNTY4MjIsIDU2ODI4LCA1NjgzMCwgCisgICAgNTY4MzQsIDU2ODM4LCA1Njg0MiwgNTY4NDgsIDU2ODUzLCA1Njg1NywgNTY4NjEsIDU2ODY2LCA1Njg3MiwgNTY4NzcsIAorICAgIDU2ODgyLCA1Njg4NywgNTY4OTIsIDU2ODk5LCA1NjkwNiwgNTY5MTEsIDU2OTE2LCA1NjkyMSwgNTY5MjYsIDU2OTMxLCAKKyAgICA1NjkzNiwgNTY5NDAsIDU2OTQ0LCA1Njk1MSwgNTY5NTgsIDU2OTY0LCA1Njk2OCwgNTY5NzMsIDU2OTc2LCA1Njk4MCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjc3OTksIDI3ODA1LCAKLSAgICAyNzgxMSwgMjc4MTUsIDI3ODE5LCAyNzgyMywgMjc4MjcsIDI3ODMzLCAyNzgzNywgMjc4NDMsIDI3ODQ3LCAyNzg1MywgCi0gICAgMjc4NTksIDI3ODY3LCAyNzg3MywgMjc4ODEsIDI3ODg1LCAyNzg4OSwgMjc4OTMsIDI3ODk5LCAyNzkwMiwgMjc5MDcsIAotICAgIDI3OTExLCAyNzkxNywgMjc5MjEsIDI3OTI1LCAyNzkzMSwgMjc5MzUsIDI3OTQxLCAyNzk0NSwgMjc5NTEsIDI3OTU5LCAKLSAgICAyNzk2NywgMjc5NzUsIDI3OTgxLCAyNzk4NSwgMjc5OTEsIDI3OTk1LCAyODAwMSwgMjgwMDUsIDI4MDA4LCAyODAxNCwgCi0gICAgMjgwMTgsIDI4MDI0LCAyODAyNywgMjgwMzAsIDI4MDMzLCAyODAzNywgMjgwNDEsIDI4MDQ3LCAyODA1MywgMjgwNTcsIAotICAgIDI4MDYwLCAyODA2NCwgMjgwNjksIDI4MDc0LCAyODA4MSwgMjgwODYsIDI4MDkzLCAyODEwMCwgMjgxMDksIDI4MTE2LCAKLSAgICAyODEyNSwgMjgxMzAsIDI4MTM3LCAyODE0NCwgMjgxNTMsIDI4MTU4LCAyODE2NSwgMjgxNzAsIDI4MTc2LCAyODE4MiwgCi0gICAgMjgxODgsIDI4MTk0LCAyODIwMCwgMjgyMDYsIDAsIDAsIDAsIDAsIDI4MjEyLCAyODIxNiwgMjgyMTksIDI4MjIyLCAKLSAgICAyODIyNSwgMjgyMjgsIDI4MjMxLCAyODIzNCwgMjgyMzcsIDI4MjQwLCAyODI0MywgMjgyNDYsIDI4MjQ5LCAyODI1MiwgCi0gICAgMjgyNTcsIDI4MjYyLCAyODI2NywgMjgyNzAsIDI4Mjc1LCAyODI4MCwgMjgyODUsIDI4MjkwLCAyODI5NywgMjgzMDIsIAotICAgIDI4MzA3LCAyODMxMiwgMjgzMTcsIDI4MzI0LCAyODMzMCwgMjgzMzYsIDI4MzQyLCAyODM0OCwgMjgzNTQsIDI4MzYzLCAKLSAgICAyODM3MiwgMjgzNzgsIDI4Mzg0LCAyODM5MywgMjg0MDIsIDI4NDExLCAyODQyMCwgMjg0MjksIDI4NDM4LCAyODQ0NywgCi0gICAgMjg0NTYsIDAsIDAsIDAsIDI4NDY1LCAyODQ2OSwgMjg0NzMsIDI4NDc3LCAyODQ4MCwgMjg0ODMsIDI4NDg2LCAyODQ5MCwgCi0gICAgMjg0OTMsIDI4NDk2LCAyODUwMCwgMjg1MDMsIDI4NTA3LCAyODUxMSwgMjg1MTUsIDI4NTE5LCAyODUyMywgMjg1MjcsIAotICAgIDI4NTMxLCAyODUzNSwgMjg1MzksIDI4NTQzLCAyODU0NiwgMjg1NTAsIDI4NTU0LCAyODU1OCwgMjg1NjEsIDI4NTY0LCAKLSAgICAyODU2NywgMjg1NzEsIDI4NTc1LCAyODU3OSwgMjg1ODMsIDI4NTg2LCAyODU5MiwgMjg1OTgsIDI4NjA0LCAyODYwOSwgCi0gICAgMjg2MTQsIDI4NjE5LCAyODYyNCwgMjg2MjksIDI4NjM0LCAwLCAwLCAwLCAyODYzOCwgMjg2NDIsIDI4NjQ2LCAyODY1MCwgCi0gICAgMjg2NTMsIDI4NjU2LCAyODY1OSwgMjg2NjIsIDI4NjY1LCAyODY2OCwgMjg2NzEsIDI4Njc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyODY3NywgMjg2ODAsIDI4Njg0LCAKLSAgICAyODY4OCwgMjg2OTIsIDI4Njk2LCAyODcwMCwgMjg3MDQsIDI4NzA4LCAyODcxMiwgMjg3MTYsIDI4NzIwLCAyODcyNCwgCi0gICAgMjg3MjgsIDI4NzMyLCAyODczNSwgMjg3MzksIDI4NzQzLCAyODc0NywgMjg3NTEsIDI4NzU1LCAyODc1OSwgMjg3NjIsIAotICAgIDI4NzY2LCAyODc3MCwgMjg3NzQsIDI4Nzc4LCAyODc4MSwgMjg3ODQsIDI4Nzg4LCAyODc5MSwgMjg3OTUsIDI4Nzk5LCAKLSAgICAyODgwMywgMjg4MDcsIDI4ODExLCAyODgxNCwgMjg4MTksIDI4ODI0LCAyODgyOSwgMjg4MzMsIDI4ODM3LCAyODg0MiwgCi0gICAgMjg4NDYsIDI4ODUxLCAyODg1NSwgMjg4NjEsIDI4ODY2LCAyODg3MSwgMjg4NzYsIDI4ODgyLCAyODg4NywgMjg4OTMsIAotICAgIDI4ODk5LCAyODkwNSwgMjg5MDksIDAsIDAsIDAsIDI4OTEzLCAyODkxOCwgMjg5MjcsIDI4OTMyLCAyODkzOSwgMjg5NDQsIAotICAgIDI4OTQ4LCAyODk1MSwgMjg5NTQsIDI4OTU3LCAyODk2MCwgMjg5NjMsIDI4OTY2LCAyODk2OSwgMjg5NzIsIDAsIDAsIDAsIAotICAgIDI4OTc1LCAyODk3OSwgMjg5ODMsIDI4OTg3LCAyODk5NCwgMjkwMDAsIDI5MDA2LCAyOTAxMiwgMjkwMTgsIDI5MDI0LCAKLSAgICAyOTAzMCwgMjkwMzYsIDI5MDQyLCAyOTA0OCwgMjkwNTUsIDI5MDYyLCAyOTA2OSwgMjkwNzYsIDI5MDgzLCAyOTA5MCwgCi0gICAgMjkwOTcsIDI5MTA0LCAyOTExMSwgMjkxMTgsIDI5MTI1LCAyOTEzMiwgMjkxMzksIDI5MTQ2LCAyOTE1MywgMjkxNjAsIAotICAgIDI5MTY3LCAyOTE3NCwgMjkxODEsIDI5MTg4LCAyOTE5NSwgMjkyMDIsIDI5MjA5LCAyOTIxNiwgMjkyMjMsIDI5MjMwLCAKLSAgICAyOTIzNywgMjkyNDQsIDI5MjUxLCAyOTI1OCwgMjkyNjYsIDI5Mjc0LCAyOTI4MiwgMjkyODgsIDI5Mjk0LCAyOTMwMCwgCi0gICAgMjkzMDgsIDI5MzE3LCAyOTMyMiwgMjkzMjgsIDI5MzM0LCAyOTM0MiwgMjkzNDgsIDI5MzU0LCAyOTM2MCwgMjkzNjUsIAotICAgIDI5MzcyLCAyOTM3NywgMjkzODMsIDI5Mzg5LCAyOTM5NywgMjk0MDIsIDI5NDA4LCAyOTQxMywgMjk0MjAsIDI5NDI2LCAKLSAgICAyOTQzNCwgMjk0NDIsIDI5NDQ4LCAyOTQ1NCwgMjk0NjEsIDI5NDY4LCAyOTQ3NCwgMjk0ODAsIDI5NDg2LCAyOTQ5MiwgCi0gICAgMjk0OTcsIDI5NTAzLCAyOTUxMSwgMjk1MTgsIDI5NTIzLCAyOTUyOSwgMjk1MzUsIDI5NTQxLCAyOTU0OSwgMjk1NTMsIAotICAgIDI5NTU5LCAyOTU2NSwgMjk1NzEsIDI5NTc3LCAyOTU4MywgMjk1ODksIDI5NTkzLCAyOTU5OCwgMjk2MDMsIDI5NjEwLCAKLSAgICAyOTYxNSwgMjk2MTksIDI5NjI0LCAyOTYyOCwgMjk2MzIsIDI5NjM2LCAyOTY0MSwgMjk2NDYsIDI5NjUwLCAyOTY1NCwgCi0gICAgMjk2NTgsIDI5NjYzLCAyOTY2NywgMjk2NzIsIDI5Njc3LCAyOTY4MSwgMjk2ODYsIDI5NjkwLCAyOTY5NSwgMjk2OTksIAotICAgIDI5NzA0LCAyOTcwOSwgMjk3MTUsIDI5NzIwLCAyOTcyNSwgMjk3MjksIDI5NzM0LCAyOTc0MCwgMjk3NDcsIDI5NzUxLCAKLSAgICAyOTc1NiwgMjk3NjEsIDI5NzY1LCAyOTc3MCwgMjk3NzQsIDI5NzgwLCAyOTc4NywgMjk3OTQsIDI5Nzk5LCAyOTgwNCwgCi0gICAgMjk4MDgsIDI5ODE0LCAyOTgxOSwgMjk4MjMsIDI5ODI4LCAyOTgzMywgMjk4MzksIDI5ODQ0LCAyOTg1MCwgMjk4NTUsIAotICAgIDI5ODYxLCAyOTg2NywgMjk4NzMsIDI5ODc5LCAyOTg4NiwgMjk4OTMsIDI5OTAwLCAyOTkwNywgMjk5MTQsIDI5OTE5LCAKLSAgICAyOTkyNywgMjk5MzYsIDI5OTQ1LCAyOTk1NCwgMjk5NjMsIDI5OTcyLCAyOTk4MSwgMjk5OTMsIDMwMDAyLCAzMDAxMSwgCi0gICAgMzAwMjAsIDMwMDI1LCAzMDAzMCwgMzAwMzYsIDMwMDQ0LCAzMDA1MiwgMzAwNTksIDMwMDY2LCAzMDA3MywgMzAwODAsIAotICAgIDMwMDg4LCAzMDA5NywgMzAxMDYsIDMwMTE1LCAzMDEyNCwgMzAxMzMsIDMwMTQyLCAzMDE1MSwgMzAxNjAsIDMwMTY5LCAKLSAgICAzMDE3OCwgMzAxODcsIDMwMTk2LCAzMDIwNSwgMzAyMTQsIDMwMjIyLCAzMDIzMSwgMzAyNDIsIDMwMjUwLCAzMDI2MCwgCi0gICAgMzAyNzEsIDMwMjgwLCAzMDI4OSwgMzAyOTksIDMwMzA4LCAzMDMxNiwgMzAzMjUsIDMwMzMxLCAzMDMzNiwgMzAzNDQsIAotICAgIDMwMzQ5LCAzMDM1NiwgMzAzNjEsIDMwMzcwLCAzMDM3NSwgMzAzODAsIDMwMzg3LCAzMDM5MiwgMzAzOTcsIDMwNDA1LCAKLSAgICAzMDQxMywgMzA0MjIsIDMwNDMxLCAzMDQzNiwgMzA0NDMsIDMwNDUzLCAzMDQ2MSwgMzA0NzAsIDMwNDc1LCAzMDQ4MSwgCi0gICAgMzA0ODYsIDMwNDkzLCAzMDQ5OCwgMzA1MDcsIDMwNTEyLCAzMDUxNywgMzA1MjIsIDMwNTI5LCAzMDUzNCwgMzA1MzksIAotICAgIDMwNTQ4LCAzMDU1NiwgMzA1NjEsIDMwNTY2LCAzMDU3MywgMzA1ODAsIDMwNTg0LCAzMDU4OCwgMzA1OTEsIDMwNTk0LCAKLSAgICAzMDU5NywgMzA2MDAsIDMwNjAzLCAzMDYwNiwgMzA2MTMsIDMwNjE2LCAzMDYxOSwgMzA2MjQsIDMwNjI4LCAzMDYzMiwgCi0gICAgMzA2MzYsIDMwNjQwLCAzMDY0NCwgMzA2NTQsIDMwNjYwLCAzMDY2NiwgMzA2NzIsIDMwNjgwLCAzMDY4OCwgMzA2OTQsIAotICAgIDMwNjk5LCAzMDcwNSwgMzA3MTEsIDMwNzE2LCAzMDcyMiwgMzA3MjgsIDMwNzMzLCAzMDczOSwgMzA3NDUsIDMwNzUzLCAKLSAgICAzMDc1OCwgMzA3NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDMwNzcwLCAzMDc3NSwgMzA3ODQsIDMwNzkyLCAzMDgwMCwgMzA4MDcsIDMwODE0LCAzMDgyMSwgMzA4MjgsIAotICAgIDMwODM2LCAzMDg0NCwgMzA4NTQsIDMwODY0LCAzMDg3MiwgMzA4ODAsIDMwODg4LCAzMDg5NiwgMzA5MDUsIDMwOTE0LCAKLSAgICAzMDkyMiwgMzA5MzAsIDMwOTM5LCAzMDk0OCwgMzA5NTgsIDMwOTY4LCAzMDk3NywgMzA5ODYsIDMwOTk0LCAzMTAwMiwgCi0gICAgMzEwMTAsIDMxMDE4LCAzMTAyOCwgMzEwMzgsIDMxMDQ2LCAzMTA1NCwgMzEwNjIsIDMxMDcwLCAzMTA3OCwgMzEwODYsIAotICAgIDMxMDk0LCAzMTEwMiwgMzExMDksIDMxMTE2LCAzMTEyNCwgMzExMzIsIDMxMTQxLCAzMTE1MCwgMzExNTksIDMxMTY4LCAKLSAgICAzMTE3OCwgMzExODgsIDMxMTk1LCAzMTIwMiwgMzEyMTAsIDMxMjE4LCAzMTIyNywgMzEyMzYsIDMxMjQ0LCAzMTI1MiwgCi0gICAgMzEyNjQsIDMxMjc2LCAzMTI4NSwgMzEyOTQsIDMxMzAzLCAzMTMxMiwgMzEzMTksIDMxMzI2LCAzMTMzNCwgMzEzNDIsIAotICAgIDMxMzUwLCAzMTM1OCwgMzEzNjYsIDMxMzc0LCAzMTM4MiwgMzEzOTAsIDMxMzk5LCAzMTQwOCwgMzE0MTcsIDMxNDI2LCAKLSAgICAzMTQzNSwgMzE0NDQsIDMxNDUzLCAzMTQ2MiwgMzE0NzIsIDMxNDgyLCAzMTQ5MSwgMzE1MDAsIDMxNTA3LCAzMTUxNCwgCi0gICAgMzE1MjIsIDMxNTMwLCAzMTUzOCwgMzE1NDYsIDMxNTU0LCAzMTU2MiwgMzE1NzQsIDMxNTg2LCAzMTU5NSwgMzE2MDQsIAotICAgIDMxNjEyLCAzMTYyMCwgMzE2MjgsIDMxNjM2LCAzMTY0NywgMzE2NTgsIDMxNjY5LCAzMTY4MCwgMzE2OTIsIDMxNzA0LCAKLSAgICAzMTcxMiwgMzE3MjAsIDMxNzI4LCAzMTczNiwgMzE3NDUsIDMxNzU0LCAzMTc2MywgMzE3NzIsIDMxNzgwLCAzMTc4OCwgCi0gICAgMzE3OTYsIDMxODA0LCAzMTgxMiwgMzE4MjAsIDMxODI5LCAzMTgzOCwgMzE4NDcsIDMxODU2LCAzMTg2MywgMzE4NzAsIAotICAgIDMxODc4LCAzMTg4NiwgMzE4OTQsIDMxOTAyLCAzMTkwOSwgMzE5MTYsIDMxOTIzLCAzMTkzMCwgMzE5MzgsIDMxOTQ2LCAKLSAgICAzMTk1NCwgMzE5NjIsIDMxOTcwLCAzMTk3OCwgMzE5ODUsIDMxOTkyLCAzMjAwMCwgMzIwMDgsIDMyMDE2LCAzMjAyNCwgCi0gICAgMzIwMzIsIDMyMDQwLCAzMjA0OSwgMzIwNTgsIDMyMDY3LCAzMjA3NCwgMzIwODMsIDMyMDkyLCAzMjEwMSwgMzIxMTAsIAotICAgIDMyMTIwLCAzMjEyOSwgMzIxMzUsIDMyMTQwLCAzMjE0NywgMzIxNTQsIDMyMTYyLCAzMjE3MCwgMzIxNzksIDMyMTg4LCAKLSAgICAzMjE5OCwgMzIyMDgsIDMyMjE5LCAzMjIzMCwgMzIyMzksIDMyMjQ4LCAzMjI1OCwgMzIyNjgsIDMyMjc3LCAzMjI4NiwgCi0gICAgMzIyOTYsIDMyMzA2LCAzMjMxNywgMzIzMjgsIDMyMzM3LCAzMjM0NiwgMzIzNTYsIDMyMzY2LCAzMjM3MywgMzIzODAsIAotICAgIDMyMzg4LCAzMjM5NiwgMzI0MDIsIDMyNDA4LCAzMjQxNywgMzI0MjYsIDMyNDM2LCAzMjQ0NiwgMzI0NTcsIDMyNDY4LCAKLSAgICAzMjQ3NywgMzI0ODYsIDMyNDk2LCAzMjUwNiwgMzI1MTUsIDMyNTI0LCAzMjUzMiwgMzI1NDAsIDMyNTQ3LCAzMjU1NCwgCi0gICAgMzI1NjIsIDMyNTcwLCAzMjU3OSwgMzI1ODgsIDMyNTk4LCAzMjYwOCwgMzI2MTksIDMyNjMwLCAzMjYzOSwgMzI2NDgsIAotICAgIDMyNjU4LCAzMjY2OCwgMzI2NzcsIDMyNjg2LCAzMjY5NiwgMzI3MDYsIDMyNzE3LCAzMjcyOCwgMzI3MzcsIDMyNzQ2LCAKLSAgICAzMjc1NiwgMzI3NjYsIDMyNzczLCAzMjc4MCwgMzI3ODgsIDMyNzk2LCAzMjgwNSwgMzI4MTQsIDMyODI0LCAzMjgzNCwgCi0gICAgMzI4NDUsIDMyODU2LCAzMjg2NSwgMzI4NzQsIDMyODg0LCAzMjg5NCwgMzI5MDIsIDMyOTEwLCAzMjkxOCwgMzI5MjYsIAotICAgIDMyOTM1LCAzMjk0NCwgMzI5NTEsIDMyOTU4LCAzMjk2NSwgMzI5NzIsIDMyOTc4LCAzMjk4NCwgMzI5OTIsIDMzMDAwLCAKLSAgICAzMzAwOCwgMzMwMTYsIDMzMDI2LCAzMzAzNiwgMzMwNDYsIDMzMDU2LCAzMzA2NiwgMzMwNzYsIDMzMDg0LCAzMzA5MiwgCi0gICAgMzMxMDIsIDMzMTEyLCAzMzEyMiwgMzMxMzIsIDMzMTQyLCAzMzE1MiwgMzMxNjAsIDMzMTY4LCAzMzE3OCwgMzMxODgsIAotICAgIDMzMTk4LCAwLCAwLCAzMzIwOCwgMzMyMTYsIDMzMjI0LCAzMzIzNCwgMzMyNDQsIDMzMjU0LCAwLCAwLCAzMzI2NCwgCi0gICAgMzMyNzIsIDMzMjgwLCAzMzI5MCwgMzMzMDAsIDMzMzEwLCAzMzMyMCwgMzMzMzAsIDMzMzQwLCAzMzM0OCwgMzMzNTYsIAotICAgIDMzMzY2LCAzMzM3NiwgMzMzODYsIDMzMzk2LCAzMzQwNiwgMzM0MTYsIDMzNDI0LCAzMzQzMiwgMzM0NDIsIDMzNDUyLCAKLSAgICAzMzQ2MiwgMzM0NzIsIDMzNDgyLCAzMzQ5MiwgMzM1MDAsIDMzNTA4LCAzMzUxOCwgMzM1MjgsIDMzNTM4LCAzMzU0OCwgCi0gICAgMzM1NTgsIDMzNTY4LCAzMzU3NiwgMzM1ODQsIDMzNTk0LCAzMzYwNCwgMzM2MTQsIDAsIDAsIDMzNjI0LCAzMzYzMiwgCi0gICAgMzM2NDAsIDMzNjUwLCAzMzY2MCwgMzM2NzAsIDAsIDAsIDMzNjgwLCAzMzY4OCwgMzM2OTYsIDMzNzA2LCAzMzcxNiwgCi0gICAgMzM3MjYsIDMzNzM2LCAzMzc0NiwgMCwgMzM3NTYsIDAsIDMzNzY0LCAwLCAzMzc3NCwgMCwgMzM3ODQsIDMzNzk0LCAKLSAgICAzMzgwMiwgMzM4MTAsIDMzODIwLCAzMzgzMCwgMzM4NDAsIDMzODUwLCAzMzg2MCwgMzM4NzAsIDMzODc4LCAzMzg4NiwgCi0gICAgMzM4OTYsIDMzOTA2LCAzMzkxNiwgMzM5MjYsIDMzOTM2LCAzMzk0NiwgMzM5NTQsIDMzOTYyLCAzMzk3MCwgMzM5NzgsIAotICAgIDMzOTg2LCAzMzk5NCwgMzQwMDIsIDM0MDEwLCAzNDAxOCwgMzQwMjYsIDM0MDM0LCAzNDA0MiwgMzQwNTAsIDAsIDAsIAotICAgIDM0MDU4LCAzNDA2OCwgMzQwNzgsIDM0MDkxLCAzNDEwNCwgMzQxMTcsIDM0MTMwLCAzNDE0MywgMzQxNTYsIDM0MTY2LCAKLSAgICAzNDE3NiwgMzQxODksIDM0MjAyLCAzNDIxNSwgMzQyMjgsIDM0MjQxLCAzNDI1NCwgMzQyNjQsIDM0Mjc0LCAzNDI4NywgCi0gICAgMzQzMDAsIDM0MzEzLCAzNDMyNiwgMzQzMzksIDM0MzUyLCAzNDM2MiwgMzQzNzIsIDM0Mzg1LCAzNDM5OCwgMzQ0MTEsIAotICAgIDM0NDI0LCAzNDQzNywgMzQ0NTAsIDM0NDYwLCAzNDQ3MCwgMzQ0ODMsIDM0NDk2LCAzNDUwOSwgMzQ1MjIsIDM0NTM1LCAKLSAgICAzNDU0OCwgMzQ1NTgsIDM0NTY4LCAzNDU4MSwgMzQ1OTQsIDM0NjA3LCAzNDYyMCwgMzQ2MzMsIDM0NjQ2LCAzNDY1NCwgCi0gICAgMzQ2NjIsIDM0NjczLCAzNDY4MSwgMCwgMzQ2OTIsIDM0NzAwLCAzNDcxMSwgMzQ3MTksIDM0NzI3LCAzNDczNSwgMzQ3NDMsIAotICAgIDM0NzUxLCAzNDc1NCwgMzQ3NTcsIDM0NzYwLCAzNDc2MywgMzQ3NjksIDM0NzgwLCAzNDc4OCwgMCwgMzQ3OTksIDM0ODA3LCAKLSAgICAzNDgxOCwgMzQ4MjYsIDM0ODM0LCAzNDg0MiwgMzQ4NTAsIDM0ODU4LCAzNDg2MywgMzQ4NjgsIDM0ODczLCAzNDg4MSwgCi0gICAgMzQ4ODksIDM0OTAwLCAwLCAwLCAzNDkxMSwgMzQ5MTksIDM0OTMwLCAzNDkzOCwgMzQ5NDYsIDM0OTU0LCAwLCAzNDk2MiwgCi0gICAgMzQ5NjcsIDM0OTcyLCAzNDk3NywgMzQ5ODUsIDM0OTkzLCAzNTAwNCwgMzUwMTUsIDM1MDIzLCAzNTAzMSwgMzUwMzksIAotICAgIDM1MDUwLCAzNTA1OCwgMzUwNjYsIDM1MDc0LCAzNTA4MiwgMzUwOTAsIDM1MDk2LCAzNTEwMiwgMCwgMCwgMzUxMDUsIAotICAgIDM1MTE2LCAzNTEyNCwgMCwgMzUxMzUsIDM1MTQzLCAzNTE1NCwgMzUxNjIsIDM1MTcwLCAzNTE3OCwgMzUxODYsIDM1MTk0LCAKLSAgICAzNTE5NywgMCwgMzUyMDAsIDM1MjA0LCAzNTIwOCwgMzUyMTIsIDM1MjE2LCAzNTIyMCwgMzUyMjQsIDM1MjI4LCAzNTIzMiwgCi0gICAgMzUyMzYsIDM1MjQwLCAzNTI0NCwgMzUyNTAsIDM1MjU2LCAzNTI2MiwgMzUyNjUsIDM1MjY4LCAzNTI3MCwgMzUyNzQsIAotICAgIDM1Mjc4LCAzNTI4MiwgMzUyODYsIDM1Mjg4LCAzNTI5MiwgMzUyOTYsIDM1MzAyLCAzNTMwOCwgMzUzMTUsIDM1MzIyLCAKLSAgICAzNTMyNywgMzUzMzIsIDM1MzM4LCAzNTM0NCwgMzUzNDYsIDM1MzQ5LCAzNTM1MSwgMzUzNTUsIDM1MzU5LCAzNTM2MywgCi0gICAgMzUzNjYsIDM1MzcwLCAzNTM3NCwgMzUzNzgsIDM1MzgyLCAzNTM4NiwgMzUzOTIsIDM1Mzk2LCAzNTQwMCwgMzU0MDYsIAotICAgIDM1NDExLCAzNTQxOCwgMzU0MjAsIDM1NDIzLCAzNTQyNywgMzU0MzAsIDM1NDM0LCAzNTQzOSwgMzU0NDEsIDM1NDUwLCAKLSAgICAzNTQ1OSwgMzU0NjIsIDM1NDY2LCAzNTQ2OCwgMzU0NzAsIDM1NDcyLCAzNTQ3NSwgMzU0ODEsIDM1NDgzLCAzNTQ4NywgCi0gICAgMzU0OTEsIDM1NDk4LCAzNTUwNSwgMzU1MDksIDM1NTE0LCAzNTUxOSwgMzU1MjQsIDM1NTI4LCAzNTUzMiwgMzU1MzYsIAotICAgIDM1NTM5LCAzNTU0MiwgMzU1NDYsIDM1NTUzLCAzNTU1OCwgMzU1NjIsIDM1NTY2LCAzNTU3MSwgMzU1NzUsIDM1NTc5LCAKLSAgICAzNTU4NCwgMzU1ODksIDM1NTkzLCAzNTU5NywgMzU2MDEsIDM1NjAzLCAzNTYwOCwgMzU2MTMsIDM1NjE3LCAzNTYyMSwgCi0gICAgMzU2MjUsIDM1NjI5LCAwLCAwLCAwLCAwLCAwLCAzNTYzMywgMzU2MzksIDM1NjQ1LCAzNTY1MSwgMzU2NTcsIDM1NjYyLCAKLSAgICAzNTY2NywgMzU2NzEsIDAsIDAsIDM1Njc3LCAzNTY4MCwgMzU2ODMsIDM1Njg2LCAzNTY4OSwgMzU2OTIsIDM1Njk1LCAKLSAgICAzNTY5OSwgMzU3MDMsIDM1NzA4LCAzNTcxMywgMzU3MTgsIDM1NzI0LCAzNTcyOCwgMzU3MzEsIDM1NzM0LCAzNTczNywgCi0gICAgMzU3NDAsIDM1NzQzLCAzNTc0NiwgMzU3NDksIDM1NzUyLCAzNTc1NSwgMzU3NTksIDM1NzYzLCAzNTc2OCwgMzU3NzMsIDAsIAotICAgIDM1Nzc4LCAzNTc4NCwgMzU3OTAsIDM1Nzk2LCAzNTgwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMzU4MTAsIDM1ODEzLCAzNTgxNiwgMzU4MTksIDM1ODI0LCAzNTgyNywgMzU4MzAsIDM1ODMzLCAzNTgzNiwgMzU4MzksIAotICAgIDM1ODQyLCAzNTg0NiwgMzU4NDksIDM1ODUyLCAzNTg1NSwgMzU4NTgsIDM1ODYxLCAzNTg2NiwgMzU4NjksIDM1ODcyLCAKLSAgICAzNTg3NSwgMzU4NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDM1ODgxLCAzNTg4NiwgMzU4OTEsIDM1ODk4LCAzNTkwNiwgMzU5MTEsIDM1OTE2LCAzNTkyMCwgCi0gICAgMzU5MjQsIDM1OTI5LCAzNTkzNiwgMzU5NDMsIDM1OTQ3LCAzNTk1MiwgMzU5NTcsIDM1OTYyLCAzNTk2NywgMzU5NzQsIAotICAgIDM1OTc5LCAzNTk4NCwgMzU5ODksIDM1OTk4LCAzNjAwNSwgMzYwMTEsIDM2MDE1LCAzNjAyMCwgMzYwMjYsIDM2MDMxLCAKLSAgICAzNjAzOCwgMzYwNDYsIDM2MDU0LCAzNjA1OCwgMzYwNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDM2MDY2LCAzNjA3MCwgMzYwNzcsIDM2MDgxLCAzNjA4NSwgMzYwOTAsIDM2MDk0LCAzNjA5OCwgMzYxMDIsIAotICAgIDM2MTA0LCAzNjEwOCwgMzYxMTEsIDM2MTE0LCAzNjExOCwgMzYxMjEsIDM2MTI1LCAzNjEzMywgMzYxMzYsIDM2MTQwLCAKLSAgICAzNjE0MywgMzYxNDYsIDM2MTUyLCAzNjE1NSwgMzYxNTgsIDM2MTY0LCAzNjE2OCwgMzYxNzIsIDM2MTc2LCAzNjE3OSwgCi0gICAgMzYxODMsIDM2MTg2LCAzNjE5MCwgMzYxOTIsIDM2MTk1LCAzNjE5OCwgMzYyMDIsIDM2MjA0LCAzNjIwOCwgMzYyMTEsIAotICAgIDM2MjE0LCAzNjIxOSwgMzYyMjQsIDM2MjMwLCAzNjIzMywgMzYyMzYsIDM2MjQwLCAzNjI0NSwgMzYyNDgsIDM2MjUxLCAKLSAgICAzNjI1NCwgMzYyNTgsIDM2MjYyLCAzNjI2NSwgMzYyNjgsIDM2MjcwLCAzNjI3MywgMzYyNzYsIDM2Mjc5LCAzNjI4MywgCi0gICAgMzYyODgsIDM2MjkxLCAzNjI5NSwgMzYyOTksIDM2MzAzLCAzNjMwNywgMzYzMTIsIDM2MzE2LCAzNjMyMCwgMzYzMjQsIAotICAgIDM2MzI5LCAzNjMzNCwgMzYzMzksIDM2MzQzLCAzNjM0NywgMzYzNTIsIDM2MzU2LCAzNjM1OSwgMzYzNjIsIDM2MzY0LCAKLSAgICAzNjM2OCwgMCwgMCwgMCwgMzYzNzQsIDM2MzgxLCAzNjM4OCwgMzYzOTUsIDM2NDAyLCAzNjQwOSwgMzY0MTcsIDM2NDI0LCAKLSAgICAzNjQzMiwgMzY0MzksIDM2NDQ2LCAzNjQ1NCwgMzY0NjIsIDM2NDY3LCAzNjQ3MSwgMzY0NzUsIDM2NDc5LCAzNjQ4MywgCi0gICAgMzY0ODcsIDM2NDkxLCAzNjQ5NSwgMzY0OTksIDM2NTAzLCAzNjUwOCwgMzY1MTMsIDM2NTE4LCAzNjUyMywgMzY1MjksIAotICAgIDM2NTM2LCAzNjU0MiwgMzY1NDcsIDM2NTUyLCAzNjU1NywgMzY1NjIsIDM2NTY3LCAzNjU3MiwgMzY1NzcsIDM2NTgyLCAKLSAgICAzNjU4NywgMzY1OTMsIDM2NTk5LCAzNjYwNSwgMzY2MTEsIDM2NjE4LCAzNjYyNiwgMzY2MzMsIDM2NjQzLCAzNjY1MCwgCi0gICAgMzY2NTcsIDM2NjY0LCAzNjY3MCwgMzY2NzgsIDM2Njg2LCAzNjY5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzY3MDEsIAotICAgIDM2NzAzLCAzNjcwNiwgMzY3MDgsIDM2NzExLCAzNjcxNCwgMzY3MTcsIDM2NzIyLCAzNjcyNywgMzY3MzIsIDM2NzM3LCAKLSAgICAzNjc0MSwgMzY3NDUsIDM2NzQ5LCAzNjc1MywgMzY3NTgsIDM2NzY0LCAzNjc2OSwgMzY3NzUsIDM2NzgwLCAzNjc4NSwgCi0gICAgMzY3OTAsIDM2Nzk2LCAzNjgwMSwgMzY4MDcsIDM2ODEzLCAzNjgxNywgMzY4MjEsIDM2ODI2LCAzNjgzMSwgMzY4MzYsIAotICAgIDM2ODQxLCAzNjg0NiwgMzY4NTQsIDM2ODYyLCAzNjg3MCwgMzY4NzgsIDM2ODg1LCAzNjg5MywgMzY5MDAsIDM2OTA3LCAKLSAgICAzNjkxNSwgMzY5MjUsIDM2OTMyLCAzNjkzOSwgMzY5NDYsIDM2OTUzLCAzNjk2MSwgMzY5NjksIDM2OTc2LCAzNjk4MywgCi0gICAgMzY5OTEsIDM2OTk5LCAzNzAwNCwgMzcwMTIsIDM3MDE3LCAzNzAyMiwgMzcwMjgsIDM3MDMzLCAzNzAzOSwgMzcwNDYsIAotICAgIDM3MDUzLCAzNzA1OCwgMzcwNjQsIDM3MDY5LCAzNzA3MiwgMzcwNzYsIDM3MDc5LCAzNzA4MywgMzcwODcsIDM3MDkxLCAKLSAgICAzNzA5NywgMzcxMDMsIDM3MTA5LCAzNzExNSwgMzcxMTksIDM3MTIzLCAzNzEyNywgMzcxMzEsIDM3MTM3LCAzNzE0MywgCi0gICAgMzcxNDcsIDM3MTUyLCAzNzE1NiwgMzcxNjEsIDM3MTY1LCAzNzE2OSwgMzcxNzIsIDM3MTc2LCAzNzE3OSwgMzcxODMsIAotICAgIDM3MTkwLCAzNzE5OCwgMzcyMDksIDM3MjIwLCAzNzIyNSwgMzcyMzQsIDM3MjQxLCAzNzI0OSwgMzcyNTcsIDM3MjYxLCAKLSAgICAzNzI2NywgMzcyNzUsIDM3Mjc5LCAzNzI4NCwgMzcyODksIDM3Mjk1LCAzNzMwMSwgMzczMDcsIDM3MzE0LCAzNzMxOCwgCi0gICAgMzczMjIsIDM3MzI3LCAzNzMzMCwgMzczMzIsIDM3MzM2LCAzNzM0MCwgMzczNDcsIDM3MzUxLCAzNzM1MywgMzczNTUsIAotICAgIDM3MzU5LCAzNzM2NiwgMzczNzEsIDM3Mzc3LCAzNzM4NiwgMzczOTMsIDM3Mzk4LCAzNzQwMiwgMzc0MDYsIDM3NDEwLCAKLSAgICAzNzQxMywgMzc0MTYsIDM3NDE5LCAzNzQyMywgMzc0MjcsIDM3NDMxLCAzNzQzNSwgMzc0MzksIDM3NDQyLCAzNzQ0NiwgCi0gICAgMzc0NTAsIDM3NDUzLCAzNzQ1NSwgMzc0NTgsIDM3NDYwLCAzNzQ2NCwgMzc0NjgsIDM3NDcwLCAzNzQ3NSwgMzc0NzgsIAotICAgIDM3NDgyLCAzNzQ4NiwgMzc0OTAsIDM3NDkyLCAzNzQ5NCwgMzc0OTYsIDM3NDk5LCAzNzUwMywgMzc1MDcsIDM3NTExLCAKLSAgICAzNzUxNSwgMzc1MTksIDM3NTI1LCAzNzUzMSwgMzc1MzMsIDM3NTM1LCAzNzUzNywgMzc1MzksIDM3NTQyLCAzNzU0NCwgCi0gICAgMzc1NDgsIDM3NTUwLCAzNzU1NCwgMzc1NTYsIDM3NTYxLCAzNzU2NSwgMzc1NjksIDM3NTcxLCAzNzU3NCwgMzc1NzgsIAotICAgIDM3NTgzLCAzNzU4NywgMzc1OTYsIDM3NjA2LCAzNzYxMCwgMzc2MTUsIDM3NjIxLCAzNzYyNCwgMzc2MjgsIDM3NjMxLCAKLSAgICAzNzYzNiwgMzc2NDAsIDM3NjQ2LCAzNzY1MCwgMzc2NjEsIDM3NjY5LCAzNzY3MywgMzc2NzcsIDM3NjgzLCAzNzY4NywgCi0gICAgMzc2OTAsIDM3NjkyLCAzNzY5NSwgMzc2OTksIDM3NzAzLCAzNzcwOSwgMzc3MTMsIDM3NzE3LCAzNzcyMCwgMzc3MjMsIAotICAgIDM3NzI3LCAzNzczMiwgMzc3MzcsIDM3NzQyLCAzNzc0NywgMzc3NTIsIDM3NzU5LCAzNzc2NiwgMzc3NzAsIDM3Nzc0LCAKLSAgICAzNzc3NiwgMzc3ODAsIDM3NzgzLCAzNzc4NiwgMzc3OTQsIDM3ODAyLCAzNzgwOCwgMzc4MTQsIDM3ODIzLCAzNzgzMiwgCi0gICAgMzc4MzcsIDM3ODQyLCAzNzg1MCwgMzc4NTgsIDM3ODYwLCAzNzg2MiwgMzc4NjcsIDM3ODcyLCAzNzg3OCwgMzc4ODQsIAotICAgIDM3ODg5LCAzNzg5NCwgMzc4OTgsIDM3OTAyLCAzNzkwOCwgMzc5MTQsIDM3OTIwLCAzNzkyNiwgMzc5MzYsIDM3OTQ2LCAKLSAgICAzNzk1MywgMzc5NjAsIDM3OTYyLCAzNzk2NiwgMzc5NzAsIDM3OTc1LCAzNzk4MCwgMzc5ODcsIDM3OTk0LCAzNzk5NywgCi0gICAgMzgwMDAsIDM4MDAzLCAzODAwNiwgMzgwMDksIDM4MDE0LCAzODAxOCwgMzgwMjMsIDM4MDI4LCAzODAzMSwgMzgwMzQsIAotICAgIDM4MDM4LCAzODA0MiwgMzgwNDYsIDM4MDUxLCAzODA1NCwgMzgwNTcsIDM4MDYwLCAzODA2MywgMzgwNjUsIDM4MDY3LCAKLSAgICAzODA2OSwgMzgwNzEsIDM4MDc5LCAzODA4NywgMzgwOTIsIDM4MDk1LCAzODEwMCwgMzgxMTAsIDM4MTE2LCAzODEyMiwgCi0gICAgMzgxMjgsIDM4MTM2LCAzODE0NCwgMzgxNTUsIDM4MTU5LCAzODE2MywgMzgxNjUsIDM4MTcxLCAzODE3MywgMzgxNzUsIAotICAgIDM4MTc3LCAzODE3OSwgMzgxODUsIDM4MTg4LCAzODE5NCwgMzgyMDAsIDM4MjA0LCAzODIwOCwgMzgyMTIsIDM4MjE1LCAKLSAgICAzODIxOSwgMzgyMjMsIDM4MjI1LCAzODIzNCwgMzgyNDMsIDM4MjQ4LCAzODI1MywgMzgyNTgsIDM4MjY0LCAzODI3MCwgCi0gICAgMzgyNzMsIDM4Mjc2LCAzODI3OSwgMzgyODIsIDM4Mjg0LCAzODI4OSwgMzgyOTQsIDM4Mjk5LCAzODMwNSwgMzgzMTEsIAotICAgIDM4MzE4LCAzODMyNSwgMzgzMzAsIDM4MzM1LCAzODM0MCwgMzgzNDUsIDM4MzUzLCAzODM2MSwgMzgzNjksIDM4Mzc3LCAKLSAgICAzODM4NSwgMzgzOTMsIDM4NDAxLCAzODQwOSwgMzg0MTcsIDM4NDI1LCAzODQzMiwgMzg0NDMsIDM4NDUyLCAzODQ2NiwgCi0gICAgMzg0NjksIDM4NDc0LCAzODQ4MCwgMzg0ODYsIDM4NDkzLCAzODUwNywgMzg1MjIsIDM4NTI4LCAzODUzNCwgMzg1NDEsIAotICAgIDM4NTQ3LCAzODU1NSwgMzg1NjEsIDM4NTc0LCAzODU4OCwgMzg1OTMsIDM4NTk5LCAzODYwNiwgMzg2MDksIDM4NjEyLCAKLSAgICAzODYxNCwgMzg2MTcsIDM4NjIwLCAzODYyMiwgMzg2MjQsIDM4NjI4LCAzODYzMSwgMzg2MzQsIDM4NjM3LCAzODY0MCwgCi0gICAgMzg2NDUsIDM4NjUwLCAzODY1NSwgMzg2NjAsIDM4NjYzLCAzODY2NiwgMzg2NjgsIDM4NjcwLCAzODY3MiwgMzg2NzYsIAotICAgIDM4NjgwLCAzODY4NCwgMzg2OTAsIDM4NjkzLCAzODY5NSwgMzg2OTcsIDM4NzAyLCAzODcwNywgMzg3MTIsIDM4NzE3LCAKLSAgICAzODcyMiwgMzg3MjcsIDM4NzI5LCAzODczMSwgMzg3NDAsIDM4NzQ0LCAzODc1MSwgMzg3NjAsIDM4NzYyLCAzODc2NywgCi0gICAgMzg3NzIsIDM4Nzc5LCAzODc4MywgMzg3ODUsIDM4Nzg5LCAzODc5MSwgMzg3OTUsIDM4Nzk5LCAzODgwMywgMzg4MDUsIAotICAgIDM4ODA3LCAzODgwOSwgMzg4MTQsIDM4ODIxLCAzODgyOCwgMzg4MzUsIDM4ODQyLCAzODg0OSwgMzg4NTYsIDM4ODYzLCAKLSAgICAzODg3MCwgMzg4NzYsIDM4ODgyLCAzODg4OSwgMzg4OTYsIDM4OTAzLCAzODkxMCwgMzg5MTYsIDM4OTIyLCAzODkyOSwgCi0gICAgMzg5MzYsIDM4OTQzLCAzODk1MSwgMzg5NTgsIDM4OTY2LCAzODk3MywgMzg5ODEsIDM4OTg4LCAzODk5NiwgMzkwMDQsIAotICAgIDM5MDExLCAzOTAxOSwgMzkwMjYsIDM5MDM0LCAzOTA0MSwgMzkwNDksIDM5MDU2LCAzOTA2MywgMzkwNzAsIDM5MDc3LCAKLSAgICAzOTA4NCwgMzkwOTIsIDM5MDk5LCAzOTEwNiwgMzkxMTMsIDM5MTIwLCAzOTEyNiwgMzkxMzIsIDM5MTM4LCAzOTE0NCwgCi0gICAgMzkxNTIsIDM5MTYwLCAzOTE2NiwgMzkxNzIsIDM5MTc4LCAzOTE4NCwgMzkxODksIDM5MTk1LCAzOTIwMiwgMzkyMTAsIAotICAgIDM5MjE3LCAzOTIyNCwgMzkyMzEsIDM5MjM2LCAzOTI0MSwgMzkyNDYsIDM5MjUzLCAzOTI2MCwgMzkyNjcsIDM5Mjc0LCAKLSAgICAzOTI3OSwgMzkyODMsIDM5MjkyLCAzOTI5OCwgMzkzMDEsIDM5MzA5LCAzOTMxMiwgMzkzMTcsIDM5MzIyLCAzOTMyNSwgCi0gICAgMzkzMjgsIDM5MzM2LCAzOTMzOSwgMzkzNDQsIDM5MzQ3LCAzOTM1NCwgMzkzNTksIDM5MzY3LCAzOTM3MCwgMzkzNzMsIAotICAgIDM5Mzc2LCAzOTM4MSwgMzkzODYsIDM5Mzg5LCAzOTM5MiwgMzkzOTksIDM5NDAyLCAzOTQwNywgMzk0MTQsIDM5NDE4LCAKLSAgICAzOTQyMiwgMzk0MjcsIDM5NDMyLCAzOTQzOCwgMzk0NDMsIDM5NDQ4LCAzOTQ1NCwgMzk0NTksIDM5NDY0LCAzOTQ3MiwgCi0gICAgMzk0NzgsIDM5NDg1LCAzOTQ5MywgMzk0OTksIDM5NTA2LCAzOTUxNCwgMzk1MjMsIDM5NTMwLCAzOTUzNiwgMzk1NDQsIAotICAgIDM5NTUzLCAzOTU2MCwgMzk1NjQsIDM5NTY5LCAzOTU4MSwgMzk1OTMsIDM5NTk3LCAzOTYwMSwgMzk2MDUsIDM5NjA5LCAKLSAgICAzOTYxOSwgMzk2MjMsIDM5NjI4LCAzOTYzMywgMzk2MzgsIDM5NjQzLCAzOTY0OCwgMzk2NTMsIDM5NjYzLCAzOTY3MywgCi0gICAgMzk2ODEsIDM5NjkxLCAzOTcwMSwgMzk3MDksIDM5NzE5LCAzOTcyOSwgMzk3MzcsIDM5NzQ3LCAzOTc1NywgMzk3NjUsIAotICAgIDM5NzczLCAzOTc4MywgMzk3OTMsIDM5Nzk2LCAzOTc5OSwgMzk4MDIsIDM5ODA3LCAzOTgxMSwgMzk4MTcsIDM5ODI0LCAKLSAgICAzOTgzMSwgMzk4MzksIDM5ODQ2LCAzOTg1MCwgMzk4NTQsIDM5ODU4LCAzOTg2MiwgMzk4NjQsIDM5ODY4LCAzOTg3MiwgCi0gICAgMzk4NzcsIDM5ODgyLCAzOTg4OSwgMzk4OTYsIDM5ODk5LCAzOTkwNiwgMzk5MDgsIDM5OTEwLCAzOTkxNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzk5MTgsIAotICAgIDM5OTIyLCAzOTkyOSwgMzk5MzYsIDM5OTQzLCAzOTk1MCwgMzk5NTQsIDM5OTU4LCAzOTk2MiwgMzk5NjYsIDM5OTcxLCAKLSAgICAzOTk3NywgMzk5ODIsIDM5OTg3LCAzOTk5MywgMzk5OTksIDQwMDA1LCA0MDAxMywgNDAwMjAsIDQwMDI3LCA0MDAzNCwgCi0gICAgNDAwNDEsIDQwMDQ3LCA0MDA1MywgNDAwNjIsIDQwMDY2LCA0MDA3MywgNDAwNzcsIDQwMDgxLCA0MDA4NywgNDAwOTMsIAotICAgIDQwMDk5LCA0MDEwNSwgNDAxMDksIDQwMTEzLCA0MDExNiwgNDAxMjAsIDQwMTI0LCA0MDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDAxMzYsIDQwMTM5LCAKLSAgICA0MDE0MywgNDAxNDcsIDQwMTUzLCA0MDE1OSwgNDAxNjUsIDQwMTczLCA0MDE4MCwgNDAxODQsIDQwMTkyLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MDE5NywgNDAyMDAsIAotICAgIDQwMjAzLCA0MDIwNiwgNDAyMDksIDQwMjEyLCA0MDIxNSwgNDAyMTgsIDQwMjIxLCA0MDIyNCwgNDAyMjgsIDQwMjMyLCAKLSAgICA0MDIzNiwgNDAyNDAsIDQwMjQ0LCA0MDI0OCwgNDAyNTIsIDQwMjU2LCA0MDI2MCwgNDAyNjQsIDQwMjY4LCA0MDI3MSwgCi0gICAgNDAyNzQsIDQwMjc3LCA0MDI4MCwgNDAyODMsIDQwMjg2LCA0MDI4OSwgNDAyOTIsIDQwMjk1LCA0MDI5OSwgNDAzMDMsIAotICAgIDQwMzA3LCA0MDMxMSwgNDAzMTUsIDQwMzE5LCA0MDMyMywgNDAzMjcsIDQwMzMxLCA0MDMzNSwgNDAzMzksIDQwMzQ1LCAKLSAgICA0MDM1MSwgNDAzNTcsIDQwMzY0LCA0MDM3MSwgNDAzNzgsIDQwMzg1LCA0MDM5MiwgNDAzOTksIDQwNDA2LCA0MDQxMywgCi0gICAgNDA0MjAsIDQwNDI3LCA0MDQzNCwgNDA0NDEsIDQwNDQ4LCA0MDQ1NSwgNDA0NjIsIDQwNDY5LCA0MDQ3NiwgNDA0ODEsIAotICAgIDQwNDg3LCA0MDQ5MywgNDA0OTksIDQwNTA0LCA0MDUxMCwgNDA1MTUsIDQwNTIwLCA0MDUyNSwgNDA1MzEsIDQwNTM3LCAKLSAgICA0MDU0MiwgNDA1NDcsIDQwNTUyLCA0MDU1NywgNDA1NjMsIDQwNTY5LCA0MDU3NCwgNDA1NzksIDQwNTg1LCA0MDU5MCwgCi0gICAgNDA1OTUsIDQwNjAxLCA0MDYwNywgNDA2MTMsIDQwNjE5LCA0MDYyNCwgNDA2MzAsIDQwNjM2LCA0MDY0MiwgNDA2NDcsIAotICAgIDQwNjUzLCA0MDY1OCwgNDA2NjMsIDQwNjY4LCA0MDY3NCwgNDA2ODAsIDQwNjg1LCA0MDY5MCwgNDA2OTUsIDQwNzAwLCAKLSAgICA0MDcwNiwgNDA3MTIsIDQwNzE3LCA0MDcyMiwgNDA3MjgsIDQwNzMzLCA0MDczOCwgNDA3NDQsIDQwNzUwLCA0MDc1NiwgCi0gICAgNDA3NjIsIDQwNzY3LCA0MDc3MywgNDA3NzksIDQwNzg1LCA0MDc5MCwgNDA3OTYsIDQwODAxLCA0MDgwNiwgNDA4MTEsIAotICAgIDQwODE3LCA0MDgyMywgNDA4MjgsIDQwODMzLCA0MDgzOCwgNDA4NDMsIDQwODQ5LCA0MDg1NSwgNDA4NjAsIDQwODY1LCAKLSAgICA0MDg3MSwgNDA4NzYsIDQwODgxLCA0MDg4NywgNDA4OTMsIDQwODk5LCA0MDkwNSwgNDA5MDksIDQwOTE1LCA0MDkyMSwgCi0gICAgNDA5MjcsIDQwOTMzLCA0MDkzOSwgNDA5NDUsIDQwOTUxLCA0MDk1NywgNDA5NjMsIDQwOTY5LCA0MDk3MywgNDA5NzcsIAotICAgIDQwOTgxLCA0MDk4NSwgNDA5ODksIDQwOTkzLCA0MDk5NywgNDEwMDEsIDQxMDA1LCA0MTAxMCwgNDEwMTYsIDQxMDIxLCAKLSAgICA0MTAyNiwgNDEwMzEsIDQxMDM2LCA0MTA0NSwgNDEwNTQsIDQxMDYzLCA0MTA3MiwgNDEwODEsIDQxMDkwLCA0MTA5OSwgCi0gICAgNDExMDgsIDQxMTE1LCA0MTEyMywgNDExMzEsIDQxMTM4LCA0MTE0NSwgNDExNTMsIDQxMTYxLCA0MTE2OCwgNDExNzUsIAotICAgIDQxMTgzLCA0MTE5MSwgNDExOTgsIDQxMjA1LCA0MTIxMywgNDEyMjEsIDQxMjI4LCA0MTIzNSwgNDEyNDMsIDQxMjUyLCAKLSAgICA0MTI2MSwgNDEyNjksIDQxMjc4LCA0MTI4NywgNDEyOTQsIDQxMzAxLCA0MTMwOSwgNDEzMTgsIDQxMzI3LCA0MTMzNSwgCi0gICAgNDEzNDQsIDQxMzUzLCA0MTM2MCwgNDEzNjcsIDQxMzc2LCA0MTM4NSwgNDEzOTMsIDQxNDAxLCA0MTQxMCwgNDE0MTksIAotICAgIDQxNDI2LCA0MTQzMywgNDE0NDIsIDQxNDUxLCA0MTQ1OSwgNDE0NjcsIDQxNDc2LCA0MTQ4NSwgNDE0OTIsIDQxNDk5LCAKLSAgICA0MTUwOCwgNDE1MTcsIDQxNTI1LCA0MTUzNCwgNDE1NDMsIDQxNTUxLCA0MTU2MSwgNDE1NzEsIDQxNTgxLCA0MTU5MSwgCi0gICAgNDE2MDAsIDQxNjA5LCA0MTYxOCwgNDE2MjcsIDQxNjM0LCA0MTY0MiwgNDE2NTAsIDQxNjU4LCA0MTY2NiwgNDE2NzEsIAotICAgIDQxNjc2LCA0MTY4NSwgNDE2OTMsIDQxNzAwLCA0MTcwOSwgNDE3MTcsIDQxNzI0LCA0MTczMywgNDE3NDEsIDQxNzQ4LCAKLSAgICA0MTc1NywgNDE3NjUsIDQxNzcyLCA0MTc4MSwgNDE3ODksIDQxNzk2LCA0MTgwNSwgNDE4MTMsIDQxODIwLCA0MTgyOSwgCi0gICAgNDE4MzcsIDQxODQ0LCA0MTg1MywgNDE4NjEsIDQxODY4LCA0MTg3NywgNDE4ODUsIDQxODkyLCA0MTkwMSwgNDE5MTAsIAotICAgIDQxOTE5LCA0MTkyOCwgNDE5NDAsIDQxOTUyLCA0MTk1OSwgNDE5NjQsIDQxOTY5LCA0MTk3NCwgNDE5NzksIDQxOTg0LCAKLSAgICA0MTk4OSwgNDE5OTQsIDQxOTk5LCA0MjAwNywgNDIwMTUsIDQyMDIzLCA0MjAzMSwgNDIwMzYsIDQyMDQyLCA0MjA0OCwgCi0gICAgNDIwNTQsIDQyMDU4LCA0MjA2NSwgNDIwNzEsIDQyMDc4LCA0MjA4MiwgNDIwODksIDQyMDk1LCA0MjEwMiwgNDIxMDYsIAotICAgIDQyMTEyLCA0MjExOCwgNDIxMjQsIDQyMTI4LCA0MjEzMSwgNDIxMzUsIDQyMTM5LCA0MjE0NiwgNDIxNTIsIDQyMTU3LCAKLSAgICA0MjE2MiwgNDIxNjgsIDQyMTgwLCA0MjE4OSwgNDIyMDIsIDQyMjE1LCA0MjIyMSwgNDIyMzAsIDQyMjQyLCA0MjI0NSwgCi0gICAgNDIyNDgsIDQyMjU1LCA0MjI2MywgNDIyNjgsIDQyMjczLCA0MjI4MSwgNDIyOTEsIDQyMzAxLCA0MjMwOSwgNDIzMTMsIAotICAgIDQyMzE3LCA0MjMyMCwgNDIzMjMsIDQyMzI3LCA0MjMzMSwgNDIzMzQsIDQyMzM3LCA0MjM0MiwgNDIzNDcsIDQyMzUzLCAKLSAgICA0MjM1OSwgNDIzNjQsIDQyMzY5LCA0MjM3NSwgNDIzODEsIDQyMzg2LCA0MjM5MSwgNDIzOTYsIDQyNDAxLCA0MjQwNywgCi0gICAgNDI0MTMsIDQyNDE4LCA0MjQyMywgNDI0MjksIDQyNDM1LCA0MjQ0MCwgNDI0NDUsIDQyNDQ4LCA0MjQ1MSwgNDI0NjAsIAotICAgIDQyNDYyLCA0MjQ2NCwgNDI0NjcsIDQyNDcxLCA0MjQ3NywgNDI0NzksIDQyNDgyLCA0MjQ4OSwgNDI0OTYsIDQyNTAzLCAKLSAgICA0MjUxMSwgNDI1MjEsIDQyNTM1LCA0MjU0MCwgNDI1NDUsIDQyNTQ5LCA0MjU1NCwgNDI1NjIsIDQyNTY5LCA0MjU3OCwgCi0gICAgNDI1ODcsIDQyNTk1LCA0MjYwMywgNDI2MDgsIDQyNjEyLCA0MjYxNywgNDI2MjIsIDQyNjI4LCA0MjYzNCwgNDI2MzcsIAotICAgIDQyNjQzLCA0MjY0OSwgNDI2NTksIDQyNjY4LCA0MjY3NiwgNDI2ODQsIDQyNjkzLCA0MjcwMiwgNDI3MDYsIDQyNzE0LCAKLSAgICA0MjcyMSwgNDI3MjgsIDQyNzM2LCA0Mjc0NSwgNDI3NTMsIDQyNzYxLCA0Mjc3MCwgNDI3NzUsIDQyNzgwLCA0Mjc4NCwgCi0gICAgNDI3ODksIDQyNzk0LCA0MjgwMCwgNDI4MDYsIDQyODEwLCA0MjgxNiwgNDI4MTgsIDQyODIwLCA0MjgyMiwgNDI4MjQsIAotICAgIDQyODI3LCA0MjgzMCwgNDI4MzIsIDQyODM0LCA0MjgzNiwgNDI4NDAsIDQyODQ0LCA0Mjg0NiwgNDI4NDgsIDQyODUxLCAKLSAgICA0Mjg1NCwgNDI4NTgsIDQyODY0LCA0Mjg3MCwgNDI4NzIsIDQyODc5LCA0Mjg4MywgNDI4ODgsIDQyODkzLCA0Mjg5NSwgCi0gICAgNDI5MDQsIDQyOTEwLCA0MjkxNiwgNDI5MjIsIDQyOTI4LCA0MjkzNCwgNDI5NDAsIDQyOTQ1LCA0Mjk0OCwgNDI5NTEsIAotICAgIDQyOTU0LCA0Mjk1NiwgNDI5NTgsIDQyOTYyLCA0Mjk2NiwgNDI5NzEsIDQyOTc2LCA0Mjk4MSwgNDI5ODQsIDQyOTg4LCAKLSAgICA0Mjk5MywgNDI5OTYsIDQzMDAwLCA0MzAwNSwgNDMwMTAsIDQzMDE1LCA0MzAyMCwgNDMwMjUsIDQzMDMwLCA0MzAzNSwgCi0gICAgNDMwNDAsIDQzMDQ1LCA0MzA1MCwgNDMwNTUsIDQzMDYwLCA0MzA2NiwgNDMwNzIsIDQzMDc4LCA0MzA4MCwgNDMwODMsIAotICAgIDQzMDg1LCA0MzA4OCwgNDMwOTAsIDQzMDkyLCA0MzA5NCwgNDMwOTYsIDQzMDk4LCA0MzEwMCwgNDMxMDIsIDQzMTA0LCAKLSAgICA0MzEwNiwgNDMxMDgsIDQzMTEwLCA0MzExMiwgNDMxMTQsIDQzMTE2LCA0MzExOCwgNDMxMjAsIDQzMTIyLCA0MzEyNywgCi0gICAgNDMxMzIsIDQzMTM3LCA0MzE0MiwgNDMxNDcsIDQzMTUyLCA0MzE1NywgNDMxNjIsIDQzMTY3LCA0MzE3MiwgNDMxNzcsIAotICAgIDQzMTgyLCA0MzE4NywgNDMxOTIsIDQzMTk3LCA0MzIwMiwgNDMyMDcsIDQzMjEyLCA0MzIxNywgNDMyMjIsIDQzMjI2LCAKLSAgICA0MzIzMCwgNDMyMzQsIDQzMjQwLCA0MzI0NiwgNDMyNTEsIDQzMjU2LCA0MzI2MSwgNDMyNjYsIDQzMjcxLCA0MzI3NiwgCi0gICAgNDMyODQsIDQzMjkyLCA0MzMwMCwgNDMzMDgsIDQzMzE2LCA0MzMyNCwgNDMzMzIsIDQzMzQwLCA0MzM0NiwgNDMzNTEsIAotICAgIDQzMzU2LCA0MzM2MSwgNDMzNjQsIDQzMzY4LCA0MzM3MiwgNDMzNzYsIDQzMzgwLCA0MzM4NCwgNDMzODgsIDQzMzk1LCAKLSAgICA0MzQwMiwgNDM0MTAsIDQzNDE4LCA0MzQyMywgNDM0MjgsIDQzNDM1LCA0MzQ0MiwgNDM0NDksIDQzNDU2LCA0MzQ1OSwgCi0gICAgNDM0NjIsIDQzNDY3LCA0MzQ2OSwgNDM0NzMsIDQzNDc4LCA0MzQ4MCwgNDM0ODIsIDQzNDg0LCA0MzQ4NiwgNDM0OTEsIAotICAgIDQzNDk0LCA0MzQ5NiwgMCwgMCwgNDM1MDEsIDQzNTA0LCA0MzUwOCwgNDM1MTMsIDQzNTE4LCA0MzUyNiwgNDM1MzIsIAotICAgIDQzNTM3LCA0MzU0OCwgNDM1NTQsIDQzNTYwLCA0MzU2NSwgNDM1NzAsIDQzNTc2LCA0MzU3OSwgNDM1ODIsIDQzNTg3LCAKLSAgICA0MzU4OSwgNDM1OTMsIDQzNTk1LCA0MzU5NywgNDM1OTksIDQzNjAxLCA0MzYwMywgNDM2MDUsIDQzNjEwLCA0MzYxMiwgCi0gICAgNDM2MTQsIDQzNjE2LCAwLCAwLCAwLCA0MzYxOCwgNDM2MjMsIDQzNjI4LCA0MzYzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDM2MzgsIDQzNjQ0LCA0MzY0NywgNDM2NTIsIDAsIDQzNjU1LCA0MzY2MCwgNDM2NjQsIAotICAgIDQzNjY2LCAwLCAwLCA0MzY2OCwgNDM2NzIsIDQzNjc2LCA0MzY4MCwgNDM2ODIsIDQzNjg3LCA0MzY5MCwgNDM2OTMsIAotICAgIDQzNjk2LCA0MzcwMCwgNDM3MDQsIDQzNzA5LCA0MzcxMywgNDM3MTgsIDQzNzIzLCA0MzcyNywgNDM3MzMsIDQzNzQwLCAKLSAgICA0Mzc0MywgNDM3NDksIDQzNzU0LCA0Mzc1OCwgNDM3NjMsIDQzNzY5LCA0Mzc3NSwgNDM3ODIsIDQzNzg4LCA0Mzc5NSwgMCwgCi0gICAgNDM4MDIsIDQzODA5LCA0MzgxMywgNDM4MjAsIDQzODI2LCA0MzgzMSwgNDM4MzcsIDQzODQxLCA0Mzg0NiwgNDM4NDksIAotICAgIDQzODU1LCA0Mzg2MSwgNDM4NjgsIDQzODc2LCA0Mzg4MywgNDM4OTIsIDQzOTAyLCA0MzkwOSwgNDM5MTUsIDQzOTE5LCAKLSAgICA0MzkyNywgNDM5MzIsIDQzOTQxLCA0Mzk0NCwgNDM5NDcsIDQzOTU2LCA0Mzk2NywgNDM5NzQsIDQzOTc2LCA0Mzk4MiwgCi0gICAgNDM5ODcsIDQzOTg5LCA0Mzk5MiwgNDM5OTYsIDQ0MDA0LCAwLCA0NDAxMywgMCwgNDQwMTgsIDQ0MDI1LCA0NDAzMywgCi0gICAgNDQwNDAsIDAsIDAsIDAsIDQ0MDQ4LCAwLCA0NDA1NiwgNDQwNTksIDQ0MDYzLCA0NDA2NiwgNDQwNzcsIDQ0MDg3LCAKLSAgICA0NDA5NywgMCwgMCwgNDQxMDYsIDQ0MTE1LCA0NDEyMSwgNDQxMjksIDQ0MTMzLCA0NDE0MSwgNDQxNDUsIDQ0MTUzLCAKLSAgICA0NDE2MCwgNDQxNjcsIDQ0MTc2LCA0NDE4NSwgNDQxOTUsIDQ0MjA1LCA0NDIxNSwgNDQyMjUsIDQ0MjM0LCA0NDI0MywgCi0gICAgNDQyNTMsIDQ0MjYzLCA0NDI3MiwgNDQyODEsIDQ0Mjg4LCA0NDI5NSwgNDQzMDIsIDQ0MzA5LCA0NDMxNiwgNDQzMjMsIAotICAgIDQ0MzMwLCA0NDMzNywgNDQzNDQsIDQ0MzUyLCA0NDM1OCwgNDQzNjQsIDQ0MzcwLCA0NDM3NiwgNDQzODIsIDQ0Mzg4LCAKLSAgICA0NDM5NCwgNDQ0MDAsIDQ0NDA2LCA0NDQxMywgNDQ0MjEsIDQ0NDI5LCA0NDQzNywgNDQ0NDUsIDQ0NDUzLCA0NDQ2MSwgCi0gICAgNDQ0NjksIDQ0NDc3LCA0NDQ4NSwgNDQ0OTQsIDAsIDAsIDAsIDQ0NDk5LCA0NDUwNSwgNDQ1MDgsIDQ0NTE0LCA0NDUyMCwgCi0gICAgNDQ1MjUsIDQ0NTI5LCA0NDUzNCwgNDQ1NDAsIDQ0NTQ3LCA0NDU1MCwgNDQ1NTcsIDQ0NTY0LCA0NDU2OCwgNDQ1NzcsIAotICAgIDQ0NTg2LCA0NDU5MSwgNDQ1OTcsIDQ0NjAyLCA0NDYwNywgNDQ2MTQsIDQ0NjIxLCA0NDYyOCwgNDQ2MzYsIDAsIDQ0NjQ0LCAKLSAgICA0NDY1MywgNDQ2NTgsIDQ0NjYyLCA0NDY2OSwgNDQ2NzMsIDQ0NjgwLCA0NDY4OCwgNDQ2OTMsIDQ0NzAxLCA0NDcwNSwgCi0gICAgNDQ3MTAsIDQ0NzE0LCA0NDcxOSwgMCwgNDQ3MjMsIDQ0NzI4LCA0NDczNywgNDQ3MzksIDQ0NzQzLCA0NDc0NywgNDQ3NTQsIAotICAgIDQ0NzYxLCA0NDc2NiwgNDQ3NzQsIDQ0NzgwLCAwLCA0NDc4NiwgMCwgMCwgMCwgNDQ3ODksIDQ0Nzk3LCA0NDgwMSwgCi0gICAgNDQ4MDgsIDQ0ODE1LCA0NDgyMywgNDQ4MjgsIDQ0ODMzLCA0NDgzOSwgNDQ4NDQsIDQ0ODQ5LCA0NDg1NSwgNDQ4NjAsIAotICAgIDQ0ODYzLCA0NDg2NywgNDQ4NzEsIDQ0ODc4LCA0NDg4NywgNDQ4OTIsIDQ0OTAxLCA0NDkxMCwgNDQ5MTYsIDQ0OTIyLCAKLSAgICA0NDkyNywgNDQ5MzIsIDQ0OTM3LCA0NDk0MiwgNDQ5NDgsIDQ0OTU0LCA0NDk2MiwgNDQ5NzAsIDQ0OTc2LCA0NDk4MiwgCi0gICAgNDQ5ODcsIDQ0OTkyLCA0NDk5OSwgNDUwMDYsIDQ1MDEyLCA0NTAxNSwgNDUwMTgsIDQ1MDIyLCA0NTAyNiwgNDUwMzAsIAotICAgIDQ1MDM1LCA0NTA0MSwgNDUwNDcsIDQ1MDU0LCA0NTA2MSwgNDUwNjYsIDQ1MDcwLCA0NTA3NCwgNDUwNzgsIDQ1MDgyLCAKLSAgICA0NTA4NiwgNDUwOTAsIDQ1MDk0LCA0NTA5OCwgNDUxMDIsIDQ1MTA2LCA0NTExMCwgNDUxMTQsIDQ1MTE4LCA0NTEyMiwgCi0gICAgNDUxMjYsIDQ1MTMwLCA0NTEzNCwgNDUxMzgsIDQ1MTQyLCA0NTE0NiwgNDUxNTAsIDQ1MTU0LCA0NTE1OCwgNDUxNjIsIAotICAgIDQ1MTY2LCA0NTE3MCwgNDUxNzQsIDQ1MTc4LCA0NTE4MiwgNDUxODYsIDQ1MTkwLCA0NTE5NCwgNDUxOTgsIDQ1MjAyLCAKLSAgICA0NTIwNiwgNDUyMTAsIDQ1MjE0LCA0NTIxOCwgNDUyMjIsIDQ1MjI2LCA0NTIzMCwgNDUyMzQsIDQ1MjM4LCA0NTI0MiwgCi0gICAgNDUyNDYsIDQ1MjUwLCA0NTI1NCwgNDUyNTgsIDQ1MjYyLCA0NTI2NiwgNDUyNzAsIDQ1Mjc0LCA0NTI3OCwgNDUyODIsIAotICAgIDQ1Mjg2LCA0NTI5MCwgNDUyOTQsIDQ1Mjk4LCA0NTMwMiwgNDUzMDYsIDQ1MzEwLCA0NTMxNCwgNDUzMTgsIDQ1MzIyLCAKLSAgICA0NTMyNiwgNDUzMzAsIDQ1MzM0LCA0NTMzOCwgNDUzNDIsIDQ1MzQ2LCA0NTM1MCwgNDUzNTQsIDQ1MzU4LCA0NTM2MiwgCi0gICAgNDUzNjYsIDQ1MzcwLCA0NTM3NCwgNDUzNzgsIDQ1MzgyLCA0NTM4NiwgNDUzOTAsIDQ1Mzk0LCA0NTM5OCwgNDU0MDIsIAotICAgIDQ1NDA2LCA0NTQxMCwgNDU0MTQsIDQ1NDE4LCA0NTQyMiwgNDU0MjYsIDQ1NDMwLCA0NTQzNCwgNDU0MzgsIDQ1NDQyLCAKLSAgICA0NTQ0NiwgNDU0NTAsIDQ1NDU0LCA0NTQ1OCwgNDU0NjIsIDQ1NDY2LCA0NTQ3MCwgNDU0NzQsIDQ1NDc4LCA0NTQ4MiwgCi0gICAgNDU0ODYsIDQ1NDkwLCA0NTQ5NCwgNDU0OTgsIDQ1NTAyLCA0NTUwNiwgNDU1MTAsIDQ1NTE0LCA0NTUxOCwgNDU1MjIsIAotICAgIDQ1NTI2LCA0NTUzMCwgNDU1MzQsIDQ1NTM4LCA0NTU0MiwgNDU1NDYsIDQ1NTUwLCA0NTU1NCwgNDU1NTgsIDQ1NTYyLCAKLSAgICA0NTU2NiwgNDU1NzAsIDQ1NTc0LCA0NTU3OCwgNDU1ODIsIDQ1NTg2LCA0NTU5MCwgNDU1OTQsIDQ1NTk4LCA0NTYwMiwgCi0gICAgNDU2MDYsIDQ1NjEwLCA0NTYxNCwgNDU2MTgsIDQ1NjIyLCA0NTYyNiwgNDU2MzAsIDQ1NjM0LCA0NTYzOCwgNDU2NDIsIAotICAgIDQ1NjQ2LCA0NTY1MCwgNDU2NTQsIDQ1NjU4LCA0NTY2MiwgNDU2NjYsIDQ1NjcwLCA0NTY3NCwgNDU2NzgsIDQ1NjgyLCAKLSAgICA0NTY4NiwgNDU2OTAsIDQ1Njk0LCA0NTY5OCwgNDU3MDIsIDQ1NzA2LCA0NTcxMCwgNDU3MTQsIDQ1NzE4LCA0NTcyMiwgCi0gICAgNDU3MjYsIDQ1NzMwLCA0NTczNCwgNDU3MzgsIDQ1NzQyLCA0NTc0NiwgNDU3NTAsIDQ1NzU0LCA0NTc1OCwgNDU3NjIsIAotICAgIDQ1NzY2LCA0NTc3MCwgNDU3NzQsIDQ1Nzc4LCA0NTc4MiwgNDU3ODYsIDQ1NzkwLCA0NTc5NCwgNDU3OTgsIDQ1ODAyLCAKLSAgICA0NTgwNiwgNDU4MTAsIDQ1ODE0LCA0NTgxOCwgNDU4MjIsIDQ1ODI2LCA0NTgzMCwgNDU4MzQsIDQ1ODM4LCA0NTg0MiwgCi0gICAgNDU4NDYsIDQ1ODUwLCA0NTg1NCwgNDU4NTgsIDQ1ODYyLCA0NTg2NiwgNDU4NzAsIDQ1ODc0LCA0NTg3OCwgNDU4ODIsIAotICAgIDQ1ODg2LCA0NTg5MCwgNDU4OTQsIDQ1ODk4LCA0NTkwMiwgNDU5MDYsIDQ1OTEwLCA0NTkxNCwgNDU5MTgsIDQ1OTIyLCAKLSAgICA0NTkyNiwgNDU5MzAsIDQ1OTM0LCA0NTkzOCwgNDU5NDIsIDQ1OTQ2LCA0NTk1MCwgNDU5NTQsIDQ1OTU4LCA0NTk2MiwgCi0gICAgNDU5NjYsIDQ1OTcwLCA0NTk3NCwgNDU5NzgsIDQ1OTgyLCA0NTk4NiwgNDU5OTAsIDQ1OTk0LCA0NTk5OCwgNDYwMDIsIAotICAgIDQ2MDA2LCA0NjAxMCwgNDYwMTQsIDQ2MDE4LCA0NjAyMiwgNDYwMjYsIDQ2MDMwLCA0NjAzNCwgNDYwMzgsIDQ2MDQyLCAKLSAgICA0NjA0NiwgNDYwNTAsIDQ2MDU0LCA0NjA1OCwgNDYwNjIsIDQ2MDY2LCA0NjA3MCwgNDYwNzQsIDQ2MDc4LCA0NjA4MiwgCi0gICAgNDYwODYsIDQ2MDkwLCA0NjA5NywgNDYxMDUsIDQ2MTExLCA0NjExNywgNDYxMjQsIDQ2MTMxLCA0NjEzNywgNDYxNDMsIAotICAgIDQ2MTQ5LCA0NjE1NSwgNDYxNjAsIDQ2MTY1LCA0NjE3MCwgNDYxNzUsIDQ2MTgxLCA0NjE4NywgNDYxOTUsIDQ2MjAyLCAKLSAgICA0NjIwNywgNDYyMTIsIDQ2MjIwLCA0NjIyOSwgNDYyMzYsIDQ2MjQ2LCA0NjI1NywgNDYyNjAsIDQ2MjYzLCA0NjI2NywgCi0gICAgNDYyNzEsIDQ2Mjc3LCA0NjI4MywgNDYyOTMsIDQ2MzAzLCA0NjMxMywgNDYzMjMsIDQ2MzMwLCA0NjMzNywgNDYzNDQsIAotICAgIDQ2MzUxLCA0NjM2MiwgNDYzNzMsIDQ2Mzg0LCA0NjM5NSwgNDY0MDUsIDQ2NDE1LCA0NjQyNywgNDY0MzksIDQ2NDUwLCAKLSAgICA0NjQ2MSwgNDY0NzMsIDQ2NDg1LCA0NjQ5NCwgNDY1MDQsIDQ2NTE0LCA0NjUyNSwgNDY1MzYsIDQ2NTQzLCA0NjU1MCwgCi0gICAgNDY1NTcsIDQ2NTY0LCA0NjU3NCwgNDY1ODQsIDQ2NTkxLCA0NjU5OCwgNDY2MDUsIDQ2NjEyLCA0NjYxOSwgNDY2MjYsIAotICAgIDQ2NjMzLCA0NjYzOCwgNDY2NDMsIDQ2NjQ5LCA0NjY1NywgNDY2NjcsIDQ2Njc1LCA0NjY4MywgNDY2OTEsIDQ2Njk5LCAKLSAgICA0NjcwNywgNDY3MTUsIDQ2NzIzLCA0NjczMSwgNDY3MzksIDQ2NzQ3LCA0Njc1NiwgNDY3NjUsIDQ2NzczLCA0Njc4MSwgCi0gICAgNDY3OTAsIDQ2Nzk5LCA0NjgwOCwgNDY4MTcsIDQ2ODI3LCA0NjgzNywgNDY4NDYsIDQ2ODU1LCA0Njg2NSwgNDY4NzUsIAotICAgIDQ2ODg5LCA0NjkwNiwgNDY5MjAsIDQ2OTM3LCA0Njk1MSwgNDY5NjUsIDQ2OTc5LCA0Njk5MywgNDcwMDMsIDQ3MDE0LCAKLSAgICA0NzAyNCwgNDcwMzUsIDQ3MDUyLCA0NzA2OSwgNDcwNzcsIDQ3MDgzLCA0NzA5MCwgNDcwOTcsIDQ3MTA0LCA0NzExMSwgCi0gICAgNDcxMTYsIDQ3MTIyLCA0NzEyNywgNDcxMzIsIDQ3MTM4LCA0NzE0MywgNDcxNDgsIDQ3MTUzLCA0NzE1OCwgNDcxNjMsIAotICAgIDQ3MTcwLCA0NzE3NSwgNDcxODIsIDQ3MTg3LCA0NzE5MiwgNDcxOTYsIDQ3MjAwLCA0NzIwNywgNDcyMTQsIDQ3MjIxLCAKLSAgICA0NzIyOCwgNDcyMzUsIDQ3MjQyLCA0NzI1NSwgNDcyNjgsIDQ3MjgxLCA0NzI5NCwgNDczMDIsIDQ3MzEwLCA0NzMxNiwgCi0gICAgNDczMjIsIDQ3MzI5LCA0NzMzNiwgNDczNDMsIDQ3MzUwLCA0NzM1NCwgNDczNTksIDQ3MzY3LCA0NzM3NSwgNDczODMsIAotICAgIDQ3MzkwLCA0NzM5NCwgNDc0MDIsIDQ3NDEwLCA0NzQxMywgNDc0MTYsIDQ3NDIxLCA0NzQyNywgNDc0MzUsIDQ3NDQzLCAKLSAgICA0NzQ2MywgNDc0ODMsIDQ3NTAzLCA0NzUyMywgNDc1NDMsIDQ3NTYzLCA0NzU4MywgNDc2MDMsIDQ3NjA4LCA0NzYxNSwgCi0gICAgNDc2MjQsIDQ3NjMyLCA0NzY0MCwgNDc2NDUsIDQ3NjQ4LCA0NzY1MSwgNDc2NTYsIDQ3NjU5LCA0NzY3OCwgNDc2ODUsIAotICAgIDQ3NjkxLCA0NzY5NywgNDc3MDEsIDQ3NzA0LCA0NzcwNywgNDc3MTAsIDQ3NzIxLCA0NzczMywgNDc3NDEsIDQ3NzQ5LCAKLSAgICA0Nzc1MywgNDc3NTgsIDQ3NzYyLCA0Nzc2NywgNDc3NzIsIDQ3Nzc3LCA0Nzc4MywgNDc3OTIsIDQ3Nzk5LCA0NzgwNiwgCi0gICAgNDc4MTQsIDQ3ODIxLCA0NzgyOCwgNDc4MzEsIDQ3ODM3LCA0Nzg0MywgNDc4NDYsIDQ3ODQ5LCA0Nzg1NCwgNDc4NTksIAotICAgIDQ3ODY1LCA0Nzg3MSwgNDc4NzUsIDQ3ODgwLCA0Nzg4NywgNDc4OTEsIDQ3ODk3LCA0NzkwMSwgNDc5MDUsIDQ3OTEzLCAKLSAgICA0NzkyNSwgNDc5MzMsIDQ3OTM3LCA0NzkzOSwgNDc5NDgsIDQ3OTU3LCA0Nzk2MywgNDc5NjYsIDQ3OTcyLCA0Nzk3OCwgCi0gICAgNDc5ODMsIDQ3OTg4LCA0Nzk5MywgNDc5OTgsIDQ4MDAzLCA0ODAwOCwgNDgwMTAsIDQ4MDE2LCA0ODAyMSwgNDgwMjgsIAotICAgIDQ4MDMyLCA0ODAzOCwgNDgwNDEsIDQ4MDQ1LCA0ODA1MiwgNDgwNTksIDQ4MDYxLCA0ODA2MywgNDgwNjksIDQ4MDc1LCAKLSAgICA0ODA4MSwgNDgwOTAsIDQ4MDk5LCA0ODEwNiwgNDgxMTMsIDQ4MTE5LCA0ODEyNSwgNDgxMzAsIDQ4MTM1LCA0ODE0MCwgCi0gICAgNDgxNDYsIDQ4MTUyLCA0ODE1NywgNDgxNjQsIDQ4MTY4LCA0ODE3MiwgNDgxODUsIDQ4MTk4LCA0ODIwOSwgNDgyMTgsIAotICAgIDQ4MjI0LCA0ODIzMSwgNDgyMzYsIDQ4MjQxLCA0ODI0NiwgNDgyNTEsIDQ4MjU2LCA0ODI1OCwgNDgyNjUsIDQ4MjcyLCAKLSAgICA0ODI3OSwgNDgyODYsIDQ4MjkzLCA0ODMwMSwgNDgzMDcsIDQ4MzEyLCA0ODMxOCwgNDgzMjQsIDQ4MzMwLCA0ODMzNywgCi0gICAgNDgzNDMsIDQ4MzUxLCA0ODM1OSwgNDgzNjcsIDQ4Mzc1LCA0ODM4MiwgNDgzODgsIDQ4Mzk0LCA0ODQwMywgNDg0MDcsIAotICAgIDQ4NDE2LCA0ODQyNSwgNDg0MzQsIDQ4NDQyLCA0ODQ0NiwgNDg0NTIsIDQ4NDU5LCA0ODQ2NiwgNDg0NzAsIDQ4NDc2LCAKLSAgICA0ODQ4MywgNDg0ODgsIDQ4NDkzLCA0ODQ5OSwgNDg1MDQsIDQ4NTA5LCA0ODUxNiwgNDg1MjMsIDQ4NTI4LCA0ODUzMywgCi0gICAgNDg1NDEsIDQ4NTQ5LCA0ODU1OSwgNDg1NjksIDQ4NTc2LCA0ODU4MywgNDg1ODcsIDQ4NTkxLCA0ODYwMywgNDg2MDksIAotICAgIDQ4NjE1LCA0ODYyMCwgNDg2MjUsIDQ4NjMyLCA0ODYzOSwgNDg2NDUsIDQ4NjUxLCA0ODY2MCwgNDg2NjgsIDQ4Njc2LCAKLSAgICA0ODY4MywgNDg2OTAsIDQ4Njk3LCA0ODcwMywgNDg3MTAsIDQ4NzE2LCA0ODcyMywgNDg3MzAsIDQ4NzM3LCA0ODc0NCwgCi0gICAgNDg3NTAsIDQ4NzU1LCA0ODc2NCwgNDg3NzQsIDQ4NzgxLCA0ODc5MCwgNDg3OTYsIDQ4ODAxLCA0ODgwNiwgNDg4MTUsIAotICAgIDQ4ODIxLCA0ODgyNywgNDg4MzMsIDQ4ODQxLCA0ODg0NiwgNDg4NTMsIDQ4ODYwLCA0ODg3MSwgNDg4NzgsIDQ4ODg1LCAKLSAgICA0ODg5MiwgNDg4OTksIDQ4OTA2LCA0ODkxMywgNDg5MjAsIDQ4OTMxLCA0ODk0MiwgNDg5NTIsIDQ4OTYyLCA0ODk3NCwgCi0gICAgNDg5ODYsIDQ4OTkxLCA0ODk5NiwgNDkwMDQsIDQ5MDEyLCA0OTAxOCwgNDkwMjQsIDQ5MDMzLCA0OTA0MiwgNDkwNTAsIAotICAgIDQ5MDU4LCA0OTA2NiwgNDkwNzQsIDQ5MDg0LCA0OTA5NCwgNDkxMDgsIDQ5MTIyLCA0OTEyOSwgNDkxMzYsIDQ5MTQ3LCAKLSAgICA0OTE1OCwgNDkxNjUsIDQ5MTcyLCA0OTE4MSwgNDkxOTAsIDQ5MTk1LCA0OTIwMCwgNDkyMDksIDQ5MjE4LCA0OTIyMywgCi0gICAgNDkyMjgsIDQ5MjM2LCA0OTI0MiwgNDkyNDgsIDQ5MjU2LCA0OTI2NCwgNDkyNzcsIDQ5MjkwLCA0OTI5NCwgNDkyOTgsIAotICAgIDQ5MzA1LCA0OTMxMiwgNDkzMTksIDQ5MzI3LCA0OTMzNSwgNDkzNDMsIDQ5MzUxLCA0OTM1NywgNDkzNjMsIDQ5MzY5LCAKLSAgICA0OTM3NSwgNDkzODIsIDQ5Mzg5LCA0OTM5NywgNDk0MDUsIDQ5NDA4LCA0OTQxMSwgNDk0MTYsIDQ5NDIxLCA0OTQyNywgCi0gICAgNDk0MzMsIDQ5NDQwLCA0OTQ0NywgNDk0NTYsIDQ5NDY1LCA0OTQ3MiwgNDk0NzksIDQ5NDg3LCA0OTQ5NSwgNDk1MDMsIAotICAgIDQ5NTExLCA0OTUxOCwgNDk1MjUsIDQ5NTMyLCA0OTUzOSwgNDk1NDMsIDQ5NTQ3LCA0OTU1NCwgNDk1NjEsIDQ5NTY2LCAKLSAgICA0OTU3MSwgNDk1NzYsIDQ5NTgxLCA0OTU4NywgNDk2MDEsIDQ5NjA4LCA0OTYxNSwgNDk2MTksIDQ5NjIxLCA0OTYyMywgCi0gICAgNDk2MjgsIDQ5NjMzLCA0OTYzOCwgNDk2NDIsIDQ5NjUwLCA0OTY1NywgNDk2NjQsIDQ5NjcyLCA0OTY4NCwgNDk2OTIsIAotICAgIDQ5NzAwLCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgNDk3MjgsIDQ5NzM5LCA0OTc0NiwgNDk3NTMsIDQ5NzYwLCAKLSAgICA0OTc2NSwgNDk3NzIsIDQ5NzgxLCA0OTc4OSwgNDk3OTUsIDQ5ODAxLCA0OTgwNywgNDk4MTYsIDQ5ODI1LCA0OTgzMywgCi0gICAgNDk4NDIsIDQ5ODQ3LCA0OTg1MCwgNDk4NTUsIDQ5ODYxLCA0OTg2NywgNDk4NzMsIDQ5ODc5LCA0OTg4MywgNDk4ODYsIAotICAgIDQ5ODkwLCA0OTg5NCwgNDk5MDAsIDQ5OTA2LCA0OTkxMiwgNDk5MTgsIDQ5OTIyLCA0OTkyNiwgNDk5MzMsIDQ5OTQwLCAKLSAgICA0OTk0NywgNDk5NTQsIDQ5OTYxLCA0OTk2OCwgNDk5NzgsIDQ5OTg3LCA0OTk5NCwgNTAwMDEsIDUwMDA5LCA1MDAxNywgCi0gICAgNTAwMjEsIDUwMDI2LCA1MDAzMSwgNTAwMzcsIDUwMDQzLCA1MDA0NiwgNTAwNDksIDUwMDUyLCA1MDA1NSwgNTAwNTksIAotICAgIDUwMDY0LCA1MDA2OSwgNTAwNzQsIDUwMDc5LCA1MDA4NCwgNTAwODgsIDUwMDkyLCA1MDA5NiwgNTAxMDAsIDUwMTA0LCAKLSAgICA1MDEwOCwgNTAxMTIsIDUwMTE4LCA1MDEyMiwgNTAxMjgsIDUwMTMzLCA1MDE0MCwgNTAxNDgsIDUwMTU1LCA1MDE2MywgCi0gICAgNTAxNzAsIDUwMTc4LCA1MDE4NywgNTAxOTQsIDUwMjA0LCA1MDIxNSwgNTAyMjEsIDUwMjMwLCA1MDIzNiwgNTAyNDUsIAotICAgIDUwMjU0LCA1MDI2MCwgNTAyNjYsIDUwMjcwLCA1MDI3NCwgNTAyODMsIDUwMjkyLCA1MDI5OSwgNTAzMDYsIDUwMzE1LCAwLCAKLSAgICAwLCAwLCA1MDMyNCwgNTAzMjksIDUwMzMzLCA1MDMzNywgNTAzNDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwMzQ3LCA1MDM1MiwgNTAzNTcsIDUwMzYyLCA1MDM2NywgNTAzNzIsIDUwMzc3LCAKLSAgICA1MDM4MiwgNTAzODcsIDUwMzkyLCA1MDM5NywgNTA0MDMsIDUwNDA3LCA1MDQxMiwgNTA0MTcsIDUwNDIyLCA1MDQyNywgCi0gICAgNTA0MzIsIDUwNDM3LCA1MDQ0MiwgNTA0NDcsIDUwNDUyLCA1MDQ1NywgNTA0NjIsIDUwNDY3LCA1MDQ3MiwgNTA0NzcsIAotICAgIDUwNDgyLCA1MDQ4NywgNTA0OTIsIDUwNDk3LCA1MDUwMiwgNTA1MDcsIDUwNTEyLCA1MDUxNywgNTA1MjMsIDUwNTI4LCAKLSAgICA1MDUzNCwgNTA1NDMsIDUwNTQ4LCA1MDU1NiwgNTA1NjMsIDUwNTcyLCA1MDU3NywgNTA1ODIsIDUwNTg3LCA1MDU5MywgMCwgCi0gICAgNTA2MDAsIDUwNjA1LCA1MDYxMCwgNTA2MTUsIDUwNjIwLCA1MDYyNSwgNTA2MzAsIDUwNjM1LCA1MDY0MCwgNTA2NDUsIAotICAgIDUwNjUwLCA1MDY1NiwgNTA2NjAsIDUwNjY1LCA1MDY3MCwgNTA2NzUsIDUwNjgwLCA1MDY4NSwgNTA2OTAsIDUwNjk1LCAKLSAgICA1MDcwMCwgNTA3MDUsIDUwNzEwLCA1MDcxNSwgNTA3MjAsIDUwNzI1LCA1MDczMCwgNTA3MzUsIDUwNzQwLCA1MDc0NSwgCi0gICAgNTA3NTAsIDUwNzU1LCA1MDc2MCwgNTA3NjUsIDUwNzcwLCA1MDc3NiwgNTA3ODEsIDUwNzg3LCA1MDc5NiwgNTA4MDEsIAotICAgIDUwODA5LCA1MDgxNiwgNTA4MjUsIDUwODMwLCA1MDgzNSwgNTA4NDAsIDUwODQ2LCAwLCA1MDg1MywgNTA4NjEsIDUwODY5LCAKLSAgICA1MDg3OCwgNTA4ODUsIDUwODkzLCA1MDg5OSwgNTA5MDgsIDUwOTE2LCA1MDkyNCwgNTA5MzIsIDUwOTQwLCA1MDk0OCwgCi0gICAgNTA5NTYsIDUwOTYxLCA1MDk2OCwgMCwgNTA5NzMsIDUwOTgxLCA1MDk4OCwgNTA5OTUsIDUxMDAzLCA1MTAwOCwgNTEwMTMsIAotICAgIDUxMDIwLCA1MTAyNywgNTEwMzYsIDUxMDQ2LCA1MTA1MiwgNTEwNTksIDAsIDAsIDUxMDYzLCA1MTA2OCwgNTEwNzMsIAotICAgIDUxMDc4LCA1MTA4MywgNTEwODgsIDUxMDkzLCA1MTA5OCwgNTExMDMsIDUxMTA4LCA1MTExMywgNTExMTgsIDUxMTIzLCAKLSAgICA1MTEyOCwgNTExMzMsIDUxMTM4LCA1MTE0MywgNTExNDgsIDUxMTUzLCA1MTE1OCwgNTExNjMsIDUxMTY4LCA1MTE3MywgCi0gICAgNTExNzgsIDUxMTgzLCA1MTE4OCwgNTExOTMsIDUxMTk4LCA1MTIwMywgNTEyMDgsIDUxMjEzLCA1MTIxNywgNTEyMjEsIAotICAgIDUxMjI2LCA1MTIzMSwgNTEyMzYsIDUxMjQxLCA1MTI0NiwgNTEyNTEsIDUxMjU2LCA1MTI2MSwgNTEyNjYsIDUxMjcxLCAKLSAgICA1MTI3NiwgNTEyODEsIDUxMjg2LCA1MTI5MSwgNTEyOTYsIDUxMzAxLCA1MTMwNiwgNTEzMTEsIDUxMzE4LCA1MTMyNSwgCi0gICAgNTEzMzIsIDUxMzM5LCA1MTM0NiwgNTEzNTMsIDUxMzYwLCA1MTM2NywgNTEzNzQsIDUxMzgxLCA1MTM4OCwgNTEzOTUsIAotICAgIDUxNDAyLCA1MTQwOSwgNTE0MTQsIDUxNDE5LCA1MTQyNiwgNTE0MzMsIDUxNDQwLCA1MTQ0NywgNTE0NTQsIDUxNDYxLCAKLSAgICA1MTQ2OCwgNTE0NzUsIDUxNDgyLCA1MTQ4OSwgNTE0OTYsIDUxNTAzLCA1MTUwOSwgNTE1MTUsIDUxNTIxLCA1MTUyNywgCi0gICAgNTE1MzQsIDUxNTQxLCA1MTU0OCwgNTE1NTUsIDUxNTYyLCA1MTU2OSwgNTE1NzYsIDUxNTgzLCA1MTU5MCwgNTE1OTcsIAotICAgIDUxNjA1LCA1MTYxMywgNTE2MjEsIDUxNjI5LCA1MTYzNywgNTE2NDUsIDUxNjUzLCA1MTY2MSwgNTE2NjUsIDUxNjcxLCAKLSAgICA1MTY3NywgNTE2ODEsIDUxNjg3LCA1MTY5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTE2OTksIDUxNzA3LCA1MTcxNiwgNTE3MjUsIDUxNzMzLCA1MTczOSwgNTE3NDQsIDUxNzQ5LCA1MTc1NCwgNTE3NTksIAotICAgIDUxNzY0LCA1MTc2OSwgNTE3NzQsIDUxNzc5LCA1MTc4NCwgNTE3ODksIDUxNzk0LCA1MTc5OSwgNTE4MDQsIDUxODA5LCAKLSAgICA1MTgxNCwgNTE4MTksIDUxODI0LCA1MTgyOSwgNTE4MzQsIDUxODM5LCA1MTg0NCwgNTE4NDksIDUxODU0LCA1MTg1OSwgCi0gICAgNTE4NjQsIDUxODY5LCA1MTg3NCwgNTE4NzksIDUxODg0LCA1MTg4OSwgNTE4OTQsIDUxODk5LCA1MTkwNCwgNTE5MDksIAotICAgIDUxOTE0LCA1MTkxOSwgNTE5MjQsIDUxOTI5LCA1MTkzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTE5MzksIAotICAgIDUxOTQyLCA1MTk0NiwgNTE5NTAsIDUxOTU0LCA1MTk1OCwgNTE5NjYsIDUxOTcwLCA1MTk3NCwgNTE5NzgsIDUxOTgyLCAKLSAgICA1MTk4NiwgNTE5OTAsIDUxOTk0LCA1MTk5OCwgNTIwMDQsIDUyMDA4LCA1MjAxMiwgNTIwMjAsIDUyMDI2LCA1MjAzMCwgCi0gICAgNTIwMzQsIDUyMDM4LCA1MjA0NCwgNTIwNDgsIDUyMDU0LCA1MjA1OCwgNTIwNjIsIDUyMDY4LCA1MjA3NCwgNTIwNzgsIAotICAgIDUyMDgyLCA1MjA4NiwgNTIwOTIsIDUyMDk4LCA1MjEwMiwgNTIxMDYsIDUyMTEwLCA1MjExNCwgNTIxMTgsIDUyMTI0LCAKLSAgICA1MjEzMCwgNTIxMzQsIDUyMTM4LCA1MjE0MiwgNTIxNDYsIDUyMTUwLCA1MjE1NCwgNTIxNTgsIDUyMTYyLCA1MjE2NiwgCi0gICAgNTIxNzAsIDUyMTc0LCA1MjE4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIxODQsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyMTkwLCA1MjE5NCwgNTIxOTgsIDUyMjAyLCA1MjIwNiwgNTIyMTAsIAotICAgIDUyMjE0LCA1MjIxOCwgNTIyMjIsIDUyMjI2LCA1MjIzMCwgNTIyMzYsIDUyMjQwLCA1MjI0NCwgNTIyNDgsIDUyMjUyLCAKLSAgICA1MjI1NiwgNTIyNjAsIDUyMjY0LCA1MjI2OCwgNTIyNzIsIDUyMjc2LCA1MjI4MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTIyODQsIDUyMjg4LCA1MjI5MiwgNTIyOTYsIDUyMzAwLCA1MjMwNCwgNTIzMDgsIDAsIDUyMzEyLCA1MjMxNiwgCi0gICAgNTIzMjAsIDUyMzI0LCA1MjMyOCwgNTIzMzIsIDUyMzM2LCAwLCA1MjM0MCwgNTIzNDQsIDUyMzQ4LCA1MjM1MiwgNTIzNTYsIAotICAgIDUyMzYwLCA1MjM2NCwgMCwgNTIzNjgsIDUyMzcyLCA1MjM3NiwgNTIzODAsIDUyMzg0LCA1MjM4OCwgNTIzOTIsIDAsIAotICAgIDUyMzk2LCA1MjQwMCwgNTI0MDQsIDUyNDA4LCA1MjQxMiwgNTI0MTYsIDUyNDIwLCAwLCA1MjQyNCwgNTI0MjgsIDUyNDMyLCAKLSAgICA1MjQzNiwgNTI0NDAsIDUyNDQ0LCA1MjQ0OCwgMCwgNTI0NTIsIDUyNDU2LCA1MjQ2MCwgNTI0NjQsIDUyNDY4LCA1MjQ3MiwgCi0gICAgNTI0NzYsIDAsIDUyNDgwLCA1MjQ4NCwgNTI0ODgsIDUyNDkyLCA1MjQ5NiwgNTI1MDAsIDUyNTA0LCAwLCA1MjUwOCwgCi0gICAgNTI1MTMsIDUyNTE4LCA1MjUyMywgNTI1MjgsIDUyNTMzLCA1MjUzOCwgNTI1NDIsIDUyNTQ3LCA1MjU1MiwgNTI1NTcsIAotICAgIDUyNTYxLCA1MjU2NiwgNTI1NzEsIDUyNTc2LCA1MjU4MSwgNTI1ODUsIDUyNTkwLCA1MjU5NSwgNTI2MDAsIDUyNjA1LCAKLSAgICA1MjYxMCwgNTI2MTUsIDUyNjE5LCA1MjYyNCwgNTI2MjksIDUyNjM2LCA1MjY0MSwgNTI2NDYsIDUyNjUyLCA1MjY1OSwgCi0gICAgNTI2NjYsIDUyNjc1LCA1MjY4MiwgNTI2OTEsIDUyNjk1LCA1MjY5OSwgNTI3MDUsIDUyNzExLCA1MjcxNywgNTI3MjUsIAotICAgIDUyNzMxLCA1MjczNSwgNTI3MzksIDUyNzQzLCA1Mjc0OSwgNTI3NTUsIDUyNzU5LCA1Mjc2MSwgNTI3NjUsIDUyNzcwLCAKLSAgICA1Mjc3MiwgNTI3NzYsIDUyNzgwLCA1Mjc4NCwgNTI3OTAsIDUyNzk1LCA1Mjc5OSwgNTI4MDMsIDUyODA3LCA1MjgxMywgCi0gICAgNTI4MTgsIDUyODIzLCA1MjgyOCwgNTI4MzMsIDUyODQwLCA1Mjg0NywgNTI4NTIsIDUyODU3LCA1Mjg2MiwgNTI4NjcsIAotICAgIDUyODcyLCA1Mjg3NywgNTI4ODEsIDUyODg1LCA1Mjg5MiwgNTI4OTksIDUyOTA2LCA1MjkxMCwgNTI5MTQsIDUyOTE2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1MjkyMCwgNTI5MjQsIDUyOTI4LCA1MjkzMywgNTI5MzgsIDUyOTQzLCA1Mjk0NywgNTI5NTEsIAotICAgIDUyOTU1LCA1Mjk2MCwgNTI5NjUsIDUyOTY5LCA1Mjk3MywgNTI5NzcsIDUyOTgxLCA1Mjk4NiwgNTI5OTEsIDUyOTk2LCAKLSAgICA1MzAwMSwgNTMwMDUsIDUzMDA5LCA1MzAxNCwgNTMwMTksIDUzMDI0LCA1MzAyOSwgNTMwMzMsIDAsIDUzMDM3LCA1MzA0MSwgCi0gICAgNTMwNDUsIDUzMDQ5LCA1MzA1MywgNTMwNTcsIDUzMDYxLCA1MzA2NiwgNTMwNzEsIDUzMDc1LCA1MzA4MCwgNTMwODUsIAotICAgIDUzMDk0LCA1MzA5OCwgNTMxMDIsIDUzMTA2LCA1MzExMywgNTMxMTcsIDUzMTIyLCA1MzEyNywgNTMxMzEsIDUzMTM1LCAKLSAgICA1MzE0MSwgNTMxNDYsIDUzMTUxLCA1MzE1NiwgNTMxNjEsIDUzMTY1LCA1MzE2OSwgNTMxNzMsIDUzMTc3LCA1MzE4MSwgCi0gICAgNTMxODYsIDUzMTkxLCA1MzE5NSwgNTMxOTksIDUzMjA0LCA1MzIwOSwgNTMyMTQsIDUzMjE4LCA1MzIyMiwgNTMyMjcsIAotICAgIDUzMjMyLCA1MzIzOCwgNTMyNDQsIDUzMjQ4LCA1MzI1NCwgNTMyNjAsIDUzMjY0LCA1MzI3MCwgNTMyNzYsIDUzMjgxLCAKLSAgICA1MzI4NiwgNTMyOTAsIDUzMjk2LCA1MzMwMCwgNTMzMDQsIDUzMzEwLCA1MzMxNiwgNTMzMjEsIDUzMzI2LCA1MzMzMCwgCi0gICAgNTMzMzQsIDUzMzQyLCA1MzM0OCwgNTMzNTQsIDUzMzYwLCA1MzM2NSwgNTMzNzAsIDUzMzc1LCA1MzM4MSwgNTMzODUsIAotICAgIDUzMzkxLCA1MzM5NSwgNTMzOTksIDUzNDA1LCA1MzQxMSwgNTM0MTcsIDUzNDIzLCA1MzQyOSwgNTM0MzUsIDUzNDQxLCAKLSAgICA1MzQ0NywgNTM0NTMsIDUzNDU5LCA1MzQ2NSwgNTM0NzEsIDUzNDc1LCA1MzQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNTM0ODcsIDUzNDkwLCA1MzQ5NCwgNTM0OTgsIDUzNTAyLCA1MzUwNiwgNTM1MDksIDUzNTEyLCAKLSAgICA1MzUxNiwgNTM1MjAsIDUzNTI0LCA1MzUyOCwgNTM1MzEsIDUzNTM2LCA1MzU0MCwgNTM1NDQsIDUzNTQ4LCA1MzU1NCwgCi0gICAgNTM1NTgsIDUzNTYyLCA1MzU2NiwgNTM1NzAsIDUzNTc3LCA1MzU4MywgNTM1ODcsIDUzNTkxLCA1MzU5NSwgNTM1OTksIAotICAgIDUzNjAzLCA1MzYwNywgNTM2MTEsIDUzNjE1LCA1MzYxOSwgNTM2MjMsIDUzNjI3LCA1MzYzMywgNTM2MzcsIDUzNjQxLCAKLSAgICA1MzY0NSwgNTM2NDksIDUzNjUzLCA1MzY1NywgNTM2NjEsIDUzNjY1LCA1MzY2OSwgNTM2NzMsIDUzNjc3LCA1MzY4MSwgCi0gICAgNTM2ODUsIDUzNjg5LCA1MzY5MywgNTM2OTcsIDUzNzAzLCA1MzcwOSwgNTM3MTQsIDUzNzE5LCA1MzcyMywgNTM3MjcsIAotICAgIDUzNzMxLCA1MzczNSwgNTM3MzksIDUzNzQzLCA1Mzc0NywgNTM3NTEsIDUzNzU1LCA1Mzc1OSwgNTM3NjMsIDUzNzY3LCAKLSAgICA1Mzc3MSwgNTM3NzUsIDUzNzc5LCA1Mzc4MywgNTM3ODcsIDUzNzkxLCA1Mzc5NSwgNTM3OTksIDUzODAzLCA1MzgwNywgCi0gICAgNTM4MTEsIDUzODE1LCA1MzgyMSwgNTM4MjUsIDUzODI5LCA1MzgzMywgNTM4MzcsIDUzODQxLCA1Mzg0NSwgNTM4NDksIAotICAgIDUzODUzLCA1Mzg1OCwgNTM4NjUsIDUzODY5LCA1Mzg3MywgNTM4NzcsIDUzODgxLCA1Mzg4NSwgNTM4ODksIDUzODkzLCAKLSAgICA1Mzg5NywgNTM5MDEsIDUzOTA1LCA1MzkwOSwgNTM5MTMsIDUzOTIwLCA1MzkyNCwgNTM5MzAsIDUzOTM0LCA1MzkzOCwgCi0gICAgNTM5NDIsIDUzOTQ2LCA1Mzk1MCwgNTM5NTMsIDUzOTU3LCA1Mzk2MSwgNTM5NjUsIDUzOTY5LCA1Mzk3MywgNTM5NzcsIAotICAgIDUzOTgxLCA1Mzk4NSwgNTM5ODksIDUzOTkzLCA1Mzk5NywgNTQwMDEsIDU0MDA1LCA1NDAwOSwgNTQwMTMsIDU0MDE3LCAKLSAgICA1NDAyMSwgNTQwMjUsIDU0MDI5LCA1NDAzMywgNTQwMzcsIDU0MDQxLCA1NDA0NSwgNTQwNDksIDU0MDUzLCA1NDA1NywgCi0gICAgNTQwNjEsIDU0MDY1LCA1NDA2OSwgNTQwNzMsIDU0MDc3LCA1NDA4MSwgNTQwODcsIDU0MDkxLCA1NDA5NSwgNTQwOTksIAotICAgIDU0MTAzLCA1NDEwNywgNTQxMTEsIDU0MTE1LCA1NDExOSwgNTQxMjMsIDU0MTI3LCA1NDEzMSwgNTQxMzUsIDU0MTM5LCAKLSAgICA1NDE0MywgNTQxNDcsIDU0MTUxLCA1NDE1NSwgNTQxNTksIDU0MTYzLCA1NDE2NywgNTQxNzEsIDU0MTc1LCA1NDE3OSwgCi0gICAgNTQxODMsIDU0MTg3LCA1NDE5MSwgNTQxOTUsIDU0MjAzLCA1NDIwNywgNTQyMTEsIDU0MjE1LCA1NDIxOSwgNTQyMjMsIAotICAgIDU0MjI5LCA1NDIzMywgNTQyMzcsIDU0MjQxLCA1NDI0NSwgNTQyNDksIDU0MjUzLCA1NDI1NywgNTQyNjEsIDU0MjY1LCAKLSAgICA1NDI2OSwgNTQyNzMsIDU0Mjc3LCA1NDI4MSwgNTQyODcsIDU0MjkxLCA1NDI5NSwgNTQyOTksIDU0MzAzLCA1NDMwNywgCi0gICAgNTQzMTEsIDU0MzE1LCA1NDMxOSwgNTQzMjMsIDU0MzI3LCA1NDMzMSwgNTQzMzUsIDU0MzM5LCA1NDM0MywgNTQzNDcsIAotICAgIDU0MzUxLCA1NDM1NSwgNTQzNTksIDU0MzYzLCA1NDM2NywgNTQzNzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0Mzc1LCA1NDM4MywgNTQzOTAsIAotICAgIDU0NDAxLCA1NDQxMSwgNTQ0MTksIDU0NDI4LCA1NDQzNywgNTQ0NDcsIDU0NDU5LCA1NDQ3MSwgNTQ0ODIsIDAsIDAsIDAsIAotICAgIDAsIDU0NDg4LCA1NDQ5MSwgNTQ0OTQsIDU0NDk5LCA1NDUwMiwgNTQ1MDksIDU0NTEzLCA1NDUxNywgNTQ1MjEsIDU0NTI1LCAKLSAgICA1NDUyOSwgNTQ1MzQsIDU0NTM5LCA1NDU0MywgNTQ1NDcsIDU0NTUyLCA1NDU1NywgNTQ1NjIsIDU0NTY3LCA1NDU3MCwgCi0gICAgNTQ1NzMsIDU0NTc5LCA1NDU4NSwgNTQ1OTAsIDU0NTk1LCA1NDYwMiwgNTQ2MDksIDU0NjEzLCA1NDYxNywgNTQ2MjEsIAotICAgIDU0NjI4LCA1NDYzNCwgNTQ2NDEsIDU0NjQ2LCA1NDY1MCwgNTQ2NTQsIDU0NjU4LCA1NDY2MiwgNTQ2NjYsIDU0NjcwLCAKLSAgICA1NDY3NCwgNTQ2NzgsIDU0NjgyLCA1NDY4NywgNTQ2OTIsIDU0Njk3LCA1NDcwMiwgNTQ3MDgsIDU0NzEzLCA1NDcxNywgCi0gICAgNTQ3MjMsIDU0NzM0LCA1NDc0NCwgNTQ3NTksIDU0NzY4LCA1NDc3MiwgNTQ3ODEsIDU0Nzg2LCA1NDc5MSwgNTQ3OTYsIAotICAgIDU0ODAxLCA1NDgwNCwgNTQ4MDksIDU0ODEzLCAwLCA1NDgxOSwgNTQ4MjMsIDU0ODI2LCA1NDgzMCwgNTQ4MzMsIDU0ODM3LCAKLSAgICA1NDg0MCwgNTQ4NDQsIDU0ODQ3LCA1NDg1MSwgNTQ4NTQsIDU0ODU3LCA1NDg2MSwgNTQ4NjUsIDU0ODY5LCA1NDg3MywgCi0gICAgNTQ4NzcsIDU0ODgxLCA1NDg4NSwgNTQ4ODksIDU0ODkzLCA1NDg5NywgNTQ5MDEsIDU0OTA1LCA1NDkwOSwgNTQ5MTMsIAotICAgIDU0OTE3LCA1NDkyMSwgNTQ5MjUsIDU0OTI5LCA1NDkzMywgNTQ5MzcsIDU0OTQxLCA1NDk0NSwgNTQ5NDksIDU0OTU0LCAKLSAgICA1NDk1OCwgNTQ5NjIsIDU0OTY2LCA1NDk3MCwgNTQ5NzMsIDU0OTc3LCA1NDk4MSwgNTQ5ODUsIDU0OTg5LCA1NDk5MywgCi0gICAgNTQ5OTcsIDU1MDAwLCA1NTAwNCwgNTUwMDcsIDU1MDExLCA1NTAxNSwgNTUwMTksIDU1MDIzLCA1NTAyNywgNTUwMzEsIAotICAgIDU1MDM1LCA1NTAzOSwgNTUwNDMsIDU1MDQ3LCA1NTA1MSwgNTUwNTUsIDU1MDU4LCA1NTA2MiwgNTUwNjYsIDU1MDcwLCAKLSAgICA1NTA3NCwgNTUwNzgsIDU1MDgxLCA1NTA4NiwgNTUwOTAsIDU1MDk1LCA1NTA5OSwgNTUxMDIsIDU1MTA2LCA1NTExMCwgCi0gICAgNTUxMTQsIDU1MTE4LCA1NTEyMywgNTUxMjcsIDU1MTMxLCA1NTEzNSwgNTUxMzksIDU1MTQyLCA1NTE0NiwgNTUxNTAsIDAsIAotICAgIDAsIDU1MTU1LCA1NTE2MywgNTUxNzEsIDU1MTc4LCA1NTE4NSwgNTUxODksIDU1MTk1LCA1NTIwMCwgNTUyMDUsIDU1MjA5LCAKLSAgICA1NTIxMiwgNTUyMTYsIDU1MjE5LCA1NTIyMywgNTUyMjYsIDU1MjMwLCA1NTIzMywgNTUyMzcsIDU1MjQwLCA1NTI0MywgCi0gICAgNTUyNDcsIDU1MjUxLCA1NTI1NSwgNTUyNTksIDU1MjYzLCA1NTI2NywgNTUyNzEsIDU1Mjc1LCA1NTI3OSwgNTUyODMsIAotICAgIDU1Mjg3LCA1NTI5MSwgNTUyOTUsIDU1Mjk5LCA1NTMwMywgNTUzMDcsIDU1MzExLCA1NTMxNSwgNTUzMTksIDU1MzIzLCAKLSAgICA1NTMyNywgNTUzMzEsIDU1MzM1LCA1NTM0MCwgNTUzNDQsIDU1MzQ4LCA1NTM1MiwgNTUzNTYsIDU1MzU5LCA1NTM2MywgCi0gICAgNTUzNjcsIDU1MzcxLCA1NTM3NSwgNTUzNzksIDU1MzgzLCA1NTM4NiwgNTUzOTAsIDU1MzkzLCA1NTM5NywgNTU0MDEsIAotICAgIDU1NDA1LCA1NTQwOSwgNTU0MTMsIDU1NDE3LCA1NTQyMSwgNTU0MjUsIDU1NDI5LCA1NTQzMywgNTU0MzcsIDU1NDQxLCAKLSAgICA1NTQ0NCwgNTU0NDgsIDU1NDUyLCA1NTQ1NiwgNTU0NjAsIDU1NDY0LCA1NTQ2NywgNTU0NzIsIDU1NDc2LCA1NTQ4MSwgCi0gICAgNTU0ODUsIDU1NDg4LCA1NTQ5MiwgNTU0OTYsIDU1NTAwLCA1NTUwNCwgNTU1MDksIDU1NTEzLCA1NTUxNywgNTU1MjEsIAotICAgIDU1NTI1LCA1NTUyOCwgNTU1MzIsIDU1NTM2LCA1NTU0MSwgNTU1NDUsIDU1NTQ5LCA1NTU1MywgNTU1NTcsIDU1NTYyLCAKLSAgICA1NTU2OSwgNTU1NzMsIDU1NTc5LCAwLCAwLCAwLCAwLCAwLCA1NTU4NCwgNTU1ODgsIDU1NTkyLCA1NTU5NSwgNTU1OTksIAotICAgIDU1NjAzLCA1NTYwNywgNTU2MTAsIDU1NjEzLCA1NTYxNiwgNTU2MjAsIDU1NjIzLCA1NTYyNywgNTU2MzEsIDU1NjM1LCAKLSAgICA1NTYzOSwgNTU2NDMsIDU1NjQ3LCA1NTY1MCwgNTU2NTQsIDU1NjU4LCA1NTY2MSwgNTU2NjQsIDU1NjY3LCA1NTY3MCwgCi0gICAgNTU2NzQsIDU1Njc4LCA1NTY4MiwgNTU2ODYsIDU1NjkwLCA1NTY5NCwgNTU2OTgsIDU1NzAyLCA1NTcwNiwgNTU3MTAsIAotICAgIDU1NzEzLCA1NTcxNiwgNTU3MjAsIDU1NzIzLCA1NTcyNywgNTU3MzEsIDAsIDAsIDAsIDU1NzM1LCA1NTczOSwgNTU3NDMsIAotICAgIDU1NzQ3LCA1NTc1MSwgNTU3NTUsIDU1NzU5LCA1NTc2MywgNTU3NjcsIDU1NzcxLCA1NTc3NSwgNTU3NzksIDU1NzgzLCAKLSAgICA1NTc4NywgNTU3OTEsIDU1Nzk1LCA1NTc5OSwgNTU4MDMsIDU1ODA3LCA1NTgxMSwgNTU4MTUsIDU1ODE5LCA1NTgyMywgCi0gICAgNTU4MjcsIDU1ODMxLCA1NTgzNSwgNTU4MzksIDU1ODQzLCA1NTg0NywgNTU4NTEsIDU1ODU1LCA1NTg1OCwgNTU4NjIsIAotICAgIDU1ODY1LCA1NTg2OSwgNTU4NzMsIDU1ODc2LCA1NTg4MCwgNTU4ODQsIDU1ODg3LCA1NTg5MSwgNTU4OTUsIDU1ODk5LCAKLSAgICA1NTkwMywgNTU5MDYsIDU1OTEwLCA1NTkxNCwgNTU5MTgsIDU1OTIyLCA1NTkyNiwgNTU5MzAsIDU1OTMzLCA1NTkzNiwgCi0gICAgNTU5NDAsIDU1OTQ0LCA1NTk0OCwgNTU5NTIsIDU1OTU2LCA1NTk2MCwgNTU5NjQsIDU1OTY4LCA1NTk3MiwgNTU5NzYsIAotICAgIDU1OTgwLCA1NTk4NCwgNTU5ODgsIDU1OTkyLCA1NTk5NiwgNTYwMDAsIDU2MDA0LCA1NjAwOCwgNTYwMTIsIDU2MDE2LCAKLSAgICA1NjAyMCwgNTYwMjQsIDU2MDI4LCA1NjAzMiwgNTYwMzYsIDU2MDQwLCA1NjA0NCwgNTYwNDgsIDU2MDUyLCA1NjA1NiwgCi0gICAgNTYwNjAsIDU2MDY0LCA1NjA2OCwgNTYwNzIsIDU2MDc2LCA1NjA4MCwgNTYwODQsIDU2MDg4LCA1NjA5MiwgNTYwOTYsIAotICAgIDU2MTAwLCAwLCA1NjEwNCwgNTYxMTAsIDU2MTE2LCA1NjEyMSwgNTYxMjYsIDU2MTMxLCA1NjEzNywgNTYxNDMsIDU2MTQ5LCAKLSAgICA1NjE1NSwgNTYxNjEsIDU2MTY3LCA1NjE3MywgNTYxNzksIDU2MTg1LCA1NjE5MSwgNTYxOTcsIDU2MjAxLCA1NjIwNSwgCi0gICAgNTYyMDksIDU2MjEzLCA1NjIxNywgNTYyMjEsIDU2MjI1LCA1NjIyOSwgNTYyMzMsIDU2MjM3LCA1NjI0MSwgNTYyNDUsIAotICAgIDU2MjQ5LCA1NjI1MywgNTYyNTcsIDU2MjYxLCA1NjI2NSwgNTYyNjksIDU2MjczLCA1NjI3NywgNTYyODIsIDU2Mjg3LCAKLSAgICA1NjI5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTYyOTYsIDU2MzAwLCA1NjMwNCwgNTYzMDgsIDU2MzEyLCA1NjMxNiwgCi0gICAgNTYzMjAsIDU2MzI0LCA1NjMyOCwgNTYzMzIsIDU2MzM2LCA1NjM0MCwgNTYzNDQsIDU2MzQ4LCA1NjM1MiwgNTYzNTYsIAotICAgIDU2MzU5LCA1NjM2MiwgNTYzNjUsIDU2MzY5LCA1NjM3MywgNTYzNzcsIDU2MzgxLCA1NjM4NSwgNTYzODksIDU2MzkzLCAKLSAgICA1NjM5NywgNTY0MDEsIDU2NDA1LCA1NjQwOSwgNTY0MTMsIDU2NDE3LCA1NjQyMSwgNTY0MjUsIDU2NDI5LCA1NjQzMywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY0MzcsIDU2NDQyLCA1NjQ0NywgNTY0NTIsIDU2NDU2LCAKLSAgICA1NjQ2MSwgNTY0NjUsIDU2NDcwLCA1NjQ3NSwgNTY0ODAsIDU2NDg1LCA1NjQ5MCwgNTY0OTQsIDU2NDk5LCA1NjUwNCwgCi0gICAgNTY1MDksIDU2NTE0LCA1NjUxOCwgNTY1MjIsIDU2NTI2LCA1NjUzMCwgNTY1MzQsIDU2NTM4LCA1NjU0MiwgNTY1NDYsIAotICAgIDU2NTUwLCA1NjU1NCwgNTY1NTgsIDU2NTYyLCA1NjU2NiwgNTY1NzAsIDU2NTc1LCA1NjU4MCwgNTY1ODUsIDU2NTkwLCAKLSAgICA1NjU5NSwgNTY2MDAsIDU2NjA1LCA1NjYxMCwgNTY2MTUsIDU2NjIwLCA1NjYyNSwgNTY2MzAsIDU2NjM1LCA1NjY0MCwgCi0gICAgNTY2NDUsIDU2NjUxLCAwLCA1NjY1OCwgNTY2NjEsIDU2NjY0LCA1NjY2NywgNTY2NzAsIDU2NjczLCA1NjY3NiwgNTY2NzksIAotICAgIDU2NjgyLCA1NjY4NSwgNTY2ODksIDU2NjkzLCA1NjY5NywgNTY3MDEsIDU2NzA1LCA1NjcwOSwgNTY3MTMsIDU2NzE3LCAKLSAgICA1NjcyMSwgNTY3MjUsIDU2NzI5LCA1NjczMywgNTY3MzcsIDU2NzQxLCA1Njc0NSwgNTY3NDksIDU2NzUzLCA1Njc1NywgCi0gICAgNTY3NjEsIDU2NzY1LCA1Njc2OSwgNTY3NzMsIDU2Nzc3LCA1Njc4MSwgNTY3ODUsIDU2Nzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1Njc5MywgNTY3OTYsIDU2ODAxLCA1NjgwNiwgNTY4MTEsIDU2ODE2LCA1NjgyMSwgNTY4MjYsIAotICAgIDU2ODMxLCA1NjgzNiwgNTY4NDEsIDU2ODQ1LCA1Njg1MCwgNTY4NTUsIDU2ODYwLCA1Njg2NSwgNTY4NzAsIDU2ODc0LCAKLSAgICA1Njg3OCwgNTY4ODIsIDU2ODg2LCA1Njg5MCwgNTY4OTQsIDU2ODk4LCA1NjkwMiwgNTY5MDYsIDU2OTEwLCA1NjkxNCwgCi0gICAgNTY5MTgsIDU2OTIyLCA1NjkyNiwgNTY5MzEsIDU2OTM2LCA1Njk0MSwgNTY5NDYsIDU2OTUxLCA1Njk1NiwgNTY5NjEsIAotICAgIDU2OTY2LCA1Njk3MSwgNTY5NzYsIDU2OTgxLCA1Njk4NiwgNTY5OTEsIDU2OTk2LCA1NzAwMiwgNTcwMDgsIDU3MDEzLCAKLSAgICA1NzAxOCwgNTcwMjEsIDU3MDI0LCA1NzAyNywgNTcwMzAsIDU3MDMzLCA1NzAzNiwgNTcwMzksIDU3MDQyLCA1NzA0NSwgCi0gICAgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgNTcwNzMsIDU3MDc3LCA1NzA4MSwgNTcwODUsIAotICAgIDU3MDg5LCA1NzA5MywgNTcwOTcsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCA1NzExNywgNTcxMjEsIDU3MTI1LCAKLSAgICA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgNTcxNTcsIDU3MTYxLCA1NzE2NSwgCi0gICAgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDU3MTg1LCA1NzE4OSwgNTcxOTMsIDU3MTk3LCA1NzIwMSwgNTcyMDUsIAotICAgIDU3MjEwLCA1NzIxNSwgNTcyMjAsIDU3MjI1LCA1NzIyOSwgNTcyMzQsIDU3MjM5LCA1NzI0NCwgNTcyNDksIDU3MjU0LCAKLSAgICA1NzI1OSwgNTcyNjQsIDU3MjY5LCA1NzI3NCwgNTcyNzgsIDU3Mjg0LCA1NzI5MCwgNTcyOTYsIDU3MzAyLCA1NzMwOCwgCi0gICAgNTczMTQsIDU3MzIwLCA1NzMyNiwgNTczMzIsIDU3MzM4LCA1NzM0NCwgNTczNTAsIDU3MzUzLCA1NzM1NiwgNTczNTksIAotICAgIDU3MzY0LCA1NzM2NywgNTczNzAsIDU3MzczLCA1NzM3NiwgNTczNzksIDU3MzgyLCA1NzM4NiwgNTczOTAsIDU3Mzk0LCAKLSAgICA1NzM5OCwgNTc0MDIsIDU3NDA2LCA1NzQxMCwgNTc0MTQsIDU3NDE4LCA1NzQyMiwgNTc0MjYsIDU3NDMwLCA1NzQzNCwgCi0gICAgNTc0MzcsIDU3NDQxLCA1NzQ0NSwgNTc0NDksIDU3NDUzLCA1NzQ1NywgNTc0NjAsIDU3NDY0LCA1NzQ2OCwgNTc0NzIsIAotICAgIDU3NDc2LCA1NzQ3OSwgNTc0ODMsIDU3NDg3LCA1NzQ5MSwgNTc0OTUsIDU3NDk4LCA1NzUwMiwgNTc1MDYsIDU3NTA5LCAKLSAgICA1NzUxMywgNTc1MTcsIDU3NTIxLCA1NzUyNSwgNTc1MjksIDU3NTMzLCA1NzUzNywgMCwgNTc1NDEsIDU3NTQ0LCA1NzU0NywgCi0gICAgNTc1NTAsIDU3NTUzLCA1NzU1NiwgNTc1NTksIDU3NTYyLCA1NzU2NSwgNTc1NjgsIDU3NTcxLCA1NzU3NCwgNTc1NzcsIAotICAgIDU3NTgwLCA1NzU4MywgNTc1ODYsIDU3NTg5LCA1NzU5MiwgNTc1OTUsIDU3NTk4LCA1NzYwMSwgNTc2MDQsIDU3NjA3LCAKLSAgICA1NzYxMCwgNTc2MTMsIDU3NjE2LCA1NzYxOSwgNTc2MjIsIDU3NjI1LCA1NzYyOCwgNTc2MzEsIDU3NjM0LCA1NzYzNywgCi0gICAgNTc2NDAsIDU3NjQzLCA1NzY0NiwgNTc2NDksIDU3NjUyLCA1NzY1NSwgNTc2NTgsIDU3NjYxLCA1NzY2NCwgNTc2NjcsIAotICAgIDU3NjcwLCA1NzY3MywgNTc2NzYsIDU3Njc5LCA1NzY4MiwgNTc2ODUsIDU3Njg4LCA1NzY5MSwgNTc2OTQsIDU3Njk3LCAKLSAgICA1NzcwMCwgNTc3MDMsIDU3NzA2LCA1NzcwOSwgNTc3MTIsIDU3NzE1LCA1NzcxOCwgNTc3MjEsIDU3NzI0LCA1NzcyNywgCi0gICAgNTc3MzAsIDU3NzMzLCA1NzczNiwgNTc3MzksIDU3NzQyLCA1Nzc0NSwgNTc3NDgsIDU3NzUxLCA1Nzc1NCwgNTc3NTcsIAotICAgIDU3NzYwLCA1Nzc2MywgNTc3NjYsIDU3NzY5LCA1Nzc3MiwgNTc3NzUsIDU3Nzc4LCA1Nzc4MSwgNTc3ODQsIDU3Nzg3LCAKLSAgICA1Nzc5MCwgNTc3OTMsIDU3Nzk2LCA1Nzc5OSwgNTc4MDIsIDU3ODA1LCA1NzgxMywgNTc4MjAsIDU3ODI3LCA1NzgzNCwgCi0gICAgNTc4NDEsIDU3ODQ4LCA1Nzg1NSwgNTc4NjIsIDU3ODY5LCA1Nzg3NiwgNTc4ODQsIDU3ODkyLCA1NzkwMCwgNTc5MDgsIAotICAgIDU3OTE2LCA1NzkyNCwgNTc5MzIsIDU3OTQwLCA1Nzk0OCwgNTc5NTYsIDU3OTY0LCA1Nzk3MiwgNTc5ODAsIDU3OTg4LCAKLSAgICA1Nzk5NiwgNTc5OTksIDU4MDAyLCA1ODAwNSwgNTgwMDcsIDU4MDEwLCA1ODAxMywgNTgwMTYsIDU4MDIxLCA1ODAyNiwgCi0gICAgNTgwMjksIDU4MDM2LCA1ODA0MywgNTgwNTAsIDU4MDU3LCA1ODA2MCwgNTgwNjUsIDU4MDY4LCA1ODA3MiwgNTgwNzQsIAotICAgIDU4MDc2LCA1ODA3OSwgNTgwODIsIDU4MDg1LCA1ODA4OCwgNTgwOTEsIDU4MDk0LCA1ODA5NywgNTgxMDIsIDU4MTA2LCAKLSAgICA1ODEwOSwgNTgxMTIsIDU4MTE1LCA1ODExOCwgNTgxMjEsIDU4MTI0LCA1ODEyNywgNTgxMzEsIDU4MTM0LCA1ODEzNywgCi0gICAgNTgxNDAsIDU4MTQzLCA1ODE0NiwgNTgxNTAsIDU4MTUzLCA1ODE1NiwgNTgxNTksIDU4MTY0LCA1ODE2OSwgNTgxNzQsIAotICAgIDU4MTc5LCA1ODE4NCwgNTgxODksIDU4MTk0LCA1ODE5OSwgNTgyMDQsIDU4MjEyLCA1ODIxNCwgNTgyMTcsIDU4MjIwLCAKLSAgICA1ODIyMywgNTgyMjYsIDU4MjMxLCA1ODIzOSwgNTgyNDIsIDU4MjQ1LCA1ODI0OSwgNTgyNTIsIDU4MjU1LCA1ODI1OCwgCi0gICAgNTgyNjIsIDU4MjY1LCA1ODI2OCwgNTgyNzMsIDU4Mjc2LCA1ODI3OSwgNTgyODQsIDU4Mjg3LCA1ODI5MCwgNTgyOTUsIAotICAgIDU4MzAwLCA1ODMwNSwgNTgzMDgsIDU4MzExLCA1ODMxNCwgNTgzMTcsIDU4MzIzLCA1ODMyNiwgNTgzMjksIDU4MzMyLCAKLSAgICA1ODMzNCwgNTgzMzcsIDU4MzQwLCA1ODM0MywgNTgzNDgsIDU4MzUxLCA1ODM1NCwgNTgzNTcsIDU4MzYwLCA1ODM2MywgCi0gICAgNTgzNjgsIDU4MzcxLCA1ODM3NCwgNTgzNzcsIDU4MzgwLCA1ODM4MywgNTgzODYsIDU4Mzg5LCA1ODM5MiwgNTgzOTUsIAotICAgIDU4NDAwLCA1ODQwNCwgNTg0MTEsIDU4NDE4LCA1ODQyNSwgNTg0MzIsIDU4NDM5LCA1ODQ0NiwgNTg0NTMsIDU4NDYwLCAKLSAgICA1ODQ2NywgNTg0NzUsIDU4NDgzLCA1ODQ5MSwgNTg0OTksIDU4NTA3LCA1ODUxNSwgNTg1MjMsIDU4NTMxLCA1ODUzOSwgCi0gICAgNTg1NDcsIDU4NTU1LCA1ODU2MywgNTg1NzEsIDU4NTc5LCA1ODU4NywgNTg1OTUsIDU4NjAzLCA1ODYxMSwgNTg2MTksIAotICAgIDU4NjI3LCA1ODYzNSwgNTg2NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDU2OTg4LCA1Njk5MiwgNTY5OTYsIDU3MDAxLCA1NzAwNiwgNTcwMTEsIDU3MDE1LCA1NzAxOSwgCisgICAgNTcwMjMsIDU3MDI4LCA1NzAzMywgNTcwMzcsIDU3MDQxLCA1NzA0NSwgNTcwNDksIDU3MDU0LCA1NzA1OSwgNTcwNjQsIAorICAgIDU3MDY5LCA1NzA3MywgNTcwNzcsIDU3MDgyLCA1NzA4NywgNTcwOTIsIDU3MDk3LCA1NzEwMSwgMCwgNTcxMDUsIDU3MTA5LCAKKyAgICA1NzExMywgNTcxMTcsIDU3MTIxLCA1NzEyNSwgNTcxMjksIDU3MTM0LCA1NzEzOSwgNTcxNDMsIDU3MTQ4LCA1NzE1MywgCisgICAgNTcxNjIsIDU3MTY2LCA1NzE3MCwgNTcxNzQsIDU3MTgxLCA1NzE4NSwgNTcxOTAsIDU3MTk1LCA1NzE5OSwgNTcyMDMsIAorICAgIDU3MjA5LCA1NzIxNCwgNTcyMTksIDU3MjI0LCA1NzIyOSwgNTcyMzMsIDU3MjM3LCA1NzI0MSwgNTcyNDUsIDU3MjQ5LCAKKyAgICA1NzI1NCwgNTcyNTksIDU3MjYzLCA1NzI2NywgNTcyNzIsIDU3Mjc3LCA1NzI4MiwgNTcyODYsIDU3MjkwLCA1NzI5NSwgCisgICAgNTczMDAsIDU3MzA2LCA1NzMxMiwgNTczMTYsIDU3MzIyLCA1NzMyOCwgNTczMzIsIDU3MzM4LCA1NzM0NCwgNTczNDksIAorICAgIDU3MzU0LCA1NzM1OCwgNTczNjQsIDU3MzY4LCA1NzM3MiwgNTczNzgsIDU3Mzg0LCA1NzM4OSwgNTczOTQsIDU3Mzk4LCAKKyAgICA1NzQwMiwgNTc0MTAsIDU3NDE2LCA1NzQyMiwgNTc0MjgsIDU3NDMzLCA1NzQzOCwgNTc0NDMsIDU3NDQ5LCA1NzQ1MywgCisgICAgNTc0NTksIDU3NDYzLCA1NzQ2NywgNTc0NzMsIDU3NDc5LCA1NzQ4NSwgNTc0OTEsIDU3NDk3LCA1NzUwMywgNTc1MDksIAorICAgIDU3NTE1LCA1NzUyMSwgNTc1MjcsIDU3NTMzLCA1NzUzOSwgNTc1NDMsIDU3NTQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1NzU1NSwgNTc1NTgsIDU3NTYyLCA1NzU2NiwgNTc1NzAsIDU3NTc0LCA1NzU3NywgNTc1ODAsIAorICAgIDU3NTg0LCA1NzU4OCwgNTc1OTIsIDU3NTk2LCA1NzU5OSwgNTc2MDQsIDU3NjA4LCA1NzYxMiwgNTc2MTYsIDU3NjIyLCAKKyAgICA1NzYyNiwgNTc2MzAsIDU3NjM0LCA1NzYzOCwgNTc2NDUsIDU3NjUxLCA1NzY1NSwgNTc2NTksIDU3NjYzLCA1NzY2NywgCisgICAgNTc2NzEsIDU3Njc1LCA1NzY3OSwgNTc2ODMsIDU3Njg3LCA1NzY5MSwgNTc2OTUsIDU3NzAxLCA1NzcwNSwgNTc3MDksIAorICAgIDU3NzEzLCA1NzcxNywgNTc3MjEsIDU3NzI1LCA1NzcyOSwgNTc3MzMsIDU3NzM3LCA1Nzc0MSwgNTc3NDUsIDU3NzQ5LCAKKyAgICA1Nzc1MywgNTc3NTcsIDU3NzYxLCA1Nzc2NSwgNTc3NzEsIDU3Nzc3LCA1Nzc4MiwgNTc3ODcsIDU3NzkxLCA1Nzc5NSwgCisgICAgNTc3OTksIDU3ODAzLCA1NzgwNywgNTc4MTEsIDU3ODE1LCA1NzgxOSwgNTc4MjMsIDU3ODI3LCA1NzgzMSwgNTc4MzUsIAorICAgIDU3ODM5LCA1Nzg0MywgNTc4NDcsIDU3ODUxLCA1Nzg1NSwgNTc4NTksIDU3ODYzLCA1Nzg2NywgNTc4NzEsIDU3ODc1LCAKKyAgICA1Nzg3OSwgNTc4ODMsIDU3ODg5LCA1Nzg5MywgNTc4OTcsIDU3OTAxLCA1NzkwNSwgNTc5MDksIDU3OTEzLCA1NzkxNywgCisgICAgNTc5MjEsIDU3OTI2LCA1NzkzMywgNTc5MzcsIDU3OTQxLCA1Nzk0NSwgNTc5NDksIDU3OTUzLCA1Nzk1NywgNTc5NjEsIAorICAgIDU3OTY1LCA1Nzk2OSwgNTc5NzMsIDU3OTc3LCA1Nzk4MSwgNTc5ODgsIDU3OTkyLCA1Nzk5OCwgNTgwMDIsIDU4MDA2LCAKKyAgICA1ODAxMCwgNTgwMTQsIDU4MDE4LCA1ODAyMSwgNTgwMjUsIDU4MDI5LCA1ODAzMywgNTgwMzcsIDU4MDQxLCA1ODA0NSwgCisgICAgNTgwNDksIDU4MDUzLCA1ODA1NywgNTgwNjEsIDU4MDY1LCA1ODA2OSwgNTgwNzMsIDU4MDc3LCA1ODA4MSwgNTgwODUsIAorICAgIDU4MDg5LCA1ODA5MywgNTgwOTcsIDU4MTAxLCA1ODEwNSwgNTgxMDksIDU4MTEzLCA1ODExNywgNTgxMjEsIDU4MTI1LCAKKyAgICA1ODEyOSwgNTgxMzMsIDU4MTM3LCA1ODE0MSwgNTgxNDUsIDU4MTQ5LCA1ODE1NSwgNTgxNTksIDU4MTYzLCA1ODE2NywgCisgICAgNTgxNzEsIDU4MTc1LCA1ODE3OSwgNTgxODMsIDU4MTg3LCA1ODE5MSwgNTgxOTUsIDU4MTk5LCA1ODIwMywgNTgyMDcsIAorICAgIDU4MjExLCA1ODIxNSwgNTgyMTksIDU4MjIzLCA1ODIyNywgNTgyMzEsIDU4MjM1LCA1ODIzOSwgNTgyNDMsIDU4MjQ3LCAKKyAgICA1ODI1MSwgNTgyNTUsIDU4MjU5LCA1ODI2MywgNTgyNzEsIDU4Mjc1LCA1ODI3OSwgNTgyODMsIDU4Mjg3LCA1ODI5MSwgCisgICAgNTgyOTcsIDU4MzAxLCA1ODMwNSwgNTgzMDksIDU4MzEzLCA1ODMxNywgNTgzMjEsIDU4MzI1LCA1ODMyOSwgNTgzMzMsIAorICAgIDU4MzM3LCA1ODM0MSwgNTgzNDUsIDU4MzQ5LCA1ODM1NSwgNTgzNTksIDU4MzYzLCA1ODM2NywgNTgzNzEsIDU4Mzc1LCAKKyAgICA1ODM3OSwgNTgzODMsIDU4Mzg3LCA1ODM5MSwgNTgzOTUsIDU4Mzk5LCA1ODQwMywgNTg0MDcsIDU4NDExLCA1ODQxNSwgCisgICAgNTg0MTksIDU4NDIzLCA1ODQyNywgNTg0MzEsIDU4NDM1LCA1ODQzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTg0NDMsIDU4NDUyLCA1ODQ2MCwgCisgICAgNTg0NzIsIDU4NDgzLCA1ODQ5MSwgNTg1MDAsIDU4NTA5LCA1ODUxOSwgNTg1MzEsIDU4NTQzLCA1ODU1NSwgMCwgMCwgMCwgCisgICAgMCwgNTg1NjEsIDU4NTY0LCA1ODU2NywgNTg1NzIsIDU4NTc1LCA1ODU4MiwgNTg1ODYsIDU4NTkwLCA1ODU5NCwgNTg1OTgsIAorICAgIDU4NjAyLCA1ODYwNywgNTg2MTIsIDU4NjE2LCA1ODYyMCwgNTg2MjUsIDU4NjMwLCA1ODYzNSwgNTg2NDAsIDU4NjQzLCAKKyAgICA1ODY0NiwgNTg2NTIsIDU4NjU4LCA1ODY2MywgNTg2NjgsIDU4Njc1LCA1ODY4MiwgNTg2ODYsIDU4NjkwLCA1ODY5NCwgCisgICAgNTg3MDIsIDU4NzA4LCA1ODcxNSwgNTg3MjAsIDU4NzI1LCA1ODczMCwgNTg3MzUsIDU4NzQwLCA1ODc0NSwgNTg3NTAsIAorICAgIDU4NzU1LCA1ODc2MCwgNTg3NjUsIDU4NzcwLCA1ODc3NSwgNTg3ODAsIDU4Nzg1LCA1ODc5MSwgNTg3OTYsIDU4ODAwLCAKKyAgICA1ODgwNiwgNTg4MTcsIDU4ODI3LCA1ODg0MiwgNTg4NTIsIDU4ODU2LCA1ODg2NSwgNTg4NzEsIDU4ODc3LCA1ODg4MywgCisgICAgNTg4ODgsIDU4ODkxLCA1ODg5NiwgNTg5MDAsIDAsIDU4OTA2LCA1ODkxMCwgNTg5MTMsIDU4OTE3LCA1ODkyMCwgNTg5MjQsIAorICAgIDU4OTI3LCA1ODkzMSwgNTg5MzQsIDU4OTM4LCA1ODk0MSwgNTg5NDQsIDU4OTQ4LCA1ODk1MiwgNTg5NTYsIDU4OTYwLCAKKyAgICA1ODk2NCwgNTg5NjgsIDU4OTcyLCA1ODk3NiwgNTg5ODAsIDU4OTg0LCA1ODk4OCwgNTg5OTIsIDU4OTk2LCA1OTAwMCwgCisgICAgNTkwMDQsIDU5MDA4LCA1OTAxMiwgNTkwMTYsIDU5MDIwLCA1OTAyNCwgNTkwMjgsIDU5MDMyLCA1OTAzNiwgNTkwNDEsIAorICAgIDU5MDQ1LCA1OTA0OSwgNTkwNTMsIDU5MDU3LCA1OTA2MCwgNTkwNjQsIDU5MDY3LCA1OTA3MSwgNTkwNzUsIDU5MDc5LCAKKyAgICA1OTA4MywgNTkwODYsIDU5MDkwLCA1OTA5MywgNTkwOTcsIDU5MTAxLCA1OTEwNSwgNTkxMDksIDU5MTEzLCA1OTExNywgCisgICAgNTkxMjEsIDU5MTI1LCA1OTEyOSwgNTkxMzMsIDU5MTM3LCA1OTE0MSwgNTkxNDQsIDU5MTQ4LCA1OTE1MiwgNTkxNTYsIAorICAgIDU5MTYwLCA1OTE2NCwgNTkxNjcsIDU5MTcyLCA1OTE3NiwgNTkxODEsIDU5MTg1LCA1OTE4OCwgNTkxOTIsIDU5MTk2LCAKKyAgICA1OTIwMCwgNTkyMDQsIDU5MjA5LCA1OTIxMywgNTkyMTcsIDU5MjIxLCA1OTIyNSwgNTkyMjgsIDU5MjMyLCA1OTIzNiwgMCwgCisgICAgMCwgNTkyNDEsIDU5MjQ5LCA1OTI1NywgNTkyNjQsIDU5MjcxLCA1OTI3NSwgNTkyODEsIDU5Mjg2LCA1OTI5MSwgNTkyOTUsIAorICAgIDU5Mjk4LCA1OTMwMiwgNTkzMDUsIDU5MzA5LCA1OTMxMiwgNTkzMTYsIDU5MzE5LCA1OTMyMywgNTkzMjYsIDU5MzI5LCAKKyAgICA1OTMzMywgNTkzMzcsIDU5MzQxLCA1OTM0NSwgNTkzNDksIDU5MzUzLCA1OTM1NywgNTkzNjEsIDU5MzY1LCA1OTM2OSwgCisgICAgNTkzNzMsIDU5Mzc3LCA1OTM4MSwgNTkzODUsIDU5Mzg5LCA1OTM5MywgNTkzOTcsIDU5NDAxLCA1OTQwNSwgNTk0MDksIAorICAgIDU5NDEzLCA1OTQxNywgNTk0MjEsIDU5NDI2LCA1OTQzMCwgNTk0MzQsIDU5NDM4LCA1OTQ0MiwgNTk0NDUsIDU5NDQ5LCAKKyAgICA1OTQ1MiwgNTk0NTYsIDU5NDYwLCA1OTQ2NCwgNTk0NjgsIDU5NDcxLCA1OTQ3NSwgNTk0NzgsIDU5NDgyLCA1OTQ4NiwgCisgICAgNTk0OTAsIDU5NDk0LCA1OTQ5OCwgNTk1MDIsIDU5NTA2LCA1OTUxMCwgNTk1MTQsIDU5NTE4LCA1OTUyMiwgNTk1MjYsIAorICAgIDU5NTI5LCA1OTUzMywgNTk1MzcsIDU5NTQxLCA1OTU0NSwgNTk1NDksIDU5NTUyLCA1OTU1NywgNTk1NjEsIDU5NTY2LCAKKyAgICA1OTU3MCwgNTk1NzMsIDU5NTc3LCA1OTU4MSwgNTk1ODUsIDU5NTg5LCA1OTU5NCwgNTk1OTgsIDU5NjAyLCA1OTYwNiwgCisgICAgNTk2MTAsIDU5NjEzLCA1OTYxNywgNTk2MjEsIDU5NjI2LCA1OTYzMCwgNTk2MzQsIDU5NjM4LCA1OTY0MiwgNTk2NDcsIAorICAgIDU5NjU0LCA1OTY1OCwgNTk2NjQsIDAsIDAsIDAsIDAsIDAsIDU5NjY5LCA1OTY3MywgNTk2NzcsIDU5NjgwLCA1OTY4NCwgCisgICAgNTk2ODgsIDU5NjkyLCA1OTY5NSwgNTk2OTgsIDU5NzAyLCA1OTcwNiwgNTk3MTAsIDU5NzE0LCA1OTcxOCwgNTk3MjIsIAorICAgIDU5NzI2LCA1OTczMCwgNTk3MzQsIDU5NzM3LCA1OTc0MSwgNTk3NDUsIDU5NzQ4LCA1OTc1MSwgNTk3NTQsIDU5NzU3LCAKKyAgICA1OTc2MSwgNTk3NjUsIDU5NzY5LCA1OTc3MywgNTk3NzcsIDU5NzgxLCA1OTc4NSwgNTk3ODksIDU5NzkzLCA1OTc5NywgCisgICAgNTk4MDAsIDU5ODAzLCA1OTgwNywgNTk4MTEsIDU5ODE1LCA1OTgxOSwgMCwgMCwgMCwgNTk4MjMsIDU5ODI3LCA1OTgzMSwgCisgICAgNTk4MzUsIDU5ODM5LCA1OTg0MywgNTk4NDcsIDU5ODUxLCA1OTg1NSwgNTk4NTksIDU5ODYzLCA1OTg2NywgNTk4NzEsIAorICAgIDU5ODc1LCA1OTg3OSwgNTk4ODMsIDU5ODg3LCA1OTg5MSwgNTk4OTUsIDU5ODk5LCA1OTkwMywgNTk5MDcsIDU5OTExLCAKKyAgICA1OTkxNSwgNTk5MTksIDU5OTIzLCA1OTkyNywgNTk5MzEsIDU5OTM1LCA1OTkzOSwgNTk5NDMsIDU5OTQ2LCA1OTk1MCwgCisgICAgNTk5NTMsIDU5OTU3LCA1OTk2MSwgNTk5NjQsIDU5OTY4LCA1OTk3MiwgNTk5NzUsIDU5OTc5LCA1OTk4MywgNTk5ODcsIAorICAgIDU5OTkxLCA1OTk5NCwgNTk5OTgsIDYwMDAyLCA2MDAwNiwgNjAwMTAsIDYwMDE0LCA2MDAxOCwgNjAwMjEsIDYwMDI0LCAKKyAgICA2MDAyOCwgNjAwMzIsIDYwMDM2LCA2MDA0MCwgNjAwNDQsIDYwMDQ4LCA2MDA1MiwgNjAwNTYsIDYwMDYwLCA2MDA2NCwgCisgICAgNjAwNjgsIDYwMDcyLCA2MDA3NiwgNjAwODAsIDYwMDg0LCA2MDA4OCwgNjAwOTIsIDYwMDk2LCA2MDEwMCwgNjAxMDQsIAorICAgIDYwMTA4LCA2MDExMiwgNjAxMTYsIDYwMTIwLCA2MDEyNCwgNjAxMjgsIDYwMTMyLCA2MDEzNiwgNjAxNDAsIDYwMTQ0LCAKKyAgICA2MDE0OCwgNjAxNTIsIDYwMTU2LCA2MDE2MCwgNjAxNjQsIDYwMTY4LCA2MDE3MiwgNjAxNzYsIDYwMTgwLCA2MDE4NCwgCisgICAgNjAxODgsIDAsIDYwMTkyLCA2MDE5OCwgNjAyMDQsIDYwMjA5LCA2MDIxNCwgNjAyMTksIDYwMjI1LCA2MDIzMSwgNjAyMzcsIAorICAgIDYwMjQzLCA2MDI0OSwgNjAyNTUsIDYwMjYxLCA2MDI2NywgNjAyNzMsIDYwMjc5LCA2MDI4NSwgNjAyODksIDYwMjkzLCAKKyAgICA2MDI5NywgNjAzMDEsIDYwMzA1LCA2MDMwOSwgNjAzMTMsIDYwMzE3LCA2MDMyMSwgNjAzMjUsIDYwMzI5LCA2MDMzMywgCisgICAgNjAzMzcsIDYwMzQxLCA2MDM0NSwgNjAzNDksIDYwMzUzLCA2MDM1NywgNjAzNjEsIDYwMzY1LCA2MDM3MCwgNjAzNzUsIAorICAgIDYwMzgwLCA2MDM4NSwgNjAzODksIDYwMzkzLCAwLCAwLCAwLCAwLCAwLCA2MDM5NywgNjA0MDIsIDYwNDA3LCA2MDQxMiwgCisgICAgNjA0MTcsIDYwNDIyLCA2MDQyNywgNjA0MzIsIDYwNDM3LCA2MDQ0MiwgNjA0NDcsIDYwNDUyLCA2MDQ1NywgNjA0NjIsIAorICAgIDYwNDY3LCA2MDQ3MiwgNjA0NzYsIDYwNDgxLCA2MDQ4NSwgNjA0OTAsIDYwNDk1LCA2MDUwMCwgNjA1MDUsIDYwNTEwLCAKKyAgICA2MDUxNSwgNjA1MjAsIDYwNTI1LCA2MDUzMCwgNjA1MzUsIDYwNTQwLCA2MDU0NSwgNjA1NTAsIDYwNTU1LCA2MDU2MCwgCisgICAgNjA1NjUsIDYwNTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2MDU3NSwgNjA1ODAsIDYwNTg1LCAKKyAgICA2MDU5MCwgNjA1OTQsIDYwNTk5LCA2MDYwMywgNjA2MDgsIDYwNjEzLCA2MDYxOCwgNjA2MjMsIDYwNjI4LCA2MDYzMiwgCisgICAgNjA2MzcsIDYwNjQyLCA2MDY0NywgNjA2NTIsIDYwNjU2LCA2MDY2MCwgNjA2NjQsIDYwNjY4LCA2MDY3MiwgNjA2NzYsIAorICAgIDYwNjgwLCA2MDY4NCwgNjA2ODgsIDYwNjkyLCA2MDY5NiwgNjA3MDAsIDYwNzA0LCA2MDcwOCwgNjA3MTMsIDYwNzE4LCAKKyAgICA2MDcyMywgNjA3MjgsIDYwNzMzLCA2MDczOCwgNjA3NDMsIDYwNzQ4LCA2MDc1MywgNjA3NTgsIDYwNzYzLCA2MDc2OCwgCisgICAgNjA3NzMsIDYwNzc4LCA2MDc4MywgNjA3ODksIDAsIDYwNzk2LCA2MDc5OSwgNjA4MDIsIDYwODA1LCA2MDgwOCwgNjA4MTEsIAorICAgIDYwODE0LCA2MDgxNywgNjA4MjAsIDYwODIzLCA2MDgyNywgNjA4MzEsIDYwODM1LCA2MDgzOSwgNjA4NDMsIDYwODQ3LCAKKyAgICA2MDg1MSwgNjA4NTUsIDYwODU5LCA2MDg2MywgNjA4NjcsIDYwODcxLCA2MDg3NSwgNjA4NzksIDYwODgzLCA2MDg4NywgCisgICAgNjA4OTEsIDYwODk1LCA2MDg5OSwgNjA5MDMsIDYwOTA3LCA2MDkxMSwgNjA5MTUsIDYwOTE5LCA2MDkyMywgNjA5MjcsIAorICAgIDYwOTMxLCA2MDkzNSwgNjA5MzksIDYwOTQzLCA2MDk0NywgNjA5NTYsIDYwOTY1LCA2MDk3NCwgNjA5ODMsIDYwOTkyLCAKKyAgICA2MTAwMSwgNjEwMTAsIDYxMDE5LCA2MTAyMiwgNjEwMjcsIDYxMDMyLCA2MTAzNywgNjEwNDIsIDYxMDQ3LCA2MTA1MiwgCisgICAgNjEwNTcsIDYxMDYyLCA2MTA2NywgNjEwNzEsIDYxMDc2LCA2MTA4MSwgNjEwODYsIDYxMDkxLCA2MTA5NiwgNjExMDAsIAorICAgIDYxMTA0LCA2MTEwOCwgNjExMTIsIDYxMTE2LCA2MTEyMCwgNjExMjQsIDYxMTI4LCA2MTEzMiwgNjExMzYsIDYxMTQwLCAKKyAgICA2MTE0NCwgNjExNDgsIDYxMTUyLCA2MTE1NywgNjExNjIsIDYxMTY3LCA2MTE3MiwgNjExNzcsIDYxMTgyLCA2MTE4NywgCisgICAgNjExOTIsIDYxMTk3LCA2MTIwMiwgNjEyMDcsIDYxMjEyLCA2MTIxNywgNjEyMjIsIDYxMjI4LCA2MTIzNCwgNjEyMzksIAorICAgIDYxMjQ0LCA2MTI0NywgNjEyNTAsIDYxMjUzLCA2MTI1NiwgNjEyNTksIDYxMjYyLCA2MTI2NSwgNjEyNjgsIDYxMjcxLCAKKyAgICA2MTI3NSwgNjEyNzksIDYxMjgzLCA2MTI4NywgNjEyOTEsIDYxMjk1LCA2MTI5OSwgNjEzMDMsIDYxMzA3LCA2MTMxMSwgCisgICAgNjEzMTUsIDYxMzE5LCA2MTMyMywgNjEzMjcsIDYxMzMxLCA2MTMzNSwgNjEzMzksIDYxMzQzLCA2MTM0NywgNjEzNTEsIAorICAgIDYxMzU1LCA2MTM1OSwgNjEzNjMsIDYxMzY3LCA2MTM3MSwgNjEzNzUsIDYxMzc5LCA2MTM4MywgNjEzODcsIDYxMzkxLCAKKyAgICA2MTM5NSwgNjEzOTksIDYxNDAzLCA2MTQwNywgNjE0MTEsIDYxNDE1LCA2MTQxOSwgNjE0MjMsIDYxNDI3LCA2MTQzMSwgCisgICAgNjE0MzYsIDYxNDQxLCA2MTQ0NiwgNjE0NTEsIDYxNDU1LCA2MTQ2MCwgNjE0NjUsIDYxNDcwLCA2MTQ3NSwgNjE0ODAsIAorICAgIDYxNDg1LCA2MTQ5MCwgNjE0OTUsIDYxNTAwLCA2MTUwNCwgNjE1MTAsIDYxNTE2LCA2MTUyMiwgNjE1MjgsIDYxNTM0LCAKKyAgICA2MTU0MCwgNjE1NDYsIDYxNTUyLCA2MTU1OCwgNjE1NjQsIDYxNTcwLCA2MTU3NiwgNjE1NzksIDYxNTgyLCA2MTU4NSwgCisgICAgNjE1OTAsIDYxNTkzLCA2MTU5NiwgNjE1OTksIDYxNjAyLCA2MTYwNSwgNjE2MDgsIDYxNjEyLCA2MTYxNiwgNjE2MjAsIAorICAgIDYxNjI0LCA2MTYyOCwgNjE2MzIsIDYxNjM2LCA2MTY0MCwgNjE2NDQsIDYxNjQ4LCA2MTY1MiwgNjE2NTYsIDYxNjYwLCAKKyAgICA2MTY2MywgNjE2NjYsIDYxNjcwLCA2MTY3NCwgNjE2NzgsIDYxNjgyLCA2MTY4NSwgNjE2ODksIDYxNjkzLCA2MTY5NywgCisgICAgNjE3MDEsIDYxNzA0LCA2MTcwOCwgNjE3MTIsIDYxNzE2LCA2MTcyMCwgNjE3MjMsIDYxNzI3LCA2MTczMSwgNjE3MzQsIAorICAgIDYxNzM4LCA2MTc0MiwgNjE3NDYsIDYxNzUwLCA2MTc1NCwgNjE3NTgsIDYxNzYyLCAwLCA2MTc2NiwgNjE3NjksIDYxNzcyLCAKKyAgICA2MTc3NSwgNjE3NzgsIDYxNzgxLCA2MTc4NCwgNjE3ODcsIDYxNzkwLCA2MTc5MywgNjE3OTYsIDYxNzk5LCA2MTgwMiwgCisgICAgNjE4MDUsIDYxODA4LCA2MTgxMSwgNjE4MTQsIDYxODE3LCA2MTgyMCwgNjE4MjMsIDYxODI2LCA2MTgyOSwgNjE4MzIsIAorICAgIDYxODM1LCA2MTgzOCwgNjE4NDEsIDYxODQ0LCA2MTg0NywgNjE4NTAsIDYxODUzLCA2MTg1NiwgNjE4NTksIDYxODYyLCAKKyAgICA2MTg2NSwgNjE4NjgsIDYxODcxLCA2MTg3NCwgNjE4NzcsIDYxODgwLCA2MTg4MywgNjE4ODYsIDYxODg5LCA2MTg5MiwgCisgICAgNjE4OTUsIDYxODk4LCA2MTkwMSwgNjE5MDQsIDYxOTA3LCA2MTkxMCwgNjE5MTMsIDYxOTE2LCA2MTkxOSwgNjE5MjIsIAorICAgIDYxOTI1LCA2MTkyOCwgNjE5MzEsIDYxOTM0LCA2MTkzNywgNjE5NDAsIDYxOTQzLCA2MTk0NiwgNjE5NDksIDYxOTUyLCAKKyAgICA2MTk1NSwgNjE5NTgsIDYxOTYxLCA2MTk2NCwgNjE5NjcsIDYxOTcwLCA2MTk3MywgNjE5NzYsIDYxOTc5LCA2MTk4MiwgCisgICAgNjE5ODUsIDYxOTg4LCA2MTk5MSwgNjE5OTQsIDYxOTk3LCA2MjAwMCwgNjIwMDMsIDYyMDA2LCA2MjAwOSwgNjIwMTIsIAorICAgIDYyMDE1LCA2MjAxOCwgNjIwMjEsIDYyMDI0LCA2MjAyNywgNjIwMzAsIDYyMDM4LCA2MjA0NSwgNjIwNTIsIDYyMDU5LCAKKyAgICA2MjA2NiwgNjIwNzMsIDYyMDgwLCA2MjA4NywgNjIwOTQsIDYyMTAxLCA2MjEwOSwgNjIxMTcsIDYyMTI1LCA2MjEzMywgCisgICAgNjIxNDEsIDYyMTQ5LCA2MjE1NywgNjIxNjUsIDYyMTczLCA2MjE4MSwgNjIxODksIDYyMTk3LCA2MjIwNSwgNjIyMTMsIAorICAgIDYyMjIxLCA2MjIyNCwgNjIyMjcsIDYyMjMwLCA2MjIzMiwgNjIyMzUsIDYyMjM4LCA2MjI0MSwgNjIyNDYsIDYyMjUxLCAKKyAgICA2MjI1NCwgNjIyNjEsIDYyMjY4LCA2MjI3NSwgNjIyODIsIDYyMjg1LCA2MjI5MCwgNjIyOTIsIDYyMjk2LCA2MjI5OCwgCisgICAgNjIzMDAsIDYyMzAzLCA2MjMwNiwgNjIzMDksIDYyMzEyLCA2MjMxNSwgNjIzMTgsIDYyMzIxLCA2MjMyNiwgNjIzMzEsIAorICAgIDYyMzM0LCA2MjMzNywgNjIzNDAsIDYyMzQzLCA2MjM0NiwgNjIzNDksIDYyMzUyLCA2MjM1NiwgNjIzNTksIDYyMzYyLCAKKyAgICA2MjM2NSwgNjIzNjgsIDYyMzcxLCA2MjM3NSwgNjIzNzgsIDYyMzgxLCA2MjM4NCwgNjIzODksIDYyMzk0LCA2MjM5OSwgCisgICAgNjI0MDQsIDYyNDA5LCA2MjQxNCwgNjI0MTksIDYyNDI0LCA2MjQyOSwgNjI0MzcsIDYyNDM5LCA2MjQ0MiwgNjI0NDUsIAorICAgIDYyNDQ4LCA2MjQ1MSwgNjI0NTYsIDYyNDY0LCA2MjQ2NywgNjI0NzAsIDYyNDc0LCA2MjQ3NywgNjI0ODAsIDYyNDgzLCAKKyAgICA2MjQ4OCwgNjI0OTEsIDYyNDk0LCA2MjQ5OSwgNjI1MDIsIDYyNTA1LCA2MjUxMCwgNjI1MTMsIDYyNTE2LCA2MjUyMSwgCisgICAgNjI1MjYsIDYyNTMxLCA2MjUzNCwgNjI1MzcsIDYyNTQwLCA2MjU0MywgNjI1NDksIDYyNTUyLCA2MjU1NSwgNjI1NTgsIAorICAgIDYyNTYwLCA2MjU2MywgNjI1NjYsIDYyNTY5LCA2MjU3NCwgNjI1NzcsIDYyNTgwLCA2MjU4MywgNjI1ODYsIDYyNTg5LCAKKyAgICA2MjU5NCwgNjI1OTcsIDYyNjAwLCA2MjYwMywgNjI2MDYsIDYyNjA5LCA2MjYxMiwgNjI2MTUsIDYyNjE4LCA2MjYyMSwgCisgICAgNjI2MjYsIDYyNjMwLCA2MjYzNywgNjI2NDQsIDYyNjUxLCA2MjY1OCwgNjI2NjUsIDYyNjcyLCA2MjY3OSwgNjI2ODYsIAorICAgIDYyNjkzLCA2MjcwMSwgNjI3MDksIDYyNzE3LCA2MjcyNSwgNjI3MzMsIDYyNzQxLCA2Mjc0OSwgNjI3NTcsIDYyNzY1LCAKKyAgICA2Mjc3MywgNjI3ODEsIDYyNzg5LCA2Mjc5NywgNjI4MDUsIDYyODEzLCA2MjgyMSwgNjI4MjksIDYyODM3LCA2Mjg0NSwgCisgICAgNjI4NTMsIDYyODYxLCA2Mjg2OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTg2NDYsIDU4NjU0LCA1ODY2MiwgNTg2NzIsIDU4Njc4LCA1ODY4MiwgNTg2ODYsIDU4NjkyLCA1ODY5OCwgNTg3MDMsIAotICAgIDU4NzA3LCA1ODcxMSwgNTg3MTUsIDU4NzE5LCA1ODcyNSwgNTg3MjksIDU4NzMzLCA1ODczNywgNTg3NDcsIDU4NzUxLCAKLSAgICA1ODc1NSwgNTg3NjEsIDU4NzY1LCA1ODc3MSwgNTg3NzUsIDU4Nzc5LCA1ODc4NSwgNTg3OTEsIDU4Nzk3LCA1ODgwNSwgCi0gICAgNTg4MTMsIDU4ODE3LCA1ODgyMSwgNTg4MjUsIDU4ODMxLCA1ODgzNSwgNTg4NDQsIDU4ODUwLCA1ODg1NCwgNTg4NTgsIAotICAgIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg4MSwgNTg4ODcsIDU4ODkzLCA1ODg5NywgNTg5MDMsIDU4OTA3LCAKLSAgICA1ODkxMywgNTg5MjEsIDU4OTMxLCA1ODkzNSwgNTg5NDMsIDU4OTQ3LCA1ODk1MywgNTg5NjEsIDU4OTY5LCA1ODk3MywgCi0gICAgNTg5NzcsIDU4OTgzLCA1ODk4OCwgNTg5OTQsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDExLCA1OTAxNSwgNTkwMTksIAotICAgIDU5MDIzLCA1OTAyNywgNTkwMzEsIDU5MDM1LCA1OTAzOSwgNTkwNDIsIDU5MDQ2LCA1OTA1MCwgNTkwNTQsIDU5MDU4LCAKLSAgICA1OTA2MiwgNTkwNjYsIDU5MDY5LCA1OTA3MywgNTkwNzcsIDU5MDgwLCA1OTA4NCwgNTkwODgsIDU5MDkyLCA1OTA5NiwgCi0gICAgNTkxMDAsIDU5MTA0LCA1OTEwOCwgNTkxMTIsIDU5MTE2LCA1OTEyMCwgNTkxMjQsIDU5MTI4LCA1OTEzMiwgNTkxMzYsIAotICAgIDU5MTQwLCA1OTE0NCwgNTkxNDgsIDU5MTUyLCA1OTE1NiwgNTkxNjAsIDU5MTY0LCA1OTE2OCwgNTkxNzIsIDU5MTc2LCAKLSAgICA1OTE4MCwgNTkxODQsIDU5MTg4LCA1OTE5MiwgNTkxOTYsIDU5MjAwLCA1OTIwNCwgNTkyMDgsIDU5MjEyLCA1OTIxNiwgCi0gICAgNTkyMjAsIDU5MjI0LCA1OTIyOCwgNTkyMzIsIDU5MjM2LCA1OTI0MCwgNTkyNDQsIDU5MjQ4LCA1OTI1MiwgNTkyNTYsIAotICAgIDU5MjU5LCA1OTI2MywgNTkyNjcsIDU5MjcxLCA1OTI3NSwgNTkyNzksIDU5MjgzLCA1OTI4NywgNTkyOTEsIDU5Mjk1LCAKLSAgICA1OTI5OSwgNTkzMDMsIDU5MzA3LCA1OTMxMSwgNTkzMTUsIDU5MzE5LCA1OTMyMywgNTkzMjcsIDU5MzMxLCA1OTMzNSwgCi0gICAgNTkzMzksIDU5MzQzLCA1OTM0NywgNTkzNTEsIDU5MzU1LCA1OTM1OSwgNTkzNjMsIDU5MzY3LCA1OTM3MSwgNTkzNzUsIAotICAgIDU5Mzc5LCA1OTM4MywgNTkzODcsIDU5MzkxLCA1OTM5NSwgNTkzOTksIDU5NDAzLCA1OTQwNywgNTk0MTEsIDU5NDE1LCAKLSAgICA1OTQxOSwgNTk0MjMsIDU5NDI3LCA1OTQzMSwgNTk0MzUsIDU5NDM5LCA1OTQ0MywgNTk0NDcsIDU5NDUxLCA1OTQ1NSwgCi0gICAgNTk0NTksIDU5NDYzLCA1OTQ2NywgNTk0NzEsIDU5NDc1LCA1OTQ3OSwgNTk0ODMsIDU5NDg3LCA1OTQ5MSwgNTk0OTUsIAotICAgIDU5NDk5LCA1OTUwMywgNTk1MDcsIDU5NTExLCA1OTUxNSwgNTk1MTksIDU5NTIzLCA1OTUyNywgNTk1MzEsIDU5NTM1LCAKLSAgICA1OTUzOSwgNTk1NDMsIDU5NTQ3LCA1OTU1MSwgNTk1NTUsIDU5NTU5LCA1OTU2MywgNTk1NjcsIDU5NTcxLCA1OTU3NSwgCi0gICAgNTk1NzksIDU5NTgzLCA1OTU4NywgNTk1OTEsIDU5NTk1LCA1OTU5OSwgNTk2MDMsIDU5NjA3LCA1OTYxMSwgNTk2MTUsIAotICAgIDU5NjE5LCA1OTYyMywgNTk2MjcsIDU5NjMxLCA1OTYzNSwgNTk2MzksIDU5NjQzLCA1OTY0NywgNTk2NTEsIDU5NjU1LCAKLSAgICA1OTY1OSwgNTk2NjMsIDU5NjY3LCA1OTY3MSwgNTk2NzUsIDU5Njc5LCA1OTY4MywgNTk2ODcsIDU5NjkxLCA1OTY5NSwgCi0gICAgNTk2OTksIDU5NzAzLCA1OTcwNywgNTk3MTEsIDU5NzE1LCA1OTcxOSwgNTk3MjMsIDU5NzI3LCA1OTczMCwgNTk3MzQsIAotICAgIDU5NzM4LCA1OTc0MiwgNTk3NDYsIDU5NzUwLCA1OTc1NCwgNTk3NTgsIDU5NzYyLCA1OTc2NiwgNTk3NzAsIDU5Nzc0LCAKLSAgICA1OTc3OCwgNTk3ODIsIDU5Nzg2LCA1OTc5MCwgNTk3OTQsIDU5Nzk4LCA1OTgwMiwgNTk4MDYsIDU5ODEwLCA1OTgxNCwgCi0gICAgNTk4MTgsIDU5ODIyLCA1OTgyNiwgNTk4MzAsIDU5ODM0LCA1OTgzOCwgNTk4NDIsIDU5ODQ2LCA1OTg1MCwgNTk4NTQsIAotICAgIDU5ODU4LCA1OTg2MiwgNTk4NjYsIDU5ODcwLCA1OTg3NCwgNTk4NzgsIDU5ODgyLCA1OTg4NiwgNTk4OTAsIDU5ODk0LCAKLSAgICA1OTg5OCwgNTk5MDIsIDU5OTA2LCA1OTkxMCwgNTk5MTQsIDU5OTE4LCA1OTkyMiwgNTk5MjYsIDU5OTMwLCA1OTkzNCwgCi0gICAgNTk5MzgsIDU5OTQyLCA1OTk0NiwgNTk5NTAsIDU5OTU0LCA1OTk1OCwgNTk5NjIsIDU5OTY2LCA1OTk3MCwgNTk5NzQsIAotICAgIDU5OTc4LCA1OTk4MiwgNTk5ODYsIDU5OTkwLCA1OTk5NCwgNTk5OTgsIDYwMDAyLCA2MDAwNiwgNjAwMTAsIDYwMDE0LCAKLSAgICA2MDAxOCwgNjAwMjIsIDYwMDI2LCA2MDAzMCwgNjAwMzQsIDYwMDM4LCA2MDA0MiwgNjAwNDYsIDYwMDUwLCA2MDA1NCwgCi0gICAgNjAwNTgsIDYwMDYyLCA2MDA2NiwgNjAwNzAsIDYwMDc0LCA2MDA3OCwgNjAwODIsIDYwMDg2LCA2MDA5MCwgNjAwOTQsIAotICAgIDYwMDk4LCA2MDEwMiwgNjAxMDYsIDYwMTEwLCA2MDExNCwgNjAxMTgsIDYwMTIyLCA2MDEyNiwgNjAxMzAsIDYwMTM0LCAKLSAgICA2MDEzOCwgNjAxNDIsIDYwMTQ2LCA2MDE1MCwgNjAxNTQsIDYwMTU4LCA2MDE2MiwgNjAxNjYsIDYwMTcwLCA2MDE3NCwgCi0gICAgNjAxNzgsIDYwMTgyLCA2MDE4NiwgNjAxOTAsIDYwMTkzLCA2MDE5NywgNjAyMDEsIDYwMjA1LCA2MDIwOSwgNjAyMTMsIAotICAgIDYwMjE3LCA2MDIyMSwgNjAyMjUsIDYwMjI5LCA2MDIzMywgNjAyMzcsIDYwMjQxLCA2MDI0NSwgNjAyNDksIDYwMjUzLCAKLSAgICA2MDI1NywgNjAyNjEsIDYwMjY1LCA2MDI2OSwgNjAyNzMsIDYwMjc3LCA2MDI4MSwgNjAyODUsIDYwMjg5LCA2MDI5MywgCi0gICAgNjAyOTcsIDYwMzAxLCA2MDMwNSwgNjAzMDksIDYwMzEzLCA2MDMxNywgNjAzMjEsIDYwMzI1LCA2MDMyOSwgNjAzMzMsIAotICAgIDYwMzM3LCA2MDM0MSwgNjAzNDUsIDYwMzQ5LCA2MDM1MywgNjAzNTcsIDYwMzYxLCA2MDM2NSwgNjAzNjksIDYwMzczLCAKLSAgICA2MDM3NywgNjAzODEsIDYwMzg1LCA2MDM4OSwgNjAzOTMsIDYwMzk3LCA2MDQwMSwgNjA0MDUsIDYwNDA5LCA2MDQxMywgCi0gICAgNjA0MTcsIDYwNDIxLCA2MDQyNSwgNjA0MjksIDYwNDMzLCA2MDQzNywgNjA0NDEsIDYwNDQ1LCA2MDQ0OSwgNjA0NTMsIAotICAgIDYwNDU3LCA2MDQ2MSwgNjA0NjUsIDYwNDY5LCA2MDQ3MywgNjA0NzcsIDYwNDgxLCA2MDQ4NSwgNjA0ODksIDYwNDkzLCAKLSAgICA2MDQ5NywgNjA1MDEsIDYwNTA1LCA2MDUwOSwgNjA1MTMsIDYwNTE3LCA2MDUyMSwgNjA1MjUsIDYwNTI5LCA2MDUzMywgCi0gICAgNjA1MzcsIDYwNTQxLCA2MDU0NSwgNjA1NDksIDYwNTUzLCA2MDU1NywgNjA1NjEsIDYwNTY1LCA2MDU2OSwgNjA1NzMsIAotICAgIDYwNTc3LCA2MDU4MSwgNjA1ODUsIDYwNTg5LCA2MDU5MywgNjA1OTcsIDYwNjAxLCA2MDYwNSwgNjA2MDksIDYwNjEzLCAKLSAgICA2MDYxNywgNjA2MjEsIDYwNjI1LCA2MDYyOSwgNjA2MzMsIDYwNjM3LCA2MDY0MSwgNjA2NDUsIDYwNjQ5LCA2MDY1MywgCi0gICAgNjA2NTcsIDYwNjYxLCA2MDY2NSwgNjA2NjksIDYwNjczLCA2MDY3NywgNjA2ODEsIDYwNjg1LCA2MDY4OSwgNjA2OTMsIAotICAgIDYwNjk3LCA2MDcwMSwgNjA3MDUsIDYwNzA5LCA2MDcxMywgNjA3MTcsIDYwNzIxLCA2MDcyNSwgNjA3MjksIDYwNzMzLCAKLSAgICA2MDczNywgNjA3NDEsIDYwNzQ1LCA2MDc0OSwgNjA3NTMsIDYwNzU3LCA2MDc2MSwgNjA3NjUsIDYwNzY5LCA2MDc3MywgCi0gICAgNjA3NzcsIDYwNzgxLCA2MDc4NSwgNjA3ODksIDYwNzkzLCA2MDc5NywgNjA4MDEsIDYwODA1LCA2MDgwOSwgNjA4MTMsIAotICAgIDYwODE3LCA2MDgyMSwgNjA4MjUsIDYwODI5LCA2MDgzMywgNjA4MzcsIDYwODQxLCA2MDg0NSwgNjA4NDksIDYwODUzLCAKLSAgICA2MDg1NywgNjA4NjEsIDYwODY1LCA2MDg2OSwgNjA4NzMsIDYwODc3LCA2MDg4MSwgNjA4ODUsIDYwODg5LCA2MDg5MywgCi0gICAgNjA4OTcsIDYwOTAxLCA2MDkwNSwgNjA5MDksIDYwOTEzLCA2MDkxNywgNjA5MjEsIDYwOTI1LCA2MDkyOSwgNjA5MzMsIAotICAgIDYwOTM3LCA2MDk0MSwgNjA5NDUsIDYwOTQ5LCA2MDk1MywgNjA5NTcsIDYwOTYxLCA2MDk2NSwgNjA5NjksIDYwOTczLCAKLSAgICA2MDk3NywgNjA5ODEsIDYwOTg1LCA2MDk4OSwgNjA5OTMsIDYwOTk3LCA2MTAwMSwgNjEwMDUsIDYxMDA5LCA2MTAxMywgCi0gICAgNjEwMTcsIDYxMDIxLCA2MTAyNSwgNjEwMjksIDYxMDMzLCA2MTAzNywgNjEwNDEsIDYxMDQ1LCA2MTA0OCwgNjEwNTIsIAotICAgIDYxMDU2LCA2MTA2MCwgNjEwNjQsIDYxMDY4LCA2MTA3MiwgNjEwNzYsIDYxMDgwLCA2MTA4NCwgNjEwODgsIDYxMDkyLCAKLSAgICA2MTA5NiwgNjExMDAsIDYxMTA0LCA2MTEwOCwgNjExMTIsIDYxMTE2LCA2MTEyMCwgNjExMjQsIDYxMTI4LCA2MTEzMiwgCi0gICAgNjExMzYsIDYxMTQwLCA2MTE0NCwgNjExNDgsIDYxMTUyLCA2MTE1NiwgNjExNjAsIDYxMTY0LCA2MTE2OCwgNjExNzIsIAotICAgIDYxMTc2LCA2MTE4MCwgNjExODQsIDYxMTg4LCA2MTE5MiwgNjExOTYsIDYxMjAwLCA2MTIwNCwgNjEyMDgsIDYxMjEyLCAKLSAgICA2MTIxNiwgNjEyMjAsIDYxMjI0LCA2MTIyOCwgNjEyMzIsIDYxMjM2LCA2MTI0MCwgNjEyNDQsIDYxMjQ4LCA2MTI1MiwgCi0gICAgNjEyNTYsIDYxMjYwLCA2MTI2NCwgNjEyNjgsIDYxMjcyLCA2MTI3NiwgNjEyODAsIDYxMjg0LCA2MTI4OCwgNjEyOTIsIAotICAgIDYxMjk2LCA2MTMwMCwgNjEzMDQsIDYxMzA4LCA2MTMxMiwgNjEzMTYsIDYxMzIwLCA2MTMyNCwgNjEzMjgsIDYxMzMyLCAKLSAgICA2MTMzNiwgNjEzNDAsIDYxMzQ0LCA2MTM0OCwgNjEzNTIsIDYxMzU2LCA2MTM2MCwgNjEzNjQsIDYxMzY4LCA2MTM3MiwgCi0gICAgNjEzNzYsIDYxMzgwLCA2MTM4NCwgNjEzODgsIDYxMzkyLCA2MTM5NiwgNjE0MDAsIDYxNDA0LCA2MTQwOCwgNjE0MTIsIAotICAgIDYxNDE2LCA2MTQyMCwgNjE0MjQsIDYxNDI4LCA2MTQzMiwgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDgsIDYxNDUyLCAKLSAgICA2MTQ1NiwgNjE0NjAsIDYxNDY0LCA2MTQ2OCwgNjE0NzIsIDYxNDc2LCA2MTQ4MCwgNjE0ODQsIDYxNDg4LCA2MTQ5MiwgCi0gICAgNjE0OTYsIDYxNTAwLCA2MTUwMywgNjE1MDcsIDYxNTExLCA2MTUxNSwgNjE1MTksIDYxNTIzLCA2MTUyNywgNjE1MzEsIAotICAgIDYxNTM1LCA2MTUzOSwgNjE1NDMsIDYxNTQ3LCA2MTU1MSwgNjE1NTUsIDYxNTU5LCA2MTU2MywgNjE1NjcsIDYxNTcxLCAKLSAgICA2MTU3NSwgNjE1NzksIDYxNTgzLCA2MTU4NywgNjE1OTEsIDYxNTk1LCA2MTU5OSwgNjE2MDMsIDYxNjA3LCA2MTYxMSwgCi0gICAgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgNjE2MzksIDYxNjQzLCA2MTY0NywgNjE2NTEsIAotICAgIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4MywgNjE2ODcsIDYxNjkxLCAKLSAgICA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIDYxNzE1LCA2MTcxOSwgNjE3MjMsIDYxNzI3LCA2MTczMSwgCi0gICAgNjE3MzUsIDYxNzM5LCA2MTc0MywgNjE3NDcsIDYxNzUxLCA2MTc1NSwgNjE3NTksIDYxNzYzLCA2MTc2NywgNjE3NzEsIAotICAgIDYxNzc1LCA2MTc3OSwgNjE3ODMsIDYxNzg3LCA2MTc5MSwgNjE3OTUsIDYxNzk5LCA2MTgwMywgNjE4MDcsIDYxODExLCAKLSAgICA2MTgxNSwgNjE4MTksIDYxODIzLCA2MTgyNywgNjE4MzEsIDYxODM1LCA2MTgzOSwgNjE4NDMsIDYxODQ3LCA2MTg1MSwgCi0gICAgNjE4NTUsIDYxODU5LCA2MTg2MywgNjE4NjcsIDYxODcxLCA2MTg3NSwgNjE4NzksIDYxODgzLCA2MTg4NywgNjE4OTEsIAotICAgIDYxODk1LCA2MTg5OSwgNjE5MDMsIDYxOTA3LCA2MTkxMSwgNjE5MTUsIDYxOTE5LCA2MTkyMywgNjE5MjcsIDYxOTMxLCAKLSAgICA2MTkzNSwgNjE5MzksIDYxOTQzLCA2MTk0NywgNjE5NTEsIDYxOTU1LCA2MTk1OSwgNjE5NjMsIDYxOTY3LCA2MTk3MSwgCi0gICAgNjE5NzUsIDYxOTc5LCA2MTk4MywgNjE5ODcsIDYxOTkxLCA2MTk5NSwgNjE5OTksIDYyMDAzLCA2MjAwNywgNjIwMTEsIAotICAgIDYyMDE1LCA2MjAxOSwgNjIwMjMsIDYyMDI3LCA2MjAzMSwgNjIwMzUsIDYyMDM5LCA2MjA0MywgNjIwNDcsIDYyMDUxLCAKLSAgICA2MjA1NSwgNjIwNTksIDYyMDYzLCA2MjA2NywgNjIwNzEsIDYyMDc1LCA2MjA3OSwgNjIwODMsIDYyMDg3LCA2MjA5MSwgCi0gICAgNjIwOTUsIDYyMDk5LCA2MjEwMywgNjIxMDYsIDYyMTEwLCA2MjExNCwgNjIxMTgsIDYyMTIyLCA2MjEyNiwgNjIxMzAsIAotICAgIDYyMTM0LCA2MjEzOCwgNjIxNDIsIDYyMTQ2LCA2MjE1MCwgNjIxNTQsIDYyMTU4LCA2MjE2MiwgNjIxNjYsIDYyMTcwLCAKLSAgICA2MjE3NCwgNjIxNzgsIDYyMTgyLCA2MjE4NiwgNjIxOTAsIDYyMTk0LCA2MjE5OCwgNjIyMDIsIDYyMjA2LCA2MjIxMCwgCi0gICAgNjIyMTQsIDYyMjE4LCA2MjIyMiwgNjIyMjYsIDYyMjMwLCA2MjIzNCwgNjIyMzgsIDYyMjQyLCA2MjI0NiwgNjIyNTAsIAotICAgIDYyMjU0LCA2MjI1OCwgNjIyNjIsIDYyMjY2LCA2MjI3MCwgNjIyNzQsIDYyMjc4LCA2MjI4MiwgNjIyODYsIDYyMjkwLCAKLSAgICA2MjI5NCwgNjIyOTgsIDYyMzAyLCA2MjMwNiwgNjIzMTAsIDYyMzE0LCA2MjMxOCwgNjIzMjIsIDYyMzI2LCA2MjMzMCwgCi0gICAgNjIzMzQsIDYyMzM4LCA2MjM0MiwgNjIzNDYsIDYyMzUwLCA2MjM1NCwgNjIzNTgsIDYyMzYyLCA2MjM2NiwgNjIzNzAsIAotICAgIDYyMzc0LCA2MjM3OCwgNjIzODIsIDYyMzg2LCA2MjM5MCwgNjIzOTQsIDYyMzk4LCA2MjQwMiwgNjI0MDYsIDYyNDEwLCAKLSAgICA2MjQxNCwgNjI0MTgsIDYyNDIyLCA2MjQyNiwgNjI0MzAsIDYyNDM0LCA2MjQzOCwgNjI0NDIsIDYyNDQ2LCA2MjQ1MCwgCi0gICAgNjI0NTQsIDYyNDU4LCA2MjQ2MiwgNjI0NjYsIDYyNDcwLCA2MjQ3NCwgNjI0NzgsIDYyNDgyLCA2MjQ4NiwgNjI0OTAsIAotICAgIDYyNDk0LCA2MjQ5OCwgNjI1MDIsIDYyNTA2LCA2MjUxMCwgNjI1MTQsIDYyNTE4LCA2MjUyMiwgNjI1MjYsIDYyNTMwLCAKLSAgICA2MjUzNCwgNjI1MzgsIDYyNTQyLCA2MjU0NiwgNjI1NTAsIDYyNTU0LCA2MjU1OCwgNjI1NjIsIDYyNTY2LCA2MjU3MCwgCi0gICAgNjI1NzQsIDYyNTc4LCA2MjU4MiwgNjI1ODYsIDYyNTkwLCA2MjU5NCwgNjI1OTgsIDYyNjAyLCA2MjYwNiwgNjI2MTAsIAotICAgIDYyNjE0LCA2MjYxOCwgNjI2MjIsIDYyNjI2LCA2MjYzMCwgNjI2MzQsIDYyNjM4LCA2MjY0MiwgNjI2NDYsIDYyNjUwLCAKLSAgICA2MjY1NCwgNjI2NTgsIDYyNjYyLCA2MjY2NiwgNjI2NzAsIDYyNjc0LCA2MjY3OCwgNjI2ODIsIDYyNjg2LCA2MjY5MCwgCi0gICAgNjI2OTQsIDYyNjk4LCA2MjcwMiwgNjI3MDYsIDYyNzEwLCA2MjcxNCwgNjI3MTgsIDYyNzIyLCA2MjcyNiwgNjI3MzAsIAotICAgIDYyNzM0LCA2MjczOCwgNjI3NDIsIDYyNzQ2LCA2Mjc1MCwgNjI3NTQsIDYyNzU4LCA2Mjc2MiwgNjI3NjYsIDYyNzcwLCAKLSAgICA2Mjc3NCwgNjI3NzgsIDYyNzgyLCA2Mjc4NiwgNjI3OTAsIDYyNzk0LCA2Mjc5OCwgNjI4MDIsIDYyODA2LCA2MjgxMCwgCi0gICAgNjI4MTQsIDYyODE4LCA2MjgyMiwgNjI4MjYsIDYyODMwLCA2MjgzNCwgNjI4MzgsIDYyODQyLCA2Mjg0NiwgNjI4NTAsIAotICAgIDYyODU0LCA2Mjg1OCwgNjI4NjIsIDYyODY1LCA2Mjg2OSwgNjI4NzMsIDYyODc3LCA2Mjg4MSwgNjI4ODUsIDYyODg5LCAKLSAgICA2Mjg5MywgNjI4OTcsIDYyOTAxLCA2MjkwNSwgNjI5MDksIDYyOTEzLCA2MjkxNywgNjI5MjEsIDYyOTI1LCA2MjkyOSwgCi0gICAgNjI5MzMsIDYyOTM3LCA2Mjk0MSwgNjI5NDUsIDYyOTQ5LCA2Mjk1MywgNjI5NTcsIDYyOTYxLCA2Mjk2NSwgNjI5NjksIAotICAgIDYyOTczLCA2Mjk3NywgNjI5ODEsIDYyOTg1LCA2Mjk4OSwgNjI5OTMsIDYyOTk3LCA2MzAwMSwgNjMwMDUsIDYzMDA5LCAKLSAgICA2MzAxMywgNjMwMTcsIDYzMDIxLCA2MzAyNSwgNjMwMjksIDYzMDMzLCA2MzAzNywgNjMwNDEsIDYzMDQ1LCA2MzA0OSwgCi0gICAgNjMwNTMsIDYzMDU3LCA2MzA2MSwgNjMwNjUsIDYzMDY5LCA2MzA3MywgNjMwNzcsIDYzMDgxLCA2MzA4NSwgNjMwODksIAotICAgIDYzMDkzLCA2MzA5NywgNjMxMDEsIDYzMTA1LCA2MzEwOSwgNjMxMTMsIDYzMTE3LCA2MzEyMSwgNjMxMjUsIDYzMTI5LCAKLSAgICA2MzEzMywgNjMxMzcsIDYzMTQxLCA2MzE0NSwgNjMxNDksIDYzMTUzLCA2MzE1NywgNjMxNjEsIDYzMTY1LCA2MzE2OSwgCi0gICAgNjMxNzMsIDYzMTc3LCA2MzE4MSwgNjMxODUsIDYzMTg5LCA2MzE5MywgNjMxOTcsIDYzMjAxLCA2MzIwNSwgNjMyMDksIAotICAgIDYzMjEzLCA2MzIxNywgNjMyMjEsIDYzMjI1LCA2MzIyOSwgNjMyMzMsIDYzMjM3LCA2MzI0MSwgNjMyNDUsIDYzMjQ5LCAKLSAgICA2MzI1MywgNjMyNTcsIDYzMjYxLCA2MzI2NSwgNjMyNjksIDYzMjczLCA2MzI3NywgNjMyODEsIDYzMjg1LCA2MzI4OSwgCi0gICAgNjMyOTMsIDYzMjk3LCA2MzMwMSwgNjMzMDUsIDYzMzA5LCA2MzMxMywgNjMzMTcsIDYzMzIxLCA2MzMyNSwgNjMzMjksIAotICAgIDYzMzMzLCA2MzMzNywgNjMzNDEsIDYzMzQ1LCA2MzM0OSwgNjMzNTMsIDYzMzU3LCA2MzM2MSwgNjMzNjUsIDYzMzY5LCAKLSAgICA2MzM3MywgNjMzNzcsIDYzMzgxLCA2MzM4NSwgNjMzODksIDYzMzkzLCA2MzM5NywgNjM0MDEsIDYzNDA1LCA2MzQwOSwgCi0gICAgNjM0MTMsIDYzNDE3LCA2MzQyMSwgNjM0MjUsIDYzNDI5LCA2MzQzMywgNjM0MzcsIDYzNDQxLCA2MzQ0NSwgNjM0NDksIAotICAgIDYzNDUzLCA2MzQ1NywgNjM0NjEsIDYzNDY1LCA2MzQ2OSwgNjM0NzMsIDYzNDc3LCA2MzQ4MSwgNjM0ODUsIDYzNDg5LCAKLSAgICA2MzQ5MywgNjM0OTcsIDYzNTAxLCA2MzUwNSwgNjM1MDksIDYzNTEzLCA2MzUxNywgNjM1MjEsIDYzNTI1LCA2MzUyOSwgCi0gICAgNjM1MzMsIDYzNTM3LCA2MzU0MSwgNjM1NDUsIDYzNTQ5LCA2MzU1MywgNjM1NTcsIDYzNTYxLCA2MzU2NSwgNjM1NjksIAotICAgIDYzNTczLCA2MzU3NywgNjM1ODEsIDYzNTg1LCA2MzU4OSwgNjM1OTMsIDYzNTk3LCA2MzYwMSwgNjM2MDUsIDYzNjA5LCAKLSAgICA2MzYxMywgNjM2MTcsIDYzNjIxLCA2MzYyNSwgNjM2MjksIDYzNjMzLCA2MzYzNywgNjM2NDEsIDYzNjQ1LCAwLCAwLCAwLCAKLSAgICA2MzY0OSwgNjM2NTMsIDYzNjU3LCA2MzY2MSwgNjM2NjUsIDYzNjY5LCA2MzY3MywgNjM2NzcsIDYzNjgxLCA2MzY4NSwgCi0gICAgNjM2ODksIDYzNjkzLCA2MzY5NywgNjM3MDEsIDYzNzA1LCA2MzcwOSwgNjM3MTMsIDYzNzE3LCA2MzcyMSwgNjM3MjUsIAotICAgIDYzNzI5LCA2MzczMywgNjM3MzcsIDYzNzQxLCA2Mzc0NSwgNjM3NDksIDYzNzUzLCA2Mzc1NywgNjM3NjEsIDYzNzY1LCAKLSAgICA2Mzc2OSwgNjM3NzMsIDYzNzc3LCA2Mzc4MSwgNjM3ODUsIDYzNzg5LCA2Mzc5MywgNjM3OTcsIDYzODAxLCA2MzgwNSwgCi0gICAgNjM4MDksIDYzODEzLCA2MzgxNywgNjM4MjEsIDYzODI1LCA2MzgyOSwgNjM4MzMsIDYzODM3LCA2Mzg0MSwgNjM4NDUsIAotICAgIDYzODQ5LCA2Mzg1MywgNjM4NTcsIDYzODYxLCA2Mzg2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM4NjksIDYzODczLCAKLSAgICA2Mzg3NywgNjM4ODEsIDYzODg1LCA2Mzg4OSwgNjM4OTMsIDYzODk3LCA2MzkwMSwgNjM5MDUsIDYzOTA5LCA2MzkxMywgCi0gICAgNjM5MTcsIDYzOTIxLCA2MzkyNSwgNjM5MjksIDYzOTMzLCA2MzkzNywgNjM5NDEsIDYzOTQ1LCA2Mzk0OSwgNjM5NTMsIAotICAgIDYzOTU3LCA2Mzk2MSwgNjM5NjUsIDYzOTY5LCA2Mzk3MywgNjM5NzcsIDYzOTgxLCA2Mzk4NSwgNjM5ODksIDYzOTkzLCAKLSAgICA2Mzk5NywgNjQwMDEsIDY0MDA1LCA2NDAwOSwgNjQwMTMsIDY0MDE2LCA2NDAyMCwgNjQwMjQsIDY0MDI4LCA2NDAzMiwgCi0gICAgNjQwMzYsIDY0MDQwLCA2NDA0NCwgNjQwNDgsIDY0MDUyLCA2NDA1NiwgNjQwNjAsIDY0MDY0LCA2NDA2OCwgNjQwNzIsIAotICAgIDY0MDc2LCA2NDA4MCwgNjQwODQsIDY0MDg4LCA2NDA5MiwgNjQwOTYsIDY0MTAwLCA2NDEwNCwgNjQxMDgsIDY0MTEyLCAKLSAgICA2NDExNiwgNjQxMjAsIDY0MTI0LCA2NDEyOCwgNjQxMzIsIDY0MTM2LCA2NDE0MCwgNjQxNDQsIDY0MTQ4LCA2NDE1MiwgCi0gICAgNjQxNTYsIDY0MTYwLCA2NDE2MywgNjQxNjcsIDY0MTcxLCA2NDE3NCwgNjQxNzgsIDY0MTgyLCA2NDE4NiwgNjQxODksIAotICAgIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIDY0MjI5LCAKLSAgICA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDgsIDY0MjUyLCA2NDI1NiwgNjQyNjAsIDY0MjY0LCA2NDI2OCwgCi0gICAgNjQyNzIsIDY0Mjc2LCA2NDI4MCwgNjQyODQsIDY0Mjg3LCA2NDI5MCwgNjQyOTQsIDY0Mjk4LCA2NDMwMiwgNjQzMDUsIAorICAgIDYyODcyLCA2Mjg4MSwgNjI4OTAsIDYyOTAxLCA2MjkwOCwgNjI5MTMsIDYyOTE4LCA2MjkyNSwgNjI5MzIsIDYyOTM4LCAKKyAgICA2Mjk0MywgNjI5NDgsIDYyOTUzLCA2Mjk1OCwgNjI5NjUsIDYyOTcwLCA2Mjk3NSwgNjI5ODAsIDYyOTkxLCA2Mjk5NiwgCisgICAgNjMwMDEsIDYzMDA4LCA2MzAxMywgNjMwMjAsIDYzMDI1LCA2MzAzMCwgNjMwMzcsIDYzMDQ0LCA2MzA1MSwgNjMwNjAsIAorICAgIDYzMDY5LCA2MzA3NCwgNjMwNzksIDYzMDg0LCA2MzA5MSwgNjMwOTYsIDYzMTA2LCA2MzExMywgNjMxMTgsIDYzMTIzLCAKKyAgICA2MzEyOCwgNjMxMzMsIDYzMTM4LCA2MzE0MywgNjMxNTIsIDYzMTU5LCA2MzE2NiwgNjMxNzEsIDYzMTc4LCA2MzE4MywgCisgICAgNjMxOTAsIDYzMTk5LCA2MzIxMCwgNjMyMTUsIDYzMjI0LCA2MzIyOSwgNjMyMzYsIDYzMjQ1LCA2MzI1NCwgNjMyNTksIAorICAgIDYzMjY0LCA2MzI3MSwgNjMyNzcsIDYzMjg0LCA2MzI5MSwgNjMyOTUsIDYzMjk5LCA2MzMwMiwgNjMzMDYsIDYzMzEwLCAKKyAgICA2MzMxNCwgNjMzMTgsIDYzMzIyLCA2MzMyNiwgNjMzMzAsIDYzMzMzLCA2MzMzNywgNjMzNDEsIDYzMzQ1LCA2MzM0OSwgCisgICAgNjMzNTMsIDYzMzU3LCA2MzM2MCwgNjMzNjQsIDYzMzY4LCA2MzM3MSwgNjMzNzUsIDYzMzc5LCA2MzM4MywgNjMzODcsIAorICAgIDYzMzkxLCA2MzM5NSwgNjMzOTksIDYzNDAzLCA2MzQwNywgNjM0MTEsIDYzNDE1LCA2MzQxOSwgNjM0MjMsIDYzNDI3LCAKKyAgICA2MzQzMSwgNjM0MzUsIDYzNDM5LCA2MzQ0MywgNjM0NDcsIDYzNDUxLCA2MzQ1NSwgNjM0NTksIDYzNDYzLCA2MzQ2NywgCisgICAgNjM0NzEsIDYzNDc1LCA2MzQ3OSwgNjM0ODMsIDYzNDg3LCA2MzQ5MSwgNjM0OTUsIDYzNDk5LCA2MzUwMywgNjM1MDcsIAorICAgIDYzNTExLCA2MzUxNSwgNjM1MTksIDYzNTIzLCA2MzUyNywgNjM1MzEsIDYzNTM1LCA2MzUzOSwgNjM1NDMsIDYzNTQ3LCAKKyAgICA2MzU1MCwgNjM1NTQsIDYzNTU4LCA2MzU2MiwgNjM1NjYsIDYzNTcwLCA2MzU3NCwgNjM1NzgsIDYzNTgyLCA2MzU4NiwgCisgICAgNjM1OTAsIDYzNTk0LCA2MzU5OCwgNjM2MDIsIDYzNjA2LCA2MzYxMCwgNjM2MTQsIDYzNjE4LCA2MzYyMiwgNjM2MjYsIAorICAgIDYzNjMwLCA2MzYzNCwgNjM2MzgsIDYzNjQyLCA2MzY0NiwgNjM2NTAsIDYzNjU0LCA2MzY1OCwgNjM2NjIsIDYzNjY2LCAKKyAgICA2MzY3MCwgNjM2NzQsIDYzNjc4LCA2MzY4MiwgNjM2ODYsIDYzNjkwLCA2MzY5NCwgNjM2OTgsIDYzNzAyLCA2MzcwNiwgCisgICAgNjM3MTAsIDYzNzE0LCA2MzcxOCwgNjM3MjIsIDYzNzI2LCA2MzczMCwgNjM3MzQsIDYzNzM4LCA2Mzc0MiwgNjM3NDYsIAorICAgIDYzNzUwLCA2Mzc1NCwgNjM3NTgsIDYzNzYyLCA2Mzc2NiwgNjM3NzAsIDYzNzc0LCA2Mzc3OCwgNjM3ODIsIDYzNzg2LCAKKyAgICA2Mzc5MCwgNjM3OTQsIDYzNzk4LCA2MzgwMiwgNjM4MDYsIDYzODEwLCA2MzgxNCwgNjM4MTgsIDYzODIyLCA2MzgyNiwgCisgICAgNjM4MzAsIDYzODM0LCA2MzgzOCwgNjM4NDIsIDYzODQ2LCA2Mzg1MCwgNjM4NTQsIDYzODU4LCA2Mzg2MiwgNjM4NjYsIAorICAgIDYzODcwLCA2Mzg3NCwgNjM4NzgsIDYzODgyLCA2Mzg4NiwgNjM4OTAsIDYzODk0LCA2Mzg5OCwgNjM5MDIsIDYzOTA2LCAKKyAgICA2MzkxMCwgNjM5MTQsIDYzOTE4LCA2MzkyMiwgNjM5MjYsIDYzOTMwLCA2MzkzNCwgNjM5MzgsIDYzOTQyLCA2Mzk0NiwgCisgICAgNjM5NTAsIDYzOTU0LCA2Mzk1OCwgNjM5NjIsIDYzOTY2LCA2Mzk3MCwgNjM5NzQsIDYzOTc4LCA2Mzk4MiwgNjM5ODYsIAorICAgIDYzOTkwLCA2Mzk5NCwgNjM5OTgsIDY0MDAyLCA2NDAwNiwgNjQwMTAsIDY0MDE0LCA2NDAxOCwgNjQwMjEsIDY0MDI1LCAKKyAgICA2NDAyOSwgNjQwMzMsIDY0MDM3LCA2NDA0MSwgNjQwNDUsIDY0MDQ5LCA2NDA1MywgNjQwNTcsIDY0MDYxLCA2NDA2NSwgCisgICAgNjQwNjksIDY0MDczLCA2NDA3NywgNjQwODEsIDY0MDg1LCA2NDA4OSwgNjQwOTMsIDY0MDk3LCA2NDEwMSwgNjQxMDUsIAorICAgIDY0MTA5LCA2NDExMywgNjQxMTcsIDY0MTIxLCA2NDEyNSwgNjQxMjksIDY0MTMzLCA2NDEzNywgNjQxNDEsIDY0MTQ1LCAKKyAgICA2NDE0OSwgNjQxNTMsIDY0MTU3LCA2NDE2MSwgNjQxNjUsIDY0MTY5LCA2NDE3MywgNjQxNzcsIDY0MTgxLCA2NDE4NSwgCisgICAgNjQxODksIDY0MTkzLCA2NDE5NywgNjQyMDEsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE3LCA2NDIyMSwgNjQyMjUsIAorICAgIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIDY0MjUzLCA2NDI1NywgNjQyNjEsIDY0MjY1LCAKKyAgICA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCA2NDI5MywgNjQyOTcsIDY0MzAxLCA2NDMwNSwgCiAgICAgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgNjQzMzMsIDY0MzM3LCA2NDM0MSwgNjQzNDUsIAogICAgIDY0MzQ5LCA2NDM1MywgNjQzNTcsIDY0MzYxLCA2NDM2NSwgNjQzNjksIDY0MzczLCA2NDM3NywgNjQzODEsIDY0Mzg1LCAKICAgICA2NDM4OSwgNjQzOTMsIDY0Mzk3LCA2NDQwMSwgNjQ0MDUsIDY0NDA5LCA2NDQxMywgNjQ0MTcsIDY0NDIxLCA2NDQyNSwgCi0gICAgNjQ0MjksIDY0NDMzLCA2NDQzNywgNjQ0NDEsIDY0NDQ1LCA2NDQ0OSwgNjQ0NTMsIDY0NDU3LCA2NDQ2MCwgNjQ0NjQsIAotICAgIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIDY0NDkyLCA2NDQ5NiwgNjQ1MDAsIDY0NTA0LCAKKyAgICA2NDQyOSwgNjQ0MzMsIDY0NDM3LCA2NDQ0MSwgNjQ0NDUsIDY0NDQ5LCA2NDQ1MywgNjQ0NTcsIDY0NDYxLCA2NDQ2NSwgCisgICAgNjQ0NjksIDY0NDczLCA2NDQ3NywgNjQ0ODEsIDY0NDg0LCA2NDQ4OCwgNjQ0OTIsIDY0NDk2LCA2NDUwMCwgNjQ1MDQsIAogICAgIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIDY0NTMyLCA2NDUzNiwgNjQ1NDAsIDY0NTQ0LCAKICAgICA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCA2NDU3MiwgNjQ1NzYsIDY0NTgwLCA2NDU4NCwgCi0gICAgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwNywgNjQ2MTEsIDY0NjE1LCA2NDYxOSwgNjQ2MjMsIAotICAgIDY0NjI3LCA2NDYzMSwgNjQ2MzUsIDY0NjM5LCA2NDY0MywgNjQ2NDcsIDY0NjUxLCA2NDY1NSwgNjQ2NTksIDY0NjYzLCAKLSAgICA2NDY2NywgNjQ2NzEsIDY0Njc0LCA2NDY3OCwgNjQ2ODIsIDY0Njg2LCA2NDY5MCwgNjQ2OTQsIDY0Njk4LCA2NDcwMiwgCi0gICAgNjQ3MDYsIDY0NzEwLCA2NDcxNCwgNjQ3MTgsIDY0NzIyLCA2NDcyNiwgNjQ3MzAsIDY0NzM0LCA2NDczOCwgNjQ3NDIsIAotICAgIDY0NzQ2LCA2NDc1MCwgNjQ3NTQsIDY0NzU4LCA2NDc2MSwgNjQ3NjUsIDY0NzY5LCA2NDc3MywgNjQ3NzcsIDY0NzgxLCAKLSAgICA2NDc4NSwgNjQ3ODksIDY0NzkzLCA2NDc5NywgNjQ4MDEsIDY0ODA1LCA2NDgwOSwgNjQ4MTMsIDY0ODE3LCA2NDgyMSwgCi0gICAgNjQ4MjUsIDY0ODI5LCA2NDgzMywgNjQ4MzcsIDY0ODQxLCA2NDg0NSwgNjQ4NDksIDY0ODUzLCA2NDg1NywgNjQ4NjEsIAotICAgIDY0ODY1LCA2NDg2OSwgNjQ4NzMsIDY0ODc3LCA2NDg4MSwgNjQ4ODUsIDY0ODg5LCA2NDg5MywgNjQ4OTcsIDY0OTAxLCAKLSAgICA2NDkwNSwgNjQ5MDksIDY0OTEzLCA2NDkxNywgNjQ5MjEsIDY0OTI1LCA2NDkyOSwgNjQ5MzMsIDY0OTM2LCA2NDk0MSwgCi0gICAgNjQ5NDUsIDY0OTUxLCA2NDk1NiwgNjQ5NjIsIDY0OTY2LCA2NDk3MCwgNjQ5NzQsIDY0OTc4LCA2NDk4MiwgNjQ5ODYsIAotICAgIDY0OTkwLCA2NDk5NCwgNjQ5OTgsIDY1MDAyLCA2NTAwNiwgNjUwMTAsIDY1MDE0LCA2NTAxOCwgNjUwMjEsIDY1MDI0LCAKLSAgICA2NTAyNywgNjUwMzAsIDY1MDMzLCA2NTAzNiwgNjUwMzksIDY1MDQyLCA2NTA0NSwgNjUwNTAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1MDU2LCA2NTA2MSwgNjUwNjYsIDY1MDcxLCAKLSAgICA2NTA3NiwgNjUwODIsIDY1MDg4LCA2NTA5MywgNjUwOTgsIDY1MTAzLCA2NTEwOCwgNjUxMTUsIDY1MTIyLCA2NTEyOSwgCi0gICAgNjUxMzYsIDY1MTQzLCA2NTE1MCwgNjUxNjAsIDY1MTcwLCA2NTE3NywgNjUxODQsIDY1MTkwLCA2NTE5NiwgNjUyMDIsIAotICAgIDY1MjA4LCA2NTIxNywgNjUyMjYsIDY1MjMzLCA2NTI0MCwgNjUyNTEsIDY1MjYyLCA2NTI2NywgMCwgMCwgNjUyNzIsIAotICAgIDY1Mjc5LCA2NTI4NiwgNjUyOTMsIDY1MzAwLCA2NTMwNywgNjUzMTQsIDY1MzIwLCA2NTMyNiwgNjUzMzIsIDY1MzM4LCAKLSAgICA2NTM0NSwgNjUzNTIsIDY1MzU3LCA2NTM2MSwgNjUzNjgsIDY1Mzc1LCA2NTM4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTcsIDY1NDAwLCA2NTQwNSwgNjU0MTAsIDY1NDE1LCA2NTQyMCwgNjU0MjUsIAotICAgIDY1NDMwLCA2NTQzNSwgNjU0NDAsIDY1NDQ1LCA2NTQ1MCwgNjU0NTksIDY1NDY4LCA2NTQ3MywgNjU0NzgsIDY1NDgzLCAKLSAgICA2NTQ4OCwgNjU0OTMsIDY1NDk4LCA2NTUwMywgNjU1MDgsIDY1NTEzLCA2NTUxOCwgNjU1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIDY0NjEyLCA2NDYxNiwgNjQ2MjAsIDY0NjI0LCAKKyAgICA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCA2NDY1MiwgNjQ2NTYsIDY0NjYwLCA2NDY2NCwgCisgICAgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgNjQ2OTIsIDY0Njk2LCA2NDcwMCwgNjQ3MDQsIAorICAgIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIDY0NzMyLCA2NDczNiwgNjQ3NDAsIDY0NzQ0LCAKKyAgICA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCA2NDc3MiwgNjQ3NzYsIDY0NzgwLCA2NDc4NCwgCisgICAgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgNjQ4MTIsIDY0ODE2LCA2NDgyMCwgNjQ4MjQsIAorICAgIDY0ODI4LCA2NDgzMiwgNjQ4MzYsIDY0ODQwLCA2NDg0MywgNjQ4NDcsIDY0ODUxLCA2NDg1NSwgNjQ4NTksIDY0ODYzLCAKKyAgICA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCA2NDg5MSwgNjQ4OTUsIDY0ODk5LCA2NDkwMywgCisgICAgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgNjQ5MzEsIDY0OTM1LCA2NDkzOSwgNjQ5NDMsIAorICAgIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIDY0OTcxLCA2NDk3NSwgNjQ5NzksIDY0OTgzLCAKKyAgICA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCA2NTAxMSwgNjUwMTUsIDY1MDE5LCA2NTAyMywgCisgICAgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgNjUwNTEsIDY1MDU1LCA2NTA1OSwgNjUwNjMsIAorICAgIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIDY1MDkxLCA2NTA5NSwgNjUwOTksIDY1MTAzLCAKKyAgICA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCA2NTEzMSwgNjUxMzUsIDY1MTM5LCA2NTE0MywgCisgICAgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgNjUxNzEsIDY1MTc1LCA2NTE3OSwgNjUxODMsIAorICAgIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjExLCA2NTIxNSwgNjUyMTksIDY1MjIzLCAKKyAgICA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCA2NTI1MSwgNjUyNTUsIDY1MjU5LCA2NTI2MywgCisgICAgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgNjUyOTEsIDY1Mjk1LCA2NTI5OSwgNjUzMDMsIAorICAgIDY1MzA3LCA2NTMxMSwgNjUzMTUsIDY1MzE5LCA2NTMyMywgNjUzMjcsIDY1MzMxLCA2NTMzNSwgNjUzMzgsIDY1MzQyLCAKKyAgICA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCA2NTM3MCwgNjUzNzQsIDY1Mzc4LCA2NTM4MiwgCisgICAgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgNjU0MTAsIDY1NDE0LCA2NTQxOCwgNjU0MjIsIAorICAgIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIDY1NDUwLCA2NTQ1NCwgNjU0NTgsIDY1NDYyLCAKKyAgICA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCA2NTQ5MCwgNjU0OTQsIDY1NDk4LCA2NTUwMiwgCisgICAgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgNjU1MzAsIDY1NTM0LCA2NTUzOCwgNjU1NDIsIAorICAgIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIDY1NTcwLCA2NTU3NCwgNjU1NzgsIDY1NTgyLCAKKyAgICA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCA2NTYxMCwgNjU2MTQsIDY1NjE4LCA2NTYyMiwgCisgICAgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgNjU2NTAsIDY1NjU0LCA2NTY1OCwgNjU2NjIsIAorICAgIDY1NjY2LCA2NTY3MCwgNjU2NzQsIDY1Njc4LCA2NTY4MiwgNjU2ODYsIDY1NjkwLCA2NTY5NCwgNjU2OTgsIDY1NzAyLCAKKyAgICA2NTcwNiwgNjU3MTAsIDY1NzE0LCA2NTcxOCwgNjU3MjIsIDY1NzI2LCA2NTczMCwgNjU3MzQsIDY1NzM4LCA2NTc0MiwgCisgICAgNjU3NDYsIDY1NzUwLCA2NTc1NCwgNjU3NTgsIDY1NzYyLCA2NTc2NiwgNjU3NzAsIDY1Nzc0LCA2NTc3OCwgNjU3ODIsIAorICAgIDY1Nzg2LCA2NTc5MCwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIDY1ODA5LCA2NTgxMywgNjU4MTcsIDY1ODIxLCAKKyAgICA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCA2NTg0OSwgNjU4NTMsIDY1ODU3LCA2NTg2MSwgCisgICAgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgNjU4ODksIDY1ODkzLCA2NTg5NywgNjU5MDEsIAorICAgIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIDY1OTI5LCA2NTkzMywgNjU5MzcsIDY1OTQxLCAKKyAgICA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCA2NTk2OSwgNjU5NzMsIDY1OTc3LCA2NTk4MSwgCisgICAgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgNjYwMDksIDY2MDEzLCA2NjAxNywgNjYwMjEsIAorICAgIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIDY2MDQ5LCA2NjA1MywgNjYwNTcsIDY2MDYxLCAKKyAgICA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCA2NjA4OSwgNjYwOTMsIDY2MDk3LCA2NjEwMSwgCisgICAgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgNjYxMjksIDY2MTMzLCA2NjEzNywgNjYxNDEsIAorICAgIDY2MTQ1LCA2NjE0OSwgNjYxNTMsIDY2MTU3LCA2NjE2MSwgNjYxNjUsIDY2MTY5LCA2NjE3MywgNjYxNzcsIDY2MTgxLCAKKyAgICA2NjE4NSwgNjYxODksIDY2MTkzLCA2NjE5NywgNjYyMDEsIDY2MjA1LCA2NjIwOSwgNjYyMTMsIDY2MjE3LCA2NjIyMSwgCisgICAgNjYyMjUsIDY2MjI5LCA2NjIzMywgNjYyMzcsIDY2MjQxLCA2NjI0NSwgNjYyNDksIDY2MjUzLCA2NjI1NywgNjYyNjEsIAorICAgIDY2MjY1LCA2NjI2OSwgNjYyNzMsIDY2Mjc3LCA2NjI4MSwgNjYyODUsIDY2Mjg5LCA2NjI5MywgNjYyOTcsIDY2MzAxLCAKKyAgICA2NjMwNSwgNjYzMDksIDY2MzEzLCA2NjMxNywgNjYzMjEsIDY2MzI1LCA2NjMyOSwgNjYzMzMsIDY2MzM3LCA2NjM0MSwgCisgICAgNjYzNDUsIDY2MzQ5LCA2NjM1MywgNjYzNTcsIDY2MzYxLCA2NjM2NSwgNjYzNjksIDY2MzczLCA2NjM3NywgNjYzODEsIAorICAgIDY2Mzg1LCA2NjM4OSwgNjYzOTMsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIDY2NDA4LCA2NjQxMiwgNjY0MTYsIDY2NDIwLCAKKyAgICA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCA2NjQ0OCwgNjY0NTIsIDY2NDU2LCA2NjQ2MCwgCisgICAgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgNjY0ODgsIDY2NDkyLCA2NjQ5NiwgNjY1MDAsIAorICAgIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIDY2NTI4LCA2NjUzMiwgNjY1MzYsIDY2NTQwLCAKKyAgICA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCA2NjU2OCwgNjY1NzIsIDY2NTc2LCA2NjU4MCwgCisgICAgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NjAwLCA2NjYwNCwgNjY2MDgsIDY2NjEyLCA2NjYxNiwgNjY2MjAsIAorICAgIDY2NjI0LCA2NjYyOCwgNjY2MzIsIDY2NjM2LCA2NjY0MCwgNjY2NDQsIDY2NjQ4LCA2NjY1MiwgNjY2NTYsIDY2NjYwLCAKKyAgICA2NjY2NCwgNjY2NjgsIDY2NjcyLCA2NjY3NiwgNjY2ODAsIDY2Njg0LCA2NjY4OCwgNjY2OTIsIDY2Njk2LCA2NjcwMCwgCisgICAgNjY3MDQsIDY2NzA4LCA2NjcxMiwgNjY3MTYsIDY2NzIwLCA2NjcyNCwgNjY3MjgsIDY2NzMyLCA2NjczNiwgNjY3NDAsIAorICAgIDY2NzQ0LCA2Njc0OCwgNjY3NTIsIDY2NzU2LCA2Njc2MCwgNjY3NjQsIDY2NzY4LCA2Njc3MiwgNjY3NzYsIDY2NzgwLCAKKyAgICA2Njc4NCwgNjY3ODgsIDY2NzkyLCA2Njc5NiwgNjY4MDAsIDY2ODA0LCA2NjgwOCwgNjY4MTIsIDY2ODE2LCA2NjgyMCwgCisgICAgNjY4MjQsIDY2ODI4LCA2NjgzMiwgNjY4MzYsIDY2ODQwLCA2Njg0NCwgNjY4NDgsIDY2ODUyLCA2Njg1NiwgNjY4NjAsIAorICAgIDY2ODY0LCA2Njg2OCwgNjY4NzIsIDY2ODc2LCA2Njg4MCwgNjY4ODQsIDY2ODg4LCA2Njg5MiwgNjY4OTYsIDY2OTAwLCAKKyAgICA2NjkwNCwgNjY5MDgsIDY2OTEyLCA2NjkxNiwgNjY5MjAsIDY2OTI0LCA2NjkyOCwgNjY5MzIsIDY2OTM2LCA2Njk0MCwgCisgICAgNjY5NDQsIDY2OTQ4LCA2Njk1MiwgNjY5NTYsIDY2OTYwLCA2Njk2NCwgNjY5NjgsIDY2OTcyLCA2Njk3NiwgNjY5ODAsIAorICAgIDY2OTg0LCA2Njk4OCwgNjY5OTIsIDY2OTk2LCA2NzAwMCwgNjcwMDQsIDY3MDA4LCA2NzAxMiwgNjcwMTYsIDY3MDIwLCAKKyAgICA2NzAyNCwgNjcwMjgsIDY3MDMyLCA2NzAzNiwgNjcwNDAsIDY3MDQ0LCA2NzA0OCwgNjcwNTIsIDY3MDU2LCA2NzA2MCwgCisgICAgNjcwNjQsIDY3MDY4LCA2NzA3MiwgNjcwNzYsIDY3MDgwLCA2NzA4NCwgNjcwODgsIDY3MDkyLCA2NzA5NiwgNjcxMDAsIAorICAgIDY3MTA0LCA2NzEwOCwgNjcxMTIsIDY3MTE2LCA2NzEyMCwgNjcxMjQsIDY3MTI4LCA2NzEzMiwgNjcxMzYsIDY3MTQwLCAKKyAgICA2NzE0NCwgNjcxNDgsIDY3MTUyLCA2NzE1NSwgNjcxNTksIDY3MTYzLCA2NzE2NywgNjcxNzEsIDY3MTc1LCA2NzE3OSwgCisgICAgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMywgNjcyMDcsIDY3MjExLCA2NzIxNSwgNjcyMTksIAorICAgIDY3MjIzLCA2NzIyNywgNjcyMzEsIDY3MjM1LCA2NzIzOSwgNjcyNDMsIDY3MjQ3LCA2NzI1MSwgNjcyNTUsIDY3MjU5LCAKKyAgICA2NzI2MywgNjcyNjcsIDY3MjcxLCA2NzI3NSwgNjcyNzksIDY3MjgzLCA2NzI4NywgNjcyOTEsIDY3Mjk1LCA2NzI5OSwgCisgICAgNjczMDMsIDY3MzA3LCA2NzMxMSwgNjczMTUsIDY3MzE5LCA2NzMyMywgNjczMjcsIDY3MzMxLCA2NzMzNSwgNjczMzksIAorICAgIDY3MzQzLCA2NzM0NywgNjczNTEsIDY3MzU1LCA2NzM1OSwgNjczNjMsIDY3MzY3LCA2NzM3MSwgNjczNzUsIDY3Mzc5LCAKKyAgICA2NzM4MywgNjczODcsIDY3MzkxLCA2NzM5NSwgNjczOTksIDY3NDAzLCA2NzQwNywgNjc0MTEsIDY3NDE1LCA2NzQxOSwgCisgICAgNjc0MjMsIDY3NDI3LCA2NzQzMSwgNjc0MzUsIDY3NDM5LCA2NzQ0MywgNjc0NDcsIDY3NDUxLCA2NzQ1NSwgNjc0NTksIAorICAgIDY3NDYzLCA2NzQ2NywgNjc0NzEsIDY3NDc1LCA2NzQ3OSwgNjc0ODMsIDY3NDg3LCA2NzQ5MSwgNjc0OTUsIDY3NDk5LCAKKyAgICA2NzUwMywgNjc1MDcsIDY3NTExLCA2NzUxNSwgNjc1MTksIDY3NTIzLCA2NzUyNywgNjc1MzEsIDY3NTM1LCA2NzUzOSwgCisgICAgNjc1NDMsIDY3NTQ3LCA2NzU1MSwgNjc1NTUsIDY3NTU5LCA2NzU2MywgNjc1NjcsIDY3NTcxLCA2NzU3NSwgNjc1NzksIAorICAgIDY3NTgzLCA2NzU4NywgNjc1OTEsIDY3NTk1LCA2NzU5OSwgNjc2MDMsIDY3NjA3LCA2NzYxMSwgNjc2MTUsIDY3NjE5LCAKKyAgICA2NzYyMywgNjc2MjcsIDY3NjMxLCA2NzYzNSwgNjc2MzksIDY3NjQzLCA2NzY0NywgNjc2NTEsIDY3NjU1LCA2NzY1OSwgCisgICAgNjc2NjMsIDY3NjY3LCA2NzY3MSwgNjc2NzUsIDY3Njc5LCA2NzY4MywgNjc2ODcsIDY3NjkxLCA2NzY5NSwgNjc2OTksIAorICAgIDY3NzAzLCA2NzcwNywgNjc3MTEsIDY3NzE1LCA2NzcxOSwgNjc3MjMsIDY3NzI3LCA2NzczMSwgNjc3MzUsIDY3NzM5LCAKKyAgICA2Nzc0MywgNjc3NDcsIDY3NzUxLCA2Nzc1NSwgNjc3NTksIDY3NzYzLCA2Nzc2NywgNjc3NzEsIDY3Nzc1LCA2Nzc3OSwgCisgICAgNjc3ODMsIDY3Nzg3LCA2Nzc5MSwgNjc3OTUsIDY3Nzk5LCA2NzgwMywgNjc4MDcsIDY3ODExLCA2NzgxNSwgNjc4MTksIAorICAgIDY3ODIzLCA2NzgyNywgNjc4MzEsIDY3ODM1LCA2NzgzOSwgNjc4NDMsIDY3ODQ3LCA2Nzg1MSwgNjc4NTUsIDY3ODU5LCAKKyAgICA2Nzg2MywgNjc4NjcsIDY3ODcxLCA2Nzg3NSwgNjc4NzksIDY3ODgzLCA2Nzg4NywgNjc4OTEsIDY3ODk1LCA2Nzg5OSwgCisgICAgNjc5MDMsIDY3OTA3LCA2NzkxMSwgNjc5MTUsIDY3OTE5LCA2NzkyMywgNjc5MjcsIDY3OTMxLCA2NzkzNSwgMCwgMCwgMCwgCisgICAgNjc5MzksIDY3OTQzLCA2Nzk0NywgNjc5NTEsIDY3OTU1LCA2Nzk1OSwgNjc5NjMsIDY3OTY3LCA2Nzk3MSwgNjc5NzUsIAorICAgIDY3OTc5LCA2Nzk4MywgNjc5ODcsIDY3OTkxLCA2Nzk5NSwgNjc5OTksIDY4MDAzLCA2ODAwNywgNjgwMTEsIDY4MDE1LCAKKyAgICA2ODAxOSwgNjgwMjMsIDY4MDI3LCA2ODAzMSwgNjgwMzUsIDY4MDM5LCA2ODA0MywgNjgwNDcsIDY4MDUxLCA2ODA1NSwgCisgICAgNjgwNTksIDY4MDYzLCA2ODA2NywgNjgwNzEsIDY4MDc1LCA2ODA3OSwgNjgwODMsIDY4MDg3LCA2ODA5MSwgNjgwOTUsIAorICAgIDY4MDk5LCA2ODEwMywgNjgxMDcsIDY4MTExLCA2ODExNSwgNjgxMTksIDY4MTIzLCA2ODEyNywgNjgxMzEsIDY4MTM1LCAKKyAgICA2ODEzOSwgNjgxNDMsIDY4MTQ3LCA2ODE1MSwgNjgxNTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4MTU5LCAKKyAgICA2ODE2NCwgNjgxNjgsIDY4MTczLCA2ODE3OCwgNjgxODMsIDY4MTg4LCA2ODE5MywgNjgxOTcsIDY4MjAyLCA2ODIwNywgCisgICAgNjgyMTIsIDY4MjE3LCA2ODIyMiwgNjgyMjcsIDY4MjMyLCA2ODIzNiwgNjgyNDAsIDY4MjQ1LCA2ODI1MCwgNjgyNTUsIAorICAgIDY4MjYwLCA2ODI2NSwgNjgyNjksIDY4Mjc0LCA2ODI3OSwgNjgyODQsIDY4Mjg5LCA2ODI5NCwgNjgyOTgsIDY4MzAzLCAKKyAgICA2ODMwNywgNjgzMTIsIDY4MzE2LCA2ODMyMSwgNjgzMjUsIDY4MzI5LCA2ODMzMywgNjgzMzgsIDY4MzQzLCA2ODM0OCwgCisgICAgNjgzNTYsIDY4MzY0LCA2ODM3MiwgNjgzODAsIDY4Mzg3LCA2ODM5NSwgNjg0MDEsIDY4NDA5LCA2ODQxMywgNjg0MTcsIAorICAgIDY4NDIxLCA2ODQyNSwgNjg0MjksIDY4NDMzLCA2ODQzNywgNjg0NDEsIDY4NDQ1LCA2ODQ0OSwgNjg0NTMsIDY4NDU3LCAKKyAgICA2ODQ2MSwgNjg0NjUsIDY4NDY5LCA2ODQ3MywgNjg0NzcsIDY4NDgxLCA2ODQ4NSwgNjg0ODksIDY4NDkzLCA2ODQ5NywgCisgICAgNjg1MDEsIDY4NTA1LCA2ODUwOSwgNjg1MTMsIDY4NTE3LCA2ODUyMSwgNjg1MjUsIDY4NTI5LCA2ODUzMywgNjg1MzcsIAorICAgIDY4NTQxLCA2ODU0NSwgNjg1NDksIDY4NTUzLCA2ODU1NiwgNjg1NjAsIDY4NTY0LCA2ODU2OCwgNjg1NzIsIDY4NTc2LCAKKyAgICA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCA2ODYwNCwgNjg2MDgsIDY4NjEyLCA2ODYxNiwgCisgICAgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgNjg2NDQsIDY4NjQ4LCA2ODY1MiwgNjg2NTYsIAorICAgIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIDY4Njg0LCA2ODY4OCwgNjg2OTIsIDY4Njk2LCAKKyAgICA2ODcwMCwgNjg3MDMsIDY4NzA3LCA2ODcxMSwgNjg3MTQsIDY4NzE4LCA2ODcyMiwgNjg3MjYsIDY4NzI5LCA2ODczMywgCisgICAgNjg3MzcsIDY4NzQxLCA2ODc0NSwgNjg3NDksIDY4NzUzLCA2ODc1NywgNjg3NjEsIDY4NzY1LCA2ODc2OSwgNjg3NzMsIAorICAgIDY4Nzc3LCA2ODc4MSwgNjg3ODUsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgNjg4MDgsIDY4ODEyLCAKKyAgICA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyNywgNjg4MzAsIDY4ODM0LCA2ODgzOCwgNjg4NDIsIDY4ODQ1LCA2ODg0OCwgCisgICAgNjg4NTIsIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIDY4ODgwLCA2ODg4NCwgNjg4ODgsIAorICAgIDY4ODkyLCA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCA2ODkyMCwgNjg5MjQsIDY4OTI4LCAKKyAgICA2ODkzMiwgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgNjg5NjAsIDY4OTY0LCA2ODk2OCwgCisgICAgNjg5NzIsIDY4OTc2LCA2ODk4MCwgNjg5ODQsIDY4OTg4LCA2ODk5MiwgNjg5OTYsIDY4OTk5LCA2OTAwMywgNjkwMDcsIAorICAgIDY5MDExLCA2OTAxNSwgNjkwMTksIDY5MDIzLCA2OTAyNywgNjkwMzEsIDY5MDM1LCA2OTAzOSwgNjkwNDMsIDY5MDQ3LCAKKyAgICA2OTA1MSwgNjkwNTUsIDY5MDU5LCA2OTA2MywgNjkwNjcsIDY5MDcxLCA2OTA3NSwgNjkwNzksIDY5MDgzLCA2OTA4NywgCisgICAgNjkwOTEsIDY5MDk1LCA2OTA5OSwgNjkxMDMsIDY5MTA3LCA2OTExMSwgNjkxMTUsIDY5MTE5LCA2OTEyMywgNjkxMjcsIAorICAgIDY5MTMxLCA2OTEzNSwgNjkxMzksIDY5MTQzLCA2OTE0NiwgNjkxNTAsIDY5MTU0LCA2OTE1OCwgNjkxNjIsIDY5MTY2LCAKKyAgICA2OTE3MCwgNjkxNzQsIDY5MTc4LCA2OTE4MiwgNjkxODYsIDY5MTkwLCA2OTE5NCwgNjkxOTgsIDY5MjAyLCA2OTIwNiwgCisgICAgNjkyMTAsIDY5MjEzLCA2OTIxNywgNjkyMjEsIDY5MjI1LCA2OTIyOSwgNjkyMzMsIDY5MjM3LCA2OTI0MSwgNjkyNDUsIAorICAgIDY5MjQ5LCA2OTI1MywgNjkyNTcsIDY5MjYxLCA2OTI2NSwgNjkyNjksIDY5MjczLCA2OTI3NywgNjkyODEsIDY5Mjg1LCAKKyAgICA2OTI4OSwgNjkyOTMsIDY5Mjk3LCA2OTMwMCwgNjkzMDQsIDY5MzA4LCA2OTMxMiwgNjkzMTYsIDY5MzIwLCA2OTMyNCwgCisgICAgNjkzMjgsIDY5MzMyLCA2OTMzNiwgNjkzNDAsIDY5MzQ0LCA2OTM0OCwgNjkzNTIsIDY5MzU2LCA2OTM2MCwgNjkzNjQsIAorICAgIDY5MzY4LCA2OTM3MiwgNjkzNzYsIDY5MzgwLCA2OTM4NCwgNjkzODgsIDY5MzkyLCA2OTM5NiwgNjk0MDAsIDY5NDA0LCAKKyAgICA2OTQwOCwgNjk0MTIsIDY5NDE2LCA2OTQyMCwgNjk0MjQsIDY5NDI4LCA2OTQzMiwgNjk0MzYsIDY5NDQwLCA2OTQ0NCwgCisgICAgNjk0NDgsIDY5NDUyLCA2OTQ1NiwgNjk0NjAsIDY5NDY0LCA2OTQ2OCwgNjk0NzIsIDY5NDc1LCA2OTQ4MCwgNjk0ODQsIAorICAgIDY5NDkwLCA2OTQ5NSwgNjk1MDEsIDY5NTA1LCA2OTUwOSwgNjk1MTMsIDY5NTE3LCA2OTUyMSwgNjk1MjUsIDY5NTI5LCAKKyAgICA2OTUzMywgNjk1MzcsIDY5NTQxLCA2OTU0NSwgNjk1NDksIDY5NTUzLCA2OTU1NywgNjk1NjAsIDY5NTYzLCA2OTU2NiwgCisgICAgNjk1NjksIDY5NTcyLCA2OTU3NSwgNjk1NzgsIDY5NTgxLCA2OTU4NCwgNjk1ODksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY5NTk1LCA2OTYwMCwgNjk2MDUsIDY5NjEwLCA2OTYxNSwgCisgICAgNjk2MjIsIDY5NjI5LCA2OTYzNCwgNjk2MzksIDY5NjQ0LCA2OTY0OSwgNjk2NTYsIDY5NjYzLCA2OTY3MCwgNjk2NzcsIAorICAgIDY5Njg0LCA2OTY5MSwgNjk3MDEsIDY5NzExLCA2OTcxOCwgNjk3MjUsIDY5NzMyLCA2OTczOSwgNjk3NDUsIDY5NzUxLCAKKyAgICA2OTc2MCwgNjk3NjksIDY5Nzc2LCA2OTc4MywgNjk3OTQsIDY5ODA1LCA2OTgxMCwgNjk4MTUsIDY5ODIyLCA2OTgyOSwgCisgICAgNjk4MzYsIDY5ODQzLCA2OTg1MCwgNjk4NTcsIDY5ODY0LCA2OTg3MSwgNjk4NzcsIDY5ODgzLCA2OTg4OSwgNjk4OTUsIAorICAgIDY5OTAyLCA2OTkwOSwgNjk5MTQsIDY5OTE4LCA2OTkyNSwgNjk5MzIsIDY5OTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA2OTk0MywgNjk5NDcsIDY5OTUxLCA2OTk1NCwgNjk5NTcsIDY5OTYyLCA2OTk2NywgNjk5NzIsIDY5OTc3LCA2OTk4MiwgCisgICAgNjk5ODcsIDY5OTkyLCA2OTk5NywgNzAwMDIsIDcwMDA3LCA3MDAxNiwgNzAwMjUsIDcwMDMwLCA3MDAzNSwgNzAwNDAsIAorICAgIDcwMDQ1LCA3MDA1MCwgNzAwNTUsIDcwMDYwLCA3MDA2NSwgNzAwNzAsIDcwMDc1LCA3MDA4MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNzAwODUsIDcwMDg4LCA3MDA5MSwgNzAwOTQsIDcwMDk4LCA3MDEwMiwgNzAxMDYsIDcwMTEwLCA3MDExMywgCisgICAgNzAxMTcsIDcwMTIwLCA3MDEyNCwgNzAxMjcsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCA3MDE0NywgNzAxNTEsIAorICAgIDcwMTU1LCA3MDE1OCwgNzAxNjIsIDcwMTY2LCA3MDE3MCwgNzAxNzQsIDcwMTc4LCA3MDE4MiwgNzAxODYsIDcwMTkwLCAKKyAgICA3MDE5NCwgNzAxOTgsIDcwMjAyLCA3MDIwNiwgNzAyMTAsIDcwMjE0LCA3MDIxNywgNzAyMjEsIDcwMjI1LCA3MDIyOSwgCisgICAgNzAyMzMsIDcwMjM3LCA3MDI0MSwgNzAyNDUsIDcwMjQ5LCA3MDI1MywgNzAyNTcsIDcwMjYxLCA3MDI2NSwgNzAyNjksIAorICAgIDcwMjczLCA3MDI3NywgNzAyODEsIDcwMjg1LCA3MDI4OSwgNzAyOTMsIDcwMjk3LCA3MDMwMSwgNzAzMDUsIDcwMzA5LCAKKyAgICA3MDMxMywgNzAzMTYsIDcwMzIwLCA3MDMyNCwgNzAzMjgsIDcwMzMyLCA3MDMzNiwgNzAzNDAsIDcwMzQ0LCA3MDM0NywgCisgICAgNzAzNTEsIDcwMzU1LCA3MDM1OSwgNzAzNjMsIDcwMzY3LCA3MDM3MSwgNzAzNzUsIDcwMzc5LCA3MDM4MywgNzAzODcsIAorICAgIDcwMzkxLCA3MDM5NSwgNzA0MDAsIDcwNDA1LCA3MDQwOCwgNzA0MTMsIDcwNDE2LCA3MDQxOSwgNzA0MjIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDcwNDI2LCA3MDQzNSwgNzA0NDQsIDcwNDUzLCA3MDQ2MiwgNzA0NzEsIDcwNDgwLCA3MDQ4OSwgCisgICAgNzA0OTgsIDcwNTA2LCA3MDUxMywgNzA1MjEsIDcwNTI4LCA3MDUzNiwgNzA1NDYsIDcwNTU1LCA3MDU2NSwgNzA1NzQsIAorICAgIDcwNTg0LCA3MDU5MiwgNzA1OTksIDcwNjA3LCA3MDYxNCwgNzA2MjIsIDcwNjI3LCA3MDYzMiwgNzA2MzcsIDcwNjQ2LCAKKyAgICA3MDY1MiwgNzA2NTgsIDcwNjY1LCA3MDY3NCwgNzA2ODIsIDcwNjkwLCA3MDY5OCwgNzA3MDUsIDcwNzEyLCA3MDcxOSwgCisgICAgNzA3MjYsIDcwNzMxLCA3MDczNiwgNzA3NDEsIDcwNzQ2LCA3MDc1MSwgNzA3NTYsIDcwNzYxLCA3MDc2NiwgNzA3NzQsIAorICAgIDcwNzgyLCA3MDc4OCwgNzA3OTMsIDcwNzk4LCA3MDgwMywgNzA4MDgsIDcwODEzLCA3MDgxOCwgNzA4MjMsIDcwODI4LCAKKyAgICA3MDgzMywgNzA4NDEsIDcwODQ5LCA3MDg1NCwgNzA4NTksIDcwODY5LCA3MDg3OSwgNzA4ODYsIDcwODkzLCA3MDkwMiwgCisgICAgNzA5MTEsIDcwOTIzLCA3MDkzNSwgNzA5NDEsIDcwOTQ3LCA3MDk1NSwgNzA5NjMsIDcwOTczLCA3MDk4MywgNzA5OTAsIAorICAgIDcwOTk3LCA3MTAwMiwgNzEwMDcsIDcxMDE5LCA3MTAzMSwgNzEwMzksIDcxMDQ3LCA3MTA1NywgNzEwNjcsIDcxMDc5LCAKKyAgICA3MTA5MSwgNzExMDAsIDcxMTA5LCA3MTExNiwgNzExMjMsIDcxMTMwLCA3MTEzNywgNzExNDYsIDcxMTU1LCA3MTE2MCwgCisgICAgNzExNjUsIDcxMTcyLCA3MTE3OSwgNzExODYsIDcxMTkzLCA3MTIwNSwgNzEyMTcsIDcxMjIyLCA3MTIyNywgNzEyMzIsIAorICAgIDcxMjM3LCA3MTI0MiwgNzEyNDcsIDcxMjUyLCA3MTI1NywgNzEyNjEsIDcxMjY2LCA3MTI3MSwgNzEyNzYsIDcxMjgxLCAKKyAgICA3MTI4NiwgNzEyOTIsIDcxMjk3LCA3MTMwMiwgNzEzMDksIDcxMzE2LCA3MTMyMywgNzEzMzAsIDcxMzM3LCA3MTM0NiwgCisgICAgNzEzNTUsIDcxMzYxLCA3MTM2NywgNzEzNzMsIDcxMzc5LCA3MTM4NSwgNzEzOTEsIDcxMzk4LCA3MTQwNSwgNzE0MTIsIAorICAgIDcxNDE2LCA3MTQyMywgNzE0MjgsIDcxNDMzLCA3MTQ0MCwgMCwgNzE0NTMsIDcxNDYxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MTQ2OSwgNzE0NzgsIDcxNDg3LCA3MTQ5NiwgNzE1MDUsIDcxNTE0LCA3MTUyMywgCisgICAgNzE1MzIsIDcxNTQxLCA3MTU1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzE1NTksIDcxNTY2LCA3MTU3NCwgNzE1ODIsIAorICAgIDcxNTg5LCA3MTU5NywgNzE2MDQsIDcxNjEwLCA3MTYxNiwgNzE2MjMsIDcxNjI5LCA3MTYzNSwgNzE2NDEsIDcxNjQ4LCAKKyAgICA3MTY1NSwgNzE2NjIsIDcxNjY5LCA3MTY3NiwgNzE2ODMsIDcxNjkwLCA3MTY5NywgNzE3MDQsIDcxNzExLCA3MTcxOCwgCisgICAgNzE3MjUsIDcxNzMyLCA3MTczOSwgNzE3NDUsIDcxNzUyLCA3MTc1OSwgNzE3NjYsIDcxNzczLCA3MTc4MCwgNzE3ODcsIAorICAgIDcxNzk0LCA3MTgwMSwgNzE4MDgsIDcxODE1LCA3MTgyMiwgNzE4MjksIDcxODM2LCA3MTg0MywgNzE4NTAsIDcxODU3LCAKKyAgICA3MTg2NCwgNzE4NzEsIDcxODc5LCA3MTg4NywgNzE4OTUsIDcxOTAzLCAwLCAwLCAwLCAwLCA3MTkxMSwgNzE5MjAsIAorICAgIDcxOTI5LCA3MTkzOCwgNzE5NDcsIDcxOTU2LCA3MTk2NSwgNzE5NzIsIDcxOTc5LCA3MTk4NiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNzE5OTMsIDcxOTk3LCA3MjAwMiwgNzIwMDcsIDcyMDEyLCA3MjAxNywgNzIwMjIsIDcyMDI3LCA3MjAzMiwgNzIwMzcsIAorICAgIDcyMDQyLCA3MjA0NywgNzIwNTEsIDcyMDU1LCA3MjA2MCwgNzIwNjUsIDcyMDY5LCA3MjA3NCwgNzIwNzksIDcyMDg0LCAKKyAgICA3MjA4OSwgNzIwOTQsIDcyMDk5LCA3MjEwNCwgNzIxMDgsIDcyMTEyLCA3MjExNywgNzIxMjIsIDcyMTI3LCA3MjEzMSwgCisgICAgNzIxMzUsIDcyMTM5LCA3MjE0MywgNzIxNDcsIDcyMTUxLCA3MjE1NiwgNzIxNjEsIDcyMTY2LCA3MjE3MSwgNzIxNzYsIAorICAgIDcyMTgzLCA3MjE4OSwgNzIxOTQsIDcyMTk5LCA3MjIwNCwgNzIyMDksIDcyMjE1LCA3MjIyMiwgNzIyMjgsIDcyMjM1LCAKKyAgICA3MjI0MSwgNzIyNDcsIDcyMjUyLCA3MjI1OSwgNzIyNjUsIDcyMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjI3NiwgCisgICAgNzIyODAsIDcyMjg0LCA3MjI4NywgNzIyOTEsIDcyMjk0LCA3MjI5OCwgNzIzMDEsIDcyMzA1LCA3MjMwOSwgNzIzMTQsIAorICAgIDcyMzE4LCA3MjMyMywgNzIzMjYsIDcyMzMwLCA3MjMzNCwgNzIzMzcsIDcyMzQxLCA3MjM0NSwgNzIzNDgsIDcyMzUyLCAKKyAgICA3MjM1NiwgNzIzNjAsIDcyMzY0LCA3MjM2OCwgNzIzNzIsIDcyMzc2LCA3MjM4MCwgNzIzODQsIDcyMzg4LCA3MjM5MiwgCisgICAgNzIzOTYsIDcyNDAwLCA3MjQwNCwgNzI0MDgsIDcyNDEyLCA3MjQxNiwgNzI0MjAsIDcyNDIzLCA3MjQyNiwgNzI0MzAsIAorICAgIDcyNDM0LCA3MjQzOCwgNzI0NDEsIDcyNDQ0LCA3MjQ0NywgNzI0NTEsIDcyNDU1LCA3MjQ1OSwgNzI0NjMsIDcyNDY3LCAKKyAgICA3MjQ3MCwgNzI0NzQsIDcyNDgwLCA3MjQ4NSwgNzI0ODksIDcyNDk0LCA3MjQ5OCwgNzI1MDMsIDcyNTA4LCA3MjUxNCwgCisgICAgNzI1MTksIDcyNTI1LCA3MjUyOSwgNzI1MzQsIDcyNTM5LCA3MjU0MywgNzI1NDgsIDcyNTUzLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3MjU1NywgNzI1NjAsIDcyNTY0LCA3MjU2OCwgNzI1NzEsIDcyNTc0LCA3MjU3NywgNzI1ODAsIDcyNTgzLCAKKyAgICA3MjU4NiwgNzI1ODksIDcyNTkyLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjU5NSwgNzI2MDAsIDcyNjA0LCA3MjYwOCwgNzI2MTIsIAorICAgIDcyNjE2LCA3MjYyMCwgNzI2MjQsIDcyNjI4LCA3MjYzMiwgNzI2MzYsIDcyNjQwLCA3MjY0NCwgNzI2NDgsIDcyNjUyLCAKKyAgICA3MjY1NiwgNzI2NjAsIDcyNjY1LCA3MjY3MCwgNzI2NzYsIDcyNjgyLCA3MjY4OSwgNzI2OTQsIDcyNjk5LCA3MjcwNSwgCisgICAgNzI3MDksIDcyNzE0LCA3MjcxNywgMCwgMCwgMCwgMCwgNzI3MjAsIDcyNzI3LCA3MjczMywgNzI3MzksIDcyNzQ1LCAKKyAgICA3Mjc1MSwgNzI3NTcsIDcyNzYzLCA3Mjc2OSwgNzI3NzUsIDcyNzgxLCA3Mjc4NywgNzI3OTQsIDcyODAxLCA3MjgwOCwgCisgICAgNzI4MTUsIDcyODIyLCA3MjgyOSwgNzI4MzYsIDcyODQzLCA3Mjg1MCwgNzI4NTYsIDcyODYyLCA3Mjg2OSwgNzI4NzUsIAorICAgIDcyODgyLCA3Mjg4OSwgNzI4OTUsIDcyOTAxLCA3MjkwOCwgNzI5MTUsIDcyOTIyLCA3MjkyOCwgNzI5MzUsIDcyOTQyLCAKKyAgICA3Mjk0OCwgNzI5NTUsIDcyOTYxLCA3Mjk2OCwgNzI5NzUsIDcyOTgxLCA3Mjk4NywgNzI5OTQsIDczMDAwLCA3MzAwNywgCisgICAgNzMwMTQsIDczMDIzLCA3MzAzMCwgNzMwMzcsIDczMDQxLCA3MzA0NiwgNzMwNTEsIDczMDU2LCA3MzA2MSwgNzMwNjUsIAorICAgIDczMDY5LCA3MzA3NCwgNzMwNzgsIDczMDgzLCA3MzA4OCwgNzMwOTMsIDczMDk4LCA3MzEwMiwgNzMxMDcsIDczMTExLCAKKyAgICA3MzExNiwgNzMxMjAsIDczMTI1LCA3MzEzMCwgNzMxMzUsIDczMTQwLCA3MzE0NCwgNzMxNDksIDczMTU0LCA3MzE1OSwgCisgICAgNzMxNjUsIDczMTcwLCA3MzE3NiwgNzMxODIsIDczMTg4LCA3MzE5NSwgNzMyMDEsIDczMjA3LCA3MzIxNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMyMTgsIDczMjIzLCA3MzIyNywgNzMyMzEsIDczMjM1LCA3MzIzOSwgNzMyNDMsIAorICAgIDczMjQ3LCA3MzI1MSwgNzMyNTUsIDczMjU5LCA3MzI2MywgNzMyNjcsIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCAKKyAgICA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgNzMzMDMsIDczMzA3LCA3MzMxMSwgNzMzMTUsIDczMzE5LCA3MzMyMywgCisgICAgNzMzMjcsIDczMzMxLCA3MzMzNSwgMCwgMCwgMCwgNzMzMzksIDczMzQzLCA3MzM0NywgNzMzNTEsIDczMzU1LCA3MzM1OCwgCisgICAgNzMzNjQsIDczMzY3LCA3MzM3MSwgNzMzNzQsIDczMzgwLCA3MzM4NiwgNzMzOTQsIDczMzk3LCA3MzQwMSwgNzM0MDQsIAorICAgIDczNDA3LCA3MzQxMywgNzM0MTksIDczNDIzLCA3MzQyOSwgNzM0MzMsIDczNDM3LCA3MzQ0MywgNzM0NDcsIDczNDUzLCAKKyAgICA3MzQ1OSwgNzM0NjMsIDczNDY3LCA3MzQ3MywgNzM0NzcsIDczNDgzLCA3MzQ4OSwgNzM0OTMsIDczNDk5LCA3MzUwMywgCisgICAgNzM1MDksIDczNTEyLCA3MzUxNSwgNzM1MjEsIDczNTI1LCA3MzUzMSwgNzM1MzQsIDczNTM3LCA3MzU0MCwgNzM1NDYsIAorICAgIDczNTUwLCA3MzU1NCwgNzM1NjAsIDczNTY2LCA3MzU3MCwgNzM1NzMsIDczNTc5LCA3MzU4NCwgNzM1ODksIDczNTk0LCAKKyAgICA3MzYwMSwgNzM2MDYsIDczNjEzLCA3MzYxOCwgNzM2MjUsIDczNjMwLCA3MzYzNiwgNzM2NDIsIDczNjQ4LCA3MzY1MSwgCisgICAgNzM2NTUsIDczNjU5LCA3MzY2NCwgNzM2NjksIDczNjc0LCA3MzY3OSwgNzM2ODQsIDczNjg5LCA3MzY5NCwgNzM2OTksIAorICAgIDczNzA2LCA3MzcxMSwgMCwgNzM3MTgsIDczNzIxLCA3MzcyNSwgNzM3MjgsIDczNzMxLCA3MzczNCwgNzM3MzcsIDczNzQwLCAKKyAgICA3Mzc0MywgNzM3NDYsIDczNzQ5LCAwLCAwLCAwLCAwLCA3Mzc1MiwgNzM3NTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDczNzY0LCA3Mzc2NywgNzM3NzAsIDczNzczLCA3Mzc3NiwgNzM3ODAsIDczNzgzLCA3Mzc4NiwgNzM3OTAsIDczNzk0LCAKKyAgICA3Mzc5OCwgNzM4MDIsIDczODA2LCA3MzgxMCwgNzM4MTQsIDczODE4LCA3MzgyMiwgNzM4MjYsIDczODMwLCA3MzgzNCwgCisgICAgNzM4MzgsIDczODQyLCA3Mzg0NiwgNzM4NTAsIDczODU0LCA3Mzg1NywgNzM4NjEsIDczODY0LCA3Mzg2OCwgNzM4NzIsIAorICAgIDczODc2LCA3Mzg4MCwgNzM4ODQsIDczODg3LCA3Mzg5MSwgNzM4OTQsIDczODk3LCA3MzkwMSwgNzM5MDUsIDczOTA5LCAKKyAgICA3MzkxMywgNzM5MTYsIDczOTIxLCA3MzkyNSwgNzM5MzAsIDczOTM1LCA3MzkzOSwgNzM5NDQsIDczOTQ4LCA3Mzk1MywgCisgICAgNzM5NTgsIDczOTYzLCA3Mzk2OCwgNzM5NzMsIDczOTc5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Mzk4NSwgCisgICAgNzM5OTAsIDczOTk1LCA3NDAwMCwgNzQwMDcsIDc0MDEyLCA3NDAxNywgNzQwMjEsIDc0MDI2LCA3NDAzMSwgNzQwMzUsIAorICAgIDc0MDM5LCA3NDA0NCwgNzQwNTAsIDAsIDAsIDc0MDU3LCA3NDA2MSwgNzQwNjQsIDc0MDY3LCA3NDA3MCwgNzQwNzMsIAorICAgIDc0MDc2LCA3NDA3OSwgNzQwODIsIDc0MDg1LCAwLCAwLCA3NDA4OCwgNzQwOTMsIDc0MDk4LCA3NDEwNCwgNzQxMTEsIAorICAgIDc0MTE3LCA3NDEyMywgNzQxMjksIDc0MTM1LCA3NDE0MSwgNzQxNDcsIDc0MTUzLCA3NDE1OSwgNzQxNjUsIDc0MTcxLCAKKyAgICA3NDE3NywgNzQxODIsIDc0MTg4LCA3NDE5MywgNzQxOTksIDc0MjA1LCA3NDIxMiwgNzQyMTgsIDc0MjI0LCA3NDIyOSwgCisgICAgNzQyMzYsIDc0MjQzLCA3NDI1MCwgNzQyNTYsIDc0MjYxLCA3NDI2NiwgNzQyNzEsIDAsIDAsIDAsIDAsIDc0Mjc5LCAKKyAgICA3NDI4NSwgNzQyOTEsIDc0Mjk3LCA3NDMwMywgNzQzMDksIDc0MzE1LCA3NDMyMSwgNzQzMjcsIDc0MzMzLCA3NDMzOSwgCisgICAgNzQzNDUsIDc0MzUxLCA3NDM1NywgNzQzNjMsIDc0MzY5LCA3NDM3NSwgNzQzODEsIDc0Mzg3LCA3NDM5MywgNzQzOTksIAorICAgIDc0NDA0LCA3NDQwOSwgNzQ0MTUsIDc0NDIxLCA3NDQyNywgNzQ0MzMsIDc0NDM5LCA3NDQ0NSwgNzQ0NTEsIDc0NDU3LCAKKyAgICA3NDQ2MywgNzQ0NjksIDc0NDc1LCA3NDQ4MSwgNzQ0ODcsIDc0NDkzLCA3NDQ5OSwgNzQ1MDUsIDc0NTExLCA3NDUxNywgCisgICAgNzQ1MjMsIDc0NTI5LCA3NDUzNSwgNzQ1NDEsIDc0NTQ3LCA3NDU1MywgNzQ1NTgsIDc0NTYzLCA3NDU2OSwgNzQ1NzQsIAorICAgIDc0NTc4LCA3NDU4MywgNzQ1ODcsIDc0NTkxLCA3NDU5NSwgNzQ2MDEsIDc0NjA2LCA3NDYxMSwgNzQ2MTYsIDc0NjIxLCAKKyAgICA3NDYyNiwgNzQ2MzEsIDc0NjM2LCA3NDY0MywgNzQ2NTAsIDc0NjU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDY2NCwgNzQ2NjksIDc0Njc0LCA3NDY3OSwgCisgICAgNzQ2ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NjkzLCA3NDY5NywgNzQ3MDEsIDc0NzA1LCA3NDcwOSwgCisgICAgNzQ3MTMsIDAsIDAsIDc0NzE3LCA3NDcyMSwgNzQ3MjUsIDc0NzI5LCA3NDczMywgNzQ3MzcsIDAsIDAsIDc0NzQxLCAKKyAgICA3NDc0NSwgNzQ3NDksIDc0NzUzLCA3NDc1NywgNzQ3NjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NzY1LCAKKyAgICA3NDc2OSwgNzQ3NzMsIDc0Nzc3LCA3NDc4MSwgNzQ3ODUsIDc0Nzg5LCAwLCA3NDc5MywgNzQ3OTcsIDc0ODAxLCA3NDgwNSwgCisgICAgNzQ4MDksIDc0ODEzLCA3NDgxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjU1MjgsIDY1NTM3LCA2NTU0NiwgNjU1NTUsIDY1NTY0LCA2NTU3MywgNjU1ODIsIDY1NTkxLCA2NTYwMCwgCi0gICAgNjU2MDgsIDY1NjE1LCA2NTYyMywgNjU2MzAsIDY1NjM4LCA2NTY0OCwgNjU2NTcsIDY1NjY3LCA2NTY3NiwgNjU2ODYsIAotICAgIDY1Njk0LCA2NTcwMSwgNjU3MDksIDY1NzE2LCA2NTcyNCwgNjU3MjksIDY1NzM0LCA2NTczOSwgNjU3NDcsIDY1NzUzLCAKLSAgICA2NTc1OSwgNjU3NjYsIDY1Nzc1LCA2NTc4MywgNjU3OTEsIDY1Nzk5LCA2NTgwNiwgNjU4MTMsIDY1ODIwLCA2NTgyNywgCi0gICAgNjU4MzIsIDY1ODM3LCA2NTg0MiwgNjU4NDcsIDY1ODUyLCA2NTg1NywgNjU4NjIsIDY1ODY3LCA2NTg3NSwgNjU4ODMsIAotICAgIDY1ODg5LCA2NTg5NCwgNjU4OTksIDY1OTA0LCA2NTkwOSwgNjU5MTQsIDY1OTE5LCA2NTkyNCwgNjU5MjksIDY1OTM0LCAKLSAgICA2NTk0MiwgNjU5NTAsIDY1OTU1LCA2NTk2MCwgNjU5NjksIDY1OTc4LCA2NTk4NSwgNjU5OTIsIDY2MDAxLCA2NjAxMCwgCi0gICAgNjYwMjEsIDY2MDMyLCA2NjAzOCwgNjYwNDQsIDY2MDUyLCA2NjA2MCwgNjYwNjksIDY2MDc4LCA2NjA4NSwgNjYwOTIsIAotICAgIDY2MDk3LCA2NjEwMiwgNjYxMTMsIDY2MTI0LCA2NjEzMiwgNjYxNDAsIDY2MTUwLCA2NjE2MCwgNjYxNzEsIDY2MTgyLCAKLSAgICA2NjE5MSwgNjYyMDAsIDY2MjA3LCA2NjIxNCwgNjYyMjEsIDY2MjI4LCA2NjIzNywgNjYyNDYsIDY2MjUxLCA2NjI1NiwgCi0gICAgNjYyNjMsIDY2MjcwLCA2NjI3NywgNjYyODQsIDY2Mjk1LCA2NjMwNiwgNjYzMTEsIDY2MzE2LCA2NjMyMSwgNjYzMjYsIAotICAgIDY2MzMxLCA2NjMzNiwgNjYzNDEsIDY2MzQ2LCA2NjM1MCwgNjYzNTUsIDY2MzYwLCA2NjM2NSwgNjYzNzAsIDY2Mzc1LCAKLSAgICA2NjM4MSwgNjYzODYsIDY2MzkxLCA2NjM5OCwgNjY0MDUsIDY2NDEyLCA2NjQxOSwgNjY0MjUsIDY2NDMyLCA2NjQzOSwgCi0gICAgNjY0NDQsIDY2NDQ5LCA2NjQ1NSwgNjY0NjEsIDY2NDY3LCA2NjQ3MywgNjY0ODAsIDY2NDg3LCA2NjQ5NCwgNjY0OTgsIAotICAgIDY2NTA1LCA2NjUxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4MjEsIDc0ODI4LCA3NDgzNSwgNzQ4NDIsIDc0ODQ5LCA3NDg1NSwgNzQ4NjEsIAorICAgIDc0ODY4LCA3NDg3NSwgNzQ4ODIsIDc0ODg5LCA3NDg5NiwgNzQ5MDMsIDc0OTEwLCA3NDkxNywgNzQ5MjQsIDc0OTMwLCAKKyAgICA3NDkzNywgNzQ5NDQsIDc0OTUxLCA3NDk1OCwgNzQ5NjUsIDc0OTcyLCA3NDk3OSwgNzQ5ODYsIDc0OTkzLCA3NTAwMCwgCisgICAgNzUwMDcsIDc1MDE2LCA3NTAyNSwgNzUwMzQsIDc1MDQzLCA3NTA1MiwgNzUwNjEsIDc1MDcwLCA3NTA3OSwgNzUwODcsIAorICAgIDc1MDk1LCA3NTEwMywgNzUxMTEsIDc1MTE5LCA3NTEyNywgNzUxMzUsIDc1MTQzLCA3NTE0OSwgNzUxNTcsIDAsIDAsIAorICAgIDc1MTY1LCA3NTE3MiwgNzUxNzgsIDc1MTg0LCA3NTE5MCwgNzUxOTYsIDc1MjAyLCA3NTIwOCwgNzUyMTQsIDc1MjIwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA3NTIyNiwgNzUyMzAsIDc1MjM0LCA3NTIzOCwgNzUyNDIsIDc1MjQ2LCA3NTI1MCwgNzUyNTQsIAorICAgIDc1MjU4LCA3NTI2MiwgNzUyNjYsIDc1MjcwLCA3NTI3NCwgNzUyNzgsIDc1MjgyLCA3NTI4NiwgNzUyOTAsIDc1Mjk0LCAKKyAgICA3NTI5OCwgNzUzMDIsIDc1MzA2LCA3NTMxMCwgNzUzMTQsIDAsIDAsIDAsIDAsIDc1MzE4LCA3NTMyMiwgNzUzMjYsIAorICAgIDc1MzMwLCA3NTMzNCwgNzUzMzgsIDc1MzQyLCA3NTM0NiwgNzUzNTAsIDc1MzU0LCA3NTM1OCwgNzUzNjIsIDc1MzY2LCAKKyAgICA3NTM3MCwgNzUzNzQsIDc1Mzc4LCA3NTM4MiwgNzUzODYsIDc1MzkwLCA3NTM5NCwgNzUzOTgsIDc1NDAyLCA3NTQwNiwgCisgICAgNzU0MTAsIDc1NDE0LCA3NTQxOCwgNzU0MjIsIDc1NDI2LCA3NTQzMCwgNzU0MzQsIDc1NDM4LCA3NTQ0MiwgNzU0NDYsIAorICAgIDc1NDUwLCA3NTQ1NCwgNzU0NTgsIDc1NDYyLCA3NTQ2NiwgNzU0NzAsIDc1NDc0LCA3NTQ3OCwgNzU0ODIsIDc1NDg2LCAKKyAgICA3NTQ5MCwgNzU0OTQsIDc1NDk4LCA3NTUwMiwgNzU1MDYsIDc1NTEwLCAwLCAwLCAwLCAwLCA3NTUxNCwgNzU1MTgsIAorICAgIDc1NTIyLCA3NTUyNiwgNzU1MzAsIDc1NTM0LCA3NTUzOCwgNzU1NDIsIDc1NTQ2LCA3NTU1MCwgNzU1NTQsIDc1NTU4LCAKKyAgICA3NTU2MiwgNzU1NjYsIDc1NTcwLCA3NTU3NCwgNzU1NzgsIDc1NTgyLCA3NTU4NiwgNzU1OTAsIDc1NTk0LCA3NTU5OCwgCisgICAgNzU2MDIsIDc1NjA2LCA3NTYxMCwgNzU2MTQsIDc1NjE4LCA3NTYyMiwgNzU2MjYsIDc1NjMwLCA3NTYzNCwgNzU2MzgsIAorICAgIDc1NjQyLCA3NTY0NiwgNzU2NTAsIDc1NjU0LCA3NTY1OCwgNzU2NjIsIDc1NjY2LCA3NTY3MCwgNzU2NzQsIDc1Njc4LCAKKyAgICA3NTY4MiwgNzU2ODYsIDc1NjkwLCA3NTY5NCwgNzU2OTgsIDc1NzAyLCA3NTcwNiwgNzU3MTAsIDc1NzE0LCA3NTcxOCwgCisgICAgNzU3MjIsIDc1NzI2LCA3NTczMCwgNzU3MzQsIDc1NzM4LCA3NTc0MiwgNzU3NDYsIDc1NzUwLCA3NTc1NCwgNzU3NTgsIAorICAgIDc1NzYyLCA3NTc2NiwgNzU3NzAsIDc1Nzc0LCA3NTc3OCwgNzU3ODIsIDc1Nzg2LCA3NTc5MCwgNzU3OTQsIDc1Nzk4LCAKKyAgICA3NTgwMiwgNzU4MDYsIDc1ODEwLCA3NTgxNCwgNzU4MTgsIDc1ODIyLCA3NTgyNiwgNzU4MzAsIDc1ODM0LCA3NTgzOCwgCisgICAgNzU4NDIsIDc1ODQ2LCA3NTg1MCwgNzU4NTQsIDc1ODU4LCA3NTg2MiwgNzU4NjYsIDc1ODcwLCA3NTg3NCwgNzU4NzgsIAorICAgIDc1ODgyLCA3NTg4NiwgNzU4OTAsIDc1ODk0LCA3NTg5OCwgNzU5MDIsIDc1OTA2LCA3NTkxMCwgNzU5MTQsIDc1OTE4LCAKKyAgICA3NTkyMiwgNzU5MjYsIDc1OTMwLCA3NTkzNCwgNzU5MzgsIDc1OTQyLCA3NTk0NiwgNzU5NTAsIDc1OTU0LCA3NTk1OCwgCisgICAgNzU5NjIsIDc1OTY2LCA3NTk3MCwgNzU5NzQsIDc1OTc4LCA3NTk4MiwgNzU5ODYsIDc1OTkwLCA3NTk5NCwgNzU5OTgsIAorICAgIDc2MDAyLCA3NjAwNiwgNzYwMTAsIDc2MDE0LCA3NjAxOCwgNzYwMjIsIDc2MDI2LCA3NjAzMCwgNzYwMzQsIDc2MDM4LCAKKyAgICA3NjA0MiwgNzYwNDYsIDc2MDUwLCA3NjA1NCwgNzYwNTgsIDc2MDYyLCA3NjA2NiwgNzYwNzAsIDc2MDc0LCA3NjA3OCwgCisgICAgNzYwODIsIDc2MDg2LCA3NjA5MCwgNzYwOTQsIDc2MDk4LCA3NjEwMiwgNzYxMDYsIDc2MTEwLCA3NjExNCwgNzYxMTgsIAorICAgIDc2MTIyLCA3NjEyNiwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIDc2MTQ2LCA3NjE1MCwgNzYxNTQsIDc2MTU4LCAKKyAgICA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCA3NjE4NiwgNzYxOTAsIDc2MTk0LCA3NjE5OCwgCisgICAgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIDc2MjE4LCA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIAorICAgIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCA3NjI1OCwgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCAKKyAgICA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgNzYyOTgsIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgCisgICAgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIDc2MzM4LCA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIAorICAgIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCA3NjM3OCwgNzYzODIsIDc2Mzg2LCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCAKKyAgICA3NjQwMiwgNzY0MDYsIDc2NDEwLCA3NjQxNCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgCisgICAgNzY0NDIsIDc2NDQ2LCA3NjQ1MCwgNzY0NTQsIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIAorICAgIDc2NDgyLCA3NjQ4NiwgNzY0OTAsIDc2NDk0LCA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCAKKyAgICA3NjUyMiwgNzY1MjYsIDc2NTMwLCA3NjUzNCwgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgCisgICAgNzY1NjIsIDc2NTY2LCA3NjU3MCwgNzY1NzQsIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIAorICAgIDc2NjAyLCA3NjYwNiwgNzY2MTAsIDc2NjE0LCA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCAKKyAgICA3NjY0MiwgNzY2NDYsIDc2NjUwLCA3NjY1NCwgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgCisgICAgNzY2ODIsIDc2Njg2LCA3NjY5MCwgNzY2OTQsIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDAsIAorICAgIDAsIDc2NzIyLCA3NjcyNiwgNzY3MzAsIDc2NzM0LCA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCAKKyAgICA3Njc2MiwgNzY3NjYsIDc2NzcwLCA3Njc3NCwgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgCisgICAgNzY4MDIsIDc2ODA2LCA3NjgxMCwgNzY4MTQsIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIAorICAgIDc2ODQyLCA3Njg0NiwgNzY4NTAsIDc2ODU0LCA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCAKKyAgICA3Njg4MiwgNzY4ODYsIDc2ODkwLCA3Njg5NCwgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgCisgICAgNzY5MjIsIDc2OTI2LCA3NjkzMCwgNzY5MzQsIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIAorICAgIDc2OTYyLCA3Njk2NiwgMCwgMCwgNzY5NzAsIDc2OTc0LCA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIAorICAgIDc2OTk4LCA3NzAwMiwgNzcwMDYsIDc3MDEwLCA3NzAxNCwgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCAKKyAgICA3NzAzOCwgNzcwNDIsIDc3MDQ2LCA3NzA1MCwgNzcwNTQsIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgCisgICAgNzcwNzgsIDc3MDgyLCA3NzA4NiwgNzcwOTAsIDc3MDk0LCA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIAorICAgIDc3MTE4LCA3NzEyMiwgNzcxMjYsIDc3MTMwLCA3NzEzNCwgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCAKKyAgICA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MCwgNzcxNzQsIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgCisgICAgNzcxOTgsIDc3MjAyLCA3NzIwNiwgNzcyMTAsIDc3MjE0LCA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIAorICAgIDc3MjM4LCA3NzI0MiwgNzcyNDYsIDc3MjUwLCA3NzI1NCwgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCAKKyAgICA3NzI3OCwgNzcyODIsIDc3Mjg2LCA3NzI5MCwgNzcyOTQsIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgCisgICAgNzczMTgsIDc3MzIyLCA3NzMyNiwgNzczMzAsIDc3MzM0LCA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIAorICAgIDc3MzU4LCA3NzM2MiwgNzczNjYsIDc3MzcwLCA3NzM3NCwgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc3Mzk0LCA3NzM5OSwgNzc0MDQsIDc3NDA5LCA3NzQxNCwgCisgICAgNzc0MTksIDc3NDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NzQzMiwgNzc0MzksIDc3NDQ2LCAKKyAgICA3NzQ1MywgNzc0NjAsIDAsIDAsIDAsIDAsIDAsIDc3NDY3LCA3NzQ3NCwgNzc0ODEsIDc3NDkxLCA3NzQ5NywgNzc1MDMsIAorICAgIDc3NTA5LCA3NzUxNSwgNzc1MjEsIDc3NTI3LCA3NzUzNCwgNzc1NDAsIDc3NTQ2LCA3NzU1MiwgNzc1NjEsIDc3NTcwLCAKKyAgICA3NzU4MiwgNzc1OTQsIDc3NjAwLCA3NzYwNiwgNzc2MTIsIDc3NjE5LCA3NzYyNiwgNzc2MzMsIDc3NjQwLCA3NzY0NywgMCwgCisgICAgNzc2NTQsIDc3NjYxLCA3NzY2OCwgNzc2NzYsIDc3NjgzLCAwLCA3NzY5MCwgMCwgNzc2OTcsIDc3NzA0LCAwLCA3NzcxMSwgCisgICAgNzc3MTksIDAsIDc3NzI2LCA3NzczMywgNzc3NDAsIDc3NzQ3LCA3Nzc1NCwgNzc3NjEsIDc3NzY4LCA3Nzc3NSwgNzc3ODIsIAorICAgIDc3Nzg5LCA3Nzc5NCwgNzc4MDEsIDc3ODA4LCA3NzgxNCwgNzc4MjAsIDc3ODI2LCA3NzgzMiwgNzc4MzgsIDc3ODQ0LCAKKyAgICA3Nzg1MCwgNzc4NTYsIDc3ODYyLCA3Nzg2OCwgNzc4NzQsIDc3ODgwLCA3Nzg4NiwgNzc4OTIsIDc3ODk4LCA3NzkwNCwgCisgICAgNzc5MTAsIDc3OTE2LCA3NzkyMiwgNzc5MjgsIDc3OTM0LCA3Nzk0MCwgNzc5NDYsIDc3OTUyLCA3Nzk1OCwgNzc5NjQsIAorICAgIDc3OTcwLCA3Nzk3NiwgNzc5ODIsIDc3OTg4LCA3Nzk5NCwgNzgwMDAsIDc4MDA2LCA3ODAxMiwgNzgwMTgsIDc4MDI0LCAKKyAgICA3ODAzMCwgNzgwMzYsIDc4MDQyLCA3ODA0OCwgNzgwNTQsIDc4MDYwLCA3ODA2NiwgNzgwNzIsIDc4MDc4LCA3ODA4NCwgCisgICAgNzgwOTAsIDc4MDk2LCA3ODEwMiwgNzgxMDgsIDc4MTE0LCA3ODEyMCwgNzgxMjYsIDc4MTMyLCA3ODEzOCwgNzgxNDQsIAorICAgIDc4MTUwLCA3ODE1NiwgNzgxNjIsIDc4MTY4LCA3ODE3NCwgNzgxODAsIDc4MTg2LCA3ODE5MiwgNzgxOTgsIDc4MjA0LCAKKyAgICA3ODIxMCwgNzgyMTYsIDc4MjIyLCA3ODIyOCwgNzgyMzQsIDc4MjQwLCA3ODI0NiwgNzgyNTIsIDc4MjU4LCA3ODI2NCwgCisgICAgNzgyNzIsIDc4MjgwLCA3ODI4NiwgNzgyOTIsIDc4Mjk4LCA3ODMwNCwgNzgzMTMsIDc4MzIyLCA3ODMzMCwgNzgzMzgsIAorICAgIDc4MzQ2LCA3ODM1NCwgNzgzNjIsIDc4MzcwLCA3ODM3OCwgNzgzODYsIDc4MzkzLCA3ODQwMCwgNzg0MTAsIDc4NDIwLCAKKyAgICA3ODQyNCwgNzg0MjgsIDc4NDMzLCA3ODQzOCwgNzg0NDMsIDc4NDQ4LCA3ODQ1NywgNzg0NjYsIDc4NDcyLCA3ODQ3OCwgCisgICAgNzg0ODUsIDc4NDkyLCA3ODQ5OSwgNzg1MDMsIDc4NTA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA3ODUxNSwgNzg1MjEsIDc4NTI3LCA3ODUzMywgNzg1MzksIDc4NTQ0LCA3ODU0OSwgNzg1NTUsIAorICAgIDc4NTYxLCA3ODU2NywgNzg1NzMsIDc4NTgxLCA3ODU4NywgNzg1OTMsIDc4NjAxLCA3ODYwOSwgNzg2MTcsIDc4NjI1LCAKKyAgICA3ODYzMCwgNzg2MzUsIDc4NjQwLCA3ODY0NSwgNzg2NTcsIDc4NjY5LCA3ODY3OSwgNzg2ODksIDc4NzAwLCA3ODcxMSwgCisgICAgNzg3MjIsIDc4NzMzLCA3ODc0MywgNzg3NTMsIDc4NzY0LCA3ODc3NSwgNzg3ODYsIDc4Nzk3LCA3ODgwNywgNzg4MTcsIAorICAgIDc4ODI3LCA3ODg0MiwgNzg4NTcsIDc4ODcyLCA3ODg3OSwgNzg4ODYsIDc4ODkzLCA3ODkwMCwgNzg5MTAsIDc4OTIwLCAKKyAgICA3ODkzMCwgNzg5NDEsIDc4OTUxLCA3ODk1OSwgNzg5NjcsIDc4OTc2LCA3ODk4NCwgNzg5OTMsIDc5MDAxLCA3OTAwOSwgCisgICAgNzkwMTcsIDc5MDI2LCA3OTAzNCwgNzkwNDMsIDc5MDUxLCA3OTA1OSwgNzkwNjcsIDc5MDc2LCA3OTA4NCwgNzkwOTEsIAorICAgIDc5MDk4LCA3OTEwNSwgNzkxMTIsIDc5MTIwLCA3OTEyOCwgNzkxMzYsIDc5MTQ0LCA3OTE1MiwgNzkxNjEsIDc5MTY5LCAKKyAgICA3OTE3NywgNzkxODUsIDc5MTkzLCA3OTIwMSwgNzkyMTAsIDc5MjE4LCA3OTIyNiwgNzkyMzQsIDc5MjQyLCA3OTI1MCwgCisgICAgNzkyNTgsIDc5MjY2LCA3OTI3NCwgNzkyODIsIDc5MjkwLCA3OTI5OSwgNzkzMDcsIDc5MzE2LCA3OTMyNCwgNzkzMzIsIAorICAgIDc5MzQwLCA3OTM0OSwgNzkzNTcsIDc5MzY1LCA3OTM3MywgNzkzODEsIDc5MzkwLCA3OTM5OSwgNzk0MDcsIDc5NDE2LCAKKyAgICA3OTQyNCwgNzk0MzIsIDc5NDQwLCA3OTQ0OSwgNzk0NTcsIDc5NDY2LCA3OTQ3NCwgNzk0ODEsIDc5NDg4LCA3OTQ5NiwgCisgICAgNzk1MDMsIDc5NTExLCA3OTUxOCwgNzk1MjYsIDc5NTM0LCA3OTU0MywgNzk1NTEsIDc5NTYwLCA3OTU2OCwgNzk1NzYsIAorICAgIDc5NTg0LCA3OTU5MywgNzk2MDEsIDc5NjA4LCA3OTYxNSwgNzk2MjMsIDc5NjMwLCA3OTYzOCwgNzk2NDUsIDc5NjU1LCAKKyAgICA3OTY2NSwgNzk2NzUsIDc5Njg0LCA3OTY5MywgNzk3MDIsIDc5NzExLCA3OTcyMCwgNzk3MzAsIDc5NzQxLCA3OTc1MiwgCisgICAgNzk3NjIsIDc5NzczLCA3OTc4NCwgNzk3OTQsIDc5ODAzLCA3OTgxMiwgNzk4MjAsIDc5ODI5LCA3OTgzOCwgNzk4NDYsIAorICAgIDc5ODU1LCA3OTg2NCwgNzk4NzIsIDc5ODgxLCA3OTg5MCwgNzk4OTgsIDc5OTA3LCA3OTkxNiwgNzk5MjQsIDc5OTMzLCAKKyAgICA3OTk0MiwgNzk5NTAsIDc5OTU5LCA3OTk2NywgNzk5NzYsIDc5OTg0LCA3OTk5MiwgODAwMDEsIDgwMDA5LCA4MDAxOCwgCisgICAgODAwMjYsIDgwMDM0LCA4MDA0MywgODAwNTEsIDgwMDU4LCA4MDA2NSwgODAwNzQsIDgwMDgzLCA4MDA5MSwgODAxMDAsIAorICAgIDgwMTA5LCA4MDExNywgODAxMjcsIDgwMTM1LCA4MDE0MywgODAxNTAsIDgwMTU4LCA4MDE2NiwgODAxNzMsIDgwMTgzLCAKKyAgICA4MDE5MywgODAyMDQsIDgwMjE0LCA4MDIyNSwgODAyMzMsIDgwMjQxLCA4MDI1MCwgODAyNTgsIDgwMjY3LCA4MDI3NSwgCisgICAgODAyODMsIDgwMjkyLCA4MDMwMCwgODAzMDksIDgwMzE3LCA4MDMyNCwgODAzMzEsIDgwMzM4LCA4MDM0NSwgODAzNTMsIAorICAgIDgwMzYxLCA4MDM2OSwgODAzNzcsIDgwMzg2LCA4MDM5NCwgODA0MDIsIDgwNDExLCA4MDQxOSwgODA0MjcsIDgwNDM1LCAKKyAgICA4MDQ0NCwgODA0NTIsIDgwNDYwLCA4MDQ2OCwgODA0NzYsIDgwNDg0LCA4MDQ5MiwgODA1MDAsIDgwNTA4LCA4MDUxNiwgCisgICAgODA1MjUsIDgwNTMzLCA4MDU0MSwgODA1NDksIDgwNTU3LCA4MDU2NSwgODA1NzQsIDgwNTgzLCA4MDU5MSwgODA1OTksIAorICAgIDgwNjA3LCA4MDYxNiwgODA2MjQsIDgwNjMzLCA4MDY0MCwgODA2NDcsIDgwNjU1LCA4MDY2MiwgODA2NzAsIDgwNjc4LCAKKyAgICA4MDY4NywgODA2OTUsIDgwNzA0LCA4MDcxMiwgODA3MjAsIDgwNzMwLCA4MDczNywgODA3NDQsIDgwNzUyLCA4MDc1OSwgCisgICAgODA3NjcsIDgwNzc3LCA4MDc4OCwgODA3OTYsIDgwODA1LCA4MDgxMywgODA4MjIsIDgwODMwLCA4MDgzOSwgODA4NDcsIAorICAgIDgwODU2LCA4MDg2NCwgODA4NzMsIDgwODgyLCA4MDg5MCwgODA4OTgsIDgwOTA2LCA4MDkxNSwgODA5MjIsIDgwOTMwLCAKKyAgICA4MDkzOSwgODA5NDgsIDgwOTU3LCA4MDk2NiwgODA5NzQsIDgwOTgzLCA4MDk5MSwgODEwMDAsIDgxMDA4LCA4MTAxNywgCisgICAgODEwMjUsIDgxMDM0LCA4MTA0MiwgODEwNTAsIDgxMDU3LCA4MTA2NSwgODEwNzIsIDgxMDgxLCA4MTA4OSwgODEwOTgsIAorICAgIDgxMTA2LCA4MTExNSwgODExMjMsIDgxMTMxLCA4MTEzOSwgODExNDgsIDgxMTU2LCA4MTE2NSwgODExNzQsIDgxMTgzLCAKKyAgICA4MTE5MiwgODEyMDEsIDgxMjA5LCA4MTIxOCwgODEyMjYsIDgxMjM1LCA4MTI0MywgODEyNTIsIDgxMjYwLCA4MTI2OSwgCisgICAgODEyNzcsIDgxMjg1LCA4MTI5MiwgODEzMDAsIDgxMzA3LCA4MTMxNiwgODEzMjQsIDgxMzMzLCA4MTM0MSwgODEzNTAsIAorICAgIDgxMzU4LCA4MTM2NiwgODEzNzQsIDgxMzgzLCA4MTM5MSwgODE0MDAsIDgxNDA5LCA4MTQxOCwgODE0MjcsIDgxNDM1LCAKKyAgICA4MTQ0MywgODE0NTIsIDgxNDYwLCA4MTQ2OSwgODE0NzgsIDgxNDg2LCA4MTQ5NCwgODE1MDIsIDgxNTExLCA4MTUxOSwgCisgICAgODE1MjcsIDgxNTM2LCA4MTU0NCwgODE1NTIsIDgxNTYwLCA4MTU2OCwgODE1NzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxNTc4LCA4MTU4OCwgODE1OTgsIDgxNjA4LCA4MTYxOCwgODE2MjksIDgxNjM5LCAKKyAgICA4MTY0OSwgODE2NjAsIDgxNjY5LCA4MTY3OCwgODE2ODcsIDgxNjk3LCA4MTcwNywgODE3MTcsIDgxNzI4LCA4MTczOCwgCisgICAgODE3NDgsIDgxNzU4LCA4MTc2OCwgODE3NzgsIDgxNzg4LCA4MTc5OCwgODE4MDgsIDgxODE4LCA4MTgyOCwgODE4MzgsIAorICAgIDgxODQ5LCA4MTg2MCwgODE4NzAsIDgxODgwLCA4MTg5MSwgODE5MDIsIDgxOTEzLCA4MTkyMywgODE5MzMsIDgxOTQzLCAKKyAgICA4MTk1MywgODE5NjMsIDgxOTczLCA4MTk4MywgODE5OTQsIDgyMDA0LCA4MjAxNCwgODIwMjUsIDgyMDM2LCA4MjA0NywgCisgICAgODIwNTcsIDgyMDY3LCA4MjA3NywgODIwODcsIDgyMDk4LCA4MjEwOCwgODIxMTgsIDgyMTI5LCA4MjE0MCwgODIxNTAsIAorICAgIDgyMTYwLCA4MjE2OSwgODIxNzgsIDgyMTg3LCA4MjE5NiwgODIyMDUsIDgyMjE1LCAwLCAwLCA4MjIyNSwgODIyMzUsIAorICAgIDgyMjQ1LCA4MjI1NSwgODIyNjUsIDgyMjc2LCA4MjI4NiwgODIyOTYsIDgyMzA3LCA4MjMxNywgODIzMjgsIDgyMzM3LCAKKyAgICA4MjM0NiwgODIzNTcsIDgyMzY3LCA4MjM3OCwgODIzODksIDgyNDAxLCA4MjQxMSwgODI0MjIsIDgyNDMxLCA4MjQ0MSwgCisgICAgODI0NTEsIDgyNDYzLCA4MjQ3MywgODI0ODMsIDgyNDkzLCA4MjUwMywgODI1MTMsIDgyNTIyLCA4MjUzMSwgODI1NDAsIAorICAgIDgyNTQ5LCA4MjU1OSwgODI1NjksIDgyNTc5LCA4MjU4OSwgODI1OTksIDgyNjA5LCA4MjYxOSwgODI2MjksIDgyNjM5LCAKKyAgICA4MjY0OSwgODI2NTksIDgyNjY5LCA4MjY3OCwgODI2ODcsIDgyNjk2LCA4MjcwNiwgODI3MTYsIDgyNzI2LCA4MjczNiwgCisgICAgODI3NDYsIDgyNzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Mjc2NywgODI3ODIsIAorICAgIDgyNzk3LCA4MjgwMywgODI4MDksIDgyODE1LCA4MjgyMSwgODI4MjcsIDgyODMzLCA4MjgzOSwgODI4NDUsIDgyODUzLCAKKyAgICA4Mjg1NywgODI4NjAsIDAsIDAsIDgyODY4LCA4Mjg3MSwgODI4NzQsIDgyODc3LCA4Mjg4MCwgODI4ODMsIDgyODg2LCAKKyAgICA4Mjg4OSwgODI4OTIsIDgyODk1LCA4Mjg5OCwgODI5MDEsIDgyOTA0LCA4MjkwNywgODI5MTAsIDgyOTEzLCA4MjkxNiwgCisgICAgODI5MjQsIDgyOTMzLCA4Mjk0NCwgODI5NTIsIDgyOTYwLCA4Mjk2OSwgODI5NzgsIDgyOTg5LCA4MzAwMSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgODMwMTAsIDgzMDE1LCA4MzAyMCwgODMwMjcsIDgzMDM0LCA4MzA0MCwgODMwNDYsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDgzMDUxLCA4MzA2MSwgODMwNzEsIDgzMDgxLCA4MzA5MCwgODMxMDEsIDgzMTEwLCA4MzExOSwgCisgICAgODMxMjksIDgzMTM5LCA4MzE1MSwgODMxNjMsIDgzMTc0LCA4MzE4NSwgODMxOTYsIDgzMjA3LCA4MzIxNywgODMyMjcsIAorICAgIDgzMjM3LCA4MzI0NywgODMyNTgsIDgzMjY5LCA4MzI3MywgODMyNzgsIDgzMjg3LCA4MzI5NiwgODMzMDAsIDgzMzA0LCAKKyAgICA4MzMwOCwgODMzMTMsIDgzMzE4LCA4MzMyMywgODMzMjgsIDgzMzMxLCA4MzMzNSwgMCwgODMzNDAsIDgzMzQzLCA4MzM0NiwgCisgICAgODMzNTAsIDgzMzU0LCA4MzM1OSwgODMzNjMsIDgzMzY3LCA4MzM3MiwgODMzNzcsIDgzMzg0LCA4MzM5MSwgODMzOTQsIAorICAgIDgzMzk3LCA4MzQwMCwgODM0MDMsIDgzNDA2LCA4MzQxMCwgODM0MTQsIDAsIDgzNDE4LCA4MzQyMywgODM0MjcsIDgzNDMxLCAKKyAgICAwLCAwLCAwLCAwLCA4MzQzNiwgODM0NDEsIDgzNDQ4LCA4MzQ1MywgODM0NTgsIDAsIDgzNDYzLCA4MzQ2OCwgODM0NzMsIAorICAgIDgzNDc4LCA4MzQ4MywgODM0ODgsIDgzNDkzLCA4MzQ5OCwgODM1MDMsIDgzNTA4LCA4MzUxMywgODM1MTgsIDgzNTI3LCAKKyAgICA4MzUzNiwgODM1NDQsIDgzNTUyLCA4MzU2MSwgODM1NzAsIDgzNTc5LCA4MzU4OCwgODM1OTYsIDgzNjA0LCA4MzYxMiwgCisgICAgODM2MjAsIDgzNjI1LCA4MzYzMCwgODM2MzYsIDgzNjQyLCA4MzY0OCwgODM2NTQsIDgzNjYyLCA4MzY3MCwgODM2NzYsIAorICAgIDgzNjgyLCA4MzY4OCwgODM2OTQsIDgzNzAwLCA4MzcwNiwgODM3MTIsIDgzNzE4LCA4MzcyMywgODM3MjgsIDgzNzMzLCAKKyAgICA4MzczOCwgODM3NDMsIDgzNzQ4LCA4Mzc1MywgODM3NTgsIDgzNzY0LCA4Mzc3MCwgODM3NzYsIDgzNzgyLCA4Mzc4OCwgCisgICAgODM3OTQsIDgzODAwLCA4MzgwNiwgODM4MTIsIDgzODE4LCA4MzgyNCwgODM4MzAsIDgzODM2LCA4Mzg0MiwgODM4NDgsIAorICAgIDgzODU0LCA4Mzg2MCwgODM4NjYsIDgzODcyLCA4Mzg3OCwgODM4ODQsIDgzODkwLCA4Mzg5NiwgODM5MDIsIDgzOTA4LCAKKyAgICA4MzkxNCwgODM5MjAsIDgzOTI2LCA4MzkzMiwgODM5MzgsIDgzOTQ0LCA4Mzk1MCwgODM5NTYsIDgzOTYyLCA4Mzk2OCwgCisgICAgODM5NzQsIDgzOTgwLCA4Mzk4NiwgODM5OTIsIDgzOTk4LCA4NDAwNCwgODQwMTAsIDg0MDE2LCA4NDAyMiwgODQwMjgsIAorICAgIDg0MDM0LCA4NDA0MCwgODQwNDYsIDg0MDUyLCA4NDA1OCwgODQwNjQsIDg0MDcwLCA4NDA3NiwgODQwODIsIDg0MDg4LCAKKyAgICA4NDA5NCwgODQxMDAsIDg0MTA2LCA4NDExMiwgODQxMTgsIDg0MTIzLCA4NDEyOCwgODQxMzMsIDg0MTM4LCA4NDE0NCwgCisgICAgODQxNTAsIDg0MTU2LCA4NDE2MiwgODQxNjgsIDg0MTc0LCA4NDE4MCwgODQxODYsIDg0MTkyLCA4NDE5OCwgODQyMDQsIAorICAgIDg0MjEwLCA4NDIxNSwgODQyMjAsIDg0MjI1LCA4NDIzMCwgODQyNDIsIDg0MjU0LCA4NDI2NSwgODQyNzYsIDg0Mjg4LCAKKyAgICA4NDMwMCwgODQzMDgsIDAsIDAsIDg0MzE2LCAwLCA4NDMyNCwgODQzMjgsIDg0MzMyLCA4NDMzNSwgODQzMzksIDg0MzQzLCAKKyAgICA4NDM0NiwgODQzNDksIDg0MzUzLCA4NDM1NywgODQzNjAsIDg0MzYzLCA4NDM2NiwgODQzNjksIDg0Mzc0LCA4NDM3NywgCisgICAgODQzODEsIDg0Mzg0LCA4NDM4NywgODQzOTAsIDg0MzkzLCA4NDM5NiwgODQzOTksIDg0NDAyLCA4NDQwNSwgODQ0MDgsIAorICAgIDg0NDExLCA4NDQxNCwgODQ0MTgsIDg0NDIyLCA4NDQyNiwgODQ0MzAsIDg0NDM1LCA4NDQ0MCwgODQ0NDYsIDg0NDUyLCAKKyAgICA4NDQ1OCwgODQ0NjMsIDg0NDY5LCA4NDQ3NSwgODQ0ODEsIDg0NDg2LCA4NDQ5MiwgODQ0OTgsIDg0NTAzLCA4NDUwOCwgCisgICAgODQ1MTMsIDg0NTE4LCA4NDUyNCwgODQ1MzAsIDg0NTM1LCA4NDU0MCwgODQ1NDYsIDg0NTUxLCA4NDU1NywgODQ1NjMsIAorICAgIDg0NTY5LCA4NDU3NSwgODQ1ODEsIDg0NTg1LCA4NDU5MCwgODQ1OTQsIDg0NTk5LCA4NDYwMywgODQ2MDgsIDg0NjEzLCAKKyAgICA4NDYxOSwgODQ2MjUsIDg0NjMxLCA4NDYzNiwgODQ2NDIsIDg0NjQ4LCA4NDY1NCwgODQ2NTksIDg0NjY1LCA4NDY3MSwgCisgICAgODQ2NzYsIDg0NjgxLCA4NDY4NiwgODQ2OTEsIDg0Njk3LCA4NDcwMywgODQ3MDgsIDg0NzEzLCA4NDcxOSwgODQ3MjQsIAorICAgIDg0NzMwLCA4NDczNiwgODQ3NDIsIDg0NzQ4LCA4NDc1NCwgODQ3NTksIDg0NzYzLCA4NDc2OCwgODQ3NzEsIDg0Nzc2LCAKKyAgICA4NDc4MSwgODQ3ODcsIDg0NzkyLCA4NDc5NywgODQ4MDEsIDg0ODA3LCA4NDgxMiwgODQ4MTcsIDg0ODIyLCA4NDgyNywgCisgICAgODQ4MzIsIDg0ODM3LCA4NDg0MiwgODQ4NDgsIDg0ODU0LCA4NDg2MCwgODQ4NjgsIDg0ODcyLCA4NDg3NiwgODQ4ODAsIAorICAgIDg0ODg0LCA4NDg4OCwgODQ4OTIsIDg0ODk3LCA4NDkwMiwgODQ5MDcsIDg0OTEyLCA4NDkxNywgODQ5MjIsIDg0OTI3LCAKKyAgICA4NDkzMiwgODQ5MzcsIDg0OTQyLCA4NDk0NywgODQ5NTIsIDg0OTU3LCA4NDk2MSwgODQ5NjUsIDg0OTcwLCA4NDk3NSwgCisgICAgODQ5ODAsIDg0OTg1LCA4NDk4OSwgODQ5OTQsIDg0OTk5LCA4NTAwNCwgODUwMDksIDg1MDEzLCA4NTAxOCwgODUwMjMsIAorICAgIDg1MDI4LCA4NTAzMywgODUwMzcsIDg1MDQyLCA4NTA0NywgODUwNTEsIDg1MDU2LCA4NTA2MSwgODUwNjYsIDg1MDcxLCAKKyAgICA4NTA3NiwgODUwODAsIDg1MDg3LCA4NTA5NCwgODUwOTgsIDg1MTAzLCA4NTEwOCwgODUxMTMsIDg1MTE4LCA4NTEyMywgCisgICAgODUxMjgsIDg1MTMzLCA4NTEzOCwgODUxNDMsIDg1MTQ4LCA4NTE1MywgODUxNTgsIDg1MTYzLCA4NTE2OCwgODUxNzMsIAorICAgIDg1MTc4LCA4NTE4MywgODUxODgsIDg1MTkzLCA4NTE5OCwgODUyMDMsIDg1MjA4LCA4NTIxMywgODUyMTgsIDg1MjIzLCAKKyAgICA4NTIyOCwgODUyMzMsIDg1MjM4LCA4NTI0MywgMCwgMCwgMCwgODUyNDgsIDg1MjUyLCA4NTI1NywgODUyNjEsIDg1MjY2LCAKKyAgICA4NTI3MSwgMCwgMCwgODUyNzUsIDg1MjgwLCA4NTI4NSwgODUyODksIDg1Mjk0LCA4NTI5OSwgMCwgMCwgODUzMDQsIAorICAgIDg1MzA5LCA4NTMxMywgODUzMTgsIDg1MzIzLCA4NTMyOCwgMCwgMCwgODUzMzMsIDg1MzM4LCA4NTM0MywgMCwgMCwgMCwgCisgICAgODUzNDcsIDg1MzUxLCA4NTM1NSwgODUzNTksIDg1MzYyLCA4NTM2NiwgODUzNzAsIDAsIDg1Mzc0LCA4NTM4MCwgODUzODMsIAorICAgIDg1Mzg3LCA4NTM5MCwgODUzOTQsIDg1Mzk4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NTQwMiwgODU0MDgsIAorICAgIDg1NDE0LCA4NTQyMCwgODU0MjYsIDAsIDAsIDg1NDMwLCA4NTQzNiwgODU0NDIsIDg1NDQ4LCA4NTQ1NCwgODU0NjAsIAorICAgIDg1NDY3LCA4NTQ3NCwgODU0ODEsIDg1NDg4LCA4NTQ5NSwgODU1MDIsIDAsIDg1NTA5LCA4NTUxNiwgODU1MjMsIDg1NTI5LCAKKyAgICA4NTUzNiwgODU1NDMsIDg1NTUwLCA4NTU1NywgODU1NjMsIDg1NTcwLCA4NTU3NywgODU1ODQsIDg1NTkxLCA4NTU5NywgCisgICAgODU2MDQsIDg1NjExLCA4NTYxOCwgODU2MjUsIDg1NjMxLCA4NTYzOCwgODU2NDUsIDg1NjUyLCA4NTY1OSwgODU2NjYsIAorICAgIDg1NjczLCA4NTY4MCwgMCwgODU2ODcsIDg1NjkzLCA4NTcwMCwgODU3MDcsIDg1NzE0LCA4NTcyMSwgODU3MjgsIDg1NzM1LCAKKyAgICA4NTc0MiwgODU3NDksIDg1NzU2LCA4NTc2MywgODU3NzAsIDg1Nzc3LCA4NTc4MywgODU3OTAsIDg1Nzk3LCA4NTgwNCwgCisgICAgODU4MTEsIDAsIDg1ODE4LCA4NTgyNSwgMCwgODU4MzIsIDg1ODM5LCA4NTg0NiwgODU4NTMsIDg1ODYwLCA4NTg2NywgCisgICAgODU4NzQsIDg1ODgxLCA4NTg4OCwgODU4OTUsIDg1OTAyLCA4NTkwOSwgODU5MTYsIDg1OTIzLCA4NTkzMCwgMCwgMCwgCisgICAgODU5MzYsIDg1OTQxLCA4NTk0NiwgODU5NTEsIDg1OTU2LCA4NTk2MSwgODU5NjYsIDg1OTcxLCA4NTk3NiwgODU5ODEsIAorICAgIDg1OTg2LCA4NTk5MSwgODU5OTYsIDg2MDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NjAwNiwgODYwMTMsIAorICAgIDg2MDIwLCA4NjAyNywgODYwMzQsIDg2MDQxLCA4NjA0OCwgODYwNTUsIDg2MDYyLCA4NjA2OSwgODYwNzYsIDg2MDgzLCAKKyAgICA4NjA5MCwgODYwOTcsIDg2MTA0LCA4NjExMSwgODYxMTgsIDg2MTI1LCA4NjEzMiwgODYxMzksIDg2MTQ3LCA4NjE1NSwgCisgICAgODYxNjIsIDg2MTY5LCA4NjE3NCwgODYxODIsIDg2MTkwLCA4NjE5NywgODYyMDQsIDg2MjA5LCA4NjIxNiwgODYyMjEsIAorICAgIDg2MjI2LCA4NjIzMywgODYyMzgsIDg2MjQzLCA4NjI0OCwgODYyNTYsIDg2MjYxLCA4NjI2NiwgODYyNzMsIDg2Mjc4LCAKKyAgICA4NjI4MywgODYyOTAsIDg2Mjk3LCA4NjMwMiwgODYzMDcsIDg2MzEyLCA4NjMxNywgODYzMjIsIDg2MzI3LCA4NjMzMiwgCisgICAgODYzMzcsIDg2MzQyLCA4NjM0OSwgODYzNTQsIDg2MzYxLCA4NjM2NiwgODYzNzEsIDg2Mzc2LCA4NjM4MSwgODYzODYsIAorICAgIDg2MzkxLCA4NjM5NiwgODY0MDEsIDg2NDA2LCA4NjQxMSwgODY0MTYsIDg2NDIzLCA4NjQzMCwgODY0MzcsIDg2NDQ0LCAKKyAgICA4NjQ1MCwgODY0NTUsIDg2NDYyLCA4NjQ2NywgODY0NzIsIDg2NDgxLCA4NjQ4OCwgODY0OTcsIDg2NTA0LCA4NjUwOSwgCisgICAgODY1MTQsIDg2NTIyLCA4NjUyNywgODY1MzIsIDg2NTM3LCA4NjU0MiwgODY1NDcsIDg2NTU0LCA4NjU1OSwgODY1NjQsIAorICAgIDg2NTY5LCA4NjU3NCwgODY1NzksIDg2NTg2LCA4NjU5MywgODY2MDAsIDg2NjA3LCA4NjYxNCwgODY2MjEsIDg2NjI4LCAKKyAgICA4NjYzNSwgODY2NDIsIDg2NjQ5LCA4NjY1NiwgODY2NjMsIDg2NjcwLCA4NjY3NywgODY2ODQsIDg2NjkxLCA4NjY5OCwgCisgICAgODY3MDUsIDg2NzEyLCA4NjcxOSwgODY3MjYsIDg2NzMzLCA4Njc0MCwgODY3NDcsIDg2NzU0LCA4Njc2MSwgODY3NjgsIAorICAgIDg2Nzc1LCAwLCAwLCAwLCAwLCAwLCA4Njc4MiwgODY3OTAsIDg2Nzk4LCAwLCAwLCAwLCAwLCA4NjgwMywgODY4MDcsIAorICAgIDg2ODExLCA4NjgxNSwgODY4MTksIDg2ODIzLCA4NjgyNywgODY4MzEsIDg2ODM1LCA4NjgzOSwgODY4NDQsIDg2ODQ5LCAKKyAgICA4Njg1NCwgODY4NTksIDg2ODY0LCA4Njg2OSwgODY4NzQsIDg2ODc5LCA4Njg4NCwgODY4OTAsIDg2ODk2LCA4NjkwMiwgCisgICAgODY5MDksIDg2OTE2LCA4NjkyMywgODY5MzAsIDg2OTM3LCA4Njk0NCwgODY5NTAsIDg2OTU2LCA4Njk2MiwgODY5NjksIAorICAgIDg2OTc2LCA4Njk4MywgODY5OTAsIDg2OTk3LCA4NzAwNCwgODcwMTEsIDg3MDE4LCA4NzAyNSwgODcwMzIsIDg3MDM5LCAKKyAgICA4NzA0NiwgODcwNTMsIDg3MDYwLCAwLCAwLCAwLCA4NzA2NywgODcwNzUsIDg3MDgzLCA4NzA5MSwgODcwOTksIDg3MTA3LCAKKyAgICA4NzExNywgODcxMjcsIDg3MTM1LCA4NzE0MywgODcxNTEsIDg3MTU5LCA4NzE2NywgODcxNzMsIDg3MTgwLCA4NzE4OSwgCisgICAgODcxOTgsIDg3MjA3LCA4NzIxNiwgODcyMjUsIDg3MjM0LCA4NzI0NCwgODcyNTUsIDg3MjY1LCA4NzI3NiwgODcyODUsIAorICAgIDg3Mjk0LCA4NzMwMywgODczMTMsIDg3MzI0LCA4NzMzNCwgODczNDUsIDg3MzU2LCA4NzM2NSwgODczNzMsIDg3Mzc5LCAKKyAgICA4NzM4NSwgODczOTEsIDg3Mzk3LCA4NzQwNSwgODc0MTMsIDg3NDE5LCA4NzQyNiwgODc0MzYsIDg3NDQzLCA4NzQ1MCwgCisgICAgODc0NTcsIDg3NDY0LCA4NzQ3MSwgODc0ODEsIDg3NDg4LCA4NzQ5NSwgODc1MDMsIDg3NTExLCA4NzUyMCwgODc1MjksIAorICAgIDg3NTM4LCA4NzU0NywgODc1NTYsIDg3NTY0LCA4NzU3MywgODc1ODIsIDg3NTkxLCA4NzU5NSwgODc2MDIsIDg3NjA3LCAKKyAgICA4NzYxMiwgODc2MTYsIDg3NjIwLCA4NzYyNCwgODc2MjgsIDg3NjMzLCA4NzYzOCwgODc2NDQsIDg3NjUwLCA4NzY1NCwgCisgICAgODc2NjAsIDg3NjY0LCA4NzY2OCwgODc2NzIsIDg3Njc2LCA4NzY4MCwgODc2ODQsIDg3NjkwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4NzY5NCwgODc2OTksIDg3NzA0LCA4NzcwOSwgODc3MTQsIDg3NzIxLCA4NzcyNiwgODc3MzEsIDg3NzM2LCA4Nzc0MSwgCisgICAgODc3NDYsIDg3NzUxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4Nzc1NiwgODc3NjMsIDg3NzcyLCA4Nzc4MSwgODc3ODgsIDg3Nzk1LCA4NzgwMiwgCisgICAgODc4MDksIDg3ODE2LCA4NzgyMywgODc4MjksIDg3ODM2LCA4Nzg0MywgODc4NTAsIDg3ODU3LCA4Nzg2NCwgODc4NzEsIAorICAgIDg3ODc4LCA4Nzg4NSwgODc4OTQsIDg3OTAxLCA4NzkwOCwgODc5MTUsIDg3OTIyLCA4NzkyOSwgODc5MzYsIDg3OTQzLCAKKyAgICA4Nzk1MCwgODc5NTksIDg3OTY2LCA4Nzk3MywgODc5ODAsIDg3OTg3LCA4Nzk5NCwgODgwMDEsIDg4MDEwLCA4ODAxNywgCisgICAgODgwMjQsIDg4MDMxLCA4ODAzOCwgODgwNDcsIDg4MDU0LCA4ODA2MSwgODgwNjgsIDg4MDc2LCA4ODA4NSwgMCwgMCwgCisgICAgODgwOTQsIDg4MDk4LCA4ODEwMiwgODgxMDcsIDg4MTEyLCA4ODExNywgODgxMjIsIDg4MTI2LCA4ODEzMSwgODgxMzYsIAorICAgIDg4MTQxLCA4ODE0NiwgODgxNTEsIDg4MTU2LCA4ODE2MCwgODgxNjQsIDg4MTY4LCA4ODE3MywgODgxNzgsIDg4MTgyLCAKKyAgICA4ODE4NywgODgxOTIsIDg4MTk2LCA4ODIwMCwgODgyMDUsIDg4MjEwLCA4ODIxNSwgODgyMjAsIDg4MjI1LCAwLCAwLCAwLCAKKyAgICA4ODIzMCwgODgyMzQsIDg4MjM5LCA4ODI0NCwgODgyNDgsIDg4MjUzLCA4ODI1NywgODgyNjIsIDg4MjY3LCA4ODI3MiwgCisgICAgODgyNzcsIDg4MjgxLCA4ODI4NSwgODgyOTAsIDg4Mjk1LCA4ODMwMCwgODgzMDUsIDg4MzA5LCA4ODMxNCwgODgzMTgsIAorICAgIDg4MzIzLCA4ODMyOCwgODgzMzIsIDg4MzM3LCA4ODM0MiwgODgzNDcsIDg4MzUxLCA4ODM1NSwgODgzNjAsIDg4MzY1LCAKKyAgICA4ODM3MCwgODgzNzUsIDg4MzgwLCA4ODM4NSwgODgzOTAsIDg4Mzk1LCA4ODQwMCwgODg0MDUsIDg4NDEwLCA4ODQxNSwgCisgICAgODg0MjAsIDg4NDI1LCA4ODQzMCwgODg0MzUsIDg4NDQwLCA4ODQ0NSwgODg0NTAsIDg4NDU1LCA4ODQ2MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg0NjUsIDg4NDY5LCAKKyAgICA4ODQ3NCwgODg0NzksIDg4NDg0LCA4ODQ4OCwgODg0OTMsIDg4NDk4LCA4ODUwMywgODg1MDgsIDg4NTEyLCA4ODUxNiwgCisgICAgODg1MjEsIDg4NTI2LCA4ODUzMSwgODg1MzYsIDg4NTQwLCA4ODU0NSwgODg1NTAsIDg4NTU1LCA4ODU2MCwgODg1NjUsIAorICAgIDg4NTcwLCA4ODU3NCwgODg1NzksIDg4NTg0LCA4ODU4OSwgODg1OTQsIDg4NTk5LCA4ODYwNCwgODg2MDksIDAsIDg4NjE0LCAKKyAgICA4ODYxOSwgODg2MjQsIDg4NjMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODYzNiwgODg2NDEsIAorICAgIDg4NjQ2LCA4ODY1MSwgODg2NTYsIDg4NjYxLCA4ODY2NiwgODg2NzEsIDg4Njc2LCA4ODY4MSwgODg2ODYsIDg4NjkxLCAKKyAgICA4ODY5NiwgODg3MDEsIDg4NzA2LCA4ODcxMSwgODg3MTYsIDg4NzIxLCA4ODcyNiwgODg3MzEsIDg4NzM2LCA4ODc0MSwgCisgICAgODg3NDYsIDg4NzUxLCA4ODc1NiwgODg3NjEsIDg4NzY2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4ODc3MywgODg3NzgsIDg4NzgzLCAKKyAgICA4ODc4OCwgODg3OTMsIDg4Nzk4LCA4ODgwMywgODg4MDgsIDg4ODEzLCA4ODgxOCwgODg4MjMsIDg4ODI4LCA4ODgzMywgCisgICAgODg4MzgsIDg4ODQzLCA4ODg0OCwgODg4NTMsIDg4ODU4LCA4ODg2MywgODg4NjgsIDg4ODczLCA4ODg3OCwgODg4ODMsIAorICAgIDg4ODg4LCA4ODg5MywgODg4OTgsIDg4OTAzLCA4ODkwNywgODg5MTEsIDg4OTE1LCAwLCA4ODkyMCwgODg5MjYsIDg4OTMxLCAKKyAgICA4ODkzNiwgODg5NDEsIDg4OTQ2LCA4ODk1MiwgODg5NTgsIDg4OTY0LCA4ODk3MCwgODg5NzYsIDg4OTgyLCA4ODk4OCwgCisgICAgODg5OTQsIDg5MDAwLCA4OTAwNiwgODkwMTIsIDg5MDE4LCA4OTAyNCwgODkwMjksIDg5MDM1LCA4OTA0MSwgODkwNDYsIAorICAgIDg5MDUyLCA4OTA1NywgODkwNjMsIDg5MDY5LCA4OTA3NCwgODkwODAsIDg5MDg2LCA4OTA5MSwgODkwOTcsIDg5MTAzLCAKKyAgICA4OTEwOSwgODkxMTUsIDg5MTIxLCA4OTEyNywgMCwgMCwgMCwgMCwgODkxMzIsIDg5MTM4LCA4OTE0NCwgODkxNTAsIAorICAgIDg5MTU2LCA4OTE2MiwgODkxNjgsIDg5MTc0LCA4OTE4MCwgODkxODcsIDg5MTkyLCA4OTE5NywgODkyMDMsIDg5MjA5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4OTIxNSwgODkyMjAsIDg5MjI1LCAKKyAgICA4OTIzMCwgODkyMzYsIDg5MjQxLCA4OTI0NywgODkyNTMsIDg5MjU5LCA4OTI2NSwgODkyNzIsIDg5Mjc4LCA4OTI4NSwgCisgICAgODkyOTAsIDg5Mjk1LCA4OTMwMCwgODkzMDUsIDg5MzEwLCA4OTMxNSwgODkzMjAsIDg5MzI1LCA4OTMzMCwgODkzMzUsIAorICAgIDg5MzQwLCA4OTM0NSwgODkzNTAsIDg5MzU1LCA4OTM2MCwgODkzNjUsIDg5MzcwLCA4OTM3NSwgODkzODAsIDg5Mzg1LCAKKyAgICA4OTM5MCwgODkzOTUsIDg5NDAwLCA4OTQwNSwgODk0MTAsIDg5NDE1LCA4OTQyMCwgODk0MjUsIDg5NDMwLCA4OTQzNSwgCisgICAgODk0NDAsIDg5NDQ2LCA4OTQ1MSwgODk0NTcsIDg5NDYzLCA4OTQ2OSwgODk0NzUsIDg5NDgyLCA4OTQ4OCwgODk0OTUsIAorICAgIDg5NTAwLCA4OTUwNSwgODk1MTAsIDg5NTE1LCA4OTUyMCwgODk1MjUsIDg5NTMwLCA4OTUzNSwgODk1NDAsIDg5NTQ1LCAKKyAgICA4OTU1MCwgODk1NTUsIDg5NTYwLCA4OTU2NSwgODk1NzAsIDg5NTc1LCA4OTU4MCwgODk1ODUsIDg5NTkwLCA4OTU5NSwgCisgICAgODk2MDAsIDg5NjA1LCA4OTYxMCwgODk2MTUsIDg5NjIwLCA4OTYyNSwgODk2MzAsIDg5NjM1LCA4OTY0MCwgODk2NDUsIAorICAgIDg5NjUwLCA4OTY1NSwgODk2NjAsIDg5NjY1LCA4OTY3MCwgODk2NzUsIDg5NjgwLCA4OTY4NSwgODk2OTAsIDg5Njk1LCAKKyAgICA4OTcwMCwgODk3MDUsIDg5NzEwLCA4OTcxNSwgODk3MjAsIDg5NzI1LCA4OTczMCwgODk3MzUsIDg5NzQwLCA4OTc0NSwgCisgICAgODk3NTAsIDg5NzU1LCA4OTc2MCwgODk3NjUsIDg5NzcwLCA4OTc3NSwgODk3ODAsIDg5Nzg1LCA4OTc5MCwgODk3OTUsIAorICAgIDg5ODAwLCA4OTgwNSwgODk4MTAsIDg5ODE1LCA4OTgyMCwgODk4MjUsIDg5ODMwLCA4OTgzNSwgODk4NDAsIDg5ODQ1LCAKKyAgICA4OTg1MCwgODk4NTUsIDg5ODYwLCA4OTg2NSwgODk4NzAsIDg5ODc1LCA4OTg4MCwgODk4ODUsIDg5ODkwLCA4OTg5NSwgCisgICAgODk5MDAsIDg5OTA1LCA4OTkxMCwgODk5MTQsIDg5OTE5LCA4OTkyNCwgODk5MjksIDg5OTM0LCA4OTkzOSwgODk5NDQsIAorICAgIDg5OTQ5LCA4OTk1NCwgODk5NTksIDg5OTY0LCA4OTk2OSwgODk5NzQsIDg5OTc4LCA4OTk4MiwgODk5ODYsIDg5OTkwLCAKKyAgICA4OTk5NCwgODk5OTgsIDkwMDAyLCA5MDAwNywgOTAwMTIsIDAsIDAsIDkwMDE3LCA5MDAyMiwgOTAwMjYsIDkwMDMwLCAKKyAgICA5MDAzNCwgOTAwMzgsIDkwMDQyLCA5MDA0NiwgOTAwNTAsIDkwMDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjUxNSwgNjY1MjIsIAotICAgIDY2NTI5LCA2NjUzNiwgNjY1NDQsIDY2NTUxLCA2NjU1NywgNjY1NjMsIDY2NTcwLCA2NjU3NiwgNjY1ODIsIDY2NTg4LCAKLSAgICA2NjU5NSwgNjY2MDIsIDY2NjA5LCA2NjYxNiwgNjY2MjMsIDY2NjMwLCA2NjYzNywgNjY2NDQsIDY2NjUxLCA2NjY1OCwgCi0gICAgNjY2NjUsIDY2NjcyLCA2NjY3OSwgNjY2ODYsIDY2NjkyLCA2NjY5OSwgNjY3MDYsIDY2NzEzLCA2NjcyMCwgNjY3MjcsIAotICAgIDY2NzM0LCA2Njc0MSwgNjY3NDgsIDY2NzU1LCA2Njc2MiwgNjY3NjksIDY2Nzc2LCA2Njc4MywgNjY3OTAsIDY2Nzk3LCAKLSAgICA2NjgwNCwgNjY4MTEsIDY2ODE4LCA2NjgyNiwgNjY4MzQsIDY2ODQyLCA2Njg1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjY4NTgsIDY2ODYxLCA2Njg2NSwgNjY4NjksIDY2ODczLCAKLSAgICA2Njg3NywgNjY4ODEsIDY2ODg1LCA2Njg4OSwgNjY4OTMsIDY2ODk3LCA2NjkwMSwgNjY5MDUsIDY2OTA4LCA2NjkxMiwgCi0gICAgNjY5MTYsIDY2OTE5LCA2NjkyMywgNjY5MjcsIDY2OTMxLCA2NjkzNSwgNjY5MzksIDY2OTQzLCA2Njk0NywgNjY5NTAsIAotICAgIDY2OTUzLCA2Njk1NywgNjY5NjEsIDY2OTY1LCA2Njk2OCwgNjY5NzEsIDY2OTc0LCA2Njk3NywgNjY5ODAsIDY2OTgzLCAKLSAgICA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIDY3MDA5LCA2NzAxNCwgNjcwMTgsIDY3MDIyLCA2NzAyNiwgCi0gICAgNjcwMzAsIDY3MDM1LCA2NzA0MSwgNjcwNDYsIDY3MDUyLCA2NzA1NywgNjcwNjIsIDY3MDY2LCA2NzA3MiwgNjcwNzcsIAotICAgIDY3MDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzA4NiwgNjcwOTAsIDY3MDk0LCA2NzA5NywgNjcxMDEsIDY3MTA0LCAKLSAgICA2NzEwOCwgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjQsIDY3MTI4LCA2NzEzMywgNjcxMzYsIDY3MTQwLCA2NzE0NCwgCi0gICAgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTgsIDY3MTYyLCA2NzE2NiwgNjcxNzAsIDY3MTc0LCA2NzE3OCwgNjcxODIsIAotICAgIDY3MTg2LCA2NzE5MCwgNjcxOTQsIDY3MTk4LCA2NzIwMiwgNjcyMDYsIDY3MjEwLCA2NzIxNCwgNjcyMTgsIDY3MjIyLCAKLSAgICA2NzIyNiwgNjcyMzAsIDY3MjM0LCA2NzIzNywgNjcyNDEsIDY3MjQ1LCA2NzI0OSwgNjcyNTIsIDY3MjU1LCA2NzI1OCwgCi0gICAgNjcyNjIsIDY3MjY2LCA2NzI3MCwgNjcyNzQsIDY3Mjc4LCA2NzI4MSwgNjcyODUsIDY3MjkxLCA2NzI5NiwgNjczMDAsIAotICAgIDY3MzA1LCA2NzMwOSwgNjczMTQsIDY3MzE5LCA2NzMyNSwgNjczMzAsIDY3MzM2LCA2NzM0MCwgNjczNDUsIDY3MzUwLCAKLSAgICA2NzM1NCwgNjczNTksIDY3MzY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NzM2OCwgNjczNzEsIDY3Mzc1LCAKLSAgICA2NzM3OSwgNjczODIsIDY3Mzg1LCA2NzM4OCwgNjczOTEsIDY3Mzk0LCA2NzM5NywgNjc0MDAsIDY3NDAzLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5MDA1OCwgOTAwNjIsIDkwMDY2LCA5MDA3MCwgOTAwNzQsIDkwMDc4LCAwLCAwLCA5MDA4MywgMCwgCisgICAgOTAwODgsIDkwMDkyLCA5MDA5NywgOTAxMDIsIDkwMTA3LCA5MDExMiwgOTAxMTcsIDkwMTIyLCA5MDEyNywgOTAxMzIsIAorICAgIDkwMTM3LCA5MDE0MSwgOTAxNDYsIDkwMTUxLCA5MDE1NiwgOTAxNjEsIDkwMTY1LCA5MDE3MCwgOTAxNzUsIDkwMTgwLCAKKyAgICA5MDE4NSwgOTAxODksIDkwMTk0LCA5MDE5OSwgOTAyMDQsIDkwMjA5LCA5MDIxMywgOTAyMTgsIDkwMjIzLCA5MDIyOCwgCisgICAgOTAyMzMsIDkwMjM4LCA5MDI0MywgOTAyNDgsIDkwMjUzLCA5MDI1OCwgOTAyNjMsIDkwMjY4LCA5MDI3MywgOTAyNzcsIAorICAgIDkwMjgyLCA5MDI4NywgOTAyOTIsIDkwMjk3LCAwLCA5MDMwMiwgOTAzMDcsIDAsIDAsIDAsIDkwMzEyLCAwLCAwLCA5MDMxNywgCisgICAgOTAzMjIsIDkwMzI5LCA5MDMzNiwgOTAzNDMsIDkwMzUwLCA5MDM1NywgOTAzNjQsIDkwMzcxLCA5MDM3OCwgOTAzODUsIAorICAgIDkwMzkyLCA5MDM5OSwgOTA0MDYsIDkwNDEzLCA5MDQyMCwgOTA0MjcsIDkwNDM0LCA5MDQ0MSwgOTA0NDgsIDkwNDU1LCAKKyAgICA5MDQ2MiwgOTA0NjksIDAsIDkwNDc2LCA5MDQ4MywgOTA0ODksIDkwNDk1LCA5MDUwMSwgOTA1MDgsIDkwNTE1LCA5MDUyMywgCisgICAgOTA1MzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkwNTQwLCA5MDU0NSwgOTA1NTAsIDkwNTU1LCA5MDU2MCwgOTA1NjUsIAorICAgIDkwNTcwLCA5MDU3NSwgOTA1ODAsIDkwNTg1LCA5MDU5MCwgOTA1OTUsIDkwNjAwLCA5MDYwNSwgOTA2MTAsIDkwNjE1LCAKKyAgICA5MDYyMCwgOTA2MjUsIDkwNjMwLCA5MDYzNSwgOTA2NDAsIDkwNjQ1LCA5MDY1MCwgOTA2NTQsIDkwNjU5LCA5MDY2NCwgCisgICAgOTA2NzAsIDkwNjc0LCAwLCAwLCAwLCA5MDY3OCwgOTA2ODQsIDkwNjg4LCA5MDY5MywgOTA2OTgsIDkwNzAzLCA5MDcwNywgCisgICAgOTA3MTIsIDkwNzE2LCA5MDcyMSwgOTA3MjYsIDkwNzMwLCA5MDczNCwgOTA3MzgsIDkwNzQyLCA5MDc0NiwgOTA3NTEsIAorICAgIDkwNzU2LCA5MDc2MCwgOTA3NjUsIDkwNzcwLCA5MDc3NCwgOTA3NzksIDkwNzg0LCA5MDc4OSwgOTA3OTQsIDkwNzk5LCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5MDgwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc0MDYsIDY3NDEzLCA2NzQxOSwgNjc0MjUsIDY3NDMxLCAKLSAgICA2NzQzNywgNjc0NDMsIDY3NDQ5LCA2NzQ1NSwgNjc0NjEsIDY3NDY3LCA2NzQ3MywgNjc0ODAsIDY3NDg3LCA2NzQ5NCwgCi0gICAgNjc1MDEsIDY3NTA4LCA2NzUxNSwgNjc1MjIsIDY3NTI5LCA2NzUzNiwgNjc1NDMsIDY3NTQ5LCA2NzU1NiwgNjc1NjIsIAotICAgIDY3NTY5LCA2NzU3NiwgNjc1ODIsIDY3NTg4LCA2NzU5NSwgNjc2MDIsIDY3NjA5LCA2NzYxNSwgNjc2MjIsIDY3NjI5LCAKLSAgICA2NzYzNSwgNjc2NDIsIDY3NjQ4LCA2NzY1NSwgNjc2NjIsIDY3NjY4LCA2NzY3NCwgNjc2ODEsIDY3Njg3LCA2NzY5NCwgCi0gICAgNjc3MDEsIDY3NzEwLCA2NzcxNywgNjc3MjQsIDY3NzI4LCA2NzczMywgNjc3MzgsIDY3NzQzLCA2Nzc0OCwgNjc3NTMsIAotICAgIDY3NzU3LCA2Nzc2MiwgNjc3NjYsIDY3NzcxLCA2Nzc3NiwgNjc3ODEsIDY3Nzg2LCA2Nzc5MCwgNjc3OTUsIDY3Nzk5LCAKLSAgICA2NzgwNCwgNjc4MDgsIDY3ODEzLCA2NzgxOCwgNjc4MjMsIDY3ODI4LCA2NzgzMiwgNjc4MzcsIDY3ODQyLCA2Nzg0NywgCi0gICAgNjc4NTMsIDY3ODU4LCA2Nzg2NCwgNjc4NzAsIDY3ODc2LCA2Nzg4MywgNjc4ODksIDY3ODk1LCA2NzkwMSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjc5MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY3OTEwLCA2NzkxMywgCi0gICAgNjc5MTYsIDY3OTE5LCA2NzkyMiwgNjc5MjYsIDY3OTI5LCA2NzkzMiwgNjc5MzYsIDY3OTQwLCA2Nzk0NCwgNjc5NDgsIAotICAgIDY3OTUyLCA2Nzk1NiwgNjc5NjAsIDY3OTY0LCA2Nzk2OCwgNjc5NzIsIDY3OTc2LCA2Nzk4MCwgNjc5ODQsIDY3OTg4LCAKLSAgICA2Nzk5MiwgNjc5OTYsIDY4MDAwLCA2ODAwNCwgNjgwMDgsIDY4MDExLCA2ODAxNSwgNjgwMTksIDY4MDIzLCA2ODAyNywgCi0gICAgNjgwMzEsIDY4MDM0LCA2ODAzOCwgNjgwNDEsIDY4MDQ0LCA2ODA0OCwgNjgwNTIsIDY4MDU2LCA2ODA2MCwgNjgwNjMsIAotICAgIDY4MDY4LCA2ODA3MiwgNjgwNzcsIDY4MDgyLCA2ODA4NiwgNjgwOTEsIDY4MDk1LCA2ODEwMCwgNjgxMDUsIDY4MTEwLCAKLSAgICA2ODExNSwgNjgxMjAsIDY4MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2ODEzMiwgNjgxMzcsIDY4MTQxLCAKLSAgICA2ODE0NiwgNjgxNTMsIDY4MTU4LCA2ODE2MywgNjgxNjcsIDY4MTcyLCA2ODE3NywgNjgxODEsIDY4MTg1LCA2ODE5MCwgCi0gICAgNjgxOTYsIDAsIDAsIDY4MjAyLCA2ODIwNiwgNjgyMDksIDY4MjEyLCA2ODIxNSwgNjgyMTgsIDY4MjIxLCA2ODIyNCwgCi0gICAgNjgyMjcsIDY4MjMwLCAwLCAwLCA2ODIzMywgNjgyMzgsIDY4MjQzLCA2ODI0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjgyNTYsIDY4MjYwLCA2ODI2NCwgNjgyNjgsIDY4MjcyLCA2ODI3NiwgNjgyODAsIDY4Mjg0LCA2ODI4OCwgNjgyOTIsIAotICAgIDY4Mjk2LCA2ODMwMCwgNjgzMDQsIDY4MzA4LCA2ODMxMiwgNjgzMTYsIDY4MzIwLCA2ODMyNCwgNjgzMjgsIDY4MzMyLCAKLSAgICA2ODMzNiwgNjgzNDAsIDY4MzQ0LCA2ODM0OCwgNjgzNTIsIDY4MzU2LCA2ODM2MCwgNjgzNjQsIDY4MzY4LCA2ODM3MiwgCi0gICAgNjgzNzYsIDY4MzgwLCA2ODM4NCwgNjgzODgsIDY4MzkyLCA2ODM5NiwgNjg0MDAsIDY4NDA0LCA2ODQwOCwgNjg0MTIsIAotICAgIDY4NDE2LCA2ODQyMCwgNjg0MjQsIDY4NDI4LCA2ODQzMiwgNjg0MzYsIDY4NDQwLCA2ODQ0NCwgNjg0NDgsIDY4NDUyLCAKLSAgICA2ODQ1NiwgNjg0NjAsIDY4NDY0LCA2ODQ2OCwgNjg0NzIsIDY4NDc2LCA2ODQ4MCwgNjg0ODQsIDY4NDg4LCA2ODQ5MiwgCi0gICAgNjg0OTYsIDY4NTAwLCA2ODUwNCwgNjg1MDgsIDY4NTEyLCA2ODUxNiwgNjg1MjAsIDY4NTI0LCA2ODUyOCwgNjg1MzIsIAotICAgIDY4NTM2LCA2ODU0MCwgNjg1NDQsIDY4NTQ4LCA2ODU1MiwgNjg1NTYsIDY4NTYwLCA2ODU2NCwgNjg1NjgsIDY4NTcyLCAKLSAgICA2ODU3NiwgNjg1ODAsIDY4NTg0LCA2ODU4OCwgNjg1OTIsIDY4NTk2LCA2ODYwMCwgNjg2MDQsIDY4NjA4LCA2ODYxMiwgCi0gICAgNjg2MTYsIDY4NjIwLCA2ODYyNCwgNjg2MjgsIDY4NjMyLCA2ODYzNiwgNjg2NDAsIDY4NjQ0LCA2ODY0OCwgNjg2NTIsIAotICAgIDY4NjU2LCA2ODY2MCwgNjg2NjQsIDY4NjY4LCA2ODY3MiwgNjg2NzYsIDY4NjgwLCA2ODY4NCwgNjg2ODgsIDY4NjkyLCAKLSAgICA2ODY5NiwgNjg3MDAsIDY4NzA0LCA2ODcwOCwgNjg3MTIsIDY4NzE2LCA2ODcyMCwgNjg3MjQsIDY4NzI4LCA2ODczMiwgCi0gICAgNjg3MzYsIDY4NzQwLCA2ODc0NCwgNjg3NDgsIDY4NzUyLCA2ODc1NiwgNjg3NjAsIDY4NzY0LCA2ODc2OCwgNjg3NzIsIAotICAgIDY4Nzc2LCA2ODc4MCwgNjg3ODQsIDY4Nzg4LCA2ODc5MiwgNjg3OTYsIDY4ODAwLCA2ODgwNCwgNjg4MDgsIDY4ODEyLCAKLSAgICA2ODgxNiwgNjg4MjAsIDY4ODI0LCA2ODgyOCwgNjg4MzIsIDY4ODM2LCA2ODg0MCwgNjg4NDQsIDY4ODQ4LCA2ODg1MiwgCi0gICAgNjg4NTYsIDY4ODYwLCA2ODg2NCwgNjg4NjgsIDY4ODcyLCA2ODg3NiwgNjg4ODAsIDY4ODg0LCA2ODg4OCwgNjg4OTIsIAotICAgIDY4ODk2LCA2ODkwMCwgNjg5MDQsIDY4OTA4LCA2ODkxMiwgNjg5MTYsIDY4OTIwLCA2ODkyNCwgNjg5MjgsIDY4OTMyLCAKLSAgICA2ODkzNiwgNjg5NDAsIDY4OTQ0LCA2ODk0OCwgNjg5NTIsIDY4OTU2LCA2ODk2MCwgNjg5NjQsIDY4OTY4LCA2ODk3MiwgCi0gICAgNjg5NzYsIDY4OTgwLCA2ODk4NCwgNjg5ODgsIDY4OTkyLCA2ODk5NiwgNjkwMDAsIDY5MDA0LCA2OTAwOCwgNjkwMTIsIAotICAgIDY5MDE2LCA2OTAyMCwgNjkwMjQsIDY5MDI4LCA2OTAzMiwgNjkwMzYsIDY5MDQwLCA2OTA0NCwgNjkwNDgsIDY5MDUyLCAKLSAgICA2OTA1NiwgNjkwNjAsIDY5MDY0LCA2OTA2OCwgNjkwNzIsIDY5MDc2LCA2OTA4MCwgNjkwODQsIDY5MDg4LCA2OTA5MiwgCi0gICAgNjkwOTYsIDY5MTAwLCA2OTEwNCwgNjkxMDgsIDY5MTEyLCA2OTExNiwgNjkxMjAsIDY5MTI0LCA2OTEyOCwgNjkxMzIsIAotICAgIDY5MTM2LCA2OTE0MCwgNjkxNDQsIDY5MTQ4LCA2OTE1MiwgNjkxNTYsIDY5MTYwLCA2OTE2NCwgNjkxNjgsIDY5MTcyLCAKLSAgICA2OTE3NiwgNjkxODAsIDY5MTg0LCA2OTE4OCwgNjkxOTIsIDY5MTk2LCA2OTIwMCwgNjkyMDQsIDY5MjA4LCA2OTIxMiwgCi0gICAgNjkyMTYsIDY5MjIwLCA2OTIyNCwgNjkyMjgsIDY5MjMyLCA2OTIzNiwgNjkyNDAsIDY5MjQ0LCA2OTI0OCwgNjkyNTIsIAotICAgIDY5MjU2LCA2OTI2MCwgNjkyNjQsIDY5MjY4LCA2OTI3MiwgNjkyNzYsIDY5MjgwLCA2OTI4NCwgNjkyODgsIDY5MjkyLCAKLSAgICA2OTI5NiwgNjkzMDAsIDY5MzA0LCA2OTMwOCwgNjkzMTIsIDY5MzE2LCA2OTMyMCwgNjkzMjQsIDY5MzI4LCA2OTMzMiwgCi0gICAgNjkzMzYsIDY5MzQwLCA2OTM0NCwgNjkzNDgsIDY5MzUyLCA2OTM1NiwgNjkzNjAsIDY5MzY0LCA2OTM2OCwgNjkzNzIsIAotICAgIDY5Mzc2LCA2OTM4MCwgNjkzODQsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIDY5NDAwLCA2OTQwNCwgNjk0MDgsIDY5NDEyLCAKLSAgICA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCA2OTQ0MCwgNjk0NDQsIDY5NDQ4LCA2OTQ1MiwgCi0gICAgNjk0NTYsIDY5NDYwLCAwLCAwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgNjk0ODAsIDY5NDg0LCA2OTQ4OCwgCi0gICAgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA4LCA2OTUxMiwgNjk1MTYsIDY5NTIwLCA2OTUyNCwgNjk1MjgsIAotICAgIDY5NTMyLCA2OTUzNiwgNjk1NDAsIDY5NTQ0LCA2OTU0OCwgNjk1NTIsIDY5NTU2LCA2OTU2MCwgNjk1NjQsIDY5NTY4LCAKLSAgICA2OTU3MiwgNjk1NzYsIDY5NTgwLCA2OTU4NCwgNjk1ODgsIDY5NTkyLCA2OTU5NiwgNjk2MDAsIDY5NjA0LCA2OTYwOCwgCi0gICAgNjk2MTIsIDY5NjE2LCA2OTYyMCwgNjk2MjQsIDY5NjI4LCA2OTYzMiwgNjk2MzYsIDY5NjQwLCA2OTY0NCwgNjk2NDgsIAotICAgIDY5NjUyLCA2OTY1NiwgNjk2NjAsIDY5NjY0LCA2OTY2OCwgNjk2NzIsIDY5Njc2LCA2OTY4MCwgNjk2ODQsIDY5Njg4LCAKLSAgICA2OTY5MiwgNjk2OTYsIDAsIDAsIDAsIDAsIDAsIDY5NzAwLCA2OTcwNCwgNjk3MDgsIDY5NzEyLCA2OTcxNiwgNjk3MjAsIAotICAgIDY5NzI0LCA2OTcyOCwgNjk3MzIsIDY5NzM2LCA2OTc0MCwgNjk3NDQsIDY5NzQ4LCA2OTc1MiwgNjk3NTYsIDY5NzYwLCAKLSAgICA2OTc2NCwgNjk3NjgsIDY5NzcyLCA2OTc3NiwgNjk3ODAsIDY5Nzg0LCA2OTc4OCwgNjk3OTIsIDY5Nzk2LCA2OTgwMCwgCi0gICAgNjk4MDQsIDY5ODA4LCA2OTgxMiwgNjk4MTYsIDY5ODIwLCA2OTgyNCwgNjk4MjgsIDY5ODMyLCA2OTgzNiwgNjk4NDAsIAotICAgIDY5ODQ0LCA2OTg0OCwgNjk4NTIsIDY5ODU2LCA2OTg2MCwgNjk4NjQsIDY5ODY4LCA2OTg3MiwgNjk4NzYsIDY5ODgwLCAKLSAgICA2OTg4NCwgNjk4ODgsIDY5ODkyLCA2OTg5NiwgNjk5MDAsIDY5OTA0LCA2OTkwOCwgNjk5MTIsIDY5OTE2LCA2OTkyMCwgCi0gICAgNjk5MjQsIDY5OTI4LCA2OTkzMiwgNjk5MzYsIDY5OTQwLCA2OTk0NCwgNjk5NDgsIDY5OTUyLCA2OTk1NiwgNjk5NjAsIAotICAgIDY5OTY0LCA2OTk2OCwgNjk5NzIsIDY5OTc2LCA2OTk4MCwgNjk5ODQsIDY5OTg4LCA2OTk5MiwgNjk5OTYsIDcwMDAwLCAKLSAgICA3MDAwNCwgNzAwMDgsIDcwMDEyLCA3MDAxNiwgNzAwMjAsIDcwMDI0LCA3MDAyOCwgNzAwMzIsIDcwMDM2LCA3MDA0MCwgCi0gICAgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgNzAwNjgsIDcwMDcyLCA3MDA3NiwgNzAwODAsIAotICAgIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDQsIDcwMTA4LCA3MDExMiwgNzAxMTYsIDcwMTIwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MDEyNCwgNzAxMjksIDcwMTM0LCA3MDEzOSwgNzAxNDQsIAotICAgIDcwMTQ5LCA3MDE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzAxNjIsIDcwMTY5LCA3MDE3NiwgCi0gICAgNzAxODMsIDcwMTkwLCAwLCAwLCAwLCAwLCAwLCA3MDE5NywgNzAyMDQsIDcwMjExLCA3MDIyMSwgNzAyMjcsIDcwMjMzLCAKLSAgICA3MDIzOSwgNzAyNDUsIDcwMjUxLCA3MDI1NywgNzAyNjQsIDcwMjcwLCA3MDI3NiwgNzAyODIsIDcwMjkxLCA3MDMwMCwgCi0gICAgNzAzMTIsIDcwMzI0LCA3MDMzMCwgNzAzMzYsIDcwMzQyLCA3MDM0OSwgNzAzNTYsIDcwMzYzLCA3MDM3MCwgNzAzNzcsIDAsIAotICAgIDcwMzg0LCA3MDM5MSwgNzAzOTgsIDcwNDA2LCA3MDQxMywgMCwgNzA0MjAsIDAsIDcwNDI3LCA3MDQzNCwgMCwgNzA0NDEsIAotICAgIDcwNDQ5LCAwLCA3MDQ1NiwgNzA0NjMsIDcwNDcwLCA3MDQ3NywgNzA0ODQsIDcwNDkxLCA3MDQ5OCwgNzA1MDUsIDcwNTEyLCAKLSAgICA3MDUxOSwgNzA1MjQsIDcwNTMxLCA3MDUzOCwgNzA1NDQsIDcwNTUwLCA3MDU1NiwgNzA1NjIsIDcwNTY4LCA3MDU3NCwgCi0gICAgNzA1ODAsIDcwNTg2LCA3MDU5MiwgNzA1OTgsIDcwNjA0LCA3MDYxMCwgNzA2MTYsIDcwNjIyLCA3MDYyOCwgNzA2MzQsIAotICAgIDcwNjQwLCA3MDY0NiwgNzA2NTIsIDcwNjU4LCA3MDY2NCwgNzA2NzAsIDcwNjc2LCA3MDY4MiwgNzA2ODgsIDcwNjk0LCAKLSAgICA3MDcwMCwgNzA3MDYsIDcwNzEyLCA3MDcxOCwgNzA3MjQsIDcwNzMwLCA3MDczNiwgNzA3NDIsIDcwNzQ4LCA3MDc1NCwgCi0gICAgNzA3NjAsIDcwNzY2LCA3MDc3MiwgNzA3NzgsIDcwNzg0LCA3MDc5MCwgNzA3OTYsIDcwODAyLCA3MDgwOCwgNzA4MTQsIAotICAgIDcwODIwLCA3MDgyNiwgNzA4MzIsIDcwODM4LCA3MDg0NCwgNzA4NTAsIDcwODU2LCA3MDg2MiwgNzA4NjgsIDcwODc0LCAKLSAgICA3MDg4MCwgNzA4ODYsIDcwODkyLCA3MDg5OCwgNzA5MDQsIDcwOTEwLCA3MDkxNiwgNzA5MjIsIDcwOTI4LCA3MDkzNCwgCi0gICAgNzA5NDAsIDcwOTQ2LCA3MDk1MiwgNzA5NTgsIDcwOTY0LCA3MDk3MCwgNzA5NzYsIDcwOTgyLCA3MDk4OCwgNzA5OTQsIAotICAgIDcxMDAyLCA3MTAxMCwgNzEwMTYsIDcxMDIyLCA3MTAyOCwgNzEwMzQsIDcxMDQzLCA3MTA1MiwgNzEwNjAsIDcxMDY4LCAKLSAgICA3MTA3NiwgNzEwODQsIDcxMDkyLCA3MTEwMCwgNzExMDgsIDcxMTE2LCA3MTEyMywgNzExMzAsIDcxMTQwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA3MTE1MCwgNzExNTYsIDcxMTYyLCA3MTE2OCwgNzExNzQsIDcxMTc5LCA3MTE4NCwgNzExOTAsIAotICAgIDcxMTk2LCA3MTIwMiwgNzEyMDgsIDcxMjE2LCA3MTIyMiwgNzEyMjgsIDcxMjM2LCA3MTI0NCwgNzEyNTIsIDcxMjYwLCAKLSAgICA3MTI2NSwgNzEyNzAsIDcxMjc1LCA3MTI4MCwgNzEyOTIsIDcxMzA0LCA3MTMxNCwgNzEzMjQsIDcxMzM1LCA3MTM0NiwgCi0gICAgNzEzNTcsIDcxMzY4LCA3MTM3OCwgNzEzODgsIDcxMzk5LCA3MTQxMCwgNzE0MjEsIDcxNDMyLCA3MTQ0MiwgNzE0NTIsIAotICAgIDcxNDYyLCA3MTQ3NywgNzE0OTIsIDcxNTA3LCA3MTUxNCwgNzE1MjEsIDcxNTI4LCA3MTUzNSwgNzE1NDUsIDcxNTU1LCAKLSAgICA3MTU2NSwgNzE1NzYsIDcxNTg2LCA3MTU5NCwgNzE2MDIsIDcxNjEwLCA3MTYxOCwgNzE2MjcsIDcxNjM1LCA3MTY0MywgCi0gICAgNzE2NTEsIDcxNjU5LCA3MTY2NywgNzE2NzYsIDcxNjg0LCA3MTY5MiwgNzE3MDAsIDcxNzA5LCA3MTcxNywgNzE3MjQsIAotICAgIDcxNzMxLCA3MTczOCwgNzE3NDUsIDcxNzUyLCA3MTc1OSwgNzE3NjYsIDcxNzc0LCA3MTc4MiwgNzE3OTAsIDcxNzk4LCAKLSAgICA3MTgwNiwgNzE4MTQsIDcxODIyLCA3MTgzMCwgNzE4MzgsIDcxODQ2LCA3MTg1NCwgNzE4NjIsIDcxODcwLCA3MTg3OCwgCi0gICAgNzE4ODYsIDcxODk0LCA3MTkwMiwgNzE5MTAsIDcxOTE4LCA3MTkyNiwgNzE5MzQsIDcxOTQzLCA3MTk1MSwgNzE5NTksIAotICAgIDcxOTY3LCA3MTk3NiwgNzE5ODQsIDcxOTkyLCA3MjAwMCwgNzIwMDgsIDcyMDE2LCA3MjAyNCwgNzIwMzIsIDcyMDQxLCAKLSAgICA3MjA0OSwgNzIwNTYsIDcyMDYzLCA3MjA3MCwgNzIwNzcsIDcyMDg1LCA3MjA5MiwgNzIwOTksIDcyMTA2LCA3MjExMywgCi0gICAgNzIxMjAsIDcyMTI4LCA3MjEzNSwgNzIxNDMsIDcyMTUxLCA3MjE1OSwgNzIxNjcsIDcyMTc2LCA3MjE4NCwgNzIxOTIsIAotICAgIDcyMjAwLCA3MjIwOSwgNzIyMTcsIDcyMjI0LCA3MjIzMSwgNzIyMzgsIDcyMjQ1LCA3MjI1MywgNzIyNjAsIDcyMjcwLCAKLSAgICA3MjI4MCwgNzIyOTAsIDcyMjk5LCA3MjMwOCwgNzIzMTcsIDcyMzI2LCA3MjMzNSwgNzIzNDUsIDcyMzU2LCA3MjM2NywgCi0gICAgNzIzNzcsIDcyMzg4LCA3MjM5OSwgNzI0MDksIDcyNDE4LCA3MjQyNywgNzI0MzUsIDcyNDQ0LCA3MjQ1MywgNzI0NjEsIAotICAgIDcyNDcwLCA3MjQ3OSwgNzI0ODcsIDcyNDk2LCA3MjUwNSwgNzI1MTMsIDcyNTIyLCA3MjUzMSwgNzI1MzksIDcyNTQ4LCAKLSAgICA3MjU1NywgNzI1NjUsIDcyNTc0LCA3MjU4MiwgNzI1OTEsIDcyNTk5LCA3MjYwNywgNzI2MTUsIDcyNjIzLCA3MjYzMiwgCi0gICAgNzI2NDAsIDcyNjQ3LCA3MjY1NSwgNzI2NjIsIDcyNjY5LCA3MjY3NiwgNzI2ODUsIDcyNjk0LCA3MjcwMiwgNzI3MTEsIAotICAgIDcyNzIwLCA3MjcyOCwgNzI3MzgsIDcyNzQ2LCA3Mjc1NCwgNzI3NjEsIDcyNzY5LCA3Mjc3NywgNzI3ODQsIDcyNzk0LCAKLSAgICA3MjgwNCwgNzI4MTQsIDcyODI0LCA3MjgzNSwgNzI4NDMsIDcyODUxLCA3Mjg1OSwgNzI4NjcsIDcyODc2LCA3Mjg4NCwgCi0gICAgNzI4OTIsIDcyOTAwLCA3MjkwOCwgNzI5MTcsIDcyOTI1LCA3MjkzMiwgNzI5MzksIDcyOTQ2LCA3Mjk1MywgNzI5NjAsIAotICAgIDcyOTY3LCA3Mjk3NSwgNzI5ODMsIDcyOTkxLCA3Mjk5OSwgNzMwMDcsIDczMDE1LCA3MzAyMywgNzMwMzEsIDczMDM5LCAKLSAgICA3MzA0NywgNzMwNTUsIDczMDYzLCA3MzA3MSwgNzMwNzksIDczMDg3LCA3MzA5NSwgNzMxMDMsIDczMTExLCA3MzExOSwgCi0gICAgNzMxMjcsIDczMTM1LCA3MzE0MywgNzMxNTEsIDczMTU5LCA3MzE2NywgNzMxNzUsIDczMTgzLCA3MzE5MSwgNzMxOTgsIAotICAgIDczMjA1LCA3MzIxMiwgNzMyMTksIDczMjI3LCA3MzIzNCwgNzMyNDEsIDczMjQ4LCA3MzI1NSwgNzMyNjMsIDczMjcxLCAKLSAgICA3MzI3OSwgNzMyODcsIDczMjk2LCA3MzMwNCwgNzMzMTIsIDczMzIyLCA3MzMyOSwgNzMzMzYsIDczMzQzLCA3MzM1MCwgCi0gICAgNzMzNTgsIDczMzY4LCA3MzM3OSwgNzMzODcsIDczMzk2LCA3MzQwNCwgNzM0MTMsIDczNDIxLCA3MzQzMCwgNzM0MzgsIAotICAgIDczNDQ3LCA3MzQ1NSwgNzM0NjQsIDczNDcyLCA3MzQ4MCwgNzM0ODcsIDczNDk1LCA3MzUwNCwgNzM1MTEsIDczNTE5LCAKLSAgICA3MzUyOCwgNzM1MzcsIDczNTQ2LCA3MzU1NSwgNzM1NjMsIDczNTcyLCA3MzU4MCwgNzM1ODksIDczNTk3LCA3MzYwNiwgCi0gICAgNzM2MTQsIDczNjIzLCA3MzYzMSwgNzM2MzksIDczNjQ2LCA3MzY1NCwgNzM2NjEsIDczNjY5LCA3MzY3NiwgNzM2ODUsIAotICAgIDczNjkzLCA3MzcwMiwgNzM3MTAsIDczNzE4LCA3MzcyNiwgNzM3MzQsIDczNzQyLCA3Mzc1MSwgNzM3NjAsIDczNzY5LCAKLSAgICA3Mzc3OCwgNzM3ODcsIDczNzk1LCA3MzgwNCwgNzM4MTIsIDczODIxLCA3MzgyOSwgNzM4MzgsIDczODQ2LCA3Mzg1NSwgCi0gICAgNzM4NjMsIDczODcxLCA3Mzg3OCwgNzM4ODYsIDczODkzLCA3MzkwMSwgNzM5MDgsIDczOTE3LCA3MzkyNSwgNzM5MzQsIAotICAgIDczOTQyLCA3Mzk1MCwgNzM5NTgsIDczOTY2LCA3Mzk3NCwgNzM5ODMsIDczOTkyLCA3NDAwMSwgNzQwMTAsIDc0MDE4LCAKLSAgICA3NDAyNiwgNzQwMzQsIDc0MDQyLCA3NDA1MSwgNzQwNjAsIDc0MDY4LCA3NDA3NiwgNzQwODQsIDc0MDkyLCA3NDEwMCwgCi0gICAgNzQxMDgsIDc0MTE2LCA3NDEyNCwgNzQxMzIsIDc0MTQwLCA3NDE0OCwgNzQxNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MTU4LCA3NDE2OCwgNzQxNzgsIDc0MTg4LCA3NDE5OCwgNzQyMDgsIDc0MjE4LCAKLSAgICA3NDIyOCwgNzQyMzgsIDc0MjQ3LCA3NDI1NiwgNzQyNjUsIDc0Mjc1LCA3NDI4NSwgNzQyOTUsIDc0MzA2LCA3NDMxNiwgCi0gICAgNzQzMjYsIDc0MzM2LCA3NDM0NiwgNzQzNTYsIDc0MzY2LCA3NDM3NiwgNzQzODYsIDc0Mzk2LCA3NDQwNiwgNzQ0MTYsIAotICAgIDc0NDI2LCA3NDQzNiwgNzQ0NDYsIDc0NDU2LCA3NDQ2NywgNzQ0NzcsIDc0NDg3LCA3NDQ5NywgNzQ1MDcsIDc0NTE3LCAKLSAgICA3NDUyNywgNzQ1MzcsIDc0NTQ3LCA3NDU1NywgNzQ1NjgsIDc0NTc4LCA3NDU4OCwgNzQ1OTksIDc0NjA5LCA3NDYxOSwgCi0gICAgNzQ2MjksIDc0NjM5LCA3NDY0OCwgNzQ2NTcsIDc0NjY3LCA3NDY3NiwgNzQ2ODUsIDc0Njk0LCA3NDcwMywgNzQ3MTIsIAotICAgIDc0NzIxLCA3NDczMCwgNzQ3MzksIDc0NzQ4LCA3NDc1NywgNzQ3NjYsIDc0Nzc1LCAwLCAwLCA3NDc4NCwgNzQ3OTMsIAotICAgIDc0ODAzLCA3NDgxMywgNzQ4MjMsIDc0ODM0LCA3NDg0NCwgNzQ4NTQsIDc0ODY1LCA3NDg3NSwgNzQ4ODYsIDc0ODk1LCAKLSAgICA3NDkwNCwgNzQ5MTQsIDc0OTI0LCA3NDkzNSwgNzQ5NDUsIDc0OTU2LCA3NDk2NiwgNzQ5NzcsIDc0OTg2LCA3NDk5NiwgCi0gICAgNzUwMDYsIDc1MDE3LCA3NTAyNywgNzUwMzcsIDc1MDQ3LCA3NTA1NiwgNzUwNjUsIDc1MDc0LCA3NTA4MywgNzUwOTIsIAotICAgIDc1MTAxLCA3NTExMSwgNzUxMjEsIDc1MTMxLCA3NTE0MCwgNzUxNTAsIDc1MTYwLCA3NTE3MCwgNzUxNzksIDc1MTg4LCAKLSAgICA3NTE5OCwgNzUyMDcsIDc1MjE3LCA3NTIyNiwgNzUyMzUsIDc1MjQ0LCA3NTI1NCwgNzUyNjQsIDc1Mjc0LCA3NTI4NCwgCi0gICAgNzUyOTQsIDc1MzA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTMxNCwgNzUzMjksIAotICAgIDc1MzQ0LCA3NTM1MCwgNzUzNTYsIDc1MzYyLCA3NTM2OCwgNzUzNzQsIDc1MzgwLCA3NTM4NiwgNzUzOTIsIDc1NDAwLCAKLSAgICA3NTQwNCwgNzU0MDcsIDAsIDAsIDc1NDE1LCA3NTQxOCwgNzU0MjEsIDc1NDI0LCA3NTQyNywgNzU0MzAsIDc1NDMzLCAKLSAgICA3NTQzNiwgNzU0MzksIDc1NDQyLCA3NTQ0NSwgNzU0NDgsIDc1NDUxLCA3NTQ1NCwgNzU0NTcsIDc1NDYwLCA3NTQ2MywgCi0gICAgNzU0NzAsIDc1NDc4LCA3NTQ4OCwgNzU0OTUsIDc1NTAyLCA3NTUxMCwgNzU1MTgsIDc1NTI4LCA3NTUzOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzU1NDcsIDc1NTUyLCA3NTU1NywgNzU1NjQsIDc1NTcxLCA3NTU3NywgNzU1ODMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NTg4LCA3NTU5NywgNzU2MDYsIDc1NjE1LCA3NTYyMywgNzU2MzMsIDc1NjQxLCA3NTY0OSwgCi0gICAgNzU2NTgsIDc1NjY3LCA3NTY3OCwgNzU2ODksIDc1Njk5LCA3NTcwOSwgNzU3MTksIDc1NzI5LCA3NTczOCwgNzU3NDcsIAotICAgIDc1NzU2LCA3NTc2NSwgNzU3NzUsIDc1Nzg1LCA3NTc4OSwgNzU3OTQsIDc1ODAyLCA3NTgxMCwgNzU4MTQsIDc1ODE4LCAKLSAgICA3NTgyMiwgNzU4MjcsIDc1ODMyLCA3NTgzNywgNzU4NDIsIDc1ODQ1LCA3NTg0OSwgMCwgNzU4NTQsIDc1ODU3LCA3NTg2MCwgCi0gICAgNzU4NjQsIDc1ODY4LCA3NTg3MywgNzU4NzcsIDc1ODgxLCA3NTg4NiwgNzU4OTEsIDc1ODk4LCA3NTkwNSwgNzU5MDgsIAotICAgIDc1OTExLCA3NTkxNCwgNzU5MTcsIDc1OTIwLCA3NTkyNCwgNzU5MjgsIDAsIDc1OTMyLCA3NTkzNywgNzU5NDEsIDc1OTQ1LCAKLSAgICAwLCAwLCAwLCAwLCA3NTk1MCwgNzU5NTUsIDc1OTYyLCA3NTk2NywgNzU5NzIsIDAsIDc1OTc3LCA3NTk4MiwgNzU5ODcsIAotICAgIDc1OTkyLCA3NTk5NywgNzYwMDIsIDc2MDA3LCA3NjAxMiwgNzYwMTcsIDc2MDIyLCA3NjAyNywgNzYwMzIsIDc2MDQxLCAKLSAgICA3NjA1MCwgNzYwNTgsIDc2MDY2LCA3NjA3NSwgNzYwODQsIDc2MDkzLCA3NjEwMiwgNzYxMTAsIDc2MTE4LCA3NjEyNiwgCi0gICAgNzYxMzQsIDc2MTM5LCA3NjE0NCwgNzYxNTAsIDc2MTU2LCA3NjE2MiwgNzYxNjgsIDc2MTc2LCA3NjE4NCwgNzYxOTAsIAotICAgIDc2MTk2LCA3NjIwMiwgNzYyMDgsIDc2MjE0LCA3NjIyMCwgNzYyMjYsIDc2MjMyLCA3NjIzNywgNzYyNDIsIDc2MjQ3LCAKLSAgICA3NjI1MiwgNzYyNTcsIDc2MjYyLCA3NjI2NywgNzYyNzIsIDc2Mjc3LCA3NjI4MiwgNzYyODcsIDc2MjkyLCA3NjI5OCwgCi0gICAgNzYzMDQsIDc2MzEwLCA3NjMxNiwgNzYzMjIsIDc2MzI4LCA3NjMzNCwgNzYzNDAsIDc2MzQ2LCA3NjM1MiwgNzYzNTgsIAotICAgIDc2MzY0LCA3NjM3MCwgNzYzNzYsIDc2MzgyLCA3NjM4OCwgNzYzOTQsIDc2NDAwLCA3NjQwNiwgNzY0MTIsIDc2NDE4LCAKLSAgICA3NjQyNCwgNzY0MzAsIDc2NDM2LCA3NjQ0MiwgNzY0NDgsIDc2NDU0LCA3NjQ2MCwgNzY0NjYsIDc2NDcyLCA3NjQ3OCwgCi0gICAgNzY0ODQsIDc2NDkwLCA3NjQ5NiwgNzY1MDIsIDc2NTA4LCA3NjUxNCwgNzY1MjAsIDc2NTI2LCA3NjUzMiwgNzY1MzgsIAotICAgIDc2NTQ0LCA3NjU1MCwgNzY1NTYsIDc2NTYyLCA3NjU2OCwgNzY1NzQsIDc2NTgwLCA3NjU4NiwgNzY1OTIsIDc2NTk4LCAKLSAgICA3NjYwNCwgNzY2MDksIDc2NjE0LCA3NjYxOSwgNzY2MjQsIDc2NjI5LCA3NjYzNCwgNzY2MzksIDc2NjQ0LCA3NjY1MCwgCi0gICAgNzY2NTYsIDc2NjYyLCA3NjY2OCwgNzY2NzQsIDc2NjgwLCA3NjY4NiwgNzY2OTIsIDc2Njk4LCA3NjcwNCwgNzY3MTAsIAotICAgIDc2NzE2LCA3NjcyMSwgNzY3MjYsIDc2NzMxLCA3NjczNiwgNzY3NDcsIDc2NzU4LCA3Njc2OCwgNzY3NzgsIDc2Nzg5LCAKLSAgICA3NjgwMCwgNzY4MDcsIDAsIDAsIDc2ODE0LCAwLCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzMywgNzY4MzcsIDc2ODQxLCAKLSAgICA3Njg0NCwgNzY4NDcsIDc2ODUxLCA3Njg1NSwgNzY4NTgsIDc2ODYxLCA3Njg2NCwgNzY4NjcsIDc2ODcyLCA3Njg3NSwgCi0gICAgNzY4NzksIDc2ODgyLCA3Njg4NSwgNzY4ODgsIDc2ODkxLCA3Njg5NCwgNzY4OTcsIDc2OTAwLCA3NjkwMywgNzY5MDYsIAotICAgIDc2OTA5LCA3NjkxMiwgNzY5MTYsIDc2OTIwLCA3NjkyNCwgNzY5MjgsIDc2OTMzLCA3NjkzOCwgNzY5NDQsIDc2OTUwLCAKLSAgICA3Njk1NiwgNzY5NjEsIDc2OTY3LCA3Njk3MiwgNzY5NzcsIDc2OTgyLCA3Njk4OCwgNzY5OTQsIDc2OTk5LCA3NzAwNCwgCi0gICAgNzcwMDksIDc3MDE0LCA3NzAyMCwgNzcwMjYsIDc3MDMxLCA3NzAzNiwgNzcwNDIsIDc3MDQ3LCA3NzA1MiwgNzcwNTgsIAotICAgIDc3MDY0LCA3NzA3MCwgNzcwNzYsIDc3MDgwLCA3NzA4NSwgNzcwODksIDc3MDk0LCA3NzA5OCwgNzcxMDMsIDc3MTA4LCAKLSAgICA3NzExNCwgNzcxMjAsIDc3MTI2LCA3NzEzMSwgNzcxMzcsIDc3MTQyLCA3NzE0NywgNzcxNTIsIDc3MTU4LCA3NzE2NCwgCi0gICAgNzcxNjksIDc3MTc0LCA3NzE3OSwgNzcxODQsIDc3MTkwLCA3NzE5NiwgNzcyMDEsIDc3MjA2LCA3NzIxMiwgNzcyMTcsIAotICAgIDc3MjIyLCA3NzIyOCwgNzcyMzQsIDc3MjQwLCA3NzI0NiwgNzcyNTEsIDc3MjU1LCA3NzI2MCwgNzcyNjIsIDc3MjY3LCAKLSAgICA3NzI3MiwgNzcyNzgsIDc3MjgzLCA3NzI4OCwgNzcyOTIsIDc3Mjk4LCA3NzMwMywgNzczMDgsIDc3MzEzLCA3NzMxOCwgCi0gICAgNzczMjMsIDc3MzI4LCA3NzMzMywgNzczMzksIDc3MzQ1LCA3NzM1MSwgNzczNTksIDc3MzYzLCA3NzM2NywgNzczNzEsIAotICAgIDc3Mzc1LCA3NzM3OSwgNzczODMsIDc3Mzg4LCA3NzM5MywgNzczOTgsIDc3NDAzLCA3NzQwOCwgNzc0MTMsIDc3NDE4LCAKLSAgICA3NzQyMywgNzc0MjgsIDc3NDMzLCA3NzQzOCwgNzc0NDMsIDc3NDQ4LCA3NzQ1MiwgNzc0NTcsIDc3NDYyLCA3NzQ2NywgCi0gICAgNzc0NzIsIDc3NDc3LCA3NzQ4MSwgNzc0ODYsIDc3NDkxLCA3NzQ5NiwgNzc1MDEsIDc3NTA1LCA3NzUxMCwgNzc1MTUsIAotICAgIDc3NTIwLCA3NzUyNSwgNzc1MjksIDc3NTM0LCA3NzUzOSwgNzc1NDMsIDc3NTQ4LCA3NzU1MywgNzc1NTgsIDc3NTYzLCAKLSAgICA3NzU2OCwgNzc1NzIsIDc3NTc5LCA3NzU4NiwgNzc1OTAsIDc3NTk1LCA3NzYwMCwgNzc2MDUsIDc3NjEwLCA3NzYxNSwgCi0gICAgNzc2MjAsIDc3NjI1LCA3NzYzMCwgNzc2MzUsIDc3NjQwLCA3NzY0NSwgNzc2NTAsIDc3NjU1LCA3NzY2MCwgNzc2NjUsIAotICAgIDc3NjcwLCA3NzY3NSwgNzc2ODAsIDc3Njg1LCA3NzY5MCwgNzc2OTUsIDc3NzAwLCA3NzcwNSwgNzc3MTAsIDc3NzE1LCAKLSAgICA3NzcyMCwgNzc3MjUsIDc3NzMwLCA3NzczNSwgMCwgMCwgMCwgNzc3NDAsIDc3NzQ0LCA3Nzc0OSwgNzc3NTMsIDc3NzU4LCAKLSAgICA3Nzc2MywgMCwgMCwgNzc3NjcsIDc3NzcyLCA3Nzc3NywgNzc3ODEsIDc3Nzg2LCA3Nzc5MSwgMCwgMCwgNzc3OTYsIAotICAgIDc3ODAxLCA3NzgwNSwgNzc4MTAsIDc3ODE1LCA3NzgyMCwgMCwgMCwgNzc4MjUsIDc3ODMwLCA3NzgzNSwgMCwgMCwgMCwgCi0gICAgNzc4MzksIDc3ODQzLCA3Nzg0NywgNzc4NTAsIDc3ODUzLCA3Nzg1NywgNzc4NjEsIDAsIDc3ODY1LCA3Nzg3MSwgNzc4NzQsIAotICAgIDc3ODc4LCA3Nzg4MSwgNzc4ODUsIDc3ODg5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3Nzg5MywgNzc4OTksIAotICAgIDc3OTA1LCA3NzkxMSwgNzc5MTcsIDAsIDAsIDc3OTIxLCA3NzkyNywgNzc5MzMsIDc3OTM5LCA3Nzk0NSwgNzc5NTEsIAotICAgIDc3OTU4LCA3Nzk2NSwgNzc5NzIsIDc3OTc5LCA3Nzk4NiwgNzc5OTMsIDAsIDc4MDAwLCA3ODAwNywgNzgwMTQsIDc4MDIwLCAKLSAgICA3ODAyNywgNzgwMzQsIDc4MDQxLCA3ODA0OCwgNzgwNTQsIDc4MDYxLCA3ODA2OCwgNzgwNzUsIDc4MDgyLCA3ODA4OSwgCi0gICAgNzgwOTYsIDc4MTAzLCA3ODExMCwgNzgxMTcsIDc4MTIzLCA3ODEzMCwgNzgxMzcsIDc4MTQ0LCA3ODE1MSwgNzgxNTgsIAotICAgIDc4MTY1LCA3ODE3MiwgMCwgNzgxNzksIDc4MTg1LCA3ODE5MiwgNzgxOTksIDc4MjA2LCA3ODIxMywgNzgyMjAsIDc4MjI3LCAKLSAgICA3ODIzNCwgNzgyNDEsIDc4MjQ4LCA3ODI1NSwgNzgyNjIsIDc4MjY5LCA3ODI3NSwgNzgyODIsIDc4Mjg5LCA3ODI5NiwgCi0gICAgNzgzMDMsIDAsIDc4MzEwLCA3ODMxNywgMCwgNzgzMjQsIDc4MzMxLCA3ODMzOCwgNzgzNDUsIDc4MzUyLCA3ODM1OSwgCi0gICAgNzgzNjYsIDc4MzczLCA3ODM4MCwgNzgzODcsIDc4Mzk0LCA3ODQwMSwgNzg0MDgsIDc4NDE1LCA3ODQyMiwgMCwgMCwgCi0gICAgNzg0MjgsIDc4NDMzLCA3ODQzOCwgNzg0NDMsIDc4NDQ4LCA3ODQ1MywgNzg0NTgsIDc4NDYzLCA3ODQ2OCwgNzg0NzMsIAotICAgIDc4NDc4LCA3ODQ4MywgNzg0ODgsIDc4NDkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODQ5OCwgNzg1MDUsIAotICAgIDc4NTEyLCA3ODUxOSwgNzg1MjYsIDc4NTMzLCA3ODU0MCwgNzg1NDcsIDc4NTU0LCA3ODU2MSwgNzg1NjgsIDc4NTc1LCAKLSAgICA3ODU4MiwgNzg1ODksIDc4NTk2LCA3ODYwMywgNzg2MTAsIDc4NjE3LCA3ODYyNCwgNzg2MzEsIDc4NjM5LCA3ODY0NywgCi0gICAgNzg2NTQsIDc4NjYxLCA3ODY2NiwgNzg2NzQsIDc4NjgyLCA3ODY4OSwgNzg2OTYsIDc4NzAxLCA3ODcwOCwgNzg3MTMsIAotICAgIDc4NzE4LCA3ODcyNSwgNzg3MzAsIDc4NzM1LCA3ODc0MCwgNzg3NDgsIDc4NzUzLCA3ODc1OCwgNzg3NjUsIDc4NzcwLCAKLSAgICA3ODc3NSwgNzg3ODIsIDc4Nzg5LCA3ODc5NCwgNzg3OTksIDc4ODA0LCA3ODgwOSwgNzg4MTQsIDc4ODE5LCA3ODgyNCwgCi0gICAgNzg4MjksIDc4ODM0LCA3ODg0MSwgNzg4NDYsIDc4ODUzLCA3ODg1OCwgNzg4NjMsIDc4ODY4LCA3ODg3MywgNzg4NzgsIAotICAgIDc4ODgzLCA3ODg4OCwgNzg4OTMsIDc4ODk4LCA3ODkwMywgNzg5MDgsIDc4OTE1LCA3ODkyMiwgNzg5MjksIDc4OTM2LCAKLSAgICA3ODk0MiwgNzg5NDcsIDc4OTU0LCA3ODk1OSwgNzg5NjQsIDc4OTczLCA3ODk4MCwgNzg5ODksIDc4OTk2LCA3OTAwMSwgCi0gICAgNzkwMDYsIDc5MDE0LCA3OTAxOSwgNzkwMjQsIDc5MDI5LCA3OTAzNCwgNzkwMzksIDc5MDQ2LCA3OTA1MSwgNzkwNTYsIAotICAgIDc5MDYxLCA3OTA2NiwgNzkwNzEsIDc5MDc4LCA3OTA4NSwgNzkwOTIsIDc5MDk5LCA3OTEwNiwgNzkxMTMsIDc5MTIwLCAKLSAgICA3OTEyNywgNzkxMzQsIDc5MTQxLCA3OTE0OCwgNzkxNTUsIDc5MTYyLCA3OTE2OSwgNzkxNzYsIDc5MTgzLCA3OTE5MCwgCi0gICAgNzkxOTcsIDc5MjA0LCA3OTIxMSwgNzkyMTgsIDc5MjI1LCA3OTIzMiwgNzkyMzksIDc5MjQ2LCA3OTI1MywgNzkyNjAsIAotICAgIDc5MjY3LCAwLCAwLCAwLCAwLCAwLCA3OTI3NCwgNzkyODEsIDc5Mjg4LCAwLCAwLCAwLCAwLCA3OTI5MiwgNzkyOTUsIAotICAgIDc5Mjk4LCA3OTMwMSwgNzkzMDQsIDc5MzA3LCA3OTMxMCwgNzkzMTMsIDc5MzE2LCA3OTMxOSwgNzkzMjMsIDc5MzI3LCAKLSAgICA3OTMzMSwgNzkzMzUsIDc5MzM5LCA3OTM0MywgNzkzNDcsIDc5MzUxLCA3OTM1NSwgNzkzNjAsIDc5MzY1LCA3OTM3MCwgCi0gICAgNzkzNzYsIDc5MzgyLCA3OTM4OCwgNzkzOTQsIDc5NDAwLCA3OTQwNiwgNzk0MTEsIDc5NDE2LCA3OTQyMSwgNzk0MjcsIAotICAgIDc5NDMzLCA3OTQzOSwgNzk0NDUsIDc5NDUxLCA3OTQ1NywgNzk0NjMsIDc5NDY5LCA3OTQ3NSwgNzk0ODEsIDc5NDg3LCAKLSAgICA3OTQ5MywgNzk0OTksIDc5NTA1LCAwLCAwLCAwLCA3OTUxMSwgNzk1MTgsIDc5NTI1LCA3OTUzMiwgNzk1MzksIDc5NTQ2LCAKLSAgICA3OTU1NSwgNzk1NjQsIDc5NTcxLCA3OTU3OCwgNzk1ODYsIDc5NTk0LCA3OTYwMiwgNzk2MDgsIDc5NjE1LCA3OTYyNCwgCi0gICAgNzk2MzMsIDc5NjQyLCA3OTY1MSwgNzk2NjAsIDc5NjY5LCA3OTY3OSwgNzk2OTAsIDc5NzAwLCA3OTcxMSwgNzk3MjAsIAotICAgIDc5NzI5LCA3OTczOCwgNzk3NDgsIDc5NzU5LCA3OTc2OSwgNzk3ODAsIDc5NzkxLCA3OTgwMCwgNzk4MDgsIDc5ODE0LCAKLSAgICA3OTgyMCwgNzk4MjYsIDc5ODMyLCA3OTg0MCwgNzk4NDgsIDc5ODU0LCA3OTg2MSwgNzk4NzEsIDc5ODc4LCA3OTg4NSwgCi0gICAgNzk4OTIsIDc5ODk5LCA3OTkwNiwgNzk5MTYsIDc5OTIzLCA3OTkzMCwgNzk5MzgsIDc5OTQ2LCA3OTk1NSwgNzk5NjQsIAotICAgIDc5OTczLCA3OTk4MiwgNzk5OTEsIDc5OTk5LCA4MDAwOCwgODAwMTcsIDgwMDI2LCA4MDAzMCwgODAwMzcsIDgwMDQyLCAKLSAgICA4MDA0NywgODAwNTEsIDgwMDU1LCA4MDA1OSwgODAwNjMsIDgwMDY4LCA4MDA3MywgODAwNzksIDgwMDg1LCA4MDA4OSwgCi0gICAgODAwOTUsIDgwMDk5LCA4MDEwMywgODAxMDcsIDgwMTExLCA4MDExNSwgODAxMTksIDgwMTI1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA4MDEyOSwgODAxMzQsIDgwMTM5LCA4MDE0NCwgODAxNDksIDgwMTU2LCA4MDE2MSwgODAxNjYsIDgwMTcxLCA4MDE3NiwgCi0gICAgODAxODEsIDgwMTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MDE5MSwgODAxOTgsIDgwMjA3LCA4MDIxNiwgODAyMjMsIDgwMjMwLCA4MDIzNywgCi0gICAgODAyNDQsIDgwMjUxLCA4MDI1OCwgODAyNjQsIDgwMjcxLCA4MDI3OCwgODAyODUsIDgwMjkyLCA4MDI5OSwgODAzMDYsIAotICAgIDgwMzEzLCA4MDMyMCwgODAzMjksIDgwMzM2LCA4MDM0MywgODAzNTAsIDgwMzU3LCA4MDM2NCwgODAzNzEsIDgwMzc4LCAKLSAgICA4MDM4NSwgODAzOTQsIDgwNDAxLCA4MDQwOCwgODA0MTUsIDgwNDIyLCA4MDQyOSwgODA0MzYsIDgwNDQ1LCA4MDQ1MiwgCi0gICAgODA0NTksIDgwNDY2LCA4MDQ3MywgODA0ODIsIDgwNDg5LCA4MDQ5NiwgODA1MDMsIDgwNTExLCA4MDUyMCwgMCwgMCwgCi0gICAgODA1MjksIDgwNTMzLCA4MDUzNywgODA1NDIsIDgwNTQ3LCA4MDU1MSwgODA1NTYsIDgwNTYwLCA4MDU2NSwgODA1NzAsIAotICAgIDgwNTc1LCA4MDU4MCwgODA1ODUsIDgwNTkwLCA4MDU5NCwgODA1OTgsIDgwNjAyLCA4MDYwNywgODA2MTIsIDgwNjE2LCAKLSAgICA4MDYyMSwgODA2MjYsIDgwNjMwLCA4MDYzNCwgODA2MzksIDgwNjQ0LCA4MDY0OSwgODA2NTQsIDgwNjU4LCAwLCAwLCAwLCAKLSAgICA4MDY2MywgODA2NjcsIDgwNjcyLCA4MDY3NywgODA2ODEsIDgwNjg2LCA4MDY5MCwgODA2OTUsIDgwNzAwLCA4MDcwNSwgCi0gICAgODA3MTAsIDgwNzE0LCA4MDcxOCwgODA3MjMsIDgwNzI4LCA4MDczMywgODA3MzgsIDgwNzQyLCA4MDc0NywgODA3NTEsIAotICAgIDgwNzU2LCA4MDc2MSwgODA3NjUsIDgwNzcwLCA4MDc3NSwgODA3ODAsIDgwNzg0LCA4MDc4OCwgODA3OTMsIDgwNzk4LCAKLSAgICA4MDgwMywgODA4MDgsIDgwODEzLCA4MDgxNywgODA4MjIsIDgwODI3LCA4MDgzMiwgODA4MzcsIDgwODQyLCA4MDg0NywgCi0gICAgODA4NTIsIDgwODU3LCA4MDg2MiwgODA4NjcsIDgwODcyLCA4MDg3NywgODA4ODIsIDgwODg3LCA4MDg5MiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODA4OTcsIDgwOTAxLCAKLSAgICA4MDkwNiwgODA5MTEsIDgwOTE2LCA4MDkyMCwgODA5MjUsIDgwOTMwLCA4MDkzNSwgODA5NDAsIDgwOTQ0LCA4MDk0OCwgCi0gICAgODA5NTMsIDgwOTU4LCA4MDk2MywgODA5NjgsIDgwOTcyLCA4MDk3NywgODA5ODIsIDgwOTg3LCA4MDk5MiwgODA5OTcsIAotICAgIDgxMDAyLCA4MTAwNiwgODEwMTEsIDgxMDE2LCA4MTAyMSwgODEwMjYsIDgxMDMxLCA4MTAzNiwgODEwNDEsIDAsIDgxMDQ2LCAKLSAgICA4MTA1MCwgODEwNTQsIDgxMDU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTA2NCwgODEwNjksIAotICAgIDgxMDc0LCA4MTA3OSwgODEwODQsIDgxMDg5LCA4MTA5NCwgODEwOTksIDgxMTA0LCA4MTEwOSwgODExMTQsIDgxMTE5LCAKLSAgICA4MTEyNCwgODExMjksIDgxMTM0LCA4MTEzOSwgODExNDQsIDgxMTQ5LCA4MTE1NCwgODExNTksIDgxMTY0LCA4MTE2OSwgCi0gICAgODExNzQsIDgxMTc5LCA4MTE4NCwgODExODksIDgxMTk0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTIwMSwgODEyMDYsIDgxMjExLCAKLSAgICA4MTIxNiwgODEyMjEsIDgxMjI2LCA4MTIzMSwgODEyMzYsIDgxMjQxLCA4MTI0NiwgODEyNTEsIDgxMjU2LCA4MTI2MSwgCi0gICAgODEyNjYsIDgxMjcxLCA4MTI3NiwgODEyODEsIDgxMjg2LCA4MTI5MSwgODEyOTYsIDgxMzAxLCA4MTMwNiwgODEzMTEsIAotICAgIDgxMzE2LCA4MTMyMSwgODEzMjYsIDgxMzMxLCA4MTMzNSwgODEzMzksIDgxMzQzLCAwLCA4MTM0OCwgODEzNTQsIDgxMzU5LCAKLSAgICA4MTM2NCwgODEzNjksIDgxMzc0LCA4MTM4MCwgODEzODYsIDgxMzkyLCA4MTM5OCwgODE0MDQsIDgxNDEwLCA4MTQxNiwgCi0gICAgODE0MjIsIDgxNDI4LCA4MTQzNCwgODE0NDAsIDgxNDQ2LCA4MTQ1MiwgODE0NTcsIDgxNDYzLCA4MTQ2OSwgODE0NzUsIAotICAgIDgxNDgxLCA4MTQ4NiwgODE0OTIsIDgxNDk4LCA4MTUwMywgODE1MDksIDgxNTE1LCA4MTUyMCwgODE1MjYsIDgxNTMyLCAKLSAgICA4MTUzOCwgODE1NDQsIDgxNTUwLCA4MTU1NiwgMCwgMCwgMCwgMCwgODE1NjEsIDgxNTY3LCA4MTU3MywgODE1NzksIAotICAgIDgxNTg1LCA4MTU5MSwgODE1OTcsIDgxNjAzLCA4MTYwOSwgODE2MTYsIDgxNjIxLCA4MTYyNiwgODE2MzIsIDgxNjM4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MTY0NCwgODE2NDksIDgxNjU0LCAKLSAgICA4MTY1OSwgODE2NjUsIDgxNjcwLCA4MTY3NiwgODE2ODIsIDgxNjg4LCA4MTY5NCwgODE3MDEsIDgxNzA3LCA4MTcxNCwgCi0gICAgODE3MTksIDgxNzI0LCA4MTcyOSwgODE3MzQsIDgxNzM4LCA4MTc0MywgODE3NDgsIDgxNzUzLCA4MTc1OCwgODE3NjMsIAotICAgIDgxNzY4LCA4MTc3MywgODE3NzgsIDgxNzgzLCA4MTc4OCwgODE3OTMsIDgxNzk4LCA4MTgwMywgODE4MDgsIDgxODEzLCAKLSAgICA4MTgxOCwgODE4MjMsIDgxODI4LCA4MTgzMywgODE4MzgsIDgxODQzLCA4MTg0OCwgODE4NTMsIDgxODU4LCA4MTg2MywgCi0gICAgODE4NjgsIDgxODc0LCA4MTg3OSwgODE4ODUsIDgxODkxLCA4MTg5NywgODE5MDMsIDgxOTEwLCA4MTkxNiwgODE5MjMsIAotICAgIDgxOTI4LCA4MTkzMywgODE5MzgsIDgxOTQzLCA4MTk0NywgODE5NTIsIDgxOTU3LCA4MTk2MiwgODE5NjcsIDgxOTcyLCAKLSAgICA4MTk3NywgODE5ODIsIDgxOTg3LCA4MTk5MiwgODE5OTcsIDgyMDAyLCA4MjAwNywgODIwMTIsIDgyMDE3LCA4MjAyMiwgCi0gICAgODIwMjcsIDgyMDMyLCA4MjAzNywgODIwNDIsIDgyMDQ3LCA4MjA1MiwgODIwNTcsIDgyMDYyLCA4MjA2NywgODIwNzIsIAotICAgIDgyMDc3LCA4MjA4MiwgODIwODcsIDgyMDkyLCA4MjA5NywgODIxMDIsIDgyMTA3LCA4MjExMiwgODIxMTcsIDgyMTIyLCAKLSAgICA4MjEyNywgODIxMzIsIDgyMTM3LCA4MjE0MiwgODIxNDcsIDgyMTUyLCA4MjE1NywgODIxNjIsIDgyMTY3LCA4MjE3MiwgCi0gICAgODIxNzcsIDgyMTgyLCA4MjE4NywgODIxOTIsIDgyMTk3LCA4MjIwMiwgODIyMDcsIDgyMjEyLCA4MjIxNywgODIyMjIsIAotICAgIDgyMjI3LCA4MjIzMiwgODIyMzcsIDgyMjQyLCA4MjI0NywgODIyNTIsIDgyMjU3LCA4MjI2MiwgODIyNjcsIDgyMjcyLCAKLSAgICA4MjI3NywgODIyODIsIDgyMjg3LCA4MjI5MiwgODIyOTcsIDgyMzAyLCA4MjMwNywgODIzMTIsIDgyMzE3LCA4MjMyMiwgCi0gICAgODIzMjcsIDgyMzMyLCA4MjMzNywgODIzNDEsIDgyMzQ2LCA4MjM1MSwgODIzNTYsIDgyMzYxLCA4MjM2NiwgODIzNzEsIAotICAgIDgyMzc2LCA4MjM4MSwgODIzODYsIDgyMzkxLCA4MjM5NiwgODI0MDEsIDgyNDA1LCA4MjQwOSwgODI0MTMsIDgyNDE3LCAKLSAgICA4MjQyMSwgODI0MjUsIDgyNDI5LCA4MjQzNCwgODI0MzksIDAsIDAsIDgyNDQ0LCA4MjQ0OSwgODI0NTMsIDgyNDU3LCAKLSAgICA4MjQ2MSwgODI0NjUsIDgyNDY5LCA4MjQ3MywgODI0NzcsIDgyNDgxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDgwOSwgCisgICAgOTA4MTMsIDkwODE4LCA5MDgyMywgMCwgOTA4MjksIDkwODM0LCAwLCAwLCAwLCAwLCAwLCA5MDgzOSwgOTA4NDUsIDkwODUyLCAKKyAgICA5MDg1NywgOTA4NjIsIDkwODY2LCA5MDg3MSwgOTA4NzYsIDAsIDkwODgxLCA5MDg4NiwgOTA4OTEsIDAsIDkwODk2LCAKKyAgICA5MDkwMSwgOTA5MDYsIDkwOTExLCA5MDkxNiwgOTA5MjEsIDkwOTI2LCA5MDkzMSwgOTA5MzYsIDkwOTQxLCA5MDk0NiwgCisgICAgOTA5NTAsIDkwOTU0LCA5MDk1OSwgOTA5NjQsIDkwOTY5LCA5MDk3MywgOTA5NzcsIDkwOTgxLCA5MDk4NiwgOTA5OTEsIAorICAgIDkwOTk2LCA5MTAwMSwgOTEwMDYsIDkxMDExLCA5MTAxNSwgOTEwMjAsIDAsIDAsIDAsIDAsIDkxMDI1LCA5MTAzMSwgCisgICAgOTEwMzYsIDAsIDAsIDAsIDAsIDkxMDQxLCA5MTA0NSwgOTEwNDksIDkxMDUzLCA5MTA1NywgOTEwNjEsIDkxMDY2LCAKKyAgICA5MTA3MSwgOTEwNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxMDgzLCA5MTA4OSwgOTEwOTYsIDkxMTAyLCA5MTEwOSwgCisgICAgOTExMTUsIDkxMTIxLCA5MTEyNywgOTExMzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxMTQwLCA5MTE0OCwgOTExNTYsIAorICAgIDkxMTY0LCA5MTE3MiwgOTExODAsIDkxMTg4LCA5MTE5NiwgOTEyMDQsIDkxMjEyLCA5MTIyMCwgOTEyMjgsIDkxMjM2LCAKKyAgICA5MTI0NCwgOTEyNTIsIDkxMjYwLCA5MTI2OCwgOTEyNzYsIDkxMjg0LCA5MTI5MiwgOTEzMDAsIDkxMzA4LCA5MTMxNiwgCisgICAgOTEzMjQsIDkxMzMyLCA5MTM0MCwgOTEzNDgsIDkxMzU2LCA5MTM2NCwgOTEzNzIsIDkxMzc5LCA5MTM4NywgOTEzOTUsIAorICAgIDkxMzk5LCA5MTQwNCwgOTE0MDksIDkxNDE0LCA5MTQxOSwgOTE0MjQsIDkxNDI5LCA5MTQzNCwgOTE0MzgsIDkxNDQzLCAKKyAgICA5MTQ0NywgOTE0NTIsIDkxNDU2LCA5MTQ2MSwgOTE0NjUsIDkxNDcwLCA5MTQ3NSwgOTE0ODAsIDkxNDg1LCA5MTQ5MCwgCisgICAgOTE0OTUsIDkxNTAwLCA5MTUwNSwgOTE1MTAsIDkxNTE1LCA5MTUyMCwgOTE1MjUsIDkxNTMwLCA5MTUzNSwgOTE1NDAsIAorICAgIDkxNTQ1LCA5MTU1MCwgOTE1NTUsIDkxNTYwLCA5MTU2NSwgOTE1NzAsIDkxNTc1LCA5MTU4MCwgOTE1ODUsIDkxNTkwLCAKKyAgICA5MTU5NSwgOTE2MDAsIDkxNjA1LCA5MTYxMCwgOTE2MTUsIDkxNjIwLCA5MTYyNSwgOTE2MzAsIDkxNjM1LCA5MTY0MCwgCisgICAgOTE2NDUsIDkxNjUwLCA5MTY1NSwgMCwgMCwgMCwgOTE2NjAsIDkxNjY1LCA5MTY3NCwgOTE2ODIsIDkxNjkxLCA5MTcwMCwgCisgICAgOTE3MTEsIDkxNzIyLCA5MTcyOSwgOTE3MzYsIDkxNzQzLCA5MTc1MCwgOTE3NTcsIDkxNzY0LCA5MTc3MSwgOTE3NzgsIAorICAgIDkxNzg1LCA5MTc5MiwgOTE3OTksIDkxODA2LCA5MTgxMywgOTE4MjAsIDkxODI3LCA5MTgzNCwgOTE4NDEsIDkxODQ4LCAKKyAgICA5MTg1NSwgOTE4NjIsIDkxODY5LCAwLCAwLCA5MTg3NiwgOTE4ODIsIDkxODg4LCA5MTg5NCwgOTE5MDAsIDkxOTA3LCAKKyAgICA5MTkxNCwgOTE5MjIsIDkxOTMwLCA5MTkzNywgOTE5NDQsIDkxOTUxLCA5MTk1OCwgOTE5NjUsIDkxOTcyLCA5MTk3OSwgCisgICAgOTE5ODYsIDkxOTkzLCA5MjAwMCwgOTIwMDcsIDkyMDE0LCA5MjAyMSwgOTIwMjgsIDkyMDM1LCA5MjA0MiwgOTIwNDksIAorICAgIDkyMDU2LCAwLCAwLCAwLCAwLCAwLCA5MjA2MywgOTIwNjksIDkyMDc1LCA5MjA4MSwgOTIwODcsIDkyMDk0LCA5MjEwMSwgCisgICAgOTIxMDksIDkyMTE3LCA5MjEyMywgOTIxMjksIDkyMTM2LCA5MjE0MiwgOTIxNDgsIDkyMTU0LCA5MjE2MCwgOTIxNjcsIAorICAgIDkyMTc0LCA5MjE4MSwgOTIxODgsIDkyMTk1LCA5MjIwMiwgOTIyMDksIDkyMjE2LCA5MjIyMywgOTIyMzAsIDkyMjM3LCAKKyAgICA5MjI0NCwgOTIyNTEsIDkyMjU4LCA5MjI2NSwgOTIyNzIsIDkyMjc5LCA5MjI4NiwgOTIyOTMsIDkyMzAwLCA5MjMwNywgCisgICAgOTIzMTQsIDkyMzIxLCA5MjMyOCwgOTIzMzUsIDkyMzQyLCA5MjM0OSwgOTIzNTYsIDkyMzYzLCA5MjM3MCwgOTIzNzcsIAorICAgIDkyMzg0LCA5MjM5MSwgOTIzOTgsIDkyNDA1LCA5MjQxMiwgOTI0MTksIDkyNDI2LCA5MjQzMywgOTI0NDAsIDkyNDQ3LCAKKyAgICA5MjQ1NCwgOTI0NjEsIDkyNDY4LCA5MjQ3NSwgOTI0ODIsIDkyNDg5LCA5MjQ5NiwgOTI1MDMsIDkyNTEwLCA5MjUxNywgCisgICAgOTI1MjQsIDkyNTMxLCA5MjUzOCwgOTI1NDUsIDkyNTUyLCA5MjU1OSwgOTI1NjYsIDkyNTczLCA5MjU4MCwgOTI1ODcsIAorICAgIDkyNTk0LCA5MjYwMSwgOTI2MDgsIDkyNjE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4MjQ4NSwgODI0ODgsIDgyNDkxLCA4MjQ5NCwgODI0OTcsIDgyNTAwLCAwLCAwLCA4MjUwNCwgMCwgCi0gICAgODI1MDgsIDgyNTExLCA4MjUxNSwgODI1MTksIDgyNTIzLCA4MjUyNywgODI1MzEsIDgyNTM1LCA4MjUzOSwgODI1NDMsIAotICAgIDgyNTQ3LCA4MjU1MCwgODI1NTQsIDgyNTU4LCA4MjU2MiwgODI1NjYsIDgyNTcwLCA4MjU3NCwgODI1NzgsIDgyNTgyLCAKLSAgICA4MjU4NiwgODI1ODksIDgyNTkzLCA4MjU5NywgODI2MDEsIDgyNjA1LCA4MjYwOCwgODI2MTIsIDgyNjE2LCA4MjYyMCwgCi0gICAgODI2MjQsIDgyNjI4LCA4MjYzMiwgODI2MzYsIDgyNjQwLCA4MjY0NCwgODI2NDgsIDgyNjUyLCA4MjY1NiwgODI2NTksIAotICAgIDgyNjYzLCA4MjY2NywgODI2NzEsIDgyNjc1LCAwLCA4MjY3OSwgODI2ODMsIDAsIDAsIDAsIDgyNjg3LCAwLCAwLCA4MjY5MSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODI2OTUsIDgyNzAwLCA4MjcwNSwgCi0gICAgODI3MTAsIDgyNzE1LCA4MjcyMCwgODI3MjUsIDgyNzMwLCA4MjczNSwgODI3NDAsIDgyNzQ1LCA4Mjc1MCwgODI3NTUsIAotICAgIDgyNzYwLCA4Mjc2NSwgODI3NzAsIDgyNzc1LCA4Mjc4MCwgODI3ODUsIDgyNzkwLCA4Mjc5NSwgODI4MDAsIDgyODA1LCAKLSAgICA4MjgwOSwgODI4MTQsIDgyODE5LCAwLCAwLCAwLCAwLCAwLCA4MjgyNSwgODI4MzEsIDgyODM1LCA4Mjg0MCwgODI4NDQsIAotICAgIDgyODQ5LCA4Mjg1MywgODI4NTcsIDgyODYxLCA4Mjg2NiwgODI4NzEsIDgyODc1LCA4Mjg3OSwgODI4ODMsIDgyODg3LCAKLSAgICA4Mjg5MSwgODI4OTYsIDgyOTAxLCA4MjkwNSwgODI5MTAsIDgyOTE1LCA4MjkxOSwgODI5MjQsIDgyOTI5LCA4MjkzNCwgCi0gICAgODI5MzksIDgyOTQ0LCAwLCAwLCAwLCAwLCAwLCA4Mjk0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTI2MjIsIDkyNjI2LCA5MjYzMCwgCisgICAgOTI2MzQsIDkyNjM4LCA5MjY0MiwgOTI2NDYsIDkyNjUwLCA5MjY1NCwgOTI2NTgsIDkyNjYzLCA5MjY2OCwgOTI2NzMsIAorICAgIDkyNjc4LCA5MjY4MywgOTI2ODgsIDkyNjkzLCA5MjY5OCwgOTI3MDMsIDkyNzA5LCA5MjcxNSwgOTI3MjEsIDkyNzI4LCAKKyAgICA5MjczNSwgOTI3NDIsIDkyNzQ5LCA5Mjc1NiwgOTI3NjMsIDkyNzcwLCA5Mjc3NywgOTI3ODQsIDAsIDkyNzkxLCA5Mjc5NSwgCisgICAgOTI3OTksIDkyODAzLCA5MjgwNywgOTI4MTEsIDkyODE0LCA5MjgxOCwgOTI4MjEsIDkyODI1LCA5MjgyOCwgOTI4MzIsIAorICAgIDkyODM2LCA5Mjg0MSwgOTI4NDUsIDkyODUwLCA5Mjg1MywgOTI4NTcsIDkyODYwLCA5Mjg2NCwgOTI4NjcsIDkyODcxLCAKKyAgICA5Mjg3NSwgOTI4NzksIDkyODgzLCA5Mjg4NywgOTI4OTEsIDkyODk1LCA5Mjg5OSwgOTI5MDMsIDkyOTA3LCA5MjkxMSwgCisgICAgOTI5MTUsIDkyOTE5LCA5MjkyMywgOTI5MjcsIDkyOTMxLCA5MjkzNSwgOTI5MzksIDkyOTQyLCA5Mjk0NSwgOTI5NDksIAorICAgIDkyOTUzLCA5Mjk1NywgOTI5NjAsIDkyOTYzLCA5Mjk2NiwgOTI5NzAsIDkyOTc0LCA5Mjk3OCwgOTI5ODIsIDkyOTg2LCAKKyAgICA5Mjk4OSwgOTI5OTMsIDkyOTk5LCA5MzAwNSwgOTMwMTEsIDkzMDE2LCA5MzAyMywgOTMwMjcsIDkzMDMyLCA5MzAzNiwgCisgICAgOTMwNDEsIDkzMDQ2LCA5MzA1MiwgOTMwNTcsIDkzMDYzLCA5MzA2NywgOTMwNzIsIDkzMDc2LCA5MzA4MSwgOTMwODQsIAorICAgIDkzMDg3LCA5MzA5MSwgOTMwOTYsIDkzMTAyLCA5MzEwNywgOTMxMTMsIDAsIDAsIDAsIDAsIDkzMTE4LCA5MzEyMSwgCisgICAgOTMxMjQsIDkzMTI3LCA5MzEzMCwgOTMxMzMsIDkzMTM2LCA5MzEzOSwgOTMxNDIsIDkzMTQ1LCA5MzE0OSwgOTMxNTMsIAorICAgIDkzMTU3LCA5MzE2MSwgOTMxNjUsIDkzMTY5LCA5MzE3MywgOTMxNzcsIDkzMTgxLCA5MzE4NiwgOTMxOTEsIDkzMTk1LCAKKyAgICA5MzE5OCwgOTMyMDEsIDkzMjA0LCA5MzIwNywgOTMyMTAsIDkzMjEzLCA5MzIxNiwgOTMyMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzMjIyLCA5MzIyNiwgOTMyMzAsIDkzMjM0LCA5MzIzNywgOTMyNDEsIAorICAgIDkzMjQ0LCA5MzI0OCwgOTMyNTEsIDkzMjU1LCA5MzI1OCwgOTMyNjIsIDkzMjY1LCA5MzI2OSwgOTMyNzIsIDkzMjc2LCAKKyAgICA5MzI4MCwgOTMyODQsIDkzMjg4LCA5MzI5MiwgOTMyOTYsIDkzMzAwLCA5MzMwNCwgOTMzMDgsIDkzMzEyLCA5MzMxNiwgCisgICAgOTMzMjAsIDkzMzI0LCA5MzMyOCwgOTMzMzIsIDkzMzM2LCA5MzM0MCwgOTMzNDQsIDkzMzQ4LCA5MzM1MiwgOTMzNTUsIAorICAgIDkzMzU4LCA5MzM2MiwgOTMzNjYsIDkzMzcwLCA5MzM3MywgOTMzNzYsIDkzMzc5LCA5MzM4MywgOTMzODcsIDkzMzkxLCAKKyAgICA5MzM5NSwgOTMzOTksIDkzNDAyLCA5MzQwNywgOTM0MTEsIDkzNDE2LCA5MzQyMCwgOTM0MjUsIDkzNDI5LCA5MzQzNCwgCisgICAgOTM0MzgsIDkzNDQzLCA5MzQ0NywgOTM0NTEsIDkzNDU1LCA5MzQ1OSwgOTM0NjIsIDkzNDY2LCA5MzQ3MSwgOTM0NzQsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDgyOTU0LCA4Mjk1NywgODI5NjEsIDgyOTY1LCAwLCA4Mjk3MCwgODI5NzQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgyOTc4LCA4Mjk4MywgODI5ODksIDgyOTkzLCA4Mjk5NywgODMwMDAsIDgzMDA0LCA4MzAwOCwgMCwgODMwMTIsIDgzMDE2LCAKLSAgICA4MzAyMCwgMCwgODMwMjQsIDgzMDI4LCA4MzAzMiwgODMwMzYsIDgzMDQwLCA4MzA0NCwgODMwNDgsIDgzMDUyLCA4MzA1NiwgCi0gICAgODMwNjAsIDgzMDY0LCA4MzA2OCwgODMwNzEsIDgzMDc1LCA4MzA3OSwgODMwODMsIDgzMDg2LCA4MzA4OSwgODMwOTIsIAotICAgIDgzMDk2LCA4MzEwMCwgODMxMDQsIDgzMTA4LCA4MzExMiwgODMxMTYsIDgzMTE5LCA4MzEyMywgMCwgMCwgMCwgMCwgCi0gICAgODMxMjcsIDgzMTMyLCA4MzEzNiwgMCwgMCwgMCwgMCwgODMxNDAsIDgzMTQzLCA4MzE0NiwgODMxNDksIDgzMTUyLCAKLSAgICA4MzE1NSwgODMxNTksIDgzMTYzLCA4MzE2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMxNzMsIDgzMTc4LCA4MzE4NCwgCi0gICAgODMxODksIDgzMTk1LCA4MzIwMCwgODMyMDUsIDgzMjEwLCA4MzIxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODMyMjEsIDgzMjI0LCA4MzIyOSwgODMyMzUsIDgzMjQzLCA4MzI0OCwgODMyNTQsIDgzMjYyLCAKLSAgICA4MzI2OCwgODMyNzQsIDgzMjc4LCA4MzI4MiwgODMyODksIDgzMjk4LCA4MzMwNSwgODMzMTQsIDgzMzIwLCA4MzMyOSwgCi0gICAgODMzMzYsIDgzMzQzLCA4MzM1MCwgODMzNjAsIDgzMzY2LCA4MzM3MCwgODMzNzcsIDgzMzg2LCA4MzM5NiwgODM0MDMsIAotICAgIDgzNDEwLCA4MzQxNCwgODM0MTgsIDgzNDI1LCA4MzQzNSwgODM0MzksIDgzNDQ2LCA4MzQ1MywgODM0NjAsIDgzNDY2LCAKLSAgICA4MzQ3MywgODM0ODAsIDgzNDg3LCA4MzQ5NCwgODM0OTgsIDgzNTAyLCA4MzUwNiwgODM1MTMsIDgzNTE3LCA4MzUyNCwgCi0gICAgODM1MzEsIDgzNTQ1LCA4MzU1NCwgODM1NTgsIDgzNTYyLCA4MzU2NiwgODM1NzMsIDgzNTc3LCA4MzU4MSwgODM1ODUsIAotICAgIDgzNTkzLCA4MzYwMSwgODM2MjAsIDgzNjMwLCA4MzY1MCwgODM2NTQsIDgzNjU4LCA4MzY2MiwgODM2NjYsIDgzNjcwLCAKLSAgICA4MzY3NCwgODM2NzgsIDgzNjg1LCA4MzY4OSwgODM2OTIsIDgzNjk2LCA4MzcwMCwgODM3MDYsIDgzNzEzLCA4MzcyMiwgCi0gICAgODM3MjYsIDgzNzM1LCA4Mzc0NCwgODM3NTIsIDgzNzU2LCA4Mzc2MywgODM3NjcsIDgzNzcxLCA4Mzc3NSwgODM3NzksIAotICAgIDgzNzkwLCA4Mzc5OSwgODM4MDgsIDgzODE3LCA4MzgyNiwgODM4MzgsIDgzODQ3LCA4Mzg1NiwgODM4NjUsIDgzODczLCAKLSAgICA4Mzg4MiwgODM4OTQsIDgzOTAzLCA4MzkxMiwgODM5MjEsIDgzOTMzLCA4Mzk0MiwgODM5NTEsIDgzOTYzLCA4Mzk3MiwgCi0gICAgODM5ODEsIDgzOTkzLCA4NDAwMiwgODQwMDYsIDg0MDEwLCA4NDAxNCwgODQwMTgsIDg0MDIyLCA4NDAyNiwgODQwMzAsIAotICAgIDg0MDM3LCA4NDA0MSwgODQwNDUsIDg0MDU2LCA4NDA2MCwgODQwNjQsIDg0MDcxLCA4NDA3NywgODQwODMsIDg0MDg3LCAKLSAgICA4NDA5NCwgODQwOTgsIDg0MTAyLCA4NDEwNiwgODQxMTAsIDg0MTE0LCA4NDExOCwgODQxMjQsIDg0MTMyLCA4NDEzNiwgCi0gICAgODQxNDAsIDg0MTQzLCA4NDE0OSwgODQxNTksIDg0MTYzLCA4NDE3NSwgODQxODIsIDg0MTg5LCA4NDE5NiwgODQyMDMsIAotICAgIDg0MjA5LCA4NDIxMywgODQyMTcsIDg0MjIxLCA4NDIyNSwgODQyMzIsIDg0MjQxLCA4NDI0OCwgODQyNTYsIDg0MjY0LCAKLSAgICA4NDI3MCwgODQyNzQsIDg0Mjc4LCA4NDI4MiwgODQyODYsIDg0MjkyLCA4NDMwMSwgODQzMTMsIDg0MzIwLCA4NDMyNywgCi0gICAgODQzMzYsIDg0MzQ3LCA4NDM1MywgODQzNjIsIDg0MzcxLCA4NDM3OCwgODQzODcsIDg0Mzk0LCA4NDQwMSwgODQ0MTEsIAotICAgIDg0NDE4LCA4NDQyNSwgODQ0MzIsIDg0NDM5LCA4NDQ0MywgODQ0NDksIDg0NDUzLCA4NDQ2NCwgODQ0NzIsIDg0NDgxLCAKLSAgICA4NDQ5MywgODQ1MDAsIDg0NTA3LCA4NDUxNywgODQ1MjQsIDg0NTMzLCA4NDU0MCwgODQ1NDksIDg0NTU2LCA4NDU2MywgCi0gICAgODQ1NzMsIDg0NTgwLCA4NDU4NywgODQ1OTcsIDg0NjA0LCA4NDYxNiwgODQ2MjUsIDg0NjMyLCA4NDYzOSwgODQ2NDYsIAotICAgIDg0NjU1LCA4NDY2NSwgODQ2NzgsIDg0Njg1LCA4NDY5NSwgODQ3MDUsIDg0NzEyLCA4NDcyMSwgODQ3MzQsIDg0NzQxLCAKLSAgICA4NDc0OCwgODQ3NTUsIDg0NzY1LCA4NDc3NSwgODQ3ODIsIDg0NzkyLCA4NDc5OSwgODQ4MDYsIDg0ODE2LCA4NDgyMiwgCi0gICAgODQ4MjksIDg0ODM2LCA4NDg0MywgODQ4NTMsIDg0ODYwLCA4NDg2NywgODQ4NzQsIDg0ODgwLCA4NDg4NywgODQ4OTcsIAotICAgIDg0OTA0LCA4NDkwOCwgODQ5MTYsIDg0OTIwLCA4NDkzMiwgODQ5MzYsIDg0OTUwLCA4NDk1NCwgODQ5NTgsIDg0OTYyLCAKLSAgICA4NDk2NiwgODQ5NzIsIDg0OTc5LCA4NDk4NywgODQ5OTEsIDg0OTk1LCA4NDk5OSwgODUwMDMsIDg1MDEwLCA4NTAxNCwgCi0gICAgODUwMjAsIDg1MDI2LCA4NTAzNCwgODUwMzgsIDg1MDQ1LCA4NTA1MywgODUwNTcsIDg1MDYxLCA4NTA2NywgODUwNzEsIAotICAgIDg1MDgwLCA4NTA4OSwgODUwOTYsIDg1MTA2LCA4NTExMiwgODUxMTYsIDg1MTIwLCA4NTEyOCwgODUxMzUsIDg1MTQyLCAKLSAgICA4NTE0OCwgODUxNTIsIDg1MTYwLCA4NTE2NCwgODUxNzEsIDg1MTgzLCA4NTE5MCwgODUyMDAsIDg1MjA2LCA4NTIxMCwgCi0gICAgODUyMTksIDg1MjI2LCA4NTIzNSwgODUyMzksIDg1MjQzLCA4NTI1MCwgODUyNTQsIDg1MjU4LCA4NTI2MiwgODUyNjYsIAotICAgIDg1MjY5LCA4NTI3NSwgODUyODEsIDg1Mjg1LCA4NTI4OSwgODUyOTYsIDg1MzAzLCA4NTMxMCwgODUzMTcsIDg1MzI0LCAKLSAgICA4NTMzMSwgODUzMzgsIDg1MzQ1LCA4NTM1MSwgODUzNTUsIDg1MzU5LCA4NTM2NiwgODUzNzMsIDg1MzgwLCA4NTM4NywgCi0gICAgODUzOTQsIDg1Mzk4LCA4NTQwMSwgODU0MDYsIDg1NDEwLCA4NTQxNCwgODU0MjMsIDg1NDMyLCA4NTQzNiwgODU0NDAsIAotICAgIDg1NDQ2LCA4NTQ1MiwgODU0NjksIDg1NDc1LCA4NTQ3OSwgODU0ODgsIDg1NDkyLCA4NTQ5NiwgODU1MDMsIDg1NTExLCAKLSAgICA4NTUxOSwgODU1MjUsIDg1NTI5LCA4NTUzMywgODU1MzcsIDg1NTQxLCA4NTU0NCwgODU1NDksIDg1NTU1LCA4NTU2NCwgCi0gICAgODU1NzAsIDg1NTc2LCA4NTU4MiwgODU1ODcsIDg1NTkzLCA4NTU5OSwgODU2MDUsIDg1NjExLCA4NTYxNywgODU2MjUsIAotICAgIDg1NjMxLCA4NTY0MiwgODU2NDgsIDg1NjU0LCA4NTY2MywgODU2NzMsIDg1Njc5LCA4NTY4NSwgODU2OTEsIDg1Njk3LCAKLSAgICA4NTcwMywgODU3MDksIDg1NzE1LCA4NTcyMSwgODU3MjcsIDg1NzMzLCA4NTc0MiwgODU3NTEsIDg1NzYwLCA4NTc2NiwgCi0gICAgODU3NzUsIDg1NzgxLCA4NTc4NywgODU3OTMsIDg1Nzk5LCA4NTgwNSwgODU4MTEsIDg1ODE3LCA4NTgyMywgODU4MjksIAotICAgIDg1ODM1LCA4NTg0MSwgODU4NDcsIDg1ODUzLCA4NTg1OCwgODU4NjQsIDg1ODcwLCA4NTg3OCwgODU4ODQsIDg1ODkwLCAKLSAgICA4NTg5NCwgODU5MDIsIDg1OTA2LCA4NTkxMCwgODU5MTQsIDg1OTE4LCA4NTkyMiwgODU5MjksIDg1OTMzLCA4NTk0MiwgCi0gICAgODU5NDYsIDg1OTUzLCA4NTk2MSwgODU5NjUsIDg1OTY5LCA4NTk3MywgODU5ODQsIDg1OTk4LCA4NjAwMiwgODYwMDYsIAotICAgIDg2MDEzLCA4NjAxOSwgODYwMjYsIDg2MDMwLCA4NjAzNCwgODYwMzgsIDg2MDQyLCA4NjA0NiwgODYwNTMsIDg2MDU3LCAKLSAgICA4NjA3NSwgODYwNzksIDg2MDgzLCA4NjA5MCwgODYwOTQsIDg2MDk4LCA4NjEwNCwgODYxMDgsIDg2MTEyLCA4NjEyMCwgCi0gICAgODYxMjQsIDg2MTI4LCA4NjEzMiwgODYxMzYsIDg2MTQxLCA4NjE1MSwgODYxNTksIDg2MTY3LCA4NjE3MywgODYxNzksIAotICAgIDg2MTg5LCA4NjE5NSwgODYyMDEsIDg2MjA3LCA4NjIxMywgODYyMTksIDg2MjI1LCA4NjIzMSwgODYyNDAsIDg2MjQ1LCAKLSAgICA4NjI1MSwgODYyNjAsIDg2MjY4LCA4NjI3NCwgODYyODIsIDg2MjkxLCA4NjI5NywgODYzMDMsIDg2MzA5LCA4NjMxNSwgCi0gICAgODYzMjYsIDg2MzMyLCA4NjMzOCwgODYzNDQsIDg2MzUwLCA4NjM1NiwgODYzNjUsIDg2MzcxLCA4NjM3NywgODYzODYsIAotICAgIDg2Mzk4LCA4NjQwOSwgODY0MTUsIDg2NDI0LCA4NjQzMCwgODY0MzYsIDg2NDQyLCA4NjQ1NiwgODY0NjEsIDg2NDY4LCAKLSAgICA4NjQ3NywgODY0ODYsIDg2NDkyLCA4NjQ5OCwgODY1MDMsIDg2NTA3LCA4NjUxNCwgODY1MjQsIDg2NTMwLCA4NjU0MywgCi0gICAgODY1NDcsIDg2NTUxLCA4NjU1OCwgODY1NjIsIDg2NTY4LCA4NjU3NywgODY1ODEsIDg2NTg1LCA4NjU4OSwgODY1OTMsIAotICAgIDg2NTk3LCA4NjYwNCwgODY2MDgsIDg2NjE1LCA4NjYyMiwgODY2MjksIDg2NjM4LCA4NjY0NywgODY2NTcsIDg2NjY0LCAKLSAgICA4NjY3MSwgODY2NzgsIDg2Njg4LCA4NjY5NSwgODY3MDUsIDg2NzEyLCA4NjcyMiwgODY3MjksIDg2NzM2LCA4Njc0NiwgCi0gICAgODY3NTYsIDg2NzYzLCA4Njc2OSwgODY3NzcsIDg2Nzg1LCA4Njc5MSwgODY3OTcsIDg2ODAxLCA4NjgwNSwgODY4MTIsIAotICAgIDg2ODIwLCA4NjgyNiwgODY4MzAsIDg2ODM0LCA4NjgzOCwgODY4NDUsIDg2ODU3LCA4Njg2MCwgODY4NjcsIDg2ODczLCAKLSAgICA4Njg3NywgODY4ODEsIDg2ODg1LCA4Njg4OSwgODY4OTMsIDg2ODk3LCA4NjkwMSwgODY5MDUsIDg2OTA5LCA4NjkxMywgCi0gICAgODY5MjAsIDg2OTI0LCA4NjkzMCwgODY5MzQsIDg2OTM4LCA4Njk0MiwgODY5NDgsIDg2OTU1LCA4Njk2MiwgODY5NjksIAotICAgIDg2OTgxLCA4Njk4OSwgODY5OTMsIDg2OTk5LCA4NzAwOCwgODcwMTUsIDg3MDIxLCA4NzAyNSwgODcwMjksIDg3MDMzLCAKLSAgICA4NzAzOSwgODcwNDgsIDg3MDU2LCA4NzA2MCwgODcwNjYsIDg3MDcwLCA4NzA3NCwgODcwNzgsIDg3MDg0LCA4NzA5MSwgCi0gICAgODcwOTcsIDg3MTAxLCA4NzEwNywgODcxMTEsIDg3MTE1LCA4NzEyNCwgODcxMzYsIDg3MTQwLCA4NzE0NywgODcxNTQsIAotICAgIDg3MTY0LCA4NzE3MSwgODcxODMsIDg3MTkwLCA4NzE5NywgODcyMDQsIDg3MjE1LCA4NzIyNSwgODcyMzgsIDg3MjQ4LCAKLSAgICA4NzI1NSwgODcyNTksIDg3MjYzLCA4NzI2NywgODcyNzEsIDg3MjgwLCA4NzI4OSwgODcyOTgsIDg3MzE1LCA4NzMyNCwgCi0gICAgODczMzAsIDg3MzM3LCA4NzM0NSwgODczNTgsIDg3MzYyLCA4NzM3MSwgODczODAsIDg3Mzg5LCA4NzM5OCwgODc0MDksIAotICAgIDg3NDE4LCA4NzQyNywgODc0MzYsIDg3NDQ1LCA4NzQ1NCwgODc0NjMsIDg3NDczLCA4NzQ3NiwgODc0ODAsIDg3NDg0LCAKLSAgICA4NzQ4OCwgODc0OTIsIDg3NDk2LCA4NzUwMiwgODc1MDksIDg3NTE2LCA4NzUyMywgODc1MjksIDg3NTM1LCA4NzU0MiwgCi0gICAgODc1NDgsIDg3NTU1LCA4NzU2MywgODc1NjcsIDg3NTc0LCA4NzU4MSwgODc1ODgsIDg3NTk2LCA4NzU5OSwgODc2MDMsIAotICAgIDg3NjA3LCA4NzYxMSwgODc2MTUsIDg3NjIxLCA4NzYyNSwgODc2MzEsIDg3NjM4LCA4NzY0NSwgODc2NTEsIDg3NjU4LCAKLSAgICA4NzY2NSwgODc2NzIsIDg3Njc5LCA4NzY4NiwgODc2OTMsIDg3NzAwLCA4NzcwNywgODc3MTQsIDg3NzIxLCA4NzcyOCwgCi0gICAgODc3MzUsIDg3NzQyLCA4Nzc0OSwgODc3NTUsIDg3NzU5LCA4Nzc2NywgODc3NzEsIDg3Nzc1LCA4Nzc3OSwgODc3ODMsIAotICAgIDg3Nzg5LCA4Nzc5NiwgODc4MDMsIDg3ODEwLCA4NzgxNywgODc4MjQsIDg3ODMwLCA4NzgzOCwgODc4NDIsIDg3ODQ2LCAKLSAgICA4Nzg1MCwgODc4NTQsIDg3ODYwLCA4Nzg3NywgODc4OTQsIDg3ODk4LCA4NzkwMiwgODc5MDYsIDg3OTEwLCA4NzkxNCwgCi0gICAgODc5MTgsIDg3OTI0LCA4NzkzMSwgODc5MzUsIDg3OTQxLCA4Nzk0OCwgODc5NTUsIDg3OTYyLCA4Nzk2OSwgODc5NzYsIAotICAgIDg3OTg1LCA4Nzk5MiwgODc5OTksIDg4MDA2LCA4ODAxMywgODgwMTcsIDg4MDIxLCA4ODAyNywgODgwMzksIDg4MDQzLCAKLSAgICA4ODA0NywgODgwNTYsIDg4MDYwLCA4ODA2NCwgODgwNjgsIDg4MDc0LCA4ODA3OCwgODgwODIsIDg4MDkxLCA4ODA5NSwgCi0gICAgODgwOTksIDg4MTAzLCA4ODExMCwgODgxMTQsIDg4MTE4LCA4ODEyMiwgODgxMjYsIDg4MTMwLCA4ODEzNCwgODgxMzgsIAotICAgIDg4MTQyLCA4ODE0OCwgODgxNTUsIDg4MTYyLCA4ODE2OCwgODgxNzIsIDg4MTg5LCA4ODE5NSwgODgxOTksIDg4MjA1LCAKLSAgICA4ODIxMSwgODgyMTcsIDg4MjIzLCA4ODIyOSwgODgyMzUsIDg4MjM5LCA4ODI0MywgODgyNDcsIDg4MjUzLCA4ODI1NywgCi0gICAgODgyNjMsIDg4MjY3LCA4ODI3MSwgODgyNzgsIDg4Mjg1LCA4ODMwMiwgODgzMDYsIDg4MzEwLCA4ODMxNCwgODgzMTgsIAotICAgIDg4MzIyLCA4ODMzNCwgODgzMzcsIDg4MzQyLCA4ODM0NywgODgzNjIsIDg4MzcyLCA4ODM4MywgODgzODcsIDg4MzkxLCAKLSAgICA4ODM5NSwgODg0MDEsIDg4NDA4LCA4ODQxNSwgODg0MjUsIDg4NDM3LCA4ODQ0MywgODg0NDksIDg4NDU4LCA4ODQ2MiwgCi0gICAgODg0NjYsIDg4NDczLCA4ODQ4MywgODg0OTAsIDg4NDk2LCA4ODUwMCwgODg1MDQsIDg4NTExLCA4ODUxNywgODg1MjEsIAotICAgIDg4NTI3LCA4ODUzMSwgODg1MzksIDg4NTQ1LCA4ODU0OSwgODg1NTcsIDg4NTY2LCA4ODU3MywgODg1NzksIDg4NTg2LCAKLSAgICA4ODU5MywgODg2MDMsIDg4NjEzLCA4ODYxNywgODg2MjEsIDg4NjI1LCA4ODYyOSwgODg2MzUsIDg4NjQyLCA4ODY0OCwgCi0gICAgODg2NTUsIDg4NjYyLCA4ODY2OSwgODg2NzgsIDg4Njg1LCA4ODY5MiwgODg2OTgsIDg4NzA1LCA4ODcxMiwgODg3MTksIAotICAgIDg4NzI2LCA4ODczMywgODg3NDAsIDg4NzQ2LCA4ODc1MywgODg3NjAsIDg4NzY3LCA4ODc3NiwgODg3ODMsIDg4NzkwLCAKLSAgICA4ODc5NCwgODg4MDAsIDg4ODA0LCA4ODgxMCwgODg4MTcsIDg4ODI0LCA4ODgzMSwgODg4MzUsIDg4ODM5LCA4ODg0MywgCi0gICAgODg4NDcsIDg4ODUxLCA4ODg1OCwgODg4NjIsIDg4ODY2LCA4ODg3MiwgODg4ODEsIDg4ODg1LCA4ODg4OSwgODg4OTMsIAotICAgIDg4ODk3LCA4ODkwNCwgODg5MDgsIDg4OTEyLCA4ODkyMCwgODg5MjQsIDg4OTI4LCA4ODkzMiwgODg5MzYsIDg4OTQyLCAKLSAgICA4ODk0NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg5NTAsIDg4OTU2LCAKLSAgICA4ODk2MiwgODg5NjksIDg4OTc2LCA4ODk4MywgODg5OTAsIDg4OTk3LCA4OTAwNCwgODkwMTAsIDg5MDE3LCA4OTAyNCwgCi0gICAgODkwMzEsIDg5MDM4LCA4OTA0NSwgODkwNTIsIDg5MDU4LCA4OTA2NCwgODkwNzAsIDg5MDc2LCA4OTA4MiwgODkwODgsIAotICAgIDg5MDk0LCA4OTEwMCwgODkxMDYsIDg5MTEzLCA4OTEyMCwgODkxMjcsIDg5MTM0LCA4OTE0MSwgODkxNDgsIDg5MTU0LCAKLSAgICA4OTE2MCwgODkxNjYsIDg5MTczLCA4OTE4MCwgODkxODYsIDg5MTkyLCA4OTIwMSwgODkyMDgsIDg5MjE1LCA4OTIyMiwgCi0gICAgODkyMjksIDg5MjM2LCA4OTI0MywgODkyNDksIDg5MjU1LCA4OTI2MSwgODkyNzAsIDg5Mjc3LCA4OTI4NCwgODkyOTUsIAotICAgIDg5MzA2LCA4OTMxMiwgODkzMTgsIDg5MzI0LCA4OTMzMywgODkzNDAsIDg5MzQ3LCA4OTM1NiwgODkzNjUsIDg5Mzc1LCAKLSAgICA4OTM4NSwgODkzOTYsIDg5NDA4LCA4OTQxOCwgODk0MjgsIDg5NDM5LCA4OTQ1MSwgODk0NjEsIDg5NDcxLCA4OTQ4MSwgCi0gICAgODk0OTEsIDg5NTAxLCA4OTUxMiwgODk1MjAsIDg5NTI4LCA4OTUzNywgODk1NDYsIDg5NTU1LCA4OTU2MSwgODk1NjcsIAotICAgIDg5NTczLCA4OTU4MCwgODk1OTAsIDg5NTk3LCA4OTYwNywgODk2MTIsIDg5NjE3LCA4OTYyMywgODk2MjksIDg5NjM3LCAKLSAgICA4OTY0NSwgODk2NTQsIDg5NjY0LCA4OTY3NCwgODk2ODIsIDg5NjkwLCA4OTY5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgODk3MDgsIDg5NzE5LCA4OTcyNiwgODk3MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg5NzQyLCA4OTc0NywgODk3NTIsIDg5NzU3LCA4OTc2NCwgODk3NzEsIDg5Nzc4LCA4OTc4NSwgODk3OTAsIAotICAgIDg5Nzk1LCA4OTgwMCwgODk4MDUsIDg5ODEyLCA4OTgxNywgODk4MjQsIDg5ODMxLCA4OTgzNiwgODk4NDEsIDg5ODQ2LCAKLSAgICA4OTg1MywgODk4NTgsIDg5ODYzLCA4OTg3MCwgODk4NzcsIDg5ODgyLCA4OTg4NywgODk4OTIsIDg5ODk5LCA4OTkwNiwgCi0gICAgODk5MTMsIDg5OTE4LCA4OTkyMywgODk5MzAsIDg5OTM3LCA4OTk0NCwgODk5NTEsIDg5OTU2LCA4OTk2MSwgODk5NjYsIAotICAgIDg5OTczLCA4OTk3OCwgODk5ODMsIDg5OTg4LCA4OTk5NSwgOTAwMDQsIDkwMDExLCA5MDAxNiwgOTAwMjEsIDkwMDI2LCAKLSAgICA5MDAzMSwgOTAwMzYsIDkwMDQxLCA5MDA1MCwgOTAwNTcsIDkwMDYyLCA5MDA2OSwgOTAwNzYsIDkwMDgxLCA5MDA4NiwgCi0gICAgOTAwOTEsIDkwMDk4LCA5MDEwMywgOTAxMTAsIDkwMTE3LCA5MDEyMiwgOTAxMjcsIDkwMTMyLCA5MDEzOSwgOTAxNDYsIAotICAgIDkwMTUxLCA5MDE1NiwgOTAxNjMsIDkwMTcwLCA5MDE3NywgOTAxODIsIDkwMTg3LCA5MDE5MiwgOTAxOTcsIDkwMjA0LCAKLSAgICA5MDIxMywgOTAyMjIsIDkwMjI3LCA5MDIzNCwgOTAyNDMsIDkwMjQ4LCA5MDI1MywgOTAyNTgsIDkwMjYzLCA5MDI3MCwgCi0gICAgOTAyNzcsIDkwMjg0LCA5MDI5MSwgOTAyOTYsIDkwMzAxLCA5MDMwNiwgOTAzMTMsIDkwMzIwLCA5MDMyNywgOTAzMzIsIAotICAgIDkwMzM3LCA5MDM0NCwgOTAzNDksIDkwMzU2LCA5MDM2MSwgOTAzNjgsIDkwMzczLCA5MDM4MCwgOTAzODcsIDkwMzkyLCAKLSAgICA5MDM5NywgOTA0MDIsIDkwNDA3LCA5MDQxMiwgOTA0MTcsIDkwNDIyLCA5MDQyNywgOTA0MzIsIDkwNDM5LCA5MDQ0NiwgCi0gICAgOTA0NTMsIDkwNDYwLCA5MDQ2NywgOTA0NzYsIDkwNDgxLCA5MDQ4NiwgOTA0OTMsIDkwNTAwLCA5MDUwNSwgOTA1MTIsIAotICAgIDkwNTE5LCA5MDUyNiwgOTA1MzMsIDkwNTQwLCA5MDU0NywgOTA1NTIsIDkwNTU3LCA5MDU2MiwgOTA1NjcsIDkwNTcyLCAKLSAgICA5MDU4MSwgOTA1OTAsIDkwNTk5LCA5MDYwOCwgOTA2MTcsIDkwNjI2LCA5MDYzNSwgOTA2NDQsIDkwNjQ5LCA5MDY2MCwgCi0gICAgOTA2NzEsIDkwNjgwLCA5MDY4NSwgOTA2OTAsIDkwNjk1LCA5MDcwMCwgOTA3MDksIDkwNzE2LCA5MDcyMywgOTA3MzAsIAotICAgIDkwNzM3LCA5MDc0NCwgOTA3NTEsIDkwNzYwLCA5MDc2OSwgOTA3ODAsIDkwNzg5LCA5MDgwMCwgOTA4MDksIDkwODE2LCAKLSAgICA5MDgyNSwgOTA4MzYsIDkwODQ1LCA5MDg1NCwgOTA4NjMsIDkwODcyLCA5MDg3OSwgOTA4ODYsIDkwODkzLCA5MDkwMiwgCi0gICAgOTA5MTEsIDkwOTIyLCA5MDkzMSwgOTA5NDAsIDkwOTUxLCA5MDk1NiwgOTA5NjEsIDkwOTcyLCA5MDk4MCwgOTA5ODksIAotICAgIDkwOTk4LCA5MTAwNywgOTEwMTgsIDkxMDI3LCA5MTAzNiwgOTEwNDcsIDkxMDU4LCA5MTA2OSwgOTEwODAsIDkxMDkxLCAKLSAgICA5MTEwMiwgOTExMDksIDkxMTE2LCA5MTEyMywgOTExMzAsIDkxMTQxLCA5MTE1MCwgOTExNTcsIDkxMTY0LCA5MTE3MSwgCi0gICAgOTExODIsIDkxMTkzLCA5MTIwNCwgOTEyMTUsIDkxMjI2LCA5MTIzNywgOTEyNDgsIDkxMjU5LCA5MTI2NiwgOTEyNzMsIAotICAgIDkxMjgyLCA5MTI5MSwgOTEyOTgsIDkxMzA1LCA5MTMxMiwgOTEzMjEsIDkxMzMwLCA5MTMzOSwgOTEzNDYsIDkxMzU1LCAKLSAgICA5MTM2NCwgOTEzNzMsIDkxMzgwLCA5MTM4NywgOTEzOTIsIDkxMzk4LCA5MTQwNSwgOTE0MTIsIDkxNDE5LCA5MTQyNiwgCi0gICAgOTE0MzMsIDkxNDQwLCA5MTQ0OSwgOTE0NTgsIDkxNDY3LCA5MTQ3NiwgOTE0ODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDkxNDkyLCA5MTQ5OCwgOTE1MDMsIDkxNTA4LCA5MTUxNSwgOTE1MjEsIDkxNTI3LCA5MTUzMywgOTE1MzksIAotICAgIDkxNTQ1LCA5MTU1MSwgOTE1NTcsIDkxNTYxLCA5MTU2NSwgOTE1NzEsIDkxNTc3LCA5MTU4MywgOTE1ODcsIDkxNTkyLCAKLSAgICA5MTU5NywgOTE2MDEsIDkxNjA1LCA5MTYwOCwgOTE2MTQsIDkxNjIwLCA5MTYyNiwgOTE2MzIsIDkxNjM4LCA5MTY0NCwgCi0gICAgOTE2NTAsIDkxNjU2LCA5MTY2MiwgOTE2NzIsIDkxNjgyLCA5MTY4OCwgOTE2OTQsIDkxNzA0LCA5MTcxNCwgOTE3MjAsIDAsIAotICAgIDAsIDkxNzI2LCA5MTczNCwgOTE3MzksIDkxNzQ0LCA5MTc1MCwgOTE3NTYsIDkxNzYyLCA5MTc2OCwgOTE3NzQsIDkxNzgwLCAKLSAgICA5MTc4NywgOTE3OTQsIDkxODAwLCA5MTgwNiwgOTE4MTIsIDkxODE4LCA5MTgyNCwgOTE4MzAsIDkxODM2LCA5MTg0MiwgCi0gICAgOTE4NDcsIDkxODUzLCA5MTg1OSwgOTE4NjUsIDkxODcxLCA5MTg3NywgOTE4ODYsIDkxODkyLCA5MTg5NywgOTE5MDUsIAotICAgIDkxOTEyLCA5MTkxOSwgOTE5MjgsIDkxOTM3LCA5MTk0NiwgOTE5NTUsIDkxOTY0LCA5MTk3MywgOTE5ODIsIDkxOTkxLCAKLSAgICA5MjAwMSwgOTIwMTEsIDkyMDE5LCA5MjAyNywgOTIwMzYsIDkyMDQ1LCA5MjA1MSwgOTIwNTcsIDkyMDYzLCA5MjA2OSwgCi0gICAgOTIwNzcsIDkyMDg1LCA5MjA4OSwgOTIwOTUsIDkyMTAwLCA5MjEwNiwgOTIxMTIsIDkyMTE4LCA5MjEyNCwgOTIxMzAsIAotICAgIDkyMTM5LCA5MjE0NCwgOTIxNTEsIDkyMTU2LCA5MjE2MSwgOTIxNjYsIDkyMTcyLCA5MjE3OCwgOTIxODQsIDkyMTkxLCAKLSAgICA5MjE5NiwgOTIyMDEsIDkyMjA2LCA5MjIxMSwgOTIyMTYsIDkyMjIyLCA5MjIyOCwgOTIyMzQsIDkyMjQwLCA5MjI0NiwgCi0gICAgOTIyNTIsIDkyMjU4LCA5MjI2NCwgOTIyNjksIDkyMjc0LCA5MjI3OSwgOTIyODQsIDkyMjg5LCA5MjI5NCwgOTIyOTksIAotICAgIDkyMzA0LCA5MjMxMCwgOTIzMTYsIDkyMzIxLCA5MjMyNiwgOTIzMzEsIDkyMzM2LCA5MjM0MSwgOTIzNDcsIDkyMzU0LCAKLSAgICA5MjM1OCwgOTIzNjIsIDkyMzY2LCA5MjM3MCwgOTIzNzQsIDkyMzc4LCA5MjM4MiwgOTIzODYsIDkyMzk0LCA5MjQwNCwgCi0gICAgOTI0MDgsIDkyNDEyLCA5MjQxOCwgOTI0MjQsIDkyNDMwLCA5MjQzNiwgOTI0NDIsIDkyNDQ4LCA5MjQ1NCwgOTI0NjAsIAotICAgIDkyNDY2LCA5MjQ3MiwgOTI0NzgsIDkyNDg0LCA5MjQ5MCwgOTI0OTYsIDkyNTAwLCA5MjUwNCwgOTI1MTEsIDkyNTE3LCAKLSAgICA5MjUyMywgOTI1MjksIDkyNTM0LCA5MjU0MSwgOTI1NDYsIDkyNTUyLCA5MjU1OCwgOTI1NjQsIDkyNTcwLCA5MjU3NSwgCi0gICAgOTI1NzksIDkyNTg1LCA5MjU4OSwgOTI1OTMsIDkyNTk3LCA5MjYwMywgOTI2MDksIDkyNjEzLCA5MjYxOSwgOTI2MjUsIAotICAgIDkyNjMxLCA5MjYzNywgOTI2NDMsIDkyNjUxLCA5MjY1OSwgOTI2NjUsIDkyNjcxLCA5MjY3NywgOTI2ODMsIDkyNjk1LCAKLSAgICA5MjcwNywgOTI3MjEsIDkyNzMzLCA5Mjc0NSwgOTI3NTksIDkyNzczLCA5Mjc4NywgOTI3OTEsIDkyNzk5LCA5MjgwNywgCi0gICAgOTI4MTIsIDkyODE2LCA5MjgyMCwgOTI4MjQsIDkyODI4LCA5MjgzMiwgOTI4MzYsIDkyODQwLCA5Mjg0NiwgOTI4NTIsIAotICAgIDkyODU4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5Mjg2NCwgOTI4NzAsIDkyODc2LCA5Mjg4MiwgOTI4ODgsIAotICAgIDkyODk0LCA5MjkwMCwgOTI5MDYsIDkyOTEyLCA5MjkxOCwgOTI5MjQsIDkyOTMwLCA5MjkzNiwgOTI5NDIsIDkyOTQ4LCAKLSAgICA5Mjk1NCwgOTI5NjAsIDkyOTY2LCA5Mjk3MiwgOTI5NzgsIDkyOTg0LCA5Mjk5MCwgOTI5OTYsIDkzMDAyLCA5MzAwOCwgCi0gICAgOTMwMTQsIDkzMDIwLCA5MzAyNiwgOTMwMzIsIDkzMDM4LCA5MzA0NCwgOTMwNTAsIDkzMDU2LCA5MzA2MiwgOTMwNjgsIAotICAgIDkzMDc0LCA5MzA4MCwgOTMwODYsIDkzMDkyLCA5MzA5OCwgOTMxMDQsIDkzMTEwLCA5MzExNiwgOTMxMjIsIDkzMTI4LCAKLSAgICA5MzEzNCwgOTMxNDAsIDkzMTQ2LCA5MzE1MiwgOTMxNTgsIDkzMTY0LCA5MzE3MCwgOTMxNzYsIDkzMTgyLCA5MzE4OCwgCi0gICAgOTMxOTQsIDkzMjAwLCA5MzIwNiwgOTMyMTIsIDkzMjE4LCA5MzIyNCwgOTMyMzAsIDkzMjM2LCA5MzI0MiwgOTMyNDgsIAotICAgIDkzMjU0LCA5MzI2MCwgOTMyNjUsIDkzMjcwLCA5MzI3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTMyNzksIAotICAgIDkzMjg0LCA5MzI5MSwgOTMyOTgsIDkzMzA1LCA5MzMxMiwgOTMzMTcsIDkzMzIxLCA5MzMyNywgOTMzMzEsIDkzMzM1LCAKLSAgICA5MzM0MSwgOTMzNDUsIDkzMzQ5LCA5MzM1MywgOTMzNTksIDkzMzY2LCA5MzM3MCwgOTMzNzQsIDkzMzc4LCA5MzM4MiwgCi0gICAgOTMzODYsIDkzMzkwLCA5MzM5NiwgOTM0MDAsIDkzNDA0LCA5MzQwOCwgOTM0MTIsIDkzNDE2LCA5MzQyMCwgOTM0MjQsIAotICAgIDkzNDI4LCA5MzQzMiwgOTM0MzYsIDkzNDQwLCA5MzQ0NCwgOTM0NDksIDkzNDUzLCA5MzQ1NywgOTM0NjEsIDkzNDY1LCAKLSAgICA5MzQ2OSwgOTM0NzMsIDkzNDc3LCA5MzQ4MSwgOTM0ODUsIDkzNDkyLCA5MzQ5NiwgOTM1MDMsIDkzNTA3LCA5MzUxMSwgCi0gICAgOTM1MTUsIDkzNTE5LCA5MzUyMywgOTM1MjcsIDkzNTMxLCA5MzUzOCwgOTM1NDIsIDkzNTQ2LCA5MzU1MCwgOTM1NTQsIAotICAgIDkzNTU4LCA5MzU2NCwgOTM1NjgsIDkzNTc0LCA5MzU3OCwgOTM1ODIsIDkzNTg2LCA5MzU5MCwgOTM1OTQsIDkzNTk4LCAKLSAgICA5MzYwMiwgOTM2MDYsIDkzNjEwLCA5MzYxNCwgOTM2MTgsIDkzNjIyLCA5MzYyNiwgOTM2MzAsIDkzNjM0LCA5MzYzOCwgCi0gICAgOTM2NDIsIDkzNjQ2LCA5MzY1MCwgOTM2NTgsIDkzNjYyLCA5MzY2NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTM2NzAsIDkzNjc4LCA5MzY4NiwgOTM2OTQsIDkzNzAyLCA5MzcxMCwgOTM3MTgsIDkzNzI2LCA5MzczNCwgOTM3NDIsIAotICAgIDkzNzUwLCA5Mzc1OCwgOTM3NjYsIDkzNzc0LCA5Mzc4MiwgOTM3OTAsIDkzNzk4LCA5MzgwNiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM4MTQsIDkzODE4LCA5MzgyMywgOTM4MjgsIDkzODMzLCA5MzgzNywgOTM4NDIsIAotICAgIDkzODQ2LCA5Mzg1MCwgOTM4NTQsIDkzODU5LCA5Mzg2NCwgOTM4NjgsIDkzODcyLCA5Mzg3NiwgOTM4ODAsIDkzODg1LCAKLSAgICA5Mzg5MCwgOTM4OTQsIDkzODk4LCA5MzkwMywgOTM5MDcsIDkzOTExLCA5MzkxNiwgOTM5MjEsIDkzOTI2LCA5MzkzMSwgCi0gICAgOTM5MzUsIDkzOTQwLCA5Mzk0NSwgOTM5NTAsIDkzOTU0LCA5Mzk1OSwgOTM5NjMsIDkzOTY3LCA5Mzk3MSwgOTM5NzYsIAotICAgIDkzOTgxLCA5Mzk4NSwgOTM5ODksIDkzOTkzLCA5Mzk5NywgOTQwMDIsIDk0MDA3LCA5NDAxMSwgOTQwMTUsIDk0MDIwLCAKLSAgICA5NDAyNCwgOTQwMjgsIDk0MDMzLCA5NDAzOCwgOTQwNDMsIDk0MDQ4LCA5NDA1MiwgOTQwNTcsIDk0MDYyLCA5NDA2NywgCi0gICAgOTQwNzEsIDk0MDc2LCA5NDA4MCwgOTQwODQsIDk0MDg4LCA5NDA5MywgOTQwOTgsIDk0MTAyLCA5NDEwNiwgOTQxMTAsIAotICAgIDk0MTE0LCA5NDExOSwgOTQxMjQsIDk0MTI4LCA5NDEzMiwgOTQxMzcsIDk0MTQxLCA5NDE0NSwgOTQxNTAsIDk0MTU1LCAKLSAgICA5NDE2MCwgOTQxNjUsIDk0MTY5LCA5NDE3NCwgOTQxNzksIDk0MTg0LCA5NDE4OCwgOTQxOTMsIDAsIDk0MTk3LCA5NDIwMSwgCi0gICAgOTQyMDYsIDk0MjExLCA5NDIxNSwgOTQyMTksIDk0MjIzLCA5NDIyNywgOTQyMzIsIDk0MjM3LCA5NDI0MSwgOTQyNDUsIAotICAgIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYzLCA5NDI2OCwgOTQyNzMsIDk0Mjc4LCA5NDI4MywgOTQyODksIDk0Mjk1LCAKLSAgICA5NDMwMSwgOTQzMDYsIDk0MzEyLCA5NDMxNywgOTQzMjIsIDk0MzI3LCA5NDMzMywgOTQzMzksIDk0MzQ0LCA5NDM0OSwgCi0gICAgOTQzNTQsIDk0MzU5LCA5NDM2NSwgOTQzNzEsIDk0Mzc2LCA5NDM4MSwgOTQzODcsIDk0MzkyLCA5NDM5NywgOTQ0MDMsIAotICAgIDk0NDA5LCA5NDQxNSwgOTQ0MjEsIDk0NDI2LCA5NDQzMiwgOTQ0MzgsIDk0NDQ0LCA5NDQ0OSwgOTQ0NTUsIDk0NDYwLCAKLSAgICA5NDQ2NSwgOTQ0NzAsIDk0NDc2LCA5NDQ4MiwgOTQ0ODcsIDk0NDkyLCA5NDQ5NywgOTQ1MDIsIDk0NTA4LCA5NDUxNCwgCi0gICAgOTQ1MTksIDk0NTI0LCA5NDUzMCwgOTQ1MzUsIDk0NTQwLCA5NDU0NiwgOTQ1NTIsIDk0NTU4LCA5NDU2NCwgMCwgOTQ1NjgsIAotICAgIDk0NTczLCAwLCAwLCA5NDU3OCwgMCwgMCwgOTQ1ODIsIDk0NTg3LCAwLCAwLCA5NDU5MiwgOTQ1OTYsIDk0NjAwLCA5NDYwNSwgCi0gICAgMCwgOTQ2MTAsIDk0NjE0LCA5NDYxOSwgOTQ2MjMsIDk0NjI3LCA5NDYzMiwgOTQ2MzcsIDk0NjQyLCA5NDY0NywgOTQ2NTEsIAotICAgIDk0NjU2LCA5NDY2MSwgMCwgOTQ2NjYsIDAsIDk0NjcxLCA5NDY3NSwgOTQ2NzksIDk0Njg0LCA5NDY4OSwgOTQ2OTMsIAotICAgIDk0Njk3LCAwLCA5NDcwMSwgOTQ3MDYsIDk0NzExLCA5NDcxNSwgOTQ3MTksIDk0NzI0LCA5NDcyOCwgOTQ3MzIsIDk0NzM3LCAKLSAgICA5NDc0MiwgOTQ3NDcsIDk0NzUyLCA5NDc1NywgOTQ3NjMsIDk0NzY5LCA5NDc3NSwgOTQ3ODAsIDk0Nzg2LCA5NDc5MSwgCi0gICAgOTQ3OTYsIDk0ODAxLCA5NDgwNywgOTQ4MTMsIDk0ODE4LCA5NDgyMywgOTQ4MjgsIDk0ODMzLCA5NDgzOSwgOTQ4NDUsIAotICAgIDk0ODUwLCA5NDg1NSwgOTQ4NjEsIDk0ODY2LCA5NDg3MSwgOTQ4NzcsIDk0ODgzLCA5NDg4OSwgOTQ4OTUsIDk0OTAwLCAKLSAgICA5NDkwNiwgOTQ5MTIsIDk0OTE4LCA5NDkyMywgOTQ5MjksIDk0OTM0LCA5NDkzOSwgOTQ5NDQsIDk0OTUwLCA5NDk1NiwgCi0gICAgOTQ5NjEsIDk0OTY2LCA5NDk3MSwgOTQ5NzYsIDk0OTgyLCA5NDk4OCwgOTQ5OTMsIDk0OTk4LCA5NTAwNCwgOTUwMDksIAotICAgIDk1MDE0LCA5NTAyMCwgOTUwMjYsIDk1MDMyLCA5NTAzOCwgOTUwNDIsIDAsIDk1MDQ3LCA5NTA1MiwgOTUwNTYsIDk1MDYxLCAKLSAgICAwLCAwLCA5NTA2NSwgOTUwNzAsIDk1MDc1LCA5NTA3OSwgOTUwODMsIDk1MDg3LCA5NTA5MSwgOTUwOTYsIDAsIDk1MTAxLCAKLSAgICA5NTEwNSwgOTUxMTAsIDk1MTE0LCA5NTExOCwgOTUxMjMsIDk1MTI4LCAwLCA5NTEzMywgOTUxMzcsIDk1MTQyLCA5NTE0NywgCi0gICAgOTUxNTIsIDk1MTU2LCA5NTE2MSwgOTUxNjUsIDk1MTY5LCA5NTE3MywgOTUxNzgsIDk1MTgzLCA5NTE4NywgOTUxOTEsIAotICAgIDk1MTk1LCA5NTE5OSwgOTUyMDQsIDk1MjA5LCA5NTIxMywgOTUyMTcsIDk1MjIyLCA5NTIyNiwgOTUyMzAsIDk1MjM1LCAKLSAgICA5NTI0MCwgOTUyNDUsIDk1MjUwLCA5NTI1NCwgMCwgOTUyNTksIDk1MjY0LCA5NTI2OCwgOTUyNzMsIDAsIDk1Mjc3LCAKLSAgICA5NTI4MSwgOTUyODYsIDk1MjkxLCA5NTI5NSwgMCwgOTUyOTksIDAsIDAsIDAsIDk1MzAzLCA5NTMwNywgOTUzMTIsIAotICAgIDk1MzE2LCA5NTMyMCwgOTUzMjUsIDk1MzMwLCAwLCA5NTMzNSwgOTUzMzksIDk1MzQ0LCA5NTM0OSwgOTUzNTQsIDk1MzU4LCAKLSAgICA5NTM2MywgOTUzNjcsIDk1MzcxLCA5NTM3NSwgOTUzODAsIDk1Mzg1LCA5NTM4OSwgOTUzOTMsIDk1Mzk3LCA5NTQwMSwgCi0gICAgOTU0MDYsIDk1NDExLCA5NTQxNSwgOTU0MTksIDk1NDI0LCA5NTQyOCwgOTU0MzIsIDk1NDM3LCA5NTQ0MiwgOTU0NDcsIAotICAgIDk1NDUyLCA5NTQ1NywgOTU0NjMsIDk1NDY5LCA5NTQ3NSwgOTU0ODAsIDk1NDg2LCA5NTQ5MSwgOTU0OTYsIDk1NTAxLCAKLSAgICA5NTUwNywgOTU1MTMsIDk1NTE4LCA5NTUyMywgOTU1MjgsIDk1NTMzLCA5NTUzOSwgOTU1NDUsIDk1NTUwLCA5NTU1NSwgCi0gICAgOTU1NjEsIDk1NTY2LCA5NTU3MSwgOTU1NzcsIDk1NTgzLCA5NTU4OSwgOTU1OTUsIDk1NjAwLCA5NTYwNiwgOTU2MTIsIAotICAgIDk1NjE4LCA5NTYyMywgOTU2MjksIDk1NjM0LCA5NTYzOSwgOTU2NDQsIDk1NjUwLCA5NTY1NiwgOTU2NjEsIDk1NjY2LCAKLSAgICA5NTY3MSwgOTU2NzYsIDk1NjgyLCA5NTY4OCwgOTU2OTMsIDk1Njk4LCA5NTcwNCwgOTU3MDksIDk1NzE0LCA5NTcyMCwgCi0gICAgOTU3MjYsIDk1NzMyLCA5NTczOCwgOTU3NDIsIDk1NzQ3LCA5NTc1MiwgOTU3NTcsIDk1NzYxLCA5NTc2NiwgOTU3NzAsIAotICAgIDk1Nzc0LCA5NTc3OCwgOTU3ODMsIDk1Nzg4LCA5NTc5MiwgOTU3OTYsIDk1ODAwLCA5NTgwNCwgOTU4MDksIDk1ODE0LCAKLSAgICA5NTgxOCwgOTU4MjIsIDk1ODI3LCA5NTgzMSwgOTU4MzUsIDk1ODQwLCA5NTg0NSwgOTU4NTAsIDk1ODU1LCA5NTg1OSwgCi0gICAgOTU4NjQsIDk1ODY5LCA5NTg3NCwgOTU4NzgsIDk1ODgzLCA5NTg4NywgOTU4OTEsIDk1ODk1LCA5NTkwMCwgOTU5MDUsIAotICAgIDk1OTA5LCA5NTkxMywgOTU5MTcsIDk1OTIxLCA5NTkyNiwgOTU5MzEsIDk1OTM1LCA5NTkzOSwgOTU5NDQsIDk1OTQ4LCAKLSAgICA5NTk1MiwgOTU5NTcsIDk1OTYyLCA5NTk2NywgOTU5NzIsIDk1OTc3LCA5NTk4MywgOTU5ODksIDk1OTk1LCA5NjAwMCwgCi0gICAgOTYwMDYsIDk2MDExLCA5NjAxNiwgOTYwMjEsIDk2MDI3LCA5NjAzMywgOTYwMzgsIDk2MDQzLCA5NjA0OCwgOTYwNTMsIAotICAgIDk2MDU5LCA5NjA2NSwgOTYwNzAsIDk2MDc1LCA5NjA4MSwgOTYwODYsIDk2MDkxLCA5NjA5NywgOTYxMDMsIDk2MTA5LCAKLSAgICA5NjExNSwgOTYxMjAsIDk2MTI2LCA5NjEzMiwgOTYxMzgsIDk2MTQzLCA5NjE0OSwgOTYxNTQsIDk2MTU5LCA5NjE2NCwgCi0gICAgOTYxNzAsIDk2MTc2LCA5NjE4MSwgOTYxODYsIDk2MTkxLCA5NjE5NiwgOTYyMDIsIDk2MjA4LCA5NjIxMywgOTYyMTgsIAotICAgIDk2MjI0LCA5NjIyOSwgOTYyMzQsIDk2MjQwLCA5NjI0NiwgOTYyNTIsIDk2MjU4LCA5NjI2MywgOTYyNjksIDk2Mjc1LCAKLSAgICA5NjI4MSwgOTYyODYsIDk2MjkyLCA5NjI5NywgOTYzMDIsIDk2MzA3LCA5NjMxMywgOTYzMTksIDk2MzI0LCA5NjMyOSwgCi0gICAgOTYzMzQsIDk2MzM5LCA5NjM0NSwgOTYzNTEsIDk2MzU2LCA5NjM2MSwgOTYzNjcsIDk2MzcyLCA5NjM3NywgOTYzODMsIAotICAgIDk2Mzg5LCA5NjM5NSwgOTY0MDEsIDk2NDA2LCA5NjQxMiwgOTY0MTgsIDk2NDI0LCA5NjQyOSwgOTY0MzUsIDk2NDQwLCAKLSAgICA5NjQ0NSwgOTY0NTAsIDk2NDU2LCA5NjQ2MiwgOTY0NjcsIDk2NDcyLCA5NjQ3NywgOTY0ODIsIDk2NDg4LCA5NjQ5NCwgCi0gICAgOTY0OTksIDk2NTA0LCA5NjUxMCwgOTY1MTUsIDk2NTIwLCA5NjUyNiwgOTY1MzIsIDk2NTM4LCA5NjU0NCwgOTY1NTAsIAotICAgIDk2NTU3LCA5NjU2NCwgOTY1NzEsIDk2NTc3LCA5NjU4NCwgOTY1OTAsIDk2NTk2LCA5NjYwMiwgOTY2MDksIDk2NjE2LCAKLSAgICA5NjYyMiwgOTY2MjgsIDk2NjM0LCA5NjY0MCwgOTY2NDcsIDk2NjU0LCA5NjY2MCwgOTY2NjYsIDk2NjczLCA5NjY3OSwgCi0gICAgOTY2ODUsIDk2NjkyLCA5NjY5OSwgOTY3MDYsIDk2NzEzLCA5NjcxOSwgOTY3MjYsIDk2NzMzLCA5Njc0MCwgOTY3NDYsIAotICAgIDk2NzUzLCA5Njc1OSwgOTY3NjUsIDk2NzcxLCA5Njc3OCwgOTY3ODUsIDk2NzkxLCA5Njc5NywgOTY4MDMsIDk2ODA5LCAKLSAgICA5NjgxNiwgOTY4MjMsIDk2ODI5LCA5NjgzNSwgOTY4NDIsIDk2ODQ4LCA5Njg1NCwgOTY4NjEsIDk2ODY4LCA5Njg3NSwgCi0gICAgOTY4ODIsIDk2ODg2LCA5Njg5MSwgOTY4OTYsIDk2OTAxLCA5NjkwNSwgOTY5MTAsIDk2OTE0LCA5NjkxOCwgOTY5MjIsIAotICAgIDk2OTI3LCA5NjkzMiwgOTY5MzYsIDk2OTQwLCA5Njk0NCwgOTY5NDgsIDk2OTUzLCA5Njk1OCwgOTY5NjIsIDk2OTY2LCAKLSAgICA5Njk3MSwgOTY5NzUsIDk2OTc5LCA5Njk4NCwgOTY5ODksIDk2OTk0LCA5Njk5OSwgOTcwMDMsIDk3MDA4LCA5NzAxMywgCi0gICAgOTcwMTgsIDk3MDIyLCA5NzAyNywgOTcwMzEsIDk3MDM1LCA5NzAzOSwgOTcwNDQsIDk3MDQ5LCA5NzA1MywgOTcwNTcsIAotICAgIDk3MDYxLCA5NzA2NSwgOTcwNzAsIDk3MDc1LCA5NzA3OSwgOTcwODMsIDk3MDg4LCA5NzA5MiwgOTcwOTYsIDk3MTAxLCAKLSAgICA5NzEwNiwgOTcxMTEsIDk3MTE2LCA5NzEyMiwgMCwgMCwgOTcxMjksIDk3MTM0LCA5NzEzOSwgOTcxNDQsIDk3MTQ5LCAKLSAgICA5NzE1NCwgOTcxNTksIDk3MTY0LCA5NzE2OSwgOTcxNzQsIDk3MTc5LCA5NzE4NCwgOTcxODksIDk3MTk0LCA5NzE5OSwgCi0gICAgOTcyMDQsIDk3MjA5LCA5NzIxNCwgOTcyMjAsIDk3MjI1LCA5NzIzMCwgOTcyMzUsIDk3MjQwLCA5NzI0NSwgOTcyNTAsIAotICAgIDk3MjU1LCA5NzI1OSwgOTcyNjQsIDk3MjY5LCA5NzI3NCwgOTcyNzksIDk3Mjg0LCA5NzI4OSwgOTcyOTQsIDk3Mjk5LCAKLSAgICA5NzMwNCwgOTczMDksIDk3MzE0LCA5NzMxOSwgOTczMjQsIDk3MzI5LCA5NzMzNCwgOTczMzksIDk3MzQ0LCA5NzM1MCwgCi0gICAgOTczNTUsIDk3MzYwLCA5NzM2NSwgOTczNzAsIDk3Mzc1LCA5NzM4MCwgOTczODUsIDk3MzkxLCA5NzM5NiwgOTc0MDEsIAotICAgIDk3NDA2LCA5NzQxMSwgOTc0MTYsIDk3NDIxLCA5NzQyNiwgOTc0MzEsIDk3NDM2LCA5NzQ0MSwgOTc0NDYsIDk3NDUxLCAKLSAgICA5NzQ1NiwgOTc0NjEsIDk3NDY2LCA5NzQ3MSwgOTc0NzYsIDk3NDgxLCA5NzQ4NiwgOTc0OTEsIDk3NDk2LCA5NzUwMSwgCi0gICAgOTc1MDYsIDk3NTEyLCA5NzUxNywgOTc1MjIsIDk3NTI3LCA5NzUzMiwgOTc1MzcsIDk3NTQyLCA5NzU0NywgOTc1NTEsIAotICAgIDk3NTU2LCA5NzU2MSwgOTc1NjYsIDk3NTcxLCA5NzU3NiwgOTc1ODEsIDk3NTg2LCA5NzU5MSwgOTc1OTYsIDk3NjAxLCAKLSAgICA5NzYwNiwgOTc2MTEsIDk3NjE2LCA5NzYyMSwgOTc2MjYsIDk3NjMxLCA5NzYzNiwgOTc2NDIsIDk3NjQ3LCA5NzY1MiwgCi0gICAgOTc2NTcsIDk3NjYyLCA5NzY2NywgOTc2NzIsIDk3Njc3LCA5NzY4MywgOTc2ODgsIDk3NjkzLCA5NzY5OCwgOTc3MDMsIAotICAgIDk3NzA4LCA5NzcxMywgOTc3MTksIDk3NzI1LCA5NzczMSwgOTc3MzcsIDk3NzQzLCA5Nzc0OSwgOTc3NTUsIDk3NzYxLCAKLSAgICA5Nzc2NywgOTc3NzMsIDk3Nzc5LCA5Nzc4NSwgOTc3OTEsIDk3Nzk3LCA5NzgwMywgOTc4MDksIDk3ODE1LCA5NzgyMiwgCi0gICAgOTc4MjgsIDk3ODM0LCA5Nzg0MCwgOTc4NDYsIDk3ODUyLCA5Nzg1OCwgOTc4NjQsIDk3ODY5LCA5Nzg3NSwgOTc4ODEsIAotICAgIDk3ODg3LCA5Nzg5MywgOTc4OTksIDk3OTA1LCA5NzkxMSwgOTc5MTcsIDk3OTIzLCA5NzkyOSwgOTc5MzUsIDk3OTQxLCAKLSAgICA5Nzk0NywgOTc5NTMsIDk3OTU5LCA5Nzk2NSwgOTc5NzEsIDk3OTc4LCA5Nzk4NCwgOTc5OTAsIDk3OTk2LCA5ODAwMiwgCi0gICAgOTgwMDgsIDk4MDE0LCA5ODAyMCwgOTgwMjcsIDk4MDMzLCA5ODAzOSwgOTgwNDUsIDk4MDUxLCA5ODA1NywgOTgwNjMsIAotICAgIDk4MDY5LCA5ODA3NSwgOTgwODEsIDk4MDg3LCA5ODA5MywgOTgwOTksIDk4MTA1LCA5ODExMSwgOTgxMTcsIDk4MTIzLCAKLSAgICA5ODEyOSwgOTgxMzUsIDk4MTQxLCA5ODE0NywgOTgxNTMsIDk4MTU5LCA5ODE2NSwgOTgxNzIsIDk4MTc4LCA5ODE4NCwgCi0gICAgOTgxOTAsIDk4MTk2LCA5ODIwMiwgOTgyMDgsIDk4MjE0LCA5ODIxOSwgOTgyMjUsIDk4MjMxLCA5ODIzNywgOTgyNDMsIAotICAgIDk4MjQ5LCA5ODI1NSwgOTgyNjEsIDk4MjY3LCA5ODI3MywgOTgyNzksIDk4Mjg1LCA5ODI5MSwgOTgyOTcsIDk4MzAzLCAKLSAgICA5ODMwOSwgOTgzMTUsIDk4MzIxLCA5ODMyOCwgOTgzMzQsIDk4MzQwLCA5ODM0NiwgOTgzNTIsIDk4MzU4LCA5ODM2NCwgCi0gICAgOTgzNzAsIDk4Mzc3LCA5ODM4MywgOTgzODksIDk4Mzk1LCA5ODQwMSwgOTg0MDcsIDk4NDEzLCA5ODQyMCwgOTg0MjcsIAotICAgIDk4NDM0LCA5ODQ0MSwgOTg0NDgsIDk4NDU1LCA5ODQ2MiwgOTg0NjksIDk4NDc2LCA5ODQ4MywgOTg0OTAsIDk4NDk3LCAKLSAgICA5ODUwNCwgOTg1MTEsIDk4NTE4LCA5ODUyNSwgOTg1MzIsIDk4NTQwLCA5ODU0NywgOTg1NTQsIDk4NTYxLCA5ODU2OCwgCi0gICAgOTg1NzUsIDk4NTgyLCA5ODU4OSwgOTg1OTUsIDk4NjAyLCA5ODYwOSwgOTg2MTYsIDk4NjIzLCA5ODYzMCwgOTg2MzcsIAotICAgIDk4NjQ0LCA5ODY1MSwgOTg2NTgsIDk4NjY1LCA5ODY3MiwgOTg2NzksIDk4Njg2LCA5ODY5MywgOTg3MDAsIDk4NzA3LCAKLSAgICA5ODcxNCwgOTg3MjIsIDk4NzI5LCA5ODczNiwgOTg3NDMsIDk4NzUwLCA5ODc1NywgOTg3NjQsIDk4NzcxLCA5ODc3OSwgCi0gICAgOTg3ODYsIDk4NzkzLCA5ODgwMCwgOTg4MDcsIDk4ODE0LCA5ODgyMSwgOTg4MjYsIDAsIDAsIDk4ODMxLCA5ODgzNiwgCi0gICAgOTg4NDAsIDk4ODQ0LCA5ODg0OCwgOTg4NTIsIDk4ODU2LCA5ODg2MCwgOTg4NjQsIDk4ODY4LCA5ODg3MiwgOTg4NzcsIAotICAgIDk4ODgxLCA5ODg4NSwgOTg4ODksIDk4ODkzLCA5ODg5NywgOTg5MDEsIDk4OTA1LCA5ODkwOSwgOTg5MTMsIDk4OTE4LCAKLSAgICA5ODkyMiwgOTg5MjYsIDk4OTMwLCA5ODkzNCwgOTg5MzgsIDk4OTQyLCA5ODk0NiwgOTg5NTAsIDk4OTU0LCA5ODk2MCwgCi0gICAgOTg5NjUsIDk4OTcwLCA5ODk3NSwgOTg5ODAsIDk4OTg1LCA5ODk5MCwgOTg5OTUsIDk5MDAwLCA5OTAwNSwgOTkwMTAsIAotICAgIDk5MDE0LCA5OTAxOCwgOTkwMjIsIDk5MDI2LCA5OTAzMCwgOTkwMzQsIDk5MDM4LCA5OTA0MiwgOTkwNDYsIDk5MDUzLCAKLSAgICA5OTA2MCwgOTkwNjcsIDk5MDc0LCA5OTA4MSwgOTkwODgsIDk5MDk0LCA5OTEwMSwgOTkxMDgsIDk5MTE1LCA5OTEyMywgCi0gICAgOTkxMzEsIDk5MTM5LCA5OTE0NywgOTkxNTUsIDk5MTYzLCA5OTE3MCwgOTkxNzcsIDk5MTg0LCA5OTE5MiwgOTkyMDAsIAotICAgIDk5MjA4LCA5OTIxNiwgOTkyMjQsIDk5MjMyLCA5OTIzOSwgOTkyNDYsIDk5MjUzLCA5OTI2MSwgOTkyNjksIDk5Mjc3LCAKLSAgICA5OTI4NSwgOTkyOTMsIDk5MzAxLCA5OTMwNiwgOTkzMTEsIDk5MzE2LCA5OTMyMSwgOTkzMjYsIDk5MzMxLCA5OTMzNiwgCi0gICAgOTkzNDEsIDk5MzQ2LCAwLCAwLCAwLCAwLCA5OTM1MSwgOTkzNTYsIDk5MzYwLCA5OTM2NCwgOTkzNjgsIDk5MzcyLCAKLSAgICA5OTM3NiwgOTkzODAsIDk5Mzg0LCA5OTM4OCwgOTkzOTIsIDk5Mzk2LCA5OTQwMCwgOTk0MDQsIDk5NDA4LCA5OTQxMiwgCi0gICAgOTk0MTYsIDk5NDIwLCA5OTQyNCwgOTk0MjgsIDk5NDMyLCA5OTQzNiwgOTk0NDAsIDk5NDQ0LCA5OTQ0OCwgOTk0NTIsIAotICAgIDk5NDU2LCA5OTQ2MCwgOTk0NjQsIDk5NDY4LCA5OTQ3MiwgOTk0NzYsIDk5NDgwLCA5OTQ4NCwgOTk0ODgsIDk5NDkyLCAKLSAgICA5OTQ5NiwgOTk1MDAsIDk5NTA0LCA5OTUwOCwgOTk1MTIsIDk5NTE2LCA5OTUyMCwgOTk1MjQsIDk5NTI4LCA5OTUzMiwgCi0gICAgOTk1MzYsIDk5NTQwLCA5OTU0NCwgOTk1NDgsIDk5NTUyLCA5OTU1NywgOTk1NjEsIDk5NTY1LCA5OTU2OSwgOTk1NzMsIAotICAgIDk5NTc3LCA5OTU4MSwgOTk1ODUsIDk5NTg5LCA5OTU5MywgOTk1OTcsIDk5NjAxLCA5OTYwNSwgOTk2MDksIDk5NjEzLCAKLSAgICA5OTYxNywgOTk2MjEsIDk5NjI1LCA5OTYyOSwgOTk2MzMsIDk5NjM3LCA5OTY0MSwgOTk2NDUsIDk5NjQ5LCA5OTY1MywgCi0gICAgOTk2NTcsIDk5NjYxLCA5OTY2NSwgOTk2NjksIDk5NjczLCA5OTY3NywgOTk2ODEsIDk5Njg1LCA5OTY4OSwgOTk2OTMsIAotICAgIDk5Njk3LCA5OTcwMSwgOTk3MDUsIDk5NzA5LCA5OTcxMywgOTk3MTcsIDk5NzIxLCA5OTcyNSwgOTk3MjksIDk5NzMzLCAKLSAgICA5OTczNywgOTk3NDEsIDk5NzQ1LCA5OTc0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM0NzgsIDkzNDgxLCA5MzQ4NiwgOTM0OTIsIDkzNTAwLCAKKyAgICA5MzUwNSwgOTM1MTEsIDkzNTE5LCA5MzUyNSwgOTM1MzEsIDkzNTM1LCA5MzUzOSwgOTM1NDYsIDkzNTU1LCA5MzU2MiwgCisgICAgOTM1NzEsIDkzNTc3LCA5MzU4NiwgOTM1OTMsIDkzNjAwLCA5MzYwNywgOTM2MTcsIDkzNjIzLCA5MzYyNywgOTM2MzQsIAorICAgIDkzNjQzLCA5MzY1MywgOTM2NjAsIDkzNjY3LCA5MzY3MSwgOTM2NzUsIDkzNjgyLCA5MzY5MiwgOTM2OTYsIDkzNzAzLCAKKyAgICA5MzcxMCwgOTM3MTcsIDkzNzIzLCA5MzczMCwgOTM3MzcsIDkzNzQ0LCA5Mzc1MSwgOTM3NTUsIDkzNzU5LCA5Mzc2MywgCisgICAgOTM3NzAsIDkzNzc0LCA5Mzc4MSwgOTM3ODgsIDkzODAyLCA5MzgxMSwgOTM4MTUsIDkzODE5LCA5MzgyMywgOTM4MzAsIAorICAgIDkzODM0LCA5MzgzOCwgOTM4NDIsIDkzODUwLCA5Mzg1OCwgOTM4NzcsIDkzODg3LCA5MzkwNywgOTM5MTEsIDkzOTE1LCAKKyAgICA5MzkxOSwgOTM5MjMsIDkzOTI3LCA5MzkzMSwgOTM5MzUsIDkzOTQyLCA5Mzk0NiwgOTM5NDksIDkzOTUzLCA5Mzk1NywgCisgICAgOTM5NjMsIDkzOTcwLCA5Mzk3OSwgOTM5ODMsIDkzOTkyLCA5NDAwMSwgOTQwMDksIDk0MDEzLCA5NDAyMCwgOTQwMjQsIAorICAgIDk0MDI4LCA5NDAzMiwgOTQwMzYsIDk0MDQ3LCA5NDA1NiwgOTQwNjUsIDk0MDc0LCA5NDA4MywgOTQwOTUsIDk0MTA0LCAKKyAgICA5NDExMywgOTQxMjIsIDk0MTMwLCA5NDEzOSwgOTQxNTEsIDk0MTYwLCA5NDE2OSwgOTQxNzgsIDk0MTkwLCA5NDE5OSwgCisgICAgOTQyMDgsIDk0MjIwLCA5NDIyOSwgOTQyMzgsIDk0MjUwLCA5NDI1OSwgOTQyNjMsIDk0MjY3LCA5NDI3MSwgOTQyNzUsIAorICAgIDk0Mjc5LCA5NDI4MywgOTQyODcsIDk0Mjk0LCA5NDI5OCwgOTQzMDIsIDk0MzEzLCA5NDMxNywgOTQzMjEsIDk0MzI4LCAKKyAgICA5NDMzNCwgOTQzNDAsIDk0MzQ0LCA5NDM1MSwgOTQzNTUsIDk0MzU5LCA5NDM2MywgOTQzNjcsIDk0MzcxLCA5NDM3NSwgCisgICAgOTQzODEsIDk0Mzg5LCA5NDM5MywgOTQzOTcsIDk0NDAwLCA5NDQwNiwgOTQ0MTYsIDk0NDIwLCA5NDQzMiwgOTQ0MzksIAorICAgIDk0NDQ2LCA5NDQ1MywgOTQ0NjAsIDk0NDY2LCA5NDQ3MCwgOTQ0NzQsIDk0NDc4LCA5NDQ4MiwgOTQ0ODksIDk0NDk4LCAKKyAgICA5NDUwNSwgOTQ1MTMsIDk0NTIxLCA5NDUyNywgOTQ1MzEsIDk0NTM1LCA5NDUzOSwgOTQ1NDMsIDk0NTQ5LCA5NDU1OCwgCisgICAgOTQ1NzAsIDk0NTc3LCA5NDU4NCwgOTQ1OTMsIDk0NjA0LCA5NDYxMCwgOTQ2MTksIDk0NjI4LCA5NDYzNSwgOTQ2NDQsIAorICAgIDk0NjUxLCA5NDY1OCwgOTQ2NjgsIDk0Njc1LCA5NDY4MiwgOTQ2ODksIDk0Njk2LCA5NDcwMCwgOTQ3MDYsIDk0NzEwLCAKKyAgICA5NDcyMSwgOTQ3MjksIDk0NzM4LCA5NDc1MCwgOTQ3NTcsIDk0NzY0LCA5NDc3NCwgOTQ3ODEsIDk0NzkwLCA5NDc5NywgCisgICAgOTQ4MDYsIDk0ODEzLCA5NDgyMCwgOTQ4MzAsIDk0ODM3LCA5NDg0NCwgOTQ4NTQsIDk0ODYxLCA5NDg3MywgOTQ4ODIsIAorICAgIDk0ODg5LCA5NDg5NiwgOTQ5MDMsIDk0OTEyLCA5NDkyMiwgOTQ5MzUsIDk0OTQyLCA5NDk1MiwgOTQ5NjIsIDk0OTY5LCAKKyAgICA5NDk3OCwgOTQ5OTEsIDk0OTk4LCA5NTAwNSwgOTUwMTIsIDk1MDIyLCA5NTAzMiwgOTUwMzksIDk1MDQ5LCA5NTA1NiwgCisgICAgOTUwNjMsIDk1MDczLCA5NTA3OSwgOTUwODYsIDk1MDkzLCA5NTEwMCwgOTUxMTAsIDk1MTE3LCA5NTEyNCwgOTUxMzEsIAorICAgIDk1MTM3LCA5NTE0NCwgOTUxNTQsIDk1MTYxLCA5NTE2NSwgOTUxNzMsIDk1MTc3LCA5NTE4OSwgOTUxOTMsIDk1MjA3LCAKKyAgICA5NTIxMSwgOTUyMTUsIDk1MjE5LCA5NTIyMywgOTUyMjksIDk1MjM2LCA5NTI0NCwgOTUyNDgsIDk1MjUyLCA5NTI1NiwgCisgICAgOTUyNjAsIDk1MjY3LCA5NTI3MSwgOTUyNzcsIDk1MjgzLCA5NTI5MSwgOTUyOTUsIDk1MzAyLCA5NTMxMCwgOTUzMTQsIAorICAgIDk1MzE4LCA5NTMyNCwgOTUzMjgsIDk1MzM3LCA5NTM0NiwgOTUzNTMsIDk1MzYzLCA5NTM2OSwgOTUzNzMsIDk1Mzc3LCAKKyAgICA5NTM4NSwgOTUzOTIsIDk1Mzk5LCA5NTQwNSwgOTU0MDksIDk1NDE3LCA5NTQyMSwgOTU0MjgsIDk1NDQwLCA5NTQ0NywgCisgICAgOTU0NTcsIDk1NDYzLCA5NTQ2NywgOTU0NzYsIDk1NDgzLCA5NTQ5MiwgOTU0OTYsIDk1NTAwLCA5NTUwNywgOTU1MTEsIAorICAgIDk1NTE1LCA5NTUxOSwgOTU1MjMsIDk1NTI2LCA5NTUzMiwgOTU1MzgsIDk1NTQyLCA5NTU0NiwgOTU1NTMsIDk1NTYwLCAKKyAgICA5NTU2NywgOTU1NzQsIDk1NTgxLCA5NTU4OCwgOTU1OTUsIDk1NjAyLCA5NTYwOCwgOTU2MTIsIDk1NjE2LCA5NTYyMywgCisgICAgOTU2MzAsIDk1NjM3LCA5NTY0NCwgOTU2NTEsIDk1NjU1LCA5NTY1OCwgOTU2NjMsIDk1NjY3LCA5NTY3MSwgOTU2ODAsIAorICAgIDk1Njg5LCA5NTY5MywgOTU2OTcsIDk1NzAzLCA5NTcwOSwgOTU3MjYsIDk1NzMyLCA5NTczNiwgOTU3NDUsIDk1NzQ5LCAKKyAgICA5NTc1MywgOTU3NjAsIDk1NzY4LCA5NTc3NiwgOTU3ODIsIDk1Nzg2LCA5NTc5MCwgOTU3OTQsIDk1Nzk4LCA5NTgwMSwgCisgICAgOTU4MDcsIDk1ODE0LCA5NTgyNCwgOTU4MzEsIDk1ODM4LCA5NTg0NSwgOTU4NTEsIDk1ODU4LCA5NTg2NSwgOTU4NzIsIAorICAgIDk1ODc5LCA5NTg4NiwgOTU4OTUsIDk1OTAyLCA5NTkxNCwgOTU5MjEsIDk1OTI4LCA5NTkzOCwgOTU5NDksIDk1OTU2LCAKKyAgICA5NTk2MywgOTU5NzAsIDk1OTc3LCA5NTk4NCwgOTU5OTEsIDk1OTk4LCA5NjAwNSwgOTYwMTIsIDk2MDE5LCA5NjAyOSwgCisgICAgOTYwMzksIDk2MDQ5LCA5NjA1NiwgOTYwNjYsIDk2MDczLCA5NjA4MCwgOTYwODcsIDk2MDk0LCA5NjEwMSwgOTYxMDgsIAorICAgIDk2MTE1LCA5NjEyMiwgOTYxMjksIDk2MTM2LCA5NjE0MywgOTYxNTAsIDk2MTU3LCA5NjE2MywgOTYxNzAsIDk2MTc3LCAKKyAgICA5NjE4NiwgOTYxOTMsIDk2MjAwLCA5NjIwNCwgOTYyMTIsIDk2MjE2LCA5NjIyMCwgOTYyMjQsIDk2MjI4LCA5NjIzMiwgCisgICAgOTYyMzksIDk2MjQzLCA5NjI1MiwgOTYyNTYsIDk2MjYzLCA5NjI3MSwgOTYyNzUsIDk2Mjc5LCA5NjI4MywgOTYyOTYsIAorICAgIDk2MzEyLCA5NjMxNiwgOTYzMjAsIDk2MzI3LCA5NjMzMywgOTYzNDAsIDk2MzQ0LCA5NjM0OCwgOTYzNTIsIDk2MzU2LCAKKyAgICA5NjM2MCwgOTYzNjcsIDk2MzcxLCA5NjM4OSwgOTYzOTMsIDk2Mzk3LCA5NjQwNCwgOTY0MDgsIDk2NDEyLCA5NjQxOCwgCisgICAgOTY0MjIsIDk2NDI2LCA5NjQzNCwgOTY0MzgsIDk2NDQyLCA5NjQ0NiwgOTY0NTAsIDk2NDU2LCA5NjQ2NywgOTY0NzYsIAorICAgIDk2NDg1LCA5NjQ5MiwgOTY0OTksIDk2NTEwLCA5NjUxNywgOTY1MjQsIDk2NTMxLCA5NjUzOCwgOTY1NDUsIDk2NTUyLCAKKyAgICA5NjU1OSwgOTY1NjksIDk2NTc1LCA5NjU4MiwgOTY1OTIsIDk2NjAxLCA5NjYwOCwgOTY2MTcsIDk2NjI3LCA5NjYzNCwgCisgICAgOTY2NDEsIDk2NjQ4LCA5NjY1NSwgOTY2NjcsIDk2Njc0LCA5NjY4MSwgOTY2ODgsIDk2Njk1LCA5NjcwMiwgOTY3MTIsIAorICAgIDk2NzE5LCA5NjcyNiwgOTY3MzYsIDk2NzQ5LCA5Njc2MSwgOTY3NjgsIDk2Nzc4LCA5Njc4NSwgOTY3OTIsIDk2Nzk5LCAKKyAgICA5NjgxMywgOTY4MTksIDk2ODI3LCA5NjgzNywgOTY4NDcsIDk2ODU0LCA5Njg2MSwgOTY4NjcsIDk2ODcxLCA5Njg3OCwgCisgICAgOTY4ODgsIDk2ODk0LCA5NjkwNywgOTY5MTEsIDk2OTE1LCA5NjkyMiwgOTY5MjYsIDk2OTMzLCA5Njk0MywgOTY5NDcsIAorICAgIDk2OTUxLCA5Njk1NSwgOTY5NTksIDk2OTYzLCA5Njk3MCwgOTY5NzQsIDk2OTgxLCA5Njk4OCwgOTY5OTUsIDk3MDA0LCAKKyAgICA5NzAxMywgOTcwMjMsIDk3MDMwLCA5NzAzNywgOTcwNDQsIDk3MDU0LCA5NzA2MSwgOTcwNzEsIDk3MDc4LCA5NzA4OCwgCisgICAgOTcwOTUsIDk3MTAyLCA5NzExMiwgOTcxMjIsIDk3MTI5LCA5NzEzNSwgOTcxNDMsIDk3MTUxLCA5NzE1NywgOTcxNjMsIAorICAgIDk3MTY3LCA5NzE3MSwgOTcxNzgsIDk3MTg2LCA5NzE5MiwgOTcxOTYsIDk3MjAwLCA5NzIwNCwgOTcyMTEsIDk3MjIzLCAKKyAgICA5NzIyNiwgOTcyMzMsIDk3MjM5LCA5NzI0MywgOTcyNDcsIDk3MjUxLCA5NzI1NSwgOTcyNTksIDk3MjYzLCA5NzI2NywgCisgICAgOTcyNzEsIDk3Mjc1LCA5NzI3OSwgOTcyODYsIDk3MjkwLCA5NzI5NiwgOTczMDAsIDk3MzA0LCA5NzMwOCwgOTczMTQsIAorICAgIDk3MzIxLCA5NzMyOCwgOTczMzUsIDk3MzQ2LCA5NzM1NCwgOTczNTgsIDk3MzY0LCA5NzM3MywgOTczODAsIDk3Mzg2LCAKKyAgICA5NzM4OSwgOTczOTMsIDk3Mzk3LCA5NzQwMywgOTc0MTIsIDk3NDIwLCA5NzQyNCwgOTc0MzAsIDk3NDM0LCA5NzQzOCwgCisgICAgOTc0NDIsIDk3NDQ4LCA5NzQ1NSwgOTc0NjEsIDk3NDY1LCA5NzQ3MSwgOTc0NzUsIDk3NDc5LCA5NzQ4OCwgOTc1MDAsIAorICAgIDk3NTA0LCA5NzUxMSwgOTc1MTgsIDk3NTI4LCA5NzUzNSwgOTc1NDcsIDk3NTU0LCA5NzU2MSwgOTc1NjgsIDk3NTc5LCAKKyAgICA5NzU4OSwgOTc2MDIsIDk3NjEyLCA5NzYxOSwgOTc2MjMsIDk3NjI3LCA5NzYzMSwgOTc2MzUsIDk3NjQ0LCA5NzY1MywgCisgICAgOTc2NjIsIDk3Njc5LCA5NzY4OCwgOTc2OTQsIDk3NzAxLCA5NzcwOSwgOTc3MjIsIDk3NzI2LCA5NzczNSwgOTc3NDQsIAorICAgIDk3NzUzLCA5Nzc2MiwgOTc3NzMsIDk3NzgyLCA5Nzc5MSwgOTc4MDAsIDk3ODA5LCA5NzgxOCwgOTc4MjcsIDk3ODM3LCAKKyAgICA5Nzg0MCwgOTc4NDQsIDk3ODQ4LCA5Nzg1MiwgOTc4NTYsIDk3ODYwLCA5Nzg2NiwgOTc4NzMsIDk3ODgwLCA5Nzg4NywgCisgICAgOTc4OTMsIDk3ODk5LCA5NzkwNiwgOTc5MTIsIDk3OTE5LCA5NzkyNywgOTc5MzEsIDk3OTM4LCA5Nzk0NSwgOTc5NTIsIAorICAgIDk3OTYwLCA5Nzk2MywgOTc5NjcsIDk3OTcxLCA5Nzk3NSwgOTc5NzksIDk3OTg1LCA5Nzk4OSwgOTc5OTUsIDk4MDAyLCAKKyAgICA5ODAwOSwgOTgwMTUsIDk4MDIyLCA5ODAyOSwgOTgwMzYsIDk4MDQzLCA5ODA1MCwgOTgwNTcsIDk4MDY0LCA5ODA3MSwgCisgICAgOTgwNzgsIDk4MDg1LCA5ODA5MiwgOTgwOTksIDk4MTA2LCA5ODExMywgOTgxMTksIDk4MTIzLCA5ODEzMiwgOTgxMzYsIAorICAgIDk4MTQwLCA5ODE0NCwgOTgxNDgsIDk4MTU0LCA5ODE2MSwgOTgxNjgsIDk4MTc1LCA5ODE4MiwgOTgxODksIDk4MTk1LCAKKyAgICA5ODIwMywgOTgyMDcsIDk4MjExLCA5ODIxNSwgOTgyMTksIDk4MjI1LCA5ODI0MiwgOTgyNTksIDk4MjYzLCA5ODI2NywgCisgICAgOTgyNzEsIDk4Mjc1LCA5ODI3OSwgOTgyODMsIDk4Mjg5LCA5ODI5NiwgOTgzMDAsIDk4MzA2LCA5ODMxMywgOTgzMjAsIAorICAgIDk4MzI3LCA5ODMzNCwgOTgzNDEsIDk4MzUwLCA5ODM1NywgOTgzNjQsIDk4MzcxLCA5ODM3OCwgOTgzODIsIDk4Mzg2LCAKKyAgICA5ODM5MiwgOTg0MDQsIDk4NDA4LCA5ODQxMiwgOTg0MjEsIDk4NDI1LCA5ODQyOSwgOTg0MzMsIDk4NDM5LCA5ODQ0MywgCisgICAgOTg0NDcsIDk4NDU2LCA5ODQ2MCwgOTg0NjQsIDk4NDY4LCA5ODQ3NSwgOTg0NzksIDk4NDgzLCA5ODQ4NywgOTg0OTEsIAorICAgIDk4NDk1LCA5ODQ5OSwgOTg1MDMsIDk4NTA3LCA5ODUxMywgOTg1MjAsIDk4NTI3LCA5ODUzMywgOTg1MzcsIDk4NTU0LCAKKyAgICA5ODU2MCwgOTg1NjQsIDk4NTcwLCA5ODU3NiwgOTg1ODIsIDk4NTg4LCA5ODU5NCwgOTg2MDAsIDk4NjA0LCA5ODYwOCwgCisgICAgOTg2MTIsIDk4NjE4LCA5ODYyMiwgOTg2MjgsIDk4NjMyLCA5ODYzNiwgOTg2NDMsIDk4NjUwLCA5ODY2NywgOTg2NzEsIAorICAgIDk4Njc1LCA5ODY3OSwgOTg2ODMsIDk4Njg3LCA5ODY5OSwgOTg3MDIsIDk4NzA3LCA5ODcxMiwgOTg3MjcsIDk4NzM3LCAKKyAgICA5ODc0OSwgOTg3NTMsIDk4NzU3LCA5ODc2MSwgOTg3NjcsIDk4Nzc0LCA5ODc4MSwgOTg3OTEsIDk4ODAzLCA5ODgwOSwgCisgICAgOTg4MTUsIDk4ODI0LCA5ODgyOCwgOTg4MzIsIDk4ODM5LCA5ODg0OSwgOTg4NTYsIDk4ODYyLCA5ODg2NiwgOTg4NzAsIAorICAgIDk4ODc3LCA5ODg4MywgOTg4ODcsIDk4ODkzLCA5ODg5NywgOTg5MDUsIDk4OTExLCA5ODkxNSwgOTg5MjMsIDk4OTMxLCAKKyAgICA5ODkzOCwgOTg5NDQsIDk4OTUxLCA5ODk1OCwgOTg5NjgsIDk4OTc4LCA5ODk4MiwgOTg5ODYsIDk4OTkwLCA5ODk5NCwgCisgICAgOTkwMDAsIDk5MDA3LCA5OTAxMywgOTkwMjAsIDk5MDI3LCA5OTAzNCwgOTkwNDMsIDk5MDUwLCA5OTA1NywgOTkwNjMsIAorICAgIDk5MDcwLCA5OTA3NywgOTkwODQsIDk5MDkxLCA5OTA5OCwgOTkxMDUsIDk5MTExLCA5OTExOCwgOTkxMjUsIDk5MTMyLCAKKyAgICA5OTE0MSwgOTkxNDgsIDk5MTU1LCA5OTE1OSwgOTkxNjUsIDk5MTY5LCA5OTE3NSwgOTkxODIsIDk5MTg5LCA5OTE5NiwgCisgICAgOTkyMDAsIDk5MjA0LCA5OTIwOCwgOTkyMTIsIDk5MjE2LCA5OTIyMywgOTkyMjcsIDk5MjMxLCA5OTIzNywgOTkyNDUsIAorICAgIDk5MjQ5LCA5OTI1MywgOTkyNTcsIDk5MjYxLCA5OTI2OCwgOTkyNzIsIDk5Mjc2LCA5OTI4NCwgOTkyODgsIDk5MjkyLCAKKyAgICA5OTI5NiwgOTkzMDAsIDk5MzA2LCA5OTMxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgOTkzMTQsIDk5MzIwLCA5OTMyNiwgOTkzMzMsIDk5MzQwLCA5OTM0NywgOTkzNTQsIDk5MzYxLCA5OTM2OCwgCisgICAgOTkzNzQsIDk5MzgxLCA5OTM4OCwgOTkzOTUsIDk5NDAyLCA5OTQwOSwgOTk0MTYsIDk5NDIyLCA5OTQyOCwgOTk0MzQsIAorICAgIDk5NDQwLCA5OTQ0NiwgOTk0NTIsIDk5NDU4LCA5OTQ2NCwgOTk0NzAsIDk5NDc3LCA5OTQ4NCwgOTk0OTEsIDk5NDk4LCAKKyAgICA5OTUwNSwgOTk1MTIsIDk5NTE4LCA5OTUyNCwgOTk1MzAsIDk5NTM3LCA5OTU0NCwgOTk1NTAsIDk5NTU2LCA5OTU2NSwgCisgICAgOTk1NzIsIDk5NTc5LCA5OTU4NiwgOTk1OTMsIDk5NjAwLCA5OTYwNywgOTk2MTMsIDk5NjE5LCA5OTYyNSwgOTk2MzQsIAorICAgIDk5NjQxLCA5OTY0OCwgOTk2NTksIDk5NjcwLCA5OTY3NiwgOTk2ODIsIDk5Njg4LCA5OTY5NywgOTk3MDQsIDk5NzExLCAKKyAgICA5OTcyMSwgOTk3MzEsIDk5NzQyLCA5OTc1MywgOTk3NjUsIDk5Nzc4LCA5OTc4OSwgOTk4MDAsIDk5ODEyLCA5OTgyNSwgCisgICAgOTk4MzYsIDk5ODQ3LCA5OTg1OCwgOTk4NjksIDk5ODgwLCA5OTg5MiwgOTk5MDAsIDk5OTA4LCA5OTkxNywgOTk5MjYsIAorICAgIDk5OTM1LCA5OTk0MSwgOTk5NDcsIDk5OTUzLCA5OTk2MCwgOTk5NzAsIDk5OTc3LCA5OTk4NywgOTk5OTIsIDk5OTk3LCAKKyAgICAxMDAwMDMsIDEwMDAwOSwgMTAwMDE3LCAxMDAwMjUsIDEwMDAzNCwgMTAwMDQ1LCAxMDAwNTYsIDEwMDA2NCwgMTAwMDcyLCAKKyAgICAxMDAwODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMDA5MCwgMTAwMTAxLCAxMDAxMDgsIAorICAgIDEwMDExNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwMTI0LCAxMDAxMjgsIDEwMDEzMiwgCisgICAgMTAwMTM2LCAxMDAxNDAsIDEwMDE0NCwgMTAwMTQ4LCAxMDAxNTIsIDEwMDE1NiwgMTAwMTYwLCAxMDAxNjQsIDEwMDE2OCwgCisgICAgMTAwMTcyLCAxMDAxNzYsIDEwMDE4MCwgMTAwMTg0LCAxMDAxODgsIDEwMDE5MiwgMTAwMTk2LCAxMDAyMDAsIDEwMDIwNCwgCisgICAgMTAwMjA4LCAxMDAyMTIsIDEwMDIxNiwgMTAwMjIwLCAxMDAyMjQsIDEwMDIyOCwgMTAwMjMyLCAxMDAyMzYsIDEwMDI0MCwgCisgICAgMTAwMjQ0LCAxMDAyNDgsIDEwMDI1MiwgMTAwMjU2LCAxMDAyNjAsIDEwMDI2NCwgMTAwMjY4LCAxMDAyNzIsIDEwMDI3NiwgCisgICAgMTAwMjgwLCAxMDAyODQsIDEwMDI4OCwgMTAwMjkyLCAxMDAyOTYsIDEwMDMwMCwgMTAwMzA0LCAxMDAzMDgsIDEwMDMxMiwgCisgICAgMTAwMzE2LCAxMDAzMjAsIDEwMDMyNCwgMTAwMzI4LCAxMDAzMzIsIDEwMDMzNiwgMTAwMzQwLCAxMDAzNDQsIDEwMDM0OCwgCisgICAgMTAwMzUyLCAxMDAzNTYsIDEwMDM2MCwgMTAwMzY0LCAxMDAzNjgsIDEwMDM3MiwgMTAwMzc2LCAxMDAzODAsIDEwMDM4NCwgCisgICAgMTAwMzg4LCAxMDAzOTIsIDEwMDM5NiwgMTAwNDAwLCAxMDA0MDQsIDEwMDQwOCwgMTAwNDEyLCAxMDA0MTYsIDEwMDQyMCwgCisgICAgMTAwNDI0LCAxMDA0MjgsIDEwMDQzMiwgMTAwNDM2LCAxMDA0NDAsIDEwMDQ0NCwgMTAwNDQ4LCAxMDA0NTIsIDEwMDQ1NiwgCisgICAgMTAwNDYwLCAxMDA0NjQsIDEwMDQ2OCwgMTAwNDcyLCAxMDA0NzYsIDEwMDQ4MCwgMTAwNDg0LCAxMDA0ODgsIDEwMDQ5MiwgCisgICAgMTAwNDk2LCAxMDA1MDAsIDEwMDUwNCwgMTAwNTA4LCAxMDA1MTIsIDEwMDUxNiwgMTAwNTIwLCAxMDA1MjQsIDEwMDUyOCwgCisgICAgMTAwNTMyLCAxMDA1MzYsIDEwMDU0MCwgMTAwNTQ0LCAxMDA1NDgsIDEwMDU1MiwgMTAwNTU2LCAxMDA1NjAsIDEwMDU2NCwgCisgICAgMTAwNTY4LCAxMDA1NzIsIDEwMDU3NiwgMTAwNTgwLCAxMDA1ODQsIDEwMDU4OCwgMTAwNTkyLCAxMDA1OTYsIDEwMDYwMCwgCisgICAgMTAwNjA0LCAxMDA2MDgsIDEwMDYxMiwgMTAwNjE2LCAxMDA2MjAsIDEwMDYyNCwgMTAwNjI4LCAxMDA2MzIsIDEwMDYzNiwgCisgICAgMTAwNjQwLCAxMDA2NDQsIDEwMDY0OCwgMTAwNjUyLCAxMDA2NTYsIDEwMDY2MCwgMTAwNjY0LCAxMDA2NjgsIDEwMDY3MiwgCisgICAgMTAwNjc2LCAxMDA2ODAsIDEwMDY4NCwgMTAwNjg4LCAxMDA2OTIsIDEwMDY5NiwgMTAwNzAwLCAxMDA3MDQsIDEwMDcwOCwgCisgICAgMTAwNzEyLCAxMDA3MTYsIDEwMDcyMCwgMTAwNzI0LCAxMDA3MjgsIDEwMDczMiwgMTAwNzM2LCAxMDA3NDAsIDEwMDc0NCwgCisgICAgMTAwNzQ4LCAxMDA3NTIsIDEwMDc1NiwgMTAwNzYwLCAxMDA3NjQsIDEwMDc2OCwgMTAwNzcyLCAxMDA3NzYsIDEwMDc4MCwgCisgICAgMTAwNzg0LCAxMDA3ODgsIDEwMDc5MiwgMTAwNzk2LCAxMDA4MDAsIDEwMDgwNCwgMTAwODA4LCAxMDA4MTIsIDEwMDgxNiwgCisgICAgMTAwODIwLCAxMDA4MjQsIDEwMDgyOCwgMTAwODMyLCAxMDA4MzYsIDEwMDg0MCwgMTAwODQ0LCAxMDA4NDgsIDEwMDg1MiwgCisgICAgMTAwODU2LCAxMDA4NjAsIDEwMDg2NCwgMTAwODY4LCAxMDA4NzIsIDEwMDg3NiwgMTAwODgwLCAxMDA4ODQsIDEwMDg4OCwgCisgICAgMTAwODkyLCAxMDA4OTYsIDEwMDkwMCwgMTAwOTA0LCAxMDA5MDgsIDEwMDkxMiwgMTAwOTE2LCAxMDA5MjAsIDEwMDkyNCwgCisgICAgMTAwOTI4LCAxMDA5MzIsIDEwMDkzNiwgMTAwOTQwLCAxMDA5NDQsIDEwMDk0OCwgMTAwOTUyLCAxMDA5NTYsIDEwMDk2MCwgCisgICAgMTAwOTY0LCAxMDA5NjgsIDEwMDk3MiwgMTAwOTc2LCAxMDA5ODAsIDEwMDk4NCwgMTAwOTg4LCAxMDA5OTIsIDEwMDk5NiwgCisgICAgMTAxMDAwLCAxMDEwMDQsIDEwMTAwOCwgMTAxMDEyLCAxMDEwMTYsIDEwMTAyMCwgMTAxMDI0LCAxMDEwMjgsIDEwMTAzMiwgCisgICAgMTAxMDM2LCAxMDEwNDAsIDEwMTA0NCwgMTAxMDQ4LCAxMDEwNTIsIDEwMTA1NiwgMTAxMDYwLCAxMDEwNjQsIDEwMTA2OCwgCisgICAgMTAxMDcyLCAxMDEwNzYsIDEwMTA4MCwgMTAxMDg0LCAxMDEwODgsIDEwMTA5MiwgMTAxMDk2LCAxMDExMDAsIDEwMTEwNCwgCisgICAgMTAxMTA4LCAxMDExMTIsIDEwMTExNiwgMTAxMTIwLCAxMDExMjQsIDEwMTEyOCwgMTAxMTMyLCAxMDExMzYsIDEwMTE0MCwgCisgICAgMTAxMTQ0LCAxMDExNDgsIDEwMTE1MiwgMTAxMTU2LCAxMDExNjAsIDEwMTE2NCwgMTAxMTY4LCAxMDExNzIsIDEwMTE3NiwgCisgICAgMTAxMTgwLCAxMDExODQsIDEwMTE4OCwgMTAxMTkyLCAxMDExOTYsIDEwMTIwMCwgMTAxMjA0LCAxMDEyMDgsIDEwMTIxMiwgCisgICAgMTAxMjE2LCAxMDEyMjAsIDEwMTIyNCwgMTAxMjI4LCAxMDEyMzIsIDEwMTIzNiwgMTAxMjQwLCAxMDEyNDQsIDEwMTI0OCwgCisgICAgMTAxMjUyLCAxMDEyNTYsIDEwMTI2MCwgMTAxMjY0LCAxMDEyNjgsIDEwMTI3MiwgMTAxMjc2LCAxMDEyODAsIDEwMTI4NCwgCisgICAgMTAxMjg4LCAxMDEyOTIsIDEwMTI5NiwgMTAxMzAwLCAxMDEzMDQsIDEwMTMwOCwgMTAxMzEyLCAxMDEzMTYsIDEwMTMyMCwgCisgICAgMTAxMzI0LCAxMDEzMjgsIDEwMTMzMiwgMTAxMzM2LCAxMDEzNDAsIDEwMTM0NCwgMTAxMzQ4LCAxMDEzNTIsIDEwMTM1NiwgCisgICAgMTAxMzYwLCAxMDEzNjQsIDEwMTM2OCwgMTAxMzcyLCAxMDEzNzYsIDEwMTM4MCwgMTAxMzg0LCAxMDEzODgsIDEwMTM5MiwgCisgICAgMTAxMzk2LCAxMDE0MDAsIDEwMTQwNCwgMTAxNDA4LCAxMDE0MTIsIDEwMTQxNiwgMTAxNDIwLCAxMDE0MjQsIDEwMTQyOCwgCisgICAgMTAxNDMyLCAxMDE0MzYsIDEwMTQ0MCwgMTAxNDQ0LCAxMDE0NDgsIDEwMTQ1MiwgMTAxNDU2LCAxMDE0NjAsIDEwMTQ2NCwgCisgICAgMTAxNDY4LCAxMDE0NzIsIDEwMTQ3NiwgMTAxNDgwLCAxMDE0ODQsIDEwMTQ4OCwgMTAxNDkyLCAxMDE0OTYsIDEwMTUwMCwgCisgICAgMTAxNTA0LCAxMDE1MDgsIDEwMTUxMiwgMTAxNTE2LCAxMDE1MjAsIDEwMTUyNCwgMTAxNTI4LCAxMDE1MzIsIDEwMTUzNiwgCisgICAgMTAxNTQwLCAxMDE1NDQsIDEwMTU0OCwgMTAxNTUyLCAxMDE1NTYsIDEwMTU2MCwgMTAxNTY0LCAxMDE1NjgsIDEwMTU3MiwgCisgICAgMTAxNTc2LCAxMDE1ODAsIDEwMTU4NCwgMTAxNTg4LCAxMDE1OTIsIDEwMTU5NiwgMTAxNjAwLCAxMDE2MDQsIDEwMTYwOCwgCisgICAgMTAxNjEyLCAxMDE2MTYsIDEwMTYyMCwgMTAxNjI0LCAxMDE2MjgsIDEwMTYzMiwgMTAxNjM2LCAxMDE2NDAsIDEwMTY0NCwgCisgICAgMTAxNjQ4LCAxMDE2NTIsIDEwMTY1NiwgMTAxNjYwLCAxMDE2NjQsIDEwMTY2OCwgMTAxNjcyLCAxMDE2NzYsIDEwMTY4MCwgCisgICAgMTAxNjg0LCAxMDE2ODgsIDEwMTY5MiwgMTAxNjk2LCAxMDE3MDAsIDEwMTcwNCwgMTAxNzA4LCAxMDE3MTIsIDEwMTcxNiwgCisgICAgMTAxNzIwLCAxMDE3MjQsIDEwMTcyOCwgMTAxNzMyLCAxMDE3MzYsIDEwMTc0MCwgMTAxNzQ0LCAxMDE3NDgsIDEwMTc1MiwgCisgICAgMTAxNzU2LCAxMDE3NjAsIDEwMTc2NCwgMTAxNzY4LCAxMDE3NzIsIDEwMTc3NiwgMTAxNzgwLCAxMDE3ODQsIDEwMTc4OCwgCisgICAgMTAxNzkyLCAxMDE3OTYsIDEwMTgwMCwgMTAxODA0LCAxMDE4MDgsIDEwMTgxMiwgMTAxODE2LCAxMDE4MjAsIDEwMTgyNCwgCisgICAgMTAxODI4LCAxMDE4MzIsIDEwMTgzNiwgMTAxODQwLCAxMDE4NDQsIDEwMTg0OCwgMTAxODUyLCAxMDE4NTYsIDEwMTg2MCwgCisgICAgMTAxODY0LCAxMDE4NjgsIDEwMTg3MiwgMTAxODc2LCAxMDE4ODAsIDEwMTg4NCwgMTAxODg4LCAxMDE4OTIsIDEwMTg5NiwgCisgICAgMTAxOTAwLCAxMDE5MDQsIDEwMTkwOCwgMTAxOTEyLCAxMDE5MTYsIDEwMTkyMCwgMTAxOTI0LCAxMDE5MjgsIDEwMTkzMiwgCisgICAgMTAxOTM2LCAxMDE5NDAsIDEwMTk0NCwgMTAxOTQ4LCAxMDE5NTIsIDEwMTk1NiwgMTAxOTYwLCAxMDE5NjQsIDEwMTk2OCwgCisgICAgMTAxOTcyLCAxMDE5NzYsIDEwMTk4MCwgMTAxOTg0LCAxMDE5ODgsIDEwMTk5MiwgMTAxOTk2LCAxMDIwMDAsIDEwMjAwNCwgCisgICAgMTAyMDA4LCAxMDIwMTIsIDEwMjAxNiwgMTAyMDIwLCAxMDIwMjQsIDEwMjAyOCwgMTAyMDMyLCAxMDIwMzYsIDEwMjA0MCwgCisgICAgMTAyMDQ0LCAxMDIwNDgsIDEwMjA1MiwgMTAyMDU2LCAxMDIwNjAsIDEwMjA2NCwgMTAyMDY4LCAxMDIwNzIsIDEwMjA3NiwgCisgICAgMTAyMDgwLCAxMDIwODQsIDEwMjA4OCwgMTAyMDkyLCAxMDIwOTYsIDEwMjEwMCwgMTAyMTA0LCAxMDIxMDgsIDEwMjExMiwgCisgICAgMTAyMTE2LCAxMDIxMjAsIDEwMjEyNCwgMTAyMTI4LCAxMDIxMzIsIDEwMjEzNiwgMTAyMTQwLCAxMDIxNDQsIDEwMjE0OCwgCisgICAgMTAyMTUyLCAxMDIxNTYsIDEwMjE2MCwgMTAyMTY0LCAxMDIxNjgsIDEwMjE3MiwgMTAyMTc2LCAxMDIxODAsIDEwMjE4NCwgCisgICAgMTAyMTg4LCAxMDIxOTIsIDEwMjE5NiwgMTAyMjAwLCAxMDIyMDQsIDEwMjIwOCwgMTAyMjEyLCAxMDIyMTYsIDEwMjIyMCwgCisgICAgMTAyMjI0LCAxMDIyMjgsIDEwMjIzMiwgMTAyMjM2LCAxMDIyNDAsIDEwMjI0NCwgMTAyMjQ4LCAxMDIyNTIsIDEwMjI1NiwgCisgICAgMTAyMjYwLCAxMDIyNjQsIDEwMjI2OCwgMTAyMjcyLCAxMDIyNzYsIDEwMjI4MCwgMTAyMjg0LCAxMDIyODgsIDEwMjI5MiwgCisgICAgMTAyMjk2LCAxMDIzMDAsIDEwMjMwNCwgMTAyMzA4LCAxMDIzMTIsIDEwMjMxNiwgMTAyMzIwLCAxMDIzMjQsIDEwMjMyOCwgCisgICAgMTAyMzMyLCAxMDIzMzYsIDEwMjM0MCwgMTAyMzQ0LCAxMDIzNDgsIDEwMjM1MiwgMTAyMzU2LCAxMDIzNjAsIDEwMjM2NCwgCisgICAgMTAyMzY4LCAxMDIzNzIsIDEwMjM3NiwgMTAyMzgwLCAxMDIzODQsIDEwMjM4OCwgMTAyMzkyLCAxMDIzOTYsIDEwMjQwMCwgCisgICAgMTAyNDA0LCAxMDI0MDgsIDEwMjQxMiwgMTAyNDE2LCAxMDI0MjAsIDEwMjQyNCwgMTAyNDI4LCAxMDI0MzIsIDEwMjQzNiwgCisgICAgMTAyNDQwLCAxMDI0NDQsIDEwMjQ0OCwgMTAyNDUyLCAxMDI0NTYsIDEwMjQ2MCwgMTAyNDY0LCAxMDI0NjgsIDEwMjQ3MiwgCisgICAgMTAyNDc2LCAxMDI0ODAsIDEwMjQ4NCwgMTAyNDg4LCAxMDI0OTIsIDEwMjQ5NiwgMTAyNTAwLCAxMDI1MDQsIDEwMjUwOCwgCisgICAgMTAyNTEyLCAxMDI1MTYsIDEwMjUyMCwgMTAyNTI0LCAxMDI1MjgsIDEwMjUzMiwgMTAyNTM2LCAxMDI1NDAsIDEwMjU0NCwgCisgICAgMTAyNTQ4LCAxMDI1NTIsIDEwMjU1NiwgMTAyNTYwLCAxMDI1NjQsIDEwMjU2OCwgMTAyNTcyLCAxMDI1NzYsIDEwMjU4MCwgCisgICAgMTAyNTg0LCAxMDI1ODgsIDEwMjU5MiwgMTAyNTk2LCAxMDI2MDAsIDEwMjYwNCwgMTAyNjA4LCAxMDI2MTIsIDEwMjYxNiwgCisgICAgMTAyNjIwLCAxMDI2MjQsIDEwMjYyOCwgMTAyNjMyLCAxMDI2MzYsIDEwMjY0MCwgMTAyNjQ0LCAxMDI2NDgsIDEwMjY1MiwgCisgICAgMTAyNjU2LCAxMDI2NjAsIDEwMjY2NCwgMTAyNjY4LCAxMDI2NzIsIDEwMjY3NiwgMTAyNjgwLCAxMDI2ODQsIDEwMjY4OCwgCisgICAgMTAyNjkyLCAxMDI2OTYsIDEwMjcwMCwgMTAyNzA0LCAxMDI3MDgsIDEwMjcxMiwgMTAyNzE2LCAxMDI3MjAsIDEwMjcyNCwgCisgICAgMTAyNzI4LCAxMDI3MzIsIDEwMjczNiwgMTAyNzQwLCAxMDI3NDQsIDEwMjc0OCwgMTAyNzUyLCAxMDI3NTYsIDEwMjc2MCwgCisgICAgMTAyNzY0LCAxMDI3NjgsIDEwMjc3MiwgMTAyNzc2LCAxMDI3ODAsIDEwMjc4NCwgMTAyNzg4LCAxMDI3OTIsIDEwMjc5NiwgCisgICAgMTAyODAwLCAxMDI4MDQsIDEwMjgwOCwgMTAyODEyLCAxMDI4MTYsIDEwMjgyMCwgMTAyODI0LCAxMDI4MjgsIDEwMjgzMiwgCisgICAgMTAyODM2LCAxMDI4NDAsIDEwMjg0NCwgMTAyODQ4LCAxMDI4NTIsIDEwMjg1NiwgMTAyODYwLCAxMDI4NjQsIDEwMjg2OCwgCisgICAgMTAyODcyLCAxMDI4NzYsIDEwMjg4MCwgMTAyODg0LCAxMDI4ODgsIDEwMjg5MiwgMTAyODk2LCAxMDI5MDAsIDEwMjkwNCwgCisgICAgMTAyOTA4LCAxMDI5MTIsIDEwMjkxNiwgMTAyOTIwLCAxMDI5MjQsIDEwMjkyOCwgMTAyOTMyLCAxMDI5MzYsIDEwMjk0MCwgCisgICAgMTAyOTQ0LCAxMDI5NDgsIDEwMjk1MiwgMTAyOTU2LCAxMDI5NjAsIDEwMjk2NCwgMTAyOTY4LCAxMDI5NzIsIDEwMjk3NiwgCisgICAgMTAyOTgwLCAxMDI5ODQsIDEwMjk4OCwgMTAyOTkyLCAxMDI5OTYsIDEwMzAwMCwgMTAzMDA0LCAxMDMwMDgsIDEwMzAxMiwgCisgICAgMTAzMDE2LCAxMDMwMjAsIDEwMzAyNCwgMTAzMDI4LCAxMDMwMzIsIDEwMzAzNiwgMTAzMDQwLCAxMDMwNDQsIDEwMzA0OCwgCisgICAgMTAzMDUyLCAxMDMwNTYsIDEwMzA2MCwgMTAzMDY0LCAxMDMwNjgsIDEwMzA3MiwgMTAzMDc2LCAxMDMwODAsIDEwMzA4NCwgCisgICAgMTAzMDg4LCAxMDMwOTIsIDEwMzA5NiwgMTAzMTAwLCAxMDMxMDQsIDEwMzEwOCwgMTAzMTEyLCAxMDMxMTYsIDEwMzEyMCwgCisgICAgMTAzMTI0LCAxMDMxMjgsIDEwMzEzMiwgMTAzMTM2LCAxMDMxNDAsIDEwMzE0NCwgMTAzMTQ4LCAxMDMxNTIsIDEwMzE1NiwgCisgICAgMTAzMTYwLCAxMDMxNjQsIDEwMzE2OCwgMTAzMTcyLCAxMDMxNzYsIDEwMzE4MCwgMTAzMTg0LCAxMDMxODgsIDEwMzE5MiwgCisgICAgMTAzMTk2LCAxMDMyMDAsIDEwMzIwNCwgMTAzMjA4LCAxMDMyMTIsIDEwMzIxNiwgMTAzMjIwLCAxMDMyMjQsIDEwMzIyOCwgCisgICAgMTAzMjMyLCAxMDMyMzYsIDEwMzI0MCwgMTAzMjQ0LCAxMDMyNDgsIDEwMzI1MiwgMTAzMjU2LCAxMDMyNjAsIDEwMzI2NCwgCisgICAgMTAzMjY4LCAxMDMyNzIsIDEwMzI3NiwgMTAzMjgwLCAxMDMyODQsIDEwMzI4OCwgMTAzMjkyLCAxMDMyOTYsIDEwMzMwMCwgCisgICAgMTAzMzA0LCAxMDMzMDgsIDEwMzMxMiwgMTAzMzE2LCAxMDMzMjAsIDEwMzMyNCwgMTAzMzI4LCAxMDMzMzIsIDEwMzMzNiwgCisgICAgMTAzMzQwLCAxMDMzNDQsIDEwMzM0OCwgMTAzMzUyLCAxMDMzNTYsIDEwMzM2MCwgMTAzMzY0LCAxMDMzNjgsIDEwMzM3MiwgCisgICAgMTAzMzc2LCAxMDMzODAsIDEwMzM4NCwgMTAzMzg4LCAxMDMzOTIsIDEwMzM5NiwgMTAzNDAwLCAxMDM0MDQsIDEwMzQwOCwgCisgICAgMTAzNDEyLCAxMDM0MTYsIDEwMzQyMCwgMTAzNDI0LCAxMDM0MjgsIDEwMzQzMiwgMTAzNDM2LCAxMDM0NDAsIDEwMzQ0NCwgCisgICAgMTAzNDQ4LCAxMDM0NTIsIDEwMzQ1NiwgMTAzNDYwLCAxMDM0NjQsIDEwMzQ2OCwgMTAzNDcyLCAxMDM0NzYsIDEwMzQ4MCwgCisgICAgMTAzNDg0LCAxMDM0ODgsIDEwMzQ5MiwgMTAzNDk2LCAxMDM1MDAsIDEwMzUwNCwgMTAzNTA4LCAxMDM1MTIsIDEwMzUxNiwgCisgICAgMTAzNTIwLCAxMDM1MjQsIDEwMzUyOCwgMTAzNTMyLCAxMDM1MzYsIDEwMzU0MCwgMTAzNTQ0LCAxMDM1NDgsIDEwMzU1MiwgCisgICAgMTAzNTU2LCAxMDM1NjAsIDEwMzU2NCwgMTAzNTY4LCAxMDM1NzIsIDEwMzU3NiwgMTAzNTgwLCAxMDM1ODQsIDEwMzU4OCwgCisgICAgMTAzNTkyLCAxMDM1OTYsIDEwMzYwMCwgMTAzNjA0LCAxMDM2MDgsIDEwMzYxMiwgMTAzNjE2LCAxMDM2MjAsIDEwMzYyNCwgCisgICAgMTAzNjI4LCAxMDM2MzIsIDEwMzYzNiwgMTAzNjQwLCAxMDM2NDQsIDEwMzY0OCwgMTAzNjUyLCAxMDM2NTYsIDEwMzY2MCwgCisgICAgMTAzNjY0LCAxMDM2NjgsIDEwMzY3MiwgMTAzNjc2LCAxMDM2ODAsIDEwMzY4NCwgMTAzNjg4LCAxMDM2OTIsIDEwMzY5NiwgCisgICAgMTAzNzAwLCAxMDM3MDQsIDEwMzcwOCwgMTAzNzEyLCAxMDM3MTYsIDEwMzcyMCwgMTAzNzI0LCAxMDM3MjgsIDEwMzczMiwgCisgICAgMTAzNzM2LCAxMDM3NDAsIDEwMzc0NCwgMTAzNzQ4LCAxMDM3NTIsIDEwMzc1NiwgMTAzNzYwLCAxMDM3NjQsIDEwMzc2OCwgCisgICAgMTAzNzcyLCAxMDM3NzYsIDEwMzc4MCwgMTAzNzg0LCAxMDM3ODgsIDEwMzc5MiwgMTAzNzk2LCAxMDM4MDAsIDEwMzgwNCwgCisgICAgMTAzODA4LCAxMDM4MTIsIDEwMzgxNiwgMTAzODIwLCAxMDM4MjQsIDEwMzgyOCwgMTAzODMyLCAxMDM4MzYsIDEwMzg0MCwgCisgICAgMTAzODQ0LCAxMDM4NDgsIDEwMzg1MiwgMTAzODU2LCAxMDM4NjAsIDEwMzg2NCwgMTAzODY4LCAxMDM4NzIsIDEwMzg3NiwgCisgICAgMTAzODgwLCAxMDM4ODQsIDEwMzg4OCwgMTAzODkyLCAxMDM4OTYsIDEwMzkwMCwgMTAzOTA0LCAxMDM5MDgsIDEwMzkxMiwgCisgICAgMTAzOTE2LCAxMDM5MjAsIDEwMzkyNCwgMTAzOTI4LCAxMDM5MzIsIDEwMzkzNiwgMTAzOTQwLCAxMDM5NDQsIDEwMzk0OCwgCisgICAgMTAzOTUyLCAxMDM5NTYsIDEwMzk2MCwgMTAzOTY0LCAxMDM5NjgsIDEwMzk3MiwgMTAzOTc2LCAxMDM5ODAsIDEwMzk4NCwgCisgICAgMTAzOTg4LCAxMDM5OTIsIDEwMzk5NiwgMTA0MDAwLCAxMDQwMDQsIDEwNDAwOCwgMTA0MDEyLCAxMDQwMTYsIDEwNDAyMCwgCisgICAgMTA0MDI0LCAxMDQwMjgsIDEwNDAzMiwgMTA0MDM2LCAxMDQwNDAsIDEwNDA0NCwgMTA0MDQ4LCAxMDQwNTIsIDEwNDA1NiwgCisgICAgMTA0MDYwLCAxMDQwNjQsIDEwNDA2OCwgMTA0MDcyLCAxMDQwNzYsIDEwNDA4MCwgMTA0MDg0LCAxMDQwODgsIDEwNDA5MiwgCisgICAgMTA0MDk2LCAxMDQxMDAsIDEwNDEwNCwgMTA0MTA4LCAxMDQxMTIsIDEwNDExNiwgMTA0MTIwLCAxMDQxMjQsIDEwNDEyOCwgCisgICAgMTA0MTMyLCAxMDQxMzYsIDEwNDE0MCwgMTA0MTQ0LCAxMDQxNDgsIDEwNDE1MiwgMTA0MTU2LCAxMDQxNjAsIDEwNDE2NCwgCisgICAgMTA0MTY4LCAxMDQxNzIsIDEwNDE3NiwgMTA0MTgwLCAxMDQxODQsIDEwNDE4OCwgMTA0MTkyLCAxMDQxOTYsIDEwNDIwMCwgCisgICAgMTA0MjA0LCAxMDQyMDgsIDEwNDIxMiwgMTA0MjE2LCAxMDQyMjAsIDEwNDIyNCwgMTA0MjI4LCAxMDQyMzIsIDEwNDIzNiwgCisgICAgMTA0MjQwLCAxMDQyNDQsIDEwNDI0OCwgMTA0MjUyLCAxMDQyNTYsIDEwNDI2MCwgMTA0MjY0LCAxMDQyNjgsIDEwNDI3MiwgCisgICAgMTA0Mjc2LCAxMDQyODAsIDEwNDI4NCwgMTA0Mjg4LCAxMDQyOTIsIDEwNDI5NiwgMTA0MzAwLCAxMDQzMDQsIDEwNDMwOCwgCisgICAgMTA0MzEyLCAxMDQzMTYsIDEwNDMyMCwgMTA0MzI0LCAxMDQzMjgsIDEwNDMzMiwgMTA0MzM2LCAxMDQzNDAsIDEwNDM0NCwgCisgICAgMTA0MzQ4LCAxMDQzNTIsIDEwNDM1NiwgMTA0MzYwLCAxMDQzNjQsIDEwNDM2OCwgMTA0MzcyLCAxMDQzNzYsIDEwNDM4MCwgCisgICAgMTA0Mzg0LCAxMDQzODgsIDEwNDM5MiwgMTA0Mzk2LCAxMDQ0MDAsIDEwNDQwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTk3NTMsIAotICAgIDk5NzU3LCA5OTc2MSwgOTk3NjUsIDk5NzY5LCA5OTc3MywgOTk3NzcsIDk5NzgxLCA5OTc4NSwgOTk3ODksIDk5NzkzLCAKLSAgICA5OTc5NywgOTk4MDEsIDk5ODA1LCA5OTgwOSwgOTk4MTMsIDk5ODE3LCA5OTgyMSwgOTk4MjUsIDk5ODI5LCA5OTgzMywgCi0gICAgOTk4MzcsIDk5ODQxLCA5OTg0NSwgOTk4NDksIDk5ODUzLCA5OTg1NywgOTk4NjEsIDk5ODY1LCA5OTg2OSwgOTk4NzMsIAotICAgIDk5ODc3LCA5OTg4MSwgOTk4ODUsIDk5ODg5LCA5OTg5MywgOTk4OTcsIDk5OTAxLCA5OTkwNSwgOTk5MDksIDk5OTEzLCAKLSAgICA5OTkxNywgOTk5MjEsIDk5OTI1LCA5OTkyOSwgOTk5MzMsIDk5OTM3LCA5OTk0MSwgOTk5NDUsIDk5OTQ5LCA5OTk1MywgCi0gICAgOTk5NTcsIDk5OTYxLCA5OTk2NSwgOTk5NjksIDk5OTczLCA5OTk3NywgOTk5ODEsIDk5OTg1LCA5OTk4OSwgOTk5OTMsIAotICAgIDk5OTk3LCAxMDAwMDEsIDEwMDAwNSwgMTAwMDA5LCAxMDAwMTMsIDEwMDAxNywgMTAwMDIxLCAxMDAwMjUsIDEwMDAyOSwgCi0gICAgMTAwMDMzLCAxMDAwMzcsIDEwMDA0MSwgMTAwMDQ1LCAxMDAwNDksIDEwMDA1MywgMTAwMDU3LCAxMDAwNjEsIDEwMDA2NSwgCi0gICAgMTAwMDY5LCAxMDAwNzMsIDEwMDA3NywgMTAwMDgxLCAxMDAwODUsIDEwMDA4OSwgMTAwMDkzLCAxMDAwOTcsIDEwMDEwMSwgCi0gICAgMTAwMTA1LCAxMDAxMDksIDEwMDExMywgMTAwMTE3LCAxMDAxMjEsIDEwMDEyNSwgMTAwMTI5LCAxMDAxMzMsIDEwMDEzNywgCi0gICAgMTAwMTQxLCAxMDAxNDUsIDEwMDE0OSwgMTAwMTUzLCAxMDAxNTcsIDEwMDE2MSwgMTAwMTY1LCAxMDAxNjksIDEwMDE3MywgCi0gICAgMTAwMTc3LCAxMDAxODEsIDEwMDE4NSwgMTAwMTg5LCAxMDAxOTMsIDEwMDE5NywgMTAwMjAxLCAxMDAyMDUsIDEwMDIwOSwgCi0gICAgMTAwMjEzLCAxMDAyMTcsIDEwMDIyMSwgMTAwMjI1LCAxMDAyMjksIDEwMDIzMywgMTAwMjM3LCAxMDAyNDEsIDEwMDI0NSwgCi0gICAgMTAwMjQ5LCAxMDAyNTMsIDEwMDI1NywgMTAwMjYxLCAxMDAyNjUsIDEwMDI2OSwgMTAwMjczLCAxMDAyNzcsIDEwMDI4MSwgCi0gICAgMTAwMjg1LCAxMDAyODksIDEwMDI5MywgMTAwMjk3LCAxMDAzMDEsIDEwMDMwNSwgMTAwMzA5LCAxMDAzMTMsIDEwMDMxNywgCi0gICAgMTAwMzIxLCAxMDAzMjUsIDEwMDMyOSwgMTAwMzMzLCAxMDAzMzcsIDEwMDM0MSwgMTAwMzQ1LCAxMDAzNDksIDEwMDM1MywgCi0gICAgMTAwMzU3LCAxMDAzNjEsIDEwMDM2NSwgMTAwMzY5LCAxMDAzNzMsIDEwMDM3NywgMTAwMzgxLCAxMDAzODUsIDEwMDM4OSwgCi0gICAgMTAwMzkzLCAxMDAzOTcsIDEwMDQwMSwgMTAwNDA1LCAxMDA0MDksIDEwMDQxMywgMTAwNDE3LCAxMDA0MjEsIDEwMDQyNSwgCi0gICAgMTAwNDI5LCAxMDA0MzMsIDEwMDQzNywgMTAwNDQxLCAxMDA0NDUsIDEwMDQ0OSwgMTAwNDUzLCAxMDA0NTcsIDEwMDQ2MSwgCi0gICAgMTAwNDY1LCAxMDA0NjksIDEwMDQ3MywgMTAwNDc3LCAxMDA0ODEsIDEwMDQ4NSwgMTAwNDg5LCAxMDA0OTMsIDEwMDQ5NywgCi0gICAgMTAwNTAxLCAxMDA1MDUsIDEwMDUwOSwgMTAwNTEzLCAxMDA1MTcsIDEwMDUyMSwgMTAwNTI1LCAxMDA1MjksIDEwMDUzMywgCi0gICAgMTAwNTM3LCAxMDA1NDEsIDEwMDU0NSwgMTAwNTQ5LCAxMDA1NTMsIDEwMDU1NywgMTAwNTYxLCAxMDA1NjUsIDEwMDU2OSwgCi0gICAgMTAwNTczLCAxMDA1NzcsIDEwMDU4MSwgMTAwNTg1LCAxMDA1ODksIDEwMDU5MywgMTAwNTk3LCAxMDA2MDEsIDEwMDYwNSwgCi0gICAgMTAwNjA5LCAxMDA2MTMsIDEwMDYxNywgMTAwNjIxLCAxMDA2MjUsIDEwMDYyOSwgMTAwNjMzLCAxMDA2MzcsIDEwMDY0MSwgCi0gICAgMTAwNjQ1LCAxMDA2NDksIDEwMDY1MywgMTAwNjU3LCAxMDA2NjEsIDEwMDY2NSwgMTAwNjY5LCAxMDA2NzMsIDEwMDY3NywgCi0gICAgMTAwNjgxLCAxMDA2ODUsIDEwMDY4OSwgMTAwNjkzLCAxMDA2OTcsIDEwMDcwMSwgMTAwNzA1LCAxMDA3MDksIDEwMDcxMywgCi0gICAgMTAwNzE3LCAxMDA3MjEsIDEwMDcyNSwgMTAwNzI5LCAxMDA3MzMsIDEwMDczNywgMTAwNzQxLCAxMDA3NDUsIDEwMDc0OSwgCi0gICAgMTAwNzUzLCAxMDA3NTcsIDEwMDc2MSwgMTAwNzY1LCAxMDA3NjksIDEwMDc3MywgMTAwNzc3LCAxMDA3ODEsIDEwMDc4NSwgCi0gICAgMTAwNzg5LCAxMDA3OTMsIDEwMDc5NywgMTAwODAxLCAxMDA4MDUsIDEwMDgwOSwgMTAwODEzLCAxMDA4MTcsIDEwMDgyMSwgCi0gICAgMTAwODI1LCAxMDA4MjksIDEwMDgzMywgMTAwODM3LCAxMDA4NDEsIDEwMDg0NSwgMTAwODQ5LCAxMDA4NTMsIDEwMDg1NywgCi0gICAgMTAwODYxLCAxMDA4NjUsIDEwMDg2OSwgMTAwODczLCAxMDA4NzcsIDEwMDg4MSwgMTAwODg1LCAxMDA4ODksIDEwMDg5MywgCi0gICAgMTAwODk3LCAxMDA5MDEsIDEwMDkwNSwgMTAwOTA5LCAxMDA5MTMsIDEwMDkxNywgMTAwOTIxLCAxMDA5MjUsIDEwMDkyOSwgCi0gICAgMTAwOTMzLCAxMDA5MzcsIDEwMDk0MSwgMTAwOTQ1LCAxMDA5NDksIDEwMDk1MywgMTAwOTU3LCAxMDA5NjEsIDEwMDk2NSwgCi0gICAgMTAwOTY5LCAxMDA5NzMsIDEwMDk3NywgMTAwOTgxLCAxMDA5ODUsIDEwMDk4OSwgMTAwOTkzLCAxMDA5OTcsIDEwMTAwMSwgCi0gICAgMTAxMDA1LCAxMDEwMDksIDEwMTAxMywgMTAxMDE3LCAxMDEwMjEsIDEwMTAyNSwgMTAxMDI5LCAxMDEwMzMsIDEwMTAzNywgCi0gICAgMTAxMDQxLCAxMDEwNDUsIDEwMTA0OSwgMTAxMDUzLCAxMDEwNTcsIDEwMTA2MSwgMTAxMDY1LCAxMDEwNjksIDEwMTA3MywgCi0gICAgMTAxMDc3LCAxMDEwODEsIDEwMTA4NSwgMTAxMDg5LCAxMDEwOTMsIDEwMTA5NywgMTAxMTAxLCAxMDExMDUsIDEwMTEwOSwgCi0gICAgMTAxMTEzLCAxMDExMTcsIDEwMTEyMSwgMTAxMTI1LCAxMDExMjksIDEwMTEzMywgMTAxMTM3LCAxMDExNDEsIDEwMTE0NSwgCi0gICAgMTAxMTQ5LCAxMDExNTMsIDEwMTE1NywgMTAxMTYxLCAxMDExNjUsIDEwMTE2OSwgMTAxMTczLCAxMDExNzcsIDEwMTE4MSwgCi0gICAgMTAxMTg1LCAxMDExODksIDEwMTE5MywgMTAxMTk3LCAxMDEyMDEsIDEwMTIwNSwgMTAxMjA5LCAxMDEyMTMsIDEwMTIxNywgCi0gICAgMTAxMjIxLCAxMDEyMjUsIDEwMTIyOSwgMTAxMjMzLCAxMDEyMzcsIDEwMTI0MSwgMTAxMjQ1LCAxMDEyNDksIDEwMTI1MywgCi0gICAgMTAxMjU3LCAxMDEyNjEsIDEwMTI2NSwgMTAxMjY5LCAxMDEyNzMsIDEwMTI3NywgMTAxMjgxLCAxMDEyODUsIDEwMTI4OSwgCi0gICAgMTAxMjkzLCAxMDEyOTcsIDEwMTMwMSwgMTAxMzA1LCAxMDEzMDksIDEwMTMxMywgMTAxMzE3LCAxMDEzMjEsIDEwMTMyNSwgCi0gICAgMTAxMzI5LCAxMDEzMzMsIDEwMTMzNywgMTAxMzQxLCAxMDEzNDUsIDEwMTM0OSwgMTAxMzUzLCAxMDEzNTcsIDEwMTM2MSwgCi0gICAgMTAxMzY1LCAxMDEzNjksIDEwMTM3MywgMTAxMzc3LCAxMDEzODEsIDEwMTM4NSwgMTAxMzg5LCAxMDEzOTMsIDEwMTM5NywgCi0gICAgMTAxNDAxLCAxMDE0MDUsIDEwMTQwOSwgMTAxNDEzLCAxMDE0MTcsIDEwMTQyMSwgMTAxNDI1LCAxMDE0MjksIDEwMTQzMywgCi0gICAgMTAxNDM3LCAxMDE0NDEsIDEwMTQ0NSwgMTAxNDQ5LCAxMDE0NTMsIDEwMTQ1NywgMTAxNDYxLCAxMDE0NjUsIDEwMTQ2OSwgCi0gICAgMTAxNDczLCAxMDE0NzcsIDEwMTQ4MSwgMTAxNDg1LCAxMDE0ODksIDEwMTQ5MywgMTAxNDk3LCAxMDE1MDEsIDEwMTUwNSwgCi0gICAgMTAxNTA5LCAxMDE1MTMsIDEwMTUxNywgMTAxNTIxLCAxMDE1MjUsIDEwMTUyOSwgMTAxNTMzLCAxMDE1MzcsIDEwMTU0MSwgCi0gICAgMTAxNTQ1LCAxMDE1NDksIDEwMTU1MywgMTAxNTU3LCAxMDE1NjEsIDEwMTU2NSwgMTAxNTY5LCAxMDE1NzMsIDEwMTU3NywgCi0gICAgMTAxNTgxLCAxMDE1ODUsIDEwMTU4OSwgMTAxNTkzLCAxMDE1OTcsIDEwMTYwMSwgMTAxNjA1LCAxMDE2MDksIDEwMTYxMywgCi0gICAgMTAxNjE3LCAxMDE2MjEsIDEwMTYyNSwgMTAxNjI5LCAxMDE2MzMsIDEwMTYzNywgMTAxNjQxLCAxMDE2NDUsIDEwMTY0OSwgCi0gICAgMTAxNjUzLCAxMDE2NTcsIDEwMTY2MSwgMTAxNjY1LCAxMDE2NjksIDEwMTY3MywgMTAxNjc3LCAxMDE2ODEsIDEwMTY4NSwgCi0gICAgMTAxNjg5LCAxMDE2OTMsIDEwMTY5NywgMTAxNzAxLCAxMDE3MDUsIDEwMTcwOSwgMTAxNzEzLCAxMDE3MTcsIDEwMTcyMSwgCi0gICAgMTAxNzI1LCAxMDE3MjksIDEwMTczMywgMTAxNzM3LCAxMDE3NDEsIDEwMTc0NSwgMTAxNzQ5LCAxMDE3NTMsIDEwMTc1NywgCi0gICAgMTAxNzYxLCAxMDE3NjUsIDEwMTc2OSwgMTAxNzczLCAxMDE3NzcsIDEwMTc4MSwgMTAxNzg1LCAxMDE3ODksIDEwMTc5MywgCi0gICAgMTAxNzk3LCAxMDE4MDEsIDEwMTgwNSwgMTAxODA5LCAxMDE4MTMsIDEwMTgxNywgMTAxODIxLCAxMDE4MjUsIDEwMTgyOSwgCi0gICAgMTAxODMzLCAxMDE4MzcsIDEwMTg0MSwgMTAxODQ1LCAxMDE4NDksIDEwMTg1MywgMTAxODU3LCAxMDE4NjEsIDEwMTg2NSwgCi0gICAgMTAxODY5LCAxMDE4NzMsIDEwMTg3NywgMTAxODgxLCAxMDE4ODUsIDEwMTg4OSwgMTAxODkzLCAxMDE4OTcsIDEwMTkwMSwgCi0gICAgMTAxOTA1LCAxMDE5MDksIDEwMTkxMywgMTAxOTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMDQ0MDgsIDEwNDQxNSwgMTA0NDIyLCAxMDQ0MzEsIDEwNDQ0MCwgMTA0NDQ3LCAxMDQ0NTIsIDEwNDQ1OSwgCisgICAgMTA0NDY2LCAxMDQ0NzUsIDEwNDQ4NiwgMTA0NDk3LCAxMDQ1MDIsIDEwNDUwOSwgMTA0NTE0LCAxMDQ1MTksIDEwNDUyNCwgCisgICAgMTA0NTI5LCAxMDQ1MzQsIDEwNDUzOSwgMTA0NTQ0LCAxMDQ1NDksIDEwNDU1NCwgMTA0NTU5LCAxMDQ1NjQsIDEwNDU3MSwgCisgICAgMTA0NTc4LCAxMDQ1ODMsIDEwNDU4OCwgMTA0NTkzLCAxMDQ1OTgsIDEwNDYwNSwgMTA0NjEyLCAxMDQ2MjAsIDEwNDYyNSwgCisgICAgMTA0NjMyLCAxMDQ2MzcsIDEwNDY0MiwgMTA0NjQ3LCAxMDQ2NTIsIDEwNDY1NywgMTA0NjY0LCAxMDQ2NzEsIDEwNDY3NiwgCisgICAgMTA0NjgxLCAxMDQ2ODYsIDEwNDY5MSwgMTA0Njk2LCAxMDQ3MDEsIDEwNDcwNiwgMTA0NzExLCAxMDQ3MTYsIDEwNDcyMSwgCisgICAgMTA0NzI2LCAxMDQ3MzEsIDEwNDczNiwgMTA0NzQxLCAxMDQ3NDYsIDEwNDc1MSwgMTA0NzU2LCAxMDQ3NjEsIDEwNDc2NiwgCisgICAgMTA0NzczLCAxMDQ3NzgsIDEwNDc4MywgMTA0NzkyLCAxMDQ3OTksIDEwNDgwNCwgMTA0ODA5LCAxMDQ4MTQsIDEwNDgxOSwgCisgICAgMTA0ODI0LCAxMDQ4MjksIDEwNDgzNCwgMTA0ODM5LCAxMDQ4NDQsIDEwNDg0OSwgMTA0ODU0LCAxMDQ4NTksIDEwNDg2NCwgCisgICAgMTA0ODY5LCAxMDQ4NzQsIDEwNDg3OSwgMTA0ODg0LCAxMDQ4ODksIDEwNDg5NCwgMTA0ODk5LCAxMDQ5MDQsIDEwNDkxMCwgCisgICAgMTA0OTE4LCAxMDQ5MjQsIDEwNDkzMiwgMTA0OTQwLCAxMDQ5NDgsIDEwNDk1NCwgMTA0OTYwLCAxMDQ5NjYsIDEwNDk3MiwgCisgICAgMTA0OTc4LCAxMDQ5ODYsIDEwNDk5NiwgMTA1MDA0LCAxMDUwMTIsIDEwNTAxOCwgMTA1MDI0LCAxMDUwMzIsIDEwNTA0MCwgCisgICAgMTA1MDQ2LCAxMDUwNTQsIDEwNTA2MiwgMTA1MDcwLCAxMDUwNzYsIDEwNTA4MiwgMTA1MDg4LCAxMDUwOTQsIDEwNTEwMCwgCisgICAgMTA1MTA2LCAxMDUxMTQsIDEwNTEyMiwgMTA1MTI4LCAxMDUxMzQsIDEwNTE0MCwgMTA1MTQ2LCAxMDUxNTIsIDEwNTE2MCwgCisgICAgMTA1MTY2LCAxMDUxNzIsIDEwNTE3OCwgMTA1MTg0LCAxMDUxOTAsIDEwNTE5NiwgMTA1MjA0LCAxMDUyMTAsIDEwNTIxNiwgCisgICAgMTA1MjIyLCAxMDUyMjgsIDEwNTIzNiwgMTA1MjQ0LCAxMDUyNTAsIDEwNTI1NiwgMTA1MjYyLCAxMDUyNjcsIDEwNTI3MywgCisgICAgMTA1Mjc5LCAxMDUyODYsIDEwNTI5MSwgMTA1Mjk2LCAxMDUzMDEsIDEwNTMwNiwgMTA1MzExLCAxMDUzMTYsIDEwNTMyMSwgCisgICAgMTA1MzI2LCAxMDUzMzEsIDEwNTM0MCwgMTA1MzQ3LCAxMDUzNTIsIDEwNTM1NywgMTA1MzYyLCAxMDUzNjksIDEwNTM3NCwgCisgICAgMTA1Mzc5LCAxMDUzODQsIDEwNTM5MSwgMTA1Mzk2LCAxMDU0MDEsIDEwNTQwNiwgMTA1NDExLCAxMDU0MTYsIDEwNTQyMSwgCisgICAgMTA1NDI2LCAxMDU0MzEsIDEwNTQzNiwgMTA1NDQxLCAxMDU0NDYsIDEwNTQ1MywgMTA1NDU4LCAxMDU0NjUsIDEwNTQ3MCwgCisgICAgMTA1NDc1LCAxMDU0ODIsIDEwNTQ4NywgMTA1NDkyLCAxMDU0OTcsIDEwNTUwMiwgMTA1NTA3LCAxMDU1MTIsIDEwNTUxNywgCisgICAgMTA1NTIyLCAxMDU1MjcsIDEwNTUzMiwgMTA1NTM3LCAxMDU1NDIsIDEwNTU0NywgMTA1NTUyLCAxMDU1NTcsIDEwNTU2MiwgCisgICAgMTA1NTY3LCAxMDU1NzIsIDEwNTU3NywgMTA1NTg0LCAxMDU1ODksIDEwNTU5NCwgMTA1NTk5LCAxMDU2MDQsIDEwNTYwOSwgCisgICAgMTA1NjE0LCAxMDU2MTksIDEwNTYyNCwgMTA1NjI5LCAxMDU2MzQsIDEwNTYzOSwgMTA1NjQ0LCAxMDU2NDksIDEwNTY1NiwgCisgICAgMTA1NjYxLCAxMDU2NjYsIDEwNTY3MywgMTA1Njc4LCAxMDU2ODMsIDEwNTY4OCwgMTA1NjkzLCAxMDU2OTgsIDEwNTcwMywgCisgICAgMTA1NzA4LCAxMDU3MTMsIDEwNTcxOCwgMTA1NzIzLCAxMDU3MzAsIDEwNTczNSwgMTA1NzQwLCAxMDU3NDUsIDEwNTc1MCwgCisgICAgMTA1NzU1LCAxMDU3NjIsIDEwNTc2OSwgMTA1Nzc0LCAxMDU3NzksIDEwNTc4NCwgMTA1Nzg5LCAxMDU3OTQsIDEwNTc5OSwgCisgICAgMTA1ODA0LCAxMDU4MDksIDEwNTgxNCwgMTA1ODE5LCAxMDU4MjQsIDEwNTgyOSwgMTA1ODM0LCAxMDU4MzksIDEwNTg0NCwgCisgICAgMTA1ODQ5LCAxMDU4NTQsIDEwNTg1OSwgMTA1ODY0LCAxMDU4NjksIDEwNTg3NCwgMTA1ODc5LCAxMDU4ODQsIDEwNTg4OSwgCisgICAgMTA1ODk0LCAxMDU4OTksIDEwNTkwNCwgMTA1OTA5LCAxMDU5MTQsIDEwNTkxOSwgMTA1OTI0LCAxMDU5MjksIDEwNTkzNCwgCisgICAgMTA1OTM5LCAxMDU5NDQsIDEwNTk0OSwgMTA1OTU2LCAxMDU5NjEsIDEwNTk2NiwgMTA1OTcxLCAxMDU5NzYsIDEwNTk4MSwgCisgICAgMTA1OTg2LCAxMDU5OTEsIDEwNTk5NiwgMTA2MDAxLCAxMDYwMDYsIDEwNjAxMSwgMTA2MDE2LCAxMDYwMjEsIDEwNjAyNiwgCisgICAgMTA2MDMxLCAxMDYwMzYsIDEwNjA0MSwgMTA2MDQ2LCAxMDYwNTEsIDEwNjA1NiwgMTA2MDYxLCAxMDYwNjYsIDEwNjA3MSwgCisgICAgMTA2MDc2LCAxMDYwODEsIDEwNjA4NiwgMTA2MDkxLCAxMDYwOTYsIDEwNjEwMSwgMTA2MTA2LCAxMDYxMTEsIDEwNjExNiwgCisgICAgMTA2MTIxLCAxMDYxMjYsIDEwNjEzMSwgMTA2MTM2LCAxMDYxNDEsIDEwNjE0NiwgMTA2MTUxLCAxMDYxNTYsIDEwNjE2MSwgCisgICAgMTA2MTY2LCAxMDYxNzEsIDEwNjE3NiwgMTA2MTgxLCAxMDYxODYsIDEwNjE5MSwgMTA2MTk2LCAxMDYyMDEsIDEwNjIwNiwgCisgICAgMTA2MjExLCAxMDYyMTYsIDEwNjIyMSwgMTA2MjI2LCAxMDYyMzEsIDEwNjIzNiwgMTA2MjQxLCAxMDYyNDYsIDEwNjI1MywgCisgICAgMTA2MjU4LCAxMDYyNjMsIDEwNjI2OCwgMTA2MjczLCAxMDYyNzgsIDEwNjI4MywgMTA2Mjg3LCAxMDYyOTIsIDEwNjI5NywgCisgICAgMTA2MzAyLCAxMDYzMDcsIDEwNjMxMiwgMTA2MzE3LCAxMDYzMjIsIDEwNjMyNywgMTA2MzMyLCAxMDYzMzcsIDEwNjM0MiwgCisgICAgMTA2MzQ3LCAxMDYzNTIsIDEwNjM1NywgMTA2MzY0LCAxMDYzNjksIDEwNjM3NCwgMTA2MzgwLCAxMDYzODUsIDEwNjM5MCwgCisgICAgMTA2Mzk1LCAxMDY0MDAsIDEwNjQwNSwgMTA2NDEwLCAxMDY0MTUsIDEwNjQyMCwgMTA2NDI1LCAxMDY0MzAsIDEwNjQzNSwgCisgICAgMTA2NDQwLCAxMDY0NDUsIDEwNjQ1MCwgMTA2NDU1LCAxMDY0NjAsIDEwNjQ2NSwgMTA2NDcwLCAxMDY0NzUsIDEwNjQ4MCwgCisgICAgMTA2NDg1LCAxMDY0OTAsIDEwNjQ5NSwgMTA2NTAwLCAxMDY1MDUsIDEwNjUxMCwgMTA2NTE1LCAxMDY1MjAsIDEwNjUyNSwgCisgICAgMTA2NTMwLCAxMDY1MzUsIDEwNjU0MCwgMTA2NTQ1LCAxMDY1NTAsIDEwNjU1NSwgMTA2NTYwLCAxMDY1NjUsIDEwNjU3MCwgCisgICAgMTA2NTc1LCAxMDY1ODAsIDEwNjU4NSwgMTA2NTkwLCAxMDY1OTUsIDEwNjYwMiwgMTA2NjA3LCAxMDY2MTIsIDEwNjYxOSwgCisgICAgMTA2NjI2LCAxMDY2MzEsIDEwNjYzNiwgMTA2NjQxLCAxMDY2NDYsIDEwNjY1MSwgMTA2NjU2LCAxMDY2NjEsIDEwNjY2NiwgCisgICAgMTA2NjcxLCAxMDY2NzYsIDEwNjY4MSwgMTA2Njg2LCAxMDY2OTEsIDEwNjY5NiwgMTA2NzAxLCAxMDY3MDYsIDEwNjcxMSwgCisgICAgMTA2NzE2LCAxMDY3MjEsIDEwNjcyNiwgMTA2NzMxLCAxMDY3MzYsIDEwNjc0MSwgMTA2NzQ2LCAxMDY3NTEsIDEwNjc1OCwgCisgICAgMTA2NzYzLCAxMDY3NjgsIDEwNjc3MywgMTA2Nzc4LCAxMDY3ODMsIDEwNjc4OCwgMTA2NzkzLCAxMDY3OTgsIDEwNjgwMywgCisgICAgMTA2ODA4LCAxMDY4MTMsIDEwNjgxOCwgMTA2ODIzLCAxMDY4MjgsIDEwNjgzMywgMTA2ODM4LCAxMDY4NDMsIDEwNjg0OCwgCisgICAgMTA2ODU1LCAxMDY4NjAsIDEwNjg2NSwgMTA2ODcwLCAxMDY4NzUsIDEwNjg4MCwgMTA2ODg1LCAxMDY4OTAsIDEwNjg5NiwgCisgICAgMTA2OTAxLCAxMDY5MDYsIDEwNjkxMSwgMTA2OTE2LCAxMDY5MjEsIDEwNjkyNiwgMTA2OTMxLCAxMDY5MzYsIDEwNjk0MywgCisgICAgMTA2OTUwLCAxMDY5NTUsIDEwNjk2MCwgMTA2OTY0LCAxMDY5NjksIDEwNjk3MywgMTA2OTc3LCAxMDY5ODIsIDEwNjk4OSwgCisgICAgMTA2OTk0LCAxMDY5OTksIDEwNzAwOCwgMTA3MDEzLCAxMDcwMTgsIDEwNzAyMywgMTA3MDI4LCAxMDcwMzUsIDEwNzA0MiwgCisgICAgMTA3MDQ3LCAxMDcwNTIsIDEwNzA1NywgMTA3MDYyLCAxMDcwNjksIDEwNzA3NCwgMTA3MDc5LCAxMDcwODQsIDEwNzA4OSwgCisgICAgMTA3MDk0LCAxMDcwOTksIDEwNzEwNCwgMTA3MTA5LCAxMDcxMTQsIDEwNzExOSwgMTA3MTI0LCAxMDcxMjksIDEwNzEzNiwgCisgICAgMTA3MTQwLCAxMDcxNDUsIDEwNzE1MCwgMTA3MTU1LCAxMDcxNjAsIDEwNzE2NCwgMTA3MTY5LCAxMDcxNzQsIDEwNzE3OSwgCisgICAgMTA3MTg0LCAxMDcxODksIDEwNzE5NCwgMTA3MTk5LCAxMDcyMDQsIDEwNzIwOSwgMTA3MjE1LCAxMDcyMjEsIDEwNzIyNywgCisgICAgMTA3MjMzLCAxMDcyMzksIDEwNzI0NSwgMTA3MjUxLCAxMDcyNTcsIDEwNzI2MywgMTA3MjY5LCAxMDcyNzUsIDEwNzI4MSwgCisgICAgMTA3Mjg2LCAxMDcyOTIsIDEwNzI5OCwgMTA3MzA0LCAxMDczMTAsIDEwNzMxNiwgMTA3MzIyLCAxMDczMjgsIDEwNzMzNCwgCisgICAgMTA3MzQwLCAxMDczNDYsIDEwNzM1MiwgMTA3MzU3LCAxMDczNjMsIDEwNzM2OSwgMTA3Mzc1LCAxMDczODEsIDEwNzM4NywgCisgICAgMTA3MzkzLCAxMDczOTksIDEwNzQwNSwgMTA3NDExLCAxMDc0MTcsIDEwNzQyMywgMTA3NDI5LCAxMDc0MzUsIDEwNzQ0MSwgCisgICAgMTA3NDQ3LCAxMDc0NTMsIDEwNzQ1OSwgMTA3NDY1LCAxMDc0NzEsIDEwNzQ3NywgMTA3NDgyLCAxMDc0ODgsIDEwNzQ5NCwgCisgICAgMTA3NTAwLCAxMDc1MDYsIDEwNzUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3NTE4LCAxMDc1MjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMTkyMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAxOTI1LCAKLSAgICAxMDE5MjgsIDEwMTkzMiwgMTAxOTM2LCAxMDE5MzksIDEwMTk0MywgMTAxOTQ3LCAxMDE5NTAsIDEwMTk1MywgMTAxOTU3LCAKLSAgICAxMDE5NjEsIDEwMTk2NCwgMTAxOTY3LCAxMDE5NzAsIDEwMTk3MywgMTAxOTc4LCAxMDE5ODEsIDEwMTk4NSwgMTAxOTg4LCAKLSAgICAxMDE5OTEsIDEwMTk5NCwgMTAxOTk3LCAxMDIwMDAsIDEwMjAwMywgMTAyMDA2LCAxMDIwMDksIDEwMjAxMiwgMTAyMDE1LCAKLSAgICAxMDIwMTgsIDEwMjAyMiwgMTAyMDI2LCAxMDIwMzAsIDEwMjAzNCwgMTAyMDM5LCAxMDIwNDQsIDEwMjA1MCwgMTAyMDU2LCAKLSAgICAxMDIwNjIsIDEwMjA2NywgMTAyMDczLCAxMDIwNzgsIDEwMjA4MywgMTAyMDg4LCAxMDIwOTQsIDEwMjEwMCwgMTAyMTA1LCAKLSAgICAxMDIxMTAsIDEwMjExNSwgMTAyMTIwLCAxMDIxMjYsIDEwMjEzMiwgMTAyMTM3LCAxMDIxNDIsIDEwMjE0OCwgMTAyMTUzLCAKLSAgICAxMDIxNTgsIDEwMjE2NCwgMTAyMTcwLCAxMDIxNzYsIDEwMjE4MiwgMTAyMTg2LCAxMDIxOTEsIDEwMjE5NSwgMTAyMjAwLCAKLSAgICAxMDIyMDQsIDEwMjIwOSwgMTAyMjE0LCAxMDIyMjAsIDEwMjIyNiwgMTAyMjMyLCAxMDIyMzcsIDEwMjI0MywgMTAyMjQ4LCAKLSAgICAxMDIyNTMsIDEwMjI1OCwgMTAyMjY0LCAxMDIyNzAsIDEwMjI3NSwgMTAyMjgwLCAxMDIyODUsIDEwMjI5MCwgMTAyMjk2LCAKLSAgICAxMDIzMDIsIDEwMjMwNywgMTAyMzEyLCAxMDIzMTgsIDEwMjMyMywgMTAyMzI4LCAxMDIzMzQsIDEwMjM0MCwgMTAyMzQ2LCAKLSAgICAxMDIzNTIsIDEwMjM1NywgMTAyMzYxLCAxMDIzNjYsIDEwMjM2OCwgMTAyMzcyLCAxMDIzNzUsIDEwMjM3OCwgMTAyMzgxLCAKLSAgICAxMDIzODQsIDEwMjM4NywgMTAyMzkwLCAxMDIzOTMsIDEwMjM5NiwgMTAyMzk5LCAxMDI0MDIsIDEwMjQwNSwgMTAyNDA4LCAKLSAgICAxMDI0MTEsIDEwMjQxNCwgMTAyNDE3LCAxMDI0MjAsIDEwMjQyMywgMTAyNDI2LCAxMDI0MjksIDEwMjQzMiwgMTAyNDM1LCAKLSAgICAxMDI0MzgsIDEwMjQ0MSwgMTAyNDQ0LCAxMDI0NDcsIDEwMjQ1MCwgMTAyNDUzLCAxMDI0NTYsIDEwMjQ1OSwgMTAyNDYyLCAKLSAgICAxMDI0NjUsIDEwMjQ2OCwgMTAyNDcxLCAxMDI0NzQsIDEwMjQ3NywgMTAyNDgwLCAxMDI0ODMsIDEwMjQ4NiwgMTAyNDg5LCAKLSAgICAxMDI0OTIsIDEwMjQ5NSwgMTAyNDk4LCAxMDI1MDEsIDEwMjUwNCwgMTAyNTA3LCAxMDI1MTAsIDEwMjUxMywgMTAyNTE2LCAKLSAgICAxMDI1MTksIDEwMjUyMiwgMTAyNTI1LCAxMDI1MjgsIDEwMjUzMSwgMTAyNTM0LCAxMDI1MzcsIDEwMjU0MCwgMTAyNTQzLCAKLSAgICAxMDI1NDYsIDEwMjU0OSwgMTAyNTUyLCAxMDI1NTUsIDEwMjU1OCwgMTAyNTYxLCAxMDI1NjQsIDEwMjU2NywgMTAyNTcwLCAKLSAgICAxMDI1NzMsIDEwMjU3NiwgMTAyNTc5LCAxMDI1ODIsIDEwMjU4NSwgMTAyNTg4LCAxMDI1OTEsIDEwMjU5NCwgMTAyNTk3LCAKLSAgICAxMDI2MDAsIDEwMjYwMywgMTAyNjA2LCAxMDI2MDksIDEwMjYxMiwgMTAyNjE1LCAxMDI2MTgsIDEwMjYyMSwgMTAyNjI0LCAKLSAgICAxMDI2MjcsIDEwMjYzMCwgMTAyNjMzLCAxMDI2MzYsIDEwMjYzOSwgMTAyNjQyLCAxMDI2NDUsIDEwMjY0OCwgMTAyNjUxLCAKLSAgICAxMDI2NTQsIDEwMjY1NywgMTAyNjYwLCAxMDI2NjMsIDEwMjY2NiwgMTAyNjY5LCAxMDI2NzIsIDEwMjY3NSwgMTAyNjc4LCAKLSAgICAxMDI2ODEsIDEwMjY4NCwgMTAyNjg3LCAxMDI2OTAsIDEwMjY5MywgMTAyNjk2LCAxMDI2OTksIDEwMjcwMiwgMTAyNzA1LCAKLSAgICAxMDI3MDgsIDEwMjcxMSwgMTAyNzE0LCAxMDI3MTcsIDEwMjcyMCwgMTAyNzIzLCAxMDI3MjYsIDEwMjcyOSwgMTAyNzMyLCAKLSAgICAxMDI3MzUsIDEwMjczOCwgMTAyNzQxLCAxMDI3NDQsIDEwMjc0NywgMTAyNzUwLCAxMDI3NTMsIDEwMjc1NiwgMTAyNzU5LCAKLSAgICAxMDI3NjIsIDEwMjc2NSwgMTAyNzY4LCAxMDI3NzEsIDEwMjc3NCwgMTAyNzc3LCAxMDI3ODAsIDEwMjc4MywgMTAyNzg2LCAKLSAgICAxMDI3ODksIDEwMjc5MiwgMTAyNzk1LCAxMDI3OTgsIDEwMjgwMSwgMTAyODA0LCAxMDI4MDcsIDEwMjgxMCwgMTAyODEzLCAKLSAgICAxMDI4MTYsIDEwMjgxOSwgMTAyODIyLCAxMDI4MjUsIDEwMjgyOCwgMTAyODMxLCAxMDI4MzQsIDEwMjgzNywgMTAyODQwLCAKLSAgICAxMDI4NDMsIDEwMjg0NiwgMTAyODQ5LCAxMDI4NTIsIDEwMjg1NSwgMTAyODU4LCAxMDI4NjEsIDEwMjg2NCwgMTAyODY3LCAKLSAgICAxMDI4NzAsIDEwMjg3MywgMTAyODc2LCAxMDI4NzksIDEwMjg4MiwgMTAyODg1LCAxMDI4ODgsIDEwMjg5MSwgMTAyODk0LCAKLSAgICAxMDI4OTcsIDEwMjkwMCwgMTAyOTAzLCAxMDI5MDYsIDEwMjkwOSwgMTAyOTEyLCAxMDI5MTUsIDEwMjkxOCwgMTAyOTIxLCAKLSAgICAxMDI5MjQsIDEwMjkyNywgMTAyOTMwLCAxMDI5MzMsIDEwMjkzNiwgMTAyOTM5LCAxMDI5NDIsIDEwMjk0NSwgMTAyOTQ4LCAKLSAgICAxMDI5NTEsIDEwMjk1NCwgMTAyOTU3LCAxMDI5NjAsIDEwMjk2MywgMTAyOTY2LCAxMDI5NjksIDEwMjk3MiwgMTAyOTc1LCAKLSAgICAxMDI5NzgsIDEwMjk4MSwgMTAyOTg0LCAxMDI5ODcsIDEwMjk5MCwgMTAyOTkzLCAxMDI5OTYsIDEwMjk5OSwgMTAzMDAyLCAKLSAgICAxMDMwMDUsIDEwMzAwOCwgMTAzMDExLCAxMDMwMTQsIDEwMzAxNywgMTAzMDIwLCAxMDMwMjMsIDEwMzAyNiwgMTAzMDI5LCAKLSAgICAxMDMwMzIsIDEwMzAzNSwgMTAzMDM4LCAxMDMwNDEsIDEwMzA0NCwgMTAzMDQ3LCAxMDMwNTAsIDEwMzA1MywgMTAzMDU2LCAKLSAgICAxMDMwNTksIDEwMzA2MiwgMTAzMDY1LCAxMDMwNjgsIDEwMzA3MSwgMTAzMDc0LCAxMDMwNzcsIDEwMzA4MCwgMTAzMDgzLCAKLSAgICAxMDMwODYsIDEwMzA4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3NTI5LCAxMDc1MzQsIAorICAgIDEwNzUzOSwgMTA3NTQ0LCAxMDc1NTEsIDEwNzU1OCwgMTA3NTY1LCAxMDc1NzIsIDEwNzU3NywgMTA3NTgyLCAxMDc1ODcsIAorICAgIDEwNzU5MiwgMTA3NTk5LCAxMDc2MDQsIDEwNzYxMSwgMTA3NjE4LCAxMDc2MjMsIDEwNzYyOCwgMTA3NjMzLCAxMDc2NDAsIAorICAgIDEwNzY0NSwgMTA3NjUwLCAxMDc2NTcsIDEwNzY2NCwgMTA3NjY5LCAxMDc2NzQsIDEwNzY3OSwgMTA3Njg2LCAxMDc2OTMsIAorICAgIDEwNzcwMCwgMTA3NzA1LCAxMDc3MTAsIDEwNzcxNywgMTA3NzI0LCAxMDc3MzEsIDEwNzczOCwgMTA3NzQzLCAxMDc3NDgsIAorICAgIDEwNzc1MywgMTA3NzYwLCAxMDc3NjUsIDEwNzc3MCwgMTA3Nzc1LCAxMDc3ODIsIDEwNzc5MSwgMTA3Nzk4LCAxMDc4MDMsIAorICAgIDEwNzgwOCwgMTA3ODEzLCAxMDc4MTgsIDEwNzgyMywgMTA3ODI4LCAxMDc4MzcsIDEwNzg0NCwgMTA3ODQ5LCAxMDc4NTYsIAorICAgIDEwNzg2MywgMTA3ODY4LCAxMDc4NzMsIDEwNzg3OCwgMTA3ODg1LCAxMDc4OTAsIDEwNzg5NywgMTA3OTA0LCAxMDc5MDksIAorICAgIDEwNzkxNCwgMTA3OTE5LCAxMDc5MjYsIDEwNzkzMywgMTA3OTM4LCAxMDc5NDMsIDEwNzk1MCwgMTA3OTU3LCAxMDc5NjQsIAorICAgIDEwNzk2OSwgMTA3OTc0LCAxMDc5NzksIDEwNzk4NCwgMTA3OTkxLCAxMDgwMDAsIDEwODAwOSwgMTA4MDE0LCAxMDgwMjEsIAorICAgIDEwODAzMCwgMTA4MDM1LCAxMDgwNDAsIDEwODA0NSwgMTA4MDUwLCAxMDgwNTcsIDEwODA2NCwgMTA4MDcxLCAxMDgwNzgsIAorICAgIDEwODA4MywgMTA4MDg4LCAxMDgwOTMsIDEwODEwMCwgMTA4MTA3LCAxMDgxMTQsIDEwODExOSwgMTA4MTI0LCAxMDgxMzEsIAorICAgIDEwODEzNiwgMTA4MTQzLCAxMDgxNDgsIDEwODE1NSwgMTA4MTYwLCAxMDgxNjcsIDEwODE3NCwgMTA4MTc5LCAxMDgxODQsIAorICAgIDEwODE4OSwgMTA4MTk0LCAxMDgxOTksIDEwODIwNCwgMTA4MjA5LCAxMDgyMTQsIDEwODIxOSwgMTA4MjI2LCAxMDgyMzMsIAorICAgIDEwODI0MCwgMTA4MjQ3LCAxMDgyNTQsIDEwODI2MywgMTA4MjY4LCAxMDgyNzMsIDEwODI4MCwgMTA4Mjg3LCAxMDgyOTIsIAorICAgIDEwODI5OSwgMTA4MzA2LCAxMDgzMTMsIDEwODMyMCwgMTA4MzI3LCAxMDgzMzQsIDEwODMzOSwgMTA4MzQ0LCAxMDgzNDksIAorICAgIDEwODM1NCwgMTA4MzU5LCAxMDgzNjgsIDEwODM3NywgMTA4Mzg2LCAxMDgzOTUsIDEwODQwNCwgMTA4NDEzLCAxMDg0MjIsIAorICAgIDEwODQzMSwgMTA4NDM2LCAxMDg0NDcsIDEwODQ1OCwgMTA4NDY3LCAxMDg0NzIsIDEwODQ3NywgMTA4NDgyLCAxMDg0ODcsIAorICAgIDEwODQ5NiwgMTA4NTAzLCAxMDg1MTAsIDEwODUxNywgMTA4NTI0LCAxMDg1MzEsIDEwODUzOCwgMTA4NTQ3LCAxMDg1NTYsIAorICAgIDEwODU2NywgMTA4NTc2LCAxMDg1ODcsIDEwODU5NiwgMTA4NjAzLCAxMDg2MTIsIDEwODYyMywgMTA4NjMyLCAxMDg2NDEsIAorICAgIDEwODY1MCwgMTA4NjU5LCAxMDg2NjYsIDEwODY3MywgMTA4NjgwLCAxMDg2ODksIDEwODY5OCwgMTA4NzA5LCAxMDg3MTgsIAorICAgIDEwODcyNywgMTA4NzM4LCAxMDg3NDMsIDEwODc0OCwgMTA4NzU5LCAxMDg3NjcsIDEwODc3NiwgMTA4Nzg1LCAxMDg3OTQsIAorICAgIDEwODgwNSwgMTA4ODE0LCAxMDg4MjMsIDEwODgzNCwgMTA4ODQ1LCAxMDg4NTYsIDEwODg2NywgMTA4ODc4LCAxMDg4ODksIAorICAgIDEwODg5NiwgMTA4OTAzLCAxMDg5MTAsIDEwODkxNywgMTA4OTI4LCAxMDg5MzcsIDEwODk0NCwgMTA4OTUxLCAxMDg5NTgsIAorICAgIDEwODk2OSwgMTA4OTgwLCAxMDg5OTEsIDEwOTAwMiwgMTA5MDEzLCAxMDkwMjQsIDEwOTAzNSwgMTA5MDQ2LCAxMDkwNTMsIAorICAgIDEwOTA2MCwgMTA5MDY5LCAxMDkwNzgsIDEwOTA4NSwgMTA5MDkyLCAxMDkwOTksIDEwOTEwOCwgMTA5MTE3LCAxMDkxMjYsIAorICAgIDEwOTEzMywgMTA5MTQyLCAxMDkxNTEsIDEwOTE2MCwgMTA5MTY3LCAxMDkxNzQsIDEwOTE3OSwgMTA5MTg1LCAxMDkxOTIsIAorICAgIDEwOTE5OSwgMTA5MjA2LCAxMDkyMTMsIDEwOTIyMCwgMTA5MjI3LCAxMDkyMzYsIDEwOTI0NSwgMTA5MjU0LCAxMDkyNjMsIAorICAgIDEwOTI3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA5Mjc5LCAxMDkyODUsIDEwOTI5MCwgMTA5Mjk1LCAKKyAgICAxMDkzMDIsIDEwOTMwOCwgMTA5MzE0LCAxMDkzMjAsIDEwOTMyNiwgMTA5MzMyLCAxMDkzMzgsIDEwOTM0NCwgMTA5MzQ4LCAKKyAgICAxMDkzNTIsIDEwOTM1OCwgMTA5MzY0LCAxMDkzNzAsIDEwOTM3NCwgMTA5Mzc5LCAxMDkzODQsIDEwOTM4OCwgMTA5MzkyLCAKKyAgICAxMDkzOTUsIDEwOTQwMSwgMTA5NDA3LCAxMDk0MTMsIDEwOTQxOSwgMTA5NDI1LCAxMDk0MzEsIDEwOTQzNywgMTA5NDQzLCAKKyAgICAxMDk0NDksIDEwOTQ1OSwgMTA5NDY5LCAxMDk0NzUsIDEwOTQ4MSwgMTA5NDkxLCAxMDk1MDEsIDEwOTUwNywgMCwgMCwgCisgICAgMTA5NTEzLCAxMDk1MjEsIDEwOTUyNiwgMTA5NTMxLCAxMDk1MzcsIDEwOTU0MywgMTA5NTQ5LCAxMDk1NTUsIDEwOTU2MSwgCisgICAgMTA5NTY3LCAxMDk1NzQsIDEwOTU4MSwgMTA5NTg3LCAxMDk1OTMsIDEwOTU5OSwgMTA5NjA1LCAxMDk2MTEsIDEwOTYxNywgCisgICAgMTA5NjIzLCAxMDk2MjksIDEwOTYzNCwgMTA5NjQwLCAxMDk2NDYsIDEwOTY1MiwgMTA5NjU4LCAxMDk2NjQsIDEwOTY3MywgCisgICAgMTA5Njc5LCAxMDk2ODQsIDEwOTY5MiwgMTA5Njk5LCAxMDk3MDYsIDEwOTcxNSwgMTA5NzI0LCAxMDk3MzMsIDEwOTc0MiwgCisgICAgMTA5NzUxLCAxMDk3NjAsIDEwOTc2OSwgMTA5Nzc4LCAxMDk3ODgsIDEwOTc5OCwgMTA5ODA2LCAxMDk4MTQsIDEwOTgyMywgCisgICAgMTA5ODMyLCAxMDk4MzgsIDEwOTg0NCwgMTA5ODUwLCAxMDk4NTYsIDEwOTg2NCwgMTA5ODcyLCAxMDk4NzYsIDEwOTg4MiwgCisgICAgMTA5ODg3LCAxMDk4OTMsIDEwOTg5OSwgMTA5OTA1LCAxMDk5MTEsIDEwOTkxNywgMTA5OTI2LCAxMDk5MzEsIDEwOTkzOCwgCisgICAgMTA5OTQzLCAxMDk5NDgsIDEwOTk1MywgMTA5OTU5LCAxMDk5NjUsIDEwOTk3MSwgMTA5OTc4LCAxMDk5ODMsIDEwOTk4OCwgCisgICAgMTA5OTkzLCAxMDk5OTgsIDExMDAwMywgMTEwMDA5LCAxMTAwMTUsIDExMDAyMSwgMTEwMDI3LCAxMTAwMzMsIDExMDAzOSwgCisgICAgMTEwMDQ1LCAxMTAwNTEsIDExMDA1NiwgMTEwMDYxLCAxMTAwNjYsIDExMDA3MSwgMTEwMDc2LCAxMTAwODEsIDExMDA4NiwgCisgICAgMTEwMDkxLCAxMTAwOTcsIDExMDEwMywgMTEwMTA4LCAxMTAxMTMsIDExMDExOCwgMTEwMTIzLCAxMTAxMjgsIDExMDEzNCwgCisgICAgMTEwMTQxLCAxMTAxNDUsIDExMDE0OSwgMTEwMTUzLCAxMTAxNTcsIDExMDE2MSwgMTEwMTY1LCAxMTAxNjksIDExMDE3MywgCisgICAgMTEwMTgxLCAxMTAxOTEsIDExMDE5NSwgMTEwMTk5LCAxMTAyMDUsIDExMDIxMSwgMTEwMjE3LCAxMTAyMjMsIDExMDIyOSwgCisgICAgMTEwMjM1LCAxMTAyNDEsIDExMDI0NywgMTEwMjUzLCAxMTAyNTksIDExMDI2NSwgMTEwMjcxLCAxMTAyNzcsIDExMDI4MywgCisgICAgMTEwMjg3LCAxMTAyOTEsIDExMDI5OCwgMTEwMzA0LCAxMTAzMTAsIDExMDMxNiwgMTEwMzIxLCAxMTAzMjgsIDExMDMzMywgCisgICAgMTEwMzM5LCAxMTAzNDUsIDExMDM1MSwgMTEwMzU3LCAxMTAzNjIsIDExMDM2NiwgMTEwMzcyLCAxMTAzNzYsIDExMDM4MCwgCisgICAgMTEwMzg0LCAxMTAzOTAsIDExMDM5NiwgMTEwNDAwLCAxMTA0MDYsIDExMDQxMiwgMTEwNDE4LCAxMTA0MjQsIDExMDQzMCwgCisgICAgMTEwNDM4LCAxMTA0NDYsIDExMDQ1MiwgMTEwNDU4LCAxMTA0NjQsIDExMDQ3MCwgMTEwNDgyLCAxMTA0OTQsIDExMDUwOCwgCisgICAgMTEwNTIwLCAxMTA1MzIsIDExMDU0NiwgMTEwNTYwLCAxMTA1NzQsIDExMDU3OCwgMTEwNTg2LCAxMTA1OTQsIDExMDU5OSwgCisgICAgMTEwNjAzLCAxMTA2MDcsIDExMDYxMSwgMTEwNjE1LCAxMTA2MTksIDExMDYyMywgMTEwNjI3LCAxMTA2MzMsIDExMDYzOSwgCisgICAgMTEwNjQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTA2NTEsIDExMDY1NywgMTEwNjYzLCAxMTA2NjksIAorICAgIDExMDY3NSwgMTEwNjgxLCAxMTA2ODcsIDExMDY5MywgMTEwNjk5LCAxMTA3MDUsIDExMDcxMSwgMTEwNzE3LCAxMTA3MjMsIAorICAgIDExMDcyOSwgMTEwNzM1LCAxMTA3NDEsIDExMDc0NywgMTEwNzUzLCAxMTA3NTksIDExMDc2NSwgMTEwNzcxLCAxMTA3NzcsIAorICAgIDExMDc4MywgMTEwNzg5LCAxMTA3OTUsIDExMDgwMSwgMTEwODA3LCAxMTA4MTMsIDExMDgxOSwgMTEwODI1LCAxMTA4MzEsIAorICAgIDExMDgzNywgMTEwODQzLCAxMTA4NDksIDExMDg1NSwgMTEwODYxLCAxMTA4NjcsIDExMDg3MywgMTEwODc5LCAxMTA4ODUsIAorICAgIDExMDg5MSwgMTEwODk3LCAxMTA5MDMsIDExMDkwOSwgMTEwOTE1LCAxMTA5MjEsIDExMDkyNywgMTEwOTMzLCAxMTA5MzksIAorICAgIDExMDk0NSwgMTEwOTUxLCAxMTA5NTcsIDExMDk2MywgMTEwOTY5LCAxMTA5NzUsIDExMDk4MSwgMTEwOTg3LCAxMTA5OTMsIAorICAgIDExMDk5OSwgMTExMDA1LCAxMTEwMTEsIDExMTAxNywgMTExMDIzLCAxMTEwMjksIDExMTAzNSwgMTExMDQxLCAxMTEwNDcsIAorICAgIDExMTA1MiwgMTExMDU3LCAxMTEwNjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTA2NiwgMTExMDcxLCAKKyAgICAxMTEwNzgsIDExMTA4NSwgMTExMDkyLCAxMTEwOTksIDExMTEwNCwgMTExMTA4LCAxMTExMTQsIDExMTExOCwgMTExMTIyLCAKKyAgICAxMTExMjgsIDExMTEzMiwgMTExMTM2LCAxMTExNDAsIDExMTE0NiwgMTExMTUzLCAxMTExNTcsIDExMTE2MSwgMTExMTY1LCAKKyAgICAxMTExNjksIDExMTE3MywgMTExMTc3LCAxMTExODMsIDExMTE4NywgMTExMTkxLCAxMTExOTUsIDExMTE5OSwgMTExMjAzLCAKKyAgICAxMTEyMDcsIDExMTIxMSwgMTExMjE1LCAxMTEyMTksIDExMTIyMywgMTExMjI3LCAxMTEyMzEsIDExMTIzNiwgMTExMjQwLCAKKyAgICAxMTEyNDQsIDExMTI0OCwgMTExMjUyLCAxMTEyNTYsIDExMTI2MCwgMTExMjY0LCAxMTEyNjgsIDExMTI3MiwgMTExMjc5LCAKKyAgICAxMTEyODMsIDExMTI5MSwgMTExMjk1LCAxMTEyOTksIDExMTMwMywgMTExMzA3LCAxMTEzMTEsIDExMTMxNSwgMTExMzE5LCAKKyAgICAxMTEzMjYsIDExMTMzMCwgMTExMzM0LCAxMTEzMzgsIDExMTM0MiwgMTExMzQ2LCAxMTEzNTIsIDExMTM1NiwgMTExMzYyLCAKKyAgICAxMTEzNjYsIDExMTM3MCwgMTExMzc0LCAxMTEzNzgsIDExMTM4MiwgMTExMzg2LCAxMTEzOTAsIDExMTM5NCwgMTExMzk4LCAKKyAgICAxMTE0MDIsIDExMTQwNiwgMTExNDEwLCAxMTE0MTQsIDExMTQxOCwgMTExNDIyLCAxMTE0MjYsIDExMTQzMCwgMTExNDM0LCAKKyAgICAxMTE0MzgsIDExMTQ0NiwgMTExNDUwLCAxMTE0NTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTQ1OCwgCisgICAgMTExNDY2LCAxMTE0NzQsIDExMTQ4MiwgMTExNDkwLCAxMTE0OTgsIDExMTUwNiwgMTExNTE0LCAxMTE1MjIsIDExMTUzMCwgCisgICAgMTExNTM4LCAxMTE1NDYsIDExMTU1NCwgMTExNTYyLCAxMTE1NzAsIDExMTU3OCwgMTExNTg2LCAxMTE1OTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMTYwMiwgMTExNjA2LCAxMTE2MTEsIDExMTYxNiwgMTExNjIxLCAKKyAgICAxMTE2MjUsIDExMTYzMCwgMTExNjM1LCAxMTE2NDAsIDExMTY0NCwgMTExNjQ5LCAxMTE2NTQsIDExMTY1OCwgMTExNjYyLCAKKyAgICAxMTE2NjYsIDExMTY3MCwgMTExNjc1LCAxMTE2ODAsIDExMTY4NCwgMTExNjg4LCAxMTE2OTMsIDExMTY5NywgMTExNzAyLCAKKyAgICAxMTE3MDcsIDExMTcxMiwgMTExNzE3LCAxMTE3MjIsIDExMTcyNiwgMTExNzMxLCAxMTE3MzYsIDExMTc0MSwgMTExNzQ1LCAKKyAgICAxMTE3NTAsIDExMTc1NSwgMTExNzYwLCAxMTE3NjQsIDExMTc2OSwgMTExNzc0LCAxMTE3NzgsIDExMTc4MiwgMTExNzg2LCAKKyAgICAxMTE3OTAsIDExMTc5NSwgMTExODAwLCAxMTE4MDQsIDExMTgwOCwgMTExODEzLCAxMTE4MTcsIDExMTgyMiwgMTExODI3LCAKKyAgICAxMTE4MzIsIDExMTgzNywgMTExODQyLCAxMTE4NDYsIDExMTg1MSwgMTExODU2LCAxMTE4NjEsIDExMTg2NSwgMTExODcwLCAKKyAgICAxMTE4NzUsIDExMTg4MCwgMTExODg0LCAxMTE4ODksIDExMTg5NCwgMTExODk4LCAxMTE5MDIsIDExMTkwNiwgMTExOTEwLCAKKyAgICAxMTE5MTUsIDExMTkyMCwgMTExOTI0LCAxMTE5MjgsIDExMTkzMywgMTExOTM3LCAxMTE5NDIsIDExMTk0NywgMTExOTUyLCAKKyAgICAxMTE5NTcsIDExMTk2MiwgMTExOTY2LCAxMTE5NzEsIDExMTk3NiwgMTExOTgxLCAxMTE5ODUsIDExMTk5MCwgMCwgCisgICAgMTExOTk1LCAxMTE5OTksIDExMjAwNCwgMTEyMDA5LCAxMTIwMTMsIDExMjAxNywgMTEyMDIxLCAxMTIwMjUsIDExMjAzMCwgCisgICAgMTEyMDM1LCAxMTIwMzksIDExMjA0MywgMTEyMDQ4LCAxMTIwNTIsIDExMjA1NywgMTEyMDYyLCAxMTIwNjcsIDExMjA3MiwgCisgICAgMTEyMDc3LCAxMTIwODIsIDExMjA4OCwgMTEyMDk0LCAxMTIxMDAsIDExMjEwNSwgMTEyMTExLCAxMTIxMTcsIDExMjEyMywgCisgICAgMTEyMTI4LCAxMTIxMzQsIDExMjE0MCwgMTEyMTQ1LCAxMTIxNTAsIDExMjE1NSwgMTEyMTYwLCAxMTIxNjYsIDExMjE3MiwgCisgICAgMTEyMTc3LCAxMTIxODIsIDExMjE4OCwgMTEyMTkzLCAxMTIxOTksIDExMjIwNSwgMTEyMjExLCAxMTIyMTcsIDExMjIyMywgCisgICAgMTEyMjI4LCAxMTIyMzQsIDExMjI0MCwgMTEyMjQ2LCAxMTIyNTEsIDExMjI1NywgMTEyMjYzLCAxMTIyNjksIDExMjI3NCwgCisgICAgMTEyMjgwLCAxMTIyODYsIDExMjI5MSwgMTEyMjk2LCAxMTIzMDEsIDExMjMwNiwgMTEyMzEyLCAxMTIzMTgsIDExMjMyMywgCisgICAgMTEyMzI4LCAxMTIzMzQsIDExMjMzOSwgMTEyMzQ1LCAxMTIzNTEsIDExMjM1NywgMTEyMzYzLCAxMTIzNjksIDAsIAorICAgIDExMjM3MywgMTEyMzc4LCAwLCAwLCAxMTIzODMsIDAsIDAsIDExMjM4OCwgMTEyMzkzLCAwLCAwLCAxMTIzOTgsIDExMjQwMiwgCisgICAgMTEyNDA2LCAxMTI0MTEsIDAsIDExMjQxNiwgMTEyNDIwLCAxMTI0MjUsIDExMjQyOSwgMTEyNDM0LCAxMTI0MzksIAorICAgIDExMjQ0NCwgMTEyNDQ5LCAxMTI0NTQsIDExMjQ1OCwgMTEyNDYzLCAxMTI0NjgsIDAsIDExMjQ3MywgMCwgMTEyNDc4LCAKKyAgICAxMTI0ODMsIDExMjQ4NywgMTEyNDkyLCAxMTI0OTcsIDExMjUwMSwgMTEyNTA1LCAwLCAxMTI1MDksIDExMjUxNCwgCisgICAgMTEyNTE5LCAxMTI1MjMsIDExMjUyNywgMTEyNTMyLCAxMTI1MzYsIDExMjU0MSwgMTEyNTQ2LCAxMTI1NTEsIDExMjU1NiwgCisgICAgMTEyNTYxLCAxMTI1NjYsIDExMjU3MiwgMTEyNTc4LCAxMTI1ODQsIDExMjU4OSwgMTEyNTk1LCAxMTI2MDEsIDExMjYwNywgCisgICAgMTEyNjEyLCAxMTI2MTgsIDExMjYyNCwgMTEyNjI5LCAxMTI2MzQsIDExMjYzOSwgMTEyNjQ0LCAxMTI2NTAsIDExMjY1NiwgCisgICAgMTEyNjYxLCAxMTI2NjYsIDExMjY3MiwgMTEyNjc3LCAxMTI2ODMsIDExMjY4OSwgMTEyNjk1LCAxMTI3MDEsIDExMjcwNywgCisgICAgMTEyNzEyLCAxMTI3MTgsIDExMjcyNCwgMTEyNzMwLCAxMTI3MzUsIDExMjc0MSwgMTEyNzQ3LCAxMTI3NTMsIDExMjc1OCwgCisgICAgMTEyNzY0LCAxMTI3NzAsIDExMjc3NSwgMTEyNzgwLCAxMTI3ODUsIDExMjc5MCwgMTEyNzk2LCAxMTI4MDIsIDExMjgwNywgCisgICAgMTEyODEyLCAxMTI4MTgsIDExMjgyMywgMTEyODI5LCAxMTI4MzUsIDExMjg0MSwgMTEyODQ3LCAxMTI4NTMsIDExMjg1NywgCisgICAgMCwgMTEyODYyLCAxMTI4NjcsIDExMjg3MSwgMTEyODc2LCAwLCAwLCAxMTI4ODEsIDExMjg4NiwgMTEyODkxLCAxMTI4OTUsIAorICAgIDExMjg5OSwgMTEyOTAzLCAxMTI5MDcsIDExMjkxMiwgMCwgMTEyOTE3LCAxMTI5MjEsIDExMjkyNiwgMTEyOTMwLCAKKyAgICAxMTI5MzUsIDExMjk0MCwgMTEyOTQ1LCAwLCAxMTI5NTAsIDExMjk1NCwgMTEyOTU5LCAxMTI5NjQsIDExMjk2OSwgCisgICAgMTEyOTczLCAxMTI5NzgsIDExMjk4MywgMTEyOTg4LCAxMTI5OTIsIDExMjk5NywgMTEzMDAyLCAxMTMwMDYsIDExMzAxMCwgCisgICAgMTEzMDE0LCAxMTMwMTgsIDExMzAyMywgMTEzMDI4LCAxMTMwMzIsIDExMzAzNiwgMTEzMDQxLCAxMTMwNDUsIDExMzA1MCwgCisgICAgMTEzMDU1LCAxMTMwNjAsIDExMzA2NSwgMTEzMDcwLCAxMTMwNzQsIDAsIDExMzA3OSwgMTEzMDg0LCAxMTMwODgsIAorICAgIDExMzA5MywgMCwgMTEzMDk4LCAxMTMxMDIsIDExMzEwNywgMTEzMTEyLCAxMTMxMTYsIDAsIDExMzEyMCwgMCwgMCwgMCwgCisgICAgMTEzMTI0LCAxMTMxMjgsIDExMzEzMywgMTEzMTM3LCAxMTMxNDIsIDExMzE0NywgMTEzMTUyLCAwLCAxMTMxNTcsIAorICAgIDExMzE2MSwgMTEzMTY2LCAxMTMxNzEsIDExMzE3NiwgMTEzMTgwLCAxMTMxODUsIDExMzE5MCwgMTEzMTk1LCAxMTMxOTksIAorICAgIDExMzIwNCwgMTEzMjA5LCAxMTMyMTMsIDExMzIxNywgMTEzMjIxLCAxMTMyMjUsIDExMzIzMCwgMTEzMjM1LCAxMTMyMzksIAorICAgIDExMzI0MywgMTEzMjQ4LCAxMTMyNTIsIDExMzI1NywgMTEzMjYyLCAxMTMyNjcsIDExMzI3MiwgMTEzMjc3LCAxMTMyODIsIAorICAgIDExMzI4OCwgMTEzMjk0LCAxMTMzMDAsIDExMzMwNSwgMTEzMzExLCAxMTMzMTcsIDExMzMyMywgMTEzMzI4LCAxMTMzMzQsIAorICAgIDExMzM0MCwgMTEzMzQ1LCAxMTMzNTAsIDExMzM1NSwgMTEzMzYwLCAxMTMzNjYsIDExMzM3MiwgMTEzMzc3LCAxMTMzODIsIAorICAgIDExMzM4OCwgMTEzMzkzLCAxMTMzOTksIDExMzQwNSwgMTEzNDExLCAxMTM0MTcsIDExMzQyMywgMTEzNDI4LCAxMTM0MzQsIAorICAgIDExMzQ0MCwgMTEzNDQ2LCAxMTM0NTEsIDExMzQ1NywgMTEzNDYzLCAxMTM0NjksIDExMzQ3NCwgMTEzNDgwLCAxMTM0ODYsIAorICAgIDExMzQ5MSwgMTEzNDk2LCAxMTM1MDEsIDExMzUwNiwgMTEzNTEyLCAxMTM1MTgsIDExMzUyMywgMTEzNTI4LCAxMTM1MzQsIAorICAgIDExMzUzOSwgMTEzNTQ1LCAxMTM1NTEsIDExMzU1NywgMTEzNTYzLCAxMTM1NjksIDExMzU3MywgMTEzNTc4LCAxMTM1ODMsIAorICAgIDExMzU4OCwgMTEzNTkyLCAxMTM1OTcsIDExMzYwMiwgMTEzNjA3LCAxMTM2MTEsIDExMzYxNiwgMTEzNjIxLCAxMTM2MjUsIAorICAgIDExMzYyOSwgMTEzNjMzLCAxMTM2MzcsIDExMzY0MiwgMTEzNjQ3LCAxMTM2NTEsIDExMzY1NSwgMTEzNjYwLCAxMTM2NjQsIAorICAgIDExMzY2OSwgMTEzNjc0LCAxMTM2NzksIDExMzY4NCwgMTEzNjg5LCAxMTM2OTMsIDExMzY5OCwgMTEzNzAzLCAxMTM3MDgsIAorICAgIDExMzcxMiwgMTEzNzE3LCAxMTM3MjIsIDExMzcyNywgMTEzNzMxLCAxMTM3MzYsIDExMzc0MSwgMTEzNzQ1LCAxMTM3NDksIAorICAgIDExMzc1MywgMTEzNzU3LCAxMTM3NjIsIDExMzc2NywgMTEzNzcxLCAxMTM3NzUsIDExMzc4MCwgMTEzNzg0LCAxMTM3ODksIAorICAgIDExMzc5NCwgMTEzNzk5LCAxMTM4MDQsIDExMzgwOSwgMTEzODE0LCAxMTM4MjAsIDExMzgyNiwgMTEzODMyLCAxMTM4MzcsIAorICAgIDExMzg0MywgMTEzODQ5LCAxMTM4NTUsIDExMzg2MCwgMTEzODY2LCAxMTM4NzIsIDExMzg3NywgMTEzODgyLCAxMTM4ODcsIAorICAgIDExMzg5MiwgMTEzODk4LCAxMTM5MDQsIDExMzkwOSwgMTEzOTE0LCAxMTM5MjAsIDExMzkyNSwgMTEzOTMxLCAxMTM5MzcsIAorICAgIDExMzk0MywgMTEzOTQ5LCAxMTM5NTUsIDExMzk2MCwgMTEzOTY2LCAxMTM5NzIsIDExMzk3OCwgMTEzOTgzLCAxMTM5ODksIAorICAgIDExMzk5NSwgMTE0MDAxLCAxMTQwMDYsIDExNDAxMiwgMTE0MDE4LCAxMTQwMjMsIDExNDAyOCwgMTE0MDMzLCAxMTQwMzgsIAorICAgIDExNDA0NCwgMTE0MDUwLCAxMTQwNTUsIDExNDA2MCwgMTE0MDY2LCAxMTQwNzEsIDExNDA3NywgMTE0MDgzLCAxMTQwODksIAorICAgIDExNDA5NSwgMTE0MTAxLCAxMTQxMDYsIDExNDExMiwgMTE0MTE4LCAxMTQxMjQsIDExNDEyOSwgMTE0MTM1LCAxMTQxNDEsIAorICAgIDExNDE0NywgMTE0MTUyLCAxMTQxNTgsIDExNDE2NCwgMTE0MTY5LCAxMTQxNzQsIDExNDE3OSwgMTE0MTg0LCAxMTQxOTAsIAorICAgIDExNDE5NiwgMTE0MjAxLCAxMTQyMDYsIDExNDIxMiwgMTE0MjE3LCAxMTQyMjMsIDExNDIyOSwgMTE0MjM1LCAxMTQyNDEsIAorICAgIDExNDI0NywgMTE0MjUyLCAxMTQyNTgsIDExNDI2NCwgMTE0MjcwLCAxMTQyNzUsIDExNDI4MSwgMTE0Mjg3LCAxMTQyOTMsIAorICAgIDExNDI5OCwgMTE0MzA0LCAxMTQzMTAsIDExNDMxNSwgMTE0MzIwLCAxMTQzMjUsIDExNDMzMCwgMTE0MzM2LCAxMTQzNDIsIAorICAgIDExNDM0NywgMTE0MzUyLCAxMTQzNTgsIDExNDM2MywgMTE0MzY5LCAxMTQzNzUsIDExNDM4MSwgMTE0Mzg3LCAxMTQzOTMsIAorICAgIDExNDM5OSwgMTE0NDA2LCAxMTQ0MTMsIDExNDQyMCwgMTE0NDI2LCAxMTQ0MzMsIDExNDQ0MCwgMTE0NDQ3LCAxMTQ0NTMsIAorICAgIDExNDQ2MCwgMTE0NDY3LCAxMTQ0NzMsIDExNDQ3OSwgMTE0NDg1LCAxMTQ0OTEsIDExNDQ5OCwgMTE0NTA1LCAxMTQ1MTEsIAorICAgIDExNDUxNywgMTE0NTI0LCAxMTQ1MzAsIDExNDUzNywgMTE0NTQ0LCAxMTQ1NTEsIDExNDU1OCwgMTE0NTY1LCAxMTQ1NzEsIAorICAgIDExNDU3OCwgMTE0NTg1LCAxMTQ1OTIsIDExNDU5OCwgMTE0NjA1LCAxMTQ2MTIsIDExNDYxOSwgMTE0NjI1LCAxMTQ2MzIsIAorICAgIDExNDYzOSwgMTE0NjQ1LCAxMTQ2NTEsIDExNDY1NywgMTE0NjYzLCAxMTQ2NzAsIDExNDY3NywgMTE0NjgzLCAxMTQ2ODksIAorICAgIDExNDY5NiwgMTE0NzAyLCAxMTQ3MDksIDExNDcxNiwgMTE0NzIzLCAxMTQ3MzAsIDExNDczNywgMTE0NzQyLCAxMTQ3NDgsIAorICAgIDExNDc1NCwgMTE0NzYwLCAxMTQ3NjUsIDExNDc3MSwgMTE0Nzc3LCAxMTQ3ODMsIDExNDc4OCwgMTE0Nzk0LCAxMTQ4MDAsIAorICAgIDExNDgwNSwgMTE0ODEwLCAxMTQ4MTUsIDExNDgyMCwgMTE0ODI2LCAxMTQ4MzIsIDExNDgzNywgMTE0ODQyLCAxMTQ4NDgsIAorICAgIDExNDg1MywgMTE0ODU5LCAxMTQ4NjUsIDExNDg3MSwgMTE0ODc3LCAxMTQ4ODMsIDExNDg4OCwgMTE0ODk0LCAxMTQ5MDAsIAorICAgIDExNDkwNiwgMTE0OTExLCAxMTQ5MTcsIDExNDkyMywgMTE0OTI5LCAxMTQ5MzQsIDExNDk0MCwgMTE0OTQ2LCAxMTQ5NTEsIAorICAgIDExNDk1NiwgMTE0OTYxLCAxMTQ5NjYsIDExNDk3MiwgMTE0OTc4LCAxMTQ5ODMsIDExNDk4OCwgMTE0OTk0LCAxMTQ5OTksIAorICAgIDExNTAwNSwgMTE1MDExLCAxMTUwMTcsIDExNTAyMywgMTE1MDI5LCAxMTUwMzUsIDAsIDAsIDExNTA0MiwgMTE1MDQ3LCAKKyAgICAxMTUwNTIsIDExNTA1NywgMTE1MDYyLCAxMTUwNjcsIDExNTA3MiwgMTE1MDc3LCAxMTUwODIsIDExNTA4NywgMTE1MDkyLCAKKyAgICAxMTUwOTcsIDExNTEwMiwgMTE1MTA3LCAxMTUxMTIsIDExNTExNywgMTE1MTIyLCAxMTUxMjcsIDExNTEzMywgMTE1MTM4LCAKKyAgICAxMTUxNDMsIDExNTE0OCwgMTE1MTUzLCAxMTUxNTgsIDExNTE2MywgMTE1MTY4LCAxMTUxNzIsIDExNTE3NywgMTE1MTgyLCAKKyAgICAxMTUxODcsIDExNTE5MiwgMTE1MTk3LCAxMTUyMDIsIDExNTIwNywgMTE1MjEyLCAxMTUyMTcsIDExNTIyMiwgMTE1MjI3LCAKKyAgICAxMTUyMzIsIDExNTIzNywgMTE1MjQyLCAxMTUyNDcsIDExNTI1MiwgMTE1MjU3LCAxMTUyNjMsIDExNTI2OCwgMTE1MjczLCAKKyAgICAxMTUyNzgsIDExNTI4MywgMTE1Mjg4LCAxMTUyOTMsIDExNTI5OCwgMTE1MzA0LCAxMTUzMDksIDExNTMxNCwgMTE1MzE5LCAKKyAgICAxMTUzMjQsIDExNTMyOSwgMTE1MzM0LCAxMTUzMzksIDExNTM0NCwgMTE1MzQ5LCAxMTUzNTQsIDExNTM1OSwgMTE1MzY0LCAKKyAgICAxMTUzNjksIDExNTM3NCwgMTE1Mzc5LCAxMTUzODQsIDExNTM4OSwgMTE1Mzk0LCAxMTUzOTksIDExNTQwNCwgMTE1NDA5LCAKKyAgICAxMTU0MTQsIDExNTQxOSwgMTE1NDI1LCAxMTU0MzAsIDExNTQzNSwgMTE1NDQwLCAxMTU0NDUsIDExNTQ1MCwgMTE1NDU1LCAKKyAgICAxMTU0NjAsIDExNTQ2NCwgMTE1NDY5LCAxMTU0NzQsIDExNTQ3OSwgMTE1NDg0LCAxMTU0ODksIDExNTQ5NCwgMTE1NDk5LCAKKyAgICAxMTU1MDQsIDExNTUwOSwgMTE1NTE0LCAxMTU1MTksIDExNTUyNCwgMTE1NTI5LCAxMTU1MzQsIDExNTUzOSwgMTE1NTQ0LCAKKyAgICAxMTU1NDksIDExNTU1NSwgMTE1NTYwLCAxMTU1NjUsIDExNTU3MCwgMTE1NTc1LCAxMTU1ODAsIDExNTU4NSwgMTE1NTkwLCAKKyAgICAxMTU1OTYsIDExNTYwMSwgMTE1NjA2LCAxMTU2MTEsIDExNTYxNiwgMTE1NjIxLCAxMTU2MjYsIDExNTYzMiwgMTE1NjM4LCAKKyAgICAxMTU2NDQsIDExNTY1MCwgMTE1NjU2LCAxMTU2NjIsIDExNTY2OCwgMTE1Njc0LCAxMTU2ODAsIDExNTY4NiwgMTE1NjkyLCAKKyAgICAxMTU2OTgsIDExNTcwNCwgMTE1NzEwLCAxMTU3MTYsIDExNTcyMiwgMTE1NzI4LCAxMTU3MzUsIDExNTc0MSwgMTE1NzQ3LCAKKyAgICAxMTU3NTMsIDExNTc1OSwgMTE1NzY1LCAxMTU3NzEsIDExNTc3NywgMTE1NzgyLCAxMTU3ODgsIDExNTc5NCwgMTE1ODAwLCAKKyAgICAxMTU4MDYsIDExNTgxMiwgMTE1ODE4LCAxMTU4MjQsIDExNTgzMCwgMTE1ODM2LCAxMTU4NDIsIDExNTg0OCwgMTE1ODU0LCAKKyAgICAxMTU4NjAsIDExNTg2NiwgMTE1ODcyLCAxMTU4NzgsIDExNTg4NCwgMTE1ODkxLCAxMTU4OTcsIDExNTkwMywgMTE1OTA5LCAKKyAgICAxMTU5MTUsIDExNTkyMSwgMTE1OTI3LCAxMTU5MzMsIDExNTk0MCwgMTE1OTQ2LCAxMTU5NTIsIDExNTk1OCwgMTE1OTY0LCAKKyAgICAxMTU5NzAsIDExNTk3NiwgMTE1OTgyLCAxMTU5ODgsIDExNTk5NCwgMTE2MDAwLCAxMTYwMDYsIDExNjAxMiwgMTE2MDE4LCAKKyAgICAxMTYwMjQsIDExNjAzMCwgMTE2MDM2LCAxMTYwNDIsIDExNjA0OCwgMTE2MDU0LCAxMTYwNjAsIDExNjA2NiwgMTE2MDcyLCAKKyAgICAxMTYwNzgsIDExNjA4NSwgMTE2MDkxLCAxMTYwOTcsIDExNjEwMywgMTE2MTA5LCAxMTYxMTUsIDExNjEyMSwgMTE2MTI3LCAKKyAgICAxMTYxMzIsIDExNjEzOCwgMTE2MTQ0LCAxMTYxNTAsIDExNjE1NiwgMTE2MTYyLCAxMTYxNjgsIDExNjE3NCwgMTE2MTgwLCAKKyAgICAxMTYxODYsIDExNjE5MiwgMTE2MTk4LCAxMTYyMDQsIDExNjIxMCwgMTE2MjE2LCAxMTYyMjIsIDExNjIyOCwgMTE2MjM0LCAKKyAgICAxMTYyNDEsIDExNjI0NywgMTE2MjUzLCAxMTYyNTksIDExNjI2NSwgMTE2MjcxLCAxMTYyNzcsIDExNjI4MywgMTE2MjkwLCAKKyAgICAxMTYyOTYsIDExNjMwMiwgMTE2MzA4LCAxMTYzMTQsIDExNjMyMCwgMTE2MzI2LCAxMTYzMzMsIDExNjM0MCwgMTE2MzQ3LCAKKyAgICAxMTYzNTQsIDExNjM2MSwgMTE2MzY4LCAxMTYzNzUsIDExNjM4MiwgMTE2Mzg5LCAxMTYzOTYsIDExNjQwMywgMTE2NDEwLCAKKyAgICAxMTY0MTcsIDExNjQyNCwgMTE2NDMxLCAxMTY0MzgsIDExNjQ0NSwgMTE2NDUzLCAxMTY0NjAsIDExNjQ2NywgMTE2NDc0LCAKKyAgICAxMTY0ODEsIDExNjQ4OCwgMTE2NDk1LCAxMTY1MDIsIDExNjUwOCwgMTE2NTE1LCAxMTY1MjIsIDExNjUyOSwgMTE2NTM2LCAKKyAgICAxMTY1NDMsIDExNjU1MCwgMTE2NTU3LCAxMTY1NjQsIDExNjU3MSwgMTE2NTc4LCAxMTY1ODUsIDExNjU5MiwgMTE2NTk5LCAKKyAgICAxMTY2MDYsIDExNjYxMywgMTE2NjIwLCAxMTY2MjcsIDExNjYzNSwgMTE2NjQyLCAxMTY2NDksIDExNjY1NiwgMTE2NjYzLCAKKyAgICAxMTY2NzAsIDExNjY3NywgMTE2Njg0LCAxMTY2OTIsIDExNjY5OSwgMTE2NzA2LCAxMTY3MTMsIDExNjcyMCwgMTE2NzI3LCAKKyAgICAxMTY3MzQsIDExNjczOSwgMCwgMCwgMTE2NzQ0LCAxMTY3NDksIDExNjc1MywgMTE2NzU3LCAxMTY3NjEsIDExNjc2NSwgCisgICAgMTE2NzY5LCAxMTY3NzMsIDExNjc3NywgMTE2NzgxLCAxMTY3ODUsIDExNjc5MCwgMTE2Nzk0LCAxMTY3OTgsIDExNjgwMiwgCisgICAgMTE2ODA2LCAxMTY4MTAsIDExNjgxNCwgMTE2ODE4LCAxMTY4MjIsIDExNjgyNiwgMTE2ODMxLCAxMTY4MzUsIDExNjgzOSwgCisgICAgMTE2ODQzLCAxMTY4NDcsIDExNjg1MSwgMTE2ODU1LCAxMTY4NTksIDExNjg2MywgMTE2ODY3LCAxMTY4NzMsIDExNjg3OCwgCisgICAgMTE2ODgzLCAxMTY4ODgsIDExNjg5MywgMTE2ODk4LCAxMTY5MDMsIDExNjkwOCwgMTE2OTEzLCAxMTY5MTgsIDExNjkyNCwgCisgICAgMTE2OTI5LCAxMTY5MzQsIDExNjkzOSwgMTE2OTQ0LCAxMTY5NDksIDExNjk1NCwgMTE2OTU5LCAxMTY5NjQsIDExNjk2OSwgCisgICAgMTE2OTc2LCAxMTY5ODMsIDExNjk5MCwgMTE2OTk3LCAxMTcwMDQsIDExNzAxMSwgMTE3MDE3LCAxMTcwMjQsIDExNzAzMSwgCisgICAgMTE3MDM4LCAxMTcwNDYsIDExNzA1NCwgMTE3MDYyLCAxMTcwNzAsIDExNzA3OCwgMTE3MDg2LCAxMTcwOTMsIDExNzEwMCwgCisgICAgMTE3MTA3LCAxMTcxMTUsIDExNzEyMywgMTE3MTMxLCAxMTcxMzksIDExNzE0NywgMTE3MTU1LCAxMTcxNjIsIDExNzE2OSwgCisgICAgMTE3MTc2LCAxMTcxODQsIDExNzE5MiwgMTE3MjAwLCAxMTcyMDgsIDExNzIxNiwgMTE3MjI0LCAxMTcyMjksIDExNzIzNCwgCisgICAgMTE3MjM5LCAxMTcyNDQsIDExNzI0OSwgMTE3MjU0LCAxMTcyNTksIDExNzI2NCwgMTE3MjY5LCAwLCAwLCAwLCAwLCAKKyAgICAxMTcyNzQsIDExNzI3OSwgMTE3MjgzLCAxMTcyODcsIDExNzI5MSwgMTE3Mjk1LCAxMTcyOTksIDExNzMwMywgMTE3MzA3LCAKKyAgICAxMTczMTEsIDExNzMxNSwgMTE3MzE5LCAxMTczMjMsIDExNzMyNywgMTE3MzMxLCAxMTczMzUsIDExNzMzOSwgMTE3MzQzLCAKKyAgICAxMTczNDcsIDExNzM1MSwgMTE3MzU1LCAxMTczNTksIDExNzM2MywgMTE3MzY3LCAxMTczNzEsIDExNzM3NSwgMTE3Mzc5LCAKKyAgICAxMTczODMsIDExNzM4NywgMTE3MzkxLCAxMTczOTUsIDExNzM5OSwgMTE3NDAzLCAxMTc0MDcsIDExNzQxMSwgMTE3NDE1LCAKKyAgICAxMTc0MTksIDExNzQyMywgMTE3NDI3LCAxMTc0MzEsIDExNzQzNSwgMTE3NDM5LCAxMTc0NDMsIDExNzQ0NywgMTE3NDUxLCAKKyAgICAxMTc0NTUsIDExNzQ1OSwgMTE3NDYzLCAxMTc0NjcsIDExNzQ3MSwgMTE3NDc1LCAxMTc0ODAsIDExNzQ4NCwgMTE3NDg4LCAKKyAgICAxMTc0OTIsIDExNzQ5NiwgMTE3NTAwLCAxMTc1MDQsIDExNzUwOCwgMTE3NTEyLCAxMTc1MTYsIDExNzUyMCwgMTE3NTI0LCAKKyAgICAxMTc1MjgsIDExNzUzMiwgMTE3NTM2LCAxMTc1NDAsIDExNzU0NCwgMTE3NTQ4LCAxMTc1NTIsIDExNzU1NiwgMTE3NTYwLCAKKyAgICAxMTc1NjQsIDExNzU2OCwgMTE3NTcyLCAxMTc1NzYsIDExNzU4MCwgMTE3NTg0LCAxMTc1ODgsIDExNzU5MiwgMTE3NTk2LCAKKyAgICAxMTc2MDAsIDExNzYwNCwgMTE3NjA4LCAxMTc2MTIsIDExNzYxNiwgMTE3NjIwLCAxMTc2MjQsIDExNzYyOCwgMTE3NjMyLCAKKyAgICAxMTc2MzYsIDExNzY0MCwgMTE3NjQ0LCAxMTc2NDgsIDExNzY1MiwgMTE3NjU2LCAxMTc2NjAsIDExNzY2NCwgMTE3NjY4LCAKKyAgICAxMTc2NzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNzY3NiwgMTE3NjgyLCAxMTc2OTEsIAorICAgIDExNzY5OSwgMTE3NzA3LCAxMTc3MTYsIDExNzcyNSwgMTE3NzM0LCAxMTc3NDMsIDExNzc1MiwgMTE3NzYxLCAxMTc3NzAsIAorICAgIDExNzc3OSwgMTE3Nzg4LCAxMTc3OTcsIDAsIDAsIDExNzgwNiwgMTE3ODE1LCAxMTc4MjMsIDExNzgzMSwgMTE3ODQwLCAKKyAgICAxMTc4NDksIDExNzg1OCwgMTE3ODY3LCAxMTc4NzYsIDExNzg4NSwgMTE3ODk0LCAxMTc5MDMsIDExNzkxMiwgMTE3OTIxLCAKKyAgICAwLCAwLCAxMTc5MzAsIDExNzkzOSwgMTE3OTQ3LCAxMTc5NTUsIDExNzk2NCwgMTE3OTczLCAxMTc5ODIsIDExNzk5MSwgCisgICAgMTE4MDAwLCAxMTgwMDksIDExODAxOCwgMTE4MDI3LCAxMTgwMzYsIDExODA0NSwgMTE4MDU0LCAwLCAxMTgwNjEsIAorICAgIDExODA3MCwgMTE4MDc4LCAxMTgwODYsIDExODA5NSwgMTE4MTA0LCAxMTgxMTMsIDExODEyMiwgMTE4MTMxLCAxMTgxNDAsIAorICAgIDExODE0OSwgMTE4MTU4LCAxMTgxNjcsIDExODE3NiwgMTE4MTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTgxOTIsIAorICAgIDExODE5OSwgMTE4MjA0LCAxMTgyMDgsIDExODIxMiwgMTE4MjE2LCAxMTgyMjEsIDExODIyNiwgMTE4MjMxLCAxMTgyMzYsIAorICAgIDExODI0MSwgMCwgMCwgMCwgMCwgMCwgMTE4MjQ2LCAxMTgyNTEsIDExODI1NywgMTE4MjYzLCAxMTgyNjksIDExODI3NCwgCisgICAgMTE4MjgwLCAxMTgyODYsIDExODI5MiwgMTE4Mjk3LCAxMTgzMDMsIDExODMwOSwgMTE4MzE0LCAxMTgzMTksIDExODMyNCwgCisgICAgMTE4MzI5LCAxMTgzMzUsIDExODM0MSwgMTE4MzQ2LCAxMTgzNTEsIDExODM1NywgMTE4MzYyLCAxMTgzNjgsIDExODM3NCwgCisgICAgMTE4MzgwLCAxMTgzODYsIDExODM5MiwgMTE4NDAyLCAxMTg0MDksIDExODQxNSwgMTE4NDE4LCAwLCAxMTg0MjEsIAorICAgIDExODQyNiwgMTE4NDMyLCAxMTg0MzgsIDExODQ0NCwgMTE4NDQ5LCAxMTg0NTUsIDExODQ2MSwgMTE4NDY3LCAxMTg0NzIsIAorICAgIDExODQ3OCwgMTE4NDg0LCAxMTg0ODksIDExODQ5NCwgMTE4NDk5LCAxMTg1MDQsIDExODUxMCwgMTE4NTE2LCAxMTg1MjEsIAorICAgIDExODUyNiwgMTE4NTMyLCAxMTg1MzcsIDExODU0MywgMTE4NTQ5LCAxMTg1NTUsIDExODU2MSwgMTE4NTY3LCAxMTg1NzAsIAorICAgIDExODU3MywgMTE4NTc2LCAxMTg1NzksIDExODU4MiwgMTE4NTg1LCAxMTg1OTEsIDExODU5OCwgMTE4NjA1LCAxMTg2MTIsIAorICAgIDExODYxOCwgMTE4NjI1LCAxMTg2MzIsIDExODYzOSwgMTE4NjQ1LCAxMTg2NTIsIDExODY1OSwgMTE4NjY1LCAxMTg2NzEsIAorICAgIDExODY3NywgMTE4NjgzLCAxMTg2OTAsIDExODY5NywgMTE4NzAzLCAxMTg3MDksIDExODcxNiwgMTE4NzIyLCAxMTg3MjksIAorICAgIDExODczNiwgMTE4NzQzLCAxMTg3NTAsIDAsIDAsIDAsIDAsIDAsIDAsIDExODc1NywgMTE4NzYzLCAxMTg3NzAsIDExODc3NywgCisgICAgMTE4Nzg0LCAxMTg3OTAsIDExODc5NywgMTE4ODA0LCAxMTg4MTEsIDExODgxNywgMTE4ODI0LCAxMTg4MzEsIDExODgzNywgCisgICAgMTE4ODQzLCAxMTg4NDksIDExODg1NSwgMTE4ODYyLCAxMTg4NjksIDExODg3NSwgMTE4ODgxLCAxMTg4ODgsIDExODg5NCwgCisgICAgMTE4OTAxLCAxMTg5MDgsIDExODkxNSwgMTE4OTIyLCAxMTg5MjksIDExODkzOCwgMTE4OTQyLCAxMTg5NDUsIDExODk0OSwgCisgICAgMTE4OTUzLCAxMTg5NTcsIDExODk2MCwgMTE4OTYzLCAxMTg5NjYsIDExODk2OSwgMTE4OTcyLCAxMTg5NzUsIDExODk3OCwgCisgICAgMTE4OTgxLCAxMTg5ODQsIDExODk5MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4OTkzLCAxMTkwMDAsIDExOTAwOCwgMTE5MDE2LCAxMTkwMjQsIAorICAgIDExOTAzMSwgMTE5MDM5LCAxMTkwNDcsIDExOTA1NSwgMTE5MDYyLCAxMTkwNzAsIDExOTA3OCwgMTE5MDg1LCAxMTkwOTIsIAorICAgIDExOTA5OSwgMTE5MTA2LCAxMTkxMTQsIDExOTEyMiwgMTE5MTI5LCAxMTkxMzYsIDExOTE0NCwgMTE5MTUxLCAxMTkxNTksIAorICAgIDExOTE2NywgMTE5MTc1LCAxMTkxODMsIDExOTE5MSwgMTE5MTk1LCAxMTkxOTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDExOTIwMywgMTE5MjA5LCAxMTkyMTUsIDExOTIyMSwgMTE5MjI1LCAxMTkyMzEsIDExOTIzNywgCisgICAgMTE5MjQzLCAxMTkyNDksIDExOTI1NSwgMTE5MjYxLCAxMTkyNjcsIDExOTI3MywgMTE5Mjc5LCAxMTkyODUsIDExOTI5MSwgCisgICAgMTE5Mjk3LCAxMTkzMDMsIDExOTMwOSwgMTE5MzE1LCAxMTkzMjEsIDExOTMyNywgMTE5MzMzLCAxMTkzMzksIDExOTM0NSwgCisgICAgMTE5MzUxLCAxMTkzNTcsIDExOTM2MywgMTE5MzY5LCAxMTkzNzUsIDExOTM4MSwgMTE5Mzg3LCAxMTkzOTMsIDExOTM5OSwgCisgICAgMTE5NDA1LCAxMTk0MTEsIDExOTQxNywgMTE5NDIzLCAxMTk0MjksIDExOTQzNSwgMTE5NDQxLCAxMTk0NDcsIDExOTQ1MywgCisgICAgMCwgMCwgMCwgMCwgMCwgMTE5NDU5LCAxMTk0NzAsIDExOTQ4MSwgMTE5NDkyLCAxMTk1MDMsIDExOTUxNCwgMTE5NTI1LCAKKyAgICAxMTk1MzYsIDExOTU0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE5NTU4LCAxMTk1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOTU2NiwgMTE5NTY4LCAxMTk1NzAsIAorICAgIDExOTU3NCwgMTE5NTc5LCAxMTk1ODQsIDExOTU4NiwgMTE5NTkyLCAxMTk1OTcsIDExOTU5OSwgMTE5NjA1LCAxMTk2MDksIAorICAgIDExOTYxMSwgMTE5NjE1LCAxMTk2MjEsIDExOTYyNywgMTE5NjMzLCAxMTk2MzgsIDExOTY0MiwgMTE5NjQ5LCAxMTk2NTYsIAorICAgIDExOTY2MywgMTE5NjY4LCAxMTk2NzUsIDExOTY4MiwgMTE5Njg5LCAxMTk2OTMsIDExOTY5OSwgMTE5NzA4LCAxMTk3MTcsIAorICAgIDExOTcyNCwgMTE5NzI5LCAxMTk3MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExOTczNywgMTE5NzM5LCAxMTk3NDEsIDExOTc0NSwgMTE5NzQ5LCAxMTk3NTMsIDAsIDExOTc1NSwgMTE5NzU3LCAKKyAgICAxMTk3NjEsIDExOTc2MywgMTE5NzY1LCAxMTk3NjcsIDExOTc2OSwgMTE5Nzc0LCAxMTk3NzksIDExOTc4MSwgMTE5Nzg3LCAKKyAgICAxMTk3OTEsIDExOTc5NSwgMTE5ODAzLCAxMTk4MDUsIDExOTgwNywgMTE5ODA5LCAxMTk4MTEsIDExOTgxMywgMTE5ODE1LCAKKyAgICAxMTk4MTcsIDExOTgxOSwgMTE5ODIxLCAxMTk4MjMsIDExOTgyNywgMTE5ODMxLCAxMTk4MzMsIDExOTgzNSwgMTE5ODM3LCAKKyAgICAxMTk4MzksIDExOTg0MSwgMTE5ODQ2LCAxMTk4NTIsIDExOTg1NiwgMTE5ODYwLCAxMTk4NjQsIDExOTg2OCwgMTE5ODczLCAKKyAgICAxMTk4NzcsIDExOTg3OSwgMTE5ODgxLCAxMTk4ODUsIDExOTg5MSwgMTE5ODkzLCAxMTk4OTUsIDExOTg5NywgMTE5OTAxLCAKKyAgICAxMTk5MTAsIDExOTkxNiwgMTE5OTIwLCAxMTk5MjQsIDExOTkyNiwgMTE5OTI4LCAxMTk5MzEsIDExOTkzMywgMTE5OTM1LCAKKyAgICAxMTk5MzcsIDExOTk0MSwgMTE5OTQzLCAxMTk5NDcsIDExOTk1MiwgMTE5OTU0LCAxMTk5NTksIDExOTk2NSwgMTE5OTcyLCAKKyAgICAxMTk5NzYsIDExOTk4MCwgMTE5OTg0LCAxMTk5ODgsIDExOTk5NCwgMCwgMCwgMCwgMTE5OTk4LCAxMjAwMDAsIDEyMDAwNCwgCisgICAgMTIwMDA4LCAxMjAwMTAsIDEyMDAxNCwgMTIwMDE4LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI2LCAxMjAwMzAsIDEyMDAzNCwgCisgICAgMTIwMDM4LCAxMjAwNDIsIDEyMDA0NiwgMTIwMDUwLCAxMjAwNTQsIDEyMDA1OCwgMTIwMDY0LCAxMjAwNjgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDA3MiwgMTIwMDc2LCAxMjAwODAsIDEyMDA4NCwgMTIwMDkxLCAKKyAgICAxMjAwOTMsIDEyMDA5NywgMTIwMDk5LCAxMjAxMDEsIDEyMDEwNSwgMTIwMTA5LCAxMjAxMTMsIDEyMDExNSwgMTIwMTE5LCAKKyAgICAxMjAxMjMsIDEyMDEyNywgMTIwMTMxLCAxMjAxMzUsIDEyMDEzNywgMTIwMTQxLCAxMjAxNDMsIDEyMDE0OSwgMTIwMTUyLCAKKyAgICAxMjAxNTcsIDEyMDE1OSwgMTIwMTYxLCAxMjAxNjQsIDEyMDE2NiwgMTIwMTY4LCAxMjAxNzEsIDEyMDE3OCwgMTIwMTg1LCAKKyAgICAxMjAxOTIsIDEyMDE5NywgMTIwMjAxLCAxMjAyMDMsIDEyMDIwNSwgMCwgMTIwMjA3LCAxMjAyMDksIDEyMDIxMywgCisgICAgMTIwMjE3LCAxMjAyMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDEyMDIyMywgMTIwMjI3LCAxMjAyMzIsIDEyMDIzNiwgMTIwMjQyLCAxMjAyNDgsIDEyMDI1MCwgMTIwMjUyLCAKKyAgICAxMjAyNTgsIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MCwgMTIwMjc0LCAxMjAyNzYsIDEyMDI4MCwgMTIwMjg0LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjAyODgsIDEyMDI5MCwgMTIwMjkyLCAKKyAgICAxMjAyOTQsIDEyMDI5OCwgMTIwMzAwLCAxMjAzMDIsIDEyMDMwNCwgMTIwMzA2LCAxMjAzMDgsIDEyMDMxMCwgMTIwMzEyLCAKKyAgICAxMjAzMTQsIDEyMDMxNiwgMTIwMzE4LCAxMjAzMjAsIDEyMDMyMiwgMTIwMzI0LCAxMjAzMjYsIDEyMDMyOCwgMTIwMzMwLCAKKyAgICAxMjAzMzIsIDEyMDMzNCwgMTIwMzM2LCAxMjAzMzgsIDEyMDM0MCwgMTIwMzQyLCAxMjAzNDYsIDEyMDM0OCwgMTIwMzUwLCAKKyAgICAxMjAzNTIsIDEyMDM1NiwgMTIwMzU4LCAxMjAzNjIsIDEyMDM2NCwgMTIwMzY2LCAxMjAzNzAsIDEyMDM3NCwgMTIwMzgwLCAKKyAgICAxMjAzODIsIDEyMDM4NCwgMTIwMzg2LCAxMjAzODgsIDEyMDM5MiwgMTIwMzk2LCAxMjAzOTgsIDEyMDQwMiwgMTIwNDA2LCAKKyAgICAxMjA0MTAsIDEyMDQxNCwgMTIwNDE4LCAxMjA0MjIsIDEyMDQyNiwgMTIwNDMwLCAxMjA0MzQsIDEyMDQzOCwgMTIwNDQyLCAKKyAgICAxMjA0NDYsIDEyMDQ1MCwgMTIwNDU0LCAxMjA0NTgsIDEyMDQ2MiwgMTIwNDY2LCAwLCAxMjA0NzAsIDAsIDEyMDQ3MiwgCisgICAgMTIwNDc0LCAxMjA0NzYsIDEyMDQ3OCwgMTIwNDgwLCAxMjA0ODgsIDEyMDQ5NiwgMTIwNTA0LCAxMjA1MTIsIDEyMDUxNywgCisgICAgMTIwNTIyLCAxMjA1MjcsIDEyMDUzMSwgMTIwNTM1LCAxMjA1NDAsIDEyMDU0NSwgMTIwNTQ3LCAxMjA1NTEsIDEyMDU1MywgCisgICAgMTIwNTU1LCAxMjA1NTcsIDEyMDU1OSwgMTIwNTYxLCAxMjA1NjMsIDEyMDU2NSwgMTIwNTY5LCAxMjA1NzEsIDEyMDU3MywgCisgICAgMTIwNTc1LCAxMjA1NzksIDEyMDU4MywgMTIwNTg3LCAxMjA1OTEsIDEyMDU5NSwgMTIwNTk3LCAxMjA2MDMsIDEyMDYwOSwgCisgICAgMTIwNjExLCAxMjA2MTMsIDEyMDYxNSwgMTIwNjE3LCAxMjA2MTksIDEyMDYyOCwgMTIwNjM1LCAxMjA2NDIsIDEyMDY0NiwgCisgICAgMTIwNjUzLCAxMjA2NTgsIDEyMDY2NSwgMTIwNjc0LCAxMjA2NzksIDEyMDY4MywgMTIwNjg3LCAxMjA2ODksIDEyMDY5MywgCisgICAgMTIwNjk1LCAxMjA2OTksIDEyMDcwMywgMTIwNzA1LCAxMjA3MDksIDEyMDcxMywgMTIwNzE3LCAxMjA3MTksIDEyMDcyMSwgCisgICAgMTIwNzI3LCAxMjA3MjksIDEyMDczMSwgMTIwNzMzLCAxMjA3MzcsIDEyMDc0MSwgMTIwNzQzLCAxMjA3NDcsIDEyMDc0OSwgCisgICAgMTIwNzUxLCAxMjA3NTQsIDEyMDc1OCwgMTIwNzYwLCAxMjA3NjQsIDEyMDc2NiwgMTIwNzY4LCAxMjA3NzMsIDEyMDc3NSwgCisgICAgMTIwNzc5LCAxMjA3ODMsIDEyMDc4NiwgMTIwNzkwLCAxMjA3OTQsIDEyMDc5OCwgMTIwODAyLCAxMjA4MDYsIDEyMDgxMCwgCisgICAgMTIwODE0LCAxMjA4MTksIDEyMDgyMywgMTIwODI3LCAxMjA4MzYsIDEyMDg0MSwgMTIwODQ0LCAxMjA4NDYsIDEyMDg0OSwgCisgICAgMTIwODUyLCAxMjA4NTcsIDEyMDg1OSwgMTIwODYyLCAxMjA4NjcsIDEyMDg3MSwgMTIwODc0LCAxMjA4NzgsIDEyMDg4MiwgCisgICAgMTIwODg1LCAxMjA4OTAsIDEyMDg5NCwgMTIwODk4LCAxMjA5MDIsIDEyMDkwNiwgMTIwOTEyLCAxMjA5MTgsIDEyMDkyNCwgCisgICAgMTIwOTMwLCAxMjA5MzUsIDEyMDk0NiwgMTIwOTQ4LCAxMjA5NTIsIDEyMDk1NCwgMTIwOTU2LCAxMjA5NjAsIDEyMDk2NCwgCisgICAgMTIwOTY2LCAxMjA5NzAsIDEyMDk3NiwgMTIwOTgxLCAxMjA5ODcsIDEyMDk4OSwgMTIwOTkzLCAxMjA5OTcsIDEyMTAwNCwgCisgICAgMTIxMDExLCAxMjEwMTUsIDEyMTAxNywgMTIxMDE5LCAxMjEwMjMsIDEyMTAyNSwgMTIxMDI5LCAxMjEwMzMsIDEyMTAzNywgCisgICAgMTIxMDM5LCAxMjEwNDEsIDEyMTA0OCwgMTIxMDUyLCAxMjEwNTYsIDEyMTA2MCwgMTIxMDY0LCAxMjEwNjgsIDEyMTA3MCwgCisgICAgMTIxMDc0LCAxMjEwNzYsIDEyMTA3OCwgMTIxMDgyLCAxMjEwODQsIDEyMTA4OCwgMTIxMDkyLCAxMjEwOTgsIDEyMTEwMiwgCisgICAgMTIxMTA2LCAxMjExMTAsIDEyMTExMiwgMTIxMTE1LCAxMjExMTksIDEyMTEyNiwgMTIxMTM1LCAxMjExNDQsIDEyMTE1MywgCisgICAgMTIxMTYyLCAxMjExNjQsIDEyMTE2OCwgMTIxMTcwLCAxMjExNzQsIDEyMTE4NSwgMTIxMTg5LCAxMjExOTUsIDEyMTIwMSwgCisgICAgMTIxMjA2LCAwLCAxMjEyMDgsIDEyMTIxMiwgMTIxMjE0LCAxMjEyMTYsIDAsIDAsIDAsIDEyMTIxOCwgMTIxMjIzLCAKKyAgICAxMjEyMzQsIDEyMTI1MCwgMTIxMjYzLCAxMjEyNzYsIDEyMTI4MCwgMTIxMjg0LCAxMjEyOTAsIDEyMTI5MiwgMTIxMzAwLCAKKyAgICAxMjEzMDgsIDEyMTMxMCwgMTIxMzE0LCAxMjEzMjAsIDEyMTMyNiwgMTIxMzMzLCAxMjEzNDAsIDEyMTM0MiwgMTIxMzQ0LCAKKyAgICAxMjEzNDgsIDEyMTM1MCwgMTIxMzU2LCAxMjEzNTgsIDEyMTM2MSwgMTIxMzY1LCAxMjEzNzEsIDEyMTM3NywgMTIxMzg4LCAKKyAgICAxMjEzOTQsIDEyMTQwMSwgMTIxNDA5LCAxMjE0MTMsIDEyMTQyMSwgMTIxNDI5LCAxMjE0MzUsIDEyMTQ0MSwgMTIxNDQ4LCAKKyAgICAxMjE0NTAsIDEyMTQ1NCwgMTIxNDU2LCAxMjE0NTgsIDEyMTQ2MywgMTIxNDY1LCAxMjE0NjcsIDEyMTQ2OSwgMTIxNDcxLCAKKyAgICAxMjE0NzUsIDEyMTQ4NiwgMTIxNDkyLCAxMjE0OTYsIDEyMTUwMCwgMTIxNTA0LCAxMjE1MTAsIDEyMTUxNiwgMTIxNTIyLCAKKyAgICAxMjE1MjgsIDEyMTUzMywgMTIxNTM4LCAxMjE1NDQsIDEyMTU1MCwgMTIxNTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE1NjQsIDEyMTU3MSwgMTIxNTc4LCAxMjE1ODUsIDEyMTU5MywgCisgICAgMTIxNjAxLCAxMjE2MDksIDEyMTYxNywgMTIxNjI1LCAxMjE2MzMsIDEyMTY0MSwgMTIxNjQ5LCAxMjE2NTcsIDEyMTY2MywgCisgICAgMTIxNjY5LCAxMjE2NzUsIDEyMTY4MSwgMTIxNjg3LCAxMjE2OTMsIDEyMTY5OSwgMTIxNzA1LCAxMjE3MTEsIDEyMTcxNywgCisgICAgMTIxNzIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMjE3MjksIDEyMTczMywgMTIxNzM3LCAxMjE3NDIsIDEyMTc0NywgMCwgMTIxNzQ5LCAxMjE3NTgsIAorICAgIDEyMTc2NiwgMTIxNzc1LCAxMjE3ODksIDEyMTgwMywgMTIxODE3LCAxMjE4MjQsIDEyMTgzMSwgMTIxODM1LCAxMjE4NDQsIAorICAgIDEyMTg1MiwgMTIxODU2LCAxMjE4NjUsIDEyMTg3MiwgMTIxODc2LCAwLCAxMjE4ODAsIDEyMTg4NCwgMTIxODkxLCAwLCAKKyAgICAxMjE4OTUsIDAsIDEyMTg5OSwgMCwgMTIxOTA2LCAwLCAxMjE5MTUsIDEyMTkyNywgMTIxOTM5LCAwLCAxMjE5NDMsIAorICAgIDEyMTk0NywgMTIxOTUxLCAxMjE5NTUsIDEyMTk1OSwgMTIxOTY3LCAwLCAwLCAxMjE5NzUsIDEyMTk3OSwgMTIxOTgzLCAKKyAgICAxMjE5ODcsIDAsIDEyMTk5MSwgMCwgMCwgMTIxOTk3LCAxMjIwMDksIDEyMjAxNywgMTIyMDIxLCAwLCAxMjIwMjUsIAorICAgIDEyMjAyOSwgMTIyMDM1LCAxMjIwNDIsIDEyMjA1MywgMTIyMDYzLCAxMjIwNzQsIDEyMjA4NSwgMTIyMDk0LCAxMjIxMDUsIAorICAgIDEyMjExMSwgMTIyMTE3LCAwLCAwLCAwLCAwLCAxMjIxMjMsIDEyMjEzMiwgMTIyMTM5LCAxMjIxNDUsIDEyMjE0OSwgCisgICAgMTIyMTUzLCAxMjIxNTcsIDEyMjE2NiwgMTIyMTc4LCAxMjIxODIsIDEyMjE4OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyMTk2LCAxMjIxOTgsIDEyMjIwMCwgCisgICAgMTIyMjA0LCAxMjIyMDgsIDEyMjIxMiwgMTIyMjIxLCAxMjIyMjMsIDEyMjIyNSwgMTIyMjI4LCAxMjIyMzAsIDEyMjIzMiwgCisgICAgMTIyMjM2LCAxMjIyMzgsIDEyMjI0MiwgMTIyMjQ0LCAxMjIyNDgsIDEyMjI1MCwgMTIyMjUyLCAxMjIyNTYsIDEyMjI2MCwgCisgICAgMTIyMjY2LCAxMjIyNjgsIDEyMjI3MiwgMTIyMjc0LCAxMjIyNzgsIDEyMjI4MiwgMTIyMjg2LCAxMjIyOTAsIDEyMjI5MiwgCisgICAgMTIyMjk0LCAxMjIyOTgsIDEyMjMwMiwgMTIyMzA2LCAxMjIzMTAsIDEyMjMxMiwgMTIyMzE0LCAxMjIzMTYsIDEyMjMyMSwgCisgICAgMTIyMzI2LCAxMjIzMjksIDEyMjMzNywgMTIyMzQ1LCAxMjIzNDcsIDEyMjM1MiwgMTIyMzU1LCAxMjIzNjAsIDEyMjM3MSwgCisgICAgMTIyMzc4LCAxMjIzODMsIDEyMjM4OCwgMTIyMzkwLCAxMjIzOTQsIDEyMjM5NiwgMTIyNDAwLCAxMjI0MDIsIDEyMjQwNiwgCisgICAgMTIyNDEwLCAxMjI0MTMsIDEyMjQxNiwgMTIyNDE4LCAxMjI0MjEsIDEyMjQyMywgMTIyNDI3LCAxMjI0MjksIDEyMjQzMSwgCisgICAgMTIyNDMzLCAxMjI0MzcsIDEyMjQzOSwgMTIyNDQzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI0NDYsIAorICAgIDEyMjQ1MSwgMTIyNDU2LCAxMjI0NjEsIDEyMjQ2NiwgMTIyNDcxLCAxMjI0NzYsIDEyMjQ4MywgMTIyNDkwLCAxMjI0OTcsIAorICAgIDEyMjUwNCwgMTIyNTA5LCAxMjI1MTQsIDEyMjUxOSwgMTIyNTI0LCAxMjI1MzEsIDEyMjUzNywgMTIyNTQ0LCAxMjI1NTEsIAorICAgIDEyMjU1OCwgMTIyNTYzLCAxMjI1NjgsIDEyMjU3MywgMTIyNTc4LCAxMjI1ODMsIDEyMjU5MCwgMTIyNTk3LCAxMjI2MDIsIAorICAgIDEyMjYwNywgMTIyNjE0LCAxMjI2MjEsIDEyMjYyOSwgMTIyNjM3LCAxMjI2NDQsIDEyMjY1MSwgMTIyNjU5LCAxMjI2NjcsIAorICAgIDEyMjY3NSwgMTIyNjgyLCAxMjI2OTIsIDEyMjcwMywgMTIyNzA4LCAxMjI3MTUsIDEyMjcyMiwgMTIyNzI5LCAxMjI3MzcsIAorICAgIDEyMjc0NSwgMTIyNzU2LCAxMjI3NjQsIDEyMjc3MiwgMTIyNzgwLCAxMjI3ODUsIDEyMjc5MCwgMTIyNzk1LCAxMjI4MDAsIAorICAgIDEyMjgwNSwgMTIyODEwLCAxMjI4MTUsIDEyMjgyMCwgMTIyODI1LCAxMjI4MzAsIDEyMjgzNSwgMTIyODQwLCAxMjI4NDcsIAorICAgIDEyMjg1MiwgMTIyODU3LCAxMjI4NjQsIDEyMjg2OSwgMTIyODc0LCAxMjI4NzksIDEyMjg4NCwgMTIyODg5LCAxMjI4OTQsIAorICAgIDEyMjg5OSwgMTIyOTA0LCAxMjI5MDksIDEyMjkxNCwgMTIyOTE5LCAxMjI5MjQsIDEyMjkzMSwgMTIyOTM5LCAxMjI5NDQsIAorICAgIDEyMjk0OSwgMTIyOTU2LCAxMjI5NjEsIDEyMjk2NiwgMTIyOTcxLCAxMjI5NzgsIDEyMjk4MywgMTIyOTkwLCAxMjI5OTUsIAorICAgIDEyMzAwMiwgMTIzMDA3LCAxMjMwMTYsIDEyMzAyNSwgMTIzMDMwLCAxMjMwMzUsIDEyMzA0MCwgMTIzMDQ1LCAxMjMwNTAsIAorICAgIDEyMzA1NSwgMTIzMDYwLCAxMjMwNjUsIDEyMzA3MCwgMTIzMDc1LCAxMjMwODAsIDEyMzA4NSwgMTIzMDkwLCAxMjMwOTgsIAorICAgIDEyMzEwNiwgMTIzMTExLCAxMjMxMTYsIDEyMzEyMSwgMTIzMTI2LCAxMjMxMzEsIDEyMzEzNywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMTQzLCAxMjMxNDcsIDEyMzE1MSwgMTIzMTU1LCAxMjMxNTksIDEyMzE2MywgMTIzMTY3LCAKKyAgICAxMjMxNzEsIDEyMzE3NSwgMTIzMTc5LCAxMjMxODMsIDEyMzE4NywgMTIzMTkxLCAxMjMxOTUsIDEyMzE5OSwgMTIzMjAzLCAKKyAgICAxMjMyMDcsIDEyMzIxMSwgMTIzMjE1LCAxMjMyMTksIDEyMzIyMywgMTIzMjI3LCAxMjMyMzEsIDEyMzIzNSwgMTIzMjM5LCAKKyAgICAxMjMyNDMsIDEyMzI0NywgMTIzMjUxLCAxMjMyNTUsIDEyMzI1OSwgMTIzMjYzLCAxMjMyNjcsIDEyMzI3MSwgMTIzMjc1LCAKKyAgICAxMjMyNzksIDEyMzI4MywgMTIzMjg3LCAxMjMyOTEsIDEyMzI5NSwgMTIzMjk5LCAxMjMzMDMsIDEyMzMwNywgMTIzMzExLCAKKyAgICAxMjMzMTUsIDEyMzMxOSwgMTIzMzIzLCAxMjMzMjcsIDEyMzMzMSwgMTIzMzM1LCAxMjMzMzksIDEyMzM0MywgMTIzMzQ3LCAKKyAgICAxMjMzNTEsIDEyMzM1NSwgMTIzMzU5LCAxMjMzNjMsIDEyMzM2NywgMTIzMzcxLCAxMjMzNzUsIDEyMzM3OSwgMTIzMzgzLCAKKyAgICAxMjMzODcsIDEyMzM5MSwgMTIzMzk1LCAxMjMzOTksIDEyMzQwMywgMTIzNDA3LCAxMjM0MTEsIDEyMzQxNSwgMTIzNDE5LCAKKyAgICAxMjM0MjMsIDEyMzQyNywgMTIzNDMxLCAxMjM0MzUsIDEyMzQzOSwgMTIzNDQzLCAxMjM0NDcsIDEyMzQ1MSwgMTIzNDU1LCAKKyAgICAxMjM0NTksIDEyMzQ2MywgMTIzNDY3LCAxMjM0NzEsIDEyMzQ3NSwgMTIzNDc5LCAxMjM0ODMsIDEyMzQ4NywgMTIzNDkxLCAKKyAgICAxMjM0OTUsIDEyMzQ5OSwgMTIzNTAzLCAxMjM1MDcsIDEyMzUxMSwgMTIzNTE1LCAxMjM1MTksIDEyMzUyMywgMTIzNTI3LCAKKyAgICAxMjM1MzEsIDEyMzUzNSwgMTIzNTM5LCAxMjM1NDMsIDEyMzU0NywgMTIzNTUxLCAxMjM1NTUsIDEyMzU1OSwgMTIzNTYzLCAKKyAgICAxMjM1NjcsIDEyMzU3MSwgMTIzNTc1LCAxMjM1NzksIDEyMzU4MywgMTIzNTg3LCAxMjM1OTEsIDEyMzU5NSwgMTIzNTk5LCAKKyAgICAxMjM2MDMsIDEyMzYwNywgMTIzNjExLCAxMjM2MTUsIDEyMzYxOSwgMTIzNjIzLCAxMjM2MjcsIDEyMzYzMSwgMTIzNjM1LCAKKyAgICAxMjM2MzksIDEyMzY0MywgMTIzNjQ3LCAxMjM2NTEsIDEyMzY1NSwgMTIzNjU5LCAxMjM2NjMsIDEyMzY2NywgMTIzNjcxLCAKKyAgICAxMjM2NzUsIDEyMzY3OSwgMTIzNjgzLCAxMjM2ODcsIDEyMzY5MSwgMTIzNjk1LCAxMjM2OTksIDEyMzcwMywgMTIzNzA3LCAKKyAgICAxMjM3MTEsIDEyMzcxNSwgMTIzNzE5LCAxMjM3MjMsIDEyMzcyNywgMTIzNzMxLCAxMjM3MzUsIDEyMzczOSwgMTIzNzQzLCAKKyAgICAxMjM3NDcsIDEyMzc1MSwgMTIzNzU1LCAxMjM3NTksIDEyMzc2MywgMTIzNzY3LCAxMjM3NzEsIDEyMzc3NSwgMTIzNzc5LCAKKyAgICAxMjM3ODMsIDEyMzc4NywgMTIzNzkxLCAxMjM3OTUsIDEyMzc5OSwgMTIzODAzLCAxMjM4MDcsIDEyMzgxMSwgMTIzODE1LCAKKyAgICAxMjM4MTksIDEyMzgyMywgMTIzODI3LCAxMjM4MzEsIDEyMzgzNSwgMTIzODM5LCAxMjM4NDMsIDEyMzg0NywgMTIzODUxLCAKKyAgICAxMjM4NTUsIDEyMzg1OSwgMTIzODYzLCAxMjM4NjcsIDEyMzg3MSwgMTIzODc1LCAxMjM4NzksIDEyMzg4MywgMTIzODg3LCAKKyAgICAxMjM4OTEsIDEyMzg5NSwgMTIzODk5LCAxMjM5MDMsIDEyMzkwNywgMTIzOTExLCAxMjM5MTUsIDEyMzkxOSwgMTIzOTIzLCAKKyAgICAxMjM5MjcsIDEyMzkzMSwgMTIzOTM1LCAxMjM5MzksIDEyMzk0MywgMTIzOTQ3LCAxMjM5NTEsIDEyMzk1NSwgMTIzOTU5LCAKKyAgICAxMjM5NjMsIDEyMzk2NywgMTIzOTcxLCAxMjM5NzUsIDEyMzk3OSwgMTIzOTgzLCAxMjM5ODcsIDEyMzk5MSwgMTIzOTk1LCAKKyAgICAxMjM5OTksIDEyNDAwMywgMTI0MDA3LCAxMjQwMTEsIDEyNDAxNSwgMTI0MDE5LCAxMjQwMjMsIDEyNDAyNywgMTI0MDMxLCAKKyAgICAxMjQwMzUsIDEyNDAzOSwgMTI0MDQzLCAxMjQwNDcsIDEyNDA1MSwgMTI0MDU1LCAxMjQwNTksIDEyNDA2MywgMTI0MDY3LCAKKyAgICAxMjQwNzEsIDEyNDA3NSwgMTI0MDc5LCAxMjQwODMsIDEyNDA4NywgMTI0MDkxLCAxMjQwOTUsIDEyNDA5OSwgMTI0MTAzLCAKKyAgICAxMjQxMDcsIDEyNDExMSwgMTI0MTE1LCAxMjQxMTksIDEyNDEyMywgMTI0MTI3LCAxMjQxMzEsIDEyNDEzNSwgMTI0MTM5LCAKKyAgICAxMjQxNDMsIDEyNDE0NywgMTI0MTUxLCAxMjQxNTUsIDEyNDE1OSwgMTI0MTYzLCAxMjQxNjcsIDEyNDE3MSwgMTI0MTc1LCAKKyAgICAxMjQxNzksIDEyNDE4MywgMTI0MTg3LCAxMjQxOTEsIDEyNDE5NSwgMTI0MTk5LCAxMjQyMDMsIDEyNDIwNywgMTI0MjExLCAKKyAgICAxMjQyMTUsIDEyNDIxOSwgMTI0MjIzLCAxMjQyMjcsIDEyNDIzMSwgMTI0MjM1LCAxMjQyMzksIDEyNDI0MywgMTI0MjQ3LCAKKyAgICAxMjQyNTEsIDEyNDI1NSwgMTI0MjU5LCAxMjQyNjMsIDEyNDI2NywgMTI0MjcxLCAxMjQyNzUsIDEyNDI3OSwgMTI0MjgzLCAKKyAgICAxMjQyODcsIDEyNDI5MSwgMTI0Mjk1LCAxMjQyOTksIDEyNDMwMywgMTI0MzA3LCAxMjQzMTEsIDEyNDMxNSwgMTI0MzE5LCAKKyAgICAxMjQzMjMsIDEyNDMyNywgMTI0MzMxLCAxMjQzMzUsIDEyNDMzOSwgMTI0MzQzLCAxMjQzNDcsIDEyNDM1MSwgMTI0MzU1LCAKKyAgICAxMjQzNTksIDEyNDM2MywgMTI0MzY3LCAxMjQzNzEsIDEyNDM3NSwgMTI0Mzc5LCAxMjQzODMsIDEyNDM4NywgMTI0MzkxLCAKKyAgICAxMjQzOTUsIDEyNDM5OSwgMTI0NDAzLCAxMjQ0MDcsIDEyNDQxMSwgMTI0NDE1LCAxMjQ0MTksIDEyNDQyMywgMTI0NDI3LCAKKyAgICAxMjQ0MzEsIDEyNDQzNSwgMTI0NDM5LCAxMjQ0NDMsIDEyNDQ0NywgMTI0NDUxLCAxMjQ0NTUsIDEyNDQ1OSwgMTI0NDYzLCAKKyAgICAxMjQ0NjcsIDEyNDQ3MSwgMTI0NDc1LCAxMjQ0NzksIDEyNDQ4MywgMTI0NDg3LCAxMjQ0OTEsIDEyNDQ5NSwgMTI0NDk5LCAKKyAgICAxMjQ1MDMsIDEyNDUwNywgMTI0NTExLCAxMjQ1MTUsIDEyNDUxOSwgMTI0NTIzLCAxMjQ1MjcsIDEyNDUzMSwgMTI0NTM1LCAKKyAgICAxMjQ1MzksIDEyNDU0MywgMTI0NTQ3LCAxMjQ1NTEsIDEyNDU1NSwgMTI0NTU5LCAxMjQ1NjMsIDEyNDU2NywgMTI0NTcxLCAKKyAgICAxMjQ1NzUsIDEyNDU3OSwgMTI0NTgzLCAxMjQ1ODcsIDEyNDU5MSwgMTI0NTk1LCAxMjQ1OTksIDEyNDYwMywgMTI0NjA3LCAKKyAgICAxMjQ2MTEsIDEyNDYxNSwgMTI0NjE5LCAxMjQ2MjMsIDEyNDYyNywgMTI0NjMxLCAxMjQ2MzUsIDEyNDYzOSwgMTI0NjQzLCAKKyAgICAxMjQ2NDcsIDEyNDY1MSwgMTI0NjU1LCAxMjQ2NTksIDEyNDY2MywgMTI0NjY3LCAxMjQ2NzEsIDEyNDY3NSwgMTI0Njc5LCAKKyAgICAxMjQ2ODMsIDEyNDY4NywgMTI0NjkxLCAxMjQ2OTUsIDEyNDY5OSwgMTI0NzAzLCAxMjQ3MDcsIDEyNDcxMSwgMTI0NzE1LCAKKyAgICAxMjQ3MTksIDEyNDcyMywgMTI0NzI3LCAxMjQ3MzEsIDEyNDczNSwgMTI0NzM5LCAxMjQ3NDMsIDEyNDc0NywgMTI0NzUxLCAKKyAgICAxMjQ3NTUsIDEyNDc1OSwgMTI0NzYzLCAxMjQ3NjcsIDEyNDc3MSwgMTI0Nzc1LCAxMjQ3NzksIDEyNDc4MywgMTI0Nzg3LCAKKyAgICAxMjQ3OTEsIDEyNDc5NSwgMTI0Nzk5LCAxMjQ4MDMsIDEyNDgwNywgMTI0ODExLCAxMjQ4MTUsIDEyNDgxOSwgMTI0ODIzLCAKKyAgICAxMjQ4MjcsIDEyNDgzMSwgMTI0ODM1LCAxMjQ4MzksIDEyNDg0MywgMTI0ODQ3LCAxMjQ4NTEsIDEyNDg1NSwgMTI0ODU5LCAKKyAgICAxMjQ4NjMsIDEyNDg2NywgMTI0ODcxLCAxMjQ4NzUsIDEyNDg3OSwgMTI0ODgzLCAxMjQ4ODcsIDEyNDg5MSwgMTI0ODk1LCAKKyAgICAxMjQ4OTksIDEyNDkwMywgMTI0OTA3LCAxMjQ5MTEsIDEyNDkxNSwgMTI0OTE5LCAxMjQ5MjMsIDEyNDkyNywgMTI0OTMxLCAKKyAgICAxMjQ5MzUsIDEyNDkzOSwgMTI0OTQzLCAxMjQ5NDcsIDEyNDk1MSwgMTI0OTU1LCAxMjQ5NTksIDEyNDk2MywgMTI0OTY3LCAKKyAgICAxMjQ5NzEsIDEyNDk3NSwgMTI0OTc5LCAxMjQ5ODMsIDEyNDk4NywgMTI0OTkxLCAxMjQ5OTUsIDEyNDk5OSwgMTI1MDAzLCAKKyAgICAxMjUwMDcsIDEyNTAxMSwgMTI1MDE1LCAxMjUwMTksIDEyNTAyMywgMTI1MDI3LCAxMjUwMzEsIDEyNTAzNSwgMTI1MDM5LCAKKyAgICAxMjUwNDMsIDEyNTA0NywgMTI1MDUxLCAxMjUwNTUsIDEyNTA1OSwgMTI1MDYzLCAxMjUwNjcsIDEyNTA3MSwgMTI1MDc1LCAKKyAgICAxMjUwNzksIDEyNTA4MywgMTI1MDg3LCAxMjUwOTEsIDEyNTA5NSwgMTI1MDk5LCAxMjUxMDMsIDEyNTEwNywgMTI1MTExLCAKKyAgICAxMjUxMTUsIDEyNTExOSwgMTI1MTIzLCAxMjUxMjcsIDEyNTEzMSwgMTI1MTM1LCAxMjUxMzksIDEyNTE0MywgMTI1MTQ3LCAKKyAgICAxMjUxNTEsIDEyNTE1NSwgMTI1MTU5LCAxMjUxNjMsIDEyNTE2NywgMTI1MTcxLCAxMjUxNzUsIDEyNTE3OSwgMTI1MTgzLCAKKyAgICAxMjUxODcsIDEyNTE5MSwgMTI1MTk1LCAxMjUxOTksIDEyNTIwMywgMTI1MjA3LCAxMjUyMTEsIDEyNTIxNSwgMTI1MjE5LCAKKyAgICAxMjUyMjMsIDEyNTIyNywgMTI1MjMxLCAxMjUyMzUsIDEyNTIzOSwgMTI1MjQzLCAxMjUyNDcsIDEyNTI1MSwgMTI1MjU1LCAKKyAgICAxMjUyNTksIDEyNTI2MywgMTI1MjY3LCAxMjUyNzEsIDEyNTI3NSwgMTI1Mjc5LCAxMjUyODMsIDEyNTI4NywgMTI1MjkxLCAKKyAgICAxMjUyOTUsIDEyNTI5OSwgMTI1MzAzLCAxMjUzMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNTMxMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1MzE1LCAKKyAgICAxMjUzMTgsIDEyNTMyMiwgMTI1MzI2LCAxMjUzMjksIDEyNTMzMywgMTI1MzM3LCAxMjUzNDAsIDEyNTM0MywgMTI1MzQ3LCAKKyAgICAxMjUzNTEsIDEyNTM1NCwgMTI1MzU3LCAxMjUzNjAsIDEyNTM2MywgMTI1MzY4LCAxMjUzNzEsIDEyNTM3NSwgMTI1Mzc4LCAKKyAgICAxMjUzODEsIDEyNTM4NCwgMTI1Mzg3LCAxMjUzOTAsIDEyNTM5MywgMTI1Mzk2LCAxMjUzOTksIDEyNTQwMiwgMTI1NDA1LCAKKyAgICAxMjU0MDgsIDEyNTQxMiwgMTI1NDE2LCAxMjU0MjAsIDEyNTQyNCwgMTI1NDI5LCAxMjU0MzQsIDEyNTQ0MCwgMTI1NDQ2LCAKKyAgICAxMjU0NTIsIDEyNTQ1NywgMTI1NDYzLCAxMjU0NjksIDEyNTQ3NSwgMTI1NDgwLCAxMjU0ODYsIDEyNTQ5MiwgMTI1NDk3LCAKKyAgICAxMjU1MDIsIDEyNTUwNywgMTI1NTEyLCAxMjU1MTgsIDEyNTUyNCwgMTI1NTI5LCAxMjU1MzQsIDEyNTU0MCwgMTI1NTQ1LCAKKyAgICAxMjU1NTEsIDEyNTU1NywgMTI1NTYzLCAxMjU1NjksIDEyNTU3NSwgMTI1NTc5LCAxMjU1ODQsIDEyNTU4OCwgMTI1NTkzLCAKKyAgICAxMjU1OTcsIDEyNTYwMiwgMTI1NjA3LCAxMjU2MTMsIDEyNTYxOSwgMTI1NjI1LCAxMjU2MzAsIDEyNTYzNiwgMTI1NjQyLCAKKyAgICAxMjU2NDgsIDEyNTY1MywgMTI1NjU5LCAxMjU2NjUsIDEyNTY3MCwgMTI1Njc1LCAxMjU2ODAsIDEyNTY4NSwgMTI1NjkxLCAKKyAgICAxMjU2OTcsIDEyNTcwMiwgMTI1NzA3LCAxMjU3MTMsIDEyNTcxOCwgMTI1NzI0LCAxMjU3MzAsIDEyNTczNiwgMTI1NzQyLCAKKyAgICAxMjU3NDgsIDEyNTc1MywgMTI1NzU3LCAxMjU3NjIsIDEyNTc2NSwgMTI1NzY5LCAxMjU3NzIsIDEyNTc3NSwgMTI1Nzc4LCAKKyAgICAxMjU3ODEsIDEyNTc4NCwgMTI1Nzg3LCAxMjU3OTAsIDEyNTc5MywgMTI1Nzk2LCAxMjU3OTksIDEyNTgwMiwgMTI1ODA1LCAKKyAgICAxMjU4MDgsIDEyNTgxMSwgMTI1ODE0LCAxMjU4MTcsIDEyNTgyMCwgMTI1ODIzLCAxMjU4MjYsIDEyNTgyOSwgMTI1ODMyLCAKKyAgICAxMjU4MzUsIDEyNTgzOCwgMTI1ODQxLCAxMjU4NDQsIDEyNTg0NywgMTI1ODUwLCAxMjU4NTMsIDEyNTg1NiwgMTI1ODU5LCAKKyAgICAxMjU4NjIsIDEyNTg2NSwgMTI1ODY4LCAxMjU4NzEsIDEyNTg3NCwgMTI1ODc3LCAxMjU4ODAsIDEyNTg4MywgMTI1ODg2LCAKKyAgICAxMjU4ODksIDEyNTg5MiwgMTI1ODk1LCAxMjU4OTgsIDEyNTkwMSwgMTI1OTA0LCAxMjU5MDcsIDEyNTkxMCwgMTI1OTEzLCAKKyAgICAxMjU5MTYsIDEyNTkxOSwgMTI1OTIyLCAxMjU5MjUsIDEyNTkyOCwgMTI1OTMxLCAxMjU5MzQsIDEyNTkzNywgMTI1OTQwLCAKKyAgICAxMjU5NDMsIDEyNTk0NiwgMTI1OTQ5LCAxMjU5NTIsIDEyNTk1NSwgMTI1OTU4LCAxMjU5NjEsIDEyNTk2NCwgMTI1OTY3LCAKKyAgICAxMjU5NzAsIDEyNTk3MywgMTI1OTc2LCAxMjU5NzksIDEyNTk4MiwgMTI1OTg1LCAxMjU5ODgsIDEyNTk5MSwgMTI1OTk0LCAKKyAgICAxMjU5OTcsIDEyNjAwMCwgMTI2MDAzLCAxMjYwMDYsIDEyNjAwOSwgMTI2MDEyLCAxMjYwMTUsIDEyNjAxOCwgMTI2MDIxLCAKKyAgICAxMjYwMjQsIDEyNjAyNywgMTI2MDMwLCAxMjYwMzMsIDEyNjAzNiwgMTI2MDM5LCAxMjYwNDIsIDEyNjA0NSwgMTI2MDQ4LCAKKyAgICAxMjYwNTEsIDEyNjA1NCwgMTI2MDU3LCAxMjYwNjAsIDEyNjA2MywgMTI2MDY2LCAxMjYwNjksIDEyNjA3MiwgMTI2MDc1LCAKKyAgICAxMjYwNzgsIDEyNjA4MSwgMTI2MDg0LCAxMjYwODcsIDEyNjA5MCwgMTI2MDkzLCAxMjYwOTYsIDEyNjA5OSwgMTI2MTAyLCAKKyAgICAxMjYxMDUsIDEyNjEwOCwgMTI2MTExLCAxMjYxMTQsIDEyNjExNywgMTI2MTIwLCAxMjYxMjMsIDEyNjEyNiwgMTI2MTI5LCAKKyAgICAxMjYxMzIsIDEyNjEzNSwgMTI2MTM4LCAxMjYxNDEsIDEyNjE0NCwgMTI2MTQ3LCAxMjYxNTAsIDEyNjE1MywgMTI2MTU2LCAKKyAgICAxMjYxNTksIDEyNjE2MiwgMTI2MTY1LCAxMjYxNjgsIDEyNjE3MSwgMTI2MTc0LCAxMjYxNzcsIDEyNjE4MCwgMTI2MTgzLCAKKyAgICAxMjYxODYsIDEyNjE4OSwgMTI2MTkyLCAxMjYxOTUsIDEyNjE5OCwgMTI2MjAxLCAxMjYyMDQsIDEyNjIwNywgMTI2MjEwLCAKKyAgICAxMjYyMTMsIDEyNjIxNiwgMTI2MjE5LCAxMjYyMjIsIDEyNjIyNSwgMTI2MjI4LCAxMjYyMzEsIDEyNjIzNCwgMTI2MjM3LCAKKyAgICAxMjYyNDAsIDEyNjI0MywgMTI2MjQ2LCAxMjYyNDksIDEyNjI1MiwgMTI2MjU1LCAxMjYyNTgsIDEyNjI2MSwgMTI2MjY0LCAKKyAgICAxMjYyNjcsIDEyNjI3MCwgMTI2MjczLCAxMjYyNzYsIDEyNjI3OSwgMTI2MjgyLCAxMjYyODUsIDEyNjI4OCwgMTI2MjkxLCAKKyAgICAxMjYyOTQsIDEyNjI5NywgMTI2MzAwLCAxMjYzMDMsIDEyNjMwNiwgMTI2MzA5LCAxMjYzMTIsIDEyNjMxNSwgMTI2MzE4LCAKKyAgICAxMjYzMjEsIDEyNjMyNCwgMTI2MzI3LCAxMjYzMzAsIDEyNjMzMywgMTI2MzM2LCAxMjYzMzksIDEyNjM0MiwgMTI2MzQ1LCAKKyAgICAxMjYzNDgsIDEyNjM1MSwgMTI2MzU0LCAxMjYzNTcsIDEyNjM2MCwgMTI2MzYzLCAxMjYzNjYsIDEyNjM2OSwgMTI2MzcyLCAKKyAgICAxMjYzNzUsIDEyNjM3OCwgMTI2MzgxLCAxMjYzODQsIDEyNjM4NywgMTI2MzkwLCAxMjYzOTMsIDEyNjM5NiwgMTI2Mzk5LCAKKyAgICAxMjY0MDIsIDEyNjQwNSwgMTI2NDA4LCAxMjY0MTEsIDEyNjQxNCwgMTI2NDE3LCAxMjY0MjAsIDEyNjQyMywgMTI2NDI2LCAKKyAgICAxMjY0MjksIDEyNjQzMiwgMTI2NDM1LCAxMjY0MzgsIDEyNjQ0MSwgMTI2NDQ0LCAxMjY0NDcsIDEyNjQ1MCwgMTI2NDUzLCAKKyAgICAxMjY0NTYsIDEyNjQ1OSwgMTI2NDYyLCAxMjY0NjUsIDEyNjQ2OCwgMTI2NDcxLCAxMjY0NzQsIDEyNjQ3NywgMTI2NDgwLCAKKyAgICAxMjY0ODMsIDEyNjQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiB9OwogCiAvKiBuYW1lLT5jb2RlIGRpY3Rpb25hcnkgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29kZV9oYXNoW10gPSB7Ci0gICAgNzQyMjQsIDQ4NTEsIDAsIDAsIDAsIDAsIDc5MjksIDAsIDE5NDY4MiwgMCwgMCwgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgCi0gICAgMTIwNjQsIDAsIDU5NiwgMCwgMCwgNjU4NDIsIDg2NTEsIDAsIDAsIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCAKLSAgICA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA5MTc4MzMsIDAsIDQyMzMsIDQyMzQsIDQyMzIsIDkxNzgzNiwgMCwgCi0gICAgMTIwMjEwLCA5MTc4NDEsIDkxNzg0MCwgMCwgODg1MSwgMCwgMCwgMCwgNDE2MDEsIDg4NzQsIDAsIDc3NDgsIDAsIDAsIDAsIAotICAgIDAsIDQxNjAzLCA5Nzg0LCAwLCA5MTg4LCA0MTYwMCwgMCwgMCwgMCwgMTQ1NywgMzUzNSwgMCwgMCwgMCwgMCwgNjUyNDAsIAotICAgIDExOTUxLCAwLCAzNDA0LCAwLCAwLCAwLCAxNzU5LCAwLCAxOTQ5NjQsIDAsIDAsIDAsIDY2NTc3LCAwLCAwLCA2NTg1OSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNjU5MzAsIDk4MzQsIDMwNTUsIDk4NTIsIDAsIDY1Mjg4LCAwLCAxMTM5OCwgMCwgMCwgMTE5MjU1LCAKLSAgICAwLCAwLCA2MDMsIDAsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIDMzNTAsIDEyMDgxNywgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAKLSAgICAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCA5MTc4MjksIDAsIDE5MTksIDM0MDAsIDAsIDkxNzgxMywgMCwgCi0gICAgOTE3NTQwLCA2NjQ0NiwgNjQxNDEsIDg1NjIsIDY0MTM5LCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAKLSAgICAxMTI5NywgMCwgMCwgMTE5NjYsIDY0MTI4LCAwLCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgMCwgMCwgCi0gICAgOTc3OSwgMjc2NCwgNjYwMDIsIDAsIDk0NzEsIDAsIDY2MDIxLCAwLCAwLCA1NDU3LCA1NDQwLCA4ODU3LCAwLCA2NTI4MiwgCi0gICAgMjg0MywgNTM1NSwgMCwgMCwgMCwgNTE5NCwgMTE2NTcsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCAKLSAgICA1NjMwLCA3NDM1MCwgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgNjYxODYsIDAsIDAsIDY0OTMwLCAKLSAgICAxMTYzMSwgNjQxNDYsIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAwLCAwLCAxMDkwNiwgMTM1MywgNjk2MCwgCi0gICAgMCwgMCwgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCA0MjI0NCwgODU4LCA3MDgwLCA5MTc4MDgsIDkxNzgwNywgCi0gICAgODA5MCwgMCwgNzQ0MDEsIDkxNzgxMSwgNTg3LCAwLCAwLCAwLCAwLCAwLCAwLCAyNzUwLCAwLCA1NTYsIDY0MTU4LCAKLSAgICA2NDE1NywgMCwgMTIyMTMsIDAsIDI3NjAsIDAsIDAsIDAsIDAsIDY0MTU2LCA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCAKLSAgICA2NDE1MCwgMTI2NzksIDEwMDUzLCAxMDQyMSwgMTE3ODcsIDY0MTUzLCA2NDE1MiwgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgCi0gICAgMTIwMzUyLCAwLCA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAwLCAwLCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgCi0gICAgMCwgNjQxMjIsIDc0NDIyLCA2NjYwOSwgMCwgNjQxMTcsIDY0MTE2LCA2Mjg3LCA2NDExNCwgMjcyNSwgNjQxMjAsIDY0MTE5LCAKLSAgICA2NDExOCwgNDIxMjgsIDAsIDExNzcsIDY1NjAxLCAxMjMyMiwgNjQxMDYsIDAsIDAsIDY0MTAyLCA3ODU5LCAxOTQ1LCAKLSAgICA2NDA5OSwgMCwgMTA0NTMsIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCAwLCAwLCA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIAotICAgIDUyOCwgOTE3OTg5LCAwLCAxMTQyOSwgMCwgMCwgMCwgMCwgNzM4NDEsIDAsIDAsIDkwNTYsIDAsIDYxODgsIDEyMDAxOSwgCi0gICAgNjE1NSwgNjQwNjgsIDE4MjMsIDY0MDY2LCA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgMCwgMCwgNDE5MDQsIAotICAgIDY2MzksIDY0MDY0LCAwLCAwLCAwLCAxMTc2LCAxMTg5NTksIDAsIDgxNjIsIDAsIDAsIDAsIDEyMDUxOSwgNjYzNzYsIAotICAgIDY2MjQyLCAxMTQxNSwgNDMzMywgOTg1NSwgNjQxMTIsIDY0NjQyLCAwLCA1Mzg4LCAwLCAwLCAwLCA3NzE0LCA2NjIyMiwgMCwgCi0gICAgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDAsIDAsIDAsIDg3MDgsIDk1NjAsIDY0MDc3LCA2NDA3NiwgODk5NiwgNDk5MiwgCi0gICAgNDQ3MSwgNDI2MjIsIDY0MDc5LCA2NDA3OCwgMCwgMCwgMCwgMCwgNjQ2MTUsIDAsIDAsIDEyMDc1LCAwLCAwLCA1MTc0LCAwLCAKLSAgICAwLCAwLCAzMTIzLCAwLCAxMjY4NSwgMCwgODQwOCwgNjQ3MDQsIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCAwLCA3Mzc5NywgMCwgCi0gICAgMTExNiwgMCwgNDMwNDksIDAsIDQzMDUwLCA4NTQ4LCAwLCAwLCAxMTkwNjEsIDAsIDAsIDEzMTE1LCA2NDA5MiwgNjQwOTEsIAotICAgIDkzMjIsIDAsIDEyMDU5NSwgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgCi0gICAgMCwgMTE0MzQsIDY0MDgzLCA2NDA4MiwgMTEzMjksIDc3MzcsIDY0MDg3LCA2NDA4NiwgNjQwODUsIDY0MDg0LCAwLCAwLCAKLSAgICA0MTMzNSwgNDExOCwgMTc5NywgMCwgNDEzMzQsIDAsIDQ2LCAwLCAwLCAyOTgsIDAsIDAsIDAsIDQyNjI3LCAwLCAzMiwgCi0gICAgNjE4NywgMTE5MDUyLCAxMTQ5NSwgMTE0NTksIDM2NjUsIDAsIDQyODcxLCAwLCAxOTkyMywgNzQzMzUsIDAsIDAsIDY2MjM5LCAKLSAgICAwLCA2NDQwMywgNDQxMiwgNzI0MCwgMCwgMCwgMCwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDAsIAotICAgIDEyMDE5OCwgMTIwMjAzLCA2MTgxLCA2NTAxNCwgMCwgMCwgMCwgMzYzOSwgMTE5NTg4LCAwLCAwLCAwLCAxMDA3MywgCi0gICAgMTIwMjA2LCAwLCAwLCAwLCA0Mjg0NCwgNzQ5OCwgMTA5OCwgMCwgMCwgMCwgMCwgMTAyMDcsIDg3ODksIDAsIDAsIDAsIDAsIAotICAgIDkyMzQsIDAsIDYxODIsIDAsIDY1MDU4LCAwLCAwLCAwLCAwLCA1NDcxLCA5NDYxLCA1NTczLCAxMTg5MzYsIDU0NzMsIDQ0LCAKLSAgICAwLCA2NjI0NCwgMTE4OTA3LCAwLCA2NjIzOCwgMTI4NDQsIDAsIDE2MjIsIDc3NjcsIDE5MDAsIDQxMzM5LCAxMTQ1OCwgMCwgCi0gICAgMCwgNjU4MSwgNTU3NiwgMCwgNjQ0MDUsIDQxMzM3LCAwLCAwLCA4OTQ3LCAwLCAwLCA0MTY5NCwgMCwgMCwgNzkwOCwgMCwgCi0gICAgMTA0MDgsIDY1NzksIDAsIDE5NDgyOSwgMCwgMCwgMCwgNjU4MywgNzc2MSwgMTI3MDEwLCAxMjA1MDQsIDE5NDgyOCwgMCwgCi0gICAgNTA1OCwgNDEwMTAsIDk5OTIsIDAsIDUwNTcsIDAsIDAsIDc0NTM4LCA1MDU0LCAxMTg5NTEsIDE5NDk3MSwgMCwgMCwgCi0gICAgMTQzNywgNDE2MTcsIDY1OCwgMzQ5NywgMCwgNzQ4NiwgNTA2MSwgNTA2MCwgNDIzNSwgMCwgMCwgMCwgMTIxMTMsIDQyMzYsIAotICAgIDQ3MjcsIDAsIDAsIDc2OTMsIDEwNzQ5LCAwLCA3NDg4LCA1NzczLCA5NzgsIDAsIDAsIDQxNjE5LCAxMDIzOSwgMCwgMCwgCi0gICAgNjYyMDksIDAsIDAsIDk3NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIAotICAgIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCA2Nzg1NCwgODEyNSwgMTIwNTQ1LCAwLCAxMTkxNzUsIDkxNzk0MCwgCi0gICAgMjM2OSwgMCwgMCwgMCwgMTE5MjM1LCA3NDA5MiwgNzM5MzYsIDcwMDgsIDAsIDAsIDAsIDAsIDIzNjcsIDAsIDAsIDI2NCwgCi0gICAgMjM3NSwgODA2MCwgNjE5NCwgMTE5ODU4LCAxODQ0LCAxMTkwODQsIDAsIDEyODU4LCAwLCAwLCA2OTYxLCAwLCAwLCAwLCAKLSAgICA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDAsIDcyNSwgNjUwNDIsIAotICAgIDExODc5NywgMTIwODAwLCAwLCAxMjg5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNzA3LCAwLCAwLCA1MDc0LCA1MDczLCAKLSAgICAwLCA4OTgzLCAwLCA5MTc5MzksIDAsIDUwNzIsIDAsIDYxOTgsIDExNjE0LCAwLCAxOTYsIDAsIDAsIDAsIDQ5MjksIAotICAgIDEyMDM0MiwgMCwgMCwgMCwgMCwgNDI4NDcsIDAsIDAsIDAsIDQ5MzQsIDAsIDQxMzIzLCA5NzU4LCAwLCAxMjAzNDEsIDAsIAotICAgIDQyNTg0LCAwLCA0MzI5LCA0MTMyMSwgNDk3OSwgMzA0OCwgNzc1MiwgNDEzMjAsIDAsIDc0NDE4LCAxMjgxOSwgMCwgNTA3MSwgCi0gICAgMCwgMzY0MiwgMCwgNTA3MCwgMTAwNDIsIDAsIDM5ODcsIDUwNjgsIDAsIDAsIDEyMDIxNiwgMCwgMCwgMTA2MzYsIDczOTgxLCAKLSAgICAxMTgwNiwgNDMxNjcsIDQ1MzEsIDEyNDUsIDkxMDUsIDY2NDYzLCA0OTIxLCAxMjAyMTksIDQ5MjYsIDY1NTQ0LCA3Mzg4NCwgCi0gICAgMTk0NjE5LCAwLCAwLCA2NDcwOSwgMCwgMTk0NjIwLCAxMjA3OTAsIDQ5MjIsIDMyNSwgOTkyLCAxMTk1NjgsIDQ5MjUsIDAsIAotICAgIDAsIDk1MjYsIDQ5MjAsIDAsIDk0OCwgMCwgMTIwMjA4LCA0OTMwLCAwLCAwLCAxMjAyNzUsIDQ5MzMsIDAsIDAsIDAsIAotICAgIDQ5MjgsIDAsIDAsIDc0NzcwLCAwLCAwLCA3MjIsIDAsIDE5OTA4LCAxMjYzNywgMCwgMTE5ODU1LCA4NzUzLCAxNTA5LCAwLCAKLSAgICA1NDY4LCA5NTExLCAwLCAwLCAxNjcyLCA2MjA1LCAxMDg2NCwgNzQ1ODYsIDAsIDAsIDAsIDAsIDAsIDczODYzLCAwLCAwLCAKLSAgICA0MTYwNywgMTIwMTE1LCAxNjc5LCAxMjAxMTYsIDE5NDkzMiwgMTIwMTEzLCAwLCA3MDA1LCA0MTYwOSwgOTU4MCwgMCwgCi0gICAgNDAxLCAwLCAxMjAxMDksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMCwgODE0MywgMTI3MTE1LCAxMTk4MywgMTI3MTEzLCAKLSAgICA2MjQsIDc0NTA4LCAwLCAxMTk2MzAsIDUwNzgsIDc0MjU4LCAxMjQ3OCwgMCwgNTA3NiwgMCwgMTk0NjA5LCAwLCAxMjAwOTcsIAotICAgIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDEyMDA5NSwgMTIwMTAyLCAxMjAwOTQsIDEyMDU1MiwgMCwgCi0gICAgMTk0NjExLCAwLCAwLCAxMjUyMCwgODA1OCwgOTczMiwgMCwgNTA4MCwgNjQ3NzUsIDUwMzYsIDUwMzUsIDEyMDU5MCwgCi0gICAgNDI2MDQsIDAsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDAsIDQ0MzIsIDAsIDUwMzMsIDAsIDAsIDQ4MzYsIDM4ODgsIAotICAgIDczNzkyLCAxMDcyOSwgNjQ1NDYsIDE5NDYwMCwgMTIwNjgxLCAxOTQ5MzcsIDAsIDY3NTg4LCAxMTkwMDAsIDAsIDAsIAotICAgIDg4NTgsIDY0MDksIDAsIDEyMDI1MiwgMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAwLCAzNDMyLCAxMDIxOCwgMCwgNjA5NCwgCi0gICAgNzY0MSwgNDI0NDUsIDAsIDAsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCAwLCA1MDMwLCAwLCAwLCAwLCAwLCA5NjIyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDU0NCwgMTI5MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0NywgMTE5ODM1LCAKLSAgICAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIDExOTkzNSwgNzYxMywgMTE5OTM3LCAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgCi0gICAgNjQ5MTQsIDAsIDEyMDE5MiwgMTIwMjY4LCAwLCA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMCwgMTE5OTE5LCA3MjE2LCAKLSAgICA2NTIzMiwgNzIxNywgMjUxLCA3MjE4LCA3ODk1LCA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgCi0gICAgMTE5OTIyLCA3MjE0LCA3MjE1LCAwLCA3NDE0MSwgODg4MCwgNzY4NSwgMCwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIAotICAgIDgxODcsIDQyODYxLCAxMTEzLCA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgCi0gICAgMTA5ODAsIDI0ODksIDY1NjI0LCA4MTUwLCAxMzU5LCAwLCAwLCAwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjI4MywgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIAotICAgIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgMCwgMCwgMCwgODQzMSwgMCwgNDIxNjQsIDAsIDExNzc4LCAxMjYyMCwgMCwgCi0gICAgNzM3NzMsIDExOTA3MywgNTA0MCwgMCwgMCwgMCwgMCwgMCwgNTAzOSwgMCwgMCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIAotICAgIDc0MjkzLCAwLCA2NDY0OCwgMCwgOTM1OSwgMCwgMCwgMCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIDczOTA5LCA0ODM1LCAKLSAgICAwLCAwLCAwLCA0MzA5LCAwLCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgMTE5NTk1LCA1NjksIDAsIDAsIDcxMSwgCi0gICAgMTE5MDg1LCAwLCAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzEsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgCi0gICAgMTU1MCwgODIwMSwgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDAsIDAsIDY1Nzg0LCAwLCA2NTI2NywgMzc1OCwgMCwgCi0gICAgNjU3ODEsIDY0NzM0LCAwLCAyNDQwLCA2NTc4MCwgMCwgODQ0OSwgMCwgNTAwOCwgMCwgODgyMiwgMCwgMTIxMjEsIDgyNTUsIAotICAgIDU1MTIsIDczODc1LCAxMTk1NjAsIDAsIDY0MzEzLCAyNjQxLCA1OTA2LCAxMTE5LCAxMjcwNjgsIDEzMDM4LCAwLCAyNDU1LCAKLSAgICAwLCAxMTg4MDksIDAsIDAsIDAsIDAsIDg3MTQsIDAsIDQyMTEsIDAsIDAsIDAsIDAsIDAsIDUwNTIsIDY2MjIwLCA1ODIxLCAKLSAgICA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIAotICAgIDY2MzcsIDU5MDcsIDEyMDY3MCwgMCwgMTI3MjYsIDc0NTk0LCA5MTE3LCAwLCAwLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgCi0gICAgNTUxMCwgMCwgMCwgMCwgMjQ3MCwgMCwgMCwgMTkyNSwgMCwgMCwgMCwgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgMTk0ODYzLCAKLSAgICAwLCA3NDQ5NywgMCwgODA4OSwgNjkyOSwgNjM5LCAwLCA2ODE3OSwgMCwgMCwgMCwgNDU5OSwgNDE0MDIsIDY2NzQsIAotICAgIDEyMDYzMSwgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDAsIDEwMTY0LCAwLCAwLCAzNTMwLCA5NzUwLCAKLSAgICAwLCAwLCA2NjU2LCAxOTQ4NTgsIDAsIDUwNDYsIDg1MTIsIDY1ODU2LCA3NDI2MSwgODk2NywgMCwgNTA0NSwgMCwgMTkxNiwgCi0gICAgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAKLSAgICAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgMCwgNDE3NTAsIDM1ODYsIDY0NTA4LCA0MzE0OCwgMCwgMCwgCi0gICAgMTE5NjA2LCAwLCAxMzI5NiwgNTE3LCAwLCAwLCAwLCA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgNzQ0NzgsIDEwNTMxLCAKLSAgICA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAzOTI1LCAwLCAKLSAgICA4MDY5LCA0MzE0MiwgMTIwNDM5LCA0ODksIDAsIDAsIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgMCwgMCwgNjYyMDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDg3MTEsIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgNzYyMywgMTE4OTI1LCAxOTQ4NTMsIDkyMzUsIAotICAgIDEyNzYwLCA3NDE3NiwgMCwgNjY0NDUsIDQzNTQwLCAxMjA0MzcsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIAotICAgIDAsIDEyMDQzNSwgMCwgNzcyNiwgMCwgMTk5MjIsIDI2NywgMzM5MywgMCwgMTM3MSwgMTk0ODQ5LCAwLCAyNDU4LCAwLCAKLSAgICA2MjAxLCAwLCA0MTA3NCwgNDI2NiwgMTA2NTIsIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgMCwgMCwgCi0gICAgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIDkxNzU1MCwgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgMCwgNjQyNjEsIDY0OTM0LCAKLSAgICAwLCAxMzAxNCwgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCAwLCAwLCAwLCAwLCA5MDUzLCAxMzAxNSwgCi0gICAgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDAsIDY2NjAsIDE5NDk0MSwgOTE3NzYwLCA5MTc3OTMsIDAsIDEyNjI5LCAKLSAgICAxMTQzNSwgMCwgMCwgNjU1MzgsIDAsIDAsIDAsIDc0NTQ3LCAwLCA2NTQ0OCwgMCwgMTI5NDgsIDE5NTAwMywgMTk1MDAyLCAKLSAgICAxMTkyMzgsIDE5NTAwNCwgMTk1MDA3LCAxOTUwMDYsIDAsIDAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDAsIAotICAgIDY2NzI4LCAxODE2LCAwLCA0MjUzMywgMTY4LCAwLCA0ODk4LCA2NDI5OCwgMCwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAKLSAgICAzNjUzLCAwLCA3OTEsIDkxNjIsIDY5NzcsIDAsIDExOTI5OCwgNzQ1NjEsIDAsIDczNzMxLCA4MzU0LCA0MzU5MCwgMCwgMCwgCi0gICAgNzU1NywgMCwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxOTQ5OTQsIDExOTE2NywgMTk0OTk2LCAxMjgxMSwgNjU5MjUsIAotICAgIDM5NDYsIDE5NTAwMCwgMTA5OTgsIDAsIDY3MywgMTk0ODY3LCA2NDM5NywgMCwgNzQ1OTksIDAsIDAsIDE5NDk3NywgCi0gICAgMTk0OTc2LCAyNDQ4LCAxOTQ5NzgsIDEwMjY3LCA4NDI0LCAyNDUyLCAxMjA3NjAsIDE5NDg2NCwgODcyOSwgMCwgMCwgCi0gICAgNzg0NSwgMCwgMCwgNDQwOCwgNDEyMiwgMCwgMTEwMzksIDg3MjMsIDE5NDk5MCwgMTk0OTg5LCAxMTkzMDIsIDczMSwgCi0gICAgMTE5MzA0LCAxMTkzMDMsIDI0MzgsIDY0ODU1LCAxMTkzMDAsIDExOTI5OSwgMTE3NSwgMCwgNDIxMzUsIDM3MywgMTE5MTcyLCAKLSAgICA1Mzk2LCAxMTQ1NywgMTE1MjEsIDc3MjMsIDAsIDAsIDAsIDQxOTUyLCAwLCA1MjczLCA4MjQ4LCA1MjY5LCAwLCA1MjAyLCAKLSAgICAyNDA0LCA1MjY3LCA0MjgyMywgMTEyOTEsIDE5OTE1LCA1Mjc3LCAxMjk2MywgMCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIAotICAgIDAsIDExODg3MywgMTI3MSwgMCwgMCwgNjYwMjQsIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIAotICAgIDQxNjYsIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDAsIDAsIDAsIDAsIAotICAgIDQxMzg4LCAwLCA0MTM5MiwgNjQyODgsIDQxMzg3LCAwLCA4NzA2LCA1NTUyLCAwLCA3MDAsIDAsIDU1NTMsIDAsIDcwODgsIAotICAgIDUzNTYsIDc0OTksIDAsIDY2NTk2LCAwLCAwLCAwLCA1NTU0LCAwLCAxMjM0NCwgMTAzMTEsIDAsIDY2NjUsIDAsIDAsIAotICAgIDc2MTgsIDg1MTcsIDExNDU1LCAwLCA2NDYzMiwgNjYwMTcsIDU1NTUsIDAsIDAsIDAsIDAsIDExOTIwNCwgNjUwMzMsIAotICAgIDkxNDMsIDY2NjgsIDE5NTA2NywgMTk1MDY2LCAxOTUwNjksIDY1NiwgMTk1MDcxLCA2NTAzNywgNDU3NywgNjQ2MjQsIDAsIAotICAgIDAsIDAsIDAsIDQyNjksIDczODg1LCA5MTc3NzUsIDQyODQ2LCA5MTc3NzQsIDk1MCwgMCwgMCwgNjY1ODAsIDExODg5NSwgCisgICAgNzQyMjQsIDQ4NTEsIDAsIDc4MTU2LCA3ODQ5OSwgMTI4Njg1LCA3OTI5LCAwLCAxOTQ2ODIsIDEyNzc2NiwgNzg1MDAsIAorICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDAsIDEyODEwMywgMTMxOTIsIDg2NTEsIDAsIDAsIAorICAgIDEyMDIxOCwgMTI5OTUsIDY0ODY1LCAxMzczLCAwLCAwLCA1ODE2LCAxMTkwNjcsIDY0ODEwLCA0MjMxLCA2ODI1LCA0Mjg5NywgCisgICAgNDIzMywgNDIzNCwgNDIzMiwgOTE3ODM2LCA3NDQxNSwgMTIwMjEwLCA2Mzg0LCA5MTc4NDAsIDc4MTA4LCA4ODUxLCAwLCAKKyAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCAwLCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCA5MTg4LCAKKyAgICA0MTYwMCwgMCwgMTIwNjE4LCAxMjgzNDMsIDE0NTcsIDM1MzUsIDAsIDAsIDAsIDAsIDY1MjQwLCAxMTk1MSwgMCwgMzQwNCwgCisgICAgMCwgMCwgMCwgMTc1OSwgMCwgNDEwNzYsIDY4MzgzLCAxMjA1NzIsIDExOTIwNSwgNjY1NzcsIDAsIDEyNzc2NCwgNjU4NTksIAorICAgIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCAwLCA2NTI4OCwgMCwgMTEzOTgsIDAsIAorICAgIDkyNDE3LCAxMTkyNTUsIDAsIDAsIDYwMywgNzQzOTgsIDQzNTQ4LCAwLCAwLCA5MTc4MjQsIDMzNTAsIDEyMDgxNywgCisgICAgNjQzMTgsIDkxNzgyOCwgMTI3MDg5LCAzMzkwLCA3NDQ4MywgNDMyNjUsIDEyMDU5OSwgOTE3ODMwLCA3ODU3MywgMCwgCisgICAgMTkxOSwgMzQwMCwgMTIwNjUxLCAxMjc5NDQsIDExNjQ3LCA5MTc1NDAsIDY2NDQ2LCA2NDE0MSwgODU2MiwgMjEyMSwgCisgICAgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDAsIDAsIDExOTY2LCA2NDEyOCwgMTI4NTg3LCAwLCAwLCAKKyAgICA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgMCwgNDMzNzQsIDk3NzksIDI3NjQsIDY2MDAyLCAxMDE2NywgOTQ3MSwgMCwgCisgICAgNjYwMjEsIDAsIDAsIDU0NTcsIDU0NDAsIDg4NTcsIDEyODc3MSwgNjUyODIsIDI4NDMsIDUzNTUsIDEyNzkyOCwgMCwgMCwgCisgICAgNTE5NCwgMTE2NTcsIDQzOTg0LCAxMjgyOTIsIDAsIDAsIDAsIDAsIDEyNzAyNywgMTA3MTcsIDY0NTcwLCA1NjMwLCAKKyAgICA3NDM1MCwgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgNjYxODYsIDAsIDAsIDY0OTMwLCAxMTYzMSwgCisgICAgNjQxNDYsIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAxOTQ2NjEsIDY0NDY4LCAxMDkwNiwgMTM1MywgCisgICAgNjk2MCwgMCwgMCwgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCA0MjI0NCwgODU4LCA3MDgwLCA2NDEwOSwgCisgICAgNjQxMDgsIDgwOTAsIDAsIDc0NDAxLCA5MTc4MTEsIDU4NywgMCwgMTI4MTMxLCAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgCisgICAgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCAwLCAxMjIxMywgMTk0Njc4LCAyNzYwLCAwLCAwLCAwLCAxOTQ3OTQsIDY0MTU2LCAKKyAgICA2NDE1NSwgNDI0OTYsIDAsIDY0MTUxLCA2NDE1MCwgMTI2NzksIDEwMDUzLCAxMDQyMSwgMTEwOTMsIDY0MTUzLCA2NDE1MiwgCisgICAgMCwgMCwgNDgzOSwgMCwgMCwgMTg3NCwgMTE5MDE2LCAwLCA2NTc3LCA2NDEyNSwgNjQxMjQsIDY0MTIzLCAwLCAxMjc1MzEsIAorICAgIDkyNTM0LCA3MDA3LCA3NTkwLCA2NTQ0MywgOTAzNiwgOTI1NTAsIDY0MTIyLCA3NDQyMiwgNjY2MDksIDAsIDY0MTE3LCAKKyAgICA2NDExNiwgNjI4NywgNjQxMTQsIDI3MjUsIDY0MTIwLCA2NDExOSwgNDM5ODEsIDQyMTI4LCAxMjc4NDIsIDExNzcsIAorICAgIDY1NjAxLCAxMjMyMiwgNjQxMDYsIDY5NjQwLCAxMjczMDYsIDY0MTAyLCA3ODU5LCAxOTQ1LCA2NDA5OSwgMCwgMTA0NTMsIAorICAgIDY0MTA0LCA3MTg4LCA3OTk3LCAwLCA3Mzg5LCAwLCA4NzA1LCA2NDA5NywgNjQwOTYsIDk1NzEsIDUyOCwgMTI4NjcxLCAKKyAgICA0NDAxNywgMTE0MjksIDAsIDAsIDAsIDkxNzk5MCwgNzM4NDEsIDAsIDAsIDkwNTYsIDY0MzEzLCA2MTg4LCAxMjAwMTksIAorICAgIDYxNTUsIDY0MDY4LCAxODIzLCA2NDA2NiwgNjQwNjUsIDY0MDcyLCA2NDA3MSwgNjMsIDcyMzMsIDkyMjEyLCAwLCA0MTkwNCwgCisgICAgNjYzOSwgNjQwNjQsIDAsIDEyODM0NCwgMCwgMTE3NiwgMTE4OTU5LCAxMjc5MzAsIDgxNjIsIDEyODY2NywgMCwgMCwgCisgICAgMTIwNTE5LCA2NjM3NiwgNjYyNDIsIDExNDE1LCA0MzMzLCA5ODU1LCA2NDExMiwgNjQ2NDIsIDAsIDUzODgsIDAsIDAsIDAsIAorICAgIDc3MTQsIDY2MjIyLCAwLCA3NzY4LCAwLCA0MTk5LCA2NDcwOCwgMCwgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKKyAgICA4OTk2LCA0OTkyLCA0NDcxLCA0MjYyMiwgNjQwNzksIDY0MDc4LCA5MjE3OSwgMCwgMCwgMCwgNjQ2MTUsIDQxOTE1LCAwLCAKKyAgICAxMjA3NSwgOTIyMTEsIDAsIDUxNzQsIDAsIDAsIDEyNzU1NywgMzEyMywgMCwgMTI2ODUsIDEyNzkwNCwgODQwOCwgNjQ3MDQsIAorICAgIDAsIDAsIDkyMjMsIDAsIDQxNjE2LCAwLCA3Mzc5NywgMCwgMTExNiwgMTI4MjA0LCA0MzA0OSwgNzEzNiwgNDMwNTAsIAorICAgIDg1NDgsIDEyMDQ4NSwgMCwgMTE5MDYxLCA5MTc5OTksIDAsIDEzMTE1LCA0MzY3NSwgNjQwOTEsIDkzMjIsIDAsIDEyMDU5NSwgCisgICAgNjQwOTUsIDY0MDk0LCA4MTExLCA2NjI0NywgNDIzMzIsIDY0MDg5LCA2NDA4OCwgNjE5OSwgMCwgMCwgMTE0MzQsIDY0MDgzLCAKKyAgICA2NDA4MiwgMTEzMjksIDc3MzcsIDY0MDg3LCA2NDA4NiwgNjQwODUsIDY0MDg0LCAxOTQ4MTcsIDk5MjcsIDQxMzM1LCAKKyAgICA0MTE4LCAxNzk3LCAwLCA0MTMzNCwgMCwgNDYsIDQzNDQ4LCAxMjc4ODEsIDI5OCwgMCwgMTI4MTE0LCAwLCA0MjYyNywgMCwgCisgICAgMzIsIDYxODcsIDExOTA1MiwgMTE0OTUsIDExNDU5LCAzNjY1LCAwLCA0Mjg3MSwgMCwgMTk5MjMsIDc0MzM1LCAwLCAKKyAgICAxMjcxOTIsIDY2MjM5LCA0MjI2NCwgNjQ0MDMsIDQ0MTIsIDcyNDAsIDkyNDk1LCAwLCAwLCA2NTc1OCwgMTI3NTAsIDQxODEsIAorICAgIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCA2NTAxNCwgMCwgMCwgMCwgMzYzOSwgCisgICAgMTE5NTg4LCAwLCAwLCAxMTg5MDQsIDEwMDczLCAxMjAyMDYsIDEyODg2MiwgMTI3MTg2LCA2ODQwOSwgNDI4NDQsIDc0OTgsIAorICAgIDEwOTgsIDkyNTY1LCAxMjAyMDUsIDAsIDAsIDEwMjA3LCA4Nzg5LCAwLCAwLCAwLCAwLCA5MjM0LCAwLCA2MTgyLCAwLCAKKyAgICA2NTA1OCwgMCwgMCwgMCwgMCwgNTQ3MSwgOTQ2MSwgNTU3MywgMTE4OTM2LCA1NDczLCA0NCwgMCwgNjYyNDQsIDExODkwNywgCisgICAgMCwgNjYyMzgsIDEyODQ0LCAwLCAxNjIyLCA3NzY3LCAxOTAwLCA0MTMzOSwgMTE0NTgsIDAsIDAsIDY1ODEsIDU1NzYsIDAsIAorICAgIDY0NDA1LCA0MTMzNywgMCwgNDE2MzEsIDg5NDcsIDY4MzkwLCAxMjc4NDQsIDQxNjk0LCAwLCAwLCA3OTA4LCAwLCAxMDQwOCwgCisgICAgNjU3OSwgMCwgNjQ2MTgsIDAsIDEyMDE0NywgMjEzOCwgNjU4MywgNzc2MSwgMTI3MDEwLCAxMjA1MDQsIDE5NDgyOCwgMCwgCisgICAgNTA1OCwgNDEwMTAsIDk5OTIsIDEyODI5OSwgNTA1NywgMCwgMCwgNzQ1MzgsIDUwNTQsIDExODk1MSwgMTk0OTcxLCAKKyAgICA3ODYwNiwgMCwgMTQzNywgNDE2MTcsIDY1OCwgMzQ5NywgMTI4NTA5LCA3NDg2LCA1MDYxLCA1MDYwLCA0MjM1LCAwLCAwLCAKKyAgICAwLCAxMjExMywgNDIzNiwgNDcyNywgMCwgMCwgNzY5MywgMTA3NDksIDAsIDc0ODgsIDU3NzMsIDk3OCwgMTI4MTM0LCAwLCAKKyAgICA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgMTI4NzAwLCA5NzQ4LCAwLCAxMjc1MjQsIDAsIDAsIDAsIDAsIAorICAgIDE5NTA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM0MSwgMTE5NTk2LCAyMzc5LCAxMTMyNSwgMCwgNjQ2NjgsIDY3ODU0LCAKKyAgICA4MTI1LCAxMjA1NDUsIDY3NDMsIDExOTE3NSwgOTE3OTQwLCAyMzY5LCAwLCAwLCAwLCAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgCisgICAgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgMCwgMjY0LCAyMzc1LCA4MDYwLCA2MTk0LCAxMTk4NTgsIAorICAgIDE4NDQsIDExOTA4NCwgMCwgNjAxOSwgMCwgMCwgNjk2MSwgMCwgMTE4ODM5LCAwLCA4ODAwLCAwLCA0Mjg2MiwgNDQ2MywgCisgICAgNjU1ODEsIDYxOTIsIDE5NDY3NiwgNDI3NzEsIDAsIDkyMzMzLCA3MjUsIDY1MDQyLCAxMTg3OTcsIDEyMDgwMCwgMCwgCisgICAgMTI4OTIsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI2MSwgMTIwNzA3LCAwLCAwLCA1MDc0LCA1MDczLCAxMjg3OTAsIDg5ODMsIAorICAgIDExODk4MSwgNzQ0OTMsIDAsIDUwNzIsIDEyODA3MSwgNjE5OCwgMTE2MTQsIDAsIDE5NiwgMCwgMCwgMCwgNDkyOSwgCisgICAgMTIwMzQyLCAwLCAwLCAwLCAwLCA0Mjg0NywgMCwgMCwgMCwgNDkzNCwgMCwgNDEzMjMsIDk3NTgsIDAsIDkyMjg5LCAKKyAgICAxMjc5MTcsIDQyNTg0LCAwLCA0MzI5LCA0MTMyMSwgNDk3OSwgMzA0OCwgNzc1MiwgNDEzMjAsIDAsIDc0NDE4LCAxMjgxOSwgCisgICAgMCwgNTA3MSwgMCwgMzY0MiwgMCwgNTA3MCwgMTAwNDIsIDExODgzNSwgMzk4NywgNTA2OCwgMCwgODkwOSwgNzg2NTAsIAorICAgIDc4NjQ5LCAwLCAxMDYzNiwgNzM5ODEsIDExODA2LCA0MzE2NywgNDUzMSwgMTI0NSwgOTEwNSwgNjY0NjMsIDQ5MjEsIAorICAgIDEyMDIxOSwgNDkyNiwgNjU1NDQsIDczODg0LCAxOTQ2MTksIDAsIDAsIDY0NzA5LCAwLCAxOTQ2MjAsIDc4ODgwLCA0OTIyLCAKKyAgICAzMjUsIDk5MiwgMTE5NTY4LCA0OTI1LCAwLCAwLCA5NTI2LCA0OTIwLCAwLCA5NDgsIDAsIDEyMDIwOCwgNDkzMCwgMCwgCisgICAgOTIxNzUsIDEyMDI3NSwgNDkzMywgMCwgMCwgMTE4OTg1LCA0OTI4LCAwLCAwLCA3NDc3MCwgMTIwMTk0LCAwLCA3MjIsIAorICAgIDE5NDkzNCwgMTk5MDgsIDEyNjM3LCAxMjc0ODUsIDExOTg1NSwgODc1MywgMTUwOSwgMCwgNTQ2OCwgOTUxMSwgMTI3NDc0LCAKKyAgICAxMjc0NzcsIDE2NzIsIDYyMDUsIDEwODY0LCA3NDU4NiwgMTI3NDgwLCA5MjMxMCwgMTI3NDY2LCA3ODU1NSwgMTI3NDY4LCAKKyAgICA3Mzg2MywgMTI3NDcwLCAxMjc0NzMsIDQxNjA3LCAxMjAxMTUsIDE2NzksIDEyMDExNiwgMTIwMTgwLCAxMjAxMTMsIAorICAgIDEyNzQ2MiwgNzAwNSwgNDE2MDksIDk1ODAsIDAsIDQwMSwgMCwgNDM3NzksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMCwgCisgICAgODE0MywgMTI3MTE1LCAxMTk4MywgOTIyNDksIDYyNCwgNzQ1MDgsIDQwNTcsIDQzNzg4LCA1MDc4LCA3NDI1OCwgMTI0NzgsIAorICAgIDAsIDUwNzYsIDAsIDE5NDYwOSwgMCwgMTIwMDk3LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgCisgICAgMTIwMTAyLCA3MTM4LCAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCAKKyAgICA2NDc3NSwgNTAzNiwgNTAzNSwgMTIwNTkwLCA0MjYwNCwgMCwgMCwgODA3NCwgMjc1LCAxMzI5MSwgMTkwNywgNzg4MzgsIAorICAgIDQ0MzIsIDEyNzI3MSwgNTAzMywgMTI3MjczLCAxMjcyNzIsIDQ4MzYsIDM4ODgsIDczNzkyLCAxMDcyOSwgNjQ1NDYsIAorICAgIDEyNzI2MiwgNDM3MDQsIDEyNzI2NCwgMTI3MjUxLCA2NzU4OCwgMTE5MDAwLCAxMjcyNTIsIDEyNzI1NSwgODg1OCwgNjQwOSwgCisgICAgMTI3MjU2LCAxMjAyNTIsIDEyODEwMCwgMCwgMCwgNjYzMjEsIDAsIDEyODE0LCAxMjcyNDgsIDM0MzIsIDEwMjE4LCAwLCAKKyAgICA2MDk0LCA3NjQxLCA0MjQ0NSwgMCwgOTI0ODcsIDQyNDA2LCAxNjc2LCA3NDMyMCwgMTk0NjA3LCAwLCA1MDMwLCAwLCAwLCAKKyAgICAwLCA3Mzg2OSwgOTYyMiwgMCwgMCwgNjc4NywgMCwgMCwgMCwgMCwgMTA1NDQsIDEyOTE5LCAwLCA5MjIxOCwgMCwgMCwgMCwgCisgICAgMTIwNzg5LCAwLCA5NDcsIDExOTgzNSwgMTk0NTg2LCAxOTQ1ODUsIDEwOTY5LCAxMTk5MzUsIDc2MTMsIDkyNTYyLCAKKyAgICAxMTk5MzYsIDQ3OTUsIDExOTkzMCwgNzAxOCwgNzM3NiwgMTIwMTgxLCAxMjAxOTIsIDEyMDI2OCwgMCwgNDM1NjcsIAorICAgIDc0MDU2LCA5MTc5MTAsIDExODk2MywgMTE5OTE5LCA3MjE2LCA2NTIzMiwgNzIxNywgMjUxLCA3MjE4LCA3ODk1LCA0Mzk1LCAKKyAgICA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgMTE5OTIyLCA3MjE0LCA3MjE1LCAwLCA3NDE0MSwgODg4MCwgCisgICAgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCA0Mjg2MSwgMTExMywgNzIzNiwgNzkxNSwgCisgICAgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAyNDg5LCA2NTYyNCwgODE1MCwgMTM1OSwgCisgICAgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIDEyMDg0LCAxMjczMjQsIDEyNzMyMSwgCisgICAgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAxMjI4MywgMTYxNiwgMzc5NSwgMCwgCisgICAgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgMzIzOSwgMTI3MzExLCAwLCAwLCA4NDMxLCAKKyAgICAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCA1MDQwLCAwLCAwLCAwLCA3ODQyMCwgMCwgCisgICAgNTAzOSwgMCwgNzg0MTgsIDAsIDUwMzgsIDAsIDAsIDEzMTg0LCA3NDI5MywgMCwgNjQ2NDgsIDAsIDkzNTksIDc4NDE2LCAwLCAKKyAgICAxMjg3NzAsIDY1MTU3LCA2NjYyLCAwLCAwLCAzODYzLCA3MzkwOSwgNDgzNSwgNTUyNjYsIDQzNDMyLCAxMjc4MjIsIDQzMDksIAorICAgIDcxMjcsIDE5NDU2OSwgMCwgMTk0NTY4LCAxMzAxLCAwLCA0MjU4OSwgNTY5LCAwLCA3MzgxMywgNzExLCA0Mzg5LCA3MTMzLCAKKyAgICAwLCA3Mzg4MCwgMTE2MTAsIDExMzY4LCAwLCAxOTQ1NzAsIDQxMzMxLCAxMDA2LCA3NDI0MCwgMCwgMTU1MCwgODIwMSwgCisgICAgNzM3MzcsIDc2MjcsIDU0OTksIDUwMzEsIDc3OTA4LCA0MjczOCwgNjU3ODQsIDc3OTA3LCA2NTI2NywgMzc1OCwgMCwgCisgICAgNjU3ODEsIDY0NzM0LCAwLCAyNDQwLCA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIDUwMDgsIDAsIDIxMTgsIDAsIDEyMTIxLCAKKyAgICA4MjU1LCA1NTEyLCA3Mzg3NSwgMjEyOCwgMjEzMCwgMjEzMSwgMjEyNiwgMjEzMywgMTExOSwgMTI3MDY4LCAyMTE0LCAKKyAgICAyMTE2LCAyNDU1LCAwLCAyMTIyLCAyMTIzLCAyMTI0LCAyMTI1LCAwLCA4NzE0LCAwLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIAorICAgIDEyNzkwNywgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCAKKyAgICA0MjY0NywgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIAorICAgIDkxMTcsIDAsIDEyMDAzLCA1NTEzLCA2NjY2LCA1MDUzLCA3NDIzMCwgNTUxMCwgNzg0NTEsIDAsIDc4NDQ3LCAyNDcwLCAKKyAgICA3ODQzNywgMCwgMTkyNSwgMCwgOTIyMzcsIDc0ODA3LCAwLCA1MDQ4LCA1MDQ3LCAwLCAwLCAwLCA5MjMxMywgMCwgNzQ0OTcsIAorICAgIDkyMzk1LCA4MDg5LCA2OTI5LCA2MzksIDAsIDY4MTc5LCA2NDQ0MiwgMCwgOTIzNDgsIDQ1OTksIDQxNDAyLCA2Njc0LCAKKyAgICA0MzM5NywgNDMyOTQsIDE0NzYsIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCA2OTUxLCAwLCAwLCAzNTMwLCAKKyAgICA5NzUwLCAxMjgzMTcsIDAsIDY2NTYsIDkyMzY3LCAwLCA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIDg5NjcsIDAsIDUwNDUsIAorICAgIDAsIDE5MTYsIDc5ODYsIDUwNDQsIDEyMDU1NiwgOTAwNiwgMTMxMjgsIDUwNDMsIDAsIDc4NTMsIDc0MDY4LCA3NDAwNCwgCisgICAgOTY2OSwgMTIzNDEsIDEyNzAzLCA4NDAyLCAwLCAxMTkwNzAsIDkxNzYwMCwgNDE3NTAsIDM1ODYsIDY0NTA4LCA0MzE0OCwgCisgICAgMCwgMCwgMTE5NjA2LCAwLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIAorICAgIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgCisgICAgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIDAsIAorICAgIDE5NDg1MSwgNjYyMDAsIDAsIDAsIDAsIDc4NDIzLCAwLCAwLCA4NzExLCA2MTgzLCAwLCAwLCAwLCAxMjA0NDgsIDc2MjMsIAorICAgIDExODkyNSwgMTk0ODUzLCA5MjM1LCAxMjc2MCwgNzQxNzYsIDY5NjYyLCA2NjQ0NSwgNDM1NDAsIDEwMDYyLCAzNzQzLCAKKyAgICAxMTUxNCwgMTEwNzgsIDAsIDEyMTM2LCAwLCAwLCAxMjA0MzUsIDAsIDc3MjYsIDAsIDE5OTIyLCAyNjcsIDMzOTMsIAorICAgIDQyMTk4LCAxMzcxLCAxOTQ4NDksIDY5MjMzLCAyNDU4LCAwLCA2MjAxLCAwLCA0MTA3NCwgNDI2NiwgMTA2NTIsIDQxNjEyLCAKKyAgICA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgMCwgMCwgMzM5MSwgNDEwNzUsIDI0NzYsIDAsIDEyODAxNywgMCwgMTA2MjUsIAorICAgIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgMTI3NTM3LCAxMzAxNCwgMTMwMTMsIDAsIDY2NzMsIDAsIAorICAgIDAsIDAsIDEyNDM4LCAwLCAwLCAwLCAwLCAwLCA5MDUzLCAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDAsIAorICAgIDY2NjAsIDc4NzU4LCA5MTc3NjAsIDkxNzc5MywgNDIyMTIsIDEyNjI5LCAxMTQzNSwgMCwgNTUyNTYsIDY1NTM4LCAwLCAKKyAgICAxMjc5NDAsIDAsIDc0NTQ3LCAwLCA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIAorICAgIDc4MDk5LCAxMjcwODUsIDAsIDAsIDQyODcsIDgyNzYsIDQ5MDIsIDExMzEsIDAsIDc4NDU4LCA2NjcyOCwgMTgxNiwgMCwgCisgICAgNDI1MzMsIDE2OCwgNDI4NDUsIDQ4OTgsIDY0Mjk4LCAwLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIDM2NTMsIDAsIDc5MSwgCisgICAgOTE2MiwgNjk3NywgMCwgMTE5Mjk4LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIDAsIDc1NTcsIAorICAgIDExOTMzOSwgMTE5MzAxLCA4MjM0LCA3MjQxLCAwLCAxOTQ5OTQsIDExOTE2NywgMTk0OTk2LCAxMjgxMSwgNjU5MjUsIAorICAgIDM5NDYsIDc4MDc4LCAxMDk5OCwgNzgwODAsIDY3MywgMTk0ODY3LCA2NDM5NywgMTI4Mjc2LCA3NDU5OSwgNzg0NDksIAorICAgIDg4OTAsIDE5NDk3NywgMTk0OTc2LCAyNDQ4LCA3ODA4NSwgMTAyNjcsIDg0MjQsIDI0NTIsIDc4MDgzLCAxOTQ4NjQsIAorICAgIDg3MjksIDc4NDU2LCAwLCA3ODQ1LCA5MTc5MTcsIDc4NjkyLCA0NDA4LCA0MTIyLCA2NzcyLCAxMTAzOSwgODcyMywgCisgICAgMTk0OTkwLCAxMjc4MzMsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDkyMjg2LCAyNDM4LCA2NDg1NSwgMTE5MzAwLCAxMTkyOTksIAorICAgIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAwLCAwLCA0MTk1MiwgMCwgCisgICAgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAxOTkxNSwgNTI3NywgCisgICAgMTI5NjMsIDEyNzg2NCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIDAsIDExODg3MywgMTI3MSwgMCwgMCwgNjYwMjQsIAorICAgIDQxNDgyLCAzODY0LCA3NDUzOSwgMCwgMzg3OSwgMCwgMTI5NzgsIDQxNjYsIDQ1NzQsIDAsIDc1NjcsIDc0NTksIDAsIAorICAgIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDkyNTQ4LCA1NzU5LCAwLCAwLCA0MTM4OCwgOTIzNjIsIDQxMzkyLCA2NDI4OCwgCisgICAgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDAsIDcwMCwgMCwgNTU1MywgMCwgNzA4OCwgNTM1NiwgNzQ5OSwgNzgxMTAsIDY2NTk2LCAKKyAgICAwLCAwLCAxMDI2MywgNTU1NCwgMCwgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgMCwgMCwgNzYxOCwgODUxNywgMTE0NTUsIAorICAgIDc4NDQwLCA2NDYzMiwgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgCisgICAgNjY2OCwgMTk1MDY3LCAxOTUwNjYsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgCisgICAgMCwgNDI2OSwgNzM4ODUsIDkxNzc3NSwgNDI4NDYsIDY5NjQ0LCA5NTAsIDAsIDkyMjczLCA2NjU4MCwgMTE4ODk1LCAKICAgICA2NjY4MywgMTA1NTQsIDkxNzc3OCwgMTE5MTIxLCAwLCA1MDk4LCA5MTc3NzAsIDAsIDExOTA5OSwgNTA5NywgNDkzNSwgCi0gICAgOTg0OCwgMTAzODEsIDAsIDAsIDAsIDM2NTEsIDAsIDAsIDAsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgMCwgCi0gICAgMTkzMiwgNTEwMCwgMTQzOSwgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDAsIDE0NDEsIDQyMDg3LCAzMDYzLCAKLSAgICA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIDE5NTA0NSwgMTk1MDQ0LCA5MDc4LCAKLSAgICA4NTQ1LCA2NjM1NiwgMTk1MDQ4LCAwLCA5MTU0LCA5MTE4LCAwLCAwLCAyNjc2LCA3NzUwLCAwLCA3MzgxMiwgNjE5MCwgCi0gICAgODU5OSwgMTk1MDUzLCAwLCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1OCwgMTk1MDMzLCAwLCAxMjEyOSwgMCwgODQ4MSwgMCwgCi0gICAgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTk1MDM3LCA1MjAzLCAxOTUwMzksIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIAotICAgIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIDY2NTcsIDIwNywgMCwgNDI3NSwgNzQ4MTksIAotICAgIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCAwLCA1MTAzLCAwLCA2NDM0OCwgNDEzNjgsIDAsIDQ4OCwgMCwgMCwgMCwgMTAxNTcsIAotICAgIDAsIDQzMDM0LCAxMTQzOCwgMCwgMCwgMCwgMTE4ODM5LCA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDE5NTAyNSwgCi0gICAgNDEzNjcsIDUxMDUsIDE5NTAzMCwgMTk1MDI5LCA2NDc2LCA1MTA0LCAwLCAzMDQsIDMxNzYsIDAsIDAsIDkzMiwgMCwgCi0gICAgNjU2NywgMjM4LCA3NDUyMiwgMTk1MDExLCAxOTUwMTAsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgMTIwMTg3LCA0MTA0NCwgCi0gICAgNjc2NDAsIDAsIDY0ODE0LCA5OTEyLCA2NTkzOSwgMTA2NzAsIDc0MDkzLCAxMzI3MywgMCwgMTI1NTIsIDE5NTAxOSwgCi0gICAgODgwMywgMzA5LCA2NjIyLCA4MTUxLCAxMDg1OCwgMTk0NTk2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIDEyNTUzLCAwLCAKLSAgICA0MzI3NSwgNjk1MCwgOTcxMiwgMCwgMCwgMCwgNjUxNjUsIDAsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCi0gICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDAsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAwLCAKLSAgICA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIDAsIDAsIAotICAgIDExOTU3OSwgMCwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgMTIwNzcsIDAsIDAsIDAsIAotICAgIDQyMzk2LCAwLCAzNDc1LCAwLCAyNDc5LCAwLCAzNjMyLCAwLCAxMDY5OCwgMCwgMzY0OCwgMTk0OTYwLCA3NDg0NCwgCi0gICAgNjc2MzksIDM2MzYsIDY3ODk0LCAzNjUwLCA4ODM3LCA2NTIyOSwgMTg0MywgNDIyODMsIDAsIDQxNTYyLCAwLCA3NDU0OCwgCi0gICAgMCwgMzY0MCwgMCwgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgMTk0OTUyLCAxOTQ5NTEsIAotICAgIDAsIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxOTQ5NTUsIDE5NDYwNiwgMTk0OTU3LCA2NzYxOSwgCi0gICAgNjYzNjcsIDE5NDk1OCwgOTYzNCwgMCwgOTk4OCwgMCwgNDEwNjgsIDAsIDAsIDY1MjY0LCAwLCAwLCA5MTc5MjMsIDAsIAotICAgIDc4NSwgODIzNiwgMTk0OTQyLCA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAwLCA5MjUsIDAsIDAsIDQxOTg1LCA0MTA3MSwgCi0gICAgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIDAsIDkxODYsIDY0NTgwLCA0MDE2LCAwLCAwLCAzODEsIDAsIDAsIDQyMDc3LCAKLSAgICAwLCAxOTQ5NDYsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAwLCA0NTg1LCAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIAotICAgIDgxMiwgMzYxNSwgMCwgNTE3OCwgMTk0OTI5LCAxMjA1NDgsIDEyMDUwNiwgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAKLSAgICAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCAwLCAwLCAyNDQyLCAxMDcwMywgMTk0OTQwLCAKLSAgICA2NzYzMiwgMCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgMCwgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgMCwgMCwgNDIyODgsIAotICAgIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgMCwgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAzODgzLCA2NDM4OCwgNDI0NzksIAotICAgIDAsIDQxMTE3LCAwLCAwLCAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIDI3MTUsIDgwNiwgMCwgNDE4ODQsIDAsIAotICAgIDcwMjcsIDY0NzMxLCAwLCAwLCAwLCA2NjMyNSwgMzQ2NSwgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCAwLCAKLSAgICAxMjc1MiwgNTgzMywgMTQzMiwgMCwgNDE4ODMsIDczOTEyLCA5Nzk5LCAwLCA0MTg4NiwgMjQ4MCwgMCwgNDMyMTksIDAsIAotICAgIDY0OTQsIDU1MzcsIDAsIDAsIDAsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIDAsIDAsIDEwNjIyLCAwLCAKLSAgICAwLCAwLCA2NTY2LCAwLCAwLCA3Mzc4MCwgMCwgNjQ4NjQsIDAsIDE5NDU4OCwgMCwgODI4NCwgMCwgMCwgMzU4OSwgMCwgCi0gICAgNDAzNSwgNjQ5MiwgMCwgNDI2NSwgNjY0MiwgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIDExOTIxNiwgMjQ4OCwgMCwgCi0gICAgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCAwLCA3NTI4LCAxMDU1MCwgMCwgMCwgMCwgMCwgMCwgMTM3NCwgNjQ4NzgsIAotICAgIDExOTAxNCwgMCwgNDIzODksIDQxMzc0LCAwLCAwLCAwLCA0MTM3NywgMCwgMCwgNDAwLCAxMjU5NywgMCwgMCwgMCwgNjY2MSwgCi0gICAgMCwgNjQ4MjcsIDAsIDczODE3LCAzOTAsIDAsIDc0NzU1LCAwLCAzNDczLCA3NzE4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTk2OSwgMCwgMCwgODAwNCwgMTg4NywgMCwgMCwgODA4MCwgNzAwNiwgMCwgMCwgMCwgMCwgMTU0NCwgMCwgMCwgNjQ2NzcsIAotICAgIDEyMDcxNiwgMCwgNjE0NiwgMCwgNzcxLCAwLCAwLCAxMjgxMiwgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAKLSAgICAwLCA5NTMsIDEyOTE3LCAwLCAxMjMwMCwgMCwgMTE0OTEsIDk3MjQsIDEwMzQxLCAwLCA5NTI0LCA3NDkwLCAxMTM4OSwgCi0gICAgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgNDcxLCA3NDg0LCA3NDgyLCA3NDgxLCA3NDgwLCA3NDc5LCA3NDc4LCA3NDc3LCAKLSAgICA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAwLCAKLSAgICAxMjAyMjIsIDEwMDQ5LCAwLCAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMCwgMCwgMTMzMDYsIDEwNTMzLCA3ODcwLCA3Mzk0OSwgCi0gICAgNzYyNSwgMCwgMTIwNTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgMCwgMTIwNjk5LCAwLCA2MDE5LCA0MjU2LCAKLSAgICAxMjA3NzYsIDc0MzgwLCAwLCA3Mzg0NywgNzM4NDQsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgMCwgCi0gICAgMTIwMDAwLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgCi0gICAgMTIwNTY2LCAwLCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgMCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAwLCAKLSAgICAxNTYwLCAxMjAyMDksIDAsIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIDAsIDExMTgsIDAsIDAsIDAsIDEwODEsIAotICAgIDc0MzYsIDAsIDcyNTIsIDAsIDU5OTYsIDAsIDQ5MDMsIDAsIDQxMzg2LCA1MTYyLCAxMTkxODksIDEzMzAsIDAsIDY0NTMwLCAKLSAgICAwLCAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIDAsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAwLCAwLCAKLSAgICAwLCAwLCAxMjcxNSwgMCwgMCwgMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCAwLCAwLCAwLCAxMjY5ODQsIAotICAgIDAsIDkzMzQsIDAsIDAsIDAsIDc5NzUsIDAsIDAsIDAsIDY2NjIxLCA0ODg0LCA2NjU5NywgMCwgMCwgMCwgNjMxMywgCi0gICAgNjU1MTMsIDAsIDAsIDAsIDAsIDIzNDUsIDAsIDQ2MywgMCwgMCwgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCAwLCAwLCAKLSAgICA0MjI3OSwgMTk0NTc3LCAwLCAwLCAwLCAwLCAwLCAxMzI0OCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY2MywgMCwgMCwgMCwgMCwgCi0gICAgMjQ4MiwgMTQ3MSwgMCwgMCwgNDIyNDcsIDEyMzc4LCA3MzkyNSwgMCwgMCwgMTIzNzQsIDAsIDAsIDAsIDAsIDI0NjAsIDAsIAotICAgIDExOTQ0LCAxMjM3NiwgMCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIDU4NzAsIDAsIDIwMjQsIDAsIDAsIDAsIAotICAgIDUzOSwgMCwgMCwgMCwgMzg1MywgNjUxODAsIDAsIDEyMDc5NiwgMTIwMjQ1LCAwLCAwLCA4NjU5LCAwLCAxMjQ3NCwgMCwgCi0gICAgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCA0MTYyLCAwLCA0MjYwLCAxMjk1MywgMCwgMTIwMDg5LCAxMjQ3MCwgMCwgNzQxODksIAotICAgIDI3NDIsIDEyNDc2LCAxMTc5OCwgMTA5NDYsIDAsIDUwMDAsIDAsIDAsIDAsIDAsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxMjA1ODIsIDAsIDAsIDEwMzAxLCAxMDMzMywgMTAzOTcsIDAsIDAsIDczNzkxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAwLCA4Mjc1LCAzODkzLCAwLCAwLCAwLCA3MjIxLCA0MjE0NywgCi0gICAgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAxMjUxNiwgMCwgMCwgMTE5MDE3LCA3NDUzNywgMTA4OTIsIAotICAgIDgyMzEsIDAsIDY0NzMsIDQxOTY4LCAwLCA0MTk3MywgMzU5MSwgNDE5NjksIDAsIDI0NTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgMCwgMCwgNjg3LCAwLCAwLCAwLCAKLSAgICAxODQwLCAwLCAwLCAxMTk4MDksIDQ4ODMsIDI4NSwgNDcyMywgMCwgMCwgNDQ1OSwgNzQ1NzcsIDAsIDQxNzIwLCAxMTA4OSwgCi0gICAgMjQwLCAxOTkwNiwgMCwgMTE5MjQ4LCAwLCA5NzQzLCAxMjAyMzIsIDEzMTM0LCAwLCAwLCAwLCAwLCAwLCA0MjYzNCwgMCwgCi0gICAgMCwgMzA4MSwgMTE0NjMsIDEyMDIzMCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAxMTkwMjMsIAotICAgIDE3MjksIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDEyMDIzNSwgNjYyMDEsIDAsIDY2NTc4LCAKLSAgICA1MDAxLCA0MTg3OSwgMCwgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIDczODg5LCA3NDE4MiwgCi0gICAgMCwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCAwLCAxMjAwODMsIDYzODczLCA4NDkxLCAwLCAwLCAwLCAKLSAgICA0NTMwLCA0MjQwOSwgMCwgMCwgMjcyMSwgMTIwMDc0LCAxMTkwOTYsIDE5OTI5LCAwLCAxOTQ1NzQsIDAsIDQyNDIsIDQyNjQsIAotICAgIDAsIDAsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgCi0gICAgNDQzNywgNzM5NDgsIDAsIDAsIDY1MTc5LCA0MjE3NCwgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCAKLSAgICA0MTM4MCwgMCwgMCwgMCwgNjY2NjcsIDAsIDAsIDAsIDEyMDU3OCwgNDI1NjYsIDAsIDAsIDUwODgsIDY5NDgsIDAsIDg1MjQsIAotICAgIDAsIDAsIDEyMzg1LCAwLCAwLCAwLCAxMzg2LCA2NTAzNCwgMTE0ODAsIDYxMTYsIDY1MDM5LCA2NTAzOCwgMTIzOTIsIAotICAgIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAwLCA3MTAsIDAsIDExNjYzLCAxNjY2LCA0MjA5MSwgCi0gICAgMTE5NjU3LCAxMjM4MywgMCwgNDIwOTIsIDAsIDQyODksIDAsIDYzODk2LCAxMjA2MSwgNDIwOTYsIDAsIDMzNjIsIDEyMzc3LCAKLSAgICAwLCAwLCAwLCA3NDYxLCA3MzkwMSwgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgCi0gICAgMCwgMTIzNzksIDAsIDEyMDgxOCwgNDE5NjQsIDAsIDYzODQzLCAxMjM4MSwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCAKLSAgICA2Mzg0MCwgMCwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIDEyOTMzLCA0MzE3NywgMTIzNzMsIDAsIDEzMDAwLCAxMzUxLCAwLCAKLSAgICA4Njk4LCAxMjY2NSwgMCwgMTkzMCwgMCwgMCwgMTI0MjcsIDAsIDAsIDEzMDMxLCAwLCAwLCAwLCAzNjU3LCAwLCA2NTIwMiwgCi0gICAgNjAwMCwgMCwgMTI0MjYsIDAsIDAsIDQxNzQwLCAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIDEyNDI5LCAKLSAgICA5Njk1LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCA0MTc1NSwgNjc2LCAwLCAwLCA2NjY2NCwgNzQ0MjcsIDAsIDM1MzYsIDAsIAotICAgIDk3NTIsIDAsIDYxNjIsIDAsIDAsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgCi0gICAgMCwgMTIwNTMyLCA3NDU0OSwgMTE3OTYsIDQwOTcwLCA0MTgzMCwgMCwgOTE3Nzk5LCA4MzA4LCA5MTc3OTcsIDkxNzc5NiwgCi0gICAgMCwgNjc4NjQsIDkxNzgwMSwgOTE3ODAwLCAxMjMzNiwgNDEzNSwgMCwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCAKLSAgICA2Mzg2MSwgMCwgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgCi0gICAgMCwgNzQ1NjAsIDQxMzcsIDgwODIsIDAsIDExOTA2MiwgMCwgMCwgNDU5MSwgMCwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCAKLSAgICA1NjEsIDEyMTU5LCAxOTUsIDAsIDQxNTAxLCAwLCA0MjAzMSwgNTcxOSwgNzE3MiwgMCwgODM2OCwgMCwgNDE0OTksIDAsIDAsIAotICAgIDQyMjQyLCA0MTQ5OCwgOTE3Nzk0LCA0MjAyNSwgMCwgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIAotICAgIDExOTIxMywgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCAKLSAgICA3MjQ2LCA0MjA4NiwgOTE3NzkwLCA5MTc3ODksIDAsIDAsIDAsIDAsIDAsIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCA5MTc3NzYsIAotICAgIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCA5MTc3ODAsIDkxNzc3OSwgMTI0MzEsIDg2NjgsIDEyNDM0LCAwLCA5MTc3ODIsIAotICAgIDU5OTksIDAsIDc3MTIsIDEyNDMyLCAwLCAwLCAxNzI2LCAxMDE1LCAwLCA4MjEyLCAwLCAwLCA0MjQyMywgMTE5MDY2LCAwLCAKLSAgICAwLCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgMCwgNDIwMjEsIDAsIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgCi0gICAgNjUxNDMsIDAsIDE5NTAxNiwgMCwgMCwgMTEzNDgsIDAsIDAsIDAsIDAsIDAsIDE5OTE0LCAxMjE3OSwgMCwgOTY0OCwgMCwgCi0gICAgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIDY0NjUxLCAwLCA0MTUwMywgCi0gICAgMCwgMTEyNjUsIDAsIDAsIDAsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIDAsIDkxNzc2NiwgMTI0MTYsIDkxNzc2NCwgMTE5NjA4LCAKLSAgICAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgMzg4MiwgODUzMiwgOTE3NzcxLCAxNTczLCAwLCAxMTk4NDcsIAotICAgIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxOTQ3ODIsIDEyNDE0LCA4Mjg3LCAwLCAwLCA2ODEwOCwgMTE0MywgCi0gICAgMTE5MTY5LCAwLCAxMjQxNSwgNjYyNiwgNDI3NjMsIDAsIDExODg4NCwgOTAyMSwgMTIwNzgzLCAwLCAxMTcyNCwgMCwgMCwgCi0gICAgMTI3MTA0LCAxOTQ3OTQsIDAsIDAsIDgwMjcsIDEwOTk3LCA5MTcxLCAxMjc0MSwgMTE0MDAsIDc0MTk3LCAxOTQ3OTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyMDE5MCwgMTk0NzczLCAwLCAxOTQ3NzIsIDQyMzY4LCAwLCA3NzE1LCAzODgxLCA0MTQ4NywgCi0gICAgMTIxMTgsIDQyNTE0LCAwLCAwLCAwLCAzMDA5LCA0MTQ3NiwgNDE0ODksIDAsIDMwMDcsIDE0NDgsIDMwMTgsIDAsIDM4ODksIAotICAgIDg1MjEsIDUwODMsIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAwLCAzMDE0LCA1MDgxLCA2NTg1MywgMCwgMCwgCi0gICAgMTIwMTgzLCAwLCA1MDc5LCA2NDgwMiwgNjUwOTUsIDQ1OTcsIDY1NTMyLCAwLCAwLCAxMjM3MSwgMCwgODQwNywgMCwgCi0gICAgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDAsIDAsIDEyMzY3LCA0MjE3MCwgMCwgMCwgNjI5LCAxOTI0LCAwLCAKLSAgICAxMjAzNywgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCA2NjY4OSwgMCwgMTIwODE1LCAxMjM2OSwgMTA2NDksIDAsIAotICAgIDUwNzcsIDEyNzEwOCwgMTA4ODAsIDYzOTI3LCA1MDc1LCAwLCAwLCA2NTA3NSwgMCwgMTEwMDcsIDAsIDY2NjU5LCAwLCAwLCAKLSAgICA2NjY4NCwgMCwgMzQzNCwgNDk1NCwgMTkwNCwgMCwgNTI2NiwgMTI2OTgwLCA1MjcyLCAxMDQ5OSwgNDUwNywgOTU3OCwgCi0gICAgNjM5MjMsIDEyMDE3NywgNzk3OSwgMCwgOTgzMSwgMCwgMTk0OTI2LCA0NjEsIDk4MDMsIDAsIDQ1MDQsIDE1MDUsIDAsIDAsIAotICAgIDUyNzYsIDQzMDIxLCAwLCAwLCAwLCAwLCA2NjQ2MSwgNTE3NywgNDEzMjQsIDEyMDU1LCA4NzIyLCAwLCA0MTMyNywgMCwgCi0gICAgNjY2OTUsIDQxMTQsIDQwOSwgNDM4MywgODkwMCwgODk0OCwgNDEzMjUsIDAsIDcyMSwgMTAxODIsIDkxMDgsIDAsIDAsIAotICAgIDExOTE4NSwgMCwgMCwgMCwgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgMCwgMCwgMCwgMCwgMCwgNDE1NzYsIAotICAgIDc0MTIxLCAwLCAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgCi0gICAgMCwgMjY3MCwgNDE2NywgMCwgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA3Mzg1NywgNzM4NTQsIDExNzM3LCAKLSAgICA5NzIxLCAwLCAwLCAwLCAxMTc0MiwgMCwgMCwgMTE0OTMsIDEyMzM0LCAwLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIAotICAgIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA0MjAwNSwgNjU4MDYsIDAsIDAsIDQyMDAyLCAKLSAgICAxMjQwNCwgMCwgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDAsIDQ5ODMsIDAsIDg2MSwgMCwgMCwgMCwgMCwgNjU1NzcsIAotICAgIDAsIDAsIDAsIDExOTU2LCAwLCAwLCAwLCA5NjE2LCA2NjMxLCAwLCAxMjgxNiwgNzQ1ODMsIDAsIDEyNzEwLCAwLCAxMjcyMSwgCi0gICAgNDEwMSwgNjYxODUsIDAsIDU5OTIsIDc2MTYsIDAsIDAsIDEyNTc3LCAwLCAwLCA4NTMsIDAsIDAsIDAsIDAsIDUwMTYsIAotICAgIDQzNTM1LCAwLCA0MjgzNSwgOTQ5MSwgOTE3OTEzLCAwLCA5MTc5MTQsIDAsIDEyNzEyLCA5MTc5MTksIDAsIDY1MDYwLCAKLSAgICAxMjA3OTcsIDk5MDAsIDAsIDAsIDE5NDkxOSwgMCwgMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgMCwgMTIxNzcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ5MDAsIDAsIDAsIDAsIDg5ODQsIDQxMTksIDAsIDg5NzEsIDAsIDQzMTEzLCA5NzAyLCAwLCAxMTAyNSwgCi0gICAgOTI0NSwgMTMwNDgsIDQ5MjcsIDQxMzgsIDAsIDE5NDkyMSwgMCwgMTIzOTcsIDAsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgCi0gICAgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAxNjgwLCAxMDUwNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzI2NywgMCwgNzQ4MzMsIDAsIDU5OTMsIDI4MTksIDAsIDEyNzA2LCAwLCAxODkzLCA3MjY2LCA2MzkxNSwgNzI2NCwgCi0gICAgNzI2NSwgMCwgMTM2MywgMCwgNjM5OTcsIDYzOTEwLCA2Mzk5NiwgMzA3NywgMCwgMCwgMTUxMiwgMCwgMTI1ODksIDQxNDc5LCAKLSAgICAwLCAwLCA0MzMzOSwgMCwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgCi0gICAgODE3LCAxNjY0LCAxODUwLCAwLCAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCAwLCAxMjAwMjAsIDQyMzA3LCAxMjM4NiwgCi0gICAgNDIzMDQsIDAsIDAsIDEyMzg5LCAwLCAwLCA0MTk5NiwgMTE1MjYsIDYzOTg1LCA1ODY0LCAxMTQ3LCA2NjY4OCwgNDI4ODcsIAotICAgIDE5ODcsIDAsIDU0ODAsIDc4NTgsIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCAKLSAgICA0MTY4NiwgNjM5MDUsIDExOTYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgODI0NywgNTA3LCA5MSwgMjA0MiwgMTIwNzc1LCAwLCAKLSAgICAwLCA2NjAyOCwgMTAwMzYsIDQxODQ0LCAxMTk4MzAsIDc3NCwgMTE5ODMxLCAwLCAxMTk4MTUsIDU5OTQsIDEyNTM5LCAwLCAKLSAgICAxMTk4MTcsIDEyMDU5NywgMTE5ODMzLCAwLCAwLCAwLCAwLCA3NzE5LCA2MDI2LCAyNDg2LCAwLCAwLCAxNjIsIDAsIAotICAgIDY1MjE5LCA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDAsIDUyNjIsIDAsIDY2NjU4LCAxMjY4MSwgCi0gICAgNDIzNzksIDAsIDc1MzQsIDEyMjE5LCAwLCAwLCA0MjgxMCwgMTA0OTIsIDAsIDAsIDAsIDQzMTE5LCAwLCAxMjA3NTMsIAotICAgIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDAsIDAsIDAsIDc0MTEzLCAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIAotICAgIDAsIDEzMTEyLCAwLCAwLCAxMjg1OSwgMCwgMCwgNjYzNjksIDU4NjEsIDAsIDExOTk5LCAxMjQwMCwgMCwgMCwgMTI2NDUsIAotICAgIDUxNDYsIDExMzIwLCAwLCA2NzYxMiwgNjUwNDAsIDAsIDY0MTg0LCAxMjk3NCwgNjQxODMsIDY3NjEzLCAxMjA2NDUsIAotICAgIDUxNDcsIDAsIDAsIDc0NTI0LCAwLCAxOTI4LCAwLCAwLCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIAotICAgIDY3NjEwLCA4MjQxLCAwLCAwLCA0MjA2LCAwLCAwLCAwLCAwLCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMCwgMCwgODM1NywgCi0gICAgNDEyNCwgMCwgNjU4MzYsIDEyMDY0MSwgMCwgMCwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAwLCAwLCAKLSAgICAzOTgsIDEzMjc4LCA5NzIzLCA0MTU1MSwgMTIwMzExLCA3OTQ1LCAwLCA0NDAyLCAxMDg5NiwgMTI0MDIsIDAsIDQyMzkyLCAKLSAgICAxMzA1LCAxMjQwOCwgMCwgMCwgMCwgMCwgNDE0NjQsIDEyNDExLCAxMjk2OSwgMTIwODI0LCA0MTQ2NSwgMCwgMTk1MDE3LCAKLSAgICAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAwLCAwLCAwLCAKLSAgICA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgNzM3NzYsIDEyMzY4LCAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIAotICAgIDAsIDAsIDU4MDUsIDAsIDAsIDAsIDQyMTc2LCAxMjM3MCwgMTE2NTUsIDExOTA5NSwgMTA1OTEsIDEyMzY0LCAwLCAxMjM3MiwgCi0gICAgMTIwNjQyLCAwLCAwLCAwLCAwLCAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAwLCAKLSAgICAxMDgwMywgNDEzMiwgMCwgMCwgMCwgMCwgMCwgNzQ4MzcsIDAsIDE0OTksIDAsIDgwNTUsIDAsIDYzOTY1LCAwLCA2Mzk2MiwgCi0gICAgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCA2Mzk2OSwgMTE3ODEsIDYzOTY4LCA4Nzg4LCAxMzU3LCA2NDg1MSwgCi0gICAgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgNjc2MTgsIDEyMDE3MiwgMCwgMTkzMywgMCwgOTU2NCwgMCwgMCwgNzM4NjYsIAotICAgIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgMCwgMCwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIAotICAgIDAsIDAsIDAsIDY2NzUsIDAsIDAsIDY3NTkyLCAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCAKLSAgICA2NDY2MywgMCwgMCwgNDU2MSwgNzcxMSwgMTM5OCwgMCwgMCwgNzQwMzQsIDQxNTY5LCAwLCAxMTQwNiwgODE2NywgMTIxMjcsIAotICAgIDAsIDg0MCwgMCwgMCwgMCwgNjk2NywgMCwgMCwgOTc5NiwgMCwgMzMzLCAwLCAwLCA4MTQ0LCAwLCAwLCAwLCAxMjQwNiwgMCwgCi0gICAgMCwgMCwgNjY3OCwgNzc2OSwgMCwgMTI2MjEsIDAsIDAsIDEwMjI3LCA0NzY0LCA0MzEwMSwgMCwgMCwgNDA5ODYsIDQxMjcsIAotICAgIDY2NDg3LCAwLCAwLCAxMjc1NCwgMTk1MDIyLCAwLCAwLCAwLCA2NzU5NCwgNjU2MDksIDEyOTQ0LCA0MDUwLCA2NzU5NSwgMCwgCi0gICAgNDMxMDIsIDEwNTgxLCAxMjk4NSwgNDUzMywgMCwgMCwgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIDEyMDcwNCwgNjU0NjEsIAotICAgIDk3OTgsIDAsIDAsIDE5NDgsIDExOTAwNywgMCwgOTUyLCAwLCAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDAsIDAsIAotICAgIDQzMDk4LCA0ODQzLCA4MTQyLCA2NDE2MCwgNDA5OCwgNjQxNzAsIDAsIDAsIDM0MzYsIDAsIDAsIDEyODE3LCA2NzU5NywgCi0gICAgNjY3NiwgMzkzMCwgNjY3MDgsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAKLSAgICAwLCA4NTAwLCAwLCAxMjAxNDIsIDczNzQzLCAxMjA0MDAsIDQzMTcsIDEyMDE0MCwgMCwgNjQ2NzYsIDAsIDAsIDY3NjA2LCAKLSAgICAxMTkwODMsIDAsIDAsIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgMCwgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIAotICAgIDExMjc0LCA2NzYwMSwgNjQ1MjAsIDY0MjEwLCA2NjY0LCAwLCA0MjA1NiwgMTAyMjgsIDY0OTU3LCAxMTI4MSwgMCwgCi0gICAgNjQyMTMsIDE0NjksIDY2NjQwLCA2NTM4MSwgMCwgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIDkwNCwgMzUyLCAwLCAxNDUxLCAKLSAgICA4MDYxLCA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjc2MDAsIDAsIDAsIDEwNTIwLCA4NTc1LCAwLCAxMjAxLCAwLCAxMjg0NiwgCi0gICAgMCwgMCwgMTE5MTksIDY0OTYyLCAwLCA3NDg2NCwgMCwgODUxMSwgOTQ2MCwgODIzLCAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAKLSAgICAwLCAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgCi0gICAgNjU3NjEsIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIDk4MjEsIDAsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCAKLSAgICAxMjAxMjEsIDY0NDEwLCAwLCAwLCA0MzIzLCAxMjAwNjIsIDAsIDAsIDAsIDQyNTg3LCA2NTMzOSwgNDEzOTQsIDAsIDQ3NjMsIAotICAgIDQxMTIsIDExODkzNSwgMCwgNTI2MCwgNDMxNDMsIDAsIDMyNiwgMTIwMTMxLCAwLCAwLCAxMDc3MSwgMjg3NiwgMTk0OTE1LCAKLSAgICAxOTQ4MzUsIDE5NDkyNCwgNDEzOTgsIDEyNzA3OSwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgCi0gICAgMCwgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIDAsIDAsIDQzMTQ0LCA0MTIzLCAwLCAKLSAgICA0MzE0NiwgMCwgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCAKLSAgICA5NTIxLCA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDAsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAxMTUyOCwgNjQwMjQsIAotICAgIDAsIDY3OSwgNjQwMTMsIDAsIDU4NTAsIDc1OCwgNzUzNiwgMCwgMCwgNDE0NDEsIDEwNjkzLCA2NDAwNiwgMCwgNjQwMDUsIAotICAgIDEwNTQxLCAxMTkwMTksIDAsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIDAsIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIAotICAgIDg5NzAsIDAsIDY0MDAwLCAwLCAxMDc3NCwgMCwgNDI1MjIsIDEyNDIxLCAxOTQ4NzYsIDAsIDE4NTIsIDMwNTcsIDAsIAotICAgIDczNzQ0LCA2NDAzNCwgNjQwNDEsIDAsIDAsIDAsIDAsIDAsIDc2NDUsIDEyODU0LCA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgCi0gICAgOTEwMiwgNjI3LCAwLCA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAwLCAxMTU3MCwgMCwgMTk5NjAsIDExNjk2LCAKLSAgICAwLCAxMDE4LCAwLCAxOTQ5MDksIDAsIDE2ODIsIDE5NDg5NiwgMCwgNDI3NTYsIDEyOTUxLCAxOTQ5MDYsIDAsIDAsIAotICAgIDczODE0LCAxMTQxMiwgMTI1NjMsIDEwNzI4LCAxOTQ4MzAsIDAsIDExODg2MywgNDMzMTEsIDY0OTY2LCAxMTU3NywgMCwgCi0gICAgNDMwNDAsIDE4MzMsIDExNTc2LCAwLCA3NDc3OSwgMCwgMTg1LCA2NTA4NSwgNzQ1MzMsIDY0NzU0LCAxOTQ4NDgsIDc1MzUsIAotICAgIDgwODUsIDQyNTI1LCAxMjAzODcsIDk3NDksIDQxNzAxLCA2MTMxLCAxOTQ5LCA0MTE3LCA3ODQ3LCAxMjA0ODksIDAsIAotICAgIDY0NDgzLCA2NTY5MywgMCwgMCwgMCwgMCwgNDIyNDAsIDAsIDAsIDQyODY0LCAwLCA2NDY2NywgNDE4NjgsIDExODQsIDAsIAotICAgIDgxNSwgMTE0ODQsIDAsIDY3ODQwLCAwLCAwLCAwLCAwLCAwLCA2NDY4MywgMCwgMCwgMCwgMCwgMCwgOTg3OSwgMCwgMCwgCi0gICAgNDE1OCwgMCwgNjgxNjYsIDAsIDAsIDAsIDAsIDAsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCAwLCAwLCAwLCAwLCAKLSAgICA3NDM3MywgMCwgMCwgMCwgNjM4NzAsIDQzMTYzLCAwLCAwLCAxMTkwODEsIDQyODY3LCAxODM0LCAwLCAwLCAwLCAxMDk0MCwgCi0gICAgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgMjY1MiwgMTIwNTI3LCAxMTUzOSwgMTA3ODQsIDE5NTA5MywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE4ODU4LCA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAzMjcsIDAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgCi0gICAgMTE4ODU0LCA2NTIzOCwgMCwgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIAotICAgIDE2MjAsIDAsIDM2MDEsIDAsIDAsIDAsIDYwOSwgMTE1NTUsIDAsIDEyNDk2LCAwLCA3NDE4MSwgNDM0MywgMTI1MDUsIDAsIAotICAgIDAsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDMwMjksIDAsIDAsIDAsIDQzNTY1LCAxMjcwODIsIDAsIDEyNjk2LCAKLSAgICAwLCAwLCAwLCAxMjkyOSwgMCwgNzEyLCAwLCA0MTk3LCAwLCA0MjgxOCwgMCwgMCwgMTIwNDkwLCAwLCAwLCAxNTA2LCAKLSAgICA0MzU2MiwgMCwgMCwgMCwgMTI2NTEsIDAsIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIAotICAgIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgCi0gICAgMTIwMzMsIDQyMTc4LCAwLCAwLCA0MjU3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3OCwgMCwgMCwgMCwgMCwgOTA4MCwgCi0gICAgMTI3MDAwLCAwLCAwLCAwLCAwLCAxMTA4MiwgMCwgNTY5OSwgMTk1MTAwLCAwLCA5NDg4LCA2NTE2NiwgMTE5MTEyLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA1MjY1LCAwLCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgMCwgNDMzNDUsIDAsIAotICAgIDEwNzcwLCAxMTg5OTQsIDQzMzQ0LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCA0MzM0NiwgODExNiwgNzk1LCAwLCAwLCAKLSAgICAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCAwLCAwLCAxMjA4MTEsIDAsIDEyNDY4LCA4NjA3LCAKLSAgICAxMDA4LCAwLCAxMDA5MiwgMCwgOTE3ODQyLCA2Nzg1NSwgMCwgNzM3NzEsIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgCi0gICAgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDAsIDY0NTk1LCAwLCAwLCAwLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIAotICAgIDAsIDAsIDAsIDUzODIsIDAsIDAsIDAsIDExOTA2MCwgNjQ5NTMsIDU0MDYsIDE5OTIwLCAwLCA2NjUxMCwgMzU5MCwgMCwgCi0gICAgMTEzMCwgMCwgMCwgNDIwMTYsIDExODIzLCA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgMCwgOTMyNiwgCi0gICAgNzM4MjYsIDUzMTAsIDc0ODEyLCAwLCAxMTk5NjIsIDg5NTksIDQzNTg5LCA3NDMzNCwgNjY3MjMsIDAsIDg1NjgsIDAsIAotICAgIDEyMDQ5NiwgNzM4MTYsIDEyMDgwMywgMCwgMCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAwLCAwLCAwLCA3NDUxOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAxMTU5NCwgMCwgMCwgMTE4OTkwLCAxMDQ5MSwgCi0gICAgMCwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgODI2OCwgNDkyMywgNjUwODYsIDg5ODEsIDEyMzgyLCAKLSAgICA0MjEzMywgMTIwNzU1LCA5NzA2LCAwLCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCAwLCA0Mjc2NiwgMCwgMCwgCi0gICAgMCwgMCwgMTE5MTA1LCAwLCAwLCAwLCA4ODE2LCA0MTUxNSwgMCwgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCAKLSAgICAwLCAzNjU4LCAwLCAxMjA1MjUsIDAsIDc2MTcsIDAsIDEyODg4LCAwLCAwLCAxMzE0MywgMCwgNDE1MTQsIDAsIDU3MDMsIDAsIAotICAgIDQxNTE3LCA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIDEwNjYwLCA1NzY5LCAKLSAgICA2MTMsIDc1NDMsIDEyMDc3NCwgNDc3LCA0MTA4MywgMCwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgMCwgMCwgMCwgODIyNSwgMCwgCi0gICAgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDAsIDEyNDgwLCA3NDM1NCwgMCwgMzksIAotICAgIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDAsIDc4OTcsIDAsIAotICAgIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAyODc3LCAwLCAwLCAxNjc1LCAwLCAwLCAwLCAwLCAKLSAgICAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMCwgMCwgMCwgMCwgMCwgMTE4ODI3LCAwLCAwLCAwLCAxMTk1NjEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEyMDY5MiwgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIDc0MDM4LCAKLSAgICAxMTk1NTgsIDYyNzMsIDY2Njc5LCAzNjQsIDk1OTUsIDAsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgNjY0ODksIDIyNCwgMCwgCi0gICAgMCwgOTMzMiwgNDk2NiwgMCwgMCwgMCwgMCwgMzg0MSwgMCwgMCwgMTA3MzIsIDAsIDg1MCwgNDk3MiwgMCwgNjQ2OTksIAotICAgIDI5MDksIDAsIDY1MzA5LCAwLCAwLCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIDExOTYyLCAwLCAxMjUwNywgMTE5NiwgMCwgCi0gICAgMCwgNzc3LCAwLCA0Mzc1LCA2NTI3MSwgMCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAwLCAwLCA5NDU0LCA2Mzc3OCwgODY1OCwgCi0gICAgNDI1MjgsIDAsIDI3MDUsIDkxNzk3NSwgNDE1MjAsIDAsIDAsIDExOTg2LCA3NzY1LCA0MjUwMiwgODI4MCwgMCwgMjcwMSwgCi0gICAgMCwgMCwgNTc2NywgMCwgMCwgOTgwOSwgODM1MywgNjM3NDcsIDY2NzAxLCA2Mzc3MiwgMCwgNjM3NDUsIDE3NDgsIDYzNzcwLCAKLSAgICAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDAsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4OSwgOTA2NywgNjA5NiwgMCwgNzY5NCwgMCwgCi0gICAgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAwLCAwLCA2MzgwNywgMTU5MSwgMCwgMCwgNjM3ODMsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAKLSAgICAzMTM4LCAxMDk5NiwgMCwgMTkyMiwgMCwgMTI0OTgsIDEwOTg3LCAwLCAwLCAzODk0LCA2NTU0MywgMCwgMTk0ODQyLCAwLCAKLSAgICA0OTMsIDAsIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA5MTc5MzQsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIAotICAgIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCA2MjMzLCA2NDYzNiwgMTAwMiwgMTI0OTEsIDAsIAotICAgIDY0OTExLCAxMjcwNDAsIDAsIDY1MTIwLCAwLCAwLCAwLCAxMTYxMSwgNjYyMjgsIDEyNzA0MSwgNjYyMTMsIDYzODY0LCAKLSAgICA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCA2NjIzNiwgNjYyMTEsIDY2MjE4LCAwLCAKLSAgICA2NjI0MCwgMCwgNjYyMzMsIDg5MjgsIDAsIDc5MDksIDY2MjM0LCAxMTYwNSwgNjM3NTksIDAsIDY2MjA4LCA3Mzk5OSwgCi0gICAgNjM3OTksIDAsIDI0NCwgMTE1NDIsIDEyODk4LCAxMjQ5NCwgNzM3NjEsIDEyNDkyLCAxMjY2OSwgMCwgMCwgNzQxNTMsIDAsIAotICAgIDAsIDEyMDY4MCwgNDg4MiwgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIAotICAgIDI0MjksIDEzNjAsIDI0OCwgMCwgNjM3OTcsIDAsIDYzNzkyLCAwLCA3MjkyLCAwLCA2Mzc1NiwgNDI3ODYsIDY2NjkzLCAwLCAKLSAgICAxODcwLCA5MTc5MTYsIDQ3MCwgMCwgMCwgMTIwMzA2LCAwLCAwLCA0NTc5LCAwLCAwLCAxMjUxMSwgNzQ0NTMsIDEyNTE0LCAKLSAgICAwLCA3NDU3OSwgNzIzOSwgNzAwMSwgODYyMywgMCwgMCwgMCwgMCwgMTI1MTIsIDExNjE1LCAxMzA0MSwgMCwgMCwgNjU5LCAKLSAgICA2MDk4LCAwLCAxMjIzNCwgMCwgMTI3MDY3LCA4MzExLCAxMjUxMCwgNDE4MDMsIDEzMDM5LCAxMjcwNzIsIDEyNTEzLCAKLSAgICAxMDIwMiwgMTI0NzEsIDAsIDg3NDcsIDAsIDAsIDAsIDIzMjMsIDAsIDIzMTksIDAsIDEyNDc3LCAwLCAyMzExLCAwLCAKLSAgICA0NDE1LCAyMzcsIDYyODEsIDAsIDAsIDAsIDIzMDksIDEzMTIsIDgxNzMsIDAsIDEyNDY5LCAwLCAwLCA2NDMzNSwgMTA2MDksIAotICAgIDAsIDAsIDkzOTcsIDExNTI0LCA5Mzk1LCA5Mzk2LCA5MzkzLCA5Mzk0LCA5MzkxLCA5MzkyLCA5Mzg5LCA2MjA5LCA5Mzg3LCAKLSAgICA5Mzg4LCA0OTMyLCA5Mzg2LCA5MzgzLCA5Mzg0LCAwLCAwLCA2NTQ1MSwgODE4NSwgMCwgOTE3ODMyLCA0MzAyNCwgNDMzMzYsIAotICAgIDc0Mzc1LCAyMzEzLCAwLCA3OTQ4LCA5MjM2LCAwLCAwLCAwLCAxMDU3MCwgMCwgNjI4OSwgMTA0ODQsIDAsIDAsIDExOTk4LCAKLSAgICAxMjA4MiwgMTA5MjQsIDMxNDcsIDAsIDAsIDEyNTI0LCAwLCAyMzEwLCAxMTgxOCwgOTM4MSwgOTM4MiwgOTM3OSwgOTM4MCwgCi0gICAgOTM3NywgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgMCwgOTM3MiwgMTI0NDQsIDAsIDAsIDEzMDE2LCA4MjEwLCAwLCAKLSAgICA0MjAyOSwgMTEwNzksIDEyMzMxLCAwLCA0MjAzMiwgODc0NCwgNzI2LCAwLCAwLCA0MTU1LCAwLCAwLCA0MjAzMCwgNTAwNywgCi0gICAgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAwLCAwLCAwLCA5OTIyLCA0MzMwOSwgMCwgMTI1MjUsIDAsIDEyMDE2LCA2NTc3MCwgCi0gICAgOTU0OCwgMCwgNDAzLCAwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIDAsIDY1NjkxLCA2Mzk5OCwgMTgxOSwgMTA0OTYsIDAsIAotICAgIDAsIDExOTkyMCwgMCwgMCwgMCwgMTI1MDYsIDAsIDEyMjMxLCAwLCAxMjUwMCwgNjc2MDUsIDEyNTA5LCA2NDM5MywgMCwgCi0gICAgMzM4OSwgMTA1ODksIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDAsIDAsIDc0MDY5LCAwLCAwLCAzNjA4LCA4MjgxLCA5MTc4MzksIAotICAgIDExMDcsIDAsIDkwNzYsIDg4NjIsIDAsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgMTE4OTYzLCAKLSAgICA3NDc4MiwgMCwgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgMCwgNDk4LCA2NDQ3MSwgMTIwMzI0LCAKLSAgICAwLCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDAsIDMyMzEsIDAsIDY0MjIsIDY2NTEyLCAKLSAgICAwLCAxMjUzMCwgMjUzNywgMCwgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDAsIDQxNDMzLCA0NzE5LCA0NjksIDAsIAotICAgIDQzNjMsIDMzMTMsIDQxNDI4LCAwLCAyMDIzLCAxNzcyLCAwLCAwLCA2NTcwNiwgMTAwNTEsIDY0ODEyLCAwLCAwLCA5OTIwLCAKLSAgICAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgOTYwNywgMCwgOTY2MywgMCwgMTE5NjM0LCA2NTAzLCAKLSAgICA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMCwgNDEwNjEsIDAsIDAsIDAsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCAKLSAgICA2NTAyOCwgMCwgNjY0NzYsIDQxMTA4LCA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIDQxOTkyLCA0MTUwNiwgMCwgCi0gICAgNDE2ODcsIDAsIDEyMDcxNywgMCwgOTE3ODE2LCAwLCA3NjkyLCAwLCA4MDA4LCAwLCAzMzAsIDg1NjYsIDY1MDgzLCAKLSAgICA0MTEzMywgOTgxNiwgMCwgMTI1MzIsIDEyNzA1NSwgMTI3MDU2LCAzNTA4LCAxMjcwNTgsIDEyNzA1OSwgMCwgOTE3NTQyLCAKLSAgICA5MTc4MTUsIDAsIDY0MTEsIDEyOTEwLCAxMjA1MDUsIDY2NjQ0LCAxMzAyOCwgMCwgMTI1MzcsIDAsIDAsIDY0MTM2LCAKLSAgICAxMjUzNiwgMjM1MCwgMTMwMjksIDAsIDAsIDAsIDEzMDMwLCAwLCA0NTI3LCAwLCAxMjUzOCwgMCwgMCwgNjU1OTksIAotICAgIDY1NzE3LCAxMjYwNywgMCwgNDk0OCwgMTI0ODQsIDQwMzIsIDAsIDQyODAzLCAwLCA2MjA3LCAwLCA2MTE3LCA2NjAwMCwgCi0gICAgODQxMiwgMCwgNzQzOCwgMTI5NiwgMjMyNSwgNDE1MTEsIDAsIDEwMTQ5LCA3NDExOCwgMCwgMCwgMTI0ODEsIDAsIDEyNDg4LCAKLSAgICAwLCAwLCA0MTU1NiwgNjQ0MTQsIDExODgwMiwgMjM1NCwgMCwgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIAotICAgIDY1MDMyLCA0MTUxMywgMCwgMTE5MjcsIDY2NTg0LCAwLCAwLCAxMTkwMTAsIDAsIDAsIDAsIDg0OCwgOTg2OCwgMCwgNjQyNCwgCi0gICAgMCwgMTE5MzM4LCAwLCA3NDAzMSwgMCwgMCwgMjM1MiwgMCwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDAsIDAsIDEzMDI2LCAKLSAgICAwLCAwLCAwLCAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIDEzNDMsIDAsIDAsIDkzMjUsIAotICAgIDEzMDI1LCA2MjgzLCAxMTczOCwgMCwgMCwgMCwgMTE3NDEsIDAsIDAsIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIDAsIAotICAgIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgMCwgNjQ1ODgsIDAsIAotICAgIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgMTMwMjAsIDExODk5MywgMTk0NzY0LCAxOTQ3NjcsIDc0MzQwLCAKLSAgICAwLCAwLCA2NDk0NSwgODAyOSwgMCwgMCwgMCwgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAxOTQ3NDgsIDUyMTUsIAotICAgIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCAwLCA1MzYzLCAxMjk1NywgMCwgNDE1NiwgMCwgMCwgCi0gICAgNjQyMSwgMCwgMTYxMSwgMCwgMTMwMTgsIDc0MjU3LCAwLCAwLCAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDAsIAotICAgIDY0ODIsIDQyMTQsIDczNzkwLCAxMTk0NSwgMCwgMTMwNDYsIDg4MzgsIDQyNSwgNDAyNSwgMTA3MDksIDAsIDczOTI3LCAKLSAgICAyMzkyLCAxMzA0NywgMCwgMCwgMTA2MTcsIDEzMDQ5LCA2NDk5LCAxOTQ3MzksIDEyNDI0LCAxOTQ3NDEsIDczOTQ0LCAKLSAgICAxMzA1MCwgMTk0NzQyLCAxOTQ3NDUsIDY1MDcsIDAsIDAsIDAsIDMyNzcsIDg5MjksIDQ5NDcsIDQxMDU1LCAwLCAxOTQ3MjIsIAotICAgIDE5NDcyMSwgMTk0NzI0LCAxMzA0NSwgNjQ2MjYsIDY2MDM0LCA3NzUxLCAxOTQ3MjcsIDgzNzEsIDE5NDcyOSwgMzk5NywgCi0gICAgMTI4MDYsIDg3NjgsIDEzMDQ0LCAwLCAxMjQyMCwgNDAyNCwgMTk0NzMwLCA0MTA1NCwgMTA3OCwgOTc1NywgMTk0NzM0LCAKLSAgICA0MTA1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDE0OTYsIDAsIDkxNjUsIDE1NzIsIDExOTExLCAwLCAxMTg4NDIsIAotICAgIDIzNDYsIDEzMjcwLCA4OTU4LCAwLCA5NjQ2LCAzNzczLCA0MzE4MywgNjQwMSwgNDI1MzYsIDAsIDAsIDEzMDQzLCA4MDU2LCAKLSAgICAwLCA2NTY4MSwgMjA4LCAwLCAwLCAwLCAwLCAwLCAxMDY5OSwgNjQwOCwgMCwgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAKLSAgICAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMCwgMCwgMCwgMCwgMzExNSwgMCwgMCwgMTEzMjEsIDAsIDAsIDAsIDE5NDcyNiwgCi0gICAgNDg3NiwgNzQyODYsIDAsIDAsIDAsIDAsIDQxNTU4LCA0MTQ3MSwgNzM5NTAsIDgxNTgsIDQxNTYxLCA0MTQ3MiwgMCwgCi0gICAgMTMwNTEsIDE5NDY3MiwgMzE0MywgMTk0Njc0LCAxOTQ2NzMsIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgCi0gICAgNTY2NSwgMCwgMTE5MDcxLCA0MTk4NiwgNjM5NzQsIDAsIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCAKLSAgICA1NjYyLCA0MjM4MiwgMTk0Njg2LCA3MzkyNCwgMTEyMSwgMTk0NjY1LCA2Mzk1OSwgMCwgNzQzNzgsIDEzMjMxLCAwLCAKLSAgICA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTk0NjY4LCA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCAxOTQ2NzEsIAotICAgIDQyMDI0LCA2NDIwLCA0MjAyOCwgMCwgMTA1MDksIDI3OTUsIDQ5MTAsIDE5NDcyOCwgMCwgNjQ3NTMsIDYyNzUsIDAsIAotICAgIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgCi0gICAgNDIwMjYsIDYxMzcsIDAsIDc1MjQsIDAsIDAsIDExOTM0MywgMCwgODMzOCwgMCwgNjUwNDMsIDAsIDgyMiwgMCwgOTkwMywgCi0gICAgNjQ3MjEsIDE5NDY1NywgMTk0NjU2LCAxOTQ2NTksIDE5NDY1OCwgMTk0NjYxLCAxOTQ2NjAsIDAsIDQxMjY1LCA1MzExLCAKLSAgICAxNzk1LCA5NjUsIDExODc5MSwgMTA1ODcsIDAsIDExMjc4LCAwLCAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDEyMDcwNSwgCi0gICAgMTk0NjQzLCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDAsIDc0OCwgCi0gICAgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDE5NDY1MiwgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIAotICAgIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIAotICAgIDE5NDYzNywgMCwgNTgxLCA0ODkzLCAwLCAwLCA2NTU0NSwgNDg4OCwgNDE1NywgOTE3ODA1LCAwLCAwLCAwLCAwLCAxMDExOSwgCi0gICAgNjQxNSwgMCwgMCwgMCwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCAwLCA0MTIsIDAsIDY0OTMyLCA0Mjg4MCwgNDM1ODcsIAotICAgIDAsIDAsIDAsIDAsIDY1MTk3LCAwLCAxMjIwMywgMCwgMCwgODkxMywgNjU4NTQsIDQ4NzUsIDY1ODExLCAxMjAzODEsIAotICAgIDE5NDYyNCwgMTIwMzk3LCA5MzQ0LCA4ODI2LCAxMjAzODYsIDEyMDM5NSwgMTMxMDQsIDc0NzgxLCAxMTk5NywgMTIwMzkzLCAKLSAgICAwLCAwLCAzMTM0LCAwLCA2NTY5NiwgMCwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgMCwgMCwgCi0gICAgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMCwgNDMyOCwgMTA3MzQsIDEyNzAxNCwgMCwgMCwgNzgwNCwgMCwgCi0gICAgMTA4MTEsIDYyNTAsIDExMzM5LCA0OTE0LCAxMTM2NywgMCwgMTE4OTcxLCA0OTE3LCA3NDUxNiwgMCwgNjQyODUsIDQ5MTIsIAotICAgIDU0NjQsIDAsIDExODg5MywgMjM2MSwgNzk3MSwgMCwgMCwgMCwgMTE4OTg2LCAwLCA4MDg2LCA3NDMxNywgMCwgODMxOSwgCi0gICAgMjMxMiwgNDA5NzcsIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDAsIDQwOTgwLCAwLCAxMzIwMiwgMCwgMTI1ODIsIDAsIAotICAgIDAsIDAsIDQyNDM4LCAwLCA2Mjg4LCAwLCAwLCA1NjUzLCA0MjQwMCwgMTA4OTEsIDc2OTgsIDU2NTgsIDc0MDQ1LCAwLCAwLCAKLSAgICAwLCA0OTEzLCAwLCAwLCAwLCA0MjMyNiwgMCwgMCwgMCwgNDI0NzgsIDIzMjcsIDAsIDEyOTU5LCA0MjI4NywgMTI3MDUsIDAsIAotICAgIDAsIDEyNTg4LCA4ODIxLCA2MTUzLCAyODY3LCAxOTQ3MDgsIDY2MzEyLCA2OTgsIDE5NDcwOSwgMTk0NzEyLCAxMDM1NiwgCi0gICAgNzQwNzUsIDE5NDcxMywgNjUxLCAxMjY0MSwgMCwgMCwgMCwgMCwgNDE1NTIsIDY1MTE1LCAxOTQ2OTEsIDE5NDY5MCwgCi0gICAgMTk0NjkzLCAxOTQ2OTIsIDE5NDY5NSwgMTk0Njk0LCAxOTQ2OTcsIDc0MzU2LCAwLCA0NzE2LCA0MzI3NywgMCwgMCwgCi0gICAgMTIzNDAsIDEyMDU2OCwgMCwgMTk0NzAwLCAxOTQ2OTksIDE5NDcwMiwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDAsIAotICAgIDEwMTAxLCAwLCAwLCA4NDc5LCA0MTUxLCA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMCwgMCwgMTE5MTk0LCAKLSAgICA3NDA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgCi0gICAgMjY5OSwgMCwgMCwgMjk4NSwgMTE5MjIyLCAwLCAwLCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIDk4MjcsIDExOTMxMCwgCi0gICAgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgMzUsIDAsIDAsIDY2Njk0LCAKLSAgICA3NDM1NywgMCwgMCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAxMDUzNCwgMCwgMCwgNzM4NDgsIDAsIDQyNzIsIDAsIAotICAgIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgMCwgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgNzkzMCwgMCwgNDMzMDMsIAotICAgIDAsIDAsIDkxNzgyNiwgNTI0NCwgNDE4OSwgMTI3MDk4LCA2NzU5NiwgMCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCAwLCAwLCAKLSAgICA4ODczLCAwLCAwLCAwLCA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjU3OCwgCi0gICAgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMCwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgMTE5MTQxLCAwLCAKLSAgICA2NjAxNSwgMCwgOTU5LCA4ODg1LCAxMjU2NCwgNjY0NTcsIDAsIDk0NjksIDk2MzIsIDAsIDc0NzYxLCA2NDMyMywgMCwgMCwgCi0gICAgMCwgMCwgMzEwLCAwLCA0MTU2NCwgMTA5NzYsIDAsIDAsIDAsIDAsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAKLSAgICAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgNjUwNDcsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAwLCAwLCAKLSAgICAwLCA0MTkzNCwgNzQ2NSwgMCwgMCwgMCwgNDcxNSwgNjEwMSwgMCwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIAotICAgIDAsIDk1ODUsIDUzNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIDAsIDEyMTQyLCAwLCAKLSAgICAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTk0NjIxLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCAwLCAwLCA0MTQyMSwgMCwgNDQ2MiwgCi0gICAgMCwgMCwgMCwgODIxLCAwLCAyNDk4LCA1ODAwLCAxMjAxNTcsIDAsIDE3NjAsIDAsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgCi0gICAgMCwgNzU3LCAxMTg1LCAwLCAwLCA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDAsIDAsIDAsIDEwNjM0LCAKLSAgICAxMDk0MiwgNzcxMywgMjM0OCwgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCAxOTQ2MTAsIDY0MzI0LCA0MTI0MCwgCi0gICAgODYyLCA2NTYyNiwgMTk0NjEzLCAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCAKLSAgICA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIDE5NDU5NSwgMTIwODEyLCAxOTQ1OTcsIDQ3NDgsIDE5NDU5OSwgMTk0NTk4LCAKLSAgICAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIDAsIDc0NTc2LCAwLCAwLCAxOTQ2MDIsIDM5NjcsIDE5NDYwNCwgMTMxMzcsIAotICAgIDg3NzUsIDE5NDYwNSwgMCwgMjk2MywgMCwgODQxMCwgNDQ1NCwgNzIzLCAwLCA5NjYsIDQ0NDksIDAsIDEyNzA2MCwgMCwgCi0gICAgNzgxOSwgMjMyMCwgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCAwLCAwLCA4MDQ3LCAwLCAwLCAKLSAgICAxMjYzNCwgNDE1NDIsIDAsIDc0NjYsIDExODgyMiwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgMCwgMTU4NCwgNjY2NDUsIAotICAgIDYwNDUsIDAsIDEyMDY0MCwgNjUyMTgsIDAsIDAsIDAsIDc1MzcsIDAsIDExMzcwLCAwLCAxMDMzMCwgMCwgMTAzOTQsIDAsIAotICAgIDE5NDc4MywgMCwgMCwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgMTE5NjA1LCAxOTQ1NzgsIDcwNzQsIDEyMDM5NiwgCi0gICAgMTk0NTc5LCAxOTQ1ODIsIDExNDE0LCAxOTQ1ODQsIDI1MzEsIDEzMDM0LCAwLCAwLCAwLCAxMjU5LCA3NTE3LCAwLCAwLCAKKyAgICA5ODQ4LCAxMDM4MSwgMCwgMTI4ODcwLCAwLCAzNjUxLCAwLCAxOTQ2MTAsIDEyNzU1NiwgNTEwMiwgNTEwMSwgMTAyNjksIAorICAgIDEyOTgzLCA4MTM4LCA0NTE3LCAxOTMyLCA1MTAwLCAxNDM5LCAxMjA5MywgMTI0NywgMTAwMzQsIDE5NTA2NCwgNTA5OSwgCisgICAgNzgzNzMsIDE0NDEsIDQyMDg3LCAzMDYzLCA2NTAsIDAsIDc4MzgsIDAsIDE5NTA0MSwgMTk1MDQwLCAxMTkxNDIsIDkwMzEsIAorICAgIDEyMDc5MCwgMTI4NTgyLCA5MDc4LCA4NTQ1LCA2NjM1NiwgMTI4Nzk5LCAwLCA5MTU0LCA5MTE4LCAwLCAwLCAyNjc2LCAKKyAgICA3NzUwLCAwLCA3MzgxMiwgNjE5MCwgODU5OSwgMTk1MDUzLCAwLCAxMDc5NSwgOTg1NywgNzAxNCwgOTg1NiwgMTk1MDMzLCAKKyAgICA5MjYyMCwgMTIxMjksIDAsIDg0ODEsIDAsIDYyMDIsIDE5NTAzNSwgMTA5MjAsIDEyODIzNywgNTIwMywgMTk1MDM5LCAKKyAgICAxOTUwMzgsIDUxMDgsIDUxMDcsIDY1ODE4LCA2NjAxOSwgOTc2MiwgMCwgNTU0MSwgNzQ3NzIsIDAsIDEyNjEzLCA1Mjg0LCAKKyAgICA2NjU3LCAyMDcsIDEyODgwNiwgNDI3NSwgNzQ4MTksIDg1NCwgNjgxNDcsIDc0MzgxLCAwLCAwLCA1MTAzLCAxMjc4NjEsIAorICAgIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIDQ4OCwgNjk4MTEsIDAsIDAsIDEwMTU3LCAwLCA0MzAzNCwgMTE0MzgsIDAsIDAsIAorICAgIDkyNjk0LCA2ODQzMSwgNDE3NzEsIDUxMDYsIDY2NjksIDg1MDQsIDY1MTU0LCA2OTgxMywgNDEzNjcsIDUxMDUsIDE5NTAzMCwgCisgICAgNjk3MjAsIDY0NzYsIDUxMDQsIDAsIDMwNCwgMzE3NiwgMCwgMCwgOTMyLCAxMjg2NjMsIDY1NjcsIDIzOCwgNjk2NTYsIAorICAgIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgCisgICAgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIAorICAgIDY2MjIsIDgxNTEsIDEwODU4LCAxOTQ1OTYsIDY3NjM2LCAwLCAxMjU2OCwgMCwgMTI1NTMsIDEwODE0LCA0MzI3NSwgNjk1MCwgCisgICAgOTcxMiwgNjg2ODAsIDQzOTcwLCAwLCA2NTE2NSwgOTI3MjUsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCisgICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDAsIDAsIDQxNzU0LCA2NzYzNSwgOTM3MCwgMjcyMCwgMTk0OTc1LCAKKyAgICA2ODQ2MiwgODIzMiwgMTE4ODE3LCAwLCAzMjIyLCAwLCAwLCAwLCA2NjY2MywgMCwgMCwgMTA4MzQsIDAsIDAsIDY1NzMyLCAKKyAgICAwLCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgMTIwNzcsIAorICAgIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAxMjA3MjgsIAorICAgIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIDY1MjI5LCAKKyAgICAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIDQyMzIxLCAKKyAgICA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIDE5NDk1MiwgMTk0OTUxLCAwLCAxOTQ5NTMsIDQyMDgwLCAKKyAgICAyNTI5LCAwLCAwLCAwLCA0MjA4MywgMTIwNjc4LCA2ODM5OCwgMTk0OTU3LCA2NzYxOSwgNjYzNjcsIDE5NDk1OCwgOTYzNCwgCisgICAgOTIzODAsIDk5ODgsIDAsIDQxMDY4LCAwLCAwLCA2NTI2NCwgMCwgMCwgOTI1NDUsIDAsIDc4NSwgODIzNiwgMTI4NjQ3LCAKKyAgICA5MDI3LCA2ODE2MCwgNjc2MjMsIDY0MzgzLCAxMjg4MjEsIDkyNSwgMTI3MTU2LCAwLCA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIAorICAgIDQxOTg0LCA5MjE3LCAwLCAwLCAwLCA5MTg2LCAyMDY3LCA0MDE2LCAwLCAwLCAzODEsIDAsIDAsIDQyMDc3LCAwLCAKKyAgICAxMjc0ODMsIDUxODQsIDQyMDc4LCAxOTQ5NDcsIDEwODEwLCAxMjg1MzEsIDQ1ODUsIDE5OTQzLCA1ODYwLCA2NzYzMywgMCwgCisgICAgMCwgODEyLCAzNjE1LCAwLCA1MTc4LCA0NDAwMCwgMTIwNTQ4LCA3ODgwNywgNTE4OCwgNzQyODcsIDY3NjI5LCAzNjA1LCAKKyAgICAxMDY5MiwgMTE2NiwgNjQ0MjksIDQyNjM5LCA5MjQsIDAsIDY3NjMxLCAwLCAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgCisgICAgNjc2MzIsIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgMCwgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgMCwgMTI3MzczLCAKKyAgICA0MjI4OCwgMTI3NTEsIDAsIDg1NDIsIDEzMTQ1LCAxOTQ5NjMsIDI0NjgsIDY2NzA2LCA0MTI5NCwgMzYyNiwgMzg4MywgCisgICAgNjQzODgsIDQyNDc5LCAwLCA0MTExNywgMCwgOTI1ODAsIDAsIDAsIDY3NjI0LCAwLCAxMjkwLCAwLCA2NTU4NSwgMjcxNSwgCisgICAgODA2LCA2NTIwOCwgNDE4ODQsIDkxNzg4MywgMTMxOCwgNjQ3MzEsIDAsIDAsIDAsIDY2MzI1LCAzNDY1LCAyNDA1LCA5MjQwLCAKKyAgICAwLCAxMjc1NiwgNjUyNTksIDAsIDAsIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgNzM5MTIsIDk3OTksIDAsIAorICAgIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAxOTQ1ODcsIDAsIDEyMTEsIDAsIAorICAgIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIDAsIDAsIDEwNjIyLCAwLCAwLCA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAKKyAgICAwLCA2NDg2NCwgMCwgNzg2NjAsIDAsIDgyODQsIDEzMDgxLCAwLCAzNTg5LCA0MjA1MSwgNDAzNSwgNjQ5MiwgOTIyMzYsIAorICAgIDQyNjUsIDY2NDIsIDM5NzcsIDc0MTg2LCA0MTc3OCwgODM2LCAxMTkyMTYsIDI0ODgsIDAsIDQ1ODIsIDAsIDAsIDQxNzc3LCAKKyAgICAxMjkyNiwgMCwgNzUyOCwgMTA1NTAsIDAsIDkyNzA2LCAwLCAxMTQzOSwgMCwgMTM3NCwgNjQ4NzgsIDExOTAxNCwgMCwgCisgICAgNDIzODksIDQxMzc0LCAwLCAwLCA3ODQ5MiwgNDEzNzcsIDEyNzkwOSwgMCwgNDAwLCAxMjU5NywgMTIwNTg2LCAwLCAwLCAKKyAgICA2NjYxLCAwLCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgMCwgNzQ3NTUsIDAsIDM0NzMsIDc3MTgsIDAsIDAsIDAsIDU1Mjg1LCAKKyAgICAwLCAwLCAwLCAxMTk2OSwgMCwgMTI3ODQxLCA2MzY1LCAxODg3LCA2NzYzLCAwLCA4MDgwLCA3MDA2LCAwLCAwLCA2NzU3LCAKKyAgICA2NDM1MSwgMTU0NCwgMCwgNjc2NiwgNjQ2NzcsIDEyMDcxNiwgMCwgNjE0NiwgMCwgNzcxLCAwLCAwLCAxMjgxMiwgMTMxNjgsIAorICAgIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAxMTQ5MSwgOTcyNCwgCisgICAgMTAzNDEsIDAsIDk1MjQsIDc0OTAsIDExMzg5LCA3NDg5LCAzMzc5LCAwLCA3NDg3LCAwLCA0NzEsIDc0ODQsIDc0ODIsIAorICAgIDY3NTMsIDc0ODAsIDc0NzksIDc0NzgsIDc0NzcsIDY1MDEsIDc0NzUsIDY5MTgsIDc0NzMsIDc0NzIsIDI0NzQsIDc0NzAsIAorICAgIDc0NjgsIDEwMjMyLCAxMDYxNSwgMTAyMTMsIDEyNzI4OCwgOTIzNTcsIDEwMDQ5LCA3ODg4NCwgMzU0NCwgMCwgNjAxNywgCisgICAgNjUzMTEsIDEyNzQ4MSwgMTIwMjE2LCAxMzMwNiwgMTA1MzMsIDc4NzAsIDczOTQ5LCA3NjI1LCAwLCAxMjA1NDQsIDAsIDAsIAorICAgIDkyNjYwLCAwLCAwLCAwLCAxOTk2MSwgMjQ3MiwgNDI2NjUsIDkyMzQxLCAwLCAyMTM5LCA0MjU2LCAxMjA3NzYsIDc0MzgwLCAKKyAgICAwLCA0MjY3NSwgNDI2NTgsIDEyODQ1LCAwLCAwLCA2NTEzOCwgMTE5MzU1LCA2Nzg2MiwgMCwgNjU2NzEsIDEyMDAwMCwgCisgICAgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCA0NDUsIDEyMDU2NiwgCisgICAgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgMCwgMTIwMjE1LCAwLCAzOTAyLCAwLCAxNzcwLCAwLCAxMjg4NjYsIAorICAgIDE1NjAsIDEyMDIwOSwgMTk0OTcyLCA0NTg0LCA3Mzg0MywgMCwgMTE3MTIsIDEwODY2LCAxMTg5MjgsIDExMTgsIDkyMjA5LCAKKyAgICAwLCAwLCAxMDgxLCA3NDM2LCA2ODQyMCwgNzI1MiwgMCwgNTk5NiwgMCwgNDkwMywgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgCisgICAgMTMzMCwgMCwgNzEzOSwgMCwgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCA2MzI0LCA0MTk3NSwgNjQ3NzcsIAorICAgIDEwNjc0LCAxMjMwOCwgMTIxODYsIDAsIDAsIDAsIDEyNzE1LCAxMjgzNDksIDAsIDAsIDIwMTgsIDY2NjcyLCA0MTk3OSwgCisgICAgNjY2ODUsIDExOTE1NywgMCwgOTI0NjQsIDAsIDEyNjk4NCwgMCwgOTMzNCwgOTI3MDUsIDkyMzE1LCAwLCA3OTc1LCAwLCAKKyAgICA3Nzk1NywgMCwgNjY2MjEsIDQ4ODQsIDY2NTk3LCA2OTczMiwgMCwgMCwgNjMxMywgNjU1MTMsIDAsIDAsIDAsIDAsIDIzNDUsIAorICAgIDQzNjk3LCA0NjMsIDAsIDAsIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgMCwgMCwgNDIyNzksIDE5NDU3NywgMCwgCisgICAgNzg0MTUsIDAsIDE5NTAwOCwgMCwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIDAsIDAsIDI0ODIsIAorICAgIDE0NzEsIDAsIDAsIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDY5NjY0LCAwLCAxMjM3NCwgMCwgMCwgMCwgMCwgMjQ2MCwgMCwgCisgICAgMTE5NDQsIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCA1ODcwLCAwLCAyMDI0LCAKKyAgICAxMjcxODAsIDAsIDAsIDUzOSwgMCwgMTI3NzY1LCAwLCAzODUzLCA2NTE4MCwgMTI3OTIzLCAxMjA3OTYsIDEyMDI0NSwgCisgICAgOTIzMjQsIDAsIDg2NTksIDAsIDEyNDc0LCA5MjU3OSwgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCA0MTYyLCAwLCA0MjYwLCAKKyAgICAxMjk1MywgNjk2MzMsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIDEwOTQ2LCAxMjczMTAsIAorICAgIDUwMDAsIDAsIDAsIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgMCwgNjcwOSwgMCwgNzg4ODUsIDAsIAorICAgIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgMCwgNzM3OTEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDQwMTQsIDEyODQyLCA3Mzk1MiwgMTIwMTUsIDEyNzI5MCwgODI3NSwgMzg5MywgMCwgMCwgMTIyMTAsIDcyMjEsIAorICAgIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIDEyNTE2LCA0NDQ0LCAwLCA5MjI3MSwgNzQ1MzcsIAorICAgIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAzNTkxLCA0MTk2OSwgMCwgMjQ1MywgMTI4NTQ5LCAKKyAgICA5MjY2NiwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIDQxOTYyLCAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgCisgICAgMCwgMCwgNjg3LCAwLCAwLCAwLCAxODQwLCAwLCA2ODY3MSwgMTE5ODA5LCA0ODgzLCAyODUsIDQ3MjMsIDc3OTI3LCAKKyAgICA5MjY5MiwgNDQ1OSwgNzQ1NzcsIDQyOTIxLCA0MTcyMCwgMTEwODksIDI0MCwgMTk5MDYsIDAsIDQyMzIzLCAwLCA5NzQzLCAKKyAgICAxMjAyMzIsIDEzMTM0LCAwLCAwLCAwLCAwLCAwLCA0MjYzNCwgMCwgNDM0MzcsIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIAorICAgIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgMTE5MDIzLCAxNzI5LCAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgCisgICAgNDMzMzQsIDY0ODUyLCAwLCAxMjAyMzUsIDY2MjAxLCAwLCA2NjU3OCwgNTAwMSwgNDE4NzksIDc0NDI3LCA0MTIxLCA1MDAzLCAKKyAgICA4ODQsIDY2NzAwLCA2Mzg3OSwgNDk0MywgNTE1MCwgNzM4ODksIDc0MTgyLCAxMjc5MTUsIDY0MywgMzA4NiwgMCwgNDI0NDgsIAorICAgIDQyMjk5LCA1OCwgMCwgOTE3OTUyLCAxMjAwODMsIDYzODczLCA4NDkxLCAwLCAwLCAwLCA0NTMwLCA0MjQwOSwgNzEyNiwgCisgICAgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIDExOTA5NiwgMTk5MjksIDAsIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAKKyAgICAxMjgxMzIsIDY2MTc5LCA0MjQxMiwgNjU5NDEsIDEzMTE0LCA2NDUyMiwgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgCisgICAgNDQzNywgNzM5NDgsIDEyODY5MiwgMCwgNTUyODAsIDQyMTc0LCAxOTQ5MjUsIDQyNDMwLCAwLCAwLCA0MjM1NSwgNjYwMjYsIAorICAgIDQzMDYsIDQxMzgwLCA2ODQzMiwgOTI1ODYsIDAsIDY2NjY3LCAxMjczMDksIDAsIDAsIDQyMjAwLCA0MjU2NiwgMCwgMCwgCisgICAgNTA4OCwgNjk0OCwgMCwgODUyNCwgMCwgMCwgMTIzODUsIDAsIDAsIDY5NjQ2LCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIAorICAgIDY1MDM5LCA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIAorICAgIDc3OTk5LCAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIAorICAgIDYzODk2LCAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAxMjM3NywgMCwgMCwgNjg0NDksIDc0NjEsIDczOTAxLCAxMjQ0LCAKKyAgICAzMzEsIDczNzg2LCAxMjY4MywgMTA2NjIsIDAsIDgxMTIsIDAsIDY1ODUyLCAwLCAxMjM3OSwgMTk0ODc3LCAxMjA4MTgsIAorICAgIDQxOTY0LCA0MjIwOCwgNjM4NDMsIDIwODQsIDQxOTY1LCAwLCA2NTg2NiwgNDMyNywgMCwgNjM4NDAsIDc4NTQ5LCA0MTIyMCwgCisgICAgMTMwMzIsIDAsIDU4NCwgMTI5MzMsIDQzMTc3LCAxMjM3MywgMCwgMTMwMDAsIDEzNTEsIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAKKyAgICAxOTMwLCAwLCA3ODIyOSwgMTI0MjcsIDY2NTE0LCAwLCAxMzAzMSwgMCwgNjM5MDEsIDAsIDM2NTcsIDEyODU3MiwgNjUyMDIsIAorICAgIDYwMDAsIDExOTIwNiwgMTI0MjYsIDEyNzE4MSwgMCwgNDE3NDAsIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgCisgICAgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgCisgICAgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDkyMzk3LCA2MTYyLCAwLCA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgCisgICAgMTI0MjIsIDQxODMyLCA0MzksIDQzMDc3LCAwLCA0MjIwNywgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIAorICAgIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIDAsIDY3ODY0LCA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIAorICAgIDY5ODA1LCAzNDEsIDI3MjcsIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIAorICAgIDAsIDYzODY3LCA0MTMzLCAxMTM3MSwgMjEwLCA0NjAwLCAwLCA3NDU2MCwgNDEzNywgODA4MiwgNzg1MDYsIDExOTA2MiwgCisgICAgNzg1MDQsIDY3MDQsIDQ1OTEsIDEyODAyOSwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCAKKyAgICA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCAKKyAgICA5MTc3OTQsIDQyMDI1LCA3ODU2NywgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgCisgICAgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCAKKyAgICA0MjA4NiwgOTE3NzkwLCA5MTc3ODksIDAsIDAsIDEyODgwMSwgMCwgMCwgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIDkxNzc3NiwgCisgICAgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAxMjQzMSwgODY2OCwgMTI0MzQsIDAsIDkxNzc4MiwgCisgICAgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIDEyODAxNCwgCisgICAgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgOTI3LCAwLCAwLCAxMjQzNiwgMCwgNDIwMjEsIDAsIAorICAgIDAsIDEyOTksIDEyMjQwLCA0MjM1MCwgNjUxNDMsIDAsIDE5NTAxNiwgMCwgNzgxOTcsIDExMzQ4LCAwLCA3ODAzNywgOTE5NCwgCisgICAgMCwgMCwgMTk5MTQsIDEyMTc5LCAwLCA5NjQ4LCAxOTQ5MjMsIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIAorICAgIDI1OTQsIDM0NDQsIDYzODE3LCA2NDY1MSwgMCwgNDE1MDMsIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCAKKyAgICA1NjY0LCAzOTcyLCAwLCAwLCAwLCAxMjg1MDgsIDEyNDE2LCA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgCisgICAgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIDM4ODIsIDg1MzIsIDkxNzc3MSwgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIAorICAgIDY2MzM5LCAxMjQxNywgNjYwMDEsIDY1MzQzLCAxOTQ3ODIsIDEyNDE0LCA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgCisgICAgMTE0MywgMTE5MTY5LCAxMTk4NDYsIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIAorICAgIDExNzI0LCAwLCAwLCAxMjcxMDQsIDEyODUyNiwgMCwgMCwgODAyNywgMTA5OTcsIDkxNzEsIDEyNzQxLCAxMTQwMCwgCisgICAgNzQxOTcsIDE5NDc5OSwgMCwgMTI4MjM5LCAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAxMjAxOTAsIDE5NDc3MywgCisgICAgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIDY4NjUxLCAwLCAwLCAKKyAgICAzMDA5LCA0MTQ3NiwgNDE0ODksIDY5ODI1LCAzMDA3LCAxNDQ4LCAzMDE4LCAxOTQ4MDksIDM4ODksIDg1MjEsIDUwODMsIAorICAgIDUwODIsIDExOTg1OSwgMTIwMTg0LCA4NTE5LCAwLCAzMDE0LCA1MDgxLCA2NTg1MywgMTIwNzE1LCAwLCAxMjAxODMsIAorICAgIDc4MjE5LCA1MDc5LCA2NDgwMiwgNDIyMTAsIDQ1OTcsIDY1NTMyLCA3ODQ0NCwgMTIwMTg1LCAxMjM3MSwgMCwgODQwNywgMCwgCisgICAgMTA4MDUsIDg1MTgsIDEwNzc5LCAxMjAxODgsIDAsIDAsIDEyMzY3LCA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgCisgICAgMTIwMzcsIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAKKyAgICAxMDY0OSwgMCwgNTA3NywgMTI3MTA4LCAxMDg4MCwgNjM5MjcsIDUwNzUsIDkxNzg4MSwgMCwgNjUwNzUsIDAsIDExMDA3LCAKKyAgICAwLCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIDUyNzIsIAorICAgIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgOTgwMywgMCwgCisgICAgNDUwNCwgMTUwNSwgMCwgNjMyNSwgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCA1MTc3LCAKKyAgICA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCA4OTQ4LCAKKyAgICA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgMCwgMCwgMTE5MTg1LCA0MjIyOSwgMTk0OTEyLCAwLCA1OTk4LCAwLCAKKyAgICA0MjM1MywgNzQ4MjUsIDAsIDEyNTg3LCAwLCA3ODU3MSwgMCwgMCwgMTk0NTYyLCA0MTU3NiwgNDIyMTUsIDc4NTcwLCAKKyAgICAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCA2Mzk0OSwgNjQ3NjcsIAorICAgIDI2NzAsIDQxNjcsIDAsIDExNzIzLCAwLCA3NDEyMCwgMCwgNjUwNzYsIDkzOCwgNDM0MTQsIDczODU0LCAxMTczNywgOTcyMSwgCisgICAgMCwgMCwgMCwgMTE3NDIsIDI0MTksIDAsIDExNDkzLCAxMjMzNCwgMTk0OTEzLCA0MTUzLCAxMjMwMiwgMTA3OTMsIDUyNTAsIAorICAgIDEyNDA3LCAxMTk3OCwgNDQwNCwgOTE4OSwgMTI0MDEsIDQyMDA3LCA1Nzc1LCA2NzU5LCA2NTgwNiwgNDM5OTcsIDAsIAorICAgIDQyMDAyLCAxMjQwNCwgMCwgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCA0OTgzLCAwLCA4NjEsIDAsIDAsIAorICAgIDAsIDAsIDY1NTc3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIDY2MzEsIDAsIDEyODE2LCA3NDU4MywgCisgICAgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAKKyAgICAwLCAwLCA4NTMsIDQyNjkzLCAxOTUwMTQsIDAsIDAsIDUwMTYsIDQzNTM1LCA2Mzg5MywgNDI4MzUsIDk0OTEsIDkxNzkxMywgCisgICAgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCA2NTA2MCwgMTIwNzk3LCA5OTAwLCAwLCAwLCAxOTQ5MTksIDAsIAorICAgIDEyNzgzMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgMTI4MTUxLCAxMjE3NywgMCwgMCwgMCwgNzc4MjQsIDAsIDQ5MDAsIAorICAgIDEyNzg3NCwgMTI4NzgsIDkyNjMwLCA4OTg0LCA0MTE5LCA3NDc2OCwgODk3MSwgNzg1OTMsIDQzMTEzLCA5NzAyLCA3ODU5NCwgCisgICAgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCA3NDE4NSwgOTI0ODEsIDkyNzEwLCAxMjM5NywgNzc4MjcsIDAsIAorICAgIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCA1MDEwLCAxNjgwLCAxMDUwNywgCisgICAgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIDcyNjcsIDAsIDc0ODMzLCAxMjgxODEsIDU5OTMsIDI4MTksIDAsIAorICAgIDEyNzA2LCA3Nzg0MCwgMTg5MywgNzI2NiwgNjM5MTUsIDcyNjQsIDcyNjUsIDAsIDEzNjMsIDAsIDYzOTk3LCA2MzkxMCwgCisgICAgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDAsIDEyNTg5LCA0MTQ3OSwgMTI4MzEzLCAwLCA0MzMzOSwgMCwgOTgzNiwgCisgICAgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAxNjY0LCAxODUwLCAKKyAgICAxMjg4NDEsIDMwNzksIDExMzQwLCA0MjQwOCwgNDI0NDcsIDEyNzE0MCwgMTIwMDIwLCA0MjMwNywgMTIzODYsIDQyMzA0LCAKKyAgICA5MTc1NTUsIDAsIDEyMzg5LCAwLCA5MjM2NiwgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgMTE0NywgNjM5OTIsIAorICAgIDQyODg3LCAxOTg3LCA5MjcxOCwgNTQ4MCwgNzg1OCwgMTE2NTMsIDQxMTYsIDEyMzkxLCA2NjE5MywgMCwgNDkzOSwgCisgICAgMTIzODQsIDAsIDAsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAxOTQ2ODgsIDAsIDAsIDEyNjQ5LCAwLCAwLCA4MjQ3LCA1MDcsIAorICAgIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIDExOTgxMywgNzc0LCAKKyAgICAxMTk4MzEsIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgMCwgMTE5NjAwLCAwLCAKKyAgICAwLCA3NzE5LCA2MDI2LCAyNDg2LCAxMjgzMTIsIDExOTgwOCwgMTYyLCAwLCA2NTIxOSwgNDEwNzMsIDk2ODcsIDQxNjgxLCAKKyAgICA2MzA0LCAxMTk4MTIsIDY2MTk2LCAxOTQ4ODEsIDUyNjIsIDAsIDU1MjMzLCAxMjY4MSwgNDIzNzksIDAsIDc1MzQsIAorICAgIDEyMjE5LCAwLCAxMjc1MjgsIDQyODEwLCAxMDQ5MiwgMCwgMCwgMCwgNDMxMTksIDAsIDEyMDc1MywgMTI0MDMsIDI1MDAsIAorICAgIDE5NTAxMywgMCwgNDg5OSwgMTI3MjksIDAsIDAsIDc0MTEzLCAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIDc3ODUxLCAKKyAgICAxMzExMiwgMCwgMTk1MDEyLCAxMjg1OSwgMCwgMTIwMTQ4LCA2NjM2OSwgNTg2MSwgMTI3NzU4LCAxMTk5OSwgMTI0MDAsIDAsIAorICAgIDAsIDEyNjQ1LCA1MTQ2LCAxMTMyMCwgNjg0MTAsIDY3NDgsIDY1MDQwLCAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgCisgICAgMTIwNjQ1LCA1MTQ3LCAwLCAwLCA3NDUyNCwgMCwgMTkyOCwgMCwgNjc2NDksIDU5OTEsIDM0NDUsIDY3NjA5LCA0OTc2LCAKKyAgICA2NDE3NiwgMCwgNjc2MTAsIDgyNDEsIDAsIDc3ODY4LCA0MjA2LCAwLCAwLCAwLCAxMjgyOTgsIDAsIDEwMTM4LCAwLCAwLCAKKyAgICA4ODk3LCAwLCAwLCA4MzU3LCA0MTI0LCA3Nzg2MiwgNjU4MzYsIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgCisgICAgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAxMjAxNTAsIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIAorICAgIDc5NDUsIDAsIDQ0MDIsIDk5NzAsIDEyNDAyLCAwLCA0MjM5MiwgMTMwNSwgMTI0MDgsIDAsIDQ0MDA3LCAwLCAwLCA0MTQ2NCwgCisgICAgMTI0MTEsIDEyOTY5LCAxMjA4MjQsIDQxNDY1LCAwLCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgCisgICAgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAwLCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDczNzc2LCA2NzUwLCAKKyAgICAxOTUwMTgsIDAsIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDE5NDcwMywgMCwgNTgwNSwgMCwgNjcyNiwgMCwgNDIxNzYsIAorICAgIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMTIzNjQsIDAsIDEyMzcyLCAxMjA2NDIsIDEyMDMwNywgMCwgOTIzNDMsIAorICAgIDAsIDEyMzY2LCAxMDk2MywgNjA2NiwgMTMyOSwgMCwgMzA1MiwgOTIyMCwgMCwgNjQ0NzgsIDE5NDcwMSwgMTA4MDMsIAorICAgIDQxMzIsIDEyMDMwNiwgNjg0NzQsIDkyNDczLCAwLCAwLCA3NDgzNywgMTIwMTU1LCAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgCisgICAgNjM5NjUsIDAsIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIDYzOTY5LCAxMTc4MSwgNDI3MTgsIAorICAgIDg3ODgsIDEzNTcsIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAxMjAxNzIsIDAsIDE5MzMsIAorICAgIDY5NjU1LCA5NTY0LCAwLCA5MjQzNSwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgCisgICAgMCwgNzgzMDIsIDEyMjIwLCA2NzYxNiwgMTIwNTk4LCAxMjc0NzUsIDAsIDY4MjAwLCA2Njc1LCAxMjgxNDQsIDAsIDY3NTkyLCAKKyAgICAxMjA2ODUsIDAsIDY0NzcxLCAxMTk4LCA5MTMyLCAwLCA2NDYxOSwgNTEwLCA2NDY2MywgMCwgMCwgNDU2MSwgMjEwMSwgCisgICAgMTM5OCwgMCwgOTI1NTQsIDc0MDM0LCA0MTU2OSwgOTI2ODQsIDExNDA2LCA4MTY3LCAxMjEyNywgMCwgODQwLCAwLCAwLCAwLCAKKyAgICA2OTY3LCAwLCAwLCA5Nzk2LCAwLCAzMzMsIDAsIDAsIDgxNDQsIDIxMTcsIDAsIDAsIDEyNDA2LCAwLCAxOTkzMSwgCisgICAgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIAorICAgIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIDAsIDY3NTk0LCAyMDQ4LCAxMjk0NCwgCisgICAgNDA1MCwgNjc1OTUsIDkxNzk2NywgNDMxMDIsIDEwNTgxLCAxMjk4NSwgNDUzMywgMTk1MDIxLCA3NDAwMywgNjQ5MCwgMCwgCisgICAgMTIwMzgsIDAsIDAsIDEyMDcwNCwgNjU0NjEsIDk3OTgsIDY5NzA0LCAwLCAxOTQ4LCAxMTkwMDcsIDAsIDk1MiwgMTI4MjM1LCAKKyAgICAwLCAwLCAxMjA4MDIsIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCAKKyAgICA2NDE3MCwgMCwgMCwgMzQzNiwgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIDY2NzYsIDM5MzAsIDY2NzA4LCAwLCAwLCAKKyAgICA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgCisgICAgNzM3NDMsIDEyMDQwMCwgNDMxNywgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIAorICAgIDEzMTAyLCAwLCA2NjAwMywgNjY3MiwgMCwgMCwgMCwgMCwgNjM4NDEsIDk2MTMsIDkwMDEsIDQ1MjYsIDExMjc0LCA2NzYwMSwgCisgICAgNjQ1MjAsIDY0MjEwLCA2NjY0LCA3ODcwNCwgNDIwNTYsIDEwMjI4LCA2NDk1NywgMTEyODEsIDAsIDY0MjEzLCAxNDY5LCAKKyAgICA2NjY0MCwgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgOTA0LCAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCAKKyAgICA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDEyNzkxNiwgMCwgMTA1MjAsIDg1NzUsIDk5NjAsIDEyMDEsIDEyNzI4OSwgCisgICAgMTI4NDYsIDEyNzI5MSwgMTI3MjkyLCAxMTkxOSwgNjQ5NjIsIDEyNzI4NywgNDM3MzksIDEyNzI4MSwgODUxMSwgOTQ2MCwgCisgICAgODIzLCAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAxMjczMDUsIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgCisgICAgNDI3ODMsIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCAKKyAgICA2NjQ5OCwgOTgyMSwgNjQzMDQsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCA2ODM2NiwgNjQ0MTAsIDkyMzA1LCAwLCA0MzIzLCAKKyAgICAxMjAwNjIsIDkyNjY5LCAwLCAxMjcwNTIsIDQyNTg3LCA0MjIxNCwgNDEzOTQsIDAsIDQ3NjMsIDQxMTIsIDExODkzNSwgMCwgCisgICAgNTI2MCwgNDMxNDMsIDAsIDMyNiwgMTIwMTMxLCA2ODQyMywgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgMTk0OTI0LCAKKyAgICA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIDEyMTQwLCAKKyAgICA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAwLCAxOTQ4ODUsIDQzMTQ0LCA0MTIzLCA4NDk0LCA0MzE0NiwgCisgICAgOTk3NywgMCwgMCwgNjU3NTksIDEwNzY1LCA2NDA2MSwgNDQ2NSwgOTgwOCwgNjQwNTYsIDY1NTgyLCA0MTI2LCAwLCA5NTIxLCAKKyAgICA5NTg5LCA2NDc1NSwgMCwgNjQwMjAsIDAsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAxMTUyOCwgNjQwMjQsIAorICAgIDEyODA3MiwgNjc5LCA2NDAxMywgMCwgNTg1MCwgNzU4LCA3NTM2LCAwLCA5MjIzNCwgNDE0NDEsIDEwNjkzLCA2NDAwNiwgMCwgCisgICAgNjQwMDUsIDQwNTgsIDExOTAxOSwgMCwgNjQ2NjAsIDAsIDExOTA1MCwgMCwgMCwgMTEzOSwgNDMyOTgsIDY0MDI3LCAKKyAgICA2NDAyOSwgODk3MCwgMCwgOTkzNCwgMCwgMTA3NzQsIDEyODAyMCwgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIAorICAgIDMwNTcsIDEyODExMywgNzM3NDQsIDY0MDM0LCA2NDAzOSwgMCwgMCwgMCwgMCwgOTIzMjIsIDc2NDUsIDEyODU0LCA3NDMzOCwgCisgICAgMzQ5NiwgMCwgMCwgMCwgOTEwMiwgNjI3LCAxMjc3OTUsIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIDEzMzA5LCAKKyAgICAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIDEwMTgsIDExODk3MCwgMTk0OTA5LCAxOTQ4OTcsIDE2ODIsIAorICAgIDE5NDg5NiwgMTk0OTExLCA0Mjc1NiwgNjc2NSwgMTk0OTA2LCAwLCAwLCA3MzgxNCwgMTE0MTIsIDY3NjgsIDEwNzI4LCAKKyAgICAxOTQ4MzAsIDExOTAxMCwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIDAsIAorICAgIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgCisgICAgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIAorICAgIDAsIDY5Njk1LCA0MjI0MCwgMCwgMCwgNDI4NjQsIDAsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAxMTQ4NCwgCisgICAgMTI3NTM1LCA2Nzg0MCwgMCwgMCwgMTI4NzkzLCAwLCAxMDk4NiwgNjQ2ODMsIDAsIDAsIDE5NDcwOSwgMCwgMCwgOTg3OSwgCisgICAgMCwgMCwgNDE1OCwgMTI4MDUwLCA2ODE2NiwgMCwgMCwgMCwgMCwgNjk2NDUsIDMzMiwgMTE4ODA4LCAwLCA1MTQyLCAyNDA3LCAKKyAgICA2OTY0MywgNDIxOTksIDAsIDkyNDA0LCA3NDM3MywgMCwgNTUyMTcsIDAsIDYzODcwLCA0MzE2MywgMCwgMCwgOTIzOTAsIAorICAgIDQyODY3LCAxODM0LCAwLCA5MjQ2MSwgNjk4MTcsIDEwOTQwLCA2NTI0OSwgMTE5MDQwLCA4NjYyLCAwLCAwLCAyNjUyLCAKKyAgICAxMjA1MjcsIDcxNjQsIDEwNzg0LCAxOTUwOTMsIDY3Njc0LCAwLCA5MjIzMywgOTI0ODIsIDE5NDc0OSwgNzQ1NjIsIAorICAgIDkxNzUwNSwgMTgyOCwgNzQ0NzQsIDEyMDMyNywgNzg2MjAsIDg1MzEsIDEyNDk5LCA2MjgwLCAxMjMyNCwgMTE4ODU0LCAKKyAgICA2NTIzOCwgNjgzNzQsIDQ4MzIsIDY1NTczLCAwLCA2Mjc5LCAxMjUwOCwgMTI5MDQsIDEyNTAyLCA5MTYxLCAwLCAxNjIwLCAKKyAgICA2NDQzNiwgMzYwMSwgMTk1MDk0LCAxMjgwNzMsIDAsIDYwOSwgMTE1NTUsIDAsIDEyNDk2LCAxMjc4MzksIDc0MTgxLCAKKyAgICA0MzQzLCAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAwLCAKKyAgICA0MzU2NSwgMTI3MDgyLCAwLCAxMjY5NiwgMTI4MjU2LCAwLCAxOTQ3OTYsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIDAsIAorICAgIDQyODE4LCAxMjg2ODgsIDAsIDEyMDQ5MCwgMCwgMTE5MTM3LCAxNTA2LCA0MzU2MiwgMCwgMCwgMCwgMTI2NTEsIDAsIAorICAgIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIAorICAgIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAwLCA2OTc2MCwgCisgICAgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCA5MDgwLCAxMjcwMDAsIAorICAgIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCA2NTE2NiwgMTE5MTEyLCAKKyAgICAwLCAwLCAwLCAwLCAxMjgyMDgsIDAsIDUyNjUsIDY5MjM1LCAwLCAxMTQ4NywgNjc4NTgsIDEyNDY0LCAwLCA0MzA0NSwgMCwgCisgICAgMCwgNDMzNDUsIDAsIDEwNzcwLCAxMTg5OTQsIDY4MDcsIDQ2NSwgOTgyOSwgMCwgNzQzNDgsIDAsIDQzMzQ2LCA4MTE2LCAKKyAgICA3OTUsIDAsIDAsIDEyNDYyLCAxMDkzMCwgMTA4MzEsIDAsIDExODk1MiwgNjQzNjIsIDc0MzM0LCAwLCAxMjA4MTEsIDAsIAorICAgIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAxMDA5MiwgMTk1MDc4LCA5MTc4NDIsIDY3ODU1LCA1NTI1NywgNzM3NzEsIDE3NjYsIAorICAgIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDEyODY2NSwgNjQ1OTUsIDEyNzI5NCwgMCwgCisgICAgOTIzMTEsIDQzNDUsIDEyNjE2LCAwLCAwLCAwLCA3NDQ2NywgMCwgMCwgMCwgNTM4MiwgMCwgMCwgMCwgMTE5MDYwLCAKKyAgICA2NDk1MywgNTQwNiwgMTk5MjAsIDkyMjE2LCA2NjUxMCwgMzU5MCwgMCwgMTEzMCwgMCwgMCwgNDIwMTYsIDExODIzLCAKKyAgICA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgMCwgOTMyNiwgNzM4MjYsIDUzMTAsIDc0ODEyLCA3ODU4NCwgCisgICAgOTIyMjksIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgMTIwODAzLCAwLCAKKyAgICA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgMTI3MTgyLCAwLCAwLCAwLCAKKyAgICA2OTc4MywgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAxMTU5NCwgMTI4MjQ3LCAwLCAxMTg5OTAsIAorICAgIDEwNDkxLCAwLCA2NDQxMiwgMCwgMCwgNTU4NywgNDI4NjUsIDY0NDA0LCA4MjY4LCA0OTIzLCA2NTA4NiwgODk4MSwgCisgICAgMTIzODIsIDQyMTMzLCAxMjA3NTUsIDk3MDYsIDY5NzM4LCAwLCA2NjYxMCwgMTA0NjEsIDEyMTAzLCAwLCA4NjQyLCAwLCAKKyAgICA0Mjc2NiwgMCwgNjY1NjYsIDk5ODMsIDAsIDExOTEwNSwgMCwgMCwgMCwgNzM5OCwgNDE1MTUsIDAsIDExODAyLCA4MDQxLCAKKyAgICAxNDYxLCA5MTAsIDExOTEzMywgMCwgNjc0OSwgMzY1OCwgMCwgMTIwNTI1LCAwLCA3NjE3LCAxOTQ4NDEsIDEyODg4LCAwLCAKKyAgICA2NzY2OCwgMTMxNDMsIDAsIDkxOTMsIDExMDk3LCA1NzAzLCAwLCA0MTUxNywgNDE1MDQsIDQxNTE5LCAxMDAxNiwgNjQzMDUsIAorICAgIDAsIDY1ODY0LCA2MjMsIDc4MSwgNjcwLCAxMDY2MCwgNTc2OSwgNjEzLCA3NTQzLCAxMjAyNzksIDQ3NywgNDEwODMsIAorICAgIDkyNTIxLCAwLCA1OTIsIDE1NzgsIDEyNDU5LCA0MzQ0OSwgMCwgMCwgODIyNSwgMCwgNjU0LCAxMTM0NSwgNjUzLCA2NTIsIAorICAgIDAsIDY0NywgMCwgNjMzLCAxMjA3NDQsIDAsIDAsIDEyNDgwLCA0MzI0MywgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIAorICAgIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIDMxOTUsIDU1NTAsIDAsIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCAKKyAgICA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAyODc3LCAwLCAwLCAxNjc1LCAwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIAorICAgIDExOTA3NywgMCwgMCwgMCwgMCwgMCwgNDMyNDQsIDAsIDAsIDAsIDExOTU2MSwgMCwgMCwgMTk0OTIxLCAxMjgxNjAsIAorICAgIDk5MzksIDAsIDAsIDc3ODYwLCAwLCAwLCAyNzAsIDAsIDEwNzE0LCAwLCAwLCAwLCAwLCAwLCA2NTM3MiwgMCwgNzQwMzgsIAorICAgIDExOTU1OCwgNjI3MywgNjY2NzksIDM2NCwgOTU5NSwgMTk0OTA4LCAwLCAwLCA3MDcsIDAsIDAsIDkyODIsIDY2NDg5LCAKKyAgICAyMjQsIDAsIDY4NjcwLCA5MzMyLCA0OTY2LCA2ODY3NywgMCwgNjg2NDQsIDAsIDM4NDEsIDY4NjM0LCAwLCAxMDczMiwgCisgICAgNjg2NDAsIDg1MCwgNDk3MiwgMCwgNjQ2OTksIDI5MDksIDY4NjE5LCA0NDAwOCwgNjg2MjcsIDAsIDExNTQ0LCAxMDIwMywgCisgICAgOTYwOCwgMCwgMCwgMTE5NjIsIDE5NDY5NCwgMTI1MDcsIDExOTYsIDEyODY4NywgMTI4MzExLCA3NzcsIDEyMDE4NywgCisgICAgNDM3NSwgNjUyNzEsIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDExOTM0MywgMCwgOTQ1NCwgNjM3NzgsIDg2NTgsIAorICAgIDQyNTI4LCA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIDQyNTAyLCA4MjgwLCAwLCAKKyAgICAyNzAxLCAwLCAwLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgNjY3MDEsIDYzNzcyLCAwLCA2Mzc0NSwgMTc0OCwgCisgICAgNjM3NzAsIDAsIDAsIDAsIDY1NTQyLCA2Mzc2NiwgNTUyNDQsIDMwNjEsIDAsIDYzNzY0LCA2Mzc4NywgOTA2NywgNjA5NiwgCisgICAgMCwgNzY5NCwgMCwgNzI1NywgNjM3NjgsIDM0ODUsIDEyOTg3LCAwLCAxMjc1MjIsIDEyMDYyOCwgNjM4MDcsIDE1OTEsIDAsIAorICAgIDYzODYsIDYzNzgzLCAwLCAwLCAxMjcxNzMsIDAsIDAsIDAsIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgCisgICAgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAzMTM4LCAxMDk5NiwgOTIyNDcsIDE5MjIsIDAsIDEyNDk4LCAxMDk4NywgCisgICAgMCwgMCwgMzg5NCwgNjU1NDMsIDAsIDE5NDg0MiwgMCwgNDkzLCAwLCA0MzE5NywgMTcxNywgNDIyOCwgNDc5LCAxMDMwMywgCisgICAgNzQwMjAsIDAsIDkxNzkzNSwgMTAzMzUsIDM1MjAsIDkxNzkzMiwgMTI0OTAsIDY0MzE1LCAwLCAxMjcwMzksIDEyNDkzLCAKKyAgICA2MjMzLCA0MjY4MSwgMTAwMiwgMTI0OTEsIDAsIDY0OTExLCA5MjYxNSwgMjA5NiwgNjUxMjAsIDAsIDAsIDAsIDExNjExLCAKKyAgICAxMTYzMiwgMTI3MDQxLCA2NjIxMywgNjM4NjQsIDY2MjIxLCA2NjIyNiwgNjYyMjksIDEzMjE4LCA2NjIzMSwgNjYyMTYsIAorICAgIDg1MDcsIDY2MjM2LCA2NjIxMSwgNjYyMTgsIDkyNjcyLCA2NjI0MCwgNzgwNDEsIDY2MjMzLCA4OTI4LCAwLCA3OTA5LCAKKyAgICA2NjIzNCwgMTE2MDUsIDYzNzU5LCAwLCA2NjIwOCwgNzM5OTksIDYzNzk5LCA2MzgwMywgMjQ0LCAxMTU0MiwgMTI4OTgsIAorICAgIDEyNDk0LCA3Mzc2MSwgMTI0OTIsIDEyNjY5LCAwLCAwLCA3NDE1MywgMCwgMTI4Mjc4LCAxMjA2ODAsIDQ4ODIsIDEzMDQwLCAKKyAgICAwLCA4NjEyLCA0ODg1LCA3NDA1MywgMCwgMTMwNDIsIDQ4ODAsIDY0NjYyLCAyNDI5LCAxMzYwLCAyNDgsIDAsIDYzNzk3LCAKKyAgICA5MjM5NCwgNDIzNTgsIDAsIDcyOTIsIDAsIDYzNzU2LCA0Mjc4NiwgNjY2OTMsIDAsIDE4NzAsIDc4MDQwLCA0NzAsIAorICAgIDc4MDM4LCA3ODAzNSwgNzgwMzYsIDAsIDc4MDM0LCA0NTc5LCAxMjgwOTAsIDAsIDEyNTExLCA3NDQ1MywgMTI1MTQsIDAsIAorICAgIDc0NTc5LCA3MjM5LCA3MDAxLCA4NjIzLCAwLCAxMjgwNTIsIDEyODA0OCwgNzM3OCwgMTI1MTIsIDExNjE1LCA2MTA0LCAwLCAKKyAgICAwLCA2NTksIDYwOTgsIDAsIDEyMjM0LCAxMjczMDcsIDEyNzA2NywgODMxMSwgMTI1MTAsIDQxODAzLCAxMzAzOSwgCisgICAgMTI3MDcyLCAxMjUxMywgMTAyMDIsIDEyNDcxLCAwLCA4NzQ3LCAwLCAwLCAwLCAyMzIzLCAwLCAyMzE5LCA3NzkxNywgCisgICAgMTI0NzcsIDc3OTE2LCAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDEyNzI4MCwgMCwgMCwgMjMwOSwgMTMxMiwgODE3MywgCisgICAgMTI4ODcxLCAxMjQ2OSwgMCwgNzg1MDUsIDY0MzM1LCAxMDYwOSwgMCwgMTI4MTExLCA5Mzk3LCAxMTUyNCwgOTM5NSwgCisgICAgOTM5NiwgOTM5MywgOTM5NCwgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgOTM4NiwgOTM4MywgCisgICAgOTM4NCwgNjc0MCwgMCwgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgMjMxMywgMTI4MTY3LCAKKyAgICA3OTQ4LCA5MjM2LCAwLCAwLCAwLCAxMDU3MCwgNDM0NzMsIDYyODksIDEwNDg0LCAwLCAwLCAxMTk5OCwgMTIwODIsIAorICAgIDEwOTI0LCAzMTQ3LCAwLCAxMjA2ODQsIDEyNTI0LCAxMTkwODEsIDIzMTAsIDExODE4LCA5MzgxLCA5MzgyLCA5Mzc5LCAKKyAgICA5MzgwLCA5Mzc3LCA5Mzc4LCA5Mzc1LCA5Mzc2LCAxNjgzLCA5Mzc0LCAwLCA5MzcyLCAxMjQ0NCwgMCwgMCwgMTMwMTYsIAorICAgIDgyMTAsIDAsIDQyMDI5LCAxMTA3OSwgMTIzMzEsIDQzNDUxLCA0MjAzMiwgODc0NCwgNzI2LCAwLCAwLCA0MTU1LCAwLCAwLCAKKyAgICA0MjAzMCwgNTAwNywgMTI1MjIsIDQzMDg4LCAwLCA0OTUxLCAxMjc4MDUsIDEyNzI0MCwgMCwgOTkyMiwgNDMzMDksIDAsIAorICAgIDEyNTI1LCAwLCAxMjAxNiwgNjU3NzAsIDk1NDgsIDY3NjY1LCA0MDMsIDc4MjMwLCAxMjUwMywgMCwgMCwgMTEwMzAsIDAsIAorICAgIDkyNTY3LCA2NTY5MSwgNjM5OTgsIDE4MTksIDEwNDk2LCAwLCAwLCAxMTk5MjAsIDAsIDE5NDY2OCwgMCwgMTI1MDYsIDAsIAorICAgIDEyMjMxLCAwLCAxMjUwMCwgNDQwMjMsIDEyNTA5LCA2NDM5MywgNzg4MzAsIDMzODksIDEwNTg5LCA2NjA4LCA0MTA0NywgCisgICAgMTIwMzIxLCA3ODM5NSwgNzgzOTQsIDc0MDY5LCA3Nzk5NSwgNzgzOTEsIDM2MDgsIDgyODEsIDEyMDMyMCwgMTEwNywgMCwgCisgICAgOTA3NiwgODg2MiwgNjk3NDMsIDQxMDUyLCAxMzA4NCwgNjQ3NjYsIDQzMjE3LCA3ODAzLCAxMzIyMiwgNzQxNjUsIDc0NzgyLCAKKyAgICAxMjg4MTcsIDg1NDYsIDExNTUzLCA2Mzk5NSwgMTMxNzcsIDkwNDMsIDYzMDMsIDAsIDQ5OCwgNjQ0NzEsIDEyMDMyNCwgCisgICAgMTI4NTY3LCAxMjUyOSwgODA0MiwgMCwgMjM0NCwgMTI1MjgsIDgwMzEsIDI0MTQsIDAsIDY5NzE5LCAzMjMxLCAwLCA2NDIyLCAKKyAgICA2NjUxMiwgNjk2NTMsIDEyNTMwLCAyNTM3LCA3ODQwNSwgNDE0MjksIDEyNjU4LCAxMzAzNiwgNjU3NzIsIDAsIDc4NzM4LCAKKyAgICA0MTQzMywgNDcxOSwgNDY5LCAwLCA0MzYzLCAzMzEzLCA0MTQyOCwgNzg0MDcsIDIwMjMsIDE3NzIsIDc4MjI0LCA3ODIyNSwgCisgICAgNjU3MDYsIDEwMDUxLCA2NDgxMiwgNzgyMjAsIDAsIDk5MjAsIDEyMjE1LCAwLCA0OTMxLCAxOTUxLCAxMjQ5NywgMTE5MzYzLCAKKyAgICA5NjA3LCAwLCA5NjYzLCAwLCAxMTk2MzQsIDY1MDMsIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAxMjczMDQsIDQxMDYxLCAwLCAKKyAgICAwLCAxMjcxODcsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgOTczOCwgCisgICAgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIDEyNzc3NiwgCisgICAgOTk0MCwgMTI3Mjk5LCA3NjkyLCAwLCA4MDA4LCA0MTEzMSwgMzMwLCA4NTY2LCA2NTA4MywgNDExMzMsIDk4MTYsIAorICAgIDEyODA3NCwgMTI1MzIsIDc4NTUwLCA3ODU0NiwgMzUwOCwgMTI3MDU4LCA0MzIzNSwgMCwgMTI3Mjk4LCA2NDEzOSwgCisgICAgNzgyMzEsIDY0MTEsIDEyOTEwLCA3ODU1NCwgNjY2NDQsIDEzMDI4LCA2NzM3LCAxMjUzNywgMCwgMCwgNjQxMzYsIDEyNTM2LCAKKyAgICAyMzUwLCAxMzAyOSwgNzgyMzMsIDAsIDAsIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgMTI4ODEwLCAwLCA2NTU5OSwgCisgICAgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAwLCA2MTE3LCAKKyAgICA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgMjMyNSwgNDE1MTEsIDAsIDEwMTQ5LCA3NDExOCwgMCwgMTI3Mjg2LCAKKyAgICAxMjQ4MSwgMCwgMTI0ODgsIDAsIDAsIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCAxMjg1NzEsIDczNzY2LCAwLCAKKyAgICA2Mjk1LCA5MDEsIDQxNTEwLCA3OTUzLCAwLCA2NTAzMiwgNDE1MTMsIDAsIDExOTI3LCA2NjU4NCwgNzg1NTksIDc4NTYwLCAKKyAgICA3ODU1NywgNzg1NTgsIDAsIDc4NTU2LCA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIDc4NTY1LCA3NDAzMSwgCisgICAgNzg1NjMsIDc4NTY0LCAyMzUyLCA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDAsIDAsIDEzMDI2LCA2NzYyLCAKKyAgICA3ODU3OSwgNzg1ODAsIDEzMDIzLCA4OTAzLCA5Nzc3LCA2NjcxNSwgMTg3MSwgODA5OSwgMCwgMCwgMTM0MywgMCwgMCwgCisgICAgOTMyNSwgNjgxOCwgNjI4MywgMTE3MzgsIDAsIDAsIDAsIDExNzQxLCAwLCAwLCA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCAKKyAgICAwLCAxOTQ3NTQsIDEzMDIxLCA2NDQ5NCwgMzEzNiwgMTk0NzU4LCAxOTQ3NTcsIDE5NDc2MCwgMTMwMjIsIDQyNzM3LCAKKyAgICA5OTU2LCAwLCAwLCA3NDU1MiwgMTAwMTQsIDAsIDQxMjYwLCAxMTkzNDAsIDEzMDIwLCAxMDAyNCwgMTk0NzY0LCAxOTQ3NjcsIAorICAgIDc0MzQwLCA2OTY4MSwgMCwgNjQ5NDUsIDgwMjksIDAsIDAsIDAsIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgMTk0NzQ4LCAKKyAgICA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCA3ODU4MSwgCisgICAgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgMzMzNywgCisgICAgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgODgzOCwgCisgICAgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgNjQ5OSwgCisgICAgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgMCwgMTI4MDY5LCAKKyAgICAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIDY0NjI2LCA2NjAzNCwgCisgICAgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgMTI0MjAsIDQwMjQsIAorICAgIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCA0MTA1NywgMCwgMCwgMCwgMCwgMCwgOTIyMTAsIDkyNDExLCAwLCAKKyAgICA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIDg5NTgsIDAsIDk2NDYsIDM3NzMsIAorICAgIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAyMDgsIDEyNzM4MiwgNDE1MTQsIAorICAgIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAzNjAzLCA0MTEwOSwgMjM5OCwgCisgICAgMzU0OCwgMCwgMCwgMTE5OTMzLCAwLCAzMTE1LCA5OTE4LCAwLCAxMTMyMSwgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgCisgICAgNjU4MDQsIDAsIDAsIDQzNDY4LCAwLCA0MTU1OCwgNDE0NzEsIDczOTUwLCA4MTU4LCA5OTQ0LCA0MTQ3MiwgMTIwMjk4LCAKKyAgICAxMzA1MSwgNzg2ODksIDMxNDMsIDE5NDY3NCwgNjcwMSwgNDE1NTksIDE4OTYsIDY2MjU2LCAxMzA1MiwgMTk0NjgwLCAKKyAgICA1NjY1LCAwLCAxMTkwNzEsIDcwMjUsIDYzOTc0LCAwLCA3NDM1MiwgNzQxNjEsIDQxNTQsIDk4NjMsIDQzNTUwLCAxMjMxMCwgCisgICAgNTY2MiwgNDIzODIsIDE5NDY4NiwgNzM5MjQsIDExMjEsIDE5NDY2NSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCAKKyAgICA2NDc1MiwgNDczMiwgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgCisgICAgNDIwMjQsIDY0MjAsIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIAorICAgIDkxNzgwOCwgMTE4ODMwLCA2Mzk3OCwgMTEwNDQsIDMyMjksIDY0MjMsIDQyNzc0LCAwLCAwLCAwLCAxMjgyMywgMjMzMSwgCisgICAgOTE3ODEwLCA0MjAyNiwgNjEzNywgMCwgNzUyNCwgMCwgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCAKKyAgICA4MjIsIDEyNzk4NCwgOTkwMywgNjQ3MjEsIDQyNzIyLCAxOTQ2NTYsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIAorICAgIDc4NjYyLCA0MTI2NSwgNTMxMSwgMTc5NSwgOTY1LCAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAKKyAgICAxOTQ2NDAsIDAsIDEyOTQ2LCAxOTQ2NDEsIDExOTM0MSwgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgCisgICAgNjUwMTksIDE5NDY0OSwgNzM5OTAsIDAsIDAsIDc0OCwgNDEwNjcsIDIzMzAsIDUzNSwgMzE0OCwgMTIzNzUsIDE5NDY1MiwgCisgICAgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAKKyAgICAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDAsIDY1NzEsIAorICAgIDY1NTQ1LCA0ODg4LCA0MTU3LCA3ODA0OCwgNzgwNDksIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCAKKyAgICA2OTcwMiwgMCwgMCwgMTEzNzUsIDY0NzQ2LCAyMzMyLCA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgCisgICAgMCwgMCwgMCwgMCwgNjUxOTcsIDc4MDY2LCAxMjIwMywgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIAorICAgIDEyMDM4MSwgMTIwMzg5LCAxMTg4ODgsIDkzNDQsIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAKKyAgICAxMjAzOTMsIDc4MDc1LCAwLCAzMTM0LCAwLCA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIAorICAgIDM0NDksIDAsIDAsIDc4NDE0LCA3ODQxMywgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAKKyAgICAxMDczNCwgMTI3MDE0LCAwLCAxMjc5MTQsIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAKKyAgICAwLCA3ODA1NCwgNDkxNywgNzQ1MTYsIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIAorICAgIDc5NzEsIDc4MDcyLCA3ODA3MywgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgCisgICAgNDA5NzcsIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDAsIDQwOTgwLCAwLCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCAwLCAKKyAgICAwLCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgNzY5OCwgNTY1OCwgCisgICAgNzQwNDUsIDEyMDE2NSwgMCwgMCwgNDkxMywgMCwgMCwgMCwgNDIzMjYsIDEyODE5NCwgMTI3MjgsIDkyNjg1LCA0MjQ3OCwgCisgICAgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIDYxNTMsIDI4NjcsIDE5NDcwOCwgCisgICAgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3NDA3NSwgMTk0NzEzLCA2NTEsIDEyNjQxLCAwLCAwLCAwLCAwLCAKKyAgICA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIDc4NDYxLCAxOTQ2OTcsIDc0MzU2LCAKKyAgICA5MjYyNiwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAxOTQ3MDAsIDU1MjY0LCA0MTIxMSwgCisgICAgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDAsIDEwMTAxLCAwLCAwLCA4NDc5LCA0MTUxLCA0MTkzMywgMCwgMCwgCisgICAgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIDc0MDUwLCA5MjcwMSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgMCwgMjY5OSwgMCwgNzM4NDUsIDI5ODUsIAorICAgIDkyNTY4LCAwLCA5MTc4NDUsIDEyMTkyLCAxMTkzMTQsIDAsIDExOTMxMiwgOTgyNywgMTE5MzEwLCAxMTkzMTEsIDExOTMwOCwgCisgICAgMTE5MzA5LCAxMTkzMDYsIDExNDgxLCA0MTIxMCwgMTE5MzA1LCAwLCAzNSwgNzg0ODEsIDc4NDgyLCA2NjY5NCwgNjg0NzksIAorICAgIDc4NDc3LCA3ODQ3OCwgNDM1OTYsIDYwOTAsIDY0MjU3LCA3ODEyLCAxMDUzNCwgMCwgNzg0ODUsIDczODQ4LCA3ODQ4MywgCisgICAgNDI3MiwgMCwgNDA5NjcsIDQwOTY0LCA5MTc4MjUsIDEyNzA0LCA3ODQ4NywgNDMzMDYsIDAsIDY0NDk3LCAxMjEzOCwgCisgICAgNzkzMCwgMCwgNDMzMDMsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIDQxODksIDEyNzA5OCwgNjc1OTYsIDEyNzUwNCwgCisgICAgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMCwgMCwgOTE3ODI3LCA2NTU1NSwgMTI1NzQsIDAsIDAsIAorICAgIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgMTI1NzgsIDEyNzIwLCAwLCA0MTIyNywgMCwgCisgICAgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIDExODg1MCwgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCAKKyAgICA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIDk2MzIsIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDAsIDAsIDAsIAorICAgIDAsIDMxMCwgMCwgNDEyODEsIDEwOTc2LCAwLCA5MjE5MCwgMCwgNzQyNjYsIDEwMDU0LCA2NDk3LCA4NTc0LCAwLCA5MDEyLCAKKyAgICAxOTk1OCwgNzQ0MjAsIDY1MDg5LCAxMzIxNSwgMTI3MzAsIDY1MTYzLCA3NDA0NCwgMzc0LCA0MzE5NSwgODE2LCAwLCAwLCAKKyAgICAwLCA0MTkzNCwgNzQ2NSwgMCwgMTI4MTY4LCAwLCA0NzE1LCA2MTAxLCAwLCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIAorICAgIDMwNywgMTI3MTQ3LCA5NTg1LCA1Mzc0LCAwLCAxMjgwNTksIDAsIDAsIDAsIDAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIAorICAgIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCA3ODc5MSwgCisgICAgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMCwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIDU4MDAsIDEyMDE1NywgMCwgCisgICAgMTc2MCwgMjQyMSwgNDQ2OSwgMjMyNCwgODI4LCAzNjExLCA3ODQwMCwgNzU3LCAxMTg1LCAwLCA3ODc3MCwgNDM1OTcsIAorICAgIDEwNjI4LCA3NDgwOCwgMTk0NTcyLCA3OTk5LCA0Mzk3MSwgMCwgMCwgMTA2MzQsIDEwOTQyLCA3NzEzLCAyMzQ4LCAwLCAKKyAgICA2NDM3NCwgNDM4MCwgMTk0NjA4LCAxMTkwNDQsIDk5ODIsIDY0MzI0LCA0MTI0MCwgODYyLCA2NTYyNiwgNzg0NjIsIDE4MTAsIAorICAgIDM2NzMsIDUxMzcsIDE5NDYxNywgMCwgNzI3NywgNjU2MjIsIDAsIDc1NjYsIDY0Njg4LCAxOTQ1OTMsIDE5NDU5MiwgCisgICAgNzgwOTIsIDc0MzU3LCAxOTQ1OTcsIDQ3NDgsIDkyMjI4LCAxOTQ1OTgsIDE5NDYwMSwgNDIyNjAsIDU4NzEsIDExOTA3NSwgCisgICAgMCwgNzQ1NzYsIDQ0MDE5LCAwLCAxMjgxODksIDM5NjcsIDE5NDYwNCwgMTMxMzcsIDg3NzUsIDEyNzk0NSwgMCwgMjk2MywgCisgICAgMCwgODQxMCwgNDQ1NCwgNzIzLCAxMjc4ODIsIDk2NiwgNDQ0OSwgOTIzMzAsIDkyMjM4LCAwLCA3ODE5LCAyMzIwLCAKKyAgICAxOTQ1ODksIDMzOSwgNDk2OCwgMTk0NTkwLCAxMjAzOTksIDgwNzUsIDU1Mjc2LCAwLCA4MDQ3LCAwLCA3ODgyNywgMTI2MzQsIAorICAgIDQxNTQyLCA3ODc4MCwgNzQ2NiwgNjcwNSwgMTIxNzQsIDQyNjEwLCAwLCA3NDQ1MiwgMCwgMTU4NCwgNjY2NDUsIDYwNDUsIAorICAgIDY3MjksIDEyMDY0MCwgNjUyMTgsIDc4Nzc3LCAwLCA3ODA2MiwgNzUzNywgMCwgMTEzNzAsIDAsIDEwMzMwLCAwLCAxMDM5NCwgCisgICAgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgMTE5NjA1LCAxOTQ1NzgsIDcwNzQsIDkyNjQ4LCAKKyAgICAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIDAsIDAsIDQyMTEsIDEyNTksIDc1MTcsIDAsIDAsIAogICAgIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIDE5NDU2NywgMTk0NTY2LCAxMTA2NCwgNDExMjksIDAsIAotICAgIDQyODUwLCAxMzAzNSwgOTA3NSwgMCwgNTQ2NiwgMTk0NTcwLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIDE5NDU3MywgNDI3MSwgCi0gICAgMTk0NTc1LCAwLCAwLCA0MTQxMCwgMCwgNjQyNjIsIDAsIDQxNDA3LCAwLCAwLCA0MTEzMSwgMTE4ODY0LCA5MDQ2LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NDMzOCwgMjU2MywgMTMwMzMsIDI0NywgOTE3Nzg3LCAwLCAxMjMzOCwgNDY1MSwgCi0gICAgMCwgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNjc4OTIsIDExMDAxLCAwLCA0MjI1NSwgMCwgMCwgMCwgCi0gICAgNDE5MDUsIDAsIDAsIDEwNzc1LCA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDAsIDQyNTM1LCAwLCA2NDUyOSwgCi0gICAgNDE0MDgsIDQyODUzLCAzODc3LCAwLCAwLCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCAwLCAxMDIzNiwgNjU5MTgsIDAsIDAsIDAsIAotICAgIDY0NTA2LCAwLCAxMTg5MjEsIDQ3NDcsIDAsIDAsIDQzMjAwLCA1ODMyLCAwLCAwLCA1MTQxLCA0MjYwMCwgMCwgNDMyMDMsIAotICAgIDAsIDAsIDQzMjg2LCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEzNywgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIAotICAgIDAsIDYwNTksIDEyNjk4NSwgMCwgMCwgODUzNSwgMCwgMCwgMTk0Nzg3LCA2NjAzMiwgMTE0ODgsIDAsIDEyMDc4NiwgMCwgMCwgCi0gICAgMTA1NTgsIDYzODg1LCAwLCAxMTgyMiwgMCwgNDMxODksIDAsIDAsIDE3ODgsIDE1NzksIDEyMDQ4MiwgOTE3ODE3LCAwLCAwLCAKLSAgICAwLCA5MDI4LCAxMTk1NzEsIDAsIDAsIDAsIDEyODUsIDY0ODgyLCA0MTI0MiwgMCwgMCwgMTI2NDAsIDAsIDY2NjQyLCAwLCAKLSAgICAxMjYyNSwgMCwgMCwgMCwgMzk0MCwgNDE1OTcsIDAsIDMzOTYsIDEyNjQyLCA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgMCwgCi0gICAgMTAxNTMsIDAsIDYxNjYsIDEyMDUxNiwgMTIwNTIzLCAwLCA4ODE1LCA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIAotICAgIDExOTMxNywgMTE5MzE4LCAxMTkzMTUsIDExOTMxNiwgNDI0ODUsIDExODgzNywgNzg3OCwgODIxMSwgNDIyOTMsIDY0Mzc3LCAKLSAgICAwLCAwLCAwLCAwLCAxMjAzMiwgMCwgOTcyNSwgMCwgMCwgNTI2MywgMTI4MTgsIDAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIAotICAgIDExODgzMSwgNDI3NzcsIDEwMTM5LCA5ODAsIDAsIDY1Mzg2LCAwLCAwLCAwLCA0MzE5OCwgNzE4NCwgMCwgMTk0Nzk3LCAKLSAgICA5MTc4MTksIDEwMDg1LCAxMTk5OTIsIDAsIDExOTk5OSwgNjYzNCwgMCwgMCwgMTE5MzIzLCA4MDcyLCAxMTkzMjEsIAotICAgIDExOTMyMiwgMCwgODg3MiwgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIDAsIDEyMDU2NSwgCi0gICAgOTkxNCwgMTI3MDExLCA5MTc4NTQsIDczOTc1LCA3NDI4MSwgMCwgMCwgMCwgOTE3ODUzLCAwLCA2NDczNSwgNDEyNDMsIDAsIAotICAgIDc4MDgsIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgMCwgMCwgMCwgMCwgMCwgMTcxMCwgMCwgMCwgMCwgMCwgNDksIAotICAgIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCAwLCA5NzQxLCAxMjA0MjMsIDU2NDksIDkxNzk4NiwgMCwgNjQ0MTgsIDE2NDMsIAotICAgIDc0MTA0LCA4NDA1LCAzNDcwLCAwLCAxMzIxMywgNDI0NTIsIDkxNzk4NywgMCwgMTIwMDA5LCAwLCAxMDcyLCAwLCAKLSAgICA5MTc5OTAsIDAsIDY1NzYsIDQxOTg4LCA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgNzQxMDAsIDAsIDExMDEsIAotICAgIDEyMDAwMSwgMTIzMDksIDAsIDAsIDEyNjMyLCAxMDg2LCAxODY5LCAwLCA3NjgwLCAwLCA2NTQ1OCwgMTIwNzE0LCAxMjYzOSwgCi0gICAgMzM4MCwgODEyMywgMTA5MSwgMTI2MzgsIDc5NzcsIDQ1MDEsIDAsIDAsIDY2MzA5LCAwLCAwLCAxNDk0LCAwLCAwLCAwLCAKLSAgICAxMTY5MywgMCwgMTA0OTQsIDExOTIzMCwgNjU4NzIsIDEyMzYzLCAxMTM4NiwgMCwgMCwgMCwgMCwgNjQ1ODIsIDAsIAotICAgIDczNzk0LCAwLCA4MDIyLCAwLCAwLCA3NDEwNiwgMTI0MTMsIDAsIDAsIDAsIDAsIDU1NzAsIDE4ODEsIDcyMTAsIDAsIAotICAgIDEwMTIsIDY2NjMwLCAwLCAxMjA3MDksIDcyMDgsIDY2NDQyLCA1NTY5LCAwLCA0MjMzOSwgMCwgNjA2MywgMCwgMCwgMCwgCi0gICAgNjA1MywgNjU2MDIsIDAsIDAsIDY0NzI3LCA5MTYwLCAxOTQ4MjcsIDAsIDAsIDAsIDEwNTAzLCAxMTg4MTAsIDYwNTUsIAotICAgIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDAsIDAsIDAsIAotICAgIDEyMDExOSwgMTIwNDEzLCAxMjAxMTcsIDEyMDExOCwgMTIwMDk5LCAxMjAxMDAsIDY1MDg3LCA1NTcxLCAzNjc0LCA5NzQwLCAKLSAgICA5MTIxLCA1NTY4LCAxMjAxMDcsIDEyMDEwOCwgNDIwODUsIDEwMTA3LCA2NDU2NywgNDI4NzAsIDEyMDEwMSwgNTg5LCAKLSAgICA3MDUwLCAwLCA0MzI4MSwgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAwLCA3NDA5OSwgNDI2NDUsIDAsIAotICAgIDE5NDgxNSwgODU4MywgMCwgNTg0NywgNjkyOCwgMCwgMCwgMCwgMCwgMCwgNjY1OTIsIDEyMjA0LCAwLCAxOTk2NiwgMCwgCi0gICAgNDI1NjEsIDEyMDYyNiwgMCwgMCwgODEyMCwgMTIwNzAxLCAwLCAwLCAwLCA0MTA2MywgMCwgMTA2NjQsIDAsIDgzNjksIDAsIAotICAgIDQ1NTEsIDAsIDc0NzU5LCAwLCAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMjcwMDIsIDEyNTE3LCA1NTcsIAotICAgIDk0NTcsIDEyMDM0LCAwLCA0MTA1NiwgMTI1MTksIDQxMDA0LCAwLCAwLCA3NDA5NCwgMCwgMCwgMTE5MDAxLCAwLCAwLCAwLCAKLSAgICAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCAwLCAxMDQ0MSwgNzM4MzYsIDAsIDAsIAotICAgIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIDE2MTgsIDAsIDAsIDk2NDUsIDEwNDMwLCAwLCA1ODUzLCAKLSAgICAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAwLCAwLCAxMTMxNCwgMCwgMTIwNjAsIDAsIDAsIDEyODI2LCAwLCAwLCAxMDUxNCwgCi0gICAgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDAsIDQzNTcwLCAyNjk3LCAwLCAwLCAxMjcwNTcsIDI2OTUsIAotICAgIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTk0ODE0LCAwLCAyNjkzLCAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDAsIDAsIAotICAgIDQxOTE4LCAwLCAwLCA4Njg3LCA2NjAwOSwgMTIxNzgsIDcwNTMsIDAsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIAotICAgIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgCi0gICAgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCA2MTA0LCA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCAKLSAgICA3NDQzOCwgMCwgMCwgNjc4NDEsIDc0MzcwLCAwLCA4OTIyLCAwLCA3NDYwMCwgNzQ0MzUsIDc0ODM2LCAwLCAxMjU3OSwgMCwgCi0gICAgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIDEyNTIsIDAsIDAsIAotICAgIDQxNDMxLCA3NDM2OSwgNjUzNzMsIDUyOTUsIDAsIDc0MTE0LCAxMjIzLCAxNjQyLCAxNzQsIDAsIDg4MywgNDE2MSwgCi0gICAgMTI2OTEsIDQyNjAzLCA0MTQxMywgMzIxMiwgMTI3MDI1LCAzMjExLCA3NDgxMCwgNDE0MjUsIDEyNzAyOSwgMCwgNzQ0NTAsIAotICAgIDk3MjgsIDM4NDYsIDgwNzAsIDYxNTAsIDY2MzYsIDQzNzAsIDAsIDAsIDc0MTc4LCA3NDU4NywgNzQxMTcsIDAsIDAsIDAsIAotICAgIDQ5ODYsIDEyMTg5LCAwLCAwLCAxMjA0OTksIDkxNzU1MywgNDI1NywgMTIxMDQsIDExOTE4MiwgNjIyMCwgOTAwNCwgCi0gICAgNjU1NjEsIDAsIDAsIDAsIDY4MTM1LCA5MTc1NzYsIDAsIDAsIDAsIDAsIDk4OTAsIDAsIDEyOTcxLCAwLCAwLCA3Mzg5OCwgCi0gICAgMTE5NzksIDAsIDExODkwMCwgMCwgMCwgOTYzNSwgMTI2MDAsIDg4NzEsIDAsIDAsIDAsIDY0NjksIDc0MjI3LCAwLCAKLSAgICA2NTMwNCwgNDY3OSwgMTAyMzAsIDY0MzAwLCA2NDg2NywgMzQyNywgNDI0MCwgMCwgMCwgMCwgMCwgOTE3OTUyLCAwLCAwLCAKLSAgICAwLCA3MjgyLCAwLCA2NTczMywgNjQ2MTgsIDAsIDAsIDM0OTQsIDc0NjA2LCA2NTU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NTg5OCwgMCwgNjUzMTIsIDU0NDcsIDAsIDEyODk1LCA2NTU5MywgNDAxMCwgMCwgNDExMDYsIDAsIDY1ODA0LCAwLCAKLSAgICA0MTEwNSwgMCwgNjU4MjAsIDYyMzIsIDAsIDAsIDAsIDQzNjA4LCAxMTkwOTEsIDAsIDY1MzgsIDQzMzUsIDAsIDM5NDEsIAotICAgIDQxMTIyLCAxMTA2MSwgMCwgNjQ4OTIsIDkxMTMsIDE5NTQsIDEyMTU1LCAwLCA0Mjg3OCwgMCwgMCwgMCwgNzQ1NzgsIDAsIAotICAgIDY1ODMyLCAwLCAwLCAwLCAwLCAwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDAsIDAsIDAsIDUxMzMsIAotICAgIDAsIDAsIDk1MDAsIDAsIDEyMTYyLCA2NDc0MSwgMCwgOTM1NCwgMCwgMCwgMCwgMjQ5NiwgMTE1MTYsIDk0NCwgMTE4ODUxLCAKLSAgICAzODkwLCAxMjE2OCwgMTQzOCwgMCwgMCwgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMCwgMCwgMCwgMTU3MSwgNDI2MzAsIAotICAgIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIDAsIDAsIDAsIDg4NzcsIDI2OSwgNDQyOSwgCi0gICAgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgMCwgNDExMjAsIDY1MTIxLCAxMDg2MiwgNjA2MCwgNDExMTksIDQxNDE2LCAKLSAgICA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgMCwgMTE1MzIsIDc0MDczLCAwLCAwLCAxOTg1LCA2Mjk2LCA5NTgyLCAKLSAgICA5MTc4OTUsIDY0Mjg3LCAwLCAwLCAxMTQyOCwgMTczMCwgMjQ1NywgMCwgMTk5MTgsIDEwNDY5LCAwLCAwLCA3NzAzLCAKLSAgICA4ODQwLCA4MDM1LCAwLCAwLCAwLCAwLCA2MTI5LCAwLCAwLCAwLCAwLCA3ODc0LCA4NjgxLCAwLCAwLCAxMzEzNiwgMCwgMCwgCi0gICAgNzQyNzgsIDYzODg2LCAxMTg4ODEsIDk2MDUsIDczODkyLCAxMzIyMCwgMCwgMCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgCi0gICAgNTI0MCwgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDAsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgOTUwMSwgMCwgMTI3MiwgCi0gICAgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAwLCAwLCAwLCAKLSAgICAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCAwLCAxOTkzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTI3NSwgMCwgMCwgODYzNywgCi0gICAgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCA2NjMzMiwgNjY2MDMsIDAsIDAsIDEyMDQyLCAKLSAgICAwLCAwLCA5NTM3LCAzOTYxLCAxMjExNSwgMCwgMjYwNSwgNDUwMCwgNjQ1NjEsIDAsIDQ5ODEsIDAsIDAsIDYzODc2LCAKLSAgICAxMTY2NywgMCwgMCwgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgMTIwMTk0LCAwLCAKLSAgICA4NTQxLCAwLCAwLCA0MTg2NiwgMCwgMCwgMCwgMCwgMCwgNDM1NTUsIDI4MjMsIDk1NTksIDAsIDQxOTQwLCA4Mjk5LCAKLSAgICA0MTk0NSwgMCwgNDE5NDEsIDMzMDgsIDcxOTAsIDY0ODgwLCA4NjE0LCA2NTIyMCwgNDE0OTMsIDAsIDQxNjk5LCAxMDc2MiwgCi0gICAgMCwgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDAsIDQ0OTQsIDAsIDQwMTIsIDEwMzk1LCAwLCAxMTk1NjcsIDY1NDQ3LCAKLSAgICAwLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgNDI3NTUsIDc0ODAyLCA5MjI3LCA3NTA2LCA3NTEwLCAwLCAKLSAgICA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgNjg4LCA0MTg0NywgNjkwLCAyNTQ4LCA3MzcsIDk3NCwgODAwMywgCi0gICAgMCwgMCwgMCwgMCwgMzk4NSwgMCwgNjU4NjAsIDYzOTIxLCA3MDUxLCA3NDIwOCwgNDY4MiwgMCwgMTI4MDksIDY0MDYsIAotICAgIDQ2ODUsIDAsIDEwODc5LCAxMDM0NywgNDY4MCwgOTA1NSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgCi0gICAgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAwLCAwLCAwLCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCA0MzU2OCwgMCwgCi0gICAgMTE3MTcsIDc2NTAsIDEwNTk0LCA2NDk1MSwgNzY0NywgNzY0OSwgMCwgNzY0NiwgMCwgMCwgOTY1MSwgMCwgMzg5MSwgMCwgCi0gICAgMCwgMjMzNywgMTczNSwgNzQzMjQsIDY3ODYwLCA1NDUyLCAwLCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIDc0OTUsIAotICAgIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDAsIDAsIDAsIDAsIDc3MjcsIDAsIDg0OTgsIDAsIDg5NDksIDMwNjUsIDAsIDAsIAotICAgIDE1NjksIDAsIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgMTI1MzMsIDAsIDY0MTgsIDQ1NDMsIDAsIDY5NjksIDAsIDc0ODAwLCAKLSAgICAwLCAwLCAxMTk4MCwgMCwgMCwgNjM4OTQsIDAsIDEyMjgyLCA2NjE5MiwgMCwgMCwgODg1MCwgNzQyNzUsIDkyMzgsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEyNzkxLCAwLCAwLCAwLCAwLCA3MzczMiwgMTI3OTMsIDEyOTAwLCAwLCAxMDk1MCwgMCwgMCwgMTI3OTAsIAotICAgIDQxNDAwLCAxMTkxMjgsIDAsIDEyNzkyLCAwLCAwLCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgMCwgCi0gICAgNDEzOTksIDAsIDAsIDAsIDAsIDEyNjkwLCAwLCAwLCAwLCAwLCA0MTY1MiwgMjk3NCwgMCwgMTEzMTUsIDAsIDI3OCwgMCwgCi0gICAgNDE0MDUsIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIDQzNTUzLCAwLCAKLSAgICA2NzkwMywgMCwgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgMCwgMCwgMCwgMCwgNjQxMywgCi0gICAgNjU1MCwgMCwgMTk0MCwgMCwgNjYyMjMsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgMTAwNDQsIDAsIDAsIDAsIDAsIAotICAgIDY0MDMsIDU3MDcsIDEwMzkzLCAwLCAwLCA2NjYxNCwgMCwgMCwgMCwgMTAyOTcsIDAsIDM3NDIsIDAsIDM5NTksIDAsIDAsIAotICAgIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCA2Mzg0NSwgNDE4MiwgMCwgNDY3NiwgMTIwNTAxLCAwLCAKLSAgICAwLCAyNTEwLCAwLCAxMDIwOCwgMCwgMCwgMTE1NDAsIDQzNTQ2LCAxMjE4NiwgMCwgNDEwNjAsIDAsIDAsIDkwODMsIDAsIDAsIAotICAgIDAsIDE1NTksIDYzODMxLCA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgCi0gICAgNDMwMjcsIDAsIDQxNzE2LCAwLCAwLCAwLCA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgCi0gICAgMTIwNDUsIDYyNzgsIDAsIDU1MTUsIDAsIDAsIDAsIDAsIDQzMjIxLCA2NTE5NCwgMCwgNTUxNywgMCwgMCwgMCwgNjc4ODQsIAotICAgIDAsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAwLCAxOTAyLCA2Nzg4NywgCi0gICAgOTYzOCwgMTI5NzYsIDAsIDEyNDgzLCA2Nzg3MiwgNDE3NjksIDAsIDQxNzY1LCAwLCA2NjY3LCA2Nzg3NCwgNzU1NiwgCi0gICAgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA2Nzg3NiwgNjc4ODksIDAsIDEzMTEsIDAsIDQzMjYsIDExMDAwLCA2MzgyNCwgCi0gICAgMTMwNjgsIDEwOTMyLCAwLCA2OTE3LCAwLCAwLCA5NDksIDkxNzU5NSwgMCwgNjE0OCwgODYwNSwgNDIyNTMsIDkxNzk2NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNjM4NzEsIDAsIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIAotICAgIDAsIDAsIDQ0MzEsIDQzMzEsIDAsIDAsIDQxODM0LCA1Mjc5LCAwLCAxMDMzNiwgODMxMiwgMCwgMTE4ODYxLCAwLCAwLCAKLSAgICAxMTk2NTQsIDY2MDM2LCAwLCAwLCA2NDI4LCA0MjI3MCwgMCwgMCwgMTE4ODY2LCAwLCA1MjU2LCAxMDY3LCAyNTUsIAotICAgIDEyMTMxLCAwLCA5NDkzLCAwLCA0MTAxNCwgMTE3OTMsIDAsIDAsIDc0Mzk0LCA0MzU5NCwgMTA2NTMsIDAsIDAsIDExOTYzMiwgCi0gICAgMCwgNjU2MCwgNzAxNiwgNzQyNzQsIDAsIDQzNTU2LCAzOTI5LCAwLCA2NjE0LCAyNzY4LCAwLCA5NzQ2LCA1MTM1LCAKLSAgICAxMTgxMSwgMTI3OTYsIDExOTUzLCAwLCAwLCA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgNTE2OCwgMCwgCi0gICAgMCwgNzQzMTUsIDc0MzYxLCA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgMCwgMCwgMCwgNjUyODUsIDgyMzAsIDkzNjUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDAsIDEyNzg2LCAyMjksIDExOTg4NSwgMTE5ODg0LCAwLCA0MzU1MiwgCi0gICAgMTE5ODgxLCAxMjM1MCwgNjU1NTQsIDExOTg4MiwgMTE5ODc3LCAxMTk4NzYsIDEyNzg1LCA2Mzg2MywgMTE5ODczLCA3NzcwLCAKLSAgICAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIDQyMzc1LCAwLCAwLCA2NjM1MiwgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgCi0gICAgMCwgNDUwLCAwLCAwLCAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA2Mzg1NiwgMCwgNjYzMzgsIDAsIDAsIAotICAgIDE4MzksIDExODc5OSwgMCwgMTA5MjcsIDE3MDEsIDAsIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgMTE5ODY1LCAKLSAgICA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCAxMTk4NjAsIDExOTg2MywgMTE5ODYyLCAwLCAwLCAwLCA2NjQzMiwgODgwMSwgCi0gICAgMzA1MywgNDM0MCwgMCwgMCwgNjU4MTIsIDAsIDAsIDQxODI0LCAwLCAxOTQ4MDEsIDE5NDgwMCwgMTk0ODAzLCAxMTg5OTcsIAotICAgIDE5NDgwNSwgMTk0ODA0LCAxOTQ4MDcsIDE5NDgwNiwgMTk0ODA5LCAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIAotICAgIDIzMTQsIDQzNjAyLCAwLCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDE5NDc5MSwgCi0gICAgMCwgMTk0NzkzLCAxOTEyLCA0MjM4NSwgMTAzMDYsIDEwMzcwLCAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIAotICAgIDE2MzUsIDE5NDc5OCwgMTQxMCwgMCwgMCwgMTE4ODc4LCAwLCAwLCAwLCAwLCA1NTksIDAsIDQxODI1LCAwLCAwLCA0ODkyLCAKLSAgICA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMCwgNTc3NywgMCwgNzU5LCA2NTc0OSwgNjU3NTAsIDY1MjQ4LCAxMjc4OCwgCi0gICAgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDAsIDM2NjgsIDY1NzU0LCA0MzU2MCwgMTIyMjYsIDAsIAotICAgIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgMTIwMTU0LCA2NTc0NywgMTA5MzcsIDI5NjIsIAotICAgIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCAwLCA4OTIxLCA2NjAxMywgMCwgMCwgMTk0NzY5LCAxOTQ3NjgsIDE5NDc3MSwgCi0gICAgMTk0NzcwLCAyOTQ5LCA2NjAxMiwgMTk0Nzc1LCAxOTQ3NzQsIDI5NTgsIDE5NDc3NiwgNDE4MjAsIDQzMDM4LCAyMzk1LCAwLCAKLSAgICAwLCAxMjAwNDMsIDE5NDc3OCwgMTIwMDU4LCAxOTQ3ODAsIDE5NDc3OSwgNDI4MDksIDQyODA3LCAwLCAxMjAwNDcsIAotICAgIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDAsIDQxODk4LCAyMzYwLCA0MTc5NCwgOTE3OTQyLCAwLCAwLCAwLCAKLSAgICAwLCAyNDE4LCAwLCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgCi0gICAgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDExOTU3NiwgMCwgMCwgMTAzODQsIDAsIDAsIDAsIDc3NTMsIDIzNTEsIAotICAgIDY2NTUsIDY0NDg5LCAwLCAwLCAwLCAwLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgNDg1NSwgNDIxNTAsIDY1NzM5LCAKLSAgICA1NDQxLCA0MTg5NiwgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCA2MzgzOSwgMTE5MTE2LCAwLCAKLSAgICAxMDA5OCwgMCwgNzQxNDUsIDAsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIAotICAgIDQxODg3LCAwLCA0ODYyLCA5NzM1LCA2NTM3LCAxMjA1OTEsIDAsIDM5MTQsIDExOTYwNCwgMCwgOTA2NSwgMTI5NjEsIDAsIAotICAgIDAsIDAsIDAsIDI4OSwgMCwgNDY5NCwgMTE0MjAsIDQ2OTAsIDAsIDEyMDUxNCwgMCwgNDY5MywgMCwgNzM5MTksIDAsIAotICAgIDQ2ODgsIDEyMDQ1NCwgMCwgMCwgMTE5NjI5LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDAsIDEyMDE2MywgNjUyOCwgMCwgCi0gICAgNDMwMzUsIDEyMDE2MSwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgMCwgMCwgMTIwMTU4LCAxMDA4OCwgCi0gICAgNjU0OCwgMCwgMTIwMTU2LCAwLCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDA2NSwgODIwNywgMCwgMCwgMCwgMCwgNjYyLCAwLCA5MjQ0LCAwLCAwLCAxMTkyNjEsIDAsIDAsIDAsIDAsIDQxOTI5LCAKLSAgICAwLCAwLCAwLCA0MTkyNiwgMCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDAsIDAsIDUyLCAxMzExOCwgNjQ3NSwgMCwgMCwgCi0gICAgMTIwOTUsIDEwMjI1LCA0ODEyLCAwLCAwLCAwLCA3NDA4NSwgMCwgMzk3OCwgMCwgMCwgMCwgMTE1ODIsIDEyMDc2MSwgCi0gICAgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCAwLCAwLCAwLCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIAotICAgIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIDIwMzYsIDk4NiwgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIAotICAgIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCAwLCAwLCAwLCAwLCA2NTEwMiwgODk2MSwgMCwgMTAyNDMsIAotICAgIDEwMjQ1LCAwLCAwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCAwLCAwLCAyMDIsIDAsIDc0MTMxLCAxMjQyLCAwLCAKLSAgICAwLCA2Mzk0MCwgMCwgNjQ1MzMsIDAsIDAsIDY3ODQyLCAxMTk5MCwgMCwgNjM5MzksIDAsIDY1NDQwLCAyNTA0LCAwLCAwLCAKLSAgICA2NDgyOSwgMCwgNjk0MywgMCwgNTg1OSwgMCwgMjg1OCwgMCwgNzQyOTQsIDAsIDc0MzA1LCAwLCAxMTkwMjcsIDEyOTkyLCAKLSAgICAyNzUzLCAxOTM2LCA3NDQ5MSwgMCwgMjc1MSwgMTI2NjIsIDI3NjMsIDg5NTMsIDY0NzAxLCAxMDczMSwgMTI5MjIsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc0MTI4LCAyODU2LCAxMTk5MTAsIDQ3LCAxMTk5MTEsIDEyNjk4NiwgNjU4NTgsIDAsIDAsIDAsIAotICAgIDc4OTksIDAsIDg0MTcsIDY1OTAzLCA3MDcyLCAwLCAwLCA0MDMzLCAwLCA2NjQ3NCwgMCwgMCwgMjEyLCA2NDYwMCwgMTkwMywgCi0gICAgMTIzMjAsIDAsIDAsIDAsIDAsIDg5MTUsIDI3NTksIDk0NSwgMCwgMCwgMCwgMCwgMCwgMTI5MSwgNzQ4MjgsIDAsIDAsIAotICAgIDk1MzEsIDEzMTU1LCA4NTA1LCAwLCAxMjA2MiwgMCwgMCwgNjU0ODcsIDAsIDQxODM3LCAxMjA2MTEsIDEyMDQzMiwgMCwgMCwgCi0gICAgMCwgMTIwNDMzLCAwLCA2MzkzNSwgNzM5NjIsIDAsIDY0Nzg3LCA0MzUyNCwgMCwgNjQ0MjYsIDAsIDAsIDAsIDAsIDY1NjY0LCAKLSAgICA2NDc4NSwgOTg0MywgMCwgODY3NCwgMCwgMCwgMCwgMCwgMTI2MjQsIDAsIDE2NzMsIDQ4MTEsIDAsIDU5ODYsIDkzMzgsIAotICAgIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIDExOTU5OCwgOTgyMCwgMCwgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCAKLSAgICA0MzkzLCAwLCAwLCAwLCAwLCAwLCA3NDgyNiwgNjQ3MzMsIDAsIDAsIDM0OTEsIDAsIDAsIDAsIDM1MTQsIDY1NDg1LCAwLCAKLSAgICA3NDkyLCAwLCAwLCAwLCA3NTE0LCAwLCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDAsIDAsIDAsIDYzOTI1LCAwLCA3NjEwLCAKLSAgICAyMTksIDAsIDAsIDY5MiwgNDM1ODgsIDc0NDMzLCA0MTYzNSwgMCwgOTY4OCwgMCwgOTUzNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ2MTAsIDExODA0LCAwLCAwLCA3NDUzLCAwLCA4MDEzLCAwLCAwLCAwLCA4ODk1LCA1MjUzLCAwLCA1NDU4LCAwLCAyODY2LCAKLSAgICAwLCAwLCA2NTExMSwgMCwgMTIwMTgsIDEyMDQ4NCwgMCwgMCwgMCwgODk2MiwgMCwgOTY0MSwgNjY2NTMsIDcwNTksIDAsIDAsIAotICAgIDk2MDQsIDAsIDc0NDEsIDYzODI2LCAwLCAxMTg5NDEsIDY0MzkyLCAwLCAwLCAyODQ0LCAwLCA0MTk3NCwgMCwgMTIxMzksIAotICAgIDAsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAwLCAwLCAwLCAwLCA1MzA4LCAwLCAyOTAsIDAsIDAsIDI4NjIsIAotICAgIDI3OTIsIDE5NTA4OCwgMCwgMCwgMzI2OCwgNjY1OTEsIDAsIDY1NTIsIDQyMzY3LCA3MDM1LCAxMjA1NTgsIDAsIDAsIAotICAgIDE4MTQsIDAsIDEwMjQwLCAwLCAxOTUwOTIsIDAsIDExOTAyMCwgMCwgMCwgNDI2NDYsIDc2MDYsIDI1OTEsIDI4MzcsIAotICAgIDQzNDEsIDAsIDY0NDgyLCAwLCA4MTYzLCA2NTI3MCwgMCwgMCwgMCwgOTExMiwgNzQ0MzEsIDg2MywgOTQ5MCwgMCwgMCwgCi0gICAgNDMzMjMsIDEyMDUxMywgMCwgOTA3MSwgMCwgMCwgMzY1NCwgMCwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAKLSAgICAwLCA2NjU4NywgMTk1MDk4LCAwLCAwLCAwLCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAwLCA3NDA4OCwgCi0gICAgMzA1NiwgMTA4MjMsIDAsIDAsIDg3NjIsIDEwNTA4LCA3NDUwNiwgNzM3NzAsIDYzOTk0LCA0MzE5MywgMTA3MzcsIDM0NjMsIAotICAgIDAsIDAsIDY2NjMzLCA4Njk1LCA0ODE1LCAxMTMyMiwgNTgxMSwgMTIzNDUsIDcwNDksIDAsIDUxOTUsIDAsIDAsIDY2NjM5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMjA1NjEsIDEyNjIsIDAsIDY1NjEsIDE5OTM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTk5MDcsIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgMCwgMCwgOTEwNywgMCwgNTcwMiwgMzY1NSwgMCwgODQzMCwgCi0gICAgMCwgNzQxMzIsIDAsIDAsIDc0MDU3LCA5NjAzLCAwLCA1MjU0LCAxMjA3NDIsIDc3MjQsIDc0Mzg4LCA3NDgzOCwgMTA3OTYsIAotICAgIDUxMjksIDAsIDAsIDU5MCwgNzU3OSwgNTYxNCwgNTg5MywgMTk0NzQ0LCAxMTcyMCwgMCwgMTE3MjEsIDAsIDAsIDAsIAotICAgIDEyMDU0MSwgNjYwMzgsIDQ3OTMsIDY3ODUxLCAxMTcyNiwgMCwgNzQyMDQsIDAsIDAsIDkxNzYwMCwgODk0LCAzMDAsIDAsIAotICAgIDEyMzA2LCA2NjIzNSwgMCwgMCwgMCwgMjU2MiwgMCwgMCwgNDI1MDMsIDAsIDExNjUyLCAwLCAwLCAxMTkyNDEsIDAsIDAsIAotICAgIDUwOTYsIDUwOTUsIDI4NjMsIDM0MjQsIDAsIDEwNDU0LCA0MjUzMCwgNTA5NCwgMTE5NjM4LCAwLCAxMzE1NiwgMCwgCi0gICAgMTA4MzIsIDUwOTMsIDAsIDAsIDAsIDUwOTIsIDEwNzA4LCAxMTMyNywgMCwgNTA5MSwgMTc2LCAwLCA5MTUzLCA0MTA0LCAwLCAKLSAgICAwLCAxMjE1LCAwLCA1NzQ0LCAxMjI3MiwgOTgzMiwgMTE3NzcsIDAsIDAsIDQyODgxLCAwLCA4OTgwLCAxMTg5ODgsIAotICAgIDY3ODYxLCA4ODQ0LCA3NDMzLCAwLCAwLCA0Mjc4LCAwLCAwLCAwLCAwLCA5MDc0LCA0MzQ4LCAwLCA2NTU1OCwgNjU5NDYsIAotICAgIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDAsIDU4NiwgNzQ0MTQsIDY0MzU5LCAxMjY3LCAKLSAgICAwLCAwLCAwLCA2NTczMSwgMCwgMCwgMzYyMSwgMCwgNjY2NjYsIDAsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgCi0gICAgMTEzODMsIDAsIDAsIDAsIDE3MTQsIDc0NDA2LCAwLCAwLCAwLCAwLCA2NjIyNSwgMCwgMCwgMCwgMTE0MzYsIDExOTYxNSwgCi0gICAgNjQsIDAsIDAsIDEwMjkxLCAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDAsIDAsIDQyMDExLCA0MTk5OSwgCi0gICAgMCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCAwLCA2NTgzMywgMCwgMCwgMTc2NSwgMCwgMCwgCi0gICAgNjU1ODgsIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAwLCAxMDQ3OSwgNjQ5NTksIDI4NTIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY5NjMsIDAsIDEyNjY3LCAwLCA3NDc4NiwgMTAxNDcsIDEyOTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA2NDk0NywgMTI0NjcsIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIDQxNjc1LCAwLCAyNzY1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA2NjY2MiwgMCwgMCwgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMCwgMCwgMTE5MjQ0LCAyNjMsIAotICAgIDEwNDQ5LCA0MTI4OCwgMCwgNDE4MzksIDAsIDAsIDAsIDAsIDY5MzEsIDAsIDY0MzU1LCA3MTc3LCAxMjA1MzAsIDAsIDAsIAotICAgIDAsIDQyNjIsIDEwMjg1LCAxMDcyMiwgNDIwMjAsIDAsIDAsIDY5OTIsIDQyMDE5LCAwLCA0MTI5MCwgMCwgNzUwLCAwLCAwLCAKLSAgICAxMDE2MywgMCwgNzQwNjYsIDcwMzIsIDU5NTQsIDY0OTMxLCA0MzE0LCAwLCAxOTgsIDAsIDczMCwgMCwgMCwgMCwgMCwgCi0gICAgMTMxNjUsIDEwODE0LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgMTE4OTYwLCAwLCA0MTM3OCwgMTEwMDgsIDY5MzgsIDAsIAotICAgIDAsIDQyODEyLCA2NjI0NiwgMTIwNTYwLCAwLCAwLCAwLCAzODkyLCAwLCAwLCAwLCA2NjA0NSwgNDE0NzAsIDY0ODA1LCAwLCAKLSAgICAwLCAwLCAxMTg5ODIsIDAsIDQ5NywgMTIxMDAsIDU5NTMsIDAsIDc3OTYsIDAsIDAsIDczODMxLCAwLCAxMDI5MywgNTk1MiwgCi0gICAgMTI4MSwgMCwgMCwgMCwgMTA2NzcsIDYwNCwgNDEwOTcsIDkxODIsIDE4NTksIDAsIDAsIDM0MjUsIDAsIDAsIDI4MzYsIDAsIAotICAgIDAsIDk3MDcsIDAsIDQzMjAyLCAwLCAwLCA2NTE5OSwgMTczOCwgMCwgMCwgMjgzMiwgMCwgOTY3MCwgMTI5MzcsIDAsIDAsIAotICAgIDAsIDAsIDI4MjIsIDAsIDQ0MzYsIDAsIDAsIDczNzUyLCAwLCA2NDg3MiwgMCwgMTMzMSwgMCwgMCwgMCwgMTI3MDgsIDAsIAotICAgIDUwOTAsIDUwODksIDAsIDAsIDExOTEwOSwgMCwgMCwgMzE5LCAxMTg5MzEsIDAsIDk0NzcsIDAsIDAsIDUwODcsIDAsIAotICAgIDc2NDAsIDk2LCA1MDg2LCAwLCAwLCAwLCA1MDg1LCA2NDI4NiwgMCwgMCwgNDE0MjIsIDAsIDExOTkwMSwgNDIzNTYsIAotICAgIDM3NzIsIDAsIDAsIDUwMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDY2NzcsIDc2MDEsIDAsIDU5MSwgNjQ0MTksIDExODk1MywgMCwgCi0gICAgMCwgMTE4OTIzLCAwLCAwLCAxMDkzOSwgNjEwNiwgNjkzMywgNDEyNzEsIDAsIDExOTkwMywgNDUzNCwgNDEyNzAsIDAsIDAsIAotICAgIDY1NTc0LCAwLCA5MjI0LCAwLCAzNjcxLCA4OTc2LCAwLCAwLCA0MTI3NSwgMCwgMCwgMCwgNzk2MywgNDIwMTMsIDAsIDU2OCwgCi0gICAgMCwgNDEyNzMsIDAsIDAsIDAsIDAsIDk3MTUsIDAsIDgyNTgsIDExNzUzLCA3NDgyMCwgMCwgOTYwMiwgMTE4OTE5LCA0MiwgCi0gICAgMCwgMCwgMCwgMCwgNzQ1OCwgMCwgMCwgNjUzODUsIDAsIDAsIDExOTU4LCAwLCAwLCAwLCA2MjU0LCAwLCA2NjMzNiwgCi0gICAgODA0NSwgMTE1NTAsIDAsIDAsIDAsIDQyODU4LCAxMTc4OSwgNjU4NjgsIDU1NTcsIDkxNzk0NiwgOTczNywgMTMxMDksIDAsIAotICAgIDk0NjcsIDU1NTgsIDg4NzgsIDAsIDE5NTAzNiwgNzQ1MSwgNzQzNSwgMTAxNDYsIDAsIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgCi0gICAgNzQzNywgNzQ1NCwgMTI1OTQsIDAsIDAsIDQ1NDYsIDc3MzEsIDAsIDkxNzk0OCwgNzQyNDMsIDAsIDM4MDUsIDAsIDAsIDAsIAotICAgIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgMCwgNzU0NCwgMCwgNDM1MjUsIDAsIDAsIDEwMTUyLCA2NDQyMiwgNjUwOTEsIAotICAgIDExOTExMywgNzYwMiwgNjQ3MjksIDAsIDQzNTIxLCAwLCA0MjMwMiwgMCwgNDM1MjMsIDQxNDQ3LCA1NTU5LCAwLCA4NzA0LCAKLSAgICAyMzk3LCA1NTU2LCAwLCAwLCAwLCA5MDExLCA5NjMwLCAwLCAwLCAwLCA1NTA2LCAwLCAxOTExLCA2NjY1MiwgMCwgMTI1OTgsIAotICAgIDg4NDUsIDY2Njk4LCAwLCAxMDc5MiwgODg4OSwgMCwgNjk1MSwgMCwgNjQ3NTEsIDAsIDY2NjIyLCAwLCAwLCA3NDM2NCwgMCwgCi0gICAgMCwgMCwgNzQzNjUsIDc1NTIsIDAsIDAsIDY1Mzg0LCA3MjIzLCA0NTU5LCAwLCAxOTU2LCA0MzEzOCwgNzAyNCwgNjU3MjgsIAotICAgIDY0NTAxLCAxMjEwLCAwLCA2NTE3NSwgMTAxODQsIDQzMTQwLCA2NTcyNywgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAwLCAKLSAgICAwLCAwLCAwLCA0MzU3LCAwLCAwLCAwLCA3NDIzMywgMTE5ODQ2LCAxMTk4NTIsIDQyODYwLCAxMTk4MzgsIDEwOTQxLCAKLSAgICA2NTcyMSwgNjk2MiwgMCwgMCwgMCwgMCwgMTEwMTQsIDAsIDg5NDIsIDEyMDAwLCAwLCAwLCAwLCAxMTk3NCwgMCwgNDI3NzIsIAotICAgIDAsIDExNjUwLCA1MDEzLCAwLCAwLCA2NjIxMCwgMTE4OTE0LCA2NjEzLCAwLCAwLCAwLCAwLCAwLCA2NDcxNCwgMCwgMCwgMCwgCi0gICAgMTIxMjAsIDAsIDAsIDExMDI0LCA3NDgxMSwgMCwgMTA1NjMsIDAsIDAsIDQzNTIyLCAyNDYyLCAwLCAxODM3LCAwLCAKLSAgICA2Mzk3MiwgNjk1NywgMCwgMTIwNTU5LCA0OTUyLCA2NTcxOCwgNjU4MjcsIDU1MDQsIDY1NzIwLCA2NTcxNCwgNjU3MTUsIAotICAgIDY1NzE2LCAwLCAxMjcwMDUsIDEyNzExOSwgMzEwOSwgNjM5NzUsIDc0MDI4LCAwLCA4MTA3LCAxMTkyMzQsIDExMjcsIDQ1NSwgCi0gICAgMCwgMCwgMCwgMzQ4MywgMTI3MTIyLCAxOTg5LCAwLCAwLCA5MTA0LCAzNTAzLCA2NTM3NSwgMCwgMCwgNDI2MzMsIDE4NjQsIAotICAgIDAsIDc0MzA2LCA0MTQ0NiwgMjU0MCwgNzczNiwgMCwgNzQwNjQsIDAsIDEwNTIxLCAwLCA0MjE3MywgOTcwNSwgNzQxMjQsIAotICAgIDg2MDQsIDY5NTUsIDEwOTE2LCAwLCA2MTQ5LCAzODg3LCAxOTk1NiwgMTQxMSwgMjgyNCwgMCwgMTAxMDYsIDAsIDE0MDMsIAotICAgIDAsIDEzNDcsIDk2MzEsIDc0NDQ0LCAwLCAwLCAwLCAwLCA4NjQwLCAwLCAyNTgsIDE2NTQsIDAsIDAsIDAsIDQzMzE0LCAwLCAKLSAgICAwLCA0MDQyLCAxMTQ3OCwgMjg3MywgNjM5NzcsIDExNTIyLCA0MTY2OCwgODU0OSwgMTA4NjEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc0NTg1LCA0MTM5MSwgMCwgOTE3OTAzLCAzNzYsIDY5ODcsIDkyMjEsIDAsIDAsIDg4MjMsIDAsIDEyOTQzLCA2NTE4NSwgCi0gICAgNDE4NjksIDEyNjE5LCAwLCAxMDE1NCwgMCwgNzQ0MzksIDIwMzksIDAsIDc0NDYsIDE2ODQsIDYzOTc5LCAxMDk3NCwgNDU4LCAKLSAgICAxMjA2MjAsIDAsIDAsIDAsIDExOTE2LCA2NTAxNiwgMCwgMCwgNDIxMTUsIDAsIDEyMjg4LCAwLCAwLCAxNDkzLCA0MjExMSwgCi0gICAgNzU1MywgNDA5NywgMCwgMTMwODAsIDAsIDY1ODA4LCA2NjEwLCA2MDMwLCA4MDU5LCA3NTA4LCA0MTYzNiwgMCwgMCwgMCwgCi0gICAgODc5NCwgNDEyNzgsIDQxNjI5LCAxMjE1NCwgMCwgNDEyNzcsIDY0NjU4LCAwLCA2NDM4MCwgNjYyNSwgMCwgMTk5MDQsIDAsIAotICAgIDAsIDAsIDY1MzcxLCA3MDc4LCAwLCA4MzMsIDAsIDc0NTkyLCAwLCAxMDk3OSwgNDE5NTMsIDAsIDQxNDM0LCA2MDYyLCAwLCAKLSAgICAwLCAxOTkxNiwgNjkxMywgOTMzLCAxMzQxLCA5ODQyLCAwLCA2NTc0NCwgMCwgMCwgMCwgMCwgNDE2MTUsIDEwMTA1LCAKLSAgICA2NTgxMCwgMCwgNDE2MzIsIDc0OTMsIDAsIDAsIDQxNjIyLCAwLCAwLCAxMTk1NTYsIDc0NTg0LCA3NjMyLCA5NzE2LCAKLSAgICAxOTk1NCwgOTgwNSwgNTk5MCwgOTAwLCAwLCA2Mzk1NywgMCwgMCwgMzYxMiwgMCwgNjQzNzYsIDAsIDUzODksIDAsIDAsIAotICAgIDY1OTM4LCAyODM5LCA5NjIxLCA1ODIsIDAsIDc0MzY4LCAzNzQ5LCA2OTQ5LCA3NTY5LCA3NDA2MSwgMCwgMCwgNjk1NiwgCi0gICAgNDQwMywgMTk5NjIsIDY1NTU5LCAzMjk5LCAwLCAwLCAxMTkxMjcsIDkwMDIsIDAsIDc0MzcyLCA3NDIzNiwgODQ3OCwgCisgICAgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIDE5NDU3MywgCisgICAgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDAsIDY0MjYyLCA2NzY3LCA0MTQwNywgMCwgMCwgNjc1NSwgCisgICAgMTE4ODY0LCA5MDQ2LCAxMjc5MzQsIDAsIDAsIDAsIDAsIDAsIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgMjU2MywgMTMwMzMsIAorICAgIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgMCwgMTEyNzAsIDAsIDAsIDExOTMzLCAwLCAwLCA0MTkwMywgNDM0NDcsIAorICAgIDExMDAxLCAwLCA0MjI1NSwgMCwgOTI2NjEsIDY5ODIxLCA0MTkwNSwgMCwgMCwgMTA3NzUsIDk3OTMsIDUwMDksIDAsIAorICAgIDQyMjY5LCA2NDU4NywgMCwgNDI1MzUsIDY5ODEyLCA2NDUyOSwgNDE0MDgsIDQyODUzLCAzODc3LCAxMjA3OTUsIDQyNjc0LCAKKyAgICA4MTQ3LCA0MzU2NiwgMTE5MDIxLCAwLCAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgCisgICAgNDc0NywgMTI4MDU4LCAwLCA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgNDI2MDAsIDAsIDQzMjAzLCAwLCAwLCA0MzI4NiwgCisgICAgMCwgMTI4MjExLCA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIAorICAgIDAsIDAsIDYwNTksIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMCwgCisgICAgMTIwNzg2LCA0MjIzMywgNjQxNDAsIDk5NDYsIDYzODg1LCAwLCAxMTgyMiwgMCwgNDMxODksIDAsIDAsIDE3ODgsIDE1NzksIAorICAgIDEyMDQ4MiwgOTE3ODE3LCAwLCAwLCAwLCA5MDI4LCAxMTk1NzEsIDY5MjM0LCAwLCAwLCAxMjg1LCA2NDg4MiwgNDEyNDIsIAorICAgIDAsIDAsIDEyNjQwLCAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDkyMjU0LCAzOTQwLCA0MTU5NywgNTUyNjAsIAorICAgIDMzOTYsIDEyNjQyLCA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgMTIwNTE2LCAKKyAgICAxMjA1MjMsIDAsIDg4MTUsIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIDIxNDIsIAorICAgIDY4NDU0LCA0MjQ4NSwgMTE4ODM3LCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIAorICAgIDEyMDMyLCAwLCA5NzI1LCAwLCA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgCisgICAgNDI3NzcsIDEwMTM5LCA5ODAsIDQzNjk4LCA2NTM4NiwgMCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIAorICAgIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIAorICAgIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAKKyAgICAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMTI3MDExLCA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIAorICAgIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgCisgICAgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgCisgICAgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCAKKyAgICA0MjQ1MiwgNzgzMzEsIDAsIDc4NDQ1LCAwLCAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgNDExMzIsIAorICAgIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAxMjYzMiwgCisgICAgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAxMDkxLCAKKyAgICAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIDY2MzA5LCAwLCAwLCAxNDk0LCAwLCAwLCAwLCAxMTY5MywgMCwgMTA0OTQsIAorICAgIDkyNjU1LCA2NTg3MiwgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgNzM3OTQsIDAsIDgwMjIsIDAsIAorICAgIDEyMDQ2MiwgNzQxMDYsIDEyNDEzLCAxOTQ4MjksIDkxNzk5NCwgMCwgOTE3OTk1LCA1NTcwLCAxODgxLCA3MjEwLCAwLCAKKyAgICAxMDEyLCA2NjYzMCwgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgMCwgNDIzMzksIDAsIDYwNjMsIDAsIDAsIAorICAgIDExOTU5NCwgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIAorICAgIDExODgxMCwgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgCisgICAgOTIyMDQsIDAsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIAorICAgIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgCisgICAgMTIwMTAxLCA1ODksIDcwNTAsIDAsIDQzMjgxLCAxMDIzMywgNDEyNjMsIDY2MjUxLCA2NTcyOSwgNjYyNTMsIDAsIDc0MDk5LCAKKyAgICA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAwLCA1ODQ3LCA2OTI4LCAwLCAwLCAwLCAwLCAwLCA2NjU5MiwgMTIyMDQsIAorICAgIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCA0MjU2MSwgMTIwNjI2LCAwLCAwLCA4MTIwLCAxMjA3MDEsIDAsIDAsIDEyODAxMiwgCisgICAgNDEwNjMsIDAsIDEwNjY0LCAwLCA4MzY5LCAwLCA0NTUxLCAxOTQ5NjQsIDMzNjksIDAsIDAsIDk2NzMsIDY2MzM0LCAKKyAgICA2NTU4MCwgMTA0NzgsIDExODk2MCwgMTI1MTcsIDU1NywgOTQ1NywgMTIwMzQsIDAsIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgCisgICAgMTk1MDI1LCA3NDA5NCwgMCwgMCwgNzc5NzAsIDAsIDAsIDEyODE3NSwgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCAKKyAgICA2Nzg5MywgNTQ5MiwgNjkyMywgMTI4MDk5LCAxMDQ0MSwgNzM4MzYsIDAsIDQzOTkwLCA1NDkzLCAwLCA3NDMxOSwgMCwgCisgICAgNjY2MzUsIDEyMDE5LCAwLCAxNjE4LCAwLCAxMjA0NzQsIDk2NDUsIDEwNDMwLCA5MTc5NTksIDU4NTMsIDEzMDYzLCAKKyAgICAxMDM2MywgMCwgMTI5NTYsIDEyODE2OSwgMTIwNzI5LCAxMTMxNCwgOTE3NTgyLCAxMjA2MCwgMCwgNzgzOTIsIDEyODI2LCAKKyAgICA2MzI5LCAwLCAxMDUxNCwgNjU1MTcsIDc0Mzk1LCAyNzA3LCA4MzA5LCAwLCAxMjcwNTQsIDc4Mzk4LCA0MzU3MCwgMjY5NywgCisgICAgNDM0MjAsIDc4Mzk2LCAxMjcwNTcsIDI2OTUsIDQyMTcxLCAwLCAwLCAwLCA2NzYxNywgMTE4OTcxLCAwLCAyNjkzLCAKKyAgICAxMjEyNSwgMTI3NjYsIDAsIDExNjQsIDAsIDAsIDQxOTE4LCAwLCAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgCisgICAgMTI4MDAxLCA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCAKKyAgICA0MTEyNiwgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgCisgICAgNDI4NDMsIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIAorICAgIDg5MjIsIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAKKyAgICAxMzI2MiwgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgCisgICAgNTI5NSwgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIAorICAgIDQxNDEzLCAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgCisgICAgODA3MCwgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIAorICAgIDAsIDY3NjQ4LCAxMjA0OTksIDkxNzU1MywgNDI1NywgMTIxMDQsIDc3OTQyLCA2MjIwLCA5MDA0LCA2NTU2MSwgMCwgCisgICAgNzc5NDksIDAsIDY4MTM1LCA5MTc1NzYsIDc3OTQ2LCAwLCA2OTY3OSwgNjk2ODQsIDk4OTAsIDc4NTYxLCAxMjk3MSwgCisgICAgNzg0NTMsIDkyNTU2LCA3Mzg5OCwgMTE5NzksIDAsIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgCisgICAgMCwgMCwgNjQ2OSwgNzQyMjcsIDAsIDY1MzA0LCA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAKKyAgICAwLCAwLCA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgCisgICAgNzQ2MDYsIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCA3ODU2NiwgMCwgMCwgNjU4OTgsIDAsIDY1MzEyLCA1NDQ3LCAwLCAKKyAgICAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAKKyAgICAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIAorICAgIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgMTIxNTUsIDAsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIDY1ODMyLCAKKyAgICAwLCAwLCAwLCA3Nzk3NSwgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAwLCAwLCAKKyAgICA1MTMzLCAwLCAwLCA5NTAwLCAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgOTM1NCwgMCwgMCwgMCwgMjQ5NiwgMTE1MTYsIDk0NCwgCisgICAgMTE4ODUxLCAzODkwLCAxMjE2OCwgMTQzOCwgMCwgMCwgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMTI4NTU1LCAwLCAwLCAKKyAgICAxNTcxLCA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgMCwgMCwgNzgxMjAsIAorICAgIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCA2NTEyMSwgMTA4NjIsIAorICAgIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgMTE1MzIsIDc0MDczLCAwLCAKKyAgICAwLCAxOTg1LCA2Mjk2LCA5NTgyLCA5MTc4OTUsIDY0Mjg3LCAwLCA3ODExNSwgMTE0MjgsIDE3MzAsIDI0NTcsIDAsIAorICAgIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgOTI0OTEsIDAsIDYxMjksIDAsIDAsIDEyODI2OCwgCisgICAgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgNzQyNzgsIDYzODg2LCAxMTg4ODEsIDk2MDUsIDczODkyLCAKKyAgICAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIDAsIDAsIDAsIDUyNDAsIDk4MTEsIDEwMDEyLCAzMDk2LCAKKyAgICAwLCAwLCAwLCA2NjY3NiwgNjU4NzMsIDAsIDAsIDAsIDk1MDEsIDAsIDEyNzIsIDY0NTM2LCA2NTQ2NSwgNjQ2NTQsIDc0NjcsIAorICAgIDAsIDE0NjcsIDEwMTU4LCAxMDA0MCwgMCwgOTUxOSwgMCwgOTE3ODEyLCAwLCAxMTg4OTksIDEyMTkzLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAwLCAwLCAwLCA1Mjc1LCAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgCisgICAgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDAsIAorICAgIDk1MzcsIDM5NjEsIDEyMTE1LCA3Nzk1MywgMjYwNSwgNDUwMCwgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgCisgICAgMTE2NjcsIDQyNjg2LCA3Nzk3MywgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgCisgICAgNjgyMTUsIDAsIDg1NDEsIDc4Mjk4LCAwLCA0MTg2NiwgMCwgMCwgMCwgMCwgMCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCAKKyAgICA0MTk0MCwgODI5OSwgNDE5NDUsIDcxMzIsIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAKKyAgICAwLCA0MTY5OSwgMTA3NjIsIDQzNzgwLCAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgMCwgNDQ5NCwgMCwgNDAxMiwgCisgICAgMTAzOTUsIDAsIDQzNjMzLCA2NTQ0NywgMCwgMCwgMTEwMDQsIDY5NSwgNzM5LCA2OTYsIDc2MTEsIDAsIDQyNzU1LCAKKyAgICA3NDgwMiwgOTIyNywgNzUwNiwgNzUxMCwgOTIyODEsIDY5MSwgNzM4LCA3NTExLCA3NTEyLCA3NTE1LCAzODY4LCA2ODgsIAorICAgIDQxODQ3LCA2OTAsIDI1NDgsIDczNywgOTc0LCA4MDAzLCA3NDA2LCA5MTc5MTEsIDAsIDAsIDM5ODUsIDkxNzkxMiwgCisgICAgNjU4NjAsIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgOTI1MDUsIDEwODc5LCAKKyAgICAxMDM0NywgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgNDE5NTgsIDExOTE3NiwgCisgICAgOTE3OTA4LCAwLCAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIDQzNTY4LCAwLCAxMTcxNywgCisgICAgNzY1MCwgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAKKyAgICAwLCAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDAsIDAsIDQzNTYxLCAwLCAwLCA3NDE0NiwgMTg2MCwgNzQ5NSwgCisgICAgNzU4MCwgNTgxMiwgNzQ5NywgNzU4NCwgMTE5MTQwLCAxMjc4NTMsIDAsIDEyMDM0NywgNzcyNywgMCwgODQ5OCwgNjk4MTgsIAorICAgIDg5NDksIDMwNjUsIDQyNzE5LCA3MTM1LCAxNTY5LCA5MjM3NSwgMTI1MzQsIDEyMTI0LCA3NjkwLCAwLCAxMjUzMywgMCwgCisgICAgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAwLCAwLCAxMTk4MCwgMTI4NjUwLCAwLCA2Mzg5NCwgMTIwNzYwLCAKKyAgICAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCA4ODUwLCA3NDI3NSwgOTIzOCwgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIAorICAgIDEyNzkxLCAwLCAwLCAwLCA0NDQ3LCA3MzczMiwgMTI3OTMsIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgCisgICAgNDE0MDAsIDExOTEyOCwgNjY2MDcsIDEyNzkyLCA0MjIzMiwgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCAKKyAgICA0MTMxMCwgMCwgNDEzOTksIDAsIDAsIDU1MjU4LCAwLCAxMjY5MCwgMCwgMCwgNDM2NzIsIDEyNzg0MCwgNDE2NTIsIDI5NzQsIAorICAgIDkwMTAsIDExMzE1LCAwLCAyNzgsIDAsIDQxNDA1LCAxMTkyNTQsIDAsIDEwMDc3LCA2Mzg1MywgNzQ1NTcsIDQyNTg2LCAwLCAKKyAgICAwLCA2MDAyLCAwLCA0MzU1MywgMCwgNjc5MDMsIDAsIDEyNzg3LCA0MTMwOCwgNzkzNCwgNjUzMDYsIDAsIDAsIDAsIDg2NDYsIAorICAgIDAsIDc3ODI5LCAwLCAwLCA2NDEzLCA2NTUwLCAwLCAxOTQwLCAwLCA0MzYzNywgMjIwLCA2NTE5MywgNDM1NTEsIDEwNjc4LCAKKyAgICAxMDA0NCwgMCwgMCwgMCwgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAKKyAgICAxMDI5NywgMCwgMzc0MiwgMCwgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIAorICAgIDYzODQ1LCA0MTgyLCA3ODE3MSwgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAKKyAgICAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIDQxMDYwLCAwLCAwLCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIDk2NzcsIAorICAgIDEyMDI2MCwgMCwgNjUyNTYsIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgCisgICAgMTI4MjM2LCAwLCAxMjA0NzIsIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgCisgICAgNjI3OCwgMCwgNTUxNSwgMCwgMCwgMCwgNjUzMzksIDQzMjIxLCA2NTE5NCwgMCwgNTUxNywgMCwgMCwgNzQ4NDEsIDY3ODg0LCAKKyAgICAwLCA2Nzg5MCwgNjc4ODUsIDY3ODgwLCA2Nzg4MSwgNjc4ODIsIDY3ODgzLCAwLCAwLCA2Nzg3OSwgMTI3MTg4LCAxOTAyLCAKKyAgICA2Nzg4NywgOTYzOCwgMTI5NzYsIDAsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgMTI4ODE5LCA2NjY3LCAKKyAgICA2Nzg3NCwgNzU1NiwgNjc4NzgsIDc0MzUxLCAxMTI2NCwgOTg5LCA0MjY3NywgNjc4ODksIDAsIDEzMTEsIDkxNzk2NiwgCisgICAgNDMyNiwgMTEwMDAsIDYzODI0LCAxMzA2OCwgMTA5MzIsIDEyODg4MCwgNjkxNywgNzgxNTUsIDAsIDk0OSwgNzgxNjIsIDAsIAorICAgIDYxNDgsIDg2MDUsIDQyMjUzLCA3ODE3NywgMCwgMCwgNDI3MTUsIDAsIDAsIDAsIDYzODcxLCAwLCA0MTc5NiwgMTI2OSwgCisgICAgNjUzMCwgMCwgNjUwNTcsIDAsIDUxNDQsIDEyMjIxLCA0MjcxNiwgMCwgNDQzMSwgNDMzMSwgMCwgMTI4Njc1LCA0MTgzNCwgCisgICAgNTI3OSwgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCA2NjAzNiwgMCwgMCwgNjQyOCwgCisgICAgNDIyNzAsIDAsIDAsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAxMjEzMSwgMCwgOTQ5MywgMCwgNDEwMTQsIAorICAgIDExNzkzLCAwLCAwLCA3NDM5NCwgNDM0NjAsIDEwNjUzLCA0MjcyMywgMCwgMTE5NjMyLCAwLCA2NTYwLCA3MDE2LCA3NDI3NCwgCisgICAgMCwgNDM1NTYsIDM5MjksIDczOTAwLCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgNTEzNSwgMTE4MTEsIDEyNzk2LCAKKyAgICAxMTk1MywgMCwgNjk3NjEsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCA1MTY4LCA3ODU1MiwgCisgICAgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgMTk0NzUwLCA3MzkyLCAKKyAgICA4MjMwLCA5MzY1LCAwLCAwLCAwLCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgMTI3ODYsIDIyOSwgMTE5ODg1LCAKKyAgICAxMTk4ODQsIDQ0MDA0LCA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIAorICAgIDYzODYzLCA0Mzc5NSwgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgCisgICAgMTA0NzAsIDAsIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDAsIDAsIDEwNDMyLCAxMjA5NywgNTQ1MCwgNjQ2OTEsIAorICAgIDEyMzMsIDAsIDQ0MDA5LCA3ODI4NCwgNjYzMzgsIDAsIDAsIDE4MzksIDExODc5OSwgMCwgMTA5MjcsIDE3MDEsIDAsIAorICAgIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCAKKyAgICA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDAsIDAsIDY1ODEyLCAKKyAgICA5MTc4MzEsIDAsIDQxODI0LCAwLCAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIAorICAgIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgCisgICAgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCAxOTQ3OTEsIDAsIDE5NDc5MywgCisgICAgMTkxMiwgNDIzODUsIDEwMzA2LCAxMDM3MCwgMCwgMCwgODg2NywgMTAyNTAsIDEwMjU4LCAyNzEyLCAxNjM1LCA3ODgyMSwgCisgICAgMTQxMCwgOTI2NzEsIDAsIDExODg3OCwgMCwgMCwgOTkxOSwgMCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIDc4MTg4LCAKKyAgICA0ODkyLCA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAyMDc5LCAKKyAgICA2NTI0OCwgMTI3ODgsIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAwLCAzNjY4LCA2NTc1NCwgNDM1NjAsIAorICAgIDEyMjI2LCAwLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIDQzNjE4LCA2NTc0NywgCisgICAgMTA5MzcsIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgNDI3MTQsIDk5NTEsIAorICAgIDQzNDA5LCAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIDQxODIwLCA0MzAzOCwgCisgICAgMjM5NSwgMCwgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgNDI4MDksIDQyODA3LCAwLCAKKyAgICAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDAsIDQxODk4LCAyMzYwLCA0MTc5NCwgOTE3OTQyLCAKKyAgICAwLCAxMjc4MTgsIDAsIDAsIDI0MTgsIDAsIDI0MTEsIDExMzM2LCA3OTksIDYzODIzLCAxMDI3NiwgMTAzMDgsIDEwMzcyLCAKKyAgICA5MTc1NDEsIDQxNzcyLCA0MjgxMywgMjMxNywgMTAyNjAsIDExODk4MCwgNTUyODQsIDkyMjAzLCAwLCAxMDM4NCwgMCwgMCwgCisgICAgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDAsIDAsIDc3ODcyLCA0NDQzLCA0Mjc3OSwgMjMwLCAwLCAwLCA0MzU0OSwgCisgICAgNDg1NSwgNDIxNTAsIDY1NzM5LCA1NDQxLCA0MTg5NiwgMTAyODgsIDEwMzIwLCAwLCA4NTUsIDcwNDYsIDYxMDksIDY1MDQ1LCAKKyAgICA2MzgzOSwgNzgxOTgsIDIwNDksIDEwMDk4LCAwLCA3NDE0NSwgMTI3OTQzLCAxMDI2NCwgMTAyODAsIDkxODQsIDEwMzc2LCAKKyAgICA3MDEzLCA0NDY3LCAwLCAwLCAwLCA0MTg4NywgMCwgNDg2MiwgOTczNSwgNjUzNywgMTIwNTkxLCA3NDI4NiwgMzkxNCwgCisgICAgOTIxNzgsIDAsIDkwNjUsIDEyOTYxLCAwLCAwLCA5MjI1MywgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgCisgICAgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDAsIDQyNzI0LCAwLCA0Njg4LCAxMjA0NTQsIDAsIDAsIDExOTYyOSwgODIzOCwgCisgICAgMzExMCwgMTIwMTYyLCAwLCAxMjAxNjMsIDY1MjgsIDEyNzU1MywgNDMwMzUsIDEyMDE2MSwgMjE4LCAwLCAxNTIwLCAwLCAKKyAgICA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgNzgxNjcsIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCAKKyAgICA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIDY5NzQwLCAwLCAwLCA5OTc1LCAwLCAxMTk5MDIsIDQ2ODksIAorICAgIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIDc0NDQxLCA3ODgxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwNjUsIAorICAgIDgyMDcsIDAsIDkyNjEzLCAxMjgwMTEsIDAsIDY2MiwgMCwgOTI0NCwgMTk0ODYzLCAwLCAxMTkyNjEsIDAsIDAsIDAsIDAsIAorICAgIDQxOTI5LCAwLCAwLCA2NjY3NCwgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgMCwgNTIsIAorICAgIDEzMTE4LCA2NDc1LCAwLCAxMjAzNDEsIDEyMDk1LCAxMDIyNSwgNDgxMiwgOTI1NzgsIDAsIDAsIDc0MDg1LCAwLCAzOTc4LCAKKyAgICAwLCA5MTc5NDUsIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCAwLCA2OTc4MiwgCisgICAgMTI4NTU3LCAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIAorICAgIDIwMzYsIDk4NiwgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIAorICAgIDY0MzM0LCA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDkxNzkzMywgCisgICAgMTIwNDEwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCAKKyAgICA2NTUxNCwgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIAorICAgIDQzMzc1LCA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCAwLCA2OTQzLCA5MTc5MzQsIDU4NTksIDAsIDI4NTgsIDAsIAorICAgIDc0Mjk0LCAwLCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzQ0OTEsIDkyNTc0LCAyNzUxLCAxMjY2MiwgCisgICAgMjc2MywgODk1MywgNjQ3MDEsIDEwNzMxLCAxMjkyMiwgNzA1MiwgOTE3ODM5LCAwLCAwLCAwLCA2MzkyMCwgNzQxMjgsIAorICAgIDI4NTYsIDExOTkxMCwgNDcsIDExOTkxMSwgMTI2OTg2LCA2NTg1OCwgMCwgMCwgMCwgNzg5OSwgMCwgODQxNywgNDM3OTgsIAorICAgIDcwNzIsIDAsIDAsIDQwMzMsIDEyODE2NCwgNDM5OTIsIDAsIDAsIDIxMiwgNjQ2MDAsIDE5MDMsIDEyMzIwLCAwLCAwLCAwLCAKKyAgICAwLCA4OTE1LCAyNzU5LCA5NDUsIDY2ODksIDAsIDAsIDAsIDAsIDEyOTEsIDc0ODI4LCAwLCAwLCA5NTMxLCAxMzE1NSwgCisgICAgODUwNSwgNjgzNzksIDEyMDYyLCAwLCAwLCA2NTQ4NywgOTIxODksIDQxODM3LCAxMjA2MTEsIDEyMDQzMiwgMCwgMCwgMCwgCisgICAgMTIwNDMzLCAwLCA2MzkzNSwgNzM5NjIsIDEyMDgwNiwgNjQ3ODcsIDQzNTI0LCAwLCA2NDQyNiwgMCwgMTk0OTQ4LCAwLCAwLCAKKyAgICA2NTY2NCwgNjY5MywgOTg0MywgMCwgODY3NCwgMTE5ODg3LCAxMjg4MTIsIDkyNzE1LCAwLCAxMjYyNCwgMCwgMTY3MywgCisgICAgNDgxMSwgOTIzODMsIDU5ODYsIDkzMzgsIDMwNDYsIDc0NDgwLCA1OTg1LCA5MTc5MjgsIDExOTU5OCwgOTgyMCwgMCwgCisgICAgMTIxODcsIDAsIDAsIDU5ODQsIDAsIDQzMzA4LCA0MzkzLCAwLCAwLCAwLCAwLCAwLCA3NDgyNiwgNjQ3MzMsIDAsIDAsIAorICAgIDM0OTEsIDAsIDAsIDEyODIxOSwgMzUxNCwgNjU0ODUsIDAsIDc0OTIsIDAsIDc0NjA1LCA5MjQ4MywgNzUxNCwgMCwgMCwgCisgICAgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIDIxOSwgMCwgMCwgNjkyLCA0MzU4OCwgCisgICAgNzQ0MzMsIDQxNjM1LCA0MzI0MSwgOTY4OCwgNzE0NywgOTUzNSwgMCwgMCwgMCwgNjQ1MzAsIDAsIDY0NjEwLCAxMTgwNCwgCisgICAgMCwgNzE0OSwgNzQ1MywgMCwgODAxMywgMCwgOTIzMDEsIDAsIDg4OTUsIDUyNTMsIDAsIDU0NTgsIDAsIDI4NjYsIDAsIAorICAgIDEyNzg2MCwgNjUxMTEsIDY4NDMzLCA2NzAwLCAxMjA0ODQsIDAsIDAsIDAsIDg5NjIsIDc3OTYwLCA5NjQxLCA0MzY5NCwgCisgICAgNzA1OSwgMCwgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIDYzODI2LCA3ODcwNiwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCAwLCAKKyAgICAyODQ0LCAwLCA0MTk3NCwgMCwgMTIxMzksIDAsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIAorICAgIDE5NDc2NSwgMCwgNTMwOCwgMCwgMjkwLCAwLCAwLCAyODYyLCAyNzkyLCAxOTUwODgsIDAsIDAsIDMyNjgsIDY2NTkxLCAwLCAKKyAgICA2NTUyLCA0MjM2NywgNzAzNSwgMTIwNTU4LCAwLCAwLCAxODE0LCAwLCAxMDI0MCwgOTIzMzgsIDc0MzA1LCAwLCA3NDUyOCwgCisgICAgNjU5MDMsIDAsIDQyNjQ2LCA3NjA2LCAyNTkxLCAyODM3LCA0MzQxLCA3Nzk1NiwgNjQ0ODIsIDEyNzMzNywgODE2MywgCisgICAgNjUyNzAsIDAsIDAsIDAsIDkxMTIsIDc0NDMxLCA4NjMsIDk0OTAsIDExOTg5OCwgOTE3ODM3LCA0MzMyMywgMTIwNTEzLCAKKyAgICAxMTk4OTcsIDkwNzEsIDEyNzMzMywgMCwgMzY1NCwgNzc4OSwgOTYzNywgMCwgMjUzNSwgNjU1MDQsIDc2NTMsIDQwOTkzLCAKKyAgICAxMTk4OTksIDY2NTg3LCAxOTUwOTgsIDAsIDkyNDAxLCAwLCAxMTAwNiwgMTI5MjcsIDc4MDcsIDgwNzMsIDAsIDEwNjI5LCAKKyAgICAwLCA3NDA4OCwgMzA1NiwgMTA4MjMsIDEyODc5NywgMTI3MzI3LCA4NzYyLCAxMDUwOCwgNjk2ODksIDczNzcwLCA0Mzk2OSwgCisgICAgNDMxOTMsIDEwNzM3LCAzNDYzLCAwLCAwLCA2NjYzMywgODY5NSwgNDgxNSwgMTEzMjIsIDU4MTEsIDEyMzQ1LCA3MDQ5LCAwLCAKKyAgICA1MTk1LCAxOTUwODEsIDAsIDY2NjM5LCAwLCAwLCAwLCAxMjgwNDEsIDAsIDkyMzg1LCAxMjYyLCAwLCA2NTYxLCAxOTkzOSwgCisgICAgMCwgMCwgMCwgMTE5OTA2LCAwLCAwLCAwLCAwLCAwLCAxMTk5MDcsIDY0NjEyLCAxMTk5MSwgMCwgMCwgMCwgMTUwMiwgMCwgCisgICAgMCwgOTEwNywgMTI3MzE2LCA1NzAyLCAzNjU1LCA2NzY2MSwgODQzMCwgMCwgNzQxMzIsIDEyMDc1OCwgMCwgNzQwNTcsIAorICAgIDk2MDMsIDAsIDUyNTQsIDEyMDc0MiwgNzcyNCwgNzQzODgsIDY4Mzc1LCAxMDc5NiwgNTEyOSwgMCwgMCwgNTkwLCA3NTc5LCAKKyAgICA1NjE0LCA1ODkzLCA5MjI4MCwgMTE3MjAsIDkyNDk2LCAxMTcyMSwgMCwgNDc5OCwgMCwgMTE5MzE2LCA2NjAzOCwgNDc5MywgCisgICAgNjc4NTEsIDExNzI2LCAxMjc1NDEsIDc0MjA0LCA2ODYxMCwgMCwgNjg2MjYsIDg5NCwgMzAwLCA5MTc4MTMsIDEyMzA2LCAKKyAgICA2NjIzNSwgODAwNCwgMCwgMCwgMjU2MiwgMCwgMCwgNDI1MDMsIDAsIDExNjUyLCAwLCAwLCAxMTkyNDEsIDkyNjQ5LCAwLCAKKyAgICA1MDk2LCA1MDk1LCAyODYzLCAzNDI0LCA5MjI0NCwgMTA0NTQsIDQyNTMwLCA1MDk0LCAxMTk2MzgsIDAsIDEzMTU2LCAwLCAKKyAgICAxMDgzMiwgNTA5MywgMCwgMCwgMCwgNTA5MiwgMTA3MDgsIDExMzI3LCAwLCA1MDkxLCAxNzYsIDAsIDkxNTMsIDQxMDQsIAorICAgIDc4NTk5LCA3ODYwMSwgMTIxNSwgNDI3MTIsIDU3NDQsIDEyMjcyLCA5ODMyLCAxMTc3NywgMCwgMTI3MzcxLCA0Mjg4MSwgMCwgCisgICAgODk4MCwgMTE4OTg4LCA2Nzg2MSwgODg0NCwgNzIwOSwgMCwgMCwgNDI3OCwgMCwgMCwgMTk0Nzg5LCAwLCA5MDc0LCA0MzQ4LCAKKyAgICAwLCA2NTU1OCwgNjU5NDYsIDgxMTMsIDcwODcsIDUyNTUsIDE3ODYsIDY2MSwgMCwgMCwgMCwgNzQ0MjMsIDAsIDU4NiwgCisgICAgNzQ0MTQsIDY0MzU5LCAxMjY3LCAwLCA2NTQ2OCwgMCwgNjU3MzEsIDAsIDEyNzE3OSwgMzYyMSwgMTIwNDczLCA2NjY2NiwgCisgICAgNjQyMTEsIDAsIDY1NjIsIDEyOTI4LCAwLCAxMjI4LCA2NTQ5MCwgMTEzODMsIDAsIDAsIDAsIDE3MTQsIDc0NDA2LCAKKyAgICAxMjc4MzEsIDAsIDAsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIDY0LCAxMjA2OTQsIDAsIDEwMjkxLCAKKyAgICAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDQyNzEwLCAwLCA0MjAxMSwgNDE5OTksIDkyMTY0LCAxMjIwNiwgCisgICAgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDAsIDY1ODMzLCA3Nzg0OCwgMCwgMTc2NSwgMCwgMCwgNjU1ODgsIAorICAgIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAxOTQ3MDQsIDEwNDc5LCA2NDk1OSwgMjg1MiwgMCwgMCwgMCwgMCwgCisgICAgMTI4NTg2LCA5MTc5NTEsIDY5NjMsIDAsIDEyNjY3LCA2NDU0MCwgNzQ3ODYsIDEwMTQ3LCAxMjkzNSwgMTI3NTY4LCAwLCAwLCAKKyAgICAwLCAwLCA3ODc1NywgMCwgMCwgMCwgMCwgOTk5NCwgMTI0NjcsIDI4NjQsIDY0NzE5LCAxMTQ4LCAxMDQzNSwgMTE0NjIsIAorICAgIDQxNjc1LCAwLCAyNzY1LCAwLCAwLCAwLCAxMjA3MTksIDEyODE4OCwgOTI1MTYsIDY2NjYyLCAwLCA3ODEzMywgOTM2NCwgCisgICAgMTk0Njg1LCA3NDQxNiwgMCwgMCwgNzc5ODgsIDI2MywgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDAsIDc3OTg2LCAKKyAgICAwLCA2OTMxLCA2OTcyMiwgNjQzNTUsIDcxNzcsIDEyMDUzMCwgMCwgMCwgMCwgNDI2MiwgMTAyODUsIDEwNzIyLCA0MjAyMCwgCisgICAgMCwgNjgwNiwgNjk5MiwgNDIwMTksIDAsIDQxMjkwLCAwLCA3NTAsIDAsIDAsIDEwMTYzLCA2MzkxMywgNzQwNjYsIDcwMzIsIAorICAgIDU5NTQsIDY0OTMxLCA0MzE0LCAwLCAxOTgsIDY4NDUzLCA3MzAsIDEyMDA5NCwgNjM5MDcsIDc3OTkzLCA3ODg5MSwgCisgICAgMTMxNjUsIDcxMDcsIDc0MTcxLCA0MjgwNCwgNjc4LCA4MjQwLCA3ODAxNSwgMTI4Nzg0LCA0MTM3OCwgMTEwMDgsIDY5MzgsIAorICAgIDkyMjIyLCA5MjYzNywgMjA5NywgNjYyNDYsIDEyMDU2MCwgMCwgMCwgMCwgMzg5MiwgNjg2MzIsIDY5NjQyLCA2NzEyLCAKKyAgICA2NjA0NSwgNDE0NzAsIDY0ODA1LCAwLCAwLCAwLCA2NDgwMSwgMCwgNDk3LCAxMjEwMCwgNTk1MywgOTI2NjcsIDc3OTYsIAorICAgIDY5NjY5LCA0MzI1NCwgNzM4MzEsIDAsIDEwMjkzLCA1OTUyLCAxMjgxLCAwLCAwLCAwLCAxMDY3NywgNjA0LCA0MTA5NywgCisgICAgOTE4MiwgMTg1OSwgMCwgOTI2MDMsIDM0MjUsIDEyNzQ4OCwgMCwgMjgzNiwgMCwgMCwgOTcwNywgMCwgNDMyMDIsIDAsIDAsIAorICAgIDY1MTk5LCAxNzM4LCA5MTc4MTgsIDEyODE1OCwgMjgzMiwgOTI3MDIsIDk2NzAsIDEyOTM3LCAwLCA2NjM3NCwgOTE3OTU2LCAKKyAgICAwLCAyODIyLCA2ODEyMiwgNDQzNiwgOTI1MTksIDAsIDczNzUyLCAwLCA2NDg3MiwgOTIzNDAsIDEzMzEsIDAsIDAsIDAsIAorICAgIDEyNzA4LCAwLCA1MDkwLCA1MDg5LCAwLCAwLCAxMTkxMDksIDAsIDEyODY4MSwgMzE5LCAxMTg4NDcsIDQzNDc5LCA5NDc3LCAKKyAgICAwLCAwLCA1MDg3LCA5MjMyNSwgNzY0MCwgOTYsIDUwODYsIDAsIDkyMzc5LCAwLCA1MDg1LCA2NDI4NiwgOTI2NjUsIDAsIAorICAgIDQxNDIyLCAwLCAxMTk5MDEsIDQyMzU2LCAzNzcyLCAwLCAwLCA1MDExLCAwLCAwLCAwLCAwLCAxMjcxNjUsIDEyNzI0MSwgCisgICAgNjY3NywgNzYwMSwgMCwgNTkxLCA2NDQxOSwgMTE4OTUzLCA5MjI2MiwgMCwgMTE4OTIzLCA3MzczNCwgMCwgMTA5MzksIAorICAgIDYxMDYsIDY5MzMsIDQxMjcxLCA2NzYwLCAxMTk5MDMsIDQ1MzQsIDQxMjcwLCAxMjg4NzYsIDAsIDY1NTc0LCAwLCA5MjI0LCAKKyAgICAwLCAzNjcxLCA4OTc2LCAwLCAwLCA0MTI3NSwgNjM3MiwgMTI4MDg0LCA1NTI2MSwgNzk2MywgNjM3MSwgMCwgNTY4LCAwLCAKKyAgICA0MTI3MywgMCwgMCwgNjcyOCwgMCwgOTcxNSwgMCwgODI1OCwgMTE3NTMsIDc0ODIwLCAwLCA5NjAyLCAxMTg5MTksIDQyLCAKKyAgICAwLCA0MzY4OCwgMCwgMCwgNzQ1OCwgMCwgMCwgNjUzODUsIDExOTkwMCwgMCwgMTE5NTgsIDAsIDkxNzgyMiwgMCwgNjI1NCwgCisgICAgNDI3MjEsIDY2MzM2LCA4MDQ1LCAxMTU1MCwgMCwgMCwgMCwgNDI4NTgsIDExNzg5LCA2NTg2OCwgNTU1NywgMTAxMzMsIAorICAgIDk3MzcsIDEzMTA5LCAwLCA5NDY3LCA1NTU4LCA4ODc4LCAxMjgxMzYsIDE5NTAzNiwgNzQ1MSwgNjcwNiwgMTAxNDYsIDAsIAorICAgIDkwODYsIDY0NTY2LCAwLCA2NDU4NCwgNzQzNywgNzQ1NCwgMTI1OTQsIDEyODY5MCwgNjgzNjIsIDQ1NDYsIDc3MzEsIDAsIAorICAgIDExOTkwOSwgNzQyNDMsIDAsIDM4MDUsIDAsIDE5NDU2NSwgNDQwMDEsIDQxMDA4LCAwLCA2MzA3LCAxOTk0OSwgMCwgNzU0NCwgCisgICAgMCwgNDM0NjksIDAsIDAsIDEwMTUyLCA2NDQyMiwgNjUwOTEsIDExOTExMywgNzYwMiwgNjQ3MjksIDAsIDQzNTIxLCAwLCAKKyAgICA0MjMwMiwgNDM3MTEsIDQzNTIzLCA0MTQ0NywgNTU1OSwgMCwgODcwNCwgMjM5NywgNTU1NiwgMCwgMCwgMCwgOTAxMSwgCisgICAgOTYzMCwgOTI2MzMsIDAsIDAsIDU1MDYsIDAsIDE5MTEsIDY2NjUyLCAwLCA5OTYxLCA4ODQ1LCA2NjY5OCwgMCwgMTA3OTIsIAorICAgIDg4ODksIDAsIDIwOTgsIDAsIDY0NzUxLCAwLCA2NjYyMiwgMCwgMCwgNzQzNjQsIDAsIDAsIDAsIDc0MzY1LCA3NTUyLCAwLCAKKyAgICAwLCA2NTM4NCwgNzIyMywgNDU1OSwgMCwgMTk1NiwgNDMxMzgsIDcwMjQsIDY1NzI4LCA2NDUwMSwgMTIxMCwgMTk1MDc3LCAKKyAgICA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAxMTkxMjQsIDAsIDAsIDAsIAorICAgIDQzNTcsIDAsIDExOTgzNywgMCwgNzQyMzMsIDk5NjcsIDExOTg1MiwgNDI4NjAsIDExOTgzOCwgMTA5NDEsIDY1NzIxLCAKKyAgICA2OTYyLCAwLCAwLCAxMTkzMjQsIDAsIDExMDE0LCAxMjc5NzIsIDg5NDIsIDEyMDAwLCA2OTIyNCwgOTIyNjcsIDEyODUzNiwgCisgICAgMTE5NzQsIDkyMjEzLCA0Mjc3MiwgMTI3NTE4LCAxMTY1MCwgNTAxMywgOTI2NjMsIDEyODY3NywgNjYyMTAsIDExODkxNCwgCisgICAgNjYxMywgOTI0NzYsIDAsIDQzODE5LCAwLCAwLCA2NDcxNCwgMCwgMCwgMTIxNjIsIDEyMTIwLCA0MzQ3NiwgMCwgMTEwMjQsIAorICAgIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIDAsIDE4MzcsIDAsIDYzOTcyLCA2OTU3LCAwLCAKKyAgICAxMjA1NTksIDQ5NTIsIDY1NzE4LCA2NTgyNywgNTUwNCwgNjU3MjAsIDY1NzE0LCA2NTcxNSwgNjU3MTYsIDAsIDEyNzAwNSwgCisgICAgMTI3MTE5LCAzMTA5LCA2Mzk3NSwgNzQwMjgsIDAsIDgxMDcsIDExOTIzNCwgMTEyNywgNDU1LCAwLCA2Mzk2OCwgMTI3OTI0LCAKKyAgICAzNDgzLCAxMTk1OTMsIDE5ODksIDAsIDY5Njc4LCA5MTA0LCAzNTAzLCA2NTM3NSwgOTI1MDksIDY2OTQsIDQyNjMzLCAKKyAgICAxODY0LCAwLCA3NDMwNiwgNDE0NDYsIDI1NDAsIDc3MzYsIDAsIDc0MDY0LCAwLCAxMDUyMSwgMCwgNDIxNzMsIDk3MDUsIAorICAgIDc0MTI0LCA4NjA0LCA2OTU1LCAxMDkxNiwgNDM2ODQsIDYxNDksIDM4ODcsIDE5OTU2LCAxNDExLCAyODI0LCAwLCAxMDEwNiwgCisgICAgMTI3ODYyLCAxNDAzLCAxMjg4MzksIDEzNDcsIDk2MzEsIDc0NDQ0LCAwLCAwLCAwLCAwLCA4NjQwLCAwLCAyNTgsIDE2NTQsIAorICAgIDAsIDAsIDAsIDQzMzE0LCAwLCAwLCA0MDQyLCAxMTQ3OCwgMjg3MywgNjM5NzcsIDExNTIyLCA0MTY2OCwgODU0OSwgCisgICAgMTA4NjEsIDAsIDYzOTc2LCAwLCA2ODYyMywgMCwgNzQ1ODUsIDQxMzkxLCAwLCA5MTc5MDMsIDM3NiwgNjk4NywgOTIyMSwgCisgICAgMCwgMCwgODgyMywgMTI4Njk3LCAxMjk0MywgNjUxODUsIDQxODY5LCAxMjYxOSwgMCwgMTAxNTQsIDAsIDc0NDM5LCAyMDM5LCAKKyAgICAwLCA3NDQ2LCAxNjg0LCA2Mzk3OSwgMTA5NzQsIDQ1OCwgMTIwNjIwLCAwLCA2OTc5MSwgMTI3MTYxLCAxMTkxNiwgNjUwMTYsIAorICAgIDAsIDY5NjcxLCA0MjExNSwgMCwgMTIyODgsIDc4MDU3LCAwLCAxNDkzLCA0MjExMSwgNzU1MywgNDA5NywgMTI4MTk5LCAKKyAgICAxMzA4MCwgMCwgNjU4MDgsIDY2MTAsIDYwMzAsIDgwNTksIDc1MDgsIDEzMTMxLCAwLCAwLCAwLCA4Nzk0LCA0MTI3OCwgCisgICAgNDE2MjksIDEyMTU0LCAxMjgxOTIsIDQxMjc3LCA2NDY1OCwgMCwgNjQzODAsIDY2MjUsIDc0MzU0LCAxOTkwNCwgMCwgMCwgCisgICAgMCwgNjUzNzEsIDcwNzgsIDAsIDgzMywgMCwgNjM2OSwgMCwgMTA5NzksIDQxOTUzLCAwLCA0MTQzNCwgNjA2MiwgMCwgMCwgCisgICAgMTk5MTYsIDY5MTMsIDkzMywgMTM0MSwgOTg0MiwgNjcyMCwgNjU3NDQsIDAsIDAsIDEyODI5NSwgMCwgNzQwNSwgMTAxMDUsIAorICAgIDY1ODEwLCAwLCA0MTYzMiwgNzQ5MywgNTUyOTAsIDAsIDQxNjIyLCAwLCAwLCAxMTk1NTYsIDc0NTg0LCA3NjMyLCA5NzE2LCAKKyAgICAxOTk1NCwgOTgwNSwgNTk5MCwgOTAwLCAwLCA2Mzk1NywgMCwgMCwgMzYxMiwgMCwgNjQzNzYsIDAsIDUzODksIDkyNTk3LCAKKyAgICAwLCA2NTkzOCwgMjgzOSwgOTYyMSwgNTgyLCAwLCA3NDM2OCwgMzc0OSwgNjk0OSwgNzU2OSwgNzQwNjEsIDAsIDAsIDY5NTYsIAorICAgIDQ0MDMsIDE5OTYyLCA2NTU1OSwgMzI5OSwgMCwgOTE3NTY2LCAxMTkxMjcsIDkwMDIsIDAsIDc0MzcyLCA3NDIzNiwgODQ3OCwgCiAgICAgNzU5OCwgNTQ2LCA0MjQ2OSwgNjU1NjksIDE5MTgsIDk1NDIsIDQ3MiwgNzcxNiwgMTAzMTksIDEwMzgzLCA2OTk2LCAwLCAKLSAgICA2Mzk1MiwgODQyNSwgMzYwMiwgODMyOCwgMTE3NjQsIDExODg5NCwgMCwgMCwgNDExODMsIDEyOTA3LCAxMDI3MSwgMTAyODcsIAotICAgIDY4NCwgNzQxODUsIDAsIDI4NTQsIDExOTU4NiwgNDU5MiwgNjU3NTUsIDAsIDAsIDExOTYzLCA2NTc1MywgMCwgMCwgMCwgMCwgCi0gICAgMCwgOTg4MSwgMCwgNjU3NTcsIDM0MTUsIDAsIDAsIDg2NDgsIDAsIDExODg4NiwgNDMwNDcsIDAsIDEzMTgwLCAwLCA0MTgsIAotICAgIDAsIDAsIDEwMjk1LCAxMDMyNywgMTAzOTEsIDQxNzUyLCA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDAsIDAsIDEwOTExLCAKLSAgICA2OTQyLCAwLCAxMDI0LCA0Mjg0OSwgNDE3NTEsIDAsIDg5NDEsIDAsIDQ1NTQsIDAsIDkwMjMsIDExNjg1LCAwLCAwLCAwLCAKLSAgICAwLCAxMTQzNywgMCwgMCwgMTIwNzAwLCA2Mzk2NywgMCwgNDEyMDYsIDEyMDcyNCwgOTA0OSwgNDExODUsIDQzMTY2LCAwLCAKLSAgICAxMTY4MCwgMCwgMTE2ODYsIDAsIDY1MjI0LCA0NTY1LCA0NjU1LCAxMTk1NTMsIDAsIDAsIDY0NTIzLCAxMDM0MywgMTA0MDcsIAotICAgIDAsIDY2NjcxLCAxMTQ2NiwgMCwgMCwgNDI4OTAsIDAsIDEyMDUwLCAxOTQ3NTAsIDI4NjAsIDAsIDAsIDAsIDQyNzkyLCAKLSAgICA1NzQzLCAxMDQyNCwgMTIwNjUsIDQyODcyLCAwLCAwLCAwLCA4ODc1LCAwLCAwLCA5MTc5OTEsIDc1MzEsIDEyODQ3LCAKLSAgICAyNDEzLCAwLCAwLCA5NjIsIDAsIDEyODU1LCA0MTE5NiwgNDI1NjQsIDAsIDE1ODIsIDAsIDU1MDgsIDAsIDAsIDAsIAotICAgIDEwODAxLCAwLCAxMTg3OTgsIDAsIDcxNzMsIDQ5NiwgMTA0MzksIDQzMTMsIDY0NjA3LCAxMTk1NTcsIDc4NjAsIDAsIDkwNiwgCi0gICAgNDI3OTMsIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgNzk4LCA2NDY5NCwgMTI4MDEsIDg0MDYsIDExNTMsIDAsIDY0Nzg4LCAKLSAgICAwLCA4MDU0LCA5MTc0LCAxOTQ3NDksIDkxNzk3NiwgMCwgMCwgNDE2MTEsIDQ2NDIsIDY2NTc0LCAxMTU1NiwgMCwgMCwgMCwgCi0gICAgNDIwODksIDAsIDkwMDgsIDAsIDAsIDE5NTA5NiwgNDIwNzksIDkxNzk4MSwgOTE3OTk2LCA0MjUxMywgMCwgNDI4NDIsIAotICAgIDczOTg1LCAwLCAxMTg5NzQsIDEyNzAwMywgMCwgMCwgMCwgMCwgMTEzMzUsIDY0MDY5LCA0MjA5MywgMzkyMCwgMCwgMCwgMCwgCi0gICAgMCwgNDU4MCwgNDE5NjcsIDAsIDY0Mzg0LCAwLCAxMTkxNTgsIDMwMjEsIDQyMDA0LCAwLCAwLCA0MjMxNywgNDE5OTgsIDAsIAotICAgIDY5NDYsIDAsIDAsIDAsIDAsIDY1MjA0LCAwLCA2ODExMywgNjUxOTYsIDk4ODAsIDQyMDEwLCAwLCA2NDU4OSwgMTAxMTEsIAotICAgIDY0ODc1LCAwLCAwLCAwLCAxMTM2MCwgMCwgMCwgMCwgMCwgNDIxNDksIDAsIDAsIDAsIDY0OTQxLCAwLCAwLCAwLCAwLCAKLSAgICA2NTY3MSwgNDExMCwgNjYwMDUsIDY5NTksIDEwOTI5LCAxMTkxMTAsIDAsIDY2NzAzLCAwLCA4NjE3LCA0MTk4MiwgNjAyNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOTU5NywgNDIwOTksIDQzMTcyLCAwLCAxMDExNywgMCwgMCwgNDE2NDIsIDAsIDAsIDAsIDgzMDEsIAotICAgIDAsIDAsIDE4NywgMCwgNjU2NjksIDAsIDQ5NjMsIDAsIDAsIDAsIDg5NjQsIDY1Njc2LCA2NTc4NSwgMCwgNDE5NDgsIDAsIAotICAgIDAsIDAsIDQxOTQyLCA2NTQ0OSwgMzE2MCwgMTAwODEsIDEzMjI2LCA0MjEyMSwgNDI0NzUsIDAsIDAsIDQxNzY2LCAwLCAKLSAgICA2NTg4MiwgMCwgNDE3NjAsIDExODksIDkwNSwgNDgwLCAxMDk4NSwgNDE3MzMsIDY3ODU5LCA5NjI5LCA0MjQzNiwgMTc0NSwgCi0gICAgMCwgNzM4MzUsIDc4ODgsIDAsIDAsIDAsIDAsIDQxNTA3LCA4ODA2LCA3MDIzLCAwLCA3NDI3OSwgNjQ1NDAsIDAsIDc4NjcsIAotICAgIDAsIDYyMzYsIDAsIDAsIDEwNTA1LCAwLCAxMjg1MSwgMTE4OTQ4LCAzNDgsIDU0NzQsIDAsIDMxMDMsIDAsIDQxNzUzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MTczOSwgMCwgNDI1MTUsIDEwOTMxLCA0MTc1NiwgNDMzNDcsIDQyNTYwLCA1MzkxLCA0MTc0NiwgCi0gICAgMTE5MTQ3LCAwLCA0MTI1OSwgNTU2MSwgNzQzNjAsIDI2OTEsIDAsIDY1NTUzLCA3OTMzLCA1NTYyLCAwLCAwLCA0MTI2MiwgCi0gICAgMCwgNjQ0MjEsIDc0ODQ2LCA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDAsIDAsIDAsIDAsIDExODg0NywgCi0gICAgNDEyNjYsIDAsIDAsIDkxNzYzMCwgMTA1ODUsIDY1NzQxLCA0MTczNywgOTU3NCwgMjY2NiwgMCwgNDE3MzgsIDgzMSwgNDE5LCAKLSAgICAxMzEyNiwgMTA3MTYsIDAsIDQyODIyLCAwLCA2NDM0LCAwLCA2OTM5LCA3NzY2LCA2NDMyLCAwLCAwLCA5MTYsIDc2OSwgCi0gICAgNDE3NDIsIDExOTY4LCAxMjA1NTcsIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAwLCAKLSAgICA0NDk3LCAzNzU0LCAwLCAxMjA0MjQsIDkwMzksIDAsIDQxNzc2LCAwLCA4NzE2LCAxNTk1LCAxMTkyMDYsIDAsIDAsIAotICAgIDc0MjYwLCAwLCA0MzI2NywgMCwgMCwgMCwgMTIxODUsIDAsIDAsIDAsIDAsIDAsIDQyODU2LCA4NjM0LCAwLCAwLCA0MjA5LCAKLSAgICAxMjA3MDIsIDAsIDY1ODc5LCA0MTUzOCwgNjU2MTIsIDAsIDY2OSwgNTY3OSwgMCwgMCwgMTE4OTYxLCAwLCAwLCA1Njc4LCAKLSAgICAxMTgyMSwgMCwgMCwgNDYwLCAwLCAwLCAwLCAwLCAxMjA3NDcsIDAsIDAsIDAsIDExOTAyMiwgMCwgMCwgMCwgNzc4MiwgCi0gICAgOTA0NCwgNDk3NCwgMTE3NjAsIDkxNzU0NywgNzU3NywgNjU3MTEsIDQxOTEyLCAxMjE2LCAwLCAwLCA1NzkyLCAwLCAwLCAwLCAKLSAgICAwLCA0MjI2NCwgMTIyNDQsIDAsIDU2ODMsIDAsIDAsIDAsIDE1NDksIDAsIDAsIDEyMDM5OCwgNTY4MiwgNjIwNiwgODY3MCwgCi0gICAgNzQ1MjAsIDU2ODAsIDkxNzU2OCwgMTAwMDEsIDAsIDAsIDE0NDksIDEwMjQxLCAwLCAwLCAwLCAxMDU1MiwgNjQzNDIsIAotICAgIDQxOTIyLCAwLCA4NTg0LCAwLCA1NTY3LCAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCAwLCAKLSAgICAwLCAwLCA2NTcwOCwgNjU3MDksIDU1NjYsIDAsIDY1NzA0LCA2NTcwNSwgMTE5MDQsIDQyODc1LCAwLCA0MjUzOSwgNTk0MiwgCi0gICAgODQ2OCwgMCwgMTAzNjEsIDEwNDI1LCA2NTY5NywgNjU2OTgsIDY1Njk5LCAwLCA2NjU5OCwgMCwgNjQ2NjQsIDEwNjQ3LCAwLCAKLSAgICAwLCAwLCA0NTcsIDAsIDY1NzAxLCAxOTM0LCA0MzAwNiwgMCwgODgwMiwgMCwgNjUxMzAsIDAsIDAsIDYwODcsIDAsIDAsIAotICAgIDQxNzU3LCAwLCA4MDQzLCA4OTUwLCA2NTY5NCwgNjQ0ODUsIDQzNTM0LCAxMDQ1NywgMCwgMTE5NjEsIDExOTAwNiwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNjU1MTUsIDk0OTksIDEwMDM1LCAxMzA2OSwgMCwgMCwgOTg4OSwgNjgxODQsIDQyODA2LCAwLCA3MjU2LCAwLCAKLSAgICAwLCAxNjY3LCA0MjE2MSwgMCwgNDI0MjgsIDAsIDY5MzQsIDAsIDEwODAyLCA2NDg2MSwgNjU1NiwgMCwgMCwgODEwMSwgCi0gICAgMzYxMCwgMCwgNDE3NDgsIDQ5OTUsIDk1NSwgNjU5MDcsIDExOTIwOCwgNTM1MCwgNjQzMzksIDAsIDY0NTQ5LCAxMDg3NSwgCi0gICAgOTE3OTU2LCA1NDc3LCA2NTY5MiwgMCwgMCwgMCwgMTI4OTYsIDEwNDU2LCA5MTc5NTQsIDAsIDM4NzQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDY1NjAzLCAwLCA2NTY4NywgMCwgNDEwMzgsIDc0MDA5LCAxMTk1NzAsIDY3ODU3LCA4NTM2LCAwLCAwLCAwLCAKLSAgICA3NDQzMiwgNzI0LCAwLCAxNDU1LCAwLCA3MTgzLCA2NDU4MywgMTE5MjMzLCAwLCA0MTc1LCA5MTc5NjIsIDAsIDAsIDkzOSwgCi0gICAgMCwgNDM1MjAsIDAsIDc0NTY5LCA5MTc5NTgsIDAsIDkxNzk1OSwgOTE3OTQ1LCAxOTQ3MDQsIDEwNzg4LCA2MDg4LCAwLCAwLCAKLSAgICAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgMCwgNDQxNywgMCwgMCwgNDE3NDQsIDAsIDc4MjcsIDAsIDY5NjUsIDAsIAotICAgIDAsIDEzMjAxLCAwLCAwLCAwLCA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAwLCA5MTc4ODQsIDE3MjgsIDAsIAotICAgIDEyMDcxMCwgMTc4LCAxMjk3MiwgMCwgMCwgMCwgMTIwNjcxLCAwLCAwLCAwLCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAKLSAgICAxMTkwNTQsIDAsIDkyNTIsIDkxNzg4OSwgNDY1MiwgNzQyNTksIDAsIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgCi0gICAgMTE3NjMsIDAsIDEyMDY4OCwgMCwgMTE5MDk4LCAwLCA2OTkzLCAwLCAwLCA4MzMzLCAwLCAwLCAwLCAwLCA3NDQ2NCwgMCwgCi0gICAgMCwgNzQwODAsIDAsIDAsIDExOTEwLCAwLCA4Mjc4LCA4OTYzLCA0MDM0LCAwLCAwLCA2NTM0NCwgMTIwNTE3LCA0MTc0NywgCi0gICAgMCwgMCwgODY3NywgMCwgMTI3MDcsIDkzNTAsIDY2MDM3LCAwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDAsIDAsIAotICAgIDc0OTEsIDg4NTYsIDAsIDAsIDQzMTUwLCAwLCAxMjA0MDQsIDY1Mzg5LCAxMjA0MDIsIDEyMDQwMywgMTA4MTMsIDI1OTIsIAotICAgIDEyODUzLCA0MzI2OSwgNzI2MywgMTIwMjQ0LCA2NTM2LCAxMjAyMzgsIDEyMDIzOSwgNjU1MTYsIDEyMzIxLCAxMjAzOTEsIAotICAgIDEyMDM4OCwgMTIwMzg5LCAxMDAwNywgMTIwMjQ2LCA5NTg4LCAxMjAyNDgsIDE1OTYsIDEyMDM4MywgNDE5OTQsIDY1ODAxLCAKLSAgICAwLCAwLCA2NjU3MiwgMCwgMCwgMTA2MTMsIDgwOTIsIDEyODA1LCA0MTkyOCwgNDA5ODEsIDAsIDAsIDUwMDYsIDY0MzI4LCAKLSAgICAwLCA2NTI5OCwgMCwgODgyNSwgNzQ1NTUsIDY1OTQwLCAwLCAwLCA2MTA3LCAwLCAxMTkxNzcsIDAsIDAsIDAsIDExNzgzLCAKLSAgICAzMzUsIDEyMDIyNywgNjQ2ODksIDQzOCwgNDUxMCwgNTc2NSwgODcyMSwgMTIwMjMzLCAxMTkyMjcsIDYwOTIsIDEyODQwLCAKLSAgICA0MzExMiwgODg3NiwgMTIwMjMxLCA4MDk2LCAxMDI4NCwgMCwgMCwgMCwgMTAzODAsIDg3MzMsIDAsIDAsIDQxNjAyLCAwLCAKLSAgICAwLCA3NDgzMSwgOTE3OTAxLCAwLCA3Mzc0NywgNjUzOTksIDAsIDY0NTkxLCA0MjQwNSwgMCwgOTE3ODk3LCA4NDMsIAotICAgIDExNTQxLCAwLCAwLCAwLCA0MTkzNSwgNzQ0OTYsIDQxOTAyLCAwLCAwLCAyMTUsIDQxMjU4LCAwLCA0MzE1OSwgMTk1MywgCi0gICAgOTU3OSwgNDE5MzgsIDEyNTYsIDM5MTAsIDk0MDcsIDYyNDIsIDAsIDAsIDQxMjU3LCA0MTkwMCwgODY3NSwgMTA3MDAsIAotICAgIDg4MDUsIDE3NDIsIDAsIDkzMzMsIDgyMDIsIDAsIDAsIDAsIDAsIDAsIDczODgyLCA0OTksIDAsIDAsIDAsIDEyNjk4MywgMCwgCi0gICAgMTcxMiwgNTkzMiwgMCwgNDE3NjIsIDAsIDAsIDExOTY3LCAxNzc1LCAwLCAwLCAwLCAwLCAwLCA5NDU4LCAwLCA2NDcwLCAKLSAgICA5MTgwLCAxMjAzODAsIDQzMTc2LCAwLCAwLCA0Mjc4MiwgMCwgMCwgMCwgOTE3OTEyLCA3NDc3NywgMTIwNjY5LCA5NDE0LCAKLSAgICAxMjAzODIsIDczNzgyLCA3Mzk2OSwgNTY1LCA0MjQ4NCwgNTc5NCwgMjAxLCAyNjYyLCA0MjI5MiwgMCwgODI1NCwgMCwgCi0gICAgMTA5NzUsIDAsIDEyMDYyNSwgNzQ3NjMsIDEwMjIsIDQxMDgsIDM4ODAsIDc0MjQ3LCAwLCAwLCAwLCA5MTc5ODAsIDc1MDcsIAotICAgIDAsIDQzMTQ5LCAwLCA2NTAzMSwgNzk2MSwgMTYzNiwgMCwgNjUwMjksIDY1MDI0LCAwLCAxMjQ3MywgNjUzNCwgMCwgOTksIAotICAgIDk4LCA5NywgMTIwNTcxLCA2NzU4NCwgNDA0OSwgMCwgMCwgNzA5MCwgMCwgNzg5MiwgOTE3OTY5LCAxMDc3NywgMCwgCi0gICAgNjUzMTAsIDY1NTYyLCA2NjU5OSwgMCwgMCwgODAzOSwgMzM2MywgNjY1OTQsIDAsIDAsIDAsIDEyNTk2LCA2NjU5NSwgCi0gICAgNDIyNTgsIDQyNTcwLCA1NTkzLCAxMTkxNDgsIDEyMDcxMSwgMCwgMTAxMDAsIDYwNjEsIDY0ODU0LCAxMTksIDExOCwgMTE3LCAKLSAgICAxMTYsIDEyOTk4LCAxMjIsIDEyMSwgMTIwLCAxMTEsIDExMCwgMTA5LCAxMDgsIDExNSwgMTE0LCAxMTMsIDExMiwgMTAzLCAKLSAgICAxMDIsIDEwMSwgMTAwLCAxMDcsIDEwNiwgMTA1LCAxMDQsIDY0MzYsIDczOTc0LCA1MzQsIDQxMjEyLCAwLCAxNTM2LCAKLSAgICA2NDA5MywgNzM5NzAsIDAsIDAsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgMTMyNjYsIDAsIAotICAgIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCAwLCA4MTM0LCAwLCAyOTEzLCA3Mzg3MCwgMCwgMTg2NiwgCi0gICAgMCwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgNjY1ODUsIDAsIDMxOTYsIDAsIDAsIDU5MzUsIDEyNTAsIDAsIAotICAgIDgxNzQsIDk3ODcsIDk4NTYsIDk4NTksIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIDE4ODIsIDE4OTIsIDAsIDEwODgyLCAKLSAgICA0MDUsIDExNDU0LCA3MzkxMSwgMCwgMCwgNDExNjksIDg5MzksIDQxMjQ1LCAwLCA0MTE3MCwgMTQ1NCwgMTEzNjksIDY0NzcsIAotICAgIDEyMTU3LCAwLCAwLCAwLCA0MTE3MiwgNzg1NSwgMCwgMCwgMTA0ODAsIDAsIDAsIDAsIDgyNjQsIDEyNjEwLCAwLCA2NDUsIAotICAgIDAsIDc2MDksIDQwOTczLCAwLCAwLCAwLCA1ODI0LCA5ODQsIDAsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCA3Mzk4MiwgCi0gICAgMTIwNTE4LCAwLCAxOTUwODYsIDY2NzIyLCAwLCAwLCAwLCAwLCA0NTM4LCAxMjA0MDYsIDQzMTQxLCAwLCAwLCA3NDIxNCwgCi0gICAgMCwgMCwgMCwgMTE4OTAyLCA0MzAwNSwgMCwgOTU1MiwgMCwgMCwgMCwgMTI5OTcsIDAsIDAsIDAsIDAsIDIzODEsIDEyODgzLCAKKyAgICA2Mzk1MiwgODQyNSwgMzYwMiwgODMyOCwgMTE3NjQsIDExODg5NCwgMCwgNjk3OTYsIDQxMTgzLCAxMjkwNywgMTAyNzEsIAorICAgIDEwMjg3LCA2ODQsIDQzNTI1LCAwLCAyODU0LCAxMTk1ODYsIDQ1OTIsIDY1NzU1LCAwLCA5MjI1NiwgMTE5NjMsIDQzNjIwLCAKKyAgICAwLCA3ODg4OSwgMCwgMCwgMTI4ODA5LCA5ODgxLCA0MzExNSwgNjU3NTcsIDM0MTUsIDAsIDAsIDg2NDgsIDAsIDY3NDEsIAorICAgIDQzMDQ3LCAwLCAxMzE4MCwgMTI4NTE3LCA0MTgsIDkxNzk3MiwgNjQ0OTUsIDEwMjk1LCAxMDMyNywgMTAzOTEsIDQxNzUyLCAKKyAgICA3NDMzOSwgODY0MSwgNDE0NDksIDAsIDc0MTAwLCAwLCAxMDkxMSwgNjk0MiwgMCwgMTAyNCwgNDI4NDksIDQxNzUxLCAKKyAgICA2OTc3NiwgODk0MSwgMCwgNDU1NCwgMCwgOTAyMywgMTE2ODUsIDAsIDk5MjgsIDc4NjE3LCAwLCAxMTQzNywgNDM3NDEsIAorICAgIDkyMTYzLCAxMjA3MDAsIDYzOTY3LCAwLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgNDMxNjYsIDAsIDExNjgwLCAKKyAgICA5MjYxOSwgMTE2ODYsIDc4NTQ0LCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAwLCA5MjE4MywgNjQ1MjMsIDEwMzQzLCAKKyAgICAxMDQwNywgMCwgNjY2NzEsIDExNDY2LCAwLCAxMjgwMDMsIDQyODkwLCAwLCAxMjA1MCwgNjgyMDEsIDI4NjAsIDAsIDAsIDAsIAorICAgIDQyNzkyLCA1NzQzLCAxMDQyNCwgMTIwNjUsIDQyODcyLCAwLCA5MjM0MiwgMCwgODg3NSwgMCwgMCwgOTE3OTkxLCA3NTMxLCAKKyAgICAxMjg0NywgMjQxMywgMCwgNzg2MzUsIDk2MiwgMCwgMTI4NTUsIDQxMTk2LCA0MjU2NCwgMCwgMTU4MiwgMCwgNTUwOCwgMCwgCisgICAgMCwgMCwgMTA4MDEsIDAsIDkyMzU0LCAwLCA3MTczLCA0OTYsIDEwNDM5LCA0MzEzLCA2NDYwNywgNjk2MzgsIDc4NjAsIDAsIAorICAgIDkwNiwgNDI3OTMsIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgNzk4LCA2NDY5NCwgMTI4MDEsIDg0MDYsIDExNTMsIAorICAgIDkyMTczLCA2NDc4OCwgMCwgODA1NCwgOTE3NCwgMTI4NjUyLCA5MTc5NzYsIDk5NjQsIDAsIDQxNjExLCA0NjQyLCA2NjU3NCwgCisgICAgMTE1NTYsIDkxNzk4MiwgMCwgNzg4NTcsIDQyMDg5LCA3ODg1NSwgOTAwOCwgMCwgMCwgMTk1MDk2LCA0MjA3OSwgOTE3OTgxLCAKKyAgICA3NzkyNCwgNDI1MTMsIDAsIDQyODQyLCA3Mzk4NSwgNjUyODUsIDExODk3NCwgMTI3MDAzLCAwLCAwLCAwLCAwLCAxMTMzNSwgCisgICAgNjQwNjksIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgMCwgNjQzODQsIDkyMTY3LCAxMTkxNTgsIAorICAgIDMwMjEsIDQyMDA0LCAwLCAwLCA0MjMxNywgNDE5OTgsIDAsIDY5NDYsIDAsIDAsIDAsIDEyODE5MywgNjUyMDQsIDAsIAorICAgIDY4MTEzLCA0MjY5MCwgOTg4MCwgNDIwMTAsIDc0ODI0LCA2NDU4OSwgMTAxMTEsIDY0ODc1LCAxMjc4ODAsIDY4Mzk5LCAKKyAgICA0Mzk5OCwgMTEzNjAsIDAsIDAsIDAsIDExODgyNiwgNDIxNDksIDAsIDAsIDAsIDY0OTQxLCA3NzkxOSwgMTIwNDIxLCAKKyAgICAxMjgwNzcsIDAsIDU1MjQ3LCA0MTEwLCA2NjAwNSwgNjk1OSwgMTA5MjksIDExOTExMCwgMCwgNjY3MDMsIDc3OTIxLCAKKyAgICA4NjE3LCA0MTk4MiwgNjAyNSwgNjkyNDIsIDAsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgMCwgMTAxMTcsIDAsIAorICAgIDkyMjk3LCA0MTYzNiwgMCwgMCwgMTIwNjgxLCA4MzAxLCAwLCAwLCAxODcsIDAsIDY1NjY5LCAxMjgzMzksIDQ5NjMsIDAsIAorICAgIDEyNzUxNywgMCwgODk2NCwgNjU2NzYsIDY1Nzg1LCAwLCA0MTk0OCwgMCwgMCwgMCwgNDE5NDIsIDY1NDQ5LCAzMTYwLCAKKyAgICAxMDA4MSwgMTMyMjYsIDQyMTIxLCA0MjQ3NSwgNDI2NjMsIDEyODIxMCwgNDE3NjYsIDAsIDY1ODgyLCA3ODg0OSwgNDE3NjAsIAorICAgIDExODksIDkwNSwgNDgwLCAxMDk4NSwgNDE3MzMsIDY3ODU5LCA5NjI5LCA2NzQyLCAxNzQ1LCA0MzYyNSwgNzM4MzUsIAorICAgIDc4ODgsIDAsIDM5ODAsIDAsIDQyNjU2LCA0MTUwNywgODgwNiwgNzAyMywgMCwgNzQyNzksIDk0NDcsIDc4NjUxLCA3ODY3LCAKKyAgICA2OTIxOCwgNjIzNiwgMCwgMCwgMTA1MDUsIDAsIDEyODUxLCAxMTg5NDgsIDM0OCwgNTQ3NCwgMTI4ODQzLCAzMTAzLCAwLCAKKyAgICA0MTc1MywgMTI4NTQwLCAwLCAwLCA3ODg0NCwgNzg4NDUsIDQxNzM5LCA3ODg0MywgNDI1MTUsIDEwOTMxLCA0MTc1NiwgCisgICAgNDMzNDcsIDQyNTYwLCA1MzkxLCA0MTc0NiwgMTE5MTQ3LCA5MjU5MSwgNDEyNTksIDU1NjEsIDc0MzYwLCAyNjkxLCAwLCAKKyAgICA2NTU1MywgNzkzMywgNTU2MiwgNjk4MDAsIDEyODI2NSwgNDEyNjIsIDEyODE0NiwgNjQ0MjEsIDc0ODQ2LCA0MTI1MSwgMCwgCisgICAgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDAsIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgMCwgMTI4ODM2LCAxMDU4NSwgCisgICAgNjU3NDEsIDQxNzM3LCA5NTc0LCAyNjY2LCAwLCA0MTczOCwgODMxLCA0MTksIDEzMTI2LCAxMDcxNiwgMCwgNDI4MjIsIDAsIAorICAgIDY0MzQsIDAsIDY5MzksIDc3NjYsIDY0MzIsIDEyODEwNiwgMCwgOTE2LCA3NjksIDQxNzQyLCAxMTk2OCwgNzQ4MDUsIAorICAgIDY0MzMsIDU1NjMsIDU0NywgMTk0MywgNjQzOSwgNTU2MCwgNDk5NCwgNDg3LCAwLCA0NDk3LCAzNzU0LCAxMjcwNTYsIAorICAgIDEyMDQyNCwgOTAzOSwgMCwgNDE3NzYsIDAsIDg3MTYsIDE1OTUsIDQxNjE1LCAwLCAwLCA3NDI2MCwgMCwgNDI4NTQsIAorICAgIDQzMjE5LCAxMjg3MDksIDAsIDEyMTg1LCAxMjg4NzksIDAsIDY4MzU1LCA2ODM1NywgMCwgNDI4NTYsIDg2MzQsIDAsIDAsIAorICAgIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgCisgICAgMCwgMCwgNTY3OCwgMTE4MjEsIDAsIDY3MTEsIDQ2MCwgMCwgMCwgMCwgMCwgMTIwNzQ3LCAwLCAwLCA3ODA1MCwgMTE5MDIyLCAKKyAgICAwLCAwLCAwLCA3NzgyLCA5MDQ0LCA0OTc0LCAxMTc2MCwgNzg0OTQsIDc1NzcsIDY1NzExLCA0MTkxMiwgMTIxNiwgMCwgCisgICAgMTI4MDc5LCA1NzkyLCAwLCAwLCA3ODUwMSwgMCwgMjkzMywgMTIyNDQsIDAsIDU2ODMsIDAsIDAsIDc4MTE5LCAxNTQ5LCAwLCAKKyAgICAwLCAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIDEwMjU2LCA1NjgwLCA5MTc1NjgsIDEwMDAxLCAwLCA2OTc2OCwgMTQ0OSwgCisgICAgMTAyNDEsIDc4MjkwLCAxMjgyMjgsIDAsIDEwNTUyLCA2NDM0MiwgNDE5MjIsIDEyODU0OCwgODU4NCwgMCwgNTU2NywgCisgICAgMjcxNywgMCwgMCwgNTU2NCwgNDI4ODYsIDQxOTA4LCA0Mjg4MiwgNTU2NSwgMCwgMTI4MDI2LCAwLCA2NTcwOCwgNjU3MDksIAorICAgIDU1NjYsIDY5ODAzLCA2NTcwNCwgNjU3MDUsIDExOTA0LCA0Mjg3NSwgNDMzNzMsIDQyNTM5LCA1OTQyLCA4NDY4LCAKKyAgICAxMjA1NjEsIDEwMzYxLCAxMDQyNSwgNjU2OTcsIDY1Njk4LCA2NTY5OSwgMCwgNjY1OTgsIDAsIDY0NjY0LCAxMDY0NywgCisgICAgNzg3MDIsIDc4NzAzLCA3ODY5MCwgNDU3LCA3ODUwMiwgNjU3MDEsIDE5MzQsIDQzMDA2LCAwLCA4ODAyLCA3ODcxMCwgCisgICAgNjUxMzAsIDExNzQ3LCA3ODcwOSwgNjA4NywgNzg3MDUsIDc4NzE2LCA0MTc1NywgNzg3MTEsIDgwNDMsIDg5NTAsIDY1Njk0LCAKKyAgICA2NDQ4NSwgNDM1MzQsIDEwNDU3LCAwLCAxMTk2MSwgNzg3MjUsIDc4NzIyLCA3ODcyMywgNzg3MjAsIDc4NzIxLCAwLCAKKyAgICA2NTUxNSwgOTQ5OSwgMTAwMzUsIDEzMDY5LCAwLCAwLCA5ODg5LCA2ODE4NCwgNDI4MDYsIDAsIDcyNTYsIDAsIDAsIDE2NjcsIAorICAgIDQyMTYxLCAwLCA0MjQyOCwgMCwgNjkzNCwgMCwgMTA4MDIsIDY0ODYxLCA2NTU2LCA3ODM5MCwgMCwgODEwMSwgMzYxMCwgMCwgCisgICAgNDE3NDgsIDQ5OTUsIDk1NSwgNjU5MDcsIDExOTIwOCwgNTM1MCwgNjQzMzksIDc4MzA2LCA2NDU0OSwgMTA4NzUsIAorICAgIDEyODY2MiwgNTQ3NywgNjU2OTIsIDAsIDEyODUzMiwgMTIwMzk3LCAxMjg5NiwgMTA0NTYsIDkxNzk1NCwgMCwgMzg3NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNjU2MDMsIDAsIDY1Njg3LCAwLCA0MTAzOCwgNzQwMDksIDExOTU3MCwgNDIyMzksIDg1MzYsIAorICAgIDc4NzQwLCAwLCA3ODcyNiwgNzQ0MzIsIDcyNCwgMCwgMTQ1NSwgNzg3NDksIDcxODMsIDY0NTgzLCA3ODc0NywgNjg0NDMsIAorICAgIDQxNzUsIDc4NzQxLCA0MzYxNCwgNjk4MDEsIDkzOSwgMCwgNDM1MjAsIDY4NjEzLCA3NDU2OSwgOTE3OTU4LCAwLCA3ODc2MywgCisgICAgNzg3NjQsIDc4NzYwLCAxMDc4OCwgNjA4OCwgNzg3NTksIDc4NzU1LCAxOTAsIDAsIDEyNTkzLCAwLCA4MTg4LCA2NDQwOCwgCisgICAgMCwgNDQxNywgMCwgOTIyNjEsIDYzNzAsIDAsIDc4MjcsIDY4NDQxLCA2OTY1LCAwLCAwLCAxMzIwMSwgMTI4MjA1LCAwLCAwLCAKKyAgICA3NDM4MiwgNzM3ODEsIDc5MTgsIDczOTg4LCAwLCAwLCA5MTc4ODQsIDE3MjgsIDAsIDEyMDcxMCwgMTc4LCAxMjk3MiwgCisgICAgOTI2NzksIDAsIDkxNzg4NywgOTI1NjMsIDAsIDAsIDc4MzI3LCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAxMTkwNTQsIDAsIAorICAgIDkyNTIsIDkxNzg4OSwgNDY1MiwgNjgzNzEsIDAsIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgMTE3NjMsIDAsIAorICAgIDEyMDY4OCwgNjcyMywgNzgxODcsIDAsIDY5OTMsIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgCisgICAgOTIzMjAsIDc0MDgwLCAwLCAwLCAxMTkxMCwgOTI1NTksIDgyNzgsIDg5NjMsIDQwMzQsIDEyODU2MCwgMCwgNjUzNDQsIAorICAgIDEyMDUxNywgNDE3NDcsIDAsIDAsIDg2NzcsIDAsIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgCisgICAgMTI3NDcsIDgzMDAsIDAsIDAsIDc0OTEsIDg4NTYsIDEyODA2NCwgMCwgNDMxNTAsIDEyNzc2OCwgMTIwNDA0LCA2NTM4OSwgCisgICAgMTIwNDAyLCAxMjA0MDMsIDEwODEzLCAyNTkyLCAxMjg1MywgNDMyNjksIDcyNjMsIDEyMDI0NCwgNjUzNiwgMTIwMjM4LCAKKyAgICAxMjAyMzksIDY1NTE2LCAxMjMyMSwgMTIwMzkxLCAxMjAzODgsIDU1Mjg3LCAxMDAwNywgMTIwMjQ2LCA5NTg4LCAxMjAyNDgsIAorICAgIDE1OTYsIDEyMDM4MywgNDE5OTQsIDY1ODAxLCAxMjg4MDgsIDAsIDY2NTcyLCAwLCAwLCAxMDYxMywgNjY5NywgMTI4MDUsIAorICAgIDQxOTI4LCA0MDk4MSwgNzg0MDMsIDc4NDA5LCA1MDA2LCA2NDMyOCwgMCwgOTkzMSwgMCwgODgyNSwgNzQ1NTUsIDY1OTQwLCAKKyAgICA0MzI1OSwgMCwgNjEwNywgMCwgMTE5MTc3LCAwLCA3ODQwMSwgMTI4NjQxLCAxMTc4MywgMzM1LCAxMjAyMjcsIDY0Njg5LCAKKyAgICA0MzgsIDQ1MTAsIDU3NjUsIDg3MjEsIDEyMDIzMywgMTE5MjI3LCA2MDkyLCAxMjg0MCwgNDMxMTIsIDg4NzYsIDEyMDIzMSwgCisgICAgODA5NiwgMTAyODQsIDEyODUxNSwgMCwgMCwgMTAzODAsIDg3MzMsIDAsIDEyODI0MCwgNDE2MDIsIDAsIDkyMzA4LCAKKyAgICA3NDgzMSwgOTE3OTAxLCAwLCA3Mzc0NywgNjUzOTksIDAsIDY0NTkxLCA0MjQwNSwgMCwgMTIwODIwLCA4NDMsIDExNTQxLCAKKyAgICAwLCA5MTc4OTgsIDIwNjUsIDQxOTM1LCA3NDQ5NiwgNDE5MDIsIDAsIDAsIDIxNSwgNDEyNTgsIDc3ODc1LCA0MzE1OSwgCisgICAgMTk1MywgOTU3OSwgNDE5MzgsIDEyNTYsIDM5MTAsIDk0MDcsIDYyNDIsIDAsIDAsIDQxMjU3LCA0MTkwMCwgODY3NSwgCisgICAgMTA3MDAsIDg4MDUsIDE3NDIsIDAsIDkzMzMsIDgyMDIsIDEyNzc1MCwgMCwgMCwgMCwgMCwgNzM4ODIsIDQ5OSwgMCwgCisgICAgNDM0NjcsIDAsIDQzODE4LCAwLCAxNzEyLCA1OTMyLCA3Nzg0NSwgNDE3NjIsIDAsIDAsIDExOTY3LCAxNzc1LCAwLCAwLCAwLCAKKyAgICAwLCAxMjgwMDksIDk0NTgsIDAsIDY0NzAsIDkxODAsIDEyMDM4MCwgNDMxNzYsIDAsIDAsIDQyNzgyLCAwLCAwLCAwLCAKKyAgICAxMjgzMDksIDc0Nzc3LCAxMjA2NjksIDk0MTQsIDEyMDM4MiwgNzM3ODIsIDczOTY5LCA1NjUsIDQyNDg0LCA1Nzk0LCAyMDEsIAorICAgIDI2NjIsIDQyMjkyLCAwLCA4MjU0LCAwLCAxMDk3NSwgMCwgMTIwNjI1LCA3NDc2MywgMTAyMiwgNDEwOCwgMzg4MCwgCisgICAgNzQyNDcsIDAsIDAsIDkyMjYzLCA5MTc5ODAsIDc1MDcsIDAsIDQzMTQ5LCAwLCA2NTAzMSwgNzk2MSwgMTYzNiwgMCwgCisgICAgNjUwMjksIDY1MDI0LCAwLCAxMjQ3MywgNjUzNCwgMCwgOTksIDk4LCA5NywgMTIwNTcxLCA2NzU4NCwgNDA0OSwgNzQxNjMsIAorICAgIDEyNzA2NSwgNzA5MCwgMCwgNzg5MiwgOTE3OTY5LCAxMDc3NywgOTE3ODAzLCA2NTMxMCwgNjU1NjIsIDY2NTk5LCA2NjcyMiwgCisgICAgMCwgODAzOSwgMzM2MywgNjY1OTQsIDQzNDM0LCAwLCAwLCAxMjU5NiwgNjY1OTUsIDQyMjU4LCA0MjU3MCwgNTU5MywgCisgICAgMTE5MTQ4LCAxMjA3MTEsIDkyNDI1LCAxMDEwMCwgNjA2MSwgNjQ4NTQsIDExOSwgMTE4LCAxMTcsIDExNiwgMTI5OTgsIAorICAgIDEyMiwgMTIxLCAxMjAsIDExMSwgMTEwLCAxMDksIDEwOCwgMTE1LCAxMTQsIDExMywgMTEyLCAxMDMsIDEwMiwgMTAxLCAKKyAgICAxMDAsIDEwNywgMTA2LCAxMDUsIDEwNCwgNjQzNiwgNzM5NzQsIDUzNCwgNDEyMTIsIDc3OTMxLCAxNTM2LCA2NDA5MywgCisgICAgNzM5NzAsIDc3OTMwLCAxMjcxNTcsIDAsIDYwMjAsIDEyNzE2LCAxMjcxMTIsIDEyNzQ0LCA0NzUsIDEyMDM5NCwgMTMyNjYsIAorICAgIDEyNzgxMywgMTI3MTExLCAwLCA3MzkyNiwgMCwgMTA2NDUsIDEyMTIsIDY1NDMsIDAsIDgxMzQsIDEyODAyOCwgMjkxMywgCisgICAgNzM4NzAsIDEyNzExMywgMTg2NiwgMCwgMTk1MDk1LCAwLCA4OTIzLCAxNjQ1LCAxMjA1OSwgNjY1ODUsIDc4Nzg2LCAzMTk2LCAKKyAgICAwLCAwLCA1OTM1LCAxMjUwLCAxMjcwNjYsIDgxNzQsIDk3ODcsIDY3MzMsIDk4NTksIDc5MTYsIDk4NjEsIDk4NjAsIDUyNTgsIAorICAgIDE4ODIsIDE4OTIsIDY3MzEsIDEwODgyLCA0MDUsIDExNDU0LCA3MzkxMSwgMCwgMTI4NzgxLCA0MTE2OSwgODkzOSwgCisgICAgNDEyNDUsIDAsIDQxMTcwLCAxNDU0LCAxMTM2OSwgNjQ3NywgMTIxNTcsIDAsIDAsIDAsIDQxMTcyLCA3ODU1LCAwLCAwLCAKKyAgICAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCAwLCA2NDUsIDAsIDc2MDksIDQwOTczLCAwLCA3MzgzMywgNzgyNDksIAorICAgIDU4MjQsIDk4NCwgNzc5MTgsIDEwNjg4LCA1ODUxLCAwLCA3NzI5LCA3Mzk4MiwgMTIwNTE4LCAwLCAxOTUwODYsIDQzMzY5LCAKKyAgICAwLCAxMjgxNDAsIDY4NDE1LCAwLCA0NTM4LCAxMjA0MDYsIDQzMTQxLCAwLCAwLCA3NDIxNCwgNzM4ODYsIDAsIDAsIAorICAgIDExODkwMiwgNDMwMDUsIDc4NDQ4LCA5NTUyLCAwLCAwLCAwLCAxMjk5NywgMCwgMCwgMCwgMCwgMjM4MSwgMTI4ODMsIAogICAgIDEwOTk0LCAxMDUyOSwgNDE5MDYsIDAsIDAsIDAsIDEyNDI1LCAxMDY2MSwgMTA4NTYsIDk2MTQsIDI0MjgsIDQxNDc4LCAKLSAgICA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDAsIDg0NTUsIDEwMDgyLCAxMTU3NSwgCi0gICAgMCwgMTE5NTY2LCAwLCAxMjgwOCwgMTIxODMsIDYxNDUsIDAsIDY0OTI5LCAwLCAwLCAwLCA0MzE4NiwgNDI1MDksIDAsIAotICAgIDM5MjIsIDkxODcsIDAsIDAsIDAsIDExOTA1NywgMTE3NTIsIDMzNTMsIDkzNTgsIDAsIDAsIDY2NjgwLCAxMjAwOTAsIAotICAgIDExNzQ3LCA3OTMxLCA4NTU4LCA5Nzk1LCAwLCAwLCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCA0MTAyNywgMTIwMDg2LCAKLSAgICAwLCAxMjAwODgsIDEyMDA4NywgNzAxOSwgMTIwMDczLCAwLCAxMTc1MSwgMTIwMDc4LCAxMjAwNzcsIDY0NjU3LCA4NjU3LCAKLSAgICAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIDEyMDA3MSwgMCwgMCwgNDMxNTQsIDQxMDI5LCAKLSAgICAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDAsIDExMjk0LCAwLCA2NjY2NSwgNzg1MSwgMCwgMCwgODY5OSwgMCwgNDI1MjQsIDAsIAotICAgIDkwODUsIDAsIDc1MDQsIDkzMjcsIDYxNjAsIDAsIDAsIDAsIDgwODgsIDAsIDc0MDEyLCAwLCAwLCA0NDM5LCA2OTI2LCAwLCAKLSAgICAxMjkyNCwgMCwgNDIzNjksIDAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDAsIAotICAgIDAsIDAsIDY1ODI1LCA5NTc3LCAxMjA0OTQsIDAsIDY0NjcwLCAwLCAwLCA0MjE1OSwgMTEyOTUsIDAsIDAsIDEyMDc3OSwgMCwgCi0gICAgMCwgMTA5MDIsIDAsIDAsIDAsIDAsIDEwNDcyLCAyOTk1LCAwLCAwLCAwLCAyMzcxLCAwLCAxMjA4MDgsIDI1OSwgMTAwOSwgCi0gICAgMCwgMjQwMiwgMjMzMywgNjQ0MCwgMCwgMCwgNjUxMjUsIDQxMjQ0LCAwLCAxMzI3MSwgOTEwMywgNDExODAsIDAsIDAsIDAsIAotICAgIDAsIDEwMjE5LCAwLCAwLCAwLCAwLCA0MzE3OCwgMTI3MDcwLCA0MTI2MSwgMTE5MzYyLCA5MTc5NzQsIDg2MTMsIDAsIAotICAgIDExODk4OSwgOTE3OTc4LCA5MTc5NzksIDQxNDkyLCAxMjAwNSwgOTE3OTgyLCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIAotICAgIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCAxMTg4NDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDA1NCwgMTE4ODE1LCA2NjM1LCAKLSAgICAwLCA2MTY0LCA2NTE3MCwgMCwgMCwgMCwgMTE2NjQsIDAsIDAsIDAsIDAsIDExODgxMiwgMCwgMCwgMCwgOTE3NSwgMTE5MjUsIAotICAgIDAsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAwLCAwLCA0OTg1LCAxMzI4OCwgNjcyLCA4MDk4LCAKLSAgICA0MzE5NiwgMTk0NzQ2LCAwLCAwLCAwLCA3NDA0MywgNjUwNzIsIDE1NzcsIDExNzcyLCAwLCA1OTI4LCA0NTI1LCAxMDY1OCwgCi0gICAgNjU5MTEsIDEyNjYsIDEwMTgwLCAwLCAwLCAxMjYyMiwgMCwgMCwgMCwgMTk0NzE0LCAwLCAxMzMxMCwgNzczLCAxOTkzMywgCi0gICAgMTUzOSwgMCwgMCwgNjYzNzQsIDAsIDAsIDAsIDAsIDMwNTEsIDU4NjIsIDc4MjMsIDAsIDAsIDEyMDQxMSwgMzI1MCwgCi0gICAgNzQwMjAsIDAsIDY2NjQ5LCA5NTEwLCA2NjIzNywgMCwgMCwgNDEwNjYsIDY0NjczLCA5MTc5NjMsIDkxNzk2NCwgMCwgCi0gICAgMzUwNSwgODcwNywgOTE3OTY4LCA5MTc5NjUsIDkxNzk2NiwgOTE3OTcxLCA5MTc5NzIsIDM0NzEsIDkxNzk3MCwgNTQ3OSwgCi0gICAgODgyLCA2Njg2LCAxMTk1ODQsIDExNjEzLCAxMjA3NzIsIDQyNzU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMjI1LCAwLCAKLSAgICA0NDMzLCA0MTE1NiwgNzM3NDUsIDQzMTczLCAxNDQzLCA0MzgxLCAwLCAwLCAxMDkyNiwgMTE3NTYsIDExNzU3LCA2NDg3OSwgCi0gICAgOTE3OTQ5LCA5MTc5NTAsIDkxNzk0NywgMTMyMjcsIDAsIDEwMDIxLCA1MTYwLCAxMzg3LCAwLCA5MTc5NTMsIDQxNDE4LCAwLCAKLSAgICA2NTkxNCwgOTE3OTU3LCAyMTcsIDkxNzk1NSwgOTE3OTYwLCA5MTc5NjEsIDEwNDQzLCAxMDc4OSwgNDExNTgsIDExOTI1NywgCi0gICAgNDI3NCwgMCwgNDE0ODMsIDAsIDQxMjUwLCAwLCA0MjE3OSwgMCwgNTkzMSwgMTE3NDQsIDAsIDAsIDQxMjUyLCA2NjY4MiwgCi0gICAgMCwgMTE5NjM3LCA0MTI0OSwgMTM2NiwgNjQ2MzUsIDAsIDEyNDY2LCAwLCAwLCA0Mzk3LCAwLCAwLCA0MTI5NiwgOTU0NSwgCi0gICAgNDEyOTEsIDAsIDAsIDQxNDg1LCAzNTExLCA0MTI4MiwgNTkyMywgMTA0MDAsIDAsIDAsIDc2MCwgMCwgMTIwODgsIDU3ODYsIAotICAgIDAsIDQyMjU2LCAxMTk4NjksIDExOTg2MSwgNDE3LCA0MTQ3NCwgMTE5NTYyLCA0MTU2NSwgMCwgNTkzNCwgMTE5ODY3LCAKLSAgICA2NjU4MywgMTE5MjMxLCA2NDg3NywgMCwgNjQ0ODEsIDAsIDAsIDQxOTU2LCAwLCAxMjY5OTUsIDAsIDAsIDAsIDQyMjczLCAKLSAgICA1ODE5LCAwLCA5MTc1NTYsIDAsIDAsIDAsIDY1OTEwLCAwLCAxMDI0NiwgMCwgMCwgMTIzNywgMTAyNzQsIDQ1NTIsIDAsIDAsIAotICAgIDAsIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDc0MTkyLCAxMjA3OTQsIAotICAgIDc4NDAsIDAsIDY0ODkwLCAxMDI1MiwgMCwgMCwgNDMxODUsIDAsIDQzOTYsIDAsIDExOTg4MCwgMTA3NjksIDEwMzMxLCAKKyAgICA4NTgyLCAxMDA2NCwgNzM5MzAsIDAsIDAsIDAsIDY0ODk2LCAxMTkxNjIsIDE5NTIsIDkyMTgxLCA4NDU1LCAxMDA4MiwgCisgICAgMTE1NzUsIDAsIDExOTU2NiwgMCwgMTI4MDgsIDEyMTgzLCA2MTQ1LCAxMTg5NTUsIDY0OTI5LCA5MjQzMywgMCwgMCwgCisgICAgNDMxODYsIDQyNTA5LCAwLCAzOTIyLCA5MTg3LCAwLCAwLCAxMDE5MSwgMTE5MDU3LCAxMTc1MiwgMzM1MywgOTM1OCwgMCwgCisgICAgOTE3OTU3LCA2NjY4MCwgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgMCwgMCwgMTIwMDgyLCAKKyAgICAxMjAwODEsIDEyMDA4NCwgNDEwMjcsIDEyMDA4NiwgMCwgMTIwMDg4LCAxMjAwODcsIDcwMTksIDEyMDA3MywgMCwgMTE3NTEsIAorICAgIDEyMDA3OCwgNzgyOTQsIDY0NjU3LCA4NjU3LCAxMjAwNDgsIDg1OTQsIDEyMDA2OCwgMCwgMCwgMTIwMDY5LCAxMjAwNzIsIAorICAgIDEyMDA3MSwgMCwgMCwgNDMxNTQsIDQxMDI5LCAwLCAxMTMzMiwgNjUzODAsIDc3MjgsIDAsIDExMjk0LCAwLCA2NjY2NSwgCisgICAgNzg1MSwgMCwgODM3NSwgODY5OSwgMCwgNDI1MjQsIDAsIDkwODUsIDAsIDc1MDQsIDkzMjcsIDYxNjAsIDEyODA5NSwgMCwgCisgICAgMCwgODA4OCwgMCwgNzQwMTIsIDkyNTAwLCAwLCA0NDM5LCA2OTI2LCAwLCAxMjkyNCwgMTI4MjI3LCA0MjM2OSwgMCwgCisgICAgNjU0OTEsIDY1MTQ1LCA5MDQxLCA0MzU1OSwgNjQ1NzcsIDEwODI2LCAwLCAxMTI5NiwgMCwgMCwgMCwgNjU4MjUsIDk1NzcsIAorICAgIDY4MTk5LCAwLCA2NDY3MCwgMCwgNzgwNTYsIDY3OTMsIDExMjk1LCAwLCA3ODA1MywgNzM4NzIsIDAsIDAsIDEwOTAyLCAwLCAKKyAgICAwLCA3ODA3MCwgNzgwNjgsIDEwNDcyLCAyOTk1LCAwLCAwLCA2NDY4MiwgMjM3MSwgNzgwNjksIDEyMDgwOCwgMjU5LCAKKyAgICAxMDA5LCA5MjE3MSwgMjQwMiwgMjMzMywgNjQ0MCwgMCwgMCwgNjUxMjUsIDQxMjQ0LCAwLCAxMzI3MSwgOTEwMywgNDExODAsIAorICAgIDAsIDAsIDAsIDAsIDEwMjE5LCAwLCAwLCAwLCAwLCA0MzE3OCwgMTI3MDcwLCA0MTI2MSwgMTE5MzYyLCA0MzY0MCwgODYxMywgCisgICAgMCwgMTE4OTg5LCA2NzM2LCAxOTUwOTIsIDQxNDkyLCAxMjAwNSwgMTI3ODg5LCAwLCAxODkwLCAxMjAwNTYsIDAsIDAsIDAsIAorICAgIDcyOTMsIDc5OTEsIDAsIDEwNTc4LCAwLCA3ODA3NiwgMTk0NzM4LCA3ODA3NywgMCwgMCwgNzg4MDAsIDkyNjUzLCA2NDQ0NSwgCisgICAgNDI2NjgsIDY2MzUsIDAsIDYxNjQsIDY1MTcwLCAwLCAwLCA3Njc2LCAxMTY2NCwgMCwgMCwgNjk3MDcsIDAsIDExODgxMiwgCisgICAgMCwgMCwgMTI4MDQ1LCA5MTc1LCAxMTkyNSwgNzgwNDUsIDkwODgsIDAsIDY0NTQ1LCAxMzk2LCAwLCA3NTQ2LCAzODQ3LCAwLCAKKyAgICAxMjc4MzUsIDQ5ODUsIDEzMjg4LCA2NzIsIDgwOTgsIDQzMTk2LCAxOTQ3NDYsIDAsIDEyODEyNiwgMCwgNzQwNDMsIAorICAgIDY1MDcyLCAxNTc3LCAxMTc3MiwgMTMwNDEsIDU5MjgsIDQ1MjUsIDEwNjU4LCA2NTkxMSwgMTI2NiwgMTAxODAsIDAsIAorICAgIDEyODU4NCwgMTI2MjIsIDAsIDAsIDAsIDE5NDcxNCwgMTI3MTM5LCAxMzMxMCwgNzczLCAxOTkzMywgMTUzOSwgMCwgCisgICAgMTI2OTgzLCA0MjczMSwgOTIyMDUsIDAsIDAsIDAsIDMwNTEsIDU4NjIsIDc4MjMsIDkyNDc4LCAwLCAxMjA0MTEsIDMyNTAsIAorICAgIDQzOTkxLCA2OTY4NywgNjY2NDksIDk1MTAsIDY2MjM3LCAwLCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAKKyAgICAzNTA1LCA4NzA3LCA5MTc5NjgsIDY3MjUsIDEyODAxMywgOTE3OTcxLCA5MjMxNCwgMzQ3MSwgOTE3OTcwLCA1NDc5LCA4ODIsIAorICAgIDY2ODYsIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDAsIDkyNjk2LCAwLCAwLCAwLCAxMjg1MjMsIDMyMjUsIAorICAgIDkxNzk5NiwgNDQzMywgNDExNTYsIDQzOTczLCA0MzE3MywgMTQ0MywgNDM4MSwgMCwgMCwgMTA5MjYsIDExNzU2LCAxMTc1NywgCisgICAgNjQ4NzksIDkxNzk0OSwgOTE3OTUwLCAxMjc4NDgsIDEzMjI3LCAwLCAxMDAyMSwgNTE2MCwgMTM4NywgMCwgOTE3OTUzLCAKKyAgICA0MTQxOCwgMCwgNjU5MTQsIDY3MjEsIDIxNywgOTE3OTU1LCA5MTc5NjAsIDkxNzk2MSwgMTA0NDMsIDEwNzg5LCA0MTE1OCwgCisgICAgMTE5MjU3LCA0Mjc0LCAwLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgNjkyMzIsIDAsIAorICAgIDQxMjUyLCA2NjY4MiwgMCwgMTE5NjM3LCA0MTI0OSwgMTM2NiwgNjQ2MzUsIDY1MDQ3LCAxMjQ2NiwgMCwgMCwgNDM5NywgCisgICAgMTI4MDM3LCAxMjgzMzYsIDQxMjk2LCA5NTQ1LCA0MTI5MSwgMTI4MDQ5LCAwLCA0MTQ4NSwgMzUxMSwgNDEyODIsIDU5MjMsIAorICAgIDEwNDAwLCAwLCAxMjg4MTgsIDc2MCwgMCwgMTIwODgsIDU3ODYsIDAsIDQyMjU2LCAxMTk4NjksIDExOTg2MCwgNDE3LCAKKyAgICA0MTQ3NCwgMTE5NTYyLCA0MTU2NSwgMCwgNTkzNCwgMTE5ODY3LCA2NjU4MywgMTE5MjMxLCA2NDg3NywgMCwgNjQ0ODEsIAorICAgIDc4NjE0LCA2NjAxMywgNDE5NTYsIDQzNDU1LCAxMjY5OTUsIDAsIDAsIDAsIDQyMjczLCA1ODE5LCAwLCA5MTc1NTYsIDAsIAorICAgIDAsIDAsIDY1OTEwLCAxMjc3NDcsIDEwMjQ2LCAxMjA4MTYsIDAsIDEyMzcsIDEwMjc0LCA0NTUyLCAxMTk1NzYsIDAsIDAsIAorICAgIDEzNzUsIDY2NzA1LCA0MzU3MywgNjUyNjAsIDQyMDYzLCAwLCA0MjgxMSwgMTAzMTIsIDc0MTkyLCAxMjA3OTQsIDc4NDAsIAorICAgIDAsIDQzNjMwLCAxMDI1MiwgMCwgMTI4MTA0LCA0MzE4NSwgMCwgNDM5NiwgMCwgMTE5ODgwLCAxMDc2OSwgOTY3NiwgCiAgICAgMTE5MDQxLCAwLCA5NzUzLCAwLCA4OTQ0LCAwLCAwLCAxMDQ3MywgMCwgMCwgNjA3MiwgNDMwMjUsIDEwMjk5LCAwLCAwLCAKLSAgICAxMjA2MDgsIDExOTg3NCwgMCwgMCwgMCwgMCwgOTMzMCwgMCwgNzIyMiwgMTAyODMsIDEwMzE1LCAxMDM3OSwgNDk5NiwgMCwgCi0gICAgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgMCwgMCwgMTE5MDkyLCAwLCAwLCA3NTY1LCA2NjM2MywgMTI5NTIsIDY0ODA2LCAKLSAgICA0MzE4MCwgMCwgNjgwOTYsIDAsIDAsIDc0Mjg4LCA2MjIsIDc0MDIzLCA4ODUsIDY0NzcyLCAxNjAyLCAwLCAwLCA4NTIsIDAsIAotICAgIDEyMTYwLCAwLCAxMDIxMiwgNjU0MzUsIDAsIDEyMDcxLCA5NjA5LCAxMjE1NiwgOTE3OTgzLCA5MTc5ODQsIDQzNTg2LCAKLSAgICAxMTAzNSwgMTA0MTEsIDkxNzk4OCwgMTAyNTUsIDEwMjYzLCAxMDI3OSwgNDE5NCwgMTAzNzUsIDkxNzk5MywgMCwgNDMxNSwgCi0gICAgMTI2NDQsIDkxNzk5NywgOTE3OTk0LCA5MTc5OTUsIDQzMzQzLCAwLCA5MTc5OTgsIDkxNzk5OSwgNDExNzcsIDAsIDAsIAotICAgIDkxNzc5MiwgMCwgMCwgODcxNSwgMCwgNDExNzksIDAsIDQzMzEzLCAwLCA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAKLSAgICAxMjcxMDMsIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAxMTg5MDMsIDEyNzEwOSwgNDE4NiwgCi0gICAgMTI3MTA3LCAxMjcxMDYsIDEyNzEwNSwgNzM5NzMsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCAwLCA5NzQ3LCAwLCA0NDEzLCAwLCAKLSAgICA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgMCwgNjkyMSwgMCwgNzQwMDcsIDQyODY5LCA4NDE4LCAxMTY4MSwgNDMxNjksIAotICAgIDEwMTc2LCAwLCA3NDIsIDAsIDI4OTMsIDEwNzcyLCA2NTI3NiwgNTkzNywgMTkxNCwgMjU1MywgMTE2ODIsIDAsIDAsIDAsIAotICAgIDgzNjMsIDAsIDI5OTMsIDc3NzIsIDM5MTYsIDAsIDAsIDExNDEsIDQyNDA3LCA4MTU5LCA3MTgsIDc1NzIsIDk3MywgMCwgCi0gICAgMTIwNzE4LCAzMjM1LCAyNDE1LCA0MzE2NCwgMCwgODAxOCwgNDIzMzMsIDc0NzU2LCAxMDY3NSwgNjkzNywgNDI0ODYsIDAsIAotICAgIDY1MzkwLCAwLCAwLCAxMjAyLCAwLCAwLCAxMjcwMzcsIDAsIDAsIDAsIDAsIDY0NTQyLCAzMjYwLCA3MzgyOSwgNjUzODgsIAotICAgIDAsIDg0MTksIDAsIDEyNzAzNiwgMCwgMCwgNzQxOTMsIDAsIDAsIDAsIDAsIDE0MzEsIDAsIDY2NTY1LCAxMDgyMSwgMCwgCi0gICAgMTI4MDQsIDAsIDgyMjksIDEyMzUsIDMzMDcsIDExNDcyLCAwLCAwLCA0NTQ0LCAwLCAwLCAwLCAxNzQwLCAwLCA4NzU4LCAKLSAgICA5ODUsIDEyODgyLCA2NDUxMSwgMCwgMTIwNjgsIDAsIDAsIDEwMTQxLCAwLCA2Mzc2MSwgODc4NSwgNDQ3NiwgMCwgNjM3NjMsIAotICAgIDEyNjU1LCA4OTA3LCAwLCAwLCAwLCAwLCAwLCAxMTk1NzIsIDEwNjY1LCA2NDYxNiwgNDE1NzIsIDAsIDAsIDAsIDQxNTczLCAKLSAgICAwLCAzOTMxLCAwLCA3NDE0MywgMCwgMCwgMCwgMCwgMTE5ODIsIDAsIDAsIDAsIDAsIDY0NDg0LCAwLCA0MTE2NywgMCwgCi0gICAgNDE3MzUsIDAsIDcxNywgMTA3NTQsIDAsIDAsIDAsIDAsIDYzNzY3LCAwLCAxNzgwLCA2OTM2LCAwLCAwLCA4MTksIDEwNjExLCAKLSAgICA5Njk0LCAxMjY5NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDEyODIwLCAwLCA2NTc4LCA3MDA5LCA3NTIzLCA2OTIyLCA3NDIxOCwgCi0gICAgNjc4NDgsIDc1MjUsIDMzNDYsIDgzMzksIDAsIDAsIDU3NSwgMjY4LCAwLCA4NTYzLCAwLCAxMjAzNDMsIDQxNTQxLCAKLSAgICA2NTU2NSwgODMzNiwgNTkzNiwgNzI5MCwgMCwgODMzNywgMTMwODEsIDMwOCwgMTEzODgsIDc1MjIsIDEyMDcyMSwgMCwgCi0gICAgNjU0NjYsIDExMDkwLCA2OTUzLCAwLCAxMjAzNDYsIDAsIDEyMDM0NSwgNTkyNiwgMCwgMCwgMCwgMCwgMCwgMCwgOTAzOCwgCi0gICAgNzg4NywgMCwgNzgzMCwgMTE2NTEsIDEzMDkzLCA2NDAwMiwgMCwgNjU3NDIsIDAsIDExOTU5NywgMTE1OTAsIDAsIDc0MDQ4LCAKLSAgICAwLCA4NTk1LCAwLCAwLCAwLCAxMzA5NywgMCwgNjQ2NDMsIDEzMjgzLCAxMjY5NywgMCwgMTIwNjIxLCAzNDg4LCA1OTMzLCAKLSAgICAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgNDI1MzgsIDAsIDAsIAotICAgIDY1MzA4LCA5NDYyLCAwLCAwLCAwLCAwLCAwLCAwLCA1ODMxLCAwLCA3NjM4LCAwLCA0Mjc2NCwgMCwgNDMxMDksIDc2MzcsIAotICAgIDExOTU3LCAxMjA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc2MzYsIDY1MTcxLCA5MTI0LCAwLCAxMjAzMzEsIDAsIDI5MSwgCi0gICAgMCwgMCwgMjAyNywgNjYyMzAsIDAsIDAsIDEwNDAzLCAwLCA0NjQwLCA2NDcxMywgMTAyMjQsIDEyMDQyOSwgNDI1MTIsIAotICAgIDEyMDQzMSwgMTIwNDMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkwOTQsIDc0MjEzLCA3ODI0LCAwLCAwLCA0MTI3NCwgCi0gICAgNTc3OCwgNjMwMiwgMCwgMCwgMTI2ODAsIDExOTEzMCwgMTQxNywgMCwgMTk0OTE0LCA5NDUyLCAwLCAwLCAxMTU1MiwgMCwgCi0gICAgMCwgMCwgNjUzOTEsIDAsIDEwMTcyLCA2NTQ1MywgMTIwNDA4LCA0MTI2NCwgMTIwNDEwLCA2NDI2LCA0NjQxLCA5MTc5LCAKLSAgICA2NDgxOSwgNjQ5MDYsIDQxMjU1LCA0MjAzNiwgNDE0NjksIDQxMjY5LCAxMjA0MTIsIDQxMjY3LCA0NjQ2LCAxMjA0MjUsIAotICAgIDg2NSwgNDIwMzQsIDEyMDQyNiwgMTIwNDIxLCA0NjQ1LCA0MjAzMywgMTIwNDIyLCAwLCAwLCA2NDcyOCwgMCwgMCwgMCwgCi0gICAgMTY1OSwgOTE5LCA0Mjc4NCwgMTY3MSwgMTk1MDg5LCA2MDY5LCA5MjE5LCAxOTUwOTAsIDE2NjEsIDEzMTIwLCA2Mzc4NCwgCi0gICAgMTk1MDk0LCAxMDE0MCwgOTcxMywgMTE5MTQzLCAwLCAwLCAwLCAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgCi0gICAgMTk1MDk5LCAwLCAxOTUxMDEsIDE5NTA3OCwgNDE0NjIsIDE5NTA4MCwgMTk1MDc5LCA1NDIyLCAxOTUwODEsIDAsIDAsIDAsIAotICAgIDEwMjI5LCAxMDYzNSwgODI2LCAxOTUwODMsIDE5NTA4MiwgMTk1MDg1LCAxOTUwODQsIDE5NTA4NywgNjQ4MywgMCwgMTgwOCwgCi0gICAgNzg0OCwgMCwgODEwMCwgMCwgMCwgMCwgMTMzMDEsIDAsIDk2NjcsIDAsIDAsIDAsIDExMDAzLCA5OTA0LCAwLCAwLCAKLSAgICAxMjA2OTAsIDkxNDQsIDEwOTIxLCAwLCAwLCA5ODQwLCA2NTEzMSwgOTE3NTYwLCAwLCAxMDMxMywgMCwgMCwgNjQzMjAsIAotICAgIDEwMjY1LCAwLCAxMDk2MiwgMTE4OTcwLCA0MzAwOCwgODk0NSwgMCwgMCwgNDEsIDE5NTA3MiwgMTc5MiwgMTIwNTE1LCAKLSAgICAxOTUwNzMsIDg2NTUsIDE5NTA3NSwgMCwgMCwgMTIwNjYsIDAsIDM4NSwgNDE1MiwgMjU4NSwgMCwgMCwgMzEyNiwgMCwgCi0gICAgNzQxMzYsIDEwOTU3LCAwLCAwLCAwLCAwLCAxMzE1NywgMCwgMCwgMzU3MCwgMCwgNzQ0MywgMCwgMCwgNjk5NywgMCwgMCwgCi0gICAgNzg3OSwgODczOSwgMTEwNzUsIDAsIDY1MjE2LCAwLCAwLCAyNTkzLCA4NDYzLCA3ODEwLCA5MTc4NjIsIDc4MzksIAotICAgIDExOTkxMywgMCwgOTE3ODYwLCA5NjkxLCA0NDExLCA5MTc4NDcsIDAsIDAsIDAsIDAsIDY1MjU0LCAxMDA2NiwgMCwgMCwgMCwgCi0gICAgMCwgMTMwNjEsIDgwMTYsIDAsIDE5OTMyLCA2NDgzMSwgMCwgMCwgMTIzOTAsIDExOTE3MSwgMTYzNCwgNjgxMTUsIDAsIAotICAgIDExMDU2LCAwLCAxMTk5MjUsIDAsIDQxMTY1LCAxMTMyOCwgMTI0NTAsIDAsIDQxMTY2LCAwLCAxMjQ1NiwgMTE5OTE0LCAKLSAgICAxNzEsIDU5NDEsIDEyNDUyLCA5MTc1NDQsIDEyNDU4LCAxMjUzMSwgMCwgNDMwMTMsIDYzODAwLCA3NDE2MiwgMCwgCi0gICAgMTIwNDgzLCAxOTQ5MjAsIDAsIDEyNDU0LCA2MzgwNiwgNDIxMzIsIDEyMDYzLCAxOTUwNzcsIDAsIDMyMzAsIDAsIDAsIDAsIAotICAgIDUyMDksIDI5NywgNTgxMCwgODUyMiwgODQxNSwgMCwgMCwgMCwgNzA3NywgMjQ5NywgMCwgOTYwLCA3NDE1NiwgNjk4MSwgMCwgCi0gICAgMTI5MzgsIDQyOTIsIDAsIDc0ODE1LCAxMDUxMiwgMCwgNzQ4MTQsIDAsIDAsIDAsIDI1MDMsIDczNzc4LCAxNzYyLCAKLSAgICA3MzgzMywgMjQ5NSwgMCwgNTg0NCwgMTE5MTI0LCAxMTg4MzgsIDAsIDEyNjU0LCA0NjYzLCAxODk5LCAwLCAyNTA3LCAwLCAKLSAgICA4NzI2LCA2NTU5NCwgMCwgMCwgMCwgODg5MiwgMCwgMCwgMCwgMCwgNTc4MiwgNDIwLCAwLCAwLCAxMjA0NjIsIDEwNzk3LCAKLSAgICA2Mzc5NCwgMCwgMCwgMCwgNjM3OTYsIDExODk2NSwgMCwgNjY1ODEsIDExOTIwNSwgNDE2MDgsIDAsIDAsIDAsIDQ2NTksIAotICAgIDEyMDc4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI5LCAxMjA0NzIsIDAsIDkxNzU0OCwgMCwgMCwgNDExODgsIDEzMjQ0LCAKLSAgICAxMjA0NjYsIDQyMTY3LCAwLCAwLCA1MzgwLCAwLCAwLCAxMTU1LCAxMTM2NSwgNDMxMjYsIDAsIDAsIDY1Njg0LCAwLCAKLSAgICA1NjAxLCA2NTE5MiwgNDI3NjUsIDYzNzUyLCAwLCA3OTg3LCAwLCAxMTcyLCAwLCAwLCA0MzYwMSwgMTIwNDc2LCA3NDEyNiwgCi0gICAgNTYwMywgMCwgNDQ3MywgMCwgMTk0ODIzLCAwLCA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAwLCA1MzQ3LCAwLCAwLCAKLSAgICA3Mzg2OCwgMTE4OTQ0LCAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIDEyMDQ3MywgMCwgNDU1NSwgNTM0MSwgMCwgMCwgCi0gICAgMCwgNTM1MSwgMCwgNDMxMDQsIDY1MjQ0LCA5MTc4OTIsIDY0NTQxLCA0MjUxOSwgNzQ0NzIsIDAsIDAsIDc0NzY1LCAKLSAgICA5MTc4ODgsIDAsIDY2MzgsIDAsIDY1MTEzLCAyNzEsIDc0MTgwLCA2NTM3MCwgODgzNSwgNjUzNjgsIDEyNjUzLCA2NTM2NiwgCi0gICAgNDIxNzIsIDQxMDg2LCA2NTM2MywgNjUzNjIsIDY1MzYxLCAxMTkxMiwgNjUzNTksIDExMzIzLCA2NTM1NywgMTE4MDAsIAotICAgIDY1MzU1LCA1MzQ1LCA2NTM1MywgNjUzNTIsIDY1MzUxLCA3NjEsIDY1MzQ5LCAxOTk1OSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ2NDcsIDAsIDAsIDQ2OTksIDAsIDAsIDAsIDAsIDY0NjA1LCAwLCAwLCAwLCA0OTE2LCAwLCAzODAsIDEwOTU4LCAKLSAgICA2NjU2MywgOTE3OTA2LCAwLCA5NzczLCAxMzE2NywgMTI5MTgsIDQxMDk2LCA3Mzk4MCwgMCwgOTE3ODk4LCA5MTc4OTMsIAotICAgIDEwNjg0LCAwLCA5MTc4OTYsIDAsIDc5NDYsIDEyNTQxLCA4MTgyLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDA1LCAxMjI1LCAKLSAgICA2NjMwLCAwLCAwLCAwLCAwLCA4ODQ3LCAwLCA2NTg3NiwgNTUzNSwgODMyOSwgNzQ1OTAsIDAsIDAsIDAsIDAsIDMxMjcsIAotICAgIDI1OTUsIDY1NzEzLCAwLCAwLCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCAwLCA3NDIwMCwgNDk3MCwgCi0gICAgODc2NCwgMTIwNDU5LCA4OTM0LCAwLCA0MTU2NiwgNDQ5MiwgMCwgNjUwMTEsIDQxMDkwLCAwLCAwLCAxMTg4LCA3MjU0LCAKLSAgICAxMTAwLCAwLCAwLCA0MTA4MSwgMjkxMiwgMTE3NDksIDAsIDAsIDAsIDM1NzIsIDEwMDIzLCA0OTU5LCAxMzA3OSwgMCwgMCwgCi0gICAgOTcyOSwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4MDMsIDc5OTYsIDk5MDcsIDQxNDUwLCAxMzMwNCwgMCwgMCwgNDE0NTEsIDAsIAotICAgIDAsIDgyNzMsIDAsIDM0NTEsIDAsIDk3MiwgNDE0NTMsIDAsIDAsIDczODgzLCAwLCA3Mzk0NSwgMCwgMzQ1NSwgMTk5NTUsIAotICAgIDk1MzgsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzk2LCAwLCAxMTAxOSwgMCwgMCwgMCwgMTIwNTA3LCA0MTA3OCwgMCwgMjYxLCAKLSAgICA1OTI3LCA3NzkxLCAwLCAwLCAwLCAxMDY5NiwgMCwgNjA3MywgOTgzOCwgMTE4OTIwLCAwLCA2MDc1LCAwLCAyODIsIDAsIAotICAgIDY0MzcsIDc0MDc4LCAwLCA2NTg2MSwgMCwgMCwgMCwgMCwgMzQ3NCwgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDAsIAotICAgIDc0MDc2LCAwLCAwLCAwLCAwLCAwLCAwLCA4NzUxLCAxMjYyMywgMTIwMjczLCA3ODE2LCAxMjYzNiwgNDY2NSwgMTI2MjgsIAotICAgIDQ2NzAsIDEyMDI3MSwgMTIwMjcyLCAwLCA5NjQyLCAxMDkxMiwgOTU4LCAwLCAxMTM4NywgMCwgNDY2NiwgMCwgNDkxNSwgMCwgCi0gICAgNDY2OSwgMCwgNjgwOTksIDEzMjg3LCA0NjY0LCAxMDgzNiwgMTIwNTUwLCAwLCAwLCAwLCA0MzU5NSwgNzQ1MCwgMCwgCisgICAgMTIwNjA4LCA2NjMyNiwgMCwgMCwgMCwgNDM4MTEsIDkzMzAsIDAsIDcyMjIsIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIAorICAgIDAsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCA3ODM0NywgMCwgMCwgNzU2NSwgNjYzNjMsIDEyOTUyLCAKKyAgICA2NDgwNiwgNDMxODAsIDc3OTI4LCA2ODA5NiwgNzc5MjksIDQzOTgyLCA3NDI4OCwgNjIyLCA3NDAyMywgODg1LCA0MzQwNSwgCisgICAgMTYwMiwgMCwgMCwgODUyLCAwLCAxMjE2MCwgMCwgMTAyMTIsIDY1NDM1LCAwLCAxMjA3MSwgOTYwOSwgMTIxNTYsIAorICAgIDkxNzk4MywgOTE3OTg0LCA0MzU4NiwgMTEwMzUsIDEwNDExLCA5MTc5ODgsIDEwMjU1LCA2NzEwLCAxMDI3OSwgNDE5NCwgCisgICAgMTAzNzUsIDkxNzk5MywgMCwgNDMxNSwgMTI2NDQsIDEyNzUxNiwgNzc5MzcsIDQzNjM5LCA0MzM0MywgMCwgOTE3OTk4LCAKKyAgICAxMTUwMSwgNDExNzcsIDEyODY4OSwgMCwgOTE3NzkyLCAwLCA5MjQxMywgODcxNSwgMCwgNDExNzksIDAsIDQzMzEzLCAwLCAKKyAgICA0MTE3NiwgMCwgOTk0LCAwLCA4NDUyLCAxMjcxMDMsIDczOTY2LCAwLCAwLCA1OTIxLCAwLCAyNTk3LCAwLCA1OTIyLCAKKyAgICAxMTg5MDMsIDc3OTQzLCA0MTg2LCA5MjUzMSwgMTI3MTA2LCAxMjcxMDUsIDY3MTgsIDAsIDQ0MDYsIDc0NjAxLCA4NDgwLCAKKyAgICA5MTkyLCA5NzQ3LCAxMjg2OTksIDQ0MTMsIDkyMTk2LCA0MjI2OCwgMzE5OCwgNTkyNCwgNTkyMCwgOTI0NjksIDY5MjEsIAorICAgIDc4MDgxLCA3NDAwNywgNDI4NjksIDg0MTgsIDExNjgxLCA0MzE2OSwgMTAxNzYsIDAsIDc0MiwgMCwgMjg5MywgMTA3NzIsIAorICAgIDY1Mjc2LCA1OTM3LCAxOTE0LCAyNTUzLCAxMTY4MiwgNjc1NiwgMTI4NTkwLCAxMjg2NDYsIDgzNjMsIDAsIDI5OTMsIAorICAgIDc3NzIsIDM5MTYsIDAsIDEyMDQ5NCwgMTE0MSwgNDI0MDcsIDgxNTksIDcxOCwgNzU3MiwgOTczLCAwLCAxMjA3MTgsIAorICAgIDMyMzUsIDI0MTUsIDQzMTY0LCAwLCA4MDE4LCA0MjMzMywgNzQ3NTYsIDEwNjc1LCA2OTM3LCA0MjQ4NiwgNDMzODEsIAorICAgIDY1MzkwLCAxMDA2NywgMCwgMTIwMiwgMCwgMCwgNjU4NjMsIDAsIDAsIDAsIDc4MTgyLCA2NDU0MiwgMzI2MCwgNzM4MjksIAorICAgIDY1Mzg4LCA5OTQ1LCA4NDE5LCA3ODA0MiwgNjczOCwgMCwgNDM2ODEsIDY5NzI4LCAyMDU5LCAwLCAwLCA1NTIzNywgMTQzMSwgCisgICAgMCwgNjY1NjUsIDEwODIxLCAwLCAxMjgwNCwgMTI4MDc2LCA4MjI5LCAxMjM1LCAzMzA3LCAxMTQ3MiwgNzgwODksIDc4MTg0LCAKKyAgICA0NTQ0LCAwLCAwLCAwLCAxNzQwLCA3ODA5NywgODc1OCwgOTg1LCAxMjg3MiwgNjQ1MTEsIDc4MDk0LCAxMjA2OCwgNzgxMDIsIAorICAgIDAsIDEwMTQxLCAwLCA2Mzc2MSwgODc4NSwgNDQ3NiwgNzgxMDksIDYzNzYzLCAxMjY1NSwgODkwNywgNzgxMDUsIDc4MTA2LCAKKyAgICA3ODEwMywgNzgxMDQsIDAsIDExOTU3MiwgMTA2NjUsIDY0NjE2LCA0MTU3MiwgMCwgMTI3MTYwLCAwLCA0MTU3MywgMCwgCisgICAgMzkzMSwgMTIwMjk1LCA3NDE0MywgMCwgMCwgMCwgMCwgMTE5ODIsIDAsIDAsIDAsIDEyODAxNiwgNjQ0ODQsIDAsIDQxMTY3LCAKKyAgICAwLCA0MTczNSwgMCwgNzE3LCAxMDc1NCwgMCwgMCwgMTI3OTc5LCAwLCA2Mzc2NywgMCwgMTc4MCwgNjkzNiwgMCwgMCwgCisgICAgODE5LCAxMDYxMSwgOTY5NCwgMTI2OTc4LCAwLCAwLCAwLCAwLCA4MzQzLCA4MzQyLCA4MzQ1LCA4MzQ0LCA2NTc4LCA3MDA5LCAKKyAgICA3NTIzLCA2OTIyLCA4MzQ4LCA4MzQ3LCA3NTI1LCAzMzQ2LCA4MzM5LCAxMjgxNjUsIDEyODMzOCwgNTc1LCAyNjgsIAorICAgIDc4MTExLCA4NTYzLCA1NzU0LCAxMjAzNDMsIDQxNTQxLCA2NTU2NSwgODMzNiwgNTkzNiwgNzI5MCwgNzgxMTcsIDgzMzcsIAorICAgIDgzNDEsIDMwOCwgMTEzODgsIDc1MjIsIDEyMDcyMSwgNzgxMjMsIDY1NDY2LCAxMTA5MCwgNjk1MywgMCwgMTIwMzQ2LCAwLCAKKyAgICA3ODEzMiwgNTkyNiwgNzgxMjgsIDc4MTMwLCA3ODEyNiwgNzgxMjcsIDc4MTI0LCA3ODEyNSwgOTAzOCwgNzg4NywgNDM0NTYsIAorICAgIDc4MzAsIDExNjUxLCAxMzA5MywgNjQwMDIsIDAsIDY1NzQyLCAxMjg3NCwgMTE5NTk3LCAxMTU5MCwgMCwgNzQwNDgsIAorICAgIDEyODM1MCwgODU5NSwgMCwgOTE3OTQ3LCA0MzcwMywgMTMwOTcsIDAsIDY0NjQzLCAxMzI4MywgMTI2OTcsIDAsIDEyMzgxLCAKKyAgICAzNDg4LCA1OTMzLCAxMDAzMywgNzM3MzgsIDY2MjQxLCA2NTU3MCwgMCwgMTIyOTcsIDExOTE1MywgMTk1NSwgMCwgNTM0OSwgCisgICAgNDI1MzgsIDAsIDAsIDY1MzA4LCA5NDYyLCA5MTc1NTQsIDAsIDAsIDAsIDQyNzM2LCAwLCA1NzU2LCAwLCA3NjM4LCAKKyAgICA0MTY0MiwgNDI3NjQsIDAsIDQzMTA5LCA3NjM3LCA1NzUyLCAxMjA2MDAsIDAsIDczODMyLCAxMjg4MjcsIDEyMDYzNSwgCisgICAgMTI4MjMxLCA3ODMzNCwgMCwgNzYzNiwgNjUxNzEsIDkxMjQsIDAsIDc4ODkyLCAwLCAyOTEsIDAsIDAsIDIwMjcsIDY2MjMwLCAKKyAgICAxMDA4MCwgNzgxMzYsIDEwNDAzLCAwLCA0NjQwLCA2NDcxMywgMTAyMjQsIDEyMDQyOSwgNDI1MTIsIDEyMDQzMSwgCisgICAgMTIwNDMwLCAwLCAxMjgzNTEsIDEyNzQ4OSwgMTI3MTQ4LCAwLCA5MjQ5OSwgMCwgMTE5MDk0LCA3NDIxMywgNzgyNCwgMCwgCisgICAgMCwgNDEyNzQsIDU3NzgsIDYzMDIsIDAsIDAsIDEyNjgwLCAxMTkxMzAsIDE0MTcsIDc3ODg5LCAxOTQ5MTQsIDk0NTIsIDAsIAorICAgIDc0MzkzLCAxMTU1MiwgMCwgMTI3ODU1LCAwLCA2NTM5MSwgMCwgMTAxNzIsIDY1NDUzLCA2Mzc4OSwgNDEyNjQsIDc4NjU4LCAKKyAgICA2NDI2LCA0NjQxLCA5MTc5LCA2NDgxOSwgNTUyNzgsIDQxMjU1LCA0MjAzNiwgNDE0NjksIDQxMjY5LCAxMjA0MTIsIAorICAgIDQxMjY3LCA0NjQ2LCAxMjA0MjUsIDg2NSwgNDIwMzQsIDc4Mjc0LCA3ODI3MywgNDY0NSwgNDIwMzMsIDc4MjcwLCAKKyAgICAxMjc5ODIsIDAsIDY0NzI4LCAwLCA3ODY3MywgNzg2NzQsIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIDE5NTA4OSwgNjA2OSwgCisgICAgOTIxOSwgMTk1MDkwLCAxNjYxLCAxMzEyMCwgNjM3ODQsIDY5ODE5LCAxMDE0MCwgOTcxMywgMTE5MTQzLCAwLCAwLCAwLCAKKyAgICAyMzA2LCAxMDQ4NSwgMTE4OTQzLCA2MDY4LCAxMDYxMiwgMTk1MDk5LCAxMTk1NjcsIDE5NTEwMSwgOTI1NjEsIDQxNDYyLCAKKyAgICAxMjA0NzAsIDE5NTA3OSwgNTQyMiwgMTI4MjM0LCAwLCAwLCAwLCAxMDIyOSwgMTA2MzUsIDgyNiwgMTI4MDgxLCAxOTUwODIsIAorICAgIDE5NTA4NSwgMTk1MDg0LCAxOTUwODcsIDY0ODMsIDAsIDE4MDgsIDc4NDgsIDAsIDgxMDAsIDc4MjI3LCA3ODY2OSwgCisgICAgNzg2NzAsIDEzMzAxLCA3ODY2NywgOTY2NywgNzg2NjUsIDc4ODcyLCAwLCAxMTAwMywgOTkwNCwgMCwgMCwgMTIwNjkwLCAKKyAgICA5MTQ0LCAxMDkyMSwgMCwgNzg2ODAsIDk4NDAsIDY1MTMxLCA3ODY3OCwgNzc4NDEsIDEwMzEzLCAwLCAwLCA2NDMyMCwgCisgICAgMTAyNjUsIDc4Njg2LCAxMDk2MiwgNzg2ODQsIDQzMDA4LCA4OTQ1LCA3ODY4MywgMCwgNDEsIDE5NTA3MiwgMTc5MiwgCisgICAgMTIwNTE1LCAxOTUwNzMsIDg2NTUsIDE5NTA3NSwgOTI1NDQsIDc3OTUxLCAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAKKyAgICAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCAwLCA0MzI1OCwgMCwgMTI3ODczLCAxMzE1NywgMCwgMCwgCisgICAgMzU3MCwgMCwgNzQ0MywgMCwgNDQwMDYsIDY5OTcsIDAsIDAsIDc4NzksIDg3MzksIDExMDc1LCAwLCA2NTIxNiwgMCwgCisgICAgNjk3OTUsIDI1OTMsIDg0NjMsIDc4MTAsIDkxNzg2MiwgNzgzOSwgMTE5OTEzLCA3ODgwNiwgMTE5OTEyLCA5NjkxLCA0NDExLCAKKyAgICA3ODgwMiwgMCwgMCwgNDM0NDIsIDc4Nzk5LCA2NTI1NCwgMTAwNjYsIDAsIDAsIDAsIDAsIDEzMDYxLCA4MDE2LCA3ODY4NywgCisgICAgMTk5MzIsIDY0ODMxLCAwLCAxMTk5MjMsIDEyMzkwLCAxMTkxNzEsIDE2MzQsIDY4MTE1LCAwLCAxMTA1NiwgMCwgMTE5OTI1LCAKKyAgICAwLCA0MTE2NSwgMTEzMjgsIDEyNDUwLCAwLCA0MTE2NiwgMCwgMTI0NTYsIDExOTkxNCwgMTcxLCA1OTQxLCAxMjQ1MiwgCisgICAgOTE3NTQ0LCAxMjQ1OCwgMTI1MzEsIDc4Nzc5LCA0MzAxMywgNjM4MDAsIDc0MTYyLCAxMjc1NjksIDEyMDQ4MywgOTk2OSwgCisgICAgMCwgMTI0NTQsIDYzODA2LCA0MjEzMiwgMTIwNjMsIDc4NDI1LCA3ODQyNCwgMzIzMCwgMCwgMCwgMCwgNTIwOSwgMjk3LCAKKyAgICA1ODEwLCA4NTIyLCA4NDE1LCAxMTk5MzcsIDc4NDI5LCA3ODQyOCwgNzA3NywgMjQ5NywgMTI4NjUxLCA5NjAsIDc0MTU2LCAKKyAgICA2OTgxLCA5MjM3NCwgMTI5MzgsIDQyOTIsIDAsIDc0ODE1LCAxMDUxMiwgMCwgNzQ4MTQsIDc4ODc1LCAxMjc1MDUsIAorICAgIDc4ODc2LCAyNTAzLCA3Mzc3OCwgMTc2MiwgNjk3OTQsIDI0OTUsIDc4ODczLCA1ODQ0LCA3ODg3NCwgMTE4ODM4LCAwLCAKKyAgICAxMjY1NCwgNDY2MywgMTg5OSwgNzg4NzcsIDI1MDcsIDY0MTIxLCA4NzI2LCA2NTU5NCwgMCwgMCwgMCwgODg5MiwgMCwgCisgICAgOTIzMzksIDAsIDAsIDU3ODIsIDQyMCwgMCwgMCwgNDM3OTYsIDEwNzk3LCA2Mzc5NCwgMCwgMCwgNjQ4MTQsIDYzNzk2LCAKKyAgICA3Nzk2NSwgMCwgNjY1ODEsIDExOTIwNCwgNDE2MDgsIDAsIDAsIDYzNzkyLCA0NjU5LCAxMjA3ODgsIDAsIDQzNjc2LCAwLCAKKyAgICA2OTY3MywgMCwgMCwgMCwgMzI5LCA3Nzk2OCwgOTI3MDcsIDkxNzU0OCwgNzM5OSwgMCwgNDExODgsIDEzMjQ0LCAxMjA0NjYsIAorICAgIDQyMTY3LCA3NDM1LCA3ODE5MywgNTM4MCwgMTE5MDg2LCA2OTIyNSwgMTE1NSwgMTEzNjUsIDQzMTI2LCA3Nzk3MiwgMCwgCisgICAgNjU2ODQsIDAsIDU2MDEsIDY1MTkyLCA0Mjc2NSwgNjM3NTIsIDAsIDc5ODcsIDAsIDExNzIsIDY5Nzk5LCA2Nzg2LCAKKyAgICA0MzYwMSwgMTIwNDc2LCA3NDEyNiwgNTYwMywgMCwgNDQ3MywgMCwgMTk0ODIzLCAwLCA2NTM0NywgNjUzNDYsIDY1MzQ1LCAKKyAgICAwLCAxMjczODQsIDUzNDcsIDY5ODAyLCAwLCA3Mzg2OCwgMTE4OTQ0LCAxMDU4OCwgMCwgMCwgNjM3NTUsIDAsIDUzNDMsIAorICAgIDc4NDIyLCAwLCA0NTU1LCA1MzQxLCAwLCAwLCAxMjg2NzAsIDUzNTEsIDAsIDQzMTA0LCA2NTI0NCwgOTE3ODkyLCA2NDU0MSwgCisgICAgNDI1MTksIDc0NDcyLCAwLCAwLCA3NDc2NSwgOTE3ODg4LCAxOTQ4OTIsIDY2MzgsIDAsIDY1MTEzLCAyNzEsIDc0MTgwLCAKKyAgICA2NTM3MCwgODgzNSwgNjUzNjgsIDEyNjUzLCA2NTM2NiwgNDIxNzIsIDQxMDg2LCA2NTM2MywgNjUzNjIsIDY1MzYxLCAKKyAgICAxMTkxMiwgNDM0MTAsIDExMzIzLCA2NTM1NywgMTE4MDAsIDY1MzU1LCA1MzQ1LCA2NTM1MywgNjUzNTIsIDY1MzUxLCA3NjEsIAorICAgIDY1MzQ5LCAxOTk1OSwgNjk3MTgsIDYzODU2LCAwLCAyNDIzLCA3Nzk1OCwgNjQ2NDcsIDc3OTU5LCAxMTk1NywgNDY5OSwgMCwgCisgICAgMCwgMCwgMCwgNjQ2MDUsIDAsIDAsIDAsIDQ5MTYsIDAsIDM4MCwgMTA5NTgsIDY2NTYzLCA3Nzk1NSwgNjk3NzMsIDk3NzMsIAorICAgIDEzMTY3LCAxMjkxOCwgNDEwOTYsIDczOTgwLCA2OTI0NSwgNzgyNTQsIDkxNzg5MywgMTA2ODQsIDAsIDkxNzg5NiwgMCwgCisgICAgNzk0NiwgMTI1NDEsIDgxODIsIDY3NTg2LCA2OTc4MCwgMCwgMCwgMCwgMCwgOTAwNSwgMTIyNSwgNjYzMCwgMCwgMCwgMCwgCisgICAgMCwgODg0NywgMCwgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCAwLCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIAorICAgIDQyMDEzLCAwLCA1NjA3LCA0MTA4OSwgMCwgMCwgNzQyNTYsIDI2NjUsIDExMzA0LCAwLCA3NDIwMCwgNDk3MCwgODc2NCwgCisgICAgMTIwNDU5LCA4OTM0LCA5MjcyNiwgNDE1NjYsIDQ0OTIsIDAsIDY1MDExLCA0MTA5MCwgMCwgMCwgMTE4OCwgNzI1NCwgCisgICAgMTEwMCwgMCwgMTI4MzAxLCA0MTA4MSwgMjkxMiwgMTE3NDksIDY5NzkyLCAwLCAwLCAzNTcyLCAxMDAyMywgNDk1OSwgCisgICAgMTMwNzksIDAsIDAsIDk3MjksIDAsIDAsIDAsIDQzMzYxLCAwLCAwLCAxMTgwMywgNzk5NiwgOTkwNywgNDE0NTAsIDEzMzA0LCAKKyAgICAxMjgyOTAsIDEyNzI2MCwgNDE0NTEsIDAsIDExMDk1LCA4MjczLCAxMjc1MzMsIDM0NTEsIDAsIDk3MiwgNDE0NTMsIDAsIDAsIAorICAgIDczODgzLCA5MjQwOCwgNzM5NDUsIDAsIDM0NTUsIDE5OTU1LCA5NTM4LCAwLCA2OTgwNywgMCwgMCwgMCwgMCwgMTEzOTYsIAorICAgIDAsIDExMDE5LCAwLCAwLCAwLCAxMjA1MDcsIDQxMDc4LCAwLCAyNjEsIDU5MjcsIDc3OTEsIDAsIDY0NDQ2LCAwLCAxMDY5NiwgCisgICAgMCwgNjA3MywgOTgzOCwgMTE4OTIwLCAwLCA2MDc1LCAxMjg1NjMsIDI4MiwgMCwgNjQzNywgNzQwNzgsIDEyODAwMCwgCisgICAgOTgwMSwgMCwgMCwgMCwgMCwgMzQ3NCwgMTE4Nzg3LCAwLCAxMjA2NTUsIDYwODEsIDAsIDEyNzg0MywgNzQwNzYsIDc4ODc5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCA4NzUxLCAxMTQ5OSwgMTIwMjczLCA3ODE2LCAxMjYzNiwgNDY2NSwgMTI2MjgsIDQ2NzAsIAorICAgIDkyNjA4LCAxMjAyNzIsIDAsIDk2NDIsIDEwOTEyLCA5NTgsIDAsIDExMzg3LCA3ODg3OCwgNDY2NiwgMCwgNDkxNSwgMCwgCisgICAgNDY2OSwgMCwgNjgwOTksIDEzMjg3LCA0NjY0LCAxMDgzNiwgMTIwNTUwLCAwLCA2OTc3NSwgMCwgNDM1OTUsIDc0NTAsIDAsIAogICAgIDkxNzg3NSwgODY2NCwgOTY5NywgMzYwNiwgOTE3ODczLCAwLCAwLCA2NDgxNSwgMTA2MywgMTIwMjUwLCAxMjAyNTEsIAotICAgIDk3NzIsIDcyNTUsIDg4ODYsIDEzODksIDAsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCAxMjAyNTMsIDEyMDI1NCwgCi0gICAgMTIwMjU1LCAxMjAyNTYsIDEyMzAxLCAxMjAyNjYsIDEyMDI2NywgNDExMDIsIDY2NjA0LCAxMjAyNjIsIDEyMDI2MywgCi0gICAgMTIwMjY0LCAxMDE3LCA2NjYwMCwgNTIzLCA1MDUsIDE0NDcsIDc0NDM2LCAwLCAwLCAwLCA4NjA4LCA0Mjc4OSwgMCwgMCwgCi0gICAgMCwgMTE5MTk2LCAxMTMwNywgNjY3MDcsIDkxNzg3MSwgMCwgMTE3NDUsIDc5MTksIDAsIDE2NDEsIDAsIDAsIDg5NjYsIDAsIAotICAgIDAsIDU5MDgsIDAsIDAsIDc0NTYyLCAwLCAxNjk5LCA3NDE5MSwgNzQ4NDMsIDAsIDAsIDYzMDYsIDEwMTY5LCAwLCAKLSAgICAxMTkyNTEsIDAsIDM3NjYsIDEyMDQ1NywgMTIwNDU2LCAxMjA0NTUsIDY2MTEsIDI1NywgNDMxNzAsIDEzMTUzLCAwLCAKLSAgICA0MjM4NiwgMCwgOTQzNiwgMjU5OSwgMCwgNjQ5NiwgOTQ0OSwgNTkzMCwgMTE0NzYsIDExMDMzLCAxMTQ0NywgMCwgNTYyMiwgCi0gICAgMTIwNDM2LCA4NDc3LCAzNzYwLCAxNzE4LCA5NDQyLCA2NjQzMywgMzc3NiwgMCwgNDE0MzUsIDQzNTIsIDAsIDI0MzUsIAotICAgIDEyMDgwOSwgNTYyMSwgMCwgNDIwMSwgMzc3OCwgNDIwMywgNDIwMiwgNDIwNSwgNDIwNCwgMTIwNDQ3LCAzNzY4LCA2ODE0MiwgCi0gICAgNzY1LCA0MTQ0MCwgMzc2NCwgODQ3MywgMTIwNDQwLCA4NDY5LCAxMjA0MzgsIDEyOTQ3LCA0NTY0LCAwLCAwLCA3NDI3MSwgCi0gICAgNzM3NTMsIDAsIDAsIDAsIDAsIDUyMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NzkzLCA1NjI2LCA3MzgwNywgMTE3NzEsIDAsIAotICAgIDAsIDAsIDAsIDUzNTMsIDU2MjUsIDc0MTc5LCAwLCAwLCAxMDEwLCA2NDU3MiwgMCwgNDI2MjMsIDY0Mjc3LCAwLCA2OTUyLCAKLSAgICAwLCAxMjA3NTIsIDExOTAwMywgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgMTIwMDM4LCAKLSAgICAxMjAwMjcsIDEyMDAyOCwgMTIwMDI1LCA1NjI4LCAxMjAwMzEsIDk3MCwgMTIwMDI5LCA0NzcyLCAyNDAwLCA1NjI3LCAKLSAgICAxMjAwMTcsIDEyMDAxOCwgMTIwMDIzLCA2NDI3NSwgMTIwMDIxLCAxMDk2MSwgMCwgMjAzLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgMCwgNzM4OTEsIAotICAgIDAsIDAsIDU2OTQsIDc2ODksIDc0NTI4LCA5MzIzLCA0MzI1LCAzMDQ3LCAxMDMxNywgMTc1LCAwLCAwLCA3NDYwNSwgMCwgMCwgCi0gICAgMTI0MywgNDIxNTQsIDU0MzEsIDY2NTIsIDAsIDAsIDAsIDAsIDY4MTE4LCAwLCAxMTI5LCAwLCAwLCA2NTkwMCwgMTk4NiwgCi0gICAgNzg0NiwgMCwgODY2MSwgMCwgNjUyNTUsIDAsIDM4NDUsIDQ0OTAsIDAsIDY2NDksIDc0NDAwLCAxNDU2LCA3NTMwLCAKLSAgICAxMTk3NywgNzI0OSwgODM2NiwgMCwgNzc1NiwgMTIzNDIsIDAsIDUxLCA0MTUxNiwgMCwgODU3MCwgOTU2OCwgMCwgNDU2LCAKLSAgICA3MDI2LCA4MTQ1LCAxMTY4LCA5MjUxLCA5MDgyLCAwLCA2NDA1NSwgNDI3ODEsIDM4NjYsIDEyMzIzLCA0MTUxMiwgNzM4MDUsIAotICAgIDY4MTIxLCAwLCA0MTQ5NCwgMCwgNDY2MCwgMCwgMTA0MDUsIDAsIDAsIDAsIDAsIDQyMDQwLCA3MzkxOCwgMTE5NjI3LCAKLSAgICA3OTQ0LCA0MTQ1NCwgMTI2MDUsIDAsIDAsIDQxNDU1LCAyMzYsIDAsIDAsIDgyMTQsIDAsIDAsIDAsIDQxNDU3LCAwLCAKLSAgICAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDAsIDAsIDAsIDAsIDg3NjYsIDAsIDkxNzg2MywgNTg1NCwgMCwgMTA1ODMsIDAsIAotICAgIDExOTk4OSwgMCwgMTA0MTYsIDkxNzg2OSwgMzg3MiwgMCwgMCwgODQyOSwgMCwgMCwgMjgzOCwgOTE3ODY3LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5MTc4NjQsIDEyMDgxMywgMTA1NTMsIDE2NjIsIDg0ODMsIDAsIDQzNjA1LCA1ODkyLCA5MTc4NjgsIDAsIAotICAgIDczNzQyLCA2NiwgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgCi0gICAgODIsIDgxLCA4NCwgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDAsIDEwMzU3LCAwLCA4MTcwLCAxNzA0LCA4NTU2LCAwLCAKLSAgICA5NjU5LCAwLCAwLCAwLCA5NTU2LCAwLCA0NTAzLCAxMTM1MywgOTY0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyMjksIAotICAgIDY2NTkzLCA2NDM4LCAwLCA5MTA5LCAxMTk1NjUsIDEyODksIDY0NTk5LCAwLCAwLCAwLCA2NTUwNywgMjQ0NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzM3NTAsIDAsIDAsIDE5OTM3LCAwLCAwLCAwLCA1Njc1LCAyNTQsIDAsIDAsIDAsIDQyNDI1LCA4OTE4LCAKLSAgICA2NDAwMywgNTcxNiwgNDIzMTIsIDAsIDAsIDY5NzIsIDQyODI2LCAwLCA0MjQ2NCwgMTIwNTY3LCAwLCAwLCA3NDc5NiwgCi0gICAgNjQ0MDAsIDY0NjkzLCAwLCAwLCA2NTQyOSwgOTUxNSwgNDQzNSwgMCwgMCwgMCwgMCwgMTE3ODUsIDAsIDY0NjcxLCAKLSAgICA0MTk3OCwgMTQxMiwgNDU5NCwgMTM5MSwgMTA1MzYsIDgwNjcsIDk5MDEsIDc3NzUsIDAsIDAsIDc0NTg4LCAxMjA3NDgsIAotICAgIDMxNDAsIDAsIDc5NjAsIDQzMjcxLCAwLCAxMjUxOCwgMTA5MDksIDAsIDE0MjgsIDEyNDcyLCAwLCAwLCA3Njk5LCAxMjM5MywgCi0gICAgMCwgMCwgMCwgNzQ1MTgsIDkwNjMsIDAsIDQyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY0NTU0LCAKLSAgICAxMDU3NCwgMzg3OCwgMCwgNDIzNTIsIDE3NTIsIDczNzg1LCAwLCA0MjUwNiwgMCwgMTAxOTksIDAsIDAsIDAsIDY1OTE5LCAKLSAgICAwLCAwLCA3MjAsIDMyNCwgMCwgMCwgMCwgMCwgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDY4MTIzLCAwLCA2NDQ4OCwgMCwgCi0gICAgMCwgMCwgNzQ3ODcsIDAsIDAsIDAsIDY1NTk3LCAwLCAwLCAwLCAxMzAyLCAwLCAwLCAwLCAwLCAwLCA1MjA0LCA3NDc3NCwgCi0gICAgMCwgMCwgMCwgMzk5NSwgMCwgNjU2MDgsIDM3MTQsIDAsIDAsIDAsIDEwOTk5LCAxMTc1MCwgMCwgMTI3MDA0LCAwLCAwLCAwLCAKLSAgICAwLCA4MTMwLCA4NjcyLCAxMDg0NSwgMTE5NjQsIDAsIDAsIDAsIDAsIDAsIDQyODYzLCA3MzgzOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNDY4LCA2MTIsIDAsIDY0NDAxLCA2NjQ0OCwgMCwgMCwgMTY3NCwgMCwgNTgyMywgMCwgMTIyODAsIDAsIDU0MCwgCi0gICAgNzQ1NjQsIDAsIDAsIDg0MzIsIDAsIDExMDczLCAwLCA2NDMxNiwgMCwgMCwgODIwLCA0MTc0MSwgMCwgMTIwNjY3LCAwLCAKLSAgICA2NDY4NCwgMTI2OTkyLCAzMzU5LCA3ODAwLCAwLCA2NTE3NywgNjIyNiwgMzUzLCAxMjM5NiwgMCwgMTE5NjEyLCA2NDc0MiwgCi0gICAgMCwgMCwgMCwgMCwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDAsIDE4ODQsIDk0ODEsIDQyNDE4LCAwLCA0MTE1NywgMCwgCi0gICAgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCA0MTMyOCwgNDIzNDQsIDAsIDEyNDA5LCAwLCA0MzYwLCAKLSAgICAxMjcwMDksIDk3MzksIDAsIDc0MzkyLCA3MzkyMSwgMCwgNDI1MjEsIDg1MzksIDAsIDAsIDAsIDAsIDQ3ODgsIDAsIDAsIAotICAgIDY1NzM0LCAwLCA2NDM1MywgMCwgMTMwNzUsIDc0NDI5LCAwLCA2NDU2OSwgNDM1MzIsIDEwODM3LCAyNDkyLCAwLCAKLSAgICAxMTg5MDEsIDAsIDQxMTM2LCA2NDM1MSwgMTE4MTMsIDk2NDksIDQxMTU0LCAxMTk2MTcsIDUxMjgsIDQwMzgsIDQxMTQzLCAKLSAgICA2NTYwNCwgNjQ4NTksIDQxNTkyLCAwLCAxNjQ4LCA1NDM1LCAwLCAwLCA0MTM0MywgMTE5ODQ4LCA2NTQzOSwgMTI3MDksIAotICAgIDY5ODYsIDAsIDAsIDAsIDQxMzQ5LCAwLCAxMjU4MSwgMTAzNzQsIDUxNzUsIDAsIDczODA2LCAxMDI1NCwgMCwgMTAyNzgsIAotICAgIDEwMjYyLCAxMjAyOTUsIDQxMzQ2LCAwLCA2MDcsIDAsIDAsIDAsIDEyOTIzLCAxMDMxNCwgMTAyODIsIDY1NDc3LCAxMDM3OCwgCi0gICAgMTIwMjk3LCA0MDk3NiwgODI2NSwgMCwgMTE5ODM0LCA0MDk3NSwgNTg0MCwgNDI4MzgsIDAsIDQwOTc4LCAwLCAxMTk4NDAsIAotICAgIDAsIDAsIDAsIDY2NDQ0LCAxMDUzOCwgMCwgMjU1MCwgMTE5ODM2LCAwLCAwLCAwLCAzNTI1LCAwLCAwLCAwLCAwLCA1NjE5LCAKKyAgICA5NzcyLCA3MjU1LCA4ODg2LCAxMzg5LCAxMjc5MzIsIDEyMDI1NywgMTIwMjU4LCAxMjAyNTksIDEyOTQxLCA0MjY2MSwgCisgICAgOTIzODEsIDEyMDI1NSwgMTIwMjU2LCAxMjMwMSwgMTIwMjY2LCA2OTgyMCwgNDExMDIsIDY2NjA0LCAxMjAyNjIsIAorICAgIDEyMDI2MywgMTIwMjY0LCAxMDE3LCA2NjYwMCwgNTIzLCA1MDUsIDE0NDcsIDc0NDM2LCAwLCAwLCAwLCA4NjA4LCA0Mjc4OSwgCisgICAgMTIwNjEzLCAxMjg3MDQsIDAsIDExOTE5NiwgMTEzMDcsIDY2NzA3LCA5MTc4NzEsIDEyNzc1MSwgMTE3NDUsIDc5MTksIDAsIAorICAgIDE2NDEsIDAsIDAsIDg5NjYsIDAsIDAsIDU5MDgsIDAsIDAsIDY3NDQsIDEyODM1NSwgMTY5OSwgNzQxOTEsIDc0ODQzLCAwLCAKKyAgICAwLCA2MzA2LCAxMDE2OSwgMCwgMTE5MjUxLCAxMDA2OCwgMzc2NiwgMjM4OSwgMTIwNDU2LCAxMjA0NTUsIDY2MTEsIDI1NywgCisgICAgNDMxNzAsIDEzMTUzLCAwLCA0MjM4NiwgMCwgOTQzNiwgMjU5OSwgMCwgNjQ5NiwgOTQ0OSwgNTkzMCwgMTE0NzYsIDExMDMzLCAKKyAgICAxMTQ0NywgMTA1NDEsIDU2MjIsIDEyMDQzNiwgODQ3NywgMzc2MCwgMTcxOCwgOTQ0MiwgNjY0MzMsIDM3NzYsIDAsIAorICAgIDQxNDM1LCA0MzUyLCAwLCAyNDM1LCAxMjA4MDksIDU2MjEsIDEyMDM4NSwgNDIwMSwgMzc3OCwgNDIwMywgNDIwMiwgNDIwNSwgCisgICAgNDIwNCwgMTIwNDQ3LCAzNzY4LCA2ODE0MiwgNzY1LCA0MTQ0MCwgMzc2NCwgODQ3MywgNjM3MywgODQ2OSwgMTIwNDM4LCAKKyAgICAxMjk0NywgNDU2NCwgMCwgMCwgNzQyNzEsIDczNzUzLCA4Mzc0LCAwLCAwLCA2ODI5LCA1MjI1LCAxMjg4MDcsIDEyNzM4NSwgCisgICAgMCwgMCwgMTE5NjE1LCAwLCA3NDc5MywgNTYyNiwgNzM4MDcsIDExNzcxLCAwLCAxMjcyMzYsIDEyODAxOSwgMCwgNTM1MywgCisgICAgNTYyNSwgNzQxNzksIDAsIDAsIDEwMTAsIDY0NTcyLCA0MTc4MCwgNDI2MjMsIDY0Mjc3LCAwLCA2OTUyLCAwLCAxMjA3NTIsIAorICAgIDc4NzYyLCAyNTkwLCA1NjI5LCA2NTU1MiwgNzU1MSwgMTAzMjUsIDU2MzIsIDEwNDcxLCAxMjAwMzgsIDEyMDAyNywgCisgICAgMTIwMDI4LCAxMjAwMjUsIDU2MjgsIDEyMDAzMSwgOTcwLCAxMjAwMjksIDQ3NzIsIDI0MDAsIDU2MjcsIDEyMDAxNywgCisgICAgMTIwMDE4LCAxMjAwMjMsIDY0Mjc1LCAxMjAwMjEsIDEwOTYxLCAwLCAyMDMsIDAsIDAsIDAsIDAsIDc4MzUwLCAwLCAKKyAgICA2NDM3OCwgNDIwNTQsIDAsIDAsIDU1NCwgMTE5NjQ5LCAxMTM1OCwgMCwgMTIxODIsIDQyMDQ4LCAxMTA2NSwgMTI3ODc4LCAKKyAgICA3Mzg5MSwgMCwgMCwgNTY5NCwgNzY4OSwgNjk3OTgsIDkzMjMsIDQzMjUsIDMwNDcsIDEwMzE3LCAxNzUsIDAsIDAsIAorICAgIDY5NzY0LCAwLCAwLCAxMjQzLCA0MjE1NCwgNTQzMSwgNjY1MiwgMCwgNjk3NzAsIDQzNjUxLCAwLCA2ODExOCwgMTI4MDI0LCAKKyAgICAxMTI5LCAwLCAwLCA2NTkwMCwgMTk4NiwgNzg0NiwgNzg4MDQsIDg2NjEsIDkxNzc3MiwgNjUyNTUsIDAsIDM4NDUsIDQ0OTAsIAorICAgIDExODk2OSwgNjY0OSwgNzQ0MDAsIDE0NTYsIDc1MzAsIDExOTc3LCA3MjQ5LCA4MzY2LCAwLCA3NzU2LCAxMjM0MiwgCisgICAgMTI4NTY4LCA1MSwgNDE1MTYsIDAsIDg1NzAsIDk1NjgsIDkxNzg2MywgNDU2LCA3MDI2LCA4MTQ1LCAxMTY4LCA5MjUxLCAKKyAgICA5MDgyLCAxMTk5NjQsIDY0MDU1LCA0Mjc4MSwgMzg2NiwgMTIzMjMsIDQxNTEyLCA3MzgwNSwgNjgxMjEsIDAsIDQxNDk0LCAKKyAgICA5MjMxNiwgNDY2MCwgMCwgMTA0MDUsIDAsIDc4ODAzLCAwLCAwLCA0MjA0MCwgNzM5MTgsIDExOTYyNywgNzk0NCwgNDE0NTQsIAorICAgIDEyNjA1LCAwLCA0MjIwNSwgNDE0NTUsIDIzNiwgNjQwNTEsIDc4ODY3LCA4MjE0LCAwLCAwLCAwLCA0MTQ1NywgMCwgCisgICAgMTE5NTg5LCAxOTY5LCAyMzg0LCA4MDk3LCA5MTc4NjQsIDAsIDEyNzM4MCwgNzgwMjksIDg3NjYsIDAsIDc4MDc5LCA1ODU0LCAKKyAgICAxMjc5NzQsIDEwNTgzLCAwLCAxMTk5ODksIDAsIDEwNDE2LCA5MTc4NjksIDM4NzIsIDkxNzg2OCwgMCwgODQyOSwgMCwgCisgICAgMTE4ODA2LCAyODM4LCAxMjg4MDIsIDAsIDkxNzg2NiwgMCwgMCwgMCwgMCwgMCwgMTEwOTYsIDEyMDgxMywgMTA1NTMsIAorICAgIDE2NjIsIDg0ODMsIDEyMDM5NiwgNDM2MDUsIDU4OTIsIDQzNDE4LCAwLCA3Mzc0MiwgNjYsIDY1LCA2OCwgNjcsIDcwLCA2OSwgCisgICAgNzIsIDcxLCA3NCwgNzMsIDc2LCA3NSwgNzgsIDc3LCA4MCwgNzksIDgyLCA4MSwgODQsIDgzLCA4NiwgODUsIDg4LCA4NywgCisgICAgOTAsIDg5LCAxMTk4NjIsIDEwMzU3LCA3Mzg1LCA4MTcwLCAxNzA0LCA4NTU2LCAwLCA5NjU5LCAwLCAwLCAwLCA5NTU2LCAwLCAKKyAgICA0NTAzLCAxMTM1MywgOTY0NywgMCwgNzgxODUsIDAsIDAsIDkyNzEzLCA3ODg4NiwgMCwgMCwgNzQyMjksIDY2NTkzLCAKKyAgICA2NDM4LCA5MTc5NzksIDkxMDksIDc4ODgyLCAxMjg5LCA2NDU5OSwgMCwgMCwgMCwgNjU1MDcsIDI0NDcsIDAsIDAsIAorICAgIDEyODA0MiwgMCwgMCwgMCwgNjMzNCwgMCwgMCwgMTk5MzcsIDAsIDkyMzY4LCAwLCA1Njc1LCAyNTQsIDAsIDAsIDY5Njg2LCAKKyAgICA0MjQyNSwgODkxOCwgNjQwMDMsIDU3MTYsIDQyMzEyLCAwLCAwLCA2OTcyLCA0MjgyNiwgMCwgNDI0NjQsIDEyMDU2NywgMCwgCisgICAgOTI2NDUsIDc0Nzk2LCA2NDQwMCwgNjQ2OTMsIDAsIDc3ODYxLCA2NTQyOSwgOTUxNSwgNDQzNSwgMCwgNDI1MjIsIDAsIDAsIAorICAgIDExNzg1LCAwLCA2NDY3MSwgNDE5NzgsIDE0MTIsIDQ1OTQsIDEzOTEsIDEwNTM2LCA4MDY3LCA5OTAxLCA3Nzc1LCAKKyAgICAxMjgyOTMsIDAsIDc0NTg4LCAxMjA3NDgsIDMxNDAsIDEyODg1NCwgNzk2MCwgNDMyNzEsIDAsIDEyNTE4LCAxMDkwOSwgCisgICAgMTI3NTA4LCAxNDI4LCAxMjQ3MiwgMCwgMTI4Nzg3LCA3Njk5LCAxMjM5MywgMCwgMCwgMCwgNzQ1MTgsIDgyMjMsIDAsIAorICAgIDQyNjEsIDAsIDAsIDAsIDAsIDAsIDEyODMwMiwgMCwgMTI4MDQ2LCA0MzQxOSwgMCwgNjQ1NTQsIDEwNTc0LCAzODc4LCAwLCAKKyAgICA0MjM1MiwgMTc1MiwgNzM3ODUsIDAsIDQyNTA2LCAxMjg1NDEsIDEwMTk5LCAwLCAwLCAwLCA2NTkxOSwgMCwgNjY5NSwgCisgICAgNzIwLCAzMjQsIDAsIDAsIDQzNDA2LCAwLCAxNDY0LCA0MDk4NSwgMCwgNzk3NCwgMCwgNDM0NzQsIDAsIDY0NDg4LCAwLCAwLCAKKyAgICA2NDA0MSwgNzQ3ODcsIDAsIDc4ODY1LCA5MjI1OCwgNjU1OTcsIDAsIDc4ODYzLCAwLCAxMzAyLCAwLCA3ODg2MSwgMCwgMCwgCisgICAgMCwgNTIwNCwgNzQ3NzQsIDQzNDA0LCA0MzM5NiwgMCwgMzk5NSwgNjgzNjAsIDY1NjA4LCAzNzE0LCAwLCAwLCAwLCAKKyAgICAxMDk5OSwgMTE3NTAsIDAsIDQzMjUxLCA2ODY2MCwgNDMzMDEsIDAsIDEyMDU1NywgODEzMCwgODY3MiwgMTA4NDUsIAorICAgIDExOTY0LCAwLCAwLCAwLCAwLCA2ODQ1NSwgNDI4NjMsIDczODM5LCAwLCAwLCAwLCAwLCAwLCAwLCA0NjgsIDYxMiwgMCwgCisgICAgNjQ0MDEsIDY2NDQ4LCA2ODM3NiwgMCwgMTY3NCwgMCwgNTgyMywgMCwgMTIyODAsIDAsIDU0MCwgNzQ1NjQsIDExOTAxNywgCisgICAgMCwgODQzMiwgMCwgMTEwNzMsIDAsIDY0MzE2LCAwLCAwLCA4MjAsIDQxNzQxLCAwLCAxMjA2NjcsIDAsIDY0Njg0LCAKKyAgICAxMjY5OTIsIDMzNTksIDc4MDAsIDEyODY0NCwgNjUxNzcsIDYyMjYsIDM1MywgMTIzOTYsIDAsIDExOTYxMiwgNjQ3NDIsIAorICAgIDEyODY4MiwgMTIwMjgyLCAwLCAwLCAxMjQxMiwgMTk5NDEsIDAsIDEyMDI3NywgNzg4NDcsIDE4ODQsIDk0ODEsIDQyNDE4LCAKKyAgICAwLCA0MTE1NywgMCwgMTE5NSwgNjQ4OTgsIDc5MjQsIDAsIDQxMTUxLCAyMDEwLCAwLCA0MTMyOCwgNDIzNDQsIDAsIAorICAgIDEyNDA5LCAwLCA0MzYwLCAxMjcwMDksIDk3MzksIDAsIDc0MzkyLCA3MzkyMSwgMCwgNDI1MjEsIDg1MzksIDAsIDAsIAorICAgIDExODk4NiwgMCwgNDc4OCwgMCwgMCwgNjU3MzQsIDAsIDQzNzkwLCAwLCAxMzA3NSwgNzQ0MjksIDAsIDY0NTY5LCA0MzUzMiwgCisgICAgMTA4MzcsIDI0OTIsIDEyNzE5NywgMTE4OTAxLCA2ODYzNywgNDExMzYsIDQzNzg1LCAxMTgxMywgOTY0OSwgNDExNTQsIAorICAgIDExOTYxNywgNTEyOCwgNDAzOCwgNDExNDMsIDY1NjA0LCA2NDg1OSwgNDE1OTIsIDY3NzEsIDE2NDgsIDU0MzUsIDAsIAorICAgIDY3MzQsIDQxMzQzLCAxMTk4NDgsIDY1NDM5LCAxMjcwOSwgNjk4NiwgOTIzNjQsIDAsIDAsIDQxMzQ5LCAxMTkxMjMsIAorICAgIDEyNTgxLCAxMDM3NCwgNTE3NSwgMCwgNzM4MDYsIDEwMjU0LCAwLCAxMDI3OCwgMTAyNjIsIDc3OTUwLCA0MTM0NiwgMCwgCisgICAgNjA3LCAwLCAxMTk4NTMsIDEyODg0NiwgMTI5MjMsIDEwMzE0LCAxMDI4MiwgNjU0NzcsIDEwMzc4LCAxMjAyOTcsIDQwOTc2LCAKKyAgICA4MjY1LCAwLCAxMTk4MzQsIDQwOTc1LCA1ODQwLCA0MjgzOCwgMCwgNDA5NzgsIDAsIDExOTg0MCwgMCwgMCwgMCwgNjY0NDQsIAorICAgIDEwNTM4LCAwLCAyNTUwLCAxMTk4MzYsIDY3NzksIDAsIDAsIDM1MjUsIDY4MjQsIDExODg4NiwgMCwgMCwgNTYxOSwgCiAgICAgNjU4MjIsIDAsIDE5NDg4MiwgNzQ1NSwgMCwgNTYxNiwgMTE0ODYsIDk2NTYsIDAsIDAsIDEwNzI3LCA1NjE1LCAwLCAKLSAgICAxMjA1NTEsIDQyMzgwLCA2NDg5NSwgMCwgNjY0NTEsIDgwOCwgNTQ1NSwgMTEzNDcsIDAsIDEwMjYsIDU2MjAsIDE5NDg4NywgCi0gICAgMCwgMTEzNTAsIDU2MTcsIDAsIDkyMjUsIDY0NjM5LCAxMjcwNzMsIDkxNDUsIDAsIDEzMzgsIDEyMDU4MSwgMCwgMTI3MzksIAotICAgIDAsIDMwODQsIDAsIDAsIDQxMDI1LCA2MDM3LCAwLCAzOTc0LCAwLCAxMDI5MCwgMCwgMzA4MywgMTAzMjIsIDAsIDAsIDAsIAotICAgIDQxMDM2LCAwLCAwLCA0MzMyMSwgNjU2MDYsIDAsIDQxMDMyLCA0MjM4OCwgMCwgNjQ3MDAsIDEwMDExLCAxNDQ1LCA0MDk2MSwgCi0gICAgMCwgMTk0ODkzLCAwLCA0MDk2MCwgMCwgMCwgMCwgNDA5NjMsIDAsIDEwNDAyLCAwLCAwLCAwLCAxMDYwMywgMCwgMCwgMCwgCi0gICAgMCwgMTk0OTIzLCAxMDA4MywgMTI3MDY5LCAwLCAxOTQ5MjIsIDAsIDAsIDAsIDkwNzMsIDQyNTg1LCA2NDMwMiwgMTA3MDQsIAotICAgIDY1MDMwLCA0Nzg3LCAwLCA3NDgyOSwgMCwgNjU0MjMsIDAsIDAsIDk1NzAsIDAsIDk1MjUsIDI2ODksIDkxNzYyNiwgCi0gICAgNjU0MjYsIDAsIDkxNzYyNCwgMCwgMCwgNDA5NjYsIDkxNzYyMywgMTMyODYsIDM5OTgsIDQyNTk4LCA0MjU5NiwgNTAzLCAwLCAKLSAgICA4NzM1LCAyNjkwLCA2NjQ4OCwgNDI4MzYsIDE5NDkxMywgNDE5NTQsIDkxNzYxNywgMTY1MiwgNzcyLCAxOTQ4NzcsIDgzMTAsIAotICAgIDY1NDI4LCAzNDg3LCAwLCAzNTg1LCAxMDE5NCwgNDMzMjAsIDExOTE1OSwgMCwgMTk0ODc0LCA2NDY4LCA0MTk3NiwgOTcyMCwgCi0gICAgOTE3NjA2LCAxMTc2NywgNDE5NzAsIDAsIDU4MzYsIDEyMzU4LCAwLCA0MzU1LCA5MDQ4LCAxMjE4MCwgNjUwMjcsIDY0NjgwLCAKLSAgICA2NTAyNSwgNjQ3NTcsIDAsIDQxNDg4LCAwLCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAxMjQzNSwgMTIzNjAsIDQxMDUzLCAKLSAgICAzMjY2LCAwLCAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDAsIDExNDUwLCAwLCAzNjM4LCAxMjM1NCwgMCwgMzIxNiwgMCwgCi0gICAgMjM1OCwgMCwgODYzMywgMCwgMCwgMCwgMCwgMCwgMCwgMTE3NTksIDAsIDAsIDc0ODIzLCAwLCA0MTQyMywgODA3OCwgCi0gICAgMTA1MDQsIDAsIDAsIDAsIDAsIDcwMDIsIDAsIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgCi0gICAgNDE0NzMsIDEwNDY2LCAxMzA5OSwgMCwgMCwgMCwgNjQzNSwgMCwgMTEzNjIsIDAsIDAsIDY1MzgyLCAwLCA0MTQyMCwgMCwgCi0gICAgMzYyNSwgMCwgNDE0MDksIDAsIDAsIDIwNDEsIDkxNzgsIDk2NzIsIDQxNDI3LCA0MzU0MSwgNDMzMTcsIDAsIDAsIDAsIAotICAgIDQxNDI0LCA5MTc1OTgsIDEyMDU0NiwgMCwgMCwgMCwgNDE0MTcsIDEyNjEsIDAsIDAsIDEyMTAyLCAxMTk2NjIsIDQxNDAxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MjI5MCwgMzI3NSwgMCwgNDIzMjksIDAsIDAsIDAsIDAsIDAsIDAsIDEwOTg5LCA3NDIzNCwgMCwgCi0gICAgMTA1OTgsIDAsIDI2NjksIDkwMywgMCwgMjkyMCwgMCwgMCwgNzQ2MDMsIDY0NTA0LCAxOTkyOCwgMCwgMCwgMzkxNywgMCwgCi0gICAgMTE3MzIsIDAsIDAsIDQxNDQ4LCA0MTQ2MSwgMCwgMCwgOTE3NTU4LCAwLCA4ODE5LCAxMjY2MywgMCwgNDExODQsIDc0MDE0LCAKLSAgICAyMzIsIDc0ODM1LCAxMjA2NDYsIDkxNjgsIDY1Nzg2LCAwLCAwLCAwLCA5MDk0LCAwLCAxMTc1OCwgMCwgMCwgMTA2NCwgCi0gICAgNDI0NjcsIDAsIDEwMTE1LCAxOTkyNCwgMCwgMCwgNzg2MiwgNjQ1NTEsIDEzMjI0LCA4NTE2LCA0MTg2MiwgNjY2NTAsIAotICAgIDc1NjEsIDAsIDc0MDE4LCAxODc4LCAwLCAwLCAyOTExLCAwLCA0MTE3OCwgNTQyNywgNjQ4MjMsIDAsIDAsIDEyNjE3LCAKLSAgICA0MTE3NCwgMCwgNDE0NTgsIDAsIDQxNDYzLCA0MjQxMywgMTEyOTIsIDI0MDYsIDc3NSwgMCwgNjU1ODQsIDAsIDYwNzQsIAotICAgIDk2MTgsIDE5NDkwMywgMCwgMCwgMCwgMTk0OTAxLCA0MTQzNiwgMzY1NiwgMCwgMTk0ODk5LCA0MTQ1NiwgMCwgMTU5OSwgCi0gICAgMTEzMzMsIDAsIDg1MTQsIDg1MTMsIDAsIDE2MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDc0NTAwLCA0MTQ2MCwgMTAxNDUsIAotICAgIDEwNTQyLCAwLCAxMjAzNzksIDAsIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgMCwgMTIwMzc2LCAKLSAgICAwLCAxMTQ5NywgNjQ2ODcsIDc0MDA4LCAxMjAzNzEsIDM4NzEsIDAsIDAsIDkxMTEsIDU3NDEsIDAsIDE5NDg0NiwgCi0gICAgMTIwMzY2LCAxMTkxMTEsIDEyMDc0NSwgMCwgMTIwMzY5LCAwLCAxMTY0OCwgMCwgMCwgMTIwMzY0LCA0MTU4NywgMTIwMzY1LCAKLSAgICAwLCA3NDMyMiwgNDIxMTMsIDAsIDAsIDEyMTcyLCAwLCA3NDUzMCwgMCwgNjU3MjMsIDAsIDczODcxLCA2NTcyNCwgNzkyOCwgCi0gICAgMTIwMzU0LCAwLCA0MTU5NSwgNzM3MzAsIDAsIDQyMTE4LCA3MzgzMCwgNjYwNDIsIDEwMzU1LCAwLCA3ODc1LCAwLCAKLSAgICA0MTU5OCwgMzk5MywgMCwgMTU0NSwgNDA5NzEsIDUzNiwgMCwgMTE5OTU5LCAwLCAwLCA2NTE3MywgNjUyODYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQxMzc1LCA1NDAyLCAwLCAwLCAxNjg3LCAxMjA1MDMsIDAsIDAsIDAsIDY0MzI2LCA0MDk2OSwgMTA1MjYsIAotICAgIDAsIDgzMjMsIDQwOTY4LCAxMzM5LCAxMTczMSwgMCwgMCwgNjU0NjAsIDEyMjQyLCAwLCA4MDIwLCAxMDg0MywgMTE1NTQsIAotICAgIDAsIDAsIDgyNjYsIDQxMDA2LCA2NTcyMiwgMCwgMTA3MTAsIDAsIDExODk0MiwgMCwgMCwgMTE5MTU1LCAxOTUwOTEsIDAsIAotICAgIDExOTYzNiwgMCwgMTIwNjg3LCAwLCAwLCAxMTc1NSwgNjYzMDUsIDAsIDAsIDEwOTE3LCAxMjA3NjcsIDAsIDExMjcyLCAKLSAgICAyMDQwLCA0MTI0NywgNDEzMjYsIDAsIDE3NDEsIDQyMzcwLCAxMjI3LCAwLCAwLCAxMTQxMywgMCwgMCwgMCwgMTU4NiwgCi0gICAgNDk3OCwgMCwgMTk4NCwgMCwgMCwgMTIwNjUxLCA0MDk4NCwgMCwgOTM3MywgMCwgMTI5MTYsIDYyODQsIDAsIDQxNjYzLCAwLCAKLSAgICAwLCAwLCA5MjM3LCA5Mzg1LCA0MTY0OCwgMCwgMCwgMCwgNDE2NjYsIDE4MzAsIDczNzgzLCA0MTA3NiwgNDEyODcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQxOTg3LCA0MTY3NiwgMCwgMTIwODIzLCAwLCA0MTY3MCwgMCwgMCwgMjc5NiwgNjUxNjcsIDExNjgzLCAKLSAgICA5OTAyLCA3NDUyMSwgMCwgMTE0NTEsIDAsIDAsIDQyNjMxLCAyMzU5LCAwLCA2Nzg0NCwgNzQxNjQsIDQxMjM4LCA1NDgsIAotICAgIDExNDA1LCAxMzEzMywgNjQzNjgsIDAsIDAsIDAsIDM5NywgNjQ2NzgsIDQyMTM5LCA5NTQ3LCA5NTkwLCAwLCAxNjE0LCAwLCAKLSAgICA2NDM1NiwgNjYzMDcsIDY2NTEsIDEzNTgsIDAsIDQyOCwgOTYyMCwgMTQ2NiwgMCwgMTA5ODIsIDAsIDEzMzMsIDAsIDQwNywgCi0gICAgNjQyNSwgMCwgNzQyNTMsIDAsIDAsIDAsIDU4MDQsIDExOTc2LCA4NTU0LCAwLCAwLCAwLCA5MDU3LCA0MjI5NCwgNDEyMTgsIAotICAgIDAsIDAsIDAsIDE4ODMsIDEwOTUyLCA4MDQ4LCAwLCA0MTIyNSwgMCwgMTE4OTU1LCAwLCAwLCAwLCA0NDA3LCAwLCA2NTgwOSwgCi0gICAgMTE5MDc0LCAxOTQ4MjEsIDg0NDgsIDY4MTIyLCA3NDE4MywgMCwgMTI2NzUsIDEyNjU5LCAwLCA0MjM2MywgMTIwNjI0LCAKLSAgICAxOTQ4MjQsIDExOTA1OCwgMTA3NjYsIDEyMDEyLCAyMzg2LCA2NDczMiwgOTE3MCwgOTE3ODIxLCA5MTIzLCA2NDU4NSwgCi0gICAgMTIwNTAwLCAwLCAwLCA0MjA1MSwgMCwgNDE2NCwgOTA4MSwgMCwgMTIwNTY5LCA0MjA0OSwgNDIwNDIsIDg3MDksIDAsIDAsIAotICAgIDEyMDYzNywgNDI0MTksIDAsIDQyMDQ3LCAwLCAwLCA4NDcwLCAxMTgwNywgNjU4OTcsIDU3NywgMCwgMCwgNzQzMDAsIDAsIAotICAgIDAsIDc0ODQwLCAwLCAwLCAwLCAwLCA4NzM2LCAxNDE0LCA0MjY0MywgOTY4MywgMCwgNzQzNDQsIDAsIDI1MzYsIDAsIAotICAgIDY2MzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMxNywgMCwgNjYzMTUsIDY2MzE2LCAwLCAxMTI3MywgMCwgNDMwMDQsIAotICAgIDc1NDEsIDAsIDAsIDk2MSwgNjQzMDcsIDY2MzI0LCAwLCAwLCAzMTA2LCA2NTkxNywgNDEyODQsIDE2OTYsIDAsIDg5MSwgCi0gICAgMTIxMDUsIDAsIDQyNjI0LCAxMjgwMiwgMzI2NCwgODgyNCwgMTMyNjgsIDQzMDAzLCAxMDkzNiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMjMyMiwgMCwgMCwgMTE0NDksIDAsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMCwgMCwgNDMyMTYsIDYwODksIDAsIAotICAgIDAsIDAsIDQxNzAsIDEwMjksIDAsIDAsIDExOTIyNCwgNDIzNzQsIDAsIDc0NCwgMCwgMCwgMCwgNjU4MjMsIDAsIDAsIAotICAgIDM1NTEsIDAsIDAsIDQ2MjMsIDAsIDAsIDQ1OTgsIDAsIDY1MTM2LCAwLCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgMCwgNjE4MCwgCi0gICAgMCwgMTE5NTIsIDEyMDc3OCwgMCwgMTE5NzIsIDAsIDAsIDAsIDAsIDE3NywgMCwgNjE3NiwgMTIwNTgwLCAwLCAwLCA2MTc3LCAKLSAgICA5MDIwLCAwLCAwLCA2MTc4LCAxMjAyNDksIDEyMDI0MiwgMCwgMTIwMjQzLCA3NTE4LCA4NzU0LCAwLCAxMjAyMzcsIAotICAgIDc0NTUxLCA0MzA4MSwgMCwgMCwgOTEzNiwgMTIwMjQwLCA0NDAxLCA0MTI4MCwgMCwgODk3NCwgMjMwOCwgMCwgNzQxNDksIAotICAgIDAsIDIzMTgsIDAsIDY2MzYxLCA4MTk4LCAwLCA2NDM2MCwgMTI2MDEsIDAsIDY1MjY2LCAxMjA4MjcsIDc0MzA3LCAwLCAKLSAgICA2OTcwLCA1NDA0LCA0MzMzMiwgMzY2NywgNzkzNiwgMTI5MjUsIDEyNjk4OSwgNDIwNTUsIDAsIDAsIDExODk0OSwgMTA4NzQsIAotICAgIDY1NTA1LCAwLCAwLCA0MjA1MywgMCwgNDIwNTcsIDExMDgzLCA0MjA1MiwgMCwgMCwgNzM4NDUsIDAsIDk2NjUsIDAsIDAsIAotICAgIDEzMTgxLCAwLCAwLCAwLCAwLCA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCAKLSAgICAwLCAwLCA0MTE0OCwgODY4MywgNzU5NCwgMCwgMCwgMTE5MDkwLCAxMDg2OSwgMCwgNDExNDYsIDAsIDExNDQxLCAwLCAKLSAgICAzNTEyLCA5MTc2MTIsIDAsIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAxMTkxMDYsIAotICAgIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAzMjcxLCAKLSAgICA3MzgwNCwgNjQ3MTEsIDAsIDAsIDAsIDAsIDM4MDQsIDEzMDcwLCAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIDAsIDM1OTksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDc0MzQ2LCA2NjY5NywgMCwgMTE2ODQsIDAsIDAsIDAsIDAsIDQyMDQzLCAwLCA2NjY3NywgMCwgCi0gICAgNDIwNDYsIDEyMDc1MSwgNDAzNiwgMCwgMCwgMCwgMTk0ODYyLCAwLCAxMTk1NCwgMCwgMTQ1MCwgMTI5ODYsIDEzNDAsIDAsIAotICAgIDY1NDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NTM5LCAwLCAwLCAwLCAwLCAwLCAwLCA0MTE5MCwgMzk3MywgCi0gICAgMTk0ODUyLCA0NTc1LCA0MTE5MywgNzk4MiwgNDI5LCAwLCAwLCAwLCAxOTQ4NTQsIDY1NzkyLCAwLCAxMTg5NjgsIDY0MTcsIAotICAgIDExODkxOCwgMCwgMCwgMTk0ODUwLCAwLCAwLCA0OTE5LCAxMDU5MCwgMCwgNzc1NSwgMCwgMCwgNjQ1NDgsIDAsIDE2MjEsIAotICAgIDEwMjE0LCA2NTEyNiwgMCwgMCwgMCwgMTIxODgsIDAsIDE2MTcsIDgwNTAsIDAsIDUwMTUsIDAsIDExOTE3NCwgNDI1OTAsIAotICAgIDE5NDg3MSwgMTc1NiwgMCwgMCwgNjU3NjgsIDEyMDY5NCwgNDE4OTIsIDAsIDc1NTUsIDEzMTAzLCA1NDA4LCAyODE3LCAKLSAgICAxMjE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTU3LCA4Njg5LCA2NDcyMywgMTA1NiwgMCwgNzQxNDcsIDAsIDAsIDAsIAotICAgIDcwNzMsIDY1ODUwLCAxMjMyNywgMCwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAwLCAwLCAwLCAKLSAgICA4NDYxLCAwLCAxMjE1MywgMTI3OTksIDAsIDEyMDY1NCwgMTIwNjg0LCA5NDUxLCA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCAKLSAgICAwLCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCAwLCAxMTcwOSwgMCwgNzQ0NDYsIDAsIDAsIDAsIDExMzM4LCAxMjA3NjgsIAotICAgIDMyNzYsIDAsIDAsIDY1OTI4LCAwLCAwLCA2NTAyMSwgNjQ3OTUsIDc0NTc0LCAwLCAxMDA0NywgMCwgMzI2MiwgMCwgMCwgMCwgCi0gICAgMCwgNzQzMjksIDE2MywgNTc2LCA5ODk1LCAxNjU1LCAwLCA3NDU5MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwMzksIDAsIDAsIAotICAgIDU2MjMsIDU3MTcsIDU3NzYsIDAsIDAsIDAsIDQxNTkxLCAxMjA1ODYsIDY1MjUyLCAxMjA3OTUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDg4ODcsIDAsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIDEwNDEyLCA4NzU1LCAwLCAwLCAKLSAgICA1NzE4LCAxMzIyMSwgMCwgMCwgMCwgMCwgMCwgODgxMCwgNzQ0OTksIDY4NiwgMCwgMCwgNDYxOSwgMTE4OTU0LCA2NjU0LCAKLSAgICA3Mzc2OSwgMCwgMCwgMTIwNDAsIDY1Njg5LCAxMDEyOCwgNjUxMTgsIDAsIDExOTE1MSwgMTE4ODkxLCAwLCAwLCAyNDAxLCAKLSAgICA2ODE0NCwgODc5MiwgMCwgMCwgNjU0NTUsIDAsIDAsIDAsIDExOTEyOSwgMCwgMTI4ODYsIDAsIDY2NjI0LCAwLCA0MzU1NywgCi0gICAgMTAzMDAsIDEwMTYxLCAxMDM5NiwgNzQxMzUsIDAsIDAsIDAsIDczODUxLCAzMDEwLCA2NDQxLCAwLCAxNDU4LCA0MTQ3NSwgCi0gICAgMCwgMCwgMCwgMTE0NzksIDAsIDAsIDkxMDAsIDEyODY0LCAwLCAwLCAxMDYxLCA2NDc4MCwgMjAwMSwgNDMxMTEsIDAsIDAsIAotICAgIDQwNTIsIDAsIDc2MjYsIDAsIDAsIDEwNDUsIDAsIDU2MzEsIDAsIDAsIDAsIDAsIDc0MTI3LCAwLCAwLCA4NDg2LCAwLCAKLSAgICA3Mzc1OCwgMjMzNSwgNDM2MiwgMCwgMCwgNzM4NjcsIDEwMjUsIDAsIDQyNjI1LCAwLCAwLCA0MTQ0MywgMCwgMCwgMCwgCi0gICAgMTc3NCwgMTUyMywgMCwgMCwgNDE0NDUsIDAsIDAsIDg1NjcsIDQxNDQyLCAzOTg4LCAwLCAwLCAxMTg5MTAsIDAsIDY1Mjc0LCAKLSAgICA4NTY0LCAwLCAwLCAwLCAwLCAwLCA2NTkwOCwgMCwgNjY1MTMsIDYyNTYsIDAsIDU3OSwgMCwgMTAyMDYsIDAsIDAsIDI2NzMsIAotICAgIDAsIDExODE0LCAwLCA0NDg4LCAwLCAwLCAwLCAxMDQ0NCwgMTIwODIwLCAwLCAxMTc5OSwgNzQ0MDcsIDAsIDQ0ODcsIDAsIAotICAgIDQyODMyLCAxMDMyLCAwLCAxMjA3MzYsIDAsIDcyMDMsIDAsIDYxNCwgMCwgMCwgMTIwNjE1LCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0MzEyMSwgMCwgMCwgMCwgMTA1MCwgNzU0OSwgMCwgMCwgOTMxNCwgMCwgMCwgMTIwNjE2LCAwLCAxMDA1NywgMCwgMCwgMCwgCi0gICAgNjY1MDQsIDAsIDAsIDIzMDcsIDAsIDY0MzMzLCAwLCAwLCA3Mzg3MywgMCwgMCwgMCwgMCwgMCwgMCwgMTAzNjAsIDAsIDAsIAotICAgIDAsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCAwLCAwLCA2NjQ0NywgODA0NiwgNjQ5NjMsIDY1Nzc3LCAKLSAgICAxMDEyNSwgNzQyMTIsIDQyODE5LCAxMDkxMCwgMCwgMTUyMSwgOTg5NiwgMCwgMTA0ODcsIDAsIDEyNTI3LCAwLCA3OTcwLCAKLSAgICAwLCAwLCAwLCA2NTc2OSwgNTI0MywgOTg0OSwgNTIzOSwgNjU3NzEsIDAsIDAsIDUyMzcsIDAsIDAsIDEwMTAzLCA1MjQ3LCAKLSAgICA0NzY5LCAwLCAxMTg5NzcsIDAsIDU3NjQsIDAsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCAwLCA0MTEwMywgMCwgCi0gICAgNjQ1NjUsIDQ3NzMsIDAsIDAsIDAsIDQ3NzAsIDAsIDkxNzU2NywgODczMSwgNjUzNzgsIDAsIDEyMDYxOSwgOTEyMiwgMCwgCi0gICAgMCwgNDc3NCwgMzAxOSwgOTk5NywgMTI4MzQsIDAsIDk0NTYsIDEwMjE1LCAwLCAwLCAwLCAwLCAwLCA3NDc3NiwgNDI4MSwgCi0gICAgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyODE0LCA4ODAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEwMTE2LCA5ODc3LCAwLCAwLCAwLCA3MDk1LCAwLCAwLCAxMjA2MzIsIDAsIDAsIDgyNDMsIDI0MjcsIAotICAgIDAsIDcwOTMsIDAsIDExNTg1LCAwLCAwLCAwLCAxMjIyMywgMCwgMCwgMTQzNCwgMCwgNTYzNywgMTE1NzMsIDAsIDAsIDAsIAotICAgIDE5OTUxLCAwLCAwLCAwLCAwLCA2NDQzMiwgMCwgMCwgMTE4ODg4LCAxMTU2LCA4NzQwLCAwLCAzNzgyLCA2NDMzMSwgMCwgCi0gICAgNDEzNzAsIDEwMTQsIDgyNjEsIDAsIDAsIDEwODM1LCAwLCA2NTUzNiwgMCwgMTIwNDYzLCAwLCA3NzAyLCAxMTg4MjQsIDAsIAotICAgIDQzMDEwLCA2NTc3OSwgNjU3ODMsIDExNTAsIDEwNTQ3LCA1NzAwLCAwLCAxMjA2MDMsIDY1MzgzLCAyMzM5LCA0MjU5NCwgCi0gICAgNTY5NywgMTE4Nzg4LCAwLCAwLCAwLCA0MjI1NywgNTY5NiwgMTIwNDcwLCAxMjA0NjUsIDM4NjIsIDk2NDMsIDAsIDAsIAotICAgIDc2MzQsIDAsIDk4NDUsIDAsIDAsIDU3MDEsIDk3MjIsIDQxNDkwLCAwLCAxNDI2LCAxMjA0NzQsIDAsIDAsIDAsIDc0MzQ1LCAKLSAgICA4NTcxLCAxOTQ5OTEsIDAsIDAsIDAsIDAsIDQzMTgyLCAxMjE4NCwgMCwgNDIwMjIsIDAsIDEwMjgxLCAwLCA1NjUwLCAKLSAgICA0MzE5NCwgNjQ3MTIsIDAsIDAsIDk5MCwgNTY0NywgMCwgMCwgMCwgNDExMTQsIDExNDc3LCA1NjQ2LCAwLCAxMTAxOCwgMCwgCi0gICAgMzk0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyMCwgNzM3NjMsIDAsIDAsIDU2NDgsIDY0NzQ4LCAwLCAwLCAxMDIwNSwgCi0gICAgMzU0NSwgMCwgNjk4NCwgMCwgNzQwNTEsIDAsIDExODg2OCwgMTIwNDU4LCAyNjY3LCAwLCAwLCAwLCA5OTExLCAwLCAKLSAgICA2NTAyMCwgMTAwOTcsIDExOTE2NiwgMCwgMCwgMTE4ODM2LCAwLCAwLCAxMTQwLCAwLCAwLCAxMDE1OSwgMCwgMCwgODEyOCwgCi0gICAgMCwgMCwgMCwgMTgxNSwgMTk5MTAsIDg5MCwgMCwgMzI2NywgMCwgMCwgMTAxMjMsIDAsIDQ0MTAsIDEwNDEsIDEwNTc2LCAKLSAgICA4MTAyLCAwLCA1ODAsIDc0MjMyLCAwLCAwLCAwLCAwLCAwLCAxOTkzOCwgNjU5MDYsIDAsIDAsIDAsIDMyOTgsIDUzNzUsIAotICAgIDEwMTQyLCAwLCA4MjE1LCAwLCA2MTM0LCA0MTI0NiwgNjQ0MDIsIDAsIDAsIDAsIDAsIDAsIDQxMzgyLCAwLCAwLCA1MTczLCAKLSAgICA2NTM0OCwgNTI3LCAwLCAwLCAwLCAwLCAwLCAxMTkxNSwgMCwgMCwgMTAwNzIsIDAsIDY2NDM0LCAyMzI5LCA0MjI1MCwgMCwgCi0gICAgMCwgMCwgMTIyNDUsIDExOTIzNywgMCwgMCwgMCwgMCwgMCwgNzQzMjgsIDAsIDc0NzY5LCAwLCAwLCA5MDY5LCA2MTQ0LCAwLCAKLSAgICAwLCA3MzgyMiwgMCwgMCwgNjQ5MTcsIDQxNTIxLCAxMTg5MzQsIDQ5NCwgMTMyNTAsIDAsIDY1MDk4LCAwLCA5NTYsIDAsIAotICAgIDEyODMwLCAxMDQ2MiwgNzM3NDAsIDAsIDAsIDAsIDAsIDY2NDQ5LCAxMzI2MywgMCwgMCwgMTMxNzEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEwNDQsIDQxMjc2LCAwLCAwLCAwLCA0MjA2OCwgMTE3OTUsIDAsIDAsIDAsIDAsIDQyNDUwLCAzOTA3LCAwLCA2NDUyNiwgCi0gICAgMCwgMCwgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDAsIDAsIDAsIDAsIDEwNTcsIDU2NiwgCi0gICAgMCwgMCwgMzAxNiwgNDIyNzQsIDAsIDY2NDkwLCAxMjkyMSwgNjY1NzEsIDAsIDAsIDMwMDYsIDQ2MjAsIDAsIDAsIDAsIDAsIAotICAgIDY0NjU5LCAwLCAwLCAwLCA0MzMzMywgNjgxMjksIDg2MjYsIDAsIDAsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgMCwgMTY5OCwgCi0gICAgMCwgNjQ0NzcsIDAsIDAsIDEwNTMsIDAsIDAsIDAsIDAsIDEwNTIsIDEwNTEsIDQ1OSwgMTA2MCwgNzQzNDksIDY2NDc5LCAwLCAKLSAgICAwLCAwLCAwLCA0MjQ5MCwgNjg5LCA2NTA4LCA0MTYzLCA0MjI5OCwgODYzOSwgNjY2NDEsIDQyNDYsIDAsIDAsIDEyMTMwLCAKLSAgICAwLCA0MjMzNywgNjQ1OTYsIDY0Mzc1LCA2NjQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTkyNiwgMCwgMCwgNzg5OCwgODExMCwgMTA5MzUsIDAsIDAsIDU4MzAsIDAsIDY0NTk0LCAwLCAwLCAwLCAwLCA4NjkzLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTkxODcsIDExNDM5LCAwLCAwLCAwLCAwLCA0MjMxMywgCi0gICAgNTU3OSwgMCwgMCwgMCwgMCwgMCwgNTU3OCwgNDE3NzQsIDAsIDQyMDIzLCA2MjM0LCA1NjY5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1NTgzLCAwLCAwLCA0MjQyNiwgNTU4MCwgNDIyNzYsIDI5MjMsIDg5MiwgNTU4MiwgNDI0NjUsIDQxMzMwLCAwLCA1Nzk1LCAKLSAgICA2NTUxMiwgMCwgNjU3MDIsIDAsIDEyMDgwMSwgNjUyNTEsIDAsIDY1NzEwLCAwLCAwLCAwLCAwLCA1MzcwLCAwLCAwLCAKLSAgICAxNjM4LCAxMDk2NiwgMTAxODgsIDY1ODc4LCAxMTg4NDgsIDAsIDAsIDAsIDAsIDgxNzIsIDQyMDE3LCAwLCAxMDg0NCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMjg2LCAwLCAxMDYyLCAwLCAwLCAwLCAwLCAwLCAxMDcwLCA2NDkwMCwgMCwgNjA5NSwgNDE4NjUsIAotICAgIDAsIDMwMTUsIDAsIDkxNzc2MywgNTIxMSwgMCwgNjQwMCwgMCwgMTk0OTgzLCAwLCA4MTg5LCAxMTI3NiwgMCwgMCwgMzcyLCAKLSAgICAwLCAwLCAxMTg4NzQsIDQyMTAyLCA0MTU4NSwgMCwgMCwgNDIxMDEsIDI3NiwgMCwgMCwgMzMsIDc0MjI2LCAwLCA5MDA3LCAKLSAgICAxMTg3OTYsIDQxNTg4LCA2NjAzMywgNDI3LCAxMDc2MywgMCwgMCwgMCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDAsIAotICAgIDIzMjgsIDAsIDEwNzEsIDAsIDAsIDc0ODQ4LCAwLCAwLCAwLCAxMDQ3LCAwLCAwLCA2NDc5MCwgMCwgMCwgMTA2NTEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDExOTE4MSwgNTcxMSwgNDE2MzMsIDEyMDk4LCA2NTU3MSwgOTE2NiwgMCwgNTcxMCwgMCwgMCwgCi0gICAgNjUyMTMsIDEzMjE2LCAwLCAwLCAwLCAwLCA2NDYxMSwgNDE2MjMsIDAsIDU3MTUsIDAsIDAsIDAsIDU3MTIsIDI3NjEsIAotICAgIDQxNjIwLCA2ODEyNCwgMzA3NCwgNTcyMiwgMCwgODY0MywgNzM3NjgsIDAsIDExODkwNiwgMjc1NywgMTEwNjcsIDk3MTgsIAotICAgIDc0NDk4LCA4OTEwLCAxMDY4OSwgNjQ3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4OTExLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMjAwMTAsIDAsIDg3MDEsIDY4MTMwLCAxMTk2MTYsIDEyMDUyMiwgMCwgNDI0NzcsIDAsIDEyMTIzLCA0NDk1LCAKLSAgICA0MzU2OSwgMCwgMCwgMCwgNjQ5NDYsIDEwOTkyLCAwLCAwLCAwLCAwLCA5MzE4LCAxMjA2NjEsIDEzMjQ5LCA2NTY3OSwgCi0gICAgNzM4MDgsIDAsIDY1NDU3LCA0MjI0OSwgNzYzOSwgMCwgNjc4NDUsIDQyNjQxLCA1NDU0LCAwLCAwLCAxOTQ5OTcsIAotICAgIDEyMDAwNSwgMCwgMCwgNTA4NCwgMCwgMCwgMTE5MTczLCAwLCA3MzMsIDAsIDAsIDAsIDAsIDQxNjc3LCAwLCA5MjE4LCAKLSAgICAxNzMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcwMTgsIDAsIDUxNTUsIDAsIDUzNTgsIDAsIDAsIDkxNzc2NywgCi0gICAgNjQ0MjQsIDAsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgMCwgMCwgMCwgMCwgNjU5NDMsIDAsIDMzNzEsIDEwOTg4LCAwLCAKLSAgICA4NzcxLCAxNDc5LCAwLCAwLCAxMTA5LCAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCAKLSAgICAwLCA3NDg0MiwgMCwgMCwgMTIxNDksIDEzMDg4LCA1NTEsIDAsIDEwMTU2LCAxMjExOSwgMCwgMCwgMjU0NCwgNjUwNzQsIDAsIAotICAgIDAsIDAsIDAsIDM1MSwgMTE5MTQ5LCAwLCAwLCAwLCAwLCA3NDI2OCwgMCwgMCwgMCwgNDIzNzcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDkwMTMsIDU1ODgsIDAsIDAsIDAsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgMjU0OSwgNzQ0NjksIDAsIDAsIDU1ODQsIAotICAgIDgzNTgsIDAsIDc0NDExLCAwLCAxMDkxOSwgMCwgNzk4MCwgMCwgMCwgMCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCAKLSAgICA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAwLCAwLCAwLCA0MjU3MywgNjc4NTYsIDAsIDAsIDAsIDAsIDAsIDgxMzUsIAotICAgIDY0NTAsIDEwMDU1LCAwLCAwLCAwLCAwLCA1NjU3LCAwLCA5NjI2LCAwLCAwLCAxMDE3OSwgNTY1NCwgMTI5MzksIDAsIAotICAgIDEyMDc5OSwgMCwgMCwgNTY1MiwgMTA5NDUsIDAsIDAsIDAsIDM2NjEsIDc4NjMsIDAsIDAsIDAsIDAsIDAsIDU2NTksIDAsIAotICAgIDAsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAwLCA2NjMxMCwgNzQwMzAsIDAsIDEyMTQ2LCAKLSAgICA3Mzk1NSwgNzM5NTYsIDExNjE4LCAwLCAxMjY5OTAsIDAsIDEwMjcyLCAxMDMwNCwgMTAzNjgsIDQyNTE4LCA1OTQsIAotICAgIDEwMjQ0LCAxMDI0OCwgMTAyNTYsIDAsIDY0ODcwLCAwLCAzNDY3LCAwLCAwLCAzMzMxLCA5NDYsIDEwMjMxLCAxNDk1LCAKLSAgICA4MTMxLCA3NDMzMCwgMCwgOTU2MiwgMCwgNjU5MjcsIDAsIDAsIDEyMDE1NSwgMCwgNjQ2NTYsIDAsIDAsIDE5NDgzNywgMCwgCi0gICAgNTY2NiwgNjUyMjcsIDUzMTgsIDAsIDAsIDkwOTEsIDEwNzk4LCAwLCAwLCAxMDE4NiwgMCwgNzczMiwgMCwgNjQ1NTYsIDAsIAotICAgIDAsIDU2NjgsIDc0NDQ1LCAwLCAwLCA1NjcwLCAwLCAwLCAxMTgyMCwgMjk5MiwgNzgyNiwgNTY2NywgMTk5NTIsIDEyMDgwNywgCi0gICAgMCwgMTI3NDksIDAsIDAsIDAsIDY2NDk2LCA0MzYxLCAxMTkyNjAsIDEzMDYsIDkyODYsIDE0OTcsIDAsIDAsIDAsIDAsIAotICAgIDM1NzEsIDEzMjQ3LCAwLCA3OTczLCA2NjM1MywgMCwgMCwgNjc4OTYsIDQzMTkyLCAwLCAwLCA1NTMsIDEyMDY1MywgMCwgMCwgCi0gICAgNTgyOSwgMCwgNDU4NywgMCwgNjU5MTIsIDAsIDEyNzQ2LCAwLCAwLCAxMTk5MjQsIDU2MzMsIDExOTkyNywgMCwgMCwgMCwgCi0gICAgNjQ5MDUsIDAsIDk1MTIsIDAsIDEyNzQyLCA2NDQzLCAwLCAwLCA5MTM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE0OCwgCi0gICAgMCwgMCwgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAwLCAwLCAxMTg4ODAsIDc0MjY2LCA2NTE4MiwgCi0gICAgMCwgMCwgNTIyMSwgMCwgMzI4LCAwLCAwLCAwLCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCAKLSAgICA0MzIyMywgMCwgNTYzNSwgMzM3MywgMjk4NiwgMCwgNzQyMjMsIDM0MzcsIDAsIDYyMDMsIDQyNDcsIDAsIDExOTIwLCAKLSAgICA4Mjc0LCAwLCAwLCAxNjU3LCAxMTk5MjEsIDAsIDAsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQxNjM3LCAwLCAwLCAwLCA0MTYyNSwgMCwgMCwgMTIwNzEzLCAxMTcwNSwgNTY0MiwgMCwgMCwgMCwgNDM1NiwgMTE3MTAsIAotICAgIDAsIDEyMDUxLCAwLCAwLCA1NjQxLCA4MjU5LCAwLCAxMDU4LCAwLCA2NzYzMCwgMCwgMCwgMTE0NCwgMCwgMCwgMCwgMCwgCi0gICAgNzM4OTAsIDExODk3MiwgMCwgNzM3MzQsIDAsIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCA2NjQ4NCwgMCwgMCwgNTYwOCwgCi0gICAgNjU4OTAsIDAsIDAsIDY3NjIxLCAxMTk5MzQsIDkwMDAsIDAsIDAsIDAsIDE4NjUsIDAsIDU2MTMsIDc0MjY3LCAwLCAwLCAKLSAgICA1NjEwLCAwLCAwLCA2NTgyNiwgNTYxMiwgMCwgMTA3ODcsIDkxNzU1MSwgMjk5NywgMCwgNTYwOSwgMCwgNjUzMTksIAotICAgIDExOTkzMywgMTIzMTYsIDY1Mzc2LCAyNDEyLCAwLCA4MTg2LCA5ODA3LCA3NDI2OSwgMCwgMTMxMzAsIDY1ODc0LCAwLCAKLSAgICA1ODA3LCAwLCAxMDAzMCwgNTMwNiwgMTI5MzYsIDAsIDAsIDExNzA0LCAwLCAwLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIAotICAgIDk3MTAsIDAsIDAsIDAsIDQxMywgNjU2MjMsIDc0MjM3LCAwLCA5MTMzLCA3NDI2MiwgMCwgMTA0MiwgMCwgNjQ3NzksIAotICAgIDEyMTcxLCAxMTkyNDAsIDYxODUsIDY0Nzc2LCA0OTg0LCAwLCA3MDgsIDAsIDAsIDEyMjQxLCAwLCAwLCAxMzA4LCAwLCAKLSAgICAyNTM0LCA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgMjM2NCwgMCwgNzQ0NzAsIAotICAgIDY2NjE4LCA2NTY4MCwgMCwgMTAwMjcsIDAsIDAsIDEyMzM3LCAxMjA3MjIsIDAsIDAsIDI5ODAsIDc1NSwgMCwgOTMxLCAKLSAgICAxMzEyNCwgNjgxODIsIDAsIDI3NDgsIDAsIDAsIDY1MDQxLCAwLCA3Mzk5OCwgODczMCwgMCwgMCwgMTE5MDA5LCA3Mjc0LCAKLSAgICAxMTkyNTAsIDAsIDcyNzUsIDAsIDkzNSwgMCwgNjU4NDAsIDM3NywgNDIzMjUsIDExNjQ5LCAwLCA2NTI1MywgNjQzMDEsIDAsIAotICAgIDAsIDQyMzQxLCA2NTI4NCwgMjQxNywgMCwgMTI4ODQsIDE5OTEyLCA3OTA3LCAxMDc2OCwgMCwgMTk0OTk4LCAwLCAxMDY3MywgCi0gICAgMTE5MjE3LCA3MjQ4LCAwLCAwLCAxNzgxLCA1NDk2LCAzNjI3LCA2MiwgMTY0OSwgMCwgOTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzE0MiwgMCwgNDI0MTUsIDY2NTc1LCA0NTQyLCA3NDAzNywgNDM1NDcsIDAsIDAsIDAsIDI5OTEsIAotICAgIDQ5NDYsIDQyNDU0LCAwLCA3OTQ5LCAwLCAwLCAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgMCwgMCwgCi0gICAgMCwgNjQ3OCwgOTg5OCwgMCwgNjUyMzcsIDYyNDEsIDAsIDQ4NzcsIDAsIDYyMzgsIDAsIDEwNTQ4LCAxMjcwNDksIDQ0MDksIAotICAgIDAsIDAsIDY0Nzk4LCAwLCA1MzQ2LCAwLCAxMjA1MjgsIDYyMzcsIDU0NjEsIDAsIDkxNzYsIDAsIDAsIDY1MjMxLCA2NTg4NCwgCi0gICAgMTI2NzgsIDAsIDAsIDExMzc4LCAwLCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgMCwgNTY4NSwgMCwgMjQ2MSwgMTEwNTIsIAotICAgIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAwLCAwLCA3MzkyOCwgMCwgMCwgMCwgMCwgMCwgNjU0ODIsIAotICAgIDAsIDkxNDIsIDAsIDAsIDAsIDEwOTM4LCAwLCAxMTg3OTAsIDExODIsIDI1NDIsIDQ4MjYsIDAsIDAsIDAsIDUyOSwgODU4MCwgCi0gICAgMCwgMCwgMTA1ODYsIDEwNzkwLCAxMTk4NywgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIAotICAgIDAsIDAsIDAsIDY0NzA1LCA3NDM3OSwgMTA3MjEsIDAsIDM0MzgsIDQyMDk3LCAwLCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgCi0gICAgMCwgMCwgNDE4NzMsIDEyMDU3NSwgMTEzMjQsIDAsIDAsIDg0MjAsIDY0OTE4LCAwLCA0MTg3MSwgNDEzMzgsIDM3MzQsIAotICAgIDc3MzQsIDAsIDg3NTAsIDY2NjA1LCA2NjAxMSwgMCwgNDA5NjUsIDAsIDAsIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgCi0gICAgNzI4NywgNDIxNjIsIDAsIDAsIDAsIDExOTQ4LCAwLCAxMjM1OSwgNjY2NzQsIDQxMzY5LCAxNjk3LCAxMjE5MSwgMCwgMCwgCi0gICAgNzI4NiwgMCwgMCwgMTAwMzEsIDAsIDk4NzAsIDAsIDg2MjAsIDY1ODI0LCAwLCAxMTkzOCwgMCwgNzI4NSwgMCwgMTE5NTc3LCAKLSAgICAwLCAwLCAwLCA0MTU4MywgMCwgNjU3OTksIDAsIDAsIDAsIDAsIDAsIDY2MTk5LCAwLCAzNjA5LCAwLCAwLCA4MzIsIAotICAgIDEyMDY5MywgMTIwNzcwLCAwLCA2NjAwNywgMCwgNjU3MDMsIDAsIDAsIDAsIDUxODAsIDAsIDQxMzk1LCA0MTUzMCwgCi0gICAgMTE2OTEsIDY0NzczLCAwLCA3NDAwMiwgMCwgMCwgMCwgMTEwMzYsIDI0MywgMTMyMDAsIDAsIDYwMjQsIDAsIDc0Mzk4LCAKLSAgICAxMDAzNywgNDE1MjksIDEwNjQ4LCA4NTM4LCAwLCAwLCAwLCA0Mjg1LCA2NjE5NSwgMCwgNDIzMCwgMCwgMTMzMDcsIDAsIDAsIAotICAgIDc1NjMsIDQyMzc2LCAwLCAwLCAxMjA1MTIsIDAsIDAsIDIxNCwgMCwgMCwgMCwgNjU4OTMsIDEyMjA4LCAxMjA0ODgsIDAsIAotICAgIDY2MzExLCA2NTU4OSwgMCwgMjYwMywgMCwgMCwgMCwgMCwgMCwgNjAyMiwgMCwgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAwLCAKLSAgICA2NjQ1MywgMTAxNiwgNDExMDcsIDAsIDQxMTIxLCAzODg1LCA5MiwgNjU0NTYsIDY0NjA4LCAwLCA3NDgwMSwgMCwgMTI0NTEsIAotICAgIDAsIDAsIDAsIDEyNDUzLCAwLCAwLCA3NDI0MSwgMCwgODg5MCwgMTI0NTcsIDAsIDAsIDAsIDAsIDExODgxOSwgMCwgMCwgMCwgCi0gICAgNjY2MzcsIDc5OTUsIDg3NTksIDAsIDAsIDEyNDQ5LCAwLCAwLCAwLCA4NzUyLCAzMTk3LCA0NzIwLCAxMDE2NSwgMCwgCi0gICAgMTE5MjQ5LCAwLCAxMTU5NSwgNjQ4OTMsIDAsIDEyMDE4MCwgMCwgMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIDE5NDYsIAotICAgIDc0MSwgMCwgNTQ5NCwgNDYzOSwgMCwgMTk5MCwgNjY1ODksIDQ0OTgsIDAsIDAsIDAsIDAsIDAsIDI5NjAsIDczNzc5LCAwLCAKLSAgICA4OTY5LCAwLCAwLCAwLCAwLCAyOTUwLCAwLCA2MjEwLCAwLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDY1Njg4LCAwLCA1MDYzLCAzNTE3LCAyOTY0LCAwLCAwLCA2NTA5NCwgNzQ3OTEsIDEwNTY2LCAxMDE0NCwgNjYzMzMsIAotICAgIDgyNTIsIDcyOSwgNjYwMTYsIDAsIDAsIDAsIDY0OTIzLCAwLCA2NTIwOCwgOTAzMiwgMCwgMCwgMCwgNDEyMTUsIDAsIAotICAgIDY1ODgzLCAwLCAwLCAxMjA2MDIsIDM3NjEsIDAsIDAsIDAsIDAsIDEyOTEyLCAxMTkwMTIsIDM4NTAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDkwOCwgMCwgODYxMSwgMCwgMCwgMCwgMCwgMCwgMCwgODk3OCwgMTIwNTQwLCAxMTkxMzUsIDQxNTg2LCAxMDUyNywgMCwgCi0gICAgOTE3ODQ4LCAzODQ4LCAwLCAwLCAwLCA2NTI0MSwgNTMzNiwgMCwgMCwgNjYzLCAwLCAxMDc4MCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzQ3LCAwLCAwLCAwLCA2NDY3NSwgNDE1ODIsIDExOTEyNiwgMCwgNjU1NzksIDEyOTgwLCAwLCAxMjE0MywgNzM3MzMsIAotICAgIDAsIDAsIDAsIDQxODA0LCAwLCAwLCAwLCAwLCAwLCA0MTU4NCwgMTA2ODEsIDAsIDAsIDczOTM4LCAwLCAwLCA0ODAwLCAKLSAgICA2NjY2MSwgMCwgNjYzMDYsIDY0NzE1LCAwLCA5NTE4LCA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgCi0gICAgNDE3MzAsIDAsIDAsIDAsIDAsIDY1MTcyLCA0MTcyOCwgNDE3MjEsIDAsIDAsIDAsIDQxMjAzLCAwLCAxMzExMCwgNDE3MjYsIAotICAgIDAsIDAsIDEwMDAsIDAsIDAsIDQxMTQwLCAxMjA5LCAwLCAwLCAwLCAxMDczLCAwLCAwLCA0MTEzOCwgMCwgMCwgMCwgCi0gICAgMTIxNjcsIDExMTUsIDQxNjA1LCA5Nzk0LCAxMjcwNjIsIDEyNzA2MywgMTI3MDY0LCAxMjIzNywgMTI3MDY2LCA2NjMxNCwgCi0gICAgNjU4NywgOTI5MCwgMCwgMCwgOTIzMSwgMCwgMjk1OSwgNzkyNiwgMCwgMCwgMCwgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIAotICAgIDAsIDAsIDExODg0NiwgMCwgMCwgMCwgMTE5OTczLCAwLCAwLCAwLCAxMjI5MCwgMCwgMCwgMCwgNDIxNDIsIDEwMTUxLCAKLSAgICA4MjA1LCAwLCA1MTMxLCAwLCA5NjI3LCAwLCAwLCAwLCAwLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMCwgMTE5OTkwLCAxMTk5OTEsIAotICAgIDEyNzAxLCAxMTk5OTMsIDExMzA4LCAxMTk5OTUsIDAsIDExOTk5NywgMTE5OTk4LCA2NTMwNSwgNzQyNjMsIDQwMzEsIAotICAgIDQyNzk0LCAxMjAwMDMsIDcwNzUsIDgxNTQsIDEyMDAwNiwgMTIwMDA3LCA0MTgxNywgNzM5MzQsIDQyMjc1LCAxMjAwMTEsIAotICAgIDEyMDAxMiwgMTIwMDEzLCAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIDAsIDAsIAotICAgIDY0MzMyLCAwLCA3ODEzLCA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCAwLCA3Mjc5LCAxMjA0MSwgCi0gICAgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCAwLCAxMzAxMiwgNDU3MSwgMCwgMCwgMCwgMTIwNzgsIDI5NzAsIDAsIAotICAgIDEwOTMzLCAwLCAwLCAwLCAwLCAwLCA0MTU5OSwgMCwgMCwgMCwgMTI5NTAsIDAsIDM0ODYsIDAsIDAsIDQyMzksIDAsIDAsIAotICAgIDY2NTExLCAwLCAyNjM3LCA2NDYyOSwgODQ2MCwgMTI3MDUzLCA4NDc2LCAwLCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgMCwgCi0gICAgNDE0OCwgMCwgMTIyODksIDAsIDQzMTYsIDAsIDEzMTE5LCAwLCA1NDEyLCA2NjI0MywgMTA3NDQsIDAsIDczODY0LCAwLCAKLSAgICA0MTczNCwgODIwNiwgNzQwODEsIDkxNjMsIDMyODYsIDkwNzIsIDU4NjcsIDEzMzAyLCA3NjIyLCAwLCA0MTczNiwgMCwgCi0gICAgNDE3MzEsIDAsIDk0ODMsIDU0MTYsIDAsIDExOTU5MywgMTA4MTcsIDAsIDQxNTM5LCAwLCAwLCA3Mzk2MywgNDE4NTUsIAotICAgIDQxODY3LCA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDAsIDEyMjEwLCAwLCA3MzkzMiwgNTQ5OCwgCi0gICAgNzM5NDIsIDQxNTM2LCAwLCAwLCAwLCAzNDU5LCA4OTk3LCAwLCAwLCAwLCAwLCAwLCAwLCA2NjM3NywgMCwgMCwgMCwgMCwgCi0gICAgMzE2MSwgMjk1LCAwLCAwLCAwLCAwLCAwLCA5MDE2LCAwLCA2MzkwMywgNjM5MDIsIDYzOTAxLCAwLCAzOTcxLCAwLCAKLSAgICA3Mzk3MiwgMjk1MiwgMCwgMTEwMzgsIDEwOTAxLCA2MzkwMCwgNjM4OTksIDYzODk4LCAwLCA2NjcsIDEyMzMyLCA2Mzg4NywgCi0gICAgNjA4NiwgNDE3MjIsIDAsIDUxNzIsIDAsIDAsIDQxNTksIDAsIDAsIDk4MTUsIDYzODg0LCAxOTkzNCwgNjM4ODIsIDQxMTk4LCAKLSAgICA4NTU1LCA2Mzg3OCwgNjM4NzcsIDQyNDYwLCA2MDUwLCAwLCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCA0MTcyMywgCi0gICAgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAwLCAwLCA0MjM0OCwgMCwgNzQ4NDEsIAotICAgIDQ0NiwgNDE5MTEsIDAsIDYzODUxLCA2Mzg1MCwgNDE5MTAsIDAsIDYzODQ2LCAyOTcyLCAxMjkzMiwgNzI2MiwgMCwgCi0gICAgNjM4NDksIDYzODQ4LCA2Mzg0NywgMCwgMCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIDEwNzQ2LCA3MjUwLCAxMzIxNCwgCi0gICAgMTAwNDEsIDgxMDUsIDYzODkyLCAwLCAxMTg5ODMsIDExMDUsIDQxODAsIDAsIDEyMDk0LCA5NDk3LCAwLCA2Mzg5MSwgCi0gICAgNjM4OTAsIDYzODg5LCA2Mzg4OCwgNTUzOCwgOTk4NywgMCwgMTE4OTMyLCAxNjc4LCAxMzI3NCwgNTUyLCAwLCAwLCAKLSAgICAxMDc4NSwgMCwgMTE5MTcwLCA0NTU3LCAwLCA5MTU5LCAxMDE3MSwgMTMxMjUsIDYzODYwLCA1NTQwLCA2Mzg1OCwgNjM4NjUsIAotICAgIDI4MSwgMTMyNDIsIDYzODYyLCA3NDE1NCwgMCwgNTUzNiwgNjU1NjgsIDYzODU3LCAxMzg4LCA3NDE2OSwgMCwgMTA3NywgMCwgCi0gICAgNjUwOTksIDExNTMxLCAwLCAwLCAwLCAwLCAwLCA0Mjc3MywgMCwgMCwgMCwgMTE5MjIwLCAwLCAzNjYzLCAwLCAxMTEyLCAKLSAgICAxMTkxMjIsIDg2ODYsIDAsIDUzMzQsIDY1MDgxLCAwLCA3NDc3OCwgMCwgMTEwNzcsIDAsIDY1MDksIDAsIDUzMjcsIDAsIAotICAgIDE5OTA3LCA2Mzg2OSwgMzQ3OCwgNzU4MywgNzY3OSwgMjkwMywgMCwgMzAwMSwgMTE1OCwgODc0NSwgMCwgNzM3NDgsIAotICAgIDYzODY2LCAwLCAxOTE1LCA0ODQ2LCAwLCA2NjM3MSwgMTE4OTg0LCA0MjEwNSwgMjk5MCwgMTIwMTI4LCA4MDUsIDEyMDEzMCwgCi0gICAgMTIwMTI1LCAxMjA3MCwgODc2MCwgMTExNywgMTE4OTg3LCAxMjIxMiwgMTIwMTIzLCA2NTE3NCwgNDIzNTcsIDYzODM1LCAKLSAgICA2MzgzNCwgMCwgMCwgMTIyMjUsIDYzODM4LCA2MzgzNywgMCwgMCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCAKLSAgICA2MzgyMSwgNjM4MjAsIDYzODE5LCA2MzgxOCwgMCwgNTIyNywgOTA0NywgNjM4MjIsIDAsIDYwOTEsIDAsIDEwNjkxLCA1NjAsIAotICAgIDU2NDMsIDgyMjYsIDExOTU3OCwgNjM4MTIsIDYzODExLCA2MzgxMCwgNjM4MDksIDU1NDIsIDYzODE1LCA2MzgxNCwgCi0gICAgNjM4MTMsIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAyMDYsIDAsIDQ5MzYsIDY1MTQ3LCA4MTY4LCA2MzkzMCwgMCwgCi0gICAgMTA5MywgOTg4MiwgNjM5MzQsIDYzOTMzLCA2MzkzMiwgOTE3NTU0LCA2MzkyOSwgMzU0NiwgMTYwNSwgMCwgOTgwNiwgCi0gICAgNjU1NjYsIDAsIDg0MDAsIDExMzQzLCA2MzkyMCwgMCwgNjM5MjYsIDI5ODQsIDU5NjgsIDkyODcsIDAsIDQ2MTgsIDAsIDAsIAotICAgIDEzMTY5LCA1MjkwLCA1MjgzLCAxNjk1LCAxMDc0MywgMTA4OCwgNjM4MjUsIDcyNjgsIDEwODQsIDEwODUsIDYzODI5LCAKLSAgICAxMDgzLCAxMDEzMSwgNzI4MywgMCwgNjM5NzAsIDAsIDEwOTIsIDQ3NTQsIDcyNzMsIDUyNTIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExODA5LCAwLCAwLCAwLCAyOTY1LCA3MjU4LCA4ODA4LCAwLCAxMDg5LCA0MTg3LCA2MzkzNywgNDIxMTksIDQyMTIwLCAwLCAKLSAgICA5NDAsIDU3ODcsIDEwMDk5LCA2MzkzOCwgMCwgNzQ0OTQsIDEyNDYzLCAyOTk0LCAwLCAwLCAwLCA5NjY0LCAwLCAwLCAwLCAKLSAgICAwLCA3NDM0MywgMCwgMCwgNjYwLCAxMDEyNywgNjY2LCA5MDIyLCA1NTMyLCAwLCA1NTMzLCAwLCAwLCA2MTE4LCAyMjIsIAotICAgIDk3OSwgMzg4NCwgMCwgNzQxNTEsIDEyMDQ0NSwgNjUwMiwgMCwgMTI3MTE4LCAwLCA2Mzk1MSwgMTI0NjUsIDAsIDAsIDAsIAorICAgIDEyMDU1MSwgNDIzODAsIDY0ODk1LCA0MzY5MywgNjY0NTEsIDgwOCwgNTQ1NSwgMTEzNDcsIDAsIDEwMjYsIDU2MjAsIAorICAgIDE5NDg4NywgMCwgMTEzNTAsIDU2MTcsIDAsIDkyMjUsIDY0NjM5LCAxMjcwNzMsIDkxNDUsIDEyODA2MCwgMTMzOCwgCisgICAgMTIwNTgxLCAwLCAxMjczOSwgNDYwMywgMzA4NCwgMCwgOTI0ODQsIDk4NTgsIDYwMzcsIDAsIDM5NzQsIDc4MjEzLCAKKyAgICAxMDI5MCwgMCwgMzA4MywgMTAzMjIsIDAsIDAsIDAsIDQxMDM2LCAwLCAwLCA0MzMyMSwgNjU2MDYsIDAsIDQxMDMyLCAKKyAgICA0MjM4OCwgMCwgNjQ3MDAsIDEwMDExLCAxNDQ1LCA0MDk2MSwgMCwgMTk0ODkzLCAwLCA0MDk2MCwgMCwgMTk0ODkxLCAwLCAKKyAgICA0MDk2MywgNjQ5NTIsIDEwNDAyLCAwLCAwLCA5MjMwNCwgMTA2MDMsIDAsIDAsIDAsIDAsIDY3MTQsIDEwMDgzLCAxMjcwNjksIAorICAgIDE5NDg5NSwgNzgzNjcsIDEyNzM3NywgMCwgMCwgOTA3MywgNDI1ODUsIDY0MzAyLCAxMDcwNCwgNjUwMzAsIDQ3ODcsIDAsIAorICAgIDc0ODI5LCAwLCA2NTQyMywgMCwgMTI4MTE4LCA5NTcwLCAwLCA5NTI1LCAyNjg5LCA5MTc2MjYsIDY1NDI2LCAwLCAKKyAgICA5MTc2MjQsIDQzNzQwLCAwLCA0MDk2NiwgOTE3NjIzLCAxMzI4NiwgMzk5OCwgNDI1OTgsIDQyNTk2LCA1MDMsIDc0MjM3LCAKKyAgICA4NzM1LCAyNjkwLCA2NjQ4OCwgNDI4MzYsIDEyNzE1MCwgNDE5NTQsIDkxNzYxNywgMTY1MiwgNzcyLCA2Njg4LCA4MzEwLCAKKyAgICA2NTQyOCwgMzQ4NywgNDM0MTYsIDM1ODUsIDEwMTk0LCA0MzMyMCwgMTE5MTU5LCAxMjgxODMsIDE5NDg3NCwgNjQ2OCwgCisgICAgNDE5NzYsIDk3MjAsIDkxNzYwNiwgMTE3NjcsIDQxOTcwLCAwLCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgMTIxODAsIAorICAgIDY1MDI3LCA2NDY4MCwgMTMwMzgsIDQzNjk5LCAwLCA0MTQ4OCwgMTI4MDg3LCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAxMjQzNSwgCisgICAgMTIzNjAsIDQxMDUzLCAzMjY2LCAwLCAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDkyNTg4LCAxMTQ1MCwgMCwgMzYzOCwgCisgICAgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCAwLCAxMTkxODIsIDY5MjQ0LCAwLCAwLCAxMTc1OSwgCisgICAgMTk0OTAzLCA2MzY4LCA3NDgyMywgMCwgNDE0MjMsIDgwNzgsIDEwNTA0LCAwLCA0MTY5OCwgNDIyMzcsIDAsIDcwMDIsIDAsIAorICAgIDQxNDMwLCA0MjI2NywgNDEwNTEsIDQxNDg0LCAwLCAwLCA0MTA1MCwgNDE0NzMsIDEwNDY2LCAxMzA5OSwgMCwgMCwgMCwgCisgICAgNjQzNSwgMCwgMTEzNjIsIDAsIDAsIDY1MzgyLCAwLCA0MTQyMCwgMCwgMzYyNSwgNzgxNTcsIDQxNDA5LCAwLCA2OTYzOSwgCisgICAgMjA0MSwgOTE3OCwgOTY3MiwgNDE0MjcsIDQzNTQxLCA0MzMxNywgMCwgMCwgMCwgNDE0MjQsIDkxNzU5OCwgMTIwNTQ2LCAwLCAKKyAgICAxMjgyMTIsIDAsIDQxNDE3LCAxMjYxLCAwLCAwLCAxMjEwMiwgMTE5NjYyLCA0MTQwMSwgMCwgMTI3NTM4LCAwLCA3ODI1MSwgCisgICAgMCwgNDIyOTAsIDMyNzUsIDkyNDcyLCA0MjMyOSwgNzQ3NTksIDAsIDAsIDAsIDkyMzg4LCA2OTY0OSwgMTA5ODksIDc0MjM0LCAKKyAgICAwLCAxMDU5OCwgNzQxMCwgMjY2OSwgOTAzLCAwLCAyOTIwLCAwLCAxMjcyMzIsIDc0NjAzLCA2NDUwNCwgMTk5MjgsIDAsIDAsIAorICAgIDM5MTcsIDAsIDExNzMyLCAwLCAwLCA0MTQ0OCwgNDE0NjEsIDEyODgyMywgMCwgMTI3OTEyLCAwLCA4ODE5LCAxMjY2MywgMCwgCisgICAgNDExODQsIDc0MDE0LCAyMzIsIDc0ODM1LCAxMjA2NDYsIDkxNjgsIDY1Nzg2LCAwLCAwLCAwLCA5MDk0LCAwLCAxMTc1OCwgCisgICAgNjg0MjUsIDAsIDEwNjQsIDQyNDY3LCAxMjgwNDQsIDEwMTE1LCAxOTkyNCwgOTI3MTEsIDAsIDc4NjIsIDY0NTUxLCAKKyAgICAxMzIyNCwgODUxNiwgNDE4NjIsIDY2NjUwLCA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDAsIDI5MTEsIDAsIAorICAgIDQxMTc4LCA1NDI3LCA2NDgyMywgMCwgMCwgMzc4NywgNDExNzQsIDAsIDQxNDU4LCAwLCA0MTQ2MywgNDI0MTMsIDExMjkyLCAKKyAgICAyNDA2LCA3NzUsIDAsIDY1NTg0LCAwLCA2MDc0LCA5NjE4LCAxMjg2NjgsIDAsIDQzNDQwLCAwLCAxOTQ5MDEsIDQxNDM2LCAKKyAgICAzNjU2LCAwLCAxOTQ4OTksIDQxNDU2LCAwLCAxNTk5LCAxMTMzMywgMCwgNjcwMywgODUxMywgMCwgMTYxMywgMCwgNjg0NTYsIAorICAgIDEyNTk4LCAwLCAxMjA3MzQsIDc4NzQ1LCA3NDUwMCwgNDE0NjAsIDEwMTQ1LCAxMDU0MiwgOTkzNywgNzg3NDYsIDAsIAorICAgIDk5MDUsIDAsIDY1NzMwLCAwLCAxMjAzNzQsIDg0MjcsIDEyMDM3NSwgNTUyNDYsIDEyMDM3NiwgMCwgMTE0OTcsIDY0Njg3LCAKKyAgICA3NDAwOCwgNDI1OTIsIDM4NzEsIDAsIDEyODMwNSwgOTExMSwgNTc0MSwgMCwgMTk0ODQ2LCAxMjAzNjYsIDExOTExMSwgCisgICAgMTIwNzQ1LCAwLCAxMjAzNjgsIDAsIDExNjQ4LCAwLCAxOTQ4NzMsIDEyMDM2NCwgNDE1ODcsIDEyMDM2NSwgMCwgNzQzMjIsIAorICAgIDQyMTEzLCAwLCAxMjcxNTUsIDEyMTcyLCAwLCA3NDUzMCwgNjUyOTgsIDY1NzIzLCAxOTQ4NDAsIDczODcxLCA2NTcyNCwgCisgICAgNzkyOCwgMTIwMzU0LCAwLCA0MTU5NSwgNzM3MzAsIDAsIDQyMTE4LCA3MzgzMCwgNjYwNDIsIDEwMzU1LCAwLCA3ODc1LCAwLCAKKyAgICA0MTU5OCwgMzk5MywgMCwgMTU0NSwgNDA5NzEsIDUzNiwgMTI4NTIxLCA0MzAyOSwgMCwgMCwgNjUxNzMsIDY1Mjg2LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0MTM3NSwgNTQwMiwgMCwgMCwgMTY4NywgMTIwNTAzLCAwLCAwLCA3ODE5NCwgNjQzMjYsIAorICAgIDQwOTY5LCAxMDUyNiwgNzg3NTMsIDgzMjMsIDQwOTY4LCAxMzM5LCAxMTczMSwgNzg3NTYsIDAsIDY1NDYwLCAxMjI0MiwgCisgICAgMTI4NTEzLCA4MDIwLCAxMDg0MywgMTE1NTQsIDAsIDAsIDgyNjYsIDQxMDA2LCA2NTcyMiwgMCwgMTA3MTAsIDAsIAorICAgIDExODk0MiwgNjc2NjcsIDY0NTY3LCAxMTkxNTUsIDE5NTA5MSwgMCwgMTE5NjM2LCA2Nzg1NywgMTIwNjg3LCAwLCAwLCAKKyAgICAxMTc1NSwgNjYzMDUsIDAsIDAsIDEwOTE3LCAxMjA3NjcsIDAsIDExMjcyLCAyMDQwLCA0MTI0NywgNDEzMjYsIDE5NTA2MCwgCisgICAgMTc0MSwgNDIzNzAsIDEyMjcsIDAsIDAsIDExNDEzLCAwLCAwLCA1MjgzLCAxNTg2LCA0OTc4LCAwLCAxOTg0LCAxOTQ2MjEsIAorICAgIDAsIDkyMjkzLCA0MDk4NCwgMTI4MzA2LCA5MzczLCAwLCAxMjkxNiwgNjI4NCwgMCwgNDE2NjMsIDAsIDAsIDAsIDkyMzcsIAorICAgIDkzODUsIDQxNjQ4LCAwLCAwLCAwLCA0MTY2NiwgMTgzMCwgNzM3ODMsIDIwNTYsIDQxMjg3LCA5MjYxMCwgMCwgMCwgCisgICAgNDIyMTksIDEyODI1NywgMCwgNDE5ODcsIDQxNjc2LCAwLCAxMjA4MjMsIDAsIDQxNjcwLCAwLCA5MjU5MCwgMjc5NiwgCisgICAgNTUyOTEsIDExNjgzLCA5OTAyLCA3NDUyMSwgMCwgMTE0NTEsIDAsIDEyODgyMiwgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCAKKyAgICA3NDE2NCwgNDEyMzgsIDU0OCwgMTE0MDUsIDEzMTMzLCA2NDM2OCwgMCwgMTI4Nzk1LCAwLCAzOTcsIDQzNjIyLCA0MjEzOSwgCisgICAgOTU0NywgOTU5MCwgMTI4MjM4LCAxNjE0LCA0MzY2MSwgNjQzNTYsIDY2MzA3LCA2NjUxLCAxMzU4LCAwLCA0MjgsIDk2MjAsIAorICAgIDE0NjYsIDc4MTEyLCAxMDk4MiwgMTE4ODMxLCAxMzMzLCA3MTA0LCA0MDcsIDY0MjUsIDEyODgzNCwgNzQyNTMsIDAsIDAsIAorICAgIDAsIDU4MDQsIDExOTc2LCA4NTU0LCA5MjcyMSwgMCwgMCwgOTA1NywgNDIyOTQsIDQxMjE4LCAwLCAwLCA3ODEzNywgMTg4MywgCisgICAgMTA5NTIsIDgwNDgsIDc4MTQyLCA0MTIyNSwgOTI2MjEsIDQyOTE1LCAwLCAxMjg2ODQsIDAsIDQ0MDcsIDAsIDY1ODA5LCAKKyAgICAxMTkwNzQsIDE5NDgyMSwgODQ0OCwgNzE0MSwgNzQxODMsIDAsIDEyNjc1LCAxMjY1OSwgMCwgNDIzNjMsIDEyMDYyNCwgCisgICAgMTk0ODI0LCA1NTI3MywgMTA3NjYsIDEyMDEyLCAyMzg2LCA2NDczMiwgOTE3MCwgOTE3ODIxLCA5MTIzLCA2NDU4NSwgCisgICAgMTIwNTAwLCAwLCA3MTQwLCAxMDk3NywgMTI3Mzc4LCA0MTY0LCA5MDgxLCAwLCAxMjA1NjksIDQyMDQ5LCA0MjA0MiwgCisgICAgODcwOSwgMTI4MjgzLCAwLCAxMjA2MzcsIDQyNDE5LCA2NDc5OSwgNDIwNDcsIDAsIDAsIDg0NzAsIDExODA3LCA2NTg5NywgCisgICAgNTc3LCAwLCAwLCA3NDMwMCwgMCwgMTI3MzA4LCA3NDg0MCwgMCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgCisgICAgNDI2NDMsIDk2ODMsIDQzNDg2LCA3NDM0NCwgMCwgMjUzNiwgMCwgNjYzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY2MzE3LCAKKyAgICA5MTc2MTIsIDY2MzE1LCAyMTA2LCAxMjAyMjIsIDExMjczLCAwLCA0MzAwNCwgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgCisgICAgNjYzMjQsIDY0OTA2LCAxMjg1OTEsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgMCwgODkxLCAxMjEwNSwgMCwgNDI2MjQsIAorICAgIDEyODAyLCAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAxOTQ4MjYsIDkyNjg4LCAwLCAyMzIyLCAKKyAgICAxMjAzNzEsIDAsIDExNDQ5LCAxMjgxODcsIDQyODY4LCA0MTI4NSwgMzU0NywgMCwgMCwgMCwgMCwgNDMyMTYsIDYwODksIAorICAgIDc4NjgyLCAwLCAxMjA1NzgsIDQxNzAsIDEwMjksIDEyNzc2MSwgMTI3MDM2LCAxMTkyMjQsIDQyMzc0LCAwLCA3NDQsIDAsIAorICAgIDAsIDAsIDY1ODIzLCAxMjc4MjYsIDAsIDM1NTEsIDAsIDAsIDQ2MjMsIDU1MjY4LCAwLCA0NTk4LCAwLCA2NTEzNiwgCisgICAgMTI3MTM2LCAwLCAwLCAxMDg1MSwgMCwgNjE3OSwgOTI2MDIsIDYxODAsIDAsIDExOTUyLCAxMjA3NzgsIDc4NjQ4LCAKKyAgICAxMTk3MiwgNzg2NDYsIDc4NjQ3LCA3ODY0NCwgNzg2NDUsIDE3NywgNzg2NDMsIDYxNzYsIDEyMDU4MCwgMCwgMCwgNjE3NywgCisgICAgOTAyMCwgNzg2NTIsIDc4NjUzLCA2MTc4LCAxMjAyNDksIDEyMDI0MiwgMTI4MDI3LCA2NzY3MywgNzUxOCwgODc1NCwgMCwgCisgICAgMTIwMjM3LCAyMTM3LCA0MzA4MSwgMCwgMCwgOTEzNiwgMTIwMjQwLCA0NDAxLCA0MTI4MCwgMCwgODk3NCwgMjMwOCwgMCwgCisgICAgNzQxNDksIDAsIDIzMTgsIDAsIDY2MzYxLCA4MTk4LCAwLCA2NDM2MCwgMTI2MDEsIDQyNTM2LCA2NTI2NiwgMTIwODI3LCAKKyAgICA3NDMwNywgMCwgNjk3MCwgNTQwNCwgNDMzMzIsIDM2NjcsIDc5MzYsIDEyOTI1LCAxMjY5ODksIDYzODUsIDAsIDAsIAorICAgIDExODk0OSwgMTA4NzQsIDY1NTA1LCAxMjgwODMsIDAsIDQyMDUzLCAyMDc1LCA0MjA1NywgMTEwODMsIDQyMDUyLCAwLCAwLCAKKyAgICA2NzY1MSwgMCwgOTY2NSwgOTIzMDAsIDAsIDEzMTgxLCAwLCAwLCAwLCAwLCA3NDE0OCwgMCwgMCwgMTIwMjI1LCAxMjAyMjksIAorICAgIDEyMDIyNCwgNzQxNzIsIDQxMTQ1LCAwLCAwLCAwLCA0MTE0OCwgODY4MywgNzU5NCwgMTI3NTE5LCAwLCAxMTkwOTAsIAorICAgIDEwODY5LCA0MzQ1OCwgNDExNDYsIDkyNDA3LCAxMTQ0MSwgMCwgMzUxMiwgMTE5NjMzLCAwLCA4MTAzLCAwLCAwLCA2NTE4NCwgCisgICAgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgNjk3NDIsIDQxNTQ0LCA2NTE0NiwgMCwgMCwgMCwgMCwgMTk5NDIsIDAsIAorICAgIDExODkwOCwgNzk4OCwgMTA0MzYsIDc0MjczLCAzMjcxLCA3MzgwNCwgNjQ3MTEsIDAsIDAsIDAsIDAsIDM4MDQsIDEzMDcwLCAKKyAgICAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIDAsIDM1OTksIDEyNzc3NCwgMCwgMTI4ODYxLCA4NTE0LCAwLCAwLCAwLCA3NDM0NiwgCisgICAgNjY2OTcsIDAsIDExNjg0LCAwLCA5MjQ4NiwgMCwgMCwgNDIwNDMsIDQzMjMyLCA2NjY3NywgMCwgNDIwNDYsIDc4MjQxLCAKKyAgICA0MDM2LCAwLCAwLCAxMjgyMTMsIDE5NDg2MSwgMCwgMTE5NTQsIDAsIDE0NTAsIDEyOTg2LCAxMzQwLCAwLCA2NTQ0MSwgCisgICAgOTI3MjIsIDAsIDAsIDEyNzc3MiwgMCwgOTE3NTQyLCAwLCAwLCA2NTM5LCAwLCAwLCAwLCAxOTQ4NTYsIDAsIDEyMDQ5MiwgCisgICAgNDExOTAsIDM5NzMsIDExOTM2NSwgNDU3NSwgNDExOTMsIDc5ODIsIDQyOSwgMCwgMTI3MTk0LCAwLCAxOTQ4NTQsIDY1NzkyLCAKKyAgICAwLCAxMTg5NjgsIDY0MTcsIDExODkxOCwgNzgxNzgsIDAsIDE5NDg1MCwgMCwgMCwgNDkxOSwgMTA1OTAsIDAsIDc3NTUsIDAsIAorICAgIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgMCwgMTYxNywgODA1MCwgCisgICAgMCwgNTAxNSwgMCwgMTE5MTc0LCA0MjU5MCwgMTk0ODcxLCAxNzU2LCA3ODE4MSwgMCwgNjU3NjgsIDYzNTIsIDQxODkyLCAwLCAKKyAgICA3NTU1LCAxMzEwMywgNTQwOCwgMjgxNywgMTIxNCwgMCwgOTIzMzUsIDAsIDAsIDAsIDAsIDEyNzE5NSwgNzk1NywgODY4OSwgCisgICAgNjQ3MjMsIDEwNTYsIDQyODk2LCA3NDE0NywgMTk0ODEzLCAwLCA1NTI4NiwgNzA3MywgNjU4NTAsIDEyMzI3LCAwLCAKKyAgICAxMTkwMjgsIDAsIDAsIDAsIDIzNDEsIDg0NTAsIDg0ODQsIDg0NzQsIDAsIDAsIDAsIDg0NjEsIDEyODEwMiwgMTIxNTMsIAorICAgIDEyNzk5LCAwLCA0MzcwOSwgNDM3MDgsIDk0NTEsIDc1NzEsIDEzMDczLCAwLCAwLCA2ODEsIDAsIDcwMywgMCwgMzI3MiwgCisgICAgODc4MSwgMTI4OTQsIDAsIDExNzA5LCA5MjI4OCwgNzQ0NDYsIDAsIDkyNTMyLCAwLCAxMTMzOCwgMTIwNzY4LCAzMjc2LCAwLCAKKyAgICAwLCA2NTkyOCwgMCwgMCwgNjUwMjEsIDY0Nzk1LCA3NDU3NCwgMCwgMTAwNDcsIDc4ODE0LCAzMjYyLCA3ODgxMSwgNDI3MTEsIAorICAgIDAsIDAsIDY4NDc4LCAxNjMsIDU3NiwgOTg5NSwgMTY1NSwgNzg4MTcsIDc0NTkxLCA3ODgxNSwgNzg4MTYsIDAsIDAsIDAsIAorICAgIDAsIDEwMDM5LCAwLCAwLCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgCisgICAgMCwgMCwgNjc4NDgsIDAsIDAsIDAsIDg4ODcsIDAsIDcyOTUsIDExMDMxLCAwLCA0MzE1NywgMCwgODk0NiwgMTAzNDgsIAorICAgIDEwNDEyLCA4NzU1LCAwLCAwLCA1NzE4LCAxMzIyMSwgMCwgMCwgNzgxMzUsIDAsIDAsIDg4MTAsIDc0NDk5LCA2ODYsIDAsIAorICAgIDAsIDQ2MTksIDExODk1NCwgNjY1NCwgNzM3NjksIDc0NDI2LCAwLCAxMjA0MCwgNjU2ODksIDEwMTI4LCA2NTExOCwgMCwgCisgICAgMTE5MTUxLCA3NDIwNSwgOTI2NTEsIDAsIDI0MDEsIDY4MTQ0LCA4NzkyLCAwLCAwLCA2NTQ1NSwgMCwgOTIyNDYsIDAsIAorICAgIDExOTEyOSwgMCwgMTI4ODYsIDEyNzkyMCwgNjY2MjQsIDAsIDQzNTU3LCAxMDMwMCwgMTAxNjEsIDEwMzk2LCA3NDEzNSwgMCwgCisgICAgMTE4OTQ1LCA3ODExOCwgNzM4NTEsIDMwMTAsIDY0NDEsIDc4MTIyLCAxNDU4LCA0MTQ3NSwgMTI4NjcyLCAwLCAwLCAKKyAgICAxMTQ3OSwgMCwgMCwgNjM1MCwgMTI4NjQsIDY5Njc0LCA3ODExNCwgMTA2MSwgNjQ3ODAsIDIwMDEsIDQzMTExLCA1NTIzMCwgCisgICAgMTI4Njg2LCA0MDUyLCAwLCA3NjI2LCAwLCAwLCAxMDQ1LCAwLCA1NjMxLCA0MTExMywgMCwgMCwgNDM3MDcsIDc0MTI3LCAwLCAKKyAgICAwLCA4NDg2LCAwLCA3Mzc1OCwgMjMzNSwgNDM2MiwgMCwgMCwgNjkyMjEsIDEwMjUsIDAsIDQyNjI1LCA5MTc2MjcsIAorICAgIDc4MDg0LCA0MTQ0MywgMCwgMTI4MjA2LCAwLCAxNzc0LCAxNTIzLCAwLCAwLCA0MTQ0NSwgNzgyMzYsIDAsIDg1NjcsIAorICAgIDQxNDQyLCAzOTg4LCAwLCA3ODIzNywgMTE4OTEwLCAwLCA2NTI3NCwgODU2NCwgNzgxOTksIDc4MjM4LCAxMjc1MTUsIDAsIAorICAgIDAsIDQzNDQ2LCAwLCA2NjUxMywgNjI1NiwgMCwgNTc5LCA1NTIxOCwgMTAyMDYsIDAsIDYzNzUsIDI2NzMsIDAsIDExODE0LCAKKyAgICAwLCA0NDg4LCAwLCAxMjczMzYsIDY4NDUxLCAxMDQ0NCwgMTE4ODQ2LCAxMjczMzQsIDExNzk5LCA3NDQwNywgNjg0NjYsIAorICAgIDQ0ODcsIDEyNzg0OSwgNDI4MzIsIDEwMzIsIDEyMDI2NywgNDM0NTAsIDc4MjU3LCA3MjAzLCAwLCA2MTQsIDc4MTkxLCAKKyAgICAxMjczMjUsIDEyMDYxNSwgMCwgNzgyNjIsIDEyODY2OSwgMTI3MzIzLCAwLCA0MzEyMSwgMCwgMCwgOTI1MTMsIDEwNTAsIAorICAgIDc1NDksIDAsIDAsIDkzMTQsIDAsIDAsIDEyMDYxNiwgMCwgMTAwNTcsIDAsIDEyNzMxMywgMCwgNjY1MDQsIDAsIDAsIAorICAgIDIzMDcsIDAsIDY0MzMzLCAxMjczMTIsIDEyODU0NywgNzM4NzMsIDAsIDAsIDAsIDEyNzk3MywgMTI4NzA4LCAwLCAxMDM2MCwgCisgICAgNjc0NiwgMCwgOTIyNDUsIDQ0MCwgMCwgMTMwODUsIDkyMzMsIDc0MjE2LCAwLCAwLCA5OTU3LCAwLCA2NjQ0NywgODA0NiwgCisgICAgNjQ5NjMsIDY1Nzc3LCAxMDEyNSwgNzQyMTIsIDQyODE5LCAxMDkxMCwgMCwgMTUyMSwgOTg5NiwgMCwgMTA0ODcsIDAsIAorICAgIDEyNTI3LCAwLCA3OTcwLCAwLCAxMjg2NjAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgMCwgMCwgNTIzNywgCisgICAgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCA1NzY0LCAwLCAwLCAzMDA4LCA0ODk2LCAwLCAKKyAgICAxMjA4NywgMCwgNTUyMzEsIDQxMTAzLCAwLCA2NDU2NSwgNDc3MywgMCwgOTI3MTcsIDAsIDQ3NzAsIDAsIDkxNzU2NywgCisgICAgODczMSwgNjUzNzgsIDEyNzM2MiwgMTIwNjE5LCA5MTIyLCAxMjgwMzMsIDAsIDQ3NzQsIDMwMTksIDk5OTcsIDEyODM0LCAwLCAKKyAgICA5NDU2LCAxMDIxNSwgMTIwNTQ3LCAwLCAwLCAwLCAwLCA3NDc3NiwgNDI4MSwgNDc2OCwgMCwgNDE1MzUsIDQwOTksIDkwMTcsIAorICAgIDAsIDAsIDc4MDk1LCAwLCA3ODA5NiwgMCwgMCwgMCwgNzgwOTgsIDAsIDQyODE0LCA4ODAsIDAsIDAsIDEyODAyMSwgMjEzNCwgCisgICAgMCwgMTAxMTYsIDk4NzcsIDkyMzI5LCAwLCAwLCA3MDk1LCAwLCA3NDExNiwgNjc3OCwgMCwgNzgwOTAsIDgyNDMsIDI0MjcsIAorICAgIDEyODE0MSwgNzA5MywgMCwgMTE1ODUsIDE5NTAwMywgOTk2MiwgMCwgMTIyMjMsIDAsIDAsIDE0MzQsIDEyMDI1NCwgNTYzNywgCisgICAgMTE1NzMsIDAsIDAsIDAsIDE5OTUxLCAwLCA3ODEyMSwgMCwgMCwgNTUyODMsIDAsIDAsIDc0NDM3LCAxMTU2LCA4NzQwLCAKKyAgICA5MjQxNSwgMzc4MiwgNjQzMzEsIDAsIDQxMzcwLCAxMDE0LCA4MjYxLCAwLCAwLCAxMDgzNSwgMCwgNjU1MzYsIDAsIAorICAgIDEyMDQ2MywgMCwgNzcwMiwgMTE4ODI0LCAwLCA0MzAxMCwgNjU3NzksIDY1NzgzLCAxMTUwLCAxMDU0NywgNTcwMCwgMCwgCisgICAgMTIwNjAzLCA2NTM4MywgMjMzOSwgNDI1OTQsIDU2OTcsIDExODc4OCwgMCwgMTI4NTc2LCAwLCA0MjI1NywgNTY5NiwgCisgICAgOTI2NzcsIDEyMDQ2NSwgMzg2MiwgOTY0MywgMCwgMCwgNzYzNCwgNjUxNjcsIDk4NDUsIDAsIDAsIDU3MDEsIDk3MjIsIAorICAgIDQxNDkwLCAwLCAxNDI2LCA2ODIxNywgMCwgNjg0NDcsIDQyMjA0LCA1NTI3MCwgODU3MSwgMTk0OTkxLCA3ODA2NywgMCwgCisgICAgNzg4MTgsIDkyNzE5LCA0MzE4MiwgMTIxODQsIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgNDMxOTQsIDY0NzEyLCAKKyAgICAxMDc0NCwgMCwgOTkwLCA1NjQ3LCAwLCA3Mzg3LCA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDAsIAorICAgIDM5NDUsIDkyNTg5LCAwLCAwLCAwLCAwLCA3ODIxMiwgMTI3NzQ2LCAxMDIwLCA3Mzc2MywgMCwgNzg3MzEsIDU2NDgsIAorICAgIDY0NzQ4LCAxOTQ5MTAsIDAsIDEwMjA1LCAzNTQ1LCAwLCA2OTg0LCAwLCA3NDA1MSwgMCwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgCisgICAgMCwgMCwgMCwgOTkxMSwgMCwgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDEyNzE0NSwgMCwgMTE4ODM2LCAwLCA3ODQyNywgCisgICAgMTE0MCwgNzg0MjYsIDAsIDEwMTU5LCAwLCAwLCA4MTI4LCAwLCAwLCA5MTc5NjUsIDE4MTUsIDE5OTEwLCA4OTAsIDAsIAorICAgIDMyNjcsIDkyMjkxLCAwLCAxMDEyMywgMCwgNDQxMCwgMTA0MSwgMTA1NzYsIDYzNTQsIDkyNTgxLCA1ODAsIDc0MjMyLCAwLCAKKyAgICAxMjgzNDcsIDAsIDAsIDAsIDE5OTM4LCA2NTkwNiwgMTI3ODE5LCAwLCAwLCAzMjk4LCA1Mzc1LCAxMDE0MiwgMCwgODIxNSwgCisgICAgMCwgNjEzNCwgNDEyNDYsIDY0NDAyLCAwLCAxMjgyMTUsIDAsIDAsIDAsIDQxMzgyLCAwLCAxMjg2NTMsIDUxNzMsIDY1MzQ4LCAKKyAgICA1MjcsIDAsIDAsIDkyNjEyLCAxMjgyNTAsIDc4Nzk3LCAxMTkxNSwgMCwgMCwgMTAwNzIsIDAsIDQyNjk1LCAyMzI5LCAKKyAgICA0MjI1MCwgMCwgMTI4ODY0LCA2OTY2NywgMTIyNDUsIDE1NjgsIDAsIDAsIDAsIDEyODEyMCwgMCwgNzQzMjgsIDkyNzA4LCAKKyAgICA3NDc2OSwgMCwgMTE5MDg3LCA5MDY5LCA2MTQ0LCAwLCAwLCA3MzgyMiwgMCwgMTI4MDEwLCA2NDkxNywgNDE1MjEsIAorICAgIDExODkzNCwgNDk0LCAxMzI1MCwgMCwgNjUwOTgsIDYzNjQsIDk1NiwgMCwgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgMCwgMCwgMCwgCisgICAgMCwgNjY0NDksIDEzMjYzLCA3NDI4MSwgNjkyMTcsIDEzMTcxLCAxMjc3OTYsIDAsIDAsIDkyMjk0LCAwLCAxMDQ0LCAKKyAgICA0MTI3NiwgMCwgMCwgMCwgNDIwNjgsIDExNzk1LCAwLCAwLCAwLCAwLCA0MjQ1MCwgMzkwNywgMCwgNjQ1MjYsIDkxNzg0NywgCisgICAgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCAwLCAwLCAwLCAwLCAxMDU3LCA1NjYsIAorICAgIDQyNjk2LCAwLCAzMDE2LCA0MjI3NCwgNDM0NjQsIDY2NDkwLCAxMjkyMSwgNjY1NzEsIDc4NDcyLCA5MjUxMCwgMzAwNiwgCisgICAgNDYyMCwgMTI3MjM3LCAwLCAwLCAwLCA2NDY1OSwgMCwgMTI3NzQ5LCA1NTI1MywgNjM1NywgNjM2MiwgODYyNiwgMCwgMCwgCisgICAgOTA5MCwgNjUzNzcsIDQxNTk2LCAwLCA0MjkyMCwgMTY5OCwgMCwgNjQ0NzcsIDAsIDQzODEzLCAxMDUzLCAwLCA3ODI2OSwgCisgICAgMCwgMCwgMTA1MiwgMTA1MSwgNDU5LCAxMDYwLCA3NDM0OSwgNjY0NzksIDAsIDAsIDAsIDAsIDQyNDkwLCA2ODksIDY1MDgsIAorICAgIDQxNjMsIDQyMjk4LCA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgMCwgMTIxMzAsIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIAorICAgIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCAwLCAwLCAwLCAxMjcyNzQsIDAsIDYzNTgsIDYzNjEsIAorICAgIDE5MjYsIDYzNTYsIDkyNjI3LCA3ODk4LCA4MTEwLCAxMDkzNSwgMCwgMTAwNjksIDU4MzAsIDAsIDQzNjg1LCAwLCAwLCAwLCAKKyAgICAwLCA4NjkzLCA3ODYxMSwgMTE5NTY1LCAwLCAxMjA0MTMsIDAsIDEyNzI1NywgNjU4OTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCA0MjMxMywgNTU3OSwgOTI0MTIsIDAsIDAsIDAsIDAsIDU1NzgsIAorICAgIDQxNzc0LCAxMjgxMTUsIDQyMDIzLCA2MjM0LCA1NjY5LCA5MjI3NSwgMCwgMCwgMCwgMTI3NTA2LCA2ODIwMiwgNTU4MywgMCwgCisgICAgMCwgNDI0MjYsIDU1ODAsIDQyMjc2LCAyOTIzLCA4OTIsIDU1ODIsIDQyNDY1LCA0MTMzMCwgMTk0OTg3LCA1Nzk1LCAKKyAgICA2NTUxMiwgMTE5MDA2LCA2NTcwMiwgMCwgMTIwODAxLCA2NTI1MSwgMCwgNjU3MTAsIDAsIDAsIDY3NjcyLCAwLCA1MzcwLCAKKyAgICAwLCAyOTMxLCAxNjM4LCAxMDk2NiwgMTAxODgsIDY1ODc4LCAxMTg4NDgsIDAsIDY5Njk0LCAwLCAxMjg4MzAsIDgxNzIsIAorICAgIDQyMDE3LCAwLCAxMDg0NCwgMCwgMTI4MTk1LCA5MjQyNCwgNjM3NCwgMCwgMCwgMjg2LCA3ODAyMywgMTA2MiwgMCwgCisgICAgMTE5OTk5LCAwLCA3Mzk1LCAwLCAxMDcwLCA2NDkwMCwgNzE1MywgNjA5NSwgNDE4NjUsIDAsIDMwMTUsIDEyODAyMywgCisgICAgOTE3NzYzLCA1MjExLCAwLCA2NDAwLCAwLCAxOTQ5ODMsIDAsIDgxODksIDExMjc2LCAwLCAwLCAzNzIsIDEyODgyOSwgMCwgCisgICAgMTE4ODc0LCA0MjEwMiwgNDE1ODUsIDEyODIwMiwgMCwgNDIxMDEsIDI3NiwgNzg0MDIsIDAsIDMzLCA3NDIyNiwgMTI3MzAzLCAKKyAgICA5MDA3LCAxMTg3OTYsIDQxNTg4LCA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIAorICAgIDAsIDQyMTA0LCAwLCAwLCAyMzI4LCA5MjQwOSwgMTA3MSwgMCwgMCwgNzQ4NDgsIDAsIDAsIDAsIDEwNDcsIDAsIDAsIAorICAgIDY0NzkwLCAwLCA2OTcyMywgMTA2NTEsIDAsIDAsIDAsIDAsIDkyMjA2LCAxMTkxODEsIDU3MTEsIDQxNjMzLCAxMjA5OCwgCisgICAgNjU1NzEsIDkxNjYsIDAsIDU3MTAsIDAsIDY3OTAsIDY1MTY4LCAxMzIxNiwgMCwgNjk3MTYsIDY5NzI2LCAwLCA2NDYxMSwgCisgICAgNDE2MjMsIDE5NTAwMSwgNTcxNSwgNjk2NTQsIDAsIDAsIDU3MTIsIDI3NjEsIDQxNjIwLCA2ODEyNCwgMzA3NCwgNTcyMiwgCisgICAgMCwgODY0MywgNzM3NjgsIDAsIDExODkwNiwgMjc1NywgMTEwNjcsIDk3MTgsIDc0NDk4LCA4OTEwLCAxMDY4OSwgNjQ3OSwgCisgICAgMCwgMCwgMCwgNzg2MDcsIDkxOTYsIDY5NjcwLCAwLCAwLCAwLCAwLCAxMTg5MTEsIDAsIDAsIDAsIDAsIDAsIDEyMDAxMCwgCisgICAgMCwgODcwMSwgNjgxMzAsIDExOTYxNiwgMTIwNTIyLCAwLCA0MjQ3NywgMCwgMTIxMjMsIDQ0OTUsIDQzNTY5LCAwLCAwLCAwLCAKKyAgICA2NDk0NiwgMTA5OTIsIDAsIDEyMDAwOSwgMCwgMCwgOTMxOCwgMTIwNjYxLCAxMzI0OSwgNjU2NzksIDczODA4LCAwLCAKKyAgICA2NTQ1NywgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCAKKyAgICAwLCA1MDg0LCAwLCAwLCAxMTg4NjEsIDAsIDczMywgOTE3ODc2LCA3ODAxNCwgNzg0MzYsIDc4NDM1LCA0MTY3NywgMCwgCisgICAgOTIxOCwgMTczMSwgMCwgMCwgMCwgMTk1MDEwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDAsIAorICAgIDUzNTgsIDAsIDAsIDkxNzc2NywgNjQ0MjQsIDAsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgMCwgNjg0MzAsIDExOTExNiwgCisgICAgNDMyNTMsIDY1OTQzLCAwLCAzMzcxLCAxMDk4OCwgMCwgODc3MSwgMTQ3OSwgMCwgMCwgMTEwOSwgMTE1ODAsIDAsIDY0NjAxLCAKKyAgICAxMjIwNSwgMCwgMCwgNjQ1MDcsIDg4NjgsIDM5OSwgMCwgNzQ4NDIsIDAsIDAsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAKKyAgICAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgMTE5MjExLCAwLCAwLCA3ODAxMSwgMzUxLCAxMTkxNDksIDAsIAorICAgIDAsIDU1MjI5LCAwLCA3NDI2OCwgMCwgMCwgMCwgNDIzNzcsIDAsIDAsIDAsIDAsIDAsIDkwMTMsIDQwNTQsIDAsIDAsIDAsIAorICAgIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgMjU0OSwgNzQ0NjksIDAsIDAsIDU1ODQsIDgzNTgsIDAsIDc0NDExLCA5MjIxOSwgCisgICAgMTA5MTksIDAsIDc5ODAsIDAsIDAsIDAsIDQxODAwLCA1NTg5LCAwLCAyNjY0LCA0MTYxMywgNTU4NiwgMTE4ODkwLCAwLCAKKyAgICAxMTM1NiwgMCwgMCwgNDM0NTIsIDc4NjA5LCAwLCA0MjU3MywgNjc4NTYsIDAsIDc4MTI5LCAwLCAwLCA5MjUzNSwgODEzNSwgCisgICAgNjQ1MCwgMTAwNTUsIDc3OTk2LCAwLCAwLCAwLCA1NjU3LCAwLCA5NjI2LCAwLCA3Nzk5NCwgMTAxNzksIDU2NTQsIDEyOTM5LCAKKyAgICA5MjU3MywgMTIwNzk5LCAwLCAwLCA1NjUyLCAxMDk0NSwgMCwgNjY0ODYsIDAsIDM2NjEsIDc4NjMsIDAsIDAsIDAsIAorICAgIDc0NTA5LCAwLCA1NjU5LCAwLCAxMjc1MTAsIDY2NzI5LCA1NjU1LCAwLCA0MjE2OCwgMCwgMTA1NSwgOTE3NjI4LCAKKyAgICAxMjc3OTIsIDY2MzEwLCA3NDAzMCwgMCwgMTIxNDYsIDczOTU1LCA3Mzk1NiwgMTE2MTgsIDAsIDEyNjk5MCwgMCwgMTAyNzIsIAorICAgIDEwMzA0LCAxMDM2OCwgNDI1MTgsIDU5NCwgMTAyNDQsIDEwMjQ4LCA3NDA3LCAwLCA2NDg3MCwgMCwgMzQ2NywgMCwgMCwgCisgICAgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDY5MjIyLCA2NTkyNywgMCwgMCwgNjk2OTYsIAorICAgIDY5NzY5LCA2NDY1NiwgMCwgMCwgMTk0ODM3LCAwLCA1NjY2LCA2NTIyNywgNTMxOCwgNjM5OTQsIDAsIDkwOTEsIDEwNzk4LCAKKyAgICAwLCAxMjgxNjYsIDEwMTg2LCAwLCA3NzMyLCAwLCA2NDU1NiwgMCwgMCwgNTY2OCwgNzQ0NDUsIDAsIDAsIDU2NzAsIDAsIAorICAgIDEyNzI5NywgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIDE5OTUyLCAxMjA4MDcsIDAsIDEyNzQ5LCA3NDU1MSwgMCwgMCwgCisgICAgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgMTQ5NywgMCwgMCwgMCwgMCwgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIAorICAgIDY2MzUzLCA2ODQzNSwgNzgyNzgsIDY3ODk2LCA0MzE5MiwgMCwgNzgyNjUsIDU1MywgMTIwNjUzLCAwLCAxMjg1NTQsIAorICAgIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCA2NTkxMiwgMCwgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCAwLCAwLCAKKyAgICAwLCA2NDkwNSwgMCwgOTUxMiwgMTIwNjcxLCAxMjc0MiwgNjQ0MywgMCwgMCwgOTEzNSwgMCwgNDE1NjQsIDAsIDU1MjE5LCAKKyAgICAxMjg4MzIsIDAsIDAsIDEyMTQ4LCAwLCA3ODI5NywgMCwgNjQyNTYsIDAsIDExNjY5LCAwLCA1NjM0LCA0NTI0LCAwLCAKKyAgICAxMjcyNzAsIDAsIDExODg4MCwgMjQyNSwgNjUxODIsIDEyODc2OSwgNDM2MzYsIDUyMjEsIDc4NDEwLCAzMjgsIDAsIDAsIAorICAgIDY5ODE1LCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgMCwgNTYzNSwgMzM3MywgCisgICAgMjk4NiwgNzgyOTIsIDc0MjIzLCAzNDM3LCA3ODI5MSwgNjIwMywgNDI0NywgMCwgMTE5MjAsIDgyNzQsIDAsIDAsIDE2NTcsIAorICAgIDQxNTYxLCA3ODI5OSwgNzgyOTUsIDU2MzksIDI5NTQsIDU2NjAsIDU2NDAsIDc4MzAzLCAwLCA3ODMwMCwgNDIyMjcsIDAsIAorICAgIDAsIDQxNjM3LCA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgMTE3MDUsIDU2NDIsIDAsIAorICAgIDU0ODYsIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgMCwgMCwgNTY0MSwgODI1OSwgMCwgMTA1OCwgMCwgNjc2MzAsIDAsIAorICAgIDAsIDExNDQsIDc4NzUwLCAwLCA0MjIyOCwgMCwgNzM4OTAsIDExODk3MiwgMCwgNjUzMjIsIDAsIDU2NDUsIDY0OTY0LCAKKyAgICA4NjUyLCAyNTQ3LCA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCA0MzgwOCwgMCwgNjc2MjEsIDExOTkzNCwgOTAwMCwgCisgICAgMCwgMCwgOTI2NzMsIDE4NjUsIDAsIDU2MTMsIDc0MjY3LCAwLCAwLCA1NjEwLCAwLCAwLCA2NTgyNiwgMjA2OSwgMCwgCisgICAgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgNjUzNzYsIDI0MTIsIDAsIAorICAgIDgxODYsIDk4MDcsIDc0MjY5LCAwLCAxMzEzMCwgNjU4NzQsIDAsIDU4MDcsIDAsIDEwMDMwLCA1MzA2LCAxMjkzNiwgMCwgMCwgCisgICAgMTE3MDQsIDAsIDkyNTgzLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIDk3MTAsIDAsIDAsIDAsIDQxMywgNjU2MjMsIAorICAgIDcxMTgsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgMTIxNzEsIDExOTI0MCwgNjE4NSwgNjQ3NzYsIAorICAgIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIDEyMjQxLCA5MjcyMCwgMCwgMTMwOCwgMCwgMjUzNCwgODEwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxOTE3LCAzMDAwLCAwLCAwLCAxMjA3MzksIDIzNjQsIDkyNDQzLCA3NDQ3MCwgNjY2MTgsIDY1NjgwLCAwLCAxMDAyNywgCisgICAgMCwgMTI4MTU0LCAxMjMzNywgMTIwNzIyLCAxMjczNjgsIDAsIDI5ODAsIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCAKKyAgICA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgMCwgNDQwMTEsIDg3MzAsIDAsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgCisgICAgMCwgNzI3NSwgNzgzMDQsIDkzNSwgMCwgNjU4NDAsIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgCisgICAgMTI4ODM1LCA3ODMwOCwgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAKKyAgICAxOTQ5OTgsIDAsIDEwNjczLCAxMTkyMTcsIDcyNDgsIDAsIDEyODM0NiwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIAorICAgIDk2NCwgMCwgMTI3ODc2LCA3ODIyNiwgMTI4Nzc1LCAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAxMjc5MTEsIDEzMTQyLCAKKyAgICA3ODgxMiwgNDI0MTUsIDY2NTc1LCA0NTQyLCA3NDAzNywgNDM1NDcsIDAsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAKKyAgICAwLCA3OTQ5LCAwLCAwLCAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgNDY1NywgMCwgOTI3MjQsIAorICAgIDY0NzgsIDk4OTgsIDQzNjczLCA2NTIzNywgNjI0MSwgNzEwNiwgNDg3NywgMCwgNjIzOCwgMCwgMTA1NDgsIDEyNzA0OSwgCisgICAgNDQwOSwgMCwgMCwgNjQ3OTgsIDAsIDUzNDYsIDAsIDEyMDUyOCwgNjIzNywgNDg3NCwgMCwgOTE3NiwgMCwgMCwgNjUyMzEsIAorICAgIDY1ODg0LCAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgMCwgNTY4NSwgCisgICAgMCwgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAxMjc4MjAsIDQzNjM1LCAKKyAgICA3MzkyOCwgMTI3NTI5LCAwLCAwLCAwLCAxMjg1MTAsIDY1NDgyLCAwLCA5MTQyLCAwLCAwLCAwLCAxMDkzOCwgMCwgCisgICAgMTE4NzkwLCAxMTgyLCAyNTQyLCA0ODI2LCAwLCAwLCAxMjgxNzYsIDUyOSwgODU4MCwgMCwgMCwgMTA1ODYsIDEwNzkwLCAKKyAgICAxMDgzOSwgNjYwMjMsIDQxNTkzLCA0MTIwNywgMCwgMCwgNDE1OTQsIDIyNSwgNDI4MjgsIDAsIDAsIDAsIDExMzc2LCAKKyAgICA3NDM3OSwgMTA3MjEsIDY3NjY0LCAzNDM4LCA0MjA5NywgMTI3MjY3LCAxMTA4NCwgMzE5NCwgNDE4NzAsIDI2NiwgNzgzMDUsIAorICAgIDAsIDQxODczLCAxMjA1NzUsIDExMzI0LCAxMjA1MzEsIDAsIDg0MjAsIDY0OTE4LCAxMjg4NDQsIDQxODcxLCA0MTMzOCwgCisgICAgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIDY2NjA1LCA2NjAxMSwgMCwgNDA5NjUsIDEyNzkzNywgMCwgNTE2MSwgMTA1NzIsIAorICAgIDAsIDAsIDAsIDY0MzQ5LCA3Mjg3LCA0MjE2MiwgMTI3NTUyLCAwLCAwLCAxMTk0OCwgNjkyMjAsIDEyMzU5LCA0MzQyOSwgCisgICAgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgNzI4NiwgMCwgNjg2MzUsIDEwMDMxLCAwLCA5ODcwLCA2ODY0NSwgCisgICAgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIDQyNjc4LCAwLCA0MzY3NywgNDE1ODMsIDAsIAorICAgIDY1Nzk5LCA5MjYyMywgMCwgMCwgMCwgNzgxNjksIDY2MTk5LCAwLCAzNjA5LCA2ODYyNCwgMCwgODMyLCAxMjA2OTMsIAorICAgIDEyMDc3MCwgNzg0NzMsIDY2MDA3LCA3ODQ3MSwgNjU3MDMsIDAsIDAsIDQyNzMyLCA1MTgwLCA5MjY5OSwgNDEzOTUsIAorICAgIDQxNTMwLCAxMTY5MSwgNjQ3NzMsIDkyMjE0LCA3NDAwMiwgMCwgMCwgMTI4NjQ1LCA2MzQ4LCAyNDMsIDEzMjAwLCAwLCAKKyAgICA2MDI0LCA5MjMwOSwgOTk3OSwgMTAwMzcsIDQxNTI5LCAxMDY0OCwgODUzOCwgNDM2ODcsIDAsIDAsIDQyODUsIDY2MTk1LCAKKyAgICAwLCA0MjMwLCAwLCAxMzMwNywgNDMyNTYsIDkyMzUzLCA3NTYzLCA0MjM3NiwgMCwgNjg0NDIsIDEyMDUxMiwgMCwgMCwgCisgICAgMjE0LCAwLCAwLCA3ODQ2NiwgNjU4OTMsIDEyMjA4LCA5OTczLCAwLCA2NjMxMSwgNjU1ODksIDEyODI3NywgMjYwMywgMCwgCisgICAgMCwgMCwgMCwgMCwgNjAyMiwgMCwgMjg4NCwgMCwgMTE2MjAsIDAsIDQzLCAwLCA2NjQ1MywgMTAxNiwgNDExMDcsIDAsIAorICAgIDQxMTIxLCAzODg1LCA5MiwgNjU0NTYsIDY0NjA4LCAwLCA3NDgwMSwgMCwgMjA3NCwgMCwgNzgyODMsIDAsIDEyNDUzLCAKKyAgICAxMjgxMjgsIDAsIDc0MjQxLCAwLCA2NzkxLCAxMjQ1NywgNzgyNjgsIDAsIDAsIDAsIDc4Mjc5LCAwLCAwLCA5MjM1OCwgCisgICAgNjY2MzcsIDc5OTUsIDg3NTksIDQzNDIxLCA3ODI3NywgMTI0NDksIDEyODU1MiwgMCwgMCwgODc1MiwgMzE5NywgNDcyMCwgCisgICAgMTAxNjUsIDAsIDExOTI0OSwgMCwgMTE1OTUsIDY0ODkzLCAwLCA0MzQzNSwgMCwgMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIAorICAgIDE5NDYsIDc0MSwgMCwgNTQ5NCwgNDYzOSwgMCwgMTk5MCwgNjY1ODksIDQ0OTgsIDc4NjY0LCAxMTkxODMsIDAsIDAsIAorICAgIDY5NzM0LCAyOTYwLCA3Mzc3OSwgMCwgODk2OSwgMTI4MTE3LCA0MzQyNCwgMTI3MDU5LCAwLCAyOTUwLCAxMTk1NzksIAorICAgIDYyMTAsIDY1NzUzLCAzNzAsIDAsIDAsIDAsIDQ5NTMsIDAsIDAsIDAsIDAsIDY5MjMwLCAwLCAwLCA2NTY4OCwgMCwgNTA2MywgCisgICAgMzUxNywgMjk2NCwgNDM2NjMsIDkxNzc2MiwgNjM0NCwgNzQ3OTEsIDEwNTY2LCAxMDE0NCwgNjYzMzMsIDgyNTIsIDcyOSwgCisgICAgNjYwMTYsIDc4MjUzLCAwLCAwLCA2NDkyMywgMTI4MDQwLCA0MzY2OSwgOTAzMiwgNzgyNjMsIDc4MjY0LCAwLCA0MTIxNSwgCisgICAgMCwgNjU4ODMsIDAsIDkxNzc3NCwgMTIwNjAyLCAzNzYxLCAwLCAwLCAwLCAwLCAxMjkxMiwgMTE5MDEyLCAzODUwLCAKKyAgICAxMjgxOTEsIDAsIDAsIDAsIDAsIDkwOCwgMCwgODYxMSwgMCwgMCwgMTI3NTU1LCA0MzY5MSwgNDExOTcsIDAsIDg5NzgsIAorICAgIDEyMDU0MCwgMTE5MTM1LCA0MTU4NiwgMTA1MjcsIDAsIDkxNzg0OCwgMzg0OCwgNzg3MzksIDE5NDkzNywgMTI3NTM2LCAKKyAgICA2NTI0MSwgNTMzNiwgMCwgMTI4Nzg2LCA2NjMsIDAsIDEwNzgwLCAwLCAwLCA3ODc2NywgMCwgMTI3MTYzLCA2ODE5MywgCisgICAgMzQ3LCAwLCAwLCA3ODc3NSwgNjQ2NzUsIDQxNTgyLCA3ODc3NCwgNzg3NDQsIDY1NTc5LCAxMjk4MCwgNzg3NjksIDEyMTQzLCAKKyAgICA2OTY1NywgNzg1MTIsIDAsIDQzNDQxLCA0MTgwNCwgNzg1MjMsIDAsIDc4NTI1LCAwLCAxMjg4NTksIDQxNTg0LCAxMDY4MSwgCisgICAgMCwgMCwgNzM5MzgsIDAsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgNzg1MzQsIDk1MTgsIDY2MDksIAorICAgIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCA0MTczMCwgMCwgMCwgNzM4NDcsIDc4NzYxLCA2NTE3MiwgCisgICAgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgMCwgMTMxMTAsIDQxNzI2LCAwLCAwLCAxMDAwLCA2OTY1MSwgMCwgCisgICAgNDExNDAsIDEyMDksIDczOTc4LCAwLCA3Mzc1MCwgMTA3MywgNjMyMSwgNzc4NzgsIDQxMTM4LCAwLCA2ODIxMywgMCwgCisgICAgMTIxNjcsIDExMTUsIDQxNjA1LCA5Nzk0LCAxMjcwNjIsIDY3NjcxLCA1NTI0OCwgMTIyMzcsIDc4Nzg3LCA2NjMxNCwgCisgICAgNjU4NywgOTI5MCwgNzg3ODIsIDc4NzgzLCA5MjMxLCA3ODc4MSwgMjk1OSwgNzkyNiwgMCwgMCwgMCwgNjQzOTgsIDAsIAorICAgIDExOTk3MCwgMTIzMTEsIDAsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgNzg3OTMsIDY2NjcwLCAwLCAwLCAKKyAgICAxMjI5MCwgMTIwMTY5LCAwLCAxMTk4NzMsIDQyMTQyLCA5OTY4LCA4MjA1LCAwLCA1MTMxLCAwLCA5NjI3LCA3ODUzNiwgCisgICAgNzg1NDIsIDc4NTM1LCAwLCAxOTQ0LCAxMjQ4LCAxMDE0OCwgMTI3NzU1LCAxMTk5OTAsIDExOTk5MSwgMTI3MDEsIDc4Mzc2LCAKKyAgICAxMTMwOCwgMTE5OTk1LCAwLCAxMTk5OTcsIDExOTk5OCwgNjUzMDUsIDY1MTAwLCA0MDMxLCA0Mjc5NCwgMTIwMDAzLCAKKyAgICA3MDc1LCA4MTU0LCAxMTk5ODUsIDEyMDAwNywgNDE4MTcsIDczOTM0LCA0MjI3NSwgMTIwMDExLCAxMjAwMTIsIDc4NTI2LCAKKyAgICAxMjAwMTQsIDEyMDAxNSwgNjA0MSwgMCwgNDE4OTksIDAsIDgwMDIsIDAsIDQzNjQsIDAsIDAsIDY0MzMyLCAwLCA3ODEzLCAKKyAgICA5MDY0LCAxMTk5ODYsIDEwMTI0LCA3NTI2LCA4NjAxLCA3MjgxLCA3ODQ1NSwgNzI3OSwgMTIwNDEsIDE0MTgsIDEwODg1LCAKKyAgICAxMjY3MywgMCwgMCwgOTY2MCwgMCwgMTMwMTIsIDQ1NzEsIDAsIDAsIDAsIDEyMDc4LCAyOTcwLCAwLCAxMDkzMywgMCwgCisgICAgNzc4NzAsIDAsIDAsIDAsIDQxNTk5LCAwLCAxMjg4MzEsIDAsIDEyOTUwLCA5MjE2MCwgMzQ4NiwgMCwgNzgzMTEsIDQyMzksIAorICAgIDAsIDEyNzc5OSwgNjY1MTEsIDAsIDI2MzcsIDY0NjI5LCA4NDYwLCAxMjcwNTMsIDg0NzYsIDAsIDAsIDAsIDAsIDY1NjczLCAKKyAgICAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIDAsIDQzMTYsIDAsIDEzMTE5LCAwLCA1NDEyLCA2NjI0MywgOTkzNSwgMCwgCisgICAgNzM4NjQsIDAsIDQxNzM0LCA4MjA2LCA3NDA4MSwgOTE2MywgMzI4NiwgOTA3MiwgNTg2NywgMTMzMDIsIDc2MjIsIDcxMjAsIAorICAgIDQxNzM2LCA5MjU0NiwgNDE3MzEsIDAsIDc0MDAsIDU0MTYsIDY4NjYzLCAxMTg5MjQsIDEwODE3LCAwLCA0MTUzOSwgCisgICAgMTI3Mjg0LCAwLCA3Mzk2MywgNDE4NTUsIDQxODY3LCA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDkyMjcyLCAKKyAgICA3MTE1LCA2NjAzMCwgNzM5MzIsIDU0OTgsIDczOTQyLCA0MTUzNiwgMCwgNjgyMDQsIDkyNTg3LCAzNDU5LCA4OTk3LCAwLCAKKyAgICAwLCAwLCAwLCA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCAwLCA3ODUxMSwgMzE2MSwgMjk1LCAxMjAyMDcsIDAsIAorICAgIDkyMjIzLCAxMjc4NTYsIDc4NzQyLCA5MDE2LCA0MzQ1NCwgNjM5MDMsIDYzOTAyLCA0MzY0MSwgMCwgMzk3MSwgMCwgCisgICAgNzM5NzIsIDI5NTIsIDc4NzY1LCAxMTAzOCwgMTA5MDEsIDYzOTAwLCA2Mzg5OSwgNjM4OTgsIDAsIDY2NywgMTIzMzIsIAorICAgIDYzODg3LCA2MDg2LCA0MTcyMiwgMCwgNTE3MiwgMCwgMCwgNDE1OSwgMCwgMCwgOTgxNSwgNjM4ODQsIDE5OTM0LCA2Mzg4MiwgCisgICAgNDExOTgsIDg1NTUsIDYzODc4LCA2Mzg3NywgNDI0NjAsIDYwNTAsIDQyNzA4LCA2Mzg4MSwgNjM4NzIsIDAsIDQyNDIxLCAwLCAKKyAgICA0MTcyMywgNjM4NzUsIDYzODc0LCAxMTQ2MCwgNzQzMiwgMTkxMywgNDE5MTMsIDYzODUyLCAwLCAwLCA0MjM0OCwgMCwgCisgICAgNjc1MiwgNDQ2LCA0MTkxMSwgMTI3OTA2LCA2Mzg1MSwgNjM4NTAsIDQxOTEwLCAwLCA2Mzg0NiwgMjk3MiwgMTI5MzIsIAorICAgIDcyNjIsIDAsIDYzODQ5LCA2Mzg0OCwgNjM4NDcsIDEyODA3MCwgNjU3MCwgODMwMiwgNzI1OSwgNjM4NDIsIDQxNzgsIAorICAgIDEwNzQ2LCA3MjUwLCAxMzIxNCwgMTAwNDEsIDgxMDUsIDYzODkyLCAwLCAxMTg5ODMsIDExMDUsIDQxODAsIDAsIDEyMDk0LCAKKyAgICA5NDk3LCAwLCA2Mzg5MSwgNjM4OTAsIDYzODg5LCA2Mzg4OCwgNTUzOCwgOTk4NywgMCwgMTE4OTMyLCAxNjc4LCAxMzI3NCwgCisgICAgNTUyLCAxMjA2NTQsIDQ0MDEwLCAxMDc4NSwgMCwgMTE5MTcwLCA0NTU3LCA3NDQ1OSwgOTE1OSwgMTAxNzEsIDEzMTI1LCAKKyAgICA2Mzg2MCwgNTU0MCwgNjM4NTgsIDYzODY1LCAyODEsIDEzMjQyLCA2Mzg2MiwgNzQxNTQsIDAsIDU1MzYsIDY1NTY4LCAKKyAgICA2Mzg1NywgMTM4OCwgNzQxNjksIDAsIDEwNzcsIDAsIDY1MDk5LCAxMTUzMSwgNTgzNCwgMCwgMCwgMCwgMCwgNDI3NzMsIDAsIAorICAgIDAsIDAsIDExOTIyMCwgMCwgMzY2MywgMCwgMTExMiwgMTE5MTIyLCA4Njg2LCAwLCA1MzM0LCA2NTA4MSwgNDMyNDksIAorICAgIDc0Nzc4LCAxMjc5NjgsIDExMDc3LCAwLCA2NTA5LCAwLCA1MzI3LCAwLCAxOTkwNywgNjM4NjksIDM0NzgsIDc1ODMsIAorICAgIDc2NzksIDI5MDMsIDAsIDMwMDEsIDExNTgsIDg3NDUsIDAsIDczNzQ4LCA2Mzg2NiwgMCwgMTkxNSwgNDg0NiwgMCwgCisgICAgNjYzNzEsIDExODk4NCwgNDIxMDUsIDI5OTAsIDEyMDEyOCwgODA1LCA2OTIzOCwgNjQ0MzgsIDEyMDcwLCA4NzYwLCAxMTE3LCAKKyAgICAxMTg5ODcsIDEyMjEyLCAxMjAxMjMsIDY1MTc0LCA0MjM1NywgNjM4MzUsIDYzODM0LCAwLCA3ODI0MCwgMTIyMjUsIAorICAgIDYzODM4LCA2MzgzNywgMCwgMCwgNjM4MzMsIDYwNDIsIDY2MzYwLCA4MDgzLCAwLCAwLCA2MzgyMSwgNjM4MjAsIDYzODE5LCAKKyAgICA2MzgxOCwgMCwgNTIyNywgOTA0NywgNjM4MjIsIDEyNzE2MiwgNjA5MSwgMCwgMTA2OTEsIDU2MCwgNTY0MywgODIyNiwgCisgICAgMTE5NTc4LCA2MzgxMiwgNjM4MTEsIDYzODEwLCA2MzgwOSwgNTU0MiwgNjM4MTUsIDYzODE0LCA2MzgxMywgNjA0NywgCisgICAgMTU5NywgMTIwMTQzLCA3ODAsIDIwNiwgNzc5MjUsIDQ5MzYsIDY1MTQ3LCA4MTY4LCA2MzkzMCwgMjA3NiwgMTA5MywgCisgICAgOTg4MiwgNjM5MzQsIDIwODIsIDYzOTMyLCAxMjgxNTAsIDYzOTI5LCAzNTQ2LCAxNjA1LCA3NzkzNCwgOTgwNiwgNDM0NzIsIAorICAgIDc3OTMzLCA4NDAwLCAxMTM0MywgMjA4NiwgMCwgNjM5MjYsIDI5ODQsIDU5NjgsIDkyODcsIDAsIDQ2MTgsIDQyMjA5LCAKKyAgICA0MzQzMSwgMTMxNjksIDUyOTAsIDIwODksIDE2OTUsIDEwNzQzLCAxMDg4LCA2MzgyNSwgNzI2OCwgMTA4NCwgMTA4NSwgCisgICAgNjM4MjksIDEwODMsIDEwMTMxLCA3MjgzLCAwLCA2Mzk3MCwgMTI4MzU4LCAxMDkyLCA0NzU0LCA3MjczLCA1MjUyLCAKKyAgICA0NDAxNiwgNDM2MjcsIDEyNzkyMSwgMCwgNzQwOCwgMTE4MDksIDAsIDAsIDAsIDI5NjUsIDcyNTgsIDg4MDgsIDAsIDEwODksIAorICAgIDQxODcsIDYzOTM3LCA0MjExOSwgNDIxMjAsIDAsIDk0MCwgNTc4NywgMTAwOTksIDYzOTM4LCAwLCA3NDQ5NCwgMTI0NjMsIAorICAgIDI5OTQsIDAsIDExODgyNywgMCwgOTY2NCwgNzc5MzksIDc3OTQwLCA2Nzg5MiwgNzc5MzgsIDc0MzQzLCAwLCAwLCA2NjAsIAorICAgIDEwMTI3LCA2NjYsIDkwMjIsIDU1MzIsIDQzNjY3LCA1NTMzLCA3Nzk0MSwgNzg1MDcsIDYxMTgsIDIyMiwgOTc5LCAzODg0LCAKKyAgICAwLCA3NDE1MSwgOTI2NTIsIDY1MDIsIDAsIDEyNzExOCwgMTI4Njk1LCA2Mzk1MSwgMTI0NjUsIDAsIDAsIDEyODc4MiwgCiAgICAgNjM5NDYsIDE3MDcsIDYzOTI0LCAxMjQ2MSwgNjM5NTAsIDYzODk3LCA2Mzk0OCwgNjM5NDcsIDYzOTQ1LCA2MDM4LCAKLSAgICA2Mzk0MywgNjM5NDIsIDY0Njg1LCA2Mzg5NSwgNjU4MzgsIDAsIDc3NzYsIDAsIDAsIDAsIDEyMDQ0NCwgMCwgODAxLCAKLSAgICA0MzE2NSwgMTY5MCwgNjM5MTksIDYzOTE4LCA2MzkxNywgMTMyNzcsIDYzODkzLCAwLCAxMjA2MzgsIDk5MDYsIDU0ODYsIAotICAgIDIzMzQsIDAsIDYzOTE2LCA1NDgzLCA2MzkxNCwgMTIwNjEwLCA2MzkxMSwgNTQ4NCwgNjM5MDksIDYzOTA4LCAyNTM5LCAwLCAKLSAgICA2MzkxMywgNTQ4NSwgMCwgMTk1MDYwLCA5MDYxLCA1NTM0LCAxMDY3MiwgNDUwMiwgMCwgMjUzLCAwLCAwLCAwLCA0Mjg1NCwgCi0gICAgMCwgMCwgMTE1MzAsIDAsIDAsIDAsIDAsIDAsIDEwNDc0LCAwLCAxMzI1NywgNDIzNTQsIDAsIDAsIDAsIDE5NTA2NSwgMCwgCi0gICAgODQxMywgMCwgMCwgNTY5MywgNzI3MiwgMCwgMTMyMDksIDY0NDcwLCA2NTgzMSwgMCwgMTk1MDYzLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDY2NjA3LCAwLCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgCi0gICAgMTA3NiwgNDEzMDUsIDE0MzYsIDAsIDAsIDAsIDYzOTgyLCAxMDIyMSwgMTI4MDcsIDYzOTA3LCA2MzkwNiwgMTU5OCwgCi0gICAgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAxMzA3LCAwLCAxMDUxNSwgNDE1ODksIDAsIDAsIDYyMTgsIDAsIDE0MzAsIDAsIAotICAgIDAsIDEyMDYwNiwgMTE5MzY1LCA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCAwLCA3MzkzNywgCi0gICAgMTA1MTcsIDAsIDAsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMCwgMjcxMCwgMCwgMCwgNDE3MjQsIDAsIAotICAgIDQzMDczLCA0MTY5MCwgMTI0NzksIDAsIDAsIDAsIDAsIDExOTY1OSwgMTYyOCwgMCwgMCwgMCwgNjUyNjIsIDYzODU0LCAKLSAgICAxMDc4MywgNDIzMTUsIDAsIDYzODU1LCAxMjA2ODMsIDAsIDAsIDUzMzksIDc0MzIzLCAwLCAxMzAwNCwgMCwgNDQ1NywgMCwgCi0gICAgMCwgMCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCAxMjA2MTcsIDEyNjMzLCAwLCAwLCAKLSAgICA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDAsIDAsIDEyMDY0NywgMCwgNTAsIDAsIDk4NzEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDY2NDY4LCAwLCAxMzI1OSwgNDQ0OCwgMCwgMCwgMCwgMCwgNjc4NTMsIDAsIDEwNjQwLCAwLCAxMTUxLCAKLSAgICAwLCAwLCAwLCAwLCAxOTUwNTAsIDAsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIDExODg3MCwgODgxMiwgMCwgCi0gICAgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDEwODM5LCA4MDg3LCAwLCAwLCA5ODk0LCAwLCAwLCAwLCAKLSAgICA0NjM2LCAwLCAxMTg5ODUsIDgwNTMsIDAsIDAsIDAsIDAsIDEyMDQ5NSwgMCwgMCwgMTIyNzcsIDE5NDYyNywgMTE5OTUsIAotICAgIDE5NDYyNiwgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAwLCAwLCAwLCA2NTMxLCAwLCAwLCA0NzMsIDAsIDAsIDAsIAotICAgIDE4NzMsIDEwODcsIDAsIDAsIDAsIDAsIDY2NDM5LCA0MzIxOCwgMCwgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIAotICAgIDAsIDAsIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCAxOTUwNTUsIDAsIDkxNzU2MSwgMTMyOTUsIDQzMTkxLCAwLCAwLCAKLSAgICAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAKLSAgICAwLCA0OTUsIDAsIDQxNzEyLCA3OTgzLCAwLCAwLCAwLCA4NDk0LCAwLCA3NjU0LCA0MTcxMCwgNDE5NiwgMCwgNDM3LCAKLSAgICA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCA0OTk5LCAxOTQ2NDIsIAotICAgIDAsIDAsIDQ3MTEsIDEyMDc2OSwgMCwgMjczOSwgMCwgODA0NCwgNzQ4MzQsIDAsIDQxNzg5LCAwLCAxMDgwOSwgMCwgMCwgMCwgCi0gICAgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIDEzMDU4LCAwLCAwLCAwLCAwLCAxMzIyOSwgMCwgCi0gICAgMTA1NzUsIDAsIDAsIDAsIDQxNzkxLCAxMTA0LCAwLCAwLCAxMDY1NSwgMCwgMCwgMCwgMCwgMTA4MiwgMTk1MDQ5LCA4NDI4LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMDE2NywgMCwgMTI5OTMsIDgwNDksIDQxNTQ4LCAwLCA2NDU4LCAwLCAwLCA0NzYxLCA2MzgyOCwgCi0gICAgNDc2NiwgNjQ2MjMsIDEyNzMsIDE5NDY1MywgMCwgMTE4ODc2LCAwLCA2OTEyLCAxMzEzLCA3MDMzLCAxMDQ4MywgMCwgCi0gICAgNDE1NDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCA1MTIyLCA0MTUyNywgMCwgCi0gICAgNjYzMjAsIDAsIDAsIDAsIDAsIDQxNTM3LCAwLCA4MzAzLCA4MjgyLCAxMTgxNywgMCwgMTAwMDMsIDczODU5LCA2NTkwNCwgCi0gICAgMTk0NjYzLCAxNjg2LCAwLCAwLCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgCi0gICAgNDIyNDYsIDExOTE1MiwgMCwgMCwgNjU5MjYsIDc3NDQsIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCAwLCAwLCA2OTY2LCAwLCAKLSAgICA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgMCwgMTMwNzgsIDAsIDQ3NjAsIAotICAgIDYzODI3LCAwLCAxMDg3MSwgNDMxOTksIDExMDIsIDAsIDAsIDAsIDAsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgCi0gICAgODYyNywgMTIyNzksIDExMTEsIDAsIDAsIDQ3MDcsIDAsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIDg2NDUsIAotICAgIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCAwLCAwLCAxMTk1NzUsIDAsIDAsIDY2NjU0LCAwLCAwLCAwLCAxMzAwOCwgMCwgNDM4NSwgCi0gICAgMCwgMTMwMTEsIDAsIDAsIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCA3NDIyMSwgCi0gICAgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDAsIDY1NzYyLCAxMTg4MjksIDY0NTczLCA1NzA5LCAwLCAxOTQ2MzgsIDAsIDAsIDAsIAotICAgIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDAsIDU3MDYsIDY0NzY4LCA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgCi0gICAgMTA5OTEsIDAsIDkxNzU3OSwgOTE3MywgOTE3NTgxLCA5MTc1ODAsIDEzMTcwLCA2NTk0MiwgOTE3NTc3LCA0MjYwNSwgCi0gICAgMTIwNzY1LCA5MTc1NzAsIDkxNzU3MywgOTE3NTcyLCAxMDA1OCwgMCwgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAKLSAgICAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgCi0gICAgOTE3NTg4LCA5MTc1ODMsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCAxMjcwNzUsIDEzMjQ2LCA4NjQsIDAsIAotICAgIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCAwLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCAwLCAxMDk0OCwgCi0gICAgOTE3NjAxLCAxMzE5OSwgMTIwMTY5LCAxMjM2LCAxMzIwOCwgMTMyNjEsIDEzMTg5LCAxMzE4OCwgMTIwMTY0LCAwLCA3NDQwLCAKLSAgICAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIDYzNzc5LCAKLSAgICAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIDQxNTIyLCAwLCAwLCAwLCAwLCAxMTM1NCwgMCwgMCwgCi0gICAgNDI3OTUsIDAsIDExOTE5NSwgMTEzOTQsIDE5NDY0NiwgMTMyMzYsIDEzMjcyLCAxMzE5NCwgMTMzNCwgMCwgNDQ3OSwgCi0gICAgMTE3OCwgNjU1ODYsIDEyMDY2MywgNjY2ODEsIDExOTE5MywgNDYwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjM3ODcsIAotICAgIDYzNzg2LCA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgCi0gICAgMTAxOTIsIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDAsIDAsIDAsIDAsIDQxNzE5LCAKLSAgICA2Mzc1OCwgMzUyMywgMTA3NCwgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIDQzMTQ1LCAKLSAgICAxMjIxNywgNjM3NTQsIDQxNTMyLCAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgNDEwODQsIAotICAgIDEyMDYyMiwgMCwgNDE5MzAsIDYzODA1LCA2MzgwNCwgNjM4MDMsIDYzODAxLCA0MTA4MiwgODE0MCwgNjM3OTgsIDYyNjAsIAotICAgIDAsIDAsIDExOTIyNSwgNjM3OTMsIDExOTg4LCAzODk4LCAwLCAxMDIwMSwgMTIyMzgsIDYzNzk1LCA0MjM1OCwgMTAzNjcsIAotICAgIDEyNTIxLCAxMDQzMSwgNDIxMTQsIDQxOTMyLCAxMDY4LCAwLCAxMjUyMywgMTI5NDUsIDAsIDAsIDc5NTAsIDEwODA0LCAKLSAgICA2Mzc3MSwgNDI3ODcsIDQzODYsIDEyMjI0LCA2OTczLCAyNzkzLCAxMjQ3NSwgMCwgMCwgNjM3NjksIDk1MzAsIDAsIAotICAgIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAKLSAgICAxMTA1MywgMCwgNjM3NDQsIDAsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCA2Mzc0NiwgNDMyMDQsIDUwNTUsIDAsIDAsIDEwOTAsIAotICAgIDEyMDY3OSwgMCwgMTE2NjUsIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgMCwgMTE1MTMsIDAsIDYxNTcsIAotICAgIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCAKLSAgICAwLCAxMzAwNiwgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDM2MDMsIDAsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIDEwMDI1LCAwLCAyOTE4LCAKLSAgICAwLCA2NTMwMCwgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIDAsIDY1MzkzLCAwLCA3NDEzOCwgCi0gICAgMCwgMCwgMCwgNzQxMzksIDEyMDYxMywgNjUzOTQsIDExNTQ4LCA1MjcwLCAwLCA2NTM5NiwgMCwgNjU4MTMsIDEzMjU2LCAKLSAgICAxMjgyLCAxMjA3NzEsIDAsIDAsIDEwODg4LCAwLCA2NTI0MiwgMCwgMzMzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMwNCwgCi0gICAgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAwLCAwLCA0MzA5NCwgMCwgMCwgCi0gICAgMCwgMCwgOTAzNSwgMCwgMCwgMCwgMCwgMCwgNjgxMjUsIDAsIDE2NCwgMCwgMCwgMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDAsIAotICAgIDEzMjQ1LCAwLCAwLCAwLCAwLCA3Mzg5MywgMCwgMTI2NjYsIDEzMTc1LCAxMzIwNywgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCAKLSAgICA3NDQ3LCA1OTI5LCAwLCA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgCi0gICAgOTcxLCAxMzA2MiwgMCwgMCwgNjUxOTUsIDY0NzY3LCAwLCA3NDQyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAwNDUsIDY0MzAzLCAKLSAgICAxMzI3NSwgMCwgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgMCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIDEyMjI5LCAKLSAgICA0MTUyMywgMCwgMCwgNzM3NTEsIDAsIDY0ODEzLCAwLCAwLCAxMDQ3NiwgMzg1OCwgMCwgMzkzMiwgNjQ5NTgsIDAsIDAsIAotICAgIDczOTg5LCAwLCAwLCAwLCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDQxNzgyLCAwLCAKLSAgICA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgMTIwNTExLCA5ODk5LCAwLCAwLCA0MDQsIDEyODIxLCAzNzQxLCAwLCAKLSAgICA1Nzg4LCAwLCAwLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDAsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMzEzMSwgCi0gICAgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgCi0gICAgNDM3NCwgMCwgMCwgMTM2NCwgMCwgODAzOCwgMCwgOTE3NTk3LCAwLCAwLCAwLCAwLCA3Mzk3OSwgMTMxNzQsIDczOTY4LCAKLSAgICAxMzIyNSwgMCwgMCwgNjU4MzUsIDAsIDIzNjUsIDc4NDEsIDAsIDQyODU1LCAxMTg4NTYsIDQyODY2LCAwLCAwLCAwLCAKLSAgICA2NjQzOCwgNDE3ODUsIDQxMTcxLCA2NDE3MiwgMTMxNzMsIDQzNzIsIDExOTM1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NjUsIAotICAgIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAxNTU2LCA1Mjc0LCAxMzIxMCwgMCwgMTAwMTcsIDk3MzMsIAotICAgIDQxNzg3LCAwLCAwLCA0MTM3MywgMCwgMTIzMDMsIDAsIDEzMjMyLCAxMzIzMywgMzQ5LCA0ODYzLCA0MTM3MSwgMTE2NTYsIAotICAgIDAsIDEyMDcwMywgMTE5ODgzLCAxMjg2MSwgNDM5OCwgODU0MywgNjU2MTgsIDAsIDEwOTYsIDAsIDAsIDAsIDEyNDQxLCAKKyAgICA2Mzk0MywgNjM5NDIsIDY0Njg1LCA2Mzg5NSwgNjU4MzgsIDAsIDc3NzYsIDAsIDAsIDEyNzc3MywgMTIwNDQ0LCA2OTczMCwgCisgICAgODAxLCA0MzE2NSwgMTY5MCwgNjM5MTksIDYzOTE4LCA2MzkxNywgMTMyNzcsIDQzNjU5LCAxMjk1MSwgMTIwNjM4LCA5OTA2LCAKKyAgICAyMDU0LCAyMzM0LCA3ODUxNSwgNjM5MTYsIDU0ODMsIDYzOTE0LCA2OTczNywgNjM5MTEsIDU0ODQsIDYzOTA5LCA2MzkwOCwgCisgICAgMjUzOSwgMCwgNDM5ODAsIDU0ODUsIDAsIDQyNjk3LCA5MDYxLCA1NTM0LCAxMDY3MiwgNDUwMiwgMCwgMjUzLCAwLCAKKyAgICA2ODIwOCwgMCwgOTIwMywgNzQyMzEsIDAsIDExNTMwLCA5MjU0MiwgNjg2NjgsIDAsIDEyODgxNiwgMCwgMTA0NzQsIAorICAgIDQzNDI2LCAxMzI1NywgNDIzNTQsIDAsIDAsIDAsIDE5NTA2NSwgMCwgODQxMywgMCwgMCwgNTY5MywgNzI3MiwgMCwgCisgICAgMTMyMDksIDY0NDcwLCA2NTgzMSwgNzg0NjAsIDE5NTA2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4MTMzLCAxMjc3NjcsIAorICAgIDY2NjA4LCAzMTExLCA0MTg2MywgODgwNCwgNDI5MTMsIDkyMTg3LCA3MjcwLCAwLCA2NjYwNiwgNjYyOCwgMTA3NiwgNzQzMywgCisgICAgMTQzNiwgNzM4NDQsIDU1MjI2LCAxMjgzNTMsIDYzOTgyLCA3MzkzLCAxMjgwNywgNDM0MTMsIDYzOTA2LCAxNTk4LCAKKyAgICA2MzkwNCwgMCwgMCwgNDE3MjksIDQ0MjMsIDEzMDcsIDAsIDEwNTE1LCA0MTU4OSwgMTI4Njk4LCAwLCA2MjE4LCAwLCAKKyAgICAxNDMwLCAwLCAwLCAxMjA2MDYsIDc4NzU0LCA1NDEzLCA3NjE5LCAzMjU1LCAzNDkzLCA3NDAzMiwgMTE1NDksIDEwNzM1LCAKKyAgICA0MTc0MywgNzM5MzcsIDY4MDEsIDAsIDQ1MTgsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMCwgMjcxMCwgMCwgCisgICAgNjkyNDMsIDQxNzI0LCAwLCA0MzA3MywgNDE2OTAsIDEyNDc5LCAwLCAwLCAwLCAwLCAxMTk2NTksIDE2MjgsIDEyNzE0OSwgCisgICAgMCwgMCwgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDEyMDY4MywgMCwgMCwgNTMzOSwgNzQzMjMsIDAsIAorICAgIDEzMDA0LCAwLCA0NDU3LCAwLCAwLCAwLCAwLCA1Njg0LCA4Njc4LCAxMDkxNCwgMCwgNTY4OSwgNjU4MDcsIDAsIDY4NDY0LCAKKyAgICAxMjYzMywgMTI4NzAsIDY5NzA1LCA2NTE4MywgNTY4OCwgMTE5MjYsIDYwMzMsIDYzMTAsIDU2ODYsIDAsIDc0MjUxLCAwLCAKKyAgICAxMjA2NDcsIDAsIDUwLCAxMDU1OCwgOTg3MSwgMCwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAxMzI1OSwgNDQ0OCwgMCwgCisgICAgMCwgMCwgMCwgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgOTE3NjA3LCAxMjc1NDQsIDEyNzA3OSwgMTk1MDUwLCAKKyAgICAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIDExODg3MCwgODgxMiwgMCwgMTE1MzgsIDg2NzMsIAorICAgIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCA2OTYzMiwgOTg5NCwgMCwgMCwgMCwgNDYzNiwgCisgICAgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIDEyMDQ5NSwgMCwgMTI4Mjg0LCAxMjI3NywgMTk0NjI3LCAKKyAgICAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgMCwgOTI0MjYsIDAsIDY1MzEsIDAsIDEyNzg0NiwgCisgICAgNDczLCA0MzQxNSwgMCwgMCwgMTg3MywgMTA4NywgMCwgMCwgMCwgNzg1MjcsIDY2NDM5LCA0MzIxOCwgMCwgMTk0NzE2LCAKKyAgICA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDAsIDAsIDk0ODksIDAsIDAsIDQzODQsIDc0MjIwLCAxOTUwNTUsIDIwNTgsIAorICAgIDEyODg2MywgMTMyOTUsIDQzMTkxLCAxMjgwMzAsIDAsIDExNTQsIDM4NTcsIDEyMDUsIDAsIDAsIDEzMTAwLCAxMjk1OCwgCisgICAgMTIwNzA2LCA3NDE2OCwgMCwgMCwgNDQyMSwgMTA1OTIsIDAsIDQ5NSwgMCwgNDE3MTIsIDc5ODMsIDAsIDEyMDc3OSwgMCwgCisgICAgNjM0NywgMCwgNzY1NCwgNDE3MTAsIDQxOTYsIDAsIDQzNywgNDE3MDksIDczNzcyLCAwLCAwLCA5NDY1LCAxMzI5MCwgCisgICAgMTE5MTgwLCA0OTk3LCA2NDMwNiwgMCwgMCwgNDk5OSwgMTk0NjQyLCAwLCAwLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIAorICAgIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIDQxNzg5LCAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCAKKyAgICA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgMTMwNTgsIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIAorICAgIDQzMzk5LCAwLCAwLCA0MTc5MSwgMTEwNCwgMCwgMCwgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgCisgICAgNjU2OSwgMCwgMCwgMCwgMCwgNjc4MywgMCwgMTI5OTMsIDgwNDksIDQxNTQ4LCA0NDAyMSwgNjQ1OCwgMCwgMTI4ODgyLCAKKyAgICA0NzYxLCA2MzgyOCwgNDc2NiwgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgCisgICAgNjMyMiwgMTA0ODMsIDAsIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCAKKyAgICA4NTAzLCA1MTIyLCA0MTUyNywgMCwgNjYzMjAsIDAsIDAsIDAsIDAsIDQxNTM3LCA2OTY4MywgODMwMywgODI4MiwgMTE4MTcsIAorICAgIDczODU3LCAxMDAwMywgNzM4NTksIDY1OTA0LCAxOTQ2NjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIAorICAgIDY0Mjk5LCAxOTQ2NjQsIDAsIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAKKyAgICAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIAorICAgIDAsIDQ3NjIsIDExMDMsIDAsIDAsIDQ3NjUsIDAsIDEzMDc4LCAwLCA0NzYwLCA2MzgyNywgMjA1MCwgMTA4NzEsIDQzMTk5LCAKKyAgICAxMTAyLCAwLCA0MjIzNiwgMTI4ODY3LCAxOTQ2NjcsIDExNTQ2LCA3NDc5NCwgMzM3LCAwLCA0MjU5MSwgODYyNywgMTIyNzksIAorICAgIDExMTEsIDAsIDkyMTYxLCA0NzA3LCA2ODIwNiwgMTAxNDMsIDc4ODMsIDEyNzA4MSwgNzg4MCwgNDUyMiwgODY0NSwgNTcwNCwgCisgICAgMTMwMTAsIDAsIDgzMDQsIDkxNzU2MSwgMCwgMTE5NTc1LCAwLCAwLCA2NjY1NCwgMCwgOTI2NzYsIDAsIDEzMDA4LCAwLCAKKyAgICA0Mzg1LCAwLCAxMzAxMSwgMCwgOTI1NjksIDExOTE2MSwgMTMwMDksIDE2MCwgMjY3NywgMCwgMCwgNDE3OTMsIDY1NzYzLCAKKyAgICA3NDIyMSwgMTIwMTQxLCA0MTc5MiwgNDI3NzAsIDAsIDY1NzYyLCAxMTg4MjksIDQzODIxLCA1NzA5LCAwLCAxMjcxNzcsIAorICAgIDQzODE2LCAwLCAwLCAxMDc5LCAzODY3LCA1NzA4LCAwLCAwLCA0Mzc5NywgNTcwNiwgNjQ3NjgsIDU3MDUsIDg3OTEsIAorICAgIDQwMDUsIDAsIDEwMjM3LCAxMDk5MSwgMCwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAxMzE3MCwgMTI1NDAsIAorICAgIDkxNzU3NywgNDI2MDUsIDEyMDc2NSwgOTE3NTcwLCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgNzQ4NjcsIDE5NDY1NCwgCisgICAgMTI3MDc4LCAzMzM5LCAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgOTE3NTg3LCA5MTc1ODYsIAorICAgIDkxNzU4OSwgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCA5MjIyNiwgMTMyNDYsIAorICAgIDg2NCwgMCwgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgMTk1MDY4LCA1MTkyLCA0MzM4LCAKKyAgICAwLCAxMDk0OCwgOTE3NjAxLCAxMzE5OSwgOTI1NzUsIDEyMzYsIDEzMjA4LCAxMzI2MSwgMTMxODksIDEzMTg4LCAxMjAxNjQsIAorICAgIDAsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgCisgICAgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgNDE1MjIsIDAsIDkyMTY4LCAwLCA5MTc4NTgsIAorICAgIDExMzU0LCAwLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgMTMyNzIsIDEzMTk0LCAxMzM0LCAKKyAgICAwLCA0NDc5LCAxMTc4LCA2NTU4NiwgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCAwLCAwLCAwLCAxOTQ2NTgsIAorICAgIDAsIDY4MDksIDYzNzg2LCA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIAorICAgIDc1NCwgMTAxOTIsIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCAwLCAKKyAgICAwLCA0MTcxOSwgNjM3NTgsIDM1MjMsIDEwNzQsIDEzMjU4LCA5NTM2LCA3NDA3NywgMCwgNDQyNywgNzQyNDIsIDYzNzU3LCAKKyAgICA0MzE0NSwgMTIyMTcsIDYzNzU0LCA0MTUzMiwgMTM0OSwgNjM3NTAsIDYzNzQ5LCAwLCAwLCAwLCA2Mzc1MywgNjM4MDIsIAorICAgIDQxMDg0LCAxMjA2MjIsIDY4MTMzLCA0MTkzMCwgNjM4MDUsIDYzODA0LCA0MzYzMiwgNjM4MDEsIDQxMDgyLCA4MTQwLCAKKyAgICA2Mzc5OCwgNjI2MCwgMCwgMCwgMTE5MjI1LCA2Mzc5MywgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCAKKyAgICA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCAKKyAgICAwLCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAwLCAKKyAgICAwLCA2Mzc2OSwgOTUzMCwgMCwgMTIyMzIsIDEzMTM1LCA4NTk2LCA1NjgxLCA2Mzc2MiwgNDU5NSwgNjM3NjAsIDc5MiwgMCwgCisgICAgNjQ4MDMsIDAsIDg3NDIsIDAsIDExMDUzLCAxMjg3OTYsIDYzNzQ0LCAxMjgxMDcsIDAsIDc1ODgsIDYzNzQ4LCAxNjkzLCAKKyAgICA2Mzc0NiwgNDMyMDQsIDUwNTUsIDY4NDI2LCA5MTc4NTMsIDEwOTAsIDEyMDY3OSwgMTI4MzU2LCAxMTY2NSwgNzQxMzMsIAorICAgIDQ1NTgsIDY1Njg1LCA5NTIzLCAwLCAwLCA3ODY4MSwgMTE1MTMsIDAsIDYxNTcsIDYzNzc1LCA2Mzc3NCwgNjM3NzMsIAorICAgIDEzMTkxLCAxMjE3MCwgMzUwMCwgMzEzOSwgMCwgMzE3MCwgMTI0ODUsIDAsIDEwODcyLCA3ODI3MSwgMTMwMDYsIDY0NDMzLCAKKyAgICAwLCAwLCA5NDEsIDAsIDAsIDAsIDY1NTQxLCAxMTA2MywgMCwgODIyOCwgMCwgNDIwNjUsIDAsIDAsIDAsIDAsIDkyNDU1LCAKKyAgICA3Mzg2LCAwLCA2NDQ0NCwgMCwgMTE5ODYzLCA0MzYwMywgMCwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgMTAwMjUsIDkxNzkxNiwgCisgICAgMjkxOCwgMCwgNjUzMDAsIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAxMjc4MjksIDY1MzkzLCAKKyAgICAwLCA3NDEzOCwgMCwgMCwgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIDY1Mzk2LCAwLCA2NTgxMywgCisgICAgMTMyNTYsIDEyODIsIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDAsIDY1MjQyLCAwLCAzMzMwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3NDI1OSwgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIAorICAgIDAsIDQzMDk0LCAwLCA0MzY1MCwgMCwgMCwgOTAzNSwgMCwgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIDE2NCwgMCwgCisgICAgMCwgMCwgNjk1OCwgMCwgNDMxMTYsIDAsIDAsIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIDczODkzLCAxMjc3NTYsIDEyNjY2LCAKKyAgICAxMzE3NSwgMTMyMDcsIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgNjU1MDksIDAsIDc0NDksIAorICAgIDExMzA2LCAwLCA3MzkyMCwgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIDY1MTk1LCAxMDE2NCwgCisgICAgOTIyNTIsIDc0NDI4LCAwLCA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgMTMyNzUsIDEyODE2MSwgCisgICAgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAxMjIyOSwgNDE1MjMsIDAsIAorICAgIDQzNDExLCA3Mzc1MSwgMCwgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCA2NDk1OCwgMCwgMCwgNzM5ODksIAorICAgIDY4MTkyLCAwLCAwLCAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDEyMjkyLCAwLCAKKyAgICA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIAorICAgIDU3ODgsIDgwOTIsIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAKKyAgICAwLCAxMjAxOCwgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAKKyAgICAwLCAxMTcwMCwgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgCisgICAgNjczNSwgNzM5NzksIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgCisgICAgNDI4NTUsIDExODg1NiwgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgCisgICAgMTE5MzU0LCAwLCAwLCAwLCAwLCA5MjQwMiwgMTI4MDYyLCAxMjk2NSwgMzg0LCA2NDUxMiwgMTA0MDQsIDEwMzQwLCAKKyAgICAxMTkzNTIsIDE1NTYsIDUyNzQsIDEzMjEwLCAxMjAxMjUsIDEwMDE3LCA5NzMzLCA0MTc4NywgMCwgMTI2OTk0LCA0MTM3MywgCisgICAgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIAorICAgIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIDAsIDAsIDQyNjg4LCAxMjQ0MSwgCiAgICAgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMCwgCi0gICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMCwgMCwgCi0gICAgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgMTE5ODc5LCA2NjU5MCwgMCwgNDE1MzMsIAotICAgIDY2MzM3LCAwLCAwLCAwLCA0OTY1LCAwLCA5MTc1MzYsIDczODQ5LCAwLCAwLCAwLCAwLCA2MjYxLCAxMTkzNDIsIDQzMTQ3LCAKLSAgICA2NjU3MCwgMTk1NywgMTA0MjAsIDk4MiwgMjc1NiwgMTMyOTIsIDEzMjA2LCAwLCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDAsIAotICAgIDEzMjEyLCA2NTExMCwgMCwgMTMxOTAsIDEzMTg3LCAwLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAKLSAgICAxNjk0LCA4MjE2LCAwLCAwLCA0MzMzMSwgMCwgNjU2MjAsIDAsIDQzNTQ0LCAwLCAwLCA0MTQ0NCwgNjU2MjEsIDEyMDMyNSwgCi0gICAgNjQ3OTksIDUyNDYsIDEyMDMyNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAxMjMxNCwgNjU2MTYsIDUyMzgsIAotICAgIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIDAsIDM5MzYsIDExOTMzMSwgMTE2OTksIAotICAgIDQxMzQ3LCAwLCAxMzIzNSwgODg0MiwgNDEyNDgsIDAsIDQzNzksIDEzMjM5LCAxMjY5MiwgNzk2OSwgMCwgNzIxOSwgMCwgMCwgCisgICAgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIDAsIDEyMDc4NSwgMTE5ODc0LCAwLCAKKyAgICAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAxMjgxMjMsIAorICAgIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIDczODQ5LCAwLCA0MzYzOCwgNzg1MzcsIAorICAgIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCA5ODIsIDI3NTYsIDEzMjkyLCAxMzIwNiwgCisgICAgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIDQzMjM4LCAwLCAxMzE5MCwgMTMxODcsIAorICAgIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAxNjk0LCA4MjE2LCAwLCA2NzcwLCA0MzMzMSwgCisgICAgMCwgNjU2MjAsIDAsIDQzNTQ0LCAwLCAwLCA0MTQ0NCwgNjU2MjEsIDEyMDMyNSwgOTE5NywgNTI0NiwgMTE5MTA2LCAKKyAgICAxMzE4NSwgOTcwOSwgMTIwMzIzLCAxMjAzMjIsIDEyMzE0LCA2NTYxNiwgNTIzOCwgMTE5MzMzLCAwLCAxMTkzMzcsIDUyMzYsIAorICAgIDQwOTc5LCAwLCA3NDIwMSwgODI4NiwgMCwgMzkzNiwgMTE5MzMxLCAxMTY5OSwgNDEzNDcsIDEyNzI0OSwgMTMyMzUsIAorICAgIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAxMzIzOSwgMTI2OTIsIDc5NjksIDEyNzI2NiwgNzIxOSwgMTI3MjUwLCAwLCAKICAgICAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIDI5NzksIDEyMDMwMywgNjU2MTksIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIAogICAgIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgCi0gICAgNTM3OSwgMTIwMzE4LCA0MTE2MywgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAwLCAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIAotICAgIDQxNzc1LCAwLCAwLCA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIDEyMTEwLCAwLCA2NTU3MiwgMTE5NjAyLCAKLSAgICA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgMCwgNTgwOCwgNjU5MjIsIDAsIDEyOTY3LCA2NjA0MSwgCi0gICAgOTY3NiwgNDU4MywgMCwgMCwgNjgwOTcsIDY0NTc1LCAwLCAxMTk2NSwgMCwgMTE5MjExLCAwLCAwLCAwLCAwLCA2ODEwMiwgCi0gICAgOTY5OCwgNzgxNCwgNzQ0NzYsIDExOTY1MSwgMCwgMCwgNDE5MjEsIDAsIDk3NTYsIDY5ODUsIDExOTI1OCwgMCwgNzQyMTksIAotICAgIDAsIDAsIDAsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgNDIzMjMsIDAsIDQxOTI1LCAwLCA0MTkyMCwgCi0gICAgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgMCwgMCwgNDI1MTEsIAotICAgIDE3MjcsIDAsIDAsIDAsIDAsIDAsIDc0MjIyLCA4NzE4LCAzNTUwLCA3MzYsIDEwMjY4LCA0NTA1LCAxMDMxNiwgNzQwOTAsIAotICAgIDU4MjYsIDc0MjcwLCA1ODEzLCAwLCAxMjA3MTIsIDU4NDEsIDU4MzcsIDAsIDAsIDMxMDUsIDEyODI5LCA1ODM4LCA1Nzk2LCAKLSAgICAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIDU5OCwgMCwgNjQ2NDksIAotICAgIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCA1NjcxLCAxMjAwNDEsIDAsIDAsIDAsIDAsIDAsIDg0NywgMCwgOTUyOSwgMCwgCi0gICAgNjY2NTcsIDY5ODAsIDAsIDEyMDAzNSwgMCwgMCwgMCwgMTIwMDMzLCAwLCAwLCAwLCAxMjAwMzksIDAsIDAsIDAsIDk2MjQsIAotICAgIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCAwLCA0MzIwMSwgMCwgCi0gICAgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgMTIwNDkyLCA2ODE0MSwgODM3MiwgMCwgCi0gICAgNjUxMTYsIDAsIDEyMDAyMiwgMCwgMTAzODgsIDQyNzk5LCAwLCA0MTAxMywgMTA1NjgsIDAsIDAsIDI4NjksIDAsIDQxMDE1LCAKLSAgICAwLCAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIDQyNjA4LCAxOTQ2ODgsIDk4ODQsIDQ3NTksIDAsIDAsIAotICAgIDEwMjY2LCA0MTM1OSwgMTE3MCwgMTI3MDE3LCAwLCA3MzkwOCwgMTYwOSwgOTAyLCAwLCA2MzkzNiwgMCwgMTE2NjEsIAotICAgIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAyNTU0LCA1MTU4LCA1NzE0LCAxMjcwMTUsIDAsIDAsIDgwNywgCi0gICAgNDMwNzksIDAsIDAsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgMCwgMCwgCi0gICAgODY3NiwgMCwgMCwgMTEwNjYsIDQ1MSwgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAwLCAwLCAwLCA0MzYwOSwgMTk0NzAzLCAKLSAgICAxMjA1NTMsIDE0NDAsIDAsIDAsIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgCi0gICAgMCwgMCwgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCA2NjQzNiwgNjU0NiwgOTMsIDAsIDAsIDc0NDQwLCAwLCAwLCAKLSAgICA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NSwgOTE3NTQzLCAzODMsIDEwMzc3LCA0MTY1NiwgMCwgMCwgMCwgNTE4NywgMCwgMCwgCi0gICAgMTEyODYsIDAsIDY0MjE3LCAwLCA1MjMyLCAwLCA0MTAwOSwgMCwgNDEwMDUsIDAsIDAsIDAsIDgyOTIsIDE5NTA3NCwgCi0gICAgNDk4MCwgODg2MCwgNzM5NDcsIDEwMDI4LCA2NjQ3OCwgNzA3NiwgMTMxODIsIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCAKLSAgICA3OTcyLCAwLCAwLCAwLCA3OTAwLCAwLCAxMTMwOSwgMTk0NzExLCA0MTk4LCA2NDIxMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTI5MzEsIDAsIDAsIDc0Mjg1LCAxMDE4NSwgMCwgNjQzNjYsIDY1MTU2LCA4ODE0LCAwLCA3NDc3MSwgMCwgMCwgMTI4MzYsIAotICAgIDAsIDAsIDc0MzQyLCA4NTkzLCAwLCAwLCAwLCAxMzI1NSwgMCwgMCwgNzQ2NCwgMCwgNjU4NjUsIDAsIDE5NDY1MCwgMCwgMCwgCi0gICAgOTM0MiwgMTIwNDY0LCAwLCA2NDUxNiwgMCwgMCwgMTAxMjksIDQxMDA3LCAwLCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAKLSAgICAxMTkxMzYsIDAsIDAsIDEyMDYzMywgNDA5OTIsIDAsIDAsIDAsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgNzQxMDUsIDM2MzMsIAotICAgIDAsIDY1MTYyLCA0MTIzNCwgMTIwODksIDAsIDk3NzEsIDAsIDEzMjUxLCAwLCAwLCA2MjYyLCAyNzg0LCAwLCAwLCA4MTI2LCAKLSAgICA2NjQ4MywgMCwgMCwgNDQxLCA0MjYyMSwgMCwgMCwgNDEwMDIsIDQwOTk5LCAxMTk2MjMsIDQzMjY2LCAwLCAwLCAxMDg5MCwgCi0gICAgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMCwgNjQ3MzcsIDAsIDAsIDg5MzAsIDAsIDc0MjQ5LCAKLSAgICAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCAwLCAwLCAwLCA5MDM0LCAKLSAgICA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCA0MTk2NiwgCi0gICAgMCwgMCwgMCwgMTE3OTIsIDAsIDAsIDkxMSwgNzUzOSwgMCwgMCwgMTIwMzM5LCA2NTE1OSwgNjQzOTAsIDAsIDAsIDU1MjAsIAotICAgIDExNjYyLCAwLCA2NTMzMCwgNzM4ODYsIDAsIDAsIDEyMzI2LCAwLCAwLCA0MjgwOCwgMCwgOTM0OCwgNjQ5MDEsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4NTcsIDY1MzQyLCAwLCAxMTkxMjAsIDAsIDg2NDQsIDAsIDAsIDAsIDc0Mjk2LCAKLSAgICA0MTkwOSwgMCwgMTIwMzMyLCAyNzkxLCAwLCAxODkxLCAwLCAwLCA0MTkwNywgNjY2NDcsIDAsIDg3NjEsIDEyOTQyLCAKLSAgICA1NzQ4LCAwLCAxMDc3MywgMCwgMCwgODc5NiwgMCwgNjQxMiwgMTIwMzQ3LCA4NTIwLCAxMzE0NiwgMCwgNjM5MzEsIDAsIAotICAgIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMCwgMCwgMCwgMCwgMCwgNzM4NjAsIDAsIDAsIDY0MzQ1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5MTc1ODUsIDY1MTE3LCAwLCAwLCAxMDQyNywgMCwgMzg0NCwgMCwgOTc1NSwgMTExMCwgNjYxMiwgCi0gICAgMTIyMjIsIDAsIDAsIDAsIDAsIDc4MywgMTk0OTM1LCAwLCAwLCAwLCAwLCA2NTA1NiwgMzYyMCwgMCwgMTE4OTQ1LCA0NTU2LCAKLSAgICAwLCAwLCAxOTQ5MzMsIDc0MjUwLCAwLCAwLCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIDAsIDkxNzcsIDg5MDIsIDAsIAotICAgIDk4MzksIDAsIDEyODkxLCAwLCAwLCA2Mzk5OSwgMjAxNiwgNDE5MTcsIDk3ODgsIDYzOTI4LCAwLCAxODYyLCA2NTgwMCwgCi0gICAgOTE1NSwgNjY2MjMsIDk3ODYsIDY1MDgyLCA0MTkxOSwgODU3OSwgNDE5MTQsIDc5ODEsIDAsIDAsIDQ1MDgsIDY0ODgzLCAwLCAKLSAgICAwLCAwLCAwLCA2NDU5MiwgNzQyNzYsIDEyMDA4MCwgNDE3ODAsIDEyMDA3OSwgNjgxODEsIDAsIDAsIDAsIDAsIDEyMTQ3LCAKLSAgICA5MDI0LCA2NjM3OCwgNjY0NzIsIDAsIDY0Mjg5LCA2NTI4OSwgMCwgMCwgMCwgNjQ1MDksIDAsIDAsIDAsIDExMDUxLCAwLCAKLSAgICAwLCAxMTM1NSwgNjU4ODUsIDAsIDAsIDQxMjE0LCAwLCAxMjI5OSwgMCwgNzUwMCwgNDUwNiwgNzc3MywgMCwgMCwgCi0gICAgMTE4OTEyLCAwLCAwLCA0MDQwLCAwLCA2MTY3LCAwLCA2MzkyMiwgNjU5NCwgMCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIAotICAgIDY0NjU1LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCA0MTk1NSwgMCwgNjM5OTMsIDYzOTkyLCA5NjExLCAwLCAwLCAwLCA3NzM4LCAKLSAgICA2Mzk4NiwgMTE0NDYsIDYzOTg0LCAwLCAzNDM1LCAxMTk2NTIsIDAsIDExOTEwOCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAKLSAgICAxMTg4OTgsIDEyNzQ4LCA0MzExNSwgOTUxNywgMTE1MTgsIDAsIDAsIDAsIDE5NDc3NywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgCi0gICAgNjM5NTMsIDYzOTYwLCA5NTkxLCA2Mzk1OCwgMTAyMTcsIDExODg0NSwgMTE0NjksIDAsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIAotICAgIDAsIDAsIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIAotICAgIDAsIDY1NTUxLCAxMTg5MjgsIDY2MzMsIDAsIDAsIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIAorICAgIDUzNzksIDEyMDMxOCwgNDExNjMsIDc0ODMyLCAxMjAzMTUsIDEyMDMxNCwgMTI4MDI1LCAwLCA0Mjg0MSwgMTMyNjcsIDAsIAorICAgIDAsIDQxNzc1LCAwLCA3MTMwLCA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIDEyMTEwLCA0MjY3MywgNjU1NzIsIAorICAgIDY1MjkzLCA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgOTI2NDcsIDU4MDgsIDY1OTIyLCAwLCAKKyAgICAxMjk2NywgNjYwNDEsIDU2MTIsIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgMTI4NTI0LCAxMTk2NSwgMCwgNjgzNTgsIDAsIAorICAgIDY5Nzg5LCAwLCA5MjI2MCwgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAxMTk2NTEsIDEyODUxNCwgMCwgNDE5MjEsIAorICAgIDExODg1OCwgOTc1NiwgNjk4NSwgMTE5MjU4LCA3ODQ5MCwgNzQyMTksIDAsIDAsIDExODk5NywgODAxMiwgNTY3NCwgCisgICAgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCA1NTg4LCAwLCA0MTkyNSwgMTI4MTI0LCA0MTkyMCwgNTY3MywgMTIwNTM0LCA1Njc2LCAKKyAgICA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAxNzI3LCAxMjA3MjUsIAorICAgIDQyNDM2LCAwLCAwLCAwLCA3NDIyMiwgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIDc0MDkwLCA1ODI2LCAKKyAgICA1NTIzMiwgNTgxMywgMCwgMTIwNzEyLCA1ODQxLCA1ODM3LCA1NTIzNCwgMCwgMzEwNSwgMTI4MjksIDU4MzgsIDU3OTYsIDAsIAorICAgIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgNTc5NywgNDEwMTEsIDU4NjUsIDEyMDA5MSwgNzk1NiwgNTk4LCAwLCA2NDY0OSwgCisgICAgNTgwNiwgNDIzOTgsIDAsIDkwMzcsIDU2NzEsIDEyMDA0MSwgMCwgMCwgMCwgMTI4ODU1LCAwLCA4NDcsIDEyODI0MiwgCisgICAgOTUyOSwgMCwgNjY2NTcsIDY5ODAsIDAsIDEyMDAzNSwgNzg0ODQsIDAsIDAsIDEyMDAzMywgNzg0ODYsIDAsIDAsIAorICAgIDEyMDAzOSwgNDI2ODMsIDAsIDAsIDcxMTQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCAKKyAgICA1NjUxLCAyOTI5LCA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgCisgICAgNjk3MjcsIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAxMDE3NSwgMTAzODgsIDQyNzk5LCAwLCA0MTAxMywgCisgICAgMTA1NjgsIDAsIDAsIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgCisgICAgNDI2MDgsIDc4NDY5LCA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIAorICAgIDE2MDksIDkwMiwgMCwgNjM5MzYsIDEyODg3NSwgMTE2NjEsIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAKKyAgICAyNTU0LCA1MTU4LCA1NzE0LCAxMjcwMTUsIDAsIDAsIDgwNywgNDMwNzksIDAsIDc4NDc1LCA5NzYsIDU1MTEsIDY0NTUzLCAKKyAgICAwLCA0MjE1NSwgMCwgNDEzNTYsIDc0MTEwLCAxMTg4MDEsIDAsIDAsIDg2NzYsIDAsIDAsIDExMDY2LCA0NTEsIDYzOTQxLCAKKyAgICA1Nzk4LCA5MzQ5LCA0MjAxOCwgMTI3ODU4LCAwLCAwLCA0MzYwOSwgNTkwNiwgMTIwNTUzLCAxNDQwLCAwLCAxMjg4NTMsIAorICAgIDEyMDAxNiwgNzQyODMsIDExMDA1LCAwLCA2NjY1NiwgNjYwNDQsIDAsIDE5NDY5OCwgMCwgMCwgNDMzOTMsIDEwMDk0LCAwLCAKKyAgICAxMTUyOSwgMTA4NTcsIDEyMDY0MywgNjY0MzYsIDY1NDYsIDkzLCA4MTAyLCAwLCA2ODQwNSwgMCwgMCwgODE3MSwgMCwgCisgICAgMTE5MDk3LCAxMjcwNjQsIDkxNzU0MywgMzgzLCA3MTU0LCA0MTY1NiwgOTI2MzQsIDAsIDAsIDUxODcsIDAsIDEyNzI3NywgCisgICAgMTEyODYsIDY4NjIwLCA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCAwLCA4MjkyLCAxOTUwNzQsIAorICAgIDQ5ODAsIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgCisgICAgNzk3MiwgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCA3ODMxOSwgNDE5OCwgNDI3MjUsIDAsIDY3NjU2LCA5OTk1LCAwLCAKKyAgICA5MjU1MiwgMCwgMTI5MzEsIDAsIDQyNjg0LCA3NDI4NSwgMjA4OCwgMCwgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgCisgICAgNzQ3NzEsIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCAKKyAgICA2NTg2NSwgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgCisgICAgNDEwMDcsIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIAorICAgIDEyNzE1MywgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgNzQxMDUsIDM2MzMsIDAsIDY1MTYyLCA0MTIzNCwgCisgICAgMTIwODksIDc4MjgxLCA5NzcxLCAwLCAxMzI1MSwgMTI4NzAxLCAwLCA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgCisgICAgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAKKyAgICAxMDg5MCwgNzQ0ODEsIDY1ODM0LCA4MzI0LCAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMTI3NDY1LCA2NDczNywgMCwgMCwgCisgICAgODkzMCwgNjY2NzgsIDc0MjQ5LCAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAKKyAgICAwLCA3NzkwNCwgOTI2NDAsIDc3OTA1LCA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgCisgICAgNjY0NjksIDAsIDAsIDAsIDQyODE1LCAwLCA0MTk2NiwgMCwgMCwgMCwgMTE3OTIsIDQzMDY0LCA0MTAyNSwgOTExLCA3NTM5LCAKKyAgICAwLCAwLCAxMjAzMzksIDY1MTU5LCA2NDM5MCwgMCwgMCwgNTUyMCwgMTE2NjIsIDAsIDY1MzMwLCA0MjgxMiwgMCwgMCwgCisgICAgMTIzMjYsIDAsIDAsIDQyODA4LCAxMjgzMzcsIDkzNDgsIDY0OTAxLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc1ODQsIDQzNzAyLCAKKyAgICAwLCA1ODU3LCA2NTM0MiwgOTI3MjcsIDExOTEyMCwgMTIwMDc5LCA4NjQ0LCAwLCAwLCAwLCA3NDI5NiwgNDE5MDksIDAsIAorICAgIDEyMDMzMiwgMjc5MSwgNjk2NjMsIDE4OTEsIDY5ODI0LCAwLCA0MTkwNywgNjY2NDcsIDExODkzOSwgODc2MSwgMTI5NDIsIAorICAgIDU3NDgsIDAsIDEwNzczLCAwLCAwLCA4Nzk2LCA3ODE0OSwgNjQxMiwgMjA2MSwgODUyMCwgMTMxNDYsIDEyNzE4NSwgCisgICAgNjM5MzEsIDAsIDY1OTAyLCAyODgyLCAwLCAwLCAxMjg0MywgNDUyMCwgMTIwMzQ1LCA5MjQ1OSwgMCwgMCwgMCwgNzM4NjAsIAorICAgIDAsIDAsIDY0MzQ1LCAwLCA5MjAxLCAxMjgzMTQsIDE5NDk0MCwgMCwgMCwgNDM2NzksIDkxNzU4NSwgNjUxMTcsIDkyMjcwLCAKKyAgICAwLCAxMDQyNywgMCwgMzg0NCwgMTIwNjc1LCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgMCwgMTI4Nzg5LCAwLCAwLCA3ODMsIAorICAgIDE5NDkzNSwgMCwgMCwgMCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgMCwgNjgzNzgsIDQ1NTYsIDAsIDAsIDE5NDkzMywgCisgICAgNzQyNTAsIDAsIDY3NjU3LCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIDEyNzUyNywgOTE3NywgODkwMiwgMCwgOTgzOSwgCisgICAgMCwgMTI4OTEsIDAsIDAsIDYzOTk5LCAyMDE2LCA0MTkxNywgOTc4OCwgNjM5MjgsIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCAKKyAgICA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgNjYwMTcsIDQ1MDgsIDY0ODgzLCAKKyAgICA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIDc0Mjc2LCAxMjAwODAsIDY3ODQsIDc4Nzg4LCA2ODE4MSwgMCwgMCwgCisgICAgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIDY2NDcyLCAwLCA2NDI4OSwgNjUyODksIDc4MTUxLCA2NjY1OCwgCisgICAgMTk0OTI5LCA2NDUwOSwgNzgxNTIsIDAsIDAsIDExMDUxLCAwLCAwLCAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIAorICAgIDAsIDEyMjk5LCAwLCA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCA5OTYzLCA2ODY0OSwgMCwgNDA0MCwgMTIwNTcwLCA2MTY3LCAKKyAgICAwLCA2MzkyMiwgNjU5NCwgMCwgMCwgMCwgMzYyNCwgNDMwMzYsIDAsIDYzODcsIDYzOTkwLCAxOTk0NywgNjM5ODgsIAorICAgIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIDAsIDY4MDMsIDAsIDc3MzgsIDYzOTg2LCAxMTQ0NiwgNjM5ODQsIAorICAgIDkyNjQxLCAzNDM1LCA3ODE2NCwgNDM4MTQsIDQzODEwLCA3MDI5LCA2NDI1OCwgNDEyOTIsIDExODg5OCwgMTI3NDgsIAorICAgIDQyNzQyLCA5NTE3LCAxMTUxOCwgMCwgNzg3OTAsIDAsIDE5NDc3NywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIAorICAgIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgMCwgCisgICAgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgNDI3MCwgMCwgCisgICAgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAxMjAxMywgMCwgCiAgICAgMCwgMCwgNDE1LCA2Mzk2NCwgNjM5NjMsIDQyMzQ1LCAwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgMCwgNjM5NjEsIAotICAgIDQ0NzIsIDAsIDAsIDAsIDAsIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDAsIDcwODEsIDEwNzMwLCA3NjkxLCAwLCA2MzgzMCwgCi0gICAgMTE5NjI1LCAxOTQ5NDUsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgMTYwNCwgOTU2NSwgMTA1MzksIDAsIDY1NzY0LCAKLSAgICA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgMTE4MDEsIAotICAgIDM2MjIsIDAsIDY0MzM2LCAxMjAxNywgMTA0NjMsIDYzOTgxLCA0OTY3LCA2NDE4OSwgMTk2NiwgNjM5NzYsIDAsIDAsIDAsIAotICAgIDAsIDYzOTcxLCA0MzQ3LCA0NDE2LCA0MjA5OCwgMTEwMDksIDEwNjk0LCA2Mzk3MywgNDAyLCAwLCAxMzE0NywgMCwgCi0gICAgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgMCwgMTEzMDIsIDYyNTksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMCwgMCwgNjQ5NDIsIDAsIDE5NDczMywgMCwgMTk0NzMyLCAwLCAKLSAgICA3NDMwMSwgMCwgMTEyODAsIDAsIDAsIDc0MDYwLCAwLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCA2NTAxOCwgNjY1MTYsIAotICAgIDU0MDksIDAsIDE5NDY2OSwgNjQzNDcsIDUzOTksIDk2ODUsIDc0MDg5LCA3OTUyLCA1NDAxLCAwLCA2NjYxNiwgMCwgMCwgMCwgCi0gICAgNTQwNSwgOTE3NTU1LCA2NDg2NiwgMCwgMCwgMCwgMCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIDY0NjkwLCAzMjU0LCAwLCAwLCAKLSAgICAwLCA0MjM5MCwgMCwgMTk0NzI1LCAwLCA2NTA3NywgMCwgMCwgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIAotICAgIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExOTExOSwgMCwgMCwgMTE5MDY4LCAwLCAwLCAxMzc5LCAyNDYsIDAsIAotICAgIDAsIDM3ODgsIDAsIDExMDQxLCAwLCA2NjMwNCwgMCwgMCwgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAwLCAxMzE2MywgMCwgMTIwODMxLCA3NDU5NywgMzE4MiwgMCwgMCwgCi0gICAgMCwgMCwgNjU4ODksIDQyMTY5LCA0NzU1LCA3NDI0NCwgMCwgMTE0NDMsIDAsIDY2MzI2LCA3NDU5OCwgNjA4LCA2MDAsIDAsIAotICAgIDEyMTksIDM5MzQsIDY0MjA2LCAxMTQ4MywgNzQ1MTAsIDAsIDc0NDg1LCA0MjQ0MiwgNjU0NzAsIDAsIDY0MjAyLCAxMzE2MCwgCi0gICAgNzc1OSwgNDI0ODIsIDQ4NSwgMCwgMCwgOTgyOCwgMCwgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCAKLSAgICA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAxMTAwMiwgNDI0NzAsIDAsIDAsIDAsIDAsIDc0MDQxLCAwLCAwLCAKLSAgICA0MzUzOSwgNTQxMSwgMCwgMCwgMCwgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIDkzMzcsIAotICAgIDEyMDUyLCAxMDY0MywgNjQ1ODYsIDAsIDE5NDY4NCwgMjU0NiwgMTk0NjgzLCAyMTMsIDExODg1MiwgNjU2MTEsIDAsIDAsIAotICAgIDE5NDc1NiwgNzQzMTAsIDY1NTQsIDAsIDExOTE0LCAwLCAwLCAwLCAwLCAwLCAwLCAxOTQ2ODEsIDExODgyNiwgMjcxMywgMCwgCi0gICAgOTY1MCwgNDMzMzAsIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgMCwgMCwgMTk0Njc4LCA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCAKLSAgICA0MTQxLCA5NjgyLCA2NTI4NywgMTUwOCwgMCwgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgMCwgNDIyNjMsIAotICAgIDQxNDUsIDAsIDY1NzUxLCA2NjYxMywgMCwgNjU3MzgsIDczNzI5LCA5MTg1LCA5NTUwLCAwLCAwLCAwLCAwLCAwLCA2NTczNiwgCi0gICAgNDE5NTEsIDY0ODE2LCA2NTc1NiwgMCwgMTI5NTUsIDEwNTk2LCAyODg4LCAwLCAwLCAwLCA5NjU3LCA5MDE5LCAxOTQ3NjYsIAotICAgIDAsIDI4NzgsIDUzOTAsIDAsIDE5NDk2MSwgMCwgMCwgMCwgNzUwMSwgMTMyMDMsIDAsIDEwNDI5LCAxMDM2NSwgMCwgMCwgCi0gICAgNDE5NDYsIDc1MDMsIDUyMzUsIDgwMywgMCwgMCwgMCwgODk4NiwgMCwgMTA2MzIsIDExOTM0LCAxMTQ1MiwgMTMzMiwgMCwgCi0gICAgMCwgMCwgMCwgOTE3NTQ1LCAxNzkxLCA1MTkxLCA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgNjc4NDksIDU1NSwgMCwgMCwgCi0gICAgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCA3Mjg5LCA3NDA1NSwgMCwgMCwgNjQxNjIsIDU4NTgsIDQxOTI3LCAKLSAgICAxMDU4MiwgMCwgMTc4NCwgMTM2MSwgMTk1MDQ3LCAwLCA3OTA1LCAwLCA2NDg2OCwgMCwgMTMxNTgsIDAsIDcyMTEsIDAsIAotICAgIDkzNzEsIDAsIDAsIDAsIDE2MjUsIDAsIDAsIDEzNDIsIDAsIDY0MTcxLCAwLCAxMDkwMywgMCwgMCwgMCwgMCwgMCwgNDQ4MiwgCi0gICAgNDE2MDYsIDAsIDAsIDAsIDAsIDY0MzgxLCAwLCAwLCAwLCA0MjI0NSwgMCwgNDE5NzIsIDAsIDQ0NCwgMCwgOTEyNywgCi0gICAgNjY2ODcsIDY2NjE5LCAwLCAxOTQ5NzIsIDAsIDExMzQ5LCA0MDk5MSwgMCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIDExOTcsIAotICAgIDAsIDExNDksIDE5NDk3MCwgMCwgMCwgNDA5OTAsIDAsIDAsIDM0OTIsIDAsIDAsIDAsIDAsIDAsIDEyODM4LCAwLCAxOTk0OCwgCi0gICAgMCwgMzA5OSwgMCwgMCwgNDEwODcsIDAsIDAsIDAsIDExOTA1OSwgMTIwMzYsIDAsIDAsIDAsIDgxNTIsIDAsIDY0NDI4LCAKLSAgICAxMjIyNywgMCwgMCwgMTI4MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIDAsIDAsIDY4MTU0LCAKLSAgICAwLCAxNzQzLCAwLCAwLCAwLCA2NTE4NiwgMCwgMCwgOTYwNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTk0OTY3LCAwLCAKLSAgICAwLCAzMzk1LCA5MzYyLCAxMDg3OCwgMCwgMCwgMCwgNjQ4MzAsIDAsIDAsIDQxMDkxLCAzNDI2LCAxMzQ0LCA4ODcwLCAwLCAKLSAgICAwLCA0NzM1LCAwLCA2MTE5LCAxMjgyMiwgMCwgMCwgMCwgNzQ4MTgsIDAsIDAsIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIAotICAgIDEwNTU5LCAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAwLCA3MTcwLCA5NTk2LCA2MTMwLCAwLCAwLCAxMTU3OSwgMCwgCi0gICAgMCwgMTk0NzQwLCAwLCAwLCA2NjY5OSwgMCwgMTAwNCwgMCwgMTk0NzM3LCAwLCA2NjAwOCwgMTI2MjcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExMzAwLCA0MzMwNCwgOTY4NiwgNTg5MCwgMTE3NzYsIDc1NTgsIDAsIDY1NjI3LCAwLCAxMDcxOCwgMTMxNTQsIAotICAgIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIDAsIDczODc3LCA2NTYyOCwgMCwgMCwgMCwgNDE3MDgsIDEyODYwLCA0MTcwMywgCi0gICAgMTIwNjksIDEwODM4LCA1NDAzLCAxMDM1MiwgNzM5MTcsIDEwMDYxLCAwLCAwLCA1MTQwLCAyMDksIDAsIDQxNzA0LCAwLCAKLSAgICA0MzA3OCwgMCwgMCwgMCwgMTA4OTksIDY1NDY5LCAwLCAwLCAwLCAyNDEwLCA5OTMsIDAsIDEyMDU4OSwgMTIwNjg5LCAwLCAKLSAgICAwLCAwLCA3MjMyLCAwLCAxMTkyNTMsIDAsIDAsIDc0NDYyLCAwLCAxMDQ4OSwgNDIxNjYsIDAsIDEwNjU5LCAzNjAwLCAwLCAKLSAgICA0MjI0LCAxMzM2LCA0MTUxOCwgMCwgMCwgMCwgMCwgNDExMzksIDY0ODIwLCAwLCAxMjk2NiwgNDExMzQsIDAsIDAsIDAsIDAsIAotICAgIDI3MiwgNDI2MywgODc5MywgMCwgMCwgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIDEzMzUsIDg0MSwgCi0gICAgNTg4OCwgNDEzNTgsIDY0ODYzLCA5NTQ0LCAwLCAwLCAwLCAwLCA3MjA5LCA4MjIzLCAyNDA5LCA3Nzk5LCAwLCA3NDQyNCwgCi0gICAgMCwgMCwgNDczMSwgMCwgNjY2MjksIDAsIDAsIDEyNTUsIDQxNDksIDkyNDcsIDAsIDk5MTMsIDAsIDAsIDAsIDAsIDY1MTAxLCAKLSAgICAwLCAxMTY5NCwgMCwgMTE2OTAsIDU4MzUsIDAsIDY2NjI1LCAxMDg0MiwgNDEzNTQsIDQyMTIzLCA0MzA5NywgMTE2ODgsIAotICAgIDY2NjM0LCAxMDk0LCAxOTQsIDY0NjkyLCAwLCA4MTgwLCAwLCAwLCA3Mzg3MiwgNzM4NjUsIDAsIDYxMTQsIDEwODk4LCAKLSAgICA0MzA3MiwgMCwgMCwgMCwgMCwgMCwgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIAotICAgIDEzMzExLCAwLCA0MTg1NywgNjQzMjEsIDgzNTksIDAsIDEyNjg5LCAwLCAxOTQ1OTQsIDAsIDAsIDAsIDY4MTgzLCAwLCAwLCAKLSAgICAxMjg3LCA1NDM2LCAwLCAwLCA3NDE0MiwgMTI3MDEzLCA3NDE1MiwgMTE5MDc4LCA2MDUxLCAxMDQ5NywgMCwgODk4NSwgCi0gICAgMTIxMDksIDAsIDAsIDAsIDAsIDAsIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAwLCA2NTQ5LCAyNzksIDAsIDAsIDAsIDAsIAotICAgIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIDQyMTI0LCAwLCA0MjEyMiwgMCwgMCwgMCwgMTE5ODUsIDEzNDUsIDEyNzAwNiwgCi0gICAgMCwgMCwgODk1NiwgNDMwODMsIDAsIDQyMTM4LCAwLCAwLCAxMjE1MSwgMCwgMCwgMCwgNjI4NSwgMCwgMCwgMCwgNzQxOTQsIAotICAgIDQ5MiwgODY4NSwgMCwgMCwgMCwgMCwgMCwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCAwLCAwLCA0MTU1MCwgMCwgCi0gICAgNzM4MzcsIDAsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCAwLCAwLCAxMjAyNzYsIDAsIDAsIDY2NTE1LCA3NjcsIDU1MjQsIAotICAgIDcwMjgsIDAsIDAsIDExOTgyNywgMCwgMCwgMCwgMCwgMCwgMTc5OSwgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMCwgMCwgCi0gICAgNjUzNDAsIDExODk3OSwgMCwgMjQzNCwgMCwgMCwgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCAxOTkzMSwgCi0gICAgNDMyMTQsIDAsIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIDAsIDAsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCAwLCAzMTcxLCAKLSAgICA2NjIzLCA0OTYxLCAwLCA4ODYsIDAsIDg2NTQsIDAsIDk5OTMsIDc0MzkwLCA2NDYwMywgMCwgMCwgOTU5OSwgMCwgNDMwODQsIAotICAgIDAsIDAsIDAsIDIzOTksIDAsIDg5OTQsIDEwOTQ0LCA0MTIwOCwgMCwgNDExNjgsIDgxNzgsIDAsIDMzNjcsIDE5NTAwOCwgCi0gICAgNDI1MTAsIDAsIDAsIDc3ODksIDAsIDE5NDcsIDAsIDAsIDAsIDQyNzU5LCAxMTA2OCwgMTcwNSwgOTMzMSwgMCwgNzQ3OTgsIAotICAgIDkxODEsIDAsIDAsIDgwMTcsIDAsIDY1MDk2LCA2NjcyMCwgMCwgMCwgMCwgNDkwOSwgMTIxMjYsIDAsIDEyMDY5NiwgNDkwNCwgCi0gICAgMCwgMTk1MDEyLCAxMzY1LCA5MjUzLCA0Mjc1NywgMCwgNzQ2MiwgMCwgMCwgMCwgMCwgMTE5NTg3LCA2NDQxNSwgMCwgMCwgCi0gICAgNTM5OCwgMCwgMTk1MDE0LCAwLCAwLCAwLCAwLCAwLCAwLCA5NDc2LCAwLCAwLCAxMjc2MywgMCwgMzYyOSwgMCwgMTMwMDUsIAotICAgIDAsIDM2MjgsIDAsIDAsIDAsIDM0NjksIDQyMTA3LCA0MjExNiwgOTE3NTc4LCA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgCi0gICAgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIDAsIDQyNTgzLCA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAKLSAgICAwLCAzMjM2LCAxMTMxNywgMTI1MSwgNzc3NywgNDE4NTIsIDExNDEwLCAxMDk2NCwgMCwgNDMyMjIsIDEyNjQ2LCAxMjAyNjksIAotICAgIDEwMjU5LCA5ODY1LCA2NTgyMSwgMCwgNjAxOCwgMCwgMCwgMTIyNzYsIDAsIDAsIDAsIDAsIDExOTYxMywgMCwgMCwgCi0gICAgMTA0NjcsIDAsIDI0NDMsIDEwOTE4LCAwLCAwLCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMCwgMCwgMCwgCi0gICAgMTE4ODI4LCAwLCA2NTY3OCwgMTI4NjcsIDAsIDgyNjAsIDAsIDc1MTksIDExODc5NCwgMTIyNzQsIDg5MDQsIDUxOCwgCi0gICAgNjU4NTcsIDAsIDAsIDEzMjA0LCA0Mzg3LCA4NTcsIDAsIDY1MzY5LCAwLCAxMTk1ODMsIDQzMTI1LCAxMjA1OTIsIDAsIDAsIAotICAgIDAsIDAsIDUxMzYsIDE5NjgsIDAsIDE5NTAyMywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIDc5NiwgNjY1MDYsIDAsIDc0MTIzLCAKLSAgICAwLCAwLCA0MjMxNCwgMTk1MDIxLCAwLCA3NDQwMywgNjEyMCwgNDc4LCA2NTE1MSwgNjgxMjgsIDAsIDQzMDgyLCA2MDE2LCAKLSAgICAwLCA0MjI4NCwgMCwgNDI3NiwgMTIwNiwgMzYxOSwgNDE2MzgsIDAsIDM4NDMsIDEyMDExLCA4ODUzLCAzMzYxLCAwLCA0OTAsIAotICAgIDEwNzE1LCA3NTc4LCAwLCAwLCA2NTM1MCwgMTA1MzAsIDEyMzQ4LCA4NjUzLCA3NDMxNCwgNDI0MzUsIDYxNTQsIDk1NTEsIAotICAgIDY1MzU0LCAwLCA3ODQsIDQyMzk3LCAzMzQsIDAsIDQyNDE2LCA2NTM1NiwgNjUyNzMsIDAsIDAsIDcwMjUsIDEwMzY0LCAwLCAKLSAgICA3NzgsIDQxNjI2LCA0MjQ1NSwgNzk4OSwgNzQwNjMsIDMyMjcsIDAsIDAsIDczOTgzLCAyOTE1LCA0MTY5OCwgNDEwMjIsIAotICAgIDQxNzAyLCAxMDMwOSwgMTI3MDM1LCAwLCAwLCA2OTc1LCAwLCA1NDE1LCAxMjE3NiwgMCwgMCwgMzQ2MiwgNjUyMTUsIAotICAgIDQyNjI5LCAwLCA3Mzc4NCwgMCwgMCwgOTc1OSwgMCwgMCwgMCwgODExNCwgMCwgMCwgMCwgMCwgODcxMCwgNDI0OTUsIAotICAgIDExODk1NiwgMCwgNDA1MSwgMTA0NjAsIDc0MDk3LCAxMTg5MTcsIDEzNTYsIDEyMTYxLCAwLCAwLCAwLCAxNjE5LCA5NzAzLCAKKyAgICA0NDcyLCAwLCAwLCA3ODE1OSwgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgMTA3MzAsIDc2OTEsIAorICAgIDEwMzMxLCA2MzgzMCwgMTE5NjI1LCAxOTQ5NDUsIDQyMTAzLCA4NjI4LCA5ODEzLCAwLCA0MjQ1MywgMTYwNCwgOTU2NSwgCisgICAgMTA1MzksIDY5NzAxLCA2NTc2NCwgNDE0MTUsIDY1NzY3LCAwLCA4NDU3LCA0MjMwMSwgMTEzNzIsIDY0ODczLCAxMTk5MiwgCisgICAgMCwgMCwgNjM5ODAsIDExODAxLCAzNjIyLCAwLCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIAorICAgIDE5NjYsIDQzNjI4LCAwLCAwLCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIAorICAgIDQwMiwgMCwgMTMxNDcsIDAsIDQyMTAwLCA2NDY0NiwgMTMyMjgsIDAsIDQxODc1LCAzNTE1LCA3NDI1MiwgMTE4MDUsIDAsIAorICAgIDExMzAyLCA2MjU5LCA0MzM5NSwgMCwgMCwgMTk0NjcwLCAwLCA5MjM1MSwgMCwgNzQ0MjUsIDExMjk5LCAxNTYxLCAwLCAKKyAgICA5MjM1OSwgNjQ5NDIsIDAsIDE5NDczMywgMCwgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIDY5Nzg0LCA3NDA2MCwgCisgICAgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIDE5NDY2OSwgNzQwMiwgCisgICAgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIDAsIDY2NjE2LCA2ODQyMSwgMCwgMCwgNTQwNSwgMTI3ODc1LCAKKyAgICA2NDg2NiwgMCwgMTE5NTgzLCAxMjgzNDUsIDc4Nzg0LCA3NDI0OCwgMTEzMzAsIDE5NDcyMywgNjQ2OTAsIDMyNTQsIDAsIDAsIAorICAgIDAsIDQyMzkwLCA0MzY3OCwgMTk0NzI1LCAwLCA2NTA3NywgMCwgNjM4OCwgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgCisgICAgMTE1MjAsIDU2MTEsIDAsIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCAwLCA0MjY5MSwgOTE3ODg2LCAxMjcxOTgsIAorICAgIDc0NzY3LCAwLCAxMjcwNzUsIDEzNzksIDI0NiwgMCwgMCwgMzc4OCwgMCwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgCisgICAgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA2NTYsIDAsIDY1MjE0LCAxMTkyNDIsIDQyNTY3LCAKKyAgICA5MjIxNywgMTMxNjMsIDAsIDEyMDgzMSwgNzQ1OTcsIDMxODIsIDAsIDAsIDAsIDY1MDM0LCA2NTg4OSwgNDIxNjksIDQ3NTUsIAorICAgIDc0MjQ0LCAwLCAxMTQ0MywgMCwgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgNjQyMDYsIDExNDgzLCAKKyAgICA3NDUxMCwgMCwgNzQ0ODUsIDQyNDQyLCA2NTQ3MCwgMCwgNjQyMDIsIDEzMTYwLCA3NzU5LCA0MjQ4MiwgNDg1LCAxMjgwMDYsIAorICAgIDAsIDk4MjgsIDAsIDAsIDQyMjgwLCAwLCA5MzUxLCA3Nzc4LCA2NDM3OSwgNzQ5NiwgNDI0MzEsIDY5MTYsIDEyMDgsIDAsIAorICAgIDExOTYzMSwgMTEwMDIsIDQyNDcwLCAwLCAxMTg5NDYsIDAsIDAsIDc0MDQxLCAwLCAxMjA2MzMsIDQzNTM5LCA1NDExLCAKKyAgICA0MjE5NiwgMCwgMCwgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIDkzMzcsIDEyMDUyLCAxMDY0MywgCisgICAgNTUyNzEsIDAsIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgCisgICAgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAKKyAgICAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgCisgICAgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCAKKyAgICA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAKKyAgICAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgMCwgMTI5NTUsIDEwNTk2LCAyODg4LCAwLCAwLCAwLCA5NjU3LCAKKyAgICA5MDE5LCAxOTQ3NjYsIDAsIDI4NzgsIDUzOTAsIDAsIDE5NDk2MSwgMCwgNjg2NzksIDQzNTUyLCA3NTAxLCA2MzI4LCAwLCAKKyAgICAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAwLCAxMDYzMiwgCisgICAgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAwLCAwLCAxMTg4ODcsIDE3OTEsIDUxOTEsIDkyODgsIDY0ODIyLCAyODkyLCAwLCAKKyAgICA0MzM5NCwgNTU1LCAwLCAwLCA2NjY0NiwgMCwgMTE5MDAyLCAxMzE1MSwgNzQ1MTIsIDcyODksIDc0MDU1LCAwLCA4ODU0LCAKKyAgICA2NDE2MiwgNTg1OCwgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAKKyAgICAxMjg4MTMsIDEzMTU4LCA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIDAsIDY4MjgsIDE2MjUsIDkyMzAyLCAwLCAKKyAgICAxMzQyLCA2ODQ0MCwgNjQxNzEsIDAsIDEwOTAzLCAwLCAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCAwLCAKKyAgICAwLCA2NDM4MSwgMCwgMCwgMCwgNDIyNDUsIDAsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCA2NjYxOSwgMCwgCisgICAgNzgwMjUsIDAsIDExMzQ5LCA0MDk5MSwgMCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIDExOTcsIDEyODI4MiwgMTE0OSwgCisgICAgMTk0OTcwLCAwLCAwLCA0MDk5MCwgMCwgMCwgMzQ5MiwgMCwgMTI3OTQyLCAwLCAwLCAwLCAxMjgzOCwgMCwgMTk5NDgsIDAsIAorICAgIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCA0MTMwOSwgMCwgMCwgODE1MiwgMCwgNjQ0MjgsIAorICAgIDEyMjI3LCAwLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIAorICAgIDkyNjgwLCAwLCA2ODE1NCwgMCwgMTc0MywgMCwgMCwgOTIyMzksIDY1MTg2LCAwLCAwLCA5NjA2LCAwLCAwLCA2NDQzOSwgMCwgCisgICAgMCwgOTI2ODYsIDAsIDAsIDE5NDk2NywgMCwgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCA2NDgzMCwgMCwgCisgICAgMCwgNDEwOTEsIDM0MjYsIDEzNDQsIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgMTI4MjIsIDQyNjk5LCAwLCAwLCAKKyAgICA3NDgxOCwgNTM5NiwgMCwgNDI2MzcsIDQxMDgwLCAwLCAxMjAzOSwgMTA1NTksIDAsIDExODg5MiwgMCwgOTQ3MiwgMCwgCisgICAgMTE5MjksIDAsIDcxNzAsIDk1OTYsIDYxMzAsIDEyODgyNiwgNDM2MjksIDExNTc5LCAxOTQ3NDEsIDAsIDE5NDc0MCwgCisgICAgMTI4NjkxLCA5MjE4NSwgNjY2OTksIDY0NDQwLCAxMDA0LCA5MjU4NCwgMTk0NzM3LCA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCAKKyAgICA2ODQxNCwgMCwgNDM2MTksIDQzMzgyLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIDExNzc2LCA3NTU4LCAxMjcxNTgsIAorICAgIDY1NjI3LCAwLCAxMDcxOCwgMTMxNTQsIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIDY1MzY1LCA3Mzg3NywgNjU2MjgsIAorICAgIDc4MDE5LCAwLCAwLCA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgNTQwMywgMTAzNTIsIDczOTE3LCAxMDA2MSwgCisgICAgNDMyMzcsIDAsIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgCisgICAgMTA4OTksIDY1NDY5LCAwLCAwLCAwLCAyNDEwLCA5OTMsIDAsIDEyMDU4OSwgMTIwNjg5LCA3ODY5MywgMCwgMCwgNzIzMiwgCisgICAgMCwgMTE5MjUzLCAwLCA3MTEwLCA3NDQ2MiwgMjA2NiwgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDAsIAorICAgIDQyMjQsIDEzMzYsIDQxNTE4LCAwLCAwLCAwLCAwLCA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIAorICAgIDAsIDAsIDI3MiwgNDI2MywgODc5MywgMCwgMCwgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIAorICAgIDEzMzUsIDg0MSwgNTg4OCwgNDEzNTgsIDY0ODYzLCA5NTQ0LCA0MzQ4MSwgMCwgMCwgMCwgMjA5OSwgNTEyMCwgMjQwOSwgCisgICAgNzc5OSwgMCwgNzQ0MjQsIDAsIDAsIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAKKyAgICAwLCA2NDkxNCwgOTE3Nzg3LCA2NTEwMSwgMCwgMTE2OTQsIDkyNDc1LCAxMTY5MCwgNTgzNSwgMTI3MTY0LCA2NjYyNSwgCisgICAgMTA4NDIsIDQxMzU0LCA0MjEyMywgNDMwOTcsIDExNjg4LCA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgCisgICAgMCwgOTk3MiwgNzM4NjUsIDQ1MTksIDYxMTQsIDEwODk4LCA0MzA3MiwgMCwgMCwgMTI4ODU4LCAwLCAwLCAxMDY5NSwgMCwgCisgICAgNzU0MCwgMCwgODgxLCA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgNjQzMjEsIAorICAgIDgzNTksIDAsIDEyNjg5LCAwLCAxOTQ1OTQsIDAsIDAsIDAsIDY4MTgzLCAwLCAwLCAxMjg3LCA1NDM2LCAwLCAwLCA3NDE0MiwgCisgICAgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgODk4NSwgMTIxMDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIDI3OSwgNzM3NDUsIDAsIDAsIDAsIDE0ODksIDAsIDAsIDAsIAorICAgIDM4OTksIDEwMDcsIDQyMTI0LCAwLCA0MjEyMiwgOTIzMzcsIDAsIDAsIDExOTg1LCAxMzQ1LCA3ODYwMCwgMCwgMCwgODk1NiwgCisgICAgNDMwODMsIDExOTgzMCwgNDIxMzgsIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIAorICAgIDc4NjEyLCA3ODYxMywgNjU5NDIsIDQ5MiwgODY4NSwgMCwgMCwgMCwgNzg2MjIsIDQzNzEyLCAyNTgyLCAxMTQ3MCwgCisgICAgNjQ1MzgsIDc0NDQsIDc4NjE1LCA3ODYxNiwgNDE1NTAsIDAsIDczODM3LCAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAKKyAgICAyNzk5LCA5MjU5NCwgNDE5NDQsIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgCisgICAgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAxMjA0OTcsIDY5NzEsIDc0MzM2LCAKKyAgICAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIDQxNTUxLCAyNDM0LCAwLCAwLCAxMjA1NzksIDAsIDQ2MzEsIDAsIDAsIDY0MDcsIAorICAgIDAsIDYzMzgsIDQzMjE0LCAwLCA3NTcwLCAwLCAzMTkyLCAwLCA4NDE0LCAwLCAwLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgMCwgCisgICAgMzE3MSwgNjYyMywgNDk2MSwgNjgzOTYsIDg4NiwgNTUyMTYsIDg2NTQsIDc4ODMyLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDAsIAorICAgIDY5MjQxLCA5NTk5LCA3ODYyOSwgNDMwODQsIDc4NjI3LCA3ODYyOCwgNzg2MjUsIDIzOTksIDY5NjkzLCA4OTk0LCAxMDk0NCwgCisgICAgNDEyMDgsIDAsIDQxMTY4LCA4MTc4LCAwLCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCA3ODYzNiwgNjgwNCwgNzg2MzQsIAorICAgIDE5NDcsIDAsIDAsIDkyNjgxLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCA2NTM1OSwgMCwgCisgICAgODAxNywgMCwgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgMTIwNjk2LCA0OTA0LCAwLCAKKyAgICA2OTY1MCwgMTM2NSwgOTI1MywgNDI3NTcsIDQzNDM2LCA3NDYyLCAwLCAwLCAwLCAwLCAxMTk1ODcsIDY0NDE1LCAwLCAwLCAKKyAgICA1Mzk4LCAwLCAxMjczODYsIDAsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgMCwgMTI3NjMsIDAsIDM2MjksIDAsIAorICAgIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCA5MjUwMiwgMzQ2OSwgNDIxMDcsIDQyMTE2LCA5MTc1NzgsIDY0ODA5LCAyOTI4LCAKKyAgICA0OTA1LCA5ODUzLCA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgMCwgNDI1ODMsIDkzMTUsIDQ4MjIsIDQ5MDYsIAorICAgIDM4NTIsIDI4NDcsIDExOTgyMSwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIDQxODUyLCAxMTQxMCwgMTA5NjQsIDAsIAorICAgIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIDYwMTgsIDkyMjkwLCAwLCAxMjI3NiwgMCwgCisgICAgNjgzNzIsIDAsIDkyMjU5LCAxMTkyNDQsIDAsIDAsIDEwNDY3LCAwLCAyNDQzLCAxMDkxOCwgNzgyMTcsIDExOTgyNSwgCisgICAgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgMTE4ODI4LCAxMjAyNzEsIDY1Njc4LCAKKyAgICAxMjg2NywgMCwgODI2MCwgNzc5NDUsIDc1MTksIDExNTA1LCAxMjI3NCwgODkwNCwgNTE4LCA2NTg1NywgMCwgMTI4Njc0LCAKKyAgICAxMzIwNCwgNDM4NywgODU3LCAwLCA2NTM2OSwgMCwgOTIzMzYsIDQzMTI1LCAxMjA1OTIsIDAsIDAsIDAsIDAsIDUxMzYsIAorICAgIDE5NjgsIDAsIDE5NTAyMywgMTMzNywgNjQ5NjcsIDE2MjksIDAsIDc5NiwgNjY1MDYsIDAsIDc0MTIzLCAxMjg3NywgMCwgCisgICAgNDIzMTQsIDQzMzg4LCAwLCA3NDQwMywgNjEyMCwgNDc4LCA2NTE1MSwgNjgxMjgsIDEyODE0NywgNDMwODIsIDYwMTYsIDAsIAorICAgIDQyMjg0LCAxMjg1MDcsIDQyNzYsIDEyMDYsIDM2MTksIDQxNjM4LCA2OTY5MSwgMzg0MywgMTIwMTEsIDg4NTMsIDMzNjEsIAorICAgIDAsIDQ5MCwgMTA3MTUsIDc1NzgsIDY4Mzg0LCAwLCA2NTM1MCwgMTA1MzAsIDEyMzQ4LCA4NjUzLCA3NDMxNCwgNDI0MzUsIAorICAgIDYxNTQsIDk1NTEsIDY1MzU0LCA3ODUyMiwgNzg0LCA0MjM5NywgMzM0LCAwLCA0MjQxNiwgNjUzNTYsIDY1MjczLCA3Nzk4NywgCisgICAgNjk2NjYsIDQ0NDIsIDEwMzY0LCAwLCA3NzgsIDQxNjI2LCA0MjQ1NSwgNzk4OSwgNzQwNjMsIDMyMjcsIDAsIDEyNzI3NSwgCisgICAgNzM5ODMsIDI5MTUsIDExNTAyLCA0MTAyMiwgNDE3MDIsIDEwMzA5LCAxMjcwMzUsIDc4MzIwLCAwLCA2OTc1LCAwLCA1NDE1LCAKKyAgICAxMjE3NiwgMCwgNzQxOTMsIDM0NjIsIDY1MjE1LCA0MjYyOSwgNzg2OTEsIDczNzg0LCAwLCAwLCA5NzU5LCAwLCA3ODMyNCwgCisgICAgMTI3MjU0LCA4MTE0LCA3ODY5OCwgNzg2OTcsIDc4Njk2LCA3ODY5NSwgODcxMCwgNDI0OTUsIDExODk1NiwgMCwgNDA1MSwgCisgICAgMTA0NjAsIDQzMzY0LCAxMTg5MTcsIDEzNTYsIDEyMTYxLCA0MjcxMywgMTI4ODU3LCAxMjcyNjgsIDE2MTksIDk3MDMsIAogICAgIDQzMTUyLCA0MjQ4OSwgNDIxMTIsIDAsIDE4NzUsIDEwODA4LCA0MjEwOSwgMTIwMjg0LCA0MTg2MCwgNjQ4NjIsIDEzMzA1LCAKLSAgICA2NDkwNywgNTI4OSwgMTMxNDQsIDAsIDAsIDU1NzUsIDk2NzUsIDAsIDU5NDAsIDIyNiwgMjY0OSwgNzQ0OTMsIDAsIDAsIDAsIAotICAgIDMzODIsIDQyNDQ5LCA2NDk4LCAxNjU4LCAxMTkzNiwgMCwgMCwgMTEyNjksIDAsIDczNzU5LCA0MzEwMCwgNzQ0NDksIAotICAgIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgMCwgNjUxNzgsIDQ2ODQsIDAsIDExOTY1MywgMCwgCi0gICAgMCwgMCwgNjA0OCwgNzQ0NjAsIDQyMTEwLCA3Mzk2NSwgMTA4NzAsIDg1NTcsIDExMDU0LCAwLCAwLCA5NjgxLCA0NDc1LCAwLCAKLSAgICAwLCAwLCAwLCAxMjA3MzEsIDYwMzUsIDAsIDc2NTEsIDEwMjk2LCAwLCAwLCAwLCAwLCAwLCAxMTg5NjYsIDc0MTQ0LCAKLSAgICA0MDk5NywgMCwgMTAzOTIsIDEwMzI4LCA0MDk5OCwgMCwgNzQ0ODgsIDAsIDk4MDAsIDg5NzksIDAsIDExOTEzMSwgNDEwMDAsIAotICAgIDAsIDExOTIzOSwgNjQ4NywgMTA5NzcsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgMCwgMCwgMTAyMjAsIDY2NTA1LCAKLSAgICA0MTIwMCwgMCwgNDQyNSwgMCwgMCwgMCwgNDMwNzQsIDczNzk5LCAwLCAwLCAwLCAxMjE3MywgMCwgMCwgMCwgNjUzMzgsIDAsIAotICAgIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDAsIDE1ODcsIDAsIDAsIDY0NDc1LCAwLCAxMzY5LCAwLCAwLCAwLCAwLCAKLSAgICA0NTYwLCAwLCAwLCAwLCAwLCA2NDk0OCwgNDQzMCwgNzQzNDcsIDQyNjAxLCA0NTE0LCAwLCAwLCA4MTk0LCA2NTQ2MiwgCi0gICAgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCAwLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAwLCAxMDQ3NSwgMCwgCi0gICAgMCwgMTM1MiwgMTEwNjksIDc3MDcsIDAsIDAsIDY1Mjc5LCAxMjcxMDIsIDEyNzEwMSwgMTI3MTAwLCA2NTYwNSwgNjA0MCwgCi0gICAgMTI3MDk3LCAxMDQ0MCwgMCwgOTMzNiwgMCwgMCwgODg5OSwgNzc5OCwgNjQ0NzQsIDY0MjU5LCAwLCA2NTE4OCwgNzgyMCwgCi0gICAgNDMwMTgsIDAsIDAsIDc3NDYsIDE0OTIsIDAsIDEwODg0LCAwLCAwLCA1MTI3LCAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIAotICAgIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIDI5OTksIDAsIDEyMDcyMCwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgCi0gICAgNTQ5NywgMTE3MDgsIDAsIDAsIDAsIDAsIDgyMjQsIDAsIDg5MzgsIDYwNDMsIDEyNzM4LCAwLCAwLCA1MzIxLCAwLCAwLCAwLCAKLSAgICAyNTg5LCA3NDMzMiwgMTY4OSwgNzgwMiwgNDY4MywgNzQzMTgsIDAsIDEyMDI5NiwgNjY3MDQsIDAsIDAsIDAsIDAsIAotICAgIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgMCwgNTczMSwgMTM4MSwgCi0gICAgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA2NTUxNCwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgOTc2NiwgCi0gICAgMCwgNTcyOSwgMCwgNzQ0MTAsIDYwMzYsIDY0ODgxLCA0MDI2LCA5MzYxLCAxMjcwOTEsIDI4ODcsIDAsIDM1MjYsIDYyOTgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDg1NzIsIDYwMjEsIDAsIDAsIDAsIDQzMTU1LCAwLCAwLCAzMTQ2LCAxMDk1OSwgMCwgMCwgMCwgCi0gICAgMTA5ODEsIDE2NiwgMCwgODYzNSwgMCwgMTA2MjMsIDQwOCwgMCwgMCwgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAxMjcxNywgCi0gICAgMCwgNzYwNywgMTA2MzksIDY2NzEzLCAwLCAwLCA0MTY0MywgNzQxMzQsIDAsIDg3MTMsIDQxNjQwLCAwLCA0MTY0NSwgCi0gICAgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgMCwgMCwgMzQ3MiwgODY5NywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCAwLCA3NDU3MiwgMCwgNDIxMzYsIDAsIDAsIDAsIDAsIDMyNDcsIDExOTg1NCwgCi0gICAgNjUwMTcsIDAsIDAsIDY2NjY4LCAwLCAwLCAxMDk4MywgMCwgMCwgMCwgNDE1NjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgMCwgNDA5ODgsIDAsIDAsIDQxNzI3LCAwLCAwLCAyMzk2LCAwLCAwLCAKLSAgICAwLCAwLCA2NDk0MCwgMCwgMzg4NiwgMCwgNDI0NTcsIDAsIDAsIDk5NiwgMCwgOTE3NTcxLCA0MjQ5LCAwLCA5MTc1OTQsIAotICAgIDExNzA3LCA4MjIyLCAwLCA3OTM5LCAwLCA5MTc1NzQsIDkxNzU4MiwgOTE3NTkyLCA5MTc1NjksIDg1MzQsIDAsIDQwOTgzLCAKLSAgICAwLCAwLCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAwLCAwLCAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIAotICAgIDAsIDAsIDkxNzU1OSwgMCwgMCwgMTU2MywgMCwgOTYxOSwgMCwgMCwgMCwgMCwgMCwgNTgwMywgNzc5NywgNjA3MCwgCi0gICAgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIDY1MDA5LCAwLCAxMjU2NywgMCwgMCwgMCwgMCwgMCwgMzYwNywgNjU4NjMsIAotICAgIDEwMDQ2LCA5NjEyLCA0MjE1MywgODIxOCwgOTQ4NSwgMCwgMjAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgNDMwODUsIDYwNTcsIAotICAgIDUwOCwgMCwgMCwgMTIwMjY1LCAwLCAwLCAwLCAwLCA2MzgsIDYwODMsIDExOTA3MiwgMCwgMCwgMjMwNSwgMCwgMCwgMCwgCi0gICAgNjA1NiwgNjY1OSwgMCwgMCwgNjA4NSwgMCwgMCwgMzkxNSwgNDE2MzQsIDAsIDQxNjM5LCA2MzkxMiwgMTE5NDEsIDAsIAotICAgIDQwMjgsIDE3ODcsIDQyMTgwLCA0MzA5NiwgMCwgMzI0OSwgMTc2OCwgMCwgMTIzMjgsIDUwMSwgMTI3MDc0LCAxMDYwMSwgMCwgCi0gICAgNTgzLCAwLCA0MTk3NywgMCwgNjYwMDQsIDExOTM1MCwgNjUwNSwgNzQwMTAsIDAsIDEzMDY0LCAwLCAxMjA4MTAsIDY1MDAsIAotICAgIDU1MjYsIDY1MDQ5LCAwLCA3NDUzMSwgMCwgMCwgMTI3NDUsIDk2NzgsIDAsIDEyMDU4NywgOTg2OSwgMCwgMTc3MSwgMCwgCi0gICAgODkzNiwgMCwgMCwgNDIwOCwgMCwgMTE5MTE1LCAwLCAwLCAwLCA3NDEwMSwgMCwgMTE3NjIsIDAsIDAsIDAsIDAsIDY2NDc1LCAKLSAgICAwLCA1MDI3LCAwLCAwLCAwLCA1MDY5LCA3Mzg2MiwgNTAyOCwgOTg5NywgMCwgNzM3MzksIDUwMjYsIDAsIDAsIDAsIDAsIAotICAgIDg5MzEsIDAsIDE0MTUsIDg4NjYsIDQxOTAxLCA3NDc5MCwgMCwgMTE5MzYxLCAwLCA0MzEwNiwgNTAyOSwgMTE5MzYwLCAKLSAgICAxNTgwLCAzNTk4LCAwLCA0MTA3MCwgMCwgMCwgMzQ0MCwgMTE5MzU5LCAxNTYyLCAwLCA5MTc4MjcsIDExOTM1OCwgMTcxNiwgCi0gICAgMCwgMTA2MDAsIDAsIDYyMCwgNDEwMDEsIDYwMjgsIDAsIDQyODkyLCAwLCA3NDgyMiwgNTAyNCwgMTIwODI5LCA0MTAwMywgCi0gICAgMCwgNTAyNSwgMCwgMCwgMCwgMTE5MzI4LCAwLCA2NTU1NywgMCwgMCwgMCwgMTE1OTksIDAsIDExNjAyLCA2MjQzLCAKLSAgICAxMTU3NCwgMTE1ODEsIDExNTk3LCAxMTU5OCwgNjI1MywgNjEwNSwgMTE1ODQsIDc0MTk1LCAxMTU2OSwgNjUyNzUsIDg5MDYsIAotICAgIDEyNzA5NiwgNjY0OTEsIDI2MzYsIDAsIDEwODE1LCAxMTYxOSwgMCwgNDE1NDAsIDc4MTUsIDExNjE2LCA2OTc5LCAxMjA4MCwgCi0gICAgNzcyMSwgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCAwLCA0MTA0OCwgMCwgODI5LCAwLCAwLCAxOTk1MCwgMCwgMCwgCi0gICAgNjYxNiwgMCwgMTE4ODc1LCAxMDk1MywgMzkxLCAwLCAwLCA0ODIsIDQyMjk2LCAxMTU4OCwgMCwgNDM2MDYsIDAsIDAsIAotICAgIDY2MzcwLCAwLCA0MjMzNSwgMCwgMCwgMCwgNzUzOCwgNTMxNSwgMCwgNDI0OTEsIDAsIDQyMDYxLCAwLCA0NTc2LCAwLCAwLCAKLSAgICAxMjAyNDEsIDQyNzcsIDAsIDQwMzksIDY0NDcyLCA0MjMzOCwgMzY4LCA0MjA1OCwgMzk2MCwgMTEwNDMsIDExMzM3LCAKLSAgICAxMjAyNDcsIDkxNzgyMCwgNjM5ODksIDM5NTgsIDEyMTMyLCAxODQ5LCAwLCA5OTIxLCA0MjQ1MSwgOTE3ODE4LCA0MTE0NywgCi0gICAgNDIwNjQsIDExOTU5LCA0MjQwNCwgNDExNjAsIDAsIDM2MTgsIDAsIDAsIDQzMzAwLCA1MTU2LCAwLCAwLCA5MjksIDAsIAotICAgIDkxNzgyMiwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAwLCA0MTY2MiwgMCwgMCwgMCwgMCwgMCwgNDU3OCwgCi0gICAgNjQ1MTMsIDQxNjY0LCAwLCA0MjU3OCwgMCwgNDE2NjEsIDAsIDQzMzA1LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgCi0gICAgMCwgMCwgNjQ3MDcsIDAsIDQyNDc2LCA3NzMwLCAwLCAwLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgCi0gICAgNDMzNTksIDAsIDY2NDEsIDUyNSwgNDE2MjcsIDAsIDg3NjMsIDAsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgCi0gICAgNDI1MDQsIDQyNTgxLCAwLCA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgMTIwMjM0LCAwLCAxMzE5MywgNjQzNTAsIAotICAgIDExNjY2LCA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgMCwgMCwgNzM4NDAsIDAsIDExMzc0LCAwLCAxMDg4OSwgOTE3OTA5LCAKLSAgICA3NzU3LCA0MjQ2MiwgMTIwMjI2LCAxMjY5OTQsIDY2NDkzLCAyNzE4LCA0MTY4LCA3Mzg0MiwgMTMzMDgsIDEyMDExMiwgMCwgCi0gICAgMTE3OSwgNDQ0MCwgMCwgMCwgMzYzLCAxMTAxNSwgMCwgMCwgNjQyOTYsIDEyNzA5MCwgNjY2OTIsIDEyMDgyNiwgMCwgCi0gICAgNjY0OTIsIDY1OTMsIDY0NjI1LCA0MTk2MywgMCwgMTE5MzI5LCAwLCAxMDAxMywgMCwgMCwgMTI3MDk1LCA5NDkyLCAKLSAgICAxMTc4MiwgNjQzODIsIDEyODMzLCAwLCAwLCAxMjk3LCA0MTYzMCwgNjMwLCAxMjcwOTQsIDAsIDAsIDAsIDEwNDMsIDAsIDAsIAotICAgIDEwMDkwLCAwLCAwLCAzMTMsIDkxNzU2MywgNDE4ODEsIDAsIDQyMzExLCA3NDQ1LCAwLCA1NzUwLCAxMDc1OSwgOTQxOSwgMCwgCi0gICAgOTQwNSwgMTEyNjgsIDAsIDkzOTgsIDg1MjYsIDkzOTksIDk0MjIsIDAsIDY2NDk1LCAwLCAwLCAwLCA0MTcxOCwgMTA3MDcsIAotICAgIDE2MDMsIDAsIDAsIDAsIDYzMSwgMCwgMCwgMTMxNjEsIDY1MjcyLCAwLCAxMDU0NiwgNzQyMTAsIDAsIDExNjAwLCAwLCAKLSAgICAyNzk3LCA3MzgyMSwgNDI0MjcsIDMwNiwgNzE0LCAzMDU4LCA0MjM4MSwgMTIwMDM2LCAxMjcwODAsIDEyMzUxLCA0MjM5NSwgCi0gICAgMCwgMTE2MDcsIDAsIDQyMjgyLCAwLCAwLCA5MTU3LCA3Mzc2NSwgNjYzNjQsIDQyNDMzLCAwLCA3NjAzLCAxMjgwMywgMTgwLCAKLSAgICA0MjE0MSwgMCwgMTIwNjEyLCA2NjQ5NCwgMTI2NzQsIDgyNDQsIDM2MiwgMCwgMCwgODAzNywgOTE3ODA0LCAxMTUzNSwgMCwgCi0gICAgNzQ4NDUsIDUxODUsIDY2Njk2LCA1NTIxLCAxMDMzNCwgNTUxOSwgMCwgMTAzMDIsIDAsIDEwMTA0LCAxMDI3LCA1MTgxLCAwLCAKLSAgICAwLCAxMDUyMywgMTQ0NiwgNDIzMjAsIDQxNjQ2LCA5OTEsIDUxODksIDQyNDcyLCA0MTY0NywgMTIwMTA1LCAxNzIyLCAKLSAgICA1NTgxLCAwLCAzNDA1LCAwLCAxOTQ2NDQsIDU1MjMsIDAsIDQyNjIwLCAwLCAwLCA5NTQ5LCAwLCAxMDU0OSwgMCwgOTY2MSwgCi0gICAgNjY0ODYsIDAsIDEyMDUzNywgMTIwMDI2LCAwLCAwLCAwLCAwLCA0MTk5MSwgMCwgMCwgNzYzMCwgOTg0NiwgNzY4NCwgCi0gICAgMTAzNTAsIDAsIDExNzQsIDAsIDAsIDAsIDAsIDY2NDg1LCAwLCA0MjI3NywgMCwgNDI0NTYsIDY1NjY3LCAwLCAxMjMzMCwgCi0gICAgMCwgMCwgNDI0MTcsIDQyMzgzLCAwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDAsIDc0NDQzLCAwLCAxMDIwOSwgODMxMywgCi0gICAgNDE5NSwgMCwgOTAxMCwgNjY2OTAsIDAsIDAsIDY0ODk0LCAwLCA2NTg3MSwgMCwgMTczNiwgMCwgMzkwMSwgMTIyMjgsIAotICAgIDEyMDE1MSwgNjUyMDAsIDMzODMsIDEwNDQ2LCAwLCA2OTMsIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAxMTk0OSwgMCwgMCwgCi0gICAgMTEwMjYsIDAsIDUzMzIsIDY5NDAsIDY0MTU0LCAxMjYzNSwgMTI3MDA3LCAxMjA2MjgsIDE3NTEsIDI3MywgODE2NSwgCi0gICAgMTMxNjYsIDEyMDc2MywgMCwgMCwgMTI4MjQsIDAsIDQ1MjgsIDUzMjAsIDYzMDEsIDAsIDYxMzMsIDkzMzksIDk0NjMsIAotICAgIDQyMzQ2LCAxMDkyMiwgNjQ1NjAsIDM3NTcsIDAsIDAsIDAsIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIAotICAgIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCAwLCA3NDA5NSwgMCwgNDE4NDgsIDI1NjcsIDY2MDA2LCAwLCA0MDQ0LCAwLCAwLCAKLSAgICAxMjIzMywgMCwgMTAyMywgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMCwgNDIyOTUsIDAsIDAsIDAsIAotICAgIDAsIDk4MzUsIDY2NDk5LCAwLCAwLCAxMjI3NSwgMTA4OTUsIDAsIDI3NCwgMCwgMTg1OCwgMCwgMCwgMCwgMTAxMTgsIAotICAgIDMxMzMsIDAsIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAwLCAwLCA0MjE4MiwgCi0gICAgNzU4MSwgMTk5NDAsIDAsIDQxNjY3LCAwLCAwLCAxOTIzLCA2NTU4MywgNjU4MDIsIDAsIDY0NTk3LCAwLCAxMTkxODQsIDAsIAotICAgIDAsIDY0NjQsIDcwMzYsIDI5OTYsIDE5MzcsIDAsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjUyMTcsIDAsIDAsIAotICAgIDExMDE3LCAwLCAwLCAyOTMsIDAsIDAsIDY0NzkxLCA0MTgyNywgNDI0NjYsIDY1NDE2LCAxMDU3OSwgODU2MCwgMCwgCi0gICAgNjU0MTMsIDExODgzNSwgNDgwMywgMTI5NjQsIDE3MzksIDE5NDEsIDM5MDAsIDAsIDE3MTMsIDAsIDAsIDczOTU3LCAKLSAgICAxMTQwNywgNDI0NDEsIDQxOTcxLCA2Mjk3LCAxMjAwOTgsIDY0MTA1LCAwLCA0MjQ4MSwgMTE3MTYsIDY2NDczLCA3MTc5LCAKLSAgICA0MjI4OSwgMCwgNjQxMDMsIDk2OSwgMCwgOTM1MiwgMCwgNjE2NSwgNjQxMDAsIDAsIDY2MzIsIDczODYxLCA0MjQwMiwgCi0gICAgNzQzMjcsIDc4MDYsIDAsIDg5MTQsIDAsIDAsIDMxODMsIDE0MzUsIDY0ODc2LCAyOTY5LCA2MDQ2LCAwLCA2MjA4LCAwLCAKLSAgICA1NzQ2LCA3Mzc0OSwgMCwgNjQ0MTYsIDQyNDIyLCAwLCAwLCA3MDgyLCA3Mzc3NSwgMzM4LCA1MDU5LCAxOTQ3MTksIDAsIAotICAgIDQyMzI4LCAxMDc2NywgMCwgODExNSwgMCwgMCwgMCwgODIyNywgMCwgMTIxOCwgMCwgMCwgNjU4NDgsIDAsIDAsIDAsIDAsIAotICAgIDEyNjk4NywgNDQ4NiwgMCwgMCwgMCwgMTA5MjUsIDAsIDAsIDAsIDAsIDQyMzA5LCAxMDI1NywgMCwgMTAyNzMsIDAsIAotICAgIDEwMzA1LCA0MjQ2MSwgMCwgNDIzNDksIDg4MzIsIDAsIDY0MTI3LCAxMDY0NCwgMCwgMCwgNDIyNzgsIDc0NDUxLCAKLSAgICAxMjY5ODgsIDkxNzg1NywgNzc5NCwgMCwgNDI0MjksIDExMDgxLCA0MjMxNiwgMTE5MDI2LCAzNjY5LCAzOTY4LCA0MjQ2OCwgCi0gICAgMCwgMCwgMCwgNjU0MDIsIDExOTU4MSwgMCwgMCwgNjQ5MzMsIDAsIDQxOTYwLCAwLCAwLCAwLCAwLCA2NjY3OCwgNDIzOTEsIAotICAgIDE1ODgsIDY1NDAwLCA4NDA5LCAwLCAxOTk2NywgNjUzOTgsIDc4NywgMCwgMCwgMCwgNjExNSwgMTE4OTQwLCA0MTY1NCwgCi0gICAgNDI0ODAsIDAsIDAsIDQxNjU1LCA2NTQwMSwgMCwgMCwgMCwgMCwgNjQ0LCA2NTUwMCwgNDE2NTcsIDEwNzc4LCAzNjU5LCAKLSAgICA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgMCwgMTA1MDIsIDc0NDU3LCAwLCAwLCA0MTU1NCwgMCwgODIyMCwgMCwgCi0gICAgNDE1NTcsIDAsIDAsIDExMDcwLCAwLCA1MTU3LCA0MDIwLCA3Mzg1OCwgNDE1NTUsIDk1MTQsIDY0ODE4LCA2NTEwMywgCi0gICAgNjQ2NDEsIDAsIDExOTYzMywgNzUyMCwgMCwgNzQzNzcsIDExMDI5LCA2NjY1MSwgMCwgMCwgMTE4OTMwLCA2NDUyNywgMCwgCi0gICAgNzg3NywgNzM4MDMsIDAsIDAsIDEyMDA5NiwgNzQ2MDIsIDAsIDAsIDAsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIDEyMTkwLCAKLSAgICAxMjMxOSwgMCwgMCwgMCwgOTUwMiwgNjU0MjcsIDAsIDY1NDI0LCAwLCAwLCA5NzM0LCA2NTQyNSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTAxMTIsIDEwODI3LCAwLCA5ODY2LCA3NDUyNywgNjY2NzUsIDAsIDg2MjUsIDY0MzQ2LCAxMTI5MCwgMTA0NzcsIDAsIAotICAgIDg2MzYsIDAsIDgzMTUsIDY1NDQ0LCAwLCAwLCA3NDU5NSwgNjE1MiwgMCwgMCwgNjYyOSwgMCwgMTIwMTcxLCAwLCA3NDU4OSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNDYsIDExNDkwLCA0MzEyNywgNDQ4NSwgMCwgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIAotICAgIDEyNDM3LCAwLCAwLCA3MDQwLCAzNTg4LCAwLCAxMjgyNSwgMCwgMCwgMTI3MjUsIDAsIDAsIDEyMDE2NywgMjIzLCAwLCAwLCAKLSAgICAxMjAxNjYsIDQyNDQ0LCAwLCA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIDEyMDE2NSwgMCwgMTgwNSwgODc3MiwgMCwgMCwgCi0gICAgNjUwNzgsIDY1MjQ3LCAwLCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgMCwgMCwgNjQ4MDAsIDY1MjM2LCA2NzY0NCwgCi0gICAgNjgxMjYsIDEyMTMsIDAsIDY0MDc1LCA3OTcsIDY0MDc0LCA4NzM0LCA0MjEyLCAwLCA2NDM4NywgNDExNSwgMCwgNTAwNSwgCi0gICAgNjQwNzAsIDY0MDczLCAxMDY3OSwgMCwgMCwgMCwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAKLSAgICA2NTA4OCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCAwLCAxMDcwMSwgMTc2NCwgMzEwMSwgMCwgNjUyOTEsIDEyMDE1OSwgMCwgCi0gICAgMTEzNzMsIDc0NTY2LCAwLCAxMjAxMDMsIDg2NjMsIDkzMTIsIDQxNjQ0LCA0NTM5LCAzNzg3LCAwLCA5MjIyLCAwLCAwLCAKLSAgICA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCAKLSAgICA3OTQ3LCAxMjAwMywgMCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNzQ4MDcsIDM2MTMsIDAsIDAsIDAsIDY1ODg4LCAxMjAzMDcsIAotICAgIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAwLCAxMTg4MDYsIDAsIDExNTcsIAotICAgIDY0OTAzLCA4NjM4LCAwLCAwLCAwLCAwLCAxMjAzMTksIDgyMzUsIDAsIDQ0MDUsIDEwMDg2LCAwLCAwLCAwLCAwLCA2NTQzMCwgCi0gICAgNzQwMTMsIDYwNzksIDAsIDEwNzY0LCAwLCA2NDI5MSwgMCwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMjAzMTMsIDY0MzI3LCAKLSAgICAxNTU4LCAwLCAxOTkxLCA3ODgyLCA0MjI1NCwgMCwgNDE3MDAsIDUzMCwgMCwgMTA0MjgsIDExOTMzNSwgMTIwMDIsIAotICAgIDExOTMzNiwgNTc0MiwgNDMwNzYsIDQ2OTIsIDY0NjMwLCA0MTgyMywgNDAwNywgNTAwNCwgMTE5MzM0LCA3ODk2LCA3NTEsIAotICAgIDY1OTUsIDY1OTYsIDAsIDY2MzczLCAwLCAwLCA2NDkwOCwgMCwgNjMxMSwgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIAotICAgIDQzMTA4LCAwLCAwLCA0MTcwNSwgMCwgNjU5OCwgMCwgNjU5OSwgMCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIDAsIAotICAgIDY1OTcsIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMCwgMCwgMCwgMTk4OCwgNTQwNywgNjc4NjUsIDI0MzAsIDQxNjc4LCAKLSAgICAwLCAwLCAyMzM2LCAwLCAwLCAwLCAxMjA0NDIsIDAsIDE5MjEsIDEwOTQ3LCAxOTkyNywgMCwgNjU0MDYsIDAsIDE5OTEzLCAKLSAgICA0Mjg0LCAxMzIxNywgMCwgMCwgMTI4NDEsIDkyMjksIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIAotICAgIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCAwLCAxODU0LCAxMDc5NCwgMCwgMCwgMCwgMCwgMCwgNTI4MCwgMCwgCi0gICAgNDM0NCwgMTI5MDUsIDY1NDMzLCA2MDc2LCA2NDc5MywgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAKLSAgICAxMjkzNCwgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgNjA3MSwgNjU0MzQsIDAsIDQ4MDQsIDY5OTQsIDAsIDAsIDAsIAotICAgIDQxNjk2LCA0NjcsIDAsIDAsIDAsIDAsIDAsIDg0MjEsIDAsIDAsIDY0ODAxLCA1MDIsIDAsIDY1NDMxLCAwLCAwLCAxMjA0MywgCi0gICAgMTMwMywgMzE2LCAwLCAyMDI5LCA2NTE5MSwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDAsIDAsIDQ4NjAsIDE5NDY0NSwgMCwgCi0gICAgNDI0ODgsIDAsIDk1ODMsIDAsIDU1NDYsIDgwMTksIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIAotICAgIDU1NDMsIDExOTI0NSwgNjM3NTEsIDEyMTM3LCA1NTQ4LCAwLCAwLCAwLCAwLCA2NTcyNiwgNjA3NywgMCwgNjU0NTIsIDAsIAotICAgIDExMzAxLCAwLCAwLCAwLCA5ODc0LCAwLCAwLCAwLCAzMDUwLCA2NTQxMCwgMCwgMCwgMCwgMCwgNDI4MzAsIDAsIDY2NzE2LCAKLSAgICAwLCA0NjkxLCAwLCA5MzQ1LCA2MjEsIDAsIDAsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgMCwgCi0gICAgOTQ3NCwgMTA1NDUsIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCAKLSAgICAxMTkzNDEsIDk5OTYsIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDAsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCA1NDUsIAotICAgIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDAsIDg4NTksIDQxNDU5LCAwLCAwLCAxMjA3NDAsIDAsIDAsIDkxMTksIAotICAgIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCAwLCAwLCA0MTAsIDEyMDQ0OSwgCi0gICAgMTgwMiwgMTIwNzg5LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgMTAxMjYsIDEyMTE2LCAKLSAgICA0MTY3MywgMTIwMzcwLCAxMTQyMiwgMTIwMzcyLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgMTIwMzY4LCA0MTM0NSwgCi0gICAgMTIwMzYyLCAxMjAzNjMsIDExNzQ4LCA0MjE1OCwgNzk0MSwgMTEwNzYsIDg3NDksIDEyMDM2MSwgMTI2OTgsIDY0ODU4LCAKLSAgICAzNjEsIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgMCwgNDU2OSwgNzQxMzAsIDAsIAotICAgIDExOTIyMSwgMTk0NjMwLCA2MTEsIDc0MTI5LCA2NDg3MSwgMCwgNjU2MjksIDAsIDAsIDAsIDAsIDAsIDEyMDU0MywgMCwgMCwgCi0gICAgNjI5MSwgMCwgMCwgNDE2NjksIDcwOTQsIDkxNzkyMSwgMCwgMCwgNzQwNTQsIDAsIDAsIDAsIDgzOSwgMCwgNzY5NSwgCi0gICAgODc2OSwgNjUyNDYsIDQ4MjksIDAsIDQ4NTksIDY0NDY3LCAwLCAwLCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDAsIDAsIDAsIAotICAgIDAsIDY0NzY0LCA0MjEwLCAwLCAwLCA4MDQsIDAsIDAsIDEyMjk4LCAwLCAwLCAwLCA2NDkyNCwgMTAwOTEsIDczOTMxLCAKLSAgICA5NDY4LCA3NDI0NSwgMCwgMCwgNzQyNDYsIDAsIDEyODM5LCA2NDY2OSwgMCwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgCi0gICAgMTE5MjI5LCAxMTA0OSwgMCwgOTE3NTQ5LCAwLCA4NDgyLCAwLCAwLCA1MDMyLCAwLCAxMTk0MCwgNjc4ODgsIDY2NCwgMCwgCi0gICAgNTAzNCwgMCwgMCwgMCwgMCwgNzM4ODgsIDAsIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIAotICAgIDEyMDM3NywgMCwgMTIwODE5LCAwLCAxMjAxNjgsIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgCi0gICAgNDExNjIsIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgCi0gICAgMTE4ODY3LCAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAwLCAwLCAxNjYzLCAxMDQxOSwgNzQwMjUsIDQyNjM2LCAKLSAgICAwLCAwLCAwLCAxMjA2NTYsIDAsIDAsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIDAsIDExOTEwNywgCi0gICAgNDM2MTIsIDY0MzQ0LCAwLCAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDAsIDg5ODksIDIyMSwgNjU2ODYsIDAsIAotICAgIDAsIDgwMTAsIDcxOTEsIDQ5NjIsIDAsIDg4NTUsIDAsIDAsIDY0NDY5LCAwLCAxMDU1NSwgMCwgMCwgMCwgMCwgMTIwNDI3LCAKLSAgICAxMDQ1MSwgMCwgMTIwMTUyLCA3MjQ1LCAxMjQ0MywgNzQ0MDUsIDEyMDE0OCwgMTIwMTQ5LCAxMjAxNTAsIDM4NzMsIDgzNjcsIAotICAgIDAsIDEyMDE0NiwgMTIwMTQ3LCAwLCA2NjUwNywgMCwgMCwgMTEwMTAsIDEyNzIzLCA3NDA1OSwgNzQwNjIsIDYyMTcsIAotICAgIDU4OTYsIDAsIDc2ODIsIDc0MDQ5LCAxNDYyLCAxMDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDI1OTUsIDAsIDc0NDAyLCAKLSAgICAxMTg4NjAsIDAsIDEyMDQxOSwgMCwgNzQwNTIsIDAsIDAsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgMTIwNDE4LCAwLCAKLSAgICA2NDc2NSwgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCAxMjA3MzAsIDAsIDYyMTYsIDAsIDEwNzU1LCA5NDU1LCAwLCA4MTI0LCAKLSAgICAwLCA5NDcwLCA2OTQ0LCAwLCAwLCAwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAwLCAwLCAwLCA3Mzc2NCwgODIwNCwgMzYxNCwgCi0gICAgMjgyNywgOTY5NiwgMCwgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDEyMDUwMiwgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgCi0gICAgNDI1OTksIDQyNTk3LCAwLCAxMjA0MDksIDAsIDAsIDg1MzcsIDAsIDAsIDAsIDAsIDAsIDQxMTk5LCAxMDEyMSwgMjAyOCwgCi0gICAgMCwgMCwgMCwgMCwgMzA2MiwgMCwgNzQ0NDcsIDEyNjA4LCAwLCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTI1ODAsIDAsIAotICAgIDEyMDc3NywgMCwgNDExNTUsIDAsIDc0MDcxLCAwLCAwLCAxMjcxMywgMCwgMCwgMCwgMCwgMCwgMTczNCwgMCwgMCwgMCwgMCwgCi0gICAgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIDAsIDEyMzAsIDAsIDAsIDM1OTcsIDk3NjEsIDEwNTg0LCAKLSAgICA3NDIzNSwgMCwgNDAzNywgMCwgODM1MiwgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIDAsIDAsIDY3ODQ2LCAwLCA5NzA0LCAwLCAKLSAgICAwLCA3NDI4NCwgMCwgMCwgODY2MCwgMCwgMCwgMCwgMCwgNzQ0ODIsIDQ0ODMsIDE3MDksIDAsIDk5MDksIDYwODAsIDAsIDAsIAotICAgIDE3NDYsIDEzMTUsIDg2NjcsIDAsIDAsIDEzMTQwLCA2NTg5OSwgMTA2MDQsIDAsIDQ0ODAsIDExMjY2LCAwLCAxMjI2LCAKLSAgICA2OTMwLCAwLCAwLCAwLCAxMDg5NywgNDEyMzAsIDYwNSwgMCwgNzQ3ODUsIDEyMDM1NiwgMCwgMCwgNDE1MDAsIDAsIDMxMSwgCi0gICAgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIDEwODc3LCAwLCA2NDg4NSwgNzQyNzIsIDAsIDAsIDAsIDAsIAotICAgIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCA2NDYwNiwgNDI1ODksIDAsIDAsIDUwMzcsIDAsIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgCi0gICAgNDE1MDgsIDQxMjAxLCAzMjMsIDQzMzI4LCAwLCAxMjA2OTgsIDEyOTUsIDAsIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAwLCAKLSAgICA2NTEyMywgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDAsIDY1NDIwLCAwLCAwLCA5MTc4ODYsIAotICAgIDUwNDksIDAsIDExOTAxMSwgNzA2LCA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIDAsIAotICAgIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDAsIDExODMsIDAsIDcwMTcsIDQyODUyLCAKLSAgICAwLCA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDAsIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDQyODQ4LCAwLCAKLSAgICA4OTIwLCAwLCAwLCA3OTYyLCAxMjIxMSwgOTgzNywgMCwgNjYyMjcsIDAsIDQxODQsIDAsIDAsIDEwMTc3LCA3Mzc3NywgCi0gICAgMTg1NywgMCwgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgMCwgMCwgNDYyNCwgNzgxOCwgMTk0NjIyLCAwLCAwLCAKLSAgICA3ODA1LCAwLCAwLCA2OTM1LCAwLCAwLCAwLCAwLCA0MzMyNywgMCwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCAKLSAgICA4NDk3LCA4NDk2LCAwLCAwLCAwLCAwLCA5NTQzLCAwLCAwLCAwLCA2NTg0OSwgMCwgMCwgMCwgMCwgMCwgODY4NCwgMCwgCi0gICAgNjEwMiwgMCwgNTI5OCwgMCwgNTI5NCwgMCwgMCwgMCwgMCwgMCwgMTE5ODI2LCAwLCAxMTkyMTUsIDAsIDEyMDczLCAwLCAwLCAKLSAgICAwLCAxMzEwOCwgMCwgNzQzOTcsIDQxNDY4LCAwLCAwLCA1MjkyLCAwLCAwLCAxOTM5LCA1MzAyLCAzOTcwLCAwLCAxMjQ1NSwgCi0gICAgMTc5MywgMCwgMCwgMCwgNjY0MywgMCwgNjUyNjMsIDAsIDAsIDQxMjkzLCAwLCAxMTkxMjUsIDAsIDEzMjE5LCA5NTY5LCAwLCAKLSAgICA3NDM4MywgMCwgMCwgMCwgNTUwMCwgODgxMywgMCwgMCwgMCwgNTMyMiwgMCwgMCwgMCwgNTMyNCwgNjY0NDMsIDM3ODQsIAotICAgIDQxNjE0LCA2NTI2OSwgNjIzMCwgMCwgMCwgNDMzMjQsIDMzNjAsIDAsIDExNTIzLCAwLCAwLCA0MTczMiwgNzE5NywgMCwgMCwgCi0gICAgMCwgNDE4MjEsIDEyNDksIDAsIDAsIDAsIDExODk5MiwgMCwgNjQ4OTksIDY0NzYzLCA0MTE0OSwgNDE4MDcsIDQzMTYyLCAKLSAgICA0MTgxNSwgNDExNTAsIDAsIDEwNTcxLCAxMDA5NiwgMCwgMCwgMCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgMCwgCi0gICAgNDE5OTAsIDAsIDQxODExLCA3NDQ2NiwgMCwgNjY3MCwgMCwgMCwgMCwgNDMwOTIsIDQzMzI1LCAwLCAxMDE2OCwgMCwgCi0gICAgOTc4MSwgMCwgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDAsIDMxNSwgMTI4MTMsIAotICAgIDAsIDExOTY0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDAsIDY3ODQ3LCAKLSAgICAwLCAwLCAwLCAwLCA4Nzg3LCAwLCAxOTQ2MTYsIDQxNjE4LCAxOTQ2MTUsIDAsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIAotICAgIDE5NDYxMiwgMCwgMCwgNDIwODgsIDAsIDAsIDcxNzYsIDAsIDEwMTM3LCA2MTIxLCAxMDk5NSwgMCwgNzQ1MzQsIDgxMTksIAotICAgIDY0ODc0LCAwLCAwLCAwLCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgMTE4ODA0LCAKLSAgICAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCA0MTIzNiwgMCwgCi0gICAgNjUxNjgsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgMzY3MCwgMCwgMCwgMCwgMCwgNzg5MCwgMCwgMTEyOTgsIDQzMzE1LCAKLSAgICAwLCA2MjI5LCAxNTkzLCAwLCAwLCA2MTksIDQ2MzUsIDY1MDgwLCAwLCAwLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIAotICAgIDExODA4LCAxMTkyMTQsIDc0MTE1LCA5MzY2LCA0Mjc5MCwgNDIwMDYsIDAsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAKLSAgICAxNTA3LCA2NTMyMiwgNjUzMjEsIDY1MzIwLCA2NTMzNSwgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCAKLSAgICA2NTMyOSwgNjUzMjgsIDAsIDkxMjgsIDExODg4NSwgNDIwNzMsIDQxNjMxLCA2NDU5MCwgMCwgNDM3MSwgNzE5NiwgNjUzMTgsIAotICAgIDIwMzUsIDY1MzE2LCA0MTA2LCA2NTMxNCwgNjUzMTMsIDQyMDc0LCAwLCA0MTIyOCwgMCwgMTE5MTE3LCA0MTI0MSwgNzkwMywgCi0gICAgNDEyMzksIDQzNTMzLCAxMjcwOTksIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgMCwgODQ4NywgOTEzMSwgMCwgCi0gICAgNDYxNSwgMTI2OTUsIDAsIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgMCwgCi0gICAgNjY0NTUsIDY0NzM4LCAzMjE5LCAwLCAwLCAwLCAxMDM3LCAwLCAyMDI1LCAwLCAxMzA5OCwgMCwgMTA2MzcsIDQ1NjgsIAotICAgIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDE5NDU4NywgMTEwNzIsIDAsIDAsIDAsIDEyNjA2LCAwLCAyODI1LCAwLCAKLSAgICAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDAsIDAsIDAsIDEyMDU5MywgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCAKLSAgICA0MzYxNCwgMjgzMSwgMCwgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgCi0gICAgNDEzMzIsIDAsIDEyMzMzLCAwLCAxNjY4LCAwLCAwLCAwLCAxMTg3LCAwLCA0MjYyOCwgMCwgMCwgMCwgMCwgMzI0MCwgMCwgCi0gICAgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAwLCA1NzEsIAotICAgIDAsIDQ5MTgsIDAsIDUyODgsIDAsIDg5MTYsIDY1MDQ4LCAxOTA5LCA4ODY0LCAwLCAwLCAxMDczNiwgMCwgMTE1NzEsIAotICAgIDc2MTUsIDAsIDAsIDQyMzcsIDAsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAwLCAKLSAgICAxMTQwMywgMCwgMCwgMCwgMzc5NiwgMCwgMCwgMzk5NCwgMTE0MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDY0ODU3LCAwLCAKLSAgICAyODU1LCAwLCA2NjMwOCwgNDE2MjEsIDAsIDAsIDAsIDEwNjU0LCAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCAwLCAKLSAgICA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgMTE5OTMxLCAwLCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgCi0gICAgMjM3OCwgNDMxMzYsIDAsIDg0NjYsIDAsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAxMTQwOSwgMCwgCi0gICAgMCwgMCwgNjYzMTksIDAsIDAsIDExNjEyLCAwLCAwLCAyMzc0LCAwLCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIDUyODYsIAotICAgIDExOTI5NywgMCwgMCwgNjQ5MjUsIDAsIDAsIDAsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAxOTQ1ODEsIDMzMDksIAotICAgIDAsIDAsIDAsIDAsIDExOTc1LCAwLCA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIDAsIDAsIDQyNTY1LCA0MTY1MSwgCi0gICAgMCwgMCwgMCwgNDE2NTAsIDAsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDY1MTAwLCAwLCAKLSAgICAxNDc1LCAwLCAwLCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgMCwgMCwgMzI1NiwgMCwgNDIwNzYsIDAsIDAsIDAsIAotICAgIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAwLCAxMDU2MiwgNzQyMTUsIDY3NjA4LCAwLCAwLCAzMjQ4LCA3NDI5NywgMzI2MSwgCi0gICAgOTAxNSwgMCwgMCwgMzYzNSwgNjQzMzcsIDAsIDAsIDAsIDcxOTUsIDAsIDIwMDcsIDY0NDMxLCAwLCAwLCAwLCAwLCA2MzUsIAotICAgIDAsIDAsIDY1NjEzLCAwLCAwLCA3Mzk5NywgMCwgMCwgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMCwgNDE3NiwgMCwgCi0gICAgMjAzNCwgMCwgMTIwODA1LCA2NTg5MSwgMTI3MDM4LCAwLCAzMTgsIDIwMzgsIDAsIDAsIDAsIDM2NDksIDEzMTQ5LCAKLSAgICA0MjE0NSwgNDI3OTgsIDM2MzQsIDEyMDI5MSwgMTE4OTI3LCAwLCAxMjAxMjQsIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgCi0gICAgMTIwMTM0LCA3NDIzOCwgMTIwMTI5LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAxNzYxLCAxMTgxMiwgNjUzNzksIAotICAgIDc0NTA5LCAwLCAxMTU5LCAwLCAwLCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIDQxNjgwLCAwLCAwLCAxMTUzNCwgMTUxNCwgCi0gICAgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMCwgMTI5ODksIDE5NDU2MCwgOTM2OCwgMTI4NDgsIDE2MjQsIAotICAgIDQzMjcwLCAwLCAxOTQ1NjMsIDEwODE4LCAxOTQ1NjIsIDEyNjQ5LCAwLCAwLCAxMTk0LCAzMjQyLCAwLCA5NTU1LCA4NTk4LCAKLSAgICAxMjAyOTksIDYxNjksIDAsIDE1NTEsIDI3OTgsIDY1MTc2LCAxMjAyOTgsIDQyNzUyLCAxMTkwMjUsIDAsIDY3ODc1LCAKLSAgICAxMjAzMDEsIDM0OTUsIDY2NjQ4LCAwLCAwLCAwLCAwLCA0ODkxLCAwLCAxMDY0MSwgMCwgNzM3NDYsIDAsIDAsIDAsIAotICAgIDczNzg3LCAwLCAwLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgNjQ5NTIsIDAsIDE5MywgMCwgMCwgMCwgMCwgMCwgCi0gICAgNTI3MSwgMCwgMTE5NjYxLCAxMTg4ODIsIDEzNjIsIDEzMjk3LCAwLCAwLCAwLCAwLCA3Mzc4OSwgMCwgNjY1OCwgNDQyNiwgCi0gICAgMCwgMCwgMCwgMTE5MTIzLCA3Mjc2LCA0MjE2MywgNTIyMCwgMCwgMCwgMCwgMjQxNiwgMzMxMCwgNjYwMzAsIDAsIDM3OSwgCi0gICAgMCwgMCwgMCwgMCwgMzIyMywgNjU0OTIsIDEyODQsIDAsIDQ1NDksIDAsIDAsIDAsIDAsIDEwODA3LCA5NTU4LCAwLCAwLCAKLSAgICA4NTE1LCA4Njg4LCAxMjg2NiwgMCwgMzI5NCwgMCwgMCwgMCwgMCwgNzU2NCwgMCwgNDMzMjksIDAsIDAsIDczNzU3LCAKLSAgICA2NjQ1NiwgNDIzNTksIDAsIDIwMzEsIDAsIDcyMDIsIDAsIDEyNjc2LCA2NjYxNSwgMCwgMzIxNSwgMCwgNzcxMCwgMTYxMCwgCi0gICAgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAwLCA2NTkyNCwgMCwgMjI4LCAwLCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgCi0gICAgNjIyNSwgMCwgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgMCwgMCwgODUwMiwgNTc2MiwgCi0gICAgMTk2NywgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgMCwgMCwgMCwgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCA0MjUzNywgCi0gICAgMTU1NywgMCwgMCwgMCwgMCwgODYzMSwgMjU0NSwgMTIwNjcyLCAwLCAwLCA3NDE5MCwgMCwgMCwgMCwgNDI3NjIsIDAsIDAsIAotICAgIDE2NTAsIDI2MiwgMTYzNywgMCwgNzkwMSwgMzIzOCwgMCwgNDE4NjEsIDAsIDAsIDY1MTU4LCAxMDg2MCwgMCwgMTE5MTM0LCAKLSAgICA3NTI3LCAwLCA0MzMxOSwgNjQxOSwgMCwgNDUsIDAsIDAsIDAsIDAsIDExOTgxMCwgNzE5NCwgNTI5MSwgMCwgMCwgMTMxMjksIAotICAgIDAsIDkwODQsIDAsIDg3MzcsIDAsIDEyODgxLCAwLCAxMjkwNiwgOTYzOSwgNzkxMiwgMjYyMCwgMCwgMCwgMCwgMCwgMTc5LCAKLSAgICA2NTg5NiwgMCwgNjQ3NTYsIDI4NTMsIDAsIDExODgxMywgMCwgMTE4OTk2LCAwLCAyODUwLCA4MDg0LCAwLCA3Mzg1MCwgCi0gICAgMjgwMSwgMTE5ODM3LCA0MjA2OSwgMTE5ODM5LCA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgMTE5ODQzLCAxMTk4NDIsIDc0NzY3LCAKLSAgICAwLCAwLCAwLCAwLCA4MjQ1LCAxMTkzMTMsIDMxNTgsIDExOTg1MywgNDM4OSwgNzM4MTMsIDkyMywgMTE5ODU3LCAxMTk4NTYsIAotICAgIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAxMTk4NDksIDQ2MTIsIDExOTg1MSwgMTE5ODUwLCAKLSAgICA3MjUzLCAxMjcxMTAsIDEyMDYxOCwgMCwgMTA3ODIsIDM2MzcsIDEyOTk2LCA0MzU0MiwgMCwgNjQ1NzgsIDAsIDMyMjgsIAotICAgIDczODY5LCA4NzgzLCAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDExODkzOSwgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDAsIAotICAgIDQzMzE2LCA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIDAsIDY0NTAwLCA2ODEzMywgMCwgMCwgMTg1NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIDAsIDAsIDAsIDAsIDc0MDcyLCAwLCAwLCAwLCAwLCAyMDMzLCAxMTkwMDgsIDAsIAotICAgIDE5NTAyNiwgMCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIDAsIDAsIDY1Njc0LCAwLCAwLCA0MTY4OSwgMCwgNzQwMDYsIAotICAgIDY0OTA5LCA2NjQ2LCAxMTc5MCwgNzQwMTksIDAsIDAsIDAsIDg1NjEsIDQ1NzMsIDAsIDUzMjYsIDAsIDEyMDYwNSwgNzIzMCwgCi0gICAgODI1NywgMCwgODc3OCwgNDE2ODgsIDAsIDY1Nzc2LCAwLCA4MzE0LCA2NDU5LCAwLCA3NjI4LCA2NTA5MiwgNzM5MDMsIAotICAgIDY2NzIxLCAxMTM0MiwgMCwgMCwgMCwgMCwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIDAsIDAsIAotICAgIDExOTQ2LCAwLCAzMjU3LCAwLCAxMjMwNywgMTg0NSwgMCwgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAxMDA4OSwgODcwLCAKLSAgICA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIDAsIDQ1NjMsIDAsIDAsIAotICAgIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMCwgODY4LCA4NzMsIDc2NDIsIDAsIDg2OSwgODc0LCA3NjQ0LCAwLCAKLSAgICA4NzUsIDc5MCwgMCwgMCwgMCwgMCwgNjYxODIsIDAsIDU0MjksIDAsIDY2MTgwLCAwLCA2NjE4MSwgMCwgMCwgMCwgNDIwNjcsIAotICAgIDAsIDU0MzMsIDEwNjU3LCA3OTExLCAwLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDAsIDU0MjUsIDQ5NzcsIDk5OTksIDUzMTcsIAotICAgIDU0MjMsIDQ2MTEsIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgMCwgNDQxOCwgNjYxODQsIDQ2MjgsIAotICAgIDQyNDUsIDAsIDAsIDAsIDE4NTEsIDAsIDAsIDExOTA4LCAwLCA5MzYwLCAxMTg4OTcsIDAsIDQyNzc2LCA2NjE4NywgCi0gICAgMTI4MzcsIDg4MjksIDAsIDAsIDAsIDAsIDQzMzE4LCAwLCA4ODA5LCAxMTk5NzQsIDAsIDAsIDEyMDYwNCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzQyNywgMCwgNDU4OCwgMCwgMCwgNzQ0ODQsIDAsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDAsIAotICAgIDAsIDc5MywgNzQ0MDQsIDAsIDMwNSwgNTY3LCAwLCA4NDIsIDAsIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAxMTg4NzcsIDAsIAorICAgIDY0OTA3LCA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDAsIAorICAgIDAsIDQzMjM2LCAzMzgyLCA0MjQ0OSwgNjQ5OCwgMTY1OCwgMTE5MzYsIDc4MjMyLCAwLCAxMTI2OSwgMTAxNTEsIDczNzU5LCAKKyAgICA0MzEwMCwgNzQ0NDksIDY1NTA4LCAwLCAwLCAwLCA4OTM1LCA5MTc5ODUsIDAsIDAsIDAsIDYxNiwgNzQ3NTMsIDY1MTc4LCAKKyAgICA0Njg0LCA3ODcwMSwgMTE5NjUzLCAwLCAwLCAwLCA2MDQ4LCA3NDQ2MCwgNDIxMTAsIDczOTY1LCAxMDg3MCwgODU1NywgCisgICAgMTEwNTQsIDY4NjY0LCAxMTkwNDksIDk2ODEsIDQ0NzUsIDAsIDQxMTQyLCAyMTAwLCAwLCAxMjA3MzEsIDYwMzUsIDAsIAorICAgIDc2NTEsIDEwMjk2LCA2NDQ0MywgMCwgMCwgOTE3OTg3LCAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgMCwgMTAzOTIsIAorICAgIDEwMzI4LCA0MDk5OCwgNDM0NjIsIDc0NDg4LCAwLCA5ODAwLCA4OTc5LCAwLCAxMTkxMzEsIDQxMDAwLCAwLCAxMTkyMzksIAorICAgIDY0ODcsIDMzODYsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgNDMyNDYsIDc4MjQzLCAxMDIyMCwgNjY1MDUsIDQxMjAwLCAKKyAgICAxMjg1ODMsIDQ0MjUsIDAsIDAsIDAsIDQzMDc0LCA3Mzc5OSwgMCwgNzgxNDcsIDAsIDEyMTczLCA3ODU0NSwgMCwgMCwgCisgICAgNjUzMzgsIDAsIDAsIDExOTU4MiwgNDQ3NCwgMCwgNDMwOTMsIDAsIDE1ODcsIDAsIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgCisgICAgMTM2OSwgMCwgOTk1OSwgNzkyNywgMCwgNDU2MCwgMCwgMCwgOTIyNzcsIDAsIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIAorICAgIDQ1MTQsIDY2NDM0LCAwLCA4MTk0LCA2NTQ2MiwgMTA2MjYsIDEwOTY1LCAwLCA4ODkzLCAwLCAxMjU0MiwgMCwgNjUzNDEsIAorICAgIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIDEwNDc1LCAwLCAwLCAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAwLCA2NTI3OSwgCisgICAgMTI3MTAyLCA2ODIwNywgMTI3MTAwLCA2NTYwNSwgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgMTI4ODI0LCAwLCAKKyAgICA4ODk5LCA3Nzk4LCA2NDQ3NCwgNjQyNTksIDAsIDY1MTg4LCA3ODIwLCA0MzAxOCwgMCwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIAorICAgIDEwODg0LCA3Nzk4MiwgMCwgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCAKKyAgICA1NzMwLCAyOTk5LCA2MzQyLCA2ODYzNiwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIAorICAgIDYzMjMsIDE5NDY4NCwgODIyNCwgMCwgODkzOCwgNjA0MywgMTI3MzgsIDAsIDAsIDUzMjEsIDAsIDE5NDc5OCwgMCwgMjU4OSwgCisgICAgNzQzMzIsIDE2ODksIDc4MDIsIDQ2ODMsIDc0MzE4LCA0MjcwNCwgMTIwMjk2LCAxMTkwNSwgMCwgMCwgMTI4NTE2LCAKKyAgICAxMjgxNjMsIDc0NTEzLCA2MDQ5LCAwLCA0MDI3LCA4MzQsIDExODk2MiwgMTgwMywgMCwgMTUwMywgMCwgMCwgMCwgNTczMSwgCisgICAgMTM4MSwgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgOTY2OCwgCisgICAgOTc2NiwgMCwgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgMjg4NywgMCwgCisgICAgMzUyNiwgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAxMjgyODgsIDc3ODk1LCAKKyAgICA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIDkxNzg0MSwgODYzNSwgCisgICAgMCwgMTA2MjMsIDQwOCwgMTE5MDU4LCAxMjc1MDcsIDEzMjk4LCAwLCA3NDI2LCA0MTY0MSwgMTI3MTcsIDAsIDc2MDcsIAorICAgIDEwNjM5LCA2NjcxMywgMCwgMCwgNDE2NDMsIDc0MTM0LCAwLCA4NzEzLCA0MTY0MCwgMTAyMjEsIDQxNjQ1LCA2NjcxMiwgCisgICAgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCAwLCA3NzkwMSwgMzQ3MiwgODY5NywgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAwLCAwLCAwLCAwLCAzMjQ3LCAxMTk4NTQsIAorICAgIDY1MDE3LCAwLCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAwLCA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAwLCAKKyAgICAwLCAwLCA4Mjg1LCAwLCA0NTA5LCAwLCA2NjQ3MSwgMTIyMTYsIDAsIDQwOTg4LCA5MjU5MiwgMCwgNDE3MjcsIDAsIAorICAgIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIDY0OTQwLCA3MDI3LCAzODg2LCAwLCA0MjQ1NywgCisgICAgMTE5MDA4LCAwLCA5OTYsIDY4MTIzLCA5MTc1NzEsIDQyNDksIDAsIDkxNzU5NCwgMTE3MDcsIDgyMjIsIDAsIDc5MzksIAorICAgIDkyNDU0LCA5MjQ2MCwgMTI3ODAxLCA5MTc1OTIsIDEyODM1OSwgODUzNCwgMTI3MTU0LCA0MDk4MywgMCwgMCwgMCwgNzIwMSwgCisgICAgMTI1NjEsIDAsIDQyMzcxLCAxMjU1OCwgMCwgOTE3NTQ5LCAxMDA1MiwgNDA5ODIsIDAsIDAsIDE0ODgsIDAsIDAsIDAsIAorICAgIDkxNzU1OSwgMCwgMCwgMTU2MywgMTI4MDM0LCA5NjE5LCAwLCAwLCAwLCAxMjc4NzIsIDAsIDU4MDMsIDc3OTcsIDYwNzAsIAorICAgIDEwMDA2LCAwLCAyOTIyLCA2MDgyLCAwLCA2NTAwOSwgMCwgMTI1NjcsIDEyODcwMywgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIAorICAgIDkyMDAsIDEwMDQ2LCA5NjEyLCA0MjE1MywgODIxOCwgOTQ4NSwgMCwgMjAzMiwgNzgzNTQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQzMDg1LCA2MDU3LCA1MDgsIDEyODU4NSwgMTI4MDE1LCAxMjAyNjUsIDAsIDkyNDA1LCAwLCAwLCA2MzgsIDYwODMsIAorICAgIDExOTA3MiwgMCwgMCwgMjMwNSwgNzgzNDgsIDAsIDAsIDYwNTYsIDY2NTksIDAsIDAsIDYwODUsIDAsIDAsIDM5MTUsIAorICAgIDQxNjM0LCAwLCA0MTYzOSwgNjM5MTIsIDExOTQxLCAwLCA0MDI4LCAxNzg3LCA0MjE4MCwgNDMwOTYsIDkyNjkwLCAzMjQ5LCAKKyAgICAxNzY4LCAwLCAxMjMyOCwgNTAxLCAxMjcwNzQsIDEwNjAxLCAwLCA1ODMsIDAsIDQxOTc3LCAwLCA2NjAwNCwgMTE5MzUwLCAKKyAgICA2NTA1LCA3NDAxMCwgMCwgMTMwNjQsIDU1MjY3LCAxMjA4MTAsIDY1MDAsIDU1MjYsIDY1MDQ5LCAwLCA3Mzc2NCwgMCwgCisgICAgOTIzNzYsIDEyNzQ1LCA5Njc4LCAwLCAxMjA1ODcsIDk4NjksIDEyODgxNSwgMTc3MSwgMCwgODkzNiwgMCwgMCwgNDIwOCwgCisgICAgNzgzNDEsIDExOTExNSwgNzgzNDIsIDAsIDAsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCAxMjg3ODgsIAorICAgIDY2NDc1LCAwLCA1MDI3LCA3ODE3MiwgMTI4ODc4LCAwLCA1MDY5LCA3Mzg2MiwgNTAyOCwgOTg5NywgMCwgNzM3MzksIAorICAgIDUwMjYsIDAsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCisgICAgMTE5MzYxLCAwLCA0MzEwNiwgNTAyOSwgNjUzMDksIDE1ODAsIDM1OTgsIDY4NDI0LCA0MTA3MCwgNzc5MDMsIDAsIDM0NDAsIAorICAgIDc4MjE1LCAxNTYyLCAxMjg2NTYsIDEyNzE3NSwgMTE5MzU4LCAxNzE2LCAwLCAxMDYwMCwgOTE3ODY3LCA2MjAsIDQxMDAxLCAKKyAgICA2MDI4LCAwLCA0Mjg5MiwgMCwgNzQ4MjIsIDUwMjQsIDEyMDgyOSwgNDEwMDMsIDAsIDUwMjUsIDEyODI2OSwgMCwgMCwgCisgICAgMTE5MzI4LCAwLCA2NTU1NywgMCwgNzQ1NDEsIDAsIDExNTk5LCAxMjgyMDksIDExNjAyLCA2MjQzLCAxMTU3NCwgMTE1ODEsIAorICAgIDExNTk3LCAxMTU5OCwgNjI1MywgNjEwNSwgMTE1ODQsIDc0MTk1LCAxMTU2OSwgNjUyNzUsIDg5MDYsIDEyNzA5NiwgNTc1NSwgCisgICAgMjYzNiwgMCwgMTA4MTUsIDExNjE5LCA3ODcxNywgNDE1NDAsIDc4MTUsIDExNjE2LCA2OTc5LCAxMjA4MCwgNzcyMSwgCisgICAgMTE2MDQsIDc4NjksIDE1OTIsIDAsIDQyMTUyLCA3ODQ5OCwgNDEwNDgsIDAsIDgyOSwgMCwgOTI0MDYsIDE5OTUwLCAwLCAKKyAgICAxMjgyMTcsIDY2MTYsIDAsIDExODg3NSwgMTA5NTMsIDM5MSwgMCwgNjk3ODUsIDQ4MiwgNDIyOTYsIDExNTg4LCAwLCAKKyAgICA0MzYwNiwgMCwgNjgzOTcsIDY2MzcwLCA3NDUwNiwgNDIzMzUsIDAsIDAsIDAsIDc1MzgsIDUzMTUsIDEyMDY0NCwgNDI0OTEsIAorICAgIDAsIDQyMDYxLCAxMjgwODgsIDQ1NzYsIDAsIDY4NDE3LCA0MzgwOSwgNDI3NywgMCwgNDAzOSwgNjQ0NzIsIDQyMzM4LCAKKyAgICAzNjgsIDQyMDU4LCAzOTYwLCAxMTA0MywgMTEzMzcsIDc4MjA5LCA5MTc4MjAsIDYzOTg5LCAzOTU4LCAxMjEzMiwgMTg0OSwgCisgICAgMCwgOTkyMSwgNDI0NTEsIDQyNTMsIDQxMTQ3LCA0MjA2NCwgMTE5NTksIDQyNDA0LCA0MTE2MCwgMCwgMzYxOCwgNzgzMzgsIAorICAgIDAsIDQzMzAwLCA1MTU2LCA5MjYyOSwgMCwgOTI5LCA2ODI3LCA0MjAzNSwgNDI0MzcsIDE1NTUsIDAsIDg2OTEsIDY2NDM1LCAKKyAgICAwLCA0MTY2MiwgMCwgMCwgMCwgMCwgMCwgNDU3OCwgNjQ1MTMsIDQxNjY0LCAwLCA0MjU3OCwgMTI4Nzk0LCA0MTY2MSwgCisgICAgNzg3MTUsIDQzMjY3LCA5MzU2LCAwLCAwLCAwLCAxMjg2LCAxMDE2NiwgMCwgMCwgNjQ3MDcsIDAsIDQyNDc2LCA3NzMwLCAwLCAKKyAgICAxMjg1MjIsIDQyNDgzLCAwLCAwLCA0MjMyNCwgNDIyOTEsIDEwMDIwLCA0MzM1OSwgMCwgNjY0MSwgNTI1LCA0MTYyNywgCisgICAgOTE3OTIzLCA4NzYzLCAxMjgzMDQsIDQxNjI4LCA1MzMsIDExOTMxLCA2NTIyNSwgODMyMSwgNDI1MDQsIDQyNTgxLCAwLCAKKyAgICA2OTE1LCA0MjMxMCwgNDM3NywgODU1OSwgMCwgMTIwMjM0LCAwLCAxMzE5MywgNjQzNTAsIDExNjY2LCA4Njc5LCA0MTkyNCwgCisgICAgMTU3NiwgNzczNSwgOTIzOTgsIDAsIDczODQwLCAwLCAxMTM3NCwgNzgwNDMsIDEwODg5LCA0MzQ2MSwgNzc1NywgNDI0NjIsIAorICAgIDEyMDIyNiwgMTAwMjksIDY2NDkzLCAyNzE4LCA0MTY4LCA3Mzg0MiwgMTMzMDgsIDEyMDExMiwgMCwgMTE3OSwgNDQ0MCwgMCwgCisgICAgNzc5NDgsIDM2MywgMTEwMTUsIDc3OTQ3LCA3Nzk0NCwgNjQyOTYsIDEyNzA5MCwgNjY2OTIsIDEyMDgyNiwgMCwgNjY0OTIsIAorICAgIDY1OTMsIDY0NjI1LCA0MTk2MywgOTIxNzcsIDExOTMyOSwgMCwgMTAwMTMsIDY0NDM0LCA5MjUyMCwgMTI3MDk1LCA5NDkyLCAKKyAgICAxMTc4MiwgNjQzODIsIDEyODMzLCA3NzgzMCwgMCwgMTI5NywgNDE2MzAsIDYzMCwgMTI3MDk0LCAwLCAxMjA3NzQsIAorICAgIDkyNDY1LCAxMDQzLCA0MzY1MiwgNjYyMjMsIDEwMDkwLCAwLCAxMjg2NjQsIDMxMywgOTE3NTYzLCA0MTg4MSwgMCwgCisgICAgNDIzMTEsIDc0NDUsIDAsIDU3NTAsIDEwNzU5LCA5NDE5LCA1NTIyMiwgOTQwNSwgMTEyNjgsIDQyOTE5LCA5Mzk4LCA4NTI2LCAKKyAgICA5Mzk5LCA5NDIyLCAwLCA2NjQ5NSwgMCwgMCwgMTI3MjM5LCA0MTcxOCwgMTA3MDcsIDE2MDMsIDAsIDExOTAwMywgMCwgCisgICAgNjMxLCA3Nzk1MiwgNjk3MDMsIDEzMTYxLCA2NTI3MiwgMCwgMTA1NDYsIDc0MjEwLCA3ODEwMSwgMTE2MDAsIDc3OTYxLCAKKyAgICAyNzk3LCA3MzgyMSwgNDI0MjcsIDMwNiwgNzE0LCAzMDU4LCA0MjM4MSwgNzc5NjIsIDEyNzA4MCwgMTIzNTEsIDQyMzk1LCAKKyAgICAwLCAxMTYwNywgMCwgNDIyODIsIDc3OTcxLCA3Nzk2NywgOTE1NywgNzM3NjUsIDY2MzY0LCA0MjQzMywgNzc5NjQsIDc2MDMsIAorICAgIDEyODAzLCAxODAsIDQyMTQxLCAwLCAxMjA2MTIsIDY2NDk0LCAxMjY3NCwgODI0NCwgMzYyLCA5MjQzOSwgMCwgODAzNywgCisgICAgNDM3NzcsIDExNTM1LCAwLCA3NDg0NSwgNTE4NSwgNzE2NSwgNTUyMSwgMTAzMzQsIDIwOTMsIDc3OTgzLCAxMDMwMiwgCisgICAgMTI4MTEyLCAxMDEwNCwgMTAyNywgNTE4MSwgMCwgMCwgMTA1MjMsIDE0NDYsIDQyMzIwLCA0MTY0NiwgOTkxLCA1MTg5LCAKKyAgICA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgNTU4MSwgNzc5NzksIDM0MDUsIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIAorICAgIDkyNDQ3LCAwLCA5NTQ5LCAwLCAxMDU0OSwgNTUyODIsIDk2NjEsIDQzNjgyLCAwLCA3NzkxMCwgMTIwMDI2LCA3ODcwOCwgMCwgCisgICAgNzc5MTEsIDAsIDQxOTkxLCAwLCAwLCA3NjMwLCA5ODQ2LCA3Njg0LCAxMDM1MCwgMCwgMTE3NCwgNzc5ODEsIDQyNzMzLCAKKyAgICA3Nzk3OCwgNzc5ODAsIDY2NDg1LCA3Nzk3NywgNDIyNzcsIDc3OTc0LCA0MjQ1NiwgNjU2NjcsIDEyNzAzNywgMTIzMzAsIAorICAgIDEyODI3MiwgMCwgNDI0MTcsIDQyMzgzLCAwLCA0MTM0NCwgNjI5MywgMCwgNjYyNTIsIDc3OTg0LCA3NDQ0MywgMCwgCisgICAgMTAyMDksIDgzMTMsIDQxOTUsIDc0NDM1LCAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIAorICAgIDc4MDYwLCAxNzM2LCAwLCAzOTAxLCAxMjIyOCwgMTIwMTUxLCA2NTIwMCwgMzM4MywgMTA0NDYsIDc4ODQxLCA2OTMsIAorICAgIDkxMzAsIDMxNCwgNjQxNDksIDQyNDIwLCAxMTk0OSwgMCwgMTIwMTUyLCAxMTAyNiwgMCwgNTMzMiwgNjk0MCwgNjQxNTQsIAorICAgIDEyNjM1LCAxMjcwMDcsIDQyNzA2LCAxNzUxLCAyNzMsIDgxNjUsIDEzMTY2LCAxMjA3NjMsIDc4ODQwLCAwLCAxMjgyNCwgMCwgCisgICAgNDUyOCwgNTMyMCwgNjMwMSwgNDM2NjIsIDYxMzMsIDkzMzksIDk0NjMsIDQyMzQ2LCAxMDkyMiwgNjQ1NjAsIDM3NTcsIDAsIAorICAgIDAsIDAsIDY1ODY5LCA3Mzc2MCwgMjU2OSwgMCwgMjMyNiwgNjU3NDAsIDI1NjUsIDQyNDU5LCA3NTk2LCA3OTIxLCAwLCAKKyAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgMCwgMTAyMywgCisgICAgNDc0LCAwLCAxMTk4MTgsIDAsIDAsIDQyNDg3LCA2NTU1NiwgMCwgMCwgNDIyOTUsIDAsIDAsIDAsIDkyNTE4LCA5ODM1LCAKKyAgICA2NjQ5OSwgMCwgNTQxNywgMTIyNzUsIDEwODk1LCAwLCAyNzQsIDAsIDE4NTgsIDAsIDAsIDU1MjUxLCAxMDExOCwgMzEzMywgCisgICAgMTI4MDA4LCA3Mzc5NSwgMCwgOTYxMCwgODA2OCwgODE5NywgMCwgNjk5LCAwLCA0MTY2NSwgNTg2OCwgMCwgOTI2OTUsIAorICAgIDQyMTgyLCA3NTgxLCAxOTk0MCwgNDM2NjgsIDQxNjY3LCAxMjgwNTcsIDAsIDE5MjMsIDY1NTgzLCA2NTgwMiwgMCwgCisgICAgNjQ1OTcsIDQzNDQ0LCAxMTkxODQsIDkyMTk3LCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAwLCAwLCA0MTgzNSwgCisgICAgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMCwgMCwgMjkzLCA3Nzk2NiwgOTIxNjksIDY0NzkxLCAKKyAgICA0MTgyNywgNDI0NjYsIDQzNDIyLCAxMDU3OSwgODU2MCwgMCwgNjU0MTMsIDc3OTYzLCA0ODAzLCAxMjk2NCwgMTczOSwgCisgICAgMTk0MSwgMzkwMCwgMCwgMTcxMywgNzc5NjksIDAsIDczOTU3LCAxMTQwNywgNDI0NDEsIDQxOTcxLCA2Mjk3LCAxMjAwOTgsIAorICAgIDY0MTA1LCAxMjgwODAsIDQyNDgxLCAxMTcxNiwgNjY0NzMsIDcxNzksIDQyMjg5LCAwLCA2NDEwMywgOTY5LCAwLCA5MzUyLCAKKyAgICAwLCA2MTY1LCA2NDEwMCwgMCwgNjYzMiwgNzM4NjEsIDQyNDAyLCA3NDMyNywgNzgwNiwgMCwgODkxNCwgMCwgMCwgMzE4MywgCisgICAgMTQzNSwgNjQ4NzYsIDI5NjksIDYwNDYsIDY0NDQxLCA2MjA4LCA2Nzg0OSwgNTc0NiwgNzM3NDksIDAsIDY0NDE2LCAKKyAgICA0MjQyMiwgMCwgMCwgNzA4MiwgNzM3NzUsIDMzOCwgNTA1OSwgMTk0NzE5LCAwLCA0MjMyOCwgMTA3NjcsIDAsIDgxMTUsIDAsIAorICAgIDc0NzU4LCAwLCA4MjI3LCAyMDczLCAxMjE4LCAwLCAwLCA2NTg0OCwgMCwgMCwgMCwgMCwgMTI2OTg3LCA0NDg2LCAwLCAwLCAKKyAgICAwLCAxMDkyNSwgMCwgMCwgMCwgMCwgNDIzMDksIDEwMjU3LCA2NTE5MSwgMTAyNzMsIDAsIDEwMzA1LCA0MjQ2MSwgMCwgCisgICAgNDIzNDksIDg4MzIsIDc4MDUxLCA2NDEyNywgMTA2NDQsIDQyNjYyLCA3ODgyOCwgNDIyNzgsIDc0NDUxLCAxMjY5ODgsIAorICAgIDkxNzg1NywgNzc5NCwgMCwgNDI0MjksIDYzNzcsIDQyMzE2LCAxMTkwMjYsIDM2NjksIDM5NjgsIDQyNDY4LCAwLCA2OTY1OCwgCisgICAgMCwgNjU0MDIsIDExOTU4MSwgMCwgMCwgNjQ5MzMsIDAsIDQxOTYwLCA2Njk5LCAwLCAwLCAxMjgzNTQsIDY4MjMsIDQyMzkxLCAKKyAgICAxNTg4LCA2NTQwMCwgODQwOSwgNzgyMjMsIDE5OTY3LCA2NTM5OCwgNzg3LCAwLCA5MTc5MzksIDEyNzc0NCwgNjExNSwgCisgICAgMjA3OCwgNDE2NTQsIDQyNDgwLCAwLCA5MjY1MCwgNDE2NTUsIDY1NDAxLCA0Mzk3NSwgMCwgMCwgMCwgNjQ0LCA2NTUwMCwgCisgICAgNDE2NTcsIDEwNzc4LCAzNjU5LCA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgNjk2NDgsIDEwNTAyLCA3NDQ1NywgCisgICAgMCwgMCwgNDE1NTQsIDAsIDgyMjAsIDkxNzk0MywgNDE1NTcsIDAsIDAsIDExMDcwLCAxMTkyMjEsIDUxNTcsIDQwMjAsIAorICAgIDczODU4LCA0MTU1NSwgOTUxNCwgNjQ4MTgsIDY1MTAzLCA2NDY0MSwgNjQzMDMsIDc4MTMxLCA3NTIwLCAwLCA3NDM3NywgCisgICAgMTEwMjksIDY2NjUxLCAwLCAwLCAxMTg5MzAsIDY0NTI3LCAwLCA3ODc3LCA3MzgwMywgMCwgMTI3MzQ4LCAxMjAwOTYsIAorICAgIDc0NjAyLCA5OTU1LCAxMTk1NTcsIDQwNTUsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIDEyMTkwLCAxMjMxOSwgNzg2MzAsIAorICAgIDAsIDc4NjMxLCA5NTAyLCA2NTQyNywgMCwgNjU0MjQsIDEyNjA3LCAwLCA5NzM0LCA2NTQyNSwgMCwgMCwgMTI3MzU3LCAKKyAgICA3ODgzNSwgOTI0MTAsIDEwMTEyLCAxMDgyNywgMCwgOTg2NiwgNzQ1MjcsIDY2Njc1LCAwLCA4NjI1LCA2NDM0NiwgMTEyOTAsIAorICAgIDEwNDc3LCAwLCA4NjM2LCAwLCA4MzE1LCA2NTQ0NCwgMCwgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyODI1MSwgCisgICAgMTIwMTcxLCAwLCA3NDU4OSwgNDM5OTMsIDAsIDY5NzkwLCA2NDQzNSwgMCwgNDM2OTAsIDExMDQ2LCAxMTQ5MCwgNDI3MzAsIAorICAgIDQ0ODUsIDEyNzEwNywgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIDEyNDM3LCA0MjcyOCwgMCwgNzA0MCwgMzU4OCwgMCwgCisgICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAwLCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgNjQ0OTksIAorICAgIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCA3ODYxOSwgCisgICAgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgMTIxMywgCisgICAgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDAsIDY0Mzg3LCA0MTE1LCAwLCA1MDA1LCA2NDA3MCwgNjQwNzMsIAorICAgIDEwNjc5LCAwLCA3Nzk1NCwgOTQwMiwgNjQyNzYsIDQyNiwgMCwgMCwgODI1MSwgMTAxMzYsIDY1NDM2LCAwLCAyMTIwLCAKKyAgICA0MzMwMiwgMTIyNCwgMCwgNjU1NzYsIDEyMDE1OCwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgMTI4NTgsIDEyMDE1OSwgCisgICAgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgMjEyOSwgMCwgOTIyMiwgCisgICAgMCwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIDQyMzMxLCA2NDkzNSwgMCwgMCwgCisgICAgMTI5MywgNzk0NywgMjEzMiwgMCwgNzQ1OTMsIDEyMDMwOCwgMjQ1NCwgNDI3MTcsIDM2MTMsIDEyODgzNywgMCwgMCwgCisgICAgNjU4ODgsIDg4MTYsIDEwOTc4LCAxMDg0MCwgMCwgMTA2NjgsIDAsIDQzMDg3LCAxMjU5NSwgMTIwMzA0LCAwLCA4ODIyLCAwLCAKKyAgICAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgMTIwMzE5LCA4MjM1LCAxMjAzMTYsIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIAorICAgIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzQwMTMsIDYwNzksIDY4MTcsIDEwNzY0LCAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgCisgICAgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIDE5OTEsIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAKKyAgICAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCA0MzA3NiwgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCAKKyAgICA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgMCwgNjYzNzMsIDAsIDAsIDY0OTA4LCA5MjY5MSwgNjMxMSwgCisgICAgMCwgMTIwMDQsIDExOTE5MiwgMTIwNDksIDQzMTA4LCAxMjAzMjYsIDAsIDQxNzA1LCA5MjE4OCwgNjU5OCwgMCwgNjU5OSwgCisgICAgMTIwMzM0LCAwLCA0MjE0OCwgMTE4ODI1LCA2NjAyNywgMCwgNjU5NywgOTQxMiwgODM0MCwgMTE4MjQsIDY0NzQ1LCAwLCAwLCAKKyAgICAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIDAsIDEyMDI0MywgMjMzNiwgMCwgMCwgNzg4NzEsIDEyMDQ0MiwgCisgICAgMCwgMTkyMSwgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIAorICAgIDkyMjksIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIAorICAgIDY1NDAzLCAwLCAxODU0LCAxMDc5NCwgMCwgNjc2NjAsIDAsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgCisgICAgNjU0MzMsIDYwNzYsIDY0NzkzLCA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIDEyOTM0LCAKKyAgICA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCA2MDcxLCA2NTQzNCwgMTI3NDY3LCA0ODA0LCA0MDUzLCAwLCAxMjc0NjksIAorICAgIDE5NDY1MywgNDE2OTYsIDQ2NywgNjk4MjMsIDEyNzQ2MywgNjk3OTcsIDAsIDAsIDg0MjEsIDEyNzQ3MiwgNjk2ODIsIAorICAgIDQzNzA1LCA1MDIsIDAsIDY1NDMxLCAxMTkwNTYsIDAsIDEyMDQzLCAxMzAzLCAzMTYsIDkyNDYyLCAyMDI5LCAyMTM2LCAKKyAgICAxMTkyNDYsIDExNTMzLCA2NDM2NSwgNDM0ODAsIDkyNjM5LCA0ODYwLCAxOTQ2NDUsIDEyNzg3NywgNDI0ODgsIDAsIDk1ODMsIAorICAgIDEyODg0OSwgNTU0NiwgODAxOSwgNzM4NTYsIDAsIDAsIDAsIDU1NDQsIDIzNTUsIDEyMTUwLCA2NTcyNSwgNTU0MywgCisgICAgNzc5ODksIDYzNzUxLCAxMjEzNywgNTU0OCwgNzc5ODUsIDAsIDY1NzI3LCA2ODM4OCwgNjU3MjYsIDYwNzcsIDEyODM1MiwgCisgICAgNjU0NTIsIDAsIDExMzAxLCA3ODAxMywgNzgwMDgsIDc4MDEwLCA5ODc0LCA3ODAwNywgMCwgMTMxOSwgMzA1MCwgNjU0MTAsIAorICAgIDAsIDAsIDc4MDE2LCA3ODAxNywgNDI4MzAsIDQzOTk2LCA2NjcxNiwgMTI4MTM3LCA0NjkxLCA5MjI0MiwgOTM0NSwgNjIxLCAKKyAgICA5MjcwOSwgMTI4MjIyLCAwLCA2NTQxMSwgMCwgNDExODIsIDczODgxLCA2NTQwOCwgNzM4OTksIDc4MDI0LCA5NDc0LCAKKyAgICAxMDU0NSwgMTE5MTE4LCAxMDg4NywgMzc4NiwgNjU0MDksIDg4OTQsIDQzMTc5LCAxMTk2MTEsIDc5MjMsIDM3MTYsIAorICAgIDkyMzYzLCA5OTk2LCA4NTA4LCAwLCA3MDEyLCA4MTk1LCAxMjc4MzQsIDk1NjYsIDAsIDM3MjIsIDAsIDQxNzA3LCA4NDkzLCAKKyAgICA1NDUsIDk1NzUsIDQxMzc5LCAxMDA1MCwgMTI3MTgsIDAsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAwLCAKKyAgICAwLCA5MTE5LCAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIAorICAgIDc4MDIyLCA0MTAsIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIAorICAgIDEwMTI2LCAxMjExNiwgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIAorICAgIDQxMzQ1LCAxMjAzNjIsIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCAKKyAgICA2NDg1OCwgMzYxLCAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgCisgICAgNDU2OSwgNzQxMzAsIDAsIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAKKyAgICAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgCisgICAgMCwgMCwgNzQwNTQsIDEyNzc1NCwgMTk1MDI5LCAwLCA4MzksIDAsIDc2OTUsIDg3NjksIDY1MjQ2LCA0ODI5LCAwLCA0ODU5LCAKKyAgICA2NDQ2NywgMCwgMCwgMTE4OTk4LCA3MjA2LCAwLCA2NjQ3LCA0Mzk4NiwgMCwgNjk3NjYsIDAsIDY0NzY0LCA0MjEwLCAwLCAKKyAgICAxMjc5MzYsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDY2NjUzLCAwLCA2NDkyNCwgMTAwOTEsIDczOTMxLCA5NDY4LCA3NDI0NSwgCisgICAgMCwgMCwgNzQyNDYsIDkyNTAzLCAxMjgzOSwgNjQ2NjksIDkyMjAyLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAxMTkyMjksIAorICAgIDExMDQ5LCAwLCA5MjY5NywgNDMyMzksIDg0ODIsIDkyNDQwLCAwLCA1MDMyLCA2OTY3NywgMTE5NDAsIDY3ODg4LCA2NjQsIAorICAgIDEyMDQzNywgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgNzM4ODgsIDAsIDEzMjk0LCA2Nzg3MywgNjQ4NjksIDYwMzIsIAorICAgIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgMTIwODE5LCA2ODM4NywgMTIwMTY4LCA3MzkxMywgMTIwMTcwLCA0MTE2MSwgCisgICAgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIDQxNDM3LCAxOTA1LCA2MDM0LCAKKyAgICA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIAorICAgIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIDAsIDY3ODc2LCAwLCAwLCAwLCAKKyAgICA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgMCwgMTA4NTUsIDU0NDUsIAorICAgIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCA0OTYyLCA2OTc3MiwgCisgICAgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgMTIwNDI3LCAxMDQ1MSwgMCwgCisgICAgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgODM2NywgMCwgMTIwMTQ2LCAKKyAgICA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgNjIxNywgNTg5NiwgMCwgCisgICAgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgNzQ0MDIsIDExODg2MCwgMCwgCisgICAgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIDAsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgMTIwNDE4LCAwLCA2NDc2NSwgCisgICAgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCAxMjA3MzAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIDk0NTUsIDAsIDgxMjQsIAorICAgIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgMCwgMCwgMCwgCisgICAgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgMTk5MzYsIAorICAgIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQxMTk5LCAxMDEyMSwgMjAyOCwgMCwgMCwgNjk3MTUsIDAsIDMwNjIsIDAsIDc0NDQ3LCAxMjYwOCwgMCwgCisgICAgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCAwLCAxMjA3NzcsIDEyMDUwMiwgNDExNTUsIDAsIDc0MDcxLCAwLCAwLCAKKyAgICAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIAorICAgIDU0MiwgMCwgMTE4Nzg2LCAwLCAwLCAxMjMwLCAwLCAwLCAzNTk3LCA0NDQ2LCAxMDU4NCwgNzQyMzUsIDkyMjE1LCA0MDM3LCAKKyAgICAxMjc5MzgsIDgzNTIsIDAsIDU2ODcsIDAsIDY0NTE1LCAwLCAxOTQ4MDEsIDU1MjY1LCA2Nzg0NiwgNzg0MzQsIDk3MDQsIDAsIAorICAgIDAsIDc0Mjg0LCAxMjgyODUsIDAsIDg2NjAsIDAsIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIAorICAgIDk5MDksIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgCisgICAgNDQ4MCwgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgMCwgMCwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIDc0Nzg1LCAKKyAgICAxMjAzNTYsIDAsIDAsIDQxNTAwLCAwLCAzMTEsIDExNDUzLCA2MjIxLCAxMDYwOCwgNjQ5NDMsIDc0MjgwLCAxMDg3NywgCisgICAgMTE4ODY4LCA2NDg4NSwgNzQyNzIsIDAsIDAsIDAsIDEyMDczNiwgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIDY0NjA2LCA5OTE3LCAKKyAgICAwLCA5MjIzMSwgNTAzNywgMCwgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgNDMzMjgsIDAsIAorICAgIDQyNjk4LCAxMjk1LCAwLCA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgMTEyOTMsIDI2NjgsIAorICAgIDExMjg4LCAwLCA0MjY0MCwgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIDUwNDksIDQyNjU5LCAKKyAgICAxMTkwMTEsIDcwNiwgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAwLCA2NjcwMiwgMCwgCisgICAgMTI2NzAsIDEwMTMsIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDAsIDcwMTcsIDQyODUyLCAwLCAKKyAgICA4MTU3LCA5NzM2LCA2NDUwMywgNjU0MTgsIDAsIDAsIDc0MDM1LCAwLCAxMTkxMywgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIDAsIAorICAgIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgMCwgMCwgMTAxNzcsIDczNzc3LCAxODU3LCAwLCAKKyAgICA0NjI2LCA4NDY0LCA4NDcyLCAwLCA0NjI5LCA4NDk5LCA3ODMyMSwgNzgzMjIsIDQ2MjQsIDc4MTgsIDExOTE3MywgMCwgMCwgCisgICAgNzgwNSwgMCwgMCwgNjkzNSwgOTIyOTIsIDc4MzI1LCA3ODMyNiwgNzgzMjMsIDQzMzI3LCA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCAKKyAgICA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIDc4MzM1LCA3ODMzMiwgNzc4MzIsIAorICAgIDY1ODQ5LCA3NzgzMSwgMCwgMCwgMTI0NTEsIDAsIDg2ODQsIDAsIDYxMDIsIDAsIDUyOTgsIDAsIDUyOTQsIDAsIDAsIDAsIAorICAgIDE5NTA2MiwgOTk0OSwgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAKKyAgICAxMjA2MTcsIDc0Mzk3LCA0MTQ2OCwgMCwgMCwgNTI5MiwgNTUyNzIsIDAsIDE5MzksIDUzMDIsIDM5NzAsIDkxNzg3OSwgCisgICAgMTI0NTUsIDE3OTMsIDAsIDAsIDAsIDY2NDMsIDkyNDc3LCA2NTI2MywgMCwgNzgzMzAsIDQxMjkzLCA3ODMyOCwgNjU5MjMsIAorICAgIDAsIDEzMjE5LCA5NTY5LCAwLCA3NDM4MywgMCwgMCwgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIAorICAgIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgCisgICAgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgCisgICAgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIAorICAgIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgCisgICAgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIDc0NDY2LCAwLCA2NjcwLCA3Nzg4MiwgMCwgMCwgNDMwOTIsIDQzMzI1LCAwLCAKKyAgICAxMDE2OCwgMCwgOTc4MSwgMTI4NjU1LCA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIDEzMDE5LCAxMTY3MCwgCisgICAgMTI3MzgzLCAzMTUsIDEyODEzLCAwLCA3ODQzMiwgNzgyNTYsIDc4MzUxLCA3ODM1MiwgMCwgMCwgMCwgMCwgMTM3OCwgCisgICAgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDkyMjIwLCA2Nzg0NywgMCwgOTIzNTUsIDAsIDc4MzY1LCA4Nzg3LCAxMjAzNzksIAorICAgIDE5NDYxNiwgNDE2MTgsIDE5NDYxNSwgNzgyNjEsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIDE5NDYxMiwgMCwgNzgzNjYsIAorICAgIDQyMDg4LCAwLCAxOTUwNjEsIDcxNzYsIDEyODgzMywgMTAxMzcsIDYxMjEsIDEwOTk1LCA3ODI1OSwgNzQ1MzQsIDgxMTksIAorICAgIDY0ODc0LCA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCAKKyAgICA3NDUxNSwgMCwgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgCisgICAgMTE5MTAwLCA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIDM2NzAsIDEyODY1NywgCisgICAgMTk0NjAwLCAwLCAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIDYxOSwgNDYzNSwgCisgICAgNjUwODAsIDAsIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgOTM2NiwgCisgICAgNDI3OTAsIDQyMDA2LCAwLCA2NTMyNywgNjUzMjYsIDY1MzI1LCAxMDc1NywgMTUwNywgNDIyMTYsIDY1MzIxLCA2NTMyMCwgCisgICAgNjUzMzUsIDY1MzM0LCA2NTMzMywgNjUzMzIsIDY1MzMxLCA0MjA1OSwgNjUzMjksIDQyNjg5LCA5MjQyNywgOTEyOCwgCisgICAgMTE4ODg1LCA0MjA3MywgNjc4NSwgNjQ1OTAsIDAsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCA2NTMxNiwgNDEwNiwgCisgICAgNjUzMTQsIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCA0MTIzOSwgNDM1MzMsIAorICAgIDc4NDU5LCA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCA0NjE1LCAxMjY5NSwgCisgICAgMTI3NzUyLCAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIDY5NzYyLCAKKyAgICA2NjQ1NSwgNjQ3MzgsIDMyMTksIDY4NjU0LCAwLCAwLCAxMDM3LCAwLCAyMDI1LCAxMjgyNjMsIDEzMDk4LCA3ODQ0MiwgCisgICAgMTA2MzcsIDQ1NjgsIDU0OSwgMTU3MCwgMCwgMjgzNSwgMCwgMTA2MjQsIDQzNjIzLCAxMTA3MiwgMTI3MTkxLCAwLCAwLCAKKyAgICAxMjYwNiwgNzg0MzMsIDI4MjUsIDAsIDEwODI1LCA4MDc5LCAyODIxLCA0MTA0NiwgOTIzMjcsIDAsIDAsIDEyMDU5MywgCisgICAgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIAorICAgIDY0NzAzLCAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIDE2NjgsIDAsIDAsIDAsIDExODcsIAorICAgIDAsIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIAorICAgIDUzMjMsIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIAorICAgIDEyNzI5NSwgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgCisgICAgOTIyOTYsIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAKKyAgICAxMTQwMywgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAxMTQyMSwgMCwgMTk1MDc2LCAwLCAwLCAwLCAwLCAKKyAgICA2NDg1NywgMTI4MTA1LCAyODU1LCAxMjc4MjgsIDY2MzA4LCA0MTYyMSwgNjgyMTQsIDEyNzI4MywgMTI3ODE3LCAxMDY1NCwgCisgICAgMCwgMTE5MjI2LCAxMjE2NCwgMzI0NiwgNzkwNiwgNDM5NzIsIDY1ODQ3LCA3MTgyLCAwLCAxMzAyNCwgMTk0ODIyLCAKKyAgICA3NDI3MCwgMTI4Mjg5LCAwLCAwLCAwLCAxNDk2LCA3NDcsIDAsIDk0MiwgMjM3OCwgNDMxMzYsIDEyNzkwNSwgODQ2NiwgMCwgCisgICAgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIDExNDA5LCA2ODM3MywgNjM4MiwgMCwgNjQ2MzQsIAorICAgIDEyODI3OSwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCAwLCA4NDc1LCAxMTYwOSwgNjYzMTMsIDAsIDAsIDUyODYsIAorICAgIDExOTI5NywgMCwgMCwgNjQ5MjUsIDEyMDI4MywgMTk0NTg0LCAxMTg5ODIsIDE5NDU4MywgNzcwNSwgMTE5NDIsIDExMzA1LCAKKyAgICAxOTQ1ODEsIDMzMDksIDAsIDAsIDAsIDAsIDY4MDIsIDAsIDQxNjUzLCAxMjgwLCAxMjQxLCA3MTY4LCAxMjA5NiwgMCwgCisgICAgNjY2MTUsIDQyNTY1LCA0MTY1MSwgMCwgMCwgMCwgNDE2NTAsIDY2NTA3LCA2NjQ3MCwgMCwgMTI5MTQsIDQxNDkxLCAKKyAgICA2NjAxMCwgMTE5NTUyLCA2MDc4LCA5OTU0LCAwLCAxNDc1LCAwLCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgCisgICAgMCwgMCwgMzI1NiwgMTI4NjQwLCA0MjA3NiwgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAwLCAKKyAgICAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCAwLCAwLCAzNjM1LCAKKyAgICA2NDMzNywgMCwgMCwgMCwgNzE5NSwgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgNjU2MTMsIAorICAgIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgNDE3NiwgMCwgCisgICAgMjAzNCwgOTI1NTEsIDEyMDgwNSwgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg4NjAsIDc4NTk2LCAwLCAzNjQ5LCAKKyAgICAxMzE0OSwgNDIxNDUsIDQyNzk4LCAzNjM0LCAxMjAyOTEsIDExODkyNywgNjc2NzcsIDEyMDEyNCwgNzg2NiwgMCwgMTE0MDIsIAorICAgIDQyMTQ2LCAxMjAxMzQsIDc0MjM4LCA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgMTc2MSwgMTE4MTIsIAorICAgIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCA0MTY4MCwgMCwgCisgICAgMTI4MjAzLCAxMTUzNCwgMTUxNCwgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgMCwgMTI5ODksIDY2NDc0LCAKKyAgICA5MzY4LCAxMjg0OCwgMTYyNCwgNDMyNzAsIDAsIDE5NDU2MywgMTA4MTgsIDEyODIwNywgOTk1MywgMCwgNzg0MjEsIDExOTQsIAorICAgIDMyNDIsIDk3NjEsIDk1NTUsIDg1OTgsIDEyMDI5OSwgNjE2OSwgMTI4NzEsIDE1NTEsIDI3OTgsIDY1MTc2LCA0OTU4LCAKKyAgICA0Mjc1MiwgMTE5MDI1LCAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCA2NjY0OCwgMTk0NzY4LCAwLCA2ODM2NCwgMCwgNDg5MSwgCisgICAgMCwgMTA2NDEsIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDAsIDE5NDYzMywgNzE5OSwgNjQ5NTUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDQyNjg1LCA0MjY3OSwgMTkzLCAwLCAwLCAwLCA0MjY2NywgMCwgNTI3MSwgOTIzMTgsIDkyNTE3LCAxMTg4ODIsIAorICAgIDEzNjIsIDEzMjk3LCAwLCAxMjgwOTQsIDAsIDAsIDczNzg5LCAwLCA2NjU4LCA0NDI2LCAwLCA5MjYyOCwgMCwgOTIzMTksIAorICAgIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCAwLCAyNDE2LCAzMzEwLCA0MjcwMywgMCwgMzc5LCAwLCAxMjc5NzcsIDAsIDAsIAorICAgIDMyMjMsIDY1NDkyLCAxMjg0LCAxOTQ3NzEsIDQ1NDksIDAsIDAsIDAsIDEyNzc2MywgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgCisgICAgODUxNSwgODY4OCwgMTI4NjYsIDAsIDMyOTQsIDAsIDg1MjksIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCAKKyAgICA5MjQ1OCwgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgCisgICAgMzIxNSwgMCwgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIAorICAgIDY2MzU0LCAxNTAxLCAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCAKKyAgICA3NDc2LCA3NDM5OSwgMCwgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgCisgICAgOTI1NzEsIDAsIDAsIDEwNDE0LCAxMzAwMSwgODE0MSwgMCwgNDI1MzcsIDE1NTcsIDQzNTk0LCAxMjg2NDIsIDYzMzAsIAorICAgIDY4MDUsIDg2MzEsIDI1NDUsIDEyMDY3MiwgMTI3MTY2LCAwLCA3NDE5MCwgMCwgMCwgMCwgNDI3NjIsIDAsIDQyOTE0LCAKKyAgICAxNjUwLCAyNjIsIDE2MzcsIDAsIDc5MDEsIDMyMzgsIDEyODE3MywgNDE4NjEsIDAsIDAsIDY1MTU4LCAxMDg2MCwgMCwgCisgICAgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDAsIDAsIDExOTgxMCwgNzE5NCwgNTI5MSwgCisgICAgMCwgNDM2NjYsIDEzMTI5LCAwLCA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIDI2MjAsIAorICAgIDAsIDAsIDAsIDAsIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCAwLCAxMTg5OTYsIDExOTAwOSwgCisgICAgMjg1MCwgODA4NCwgMCwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgCisgICAgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCAwLCAwLCA4Mzc3LCAxMjcxMTYsIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgCisgICAgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCAKKyAgICA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgCisgICAgNDM1NDIsIDAsIDY0NTc4LCAwLCAzMjI4LCA2OTYzNiwgODc4MywgMCwgMTE5NjE0LCAyNzMxLCAwLCAwLCA3ODU4NSwgCisgICAgNDEwMiwgNzY5NiwgNzM4NzgsIDAsIDAsIDc4NTg2LCA0MzMxNiwgNDE3NywgMTEyODMsIDkwODksIDAsIDczOTk2LCAwLCAKKyAgICA2NDUwMCwgNDM2NzQsIDAsIDY0OTQ3LCAxODU2LCAwLCAwLCA2Mzc5LCAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgNzQ3NzUsIDAsIAorICAgIDAsIDkyMzg5LCA3NDA3MiwgNTUyNjksIDAsIDAsIDAsIDIwMzMsIDc4NTc3LCA3ODU3NiwgMTk1MDI2LCA1NTI1NCwgNzc0MCwgCisgICAgMCwgMCwgMCwgNzM5NjQsIDAsIDAsIDY3NjEyLCA2NTY3NCwgMCwgMCwgNDE2ODksIDAsIDc0MDA2LCA2NDkwOSwgNjY0NiwgCisgICAgMTE3OTAsIDc0MDE5LCAwLCAxMjgwNjYsIDEyODAzMSwgODU2MSwgNDU3MywgMCwgNTMyNiwgMCwgMTIwNjA1LCA3MjMwLCAKKyAgICA4MjU3LCAwLCA4Nzc4LCA0MTY4OCwgMCwgNjU3NzYsIDIwNzEsIDgzMTQsIDY0NTksIDAsIDc2MjgsIDY1MDkyLCA3MzkwMywgCisgICAgNjY3MjEsIDExMzQyLCAxMjg1NjEsIDAsIDAsIDEyODIyNiwgMTI3MDAxLCAwLCAxMTgxMCwgMTMxNjQsIDEwNzIzLCA5NjcsIAorICAgIDAsIDAsIDExOTQ2LCAwLCAzMjU3LCAwLCAxMjMwNywgMTg0NSwgMCwgNDM1MjYsIDAsIDAsIDE4ODYsIDQyMzQyLCAxMDA4OSwgCisgICAgODcwLCA3NjQ4LCAzNDk5LCA4NjA5LCA3NjUyLCA4NzYsIDg3MSwgODc3LCAwLCA4NzgsIDQyMDE1LCA4NzksIDQzNjkyLCAKKyAgICA0NTYzLCAwLCAwLCA3NTkxLCA2NTg4NywgODY3LCA5NTIwLCA4NzIsIDAsIDg2OCwgODczLCA3NjQyLCAwLCA4NjksIDg3NCwgCisgICAgNzY0NCwgMCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDAsIDU0MjksIDAsIDY2MTgwLCAwLCA2NjE4MSwgCisgICAgNjg0NTIsIDAsIDAsIDQyMDY3LCAwLCA1NDMzLCAxMDY1NywgNzkxMSwgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIAorICAgIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgNTQyMywgNDYxMSwgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAKKyAgICAwLCAwLCA2NjE5NCwgNDQxOCwgNjYxODQsIDQ2MjgsIDQyNDUsIDExOTY0OCwgMCwgMCwgMTg1MSwgMCwgMTI3MTg5LCAKKyAgICAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCAwLCA0Mjc3NiwgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgCisgICAgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCAxMTk5NzQsIDAsIDAsIDEyMDYwNCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyNywgCisgICAgOTk1OCwgNDU4OCwgNDM2ODAsIDAsIDc0NDg0LCAwLCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCAwLCAwLCA3OTMsIAorICAgIDc0NDA0LCAwLCAzMDUsIDU2NywgNjc2NjIsIDg0MiwgMTI4NTE5LCA4MjA4LCAwLCA0MTY5NSwgMTY0NywgMTE4ODc3LCAwLCAKICAgICA3ODM3LCA5MTc2MjUsIDgxOCwgNTMzNywgOTE3NjIyLCA5MTc2MjEsIDQxMzc2LCAxMTk5NzgsIDkxNzYxOCwgMTIwNTk0LCAKLSAgICA3NDA4NiwgOTE3NjE1LCA5MTc2MTQsIDkxNzYxMywgMTA5NzMsIDY2MzU5LCAxMzcyLCA5MTc2MDksIDkxNzYwOCwgNDk2OSwgCi0gICAgMTI1NCwgOTE3NjA1LCA5MTc2MDQsIDkxNzYwMywgOTE3NjAyLCA2NTIyOCwgMCwgMCwgMCwgMjg0MCwgMCwgMTE5OTgyLCAwLCAKLSAgICAwLCAzMjQ1LCA5MDY4LCAxMTkwNjksIDY0NzI1LCAwLCAwLCAxMjk5MSwgMCwgMjY1MSwgMCwgMCwgOTE3NjExLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA0MzMyMiwgMCwgMCwgMCwgNjQzNzIsIDAsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCAKLSAgICA3NDUyLCAzMjg1LCAwLCAwLCAxMTk5ODgsIDY1NjEwLCAwLCAwLCAwLCA2NzEsIDI1MCwgNzQzNCwgNjE4LCA2NjgsIDYxMCwgCi0gICAgNDI4MDAsIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgNjI4LCAzOTA1LCA3MzgxMCwgMCwgCi0gICAgMCwgNjQ3NDksIDY3ODUwLCAwLCAwLCAwLCAwLCAxOTQ4NzMsIDAsIDAsIDY1OTQ1LCAwLCAwLCAxMTk1OTAsIDAsIDAsIDAsIAotICAgIDk4NywgNjkyNywgMTE1NzIsIDQyMjYxLCAxMTQ2NCwgMzM2NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEzMzQsIAotICAgIDQzMzI2LCAxMjYwOSwgMTE1MTksIDAsIDU1MzAsIDUyMTAsIDAsIDQ2MjcsIDAsIDUyMDgsIDAsIDAsIDEwMzMyLCA1MjE4LCAKLSAgICA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCAwLCA3Mzg5NCwgMCwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgCi0gICAgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDEyMDI4MiwgMCwgNDAwMCwgNzQyOSwgNzQyOCwgCi0gICAgNjY1LCA3NDI0LCAzMjA2LCAxMjAyNzksIDc4ODQsIDAsIDAsIDAsIDAsIDIxMSwgMjUwOSwgMCwgMTIwNTczLCAwLCAzMjIwLCAKLSAgICAwLCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDAsIDU4NTIsIDAsIDAsIDAsIAotICAgIDE3MDgsIDAsIDAsIDI2MjMsIDAsIDAsIDAsIDAsIDQ2OTgsIDY2NTA5LCAxMDY2LCAwLCA0NzAxLCAwLCAxMjAyODUsIAotICAgIDc0MjI1LCAxMTkxMTQsIDgyNjcsIDAsIDAsIDAsIDc1MTYsIDAsIDI2MjUsIDAsIDgwMzQsIDc0MzA5LCAwLCAzNjMxLCAKLSAgICAxMDk1NSwgNzg1MCwgMTIwMjkzLCA4NDE2LCAwLCAwLCAwLCAwLCAxMjY2MCwgMCwgMCwgMCwgNzQ4NTAsIDQxMDY5LCAwLCAKLSAgICAwLCAxMjA5OSwgNDMxMCwgMTAwMzIsIDYyNTIsIDcxMywgNzk5MCwgMCwgMzk5MCwgMCwgMCwgNjYzNjgsIDUwMTcsIAotICAgIDY0OTU2LCA3MDcxLCAwLCAwLCAxMDMwLCAxMTg4MDAsIDAsIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAKLSAgICAxMjAzNTAsIDAsIDAsIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCA5NCwgMTg4MCwgNzQ3NjYsIDAsIDg5MDgsIDAsIDAsIAotICAgIDY1OTEzLCAwLCAxMDc1MiwgMTMwMDMsIDAsIDAsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIAotICAgIDAsIDAsIDEyMDgwNiwgMTAwMjksIDM2NDEsIDU0MTksIDAsIDAsIDAsIDAsIDEyMDM0NCwgMCwgMCwgODYxMCwgNjUyMzAsIAotICAgIDc1OTIsIDg1NiwgNzQyOTksIDkzNiwgMTMyODksIDAsIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgMCwgMTk5NTMsIDAsIAotICAgIDE1MDQsIDAsIDAsIDAsIDc0MjA2LCA3NTI5LCAwLCAwLCAwLCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgCisgICAgNzQwODYsIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgMTI3MTcyLCA5MTc2MDgsIDQ5NjksIAorICAgIDEyNTQsIDkxNzYwNSwgOTE3NjA0LCA5MTc2MDMsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAwLCAwLCAyODQwLCAwLCAKKyAgICAxMTk5ODIsIDAsIDAsIDMyNDUsIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgMTI5OTEsIDAsIDI2NTEsIDEyODUyOCwgMCwgCisgICAgOTE3NjExLCAxMjcwMjYsIDEyODg4MywgMCwgMCwgNDM2NDgsIDEyMDgxMiwgMCwgNDMzMjIsIDkyNjYyLCAwLCAwLCAKKyAgICA2NDM3MiwgOTI2OTgsIDMyMjYsIDY1NSwgNzUyLCA3NDU3LCA3NDU2LCA3NDUyLCAzMjg1LCAxMjg3NzksIDEyNzgyMSwgCisgICAgMTE5OTg4LCA2NTYxMCwgMjM5MSwgMCwgOTIyNDgsIDY3MSwgMjUwLCA3NDM0LCA2MTgsIDY2OCwgNjEwLCA0MjgwMCwgCisgICAgNzQzMSwgMTE1MiwgNDI4MDEsIDY0MCwgMTIwNjY2LCA3NDQ4LCA3NDM5LCA2MjgsIDM5MDUsIDczODEwLCAwLCAxMjgyNjYsIAorICAgIDY0NzQ5LCA2Nzg1MCwgMjEwNywgMCwgMCwgNDYwNSwgMTI4MTc0LCAwLCA0MzM3MiwgNjU5NDUsIDEyODgzOCwgMCwgCisgICAgMTE5NTkwLCAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIAorICAgIDEyODI5NywgMCwgMCwgMCwgMCwgMTEzMzQsIDQzMzI2LCAxMjYwOSwgMTE1MTksIDExNTAzLCA1NTMwLCA1MjEwLCAwLCAKKyAgICA0NjI3LCAwLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCA2OTY0NywgCisgICAgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIAorICAgIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgMTIwMjc4LCAKKyAgICA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAyMTEsIDI1MDksIDAsIDEyMDU3MywgNjg2NzIsIDMyMjAsIAorICAgIDQyMjM1LCAwLCAxMDY5MCwgODk1MSwgNTIxNCwgNDI0NzQsIDgxMTgsIDAsIDcwNDgsIDQ1OTAsIDEyNzI1OCwgNTg1MiwgMCwgCisgICAgMCwgMTI3MjU5LCAxNzA4LCAwLCAwLCAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIDQ2OTgsIDY2NTA5LCAxMDY2LCAKKyAgICAxMTk5MjEsIDQ3MDEsIDAsIDEyMDI4NSwgNzQyMjUsIDExOTExNCwgODI2NywgMCwgMTI3MjY1LCAwLCA3NTE2LCAwLCAKKyAgICAyNjI1LCAwLCA4MDM0LCA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIDEyMDI5MywgODQxNiwgMCwgMCwgMCwgNDMzODQsIAorICAgIDEyNjYwLCAwLCAwLCAwLCA3NDg1MCwgNDEwNjksIDAsIDEyODE1NiwgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIAorICAgIDc5OTAsIDAsIDM5OTAsIDAsIDAsIDY2MzY4LCA1MDE3LCA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIAorICAgIDAsIDk1MTMsIDQxMDU5LCA5MzU3LCAwLCAxNzczLCAwLCAxMjAzNTAsIDAsIDYzMzksIDc3NDUsIDk4NDQsIDAsIDY0NjUwLCAKKyAgICA5NCwgMTg4MCwgNzQ3NjYsIDAsIDg5MDgsIDAsIDEyODcwNywgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIDAsIAorICAgIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDAsIDY0Nzg1LCA3Mzk0LCAzNjQxLCA1NDE5LCAKKyAgICAxMjgwNTUsIDAsIDEyNzg4MywgMCwgMTIwMzQ0LCA0Mzk4OCwgMCwgODYxMCwgNDMwNjIsIDc1OTIsIDg1NiwgNzQyOTksIAorICAgIDkzNiwgMTMyODksIDEyNzUyMSwgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCA3ODYzOCwgMTk5NTMsIDAsIDE1MDQsIDExOTEwOCwgCisgICAgMCwgMTI5MTMsIDc0MjA2LCA3NTI5LCAwLCAwLCAwLCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgCiAgICAgMTIxNTIsIDAsIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIDAsIDAsIDgwMzMsIDAsIDAsIAotICAgIDk4MTAsIDAsIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIDAsIDAsIDAsIDAsIDExOTI0NywgMCwgMCwgNzQyOTEsIAotICAgIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMCwgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAwLCA3NDIzOSwgCi0gICAgNDEzMTcsIDAsIDU0MTcsIDAsIDAsIDAsIDkzNTMsIDAsIDQxMzE1LCA5MTc2MTYsIDAsIDAsIDY1NjksIDAsIDAsIDAsIAotICAgIDExOTIzNiwgNjM0LCAwLCAwLCAwLCA5MTc2MTAsIDQxNjUsIDg3NDYsIDAsIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCAKLSAgICAwLCAwLCAwLCA0MTAzNywgMCwgNzc4NiwgOTE3NjA3LCA0MTAzOSwgMCwgMCwgNjgwLCA2Mjc0LCAwLCAxMTgxLCA3MDU2LCAKLSAgICAzMTc0LCAwLCAwLCAwLCA2NTY2NSwgMCwgMCwgNjkyMCwgMCwgMCwgMCwgMCwgMCwgNjQ2NDQsIDEyNjk4MSwgMCwgMCwgCi0gICAgNDEwMjgsIDAsIDYyMzEsIDI2MTMsIDY1MzAyLCA0MDk4OSwgMCwgMCwgMCwgNDI3NjAsIDAsIDAsIDAsIDQwOTg3LCA0NjY3LCAKLSAgICAwLCAwLCA4ODI4LCAwLCAwLCAxMjQ2LCA0NzQ2LCAwLCAwLCAxMTAyMSwgNDc0OSwgMCwgMCwgOTIxLCA0NzQ0LCAwLCAKLSAgICAxMjcwMiwgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgMCwgMCwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgCi0gICAgOTUxLCAwLCAwLCAwLCA3NjA0LCAwLCA0MDA5LCAwLCAwLCAxMjA1NjIsIDAsIDAsIDY0ODYwLCAxMTkxMzgsIDExOTkwMiwgCi0gICAgMCwgMCwgNDA0OCwgMCwgMCwgMTIwNTk2LCAxNjQ2LCAwLCA2NDUzNCwgNzM5OTUsIDAsIDAsIDExOTg5MCwgMjU3OSwgCi0gICAgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgMCwgMCwgCi0gICAgMTAwODQsIDczOTQzLCAwLCAwLCA5MTc1NjIsIDAsIDMzOTksIDk4NTEsIDAsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCAKLSAgICA4ODU0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNzc3LCA5MTUxLCAxMTM3LCAwLCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAwLCAwLCAKLSAgICAwLCAwLCA1OTg5LCAwLCAwLCAwLCAwLCA0MTY4NSwgMCwgMCwgOTc2OSwgNDE2ODQsIDAsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIAotICAgIDAsIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCAKLSAgICA3NDU0MiwgMCwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDAsIDEyMDc1MCwgMjUyLCAwLCA0MTMwMiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIDAsIDExNzMwLCAwLCAKLSAgICA5NTkzLCAxMTkxODgsIDI0MDMsIDY0ODA4LCAwLCAwLCAxMTcyOCwgNjU4OTQsIDAsIDAsIDc3NjQsIDAsIDAsIDEyMDgyNSwgCi0gICAgMCwgMCwgNDI4MiwgODI5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCAwLCAKLSAgICAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIDM0NTgsIDQzNjUsIAotICAgIDAsIDAsIDM2NDcsIDAsIDI2MDIsIDAsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIAotICAgIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMCwgMCwgNzU5NywgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAwLCAKLSAgICA1MzQ0LCAwLCAwLCAwLCA5MDYyLCAxMTkyNTIsIDAsIDAsIDAsIDY0NDc5LCA5MjMyLCAwLCAwLCAwLCAwLCAxMDkwMCwgCi0gICAgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIAotICAgIDAsIDAsIDI5OSwgMCwgODUyNSwgMCwgMzUyNCwgMCwgODgzMSwgMCwgMCwgMzA3NSwgMCwgMCwgMCwgNjYzNjIsIDAsIAotICAgIDc0NzU4LCAwLCAwLCA1ODQ1LCAwLCAwLCAwLCAyNTgxLCA4MjAwLCA2NTExNCwgNzQzOTMsIDAsIDQzMjgzLCA1NTUxLCAwLCAKLSAgICAxMjcwODUsIDAsIDAsIDExODg1NSwgMCwgMCwgODY4MCwgNzIwNCwgMCwgMjU4OCwgMjkxNCwgNzAxMSwgMCwgMCwgMjQ3MSwgCi0gICAgMCwgMjg4MywgMjc0OSwgMTE5NTYzLCA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIDY3NSwgNDI0OTMsIDAsIDAsIDAsIAotICAgIDYyMTksIDAsIDAsIDQxMjMyLCAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDAsIDAsIDEyNzExLCAKLSAgICAzMTgxLCA2NjIxMiwgNzQyODksIDAsIDQyODU3LCA4MjYyLCAwLCAwLCAwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIAotICAgIDc0MDQ3LCAwLCAwLCA2NDY3NCwgMCwgMCwgNzM4NDYsIDAsIDEyNzIyLCAwLCA5MjIsIDc0NDI2LCA3NDUwNywgMCwgMCwgCi0gICAgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIDczNzI4LCAKLSAgICAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCAwLCAxOTAxLCAwLCAwLCAxMjA0NjAsIDc0MjUsIAotICAgIDMyMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDY1NDU5LCAyNjA2LCAwLCA3Mzg5NywgMCwgMTE0OTYsIDExNzMsIDAsIDQxMjcyLCAKLSAgICAwLCAwLCAwLCAwLCAxMjA3MzcsIDAsIDAsIDAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDAsIDY1Njk1LCAwLCAzNywgNzA2OCwgCi0gICAgMCwgMTIwNDgwLCAxMjA0NzksIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDEyMDQ4MSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNjU1MTAsIDAsIDAsIDUyMzMsIDAsIDY0NzkyLCAwLCAwLCAwLCAwLCA3MDYwLCA5ODQ3LCAwLCAxNjg1LCA1OTUsIDAsIAotICAgIDczOTcxLCAxMjkyLCA4OTQwLCAwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgCi0gICAgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIDY1NDcsIDAsIDgyMDMsIDAsIDAsIDg0NTgsIAotICAgIDY1MjExLCA4NDk1LCAwLCAwLCA5MTc1NTIsIDc3OSwgMCwgNjQzNjcsIDI0NjUsIDAsIDgxOTMsIDAsIDk3MzAsIDkyODAsIAotICAgIDAsIDcwNjUsIDc0MTU1LCA0MzQ2LCAwLCA3Mzc5OCwgNTA0LCAwLCAxMjA3MTUsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgCi0gICAgMTA4ODMsIDAsIDkxNzg3NiwgNzMyLCAzNzM3LCAwLCAxNTQ4LCAwLCAwLCAxODMyLCA1NjA0LCA1NzM1LCA0MTE0MSwgMCwgCi0gICAgNDM3NiwgMCwgNDExNDIsIDM3NDUsIDAsIDAsIDQyODg4LCA2NTcxMiwgMCwgMzg2OSwgMTE5MzcsIDU3MjUsIDAsIDE3ODMsIAotICAgIDAsIDU3MjgsIDAsIDAsIDAsIDExOTE4LCA2NjU2NywgNTcyNCwgMCwgNTcyNywgMCwgMCwgMCwgNzY0LCAwLCAwLCA0MzUzMSwgCi0gICAgMCwgOTAzMywgMCwgNDI1MzIsIDYyMjMsIDExMDQyLCAwLCAxMTQyMywgMCwgMCwgMCwgMCwgMCwgMCwgNjU1OSwgNjQ1NTcsIAotICAgIDAsIDAsIDEyMDY0OCwgNDMwMTksIDAsIDEwMjM4LCAwLCAwLCAwLCAxMjA2NzUsIDAsIDE0NzgsIDk3ODMsIDAsIDI2MDcsIAotICAgIDY0NzQwLCAwLCA3NzM5LCA3NDU0MywgMCwgMCwgMCwgNjEzMiwgMCwgNjM3NjUsIDAsIDAsIDQxMTQ0LCAwLCAwLCA0MzUzNywgCi0gICAgMCwgMTAwOTMsIDQzNjksIDkxNzc5MSwgMCwgMCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMCwgNDEyOTUsIAotICAgIDE5NDYwMywgOTE3Nzg1LCAwLCAwLCA3Njg4LCA5MTc3ODYsIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCAwLCAxNTQzLCAKLSAgICAzNzEzLCA0MTIyMSwgMTI0MjMsIDQyMjgxLCA5MTc3ODgsIDc0MDI0LCAxMjI5MywgMCwgNjQzNTcsIDExNzk0LCA0MjA4MiwgCi0gICAgMCwgMTczNywgODk4NywgNDIwODEsIDAsIDcyMDUsIDAsIDkzMzUsIDEyODUwLCAxMTk4NzAsIDY1NTMsIDcwNTUsIDAsIAotICAgIDgyNzcsIDAsIDAsIDU0NzUsIDc0Nzk1LCA3MDUyLCAwLCAwLCAxMjk5MCwgMTE2MCwgNDIwODQsIDExOTY1MCwgNDEyMTcsIAotICAgIDExOTY2MCwgMTAwMTgsIDM2MCwgMCwgMCwgNjgxNzYsIDU4NjMsIDMxMzcsIDAsIDQxNDcsIDAsIDQxMjE2LCA3ODQ0LCAKLSAgICAyNjE2LCAxMTkxOTAsIDAsIDY1MjM0LCAwLCAxMzA3NiwgMzEzNSwgMCwgMCwgMTE5MTM5LCAzMTQyLCAxOTQ5NDgsIDAsIAotICAgIDEwODE5LCAxMTk1ODAsIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCA3Mzk2NywgMCwgNjIyNywgMCwgMCwgNzQ3NzUsIDAsIAotICAgIDYxNjMsIDAsIDAsIDAsIDAsIDAsIDg2MDMsIDAsIDExOTg2NiwgMzMwNiwgMTA4NzYsIDAsIDExOTU3MywgMCwgNTgzNCwgMCwgCi0gICAgNjIyMiwgMCwgMCwgMTIwODYsIDAsIDE2MDAsIDY0MzA5LCA2NDkzOSwgMCwgNjQ3ODMsIDAsIDExMzEwLCAwLCA4ODgyLCAwLCAKLSAgICAwLCAyNTcwLCA3MDIxLCAwLCAwLCA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgMCwgNTAwMiwgMCwgNDEyODYsIAotICAgIDAsIDEyNzAxOSwgMCwgNDM1ODUsIDAsIDY1NTEsIDAsIDAsIDAsIDQxMjg5LCAwLCAwLCAwLCA4OTc3LCA2MDIsIDEyMDgxNCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNDEyNzksIDAsIDAsIDAsIDAsIDQzNjE1LCAwLCAwLCAwLCAwLCAxMjcyNywgMCwgMCwgMCwgCi0gICAgOTQ3NSwgMCwgNjUxMDUsIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgNzgzMSwgMCwgMCwgMCwgNzM5MTUsIDgwNzYsIDQzMDQ4LCAKLSAgICA4MjkwLCA4MjkxLCA0MzA1MSwgMCwgMCwgMjU5NiwgNDM1ODQsIDAsIDEzMTEzLCAwLCAwLCAyMzkzLCA3MDU4LCA5MDg3LCAKLSAgICA3NDA2NywgMCwgNDE1NzQsIDAsIDAsIDc0MDU4LCA0MjAzNSwgMCwgMCwgMCwgMCwgOTg1NCwgMCwgNjQ2OTYsIDAsIDAsIDAsIAotICAgIDc0MTY1LCAwLCAxNzIwLCAwLCAwLCAwLCA2NTI5LCA3MDYzLCAwLCAzNzUxLCA5MTIwLCAwLCAwLCAxNzk4LCA3MDksIDAsIAotICAgIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAxMjQzMCwgODEzNywgMCwgMCwgMCwgMCwgMjQ1LCAwLCAxMTQ1NiwgNDEyMzMsIAotICAgIDcwNzAsIDAsIDAsIDYxMzYsIDAsIDY1Njc3LCA4NjgyLCA0MTIzNSwgMCwgNDIwNDUsIDk4MDQsIDAsIDQzMiwgMzU5NSwgMCwgCi0gICAgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgMCwgMCwgMCwgMCwgMTE5NjU4LCAwLCAwLCAwLCAwLCA4Nzk3LCAwLCA5MDUyLCAKLSAgICA2NDg4OCwgMCwgMjM1NiwgOTUsIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAwLCAxMTkxMDQsIDAsIDAsIDAsIAotICAgIDEwMDYzLCAxMjY1MiwgMTIxOTksIDEyNzAzMCwgMCwgMjU2NiwgMTE5NzEsIDAsIDAsIDEwNjUsIDAsIDAsIDAsIDI1NzYsIAotICAgIDAsIDAsIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgMCwgMjkyMSwgNDMyMTUsIDY0NDkzLCA1NzcyLCAKLSAgICAxMjk2OCwgMCwgMCwgNzQ1ODAsIDkxNzU2NSwgMjU4MCwgMCwgNDEzNDEsIDQxMjIzLCA2NTY0LCAxNDYzLCA0MTM0MiwgMCwgCi0gICAgNTI5MywgMCwgMCwgMzczMywgMTEzNDYsIDAsIDEyMDU0LCAwLCA3NDA5OCwgNDI4MjcsIDAsIDEzMDkxLCAwLCAwLCAwLCAKLSAgICA5MTc5MTUsIDAsIDEyNzAyNiwgMCwgNzQ4MjEsIDAsIDAsIDExOTA0MiwgMCwgMCwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAKLSAgICAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMCwgMCwgNjQ3NjEsIDAsIDQxMDIxLCA4NTEwLCA0MjQzMiwgCi0gICAgMCwgMCwgMCwgMCwgNjQ0OTYsIDc0MTA5LCAwLCA5OTE1LCAwLCAwLCA3MDYxLCA0MTMzNiwgMzg1NCwgMCwgMTMxNDEsIAotICAgIDkxNzU2NCwgMCwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MDI5LCA0MzU0MywgMCwgCi0gICAgMjM1MywgNjMwOCwgMCwgNzQ3OTIsIDI2MTEsIDExOTE4NiwgMCwgMCwgMCwgMCwgMCwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIAotICAgIDExODk3NiwgMCwgNjUyMzMsIDAsIDQxMjI0LCA0MTAxNywgMCwgMzc0NywgMTA1MjIsIDAsIDAsIDE2OTEsIDQxMjI2LCAwLCAKLSAgICAxMjEwNywgMCwgMTA5MDUsIDY1MDEwLCAwLCA2OTcsIDY2MDE4LCA5Mjg0LCA0MjQ0LCAwLCAwLCAwLCAxMzEyMSwgMCwgMCwgCi0gICAgMTIwMTAsIDAsIDAsIDAsIDAsIDAsIDAsIDY1ODE2LCA2ODExMSwgMCwgMCwgNjU2NjgsIDAsIDAsIDExODc4NCwgNjYzNjUsIAotICAgIDAsIDAsIDEyNjQ4LCAwLCAwLCAwLCA1Nzg1LCA0MTMwOSwgOTc2NCwgNDEzMTYsIDY1ODc3LCAwLCAxMzIzMCwgNDEyOTksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMTIyLCAwLCAxOTEsIDc0MTE5LCAwLCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgCisgICAgOTgxMCwgMTI3MjY5LCAwLCAxMjk3MCwgMCwgNDIzNTEsIDEwMTA5LCAwLCAwLCAxOTQ2OTMsIDAsIDExOTI0NywgMCwgMCwgCisgICAgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAKKyAgICAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIDAsIAorICAgIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCAKKyAgICA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgMCwgMCwgMTI4MTM1LCA0MTAzNywgNDI2OTIsIDc3ODYsIDEyOTU5LCAKKyAgICA0MTAzOSwgMCwgMCwgNjgwLCA2Mjc0LCAxMjgyMDAsIDExODEsIDcwNTYsIDMxNzQsIDAsIDAsIDkyNjY4LCA2NTY2NSwgCisgICAgMTI3Mzc1LCAwLCA2OTIwLCAwLCA5MjI5NSwgMCwgMTE4OTY1LCAwLCA2NDY0NCwgMTI2OTgxLCAwLCAwLCA0MTAyOCwgMCwgCisgICAgNjIzMSwgMjYxMywgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCAwLCAwLCA0MDk4NywgNDY2NywgMCwgCisgICAgMCwgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIDQ3NDksIDkyNjc1LCAwLCA5MjEsIDQ3NDQsIDAsIAorICAgIDEyNzAyLCAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgMTI4MTIxLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCAKKyAgICA1MzEzLCA5NTEsIDAsIDAsIDAsIDc2MDQsIDAsIDQwMDksIDEyNzgxNiwgMCwgMTIwNTYyLCAwLCAwLCA2NDg2MCwgCisgICAgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgNDA0OCwgMCwgMCwgMTIwNTk2LCAxNjQ2LCA3Nzg5MCwgNjQ1MzQsIDczOTk1LCAKKyAgICAxMjA3MDUsIDAsIDExOTg5MCwgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAKKyAgICAyOTc1LCA3NDQ0MiwgOTgyMiwgMCwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCA5MTc1NjIsIDAsIDMzOTksIAorICAgIDk4NTEsIDAsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNzc3LCA5MTUxLCAKKyAgICAxMTM3LCA2OTc2NywgNzQ5LCA0MjM2NiwgMCwgNTM4NSwgMTI4NTc0LCAxMjgyMTgsIDAsIDAsIDU5ODksIDAsIDAsIAorICAgIDEyODA5MSwgMCwgNDE2ODUsIDY5MjIzLCAwLCA5NzY5LCA0MTY4NCwgMCwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgMCwgCisgICAgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIDY5Njg4LCAKKyAgICA2OTc3MSwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDY5NzY1LCAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIDAsIAorICAgIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgMCwgCisgICAgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCA3NzY0LCAwLCAKKyAgICAxMTA5NCwgMTIwODI1LCAwLCAwLCA0MjgyLCA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgMCwgMTI3NTA5LCA2Mzg1NCwgCisgICAgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIDAsIDAsIDAsIDAsIAorICAgIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAzNDU4LCA0MzY1LCAwLCAwLCAzNjQ3LCAwLCAyNjAyLCAxMjgzNDEsIDAsIAorICAgIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgCisgICAgMCwgOTIxOTMsIDc1OTcsIDEwNTI4LCAwLCAwLCAzNzMyLCA3MzkxMCwgMTk0NTg4LCA1MzQ0LCAwLCA0MzM2NiwgNDMzNjMsIAorICAgIDkwNjIsIDExOTI1MiwgMCwgMCwgMCwgNjQ0NzksIDkyMzIsIDkyNTk2LCAwLCAwLCAxOTQ3MTIsIDEwOTAwLCA0MTUzMSwgCisgICAgMTI2MywgMzcyMCwgMTIwNDgsIDAsIDY0MjkyLCA0MTUyNCwgNzIyNywgMTE5NjM1LCA2MDk5LCA0MTUzNCwgMCwgMTI3MzU0LCAKKyAgICAxMjczNDUsIDI5OSwgMCwgODUyNSwgMTI3MzQ3LCAzNTI0LCA5MTc1NjUsIDg4MzEsIDEyNzM0OSwgOTI1NjQsIDMwNzUsIAorICAgIDY3ODY3LCAxMjczNTIsIDAsIDY2MzYyLCAwLCA2NDM1MywgMCwgMCwgNTg0NSwgMCwgMCwgMCwgMjU4MSwgODIwMCwgCisgICAgNjUxMTQsIDY4NDYwLCAwLCA0MzI4MywgNTU1MSwgMCwgMTIwNzM1LCAwLCA2MzQwLCAxMTg4NTUsIDAsIDc4MTM0LCA4NjgwLCAKKyAgICA3MjA0LCAwLCAyNTg4LCAyOTE0LCA3MDExLCA1NTI4MSwgMCwgMjQ3MSwgMTk0NjMxLCAyODgzLCAyNzQ5LCAxMTk1NjMsIAorICAgIDczNzc0LCAxMDkxMywgMCwgMCwgODY2NiwgNjc1LCA0MjQ5MywgMCwgNDM1NzEsIDAsIDYyMTksIDAsIDk5ODAsIDQxMjMyLCAKKyAgICAxMDkyOCwgMCwgNDExNTMsIDQxMjI5LCAxMTg5NjcsIDAsIDM3MzgsIDEyNzM2OSwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCAKKyAgICA3NDI4OSwgNjg0NzIsIDQyODU3LCA4MjYyLCAwLCAwLCAwLCAwLCA0MjM0NywgMTIwOTIsIDk2MTUsIDcyMzQsIDc0MDQ3LCAKKyAgICAwLCAwLCA2NDY3NCwgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgNDM5ODMsIDc0NTA3LCAwLCAKKyAgICA3NDQ2MSwgMzIxOCwgMTIwNDcxLCA3NDI5MCwgMTIwNDY5LCA2NDU2MiwgMTIwNDc1LCA4NTY5LCAxMTQwNCwgMTE5MzIsIAorICAgIDczNzI4LCAzMjE0LCAxMjA0NjEsIDEyMDQ2OCwgMTIxMjgsIDMyMDcsIDY1NDg2LCA3ODcyOSwgMTkwMSwgNzg3MjcsIAorICAgIDEyNzMyNiwgMTIwNDYwLCA3NDI1LCAzMjA1LCAwLCA3ODczNywgNzg3MzYsIDc4NzM1LCA0MzM4MywgNzg3MzMsIDY1NDU5LCAKKyAgICAyNjA2LCA3ODczMCwgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgMTE5NjYxLCAwLCAwLCAwLCAxMjA3MzcsIDAsIAorICAgIDAsIDAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDAsIDY1Njk1LCAwLCAzNywgNzA2OCwgMCwgMTIwNDgwLCAxMjA0NzksIAorICAgIDMyMDksIDEyMDQ3NywgMCwgMTA2MzgsIDk3NjgsIDEyMDQ4MSwgMCwgMCwgMCwgMCwgMCwgMCwgNjU1MTAsIDAsIDAsIAorICAgIDUyMzMsIDAsIDY0NzkyLCAwLCAwLCAwLCAwLCA3MDYwLCA5ODQ3LCAxMjAxNDQsIDE2ODUsIDU5NSwgMCwgNzM5NzEsIAorICAgIDEyOTIsIDg5NDAsIDczODAsIDExMDg4LCAwLCAxMDAwNCwgMTI2OTk3LCAwLCA2NTQxLCAwLCAwLCAwLCAzMjQzLCA5MDE0LCAKKyAgICA1NjA2LCAwLCA1MzgsIDY0NjIwLCA1NjAyLCA4NDY3LCA3NDM5MSwgNjU0NywgMCwgODIwMywgNzg0ODgsIDAsIDg0NTgsIAorICAgIDY1MjExLCA4NDk1LCAxMTk5MDQsIDAsIDkxNzU1MiwgNzc5LCA3ODMxNCwgNjQzNjcsIDI0NjUsIDAsIDgxOTMsIDU1Mjc5LCAKKyAgICA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgOTI0MTQsIDg5ODIsIDAsIDAsIDAsIAorICAgIDc4MiwgMCwgMTA4ODMsIDAsIDE5NDg1MiwgNzMyLCAzNzM3LCAxMjcyNTMsIDE1NDgsIDY4NjUwLCAwLCAxODMyLCA1NjA0LCAKKyAgICA1NzM1LCA0MTE0MSwgMTE5MDIwLCA0Mzc2LCAwLCAxMTc4NywgMzc0NSwgMCwgMCwgNDI4ODgsIDY1NzEyLCAwLCAzODY5LCAKKyAgICAxMTkzNywgNTcyNSwgMTI3NTM5LCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCAKKyAgICA1NzI3LCA3ODUyMSwgMCwgMCwgNzY0LCAwLCAxMjgxMTYsIDQzNTMxLCAwLCA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIAorICAgIDEyMDc0OSwgMTE0MjMsIDAsIDExOTg2MSwgMCwgNDM0NjUsIDAsIDEyODI2NywgNjU1OSwgNjQ1NTcsIDAsIDAsIDEyMDY0OCwgCisgICAgNDMwMTksIDQzNDc3LCAxMDIzOCwgMCwgMCwgNDMzNzcsIDkyMjgyLCAwLCAxNDc4LCA5NzgzLCAxMTgyNSwgMjYwNywgCisgICAgNjQ3NDAsIDAsIDc3MzksIDc0NTQzLCAwLCAwLCAwLCA2MTMyLCAwLCA2Mzc2NSwgMCwgMCwgNDExNDQsIDAsIDkyNDM4LCAKKyAgICA0MzUzNywgNjc2MSwgMTAwOTMsIDQzNjksIDkxNzc5MSwgMCwgMCwgODgyMCwgMzk0NywgMCwgMCwgMTE1MTUsIDUyNiwgMCwgCisgICAgNDEyOTUsIDE5NDYwMywgOTE3Nzg1LCAxOTQ5MzIsIDAsIDc2ODgsIDkxNzc4NiwgNzY4NiwgODI4OCwgMTE4MTUsIDAsIDAsIAorICAgIDAsIDE1NDMsIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgCisgICAgMTE3OTQsIDQyMDgyLCAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgOTMzNSwgMTI4NTAsIDExOTg3MCwgCisgICAgNjU1MywgNzA1NSwgMCwgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDY3ODAsIDAsIDAsIDEyOTkwLCAxMTYwLCA0MjA4NCwgCisgICAgMTE5NjUwLCA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgMzEzNywgMCwgNDE0NywgMCwgCisgICAgNDEyMTYsIDc4NDQsIDI2MTYsIDExOTE5MCwgNjg0NjEsIDY1MjM0LCAwLCAxMzA3NiwgMzEzNSwgMCwgNzgxNDMsIAorICAgIDExOTEzOSwgMzE0MiwgOTI0NTEsIDAsIDEwODE5LCAxMTk1ODAsIDEwMTgzLCAwLCAyNjA4LCAxNDcwLCA3Mzk2NywgMCwgCisgICAgNjIyNywgMCwgMCwgNjk3NDEsIDAsIDYxNjMsIDAsIDAsIDEyNzMxNCwgMCwgMCwgODYwMywgMCwgMTE5ODY2LCAzMzA2LCAKKyAgICAxMDg3NiwgNDMzOTIsIDExOTU3MywgMTI3OTMxLCA1NzUxLCAwLCA2MjIyLCAwLCAwLCAxMjA4NiwgNzQwMywgMTYwMCwgCisgICAgNjQzMDksIDY0OTM5LCAwLCA2NDc4MywgOTI2NTgsIDExMzEwLCAwLCA4ODgyLCAwLCAwLCAyNTcwLCA3MDIxLCAwLCAwLCAKKyAgICA0MzExMCwgMCwgMTIzNCwgNjU0MCwgNjk3NCwgMCwgMCwgMCwgNTAwMiwgMCwgNDEyODYsIDAsIDEyNzAxOSwgMCwgNDM1ODUsIAorICAgIDAsIDY1NTEsIDAsIDEyODIyOSwgMCwgNDEyODksIDAsIDE5NDYwMiwgMCwgODk3NywgNjAyLCAxMjA4MTQsIDAsIDEyODc3OCwgCisgICAgMTI4NjYxLCAwLCAwLCA0MTI3OSwgMCwgMCwgMCwgMTEwODEsIDQzNjE1LCAwLCAwLCAwLCAwLCAxMjcyNywgMCwgMCwgCisgICAgNzgzOTcsIDk0NzUsIDcxMTIsIDY1MTA1LCAwLCA5NjMzLCAxMDg4NiwgNDM1OTIsIDc4MzEsIDAsIDE5NDU3MSwgMCwgCisgICAgNzM5MTUsIDgwNzYsIDQzMDQ4LCA4MjkwLCA4MjkxLCA0MzA1MSwgOTI1NzAsIDAsIDI1OTYsIDQzNTg0LCAwLCAxMzExMywgCisgICAgMCwgMTI3NzU3LCAyMzkzLCA3MDU4LCA5MDg3LCA3NDA2NywgNjg2NzMsIDQxNTc0LCA3ODMzNywgMCwgNzQwNTgsIDYzNzYsIAorICAgIDAsIDAsIDAsIDAsIDk4NTQsIDEyNzc0OCwgNjQ2OTYsIDAsIDEyODIyMCwgMCwgNjk5NCwgMCwgMTcyMCwgMCwgMCwgMCwgCisgICAgNjUyOSwgNzA2MywgMCwgMzc1MSwgOTEyMCwgMCwgMCwgMTc5OCwgNzA5LCAwLCAxMzU0LCAxODc2LCAxMzE1MiwgNjU1NywgCisgICAgMTI0MzAsIDgxMzcsIDAsIDkyNjQyLCAwLCAwLCAyNDUsIDEyODA5NywgMTE0NTYsIDQxMjMzLCA3MDcwLCAwLCAwLCA2MTM2LCAKKyAgICA5MTc2MDksIDY1Njc3LCA4NjgyLCA0MTIzNSwgOTI1OTUsIDQyMDQ1LCA5ODA0LCAwLCA0MzIsIDM1OTUsIDAsIDY1NDM3LCAKKyAgICAwLCA3NDQ1NSwgNDIzOTksIDAsIDAsIDEyODI3NCwgMCwgMTE5NjU4LCAwLCAwLCAwLCA3Nzg5NCwgODc5NywgMCwgOTA1MiwgCisgICAgNjQ4ODgsIDcxNjcsIDIzNTYsIDk1LCA3NDc4NCwgMTA1ODAsIDAsIDQyMjg2LCAwLCA2NDY0MCwgMCwgMTE5MTA0LCAwLCAKKyAgICA3NDEzNywgMCwgMTAwNjMsIDEyNjUyLCAxMjE5OSwgOTI0ODAsIDAsIDI1NjYsIDExOTcxLCAwLCAwLCAxMDY1LCAwLCAwLCAKKyAgICA0MzQwMCwgMjU3NiwgNjY2OTYsIDAsIDAsIDQzNjA0LCAwLCAwLCA3NDA4MiwgNTE0LCA3NDUwMiwgMCwgMjkyMSwgNDMyMTUsIAorICAgIDY0NDkzLCA1NzcyLCAxMjk2OCwgMCwgMTk0OTQ0LCA3NDU4MCwgNDMzOTgsIDI1ODAsIDAsIDQxMzQxLCA0MTIyMywgNjU2NCwgCisgICAgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDAsIDAsIDM3MzMsIDExMzQ2LCAwLCAxMjA1NCwgMCwgNzQwOTgsIDQyODI3LCAwLCAKKyAgICAxMzA5MSwgMCwgMCwgMCwgOTE3OTE1LCAwLCAxMjcwMjUsIDAsIDc0ODIxLCAwLCAwLCAxMTkwNDIsIDAsIDEyNzg2NSwgCisgICAgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMTI3ODI0LCAwLCAKKyAgICA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIDQyNDMyLCAwLCAwLCAwLCAwLCA2NDQ5NiwgNzQxMDksIDAsIDk5MTUsIDAsIDAsIAorICAgIDcwNjEsIDQxMzM2LCAzODU0LCA2OTcwMCwgMTMxNDEsIDY4NDEzLCA0MzQwMSwgNDIzMTksIDEzMDgyLCAwLCA3MDY3LCAKKyAgICA2ODIyMSwgMCwgMCwgMTI3MTcxLCAwLCAwLCAxMjc3OTcsIDkwMjksIDQzNTQzLCAxMTkzMTUsIDIzNTMsIDYzMDgsIDAsIAorICAgIDc0NzkyLCAyNjExLCAxMTkxODYsIDAsIDAsIDAsIDQzNjY0LCA5MjM5OSwgNjY2MjcsIDAsIDQ0ODQsIDg1MDksIDExODk3NiwgCisgICAgNzgxMTYsIDY1MjMzLCAwLCA0MTIyNCwgNDEwMTcsIDAsIDM3NDcsIDEwNTIyLCAwLCAwLCAxNjkxLCA0MTIyNiwgMCwgCisgICAgMTIxMDcsIDQ0MDAyLCAxMDkwNSwgNjUwMTAsIDE5NDk4NiwgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgOTI2NDQsIAorICAgIDEzMTIxLCAxMjAwMzYsIDAsIDEyMDEwLCAxMjg1NzMsIDEyODIyMSwgMCwgMCwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIAorICAgIDAsIDEyNzkzMywgNjU2NjgsIDkyMjU3LCA2NjE4LCAxMTg3ODQsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDEyODAzOSwgCisgICAgNzEyMywgMCwgNTc4NSwgOTE5OCwgOTc2NCwgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAKKyAgICAxMjgyNTgsIDAsIDAsIDAsIDEzMTIyLCAwLCAxOTEsIDc0MTE5LCA4NTg1LCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgCiAgICAgNjQ4NTAsIDQxMDcyLCA0MTU3OCwgMCwgNDE1NzcsIDAsIDEwMDAyLCAwLCA2NTMzLCA3MzgwMiwgNDE1NzAsIDAsIDY4MywgCi0gICAgMzk2LCA0MTU4MCwgNjgxNDYsIDAsIDEyOTAxLCAwLCAwLCAzNDMsIDAsIDAsIDQxMzYwLCAwLCAwLCA0NzQzLCAwLCAwLCAKLSAgICA3NDA0MCwgNzQxMDgsIDg3NDMsIDE3MjQsIDE0MzMsIDExOTMyNCwgMCwgMzczOSwgNjI2MywgMCwgMCwgMzk2NCwgNjU5MiwgCi0gICAgMCwgMCwgNjYwNDAsIDAsIDQyNTY4LCAwLCAwLCAxNzc4LCAzOTU2LCAwLCA0MjA3MCwgNjU2MywgNDMwNzUsIDkwMTgsIDAsIAotICAgIDAsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgMCwgMCwgMCwgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAKLSAgICAxNzMsIDY2NDYwLCA3MTc0LCAwLCAwLCAxNzUwLCAwLCA0Mzk0LCAwLCAxODA3LCAwLCAwLCAwLCA1ODg5LCAwLCA3MTgwLCAKLSAgICAwLCAxMTkxNDUsIDAsIDAsIDQyNDcxLCA2OTgyLCAxNzIxLCAxMTkxNDQsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgCi0gICAgNDUxMiwgMCwgMCwgMCwgMCwgMCwgMzg1NSwgMCwgMCwgMCwgMCwgNzQyOTUsIDAsIDAsIDExOTE0MCwgMzk3NSwgMCwgCi0gICAgNzQwODcsIDAsIDEyNjcyLCAzNzk4LCAyNzAzLCAwLCAwLCAwLCA5Nzc0LCAxMjc1LCAwLCAwLCA0MTA5NSwgMzk2MiwgMCwgCi0gICAgNzg3MywgNDExMDEsIDM5NTQsIDY0NTcsIDQ1MTMsIDAsIDAsIDczOTk0LCA3Mzk5MiwgMTQ2OCwgMCwgMCwgNDE4NTEsIDAsIAotICAgIDQxODQ2LCAwLCAwLCA3NjMzLCA0MTg0OSwgMCwgNDMyMCwgMzIyNCwgMCwgMCwgMCwgNDI1MzEsIDAsIDE1MTAsIDAsIAotICAgIDgyNTYsIDAsIDExMzkzLCAwLCA4ODc5LCAwLCAwLCA4NzcwLCAwLCAwLCAxMjcxMjAsIDE5MTAsIDg2NzEsIDAsIDQyODMsIAotICAgIDAsIDEyNzExNywgMCwgMCwgMjY1NCwgNzg5MywgMCwgMCwgMCwgMCwgNjUxMDYsIDQyNzYxLCAxMjg1NywgNDU4MSwgODQxMSwgCi0gICAgMTE5MDI5LCAxMjcxMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MzMsIDQzOTIsIDI1NjgsIDEwNzg2LCAwLCAwLCA4MTg0LCAKLSAgICA0MTQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNzE4NSwgNzk2NSwgMCwgMCwgMCwgMCwgNDEzNTAsIDkxMjksIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwNDgxLCAwLCAwLCA3MTcxLCAwLCAzNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkxNzYyMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgNjUyMDMsIDExMzkyLCAwLCAwLCAwLCAzMjEwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc2MTksIDAsIDAsIDEwMDQzLCAwLCAKLSAgICAxMTg2LCA0MTU3MSwgNjk5OSwgNjE3LCA5NDY0LCAwLCAzNjc1LCA1MjA3LCA2NTA2MiwgNTIxMywgMCwgMjYxNywgNDEzNDgsIAotICAgIDQxNTY4LCAwLCAzMjUzLCAxMjA1MzUsIDAsIDg2MzAsIDAsIDAsIDU1OTYsIDU1NDUsIDcyODgsIDI1ODYsIDY0ODg3LCAwLCAKLSAgICA1MjE3LCAwLCAwLCAwLCAwLCA2NDI5MywgNjgwOTgsIDI2MzUsIDAsIDAsIDAsIDAsIDAsIDc4MzUsIDAsIDAsIDE5NDk4OCwgCi0gICAgMCwgNjQ1NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDU3ODQsIDAsIDAsIDAsIDAsIDQwMTEsIDAsIDY4MTAxLCAwLCA3ODY0LCAKLSAgICA0MjU0LCAxMTg5NzUsIDAsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIDU1OTgsIDEyMDcsIDEyMDUyMSwgMCwgMzUwMSwgCi0gICAgNDI1ODIsIDQzNjAwLCAwLCAwLCAxMTI0LCA1NTk3LCAwLCAwLCA5MzIxLCAwLCAwLCAwLCAwLCAxNzE5LCAxMjA1NzYsIDAsIAotICAgIDk2NzEsIDExMjUsIDQzOTksIDAsIDAsIDAsIDc2MzEsIDU0ODgsIDY1MjIzLCAwLCAwLCA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgCi0gICAgMjYwNCwgNzQxODcsIDU0OTAsIDQzMDQ2LCA1NDg5LCA3MjEyLCAxMTc2OCwgNDMwNDMsIDYzMDAsIDAsIDE5NDc4OSwgMCwgCi0gICAgNDM5MCwgNDU0LCA0MTM5NywgMCwgOTg3NSwgNzU5MywgMTk0NzkyLCAwLCAxMTg5MTMsIDcyMDcsIDAsIDY1OTAxLCAyMzk0LCAKLSAgICAyNTc1LCAwLCAzNzQ2LCAxMTAxNiwgNjU3NTIsIDAsIDAsIDkxNzk0NCwgMCwgMTE5ODksIDAsIDAsIDAsIDAsIDAsIDgyNDksIAotICAgIDAsIDAsIDAsIDY2NDAsIDc0ODA2LCAyNTk4LCA1MTMsIDAsIDY1ODYsIDg2NTYsIDAsIDAsIDY1MDA4LCAwLCAxOTQ3ODQsIAotICAgIDAsIDE5NDc5NSwgMCwgMCwgMTk0OTg3LCAwLCAwLCAwLCAxOTQ5ODYsIDEyNjQ3LCAwLCAxOTQ3OTYsIDAsIDEwMzYsIDAsIAotICAgIDAsIDE3MjMsIDAsIDAsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDAsIDc0NDg2LCAwLCA3NDAsIDE5NDk4NSwgCi0gICAgMCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgOTE3OTQzLCAwLCAwLCAwLCA4MTIxLCAxMDQzOCwgNzQ0ODcsIAotICAgIDQyNTc0LCAxMzI4NSwgMTk1MDAxLCAxMTkwNywgMCwgNTY5MCwgMTk0OTk5LCAwLCAwLCA0MzE4MSwgMTMwOTUsIDAsIDAsIAotICAgIDY0NDk4LCAwLCA5NTA2LCA2OTc4LCAxOTQ5OTMsIDAsIDAsIDAsIDE5NDk5MiwgMCwgMCwgMTEyMiwgMzE3LCAwLCAwLCAwLCAKLSAgICAwLCAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCAwLCAxMjAxMjYsIDUyMjMsIDEzMDQsIDAsIDExOTU2NCwgNTIyNiwgCi0gICAgMTI2MDIsIDAsIDAsIDkzMjksIDc3NTgsIDkyMzksIDQxMTczLCA1MjI0LCA1NDg3LCAxMjIyLCA1NjkyLCA0MTcyNSwgMCwgCi0gICAgOTY3NCwgNTY5NSwgNDE3MTEsIDY0NjI3LCAxOTkwOSwgMCwgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAyMzMsIDAsIDAsIAotICAgIDQyODE2LCAwLCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgNDExNzUsIDAsIDAsIDAsIAotICAgIDUyOTYsIDAsIDQyNDkyLCAwLCAwLCAzMzAyLCAwLCAwLCA2NTE2LCA2NTE1LCA2NTE0LCA2NTEzLCA2NTEyLCAwLCA3ODU2LCAKLSAgICA4NjkwLCAwLCAwLCAxMjEyMiwgMTE5NjI4LCAxOTQ4MTMsIDAsIDE3ODUsIDAsIDEyMDYzNSwgNjUxNTMsIDE5NDgxMCwgCi0gICAgNTEzOCwgMCwgMCwgMCwgMCwgNDU0MCwgNDExODEsIDAsIDYyMDAsIDAsIDUxMzQsIDAsIDMyMiwgNDY0MywgNTEzMiwgMCwgCi0gICAgMCwgMCwgNTE0MywgMCwgODc5MCwgMCwgMCwgMTk0ODAyLCAwLCA4ODY5LCAxMjA2MDEsIDAsIDQyMDYwLCAwLCAwLCAwLCAwLCAKLSAgICAxMDI3MCwgMTAyODYsIDEwMzE4LCAxMDM4MiwgNDM1MjksIDY2NDc3LCAwLCAwLCA3NDE3MCwgMCwgMzIzNCwgMCwgMCwgCi0gICAgNzQzNzYsIDQzMTM5LCAxMTg5MjQsIDEyNzA4NCwgMTIwNjI3LCA4NzY3LCAwLCA3NDQ4OSwgNDEyODEsIDEyMDc0NiwgCi0gICAgNTIwMSwgMCwgNjIxNSwgMTI3MTQsIDYyMTQsIDEzMTAxLCAwLCAwLCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIDEwMDU5LCAKLSAgICAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgMTc0OSwgMCwgMTI3MDcxLCAwLCAzMjAsIDAsIDg2NDcsIDAsIDMwNDksIDAsIAotICAgIDY0NzEsIDQyMDcxLCA0MzE1NiwgMCwgMCwgMCwgMCwgNDk2MCwgNTU0OSwgMCwgMCwgODQ4NSwgNDY3MSwgNTQxOCwgMCwgCi0gICAgMzM1MSwgMCwgMCwgMTA2MTAsIDU0MTQsIDMwNjQsIDYyMTIsIDQyODYsIDU0MjEsIDAsIDk1NTQsIDAsIDAsIDAsIDY2NTMsIAotICAgIDAsIDAsIDY0NTEwLCA2MjEzLCAxMjg4NSwgMCwgMTE5MDQ1LCA2NDcyMCwgMCwgMTIwNzU5LCA3Mzc0MSwgMTI2MDMsIDAsIAotICAgIDExNDMwLCA0NTY2LCA3ODQzLCA5MzE3LCAzODAxLCAxMDM0MiwgMTA0MDYsIDAsIDExOTI1OSwgNDI1NzYsIDAsIDUyMDAsIAotICAgIDAsIDAsIDAsIDkxODMsIDAsIDc0NDU4LCA3MzgyNSwgMzk1LCA1NDgyLCA1MTk4LCA4Nzg2LCAxMDM5MCwgNzQyMDIsIAotICAgIDUxOTYsIDQzMjI0LCA2MTEzLCA0MjAwOSwgNTIwNSwgMCwgNDMzMDcsIDAsIDExODk3MywgMCwgMTIxMzQsIDAsIDAsIAotICAgIDExODg0MywgOTEyNiwgNDM1LCAwLCAxMjAxNCwgMTI4OTMsIDgwOTMsIDkwNzksIDMyMDMsIDE5MiwgNjUxMDksIDMzODUsIAotICAgIDAsIDY0NDMwLCA1MzgzLCAxMDI5NCwgMTAzMjYsIDAsIDU3MzgsIDAsIDMzMzYsIDAsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCAKLSAgICA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgMzE0OSwgNTM1OSwgMCwgMCwgNzkxNCwgNTM1NywgMCwgMCwgMjYyNCwgCi0gICAgNTM2NCwgMCwgMTE0MzEsIDAsIDkxMDEsIDExMDU4LCAwLCAwLCAwLCA0MjI3MSwgMCwgNjU3MzcsIDEyMDc5MywgMCwgMCwgCi0gICAgMCwgMTA2MTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDkzMTksIDcwOTcsIDExOTA1NSwgMCwgMzIzMiwgNzM4MjQsIAotICAgIDc0NTgxLCAwLCAwLCAwLCA0MTg4OSwgMCwgMCwgMTE2MSwgNDE4OTUsIDc0MTAzLCA5NzAxLCA4NjIyLCAwLCAwLCA3MzgxOSwgCi0gICAgMTIwNTg4LCA1MDEyLCAxMTkwNDksIDQxMzYyLCAwLCA5MTc3NjIsIDExOTIxLCAwLCAxMTc2OSwgMCwgMCwgNDEzNjQsIDAsIAotICAgIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDAsIDExOTkxNSwgMTE5OTIzLCA4MTk5LCAKLSAgICAxMTk5MTIsIDExOTkxNywgNjc3LCAxMTk5MTYsIDAsIDExOTkzMiwgMCwgMCwgMCwgMCwgMzM0OSwgNzQxMjUsIDcwMjIsIAotICAgIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIDg2MTUsIDAsIDAsIDQ5MSwgMCwgMCwgMCwgNjU4MzcsIDAsIDg0MjYsIDExMDkyLCAKLSAgICA5ODkxLCAwLCA0MjQ5NywgMCwgNzU4NiwgNDIzMDUsIDEwODUyLCAwLCAwLCAwLCAwLCA5MDk1LCA3NzQxLCAxMjY4NCwgCi0gICAgNDE4ODUsIDEwNDYsIDAsIDAsIDAsIDU4MTUsIDUxNzEsIDY1NTM5LCAwLCA2OTMyLCAwLCA0MjM5NCwgNDE4NzgsIDc0ODQ5LCAKLSAgICA5MTc5NTEsIDAsIDUxNjksIDExOTM1LCAwLCAwLCAzMTc1LCAxMjA4MjIsIDE1MzcsIDEyMDgwNCwgNTE3NiwgODkwNSwgCi0gICAgNDEzNiwgNDg3MSwgMCwgMCwgOTgzMywgMCwgMCwgMTEyOCwgNjU5MjAsIDAsIDk3MTEsIDcwNTcsIDk0MDgsIDk0MDksIAotICAgIDk0MTAsIDk0MTEsIDM2NjIsIDk0MTMsIDMzNzgsIDk0MTUsIDk0MTYsIDk0MTcsIDk0MTgsIDg5MDksIDk0MjAsIDk0MjEsIAotICAgIDU4OTcsIDk0MjMsIDUxNjUsIDUxMjYsIDQxMzg1LCAwLCA0MTM4OSwgOTE3OTM4LCA4OTU1LCAzMzc0LCA5NDAwLCA5NDAxLCAKLSAgICA5NDAyLCA5NDAzLCA5NDA0LCAzNTA3LCA5NDA2LCA3NjI5LCAwLCAxOTkyNSwgMCwgNzM4MzIsIDE4MywgMCwgMjYzMSwgMCwgCi0gICAgMTA2MjcsIDQxMTMwLCAwLCAzOTk2LCAwLCAwLCAwLCAwLCAxMTkzMDcsIDAsIDY1ODAsIDQzMzIsIDY0ODI1LCA2NjMyOSwgCi0gICAgMTA3MjYsIDY2Njg2LCA0MTEyNSwgNTg5OSwgNDEzNjUsIDkxNzkxOCwgMTIwODUsIDAsIDU3NCwgOTE3OTIyLCAwLCAKLSAgICA3MzgyOCwgNTQ0OCwgNDEwNTgsIDU0NDYsIDczOTAwLCA0MTMyMiwgNzQ3NjgsIDU0NDIsIDQxOTAsIDAsIDAsIDU0NTEsIDAsIAotICAgIDM2MTYsIDAsIDAsIDAsIDc3MDgsIDAsIDEwODU5LCA2NTg2NywgMTAzNDUsIDEwNDA5LCA0MTkxLCAwLCAxMjA3MTksIAotICAgIDczODAwLCA0MjE4MSwgMCwgMCwgNDQ0NywgMCwgMTIwNzA4LCAxMTc4OCwgNjU1ODcsIDAsIDEwNDE1LCA3NDEwMiwgMCwgCi0gICAgMjA1LCAwLCAxMDM1MSwgMTE5MDc2LCAwLCA5ODYyLCA2NTg4LCAwLCA2NDY5NywgMCwgNDEzNTUsIDU1MDUsIDExOTE1NCwgCi0gICAgNTUwMywgODAyMSwgMCwgMTE5MTUwLCA5ODE5LCA0MTM1NywgODAxMSwgNDI4ODUsIDU1MDcsIDEyMDQ0LCAwLCAwLCAKLSAgICAxMDAyNiwgNTQ3MiwgNjUxMDgsIDExOTEsIDEzMTA2LCA1NDcwLCAxMDMyOSwgNTQ3NiwgODk5MSwgNjYzMjIsIDAsIDAsIAotICAgIDQyODc0LCA4NTUwLCA0Mjg3NiwgNTU5MiwgMjkxOSwgMCwgMjY3NSwgNTU5NSwgMCwgMCwgNDM2NywgMCwgMCwgNTQ3OCwgCi0gICAgNTkwNCwgNTU5NCwgMCwgNzQxNTAsIDcyOTEsIDU1OTAsIDAsIDEzMDY3LCAxMTg5MDksIDAsIDAsIDk3MzEsIDAsIDY0NjMzLCAKLSAgICAxOTQ1NjUsIDAsIDAsIDAsIDAsIDAsIDEwNzUwLCAwLCAwLCA3NDU0NSwgMCwgMCwgMTI4ODcsIDEwNTUxLCAxOTQ1NjQsIDAsIAotICAgIDAsIDAsIDEyMDU3MCwgMCwgNTE5OSwgMCwgMTEyMCwgNDIzODcsIDAsIDE0NDQsIDk0ODYsIDc1NTQsIDY1ODM5LCAwLCAwLCAKLSAgICAxNDQyLCAwLCA1ODk0LCAwLCAwLCAwLCAwLCA3NDMxMywgMCwgMTMxNjIsIDAsIDMzMzQsIDAsIDExODgwMywgMCwgNjYwMjIsIAotICAgIDAsIDAsIDE2NTEsIDAsIDg4NjEsIDAsIDAsIDExNDIsIDAsIDgyNzEsIDAsIDAsIDAsIDEyOTAzLCAwLCA0MDAyLCAwLCAKLSAgICAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIDAsIDEyOTIwLCAwLCAwLCAwLCAwLCAxMjc3LCAwLCA3ODcxLCAwLCAwLCAwLCAwLCAKLSAgICAxMTkwMTUsIDEyMDM2MCwgMCwgMTE3ODQsIDAsIDAsIDQ3MDAsIDY2MzY2LCAwLCAxMjAzNTksIDExMDEyLCAwLCAwLCAKLSAgICAxMjAzNTgsIDAsIDQ5NzMsIDg3ODQsIDAsIDc0ODA0LCAwLCAwLCAxMTg5ODEsIDQyNDQwLCAwLCA0MzExOCwgMCwgNDIzNjQsIAotICAgIDAsIDExNTQzLCAwLCAwLCAxMDM0NiwgMTA0MTAsIDAsIDkyNDMsIDI0NjQsIDAsIDYxMDgsIDMzNzIsIDAsIDYyNDcsIAotICAgIDQzMTE3LCA3NDUyNiwgMCwgNzQxNjYsIDAsIDEyMDM1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQyMTcsIDMzNTQsIDAsIAotICAgIDQxOTIsIDkyODksIDExODk5OSwgNDExOTEsIDM4NzYsIDAsIDAsIDEyMDY2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE2MDMsIAotICAgIDAsIDAsIDY1ODksIDAsIDE5NDY3OSwgMCwgMCwgMCwgMCwgMCwgNDI1NzIsIDAsIDEwNjMwLCA3NDgyNywgMTk2MywgCi0gICAgMTE4ODg5LCAwLCAxMTY1NCwgMCwgNzU1MCwgMTA2ODYsIDU5MDMsIDAsIDAsIDQxMzI5LCA5NjYyLCA5MTc5MzcsIDY0Njk4LCAKLSAgICAzMzY2LCAxMDM5OSwgMCwgMCwgMTEwMTMsIDAsIDkxNzkzMywgMCwgMCwgMCwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAKLSAgICAxMTU2OCwgMCwgOTE3OTMxLCA2NDU3OSwgOTE3OTMwLCA3ODUyLCAwLCAwLCAxMjI5MiwgNjMxMiwgMCwgNjQ2NzIsIAotICAgIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgMTIyOTYsIDc0NzUzLCA3MzgzNCwgMCwgMTEwNTAsIDEwOTg0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5NTMyLCA2NjM1NSwgMCwgMCwgOTE3OTI1LCA2NDM0MywgMTk1MDMyLCAwLCAxOTUwMzEsIDAsIDAsIAotICAgIDE5NTA1NywgMTE0NDUsIDAsIDE5NTAyOCwgMCwgMTk1MDI3LCAwLCAxMDIxLCAwLCA5NTA3LCAxMDIxMCwgNzQ1NDQsIAotICAgIDgwMjMsIDEyMDAsIDEyMjQzLCAxOTUwNjIsIDUyODIsIDE5NTA2MSwgMTI1NDAsIDExNTQ1LCAwLCAxMjA0OTMsIDMzNDMsIAotICAgIDQ0MjQsIDExMDQ3LCAxODg1LCA0MzI2OCwgMzg5NiwgMCwgNjY0OTcsIDI5NDcsIDM5MiwgNzg5NCwgNDM5MSwgNjgxMzksIAotICAgIDAsIDEzMDU5LCA3NDgxNiwgMCwgMzM4MSwgNzk0MiwgMCwgMCwgMCwgMCwgMCwgMzkxMywgMCwgMCwgMCwgNzA0NCwgMTI2NSwgCi0gICAgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgMCwgMTE3OTEsIDAsIDAsIDgyMjEsIDAsIDQxODY0LCAwLCAwLCAwLCAwLCAKLSAgICAxNjcsIDAsIDkxNzU4NCwgMCwgNzQyMTEsIDQxODk3LCAwLCAwLCAwLCAwLCAwLCAyNDkzLCAwLCAxMTg4MTEsIDAsIDAsIAotICAgIDY0MzU0LCAwLCA4Nzc3LCAwLCA0MDYsIDg4ODQsIDIzODUsIDAsIDAsIDAsIDAsIDQzMDMwLCA0MjAyNywgMTIxMTQsIDAsIAotICAgIDAsIDY0OTM2LCAwLCAwLCAxMjA2MjksIDEwNTYxLCAwLCA4MzY1LCAwLCAwLCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgMCwgCi0gICAgMCwgOTE3NTc1LCA3ODM0LCA3NDE1OSwgMCwgMCwgMTAyOTgsIDY2MjQsIDQ5MDgsIDkxNzU5NiwgMTYzOSwgMCwgMCwgCi0gICAgNzQxNTcsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4MTcsIDAsIDE5NDc1OSwgMCwgNzA0MywgOTYwMCwgMTEwMjIsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDc1NDgsIDY0Nzk0LCA0MjA1MCwgMTIyOTEsIDAsIDE5NDc2MSwgMTIzNDMsIDY1NywgMTk1MDU0LCA2NDY4MiwgCi0gICAgNDQ2MSwgMTEzNCwgMTgzOCwgMCwgMCwgMCwgNDQ2OCwgMCwgMCwgMCwgNDQ1NiwgNTIwNiwgMTA3MjAsIDAsIDQyNTIzLCAwLCAKLSAgICAwLCAwLCAwLCA2NTU1MCwgMjYwLCA0ODE2LCA3NDE2MywgMTA2ODcsIDAsIDQ4MjEsIDQ0NjYsIDAsIDE5NTA0MywgNDgxOCwgCi0gICAgMCwgNDE0MDMsIDExOTk3NywgMCwgMCwgNDE0MDYsIDQzMjczLCA3NDE2MCwgMTE5OTgzLCA3MzkzOSwgMTE5OTg1LCAKLSAgICAxMTk5ODQsIDExOTk3OSwgNDE0MDQsIDExNjUsIDExOTk4MCwgNDQ1MSwgMTMwODcsIDAsIDExMjg0LCAxMTk5ODcsIAotICAgIDczODU1LCA2NTE1NSwgNDMwMTQsIDU0MzksIDkzNjMsIDAsIDMzNzUsIDAsIDU5MDAsIDAsIDc4ODksIDI3MjIsIDQyMjYyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTQwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjU0MzgsIDAsIDcyODAsIDAsIDAsIDAsIAotICAgIDQ4NjgsIDExOTk2NywgMTE5OTY2LCAwLCAwLCAwLCA0MzE2MSwgMCwgMTE5OTY0LCAwLCA1MTgyLCAwLCAxMjA1NDIsIDAsIAotICAgIDAsIDQyMjYsIDEyMDc5OCwgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDAsIDk3NywgNDQ1OCwgMCwgMCwgNjQ3NzAsIDAsIDAsIAotICAgIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgMCwgMCwgNzg2LCAwLCA0MzE3NCwgNjQzNDAsIDAsIDAsIDAsIAotICAgIDQzMDI2LCA3NjEyLCAxMDEzMiwgNjQ0MTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDQ5OCwgMCwgMTIwNzM0LCAwLCAKLSAgICAxMTkxNjAsIDEwMjA0LCAwLCAwLCAwLCAwLCAxMzk5LCAwLCAwLCAwLCA4ODUyLCAwLCAyNDEsIDAsIDQ5MDcsIDAsIDAsIAotICAgIDc5MzIsIDk3MjcsIDAsIDc0MjU1LCA4NzQ4LCAwLCAwLCAwLCAwLCA0Mjc4MCwgMCwgMCwgMCwgNDIxNywgMCwgODY1MCwgMCwgCi0gICAgMCwgMCwgMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMCwgMCwgMCwgMTMzMDAsIDAsIDAsIDAsIDY2NTg4LCAxMTg5OTEsIDAsIAotICAgIDAsIDczODE1LCA0NDIwLCAwLCA2NDEwLCA3NzYwLCAwLCAwLCAwLCAwLCAwLCA3Mjk0LCAwLCAwLCAwLCA5MDY2LCAwLCAKLSAgICAxMTk5MywgNDMxODgsIDI2MjYsIDc3NjIsIDAsIDAsIDAsIDAsIDQyODI1LCA0MTg1NCwgNTMwNCwgMCwgMCwgNjkxOSwgCi0gICAgODYxOSwgMTE5NjU1LCAxMDAzOCwgNjY0NTQsIDk1OTIsIDQyODUxLCAxMjY5OTMsIDE1NDIsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc0MzExLCAwLCAwLCAxMDE4MSwgMCwgMCwgMCwgNzc3OSwgMCwgMTAxOTUsIDk0NzksIDYwMjksIDAsIDAsIDk2ODksIDAsIAotICAgIDAsIDg5OTMsIDY2MzU4LCAwLCA0MjM3OCwgMzM2OCwgNjA2LCAwLCA3Njk3LCAwLCAwLCAyMDMwLCAwLCA2MDI3LCA4MzcwLCAKLSAgICA0MzIyLCAwLCA2NTIwNywgMCwgMCwgMCwgMCwgMCwgMjczNSwgNDI4MzEsIDAsIDAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIAotICAgIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgMCwgOTU3NiwgMCwgMzM0NywgNDE2MCwgNTE1NCwgMCwgMzc5NCwgNjY1NjQsIAotICAgIDY2NTE0LCAwLCA3NzA5LCA0MTExMiwgMCwgNjY1NjAsIDQyMDQxLCA0NTcyLCAwLCA2NjU2MSwgMCwgNDExMTMsIDAsIAotICAgIDE2MTUsIDU4NTUsIDgwOSwgMCwgMCwgMCwgMCwgNTc5OSwgMCwgMCwgMCwgNzI2MCwgMCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgCi0gICAgMTI3MDYxLCA2NDM4NiwgNjUyNTcsIDAsIDAsIDEyMDYwNywgOTM0NywgMCwgNjUzMiwgMCwgMCwgMCwgMCwgNjU4MjgsIDAsIAotICAgIDI4MywgOTE3OTE3LCAwLCA1MzIsIDAsIDAsIDAsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDAsIDgxNTMsIAotICAgIDczNzY3LCAwLCAxMDc0MSwgMCwgMCwgMCwgMCwgNjU0OTUsIDY0NzA2LCAwLCAwLCAwLCAwLCA5NDY2LCAxMTk2MDAsIAotICAgIDk4MjQsIDAsIDAsIDAsIDAsIDkxNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDMyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDY4MTYxLCA2NDU1MCwgNTE4NiwgMTI4OTAsIDAsIDAsIDEyMTA4LCAwLCA2NTEyNCwgMCwgNjYwNDMsIDAsIDAsIDQzMTA3LCAKLSAgICAwLCAwLCA0MjU2MiwgMCwgMCwgMCwgMCwgMTE0ODUsIDYxMDMsIDEyNzEyMywgMCwgMTE3MTgsIDAsIDEyODg5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNjMwLCAwLCA2NTQ4MywgMCwgMTI1NjUsIDAsIDY1NDc2LCAwLCAwLCAxMTk1NTQsIDkyODMsIAotICAgIDc3MDAsIDkxNzUzNywgOTY5MCwgNjU0OTksIDAsIDY0NTkzLCA1MTIsIDMzNzYsIDExODg2MiwgMCwgMCwgMCwgNjMyLCAKLSAgICAxMjk0MCwgMCwgNDI1MjksIDAsIDAsIDU5NTcsIDAsIDg5MjYsIDAsIDAsIDAsIDEwNzQ1LCAxMDE3NCwgMCwgNjQ1ODEsIAotICAgIDUzODYsIDEyMDY4NiwgMTE3MTMsIDEwNjMzLCAxMjA1MzEsIDUwNTYsIDAsIDAsIDAsIDEyMDc3MywgMCwgOTgxMiwgMCwgCi0gICAgNDQ2MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQyNzgsIDAsIDAsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgCi0gICAgMTI4MzUsIDkxNzYyNywgMCwgNzM4MjMsIDAsIDY2Mzc1LCAwLCA3MDIsIDQyNTc5LCAwLCAwLCAxMzA3NCwgMCwgMCwgMCwgCi0gICAgMCwgMTIxMDYsIDAsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDAsIDExNjMsIDI5NTEsIDk1MjIsIDc0MDc5LCAKLSAgICAxOTUwNzYsIDEyMDY3NCwgMCwgMzM4NCwgMTIwNzI4LCAxMDcwMiwgODMwLCAwLCAwLCAwLCA4NDUxLCAwLCAwLCAwLCAKLSAgICAxMjA3NjIsIDAsIDAsIDAsIDAsIDI5MDgsIDAsIDAsIDY0OTAyLCA0MjQzLCAwLCAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgMCwgCi0gICAgNzM5NDAsIDY0MzUyLCAwLCAwLCA0MTEsIDAsIDAsIDAsIDAsIDAsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgMCwgNTQyOCwgCi0gICAgMTk0NzQzLCAzMzY0LCA0MjI2NSwgMCwgMCwgMTE4ODE2LCAwLCA5Njg0LCAyMTYsIDAsIDE0MDEsIDAsIDAsIDAsIDAsIDAsIAotICAgIDkxNTgsIDAsIDEyMDY2NCwgNTc2OCwgMCwgMCwgMCwgNDg0LCAwLCAwLCAwLCA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIAotICAgIDU3MiwgNzA0MSwgMjczNiwgMCwgMCwgMCwgMjc5NCwgODgwNywgNjQ0OTEsIDAsIDU0MzgsIDUyMjIsIDUzODEsIDQzMTE0LCAKLSAgICAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCAwLCAxOTQ3NDcsIDk1MzQsIDAsIDAsIDAsIDM0MzAsIDAsIDAsIDAsIDAsIAotICAgIDk4MSwgMCwgNDMzMCwgMTIwNjczLCAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIAotICAgIDczNzU0LCAzOTU3LCAwLCA2NDU0NywgMCwgNjc0LCA2Mzk5MSwgMCwgMjk0NiwgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgCi0gICAgMzc1OSwgMTE0MTEsIDgzNjQsIDUxMjMsIDAsIDUyODEsIDU0NjksIDUxMjEsIDAsIDAsIDAsIDUxMzAsIDAsIDAsIDAsIDAsIAotICAgIDEyMDcyNiwgMTIyMSwgMjczMywgMTE3NDYsIDAsIDUyMTYsIDAsIDAsIDAsIDAsIDM0NjgsIDAsIDkyMzAsIDU5MzksIDAsIAotICAgIDAsIDAsIDEyMDY3NywgMTIwNzI5LCA3Mjc4LCAxMDMyMSwgMTAyODksIDY0NjEzLCAxMDM4NSwgNDE3MDYsIDAsIDAsIDAsIAotICAgIDAsIDExNzM5LCAwLCA0MTk4MSwgMCwgNTkzOCwgMCwgMCwgMTI0NDgsIDc1NzYsIDEwNDAxLCAxMDMzNywgNzM4NTIsIDAsIAotICAgIDEzMDU3LCAwLCAxMjY5NzYsIDAsIDEwMDA5LCAwLCA2NDMwNCwgMCwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgMCwgNDk4NywgNjQ1MTksIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwOTcwLCAxMTczMywgMCwgMTIwNzkyLCAwLCAxOTk0NCwgMCwgOTAwOSwgODU1MSwgMCwgMTE0NjgsIDc0MDAzLCA3NTc1LCAKLSAgICAwLCAyNzI0LCAwLCAwLCAxMjMxMywgMTE5OTQ5LCA1MTUsIDExOTk0NywgNDI3OTEsIDYzOTg3LCAxMTk5NDIsIDExOTk0MywgCi0gICAgMTE5OTQwLCAxMTk5NDEsIDExOTkzOCwgOTc3NSwgNDA0NiwgNDU4OSwgNDUyMSwgMCwgOTE0MSwgMCwgMCwgMjc0MSwgCi0gICAgNjQzOTksIDYxOTcsIDEzNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxODQsIDg2MDYsIDMzMDMsIDQxMzcyLCAxMTc4NiwgCi0gICAgOTQ3MywgNjYyMDMsIDY2MTc3LCAwLCAxMTU5MywgNDMwMDcsIDQ0NzgsIDY2MTc4LCAwLCAwLCAyNzQ0LCAwLCA0NDc3LCAwLCAKLSAgICA4MTQsIDQyMDY2LCA2NjE4MywgNjYyMDQsIDY2MTk0LCAxMTk5NjEsIDY2MTk4LCA0MTg4MCwgNjYxODgsIDY2MTk3LCAKLSAgICAxMTk5NTQsIDExOTU1LCA2NjE5MCwgNjYxOTEsIDQxMTExLCA2NjE4OSwgNzM3ODgsIDc3ODgsIDQ4NDcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDE1ODEsIDY1MzUsIDAsIDEyOTU0LCA0MzAsIDE5NDkzNCwgMTk0OTM5LCAwLCAxOTQ5MzgsIDUyNzgsIDQ5NDUsIAotICAgIDQyODgzLCA0OTUwLCAwLCAxMjA1NDcsIDAsIDcyNjksIDAsIDU5NjQsIDEyOTA4LCAwLCAwLCA3NDc2NCwgNzQ0NzcsIAotICAgIDExOTE0NiwgMTk0OTM2LCA0OTQ5LCAwLCA0NDMsIDAsIDQ5NDQsIDU0NjcsIDExOTYwMywgMCwgNjUxMzcsIDYwNDQsIAotICAgIDY1MzkyLCAwLCA0MjEzLCAwLCA0MTMwMywgMCwgMTk0OTMxLCAwLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDAsIDAsIDEyMDcyLCAKLSAgICAzMTkzLCAwLCA0MTMwNCwgODI0LCAwLCAxMjA5MSwgMTE5ODE0LCAxMTk4MTMsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIAotICAgIDExOTgyMCwgMTE5ODE5LCA2NTA1OSwgMCwgMTE5ODA4LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIAotICAgIDExOTgyOSwgMTE5ODMyLCA0Njc3LCAxMjY4OCwgMzEwMiwgMCwgNDY3MiwgMTE5ODIyLCAxMTk4MjEsIDU1MzEsIDExOTgyMywgCi0gICAgNDI1NzUsIDExOTgyNSwgMTE5ODI4LCA0Njc0LCA0NTQ4LCAwLCAwLCAwLCAxMTk5NDYsIDgwMjUsIDAsIDEyNzAyNCwgCi0gICAgMTg1NSwgMCwgMTE5OTQ1LCAwLCAxMjA1NTQsIDAsIDAsIDAsIDAsIDI3NDUsIDExNzk3LCAwLCAwLCAxMTk5MzksIDQ2NTQsIAotICAgIDAsIDAsIDE5NDk1OSwgNzM5OTMsIDEwNTI1LCA0NjQ5LCA2NTIwOSwgMCwgMCwgNDY0OCwgNDMwODAsIDAsIDAsIDAsIAotICAgIDYyNDYsIDY0OTUwLCA3ODI4LCA0NjUwLCAwLCAwLCAxMTkwODYsIDQ2NTMsIDc4MjIsIDAsIDAsIDQzMTg3LCA4NjY5LCAwLCAKLSAgICAwLCA2NTA5MywgMCwgMCwgMjcxNiwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCAwLCAKLSAgICAxMTkyMjgsIDc5OTIsIDAsIDAsIDQ2NjIsIDAsIDAsIDkxNDksIDkxNDYsIDU5OSwgNDY1NywgMTk0OTYzLCAxMjA3NTQsIAotICAgIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDAsIDc4MTEsIDQwOTk0LCAxOTQ5NjUsIDY0MTQsIDU5NjcsIDQ2NTgsIDM3MjUsIAotICAgIDU3MTMsIDU4MTQsIDQ2NjEsIDQyNDM0LCAwLCAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDAsIDc1NDcsIDQ4NjcsIDAsIAotICAgIDEwMDA4LCAxMDIyMiwgMzA1NCwgMTk0OTU2LCA5NzQ0LCAwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDAsIDAsIDAsIDAsIDAsIAotICAgIDkwNDUsIDAsIDQyMjUsIDE5OTI2LCAwLCAxMjg4MCwgNjUzMDcsIDQ2MTcsIDAsIDAsIDAsIDQ2MTYsIDEwNTE4LCAxMDQyMywgCi0gICAgMTAzNTksIDAsIDU5NTgsIDAsIDAsIDQyMTUsIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgMCwgNDEzMTMsIDUyMiwgCi0gICAgNTM2OCwgMCwgNjU4MDMsIDAsIDUzNjYsIDEyMjAxLCA1MzcyLCAwLCAwLCAwLCA3NzIwLCAwLCAyNjk2LCAwLCAwLCA0NjM4LCAKLSAgICAwLCAxNzkwLCAwLCA1OTY1LCA2NDM2MywgNjY1NjksIDAsIDE5NDk2OCwgNTM3NiwgMTgzNSwgNTMzNSwgMTk0OTY2LCAwLCAKLSAgICA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMCwgNTM4NywgNTMzMywgMCwgMCwgNDIwOTQsIDUzMzEsIDQ2MzQsIAotICAgIDExOTI4LCAwLCA1MzM4LCA0NjM3LCAwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgCi0gICAgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAwLCAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgCi0gICAgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCA3NDM4NCwgMCwgMCwgNjI0OCwgMCwgMCwgMCwgNDIzMTgsIAotICAgIDAsIDUyMjksIDQ3NTcsIDAsIDAsIDI3MjgsIDQ3NTIsIDY0NTYzLCA2NTIzNSwgNTIzNCwgMCwgMCwgMCwgMTA3MTMsIDAsIAotICAgIDAsIDI2MjIsIDc0NjAsIDAsIDAsIDAsIDg5NTQsIDc0NzYwLCA2NTE4OSwgMjYzMiwgMCwgMTAxMDgsIDEwMTEsIDU1NzQsIAotICAgIDE4NTMsIDI3MDksIDY1MTM5LCA1NTc3LCAwLCAwLCAxMTg4NzEsIDAsIDg5NjUsIDc2MzUsIDQyMTc3LCA1MzE2LCAwLCAKLSAgICA1MzE0LCA2NDUxLCA1NTcyLCAwLCA1MzEyLCAwLCA1NTI1LCA1MzMwLCA1MzE5LCAwLCAwLCAxOTQ5MDcsIDExOTAxNiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTk1MDA5LCAwLCA3NDAyMiwgMCwgNjQ2MDksIDAsIDAsIDAsIDU3MjEsIDAsIDEwMzk4LCA4NjMyLCAKLSAgICA2NjQ2NSwgMTEyNjcsIDczOTYxLCAwLCA1NzIwLCAwLCAxNjkyLCA0MjE5LCA0NjEwLCA4Njk2LCA0MzA1LCAwLCA0NjA5LCAKLSAgICAwLCA0NjE0LCA1NDEsIDAsIDUyODcsIDUzMDksIDUyODUsIDAsIDU5NjEsIDQ2NDcsIDU2LCA0MjE2LCAxMDU3NywgNDEzODEsIAotICAgIDYwMSwgNDYxMywgMCwgMCwgMCwgNDYwOCwgNjQyNjAsIDQxMTI0LCA1MTkwLCA2NzYyOCwgMCwgNjgxNDUsIDcwODYsIDAsIAotICAgIDExOTI0MywgNjc2MjAsIDAsIDI3MzQsIDExMDc0LCAwLCA2NzYyNywgNDM1OTMsIDAsIDY3NjI1LCA1OTYwLCAwLCA4OTkyLCAKLSAgICA2NTI5MywgMCwgMTc4MiwgNjc2MjIsIDY4MTE0LCAxMTk5NTAsIDAsIDY4MTgwLCA1NTAxLCAxMTk5NTIsIDQyNTA4LCAKLSAgICA3NDQyLCAxMjA3NDksIDM1OSwgNDEyNTMsIDExOTk1NywgNjIzOSwgMTE5OTU2LCA0MTI1NiwgMCwgNjgxMzQsIDAsIAotICAgIDc0MjA5LCAwLCA5MzQ2LCAxMTg5MDQsIDQxMjU0LCAwLCA0MzI5MSwgMzc2NywgNTczNywgMCwgNDg2NSwgMCwgNTc0MCwgMCwgCi0gICAgNTczNiwgNDM2OCwgMCwgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgMCwgNDg2OSwgCi0gICAgMTIwNTYzLCAwLCA0MjIzLCAwLCA2NjUwLCAwLCAwLCAwLCAwLCA0ODcwLCAwLCA3NDgwNSwgNjY1NjYsIDAsIDEyMDc1OCwgCi0gICAgMCwgMCwgMCwgMTAxMjIsIDQ4NjQsIDY2NTY4LCA0MTQ0LCA3OTM3LCAwLCA2MjQ1LCAwLCAyNzMyLCA2NjQ1OSwgNzQ1LCAwLCAKLSAgICAxOTUwOTcsIDAsIDQ3NzcsIDc4MjEsIDAsIDAsIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDAsIDQ3NzgsIAotICAgIDAsIDEwODYzLCAwLCA0NzgxLCAwLCA2NDQwNywgMCwgMCwgODU3NywgMCwgMTE4OTY0LCA0MzI4NSwgMTAyMTYsIDQ3ODIsIAotICAgIDAsIDAsIDEyMDc1NywgOTE3OTI0LCAxMjMyNSwgMCwgODcxNywgMCwgMCwgNDc3NiwgMCwgMTE0OTIsIDg3MDAsIDAsIAotICAgIDEzMTc2LCAwLCAxMDQyNiwgMCwgOTE3NTk5LCAxMDM2MiwgMCwgMTcxNSwgNDg0OSwgODI0MiwgOTU2MSwgNzM5MjIsIAotICAgIDQzMjc4LCA0MjYzNSwgMCwgMCwgNTk2MywgOTE3OTI2LCAwLCAwLCA0ODUwLCAwLCAxNjA3LCA0NjYsIDQ4NTMsIDExODk5NSwgCi0gICAgNDg1NCwgMCwgNTE2NCwgMCwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIDAsIDEyNDQ1LCAKLSAgICAzNzg1LCAyMzQsIDMxOTksIDAsIDQxMjY4LCA0ODQ4LCAyNTMwLCAwLCA0Nzk4LCAxOTY0LCAwLCA3Mzc2MiwgMTA0NTgsIDAsIAotICAgIDg1NzYsIDAsIDAsIDI3MDQsIDQ3OTQsIDAsIDAsIDgzMjIsIDQ3OTcsIDc0MDc0LCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCAKLSAgICA2NTEwNCwgMCwgMCwgMzAzLCAwLCAwLCAwLCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCAxMTg4NjksIDAsIDAsIDAsIDAsIDAsIAotICAgIDQzMjkyLCAwLCAyNDQxLCAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMCwgMjQ1MSwgMjcxNCwgMTE5MzI2LCAwLCAwLCAKLSAgICA0OTM3LCA3NDU0MSwgNzUzLCA1ODQ5LCAxMDU5NywgNDMwODksIDExNzIyLCA5MjQ4LCAwLCA0Mjg3OSwgMTE3MjUsIDAsIDAsIAotICAgIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCA2NDkzNywgOTE3NTM4LCA5MTQwLCAxNDA4LCA1MjYxLCA0MTQxMiwgMCwgMTgxLCAKKyAgICAzOTYsIDQxNTgwLCA2ODE0NiwgMCwgMTI5MDEsIDQzMDU4LCAwLCAzNDMsIDcxMjksIDQyNjgwLCA0MTM2MCwgNzgxNTQsIDAsIAorICAgIDQ3NDMsIDAsIDAsIDc0MDQwLCA3NDEwOCwgODc0MywgMTcyNCwgMTQzMywgMTE5MzIyLCAwLCAzNzM5LCA2MjYzLCA5MjUxNCwgCisgICAgMCwgMzk2NCwgNjU5MiwgMCwgMTI4NjkzLCA2NjA0MCwgMCwgNDI1NjgsIDY5ODA2LCAwLCAxNzc4LCAzOTU2LCAwLCAKKyAgICA0MjA3MCwgNjU2MywgNDMwNzUsIDkwMTgsIDAsIDAsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgNzQ1MzEsIDEyNzk2OSwgMCwgCisgICAgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MjcwMywgMTE4ODIyLCAxNzUwLCAKKyAgICAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgMCwgOTIyOTgsIDAsIDU4ODksIDAsIDcxODAsIDAsIDExOTE0NSwgMCwgOTE3NTU4LCAKKyAgICA0MjQ3MSwgNjk4MiwgMTcyMSwgNDQwMjIsIDc4OTEsIDQyMjQzLCA0MjE2MCwgMjU4MywgNDUxMiwgMTE5MzYwLCA2NTIzMCwgCisgICAgMTI4MTA5LCAwLCAwLCAzODU1LCAwLCAwLCAwLCAwLCA3NDI5NSwgMCwgMCwgOTI0MTYsIDM5NzUsIDAsIDc0MDg3LCAwLCAKKyAgICAxMjY3MiwgMzc5OCwgMjcwMywgMCwgMCwgMjEwOSwgOTc3NCwgMTI3NSwgMCwgMCwgNDEwOTUsIDM5NjIsIDAsIDI5MzIsIAorICAgIDQxMTAxLCAzOTU0LCA2NDU3LCA0NTEzLCAwLCAwLCA3Mzk5NCwgNzM5OTIsIDE0NjgsIDAsIDAsIDQxODUxLCAxMjgyMzAsIAorICAgIDQxODQ2LCAwLCA1NTIzOCwgNzYzMywgNDE4NDksIDY4Mzg1LCA0MzIwLCAzMjI0LCAwLCAxMjgwMzIsIDAsIDQyNTMxLCAwLCAKKyAgICAxNTEwLCAwLCA4MjU2LCAwLCAxMTM5MywgMCwgODg3OSwgMTI4MDc1LCA5MjQ3NCwgODc3MCwgMCwgMCwgNzgzNzcsIDE5MTAsIAorICAgIDg2NzEsIDc4Mzc0LCA0MjgzLCAwLCAxMjcxMTcsIDY4MzYxLCA3ODMxOCwgMjY1NCwgNzg5MywgMTk1MDA3LCAwLCAwLCAwLCAKKyAgICA2NTEwNiwgNDI3NjEsIDEyODU3LCA0NTgxLCA4NDExLCA3ODM3MiwgNzgzNzEsIDc4MzcwLCA3ODM2OSwgNzgzNjgsIDAsIDAsIAorICAgIDAsIDE3MzMsIDQzOTIsIDI1NjgsIDEwNzg2LCA2OTY2MSwgMCwgODE4NCwgNDE0ODYsIDAsIDczOTYsIDcxMTYsIDAsIAorICAgIDY5Nzg4LCAwLCA3MTg1LCA3OTY1LCAwLCAwLCA5MjM0NywgMCwgNDEzNTAsIDkxMjksIDAsIDAsIDAsIDAsIDkyNDg5LCAwLCAKKyAgICAxMDQ4MSwgMCwgMTI3NDg2LCA3MTcxLCAwLCAzNDAsIDkyNDk4LCAwLCAwLCAwLCA5MjIwMCwgMCwgMCwgNjc2NCwgCisgICAgMTI3NDg3LCAwLCAwLCAwLCAwLCA2NTIwMywgMTEzOTIsIDExOTA5OCwgMTE5MzU5LCAwLCAzMjEwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMjc5NzAsIDkxNzYxOSwgMCwgMCwgMTAwNDMsIDAsIDExODYsIDQxNTcxLCA2OTk5LCA2MTcsIDk0NjQsIDEyODI0NCwgCisgICAgMzY3NSwgNTIwNywgNjUwNjIsIDUyMTMsIDE5NDc2OSwgMjYxNywgNDEzNDgsIDQxNTY4LCAxMjg4MDMsIDMyNTMsIAorICAgIDEyMDUzNSwgMCwgODYzMCwgMTI4NTQ0LCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAyNTg2LCA2NDg4NywgMCwgNTIxNywgMCwgMCwgCisgICAgMCwgMCwgNjQyOTMsIDY4MDk4LCAyNjM1LCAwLCAwLCAwLCAwLCAwLCA3ODM1LCAwLCAwLCAxOTQ5ODgsIDkyMjg1LCAKKyAgICA2NDU1OCwgMTI3MTIyLCAwLCAxMjcxMjEsIDAsIDEyNzkxMywgMCwgNTc4NCwgMCwgMCwgMCwgMCwgNDAxMSwgOTE3NjE2LCAKKyAgICA2ODEwMSwgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDAsIDU2MDAsIDM5MDMsIDEyNzA4MywgMTA0NDcsIDU1OTgsIDEyMDcsIAorICAgIDEyMDUyMSwgNjY2ODksIDM1MDEsIDQyNTgyLCA0MzYwMCwgMTk0NzgwLCAwLCAxMTI0LCA1NTk3LCAxOTQ3NzgsIDE5NDc3MiwgCisgICAgOTMyMSwgMCwgMCwgMCwgMCwgMTcxOSwgNjgzNTYsIDY4MzU0LCA5NjcxLCAxMTI1LCA0Mzk5LCAxMjc0NzksIDkxNzYxMCwgCisgICAgMCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgMjYwNCwgNzQxODcsIDU0OTAsIAorICAgIDQzMDQ2LCA1NDg5LCA3MjEyLCAxMTc2OCwgNDMwNDMsIDYzMDAsIDAsIDcxMjIsIDAsIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIAorICAgIDk4NzUsIDc1OTMsIDE5NDc5MiwgOTIyNzQsIDExODkxMywgNzIwNywgMCwgNjU5MDEsIDIzOTQsIDI1NzUsIDAsIDM3NDYsIAorICAgIDExMDE2LCA2NTc1MiwgMTIwMDM3LCAwLCA0MzQyMywgMTI4NjgzLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgCisgICAgMTI4MTcyLCAwLCA3ODUzMSwgNjY0MCwgNzQ4MDYsIDI1OTgsIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTI3MDAyLCAKKyAgICA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgMCwgOTI1MTUsIDY4NDc1LCAwLCAwLCAwLCA3ODYzNywgMTI2NDcsIAorICAgIDAsIDEyODA0MywgMCwgMTAzNiwgMCwgOTI0MTksIDE3MjMsIDEyODA1NiwgMCwgMCwgNDE1NzksIDI0NDQsIDAsIDEwNzA1LCAKKyAgICA3Mzg3NiwgMCwgNzQ0ODYsIDAsIDc0MCwgMTE5MjIyLCAxOTQ5NzgsIDE5NDk4NCwgMCwgNDIzOCwgMTEwNzEsIDk0NTksIAorICAgIDY4NDM3LCA3ODE0MCwgNzgxMzksIDE5NDk4NSwgODEyMSwgMTA0MzgsIDc0NDg3LCA0MjU3NCwgMTMyODUsIDU1MjYzLCAKKyAgICAxMTkwNywgMTk1MDAwLCA1NjkwLCA5MjI1NSwgMCwgMCwgNDMxODEsIDEzMDk1LCAwLCAxMjc4NTcsIDY0NDk4LCAwLCAKKyAgICA5NTA2LCA2OTc4LCAxOTQ5OTMsIDc3OTkyLCAwLCAwLCAxOTQ5OTIsIDAsIDEyNzg0NSwgMTEyMiwgMzE3LCAwLCAwLCAwLCAKKyAgICAwLCAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCA3ODM3OCwgMTIwMTI2LCA1MjIzLCAxMzA0LCAwLCAxMTk1NjQsIDUyMjYsIAorICAgIDEyNjAyLCAwLCAwLCA5MzI5LCA3NzU4LCA5MjM5LCA0MTE3MywgNTIyNCwgNTQ4NywgMTIyMiwgNTY5MiwgNDE3MjUsIAorICAgIDY5MjI5LCA5Njc0LCA1Njk1LCA0MTcxMSwgNjQ2MjcsIDE5OTA5LCAwLCA3NDYwNCwgNTY5MSwgMjg3LCA4NjYsIDIzMywgCisgICAgMTI3NDkwLCAwLCA0MjgxNiwgMCwgNjUxNDAsIDc0Nzk3LCAwLCA4ODMwLCA2NTY4LCA0MjMwMCwgMTA1MjQsIDQxMTc1LCAwLCAKKyAgICAwLCAwLCA1Mjk2LCAwLCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAwLCAwLCA2NTE2LCA2NTE1LCA2NTE0LCA2NTEzLCAKKyAgICA2NTEyLCAwLCA3ODU2LCA4NjkwLCAwLCAwLCAxMjEyMiwgMTE5NjAyLCA0Mzk3NiwgMCwgMTc4NSwgOTI1MDcsIDY4NjIyLCAKKyAgICA2NTE1MywgMTk0ODEwLCA1MTM4LCAwLCAwLCAwLCAwLCA0NTQwLCA0MTE4MSwgMCwgNjIwMCwgMCwgNTEzNCwgMCwgMzIyLCAKKyAgICA0NjQzLCA1MTMyLCAwLCA2Mzg5LCAwLCA1MTQzLCAwLCA4NzkwLCAxMjg2OTQsIDAsIDE5NDgwMiwgMCwgODg2OSwgCisgICAgMTIwNjAxLCAwLCA0MjA2MCwgMCwgMCwgMTk0ODA0LCAxMjcwMTIsIDEwMjcwLCAxMDI4NiwgMTAzMTgsIDEwMzgyLCAKKyAgICA0MzUyOSwgNjY0NzcsIDAsIDAsIDc0MTcwLCAwLCAzMjM0LCAwLCAwLCA3NDM3NiwgNDMxMzksIDExODgxNSwgMTI3MDg0LCAKKyAgICAxMjA2MjcsIDg3NjcsIDAsIDc0NDg5LCA5Njk1LCAxMjA3NDYsIDUyMDEsIDAsIDYyMTUsIDEyNzE0LCA2MjE0LCAxMzEwMSwgCisgICAgMCwgMTk0OTk5LCA2NTI2OCwgMCwgMCwgMCwgMTEwMjcsIDAsIDEwMDU5LCAxMDUxMSwgNDIwNzUsIDk3NjcsIDc4OSwgCisgICAgMTc0OSwgNzg4OTAsIDEyNzA3MSwgMCwgMzIwLCAwLCA4NjQ3LCAwLCAzMDQ5LCAwLCA2NDcxLCA0MjA3MSwgNDMxNTYsIAorICAgIDk5MjUsIDEyNzM1NiwgMTI3MzU1LCA2NjQ3OCwgNDk2MCwgNTU0OSwgMTI3MzU5LCAxMjczNDYsIDg0ODUsIDQ2NzEsIAorICAgIDU0MTgsIDEyNzM1MCwgMzM1MSwgMTI3MDA2LCAxMjczNTEsIDEwNjEwLCA1NDE0LCAzMDY0LCA2MjEyLCA0Mjg2LCA1NDIxLCAKKyAgICAxMjczNDQsIDk1NTQsIDAsIDEyNzc5NCwgMTI3MTA5LCA2NjUzLCAxMjg4MTEsIDAsIDY0NTEwLCA2MjEzLCAxMjg4NSwgMCwgCisgICAgMTE5MDQ1LCA2NDcyMCwgMCwgMTIwNzU5LCA3Mzc0MSwgMTI2MDMsIDcxMzEsIDExNDMwLCA0NTY2LCA3ODQzLCA5MzE3LCAKKyAgICAzODAxLCAxMDM0MiwgMTA0MDYsIDAsIDExOTI1OSwgNDI1NzYsIDAsIDUyMDAsIDAsIDkxNzk0OCwgMCwgOTE4MywgCisgICAgMTI3MzYxLCA3NDQ1OCwgNzM4MjUsIDM5NSwgNTQ4MiwgNTE5OCwgODc4NiwgMTAzOTAsIDc0MjAyLCA1MTk2LCA0MzIyNCwgCisgICAgNjExMywgNDIwMDksIDUyMDUsIDAsIDQzMzA3LCAwLCAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIAorICAgIDQzNSwgMCwgMTIwMTQsIDEwMzc3LCA4MDkzLCA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgCisgICAgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIDAsIDMzMzYsIDc4MzU1LCA1MzYxLCAzNjIzLCA0MTE1OSwgMCwgNjgxMTIsIAorICAgIDc4NzIsIDg1ODEsIDAsIDEyNjAsIDMxNDksIDUzNTksIDAsIDAsIDc5MTQsIDUzNTcsIDkyMTcwLCAxMjg2NTksIDI2MjQsIAorICAgIDUzNjQsIDAsIDExNDMxLCAxMjAwMzAsIDkxMDEsIDExMDU4LCA3ODI4OCwgMCwgNzgyOTMsIDQyMjcxLCA3ODI4OSwgCisgICAgNDI5MTcsIDEyMDc5MywgMCwgNjU1NjYsIDY3MTcsIDEwNjE5LCA0MzM2MCwgNzgzODUsIDc4Mzg0LCA3ODM4MywgNzgzODIsIAorICAgIDc4MzgxLCA3ODM4MCwgNzgzNzksIDkzMTksIDcwOTcsIDExOTA1NSwgNzc5MDYsIDMyMzIsIDczODI0LCA3NDU4MSwgCisgICAgMTIwNjMyLCAwLCAwLCA0MTg4OSwgOTI0NTMsIDAsIDExNjEsIDQxODk1LCA3NDEwMywgOTcwMSwgODYyMiwgMCwgMCwgCisgICAgNzM4MTksIDEyMDU4OCwgNTAxMiwgNzc5MTIsIDQxMzYyLCAwLCA3ODI5NiwgMTE5MjEsIDAsIDExNzY5LCAwLCA2ODYwOSwgCisgICAgNDEzNjQsIDAsIDc0MjI4LCA0MTM1MiwgNDEzNjEsIDAsIDQxMzY2LCAwLCAzMzU2LCAwLCA5MTcsIDY4NDIyLCAxMTk5MTUsIAorICAgIDcxMzQsIDgxOTksIDc4Mzg5LCAxMTk5MTcsIDY3NywgMTE5OTE2LCAwLCAxMTk5MzIsIDEyNzE2OSwgMCwgMCwgMCwgMzM0OSwgCisgICAgNzQxMjUsIDcwMjIsIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIDg2MTUsIDAsIDAsIDQ5MSwgMCwgMTAxOTAsIDEyMDY5OCwgCisgICAgNjU4MzcsIDEyODgyMCwgODQyNiwgMTEwOTIsIDk4OTEsIDAsIDQyNDk3LCA3MTEzLCA3NTg2LCA0MjMwNSwgMTA4NTIsIDAsIAorICAgIDAsIDQ2MDYsIDY4NDQ4LCA5MDk1LCA3NzQxLCAxMjY4NCwgNDE4ODUsIDEwNDYsIDcxMjQsIDAsIDAsIDU4MTUsIDUxNzEsIAorICAgIDY1NTM5LCA2ODYxMiwgNjkzMiwgNzgzMTUsIDQyMzk0LCA0MTg3OCwgNzQ4NDksIDEyMDYyMSwgMCwgNTE2OSwgMTE5MzUsIAorICAgIDAsIDAsIDMxNzUsIDEyMDgyMiwgMTUzNywgMTIwODA0LCA1MTc2LCA4OTA1LCA0MTM2LCA0ODcxLCA3ODI4NywgMCwgOTgzMywgCisgICAgMCwgMCwgMTEyOCwgNjU5MjAsIDAsIDk3MTEsIDcwNTcsIDk0MDgsIDk0MDksIDk0MTAsIDk0MTEsIDM2NjIsIDk0MTMsIAorICAgIDMzNzgsIDk0MTUsIDk0MTYsIDk0MTcsIDk0MTgsIDYzMjAsIDk0MjAsIDk0MjEsIDU4OTcsIDk0MjMsIDUxNjUsIDUxMjYsIAorICAgIDQxMzg1LCAwLCA0MTM4OSwgOTE3OTM4LCA4OTU1LCAzMzc0LCA5NDAwLCA5NDAxLCA3MTE5LCA5NDAzLCA5NDA0LCAzNTA3LCAKKyAgICA5NDA2LCA3NjI5LCAwLCAxOTkyNSwgNDI2NjksIDY4NDYzLCAxODMsIDQzOTg1LCAyNjMxLCAwLCAxMDYyNywgNDExMzAsIAorICAgIDc4MjYwLCAzOTk2LCAwLCA3ODc3MSwgMCwgMTE5MzEzLCAxMTkzMDcsIDc4NzY4LCA2NTgwLCA0MzMyLCA2NDgyNSwgCisgICAgNjYzMjksIDEwNzI2LCA2NjY4NiwgNDExMjUsIDU4OTksIDQxMzY1LCA5MTc5MTgsIDEyMDg1LCAwLCA1NzQsIDkxNzkyMiwgCisgICAgNzc4MjUsIDczODI4LCA1NDQ4LCA0MTA1OCwgNTQ0NiwgNjk3MDksIDQxMzIyLCA0MjIxMSwgNTQ0MiwgNDE5MCwgNzc4MzQsIAorICAgIDc3ODM1LCA1NDUxLCA3NzgzMywgMzYxNiwgNzc4MjgsIDc3ODM3LCA3NzgzOCwgNzcwOCwgNzc4MzYsIDEwODU5LCA2NTg2NywgCisgICAgMTAzNDUsIDEwNDA5LCA0MTkxLCAwLCA3Nzg0NCwgNzM4MDAsIDQyMTgxLCA3Nzg0MywgNzc4MzksIDIwNjAsIDAsIDcxMTEsIAorICAgIDExNzg4LCA2NTU4NywgNjgxMjksIDEwNDE1LCA3NDEwMiwgMCwgMjA1LCAwLCAxMDM1MSwgMTE5MDc2LCAwLCA5ODYyLCAKKyAgICA2NTg4LCA0MzI1NywgNjQ2OTcsIDczOTk4LCA0MTM1NSwgNTUwNSwgMTE5MTU0LCA1NTAzLCA4MDIxLCAwLCA3MTI1LCAKKyAgICA5ODE5LCA0MTM1NywgODAxMSwgNDI4ODUsIDU1MDcsIDEyMDQ0LCA5MjYzNiwgMCwgMTAwMjYsIDU0NzIsIDcxMDksIDExOTEsIAorICAgIDEzMTA2LCA1NDcwLCAxMDMyOSwgNTQ3NiwgODk5MSwgNjYzMjIsIDY5Nzc4LCA3ODI2NywgNDI4NzQsIDg1NTAsIDQyODc2LCAKKyAgICA1NTkyLCAyOTE5LCAwLCAyNjc1LCA1NTk1LCA3ODQxMSwgMCwgNDM2NywgMCwgMCwgNTQ3OCwgNTkwNCwgNTU5NCwgMCwgCisgICAgNzQxNTAsIDcyOTEsIDU1OTAsIDc3ODQ5LCAxMzA2NywgMTE4OTA5LCAxMjAzNzIsIDAsIDk3MzEsIDY5NzMxLCA2NDYzMywgCisgICAgNzc4NTcsIDc3ODU0LCA3Nzg1NSwgNzc4NTIsIDc3ODUzLCA3Nzg1MCwgMTA3NTAsIDQzNzE0LCA3Nzg1OCwgNzEzNywgMCwgCisgICAgMTI4Mjk2LCAxMjg4NywgMTA1NTEsIDE5NDU2NCwgNzc4NjYsIDc3ODY3LCA3Nzg2NCwgNzc4NjUsIDk5MjksIDUxOTksIAorICAgIDk5MzYsIDExMjAsIDQyMzg3LCAwLCAxNDQ0LCA5NDg2LCA3NTU0LCA2NTgzOSwgNTUyNTIsIDAsIDE0NDIsIDAsIDU4OTQsIAorICAgIDAsIDAsIDQxMTcxLCA5MjUxMSwgNzQzMTMsIDAsIDEzMTYyLCAwLCAzMzM0LCAwLCAxMTg4MDMsIDc3ODgxLCA2NjAyMiwgMCwgCisgICAgMCwgMTY1MSwgMCwgODg2MSwgMCwgMCwgMTE0MiwgMCwgODI3MSwgMCwgMCwgMCwgMTI5MDMsIDAsIDQwMDIsIDQzNjI2LCAKKyAgICAxMDQ0MiwgMTA2NzYsIDMzNDQsIDAsIDAsIDEyOTIwLCAxOTQ1NjAsIDAsIDAsIDY2NjQyLCAxMjc3LCAwLCA3ODcxLCAwLCAKKyAgICAwLCA3ODg1MywgMCwgNzg4NTQsIDEyMDM2MCwgMCwgMTE3ODQsIDAsIDc4MDEyLCA0NzAwLCA2NjM2NiwgNzg4NTgsIAorICAgIDEyMDM1OSwgMTEwMTIsIDAsIDc4ODU2LCA5MjQwMCwgNzc4NzksIDQ5NzMsIDg3ODQsIDc3ODc3LCA3NDgwNCwgNzc4NzQsIAorICAgIDc3ODY5LCA3Nzg3MSwgNDI0NDAsIDAsIDQzMTE4LCAwLCA0MjM2NCwgNjc3NCwgNjc3MywgOTE3NTYwLCAxMjAzNjksIAorICAgIDEwMzQ2LCAxMDQxMCwgNzg4NTksIDkyNDMsIDI0NjQsIDc0MjYzLCA2MTA4LCAzMzcyLCAwLCA2MjQ3LCA0MzExNywgCisgICAgNzQ1MjYsIDcxMjEsIDc0MTY2LCAwLCAxMjAzNTUsIDkyNTM3LCAwLCAwLCAxOTUwMzQsIDAsIDAsIDAsIDc0MjE3LCAzMzU0LCAKKyAgICAxOTUwMzcsIDQxOTIsIDkyODksIDExODk5OSwgNDExOTEsIDM4NzYsIDAsIDEyNzk4MywgMTIwNjYwLCA0MzY5NiwgNDMzODAsIAorICAgIDAsIDAsIDAsIDAsIDExNjAzLCAwLCAwLCA2NTg5LCAxMjg1ODgsIDE5NDY3OSwgMCwgMCwgMCwgMCwgMCwgNDI1NzIsIAorICAgIDEyODI2NCwgMTA2MzAsIDc0ODI3LCAxOTYzLCAxMTg4ODksIDEyNzk3OCwgMTE2NTQsIDAsIDc1NTAsIDEwNjg2LCA1OTAzLCAKKyAgICAwLCA3ODAwOSwgNDEzMjksIDk2NjIsIDkxNzkzNywgNjQ2OTgsIDMzNjYsIDEwMzk5LCAwLCAwLCAxMTAxMywgMTI3OTI3LCAKKyAgICAxMjgzMDAsIDAsIDc4NjIxLCAxOTQ2NzIsIDY5MjUsIDAsIDAsIDkxNzkyOSwgMCwgMTE1NjgsIDAsIDQzMzY3LCA2NDU3OSwgCisgICAgOTE3OTMwLCA3ODUyLCAwLCAwLCA2NzU0LCA2MzEyLCAwLCA2NDY3MiwgNjUyOTYsIDAsIDExODk1NywgMCwgNDE2LCAKKyAgICAxMjI5NiwgNjg0NTcsIDczODM0LCA2ODE3NywgMTEwNTAsIDEwOTg0LCA5MjIwOCwgMCwgMCwgOTIxODIsIDAsIDAsIDk1MzIsIAorICAgIDY2MzU1LCAwLCAwLCA5MTc5MjUsIDY0MzQzLCAxOTUwMzIsIDEyODI4MSwgMTk1MDMxLCAwLCAwLCAxOTUwNTcsIDExNDQ1LCAKKyAgICAwLCAyMTEyLCAxOTUwNTYsIDEyODgxNCwgMTAxODUsIDEwMjEsIDEyODEzMCwgOTUwNywgMTAyMTAsIDc0NTQ0LCA4MDIzLCAKKyAgICAxMjAwLCAxMjI0MywgNzgwMDEsIDUyODIsIDc4MDAzLCA5NjI0LCAxMTU0NSwgMCwgMTIwNDkzLCAzMzQzLCA0NDI0LCAKKyAgICAxMTA0NywgMTg4NSwgNDMyNjgsIDM4OTYsIDc4NjI2LCA2NjQ5NywgMjk0NywgMzkyLCA3ODk0LCA0MzkxLCA2ODEzOSwgMCwgCisgICAgMTMwNTksIDc0ODE2LCA3Nzk5OCwgMzM4MSwgNzk0MiwgMCwgNjkyMTksIDAsIDY0NzU3LCAwLCAzOTEzLCAwLCAwLCAKKyAgICA3ODIzNSwgNzA0NCwgMTI2NSwgMCwgNjMwOSwgNzA0NSwgNzE3NSwgNzA0NywgNzgyMzksIDExNzkxLCAwLCAwLCA4MjIxLCAKKyAgICA3ODMwNywgNDE4NjQsIDAsIDAsIDAsIDAsIDE2NywgMCwgNzgzMDEsIDAsIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIAorICAgIDkxNzU4MywgMCwgMCwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCA2NDM1NCwgMCwgODc3NywgMCwgNDA2LCA4ODg0LCAyMzg1LCAKKyAgICAwLCA5MjQ1MCwgMCwgOTE3NTczLCA0MzAzMCwgNDIwMjcsIDEyMTE0LCAwLCA5MTc1NzksIDY0OTM2LCAxOTQ2OTUsIDAsIAorICAgIDEyMDYyOSwgMTA1NjEsIDAsIDgzNjUsIDEyMDUzOSwgMCwgNjU4NDEsIDEyMDc4NywgMTE2MDEsIDAsIDc0MTIxLCAwLCAKKyAgICA5MTc1NzUsIDc4MzQsIDc0MTU5LCAwLCA5MTc1NzQsIDEwMjk4LCA2NjI0LCA0OTA4LCA5MTc1OTYsIDE2MzksIDAsIDAsIAorICAgIDc0MTU3LCA2MzI3LCA2NzI0LCAwLCAxMjgwODYsIDkyNTY2LCAwLCA0ODE3LCA3ODQ0NiwgMTk0NzU5LCA5MjUzNiwgNzA0MywgCisgICAgOTYwMCwgMTEwMjIsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NDgsIDY0Nzk0LCA0MjA1MCwgMTIyOTEsIDU1Mjg5LCAxOTQ3NjEsIAorICAgIDEyMzQzLCA2NTcsIDE5NTA1NCwgNDI3MDUsIDQ0NjEsIDExMzQsIDE4MzgsIDc4NDM4LCAyMDU3LCAwLCA0NDY4LCAwLCAwLCAKKyAgICAwLCA0NDU2LCA1MjA2LCAxMDcyMCwgMCwgNDI1MjMsIDEyNzUyMCwgMCwgMCwgOTE3NTk1LCA2NTU1MCwgMjYwLCA0ODE2LCAKKyAgICA2NzY1OCwgMTA2ODcsIDAsIDQ4MjEsIDQ0NjYsIDAsIDE5NTA0MywgNDgxOCwgMTk1MDQ4LCA0MTQwMywgMTE5OTc3LCAwLCAKKyAgICAwLCA0MTQwNiwgNDMyNzMsIDc0MTYwLCAxMTk5ODMsIDczOTM5LCA5MjYzOCwgMTE5OTg0LCAxMTk5NzksIDQxNDA0LCAKKyAgICAxMTY1LCAxMTk5ODAsIDQ0NTEsIDEzMDg3LCAwLCAxMTI4NCwgMTE5OTg3LCA3Mzg1NSwgNjUxNTUsIDQzMDE0LCA1NDM5LCAKKyAgICA5MzYzLCAxMjc1NTgsIDMzNzUsIDEyODg2OSwgNTkwMCwgMCwgNzg4OSwgMjcyMiwgNDIyNjIsIDAsIDAsIDEyODc3NCwgMCwgCisgICAgMCwgMCwgMTI3ODEwLCAxMTQwMSwgMCwgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAxMjc4ODcsIDAsIAorICAgIDEyNzM4MSwgNDg2OCwgMTE5OTY3LCAxMTk5NjYsIDExODc5OCwgMCwgMCwgNDMxNjEsIDAsIDkyMzYwLCAwLCA1MTgyLCAwLCAKKyAgICAxMjA1NDIsIDAsIDAsIDQyMjYsIDEyMDc5OCwgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDAsIDk3NywgNDQ1OCwgMCwgMCwgCisgICAgNjQ3NzAsIDc0ODM4LCAwLCAzNDQsIDAsIDE5NDc5MCwgMTM5NSwgNjQyNzksIDAsIDkyMjQwLCAwLCA3ODYsIDAsIDQzMTc0LCAKKyAgICA2NDM0MCwgMCwgMCwgMTIwNzIzLCA0MzAyNiwgNzYxMiwgMTAxMzIsIDY0NDEzLCA2NTAyNSwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjg0NDQsIDAsIDkyNDM3LCAwLCAxMTkxNjAsIDEwMjA0LCA5MjY1NiwgMCwgMTI3ODA5LCAwLCAxMzk5LCAwLCA2NTIxNywgCisgICAgMCwgODg1MiwgMCwgMjQxLCAxMjg3ODAsIDQ5MDcsIDAsIDAsIDc5MzIsIDk3MjcsIDEyODg3MywgNzQyNTUsIDg3NDgsIDAsIAorICAgIDAsIDAsIDAsIDQyNzgwLCAwLCAwLCAwLCA0MjE3LCAwLCA4NjUwLCAwLCAwLCAwLCAwLCAxMTg4NzIsIDQzMDk5LCAzOTY1LCAKKyAgICAxMTkxMTksIDY3MTksIDAsIDEzMzAwLCA3ODQzOSwgMTI4MjYxLCA0MzA1NywgNjY1ODgsIDExODk5MSwgMCwgMCwgNzM4MTUsIAorICAgIDQ0MjAsIDAsIDY0MTAsIDc3NjAsIDAsIDAsIDAsIDAsIDAsIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIDExOTkzLCA0MzE4OCwgCisgICAgMjYyNiwgNzc2MiwgMCwgMCwgMCwgOTI2MDEsIDQyODI1LCA0MTg1NCwgNTMwNCwgMCwgNzg1MTYsIDY5MTksIDg2MTksIAorICAgIDExOTY1NSwgMTAwMzgsIDY2NDU0LCA5NTkyLCA0Mjg1MSwgMTI2OTkzLCAxNTQyLCA5MjMwMywgMCwgMCwgMCwgMCwgCisgICAgNzQzMTEsIDc4NDk3LCAwLCAxMDE4MSwgMCwgNDM2MjQsIDAsIDc3NzksIDAsIDEwMTk1LCA5NDc5LCA2MDI5LCAwLCAKKyAgICA5MjI2OCwgOTY4OSwgMCwgMCwgODk5MywgNjYzNTgsIDAsIDQyMzc4LCAzMzY4LCA2MDYsIDEyNzAzMCwgNzY5NywgNjkyMzcsIAorICAgIDY5Nzg3LCAyMDMwLCAwLCA2MDI3LCA4MzcwLCA0MzIyLCAwLCA2NTIwNywgMCwgMCwgMCwgMCwgMCwgMjczNSwgNDI4MzEsIAorICAgIDc3OTM1LCAxMjcxMjAsIDc0ODY2LCA4ODgxLCAxMTkwNDcsIDAsIDAsIDczOTQ2LCAwLCAwLCAwLCA2ODE0MCwgMCwgOTU3NiwgCisgICAgMTI4ODcyLCAzMzQ3LCA0MTYwLCA1MTU0LCA1NTI4OCwgMzc5NCwgNjY1NjQsIDg1MzAsIDEyNzA2MywgNzcwOSwgNDExMTIsIAorICAgIDAsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCAwLCA2NzU4LCAwLCAxNjE1LCA1ODU1LCA4MDksIDAsIAorICAgIDkyMjgzLCAxMjgzMTYsIDEyODAwNCwgNTc5OSwgMCwgMCwgMCwgNzI2MCwgMCwgNDMwMzEsIDY0NDI1LCA2NTEyOCwgCisgICAgNzg4MTksIDY0Mzg2LCA2NTI1NywgMCwgNjg2MTYsIDEyMDYwNywgOTM0NywgMTI4MDY3LCA2NTMyLCAwLCAwLCAwLCAKKyAgICAxMjcwNjAsIDY1ODI4LCAwLCAyODMsIDY4NjY1LCA3ODgxMywgNTMyLCA3ODY2MywgMCwgMCwgMTIwNjA5LCAwLCAzMzcwLCAKKyAgICAwLCAxMTM2MSwgNTQ0MywgNzg3NzgsIDgxNTMsIDczNzY3LCAwLCAxMDc0MSwgMCwgMCwgMCwgMCwgNjU0OTUsIDY0NzA2LCAKKyAgICAwLCA0MzM0NCwgMCwgNzE0NCwgOTQ2NiwgNzg4NjYsIDk4MjQsIDAsIDAsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAorICAgIDEyNzE3OCwgNDMyNjQsIDAsIDAsIDAsIDAsIDc4ODY0LCA2NzMwLCA3ODg2MiwgNjgxNjEsIDY0NTUwLCA1MTg2LCAxMjg5MCwgCisgICAgMTI3ODM3LCAwLCAxMjEwOCwgMCwgNjUxMjQsIDQzMTI3LCA2NjA0MywgMCwgNjMyNiwgNDMxMDcsIDc3ODI2LCAwLCAKKyAgICA0MjU2MiwgMCwgMCwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCAwLCAxMTcxOCwgMCwgMTI4ODksIDkyNjU3LCAKKyAgICAxMjcxMzcsIDAsIDAsIDAsIDU1MjQ1LCAwLCAxNjMwLCAxMjgyMzIsIDY1NDgzLCAwLCAxMjU2NSwgMCwgNjU0NzYsIAorICAgIDEyMDAxMywgMCwgMTE5NTU0LCA5MjgzLCA3NzAwLCA5MTc1MzcsIDk2OTAsIDY1NDk5LCAwLCA2NDU5MywgNTEyLCAzMzc2LCAKKyAgICA2ODIxMCwgMCwgMCwgNzc4OTIsIDYzMiwgMTI5NDAsIDc3ODkxLCA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgCisgICAgODkyNiwgMCwgMCwgMTI4MjczLCAxMDc0NSwgMTAxNzQsIDczNzksIDY0NTgxLCA1Mzg2LCAxMjA2ODYsIDExNzEzLCAKKyAgICAxMDYzMywgNjk3MDgsIDUwNTYsIDAsIDAsIDAsIDEyMDc3MywgMCwgOTgxMiwgMCwgNDQ2MCwgMCwgMCwgMCwgMTI4MDM4LCAKKyAgICAwLCAwLCAxMjcxNzQsIDY0Mjc4LCA5MjM3MCwgNDM0NjYsIDAsIDAsIDY0Mzg5LCAyOTUzLCA3Mzg3OSwgMTgwMSwgMTI4MzUsIAorICAgIDExOTAyOSwgMCwgNzM4MjMsIDAsIDY2Mzc1LCAyMDg1LCA3MDIsIDQyNTc5LCA3Nzg4NCwgNzc4ODUsIDEzMDc0LCA3Nzg4MywgCisgICAgMCwgMCwgMTI4NTcwLCAxMjEwNiwgMCwgNzQyMDcsIDE3NTUsIDEwNDgyLCAxMjg2MywgNzc4OTgsIDExNjMsIDI5NTEsIAorICAgIDk1MjIsIDc0MDc5LCA3ODI2NiwgMTIwNjc0LCAwLCAzMzg0LCA2OTIyNywgMTA3MDIsIDgzMCwgNzc5MDIsIDc3ODk5LCAKKyAgICA3NzkwMCwgODQ1MSwgMCwgMCwgMCwgNjk3MzksIDAsIDAsIDAsIDAsIDI5MDgsIDAsIDQzMzg2LCA2NDkwMiwgNDI0MywgMCwgCisgICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDAsIDczOTQwLCA2NDM1MiwgMTI3NTEzLCAwLCA0MTEsIDAsIDkxOTksIDAsIDQwNTYsIAorICAgIDExODk5MiwgNDE4OTAsIDAsIDI3MzAsIDQxNjA0LCAwLCA1NDI4LCAxOTQ3NDMsIDMzNjQsIDQyMjY1LCA2NDQzNywgCisgICAgMTI3OTM1LCAxMTg4MTYsIDE5NDc0MiwgOTY4NCwgMjE2LCAwLCAxNDAxLCAxMjgwNTMsIDQ0MDEyLCAwLCAwLCA5MjU4NSwgCisgICAgOTE1OCwgNzc4NDIsIDEyMDY2NCwgNTc2OCwgMCwgMCwgMCwgNDg0LCAxOTQ3MzksIDAsIDAsIDY1ODk1LCAwLCAwLCAzMzM4LCAKKyAgICA3MzkzNSwgNTcyLCA3MDQxLCAyNzM2LCA2NzYwNSwgMCwgMTI4NjgwLCAyNzk0LCA4ODA3LCA2NDQ5MSwgNzc4NDcsIDU0MzgsIAorICAgIDUyMjIsIDUzODEsIDQzMTE0LCAwLCA1MTkzLCA1MTI1LCA1NDU2LCA1NTA5LCA3Nzg0NiwgMTk0NzQ3LCA5NTM0LCAwLCAwLCAKKyAgICAwLCAzNDMwLCAwLCAwLCAwLCAwLCA5ODEsIDAsIDQzMzAsIDczOTI5LCAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCAKKyAgICA0MTY4MywgNjQ2MTcsIDAsIDczNzU0LCAzOTU3LCA2NDM1OCwgNjQ1NDcsIDEyODI1OSwgNjc0LCA2Mzk5MSwgMCwgMjk0NiwgCisgICAgNTM1NCwgNTI1MSwgNTMyOCwgNTMwNywgMzc1OSwgMTE0MTEsIDgzNjQsIDUxMjMsIDExOTYyOCwgNTI4MSwgNTQ2OSwgCisgICAgNTEyMSwgMTE5MjQ1LCAxMTg5OTMsIDAsIDUxMzAsIDAsIDAsIDc3OTkwLCAwLCAxMjA3MjYsIDEyMjEsIDI3MzMsIDExNzQ2LCAKKyAgICA3Nzk5MSwgNTIxNiwgMCwgMCwgMCwgMCwgMzQ2OCwgNzAzMywgOTIzMCwgNTkzOSwgMTk1MDUyLCAwLCAwLCAxMjA2NzcsIAorICAgIDY4NDAwLCA3Mjc4LCAxMDMyMSwgMTAyODksIDY0NjEzLCAxMDM4NSwgNDE3MDYsIDAsIDAsIDAsIDAsIDExNzM5LCAwLCAKKyAgICA0MTk4MSwgMCwgNTkzOCwgMCwgMCwgMTI0NDgsIDc1NzYsIDEwNDAxLCAxMDMzNywgNzM4NTIsIDAsIDEzMDU3LCAwLCAKKyAgICAxMjY5NzYsIDAsIDEwMDA5LCAwLCA0MTcwMywgMCwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgCisgICAgMCwgMCwgOTI0NTcsIDAsIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgNjgzOTUsIDQ5ODcsIDY0NTE5LCAwLCAxMjgzNDAsIDAsIAorICAgIDAsIDAsIDEwOTcwLCAxMTczMywgMCwgMTIwNzkyLCAwLCAxOTk0NCwgMCwgOTAwOSwgODU1MSwgOTIzNDUsIDExNDY4LCAKKyAgICA2NDYzNiwgNzU3NSwgMCwgMjcyNCwgMCwgMCwgMTIzMTMsIDExMDU5MiwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgCisgICAgNzgyODYsIDExOTk0MywgMTE5OTQwLCAxMTk5NDEsIDExOTkzOCwgOTc3NSwgNDA0NiwgNDU4OSwgNDUyMSwgNjg2MjksIAorICAgIDkxNDEsIDAsIDc4ODUwLCAyNzQxLCA2NDM5OSwgNjE5NywgMTM3MCwgMCwgMCwgMCwgMCwgMCwgMCwgNjE4NCwgODYwNiwgCisgICAgMzMwMywgNDEzNzIsIDExNzg2LCA5NDczLCA2NjIwMywgNjYxNzcsIDkyNDQ2LCAxMTU5MywgNDMwMDcsIDQ0NzgsIDY2MTc4LCAKKyAgICAwLCAwLCAyNzQ0LCAwLCA0NDc3LCAxMTg5NjQsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNDM3ODYsIDExOTk2MSwgCisgICAgNjYxOTgsIDQxODgwLCA2NjE4OCwgNjYxOTcsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIAorICAgIDczNzg4LCA3Nzg4LCA0ODQ3LCAwLCAxMjc3NTksIDAsIDAsIDAsIDE1ODEsIDY1MzUsIDc4MTYxLCAxMjk1NCwgNDMwLCAKKyAgICA3ODE2MCwgNTUyNTksIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCAwLCA2ODYyNSwgMCwgNzI2OSwgCisgICAgMCwgNTk2NCwgMTI5MDgsIDAsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDAsIDQ0MywgMCwgCisgICAgNDk0NCwgNTQ2NywgMTE5NjAzLCAwLCA2NTEzNywgNjA0NCwgNjUzOTIsIDAsIDQyMTMsIDAsIDQxMzAzLCAwLCAxOTQ5MzEsIAorICAgIDExOTk2MiwgNDEzMDYsIDczOTg0LCAyNjk4LCAxMjcxNTksIDAsIDEyMDcyLCAzMTkzLCAwLCA0MTMwNCwgODI0LCAKKyAgICAxMjg2NzYsIDEyMDkxLCA3ODg5MywgNzg4OTQsIDExOTgxNiwgNDY3MywgNjQ4MDQsIDQ2NzgsIDExOTgyMCwgMTE5ODE5LCAKKyAgICA2NTA1OSwgMCwgNjczOSwgMCwgNTQ4MSwgMzQ5MCwgMTE5OSwgMTE5ODExLCA4MzU2LCAxMTk4MjksIDExOTgzMiwgNDY3NywgCisgICAgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCA3ODE3MCwgNzgxNjYsIAorICAgIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAxMTk5NDksIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAxMjcwMjQsIDE4NTUsIDAsIAorICAgIDY4NjY5LCAwLCA5MjQ0NSwgMTI3NTU0LCAwLCAwLCAxMTk2NTIsIDI3NDUsIDExNzk3LCAwLCAxMjgxNTksIDkyMDIsIAorICAgIDQ2NTQsIDAsIDAsIDY4NjM4LCA3Mzk5MywgMTA1MjUsIDQ2NDksIDY1MjA5LCAwLCAwLCA0NjQ4LCA0MzA4MCwgMCwgMCwgMCwgCisgICAgNjI0NiwgNjQ5NTAsIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgCisgICAgNDMxODcsIDg2NjksIDAsIDY4MjEsIDY1MDkzLCAwLCA3ODg4MSwgMjcxNiwgMCwgMCwgMCwgMCwgNjgzNjksIDEyMDA1NCwgCisgICAgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCA3ODAzMiwgCisgICAgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCA3ODExLCAKKyAgICA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgMCwgMCwgMCwgCisgICAgNjQ5MDQsIDkwMjYsIDEwODMzLCA3NDg2NCwgNzU0NywgNDg2NywgMCwgMTAwMDgsIDEwMjIyLCAzMDU0LCAxOTQ5NTYsIAorICAgIDk3NDQsIDc4ODYwLCA3NjA1LCA0NjIyLCAxMTk2NTYsIDAsIDAsIDAsIDAsIDAsIDkwNDUsIDc4ODg4LCA0MjI1LCAxOTkyNiwgCisgICAgNzg4ODcsIDEyODgwLCA2NTMwNywgNDYxNywgNzg4ODMsIDAsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCAwLCAKKyAgICA1OTU4LCAwLCAwLCA0MjE1LCA5Nzg5LCA5MTc5NDEsIDQzMjEsIDQ2MjEsIDAsIDQxMzEzLCA1MjIsIDUzNjgsIDAsIAorICAgIDY1ODAzLCAwLCA1MzY2LCAxMjIwMSwgNTM3MiwgMCwgMCwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgMCwgMCwgNDYzOCwgMCwgCisgICAgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDE5NDk2OCwgNTM3NiwgMTgzNSwgNTMzNSwgMTk0OTY2LCAKKyAgICAxMjgwODksIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAxMjgwOTMsIDUzODcsIDUzMzMsIDAsIDAsIDQyMDk0LCAKKyAgICA1MzMxLCA0NjM0LCAxMTkyOCwgMCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgMTI2OCwgNjUwOTcsIAorICAgIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCA0NzU4LCAwLCAKKyAgICAxNjA4LCAyNzM4LCAwLCAxMDQ1NSwgNDc1MywgNzQwMjYsIDExMzQ0LCA0MjIyLCA2MjQwLCA1MjMxLCA3NDM4NCwgMCwgCisgICAgNjgzNzcsIDYyNDgsIDAsIDAsIDAsIDQyMzE4LCA5MjU4MiwgNTIyOSwgNDc1NywgMCwgMCwgMjcyOCwgNDc1MiwgNjQ1NjMsIAorICAgIDY1MjM1LCA1MjM0LCAwLCAxMjgxNDUsIDAsIDEwNzEzLCA3MTY2LCAwLCAyNjIyLCA3NDYwLCAxMjczMDIsIDAsIDAsIAorICAgIDg5NTQsIDc0NzYwLCA2NTE4OSwgMjYzMiwgOTIyMzAsIDEwMTA4LCAxMDExLCA1NTc0LCAxODUzLCAyNzA5LCA2NTEzOSwgCisgICAgNTU3NywgMCwgMCwgMTE4ODcxLCA2ODY0MSwgODk2NSwgNzYzNSwgNDIxNzcsIDUzMTYsIDAsIDUzMTQsIDY0NTEsIDU1NzIsIAorICAgIDAsIDUzMTIsIDAsIDU1MjUsIDUzMzAsIDUzMTksIDAsIDAsIDE5NDkwNywgNDQwMDMsIDAsIDAsIDAsIDEyMDQ5OCwgCisgICAgMTI3ODUxLCAxOTUwMDksIDAsIDc0MDIyLCAwLCA2NDYwOSwgNjg2NDMsIDEyMDYzNCwgMCwgNTcyMSwgMCwgNTUxOSwgCisgICAgODYzMiwgNjY0NjUsIDExMjY3LCA3Mzk2MSwgOTIyNzgsIDU3MjAsIDAsIDE2OTIsIDQyMTksIDQ2MTAsIDg2OTYsIDQzMDUsIAorICAgIDAsIDQ2MDksIDQzNDc4LCA0NjE0LCA1NDEsIDAsIDUyODcsIDUzMDksIDUyODUsIDY4Mzg5LCA1OTYxLCA0NjQ3LCA1NiwgCisgICAgNDIxNiwgMTA1NzcsIDQxMzgxLCA2MDEsIDQ2MTMsIDAsIDAsIDkyMjc2LCA0NjA4LCA2NDI2MCwgNDExMjQsIDUxOTAsIAorICAgIDY3NjI4LCAwLCA2ODE0NSwgNzA4NiwgMCwgMTE5MjQzLCA2NzYyMCwgMCwgMjczNCwgMTEwNzQsIDAsIDY3NjI3LCA0MzU5MywgCisgICAgMCwgNjc2MjUsIDU5NjAsIDAsIDg5OTIsIDQyNTkzLCAxMjgyNjAsIDE3ODIsIDY3NjIyLCA2ODExNCwgMTE5OTM5LCAwLCAKKyAgICA2ODE4MCwgNTUwMSwgMTE5OTUyLCA0MjUwOCwgNzQ0MiwgNDM2NjUsIDM1OSwgNDEyNTMsIDY4MzkyLCA2MjM5LCAxMTk5NTYsIAorICAgIDQxMjU2LCAwLCA2ODEzNCwgMCwgNzQyMDksIDkxNzU1MCwgOTM0NiwgNjk2NjAsIDQxMjU0LCAxMjgwNDcsIDQzMjkxLCAKKyAgICAzNzY3LCA1NzM3LCAwLCA0ODY1LCAwLCA1NzQwLCA5MTc5OTcsIDU3MzYsIDQzNjgsIDY0NzI0LCA3MTkzLCA2ODEzNywgMCwgCisgICAgNTczOSwgNDEwMjQsIDQ4NjYsIDAsIDczOTA0LCAwLCA0ODY5LCAxMjA1NjMsIDAsIDQyMjMsIDEyODIwMSwgNjY1MCwgMCwgCisgICAgMCwgMCwgMTI3ODkwLCA0ODcwLCAxMjA0NDUsIDY4NjYxLCA2NzE2LCA3ODE3NiwgNjg2NjcsIDY4MzgyLCA2ODY3NiwgCisgICAgMTI3OTI1LCAxMDEyMiwgNDg2NCwgNjY1NjgsIDQxNDQsIDc5MzcsIDAsIDYyNDUsIDY4NjUyLCAyNzMyLCA0MjczNCwgNzQ1LCAKKyAgICAwLCAxOTUwOTcsIDkyMTk1LCA0Nzc3LCA3ODIxLCAwLCA2ODYzMSwgNDI3NzUsIDAsIDE5NDk1NCwgMCwgMzA5NywgMCwgCisgICAgNTk2NiwgMCwgNDc3OCwgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIDY0NDA3LCAwLCAwLCA4NTc3LCAxMjg1NjIsIDY4MTk2LCAKKyAgICA0MzI4NSwgMTAyMTYsIDQ3ODIsIDAsIDAsIDEyMDc1NywgNjg2MTgsIDEyMzI1LCA0MzA1NiwgODcxNywgMCwgMCwgNDc3NiwgCisgICAgNzM4MTgsIDExNDkyLCA4NzAwLCAwLCAxMzE3NiwgNjgzNjMsIDEwNDI2LCAwLCA5MTc1OTksIDEwMzYyLCAxOTQ3MDYsIAorICAgIDE3MTUsIDQ4NDksIDgyNDIsIDk1NjEsIDczOTIyLCA0MzI3OCwgNDI2MzUsIDAsIDAsIDU5NjMsIDkxNzkyNiwgMCwgMCwgCisgICAgNDg1MCwgMCwgMTYwNywgNDY2LCA0ODUzLCAxMTg5OTUsIDQ4NTQsIDEyNzkxOCwgNTE2NCwgMCwgMTM1MCwgNTEyNCwgCisgICAgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIDkyNDcxLCAxMjQ0NSwgMzc4NSwgMjM0LCAzMTk5LCAwLCA0MTI2OCwgCisgICAgNDg0OCwgMjUzMCwgOTE3OTA5LCAyMDY4LCAxOTY0LCAwLCA3Mzc2MiwgMTA0NTgsIDAsIDg1NzYsIDc4NTQzLCAwLCAyNzA0LCAKKyAgICA0Nzk0LCAwLCA2ODIxMSwgODMyMiwgNDc5NywgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCAKKyAgICAwLCAzMDMsIDAsIDkyNjIyLCAwLCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCAxMTg4NjksIDAsIDAsIDAsIDAsIDAsIDQzMjkyLCAKKyAgICAwLCAyNDQxLCAxMDczOSwgNjUwOTAsIDAsIDExOTMyNywgMCwgMjQ1MSwgMjcxNCwgMTE5MzI2LCAwLCA0MzM3OSwgNDkzNywgCisgICAgNDMzNzYsIDc1MywgNTg0OSwgMTA1OTcsIDQzMDg5LCAxMTcyMiwgOTI0OCwgOTI1NTUsIDQyODc5LCAxMTcyNSwgMCwgMCwgCisgICAgMjcyNiwgMzEwNywgNzM5NTgsIDQ5NDEsIDY0OTM3LCAxMTkyMzMsIDkxNDAsIDE0MDgsIDUyNjEsIDQ2MDcsIDAsIDE4MSwgCiAgICAgMCwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAwLCAwLCA0OTY0LCAKLSAgICA1MjY0LCA2NDE3OCwgNjQxNzcsIDEyOTc5LCAwLCA2NDE4MiwgNjQxODEsIDY0MTgwLCA2NDE3OSwgOTQ4MiwgNDg3MywgCi0gICAgNDEyMzEsIDE4MjIsIDQyNTI2LCAwLCAxMjc1OCwgMzg2NSwgMCwgMCwgMTA1MDAsIDAsIDAsIDAsIDAsIDk4MzAsIDAsIAotICAgIDM4OSwgMTA4OTMsIDc1MjEsIDAsIDQ4NzIsIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIDQ4NzgsIDU0NTksIDQ4NzQsIDAsIAotICAgIDk1NTcsIDU0NjUsIDAsIDAsIDExNDk0LCAwLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgMCwgMCwgCi0gICAgNjQxOTEsIDY0MTkwLCA4ODk4LCA2NDE4OCwgMCwgNDEwMzAsIDAsIDAsIDkxNzgzNSwgMCwgOTE3ODM0LCAwLCA5MTc4MzcsIAotICAgIDQxMDMxLCAwLCAxMTk2MCwgMCwgMzA4MiwgMCwgMCwgMCwgMTA1NzMsIDAsIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgCi0gICAgMTI3MDQyLCAwLCAxODE3LCA2NjcyNCwgMCwgMCwgMTA1NjQsIDc3NjMsIDEzMDc3LCA0MTgxMywgNDQwMCwgNDE3NDUsIAorICAgIDUyNjQsIDY0MTc4LCA2NDE3NywgMTI5NzksIDQxNDExLCA2NDE4MiwgNjQxODEsIDY0MTgwLCA2NDE3OSwgOTQ4MiwgNDg3MywgCisgICAgNDEyMzEsIDE4MjIsIDQyNTI2LCAxMjg1ODEsIDEyNzU4LCAzODY1LCAwLCAwLCAxMDUwMCwgMCwgMCwgNzgwMjgsIDAsIAorICAgIDk4MzAsIDQzNjQyLCAzODksIDEwODkzLCA3NTIxLCAxMjc4NzksIDQ4NzIsIDU0NjMsIDAsIDMxMjUsIDk1NjcsIDAsIAorICAgIDQ4NzgsIDU0NTksIDQ2MDQsIDkxNzkzMSwgOTU1NywgNTQ2NSwgNjg2MTcsIDAsIDExNDk0LCAwLCA5NTYzLCAxMDg2NSwgCisgICAgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgMCwgNzg3MTQsIDY0MTkxLCA2NDE5MCwgODg5OCwgNjQxODgsIDAsIDQxMDMwLCAKKyAgICA3ODgzNiwgMCwgOTE3ODM1LCA3ODgyMCwgOTE3ODM0LCAwLCA3ODgwNSwgNDEwMzEsIDc4ODAxLCAxMTk2MCwgNjc0NSwgCisgICAgMzA4MiwgMCwgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgNzg4MDksIAorICAgIDEyODE2MiwgMTgxNywgNjY3MjQsIDc4NTM4LCAwLCAxMDU2NCwgNzc2MywgMTMwNzcsIDQxODEzLCA0NDAwLCA0MTc0NSwgCiAgICAgNjQyMDcsIDEwMjc1LCA4OTI1LCAxMDM3MSwgMTAzMDcsIDQxODE0LCA0MjQ4LCAwLCAwLCA0NTQxLCA2Mjk5LCA2NDIwNCwgCi0gICAgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAwLCA0MjE1NiwgMCwgMCwgNjQxOTMsIDY0MTkyLCAwLCAwLCAKLSAgICA2NDE5NywgNjQxOTYsIDY0MTk1LCA2NDE5NCwgMTMyODIsIDY0MTc1LCA2NDE3NCwgNjQxNzMsIDAsIDg0NiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjU0MywgMTIxNjMsIDMxMDgsIDk3NDUsIDY0MTY3LCA2NDE2NiwgNjQxNjUsIDY0MTY0LCA0MTc0MywgMCwgCi0gICAgNjQxNjksIDY0MTY4LCA2NDk0OSwgMTA5NzIsIDEwMjUxLCAxMDI0NywgNDI3NjgsIDcxNSwgNjQxNjEsIDQzMjk5LCA5NDUzLCAKLSAgICA1MzQ4LCAxMDk0MywgMTIwMzc4LCAwLCAxMTM1MiwgNTUwLCA5OTEwLCAwLCAwLCA2NjU3OSwgMTE1NTEsIDAsIDAsIDk1MDQsIAotICAgIDcxODcsIDAsIDEwMzczLCAwLCAxMjA3OTEsIDEwMjYxLCAxMDI1MywgNjQwNCwgMTAyNzcsIDAsIDExOTg0LCAxNTUyLCAKLSAgICA2NTIyMiwgNjk5OCwgMCwgMCwgMzEyOCwgNDc4OSwgNTA2NywgNTA2NiwgMTE4ODQ5LCA0Nzg0LCAwLCA4ODI3LCAxMTQ2LCAKLSAgICA1MDY1LCAwLCAwLCA2ODEzNiwgMCwgMCwgNTA2NCwgMjQzMSwgMCwgOTQ1MCwgMTgwOSwgMCwgMCwgMCwgNTA2MiwgMTI2NCwgCi0gICAgNjQ4MTcsIDEzMjU0LCAxMTY5NywgMCwgOTc4NSwgNjQ3MTYsIDAsIDM5MzMsIDc0NTU5LCA0NzQwLCA3OTU0LCAwLCAwLCAKLSAgICA0MjYwOSwgMCwgNzQxNzUsIDAsIDEyNzAxNiwgMCwgMCwgNDIxMzAsIDAsIDUxNTEsIDkxNzgzMSwgOTE3ODIzLCAwLCAwLCAKLSAgICAwLCA3NjIwLCAzODAwLCA2NTEyMiwgMCwgMCwgODM1NSwgNzg1NCwgMCwgOTU0LCA2NDkyNywgNDE4NSwgNDEwNDUsIDAsIAotICAgIDQxNDM4LCA0MTQzOSwgNzM5NzgsIDEwNzExLCA0NTkzLCAwLCAxMjA1ODQsIDAsIDY0Nzc0LCAxMzMwOSwgMTA1MzIsIAotICAgIDY2NzI3LCAwLCAwLCAwLCA2NDc1OSwgMCwgNTE2NiwgOTg4OCwgMCwgNTE0OCwgNDI4MzQsIDAsIDEyMDYzNCwgMTE4OTQ2LCAKLSAgICA2NDE0MCwgMCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDAsIDAsIDYzNiwgMTE2OTgsIDAsIAotICAgIDAsIDk5MTYsIDExNzAxLCA3ODM2LCAwLCA2NDEzNywgODMyMCwgMTE4OTY5LCA4ODYzLCAwLCAxMTk5NjAsIDE0NzcsIAotICAgIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgMCwgOTkwOCwgMCwgMCwgMCwgMzkzNywgMTIzMTIsIDAsIDAsIDAsIDY0NzgxLCAKLSAgICA5MTIsIDEwNDk4LCA0NTM2LCAxMTk5NjMsIDc0NTMyLCAwLCA2MjQ0LCAwLCAxOTQ1ODAsIDM5MzUsIDEyMDY2NSwgMCwgMCwgCi0gICAgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgMCwgNTM5NywgMCwgMTIwNDYsIDEyNTk5LCAwLCAwLCA1Mzk1LCAwLCA1MzkzLCAKLSAgICAzNTQsIDAsIDExOTk0OCwgMCwgMCwgMCwgNDIwMzksIDAsIDAsIDY0MTQyLCA2MjYsIDAsIDU4OTUsIDAsIDAsIDU3ODAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQzMjk3LCAwLCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAwLCAwLCA3MzgxOCwgMzkxOCwgNjY0NTIsIAotICAgIDM3OTcsIDE2NDQsIDExOTk0NCwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIDAsIDY4MTMxLCAKLSAgICA0MTQ2LCAwLCA1MzYwLCAyNDY2LCAwLCAwLCAwLCA2MjQ5LCA0MjExNywgMCwgMCwgMCwgMCwgNzQwNDYsIDEyMDU4MywgCi0gICAgNDkxMSwgOTg4LCA5MTc4MDksIDAsIDAsIDAsIDcwNTQsIDY0MTQ3LCAwLCA2NDkyMCwgOTE3ODEyLCA5MTc4MDMsIAotICAgIDExODkzMywgMTIwMzQ5LCAwLCAwLCAxMTk4MSwgMTIyMDIsIDAsIDExMDMyLCAxMjA3MjUsIDYwOTMsIDExNjA4LCA5NzUsIAotICAgIDAsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCA2MDU4LCAxMjA0MDEsIDAsIDEyMDY1NywgMCwgMCwgMCwgCi0gICAgOTgxOCwgMTAxNzgsIDEwMzI0LCA0MjEwNiwgNTg5OCwgNzQ1NDAsIDQ3MzgsIDQxODU2LCA3MDYyLCA5MTc4NjUsIDQ3MzcsIAotICAgIDExNzc5LCA0NzQyLCAxMjA1NjQsIDkxNzg2NiwgNzM3MzYsIDAsIDk4MjUsIDY0NDgsIDEyNzAwLCAxMjcwMDgsIDQ4MzEsIAotICAgIDAsIDAsIDAsIDUzMDAsIDQ3NDEsIDQyMTA4LCAwLCA2NDE1OSwgNDczNiwgNjQxNDgsIDAsIDg0OSwgMCwgMCwgNDMyODgsIAotICAgIDAsIDY2NjIwLCAwLCAwLCA2NTU0OSwgOTQ5NiwgNjQ1OTgsIDAsIDAsIDc4NzYsIDY4MTMyLCA5MTc4NzIsIDM5MjgsIAotICAgIDkxNzg3MCwgNjUyODMsIDEwNzA2LCA3MTk4LCAwLCA0ODQyLCAxMjA1MywgMCwgMCwgNDg0MSwgMCwgNDE3MSwgMTIwMDgsIAotICAgIDYyNTEsIDM5MjMsIDE0OTAsIDAsIDExOTU5MSwgMCwgNDA5NzIsIDUyNDUsIDAsIDEwMTE0LCA0MjAwMSwgNDE4ODgsIAotICAgIDQ4NDUsIDgzMzIsIDQwOTc0LCAwLCA0ODQwLCA5MDc3LCA5MTc4NTEsIDE3NDcsIDkxNzg0OSwgNDgyNSwgMCwgOTE3ODUyLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5ODUwLCAxMTg5MzcsIDM2NywgMTQ3MiwgOTE3ODU5LCA2Njg3LCAxMjc0LCAwLCAKLSAgICA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgMTEwMjMsIDExOTU1OSwgNDgzMCwgOTEzNCwgMCwgCi0gICAgNjQxMjYsIDQzMDExLCAwLCAwLCA2NDEwMSwgMCwgMCwgNDgyNCwgMTA2MTQsIDEyMDM5MCwgMCwgMTg4OCwgMTk2MCwgCi0gICAgNzg2MSwgOTE3ODU2LCAwLCA0MTgzNiwgNDMwMTIsIDYwNTIsIDYwNjQsIDU0LCA0MzAwOSwgMTIyMTQsIDAsIDYyMTEsIDAsIAotICAgIDM1OCwgNDE5OTcsIDQxODMzLCAxMTQ0MiwgMTA3NTgsIDY1Nzc0LCAwLCAxMjAzODQsIDY0MTE1LCAxMjAzODUsIDAsIDAsIAotICAgIDAsIDExOTA1MywgMCwgMTI3NjUsIDY0MTIxLCAxMjY5OTgsIDEyOTYyLCAwLCAwLCA0MDE3LCAxMjgyNywgNTI0MSwgCisgICAgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAwLCA0MjE1NiwgNzg2ODgsIDAsIDY0MTkzLCA2NDE5MiwgCisgICAgNjUyMjMsIDk5NDMsIDY0MTk3LCA2NDE5NiwgNjQxOTUsIDY0MTk0LCAxMzI4MiwgNjQxNzUsIDY0MTc0LCA2NDE3MywgCisgICAgNzgxODksIDg0NiwgNzgxODYsIDk5NjUsIDAsIDAsIDAsIDAsIDI1NDMsIDEyMTYzLCAzMTA4LCA5NzQ1LCA2NDE2NywgCisgICAgNjQxNjYsIDY0MTY1LCA2NDE2NCwgMjExMCwgOTIxNzYsIDY0MTY5LCA2NDE2OCwgNjQ5NDksIDEwOTcyLCAxMDI1MSwgCisgICAgMTAyNDcsIDQyNzY4LCA3MTUsIDY0MTYxLCA0MzI5OSwgOTQ1MywgNTM0OCwgMTA5NDMsIDEyMDM3OCwgMCwgMTEzNTIsIAorICAgIDU1MCwgOTkxMCwgMCwgMCwgNjY1NzksIDExNTUxLCAwLCAxOTUwODAsIDk1MDQsIDcxODcsIDAsIDEwMzczLCAwLCAKKyAgICAxMjA3OTEsIDEwMjYxLCAxMDI1MywgNjQwNCwgMTAyNzcsIDc4MTgzLCAxMTk4NCwgMTU1MiwgNjUyMjIsIDY5OTgsIAorICAgIDc4MTgwLCAwLCAzMTI4LCA0Nzg5LCA1MDY3LCA1MDY2LCAxMTg4NDksIDQ3ODQsIDAsIDg4MjcsIDExNDYsIDUwNjUsIAorICAgIDc4MTk2LCA3ODE5MiwgNjgxMzYsIDc4MTkwLCA0MzQxMiwgNTA2NCwgMjQzMSwgMCwgOTQ1MCwgMTgwOSwgMCwgNzgyMDAsIAorICAgIDc4MjAxLCA1MDYyLCAxMjY0LCA2NDgxNywgMTMyNTQsIDExNjk3LCAwLCA5Nzg1LCA2NDcxNiwgMCwgMzkzMywgNzQ1NTksIAorICAgIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCAwLCA0MjEzMCwgMCwgNTE1MSwgCisgICAgOTE3ODI5LCA5MTc4MjMsIDAsIDAsIDAsIDc2MjAsIDM4MDAsIDY1MTIyLCAwLCAwLCA4MzU1LCA3ODU0LCAwLCA5NTQsIAorICAgIDY0OTI3LCA0MTg1LCA0MTA0NSwgMTI3MTQxLCA0MTQzOCwgNDE0MzksIDY4NjY2LCAxMDcxMSwgNDU5MywgMTI3NzQ1LCAKKyAgICAxMjA1ODQsIDAsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIDY0NzU5LCA2MzgxLCA1MTY2LCA5ODg4LCAKKyAgICAxMjc4MDAsIDUxNDgsIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDQzNzg3LCA3ODIwNCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgCisgICAgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDAsIDc3ODc2LCA2MzYsIDExNjk4LCAwLCAwLCA5OTE2LCAxMTcwMSwgNzgzNiwgCisgICAgNDI3NDEsIDY0MTM3LCA4MzIwLCA3ODY0MCwgODg2MywgOTI0MzEsIDExOTk2MCwgMTQ3NywgNDMyODksIDAsIDc0MzU4LCAKKyAgICA4NjE4LCAwLCA5OTA4LCAwLCAwLCAwLCAzOTM3LCAxMjMxMiwgMCwgMCwgMCwgNjQ3ODEsIDkxMiwgNjM0OSwgNDUzNiwgCisgICAgMTE5OTYzLCA3NDUzMiwgMCwgNjI0NCwgMCwgMTk0NTgwLCAzOTM1LCAxMjA2NjUsIDAsIDAsIDExOTUwLCA1MzkyLCAKKyAgICA0MjI0OCwgNjUxMjksIDY4NjU2LCA1Mzk3LCAwLCAxMjA0NiwgMTI1OTksIDAsIDAsIDUzOTUsIDAsIDUzOTMsIDM1NCwgCisgICAgNjg2MTUsIDExOTk0OCwgNzg1MDMsIDAsIDAsIDQyMDM5LCAwLCAwLCA2NDE0MiwgNjI2LCAwLCA1ODk1LCAwLCAwLCA1NzgwLCAKKyAgICAwLCAwLCAxMjg4NzQsIDAsIDAsIDQzMjk3LCAwLCA0MzExLCA0NjQ0LCA4ODE4LCAwLCAxMjgxODYsIDAsIDcxNDUsIDM5MTgsIAorICAgIDY2NDUyLCAzNzk3LCAxNjQ0LCA5MjM0NiwgOTY1OCwgNDE0MCwgMTEzODUsIDY1OTQ3LCA2NDU1LCA5MDMwLCA4MTMsIAorICAgIDExOTk0NSwgNjgxMzEsIDQxNDYsIDExOTk1NywgNTM2MCwgMjQ2NiwgMCwgNjc2NjksIDExOTk0MiwgNjI0OSwgNDIxMTcsIAorICAgIDkyMjg3LCAxMjgyMjQsIDAsIDAsIDc0MDQ2LCAxMjA1ODMsIDQ5MTEsIDk4OCwgOTE3ODA3LCAwLCAwLCA0MzA2MSwgNzA1NCwgCisgICAgNjQxNDcsIDAsIDY0OTIwLCA2ODE5NSwgNjY5OCwgMTE4OTMzLCA5MjUwNiwgMCwgMTIwMDA2LCAxMTk4MSwgMTIyMDIsIDAsIAorICAgIDExMDMyLCA2NzY1NCwgNjA5MywgMTE2MDgsIDk3NSwgNjg2NjIsIDY1ODQzLCAxNzAsIDAsIDAsIDQxNjksIDAsIDQxODU5LCAKKyAgICA2MDU4LCAxMjA0MDEsIDEzMjAzLCAxMjA2NTcsIDAsIDAsIDY4NjU3LCA5ODE4LCAxMDE3OCwgMTAzMjQsIDQyMTA2LCAKKyAgICA1ODk4LCA3NDU0MCwgNDczOCwgNDE4NTYsIDcwNjIsIDkxNzg2NSwgNDczNywgMTE3NzksIDQ3NDIsIDEyMDU2NCwgOTIzOTEsIAorICAgIDczNzM2LCAwLCA5ODI1LCA2NDQ4LCA2NzE1LCAxMjcwMDgsIDQ4MzEsIDAsIDkyNTI1LCAwLCA1MzAwLCA0NzQxLCA0MjEwOCwgCisgICAgMCwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDkyMTkxLCA3ODQ5MSwgNDMyODgsIDAsIDY2NjIwLCAwLCAxMjczMzEsIAorICAgIDY1NTQ5LCA5NDk2LCA2NDU5OCwgMTE4ODY2LCAwLCA3ODc2LCA2ODEzMiwgOTE3ODcyLCAzOTI4LCA5MTc4NzAsIDQzMzc4LCAKKyAgICAxMDcwNiwgNzE5OCwgMCwgNDg0MiwgMTIwNTMsIDEyODEyOSwgMCwgNDg0MSwgMCwgNDE3MSwgMTIwMDgsIDYyNTEsIDM5MjMsIAorICAgIDE0OTAsIDAsIDExOTU5MSwgMCwgNDA5NzIsIDUyNDUsIDAsIDEwMTE0LCA0MjAwMSwgNDE4ODgsIDQ4NDUsIDgzMzIsIAorICAgIDQwOTc0LCA2NDM0NywgNDg0MCwgOTA3NywgNzgzNDYsIDE3NDcsIDkxNzg0OSwgNDgyNSwgNjkyNDAsIDkxNzg1MiwgCisgICAgNjg2NTUsIDAsIDAsIDAsIDAsIDY4NjI4LCAwLCA5ODUwLCAxMTg5MzcsIDM2NywgMTQ3MiwgOTE3ODU5LCA2Njg3LCAxMjc0LCAKKyAgICAwLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgMTEwMjMsIDExOTU1OSwgNDgzMCwgOTEzNCwgCisgICAgNzg2NjYsIDY0MTI2LCA0MzAxMSwgMCwgMCwgNjQxMDEsIDAsIDAsIDQ4MjQsIDEwNjE0LCAxMjAzOTAsIDAsIDE4ODgsIAorICAgIDE5NjAsIDc4NjEsIDkxNzg1NiwgNzg1MjQsIDQxODM2LCA0MzAxMiwgNjA1MiwgNjA2NCwgNTQsIDQzMDA5LCAxMjIxNCwgMCwgCisgICAgNjIxMSwgMCwgMzU4LCA0MTk5NywgNDE4MzMsIDExNDQyLCAxMDc1OCwgNjU3NzQsIDAsIDEyMDM4NCwgNjQxMTUsIDkyMjIxLCAKKyAgICAwLCAwLCAwLCAxMTkwNTMsIDAsIDEyNzY1LCA2NDExOCwgMTI2OTk4LCAxMjk2MiwgMCwgMCwgNDAxNywgMTI4MjcsIDUyNDEsIAogICAgIDEyMDM5MiwgMCwgNDExMTgsIDM5MjQsIDAsIDExMzY2LCA5MTc4NDMsIDAsIDAsIDkxNzg0NiwgNDExMTYsIDkxNzg0NCwgCi0gICAgOTE3ODQ1LCAwLCAxMTM2MywgMTIwNTcsIDExOTE3LCAxNTY3LCA3NDAwMCwgNDcyMSwgMCwgNjYyMDIsIDg5NTcsIDQxMzksIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyNzQwLCAwLCA0NzIyLCAxMjc2MSwgMCwgMTI3NTksIDQ3MjUsIDAsIDQ3MjYsIDAsIDAsIDAsIAotICAgIDkxNzkwNCwgOTE3OTA1LCAwLCAxMjc1NSwgMTI3NjIsIDQwMTUsIDAsIDgwNTIsIDQ3NiwgMCwgMCwgMCwgNjQyMTIsIAotICAgIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDY0MjE1LCA2NDIxNCwgMTY1NiwgNDE4MzEsIDAsIDAsIDQxODQzLCA4NzIwLCAKLSAgICAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDAsIDg1NTIsIDY0MTEzLCA0MTg0NSwgMzg0OSwgMCwgNjYyMzIsIDk3NzgsIAotICAgIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDc0NDM3LCA5MTc5MTEsIDAsIDAsIDc5MzUsIDY3NTg2LCAwLCAxMTE0LCAwLCAKLSAgICA2NzU4NSwgMTIwMDUyLCAxMjAwNTMsIDEyMDA1MCwgMTIwMDUxLCAzOTM4LCAxMjAwNTcsIDY1NDE3LCA2NDcxNywgCi0gICAgMTIwMDYwLCAxMjAwNjEsIDY1NDE1LCAxMjAwNTksIDYyOTIsIDY1MzAzLCA3OTU1LCA2NDUyLCA0NzEzLCA5MTc4ODcsIAotICAgIDY2MjQ5LCA5MTc4ODUsIDkxNzg5MCwgOTE3ODkxLCA2NTE1MiwgNzE5LCAxMjAwNDQsIDEyMDA0NSwgMTIwMDQyLCA0MTk0NCwgCi0gICAgNDUzMiwgNjU0MTIsIDEyMDA0NiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIDY2NDUwLCA0NzEyLCA5MTc5MDIsIAotICAgIDkxNzg5OSwgOTE3OTAwLCAwLCA4MTU1LCA0NzE4LCAzOTQyLCA0NzE0LCA5NjI1LCAwLCAwLCAwLCAxMjAwNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNjU0MTQsIDY0NTQsIDEyMjksIDAsIDY2NDM3LCA2NjAyNSwgOTE3ODk0LCAwLCA0MjUwMCwgMTIwNTA4LCA0ODA5LCAKLSAgICA5NjIzLCA5MTc4NzQsIDkxNzg3OSwgOTE3ODgwLCA5MTc4NzcsIDkxNzg3OCwgNjU0MDUsIDY4MTU5LCA5MTc4ODEsIAotICAgIDkxNzg4MiwgNTM2NSwgNDU0NSwgODkwMSwgOTE3NTY2LCAxMTk1NTUsIDQ4MTMsIDAsIDAsIDU5MjUsIDQ4MDgsIDY0MzMwLCAKLSAgICAwLCA2NTQ3NSwgMCwgMCwgNDgxNCwgMCwgNDgxMCwgMCwgMCwgNjQ5MjgsIDEwNTQzLCAwLCAzNTIyLCAwLCA0MTQsIAotICAgIDY1NDA0LCAwLCAwLCA2NDU2LCA3MzgyMCwgMCwgMTE5MDUsIDkxNzg4MywgMCwgMCwgMCwgNzQ0OTUsIDAsIDAsIDAsIAotICAgIDExODgyMCwgOTc1MSwgNjU0MDcsIDAsIDExNzcwLCAzOTE5LCAwLCAwLCA2NTA2MSwgMCwgMCwgMCwgMTIyMzUsIDAsIDAsIAotICAgIDAsIDY2NTc2LCAwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDAsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgMCwgNDIwMzgsIDM4NywgCi0gICAgNDEzNjMsIDEyNzM3LCAwLCA0NzgwLCAwLCAwLCA2NDMxMCwgNjQ2MjEsIDAsIDAsIDAsIDAsIDAsIDAsIDg4OTYsIDAsIAotICAgIDM3NSwgNjk3NiwgMCwgMTE5MDA1LCAwLCAwLCAwLCAxMTkyMDIsIDExOTIwMywgMTI1MjYsIDQzMTIwLCAyMzE1LCAwLCAKLSAgICAxOTM4LCAxMTkxOTcsIDAsIDQ1MjksIDExOTIwMCwgMTE5MjAxLCAxMTkxOTgsIDExOTE5OSwgMCwgMCwgMCwgMTMxNTAsIAotICAgIDY0NDkyLCAwLCAwLCAwLCAxMjkwMiwgMCwgNDI4OTEsIDY2MzI3LCA3NDI5OCwgMCwgMTA3OTksIDAsIDI1ODcsIDY2MzcyLCAKLSAgICAwLCA0MTkzLCAxMjAzMzQsIDQyNDEsIDAsIDc5OTgsIDAsIDAsIDAsIDAsIDIzMTYsIDExODgyMSwgMCwgMCwgMCwgNjQyOTcsIAotICAgIDc0Nzk5LCAwLCA3NDE0MCwgMCwgNTM3MywgMCwgMCwgMzc2MiwgMTAwMTUsIDAsIDExOTIzMiwgMCwgNDE1OTAsIDAsIDAsIAotICAgIDM3ODAsIDc0ODUsIDU3NzksIDAsIDQyMDM3LCAwLCAzOTA2LCAxMjM0OSwgMCwgODMyNiwgMCwgNjU0OTgsIDM3NjMsIAotICAgIDY5ODMsIDU2MTgsIDAsIDM3NzksIDAsIDQzNjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAyODAsIDc0NTU4LCAwLCA2ODEzOCwgCi0gICAgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCA0MzMxMCwgNzIzMSwgMCwgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIAotICAgIDY0NTMsIDEwMjAwLCA2MjM1LCAwLCAwLCAwLCAwLCA0NDcwLCAwLCAwLCA3NzgwLCA1MzY5LCAxMTg5NTgsIDUyNDksIDAsIAotICAgIDUzNjcsIDg3NTYsIDAsIDAsIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQxNjk3LCAKLSAgICA0MTMxOSwgMTMwMCwgMTA2NTAsIDQxNjkyLCA2NDUwNSwgNDY2OCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgMzk0MywgMCwgCi0gICAgNDEyMDUsIDAsIDAsIDAsIDAsIDUzNTIsIDAsIDAsIDg4MzksIDQxMzE0LCAwLCA3Nzg1LCA0MTIwNCwgMCwgNDEyMDksIDAsIAotICAgIDAsIDQzNjA3LCAwLCAwLCA1NDIwLCAzODk3LCAwLCAwLCA3NDQxNywgNDAxOCwgMCwgNjgxMjcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI1NjEsIDAsIDM1NDIsIDQxOTE1LCAxMjA3NiwgNzk1MSwgNjgxNTIsIDExODg1NywgNTMwMywgNjI3NiwgMTcwNiwgMCwgMCwgCi0gICAgNzQxMTYsIDAsIDY1MTUwLCA0MTgxOSwgMCwgNzM5NTEsIDEwODQ3LCA0MTgyMiwgOTk4NSwgODYwLCAwLCAxMDUwNiwgMCwgCi0gICAgMCwgMTA3NTMsIDEwODMwLCAwLCA2MTUsIDY0NDkwLCA3NTc0LCAwLCAwLCAwLCAxMjkwOSwgNDMwMTYsIDY0NTU5LCAKLSAgICAxMjcwMjgsIDAsIDAsIDAsIDIwMjAsIDAsIDQwMjIsIDAsIDAsIDAsIDAsIDQxNjkxLCAwLCAwLCAwLCAwLCA2NDYyMiwgCi0gICAgOTA3MCwgMCwgMCwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCAwLCAwLCA3MDAwLCAzOTA0LCAwLCAwLCAwLCAwLCAKLSAgICAxMjcwMTIsIDEzMTIzLCAxMDg0NiwgMzQ1MCwgMCwgMCwgMTE4ODA3LCAwLCA0Mjc3OCwgMTAwMDAsIDQxMDg4LCA0NDksIDAsIAotICAgIDM3NzcsIDAsIDAsIDk2MzYsIDAsIDEwNzM4LCAwLCA5MzY3LCA1OTMsIDQxMDg1LCAzOTk5LCA2NTIyNiwgNDE3MTMsIAotICAgIDEyNzY0LCAwLCA2NDQwOSwgMzU5NiwgMCwgMCwgOTc2MywgMTIwMjgwLCAxMjAyODMsIDEyMzQ3LCAxMjQsIDEyOTgxLCAKLSAgICA0MTEyNywgMTIwMjc4LCAwLCAwLCAwLCAwLCAxMDgyMCwgMCwgMCwgMCwgMTc2OSwgNDE3MTUsIDI0NjMsIDAsIDAsIAotICAgIDEyNzcwLCAwLCAxNTM4LCAwLCA0MzEyNCwgMCwgMTk1MDU4LCA3Nzk1LCAxMjAzMDAsIDAsIDQ4MjgsIDEyNTgsIDAsIAotICAgIDIwMDYsIDAsIDAsIDk0OTgsIDEyNzAzMiwgMTI3MDMzLCAxMjAyODksIDEyMDI4OCwgMzkzOSwgMTIwMjkwLCA4ODQ2LCAKLSAgICA4OTQzLCAxMjAyODcsIDEyMDI4NiwgMjY1MCwgNDQ5MSwgMTk2MSwgNDI2MDIsIDExNTI1LCAxMjAyOTIsIDE5NTksIAotICAgIDEyMDI5NCwgMCwgMTE3NzQsIDQxMDE2LCAwLCAwLCAwLCAxNTExLCA5MzI0LCAwLCAxMDUxOSwgNjYzMzEsIDM0NTQsIAotICAgIDE5OTMwLCAwLCA0MTAxOSwgMCwgMCwgNjUyOTIsIDAsIDEyODYyLCAwLCAwLCA0MjE0MywgNDE4MjgsIDAsIDY1NTMxLCAwLCAKLSAgICAxMTg4NzksIDAsIDAsIDAsIDQxODI2LCA4ODY1LCA2NDAyLCAwLCAxMzI3OSwgNzkxNywgMTIwMzQwLCAwLCA3NzMzLCAwLCAKLSAgICA0OTk4LCAwLCAwLCA0MTk1MCwgMCwgNDI2OCwgMCwgMCwgMCwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIDAsIDc0Nzg4LCAKLSAgICAyMDE0LCAwLCAwLCA5NzY1LCAwLCAwLCAwLCAxOTUwNTksIDAsIDY1MjgxLCAwLCAxMDk0OSwgMCwgMCwgMCwgMjAxNSwgMCwgCi0gICAgMCwgMCwgNjYzMTgsIDc0ODI0LCAwLCA0MjUxNywgMCwgMCwgMCwgMCwgODA5NCwgNjQ0NjgsIDY1OTA5LCA2NDc0LCA3OTQsIAotICAgIDAsIDEyNjU2LCAwLCAxMTkzNTMsIDAsIDE2NjUsIDAsIDQ4MzMsIDAsIDExOTM1MSwgMCwgMCwgMTg5LCAxMjYxMSwgMCwgMCwgCi0gICAgMjg1OSwgNDgzOCwgMCwgNDgzNCwgMCwgMCwgMCwgNDgzNywgMCwgNzcwLCAwLCA4MTEsIDAsIDQxMDQyLCAwLCA0MTMxOCwgCi0gICAgNjQ0MjcsIDAsIDAsIDAsIDM4OTUsIDAsIDc0MzQxLCAzOTc2LCAwLCA0Mjg1OSwgMTAxOTMsIDMxMTYsIDc3NDcsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQxODc3LCAwLCAyODcxLCA2NDYxNCwgMCwgOTk5LCAwLCA2ODE3NywgNDE4NzYsIDI2NjMsIAotICAgIDIwMTcsIDAsIDAsIDExMDQwLCAxMDE1MCwgMCwgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgMTI1NTUsIDEyNTcxLCAxMjU1MCwgCi0gICAgMTI1ODMsIDEyNTYwLCAyMDE5LCAxMjU1NiwgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCA0NzgzLCAxMjU2NiwgMTI1NjksIAotICAgIDEyNTU0LCAwLCAxMDgxMiwgMCwgMCwgMCwgMzA3OCwgMTQwMiwgMCwgMCwgMCwgMCwgMCwgMzk0LCAzMDg4LCAwLCAwLCAwLCAKLSAgICAzOTkxLCA2NDM5MSwgMCwgMCwgNDI0LCA2NjMyOCwgMTk5OSwgMCwgNzM5MTQsIDAsIDAsIDAsIDAsIDAsIDgyNDYsIDAsIDAsIAotICAgIDAsIDQxODQwLCAwLCAyMzc3LCAxMjk4LCA2NDAxMSwgMTI1NzIsIDExMzE4LCAxMjU1NywgMTI1NTksIDEyNTcwLCA4NDg4LCAKLSAgICAxMDAzLCAyMzczLCA5NDQ2LCA5NDQ3LCA5NDQ4LCA0OCwgMCwgOTQ4MCwgNDgxLCAwLCA5NDM4LCA5NDM5LCA5NDQwLCAKLSAgICA5NDQxLCA4NDY1LCA5NDQzLCA5NDQ0LCA5NDQ1LCA5NDMwLCA5NDMxLCA5NDMyLCA5NDMzLCA5NDM0LCA5NDM1LCAzOTg0LCAKLSAgICA5NDM3LCAwLCAwLCA5NDI0LCA5NDI1LCA5NDI2LCA5NDI3LCA5NDI4LCA5NDI5LCA2NDc1OCwgMCwgOTY1NSwgMCwgMjAwNCwgCi0gICAgOTA5NiwgOTc4MiwgMCwgOTE3MiwgMCwgMTk5NjUsIDAsIDU5NTUsIDEyMDQ4NSwgMTEwOCwgMCwgNzQ3NzMsIDAsIDAsIAotICAgIDY0NzgyLCAzOTI2LCAwLCA2NTIxMCwgODc5OCwgMCwgMCwgMTM5MiwgMCwgMCwgOTE3NTU3LCAxMDYwNiwgODA2NSwgCi0gICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCAwLCA0MDE5LCAwLCAwLCA0MzI4MCwgODIxOSwgMCwgMTgxMiwgCi0gICAgMCwgMCwgMCwgMCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAKLSAgICAzOTA5LCA3NDQ2MSwgMCwgMCwgMCwgMCwgMCwgMCwgMTA0OSwgMCwgNjU3MDcsIDExOTQzLCA0MTgwNiwgMCwgNDIzMzYsIAotICAgIDM5MjEsIDAsIDExNzc1LCA2NDc2MCwgMTE3NjYsIDEwMzgsIDQyMzAzLCA5ODIzLCAwLCAwLCA0MDA4LCA2NDAwNCwgODc3MywgCi0gICAgMTA3MzMsIDM2LCAwLCA1MTUzLCA0MTgwNSwgMCwgNzM3MzUsIDc2MywgNDE4MDgsIDY0OTEwLCAwLCAyMDA5LCAwLCAwLCAwLCAKKyAgICA5MTc1NjQsIDAsIDExMzYzLCAxMjA1NywgMTE5MTcsIDE1NjcsIDc0MDAwLCA0NzIxLCAwLCA2NjIwMiwgODk1NywgNDEzOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI3NDAsIDEyODcwMiwgNDcyMiwgNjgxNiwgMTI3NzkzLCAxMjc1OSwgNDcyNSwgMCwgNDcyNiwgCisgICAgMCwgMCwgMCwgOTE3OTA0LCA5MTc5MDUsIDAsIDEyNzU1LCAxMjc2MiwgNDAxNSwgMCwgODA1MiwgNDc2LCAwLCAwLCAKKyAgICAxMjgyOTQsIDY0MjEyLCA0MTAyMCwgMTM4MiwgNjQyMDksIDY0MjE2LCA2NDIxNSwgNjQyMTQsIDE2NTYsIDQxODMxLCAwLCAKKyAgICAwLCA0MTg0MywgODcyMCwgMzkwOCwgMTQ1MiwgMTMxMTEsIDAsIDY0MDY3LCAxMjczMjgsIDg1NTIsIDY0MTEzLCA0MTg0NSwgCisgICAgMzg0OSwgNzg3MzIsIDY2MjMyLCA5Nzc4LCAxMjAwNjYsIDU4OTEsIDcwNjQsIDU1LCA5OTQ4LCAxMTkwODUsIDAsIDAsIAorICAgIDc5MzUsIDI0MjAsIDAsIDExMTQsIDkyNTk5LCA2NzU4NSwgNzg2NzUsIDEyMDA1MywgOTIzNTAsIDEyMDA1MSwgMzkzOCwgCisgICAgMTIwMDU3LCA2NTQxNywgNjQ3MTcsIDEyMDA2MCwgMTIwMDYxLCA2NTQxNSwgMTIwMDU5LCA2MjkyLCA2NTMwMywgNzk1NSwgCisgICAgNjQ1MiwgNDcxMywgMTI4MTk2LCA2NjI0OSwgOTE3ODg1LCA5MTc4OTAsIDkxNzg5MSwgNjUxNTIsIDcxOSwgMTIwMDQ0LCAKKyAgICA3ODYyMywgMTIwMDQyLCA2NzEzLCA0NTMyLCA2NTQxMiwgNjk4MjIsIDEwODY4LCA0NzE3LCAyMzQ5LCA1OTAyLCA2NjQ1MCwgCisgICAgNDcxMiwgOTE3OTAyLCA5MTc4OTksIDkxNzkwMCwgNjU0MTYsIDgxNTUsIDQ3MTgsIDM5NDIsIDQ3MTQsIDk2MjUsIDAsIAorICAgIDYzODMsIDE5NDc0NCwgMTIwMDYsIDEyODU2NSwgMCwgMCwgMCwgMCwgNjU0MTQsIDY0NTQsIDEyMjksIDAsIDY2NDM3LCAKKyAgICA2NjAyNSwgNzg2OTksIDAsIDQyNTAwLCAxMjA1MDgsIDQ4MDksIDk2MjMsIDkxNzg3NCwgNzg2OTQsIDkxNzg4MCwgCisgICAgOTE3ODc3LCA5MTc4NzgsIDY1NDA1LCA2ODE1OSwgMTI4OTMsIDkxNzg4MiwgNTM2NSwgNDU0NSwgODkwMSwgOTI0MjEsIAorICAgIDExOTU1NSwgNDgxMywgMTI4MjYyLCAwLCA1OTI1LCA0ODA4LCA2NDMzMCwgMCwgNjU0NzUsIDExODk0MCwgMTk1MDI4LCAKKyAgICA0ODE0LCAwLCA0ODEwLCAwLCAwLCA2NDkyOCwgMTA1NDMsIDAsIDM1MjIsIDAsIDQxNCwgNjU0MDQsIDAsIDE5NTAyNywgCisgICAgNjQ1NiwgNzM4MjAsIDAsIDY2OTEsIDQyMTkzLCA5MjIyNSwgMTI4MTcxLCAwLCA3NDQ5NSwgMCwgMCwgMCwgMTE4ODIwLCAKKyAgICA5NzUxLCA2NTQwNywgMTI4MDg1LCAxMTc3MCwgMzkxOSwgMCwgMCwgNjUwNjEsIDAsIDAsIDAsIDEyMjM1LCAwLCAwLCAKKyAgICAxMjcyMzMsIDY0MDkyLCAwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDAsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgMTI3ODg4LCAKKyAgICA0MjAzOCwgMzg3LCA0MTM2MywgMTI3MzcsIDAsIDQ3ODAsIDQzMzY4LCAwLCA2NDMxMCwgNjQ2MjEsIDY3MzIsIDAsIDAsIDAsIAorICAgIDAsIDAsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgMCwgMCwgMCwgMTE5MjAyLCAxMTkyMDMsIDEyNTI2LCAKKyAgICA0MzEyMCwgMjMxNSwgMCwgMTkzOCwgMTE5MTk3LCAwLCA0NTI5LCAxMTkyMDAsIDExOTIwMSwgMTE5MTk4LCAxMTkxOTksIAorICAgIDY5NjkyLCAwLCA2OTY5OCwgMTMxNTAsIDY0NDkyLCAwLCAwLCAwLCAxMjkwMiwgMCwgNDI4OTEsIDY2MzI3LCA3NDI5OCwgMCwgCisgICAgMTA3OTksIDY5NjkwLCAyNTg3LCA2NjM3MiwgMCwgNDE5MywgOTIyNTAsIDQyNDEsIDAsIDc5OTgsIDAsIDAsIDAsIDAsIAorICAgIDIzMTYsIDExODgyMSwgMCwgMCwgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDAsIDUzNzMsIDAsIDAsIDM3NjIsIAorICAgIDEwMDE1LCAxMjczMzUsIDExOTIzMiwgMCwgNDE1OTAsIDAsIDkyMzc4LCAzNzgwLCA3NDg1LCA1Nzc5LCAwLCA0MjAzNywgMCwgCisgICAgMzkwNiwgMTIzNDksIDAsIDgzMjYsIDAsIDY1NDk4LCAzNzYzLCA2OTgzLCA1NjE4LCAwLCAzNzc5LCAwLCA0MzYxMywgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMjgwLCA3NDU1OCwgMTI3MzMyLCA2ODEzOCwgMTMwNzIsIDE4OTQsIDAsIDAsIDY1NDc4LCAKKyAgICA0MzMxMCwgNzIzMSwgMCwgMTE3NzMsIDAsIDAsIDAsIDAsIDI1NTEsIDAsIDY0NTMsIDEwMjAwLCA2MjM1LCAwLCAxMTkyMzcsIAorICAgIDAsIDEyODgwNSwgNDQ3MCwgMTE5NjEzLCA5MTc1NTcsIDc3ODAsIDUzNjksIDExODk1OCwgNTI0OSwgMCwgNTM2NywgODc1NiwgCisgICAgMTI3MTQzLCAwLCA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgMCwgNjk2ODUsIDAsIDAsIDAsIDQ0MDIwLCAKKyAgICA2ODA4LCA0MTMxOSwgMTMwMCwgMTA2NTAsIDQxNjkyLCA2NDUwNSwgNDY2OCwgMCwgMTE5NjI0LCAxNDY1LCAxMDg1MCwgCisgICAgMzk0MywgMCwgNDEyMDUsIDQxMzE1LCAxMTg5NjEsIDAsIDAsIDUzNTIsIDAsIDAsIDg4MzksIDQxMzE0LCA3Mzg0LCA3Nzg1LCAKKyAgICA0MTIwNCwgMTI3MzIyLCA0MTIwOSwgNjk2MzcsIDkyMjQxLCA0MzYwNywgMCwgMCwgNTQyMCwgMzg5NywgMTAxMzQsIDAsIAorICAgIDc0NDE3LCA0MDE4LCA3MTUwLCA2ODEyNywgMCwgMCwgMCwgMCwgMTI3NTI2LCAyNTYxLCA2ODYyMSwgMzU0MiwgNzE0OCwgCisgICAgMTIwNzYsIDc5NTEsIDY4MTUyLCAxMTg4NTcsIDUzMDMsIDYyNzYsIDE3MDYsIDAsIDc4NzUxLCA3MTQ2LCAwLCA2NTE1MCwgCisgICAgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDAsIDY5NjQxLCAxMDc1MywgCisgICAgMTA4MzAsIDAsIDYxNSwgNjQ0OTAsIDc1NzQsIDkyNjE3LCA3NzkyMiwgMCwgMTI5MDksIDQzMDE2LCA2NDU1OSwgMTI3MDI4LCAKKyAgICAwLCAwLCAwLCAyMDIwLCAwLCA0MDIyLCAxMjg3ODMsIDAsIDc3OTIzLCAwLCA0MTY5MSwgMCwgMCwgNzQzMjksIDAsIAorICAgIDY0NjIyLCA5MDcwLCAwLCA2ODQxMSwgMzkxMSwgNDI4MjksIDQzMTIyLCAxMDMzLCA3NDQ0MCwgMCwgNzAwMCwgMzkwNCwgMCwgCisgICAgMTI4MTk4LCAwLCAxMTg5MzEsIDExOTYzMCwgMTMxMjMsIDEwODQ2LCAzNDUwLCAxMjczNjAsIDczOTcsIDExODgwNywgMCwgCisgICAgNDI3NzgsIDEwMDAwLCA0MTA4OCwgNDQ5LCAwLCAzNzc3LCA2ODQ1OCwgMCwgOTYzNiwgMCwgMTA3MzgsIDY5NjM0LCA5MzY3LCAKKyAgICA1OTMsIDQxMDg1LCAzOTk5LCA2NTIyNiwgNDE3MTMsIDEyNzY0LCAwLCA2NDQwOSwgMzU5NiwgMCwgMCwgOTc2MywgCisgICAgMTIwMjgwLCA5MjE5MiwgMTIzNDcsIDEyNCwgMTI5ODEsIDQxMTI3LCAyMDkyLCA5MjY4NywgMCwgMCwgMCwgMTA4MjAsIAorICAgIDQzOTg3LCAwLCAwLCAxNzY5LCA0MTcxNSwgMjQ2MywgNzg0ODksIDAsIDEyNzcwLCAwLCAxNTM4LCAwLCA0MzEyNCwgMCwgCisgICAgMTk1MDU4LCA3Nzk1LCAxMjAzMDAsIDAsIDQ4MjgsIDEyNTgsIDEyNzgwMiwgMjAwNiwgMCwgMCwgOTQ5OCwgMTI3MDMyLCAKKyAgICAxMjcwMzMsIDEyMDI4OSwgMTIwMjg4LCAzOTM5LCAxMjAyOTAsIDg4NDYsIDg5NDMsIDEyMDI4NywgMTIwMjg2LCAyNjUwLCAKKyAgICA0NDkxLCAxOTYxLCA0MjYwMiwgMTE1MjUsIDEyMDI5MiwgMTk1OSwgMTIwMjk0LCA1NTIyOCwgMTE3NzQsIDQxMDE2LCAwLCAKKyAgICA2ODY3NSwgMTI4MDU0LCAxNTExLCA5MzI0LCA3ODIxMSwgMTA1MTksIDY2MzMxLCAzNDU0LCAxOTkzMCwgMCwgNDEwMTksIDAsIAorICAgIDAsIDY1MjkyLCA2ODIyLCAxMjg2MiwgMCwgMCwgNDIxNDMsIDQxODI4LCA3ODIwNywgNjU1MzEsIDc4MjA4LCAxMTg4NzksIAorICAgIDU1MjIzLCAwLCAwLCA0MTgyNiwgODg2NSwgNjQwMiwgMCwgMTMyNzksIDc5MTcsIDEyMDM0MCwgMCwgNzczMywgMCwgNDk5OCwgCisgICAgMCwgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCAwLCA0MDEzLCAwLCAxMDg4MSwgMCwgMCwgMCwgNzQ3ODgsIDIwMTQsIAorICAgIDAsIDAsIDk3NjUsIDAsIDAsIDAsIDE5NTA1OSwgNzgzNTcsIDY1MjgxLCAxMjc4MjUsIDEwOTQ5LCAwLCAwLCAwLCAyMDE1LCAKKyAgICAwLCAwLCAwLCA2NjMxOCwgNDMyMzMsIDAsIDQyNTE3LCAwLCAwLCAwLCAxMjY5OCwgODA5NCwgMTAxMzUsIDY1OTA5LCAKKyAgICA2NDc0LCA3OTQsIDAsIDEyNjU2LCAxMjgxMjIsIDExOTM1MywgMTI4MjcwLCAxNjY1LCAwLCA0ODMzLCAwLCAxMTkzNTEsIAorICAgIDEyNzM2NywgMCwgMTg5LCAxMjYxMSwgMCwgMCwgMjg1OSwgNDgzOCwgMCwgNDgzNCwgNjUwNzgsIDAsIDAsIDQ4MzcsIAorICAgIDEyNzA2MSwgNzcwLCAwLCA4MTEsIDAsIDQxMDQyLCA5MTc1NTEsIDQxMzE4LCA2NDQyNywgMCwgMCwgNzg4NDgsIDM4OTUsIAorICAgIDAsIDc0MzQxLCAzOTc2LCAwLCA0Mjg1OSwgMTAxOTMsIDMxMTYsIDc3NDcsIDAsIDAsIDAsIDAsIDAsIDQzNjg2LCA3ODg0NiwgCisgICAgNDE4NzcsIDAsIDI4NzEsIDY0NjE0LCAxMjg3ODUsIDk5OSwgMCwgNjM0NSwgNDE4NzYsIDI2NjMsIDIwMTcsIDAsIDAsIAorICAgIDExMDQwLCAxMDE1MCwgMCwgNjQzMDgsIDE1MjIsIDU5NywgNDc3NSwgMTI1NTUsIDEyNTcxLCAxMjU1MCwgMTI1ODMsIAorICAgIDEyNTYwLCAyMDE5LCAxMjU1NiwgMTI1ODQsIDMwOTIsIDAsIDEyNTYyLCA0NzgzLCAxMjU2NiwgMTI1NjksIDEyNTU0LCAwLCAKKyAgICAxMDgxMiwgNzg4NTEsIDAsIDAsIDMwNzgsIDE0MDIsIDAsIDEyODI3NSwgMCwgMCwgMTE5MjQ4LCAzOTQsIDMwODgsIDAsIAorICAgIDkyMTcyLCAwLCAzOTkxLCA2NDM5MSwgMCwgMCwgNDI0LCA2NjMyOCwgMTk5OSwgNjk2NTksIDczOTE0LCAwLCAwLCAwLCAwLCAKKyAgICA0MjIzMSwgODI0NiwgMCwgMCwgMCwgNDE4NDAsIDAsIDIzNzcsIDEyOTgsIDY0MDExLCAxMjU3MiwgMTEzMTgsIDEyNTU3LCAKKyAgICAxMjU1OSwgMTI1NzAsIDg0ODgsIDEwMDMsIDIzNzMsIDk0NDYsIDc0ODEsIDk0NDgsIDQ4LCAwLCA5NDgwLCA0ODEsIDAsIAorICAgIDk0MzgsIDk0MzksIDk0NDAsIDk0NDEsIDg0NjUsIDk0NDMsIDk0NDQsIDk0NDUsIDk0MzAsIDk0MzEsIDk0MzIsIDk0MzMsIAorICAgIDk0MzQsIDk0MzUsIDM5ODQsIDk0MzcsIDAsIDAsIDk0MjQsIDk0MjUsIDk0MjYsIDk0MjcsIDk0MjgsIDk0MjksIDY0NzU4LCAKKyAgICAyMzYyLCA5NjU1LCAwLCAyMDA0LCA5MDk2LCA5NzgyLCAxMjg4NDgsIDkxNzIsIDEyODU0NSwgMTk5NjUsIDAsIDU5NTUsIAorICAgIDY3NjY2LCAxMTA4LCAwLCA3NDc3MywgMCwgMCwgNjQ3ODIsIDM5MjYsIDkyNDQ4LCA2NTIxMCwgODc5OCwgMCwgOTIxNjUsIAorICAgIDEzOTIsIDAsIDAsIDEyNzM2NCwgMTA2MDYsIDgwNjUsIDExODgwNSwgMTAzNTMsIDEwNDE3LCAwLCAwLCA2NDUyNCwgCisgICAgOTI0MTgsIDQwMTksIDAsIDAsIDQzMjgwLCA4MjE5LCA2ODQwMiwgMTgxMiwgMCwgMCwgMCwgMCwgNDI0MTAsIDc0NDQ4LCAKKyAgICAxMTkxMzIsIDYwNTQsIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAwLCAxMjgxMzksIDAsIAorICAgIDY4Njc4LCAwLCAwLCAxMDQ5LCAwLCA2NTcwNywgMjMwNCwgNDE4MDYsIDkyMzI2LCA0MjMzNiwgMzkyMSwgMCwgMTE3NzUsIAorICAgIDY0NzYwLCAxMTc2NiwgMTAzOCwgNDIzMDMsIDk4MjMsIDEyNzI3OCwgNjkyMzYsIDQwMDgsIDY0MDA0LCA4NzczLCAxMDczMywgCisgICAgMzYsIDAsIDUxNTMsIDQxODA1LCAwLCA3MzczNSwgNzYzLCA0MTgwOCwgNjQ5MTAsIDAsIDIwMDksIDAsIDAsIDEyNzE0MiwgCiAgICAgOTY0MCwgMTE5OTUxLCAwLCAxMjA2OTUsIDg2MjEsIDAsIDEyODUyLCAzMDMxLCAwLCA2NDM2MSwgMCwgMTgyLCAxOTQ3MTgsIAotICAgIDAsIDAsIDAsIDAsIDkwNTgsIDM2NiwgMCwgOTg5MiwgNTk2OSwgMTE3NTQsIDEwODQ4LCA0NTcwLCA2NTMwMSwgMCwgNDI1NSwgCi0gICAgMCwgMTAxMDIsIDQxMTg5LCA0MDAzLCA0MTAyNiwgNjgxMDksIDEzMjkzLCA0MTE5MiwgMCwgMCwgNDIyNTEsIDAsIDQyNTM0LCAKLSAgICAwLCAxMTI4NywgNjEyOCwgMCwgMTEwMzQsIDEwOTIzLCA2NDQyMywgMCwgNjU1MDYsIDAsIDAsIDc0MDgzLCAwLCA2NjU4MiwgCi0gICAgMCwgMCwgMTE5OTU1LCAwLCA5ODE3LCAwLCAwLCAwLCAxMjExNywgNjY1ODYsIDQxODMsIDEwNTQwLCA2NjI1MCwgMTI3MDQ0LCAKLSAgICAxMjcwNDUsIDAsIDAsIDAsIDEyODk3LCAzNzkyLCAyMDExLCAwLCA2MDY1LCA0MzE2MCwgMCwgMTk0NzE1LCA4NjkyLCAKLSAgICA0MTE4NiwgNDE4MTYsIDQxMDIzLCA0MTgxOCwgNDExODcsIDExNjU5LCA3OTIyLCAxMjYxNCwgMjAwNSwgODUyMywgCi0gICAgMTIwMTQ0LCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCAxMjAyNzQsIDEyNzExNiwgNDcwNSwgNzE2LCAwLCAKLSAgICAwLCA0NzA0LCAxMjAwNDAsIDEyMDI3MCwgNDIyNDEsIDE2MSwgMCwgNzQ1NDYsIDY2MjE0LCA0NzA2LCAwLCAwLCAxMjAwMzcsIAotICAgIDQ3MDksIDEwNjgwLCAwLCA0MzI5MywgMCwgMCwgMTE5MTY0LCAwLCAwLCAwLCAxNzAwLCAxMTkyMjMsIDAsIDAsIDAsIAotICAgIDQwMDQsIDAsIDEwOTY4LCA0MzI5NiwgMCwgODUwNiwgMCwgMCwgMTI2OTk2LCAxMDA1LCA5MzcsIDEyMDAzMCwgNDczNCwgCi0gICAgMjg3MCwgMCwgMTIwMDMyLCAwLCA3NDYzLCA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgMTIwNjQ0LCAwLCAKLSAgICA4MTA5LCA0MzEwNSwgMCwgNDczMCwgNDQ3LCAxMzE4NiwgMTUxMywgNDczMywgMTIwNDE1LCAwLCAwLCA0MjUyNywgMTI5MTEsIAotICAgIDAsIDEzODMsIDg1NjUsIDI0NjksIDEyMDAyNCwgMTE5MDg5LCA2MTU2LCA2ODExNywgMCwgNzk5MywgNDI4OCwgMTIwNDE2LCAKLSAgICAyNjc0LCAxMzIzOCwgMTE5MjIsIDAsIDEyMDMzMCwgMzUxMCwgMTMyMzQsIDAsIDEyMDQwNywgNTYwNSwgNDIwOTUsIAotICAgIDExMzY0LCAwLCAxMzgwLCA2NTYxNywgMTIwMzIwLCAxMjAyNjEsIDEzMTk2LCAxMzE5NywgMTIwMzA5LCAxMjA2ODIsIAotICAgIDk0OTUsIDExOTM0NiwgMCwgNTk1OSwgMCwgNzM5NzYsIDEyMDMwNSwgMCwgNjk0MSwgMTE5MzQ5LCAxMzIwNSwgMTMyMTEsIAotICAgIDU4MDEsIDEyNzY5LCA2NTkwNSwgMTIwMzE2LCAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDAsIDE5OTU3LCAKLSAgICAwLCAyMDIxLCAxMTkzMzIsIDAsIDAsIDQzMDI4LCA2NTQ5MywgNDE4MzgsIDM4NzUsIDU5NjIsIDY0MzQxLCAxMTkzMzksIAotICAgIDk4MTQsIDQzNTcxLCA1ODI3LCAzMzE0LCA3Nzg3LCAwLCA2NTQ5NCwgNjgxNTMsIDAsIDAsIDEyMDYzNiwgNjQ1MzEsIDAsIAotICAgIDAsIDAsIDAsIDAsIDY1NDY3LCA1NzcxLCA0MTI5OCwgMCwgOTc0MiwgNTIxLCAwLCAxMDgwMCwgMCwgODQwNCwgMTk0NjI1LCAKLSAgICA0ODMsIDcwOTYsIDcwODksIDY2MzIzLCA5MjgsIDAsIDAsIDAsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDAsIAotICAgIDY1NzgyLCA5ODQxLCA4ODQzLCAxMjE0NSwgMCwgMTAwNzQsIDEyMDgxNiwgMCwgMzc2OSwgMCwgMCwgMCwgMCwgOTU3MywgMCwgCi0gICAgNjUyOTAsIDg4NDksIDAsIDY1ODU1LCA2NTExMiwgMTc5NiwgMCwgMCwgMCwgODE2NCwgNDEzMDEsIDM1MDIsIDAsIDAsIAotICAgIDEwNjIxLCA3MzgzOCwgMCwgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAwLCAxMjY2MSwgNzYwOCwgMTAzNTQsIDEwNDE4LCAKLSAgICA0MjQxMSwgMjAyMiwgMCwgMTQwOSwgMTIxOTUsIDQwMDEsIDMxMTIsIDEwODI0LCAxMjA2MzksIDEzOTAsIDAsIDAsIDQyMSwgCi0gICAgNDM1MzYsIDU4NDYsIDEyMDEyMCwgNDEzMCwgMCwgNzU5NSwgNDI1ODgsIDc2MDAsIDAsIDY2MDM1LCAwLCAwLCA2NTg1MSwgCi0gICAgNDI2MDcsIDAsIDAsIDMxNjgsIDAsIDQyMTM0LCAwLCAyMzcwLCAyODQ2LCAwLCAwLCAwLCAxMjAxMzIsIDAsIDE4MzYsIDAsIAotICAgIDAsIDExOTEzNywgMzc0MCwgMCwgNjI5MCwgNjUzNzQsIDEyMDQ1MSwgNjU5MjMsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIAotICAgIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDAsIDAsIAotICAgIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCA5OTk4LCAwLCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCA4Mjc5LCA4Nzc2LCA2NDk1NCwgCi0gICAgNDk3NSwgNzQ4MDksIDAsIDQyNjcsIDAsIDAsIDAsIDAsIDE5NTA0NiwgNjU3MDAsIDY2NTYyLCAwLCA2NDY0NSwgMCwgMCwgCi0gICAgMCwgMTI1ODYsIDAsIDkyNDIsIDAsIDAsIDQ1MjMsIDU4NDIsIDEwNDk1LCAzMTIyLCAwLCA3NzkzLCAwLCA5MzI4LCAwLCAwLCAKLSAgICAxMjYwNCwgMCwgNjYxNSwgMCwgMCwgMzk4NiwgMCwgMCwgODkxMiwgNjQ1NTUsIDAsIDAsIDAsIDk1NDEsIDAsIDAsIAotICAgIDExMjc1LCA4NTQwLCAxMTQ5OCwgMCwgMCwgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDAsIDAsIDAsIAotICAgIDAsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgMCwgMCwgMTYwNiwgMTIwMzQ4LCAxMjAzNTEsIAotICAgIDMwOTMsIDAsIDAsIDAsIDEyMDY0OSwgMCwgMCwgNDMxMiwgNzQwOTEsIDEyMDMzNywgMTIwMzM2LCAxMTkyMywgNDAyMywgCi0gICAgMTIwMzMzLCA1NzYzLCAxMjAzMzUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgNjQ0MDYsIDExODc4NSwgNDQ1NSwgNzQzMjEsIAotICAgIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMCwgMTE5NzMsIDEzMDg5LCA0MjkzLCAxMjAzMjksIDEyMDMyOCwgCi0gICAgNDI3NTgsIDEyMTk2LCA0MjgzNywgMCwgMTE5MzE5LCAwLCAwLCA1ODE3LCAwLCAwLCAzMTIwLCA5Nzk3LCAwLCAwLCAwLCAKLSAgICAxMDM4OSwgMCwgMCwgNDg5NSwgNjUzNTgsIDAsIDQzNTksIDU4NSwgMCwgMzUwOSwgMCwgNDg2LCA0MjkwLCAwLCAwLCAwLCAKLSAgICAwLCA3MDA0LCAwLCA2NTg4MCwgMCwgMTE5MDQ4LCAyMzgwLCAxMTM4MCwgMCwgMCwgMjM3NiwgMCwgMCwgMCwgNTE5NywgCi0gICAgMTI3MDQ2LCAxMjcwNDcsIDEyNzA0OCwgMjM2NiwgMTI3MDUwLCAxMjcwNTEsIDEyNzA1MiwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzQxODgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDAsIDQyMzg0LCAwLCAKLSAgICA0MjI3LCA3NDE1OCwgMCwgMCwgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDAsIDAsIDY0Nzk3LCAwLCAKLSAgICA1ODIwLCAwLCAwLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIDEyMDA2MywgCi0gICAgMCwgMTMxOTIsIDAsIDQxNzk5LCA2NTUzMCwgMTcxMSwgMTI5ODQsIDQzMDM5LCAzMTE0LCA2MjU1LCAwLCAxMTg5MzgsIDAsIAotICAgIDEwODUzLCA5MjYsIDAsIDc0MTg0LCAwLCAxMjAwNTUsIDAsIDQzMTc1LCAwLCA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgCi0gICAgMCwgNDE4MDEsIDExOTA4OCwgMCwgNTIwLCA0MjAwLCAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDAsIDAsIDgzNjAsIAotICAgIDAsIDAsIDMyMSwgNDIyOSwgNjQ1NDMsIDAsIDY1NTYzLCAwLCAwLCAyODYxLCAwLCAxMDA5NSwgMCwgMCwgMCwgMTg2MSwgMCwgCi0gICAgMCwgMCwgMCwgNDMwNDEsIDAsIDAsIDAsIDM4NTksIDEyMTgxLCA0MTY2MCwgODIwOSwgMCwgMTIwNjc4LCAxMjk3MywgMCwgCi0gICAgNzQ3NTcsIDAsIDQxNjU4LCAwLCAwLCA1NzYwLCAwLCA3NDMsIDQ0MTQsIDEyMDc2NiwgMCwgNDI2MzIsIDkxNzk3MywgCi0gICAgNjUxNjEsIDczODk2LCAwLCAwLCAxNDA1LCAxMTkwNjMsIDQzMjIwLCA0MzM0MSwgMCwgMTk5MTksIDAsIDY0NTMyLCAKLSAgICA2NTM2NywgMCwgMCwgMCwgMzUxMywgMCwgMTE4ODgzLCA0MzM0MiwgMTE5MDY0LCA2NTUyOSwgNjUzNjQsIDAsIDAsIDY0ODUsIAotICAgIDEzOTcsIDAsIDY1MzY1LCAwLCAwLCAwLCAwLCAwLCA3NDcxLCAxMjA3OSwgMCwgMTI2ODIsIDQzMjg3LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDk5LCAxMDQ5MCwgMCwgMTA1MDEsIDY1MTgxLCA3NDQ2MywgMCwgNDY0LCA0MTYyNCwgMTE5NTk0LCAwLCAwLCAKLSAgICAxMzQ2LCAwLCA5MTc2MzEsIDY0NzI0LCA2NDg5NywgNDIzLCAxODE4LCA2NTE0NCwgMCwgODI3MiwgMCwgMCwgNDIxOCwgCi0gICAgMzA4NywgNjQ5NjAsIDAsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgMCwgNzQzNTksIDEyNjI2LCA5MTA2LCAwLCAKLSAgICA0MjY0MiwgMCwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAwLCAwLCAyNjUsIDQxNzk1LCA2NDY2NiwgMCwgNDM1MzAsIDI3NTIsIAotICAgIDAsIDAsIDAsIDU5LCAwLCAwLCAwLCAwLCAwLCA0MTgxMCwgMCwgNzAxMCwgMCwgNDE4MDksIDQxNDk1LCAxMTkzNjQsIDAsIAotICAgIDQyMjUyLCAwLCA4MDA5LCAzMzA1LCA0MzAzMywgNTExLCAxMTkzMjAsIDY2MjU1LCAxMzEyNywgMTIwMDY3LCAwLCAwLCAwLCAKLSAgICA5MTc5NzcsIDY1OTE1LCAxNDAwLCA0MTgxMiwgMTA2ODUsIDE5NDg3MCwgNDEyMTEsIDEwMzg3LCA0NDUzLCA0MzI3NiwgCi0gICAgOTE3NzgzLCAxMzE1OSwgMCwgNjQ4MSwgNDEyMTMsIDAsIDAsIDAsIDAsIDQxOTgzLCA3NDE5OCwgNjYxNywgOTExNiwgMCwgCi0gICAgMCwgNDYyLCA2ODExMCwgMTA0OTMsIDAsIDgxMjksIDAsIDAsIDc0NDcxLCA2NjQ0LCAxMTY1OCwgMCwgMCwgMzQ1MiwgCi0gICAgMTE5MDYsIDk1ODEsIDEzODUsIDMwOTgsIDAsIDExOTAxMywgNDMzNDAsIDAsIDQxMDMzLCA2NDkzLCA0MjYyNiwgMCwgMCwgCi0gICAgMTE0MjYsIDAsIDE2ODEsIDExODc4OSwgMTIwNCwgMzc1NSwgNjQ2NjEsIDcyMzUsIDEwMTcwLCAzOTY2LCA4OTExLCAwLCAKLSAgICA0MTg0MSwgNDMzMzgsIDAsIDAsIDU3MjYsIDY0OTE1LCA0MjE3NSwgMCwgMCwgNDE0OTcsIDY1MDQ0LCAwLCAyODUxLCAKLSAgICA0MzAxNywgMCwgMCwgNDM3MywgMCwgMCwgOTU4NywgMTc4OSwgNjY3MSwgMCwgMzEwMCwgMCwgNjUzNjAsIDAsIDAsIDAsIAotICAgIDY0OTIyLCAwLCA4MTkwLCAxMjA4MywgMCwgMCwgNjUwNiwgNjQzMTIsIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCAwLCAwLCAKLSAgICAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgODk5MCwgMjg0OCwgCi0gICAgMCwgMCwgMCwgMjQ5LCAwLCAwLCAwLCAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCA2ODE3OCwgOTk1LCAwLCAwLCAKLSAgICA2NDgyNiwgMCwgOTE3Nzk4LCAwLCAwLCAxOTk0NSwgODA5MSwgNTU4LCAwLCAxMjI3MywgMCwgMCwgMTIxMTIsIDAsIDAsIDAsIAotICAgIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIDEyOTEzLCA2NTQ0NSwgMCwgNjQ4OTEsIDAsIAotICAgIDc3MjUsIDAsIDAsIDAsIDg2MjQsIDAsIDEyNDQ2LCA0MzI5NSwgMCwgNDE4OTQsIDAsIDYyNzcsIDQxNjcyLCA0MTg5MywgCi0gICAgMTAwMTAsIDAsIDM1NDAsIDAsIDgzNSwgMCwgMCwgMTE5ODY4LCA3NDQwOCwgMCwgNzM5NTksIDU0MjYsIDQyNTgsIDAsIDAsIAotICAgIDU0MjQsIDAsIDgyODMsIDAsIDU0MzQsIDAsIDAsIDE5OTE3LCAxMTQwOCwgMCwgMTE5NDcsIDAsIDE0MDQsIDMwOTUsIAotICAgIDExNDMyLCAwLCAzNDY0LCA2NDg2LCA0ODE5LCAwLCAwLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgMCwgMCwgMCwgCi0gICAgNDMxLCAwLCAwLCAwLCAwLCA2ODE2NywgMCwgMTMwOTYsIDAsIDAsIDAsIDk1MTYsIDAsIDUyNjgsIDAsIDAsIDAsIDQ0NTAsIAotICAgIDEyMDcyMywgMTE1NDcsIDY0MzU4LCAwLCAzNTYsIDM0NzcsIDIyNywgMTA0ODgsIDAsIDM4MiwgMTE0MTgsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDY0ODQsIDI1NDEsIDY2MDM5LCAwLCAwLCAwLCAzNTQ5LCAwLCA5MTEwLCAxMTk2NjUsIDI3NDMsIDAsIAotICAgIDQzMjkwLCAxOTQ4MTIsIDkwOTcsIDAsIDQzMDE1LCA4NzgyLCAwLCA3NzYsIDI1MjQsIDAsIDg1NzMsIDAsIDAsIDAsIDAsIAotICAgIDEyMDU3MiwgNjQ5NDQsIDg5NTIsIDM4NTYsIDExODgxOCwgMCwgNTg3MiwgNjQ5NSwgMCwgMCwgMCwgMCwgMCwgMTIwNzMzLCAKLSAgICAxMjg0OSwgMzk1MywgMTg5NywgMCwgMCwgMTE5OTQsIDQzMzksIDc0NTU2LCAwLCA2Nzg0MywgMCwgMCwgMCwgNzQyNTEsIDAsIAotICAgIDUyMjgsIDAsIDc4NjgsIDQzMTg0LCAwLCAwLCA3Mzk4NiwgMCwgMCwgNDMwMjIsIDAsIDExNjIsIDAsIDI2NzEsIDAsIDAsIAotICAgIDAsIDAsIDExODg2NSwgNDU1MywgNzM4MTEsIDAsIDE5NTAwNSwgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMCwgNDU2NywgCi0gICAgNDE4OTEsIDAsIDAsIDExOTA1NiwgNDgyMCwgNjUyMzksIDE5NDY2MiwgMCwgMCwgNDMwNDIsIDExOTIxMiwgMTM3NywgMCwgCi0gICAgNDg5NywgNDI4MjEsIDkyNTAsIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAxMTMzMSwgNjE0NywgMCwgNDMyODIsIDg4MzMsIAotICAgIDAsIDAsIDY1MDQsIDE5NDY2NywgMTI2OTc5LCAxMDcxOSwgMCwgMTg5OCwgMTQxMywgNDI0NDMsIDAsIDgwMiwgMTIxNDEsIAotICAgIDAsIDAsIDY2NDgsIDEwNjcxLCAyNTI4LCAwLCA2NDc4OSwgOTE2OSwgODM4LCAxMjcwOTIsIDEyMDY5NywgODQ0LCA1MDE0LCAKLSAgICAwLCAyNTYsIDAsIDk5OTAsIDAsIDQzMzAxLCAwLCA3NTQyLCA2NTQ2NCwgOTcyNiwgMCwgNjQ4OSwgMTAwNDgsIDc0MzI2LCAKLSAgICAwLCA2NjU3MywgMCwgMCwgMCwgMTE3NjEsIDE5NDY1NSwgMCwgNDEwOTQsIDAsIDAsIDAsIDAsIDAsIDYxOTYsIDY5NDUsIAotICAgIDE5NDYyOCwgMTk0ODkwLCAxOTQ2MzEsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgMCwgMCwgMCwgNDEwOTgsIDAsIAotICAgIDQxMDkzLCAwLCA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgMCwgMTY2MCwgNzM5MTYsIDAsIAotICAgIDExODkwNSwgNzQzNjIsIDAsIDAsIDE5NDY1MSwgMCwgMCwgMzM5NCwgMCwgMTIwNjY4LCAwLCAwLCAwLCA2NjIxOSwgMCwgCi0gICAgNDMyODQsIDAsIDc4MTcsIDE4NDEsIDExMDU1LCAxMjA1MzMsIDE5NDk3OSwgMTk0OTgyLCAxNjY5LCAxMDc3NiwgMTk0OTgxLCAKLSAgICA3NzAxLCAxOTQ5ODAsIDAsIDE5NDk5NSwgMTczMiwgNDAzMCwgMCwgMzk2MywgNjY2MTEsIDAsIDQxNzY4LCA2NDkxLCAwLCAKLSAgICA2NTMyNCwgOTE0LCA2NTMyMywgODA3MSwgMzUzOCwgMCwgMCwgMCwgMCwgNzQzNjcsIDc2MTQsIDAsIDExODE5LCAwLCAKLSAgICAxMjAwOSwgMTIzOTksIDAsIDY3ODUyLCA2NTUzNywgMCwgMTA4NDEsIDAsIDUzMDEsIDAsIDAsIDU3MzQsIDg5NjAsIDAsIDAsIAotICAgIDY1MzE3LCAwLCAwLCAwLCAwLCAxMjMwNCwgMCwgMCwgNjUzMTUsIDAsIDAsIDAsIDAsIDAsIDExOTYyMSwgMCwgNzQ1MzYsIAotICAgIDEyNDQ3LCA2NDQ4NiwgMCwgMCwgMCwgMCwgMCwgMCwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgMCwgMTIwNTIwLCAwLCAKLSAgICAxOTQ4NzgsIDAsIDAsIDAsIDg2MjksIDAsIDQzMTY4LCA0MTg3MiwgMCwgNDQ5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNjQ3MzAsIDAsIDY2NzE0LCAwLCAwLCAwLCA2NTU5NiwgMCwgMTE0MTYsIDQyODAsIDExOTAxOCwgODc2NSwgMTI3ODQsIAotICAgIDc3OTIsIDEzOTMsIDAsIDY3ODcxLCA3NDM4NiwgMCwgODIzMywgNDM1NzIsIDAsIDY2ODMsIDAsIDM0NDIsIDEyMTQ0LCAKLSAgICAyODQxLCAxMjU0MywgMCwgMTQ3MywgNDI4MjAsIDY0MzI5LCA5MTc3NzIsIDAsIDAsIDY0ODgsIDM1NywgMTA0OCwgNDExMDAsIAotICAgIDAsIDQxMTA0LCAwLCA0MTA5OSwgMTA1NCwgMTE5MDY1LCAxMDQwLCA2NTQ1MCwgMCwgNDQzNCwgMTA2OSwgMCwgMCwgCi0gICAgNzQyMzEsIDkxNzc2NSwgMCwgMCwgMCwgOTY5MywgNDE5NDMsIDAsIDQxOTMxLCA0MTc1OSwgMTI3NTcsIDQzNTMsIDAsIAotICAgIDEwNTksIDk3OTAsIDg5OTUsIDAsIDAsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgMCwgMCwgNzQ4MzAsIAotICAgIDAsIDEyNzQzLCAwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIDEyMjA3LCAxMTk2MTksIDEwOTg2LCAKLSAgICA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMCwgMCwgNDMwMjAsIDAsIDM5NTUsIDc0MjU0LCAwLCAwLCAKLSAgICA5MTc4NjEsIDAsIDEyMDczNSwgOTc3MCwgOTI0NiwgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIAotICAgIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCAxOTQ5MTIsIDE5NDkyNywgNDg1NywgMCwgNDQyOCwgMTI3OTQsIDczNzU1LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1NzQ3LCAxOTQ3MjAsIDAsIDc5NzgsIDQxMDkyLCA3NDU3MSwgMCwgMTE5MjQsIDc0MjA1LCAKLSAgICA0MjE0NCwgNjUwMTUsIDAsIDU2MywgMCwgMCwgMTI3OTgsIDExMjcxLCA1NywgMCwgMCwgMCwgMTE5MDQzLCAwLCAwLCAKLSAgICA0MzEzNywgNjk0LCAwLCA5ODc2LCAwLCAxMTkxNjgsIDAsIDAsIDY0NTM3LCAwLCAyNzcsIDc0Mzg1LCA3MjI5LCA3NDQ1OSwgCi0gICAgMCwgMCwgNjQ2MzQsIDY0ODExLCA4NzU3LCAxMTkwODcsIDAsIDE1NzQsIDE5NDYzMywgMCwgMjUyNSwgNDg1MiwgNTc0OSwgCi0gICAgMCwgMTMwMjcsIDQyODI0LCAxMjA1NzQsIDEwMzksIDk4MDEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgMCwgCi0gICAgNzQwMTUsIDAsIDQxODUzLCA0ODU4LCAwLCAwLCA0MzYsIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIDgwNTEsIDAsIAotICAgIDExOTYwOSwgMCwgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIDAsIDczOTA2LCAwLCAKLSAgICAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgNDIxNTcsIDAsIDMxNTcsIDE5NDkxOCwgMCwgMCwgMzUwNCwgCi0gICAgMTE5MTc4LCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIDEwMjI2LCA2NTE0MiwgMCwgMzU5NCwgNDI0MjQsIDAsIDQwLCAKLSAgICAxMjY1NywgMCwgMCwgMzg2LCAwLCA4ODM0LCAwLCAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgCi0gICAgNzQ1MDQsIDAsIDc0MzE2LCAwLCAwLCA0MzA0LCA3NDUwMywgODE2MCwgMCwgMTk0NzUzLCAwLCAwLCAwLCAxMzQ4LCAwLCAwLCAKLSAgICAwLCAxMzMwMywgMCwgMCwgMTk0NzU1LCA3NTk5LCAxMjc4LCAwLCAxMzI2OSwgMCwgMCwgNzQzODcsIDAsIDAsIDc0NDkyLCAKLSAgICA2MDk3LCA3NTY4LCA4NzgwLCA0OTgyLCAwLCA3NDUwMSwgMTk0NzYzLCAwLCAxOTQ3NjIsIDI2NzIsIDM3MzUsIDE5NDczNSwgCi0gICAgMTMxMzgsIDQyMjY2LCA5NDg0LCAxMDcyNCwgNDEyMDIsIDExOTAyNCwgMCwgMCwgMCwgOTQ4NywgMCwgMTk0NzY1LCAzODQyLCAKLSAgICAxOTUwMzQsIDE5NTA1NiwgMTI0NDIsIDYxOTMsIDk3OTEsIDAsIDAsIDQyNTE2LCA3MjI4LCA3NTU5LCA3NDgwMywgCi0gICAgMTk0Njg5LCAxOTQ4NTEsIDExMzk5LCAxMTkyMTksIDE5NDg1NiwgMTk0ODU1LCAwLCAxOTQ4NTcsIDM2MDQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQyNTA3LCAxOTYyLCAxOTQ4NjEsIDE5NDY5NiwgNDI1MDUsIDExNjYwLCAwLCAwLCAwLCA2OTk1LCA3NDE3MywgCi0gICAgNTQzNywgNzQxNzQsIDEwNjY5LCA4NzAyLCA3OTY0LCAxOTQ3MDYsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIAotICAgIDE5NDcwMSwgMTk0ODQ3LCAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDAsIDkyMjYsIDAsIDE5NTA3MCwgNjQ3MiwgCi0gICAgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCAwLCAwLCAwLCAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCAKLSAgICA2NTg1LCAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIDAsIDE5NDg2NiwgNzQ0MjEsIDExMzgyLCAKLSAgICAwLCAwLCAwLCAwLCAxOTQ4MzMsIDE5NDgzMiwgNjY4MSwgMTk0ODM0LCAxMjY5MywgMTk0ODM2LCAxOTQ4MzksIDE5NDgzOCwgCi0gICAgMTk0ODQxLCAxOTQ4NDAsIDY1NDQyLCAxMTk2MTAsIDExODg4NywgMTIxNjYsIDc0NDE1LCA2NjI0OCwgMTk0ODE2LCAwLCAKLSAgICAxOTQ4MTgsIDE5NDgxNywgMTk0ODIwLCAxOTQ4MTksIDUyOTcsIDcwNDIsIDEzMjg0LCA2MTEyLCA3OTY4LCAxOTQ4MjUsIAotICAgIDczOTI5LCAxOTQ3MzgsIDE5NDczNiwgNjU3NDYsIDAsIDc0NDA5LCA3NDM4OSwgMTk0ODI2LCA0MzQyLCA0MjgzOSwgCi0gICAgMTk0ODMxLCAxNjc3LCAwLCAwLCAwLCA5MTc4NTUsIDExMDkxLCAxMTAxMSwgMjcxOSwgMCwgMCwgMCwgNjQ0OTUsIDAsIDAsIAotICAgIDc1ODUsIDY1MTY5LCA0Mjg0NSwgNDMwOCwgOTE3ODU4LCA3NDE3NywgNzUwNSwgNTQzLCA2NDkxNiwgNjQ3MzYsIDAsIDAsIAotICAgIDY2NjcwLCAwLCAxMTg5MjIsIDE5OTExLCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI5OTQsIDAsIDEwODI4LCAwLCA2MjI4LCA0MzA3LCAzNDgyLCAwLCAwLCAwLCAwLCA1MDYsIDc0NTczLCA0MTE5NCwgCi0gICAgNjU3MzUsIDAsIDAsIDQxMTk1LCAwLCA4MTY5LCAwLCA4ODQxLCAwLCA1MTYsIDAsIDQxMTk3LCAxMTkwNTEsIDM0LCAwLCAKLSAgICAxMjAxODYsIDEyMDE4NSwgMTYxMiwgNzQzMzMsIDEyMDE4MiwgMTIwMTgxLCA3NDMwOCwgMTIwMDEsIDEyMDE3OCwgMTAyNDIsIAotICAgIDY0NTY0LCAxMjAxNzksIDEyMDE3NCwgNjU4NCwgNzc0OSwgMTEwMzcsIDAsIDE3NTgsIDAsIDEwNjY3LCAxMDU2MCwgCi0gICAgMTIwMTk3LCAxMjA3NTYsIDE5MzUsIDExNTE3LCAxMjAxOTMsIDEyMDE5NiwgMTIwMTk1LCAxOTMxLCAxMjAxODksIDc0ODM5LCAKLSAgICAxMjAxOTEsIDEyMTcsIDY0NzAyLCAxMjY0MywgODI1LCAwLCAxOTQ5MDUsIDEyMjk0LCAwLCAxOTQ5MDgsIDkxMzgsIAotICAgIDE5NDkxMCwgMTk0OTAyLCAxMjYzMSwgMTk0OTExLCAxMTA4MCwgNzQ1NTQsIDAsIDU1OTEsIDEyMzksIDAsIDExMzEzLCAwLCAKLSAgICAzNDAzLCAwLCAwLCA2NDM2NCwgMCwgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCAwLCAwLCAxOTQ4OTgsIAotICAgIDY3NTg5LCA0MTg1MCwgNjQyOTAsIDM0MzMsIDAsIDEyNjE1LCAxNTk0LCA2NTYwNywgNjkxNCwgNjc2MDMsIDAsIDExOTU2OSwgCi0gICAgNzQ1NjUsIDQxMzUzLCA2NzYwMiwgNjc2MTEsIDQzMzcsIDAsIDE5NDg5NywgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIAotICAgIDE5NDkwMCwgNDI1NzcsIDQxMzkzLCAxMjY2OCwgMTk0OTA0LCAyNDc3LCAwLCAwLCAwLCAwLCA2NzYwNCwgMTk0ODgwLCAwLCAKLSAgICA1NzMsIDE5NDg4MSwgMTk0ODg0LCAxMTQxNywgMTk0ODg2LCAxOTQ4ODUsIDE5NDg4OCwgNjc1OTksIDAsIDE5NDg4OSwgCi0gICAgNjc2MDcsIDExNDgyLCAwLCAwLCAzMzU3LCAwLCAxOTQ4OTEsIDQyMDcsIDEyODgsIDE5NDg5MiwgMTk0ODk1LCAxOTQ4OTQsIAotICAgIDAsIDExNTg5LCA2NjM1NCwgMTk0ODcyLCAwLCAwLCA2NDYwMiwgMTk0NjcwLCAwLCAwLCA0Mjc4OCwgMCwgNjQ0ODAsIAotICAgIDE5NDg3NSwgODQyMywgMzM0OCwgNDQ4LCAxOTQ4NzksIDk3MTcsIDAsIDAsIDk5NywgMCwgMCwgMCwgMCwgMTE0NDAsIAotICAgIDExMzc5LCA0MjAwMCwgMTMxMzksIDAsIDY1MDEzLCAxMjY5OTksIDAsIDczNzk2LCAwLCAwLCAxMjAzNSwgMCwgMjgxOCwgMCwgCi0gICAgMCwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIDEwODczLCAxMjE5NywgMCwgMCwgMCwgMCwgMCwgMTI2OTc3LCAwLCAwLCAKLSAgICAxOTQ4NjUsIDEyNjk4MiwgNzQ1NjMsIDY0ODI4LCAxMTQxOSwgMTk0ODY4LCA3NjYsIDEyNTcsIDAsIDAsIDExMzgxLCAKLSAgICAzMjY1LCA2NjYxNywgMzI3NCwgMCwgMCwgMCwgMCwgMCwgNDE5ODksIDAsIDAsIDAsIDMyNjMsIDAsIDY1NjcyLCAwLCAKLSAgICAzMjcwLCA2NDUzOSwgMTE0ODksIDAsIDAsIDAsIDAsIDk1MDUsIDY1NTE4LCAwLCA3NTYsIDE5NTA1MiwgMCwgMCwgMCwgCi0gICAgNzI2MSwgMCwgMTg2LCAwLCAxMTkxNTYsIDU3NzAsIDEzMTc5LCA2NTgzMCwgMTI2MTIsIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIAotICAgIDAsIDc0MjAzLCA2NDcxOCwgMCwgMCwgMCwgMTE4OTI5LCAwLCAxMTU3OCwgMCwgMTE5Mjk2LCAwLCAwLCAwLCAwLCA3NDU2OCwgCi0gICAgOTI1NCwgMCwgMTc5NCwgMTIwMjE3LCA2NDUyMSwgNTYyNCwgMTIwMjIwLCAxMjAyMjEsIDExOTk1OCwgMTIwMjIzLCAzNjE3LCAKLSAgICA2NjYzNiwgNjQ4ODYsIDEyMDIxMSwgMTIwMjEyLCAxMjAyMTMsIDEyMDIxNCwgMTg3MiwgNjY1MDgsIDEyMDQ2NywgNDEwNzksIAotICAgIDEwNzQ4LCA1NTAyLCAxMTkzMzAsIDQ0NTIsIDAsIDAsIDAsIDQ1MTEsIDAsIDAsIDAsIDExNDI1LCAwLCAwLCAxMjMxLCAwLCAKLSAgICAwLCAwLCA5MDAzLCA4MTkyLCAwLCA1MzA1LCA5NjUzLCAxMDYxNiwgODY5NCwgOTU0NiwgMCwgMCwgMTIwNDc4LCAxMjAyMDAsIAotICAgIDY1MjA1LCAxMjAyMDIsIDY0MDYzLCA5ODc4LCA3NDc4MCwgMTE5NjI2LCAxMjAyMDcsIDY0MDU4LCA4Nzk5LCA0MjEzMSwgMCwgCi0gICAgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgODM3LCAxMDU2NywgMCwgNDMxMDMsIDAsIDAsIDExNDI3LCAyOTAyLCAKLSAgICA2NDA0MywgNjQwNDIsIDY2NDY0LCAxMDc1NiwgMCwgNDI2MDYsIDY0MDQ1LCA2NDA0NCwgMCwgMTAwNzYsIDY0MDQwLCAKLSAgICA2NDAzOSwgMCwgMTAzNCwgMzM5MiwgMCwgNDMwOTEsIDY0MDMzLCA2NDAzMiwgNjU0NjgsIDY0MDM4LCA2NDAzNywgNjQwMzYsIAotICAgIDY0MDM1LCA0MjkxLCAxOTQ5MjgsIDY0MDE1LCA2NDAxNCwgNjQ2ODEsIDE5NDkzMCwgMCwgMTk0OTQ0LCAwLCA0MzA5MCwgMCwgCi0gICAgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgMTE5MTgzLCAKLSAgICAyNTM4LCA2NDAwOSwgMjA0LCAwLCA0ODAyLCA0MTExLCA4MjM5LCA5MDk4LCA0ODA1LCA2NDAwMSwgNjQwNTcsIDc4ODUsIAotICAgIDcyNDcsIDY0MDU0LCAwLCAwLCA0NzY3LCA5MzQzLCA2NDA0OSwgNjQwNDgsIDEyMDAzNCwgMTEzMywgNjQwNTMsIDY0MDUyLCAKLSAgICA2NDA1MSwgNjQwNTAsIDQxMzQwLCAwLCAwLCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAwLCAKLSAgICA0MjUyMCwgMCwgMCwgMCwgMTA3NjAsIDY0MDIzLCA2NDAyMiwgNjQwMjEsIDY1ODIsIDAsIDAsIDY0MDI1LCA5MTY3LCAKLSAgICA0MjE1MSwgMCwgMCwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCAwLCAxMTg5MTUsIAotICAgIDAsIDAsIDAsIDAsIDEyMDUzOSwgMCwgNDE0MTEsIDEzMDk0LCAwLCA3NTMyLCA0MTQxNCwgMCwgMzE3OSwgMCwgNjQ3NjksIAotICAgIDAsIDAsIDExNDYxLCA3NDQ1NCwgMTA3NTEsIDkwNTEsIDAsIDAsIDEwNTM1LCAwLCAwLCAwLCAyMDA4LCA2NDAzMSwgCi0gICAgNjQwMzAsIDI5NCwgNDE4NzQsIDAsIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgCi0gICAgNDE3ODgsIDE5NDg0NCwgMCwgMTE4Nzk1LCAwLCAxMTk4ODcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgCi0gICAgMTE5ODg5LCAxMTQzMywgMTE5ODk1LCAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAwLCAxMjkxNSwgMCwgMzI5NywgOTY5OSwgCi0gICAgMCwgMTEzNSwgMCwgMCwgMCwgMTk5NSwgNzkyNywgMCwgMCwgMjU1MiwgNDE1NDYsIDYwLCAwLCA4NjQ5LCA0MTU0OSwgMCwgCi0gICAgMCwgMCwgNjY4MiwgMCwgMCwgNjQ3MTAsIDQxNTQ3LCAwLCAyMDEzLCAwLCAxMTk4OTksIDExOTkwMCwgMTE5ODk3LCAKLSAgICAxMTk4OTgsIDEyODMyLCAxMTk5MDQsIDgwODEsIDgzNjIsIDM1MzcsIDExOTkwOCwgOTEzNywgMTE5OTA2LCA4OTk5LCAwLCAKLSAgICAxMTk5MDksIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIDIwMDIsIDIwMDAsIDEyMDE3NSwgNTM3LCAwLCAKLSAgICA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgMCwgOTYyOCwgMCwgMTIwODEsIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAKLSAgICAwLCAwLCAxMjAyMDEsIDAsIDAsIDAsIDMwNTksIDAsIDEyMDIwNCwgMTE5OTUzLCAxMjAyMDUsIDAsIDAsIDAsIDQxMDAsIAotICAgIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgMzU5MiwgMTAwNzgsIDAsIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMCwgCi0gICAgMTA3NDIsIDAsIDAsIDE5OTQsIDkyODEsIDMyOTYsIDEyODY1LCAxOTk3LCAxODk1LCAKKyAgICA5MjcxNiwgOTI1OTgsIDExOTk1MCwgMCwgOTA1OCwgMzY2LCAwLCA5ODkyLCA1OTY5LCAxMTc1NCwgMTA4NDgsIDQ1NzAsIAorICAgIDY1MzAxLCA0NDAxMywgNDI1NSwgMCwgMTAxMDIsIDQxMTg5LCA0MDAzLCA0MTAyNiwgNjgxMDksIDEzMjkzLCA0MTE5MiwgCisgICAgNjk2MzUsIDAsIDQyMjUxLCAwLCA0MjUzNCwgNjUxNzksIDExMjg3LCA2MTI4LCAwLCAxMTAzNCwgMTA5MjMsIDY0NDIzLCAwLCAKKyAgICA2NTUwNiwgMCwgNjU4NjEsIDc0MDgzLCA5MjYwMCwgOTkzMiwgMCwgOTI0MjMsIDExOTk1NSwgMCwgOTgxNywgMCwgCisgICAgMTIwMTQwLCAwLCAxMjExNywgNjY1ODYsIDQxODMsIDEwNTQwLCA2NjI1MCwgOTA2MywgMTI3MDQ1LCAwLCAxMTk5NTQsIDAsIAorICAgIDEyODk3LCAzNzkyLCAyMDExLCAwLCA2MDY1LCA0MzE2MCwgMCwgMTk0NzE1LCA4NjkyLCA0MTE4NiwgNDE4MTYsIDQxMDIzLCAKKyAgICA0MTgxOCwgNDExODcsIDExNjU5LCA3OTIyLCAxMjYxNCwgMjAwNSwgODUyMywgNzgwMDIsIDAsIDc1MTMsIDE4NjMsIDQ3MTAsIAorICAgIDAsIDU5NTYsIDc2MjEsIDc4MDA2LCA5MjYyNCwgNDcwNSwgNzE2LCA3ODAwNCwgMCwgNDcwNCwgMTIwMDQwLCAxMjAyNzAsIAorICAgIDQyMjQxLCAxNjEsIDQzOTc3LCA3NDU0NiwgNjYyMTQsIDQ3MDYsIDAsIDAsIDQyNjcyLCA0NzA5LCAxMDY4MCwgMCwgCisgICAgNDMyOTMsIDExOTk0NCwgMCwgMTE5MTY0LCAxMjAzMjgsIDkyNDY3LCAwLCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgCisgICAgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCAwLCA4NTA2LCAwLCAwLCAxMjY5OTYsIDEwMDUsIDkzNywgNzgyMTYsIDQ3MzQsIAorICAgIDI4NzAsIDAsIDc4MjE4LCAwLCA3NDYzLCA0NzI5LCAwLCAyMzUsIDEzODQsIDQ3MjgsIDAsIDEyMDQyMCwgOTI0OTAsIAorICAgIDEyMDMzMSwgODEwOSwgNDMxMDUsIDAsIDQ3MzAsIDQ0NywgMTMxODYsIDE1MTMsIDQ3MzMsIDEyMDQxNSwgMCwgMCwgCisgICAgNDI1MjcsIDEyOTExLCA0MzQyNywgMTM4MywgODU2NSwgMjQ2OSwgMTIwMDI0LCA2NjkwLCA2MTU2LCA2ODExNywgNDM0MzksIAorICAgIDc5OTMsIDQyODgsIDEyMDQxNiwgMjY3NCwgMTMyMzgsIDExOTIyLCAwLCAxMjAzMzAsIDM1MTAsIDEzMjM0LCAwLCAKKyAgICAxMjA0MDcsIDU2MDUsIDQyMDk1LCAxMTM2NCwgMCwgMTM4MCwgNjU2MTcsIDEyMDI1MywgMTIwMjYxLCAxMzE5NiwgMTMxOTcsIAorICAgIDEyMDMwOSwgMTIwNjgyLCA5NDk1LCAxMTkzNDYsIDAsIDU5NTksIDAsIDczOTc2LCAxMjAzMDUsIDQzMzcxLCA2OTQxLCAKKyAgICAxMTkzNDksIDEzMjA1LCAxMzIxMSwgNTgwMSwgMTI3NjksIDY1OTA1LCA0MTY5NywgMTI4MywgMTIwMzAyLCA0Nzc5LCAwLCAKKyAgICAzNzE5LCA0MDA2LCAwLCAxOTk1NywgMTI4NzczLCAyMDIxLCAxMTkzMzIsIDEyMDY5OSwgMTE5MTUwLCA0MzAyOCwgNjU0OTMsIAorICAgIDQxODM4LCAzODc1LCA1OTYyLCA2NDM0MSwgOTI2MTYsIDk4MTQsIDQzNDU3LCA1ODI3LCAzMzE0LCA3Nzg3LCA3ODIzNCwgCisgICAgNjU0OTQsIDY4MTUzLCAwLCAwLCAxMjA2MzYsIDY0NTMxLCAxMjA2OTIsIDE5NDYyNiwgMCwgMCwgNjYzMTYsIDY1NDY3LCAKKyAgICA1NzcxLCA0MTI5OCwgMCwgOTc0MiwgNTIxLCAwLCAxMDgwMCwgMCwgODQwNCwgMTk0NjI1LCA0ODMsIDcwOTYsIDcwODksIAorICAgIDY2MzIzLCA5MjgsIDAsIDAsIDExOTAxOCwgMTA1OTksIDExNTg2LCAzOTg5LCAxMDk3MSwgMCwgNjU3ODIsIDk4NDEsIAorICAgIDg4NDMsIDEyMTQ1LCA5MjQ3MCwgMTAwNzQsIDc4NTQ4LCAwLCAzNzY5LCAwLCAwLCAwLCAwLCA5NTczLCAwLCA2NTI5MCwgCisgICAgODg0OSwgMCwgNjU4NTUsIDY1MTEyLCAxNzk2LCAxMjA1MDUsIDAsIDY5NjY1LCA4MTY0LCA0MTMwMSwgMzUwMiwgMCwgCisgICAgNzM4OCwgMTA2MjEsIDczODM4LCA3ODU1MywgNTgyNSwgMTMwMDcsIDY4MTY1LCAwLCAxMjA0NTcsIDEyNjYxLCA3NjA4LCAKKyAgICAxMDM1NCwgMTA0MTgsIDQyNDExLCAyMDIyLCAwLCAxNDA5LCAxMjE5NSwgNDAwMSwgMzExMiwgMTA4MjQsIDEyMDYzOSwgCisgICAgMTM5MCwgMCwgMCwgNDIxLCA0MzUzNiwgNTg0NiwgMTIwMTIwLCA0MTMwLCAxMjc3NzUsIDc1OTUsIDQyNTg4LCA3NjAwLCAKKyAgICAxMjAxMjEsIDY2MDM1LCAwLCAwLCA2NTg1MSwgNDI2MDcsIDEyODE5MCwgOTI0MDMsIDMxNjgsIDAsIDQyMTM0LCAwLCAKKyAgICAyMzcwLCAyODQ2LCA5MjYwNSwgMCwgMCwgMTIwMTMyLCAwLCAxODM2LCAwLCAwLCA5MjU1OCwgMzc0MCwgOTI1NDcsIDYyOTAsIAorICAgIDY1Mzc0LCAxMjA0NTEsIDIzOTAsIDM5NDQsIDY2NjI4LCAxMjA0MzQsIDAsIDYxMzUsIDMxMTgsIDc0MjY1LCAxMTkwOTMsIAorICAgIDEyMDQ0NiwgMCwgMCwgODEyNywgODk3NSwgNjQ3MzksIDc5NDMsIDAsIDAsIDEwNjE4LCAyNTg0LCAwLCAwLCAwLCA5OTk4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCA4Mjc5LCA4Nzc2LCA2NDk1NCwgNDk3NSwgNzQ4MDksIDEyMDEzMCwgNDI2NywgCisgICAgMTYzMSwgNDIyMDYsIDEyNzg2NiwgMCwgMTk1MDQ2LCA2NTcwMCwgNjY1NjIsIDAsIDY0NjQ1LCAwLCAwLCAwLCAxMjU4NiwgCisgICAgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgMCwgNzc5MywgNzgyNzUsIDkzMjgsIDAsIAorICAgIDc4MzkzLCAxMjYwNCwgMCwgNjYxNSwgNjc2NTAsIDkyMzQ0LCAzOTg2LCA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIAorICAgIDAsIDAsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgMTE0OTgsIDAsIDAsIDQxMDQwLCAyNDU5LCAwLCAxMzA2MCwgCisgICAgNDEwNDEsIDc0NDEzLCAwLCAwLCAwLCA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCAwLCAKKyAgICAwLCAxNjA2LCAxMjAzNDgsIDEyMDM1MSwgMzA5MywgNjg0MzYsIDAsIDAsIDEyMDY0OSwgMCwgMCwgNDMxMiwgNzQwOTEsIAorICAgIDEyMDMzNywgMTIwMzM2LCAxMTkyMywgNDAyMywgMTIwMzMzLCA1NzYzLCAxMjAzMzUsIDQ4MjcsIDEwODk0LCAxMjgxMCwgCisgICAgNjQ0MDYsIDExODc4NSwgNDQ1NSwgNzQzMjEsIDQzMywgMTE5NjIwLCA2NjY2MCwgMjQ5OSwgMCwgMCwgMCwgMTE5NzMsIAorICAgIDEzMDg5LCA0MjkzLCAxMjAzMjksIDQyMjI0LCA0Mjc1OCwgMTIxOTYsIDQyODM3LCA0MjIyNiwgMTE5MzE5LCAwLCAKKyAgICAxMTkxMjYsIDU4MTcsIDEyNzgwNiwgNTUyNzcsIDMxMjAsIDk3OTcsIDAsIDAsIDAsIDEwMzg5LCAwLCAwLCA0ODk1LCAKKyAgICA2NTM1OCwgMCwgNDM1OSwgNTg1LCAyMzgzLCAzNTA5LCAxOTQ5MjAsIDQ4NiwgNDI5MCwgNTc1OCwgMTI3NTQ2LCAwLCAwLCAKKyAgICA3MDA0LCAwLCA2NTg4MCwgMTI3ODg2LCAxMTkwNDgsIDIzODAsIDExMzgwLCAwLCAwLCAyMzc2LCAwLCAxMTkzMjAsIDAsIAorICAgIDUxOTcsIDEyNzA0NiwgMTI3MDQ3LCAxMjcwNDgsIDIzNjYsIDEyNzA1MCwgMTI3MDUxLCAxMjA1NTQsIDEyMDA0NSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNzQxODgsIDEyMDI0MSwgMCwgMCwgMTIwMDQ3LCAxMjg1NzUsIDAsIDAsIDEyMDA0OSwgMCwgCisgICAgMTg0NywgMCwgMTAzMzksIDAsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIDQzMDMyLCAwLCA0MjM2NSwgMCwgCisgICAgMTI2NzEsIDExMzg0LCAwLCAwLCAwLCA2NDc5NywgMCwgNTgyMCwgMCwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgCisgICAgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIDEyMDA2MywgMCwgNzM3NywgMTI3ODY3LCA0MTc5OSwgNjU1MzAsIAorICAgIDE3MTEsIDEyOTg0LCA0MzAzOSwgMzExNCwgNjI1NSwgMCwgMTE4OTM4LCAwLCAxMDg1MywgOTI2LCAwLCA3NDE4NCwgMCwgCisgICAgMTIwMDU1LCAwLCA0MzE3NSwgMCwgNDMwMzcsIDQxNzk4LCA0MTAzNSwgMTE1ODMsIDEyNzc2OSwgNDE4MDEsIDExOTA4OCwgCisgICAgMCwgNTIwLCA0MjAwLCAxMjY5OSwgODMzMSwgMCwgMzA5MSwgNDEwMzQsIDEyNzM1MywgMCwgODM2MCwgMCwgNzgwNDQsIAorICAgIDMyMSwgNDIyOSwgNjQ1NDMsIDkxNzk0NiwgNjU1NjMsIDAsIDkxNzk3NCwgMjg2MSwgNDM3OTMsIDEwMDk1LCAwLCA5MTk1LCAKKyAgICA5MjM4NiwgMTg2MSwgMCwgNzM3MzMsIDAsIDAsIDQzMDQxLCAwLCA0Mzc5NCwgMTI4NTMwLCAzODU5LCAxMjE4MSwgNDE2NjAsIAorICAgIDgyMDksIDAsIDczODY3LCAxMjk3MywgMCwgNzQ3NTcsIDEyNzUxNCwgNDE2NTgsIDAsIDAsIDU3NjAsIDAsIDc0MywgNDQxNCwgCisgICAgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCA2NTE2MSwgNzM4OTYsIDEyODU4OSwgMCwgMTQwNSwgMTE5MDYzLCA0MzIyMCwgCisgICAgNDMzNDEsIDAsIDE5OTE5LCAwLCA2NDUzMiwgNjUzNjcsIDQzNzEwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIDQzMzQyLCAKKyAgICAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMTI4MTk3LCAwLCA2NDg1LCAxMzk3LCAwLCA0MTk4NiwgOTI2NzgsIDAsIDAsIAorICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgMCwgMTI2ODIsIDQzMjg3LCA5MjMxNywgMCwgMCwgMCwgMCwgMCwgMTA5OSwgCisgICAgMTA0OTAsIDAsIDEwNTAxLCA2NTE4MSwgNzQ0NjMsIDAsIDQ2NCwgNDE2MjQsIDY1MjgzLCA2NzY2MywgNzgyMjIsIDEzNDYsIAorICAgIDAsIDkxNzYzMSwgNjQ1NzMsIDY0ODk3LCA0MjMsIDE4MTgsIDY1MTQ0LCAwLCA4MjcyLCAxMjc4MTIsIDE5OTExLCA0MjE4LCAKKyAgICAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDAsIDc0MzU5LCAxMjYyNiwgOTEwNiwgMCwgCisgICAgNDI2NDIsIDEyMDIzMCwgNjQ3NTAsIDkzOTAsIDAsIDQxNzk3LCAwLCAwLCAyNjUsIDQxNzk1LCA2NDY2NiwgMCwgNDM1MzAsIAorICAgIDI3NTIsIDAsIDAsIDAsIDU5LCAwLCAwLCAwLCA5MjM3MSwgNzc4NzMsIDQxODEwLCAwLCA3MDEwLCAwLCA0MTgwOSwgCisgICAgNDE0OTUsIDExOTM2NCwgMCwgNDIyNTIsIDQyMjEzLCA4MDA5LCAzMzA1LCA0MzAzMywgNTExLCA5MjcwMCwgNjYyNTUsIAorICAgIDEzMTI3LCAxMjAwNjcsIDAsIDAsIDAsIDkxNzk3NywgNjU5MTUsIDE0MDAsIDQxODEyLCAxMDY4NSwgMTk0ODcwLCAyMTAzLCAKKyAgICAxMDM4NywgNDQ1MywgNDMyNzYsIDkxNzc4MywgMTMxNTksIDAsIDY0ODEsIDQxMjEzLCAwLCAwLCAwLCAwLCA0MTk4MywgCisgICAgNzQxOTgsIDY2MTcsIDkxMTYsIDExOTY1NCwgMCwgNDYyLCA2ODExMCwgMTA0OTMsIDAsIDgxMjksIDAsIDAsIDc0NDcxLCAKKyAgICA2NjQ0LCAxMTY1OCwgMCwgMTI4MjQ1LCAzNDUyLCAxMTkwNiwgOTU4MSwgMTM4NSwgMzA5OCwgMCwgMTE5MDEzLCA0MzM0MCwgCisgICAgMCwgNDEwMzMsIDY0OTMsIDQyNjI2LCAwLCAwLCAxMTQyNiwgNzc4ODcsIDE2ODEsIDExODc4OSwgMTIwNCwgMzc1NSwgCisgICAgNjQ2NjEsIDcyMzUsIDEwMTcwLCAzOTY2LCA4OTExLCAwLCA0MTg0MSwgNDMzMzgsIDAsIDAsIDU3MjYsIDY0OTE1LCAKKyAgICA0MjE3NSwgMCwgMCwgNDE0OTcsIDY1MDQ0LCAxMjAxMDksIDI4NTEsIDQzMDE3LCAwLCAwLCA0MzczLCA3ODA1OCwgMCwgCisgICAgOTU4NywgMTc4OSwgNjY3MSwgMTI4ODQwLCAzMTAwLCAwLCA2NTM2MCwgMCwgOTIzNjUsIDAsIDY0OTIyLCAwLCA4MTkwLCAKKyAgICAxMjA4MywgMCwgMCwgNjUwNiwgNjQzMTIsIDc0Mzc0LCAyMzY4LCAwLCA0NDE5LCAwLCAxMTkxMjUsIDM0MzksIDE4MjUsIAorICAgIDExOTIsIDEyMDEwNiwgODg5MSwgMzA4MCwgMTIwMjI4LCAyMzQ3LCA1NDMwLCAwLCA4OTkwLCAyODQ4LCAwLCAxMjgyMjMsIAorICAgIDkyNTI4LCAyNDksIDAsIDAsIDAsIDEyMDY1OCwgMCwgMCwgODg4MywgOTE3ODAyLCA3MjgsIDY4MTc4LCA5OTUsIDAsIDAsIAorICAgIDY0ODI2LCAwLCA5MTc3OTgsIDEyODM0OCwgMCwgMTk5NDUsIDgwOTEsIDU1OCwgMCwgMTIyNzMsIDE5NDgxNCwgMCwgCisgICAgMTIxMTIsIDAsIDAsIDAsIDc0NDE5LCAxMjMzNSwgMTIwMTA0LCA5MTc3OTUsIDM0NDMsIDMxMjksIDAsIDIxMDIsIDY1NDQ1LCAKKyAgICA3ODI1OCwgNjQ4OTEsIDAsIDc3MjUsIDY1MTA4LCA3ODI1NSwgMCwgODYyNCwgNjkyNDYsIDEyNDQ2LCA0MzI5NSwgMCwgCisgICAgNDE4OTQsIDAsIDYyNzcsIDQxNjcyLCA0MTg5MywgMTAwMTAsIDEyODY3OCwgMzU0MCwgMTI4NjQ5LCA4MzUsIDAsIDY5ODE2LCAKKyAgICAxMTk4NjgsIDc0NDA4LCAwLCA3Mzk1OSwgNTQyNiwgNDI1OCwgMCwgMCwgNTQyNCwgMTI4MTI3LCA4MjgzLCAwLCA1NDM0LCAKKyAgICAwLCAwLCAxOTkxNywgMTE0MDgsIDAsIDExOTQ3LCAwLCAxNDA0LCAzMDk1LCAxMTQzMiwgMTI4MzA3LCAzNDY0LCA2NDg2LCAKKyAgICA0ODE5LCAxMjgyMzMsIDAsIDU3MCwgODA5NSwgMzY3MiwgMTE5ODY0LCAxNDk4LCA2Nzg2NiwgMCwgMCwgNDMxLCAwLCAwLCAKKyAgICAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDAsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAxMjg1MzgsIDUyNjgsIAorICAgIDQyMjMwLCA0MjIyMCwgMCwgNDQ1MCwgMTIwNTExLCAxMTU0NywgNDM0MTcsIDEyODU0MiwgMzU2LCAzNDc3LCAyMjcsIAorICAgIDEwNDg4LCA2ODIwMywgMzgyLCAxMTQxOCwgMCwgMCwgMCwgMCwgMCwgMCwgNjQ4NCwgMjU0MSwgNjYwMzksIDAsIDc4NzE4LCAKKyAgICA5MjcyMywgMzU0OSwgMCwgOTExMCwgMTE5NjY1LCAyNzQzLCAwLCA0MzI5MCwgMTk0ODEyLCA5MDk3LCAwLCA0MzAxNSwgCisgICAgODc4MiwgMCwgNzc2LCAyNTI0LCA0MjcwNywgODU3MywgMCwgMCwgMCwgMCwgNDI2OTQsIDY0OTQ0LCA4OTUyLCAzODU2LCAKKyAgICAxMTg4MTgsIDAsIDU4NzIsIDY0OTUsIDAsIDAsIDAsIDkyNTQzLCAwLCAxMjA3MzMsIDEyODQ5LCAzOTUzLCAxODk3LCAwLCAKKyAgICA2NTA5NCwgMTE5OTQsIDQzMzksIDc0NTU2LCA5MjY1NCwgNjc4NDMsIDAsIDAsIDAsIDY4NDczLCA3NDEwNCwgNTIyOCwgCisgICAgMTI4ODA0LCA3ODY4LCA0MzE4NCwgMCwgMCwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgMCwgMTE2MiwgMCwgMjY3MSwgMCwgCisgICAgMCwgOTI2MzIsIDkyNjMxLCAxMTg4NjUsIDQ1NTMsIDczODExLCAwLCAxOTUwMDUsIDAsIDAsIDE5OTIxLCA3NDMzMSwgCisgICAgMTE0MjQsIDE5NTAwNiwgNDU2NywgNDE4OTEsIDAsIDAsIDU1MjQ5LCA0ODIwLCA2NTIzOSwgMTk0NjYyLCAwLCAwLCAKKyAgICA0MzA0MiwgMTE5MjEyLCAxMzc3LCAxMjg2OSwgNDg5NywgNDI4MjEsIDkyNTAsIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAKKyAgICAxMTMzMSwgNjE0NywgMTk0OTQxLCA0MzI4MiwgODgzMywgMCwgMCwgNjUwNCwgNzg0MDgsIDEyNjk3OSwgMTA3MTksIDAsIAorICAgIDE4OTgsIDE0MTMsIDQyNDQzLCAwLCA4MDIsIDEyMTQxLCAwLCAxOTQ2NzEsIDY2NDgsIDEwNjcxLCAyNTI4LCAwLCA2NDc4OSwgCisgICAgOTE2OSwgODM4LCAxMjcwOTIsIDEyMDY5NywgODQ0LCA1MDE0LCAwLCAyNTYsIDAsIDk5OTAsIDAsIDQyNzM5LCA5MTc4NTEsIAorICAgIDc1NDIsIDY1NDY0LCA5NzI2LCAwLCA2NDg5LCAxMDA0OCwgNzQzMjYsIDc4NzE5LCA2NjU3MywgMCwgNzg3MjQsIDc4NzEyLCAKKyAgICAxMTc2MSwgMTk0NjU1LCAwLCA0MTA5NCwgMCwgMCwgMCwgMCwgOTI2ODksIDYxOTYsIDY5NDUsIDE5NDYyOCwgMTk0ODkwLCAKKyAgICAxMjgxODQsIDEyMDQ5MSwgMTE4MTYsIDE5NDk0MywgNTczMywgMjkzMCwgMCwgMCwgNDEwOTgsIDAsIDQxMDkzLCAwLCAKKyAgICA2NjYyNiwgNTg4LCA5NzYwLCAwLCAxOTQ3MTcsIDEyMzgsIDIwMCwgMCwgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIAorICAgIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDAsIDMzOTQsIDE5NDg5NCwgMTIwNjY4LCAwLCAwLCAxMjczNTgsIDY2MjE5LCAKKyAgICAxMjcxODMsIDQzMjg0LCAxOTQ2NTcsIDc4MTcsIDE4NDEsIDExMDU1LCAxMjA1MzMsIDE5NDk3OSwgMTk0OTgyLCAxNjY5LCAKKyAgICAxMDc3NiwgMTk0OTgxLCA3NzAxLCAxOTQ5ODAsIDAsIDE5NDk5NSwgMTczMiwgNDAzMCwgMCwgMzk2MywgNjY2MTEsIAorICAgIDEyNzUzMCwgNDE3NjgsIDY0OTEsIDAsIDY1MzI0LCA5MTQsIDY1MzIzLCA4MDcxLCAzNTM4LCAwLCA3ODcxMywgNjUzMjgsIAorICAgIDkyNDQxLCA3NDM2NywgNzYxNCwgMCwgMTE4MTksIDAsIDEyMDA5LCAxMjM5OSwgMCwgNjc4NTIsIDY1NTM3LCAwLCAxMDg0MSwgCisgICAgNDM0MzAsIDUzMDEsIDAsIDkyNjE4LCA1NzM0LCA4OTYwLCAwLCA5MjUyNywgNjUzMTcsIDc3ODgwLCAwLCAwLCAwLCAKKyAgICAxMjMwNCwgMCwgMCwgNjUzMTUsIDkyNjcwLCAxMjg1MTEsIDAsIDAsIDAsIDExOTYyMSwgOTI1MjksIDc0NTM2LCAxMjQ0NywgCisgICAgNjQ0ODYsIDEyNzM3NCwgMCwgMCwgMCwgMCwgMCwgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgCisgICAgMTE5NzUsIDE5NDg3OCwgMCwgOTI2MDQsIDI1NTUsIDg2MjksIDAsIDQzMTY4LCA0MTg3MiwgNDM3MDYsIDQ0OTYsIAorICAgIDE5NDg3OSwgMTI4MTQ4LCAwLCAwLCAwLCAwLCAwLCA2NDczMCwgMCwgNjY3MTQsIDY4MjIyLCAwLCAwLCA2NTU5NiwgCisgICAgOTIzMDYsIDExNDE2LCA0MjgwLCA2NzY1NSwgODc2NSwgMTI3ODQsIDc3OTIsIDEzOTMsIDEyNzI0MiwgNjc4NzEsIDc0Mzg2LCAKKyAgICAwLCA4MjMzLCAxMjgyMCwgMCwgNjY4MywgMTk0ODc2LCAzNDQyLCAxMjE0NCwgMjg0MSwgMTI1NDMsIDAsIDE0NzMsIAorICAgIDQyODIwLCA2NDMyOSwgMTI3ODMyLCAwLCA2ODY0MiwgNjQ4OCwgMzU3LCAxMDQ4LCA0MTEwMCwgMCwgNDExMDQsIDAsIAorICAgIDM0MDYsIDEwNTQsIDExOTA2NSwgMTA0MCwgNjU0NTAsIDAsIDQ0MzQsIDEwNjksIDAsIDExODg2MiwgNjU3MzcsIDkxNzc2NSwgCisgICAgMTI4NzA1LCAwLCAwLCA5NjkzLCA0MTk0MywgMCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgMTA1OSwgOTc5MCwgCisgICAgODk5NSwgMTI4Mjg2LCAwLCA2NTkzNywgMCwgNDE3NjQsIDEwNjQ2LCAwLCAxMTg4MzMsIDkyMzcyLCAwLCA3NDgzMCwgCisgICAgNzg1NjksIDEyNzQzLCAwLCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIDEyMjA3LCAxMTk2MTksIDYzMzUsIAorICAgIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAwLCAwLCA0MzAyMCwgMTI4MjcxLCAzOTU1LCA3NDI1NCwgMCwgMCwgCisgICAgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIAorICAgIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCA3ODU3OCwgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIAorICAgIDEyODA2MSwgNzg1NzQsIDAsIDAsIDAsIDU3NDcsIDc4ODI1LCAwLCA3OTc4LCA0MTA5MiwgNzQ1NzEsIDAsIDExOTI0LCAKKyAgICA0MzgxMiwgNDIxNDQsIDY1MDE1LCAwLCA1NjMsIDAsIDAsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgCisgICAgMTE5MDQzLCAwLCAxMTkxMzQsIDQzMTM3LCA2OTQsIDAsIDk4NzYsIDAsIDExOTE2OCwgMCwgNzg4MjIsIDY0NTM3LCAwLCAKKyAgICAyNzcsIDc0Mzg1LCA3MjI5LCAxMjc2MSwgMCwgMCwgMTMwMjUsIDY0ODExLCA4NzU3LCA3ODgyNCwgMCwgMTU3NCwgNzM4MSwgCisgICAgMCwgMjUyNSwgNDg1MiwgNTc0OSwgNjg0NjUsIDEzMDI3LCA0MjgyNCwgMTIwNTc0LCAxMDM5LCA3MTUxLCAxMDE1NSwgCisgICAgNTc0NSwgMTg4LCA0MTg1OCwgMTE1OTIsIDAsIDc0MDE1LCA5MDU1LCA0MTg1MywgNDg1OCwgOTE3NzgwLCAwLCA0MzYsIAorICAgIDQ3NzEsIDAsIDI3ODYsIDAsIDQ4NTYsIDgwNTEsIDAsIDExOTYwOSwgMCwgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAKKyAgICAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIDAsIDczOTA2LCAwLCAxMjcxMTQsIDAsIDEwMjM0LCA1ODQzLCAxMTkzOSwgMCwgCisgICAgNDIxNTcsIDAsIDMxNTcsIDE5NDkxOCwgNjgzOTMsIDAsIDM1MDQsIDExOTE3OCwgMCwgMTA4MjIsIDUxNDksIDY2MDI5LCAKKyAgICAxMDIyNiwgNjUxNDIsIDAsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAxMjY1NywgMCwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKKyAgICAxMjgxNSwgNDM1NzQsIDAsIDczOTA3LCAwLCA3NDE5NiwgNzIyMCwgNzQ1MDQsIDAsIDc0MzE2LCAwLCA3NzkzMiwgNDMwNCwgCisgICAgNzQ1MDMsIDgxNjAsIDc4NzA3LCAxOTQ3NTMsIDAsIDAsIDAsIDEzNDgsIDkyMzQ5LCA3ODU5NywgMCwgMTMzMDMsIDAsIAorICAgIDkyMzkyLCAxOTQ3NTUsIDc1OTksIDEyNzgsIDQzNjE2LCAxMzI2OSwgMCwgMCwgNzQzODcsIDc4MTc5LCA3ODU5OCwgCisgICAgNzQ0OTIsIDYwOTcsIDc1NjgsIDg3ODAsIDQ5ODIsIDEyNzQ2NCwgNzQ1MDEsIDE5NDc2MywgNzg1OTIsIDE5NDc2MiwgCisgICAgMjY3MiwgMzczNSwgMTI3NDcxLCAxMzEzOCwgNDIyNjYsIDk0ODQsIDEwNzI0LCA0MTIwMiwgMTE5MDI0LCAwLCA0Mzc0MiwgCisgICAgMCwgOTQ4NywgMTE5OTU5LCAxMTkxMTcsIDM4NDIsIDEyODc2OCwgNzg2NjgsIDEyNDQyLCA2MTkzLCA5NzkxLCAxMjc5NzYsIAorICAgIDAsIDQyNTE2LCA3MjI4LCA3NTU5LCA3NDgwMywgNzg0NjgsIDc4NzMsIDExMzk5LCAxMTkyMTksIDE5NDY5MSwgMTk0ODU1LCAKKyAgICAxOTQ2OTAsIDE5NDg1NywgMzYwNCwgMCwgMTE5MTg4LCAxMjg4NzcsIDc4NTQwLCA3ODU0MSwgNDI1MDcsIDE5NjIsIAorICAgIDQzMzA1LCA3ODQ3NiwgNDI1MDUsIDExNjYwLCAwLCAyMDcyLCA5MjMxMiwgNjk5NSwgNzQxNzMsIDU0MzcsIDc0MTc0LCAKKyAgICAxMDY2OSwgODcwMiwgNzk2NCwgOTIzNTIsIDAsIDE5OSwgMTk0ODQzLCA0MTA1LCAxOTQ4NDUsIDE5NDY5OSwgMTk0ODQ3LCAKKyAgICAxOTQ3MTAsIDExOTg3NSwgMTMxNDgsIDc1NjAsIDc4NDc5LCA5MjI2LCA3ODQ4MCwgMTk1MDcwLCA2NDcyLCA2NTgxNCwgCisgICAgNzM5NTQsIDAsIDQ3MjQsIDAsIDAsIDkxOTEsIDAsIDY0NDMyLCAwLCAwLCAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCA2NTg1LCAKKyAgICAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIDkyMjUxLCAxOTQ4NjYsIDc0NDIxLCAxMTM4MiwgMCwgCisgICAgMCwgMTI3ODkxLCAxMjc0ODQsIDE5NDgzMywgMTk0ODMyLCA2NjgxLCAxMjc0ODIsIDEyNjkzLCAxOTQ4MzYsIDQyNzI3LCAKKyAgICAxOTQ4MzgsIDEyODI1MiwgNzgxOTUsIDY1NDQyLCAxMTk2MTAsIDY5NzMzLCA5OTg5LCA0MzI0OCwgNjYyNDgsIDE5NDgxNiwgCisgICAgMCwgMTk0ODE4LCAxMjg4NDUsIDE5NDgyMCwgMTk0ODE5LCA1Mjk3LCA3MDQyLCAxMzI4NCwgNjExMiwgNzk2OCwgMTk0ODI1LCAKKyAgICA3MzkyNywgOTI0NDQsIDE5NDczNiwgNjU3NDYsIDEyNzQ3NiwgNzQ0MDksIDc0Mzg5LCAxMjg2OTYsIDQzNDIsIDQyODM5LCAKKyAgICAxOTQ4MzEsIDE2NzcsIDAsIDAsIDE5NDgwNiwgOTE3ODU1LCAxMTA5MSwgMTEwMTEsIDI3MTksIDAsIDAsIDExOTU5NSwgCisgICAgMTAxNjAsIDAsIDAsIDc1ODUsIDY1MTY5LCAyMDUyLCA0MzA4LCA5MjE3NCwgNzQxNzcsIDc1MDUsIDU0MywgNjQ5MTYsIAorICAgIDY0NzM2LCAwLCAwLCA2NDY1NSwgMCwgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgCisgICAgMTI3MTcwLCAwLCAwLCAwLCAwLCAxMjk5NCwgOTI3MjgsIDEwODI4LCAwLCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIAorICAgIDAsIDAsIDUwNiwgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCAwLCA4ODQxLCAwLCAKKyAgICA1MTYsIDAsIDIwNjMsIDExOTA1MSwgMzQsIDEyODg1MCwgMTIwMTg2LCAxMTUwNCwgMTYxMiwgNzQzMzMsIDEyMDE4MiwgCisgICAgNzQ1MjAsIDc0MzA4LCAxMjAwMSwgMTIwMTc4LCAxMDI0MiwgNjQ1NjQsIDEyMDE3OSwgMTIwMTc0LCA2NTg0LCA3NzQ5LCAKKyAgICAxMTAzNywgMCwgMTc1OCwgMCwgMTA2NjcsIDEwNTYwLCAxMjAxOTcsIDkyNTkzLCAxOTM1LCAxMTUxNywgMTIwMTkzLCAKKyAgICAxMjAxOTYsIDEyMDE5NSwgMTkzMSwgMTIwMTg5LCA3NDgzOSwgMTIwMTkxLCAxMjE3LCA2NDcwMiwgMTI2NDMsIDgyNSwgCisgICAgMTI3ODM4LCAxOTQ5MDUsIDEyMjk0LCA5MjQyOCwgNzg4MzQsIDkxMzgsIDc4ODMxLCA3ODgzMywgMTI2MzEsIDc4ODI5LCAKKyAgICAxMTA4MCwgNzQ1NTQsIDY0MDAwLCA1NTkxLCAxMjM5LCAwLCAxMTMxMywgMCwgMzQwMywgMCwgMCwgNjQzNjQsIDkyMjY5LCAKKyAgICAwLCA3NDU4MiwgODk5OCwgMTI5ODgsIDAsIDkxNTIsIDAsIDAsIDE5NDg5OCwgNjc1ODksIDQxODUwLCA2NDI5MCwgMzQzMywgCisgICAgOTIzOTMsIDEyNjE1LCAxNTk0LCA0MjE5MiwgNjkxNCwgNjc2MDMsIDAsIDExOTU2OSwgNzQ1NjUsIDQxMzUzLCA2NzYwMiwgCisgICAgNjc2MTEsIDQzMzcsIDAsIDEyNzI5NiwgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIDE5NDkwMCwgNDI1NzcsIDQxMzkzLCAKKyAgICAxMjY2OCwgMTk0OTA0LCAyNDc3LCAxMjcyODUsIDAsIDEyNzMwMSwgMCwgNjc2MDQsIDE5NDg4MCwgMTI3MjM1LCA1NzMsIAorICAgIDEyNzI4MiwgMTk0ODg0LCAxMTQxNywgMTk0ODg2LCAxMTk4MTQsIDE5NDg4OCwgNjc1OTksIDAsIDE5NDg4OSwgNjc2MDcsIAorICAgIDExNDgyLCAwLCAzOTgxLCAzMzU3LCAwLCA0MjIyMywgNDIwNywgMTI4OCwgNzg4NDIsIDc4ODM5LCA2ODQxOSwgNzg4MzcsIAorICAgIDExNTg5LCA0MjE5NSwgMTk0ODcyLCAxOTQ1OTksIDEyNzI2MywgNjQ2MDIsIDY3NjE4LCA5MjUzOSwgMCwgNDI3ODgsIAorICAgIDY4NDE2LCA2NDQ4MCwgMTk0ODc1LCA4NDIzLCAzMzQ4LCA0NDgsIDY4NDc2LCA5NzE3LCAwLCAwLCA5OTcsIDAsIDAsIAorICAgIDkyNTc3LCAwLCAxMTQ0MCwgMTEzNzksIDQyMDAwLCAxMzEzOSwgNDIyMjEsIDY1MDEzLCAxMjY5OTksIDEyNzc2MCwgCisgICAgNzM3OTYsIDAsIDExOTIyOCwgMTIwMzUsIDAsIDI4MTgsIDAsIDAsIDczNzkzLCAwLCA0MTcyLCAwLCAwLCA4MzczLCAKKyAgICAxMDg3MywgMTIxOTcsIDAsIDAsIDkyMjY1LCA2OTcwNiwgMCwgNzgyMTAsIDAsIDEyODExMCwgMTk0ODY1LCAxMjY5ODIsIAorICAgIDc0NTYzLCA2NDgyOCwgMTE0MTksIDE5NDg2OCwgNzY2LCAxMjU3LCAwLCAxMTg4NDUsIDExMzgxLCAzMjY1LCA2NjYxNywgCisgICAgMzI3NCwgMTI3MzY1LCAwLCAwLCAwLCA3NDUyMiwgNDE5ODksIDAsIDAsIDEyODc5OCwgMzI2MywgMCwgNjU2NzIsIDAsIAorICAgIDMyNzAsIDY0NTM5LCAxMTQ4OSwgMCwgMCwgMCwgMCwgOTUwNSwgNjU1MTgsIDE5NDc3NiwgNzU2LCAxOTQ2MDUsIDAsIDAsIAorICAgIDAsIDcyNjEsIDAsIDE4NiwgMCwgMTE5MTU2LCA1NzcwLCAxMzE3OSwgNjU4MzAsIDEyNjEyLCAxMjk0OSwgNjQ4NTYsIAorICAgIDEyODAwLCAwLCA3NDIwMywgNjQ3MTgsIDAsIDAsIDkyNDM0LCAxMTg5MjksIDAsIDExNTc4LCAwLCAxMTkyOTYsIDAsIDAsIAorICAgIDAsIDAsIDc0NTY4LCA5MjU0LCAwLCAxNzk0LCAxMjAyMTcsIDY0NTIxLCA1NjI0LCAxMjAyMjAsIDEyMDIyMSwgMTE5OTU4LCAKKyAgICAxMjAyMjMsIDM2MTcsIDY2NjM2LCA2NDg4NiwgMTIwMjExLCAxMjAyMTIsIDEyMDIxMywgMTIwMjE0LCAxODcyLCA2NjUwOCwgCisgICAgMTIwNDY3LCA0MTA3OSwgMTA3NDgsIDU1MDIsIDExOTMzMCwgNDQ1MiwgMCwgMCwgOTI1MjYsIDQ1MTEsIDAsIDAsIDY0Njc4LCAKKyAgICAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgMCwgMCwgOTAwMywgODE5MiwgMCwgNTMwNSwgOTY1MywgMTA2MTYsIAorICAgIDg2OTQsIDk1NDYsIDAsIDAsIDEyMDQ3OCwgMTIwMjAwLCA2NTIwNSwgMTIwMjAyLCA2NDA2MywgOTg3OCwgNzQ3ODAsIAorICAgIDExOTYyNiwgNzgyMDIsIDY0MDU4LCA4Nzk5LCA0MjEzMSwgMCwgNjQwNjIsIDEwMjgsIDY0MDYwLCA2NDA1OSwgODM3LCAKKyAgICAxMDU2NywgMCwgNDMxMDMsIDAsIDEyMDc1NCwgMTE0MjcsIDI5MDIsIDY0MDQzLCA2NDA0MiwgNjY0NjQsIDEwNzU2LCAwLCAKKyAgICA0MjYwNiwgNjQwNDUsIDY0MDQ0LCA0Mzk3OSwgMTAwNzYsIDY0MDQwLCA0MzA2MCwgMTk0OTQyLCAxMDM0LCAzMzkyLCAKKyAgICAxMjc3NzEsIDQzMDkxLCA2NDAzMywgNjQwMzIsIDQyNzM1LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCA2NDAzNSwgNDI5MSwgCisgICAgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIDY0NjgxLCAxOTQ5MzAsIDAsIDc4MTQ1LCAwLCA0MzA5MCwgMCwgMzQ3NiwgODk3MywgCisgICAgNjQwMTIsIDQyNDczLCA2NDAxMCwgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgNzgxNTMsIDI1MzgsIDY0MDA5LCAKKyAgICAyMDQsIDAsIDQ4MDIsIDQxMTEsIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDAsIAorICAgIDAsIDQ3NjcsIDkzNDMsIDY0MDQ5LCA2NDA0OCwgMTIwMDM0LCAxMTMzLCA2NDA1MywgNjQwNTIsIDQzNDUzLCA2NDA1MCwgCisgICAgNDEzNDAsIDExODk3NSwgMTk0ODM1LCAxMDAwNSwgMTIzMjksIDQxMzMzLCAwLCA4NDg5LCAxOTQyLCAwLCAxOTQ4MzQsIAorICAgIDQyNTIwLCAxMjgyNDksIDAsIDAsIDEwNzYwLCA2NDAyMywgNjQwMjIsIDY0MDIxLCA2NTgyLCA0MzY3MCwgMCwgNjQwMjUsIAorICAgIDkxNjcsIDQyMTUxLCA3ODI0NCwgMCwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCAKKyAgICA3ODI1MiwgNzgyNDgsIDc3OTE0LCA3ODI0NiwgNzgyNDcsIDAsIDc3OTE1LCA3ODc2NiwgNjc4OCwgMTMwOTQsIDc3OTIwLCAKKyAgICA3NTMyLCA0MTQxNCwgNzg1MjAsIDMxNzksIDc4NTE4LCA2NDc2OSwgNzg1MTQsIDc4NTE3LCAxMTQ2MSwgNzQ0NTQsIAorICAgIDEwNzUxLCA5MDUxLCAxMjA3MjAsIDY3MDgsIDEwNTM1LCAwLCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgCisgICAgMjk0LCA0MTg3NCwgMCwgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgCisgICAgMTk0ODQ0LCAwLCAxMTg3OTUsIDYzNDMsIDQzMjQ3LCAxMTk4ODgsIDAsIDExOTg4NiwgMTE5ODkxLCAxMTk4OTIsIAorICAgIDExOTg4OSwgMTE0MzMsIDExOTg5NSwgMTE5ODk2LCAwLCA3ODAxLCA2NTU3OCwgMTk0ODM5LCAxMjkxNSwgNDM5NjgsIAorICAgIDMyOTcsIDk2OTksIDE5NDk1NSwgMTEzNSwgMCwgMCwgMTI4NTI1LCAxOTk1LCA2NzIyLCAwLCAwLCAyNTUyLCA0MTU0NiwgCisgICAgNjAsIDY4Mzk0LCA4NjQ5LCA0MTU0OSwgNzg0OTYsIDAsIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDAsIAorICAgIDIwMTMsIDEyODI5MSwgNzg1MzAsIDc4NTMyLCA3ODUyOCwgNzg1MjksIDEyODMyLCA3ODQ5MywgODA4MSwgODM2MiwgMzUzNywgCisgICAgMTE5OTA4LCA5MTM3LCA3MTU1LCA4OTk5LCAwLCA3ODUzMywgMzQ2NiwgMCwgMCwgMTk5NiwgMCwgMzQ1MywgNjI4MiwgMCwgCisgICAgMjAwMiwgMjAwMCwgMTIwMTc1LCA1MzcsIDAsIDQxNzksIDY1MTE5LCAxOTk4LCAwLCAxODQyLCAwLCA5MjY3NCwgOTYyOCwgCisgICAgNjg0NDYsIDEyMDgxLCA5ODI2LCA2NDUwMiwgMTc2NywgMCwgMCwgMCwgMTIwMjAxLCAwLCAwLCAwLCAzMDU5LCA0NDAyNCwgCisgICAgMTIwMjA0LCAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAzNTkyLCAKKyAgICAxMDA3OCwgMCwgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgOTI4MSwgCisgICAgMzI5NiwgMTI4NjUsIDE5OTcsIDE4OTUsIAogfTsKIAogI2RlZmluZSBjb2RlX21hZ2ljIDQ3CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3h4bGltaXRlZC5jIGIvTW9kdWxlcy94eGxpbWl0ZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzkyNGYyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy94eGxpbWl0ZWQuYwpAQCAtMCwwICsxLDI4NyBAQAorCisvKiBVc2UgdGhpcyBmaWxlIGFzIGEgdGVtcGxhdGUgdG8gc3RhcnQgaW1wbGVtZW50aW5nIGEgbW9kdWxlIHRoYXQKKyAgIGFsc28gZGVjbGFyZXMgb2JqZWN0IHR5cGVzLiBBbGwgb2NjdXJyZW5jZXMgb2YgJ1h4bycgc2hvdWxkIGJlIGNoYW5nZWQKKyAgIHRvIHNvbWV0aGluZyByZWFzb25hYmxlIGZvciB5b3VyIG9iamVjdHMuIEFmdGVyIHRoYXQsIGFsbCBvdGhlcgorICAgb2NjdXJyZW5jZXMgb2YgJ3h4JyBzaG91bGQgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgcmVhc29uYWJsZSBmb3IgeW91cgorICAgbW9kdWxlLiBJZiB5b3VyIG1vZHVsZSBpcyBuYW1lZCBmb28geW91ciBzb3VyY2VmaWxlIHNob3VsZCBiZSBuYW1lZAorICAgZm9vbW9kdWxlLmMuCisKKyAgIFlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZlcmVuY2VzIHRvICd4X2F0dHInIGFuZCBhZGQKKyAgIHlvdXIgb3duIHR5cGVzIG9mIGF0dHJpYnV0ZXMgaW5zdGVhZC4gIE1heWJlIHlvdSB3YW50IHRvIG5hbWUgeW91cgorICAgbG9jYWwgdmFyaWFibGVzIG90aGVyIHRoYW4gJ3NlbGYnLiAgSWYgeW91ciBvYmplY3QgdHlwZSBpcyBuZWVkZWQgaW4KKyAgIG90aGVyIGZpbGVzLCB5b3UnbGwgaGF2ZSB0byBjcmVhdGUgYSBmaWxlICJmb29iYXJvYmplY3QuaCI7IHNlZQorICAgZmxvYXRvYmplY3QuaCBmb3IgYW4gZXhhbXBsZS4gKi8KKworLyogWHhvIG9iamVjdHMgKi8KKworI2luY2x1ZGUgIlB5dGhvbi5oIgorCitzdGF0aWMgUHlPYmplY3QgKkVycm9yT2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICAgICAgICAgICAgKnhfYXR0cjsgICAgICAgIC8qIEF0dHJpYnV0ZXMgZGljdGlvbmFyeSAqLworfSBYeG9PYmplY3Q7CisKK3N0YXRpYyBQeU9iamVjdCAqWHhvX1R5cGU7CisKKyNkZWZpbmUgWHhvT2JqZWN0X0NoZWNrKHYpICAgICAgKFB5X1RZUEUodikgPT0gWHhvX1R5cGUpCisKK3N0YXRpYyBYeG9PYmplY3QgKgorbmV3WHhvT2JqZWN0KFB5T2JqZWN0ICphcmcpCit7CisgICAgWHhvT2JqZWN0ICpzZWxmOworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoWHhvT2JqZWN0LCAoUHlUeXBlT2JqZWN0KilYeG9fVHlwZSk7CisgICAgaWYgKHNlbGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc2VsZi0+eF9hdHRyID0gTlVMTDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworLyogWHhvIG1ldGhvZHMgKi8KKworc3RhdGljIHZvaWQKK1h4b19kZWFsbG9jKFh4b09iamVjdCAqc2VsZikKK3sKKyAgICBQeV9YREVDUkVGKHNlbGYtPnhfYXR0cik7CisgICAgUHlPYmplY3RfRGVsKHNlbGYpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorWHhvX2RlbW8oWHhvT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqbyA9IE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpkZW1vIiwgJm8pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBmYXN0IHR5cGUgY2hlY2tzICovCisgICAgaWYgKG8gIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ2hlY2sobykpIHsKKyAgICAgICAgUHlfSU5DUkVGKG8pOworICAgICAgICByZXR1cm4gbzsKKyAgICB9CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgWHhvX21ldGhvZHNbXSA9IHsKKyAgICB7ImRlbW8iLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilYeG9fZGVtbywgIE1FVEhfVkFSQVJHUywKKyAgICAgICAgUHlEb2NfU1RSKCJkZW1vKCkgLT4gTm9uZSIpfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK1h4b19nZXRhdHRybyhYeG9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpuYW1lKQoreworICAgIGlmIChzZWxmLT54X2F0dHIgIT0gTlVMTCkgeworICAgICAgICBQeU9iamVjdCAqdiA9IFB5RGljdF9HZXRJdGVtKHNlbGYtPnhfYXR0ciwgbmFtZSk7CisgICAgICAgIGlmICh2ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBQeU9iamVjdF9HZW5lcmljR2V0QXR0cigoUHlPYmplY3QgKilzZWxmLCBuYW1lKTsKK30KKworc3RhdGljIGludAorWHhvX3NldGF0dHIoWHhvT2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKK3sKKyAgICBpZiAoc2VsZi0+eF9hdHRyID09IE5VTEwpIHsKKyAgICAgICAgc2VsZi0+eF9hdHRyID0gUHlEaWN0X05ldygpOworICAgICAgICBpZiAoc2VsZi0+eF9hdHRyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgaW50IHJ2ID0gUHlEaWN0X0RlbEl0ZW1TdHJpbmcoc2VsZi0+eF9hdHRyLCBuYW1lKTsKKyAgICAgICAgaWYgKHJ2IDwgMCkKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAiZGVsZXRlIG5vbi1leGlzdGluZyBYeG8gYXR0cmlidXRlIik7CisgICAgICAgIHJldHVybiBydjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc2VsZi0+eF9hdHRyLCBuYW1lLCB2KTsKK30KKworc3RhdGljIFB5VHlwZV9TbG90IFh4b19UeXBlX3Nsb3RzW10gPSB7CisgICAge1B5X3RwX2RvYywgIlRoZSBYeG8gdHlwZSJ9LAorICAgIHtQeV90cF9kZWFsbG9jLCBYeG9fZGVhbGxvY30sCisgICAge1B5X3RwX2dldGF0dHJvLCBYeG9fZ2V0YXR0cm99LAorICAgIHtQeV90cF9zZXRhdHRyLCBYeG9fc2V0YXR0cn0sCisgICAge1B5X3RwX21ldGhvZHMsIFh4b19tZXRob2RzfSwKKyAgICB7MCwgMH0sCit9OworCitzdGF0aWMgUHlUeXBlX1NwZWMgWHhvX1R5cGVfc3BlYyA9IHsKKyAgICAieHhsaW1pdGVkLlh4byIsCisgICAgc2l6ZW9mKFh4b09iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgWHhvX1R5cGVfc2xvdHMKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBGdW5jdGlvbiBvZiB0d28gaW50ZWdlcnMgcmV0dXJuaW5nIGludGVnZXIgKi8KKworUHlEb2NfU1RSVkFSKHh4X2Zvb19kb2MsCisiZm9vKGksailcblwKK1xuXAorUmV0dXJuIHRoZSBzdW0gb2YgaSBhbmQgai4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3h4X2ZvbyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgbG9uZyBpLCBqOworICAgIGxvbmcgcmVzOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibGw6Zm9vIiwgJmksICZqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gaStqOyAvKiBYWFggRG8gc29tZXRoaW5nIGhlcmUgKi8KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJlcyk7Cit9CisKKworLyogRnVuY3Rpb24gb2Ygbm8gYXJndW1lbnRzIHJldHVybmluZyBuZXcgWHhvIG9iamVjdCAqLworCitzdGF0aWMgUHlPYmplY3QgKgoreHhfbmV3KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBYeG9PYmplY3QgKnJ2OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICI6bmV3IikpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJ2ID0gbmV3WHhvT2JqZWN0KGFyZ3MpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopcnY7Cit9CisKKy8qIFRlc3QgYmFkIGZvcm1hdCBjaGFyYWN0ZXIgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3h4X3JvaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKmE7CisgICAgbG9uZyBiOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyM6cm9qIiwgJmEsICZiKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworfQorCisKKy8qIC0tLS0tLS0tLS0gKi8KKworc3RhdGljIFB5VHlwZV9TbG90IFN0cl9UeXBlX3Nsb3RzW10gPSB7ICAgIAorICAgIHtQeV90cF9iYXNlLCBOVUxMfSwgLyogZmlsbGVkIG91dCBpbiBtb2R1bGUgaW5pdCBmdW5jdGlvbiAqLworICAgIHswLCAwfSwKK307CisKK3N0YXRpYyBQeVR5cGVfU3BlYyBTdHJfVHlwZV9zcGVjID0geworICAgICJ4eGxpbWl0ZWQuU3RyIiwKKyAgICAwLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwKKyAgICBTdHJfVHlwZV9zbG90cworfTsKKworLyogLS0tLS0tLS0tLSAqLworCitzdGF0aWMgUHlPYmplY3QgKgorbnVsbF9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7Cit9CisKK3N0YXRpYyBQeVR5cGVfU2xvdCBOdWxsX1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfYmFzZSwgTlVMTH0sIC8qIGZpbGxlZCBvdXQgaW4gbW9kdWxlIGluaXQgKi8KKyAgICB7UHlfdHBfbmV3LCBOVUxMfSwKKyAgICB7UHlfdHBfcmljaGNvbXBhcmUsIG51bGxfcmljaGNvbXBhcmV9LAorICAgIHswLCAwfQorfTsKKworc3RhdGljIFB5VHlwZV9TcGVjIE51bGxfVHlwZV9zcGVjID0geworICAgICJ4eGxpbWl0ZWQuTnVsbCIsCisgICAgMCwgICAgICAgICAgICAgICAvKiBiYXNpY3NpemUgKi8KKyAgICAwLCAgICAgICAgICAgICAgIC8qIGl0ZW1zaXplICovCisgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwKKyAgICBOdWxsX1R5cGVfc2xvdHMKK307CisKKy8qIC0tLS0tLS0tLS0gKi8KKworLyogTGlzdCBvZiBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlICovCisKK3N0YXRpYyBQeU1ldGhvZERlZiB4eF9tZXRob2RzW10gPSB7CisgICAgeyJyb2oiLCAgICAgICAgICAgICB4eF9yb2osICAgICAgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICBQeURvY19TVFIoInJvaihhLGIpIC0+IE5vbmUiKX0sCisgICAgeyJmb28iLCAgICAgICAgICAgICB4eF9mb28sICAgICAgICAgTUVUSF9WQVJBUkdTLAorICAgICAgICB4eF9mb29fZG9jfSwKKyAgICB7Im5ldyIsICAgICAgICAgICAgIHh4X25ldywgICAgICAgICBNRVRIX1ZBUkFSR1MsCisgICAgICAgIFB5RG9jX1NUUigibmV3KCkgLT4gbmV3IFh4IG9iamVjdCIpfSwKKyAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKworUHlEb2NfU1RSVkFSKG1vZHVsZV9kb2MsCisiVGhpcyBpcyBhIHRlbXBsYXRlIG1vZHVsZSBqdXN0IGZvciBpbnN0cnVjdGlvbi4iKTsKKworLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIHRoZSBtb2R1bGUgKCptdXN0KiBiZSBjYWxsZWQgUHlJbml0X3h4KSAqLworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgeHhtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJ4eGxpbWl0ZWQiLAorICAgIG1vZHVsZV9kb2MsCisgICAgLTEsCisgICAgeHhfbWV0aG9kcywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X3h4bGltaXRlZCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbzsKKworICAgIC8qIER1ZSB0byBjcm9zcyBwbGF0Zm9ybSBjb21waWxlciBpc3N1ZXMgdGhlIHNsb3RzIG11c3QgYmUgZmlsbGVkCisgICAgICogaGVyZS4gSXQncyByZXF1aXJlZCBmb3IgcG9ydGFiaWxpdHkgdG8gV2luZG93cyB3aXRob3V0IHJlcXVpcmluZworICAgICAqIEMrKy4gKi8KKyAgICBOdWxsX1R5cGVfc2xvdHNbMF0ucGZ1bmMgPSAmUHlCYXNlT2JqZWN0X1R5cGU7CisgICAgTnVsbF9UeXBlX3Nsb3RzWzFdLnBmdW5jID0gUHlUeXBlX0dlbmVyaWNOZXc7CisgICAgU3RyX1R5cGVfc2xvdHNbMF0ucGZ1bmMgPSAmUHlVbmljb2RlX1R5cGU7CisKKyAgICBYeG9fVHlwZSA9IFB5VHlwZV9Gcm9tU3BlYygmWHhvX1R5cGVfc3BlYyk7CisgICAgaWYgKFh4b19UeXBlID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyAqLworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnh4bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLworICAgIGlmIChFcnJvck9iamVjdCA9PSBOVUxMKSB7CisgICAgICAgIEVycm9yT2JqZWN0ID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJ4eGxpbWl0ZWQuZXJyb3IiLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKEVycm9yT2JqZWN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIFB5X0lOQ1JFRihFcnJvck9iamVjdCk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIEVycm9yT2JqZWN0KTsKKworICAgIC8qIEFkZCBTdHIgKi8KKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZTdHJfVHlwZV9zcGVjKTsKKyAgICBpZiAobyA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTdHIiLCBvKTsKKworICAgIC8qIEFkZCBOdWxsICovCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmTnVsbF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIk51bGwiLCBvKTsKKyAgICByZXR1cm4gbTsKKyBmYWlsOgorICAgIFB5X1hERUNSRUYobSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3h4bW9kdWxlLmMgYi9Nb2R1bGVzL3h4bW9kdWxlLmMKaW5kZXggOTJjNzY3My4uYThhOTM2MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy94eG1vZHVsZS5jCisrKyBiL01vZHVsZXMveHhtb2R1bGUuYwpAQCAtMTAsNyArMTAsNyBAQAogICAgeW91ciBvd24gdHlwZXMgb2YgYXR0cmlidXRlcyBpbnN0ZWFkLiAgTWF5YmUgeW91IHdhbnQgdG8gbmFtZSB5b3VyCiAgICBsb2NhbCB2YXJpYWJsZXMgb3RoZXIgdGhhbiAnc2VsZicuICBJZiB5b3VyIG9iamVjdCB0eXBlIGlzIG5lZWRlZCBpbgogICAgb3RoZXIgZmlsZXMsIHlvdSdsbCBoYXZlIHRvIGNyZWF0ZSBhIGZpbGUgImZvb2Jhcm9iamVjdC5oIjsgc2VlCi0gICBpbnRvYmplY3QuaCBmb3IgYW4gZXhhbXBsZS4gKi8KKyAgIGZsb2F0b2JqZWN0LmggZm9yIGFuIGV4YW1wbGUuICovCiAKIC8qIFh4byBvYmplY3RzICovCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemlwaW1wb3J0LmMgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCmluZGV4IGZiNWY0MmIuLjg4YTI3YzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemlwaW1wb3J0LmMKKysrIGIvTW9kdWxlcy96aXBpbXBvcnQuYwpAQCAtMzUsMTkgKzM1LDIyIEBACiAKIHN0cnVjdCBfemlwaW1wb3J0ZXIgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICBQeU9iamVjdCAqYXJjaGl2ZTsgIC8qIHBhdGhuYW1lIG9mIHRoZSBaaXAgYXJjaGl2ZSAqLwotICAgIFB5T2JqZWN0ICpwcmVmaXg7ICAgLyogZmlsZSBwcmVmaXg6ICJhL3N1Yi9kaXJlY3RvcnkvIiAqLworICAgIFB5T2JqZWN0ICphcmNoaXZlOyAgLyogcGF0aG5hbWUgb2YgdGhlIFppcCBhcmNoaXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgUHlPYmplY3QgKnByZWZpeDsgICAvKiBmaWxlIHByZWZpeDogImEvc3ViL2RpcmVjdG9yeS8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5T2JqZWN0ICpmaWxlczsgICAgLyogZGljdCB3aXRoIGZpbGUgaW5mbyB7cGF0aDogdG9jX2VudHJ5fSAqLwogfTsKIAogc3RhdGljIFB5T2JqZWN0ICpaaXBJbXBvcnRFcnJvcjsKKy8qIHJlYWRfZGlyZWN0b3J5KCkgY2FjaGUgKi8KIHN0YXRpYyBQeU9iamVjdCAqemlwX2RpcmVjdG9yeV9jYWNoZSA9IE5VTEw7CiAKIC8qIGZvcndhcmQgZGVjbHMgKi8KLXN0YXRpYyBQeU9iamVjdCAqcmVhZF9kaXJlY3RvcnkoY2hhciAqYXJjaGl2ZSk7Ci1zdGF0aWMgUHlPYmplY3QgKmdldF9kYXRhKGNoYXIgKmFyY2hpdmUsIFB5T2JqZWN0ICp0b2NfZW50cnkpOworc3RhdGljIFB5T2JqZWN0ICpyZWFkX2RpcmVjdG9yeShQeU9iamVjdCAqYXJjaGl2ZSk7CitzdGF0aWMgUHlPYmplY3QgKmdldF9kYXRhKFB5T2JqZWN0ICphcmNoaXZlLCBQeU9iamVjdCAqdG9jX2VudHJ5KTsKIHN0YXRpYyBQeU9iamVjdCAqZ2V0X21vZHVsZV9jb2RlKFppcEltcG9ydGVyICpzZWxmLCBjaGFyICpmdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcF9pc3BhY2thZ2UsIGNoYXIgKipwX21vZHBhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpwX2lzcGFja2FnZSwgUHlPYmplY3QgKipwX21vZHBhdGgpOwogCiAKICNkZWZpbmUgWmlwSW1wb3J0ZXJfQ2hlY2sob3ApIFB5T2JqZWN0X1R5cGVDaGVjayhvcCwgJlppcEltcG9ydGVyX1R5cGUpCkBAIC02MCwyNiArNjMsMjkgQEAKIHN0YXRpYyBpbnQKIHppcGltcG9ydGVyX2luaXQoWmlwSW1wb3J0ZXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyICpwYXRoLCAqcCwgKnByZWZpeCwgYnVmW01BWFBBVEhMRU4rMl07Ci0gICAgc2l6ZV90IGxlbjsKKyAgICBQeU9iamVjdCAqcGF0aG9iaiwgKmZpbGVzOworICAgIFB5X1VOSUNPREUgKnBhdGgsICpwLCAqcHJlZml4LCBidWZbTUFYUEFUSExFTisyXTsKKyAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgIGlmICghX1B5QXJnX05vS2V5d29yZHMoInppcGltcG9ydGVyKCkiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnppcGltcG9ydGVyIiwgJnBhdGgpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6emlwaW1wb3J0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aG9iaikpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGxlbiA9IHN0cmxlbihwYXRoKTsKKyAgICAvKiBjb3B5IHBhdGggdG8gYnVmICovCisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHBhdGhvYmopOwogICAgIGlmIChsZW4gPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJhcmNoaXZlIHBhdGggaXMgZW1wdHkiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAobGVuID49IE1BWFBBVEhMRU4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFppcEltcG9ydEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImFyY2hpdmUgcGF0aCB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHN0cmNweShidWYsIHBhdGgpOworICAgIFB5X1VOSUNPREVfc3RyY3B5KGJ1ZiwgUHlVbmljb2RlX0FTX1VOSUNPREUocGF0aG9iaikpOwogCiAjaWZkZWYgQUxUU0VQCiAgICAgZm9yIChwID0gYnVmOyAqcDsgcCsrKSB7CkBAIC05NCw3ICsxMDAsMTIgQEAKICAgICAgICAgc3RydWN0IHN0YXQgc3RhdGJ1ZjsKICAgICAgICAgaW50IHJ2OwogCi0gICAgICAgIHJ2ID0gc3RhdChidWYsICZzdGF0YnVmKTsKKyAgICAgICAgaWYgKHBhdGhvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgcGF0aG9iaiA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShidWYsIGxlbik7CisgICAgICAgICAgICBpZiAocGF0aG9iaiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgcnYgPSBfUHlfc3RhdChwYXRob2JqLCAmc3RhdGJ1Zik7CiAgICAgICAgIGlmIChydiA9PSAwKSB7CiAgICAgICAgICAgICAvKiBpdCBleGlzdHMgKi8KICAgICAgICAgICAgIGlmIChTX0lTUkVHKHN0YXRidWYuc3RfbW9kZSkpCkBAIC0xMDIsNTYgKzExMyw2MCBAQAogICAgICAgICAgICAgICAgIHBhdGggPSBidWY7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgLyogYmFjayB1cCBvbmUgcGF0aCBlbGVtZW50ICovCi0gICAgICAgIHAgPSBzdHJyY2hyKGJ1ZiwgU0VQKTsKKyAgICAgICAgcCA9IFB5X1VOSUNPREVfc3RycmNocihidWYsIFNFUCk7CiAgICAgICAgIGlmIChwcmVmaXggIT0gTlVMTCkKICAgICAgICAgICAgICpwcmVmaXggPSBTRVA7CiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKnAgPSAnXDAnOworICAgICAgICBsZW4gPSBwIC0gYnVmOwogICAgICAgICBwcmVmaXggPSBwOworICAgICAgICBQeV9DTEVBUihwYXRob2JqKTsKICAgICB9Ci0gICAgaWYgKHBhdGggIT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqZmlsZXM7Ci0gICAgICAgIGZpbGVzID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoemlwX2RpcmVjdG9yeV9jYWNoZSwgcGF0aCk7Ci0gICAgICAgIGlmIChmaWxlcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBmaWxlcyA9IHJlYWRfZGlyZWN0b3J5KGJ1Zik7Ci0gICAgICAgICAgICBpZiAoZmlsZXMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoemlwX2RpcmVjdG9yeV9jYWNoZSwgcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlcykgIT0gMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfSU5DUkVGKGZpbGVzKTsKLSAgICAgICAgc2VsZi0+ZmlsZXMgPSBmaWxlczsKLSAgICB9Ci0gICAgZWxzZSB7CisgICAgaWYgKHBhdGggPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJub3QgYSBaaXAgZmlsZSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgaWYgKHByZWZpeCA9PSBOVUxMKQotICAgICAgICBwcmVmaXggPSAiIjsKLSAgICBlbHNlIHsKKyAgICBmaWxlcyA9IFB5RGljdF9HZXRJdGVtKHppcF9kaXJlY3RvcnlfY2FjaGUsIHBhdGhvYmopOworICAgIGlmIChmaWxlcyA9PSBOVUxMKSB7CisgICAgICAgIGZpbGVzID0gcmVhZF9kaXJlY3RvcnkocGF0aG9iaik7CisgICAgICAgIGlmIChmaWxlcyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtKHppcF9kaXJlY3RvcnlfY2FjaGUsIHBhdGhvYmosIGZpbGVzKSAhPSAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBQeV9JTkNSRUYoZmlsZXMpOworICAgIHNlbGYtPmZpbGVzID0gZmlsZXM7CisKKyAgICBzZWxmLT5hcmNoaXZlID0gcGF0aG9iajsKKyAgICBwYXRob2JqID0gTlVMTDsKKworICAgIGlmIChwcmVmaXggIT0gTlVMTCkgewogICAgICAgICBwcmVmaXgrKzsKLSAgICAgICAgbGVuID0gc3RybGVuKHByZWZpeCk7CisgICAgICAgIGxlbiA9IFB5X1VOSUNPREVfc3RybGVuKHByZWZpeCk7CiAgICAgICAgIGlmIChwcmVmaXhbbGVuLTFdICE9IFNFUCkgewogICAgICAgICAgICAgLyogYWRkIHRyYWlsaW5nIFNFUCAqLwogICAgICAgICAgICAgcHJlZml4W2xlbl0gPSBTRVA7CiAgICAgICAgICAgICBwcmVmaXhbbGVuICsgMV0gPSAnXDAnOworICAgICAgICAgICAgbGVuKys7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBzZWxmLT5hcmNoaXZlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoYnVmKTsKLSAgICBpZiAoc2VsZi0+YXJjaGl2ZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzZWxmLT5wcmVmaXggPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhwcmVmaXgpOworICAgIGVsc2UKKyAgICAgICAgbGVuID0gMDsKKyAgICBzZWxmLT5wcmVmaXggPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUocHJlZml4LCBsZW4pOwogICAgIGlmIChzZWxmLT5wcmVmaXggPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYocGF0aG9iaik7CisgICAgcmV0dXJuIC0xOwogfQogCiAvKiBHQyBzdXBwb3J0LiAqLwpAQCAtMTc2LDE5ICsxOTEsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB6aXBpbXBvcnRlcl9yZXByKFppcEltcG9ydGVyICpzZWxmKQogewotICAgIGNoYXIgKmFyY2hpdmUgPSAiPz8/IjsKLSAgICBjaGFyICpwcmVmaXggPSAiIjsKLQotICAgIGlmIChzZWxmLT5hcmNoaXZlICE9IE5VTEwgJiYgUHlVbmljb2RlX0NoZWNrKHNlbGYtPmFyY2hpdmUpKQotICAgICAgICBhcmNoaXZlID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzZWxmLT5hcmNoaXZlKTsKLSAgICBpZiAoc2VsZi0+cHJlZml4ICE9IE5VTEwgJiYgUHlVbmljb2RlX0NoZWNrKHNlbGYtPnByZWZpeCkpCi0gICAgICAgIHByZWZpeCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+cHJlZml4KTsKLSAgICBpZiAocHJlZml4ICE9IE5VTEwgJiYgKnByZWZpeCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8emlwaW1wb3J0ZXIgb2JqZWN0IFwiJS4zMDBzJWMlLjE1MHNcIj4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSwgU0VQLCBwcmVmaXgpOworICAgIGlmIChzZWxmLT5hcmNoaXZlID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHppcGltcG9ydGVyIG9iamVjdCBcIj8/P1wiPiIpOworICAgIGVsc2UgaWYgKHNlbGYtPnByZWZpeCAhPSBOVUxMICYmIFB5VW5pY29kZV9HRVRfU0laRShzZWxmLT5wcmVmaXgpICE9IDApCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPHppcGltcG9ydGVyIG9iamVjdCBcIiVVJWMlVVwiPiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCBTRVAsIHNlbGYtPnByZWZpeCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjx6aXBpbXBvcnRlciBvYmplY3QgXCIlLjMwMHNcIj4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPHppcGltcG9ydGVyIG9iamVjdCBcIiVVXCI+IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmFyY2hpdmUpOwogfQogCiAvKiByZXR1cm4gZnVsbG5hbWUuc3BsaXQoIi4iKVstMV0gKi8KQEAgLTIwNywyMCArMjE3LDI2IEBACiAgICBhcmNoaXZlICh3aXRob3V0IGV4dGVuc2lvbikgdG8gdGhlIHBhdGggYnVmZmVyLiBSZXR1cm4gdGhlCiAgICBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuICovCiBzdGF0aWMgaW50Ci1tYWtlX2ZpbGVuYW1lKGNoYXIgKnByZWZpeCwgY2hhciAqbmFtZSwgY2hhciAqcGF0aCkKK21ha2VfZmlsZW5hbWUoUHlPYmplY3QgKnByZWZpeF9vYmosIGNoYXIgKm5hbWUsIGNoYXIgKnBhdGgsIHNpemVfdCBwYXRoc2l6ZSkKIHsKICAgICBzaXplX3QgbGVuOwogICAgIGNoYXIgKnA7CisgICAgUHlPYmplY3QgKnByZWZpeDsKIAotICAgIGxlbiA9IHN0cmxlbihwcmVmaXgpOworICAgIHByZWZpeCA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQocHJlZml4X29iaik7CisgICAgaWYgKHByZWZpeCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgbGVuID0gUHlCeXRlc19HRVRfU0laRShwcmVmaXgpOwogCiAgICAgLyogc2VsZi5wcmVmaXggKyBuYW1lIFsrIFNFUCArICJfX2luaXRfXyJdICsgIi5weVtjb10iICovCi0gICAgaWYgKGxlbiArIHN0cmxlbihuYW1lKSArIDEzID49IE1BWFBBVEhMRU4pIHsKKyAgICBpZiAobGVuICsgc3RybGVuKG5hbWUpICsgMTMgPj0gcGF0aHNpemUgLSAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhaaXBJbXBvcnRFcnJvciwgInBhdGggdG9vIGxvbmciKTsKKyAgICAgICAgUHlfREVDUkVGKHByZWZpeCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzdHJjcHkocGF0aCwgcHJlZml4KTsKKyAgICBzdHJjcHkocGF0aCwgUHlCeXRlc19BU19TVFJJTkcocHJlZml4KSk7CisgICAgUHlfREVDUkVGKHByZWZpeCk7CiAgICAgc3RyY3B5KHBhdGggKyBsZW4sIG5hbWUpOwogICAgIGZvciAocCA9IHBhdGggKyBsZW47ICpwOyBwKyspIHsKICAgICAgICAgaWYgKCpwID09ICcuJykKQEAgLTI0OCw3ICsyNjQsNyBAQAogCiAgICAgc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKIAotICAgIGxlbiA9IG1ha2VfZmlsZW5hbWUoX1B5VW5pY29kZV9Bc1N0cmluZyhzZWxmLT5wcmVmaXgpLCBzdWJuYW1lLCBwYXRoKTsKKyAgICBsZW4gPSBtYWtlX2ZpbGVuYW1lKHNlbGYtPnByZWZpeCwgc3VibmFtZSwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKICAgICBpZiAobGVuIDwgMCkKICAgICAgICAgcmV0dXJuIE1JX0VSUk9SOwogCkBAIC0yOTQsOCArMzEwLDkgQEAKIHppcGltcG9ydGVyX2xvYWRfbW9kdWxlKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICphcmdzKQogewogICAgIFppcEltcG9ydGVyICpzZWxmID0gKFppcEltcG9ydGVyICopb2JqOwotICAgIFB5T2JqZWN0ICpjb2RlLCAqbW9kLCAqZGljdDsKLSAgICBjaGFyICpmdWxsbmFtZSwgKm1vZHBhdGg7CisgICAgUHlPYmplY3QgKmNvZGUgPSBOVUxMLCAqbW9kLCAqZGljdDsKKyAgICBjaGFyICpmdWxsbmFtZTsKKyAgICBQeU9iamVjdCAqbW9kcGF0aCA9IE5VTEwsICptb2RwYXRoX2J5dGVzOwogICAgIGludCBpc3BhY2thZ2U7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6emlwaW1wb3J0ZXIubG9hZF9tb2R1bGUiLApAQCAtMzA0LDEzICszMjEsMTEgQEAKIAogICAgIGNvZGUgPSBnZXRfbW9kdWxlX2NvZGUoc2VsZiwgZnVsbG5hbWUsICZpc3BhY2thZ2UsICZtb2RwYXRoKTsKICAgICBpZiAoY29kZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIG1vZCA9IFB5SW1wb3J0X0FkZE1vZHVsZShmdWxsbmFtZSk7Ci0gICAgaWYgKG1vZCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChtb2QgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdChtb2QpOwogCiAgICAgLyogbW9kLl9fbG9hZGVyX18gPSBzZWxmICovCkBAIC0zMzksMTUgKzM1NCwyNCBAQAogICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBtb2QgPSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGZ1bGxuYW1lLCBjb2RlLCBtb2RwYXRoKTsKLSAgICBQeV9ERUNSRUYoY29kZSk7CisgICAgbW9kcGF0aF9ieXRlcyA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQobW9kcGF0aCk7CisgICAgaWYgKG1vZHBhdGhfYnl0ZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBtb2QgPSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KGZ1bGxuYW1lLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobW9kcGF0aF9ieXRlcykpOworICAgIFB5X0RFQ1JFRihtb2RwYXRoX2J5dGVzKTsKKyAgICBQeV9DTEVBUihjb2RlKTsKKyAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJpbXBvcnQgJXMgIyBsb2FkZWQgZnJvbSBaaXAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lLCBtb2RwYXRoKTsKKyAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCJpbXBvcnQgJXMgIyBsb2FkZWQgZnJvbSBaaXAgJVVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgbW9kcGF0aCk7CisgICAgUHlfREVDUkVGKG1vZHBhdGgpOwogICAgIHJldHVybiBtb2Q7CiBlcnJvcjoKLSAgICBQeV9ERUNSRUYoY29kZSk7Ci0gICAgUHlfREVDUkVGKG1vZCk7CisgICAgUHlfWERFQ1JFRihjb2RlKTsKKyAgICBQeV9YREVDUkVGKG1vZHBhdGgpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0zNTcsMjEgKzM4MSwyMiBAQAogewogICAgIFppcEltcG9ydGVyICpzZWxmID0gKFppcEltcG9ydGVyICopb2JqOwogICAgIFB5T2JqZWN0ICpjb2RlOwotICAgIGNoYXIgKmZ1bGxuYW1lLCAqbW9kcGF0aDsKKyAgICBjaGFyICpmdWxsbmFtZTsKKyAgICBQeU9iamVjdCAqbW9kcGF0aDsKICAgICBpbnQgaXNwYWNrYWdlOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnppcGltcG9ydGVyLmdldF9maWxlbmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bGxuYW1lKSkKLSAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ1bGxuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBEZWNpZGluZyB0aGUgZmlsZW5hbWUgcmVxdWlyZXMgd29ya2luZyBvdXQgd2hlcmUgdGhlIGNvZGUKICAgICAgICB3b3VsZCBjb21lIGZyb20gaWYgdGhlIG1vZHVsZSB3YXMgYWN0dWFsbHkgbG9hZGVkICovCiAgICAgY29kZSA9IGdldF9tb2R1bGVfY29kZShzZWxmLCBmdWxsbmFtZSwgJmlzcGFja2FnZSwgJm1vZHBhdGgpOwogICAgIGlmIChjb2RlID09IE5VTEwpCi0gICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0RFQ1JFRihjb2RlKTsgLyogT25seSBuZWVkIHRoZSBwYXRoIGluZm8gKi8KIAotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2RwYXRoKTsKKyAgICByZXR1cm4gbW9kcGF0aDsKIH0KIAogLyogUmV0dXJuIGEgYm9vbCBzaWduaWZ5aW5nIHdoZXRoZXIgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2Ugb3Igbm90LiAqLwpAQCAtMzkwLDggKzQxNSw3IEBACiAgICAgaWYgKG1pID09IE1JX0VSUk9SKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWkgPT0gTUlfTk9UX0ZPVU5EKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IGZpbmQgbW9kdWxlICclLjIwMHMnIiwKLSAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgZmluZCBtb2R1bGUgJyVzJyIsIGZ1bGxuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcobWkgPT0gTUlfUEFDS0FHRSk7CkBAIC00MDEsNDIgKzQyNSw1MiBAQAogemlwaW1wb3J0ZXJfZ2V0X2RhdGEoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgWmlwSW1wb3J0ZXIgKnNlbGYgPSAoWmlwSW1wb3J0ZXIgKilvYmo7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBQeU9iamVjdCAqcGF0aG9iaiwgKmtleTsKKyAgICBjb25zdCBQeV9VTklDT0RFICpwYXRoOwogI2lmZGVmIEFMVFNFUAotICAgIGNoYXIgKnAsIGJ1ZltNQVhQQVRITEVOICsgMV07CisgICAgUHlfVU5JQ09ERSAqcCwgYnVmW01BWFBBVEhMRU4gKyAxXTsKICNlbmRpZgorICAgIFB5X1VOSUNPREUgKmFyY2hpdmU7CiAgICAgUHlPYmplY3QgKnRvY19lbnRyeTsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBjaGFyICphcmNoaXZlX3N0cjsKKyAgICBQeV9zc2l6ZV90IHBhdGhfbGVuLCBsZW47CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6emlwaW1wb3J0ZXIuZ2V0X2RhdGEiLCAmcGF0aCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOnppcGltcG9ydGVyLmdldF9kYXRhIiwgJnBhdGhvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHBhdGhfbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHBhdGhvYmopOworICAgIHBhdGggPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShwYXRob2JqKTsKICNpZmRlZiBBTFRTRVAKLSAgICBpZiAoc3RybGVuKHBhdGgpID49IE1BWFBBVEhMRU4pIHsKKyAgICBpZiAocGF0aF9sZW4gPj0gTUFYUEFUSExFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoWmlwSW1wb3J0RXJyb3IsICJwYXRoIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHJjcHkoYnVmLCBwYXRoKTsKKyAgICBQeV9VTklDT0RFX3N0cmNweShidWYsIHBhdGgpOwogICAgIGZvciAocCA9IGJ1ZjsgKnA7IHArKykgewogICAgICAgICBpZiAoKnAgPT0gQUxUU0VQKQogICAgICAgICAgICAgKnAgPSBTRVA7CiAgICAgfQogICAgIHBhdGggPSBidWY7CiAjZW5kaWYKLSAgICBhcmNoaXZlX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHNlbGYtPmFyY2hpdmUsICZsZW4pOwotICAgIGlmICgoc2l6ZV90KWxlbiA8IHN0cmxlbihwYXRoKSAmJgotICAgICAgICBzdHJuY21wKHBhdGgsIGFyY2hpdmVfc3RyLCBsZW4pID09IDAgJiYKKyAgICBhcmNoaXZlID0gUHlVbmljb2RlX0FTX1VOSUNPREUoc2VsZi0+YXJjaGl2ZSk7CisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHNlbGYtPmFyY2hpdmUpOworICAgIGlmICgoc2l6ZV90KWxlbiA8IFB5X1VOSUNPREVfc3RybGVuKHBhdGgpICYmCisgICAgICAgIFB5X1VOSUNPREVfc3RybmNtcChwYXRoLCBhcmNoaXZlLCBsZW4pID09IDAgJiYKICAgICAgICAgcGF0aFtsZW5dID09IFNFUCkgewotICAgICAgICBwYXRoID0gcGF0aCArIGxlbiArIDE7CisgICAgICAgIHBhdGggKz0gbGVuICsgMTsKKyAgICAgICAgcGF0aF9sZW4gLT0gbGVuICsgMTsKICAgICB9CiAKLSAgICB0b2NfZW50cnkgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhzZWxmLT5maWxlcywgcGF0aCk7CisgICAga2V5ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKHBhdGgsIHBhdGhfbGVuKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHRvY19lbnRyeSA9IFB5RGljdF9HZXRJdGVtKHNlbGYtPmZpbGVzLCBrZXkpOwogICAgIGlmICh0b2NfZW50cnkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgcGF0aCk7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19JT0Vycm9yLCBrZXkpOworICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBnZXRfZGF0YShhcmNoaXZlX3N0ciwgdG9jX2VudHJ5KTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICByZXR1cm4gZ2V0X2RhdGEoc2VsZi0+YXJjaGl2ZSwgdG9jX2VudHJ5KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ2NywxMyArNTAxLDEyIEBACiAgICAgaWYgKG1pID09IE1JX0VSUk9SKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWkgPT0gTUlfTk9UX0ZPVU5EKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IGZpbmQgbW9kdWxlICclLjIwMHMnIiwKLSAgICAgICAgICAgICAgICAgICAgIGZ1bGxuYW1lKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgZmluZCBtb2R1bGUgJyVzJyIsIGZ1bGxuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHN1Ym5hbWUgPSBnZXRfc3VibmFtZShmdWxsbmFtZSk7CiAKLSAgICBsZW4gPSBtYWtlX2ZpbGVuYW1lKF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+cHJlZml4KSwgc3VibmFtZSwgcGF0aCk7CisgICAgbGVuID0gbWFrZV9maWxlbmFtZShzZWxmLT5wcmVmaXgsIHN1Ym5hbWUsIHBhdGgsIHNpemVvZihwYXRoKSk7CiAgICAgaWYgKGxlbiA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC00ODYsOSArNTE5LDEzIEBACiAKICAgICB0b2NfZW50cnkgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhzZWxmLT5maWxlcywgcGF0aCk7CiAgICAgaWYgKHRvY19lbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpieXRlcyA9IGdldF9kYXRhKF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+YXJjaGl2ZSksIHRvY19lbnRyeSk7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeUJ5dGVzX0FzU3RyaW5nKGJ5dGVzKSk7Ci0gICAgICAgIFB5X1hERUNSRUYoYnl0ZXMpOworICAgICAgICBQeU9iamVjdCAqcmVzLCAqYnl0ZXM7CisgICAgICAgIGJ5dGVzID0gZ2V0X2RhdGEoc2VsZi0+YXJjaGl2ZSwgdG9jX2VudHJ5KTsKKyAgICAgICAgaWYgKGJ5dGVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpKTsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAKQEAgLTY1Niw3ICs2OTMsOCBAQAogCiAgICBBIHRvY19lbnRyeSBpcyBhIHR1cGxlOgogCi0gICAgICAgKF9fZmlsZV9fLCAgICAgICMgdmFsdWUgdG8gdXNlIGZvciBfX2ZpbGVfXywgYXZhaWxhYmxlIGZvciBhbGwgZmlsZXMKKyAgIChfX2ZpbGVfXywgICAgICAjIHZhbHVlIHRvIHVzZSBmb3IgX19maWxlX18sIGF2YWlsYWJsZSBmb3IgYWxsIGZpbGVzLAorICAgICAgICAgICAgICAgICAgICMgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwogICAgIGNvbXByZXNzLCAgICAgICMgY29tcHJlc3Npb24ga2luZDsgMCBmb3IgdW5jb21wcmVzc2VkCiAgICAgZGF0YV9zaXplLCAgICAgIyBzaXplIG9mIGNvbXByZXNzZWQgZGF0YSBvbiBkaXNrCiAgICAgZmlsZV9zaXplLCAgICAgIyBzaXplIG9mIGRlY29tcHJlc3NlZCBkYXRhCkBAIC02NjQsNTEgKzcwMiw1NCBAQAogICAgIHRpbWUsICAgICAgICAgICMgbW9kIHRpbWUgb2YgZmlsZSAoaW4gZG9zIGZvcm1hdCkKICAgICBkYXRlLCAgICAgICAgICAjIG1vZCBkYXRhIG9mIGZpbGUgKGluIGRvcyBmb3JtYXQpCiAgICAgY3JjLCAgICAgICAgICAgIyBjcmMgY2hlY2tzdW0gb2YgdGhlIGRhdGEKLSAgICAgICApCisgICApCiAKICAgIERpcmVjdG9yaWVzIGNhbiBiZSByZWNvZ25pemVkIGJ5IHRoZSB0cmFpbGluZyBTRVAgaW4gdGhlIG5hbWUsCiAgICBkYXRhX3NpemUgYW5kIGZpbGVfb2Zmc2V0IGFyZSAwLgogKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1yZWFkX2RpcmVjdG9yeShjaGFyICphcmNoaXZlKQorcmVhZF9kaXJlY3RvcnkoUHlPYmplY3QgKmFyY2hpdmVfb2JqKQogeworICAgIC8qIEZJWE1FOiB3b3JrIG9uIFB5X1VOSUNPREUqIGluc3RlYWQgb2YgY2hhciogKi8KICAgICBQeU9iamVjdCAqZmlsZXMgPSBOVUxMOwogICAgIEZJTEUgKmZwOworICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwogICAgIGxvbmcgY29tcHJlc3MsIGNyYywgZGF0YV9zaXplLCBmaWxlX3NpemUsIGZpbGVfb2Zmc2V0LCBkYXRlLCB0aW1lOwogICAgIGxvbmcgaGVhZGVyX29mZnNldCwgbmFtZV9zaXplLCBoZWFkZXJfc2l6ZSwgaGVhZGVyX3Bvc2l0aW9uOwogICAgIGxvbmcgaSwgbCwgY291bnQ7CiAgICAgc2l6ZV90IGxlbmd0aDsKLSAgICBjaGFyIHBhdGhbTUFYUEFUSExFTiArIDVdOworICAgIFB5X1VOSUNPREUgcGF0aFtNQVhQQVRITEVOICsgNV07CiAgICAgY2hhciBuYW1lW01BWFBBVEhMRU4gKyA1XTsKKyAgICBQeU9iamVjdCAqbmFtZW9iaiA9IE5VTEw7CiAgICAgY2hhciAqcCwgZW5kb2ZfY2VudHJhbF9kaXJbMjJdOwogICAgIGxvbmcgYXJjX29mZnNldDsgLyogb2Zmc2V0IGZyb20gYmVnaW5uaW5nIG9mIGZpbGUgdG8gc3RhcnQgb2YgemlwLWFyY2hpdmUgKi8KKyAgICBQeU9iamVjdCAqcGF0aG9iajsKKyAgICBjb25zdCBjaGFyICpjaGFyc2V0OworICAgIGludCBib290c3RyYXA7CiAKLSAgICBpZiAoc3RybGVuKGFyY2hpdmUpID4gTUFYUEFUSExFTikgeworICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUoYXJjaGl2ZV9vYmopID4gTUFYUEFUSExFTikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJaaXAgcGF0aCBuYW1lIGlzIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHJjcHkocGF0aCwgYXJjaGl2ZSk7CisgICAgUHlfVU5JQ09ERV9zdHJjcHkocGF0aCwgUHlVbmljb2RlX0FTX1VOSUNPREUoYXJjaGl2ZV9vYmopKTsKIAotICAgIGZwID0gZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZV9vYmosICJyYiIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IG9wZW4gWmlwIGZpbGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICInJS4yMDBzJyIsIGFyY2hpdmUpOworICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCBvcGVuIFppcCBmaWxlOiAnJVUnIiwgYXJjaGl2ZV9vYmopOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZnNlZWsoZnAsIC0yMiwgU0VFS19FTkQpOwogICAgIGhlYWRlcl9wb3NpdGlvbiA9IGZ0ZWxsKGZwKTsKICAgICBpZiAoZnJlYWQoZW5kb2ZfY2VudHJhbF9kaXIsIDEsIDIyLCBmcCkgIT0gMjIpIHsKICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgcmVhZCBaaXAgZmlsZTogIgotICAgICAgICAgICAgICAgICAgICAgIiclLjIwMHMnIiwgYXJjaGl2ZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChaaXBJbXBvcnRFcnJvciwgImNhbid0IHJlYWQgWmlwIGZpbGU6ICclVSciLCBhcmNoaXZlX29iaik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoZ2V0X2xvbmcoKHVuc2lnbmVkIGNoYXIgKillbmRvZl9jZW50cmFsX2RpcikgIT0gMHgwNjA1NEI1MCkgewogICAgICAgICAvKiBCYWQ6IEVuZCBvZiBDZW50cmFsIERpciBzaWduYXR1cmUgKi8KICAgICAgICAgZmNsb3NlKGZwKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAibm90IGEgWmlwIGZpbGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICInJS4yMDBzJyIsIGFyY2hpdmUpOworICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJub3QgYSBaaXAgZmlsZTogJyVVJyIsIGFyY2hpdmVfb2JqKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC03MjEsNyArNzYyLDcgQEAKICAgICBpZiAoZmlsZXMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGxlbmd0aCA9IChsb25nKXN0cmxlbihwYXRoKTsKKyAgICBsZW5ndGggPSBQeV9VTklDT0RFX3N0cmxlbihwYXRoKTsKICAgICBwYXRoW2xlbmd0aF0gPSBTRVA7CiAKICAgICAvKiBTdGFydCBvZiBDZW50cmFsIERpcmVjdG9yeSAqLwpAQCAtNzM0LDcgKzc3NSw4IEBACiAgICAgICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CiAgICAgICAgIGlmIChsICE9IDB4MDIwMTRCNTApCiAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgIC8qIEJhZDogQ2VudHJhbCBEaXIgRmlsZSBIZWFkZXIgKi8KLSAgICAgICAgZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQgKyAxMCwgMCk7CisgICAgICAgIGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgOCwgMCk7CisgICAgICAgIGZsYWdzID0gKHVuc2lnbmVkIHNob3J0KVB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIGNvbXByZXNzID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgdGltZSA9IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7CiAgICAgICAgIGRhdGUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwpAQCAtNzYwLDEzICs4MDIsNDEgQEAKICAgICAgICAgKnAgPSAwOyAgICAgICAgIC8qIEFkZCB0ZXJtaW5hdGluZyBudWxsIGJ5dGUgKi8KICAgICAgICAgaGVhZGVyX29mZnNldCArPSBoZWFkZXJfc2l6ZTsKIAotICAgICAgICBzdHJuY3B5KHBhdGggKyBsZW5ndGggKyAxLCBuYW1lLCBNQVhQQVRITEVOIC0gbGVuZ3RoIC0gMSk7CisgICAgICAgIGJvb3RzdHJhcCA9IDA7CisgICAgICAgIGlmIChmbGFncyAmIDB4MDgwMCkKKyAgICAgICAgICAgIGNoYXJzZXQgPSAidXRmLTgiOworICAgICAgICBlbHNlIGlmICghUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwLT5jb2RlY3NfaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgIC8qIER1cmluZyBib290c3RyYXAsIHdlIG1heSBuZWVkIHRvIGxvYWQgdGhlIGVuY29kaW5ncworICAgICAgICAgICAgICAgcGFja2FnZSBmcm9tIGEgWklQIGZpbGUuIEJ1dCB0aGUgY3A0MzcgZW5jb2RpbmcgaXMgaW1wbGVtZW50ZWQKKyAgICAgICAgICAgICAgIGluIFB5dGhvbiBpbiB0aGUgZW5jb2RpbmdzIHBhY2thZ2UuCiAKLSAgICAgICAgdCA9IFB5X0J1aWxkVmFsdWUoInNpaWlpaWlpIiwgcGF0aCwgY29tcHJlc3MsIGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgIEJyZWFrIG91dCBvZiB0aGlzIGRlcGVuZGVuY3kgYnkgYXNzdW1pbmcgdGhhdCB0aGUgcGF0aCB0bworICAgICAgICAgICAgICAgdGhlIGVuY29kaW5ncyBtb2R1bGUgaXMgQVNDSUktb25seS4gKi8KKyAgICAgICAgICAgIGNoYXJzZXQgPSAiYXNjaWkiOworICAgICAgICAgICAgYm9vdHN0cmFwID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjaGFyc2V0ID0gImNwNDM3IjsKKyAgICAgICAgbmFtZW9iaiA9IFB5VW5pY29kZV9EZWNvZGUobmFtZSwgbmFtZV9zaXplLCBjaGFyc2V0LCBOVUxMKTsKKyAgICAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKGJvb3RzdHJhcCkKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcCBpc3N1ZTogcHl0aG9uJWklaS56aXAgY29udGFpbnMgbm9uLUFTQ0lJICIKKyAgICAgICAgICAgICAgICAgICAgImZpbGVuYW1lcyB3aXRob3V0IHRoZSB1bmljb2RlIGZsYWciLAorICAgICAgICAgICAgICAgICAgICBQWV9NQUpPUl9WRVJTSU9OLCBQWV9NSU5PUl9WRVJTSU9OKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgUHlfVU5JQ09ERV9zdHJuY3B5KHBhdGggKyBsZW5ndGggKyAxLCBQeVVuaWNvZGVfQVNfVU5JQ09ERShuYW1lb2JqKSwgTUFYUEFUSExFTiAtIGxlbmd0aCAtIDEpOworCisgICAgICAgIHBhdGhvYmogPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUocGF0aCwgUHlfVU5JQ09ERV9zdHJsZW4ocGF0aCkpOworICAgICAgICBpZiAocGF0aG9iaiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgdCA9IFB5X0J1aWxkVmFsdWUoIk5paWlpaWlpIiwgcGF0aG9iaiwgY29tcHJlc3MsIGRhdGFfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplLCBmaWxlX29mZnNldCwgdGltZSwgZGF0ZSwgY3JjKTsKICAgICAgICAgaWYgKHQgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKGZpbGVzLCBuYW1lLCB0KTsKKyAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oZmlsZXMsIG5hbWVvYmosIHQpOworICAgICAgICBQeV9DTEVBUihuYW1lb2JqKTsKICAgICAgICAgUHlfREVDUkVGKHQpOwogICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtNzc0LDEyICs4NDQsMTMgQEAKICAgICB9CiAgICAgZmNsb3NlKGZwKTsKICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIHppcGltcG9ydDogZm91bmQgJWxkIG5hbWVzIGluICVzXG4iLAotICAgICAgICAgICAgY291bnQsIGFyY2hpdmUpOworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgemlwaW1wb3J0OiBmb3VuZCAlbGQgbmFtZXMgaW4gJVVcbiIsCisgICAgICAgICAgICBjb3VudCwgYXJjaGl2ZV9vYmopOwogICAgIHJldHVybiBmaWxlczsKIGVycm9yOgogICAgIGZjbG9zZShmcCk7CiAgICAgUHlfWERFQ1JFRihmaWxlcyk7CisgICAgUHlfWERFQ1JFRihuYW1lb2JqKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODIwLDcgKzg5MSw3IEBACiAvKiBHaXZlbiBhIHBhdGggdG8gYSBaaXAgZmlsZSBhbmQgYSB0b2NfZW50cnksIHJldHVybiB0aGUgKHVuY29tcHJlc3NlZCkKICAgIGRhdGEgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWdldF9kYXRhKGNoYXIgKmFyY2hpdmUsIFB5T2JqZWN0ICp0b2NfZW50cnkpCitnZXRfZGF0YShQeU9iamVjdCAqYXJjaGl2ZSwgUHlPYmplY3QgKnRvY19lbnRyeSkKIHsKICAgICBQeU9iamVjdCAqcmF3X2RhdGEsICpkYXRhID0gTlVMTCwgKmRlY29tcHJlc3M7CiAgICAgY2hhciAqYnVmOwpAQCAtODI4LDIwICs4OTksMjAgQEAKICAgICBpbnQgZXJyOwogICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CiAgICAgbG9uZyBsOwotICAgIGNoYXIgKmRhdGFwYXRoOworICAgIFB5T2JqZWN0ICpkYXRhcGF0aDsKICAgICBsb25nIGNvbXByZXNzLCBkYXRhX3NpemUsIGZpbGVfc2l6ZSwgZmlsZV9vZmZzZXQsIGJ5dGVzX3NpemU7CiAgICAgbG9uZyB0aW1lLCBkYXRlLCBjcmM7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUodG9jX2VudHJ5LCAic2xsbGxsbGwiLCAmZGF0YXBhdGgsICZjb21wcmVzcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUodG9jX2VudHJ5LCAiT2xsbGxsbGwiLCAmZGF0YXBhdGgsICZjb21wcmVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfc2l6ZSwgJmZpbGVfc2l6ZSwgJmZpbGVfb2Zmc2V0LCAmdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGUsICZjcmMpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZwID0gZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKCFmcCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSU9FcnJvciwKLSAgICAgICAgICAgInppcGltcG9ydDogY2FuIG5vdCBvcGVuIGZpbGUgJXMiLCBhcmNoaXZlKTsKKyAgICAgICAgICAgInppcGltcG9ydDogY2FuIG5vdCBvcGVuIGZpbGUgJVUiLCBhcmNoaXZlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC04NTEsNyArOTIyLDcgQEAKICAgICBpZiAobCAhPSAweDA0MDM0QjUwKSB7CiAgICAgICAgIC8qIEJhZDogTG9jYWwgRmlsZSBIZWFkZXIgKi8KICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKICAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOwogICAgICAgICBmY2xvc2UoZnApOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTk2Myw3ICsxMDM0LDcgQEAKICAgICBpZiAoIVB5Q29kZV9DaGVjayhjb2RlKSkgewogICAgICAgICBQeV9ERUNSRUYoY29kZSk7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgImNvbXBpbGVkIG1vZHVsZSAlLjIwMHMgaXMgbm90IGEgY29kZSBvYmplY3QiLAorICAgICAgICAgICAgICJjb21waWxlZCBtb2R1bGUgJXMgaXMgbm90IGEgY29kZSBvYmplY3QiLAogICAgICAgICAgICAgIHBhdGhuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTA4MCwyNCArMTE1MSwyMyBAQAogICAgICAgICAgICAgICAgICAgIHRpbWVfdCBtdGltZSwgUHlPYmplY3QgKnRvY19lbnRyeSkKIHsKICAgICBQeU9iamVjdCAqZGF0YSwgKmNvZGU7Ci0gICAgY2hhciAqbW9kcGF0aDsKLSAgICBjaGFyICphcmNoaXZlID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzZWxmLT5hcmNoaXZlKTsKKyAgICBQeU9iamVjdCAqbW9kcGF0aDsKIAotICAgIGlmIChhcmNoaXZlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZGF0YSA9IGdldF9kYXRhKGFyY2hpdmUsIHRvY19lbnRyeSk7CisgICAgZGF0YSA9IGdldF9kYXRhKHNlbGYtPmFyY2hpdmUsIHRvY19lbnRyeSk7CiAgICAgaWYgKGRhdGEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtb2RwYXRoID0gX1B5VW5pY29kZV9Bc1N0cmluZyhQeVR1cGxlX0dldEl0ZW0odG9jX2VudHJ5LCAwKSk7CisgICAgbW9kcGF0aCA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoUHlUdXBsZV9HZXRJdGVtKHRvY19lbnRyeSwgMCkpOworICAgIGlmIChtb2RwYXRoID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGRhdGEpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAoaXNieXRlY29kZSkgewotICAgICAgICBjb2RlID0gdW5tYXJzaGFsX2NvZGUobW9kcGF0aCwgZGF0YSwgbXRpbWUpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgY29kZSA9IGNvbXBpbGVfc291cmNlKG1vZHBhdGgsIGRhdGEpOwotICAgIH0KKyAgICBpZiAoaXNieXRlY29kZSkKKyAgICAgICAgY29kZSA9IHVubWFyc2hhbF9jb2RlKFB5Qnl0ZXNfQVNfU1RSSU5HKG1vZHBhdGgpLCBkYXRhLCBtdGltZSk7CisgICAgZWxzZQorICAgICAgICBjb2RlID0gY29tcGlsZV9zb3VyY2UoUHlCeXRlc19BU19TVFJJTkcobW9kcGF0aCksIGRhdGEpOworICAgIFB5X0RFQ1JFRihtb2RwYXRoKTsKICAgICBQeV9ERUNSRUYoZGF0YSk7CiAgICAgcmV0dXJuIGNvZGU7CiB9CkBAIC0xMTA2LDcgKzExNzYsNyBAQAogICAgJ2Z1bGxuYW1lJy4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfbW9kdWxlX2NvZGUoWmlwSW1wb3J0ZXIgKnNlbGYsIGNoYXIgKmZ1bGxuYW1lLAotICAgICAgICAgICAgICAgIGludCAqcF9pc3BhY2thZ2UsIGNoYXIgKipwX21vZHBhdGgpCisgICAgICAgICAgICAgICAgaW50ICpwX2lzcGFja2FnZSwgUHlPYmplY3QgKipwX21vZHBhdGgpCiB7CiAgICAgUHlPYmplY3QgKnRvY19lbnRyeTsKICAgICBjaGFyICpzdWJuYW1lLCBwYXRoW01BWFBBVEhMRU4gKyAxXTsKQEAgLTExMTUsNyArMTE4NSw3IEBACiAKICAgICBzdWJuYW1lID0gZ2V0X3N1Ym5hbWUoZnVsbG5hbWUpOwogCi0gICAgbGVuID0gbWFrZV9maWxlbmFtZShfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPnByZWZpeCksIHN1Ym5hbWUsIHBhdGgpOworICAgIGxlbiA9IG1ha2VfZmlsZW5hbWUoc2VsZi0+cHJlZml4LCBzdWJuYW1lLCBwYXRoLCBzaXplb2YocGF0aCkpOwogICAgIGlmIChsZW4gPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTEyNCw5ICsxMTk0LDggQEAKIAogICAgICAgICBzdHJjcHkocGF0aCArIGxlbiwgenNvLT5zdWZmaXgpOwogICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcgPiAxKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgdHJ5aW5nICVzJWMlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+YXJjaGl2ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KVNFUCwgcGF0aCk7CisgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgdHJ5aW5nICVVJWMlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCAoaW50KVNFUCwgcGF0aCk7CiAgICAgICAgIHRvY19lbnRyeSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHNlbGYtPmZpbGVzLCBwYXRoKTsKICAgICAgICAgaWYgKHRvY19lbnRyeSAhPSBOVUxMKSB7CiAgICAgICAgICAgICB0aW1lX3QgbXRpbWUgPSAwOwpAQCAtMTE0NiwxMyArMTIxNSwxNCBAQAogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb2RlKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChjb2RlICE9IE5VTEwgJiYgcF9tb2RwYXRoICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgKnBfbW9kcGF0aCA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbSh0b2NfZW50cnksIDApKTsKKyAgICAgICAgICAgIGlmIChjb2RlICE9IE5VTEwgJiYgcF9tb2RwYXRoICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqcF9tb2RwYXRoID0gUHlUdXBsZV9HZXRJdGVtKHRvY19lbnRyeSwgMCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKCpwX21vZHBhdGgpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGNvZGU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgZmluZCBtb2R1bGUgJyUuMjAwcyciLCBmdWxsbmFtZSk7CisgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3QgZmluZCBtb2R1bGUgJyVzJyIsIGZ1bGxuYW1lKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKaW5kZXggN2Y2ODY5ZC4uZjMxMGJiMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0NoYW5nZUxvZworKysgYi9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMzU5IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMi41ICgxOSBBcHIgMjAxMCkKKy0gRGlzYWJsZSB2aXNpYmlsaXR5IGF0dHJpYnV0ZSBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIERlZmF1bHQgdG8gbGliZGlyIGFzIHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW05pZWRlcl0KKy0gVXBkYXRlIGNvcHlyaWdodCBkYXRlcyBvbiBtb2RpZmllZCBzb3VyY2UgZmlsZXMKKy0gVXBkYXRlIHRyZWVzLmMgdG8gYmUgYWJsZSB0byBnZW5lcmF0ZSBtb2RpZmllZCB0cmVlcy5oCistIEV4aXQgY29uZmlndXJlIGZvciBNaW5HVywgc3VnZ2VzdGluZyB3aW4zMi9NYWtlZmlsZS5nY2MKKworQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKKy0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQorLSBTZXQgTERGTEFHUyBpbiBNYWtlZmlsZS5pbiBbQmFyLUxldl0KKy0gQXZvaWQgbWtkaXIgb2JqcyByYWNlIGNvbmRpdGlvbiBpbiBNYWtlZmlsZS5pbiBbQm93bGVyXQorLSBBZGQgWkxJQl9JTlRFUk5BTCBpbiBmcm9udCBvZiBpbnRlcm5hbCBpbnRlci1tb2R1bGUgZnVuY3Rpb25zIGFuZCBhcnJheXMKKy0gRGVmaW5lIFpMSUJfSU5URVJOQUwgdG8gaGlkZSBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGFycmF5cyBmb3IgR05VIEMKKy0gRG9uJ3QgdXNlIGhpZGRlbiBhdHRyaWJ1dGUgd2hlbiBpdCBpcyBhIHdhcm5pbmcgZ2VuZXJhdG9yIChlLmcuIFNvbGFyaXMpCisKK0NoYW5nZXMgaW4gMS4yLjQuNCAoMTggQXByIDIwMTApCistIEZpeCBDUk9TU19QUkVGSVggZXhlY3V0YWJsZSB0ZXN0aW5nLCBDSE9TVCBleHRyYWN0LCBtaW5ndyogW1Rvcm9rXQorLSBVbmRlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIGluIHpjb25mLmggaWYgaXQgaXMgemVybywgYnV0IG5vdCBpZiBlbXB0eQorLSBUcnkgdG8gdXNlIGJhc2ggb3Iga3NoIHJlZ2FyZGxlc3Mgb2YgZnVuY3Rpb25hbGl0eSBvZiAvYmluL3NoCistIEZpeCBjb25maWd1cmUgaW5jb21wYXRpYmlsaXR5IHdpdGggTmV0QlNEIHNoCistIFJlbW92ZSBhdHRlbXB0IHRvIHJ1biB1bmRlciBiYXNoIG9yIGtzaCBzaW5jZSBoYXZlIGJldHRlciBOZXRCU0QgZml4CistIEZpeCB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIE1pbkdXIFtCYXItTGV2XQorLSBBZGQgZGlhZ25vc3RpYyBtZXNzYWdlcyB3aGVuIHVzaW5nIENST1NTX1BSRUZJWCBpbiBjb25maWd1cmUKKy0gQWRkZWQgLS1zaGFyZWRsaWJkaXIgb3B0aW9uIHRvIGNvbmZpZ3VyZSBbV2VpZ2VsdF0KKy0gVXNlIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZSB3aGVuIGF2YWlsYWJsZSBbRnJ5c2luZ2VyXQorCitDaGFuZ2VzIGluIDEuMi40LjMgKDEwIEFwciAyMDEwKQorLSBPbmx5IHVzZSBDUk9TU19QUkVGSVggaW4gY29uZmlndXJlIGZvciBhciBhbmQgcmFubGliIGlmIHRoZXkgZXhpc3QKKy0gVXNlIENST1NTX1BSRUZJWCBmb3Igbm0gW0Jhci1MZXZdCistIEFzc3VtZSBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQgaXMgZXF1aXZhbGVudCB0byB0cnVlCistIEF2b2lkIHVzZSBvZiB1bmRlZmluZWQgc3ltYm9scyBpbiAjaWYgd2l0aCAmJiBhbmQgfHwKKy0gTWFrZSAqNjQgcHJvdG90eXBlcyBpbiBnemd1dHMuaCBjb25zaXN0ZW50IHdpdGggZnVuY3Rpb25zCistIEFkZCAtc2hhcmVkIGxvYWQgb3B0aW9uIGZvciBNaW5HVyBpbiBjb25maWd1cmUgW0Jvd2xlcl0KKy0gTW92ZSB6X29mZjY0X3QgdG8gcHVibGljIGludGVyZmFjZSwgdXNlIGluc3RlYWQgb2Ygb2ZmNjRfdAorLSBSZW1vdmUgISBmcm9tIHNoZWxsIHRlc3QgaW4gY29uZmlndXJlIChub3QgcG9ydGFibGUgdG8gU29sYXJpcykKKy0gQ2hhbmdlICswIG1hY3JvIHRlc3RzIHRvIC0wIGZvciBwb3NzaWJseSBpbmNyZWFzZWQgcG9ydGFiaWxpdHkKKworQ2hhbmdlcyBpbiAxLjIuNC4yICg5IEFwciAyMDEwKQorLSBBZGQgY29uc2lzdGVudCBjYXJyaWFnZSByZXR1cm5zIHRvIHJlYWRtZS50eHQncyBpbiBtYXNteDg2IGFuZCBtYXNteDY0CistIFJlYWxseSBwcm92aWRlIHByb3RvdHlwZXMgZm9yICo2NCBmdW5jdGlvbnMgd2hlbiBidWlsZGluZyB3aXRob3V0IExGUworLSBPbmx5IGRlZmluZSB1bmxpbmsoKSBpbiBtaW5pZ3ppcC5jIGlmIHVuaXN0ZC5oIG5vdCBpbmNsdWRlZAorLSBVcGRhdGUgUkVBRE1FIHRvIHBvaW50IHRvIGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGZpbGVzCistIE1vdmUgcHJvamVjdHMvdmM2IHRvIG9sZC8gYW5kIHJlbW92ZSBwcm9qZWN0cy8KKy0gSW5jbHVkZSBzdGRsaWIuaCBpbiBtaW5pZ3ppcC5jIGZvciBzZXRtb2RlKCkgZGVmaW5pdGlvbiB1bmRlciBXaW5DRQorLSBDbGVhbiB1cCBhc3NlbWJsZXIgYnVpbGRzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbUm93ZV0KKy0gSW5jbHVkZSBzeXMvdHlwZXMuaCBmb3IgTWljcm9zb2Z0IGZvciBvZmZfdCBkZWZpbml0aW9uCistIEZpeCBtZW1vcnkgbGVhayBvbiBlcnJvciBpbiBnel9vcGVuKCkKKy0gU3ltYm9saXplIG5tIGFzICROTSBpbiBjb25maWd1cmUgW1dlaWdlbHRdCistIFVzZSBURVNUX0xEU0hBUkVEIGluc3RlYWQgb2YgTERTSEFSRUQgdG8gbGluayB0ZXN0IHByb2dyYW1zIFtXZWlnZWx0XQorLSBBZGQgKzAgdG8gX0ZJTEVfT0ZGU0VUX0JJVFMgYW5kIF9MRlM2NF9MQVJHRUZJTEUgaW4gY2FzZSBub3QgZGVmaW5lZAorLSBGaXggYnVnIGluIGd6ZW9mKCkgdG8gdGFrZSBpbnRvIGFjY291bnQgdW51c2VkIGlucHV0IGRhdGEKKy0gQXZvaWQgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcyB3aXRoIHZhcmlhYmxlcyBpbiBwdWZmLmMKKy0gVXBkYXRlZCB3aW4zMi9SRUFETUUtV0lOMzIudHh0IFtSb3dlXQorCitDaGFuZ2VzIGluIDEuMi40LjEgKDI4IE1hciAyMDEwKQorLSBSZW1vdmUgdGhlIHVzZSBvZiBbYS16XSBjb25zdHJ1Y3RzIGZvciBzZWQgaW4gY29uZmlndXJlIFtnZW50b28gMzEwMjI1XQorLSBSZW1vdmUgJChTSEFSRURMSUIpIGZyb20gTElCUyBpbiBNYWtlZmlsZS5pbiBbQ3JlZWNoXQorLSBSZXN0b3JlICJmb3IgZGVidWdnaW5nIiBjb21tZW50IG9uIHNwcmludGYoKSBpbiBnemxpYi5jCistIFJlbW92ZSBmZG9wZW4gZm9yIE1WUyBmcm9tIGd6Z3V0cy5oCistIFB1dCBuZXcgUkVBRE1FLVdJTjMyLnR4dCBpbiB3aW4zMiBbUm93ZV0KKy0gQWRkIGNoZWNrIGZvciBzaGVsbCB0byBjb25maWd1cmUgYW5kIGludm9rZSBhbm90aGVyIHNoZWxsIGlmIG5lZWRlZAorLSBGaXggYmlnIGZhdCBzdGlua2luZyBidWcgaW4gZ3pzZWVrKCkgb24gdW5jb21wcmVzc2VkIGZpbGVzCistIFJlbW92ZSB2ZXN0aWdpYWwgRl9PUEVONjQgZGVmaW5lIGluIHp1dGlsLmgKKy0gU2V0IGFuZCBjaGVjayB0aGUgdmFsdWUgb2YgX0xBUkdFRklMRV9TT1VSQ0UgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKy0gQXZvaWQgZXJyb3JzIG9uIG5vbi1MRlMgc3lzdGVtcyB3aGVuIGFwcGxpY2F0aW9ucyBkZWZpbmUgTEZTIG1hY3JvcworLSBTZXQgRVhFIHRvICIuZXhlIiBpbiBjb25maWd1cmUgZm9yIE1JTkdXIFtLYWhsZV0KKy0gTWF0Y2ggY3JjMzIoKSBpbiBjcmMzMi5jIGV4YWN0bHkgdG8gdGhlIHByb3RvdHlwZSBpbiB6bGliLmggW1NoZXJyaWxsXQorLSBBZGQgcHJlZml4IGZvciBjcm9zcy1jb21waWxhdGlvbiBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIEFkZCBETEwgaW5zdGFsbCBpbiB3aW4zMi9tYWtlZmlsZS5nY2MgW0Jhci1MZXZdCistIEFsbG93IExpbnV4KiBvciBsaW51eCogZnJvbSB1bmFtZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFsbG93IGxkY29uZmlnIHRvIGJlIHJlZGVmaW5lZCBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluIFtCYXItTGV2XQorLSBBZGQgY3Jvc3MtY29tcGlsYXRpb24gcHJlZml4ZXMgdG8gY29uZmlndXJlIFtCYXItTGV2XQorLSBNYXRjaCB0eXBlIGV4YWN0bHkgaW4gZ3pfbG9hZCgpIGludm9jYXRpb24gaW4gZ3pyZWFkLmMKKy0gTWF0Y2ggdHlwZSBleGFjdGx5IG9mIHpjYWxsb2MoKSBpbiB6dXRpbC5jIHRvIHpsaWIuaCBhbGxvY19mdW5jCistIFByb3ZpZGUgcHJvdG90eXBlcyBmb3IgKjY0IGZ1bmN0aW9ucyB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMKKy0gRG9uJ3QgdXNlIC1sYyB3aGVuIGxpbmtpbmcgc2hhcmVkIGxpYnJhcnkgb24gTWluR1cKKy0gUmVtb3ZlIGVycm5vLmggY2hlY2sgaW4gY29uZmlndXJlIGFuZCB2ZXN0aWdpYWwgZXJybm8gY29kZSBpbiB6dXRpbC5oCisKK0NoYW5nZXMgaW4gMS4yLjQgKDE0IE1hciAyMDEwKQorLSBGaXggVkVSMyBleHRyYWN0aW9uIGluIGNvbmZpZ3VyZSBmb3Igbm8gZm91cnRoIHN1YnZlcnNpb24KKy0gVXBkYXRlIHpsaWIuMywgYWRkIGRvY3MgdG8gTWFrZWZpbGUuaW4gdG8gbWFrZSAucGRmIG91dCBvZiBpdAorLSBBZGQgemxpYi4zLnBkZiB0byBkaXN0cmlidXRpb24KKy0gRG9uJ3Qgc2V0IGVycm9yIGNvZGUgaW4gZ3plcnJvcigpIGlmIHBhc3NlZCBwb2ludGVyIGlzIE5VTEwKKy0gQXBwbHkgZGVzdGluYXRpb24gZGlyZWN0b3J5IGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIE1vdmUgI2NtYWtlZGVmaW5lJ3MgdG8gYSBuZXcgemNvbmYuaW4uY21ha2VpbgorLSBSZXN0b3JlIHpjb25mLmggZm9yIGJ1aWxkcyB0aGF0IGRvbid0IHVzZSBjb25maWd1cmUgb3IgY21ha2UKKy0gQWRkIGRpc3RjbGVhbiB0byBkdW1teSBNYWtlZmlsZSBmb3IgY29udmVuaWVuY2UKKy0gVXBkYXRlIGFuZCBpbXByb3ZlIElOREVYLCBSRUFETUUsIGFuZCBGQVEKKy0gVXBkYXRlIENNYWtlTGlzdHMudHh0IGZvciB0aGUgcmV0dXJuIG9mIHpjb25mLmggW0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvdnN0dWRpby92YzkgYW5kIHZjMTAgW1ZvbGxhbnRdCistIENoYW5nZSBsaWJ6LmRsbC5hIGJhY2sgdG8gbGliemRsbC5hIGluIHdpbjMyL01ha2VmaWxlLmdjYworLSBBcHBseSBsaWNlbnNlIGFuZCByZWFkbWUgY2hhbmdlcyB0byBjb250cmliL2FzbTY4NiBbUmFpdGVyXQorLSBDaGVjayBmaWxlIG5hbWUgbGVuZ3RocyBhbmQgYWRkIC1jIG9wdGlvbiBpbiBtaW5pZ3ppcC5jIFtMaV0KKy0gVXBkYXRlIGNvbnRyaWIvYW1kNjQgYW5kIGNvbnRyaWIvbWFzbXg4Ni8gW1ZvbGxhbnRdCistIEF2b2lkIHVzZSBvZiAiZW9mIiBwYXJhbWV0ZXIgaW4gdHJlZXMuYyB0byBub3Qgc2hhZG93IGxpYnJhcnkgdmFyaWFibGUKKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBmb3IgcmVtb3ZhbCBvZiB6bGliZGVmcy5oIFtaaW5zZXJdCistIFVwZGF0ZSBhc3NlbWJsZXIgY29kZSBhbmQgdnN0dWRpbyBwcm9qZWN0cyBpbiBjb250cmliIFtWb2xsYW50XQorLSBSZW1vdmUgb3V0ZGF0ZWQgYXNzZW1ibGVyIGNvZGUgY29udHJpYi9tYXNtNjg2IGFuZCBjb250cmliL2FzbTU4NgorLSBSZW1vdmUgb2xkIHZjNyBhbmQgdmM4IGZyb20gY29udHJpYi92c3R1ZGlvCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MsIGFkZCBaTElCX1ZFUl9TVUJSRVZJU0lPTiBbUm93ZV0KKy0gRml4IG1lbW9yeSBsZWFrcyBpbiBnemNsb3NlX3IoKSBhbmQgZ3pjbG9zZV93KCksIGZpbGUgbGVhayBpbiBnel9vcGVuKCkKKy0gQWRkIGNvbnRyaWIvZ2NjX2d2bWF0NjQgZm9yIGxvbmdlc3RfbWF0Y2ggYW5kIGluZmxhdGVfZmFzdCBbVm9sbGFudF0KKy0gUmVtb3ZlICo2NCBmdW5jdGlvbnMgZnJvbSB3aW4zMi96bGliLmRlZiAodGhleSdyZSBub3QgNjQtYml0IHlldCkKKy0gRml4IGJ1ZyBpbiB2b2lkLXJldHVybmluZyB2c3ByaW50ZigpIGNhc2UgaW4gZ3p3cml0ZS5jCistIEZpeCBuYW1lIGNoYW5nZSBmcm9tIGluZmxhdGUuaCBpbiBjb250cmliL2luZmxhdGU4Ni9pbmZmYXM4Ni5jCistIENoZWNrIGlmIHRlbXBvcmFyeSBmaWxlIGV4aXN0cyBiZWZvcmUgcmVtb3ZpbmcgaW4gbWFrZV92bXMuY29tIFtaaW5zZXJdCistIEZpeCBtYWtlIGluc3RhbGwgYW5kIHVuaW5zdGFsbCBmb3IgLS1zdGF0aWMgb3B0aW9uCistIEZpeCB1c2FnZSBvZiBfTVNDX1ZFUiBpbiBnemd1dHMuaCBhbmQgenV0aWwuaCBbVHJ1dGFdCistIFVwZGF0ZSByZWFkbWUudHh0IGluIGNvbnRyaWIvbWFzbXg2NCBhbmQgbWFzbXg4NiB0byBhc3NlbWJsZQorCitDaGFuZ2VzIGluIDEuMi4zLjkgKDIxIEZlYiAyMDEwKQorLSBFeHB1bmdlIGd6aW8uYworLSBNb3ZlIGFzNDAwIGJ1aWxkIGluZm9ybWF0aW9uIHRvIG9sZAorLSBGaXggdXBkYXRlcyBpbiBjb250cmliL21pbml6aXAgYW5kIGNvbnRyaWIvdnN0dWRpbworLSBBZGQgY29uc3QgdG8gdnNucHJpbnRmIHRlc3QgaW4gY29uZmlndXJlIHRvIGF2b2lkIHdhcm5pbmdzIFtXZWlnZWx0XQorLSBEZWxldGUgemNvbmYuaCAobWFkZSBieSBjb25maWd1cmUpIFtXZWlnZWx0XQorLSBDaGFuZ2UgemNvbmYuaW4uaCB0byB6Y29uZi5oLmluIHBlciBjb252ZW50aW9uIFtXZWlnZWx0XQorLSBDaGVjayBmb3IgTlVMTCBidWYgaW4gZ3pnZXRzKCkKKy0gUmV0dXJuIGVtcHR5IHN0cmluZyBmb3IgZ3pnZXRzKCkgd2l0aCBsZW4gPT0gMSAobGlrZSBmZ2V0cygpKQorLSBGaXggZGVzY3JpcHRpb24gb2YgZ3pnZXRzKCkgaW4gemxpYi5oIGZvciBlbmQtb2YtZmlsZSwgTlVMTCByZXR1cm4KKy0gVXBkYXRlIG1pbml6aXAgdG8gMS4xIFtWb2xsYW50XQorLSBBdm9pZCBNU1ZDIGxvc3Mgb2YgZGF0YSB3YXJuaW5ncyBpbiBnenJlYWQuYywgZ3p3cml0ZS5jCistIE5vdGUgaW4gemxpYi5oIHRoYXQgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGZyb20gRU9GCistIFJlbW92ZSB1c2Ugb2Ygc25wcmludGYoKSBmcm9tIGd6bGliLmMKKy0gRml4IGJ1ZyBpbiBnenNlZWsoKQorLSBVcGRhdGUgY29udHJpYi92c3R1ZGlvLCBhZGRpbmcgdmM5IGFuZCB2YzEwIFtLdW5vLCBWb2xsYW50XQorLSBGaXggemNvbmYuaCBnZW5lcmF0aW9uIGluIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIEltcHJvdmUgY29tbWVudHMgaW4gemNvbmYuaCB3aGVyZSBtb2RpZmllZCBieSBjb25maWd1cmUKKworQ2hhbmdlcyBpbiAxLjIuMy44ICgxMyBGZWIgMjAxMCkKKy0gQ2xlYW4gdXAgdGV4dCBmaWxlcyAodGFicywgdHJhaWxpbmcgd2hpdGVzcGFjZSwgZXRjLikgW09iZXJodW1lcl0KKy0gVXNlIHpfb2ZmNjRfdCBpbiBnel96ZXJvKCkgYW5kIGd6X3NraXAoKSB0byBtYXRjaCBzdGF0ZS0+c2tpcAorLSBBdm9pZCBjb21wYXJpc29uIHByb2JsZW0gd2hlbiBzaXplb2YoaW50KSA9PSBzaXplb2Yoel9vZmY2NF90KQorLSBSZXZlcnQgdG8gTWFrZWZpbGUuaW4gZnJvbSAxLjIuMy42IChsaXZlIHdpdGggdGhlIGNsdXR0ZXIpCistIEZpeCBtaXNzaW5nIGVycm9yIHJldHVybiBpbiBnemZsdXNoKCksIGFkZCB6bGliLmggbm90ZQorLSBBZGQgKjY0IGZ1bmN0aW9ucyB0byB6bGliLm1hcCBbTGV2aW5dCistIEZpeCBzaWduZWQvdW5zaWduZWQgY29tcGFyaXNvbiBpbiBnel9jb21wKCkKKy0gVXNlIFNGTEFHUyB3aGVuIHRlc3Rpbmcgc2hhcmVkIGxpbmtpbmcgaW4gY29uZmlndXJlCistIEFkZCAtLTY0IG9wdGlvbiB0byAuL2NvbmZpZ3VyZSB0byB1c2UgLW02NCB3aXRoIGdjYworLSBGaXggLi9jb25maWd1cmUgLS1oZWxwIHRvIGNvcnJlY3RseSBuYW1lIG9wdGlvbnMKKy0gSGF2ZSBtYWtlIGZhaWwgaWYgYSB0ZXN0IGZhaWxzIFtMZXZpbl0KKy0gQXZvaWQgYnVmZmVyIG92ZXJydW4gaW4gY29udHJpYi9tYXNteDY0L2d2bWF0NjQuYXNtIFtTaW1wc29uXQorLSBSZW1vdmUgYXNzZW1ibGVyIG9iamVjdCBmaWxlcyBmcm9tIGNvbnRyaWIKKworQ2hhbmdlcyBpbiAxLjIuMy43ICgyNCBKYW4gMjAxMCkKKy0gQWx3YXlzIGd6b3BlbigpIHdpdGggT19MQVJHRUZJTEUgaWYgYXZhaWxhYmxlCistIEZpeCBnemRpcmVjdCgpIHRvIHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgZ3pvcGVuKCkgb3IgZ3pkb3BlbigpCistIE1ha2UgZ3pkaXJlY3QoKSBtb3JlIHByZWNpc2Ugd2hlbiB0aGUgc3RhdGUgY2hhbmdlcyB3aGlsZSByZWFkaW5nCistIEltcHJvdmUgemxpYi5oIGRvY3VtZW50YXRpb24gaW4gbWFueSBwbGFjZXMKKy0gQ2F0Y2ggbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBpbiBnel9vcGVuKCkKKy0gQ29tcGxldGUgY2xvc2Ugb3BlcmF0aW9uIGlmIHNlZWsgZm9yd2FyZCBpbiBnemNsb3NlX3coKSBmYWlscworLSBSZXR1cm4gWl9FUlJOTyBmcm9tIGd6Y2xvc2VfcigpIGlmIGNsb3NlKCkgZmFpbHMKKy0gUmV0dXJuIFpfU1RSRUFNX0VSUk9SIGluc3RlYWQgb2YgRU9GIGZvciBnemNsb3NlKCkgYmVpbmcgcGFzc2VkIE5VTEwKKy0gUmV0dXJuIHplcm8gZm9yIGd6d3JpdGUoKSBlcnJvcnMgdG8gbWF0Y2ggemxpYi5oIGRlc2NyaXB0aW9uCistIFJldHVybiAtMSBvbiBnenB1dHMoKSBlcnJvciB0byBtYXRjaCB6bGliLmggZGVzY3JpcHRpb24KKy0gQWRkIHpjb25mLmluLmggdG8gYWxsb3cgcmVjb3ZlcnkgZnJvbSBjb25maWd1cmUgbW9kaWZpY2F0aW9uIFtXZWlnZWx0XQorLSBGaXggc3RhdGljIGxpYnJhcnkgcGVybWlzc2lvbnMgaW4gTWFrZWZpbGUuaW4gW1dlaWdlbHRdCistIEF2b2lkIHdhcm5pbmdzIGluIGNvbmZpZ3VyZSB0ZXN0cyB0aGF0IGhpZGUgZnVuY3Rpb25hbGl0eSBbV2VpZ2VsdF0KKy0gQWRkICpCU0QgYW5kIERyYWdvbkZseSB0byBMaW51eCBjYXNlIGluIGNvbmZpZ3VyZSBbZ2VudG9vIDEyMzU3MV0KKy0gQ2hhbmdlIGxpYnpkbGwuYSB0byBsaWJ6LmRsbC5hIGluIHdpbjMyL01ha2VmaWxlLmdjYyBbZ2VudG9vIDI4ODIxMl0KKy0gQXZvaWQgYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBmb3IgZmlyc3QgaW5mbGF0ZVJlc2V0MiBjYWxsIFtHb21lc10KKy0gS2VlcCBvYmplY3QgZmlsZXMgaW4gc3ViZGlyZWN0b3JpZXMgdG8gcmVkdWNlIHRoZSBjbHV0dGVyIHNvbWV3aGF0CistIFJlbW92ZSBkZWZhdWx0IE1ha2VmaWxlIGFuZCB6bGliZGVmcy5oLCBhZGQgZHVtbXkgTWFrZWZpbGUKKy0gQWRkIG5ldyBleHRlcm5hbCBmdW5jdGlvbnMgdG8gWl9QUkVGSVgsIHJlbW92ZSBkdXBsaWNhdGVzLCB6X3pfIC0+IHpfCistIFJlbW92ZSB6bGliZGVmcy5oIGNvbXBsZXRlbHkgLS0gbW9kaWZ5IHpjb25mLmggaW5zdGVhZAorCitDaGFuZ2VzIGluIDEuMi4zLjYgKDE3IEphbiAyMDEwKQorLSBBdm9pZCB2b2lkICogYXJpdGhtZXRpYyBpbiBnenJlYWQuYyBhbmQgZ3p3cml0ZS5jCistIE1ha2UgY29tcGlsZXJzIGhhcHBpZXIgd2l0aCBjb25zdCBjaGFyICogZm9yIGd6X2Vycm9yIG1lc3NhZ2UKKy0gQXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nIGluIGluZmxhdGUuYworLSBBdm9pZCBzaWduZWQtdW5zaWduZWQgY29tcGFyaXNvbiB3YXJuaW5nIGluIGluZmxhdGUuYworLSBJbmRlbnQgI3ByYWdtYSdzIGZvciB0cmFkaXRpb25hbCBDCistIEZpeCB1c2FnZSBvZiBzdHJ3aW5lcnJvcigpIGluIGdsaWIuYywgY2hhbmdlIHRvIGd6X3N0cndpbmVycm9yKCkKKy0gQ29ycmVjdCBlbWFpbCBhZGRyZXNzIGluIGNvbmZpZ3VyZSBmb3Igc3lzdGVtIG9wdGlvbnMKKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBhbmQgYWRkIG1ha2Vfdm1zLmNvbSB0byBjb250cmliL21pbml6aXAgW1ppbnNlcl0KKy0gVXBkYXRlIHpsaWIubWFwIFtCcm93bl0KKy0gRml4IE1ha2VmaWxlLmluIGZvciBTb2xhcmlzIDEwIG1ha2Ugb2YgZXhhbXBsZTY0IGFuZCBtaW5pemlwNjQgW1Rvcm9rXQorLSBBcHBseSB2YXJpb3VzIGZpeGVzIHRvIENNYWtlTGlzdHMudHh0IFtMb3dtYW5dCistIEFkZCBjaGVja3Mgb24gbGVuIGluIGd6cmVhZCgpIGFuZCBnendyaXRlKCkKKy0gQWRkIGVycm9yIG1lc3NhZ2UgZm9yIG5vIG1vcmUgcm9vbSBmb3IgZ3p1bmdldGMoKQorLSBSZW1vdmUgemxpYiB2ZXJzaW9uIGNoZWNrIGluIGd6d3JpdGUoKQorLSBEZWZlciBjb21wcmVzc2lvbiBvZiBnenByaW50ZigpIHJlc3VsdCB1bnRpbCBuZWVkIHRvCistIFVzZSBzbnByaW50ZigpIGluIGd6ZG9wZW4oKSBpZiBhdmFpbGFibGUKKy0gUmVtb3ZlIFVTRV9NTUFQIGNvbmZpZ3VyYXRpb24gZGV0ZXJtaW5hdGlvbiAob25seSB1c2VkIGJ5IG1pbmlnemlwKQorLSBSZW1vdmUgZXhhbXBsZXMvcGlnei5jIChhdmFpbGFibGUgc2VwYXJhdGVseSkKKy0gVXBkYXRlIGV4YW1wbGVzL2d1bi5jIHRvIDEuNgorCitDaGFuZ2VzIGluIDEuMi4zLjUgKDggSmFuIDIwMTApCistIEFkZCBzcGFjZSBhZnRlciAjaWYgaW4genV0aWwuaCBmb3Igc29tZSBjb21waWxlcnMKKy0gRml4IHJlbGF0aXZlbHkgaGFybWxlc3MgYnVnIGluIGRlZmxhdGVfZmFzdCgpIFtFeGFyZXZza3ldCistIEZpeCBzYW1lIHByb2JsZW0gaW4gZGVmbGF0ZV9zbG93KCkKKy0gQWRkICQoU0hBUkVETElCVikgdG8gTElCUyBpbiBNYWtlZmlsZS5pbiBbQnJvd25dCistIEFkZCBkZWZsYXRlX3JsZSgpIGZvciBmYXN0ZXIgWl9STEUgc3RyYXRlZ3kgcnVuLWxlbmd0aCBlbmNvZGluZworLSBBZGQgZGVmbGF0ZV9odWZmKCkgZm9yIGZhc3RlciBaX0hVRkZNQU5fT05MWSBlbmNvZGluZworLSBDaGFuZ2UgbmFtZSBvZiAid3JpdGUiIHZhcmlhYmxlIGluIGluZmZhc3QuYyB0byBhdm9pZCBsaWJyYXJ5IGNvbGxpc2lvbnMKKy0gRml4IHByZW1hdHVyZSBFT0YgZnJvbSBnenJlYWQoKSBpbiBnemlvLmMgW0Jyb3duXQorLSBVc2UgemxpYiBoZWFkZXIgd2luZG93IHNpemUgaWYgd2luZG93Qml0cyBpcyAwIGluIGluZmxhdGVJbml0MigpCistIFJlbW92ZSBjb21wcmVzc0JvdW5kKCkgY2FsbCBpbiBkZWZsYXRlLmMgdG8gYXZvaWQgbGlua2luZyBjb21wcmVzcy5vCistIFJlcGxhY2UgdXNlIG9mIGVycm5vIGluIGd6KiB3aXRoIGZ1bmN0aW9ucywgc3VwcG9ydCBXaW5DRSBbQWx2ZXNdCistIFByb3ZpZGUgYWx0ZXJuYXRpdmUgdG8gcGVycm9yKCkgaW4gbWluaWd6aXAuYyBmb3IgV2luQ0UgW0FsdmVzXQorLSBEb24ndCB1c2UgX3ZzbnByaW50ZiBvbiBsYXRlciB2ZXJzaW9ucyBvZiBNU1ZDIFtMb3dtYW5dCistIEFkZCBDTWFrZSBidWlsZCBzY3JpcHQgYW5kIGlucHV0IGZpbGUgW0xvd21hbl0KKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcCB0byAxLjEgW1N2ZW5zc29uLCBWb2xsYW50XQorLSBNb3ZlZCBuaW50ZW5kb2RzIGRpcmVjdG9yeSBmcm9tIGNvbnRyaWIgdG8gLgorLSBSZXBsYWNlIGd6aW8uYyB3aXRoIGEgbmV3IHNldCBvZiByb3V0aW5lcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkKKy0gQWRkIGd6YnVmZmVyKCksIGd6b2Zmc2V0KCksIGd6Y2xvc2VfcigpLCBnemNsb3NlX3coKSBhcyBwYXJ0IG9mIGFib3ZlCistIFVwZGF0ZSBjb250cmliL21pbml6aXAgdG8gMS4xYgorLSBDaGFuZ2UgZ3plb2YoKSB0byByZXR1cm4gMCBvbiBlcnJvciBpbnN0ZWFkIG9mIC0xIHRvIGFncmVlIHdpdGggemxpYi5oCisKK0NoYW5nZXMgaW4gMS4yLjMuNCAoMjEgRGVjIDIwMDkpCistIFVzZSBvbGQgc2Nob29sIC5TVUZGSVhFUyBpbiBNYWtlZmlsZS5pbiBmb3IgRnJlZUJTRCBjb21wYXRpYmlsaXR5CistIFVwZGF0ZSBjb21tZW50cyBpbiBjb25maWd1cmUgYW5kIE1ha2VmaWxlLmluIGZvciBkZWZhdWx0IC0tc2hhcmVkCistIEZpeCB0ZXN0IC16J3MgaW4gY29uZmlndXJlIFtNYXJxdWVzc10KKy0gQnVpbGQgZXhhbXBsZXNoIGFuZCBtaW5pZ3ppcHNoIHdoZW4gbm90IHRlc3RpbmcKKy0gQ2hhbmdlIE5VTEwncyB0byBaX05VTEwncyBpbiBkZWZsYXRlLmMgYW5kIGluIGNvbW1lbnRzIGluIHpsaWIuaAorLSBJbXBvcnQgTERGTEFHUyBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbiBjb25maWd1cmUKKy0gRml4IGNvbmZpZ3VyZSB0byBwb3B1bGF0ZSBTRkxBR1Mgd2l0aCBkaXNjb3ZlcmVkIENGTEFHUyBvcHRpb25zCistIEFkYXB0IG1ha2Vfdm1zLmNvbSB0byB0aGUgbmV3IE1ha2VmaWxlLmluIFtaaW5zZXJdCistIEFkZCB6bGliMmFuc2kgc2NyaXB0IGZvciBDKysgY29tcGlsYXRpb24gW01hcnF1ZXNzXQorLSBBZGQgX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgdGVzdCB0byBtYWtlIHRlc3QgKHdoZW4gYXBwbGljYWJsZSkKKy0gQWRkIEFNRDY0IGFzc2VtYmxlciBjb2RlIGZvciBsb25nZXN0IG1hdGNoIHRvIGNvbnRyaWIgW1RldGVyaW5dCistIEluY2x1ZGUgb3B0aW9ucyBmcm9tICRTRkxBR1Mgd2hlbiBkb2luZyAkTERTSEFSRUQKKy0gU2ltcGxpZnkgNjQtYml0IGZpbGUgc3VwcG9ydCBieSBpbnRyb2R1Y2luZyB6X29mZjY0X3QgdHlwZQorLSBNYWtlIHNoYXJlZCBvYmplY3QgZmlsZXMgaW4gb2JqcyBkaXJlY3RvcnkgdG8gd29yayBhcm91bmQgb2xkIFN1biBjYworLSBVc2Ugb25seSB0aHJlZS1wYXJ0IHZlcnNpb24gbnVtYmVyIGZvciBEYXJ3aW4gc2hhcmVkIGNvbXBpbGVzCistIEFkZCByYyBvcHRpb24gdG8gYXIgaW4gTWFrZWZpbGUuaW4gZm9yIHdoZW4gLi9jb25maWd1cmUgbm90IHJ1bgorLSBBZGQgLVdJLC1ycGF0aCwuIHRvIExERkxBR1MgZm9yIE9TRiAxIFY0KgorLSBTZXQgTERfTElCUkFSWU4zMl9QQVRIIGZvciBTR0kgSVJJWCBzaGFyZWQgY29tcGlsZQorLSBQcm90ZWN0IGFnYWluc3QgX0ZJTEVfT0ZGU0VUX0JJVFMgYmVpbmcgZGVmaW5lZCB3aGVuIGNvbXBpbGluZyB6bGliCistIFJlbmFtZSBNYWtlZmlsZS5pbiB0YXJnZXRzIGFsbHN0YXRpYyB0byBzdGF0aWMgYW5kIGFsbHNoYXJlZCB0byBzaGFyZWQKKy0gRml4IHN0YXRpYyBhbmQgc2hhcmVkIE1ha2VmaWxlLmluIHRhcmdldHMgdG8gYmUgaW5kZXBlbmRlbnQKKy0gQ29ycmVjdCBlcnJvciByZXR1cm4gYnVnIGluIGd6X29wZW4oKSBieSBzZXR0aW5nIHN0YXRlIFtCcm93bl0KKy0gUHV0IHNwYWNlcyBiZWZvcmUgOzsncyBpbiBjb25maWd1cmUgZm9yIGJldHRlciBzaCBjb21wYXRpYmlsaXR5CistIEFkZCBwaWd6LmMgKHBhcmFsbGVsIGltcGxlbWVudGF0aW9uIG9mIGd6aXApIHRvIGV4YW1wbGVzLworLSBDb3JyZWN0IGNvbnN0YW50IGluIGNyYzMyLmMgdG8gVUwgW0xldmVudGhhbF0KKy0gUmVqZWN0IG5lZ2F0aXZlIGxlbmd0aHMgaW4gY3JjMzJfY29tYmluZSgpCistIEFkZCBpbmZsYXRlUmVzZXQyKCkgZnVuY3Rpb24gdG8gd29yayBsaWtlIGluZmxhdGVFbmQoKS9pbmZsYXRlSW5pdDIoKQorLSBJbmNsdWRlIHN5cy90eXBlcy5oIGZvciBfTEFSR0VGSUxFNjRfU09VUkNFIFtCcm93bl0KKy0gQ29ycmVjdCB0eXBvIGluIGRvYy9hbGdvcml0aG0udHh0IFtKYW5pa10KKy0gRml4IGJ1ZyBpbiBhZGxlcjMyX2NvbWJpbmUoKSBbWmh1XQorLSBDYXRjaCBtaXNzaW5nLWVuZC1vZi1ibG9jay1jb2RlIGVycm9yIGluIGFsbCBpbmZsYXRlcyBhbmQgaW4gcHVmZgorICAgIEFzc3VyZXMgdGhhdCByYW5kb20gaW5wdXQgdG8gaW5mbGF0ZSBldmVudHVhbGx5IHJlc3VsdHMgaW4gYW4gZXJyb3IKKy0gQWRkZWQgZW5vdWdoLmMgKGNhbGN1bGF0aW9uIG9mIEVOT1VHSCBmb3IgaW5mdHJlZXMuaCkgdG8gZXhhbXBsZXMvCistIFVwZGF0ZSBFTk9VR0ggYW5kIGl0cyB1c2FnZSB0byByZWZsZWN0IGRpc2NvdmVyZWQgYm91bmRzCistIEZpeCBnemVycm9yKCkgZXJyb3IgcmVwb3J0IG9uIGVtcHR5IGlucHV0IGZpbGUgW0Jyb3duXQorLSBBZGQgdXNoIGNhc3RzIGluIHRyZWVzLmMgdG8gYXZvaWQgcGVkYW50aWMgcnVudGltZSBlcnJvcnMKKy0gRml4IHR5cG8gaW4gemxpYi5oIHVuY29tcHJlc3MoKSBkZXNjcmlwdGlvbiBbUmVpc3NdCistIENvcnJlY3QgaW5mbGF0ZSgpIGNvbW1lbnRzIHdpdGggcmVnYXJkIHRvIGF1dG9tYXRpYyBoZWFkZXIgZGV0ZWN0aW9uCistIFJlbW92ZSBkZXByZWNhdGlvbiBjb21tZW50IG9uIFpfUEFSVElBTF9GTFVTSCAoaXQgc3RheXMpCistIFB1dCBuZXcgdmVyc2lvbiBvZiBnemxvZyAoMi4wKSBpbiBleGFtcGxlcyB3aXRoIGludGVycnVwdGlvbiByZWNvdmVyeQorLSBBZGQgcHVmZiBjb21waWxlIG9wdGlvbiB0byBwZXJtaXQgaW52YWxpZCBkaXN0YW5jZS10b28tZmFyIHN0cmVhbXMKKy0gQWRkIHB1ZmYgVEVTVCBjb21tYW5kIG9wdGlvbnMsIGFiaWxpdHkgdG8gcmVhZCBwaXBlZCBpbnB1dAorLSBQcm90b3R5cGUgdGhlICo2NCBmdW5jdGlvbnMgaW4gemxpYi5oIHdoZW4gX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQsIGJ1dAorICBfTEFSR0VGSUxFNjRfU09VUkNFIG5vdCBkZWZpbmVkCistIEZpeCBaX0ZVTExfRkxVU0ggdG8gdHJ1bHkgZXJhc2UgdGhlIHBhc3QgYnkgcmVzZXR0aW5nIHMtPnN0cnN0YXJ0CistIEZpeCBkZWZsYXRlU2V0RGljdGlvbmFyeSgpIHRvIHVzZSBhbGwgMzJLIGZvciBvdXRwdXQgY29uc2lzdGVuY3kKKy0gUmVtb3ZlIGV4dHJhbmVvdXMgI2RlZmluZSBNSU5fTE9PS0FIRUFEIGluIGRlZmxhdGUuYyAoaW4gZGVmbGF0ZS5oKQorLSBDbGVhciBieXRlcyBhZnRlciBkZWZsYXRlIGxvb2thaGVhZCB0byBhdm9pZCB1c2Ugb2YgdW5pbml0aWFsaXplZCBkYXRhCistIENoYW5nZSBhIGxpbWl0IGluIGluZnRyZWVzLmMgdG8gYmUgbW9yZSB0cmFuc3BhcmVudCB0byBDb3Zlcml0eSBQcmV2ZW50CistIFVwZGF0ZSB3aW4zMi96bGliLmRlZiB3aXRoIGV4cG9ydGVkIHN5bWJvbHMgZnJvbSB6bGliLmgKKy0gQ29ycmVjdCBzcGVsbGluZyBlcnJvciBpbiB6bGliLmggW1dpbGxlbV0KKy0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3IGJsb2NrCistIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRlIGV4aXN0aW5nIGJpdCBidWZmZXIKKy0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxhdGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCistIEFkZCBpbmZsYXRlTWFyaygpIHRvIHJldHVybiBjdXJyZW50IHN0YXRlIGluZm9ybWF0aW9uIGZvciByYW5kb20gYWNjZXNzCistIEFkZCBNYWtlZmlsZSBmb3IgTmludGVuZG9EUyB0byBjb250cmliIFtDb3N0YV0KKy0gQWRkIC13IGluIGNvbmZpZ3VyZSBjb21waWxlIHRlc3RzIHRvIGF2b2lkIHNwdXJpb3VzIHdhcm5pbmdzIFtCZXVjbGVyXQorLSBGaXggdHlwb3MgaW4gemxpYi5oIGNvbW1lbnRzIGZvciBkZWZsYXRlU2V0RGljdGlvbmFyeSgpCistIEZpeCBFT0YgZGV0ZWN0aW9uIGluIHRyYW5zcGFyZW50IGd6cmVhZCgpIFtNYWllcl0KKworQ2hhbmdlcyBpbiAxLjIuMy4zICgyIE9jdG9iZXIgMjAwNikKKy0gTWFrZSAtLXNoYXJlZCB0aGUgZGVmYXVsdCBmb3IgY29uZmlndXJlLCBhZGQgYSAtLXN0YXRpYyBvcHRpb24KKy0gQWRkIGNvbXBpbGUgb3B0aW9uIHRvIHBlcm1pdCBpbnZhbGlkIGRpc3RhbmNlLXRvby1mYXIgc3RyZWFtcworLSBBZGQgaW5mbGF0ZVVuZGVybWluZSgpIGZ1bmN0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBhYm92ZQorLSBSZW1vdmUgdXNlIG9mICJ0aGlzIiB2YXJpYWJsZSBuYW1lIGZvciBDKysgY29tcGF0aWJpbGl0eSBbTWFycXVlc3NdCistIEFkZCB0ZXN0aW5nIG9mIHNoYXJlZCBsaWJyYXJ5IGluIG1ha2UgdGVzdCwgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbHQKKy0gVXNlIGZ0ZWxsbygpIGFuZCBmc2Vla28oKSBpZiBhdmFpbGFibGUgaW5zdGVhZCBvZiBmdGVsbCgpIGFuZCBmc2VlaygpCistIFByb3ZpZGUgdHdvIHZlcnNpb25zIG9mIGFsbCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIHpfb2ZmX3QgdHlwZSBmb3IKKyAgYmluYXJ5IGNvbXBhdGliaWxpdHkgLS0gYSBub3JtYWwgdmVyc2lvbiBhbmQgYSA2NC1iaXQgb2Zmc2V0IHZlcnNpb24sCisgIHBlciB0aGUgTGFyZ2UgRmlsZSBTdXBwb3J0IEV4dGVuc2lvbiB3aGVuIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaXMKKyAgZGVmaW5lZDsgdXNlIHRoZSA2NC1iaXQgdmVyc2lvbnMgYnkgZGVmYXVsdCB3aGVuIF9GSUxFX09GRlNFVF9CSVRTCisgIGlzIGRlZmluZWQgdG8gYmUgNjQKKy0gQWRkIGEgLS11bmFtZT0gb3B0aW9uIHRvIGNvbmZpZ3VyZSB0byBwZXJoYXBzIGhlbHAgd2l0aCBjcm9zcy1jb21waWxpbmcKKworQ2hhbmdlcyBpbiAxLjIuMy4yICgzIFNlcHRlbWJlciAyMDA2KQorLSBUdXJuIG9mZiBzaWxseSBCb3JsYW5kIHdhcm5pbmdzIFtIYXldCistIFVzZSBvZmY2NF90IGFuZCBkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSB3aGVuIHByZXNlbnQKKy0gRml4IG1pc3NpbmcgZGVwZW5kZW5jeSBvbiBpbmZmaXhlZC5oIGluIE1ha2VmaWxlLmluCistIFJpZyBjb25maWd1cmUgLS1zaGFyZWQgdG8gYnVpbGQgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBbVGVyZWRlc2FpLCBUcnV0YV0KKy0gUmVtb3ZlIHpjb25mLmluLmggYW5kIGluc3RlYWQgY3JlYXRlIGEgbmV3IHpsaWJkZWZzLmggZmlsZQorLSBGaXggY29udHJpYi9taW5pemlwL3VuemlwLmMgbm9uLWVuY3J5cHRlZCBhZnRlciBlbmNyeXB0ZWQgW1ZvbGxhbnRdCistIEFkZCB0cmVlYnVpbGQueG1sIChzZWUgaHR0cDovL3RyZWVidWlsZC5tZXR1eC5kZS8pIFtXZWlnZWx0XQorCitDaGFuZ2VzIGluIDEuMi4zLjEgKDE2IEF1Z3VzdCAyMDA2KQorLSBBZGQgd2F0Y29tIGRpcmVjdG9yeSB3aXRoIE9wZW5XYXRjb20gbWFrZSBmaWxlcyBbRGFuaWVsXQorLSBSZW1vdmUgI3VuZGVmIG9mIEZBUiBpbiB6Y29uZi5pbi5oIGZvciBNVlMgW0ZlZHRrZV0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBbWmluc2VyXQorLSBVc2UgLWZQSUMgZm9yIHNoYXJlZCBidWlsZCBpbiBjb25maWd1cmUgW1RlcmVkZXNhaSwgTmljaG9sc29uXQorLSBVc2Ugb25seSBtYWpvciB2ZXJzaW9uIG51bWJlciBmb3IgbGliei5zbyBvbiBJUklYIGFuZCBPU0YxIFtSZWluaG9sZHRzZW5dCistIFVzZSBmZG9wZW4oKSAobm90IF9mZG9wZW4oKSkgZm9yIEludGVyaXggaW4genV0aWwuaCBbQopja10KKy0gQWRkIHNvbWUgRkFRIGVudHJpZXMgYWJvdXQgdGhlIGNvbnRyaWIgZGlyZWN0b3J5CistIFVwZGF0ZSB0aGUgTVZTIHF1ZXN0aW9uIGluIHRoZSBGQVEKKy0gQXZvaWQgZXh0cmFuZW91cyByZWFkcyBhZnRlciBFT0YgaW4gZ3ppby5jIFtCcm93bl0KKy0gQ29ycmVjdCBzcGVsbGluZyBvZiAic3VjY2Vzc2Z1bGx5IiBpbiBnemlvLmMgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGNvbW1lbnRzIHRvIHpsaWIuaCBhYm91dCBnemVycm9yKCkgdXNhZ2UgW0Jyb3duXQorLSBTZXQgZXh0cmEgZmxhZ3MgaW4gZ3ppcCBoZWFkZXIgaW4gZ3pvcGVuKCkgbGlrZSBkZWZsYXRlKCkgZG9lcworLSBNYWtlIGNvbmZpZ3VyZSBvcHRpb25zIG1vcmUgY29tcGF0aWJsZSB3aXRoIGRvdWJsZS1kYXNoIGNvbnZlbnRpb25zCisgIFtXZWlnZWx0XQorLSBDbGVhbiB1cCBjb21waWxhdGlvbiB1bmRlciBTb2xhcmlzIFN1blN0dWRpbyBjYyBbUm93ZSwgUmVpbmhvbGR0c2VuXQorLSBGaXggdW5pbnN0YWxsIHRhcmdldCBpbiBNYWtlZmlsZS5pbiBbVHJ1dGFdCistIEFkZCBwa2djb25maWcgc3VwcG9ydCBbV2VpZ2VsdF0KKy0gVXNlICQoREVTVERJUikgbWFjcm8gaW4gTWFrZWZpbGUuaW4gW1JlaW5ob2xkdHNlbiwgV2VpZ2VsdF0KKy0gUmVwbGFjZSBzZXRfZGF0YV90eXBlKCkgd2l0aCBhIG1vcmUgYWNjdXJhdGUgZGV0ZWN0X2RhdGFfdHlwZSgpIGluCisgIHRyZWVzLmMsIGFjY29yZGluZyB0byB0aGUgdHh0dnNiaW4udHh0IGRvY3VtZW50IFtUcnV0YV0KKy0gU3dhcCB0aGUgb3JkZXIgb2YgI2luY2x1ZGUgPHN0ZGlvLmg+IGFuZCAjaW5jbHVkZSAiemxpYi5oIiBpbgorICBnemlvLmMsIGV4YW1wbGUuYyBhbmQgbWluaWd6aXAuYyBbVHJ1dGFdCistIFNodXQgdXAgYW5ub3lpbmcgVlMyMDA1IHdhcm5pbmdzIGFib3V0IHN0YW5kYXJkIEMgZGVwcmVjYXRpb24gW1Jvd2UsCisgIFRydXRhXSAod2hlcmU/KQorLSBGaXggdGFyZ2V0ICJjbGVhbiIgZnJvbSB3aW4zMi9NYWtlZmlsZS5ib3IgW1RydXRhXQorLSBDcmVhdGUgLnBkYiBhbmQgLm1hbmlmZXN0IGZpbGVzIGluIHdpbjMyL21ha2VmaWxlLm1zYyBbWmllZ2xlciwgUm93ZV0KKy0gVXBkYXRlIHpsaWIgd3d3IGhvbWUgYWRkcmVzcyBpbiB3aW4zMi9ETExfRkFRLnR4dCBbVHJ1dGFdCistIFVwZGF0ZSBjb250cmliL21hc214ODYvaW5mZmFzMzIuYXNtIGZvciBWUzIwMDUgW1ZvbGxhbnQsIFZhbiBXYXNzZW5ob3ZlXQorLSBFbmFibGUgYnJvd3NlIGluZm8gaW4gdGhlICJEZWJ1ZyIgYW5kICJBU00gRGVidWciIGNvbmZpZ3VyYXRpb25zIGluCisgIHRoZSBWaXN1YWwgQysrIDYgcHJvamVjdCwgYW5kIHNldCAobm9uLUFTTSkgIkRlYnVnIiBhcyBkZWZhdWx0IFtUcnV0YV0KKy0gQWRkIHBrZ2NvbmZpZyBzdXBwb3J0IFtXZWlnZWx0XQorLSBBZGQgWkxJQl9WRVJfTUFKT1IsIFpMSUJfVkVSX01JTk9SIGFuZCBaTElCX1ZFUl9SRVZJU0lPTiBpbiB6bGliLmgsCisgIGZvciB1c2UgaW4gd2luMzIvemxpYjEucmMgW1BvbHVzaGluLCBSb3dlLCBUcnV0YV0KKy0gQWRkIGEgZG9jdW1lbnQgdGhhdCBleHBsYWlucyB0aGUgbmV3IHRleHQgZGV0ZWN0aW9uIHNjaGVtZSB0bworICBkb2MvdHh0dnNiaW4udHh0IFtUcnV0YV0KKy0gQWRkIHJmYzE5NTAudHh0LCByZmMxOTUxLnR4dCBhbmQgcmZjMTk1Mi50eHQgdG8gZG9jLyBbVHJ1dGFdCistIE1vdmUgYWxnb3JpdGhtLnR4dCBpbnRvIGRvYy8gW1RydXRhXQorLSBTeW5jaHJvbml6ZSBGQVEgd2l0aCB3ZWJzaXRlCistIEZpeCBjb21wcmVzc0JvdW5kKCksIHdhcyBsb3cgZm9yIHNvbWUgcGF0aG9sb2dpY2FsIGNhc2VzIFtGZWFybmxleV0KKy0gVGFrZSBpbnRvIGFjY291bnQgd3JhcHBlciB2YXJpYXRpb25zIGluIGRlZmxhdGVCb3VuZCgpCistIFNldCBleGFtcGxlcy96cGlwZS5jIGlucHV0IGFuZCBvdXRwdXQgdG8gYmluYXJ5IG1vZGUgZm9yIFdpbmRvd3MKKy0gVXBkYXRlIGV4YW1wbGVzL3psaWJfaG93Lmh0bWwgd2l0aCBuZXcgenBpcGUuYyAoYWxzbyB3ZWIgc2l0ZSkKKy0gRml4IHNvbWUgd2FybmluZ3MgaW4gZXhhbXBsZXMvZ3psb2cuYyBhbmQgZXhhbXBsZXMvenJhbi5jIChpdCBzZWVtcworICB0aGF0IGdjYyBiZWNhbWUgcGlja2llciBpbiA0LjApCistIEFkZCB6bGliLm1hcCBmb3IgTGludXg6ICJBbGwgc3ltYm9scyBmcm9tIHpsaWItMS4xLjQgcmVtYWluCisgIHVuLXZlcnNpb25lZCwgdGhlIHBhdGNoIGFkZHMgdmVyc2lvbmluZyBvbmx5IGZvciBzeW1ib2xzIGludHJvZHVjZWQgaW4KKyAgemxpYi0xLjIuMCBvciBsYXRlci4gIEl0IGFsc28gZGVjbGFyZXMgYXMgbG9jYWwgdGhvc2Ugc3ltYm9scyB3aGljaCBhcmUKKyAgbm90IGRlc2lnbmVkIHRvIGJlIGV4cG9ydGVkLiIgW0xldmluXQorLSBVcGRhdGUgWl9QUkVGSVggbGlzdCBpbiB6Y29uZi5pbi5oLCBhZGQgLS16cHJlZml4IG9wdGlvbiB0byBjb25maWd1cmUKKy0gRG8gbm90IGluaXRpYWxpemUgZ2xvYmFsIHN0YXRpYyBieSBkZWZhdWx0IGluIHRyZWVzLmMsIGFkZCBhIHJlc3BvbnNlCisgIE5PX0lOSVRfR0xPQkFMX1BPSU5URVJTIHRvIGluaXRpYWxpemUgdGhlbSBpZiBuZWVkZWQgW01hcnF1ZXNzXQorLSBEb24ndCB1c2Ugc3RyZXJyb3IoKSBpbiBnemlvLmMgdW5kZXIgV2luQ0UgW1lha2ltb3ZdCistIERvbid0IHVzZSBlcnJuby5oIGluIHp1dGlsLmggdW5kZXIgV2luQ0UgW1lha2ltb3ZdCistIE1vdmUgYXJndW1lbnRzIGZvciBBUiB0byBpdHMgdXNhZ2UgdG8gYWxsb3cgcmVwbGFjaW5nIGFyIFtNYXJvdF0KKy0gQWRkIEhBVkVfVklTSUJJTElUWV9QUkFHTUEgaW4gemNvbmYuaW4uaCBmb3IgTW96aWxsYSBbUmFuZGVycy1QZWhyc29uXQorLSBJbXByb3ZlIGluZmxhdGVJbml0KCkgYW5kIGluZmxhdGVJbml0MigpIGRvY3VtZW50YXRpb24KKy0gRml4IHN0cnVjdHVyZSBzaXplIGNvbW1lbnQgaW4gaW5mbGF0ZS5oCistIENoYW5nZSBjb25maWd1cmUgaGVscCBvcHRpb24gZnJvbSAtLWgqIHRvIC0taGVscCBbU2FudG9zXQorCiBDaGFuZ2VzIGluIDEuMi4zICgxOCBKdWx5IDIwMDUpCiAtIEFwcGx5IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHkgZml4ZXMgdG8gY29udHJpYi9pbmZiYWNrOSBhcyB3ZWxsCiAtIENsZWFuIHVwIHNvbWUgdGV4dCBmaWxlcyAoY2FycmlhZ2UgcmV0dXJucywgdHJhaWxpbmcgc3BhY2UpCkBAIC0xMyw3ICszNjYsNyBAQAogICBjb21waWxlCiAtIEZpeCBzb21lIHNwZWxsaW5nIGVycm9ycyBpbiBjb21tZW50cyBbQmV0dHNdCiAtIENvcnJlY3QgaW5mbGF0ZUluaXQyKCkgZXJyb3IgcmV0dXJuIGRvY3VtZW50YXRpb24gaW4gemxpYi5oCi0tIEFkZGVkIHpyYW4uYyBleGFtcGxlIG9mIGNvbXByZXNzZWQgZGF0YSByYW5kb20gYWNjZXNzIHRvIGV4YW1wbGVzCistIEFkZCB6cmFuLmMgZXhhbXBsZSBvZiBjb21wcmVzc2VkIGRhdGEgcmFuZG9tIGFjY2VzcyB0byBleGFtcGxlcwogICBkaXJlY3RvcnksIHNob3dzIHVzZSBvZiBpbmZsYXRlUHJpbWUoKQogLSBGaXggY2FzdCBmb3IgYXNzaWdubWVudHMgdG8gc3RybS0+c3RhdGUgaW4gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMKIC0gRml4IHpsaWJDb21waWxlRmxhZ3MoKSBpbiB6dXRpbC5jIHRvIHVzZSAxTCBmb3IgbG9uZyBzaGlmdHMgW09iZXJodW1lcl0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9GQVEgYi9Nb2R1bGVzL3psaWIvRkFRCmluZGV4IDQ0MWQ5MTAuLjFhMjI3NTAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9GQVEKKysrIGIvTW9kdWxlcy96bGliL0ZBUQpAQCAtMyw4ICszLDggQEAKIAogCiBJZiB5b3VyIHF1ZXN0aW9uIGlzIG5vdCB0aGVyZSwgcGxlYXNlIGNoZWNrIHRoZSB6bGliIGhvbWUgcGFnZQotaHR0cDovL3d3dy56bGliLm9yZyB3aGljaCBtYXkgaGF2ZSBtb3JlIHJlY2VudCBpbmZvcm1hdGlvbi4KLVRoZSBsYXN0ZXN0IHpsaWIgRkFRIGlzIGF0IGh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi96bGliX2ZhcS5odG1sCitodHRwOi8vemxpYi5uZXQvIHdoaWNoIG1heSBoYXZlIG1vcmUgcmVjZW50IGluZm9ybWF0aW9uLgorVGhlIGxhc3Rlc3QgemxpYiBGQVEgaXMgYXQgaHR0cDovL3psaWIubmV0L3psaWJfZmFxLmh0bWwKIAogCiAgMS4gSXMgemxpYiBZMkstY29tcGxpYW50PwpAQCAtMTMsNTQgKzEzLDUxIEBACiAKICAyLiBXaGVyZSBjYW4gSSBnZXQgYSBXaW5kb3dzIERMTCB2ZXJzaW9uPwogCi0gICAgVGhlIHpsaWIgc291cmNlcyBjYW4gYmUgY29tcGlsZWQgd2l0aG91dCBjaGFuZ2UgdG8gcHJvZHVjZSBhIERMTC4KLSAgICBTZWUgdGhlIGZpbGUgd2luMzIvRExMX0ZBUS50eHQgaW4gdGhlIHpsaWIgZGlzdHJpYnV0aW9uLgotICAgIFBvaW50ZXJzIHRvIHRoZSBwcmVjb21waWxlZCBETEwgYXJlIGZvdW5kIGluIHRoZSB6bGliIHdlYiBzaXRlIGF0Ci0gICAgaHR0cDovL3d3dy56bGliLm9yZy4KKyAgICBUaGUgemxpYiBzb3VyY2VzIGNhbiBiZSBjb21waWxlZCB3aXRob3V0IGNoYW5nZSB0byBwcm9kdWNlIGEgRExMLiAgU2VlIHRoZQorICAgIGZpbGUgd2luMzIvRExMX0ZBUS50eHQgaW4gdGhlIHpsaWIgZGlzdHJpYnV0aW9uLiAgUG9pbnRlcnMgdG8gdGhlCisgICAgcHJlY29tcGlsZWQgRExMIGFyZSBmb3VuZCBpbiB0aGUgemxpYiB3ZWIgc2l0ZSBhdCBodHRwOi8vemxpYi5uZXQvIC4KIAogIDMuIFdoZXJlIGNhbiBJIGdldCBhIFZpc3VhbCBCYXNpYyBpbnRlcmZhY2UgdG8gemxpYj8KIAogICAgIFNlZQotICAgICAgICAqIGh0dHA6Ly93d3cuZG9nbWEubmV0L21hcmtuL2FydGljbGVzL3psaWJ0b29sL3psaWJ0b29sLmh0bQotICAgICAgICAqIGNvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dCBpbiB0aGUgemxpYiBkaXN0cmlidXRpb24KKyAgICAgICAgKiBodHRwOi8vbWFya25lbHNvbi51cy8xOTk3LzAxLzAxL3psaWItZW5naW5lLwogICAgICAgICAqIHdpbjMyL0RMTF9GQVEudHh0IGluIHRoZSB6bGliIGRpc3RyaWJ1dGlvbgogCiAgNC4gY29tcHJlc3MoKSByZXR1cm5zIFpfQlVGX0VSUk9SLgogCi0gICAgTWFrZSBzdXJlIHRoYXQgYmVmb3JlIHRoZSBjYWxsIG9mIGNvbXByZXNzLCB0aGUgbGVuZ3RoIG9mIHRoZSBjb21wcmVzc2VkCi0gICAgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciBhbmQgbm90Ci0gICAgemVyby4gRm9yIFZpc3VhbCBCYXNpYywgY2hlY2sgdGhhdCB0aGlzIHBhcmFtZXRlciBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlCisgICAgTWFrZSBzdXJlIHRoYXQgYmVmb3JlIHRoZSBjYWxsIG9mIGNvbXByZXNzKCksIHRoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQKKyAgICBidWZmZXIgaXMgZXF1YWwgdG8gdGhlIGF2YWlsYWJsZSBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlciBhbmQgbm90CisgICAgemVyby4gIEZvciBWaXN1YWwgQmFzaWMsIGNoZWNrIHRoYXQgdGhpcyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZQogICAgICgiYXMgYW55IiksIG5vdCBieSB2YWx1ZSAoImFzIGxvbmciKS4KIAogIDUuIGRlZmxhdGUoKSBvciBpbmZsYXRlKCkgcmV0dXJucyBaX0JVRl9FUlJPUi4KIAotICAgIEJlZm9yZSBtYWtpbmcgdGhlIGNhbGwsIG1ha2Ugc3VyZSB0aGF0IGF2YWlsX2luIGFuZCBhdmFpbF9vdXQgYXJlIG5vdAotICAgIHplcm8uIFdoZW4gc2V0dGluZyB0aGUgcGFyYW1ldGVyIGZsdXNoIGVxdWFsIHRvIFpfRklOSVNILCBhbHNvIG1ha2Ugc3VyZQotICAgIHRoYXQgYXZhaWxfb3V0IGlzIGJpZyBlbm91Z2ggdG8gYWxsb3cgcHJvY2Vzc2luZyBhbGwgcGVuZGluZyBpbnB1dC4KLSAgICBOb3RlIHRoYXQgYSBaX0JVRl9FUlJPUiBpcyBub3QgZmF0YWwtLWFub3RoZXIgY2FsbCB0byBkZWZsYXRlKCkgb3IKLSAgICBpbmZsYXRlKCkgY2FuIGJlIG1hZGUgd2l0aCBtb3JlIGlucHV0IG9yIG91dHB1dCBzcGFjZS4gQSBaX0JVRl9FUlJPUgotICAgIG1heSBpbiBmYWN0IGJlIHVuYXZvaWRhYmxlIGRlcGVuZGluZyBvbiBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgc2luY2UKLSAgICBpdCBpcyBub3QgcG9zc2libGUgdG8gdGVsbCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBtb3JlIG91dHB1dCBwZW5kaW5nCi0gICAgd2hlbiBzdHJtLmF2YWlsX291dCByZXR1cm5zIHdpdGggemVyby4KKyAgICBCZWZvcmUgbWFraW5nIHRoZSBjYWxsLCBtYWtlIHN1cmUgdGhhdCBhdmFpbF9pbiBhbmQgYXZhaWxfb3V0IGFyZSBub3QgemVyby4KKyAgICBXaGVuIHNldHRpbmcgdGhlIHBhcmFtZXRlciBmbHVzaCBlcXVhbCB0byBaX0ZJTklTSCwgYWxzbyBtYWtlIHN1cmUgdGhhdAorICAgIGF2YWlsX291dCBpcyBiaWcgZW5vdWdoIHRvIGFsbG93IHByb2Nlc3NpbmcgYWxsIHBlbmRpbmcgaW5wdXQuICBOb3RlIHRoYXQgYQorICAgIFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbC0tYW5vdGhlciBjYWxsIHRvIGRlZmxhdGUoKSBvciBpbmZsYXRlKCkgY2FuIGJlCisgICAgbWFkZSB3aXRoIG1vcmUgaW5wdXQgb3Igb3V0cHV0IHNwYWNlLiAgQSBaX0JVRl9FUlJPUiBtYXkgaW4gZmFjdCBiZQorICAgIHVuYXZvaWRhYmxlIGRlcGVuZGluZyBvbiBob3cgdGhlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgc2luY2UgaXQgaXMgbm90CisgICAgcG9zc2libGUgdG8gdGVsbCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBpcyBtb3JlIG91dHB1dCBwZW5kaW5nIHdoZW4KKyAgICBzdHJtLmF2YWlsX291dCByZXR1cm5zIHdpdGggemVyby4gIFNlZSBodHRwOi8vemxpYi5uZXQvemxpYl9ob3cuaHRtbCBmb3IgYQorICAgIGhlYXZpbHkgYW5ub3RhdGVkIGV4YW1wbGUuCiAKICA2LiBXaGVyZSdzIHRoZSB6bGliIGRvY3VtZW50YXRpb24gKG1hbiBwYWdlcywgZXRjLik/CiAKLSAgICBJdCdzIGluIHpsaWIuaCBmb3IgdGhlIG1vbWVudCwgYW5kIEZyYW5jaXMgUy4gTGluIGhhcyBjb252ZXJ0ZWQgaXQgdG8gYQotICAgIHdlYiBwYWdlIHpsaWIuaHRtbC4gVm9sdW50ZWVycyB0byB0cmFuc2Zvcm0gdGhpcyB0byBVbml4LXN0eWxlIG1hbiBwYWdlcywKLSAgICBwbGVhc2UgY29udGFjdCB1cyAoemxpYkBnemlwLm9yZykuIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcwotICAgIGV4YW1wbGUuYyBhbmQgbWluaWd6aXAuYy4KKyAgICBJdCdzIGluIHpsaWIuaCAuICBFeGFtcGxlcyBvZiB6bGliIHVzYWdlIGFyZSBpbiB0aGUgZmlsZXMgZXhhbXBsZS5jIGFuZAorICAgIG1pbmlnemlwLmMsIHdpdGggbW9yZSBpbiBleGFtcGxlcy8gLgogCiAgNy4gV2h5IGRvbid0IHlvdSB1c2UgR05VIGF1dG9jb25mIG9yIGxpYnRvb2wgb3IgLi4uPwogCi0gICAgQmVjYXVzZSB3ZSB3b3VsZCBsaWtlIHRvIGtlZXAgemxpYiBhcyBhIHZlcnkgc21hbGwgYW5kIHNpbXBsZQotICAgIHBhY2thZ2UuIHpsaWIgaXMgcmF0aGVyIHBvcnRhYmxlIGFuZCBkb2Vzbid0IG5lZWQgbXVjaCBjb25maWd1cmF0aW9uLgorICAgIEJlY2F1c2Ugd2Ugd291bGQgbGlrZSB0byBrZWVwIHpsaWIgYXMgYSB2ZXJ5IHNtYWxsIGFuZCBzaW1wbGUgcGFja2FnZS4KKyAgICB6bGliIGlzIHJhdGhlciBwb3J0YWJsZSBhbmQgZG9lc24ndCBuZWVkIG11Y2ggY29uZmlndXJhdGlvbi4KIAogIDguIEkgZm91bmQgYSBidWcgaW4gemxpYi4KIAotICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHN1Y2ggcHJvYmxlbXMgYXJlIGR1ZSB0byBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YKLSAgICB6bGliLiBQbGVhc2UgdHJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGEgc21hbGwgcHJvZ3JhbSBhbmQgc2VuZAotICAgIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSB0byB1cyBhdCB6bGliQGd6aXAub3JnIC4gRG8gbm90IHNlbmQKLSAgICBtdWx0aS1tZWdhYnl0ZSBkYXRhIGZpbGVzIHdpdGhvdXQgcHJpb3IgYWdyZWVtZW50LgorICAgIE1vc3Qgb2YgdGhlIHRpbWUsIHN1Y2ggcHJvYmxlbXMgYXJlIGR1ZSB0byBhbiBpbmNvcnJlY3QgdXNhZ2Ugb2YgemxpYi4KKyAgICBQbGVhc2UgdHJ5IHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbSB3aXRoIGEgc21hbGwgcHJvZ3JhbSBhbmQgc2VuZCB0aGUKKyAgICBjb3JyZXNwb25kaW5nIHNvdXJjZSB0byB1cyBhdCB6bGliQGd6aXAub3JnIC4gIERvIG5vdCBzZW5kIG11bHRpLW1lZ2FieXRlCisgICAgZGF0YSBmaWxlcyB3aXRob3V0IHByaW9yIGFncmVlbWVudC4KIAogIDkuIFdoeSBkbyBJIGdldCAidW5kZWZpbmVkIHJlZmVyZW5jZSB0byBnenB1dGMiPwogCkBAIC04Miw3ICs3OSw3IEBACiAKIDEyLiBDYW4gemxpYiBoYW5kbGUgLlogZmlsZXM/CiAKLSAgICBObywgc29ycnkuIFlvdSBoYXZlIHRvIHNwYXduIGFuIHVuY29tcHJlc3Mgb3IgZ3VuemlwIHN1YnByb2Nlc3MsIG9yIGFkYXB0CisgICAgTm8sIHNvcnJ5LiAgWW91IGhhdmUgdG8gc3Bhd24gYW4gdW5jb21wcmVzcyBvciBndW56aXAgc3VicHJvY2Vzcywgb3IgYWRhcHQKICAgICB0aGUgY29kZSBvZiB1bmNvbXByZXNzIG9uIHlvdXIgb3duLgogCiAxMy4gSG93IGNhbiBJIG1ha2UgYSBVbml4IHNoYXJlZCBsaWJyYXJ5PwpAQCAtOTksOCArOTYsMTAgQEAKIAogICAgIEhvd2V2ZXIsIG1hbnkgZmxhdm9ycyBvZiBVbml4IGNvbWUgd2l0aCBhIHNoYXJlZCB6bGliIGFscmVhZHkgaW5zdGFsbGVkLgogICAgIEJlZm9yZSBnb2luZyB0byB0aGUgdHJvdWJsZSBvZiBjb21waWxpbmcgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIGFuZAotICAgIHRyeWluZyB0byBpbnN0YWxsIGl0LCB5b3UgbWF5IHdhbnQgdG8gY2hlY2sgaWYgaXQncyBhbHJlYWR5IHRoZXJlISBJZiB5b3UKLSAgICBjYW4gI2luY2x1ZGUgPHpsaWIuaD4sIGl0J3MgdGhlcmUuIFRoZSAtbHogb3B0aW9uIHdpbGwgcHJvYmFibHkgbGluayB0byBpdC4KKyAgICB0cnlpbmcgdG8gaW5zdGFsbCBpdCwgeW91IG1heSB3YW50IHRvIGNoZWNrIGlmIGl0J3MgYWxyZWFkeSB0aGVyZSEgIElmIHlvdQorICAgIGNhbiAjaW5jbHVkZSA8emxpYi5oPiwgaXQncyB0aGVyZS4gIFRoZSAtbHogb3B0aW9uIHdpbGwgcHJvYmFibHkgbGluayB0bworICAgIGl0LiAgWW91IGNhbiBjaGVjayB0aGUgdmVyc2lvbiBhdCB0aGUgdG9wIG9mIHpsaWIuaCBvciB3aXRoIHRoZQorICAgIFpMSUJfVkVSU0lPTiBzeW1ib2wgZGVmaW5lZCBpbiB6bGliLmggLgogCiAxNS4gSSBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgT3R0b1BERi4KIApAQCAtMTA5LDggKzEwOCw4IEBACiAKIDE2LiBDYW4gemxpYiBkZWNvZGUgRmxhdGUgZGF0YSBpbiBhbiBBZG9iZSBQREYgZmlsZT8KIAotICAgIFllcy4gU2VlIGh0dHA6Ly93d3cuZmFzdGlvLmNvbS8gKENsaWJQREYpLCBvciBodHRwOi8vd3d3LnBkZmxpYi5jb20vIC4KLSAgICBUbyBtb2RpZnkgUERGIGZvcm1zLCBzZWUgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3JvZm9ybXRvb2wvIC4KKyAgICBZZXMuIFNlZSBodHRwOi8vd3d3LnBkZmxpYi5jb20vIC4gVG8gbW9kaWZ5IFBERiBmb3Jtcywgc2VlCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY3JvZm9ybXRvb2wvIC4KIAogMTcuIFdoeSBhbSBJIGdldHRpbmcgdGhpcyAicmVnaXN0ZXJfZnJhbWVfaW5mbyBub3QgZm91bmQiIGVycm9yIG9uIFNvbGFyaXM/CiAKQEAgLTEyMSw2NyArMTIwLDY3IEBACiAgICAgICAgIHN5bWJvbCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm86IHJlZmVyZW5jZWQgc3ltYm9sIG5vdCBmb3VuZAogCiAgICAgVGhlIHN5bWJvbCBfX3JlZ2lzdGVyX2ZyYW1lX2luZm8gaXMgbm90IHBhcnQgb2YgemxpYiwgaXQgaXMgZ2VuZXJhdGVkIGJ5Ci0gICAgdGhlIEMgY29tcGlsZXIgKGNjIG9yIGdjYykuIFlvdSBtdXN0IHJlY29tcGlsZSBhcHBsaWNhdGlvbnMgdXNpbmcgemxpYgotICAgIHdoaWNoIGhhdmUgdGhpcyBwcm9ibGVtLiBUaGlzIHByb2JsZW0gaXMgc3BlY2lmaWMgdG8gU29sYXJpcy4gU2VlCisgICAgdGhlIEMgY29tcGlsZXIgKGNjIG9yIGdjYykuICBZb3UgbXVzdCByZWNvbXBpbGUgYXBwbGljYXRpb25zIHVzaW5nIHpsaWIKKyAgICB3aGljaCBoYXZlIHRoaXMgcHJvYmxlbS4gIFRoaXMgcHJvYmxlbSBpcyBzcGVjaWZpYyB0byBTb2xhcmlzLiAgU2VlCiAgICAgaHR0cDovL3d3dy5zdW5mcmVld2FyZS5jb20gZm9yIFNvbGFyaXMgdmVyc2lvbnMgb2YgemxpYiBhbmQgYXBwbGljYXRpb25zCiAgICAgdXNpbmcgemxpYi4KIAogMTguIFdoeSBkb2VzIGd6aXAgZ2l2ZSBhbiBlcnJvciBvbiBhIGZpbGUgSSBtYWtlIHdpdGggY29tcHJlc3MvZGVmbGF0ZT8KIAogICAgIFRoZSBjb21wcmVzcyBhbmQgZGVmbGF0ZSBmdW5jdGlvbnMgcHJvZHVjZSBkYXRhIGluIHRoZSB6bGliIGZvcm1hdCwgd2hpY2gKLSAgICBpcyBkaWZmZXJlbnQgYW5kIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnemlwIGZvcm1hdC4gVGhlIGd6KiBmdW5jdGlvbnMgaW4KLSAgICB6bGliIG9uIHRoZSBvdGhlciBoYW5kIHVzZSB0aGUgZ3ppcCBmb3JtYXQuIEJvdGggdGhlIHpsaWIgYW5kIGd6aXAKLSAgICBmb3JtYXRzIHVzZSB0aGUgc2FtZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0IGludGVybmFsbHksIGJ1dCBoYXZlIGRpZmZlcmVudAotICAgIGhlYWRlcnMgYW5kIHRyYWlsZXJzIGFyb3VuZCB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgIGlzIGRpZmZlcmVudCBhbmQgaW5jb21wYXRpYmxlIHdpdGggdGhlIGd6aXAgZm9ybWF0LiAgVGhlIGd6KiBmdW5jdGlvbnMgaW4KKyAgICB6bGliIG9uIHRoZSBvdGhlciBoYW5kIHVzZSB0aGUgZ3ppcCBmb3JtYXQuICBCb3RoIHRoZSB6bGliIGFuZCBnemlwIGZvcm1hdHMKKyAgICB1c2UgdGhlIHNhbWUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCBpbnRlcm5hbGx5LCBidXQgaGF2ZSBkaWZmZXJlbnQgaGVhZGVycworICAgIGFuZCB0cmFpbGVycyBhcm91bmQgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAogMTkuIE9rLCBzbyB3aHkgYXJlIHRoZXJlIHR3byBkaWZmZXJlbnQgZm9ybWF0cz8KIAotICAgIFRoZSBnemlwIGZvcm1hdCB3YXMgZGVzaWduZWQgdG8gcmV0YWluIHRoZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24gYWJvdXQKLSAgICBhIHNpbmdsZSBmaWxlLCBzdWNoIGFzIHRoZSBuYW1lIGFuZCBsYXN0IG1vZGlmaWNhdGlvbiBkYXRlLiBUaGUgemxpYgotICAgIGZvcm1hdCBvbiB0aGUgb3RoZXIgaGFuZCB3YXMgZGVzaWduZWQgZm9yIGluLW1lbW9yeSBhbmQgY29tbXVuaWNhdGlvbgotICAgIGNoYW5uZWwgYXBwbGljYXRpb25zLCBhbmQgaGFzIGEgbXVjaCBtb3JlIGNvbXBhY3QgaGVhZGVyIGFuZCB0cmFpbGVyIGFuZAotICAgIHVzZXMgYSBmYXN0ZXIgaW50ZWdyaXR5IGNoZWNrIHRoYW4gZ3ppcC4KKyAgICBUaGUgZ3ppcCBmb3JtYXQgd2FzIGRlc2lnbmVkIHRvIHJldGFpbiB0aGUgZGlyZWN0b3J5IGluZm9ybWF0aW9uIGFib3V0IGEKKyAgICBzaW5nbGUgZmlsZSwgc3VjaCBhcyB0aGUgbmFtZSBhbmQgbGFzdCBtb2RpZmljYXRpb24gZGF0ZS4gIFRoZSB6bGliIGZvcm1hdAorICAgIG9uIHRoZSBvdGhlciBoYW5kIHdhcyBkZXNpZ25lZCBmb3IgaW4tbWVtb3J5IGFuZCBjb21tdW5pY2F0aW9uIGNoYW5uZWwKKyAgICBhcHBsaWNhdGlvbnMsIGFuZCBoYXMgYSBtdWNoIG1vcmUgY29tcGFjdCBoZWFkZXIgYW5kIHRyYWlsZXIgYW5kIHVzZXMgYQorICAgIGZhc3RlciBpbnRlZ3JpdHkgY2hlY2sgdGhhbiBnemlwLgogCiAyMC4gV2VsbCB0aGF0J3MgbmljZSwgYnV0IGhvdyBkbyBJIG1ha2UgYSBnemlwIGZpbGUgaW4gbWVtb3J5PwogCiAgICAgWW91IGNhbiByZXF1ZXN0IHRoYXQgZGVmbGF0ZSB3cml0ZSB0aGUgZ3ppcCBmb3JtYXQgaW5zdGVhZCBvZiB0aGUgemxpYgotICAgIGZvcm1hdCB1c2luZyBkZWZsYXRlSW5pdDIoKS4gWW91IGNhbiBhbHNvIHJlcXVlc3QgdGhhdCBpbmZsYXRlIGRlY29kZQotICAgIHRoZSBnemlwIGZvcm1hdCB1c2luZyBpbmZsYXRlSW5pdDIoKS4gUmVhZCB6bGliLmggZm9yIG1vcmUgZGV0YWlscy4KKyAgICBmb3JtYXQgdXNpbmcgZGVmbGF0ZUluaXQyKCkuICBZb3UgY2FuIGFsc28gcmVxdWVzdCB0aGF0IGluZmxhdGUgZGVjb2RlIHRoZQorICAgIGd6aXAgZm9ybWF0IHVzaW5nIGluZmxhdGVJbml0MigpLiAgUmVhZCB6bGliLmggZm9yIG1vcmUgZGV0YWlscy4KIAogMjEuIElzIHpsaWIgdGhyZWFkLXNhZmU/CiAKLSAgICBZZXMuIEhvd2V2ZXIgYW55IGxpYnJhcnkgcm91dGluZXMgdGhhdCB6bGliIHVzZXMgYW5kIGFueSBhcHBsaWNhdGlvbi0KLSAgICBwcm92aWRlZCBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBtdXN0IGFsc28gYmUgdGhyZWFkLXNhZmUuIHpsaWIncyBneioKKyAgICBZZXMuICBIb3dldmVyIGFueSBsaWJyYXJ5IHJvdXRpbmVzIHRoYXQgemxpYiB1c2VzIGFuZCBhbnkgYXBwbGljYXRpb24tCisgICAgcHJvdmlkZWQgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgbXVzdCBhbHNvIGJlIHRocmVhZC1zYWZlLiAgemxpYidzIGd6KgogICAgIGZ1bmN0aW9ucyB1c2Ugc3RkaW8gbGlicmFyeSByb3V0aW5lcywgYW5kIG1vc3Qgb2YgemxpYidzIGZ1bmN0aW9ucyB1c2UgdGhlCi0gICAgbGlicmFyeSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcyBieSBkZWZhdWx0LiB6bGliJ3MgSW5pdCBmdW5jdGlvbnMgYWxsb3cKLSAgICBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHByb3ZpZGUgY3VzdG9tIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLgorICAgIGxpYnJhcnkgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgYnkgZGVmYXVsdC4gIHpsaWIncyAqSW5pdCogZnVuY3Rpb25zCisgICAgYWxsb3cgZm9yIHRoZSBhcHBsaWNhdGlvbiB0byBwcm92aWRlIGN1c3RvbSBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KIAogICAgIE9mIGNvdXJzZSwgeW91IHNob3VsZCBvbmx5IG9wZXJhdGUgb24gYW55IGdpdmVuIHpsaWIgb3IgZ3ppcCBzdHJlYW0gZnJvbSBhCiAgICAgc2luZ2xlIHRocmVhZCBhdCBhIHRpbWUuCiAKIDIyLiBDYW4gSSB1c2UgemxpYiBpbiBteSBjb21tZXJjaWFsIGFwcGxpY2F0aW9uPwogCi0gICAgWWVzLiBQbGVhc2UgcmVhZCB0aGUgbGljZW5zZSBpbiB6bGliLmguCisgICAgWWVzLiAgUGxlYXNlIHJlYWQgdGhlIGxpY2Vuc2UgaW4gemxpYi5oLgogCiAyMy4gSXMgemxpYiB1bmRlciB0aGUgR05VIGxpY2Vuc2U/CiAKLSAgICBOby4gUGxlYXNlIHJlYWQgdGhlIGxpY2Vuc2UgaW4gemxpYi5oLgorICAgIE5vLiAgUGxlYXNlIHJlYWQgdGhlIGxpY2Vuc2UgaW4gemxpYi5oLgogCiAyNC4gVGhlIGxpY2Vuc2Ugc2F5cyB0aGF0IGFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgInBsYWlubHkgbWFya2VkIi4gU28KICAgICB3aGF0IGV4YWN0bHkgZG8gSSBuZWVkIHRvIGRvIHRvIG1lZXQgdGhhdCByZXF1aXJlbWVudD8KIAotICAgIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgWkxJQl9WRVJTSU9OIGFuZCBaTElCX1ZFUk5VTSAjZGVmaW5lcyBpbiB6bGliLmguIEluCisgICAgWW91IG5lZWQgdG8gY2hhbmdlIHRoZSBaTElCX1ZFUlNJT04gYW5kIFpMSUJfVkVSTlVNICNkZWZpbmVzIGluIHpsaWIuaC4gIEluCiAgICAgcGFydGljdWxhciwgdGhlIGZpbmFsIHZlcnNpb24gbnVtYmVyIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gImYiLCBhbmQgYW4KLSAgICBpZGVudGlmaWNhdGlvbiBzdHJpbmcgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIFpMSUJfVkVSU0lPTi4gVmVyc2lvbiBudW1iZXJzCisgICAgaWRlbnRpZmljYXRpb24gc3RyaW5nIHNob3VsZCBiZSBhcHBlbmRlZCB0byBaTElCX1ZFUlNJT04uICBWZXJzaW9uIG51bWJlcnMKICAgICB4LngueC5mIGFyZSByZXNlcnZlZCBmb3IgbW9kaWZpY2F0aW9ucyB0byB6bGliIGJ5IG90aGVycyB0aGFuIHRoZSB6bGliCi0gICAgbWFpbnRhaW5lcnMuIEZvciBleGFtcGxlLCBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgYmFzZSB6bGliIHlvdSBhcmUgYWx0ZXJpbmcKKyAgICBtYWludGFpbmVycy4gIEZvciBleGFtcGxlLCBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgYmFzZSB6bGliIHlvdSBhcmUgYWx0ZXJpbmcKICAgICBpcyAiMS4yLjMuNCIsIHRoZW4gaW4gemxpYi5oIHlvdSBzaG91bGQgY2hhbmdlIFpMSUJfVkVSTlVNIHRvIDB4MTIzZiwgYW5kCi0gICAgWkxJQl9WRVJTSU9OIHRvIHNvbWV0aGluZyBsaWtlICIxLjIuMy5mLXphY2hhcnktbW9kcy12MyIuIFlvdSBjYW4gYWxzbworICAgIFpMSUJfVkVSU0lPTiB0byBzb21ldGhpbmcgbGlrZSAiMS4yLjMuZi16YWNoYXJ5LW1vZHMtdjMiLiAgWW91IGNhbiBhbHNvCiAgICAgdXBkYXRlIHRoZSB2ZXJzaW9uIHN0cmluZ3MgaW4gZGVmbGF0ZS5jIGFuZCBpbmZ0cmVlcy5jLgogCiAgICAgRm9yIGFsdGVyZWQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIHlvdSBzaG91bGQgYWxzbyBub3RlIHRoZSBvcmlnaW4gYW5kCiAgICAgbmF0dXJlIG9mIHRoZSBjaGFuZ2VzIGluIHpsaWIuaCwgYXMgd2VsbCBhcyBpbiBDaGFuZ2VMb2cgYW5kIFJFQURNRSwgYWxvbmcKLSAgICB3aXRoIHRoZSBkYXRlcyBvZiB0aGUgYWx0ZXJhdGlvbnMuIFRoZSBvcmlnaW4gc2hvdWxkIGluY2x1ZGUgYXQgbGVhc3QgeW91cgorICAgIHdpdGggdGhlIGRhdGVzIG9mIHRoZSBhbHRlcmF0aW9ucy4gIFRoZSBvcmlnaW4gc2hvdWxkIGluY2x1ZGUgYXQgbGVhc3QgeW91cgogICAgIG5hbWUgKG9yIHlvdXIgY29tcGFueSdzIG5hbWUpLCBhbmQgYW4gZW1haWwgYWRkcmVzcyB0byBjb250YWN0IGZvciBoZWxwIG9yCiAgICAgaXNzdWVzIHdpdGggdGhlIGxpYnJhcnkuCiAKQEAgLTE5NywxMDUgKzE5NiwxMTIgQEAKIAogMjYuIFdpbGwgemxpYiB3b3JrIG9uIGEgNjQtYml0IG1hY2hpbmU/CiAKLSAgICBJdCBzaG91bGQuIEl0IGhhcyBiZWVuIHRlc3RlZCBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCBoYXMgbm8gZGVwZW5kZW5jZQotICAgIG9uIGFueSBkYXRhIHR5cGVzIGJlaW5nIGxpbWl0ZWQgdG8gMzItYml0cyBpbiBsZW5ndGguIElmIHlvdSBoYXZlIGFueQorICAgIFllcy4gIEl0IGhhcyBiZWVuIHRlc3RlZCBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCBoYXMgbm8gZGVwZW5kZW5jZSBvbiBhbnkKKyAgICBkYXRhIHR5cGVzIGJlaW5nIGxpbWl0ZWQgdG8gMzItYml0cyBpbiBsZW5ndGguICBJZiB5b3UgaGF2ZSBhbnkKICAgICBkaWZmaWN1bHRpZXMsIHBsZWFzZSBwcm92aWRlIGEgY29tcGxldGUgcHJvYmxlbSByZXBvcnQgdG8gemxpYkBnemlwLm9yZwogCiAyNy4gV2lsbCB6bGliIGRlY29tcHJlc3MgZGF0YSBmcm9tIHRoZSBQS1dhcmUgRGF0YSBDb21wcmVzc2lvbiBMaWJyYXJ5PwogCi0gICAgTm8uIFRoZSBQS1dhcmUgRENMIHVzZXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb21wcmVzc2VkIGRhdGEgZm9ybWF0Ci0gICAgdGhhbiBkb2VzIFBLWklQIGFuZCB6bGliLiBIb3dldmVyLCB5b3UgY2FuIGxvb2sgaW4gemxpYidzIGNvbnRyaWIvYmxhc3QKKyAgICBOby4gIFRoZSBQS1dhcmUgRENMIHVzZXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb21wcmVzc2VkIGRhdGEgZm9ybWF0IHRoYW4KKyAgICBkb2VzIFBLWklQIGFuZCB6bGliLiAgSG93ZXZlciwgeW91IGNhbiBsb29rIGluIHpsaWIncyBjb250cmliL2JsYXN0CiAgICAgZGlyZWN0b3J5IGZvciBhIHBvc3NpYmxlIHNvbHV0aW9uIHRvIHlvdXIgcHJvYmxlbS4KIAogMjguIENhbiBJIGFjY2VzcyBkYXRhIHJhbmRvbWx5IGluIGEgY29tcHJlc3NlZCBzdHJlYW0/CiAKLSAgICBObywgbm90IHdpdGhvdXQgc29tZSBwcmVwYXJhdGlvbi4gSWYgd2hlbiBjb21wcmVzc2luZyB5b3UgcGVyaW9kaWNhbGx5Ci0gICAgdXNlIFpfRlVMTF9GTFVTSCwgY2FyZWZ1bGx5IHdyaXRlIGFsbCB0aGUgcGVuZGluZyBkYXRhIGF0IHRob3NlIHBvaW50cywKLSAgICBhbmQga2VlcCBhbiBpbmRleCBvZiB0aG9zZSBsb2NhdGlvbnMsIHRoZW4geW91IGNhbiBzdGFydCBkZWNvbXByZXNzaW9uCi0gICAgYXQgdGhvc2UgcG9pbnRzLiBZb3UgaGF2ZSB0byBiZSBjYXJlZnVsIHRvIG5vdCB1c2UgWl9GVUxMX0ZMVVNIIHRvbwotICAgIG9mdGVuLCBzaW5jZSBpdCBjYW4gc2lnbmlmaWNhbnRseSBkZWdyYWRlIGNvbXByZXNzaW9uLgorICAgIE5vLCBub3Qgd2l0aG91dCBzb21lIHByZXBhcmF0aW9uLiAgSWYgd2hlbiBjb21wcmVzc2luZyB5b3UgcGVyaW9kaWNhbGx5IHVzZQorICAgIFpfRlVMTF9GTFVTSCwgY2FyZWZ1bGx5IHdyaXRlIGFsbCB0aGUgcGVuZGluZyBkYXRhIGF0IHRob3NlIHBvaW50cywgYW5kCisgICAga2VlcCBhbiBpbmRleCBvZiB0aG9zZSBsb2NhdGlvbnMsIHRoZW4geW91IGNhbiBzdGFydCBkZWNvbXByZXNzaW9uIGF0IHRob3NlCisgICAgcG9pbnRzLiAgWW91IGhhdmUgdG8gYmUgY2FyZWZ1bCB0byBub3QgdXNlIFpfRlVMTF9GTFVTSCB0b28gb2Z0ZW4sIHNpbmNlIGl0CisgICAgY2FuIHNpZ25pZmljYW50bHkgZGVncmFkZSBjb21wcmVzc2lvbi4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2NhbiBhCisgICAgZGVmbGF0ZSBzdHJlYW0gb25jZSB0byBnZW5lcmF0ZSBhbiBpbmRleCwgYW5kIHRoZW4gdXNlIHRoYXQgaW5kZXggZm9yCisgICAgcmFuZG9tIGFjY2Vzcy4gIFNlZSBleGFtcGxlcy96cmFuLmMgLgogCiAyOS4gRG9lcyB6bGliIHdvcmsgb24gTVZTLCBPUy8zOTAsIENJQ1MsIGV0Yy4/CiAKLSAgICBXZSBkb24ndCBrbm93IGZvciBzdXJlLiBXZSBoYXZlIGhlYXJkIG9jY2FzaW9uYWwgcmVwb3J0cyBvZiBzdWNjZXNzIG9uCi0gICAgdGhlc2Ugc3lzdGVtcy4gSWYgeW91IGRvIHVzZSBpdCBvbiBvbmUgb2YgdGhlc2UsIHBsZWFzZSBwcm92aWRlIHVzIHdpdGgKLSAgICBhIHJlcG9ydCwgaW5zdHJ1Y3Rpb25zLCBhbmQgcGF0Y2hlcyB0aGF0IHdlIGNhbiByZWZlcmVuY2Ugd2hlbiB3ZSBnZXQKLSAgICB0aGVzZSBxdWVzdGlvbnMuIFRoYW5rcy4KKyAgICBJdCBoYXMgaW4gdGhlIHBhc3QsIGJ1dCB3ZSBoYXZlIG5vdCBoZWFyZCBvZiBhbnkgcmVjZW50IGV2aWRlbmNlLiAgVGhlcmUKKyAgICB3ZXJlIHdvcmtpbmcgcG9ydHMgb2YgemxpYiAxLjEuNCB0byBNVlMsIGJ1dCB0aG9zZSBsaW5rcyBubyBsb25nZXIgd29yay4KKyAgICBJZiB5b3Uga25vdyBvZiByZWNlbnQsIHN1Y2Nlc3NmdWwgYXBwbGljYXRpb25zIG9mIHpsaWIgb24gdGhlc2Ugb3BlcmF0aW5nCisgICAgc3lzdGVtcywgcGxlYXNlIGxldCB1cyBrbm93LiAgVGhhbmtzLgogCi0zMC4gSXMgdGhlcmUgc29tZSBzaW1wbGVyLCBlYXNpZXIgdG8gcmVhZCB2ZXJzaW9uIG9mIGluZmxhdGUgSSBjYW4gbG9vayBhdAotICAgIHRvIHVuZGVyc3RhbmQgdGhlIGRlZmxhdGUgZm9ybWF0PworMzAuIElzIHRoZXJlIHNvbWUgc2ltcGxlciwgZWFzaWVyIHRvIHJlYWQgdmVyc2lvbiBvZiBpbmZsYXRlIEkgY2FuIGxvb2sgYXQgdG8KKyAgICB1bmRlcnN0YW5kIHRoZSBkZWZsYXRlIGZvcm1hdD8KIAotICAgIEZpcnN0IG9mZiwgeW91IHNob3VsZCByZWFkIFJGQyAxOTUxLiBTZWNvbmQsIHllcy4gTG9vayBpbiB6bGliJ3MKKyAgICBGaXJzdCBvZmYsIHlvdSBzaG91bGQgcmVhZCBSRkMgMTk1MS4gIFNlY29uZCwgeWVzLiAgTG9vayBpbiB6bGliJ3MKICAgICBjb250cmliL3B1ZmYgZGlyZWN0b3J5LgogCiAzMS4gRG9lcyB6bGliIGluZnJpbmdlIG9uIGFueSBwYXRlbnRzPwogCi0gICAgQXMgZmFyIGFzIHdlIGtub3csIG5vLiBJbiBmYWN0LCB0aGF0IHdhcyBvcmlnaW5hbGx5IHRoZSB3aG9sZSBwb2ludCBiZWhpbmQKLSAgICB6bGliLiBMb29rIGhlcmUgZm9yIHNvbWUgbW9yZSBpbmZvcm1hdGlvbjoKKyAgICBBcyBmYXIgYXMgd2Uga25vdywgbm8uICBJbiBmYWN0LCB0aGF0IHdhcyBvcmlnaW5hbGx5IHRoZSB3aG9sZSBwb2ludCBiZWhpbmQKKyAgICB6bGliLiAgTG9vayBoZXJlIGZvciBzb21lIG1vcmUgaW5mb3JtYXRpb246CiAKICAgICBodHRwOi8vd3d3Lmd6aXAub3JnLyNmYXExMQogCiAzMi4gQ2FuIHpsaWIgd29yayB3aXRoIGdyZWF0ZXIgdGhhbiA0IEdCIG9mIGRhdGE/CiAKLSAgICBZZXMuIGluZmxhdGUoKSBhbmQgZGVmbGF0ZSgpIHdpbGwgcHJvY2VzcyBhbnkgYW1vdW50IG9mIGRhdGEgY29ycmVjdGx5LgorICAgIFllcy4gIGluZmxhdGUoKSBhbmQgZGVmbGF0ZSgpIHdpbGwgcHJvY2VzcyBhbnkgYW1vdW50IG9mIGRhdGEgY29ycmVjdGx5LgogICAgIEVhY2ggY2FsbCBvZiBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpIGlzIGxpbWl0ZWQgdG8gaW5wdXQgYW5kIG91dHB1dCBjaHVua3MKICAgICBvZiB0aGUgbWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBzdG9yZWQgaW4gdGhlIGNvbXBpbGVyJ3MgInVuc2lnbmVkIGludCIKLSAgICB0eXBlLCBidXQgdGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBjaHVua3MuIE5vdGUgaG93ZXZlciB0aGF0IHRoZQotICAgIHN0cm0udG90YWxfaW4gYW5kIHN0cm1fdG90YWxfb3V0IGNvdW50ZXJzIG1heSBiZSBsaW1pdGVkIHRvIDQgR0IuIFRoZXNlCisgICAgdHlwZSwgYnV0IHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgY2h1bmtzLiAgTm90ZSBob3dldmVyIHRoYXQgdGhlCisgICAgc3RybS50b3RhbF9pbiBhbmQgc3RybV90b3RhbF9vdXQgY291bnRlcnMgbWF5IGJlIGxpbWl0ZWQgdG8gNCBHQi4gIFRoZXNlCiAgICAgY291bnRlcnMgYXJlIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIGFyZSBub3QgdXNlZCBpbnRlcm5hbGx5IGJ5Ci0gICAgaW5mbGF0ZSgpIG9yIGRlZmxhdGUoKS4gVGhlIGFwcGxpY2F0aW9uIGNhbiBlYXNpbHkgc2V0IHVwIGl0cyBvd24gY291bnRlcnMKKyAgICBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpLiAgVGhlIGFwcGxpY2F0aW9uIGNhbiBlYXNpbHkgc2V0IHVwIGl0cyBvd24gY291bnRlcnMKICAgICB1cGRhdGVkIGFmdGVyIGVhY2ggY2FsbCBvZiBpbmZsYXRlKCkgb3IgZGVmbGF0ZSgpIHRvIGNvdW50IGJleW9uZCA0IEdCLgogICAgIGNvbXByZXNzKCkgYW5kIHVuY29tcHJlc3MoKSBtYXkgYmUgbGltaXRlZCB0byA0IEdCLCBzaW5jZSB0aGV5IG9wZXJhdGUgaW4gYQotICAgIHNpbmdsZSBjYWxsLiBnenNlZWsoKSBhbmQgZ3p0ZWxsKCkgbWF5IGJlIGxpbWl0ZWQgdG8gNCBHQiBkZXBlbmRpbmcgb24gaG93Ci0gICAgemxpYiBpcyBjb21waWxlZC4gU2VlIHRoZSB6bGliQ29tcGlsZUZsYWdzKCkgZnVuY3Rpb24gaW4gemxpYi5oLgorICAgIHNpbmdsZSBjYWxsLiAgZ3pzZWVrKCkgYW5kIGd6dGVsbCgpIG1heSBiZSBsaW1pdGVkIHRvIDQgR0IgZGVwZW5kaW5nIG9uIGhvdworICAgIHpsaWIgaXMgY29tcGlsZWQuICBTZWUgdGhlIHpsaWJDb21waWxlRmxhZ3MoKSBmdW5jdGlvbiBpbiB6bGliLmguCiAKLSAgICBUaGUgd29yZCAibWF5IiBhcHBlYXJzIHNldmVyYWwgdGltZXMgYWJvdmUgc2luY2UgdGhlcmUgaXMgYSA0IEdCIGxpbWl0Ci0gICAgb25seSBpZiB0aGUgY29tcGlsZXIncyAibG9uZyIgdHlwZSBpcyAzMiBiaXRzLiBJZiB0aGUgY29tcGlsZXIncyAibG9uZyIKLSAgICB0eXBlIGlzIDY0IGJpdHMsIHRoZW4gdGhlIGxpbWl0IGlzIDE2IGV4YWJ5dGVzLgorICAgIFRoZSB3b3JkICJtYXkiIGFwcGVhcnMgc2V2ZXJhbCB0aW1lcyBhYm92ZSBzaW5jZSB0aGVyZSBpcyBhIDQgR0IgbGltaXQgb25seQorICAgIGlmIHRoZSBjb21waWxlcidzICJsb25nIiB0eXBlIGlzIDMyIGJpdHMuICBJZiB0aGUgY29tcGlsZXIncyAibG9uZyIgdHlwZSBpcworICAgIDY0IGJpdHMsIHRoZW4gdGhlIGxpbWl0IGlzIDE2IGV4YWJ5dGVzLgogCiAzMy4gRG9lcyB6bGliIGhhdmUgYW55IHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcz8KIAotICAgIFRoZSBvbmx5IG9uZSB0aGF0IHdlIGFyZSBhd2FyZSBvZiBpcyBwb3RlbnRpYWxseSBpbiBnenByaW50ZigpLiBJZiB6bGliCi0gICAgaXMgY29tcGlsZWQgdG8gdXNlIHNwcmludGYoKSBvciB2c3ByaW50ZigpLCB0aGVuIHRoZXJlIGlzIG5vIHByb3RlY3Rpb24KLSAgICBhZ2FpbnN0IGEgYnVmZmVyIG92ZXJmbG93IG9mIGEgNEsgc3RyaW5nIHNwYWNlLCBvdGhlciB0aGFuIHRoZSBjYWxsZXIgb2YKLSAgICBnenByaW50ZigpIGFzc3VyaW5nIHRoYXQgdGhlIG91dHB1dCB3aWxsIG5vdCBleGNlZWQgNEsuIE9uIHRoZSBvdGhlcgotICAgIGhhbmQsIGlmIHpsaWIgaXMgY29tcGlsZWQgdG8gdXNlIHNucHJpbnRmKCkgb3IgdnNucHJpbnRmKCksIHdoaWNoIHNob3VsZAotICAgIG5vcm1hbGx5IGJlIHRoZSBjYXNlLCB0aGVuIHRoZXJlIGlzIG5vIHZ1bG5lcmFiaWxpdHkuIFRoZSAuL2NvbmZpZ3VyZQotICAgIHNjcmlwdCB3aWxsIGRpc3BsYXkgd2FybmluZ3MgaWYgYW4gaW5zZWN1cmUgdmFyaWF0aW9uIG9mIHNwcmludGYoKSB3aWxsCi0gICAgYmUgdXNlZCBieSBnenByaW50ZigpLiBBbHNvIHRoZSB6bGliQ29tcGlsZUZsYWdzKCkgZnVuY3Rpb24gd2lsbCByZXR1cm4KLSAgICBpbmZvcm1hdGlvbiBvbiB3aGF0IHZhcmlhbnQgb2Ygc3ByaW50ZigpIGlzIHVzZWQgYnkgZ3pwcmludGYoKS4KKyAgICBUaGUgb25seSBvbmUgdGhhdCB3ZSBhcmUgYXdhcmUgb2YgaXMgcG90ZW50aWFsbHkgaW4gZ3pwcmludGYoKS4gIElmIHpsaWIgaXMKKyAgICBjb21waWxlZCB0byB1c2Ugc3ByaW50ZigpIG9yIHZzcHJpbnRmKCksIHRoZW4gdGhlcmUgaXMgbm8gcHJvdGVjdGlvbgorICAgIGFnYWluc3QgYSBidWZmZXIgb3ZlcmZsb3cgb2YgYW4gOEsgc3RyaW5nIHNwYWNlIChvciBvdGhlciB2YWx1ZSBhcyBzZXQgYnkKKyAgICBnemJ1ZmZlcigpKSwgb3RoZXIgdGhhbiB0aGUgY2FsbGVyIG9mIGd6cHJpbnRmKCkgYXNzdXJpbmcgdGhhdCB0aGUgb3V0cHV0CisgICAgd2lsbCBub3QgZXhjZWVkIDhLLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHpsaWIgaXMgY29tcGlsZWQgdG8gdXNlCisgICAgc25wcmludGYoKSBvciB2c25wcmludGYoKSwgd2hpY2ggc2hvdWxkIG5vcm1hbGx5IGJlIHRoZSBjYXNlLCB0aGVuIHRoZXJlIGlzCisgICAgbm8gdnVsbmVyYWJpbGl0eS4gIFRoZSAuL2NvbmZpZ3VyZSBzY3JpcHQgd2lsbCBkaXNwbGF5IHdhcm5pbmdzIGlmIGFuCisgICAgaW5zZWN1cmUgdmFyaWF0aW9uIG9mIHNwcmludGYoKSB3aWxsIGJlIHVzZWQgYnkgZ3pwcmludGYoKS4gIEFsc28gdGhlCisgICAgemxpYkNvbXBpbGVGbGFncygpIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGluZm9ybWF0aW9uIG9uIHdoYXQgdmFyaWFudCBvZgorICAgIHNwcmludGYoKSBpcyB1c2VkIGJ5IGd6cHJpbnRmKCkuCiAKICAgICBJZiB5b3UgZG9uJ3QgaGF2ZSBzbnByaW50ZigpIG9yIHZzbnByaW50ZigpIGFuZCB3b3VsZCBsaWtlIG9uZSwgeW91IGNhbgogICAgIGZpbmQgYSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiBoZXJlOgogCiAgICAgICAgIGh0dHA6Ly93d3cuaWpzLnNpL3NvZnR3YXJlL3NucHJpbnRmLwogCi0gICAgTm90ZSB0aGF0IHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgemxpYi4gVmVyc2lvbnMKLSAgICAxLjEuMyBhbmQgYmVmb3JlIHdlcmUgc3ViamVjdCB0byBhIGRvdWJsZS1mcmVlIHZ1bG5lcmFiaWxpdHkuCisgICAgTm90ZSB0aGF0IHlvdSBzaG91bGQgYmUgdXNpbmcgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgemxpYi4gIFZlcnNpb25zCisgICAgMS4xLjMgYW5kIGJlZm9yZSB3ZXJlIHN1YmplY3QgdG8gYSBkb3VibGUtZnJlZSB2dWxuZXJhYmlsaXR5LCBhbmQgdmVyc2lvbnMKKyAgICAxLjIuMSBhbmQgMS4yLjIgd2VyZSBzdWJqZWN0IHRvIGFuIGFjY2VzcyBleGNlcHRpb24gd2hlbiBkZWNvbXByZXNzaW5nCisgICAgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEuCiAKIDM0LiBJcyB0aGVyZSBhIEphdmEgdmVyc2lvbiBvZiB6bGliPwogCiAgICAgUHJvYmFibHkgd2hhdCB5b3Ugd2FudCBpcyB0byB1c2UgemxpYiBpbiBKYXZhLiB6bGliIGlzIGFscmVhZHkgaW5jbHVkZWQKICAgICBhcyBwYXJ0IG9mIHRoZSBKYXZhIFNESyBpbiB0aGUgamF2YS51dGlsLnppcCBwYWNrYWdlLiBJZiB5b3UgcmVhbGx5IHdhbnQKICAgICBhIHZlcnNpb24gb2YgemxpYiB3cml0dGVuIGluIHRoZSBKYXZhIGxhbmd1YWdlLCBsb29rIG9uIHRoZSB6bGliIGhvbWUKLSAgICBwYWdlIGZvciBsaW5rczogaHR0cDovL3d3dy56bGliLm9yZy8KKyAgICBwYWdlIGZvciBsaW5rczogaHR0cDovL3psaWIubmV0LyAuCiAKIDM1LiBJIGdldCB0aGlzIG9yIHRoYXQgY29tcGlsZXIgb3Igc291cmNlLWNvZGUgc2Nhbm5lciB3YXJuaW5nIHdoZW4gSSBjcmFuayBpdAogICAgIHVwIHRvIG1heGltYWxseS1wZWRhbnRpYy4gQ2FuJ3QgeW91IGd1eXMgd3JpdGUgcHJvcGVyIGNvZGU/CiAKICAgICBNYW55IHllYXJzIGFnbywgd2UgZ2F2ZSB1cCBhdHRlbXB0aW5nIHRvIGF2b2lkIHdhcm5pbmdzIG9uIGV2ZXJ5IGNvbXBpbGVyCi0gICAgaW4gdGhlIHVuaXZlcnNlLiBJdCBqdXN0IGdvdCB0byBiZSBhIHdhc3RlIG9mIHRpbWUsIGFuZCBzb21lIGNvbXBpbGVycwotICAgIHdlcmUgZG93bnJpZ2h0IHNpbGx5LiBTbyBub3csIHdlIHNpbXBseSBtYWtlIHN1cmUgdGhhdCB0aGUgY29kZSBhbHdheXMKLSAgICB3b3Jrcy4KKyAgICBpbiB0aGUgdW5pdmVyc2UuICBJdCBqdXN0IGdvdCB0byBiZSBhIHdhc3RlIG9mIHRpbWUsIGFuZCBzb21lIGNvbXBpbGVycworICAgIHdlcmUgZG93bnJpZ2h0IHNpbGx5IGFzIHdlbGwgYXMgY29udHJhZGljdGVkIGVhY2ggb3RoZXIuICBTbyBub3csIHdlIHNpbXBseQorICAgIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb2RlIGFsd2F5cyB3b3Jrcy4KIAogMzYuIFZhbGdyaW5kIChvciBzb21lIHNpbWlsYXIgbWVtb3J5IGFjY2VzcyBjaGVja2VyKSBzYXlzIHRoYXQgZGVmbGF0ZSBpcwogICAgIHBlcmZvcm1pbmcgYSBjb25kaXRpb25hbCBqdW1wIHRoYXQgZGVwZW5kcyBvbiBhbiB1bmluaXRpYWxpemVkIHZhbHVlLgogICAgIElzbid0IHRoYXQgYSBidWc/CiAKLSAgICBOby4gIFRoYXQgaXMgaW50ZW50aW9uYWwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGFuZCB0aGUgb3V0cHV0IG9mCi0gICAgZGVmbGF0ZSBpcyBub3QgYWZmZWN0ZWQuICBUaGlzIG9ubHkgc3RhcnRlZCBzaG93aW5nIHVwIHJlY2VudGx5IHNpbmNlCi0gICAgemxpYiAxLjIueCB1c2VzIG1hbGxvYygpIGJ5IGRlZmF1bHQgZm9yIGFsbG9jYXRpb25zLCB3aGVyZWFzIGVhcmxpZXIKLSAgICB2ZXJzaW9ucyB1c2VkIGNhbGxvYygpLCB3aGljaCB6ZXJvcyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisgICAgTm8uICBUaGF0IGlzIGludGVudGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBhbmQgdGhlIG91dHB1dCBvZiBkZWZsYXRlCisgICAgaXMgbm90IGFmZmVjdGVkLiAgVGhpcyBvbmx5IHN0YXJ0ZWQgc2hvd2luZyB1cCByZWNlbnRseSBzaW5jZSB6bGliIDEuMi54CisgICAgdXNlcyBtYWxsb2MoKSBieSBkZWZhdWx0IGZvciBhbGxvY2F0aW9ucywgd2hlcmVhcyBlYXJsaWVyIHZlcnNpb25zIHVzZWQKKyAgICBjYWxsb2MoKSwgd2hpY2ggemVyb3Mgb3V0IHRoZSBhbGxvY2F0ZWQgbWVtb3J5LiAgRXZlbiB0aG91Z2ggdGhlIGNvZGUgd2FzCisgICAgY29ycmVjdCwgdmVyc2lvbnMgMS4yLjQgYW5kIGxhdGVyIHdhcyBjaGFuZ2VkIHRvIG5vdCBzdGltdWxhdGUgdGhlc2UKKyAgICBjaGVja2Vycy4KIAogMzcuIFdpbGwgemxpYiByZWFkIHRoZSAoaW5zZXJ0IGFueSBhbmNpZW50IG9yIGFyY2FuZSBmb3JtYXQgaGVyZSkgY29tcHJlc3NlZAogICAgIGRhdGEgZm9ybWF0PwpAQCAtMzA1LDIwICszMTEsMjEgQEAKIAogMzguIEhvdyBjYW4gSSBlbmNyeXB0L2RlY3J5cHQgemlwIGZpbGVzIHdpdGggemxpYj8KIAotICAgIHpsaWIgZG9lc24ndCBzdXBwb3J0IGVuY3J5cHRpb24uIFRoZSBvcmlnaW5hbCBQS1pJUCBlbmNyeXB0aW9uIGlzIHZlcnkgd2VhawotICAgIGFuZCBjYW4gYmUgYnJva2VuIHdpdGggZnJlZWx5IGF2YWlsYWJsZSBwcm9ncmFtcy4gVG8gZ2V0IHN0cm9uZyBlbmNyeXB0aW9uLAotICAgIHVzZSBHbnVQRywgaHR0cDovL3d3dy5nbnVwZy5vcmcvICwgd2hpY2ggYWxyZWFkeSBpbmNsdWRlcyB6bGliIGNvbXByZXNzaW9uLgotICAgIEZvciBQS1pJUCBjb21wYXRpYmxlICJlbmNyeXB0aW9uIiwgbG9vayBhdCBodHRwOi8vd3d3LmluZm8temlwLm9yZy8KKyAgICB6bGliIGRvZXNuJ3Qgc3VwcG9ydCBlbmNyeXB0aW9uLiAgVGhlIG9yaWdpbmFsIFBLWklQIGVuY3J5cHRpb24gaXMgdmVyeQorICAgIHdlYWsgYW5kIGNhbiBiZSBicm9rZW4gd2l0aCBmcmVlbHkgYXZhaWxhYmxlIHByb2dyYW1zLiAgVG8gZ2V0IHN0cm9uZworICAgIGVuY3J5cHRpb24sIHVzZSBHbnVQRywgaHR0cDovL3d3dy5nbnVwZy5vcmcvICwgd2hpY2ggYWxyZWFkeSBpbmNsdWRlcyB6bGliCisgICAgY29tcHJlc3Npb24uICBGb3IgUEtaSVAgY29tcGF0aWJsZSAiZW5jcnlwdGlvbiIsIGxvb2sgYXQKKyAgICBodHRwOi8vd3d3LmluZm8temlwLm9yZy8KIAogMzkuIFdoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAiZ3ppcCIgYW5kICJkZWZsYXRlIiBIVFRQIDEuMSBlbmNvZGluZ3M/CiAKLSAgICAiZ3ppcCIgaXMgdGhlIGd6aXAgZm9ybWF0LCBhbmQgImRlZmxhdGUiIGlzIHRoZSB6bGliIGZvcm1hdC4gVGhleSBzaG91bGQKLSAgICBwcm9iYWJseSBoYXZlIGNhbGxlZCB0aGUgc2Vjb25kIG9uZSAiemxpYiIgaW5zdGVhZCB0byBhdm9pZCBjb25mdXNpb24KLSAgICB3aXRoIHRoZSByYXcgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0LiBXaGlsZSB0aGUgSFRUUCAxLjEgUkZDIDI2MTYKKyAgICAiZ3ppcCIgaXMgdGhlIGd6aXAgZm9ybWF0LCBhbmQgImRlZmxhdGUiIGlzIHRoZSB6bGliIGZvcm1hdC4gIFRoZXkgc2hvdWxkCisgICAgcHJvYmFibHkgaGF2ZSBjYWxsZWQgdGhlIHNlY29uZCBvbmUgInpsaWIiIGluc3RlYWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGgKKyAgICB0aGUgcmF3IGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdC4gIFdoaWxlIHRoZSBIVFRQIDEuMSBSRkMgMjYxNgogICAgIGNvcnJlY3RseSBwb2ludHMgdG8gdGhlIHpsaWIgc3BlY2lmaWNhdGlvbiBpbiBSRkMgMTk1MCBmb3IgdGhlICJkZWZsYXRlIgogICAgIHRyYW5zZmVyIGVuY29kaW5nLCB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBzZXJ2ZXJzIGFuZCBicm93c2VycyB0aGF0CiAgICAgaW5jb3JyZWN0bHkgcHJvZHVjZSBvciBleHBlY3QgcmF3IGRlZmxhdGUgZGF0YSBwZXIgdGhlIGRlZmxhdGUKLSAgICBzcGVjZmljaWF0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiBTbyBldmVuIHRob3VnaCB0aGUKKyAgICBzcGVjZmljaWF0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCiAgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQogICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKICAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCkBAIC0zMjgsMTIgKzMzNSwzMiBAQAogCiA0MC4gRG9lcyB6bGliIHN1cHBvcnQgdGhlIG5ldyAiRGVmbGF0ZTY0IiBmb3JtYXQgaW50cm9kdWNlZCBieSBQS1dhcmU/CiAKLSAgICBOby4gUEtXYXJlIGhhcyBhcHBhcmVudGx5IGRlY2lkZWQgdG8ga2VlcCB0aGF0IGZvcm1hdCBwcm9wcmlldGFyeSwgc2luY2UKLSAgICB0aGV5IGhhdmUgbm90IGRvY3VtZW50ZWQgaXQgYXMgdGhleSBoYXZlIHByZXZpb3VzIGNvbXByZXNzaW9uIGZvcm1hdHMuCi0gICAgSW4gYW55IGNhc2UsIHRoZSBjb21wcmVzc2lvbiBpbXByb3ZlbWVudHMgYXJlIHNvIG1vZGVzdCBjb21wYXJlZCB0byBvdGhlcgotICAgIG1vcmUgbW9kZXJuIGFwcHJvYWNoZXMsIHRoYXQgaXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBpbXBsZW1lbnQuCisgICAgTm8uICBQS1dhcmUgaGFzIGFwcGFyZW50bHkgZGVjaWRlZCB0byBrZWVwIHRoYXQgZm9ybWF0IHByb3ByaWV0YXJ5LCBzaW5jZQorICAgIHRoZXkgaGF2ZSBub3QgZG9jdW1lbnRlZCBpdCBhcyB0aGV5IGhhdmUgcHJldmlvdXMgY29tcHJlc3Npb24gZm9ybWF0cy4gIEluCisgICAgYW55IGNhc2UsIHRoZSBjb21wcmVzc2lvbiBpbXByb3ZlbWVudHMgYXJlIHNvIG1vZGVzdCBjb21wYXJlZCB0byBvdGhlciBtb3JlCisgICAgbW9kZXJuIGFwcHJvYWNoZXMsIHRoYXQgaXQncyBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBpbXBsZW1lbnQuCiAKLTQxLiBDYW4geW91IHBsZWFzZSBzaWduIHRoZXNlIGxlbmd0aHkgbGVnYWwgZG9jdW1lbnRzIGFuZCBmYXggdGhlbSBiYWNrIHRvIHVzCis0MS4gSSdtIGhhdmluZyBhIHByb2JsZW0gd2l0aCB0aGUgemlwIGZ1bmN0aW9ucyBpbiB6bGliLCBjYW4geW91IGhlbHA/CisKKyAgICBUaGVyZSBhcmUgbm8gemlwIGZ1bmN0aW9ucyBpbiB6bGliLiAgWW91IGFyZSBwcm9iYWJseSB1c2luZyBtaW5pemlwIGJ5CisgICAgR2lsZXMgVm9sbGFudCwgd2hpY2ggaXMgZm91bmQgaW4gdGhlIGNvbnRyaWIgZGlyZWN0b3J5IG9mIHpsaWIuICBJdCBpcyBub3QKKyAgICBwYXJ0IG9mIHpsaWIuICBJbiBmYWN0IG5vbmUgb2YgdGhlIHN0dWZmIGluIGNvbnRyaWIgaXMgcGFydCBvZiB6bGliLiAgVGhlCisgICAgZmlsZXMgaW4gdGhlcmUgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHpsaWIgYXV0aG9ycy4gIFlvdSBuZWVkIHRvIGNvbnRhY3QKKyAgICB0aGUgYXV0aG9ycyBvZiB0aGUgcmVzcGVjdGl2ZSBjb250cmlidXRpb24gZm9yIGhlbHAuCisKKzQyLiBUaGUgbWF0Y2guYXNtIGNvZGUgaW4gY29udHJpYiBpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgICAgU2luY2UgaXQncyBwYXJ0IG9mIHpsaWIsIGRvZXNuJ3QgdGhhdCBtZWFuIHRoYXQgYWxsIG9mIHpsaWIgZmFsbHMgdW5kZXIgdGhlCisgICAgR05VIEdQTD8KKworICAgIE5vLiAgVGhlIGZpbGVzIGluIGNvbnRyaWIgYXJlIG5vdCBwYXJ0IG9mIHpsaWIuICBUaGV5IHdlcmUgY29udHJpYnV0ZWQgYnkKKyAgICBvdGhlciBhdXRob3JzIGFuZCBhcmUgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSB0byB0aGUgdXNlciB3aXRoaW4gdGhlIHpsaWIKKyAgICBkaXN0cmlidXRpb24uICBFYWNoIGl0ZW0gaW4gY29udHJpYiBoYXMgaXRzIG93biBsaWNlbnNlLgorCis0My4gSXMgemxpYiBzdWJqZWN0IHRvIGV4cG9ydCBjb250cm9scz8gIFdoYXQgaXMgaXRzIEVDQ04/CisKKyAgICB6bGliIGlzIG5vdCBzdWJqZWN0IHRvIGV4cG9ydCBjb250cm9scywgYW5kIHNvIGlzIGNsYXNzaWZpZWQgYXMgRUFSOTkuCisKKzQ0LiBDYW4geW91IHBsZWFzZSBzaWduIHRoZXNlIGxlbmd0aHkgbGVnYWwgZG9jdW1lbnRzIGFuZCBmYXggdGhlbSBiYWNrIHRvIHVzCiAgICAgc28gdGhhdCB3ZSBjYW4gdXNlIHlvdXIgc29mdHdhcmUgaW4gb3VyIHByb2R1Y3Q/CiAKICAgICBOby4gR28gYXdheS4gU2hvby4KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9JTkRFWCBiL01vZHVsZXMvemxpYi9JTkRFWAppbmRleCAwNTg3ZTU5Li5mNmM1MWNhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvSU5ERVgKKysrIGIvTW9kdWxlcy96bGliL0lOREVYCkBAIC0xLDIzICsxLDMyIEBACitDTWFrZUxpc3RzLnR4dCAgY21ha2UgYnVpbGQgZmlsZQogQ2hhbmdlTG9nICAgICAgIGhpc3Rvcnkgb2YgY2hhbmdlcwogRkFRICAgICAgICAgICAgIEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zIGFib3V0IHpsaWIKIElOREVYICAgICAgICAgICB0aGlzIGZpbGUKLU1ha2VmaWxlICAgICAgICBtYWtlZmlsZSBmb3IgVW5peCAoZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZSkKLU1ha2VmaWxlLmluICAgICBtYWtlZmlsZSBmb3IgVW5peCAodGVtcGxhdGUgZm9yIGNvbmZpZ3VyZSkKK01ha2VmaWxlICAgICAgICBkdW1teSBNYWtlZmlsZSB0aGF0IHRlbGxzIHlvdSB0byAuL2NvbmZpZ3VyZQorTWFrZWZpbGUuaW4gICAgIHRlbXBsYXRlIGZvciBVbml4IE1ha2VmaWxlCiBSRUFETUUgICAgICAgICAgZ3Vlc3Mgd2hhdAotYWxnb3JpdGhtLnR4dCAgIGRlc2NyaXB0aW9uIG9mIHRoZSAoZGUpY29tcHJlc3Npb24gYWxnb3JpdGhtCiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAotemNvbmYuaW4uaCAgICAgIHRlbXBsYXRlIGZvciB6Y29uZi5oICh1c2VkIGJ5IGNvbmZpZ3VyZSkKK21ha2Vfdm1zLmNvbSAgICBtYWtlZmlsZSBmb3IgVk1TCit0cmVlYnVpbGQueG1sICAgWE1MIGRlc2NyaXB0aW9uIG9mIHNvdXJjZSBmaWxlIGRlcGVuZGVuY2llcworemNvbmYuaC5jbWFrZWluIHpjb25mLmggdGVtcGxhdGUgZm9yIGNtYWtlCit6Y29uZi5oLmluICAgICAgemNvbmYuaCB0ZW1wbGF0ZSBmb3IgY29uZmlndXJlCit6bGliLjMgICAgICAgICAgTWFuIHBhZ2UgZm9yIHpsaWIKK3psaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQREYgZm9ybWF0Cit6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCit6bGliLnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYjJhbnNpICAgICAgIHBlcmwgc2NyaXB0IHRvIGNvbnZlcnQgc291cmNlIGZpbGVzIGZvciBDKysgY29tcGlsYXRpb24KIAogYW1pZ2EvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQW1pZ2EgU0FTIEMKLWFzNDAwLyAgICAgICAgICBtYWtlZmlsZXMgZm9yIElCTSBBUy80MDAKK2RvYy8gICAgICAgICAgICBkb2N1bWVudGF0aW9uIGZvciBmb3JtYXRzIGFuZCBhbGdvcml0aG1zCiBtc2Rvcy8gICAgICAgICAgbWFrZWZpbGVzIGZvciBNU0RPUworbmludGVuZG9kcy8gICAgIG1ha2VmaWxlIGZvciBOaW50ZW5kbyBEUwogb2xkLyAgICAgICAgICAgIG1ha2VmaWxlcyBmb3IgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGFuZCB6bGliIGRvY3VtZW50YXRpb24KICAgICAgICAgICAgICAgICBmaWxlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIHVwZGF0ZWQgZm9yIHpsaWIgMS4yLngKLXByb2plY3RzLyAgICAgICBwcm9qZWN0cyBmb3IgdmFyaW91cyBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50cwogcW54LyAgICAgICAgICAgIG1ha2VmaWxlcyBmb3IgUU5YCit3YXRjb20vICAgICAgICAgbWFrZWZpbGVzIGZvciBPcGVuV2F0Y29tCiB3aW4zMi8gICAgICAgICAgbWFrZWZpbGVzIGZvciBXaW5kb3dzCiAKLSAgICAgICAgICAgICAgICB6bGliIHB1YmxpYyBoZWFkZXIgZmlsZXMgKG11c3QgYmUga2VwdCk6CisgICAgICAgICAgICAgICAgemxpYiBwdWJsaWMgaGVhZGVyIGZpbGVzIChyZXF1aXJlZCBmb3IgbGlicmFyeSB1c2UpOgogemNvbmYuaAogemxpYi5oCiAKQEAgLTI4LDcgKzM3LDExIEBACiBjcmMzMi5oCiBkZWZsYXRlLmMKIGRlZmxhdGUuaAotZ3ppby5jCitnemNsb3NlLmMKK2d6Z3V0cy5oCitnemxpYi5jCitnenJlYWQuYworZ3p3cml0ZS5jCiBpbmZiYWNrLmMKIGluZmZhc3QuYwogaW5mZmFzdC5oCkBAIC00Niw2ICs1OSw3IEBACiAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciBzYW1wbGUgcHJvZ3JhbXM6CiBleGFtcGxlLmMKIG1pbmlnemlwLmMKK1NlZSBleGFtcGxlcy9SRUFETUUuZXhhbXBsZXMgZm9yIG1vcmUKIAogICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbiBieSB0aGlyZCBwYXJ0aWVzCiBTZWUgY29udHJpYi9SRUFETUUuY29udHJpYgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL01ha2VmaWxlIGIvTW9kdWxlcy96bGliL01ha2VmaWxlCmluZGV4IDJmZDZlNDUuLjZiYmE4NmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9NYWtlZmlsZQorKysgYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUKQEAgLTEsMTU0ICsxLDUgQEAKLSMgTWFrZWZpbGUgZm9yIHpsaWIKLSMgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KLSMgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorYWxsOgorCS1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iCiAKLSMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKLSMgICAgLi9jb25maWd1cmU7IG1ha2UgdGVzdAotIyBUaGUgY2FsbCBvZiBjb25maWd1cmUgaXMgb3B0aW9uYWwgaWYgeW91IGRvbid0IGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMKLSMgSWYgeW91IHdpc2ggdG8gYnVpbGQgemxpYiBhcyBhIHNoYXJlZCBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC1zCi0KLSMgVG8gdXNlIHRoZSBhc20gY29kZSwgdHlwZToKLSMgICAgY3AgY29udHJpYi9hc20/ODYvbWF0Y2guUyAuL21hdGNoLlMKLSMgICAgbWFrZSBMT0M9LURBU01WIE9CSkE9bWF0Y2gubwotCi0jIFRvIGluc3RhbGwgL3Vzci9sb2NhbC9saWIvbGliei4qIGFuZCAvdXNyL2xvY2FsL2luY2x1ZGUvemxpYi5oLCB0eXBlOgotIyAgICBtYWtlIGluc3RhbGwKLSMgVG8gaW5zdGFsbCBpbiAkSE9NRSBpbnN0ZWFkIG9mIC91c3IvbG9jYWwsIHVzZToKLSMgICAgbWFrZSBpbnN0YWxsIHByZWZpeD0kSE9NRQotCi1DQz1jYwotCi1DRkxBR1M9LU8KLSNDRkxBR1M9LU8gLURNQVhfV0JJVFM9MTQgLURNQVhfTUVNX0xFVkVMPTcKLSNDRkxBR1M9LWcgLURERUJVRwotI0NGTEFHUz0tTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24gXAotIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcwotCi1MREZMQUdTPWxpYnouYQotTERTSEFSRUQ9JChDQykKLUNQUD0kKENDKSAtRQotCi1MSUJTPWxpYnouYQotU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuMwotU0hBUkVETElCTT1saWJ6LnNvLjEKLQotQVI9YXIgcmMKLVJBTkxJQj1yYW5saWIKLVRBUj10YXIKLVNIRUxMPS9iaW4vc2gKLUVYRT0KLQotcHJlZml4ID0gL3Vzci9sb2NhbAotZXhlY19wcmVmaXggPSAke3ByZWZpeH0KLWxpYmRpciA9ICR7ZXhlY19wcmVmaXh9L2xpYgotaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCi1tYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCi1tYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKLQotT0JKUyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZ3ppby5vIHVuY29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyBcCi0gICAgICAgenV0aWwubyBpbmZsYXRlLm8gaW5mYmFjay5vIGluZnRyZWVzLm8gaW5mZmFzdC5vCi0KLU9CSkEgPQotIyB0byB1c2UgdGhlIGFzbSBjb2RlOiBtYWtlIE9CSkE9bWF0Y2gubwotCi1URVNUX09CSlMgPSBleGFtcGxlLm8gbWluaWd6aXAubwotCi1hbGw6IGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkKLQotY2hlY2s6IHRlc3QKLXRlc3Q6IGFsbAotCUBMRF9MSUJSQVJZX1BBVEg9LjokKExEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWV9QQVRIOyBcCi0JZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXAgfCAuL21pbmlnemlwIC1kIHx8IFwKLQkgIGVjaG8gJwkJKioqIG1pbmlnemlwIHRlc3QgRkFJTEVEICoqKicgOyBcCi0JaWYgLi9leGFtcGxlOyB0aGVuIFwKLQkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBPSyAqKionOyBcCi0JZWxzZSBcCi0JICBlY2hvICcJCSoqKiB6bGliIHRlc3QgRkFJTEVEICoqKic7IFwKLQlmaQotCi1saWJ6LmE6ICQoT0JKUykgJChPQkpBKQotCSQoQVIpICRAICQoT0JKUykgJChPQkpBKQotCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCi0KLW1hdGNoLm86IG1hdGNoLlMKLQkkKENQUCkgbWF0Y2guUyA+IF9tYXRjaC5zCi0JJChDQykgLWMgX21hdGNoLnMKLQltdiBfbWF0Y2gubyBtYXRjaC5vCi0Jcm0gLWYgX21hdGNoLnMKLQotJChTSEFSRURMSUJWKTogJChPQkpTKQotCSQoTERTSEFSRUQpIC1vICRAICQoT0JKUykKLQlybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKQotCWxuIC1zICRAICQoU0hBUkVETElCKQotCWxuIC1zICRAICQoU0hBUkVETElCTSkKLQotZXhhbXBsZSQoRVhFKTogZXhhbXBsZS5vICQoTElCUykKLQkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoTERGTEFHUykKLQotbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChMSUJTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoTERGTEFHUykKLQotaW5zdGFsbDogJChMSUJTKQotCS1AaWYgWyAhIC1kICQoZXhlY19wcmVmaXgpIF07IHRoZW4gbWtkaXIgLXAgJChleGVjX3ByZWZpeCk7IGZpCi0JLUBpZiBbICEgLWQgJChpbmNsdWRlZGlyKSAgXTsgdGhlbiBta2RpciAtcCAkKGluY2x1ZGVkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobGliZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChsaWJkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobWFuM2RpcikgICAgIF07IHRoZW4gbWtkaXIgLXAgJChtYW4zZGlyKTsgZmkKLQljcCB6bGliLmggemNvbmYuaCAkKGluY2x1ZGVkaXIpCi0JY2htb2QgNjQ0ICQoaW5jbHVkZWRpcikvemxpYi5oICQoaW5jbHVkZWRpcikvemNvbmYuaAotCWNwICQoTElCUykgJChsaWJkaXIpCi0JY2QgJChsaWJkaXIpOyBjaG1vZCA3NTUgJChMSUJTKQotCS1AKGNkICQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQljZCAkKGxpYmRpcik7IGlmIHRlc3QgLWYgJChTSEFSRURMSUJWKTsgdGhlbiBcCi0JICBybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQik7IFwKLQkgIGxuIC1zICQoU0hBUkVETElCVikgJChTSEFSRURMSUJNKTsgXAotCSAgKGxkY29uZmlnIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKLQlmaQotCWNwIHpsaWIuMyAkKG1hbjNkaXIpCi0JY2htb2QgNjQ0ICQobWFuM2RpcikvemxpYi4zCi0jIFRoZSByYW5saWIgaW4gaW5zdGFsbCBpcyBuZWVkZWQgb24gTmVYVFNURVAgd2hpY2ggY2hlY2tzIGZpbGUgdGltZXMKLSMgbGRjb25maWcgaXMgZm9yIExpbnV4Ci0KLXVuaW5zdGFsbDoKLQljZCAkKGluY2x1ZGVkaXIpOyBcCi0JY2QgJChsaWJkaXIpOyBybSAtZiBsaWJ6LmE7IFwKLQlpZiB0ZXN0IC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgcm0gLWYgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAotCWZpCi0JY2QgJChtYW4zZGlyKTsgcm0gLWYgemxpYi4zCi0KLW1vc3RseWNsZWFuOiBjbGVhbgotY2xlYW46Ci0Jcm0gLWYgKi5vICp+IGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgXAotCSAgIGxpYnouKiBmb28uZ3ogc29fbG9jYXRpb25zIFwKLQkgICBfbWF0Y2gucyBtYWtldHJlZSBjb250cmliL2luZmJhY2s5LyoubwotCi1tYWludGFpbmVyLWNsZWFuOiBkaXN0Y2xlYW4KLWRpc3RjbGVhbjogY2xlYW4KLQljcCAtcCBNYWtlZmlsZS5pbiBNYWtlZmlsZQotCWNwIC1wIHpjb25mLmluLmggemNvbmYuaAotCXJtIC1mIC5EU19TdG9yZQotCi10YWdzOgotCWV0YWdzICouW2NoXQotCi1kZXBlbmQ6Ci0JbWFrZWRlcGVuZCAtLSAkKENGTEFHUykgLS0gKi5bY2hdCi0KLSMgRE8gTk9UIERFTEVURSBUSElTIExJTkUgLS0gbWFrZSBkZXBlbmQgZGVwZW5kcyBvbiBpdC4KLQotYWRsZXIzMi5vOiB6bGliLmggemNvbmYuaAotY29tcHJlc3MubzogemxpYi5oIHpjb25mLmgKLWNyYzMyLm86IGNyYzMyLmggemxpYi5oIHpjb25mLmgKLWRlZmxhdGUubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUubzogemxpYi5oIHpjb25mLmgKLWd6aW8ubzogenV0aWwuaCB6bGliLmggemNvbmYuaAotaW5mZmFzdC5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAotaW5mbGF0ZS5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAotaW5mYmFjay5vOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaAotaW5mdHJlZXMubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCi1taW5pZ3ppcC5vOiB6bGliLmggemNvbmYuaAotdHJlZXMubzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmggdHJlZXMuaAotdW5jb21wci5vOiB6bGliLmggemNvbmYuaAotenV0aWwubzogenV0aWwuaCB6bGliLmggemNvbmYuaAorZGlzdGNsZWFuOgorCW1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4gYi9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KaW5kZXggMmZkNmU0NS4uNWIxNWJkMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgpAQCAtMSwxMSArMSwxMSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYgotIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgogIyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAKICMgVG8gY29tcGlsZSBhbmQgdGVzdCwgdHlwZToKICMgICAgLi9jb25maWd1cmU7IG1ha2UgdGVzdAotIyBUaGUgY2FsbCBvZiBjb25maWd1cmUgaXMgb3B0aW9uYWwgaWYgeW91IGRvbid0IGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMKLSMgSWYgeW91IHdpc2ggdG8gYnVpbGQgemxpYiBhcyBhIHNoYXJlZCBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC1zCisjIE5vcm1hbGx5IGNvbmZpZ3VyZSBidWlsZHMgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgbGlicmFyeS4KKyMgSWYgeW91IHdhbnQgdG8gYnVpbGQganVzdCBhIHN0YXRpYyBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC0tc3RhdGljCiAKICMgVG8gdXNlIHRoZSBhc20gY29kZSwgdHlwZToKICMgICAgY3AgY29udHJpYi9hc20/ODYvbWF0Y2guUyAuL21hdGNoLlMKQEAgLTI0LDE3ICsyNCwyMiBAQAogI0NGTEFHUz0tTzMgLVdhbGwgLVd3cml0ZS1zdHJpbmdzIC1XcG9pbnRlci1hcml0aCAtV2NvbnZlcnNpb24gXAogIyAgICAgICAgICAgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcwogCi1MREZMQUdTPWxpYnouYQorU0ZMQUdTPS1PCitMREZMQUdTPQorVEVTVF9MREZMQUdTPS1MLiBsaWJ6LmEKIExEU0hBUkVEPSQoQ0MpCiBDUFA9JChDQykgLUUKIAotTElCUz1saWJ6LmEKK1NUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjMKK1NIQVJFRExJQlY9bGliei5zby4xLjIuNQogU0hBUkVETElCTT1saWJ6LnNvLjEKK0xJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAogQVI9YXIgcmMKIFJBTkxJQj1yYW5saWIKK0xEQ09ORklHPWxkY29uZmlnCitMRFNIQVJFRExJQkM9LWxjCiBUQVI9dGFyCiBTSEVMTD0vYmluL3NoCiBFWEU9CkBAIC00MiwzMyArNDcsNjggQEAKIHByZWZpeCA9IC91c3IvbG9jYWwKIGV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CiBsaWJkaXIgPSAke2V4ZWNfcHJlZml4fS9saWIKK3NoYXJlZGxpYmRpciA9ICR7bGliZGlyfQogaW5jbHVkZWRpciA9ICR7cHJlZml4fS9pbmNsdWRlCiBtYW5kaXIgPSAke3ByZWZpeH0vc2hhcmUvbWFuCiBtYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKK3BrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKIAotT0JKUyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZ3ppby5vIHVuY29tcHIubyBkZWZsYXRlLm8gdHJlZXMubyBcCi0gICAgICAgenV0aWwubyBpbmZsYXRlLm8gaW5mYmFjay5vIGluZnRyZWVzLm8gaW5mZmFzdC5vCitPQkpDID0gYWRsZXIzMi5vIGNvbXByZXNzLm8gY3JjMzIubyBkZWZsYXRlLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gXAorCWd6d3JpdGUubyBpbmZiYWNrLm8gaW5mZmFzdC5vIGluZmxhdGUubyBpbmZ0cmVlcy5vIHRyZWVzLm8gdW5jb21wci5vIHp1dGlsLm8KIAorUElDX09CSkMgPSBhZGxlcjMyLmxvIGNvbXByZXNzLmxvIGNyYzMyLmxvIGRlZmxhdGUubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gXAorCWd6d3JpdGUubG8gaW5mYmFjay5sbyBpbmZmYXN0LmxvIGluZmxhdGUubG8gaW5mdHJlZXMubG8gdHJlZXMubG8gdW5jb21wci5sbyB6dXRpbC5sbworCisjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwogT0JKQSA9Ci0jIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vCitQSUNfT0JKQSA9CiAKLVRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCitPQkpTID0gJChPQkpDKSAkKE9CSkEpCiAKLWFsbDogZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKQorUElDX09CSlMgPSAkKFBJQ19PQkpDKSAkKFBJQ19PQkpBKQorCithbGw6IHN0YXRpYyBzaGFyZWQKKworc3RhdGljOiBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpCisKK3NoYXJlZDogZXhhbXBsZXNoJChFWEUpIG1pbmlnemlwc2gkKEVYRSkKKworYWxsNjQ6IGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUpCiAKIGNoZWNrOiB0ZXN0Ci10ZXN0OiBhbGwKLQlATERfTElCUkFSWV9QQVRIPS46JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAotCWVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCB8fCBcCi0JICBlY2hvICcJCSoqKiBtaW5pZ3ppcCB0ZXN0IEZBSUxFRCAqKionIDsgXAotCWlmIC4vZXhhbXBsZTsgdGhlbiBcCisKK3Rlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKKwordGVzdHN0YXRpYzogc3RhdGljCisJQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGU7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKLQkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgXAorCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAogCWZpCisJLUBybSAtZiBmb28uZ3oKIAotbGliei5hOiAkKE9CSlMpICQoT0JKQSkKLQkkKEFSKSAkQCAkKE9CSlMpICQoT0JKQSkKK3Rlc3RzaGFyZWQ6IHNoYXJlZAorCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAorCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCisJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKKwlTSExJQl9QQVRIPWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2g7IHRoZW4gXAorCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBPSyAqKionOyBcCisJZWxzZSBcCisJICBlY2hvICcJCSoqKiB6bGliIHNoYXJlZCB0ZXN0IEZBSUxFRCAqKionOyBmYWxzZTsgXAorCWZpCisJLUBybSAtZiBmb28uZ3oKKwordGVzdDY0OiBhbGw2NAorCUBpZiBlY2hvIGhlbGxvIHdvcmxkIHwgLi9taW5pZ3ppcDY0IHwgLi9taW5pZ3ppcDY0IC1kICYmIC4vZXhhbXBsZTY0OyB0aGVuIFwKKwkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXAorCWVsc2UgXAorCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKKwlmaQorCS1Acm0gLWYgZm9vLmd6CisKK2xpYnouYTogJChPQkpTKQorCSQoQVIpICRAICQoT0JKUykKIAktQCAoJChSQU5MSUIpICRAIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQogCiBtYXRjaC5vOiBtYXRjaC5TCkBAIC03Nyw1OCArMTE3LDExNiBAQAogCW12IF9tYXRjaC5vIG1hdGNoLm8KIAlybSAtZiBfbWF0Y2gucwogCi0kKFNIQVJFRExJQlYpOiAkKE9CSlMpCi0JJChMRFNIQVJFRCkgLW8gJEAgJChPQkpTKQorbWF0Y2gubG86IG1hdGNoLlMKKwkkKENQUCkgbWF0Y2guUyA+IF9tYXRjaC5zCisJJChDQykgLWMgLWZQSUMgX21hdGNoLnMKKwltdiBfbWF0Y2gubyBtYXRjaC5sbworCXJtIC1mIF9tYXRjaC5zCisKK2V4YW1wbGU2NC5vOiBleGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBleGFtcGxlLmMKKworbWluaWd6aXA2NC5vOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgbWluaWd6aXAuYworCisuU1VGRklYRVM6IC5sbworCisuYy5sbzoKKwktQG1rZGlyIG9ianMgMj4vZGV2L251bGwgfHwgdGVzdCAtZCBvYmpzCisJJChDQykgJChTRkxBR1MpIC1EUElDIC1jIC1vIG9ianMvJCoubyAkPAorCS1AbXYgb2Jqcy8kKi5vICRACisKKyQoU0hBUkVETElCVik6ICQoUElDX09CSlMpCisJJChMRFNIQVJFRCkgJChTRkxBR1MpIC1vICRAICQoUElDX09CSlMpICQoTERTSEFSRURMSUJDKSAkKExERkxBR1MpCiAJcm0gLWYgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSkKIAlsbiAtcyAkQCAkKFNIQVJFRExJQikKIAlsbiAtcyAkQCAkKFNIQVJFRExJQk0pCisJLUBybWRpciBvYmpzCiAKLWV4YW1wbGUkKEVYRSk6IGV4YW1wbGUubyAkKExJQlMpCi0JJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKExERkxBR1MpCitleGFtcGxlJChFWEUpOiBleGFtcGxlLm8gJChTVEFUSUNMSUIpCisJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKFRFU1RfTERGTEFHUykKIAotbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChMSUJTKQotCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoTERGTEFHUykKK21pbmlnemlwJChFWEUpOiBtaW5pZ3ppcC5vICQoU1RBVElDTElCKQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoVEVTVF9MREZMQUdTKQogCi1pbnN0YWxsOiAkKExJQlMpCi0JLUBpZiBbICEgLWQgJChleGVjX3ByZWZpeCkgXTsgdGhlbiBta2RpciAtcCAkKGV4ZWNfcHJlZml4KTsgZmkKLQktQGlmIFsgISAtZCAkKGluY2x1ZGVkaXIpICBdOyB0aGVuIG1rZGlyIC1wICQoaW5jbHVkZWRpcik7IGZpCi0JLUBpZiBbICEgLWQgJChsaWJkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKGxpYmRpcik7IGZpCi0JLUBpZiBbICEgLWQgJChtYW4zZGlyKSAgICAgXTsgdGhlbiBta2RpciAtcCAkKG1hbjNkaXIpOyBmaQotCWNwIHpsaWIuaCB6Y29uZi5oICQoaW5jbHVkZWRpcikKLQljaG1vZCA2NDQgJChpbmNsdWRlZGlyKS96bGliLmggJChpbmNsdWRlZGlyKS96Y29uZi5oCi0JY3AgJChMSUJTKSAkKGxpYmRpcikKLQljZCAkKGxpYmRpcik7IGNobW9kIDc1NSAkKExJQlMpCi0JLUAoY2QgJChsaWJkaXIpOyAkKFJBTkxJQikgbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQotCWNkICQobGliZGlyKTsgaWYgdGVzdCAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKK2V4YW1wbGVzaCQoRVhFKTogZXhhbXBsZS5vICQoU0hBUkVETElCVikKKwkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vIC1MLiAkKFNIQVJFRExJQlYpCisKK21pbmlnemlwc2gkKEVYRSk6IG1pbmlnemlwLm8gJChTSEFSRURMSUJWKQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vIC1MLiAkKFNIQVJFRExJQlYpCisKK2V4YW1wbGU2NCQoRVhFKTogZXhhbXBsZTY0Lm8gJChTVEFUSUNMSUIpCisJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGU2NC5vICQoVEVTVF9MREZMQUdTKQorCittaW5pZ3ppcDY0JChFWEUpOiBtaW5pZ3ppcDY0Lm8gJChTVEFUSUNMSUIpCisJJChDQykgJChDRkxBR1MpIC1vICRAIG1pbmlnemlwNjQubyAkKFRFU1RfTERGTEFHUykKKworaW5zdGFsbC1saWJzOiAkKExJQlMpCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoZXhlY19wcmVmaXgpICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGV4ZWNfcHJlZml4KTsgZmkKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChsaWJkaXIpICAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobGliZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQoc2hhcmVkbGliZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCisJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCisJY3AgJChTVEFUSUNMSUIpICQoREVTVERJUikkKGxpYmRpcikKKwljcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikKKwljZCAkKERFU1RESVIpJChsaWJkaXIpOyBjaG1vZCB1PXJ3LGdvPXIgJChTVEFUSUNMSUIpCisJLUAoY2QgJChERVNURElSKSQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKKwktQGNkICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IGlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCSAgY2htb2QgNzU1ICQoU0hBUkVETElCVik7IFwKIAkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCiAJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAogCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCi0JICAobGRjb25maWcgfHwgdHJ1ZSkgID4vZGV2L251bGwgMj4mMTsgXAorCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQotCWNwIHpsaWIuMyAkKG1hbjNkaXIpCi0JY2htb2QgNjQ0ICQobWFuM2RpcikvemxpYi4zCisJY3AgemxpYi4zICQoREVTVERJUikkKG1hbjNkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKG1hbjNkaXIpL3psaWIuMworCWNwIHpsaWIucGMgJChERVNURElSKSQocGtnY29uZmlnZGlyKQorCWNobW9kIDY0NCAkKERFU1RESVIpJChwa2djb25maWdkaXIpL3psaWIucGMKICMgVGhlIHJhbmxpYiBpbiBpbnN0YWxsIGlzIG5lZWRlZCBvbiBOZVhUU1RFUCB3aGljaCBjaGVja3MgZmlsZSB0aW1lcwogIyBsZGNvbmZpZyBpcyBmb3IgTGludXgKIAoraW5zdGFsbDogaW5zdGFsbC1saWJzCisJLUBpZiBbICEgLWQgJChERVNURElSKSQoaW5jbHVkZWRpcikgICBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBmaQorCWNwIHpsaWIuaCB6Y29uZi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3psaWIuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS96Y29uZi5oCisKIHVuaW5zdGFsbDoKLQljZCAkKGluY2x1ZGVkaXIpOyBcCi0JY2QgJChsaWJkaXIpOyBybSAtZiBsaWJ6LmE7IFwKLQlpZiB0ZXN0IC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBybSAtZiB6bGliLmggemNvbmYuaAorCWNkICQoREVTVERJUikkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAorCWlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAogCSAgcm0gLWYgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKTsgXAogCWZpCi0JY2QgJChtYW4zZGlyKTsgcm0gLWYgemxpYi4zCisJY2QgJChERVNURElSKSQobWFuM2Rpcik7IHJtIC1mIHpsaWIuMworCWNkICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IHJtIC1mIHpsaWIucGMKKworZG9jczogemxpYi4zLnBkZgorCit6bGliLjMucGRmOiB6bGliLjMKKwlncm9mZiAtbWFuZG9jIC1mIEggLVQgcHMgemxpYi4zIHwgcHMycGRmIC0gemxpYi4zLnBkZgorCit6Y29uZi5oLmluOiB6Y29uZi5oLmNtYWtlaW4KKwlzZWQgIi9eI2NtYWtlZGVmaW5lL0QiIDwgemNvbmYuaC5jbWFrZWluID4gemNvbmYuaC5pbgorCXRvdWNoIC1yIHpjb25mLmguY21ha2VpbiB6Y29uZi5oLmluCisKK3pjb25mOiB6Y29uZi5oLmluCisJY3AgLXAgemNvbmYuaC5pbiB6Y29uZi5oCiAKIG1vc3RseWNsZWFuOiBjbGVhbgogY2xlYW46Ci0Jcm0gLWYgKi5vICp+IGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgXAorCXJtIC1mICoubyAqLmxvICp+IFwKKwkgICBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpIGV4YW1wbGVzaCQoRVhFKSBtaW5pZ3ppcHNoJChFWEUpIFwKKwkgICBleGFtcGxlNjQkKEVYRSkgbWluaWd6aXA2NCQoRVhFKSBcCiAJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCisJcm0gLXJmIG9ianMKIAogbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCi1kaXN0Y2xlYW46IGNsZWFuCi0JY3AgLXAgTWFrZWZpbGUuaW4gTWFrZWZpbGUKLQljcCAtcCB6Y29uZi5pbi5oIHpjb25mLmgKLQlybSAtZiAuRFNfU3RvcmUKK2Rpc3RjbGVhbjogY2xlYW4gemNvbmYgZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMKKwktQHJtIC1mIC5EU19TdG9yZQorCS1AcHJpbnRmICdhbGw6XG5cdC1AZWNobyAiUGxlYXNlIHVzZSAuL2NvbmZpZ3VyZSBmaXJzdC4gIFRoYW5rIHlvdS4iXG4nID4gTWFrZWZpbGUKKwktQHByaW50ZiAnXG5kaXN0Y2xlYW46XG5cdG1ha2UgLWYgTWFrZWZpbGUuaW4gZGlzdGNsZWFuXG4nID4+IE1ha2VmaWxlCisJLUB0b3VjaCAtciBNYWtlZmlsZS5pbiBNYWtlZmlsZQogCiB0YWdzOgogCWV0YWdzICouW2NoXQpAQCAtMTM4LDE3ICsyMzYsMjIgQEAKIAogIyBETyBOT1QgREVMRVRFIFRISVMgTElORSAtLSBtYWtlIGRlcGVuZCBkZXBlbmRzIG9uIGl0LgogCi1hZGxlcjMyLm86IHpsaWIuaCB6Y29uZi5oCi1jb21wcmVzcy5vOiB6bGliLmggemNvbmYuaAotY3JjMzIubzogY3JjMzIuaCB6bGliLmggemNvbmYuaAorYWRsZXIzMi5vIHp1dGlsLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2d6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIGd6d3JpdGUubzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2NvbXByZXNzLm8gZXhhbXBsZS5vIG1pbmlnemlwLm8gdW5jb21wci5vOiB6bGliLmggemNvbmYuaAorY3JjMzIubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBjcmMzMi5oCiBkZWZsYXRlLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCi1leGFtcGxlLm86IHpsaWIuaCB6Y29uZi5oCi1nemlvLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2luZmJhY2subyBpbmZsYXRlLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oIGluZmZpeGVkLmgKIGluZmZhc3QubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZmxhdGUubzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKLWluZmJhY2subzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmxhdGUuaCBpbmZmYXN0LmgKIGluZnRyZWVzLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaAotbWluaWd6aXAubzogemxpYi5oIHpjb25mLmgKIHRyZWVzLm86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIHRyZWVzLmgKLXVuY29tcHIubzogemxpYi5oIHpjb25mLmgKLXp1dGlsLm86IHp1dGlsLmggemxpYi5oIHpjb25mLmgKKworYWRsZXIzMi5sbyB6dXRpbC5sbzogenV0aWwuaCB6bGliLmggemNvbmYuaAorZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gZ3p3cml0ZS5sbzogemxpYi5oIHpjb25mLmggZ3pndXRzLmgKK2NvbXByZXNzLmxvIGV4YW1wbGUubG8gbWluaWd6aXAubG8gdW5jb21wci5sbzogemxpYi5oIHpjb25mLmgKK2NyYzMyLmxvOiB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGNyYzMyLmgKK2RlZmxhdGUubG86IGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCitpbmZiYWNrLmxvIGluZmxhdGUubG86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oIGluZmZpeGVkLmgKK2luZmZhc3QubG86IHp1dGlsLmggemxpYi5oIHpjb25mLmggaW5mdHJlZXMuaCBpbmZsYXRlLmggaW5mZmFzdC5oCitpbmZ0cmVlcy5sbzogenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCit0cmVlcy5sbzogZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmggdHJlZXMuaApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL1JFQURNRSBiL01vZHVsZXMvemxpYi9SRUFETUUKaW5kZXggMDJjMjlkNC4uZDQyMTliZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL1JFQURNRQorKysgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCkBAIC0xLDU2ICsxLDUyIEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFSWQogCi16bGliIDEuMi4zIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4gIEFsbCB0aGUgY29kZSBpcworemxpYiAxLjIuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKIHRocmVhZCBzYWZlLiAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcwogKFJlcXVlc3QgZm9yIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzCiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dCAoemxpYiBmb3JtYXQpLCByZmMxOTUxLnR4dCAoZGVmbGF0ZSBmb3JtYXQpCi1hbmQgcmZjMTk1Mi50eHQgKGd6aXAgZm9ybWF0KS4gVGhlc2UgZG9jdW1lbnRzIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBvdGhlcgotZm9ybWF0cyBmcm9tIGZ0cDovL2Z0cC51dS5uZXQvZ3JhcGhpY3MvcG5nL2RvY3VtZW50cy96bGliL3pkb2MtaW5kZXguaHRtbAorYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCiAKIEFsbCBmdW5jdGlvbnMgb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgemxpYi5oCi0odm9sdW50ZWVyIHRvIHdyaXRlIG1hbiBwYWdlcyB3ZWxjb21lLCBjb250YWN0IHpsaWJAZ3ppcC5vcmcpLiBBIHVzYWdlIGV4YW1wbGUKKyh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBnemlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKIG9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29ycmVjdGx5LiBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGZpbGUgbWluaWd6aXAuYy4gVGhlCitpcyB3b3JraW5nIGNvcnJlY3RseS4gIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZmlsZSBtaW5pZ3ppcC5jLiAgVGhlCiBjb21wcmVzc2lvbiBsaWJyYXJ5IGl0c2VsZiBpcyBjb21wb3NlZCBvZiBhbGwgc291cmNlIGZpbGVzIGV4Y2VwdCBleGFtcGxlLmMgYW5kCiBtaW5pZ3ppcC5jLgogCiBUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0Ci10aGUgdG9wIG9mIE1ha2VmaWxlLiBJbiBzaG9ydCAibWFrZSB0ZXN0OyBtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0Ci1tYWNoaW5lcy4gRm9yIFVuaXg6ICIuL2NvbmZpZ3VyZTsgbWFrZSB0ZXN0OyBtYWtlIGluc3RhbGwiLiBGb3IgTVNET1MsIHVzZSBvbmUKLW9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBzdWNoIGFzIE1ha2VmaWxlLm1zYy4gRm9yIFZNUywgdXNlIG1ha2Vfdm1zLmNvbS4KK3RoZSB0b3Agb2YgTWFrZWZpbGUuaW4uICBJbiBzaG9ydCAiLi9jb25maWd1cmU7IG1ha2UgdGVzdCIsIGFuZCBpZiB0aGF0IGdvZXMKK3dlbGwsICJtYWtlIGluc3RhbGwiIHNob3VsZCB3b3JrIGZvciBtb3N0IGZsYXZvcnMgb2YgVW5peC4gIEZvciBXaW5kb3dzLCB1c2Ugb25lCitvZiB0aGUgc3BlY2lhbCBtYWtlZmlsZXMgaW4gd2luMzIvIG9yIGNvbnRyaWIvdnN0dWRpby8gLiAgRm9yIFZNUywgdXNlCittYWtlX3Ztcy5jb20uCiAKIFF1ZXN0aW9ucyBhYm91dCB6bGliIHNob3VsZCBiZSBzZW50IHRvIDx6bGliQGd6aXAub3JnPiwgb3IgdG8gR2lsbGVzIFZvbGxhbnQKLTxpbmZvQHdpbmltYWdlLmNvbT4gZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uLiBUaGUgemxpYiBob21lIHBhZ2UgaXMKLWh0dHA6Ly93d3cuemxpYi5vcmcgb3IgaHR0cDovL3d3dy5nemlwLm9yZy96bGliLyBCZWZvcmUgcmVwb3J0aW5nIGEgcHJvYmxlbSwKLXBsZWFzZSBjaGVjayB0aGlzIHNpdGUgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHpsaWI7Ci1vdGhlcndpc2UgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgY2hlY2sgd2hldGhlciB0aGUgcHJvYmxlbSBzdGlsbCBleGlzdHMgb3IKLW5vdC4KKzxpbmZvQHdpbmltYWdlLmNvbT4gZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uLiAgVGhlIHpsaWIgaG9tZSBwYWdlIGlzCitodHRwOi8vemxpYi5uZXQvIC4gIEJlZm9yZSByZXBvcnRpbmcgYSBwcm9ibGVtLCBwbGVhc2UgY2hlY2sgdGhpcyBzaXRlIHRvCit2ZXJpZnkgdGhhdCB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgemxpYjsgb3RoZXJ3aXNlIGdldCB0aGUgbGF0ZXN0Cit2ZXJzaW9uIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBwcm9ibGVtIHN0aWxsIGV4aXN0cyBvciBub3QuCiAKLVBMRUFTRSByZWFkIHRoZSB6bGliIEZBUSBodHRwOi8vd3d3Lmd6aXAub3JnL3psaWIvemxpYl9mYXEuaHRtbCBiZWZvcmUgYXNraW5nCi1mb3IgaGVscC4KK1BMRUFTRSByZWFkIHRoZSB6bGliIEZBUSBodHRwOi8vemxpYi5uZXQvemxpYl9mYXEuaHRtbCBiZWZvcmUgYXNraW5nIGZvciBoZWxwLgogCi1NYXJrIE5lbHNvbiA8bWFya25AaWVlZS5vcmc+IHdyb3RlIGFuIGFydGljbGUgYWJvdXQgemxpYiBmb3IgdGhlIEphbi4gMTk5NwotaXNzdWUgb2YgIERyLiBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBpbgotaHR0cDovL2RvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96bGlidG9vbC5odG0KK01hcmsgTmVsc29uIDxtYXJrbkBpZWVlLm9yZz4gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dCB6bGliIGZvciB0aGUgSmFuLiAgMTk5NworaXNzdWUgb2YgRHIuICBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdAoraHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8wMS96bGliLWVuZ2luZS8gLgogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi41IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAotVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5ICJjb250cmliIi4KK1Vuc3VwcG9ydGVkIHRoaXJkIHBhcnR5IGNvbnRyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkIGluIGRpcmVjdG9yeSBjb250cmliLyAuCiAKLUEgSmF2YSBpbXBsZW1lbnRhdGlvbiBvZiB6bGliIGlzIGF2YWlsYWJsZSBpbiB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQKLWh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjQuMi9kb2NzL2FwaS9qYXZhL3V0aWwvemlwL3BhY2thZ2Utc3VtbWFyeS5odG1sCi1TZWUgdGhlIHpsaWIgaG9tZSBwYWdlIGh0dHA6Ly93d3cuemxpYi5vcmcgZm9yIGRldGFpbHMuCit6bGliIGlzIGF2YWlsYWJsZSBpbiBKYXZhIHVzaW5nIHRoZSBqYXZhLnV0aWwuemlwIHBhY2thZ2UsIGRvY3VtZW50ZWQgYXQKK2h0dHA6Ly9qYXZhLnN1bi5jb20vZGV2ZWxvcGVyL3RlY2huaWNhbEFydGljbGVzL1Byb2dyYW1taW5nL2NvbXByZXNzaW9uLyAuCiAKLUEgUGVybCBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IFBhdWwgTWFycXVlc3MgPHBtcXNAY3Bhbi5vcmc+IGlzIGluIHRoZQotQ1BBTiAoQ29tcHJlaGVuc2l2ZSBQZXJsIEFyY2hpdmUgTmV0d29yaykgc2l0ZXMKLWh0dHA6Ly93d3cuY3Bhbi5vcmcvbW9kdWxlcy9ieS1tb2R1bGUvQ29tcHJlc3MvCitBIFBlcmwgaW50ZXJmYWNlIHRvIHpsaWIgd3JpdHRlbiBieSBQYXVsIE1hcnF1ZXNzIDxwbXFzQGNwYW4ub3JnPiBpcyBhdmFpbGFibGUKK2F0IENQQU4gKENvbXByZWhlbnNpdmUgUGVybCBBcmNoaXZlIE5ldHdvcmspIHNpdGVzLCBpbmNsdWRpbmcKK2h0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfnBtcXMvSU8tQ29tcHJlc3MtWmxpYi8gLgogCiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAoraHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbCAuCiAKLUEgemxpYiBiaW5kaW5nIGZvciBUQ0wgd3JpdHRlbiBieSBBbmRyZWFzIEt1cHJpZXMgPGEua3Vwcmllc0B3ZXN0ZW5kLmNvbT4gaXMKLWF2YWlsbGFibGUgYXQgaHR0cDovL3d3dy5vY2hlLmRlL35ha3Vwcmllcy9zb2Z0L3RyZi90cmZfemlwLmh0bWwKK3psaWIgaXMgYnVpbHQgaW50byB0Y2w6IGh0dHA6Ly93aWtpLnRjbC50ay80NjEwIC4KIAogQW4gZXhwZXJpbWVudGFsIHBhY2thZ2UgdG8gcmVhZCBhbmQgd3JpdGUgZmlsZXMgaW4gLnppcCBmb3JtYXQsIHdyaXR0ZW4gb24gdG9wCiBvZiB6bGliIGJ5IEdpbGxlcyBWb2xsYW50IDxpbmZvQHdpbmltYWdlLmNvbT4sIGlzIGF2YWlsYWJsZSBpbiB0aGUKQEAgLTc0LDI1ICs3MCwyMSBAQAogLSB6bGliIGRvZXNuJ3Qgd29yayBvbiBIUC1VWCA5LjA1IHdpdGggc29tZSB2ZXJzaW9ucyBvZiAvYmluL2NjLiBJdCB3b3JrcyB3aXRoCiAgIG90aGVyIGNvbXBpbGVycy4gVXNlICJtYWtlIHRlc3QiIHRvIGNoZWNrIHlvdXIgY29tcGlsZXIuCiAKLS0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9ydGVkIG9uIEJFT1MgYW5kIGJ5IHNvbWUgTWFjIGNvbXBpbGVycy4KKy0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFJJU0NPUyBvciBCRU9TLgogCiAtIEZvciBQYWxtT3MsIHNlZSBodHRwOi8vcGFsbXpsaWIuc291cmNlZm9yZ2UubmV0LwogCi0tIFdoZW4gYnVpbGRpbmcgYSBzaGFyZWQsIGkuZS4gZHluYW1pYyBsaWJyYXJ5IG9uIE1hYyBPUyBYLCB0aGUgbGlicmFyeSBtdXN0IGJlCi0gIGluc3RhbGxlZCBiZWZvcmUgdGVzdGluZyAoZG8gIm1ha2UgaW5zdGFsbCIgYmVmb3JlICJtYWtlIHRlc3QiKSwgc2luY2UgdGhlCi0gIGxpYnJhcnkgbG9jYXRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBsaWJyYXJ5LgotCiAKIEFja25vd2xlZGdtZW50czoKIAotICBUaGUgZGVmbGF0ZSBmb3JtYXQgdXNlZCBieSB6bGliIHdhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4gVGhlIGRlZmxhdGUKLSAgYW5kIHpsaWIgc3BlY2lmaWNhdGlvbnMgd2VyZSB3cml0dGVuIGJ5IEwuIFBldGVyIERldXRzY2guIFRoYW5rcyB0byBhbGwgdGhlCi0gIHBlb3BsZSB3aG8gcmVwb3J0ZWQgcHJvYmxlbXMgYW5kIHN1Z2dlc3RlZCB2YXJpb3VzIGltcHJvdmVtZW50cyBpbiB6bGliOwotICB0aGV5IGFyZSB0b28gbnVtZXJvdXMgdG8gY2l0ZSBoZXJlLgorICBUaGUgZGVmbGF0ZSBmb3JtYXQgdXNlZCBieSB6bGliIHdhcyBkZWZpbmVkIGJ5IFBoaWwgS2F0ei4gIFRoZSBkZWZsYXRlIGFuZAorICB6bGliIHNwZWNpZmljYXRpb25zIHdlcmUgd3JpdHRlbiBieSBMLiAgUGV0ZXIgRGV1dHNjaC4gIFRoYW5rcyB0byBhbGwgdGhlCisgIHBlb3BsZSB3aG8gcmVwb3J0ZWQgcHJvYmxlbXMgYW5kIHN1Z2dlc3RlZCB2YXJpb3VzIGltcHJvdmVtZW50cyBpbiB6bGliOyB0aGV5CisgIGFyZSB0b28gbnVtZXJvdXMgdG8gY2l0ZSBoZXJlLgogCiBDb3B5cmlnaHQgbm90aWNlOgogCi0gKEMpIDE5OTUtMjAwNCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCisgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMTEzLDEzICsxMDUsMTEgQEAKICAgSmVhbi1sb3VwIEdhaWxseSAgICAgICAgTWFyayBBZGxlcgogICBqbG91cEBnemlwLm9yZyAgICAgICAgICBtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1CiAKLUlmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIHdlIHdvdWxkIGFwcHJlY2lhdGUgKm5vdCoKLXJlY2VpdmluZyBsZW5ndGh5IGxlZ2FsIGRvY3VtZW50cyB0byBzaWduLiBUaGUgc291cmNlcyBhcmUgcHJvdmlkZWQKLWZvciBmcmVlIGJ1dCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLiAgVGhlIGxpYnJhcnkgaGFzIGJlZW4KLWVudGlyZWx5IHdyaXR0ZW4gYnkgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcjsgaXQgZG9lcyBub3QKLWluY2x1ZGUgdGhpcmQtcGFydHkgY29kZS4KK0lmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIHdlIHdvdWxkIGFwcHJlY2lhdGUgKm5vdCogcmVjZWl2aW5nCitsZW5ndGh5IGxlZ2FsIGRvY3VtZW50cyB0byBzaWduLiAgVGhlIHNvdXJjZXMgYXJlIHByb3ZpZGVkIGZvciBmcmVlIGJ1dCB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZC4gIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGVudGlyZWx5IHdyaXR0ZW4gYnkgSmVhbi1sb3VwCitHYWlsbHkgYW5kIE1hcmsgQWRsZXI7IGl0IGRvZXMgbm90IGluY2x1ZGUgdGhpcmQtcGFydHkgY29kZS4KIAotSWYgeW91IHJlZGlzdHJpYnV0ZSBtb2RpZmllZCBzb3VyY2VzLCB3ZSB3b3VsZCBhcHByZWNpYXRlIHRoYXQgeW91IGluY2x1ZGUKLWluIHRoZSBmaWxlIENoYW5nZUxvZyBoaXN0b3J5IGluZm9ybWF0aW9uIGRvY3VtZW50aW5nIHlvdXIgY2hhbmdlcy4gUGxlYXNlCi1yZWFkIHRoZSBGQVEgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCBzb3VyY2UKLXZlcnNpb25zLgorSWYgeW91IHJlZGlzdHJpYnV0ZSBtb2RpZmllZCBzb3VyY2VzLCB3ZSB3b3VsZCBhcHByZWNpYXRlIHRoYXQgeW91IGluY2x1ZGUgaW4KK3RoZSBmaWxlIENoYW5nZUxvZyBoaXN0b3J5IGluZm9ybWF0aW9uIGRvY3VtZW50aW5nIHlvdXIgY2hhbmdlcy4gIFBsZWFzZSByZWFkCit0aGUgRkFRIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgc291cmNlIHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKaW5kZXggMDA3YmEyNi4uNjVhZDZhNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FkbGVyMzIuYworKysgYi9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCkBAIC0xLDEyICsxLDE1IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKIC8qIEAoIykgJElkJCAqLwogCi0jZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNpbmNsdWRlICJ6bGliLmgiCisjaW5jbHVkZSAienV0aWwuaCIKKworI2RlZmluZSBsb2NhbCBzdGF0aWMKKworbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwgel9vZmY2NF90IGxlbjIpOwogCiAjZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLwogI2RlZmluZSBOTUFYIDU1NTIKQEAgLTEyNSwxMCArMTI4LDEwIEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lKGFkbGVyMSwgYWRsZXIyLCBsZW4yKQorbG9jYWwgdUxvbmcgYWRsZXIzMl9jb21iaW5lXyhhZGxlcjEsIGFkbGVyMiwgbGVuMikKICAgICB1TG9uZyBhZGxlcjE7CiAgICAgdUxvbmcgYWRsZXIyOwotICAgIHpfb2ZmX3QgbGVuMjsKKyAgICB6X29mZjY0X3QgbGVuMjsKIHsKICAgICB1bnNpZ25lZCBsb25nIHN1bTE7CiAgICAgdW5zaWduZWQgbG9uZyBzdW0yOwpAQCAtMTQxLDkgKzE0NCwyNiBAQAogICAgIE1PRChzdW0yKTsKICAgICBzdW0xICs9IChhZGxlcjIgJiAweGZmZmYpICsgQkFTRSAtIDE7CiAgICAgc3VtMiArPSAoKGFkbGVyMSA+PiAxNikgJiAweGZmZmYpICsgKChhZGxlcjIgPj4gMTYpICYgMHhmZmZmKSArIEJBU0UgLSByZW07Ci0gICAgaWYgKHN1bTEgPiBCQVNFKSBzdW0xIC09IEJBU0U7Ci0gICAgaWYgKHN1bTEgPiBCQVNFKSBzdW0xIC09IEJBU0U7Ci0gICAgaWYgKHN1bTIgPiAoQkFTRSA8PCAxKSkgc3VtMiAtPSAoQkFTRSA8PCAxKTsKLSAgICBpZiAoc3VtMiA+IEJBU0UpIHN1bTIgLT0gQkFTRTsKKyAgICBpZiAoc3VtMSA+PSBCQVNFKSBzdW0xIC09IEJBU0U7CisgICAgaWYgKHN1bTEgPj0gQkFTRSkgc3VtMSAtPSBCQVNFOworICAgIGlmIChzdW0yID49IChCQVNFIDw8IDEpKSBzdW0yIC09IChCQVNFIDw8IDEpOworICAgIGlmIChzdW0yID49IEJBU0UpIHN1bTIgLT0gQkFTRTsKICAgICByZXR1cm4gc3VtMSB8IChzdW0yIDw8IDE2KTsKIH0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwordUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmUoYWRsZXIxLCBhZGxlcjIsIGxlbjIpCisgICAgdUxvbmcgYWRsZXIxOworICAgIHVMb25nIGFkbGVyMjsKKyAgICB6X29mZl90IGxlbjI7Cit7CisgICAgcmV0dXJuIGFkbGVyMzJfY29tYmluZV8oYWRsZXIxLCBhZGxlcjIsIGxlbjIpOworfQorCit1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0KGFkbGVyMSwgYWRsZXIyLCBsZW4yKQorICAgIHVMb25nIGFkbGVyMTsKKyAgICB1TG9uZyBhZGxlcjI7CisgICAgel9vZmY2NF90IGxlbjI7Cit7CisgICAgcmV0dXJuIGFkbGVyMzJfY29tYmluZV8oYWRsZXIxLCBhZGxlcjIsIGxlbjIpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbXByZXNzLmMgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwppbmRleCBkZjA0ZjAxLi5lYTRkZmJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYworKysgYi9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNvbXByZXNzLmMgLS0gY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC03NSw1ICs3NSw2IEBACiB1TG9uZyBaRVhQT1JUIGNvbXByZXNzQm91bmQgKHNvdXJjZUxlbikKICAgICB1TG9uZyBzb3VyY2VMZW47CiB7Ci0gICAgcmV0dXJuIHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIpICsgKHNvdXJjZUxlbiA+PiAxNCkgKyAxMTsKKyAgICByZXR1cm4gc291cmNlTGVuICsgKHNvdXJjZUxlbiA+PiAxMikgKyAoc291cmNlTGVuID4+IDE0KSArCisgICAgICAgICAgIChzb3VyY2VMZW4gPj4gMjUpICsgMTM7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlIGIvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQppbmRleCBkN2ZmZGMzLi5iZDllZGQyIDEwMDc1NQotLS0gYS9Nb2R1bGVzL3psaWIvY29uZmlndXJlCisrKyBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKQEAgLTEsMzcgKzEsNjEgQEAKICMhL2Jpbi9zaAotIyBjb25maWd1cmUgc2NyaXB0IGZvciB6bGliLiBUaGlzIHNjcmlwdCBpcyBuZWVkZWQgb25seSBpZgotIyB5b3Ugd2lzaCB0byBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IGFuZCB5b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGVtLAotIyBvZiBpZiB5b3UgbmVlZCBzcGVjaWFsIGNvbXBpbGVyLCBmbGFncyBvciBpbnN0YWxsIGRpcmVjdG9yeS4KLSMgT3RoZXJ3aXNlLCB5b3UgY2FuIGp1c3QgdXNlIGRpcmVjdGx5ICJtYWtlIHRlc3Q7IG1ha2UgaW5zdGFsbCIKKyMgY29uZmlndXJlIHNjcmlwdCBmb3IgemxpYi4KICMKLSMgVG8gY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnksIHVzZSAiY29uZmlndXJlIC0tc2hhcmVkIjsgYnkgZGVmYXVsdCBhIHN0YXRpYwotIyBsaWJyYXJ5IGlzIGNyZWF0ZWQuIElmIHRoZSBwcmltaXRpdmUgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCBwcm92aWRlZCBoZXJlCi0jIGRvZXMgbm90IHdvcmssIHVzZSBmdHA6Ly9wcmVwLmFpLm1pdC5lZHUvcHViL2dudS9saWJ0b29sLSoudGFyLmd6CisjIE5vcm1hbGx5IGNvbmZpZ3VyZSBidWlsZHMgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgbGlicmFyeS4KKyMgSWYgeW91IHdhbnQgdG8gYnVpbGQganVzdCBhIHN0YXRpYyBsaWJyYXJ5LCB1c2U6IC4vY29uZmlndXJlIC0tc3RhdGljCiAjCiAjIFRvIGltcG9zZSBzcGVjaWZpYyBjb21waWxlciBvciBmbGFncyBvciBpbnN0YWxsIGRpcmVjdG9yeSwgdXNlIGZvciBleGFtcGxlOgogIyAgICBwcmVmaXg9JEhPTUUgQ0M9Y2MgQ0ZMQUdTPSItTzQiIC4vY29uZmlndXJlCiAjIG9yIGZvciBjc2gvdGNzaCB1c2VyczoKICMgICAgKHNldGVudiBwcmVmaXggJEhPTUU7IHNldGVudiBDQyBjYzsgc2V0ZW52IENGTEFHUyAiLU80IjsgLi9jb25maWd1cmUpCi0jIExEU0hBUkVEIGlzIHRoZSBjb21tYW5kIHRvIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkKIAogIyBJbmNvcnJlY3Qgc2V0dGluZ3Mgb2YgQ0Mgb3IgQ0ZMQUdTIG1heSBwcmV2ZW50IGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnkuCiAjIElmIHlvdSBoYXZlIHByb2JsZW1zLCB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTIGJlZm9yZSByZXBvcnRpbmcKICMgYW4gZXJyb3IuCiAKLUxJQlM9bGliei5hCi1MREZMQUdTPSItTC4gJHtMSUJTfSIKK2lmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCisgICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nKSIKKyAgICBDUk9TU19QUkVGSVg9IiR7Q0hPU1R9LSIKK2ZpCisKK1NUQVRJQ0xJQj1saWJ6LmEKK0xERkxBR1M9IiR7TERGTEFHU30gLUwuICR7U1RBVElDTElCfSIKIFZFUj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXCguKlwpIi4qL1wxL3AnIDwgemxpYi5oYAorVkVSMz1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcXC5bMC05XSpcKS4qL1wxL3AnIDwgemxpYi5oYAogVkVSMj1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcXC5bMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAogVkVSMT1gc2VkIC1uIC1lICcvVkVSU0lPTiAiL3MvLioiXChbMC05XSpcKVxcLi4qL1wxL3AnIDwgemxpYi5oYAotQVI9JHtBUi0iYXIgcmMifQotUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQoraWYgIiR7Q1JPU1NfUFJFRklYfWFyIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KKyAgICBBUj0ke0FSLSIke0NST1NTX1BSRUZJWH1hciJ9CisgICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7QVJ9CitlbHNlCisgICAgQVI9JHtBUi0iYXIifQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke0FSfQorZmkKK0FSX1JDPSIke0FSfSByYyIKK2lmICIke0NST1NTX1BSRUZJWH1yYW5saWIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgorICAgIFJBTkxJQj0ke1JBTkxJQi0iJHtDUk9TU19QUkVGSVh9cmFubGliIn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtSQU5MSUJ9CitlbHNlCisgICAgUkFOTElCPSR7UkFOTElCLSJyYW5saWIifQorZmkKK2lmICIke0NST1NTX1BSRUZJWH1ubSIgLS12ZXJzaW9uID4vZGV2L251bGwgMj4vZGV2L251bGwgfHwgdGVzdCAkPyAtbHQgMTI2OyB0aGVuCisgICAgTk09JHtOTS0iJHtDUk9TU19QUkVGSVh9bm0ifQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke05NfQorZWxzZQorICAgIE5NPSR7Tk0tIm5tIn0KK2ZpCitMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CitMRFNIQVJFRExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCiBwcmVmaXg9JHtwcmVmaXgtL3Vzci9sb2NhbH0KIGV4ZWNfcHJlZml4PSR7ZXhlY19wcmVmaXgtJyR7cHJlZml4fSd9CiBsaWJkaXI9JHtsaWJkaXItJyR7ZXhlY19wcmVmaXh9L2xpYid9CitzaGFyZWRsaWJkaXI9JHtzaGFyZWRsaWJkaXItJyR7bGliZGlyfSd9CiBpbmNsdWRlZGlyPSR7aW5jbHVkZWRpci0nJHtwcmVmaXh9L2luY2x1ZGUnfQogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKLXNoYXJlZD0wCitzaGFyZWQ9MQorenByZWZpeD0wCitidWlsZDY0PTAKIGdjYz0wCiBvbGRfY2M9IiRDQyIKIG9sZF9jZmxhZ3M9IiRDRkxBR1MiCkBAIC0zOSwyMSArNjMsMjkgQEAKIHdoaWxlIHRlc3QgJCMgLWdlIDEKIGRvCiBjYXNlICIkMSIgaW4KLSAgICAtaCogfCAtLWgqKQorICAgIC1oKiB8IC0taGVscCkKICAgICAgIGVjaG8gJ3VzYWdlOicKLSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXNoYXJlZF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWV4ZWNfcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICAgWy0tbGliZGlyPUxJQkRJUl0gWy0taW5jbHVkZWRpcj1JTkNMVURFRElSXScKLSAgICAgICAgZXhpdCAwOzsKLSAgICAtcCo9KiB8IC0tcCo9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7IHNoaWZ0OzsKLSAgICAtZSo9KiB8IC0tZSo9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvWy1hLXpfXSo9Ly8nYDsgc2hpZnQ7OwotICAgIC1sKj0qIHwgLS1saWJkaXI9KikgbGliZGlyPWBlY2hvICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7IHNoaWZ0OzsKLSAgICAtaSo9KiB8IC0taW5jbHVkZWRpcj0qKSBpbmNsdWRlZGlyPWBlY2hvICQxIHwgc2VkICdzL1stYS16X10qPS8vJ2A7c2hpZnQ7OwotICAgIC1wKiB8IC0tcCopIHByZWZpeD0iJDIiOyBzaGlmdDsgc2hpZnQ7OwotICAgIC1lKiB8IC0tZSopIGV4ZWNfcHJlZml4PSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLWwqIHwgLS1sKikgbGliZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdDs7Ci0gICAgLWkqIHwgLS1pKikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQ7OwotICAgIC1zKiB8IC0tcyopIHNoYXJlZD0xOyBzaGlmdDs7Ci0gICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxOzsKKyAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScKKyAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScKKyAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJworICAgICAgICBleGl0IDAgOzsKKyAgICAtcCo9KiB8IC0tcHJlZml4PSopIHByZWZpeD1gZWNobyAkMSB8IHNlZCAncy8uKj0vLydgOyBzaGlmdCA7OworICAgIC1lKj0qIHwgLS1lcHJlZml4PSopIGV4ZWNfcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLWwqPSogfCAtLWxpYmRpcj0qKSBsaWJkaXI9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtLXNoYXJlZGxpYmRpcj0qKSBzaGFyZWRsaWJkaXI9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKKyAgICAtaSo9KiB8IC0taW5jbHVkZWRpcj0qKSBpbmNsdWRlZGlyPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7c2hpZnQgOzsKKyAgICAtdSo9KiB8IC0tdW5hbWU9KikgdW5hbWU9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDtzaGlmdCA7OworICAgIC1wKiB8IC0tcHJlZml4KSBwcmVmaXg9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CisgICAgLWUqIHwgLS1lcHJlZml4KSBleGVjX3ByZWZpeD0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKyAgICAtbCogfCAtLWxpYmRpcikgbGliZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdCA7OworICAgIC1pKiB8IC0taW5jbHVkZWRpcikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQgOzsKKyAgICAtcyogfCAtLXNoYXJlZCB8IC0tZW5hYmxlLXNoYXJlZCkgc2hhcmVkPTE7IHNoaWZ0IDs7CisgICAgLXQgfCAtLXN0YXRpYykgc2hhcmVkPTA7IHNoaWZ0IDs7CisgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CisgICAgLTYqIHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OworICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIjsgc2hpZnQgOzsKKyAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciI7IHNoaWZ0IDs7CisgICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxIDs7CiAgICAgZXNhYwogZG9uZQogCkBAIC02Myw0NiArOTUsNjggQEAKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yIGdjYy4uLgotY2M9JHtDQy1nY2N9Cit0ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLgorY2M9JHtDQy0ke0NST1NTX1BSRUZJWH1nY2N9CiBjZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9CiAjIHRvIGZvcmNlIHRoZSBhc20gdmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKIGNhc2UgIiRjYyIgaW4KLSAgKmdjYyopIGdjYz0xOzsKKyAgKmdjYyopIGdjYz0xIDs7CiBlc2FjCiAKIGlmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJGNmbGFncyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgogICBDQz0iJGNjIgotICBTRkxBR1M9JHtDRkxBR1MtIi1mUElDIC1PMyJ9Ci0gIENGTEFHUz0iJGNmbGFncyIKLSAgY2FzZSBgKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCi0gIExpbnV4IHwgbGludXggfCBHTlUgfCBHTlUvKikgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn07OwotICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKiApCi0gICAgICAgICAgICAgRVhFPScuZXhlJzs7CisgIFNGTEFHUz0iJHtDRkxBR1MtLU8zfSAtZlBJQyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9IgorICBpZiB0ZXN0ICRidWlsZDY0IC1lcSAxOyB0aGVuCisgICAgQ0ZMQUdTPSIke0NGTEFHU30gLW02NCIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICBmaQorICBpZiB0ZXN0ICIke1pMSUJHQ0NXQVJOfSIgPSAiWUVTIjsgdGhlbgorICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICBmaQorICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCisgICAgdW5hbWU9YCh1bmFtZSAtcyB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYAorICBmaQorICBjYXNlICIkdW5hbWUiIGluCisgIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgKkJTRCB8IERyYWdvbkZseSkgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xLC0tdmVyc2lvbi1zY3JpcHQsemxpYi5tYXAifSA7OworICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogfCBPUy8yKikKKyAgICAgICAgRVhFPScuZXhlJyA7OworICBNSU5HVyp8bWluZ3cqKQorIyB0ZW1wb3JhcnkgYnlwYXNzCisgICAgICAgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAorICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIKKyAgICAgICAgZXhpdCAxCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0KKyAgICAgICAgTERTSEFSRURMSUJDPSIiCisgICAgICAgIEVYRT0nLmV4ZScgOzsKICAgUU5YKikgICMgVGhpcyBpcyBmb3IgUU5YNi4gSSBzdXBwb3NlIHRoYXQgdGhlIFFOWCBydWxlIGJlbG93IGlzIGZvciBRTlgyLFFOWDQKICAgICAgICAgICMgKGFsYWluLmJvbm5lZm95QGljYnQuY29tKQotICAgICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLWhsaWJ6LnNvLjEifTs7CisgICAgICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtaGxpYnouc28uMSJ9IDs7CiAgIEhQLVVYKikKICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkICRTRkxBR1MifQogICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCiAgICAgICAgICBpYTY0KQogICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc28nCi0gICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbyc7OworICAgICAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc28nIDs7CiAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc2wnCi0gICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbCc7OwotICAgICAgICAgZXNhYzs7CisgICAgICAgICAgICAgICAgIFNIQVJFRExJQj0nbGliei5zbCcgOzsKKyAgICAgICAgIGVzYWMgOzsKICAgRGFyd2luKikgICBzaGFyZWRfZXh0PScuZHlsaWInCiAgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIifTs7Ci0gICopICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0gOzsKKyAgKikgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifSA7OwogICBlc2FjCiBlbHNlCiAgICMgZmluZCBzeXN0ZW0gbmFtZSBhbmQgY29ycmVzcG9uZGluZyBjYyBvcHRpb25zCiAgIENDPSR7Q0MtY2N9Ci0gIGNhc2UgYCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KKyAgZ2NjPTAKKyAgaWYgdGVzdCAteiAiJHVuYW1lIjsgdGhlbgorICAgIHVuYW1lPWAodW5hbWUgLXNyIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCisgIGZpCisgIGNhc2UgIiR1bmFtZSIgaW4KICAgSFAtVVgqKSAgICBTRkxBR1M9JHtDRkxBR1MtIi1PICt6In0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIn0KICMgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJsZCAtYiArdm5vY29tcGF0d2FybmluZ3MifQpAQCAtMTEwLDU3ICsxNjQsNjQgQEAKICAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgogICAgICAgICAgaWE2NCkKICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc28nCi0gICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNvJzs7CisgICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNvJyA7OwogICAgICAgICAgKikKICAgICAgICAgICAgICBzaGFyZWRfZXh0PScuc2wnCi0gICAgICAgICAgICAgU0hBUkVETElCPSdsaWJ6LnNsJzs7Ci0gICAgICAgICBlc2FjOzsKKyAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CisgICAgICAgICBlc2FjIDs7CiAgIElSSVgqKSAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItYW5zaSAtTzIgLXJwYXRoIC4ifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWFuc2kgLU8yIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn0gOzsKICAgT1NGMVwgVjQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkICAtV2wsLXNvbmFtZSxsaWJ6LnNvIC1XbCwtbXN5bSAtV2wsLXJwYXRoLCQobGliZGlyKSAtV2wsLXNldF92ZXJzaW9uLCR7VkVSfToxLjAifTs7CisgICAgICAgICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtV2wsLXJwYXRoLC4iCisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXNoYXJlZCAgLVdsLC1zb25hbWUsbGliei5zbyAtV2wsLW1zeW0gLVdsLC1ycGF0aCwkKGxpYmRpcikgLVdsLC1zZXRfdmVyc2lvbiwke1ZFUn06MS4wIn0gOzsKICAgT1NGMSopICAgICBTRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1zdGQxIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn0gOzsKICAgUU5YKikgICAgICBTRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi00IC1PIn0KICAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyJ9CiAgICAgICAgICAgICAgUkFOTElCPSR7UkFOTElCLSJ0cnVlIn0KLSAgICAgICAgICAgICBBUj0iY2MgLUEiOzsKKyAgICAgICAgICAgICBBUl9SQz0iY2MgLUEiIDs7CiAgIFNDT19TVlwgMy4yKikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzMgLWR5IC1LUElDICJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzMifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1keSAtS1BJQyAtRyJ9OzsKLSAgU3VuT1NcIDUqKSBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c4OSAtS1BJQyAtUi4ifQotICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzg5In0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9OzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtZHkgLUtQSUMgLUcifSA7OworICBTdW5PU1wgNSopIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn0KKyAgICAgICAgIGNhc2UgYCh1bmFtZSAtbSB8fCBlY2hvIHVua25vd24pIDI+L2Rldi9udWxsYCBpbgorICAgICAgICAgaTg2KikKKyAgICAgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCAtS1BJQyAtUi4ifQorICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLXhwZW50aXVtIC1mYXN0In0gOzsKKyAgICAgICAgICopCisgICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIgLUtQSUMgLVIuIn0KKyAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y2c5MiJ9IDs7CisgICAgICAgICBlc2FjIDs7CiAgIFN1bk9TXCA0KikgU0ZMQUdTPSR7Q0ZMQUdTLSItTzIgLVBJQyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTzIifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImxkIn07OwotICBTdW5TdHVkaW9cIDkqKSBTRkxBR1M9JHtDRkxBR1MtIi1EVVNFX01NQVAgLWZhc3QgLXhjb2RlPXBpYzMyIC14dGFyZ2V0PXVsdHJhMyAteGFyY2g9djliIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1EVVNFX01NQVAgLWZhc3QgLXh0YXJnZXQ9dWx0cmEzIC14YXJjaD12OWIifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC14YXJjaD12OWIifTs7CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQifSA7OworICBTdW5TdHVkaW9cIDkqKSBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC14Y29kZT1waWMzMiAteHRhcmdldD11bHRyYTMgLXhhcmNoPXY5YiJ9CisgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteHRhcmdldD11bHRyYTMgLXhhcmNoPXY5YiJ9CisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXhhcmNoPXY5YiJ9IDs7CiAgIFVOSVhfU3lzdGVtX1ZcIDQuMi4wKQogICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLUtQSUMgLU8ifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8ifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn0gOzsKICAgVU5JWF9TVlwgNC4yTVApCiAgICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItS2NvbmZvcm1fcGljIC1PIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIn0KLSAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9OzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9IDs7CiAgIE9wZW5VTklYXCA1KQogICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLUtQSUMgLU8ifQogICAgICAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLU8ifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn07OworICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIn0gOzsKICAgQUlYKikgICMgQ291cnRlc3kgb2YgZGJha2tlckBhcnJheWFzb2x1dGlvbnMuY29tCiAgICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItTyAtcW1heG1lbT04MTkyIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PIC1xbWF4bWVtPTgxOTIifQotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtInhsYyAtRyJ9OzsKLSAgIyBzZW5kIHdvcmtpbmcgb3B0aW9ucyBmb3Igb3RoZXIgc3lzdGVtcyB0byBzdXBwb3J0QGd6aXAub3JnCisgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ieGxjIC1HIn0gOzsKKyAgIyBzZW5kIHdvcmtpbmcgb3B0aW9ucyBmb3Igb3RoZXIgc3lzdGVtcyB0byB6bGliQGd6aXAub3JnCiAgICopICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9CiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItTyJ9Ci0gICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLXNoYXJlZCJ9OzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtc2hhcmVkIn0gOzsKICAgZXNhYwogZmkKIApAQCAtMTcxLDM4ICsyMzIsODMgQEAKIGlmIHRlc3QgJHNoYXJlZCAtZXEgMTsgdGhlbgogICBlY2hvIENoZWNraW5nIGZvciBzaGFyZWQgbGlicmFyeSBzdXBwb3J0Li4uCiAgICMgd2UgbXVzdCB0ZXN0IGluIHR3byBzdGVwcyAoY2MgdGhlbiBsZCksIHJlcXVpcmVkIGF0IGxlYXN0IG9uIFN1bk9TIDQueAotICBpZiB0ZXN0ICJgKCRDQyAtYyAkU0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiICYmCi0gICAgIHRlc3QgImAoJExEU0hBUkVEIC1vICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QubykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBDRkxBR1M9IiRTRkxBR1MiCi0gICAgTElCUz0iJFNIQVJFRExJQlYiCisgIGlmIHRlc3QgImAoJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiIgJiYKKyAgICAgdGVzdCAiYCgkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8pIDI+JjFgIiA9ICIiOyB0aGVuCiAgICAgZWNobyBCdWlsZGluZyBzaGFyZWQgbGlicmFyeSAkU0hBUkVETElCViB3aXRoICRDQy4KICAgZWxpZiB0ZXN0IC16ICIkb2xkX2NjIiAtYSAteiAiJG9sZF9jZmxhZ3MiOyB0aGVuCiAgICAgZWNobyBObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LgogICAgIHNoYXJlZD0wOwogICBlbHNlCisgICAgZWNobyBUZXN0ZWQgJENDIC13IC1jICRTRkxBR1MgJHRlc3QuYworICAgICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKKyAgICBlY2hvIFRlc3RlZCAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KKyAgICAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm8KICAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJwogICAgIHNoYXJlZD0wOwogICBmaQogZmkKIGlmIHRlc3QgJHNoYXJlZCAtZXEgMDsgdGhlbgogICBMRFNIQVJFRD0iJENDIgotICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRMSUJTIHZlcnNpb24gJFZFUiB3aXRoICRDQy4KKyAgQUxMPSJzdGF0aWMiCisgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIgorICBTSEFSRURMSUI9IiIKKyAgU0hBUkVETElCVj0iIgorICBTSEFSRURMSUJNPSIiCisgIGVjaG8gQnVpbGRpbmcgc3RhdGljIGxpYnJhcnkgJFNUQVRJQ0xJQiB2ZXJzaW9uICRWRVIgd2l0aCAkQ0MuCiBlbHNlCi0gIExERkxBR1M9Ii1MLiAke1NIQVJFRExJQlZ9IgorICBBTEw9InN0YXRpYyBzaGFyZWQiCisgIFRFU1Q9ImFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQiCiBmaQogCiBjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CitvZmY2NF90IGR1bW15ID0gMDsKK0VPRgoraWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgorICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCisgIEFMTD0iJHtBTEx9IGFsbDY0IgorICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgoraW50IG1haW4odm9pZCkgeworICBmc2Vla28oTlVMTCwgMCwgMCk7CisgIHJldHVybiAwOworfQorRU9GCisgIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGVsc2UKKyAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX0ZTRUVLTyIKKyAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX0ZTRUVLTyIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIKKyAgZmkKK2ZpCisKK2NwIC1wIHpjb25mLmguaW4gemNvbmYuaAorCitjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KIEVPRgogaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBzZWQgPCB6Y29uZi5pbi5oICIvSEFWRV9VTklTVERfSC9zJTAlMSUiID4gemNvbmYuaAorICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1VOSVNURF9ILiogbWF5IGJlL3MvZGVmIEhBVkVfVU5JU1REX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKKyAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKICAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iCiBlbHNlCi0gIGNwIC1wIHpjb25mLmluLmggemNvbmYuaAogICBlY2hvICJDaGVja2luZyBmb3IgdW5pc3RkLmguLi4gTm8uIgogZmkKIAoraWYgdGVzdCAkenByZWZpeCAtZXEgMTsgdGhlbgorICBzZWQgPCB6Y29uZi5oICIvI2lmZGVmIFpfUFJFRklYLiogbWF5IGJlL3MvZGVmIFpfUFJFRklYXCguKlwpIG1heSBiZS8gMVwxIHdhcy8iID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCisgIGVjaG8gIlVzaW5nIHpfIHByZWZpeCBvbiBhbGwgc3ltYm9scy4iCitmaQorCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTIxOSwxMyArMzI1LDEzIEBACiBFT0YKIAogaWYgdGVzdCAiYCgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIKIAogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotaW50IG15dGVzdChjaGFyICpmbXQsIC4uLikKK2ludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKQEAgLTI0OSw3ICszNTUsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAKLWludCBteXRlc3QoY2hhciAqZm10LCAuLi4pCitpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwpAQCAtMjcxLDYgKzM3Nyw3IEBACiAgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgorICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzbnByaW50Zl92b2lkIgogICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iCiAgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCiAgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCkBAIC0yNzgsNiArMzg1LDcgQEAKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fdnNucHJpbnRmIgorICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3ZzbnByaW50ZiIKICAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCiAgICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIgogICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgpAQCAtMjg3LDcgKzM5NSw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KIAotaW50IG15dGVzdChjaGFyICpmbXQsIC4uLikKK2ludCBteXRlc3QoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAgIGludCBuOwogICBjaGFyIGJ1ZlsyMF07CkBAIC0zMDksNiArNDE3LDcgQEAKICAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIgogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgorICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCiAgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIgogICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCiAgICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCkBAIC0zMTYsNyArNDI1LDcgQEAKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkiCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKS4iCiAKICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM1OCw2ICs0NjcsNyBAQAogICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzbnByaW50ZigpLi4uIFllcy4iCiAgICAgZWxzZQogICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCisgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc25wcmludGZfdm9pZCIKICAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBOby4iCiAgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKICAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKQEAgLTM2NSw2ICs0NzUsNyBAQAogICAgIGZpCiAgIGVsc2UKICAgICBDRkxBR1M9IiRDRkxBR1MgLUROT19zbnByaW50ZiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19zbnByaW50ZiIKICAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIE5vLiIKICAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIgogICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgpAQCAtMzkwLDYgKzUwMSw3IEBACiAgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBZZXMuIgogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zcHJpbnRmX3ZvaWQiCisgICAgICBTRkxBR1M9IiRTRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgogICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiBzcHJpbnRmKCkuLi4gTm8uIgogICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIKICAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIKQEAgLTM5OCw0MSArNTEwLDM3IEBACiAgIGZpCiBmaQogCi1jYXQgPiR0ZXN0LmMgPDxFT0YKLSNpbmNsdWRlIDxlcnJuby5oPgotaW50IG1haW4oKSB7IHJldHVybiAwOyB9Ci1FT0YKLWlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGVycm5vLmguLi4gWWVzLiIKLWVsc2UKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGVycm5vLmguLi4gTm8uIgotICBDRkxBR1M9IiRDRkxBR1MgLUROT19FUlJOT19IIgotZmkKLQotY2F0ID4gJHRlc3QuYyA8PEVPRgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLWNhZGRyX3QgaGVsbG8oKSB7Ci0gIHJldHVybiBtbWFwKChjYWRkcl90KTAsIChvZmZfdCkwLCBQUk9UX1JFQUQsIE1BUF9TSEFSRUQsIDAsIChvZmZfdCkwKTsKK2lmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGNhdCA+ICR0ZXN0LmMgPDxFT0YKKyNpZiAoKF9fR05VQ19fLTApICogMTAgKyBfX0dOVUNfTUlOT1JfXy0wID49IDMzKQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCitpbnQgWkxJQl9JTlRFUk5BTCBmb287CitpbnQgbWFpbigpCit7CisgIHJldHVybiAwOwogfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIENGTEFHUz0iJENGTEFHUyAtRFVTRV9NTUFQIgotICBlY2hvIENoZWNraW5nIGZvciBtbWFwIHN1cHBvcnQuLi4gWWVzLgotZWxzZQotICBlY2hvIENoZWNraW5nIGZvciBtbWFwIHN1cHBvcnQuLi4gTm8uCisgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgZWxzZQorICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKKyAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgZmkKIGZpCiAKIENQUD0ke0NQUC0iJENDIC1FIn0KIGNhc2UgJENGTEFHUyBpbgogICAqQVNNViopCi0gICAgaWYgdGVzdCAiYG5tICR0ZXN0Lm8gfCBncmVwIF9oZWxsb2AiID0gIiI7IHRoZW4KKyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsb2AiID0gIiI7IHRoZW4KICAgICAgIENQUD0iJENQUCAtRE5PX1VOREVSTElORSIKICAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBOby4KICAgICBlbHNlCiAgICAgICBlY2hvIENoZWNraW5nIGZvciB1bmRlcmxpbmUgaW4gZXh0ZXJuYWwgbmFtZXMuLi4gWWVzLgotICAgIGZpOzsKKyAgICBmaSA7OwogZXNhYwogCiBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQKQEAgLTQ0MSwxOSArNTQ5LDQ4IEBACiBzZWQgPCBNYWtlZmlsZS5pbiAiCiAvXkNDICo9L3MjPS4qIz0kQ0MjCiAvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKLS9eQ1BQICo9L3MjPS4qIz0kQ1BQIworL15TRkxBR1MgKj0vcyM9LiojPSRTRkxBR1MjCisvXkxERkxBR1MgKj0vcyM9LiojPSRMREZMQUdTIwogL15MRFNIQVJFRCAqPS9zIz0uKiM9JExEU0hBUkVEIwotL15MSUJTICo9L3MjPS4qIz0kTElCUyMKKy9eQ1BQICo9L3MjPS4qIz0kQ1BQIworL15TVEFUSUNMSUIgKj0vcyM9LiojPSRTVEFUSUNMSUIjCiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSIworL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCisvXkxEQ09ORklHICo9L3MjPS4qIz0kTERDT05GSUcjCisvXkxEU0hBUkVETElCQyAqPS9zIz0uKiM9JExEU0hBUkVETElCQyMKKy9eRVhFICo9L3MjPS4qIz0kRVhFIworL15wcmVmaXggKj0vcyM9LiojPSRwcmVmaXgjCisvXmV4ZWNfcHJlZml4ICo9L3MjPS4qIz0kZXhlY19wcmVmaXgjCisvXmxpYmRpciAqPS9zIz0uKiM9JGxpYmRpciMKKy9ec2hhcmVkbGliZGlyICo9L3MjPS4qIz0kc2hhcmVkbGliZGlyIworL15pbmNsdWRlZGlyICo9L3MjPS4qIz0kaW5jbHVkZWRpciMKKy9ebWFuZGlyICo9L3MjPS4qIz0kbWFuZGlyIworL15hbGw6ICovcyM6LiojOiAkQUxMIworL150ZXN0OiAqL3MjOi4qIzogJFRFU1QjCisiID4gTWFrZWZpbGUKKworc2VkIDwgemxpYi5wYy5pbiAiCisvXkNDICo9L3MjPS4qIz0kQ0MjCisvXkNGTEFHUyAqPS9zIz0uKiM9JENGTEFHUyMKKy9eQ1BQICo9L3MjPS4qIz0kQ1BQIworL15MRFNIQVJFRCAqPS9zIz0uKiM9JExEU0hBUkVEIworL15TVEFUSUNMSUIgKj0vcyM9LiojPSRTVEFUSUNMSUIjCisvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKKy9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCisvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIworL15BUiAqPS9zIz0uKiM9JEFSX1JDIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCiAvXkVYRSAqPS9zIz0uKiM9JEVYRSMKIC9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IwogL15leGVjX3ByZWZpeCAqPS9zIz0uKiM9JGV4ZWNfcHJlZml4IwogL15saWJkaXIgKj0vcyM9LiojPSRsaWJkaXIjCisvXnNoYXJlZGxpYmRpciAqPS9zIz0uKiM9JHNoYXJlZGxpYmRpciMKIC9eaW5jbHVkZWRpciAqPS9zIz0uKiM9JGluY2x1ZGVkaXIjCiAvXm1hbmRpciAqPS9zIz0uKiM9JG1hbmRpciMKIC9eTERGTEFHUyAqPS9zIz0uKiM9JExERkxBR1MjCi0iID4gTWFrZWZpbGUKKyIgfCBzZWQgLWUgIgorcy9cQFZFUlNJT05cQC8kVkVSL2c7CisiID4gemxpYi5wYwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmMgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwppbmRleCBmNjU4YTllLi45MWJlMzcyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuYworKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTUzLDcgKzUzLDcgQEAKIAogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMgZm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KICNpZmRlZiBCWUZPVVIKLSMgIGRlZmluZSBSRVYodykgKCgodyk+PjI0KSsoKCh3KT4+OCkmMHhmZjAwKSsgXAorIyAgZGVmaW5lIFJFVih3KSAoKCgodyk+PjI0KSYweGZmKSsoKCh3KT4+OCkmMHhmZjAwKSsgXAogICAgICAgICAgICAgICAgICgoKHcpJjB4ZmYwMCk8PDgpKygoKHcpJjB4ZmYpPDwyNCkpCiAgICBsb2NhbCB1bnNpZ25lZCBsb25nIGNyYzMyX2xpdHRsZSBPRigodW5zaWduZWQgbG9uZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CkBAIC02OCw2ICs2OCw4IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVkIGxvbmcgKm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ZWMpKTsKIGxvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2lnbmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Citsb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMik7CisKIAogI2lmZGVmIERZTkFNSUNfQ1JDX1RBQkxFCiAKQEAgLTIxOSw3ICsyMjEsNyBAQAogdW5zaWduZWQgbG9uZyBaRVhQT1JUIGNyYzMyKGNyYywgYnVmLCBsZW4pCiAgICAgdW5zaWduZWQgbG9uZyBjcmM7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47CisgICAgdUludCBsZW47CiB7CiAgICAgaWYgKGJ1ZiA9PSBaX05VTEwpIHJldHVybiAwVUw7CiAKQEAgLTM2NywyMiArMzY5LDIyIEBACiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLXVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZShjcmMxLCBjcmMyLCBsZW4yKQorbG9jYWwgdUxvbmcgY3JjMzJfY29tYmluZV8oY3JjMSwgY3JjMiwgbGVuMikKICAgICB1TG9uZyBjcmMxOwogICAgIHVMb25nIGNyYzI7Ci0gICAgel9vZmZfdCBsZW4yOworICAgIHpfb2ZmNjRfdCBsZW4yOwogewogICAgIGludCBuOwogICAgIHVuc2lnbmVkIGxvbmcgcm93OwogICAgIHVuc2lnbmVkIGxvbmcgZXZlbltHRjJfRElNXTsgICAgLyogZXZlbi1wb3dlci1vZi10d28gemVyb3Mgb3BlcmF0b3IgKi8KICAgICB1bnNpZ25lZCBsb25nIG9kZFtHRjJfRElNXTsgICAgIC8qIG9kZC1wb3dlci1vZi10d28gemVyb3Mgb3BlcmF0b3IgKi8KIAotICAgIC8qIGRlZ2VuZXJhdGUgY2FzZSAqLwotICAgIGlmIChsZW4yID09IDApCisgICAgLyogZGVnZW5lcmF0ZSBjYXNlIChhbHNvIGRpc2FsbG93IG5lZ2F0aXZlIGxlbmd0aHMpICovCisgICAgaWYgKGxlbjIgPD0gMCkKICAgICAgICAgcmV0dXJuIGNyYzE7CiAKICAgICAvKiBwdXQgb3BlcmF0b3IgZm9yIG9uZSB6ZXJvIGJpdCBpbiBvZGQgKi8KLSAgICBvZGRbMF0gPSAweGVkYjg4MzIwTDsgICAgICAgICAgIC8qIENSQy0zMiBwb2x5bm9taWFsICovCisgICAgb2RkWzBdID0gMHhlZGI4ODMyMFVMOyAgICAgICAgICAvKiBDUkMtMzIgcG9seW5vbWlhbCAqLwogICAgIHJvdyA9IDE7CiAgICAgZm9yIChuID0gMTsgbiA8IEdGMl9ESU07IG4rKykgewogICAgICAgICBvZGRbbl0gPSByb3c7CkBAIC00MjEsMyArNDIzLDIwIEBACiAgICAgY3JjMSBePSBjcmMyOwogICAgIHJldHVybiBjcmMxOwogfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCit1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUoY3JjMSwgY3JjMiwgbGVuMikKKyAgICB1TG9uZyBjcmMxOworICAgIHVMb25nIGNyYzI7CisgICAgel9vZmZfdCBsZW4yOworeworICAgIHJldHVybiBjcmMzMl9jb21iaW5lXyhjcmMxLCBjcmMyLCBsZW4yKTsKK30KKwordUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQoY3JjMSwgY3JjMiwgbGVuMikKKyAgICB1TG9uZyBjcmMxOworICAgIHVMb25nIGNyYzI7CisgICAgel9vZmY2NF90IGxlbjI7Cit7CisgICAgcmV0dXJuIGNyYzMyX2NvbWJpbmVfKGNyYzEsIGNyYzIsIGxlbjIpOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKaW5kZXggMjljZTFmNi4uNWM0MDIyZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2RlZmxhdGUuYworKysgYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCkBAIC0xLDUgKzEsNSBAQAogLyogZGVmbGF0ZS5jIC0tIGNvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuMyBDb3B5cmlnaHQgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkgIjsKKyAgICIgZGVmbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNzksMTkgKzc5LDE4IEBACiAjaWZuZGVmIEZBU1RFU1QKIGxvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfc2xvdyAgIE9GKChkZWZsYXRlX3N0YXRlICpzLCBpbnQgZmx1c2gpKTsKICNlbmRpZgorbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9ybGUgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOworbG9jYWwgYmxvY2tfc3RhdGUgZGVmbGF0ZV9odWZmICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGludCBmbHVzaCkpOwogbG9jYWwgdm9pZCBsbV9pbml0ICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBwdXRTaG9ydE1TQiAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdUludCBiKSk7CiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcgIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogbG9jYWwgaW50IHJlYWRfYnVmICAgICAgICBPRigoel9zdHJlYW1wIHN0cm0sIEJ5dGVmICpidWYsIHVuc2lnbmVkIHNpemUpKTsKLSNpZm5kZWYgRkFTVEVTVAogI2lmZGVmIEFTTVYKICAgICAgIHZvaWQgbWF0Y2hfaW5pdCBPRigodm9pZCkpOyAvKiBhc20gY29kZSBpbml0aWFsaXphdGlvbiAqLwogICAgICAgdUludCBsb25nZXN0X21hdGNoICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgSVBvcyBjdXJfbWF0Y2gpKTsKICNlbHNlCiBsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2ggIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogI2VuZGlmCi0jZW5kaWYKLWxvY2FsIHVJbnQgbG9uZ2VzdF9tYXRjaF9mYXN0IE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIGN1cl9tYXRjaCkpOwogCiAjaWZkZWYgREVCVUcKIGxvY2FsICB2b2lkIGNoZWNrX21hdGNoIE9GKChkZWZsYXRlX3N0YXRlICpzLCBJUG9zIHN0YXJ0LCBJUG9zIG1hdGNoLApAQCAtMTEwLDExICsxMDksNiBAQAogI2VuZGlmCiAvKiBNYXRjaGVzIG9mIGxlbmd0aCAzIGFyZSBkaXNjYXJkZWQgaWYgdGhlaXIgZGlzdGFuY2UgZXhjZWVkcyBUT09fRkFSICovCiAKLSNkZWZpbmUgTUlOX0xPT0tBSEVBRCAoTUFYX01BVENIK01JTl9NQVRDSCsxKQotLyogTWluaW11bSBhbW91bnQgb2YgbG9va2FoZWFkLCBleGNlcHQgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgZmlsZS4KLSAqIFNlZSBkZWZsYXRlLmMgZm9yIGNvbW1lbnRzIGFib3V0IHRoZSBNSU5fTUFUQ0grMS4KLSAqLwotCiAvKiBWYWx1ZXMgZm9yIG1heF9sYXp5X21hdGNoLCBnb29kX21hdGNoIGFuZCBtYXhfY2hhaW5fbGVuZ3RoLCBkZXBlbmRpbmcgb24KICAqIHRoZSBkZXNpcmVkIHBhY2sgbGV2ZWwgKDAuLjkpLiBUaGUgdmFsdWVzIGdpdmVuIGJlbG93IGhhdmUgYmVlbiB0dW5lZCB0bwogICogZXhjbHVkZSB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIGZvciBwYXRob2xvZ2ljYWwgZmlsZXMuIEJldHRlciB2YWx1ZXMgbWF5IGJlCkBAIC0yODgsNiArMjgyLDggQEAKICAgICBzLT5wcmV2ICAgPSAoUG9zZiAqKSAgWkFMTE9DKHN0cm0sIHMtPndfc2l6ZSwgc2l6ZW9mKFBvcykpOwogICAgIHMtPmhlYWQgICA9IChQb3NmICopICBaQUxMT0Moc3RybSwgcy0+aGFzaF9zaXplLCBzaXplb2YoUG9zKSk7CiAKKyAgICBzLT5oaWdoX3dhdGVyID0gMDsgICAgICAvKiBub3RoaW5nIHdyaXR0ZW4gdG8gcy0+d2luZG93IHlldCAqLworCiAgICAgcy0+bGl0X2J1ZnNpemUgPSAxIDw8IChtZW1MZXZlbCArIDYpOyAvKiAxNksgZWxlbWVudHMgYnkgZGVmYXVsdCAqLwogCiAgICAgb3ZlcmxheSA9ICh1c2hmICopIFpBTExPQyhzdHJtLCBzLT5saXRfYnVmc2l6ZSwgc2l6ZW9mKHVzaCkrMik7CkBAIC0zMzIsOCArMzI4LDggQEAKICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGggPCBNSU5fTUFUQ0gpIHJldHVybiBaX09LOwotICAgIGlmIChsZW5ndGggPiBNQVhfRElTVChzKSkgewotICAgICAgICBsZW5ndGggPSBNQVhfRElTVChzKTsKKyAgICBpZiAobGVuZ3RoID4gcy0+d19zaXplKSB7CisgICAgICAgIGxlbmd0aCA9IHMtPndfc2l6ZTsKICAgICAgICAgZGljdGlvbmFyeSArPSBkaWN0TGVuZ3RoIC0gbGVuZ3RoOyAvKiB1c2UgdGhlIHRhaWwgb2YgdGhlIGRpY3Rpb25hcnkgKi8KICAgICB9CiAgICAgem1lbWNweShzLT53aW5kb3csIGRpY3Rpb25hcnksIGxlbmd0aCk7CkBAIC00MzUsOSArNDMxLDEwIEBACiAgICAgfQogICAgIGZ1bmMgPSBjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5mdW5jOwogCi0gICAgaWYgKGZ1bmMgIT0gY29uZmlndXJhdGlvbl90YWJsZVtsZXZlbF0uZnVuYyAmJiBzdHJtLT50b3RhbF9pbiAhPSAwKSB7CisgICAgaWYgKChzdHJhdGVneSAhPSBzLT5zdHJhdGVneSB8fCBmdW5jICE9IGNvbmZpZ3VyYXRpb25fdGFibGVbbGV2ZWxdLmZ1bmMpICYmCisgICAgICAgIHN0cm0tPnRvdGFsX2luICE9IDApIHsKICAgICAgICAgLyogRmx1c2ggdGhlIGxhc3QgYnVmZmVyOiAqLwotICAgICAgICBlcnIgPSBkZWZsYXRlKHN0cm0sIFpfUEFSVElBTF9GTFVTSCk7CisgICAgICAgIGVyciA9IGRlZmxhdGUoc3RybSwgWl9CTE9DSyk7CiAgICAgfQogICAgIGlmIChzLT5sZXZlbCAhPSBsZXZlbCkgewogICAgICAgICBzLT5sZXZlbCA9IGxldmVsOwpAQCAtNDgxLDMzICs0NzgsNjYgQEAKICAqIHJlc3VsdGluZyBmcm9tIHVzaW5nIGZpeGVkIGJsb2NrcyBpbnN0ZWFkIG9mIHN0b3JlZCBibG9ja3MsIHdoaWNoIGRlZmxhdGUKICAqIGNhbiBlbWl0IG9uIGNvbXByZXNzZWQgZGF0YSBmb3Igc29tZSBjb21iaW5hdGlvbnMgb2YgdGhlIHBhcmFtZXRlcnMuCiAgKgotICogVGhpcyBmdW5jdGlvbiBjb3VsZCBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgdG8gcHJvdmlkZSBjbG9zZXIgdXBwZXIgYm91bmRzCi0gKiBmb3IgZXZlcnkgY29tYmluYXRpb24gb2Ygd2luZG93Qml0cyBhbmQgbWVtTGV2ZWwsIGFzIHdlbGwgYXMgd3JhcC4KLSAqIEJ1dCBldmVuIHRoZSBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQgb2YgYWJvdXQgMTQlIGV4cGFuc2lvbiBkb2VzIG5vdAotICogc2VlbSBvbmVyb3VzIGZvciBvdXRwdXQgYnVmZmVyIGFsbG9jYXRpb24uCisgKiBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIG1vcmUgc29waGlzdGljYXRlZCB0byBwcm92aWRlIGNsb3NlciB1cHBlciBib3VuZHMgZm9yCisgKiBldmVyeSBjb21iaW5hdGlvbiBvZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC4gIEJ1dCBldmVuIHRoZSBjb25zZXJ2YXRpdmUKKyAqIHVwcGVyIGJvdW5kIG9mIGFib3V0IDE0JSBleHBhbnNpb24gZG9lcyBub3Qgc2VlbSBvbmVyb3VzIGZvciBvdXRwdXQgYnVmZmVyCisgKiBhbGxvY2F0aW9uLgogICovCiB1TG9uZyBaRVhQT1JUIGRlZmxhdGVCb3VuZChzdHJtLCBzb3VyY2VMZW4pCiAgICAgel9zdHJlYW1wIHN0cm07CiAgICAgdUxvbmcgc291cmNlTGVuOwogewogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgdUxvbmcgZGVzdExlbjsKKyAgICB1TG9uZyBjb21wbGVuLCB3cmFwbGVuOworICAgIEJ5dGVmICpzdHI7CiAKLSAgICAvKiBjb25zZXJ2YXRpdmUgdXBwZXIgYm91bmQgKi8KLSAgICBkZXN0TGVuID0gc291cmNlTGVuICsKLSAgICAgICAgICAgICAgKChzb3VyY2VMZW4gKyA3KSA+PiAzKSArICgoc291cmNlTGVuICsgNjMpID4+IDYpICsgMTE7CisgICAgLyogY29uc2VydmF0aXZlIHVwcGVyIGJvdW5kIGZvciBjb21wcmVzc2VkIGRhdGEgKi8KKyAgICBjb21wbGVuID0gc291cmNlTGVuICsKKyAgICAgICAgICAgICAgKChzb3VyY2VMZW4gKyA3KSA+PiAzKSArICgoc291cmNlTGVuICsgNjMpID4+IDYpICsgNTsKIAotICAgIC8qIGlmIGNhbid0IGdldCBwYXJhbWV0ZXJzLCByZXR1cm4gY29uc2VydmF0aXZlIGJvdW5kICovCisgICAgLyogaWYgY2FuJ3QgZ2V0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgcGx1cyB6bGliIHdyYXBwZXIgKi8KICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKQotICAgICAgICByZXR1cm4gZGVzdExlbjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZW4gKyA2OworCisgICAgLyogY29tcHV0ZSB3cmFwcGVyIGxlbmd0aCAqLworICAgIHMgPSBzdHJtLT5zdGF0ZTsKKyAgICBzd2l0Y2ggKHMtPndyYXApIHsKKyAgICBjYXNlIDA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmF3IGRlZmxhdGUgKi8KKyAgICAgICAgd3JhcGxlbiA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB6bGliIHdyYXBwZXIgKi8KKyAgICAgICAgd3JhcGxlbiA9IDYgKyAocy0+c3Ryc3RhcnQgPyA0IDogMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnemlwIHdyYXBwZXIgKi8KKyAgICAgICAgd3JhcGxlbiA9IDE4OworICAgICAgICBpZiAocy0+Z3poZWFkICE9IFpfTlVMTCkgeyAgICAgICAgICAvKiB1c2VyLXN1cHBsaWVkIGd6aXAgaGVhZGVyICovCisgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgd3JhcGxlbiArPSAyICsgcy0+Z3poZWFkLT5leHRyYV9sZW47CisgICAgICAgICAgICBzdHIgPSBzLT5nemhlYWQtPm5hbWU7CisgICAgICAgICAgICBpZiAoc3RyICE9IFpfTlVMTCkKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIHdyYXBsZW4rKzsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICgqc3RyKyspOworICAgICAgICAgICAgc3RyID0gcy0+Z3poZWFkLT5jb21tZW50OworICAgICAgICAgICAgaWYgKHN0ciAhPSBaX05VTEwpCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB3cmFwbGVuKys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKnN0cisrKTsKKyAgICAgICAgICAgIGlmIChzLT5nemhlYWQtPmhjcmMpCisgICAgICAgICAgICAgICAgd3JhcGxlbiArPSAyOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgY29tcGlsZXIgaGFwcGluZXNzICovCisgICAgICAgIHdyYXBsZW4gPSA2OworICAgIH0KIAogICAgIC8qIGlmIG5vdCBkZWZhdWx0IHBhcmFtZXRlcnMsIHJldHVybiBjb25zZXJ2YXRpdmUgYm91bmQgKi8KLSAgICBzID0gc3RybS0+c3RhdGU7CiAgICAgaWYgKHMtPndfYml0cyAhPSAxNSB8fCBzLT5oYXNoX2JpdHMgIT0gOCArIDcpCi0gICAgICAgIHJldHVybiBkZXN0TGVuOworICAgICAgICByZXR1cm4gY29tcGxlbiArIHdyYXBsZW47CiAKICAgICAvKiBkZWZhdWx0IHNldHRpbmdzOiByZXR1cm4gdGlnaHQgYm91bmQgZm9yIHRoYXQgY2FzZSAqLwotICAgIHJldHVybiBjb21wcmVzc0JvdW5kKHNvdXJjZUxlbik7CisgICAgcmV0dXJuIHNvdXJjZUxlbiArIChzb3VyY2VMZW4gPj4gMTIpICsgKHNvdXJjZUxlbiA+PiAxNCkgKworICAgICAgICAgICAoc291cmNlTGVuID4+IDI1KSArIDEzIC0gNiArIHdyYXBsZW47CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU1Nyw3ICs1ODcsNyBAQAogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8Ci0gICAgICAgIGZsdXNoID4gWl9GSU5JU0ggfHwgZmx1c2ggPCAwKSB7CisgICAgICAgIGZsdXNoID4gWl9CTE9DSyB8fCBmbHVzaCA8IDApIHsKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIH0KICAgICBzID0gc3RybS0+c3RhdGU7CkBAIC01ODEsNyArNjExLDcgQEAKICAgICAgICAgICAgIHB1dF9ieXRlKHMsIDMxKTsKICAgICAgICAgICAgIHB1dF9ieXRlKHMsIDEzOSk7CiAgICAgICAgICAgICBwdXRfYnl0ZShzLCA4KTsKLSAgICAgICAgICAgIGlmIChzLT5nemhlYWQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHMtPmd6aGVhZCA9PSBaX05VTEwpIHsKICAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKICAgICAgICAgICAgICAgICBwdXRfYnl0ZShzLCAwKTsKQEAgLTYwOCw3ICs2MzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA+PSBaX0hVRkZNQU5fT05MWSB8fCBzLT5sZXZlbCA8IDIgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0IDogMCkpOwogICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+b3MgJiAweGZmKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKHMtPmd6aGVhZC0+ZXh0cmEgIT0gWl9OVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIHMtPmd6aGVhZC0+ZXh0cmFfbGVuICYgMHhmZik7CiAgICAgICAgICAgICAgICAgICAgIHB1dF9ieXRlKHMsIChzLT5nemhlYWQtPmV4dHJhX2xlbiA+PiA4KSAmIDB4ZmYpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY1MCw3ICs2ODAsNyBAQAogICAgIH0KICNpZmRlZiBHWklQCiAgICAgaWYgKHMtPnN0YXR1cyA9PSBFWFRSQV9TVEFURSkgewotICAgICAgICBpZiAocy0+Z3poZWFkLT5leHRyYSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmV4dHJhICE9IFpfTlVMTCkgewogICAgICAgICAgICAgdUludCBiZWcgPSBzLT5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwogCiAgICAgICAgICAgICB3aGlsZSAocy0+Z3ppbmRleCA8IChzLT5nemhlYWQtPmV4dHJhX2xlbiAmIDB4ZmZmZikpIHsKQEAgLTY3OCw3ICs3MDgsNyBAQAogICAgICAgICAgICAgcy0+c3RhdHVzID0gTkFNRV9TVEFURTsKICAgICB9CiAgICAgaWYgKHMtPnN0YXR1cyA9PSBOQU1FX1NUQVRFKSB7Ci0gICAgICAgIGlmIChzLT5nemhlYWQtPm5hbWUgIT0gTlVMTCkgeworICAgICAgICBpZiAocy0+Z3poZWFkLT5uYW1lICE9IFpfTlVMTCkgewogICAgICAgICAgICAgdUludCBiZWcgPSBzLT5wZW5kaW5nOyAgLyogc3RhcnQgb2YgYnl0ZXMgdG8gdXBkYXRlIGNyYyAqLwogICAgICAgICAgICAgaW50IHZhbDsKIApAQCAtNzA5LDcgKzczOSw3IEBACiAgICAgICAgICAgICBzLT5zdGF0dXMgPSBDT01NRU5UX1NUQVRFOwogICAgIH0KICAgICBpZiAocy0+c3RhdHVzID09IENPTU1FTlRfU1RBVEUpIHsKLSAgICAgICAgaWYgKHMtPmd6aGVhZC0+Y29tbWVudCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzLT5nemhlYWQtPmNvbW1lbnQgIT0gWl9OVUxMKSB7CiAgICAgICAgICAgICB1SW50IGJlZyA9IHMtPnBlbmRpbmc7ICAvKiBzdGFydCBvZiBieXRlcyB0byB1cGRhdGUgY3JjICovCiAgICAgICAgICAgICBpbnQgdmFsOwogCkBAIC03ODcsNyArODE3LDkgQEAKICAgICAgICAgKGZsdXNoICE9IFpfTk9fRkxVU0ggJiYgcy0+c3RhdHVzICE9IEZJTklTSF9TVEFURSkpIHsKICAgICAgICAgYmxvY2tfc3RhdGUgYnN0YXRlOwogCi0gICAgICAgIGJzdGF0ZSA9ICgqKGNvbmZpZ3VyYXRpb25fdGFibGVbcy0+bGV2ZWxdLmZ1bmMpKShzLCBmbHVzaCk7CisgICAgICAgIGJzdGF0ZSA9IHMtPnN0cmF0ZWd5ID09IFpfSFVGRk1BTl9PTkxZID8gZGVmbGF0ZV9odWZmKHMsIGZsdXNoKSA6CisgICAgICAgICAgICAgICAgICAgIChzLT5zdHJhdGVneSA9PSBaX1JMRSA/IGRlZmxhdGVfcmxlKHMsIGZsdXNoKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAoKihjb25maWd1cmF0aW9uX3RhYmxlW3MtPmxldmVsXS5mdW5jKSkocywgZmx1c2gpKTsKIAogICAgICAgICBpZiAoYnN0YXRlID09IGZpbmlzaF9zdGFydGVkIHx8IGJzdGF0ZSA9PSBmaW5pc2hfZG9uZSkgewogICAgICAgICAgICAgcy0+c3RhdHVzID0gRklOSVNIX1NUQVRFOwpAQCAtODA4LDEzICs4NDAsMTcgQEAKICAgICAgICAgaWYgKGJzdGF0ZSA9PSBibG9ja19kb25lKSB7CiAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9QQVJUSUFMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgX3RyX2FsaWduKHMpOwotICAgICAgICAgICAgfSBlbHNlIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCisgICAgICAgICAgICB9IGVsc2UgaWYgKGZsdXNoICE9IFpfQkxPQ0spIHsgLyogRlVMTF9GTFVTSCBvciBTWU5DX0ZMVVNIICovCiAgICAgICAgICAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCAoY2hhciopMCwgMEwsIDApOwogICAgICAgICAgICAgICAgIC8qIEZvciBhIGZ1bGwgZmx1c2gsIHRoaXMgZW1wdHkgYmxvY2sgd2lsbCBiZSByZWNvZ25pemVkCiAgICAgICAgICAgICAgICAgICogYXMgYSBzcGVjaWFsIG1hcmtlciBieSBpbmZsYXRlX3N5bmMoKS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9GVUxMX0ZMVVNIKSB7CiAgICAgICAgICAgICAgICAgICAgIENMRUFSX0hBU0gocyk7ICAgICAgICAgICAgIC8qIGZvcmdldCBoaXN0b3J5ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZsdXNoX3BlbmRpbmcoc3RybSk7CkBAIC0xMTY3LDEyICsxMjAzLDEzIEBACiAgICAgcmV0dXJuIHMtPmxvb2thaGVhZDsKIH0KICNlbmRpZiAvKiBBU01WICovCi0jZW5kaWYgLyogRkFTVEVTVCAqLworCisjZWxzZSAvKiBGQVNURVNUICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogT3B0aW1pemVkIHZlcnNpb24gZm9yIGxldmVsID09IDEgb3Igc3RyYXRlZ3kgPT0gWl9STEUgb25seQorICogT3B0aW1pemVkIHZlcnNpb24gZm9yIEZBU1RFU1Qgb25seQogICovCi1sb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2hfZmFzdChzLCBjdXJfbWF0Y2gpCitsb2NhbCB1SW50IGxvbmdlc3RfbWF0Y2gocywgY3VyX21hdGNoKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgSVBvcyBjdXJfbWF0Y2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IG1hdGNoICovCiB7CkBAIC0xMjI1LDYgKzEyNjIsOCBAQAogICAgIHJldHVybiAodUludClsZW4gPD0gcy0+bG9va2FoZWFkID8gKHVJbnQpbGVuIDogcy0+bG9va2FoZWFkOwogfQogCisjZW5kaWYgLyogRkFTVEVTVCAqLworCiAjaWZkZWYgREVCVUcKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ2hlY2sgdGhhdCB0aGUgbWF0Y2ggYXQgbWF0Y2hfc3RhcnQgaXMgaW5kZWVkIGEgbWF0Y2guCkBAIC0xMzAzLDcgKzEzNDIsNiBAQAogICAgICAgICAgICAgICAgbGF0ZXIuIChVc2luZyBsZXZlbCAwIHBlcm1hbmVudGx5IGlzIG5vdCBhbiBvcHRpbWFsIHVzYWdlIG9mCiAgICAgICAgICAgICAgICB6bGliLCBzbyB3ZSBkb24ndCBjYXJlIGFib3V0IHRoaXMgcGF0aG9sb2dpY2FsIGNhc2UuKQogICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvKiAlJSUgYXZvaWQgdGhpcyB3aGVuIFpfUkxFICovCiAgICAgICAgICAgICBuID0gcy0+aGFzaF9zaXplOwogICAgICAgICAgICAgcCA9ICZzLT5oZWFkW25dOwogICAgICAgICAgICAgZG8gewpAQCAtMTM1NSwyNyArMTM5Myw2MSBAQAogICAgICAgICAgKi8KIAogICAgIH0gd2hpbGUgKHMtPmxvb2thaGVhZCA8IE1JTl9MT09LQUhFQUQgJiYgcy0+c3RybS0+YXZhaWxfaW4gIT0gMCk7CisKKyAgICAvKiBJZiB0aGUgV0lOX0lOSVQgYnl0ZXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBkYXRhIGhhdmUgbmV2ZXIgYmVlbgorICAgICAqIHdyaXR0ZW4sIHRoZW4gemVybyB0aG9zZSBieXRlcyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgcmVwb3J0cyBvZgorICAgICAqIHRoZSB1c2Ugb2YgdW5pbml0aWFsaXplZCAob3IgdW5pbml0aWFsaXNlZCBhcyBKdWxpYW4gd3JpdGVzKSBieXRlcyBieQorICAgICAqIHRoZSBsb25nZXN0IG1hdGNoIHJvdXRpbmVzLiAgVXBkYXRlIHRoZSBoaWdoIHdhdGVyIG1hcmsgZm9yIHRoZSBuZXh0CisgICAgICogdGltZSB0aHJvdWdoIGhlcmUuICBXSU5fSU5JVCBpcyBzZXQgdG8gTUFYX01BVENIIHNpbmNlIHRoZSBsb25nZXN0IG1hdGNoCisgICAgICogcm91dGluZXMgYWxsb3cgc2Nhbm5pbmcgdG8gc3Ryc3RhcnQgKyBNQVhfTUFUQ0gsIGlnbm9yaW5nIGxvb2thaGVhZC4KKyAgICAgKi8KKyAgICBpZiAocy0+aGlnaF93YXRlciA8IHMtPndpbmRvd19zaXplKSB7CisgICAgICAgIHVsZyBjdXJyID0gcy0+c3Ryc3RhcnQgKyAodWxnKShzLT5sb29rYWhlYWQpOworICAgICAgICB1bGcgaW5pdDsKKworICAgICAgICBpZiAocy0+aGlnaF93YXRlciA8IGN1cnIpIHsKKyAgICAgICAgICAgIC8qIFByZXZpb3VzIGhpZ2ggd2F0ZXIgbWFyayBiZWxvdyBjdXJyZW50IGRhdGEgLS0gemVybyBXSU5fSU5JVAorICAgICAgICAgICAgICogYnl0ZXMgb3IgdXAgdG8gZW5kIG9mIHdpbmRvdywgd2hpY2hldmVyIGlzIGxlc3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIGN1cnI7CisgICAgICAgICAgICBpZiAoaW5pdCA+IFdJTl9JTklUKQorICAgICAgICAgICAgICAgIGluaXQgPSBXSU5fSU5JVDsKKyAgICAgICAgICAgIHptZW16ZXJvKHMtPndpbmRvdyArIGN1cnIsICh1bnNpZ25lZClpbml0KTsKKyAgICAgICAgICAgIHMtPmhpZ2hfd2F0ZXIgPSBjdXJyICsgaW5pdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChzLT5oaWdoX3dhdGVyIDwgKHVsZyljdXJyICsgV0lOX0lOSVQpIHsKKyAgICAgICAgICAgIC8qIEhpZ2ggd2F0ZXIgbWFyayBhdCBvciBhYm92ZSBjdXJyZW50IGRhdGEsIGJ1dCBiZWxvdyBjdXJyZW50IGRhdGEKKyAgICAgICAgICAgICAqIHBsdXMgV0lOX0lOSVQgLS0gemVybyBvdXQgdG8gY3VycmVudCBkYXRhIHBsdXMgV0lOX0lOSVQsIG9yIHVwCisgICAgICAgICAgICAgKiB0byBlbmQgb2Ygd2luZG93LCB3aGljaGV2ZXIgaXMgbGVzcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaW5pdCA9ICh1bGcpY3VyciArIFdJTl9JTklUIC0gcy0+aGlnaF93YXRlcjsKKyAgICAgICAgICAgIGlmIChpbml0ID4gcy0+d2luZG93X3NpemUgLSBzLT5oaWdoX3dhdGVyKQorICAgICAgICAgICAgICAgIGluaXQgPSBzLT53aW5kb3dfc2l6ZSAtIHMtPmhpZ2hfd2F0ZXI7CisgICAgICAgICAgICB6bWVtemVybyhzLT53aW5kb3cgKyBzLT5oaWdoX3dhdGVyLCAodW5zaWduZWQpaW5pdCk7CisgICAgICAgICAgICBzLT5oaWdoX3dhdGVyICs9IGluaXQ7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogRmx1c2ggdGhlIGN1cnJlbnQgYmxvY2ssIHdpdGggZ2l2ZW4gZW5kLW9mLWZpbGUgZmxhZy4KICAqIElOIGFzc2VydGlvbjogc3Ryc3RhcnQgaXMgc2V0IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbWF0Y2guCiAgKi8KLSNkZWZpbmUgRkxVU0hfQkxPQ0tfT05MWShzLCBlb2YpIHsgXAorI2RlZmluZSBGTFVTSF9CTE9DS19PTkxZKHMsIGxhc3QpIHsgXAogICAgX3RyX2ZsdXNoX2Jsb2NrKHMsIChzLT5ibG9ja19zdGFydCA+PSAwTCA/IFwKICAgICAgICAgICAgICAgICAgICAoY2hhcmYgKikmcy0+d2luZG93Wyh1bnNpZ25lZClzLT5ibG9ja19zdGFydF0gOiBcCiAgICAgICAgICAgICAgICAgICAgKGNoYXJmICopWl9OVUxMKSwgXAogICAgICAgICAgICAgICAgICh1bGcpKChsb25nKXMtPnN0cnN0YXJ0IC0gcy0+YmxvY2tfc3RhcnQpLCBcCi0gICAgICAgICAgICAgICAgKGVvZikpOyBcCisgICAgICAgICAgICAgICAgKGxhc3QpKTsgXAogICAgcy0+YmxvY2tfc3RhcnQgPSBzLT5zdHJzdGFydDsgXAogICAgZmx1c2hfcGVuZGluZyhzLT5zdHJtKTsgXAogICAgVHJhY2V2KChzdGRlcnIsIltGTFVTSF0iKSk7IFwKIH0KIAogLyogU2FtZSBidXQgZm9yY2UgcHJlbWF0dXJlIGV4aXQgaWYgbmVjZXNzYXJ5LiAqLwotI2RlZmluZSBGTFVTSF9CTE9DSyhzLCBlb2YpIHsgXAotICAgRkxVU0hfQkxPQ0tfT05MWShzLCBlb2YpOyBcCi0gICBpZiAocy0+c3RybS0+YXZhaWxfb3V0ID09IDApIHJldHVybiAoZW9mKSA/IGZpbmlzaF9zdGFydGVkIDogbmVlZF9tb3JlOyBcCisjZGVmaW5lIEZMVVNIX0JMT0NLKHMsIGxhc3QpIHsgXAorICAgRkxVU0hfQkxPQ0tfT05MWShzLCBsYXN0KTsgXAorICAgaWYgKHMtPnN0cm0tPmF2YWlsX291dCA9PSAwKSByZXR1cm4gKGxhc3QpID8gZmluaXNoX3N0YXJ0ZWQgOiBuZWVkX21vcmU7IFwKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNDQ5LDcgKzE1MjEsNyBAQAogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgaW50IGZsdXNoOwogewotICAgIElQb3MgaGFzaF9oZWFkID0gTklMOyAvKiBoZWFkIG9mIHRoZSBoYXNoIGNoYWluICovCisgICAgSVBvcyBoYXNoX2hlYWQ7ICAgICAgIC8qIGhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKi8KICAgICBpbnQgYmZsdXNoOyAgICAgICAgICAgLyogc2V0IGlmIGN1cnJlbnQgYmxvY2sgbXVzdCBiZSBmbHVzaGVkICovCiAKICAgICBmb3IgKDs7KSB7CkBAIC0xNDY5LDYgKzE1NDEsNyBAQAogICAgICAgICAvKiBJbnNlcnQgdGhlIHN0cmluZyB3aW5kb3dbc3Ryc3RhcnQgLi4gc3Ryc3RhcnQrMl0gaW4gdGhlCiAgICAgICAgICAqIGRpY3Rpb25hcnksIGFuZCBzZXQgaGFzaF9oZWFkIHRvIHRoZSBoZWFkIG9mIHRoZSBoYXNoIGNoYWluOgogICAgICAgICAgKi8KKyAgICAgICAgaGFzaF9oZWFkID0gTklMOwogICAgICAgICBpZiAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgSU5TRVJUX1NUUklORyhzLCBzLT5zdHJzdGFydCwgaGFzaF9oZWFkKTsKICAgICAgICAgfQpAQCAtMTQ4MSwxOSArMTU1NCw4IEBACiAgICAgICAgICAgICAgKiBvZiB3aW5kb3cgaW5kZXggMCAoaW4gcGFydGljdWxhciB3ZSBoYXZlIHRvIGF2b2lkIGEgbWF0Y2gKICAgICAgICAgICAgICAqIG9mIHRoZSBzdHJpbmcgd2l0aCBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnB1dCBmaWxlKS4KICAgICAgICAgICAgICAqLwotI2lmZGVmIEZBU1RFU1QKLSAgICAgICAgICAgIGlmICgocy0+c3RyYXRlZ3kgIT0gWl9IVUZGTUFOX09OTFkgJiYgcy0+c3RyYXRlZ3kgIT0gWl9STEUpIHx8Ci0gICAgICAgICAgICAgICAgKHMtPnN0cmF0ZWd5ID09IFpfUkxFICYmIHMtPnN0cnN0YXJ0IC0gaGFzaF9oZWFkID09IDEpKSB7Ci0gICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaF9mYXN0IChzLCBoYXNoX2hlYWQpOwotICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgIGlmIChzLT5zdHJhdGVneSAhPSBaX0hVRkZNQU5fT05MWSAmJiBzLT5zdHJhdGVneSAhPSBaX1JMRSkgewotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2ggKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfUkxFICYmIHMtPnN0cnN0YXJ0IC0gaGFzaF9oZWFkID09IDEpIHsKLSAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBvciBsb25nZXN0X21hdGNoX2Zhc3QoKSBzZXRzIG1hdGNoX3N0YXJ0ICovCisgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoIChzLCBoYXNoX2hlYWQpOworICAgICAgICAgICAgLyogbG9uZ2VzdF9tYXRjaCgpIHNldHMgbWF0Y2hfc3RhcnQgKi8KICAgICAgICAgfQogICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID49IE1JTl9NQVRDSCkgewogICAgICAgICAgICAgY2hlY2tfbWF0Y2gocywgcy0+c3Ryc3RhcnQsIHMtPm1hdGNoX3N0YXJ0LCBzLT5tYXRjaF9sZW5ndGgpOwpAQCAtMTU1NSw3ICsxNjE3LDcgQEAKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGludCBmbHVzaDsKIHsKLSAgICBJUG9zIGhhc2hfaGVhZCA9IE5JTDsgICAgLyogaGVhZCBvZiBoYXNoIGNoYWluICovCisgICAgSVBvcyBoYXNoX2hlYWQ7ICAgICAgICAgIC8qIGhlYWQgb2YgaGFzaCBjaGFpbiAqLwogICAgIGludCBiZmx1c2g7ICAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KIAogICAgIC8qIFByb2Nlc3MgdGhlIGlucHV0IGJsb2NrLiAqLwpAQCAtMTU3Niw2ICsxNjM4LDcgQEAKICAgICAgICAgLyogSW5zZXJ0IHRoZSBzdHJpbmcgd2luZG93W3N0cnN0YXJ0IC4uIHN0cnN0YXJ0KzJdIGluIHRoZQogICAgICAgICAgKiBkaWN0aW9uYXJ5LCBhbmQgc2V0IGhhc2hfaGVhZCB0byB0aGUgaGVhZCBvZiB0aGUgaGFzaCBjaGFpbjoKICAgICAgICAgICovCisgICAgICAgIGhhc2hfaGVhZCA9IE5JTDsKICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA+PSBNSU5fTUFUQ0gpIHsKICAgICAgICAgICAgIElOU0VSVF9TVFJJTkcocywgcy0+c3Ryc3RhcnQsIGhhc2hfaGVhZCk7CiAgICAgICAgIH0KQEAgLTE1OTEsMTIgKzE2NTQsOCBAQAogICAgICAgICAgICAgICogb2Ygd2luZG93IGluZGV4IDAgKGluIHBhcnRpY3VsYXIgd2UgaGF2ZSB0byBhdm9pZCBhIG1hdGNoCiAgICAgICAgICAgICAgKiBvZiB0aGUgc3RyaW5nIHdpdGggaXRzZWxmIGF0IHRoZSBzdGFydCBvZiB0aGUgaW5wdXQgZmlsZSkuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChzLT5zdHJhdGVneSAhPSBaX0hVRkZNQU5fT05MWSAmJiBzLT5zdHJhdGVneSAhPSBaX1JMRSkgewotICAgICAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IGxvbmdlc3RfbWF0Y2ggKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfUkxFICYmIHMtPnN0cnN0YXJ0IC0gaGFzaF9oZWFkID09IDEpIHsKLSAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBsb25nZXN0X21hdGNoX2Zhc3QgKHMsIGhhc2hfaGVhZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBsb25nZXN0X21hdGNoKCkgb3IgbG9uZ2VzdF9tYXRjaF9mYXN0KCkgc2V0cyBtYXRjaF9zdGFydCAqLworICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gbG9uZ2VzdF9tYXRjaCAocywgaGFzaF9oZWFkKTsKKyAgICAgICAgICAgIC8qIGxvbmdlc3RfbWF0Y2goKSBzZXRzIG1hdGNoX3N0YXJ0ICovCiAKICAgICAgICAgICAgIGlmIChzLT5tYXRjaF9sZW5ndGggPD0gNSAmJiAocy0+c3RyYXRlZ3kgPT0gWl9GSUxURVJFRAogI2lmIFRPT19GQVIgPD0gMzI3NjcKQEAgLTE2NzQsNyArMTczMyw2IEBACiB9CiAjZW5kaWYgLyogRkFTVEVTVCAqLwogCi0jaWYgMAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBGb3IgWl9STEUsIHNpbXBseSBsb29rIGZvciBydW5zIG9mIGJ5dGVzLCBnZW5lcmF0ZSBtYXRjaGVzIG9ubHkgb2YgZGlzdGFuY2UKICAqIG9uZS4gIERvIG5vdCBtYWludGFpbiBhIGhhc2ggdGFibGUuICAoSXQgd2lsbCBiZSByZWdlbmVyYXRlZCBpZiB0aGlzIHJ1biBvZgpAQCAtMTY4NCwxMSArMTc0Miw5IEBACiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKICAgICBpbnQgZmx1c2g7CiB7Ci0gICAgaW50IGJmbHVzaDsgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KLSAgICB1SW50IHJ1bjsgICAgICAgICAgIC8qIGxlbmd0aCBvZiBydW4gKi8KLSAgICB1SW50IG1heDsgICAgICAgICAgIC8qIG1heGltdW0gbGVuZ3RoIG9mIHJ1biAqLwotICAgIHVJbnQgcHJldjsgICAgICAgICAgLyogYnl0ZSBhdCBkaXN0YW5jZSBvbmUgdG8gbWF0Y2ggKi8KLSAgICBCeXRlZiAqc2NhbjsgICAgICAgIC8qIHNjYW4gZm9yIGVuZCBvZiBydW4gKi8KKyAgICBpbnQgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KKyAgICB1SW50IHByZXY7ICAgICAgICAgICAgICAvKiBieXRlIGF0IGRpc3RhbmNlIG9uZSB0byBtYXRjaCAqLworICAgIEJ5dGVmICpzY2FuLCAqc3RyZW5kOyAgIC8qIHNjYW4gZ29lcyB1cCB0byBzdHJlbmQgZm9yIGxlbmd0aCBvZiBydW4gKi8KIAogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgYWx3YXlzIGhhdmUgZW5vdWdoIGxvb2thaGVhZCwgZXhjZXB0CkBAIC0xNzA0LDIzICsxNzYwLDMzIEBACiAgICAgICAgIH0KIAogICAgICAgICAvKiBTZWUgaG93IG1hbnkgdGltZXMgdGhlIHByZXZpb3VzIGJ5dGUgcmVwZWF0cyAqLwotICAgICAgICBydW4gPSAwOwotICAgICAgICBpZiAocy0+c3Ryc3RhcnQgPiAwKSB7ICAgICAgLyogaWYgdGhlcmUgaXMgYSBwcmV2aW91cyBieXRlLCB0aGF0IGlzICovCi0gICAgICAgICAgICBtYXggPSBzLT5sb29rYWhlYWQgPCBNQVhfTUFUQ0ggPyBzLT5sb29rYWhlYWQgOiBNQVhfTUFUQ0g7CisgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IDA7CisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIICYmIHMtPnN0cnN0YXJ0ID4gMCkgewogICAgICAgICAgICAgc2NhbiA9IHMtPndpbmRvdyArIHMtPnN0cnN0YXJ0IC0gMTsKLSAgICAgICAgICAgIHByZXYgPSAqc2NhbisrOwotICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmICgqc2NhbisrICE9IHByZXYpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSB3aGlsZSAoKytydW4gPCBtYXgpOworICAgICAgICAgICAgcHJldiA9ICpzY2FuOworICAgICAgICAgICAgaWYgKHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuKSB7CisgICAgICAgICAgICAgICAgc3RyZW5kID0gcy0+d2luZG93ICsgcy0+c3Ryc3RhcnQgKyBNQVhfTUFUQ0g7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID09ICorK3NjYW4gJiYgcHJldiA9PSAqKytzY2FuICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9PSAqKytzY2FuICYmIHByZXYgPT0gKisrc2NhbiAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPT0gKisrc2NhbiAmJiBwcmV2ID09ICorK3NjYW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuIDwgc3RyZW5kKTsKKyAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBNQVhfTUFUQ0ggLSAoaW50KShzdHJlbmQgLSBzY2FuKTsKKyAgICAgICAgICAgICAgICBpZiAocy0+bWF0Y2hfbGVuZ3RoID4gcy0+bG9va2FoZWFkKQorICAgICAgICAgICAgICAgICAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5sb29rYWhlYWQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvKiBFbWl0IG1hdGNoIGlmIGhhdmUgcnVuIG9mIE1JTl9NQVRDSCBvciBsb25nZXIsIGVsc2UgZW1pdCBsaXRlcmFsICovCi0gICAgICAgIGlmIChydW4gPj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICBjaGVja19tYXRjaChzLCBzLT5zdHJzdGFydCwgcy0+c3Ryc3RhcnQgLSAxLCBydW4pOwotICAgICAgICAgICAgX3RyX3RhbGx5X2Rpc3QocywgMSwgcnVuIC0gTUlOX01BVENILCBiZmx1c2gpOwotICAgICAgICAgICAgcy0+bG9va2FoZWFkIC09IHJ1bjsKLSAgICAgICAgICAgIHMtPnN0cnN0YXJ0ICs9IHJ1bjsKKyAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIGNoZWNrX21hdGNoKHMsIHMtPnN0cnN0YXJ0LCBzLT5zdHJzdGFydCAtIDEsIHMtPm1hdGNoX2xlbmd0aCk7CisKKyAgICAgICAgICAgIF90cl90YWxseV9kaXN0KHMsIDEsIHMtPm1hdGNoX2xlbmd0aCAtIE1JTl9NQVRDSCwgYmZsdXNoKTsKKworICAgICAgICAgICAgcy0+bG9va2FoZWFkIC09IHMtPm1hdGNoX2xlbmd0aDsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ICs9IHMtPm1hdGNoX2xlbmd0aDsKKyAgICAgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBObyBtYXRjaCwgb3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCiAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIiVjIiwgcy0+d2luZG93W3MtPnN0cnN0YXJ0XSkpOwpAQCAtMTczMyw0ICsxNzk5LDM2IEBACiAgICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwogICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKIH0KLSNlbmRpZgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZvciBaX0hVRkZNQU5fT05MWSwgZG8gbm90IGxvb2sgZm9yIG1hdGNoZXMuICBEbyBub3QgbWFpbnRhaW4gYSBoYXNoIHRhYmxlLgorICogKEl0IHdpbGwgYmUgcmVnZW5lcmF0ZWQgaWYgdGhpcyBydW4gb2YgZGVmbGF0ZSBzd2l0Y2hlcyBhd2F5IGZyb20gSHVmZm1hbi4pCisgKi8KK2xvY2FsIGJsb2NrX3N0YXRlIGRlZmxhdGVfaHVmZihzLCBmbHVzaCkKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBmbHVzaDsKK3sKKyAgICBpbnQgYmZsdXNoOyAgICAgICAgICAgICAvKiBzZXQgaWYgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQgKi8KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGxpdGVyYWwgdG8gd3JpdGUuICovCisgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgeworICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7CisgICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9OT19GTFVTSCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5lZWRfbW9yZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiBmbHVzaCB0aGUgY3VycmVudCBibG9jayAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogT3V0cHV0IGEgbGl0ZXJhbCBieXRlICovCisgICAgICAgIHMtPm1hdGNoX2xlbmd0aCA9IDA7CisgICAgICAgIFRyYWNldnYoKHN0ZGVyciwiJWMiLCBzLT53aW5kb3dbcy0+c3Ryc3RhcnRdKSk7CisgICAgICAgIF90cl90YWxseV9saXQgKHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydF0sIGJmbHVzaCk7CisgICAgICAgIHMtPmxvb2thaGVhZC0tOworICAgICAgICBzLT5zdHJzdGFydCsrOworICAgICAgICBpZiAoYmZsdXNoKSBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICB9CisgICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOworICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmggYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCmluZGV4IDA1YTVhYjMuLmNiZjBkMWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2MCw2ICsyNjAsMTMgQEAKICAgICAgKiBhcmUgYWx3YXlzIHplcm8uCiAgICAgICovCiAKKyAgICB1bGcgaGlnaF93YXRlcjsKKyAgICAvKiBIaWdoIHdhdGVyIG1hcmsgb2Zmc2V0IGluIHdpbmRvdyBmb3IgaW5pdGlhbGl6ZWQgYnl0ZXMgLS0gYnl0ZXMgYWJvdmUKKyAgICAgKiB0aGlzIGFyZSBzZXQgdG8gemVybyBpbiBvcmRlciB0byBhdm9pZCBtZW1vcnkgY2hlY2sgd2FybmluZ3Mgd2hlbgorICAgICAqIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgYWNjZXNzIGJ5dGVzIHBhc3QgdGhlIGlucHV0LiAgVGhpcyBpcyB0aGVuCisgICAgICogdXBkYXRlZCB0byB0aGUgbmV3IGhpZ2ggd2F0ZXIgbWFyay4KKyAgICAgKi8KKwogfSBGQVIgZGVmbGF0ZV9zdGF0ZTsKIAogLyogT3V0cHV0IGEgYnl0ZSBvbiB0aGUgc3RyZWFtLgpAQCAtMjc4LDE0ICsyODUsMTggQEAKICAqIGRpc3RhbmNlcyBhcmUgbGltaXRlZCB0byBNQVhfRElTVCBpbnN0ZWFkIG9mIFdTSVpFLgogICovCiAKKyNkZWZpbmUgV0lOX0lOSVQgTUFYX01BVENICisvKiBOdW1iZXIgb2YgYnl0ZXMgYWZ0ZXIgZW5kIG9mIGRhdGEgaW4gd2luZG93IHRvIGluaXRpYWxpemUgaW4gb3JkZXIgdG8gYXZvaWQKKyAgIG1lbW9yeSBjaGVja2VyIGVycm9ycyBmcm9tIGxvbmdlc3QgbWF0Y2ggcm91dGluZXMgKi8KKwogICAgICAgICAvKiBpbiB0cmVlcy5jICovCi12b2lkIF90cl9pbml0ICAgICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKLWludCAgX3RyX3RhbGx5ICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKLXZvaWQgX3RyX2ZsdXNoX2Jsb2NrICBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwgdWxnIHN0b3JlZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlb2YpKTsKLXZvaWQgX3RyX2FsaWduICAgICAgICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwotdm9pZCBfdHJfc3RvcmVkX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLCB1bGcgc3RvcmVkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVvZikpOwordm9pZCBaTElCX0lOVEVSTkFMIF90cl9pbml0IE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CitpbnQgWkxJQl9JTlRFUk5BTCBfdHJfdGFsbHkgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIHVuc2lnbmVkIGRpc3QsIHVuc2lnbmVkIGxjKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjaGFyZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgdWxnIHN0b3JlZF9sZW4sIGludCBsYXN0KSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX3N0b3JlZF9ibG9jayBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgY2hhcmYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVsZyBzdG9yZWRfbGVuLCBpbnQgbGFzdCkpOwogCiAjZGVmaW5lIGRfY29kZShkaXN0KSBcCiAgICAoKGRpc3QpIDwgMjU2ID8gX2Rpc3RfY29kZVtkaXN0XSA6IF9kaXN0X2NvZGVbMjU2KygoZGlzdCk+PjcpXSkKQEAgLTI5OCwxMSArMzA5LDExIEBACiAvKiBJbmxpbmUgdmVyc2lvbnMgb2YgX3RyX3RhbGx5IGZvciBzcGVlZDogKi8KIAogI2lmIGRlZmluZWQoR0VOX1RSRUVTX0gpIHx8ICFkZWZpbmVkKFNUREMpCi0gIGV4dGVybiB1Y2ggX2xlbmd0aF9jb2RlW107Ci0gIGV4dGVybiB1Y2ggX2Rpc3RfY29kZVtdOworICBleHRlcm4gdWNoIFpMSUJfSU5URVJOQUwgX2xlbmd0aF9jb2RlW107CisgIGV4dGVybiB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW107CiAjZWxzZQotICBleHRlcm4gY29uc3QgdWNoIF9sZW5ndGhfY29kZVtdOwotICBleHRlcm4gY29uc3QgdWNoIF9kaXN0X2NvZGVbXTsKKyAgZXh0ZXJuIGNvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9sZW5ndGhfY29kZVtdOworICBleHRlcm4gY29uc3QgdWNoIFpMSUJfSU5URVJOQUwgX2Rpc3RfY29kZVtdOwogI2VuZGlmCiAKICMgZGVmaW5lIF90cl90YWxseV9saXQocywgYywgZmx1c2gpIFwKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCmluZGV4IDUyYmMyNjEuLjYwNDczNmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMKKysrIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwpAQCAtMSwxOSArMSwxOSBAQAogLyogZXhhbXBsZS5jIC0tIHVzYWdlIGV4YW1wbGUgb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogLyogQCgjKSAkSWQkICovCiAKLSNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgogCiAjaWZkZWYgU1REQwogIyAgaW5jbHVkZSA8c3RyaW5nLmg+CiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChWTVMpCisjaWYgZGVmaW5lZChWTVMpIHx8IGRlZmluZWQoUklTQ09TKQogIyAgZGVmaW5lIFRFU1RGSUxFICJmb28tZ3oiCiAjZWxzZQogIyAgZGVmaW5lIFRFU1RGSUxFICJmb28uZ3oiCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pjbG9zZS5jIGIvTW9kdWxlcy96bGliL2d6Y2xvc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWViOTlhCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy96bGliL2d6Y2xvc2UuYwpAQCAtMCwwICsxLDI1IEBACisvKiBnemNsb3NlLmMgLS0gemxpYiBnemNsb3NlKCkgZnVuY3Rpb24KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgImd6Z3V0cy5oIgorCisvKiBnemNsb3NlKCkgaXMgaW4gYSBzZXBhcmF0ZSBmaWxlIHNvIHRoYXQgaXQgaXMgbGlua2VkIGluIG9ubHkgaWYgaXQgaXMgdXNlZC4KKyAgIFRoYXQgd2F5IHRoZSBvdGhlciBnemNsb3NlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBpbnN0ZWFkIHRvIGF2b2lkIGxpbmtpbmcgaW4KKyAgIHVubmVlZGVkIGNvbXByZXNzaW9uIG9yIGRlY29tcHJlc3Npb24gcm91dGluZXMuICovCitpbnQgWkVYUE9SVCBnemNsb3NlKGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisjaWZuZGVmIE5PX0daQ09NUFJFU1MKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICByZXR1cm4gc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/IGd6Y2xvc2VfcihmaWxlKSA6IGd6Y2xvc2VfdyhmaWxlKTsKKyNlbHNlCisgICAgcmV0dXJuIGd6Y2xvc2VfcihmaWxlKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oIGIvTW9kdWxlcy96bGliL2d6Z3V0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOGZiNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qIGd6Z3V0cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9ucworICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKKyAqLworCisjaWZkZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorIyAgaWZuZGVmIF9MQVJHRUZJTEVfU09VUkNFCisjICAgIGRlZmluZSBfTEFSR0VGSUxFX1NPVVJDRSAxCisjICBlbmRpZgorIyAgaWZkZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyMgICAgdW5kZWYgX0ZJTEVfT0ZGU0VUX0JJVFMKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmICgoX19HTlVDX18tMCkgKiAxMCArIF9fR05VQ19NSU5PUl9fLTAgPj0gMzMpICYmICFkZWZpbmVkKE5PX1ZJWikKKyMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZWxzZQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ6bGliLmgiCisjaWZkZWYgU1REQworIyAgaW5jbHVkZSA8c3RyaW5nLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLworIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKKyNlbmRpZgorCisjaWZkZWYgX01TQ19WRVIKKyMgIGluY2x1ZGUgPGlvLmg+CisjICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyNlbmRpZgorCisjaWZuZGVmIGxvY2FsCisjICBkZWZpbmUgbG9jYWwgc3RhdGljCisjZW5kaWYKKy8qIGNvbXBpbGUgd2l0aCAtRGxvY2FsIGlmIHlvdXIgZGVidWdnZXIgY2FuJ3QgZmluZCBzdGF0aWMgc3ltYm9scyAqLworCisvKiBneiogZnVuY3Rpb25zIGFsd2F5cyB1c2UgbGlicmFyeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBTVERDCisgIGV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKKyAgZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKKyNlbmRpZgorCisvKiBnZXQgZXJybm8gYW5kIHN0cmVycm9yIGRlZmluaXRpb24gKi8KKyNpZiBkZWZpbmVkIFVOREVSX0NFCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQorI2Vsc2UKKyMgIGlmZGVmIFNUREMKKyMgICAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgICAgZGVmaW5lIHpzdHJlcnJvcigpIHN0cmVycm9yKGVycm5vKQorIyAgZWxzZQorIyAgICBkZWZpbmUgenN0cmVycm9yKCkgInN0ZGlvIGVycm9yIChjb25zdWx0IGVycm5vKSIKKyMgIGVuZGlmCisjZW5kaWYKKworLyogcHJvdmlkZSBwcm90b3R5cGVzIGZvciB0aGVzZSB3aGVuIGJ1aWxkaW5nIHpsaWIgd2l0aG91dCBMRlMgKi8KKyNpZiAhZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSB8fCBfTEZTNjRfTEFSR0VGSUxFLTAgPT0gMAorICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CisgICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOworICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQgT0YoKGd6RmlsZSkpOworICAgIFpFWFRFUk4gel9vZmY2NF90IFpFWFBPUlQgZ3pvZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CisjZW5kaWYKKworLyogZGVmYXVsdCBpL28gYnVmZmVyIHNpemUgLS0gZG91YmxlIHRoaXMgZm9yIG91dHB1dCB3aGVuIHJlYWRpbmcgKi8KKyNkZWZpbmUgR1pCVUZTSVpFIDgxOTIKKworLyogZ3ppcCBtb2RlcywgYWxzbyBwcm92aWRlIGEgbGl0dGxlIGludGVncml0eSBjaGVjayBvbiB0aGUgcGFzc2VkIHN0cnVjdHVyZSAqLworI2RlZmluZSBHWl9OT05FIDAKKyNkZWZpbmUgR1pfUkVBRCA3MjQ3CisjZGVmaW5lIEdaX1dSSVRFIDMxMTUzCisjZGVmaW5lIEdaX0FQUEVORCAxICAgICAvKiBtb2RlIHNldCB0byBHWl9XUklURSBhZnRlciB0aGUgZmlsZSBpcyBvcGVuZWQgKi8KKworLyogdmFsdWVzIGZvciBnel9zdGF0ZSBob3cgKi8KKyNkZWZpbmUgTE9PSyAwICAgICAgLyogbG9vayBmb3IgYSBnemlwIGhlYWRlciAqLworI2RlZmluZSBDT1BZIDEgICAgICAvKiBjb3B5IGlucHV0IGRpcmVjdGx5ICovCisjZGVmaW5lIEdaSVAgMiAgICAgIC8qIGRlY29tcHJlc3MgYSBnemlwIHN0cmVhbSAqLworCisvKiBpbnRlcm5hbCBnemlwIGZpbGUgc3RhdGUgZGF0YSBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAgICAgLyogdXNlZCBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nICovCisgICAgaW50IG1vZGU7ICAgICAgICAgICAgICAgLyogc2VlIGd6aXAgbW9kZXMgYWJvdmUgKi8KKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAvKiBmaWxlIGRlc2NyaXB0b3IgKi8KKyAgICBjaGFyICpwYXRoOyAgICAgICAgICAgICAvKiBwYXRoIG9yIGZkIGZvciBlcnJvciBtZXNzYWdlcyAqLworICAgIHpfb2ZmNjRfdCBwb3M7ICAgICAgICAgIC8qIGN1cnJlbnQgcG9zaXRpb24gaW4gdW5jb21wcmVzc2VkIGRhdGEgKi8KKyAgICB1bnNpZ25lZCBzaXplOyAgICAgICAgICAvKiBidWZmZXIgc2l6ZSwgemVybyBpZiBub3QgYWxsb2NhdGVkIHlldCAqLworICAgIHVuc2lnbmVkIHdhbnQ7ICAgICAgICAgIC8qIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSwgZGVmYXVsdCBpcyBHWkJVRlNJWkUgKi8KKyAgICB1bnNpZ25lZCBjaGFyICppbjsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpvdXQ7ICAgICAvKiBvdXRwdXQgYnVmZmVyIChkb3VibGUtc2l6ZWQgd2hlbiByZWFkaW5nKSAqLworICAgIHVuc2lnbmVkIGNoYXIgKm5leHQ7ICAgIC8qIG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCisgICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBkYXRhIHVudXNlZCBhdCBuZXh0ICovCisgICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCisgICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCisgICAgel9vZmY2NF90IHJhdzsgICAgICAgICAgLyogd2hlcmUgdGhlIHJhdyBkYXRhIHN0YXJ0ZWQsIGZvciBzZWVraW5nICovCisgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLworICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIHRydWUgaWYgbGFzdCByZWFkIGRpcmVjdCwgZmFsc2UgaWYgZ3ppcCAqLworICAgICAgICAvKiBqdXN0IGZvciB3cml0aW5nICovCisgICAgaW50IGxldmVsOyAgICAgICAgICAgICAgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KKyAgICBpbnQgc3RyYXRlZ3k7ICAgICAgICAgICAvKiBjb21wcmVzc2lvbiBzdHJhdGVneSAqLworICAgICAgICAvKiBzZWVrIHJlcXVlc3QgKi8KKyAgICB6X29mZjY0X3Qgc2tpcDsgICAgICAgICAvKiBhbW91bnQgdG8gc2tpcCAoYWxyZWFkeSByZXdvdW5kIGlmIGJhY2t3YXJkcykgKi8KKyAgICBpbnQgc2VlazsgICAgICAgICAgICAgICAvKiB0cnVlIGlmIHNlZWsgcmVxdWVzdCBwZW5kaW5nICovCisgICAgICAgIC8qIGVycm9yIGluZm9ybWF0aW9uICovCisgICAgaW50IGVycjsgICAgICAgICAgICAgICAgLyogZXJyb3IgY29kZSAqLworICAgIGNoYXIgKm1zZzsgICAgICAgICAgICAgIC8qIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICAgLyogemxpYiBpbmZsYXRlIG9yIGRlZmxhdGUgc3RyZWFtICovCisgICAgel9zdHJlYW0gc3RybTsgICAgICAgICAgLyogc3RyZWFtIHN0cnVjdHVyZSBpbi1wbGFjZSAobm90IGEgcG9pbnRlcikgKi8KK30gZ3pfc3RhdGU7Cit0eXBlZGVmIGd6X3N0YXRlIEZBUiAqZ3pfc3RhdGVwOworCisvKiBzaGFyZWQgZnVuY3Rpb25zICovCit2b2lkIFpMSUJfSU5URVJOQUwgZ3pfZXJyb3IgT0YoKGd6X3N0YXRlcCwgaW50LCBjb25zdCBjaGFyICopKTsKKyNpZiBkZWZpbmVkIFVOREVSX0NFCitjaGFyIFpMSUJfSU5URVJOQUwgKmd6X3N0cndpbmVycm9yIE9GKChEV09SRCBlcnJvcikpOworI2VuZGlmCisKKy8qIEdUX09GRih4KSwgd2hlcmUgeCBpcyBhbiB1bnNpZ25lZCB2YWx1ZSwgaXMgdHJ1ZSBpZiB4ID4gbWF4aW11bSB6X29mZjY0X3QKKyAgIHZhbHVlIC0tIG5lZWRlZCB3aGVuIGNvbXBhcmluZyB1bnNpZ25lZCB0byB6X29mZjY0X3QsIHdoaWNoIGlzIHNpZ25lZAorICAgKHBvc3NpYmxlIHpfb2ZmNjRfdCB0eXBlcyBvZmZfdCwgb2ZmNjRfdCwgYW5kIGxvbmcgYXJlIGFsbCBzaWduZWQpICovCisjaWZkZWYgSU5UX01BWAorIyAgZGVmaW5lIEdUX09GRih4KSAoc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHpfb2ZmNjRfdCkgJiYgKHgpID4gSU5UX01BWCkKKyNlbHNlCit1bnNpZ25lZCBaTElCX0lOVEVSTkFMIGd6X2ludG1heCBPRigodm9pZCkpOworIyAgZGVmaW5lIEdUX09GRih4KSAoc2l6ZW9mKGludCkgPT0gc2l6ZW9mKHpfb2ZmNjRfdCkgJiYgKHgpID4gZ3pfaW50bWF4KCkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemxpYi5jIGIvTW9kdWxlcy96bGliL2d6bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAzZTYwZQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvemxpYi9nemxpYi5jCkBAIC0wLDAgKzEsNTM3IEBACisvKiBnemxpYi5jIC0tIHpsaWIgZnVuY3Rpb25zIGNvbW1vbiB0byByZWFkaW5nIGFuZCB3cml0aW5nIGd6aXAgZmlsZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgImd6Z3V0cy5oIgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBMU0VFSyBsc2VlazY0CisjZWxzZQorIyAgZGVmaW5lIExTRUVLIGxzZWVrCisjZW5kaWYKKworLyogTG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCB2b2lkIGd6X3Jlc2V0IE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGd6RmlsZSBnel9vcGVuIE9GKChjb25zdCBjaGFyICosIGludCwgY29uc3QgY2hhciAqKSk7CisKKyNpZiBkZWZpbmVkIFVOREVSX0NFCisKKy8qIE1hcCB0aGUgV2luZG93cyBlcnJvciBudW1iZXIgaW4gRVJST1IgdG8gYSBsb2NhbGUtZGVwZW5kZW50IGVycm9yIG1lc3NhZ2UKKyAgIHN0cmluZyBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4gIFR5cGljYWxseSwgdGhlIHZhbHVlcyBmb3IgRVJST1IgY29tZQorICAgZnJvbSBHZXRMYXN0RXJyb3IuCisKKyAgIFRoZSBzdHJpbmcgcG9pbnRlZCB0byBzaGFsbCBub3QgYmUgbW9kaWZpZWQgYnkgdGhlIGFwcGxpY2F0aW9uLCBidXQgbWF5IGJlCisgICBvdmVyd3JpdHRlbiBieSBhIHN1YnNlcXVlbnQgY2FsbCB0byBnel9zdHJ3aW5lcnJvcgorCisgICBUaGUgZ3pfc3Ryd2luZXJyb3IgZnVuY3Rpb24gZG9lcyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IHNldHRpbmcgb2YKKyAgIEdldExhc3RFcnJvci4gKi8KK2NoYXIgWkxJQl9JTlRFUk5BTCAqZ3pfc3Ryd2luZXJyb3IgKGVycm9yKQorICAgICBEV09SRCBlcnJvcjsKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbMTAyNF07CisKKyAgICB3Y2hhcl90ICptc2didWY7CisgICAgRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworICAgIERXT1JEIGNoYXJzID0gRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTQorICAgICAgICB8IEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgZXJyb3IsCisgICAgICAgIDAsIC8qIERlZmF1bHQgbGFuZ3VhZ2UgKi8KKyAgICAgICAgKExQVk9JRCkmbXNnYnVmLAorICAgICAgICAwLAorICAgICAgICBOVUxMKTsKKyAgICBpZiAoY2hhcnMgIT0gMCkgeworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBcclxuIGFwcGVuZGVkLCB6YXAgaXQuICAqLworICAgICAgICBpZiAoY2hhcnMgPj0gMgorICAgICAgICAgICAgJiYgbXNnYnVmW2NoYXJzIC0gMl0gPT0gJ1xyJyAmJiBtc2didWZbY2hhcnMgLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBjaGFycyAtPSAyOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhcnMgPiBzaXplb2YgKGJ1ZikgLSAxKSB7CisgICAgICAgICAgICBjaGFycyA9IHNpemVvZiAoYnVmKSAtIDE7CisgICAgICAgICAgICBtc2didWZbY2hhcnNdID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHdjc3RvbWJzKGJ1ZiwgbXNnYnVmLCBjaGFycyArIDEpOworICAgICAgICBMb2NhbEZyZWUobXNnYnVmKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNwcmludGYoYnVmLCAidW5rbm93biB3aW4zMiBlcnJvciAoJWxkKSIsIGVycm9yKTsKKyAgICB9CisKKyAgICBTZXRMYXN0RXJyb3IobGFzdGVycik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworI2VuZGlmIC8qIFVOREVSX0NFICovCisKKy8qIFJlc2V0IGd6aXAgZmlsZSBzdGF0ZSAqLworbG9jYWwgdm9pZCBnel9yZXNldChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsgICAvKiBmb3IgcmVhZGluZyAuLi4gKi8KKyAgICAgICAgc3RhdGUtPmhhdmUgPSAwOyAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLworICAgICAgICBzdGF0ZS0+ZW9mID0gMDsgICAgICAgICAgICAgLyogbm90IGF0IGVuZCBvZiBmaWxlICovCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOyAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLworICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsgICAgICAgICAgLyogZGVmYXVsdCBmb3IgZW1wdHkgZmlsZSAqLworICAgIH0KKyAgICBzdGF0ZS0+c2VlayA9IDA7ICAgICAgICAgICAgICAgIC8qIG5vIHNlZWsgcmVxdWVzdCBwZW5kaW5nICovCisgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOyAgICAvKiBjbGVhciBlcnJvciAqLworICAgIHN0YXRlLT5wb3MgPSAwOyAgICAgICAgICAgICAgICAgLyogbm8gdW5jb21wcmVzc2VkIGRhdGEgeWV0ICovCisgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOyAgICAgICAvKiBubyBpbnB1dCBkYXRhIHlldCAqLworfQorCisvKiBPcGVuIGEgZ3ppcCBmaWxlIGVpdGhlciBieSBuYW1lIG9yIGZpbGUgZGVzY3JpcHRvci4gKi8KK2xvY2FsIGd6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KKyAgICBzdGF0ZSA9IG1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKKyAgICBpZiAoc3RhdGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RhdGUtPnNpemUgPSAwOyAgICAgICAgICAgIC8qIG5vIGJ1ZmZlcnMgYWxsb2NhdGVkIHlldCAqLworICAgIHN0YXRlLT53YW50ID0gR1pCVUZTSVpFOyAgICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgKi8KKyAgICBzdGF0ZS0+bXNnID0gTlVMTDsgICAgICAgICAgLyogbm8gZXJyb3IgbWVzc2FnZSB5ZXQgKi8KKworICAgIC8qIGludGVycHJldCBtb2RlICovCisgICAgc3RhdGUtPm1vZGUgPSBHWl9OT05FOworICAgIHN0YXRlLT5sZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsKKyAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7CisgICAgd2hpbGUgKCptb2RlKSB7CisgICAgICAgIGlmICgqbW9kZSA+PSAnMCcgJiYgKm1vZGUgPD0gJzknKQorICAgICAgICAgICAgc3RhdGUtPmxldmVsID0gKm1vZGUgLSAnMCc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN3aXRjaCAoKm1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgJ3InOgorICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfUkVBRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTk9fR1pDT01QUkVTUworICAgICAgICAgICAgY2FzZSAndyc6CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBHWl9XUklURTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfQVBQRU5EOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICBjYXNlICcrJzogICAgICAgLyogY2FuJ3QgcmVhZCBhbmQgd3JpdGUgYXQgdGhlIHNhbWUgdGltZSAqLworICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgY2FzZSAnYic6ICAgICAgIC8qIGlnbm9yZSAtLSB3aWxsIHJlcXVlc3QgYmluYXJ5IGFueXdheSAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSUxURVJFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfSFVGRk1BTl9PTkxZOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnUic6CisgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9STEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdGJzoKKyAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJWEVEOworICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUgKi8KKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICB9CisgICAgICAgIG1vZGUrKzsKKyAgICB9CisKKyAgICAvKiBtdXN0IHByb3ZpZGUgYW4gInIiLCAidyIsIG9yICJhIiAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9OT05FKSB7CisgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCisgICAgc3RhdGUtPnBhdGggPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgMSk7CisgICAgaWYgKHN0YXRlLT5wYXRoID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShzdGF0ZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBtb2RlIChvciBqdXN0IHVzZSBmZCkgKi8KKyAgICBzdGF0ZS0+ZmQgPSBmZCAhPSAtMSA/IGZkIDoKKyAgICAgICAgb3BlbihwYXRoLAorI2lmZGVmIE9fTEFSR0VGSUxFCisgICAgICAgICAgICBPX0xBUkdFRklMRSB8CisjZW5kaWYKKyNpZmRlZiBPX0JJTkFSWQorICAgICAgICAgICAgT19CSU5BUlkgfAorI2VuZGlmCisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICAgICAgICAgT19SRE9OTFkgOgorICAgICAgICAgICAgICAgIChPX1dST05MWSB8IE9fQ1JFQVQgfCAoCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgICAgICAgICAgICAgIE9fVFJVTkMgOgorICAgICAgICAgICAgICAgICAgICAgICAgT19BUFBFTkQpKSksCisgICAgICAgICAgICAwNjY2KTsKKyAgICBpZiAoc3RhdGUtPmZkID09IC0xKSB7CisgICAgICAgIGZyZWUoc3RhdGUtPnBhdGgpOworICAgICAgICBmcmVlKHN0YXRlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9BUFBFTkQpCisgICAgICAgIHN0YXRlLT5tb2RlID0gR1pfV1JJVEU7ICAgICAgICAgLyogc2ltcGxpZnkgbGF0ZXIgY2hlY2tzICovCisKKyAgICAvKiBzYXZlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGZvciByZXdpbmRpbmcgKG9ubHkgaWYgcmVhZGluZykgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBzdGF0ZS0+c3RhcnQgPSBMU0VFSyhzdGF0ZS0+ZmQsIDAsIFNFRUtfQ1VSKTsKKyAgICAgICAgaWYgKHN0YXRlLT5zdGFydCA9PSAtMSkgc3RhdGUtPnN0YXJ0ID0gMDsKKyAgICB9CisKKyAgICAvKiBpbml0aWFsaXplIHN0cmVhbSAqLworICAgIGd6X3Jlc2V0KHN0YXRlKTsKKworICAgIC8qIHJldHVybiBzdHJlYW0gKi8KKyAgICByZXR1cm4gKGd6RmlsZSlzdGF0ZTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuKHBhdGgsIG1vZGUpCisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIHJldHVybiBnel9vcGVuKHBhdGgsIC0xLCBtb2RlKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQocGF0aCwgbW9kZSkKKyAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTEsIG1vZGUpOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitnekZpbGUgWkVYUE9SVCBnemRvcGVuKGZkLCBtb2RlKQorICAgIGludCBmZDsKKyAgICBjb25zdCBjaGFyICptb2RlOworeworICAgIGNoYXIgKnBhdGg7ICAgICAgICAgLyogaWRlbnRpZmllciBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAgICBnekZpbGUgZ3o7CisKKyAgICBpZiAoZmQgPT0gLTEgfHwgKHBhdGggPSBtYWxsb2MoNyArIDMgKiBzaXplb2YoaW50KSkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworICAgIGd6ID0gZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSk7CisgICAgZnJlZShwYXRoKTsKKyAgICByZXR1cm4gZ3o7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdW5zaWduZWQgc2l6ZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IGFscmVhZHkgYWxsb2NhdGVkIG1lbW9yeSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3RlZCBzaXplICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlLT53YW50ID0gc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pyZXdpbmQoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGJhY2sgdXAgYW5kIHN0YXJ0IG92ZXIgKi8KKyAgICBpZiAoTFNFRUsoc3RhdGUtPmZkLCBzdGF0ZS0+c3RhcnQsIFNFRUtfU0VUKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGd6X3Jlc2V0KHN0YXRlKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmY2NF90IFpFWFBPUlQgZ3pzZWVrNjQoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgel9vZmY2NF90IG9mZnNldDsKKyAgICBpbnQgd2hlbmNlOworeworICAgIHVuc2lnbmVkIG47CisgICAgel9vZmY2NF90IHJldDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNhbiBvbmx5IHNlZWsgZnJvbSBzdGFydCBvciByZWxhdGl2ZSB0byBjdXJyZW50IHBvc2l0aW9uICovCisgICAgaWYgKHdoZW5jZSAhPSBTRUVLX1NFVCAmJiB3aGVuY2UgIT0gU0VFS19DVVIpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8gYSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCisgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkKKyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5wb3M7CisgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCisgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKKyAgICBzdGF0ZS0+c2VlayA9IDA7CisKKyAgICAvKiBpZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgorICAgICAgICBzdGF0ZS0+cG9zICsgb2Zmc2V0ID49IHN0YXRlLT5yYXcpIHsKKyAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+aGF2ZSwgU0VFS19DVVIpOworICAgICAgICBpZiAocmV0ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBzdGF0ZS0+aGF2ZSA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKKyAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+cG9zICs9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHN0YXRlLT5wb3M7CisgICAgfQorCisgICAgLyogY2FsY3VsYXRlIHNraXAgYW1vdW50LCByZXdpbmRpbmcgaWYgbmVlZGVkIGZvciBiYWNrIHNlZWsgd2hlbiByZWFkaW5nICovCisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpICAgICAgICAgLyogd3JpdGluZyAtLSBjYW4ndCBnbyBiYWNrd2FyZHMgKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT5wb3M7CisgICAgICAgIGlmIChvZmZzZXQgPCAwKSAgICAgICAgICAgICAgICAgICAgIC8qIGJlZm9yZSBzdGFydCBvZiBmaWxlISAqLworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZ3pyZXdpbmQoZmlsZSkgPT0gLTEpICAgICAgICAgICAvKiByZXdpbmQsIHRoZW4gc2tpcCB0byBvZmZzZXQgKi8KKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBpZiByZWFkaW5nLCBza2lwIHdoYXQncyBpbiBvdXRwdXQgYnVmZmVyIChvbmUgbGVzcyBnemdldGMoKSBjaGVjaykgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgeworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5oYXZlKSB8fCAoel9vZmY2NF90KXN0YXRlLT5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+aGF2ZTsKKyAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBvZmZzZXQgLT0gbjsKKyAgICB9CisKKyAgICAvKiByZXF1ZXN0IHNraXAgKGlmIG5vdCB6ZXJvKSAqLworICAgIGlmIChvZmZzZXQpIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAxOworICAgICAgICBzdGF0ZS0+c2tpcCA9IG9mZnNldDsKKyAgICB9CisgICAgcmV0dXJuIHN0YXRlLT5wb3MgKyBvZmZzZXQ7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK3pfb2ZmX3QgWkVYUE9SVCBnenNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgel9vZmZfdCBvZmZzZXQ7CisgICAgaW50IHdoZW5jZTsKK3sKKyAgICB6X29mZjY0X3QgcmV0OworCisgICAgcmV0ID0gZ3pzZWVrNjQoZmlsZSwgKHpfb2ZmNjRfdClvZmZzZXQsIHdoZW5jZSk7CisgICAgcmV0dXJuIHJldCA9PSAoel9vZmZfdClyZXQgPyAoel9vZmZfdClyZXQgOiAtMTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmY2NF90IFpFWFBPUlQgZ3p0ZWxsNjQoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIHJldHVybiBwb3NpdGlvbiAqLworICAgIHJldHVybiBzdGF0ZS0+cG9zICsgKHN0YXRlLT5zZWVrID8gc3RhdGUtPnNraXAgOiAwKTsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworel9vZmZfdCBaRVhQT1JUIGd6dGVsbChmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIHpfb2ZmNjRfdCByZXQ7CisKKyAgICByZXQgPSBnenRlbGw2NChmaWxlKTsKKyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZjY0X3QgWkVYUE9SVCBnem9mZnNldDY0KGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgel9vZmY2NF90IG9mZnNldDsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNvbXB1dGUgYW5kIHJldHVybiBlZmZlY3RpdmUgb2Zmc2V0IGluIGZpbGUgKi8KKyAgICBvZmZzZXQgPSBMU0VFSyhzdGF0ZS0+ZmQsIDAsIFNFRUtfQ1VSKTsKKyAgICBpZiAob2Zmc2V0ID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpICAgICAgICAgICAgIC8qIHJlYWRpbmcgKi8KKyAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5zdHJtLmF2YWlsX2luOyAgICAgLyogZG9uJ3QgY291bnQgYnVmZmVyZWQgaW5wdXQgKi8KKyAgICByZXR1cm4gb2Zmc2V0OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCit6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICB6X29mZjY0X3QgcmV0OworCisgICAgcmV0ID0gZ3pvZmZzZXQ2NChmaWxlKTsKKyAgICByZXR1cm4gcmV0ID09ICh6X29mZl90KXJldCA/ICh6X29mZl90KXJldCA6IC0xOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnemVvZihmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIHJldHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLworICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KKyAgICAgICAgKHN0YXRlLT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+aGF2ZSA9PSAwKSA6IDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2NvbnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IoZmlsZSwgZXJybnVtKQorICAgIGd6RmlsZSBmaWxlOworICAgIGludCAqZXJybnVtOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgYW5kIGNoZWNrIGludGVncml0eSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEICYmIHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIHJldHVybiBlcnJvciBpbmZvcm1hdGlvbiAqLworICAgIGlmIChlcnJudW0gIT0gTlVMTCkKKyAgICAgICAgKmVycm51bSA9IHN0YXRlLT5lcnI7CisgICAgcmV0dXJuIHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZzsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLwordm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlIGFuZCBjaGVjayBpbnRlZ3JpdHkgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgJiYgc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIGNsZWFyIGVycm9yIGFuZCBlbmQtb2YtZmlsZSAqLworICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKQorICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7Cit9CisKKy8qIENyZWF0ZSBhbiBlcnJvciBtZXNzYWdlIGluIGFsbG9jYXRlZCBtZW1vcnkgYW5kIHNldCBzdGF0ZS0+ZXJyIGFuZAorICAgc3RhdGUtPm1zZyBhY2NvcmRpbmdseS4gIEZyZWUgYW55IHByZXZpb3VzIGVycm9yIG1lc3NhZ2UgYWxyZWFkeSB0aGVyZS4gIERvCisgICBub3QgdHJ5IHRvIGZyZWUgb3IgYWxsb2NhdGUgc3BhY2UgaWYgdGhlIGVycm9yIGlzIFpfTUVNX0VSUk9SIChvdXQgb2YKKyAgIG1lbW9yeSkuICBTaW1wbHkgc2F2ZSB0aGUgZXJyb3IgbWVzc2FnZSBhcyBhIHN0YXRpYyBzdHJpbmcuICBJZiB0aGVyZSBpcyBhbgorICAgYWxsb2NhdGlvbiBmYWlsdXJlIGNvbnN0cnVjdGluZyB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlbiBjb252ZXJ0IHRoZSBlcnJvciB0bworICAgb3V0IG9mIG1lbW9yeS4gKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBnel9lcnJvcihzdGF0ZSwgZXJyLCBtc2cpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIGludCBlcnI7CisgICAgY29uc3QgY2hhciAqbXNnOworeworICAgIC8qIGZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVzc2FnZSBhbmQgY2xlYXIgKi8KKyAgICBpZiAoc3RhdGUtPm1zZyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfTUVNX0VSUk9SKQorICAgICAgICAgICAgZnJlZShzdGF0ZS0+bXNnKTsKKyAgICAgICAgc3RhdGUtPm1zZyA9IE5VTEw7CisgICAgfQorCisgICAgLyogc2V0IGVycm9yIGNvZGUsIGFuZCBpZiBubyBtZXNzYWdlLCB0aGVuIGRvbmUgKi8KKyAgICBzdGF0ZS0+ZXJyID0gZXJyOworICAgIGlmIChtc2cgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHNhdmUgYXMgc3RhdGljIHN0cmluZyAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpIHsKKyAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopbXNnOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogY29uc3RydWN0IGVycm9yIG1lc3NhZ2Ugd2l0aCBwYXRoICovCisgICAgaWYgKChzdGF0ZS0+bXNnID0gbWFsbG9jKHN0cmxlbihzdGF0ZS0+cGF0aCkgKyBzdHJsZW4obXNnKSArIDMpKSA9PSBOVUxMKSB7CisgICAgICAgIHN0YXRlLT5lcnIgPSBaX01FTV9FUlJPUjsKKyAgICAgICAgc3RhdGUtPm1zZyA9IChjaGFyICopIm91dCBvZiBtZW1vcnkiOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0cmNweShzdGF0ZS0+bXNnLCBzdGF0ZS0+cGF0aCk7CisgICAgc3RyY2F0KHN0YXRlLT5tc2csICI6ICIpOworICAgIHN0cmNhdChzdGF0ZS0+bXNnLCBtc2cpOworICAgIHJldHVybjsKK30KKworI2lmbmRlZiBJTlRfTUFYCisvKiBwb3J0YWJseSByZXR1cm4gbWF4aW11bSB2YWx1ZSBmb3IgYW4gaW50ICh3aGVuIGxpbWl0cy5oIHByZXN1bWVkIG5vdAorICAgYXZhaWxhYmxlKSAtLSB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gY292ZXIgY2FzZXMgd2hlcmUgMidzIGNvbXBsZW1lbnQgbm90CisgICB1c2VkLCBzaW5jZSBDIHN0YW5kYXJkIHBlcm1pdHMgMSdzIGNvbXBsZW1lbnQgYW5kIHNpZ24tYml0IHJlcHJlc2VudGF0aW9ucywKKyAgIG90aGVyd2lzZSB3ZSBjb3VsZCBqdXN0IHVzZSAoKHVuc2lnbmVkKS0xKSA+PiAxICovCit1bnNpZ25lZCBaTElCX0lOVEVSTkFMIGd6X2ludG1heCgpCit7CisgICAgdW5zaWduZWQgcCwgcTsKKworICAgIHAgPSAxOworICAgIGRvIHsKKyAgICAgICAgcSA9IHA7CisgICAgICAgIHAgPDw9IDE7CisgICAgICAgIHArKzsKKyAgICB9IHdoaWxlIChwID4gcSk7CisgICAgcmV0dXJuIHEgPj4gMTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6cmVhZC5jIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ODIwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKQEAgLTAsMCArMSw2NTMgQEAKKy8qIGd6cmVhZC5jIC0tIHpsaWIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGd6aXAgZmlsZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCBNYXJrIEFkbGVyCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworI2luY2x1ZGUgImd6Z3V0cy5oIgorCisvKiBMb2NhbCBmdW5jdGlvbnMgKi8KK2xvY2FsIGludCBnel9sb2FkIE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkICopKTsKK2xvY2FsIGludCBnel9hdmFpbCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfbmV4dDQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgbG9uZyAqKSk7Citsb2NhbCBpbnQgZ3pfaGVhZCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfZGVjb21wIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9tYWtlIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9za2lwIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOworCisvKiBVc2UgcmVhZCgpIHRvIGxvYWQgYSBidWZmZXIgLS0gcmV0dXJuIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIFJlYWQgZnJvbQorICAgc3RhdGUtPmZkLCBhbmQgdXBkYXRlIHN0YXRlLT5lb2YsIHN0YXRlLT5lcnIsIGFuZCBzdGF0ZS0+bXNnIGFzIGFwcHJvcHJpYXRlLgorICAgVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBsb29wIG9uIHJlYWQoKSwgc2luY2UgcmVhZCgpIGlzIG5vdCBndWFyYW50ZWVkIHRvCisgICByZWFkIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgZGVzY3JpcHRvci4gKi8KK2xvY2FsIGludCBnel9sb2FkKHN0YXRlLCBidWYsIGxlbiwgaGF2ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgdW5zaWduZWQgY2hhciAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKKyAgICB1bnNpZ25lZCAqaGF2ZTsKK3sKKyAgICBpbnQgcmV0OworCisgICAgKmhhdmUgPSAwOworICAgIGRvIHsKKyAgICAgICAgcmV0ID0gcmVhZChzdGF0ZS0+ZmQsIGJ1ZiArICpoYXZlLCBsZW4gLSAqaGF2ZSk7CisgICAgICAgIGlmIChyZXQgPD0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAqaGF2ZSArPSByZXQ7CisgICAgfSB3aGlsZSAoKmhhdmUgPCBsZW4pOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJldCA9PSAwKQorICAgICAgICBzdGF0ZS0+ZW9mID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworLyogTG9hZCB1cCBpbnB1dCBidWZmZXIgYW5kIHNldCBlb2YgZmxhZyBpZiBsYXN0IGRhdGEgbG9hZGVkIC0tIHJldHVybiAtMSBvbgorICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAorICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKKyAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgorICAgZ3pfYXZhaWwoKSBhc3N1bWVzIHRoYXQgc3RybS0+YXZhaWxfaW4gPT0gMC4gKi8KK2xvY2FsIGludCBnel9hdmFpbChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc3RhdGUtPmVvZiA9PSAwKSB7CisgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBzdGF0ZS0+aW4sIHN0YXRlLT5zaXplLAorICAgICAgICAgICAgICAgICh1bnNpZ25lZCAqKSYoc3RybS0+YXZhaWxfaW4pKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEdldCBuZXh0IGJ5dGUgZnJvbSBpbnB1dCwgb3IgLTEgaWYgZW5kIG9yIGVycm9yLiAqLworI2RlZmluZSBORVhUKCkgKChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkgPyAtMSA6IFwKKyAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4gPT0gMCA/IC0xIDogXAorICAgICAgICAgICAgICAgICAoc3RybS0+YXZhaWxfaW4tLSwgKihzdHJtLT5uZXh0X2luKSsrKSkpCisKKy8qIEdldCBhIGZvdXItYnl0ZSBsaXR0bGUtZW5kaWFuIGludGVnZXIgYW5kIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIHRoZSB2YWx1ZQorICAgaW4gKnJldC4gIE90aGVyd2lzZSAtMSBpcyByZXR1cm5lZCBhbmQgKnJldCBpcyBub3QgbW9kaWZpZWQuICovCitsb2NhbCBpbnQgZ3pfbmV4dDQoc3RhdGUsIHJldCkKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgdW5zaWduZWQgbG9uZyAqcmV0OworeworICAgIGludCBjaDsKKyAgICB1bnNpZ25lZCBsb25nIHZhbDsKKyAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgdmFsID0gTkVYVCgpOworICAgIHZhbCArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7CisgICAgdmFsICs9ICh1bnNpZ25lZCBsb25nKU5FWFQoKSA8PCAxNjsKKyAgICBjaCA9IE5FWFQoKTsKKyAgICBpZiAoY2ggPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpY2ggPDwgMjQ7CisgICAgKnJldCA9IHZhbDsKKyAgICByZXR1cm4gMDsKK30KKworLyogTG9vayBmb3IgZ3ppcCBoZWFkZXIsIHNldCB1cCBmb3IgaW5mbGF0ZSBvciBjb3B5LiAgc3RhdGUtPmhhdmUgbXVzdCBiZSB6ZXJvLgorICAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBpbiwgYWxsb2NhdGUgcmVxdWlyZWQgbWVtb3J5LiAgc3RhdGUtPmhvdyB3aWxsIGJlCisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGVyZSBpcyBubyBtb3JlIGlucHV0IGRhdGEgYXZhaWxhYmxlLCB3aWxsIGJlIHNldCB0byBDT1BZCisgICBpZiB0aGVyZSBpcyBubyBnemlwIGhlYWRlciBhbmQgZGlyZWN0IGNvcHlpbmcgd2lsbCBiZSBwZXJmb3JtZWQsIG9yIGl0IHdpbGwKKyAgIGJlIHNldCB0byBHWklQIGZvciBkZWNvbXByZXNzaW9uLCBhbmQgdGhlIGd6aXAgaGVhZGVyIHdpbGwgYmUgc2tpcHBlZCBzbworICAgdGhhdCB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgZGF0YSBpcyB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtLiAgSWYgZGlyZWN0CisgICBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0IGRhdGEgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIHdpbGwgYmUgY29waWVkIHRvCisgICB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQgY2FzZSwgYWxsIGZ1cnRoZXIgZmlsZSByZWFkcyB3aWxsIGJlIGRpcmVjdGx5IHRvCisgICBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IgYSB1c2VyIGJ1ZmZlci4gIElmIGRlY29tcHJlc3NpbmcsIHRoZSBpbmZsYXRlCisgICBzdGF0ZSBhbmQgdGhlIGNoZWNrIHZhbHVlIHdpbGwgYmUgaW5pdGlhbGl6ZWQuICBnel9oZWFkKCkgd2lsbCByZXR1cm4gMCBvbgorICAgc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgcmVhZCBlcnJvcnMgb3IgZ3ppcCBoZWFkZXIKKyAgIGVycm9ycy4gICovCitsb2NhbCBpbnQgZ3pfaGVhZChzdGF0ZSkKKyAgICBnel9zdGF0ZXAgc3RhdGU7Cit7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKyAgICBpbnQgZmxhZ3M7CisgICAgdW5zaWduZWQgbGVuOworCisgICAgLyogYWxsb2NhdGUgcmVhZCBidWZmZXJzIGFuZCBpbmZsYXRlIG1lbW9yeSAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSA9PSAwKSB7CisgICAgICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KKyAgICAgICAgc3RhdGUtPmluID0gbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9IG1hbGxvYyhzdGF0ZS0+d2FudCA8PCAxKTsKKyAgICAgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMIHx8IHN0YXRlLT5vdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcmVlKHN0YXRlLT5vdXQpOworICAgICAgICAgICAgaWYgKHN0YXRlLT5pbiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+c2l6ZSA9IHN0YXRlLT53YW50OworCisgICAgICAgIC8qIGFsbG9jYXRlIGluZmxhdGUgbWVtb3J5ICovCisgICAgICAgIHN0YXRlLT5zdHJtLnphbGxvYyA9IFpfTlVMTDsKKyAgICAgICAgc3RhdGUtPnN0cm0uemZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0YXRlLT5zdHJtLm9wYXF1ZSA9IFpfTlVMTDsKKyAgICAgICAgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPSAwOworICAgICAgICBzdGF0ZS0+c3RybS5uZXh0X2luID0gWl9OVUxMOworICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAtMTUpICE9IFpfT0spIHsgICAgLyogcmF3IGluZmxhdGUgKi8KKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBzdGF0ZS0+c2l6ZSA9IDA7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBnZXQgc29tZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgICAgICBpZiAoZ3pfYXZhaWwoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGxvb2sgZm9yIHRoZSBnemlwIG1hZ2ljIGhlYWRlciBieXRlcyAzMSBhbmQgMTM5ICovCisgICAgaWYgKHN0cm0tPm5leHRfaW5bMF0gPT0gMzEpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKKyAgICAgICAgc3RybS0+bmV4dF9pbisrOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCAmJiBnel9hdmFpbChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBzdHJtLT5uZXh0X2luWzBdID09IDEzOSkgeworICAgICAgICAgICAgLyogd2UgaGF2ZSBhIGd6aXAgaGVhZGVyLCB3b28gaG9vISAqLworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4tLTsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfaW4rKzsKKworICAgICAgICAgICAgLyogc2tpcCByZXN0IG9mIGhlYWRlciAqLworICAgICAgICAgICAgaWYgKE5FWFQoKSAhPSA4KSB7ICAgICAgLyogY29tcHJlc3Npb24gbWV0aG9kICovCisgICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZmxhZ3MgPSBORVhUKCk7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweGUwKSB7ICAgICAvKiByZXNlcnZlZCBmbGFnIGJpdHMgKi8KKyAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogbW9kaWZpY2F0aW9uIHRpbWUgKi8KKyAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIGV4dHJhIGZsYWdzICovCisgICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgICAgICAgICBpZiAoZmxhZ3MgJiA0KSB7ICAgICAgICAvKiBleHRyYSBmaWVsZCAqLworICAgICAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZClORVhUKCk7CisgICAgICAgICAgICAgICAgbGVuICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKKyAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pCisgICAgICAgICAgICAgICAgICAgIGlmIChORVhUKCkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiA4KSAgICAgICAgICAvKiBmaWxlIG5hbWUgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgaWYgKGZsYWdzICYgMTYpICAgICAgICAgLyogY29tbWVudCAqLworICAgICAgICAgICAgICAgIHdoaWxlIChORVhUKCkgPiAwKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiAyKSB7ICAgICAgICAvKiBoZWFkZXIgY3JjICovCisgICAgICAgICAgICAgICAgTkVYVCgpOworICAgICAgICAgICAgICAgIE5FWFQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGFuIHVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUgaXMgbm90IGNoZWNrZWQgZm9yIGhlcmUgLS0gaXQgd2lsbCBiZQorICAgICAgICAgICAgICAgbm90aWNlZCBvbiB0aGUgZmlyc3QgcmVxdWVzdCBmb3IgdW5jb21wcmVzc2VkIGRhdGEgKi8KKworICAgICAgICAgICAgLyogc2V0IHVwIGZvciBkZWNvbXByZXNzaW9uICovCisgICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKDBMLCBaX05VTEwsIDApOworICAgICAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7CisgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogbm90IGEgZ3ppcCBmaWxlIC0tIHNhdmUgZmlyc3QgYnl0ZSAoMzEpIGFuZCBmYWxsIHRvIHJhdyBpL28gKi8KKyAgICAgICAgICAgIHN0YXRlLT5vdXRbMF0gPSAzMTsKKyAgICAgICAgICAgIHN0YXRlLT5oYXZlID0gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIGRvaW5nIHJhdyBpL28sIHNhdmUgc3RhcnQgb2YgcmF3IGRhdGEgZm9yIHNlZWtpbmcsIGNvcHkgYW55IGxlZnRvdmVyCisgICAgICAgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0IHRoZSBvdXRwdXQgYnVmZmVyIGlzIGxhcmdlciB0aGFuCisgICAgICAgdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzIHNwYWNlIGZvciBnenVuZ2V0YygpICovCisgICAgc3RhdGUtPnJhdyA9IHN0YXRlLT5wb3M7CisgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OworICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeworICAgICAgICBtZW1jcHkoc3RhdGUtPm5leHQgKyBzdGF0ZS0+aGF2ZSwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBzdGF0ZS0+aGF2ZSArPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOworICAgIH0KKyAgICBzdGF0ZS0+aG93ID0gQ09QWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMTsKKyAgICByZXR1cm4gMDsKK30KKworLyogRGVjb21wcmVzcyBmcm9tIGlucHV0IHRvIHRoZSBwcm92aWRlZCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGluIHRoZSBzdGF0ZS4KKyAgIElmIHRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyByZWFjaGVkLCB0aGVuIHZlcmlmeSB0aGUgZ3ppcCB0cmFpbGVyCisgICBjaGVjayB2YWx1ZSBhbmQgbGVuZ3RoIChtb2R1bG8gMl4zMikuICBzdGF0ZS0+aGF2ZSBhbmQgc3RhdGUtPm5leHQgYXJlIHNldAorICAgdG8gcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkIGRhdGEsIGFuZCB0aGUgY3JjIGlzIHVwZGF0ZWQuICBJZiB0aGUKKyAgIHRyYWlsZXIgaXMgdmVyaWZpZWQsIHN0YXRlLT5ob3cgaXMgcmVzZXQgdG8gTE9PSyB0byBsb29rIGZvciB0aGUgbmV4dCBnemlwCisgICBzdHJlYW0gb3IgcmF3IGRhdGEsIG9uY2Ugc3RhdGUtPmhhdmUgaXMgZGVwbGV0ZWQuICBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEKKyAgIG9uIGZhaWx1cmUuICBGYWlsdXJlcyBtYXkgaW5jbHVkZSBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBvciBhIGZhaWxlZCBnemlwCisgICB0cmFpbGVyIHZlcmlmaWNhdGlvbi4gKi8KK2xvY2FsIGludCBnel9kZWNvbXAoc3RhdGUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworeworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgaGFkOworICAgIHVuc2lnbmVkIGxvbmcgY3JjLCBsZW47CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGZpbGwgb3V0cHV0IGJ1ZmZlciB1cCB0byBlbmQgb2YgZGVmbGF0ZSBzdHJlYW0gKi8KKyAgICBoYWQgPSBzdHJtLT5hdmFpbF9vdXQ7CisgICAgZG8geworICAgICAgICAvKiBnZXQgbW9yZSBpbnB1dCBmb3IgaW5mbGF0ZSgpICovCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBkZWNvbXByZXNzIGFuZCBoYW5kbGUgZXJyb3JzICovCisgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRVJST1IgfHwgcmV0ID09IFpfTkVFRF9ESUNUKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9TVFJFQU1fRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPT0gWl9EQVRBX0VSUk9SKSB7ICAgICAgICAgICAgICAvKiBkZWZsYXRlIHN0cmVhbSBpbnZhbGlkICovCisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOworCisgICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgYW5kIGNyYyBjaGVjayB2YWx1ZSAqLworICAgIHN0YXRlLT5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OworICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+aGF2ZTsKKyAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdGF0ZS0+bmV4dCwgc3RhdGUtPmhhdmUpOworCisgICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGlmIGF0IGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLworICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKSB7CisgICAgICAgIGlmIChnel9uZXh0NChzdGF0ZSwgJmNyYykgPT0gLTEgfHwgZ3pfbmV4dDQoc3RhdGUsICZsZW4pID09IC0xKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChjcmMgIT0gc3RybS0+YWRsZXIpIHsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChsZW4gIT0gKHN0cm0tPnRvdGFsX291dCAmIDB4ZmZmZmZmZmZMKSkgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBsZW5ndGggY2hlY2siKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAvKiByZWFkeSBmb3IgbmV4dCBzdHJlYW0sIG9uY2UgaGF2ZSBpcyAwIChsZWF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0IHVuY2hhbmdlZCB0byByZW1lbWJlciBob3cpICovCisgICAgfQorCisgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIE1ha2UgZGF0YSBhbmQgcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyB0aGF0IHN0YXRlLT5oYXZlID09IDAuCisgICBEYXRhIGlzIGVpdGhlciBjb3BpZWQgZnJvbSB0aGUgaW5wdXQgZmlsZSBvciBkZWNvbXByZXNzZWQgZnJvbSB0aGUgaW5wdXQKKyAgIGZpbGUgZGVwZW5kaW5nIG9uIHN0YXRlLT5ob3cuICBJZiBzdGF0ZS0+aG93IGlzIExPT0ssIHRoZW4gYSBnemlwIGhlYWRlciBpcworICAgbG9va2VkIGZvciAoYW5kIHNraXBwZWQgaWYgZm91bmQpIHRvIGRldGVybWluZSB3aXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLgorICAgUmV0dXJucyAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBnel9tYWtlKCkgd2lsbCBsZWF2ZSBzdGF0ZS0+aGF2ZSBhcyBDT1BZCisgICBvciBHWklQIHVubGVzcyB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlIGhhcyBiZWVuIHJlYWNoZWQgYW5kIGFsbCBkYXRhIGhhcworICAgYmVlbiBwcm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X21ha2Uoc3RhdGUpCisgICAgZ3pfc3RhdGVwIHN0YXRlOworeworICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICBpZiAoc3RhdGUtPmhvdyA9PSBMT09LKSB7ICAgICAgICAgICAvKiBsb29rIGZvciBnemlwIGhlYWRlciAqLworICAgICAgICBpZiAoZ3pfaGVhZChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgICAgICAgICAgICAgICAgLyogZ290IHNvbWUgZGF0YSBmcm9tIGd6X2hlYWQoKSAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAgICAgIC8qIHN0cmFpZ2h0IGNvcHkgKi8KKyAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPmhhdmUpKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OworICAgIH0KKyAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IEdaSVApIHsgICAgICAvKiBkZWNvbXByZXNzICovCisgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBTa2lwIGxlbiB1bmNvbXByZXNzZWQgYnl0ZXMgb2Ygb3V0cHV0LiAgUmV0dXJuIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCitsb2NhbCBpbnQgZ3pfc2tpcChzdGF0ZSwgbGVuKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X29mZjY0X3QgbGVuOworeworICAgIHVuc2lnbmVkIG47CisKKyAgICAvKiBza2lwIG92ZXIgbGVuIGJ5dGVzIG9yIHJlYWNoIGVuZC1vZi1maWxlLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgKi8KKyAgICB3aGlsZSAobGVuKQorICAgICAgICAvKiBza2lwIG92ZXIgd2hhdGV2ZXIgaXMgaW4gb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBpZiAoc3RhdGUtPmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBsZW4gPworICAgICAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+aGF2ZTsKKyAgICAgICAgICAgIHN0YXRlLT5oYXZlIC09IG47CisgICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgIH0KKworICAgICAgICAvKiBvdXRwdXQgYnVmZmVyIGVtcHR5IC0tIHJldHVybiBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCAqLworICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0YXRlLT5zdHJtLmF2YWlsX2luID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCisgICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cmVhZChmaWxlLCBidWYsIGxlbikKKyAgICBnekZpbGUgZmlsZTsKKyAgICB2b2lkcCBidWY7CisgICAgdW5zaWduZWQgbGVuOworeworICAgIHVuc2lnbmVkIGdvdCwgbjsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07CisKKyAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCisgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBpZiBsZW4gaXMgemVybywgYXZvaWQgdW5uZWNlc3Nhcnkgb3BlcmF0aW9ucyAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBnZXQgbGVuIGJ5dGVzIHRvIGJ1Ziwgb3IgbGVzcyB0aGFuIGxlbiBpZiBhdCB0aGUgZW5kICovCisgICAgZ290ID0gMDsKKyAgICBkbyB7CisgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgeworICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPmhhdmU7CisgICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7CisgICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIG91dHB1dCBidWZmZXIgZW1wdHkgLS0gcmV0dXJuIGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0ICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5lb2YgJiYgc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIG5lZWQgb3V0cHV0IGRhdGEgLS0gZm9yIHNtYWxsIGxlbiBvciBuZXcgc3RyZWFtIGxvYWQgdXAgb3VyIG91dHB1dAorICAgICAgICAgICBidWZmZXIgKi8KKyAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmhvdyA9PSBMT09LIHx8IGxlbiA8IChzdGF0ZS0+c2l6ZSA8PCAxKSkgeworICAgICAgICAgICAgLyogZ2V0IG1vcmUgb3V0cHV0LCBsb29raW5nIGZvciBoZWFkZXIgaWYgcmVxdWlyZWQgKi8KKyAgICAgICAgICAgIGlmIChnel9tYWtlKHN0YXRlKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gbWVtY3B5KCkgYWJvdmUgKi8KKyAgICAgICAgICAgIC8qIHRoZSBjb3B5IGFib3ZlIGFzc3VyZXMgdGhhdCB3ZSB3aWxsIGxlYXZlIHdpdGggc3BhY2UgaW4gdGhlCisgICAgICAgICAgICAgICBvdXRwdXQgYnVmZmVyLCBhbGxvd2luZyBhdCBsZWFzdCBvbmUgZ3p1bmdldGMoKSB0byBzdWNjZWVkICovCisgICAgICAgIH0KKworICAgICAgICAvKiBsYXJnZSBsZW4gLS0gcmVhZCBkaXJlY3RseSBpbnRvIHVzZXIgYnVmZmVyICovCisgICAgICAgIGVsc2UgaWYgKHN0YXRlLT5ob3cgPT0gQ09QWSkgeyAgICAgIC8qIHJlYWQgZGlyZWN0bHkgKi8KKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCBidWYsIGxlbiwgJm4pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGxhcmdlIGxlbiAtLSBkZWNvbXByZXNzIGRpcmVjdGx5IGludG8gdXNlciBidWZmZXIgKi8KKyAgICAgICAgZWxzZSB7ICAvKiBzdGF0ZS0+aG93ID09IEdaSVAgKi8KKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gYnVmOworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlOworICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgLyogdXBkYXRlIHByb2dyZXNzICovCisgICAgICAgIGxlbiAtPSBuOworICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47CisgICAgICAgIGdvdCArPSBuOworICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgfSB3aGlsZSAobGVuKTsKKworICAgIC8qIHJldHVybiBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpbnRvIHVzZXIgYnVmZmVyICh3aWxsIGZpdCBpbiBpbnQpICovCisgICAgcmV0dXJuIChpbnQpZ290OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBpbnQgcmV0OworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzFdOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogdHJ5IG91dHB1dCBidWZmZXIgKG5vIG5lZWQgdG8gY2hlY2sgZm9yIHNraXAgcmVxdWVzdCkgKi8KKyAgICBpZiAoc3RhdGUtPmhhdmUpIHsKKyAgICAgICAgc3RhdGUtPmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPnBvcysrOworICAgICAgICByZXR1cm4gKihzdGF0ZS0+bmV4dCkrKzsKKyAgICB9CisKKyAgICAvKiBub3RoaW5nIHRoZXJlIC0tIHRyeSBnenJlYWQoKSAqLworICAgIHJldCA9IGd6cmVhZChmaWxlLCBidWYsIDEpOworICAgIHJldHVybiByZXQgPCAxID8gLTEgOiBidWZbMF07Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6dW5nZXRjKGMsIGZpbGUpCisgICAgaW50IGM7CisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBwcm9jZXNzIGEgc2tpcCByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3NraXAoc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBjYW4ndCBwdXNoIEVPRiAqLworICAgIGlmIChjIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogaWYgb3V0cHV0IGJ1ZmZlciBlbXB0eSwgcHV0IGJ5dGUgYXQgZW5kIChhbGxvd3MgbW9yZSBwdXNoaW5nKSAqLworICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7CisgICAgICAgIHN0YXRlLT5oYXZlID0gMTsKKyAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPm5leHRbMF0gPSBjOworICAgICAgICBzdGF0ZS0+cG9zLS07CisgICAgICAgIHJldHVybiBjOworICAgIH0KKworICAgIC8qIGlmIG5vIHJvb20sIGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLworICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBzbGlkZSBvdXRwdXQgZGF0YSBpZiBuZWVkZWQgYW5kIGluc2VydCBieXRlIGJlZm9yZSBleGlzdGluZyBkYXRhICovCisgICAgaWYgKHN0YXRlLT5uZXh0ID09IHN0YXRlLT5vdXQpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjID0gc3RhdGUtPm91dCArIHN0YXRlLT5oYXZlOworICAgICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKTsKKyAgICAgICAgd2hpbGUgKHNyYyA+IHN0YXRlLT5vdXQpCisgICAgICAgICAgICAqLS1kZXN0ID0gKi0tc3JjOworICAgICAgICBzdGF0ZS0+bmV4dCA9IGRlc3Q7CisgICAgfQorICAgIHN0YXRlLT5oYXZlKys7CisgICAgc3RhdGUtPm5leHQtLTsKKyAgICBzdGF0ZS0+bmV4dFswXSA9IGM7CisgICAgc3RhdGUtPnBvcy0tOworICAgIHJldHVybiBjOworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitjaGFyICogWkVYUE9SVCBnemdldHMoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgY2hhciAqYnVmOworICAgIGludCBsZW47Cit7CisgICAgdW5zaWduZWQgbGVmdCwgbjsKKyAgICBjaGFyICpzdHI7CisgICAgdW5zaWduZWQgY2hhciAqZW9sOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGNoZWNrIHBhcmFtZXRlcnMgYW5kIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGxlbiA8IDEpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel9za2lwKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiBjb3B5IG91dHB1dCBieXRlcyB1cCB0byBuZXcgbGluZSBvciBsZW4gLSAxLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QgLS0KKyAgICAgICBhcHBlbmQgYSB0ZXJtaW5hdGluZyB6ZXJvIHRvIHRoZSBzdHJpbmcgKHdlIGRvbid0IGNoZWNrIGZvciBhIHplcm8gaW4KKyAgICAgICB0aGUgY29udGVudHMsIGxldCB0aGUgdXNlciB3b3JyeSBhYm91dCB0aGF0KSAqLworICAgIHN0ciA9IGJ1ZjsKKyAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CisgICAgaWYgKGxlZnQpIGRvIHsKKyAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCisgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7ICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgICAgIGlmIChidWYgPT0gc3RyKSAgICAgICAgIC8qIGdvdCBidXBrdXMgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZ290IHNvbWV0aGluZyAtLSByZXR1cm4gaXQgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qIGxvb2sgZm9yIGVuZC1vZi1saW5lIGluIGN1cnJlbnQgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBuID0gc3RhdGUtPmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT5oYXZlOworICAgICAgICBlb2wgPSBtZW1jaHIoc3RhdGUtPm5leHQsICdcbicsIG4pOworICAgICAgICBpZiAoZW9sICE9IE5VTEwpCisgICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+bmV4dCkgKyAxOworCisgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLworICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7CisgICAgICAgIHN0YXRlLT5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47CisgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbGVmdCAtPSBuOworICAgICAgICBidWYgKz0gbjsKKyAgICB9IHdoaWxlIChsZWZ0ICYmIGVvbCA9PSBOVUxMKTsKKworICAgIC8qIGZvdW5kIGVuZC1vZi1saW5lIG9yIG91dCBvZiBzcGFjZSAtLSB0ZXJtaW5hdGUgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi8KKyAgICBidWZbMF0gPSAwOworICAgIHJldHVybiBzdHI7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6ZGlyZWN0KGZpbGUpCisgICAgZ3pGaWxlIGZpbGU7Cit7CisgICAgZ3pfc3RhdGVwIHN0YXRlOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcworICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCisgICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+aGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9oZWFkKHN0YXRlKTsKKworICAgIC8qIHJldHVybiAxIGlmIHJlYWRpbmcgZGlyZWN0LCAwIGlmIGRlY29tcHJlc3NpbmcgYSBnemlwIHN0cmVhbSAqLworICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OworfQorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVCBnemNsb3NlX3IoZmlsZSkKKyAgICBnekZpbGUgZmlsZTsKK3sKKyAgICBpbnQgcmV0OworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogZnJlZSBtZW1vcnkgYW5kIGNsb3NlIGZpbGUgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUpIHsKKyAgICAgICAgaW5mbGF0ZUVuZCgmKHN0YXRlLT5zdHJtKSk7CisgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICB9CisgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOworICAgIGZyZWUoc3RhdGUtPnBhdGgpOworICAgIHJldCA9IGNsb3NlKHN0YXRlLT5mZCk7CisgICAgZnJlZShzdGF0ZSk7CisgICAgcmV0dXJuIHJldCA/IFpfRVJSTk8gOiBaX09LOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6d3JpdGUuYyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkZWZjNgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvemxpYi9nendyaXRlLmMKQEAgLTAsMCArMSw1MzEgQEAKKy8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAorICovCisKKyNpbmNsdWRlICJnemd1dHMuaCIKKworLyogTG9jYWwgZnVuY3Rpb25zICovCitsb2NhbCBpbnQgZ3pfaW5pdCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfY29tcCBPRigoZ3pfc3RhdGVwLCBpbnQpKTsKK2xvY2FsIGludCBnel96ZXJvIE9GKChnel9zdGF0ZXAsIHpfb2ZmNjRfdCkpOworCisvKiBJbml0aWFsaXplIHN0YXRlIGZvciB3cml0aW5nIGEgZ3ppcCBmaWxlLiAgTWFyayBpbml0aWFsaXphdGlvbiBieSBzZXR0aW5nCisgICBzdGF0ZS0+c2l6ZSB0byBub24temVyby4gIFJldHVybiAtMSBvbiBmYWlsdXJlIG9yIDAgb24gc3VjY2Vzcy4gKi8KK2xvY2FsIGludCBnel9pbml0KHN0YXRlKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKK3sKKyAgICBpbnQgcmV0OworICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KKyAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOworICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQpOworICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgIGlmIChzdGF0ZS0+aW4gIT0gTlVMTCkKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgZGVmbGF0ZSBtZW1vcnksIHNldCB1cCBmb3IgZ3ppcCBjb21wcmVzc2lvbiAqLworICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICBzdHJtLT56ZnJlZSA9IFpfTlVMTDsKKyAgICBzdHJtLT5vcGFxdWUgPSBaX05VTEw7CisgICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgMTUgKyAxNiwgOCwgc3RhdGUtPnN0cmF0ZWd5KTsKKyAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgZnJlZShzdGF0ZS0+aW4pOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBtYXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCisgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2FudDsKKworICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCisgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIENvbXByZXNzIHdoYXRldmVyIGlzIGF0IGF2YWlsX2luIGFuZCBuZXh0X2luIGFuZCB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUuCisgICBSZXR1cm4gLTEgaWYgdGhlcmUgaXMgYW4gZXJyb3Igd3JpdGluZyB0byB0aGUgb3V0cHV0IGZpbGUsIG90aGVyd2lzZSAwLgorICAgZmx1c2ggaXMgYXNzdW1lZCB0byBiZSBhIHZhbGlkIGRlZmxhdGUoKSBmbHVzaCB2YWx1ZS4gIElmIGZsdXNoIGlzIFpfRklOSVNILAorICAgdGhlbiB0aGUgZGVmbGF0ZSgpIHN0YXRlIGlzIHJlc2V0IHRvIHN0YXJ0IGEgbmV3IGd6aXAgc3RyZWFtLiAqLworbG9jYWwgaW50IGd6X2NvbXAoc3RhdGUsIGZsdXNoKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICBpbnQgZmx1c2g7Cit7CisgICAgaW50IHJldCwgZ290OworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLworICAgIHJldCA9IFpfT0s7CisgICAgZG8geworICAgICAgICAvKiB3cml0ZSBvdXQgY3VycmVudCBidWZmZXIgY29udGVudHMgaWYgZnVsbCwgb3IgaWYgZmx1c2hpbmcsIGJ1dCBpZgorICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdyaXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCisgICAgICAgICAgICAoZmx1c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5uZXh0KTsKKyAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+bmV4dCwgaGF2ZSkpIDwgMCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClnb3QgIT0gaGF2ZSkpIHsKKyAgICAgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9vdXQgPT0gMCkgeworICAgICAgICAgICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplOworICAgICAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBjb21wcmVzcyAqLworICAgICAgICBoYXZlID0gc3RybS0+YXZhaWxfb3V0OworICAgICAgICByZXQgPSBkZWZsYXRlKHN0cm0sIGZsdXNoKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FUlJPUikgeworICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogZGVmbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGhhdmUgLT0gc3RybS0+YXZhaWxfb3V0OworICAgIH0gd2hpbGUgKGhhdmUpOworCisgICAgLyogaWYgdGhhdCBjb21wbGV0ZWQgYSBkZWZsYXRlIHN0cmVhbSwgYWxsb3cgYW5vdGhlciB0byBzdGFydCAqLworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkKKyAgICAgICAgZGVmbGF0ZVJlc2V0KHN0cm0pOworCisgICAgLyogYWxsIGRvbmUsIG5vIGVycm9ycyAqLworICAgIHJldHVybiAwOworfQorCisvKiBDb21wcmVzcyBsZW4gemVyb3MgdG8gb3V0cHV0LiAgUmV0dXJuIC0xIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MuICovCitsb2NhbCBpbnQgZ3pfemVybyhzdGF0ZSwgbGVuKQorICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X29mZjY0X3QgbGVuOworeworICAgIGludCBmaXJzdDsKKyAgICB1bnNpZ25lZCBuOworICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjb25zdW1lIHdoYXRldmVyJ3MgbGVmdCBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBjb21wcmVzcyBsZW4gemVyb3MgKGxlbiBndWFyYW50ZWVkID4gMCkgKi8KKyAgICBmaXJzdCA9IDE7CisgICAgd2hpbGUgKGxlbikgeworICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT5zaXplKSB8fCAoel9vZmY2NF90KXN0YXRlLT5zaXplID4gbGVuID8KKyAgICAgICAgICAgICh1bnNpZ25lZClsZW4gOiBzdGF0ZS0+c2l6ZTsKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhdGUtPmluLCAwLCBuKTsKKyAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IG47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBsZW4gLT0gbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGZpbGU7CisgICAgdm9pZHBjIGJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgdW5zaWduZWQgcHV0ID0gbGVuOworICAgIHVuc2lnbmVkIG47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOworICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgd3JpdGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCisgICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1dSSVRFIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBzaW5jZSBhbiBpbnQgaXMgcmV0dXJuZWQsIG1ha2Ugc3VyZSBsZW4gZml0cyBpbiBvbmUsIG90aGVyd2lzZSByZXR1cm4KKyAgICAgICB3aXRoIGFuIGVycm9yICh0aGlzIGF2b2lkcyB0aGUgZmxhdyBpbiB0aGUgaW50ZXJmYWNlKSAqLworICAgIGlmICgoaW50KWxlbiA8IDApIHsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGlmIGxlbiBpcyB6ZXJvLCBhdm9pZCB1bm5lY2Vzc2FyeSBvcGVyYXRpb25zICovCisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRocm91Z2ggKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGZvciBzbWFsbCBsZW4sIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBvdGhlcndpc2UgY29tcHJlc3MgZGlyZWN0bHkgKi8KKyAgICBpZiAobGVuIDwgc3RhdGUtPnNpemUpIHsKKyAgICAgICAgLyogY29weSB0byBpbnB1dCBidWZmZXIsIGNvbXByZXNzIHdoZW4gZnVsbCAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkKKyAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOworICAgICAgICAgICAgbiA9IHN0YXRlLT5zaXplIC0gc3RybS0+YXZhaWxfaW47CisgICAgICAgICAgICBpZiAobiA+IGxlbikKKyAgICAgICAgICAgICAgICBuID0gbGVuOworICAgICAgICAgICAgbWVtY3B5KHN0cm0tPm5leHRfaW4gKyBzdHJtLT5hdmFpbF9pbiwgYnVmLCBuKTsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgICAgICBidWYgPSAoY2hhciAqKWJ1ZiArIG47CisgICAgICAgICAgICBsZW4gLT0gbjsKKyAgICAgICAgICAgIGlmIChsZW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gd2hpbGUgKGxlbik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBjb25zdW1lIHdoYXRldmVyJ3MgbGVmdCBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIC8qIGRpcmVjdGx5IGNvbXByZXNzIHVzZXIgYnVmZmVyIHRvIGZpbGUgKi8KKyAgICAgICAgc3RybS0+YXZhaWxfaW4gPSBsZW47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZHApYnVmOworICAgICAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogaW5wdXQgd2FzIGFsbCBidWZmZXJlZCBvciBjb21wcmVzc2VkIChwdXQgd2lsbCBmaXQgaW4gaW50KSAqLworICAgIHJldHVybiAoaW50KXB1dDsKK30KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlQgZ3pwdXRjKGZpbGUsIGMpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50IGM7Cit7CisgICAgdW5zaWduZWQgY2hhciBidWZbMV07CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAorICAgICAgIGluaXRpYWxpemVkKSAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IHN0YXRlLT5zaXplKSB7CisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKKyAgICAgICAgc3RybS0+bmV4dF9pbltzdHJtLT5hdmFpbF9pbisrXSA9IGM7CisgICAgICAgIHN0YXRlLT5wb3MrKzsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorCisgICAgLyogbm8gcm9vbSBpbiBidWZmZXIgb3Igbm90IGluaXRpYWxpemVkLCB1c2UgZ3pfd3JpdGUoKSAqLworICAgIGJ1ZlswXSA9IGM7CisgICAgaWYgKGd6d3JpdGUoZmlsZSwgYnVmLCAxKSAhPSAxKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIGM7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzdHIpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgY29uc3QgY2hhciAqc3RyOworeworICAgIGludCByZXQ7CisgICAgdW5zaWduZWQgbGVuOworCisgICAgLyogd3JpdGUgc3RyaW5nICovCisgICAgbGVuID0gKHVuc2lnbmVkKXN0cmxlbihzdHIpOworICAgIHJldCA9IGd6d3JpdGUoZmlsZSwgc3RyLCBsZW4pOworICAgIHJldHVybiByZXQgPT0gMCAmJiBsZW4gIT0gMCA/IC0xIDogcmV0OworfQorCisjaWZkZWYgU1REQworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiAtLSBzZWUgemxpYi5oIC0tICovCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgaW50IHNpemUsIGxlbjsKKyAgICBnel9zdGF0ZXAgc3RhdGU7CisgICAgel9zdHJlYW1wIHN0cm07CisgICAgdmFfbGlzdCB2YTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIHNvbWUgYnVmZmVyIHNwYWNlICovCisgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBjb25zdW1lIHdoYXRldmVyJ3MgbGVmdCBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgaWYgKHN0cm0tPmF2YWlsX2luICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIGRvIHRoZSBwcmludGYoKSBpbnRvIHRoZSBpbnB1dCBidWZmZXIsIHB1dCBsZW5ndGggaW4gbGVuICovCisgICAgc2l6ZSA9IChpbnQpKHN0YXRlLT5zaXplKTsKKyAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyNpZmRlZiBOT192c25wcmludGYKKyMgIGlmZGVmIEhBU192c3ByaW50Zl92b2lkCisgICAgKHZvaWQpdnNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIHZhKTsKKyAgICB2YV9lbmQodmEpOworICAgIGZvciAobGVuID0gMDsgbGVuIDwgc2l6ZTsgbGVuKyspCisgICAgICAgIGlmIChzdGF0ZS0+aW5bbGVuXSA9PSAwKSBicmVhazsKKyMgIGVsc2UKKyAgICBsZW4gPSB2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisjICBlbmRpZgorI2Vsc2UKKyMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAorICAgICh2b2lkKXZzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisgICAgbGVuID0gc3RybGVuKHN0YXRlLT5pbik7CisjICBlbHNlCisgICAgbGVuID0gdnNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisjICBlbmRpZgorI2VuZGlmCisKKyAgICAvKiBjaGVjayB0aGF0IHByaW50ZigpIHJlc3VsdHMgZml0IGluIGJ1ZmZlciAqLworICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplIHx8IHN0YXRlLT5pbltzaXplIC0gMV0gIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCisgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOworICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgcmV0dXJuIGxlbjsKK30KKworI2Vsc2UgLyogIVNUREMgKi8KKworLyogLS0gc2VlIHpsaWIuaCAtLSAqLworaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZmlsZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsIGE5LCBhMTAsCisgICAgICAgICAgICAgICAgICAgICAgIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCkKKyAgICBnekZpbGUgZmlsZTsKKyAgICBjb25zdCBjaGFyICpmb3JtYXQ7CisgICAgaW50IGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKKyAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwOworeworICAgIGludCBzaXplLCBsZW47CisgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHpfc3RyZWFtcCBzdHJtOworCisgICAgLyogZ2V0IGludGVybmFsIHN0cnVjdHVyZSAqLworICAgIGlmIChmaWxlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKKyAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgc29tZSBidWZmZXIgc3BhY2UgKi8KKyAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCAmJiBnel9pbml0KHN0YXRlKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGNvbnN1bWUgd2hhdGV2ZXIncyBsZWZ0IGluIHRoZSBpbnB1dCBidWZmZXIgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgZ3pfY29tcChzdGF0ZSwgWl9OT19GTFVTSCkgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gKi8KKyAgICBzaXplID0gKGludCkoc3RhdGUtPnNpemUpOworICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOworI2lmZGVmIE5PX3NucHJpbnRmCisjICBpZmRlZiBIQVNfc3ByaW50Zl92b2lkCisgICAgc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKKyAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQorICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CisjICBlbHNlCisgICAgbGVuID0gc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAorICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisjICBlbmRpZgorI2Vsc2UKKyMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCisgICAgc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworIyAgZWxzZQorICAgIGxlbiA9IHNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCisgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisjICBlbmRpZgorI2VuZGlmCisKKyAgICAvKiBjaGVjayB0aGF0IHByaW50ZigpIHJlc3VsdHMgZml0IGluIGJ1ZmZlciAqLworICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplIHx8IHN0YXRlLT5pbltzaXplIC0gMV0gIT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB1cGRhdGUgYnVmZmVyIGFuZCBwb3NpdGlvbiwgZGVmZXIgY29tcHJlc3Npb24gdW50aWwgbmVlZGVkICovCisgICAgc3RybS0+YXZhaWxfaW4gPSAodW5zaWduZWQpbGVuOworICAgIHN0cm0tPm5leHRfaW4gPSBzdGF0ZS0+aW47CisgICAgc3RhdGUtPnBvcyArPSBsZW47CisgICAgcmV0dXJuIGxlbjsKK30KKworI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6Zmx1c2goZmlsZSwgZmx1c2gpCisgICAgZ3pGaWxlIGZpbGU7CisgICAgaW50IGZsdXNoOworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGNoZWNrIGZsdXNoIHBhcmFtZXRlciAqLworICAgIGlmIChmbHVzaCA8IDAgfHwgZmx1c2ggPiBaX0ZJTklTSCkKKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworCisgICAgLyogY2hlY2sgZm9yIHNlZWsgcmVxdWVzdCAqLworICAgIGlmIChzdGF0ZS0+c2VlaykgeworICAgICAgICBzdGF0ZS0+c2VlayA9IDA7CisgICAgICAgIGlmIChnel96ZXJvKHN0YXRlLCBzdGF0ZS0+c2tpcCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogY29tcHJlc3MgcmVtYWluaW5nIGRhdGEgd2l0aCByZXF1ZXN0ZWQgZmx1c2ggKi8KKyAgICBnel9jb21wKHN0YXRlLCBmbHVzaCk7CisgICAgcmV0dXJuIHN0YXRlLT5lcnI7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6c2V0cGFyYW1zKGZpbGUsIGxldmVsLCBzdHJhdGVneSkKKyAgICBnekZpbGUgZmlsZTsKKyAgICBpbnQgbGV2ZWw7CisgICAgaW50IHN0cmF0ZWd5OworeworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKyAgICB6X3N0cmVhbXAgc3RybTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisgICAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOworCisgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB3cml0aW5nIGFuZCB0aGF0IHRoZXJlJ3Mgbm8gZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisKKyAgICAvKiBpZiBubyBjaGFuZ2UgaXMgcmVxdWVzdGVkLCB0aGVuIGRvIG5vdGhpbmcgKi8KKyAgICBpZiAobGV2ZWwgPT0gc3RhdGUtPmxldmVsICYmIHN0cmF0ZWd5ID09IHN0YXRlLT5zdHJhdGVneSkKKyAgICAgICAgcmV0dXJuIFpfT0s7CisKKyAgICAvKiBjaGVjayBmb3Igc2VlayByZXF1ZXN0ICovCisgICAgaWYgKHN0YXRlLT5zZWVrKSB7CisgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKKyAgICAgICAgaWYgKGd6X3plcm8oc3RhdGUsIHN0YXRlLT5za2lwKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBjaGFuZ2UgY29tcHJlc3Npb24gcGFyYW1ldGVycyBmb3Igc3Vic2VxdWVudCBpbnB1dCAqLworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICAvKiBmbHVzaCBwcmV2aW91cyBpbnB1dCB3aXRoIHByZXZpb3VzIHBhcmFtZXRlcnMgYmVmb3JlIGNoYW5naW5nICovCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiAmJiBnel9jb21wKHN0YXRlLCBaX1BBUlRJQUxfRkxVU0gpID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRlLT5lcnI7CisgICAgICAgIGRlZmxhdGVQYXJhbXMoc3RybSwgbGV2ZWwsIHN0cmF0ZWd5KTsKKyAgICB9CisgICAgc3RhdGUtPmxldmVsID0gbGV2ZWw7CisgICAgc3RhdGUtPnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisgICAgcmV0dXJuIFpfT0s7Cit9CisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KK2ludCBaRVhQT1JUIGd6Y2xvc2VfdyhmaWxlKQorICAgIGd6RmlsZSBmaWxlOworeworICAgIGludCByZXQgPSAwOworICAgIGd6X3N0YXRlcCBzdGF0ZTsKKworICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CisKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfV1JJVEUpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKworICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KKyAgICBpZiAoc3RhdGUtPnNlZWspIHsKKyAgICAgICAgc3RhdGUtPnNlZWsgPSAwOworICAgICAgICByZXQgKz0gZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApOworICAgIH0KKworICAgIC8qIGZsdXNoLCBmcmVlIG1lbW9yeSwgYW5kIGNsb3NlIGZpbGUgKi8KKyAgICByZXQgKz0gZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpOworICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgZnJlZShzdGF0ZS0+aW4pOworICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKKyAgICBmcmVlKHN0YXRlLT5wYXRoKTsKKyAgICByZXQgKz0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBmcmVlKHN0YXRlKTsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwppbmRleCA0NTVkYmM5Li5hZjNhOGM5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZiYWNrLmMgLS0gaW5mbGF0ZSB1c2luZyBhIGNhbGwtYmFjayBpbnRlcmZhY2UKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA5IE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC01NSw3ICs1NSw3IEBACiAgICAgc3RhdGUtPndiaXRzID0gd2luZG93Qml0czsKICAgICBzdGF0ZS0+d3NpemUgPSAxVSA8PCB3aW5kb3dCaXRzOwogICAgIHN0YXRlLT53aW5kb3cgPSB3aW5kb3c7Ci0gICAgc3RhdGUtPndyaXRlID0gMDsKKyAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgIHN0YXRlLT53aGF2ZSA9IDA7CiAgICAgcmV0dXJuIFpfT0s7CiB9CkBAIC0yNTMsNyArMjUzLDcgQEAKICAgICB1bnNpZ25lZCBiaXRzOyAgICAgICAgICAgICAgLyogYml0cyBpbiBiaXQgYnVmZmVyICovCiAgICAgdW5zaWduZWQgY29weTsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpmcm9tOyAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi8KLSAgICBjb2RlIHRoaXM7ICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqLworICAgIGNvZGUgaGVyZTsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRhYmxlIGVudHJ5ICovCiAgICAgY29kZSBsYXN0OyAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAqLwogICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGggdG8gY29weSBmb3IgcmVwZWF0cywgYml0cyB0byBkcm9wICovCiAgICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCkBAIC0zODksMTkgKzM4OSwxOSBAQAogICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOwogICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgc3RhdGUtPm5sZW4gKyBzdGF0ZS0+bmRpc3QpIHsKICAgICAgICAgICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gdGhpcy52YWw7CisgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsIDwgMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgTkVFREJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbc3RhdGUtPmhhdmUrK10gPSBoZXJlLnZhbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbCA9PSAxNikgewotICAgICAgICAgICAgICAgICAgICAgICAgTkVFREJJVFModGhpcy5iaXRzICsgMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOworICAgICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPT0gMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CkBAIC00MTEsMTYgKzQxMSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52YWwgPT0gMTcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDMpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaGVyZS52YWwgPT0gMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDMpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMyArIEJJVFMoMyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBEUk9QQklUUygzKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDcpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyArIDcpOworICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5ID0gMTEgKyBCSVRTKDcpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoNyk7CkBAIC00MzgsNyArNDM4LDE2IEBACiAgICAgICAgICAgICAvKiBoYW5kbGUgZXJyb3IgYnJlYWtzIGluIHdoaWxlICovCiAgICAgICAgICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gQkFEKSBicmVhazsKIAotICAgICAgICAgICAgLyogYnVpbGQgY29kZSB0YWJsZXMgKi8KKyAgICAgICAgICAgIC8qIGNoZWNrIGZvciBlbmQtb2YtYmxvY2sgY29kZSAoYmV0dGVyIGhhdmUgb25lKSAqLworICAgICAgICAgICAgaWYgKHN0YXRlLT5sZW5zWzI1Nl0gPT0gMCkgeworICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayI7CisgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzIC0tIG5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGxlbmJpdHMgb3IgZGlzdGJpdHMKKyAgICAgICAgICAgICAgIHZhbHVlcyBoZXJlICg5IGFuZCA2KSB3aXRob3V0IHJlYWRpbmcgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKKyAgICAgICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIEVOT1VHSCBjb25zdGFudHMsIHdoaWNoIGRlcGVuZCBvbiB0aG9zZSB2YWx1ZXMgKi8KICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwogICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA5OwpAQCAtNDc0LDI4ICs0ODMsMjggQEAKIAogICAgICAgICAgICAgLyogZ2V0IGEgbGl0ZXJhbCwgbGVuZ3RoLCBvciBlbmQtb2YtYmxvY2sgY29kZSAqLwogICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+bGVuY29kZVtCSVRTKHN0YXRlLT5sZW5iaXRzKV07Ci0gICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkodGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYmICh0aGlzLm9wICYgMHhmMCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGxhc3QgPSB0aGlzOworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiYgKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbbGFzdC52YWwgKworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbbGFzdC52YWwgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCSVRTKGxhc3QuYml0cyArIGxhc3Qub3ApID4+IGxhc3QuYml0cyldOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyB0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShsYXN0LmJpdHMgKyBoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBEUk9QQklUUyhsYXN0LmJpdHMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgIHN0YXRlLT5sZW5ndGggPSAodW5zaWduZWQpdGhpcy52YWw7CisgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZCloZXJlLnZhbDsKIAogICAgICAgICAgICAgLyogcHJvY2VzcyBsaXRlcmFsICovCi0gICAgICAgICAgICBpZiAodGhpcy5vcCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCB0aGlzLnZhbCA+PSAweDIwICYmIHRoaXMudmFsIDwgMHg3ZiA/CisgICAgICAgICAgICBpZiAoaGVyZS5vcCA9PSAwKSB7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIHRoaXMudmFsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS52YWwpKTsKICAgICAgICAgICAgICAgICBST09NKCk7CiAgICAgICAgICAgICAgICAgKnB1dCsrID0gKHVuc2lnbmVkIGNoYXIpKHN0YXRlLT5sZW5ndGgpOwogICAgICAgICAgICAgICAgIGxlZnQtLTsKQEAgLTUwNCwyMSArNTEzLDIxIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIHByb2Nlc3MgZW5kIG9mIGJsb2NrICovCi0gICAgICAgICAgICBpZiAodGhpcy5vcCAmIDMyKSB7CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmIDMyKSB7CiAgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgICBlbmQgb2YgYmxvY2tcbiIpKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IFRZUEU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSAqLwotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiA2NCkgeworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2NCkgewogICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIGxlbmd0aCBjb2RlIC0tIGdldCBleHRyYSBiaXRzLCBpZiBhbnkgKi8KLSAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhpcy5vcCkgJiAxNTsKKyAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkoaGVyZS5vcCkgJiAxNTsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZXh0cmEgIT0gMCkgewogICAgICAgICAgICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCArPSBCSVRTKHN0YXRlLT5leHRyYSk7CkBAIC01MjgsMzAgKzUzNywzMCBAQAogCiAgICAgICAgICAgICAvKiBnZXQgZGlzdGFuY2UgY29kZSAqLwogICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsKLSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHRoaXMub3AgJiAweGYwKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbGFzdCA9IHRoaXM7CisgICAgICAgICAgICBpZiAoKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtsYXN0LnZhbCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiA2NCkgeworICAgICAgICAgICAgRFJPUEJJVFMoaGVyZS5iaXRzKTsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgNjQpIHsKICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiOwogICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RhdGUtPm9mZnNldCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKKyAgICAgICAgICAgIHN0YXRlLT5vZmZzZXQgPSAodW5zaWduZWQpaGVyZS52YWw7CiAKICAgICAgICAgICAgIC8qIGdldCBkaXN0YW5jZSBleHRyYSBiaXRzLCBpZiBhbnkgKi8KLSAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkodGhpcy5vcCkgJiAxNTsKKyAgICAgICAgICAgIHN0YXRlLT5leHRyYSA9ICh1bnNpZ25lZCkoaGVyZS5vcCkgJiAxNTsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+ZXh0cmEgIT0gMCkgewogICAgICAgICAgICAgICAgIE5FRURCSVRTKHN0YXRlLT5leHRyYSk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm9mZnNldCArPSBCSVRTKHN0YXRlLT5leHRyYSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jIGIvTW9kdWxlcy96bGliL2luZmZhc3QuYwppbmRleCBiYmVlOTJlLi4yZjFkNjBiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZmYXN0LmMgLS0gZmFzdCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDgsIDIwMTAgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgIHJlcXVpcmVzIHN0cm0tPmF2YWlsX291dCA+PSAyNTggZm9yIGVhY2ggbG9vcCB0byBhdm9pZCBjaGVja2luZyBmb3IKICAgICAgIG91dHB1dCBzcGFjZS4KICAqLwotdm9pZCBpbmZsYXRlX2Zhc3Qoc3RybSwgc3RhcnQpCit2b2lkIFpMSUJfSU5URVJOQUwgaW5mbGF0ZV9mYXN0KHN0cm0sIHN0YXJ0KQogel9zdHJlYW1wIHN0cm07CiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBzdGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CkBAIC03OSw3ICs3OSw3IEBACiAjZW5kaWYKICAgICB1bnNpZ25lZCB3c2l6ZTsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovCiAgICAgdW5zaWduZWQgd2hhdmU7ICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi8KLSAgICB1bnNpZ25lZCB3cml0ZTsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCisgICAgdW5zaWduZWQgd25leHQ7ICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3c7ICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIHdzaXplICE9IDAgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogbG9jYWwgc3RybS0+aG9sZCAqLwogICAgIHVuc2lnbmVkIGJpdHM7ICAgICAgICAgICAgICAvKiBsb2NhbCBzdHJtLT5iaXRzICovCkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgY29kZSBjb25zdCBGQVIgKmRjb2RlOyAgICAgIC8qIGxvY2FsIHN0cm0tPmRpc3Rjb2RlICovCiAgICAgdW5zaWduZWQgbG1hc2s7ICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGZpcnN0IGxldmVsIG9mIGxlbmd0aCBjb2RlcyAqLwogICAgIHVuc2lnbmVkIGRtYXNrOyAgICAgICAgICAgICAvKiBtYXNrIGZvciBmaXJzdCBsZXZlbCBvZiBkaXN0YW5jZSBjb2RlcyAqLwotICAgIGNvZGUgdGhpczsgICAgICAgICAgICAgICAgICAvKiByZXRyaWV2ZWQgdGFibGUgZW50cnkgKi8KKyAgICBjb2RlIGhlcmU7ICAgICAgICAgICAgICAgICAgLyogcmV0cmlldmVkIHRhYmxlIGVudHJ5ICovCiAgICAgdW5zaWduZWQgb3A7ICAgICAgICAgICAgICAgIC8qIGNvZGUgYml0cywgb3BlcmF0aW9uLCBleHRyYSBiaXRzLCBvciAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgd2luZG93IHBvc2l0aW9uLCB3aW5kb3cgYnl0ZXMgdG8gY29weSAqLwogICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBtYXRjaCBsZW5ndGgsIHVudXNlZCBieXRlcyAqLwpAQCAtMTA2LDcgKzEwNiw3IEBACiAjZW5kaWYKICAgICB3c2l6ZSA9IHN0YXRlLT53c2l6ZTsKICAgICB3aGF2ZSA9IHN0YXRlLT53aGF2ZTsKLSAgICB3cml0ZSA9IHN0YXRlLT53cml0ZTsKKyAgICB3bmV4dCA9IHN0YXRlLT53bmV4dDsKICAgICB3aW5kb3cgPSBzdGF0ZS0+d2luZG93OwogICAgIGhvbGQgPSBzdGF0ZS0+aG9sZDsKICAgICBiaXRzID0gc3RhdGUtPmJpdHM7CkBAIC0xMjQsMjAgKzEyNCwyMCBAQAogICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKICAgICAgICAgICAgIGJpdHMgKz0gODsKICAgICAgICAgfQotICAgICAgICB0aGlzID0gbGNvZGVbaG9sZCAmIGxtYXNrXTsKKyAgICAgICAgaGVyZSA9IGxjb2RlW2hvbGQgJiBsbWFza107CiAgICAgICBkb2xlbjoKLSAgICAgICAgb3AgPSAodW5zaWduZWQpKHRoaXMuYml0cyk7CisgICAgICAgIG9wID0gKHVuc2lnbmVkKShoZXJlLmJpdHMpOwogICAgICAgICBob2xkID4+PSBvcDsKICAgICAgICAgYml0cyAtPSBvcDsKLSAgICAgICAgb3AgPSAodW5zaWduZWQpKHRoaXMub3ApOworICAgICAgICBvcCA9ICh1bnNpZ25lZCkoaGVyZS5vcCk7CiAgICAgICAgIGlmIChvcCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsaXRlcmFsICovCi0gICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsIHRoaXMudmFsID49IDB4MjAgJiYgdGhpcy52YWwgPCAweDdmID8KKyAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgaGVyZS52YWwgPj0gMHgyMCAmJiBoZXJlLnZhbCA8IDB4N2YgPwogICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgdGhpcy52YWwpKTsKLSAgICAgICAgICAgIFBVUChvdXQpID0gKHVuc2lnbmVkIGNoYXIpKHRoaXMudmFsKTsKKyAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIGhlcmUudmFsKSk7CisgICAgICAgICAgICBQVVAob3V0KSA9ICh1bnNpZ25lZCBjaGFyKShoZXJlLnZhbCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGxlbmd0aCBiYXNlICovCi0gICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpKHRoaXMudmFsKTsKKyAgICAgICAgICAgIGxlbiA9ICh1bnNpZ25lZCkoaGVyZS52YWwpOwogICAgICAgICAgICAgb3AgJj0gMTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbnVtYmVyIG9mIGV4dHJhIGJpdHMgKi8KICAgICAgICAgICAgIGlmIChvcCkgewogICAgICAgICAgICAgICAgIGlmIChiaXRzIDwgb3ApIHsKQEAgLTE1NSwxNCArMTU1LDE0IEBACiAgICAgICAgICAgICAgICAgaG9sZCArPSAodW5zaWduZWQgbG9uZykoUFVQKGluKSkgPDwgYml0czsKICAgICAgICAgICAgICAgICBiaXRzICs9IDg7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aGlzID0gZGNvZGVbaG9sZCAmIGRtYXNrXTsKKyAgICAgICAgICAgIGhlcmUgPSBkY29kZVtob2xkICYgZG1hc2tdOwogICAgICAgICAgIGRvZGlzdDoKLSAgICAgICAgICAgIG9wID0gKHVuc2lnbmVkKSh0aGlzLmJpdHMpOworICAgICAgICAgICAgb3AgPSAodW5zaWduZWQpKGhlcmUuYml0cyk7CiAgICAgICAgICAgICBob2xkID4+PSBvcDsKICAgICAgICAgICAgIGJpdHMgLT0gb3A7Ci0gICAgICAgICAgICBvcCA9ICh1bnNpZ25lZCkodGhpcy5vcCk7CisgICAgICAgICAgICBvcCA9ICh1bnNpZ25lZCkoaGVyZS5vcCk7CiAgICAgICAgICAgICBpZiAob3AgJiAxNikgeyAgICAgICAgICAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYXNlICovCi0gICAgICAgICAgICAgICAgZGlzdCA9ICh1bnNpZ25lZCkodGhpcy52YWwpOworICAgICAgICAgICAgICAgIGRpc3QgPSAodW5zaWduZWQpKGhlcmUudmFsKTsKICAgICAgICAgICAgICAgICBvcCAmPSAxNTsgICAgICAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBleHRyYSBiaXRzICovCiAgICAgICAgICAgICAgICAgaWYgKGJpdHMgPCBvcCkgewogICAgICAgICAgICAgICAgICAgICBob2xkICs9ICh1bnNpZ25lZCBsb25nKShQVVAoaW4pKSA8PCBiaXRzOwpAQCAtMTg3LDEyICsxODcsMzQgQEAKICAgICAgICAgICAgICAgICBpZiAoZGlzdCA+IG9wKSB7ICAgICAgICAgICAgICAgIC8qIHNlZSBpZiBjb3B5IGZyb20gd2luZG93ICovCiAgICAgICAgICAgICAgICAgICAgIG9wID0gZGlzdCAtIG9wOyAgICAgICAgICAgICAvKiBkaXN0YW5jZSBiYWNrIGluIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICBpZiAob3AgPiB3aGF2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+c2FuZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZmRlZiBJTkZMQVRFX0FMTE9XX0lOVkFMSURfRElTVEFOQ0VfVE9PRkFSX0FSUlIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPD0gb3AgLSB3aGF2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcCAtIHdoYXZlOworICAgICAgICAgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3AgPiB3aGF2ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoLS1sZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHdpbmRvdyAtIE9GRjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlID09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0ID09IDApIHsgICAgICAgICAgIC8qIHZlcnkgY29tbW9uIGNhc2UgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CkBAIC0yMDIsMTcgKzIyNCwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSBvdXQgLSBkaXN0OyAgLyogcmVzdCBmcm9tIG91dHB1dCAqLwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHdyaXRlIDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3cml0ZSAtIG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd3JpdGU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHduZXh0IDwgb3ApIHsgICAgICAvKiB3cmFwIGFyb3VuZCB3aW5kb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3NpemUgKyB3bmV4dCAtIG9wOworICAgICAgICAgICAgICAgICAgICAgICAgb3AgLT0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPCBsZW4pIHsgICAgICAgICAvKiBzb21lIGZyb20gZW5kIG9mIHdpbmRvdyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBVUChvdXQpID0gUFVQKGZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tb3ApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gPSB3aW5kb3cgLSBPRkY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlIDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gd3JpdGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHduZXh0IDwgbGVuKSB7ICAvKiBzb21lIGZyb20gc3RhcnQgb2Ygd2luZG93ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gd25leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVQKG91dCkgPSBQVVAoZnJvbSk7CkBAIC0yMjIsNyArMjQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgLyogY29udGlndW91cyBpbiB3aW5kb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd3JpdGUgLSBvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gKz0gd25leHQgLSBvcDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA8IGxlbikgeyAgICAgICAgIC8qIHNvbWUgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gb3A7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gewpAQCAtMjU5LDcgKzI4MSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09IDApIHsgICAgICAgICAgLyogMm5kIGxldmVsIGRpc3RhbmNlIGNvZGUgKi8KLSAgICAgICAgICAgICAgICB0aGlzID0gZGNvZGVbdGhpcy52YWwgKyAoaG9sZCAmICgoMVUgPDwgb3ApIC0gMSkpXTsKKyAgICAgICAgICAgICAgICBoZXJlID0gZGNvZGVbaGVyZS52YWwgKyAoaG9sZCAmICgoMVUgPDwgb3ApIC0gMSkpXTsKICAgICAgICAgICAgICAgICBnb3RvIGRvZGlzdDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewpAQCAtMjY5LDcgKzI5MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKG9wICYgNjQpID09IDApIHsgICAgICAgICAgICAgIC8qIDJuZCBsZXZlbCBsZW5ndGggY29kZSAqLwotICAgICAgICAgICAgdGhpcyA9IGxjb2RlW3RoaXMudmFsICsgKGhvbGQgJiAoKDFVIDw8IG9wKSAtIDEpKV07CisgICAgICAgICAgICBoZXJlID0gbGNvZGVbaGVyZS52YWwgKyAoaG9sZCAmICgoMVUgPDwgb3ApIC0gMSkpXTsKICAgICAgICAgICAgIGdvdG8gZG9sZW47CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAob3AgJiAzMikgeyAgICAgICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1ibG9jayAqLwpAQCAtMzA1LDcgKzMyNyw3IEBACiAgICBpbmZsYXRlX2Zhc3QoKSBzcGVlZHVwcyB0aGF0IHR1cm5lZCBvdXQgc2xvd2VyIChvbiBhIFBvd2VyUEMgRzMgNzUwQ1hlKToKICAgIC0gVXNpbmcgYml0IGZpZWxkcyBmb3IgY29kZSBzdHJ1Y3R1cmUKICAgIC0gRGlmZmVyZW50IG9wIGRlZmluaXRpb24gdG8gYXZvaWQgJiBmb3IgZXh0cmEgYml0cyAoZG8gJiBmb3IgdGFibGUgYml0cykKLSAgIC0gVGhyZWUgc2VwYXJhdGUgZGVjb2RpbmcgZG8tbG9vcHMgZm9yIGRpcmVjdCwgd2luZG93LCBhbmQgd3JpdGUgPT0gMAorICAgLSBUaHJlZSBzZXBhcmF0ZSBkZWNvZGluZyBkby1sb29wcyBmb3IgZGlyZWN0LCB3aW5kb3csIGFuZCB3bmV4dCA9PSAwCiAgICAtIFNwZWNpYWwgY2FzZSBmb3IgZGlzdGFuY2UgPiAxIGNvcGllcyB0byBkbyBvdmVybGFwcGVkIGxvYWQgYW5kIHN0b3JlIGNvcHkKICAgIC0gRXhwbGljaXQgYnJhbmNoIHByZWRpY3Rpb25zIChiYXNlZCBvbiBtZWFzdXJlZCBicmFuY2ggcHJvYmFiaWxpdGllcykKICAgIC0gRGVmZXJyaW5nIG1hdGNoIGNvcHkgYW5kIGludGVyc3BlcnNlZCBpdCB3aXRoIGRlY29kaW5nIHN1YnNlcXVlbnQgY29kZXMKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmggYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5oCmluZGV4IDFlODhkMmQuLmU1YzFhYTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmYXN0LmgKKysrIGIvTW9kdWxlcy96bGliL2luZmZhc3QuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmZhc3QuaCAtLSBoZWFkZXIgdG8gdXNlIGluZmZhc3QuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMTAgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTgsNCArOCw0IEBACiAgICBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCiAgKi8KIAotdm9pZCBpbmZsYXRlX2Zhc3QgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBzdGFydCkpOwordm9pZCBaTElCX0lOVEVSTkFMIGluZmxhdGVfZmFzdCBPRigoel9zdHJlYW1wIHN0cm0sIHVuc2lnbmVkIHN0YXJ0KSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwppbmRleCA3OTJmZGVlLi5hODQzMWFiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtNDUsNyArNDUsNyBAQAogICogLSBSZWFycmFuZ2Ugd2luZG93IGNvcGllcyBpbiBpbmZsYXRlX2Zhc3QoKSBmb3Igc3BlZWQgYW5kIHNpbXBsaWZpY2F0aW9uCiAgKiAtIFVucm9sbCBsYXN0IGNvcHkgZm9yIHdpbmRvdyBtYXRjaCBpbiBpbmZsYXRlX2Zhc3QoKQogICogLSBVc2UgbG9jYWwgY29waWVzIG9mIHdpbmRvdyB2YXJpYWJsZXMgaW4gaW5mbGF0ZV9mYXN0KCkgZm9yIHNwZWVkCi0gKiAtIFB1bGwgb3V0IGNvbW1vbiB3cml0ZSA9PSAwIGNhc2UgZm9yIHNwZWVkIGluIGluZmxhdGVfZmFzdCgpCisgKiAtIFB1bGwgb3V0IGNvbW1vbiB3bmV4dCA9PSAwIGNhc2UgZm9yIHNwZWVkIGluIGluZmxhdGVfZmFzdCgpCiAgKiAtIE1ha2Ugb3AgYW5kIGxlbiBpbiBpbmZsYXRlX2Zhc3QoKSB1bnNpZ25lZCBmb3IgY29uc2lzdGVuY3kKICAqIC0gQWRkIEZBUiB0byBsY29kZSBhbmQgZGNvZGUgZGVjbGFyYXRpb25zIGluIGluZmxhdGVfZmFzdCgpCiAgKiAtIFNpbXBsaWZpZWQgYmFkIGRpc3RhbmNlIGNoZWNrIGluIGluZmxhdGVfZmFzdCgpCkBAIC0xMTcsMjggKzExNyw1MiBAQAogICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOwogICAgIHN0YXRlLT53c2l6ZSA9IDA7CiAgICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+d3JpdGUgPSAwOworICAgIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgc3RhdGUtPmhvbGQgPSAwOwogICAgIHN0YXRlLT5iaXRzID0gMDsKICAgICBzdGF0ZS0+bGVuY29kZSA9IHN0YXRlLT5kaXN0Y29kZSA9IHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOworICAgIHN0YXRlLT5zYW5lID0gMTsKKyAgICBzdGF0ZS0+YmFjayA9IC0xOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogcmVzZXRcbiIpKTsKICAgICByZXR1cm4gWl9PSzsKIH0KIAotaW50IFpFWFBPUlQgaW5mbGF0ZVByaW1lKHN0cm0sIGJpdHMsIHZhbHVlKQoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0MihzdHJtLCB3aW5kb3dCaXRzKQogel9zdHJlYW1wIHN0cm07Ci1pbnQgYml0czsKLWludCB2YWx1ZTsKK2ludCB3aW5kb3dCaXRzOwogeworICAgIGludCB3cmFwOwogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CiAKKyAgICAvKiBnZXQgdGhlIHN0YXRlICovCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwotICAgIGlmIChiaXRzID4gMTYgfHwgc3RhdGUtPmJpdHMgKyBiaXRzID4gMzIpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSAgICB2YWx1ZSAmPSAoMUwgPDwgYml0cykgLSAxOwotICAgIHN0YXRlLT5ob2xkICs9IHZhbHVlIDw8IHN0YXRlLT5iaXRzOwotICAgIHN0YXRlLT5iaXRzICs9IGJpdHM7Ci0gICAgcmV0dXJuIFpfT0s7CisKKyAgICAvKiBleHRyYWN0IHdyYXAgcmVxdWVzdCBmcm9tIHdpbmRvd0JpdHMgcGFyYW1ldGVyICovCisgICAgaWYgKHdpbmRvd0JpdHMgPCAwKSB7CisgICAgICAgIHdyYXAgPSAwOworICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB3cmFwID0gKHdpbmRvd0JpdHMgPj4gNCkgKyAxOworI2lmZGVmIEdVTlpJUAorICAgICAgICBpZiAod2luZG93Qml0cyA8IDQ4KQorICAgICAgICAgICAgd2luZG93Qml0cyAmPSAxNTsKKyNlbmRpZgorICAgIH0KKworICAgIC8qIHNldCBudW1iZXIgb2Ygd2luZG93IGJpdHMsIGZyZWUgd2luZG93IGlmIGRpZmZlcmVudCAqLworICAgIGlmICh3aW5kb3dCaXRzICYmICh3aW5kb3dCaXRzIDwgOCB8fCB3aW5kb3dCaXRzID4gMTUpKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgaWYgKHN0YXRlLT53aW5kb3cgIT0gWl9OVUxMICYmIHN0YXRlLT53Yml0cyAhPSAodW5zaWduZWQpd2luZG93Qml0cykgeworICAgICAgICBaRlJFRShzdHJtLCBzdGF0ZS0+d2luZG93KTsKKyAgICAgICAgc3RhdGUtPndpbmRvdyA9IFpfTlVMTDsKKyAgICB9CisKKyAgICAvKiB1cGRhdGUgc3RhdGUgYW5kIHJlc2V0IHRoZSByZXN0IG9mIGl0ICovCisgICAgc3RhdGUtPndyYXAgPSB3cmFwOworICAgIHN0YXRlLT53Yml0cyA9ICh1bnNpZ25lZCl3aW5kb3dCaXRzOworICAgIHJldHVybiBpbmZsYXRlUmVzZXQoc3RybSk7CiB9CiAKIGludCBaRVhQT1JUIGluZmxhdGVJbml0Ml8oc3RybSwgd2luZG93Qml0cywgdmVyc2lvbiwgc3RyZWFtX3NpemUpCkBAIC0xNDcsNiArMTcxLDcgQEAKIGNvbnN0IGNoYXIgKnZlcnNpb247CiBpbnQgc3RyZWFtX3NpemU7CiB7CisgICAgaW50IHJldDsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwogCiAgICAgaWYgKHZlcnNpb24gPT0gWl9OVUxMIHx8IHZlcnNpb25bMF0gIT0gWkxJQl9WRVJTSU9OWzBdIHx8CkBAIC0xNjQsMjQgKzE4OSwxMyBAQAogICAgIGlmIChzdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX01FTV9FUlJPUjsKICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6IGFsbG9jYXRlZFxuIikpOwogICAgIHN0cm0tPnN0YXRlID0gKHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSBGQVIgKilzdGF0ZTsKLSAgICBpZiAod2luZG93Qml0cyA8IDApIHsKLSAgICAgICAgc3RhdGUtPndyYXAgPSAwOwotICAgICAgICB3aW5kb3dCaXRzID0gLXdpbmRvd0JpdHM7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzdGF0ZS0+d3JhcCA9ICh3aW5kb3dCaXRzID4+IDQpICsgMTsKLSNpZmRlZiBHVU5aSVAKLSAgICAgICAgaWYgKHdpbmRvd0JpdHMgPCA0OCkgd2luZG93Qml0cyAmPSAxNTsKLSNlbmRpZgotICAgIH0KLSAgICBpZiAod2luZG93Qml0cyA8IDggfHwgd2luZG93Qml0cyA+IDE1KSB7CisgICAgc3RhdGUtPndpbmRvdyA9IFpfTlVMTDsKKyAgICByZXQgPSBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpOworICAgIGlmIChyZXQgIT0gWl9PSykgewogICAgICAgICBaRlJFRShzdHJtLCBzdGF0ZSk7CiAgICAgICAgIHN0cm0tPnN0YXRlID0gWl9OVUxMOwotICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgfQotICAgIHN0YXRlLT53Yml0cyA9ICh1bnNpZ25lZCl3aW5kb3dCaXRzOwotICAgIHN0YXRlLT53aW5kb3cgPSBaX05VTEw7Ci0gICAgcmV0dXJuIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICByZXR1cm4gcmV0OwogfQogCiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdF8oc3RybSwgdmVyc2lvbiwgc3RyZWFtX3NpemUpCkBAIC0xOTIsNiArMjA2LDI3IEBACiAgICAgcmV0dXJuIGluZmxhdGVJbml0Ml8oc3RybSwgREVGX1dCSVRTLCB2ZXJzaW9uLCBzdHJlYW1fc2l6ZSk7CiB9CiAKK2ludCBaRVhQT1JUIGluZmxhdGVQcmltZShzdHJtLCBiaXRzLCB2YWx1ZSkKK3pfc3RyZWFtcCBzdHJtOworaW50IGJpdHM7CitpbnQgdmFsdWU7Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKyAgICBpZiAoYml0cyA8IDApIHsKKyAgICAgICAgc3RhdGUtPmhvbGQgPSAwOworICAgICAgICBzdGF0ZS0+Yml0cyA9IDA7CisgICAgICAgIHJldHVybiBaX09LOworICAgIH0KKyAgICBpZiAoYml0cyA+IDE2IHx8IHN0YXRlLT5iaXRzICsgYml0cyA+IDMyKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgdmFsdWUgJj0gKDFMIDw8IGJpdHMpIC0gMTsKKyAgICBzdGF0ZS0+aG9sZCArPSB2YWx1ZSA8PCBzdGF0ZS0+Yml0czsKKyAgICBzdGF0ZS0+Yml0cyArPSBiaXRzOworICAgIHJldHVybiBaX09LOworfQorCiAvKgogICAgUmV0dXJuIHN0YXRlIHdpdGggbGVuZ3RoIGFuZCBkaXN0YW5jZSBkZWNvZGluZyB0YWJsZXMgYW5kIGluZGV4IHNpemVzIHNldCB0bwogICAgZml4ZWQgY29kZSBkZWNvZGluZy4gIE5vcm1hbGx5IHRoaXMgcmV0dXJucyBmaXhlZCB0YWJsZXMgZnJvbSBpbmZmaXhlZC5oLgpAQCAtMzQwLDcgKzM3NSw3IEBACiAgICAgLyogaWYgd2luZG93IG5vdCBpbiB1c2UgeWV0LCBpbml0aWFsaXplICovCiAgICAgaWYgKHN0YXRlLT53c2l6ZSA9PSAwKSB7CiAgICAgICAgIHN0YXRlLT53c2l6ZSA9IDFVIDw8IHN0YXRlLT53Yml0czsKLSAgICAgICAgc3RhdGUtPndyaXRlID0gMDsKKyAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gMDsKICAgICB9CiAKQEAgLTM0OCwyMiArMzgzLDIyIEBACiAgICAgY29weSA9IG91dCAtIHN0cm0tPmF2YWlsX291dDsKICAgICBpZiAoY29weSA+PSBzdGF0ZS0+d3NpemUpIHsKICAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBzdHJtLT5uZXh0X291dCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKLSAgICAgICAgc3RhdGUtPndyaXRlID0gMDsKKyAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53cml0ZTsKKyAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53bmV4dDsKICAgICAgICAgaWYgKGRpc3QgPiBjb3B5KSBkaXN0ID0gY29weTsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPndyaXRlLCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGRpc3QpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIHN0cm0tPm5leHRfb3V0IC0gY29weSwgZGlzdCk7CiAgICAgICAgIGNvcHkgLT0gZGlzdDsKICAgICAgICAgaWYgKGNvcHkpIHsKICAgICAgICAgICAgIHptZW1jcHkoc3RhdGUtPndpbmRvdywgc3RybS0+bmV4dF9vdXQgLSBjb3B5LCBjb3B5KTsKLSAgICAgICAgICAgIHN0YXRlLT53cml0ZSA9IGNvcHk7CisgICAgICAgICAgICBzdGF0ZS0+d25leHQgPSBjb3B5OwogICAgICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3RhdGUtPndyaXRlICs9IGRpc3Q7Ci0gICAgICAgICAgICBpZiAoc3RhdGUtPndyaXRlID09IHN0YXRlLT53c2l6ZSkgc3RhdGUtPndyaXRlID0gMDsKKyAgICAgICAgICAgIHN0YXRlLT53bmV4dCArPSBkaXN0OworICAgICAgICAgICAgaWYgKHN0YXRlLT53bmV4dCA9PSBzdGF0ZS0+d3NpemUpIHN0YXRlLT53bmV4dCA9IDA7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPndoYXZlIDwgc3RhdGUtPndzaXplKSBzdGF0ZS0+d2hhdmUgKz0gZGlzdDsKICAgICAgICAgfQogICAgIH0KQEAgLTU2NCw3ICs1OTksNyBAQAogICAgIHVuc2lnbmVkIGluLCBvdXQ7ICAgICAgICAgICAvKiBzYXZlIHN0YXJ0aW5nIGF2YWlsYWJsZSBpbnB1dCBhbmQgb3V0cHV0ICovCiAgICAgdW5zaWduZWQgY29weTsgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBzdG9yZWQgb3IgbWF0Y2ggYnl0ZXMgdG8gY29weSAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpmcm9tOyAgICAvKiB3aGVyZSB0byBjb3B5IG1hdGNoIGJ5dGVzIGZyb20gKi8KLSAgICBjb2RlIHRoaXM7ICAgICAgICAgICAgICAgICAgLyogY3VycmVudCBkZWNvZGluZyB0YWJsZSBlbnRyeSAqLworICAgIGNvZGUgaGVyZTsgICAgICAgICAgICAgICAgICAvKiBjdXJyZW50IGRlY29kaW5nIHRhYmxlIGVudHJ5ICovCiAgICAgY29kZSBsYXN0OyAgICAgICAgICAgICAgICAgIC8qIHBhcmVudCB0YWJsZSBlbnRyeSAqLwogICAgIHVuc2lnbmVkIGxlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGggdG8gY29weSBmb3IgcmVwZWF0cywgYml0cyB0byBkcm9wICovCiAgICAgaW50IHJldDsgICAgICAgICAgICAgICAgICAgIC8qIHJldHVybiBjb2RlICovCkBAIC02MTksNyArNjU0LDkgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIERST1BCSVRTKDQpOwogICAgICAgICAgICAgbGVuID0gQklUUyg0KSArIDg7Ci0gICAgICAgICAgICBpZiAobGVuID4gc3RhdGUtPndiaXRzKSB7CisgICAgICAgICAgICBpZiAoc3RhdGUtPndiaXRzID09IDApCisgICAgICAgICAgICAgICAgc3RhdGUtPndiaXRzID0gbGVuOworICAgICAgICAgICAgZWxzZSBpZiAobGVuID4gc3RhdGUtPndiaXRzKSB7CiAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCB3aW5kb3cgc2l6ZSI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03NzEsNyArODA4LDcgQEAKICAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRTsKICAgICAgICAgY2FzZSBUWVBFOgotICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfQkxPQ0spIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfQkxPQ0sgfHwgZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CiAgICAgICAgIGNhc2UgVFlQRURPOgogICAgICAgICAgICAgaWYgKHN0YXRlLT5sYXN0KSB7CiAgICAgICAgICAgICAgICAgQllURUJJVFMoKTsKQEAgLTc5MSw3ICs4MjgsMTEgQEAKICAgICAgICAgICAgICAgICBmaXhlZHRhYmxlcyhzdGF0ZSk7CiAgICAgICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgZml4ZWQgY29kZXMgYmxvY2slc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0ID8gIiAobGFzdCkiIDogIiIpKTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsgICAgICAgICAgICAgIC8qIGRlY29kZSBjb2RlcyAqLworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTEVOXzsgICAgICAgICAgICAgLyogZGVjb2RlIGNvZGVzICovCisgICAgICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfVFJFRVMpIHsKKyAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMik7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW5mX2xlYXZlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGR5bmFtaWMgYmxvY2sgKi8KICAgICAgICAgICAgICAgICBUcmFjZXYoKHN0ZGVyciwgImluZmxhdGU6ICAgICBkeW5hbWljIGNvZGVzIGJsb2NrJXNcbiIsCkBAIC04MTYsNiArODU3LDkgQEAKICAgICAgICAgICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICAgICAgc3RvcmVkIGxlbmd0aCAldVxuIiwKICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCkpOwogICAgICAgICAgICAgSU5JVEJJVFMoKTsKKyAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQ09QWV87CisgICAgICAgICAgICBpZiAoZmx1c2ggPT0gWl9UUkVFUykgZ290byBpbmZfbGVhdmU7CisgICAgICAgIGNhc2UgQ09QWV86CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IENPUFk7CiAgICAgICAgIGNhc2UgQ09QWToKICAgICAgICAgICAgIGNvcHkgPSBzdGF0ZS0+bGVuZ3RoOwpAQCAtODc2LDE5ICs5MjAsMTkgQEAKICAgICAgICAgY2FzZSBDT0RFTEVOUzoKICAgICAgICAgICAgIHdoaWxlIChzdGF0ZS0+aGF2ZSA8IHN0YXRlLT5ubGVuICsgc3RhdGUtPm5kaXN0KSB7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBoZXJlID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOworICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAodGhpcy52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IHRoaXMudmFsOworICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7CisgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWwgPT0gMTYpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKHRoaXMuYml0cyArIDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhlcmUudmFsID09IDE2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwpAQCAtODk4LDE2ICs5NDIsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkgPSAzICsgQklUUygyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmFsID09IDE3KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMgKyAzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhlcmUudmFsID09IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDMgKyBCSVRTKDMpOwogICAgICAgICAgICAgICAgICAgICAgICAgRFJPUEJJVFMoMyk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyh0aGlzLmJpdHMgKyA3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKHRoaXMuYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMgKyA3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgY29weSA9IDExICsgQklUUyg3KTsKICAgICAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKDcpOwpAQCAtOTI1LDcgKzk2OSwxNiBAQAogICAgICAgICAgICAgLyogaGFuZGxlIGVycm9yIGJyZWFrcyBpbiB3aGlsZSAqLwogICAgICAgICAgICAgaWYgKHN0YXRlLT5tb2RlID09IEJBRCkgYnJlYWs7CiAKLSAgICAgICAgICAgIC8qIGJ1aWxkIGNvZGUgdGFibGVzICovCisgICAgICAgICAgICAvKiBjaGVjayBmb3IgZW5kLW9mLWJsb2NrIGNvZGUgKGJldHRlciBoYXZlIG9uZSkgKi8KKyAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuc1syNTZdID09IDApIHsKKyAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBidWlsZCBjb2RlIHRhYmxlcyAtLSBub3RlOiBkbyBub3QgY2hhbmdlIHRoZSBsZW5iaXRzIG9yIGRpc3RiaXRzCisgICAgICAgICAgICAgICB2YWx1ZXMgaGVyZSAoOSBhbmQgNikgd2l0aG91dCByZWFkaW5nIHRoZSBjb21tZW50cyBpbiBpbmZ0cmVlcy5oCisgICAgICAgICAgICAgICBjb25jZXJuaW5nIHRoZSBFTk9VR0ggY29uc3RhbnRzLCB3aGljaCBkZXBlbmQgb24gdGhvc2UgdmFsdWVzICovCiAgICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKICAgICAgICAgICAgIHN0YXRlLT5sZW5jb2RlID0gKGNvZGUgY29uc3QgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5sZW5iaXRzID0gOTsKQEAgLTk0Niw4OCArOTk5LDEwMiBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgVHJhY2V2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICBjb2RlcyBva1xuIikpOworICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBMRU5fOworICAgICAgICAgICAgaWYgKGZsdXNoID09IFpfVFJFRVMpIGdvdG8gaW5mX2xlYXZlOworICAgICAgICBjYXNlIExFTl86CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTjsKICAgICAgICAgY2FzZSBMRU46CiAgICAgICAgICAgICBpZiAoaGF2ZSA+PSA2ICYmIGxlZnQgPj0gMjU4KSB7CiAgICAgICAgICAgICAgICAgUkVTVE9SRSgpOwogICAgICAgICAgICAgICAgIGluZmxhdGVfZmFzdChzdHJtLCBvdXQpOwogICAgICAgICAgICAgICAgIExPQUQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gVFlQRSkKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgPSAtMTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlLT5iYWNrID0gMDsKICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmxlbmNvZGVbQklUUyhzdGF0ZS0+bGVuYml0cyldOwotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW0JJVFMoc3RhdGUtPmxlbmJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGhpcy5vcCAmJiAodGhpcy5vcCAmIDB4ZjApID09IDApIHsKLSAgICAgICAgICAgICAgICBsYXN0ID0gdGhpczsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYmIChoZXJlLm9wICYgMHhmMCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGxhc3QgPSBoZXJlOwogICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpcyA9IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5sZW5jb2RlW2xhc3QudmFsICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQklUUyhsYXN0LmJpdHMgKyBsYXN0Lm9wKSA+PiBsYXN0LmJpdHMpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgdGhpcy5iaXRzKSA8PSBiaXRzKSBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCkobGFzdC5iaXRzICsgaGVyZS5iaXRzKSA8PSBiaXRzKSBicmVhazsKICAgICAgICAgICAgICAgICAgICAgUFVMTEJZVEUoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgRFJPUEJJVFMobGFzdC5iaXRzKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBsYXN0LmJpdHM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBEUk9QQklUUyh0aGlzLmJpdHMpOwotICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZCl0aGlzLnZhbDsKLSAgICAgICAgICAgIGlmICgoaW50KSh0aGlzLm9wKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCB0aGlzLnZhbCA+PSAweDIwICYmIHRoaXMudmFsIDwgMHg3ZiA/CisgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOworICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gaGVyZS5iaXRzOworICAgICAgICAgICAgc3RhdGUtPmxlbmd0aCA9ICh1bnNpZ25lZCloZXJlLnZhbDsKKyAgICAgICAgICAgIGlmICgoaW50KShoZXJlLm9wKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgVHJhY2V2digoc3RkZXJyLCBoZXJlLnZhbCA+PSAweDIwICYmIGhlcmUudmFsIDwgMHg3ZiA/CiAgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsICclYydcbiIgOgotICAgICAgICAgICAgICAgICAgICAgICAgImluZmxhdGU6ICAgICAgICAgbGl0ZXJhbCAweCUwMnhcbiIsIHRoaXMudmFsKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5mbGF0ZTogICAgICAgICBsaXRlcmFsIDB4JTAyeFxuIiwgaGVyZS52YWwpKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExJVDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgMzIpIHsKKyAgICAgICAgICAgIGlmIChoZXJlLm9wICYgMzIpIHsKICAgICAgICAgICAgICAgICBUcmFjZXZ2KChzdGRlcnIsICJpbmZsYXRlOiAgICAgICAgIGVuZCBvZiBibG9ja1xuIikpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrID0gLTE7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRoaXMub3AgJiA2NCkgeworICAgICAgICAgICAgaWYgKGhlcmUub3AgJiA2NCkgewogICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSI7CiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWduZWQpKHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWduZWQpKGhlcmUub3ApICYgMTU7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IExFTkVYVDsKICAgICAgICAgY2FzZSBMRU5FWFQ6CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBEUk9QQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IHN0YXRlLT5leHRyYTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgbGVuZ3RoICV1XG4iLCBzdGF0ZS0+bGVuZ3RoKSk7CisgICAgICAgICAgICBzdGF0ZS0+d2FzID0gc3RhdGUtPmxlbmd0aDsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gRElTVDsKICAgICAgICAgY2FzZSBESVNUOgogICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgIHRoaXMgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsKLSAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKSh0aGlzLmJpdHMpIDw9IGJpdHMpIGJyZWFrOworICAgICAgICAgICAgICAgIGhlcmUgPSBzdGF0ZS0+ZGlzdGNvZGVbQklUUyhzdGF0ZS0+ZGlzdGJpdHMpXTsKKyAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkKShoZXJlLmJpdHMpIDw9IGJpdHMpIGJyZWFrOwogICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoKHRoaXMub3AgJiAweGYwKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbGFzdCA9IHRoaXM7CisgICAgICAgICAgICBpZiAoKGhlcmUub3AgJiAweGYwKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgbGFzdCA9IGhlcmU7CiAgICAgICAgICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgICAgICAgICB0aGlzID0gc3RhdGUtPmRpc3Rjb2RlW2xhc3QudmFsICsKKyAgICAgICAgICAgICAgICAgICAgaGVyZSA9IHN0YXRlLT5kaXN0Y29kZVtsYXN0LnZhbCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEJJVFMobGFzdC5iaXRzICsgbGFzdC5vcCkgPj4gbGFzdC5iaXRzKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIHRoaXMuYml0cykgPD0gYml0cykgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpKGxhc3QuYml0cyArIGhlcmUuYml0cykgPD0gYml0cykgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIERST1BCSVRTKGxhc3QuYml0cyk7CisgICAgICAgICAgICAgICAgc3RhdGUtPmJhY2sgKz0gbGFzdC5iaXRzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgRFJPUEJJVFModGhpcy5iaXRzKTsKLSAgICAgICAgICAgIGlmICh0aGlzLm9wICYgNjQpIHsKKyAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CisgICAgICAgICAgICBzdGF0ZS0+YmFjayArPSBoZXJlLmJpdHM7CisgICAgICAgICAgICBpZiAoaGVyZS5vcCAmIDY0KSB7CiAgICAgICAgICAgICAgICAgc3RybS0+bXNnID0gKGNoYXIgKikiaW52YWxpZCBkaXN0YW5jZSBjb2RlIjsKICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5vZmZzZXQgPSAodW5zaWduZWQpdGhpcy52YWw7Ci0gICAgICAgICAgICBzdGF0ZS0+ZXh0cmEgPSAodW5zaWduZWQpKHRoaXMub3ApICYgMTU7CisgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ID0gKHVuc2lnbmVkKWhlcmUudmFsOworICAgICAgICAgICAgc3RhdGUtPmV4dHJhID0gKHVuc2lnbmVkKShoZXJlLm9wKSAmIDE1OwogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBESVNURVhUOwogICAgICAgICBjYXNlIERJU1RFWFQ6CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmV4dHJhKSB7CiAgICAgICAgICAgICAgICAgTkVFREJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+b2Zmc2V0ICs9IEJJVFMoc3RhdGUtPmV4dHJhKTsKICAgICAgICAgICAgICAgICBEUk9QQklUUyhzdGF0ZS0+ZXh0cmEpOworICAgICAgICAgICAgICAgIHN0YXRlLT5iYWNrICs9IHN0YXRlLT5leHRyYTsKICAgICAgICAgICAgIH0KICNpZmRlZiBJTkZMQVRFX1NUUklDVAogICAgICAgICAgICAgaWYgKHN0YXRlLT5vZmZzZXQgPiBzdGF0ZS0+ZG1heCkgewpAQCAtMTAzNiwxMSArMTEwMyw2IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+b2Zmc2V0ID4gc3RhdGUtPndoYXZlICsgb3V0IC0gbGVmdCkgewotICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9IChjaGFyICopImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIjsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIFRyYWNldnYoKHN0ZGVyciwgImluZmxhdGU6ICAgICAgICAgZGlzdGFuY2UgJXVcbiIsIHN0YXRlLT5vZmZzZXQpKTsKICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gTUFUQ0g7CiAgICAgICAgIGNhc2UgTUFUQ0g6CkBAIC0xMDQ4LDEyICsxMTEwLDMyIEBACiAgICAgICAgICAgICBjb3B5ID0gb3V0IC0gbGVmdDsKICAgICAgICAgICAgIGlmIChzdGF0ZS0+b2Zmc2V0ID4gY29weSkgeyAgICAgICAgIC8qIGNvcHkgZnJvbSB3aW5kb3cgKi8KICAgICAgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPm9mZnNldCAtIGNvcHk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+d3JpdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29weSAtPSBzdGF0ZS0+d3JpdGU7CisgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+d2hhdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLT5zYW5lKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayI7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IEJBRDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgICAgICAgICAgICAgICAgIFRyYWNlKChzdGRlcnIsICJpbmZsYXRlLmMgdG9vIGZhclxuIikpOworICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLT53aGF2ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBzdGF0ZS0+bGVuZ3RoKSBjb3B5ID0gc3RhdGUtPmxlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvcHkgPiBsZWZ0KSBjb3B5ID0gbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCAtPSBjb3B5OworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuZ3RoIC09IGNvcHk7CisgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdXQrKyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKC0tY29weSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS0+bGVuZ3RoID09IDApIHN0YXRlLT5tb2RlID0gTEVOOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoY29weSA+IHN0YXRlLT53bmV4dCkgeworICAgICAgICAgICAgICAgICAgICBjb3B5IC09IHN0YXRlLT53bmV4dDsKICAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLT53aW5kb3cgKyAoc3RhdGUtPndzaXplIC0gY29weSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZnJvbSA9IHN0YXRlLT53aW5kb3cgKyAoc3RhdGUtPndyaXRlIC0gY29weSk7CisgICAgICAgICAgICAgICAgICAgIGZyb20gPSBzdGF0ZS0+d2luZG93ICsgKHN0YXRlLT53bmV4dCAtIGNvcHkpOwogICAgICAgICAgICAgICAgIGlmIChjb3B5ID4gc3RhdGUtPmxlbmd0aCkgY29weSA9IHN0YXRlLT5sZW5ndGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IGZyb20gb3V0cHV0ICovCkBAIC0xMTQ2LDcgKzEyMjgsOCBAQAogICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9CiAgICAgICAgICAgICBVUERBVEUoc3RhdGUtPmNoZWNrLCBzdHJtLT5uZXh0X291dCAtIG91dCwgb3V0KTsKICAgICBzdHJtLT5kYXRhX3R5cGUgPSBzdGF0ZS0+Yml0cyArIChzdGF0ZS0+bGFzdCA/IDY0IDogMCkgKwotICAgICAgICAgICAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBUWVBFID8gMTI4IDogMCk7CisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IFRZUEUgPyAxMjggOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IExFTl8gfHwgc3RhdGUtPm1vZGUgPT0gQ09QWV8gPyAyNTYgOiAwKTsKICAgICBpZiAoKChpbiA9PSAwICYmIG91dCA9PSAwKSB8fCBmbHVzaCA9PSBaX0ZJTklTSCkgJiYgcmV0ID09IFpfT0spCiAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOwogICAgIHJldHVybiByZXQ7CkBAIC0xMzY2LDMgKzE0NDksMzIgQEAKICAgICBkZXN0LT5zdGF0ZSA9IChzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICopY29weTsKICAgICByZXR1cm4gWl9PSzsKIH0KKworaW50IFpFWFBPUlQgaW5mbGF0ZVVuZGVybWluZShzdHJtLCBzdWJ2ZXJ0KQorel9zdHJlYW1wIHN0cm07CitpbnQgc3VidmVydDsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0YXRlLT5zYW5lID0gIXN1YnZlcnQ7CisjaWZkZWYgSU5GTEFURV9BTExPV19JTlZBTElEX0RJU1RBTkNFX1RPT0ZBUl9BUlJSCisgICAgcmV0dXJuIFpfT0s7CisjZWxzZQorICAgIHN0YXRlLT5zYW5lID0gMTsKKyAgICByZXR1cm4gWl9EQVRBX0VSUk9SOworI2VuZGlmCit9CisKK2xvbmcgWkVYUE9SVCBpbmZsYXRlTWFyayhzdHJtKQorel9zdHJlYW1wIHN0cm07Cit7CisgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKKworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiAtMUwgPDwgMTY7CisgICAgc3RhdGUgPSAoc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICopc3RybS0+c3RhdGU7CisgICAgcmV0dXJuICgobG9uZykoc3RhdGUtPmJhY2spIDw8IDE2KSArCisgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBDT1BZID8gc3RhdGUtPmxlbmd0aCA6CisgICAgICAgICAgICAoc3RhdGUtPm1vZGUgPT0gTUFUQ0ggPyBzdGF0ZS0+d2FzIC0gc3RhdGUtPmxlbmd0aCA6IDApKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZsYXRlLmggYi9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5oCmluZGV4IDA3YmQzZTcuLjk1ZjQ5ODZkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmgKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmggLS0gaW50ZXJuYWwgaW5mbGF0ZSBzdGF0ZSBkZWZpbml0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwOSBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzIsMTEgKzMyLDEzIEBACiAgICAgICAgIFRZUEUsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIHR5cGUgYml0cywgaW5jbHVkaW5nIGxhc3QtZmxhZyBiaXQgKi8KICAgICAgICAgVFlQRURPLCAgICAgLyogaTogc2FtZSwgYnV0IHNraXAgY2hlY2sgdG8gZXhpdCBpbmZsYXRlIG9uIG5ldyBibG9jayAqLwogICAgICAgICBTVE9SRUQsICAgICAvKiBpOiB3YWl0aW5nIGZvciBzdG9yZWQgc2l6ZSAobGVuZ3RoIGFuZCBjb21wbGVtZW50KSAqLworICAgICAgICBDT1BZXywgICAgICAvKiBpL286IHNhbWUgYXMgQ09QWSBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLwogICAgICAgICBDT1BZLCAgICAgICAvKiBpL286IHdhaXRpbmcgZm9yIGlucHV0IG9yIG91dHB1dCB0byBjb3B5IHN0b3JlZCBibG9jayAqLwogICAgICAgICBUQUJMRSwgICAgICAvKiBpOiB3YWl0aW5nIGZvciBkeW5hbWljIGJsb2NrIHRhYmxlIGxlbmd0aHMgKi8KICAgICAgICAgTEVOTEVOUywgICAgLyogaTogd2FpdGluZyBmb3IgY29kZSBsZW5ndGggY29kZSBsZW5ndGhzICovCiAgICAgICAgIENPREVMRU5TLCAgIC8qIGk6IHdhaXRpbmcgZm9yIGxlbmd0aC9saXQgYW5kIGRpc3RhbmNlIGNvZGUgbGVuZ3RocyAqLwotICAgICAgICAgICAgTEVOLCAgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdCBjb2RlICovCisgICAgICAgICAgICBMRU5fLCAgICAgICAvKiBpOiBzYW1lIGFzIExFTiBiZWxvdywgYnV0IG9ubHkgZmlyc3QgdGltZSBpbiAqLworICAgICAgICAgICAgTEVOLCAgICAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoL2xpdC9lb2IgY29kZSAqLwogICAgICAgICAgICAgTEVORVhULCAgICAgLyogaTogd2FpdGluZyBmb3IgbGVuZ3RoIGV4dHJhIGJpdHMgKi8KICAgICAgICAgICAgIERJU1QsICAgICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGNvZGUgKi8KICAgICAgICAgICAgIERJU1RFWFQsICAgIC8qIGk6IHdhaXRpbmcgZm9yIGRpc3RhbmNlIGV4dHJhIGJpdHMgKi8KQEAgLTUzLDE5ICs1NSwyMSBAQAogLyoKICAgICBTdGF0ZSB0cmFuc2l0aW9ucyBiZXR3ZWVuIGFib3ZlIG1vZGVzIC0KIAotICAgIChtb3N0IG1vZGVzIGNhbiBnbyB0byB0aGUgQkFEIG9yIE1FTSBtb2RlIC0tIG5vdCBzaG93biBmb3IgY2xhcml0eSkKKyAgICAobW9zdCBtb2RlcyBjYW4gZ28gdG8gQkFEIG9yIE1FTSBvbiBlcnJvciAtLSBub3Qgc2hvd24gZm9yIGNsYXJpdHkpCiAKICAgICBQcm9jZXNzIGhlYWRlcjoKLSAgICAgICAgSEVBRCAtPiAoZ3ppcCkgb3IgKHpsaWIpCi0gICAgICAgIChnemlwKSAtPiBGTEFHUyAtPiBUSU1FIC0+IE9TIC0+IEVYTEVOIC0+IEVYVFJBIC0+IE5BTUUKLSAgICAgICAgTkFNRSAtPiBDT01NRU5UIC0+IEhDUkMgLT4gVFlQRQorICAgICAgICBIRUFEIC0+IChnemlwKSBvciAoemxpYikgb3IgKHJhdykKKyAgICAgICAgKGd6aXApIC0+IEZMQUdTIC0+IFRJTUUgLT4gT1MgLT4gRVhMRU4gLT4gRVhUUkEgLT4gTkFNRSAtPiBDT01NRU5UIC0+CisgICAgICAgICAgICAgICAgICBIQ1JDIC0+IFRZUEUKICAgICAgICAgKHpsaWIpIC0+IERJQ1RJRCBvciBUWVBFCiAgICAgICAgIERJQ1RJRCAtPiBESUNUIC0+IFRZUEUKKyAgICAgICAgKHJhdykgLT4gVFlQRURPCiAgICAgUmVhZCBkZWZsYXRlIGJsb2NrczoKLSAgICAgICAgICAgIFRZUEUgLT4gU1RPUkVEIG9yIFRBQkxFIG9yIExFTiBvciBDSEVDSwotICAgICAgICAgICAgU1RPUkVEIC0+IENPUFkgLT4gVFlQRQotICAgICAgICAgICAgVEFCTEUgLT4gTEVOTEVOUyAtPiBDT0RFTEVOUyAtPiBMRU4KLSAgICBSZWFkIGRlZmxhdGUgY29kZXM6CisgICAgICAgICAgICBUWVBFIC0+IFRZUEVETyAtPiBTVE9SRUQgb3IgVEFCTEUgb3IgTEVOXyBvciBDSEVDSworICAgICAgICAgICAgU1RPUkVEIC0+IENPUFlfIC0+IENPUFkgLT4gVFlQRQorICAgICAgICAgICAgVEFCTEUgLT4gTEVOTEVOUyAtPiBDT0RFTEVOUyAtPiBMRU5fCisgICAgICAgICAgICBMRU5fIC0+IExFTgorICAgIFJlYWQgZGVmbGF0ZSBjb2RlcyBpbiBmaXhlZCBvciBkeW5hbWljIGJsb2NrOgogICAgICAgICAgICAgICAgIExFTiAtPiBMRU5FWFQgb3IgTElUIG9yIFRZUEUKICAgICAgICAgICAgICAgICBMRU5FWFQgLT4gRElTVCAtPiBESVNURVhUIC0+IE1BVENIIC0+IExFTgogICAgICAgICAgICAgICAgIExJVCAtPiBMRU4KQEAgLTczLDcgKzc3LDcgQEAKICAgICAgICAgQ0hFQ0sgLT4gTEVOR1RIIC0+IERPTkUKICAqLwogCi0vKiBzdGF0ZSBtYWludGFpbmVkIGJldHdlZW4gaW5mbGF0ZSgpIGNhbGxzLiAgQXBwcm94aW1hdGVseSA3SyBieXRlcy4gKi8KKy8qIHN0YXRlIG1haW50YWluZWQgYmV0d2VlbiBpbmZsYXRlKCkgY2FsbHMuICBBcHByb3hpbWF0ZWx5IDEwSyBieXRlcy4gKi8KIHN0cnVjdCBpbmZsYXRlX3N0YXRlIHsKICAgICBpbmZsYXRlX21vZGUgbW9kZTsgICAgICAgICAgLyogY3VycmVudCBpbmZsYXRlIG1vZGUgKi8KICAgICBpbnQgbGFzdDsgICAgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBwcm9jZXNzaW5nIGxhc3QgYmxvY2sgKi8KQEAgLTg4LDcgKzkyLDcgQEAKICAgICB1bnNpZ25lZCB3Yml0czsgICAgICAgICAgICAgLyogbG9nIGJhc2UgMiBvZiByZXF1ZXN0ZWQgd2luZG93IHNpemUgKi8KICAgICB1bnNpZ25lZCB3c2l6ZTsgICAgICAgICAgICAgLyogd2luZG93IHNpemUgb3IgemVybyBpZiBub3QgdXNpbmcgd2luZG93ICovCiAgICAgdW5zaWduZWQgd2hhdmU7ICAgICAgICAgICAgIC8qIHZhbGlkIGJ5dGVzIGluIHRoZSB3aW5kb3cgKi8KLSAgICB1bnNpZ25lZCB3cml0ZTsgICAgICAgICAgICAgLyogd2luZG93IHdyaXRlIGluZGV4ICovCisgICAgdW5zaWduZWQgd25leHQ7ICAgICAgICAgICAgIC8qIHdpbmRvdyB3cml0ZSBpbmRleCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICp3aW5kb3c7ICAvKiBhbGxvY2F0ZWQgc2xpZGluZyB3aW5kb3csIGlmIG5lZWRlZCAqLwogICAgICAgICAvKiBiaXQgYWNjdW11bGF0b3IgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogaW5wdXQgYml0IGFjY3VtdWxhdG9yICovCkBAIC0xMTIsNCArMTE2LDcgQEAKICAgICB1bnNpZ25lZCBzaG9ydCBsZW5zWzMyMF07ICAgLyogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGNvZGUgbGVuZ3RocyAqLwogICAgIHVuc2lnbmVkIHNob3J0IHdvcmtbMjg4XTsgICAvKiB3b3JrIGFyZWEgZm9yIGNvZGUgdGFibGUgYnVpbGRpbmcgKi8KICAgICBjb2RlIGNvZGVzW0VOT1VHSF07ICAgICAgICAgLyogc3BhY2UgZm9yIGNvZGUgdGFibGVzICovCisgICAgaW50IHNhbmU7ICAgICAgICAgICAgICAgICAgIC8qIGlmIGZhbHNlLCBhbGxvdyBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgKi8KKyAgICBpbnQgYmFjazsgICAgICAgICAgICAgICAgICAgLyogYml0cyBiYWNrIG9mIGxhc3QgdW5wcm9jZXNzZWQgbGVuZ3RoL2xpdCAqLworICAgIHVuc2lnbmVkIHdhczsgICAgICAgICAgICAgICAvKiBpbml0aWFsIGxlbmd0aCBvZiBtYXRjaCAqLwogfTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKaW5kZXggOGE5YzEzZi4uMTFlOWM1MiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5jIC0tIGdlbmVyYXRlIEh1ZmZtYW4gdHJlZXMgZm9yIGVmZmljaWVudCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuMyBDb3B5cmlnaHQgMTk5NS0yMDA1IE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMjksNyArMjksNyBAQAogICAgdGFibGUgaW5kZXggYml0cy4gIEl0IHdpbGwgZGlmZmVyIGlmIHRoZSByZXF1ZXN0IGlzIGdyZWF0ZXIgdGhhbiB0aGUKICAgIGxvbmdlc3QgY29kZSBvciBpZiBpdCBpcyBsZXNzIHRoYW4gdGhlIHNob3J0ZXN0IGNvZGUuCiAgKi8KLWludCBpbmZsYXRlX3RhYmxlKHR5cGUsIGxlbnMsIGNvZGVzLCB0YWJsZSwgYml0cywgd29yaykKK2ludCBaTElCX0lOVEVSTkFMIGluZmxhdGVfdGFibGUodHlwZSwgbGVucywgY29kZXMsIHRhYmxlLCBiaXRzLCB3b3JrKQogY29kZXR5cGUgdHlwZTsKIHVuc2lnbmVkIHNob3J0IEZBUiAqbGVuczsKIHVuc2lnbmVkIGNvZGVzOwpAQCAtNTAsNyArNTAsNyBAQAogICAgIHVuc2lnbmVkIGZpbGw7ICAgICAgICAgICAgICAvKiBpbmRleCBmb3IgcmVwbGljYXRpbmcgZW50cmllcyAqLwogICAgIHVuc2lnbmVkIGxvdzsgICAgICAgICAgICAgICAvKiBsb3cgYml0cyBmb3IgY3VycmVudCByb290IGVudHJ5ICovCiAgICAgdW5zaWduZWQgbWFzazsgICAgICAgICAgICAgIC8qIG1hc2sgZm9yIGxvdyByb290IGJpdHMgKi8KLSAgICBjb2RlIHRoaXM7ICAgICAgICAgICAgICAgICAgLyogdGFibGUgZW50cnkgZm9yIGR1cGxpY2F0aW9uICovCisgICAgY29kZSBoZXJlOyAgICAgICAgICAgICAgICAgIC8qIHRhYmxlIGVudHJ5IGZvciBkdXBsaWNhdGlvbiAqLwogICAgIGNvZGUgRkFSICpuZXh0OyAgICAgICAgICAgICAvKiBuZXh0IGF2YWlsYWJsZSBzcGFjZSBpbiB0YWJsZSAqLwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IEZBUiAqYmFzZTsgICAgIC8qIGJhc2UgdmFsdWUgdGFibGUgdG8gdXNlICovCiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRkFSICpleHRyYTsgICAgLyogZXh0cmEgYml0cyB0YWJsZSB0byB1c2UgKi8KQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAotICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgMjAxLCAxOTZ9OworICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzMsIDE5NX07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTExNSwxNSArMTE1LDE1IEBACiAgICAgICAgIGlmIChjb3VudFttYXhdICE9IDApIGJyZWFrOwogICAgIGlmIChyb290ID4gbWF4KSByb290ID0gbWF4OwogICAgIGlmIChtYXggPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHN5bWJvbHMgdG8gY29kZSBhdCBhbGwgKi8KLSAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCi0gICAgICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBjaGFyKTE7Ci0gICAgICAgIHRoaXMudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7Ci0gICAgICAgICooKnRhYmxlKSsrID0gdGhpczsgICAgICAgICAgICAgLyogbWFrZSBhIHRhYmxlIHRvIGZvcmNlIGFuIGVycm9yICovCi0gICAgICAgICooKnRhYmxlKSsrID0gdGhpczsKKyAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKTY0OyAgICAvKiBpbnZhbGlkIGNvZGUgbWFya2VyICovCisgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKTE7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgICooKnRhYmxlKSsrID0gaGVyZTsgICAgICAgICAgICAgLyogbWFrZSBhIHRhYmxlIHRvIGZvcmNlIGFuIGVycm9yICovCisgICAgICAgICooKnRhYmxlKSsrID0gaGVyZTsKICAgICAgICAgKmJpdHMgPSAxOwogICAgICAgICByZXR1cm4gMDsgICAgIC8qIG5vIHN5bWJvbHMsIGJ1dCB3YWl0IGZvciBkZWNvZGluZyB0byByZXBvcnQgZXJyb3IgKi8KICAgICB9Ci0gICAgZm9yIChtaW4gPSAxOyBtaW4gPD0gTUFYQklUUzsgbWluKyspCisgICAgZm9yIChtaW4gPSAxOyBtaW4gPCBtYXg7IG1pbisrKQogICAgICAgICBpZiAoY291bnRbbWluXSAhPSAwKSBicmVhazsKICAgICBpZiAocm9vdCA8IG1pbikgcm9vdCA9IG1pbjsKIApAQCAtMTY2LDExICsxNjYsMTAgQEAKICAgICAgICBlbnRlcmVkIGluIHRoZSB0YWJsZXMuCiAKICAgICAgICB1c2VkIGtlZXBzIHRyYWNrIG9mIGhvdyBtYW55IHRhYmxlIGVudHJpZXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBmcm9tIHRoZQotICAgICAgIHByb3ZpZGVkICp0YWJsZSBzcGFjZS4gIEl0IGlzIGNoZWNrZWQgd2hlbiBhIExFTlMgdGFibGUgaXMgYmVpbmcgbWFkZQotICAgICAgIGFnYWluc3QgdGhlIHNwYWNlIGluICp0YWJsZSwgRU5PVUdILCBtaW51cyB0aGUgbWF4aW11bSBzcGFjZSBuZWVkZWQgYnkKLSAgICAgICB0aGUgd29yc3QgY2FzZSBkaXN0YW5jZSBjb2RlLCBNQVhELiAgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgdGhlCi0gICAgICAgc3VmZmljaWVuY3kgb2YgRU5PVUdIIGhhcyBub3QgYmVlbiBwcm92ZW4gZXhoYXVzdGl2ZWx5LCBoZW5jZSB0aGUgY2hlY2suCi0gICAgICAgVGhpcyBhc3N1bWVzIHRoYXQgd2hlbiB0eXBlID09IExFTlMsIGJpdHMgPT0gOS4KKyAgICAgICBwcm92aWRlZCAqdGFibGUgc3BhY2UuICBJdCBpcyBjaGVja2VkIGZvciBMRU5TIGFuZCBESVNUIHRhYmxlcyBhZ2FpbnN0CisgICAgICAgdGhlIGNvbnN0YW50cyBFTk9VR0hfTEVOUyBhbmQgRU5PVUdIX0RJU1RTIHRvIGd1YXJkIGFnYWluc3QgY2hhbmdlcyBpbgorICAgICAgIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSBjb25zdGFudHMuICBTZWUgdGhlIGNvbW1lbnRzIGluIGluZnRyZWVzLmgKKyAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogICAgICAgIHN5bSBpbmNyZW1lbnRzIHRocm91Z2ggYWxsIHN5bWJvbHMsIGFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzIHdoZW4KICAgICAgICBhbGwgY29kZXMgb2YgbGVuZ3RoIG1heCwgaS5lLiBhbGwgY29kZXMsIGhhdmUgYmVlbiBwcm9jZXNzZWQuICBUaGlzCkBAIC0yMDksMjQgKzIwOCwyNSBAQAogICAgIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCiAKICAgICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi8KLSAgICBpZiAodHlwZSA9PSBMRU5TICYmIHVzZWQgPj0gRU5PVUdIIC0gTUFYRCkKKyAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgLyogcHJvY2VzcyBhbGwgY29kZXMgYW5kIG1ha2UgdGFibGUgZW50cmllcyAqLwogICAgIGZvciAoOzspIHsKICAgICAgICAgLyogY3JlYXRlIHRhYmxlIGVudHJ5ICovCi0gICAgICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKKyAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpKGxlbiAtIGRyb3ApOwogICAgICAgICBpZiAoKGludCkod29ya1tzeW1dKSA8IGVuZCkgewotICAgICAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKTA7Ci0gICAgICAgICAgICB0aGlzLnZhbCA9IHdvcmtbc3ltXTsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICAgICAgaGVyZS52YWwgPSB3b3JrW3N5bV07CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKGludCkod29ya1tzeW1dKSA+IGVuZCkgewotICAgICAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKShleHRyYVt3b3JrW3N5bV1dKTsKLSAgICAgICAgICAgIHRoaXMudmFsID0gYmFzZVt3b3JrW3N5bV1dOworICAgICAgICAgICAgaGVyZS5vcCA9ICh1bnNpZ25lZCBjaGFyKShleHRyYVt3b3JrW3N5bV1dKTsKKyAgICAgICAgICAgIGhlcmUudmFsID0gYmFzZVt3b3JrW3N5bV1dOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhpcy5vcCA9ICh1bnNpZ25lZCBjaGFyKSgzMiArIDY0KTsgICAgICAgICAvKiBlbmQgb2YgYmxvY2sgKi8KLSAgICAgICAgICAgIHRoaXMudmFsID0gMDsKKyAgICAgICAgICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcikoMzIgKyA2NCk7ICAgICAgICAgLyogZW5kIG9mIGJsb2NrICovCisgICAgICAgICAgICBoZXJlLnZhbCA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICAvKiByZXBsaWNhdGUgZm9yIHRob3NlIGluZGljZXMgd2l0aCBsb3cgbGVuIGJpdHMgZXF1YWwgdG8gaHVmZiAqLwpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgIG1pbiA9IGZpbGw7ICAgICAgICAgICAgICAgICAvKiBzYXZlIG9mZnNldCB0byBuZXh0IHRhYmxlICovCiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGZpbGwgLT0gaW5jcjsKLSAgICAgICAgICAgIG5leHRbKGh1ZmYgPj4gZHJvcCkgKyBmaWxsXSA9IHRoaXM7CisgICAgICAgICAgICBuZXh0WyhodWZmID4+IGRyb3ApICsgZmlsbF0gPSBoZXJlOwogICAgICAgICB9IHdoaWxlIChmaWxsICE9IDApOwogCiAgICAgICAgIC8qIGJhY2t3YXJkcyBpbmNyZW1lbnQgdGhlIGxlbi1iaXQgY29kZSBodWZmICovCkBAIC0yNzcsNyArMjc3LDggQEAKIAogICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOwotICAgICAgICAgICAgaWYgKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSCAtIE1BWEQpCisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAgICAgICAgICh0eXBlID09IERJU1RTICYmIHVzZWQgPj0gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICAgICAgLyogcG9pbnQgZW50cnkgaW4gcm9vdCB0YWJsZSB0byBzdWItdGFibGUgKi8KQEAgLTI5NSwyMCArMjk2LDIwIEBACiAgICAgICAgdGhyb3VnaCBoaWdoIGluZGV4IGJpdHMuICBXaGVuIHRoZSBjdXJyZW50IHN1Yi10YWJsZSBpcyBmaWxsZWQsIHRoZSBsb29wCiAgICAgICAgZHJvcHMgYmFjayB0byB0aGUgcm9vdCB0YWJsZSB0byBmaWxsIGluIGFueSByZW1haW5pbmcgZW50cmllcyB0aGVyZS4KICAgICAgKi8KLSAgICB0aGlzLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KLSAgICB0aGlzLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7Ci0gICAgdGhpcy52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKKyAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgICAgIC8qIGludmFsaWQgY29kZSBtYXJrZXIgKi8KKyAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgaGVyZS52YWwgPSAodW5zaWduZWQgc2hvcnQpMDsKICAgICB3aGlsZSAoaHVmZiAhPSAwKSB7CiAgICAgICAgIC8qIHdoZW4gZG9uZSB3aXRoIHN1Yi10YWJsZSwgZHJvcCBiYWNrIHRvIHJvb3QgdGFibGUgKi8KICAgICAgICAgaWYgKGRyb3AgIT0gMCAmJiAoaHVmZiAmIG1hc2spICE9IGxvdykgewogICAgICAgICAgICAgZHJvcCA9IDA7CiAgICAgICAgICAgICBsZW4gPSByb290OwogICAgICAgICAgICAgbmV4dCA9ICp0YWJsZTsKLSAgICAgICAgICAgIHRoaXMuYml0cyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKKyAgICAgICAgICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKWxlbjsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHB1dCBpbnZhbGlkIGNvZGUgbWFya2VyIGluIHRhYmxlICovCi0gICAgICAgIG5leHRbaHVmZiA+PiBkcm9wXSA9IHRoaXM7CisgICAgICAgIG5leHRbaHVmZiA+PiBkcm9wXSA9IGhlcmU7CiAKICAgICAgICAgLyogYmFja3dhcmRzIGluY3JlbWVudCB0aGUgbGVuLWJpdCBjb2RlIGh1ZmYgKi8KICAgICAgICAgaW5jciA9IDFVIDw8IChsZW4gLSAxKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5oIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKaW5kZXggYjExMDRjOC4uYmFhNTNhMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmgKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5oIC0tIGhlYWRlciB0byB1c2UgaW5mdHJlZXMuYwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTM1LDIxICszNSwyOCBAQAogICAgIDAxMDAwMDAwIC0gaW52YWxpZCBjb2RlCiAgKi8KIAotLyogTWF4aW11bSBzaXplIG9mIGR5bmFtaWMgdHJlZS4gIFRoZSBtYXhpbXVtIGZvdW5kIGluIGEgbG9uZyBidXQgbm9uLQotICAgZXhoYXVzdGl2ZSBzZWFyY2ggd2FzIDE0NDQgY29kZSBzdHJ1Y3R1cmVzICg4NTIgZm9yIGxlbmd0aC9saXRlcmFscwotICAgYW5kIDU5MiBmb3IgZGlzdGFuY2VzLCB0aGUgbGF0dGVyIGFjdHVhbGx5IHRoZSByZXN1bHQgb2YgYW4KLSAgIGV4aGF1c3RpdmUgc2VhcmNoKS4gIFRoZSB0cnVlIG1heGltdW0gaXMgbm90IGtub3duLCBidXQgdGhlIHZhbHVlCi0gICBiZWxvdyBpcyBtb3JlIHRoYW4gc2FmZS4gKi8KLSNkZWZpbmUgRU5PVUdIIDIwNDgKLSNkZWZpbmUgTUFYRCA1OTIKKy8qIE1heGltdW0gc2l6ZSBvZiB0aGUgZHluYW1pYyB0YWJsZS4gIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2RlIHN0cnVjdHVyZXMgaXMKKyAgIDE0NDQsIHdoaWNoIGlzIHRoZSBzdW0gb2YgODUyIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcyBhbmQgNTkyIGZvciBkaXN0YW5jZQorICAgY29kZXMuICBUaGVzZSB2YWx1ZXMgd2VyZSBmb3VuZCBieSBleGhhdXN0aXZlIHNlYXJjaGVzIHVzaW5nIHRoZSBwcm9ncmFtCisgICBleGFtcGxlcy9lbm91Z2guYyBmb3VuZCBpbiB0aGUgemxpYiBkaXN0cmlidHV0aW9uLiAgVGhlIGFyZ3VtZW50cyB0byB0aGF0CisgICBwcm9ncmFtIGFyZSB0aGUgbnVtYmVyIG9mIHN5bWJvbHMsIHRoZSBpbml0aWFsIHJvb3QgdGFibGUgc2l6ZSwgYW5kIHRoZQorICAgbWF4aW11bSBiaXQgbGVuZ3RoIG9mIGEgY29kZS4gICJlbm91Z2ggMjg2IDkgMTUiIGZvciBsaXRlcmFsL2xlbmd0aCBjb2RlcworICAgcmV0dXJucyByZXR1cm5zIDg1MiwgYW5kICJlbm91Z2ggMzAgNiAxNSIgZm9yIGRpc3RhbmNlIGNvZGVzIHJldHVybnMgNTkyLgorICAgVGhlIGluaXRpYWwgcm9vdCB0YWJsZSBzaXplICg5IG9yIDYpIGlzIGZvdW5kIGluIHRoZSBmaWZ0aCBhcmd1bWVudCBvZiB0aGUKKyAgIGluZmxhdGVfdGFibGUoKSBjYWxscyBpbiBpbmZsYXRlLmMgYW5kIGluZmJhY2suYy4gIElmIHRoZSByb290IHRhYmxlIHNpemUgaXMKKyAgIGNoYW5nZWQsIHRoZW4gdGhlc2UgbWF4aW11bSBzaXplcyB3b3VsZCBiZSBuZWVkIHRvIGJlIHJlY2FsY3VsYXRlZCBhbmQKKyAgIHVwZGF0ZWQuICovCisjZGVmaW5lIEVOT1VHSF9MRU5TIDg1MgorI2RlZmluZSBFTk9VR0hfRElTVFMgNTkyCisjZGVmaW5lIEVOT1VHSCAoRU5PVUdIX0xFTlMrRU5PVUdIX0RJU1RTKQogCi0vKiBUeXBlIG9mIGNvZGUgdG8gYnVpbGQgZm9yIGluZnRhYmxlKCkgKi8KKy8qIFR5cGUgb2YgY29kZSB0byBidWlsZCBmb3IgaW5mbGF0ZV90YWJsZSgpICovCiB0eXBlZGVmIGVudW0gewogICAgIENPREVTLAogICAgIExFTlMsCiAgICAgRElTVFMKIH0gY29kZXR5cGU7CiAKLWV4dGVybiBpbnQgaW5mbGF0ZV90YWJsZSBPRigoY29kZXR5cGUgdHlwZSwgdW5zaWduZWQgc2hvcnQgRkFSICpsZW5zLAoraW50IFpMSUJfSU5URVJOQUwgaW5mbGF0ZV90YWJsZSBPRigoY29kZXR5cGUgdHlwZSwgdW5zaWduZWQgc2hvcnQgRkFSICpsZW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2RlcywgY29kZSBGQVIgKiBGQVIgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBGQVIgKmJpdHMsIHVuc2lnbmVkIHNob3J0IEZBUiAqd29yaykpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbSBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KaW5kZXggYzJhMWZiNS4uNjU3NjQ5MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQorKysgYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCkBAIC0xLDMzICsxLDU3IEBACiAkISBtYWtlIGxpYnogdW5kZXIgVk1TIHdyaXR0ZW4gYnkKICQhIE1hcnRpbiBQLkouIFppbnNlcgotJCEgPHppbnNlckB6aW5zZXIubm8taXAuaW5mbyBvciB6aW5zZXJAc3lzZGV2LmRldXRzY2hlLWJvZXJzZS5jb20+CiskIQorJCEgSW4gY2FzZSBvZiBwcm9ibGVtcyB3aXRoIHRoZSBpbnN0YWxsIHlvdSBtaWdodCBjb250YWN0IG1lIGF0CiskISB6aW5zZXJAemluc2VyLm5vLWlwLmluZm8ocHJlZmVycmVkKSBvcgorJCEgemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tICh3b3JrKQorJCEKKyQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKKyQhCiskIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDYwMTIwIEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgorJCEgMC4wMiAyMDA2MTAwOCBBZGFwdCB0byBuZXcgTWFrZWZpbGUuaW4KKyQhIDAuMDMgMjAwOTEyMjQgQWRkIHN1cHBvcnQgZm9yIGxhcmdlIGZpbGUgY2hlY2sKKyQhIDAuMDQgMjAxMDAxMTAgQWRkIG5ldyBnemNsb3NlLCBnemxpYiwgZ3pyZWFkLCBnendyaXRlCiskISAwLjA1IDIwMTAwMjIxIEV4Y2hhbmdlIHpsaWJkZWZzLmggYnkgemNvbmYuaC5pbgogJCEKICQgb24gZXJyb3IgdGhlbiBnb3RvIGVycl9leGl0Ci0kIQotJCEKLSQhIEp1c3Qgc29tZSBnZW5lcmFsIGNvbnN0YW50cy4uLgorJCBzZXQgcHJvYy9wYXJzZT1leHQKICQhCiAkIHRydWUgID0gMQogJCBmYWxzZSA9IDAKICQgdG1wbmFtID0gInRlbXBfIiArIGYkZ2V0anBpKCIiLCJwaWQiKQotJCBTQVkgPSAiV1JJVEUgU1lTJE9VVFBVVCIKKyQgdHQgPSB0bXBuYW0gKyAiLnR4dCIKKyQgdGMgPSB0bXBuYW0gKyAiLmMiCiskIHRoID0gdG1wbmFtICsgIi5oIgorJCBkZWZpbmUvbm9sb2cgdGNvbmZpZyAndGgnCiskIGl0c19kZWNjID0gZmFsc2UKKyQgaXRzX3ZheGMgPSBmYWxzZQorJCBpdHNfZ251YyA9IGZhbHNlCiskIHNfY2FzZSAgID0gRmFsc2UKICQhCiAkISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgogJCEKLSQgTWFrZSAgICAgPSAiIgorJCBNYWtlICAgID0gIiIKICQgbmFtZSAgICAgPSAiWmxpYiIKICQgdmVyc2lvbiAgPSAiPy4/Lj8iCiAkIHZfc3RyaW5nID0gIlpMSUJfVkVSU0lPTiIKICQgdl9maWxlICAgPSAiemxpYi5oIgotJCBjY29wdCAgICA9ICIiCi0kIGxvcHRzICAgID0gIiIKKyQgY2NvcHQgICA9ICIiCiskIGxvcHRzICAgPSAiIgorJCBkbnNybCAgID0gIiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4iCiskIGNvbmZfY2hlY2tfc3RyaW5nID0gIiIKICQgbGlua29ubHkgPSBmYWxzZQogJCBvcHRmaWxlICA9IG5hbWUgKyAiLm9wdCIKLSQgaXRzX2RlY2MgPSBmYWxzZQotJCBpdHNfdmF4YyA9IGZhbHNlCi0kIGl0c19nbnVjID0gZmFsc2UKLSQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0Ci0kIHNfY2FzZSAgID0gZmFsc2UKKyQgbGliZGVmcyAgPSAiIgorJCBheHAgICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmdlLjEwMjQgLmFuZC4gZiRnZXRzeWkoIkhXX01PREVMIikubHQuNDA5NgorJCEKKyQgd2hvYW1pID0gZiRwYXJzZShmJGVudmlvcm5tZW50KCJQcm9jZWR1cmUiKSwsLCwiTk9fQ09OQ0VBTCIpCiskIG15ZGVmICA9IEYkcGFyc2Uod2hvYW1pLCwsIkRFVklDRSIpCiskIG15ZGlyICA9IGYkcGFyc2Uod2hvYW1pLCwsIkRJUkVDVE9SWSIpIC0gIl1bIgorJCBteXByb2MgPSBmJHBhcnNlKHdob2FtaSwsLCJOYW1lIikgKyBmJHBhcnNlKHdob2FtaSwsLCJ0eXBlIikKKyQhCiAkISBDaGVjayBmb3IgTU1LL01NUwogJCEKICQgSWYgRiRTZWFyY2ggKCJTeXMkU3lzdGVtOk1NUy5FWEUiKSAubmVzLiAiIiBUaGVuIE1ha2UgPSAiTU1TIgpAQCAtMzYsMTEgKzYwLDE2IEBACiAkIQogJCBnb3N1YiBmaW5kX3ZlcnNpb24KICQhCiskICBvcGVuL3dyaXRlIHRvcHQgdG1wLm9wdAorJCAgb3Blbi93cml0ZSBvcHRmICdvcHRmaWxlJworJCEKICQgZ29zdWIgY2hlY2tfb3B0cwogJCEKICQhIExvb2sgZm9yIHRoZSBjb21waWxlciB1c2VkCiAkIQogJCBnb3N1YiBjaGVja19jb21waWxlcgorJCBjbG9zZSB0b3B0CiskIQogJCBpZiBpdHNfZGVjYwogJCB0aGVuCiAkICAgY2NvcHQgPSAiL3ByZWZpeD1hbGwiICsgY2NvcHQKQEAgLTYwLDYgKzg5LDUyIEBACiAkICAgIGlmIGYkdHJubG5tKCJTWVMiKS5lcXMuIiIgdGhlbiBkZWZpbmUgc3lzIHN5cyRsaWJyYXJ5OgogJCBlbmRpZgogJCEKKyQhIEJ1aWxkIGEgZmFrZSBjb25maWd1cmUgaW5wdXQgaGVhZGVyCiskIQorJCBvcGVuL3dyaXRlIGNvbmZfaGluIGNvbmZpZy5oaW4KKyQgd3JpdGUgY29uZl9oaW4gIiN1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFIgorJCBjbG9zZSBjb25mX2hpbgorJCEKKyQhCiskIGkgPSAwCiskRklORF9BQ09ORjoKKyQgZm5hbWUgPSBmJGVsZW1lbnQoaSwiIyIsYWNvbmZfaW5fZmlsZSkKKyQgaWYgZm5hbWUgLmVxcy4gIiMiIHRoZW4gZ290byBBTUlTU19FUlIKKyQgaWYgZiRzZWFyY2goZm5hbWUpIC5lcXMuICIiCiskIHRoZW4KKyQgICBpID0gaSArIDEKKyQgICBnb3RvIGZpbmRfYWNvbmYKKyQgZW5kaWYKKyQgb3Blbi9yZWFkL2Vycj1hY29uZl9lcnIgYWNvbmZfaW4gJ2ZuYW1lJworJCBvcGVuL3dyaXRlIGFjb25mIHpjb25mLmgKKyRBQ09ORl9MT09QOgorJCByZWFkL2VuZF9vZl9maWxlPWFjb25mX2V4aXQgYWNvbmZfaW4gbGluZQorJCB3b3JrID0gZiRlZGl0KGxpbmUsICJjb21wcmVzcyx0cmltIikKKyQgaWYgZiRleHRyYWN0KDAsNix3b3JrKSAubmVzLiAiI3VuZGVmIgorJCB0aGVuCiskICAgaWYgZiRleHRyYWN0KDAsMTIsd29yaykgLm5lcy4gIiNjbWFrZWRlZmluZSIKKyQgICB0aGVuCiskICAgICAgIHdyaXRlIGFjb25mIGxpbmUKKyQgICBlbmRpZgorJCBlbHNlCiskICAgY2RlZiA9IGYkZWxlbWVudCgxLCIgIix3b3JrKQorJCAgIGdvc3ViIGNoZWNrX2NvbmZpZworJCBlbmRpZgorJCBnb3RvIGFjb25mX2xvb3AKKyRBQ09ORl9FWElUOgorJCB3cml0ZSBhY29uZiAiI2RlZmluZSBWTVMgMSIKKyQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bmlzdGQuaD4iCiskIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5peGlvLmg+IgorJCB3cml0ZSBhY29uZiAiI2lmZGVmIF9MQVJHRUZJTEUiCiskIHdyaXRlIGFjb25mICIjZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgorJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmc2Vla282NCBmc2Vla28iCiskIHdyaXRlIGFjb25mICIjZGVmaW5lIGxzZWVrNjQgbHNlZWsiCiskIHdyaXRlIGFjb25mICIjZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCBjbG9zZSBhY29uZl9pbgorJCBjbG9zZSBhY29uZgorJCBpZiBmJHNlYXJjaCgiJyd0aCciKSAubmVzLiAiIiB0aGVuIGRlbGV0ZSAndGgnOyoKICQhIEJ1aWxkIHRoZSB0aGluZyBwbGFpbiBvciB3aXRoIG1tcwogJCEKICQgd3JpdGUgc3lzJG91dHB1dCAiQ29tcGlsaW5nIFpsaWIgc291cmNlcyAuLi4iCkBAIC03NCw4ICsxNDksMTQgQEAKICAgICAgICAgICAgICAgICBjcmMzMi5jIHpsaWIuaCB6Y29uZi5oCiAkICAgQ0FMTCBNQUtFIGRlZmxhdGUuT0JKICJDQyAnJ0NDT1BUJyBkZWZsYXRlIiAtCiAgICAgICAgICAgICAgICAgZGVmbGF0ZS5jIGRlZmxhdGUuaCB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCi0kICAgQ0FMTCBNQUtFIGd6aW8uT0JKICJDQyAnJ0NDT1BUJyBnemlvIiAtCi0gICAgICAgICAgICAgICAgZ3ppby5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgZ3pjbG9zZS5PQkogIkNDICcnQ0NPUFQnIGd6Y2xvc2UiIC0KKyAgICAgICAgICAgICAgICBnemNsb3NlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorJCAgIENBTEwgTUFLRSBnemxpYi5PQkogIkNDICcnQ0NPUFQnIGd6bGliIiAtCisgICAgICAgICAgICAgICAgZ3psaWIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGd6cmVhZC5PQkogIkNDICcnQ0NPUFQnIGd6cmVhZCIgLQorICAgICAgICAgICAgICAgIGd6cmVhZC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKKyQgICBDQUxMIE1BS0UgZ3p3cml0ZS5PQkogIkNDICcnQ0NPUFQnIGd6d3JpdGUiIC0KKyAgICAgICAgICAgICAgICBnendyaXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogJCAgIENBTEwgTUFLRSBpbmZiYWNrLk9CSiAiQ0MgJydDQ09QVCcgaW5mYmFjayIgLQogICAgICAgICAgICAgICAgIGluZmJhY2suYyB6dXRpbC5oIGluZnRyZWVzLmggaW5mbGF0ZS5oIGluZmZhc3QuaCBpbmZmaXhlZC5oCiAkICAgQ0FMTCBNQUtFIGluZmZhc3QuT0JKICJDQyAnJ0NDT1BUJyBpbmZmYXN0IiAtCkBAIC0xMDcsNyArMTg4LDcgQEAKICQgICBlbmRpZgogJCAgZWxzZQogJCAgIGdvc3ViIGNyZWFfbW1zCi0kICAgU0FZICJNYWtlICcnbmFtZScgJyd2ZXJzaW9uJyB3aXRoICcnTWFrZScgIgorJCAgIHdyaXRlIHN5cyRvdXRwdXQgIk1ha2UgJyduYW1lJyAnJ3ZlcnNpb24nIHdpdGggJydNYWtlJyAiCiAkICAgJ21ha2UnCiAkICBlbmRpZgogJCEKQEAgLTEzMyw2ICsyMTQsMTUgQEAKICQgZ290byBlcnJfZXhpdAogJEVSUl9FWElUOgogJCBzZXQgbWVzc2FnZS9mYWNpbC9pZGVudC9zZXZlci90ZXh0CiskIGNsb3NlL25vbG9nIG9wdGYKKyQgY2xvc2Uvbm9sb2cgdG9wdAorJCBjbG9zZS9ub2xvZyBjb25mX2hpbgorJCBjbG9zZS9ub2xvZyBhY29uZl9pbgorJCBjbG9zZS9ub2xvZyBhY29uZgorJCBjbG9zZS9ub2xvZyBvdXQKKyQgY2xvc2Uvbm9sb2cgbWluCiskIGNsb3NlL25vbG9nIG1vZAorJCBjbG9zZS9ub2xvZyBoX2luCiAkIHdyaXRlIHN5cyRvdXRwdXQgIkV4aXRpbmcuLi4iCiAkIGV4aXQgMgogJCEKQEAgLTE4MCw2MSArMjcwLDcyIEBACiAkIQogJCEgQ2hlY2sgY29tbWFuZCBsaW5lIG9wdGlvbnMgYW5kIHNldCBzeW1ib2xzIGFjY29yZGluZ2x5CiAkIQorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDA0MTIwNiBGaXJzdCB2ZXJzaW9uIHRvIHJlY2VpdmUgYSBudW1iZXIKKyQhIDAuMDIgMjAwNjAxMjYgQWRkIG5ldyAiSEVMUCIgdGFyZ2V0CiAkIENIRUNLX09QVFM6CiAkIGkgPSAxCiAkIE9QVF9MT09QOgogJCBpZiBpIC5sdC4gOQogJCB0aGVuCiAkICAgY3Bhcm0gPSBmJGVkaXQocCdpJywidXBjYXNlIikKLSQgICBpZiBjcGFybSAuZXFzLiAiREVCVUciCiskIQorJCEgQ2hlY2sgaWYgcGFyYW1ldGVyIGFjdHVhbGx5IGNvbnRhaW5zIHNvbWV0aGluZworJCEKKyQgICBpZiBmJGVkaXQoY3Bhcm0sInRyaW0iKSAubmVzLiAiIgogJCAgIHRoZW4KLSQgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25vb3B0L2RlYiIKLSQgICAgIGxvcHRzID0gbG9wdHMgKyAiL2RlYiIKLSQgICBlbmRpZgotJCAgIGlmIGYkbG9jYXRlKCJDQ09QVD0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQotJCAgIHRoZW4KLSQgICAgIHN0YXJ0ID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKLSQgICAgIGxlbiAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKLSQgICAgIGNjb3B0ID0gY2NvcHQgKyBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQotJCAgICAgaWYgZiRsb2NhdGUoIkFTX0lTIixmJGVkaXQoY2NvcHQsIlVQQ0FTRSIpKSAubHQuIGYkbGVuZ3RoKGNjb3B0KSAtCi0gICAgICAgICB0aGVuIHNfY2FzZSA9IHRydWUKLSQgICBlbmRpZgotJCAgIGlmIGNwYXJtIC5lcXMuICJMSU5LIiB0aGVuIGxpbmtvbmx5ID0gdHJ1ZQotJCAgIGlmIGYkbG9jYXRlKCJMT1BUUz0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQotJCAgIHRoZW4KLSQgICAgIHN0YXJ0ID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKLSQgICAgIGxlbiAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKLSQgICAgIGxvcHRzID0gbG9wdHMgKyBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQotJCAgIGVuZGlmCi0kICAgaWYgZiRsb2NhdGUoIkNDPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCi0kICAgdGhlbgotJCAgICAgc3RhcnQgID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKLSQgICAgIGxlbiAgICA9IGYkbGVuZ3RoKGNwYXJtKSAtIHN0YXJ0Ci0kICAgICBjY19jb20gPSBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQotICAgICAgaWYgKGNjX2NvbSAubmVzLiAiREVDQyIpIC5hbmQuIC0KLSAgICAgICAgIChjY19jb20gLm5lcy4gIlZBWEMiKSAuYW5kLiAtCi0JIChjY19jb20gLm5lcy4gIkdOVUMiKQorJCAgICAgaWYgY3Bhcm0gLmVxcy4gIkRFQlVHIgogJCAgICAgdGhlbgotJCAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJVbnN1cHBvcnRlZCBjb21waWxlciBjaG9pY2UgJydjY19jb20nIGlnbm9yZWQiCi0kICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVzZSBERUNDLCBWQVhDLCBvciBHTlVDIGluc3RlYWQiCi0kICAgICBlbHNlCi0kICAgICAJaWYgY2NfY29tIC5lcXMuICJERUNDIiB0aGVuIGl0c19kZWNjID0gdHJ1ZQotJCAgICAgCWlmIGNjX2NvbSAuZXFzLiAiVkFYQyIgdGhlbiBpdHNfdmF4YyA9IHRydWUKLSQgICAgIAlpZiBjY19jb20gLmVxcy4gIkdOVUMiIHRoZW4gaXRzX2dudWMgPSB0cnVlCiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25vb3B0L2RlYiIKKyQgICAgICAgbG9wdHMgPSBsb3B0cyArICIvZGViIgogJCAgICAgZW5kaWYKLSQgICBlbmRpZgotJCAgIGlmIGYkbG9jYXRlKCJNQUtFPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCi0kICAgdGhlbgotJCAgICAgc3RhcnQgID0gZiRsb2NhdGUoIj0iLGNwYXJtKSArIDEKLSQgICAgIGxlbiAgICA9IGYkbGVuZ3RoKGNwYXJtKSAtIHN0YXJ0Ci0kICAgICBtbWtzID0gZiRleHRyYWN0KHN0YXJ0LGxlbixjcGFybSkKLSQgICAgIGlmIChtbWtzIC5lcXMuICJNTUsiKSAub3IuIChtbWtzIC5lcXMuICJNTVMiKQorJCAgICAgaWYgZiRsb2NhdGUoIkNDT1BUPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCiAkICAgICB0aGVuCi0kICAgICAgIG1ha2UgPSBtbWtzCi0kICAgICBlbHNlCi0kICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVuc3VwcG9ydGVkIG1ha2UgY2hvaWNlICcnbW1rcycgaWdub3JlZCIKLSQgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVXNlIE1NSyBvciBNTVMgaW5zdGVhZCIKKyQgICAgICAgc3RhcnQgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgICBsZW4gICA9IGYkbGVuZ3RoKGNwYXJtKSAtIHN0YXJ0CiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyBmJGV4dHJhY3Qoc3RhcnQsbGVuLGNwYXJtKQorJCAgICAgICBpZiBmJGxvY2F0ZSgiQVNfSVMiLGYkZWRpdChjY29wdCwiVVBDQVNFIikpIC5sdC4gZiRsZW5ndGgoY2NvcHQpIC0KKyAgICAgICAgICB0aGVuIHNfY2FzZSA9IHRydWUKICQgICAgIGVuZGlmCiskICAgICBpZiBjcGFybSAuZXFzLiAiTElOSyIgdGhlbiBsaW5rb25seSA9IHRydWUKKyQgICAgIGlmIGYkbG9jYXRlKCJMT1BUUz0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQorJCAgICAgdGhlbgorJCAgICAgICBzdGFydCA9IGYkbG9jYXRlKCI9IixjcGFybSkgKyAxCiskICAgICAgIGxlbiAgID0gZiRsZW5ndGgoY3Bhcm0pIC0gc3RhcnQKKyQgICAgICAgbG9wdHMgPSBsb3B0cyArIGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCiskICAgICBlbmRpZgorJCAgICAgaWYgZiRsb2NhdGUoIkNDPSIsY3Bhcm0pIC5sdC4gZiRsZW5ndGgoY3Bhcm0pCiskICAgICB0aGVuCiskICAgICAgIHN0YXJ0ICA9IGYkbG9jYXRlKCI9IixjcGFybSkgKyAxCiskICAgICAgIGxlbiAgICA9IGYkbGVuZ3RoKGNwYXJtKSAtIHN0YXJ0CiskICAgICAgIGNjX2NvbSA9IGYkZXh0cmFjdChzdGFydCxsZW4sY3Bhcm0pCisgICAgICAgIGlmIChjY19jb20gLm5lcy4gIkRFQ0MiKSAuYW5kLiAtCisgICAgICAgICAgIChjY19jb20gLm5lcy4gIlZBWEMiKSAuYW5kLiAtCisgICAgICAgICAgIChjY19jb20gLm5lcy4gIkdOVUMiKQorJCAgICAgICB0aGVuCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5zdXBwb3J0ZWQgY29tcGlsZXIgY2hvaWNlICcnY2NfY29tJyBpZ25vcmVkIgorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVzZSBERUNDLCBWQVhDLCBvciBHTlVDIGluc3RlYWQiCiskICAgICAgIGVsc2UKKyQgICAgICAgICBpZiBjY19jb20gLmVxcy4gIkRFQ0MiIHRoZW4gaXRzX2RlY2MgPSB0cnVlCiskICAgICAgICAgaWYgY2NfY29tIC5lcXMuICJWQVhDIiB0aGVuIGl0c192YXhjID0gdHJ1ZQorJCAgICAgICAgIGlmIGNjX2NvbSAuZXFzLiAiR05VQyIgdGhlbiBpdHNfZ251YyA9IHRydWUKKyQgICAgICAgZW5kaWYKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJGxvY2F0ZSgiTUFLRT0iLGNwYXJtKSAubHQuIGYkbGVuZ3RoKGNwYXJtKQorJCAgICAgdGhlbgorJCAgICAgICBzdGFydCAgPSBmJGxvY2F0ZSgiPSIsY3Bhcm0pICsgMQorJCAgICAgICBsZW4gICAgPSBmJGxlbmd0aChjcGFybSkgLSBzdGFydAorJCAgICAgICBtbWtzID0gZiRleHRyYWN0KHN0YXJ0LGxlbixjcGFybSkKKyQgICAgICAgaWYgKG1ta3MgLmVxcy4gIk1NSyIpIC5vci4gKG1ta3MgLmVxcy4gIk1NUyIpCiskICAgICAgIHRoZW4KKyQgICAgICAgICBtYWtlID0gbW1rcworJCAgICAgICBlbHNlCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5zdXBwb3J0ZWQgbWFrZSBjaG9pY2UgJydtbWtzJyBpZ25vcmVkIgorJCAgICAgICAgIHdyaXRlIHN5cyRvdXRwdXQgIlVzZSBNTUsgb3IgTU1TIGluc3RlYWQiCiskICAgICAgIGVuZGlmCiskICAgICBlbmRpZgorJCAgICAgaWYgY3Bhcm0gLmVxcy4gIkhFTFAiIHRoZW4gZ29zdWIgYmhlbHAKICQgICBlbmRpZgogJCAgIGkgPSBpICsgMQogJCAgIGdvdG8gb3B0X2xvb3AKQEAgLTI0NCw2ICszNDUsMTEgQEAKICQhCiAkISBMb29rIGZvciB0aGUgY29tcGlsZXIgdXNlZAogJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDA0MDIyMyBGaXJzdCB2ZXJzaW9uIHRvIHJlY2VpdmUgYSBudW1iZXIKKyQhIDAuMDIgMjAwNDAyMjkgU2F2ZS9zZXQgdmFsdWUgb2YgZGVjYyRub19yb290ZWRfc2VhcmNoX2xpc3RzCiskISAwLjAzIDIwMDYwMjAyIEV4dGVuZCBoYW5kbGluZyBvZiBHTlUgQworJCEgMC4wNCAyMDA5MDQwMiBDb21wYXEgLT4gaHAKICRDSEVDS19DT01QSUxFUjoKICQgaWYgKC5ub3QuIChpdHNfZGVjYyAub3IuIGl0c192YXhjIC5vci4gaXRzX2dudWMpKQogJCB0aGVuCkBAIC0yNTcsOSArMzYzLDI2IEBACiAkIGlmICgubm90LiAoaXRzX2RlY2MgLm9yLiBpdHNfdmF4YyAub3IuIGl0c19nbnVjKSkKICQgdGhlbiBnb3RvIENDX0VSUgogJCBlbHNlCi0kICAgaWYgaXRzX2RlY2MgdGhlbiB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gQ29tcGFxIEMiCi0kICAgaWYgaXRzX3ZheGMgdGhlbiB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gVkFYIEMiCi0kICAgaWYgaXRzX2dudWMgdGhlbiB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gR05VIEMiCiskICAgaWYgaXRzX2RlY2MKKyQgICB0aGVuCiskICAgICB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gaHAgQyIKKyQgICAgIGlmIGYkdHJubG5tKCJkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMiKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICBkbnJzbCA9IGYkdHJubG5tKCJkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMiKQorJCAgICAgZW5kaWYKKyQgICAgIGRlZmluZS9ub2xvZyBkZWNjJG5vX3Jvb3RlZF9zZWFyY2hfbGlzdHMgMQorJCAgIGVsc2UKKyQgICAgIGlmIGl0c192YXhjIHRoZW4gd3JpdGUgc3lzJG91dHB1dCAiQ0MgY29tcGlsZXIgY2hlY2sgLi4uIFZBWCBDIgorJCAgICAgaWYgaXRzX2dudWMKKyQgICAgIHRoZW4KKyQgICAgICAgICB3cml0ZSBzeXMkb3V0cHV0ICJDQyBjb21waWxlciBjaGVjayAuLi4gR05VIEMiCiskICAgICAgICAgaWYgZiR0cm5sbm0odG9wdCkgdGhlbiB3cml0ZSB0b3B0ICJnbnVfY2M6WzAwMDAwMF1nY2NsaWIub2xiL2xpYiIKKyQgICAgICAgICBpZiBmJHRybmxubShvcHRmKSB0aGVuIHdyaXRlIG9wdGYgImdudV9jYzpbMDAwMDAwXWdjY2xpYi5vbGIvbGliIgorJCAgICAgICAgIGNjID0gImdjYyIKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJHRybmxubSh0b3B0KSB0aGVuIHdyaXRlIHRvcHQgInN5cyRzaGFyZTp2YXhjcnRsLmV4ZS9zaGFyZSIKKyQgICAgIGlmIGYkdHJubG5tKG9wdGYpIHRoZW4gd3JpdGUgb3B0ZiAic3lzJHNoYXJlOnZheGNydGwuZXhlL3NoYXJlIgorJCAgIGVuZGlmCiAkIGVuZGlmCiAkIHJldHVybgogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI3Niw3ICszOTksOCBAQAogIyB3cml0dGVuIGJ5IE1hcnRpbiBQLkouIFppbnNlcgogIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbT4KIAotT0JKUyA9IGFkbGVyMzIub2JqLCBjb21wcmVzcy5vYmosIGNyYzMyLm9iaiwgZ3ppby5vYmosIHVuY29tcHIub2JqLCBpbmZiYWNrLm9ialwKK09CSlMgPSBhZGxlcjMyLm9iaiwgY29tcHJlc3Mub2JqLCBjcmMzMi5vYmosIGd6Y2xvc2Uub2JqLCBnemxpYi5vYmpcCisgICAgICAgZ3pyZWFkLm9iaiwgZ3p3cml0ZS5vYmosIHVuY29tcHIub2JqLCBpbmZiYWNrLm9ialwKICAgICAgICBkZWZsYXRlLm9iaiwgdHJlZXMub2JqLCB6dXRpbC5vYmosIGluZmxhdGUub2JqLCBcCiAgICAgICAgaW5mdHJlZXMub2JqLCBpbmZmYXN0Lm9iagogCkBAIC0zMDgsNyArNDMyLDEwIEBACiBjcmMzMi5vYmogICAgOiBjcmMzMi5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGRlZmxhdGUub2JqICA6IGRlZmxhdGUuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAogZXhhbXBsZS5vYmogIDogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCi1nemlvLm9iaiAgICAgOiBnemlvLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorZ3pjbG9zZS5vYmogIDogZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKK2d6bGliLm9iaiAgICA6IGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorZ3pyZWFkLm9iaiAgIDogZ3pyZWFkLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAorZ3p3cml0ZS5vYmogIDogZ3p3cml0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGluZmZhc3Qub2JqICA6IGluZmZhc3QuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmggaW5mZmFzdC5oCiBpbmZsYXRlLm9iaiAgOiBpbmZsYXRlLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogaW5mdHJlZXMub2JqIDogaW5mdHJlZXMuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oIGluZnRyZWVzLmgKQEAgLTMyOCw3ICs0NTUsNyBAQAogJENSRUFfT0xJU1Q6CiAkIG9wZW4vcmVhZCBtaW4gbWFrZWZpbGUuaW4KICQgb3Blbi93cml0ZSBtb2QgbW9kdWxlcy5vcHQKLSQgc3JjX2NoZWNrID0gIk9CSlMgPSIKKyQgc3JjX2NoZWNrID0gIk9CSkMgPSIKICRNUkxPT1A6CiAkIHJlYWQvZW5kPW1yZG9uZSBtaW4gcmVjCiAkIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gbXJsb29wCkBAIC0zODIsMTMgKzUwOSwxODIgQEAKICQgcmV0dXJuCiAkIS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogJCEKKyRDSEVDS19DT05GSUc6CiskIQorJCBpbl9sZGVmID0gZiRsb2NhdGUoY2RlZixsaWJkZWZzKQorJCBpZiAoaW5fbGRlZiAubHQuIGYkbGVuZ3RoKGxpYmRlZnMpKQorJCB0aGVuCiskICAgd3JpdGUgYWNvbmYgIiNkZWZpbmUgJydjZGVmJyAxIgorJCAgIGxpYmRlZnMgPSBmJGV4dHJhY3QoMCxpbl9sZGVmLGxpYmRlZnMpICsgLQorICAgICAgICAgICAgICBmJGV4dHJhY3QoaW5fbGRlZiArIGYkbGVuZ3RoKGNkZWYpICsgMSwgLQorICAgICAgICAgICAgICAgICAgICAgICAgZiRsZW5ndGgobGliZGVmcykgLSBpbl9sZGVmIC0gZiRsZW5ndGgoY2RlZikgLSAxLCAtCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJkZWZzKQorJCBlbHNlCiskICAgaWYgKGYkdHlwZSgnY2RlZicpIC5lcXMuICJJTlRFR0VSIikKKyQgICB0aGVuCiskICAgICB3cml0ZSBhY29uZiAiI2RlZmluZSAnJ2NkZWYnICIsICdjZGVmJworJCAgIGVsc2UKKyQgICAgIGlmIChmJHR5cGUoJ2NkZWYnKSAuZXFzLiAiU1RSSU5HIikKKyQgICAgIHRoZW4KKyQgICAgICAgd3JpdGUgYWNvbmYgIiNkZWZpbmUgJydjZGVmJyAiLCAiIiIiLCAnJydjZGVmJycsICIiIiIKKyQgICAgIGVsc2UKKyQgICAgICAgZ29zdWIgY2hlY2tfY2NfZGVmCiskICAgICBlbmRpZgorJCAgIGVuZGlmCiskIGVuZGlmCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBDaGVjayBpZiB0aGlzIGlzIGEgZGVmaW5lIHJlbGF0aW5nIHRvIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBDL0MrKworJCEgY29tcGlsZXIKKyQhCiskIENIRUNLX0NDX0RFRjoKKyQgaWYgKGNkZWYgLmVxcy4gIl9MQVJHRUZJTEU2NF9TT1VSQ0UiKQorJCB0aGVuCiskICAgY29weSBzeXMkaW5wdXQ6ICd0YycKKyQgICBkZWNrCisjaW5jbHVkZSAidGNvbmZpZyIKKyNkZWZpbmUgX0xBUkdFRklMRQorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKCl7CitGSUxFICpmcDsKKyAgZnAgPSBmb3BlbigidGVtcC50eHQiLCJyIik7CisgIGZzZWVrbyhmcCwxLFNFRUtfU0VUKTsKKyAgZmNsb3NlKGZwKTsKK30KKworJCAgIGVvZAorJCAgIHRlc3RfaW52ID0gZmFsc2UKKyQgICBjb21tX2ggPSBmYWxzZQorJCAgIGdvc3ViIGNjX3Byb3BfY2hlY2sKKyQgICByZXR1cm4KKyQgZW5kaWYKKyQgd3JpdGUgYWNvbmYgIi8qICIsIGxpbmUsICIgKi8iCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiskISBDaGVjayBmb3IgcHJvcGVydGllcyBvZiBDL0MrKyBjb21waWxlcgorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDAzMTAyMCBGaXJzdCB2ZXJzaW9uIHRvIHJlY2VpdmUgYSBudW1iZXIKKyQhIDAuMDIgMjAwMzEwMjIgQWRkZWQgbG9naWMgZm9yIGRlZmluZXMgd2l0aCB2YWx1ZQorJCEgMC4wMyAyMDA0MDMwOSBNYWtlIHN1cmUgbG9jYWwgY29uZmlnIGZpbGUgZ2V0cyBub3QgZGVsZXRlZAorJCEgMC4wNCAyMDA0MTIzMCBBbHNvIHdyaXRlIGluY2x1ZGUgZm9yIGNvbmZpZ3VyZSBydW4KKyQhIDAuMDUgMjAwNTAxMDMgQWRkIHByb2Nlc3Npbmcgb2YgImNvbW1lbnQgZGVmaW5lcyIKKyRDQ19QUk9QX0NIRUNLOgorJCBjY19wcm9wID0gdHJ1ZQorJCBpc19uZWVkID0gZmFsc2UKKyQgaXNfbmVlZCA9IChmJGV4dHJhY3QoMCw0LGNkZWYpIC5lcXMuICJORUVEIikgLm9yLiAodGVzdF9pbnYgLmVxLiB0cnVlKQorJCBpZiBmJHNlYXJjaCh0aCkgLmVxcy4gIiIgdGhlbiBjcmVhdGUgJ3RoJworJCBzZXQgbWVzc2FnZS9ub2ZhYy9ub2lkZW50L25vc2V2ZXIvbm90ZXh0CiskIG9uIGVycm9yIHRoZW4gY29udGludWUKKyQgY2MgJ3RtcG5hbScKKyQgaWYgLm5vdC4gKCRzdGF0dXMpICB0aGVuIGNjX3Byb3AgPSBmYWxzZQorJCBvbiBlcnJvciB0aGVuIGNvbnRpbnVlCiskISBUaGUgaGVhZGVycyBtaWdodCBsaWUgYWJvdXQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgUlRMCiskIGxpbmsgJ3RtcG5hbScsdG1wLm9wdC9vcHQKKyQgaWYgLm5vdC4gKCRzdGF0dXMpICB0aGVuIGNjX3Byb3AgPSBmYWxzZQorJCBzZXQgbWVzc2FnZS9mYWMvaWRlbnQvc2V2ZXIvdGV4dAorJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKKyQgZGVsZXRlL25vbG9nICd0bXBuYW0nLio7Ki9leGNsdWRlPSd0aCcKKyQgaWYgKGNjX3Byb3AgLmFuZC4gLm5vdC4gaXNfbmVlZCkgLm9yLiAtCisgICAgICgubm90LiBjY19wcm9wIC5hbmQuIGlzX25lZWQpCiskIHRoZW4KKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJDaGVja2luZyBmb3IgJydjZGVmJy4uLiB5ZXMiCiskICAgaWYgZiR0eXBlKCdjZGVmX3ZhbCdfeWVzKSAubmVzLiAiIgorJCAgIHRoZW4KKyQgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX3llcykgLmVxcy4gIklOVEVHRVIiIC0KKyAgICAgICAgIHRoZW4gY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiNkZWZpbmUgIUFTICFVTCIsY2RlZiwnY2RlZl92YWwnX3llcykKKyQgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX3llcykgLmVxcy4gIlNUUklORyIgLQorICAgICAgICAgdGhlbiBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI2RlZmluZSAhQVMgIUFTIixjZGVmLCdjZGVmX3ZhbCdfeWVzKQorJCAgIGVsc2UKKyQgICAgIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjZGVmaW5lICFBUyAxIixjZGVmKQorJCAgIGVuZGlmCiskICAgaWYgKGNkZWYgLmVxcy4gIkhBVkVfRlNFRUtPIikgLm9yLiAoY2RlZiAuZXFzLiAiX0xBUkdFX0ZJTEVTIikgLm9yLiAtCisgICAgICAgKGNkZWYgLmVxcy4gIl9MQVJHRUZJTEU2NF9TT1VSQ0UiKSB0aGVuIC0KKyAgICAgIGNhbGwgd3JpdGVfY29uZmlnIGYkc3RyaW5nKCIjZGVmaW5lIF9MQVJHRUZJTEUgMSIpCiskIGVsc2UKKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJDaGVja2luZyBmb3IgJydjZGVmJy4uLiBubyIKKyQgICBpZiAoY29tbV9oKQorJCAgIHRoZW4KKyAgICAgIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIvKiAhQVMgKi8iLGxpbmUpCiskICAgZWxzZQorJCAgICAgaWYgZiR0eXBlKCdjZGVmX3ZhbCdfbm8pIC5uZXMuICIiCiskICAgICB0aGVuCiskICAgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX25vKSAuZXFzLiAiSU5URUdFUiIgLQorICAgICAgICAgICB0aGVuIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjZGVmaW5lICFBUyAhVUwiLGNkZWYsJ2NkZWZfdmFsJ19ubykKKyQgICAgICAgaWYgZiR0eXBlKCdjZGVmX3ZhbCdfbm8pIC5lcXMuICJTVFJJTkciIC0KKyAgICAgICAgICAgdGhlbiBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI2RlZmluZSAhQVMgIUFTIixjZGVmLCdjZGVmX3ZhbCdfbm8pCiskICAgICBlbHNlCiskICAgICAgIGNhbGwgd3JpdGVfY29uZmlnIGYkZmFvKCIjdW5kZWYgIUFTIixjZGVmKQorJCAgICAgZW5kaWYKKyQgICBlbmRpZgorJCBlbmRpZgorJCByZXR1cm4KKyQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQ2hlY2sgZm9yIHByb3BlcnRpZXMgb2YgQy9DKysgY29tcGlsZXIgd2l0aCBtdWx0aXBsZSByZXN1bHQgdmFsdWVzCiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDQwMTI3IEZpcnN0IHZlcnNpb24KKyQhIDAuMDIgMjAwNTAxMDMgUmVjb25jaWxlIGNoYW5nZXMgZnJvbSBjY19wcm9wIHVwIHRvIHZlcnNpb24gMC4wNQorJENDX01QUk9QX0NIRUNLOgorJCBjY19wcm9wID0gdHJ1ZQorJCBpICAgID0gMQorJCBpZGVsID0gMQorJCBNVF9MT09QOgorJCBpZiBmJHR5cGUocmVzdWx0XydpJykgLmVxcy4gIlNUUklORyIKKyQgdGhlbgorJCAgIHNldCBtZXNzYWdlL25vZmFjL25vaWRlbnQvbm9zZXZlci9ub3RleHQKKyQgICBvbiBlcnJvciB0aGVuIGNvbnRpbnVlCiskICAgY2MgJ3RtcG5hbSdfJ2knCiskICAgaWYgLm5vdC4gKCRzdGF0dXMpICB0aGVuIGNjX3Byb3AgPSBmYWxzZQorJCAgIG9uIGVycm9yIHRoZW4gY29udGludWUKKyQhIFRoZSBoZWFkZXJzIG1pZ2h0IGxpZSBhYm91dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBSVEwKKyQgICBsaW5rICd0bXBuYW0nXydpJyx0bXAub3B0L29wdAorJCAgIGlmIC5ub3QuICgkc3RhdHVzKSAgdGhlbiBjY19wcm9wID0gZmFsc2UKKyQgICBzZXQgbWVzc2FnZS9mYWMvaWRlbnQvc2V2ZXIvdGV4dAorJCAgIG9uIGVycm9yIHRoZW4gZ290byBlcnJfZXhpdAorJCAgIGRlbGV0ZS9ub2xvZyAndG1wbmFtJ18naScuKjsqCiskICAgaWYgKGNjX3Byb3ApCiskICAgdGhlbgorJCAgICAgd3JpdGUgc3lzJG91dHB1dCAiQ2hlY2tpbmcgZm9yICcnY2RlZicuLi4gIiwgbWRlZl8naScKKyQgICAgIGlmIGYkdHlwZShtZGVmXydpJykgLmVxcy4gIklOVEVHRVIiIC0KKyAgICAgICAgIHRoZW4gY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiNkZWZpbmUgIUFTICFVTCIsY2RlZixtZGVmXydpJykKKyQgICAgIGlmIGYkdHlwZSgnY2RlZl92YWwnX3llcykgLmVxcy4gIlNUUklORyIgLQorICAgICAgICAgdGhlbiBjYWxsIHdyaXRlX2NvbmZpZyBmJGZhbygiI2RlZmluZSAhQVMgIUFTIixjZGVmLG1kZWZfJ2knKQorJCAgICAgZ290byBtc3ltX2NsZWFuCiskICAgZWxzZQorJCAgICAgaSA9IGkgKyAxCiskICAgICBnb3RvIG10X2xvb3AKKyQgICBlbmRpZgorJCBlbmRpZgorJCB3cml0ZSBzeXMkb3V0cHV0ICJDaGVja2luZyBmb3IgJydjZGVmJy4uLiBubyIKKyQgY2FsbCB3cml0ZV9jb25maWcgZiRmYW8oIiN1bmRlZiAhQVMiLGNkZWYpCiskIE1TWU1fQ0xFQU46CiskIGlmIChpZGVsIC5sZS4gbXN5bV9tYXgpCiskIHRoZW4KKyQgICBkZWxldGUvc3ltIG1kZWZfJ2lkZWwnCiskICAgaWRlbCA9IGlkZWwgKyAxCiskICAgZ290byBtc3ltX2NsZWFuCiskIGVuZGlmCiskIHJldHVybgorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyQhCiAkISBBbmFseXplIE9iamVjdCBmaWxlcyBmb3IgT3BlblZNUyBBWFAgdG8gZXh0cmFjdCBQcm9jZWR1cmUgYW5kIERhdGEKICQhIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGEgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUgaW1hZ2UKICQhIEFsbCB0aGUgImJyYWlucyIgb2YgdGhpcyBsb2dpYyB3YXMgc3VnZ2VzdGVkIGJ5IEhhcnRtdXQgQmVja2VyCiAkISAoSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbSkuIEFsbCB0aGUgYnVncyB3ZXJlIGludHJvZHVjZWQgYnkgbWUKLSQhICh6aW5zZXJAZGVjdXMuZGUpLCBzbyBpZiB5b3UgZG8gaGF2ZSBwcm9ibGVtIHJlcG9ydHMgcGxlYXNlIGRvIG5vdAorJCEgKHppbnNlckB6aW5zZXIubm8taXAuaW5mbyksIHNvIGlmIHlvdSBkbyBoYXZlIHByb2JsZW0gcmVwb3J0cyBwbGVhc2UgZG8gbm90CiAkISBib3RoZXIgSGFydG11dC9IUCwgYnV0IGdldCBpbiB0b3VjaCB3aXRoIG1lCiAkIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDQwNDA2IFNraXAgb3ZlciBzaGFyZWFibGUgaW1hZ2VzIGluIG9wdGlvbiBmaWxlCiskISAwLjAyIDIwMDQxMTA5IEZpeCBvcHRpb24gZmlsZSBmb3Igc2hhcmVhYmxlIGltYWdlcyB3aXRoIGNhc2Vfc2Vuc2l0aXZlPVlFUworJCEgMC4wMyAyMDA1MDEwNyBTa2lwIG92ZXIgSWRlbnRpZmljYXRpb24gbGFiZWxzIGluIG9wdGlvbiBmaWxlCiskISAwLjA0IDIwMDYwMTE3IEFkZCB1cHBlcmNhc2UgYWxpYXMgdG8gY29kZSBjb21waWxlZCB3aXRoIC9uYW1lPWFzX2lzCiskIQogJCBBTkFMX09CSl9BWFA6IFN1YnJvdXRpbmUKICQgViA9ICdGJFZlcmlmeSgwKQogJCBTQVkgOj0gIldSSVRFXyBTWVMkT1VUUFVUIgpAQCAtNDA5LDYgKzcwNSwxNyBAQAogJCBvcGVuL2FwcGVuZCBhdG1wIGEudG1wCiAkIGxvb3A6CiAkIHJlYWQvZW5kPWVuZF9sb29wIGluIGxpbmUKKyQgaWYgZiRsb2NhdGUoIi9TSEFSRSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCiskIHRoZW4KKyQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX1NLUF9TSFItaS1za2lwc2hhcmUsICcnbGluZSciCiskICAgZ290byBsb29wCiskIGVuZGlmCiskIGlmIGYkbG9jYXRlKCJJREVOVElGSUNBVElPTj0iLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQorJCB0aGVuCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLWktaWRlbnQ6IElkZW50aWZpY2F0aW9uICIsIC0KKyAgICAgICAgICAgICAgICAgICAgIGYkZWxlbWVudCgxLCI9IixsaW5lKQorJCAgIGdvdG8gbG9vcAorJCBlbmRpZgogJCBmPSBmJHNlYXJjaChsaW5lKQogJCBpZiBmIC5lcXMuICIiCiAkIHRoZW4KQEAgLTQ1MCw4ICs3NTcsMzEgQEAKIHN1Yi9zeW1ib2w6ICIvc3ltYm9sX3ZlY3Rvcj0oL3dob2xlCiBzdWIvIi89REFUQSkvd2hvbGUKIGV4aXQKLSQgc29ydC9ub2R1cGwgZC50bXAsZi50bXAgJ3AyJwotJCBkZWxldGUgYS50bXA7KixiLnRtcDsqLGMudG1wOyosZC50bXA7KixlLnRtcDsqLGYudG1wOyoKKyQgc29ydC9ub2R1cGwgZC50bXAsZi50bXAgZy50bXAKKyQgb3Blbi9yZWFkIHJhd192ZWN0b3IgZy50bXAKKyQgb3Blbi93cml0ZSBjYXNlX3ZlY3RvciAncDInCiskIFJBV0xPT1A6CiskIHJlYWQvZW5kPWVuZF9yYXdsb29wIHJhd192ZWN0b3IgcmF3X2VsZW1lbnQKKyQgd3JpdGUgY2FzZV92ZWN0b3IgcmF3X2VsZW1lbnQKKyQgaWYgZiRsb2NhdGUoIj1QUk9DRURVUkUpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKKyQgdGhlbgorJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKKyQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQorICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwgLQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQorJCBlbmRpZgorJCBpZiBmJGxvY2F0ZSgiPURBVEEpIixyYXdfZWxlbWVudCkgLmx0LiBmJGxlbmd0aChyYXdfZWxlbWVudCkKKyQgdGhlbgorJCAgICAgbmFtZSA9IGYkZWxlbWVudCgxLCI9IixyYXdfZWxlbWVudCkgLSAiKCIKKyQgICAgIGlmIGYkZWRpdChuYW1lLCJVUENBU0UiKSAubmVzLiBuYW1lIHRoZW4gLQorICAgICAgICAgIHdyaXRlIGNhc2VfdmVjdG9yIGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1EQVRBKSIsIC0KKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGYkZWRpdChuYW1lLCJVUENBU0UiKSwgbmFtZSkKKyQgZW5kaWYKKyQgZ290byByYXdsb29wCiskIEVORF9SQVdMT09QOgorJCBjbG9zZSByYXdfdmVjdG9yCiskIGNsb3NlIGNhc2VfdmVjdG9yCiskIGRlbGV0ZSBhLnRtcDsqLGIudG1wOyosYy50bXA7KixkLnRtcDsqLGUudG1wOyosZi50bXA7KixnLnRtcDsqCiAkIGlmIGYkc2VhcmNoKCJ4LnRtcCIpIC5uZXMuICIiIC0KIAl0aGVuICQgZGVsZXRlIHgudG1wOyoKICQhCkBAIC00NTksMyArNzg5LDE2IEBACiAkIGlmIFYgdGhlbiBzZXQgdmVyaWZ5CiAkIGVuZHN1YnJvdXRpbmUKICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgV3JpdGUgY29uZmlndXJhdGlvbiB0byBib3RoIHBlcm1hbmVudCBhbmQgdGVtcG9yYXJ5IGNvbmZpZyBmaWxlCiskIQorJCEgVmVyc2lvbiBoaXN0b3J5CiskISAwLjAxIDIwMDMxMDI5IEZpcnN0IHZlcnNpb24gdG8gcmVjZWl2ZSBhIG51bWJlcgorJCEKKyRXUklURV9DT05GSUc6IFNVQlJPVVRJTkUKKyQgIHdyaXRlIGFjb25mICdwMScKKyQgIG9wZW4vYXBwZW5kIGNvbmZoICd0aCcKKyQgIHdyaXRlIGNvbmZoICdwMScKKyQgIGNsb3NlIGNvbmZoCiskRU5EU1VCUk9VVElORQorJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKaW5kZXggN2YxZGU0OS4uOTgyNWNjYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21pbmlnemlwLmMKKysrIGIvTW9kdWxlcy96bGliL21pbmlnemlwLmMKQEAgLTEsNSArMSw1IEBACiAvKiBtaW5pZ3ppcC5jIC0tIHNpbXVsYXRlIGd6aXAgdXNpbmcgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTUsOCArMTUsOCBAQAogCiAvKiBAKCMpICRJZCQgKi8KIAotI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSAiemxpYi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpZmRlZiBTVERDCiAjICBpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTMyLDYgKzMyLDkgQEAKICNpZiBkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogIyAgaW5jbHVkZSA8ZmNudGwuaD4KICMgIGluY2x1ZGUgPGlvLmg+CisjICBpZmRlZiBVTkRFUl9DRQorIyAgICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgIGVuZGlmCiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpIHNldG1vZGUoZmlsZW5vKGZpbGUpLCBPX0JJTkFSWSkKICNlbHNlCiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCkBAIC00MSwxMyArNDQsODQgQEAKICMgIGRlZmluZSB1bmxpbmsgZGVsZXRlCiAjICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCiAjZW5kaWYKKyNpZmRlZiBSSVNDT1MKKyMgIGRlZmluZSB1bmxpbmsgcmVtb3ZlCisjICBkZWZpbmUgR1pfU1VGRklYICItZ3oiCisjICBkZWZpbmUgZmlsZW5vKGZpbGUpIGZpbGUtPl9fZmlsZQorI2VuZGlmCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBfX2Rlc3Rfb3MgIT0gX19iZV9vcyAmJiBfX2Rlc3Rfb3MgIT0gX193aW4zMl9vcwogIyAgaW5jbHVkZSA8dW5peC5oPiAvKiBmb3IgZmlsZW5vICovCiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgJiYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKICNpZm5kZWYgV0lOMzIgLyogdW5saW5rIGFscmVhZHkgaW4gc3RkaW8uaCBmb3IgV0lOMzIgKi8KICAgZXh0ZXJuIGludCB1bmxpbmsgT0YoKGNvbnN0IGNoYXIgKikpOwogI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoVU5ERVJfQ0UpCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjICBkZWZpbmUgcGVycm9yKHMpIHB3aW5lcnJvcihzKQorCisvKiBNYXAgdGhlIFdpbmRvd3MgZXJyb3IgbnVtYmVyIGluIEVSUk9SIHRvIGEgbG9jYWxlLWRlcGVuZGVudCBlcnJvcgorICAgbWVzc2FnZSBzdHJpbmcgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuICBUeXBpY2FsbHksIHRoZSB2YWx1ZXMKKyAgIGZvciBFUlJPUiBjb21lIGZyb20gR2V0TGFzdEVycm9yLgorCisgICBUaGUgc3RyaW5nIHBvaW50ZWQgdG8gc2hhbGwgbm90IGJlIG1vZGlmaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbiwKKyAgIGJ1dCBtYXkgYmUgb3ZlcndyaXR0ZW4gYnkgYSBzdWJzZXF1ZW50IGNhbGwgdG8gc3Ryd2luZXJyb3IKKworICAgVGhlIHN0cndpbmVycm9yIGZ1bmN0aW9uIGRvZXMgbm90IGNoYW5nZSB0aGUgY3VycmVudCBzZXR0aW5nCisgICBvZiBHZXRMYXN0RXJyb3IuICAqLworCitzdGF0aWMgY2hhciAqc3Ryd2luZXJyb3IgKGVycm9yKQorICAgICBEV09SRCBlcnJvcjsKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbMTAyNF07CisKKyAgICB3Y2hhcl90ICptc2didWY7CisgICAgRFdPUkQgbGFzdGVyciA9IEdldExhc3RFcnJvcigpOworICAgIERXT1JEIGNoYXJzID0gRm9ybWF0TWVzc2FnZShGT1JNQVRfTUVTU0FHRV9GUk9NX1NZU1RFTQorICAgICAgICB8IEZPUk1BVF9NRVNTQUdFX0FMTE9DQVRFX0JVRkZFUiwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgZXJyb3IsCisgICAgICAgIDAsIC8qIERlZmF1bHQgbGFuZ3VhZ2UgKi8KKyAgICAgICAgKExQVk9JRCkmbXNnYnVmLAorICAgICAgICAwLAorICAgICAgICBOVUxMKTsKKyAgICBpZiAoY2hhcnMgIT0gMCkgeworICAgICAgICAvKiBJZiB0aGVyZSBpcyBhbiBcclxuIGFwcGVuZGVkLCB6YXAgaXQuICAqLworICAgICAgICBpZiAoY2hhcnMgPj0gMgorICAgICAgICAgICAgJiYgbXNnYnVmW2NoYXJzIC0gMl0gPT0gJ1xyJyAmJiBtc2didWZbY2hhcnMgLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICBjaGFycyAtPSAyOworICAgICAgICAgICAgbXNnYnVmW2NoYXJzXSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hhcnMgPiBzaXplb2YgKGJ1ZikgLSAxKSB7CisgICAgICAgICAgICBjaGFycyA9IHNpemVvZiAoYnVmKSAtIDE7CisgICAgICAgICAgICBtc2didWZbY2hhcnNdID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHdjc3RvbWJzKGJ1ZiwgbXNnYnVmLCBjaGFycyArIDEpOworICAgICAgICBMb2NhbEZyZWUobXNnYnVmKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNwcmludGYoYnVmLCAidW5rbm93biB3aW4zMiBlcnJvciAoJWxkKSIsIGVycm9yKTsKKyAgICB9CisKKyAgICBTZXRMYXN0RXJyb3IobGFzdGVycik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHZvaWQgcHdpbmVycm9yIChzKQorICAgIGNvbnN0IGNoYXIgKnM7Cit7CisgICAgaWYgKHMgJiYgKnMpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBzLCBzdHJ3aW5lcnJvcihHZXRMYXN0RXJyb3IgKCkpKTsKKyAgICBlbHNlCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHN0cndpbmVycm9yKEdldExhc3RFcnJvciAoKSkpOworfQorCisjZW5kaWYgLyogVU5ERVJfQ0UgKi8KIAogI2lmbmRlZiBHWl9TVUZGSVgKICMgIGRlZmluZSBHWl9TVUZGSVggIi5neiIKQEAgLTE5Myw2ICsyNjcsMTEgQEAKICAgICBGSUxFICAqaW47CiAgICAgZ3pGaWxlIG91dDsKIAorICAgIGlmIChzdHJsZW4oZmlsZSkgKyBzdHJsZW4oR1pfU1VGRklYKSA+PSBzaXplb2Yob3V0ZmlsZSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogZmlsZW5hbWUgdG9vIGxvbmdcbiIsIHByb2cpOworICAgICAgICBleGl0KDEpOworICAgIH0KKwogICAgIHN0cmNweShvdXRmaWxlLCBmaWxlKTsKICAgICBzdHJjYXQob3V0ZmlsZSwgR1pfU1VGRklYKTsKIApAQCAtMjIyLDcgKzMwMSwxMiBAQAogICAgIGNoYXIgKmluZmlsZSwgKm91dGZpbGU7CiAgICAgRklMRSAgKm91dDsKICAgICBnekZpbGUgaW47Ci0gICAgdUludCBsZW4gPSAodUludClzdHJsZW4oZmlsZSk7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihmaWxlKTsKKworICAgIGlmIChsZW4gKyBzdHJsZW4oR1pfU1VGRklYKSA+PSBzaXplb2YoYnVmKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBmaWxlbmFtZSB0b28gbG9uZ1xuIiwgcHJvZyk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQogCiAgICAgc3RyY3B5KGJ1ZiwgZmlsZSk7CiAKQEAgLTI1Myw3ICszMzcsOCBAQAogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogVXNhZ2U6ICBtaW5pZ3ppcCBbLWRdIFstZl0gWy1oXSBbLXJdIFstMSB0byAtOV0gW2ZpbGVzLi4uXQorICogVXNhZ2U6ICBtaW5pZ3ppcCBbLWNdIFstZF0gWy1mXSBbLWhdIFstcl0gWy0xIHRvIC05XSBbZmlsZXMuLi5dCisgKiAgIC1jIDogd3JpdGUgdG8gc3RhbmRhcmQgb3V0cHV0CiAgKiAgIC1kIDogZGVjb21wcmVzcwogICogICAtZiA6IGNvbXByZXNzIHdpdGggWl9GSUxURVJFRAogICogICAtaCA6IGNvbXByZXNzIHdpdGggWl9IVUZGTUFOX09OTFkKQEAgLTI2NSwxNyArMzUwLDMwIEBACiAgICAgaW50IGFyZ2M7CiAgICAgY2hhciAqYXJndltdOwogeworICAgIGludCBjb3B5b3V0ID0gMDsKICAgICBpbnQgdW5jb21wciA9IDA7CiAgICAgZ3pGaWxlIGZpbGU7Ci0gICAgY2hhciBvdXRtb2RlWzIwXTsKKyAgICBjaGFyICpibmFtZSwgb3V0bW9kZVsyMF07CiAKICAgICBzdHJjcHkob3V0bW9kZSwgIndiNiAiKTsKIAogICAgIHByb2cgPSBhcmd2WzBdOworICAgIGJuYW1lID0gc3RycmNocihhcmd2WzBdLCAnLycpOworICAgIGlmIChibmFtZSkKKyAgICAgIGJuYW1lKys7CisgICAgZWxzZQorICAgICAgYm5hbWUgPSBhcmd2WzBdOwogICAgIGFyZ2MtLSwgYXJndisrOwogCisgICAgaWYgKCFzdHJjbXAoYm5hbWUsICJndW56aXAiKSkKKyAgICAgIHVuY29tcHIgPSAxOworICAgIGVsc2UgaWYgKCFzdHJjbXAoYm5hbWUsICJ6Y2F0IikpCisgICAgICBjb3B5b3V0ID0gdW5jb21wciA9IDE7CisKICAgICB3aGlsZSAoYXJnYyA+IDApIHsKLSAgICAgIGlmIChzdHJjbXAoKmFyZ3YsICItZCIpID09IDApCisgICAgICBpZiAoc3RyY21wKCphcmd2LCAiLWMiKSA9PSAwKQorICAgICAgICBjb3B5b3V0ID0gMTsKKyAgICAgIGVsc2UgaWYgKHN0cmNtcCgqYXJndiwgIi1kIikgPT0gMCkKICAgICAgICAgdW5jb21wciA9IDE7CiAgICAgICBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICItZiIpID09IDApCiAgICAgICAgIG91dG1vZGVbM10gPSAnZic7CkBAIC0zMDUsMTEgKzQwMywzNiBAQAogICAgICAgICAgICAgZ3pfY29tcHJlc3Moc3RkaW4sIGZpbGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGNvcHlvdXQpIHsKKyAgICAgICAgICAgIFNFVF9CSU5BUllfTU9ERShzdGRvdXQpOworICAgICAgICB9CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICh1bmNvbXByKSB7Ci0gICAgICAgICAgICAgICAgZmlsZV91bmNvbXByZXNzKCphcmd2KTsKKyAgICAgICAgICAgICAgICBpZiAoY29weW91dCkgeworICAgICAgICAgICAgICAgICAgICBmaWxlID0gZ3pvcGVuKCphcmd2LCAicmIiKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNhbid0IGd6b3BlbiAlc1xuIiwgcHJvZywgKmFyZ3YpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBnel91bmNvbXByZXNzKGZpbGUsIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZV91bmNvbXByZXNzKCphcmd2KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZpbGVfY29tcHJlc3MoKmFyZ3YsIG91dG1vZGUpOworICAgICAgICAgICAgICAgIGlmIChjb3B5b3V0KSB7CisgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBpbiA9IGZvcGVuKCphcmd2LCAicmIiKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGVycm9yKCphcmd2KTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBnemRvcGVuKGZpbGVubyhzdGRvdXQpLCBvdXRtb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIGVycm9yKCJjYW4ndCBnemRvcGVuIHN0ZG91dCIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBnel9jb21wcmVzcyhpbiwgZmlsZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGVfY29tcHJlc3MoKmFyZ3YsIG91dG1vZGUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAoYXJndisrLCAtLWFyZ2MpOwogICAgIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi90cmVlcy5jIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKaW5kZXggMzk1ZTRlMS4uNTZlOWJiMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3RyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL3RyZWVzLmMKQEAgLTEsNSArMSw2IEBACiAvKiB0cmVlcy5jIC0tIG91dHB1dCBkZWZsYXRlZCBkYXRhIHVzaW5nIEh1ZmZtYW4gY29kaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5CisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5CisgKiBkZXRlY3RfZGF0YV90eXBlKCkgZnVuY3Rpb24gcHJvdmlkZWQgZnJlZWx5IGJ5IENvc21pbiBUcnV0YSwgMjAwNgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsY29kZXMpKTsKIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGN0X2RhdGEgKmx0cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RfZGF0YSAqZHRyZWUpKTsKLWxvY2FsIHZvaWQgc2V0X2RhdGFfdHlwZSAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKK2xvY2FsIGludCAgZGV0ZWN0X2RhdGFfdHlwZSBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdW5zaWduZWQgYmlfcmV2ZXJzZSBPRigodW5zaWduZWQgdmFsdWUsIGludCBsZW5ndGgpKTsKIGxvY2FsIHZvaWQgYmlfd2luZHVwICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHZvaWQgYmlfZmx1c2ggICAgICAgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKQEAgLTIwMywxMiArMjA0LDEyIEBACiAgICAgICogdW51c2VkIGJpdHMgaW4gdmFsdWUuCiAgICAgICovCiAgICAgaWYgKHMtPmJpX3ZhbGlkID4gKGludClCdWZfc2l6ZSAtIGxlbmd0aCkgewotICAgICAgICBzLT5iaV9idWYgfD0gKHZhbHVlIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpdmFsdWUgPDwgcy0+YmlfdmFsaWQ7CiAgICAgICAgIHB1dF9zaG9ydChzLCBzLT5iaV9idWYpOwogICAgICAgICBzLT5iaV9idWYgPSAodXNoKXZhbHVlID4+IChCdWZfc2l6ZSAtIHMtPmJpX3ZhbGlkKTsKICAgICAgICAgcy0+YmlfdmFsaWQgKz0gbGVuZ3RoIC0gQnVmX3NpemU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcy0+YmlfYnVmIHw9IHZhbHVlIDw8IHMtPmJpX3ZhbGlkOworICAgICAgICBzLT5iaV9idWYgfD0gKHVzaCl2YWx1ZSA8PCBzLT5iaV92YWxpZDsKICAgICAgICAgcy0+YmlfdmFsaWQgKz0gbGVuZ3RoOwogICAgIH0KIH0KQEAgLTIxOCwxMiArMjE5LDEyIEBACiB7IGludCBsZW4gPSBsZW5ndGg7XAogICBpZiAocy0+YmlfdmFsaWQgPiAoaW50KUJ1Zl9zaXplIC0gbGVuKSB7XAogICAgIGludCB2YWwgPSB2YWx1ZTtcCi0gICAgcy0+YmlfYnVmIHw9ICh2YWwgPDwgcy0+YmlfdmFsaWQpO1wKKyAgICBzLT5iaV9idWYgfD0gKHVzaCl2YWwgPDwgcy0+YmlfdmFsaWQ7XAogICAgIHB1dF9zaG9ydChzLCBzLT5iaV9idWYpO1wKICAgICBzLT5iaV9idWYgPSAodXNoKXZhbCA+PiAoQnVmX3NpemUgLSBzLT5iaV92YWxpZCk7XAogICAgIHMtPmJpX3ZhbGlkICs9IGxlbiAtIEJ1Zl9zaXplO1wKICAgfSBlbHNlIHtcCi0gICAgcy0+YmlfYnVmIHw9ICh2YWx1ZSkgPDwgcy0+YmlfdmFsaWQ7XAorICAgIHMtPmJpX2J1ZiB8PSAodXNoKSh2YWx1ZSkgPDwgcy0+YmlfdmFsaWQ7XAogICAgIHMtPmJpX3ZhbGlkICs9IGxlbjtcCiAgIH1cCiB9CkBAIC0yNTAsMTEgKzI1MSwxMyBAQAogICAgIGlmIChzdGF0aWNfaW5pdF9kb25lKSByZXR1cm47CiAKICAgICAvKiBGb3Igc29tZSBlbWJlZGRlZCB0YXJnZXRzLCBnbG9iYWwgdmFyaWFibGVzIGFyZSBub3QgaW5pdGlhbGl6ZWQ6ICovCisjaWZkZWYgTk9fSU5JVF9HTE9CQUxfUE9JTlRFUlMKICAgICBzdGF0aWNfbF9kZXNjLnN0YXRpY190cmVlID0gc3RhdGljX2x0cmVlOwogICAgIHN0YXRpY19sX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2xiaXRzOwogICAgIHN0YXRpY19kX2Rlc2Muc3RhdGljX3RyZWUgPSBzdGF0aWNfZHRyZWU7CiAgICAgc3RhdGljX2RfZGVzYy5leHRyYV9iaXRzID0gZXh0cmFfZGJpdHM7CiAgICAgc3RhdGljX2JsX2Rlc2MuZXh0cmFfYml0cyA9IGV4dHJhX2JsYml0czsKKyNlbmRpZgogCiAgICAgLyogSW5pdGlhbGl6ZSB0aGUgbWFwcGluZyBsZW5ndGggKDAuLjI1NSkgLT4gbGVuZ3RoIGNvZGUgKDAuLjI4KSAqLwogICAgIGxlbmd0aCA9IDA7CkBAIC0zNDgsMTMgKzM1MSwxNCBAQAogICAgICAgICAgICAgICAgIHN0YXRpY19kdHJlZVtpXS5MZW4sIFNFUEFSQVRPUihpLCBEX0NPREVTLTEsIDUpKTsKICAgICB9CiAKLSAgICBmcHJpbnRmKGhlYWRlciwgImNvbnN0IHVjaCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0ge1xuIik7CisgICAgZnByaW50ZihoZWFkZXIsICJjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0ge1xuIik7CiAgICAgZm9yIChpID0gMDsgaSA8IERJU1RfQ09ERV9MRU47IGkrKykgewogICAgICAgICBmcHJpbnRmKGhlYWRlciwgIiUydSVzIiwgX2Rpc3RfY29kZVtpXSwKICAgICAgICAgICAgICAgICBTRVBBUkFUT1IoaSwgRElTVF9DT0RFX0xFTi0xLCAyMCkpOwogICAgIH0KIAotICAgIGZwcmludGYoaGVhZGVyLCAiY29uc3QgdWNoIF9sZW5ndGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdPSB7XG4iKTsKKyAgICBmcHJpbnRmKGhlYWRlciwKKyAgICAgICAgImNvbnN0IHVjaCBaTElCX0lOVEVSTkFMIF9sZW5ndGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdPSB7XG4iKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX01BVENILU1JTl9NQVRDSCsxOyBpKyspIHsKICAgICAgICAgZnByaW50ZihoZWFkZXIsICIlMnUlcyIsIF9sZW5ndGhfY29kZVtpXSwKICAgICAgICAgICAgICAgICBTRVBBUkFUT1IoaSwgTUFYX01BVENILU1JTl9NQVRDSCwgMjApKTsKQEAgLTM3OSw3ICszODMsNyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJbml0aWFsaXplIHRoZSB0cmVlIGRhdGEgc3RydWN0dXJlcyBmb3IgYSBuZXcgemxpYiBzdHJlYW0uCiAgKi8KLXZvaWQgX3RyX2luaXQocykKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfaW5pdChzKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiB7CiAgICAgdHJfc3RhdGljX2luaXQoKTsKQEAgLTg2NCwxMyArODY4LDEzIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFNlbmQgYSBzdG9yZWQgYmxvY2sKICAqLwotdm9pZCBfdHJfc3RvcmVkX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgZW9mKQordm9pZCBaTElCX0lOVEVSTkFMIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KQogICAgIGRlZmxhdGVfc3RhdGUgKnM7CiAgICAgY2hhcmYgKmJ1ZjsgICAgICAgLyogaW5wdXQgYmxvY2sgKi8KICAgICB1bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLSAgICBpbnQgZW9mOyAgICAgICAgICAvKiB0cnVlIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLworICAgIGludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi8KIHsKLSAgICBzZW5kX2JpdHMocywgKFNUT1JFRF9CTE9DSzw8MSkrZW9mLCAzKTsgIC8qIHNlbmQgYmxvY2sgdHlwZSAqLworICAgIHNlbmRfYml0cyhzLCAoU1RPUkVEX0JMT0NLPDwxKStsYXN0LCAzKTsgICAgLyogc2VuZCBibG9jayB0eXBlICovCiAjaWZkZWYgREVCVUcKICAgICBzLT5jb21wcmVzc2VkX2xlbiA9IChzLT5jb21wcmVzc2VkX2xlbiArIDMgKyA3KSAmICh1bGcpfjdMOwogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IChzdG9yZWRfbGVuICsgNCkgPDwgMzsKQEAgLTg4OSw3ICs4OTMsNyBAQAogICogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCiAgKiBvbiBvbmUgYml0IG9ubHkuCiAgKi8KLXZvaWQgX3RyX2FsaWduKHMpCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2FsaWduKHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKICAgICBzZW5kX2JpdHMocywgU1RBVElDX1RSRUVTPDwxLCAzKTsKQEAgLTkxOCwxMSArOTIyLDExIEBACiAgKiBEZXRlcm1pbmUgdGhlIGJlc3QgZW5jb2RpbmcgZm9yIHRoZSBjdXJyZW50IGJsb2NrOiBkeW5hbWljIHRyZWVzLCBzdGF0aWMKICAqIHRyZWVzIG9yIHN0b3JlLCBhbmQgb3V0cHV0IHRoZSBlbmNvZGVkIGJsb2NrIHRvIHRoZSB6aXAgZmlsZS4KICAqLwotdm9pZCBfdHJfZmx1c2hfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBlb2YpCit2b2lkIFpMSUJfSU5URVJOQUwgX3RyX2ZsdXNoX2Jsb2NrKHMsIGJ1Ziwgc3RvcmVkX2xlbiwgbGFzdCkKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIGNoYXJmICpidWY7ICAgICAgIC8qIGlucHV0IGJsb2NrLCBvciBOVUxMIGlmIHRvbyBvbGQgKi8KICAgICB1bGcgc3RvcmVkX2xlbjsgICAvKiBsZW5ndGggb2YgaW5wdXQgYmxvY2sgKi8KLSAgICBpbnQgZW9mOyAgICAgICAgICAvKiB0cnVlIGlmIHRoaXMgaXMgdGhlIGxhc3QgYmxvY2sgZm9yIGEgZmlsZSAqLworICAgIGludCBsYXN0OyAgICAgICAgIC8qIG9uZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGJsb2NrIGZvciBhIGZpbGUgKi8KIHsKICAgICB1bGcgb3B0X2xlbmIsIHN0YXRpY19sZW5iOyAvKiBvcHRfbGVuIGFuZCBzdGF0aWNfbGVuIGluIGJ5dGVzICovCiAgICAgaW50IG1heF9ibGluZGV4ID0gMDsgIC8qIGluZGV4IG9mIGxhc3QgYml0IGxlbmd0aCBjb2RlIG9mIG5vbiB6ZXJvIGZyZXEgKi8KQEAgLTkzMSw4ICs5MzUsOCBAQAogICAgIGlmIChzLT5sZXZlbCA+IDApIHsKIAogICAgICAgICAvKiBDaGVjayBpZiB0aGUgZmlsZSBpcyBiaW5hcnkgb3IgdGV4dCAqLwotICAgICAgICBpZiAoc3RvcmVkX2xlbiA+IDAgJiYgcy0+c3RybS0+ZGF0YV90eXBlID09IFpfVU5LTk9XTikKLSAgICAgICAgICAgIHNldF9kYXRhX3R5cGUocyk7CisgICAgICAgIGlmIChzLT5zdHJtLT5kYXRhX3R5cGUgPT0gWl9VTktOT1dOKQorICAgICAgICAgICAgcy0+c3RybS0+ZGF0YV90eXBlID0gZGV0ZWN0X2RhdGFfdHlwZShzKTsKIAogICAgICAgICAvKiBDb25zdHJ1Y3QgdGhlIGxpdGVyYWwgYW5kIGRpc3RhbmNlIHRyZWVzICovCiAgICAgICAgIGJ1aWxkX3RyZWUocywgKHRyZWVfZGVzYyAqKSgmKHMtPmxfZGVzYykpKTsKQEAgLTk3OCwyMCArOTgyLDIwIEBACiAgICAgICAgICAqIHN1Y2Nlc3NmdWwuIElmIExJVF9CVUZTSVpFIDw9IFdTSVpFLCBpdCBpcyBuZXZlciB0b28gbGF0ZSB0bwogICAgICAgICAgKiB0cmFuc2Zvcm0gYSBibG9jayBpbnRvIGEgc3RvcmVkIGJsb2NrLgogICAgICAgICAgKi8KLSAgICAgICAgX3RyX3N0b3JlZF9ibG9jayhzLCBidWYsIHN0b3JlZF9sZW4sIGVvZik7CisgICAgICAgIF90cl9zdG9yZWRfYmxvY2socywgYnVmLCBzdG9yZWRfbGVuLCBsYXN0KTsKIAogI2lmZGVmIEZPUkNFX1NUQVRJQwogICAgIH0gZWxzZSBpZiAoc3RhdGljX2xlbmIgPj0gMCkgeyAvKiBmb3JjZSBzdGF0aWMgdHJlZXMgKi8KICNlbHNlCiAgICAgfSBlbHNlIGlmIChzLT5zdHJhdGVneSA9PSBaX0ZJWEVEIHx8IHN0YXRpY19sZW5iID09IG9wdF9sZW5iKSB7CiAjZW5kaWYKLSAgICAgICAgc2VuZF9iaXRzKHMsIChTVEFUSUNfVFJFRVM8PDEpK2VvZiwgMyk7CisgICAgICAgIHNlbmRfYml0cyhzLCAoU1RBVElDX1RSRUVTPDwxKStsYXN0LCAzKTsKICAgICAgICAgY29tcHJlc3NfYmxvY2socywgKGN0X2RhdGEgKilzdGF0aWNfbHRyZWUsIChjdF9kYXRhICopc3RhdGljX2R0cmVlKTsKICNpZmRlZiBERUJVRwogICAgICAgICBzLT5jb21wcmVzc2VkX2xlbiArPSAzICsgcy0+c3RhdGljX2xlbjsKICNlbmRpZgogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCAoRFlOX1RSRUVTPDwxKStlb2YsIDMpOworICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7CiAgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CkBAIC0xMDA1LDIxICsxMDA5LDIxIEBACiAgICAgICovCiAgICAgaW5pdF9ibG9jayhzKTsKIAotICAgIGlmIChlb2YpIHsKKyAgICBpZiAobGFzdCkgewogICAgICAgICBiaV93aW5kdXAocyk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gNzsgIC8qIGFsaWduIG9uIGJ5dGUgYm91bmRhcnkgKi8KICNlbmRpZgogICAgIH0KICAgICBUcmFjZXYoKHN0ZGVyciwiXG5jb21wcmxlbiAlbHUoJWx1KSAiLCBzLT5jb21wcmVzc2VkX2xlbj4+MywKLSAgICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNyplb2YpKTsKKyAgICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4tNypsYXN0KSk7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2F2ZSB0aGUgbWF0Y2ggaW5mbyBhbmQgdGFsbHkgdGhlIGZyZXF1ZW5jeSBjb3VudHMuIFJldHVybiB0cnVlIGlmCiAgKiB0aGUgY3VycmVudCBibG9jayBtdXN0IGJlIGZsdXNoZWQuCiAgKi8KLWludCBfdHJfdGFsbHkgKHMsIGRpc3QsIGxjKQoraW50IFpMSUJfSU5URVJOQUwgX3RyX3RhbGx5IChzLCBkaXN0LCBsYykKICAgICBkZWZsYXRlX3N0YXRlICpzOwogICAgIHVuc2lnbmVkIGRpc3Q7ICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIHVuc2lnbmVkIGxjOyAgICAvKiBtYXRjaCBsZW5ndGgtTUlOX01BVENIIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0PT0wKSAqLwpAQCAtMTExOCwyNCArMTEyMiw0NSBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFNldCB0aGUgZGF0YSB0eXBlIHRvIEJJTkFSWSBvciBURVhULCB1c2luZyBhIGNydWRlIGFwcHJveGltYXRpb246Ci0gKiBzZXQgaXQgdG8gWl9URVhUIGlmIGFsbCBzeW1ib2xzIGFyZSBlaXRoZXIgcHJpbnRhYmxlIGNoYXJhY3RlcnMgKDMzIHRvIDI1NSkKLSAqIG9yIHdoaXRlIHNwYWNlcyAoOSB0byAxMywgb3IgMzIpOyBvciBzZXQgaXQgdG8gWl9CSU5BUlkgb3RoZXJ3aXNlLgorICogQ2hlY2sgaWYgdGhlIGRhdGEgdHlwZSBpcyBURVhUIG9yIEJJTkFSWSwgdXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgKiAtIFRFWFQgaWYgdGhlIHR3byBjb25kaXRpb25zIGJlbG93IGFyZSBzYXRpc2ZpZWQ6CisgKiAgICBhKSBUaGVyZSBhcmUgbm8gbm9uLXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBiZWxvbmdpbmcgdG8gdGhlCisgKiAgICAgICAiYmxhY2sgbGlzdCIgKDAuLjYsIDE0Li4yNSwgMjguLjMxKS4KKyAqICAgIGIpIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwcmludGFibGUgY2hhcmFjdGVyIGJlbG9uZ2luZyB0byB0aGUKKyAqICAgICAgICJ3aGl0ZSBsaXN0IiAoOSB7VEFCfSwgMTAge0xGfSwgMTMge0NSfSwgMzIuLjI1NSkuCisgKiAtIEJJTkFSWSBvdGhlcndpc2UuCisgKiAtIFRoZSBmb2xsb3dpbmcgcGFydGlhbGx5LXBvcnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBmb3JtIGEKKyAqICAgImdyYXkgbGlzdCIgdGhhdCBpcyBpZ25vcmVkIGluIHRoaXMgZGV0ZWN0aW9uIGFsZ29yaXRobToKKyAqICAgKDcge0JFTH0sIDgge0JTfSwgMTEge1ZUfSwgMTIge0ZGfSwgMjYge1NVQn0sIDI3IHtFU0N9KS4KICAqIElOIGFzc2VydGlvbjogdGhlIGZpZWxkcyBGcmVxIG9mIGR5bl9sdHJlZSBhcmUgc2V0LgogICovCi1sb2NhbCB2b2lkIHNldF9kYXRhX3R5cGUocykKK2xvY2FsIGludCBkZXRlY3RfZGF0YV90eXBlKHMpCiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKIHsKKyAgICAvKiBibGFja19tYXNrIGlzIHRoZSBiaXQgbWFzayBvZiBibGFjay1saXN0ZWQgYnl0ZXMKKyAgICAgKiBzZXQgYml0cyAwLi42LCAxNC4uMjUsIGFuZCAyOC4uMzEKKyAgICAgKiAweGYzZmZjMDdmID0gYmluYXJ5IDExMTEwMDExMTExMTExMTExMTAwMDAwMDAxMTExMTExCisgICAgICovCisgICAgdW5zaWduZWQgbG9uZyBibGFja19tYXNrID0gMHhmM2ZmYzA3ZlVMOwogICAgIGludCBuOwogCi0gICAgZm9yIChuID0gMDsgbiA8IDk7IG4rKykKKyAgICAvKiBDaGVjayBmb3Igbm9uLXRleHR1YWwgKCJibGFjay1saXN0ZWQiKSBieXRlcy4gKi8KKyAgICBmb3IgKG4gPSAwOyBuIDw9IDMxOyBuKyssIGJsYWNrX21hc2sgPj49IDEpCisgICAgICAgIGlmICgoYmxhY2tfbWFzayAmIDEpICYmIChzLT5keW5fbHRyZWVbbl0uRnJlcSAhPSAwKSkKKyAgICAgICAgICAgIHJldHVybiBaX0JJTkFSWTsKKworICAgIC8qIENoZWNrIGZvciB0ZXh0dWFsICgid2hpdGUtbGlzdGVkIikgYnl0ZXMuICovCisgICAgaWYgKHMtPmR5bl9sdHJlZVs5XS5GcmVxICE9IDAgfHwgcy0+ZHluX2x0cmVlWzEwXS5GcmVxICE9IDAKKyAgICAgICAgICAgIHx8IHMtPmR5bl9sdHJlZVsxM10uRnJlcSAhPSAwKQorICAgICAgICByZXR1cm4gWl9URVhUOworICAgIGZvciAobiA9IDMyOyBuIDwgTElURVJBTFM7IG4rKykKICAgICAgICAgaWYgKHMtPmR5bl9sdHJlZVtuXS5GcmVxICE9IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICBpZiAobiA9PSA5KQotICAgICAgICBmb3IgKG4gPSAxNDsgbiA8IDMyOyBuKyspCi0gICAgICAgICAgICBpZiAocy0+ZHluX2x0cmVlW25dLkZyZXEgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICBzLT5zdHJtLT5kYXRhX3R5cGUgPSAobiA9PSAzMikgPyBaX1RFWFQgOiBaX0JJTkFSWTsKKyAgICAgICAgICAgIHJldHVybiBaX1RFWFQ7CisKKyAgICAvKiBUaGVyZSBhcmUgbm8gImJsYWNrLWxpc3RlZCIgb3IgIndoaXRlLWxpc3RlZCIgYnl0ZXM6CisgICAgICogdGhpcyBzdHJlYW0gZWl0aGVyIGlzIGVtcHR5IG9yIGhhcyB0b2xlcmF0ZWQgKCJncmF5LWxpc3RlZCIpIGJ5dGVzIG9ubHkuCisgICAgICovCisgICAgcmV0dXJuIFpfQklOQVJZOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi90cmVlcy5oIGIvTW9kdWxlcy96bGliL3RyZWVzLmgKaW5kZXggNzJmYWNmOS4uZDM1NjM5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3RyZWVzLmgKKysrIGIvTW9kdWxlcy96bGliL3RyZWVzLmgKQEAgLTcwLDcgKzcwLDcgQEAKIHt7MTl9LHsgNX19LCB7ezExfSx7IDV9fSwge3syN30seyA1fX0sIHt7IDd9LHsgNX19LCB7ezIzfSx7IDV9fQogfTsKIAotY29uc3QgdWNoIF9kaXN0X2NvZGVbRElTVF9DT0RFX0xFTl0gPSB7Citjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfZGlzdF9jb2RlW0RJU1RfQ09ERV9MRU5dID0gewogIDAsICAxLCAgMiwgIDMsICA0LCAgNCwgIDUsICA1LCAgNiwgIDYsICA2LCAgNiwgIDcsICA3LCAgNywgIDcsICA4LCAgOCwgIDgsICA4LAogIDgsICA4LCAgOCwgIDgsICA5LCAgOSwgIDksICA5LCAgOSwgIDksICA5LCAgOSwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLAogMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLApAQCAtOTksNyArOTksNyBAQAogMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOSwgMjksIDI5LCAyOQogfTsKIAotY29uc3QgdWNoIF9sZW5ndGhfY29kZVtNQVhfTUFUQ0gtTUlOX01BVENIKzFdPSB7Citjb25zdCB1Y2ggWkxJQl9JTlRFUk5BTCBfbGVuZ3RoX2NvZGVbTUFYX01BVENILU1JTl9NQVRDSCsxXT0gewogIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDgsICA5LCAgOSwgMTAsIDEwLCAxMSwgMTEsIDEyLCAxMiwgMTIsIDEyLAogMTMsIDEzLCAxMywgMTMsIDE0LCAxNCwgMTQsIDE0LCAxNSwgMTUsIDE1LCAxNSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAogMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3VuY29tcHIuYyBiL01vZHVsZXMvemxpYi91bmNvbXByLmMKaW5kZXggYjU5ZTNkMC4uYWQ5OGJlMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3VuY29tcHIuYworKysgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCkBAIC0xLDUgKzEsNSBAQAogLyogdW5jb21wci5jIC0tIGRlY29tcHJlc3MgYSBtZW1vcnkgYnVmZmVyCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDMsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNiw4ICsxNiw2IEBACiAgICBiZWVuIHNhdmVkIHByZXZpb3VzbHkgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHRyYW5zbWl0dGVkIHRvIHRoZSBkZWNvbXByZXNzb3IKICAgIGJ5IHNvbWUgbWVjaGFuaXNtIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgY29tcHJlc3Npb24gbGlicmFyeS4pCiAgICBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjb21wcmVzc2VkIGJ1ZmZlci4KLSAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBkZWNvbXByZXNzIGEgd2hvbGUgZmlsZSBhdCBvbmNlIGlmIHRoZQotICAgaW5wdXQgZmlsZSBpcyBtbWFwJ2VkLgogCiAgICAgIHVuY29tcHJlc3MgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKICAgIGVub3VnaCBtZW1vcnksIFpfQlVGX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaAppbmRleCAwM2E5NDMxLi4wMmNlNTZjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMSw1MiArMTEsMTI0IEBACiAvKgogICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAogICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCisgKiBFdmVuIGJldHRlciB0aGFuIGNvbXBpbGluZyB3aXRoIC1EWl9QUkVGSVggd291bGQgYmUgdG8gdXNlIGNvbmZpZ3VyZSB0byBzZXQKKyAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwotI2lmZGVmIFpfUFJFRklYCi0jICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCi0jICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQotIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKLSMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KLSMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCi0jICBkZWZpbmUgaW5mbGF0ZUVuZCAgICAgICAgICAgIHpfaW5mbGF0ZUVuZAotIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5Ci0jICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0Ci0jICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcwotIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAotIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQotIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KLSMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQotIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCi0jICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAotIyAgZGVmaW5lIGluZmxhdGVDb3B5ICAgICAgICAgICB6X2luZmxhdGVDb3B5Ci0jICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0Ci0jICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKLSMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAorI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisKKy8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLworIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKKyMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKKyMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKKyMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAorIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKKyMgIGRlZmluZSBfdHJfdGFsbHkgICAgICAgICAgICAgel9fdHJfdGFsbHkKKyMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKICMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwogIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgogIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCisjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKKyMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKKyMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQorIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCisjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCisjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgorIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCisjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCisjICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQorIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKKyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCisjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KKyMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlTWFyayAgICAgICAgICAgel9pbmZsYXRlTWFyaworIyAgZGVmaW5lIGluZmxhdGVQcmltZSAgICAgICAgICB6X2luZmxhdGVQcmltZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAorIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKKyMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCisjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAorIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAorIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKKyMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCisjICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKKyMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCi0jICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYworLyogYWxsIHpsaWIgdHlwZWRlZnMgaW4gemxpYi5oIGFuZCB6Y29uZi5oICovCiAjICBkZWZpbmUgQnl0ZSAgICAgICAgICAgICAgICAgIHpfQnl0ZQotIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKLSMgIGRlZmluZSB1TG9uZyAgICAgICAgICAgICAgICAgel91TG9uZwogIyAgZGVmaW5lIEJ5dGVmICAgICAgICAgICAgICAgICB6X0J5dGVmCisjICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwogIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCisjICBkZWZpbmUgZnJlZV9mdW5jICAgICAgICAgICAgIHpfZnJlZV9mdW5jCisjICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBkZWZpbmUgZ3pfaGVhZGVyICAgICAgICAgICAgIHpfZ3pfaGVhZGVyCisjICBkZWZpbmUgZ3pfaGVhZGVycCAgICAgICAgICAgIHpfZ3pfaGVhZGVycAorIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKICMgIGRlZmluZSBpbnRmICAgICAgICAgICAgICAgICAgel9pbnRmCisjICBkZWZpbmUgb3V0X2Z1bmMgICAgICAgICAgICAgIHpfb3V0X2Z1bmMKKyMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50CiAjICBkZWZpbmUgdUludGYgICAgICAgICAgICAgICAgIHpfdUludGYKKyMgIGRlZmluZSB1TG9uZyAgICAgICAgICAgICAgICAgel91TG9uZwogIyAgZGVmaW5lIHVMb25nZiAgICAgICAgICAgICAgICB6X3VMb25nZgotIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgogIyAgZGVmaW5lIHZvaWRwICAgICAgICAgICAgICAgICB6X3ZvaWRwCisjICBkZWZpbmUgdm9pZHBjICAgICAgICAgICAgICAgIHpfdm9pZHBjCisjICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCisKKy8qIGFsbCB6bGliIHN0cnVjdHMgaW4gemxpYi5oIGFuZCB6Y29uZi5oICovCisjICBkZWZpbmUgZ3pfaGVhZGVyX3MgICAgICAgICAgIHpfZ3pfaGVhZGVyX3MKKyMgIGRlZmluZSBpbnRlcm5hbF9zdGF0ZSAgICAgICAgel9pbnRlcm5hbF9zdGF0ZQorCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19NU0RPU19fKSAmJiAhZGVmaW5lZChNU0RPUykKQEAgLTI4NCw0OSArMzU2LDczIEBACiAgICB0eXBlZGVmIEJ5dGUgICAgICAgKnZvaWRwOwogI2VuZGlmCiAKLSNpZiAwICAgICAgICAgICAvKiBIQVZFX1VOSVNURF9IIC0tIHRoaXMgbGluZSBpcyB1cGRhdGVkIGJ5IC4vY29uZmlndXJlICovCi0jICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovCi0jICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KLSMgIGlmZGVmIFZNUwotIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCisKKyNpZmRlZiBTVERDCisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjZW5kaWYKKworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUgZm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRlcmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjZW5kaWYKKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KKyMgIGlmZGVmIFZNUworIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyMgIGlmbmRlZiB6X29mZl90CisjICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICBlbmRpZgorI2VuZGlmCisKICNpZm5kZWYgU0VFS19TRVQKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCiAjZW5kaWYKKwogI2lmbmRlZiB6X29mZl90CiAjICBkZWZpbmUgel9vZmZfdCBsb25nCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKKyNlbHNlCisjICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChfX09TNDAwX18pCiAjICBkZWZpbmUgTk9fdnNucHJpbnRmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoX19NVlNfXykKICMgIGRlZmluZSBOT192c25wcmludGYKLSMgIGlmZGVmIEZBUgotIyAgICB1bmRlZiBGQVIKLSMgIGVuZGlmCiAjZW5kaWYKIAogLyogTVZTIGxpbmtlciBkb2VzIG5vdCBzdXBwb3J0IGV4dGVybmFsIG5hbWVzIGxhcmdlciB0aGFuIDggYnl0ZXMgKi8KICNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUluaXQyXywiREVJTjIiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUVuZCwiREVFTkQiKQotIyAgIHByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdF8sIklOSU4iKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUluaXQyXywiSU5JTjIiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVN5bmMsIklOU1kiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZVNldERpY3Rpb25hcnksIklOU0VESSIpCi0jICAgcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX3RhYmxlLCJJTlRBQkwiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9mYXN0LCJJTkZBIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQogI2VuZGlmCiAKICNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmY3MWIxCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgpAQCAtMCwwICsxLDQzMCBAQAorLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpZm5kZWYgWkNPTkZfSAorI2RlZmluZSBaQ09ORl9ICisjY21ha2VkZWZpbmUgWl9QUkVGSVgKKyNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0gKKworLyoKKyAqIElmIHlvdSAqcmVhbGx5KiBuZWVkIGEgdW5pcXVlIHByZWZpeCBmb3IgYWxsIHR5cGVzIGFuZCBsaWJyYXJ5IGZ1bmN0aW9ucywKKyAqIGNvbXBpbGUgd2l0aCAtRFpfUFJFRklYLiBUaGUgInN0YW5kYXJkIiB6bGliIHNob3VsZCBiZSBjb21waWxlZCB3aXRob3V0IGl0LgorICogRXZlbiBiZXR0ZXIgdGhhbiBjb21waWxpbmcgd2l0aCAtRFpfUFJFRklYIHdvdWxkIGJlIHRvIHVzZSBjb25maWd1cmUgdG8gc2V0CisgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCisgKi8KKyNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworCisvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KKyMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCisjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCisjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2Jsb2NrICAgICAgIHpfX3RyX2ZsdXNoX2Jsb2NrCisjICBkZWZpbmUgX3RyX2luaXQgICAgICAgICAgICAgIHpfX3RyX2luaXQKKyMgIGRlZmluZSBfdHJfc3RvcmVkX2Jsb2NrICAgICAgel9fdHJfc3RvcmVkX2Jsb2NrCisjICBkZWZpbmUgX3RyX3RhbGx5ICAgICAgICAgICAgIHpfX3RyX3RhbGx5CisjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQorIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0CisjICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKKyMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKKyMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCisjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CisjICBkZWZpbmUgZGVmbGF0ZSAgICAgICAgICAgICAgIHpfZGVmbGF0ZQorIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgICAgICAgICB6X2RlZmxhdGVCb3VuZAorIyAgZGVmaW5lIGRlZmxhdGVDb3B5ICAgICAgICAgICB6X2RlZmxhdGVDb3B5CisjICBkZWZpbmUgZGVmbGF0ZUVuZCAgICAgICAgICAgIHpfZGVmbGF0ZUVuZAorIyAgZGVmaW5lIGRlZmxhdGVJbml0Ml8gICAgICAgICB6X2RlZmxhdGVJbml0Ml8KKyMgIGRlZmluZSBkZWZsYXRlSW5pdF8gICAgICAgICAgel9kZWZsYXRlSW5pdF8KKyMgIGRlZmluZSBkZWZsYXRlUGFyYW1zICAgICAgICAgel9kZWZsYXRlUGFyYW1zCisjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBkZWZsYXRlU2V0SGVhZGVyICAgICAgel9kZWZsYXRlU2V0SGVhZGVyCisjICBkZWZpbmUgZGVmbGF0ZVR1bmUgICAgICAgICAgIHpfZGVmbGF0ZVR1bmUKKyMgIGRlZmluZSBkZWZsYXRlX2NvcHlyaWdodCAgICAgel9kZWZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGdldF9jcmNfdGFibGUgICAgICAgICB6X2dldF9jcmNfdGFibGUKKyMgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgZGVmaW5lIGd6X3N0cndpbmVycm9yICAgICAgICB6X2d6X3N0cndpbmVycm9yCisjICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICBkZWZpbmUgZ3pjbG9zZSAgICAgICAgICAgICAgIHpfZ3pjbG9zZQorIyAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgZGVmaW5lIGd6ZGlyZWN0ICAgICAgICAgICAgICB6X2d6ZGlyZWN0CisjICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICBkZWZpbmUgZ3plcnJvciAgICAgICAgICAgICAgIHpfZ3plcnJvcgorIyAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgIGRlZmluZSBnemdldHMgICAgICAgICAgICAgICAgel9nemdldHMKKyMgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgIGRlZmluZSBnem9wZW4gICAgICAgICAgICAgICAgel9nem9wZW4KKyMgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICBkZWZpbmUgZ3pwdXRjICAgICAgICAgICAgICAgIHpfZ3pwdXRjCisjICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICBkZWZpbmUgZ3pyZXdpbmQgICAgICAgICAgICAgIHpfZ3pyZXdpbmQKKyMgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgZGVmaW5lIGd6c2V0cGFyYW1zICAgICAgICAgICB6X2d6c2V0cGFyYW1zCisjICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgIGRlZmluZSBnenVuZ2V0YyAgICAgICAgICAgICAgel9nenVuZ2V0YworIyAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGRlZmluZSBpbmZsYXRlICAgICAgICAgICAgICAgel9pbmZsYXRlCisjICBkZWZpbmUgaW5mbGF0ZUJhY2sgICAgICAgICAgIHpfaW5mbGF0ZUJhY2sKKyMgIGRlZmluZSBpbmZsYXRlQmFja0VuZCAgICAgICAgel9pbmZsYXRlQmFja0VuZAorIyAgZGVmaW5lIGluZmxhdGVCYWNrSW5pdF8gICAgICB6X2luZmxhdGVCYWNrSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQorIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKKyMgIGRlZmluZSBpbmZsYXRlR2V0SGVhZGVyICAgICAgel9pbmZsYXRlR2V0SGVhZGVyCisjICBkZWZpbmUgaW5mbGF0ZUluaXQyXyAgICAgICAgIHpfaW5mbGF0ZUluaXQyXworIyAgZGVmaW5lIGluZmxhdGVJbml0XyAgICAgICAgICB6X2luZmxhdGVJbml0XworIyAgZGVmaW5lIGluZmxhdGVNYXJrICAgICAgICAgICB6X2luZmxhdGVNYXJrCisjICBkZWZpbmUgaW5mbGF0ZVByaW1lICAgICAgICAgIHpfaW5mbGF0ZVByaW1lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgorIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZVN5bmMgICAgICAgICAgIHpfaW5mbGF0ZVN5bmMKKyMgIGRlZmluZSBpbmZsYXRlU3luY1BvaW50ICAgICAgel9pbmZsYXRlU3luY1BvaW50CisjICBkZWZpbmUgaW5mbGF0ZVVuZGVybWluZSAgICAgIHpfaW5mbGF0ZVVuZGVybWluZQorIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CisjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CisjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQorIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKKyMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncworIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCisKKy8qIGFsbCB6bGliIHR5cGVkZWZzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKKyMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgorIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKKyMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgorIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYworIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgorIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKKyMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCisjICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgorIyAgZGVmaW5lIG91dF9mdW5jICAgICAgICAgICAgICB6X291dF9mdW5jCisjICBkZWZpbmUgdUludCAgICAgICAgICAgICAgICAgIHpfdUludAorIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCisjICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKKyMgIGRlZmluZSB1TG9uZ2YgICAgICAgICAgICAgICAgel91TG9uZ2YKKyMgIGRlZmluZSB2b2lkcCAgICAgICAgICAgICAgICAgel92b2lkcAorIyAgZGVmaW5lIHZvaWRwYyAgICAgICAgICAgICAgICB6X3ZvaWRwYworIyAgZGVmaW5lIHZvaWRwZiAgICAgICAgICAgICAgICB6X3ZvaWRwZgorCisvKiBhbGwgemxpYiBzdHJ1Y3RzIGluIHpsaWIuaCBhbmQgemNvbmYuaCAqLworIyAgZGVmaW5lIGd6X2hlYWRlcl9zICAgICAgICAgICB6X2d6X2hlYWRlcl9zCisjICBkZWZpbmUgaW50ZXJuYWxfc3RhdGUgICAgICAgIHpfaW50ZXJuYWxfc3RhdGUKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoTVNET1MpCisjICBkZWZpbmUgTVNET1MKKyNlbmRpZgorI2lmIChkZWZpbmVkKE9TXzIpIHx8IGRlZmluZWQoX19PUzJfXykpICYmICFkZWZpbmVkKE9TMikKKyMgIGRlZmluZSBPUzIKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTkRPV1MpICYmICFkZWZpbmVkKFdJTkRPV1MpCisjICBkZWZpbmUgV0lORE9XUworI2VuZGlmCisjaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX1dJTjMyX18pCisjICBpZm5kZWYgV0lOMzIKKyMgICAgZGVmaW5lIFdJTjMyCisjICBlbmRpZgorI2VuZGlmCisjaWYgKGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTkRPV1MpKSAmJiAhZGVmaW5lZChXSU4zMikKKyMgIGlmICFkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykgJiYgIWRlZmluZWQoX18zODZfXykKKyMgICAgaWZuZGVmIFNZUzE2QklUCisjICAgICAgZGVmaW5lIFNZUzE2QklUCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBDb21waWxlIHdpdGggLURNQVhTRUdfNjRLIGlmIHRoZSBhbGxvYyBmdW5jdGlvbiBjYW5ub3QgYWxsb2NhdGUgbW9yZQorICogdGhhbiA2NGsgYnl0ZXMgYXQgYSB0aW1lIChuZWVkZWQgb24gc3lzdGVtcyB3aXRoIDE2LWJpdCBpbnQpLgorICovCisjaWZkZWYgU1lTMTZCSVQKKyMgIGRlZmluZSBNQVhTRUdfNjRLCisjZW5kaWYKKyNpZmRlZiBNU0RPUworIyAgZGVmaW5lIFVOQUxJR05FRF9PSworI2VuZGlmCisKKyNpZmRlZiBfX1NURENfVkVSU0lPTl9fCisjICBpZm5kZWYgU1REQworIyAgICBkZWZpbmUgU1REQworIyAgZW5kaWYKKyMgIGlmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorIyAgICBpZm5kZWYgU1REQzk5CisjICAgICAgZGVmaW5lIFNUREM5OQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNUREMpICYmIChkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChfX0hPU19BSVhfXykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fT1M0MDBfXykgJiYgIWRlZmluZWQoU1REQykgICAgLyogaVNlcmllcyAoZm9ybWVybHkgQVMvNDAwKS4gKi8KKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKworI2lmbmRlZiBTVERDCisjICBpZm5kZWYgY29uc3QgLyogY2Fubm90IHVzZSAhZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChjb25zdCkgb24gTWFjICovCisjICAgIGRlZmluZSBjb25zdCAgICAgICAvKiBub3RlOiBuZWVkIGEgbW9yZSBnZW50bGUgc29sdXRpb24gaGVyZSAqLworIyAgZW5kaWYKKyNlbmRpZgorCisvKiBTb21lIE1hYyBjb21waWxlcnMgbWVyZ2UgYWxsIC5oIGZpbGVzIGluY29ycmVjdGx5OiAqLworI2lmIGRlZmluZWQoX19NV0VSS1NfXyl8fGRlZmluZWQoYXBwbGVjKXx8ZGVmaW5lZChUSElOS19DKXx8ZGVmaW5lZChfX1NDX18pCisjICBkZWZpbmUgTk9fRFVNTVlfREVDTAorI2VuZGlmCisKKy8qIE1heGltdW0gdmFsdWUgZm9yIG1lbUxldmVsIGluIGRlZmxhdGVJbml0MiAqLworI2lmbmRlZiBNQVhfTUVNX0xFVkVMCisjICBpZmRlZiBNQVhTRUdfNjRLCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE1BWF9NRU1fTEVWRUwgOQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBNYXhpbXVtIHZhbHVlIGZvciB3aW5kb3dCaXRzIGluIGRlZmxhdGVJbml0MiBhbmQgaW5mbGF0ZUluaXQyLgorICogV0FSTklORzogcmVkdWNpbmcgTUFYX1dCSVRTIG1ha2VzIG1pbmlnemlwIHVuYWJsZSB0byBleHRyYWN0IC5neiBmaWxlcworICogY3JlYXRlZCBieSBnemlwLiAoRmlsZXMgY3JlYXRlZCBieSBtaW5pZ3ppcCBjYW4gc3RpbGwgYmUgZXh0cmFjdGVkIGJ5CisgKiBnemlwLikKKyAqLworI2lmbmRlZiBNQVhfV0JJVFMKKyMgIGRlZmluZSBNQVhfV0JJVFMgICAxNSAvKiAzMksgTFo3NyB3aW5kb3cgKi8KKyNlbmRpZgorCisvKiBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgZGVmbGF0ZSBhcmUgKGluIGJ5dGVzKToKKyAgICAgICAgICAgICgxIDw8ICh3aW5kb3dCaXRzKzIpKSArICAoMSA8PCAobWVtTGV2ZWwrOSkpCisgdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cz0xNSAgKyAgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4ICAoZGVmYXVsdCB2YWx1ZXMpCisgcGx1cyBhIGZldyBraWxvYnl0ZXMgZm9yIHNtYWxsIG9iamVjdHMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byByZWR1Y2UKKyB0aGUgZGVmYXVsdCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZyb20gMjU2SyB0byAxMjhLLCBjb21waWxlIHdpdGgKKyAgICAgbWFrZSBDRkxBR1M9Ii1PIC1ETUFYX1dCSVRTPTE0IC1ETUFYX01FTV9MRVZFTD03IgorIE9mIGNvdXJzZSB0aGlzIHdpbGwgZ2VuZXJhbGx5IGRlZ3JhZGUgY29tcHJlc3Npb24gKHRoZXJlJ3Mgbm8gZnJlZSBsdW5jaCkuCisKKyAgIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBpbmZsYXRlIGFyZSAoaW4gYnl0ZXMpIDEgPDwgd2luZG93Qml0cworIHRoYXQgaXMsIDMySyBmb3Igd2luZG93Qml0cz0xNSAoZGVmYXVsdCB2YWx1ZSkgcGx1cyBhIGZldyBraWxvYnl0ZXMKKyBmb3Igc21hbGwgb2JqZWN0cy4KKyovCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgZGVjbGFyYXRpb25zICovCisKKyNpZm5kZWYgT0YgLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLworIyAgaWZkZWYgU1REQworIyAgICBkZWZpbmUgT0YoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAorICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KKyAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQorICogdG8gZGVmaW5lIE5PX01FTUNQWSBpbiB6dXRpbC5oLiAgSWYgeW91IGRvbid0IG5lZWQgdGhlIG1peGVkIG1vZGVsLAorICoganVzdCBkZWZpbmUgRkFSIHRvIGJlIGVtcHR5LgorICovCisjaWZkZWYgU1lTMTZCSVQKKyMgIGlmIGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChNX0k4Nk1NKQorICAgICAvKiBNU0Mgc21hbGwgb3IgbWVkaXVtIG1vZGVsICovCisjICAgIGRlZmluZSBTTUFMTF9NRURJVU0KKyMgICAgaWZkZWYgX01TQ19WRVIKKyMgICAgICBkZWZpbmUgRkFSIF9mYXIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBGQVIgZmFyCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgKGRlZmluZWQoX19TTUFMTF9fKSB8fCBkZWZpbmVkKF9fTUVESVVNX18pKQorICAgICAvKiBUdXJibyBDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLworIyAgICBkZWZpbmUgU01BTExfTUVESVVNCisjICAgIGlmZGVmIF9fQk9STEFORENfXworIyAgICAgIGRlZmluZSBGQVIgX2ZhcgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIEZBUiBmYXIKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lORE9XUykgfHwgZGVmaW5lZChXSU4zMikKKyAgIC8qIElmIGJ1aWxkaW5nIG9yIHVzaW5nIHpsaWIgYXMgYSBETEwsIGRlZmluZSBaTElCX0RMTC4KKyAgICAqIFRoaXMgaXMgbm90IG1hbmRhdG9yeSwgYnV0IGl0IG9mZmVycyBhIGxpdHRsZSBwZXJmb3JtYW5jZSBpbmNyZWFzZS4KKyAgICAqLworIyAgaWZkZWYgWkxJQl9ETEwKKyMgICAgaWYgZGVmaW5lZChXSU4zMikgJiYgKCFkZWZpbmVkKF9fQk9STEFORENfXykgfHwgKF9fQk9STEFORENfXyA+PSAweDUwMCkpCisjICAgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAorIyAgICAgICAgZGVmaW5lIFpFWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICAgIGVsc2UKKyMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYgIC8qIFpMSUJfRExMICovCisgICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIHdpdGggdGhlIFdJTkFQSS9XSU5BUElWIGNhbGxpbmcgY29udmVudGlvbiwKKyAgICAqIGRlZmluZSBaTElCX1dJTkFQSS4KKyAgICAqIENhdXRpb246IHRoZSBzdGFuZGFyZCBaTElCMS5ETEwgaXMgTk9UIGNvbXBpbGVkIHVzaW5nIFpMSUJfV0lOQVBJLgorICAgICovCisjICBpZmRlZiBaTElCX1dJTkFQSQorIyAgICBpZmRlZiBGQVIKKyMgICAgICB1bmRlZiBGQVIKKyMgICAgZW5kaWYKKyMgICAgaW5jbHVkZSA8d2luZG93cy5oPgorICAgICAvKiBObyBuZWVkIGZvciBfZXhwb3J0LCB1c2UgWkxJQi5ERUYgaW5zdGVhZC4gKi8KKyAgICAgLyogRm9yIGNvbXBsZXRlIFdpbmRvd3MgY29tcGF0aWJpbGl0eSwgdXNlIFdJTkFQSSwgbm90IF9fc3RkY2FsbC4gKi8KKyMgICAgZGVmaW5lIFpFWFBPUlQgV0lOQVBJCisjICAgIGlmZGVmIFdJTjMyCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBXSU5BUElWCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIEZBUiBDREVDTAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19CRU9TX18pCisjICBpZmRlZiBaTElCX0RMTAorIyAgICBpZmRlZiBaTElCX0lOVEVSTkFMCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFpFWFBPUlQgICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgICBkZWZpbmUgWkVYUE9SVFZBIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFpFWFRFUk4KKyMgIGRlZmluZSBaRVhURVJOIGV4dGVybgorI2VuZGlmCisjaWZuZGVmIFpFWFBPUlQKKyMgIGRlZmluZSBaRVhQT1JUCisjZW5kaWYKKyNpZm5kZWYgWkVYUE9SVFZBCisjICBkZWZpbmUgWkVYUE9SVFZBCisjZW5kaWYKKworI2lmbmRlZiBGQVIKKyMgIGRlZmluZSBGQVIKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19NQUNUWVBFU19fKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyICBCeXRlOyAgLyogOCBiaXRzICovCisjZW5kaWYKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgdUludDsgIC8qIDE2IGJpdHMgb3IgbW9yZSAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICB1TG9uZzsgLyogMzIgYml0cyBvciBtb3JlICovCisKKyNpZmRlZiBTTUFMTF9NRURJVU0KKyAgIC8qIEJvcmxhbmQgQy9DKysgYW5kIHNvbWUgb2xkIE1TQyB2ZXJzaW9ucyBpZ25vcmUgRkFSIGluc2lkZSB0eXBlZGVmICovCisjICBkZWZpbmUgQnl0ZWYgQnl0ZSBGQVIKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgIEZBUiBCeXRlZjsKKyNlbmRpZgordHlwZWRlZiBjaGFyICBGQVIgY2hhcmY7Cit0eXBlZGVmIGludCAgIEZBUiBpbnRmOwordHlwZWRlZiB1SW50ICBGQVIgdUludGY7Cit0eXBlZGVmIHVMb25nIEZBUiB1TG9uZ2Y7CisKKyNpZmRlZiBTVERDCisgICB0eXBlZGVmIHZvaWQgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgdm9pZCBGQVIgICAqdm9pZHBmOworICAgdHlwZWRlZiB2b2lkICAgICAgICp2b2lkcDsKKyNlbHNlCisgICB0eXBlZGVmIEJ5dGUgY29uc3QgKnZvaWRwYzsKKyAgIHR5cGVkZWYgQnl0ZSBGQVIgICAqdm9pZHBmOworICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9VTklTVERfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKworI2lmZGVmIFNUREMKKyMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyNlbmRpZgorCisvKiBhIGxpdHRsZSB0cmljayB0byBhY2NvbW1vZGF0ZSBib3RoICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZAorICogIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxIiBhcyByZXF1ZXN0aW5nIDY0LWJpdCBvcGVyYXRpb25zLCAoZXZlbgorICogdGhvdWdoIHRoZSBmb3JtZXIgZG9lcyBub3QgY29uZm9ybSB0byB0aGUgTEZTIGRvY3VtZW50KSwgYnV0IGNvbnNpZGVyaW5nCisgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKKyAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCisgKi8KKyNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyNlbmRpZgorCisjaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKKyMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLworIyAgaWZkZWYgVk1TCisjICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorIyAgaWZuZGVmIHpfb2ZmX3QKKyMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBTRUVLX1NFVAorIyAgZGVmaW5lIFNFRUtfU0VUICAgICAgICAwICAgICAgIC8qIFNlZWsgZnJvbSBiZWdpbm5pbmcgb2YgZmlsZS4gICovCisjICBkZWZpbmUgU0VFS19DVVIgICAgICAgIDEgICAgICAgLyogU2VlayBmcm9tIGN1cnJlbnQgcG9zaXRpb24uICAqLworIyAgZGVmaW5lIFNFRUtfRU5EICAgICAgICAyICAgICAgIC8qIFNldCBmaWxlIHBvaW50ZXIgdG8gRU9GIHBsdXMgIm9mZnNldCIgKi8KKyNlbmRpZgorCisjaWZuZGVmIHpfb2ZmX3QKKyMgIGRlZmluZSB6X29mZl90IGxvbmcKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSB6X29mZjY0X3Qgb2ZmNjRfdAorI2Vsc2UKKyMgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fT1M0MDBfXykKKyMgIGRlZmluZSBOT192c25wcmludGYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01WU19fKQorIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgorI2VuZGlmCisKKy8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCisjaWYgZGVmaW5lZChfX01WU19fKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdF8sIkRFSU4iKQorICAjcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVFbmQsIkRFRU5EIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUJvdW5kLCJERUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVJbml0Ml8sIklOSU4yIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZUVuZCwiSU5FTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVTZXREaWN0aW9uYXJ5LCJJTlNFREkiKQorICAjcHJhZ21hIG1hcChjb21wcmVzc0JvdW5kLCJDTUJORCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfZmFzdCwiSU5GQSIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVfY29weXJpZ2h0LCJJTkNPUFkiKQorI2VuZGlmCisKKyNlbmRpZiAvKiBaQ09ORl9IICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbiBiL01vZHVsZXMvemxpYi96Y29uZi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyY2U1NmMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgpAQCAtMCwwICsxLDQyOCBAQAorLyogemNvbmYuaCAtLSBjb25maWd1cmF0aW9uIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCisgKi8KKworLyogQCgjKSAkSWQkICovCisKKyNpZm5kZWYgWkNPTkZfSAorI2RlZmluZSBaQ09ORl9ICisKKy8qCisgKiBJZiB5b3UgKnJlYWxseSogbmVlZCBhIHVuaXF1ZSBwcmVmaXggZm9yIGFsbCB0eXBlcyBhbmQgbGlicmFyeSBmdW5jdGlvbnMsCisgKiBjb21waWxlIHdpdGggLURaX1BSRUZJWC4gVGhlICJzdGFuZGFyZCIgemxpYiBzaG91bGQgYmUgY29tcGlsZWQgd2l0aG91dCBpdC4KKyAqIEV2ZW4gYmV0dGVyIHRoYW4gY29tcGlsaW5nIHdpdGggLURaX1BSRUZJWCB3b3VsZCBiZSB0byB1c2UgY29uZmlndXJlIHRvIHNldAorICogdGhpcyBwZXJtYW5lbnRseSBpbiB6Y29uZi5oIHVzaW5nICIuL2NvbmZpZ3VyZSAtLXpwcmVmaXgiLgorICovCisjaWZkZWYgWl9QUkVGSVggICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKworLyogYWxsIGxpbmtlZCBzeW1ib2xzICovCisjICBkZWZpbmUgX2Rpc3RfY29kZSAgICAgICAgICAgIHpfX2Rpc3RfY29kZQorIyAgZGVmaW5lIF9sZW5ndGhfY29kZSAgICAgICAgICB6X19sZW5ndGhfY29kZQorIyAgZGVmaW5lIF90cl9hbGlnbiAgICAgICAgICAgICB6X190cl9hbGlnbgorIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jaworIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CisjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jaworIyAgZGVmaW5lIF90cl90YWxseSAgICAgICAgICAgICB6X190cl90YWxseQorIyAgZGVmaW5lIGFkbGVyMzIgICAgICAgICAgICAgICB6X2FkbGVyMzIKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgICAgICAgel9hZGxlcjMyX2NvbWJpbmUKKyMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmU2NCAgICAgel9hZGxlcjMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICBkZWZpbmUgY29tcHJlc3NCb3VuZCAgICAgICAgIHpfY29tcHJlc3NCb3VuZAorIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCisjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQorIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NAorIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKKyMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKKyMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQorIyAgZGVmaW5lIGRlZmxhdGVFbmQgICAgICAgICAgICB6X2RlZmxhdGVFbmQKKyMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCisjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCisjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQorIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgorIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCisjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKKyMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCisjICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKKyMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgorIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKKyMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgorIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCisjICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0CisjICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAorIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKKyMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0CisjICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQorIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCisjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKKyMgIGRlZmluZSBpbmZsYXRlQmFja0luaXRfICAgICAgel9pbmZsYXRlQmFja0luaXRfCisjICBkZWZpbmUgaW5mbGF0ZUNvcHkgICAgICAgICAgIHpfaW5mbGF0ZUNvcHkKKyMgIGRlZmluZSBpbmZsYXRlRW5kICAgICAgICAgICAgel9pbmZsYXRlRW5kCisjICBkZWZpbmUgaW5mbGF0ZUdldEhlYWRlciAgICAgIHpfaW5mbGF0ZUdldEhlYWRlcgorIyAgZGVmaW5lIGluZmxhdGVJbml0Ml8gICAgICAgICB6X2luZmxhdGVJbml0Ml8KKyMgIGRlZmluZSBpbmZsYXRlSW5pdF8gICAgICAgICAgel9pbmZsYXRlSW5pdF8KKyMgIGRlZmluZSBpbmZsYXRlTWFyayAgICAgICAgICAgel9pbmZsYXRlTWFyaworIyAgZGVmaW5lIGluZmxhdGVQcmltZSAgICAgICAgICB6X2luZmxhdGVQcmltZQorIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAorIyAgZGVmaW5lIGluZmxhdGVSZXNldDIgICAgICAgICB6X2luZmxhdGVSZXNldDIKKyMgIGRlZmluZSBpbmZsYXRlU2V0RGljdGlvbmFyeSAgel9pbmZsYXRlU2V0RGljdGlvbmFyeQorIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCisjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAorIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlX2NvcHlyaWdodCAgICAgel9pbmZsYXRlX2NvcHlyaWdodAorIyAgZGVmaW5lIGluZmxhdGVfZmFzdCAgICAgICAgICB6X2luZmxhdGVfZmFzdAorIyAgZGVmaW5lIGluZmxhdGVfdGFibGUgICAgICAgICB6X2luZmxhdGVfdGFibGUKKyMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCisjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCisjICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKKyMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgorCisvKiBhbGwgemxpYiB0eXBlZGVmcyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBCeXRlICAgICAgICAgICAgICAgICAgel9CeXRlCisjICBkZWZpbmUgQnl0ZWYgICAgICAgICAgICAgICAgIHpfQnl0ZWYKKyMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCisjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKKyMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKKyMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKKyMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCisjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYworIyAgZGVmaW5lIGludGYgICAgICAgICAgICAgICAgICB6X2ludGYKKyMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYworIyAgZGVmaW5lIHVJbnQgICAgICAgICAgICAgICAgICB6X3VJbnQKKyMgIGRlZmluZSB1SW50ZiAgICAgICAgICAgICAgICAgel91SW50ZgorIyAgZGVmaW5lIHVMb25nICAgICAgICAgICAgICAgICB6X3VMb25nCisjICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCisjICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKKyMgIGRlZmluZSB2b2lkcGMgICAgICAgICAgICAgICAgel92b2lkcGMKKyMgIGRlZmluZSB2b2lkcGYgICAgICAgICAgICAgICAgel92b2lkcGYKKworLyogYWxsIHpsaWIgc3RydWN0cyBpbiB6bGliLmggYW5kIHpjb25mLmggKi8KKyMgIGRlZmluZSBnel9oZWFkZXJfcyAgICAgICAgICAgel9nel9oZWFkZXJfcworIyAgZGVmaW5lIGludGVybmFsX3N0YXRlICAgICAgICB6X2ludGVybmFsX3N0YXRlCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQorIyAgZGVmaW5lIE1TRE9TCisjZW5kaWYKKyNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCisjICBkZWZpbmUgT1MyCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQorIyAgZGVmaW5lIFdJTkRPV1MKKyNlbmRpZgorI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQorIyAgaWZuZGVmIFdJTjMyCisjICAgIGRlZmluZSBXSU4zMgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCisjICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCisjICAgIGlmbmRlZiBTWVMxNkJJVAorIyAgICAgIGRlZmluZSBTWVMxNkJJVAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKgorICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKKyAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KKyAqLworI2lmZGVmIFNZUzE2QklUCisjICBkZWZpbmUgTUFYU0VHXzY0SworI2VuZGlmCisjaWZkZWYgTVNET1MKKyMgIGRlZmluZSBVTkFMSUdORURfT0sKKyNlbmRpZgorCisjaWZkZWYgX19TVERDX1ZFUlNJT05fXworIyAgaWZuZGVmIFNUREMKKyMgICAgZGVmaW5lIFNUREMKKyMgIGVuZGlmCisjICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKyMgICAgaWZuZGVmIFNUREM5OQorIyAgICAgIGRlZmluZSBTVERDOTkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCisjICBkZWZpbmUgU1REQworI2VuZGlmCisjaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKKyMgIGRlZmluZSBTVERDCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQorIyAgZGVmaW5lIFNUREMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKKyNpZm5kZWYgU1REQworIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLworIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KKyNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQorIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKKyNlbmRpZgorCisvKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KKyNpZm5kZWYgTUFYX01FTV9MRVZFTAorIyAgaWZkZWYgTUFYU0VHXzY0SworIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4CisjICBlbHNlCisjICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KKyAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKKyAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQorICogZ3ppcC4pCisgKi8KKyNpZm5kZWYgTUFYX1dCSVRTCisjICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCisjZW5kaWYKKworLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CisgICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQorIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQorIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCisgdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCisgICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKKyBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgorCisgICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKKyB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCisgZm9yIHNtYWxsIG9iamVjdHMuCisqLworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLworCisjaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KKyMgIGlmZGVmIFNUREMKKyMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCisjICBlbHNlCisjICAgIGRlZmluZSBPRihhcmdzKSAgKCkKKyMgIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKKyAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCisgKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKKyAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKKyAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KKyAqLworI2lmZGVmIFNZUzE2QklUCisjICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKKyAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLworIyAgICBkZWZpbmUgU01BTExfTUVESVVNCisjICAgIGlmZGVmIF9NU0NfVkVSCisjICAgICAgZGVmaW5lIEZBUiBfZmFyCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgRkFSIGZhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKKyAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KKyMgICAgZGVmaW5lIFNNQUxMX01FRElVTQorIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KKyMgICAgICBkZWZpbmUgRkFSIF9mYXIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBGQVIgZmFyCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCisgICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCisgICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCisgICAgKi8KKyMgIGlmZGVmIFpMSUJfRExMCisjICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQorIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKKyMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgICBlbHNlCisjICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmICAvKiBaTElCX0RMTCAqLworICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCisgICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCisgICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KKyAgICAqLworIyAgaWZkZWYgWkxJQl9XSU5BUEkKKyMgICAgaWZkZWYgRkFSCisjICAgICAgdW5kZWYgRkFSCisjICAgIGVuZGlmCisjICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCisgICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCisjICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQorIyAgICBpZmRlZiBXSU4zMgorIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fQkVPU19fKQorIyAgaWZkZWYgWkxJQl9ETEwKKyMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAorIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBaRVhURVJOCisjICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KKyNlbmRpZgorI2lmbmRlZiBaRVhQT1JUCisjICBkZWZpbmUgWkVYUE9SVAorI2VuZGlmCisjaWZuZGVmIFpFWFBPUlRWQQorIyAgZGVmaW5lIFpFWFBPUlRWQQorI2VuZGlmCisKKyNpZm5kZWYgRkFSCisjICBkZWZpbmUgRkFSCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKK3R5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLworCisjaWZkZWYgU01BTExfTUVESVVNCisgICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLworIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCisjZWxzZQorICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7CisjZW5kaWYKK3R5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwordHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKK3R5cGVkZWYgdUludCAgRkFSIHVJbnRmOwordHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOworCisjaWZkZWYgU1REQworICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7CisgICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKKyAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7CisjZWxzZQorICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7CisgICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKKyAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAorI2VuZGlmCisKKyNpZmRlZiBTVERDCisjICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgLyogZm9yIG9mZl90ICovCisjZW5kaWYKKworLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKKyAqICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMSIgYXMgcmVxdWVzdGluZyA2NC1iaXQgb3BlcmF0aW9ucywgKGV2ZW4KKyAqIHRob3VnaCB0aGUgZm9ybWVyIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIExGUyBkb2N1bWVudCksIGJ1dCBjb25zaWRlcmluZworICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCisgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucworICovCisjaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjICB1bmRlZiBfTEFSR0VGSUxFNjRfU09VUkNFCisjZW5kaWYKKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIFNFRUtfKiBhbmQgb2ZmX3QgKi8KKyMgIGlmZGVmIFZNUworIyAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgIC8qIGZvciBvZmZfdCAqLworIyAgZW5kaWYKKyMgIGlmbmRlZiB6X29mZl90CisjICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgU0VFS19TRVQKKyMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLworIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KKyMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCisjZW5kaWYKKworI2lmbmRlZiB6X29mZl90CisjICBkZWZpbmUgel9vZmZfdCBsb25nCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKKyNlbHNlCisjICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX09TNDAwX18pCisjICBkZWZpbmUgTk9fdnNucHJpbnRmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19NVlNfXykKKyMgIGRlZmluZSBOT192c25wcmludGYKKyNlbmRpZgorCisvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLworI2lmIGRlZmluZWQoX19NVlNfXykKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUluaXRfLCJERUlOIikKKyAgI3ByYWdtYSBtYXAoZGVmbGF0ZUluaXQyXywiREVJTjIiKQorICAjcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJERUVORCIpCisgICNwcmFnbWEgbWFwKGRlZmxhdGVCb3VuZCwiREVCTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlSW5pdF8sIklOSU4iKQorICAjcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCisgICNwcmFnbWEgbWFwKGluZmxhdGVFbmQsIklORU5EIikKKyAgI3ByYWdtYSBtYXAoaW5mbGF0ZVN5bmMsIklOU1kiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKKyAgI3ByYWdtYSBtYXAoY29tcHJlc3NCb3VuZCwiQ01CTkQiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlX3RhYmxlLCJJTlRBQkwiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlX2Zhc3QsIklORkEiKQorICAjcHJhZ21hIG1hcChpbmZsYXRlX2NvcHlyaWdodCwiSU5DT1BZIikKKyNlbmRpZgorCisjZW5kaWYgLyogWkNPTkZfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuMyBiL01vZHVsZXMvemxpYi96bGliLjMKaW5kZXggOTBiODE2Mi4uMjdhZGM0YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuMworKysgYi9Nb2R1bGVzL3psaWIvemxpYi4zCkBAIC0xLDQgKzEsNCBAQAotLlRIIFpMSUIgMyAiMTggSnVseSAyMDA1IgorLlRIIFpMSUIgMyAiMTkgQXByIDIwMTAiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtOSwxNSArOSwxNSBAQAogVGhlCiAuSSB6bGliCiBsaWJyYXJ5IGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KLVRoZSBjb2RlIGlzIHRocmVhZCBzYWZlLgorVGhlIGNvZGUgaXMgdGhyZWFkIHNhZmUsIGFzc3VtaW5nIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zCit1c2VkIGFyZSB0aHJlYWQgc2FmZSwgc3VjaCBhcyBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4KIEl0IHByb3ZpZGVzIGluLW1lbW9yeSBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMsCiBpbmNsdWRpbmcgaW50ZWdyaXR5IGNoZWNrcyBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEuCiBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pCi1idXQgb3RoZXIgYWxnb3JpdGhtcyB3aWxsIGJlIGFkZGVkIGxhdGVyCi1hbmQgd2lsbCBoYXZlIHRoZSBzYW1lIHN0cmVhbSBpbnRlcmZhY2UuCitidXQgb3RoZXIgYWxnb3JpdGhtcyBtYXkgYmUgYWRkZWQgbGF0ZXIKK3dpdGggdGhlIHNhbWUgc3RyZWFtIGludGVyZmFjZS4KIC5MUAogQ29tcHJlc3Npb24gY2FuIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcCBpZiB0aGUgYnVmZmVycyBhcmUgbGFyZ2UgZW5vdWdoCi0oZm9yIGV4YW1wbGUgaWYgYW4gaW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwKIG9yIGNhbiBiZSBkb25lIGJ5IHJlcGVhdGVkIGNhbGxzIG9mIHRoZSBjb21wcmVzc2lvbiBmdW5jdGlvbi4KIEluIHRoZSBsYXR0ZXIgY2FzZSwKIHRoZSBhcHBsaWNhdGlvbiBtdXN0IHByb3ZpZGUgbW9yZSBpbnB1dCBhbmQvb3IgY29uc3VtZSB0aGUgb3V0cHV0CkBAIC0zMCw3ICszMCw3IEBACiAuTFAKIFRoZSBsaWJyYXJ5IGRvZXMgbm90IGluc3RhbGwgYW55IHNpZ25hbCBoYW5kbGVyLgogVGhlIGRlY29kZXIgY2hlY2tzIHRoZSBjb25zaXN0ZW5jeSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLAotc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyIGNyYXNoIGV2ZW4gaW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCitzbyB0aGUgbGlicmFyeSBzaG91bGQgbmV2ZXIgY3Jhc2ggZXZlbiBpbiB0aGUgY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCiAuTFAKIEFsbCBmdW5jdGlvbnMgb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUKIC5JUiB6bGliLmggLgpAQCAtMzgsMTggKzM4LDE5IEBACiBpbiB0aGUgZmlsZXMKIC5JIGV4YW1wbGUuYwogYW5kCi0uSVIgbWluaWd6aXAuYyAuCisuSVIgbWluaWd6aXAuYywKK2FzIHdlbGwgYXMgb3RoZXIgZXhhbXBsZXMgaW4gdGhlCisuSVIgZXhhbXBsZXMvCitkaXJlY3RvcnkuCiAuTFAKIENoYW5nZXMgdG8gdGhpcyB2ZXJzaW9uIGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlCiAuSSBDaGFuZ2VMb2cKLXRoYXQgYWNjb21wYW5pZXMgdGhlIHNvdXJjZSwKLWFuZCBhcmUgY29uY2VybmVkIHByaW1hcmlseSB3aXRoIGJ1ZyBmaXhlcyBhbmQgcG9ydGFiaWxpdHkgZW5oYW5jZW1lbnRzLgordGhhdCBhY2NvbXBhbmllcyB0aGUgc291cmNlLgogLkxQCi1BIEphdmEgaW1wbGVtZW50YXRpb24gb2YKIC5JIHpsaWIKLWlzIGF2YWlsYWJsZSBpbiB0aGUgSmF2YSBEZXZlbG9wbWVudCBLaXQgMS4xOgoraXMgYXZhaWxhYmxlIGluIEphdmEgdXNpbmcgdGhlIGphdmEudXRpbC56aXAgcGFja2FnZToKIC5JUAotaHR0cDovL3d3dy5qYXZhc29mdC5jb20vcHJvZHVjdHMvSkRLLzEuMS9kb2NzL2FwaS9QYWNrYWdlLWphdmEudXRpbC56aXAuaHRtbAoraHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvdGVjaG5pY2FsQXJ0aWNsZXMvUHJvZ3JhbW1pbmcvY29tcHJlc3Npb24vCiAuTFAKIEEgUGVybCBpbnRlcmZhY2UgdG8KIC5JUiB6bGliICwKQEAgLTU3LDcgKzU4LDcgQEAKIGlzIGF2YWlsYWJsZSBhdCBDUEFOIChDb21wcmVoZW5zaXZlIFBlcmwgQXJjaGl2ZSBOZXR3b3JrKSBzaXRlcywKIGluY2x1ZGluZzoKIC5JUAotaHR0cDovL3d3dy5jcGFuLm9yZy9tb2R1bGVzL2J5LW1vZHVsZS9Db21wcmVzcy8KK2h0dHA6Ly9zZWFyY2guY3Bhbi5vcmcvfnBtcXMvSU8tQ29tcHJlc3MtWmxpYi8KIC5MUAogQSBQeXRob24gaW50ZXJmYWNlIHRvCiAuSVIgemxpYiAsCkBAIC02NiwxNCArNjcsMTEgQEAKIC5JUAogaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbAogLkxQCi1BCiAuSSB6bGliCi1iaW5kaW5nIGZvcgotLklSIHRjbCAoMSksCi13cml0dGVuIGJ5IEFuZHJlYXMgS3VwcmllcyAoYS5rdXByaWVzQHdlc3RlbmQuY29tKSwKLWlzIGF2YWlsbGFibGUgYXQ6CitpcyBidWlsdCBpbnRvCisuSVIgdGNsOgogLklQCi1odHRwOi8vd3d3Lndlc3RlbmQuY29tL35rdXByaWVzL2RvYy90cmYvbWFuL21hbi5odG1sCitodHRwOi8vd2lraS50Y2wudGsvNDYxMAogLkxQCiBBbiBleHBlcmltZW50YWwgcGFja2FnZSB0byByZWFkIGFuZCB3cml0ZSBmaWxlcyBpbiAuemlwIGZvcm1hdCwKIHdyaXR0ZW4gb24gdG9wIG9mCkBAIC04MSw0MCArNzksMzQgQEAKIGJ5IEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSksCiBpcyBhdmFpbGFibGUgYXQ6CiAuSVAKLWh0dHA6Ly93d3cud2luaW1hZ2UuY29tL3pMaWJEbGwvdW56aXAuaHRtbAoraHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC9taW5pemlwLmh0bWwKIGFuZCBhbHNvIGluIHRoZQogLkkgY29udHJpYi9taW5pemlwCiBkaXJlY3Rvcnkgb2YgdGhlIG1haW4KIC5JIHpsaWIKLXdlYiBzaXRlLgorc291cmNlIGRpc3RyaWJ1dGlvbi4KIC5TSCAiU0VFIEFMU08iCiBUaGUKIC5JIHpsaWIKLXdlYiBzaXRlIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgb2YgdGhlc2UgbG9jYXRpb25zOgord2ViIHNpdGUgY2FuIGJlIGZvdW5kIGF0OgogLklQCi1odHRwOi8vd3d3LnpsaWIub3JnCi0uYnIKLWh0dHA6Ly93d3cuZ3ppcC5vcmcvemxpYi8KK2h0dHA6Ly96bGliLm5ldC8KIC5MUAogVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGlicmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDCiAoUmVxdWVzdCBmb3IgQ29tbWVudHMpIDE5NTAgdG8gMTk1MiBpbiB0aGUgZmlsZXM6CiAuSVAKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0IChjb25jZXJuaW5nIHpsaWIgZm9ybWF0KQoraHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dCAoY29uY2VybmluZyBkZWZsYXRlIGZvcm1hdCkKK2h0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0IChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKIC5icgotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1Mi50eHQgKGNvbmNlcm5pbmcgZ3ppcCBmb3JtYXQpCitodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUyLnR4dCAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuTFAKLVRoZXNlIGRvY3VtZW50cyBhcmUgYWxzbyBhdmFpbGFibGUgaW4gb3RoZXIgZm9ybWF0cyBmcm9tOgotLklQCi1mdHA6Ly9mdHAudXUubmV0L2dyYXBoaWNzL3BuZy9kb2N1bWVudHMvemxpYi96ZG9jLWluZGV4Lmh0bWwKLS5MUAotTWFyayBOZWxzb24gKG1hcmtuQGllZWUub3JnKSB3cm90ZSBhbiBhcnRpY2xlIGFib3V0CitNYXJrIE5lbHNvbiB3cm90ZSBhbiBhcnRpY2xlIGFib3V0CiAuSSB6bGliCiBmb3IgdGhlIEphbi4gMTk5NyBpc3N1ZSBvZiAgRHIuIERvYmIncyBKb3VybmFsOwogYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdDoKIC5JUAotaHR0cDovL2RvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96bGlidG9vbC5odG0KK2h0dHA6Ly9tYXJrbmVsc29uLnVzLzE5OTcvMDEvMDEvemxpYi1lbmdpbmUvCiAuU0ggIlJFUE9SVElORyBQUk9CTEVNUyIKIEJlZm9yZSByZXBvcnRpbmcgYSBwcm9ibGVtLAogcGxlYXNlIGNoZWNrIHRoZQpAQCAtMTI3LDE0ICsxMTksMTQgQEAKIC5JIHpsaWIKIEZBUSBhdDoKIC5JUAotaHR0cDovL3d3dy5nemlwLm9yZy96bGliL3psaWJfZmFxLmh0bWwKK2h0dHA6Ly96bGliLm5ldC96bGliX2ZhcS5odG1sCiAuTFAKIGJlZm9yZSBhc2tpbmcgZm9yIGhlbHAuCiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuMwotQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMi41CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuaCBiL01vZHVsZXMvemxpYi96bGliLmgKaW5kZXggMDIyODE3OS4uYmZiYmE4MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuaAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5oCkBAIC0xLDcgKzEsNyBAQAogLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjMsIEp1bHkgMTh0aCwgMjAwNQorICB2ZXJzaW9uIDEuMi41LCBBcHJpbCAxOXRoLCAyMDEwCiAKLSAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5IGFuZCBNYXJrIEFkbGVyCiAKICAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKICAgd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwpAQCAtMzcsNDEgKzM3LDQ0IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjMiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTIzMAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi41IgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyNTAKKyNkZWZpbmUgWkxJQl9WRVJfTUFKT1IgMQorI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCisjZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDUKKyNkZWZpbmUgWkxJQl9WRVJfU1VCUkVWSVNJT04gMAogCiAvKgotICAgICBUaGUgJ3psaWInIGNvbXByZXNzaW9uIGxpYnJhcnkgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZAotICBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGludGVncml0eSBjaGVja3Mgb2YgdGhlIHVuY29tcHJlc3NlZAotICBkYXRhLiAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIG9ubHkgb25lIGNvbXByZXNzaW9uIG1ldGhvZAotICAoZGVmbGF0aW9uKSBidXQgb3RoZXIgYWxnb3JpdGhtcyB3aWxsIGJlIGFkZGVkIGxhdGVyIGFuZCB3aWxsIGhhdmUgdGhlIHNhbWUKLSAgc3RyZWFtIGludGVyZmFjZS4KKyAgICBUaGUgJ3psaWInIGNvbXByZXNzaW9uIGxpYnJhcnkgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZAorICBkZWNvbXByZXNzaW9uIGZ1bmN0aW9ucywgaW5jbHVkaW5nIGludGVncml0eSBjaGVja3Mgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgorICBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgc3VwcG9ydHMgb25seSBvbmUgY29tcHJlc3Npb24gbWV0aG9kIChkZWZsYXRpb24pCisgIGJ1dCBvdGhlciBhbGdvcml0aG1zIHdpbGwgYmUgYWRkZWQgbGF0ZXIgYW5kIHdpbGwgaGF2ZSB0aGUgc2FtZSBzdHJlYW0KKyAgaW50ZXJmYWNlLgogCi0gICAgIENvbXByZXNzaW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdlCi0gIGVub3VnaCAoZm9yIGV4YW1wbGUgaWYgYW4gaW5wdXQgZmlsZSBpcyBtbWFwJ2VkKSwgb3IgY2FuIGJlIGRvbmUgYnkKLSAgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLiAgSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUKLSAgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAorICAgIENvbXByZXNzaW9uIGNhbiBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAgaWYgdGhlIGJ1ZmZlcnMgYXJlIGxhcmdlIGVub3VnaCwKKyAgb3IgY2FuIGJlIGRvbmUgYnkgcmVwZWF0ZWQgY2FsbHMgb2YgdGhlIGNvbXByZXNzaW9uIGZ1bmN0aW9uLiAgSW4gdGhlIGxhdHRlcgorICBjYXNlLCB0aGUgYXBwbGljYXRpb24gbXVzdCBwcm92aWRlIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWUgdGhlIG91dHB1dAogICAocHJvdmlkaW5nIG1vcmUgb3V0cHV0IHNwYWNlKSBiZWZvcmUgZWFjaCBjYWxsLgogCi0gICAgIFRoZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0IHVzZWQgYnkgZGVmYXVsdCBieSB0aGUgaW4tbWVtb3J5IGZ1bmN0aW9ucyBpcworICAgIFRoZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0IHVzZWQgYnkgZGVmYXVsdCBieSB0aGUgaW4tbWVtb3J5IGZ1bmN0aW9ucyBpcwogICB0aGUgemxpYiBmb3JtYXQsIHdoaWNoIGlzIGEgemxpYiB3cmFwcGVyIGRvY3VtZW50ZWQgaW4gUkZDIDE5NTAsIHdyYXBwZWQKICAgYXJvdW5kIGEgZGVmbGF0ZSBzdHJlYW0sIHdoaWNoIGlzIGl0c2VsZiBkb2N1bWVudGVkIGluIFJGQyAxOTUxLgogCi0gICAgIFRoZSBsaWJyYXJ5IGFsc28gc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdAorICAgIFRoZSBsaWJyYXJ5IGFsc28gc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdAogICB3aXRoIGFuIGludGVyZmFjZSBzaW1pbGFyIHRvIHRoYXQgb2Ygc3RkaW8gdXNpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IHN0YXJ0CiAgIHdpdGggImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEKICAgZ3ppcCB3cmFwcGVyLCBkb2N1bWVudGVkIGluIFJGQyAxOTUyLCB3cmFwcGVkIGFyb3VuZCBhIGRlZmxhdGUgc3RyZWFtLgogCi0gICAgIFRoaXMgbGlicmFyeSBjYW4gb3B0aW9uYWxseSByZWFkIGFuZCB3cml0ZSBnemlwIHN0cmVhbXMgaW4gbWVtb3J5IGFzIHdlbGwuCisgICAgVGhpcyBsaWJyYXJ5IGNhbiBvcHRpb25hbGx5IHJlYWQgYW5kIHdyaXRlIGd6aXAgc3RyZWFtcyBpbiBtZW1vcnkgYXMgd2VsbC4KIAotICAgICBUaGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBhY3QgYW5kIGZhc3QgZm9yIHVzZSBpbiBtZW1vcnkKKyAgICBUaGUgemxpYiBmb3JtYXQgd2FzIGRlc2lnbmVkIHRvIGJlIGNvbXBhY3QgYW5kIGZhc3QgZm9yIHVzZSBpbiBtZW1vcnkKICAgYW5kIG9uIGNvbW11bmljYXRpb25zIGNoYW5uZWxzLiAgVGhlIGd6aXAgZm9ybWF0IHdhcyBkZXNpZ25lZCBmb3Igc2luZ2xlLQogICBmaWxlIGNvbXByZXNzaW9uIG9uIGZpbGUgc3lzdGVtcywgaGFzIGEgbGFyZ2VyIGhlYWRlciB0aGFuIHpsaWIgdG8gbWFpbnRhaW4KICAgZGlyZWN0b3J5IGluZm9ybWF0aW9uLCBhbmQgdXNlcyBhIGRpZmZlcmVudCwgc2xvd2VyIGNoZWNrIG1ldGhvZCB0aGFuIHpsaWIuCiAKLSAgICAgVGhlIGxpYnJhcnkgZG9lcyBub3QgaW5zdGFsbCBhbnkgc2lnbmFsIGhhbmRsZXIuIFRoZSBkZWNvZGVyIGNoZWNrcwotICB0aGUgY29uc2lzdGVuY3kgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSwgc28gdGhlIGxpYnJhcnkgc2hvdWxkIG5ldmVyCi0gIGNyYXNoIGV2ZW4gaW4gY2FzZSBvZiBjb3JydXB0ZWQgaW5wdXQuCisgICAgVGhlIGxpYnJhcnkgZG9lcyBub3QgaW5zdGFsbCBhbnkgc2lnbmFsIGhhbmRsZXIuICBUaGUgZGVjb2RlciBjaGVja3MKKyAgdGhlIGNvbnNpc3RlbmN5IG9mIHRoZSBjb21wcmVzc2VkIGRhdGEsIHNvIHRoZSBsaWJyYXJ5IHNob3VsZCBuZXZlciBjcmFzaAorICBldmVuIGluIGNhc2Ugb2YgY29ycnVwdGVkIGlucHV0LgogKi8KIAogdHlwZWRlZiB2b2lkcGYgKCphbGxvY19mdW5jKSBPRigodm9pZHBmIG9wYXF1ZSwgdUludCBpdGVtcywgdUludCBzaXplKSk7CkBAIC0xMjYsNDUgKzEyOSw0NSBAQAogdHlwZWRlZiBnel9oZWFkZXIgRkFSICpnel9oZWFkZXJwOwogCiAvKgotICAgVGhlIGFwcGxpY2F0aW9uIG11c3QgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luIHdoZW4gYXZhaWxfaW4gaGFzCi0gICBkcm9wcGVkIHRvIHplcm8uIEl0IG11c3QgdXBkYXRlIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgd2hlbiBhdmFpbF9vdXQKLSAgIGhhcyBkcm9wcGVkIHRvIHplcm8uIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluaXRpYWxpemUgemFsbG9jLCB6ZnJlZSBhbmQKLSAgIG9wYXF1ZSBiZWZvcmUgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbi4gQWxsIG90aGVyIGZpZWxkcyBhcmUgc2V0IGJ5IHRoZQotICAgY29tcHJlc3Npb24gbGlicmFyeSBhbmQgbXVzdCBub3QgYmUgdXBkYXRlZCBieSB0aGUgYXBwbGljYXRpb24uCisgICAgIFRoZSBhcHBsaWNhdGlvbiBtdXN0IHVwZGF0ZSBuZXh0X2luIGFuZCBhdmFpbF9pbiB3aGVuIGF2YWlsX2luIGhhcyBkcm9wcGVkCisgICB0byB6ZXJvLiAgSXQgbXVzdCB1cGRhdGUgbmV4dF9vdXQgYW5kIGF2YWlsX291dCB3aGVuIGF2YWlsX291dCBoYXMgZHJvcHBlZAorICAgdG8gemVyby4gIFRoZSBhcHBsaWNhdGlvbiBtdXN0IGluaXRpYWxpemUgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIGJlZm9yZQorICAgY2FsbGluZyB0aGUgaW5pdCBmdW5jdGlvbi4gIEFsbCBvdGhlciBmaWVsZHMgYXJlIHNldCBieSB0aGUgY29tcHJlc3Npb24KKyAgIGxpYnJhcnkgYW5kIG11c3Qgbm90IGJlIHVwZGF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgogCi0gICBUaGUgb3BhcXVlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKLSAgIHBhcmFtZXRlciBmb3IgY2FsbHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjdXN0b20KLSAgIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBhdHRhY2hlcyBubyBtZWFuaW5nIHRvIHRoZQorICAgICBUaGUgb3BhcXVlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QKKyAgIHBhcmFtZXRlciBmb3IgY2FsbHMgb2YgemFsbG9jIGFuZCB6ZnJlZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3VzdG9tCisgICBtZW1vcnkgbWFuYWdlbWVudC4gIFRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGF0dGFjaGVzIG5vIG1lYW5pbmcgdG8gdGhlCiAgICBvcGFxdWUgdmFsdWUuCiAKLSAgIHphbGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuCisgICAgIHphbGxvYyBtdXN0IHJldHVybiBaX05VTEwgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBtZW1vcnkgZm9yIHRoZSBvYmplY3QuCiAgICBJZiB6bGliIGlzIHVzZWQgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbiwgemFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlCiAgICB0aHJlYWQgc2FmZS4KIAotICAgT24gMTYtYml0IHN5c3RlbXMsIHRoZSBmdW5jdGlvbnMgemFsbG9jIGFuZCB6ZnJlZSBtdXN0IGJlIGFibGUgdG8gYWxsb2NhdGUKLSAgIGV4YWN0bHkgNjU1MzYgYnl0ZXMsIGJ1dCB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBhbGxvY2F0ZSBtb3JlIHRoYW4gdGhpcwotICAgaWYgdGhlIHN5bWJvbCBNQVhTRUdfNjRLIGlzIGRlZmluZWQgKHNlZSB6Y29uZi5oKS4gV0FSTklORzogT24gTVNET1MsCi0gICBwb2ludGVycyByZXR1cm5lZCBieSB6YWxsb2MgZm9yIG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCoKLSAgIGhhdmUgdGhlaXIgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gVGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBmdW5jdGlvbgotICAgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5IGVuc3VyZXMgdGhpcyAoc2VlIHp1dGlsLmMpLiBUbyByZWR1Y2UgbWVtb3J5Ci0gICByZXF1aXJlbWVudHMgYW5kIGF2b2lkIGFueSBhbGxvY2F0aW9uIG9mIDY0SyBvYmplY3RzLCBhdCB0aGUgZXhwZW5zZSBvZgotICAgY29tcHJlc3Npb24gcmF0aW8sIGNvbXBpbGUgdGhlIGxpYnJhcnkgd2l0aCAtRE1BWF9XQklUUz0xNCAoc2VlIHpjb25mLmgpLgorICAgICBPbiAxNi1iaXQgc3lzdGVtcywgdGhlIGZ1bmN0aW9ucyB6YWxsb2MgYW5kIHpmcmVlIG11c3QgYmUgYWJsZSB0byBhbGxvY2F0ZQorICAgZXhhY3RseSA2NTUzNiBieXRlcywgYnV0IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG1vcmUgdGhhbiB0aGlzIGlmCisgICB0aGUgc3ltYm9sIE1BWFNFR182NEsgaXMgZGVmaW5lZCAoc2VlIHpjb25mLmgpLiAgV0FSTklORzogT24gTVNET1MsIHBvaW50ZXJzCisgICByZXR1cm5lZCBieSB6YWxsb2MgZm9yIG9iamVjdHMgb2YgZXhhY3RseSA2NTUzNiBieXRlcyAqbXVzdCogaGF2ZSB0aGVpcgorICAgb2Zmc2V0IG5vcm1hbGl6ZWQgdG8gemVyby4gIFRoZSBkZWZhdWx0IGFsbG9jYXRpb24gZnVuY3Rpb24gcHJvdmlkZWQgYnkgdGhpcworICAgbGlicmFyeSBlbnN1cmVzIHRoaXMgKHNlZSB6dXRpbC5jKS4gIFRvIHJlZHVjZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGFuZCBhdm9pZAorICAgYW55IGFsbG9jYXRpb24gb2YgNjRLIG9iamVjdHMsIGF0IHRoZSBleHBlbnNlIG9mIGNvbXByZXNzaW9uIHJhdGlvLCBjb21waWxlCisgICB0aGUgbGlicmFyeSB3aXRoIC1ETUFYX1dCSVRTPTE0IChzZWUgemNvbmYuaCkuCiAKLSAgIFRoZSBmaWVsZHMgdG90YWxfaW4gYW5kIHRvdGFsX291dCBjYW4gYmUgdXNlZCBmb3Igc3RhdGlzdGljcyBvcgotICAgcHJvZ3Jlc3MgcmVwb3J0cy4gQWZ0ZXIgY29tcHJlc3Npb24sIHRvdGFsX2luIGhvbGRzIHRoZSB0b3RhbCBzaXplIG9mCi0gICB0aGUgdW5jb21wcmVzc2VkIGRhdGEgYW5kIG1heSBiZSBzYXZlZCBmb3IgdXNlIGluIHRoZSBkZWNvbXByZXNzb3IKLSAgIChwYXJ0aWN1bGFybHkgaWYgdGhlIGRlY29tcHJlc3NvciB3YW50cyB0byBkZWNvbXByZXNzIGV2ZXJ5dGhpbmcgaW4KLSAgIGEgc2luZ2xlIHN0ZXApLgorICAgICBUaGUgZmllbGRzIHRvdGFsX2luIGFuZCB0b3RhbF9vdXQgY2FuIGJlIHVzZWQgZm9yIHN0YXRpc3RpY3Mgb3IgcHJvZ3Jlc3MKKyAgIHJlcG9ydHMuICBBZnRlciBjb21wcmVzc2lvbiwgdG90YWxfaW4gaG9sZHMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICB1bmNvbXByZXNzZWQgZGF0YSBhbmQgbWF5IGJlIHNhdmVkIGZvciB1c2UgaW4gdGhlIGRlY29tcHJlc3NvciAocGFydGljdWxhcmx5CisgICBpZiB0aGUgZGVjb21wcmVzc29yIHdhbnRzIHRvIGRlY29tcHJlc3MgZXZlcnl0aGluZyBpbiBhIHNpbmdsZSBzdGVwKS4KICovCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnN0YW50cyAqLwogCiAjZGVmaW5lIFpfTk9fRkxVU0ggICAgICAwCi0jZGVmaW5lIFpfUEFSVElBTF9GTFVTSCAxIC8qIHdpbGwgYmUgcmVtb3ZlZCwgdXNlIFpfU1lOQ19GTFVTSCBpbnN0ZWFkICovCisjZGVmaW5lIFpfUEFSVElBTF9GTFVTSCAxCiAjZGVmaW5lIFpfU1lOQ19GTFVTSCAgICAyCiAjZGVmaW5lIFpfRlVMTF9GTFVTSCAgICAzCiAjZGVmaW5lIFpfRklOSVNIICAgICAgICA0CiAjZGVmaW5lIFpfQkxPQ0sgICAgICAgICA1CisjZGVmaW5lIFpfVFJFRVMgICAgICAgICA2CiAvKiBBbGxvd2VkIGZsdXNoIHZhbHVlczsgc2VlIGRlZmxhdGUoKSBhbmQgaW5mbGF0ZSgpIGJlbG93IGZvciBkZXRhaWxzICovCiAKICNkZWZpbmUgWl9PSyAgICAgICAgICAgIDAKQEAgLTE3Niw4ICsxNzksOCBAQAogI2RlZmluZSBaX01FTV9FUlJPUiAgICAoLTQpCiAjZGVmaW5lIFpfQlVGX0VSUk9SICAgICgtNSkKICNkZWZpbmUgWl9WRVJTSU9OX0VSUk9SICgtNikKLS8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZQotICogdmFsdWVzIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KKy8qIFJldHVybiBjb2RlcyBmb3IgdGhlIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gZnVuY3Rpb25zLiBOZWdhdGl2ZSB2YWx1ZXMKKyAqIGFyZSBlcnJvcnMsIHBvc2l0aXZlIHZhbHVlcyBhcmUgdXNlZCBmb3Igc3BlY2lhbCBidXQgbm9ybWFsIGV2ZW50cy4KICAqLwogCiAjZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gICAgICAgICAwCkBAIC0yMDcsMTE5ICsyMTAsMTQwIEBACiAjZGVmaW5lIHpsaWJfdmVyc2lvbiB6bGliVmVyc2lvbigpCiAvKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIDwgMS4wLjIgKi8KIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBiYXNpYyBmdW5jdGlvbnMgKi8KIAogWkVYVEVSTiBjb25zdCBjaGFyICogWkVYUE9SVCB6bGliVmVyc2lvbiBPRigodm9pZCkpOwogLyogVGhlIGFwcGxpY2F0aW9uIGNhbiBjb21wYXJlIHpsaWJWZXJzaW9uIGFuZCBaTElCX1ZFUlNJT04gZm9yIGNvbnNpc3RlbmN5LgotICAgSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBkaWZmZXJzLCB0aGUgbGlicmFyeSBjb2RlIGFjdHVhbGx5IHVzZWQgaXMKLSAgIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHpsaWIuaCBoZWFkZXIgZmlsZSB1c2VkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLSAgIFRoaXMgY2hlY2sgaXMgYXV0b21hdGljYWxseSBtYWRlIGJ5IGRlZmxhdGVJbml0IGFuZCBpbmZsYXRlSW5pdC4KKyAgIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgZGlmZmVycywgdGhlIGxpYnJhcnkgY29kZSBhY3R1YWxseSB1c2VkIGlzIG5vdAorICAgY29tcGF0aWJsZSB3aXRoIHRoZSB6bGliLmggaGVhZGVyIGZpbGUgdXNlZCBieSB0aGUgYXBwbGljYXRpb24uICBUaGlzIGNoZWNrCisgICBpcyBhdXRvbWF0aWNhbGx5IG1hZGUgYnkgZGVmbGF0ZUluaXQgYW5kIGluZmxhdGVJbml0LgogICovCiAKIC8qCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVJbml0IE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGxldmVsKSk7CiAKLSAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uIFRoZSBmaWVsZHMKLSAgIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieSB0aGUgY2FsbGVyLgotICAgSWYgemFsbG9jIGFuZCB6ZnJlZSBhcmUgc2V0IHRvIFpfTlVMTCwgZGVmbGF0ZUluaXQgdXBkYXRlcyB0aGVtIHRvCi0gICB1c2UgZGVmYXVsdCBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KKyAgICAgSW5pdGlhbGl6ZXMgdGhlIGludGVybmFsIHN0cmVhbSBzdGF0ZSBmb3IgY29tcHJlc3Npb24uICBUaGUgZmllbGRzCisgICB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlIGNhbGxlci4gIElmCisgICB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBkZWZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8gdXNlIGRlZmF1bHQKKyAgIGFsbG9jYXRpb24gZnVuY3Rpb25zLgogCiAgICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCBtdXN0IGJlIFpfREVGQVVMVF9DT01QUkVTU0lPTiwgb3IgYmV0d2VlbiAwIGFuZCA5OgotICAgMSBnaXZlcyBiZXN0IHNwZWVkLCA5IGdpdmVzIGJlc3QgY29tcHJlc3Npb24sIDAgZ2l2ZXMgbm8gY29tcHJlc3Npb24gYXQKLSAgIGFsbCAodGhlIGlucHV0IGRhdGEgaXMgc2ltcGx5IGNvcGllZCBhIGJsb2NrIGF0IGEgdGltZSkuCi0gICBaX0RFRkFVTFRfQ09NUFJFU1NJT04gcmVxdWVzdHMgYSBkZWZhdWx0IGNvbXByb21pc2UgYmV0d2VlbiBzcGVlZCBhbmQKLSAgIGNvbXByZXNzaW9uIChjdXJyZW50bHkgZXF1aXZhbGVudCB0byBsZXZlbCA2KS4KKyAgIDEgZ2l2ZXMgYmVzdCBzcGVlZCwgOSBnaXZlcyBiZXN0IGNvbXByZXNzaW9uLCAwIGdpdmVzIG5vIGNvbXByZXNzaW9uIGF0IGFsbAorICAgKHRoZSBpbnB1dCBkYXRhIGlzIHNpbXBseSBjb3BpZWQgYSBibG9jayBhdCBhIHRpbWUpLiAgWl9ERUZBVUxUX0NPTVBSRVNTSU9OCisgICByZXF1ZXN0cyBhIGRlZmF1bHQgY29tcHJvbWlzZSBiZXR3ZWVuIHNwZWVkIGFuZCBjb21wcmVzc2lvbiAoY3VycmVudGx5CisgICBlcXVpdmFsZW50IHRvIGxldmVsIDYpLgogCi0gICAgIGRlZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90Ci0gICBlbm91Z2ggbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBsZXZlbCBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBsZXZlbCwKKyAgICAgZGVmbGF0ZUluaXQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGxldmVsIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIGxldmVsLCBvcgogICAgWl9WRVJTSU9OX0VSUk9SIGlmIHRoZSB6bGliIGxpYnJhcnkgdmVyc2lvbiAoemxpYl92ZXJzaW9uKSBpcyBpbmNvbXBhdGlibGUKLSAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLgotICAgbXNnIGlzIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdCBkb2VzIG5vdAotICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KKyAgIHdpdGggdGhlIHZlcnNpb24gYXNzdW1lZCBieSB0aGUgY2FsbGVyIChaTElCX1ZFUlNJT04pLiAgbXNnIGlzIHNldCB0byBudWxsCisgICBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246CisgICB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZSBPRigoel9zdHJlYW1wIHN0cm0sIGludCBmbHVzaCkpOwogLyoKICAgICBkZWZsYXRlIGNvbXByZXNzZXMgYXMgbXVjaCBkYXRhIGFzIHBvc3NpYmxlLCBhbmQgc3RvcHMgd2hlbiB0aGUgaW5wdXQKLSAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiBJdCBtYXkgaW50cm9kdWNlIHNvbWUKLSAgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KKyAgYnVmZmVyIGJlY29tZXMgZW1wdHkgb3IgdGhlIG91dHB1dCBidWZmZXIgYmVjb21lcyBmdWxsLiAgSXQgbWF5IGludHJvZHVjZQorICBzb21lIG91dHB1dCBsYXRlbmN5IChyZWFkaW5nIGlucHV0IHdpdGhvdXQgcHJvZHVjaW5nIGFueSBvdXRwdXQpIGV4Y2VwdCB3aGVuCiAgIGZvcmNlZCB0byBmbHVzaC4KIAotICAgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuIGRlZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCisgICAgVGhlIGRldGFpbGVkIHNlbWFudGljcyBhcmUgYXMgZm9sbG93cy4gIGRlZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCiAgIGZvbGxvd2luZyBhY3Rpb25zOgogCiAgIC0gQ29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4KLSAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAorICAgIGFjY29yZGluZ2x5LiAgSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAogICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBhbmQgYXZhaWxfaW4gYXJlIHVwZGF0ZWQgYW5kCiAgICAgcHJvY2Vzc2luZyB3aWxsIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGRlZmxhdGUoKS4KIAogICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0Ci0gICAgYWNjb3JkaW5nbHkuIFRoaXMgYWN0aW9uIGlzIGZvcmNlZCBpZiB0aGUgcGFyYW1ldGVyIGZsdXNoIGlzIG5vbiB6ZXJvLgorICAgIGFjY29yZGluZ2x5LiAgVGhpcyBhY3Rpb24gaXMgZm9yY2VkIGlmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgbm9uIHplcm8uCiAgICAgRm9yY2luZyBmbHVzaCBmcmVxdWVudGx5IGRlZ3JhZGVzIHRoZSBjb21wcmVzc2lvbiByYXRpbywgc28gdGhpcyBwYXJhbWV0ZXIKLSAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuCi0gICAgU29tZSBvdXRwdXQgbWF5IGJlIHByb3ZpZGVkIGV2ZW4gaWYgZmx1c2ggaXMgbm90IHNldC4KKyAgICBzaG91bGQgYmUgc2V0IG9ubHkgd2hlbiBuZWNlc3NhcnkgKGluIGludGVyYWN0aXZlIGFwcGxpY2F0aW9ucykuICBTb21lCisgICAgb3V0cHV0IG1heSBiZSBwcm92aWRlZCBldmVuIGlmIGZsdXNoIGlzIG5vdCBzZXQuCiAKLSAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAotICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcKLSAgbW9yZSBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFpbF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7IGF2YWlsX291dAotICBzaG91bGQgbmV2ZXIgYmUgemVybyBiZWZvcmUgdGhlIGNhbGwuIFRoZSBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUKLSAgY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsCi0gIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVhY2ggY2FsbCBvZiBkZWZsYXRlKCkuIElmIGRlZmxhdGUgcmV0dXJucyBaX09LCi0gIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUKLSAgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyBhdmFpbF9pbiBvciBhdmFpbF9vdXQgYWNjb3JkaW5nbHk7IGF2YWlsX291dCBzaG91bGQKKyAgbmV2ZXIgYmUgemVybyBiZWZvcmUgdGhlIGNhbGwuICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIGNvbXByZXNzZWQKKyAgb3V0cHV0IHdoZW4gaXQgd2FudHMsIGZvciBleGFtcGxlIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCAoYXZhaWxfb3V0CisgID09IDApLCBvciBhZnRlciBlYWNoIGNhbGwgb2YgZGVmbGF0ZSgpLiAgSWYgZGVmbGF0ZSByZXR1cm5zIFpfT0sgYW5kIHdpdGgKKyAgemVybyBhdmFpbF9vdXQsIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFmdGVyIG1ha2luZyByb29tIGluIHRoZSBvdXRwdXQKKyAgYnVmZmVyIGJlY2F1c2UgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQgcGVuZGluZy4KIAogICAgIE5vcm1hbGx5IHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfTk9fRkxVU0gsIHdoaWNoIGFsbG93cyBkZWZsYXRlIHRvCi0gIGRlY2lkZSBob3cgbXVjaCBkYXRhIHRvIGFjY3VtdWFsdGUgYmVmb3JlIHByb2R1Y2luZyBvdXRwdXQsIGluIG9yZGVyIHRvCisgIGRlY2lkZSBob3cgbXVjaCBkYXRhIHRvIGFjY3VtdWxhdGUgYmVmb3JlIHByb2R1Y2luZyBvdXRwdXQsIGluIG9yZGVyIHRvCiAgIG1heGltaXplIGNvbXByZXNzaW9uLgogCiAgICAgSWYgdGhlIHBhcmFtZXRlciBmbHVzaCBpcyBzZXQgdG8gWl9TWU5DX0ZMVVNILCBhbGwgcGVuZGluZyBvdXRwdXQgaXMKICAgZmx1c2hlZCB0byB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIG91dHB1dCBpcyBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgc28KLSAgdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBnZXQgYWxsIGlucHV0IGRhdGEgYXZhaWxhYmxlIHNvIGZhci4gKEluIHBhcnRpY3VsYXIKLSAgYXZhaWxfaW4gaXMgemVybyBhZnRlciB0aGUgY2FsbCBpZiBlbm91Z2ggb3V0cHV0IHNwYWNlIGhhcyBiZWVuIHByb3ZpZGVkCi0gIGJlZm9yZSB0aGUgY2FsbC4pICBGbHVzaGluZyBtYXkgZGVncmFkZSBjb21wcmVzc2lvbiBmb3Igc29tZSBjb21wcmVzc2lvbgotICBhbGdvcml0aG1zIGFuZCBzbyBpdCBzaG91bGQgYmUgdXNlZCBvbmx5IHdoZW4gbmVjZXNzYXJ5LgorICB0aGF0IHRoZSBkZWNvbXByZXNzb3IgY2FuIGdldCBhbGwgaW5wdXQgZGF0YSBhdmFpbGFibGUgc28gZmFyLiAgKEluCisgIHBhcnRpY3VsYXIgYXZhaWxfaW4gaXMgemVybyBhZnRlciB0aGUgY2FsbCBpZiBlbm91Z2ggb3V0cHV0IHNwYWNlIGhhcyBiZWVuCisgIHByb3ZpZGVkIGJlZm9yZSB0aGUgY2FsbC4pIEZsdXNoaW5nIG1heSBkZWdyYWRlIGNvbXByZXNzaW9uIGZvciBzb21lCisgIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgYW5kIHNvIGl0IHNob3VsZCBiZSB1c2VkIG9ubHkgd2hlbiBuZWNlc3NhcnkuICBUaGlzCisgIGNvbXBsZXRlcyB0aGUgY3VycmVudCBkZWZsYXRlIGJsb2NrIGFuZCBmb2xsb3dzIGl0IHdpdGggYW4gZW1wdHkgc3RvcmVkIGJsb2NrCisgIHRoYXQgaXMgdGhyZWUgYml0cyBwbHVzIGZpbGxlciBiaXRzIHRvIHRoZSBuZXh0IGJ5dGUsIGZvbGxvd2VkIGJ5IGZvdXIgYnl0ZXMKKyAgKDAwIDAwIGZmIGZmKS4KKworICAgIElmIGZsdXNoIGlzIHNldCB0byBaX1BBUlRJQUxfRkxVU0gsIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkIHRvIHRoZQorICBvdXRwdXQgYnVmZmVyLCBidXQgdGhlIG91dHB1dCBpcyBub3QgYWxpZ25lZCB0byBhIGJ5dGUgYm91bmRhcnkuICBBbGwgb2YgdGhlCisgIGlucHV0IGRhdGEgc28gZmFyIHdpbGwgYmUgYXZhaWxhYmxlIHRvIHRoZSBkZWNvbXByZXNzb3IsIGFzIGZvciBaX1NZTkNfRkxVU0guCisgIFRoaXMgY29tcGxldGVzIHRoZSBjdXJyZW50IGRlZmxhdGUgYmxvY2sgYW5kIGZvbGxvd3MgaXQgd2l0aCBhbiBlbXB0eSBmaXhlZAorICBjb2RlcyBibG9jayB0aGF0IGlzIDEwIGJpdHMgbG9uZy4gIFRoaXMgYXNzdXJlcyB0aGF0IGVub3VnaCBieXRlcyBhcmUgb3V0cHV0CisgIGluIG9yZGVyIGZvciB0aGUgZGVjb21wcmVzc29yIHRvIGZpbmlzaCB0aGUgYmxvY2sgYmVmb3JlIHRoZSBlbXB0eSBmaXhlZCBjb2RlCisgIGJsb2NrLgorCisgICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfQkxPQ0ssIGEgZGVmbGF0ZSBibG9jayBpcyBjb21wbGV0ZWQgYW5kIGVtaXR0ZWQsIGFzCisgIGZvciBaX1NZTkNfRkxVU0gsIGJ1dCB0aGUgb3V0cHV0IGlzIG5vdCBhbGlnbmVkIG9uIGEgYnl0ZSBib3VuZGFyeSwgYW5kIHVwIHRvCisgIHNldmVuIGJpdHMgb2YgdGhlIGN1cnJlbnQgYmxvY2sgYXJlIGhlbGQgdG8gYmUgd3JpdHRlbiBhcyB0aGUgbmV4dCBieXRlIGFmdGVyCisgIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgaXMgY29tcGxldGVkLiAgSW4gdGhpcyBjYXNlLCB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKKyAgYmUgcHJvdmlkZWQgZW5vdWdoIGJpdHMgYXQgdGhpcyBwb2ludCBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIG9mCisgIHRoZSBkYXRhIHByb3ZpZGVkIHNvIGZhciB0byB0aGUgY29tcHJlc3Nvci4gIEl0IG1heSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0CisgIGJsb2NrIHRvIGJlIGVtaXR0ZWQuICBUaGlzIGlzIGZvciBhZHZhbmNlZCBhcHBsaWNhdGlvbnMgdGhhdCBuZWVkIHRvIGNvbnRyb2wKKyAgdGhlIGVtaXNzaW9uIG9mIGRlZmxhdGUgYmxvY2tzLgogCiAgICAgSWYgZmx1c2ggaXMgc2V0IHRvIFpfRlVMTF9GTFVTSCwgYWxsIG91dHB1dCBpcyBmbHVzaGVkIGFzIHdpdGgKICAgWl9TWU5DX0ZMVVNILCBhbmQgdGhlIGNvbXByZXNzaW9uIHN0YXRlIGlzIHJlc2V0IHNvIHRoYXQgZGVjb21wcmVzc2lvbiBjYW4KICAgcmVzdGFydCBmcm9tIHRoaXMgcG9pbnQgaWYgcHJldmlvdXMgY29tcHJlc3NlZCBkYXRhIGhhcyBiZWVuIGRhbWFnZWQgb3IgaWYKLSAgcmFuZG9tIGFjY2VzcyBpcyBkZXNpcmVkLiBVc2luZyBaX0ZVTExfRkxVU0ggdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQorICByYW5kb20gYWNjZXNzIGlzIGRlc2lyZWQuICBVc2luZyBaX0ZVTExfRkxVU0ggdG9vIG9mdGVuIGNhbiBzZXJpb3VzbHkgZGVncmFkZQogICBjb21wcmVzc2lvbi4KIAogICAgIElmIGRlZmxhdGUgcmV0dXJucyB3aXRoIGF2YWlsX291dCA9PSAwLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFnYWluCiAgIHdpdGggdGhlIHNhbWUgdmFsdWUgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgKHVwZGF0ZWQKICAgYXZhaWxfb3V0KSwgdW50aWwgdGhlIGZsdXNoIGlzIGNvbXBsZXRlIChkZWZsYXRlIHJldHVybnMgd2l0aCBub24temVybwotICBhdmFpbF9vdXQpLiBJbiB0aGUgY2FzZSBvZiBhIFpfRlVMTF9GTFVTSCBvciBaX1NZTkNfRkxVU0gsIG1ha2Ugc3VyZSB0aGF0CisgIGF2YWlsX291dCkuICBJbiB0aGUgY2FzZSBvZiBhIFpfRlVMTF9GTFVTSCBvciBaX1NZTkNfRkxVU0gsIG1ha2Ugc3VyZSB0aGF0CiAgIGF2YWlsX291dCBpcyBncmVhdGVyIHRoYW4gc2l4IHRvIGF2b2lkIHJlcGVhdGVkIGZsdXNoIG1hcmtlcnMgZHVlIHRvCiAgIGF2YWlsX291dCA9PSAwIG9uIHJldHVybi4KIAogICAgIElmIHRoZSBwYXJhbWV0ZXIgZmx1c2ggaXMgc2V0IHRvIFpfRklOSVNILCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCwKLSAgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCBhbmQgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIGlmIHRoZXJlCi0gIHdhcyBlbm91Z2ggb3V0cHV0IHNwYWNlOyBpZiBkZWZsYXRlIHJldHVybnMgd2l0aCBaX09LLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKKyAgcGVuZGluZyBvdXRwdXQgaXMgZmx1c2hlZCBhbmQgZGVmbGF0ZSByZXR1cm5zIHdpdGggWl9TVFJFQU1fRU5EIGlmIHRoZXJlIHdhcworICBlbm91Z2ggb3V0cHV0IHNwYWNlOyBpZiBkZWZsYXRlIHJldHVybnMgd2l0aCBaX09LLCB0aGlzIGZ1bmN0aW9uIG11c3QgYmUKICAgY2FsbGVkIGFnYWluIHdpdGggWl9GSU5JU0ggYW5kIG1vcmUgb3V0cHV0IHNwYWNlICh1cGRhdGVkIGF2YWlsX291dCkgYnV0IG5vCi0gIG1vcmUgaW5wdXQgZGF0YSwgdW50aWwgaXQgcmV0dXJucyB3aXRoIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvci4gQWZ0ZXIKLSAgZGVmbGF0ZSBoYXMgcmV0dXJuZWQgWl9TVFJFQU1fRU5ELCB0aGUgb25seSBwb3NzaWJsZSBvcGVyYXRpb25zIG9uIHRoZQotICBzdHJlYW0gYXJlIGRlZmxhdGVSZXNldCBvciBkZWZsYXRlRW5kLgorICBtb3JlIGlucHV0IGRhdGEsIHVudGlsIGl0IHJldHVybnMgd2l0aCBaX1NUUkVBTV9FTkQgb3IgYW4gZXJyb3IuICBBZnRlcgorICBkZWZsYXRlIGhhcyByZXR1cm5lZCBaX1NUUkVBTV9FTkQsIHRoZSBvbmx5IHBvc3NpYmxlIG9wZXJhdGlvbnMgb24gdGhlIHN0cmVhbQorICBhcmUgZGVmbGF0ZVJlc2V0IG9yIGRlZmxhdGVFbmQuCiAKICAgICBaX0ZJTklTSCBjYW4gYmUgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCBpZiBhbGwgdGhlIGNvbXByZXNzaW9uCi0gIGlzIHRvIGJlIGRvbmUgaW4gYSBzaW5nbGUgc3RlcC4gSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdAotICB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiBJZiBkZWZsYXRlIGRvZXMgbm90IHJldHVybgorICBpcyB0byBiZSBkb25lIGluIGEgc2luZ2xlIHN0ZXAuICBJbiB0aGlzIGNhc2UsIGF2YWlsX291dCBtdXN0IGJlIGF0IGxlYXN0IHRoZQorICB2YWx1ZSByZXR1cm5lZCBieSBkZWZsYXRlQm91bmQgKHNlZSBiZWxvdykuICBJZiBkZWZsYXRlIGRvZXMgbm90IHJldHVybgogICBaX1NUUkVBTV9FTkQsIHRoZW4gaXQgbXVzdCBiZSBjYWxsZWQgYWdhaW4gYXMgZGVzY3JpYmVkIGFib3ZlLgogCiAgICAgZGVmbGF0ZSgpIHNldHMgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIGlucHV0IHJlYWQKICAgc28gZmFyICh0aGF0IGlzLCB0b3RhbF9pbiBieXRlcykuCiAKICAgICBkZWZsYXRlKCkgbWF5IHVwZGF0ZSBzdHJtLT5kYXRhX3R5cGUgaWYgaXQgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGFib3V0Ci0gIHRoZSBpbnB1dCBkYXRhIHR5cGUgKFpfQklOQVJZIG9yIFpfVEVYVCkuIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCi0gIGJpbmFyeS4gVGhpcyBmaWVsZCBpcyBvbmx5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBhbmQgZG9lcyBub3QgYWZmZWN0Ci0gIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaW4gYW55IG1hbm5lci4KKyAgdGhlIGlucHV0IGRhdGEgdHlwZSAoWl9CSU5BUlkgb3IgWl9URVhUKS4gIEluIGRvdWJ0LCB0aGUgZGF0YSBpcyBjb25zaWRlcmVkCisgIGJpbmFyeS4gIFRoaXMgZmllbGQgaXMgb25seSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUKKyAgY29tcHJlc3Npb24gYWxnb3JpdGhtIGluIGFueSBtYW5uZXIuCiAKICAgICBkZWZsYXRlKCkgcmV0dXJucyBaX09LIGlmIHNvbWUgcHJvZ3Jlc3MgaGFzIGJlZW4gbWFkZSAobW9yZSBpbnB1dAogICBwcm9jZXNzZWQgb3IgbW9yZSBvdXRwdXQgcHJvZHVjZWQpLCBaX1NUUkVBTV9FTkQgaWYgYWxsIGlucHV0IGhhcyBiZWVuCiAgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIHByb2R1Y2VkIChvbmx5IHdoZW4gZmx1c2ggaXMgc2V0IHRvCiAgIFpfRklOSVNIKSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IChmb3IgZXhhbXBsZQotICBpZiBuZXh0X2luIG9yIG5leHRfb3V0IHdhcyBOVUxMKSwgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUKLSAgKGZvciBleGFtcGxlIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuIE5vdGUgdGhhdCBaX0JVRl9FUlJPUiBpcyBub3QKKyAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMKSwgWl9CVUZfRVJST1IgaWYgbm8gcHJvZ3Jlc3MgaXMgcG9zc2libGUKKyAgKGZvciBleGFtcGxlIGF2YWlsX2luIG9yIGF2YWlsX291dCB3YXMgemVybykuICBOb3RlIHRoYXQgWl9CVUZfRVJST1IgaXMgbm90CiAgIGZhdGFsLCBhbmQgZGVmbGF0ZSgpIGNhbiBiZSBjYWxsZWQgYWdhaW4gd2l0aCBtb3JlIGlucHV0IGFuZCBtb3JlIG91dHB1dAogICBzcGFjZSB0byBjb250aW51ZSBjb21wcmVzc2luZy4KICovCkBAIC0zMjgsMTMgKzM1MiwxMyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlRW5kIE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgQWxsIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXMgZm9yIHRoaXMgc3RyZWFtIGFyZSBmcmVlZC4KLSAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkKLSAgIHBlbmRpbmcgb3V0cHV0LgorICAgVGhpcyBmdW5jdGlvbiBkaXNjYXJkcyBhbnkgdW5wcm9jZXNzZWQgaW5wdXQgYW5kIGRvZXMgbm90IGZsdXNoIGFueSBwZW5kaW5nCisgICBvdXRwdXQuCiAKICAgICAgZGVmbGF0ZUVuZCByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgdGhlCiAgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBzdHJlYW0gd2FzIGZyZWVkCi0gICBwcmVtYXR1cmVseSAoc29tZSBpbnB1dCBvciBvdXRwdXQgd2FzIGRpc2NhcmRlZCkuIEluIHRoZSBlcnJvciBjYXNlLAotICAgbXNnIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKKyAgIHByZW1hdHVyZWx5IChzb21lIGlucHV0IG9yIG91dHB1dCB3YXMgZGlzY2FyZGVkKS4gIEluIHRoZSBlcnJvciBjYXNlLCBtc2cKKyAgIG1heSBiZSBzZXQgYnV0IHRoZW4gcG9pbnRzIHRvIGEgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUKICAgIGRlYWxsb2NhdGVkKS4KICovCiAKQEAgLTM0MiwxMCArMzY2LDEwIEBACiAvKgogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIAotICAgICBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgc3RyZWFtIHN0YXRlIGZvciBkZWNvbXByZXNzaW9uLiBUaGUgZmllbGRzCisgICAgIEluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBzdHJlYW0gc3RhdGUgZm9yIGRlY29tcHJlc3Npb24uICBUaGUgZmllbGRzCiAgICBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGJ5Ci0gICB0aGUgY2FsbGVyLiBJZiBuZXh0X2luIGlzIG5vdCBaX05VTEwgYW5kIGF2YWlsX2luIGlzIGxhcmdlIGVub3VnaCAodGhlIGV4YWN0Ci0gICB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBjb21wcmVzc2lvbiBtZXRob2QpLCBpbmZsYXRlSW5pdCBkZXRlcm1pbmVzIHRoZQorICAgdGhlIGNhbGxlci4gIElmIG5leHRfaW4gaXMgbm90IFpfTlVMTCBhbmQgYXZhaWxfaW4gaXMgbGFyZ2UgZW5vdWdoICh0aGUKKyAgIGV4YWN0IHZhbHVlIGRlcGVuZHMgb24gdGhlIGNvbXByZXNzaW9uIG1ldGhvZCksIGluZmxhdGVJbml0IGRldGVybWluZXMgdGhlCiAgICBjb21wcmVzc2lvbiBtZXRob2QgZnJvbSB0aGUgemxpYiBoZWFkZXIgYW5kIGFsbG9jYXRlcyBhbGwgZGF0YSBzdHJ1Y3R1cmVzCiAgICBhY2NvcmRpbmdseTsgb3RoZXJ3aXNlIHRoZSBhbGxvY2F0aW9uIHdpbGwgYmUgZGVmZXJyZWQgdG8gdGhlIGZpcnN0IGNhbGwgb2YKICAgIGluZmxhdGUuICBJZiB6YWxsb2MgYW5kIHpmcmVlIGFyZSBzZXQgdG8gWl9OVUxMLCBpbmZsYXRlSW5pdCB1cGRhdGVzIHRoZW0gdG8KQEAgLTM1Myw5NSArMzc3LDEwOCBAQAogCiAgICAgIGluZmxhdGVJbml0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAogICAgbWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQotICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIuICBtc2cgaXMgc2V0IHRvIG51bGwgaWYgdGhlcmUgaXMgbm8gZXJyb3IKLSAgIG1lc3NhZ2UuIGluZmxhdGVJbml0IGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24gYXBhcnQgZnJvbSByZWFkaW5nCi0gICB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3aWxsIGJlIGRvbmUgYnkgaW5mbGF0ZSgpLiAgKFNvIG5leHRfaW4gYW5kCi0gICBhdmFpbF9pbiBtYXkgYmUgbW9kaWZpZWQsIGJ1dCBuZXh0X291dCBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZQorICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlLiAgbXNnIGlzIHNldCB0byBudWxsIGlmCisgICB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQgZG9lcyBub3QgcGVyZm9ybSBhbnkgZGVjb21wcmVzc2lvbgorICAgYXBhcnQgZnJvbSBwb3NzaWJseSByZWFkaW5nIHRoZSB6bGliIGhlYWRlciBpZiBwcmVzZW50OiBhY3R1YWwgZGVjb21wcmVzc2lvbgorICAgd2lsbCBiZSBkb25lIGJ5IGluZmxhdGUoKS4gIChTbyBuZXh0X2luIGFuZCBhdmFpbF9pbiBtYXkgYmUgbW9kaWZpZWQsIGJ1dAorICAgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBhcmUgdW51c2VkIGFuZCB1bmNoYW5nZWQuKSBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgb2YgaW5mbGF0ZUluaXQoKSBkb2VzIG5vdCBwcm9jZXNzIGFueSBoZWFkZXIgaW5mb3JtYXRpb24gLS0gdGhhdCBpcyBkZWZlcnJlZAorICAgdW50aWwgaW5mbGF0ZSgpIGlzIGNhbGxlZC4KICovCiAKIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlIE9GKCh6X3N0cmVhbXAgc3RybSwgaW50IGZsdXNoKSk7CiAvKgogICAgIGluZmxhdGUgZGVjb21wcmVzc2VzIGFzIG11Y2ggZGF0YSBhcyBwb3NzaWJsZSwgYW5kIHN0b3BzIHdoZW4gdGhlIGlucHV0Ci0gIGJ1ZmZlciBiZWNvbWVzIGVtcHR5IG9yIHRoZSBvdXRwdXQgYnVmZmVyIGJlY29tZXMgZnVsbC4gSXQgbWF5IGludHJvZHVjZQorICBidWZmZXIgYmVjb21lcyBlbXB0eSBvciB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNvbWVzIGZ1bGwuICBJdCBtYXkgaW50cm9kdWNlCiAgIHNvbWUgb3V0cHV0IGxhdGVuY3kgKHJlYWRpbmcgaW5wdXQgd2l0aG91dCBwcm9kdWNpbmcgYW55IG91dHB1dCkgZXhjZXB0IHdoZW4KICAgZm9yY2VkIHRvIGZsdXNoLgogCi0gIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuIGluZmxhdGUgcGVyZm9ybXMgb25lIG9yIGJvdGggb2YgdGhlCisgIFRoZSBkZXRhaWxlZCBzZW1hbnRpY3MgYXJlIGFzIGZvbGxvd3MuICBpbmZsYXRlIHBlcmZvcm1zIG9uZSBvciBib3RoIG9mIHRoZQogICBmb2xsb3dpbmcgYWN0aW9uczoKIAogICAtIERlY29tcHJlc3MgbW9yZSBpbnB1dCBzdGFydGluZyBhdCBuZXh0X2luIGFuZCB1cGRhdGUgbmV4dF9pbiBhbmQgYXZhaWxfaW4KLSAgICBhY2NvcmRpbmdseS4gSWYgbm90IGFsbCBpbnB1dCBjYW4gYmUgcHJvY2Vzc2VkIChiZWNhdXNlIHRoZXJlIGlzIG5vdAotICAgIGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQgYnVmZmVyKSwgbmV4dF9pbiBpcyB1cGRhdGVkIGFuZCBwcm9jZXNzaW5nCi0gICAgd2lsbCByZXN1bWUgYXQgdGhpcyBwb2ludCBmb3IgdGhlIG5leHQgY2FsbCBvZiBpbmZsYXRlKCkuCisgICAgYWNjb3JkaW5nbHkuICBJZiBub3QgYWxsIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQgKGJlY2F1c2UgdGhlcmUgaXMgbm90CisgICAgZW5vdWdoIHJvb20gaW4gdGhlIG91dHB1dCBidWZmZXIpLCBuZXh0X2luIGlzIHVwZGF0ZWQgYW5kIHByb2Nlc3Npbmcgd2lsbAorICAgIHJlc3VtZSBhdCB0aGlzIHBvaW50IGZvciB0aGUgbmV4dCBjYWxsIG9mIGluZmxhdGUoKS4KIAogICAtIFByb3ZpZGUgbW9yZSBvdXRwdXQgc3RhcnRpbmcgYXQgbmV4dF9vdXQgYW5kIHVwZGF0ZSBuZXh0X291dCBhbmQgYXZhaWxfb3V0Ci0gICAgYWNjb3JkaW5nbHkuICBpbmZsYXRlKCkgcHJvdmlkZXMgYXMgbXVjaCBvdXRwdXQgYXMgcG9zc2libGUsIHVudGlsIHRoZXJlCi0gICAgaXMgbm8gbW9yZSBpbnB1dCBkYXRhIG9yIG5vIG1vcmUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXIgKHNlZSBiZWxvdwotICAgIGFib3V0IHRoZSBmbHVzaCBwYXJhbWV0ZXIpLgorICAgIGFjY29yZGluZ2x5LiAgaW5mbGF0ZSgpIHByb3ZpZGVzIGFzIG11Y2ggb3V0cHV0IGFzIHBvc3NpYmxlLCB1bnRpbCB0aGVyZSBpcworICAgIG5vIG1vcmUgaW5wdXQgZGF0YSBvciBubyBtb3JlIHNwYWNlIGluIHRoZSBvdXRwdXQgYnVmZmVyIChzZWUgYmVsb3cgYWJvdXQKKyAgICB0aGUgZmx1c2ggcGFyYW1ldGVyKS4KIAotICBCZWZvcmUgdGhlIGNhbGwgb2YgaW5mbGF0ZSgpLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGVuc3VyZSB0aGF0IGF0IGxlYXN0Ci0gIG9uZSBvZiB0aGUgYWN0aW9ucyBpcyBwb3NzaWJsZSwgYnkgcHJvdmlkaW5nIG1vcmUgaW5wdXQgYW5kL29yIGNvbnN1bWluZwotICBtb3JlIG91dHB1dCwgYW5kIHVwZGF0aW5nIHRoZSBuZXh0XyogYW5kIGF2YWlsXyogdmFsdWVzIGFjY29yZGluZ2x5LgotICBUaGUgYXBwbGljYXRpb24gY2FuIGNvbnN1bWUgdGhlIHVuY29tcHJlc3NlZCBvdXRwdXQgd2hlbiBpdCB3YW50cywgZm9yCi0gIGV4YW1wbGUgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsIChhdmFpbF9vdXQgPT0gMCksIG9yIGFmdGVyIGVhY2gKLSAgY2FsbCBvZiBpbmZsYXRlKCkuIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdAotICBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlCi0gIG1pZ2h0IGJlIG1vcmUgb3V0cHV0IHBlbmRpbmcuCisgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGluZmxhdGUoKSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBlbnN1cmUgdGhhdCBhdCBsZWFzdAorICBvbmUgb2YgdGhlIGFjdGlvbnMgaXMgcG9zc2libGUsIGJ5IHByb3ZpZGluZyBtb3JlIGlucHV0IGFuZC9vciBjb25zdW1pbmcgbW9yZQorICBvdXRwdXQsIGFuZCB1cGRhdGluZyB0aGUgbmV4dF8qIGFuZCBhdmFpbF8qIHZhbHVlcyBhY2NvcmRpbmdseS4gIFRoZQorICBhcHBsaWNhdGlvbiBjYW4gY29uc3VtZSB0aGUgdW5jb21wcmVzc2VkIG91dHB1dCB3aGVuIGl0IHdhbnRzLCBmb3IgZXhhbXBsZQorICB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzIGZ1bGwgKGF2YWlsX291dCA9PSAwKSwgb3IgYWZ0ZXIgZWFjaCBjYWxsIG9mCisgIGluZmxhdGUoKS4gIElmIGluZmxhdGUgcmV0dXJucyBaX09LIGFuZCB3aXRoIHplcm8gYXZhaWxfb3V0LCBpdCBtdXN0IGJlCisgIGNhbGxlZCBhZ2FpbiBhZnRlciBtYWtpbmcgcm9vbSBpbiB0aGUgb3V0cHV0IGJ1ZmZlciBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlCisgIG1vcmUgb3V0cHV0IHBlbmRpbmcuCiAKLSAgICBUaGUgZmx1c2ggcGFyYW1ldGVyIG9mIGluZmxhdGUoKSBjYW4gYmUgWl9OT19GTFVTSCwgWl9TWU5DX0ZMVVNILAotICBaX0ZJTklTSCwgb3IgWl9CTE9DSy4gWl9TWU5DX0ZMVVNIIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpIGZsdXNoIGFzIG11Y2gKLSAgb3V0cHV0IGFzIHBvc3NpYmxlIHRvIHRoZSBvdXRwdXQgYnVmZmVyLiBaX0JMT0NLIHJlcXVlc3RzIHRoYXQgaW5mbGF0ZSgpIHN0b3AKLSAgaWYgYW5kIHdoZW4gaXQgZ2V0cyB0byB0aGUgbmV4dCBkZWZsYXRlIGJsb2NrIGJvdW5kYXJ5LiBXaGVuIGRlY29kaW5nIHRoZQotICB6bGliIG9yIGd6aXAgZm9ybWF0LCB0aGlzIHdpbGwgY2F1c2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlcgotICB0aGUgaGVhZGVyIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGJsb2NrLiBXaGVuIGRvaW5nIGEgcmF3IGluZmxhdGUsIGluZmxhdGUoKQotICB3aWxsIGdvIGFoZWFkIGFuZCBwcm9jZXNzIHRoZSBmaXJzdCBibG9jaywgYW5kIHdpbGwgcmV0dXJuIHdoZW4gaXQgZ2V0cyB0bwotICB0aGUgZW5kIG9mIHRoYXQgYmxvY2ssIG9yIHdoZW4gaXQgcnVucyBvdXQgb2YgZGF0YS4KKyAgICBUaGUgZmx1c2ggcGFyYW1ldGVyIG9mIGluZmxhdGUoKSBjYW4gYmUgWl9OT19GTFVTSCwgWl9TWU5DX0ZMVVNILCBaX0ZJTklTSCwKKyAgWl9CTE9DSywgb3IgWl9UUkVFUy4gIFpfU1lOQ19GTFVTSCByZXF1ZXN0cyB0aGF0IGluZmxhdGUoKSBmbHVzaCBhcyBtdWNoCisgIG91dHB1dCBhcyBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIFpfQkxPQ0sgcmVxdWVzdHMgdGhhdCBpbmZsYXRlKCkKKyAgc3RvcCBpZiBhbmQgd2hlbiBpdCBnZXRzIHRvIHRoZSBuZXh0IGRlZmxhdGUgYmxvY2sgYm91bmRhcnkuICBXaGVuIGRlY29kaW5nCisgIHRoZSB6bGliIG9yIGd6aXAgZm9ybWF0LCB0aGlzIHdpbGwgY2F1c2UgaW5mbGF0ZSgpIHRvIHJldHVybiBpbW1lZGlhdGVseQorICBhZnRlciB0aGUgaGVhZGVyIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGJsb2NrLiAgV2hlbiBkb2luZyBhIHJhdyBpbmZsYXRlLAorICBpbmZsYXRlKCkgd2lsbCBnbyBhaGVhZCBhbmQgcHJvY2VzcyB0aGUgZmlyc3QgYmxvY2ssIGFuZCB3aWxsIHJldHVybiB3aGVuIGl0CisgIGdldHMgdG8gdGhlIGVuZCBvZiB0aGF0IGJsb2NrLCBvciB3aGVuIGl0IHJ1bnMgb3V0IG9mIGRhdGEuCiAKICAgICBUaGUgWl9CTE9DSyBvcHRpb24gYXNzaXN0cyBpbiBhcHBlbmRpbmcgdG8gb3IgY29tYmluaW5nIGRlZmxhdGUgc3RyZWFtcy4KICAgQWxzbyB0byBhc3Npc3QgaW4gdGhpcywgb24gcmV0dXJuIGluZmxhdGUoKSB3aWxsIHNldCBzdHJtLT5kYXRhX3R5cGUgdG8gdGhlCi0gIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NAotICBpZiBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRlIHN0cmVhbSwKLSAgcGx1cyAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jawotICBjb2RlIG9yIGRlY29kaW5nIHRoZSBjb21wbGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlCi0gIGRlZmxhdGUgc3RyZWFtLiBUaGUgZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGluZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlCi0gIHVuY29tcHJlc3NlZCBkYXRhIGZyb20gdGhhdCBibG9jayBoYXMgYmVlbiB3cml0dGVuIHRvIHN0cm0tPm5leHRfb3V0LiAgVGhlCi0gIG51bWJlciBvZiB1bnVzZWQgYml0cyBtYXkgaW4gZ2VuZXJhbCBiZSBncmVhdGVyIHRoYW4gc2V2ZW4sIGV4Y2VwdCB3aGVuCi0gIGJpdCA3IG9mIGRhdGFfdHlwZSBpcyBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyB3aWxsIGJlCi0gIGxlc3MgdGhhbiBlaWdodC4KKyAgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luLCBwbHVzIDY0IGlmCisgIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2RpbmcgdGhlIGxhc3QgYmxvY2sgaW4gdGhlIGRlZmxhdGUgc3RyZWFtLCBwbHVzCisgIDEyOCBpZiBpbmZsYXRlKCkgcmV0dXJuZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVjb2RpbmcgYW4gZW5kLW9mLWJsb2NrIGNvZGUgb3IKKyAgZGVjb2RpbmcgdGhlIGNvbXBsZXRlIGhlYWRlciB1cCB0byBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgZGVmbGF0ZQorICBzdHJlYW0uICBUaGUgZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGluZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZAorICBkYXRhIGZyb20gdGhhdCBibG9jayBoYXMgYmVlbiB3cml0dGVuIHRvIHN0cm0tPm5leHRfb3V0LiAgVGhlIG51bWJlciBvZgorICB1bnVzZWQgYml0cyBtYXkgaW4gZ2VuZXJhbCBiZSBncmVhdGVyIHRoYW4gc2V2ZW4sIGV4Y2VwdCB3aGVuIGJpdCA3IG9mCisgIGRhdGFfdHlwZSBpcyBzZXQsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBvZiB1bnVzZWQgYml0cyB3aWxsIGJlIGxlc3MgdGhhbgorICBlaWdodC4gIGRhdGFfdHlwZSBpcyBzZXQgYXMgbm90ZWQgaGVyZSBldmVyeSB0aW1lIGluZmxhdGUoKSByZXR1cm5zIGZvciBhbGwKKyAgZmx1c2ggb3B0aW9ucywgYW5kIHNvIGNhbiBiZSB1c2VkIHRvIGRldGVybWluZSB0aGUgYW1vdW50IG9mIGN1cnJlbnRseQorICBjb25zdW1lZCBpbnB1dCBpbiBiaXRzLgorCisgICAgVGhlIFpfVFJFRVMgb3B0aW9uIGJlaGF2ZXMgYXMgWl9CTE9DSyBkb2VzLCBidXQgaXQgYWxzbyByZXR1cm5zIHdoZW4gdGhlCisgIGVuZCBvZiBlYWNoIGRlZmxhdGUgYmxvY2sgaGVhZGVyIGlzIHJlYWNoZWQsIGJlZm9yZSBhbnkgYWN0dWFsIGRhdGEgaW4gdGhhdAorICBibG9jayBpcyBkZWNvZGVkLiAgVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byBkZXRlcm1pbmUgdGhlIGxlbmd0aCBvZiB0aGUKKyAgZGVmbGF0ZSBibG9jayBoZWFkZXIgZm9yIGxhdGVyIHVzZSBpbiByYW5kb20gYWNjZXNzIHdpdGhpbiBhIGRlZmxhdGUgYmxvY2suCisgIDI1NiBpcyBhZGRlZCB0byB0aGUgdmFsdWUgb2Ygc3RybS0+ZGF0YV90eXBlIHdoZW4gaW5mbGF0ZSgpIHJldHVybnMKKyAgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVmbGF0ZSBibG9jayBoZWFkZXIuCiAKICAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbgotICBlcnJvci4gSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcAotICAoYSBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvCi0gIFpfRklOSVNILiBJbiB0aGlzIGNhc2UgYWxsIHBlbmRpbmcgaW5wdXQgaXMgcHJvY2Vzc2VkIGFuZCBhbGwgcGVuZGluZwotICBvdXRwdXQgaXMgZmx1c2hlZDsgYXZhaWxfb3V0IG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYWxsIHRoZQotICB1bmNvbXByZXNzZWQgZGF0YS4gKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkCi0gIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdAotICBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuIFRoZSB1c2Ugb2YgWl9GSU5JU0gKLSAgaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoCi0gIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlIGluZmxhdGUoKSBjYWxsLgorICBlcnJvci4gIEhvd2V2ZXIgaWYgYWxsIGRlY29tcHJlc3Npb24gaXMgdG8gYmUgcGVyZm9ybWVkIGluIGEgc2luZ2xlIHN0ZXAgKGEKKyAgc2luZ2xlIGNhbGwgb2YgaW5mbGF0ZSksIHRoZSBwYXJhbWV0ZXIgZmx1c2ggc2hvdWxkIGJlIHNldCB0byBaX0ZJTklTSC4gIEluCisgIHRoaXMgY2FzZSBhbGwgcGVuZGluZyBpbnB1dCBpcyBwcm9jZXNzZWQgYW5kIGFsbCBwZW5kaW5nIG91dHB1dCBpcyBmbHVzaGVkOworICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIHVuY29tcHJlc3NlZCBkYXRhLiAgKFRoZSBzaXplCisgIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzCisgIHB1cnBvc2UuKSBUaGUgbmV4dCBvcGVyYXRpb24gb24gdGhpcyBzdHJlYW0gbXVzdCBiZSBpbmZsYXRlRW5kIHRvIGRlYWxsb2NhdGUKKyAgdGhlIGRlY29tcHJlc3Npb24gc3RhdGUuICBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5ldmVyIHJlcXVpcmVkLCBidXQgY2FuIGJlCisgIHVzZWQgdG8gaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBtYXkgYmUgdXNlZCBmb3IgdGhlIHNpbmdsZQorICBpbmZsYXRlKCkgY2FsbC4KIAogICAgICBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCBpbmZsYXRlKCkgYWx3YXlzIGZsdXNoZXMgYXMgbXVjaCBvdXRwdXQgYXMKICAgcG9zc2libGUgdG8gdGhlIG91dHB1dCBidWZmZXIsIGFuZCBhbHdheXMgdXNlcyB0aGUgZmFzdGVyIGFwcHJvYWNoIG9uIHRoZQotICBmaXJzdCBjYWxsLiBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgIGZpcnN0IGNhbGwuICBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCiAgIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywgb3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBpcyB1c2VkLgorICBiZWNhdXNlIFpfQkxPQ0sgb3IgWl9UUkVFUyBpcyB1c2VkLgogCiAgICAgIElmIGEgcHJlc2V0IGRpY3Rpb25hcnkgaXMgbmVlZGVkIGFmdGVyIHRoaXMgY2FsbCAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5CiAgIGJlbG93KSwgaW5mbGF0ZSBzZXRzIHN0cm0tPmFkbGVyIHRvIHRoZSBhZGxlcjMyIGNoZWNrc3VtIG9mIHRoZSBkaWN0aW9uYXJ5CiAgIGNob3NlbiBieSB0aGUgY29tcHJlc3NvciBhbmQgcmV0dXJucyBaX05FRURfRElDVDsgb3RoZXJ3aXNlIGl0IHNldHMKICAgc3RybS0+YWRsZXIgdG8gdGhlIGFkbGVyMzIgY2hlY2tzdW0gb2YgYWxsIG91dHB1dCBwcm9kdWNlZCBzbyBmYXIgKHRoYXQgaXMsCiAgIHRvdGFsX291dCBieXRlcykgYW5kIHJldHVybnMgWl9PSywgWl9TVFJFQU1fRU5EIG9yIGFuIGVycm9yIGNvZGUgYXMgZGVzY3JpYmVkCi0gIGJlbG93LiBBdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0sIGluZmxhdGUoKSBjaGVja3MgdGhhdCBpdHMgY29tcHV0ZWQgYWRsZXIzMgorICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECiAgIG9ubHkgaWYgdGhlIGNoZWNrc3VtIGlzIGNvcnJlY3QuCiAKLSAgICBpbmZsYXRlKCkgd2lsbCBkZWNvbXByZXNzIGFuZCBjaGVjayBlaXRoZXIgemxpYi13cmFwcGVkIG9yIGd6aXAtd3JhcHBlZAotICBkZWZsYXRlIGRhdGEuICBUaGUgaGVhZGVyIHR5cGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseS4gIEFueSBpbmZvcm1hdGlvbgotICBjb250YWluZWQgaW4gdGhlIGd6aXAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0Ci0gIGluZm9ybWF0aW9uIHNob3VsZCBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvcgotICBpbmZsYXRlQmFjaygpIGFuZCBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQKLSAgdHJhaWxlci4KKyAgICBpbmZsYXRlKCkgY2FuIGRlY29tcHJlc3MgYW5kIGNoZWNrIGVpdGhlciB6bGliLXdyYXBwZWQgb3IgZ3ppcC13cmFwcGVkCisgIGRlZmxhdGUgZGF0YS4gIFRoZSBoZWFkZXIgdHlwZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBpZiByZXF1ZXN0ZWQgd2hlbgorICBpbml0aWFsaXppbmcgd2l0aCBpbmZsYXRlSW5pdDIoKS4gIEFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhlIGd6aXAKKyAgaGVhZGVyIGlzIG5vdCByZXRhaW5lZCwgc28gYXBwbGljYXRpb25zIHRoYXQgbmVlZCB0aGF0IGluZm9ybWF0aW9uIHNob3VsZAorICBpbnN0ZWFkIHVzZSByYXcgaW5mbGF0ZSwgc2VlIGluZmxhdGVJbml0MigpIGJlbG93LCBvciBpbmZsYXRlQmFjaygpIGFuZAorICBwZXJmb3JtIHRoZWlyIG93biBwcm9jZXNzaW5nIG9mIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlci4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCkBAIC00NDksMjcgKzQ4NiwyOCBAQAogICBwcmVzZXQgZGljdGlvbmFyeSBpcyBuZWVkZWQgYXQgdGhpcyBwb2ludCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcwogICBjb3JydXB0ZWQgKGlucHV0IHN0cmVhbSBub3QgY29uZm9ybWluZyB0byB0aGUgemxpYiBmb3JtYXQgb3IgaW5jb3JyZWN0IGNoZWNrCiAgIHZhbHVlKSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUKLSAgaWYgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgTlVMTCksIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoIG1lbW9yeSwKKyAgbmV4dF9pbiBvciBuZXh0X291dCB3YXMgWl9OVUxMKSwgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggbWVtb3J5LAogICBaX0JVRl9FUlJPUiBpZiBubyBwcm9ncmVzcyBpcyBwb3NzaWJsZSBvciBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZQotICBvdXRwdXQgYnVmZmVyIHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4gTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCisgIG91dHB1dCBidWZmZXIgd2hlbiBaX0ZJTklTSCBpcyB1c2VkLiAgTm90ZSB0aGF0IFpfQlVGX0VSUk9SIGlzIG5vdCBmYXRhbCwgYW5kCiAgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHdpdGggbW9yZSBpbnB1dCBhbmQgbW9yZSBvdXRwdXQgc3BhY2UgdG8KLSAgY29udGludWUgZGVjb21wcmVzc2luZy4gSWYgWl9EQVRBX0VSUk9SIGlzIHJldHVybmVkLCB0aGUgYXBwbGljYXRpb24gbWF5IHRoZW4KLSAgY2FsbCBpbmZsYXRlU3luYygpIHRvIGxvb2sgZm9yIGEgZ29vZCBjb21wcmVzc2lvbiBibG9jayBpZiBhIHBhcnRpYWwgcmVjb3ZlcnkKLSAgb2YgdGhlIGRhdGEgaXMgZGVzaXJlZC4KKyAgY29udGludWUgZGVjb21wcmVzc2luZy4gIElmIFpfREFUQV9FUlJPUiBpcyByZXR1cm5lZCwgdGhlIGFwcGxpY2F0aW9uIG1heQorICB0aGVuIGNhbGwgaW5mbGF0ZVN5bmMoKSB0byBsb29rIGZvciBhIGdvb2QgY29tcHJlc3Npb24gYmxvY2sgaWYgYSBwYXJ0aWFsCisgIHJlY292ZXJ5IG9mIHRoZSBkYXRhIGlzIGRlc2lyZWQuCiAqLwogCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUVuZCBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCiAgICAgIEFsbCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGlzIHN0cmVhbSBhcmUgZnJlZWQuCi0gICBUaGlzIGZ1bmN0aW9uIGRpc2NhcmRzIGFueSB1bnByb2Nlc3NlZCBpbnB1dCBhbmQgZG9lcyBub3QgZmx1c2ggYW55Ci0gICBwZW5kaW5nIG91dHB1dC4KKyAgIFRoaXMgZnVuY3Rpb24gZGlzY2FyZHMgYW55IHVucHJvY2Vzc2VkIGlucHV0IGFuZCBkb2VzIG5vdCBmbHVzaCBhbnkgcGVuZGluZworICAgb3V0cHV0LgogCiAgICAgIGluZmxhdGVFbmQgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RhdGUKLSAgIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBlcnJvciBjYXNlLCBtc2cgbWF5IGJlIHNldCBidXQgdGhlbiBwb2ludHMgdG8gYQorICAgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZSBlcnJvciBjYXNlLCBtc2cgbWF5IGJlIHNldCBidXQgdGhlbiBwb2ludHMgdG8gYQogICAgc3RhdGljIHN0cmluZyAod2hpY2ggbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQpLgogKi8KIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZHZhbmNlZCBmdW5jdGlvbnMgKi8KIAogLyoKQEAgLTQ4NCw1NSArNTIyLDU3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtZW1MZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHN0cmF0ZWd5KSk7CiAKLSAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgZGVmbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXByZXNzaW9uIG9wdGlvbnMuIFRoZQotICAgZmllbGRzIG5leHRfaW4sIHphbGxvYywgemZyZWUgYW5kIG9wYXF1ZSBtdXN0IGJlIGluaXRpYWxpemVkIGJlZm9yZSBieQotICAgdGhlIGNhbGxlci4KKyAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgZGVmbGF0ZUluaXQgd2l0aCBtb3JlIGNvbXByZXNzaW9uIG9wdGlvbnMuICBUaGUKKyAgIGZpZWxkcyBuZXh0X2luLCB6YWxsb2MsIHpmcmVlIGFuZCBvcGFxdWUgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgYnkgdGhlCisgICBjYWxsZXIuCiAKLSAgICAgVGhlIG1ldGhvZCBwYXJhbWV0ZXIgaXMgdGhlIGNvbXByZXNzaW9uIG1ldGhvZC4gSXQgbXVzdCBiZSBaX0RFRkxBVEVEIGluCisgICAgIFRoZSBtZXRob2QgcGFyYW1ldGVyIGlzIHRoZSBjb21wcmVzc2lvbiBtZXRob2QuICBJdCBtdXN0IGJlIFpfREVGTEFURUQgaW4KICAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KIAogICAgICBUaGUgd2luZG93Qml0cyBwYXJhbWV0ZXIgaXMgdGhlIGJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUKLSAgICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdCBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIDguLjE1IGZvciB0aGlzCi0gICB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LiBMYXJnZXIgdmFsdWVzIG9mIHRoaXMgcGFyYW1ldGVyIHJlc3VsdCBpbiBiZXR0ZXIKLSAgIGNvbXByZXNzaW9uIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKKyAgICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiAgSXQgc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNSBmb3IgdGhpcworICAgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIExhcmdlciB2YWx1ZXMgb2YgdGhpcyBwYXJhbWV0ZXIgcmVzdWx0IGluIGJldHRlcgorICAgY29tcHJlc3Npb24gYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTUgaWYKICAgIGRlZmxhdGVJbml0IGlzIHVzZWQgaW5zdGVhZC4KIAotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIC04Li4tMTUgZm9yIHJhdyBkZWZsYXRlLiBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCi0gICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gZGVmbGF0ZSgpIHdpbGwgdGhlbiBnZW5lcmF0ZSByYXcgZGVmbGF0ZSBkYXRhCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGRlZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCisgICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gIGRlZmxhdGUoKSB3aWxsIHRoZW4gZ2VuZXJhdGUgcmF3IGRlZmxhdGUgZGF0YQogICAgd2l0aCBubyB6bGliIGhlYWRlciBvciB0cmFpbGVyLCBhbmQgd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlLgogCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFuIDE1IGZvciBvcHRpb25hbCBnemlwIGVuY29kaW5nLiBBZGQKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZW5jb2RpbmcuICBBZGQKICAgIDE2IHRvIHdpbmRvd0JpdHMgdG8gd3JpdGUgYSBzaW1wbGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIgYXJvdW5kIHRoZQotICAgY29tcHJlc3NlZCBkYXRhIGluc3RlYWQgb2YgYSB6bGliIHdyYXBwZXIuIFRoZSBnemlwIGhlYWRlciB3aWxsIGhhdmUgbm8KLSAgIGZpbGUgbmFtZSwgbm8gZXh0cmEgZGF0YSwgbm8gY29tbWVudCwgbm8gbW9kaWZpY2F0aW9uIHRpbWUgKHNldCB0byB6ZXJvKSwKLSAgIG5vIGhlYWRlciBjcmMsIGFuZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aWxsIGJlIHNldCB0byAyNTUgKHVua25vd24pLiAgSWYgYQorICAgY29tcHJlc3NlZCBkYXRhIGluc3RlYWQgb2YgYSB6bGliIHdyYXBwZXIuICBUaGUgZ3ppcCBoZWFkZXIgd2lsbCBoYXZlIG5vCisgICBmaWxlIG5hbWUsIG5vIGV4dHJhIGRhdGEsIG5vIGNvbW1lbnQsIG5vIG1vZGlmaWNhdGlvbiB0aW1lIChzZXQgdG8gemVybyksIG5vCisgICBoZWFkZXIgY3JjLCBhbmQgdGhlIG9wZXJhdGluZyBzeXN0ZW0gd2lsbCBiZSBzZXQgdG8gMjU1ICh1bmtub3duKS4gIElmIGEKICAgIGd6aXAgc3RyZWFtIGlzIGJlaW5nIHdyaXR0ZW4sIHN0cm0tPmFkbGVyIGlzIGEgY3JjMzIgaW5zdGVhZCBvZiBhbiBhZGxlcjMyLgogCiAgICAgIFRoZSBtZW1MZXZlbCBwYXJhbWV0ZXIgc3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkCi0gICBmb3IgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLiBtZW1MZXZlbD0xIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0Ci0gICBpcyBzbG93IGFuZCByZWR1Y2VzIGNvbXByZXNzaW9uIHJhdGlvOyBtZW1MZXZlbD05IHVzZXMgbWF4aW11bSBtZW1vcnkKLSAgIGZvciBvcHRpbWFsIHNwZWVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LiBTZWUgemNvbmYuaCBmb3IgdG90YWwgbWVtb3J5Ci0gICB1c2FnZSBhcyBhIGZ1bmN0aW9uIG9mIHdpbmRvd0JpdHMgYW5kIG1lbUxldmVsLgorICAgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4gIG1lbUxldmVsPTEgdXNlcyBtaW5pbXVtIG1lbW9yeSBidXQgaXMKKyAgIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87IG1lbUxldmVsPTkgdXNlcyBtYXhpbXVtIG1lbW9yeSBmb3IKKyAgIG9wdGltYWwgc3BlZWQuICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA4LiAgU2VlIHpjb25mLmggZm9yIHRvdGFsIG1lbW9yeSB1c2FnZQorICAgYXMgYSBmdW5jdGlvbiBvZiB3aW5kb3dCaXRzIGFuZCBtZW1MZXZlbC4KIAotICAgICBUaGUgc3RyYXRlZ3kgcGFyYW1ldGVyIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlCisgICAgIFRoZSBzdHJhdGVneSBwYXJhbWV0ZXIgaXMgdXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBVc2UgdGhlCiAgICB2YWx1ZSBaX0RFRkFVTFRfU1RSQVRFR1kgZm9yIG5vcm1hbCBkYXRhLCBaX0ZJTFRFUkVEIGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEKICAgIGZpbHRlciAob3IgcHJlZGljdG9yKSwgWl9IVUZGTUFOX09OTFkgdG8gZm9yY2UgSHVmZm1hbiBlbmNvZGluZyBvbmx5IChubwogICAgc3RyaW5nIG1hdGNoKSwgb3IgWl9STEUgdG8gbGltaXQgbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aAotICAgZW5jb2RpbmcpLiBGaWx0ZXJlZCBkYXRhIGNvbnNpc3RzIG1vc3RseSBvZiBzbWFsbCB2YWx1ZXMgd2l0aCBhIHNvbWV3aGF0Ci0gICByYW5kb20gZGlzdHJpYnV0aW9uLiBJbiB0aGlzIGNhc2UsIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0gaXMgdHVuZWQgdG8KLSAgIGNvbXByZXNzIHRoZW0gYmV0dGVyLiBUaGUgZWZmZWN0IG9mIFpfRklMVEVSRUQgaXMgdG8gZm9yY2UgbW9yZSBIdWZmbWFuCisgICBlbmNvZGluZykuICBGaWx0ZXJlZCBkYXRhIGNvbnNpc3RzIG1vc3RseSBvZiBzbWFsbCB2YWx1ZXMgd2l0aCBhIHNvbWV3aGF0CisgICByYW5kb20gZGlzdHJpYnV0aW9uLiAgSW4gdGhpcyBjYXNlLCB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtIGlzIHR1bmVkIHRvCisgICBjb21wcmVzcyB0aGVtIGJldHRlci4gIFRoZSBlZmZlY3Qgb2YgWl9GSUxURVJFRCBpcyB0byBmb3JjZSBtb3JlIEh1ZmZtYW4KICAgIGNvZGluZyBhbmQgbGVzcyBzdHJpbmcgbWF0Y2hpbmc7IGl0IGlzIHNvbWV3aGF0IGludGVybWVkaWF0ZSBiZXR3ZWVuCi0gICBaX0RFRkFVTFQgYW5kIFpfSFVGRk1BTl9PTkxZLiBaX1JMRSBpcyBkZXNpZ25lZCB0byBiZSBhbG1vc3QgYXMgZmFzdCBhcwotICAgWl9IVUZGTUFOX09OTFksIGJ1dCBnaXZlIGJldHRlciBjb21wcmVzc2lvbiBmb3IgUE5HIGltYWdlIGRhdGEuIFRoZSBzdHJhdGVneQotICAgcGFyYW1ldGVyIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Npb24gcmF0aW8gYnV0IG5vdCB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlCi0gICBjb21wcmVzc2VkIG91dHB1dCBldmVuIGlmIGl0IGlzIG5vdCBzZXQgYXBwcm9wcmlhdGVseS4gIFpfRklYRUQgcHJldmVudHMgdGhlCi0gICB1c2Ugb2YgZHluYW1pYyBIdWZmbWFuIGNvZGVzLCBhbGxvd2luZyBmb3IgYSBzaW1wbGVyIGRlY29kZXIgZm9yIHNwZWNpYWwKLSAgIGFwcGxpY2F0aW9ucy4KKyAgIFpfREVGQVVMVF9TVFJBVEVHWSBhbmQgWl9IVUZGTUFOX09OTFkuICBaX1JMRSBpcyBkZXNpZ25lZCB0byBiZSBhbG1vc3QgYXMKKyAgIGZhc3QgYXMgWl9IVUZGTUFOX09OTFksIGJ1dCBnaXZlIGJldHRlciBjb21wcmVzc2lvbiBmb3IgUE5HIGltYWdlIGRhdGEuICBUaGUKKyAgIHN0cmF0ZWd5IHBhcmFtZXRlciBvbmx5IGFmZmVjdHMgdGhlIGNvbXByZXNzaW9uIHJhdGlvIGJ1dCBub3QgdGhlCisgICBjb3JyZWN0bmVzcyBvZiB0aGUgY29tcHJlc3NlZCBvdXRwdXQgZXZlbiBpZiBpdCBpcyBub3Qgc2V0IGFwcHJvcHJpYXRlbHkuCisgICBaX0ZJWEVEIHByZXZlbnRzIHRoZSB1c2Ugb2YgZHluYW1pYyBIdWZmbWFuIGNvZGVzLCBhbGxvd2luZyBmb3IgYSBzaW1wbGVyCisgICBkZWNvZGVyIGZvciBzcGVjaWFsIGFwcGxpY2F0aW9ucy4KIAotICAgICAgZGVmbGF0ZUluaXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAotICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGFuIGludmFsaWQKLSAgIG1ldGhvZCkuIG1zZyBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgZGVmbGF0ZUluaXQyIGRvZXMKLSAgIG5vdCBwZXJmb3JtIGFueSBjb21wcmVzc2lvbjogdGhpcyB3aWxsIGJlIGRvbmUgYnkgZGVmbGF0ZSgpLgorICAgICBkZWZsYXRlSW5pdDIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QgZW5vdWdoCisgICBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoc3VjaCBhcyBhbiBpbnZhbGlkCisgICBtZXRob2QpLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uICh6bGliX3ZlcnNpb24pIGlzCisgICBpbmNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIgKFpMSUJfVkVSU0lPTikuICBtc2cgaXMKKyAgIHNldCB0byBudWxsIGlmIHRoZXJlIGlzIG5vIGVycm9yIG1lc3NhZ2UuICBkZWZsYXRlSW5pdDIgZG9lcyBub3QgcGVyZm9ybSBhbnkKKyAgIGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTU0MCwzNyArNTgwLDM3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1SW50ICBkaWN0TGVuZ3RoKSk7CiAvKgogICAgICBJbml0aWFsaXplcyB0aGUgY29tcHJlc3Npb24gZGljdGlvbmFyeSBmcm9tIHRoZSBnaXZlbiBieXRlIHNlcXVlbmNlCi0gICB3aXRob3V0IHByb2R1Y2luZyBhbnkgY29tcHJlc3NlZCBvdXRwdXQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0LCBkZWZsYXRlSW5pdDIgb3IgZGVmbGF0ZVJlc2V0LCBiZWZvcmUgYW55Ci0gICBjYWxsIG9mIGRlZmxhdGUuIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQorICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAorICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkgY2FsbAorICAgb2YgZGVmbGF0ZS4gIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQogICAgZGljdGlvbmFyeSAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KIAogICAgICBUaGUgZGljdGlvbmFyeSBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5CiAgICB0byBiZSBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5Ci0gICB1c2VkIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiBVc2luZyBhCisgICB1c2VkIHN0cmluZ3MgcHJlZmVyYWJseSBwdXQgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBkaWN0aW9uYXJ5LiAgVXNpbmcgYQogICAgZGljdGlvbmFyeSBpcyBtb3N0IHVzZWZ1bCB3aGVuIHRoZSBkYXRhIHRvIGJlIGNvbXByZXNzZWQgaXMgc2hvcnQgYW5kIGNhbiBiZQogICAgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIgdGhhbgogICAgd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogCiAgICAgIERlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3Npb24gZGF0YSBzdHJ1Y3R1cmVzIHNlbGVjdGVkIGJ5CiAgICBkZWZsYXRlSW5pdCBvciBkZWZsYXRlSW5pdDIsIGEgcGFydCBvZiB0aGUgZGljdGlvbmFyeSBtYXkgaW4gZWZmZWN0IGJlCi0gICBkaXNjYXJkZWQsIGZvciBleGFtcGxlIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3cgc2l6ZSBpbgotICAgZGVmbGF0ZSBvciBkZWZsYXRlMi4gVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZSB1c2VmdWwgc2hvdWxkIGJlCi0gICBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeSwgbm90IGF0IHRoZSBmcm9udC4gSW4gYWRkaXRpb24sIHRoZQotICAgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBkZWZsYXRlIHdpbGwgdXNlIGF0IG1vc3QgdGhlIHdpbmRvdyBzaXplIG1pbnVzCi0gICAyNjIgYnl0ZXMgb2YgdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkuCisgICBkaXNjYXJkZWQsIGZvciBleGFtcGxlIGlmIHRoZSBkaWN0aW9uYXJ5IGlzIGxhcmdlciB0aGFuIHRoZSB3aW5kb3cgc2l6ZQorICAgcHJvdmlkZWQgaW4gZGVmbGF0ZUluaXQgb3IgZGVmbGF0ZUluaXQyLiAgVGh1cyB0aGUgc3RyaW5ncyBtb3N0IGxpa2VseSB0byBiZQorICAgdXNlZnVsIHNob3VsZCBiZSBwdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeSwgbm90IGF0IHRoZSBmcm9udC4gIEluCisgICBhZGRpdGlvbiwgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgZGVmbGF0ZSB3aWxsIHVzZSBhdCBtb3N0IHRoZSB3aW5kb3cKKyAgIHNpemUgbWludXMgMjYyIGJ5dGVzIG9mIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5LgogCiAgICAgIFVwb24gcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24sIHN0cm0tPmFkbGVyIGlzIHNldCB0byB0aGUgYWRsZXIzMiB2YWx1ZQogICAgb2YgdGhlIGRpY3Rpb25hcnk7IHRoZSBkZWNvbXByZXNzb3IgbWF5IGxhdGVyIHVzZSB0aGlzIHZhbHVlIHRvIGRldGVybWluZQotICAgd2hpY2ggZGljdGlvbmFyeSBoYXMgYmVlbiB1c2VkIGJ5IHRoZSBjb21wcmVzc29yLiAoVGhlIGFkbGVyMzIgdmFsdWUKKyAgIHdoaWNoIGRpY3Rpb25hcnkgaGFzIGJlZW4gdXNlZCBieSB0aGUgY29tcHJlc3Nvci4gIChUaGUgYWRsZXIzMiB2YWx1ZQogICAgYXBwbGllcyB0byB0aGUgd2hvbGUgZGljdGlvbmFyeSBldmVuIGlmIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGRpY3Rpb25hcnkgaXMKICAgIGFjdHVhbGx5IHVzZWQgYnkgdGhlIGNvbXByZXNzb3IuKSBJZiBhIHJhdyBkZWZsYXRlIHdhcyByZXF1ZXN0ZWQsIHRoZW4gdGhlCiAgICBhZGxlcjMyIHZhbHVlIGlzIG5vdCBjb21wdXRlZCBhbmQgc3RybS0+YWRsZXIgaXMgbm90IHNldC4KIAogICAgICBkZWZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgYQotICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCisgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KLSAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAorICAgb3IgaWYgdGhlIGNvbXByZXNzaW9uIG1ldGhvZCBpcyBic29ydCkuICBkZWZsYXRlU2V0RGljdGlvbmFyeSBkb2VzIG5vdAogICAgcGVyZm9ybSBhbnkgY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IGRlZmxhdGUoKS4KICovCiAKQEAgLTU4MSwyNiArNjIxLDI2IEBACiAKICAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gc2V2ZXJhbCBjb21wcmVzc2lvbiBzdHJhdGVnaWVzIHdpbGwgYmUKICAgIHRyaWVkLCBmb3IgZXhhbXBsZSB3aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHdheXMgb2YgcHJlLXByb2Nlc3NpbmcgdGhlIGlucHV0Ci0gICBkYXRhIHdpdGggYSBmaWx0ZXIuIFRoZSBzdHJlYW1zIHRoYXQgd2lsbCBiZSBkaXNjYXJkZWQgc2hvdWxkIHRoZW4gYmUgZnJlZWQKKyAgIGRhdGEgd2l0aCBhIGZpbHRlci4gIFRoZSBzdHJlYW1zIHRoYXQgd2lsbCBiZSBkaXNjYXJkZWQgc2hvdWxkIHRoZW4gYmUgZnJlZWQKICAgIGJ5IGNhbGxpbmcgZGVmbGF0ZUVuZC4gIE5vdGUgdGhhdCBkZWZsYXRlQ29weSBkdXBsaWNhdGVzIHRoZSBpbnRlcm5hbAotICAgY29tcHJlc3Npb24gc3RhdGUgd2hpY2ggY2FuIGJlIHF1aXRlIGxhcmdlLCBzbyB0aGlzIHN0cmF0ZWd5IGlzIHNsb3cgYW5kCi0gICBjYW4gY29uc3VtZSBsb3RzIG9mIG1lbW9yeS4KKyAgIGNvbXByZXNzaW9uIHN0YXRlIHdoaWNoIGNhbiBiZSBxdWl0ZSBsYXJnZSwgc28gdGhpcyBzdHJhdGVneSBpcyBzbG93IGFuZCBjYW4KKyAgIGNvbnN1bWUgbG90cyBvZiBtZW1vcnkuCiAKICAgICAgZGVmbGF0ZUNvcHkgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfTUVNX0VSUk9SIGlmIHRoZXJlIHdhcyBub3QKICAgIGVub3VnaCBtZW1vcnksIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQKLSAgIChzdWNoIGFzIHphbGxvYyBiZWluZyBOVUxMKS4gbXNnIGlzIGxlZnQgdW5jaGFuZ2VkIGluIGJvdGggc291cmNlIGFuZAorICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIFpfTlVMTCkuICBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCiAgICBkZXN0aW5hdGlvbi4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IE9GKCh6X3N0cmVhbXAgc3RybSkpOwogLyoKICAgICAgVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGRlZmxhdGVFbmQgZm9sbG93ZWQgYnkgZGVmbGF0ZUluaXQsCi0gICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgotICAgVGhlIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzCi0gICB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGRlZmxhdGVJbml0Mi4KKyAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuICBUaGUKKyAgIHN0cmVhbSB3aWxsIGtlZXAgdGhlIHNhbWUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIGFueSBvdGhlciBhdHRyaWJ1dGVzIHRoYXQKKyAgIG1heSBoYXZlIGJlZW4gc2V0IGJ5IGRlZmxhdGVJbml0Mi4KIAotICAgICAgZGVmbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCisgICAgIGRlZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQYXJhbXMgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNjEwLDE4ICs2NTAsMTggQEAKICAgICAgRHluYW1pY2FsbHkgdXBkYXRlIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBhbmQgY29tcHJlc3Npb24gc3RyYXRlZ3kuICBUaGUKICAgIGludGVycHJldGF0aW9uIG9mIGxldmVsIGFuZCBzdHJhdGVneSBpcyBhcyBpbiBkZWZsYXRlSW5pdDIuICBUaGlzIGNhbiBiZQogICAgdXNlZCB0byBzd2l0Y2ggYmV0d2VlbiBjb21wcmVzc2lvbiBhbmQgc3RyYWlnaHQgY29weSBvZiB0aGUgaW5wdXQgZGF0YSwgb3IKLSAgIHRvIHN3aXRjaCB0byBhIGRpZmZlcmVudCBraW5kIG9mIGlucHV0IGRhdGEgcmVxdWlyaW5nIGEgZGlmZmVyZW50Ci0gICBzdHJhdGVneS4gSWYgdGhlIGNvbXByZXNzaW9uIGxldmVsIGlzIGNoYW5nZWQsIHRoZSBpbnB1dCBhdmFpbGFibGUgc28gZmFyCi0gICBpcyBjb21wcmVzc2VkIHdpdGggdGhlIG9sZCBsZXZlbCAoYW5kIG1heSBiZSBmbHVzaGVkKTsgdGhlIG5ldyBsZXZlbCB3aWxsCi0gICB0YWtlIGVmZmVjdCBvbmx5IGF0IHRoZSBuZXh0IGNhbGwgb2YgZGVmbGF0ZSgpLgorICAgdG8gc3dpdGNoIHRvIGEgZGlmZmVyZW50IGtpbmQgb2YgaW5wdXQgZGF0YSByZXF1aXJpbmcgYSBkaWZmZXJlbnQgc3RyYXRlZ3kuCisgICBJZiB0aGUgY29tcHJlc3Npb24gbGV2ZWwgaXMgY2hhbmdlZCwgdGhlIGlucHV0IGF2YWlsYWJsZSBzbyBmYXIgaXMKKyAgIGNvbXByZXNzZWQgd2l0aCB0aGUgb2xkIGxldmVsIChhbmQgbWF5IGJlIGZsdXNoZWQpOyB0aGUgbmV3IGxldmVsIHdpbGwgdGFrZQorICAgZWZmZWN0IG9ubHkgYXQgdGhlIG5leHQgY2FsbCBvZiBkZWZsYXRlKCkuCiAKICAgICAgQmVmb3JlIHRoZSBjYWxsIG9mIGRlZmxhdGVQYXJhbXMsIHRoZSBzdHJlYW0gc3RhdGUgbXVzdCBiZSBzZXQgYXMgZm9yCi0gICBhIGNhbGwgb2YgZGVmbGF0ZSgpLCBzaW5jZSB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBpbnB1dCBtYXkgaGF2ZSB0bwotICAgYmUgY29tcHJlc3NlZCBhbmQgZmx1c2hlZC4gSW4gcGFydGljdWxhciwgc3RybS0+YXZhaWxfb3V0IG11c3QgYmUgbm9uLXplcm8uCisgICBhIGNhbGwgb2YgZGVmbGF0ZSgpLCBzaW5jZSB0aGUgY3VycmVudGx5IGF2YWlsYWJsZSBpbnB1dCBtYXkgaGF2ZSB0byBiZQorICAgY29tcHJlc3NlZCBhbmQgZmx1c2hlZC4gIEluIHBhcnRpY3VsYXIsIHN0cm0tPmF2YWlsX291dCBtdXN0IGJlIG5vbi16ZXJvLgogCiAgICAgIGRlZmxhdGVQYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKLSAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50IG9yIGlmIGEgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLCBaX0JVRl9FUlJPUgotICAgaWYgc3RybS0+YXZhaWxfb3V0IHdhcyB6ZXJvLgorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgb3IgaWYgYSBwYXJhbWV0ZXIgd2FzIGludmFsaWQsIFpfQlVGX0VSUk9SIGlmCisgICBzdHJtLT5hdmFpbF9vdXQgd2FzIHplcm8uCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVUdW5lIE9GKCh6X3N0cmVhbXAgc3RybSwKQEAgLTY0NSw5ICs2ODUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVMb25nIHNvdXJjZUxlbikpOwogLyoKICAgICAgZGVmbGF0ZUJvdW5kKCkgcmV0dXJucyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29tcHJlc3NlZCBzaXplIGFmdGVyCi0gICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKQotICAgb3IgZGVmbGF0ZUluaXQyKCkuICBUaGlzIHdvdWxkIGJlIHVzZWQgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlcgotICAgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCisgICBkZWZsYXRpb24gb2Ygc291cmNlTGVuIGJ5dGVzLiAgSXQgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZGVmbGF0ZUluaXQoKSBvcgorICAgZGVmbGF0ZUluaXQyKCksIGFuZCBhZnRlciBkZWZsYXRlU2V0SGVhZGVyKCksIGlmIHVzZWQuICBUaGlzIHdvdWxkIGJlIHVzZWQKKyAgIHRvIGFsbG9jYXRlIGFuIG91dHB1dCBidWZmZXIgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUKKyAgIGNhbGxlZCBiZWZvcmUgZGVmbGF0ZSgpLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNjU1LDIxICs2OTYsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpKTsKIC8qCiAgICAgIGRlZmxhdGVQcmltZSgpIGluc2VydHMgYml0cyBpbiB0aGUgZGVmbGF0ZSBvdXRwdXQgc3RyZWFtLiAgVGhlIGludGVudAotICBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzdGFydCBvZmYgdGhlIGRlZmxhdGUgb3V0cHV0IHdpdGggdGhlCi0gIGJpdHMgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIGRlZmxhdGUgc3RyZWFtIHdoZW4gYXBwZW5kaW5nIHRvIGl0LiAgQXMgc3VjaCwKLSAgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIGZvciByYXcgZGVmbGF0ZSwgYW5kIG11c3QgYmUgdXNlZCBiZWZvcmUgdGhlCi0gIGZpcnN0IGRlZmxhdGUoKSBjYWxsIGFmdGVyIGEgZGVmbGF0ZUluaXQyKCkgb3IgZGVmbGF0ZVJlc2V0KCkuICBiaXRzIG11c3QgYmUKLSAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mCi0gIHZhbHVlIHdpbGwgYmUgaW5zZXJ0ZWQgaW4gdGhlIG91dHB1dC4KKyAgIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IG9mZiB0aGUgZGVmbGF0ZSBvdXRwdXQgd2l0aCB0aGUgYml0cworICAgbGVmdG92ZXIgZnJvbSBhIHByZXZpb3VzIGRlZmxhdGUgc3RyZWFtIHdoZW4gYXBwZW5kaW5nIHRvIGl0LiAgQXMgc3VjaCwgdGhpcworICAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmF3IGRlZmxhdGUsIGFuZCBtdXN0IGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdAorICAgZGVmbGF0ZSgpIGNhbGwgYWZ0ZXIgYSBkZWZsYXRlSW5pdDIoKSBvciBkZWZsYXRlUmVzZXQoKS4gIGJpdHMgbXVzdCBiZSBsZXNzCisgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCisgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAgICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgICBkZWZsYXRlUHJpbWUgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKICAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlU2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pfaGVhZGVycCBoZWFkKSk7CiAvKgotICAgICAgZGVmbGF0ZVNldEhlYWRlcigpIHByb3ZpZGVzIGd6aXAgaGVhZGVyIGluZm9ybWF0aW9uIGZvciB3aGVuIGEgZ3ppcAorICAgICBkZWZsYXRlU2V0SGVhZGVyKCkgcHJvdmlkZXMgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gZm9yIHdoZW4gYSBnemlwCiAgICBzdHJlYW0gaXMgcmVxdWVzdGVkIGJ5IGRlZmxhdGVJbml0MigpLiAgZGVmbGF0ZVNldEhlYWRlcigpIG1heSBiZSBjYWxsZWQKICAgIGFmdGVyIGRlZmxhdGVJbml0MigpIG9yIGRlZmxhdGVSZXNldCgpIGFuZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgb2YKICAgIGRlZmxhdGUoKS4gIFRoZSB0ZXh0LCB0aW1lLCBvcywgZXh0cmEgZmllbGQsIG5hbWUsIGFuZCBjb21tZW50IGluZm9ybWF0aW9uCkBAIC02ODIsMTEgKzcyMywxMSBAQAogICAgMS4zLngpIGRvIG5vdCBzdXBwb3J0IGhlYWRlciBjcmMncywgYW5kIHdpbGwgcmVwb3J0IHRoYXQgaXQgaXMgYSAibXVsdGktcGFydAogICAgZ3ppcCBmaWxlIiBhbmQgZ2l2ZSB1cC4KIAotICAgICAgSWYgZGVmbGF0ZVNldEhlYWRlciBpcyBub3QgdXNlZCwgdGhlIGRlZmF1bHQgZ3ppcCBoZWFkZXIgaGFzIHRleHQgZmFsc2UsCisgICAgIElmIGRlZmxhdGVTZXRIZWFkZXIgaXMgbm90IHVzZWQsIHRoZSBkZWZhdWx0IGd6aXAgaGVhZGVyIGhhcyB0ZXh0IGZhbHNlLAogICAgdGhlIHRpbWUgc2V0IHRvIHplcm8sIGFuZCBvcyBzZXQgdG8gMjU1LCB3aXRoIG5vIGV4dHJhLCBuYW1lLCBvciBjb21tZW50CiAgICBmaWVsZHMuICBUaGUgZ3ppcCBoZWFkZXIgaXMgcmV0dXJuZWQgdG8gdGhlIGRlZmF1bHQgc3RhdGUgYnkgZGVmbGF0ZVJlc2V0KCkuCiAKLSAgICAgIGRlZmxhdGVTZXRIZWFkZXIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKKyAgICAgZGVmbGF0ZVNldEhlYWRlciByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQogICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCkBAIC02OTQsNDMgKzczNSw1MCBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykpOwogCi0gICAgIFRoaXMgaXMgYW5vdGhlciB2ZXJzaW9uIG9mIGluZmxhdGVJbml0IHdpdGggYW4gZXh0cmEgcGFyYW1ldGVyLiBUaGUKKyAgICAgVGhpcyBpcyBhbm90aGVyIHZlcnNpb24gb2YgaW5mbGF0ZUluaXQgd2l0aCBhbiBleHRyYSBwYXJhbWV0ZXIuICBUaGUKICAgIGZpZWxkcyBuZXh0X2luLCBhdmFpbF9pbiwgemFsbG9jLCB6ZnJlZSBhbmQgb3BhcXVlIG11c3QgYmUgaW5pdGlhbGl6ZWQKICAgIGJlZm9yZSBieSB0aGUgY2FsbGVyLgogCiAgICAgIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyB0aGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSBtYXhpbXVtIHdpbmRvdwogICAgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gIEl0IHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgOC4uMTUgZm9yCi0gICB0aGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKLSAgIGluc3RlYWQuIHdpbmRvd0JpdHMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHdpbmRvd0JpdHMgdmFsdWUKKyAgIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IGlmIGluZmxhdGVJbml0IGlzIHVzZWQKKyAgIGluc3RlYWQuICB3aW5kb3dCaXRzIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB3aW5kb3dCaXRzIHZhbHVlCiAgICBwcm92aWRlZCB0byBkZWZsYXRlSW5pdDIoKSB3aGlsZSBjb21wcmVzc2luZywgb3IgaXQgbXVzdCBiZSBlcXVhbCB0byAxNSBpZgotICAgZGVmbGF0ZUluaXQyKCkgd2FzIG5vdCB1c2VkLiBJZiBhIGNvbXByZXNzZWQgc3RyZWFtIHdpdGggYSBsYXJnZXIgd2luZG93CisgICBkZWZsYXRlSW5pdDIoKSB3YXMgbm90IHVzZWQuICBJZiBhIGNvbXByZXNzZWQgc3RyZWFtIHdpdGggYSBsYXJnZXIgd2luZG93CiAgICBzaXplIGlzIGdpdmVuIGFzIGlucHV0LCBpbmZsYXRlKCkgd2lsbCByZXR1cm4gd2l0aCB0aGUgZXJyb3IgY29kZQogICAgWl9EQVRBX0VSUk9SIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGFsbG9jYXRlIGEgbGFyZ2VyIHdpbmRvdy4KIAotICAgICB3aW5kb3dCaXRzIGNhbiBhbHNvIGJlIC04Li4tMTUgZm9yIHJhdyBpbmZsYXRlLiBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCi0gICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gaW5mbGF0ZSgpIHdpbGwgdGhlbiBwcm9jZXNzIHJhdyBkZWZsYXRlIGRhdGEsCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgemVybyB0byByZXF1ZXN0IHRoYXQgaW5mbGF0ZSB1c2UgdGhlIHdpbmRvdyBzaXplIGluCisgICB0aGUgemxpYiBoZWFkZXIgb2YgdGhlIGNvbXByZXNzZWQgc3RyZWFtLgorCisgICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgLTguLi0xNSBmb3IgcmF3IGluZmxhdGUuICBJbiB0aGlzIGNhc2UsIC13aW5kb3dCaXRzCisgICBkZXRlcm1pbmVzIHRoZSB3aW5kb3cgc2l6ZS4gIGluZmxhdGUoKSB3aWxsIHRoZW4gcHJvY2VzcyByYXcgZGVmbGF0ZSBkYXRhLAogICAgbm90IGxvb2tpbmcgZm9yIGEgemxpYiBvciBnemlwIGhlYWRlciwgbm90IGdlbmVyYXRpbmcgYSBjaGVjayB2YWx1ZSwgYW5kIG5vdAotICAgbG9va2luZyBmb3IgYW55IGNoZWNrIHZhbHVlcyBmb3IgY29tcGFyaXNvbiBhdCB0aGUgZW5kIG9mIHRoZSBzdHJlYW0uIFRoaXMKKyAgIGxvb2tpbmcgZm9yIGFueSBjaGVjayB2YWx1ZXMgZm9yIGNvbXBhcmlzb24gYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiAgVGhpcwogICAgaXMgZm9yIHVzZSB3aXRoIG90aGVyIGZvcm1hdHMgdGhhdCB1c2UgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdAotICAgc3VjaCBhcyB6aXAuICBUaG9zZSBmb3JtYXRzIHByb3ZpZGUgdGhlaXIgb3duIGNoZWNrIHZhbHVlcy4gSWYgYSBjdXN0b20KKyAgIHN1Y2ggYXMgemlwLiAgVGhvc2UgZm9ybWF0cyBwcm92aWRlIHRoZWlyIG93biBjaGVjayB2YWx1ZXMuICBJZiBhIGN1c3RvbQogICAgZm9ybWF0IGlzIGRldmVsb3BlZCB1c2luZyB0aGUgcmF3IGRlZmxhdGUgZm9ybWF0IGZvciBjb21wcmVzc2VkIGRhdGEsIGl0IGlzCiAgICByZWNvbW1lbmRlZCB0aGF0IGEgY2hlY2sgdmFsdWUgc3VjaCBhcyBhbiBhZGxlcjMyIG9yIGEgY3JjMzIgYmUgYXBwbGllZCB0bwogICAgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGFzIGlzIGRvbmUgaW4gdGhlIHpsaWIsIGd6aXAsIGFuZCB6aXAgZm9ybWF0cy4gIEZvcgotICAgbW9zdCBhcHBsaWNhdGlvbnMsIHRoZSB6bGliIGZvcm1hdCBzaG91bGQgYmUgdXNlZCBhcyBpcy4gTm90ZSB0aGF0IGNvbW1lbnRzCisgICBtb3N0IGFwcGxpY2F0aW9ucywgdGhlIHpsaWIgZm9ybWF0IHNob3VsZCBiZSB1c2VkIGFzIGlzLiAgTm90ZSB0aGF0IGNvbW1lbnRzCiAgICBhYm92ZSBvbiB0aGUgdXNlIGluIGRlZmxhdGVJbml0MigpIGFwcGxpZXMgdG8gdGhlIG1hZ25pdHVkZSBvZiB3aW5kb3dCaXRzLgogCi0gICAgIHdpbmRvd0JpdHMgY2FuIGFsc28gYmUgZ3JlYXRlciB0aGFuIDE1IGZvciBvcHRpb25hbCBnemlwIGRlY29kaW5nLiBBZGQKKyAgICAgd2luZG93Qml0cyBjYW4gYWxzbyBiZSBncmVhdGVyIHRoYW4gMTUgZm9yIG9wdGlvbmFsIGd6aXAgZGVjb2RpbmcuICBBZGQKICAgIDMyIHRvIHdpbmRvd0JpdHMgdG8gZW5hYmxlIHpsaWIgYW5kIGd6aXAgZGVjb2Rpbmcgd2l0aCBhdXRvbWF0aWMgaGVhZGVyCiAgICBkZXRlY3Rpb24sIG9yIGFkZCAxNiB0byBkZWNvZGUgb25seSB0aGUgZ3ppcCBmb3JtYXQgKHRoZSB6bGliIGZvcm1hdCB3aWxsCi0gICByZXR1cm4gYSBaX0RBVEFfRVJST1IpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBkZWNvZGVkLCBzdHJtLT5hZGxlciBpcwotICAgYSBjcmMzMiBpbnN0ZWFkIG9mIGFuIGFkbGVyMzIuCisgICByZXR1cm4gYSBaX0RBVEFfRVJST1IpLiAgSWYgYSBnemlwIHN0cmVhbSBpcyBiZWluZyBkZWNvZGVkLCBzdHJtLT5hZGxlciBpcyBhCisgICBjcmMzMiBpbnN0ZWFkIG9mIGFuIGFkbGVyMzIuCiAKICAgICAgaW5mbGF0ZUluaXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAotICAgbWVtb3J5LCBaX1NUUkVBTV9FUlJPUiBpZiBhIHBhcmFtZXRlciBpcyBpbnZhbGlkIChzdWNoIGFzIGEgbnVsbCBzdHJtKS4gbXNnCi0gICBpcyBzZXQgdG8gbnVsbCBpZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0KLSAgIGFueSBkZWNvbXByZXNzaW9uIGFwYXJ0IGZyb20gcmVhZGluZyB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogdGhpcyB3aWxsCi0gICBiZSBkb25lIGJ5IGluZmxhdGUoKS4gKFNvIG5leHRfaW4gYW5kIGF2YWlsX2luIG1heSBiZSBtb2RpZmllZCwgYnV0IG5leHRfb3V0Ci0gICBhbmQgYXZhaWxfb3V0IGFyZSB1bmNoYW5nZWQuKQorICAgbWVtb3J5LCBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHpsaWIgbGlicmFyeSB2ZXJzaW9uIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgdmVyc2lvbiBhc3N1bWVkIGJ5IHRoZSBjYWxsZXIsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZQorICAgaW52YWxpZCwgc3VjaCBhcyBhIG51bGwgcG9pbnRlciB0byB0aGUgc3RydWN0dXJlLiAgbXNnIGlzIHNldCB0byBudWxsIGlmCisgICB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLiAgaW5mbGF0ZUluaXQyIGRvZXMgbm90IHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb24KKyAgIGFwYXJ0IGZyb20gcG9zc2libHkgcmVhZGluZyB0aGUgemxpYiBoZWFkZXIgaWYgcHJlc2VudDogYWN0dWFsIGRlY29tcHJlc3Npb24KKyAgIHdpbGwgYmUgZG9uZSBieSBpbmZsYXRlKCkuICAoU28gbmV4dF9pbiBhbmQgYXZhaWxfaW4gbWF5IGJlIG1vZGlmaWVkLCBidXQKKyAgIG5leHRfb3V0IGFuZCBhdmFpbF9vdXQgYXJlIHVudXNlZCBhbmQgdW5jaGFuZ2VkLikgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KKyAgIG9mIGluZmxhdGVJbml0MigpIGRvZXMgbm90IHByb2Nlc3MgYW55IGhlYWRlciBpbmZvcm1hdGlvbiAtLSB0aGF0IGlzCisgICBkZWZlcnJlZCB1bnRpbCBpbmZsYXRlKCkgaXMgY2FsbGVkLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeSBPRigoel9zdHJlYW1wIHN0cm0sCkBAIC03MzgsOCArNzg2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVJbnQgIGRpY3RMZW5ndGgpKTsKIC8qCiAgICAgIEluaXRpYWxpemVzIHRoZSBkZWNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gdW5jb21wcmVzc2VkIGJ5dGUKLSAgIHNlcXVlbmNlLiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyIGEgY2FsbCBvZiBpbmZsYXRlLAotICAgaWYgdGhhdCBjYWxsIHJldHVybmVkIFpfTkVFRF9ESUNULiBUaGUgZGljdGlvbmFyeSBjaG9zZW4gYnkgdGhlIGNvbXByZXNzb3IKKyAgIHNlcXVlbmNlLiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBhIGNhbGwgb2YgaW5mbGF0ZSwKKyAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgogICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCkBAIC03NDgsMjYgKzc5NiwyNiBAQAogICAgZGljdGlvbmFyeSB0aGF0IHdhcyB1c2VkIGZvciBjb21wcmVzc2lvbiBpcyBwcm92aWRlZC4KIAogICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYQotICAgcGFyYW1ldGVyIGlzIGludmFsaWQgKHN1Y2ggYXMgTlVMTCBkaWN0aW9uYXJ5KSBvciB0aGUgc3RyZWFtIHN0YXRlIGlzCisgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCwgWl9EQVRBX0VSUk9SIGlmIHRoZSBnaXZlbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgbWF0Y2ggdGhlCi0gICBleHBlY3RlZCBvbmUgKGluY29ycmVjdCBhZGxlcjMyIHZhbHVlKS4gaW5mbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKKyAgIGV4cGVjdGVkIG9uZSAoaW5jb3JyZWN0IGFkbGVyMzIgdmFsdWUpLiAgaW5mbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKICAgIHBlcmZvcm0gYW55IGRlY29tcHJlc3Npb246IHRoaXMgd2lsbCBiZSBkb25lIGJ5IHN1YnNlcXVlbnQgY2FsbHMgb2YKICAgIGluZmxhdGUoKS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZVN5bmMgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgotICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQotICBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlIHdpdGggWl9GVUxMX0ZMVVNIKSBjYW4gYmUgZm91bmQsIG9yIHVudGlsIGFsbAotICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgorICAgICBTa2lwcyBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSB1bnRpbCBhIGZ1bGwgZmx1c2ggcG9pbnQgKHNlZSBhYm92ZSB0aGUKKyAgIGRlc2NyaXB0aW9uIG9mIGRlZmxhdGUgd2l0aCBaX0ZVTExfRkxVU0gpIGNhbiBiZSBmb3VuZCwgb3IgdW50aWwgYWxsCisgICBhdmFpbGFibGUgaW5wdXQgaXMgc2tpcHBlZC4gIE5vIG91dHB1dCBpcyBwcm92aWRlZC4KIAotICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsCi0gIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gc3RydWN0dXJlIHdhcyBpbmNvbnNpc3RlbnQuIEluIHRoZSBzdWNjZXNzCi0gIGNhc2UsIHRoZSBhcHBsaWNhdGlvbiBtYXkgc2F2ZSB0aGUgY3VycmVudCBjdXJyZW50IHZhbHVlIG9mIHRvdGFsX2luIHdoaWNoCi0gIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiBJbiB0aGUgZXJyb3IgY2FzZSwgdGhlCi0gIGFwcGxpY2F0aW9uIG1heSByZXBlYXRlZGx5IGNhbGwgaW5mbGF0ZVN5bmMsIHByb3ZpZGluZyBtb3JlIGlucHV0IGVhY2ggdGltZSwKLSAgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCisgICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuCisgICBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZQorICAgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgY3VycmVudCB2YWx1ZSBvZiB0b3RhbF9pbgorICAgd2hpY2ggaW5kaWNhdGVzIHdoZXJlIHZhbGlkIGNvbXByZXNzZWQgZGF0YSB3YXMgZm91bmQuICBJbiB0aGUgZXJyb3IgY2FzZSwKKyAgIHRoZSBhcHBsaWNhdGlvbiBtYXkgcmVwZWF0ZWRseSBjYWxsIGluZmxhdGVTeW5jLCBwcm92aWRpbmcgbW9yZSBpbnB1dCBlYWNoCisgICB0aW1lLCB1bnRpbCBzdWNjZXNzIG9yIGVuZCBvZiB0aGUgaW5wdXQgZGF0YS4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUNvcHkgT0YoKHpfc3RyZWFtcCBkZXN0LApAQCAtNzgyLDE4ICs4MzAsMzAgQEAKIAogICAgICBpbmZsYXRlQ29weSByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAogICAgZW5vdWdoIG1lbW9yeSwgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZSBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudAotICAgKHN1Y2ggYXMgemFsbG9jIGJlaW5nIE5VTEwpLiBtc2cgaXMgbGVmdCB1bmNoYW5nZWQgaW4gYm90aCBzb3VyY2UgYW5kCisgICAoc3VjaCBhcyB6YWxsb2MgYmVpbmcgWl9OVUxMKS4gIG1zZyBpcyBsZWZ0IHVuY2hhbmdlZCBpbiBib3RoIHNvdXJjZSBhbmQKICAgIGRlc3RpbmF0aW9uLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CiAvKgogICAgICBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gaW5mbGF0ZUVuZCBmb2xsb3dlZCBieSBpbmZsYXRlSW5pdCwKLSAgIGJ1dCBkb2VzIG5vdCBmcmVlIGFuZCByZWFsbG9jYXRlIGFsbCB0aGUgaW50ZXJuYWwgZGVjb21wcmVzc2lvbiBzdGF0ZS4KLSAgIFRoZSBzdHJlYW0gd2lsbCBrZWVwIGF0dHJpYnV0ZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHNldCBieSBpbmZsYXRlSW5pdDIuCisgICBidXQgZG9lcyBub3QgZnJlZSBhbmQgcmVhbGxvY2F0ZSBhbGwgdGhlIGludGVybmFsIGRlY29tcHJlc3Npb24gc3RhdGUuICBUaGUKKyAgIHN0cmVhbSB3aWxsIGtlZXAgYXR0cmlidXRlcyB0aGF0IG1heSBoYXZlIGJlZW4gc2V0IGJ5IGluZmxhdGVJbml0Mi4KIAotICAgICAgaW5mbGF0ZVJlc2V0IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgTlVMTCkuCisgICAgIGluZmxhdGVSZXNldCByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQgKHN1Y2ggYXMgemFsbG9jIG9yIHN0YXRlIGJlaW5nIFpfTlVMTCkuCisqLworCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVSZXNldDIgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2luZG93Qml0cykpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiBpcyB0aGUgc2FtZSBhcyBpbmZsYXRlUmVzZXQsIGJ1dCBpdCBhbHNvIHBlcm1pdHMgY2hhbmdpbmcKKyAgIHRoZSB3cmFwIGFuZCB3aW5kb3cgc2l6ZSByZXF1ZXN0cy4gIFRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnRlcnByZXRlZAorICAgdGhlIHNhbWUgYXMgaXQgaXMgZm9yIGluZmxhdGVJbml0Mi4KKworICAgICBpbmZsYXRlUmVzZXQyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudCAoc3VjaCBhcyB6YWxsb2Mgb3Igc3RhdGUgYmVpbmcgWl9OVUxMKSwgb3IgaWYKKyAgIHRoZSB3aW5kb3dCaXRzIHBhcmFtZXRlciBpcyBpbnZhbGlkLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtODAxLDU0ICs4NjEsODcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsdWUpKTsKIC8qCiAgICAgIFRoaXMgZnVuY3Rpb24gaW5zZXJ0cyBiaXRzIGluIHRoZSBpbmZsYXRlIGlucHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQgaXMKLSAgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgaW5mbGF0aW5nIGF0IGEgYml0IHBvc2l0aW9uIGluIHRoZQotICBtaWRkbGUgb2YgYSBieXRlLiAgVGhlIHByb3ZpZGVkIGJpdHMgd2lsbCBiZSB1c2VkIGJlZm9yZSBhbnkgYnl0ZXMgYXJlIHVzZWQKLSAgZnJvbSBuZXh0X2luLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcmF3IGluZmxhdGUsIGFuZAotICBzaG91bGQgYmUgdXNlZCBiZWZvcmUgdGhlIGZpcnN0IGluZmxhdGUoKSBjYWxsIGFmdGVyIGluZmxhdGVJbml0MigpIG9yCi0gIGluZmxhdGVSZXNldCgpLiAgYml0cyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxNiwgYW5kIHRoYXQgbWFueSBvZiB0aGUKLSAgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBpbnB1dC4KKyAgIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHN0YXJ0IGluZmxhdGluZyBhdCBhIGJpdCBwb3NpdGlvbiBpbiB0aGUKKyAgIG1pZGRsZSBvZiBhIGJ5dGUuICBUaGUgcHJvdmlkZWQgYml0cyB3aWxsIGJlIHVzZWQgYmVmb3JlIGFueSBieXRlcyBhcmUgdXNlZAorICAgZnJvbSBuZXh0X2luLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIHdpdGggcmF3IGluZmxhdGUsIGFuZAorICAgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIHRoZSBmaXJzdCBpbmZsYXRlKCkgY2FsbCBhZnRlciBpbmZsYXRlSW5pdDIoKSBvcgorICAgaW5mbGF0ZVJlc2V0KCkuICBiaXRzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZQorICAgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB2YWx1ZSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBpbnB1dC4KIAotICAgICAgaW5mbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICAgIElmIGJpdHMgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGlucHV0IHN0cmVhbSBiaXQgYnVmZmVyIGlzIGVtcHRpZWQuICBUaGVuCisgICBpbmZsYXRlUHJpbWUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIHB1dCBiaXRzIGluIHRoZSBidWZmZXIuICBUaGlzIGlzIHVzZWQKKyAgIHRvIGNsZWFyIG91dCBiaXRzIGxlZnRvdmVyIGFmdGVyIGZlZWRpbmcgaW5mbGF0ZSBhIGJsb2NrIGRlc2NyaXB0aW9uIHByaW9yCisgICB0byBmZWVkaW5nIGluZmxhdGUgY29kZXMuCisKKyAgICAgaW5mbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCiAgICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KICovCiAKK1pFWFRFUk4gbG9uZyBaRVhQT1JUIGluZmxhdGVNYXJrIE9GKCh6X3N0cmVhbXAgc3RybSkpOworLyoKKyAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXMsIG9uZSBpbiB0aGUgbG93ZXIgMTYgYml0cyBvZiB0aGUgcmV0dXJuCisgICB2YWx1ZSwgYW5kIHRoZSBvdGhlciBpbiB0aGUgcmVtYWluaW5nIHVwcGVyIGJpdHMsIG9idGFpbmVkIGJ5IHNoaWZ0aW5nIHRoZQorICAgcmV0dXJuIHZhbHVlIGRvd24gMTYgYml0cy4gIElmIHRoZSB1cHBlciB2YWx1ZSBpcyAtMSBhbmQgdGhlIGxvd2VyIHZhbHVlIGlzCisgICB6ZXJvLCB0aGVuIGluZmxhdGUoKSBpcyBjdXJyZW50bHkgZGVjb2RpbmcgaW5mb3JtYXRpb24gb3V0c2lkZSBvZiBhIGJsb2NrLgorICAgSWYgdGhlIHVwcGVyIHZhbHVlIGlzIC0xIGFuZCB0aGUgbG93ZXIgdmFsdWUgaXMgbm9uLXplcm8sIHRoZW4gaW5mbGF0ZSBpcyBpbgorICAgdGhlIG1pZGRsZSBvZiBhIHN0b3JlZCBibG9jaywgd2l0aCB0aGUgbG93ZXIgdmFsdWUgZXF1YWxpbmcgdGhlIG51bWJlciBvZgorICAgYnl0ZXMgZnJvbSB0aGUgaW5wdXQgcmVtYWluaW5nIHRvIGNvcHkuICBJZiB0aGUgdXBwZXIgdmFsdWUgaXMgbm90IC0xLCB0aGVuCisgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgYmFjayBmcm9tIHRoZSBjdXJyZW50IGJpdCBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgb2YKKyAgIHRoZSBjb2RlIChsaXRlcmFsIG9yIGxlbmd0aC9kaXN0YW5jZSBwYWlyKSBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkLiAgSW4KKyAgIHRoYXQgY2FzZSB0aGUgbG93ZXIgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbHJlYWR5IGVtaXR0ZWQgZm9yIHRoYXQKKyAgIGNvZGUuCisKKyAgICAgQSBjb2RlIGlzIGJlaW5nIHByb2Nlc3NlZCBpZiBpbmZsYXRlIGlzIHdhaXRpbmcgZm9yIG1vcmUgaW5wdXQgdG8gY29tcGxldGUKKyAgIGRlY29kaW5nIG9mIHRoZSBjb2RlLCBvciBpZiBpdCBoYXMgY29tcGxldGVkIGRlY29kaW5nIGJ1dCBpcyB3YWl0aW5nIGZvcgorICAgbW9yZSBvdXRwdXQgc3BhY2UgdG8gd3JpdGUgdGhlIGxpdGVyYWwgb3IgbWF0Y2ggZGF0YS4KKworICAgICBpbmZsYXRlTWFyaygpIGlzIHVzZWQgdG8gbWFyayBsb2NhdGlvbnMgaW4gdGhlIGlucHV0IGRhdGEgZm9yIHJhbmRvbQorICAgYWNjZXNzLCB3aGljaCBtYXkgYmUgYXQgYml0IHBvc2l0aW9ucywgYW5kIHRvIG5vdGUgdGhvc2UgY2FzZXMgd2hlcmUgdGhlCisgICBvdXRwdXQgb2YgYSBjb2RlIG1heSBzcGFuIGJvdW5kYXJpZXMgb2YgcmFuZG9tIGFjY2VzcyBibG9ja3MuICBUaGUgY3VycmVudAorICAgbG9jYXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbSBjYW4gYmUgZGV0ZXJtaW5lZCBmcm9tIGF2YWlsX2luIGFuZCBkYXRhX3R5cGUKKyAgIGFzIG5vdGVkIGluIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIFpfQkxPQ0sgZmx1c2ggcGFyYW1ldGVyIGZvciBpbmZsYXRlLgorCisgICAgIGluZmxhdGVNYXJrIHJldHVybnMgdGhlIHZhbHVlIG5vdGVkIGFib3ZlIG9yIC0xIDw8IDE2IGlmIHRoZSBwcm92aWRlZAorICAgc291cmNlIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlR2V0SGVhZGVyIE9GKCh6X3N0cmVhbXAgc3RybSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pfaGVhZGVycCBoZWFkKSk7CiAvKgotICAgICAgaW5mbGF0ZUdldEhlYWRlcigpIHJlcXVlc3RzIHRoYXQgZ3ppcCBoZWFkZXIgaW5mb3JtYXRpb24gYmUgc3RvcmVkIGluIHRoZQorICAgICBpbmZsYXRlR2V0SGVhZGVyKCkgcmVxdWVzdHMgdGhhdCBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBiZSBzdG9yZWQgaW4gdGhlCiAgICBwcm92aWRlZCBnel9oZWFkZXIgc3RydWN0dXJlLiAgaW5mbGF0ZUdldEhlYWRlcigpIG1heSBiZSBjYWxsZWQgYWZ0ZXIKICAgIGluZmxhdGVJbml0MigpIG9yIGluZmxhdGVSZXNldCgpLCBhbmQgYmVmb3JlIHRoZSBmaXJzdCBjYWxsIG9mIGluZmxhdGUoKS4KICAgIEFzIGluZmxhdGUoKSBwcm9jZXNzZXMgdGhlIGd6aXAgc3RyZWFtLCBoZWFkLT5kb25lIGlzIHplcm8gdW50aWwgdGhlIGhlYWRlcgogICAgaXMgY29tcGxldGVkLCBhdCB3aGljaCB0aW1lIGhlYWQtPmRvbmUgaXMgc2V0IHRvIG9uZS4gIElmIGEgemxpYiBzdHJlYW0gaXMKICAgIGJlaW5nIGRlY29kZWQsIHRoZW4gaGVhZC0+ZG9uZSBpcyBzZXQgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSB3aWxsIGJlCi0gICBubyBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBmb3J0aGNvbWluZy4gIE5vdGUgdGhhdCBaX0JMT0NLIGNhbiBiZSB1c2VkIHRvCi0gICBmb3JjZSBpbmZsYXRlKCkgdG8gcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGhlYWRlciBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlCi0gICBhbmQgYmVmb3JlIGFueSBhY3R1YWwgZGF0YSBpcyBkZWNvbXByZXNzZWQuCisgICBubyBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiBmb3J0aGNvbWluZy4gIE5vdGUgdGhhdCBaX0JMT0NLIG9yIFpfVFJFRVMgY2FuIGJlCisgICB1c2VkIHRvIGZvcmNlIGluZmxhdGUoKSB0byByZXR1cm4gaW1tZWRpYXRlbHkgYWZ0ZXIgaGVhZGVyIHByb2Nlc3NpbmcgaXMKKyAgIGNvbXBsZXRlIGFuZCBiZWZvcmUgYW55IGFjdHVhbCBkYXRhIGlzIGRlY29tcHJlc3NlZC4KIAotICAgICAgVGhlIHRleHQsIHRpbWUsIHhmbGFncywgYW5kIG9zIGZpZWxkcyBhcmUgZmlsbGVkIGluIHdpdGggdGhlIGd6aXAgaGVhZGVyCisgICAgIFRoZSB0ZXh0LCB0aW1lLCB4ZmxhZ3MsIGFuZCBvcyBmaWVsZHMgYXJlIGZpbGxlZCBpbiB3aXRoIHRoZSBnemlwIGhlYWRlcgogICAgY29udGVudHMuICBoY3JjIGlzIHNldCB0byB0cnVlIGlmIHRoZXJlIGlzIGEgaGVhZGVyIENSQy4gIChUaGUgaGVhZGVyIENSQwotICAgd2FzIHZhbGlkIGlmIGRvbmUgaXMgc2V0IHRvIG9uZS4pICBJZiBleHRyYSBpcyBub3QgWl9OVUxMLCB0aGVuIGV4dHJhX21heAorICAgd2FzIHZhbGlkIGlmIGRvbmUgaXMgc2V0IHRvIG9uZS4pIElmIGV4dHJhIGlzIG5vdCBaX05VTEwsIHRoZW4gZXh0cmFfbWF4CiAgICBjb250YWlucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUgdG8gZXh0cmEuICBPbmNlIGRvbmUgaXMgdHJ1ZSwKICAgIGV4dHJhX2xlbiBjb250YWlucyB0aGUgYWN0dWFsIGV4dHJhIGZpZWxkIGxlbmd0aCwgYW5kIGV4dHJhIGNvbnRhaW5zIHRoZQogICAgZXh0cmEgZmllbGQsIG9yIHRoYXQgZmllbGQgdHJ1bmNhdGVkIGlmIGV4dHJhX21heCBpcyBsZXNzIHRoYW4gZXh0cmFfbGVuLgogICAgSWYgbmFtZSBpcyBub3QgWl9OVUxMLCB0aGVuIHVwIHRvIG5hbWVfbWF4IGNoYXJhY3RlcnMgYXJlIHdyaXR0ZW4gdGhlcmUsCiAgICB0ZXJtaW5hdGVkIHdpdGggYSB6ZXJvIHVubGVzcyB0aGUgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiBuYW1lX21heC4gIElmCiAgICBjb21tZW50IGlzIG5vdCBaX05VTEwsIHRoZW4gdXAgdG8gY29tbV9tYXggY2hhcmFjdGVycyBhcmUgd3JpdHRlbiB0aGVyZSwKLSAgIHRlcm1pbmF0ZWQgd2l0aCBhIHplcm8gdW5sZXNzIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIGNvbW1fbWF4LiAgV2hlbgotICAgYW55IG9mIGV4dHJhLCBuYW1lLCBvciBjb21tZW50IGFyZSBub3QgWl9OVUxMIGFuZCB0aGUgcmVzcGVjdGl2ZSBmaWVsZCBpcwotICAgbm90IHByZXNlbnQgaW4gdGhlIGhlYWRlciwgdGhlbiB0aGF0IGZpZWxkIGlzIHNldCB0byBaX05VTEwgdG8gc2lnbmFsIGl0cworICAgdGVybWluYXRlZCB3aXRoIGEgemVybyB1bmxlc3MgdGhlIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gY29tbV9tYXguICBXaGVuIGFueQorICAgb2YgZXh0cmEsIG5hbWUsIG9yIGNvbW1lbnQgYXJlIG5vdCBaX05VTEwgYW5kIHRoZSByZXNwZWN0aXZlIGZpZWxkIGlzIG5vdAorICAgcHJlc2VudCBpbiB0aGUgaGVhZGVyLCB0aGVuIHRoYXQgZmllbGQgaXMgc2V0IHRvIFpfTlVMTCB0byBzaWduYWwgaXRzCiAgICBhYnNlbmNlLiAgVGhpcyBhbGxvd3MgdGhlIHVzZSBvZiBkZWZsYXRlU2V0SGVhZGVyKCkgd2l0aCB0aGUgcmV0dXJuZWQKICAgIHN0cnVjdHVyZSB0byBkdXBsaWNhdGUgdGhlIGhlYWRlci4gIEhvd2V2ZXIgaWYgdGhvc2UgZmllbGRzIGFyZSBzZXQgdG8KICAgIGFsbG9jYXRlZCBtZW1vcnksIHRoZW4gdGhlIGFwcGxpY2F0aW9uIHdpbGwgbmVlZCB0byBzYXZlIHRob3NlIHBvaW50ZXJzCiAgICBlbHNld2hlcmUgc28gdGhhdCB0aGV5IGNhbiBiZSBldmVudHVhbGx5IGZyZWVkLgogCi0gICAgICBJZiBpbmZsYXRlR2V0SGVhZGVyIGlzIG5vdCB1c2VkLCB0aGVuIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24gaXMgc2ltcGx5CisgICAgIElmIGluZmxhdGVHZXRIZWFkZXIgaXMgbm90IHVzZWQsIHRoZW4gdGhlIGhlYWRlciBpbmZvcm1hdGlvbiBpcyBzaW1wbHkKICAgIGRpc2NhcmRlZC4gIFRoZSBoZWFkZXIgaXMgYWx3YXlzIGNoZWNrZWQgZm9yIHZhbGlkaXR5LCBpbmNsdWRpbmcgdGhlIGhlYWRlcgogICAgQ1JDIGlmIHByZXNlbnQuICBpbmZsYXRlUmVzZXQoKSB3aWxsIHJlc2V0IHRoZSBwcm9jZXNzIHRvIGRpc2NhcmQgdGhlIGhlYWRlcgogICAgaW5mb3JtYXRpb24uICBUaGUgYXBwbGljYXRpb24gd291bGQgbmVlZCB0byBjYWxsIGluZmxhdGVHZXRIZWFkZXIoKSBhZ2FpbiB0bwogICAgcmV0cmlldmUgdGhlIGhlYWRlciBmcm9tIHRoZSBuZXh0IGd6aXAgc3RyZWFtLgogCi0gICAgICBpbmZsYXRlR2V0SGVhZGVyIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCisgICAgIGluZmxhdGVHZXRIZWFkZXIgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzb3VyY2UKICAgIHN0cmVhbSBzdGF0ZSB3YXMgaW5jb25zaXN0ZW50LgogKi8KIApAQCAtODY5LDkgKzk2Miw5IEBACiAgICAgIFNlZSBpbmZsYXRlQmFjaygpIGZvciB0aGUgdXNhZ2Ugb2YgdGhlc2Ugcm91dGluZXMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0IHdpbGwgcmV0dXJuIFpfT0sgb24gc3VjY2VzcywgWl9TVFJFQU1fRVJST1IgaWYgYW55IG9mCi0gICB0aGUgcGFyYW1hdGVycyBhcmUgaW52YWxpZCwgWl9NRU1fRVJST1IgaWYgdGhlIGludGVybmFsIHN0YXRlIGNvdWxkIG5vdAotICAgYmUgYWxsb2NhdGVkLCBvciBaX1ZFUlNJT05fRVJST1IgaWYgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lcyBub3QKLSAgIG1hdGNoIHRoZSB2ZXJzaW9uIG9mIHRoZSBoZWFkZXIgZmlsZS4KKyAgIHRoZSBwYXJhbWF0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCisgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAorICAgdGhlIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAogdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7CkBAIC04OTEsMTUgKzk4NCwxNSBAQAogICAgICBpbmZsYXRlQmFja0luaXQoKSBtdXN0IGJlIGNhbGxlZCBmaXJzdCB0byBhbGxvY2F0ZSB0aGUgaW50ZXJuYWwgc3RhdGUKICAgIGFuZCB0byBpbml0aWFsaXplIHRoZSBzdGF0ZSB3aXRoIHRoZSB1c2VyLXByb3ZpZGVkIHdpbmRvdyBidWZmZXIuCiAgICBpbmZsYXRlQmFjaygpIG1heSB0aGVuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgdG8gaW5mbGF0ZSBhIGNvbXBsZXRlLCByYXcKLSAgIGRlZmxhdGUgc3RyZWFtIHdpdGggZWFjaCBjYWxsLiAgaW5mbGF0ZUJhY2tFbmQoKSBpcyB0aGVuIGNhbGxlZCB0byBmcmVlCi0gICB0aGUgYWxsb2NhdGVkIHN0YXRlLgorICAgZGVmbGF0ZSBzdHJlYW0gd2l0aCBlYWNoIGNhbGwuICBpbmZsYXRlQmFja0VuZCgpIGlzIHRoZW4gY2FsbGVkIHRvIGZyZWUgdGhlCisgICBhbGxvY2F0ZWQgc3RhdGUuCiAKICAgICAgQSByYXcgZGVmbGF0ZSBzdHJlYW0gaXMgb25lIHdpdGggbm8gemxpYiBvciBnemlwIGhlYWRlciBvciB0cmFpbGVyLgogICAgVGhpcyByb3V0aW5lIHdvdWxkIG5vcm1hbGx5IGJlIHVzZWQgaW4gYSB1dGlsaXR5IHRoYXQgcmVhZHMgemlwIG9yIGd6aXAKICAgIGZpbGVzIGFuZCB3cml0ZXMgb3V0IHVuY29tcHJlc3NlZCBmaWxlcy4gIFRoZSB1dGlsaXR5IHdvdWxkIGRlY29kZSB0aGUKLSAgIGhlYWRlciBhbmQgcHJvY2VzcyB0aGUgdHJhaWxlciBvbiBpdHMgb3duLCBoZW5jZSB0aGlzIHJvdXRpbmUgZXhwZWN0cwotICAgb25seSB0aGUgcmF3IGRlZmxhdGUgc3RyZWFtIHRvIGRlY29tcHJlc3MuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIHRoZQotICAgbm9ybWFsIGJlaGF2aW9yIG9mIGluZmxhdGUoKSwgd2hpY2ggZXhwZWN0cyBlaXRoZXIgYSB6bGliIG9yIGd6aXAgaGVhZGVyIGFuZAorICAgaGVhZGVyIGFuZCBwcm9jZXNzIHRoZSB0cmFpbGVyIG9uIGl0cyBvd24sIGhlbmNlIHRoaXMgcm91dGluZSBleHBlY3RzIG9ubHkKKyAgIHRoZSByYXcgZGVmbGF0ZSBzdHJlYW0gdG8gZGVjb21wcmVzcy4gIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIG5vcm1hbAorICAgYmVoYXZpb3Igb2YgaW5mbGF0ZSgpLCB3aGljaCBleHBlY3RzIGVpdGhlciBhIHpsaWIgb3IgZ3ppcCBoZWFkZXIgYW5kCiAgICB0cmFpbGVyIGFyb3VuZCB0aGUgZGVmbGF0ZSBzdHJlYW0uCiAKICAgICAgaW5mbGF0ZUJhY2soKSB1c2VzIHR3byBzdWJyb3V0aW5lcyBzdXBwbGllZCBieSB0aGUgY2FsbGVyIHRoYXQgYXJlIHRoZW4KQEAgLTkyNSw3ICsxMDE4LDcgQEAKICAgIGNhbGxpbmcgaW5mbGF0ZUJhY2soKS4gIElmIHN0cm0tPm5leHRfaW4gaXMgWl9OVUxMLCB0aGVuIGluKCkgd2lsbCBiZSBjYWxsZWQKICAgIGltbWVkaWF0ZWx5IGZvciBpbnB1dC4gIElmIHN0cm0tPm5leHRfaW4gaXMgbm90IFpfTlVMTCwgdGhlbiBzdHJtLT5hdmFpbF9pbgogICAgbXVzdCBhbHNvIGJlIGluaXRpYWxpemVkLCBhbmQgdGhlbiBpZiBzdHJtLT5hdmFpbF9pbiBpcyBub3QgemVybywgaW5wdXQgd2lsbAotICAgaW5pdGlhbGx5IGJlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pblswIC4uIHN0cm0tPmF2YWlsX2luIC0gMV0uCisgICBpbml0aWFsbHkgYmUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luWzAgLi4gIHN0cm0tPmF2YWlsX2luIC0gMV0uCiAKICAgICAgVGhlIGluX2Rlc2MgYW5kIG91dF9kZXNjIHBhcmFtZXRlcnMgb2YgaW5mbGF0ZUJhY2soKSBpcyBwYXNzZWQgYXMgdGhlCiAgICBmaXJzdCBwYXJhbWV0ZXIgb2YgaW4oKSBhbmQgb3V0KCkgcmVzcGVjdGl2ZWx5IHdoZW4gdGhleSBhcmUgY2FsbGVkLiAgVGhlc2UKQEAgLTkzNSwxNSArMTAyOCwxNSBAQAogICAgICBPbiByZXR1cm4sIGluZmxhdGVCYWNrKCkgd2lsbCBzZXQgc3RybS0+bmV4dF9pbiBhbmQgc3RybS0+YXZhaWxfaW4gdG8KICAgIHBhc3MgYmFjayBhbnkgdW51c2VkIGlucHV0IHRoYXQgd2FzIHByb3ZpZGVkIGJ5IHRoZSBsYXN0IGluKCkgY2FsbC4gIFRoZQogICAgcmV0dXJuIHZhbHVlcyBvZiBpbmZsYXRlQmFjaygpIGNhbiBiZSBaX1NUUkVBTV9FTkQgb24gc3VjY2VzcywgWl9CVUZfRVJST1IKLSAgIGlmIGluKCkgb3Igb3V0KCkgcmV0dXJuZWQgYW4gZXJyb3IsIFpfREFUQV9FUlJPUiBpZiB0aGVyZSB3YXMgYSBmb3JtYXQKLSAgIGVycm9yIGluIHRoZSBkZWZsYXRlIHN0cmVhbSAoaW4gd2hpY2ggY2FzZSBzdHJtLT5tc2cgaXMgc2V0IHRvIGluZGljYXRlIHRoZQotICAgbmF0dXJlIG9mIHRoZSBlcnJvciksIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBzdHJlYW0gd2FzIG5vdCBwcm9wZXJseQotICAgaW5pdGlhbGl6ZWQuICBJbiB0aGUgY2FzZSBvZiBaX0JVRl9FUlJPUiwgYW4gaW5wdXQgb3Igb3V0cHV0IGVycm9yIGNhbiBiZQotICAgZGlzdGluZ3Vpc2hlZCB1c2luZyBzdHJtLT5uZXh0X2luIHdoaWNoIHdpbGwgYmUgWl9OVUxMIG9ubHkgaWYgaW4oKSByZXR1cm5lZAotICAgYW4gZXJyb3IuICBJZiBzdHJtLT5uZXh0IGlzIG5vdCBaX05VTEwsIHRoZW4gdGhlIFpfQlVGX0VSUk9SIHdhcyBkdWUgdG8KLSAgIG91dCgpIHJldHVybmluZyBub24temVyby4gIChpbigpIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgb3V0KCksIHNvCi0gICBzdHJtLT5uZXh0X2luIGlzIGFzc3VyZWQgdG8gYmUgZGVmaW5lZCBpZiBvdXQoKSByZXR1cm5zIG5vbi16ZXJvLikgIE5vdGUKLSAgIHRoYXQgaW5mbGF0ZUJhY2soKSBjYW5ub3QgcmV0dXJuIFpfT0suCisgICBpZiBpbigpIG9yIG91dCgpIHJldHVybmVkIGFuIGVycm9yLCBaX0RBVEFfRVJST1IgaWYgdGhlcmUgd2FzIGEgZm9ybWF0IGVycm9yCisgICBpbiB0aGUgZGVmbGF0ZSBzdHJlYW0gKGluIHdoaWNoIGNhc2Ugc3RybS0+bXNnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGUgbmF0dXJlCisgICBvZiB0aGUgZXJyb3IpLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHdhcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQuCisgICBJbiB0aGUgY2FzZSBvZiBaX0JVRl9FUlJPUiwgYW4gaW5wdXQgb3Igb3V0cHV0IGVycm9yIGNhbiBiZSBkaXN0aW5ndWlzaGVkCisgICB1c2luZyBzdHJtLT5uZXh0X2luIHdoaWNoIHdpbGwgYmUgWl9OVUxMIG9ubHkgaWYgaW4oKSByZXR1cm5lZCBhbiBlcnJvci4gIElmCisgICBzdHJtLT5uZXh0X2luIGlzIG5vdCBaX05VTEwsIHRoZW4gdGhlIFpfQlVGX0VSUk9SIHdhcyBkdWUgdG8gb3V0KCkgcmV0dXJuaW5nCisgICBub24temVyby4gIChpbigpIHdpbGwgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgb3V0KCksIHNvIHN0cm0tPm5leHRfaW4gaXMKKyAgIGFzc3VyZWQgdG8gYmUgZGVmaW5lZCBpZiBvdXQoKSByZXR1cm5zIG5vbi16ZXJvLikgTm90ZSB0aGF0IGluZmxhdGVCYWNrKCkKKyAgIGNhbm5vdCByZXR1cm4gWl9PSy4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2tFbmQgT0YoKHpfc3RyZWFtcCBzdHJtKSk7CkBAIC05OTksMjMgKzEwOTIsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiAKIC8qCi0gICAgIFRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUKLSAgIGJhc2ljIHN0cmVhbS1vcmllbnRlZCBmdW5jdGlvbnMuIFRvIHNpbXBsaWZ5IHRoZSBpbnRlcmZhY2UsIHNvbWUKLSAgIGRlZmF1bHQgb3B0aW9ucyBhcmUgYXNzdW1lZCAoY29tcHJlc3Npb24gbGV2ZWwgYW5kIG1lbW9yeSB1c2FnZSwKLSAgIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucykuIFRoZSBzb3VyY2UgY29kZSBvZiB0aGVzZQotICAgdXRpbGl0eSBmdW5jdGlvbnMgY2FuIGVhc2lseSBiZSBtb2RpZmllZCBpZiB5b3UgbmVlZCBzcGVjaWFsIG9wdGlvbnMuCisgICAgIFRoZSBmb2xsb3dpbmcgdXRpbGl0eSBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUgYmFzaWMKKyAgIHN0cmVhbS1vcmllbnRlZCBmdW5jdGlvbnMuICBUbyBzaW1wbGlmeSB0aGUgaW50ZXJmYWNlLCBzb21lIGRlZmF1bHQgb3B0aW9ucworICAgYXJlIGFzc3VtZWQgKGNvbXByZXNzaW9uIGxldmVsIGFuZCBtZW1vcnkgdXNhZ2UsIHN0YW5kYXJkIG1lbW9yeSBhbGxvY2F0aW9uCisgICBmdW5jdGlvbnMpLiAgVGhlIHNvdXJjZSBjb2RlIG9mIHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIGNhbiBiZSBtb2RpZmllZCBpZgorICAgeW91IG5lZWQgc3BlY2lhbCBvcHRpb25zLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBjb21wcmVzcyBPRigoQnl0ZWYgKmRlc3QsICAgdUxvbmdmICpkZXN0TGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuKSk7CiAvKgogICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcwotICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbAotICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZAotICAgYnkgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQorICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiAgVXBvbiBlbnRyeSwgZGVzdExlbiBpcyB0aGUgdG90YWwgc2l6ZQorICAgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgd2hpY2ggbXVzdCBiZSBhdCBsZWFzdCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgIGNvbXByZXNzQm91bmQoc291cmNlTGVuKS4gIFVwb24gZXhpdCwgZGVzdExlbiBpcyB0aGUgYWN0dWFsIHNpemUgb2YgdGhlCiAgICBjb21wcmVzc2VkIGJ1ZmZlci4KLSAgICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBjb21wcmVzcyBhIHdob2xlIGZpbGUgYXQgb25jZSBpZiB0aGUKLSAgIGlucHV0IGZpbGUgaXMgbW1hcCdlZC4KKwogICAgICBjb21wcmVzcyByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdAogICAgZW5vdWdoIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgb3V0cHV0CiAgICBidWZmZXIuCkBAIC0xMDI1LDExICsxMTE3LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQnl0ZWYgKnNvdXJjZSwgdUxvbmcgc291cmNlTGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCkpOwogLyoKLSAgICAgQ29tcHJlc3NlcyB0aGUgc291cmNlIGJ1ZmZlciBpbnRvIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuIFRoZSBsZXZlbAorICAgICBDb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIFRoZSBsZXZlbAogICAgcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIGRlZmxhdGVJbml0LiAgc291cmNlTGVuIGlzIHRoZSBieXRlCi0gICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsIHNpemUgb2YgdGhlCisgICBsZW5ndGggb2YgdGhlIHNvdXJjZSBidWZmZXIuICBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbCBzaXplIG9mIHRoZQogICAgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGF0IGxlYXN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQotICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiBVcG9uIGV4aXQsIGRlc3RMZW4gaXMgdGhlIGFjdHVhbCBzaXplIG9mIHRoZQorICAgY29tcHJlc3NCb3VuZChzb3VyY2VMZW4pLiAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUKICAgIGNvbXByZXNzZWQgYnVmZmVyLgogCiAgICAgIGNvbXByZXNzMiByZXR1cm5zIFpfT0sgaWYgc3VjY2VzcywgWl9NRU1fRVJST1IgaWYgdGhlcmUgd2FzIG5vdCBlbm91Z2gKQEAgLTEwNDAsMjIgKzExMzIsMjAgQEAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjb21wcmVzc0JvdW5kIE9GKCh1TG9uZyBzb3VyY2VMZW4pKTsKIC8qCiAgICAgIGNvbXByZXNzQm91bmQoKSByZXR1cm5zIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBjb21wcmVzc2VkIHNpemUgYWZ0ZXIKLSAgIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkgb24gc291cmNlTGVuIGJ5dGVzLiAgSXQgd291bGQgYmUgdXNlZCBiZWZvcmUKLSAgIGEgY29tcHJlc3MoKSBvciBjb21wcmVzczIoKSBjYWxsIHRvIGFsbG9jYXRlIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIuCisgICBjb21wcmVzcygpIG9yIGNvbXByZXNzMigpIG9uIHNvdXJjZUxlbiBieXRlcy4gIEl0IHdvdWxkIGJlIHVzZWQgYmVmb3JlIGEKKyAgIGNvbXByZXNzKCkgb3IgY29tcHJlc3MyKCkgY2FsbCB0byBhbGxvY2F0ZSB0aGUgZGVzdGluYXRpb24gYnVmZmVyLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCB1bmNvbXByZXNzIE9GKChCeXRlZiAqZGVzdCwgICB1TG9uZ2YgKmRlc3RMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJ5dGVmICpzb3VyY2UsIHVMb25nIHNvdXJjZUxlbikpOwogLyoKICAgICAgRGVjb21wcmVzc2VzIHRoZSBzb3VyY2UgYnVmZmVyIGludG8gdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlci4gIHNvdXJjZUxlbiBpcwotICAgdGhlIGJ5dGUgbGVuZ3RoIG9mIHRoZSBzb3VyY2UgYnVmZmVyLiBVcG9uIGVudHJ5LCBkZXN0TGVuIGlzIHRoZSB0b3RhbAotICAgc2l6ZSBvZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCB3aGljaCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZQotICAgZW50aXJlIHVuY29tcHJlc3NlZCBkYXRhLiAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZQotICAgYmVlbiBzYXZlZCBwcmV2aW91c2x5IGJ5IHRoZSBjb21wcmVzc29yIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgZGVjb21wcmVzc29yCi0gICBieSBzb21lIG1lY2hhbmlzbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNvbXByZXNzaW9uIGxpYnJhcnkuKQotICAgVXBvbiBleGl0LCBkZXN0TGVuIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBidWZmZXIuCi0gICAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGVjb21wcmVzcyBhIHdob2xlIGZpbGUgYXQgb25jZSBpZiB0aGUKLSAgIGlucHV0IGZpbGUgaXMgbW1hcCdlZC4KKyAgIHRoZSBieXRlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gIFVwb24gZW50cnksIGRlc3RMZW4gaXMgdGhlIHRvdGFsIHNpemUKKyAgIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIHdoaWNoIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIGVudGlyZQorICAgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG11c3QgaGF2ZSBiZWVuIHNhdmVkCisgICBwcmV2aW91c2x5IGJ5IHRoZSBjb21wcmVzc29yIGFuZCB0cmFuc21pdHRlZCB0byB0aGUgZGVjb21wcmVzc29yIGJ5IHNvbWUKKyAgIG1lY2hhbmlzbSBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGNvbXByZXNzaW9uIGxpYnJhcnkuKSBVcG9uIGV4aXQsIGRlc3RMZW4KKyAgIGlzIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgdW5jb21wcmVzc2VkIGJ1ZmZlci4KIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKQEAgLTEwNjMsMTM2ICsxMTUzLDE5OSBAQAogKi8KIAogCi10eXBlZGVmIHZvaWRwIGd6RmlsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAKLVpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuICBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwogLyoKLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKSBidXQgY2FuIGFsc28gaW5jbHVkZSBhIGNvbXByZXNzaW9uIGxldmVsCi0gICAoIndiOSIpIG9yIGEgc3RyYXRlZ3k6ICdmJyBmb3IgZmlsdGVyZWQgZGF0YSBhcyBpbiAid2I2ZiIsICdoJyBmb3IKLSAgIEh1ZmZtYW4gb25seSBjb21wcmVzc2lvbiBhcyBpbiAid2IxaCIsIG9yICdSJyBmb3IgcnVuLWxlbmd0aCBlbmNvZGluZwotICAgYXMgaW4gIndiMVIiLiAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAgIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKQorICAgICBUaGlzIGxpYnJhcnkgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBmaWxlcyBpbiBnemlwICguZ3opIGZvcm1hdCB3aXRoCisgICBhbiBpbnRlcmZhY2Ugc2ltaWxhciB0byB0aGF0IG9mIHN0ZGlvLCB1c2luZyB0aGUgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aAorICAgImd6Ii4gIFRoZSBnemlwIGZvcm1hdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgemxpYiBmb3JtYXQuICBnemlwIGlzIGEgZ3ppcAorICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KKyovCisKK3R5cGVkZWYgdm9pZHAgZ3pGaWxlOyAgICAgICAvKiBvcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KKworLyoKK1pFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIE9GKChjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICptb2RlKSk7CisKKyAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gIFRoZSBtb2RlIHBhcmFtZXRlciBpcyBhcworICAgaW4gZm9wZW4gKCJyYiIgb3IgIndiIikgYnV0IGNhbiBhbHNvIGluY2x1ZGUgYSBjb21wcmVzc2lvbiBsZXZlbCAoIndiOSIpIG9yCisgICBhIHN0cmF0ZWd5OiAnZicgZm9yIGZpbHRlcmVkIGRhdGEgYXMgaW4gIndiNmYiLCAnaCcgZm9yIEh1ZmZtYW4tb25seQorICAgY29tcHJlc3Npb24gYXMgaW4gIndiMWgiLCAnUicgZm9yIHJ1bi1sZW5ndGggZW5jb2RpbmcgYXMgaW4gIndiMVIiLCBvciAnRicKKyAgIGZvciBmaXhlZCBjb2RlIGNvbXByZXNzaW9uIGFzIGluICJ3YjlGIi4gIChTZWUgdGhlIGRlc2NyaXB0aW9uIG9mCisgICBkZWZsYXRlSW5pdDIgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0cmF0ZWd5IHBhcmFtZXRlci4pIEFsc28gImEiCisgICBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mICJ3IiB0byByZXF1ZXN0IHRoYXQgdGhlIGd6aXAgc3RyZWFtIHRoYXQgd2lsbCBiZQorICAgd3JpdHRlbiBiZSBhcHBlbmRlZCB0byB0aGUgZmlsZS4gICIrIiB3aWxsIHJlc3VsdCBpbiBhbiBlcnJvciwgc2luY2UgcmVhZGluZworICAgYW5kIHdyaXRpbmcgdG8gdGhlIHNhbWUgZ3ppcCBmaWxlIGlzIG5vdCBzdXBwb3J0ZWQuCiAKICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdDsgaW4gdGhpcwogICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgogCi0gICAgIGd6b3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlIGZpbGUgY291bGQgbm90IGJlIG9wZW5lZCBvciBpZiB0aGVyZSB3YXMKLSAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZTsgZXJybm8KLSAgIGNhbiBiZSBjaGVja2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gY2FzZXMgKGlmIGVycm5vIGlzIHplcm8sIHRoZQotICAgemxpYiBlcnJvciBpcyBaX01FTV9FUlJPUikuICAqLworICAgICBnem9wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQsIGlmIHRoZXJlIHdhcworICAgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUgZ3pGaWxlIHN0YXRlLCBvciBpZiBhbiBpbnZhbGlkIG1vZGUgd2FzCisgICBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdCBwcm92aWRlZCwgb3IgJysnIHdhcyBwcm92aWRlZCkuCisgICBlcnJubyBjYW4gYmUgY2hlY2tlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHJlYXNvbiBnem9wZW4gZmFpbGVkIHdhcyB0aGF0IHRoZQorICAgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLgorKi8KIAotWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnemRvcGVuICBPRigoaW50IGZkLCBjb25zdCBjaGFyICptb2RlKSk7CitaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gT0YoKGludCBmZCwgY29uc3QgY2hhciAqbW9kZSkpOwogLyoKLSAgICAgZ3pkb3BlbigpIGFzc29jaWF0ZXMgYSBnekZpbGUgd2l0aCB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLiAgRmlsZQotICAgZGVzY3JpcHRvcnMgYXJlIG9idGFpbmVkIGZyb20gY2FsbHMgbGlrZSBvcGVuLCBkdXAsIGNyZWF0LCBwaXBlIG9yCi0gICBmaWxlbm8gKGluIHRoZSBmaWxlIGhhcyBiZWVuIHByZXZpb3VzbHkgb3BlbmVkIHdpdGggZm9wZW4pLgotICAgVGhlIG1vZGUgcGFyYW1ldGVyIGlzIGFzIGluIGd6b3Blbi4KLSAgICAgVGhlIG5leHQgY2FsbCBvZiBnemNsb3NlIG9uIHRoZSByZXR1cm5lZCBnekZpbGUgd2lsbCBhbHNvIGNsb3NlIHRoZQotICAgZmlsZSBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCksIG1vZGUpIGNsb3NlcyB0aGUgZmlsZQotICAgZGVzY3JpcHRvciBmZC4gSWYgeW91IHdhbnQgdG8ga2VlcCBmZCBvcGVuLCB1c2UgZ3pkb3BlbihkdXAoZmQpLCBtb2RlKS4KLSAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUKLSAgIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuCisgICAgIGd6ZG9wZW4gYXNzb2NpYXRlcyBhIGd6RmlsZSB3aXRoIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuICBGaWxlIGRlc2NyaXB0b3JzCisgICBhcmUgb2J0YWluZWQgZnJvbSBjYWxscyBsaWtlIG9wZW4sIGR1cCwgY3JlYXQsIHBpcGUgb3IgZmlsZW5vIChpZiB0aGUgZmlsZQorICAgaGFzIGJlZW4gcHJldmlvdXNseSBvcGVuZWQgd2l0aCBmb3BlbikuICBUaGUgbW9kZSBwYXJhbWV0ZXIgaXMgYXMgaW4gZ3pvcGVuLgorCisgICAgIFRoZSBuZXh0IGNhbGwgb2YgZ3pjbG9zZSBvbiB0aGUgcmV0dXJuZWQgZ3pGaWxlIHdpbGwgYWxzbyBjbG9zZSB0aGUgZmlsZQorICAgZGVzY3JpcHRvciBmZCwganVzdCBsaWtlIGZjbG9zZShmZG9wZW4oZmQsIG1vZGUpKSBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgZmQuICBJZiB5b3Ugd2FudCB0byBrZWVwIGZkIG9wZW4sIHVzZSBmZCA9IGR1cChmZF9rZWVwKTsgZ3ogPSBnemRvcGVuKGZkLAorICAgbW9kZSk7LiAgVGhlIGR1cGxpY2F0ZWQgZGVzY3JpcHRvciBzaG91bGQgYmUgc2F2ZWQgdG8gYXZvaWQgYSBsZWFrLCBzaW5jZQorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4KKworICAgICBnemRvcGVuIHJldHVybnMgTlVMTCBpZiB0aGVyZSB3YXMgaW5zdWZmaWNpZW50IG1lbW9yeSB0byBhbGxvY2F0ZSB0aGUKKyAgIGd6RmlsZSBzdGF0ZSwgaWYgYW4gaW52YWxpZCBtb2RlIHdhcyBzcGVjaWZpZWQgKGFuICdyJywgJ3cnLCBvciAnYScgd2FzIG5vdAorICAgcHJvdmlkZWQsIG9yICcrJyB3YXMgcHJvdmlkZWQpLCBvciBpZiBmZCBpcyAtMS4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgbm90CisgICB1c2VkIHVudGlsIHRoZSBuZXh0IGd6KiByZWFkLCB3cml0ZSwgc2Vlaywgb3IgY2xvc2Ugb3BlcmF0aW9uLCBzbyBnemRvcGVuCisgICB3aWxsIG5vdCBkZXRlY3QgaWYgZmQgaXMgaW52YWxpZCAodW5sZXNzIGZkIGlzIC0xKS4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pidWZmZXIgT0YoKGd6RmlsZSBmaWxlLCB1bnNpZ25lZCBzaXplKSk7CisvKgorICAgICBTZXQgdGhlIGludGVybmFsIGJ1ZmZlciBzaXplIHVzZWQgYnkgdGhpcyBsaWJyYXJ5J3MgZnVuY3Rpb25zLiAgVGhlCisgICBkZWZhdWx0IGJ1ZmZlciBzaXplIGlzIDgxOTIgYnl0ZXMuICBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyCisgICBnem9wZW4oKSBvciBnemRvcGVuKCksIGFuZCBiZWZvcmUgYW55IG90aGVyIGNhbGxzIHRoYXQgcmVhZCBvciB3cml0ZSB0aGUKKyAgIGZpbGUuICBUaGUgYnVmZmVyIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGFsd2F5cyBkZWZlcnJlZCB0byB0aGUgZmlyc3QgcmVhZCBvcgorICAgd3JpdGUuICBUd28gYnVmZmVycyBhcmUgYWxsb2NhdGVkLCBlaXRoZXIgYm90aCBvZiB0aGUgc3BlY2lmaWVkIHNpemUgd2hlbgorICAgd3JpdGluZywgb3Igb25lIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhbmQgdGhlIG90aGVyIHR3aWNlIHRoYXQgc2l6ZSB3aGVuCisgICByZWFkaW5nLiAgQSBsYXJnZXIgYnVmZmVyIHNpemUgb2YsIGZvciBleGFtcGxlLCA2NEsgb3IgMTI4SyBieXRlcyB3aWxsCisgICBub3RpY2VhYmx5IGluY3JlYXNlIHRoZSBzcGVlZCBvZiBkZWNvbXByZXNzaW9uIChyZWFkaW5nKS4KKworICAgICBUaGUgbmV3IGJ1ZmZlciBzaXplIGFsc28gYWZmZWN0cyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIGd6cHJpbnRmKCkuCisKKyAgICAgZ3pidWZmZXIoKSByZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZSwgc3VjaCBhcyBiZWluZyBjYWxsZWQKKyAgIHRvbyBsYXRlLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenNldHBhcmFtcyBPRigoZ3pGaWxlIGZpbGUsIGludCBsZXZlbCwgaW50IHN0cmF0ZWd5KSk7CiAvKgotICAgICBEeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbXByZXNzaW9uIGxldmVsIG9yIHN0cmF0ZWd5LiBTZWUgdGhlIGRlc2NyaXB0aW9uCisgICAgIER5bmFtaWNhbGx5IHVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgb3Igc3RyYXRlZ3kuICBTZWUgdGhlIGRlc2NyaXB0aW9uCiAgICBvZiBkZWZsYXRlSW5pdDIgZm9yIHRoZSBtZWFuaW5nIG9mIHRoZXNlIHBhcmFtZXRlcnMuCisKICAgICAgZ3pzZXRwYXJhbXMgcmV0dXJucyBaX09LIGlmIHN1Y2Nlc3MsIG9yIFpfU1RSRUFNX0VSUk9SIGlmIHRoZSBmaWxlIHdhcyBub3QKICAgIG9wZW5lZCBmb3Igd3JpdGluZy4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pyZWFkICBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGd6cmVhZCBPRigoZ3pGaWxlIGZpbGUsIHZvaWRwIGJ1ZiwgdW5zaWduZWQgbGVuKSk7CiAvKgotICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBJZiB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIKLSAgIG9mIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KLSAgICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCAoMCBmb3IKLSAgIGVuZCBvZiBmaWxlLCAtMSBmb3IgZXJyb3IpLiAqLworICAgICBSZWFkcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuICBJZgorICAgdGhlIGlucHV0IGZpbGUgd2FzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIuCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3p3cml0ZSBPRigoZ3pGaWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWRwYyBidWYsIHVuc2lnbmVkIGxlbikpOwotLyoKLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuCi0gICAoMCBpbiBjYXNlIG9mIGVycm9yKS4KKyAgICAgQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGluIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgY29udGludWUKKyAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0sIG9yIGZhaWxpbmcgdGhhdCwgcmVhZGluZyB0aGUgcmVzdAorICAgb2YgdGhlIGlucHV0IGZpbGUgZGlyZWN0bHkgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgVGhlIGVudGlyZSBpbnB1dCBmaWxlCisgICB3aWxsIGJlIHJlYWQgaWYgZ3pyZWFkIGlzIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIGxlc3MgdGhhbiB0aGUgcmVxdWVzdGVkCisgICBsZW4uCisKKyAgICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgYWN0dWFsbHkgcmVhZCwgbGVzcyB0aGFuCisgICBsZW4gZm9yIGVuZCBvZiBmaWxlLCBvciAtMSBmb3IgZXJyb3IuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUVkEgICBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CitaRVhURVJOIGludCBaRVhQT1JUIGd6d3JpdGUgT0YoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkcGMgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCi0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuICBUaGUgbnVtYmVyIG9mCi0gICB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBpcyBsaW1pdGVkIHRvIDQwOTUuIFRoZSBjYWxsZXIgc2hvdWxkIGFzc3VyZSB0aGF0Ci0gICB0aGlzIGxpbWl0IGlzIG5vdCBleGNlZWRlZC4gSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4gZ3pwcmludGYoKSB3aWxsIHJldHVybgotICAgcmV0dXJuIGFuIGVycm9yICgwKSB3aXRoIG5vdGhpbmcgd3JpdHRlbi4gSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhCi0gICBidWZmZXIgb3ZlcmZsb3cgd2l0aCB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZgotICAgemxpYiB3YXMgY29tcGlsZWQgd2l0aCB0aGUgaW5zZWN1cmUgZnVuY3Rpb25zIHNwcmludGYoKSBvciB2c3ByaW50ZigpCi0gICBiZWNhdXNlIHRoZSBzZWN1cmUgc25wcmludGYoKSBvciB2c25wcmludGYoKSBmdW5jdGlvbnMgd2VyZSBub3QgYXZhaWxhYmxlLgorICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLgorICAgZ3p3cml0ZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIHdyaXR0ZW4gb3IgMCBpbiBjYXNlIG9mCisgICBlcnJvci4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisvKgorICAgICBDb252ZXJ0cywgZm9ybWF0cywgYW5kIHdyaXRlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKKyAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuICBnenByaW50ZiByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAgIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSB3cml0dGVuLCBvciAwIGluIGNhc2Ugb2YgZXJyb3IuICBUaGUgbnVtYmVyIG9mCisgICB1bmNvbXByZXNzZWQgYnl0ZXMgd3JpdHRlbiBpcyBsaW1pdGVkIHRvIDgxOTEsIG9yIG9uZSBsZXNzIHRoYW4gdGhlIGJ1ZmZlcgorICAgc2l6ZSBnaXZlbiB0byBnemJ1ZmZlcigpLiAgVGhlIGNhbGxlciBzaG91bGQgYXNzdXJlIHRoYXQgdGhpcyBsaW1pdCBpcyBub3QKKyAgIGV4Y2VlZGVkLiAgSWYgaXQgaXMgZXhjZWVkZWQsIHRoZW4gZ3pwcmludGYoKSB3aWxsIHJldHVybiBhbiBlcnJvciAoMCkgd2l0aAorICAgbm90aGluZyB3cml0dGVuLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYWxzbyBiZSBhIGJ1ZmZlciBvdmVyZmxvdyB3aXRoCisgICB1bnByZWRpY3RhYmxlIGNvbnNlcXVlbmNlcywgd2hpY2ggaXMgcG9zc2libGUgb25seSBpZiB6bGliIHdhcyBjb21waWxlZCB3aXRoCisgICB0aGUgaW5zZWN1cmUgZnVuY3Rpb25zIHNwcmludGYoKSBvciB2c3ByaW50ZigpIGJlY2F1c2UgdGhlIHNlY3VyZSBzbnByaW50ZigpCisgICBvciB2c25wcmludGYoKSBmdW5jdGlvbnMgd2VyZSBub3QgYXZhaWxhYmxlLiAgVGhpcyBjYW4gYmUgZGV0ZXJtaW5lZCB1c2luZworICAgemxpYkNvbXBpbGVGbGFncygpLgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenB1dHMgT0YoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpzKSk7CiAvKgotICAgICAgV3JpdGVzIHRoZSBnaXZlbiBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUsIGV4Y2x1ZGluZworICAgICBXcml0ZXMgdGhlIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcgdG8gdGhlIGNvbXByZXNzZWQgZmlsZSwgZXhjbHVkaW5nCiAgICB0aGUgdGVybWluYXRpbmcgbnVsbCBjaGFyYWN0ZXIuCi0gICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KKworICAgICBnenB1dHMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KICovCiAKIFpFWFRFUk4gY2hhciAqIFpFWFBPUlQgZ3pnZXRzIE9GKChnekZpbGUgZmlsZSwgY2hhciAqYnVmLCBpbnQgbGVuKSk7CiAvKgotICAgICAgUmVhZHMgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlIHVudGlsIGxlbi0xIGNoYXJhY3RlcnMgYXJlIHJlYWQsIG9yCi0gICBhIG5ld2xpbmUgY2hhcmFjdGVyIGlzIHJlYWQgYW5kIHRyYW5zZmVycmVkIHRvIGJ1Ziwgb3IgYW4gZW5kLW9mLWZpbGUKLSAgIGNvbmRpdGlvbiBpcyBlbmNvdW50ZXJlZC4gIFRoZSBzdHJpbmcgaXMgdGhlbiB0ZXJtaW5hdGVkIHdpdGggYSBudWxsCi0gICBjaGFyYWN0ZXIuCi0gICAgICBnemdldHMgcmV0dXJucyBidWYsIG9yIFpfTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICAgICBSZWFkcyBieXRlcyBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUgdW50aWwgbGVuLTEgY2hhcmFjdGVycyBhcmUgcmVhZCwgb3IgYQorICAgbmV3bGluZSBjaGFyYWN0ZXIgaXMgcmVhZCBhbmQgdHJhbnNmZXJyZWQgdG8gYnVmLCBvciBhbiBlbmQtb2YtZmlsZQorICAgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLiAgSWYgYW55IGNoYXJhY3RlcnMgYXJlIHJlYWQgb3IgaWYgbGVuID09IDEsIHRoZQorICAgc3RyaW5nIGlzIHRlcm1pbmF0ZWQgd2l0aCBhIG51bGwgY2hhcmFjdGVyLiAgSWYgbm8gY2hhcmFjdGVycyBhcmUgcmVhZCBkdWUKKyAgIHRvIGFuIGVuZC1vZi1maWxlIG9yIGxlbiA8IDEsIHRoZW4gdGhlIGJ1ZmZlciBpcyBsZWZ0IHVudG91Y2hlZC4KKworICAgICBnemdldHMgcmV0dXJucyBidWYgd2hpY2ggaXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLCBvciBpdCByZXR1cm5zIE5VTEwKKyAgIGZvciBlbmQtb2YtZmlsZSBvciBpbiBjYXNlIG9mIGVycm9yLiAgSWYgdGhlcmUgd2FzIGFuIGVycm9yLCB0aGUgY29udGVudHMgYXQKKyAgIGJ1ZiBhcmUgaW5kZXRlcm1pbmF0ZS4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pwdXRjIE9GKChnekZpbGUgZmlsZSwgaW50IGMpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pwdXRjIE9GKChnekZpbGUgZmlsZSwgaW50IGMpKTsKIC8qCi0gICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6cHV0YyByZXR1cm5zIHRoZSB2YWx1ZSB0aGF0IHdhcyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgorICAgICBXcml0ZXMgYywgY29udmVydGVkIHRvIGFuIHVuc2lnbmVkIGNoYXIsIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6cHV0YworICAgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemdldGMgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiBnemdldGMgcmV0dXJucyB0aGlzIGJ5dGUKLSAgIG9yIC0xIGluIGNhc2Ugb2YgZW5kIG9mIGZpbGUgb3IgZXJyb3IuCisgICAgIFJlYWRzIG9uZSBieXRlIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZSBvciAtMQorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3p1bmdldGMgT0YoKGludCBjLCBnekZpbGUgZmlsZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICAgUHVzaCBvbmUgY2hhcmFjdGVyIGJhY2sgb250byB0aGUgc3RyZWFtIHRvIGJlIHJlYWQgYWdhaW4gbGF0ZXIuCi0gICBPbmx5IG9uZSBjaGFyYWN0ZXIgb2YgcHVzaC1iYWNrIGlzIGFsbG93ZWQuICBnenVuZ2V0YygpIHJldHVybnMgdGhlCi0gICBjaGFyYWN0ZXIgcHVzaGVkLCBvciAtMSBvbiBmYWlsdXJlLiAgZ3p1bmdldGMoKSB3aWxsIGZhaWwgaWYgYQotICAgY2hhcmFjdGVyIGhhcyBiZWVuIHB1c2hlZCBidXQgbm90IHJlYWQgeWV0LCBvciBpZiBjIGlzIC0xLiBUaGUgcHVzaGVkCi0gICBjaGFyYWN0ZXIgd2lsbCBiZSBkaXNjYXJkZWQgaWYgdGhlIHN0cmVhbSBpcyByZXBvc2l0aW9uZWQgd2l0aCBnenNlZWsoKQotICAgb3IgZ3pyZXdpbmQoKS4KKyAgICAgUHVzaCBvbmUgY2hhcmFjdGVyIGJhY2sgb250byB0aGUgc3RyZWFtIHRvIGJlIHJlYWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgb24gdGhlIG5leHQgcmVhZC4gIEF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgb2YgcHVzaC1iYWNrIGlzIGFsbG93ZWQuCisgICBnenVuZ2V0YygpIHJldHVybnMgdGhlIGNoYXJhY3RlciBwdXNoZWQsIG9yIC0xIG9uIGZhaWx1cmUuICBnenVuZ2V0YygpIHdpbGwKKyAgIGZhaWwgaWYgYyBpcyAtMSwgYW5kIG1heSBmYWlsIGlmIGEgY2hhcmFjdGVyIGhhcyBiZWVuIHB1c2hlZCBidXQgbm90IHJlYWQKKyAgIHlldC4gIElmIGd6dW5nZXRjIGlzIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZ3pvcGVuIG9yIGd6ZG9wZW4sIGF0IGxlYXN0IHRoZQorICAgb3V0cHV0IGJ1ZmZlciBzaXplIG9mIHB1c2hlZCBjaGFyYWN0ZXJzIGlzIGFsbG93ZWQuICAoU2VlIGd6YnVmZmVyIGFib3ZlLikKKyAgIFRoZSBwdXNoZWQgY2hhcmFjdGVyIHdpbGwgYmUgZGlzY2FyZGVkIGlmIHRoZSBzdHJlYW0gaXMgcmVwb3NpdGlvbmVkIHdpdGgKKyAgIGd6c2VlaygpIG9yIGd6cmV3aW5kKCkuCiAqLwogCi1aRVhURVJOIGludCBaRVhQT1JUICAgIGd6Zmx1c2ggT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pmbHVzaCBPRigoZ3pGaWxlIGZpbGUsIGludCBmbHVzaCkpOwogLyoKLSAgICAgRmx1c2hlcyBhbGwgcGVuZGluZyBvdXRwdXQgaW50byB0aGUgY29tcHJlc3NlZCBmaWxlLiBUaGUgcGFyYW1ldGVyCi0gICBmbHVzaCBpcyBhcyBpbiB0aGUgZGVmbGF0ZSgpIGZ1bmN0aW9uLiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB6bGliCi0gICBlcnJvciBudW1iZXIgKHNlZSBmdW5jdGlvbiBnemVycm9yIGJlbG93KS4gZ3pmbHVzaCByZXR1cm5zIFpfT0sgaWYKLSAgIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaXMgWl9GSU5JU0ggYW5kIGFsbCBvdXRwdXQgY291bGQgYmUgZmx1c2hlZC4KLSAgICAgZ3pmbHVzaCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSBpdCBjYW4KLSAgIGRlZ3JhZGUgY29tcHJlc3Npb24uCisgICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4gIFRoZSBwYXJhbWV0ZXIgZmx1c2gKKyAgIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSB6bGliIGVycm9yIG51bWJlcgorICAgKHNlZSBmdW5jdGlvbiBnemVycm9yIGJlbG93KS4gIGd6Zmx1c2ggaXMgb25seSBwZXJtaXR0ZWQgd2hlbiB3cml0aW5nLgorCisgICAgIElmIHRoZSBmbHVzaCBwYXJhbWV0ZXIgaXMgWl9GSU5JU0gsIHRoZSByZW1haW5pbmcgZGF0YSBpcyB3cml0dGVuIGFuZCB0aGUKKyAgIGd6aXAgc3RyZWFtIGlzIGNvbXBsZXRlZCBpbiB0aGUgb3V0cHV0LiAgSWYgZ3p3cml0ZSgpIGlzIGNhbGxlZCBhZ2FpbiwgYSBuZXcKKyAgIGd6aXAgc3RyZWFtIHdpbGwgYmUgc3RhcnRlZCBpbiB0aGUgb3V0cHV0LiAgZ3pyZWFkKCkgaXMgYWJsZSB0byByZWFkIHN1Y2gKKyAgIGNvbmNhdGVudGVkIGd6aXAgc3RyZWFtcy4KKworICAgICBnemZsdXNoIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIHN0cmljdGx5IG5lY2Vzc2FyeSBiZWNhdXNlIGl0IHdpbGwKKyAgIGRlZ3JhZGUgY29tcHJlc3Npb24gaWYgY2FsbGVkIHRvbyBvZnRlbi4KICovCiAKLVpFWFRFUk4gel9vZmZfdCBaRVhQT1JUICAgIGd6c2VlayBPRigoZ3pGaWxlIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKSk7CiAvKgotICAgICAgU2V0cyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGUgb2Zmc2V0IHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uIFRoZSB3aGVuY2UgcGFyYW1ldGVyIGlzIGRlZmluZWQgYXMgaW4gbHNlZWsoMik7CitaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenNlZWsgT0YoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X29mZl90IG9mZnNldCwgaW50IHdoZW5jZSkpOworCisgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KKyAgIGNvbXByZXNzZWQgZmlsZS4gIFRoZSBvZmZzZXQgcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKKyAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4gIFRoZSB3aGVuY2UgcGFyYW1ldGVyIGlzIGRlZmluZWQgYXMgaW4gbHNlZWsoMik7CiAgICB0aGUgdmFsdWUgU0VFS19FTkQgaXMgbm90IHN1cHBvcnRlZC4KKwogICAgICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHJlYWRpbmcsIHRoaXMgZnVuY3Rpb24gaXMgZW11bGF0ZWQgYnV0IGNhbiBiZQotICAgZXh0cmVtZWx5IHNsb3cuIElmIHRoZSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZywgb25seSBmb3J3YXJkIHNlZWtzIGFyZQorICAgZXh0cmVtZWx5IHNsb3cuICBJZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcsIG9ubHkgZm9yd2FyZCBzZWVrcyBhcmUKICAgIHN1cHBvcnRlZDsgZ3pzZWVrIHRoZW4gY29tcHJlc3NlcyBhIHNlcXVlbmNlIG9mIHplcm9lcyB1cCB0byB0aGUgbmV3CiAgICBzdGFydGluZyBwb3NpdGlvbi4KIAotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQorICAgICBnenNlZWsgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9mZnNldCBsb2NhdGlvbiBhcyBtZWFzdXJlZCBpbiBieXRlcyBmcm9tCiAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSB1bmNvbXByZXNzZWQgc3RyZWFtLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCBpbgogICAgcGFydGljdWxhciBpZiB0aGUgZmlsZSBpcyBvcGVuZWQgZm9yIHdyaXRpbmcgYW5kIHRoZSBuZXcgc3RhcnRpbmcgcG9zaXRpb24KICAgIHdvdWxkIGJlIGJlZm9yZSB0aGUgY3VycmVudCBwb3NpdGlvbi4KQEAgLTEyMDIsNjggKzEzNTUsMTI3IEBACiAvKgogICAgICBSZXdpbmRzIHRoZSBnaXZlbiBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IGZvciByZWFkaW5nLgogCi0gICBnenJld2luZChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIChpbnQpZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX1NFVCkKKyAgICAgZ3pyZXdpbmQoZmlsZSkgaXMgZXF1aXZhbGVudCB0byAoaW50KWd6c2VlayhmaWxlLCAwTCwgU0VFS19TRVQpCiAqLwogCi1aRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCAgICBnenRlbGwgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICBSZXR1cm5zIHRoZSBzdGFydGluZyBwb3NpdGlvbiBmb3IgdGhlIG5leHQgZ3pyZWFkIG9yIGd6d3JpdGUgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIFRoaXMgcG9zaXRpb24gcmVwcmVzZW50cyBhIG51bWJlciBvZiBieXRlcyBpbiB0aGUKLSAgIHVuY29tcHJlc3NlZCBkYXRhIHN0cmVhbS4KK1pFWFRFUk4gel9vZmZfdCBaRVhQT1JUICAgIGd6dGVsbCBPRigoZ3pGaWxlIGZpbGUpKTsKIAotICAgZ3p0ZWxsKGZpbGUpIGlzIGVxdWl2YWxlbnQgdG8gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUikKKyAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZSBnaXZlbgorICAgY29tcHJlc3NlZCBmaWxlLiAgVGhpcyBwb3NpdGlvbiByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQorICAgdW5jb21wcmVzc2VkIGRhdGEgc3RyZWFtLCBhbmQgaXMgemVybyB3aGVuIHN0YXJ0aW5nLCBldmVuIGlmIGFwcGVuZGluZyBvcgorICAgcmVhZGluZyBhIGd6aXAgc3RyZWFtIGZyb20gdGhlIG1pZGRsZSBvZiBhIGZpbGUgdXNpbmcgZ3pkb3BlbigpLgorCisgICAgIGd6dGVsbChmaWxlKSBpcyBlcXVpdmFsZW50IHRvIGd6c2VlayhmaWxlLCAwTCwgU0VFS19DVVIpCisqLworCisvKgorWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQgT0YoKGd6RmlsZSBmaWxlKSk7CisKKyAgICAgUmV0dXJucyB0aGUgY3VycmVudCBvZmZzZXQgaW4gdGhlIGZpbGUgYmVpbmcgcmVhZCBvciB3cml0dGVuLiAgVGhpcyBvZmZzZXQKKyAgIGluY2x1ZGVzIHRoZSBjb3VudCBvZiBieXRlcyB0aGF0IHByZWNlZGUgdGhlIGd6aXAgc3RyZWFtLCBmb3IgZXhhbXBsZSB3aGVuCisgICBhcHBlbmRpbmcgb3Igd2hlbiB1c2luZyBnemRvcGVuKCkgZm9yIHJlYWRpbmcuICBXaGVuIHJlYWRpbmcsIHRoZSBvZmZzZXQKKyAgIGRvZXMgbm90IGluY2x1ZGUgYXMgeWV0IHVudXNlZCBidWZmZXJlZCBpbnB1dC4gIFRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIHVzZWQKKyAgIGZvciBhIHByb2dyZXNzIGluZGljYXRvci4gIE9uIGVycm9yLCBnem9mZnNldCgpIHJldHVybnMgLTEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6ZW9mIE9GKChnekZpbGUgZmlsZSkpOwogLyoKLSAgICAgUmV0dXJucyAxIHdoZW4gRU9GIGhhcyBwcmV2aW91c2x5IGJlZW4gZGV0ZWN0ZWQgcmVhZGluZyB0aGUgZ2l2ZW4KLSAgIGlucHV0IHN0cmVhbSwgb3RoZXJ3aXNlIHplcm8uCisgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBoYXMgYmVlbiBzZXQgd2hpbGUgcmVhZGluZywKKyAgIGZhbHNlICgwKSBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBpcyBzZXQgb25seSBpZiB0aGUKKyAgIHJlYWQgdHJpZWQgdG8gZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgYnV0IGNhbWUgdXAgc2hvcnQuICBUaGVyZWZvcmUsCisgICBqdXN0IGxpa2UgZmVvZigpLCBnemVvZigpIG1heSByZXR1cm4gZmFsc2UgZXZlbiBpZiB0aGVyZSBpcyBubyBtb3JlIGRhdGEgdG8KKyAgIHJlYWQsIGluIHRoZSBldmVudCB0aGF0IHRoZSBsYXN0IHJlYWQgcmVxdWVzdCB3YXMgZm9yIHRoZSBleGFjdCBudW1iZXIgb2YKKyAgIGJ5dGVzIHJlbWFpbmluZyBpbiB0aGUgaW5wdXQgZmlsZS4gIFRoaXMgd2lsbCBoYXBwZW4gaWYgdGhlIGlucHV0IGZpbGUgc2l6ZQorICAgaXMgYW4gZXhhY3QgbXVsdGlwbGUgb2YgdGhlIGJ1ZmZlciBzaXplLgorCisgICAgIElmIGd6ZW9mKCkgcmV0dXJucyB0cnVlLCB0aGVuIHRoZSByZWFkIGZ1bmN0aW9ucyB3aWxsIHJldHVybiBubyBtb3JlIGRhdGEsCisgICB1bmxlc3MgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBpcyByZXNldCBieSBnemNsZWFyZXJyKCkgYW5kIHRoZSBpbnB1dCBmaWxlCisgICBoYXMgZ3Jvd24gc2luY2UgdGhlIHByZXZpb3VzIGVuZCBvZiBmaWxlIHdhcyBkZXRlY3RlZC4KICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pkaXJlY3QgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICBSZXR1cm5zIDEgaWYgZmlsZSBpcyBiZWluZyByZWFkIGRpcmVjdGx5IHdpdGhvdXQgZGVjb21wcmVzc2lvbiwgb3RoZXJ3aXNlCi0gICB6ZXJvLgorICAgICBSZXR1cm5zIHRydWUgKDEpIGlmIGZpbGUgaXMgYmVpbmcgY29waWVkIGRpcmVjdGx5IHdoaWxlIHJlYWRpbmcsIG9yIGZhbHNlCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4gIFRoaXMgc3RhdGUgY2FuIGNoYW5nZSBmcm9tCisgICBmYWxzZSB0byB0cnVlIHdoaWxlIHJlYWRpbmcgdGhlIGlucHV0IGZpbGUgaWYgdGhlIGVuZCBvZiBhIGd6aXAgc3RyZWFtIGlzCisgICByZWFjaGVkLCBidXQgaXMgZm9sbG93ZWQgYnkgZGF0YSB0aGF0IGlzIG5vdCBhbm90aGVyIGd6aXAgc3RyZWFtLgorCisgICAgIElmIHRoZSBpbnB1dCBmaWxlIGlzIGVtcHR5LCBnemRpcmVjdCgpIHdpbGwgcmV0dXJuIHRydWUsIHNpbmNlIHRoZSBpbnB1dAorICAgZG9lcyBub3QgY29udGFpbiBhIGd6aXAgc3RyZWFtLgorCisgICAgIElmIGd6ZGlyZWN0KCkgaXMgdXNlZCBpbW1lZGlhdGVseSBhZnRlciBnem9wZW4oKSBvciBnemRvcGVuKCkgaXQgd2lsbAorICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKKyAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKKyAgIGd6ZGlyZWN0KCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUICAgIGd6Y2xvc2UgT0YoKGd6RmlsZSBmaWxlKSk7CiAvKgotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlCi0gICBhbmQgZGVhbGxvY2F0ZXMgYWxsIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGUuIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHpsaWIKLSAgIGVycm9yIG51bWJlciAoc2VlIGZ1bmN0aW9uIGd6ZXJyb3IgYmVsb3cpLgorICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpZiBuZWNlc3NhcnksIGNsb3NlcyB0aGUgY29tcHJlc3NlZCBmaWxlIGFuZAorICAgZGVhbGxvY2F0ZXMgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4gIE5vdGUgdGhhdCBvbmNlIGZpbGUgaXMgY2xvc2VkLCB5b3UKKyAgIGNhbm5vdCBjYWxsIGd6ZXJyb3Igd2l0aCBmaWxlLCBzaW5jZSBpdHMgc3RydWN0dXJlcyBoYXZlIGJlZW4gZGVhbGxvY2F0ZWQuCisgICBnemNsb3NlIG11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBmaWxlLCBqdXN0IGFzIGZyZWUKKyAgIG11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBhbGxvY2F0aW9uLgorCisgICAgIGd6Y2xvc2Ugd2lsbCByZXR1cm4gWl9TVFJFQU1fRVJST1IgaWYgZmlsZSBpcyBub3QgdmFsaWQsIFpfRVJSTk8gb24gYQorICAgZmlsZSBvcGVyYXRpb24gZXJyb3IsIG9yIFpfT0sgb24gc3VjY2Vzcy4KKyovCisKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pjbG9zZV9yIE9GKChnekZpbGUgZmlsZSkpOworWkVYVEVSTiBpbnQgWkVYUE9SVCBnemNsb3NlX3cgT0YoKGd6RmlsZSBmaWxlKSk7CisvKgorICAgICBTYW1lIGFzIGd6Y2xvc2UoKSwgYnV0IGd6Y2xvc2VfcigpIGlzIG9ubHkgZm9yIHVzZSB3aGVuIHJlYWRpbmcsIGFuZAorICAgZ3pjbG9zZV93KCkgaXMgb25seSBmb3IgdXNlIHdoZW4gd3JpdGluZyBvciBhcHBlbmRpbmcuICBUaGUgYWR2YW50YWdlIHRvCisgICB1c2luZyB0aGVzZSBpbnN0ZWFkIG9mIGd6Y2xvc2UoKSBpcyB0aGF0IHRoZXkgYXZvaWQgbGlua2luZyBpbiB6bGliCisgICBjb21wcmVzc2lvbiBvciBkZWNvbXByZXNzaW9uIGNvZGUgdGhhdCBpcyBub3QgdXNlZCB3aGVuIG9ubHkgcmVhZGluZyBvciBvbmx5CisgICB3cml0aW5nIHJlc3BlY3RpdmVseS4gIElmIGd6Y2xvc2UoKSBpcyB1c2VkLCB0aGVuIGJvdGggY29tcHJlc3Npb24gYW5kCisgICBkZWNvbXByZXNzaW9uIGNvZGUgd2lsbCBiZSBpbmNsdWRlZCB0aGUgYXBwbGljYXRpb24gd2hlbiBsaW5raW5nIHRvIGEgc3RhdGljCisgICB6bGliIGxpYnJhcnkuCiAqLwogCiBaRVhURVJOIGNvbnN0IGNoYXIgKiBaRVhQT1JUIGd6ZXJyb3IgT0YoKGd6RmlsZSBmaWxlLCBpbnQgKmVycm51bSkpOwogLyoKLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCisgICAgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBsYXN0IGVycm9yIHdoaWNoIG9jY3VycmVkIG9uIHRoZSBnaXZlbgorICAgY29tcHJlc3NlZCBmaWxlLiAgZXJybnVtIGlzIHNldCB0byB6bGliIGVycm9yIG51bWJlci4gIElmIGFuIGVycm9yIG9jY3VycmVkCisgICBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwgZXJybnVtIGlzIHNldCB0bworICAgWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vIHRvIGdldCB0aGUgZXhhY3QgZXJyb3IgY29kZS4KKworICAgICBUaGUgYXBwbGljYXRpb24gbXVzdCBub3QgbW9kaWZ5IHRoZSByZXR1cm5lZCBzdHJpbmcuICBGdXR1cmUgY2FsbHMgdG8KKyAgIHRoaXMgZnVuY3Rpb24gbWF5IGludmFsaWRhdGUgdGhlIHByZXZpb3VzbHkgcmV0dXJuZWQgc3RyaW5nLiAgSWYgZmlsZSBpcworICAgY2xvc2VkLCB0aGVuIHRoZSBzdHJpbmcgcHJldmlvdXNseSByZXR1cm5lZCBieSBnemVycm9yIHdpbGwgbm8gbG9uZ2VyIGJlCisgICBhdmFpbGFibGUuCisKKyAgICAgZ3plcnJvcigpIHNob3VsZCBiZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIGVycm9ycyBmcm9tIGVuZC1vZi1maWxlIGZvciB0aG9zZQorICAgZnVuY3Rpb25zIGFib3ZlIHRoYXQgZG8gbm90IGRpc3Rpbmd1aXNoIHRob3NlIGNhc2VzIGluIHRoZWlyIHJldHVybiB2YWx1ZXMuCiAqLwogCiBaRVhURVJOIHZvaWQgWkVYUE9SVCBnemNsZWFyZXJyIE9GKChnekZpbGUgZmlsZSkpOwogLyoKLSAgICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRoZQotICAgY2xlYXJlcnIoKSBmdW5jdGlvbiBpbiBzdGRpby4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbnRpbnVpbmcgdG8gcmVhZCBhIGd6aXAKKyAgICAgQ2xlYXJzIHRoZSBlcnJvciBhbmQgZW5kLW9mLWZpbGUgZmxhZ3MgZm9yIGZpbGUuICBUaGlzIGlzIGFuYWxvZ291cyB0byB0aGUKKyAgIGNsZWFyZXJyKCkgZnVuY3Rpb24gaW4gc3RkaW8uICBUaGlzIGlzIHVzZWZ1bCBmb3IgY29udGludWluZyB0byByZWFkIGEgZ3ppcAogICAgZmlsZSB0aGF0IGlzIGJlaW5nIHdyaXR0ZW4gY29uY3VycmVudGx5LgogKi8KIAorCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIAogLyoKICAgICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgcmVsYXRlZCB0byBjb21wcmVzc2lvbiBidXQgYXJlIGV4cG9ydGVkCi0gICBhbnl3YXkgYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIHVzZWZ1bCBpbiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlCi0gICBjb21wcmVzc2lvbiBsaWJyYXJ5LgorICAgYW55d2F5IGJlY2F1c2UgdGhleSBtaWdodCBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHVzaW5nIHRoZSBjb21wcmVzc2lvbgorICAgbGlicmFyeS4KICovCiAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyIE9GKCh1TG9uZyBhZGxlciwgY29uc3QgQnl0ZWYgKmJ1ZiwgdUludCBsZW4pKTsKIC8qCiAgICAgIFVwZGF0ZSBhIHJ1bm5pbmcgQWRsZXItMzIgY2hlY2tzdW0gd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQKLSAgIHJldHVybiB0aGUgdXBkYXRlZCBjaGVja3N1bS4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucwotICAgdGhlIHJlcXVpcmVkIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBjaGVja3N1bS4KLSAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKLSAgIG11Y2ggZmFzdGVyLiBVc2FnZSBleGFtcGxlOgorICAgcmV0dXJuIHRoZSB1cGRhdGVkIGNoZWNrc3VtLiAgSWYgYnVmIGlzIFpfTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZQorICAgcmVxdWlyZWQgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNoZWNrc3VtLgorCisgICAgIEFuIEFkbGVyLTMyIGNoZWNrc3VtIGlzIGFsbW9zdCBhcyByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQKKyAgIG11Y2ggZmFzdGVyLgorCisgICBVc2FnZSBleGFtcGxlOgogCiAgICAgIHVMb25nIGFkbGVyID0gYWRsZXIzMigwTCwgWl9OVUxMLCAwKTsKIApAQCAtMTI3Myw5ICsxNDg1LDEwIEBACiAgICAgIGlmIChhZGxlciAhPSBvcmlnaW5hbF9hZGxlcikgZXJyb3IoKTsKICovCiAKKy8qCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZyBhZGxlcjEsIHVMb25nIGFkbGVyMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfb2ZmX3QgbGVuMikpOwotLyoKKwogICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQogICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCiAgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCkBAIC0xMjg1LDkgKzE0OTgsMTEgQEAKIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMiAgIE9GKCh1TG9uZyBjcmMsIGNvbnN0IEJ5dGVmICpidWYsIHVJbnQgbGVuKSk7CiAvKgogICAgICBVcGRhdGUgYSBydW5uaW5nIENSQy0zMiB3aXRoIHRoZSBieXRlcyBidWZbMC4ubGVuLTFdIGFuZCByZXR1cm4gdGhlCi0gICB1cGRhdGVkIENSQy0zMi4gSWYgYnVmIGlzIE5VTEwsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWlyZWQgaW5pdGlhbAotICAgdmFsdWUgZm9yIHRoZSBmb3IgdGhlIGNyYy4gUHJlLSBhbmQgcG9zdC1jb25kaXRpb25pbmcgKG9uZSdzIGNvbXBsZW1lbnQpIGlzCi0gICBwZXJmb3JtZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24gc28gaXQgc2hvdWxkbid0IGJlIGRvbmUgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCisgICBpbml0aWFsIHZhbHVlIGZvciB0aGUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MKKyAgIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUKKyAgIGFwcGxpY2F0aW9uLgorCiAgICBVc2FnZSBleGFtcGxlOgogCiAgICAgIHVMb25nIGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwpAQCAtMTI5OCw5ICsxNTEzLDkgQEAKICAgICAgaWYgKGNyYyAhPSBvcmlnaW5hbF9jcmMpIGVycm9yKCk7CiAqLwogCisvKgogWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmUgT0YoKHVMb25nIGNyYzEsIHVMb25nIGNyYzIsIHpfb2ZmX3QgbGVuMikpOwogCi0vKgogICAgICBDb21iaW5lIHR3byBDUkMtMzIgY2hlY2sgdmFsdWVzIGludG8gb25lLiAgRm9yIHR3byBzZXF1ZW5jZXMgb2YgYnl0ZXMsCiAgICBzZXExIGFuZCBzZXEyIHdpdGggbGVuZ3RocyBsZW4xIGFuZCBsZW4yLCBDUkMtMzIgY2hlY2sgdmFsdWVzIHdlcmUKICAgIGNhbGN1bGF0ZWQgZm9yIGVhY2gsIGNyYzEgYW5kIGNyYzIuICBjcmMzMl9jb21iaW5lKCkgcmV0dXJucyB0aGUgQ1JDLTMyCkBAIC0xMzM5LDE2ICsxNTU0LDU3IEBACiAgICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUJhY2tJbml0KHN0cm0sIHdpbmRvd0JpdHMsIHdpbmRvdykgXAogICAgICAgICBpbmZsYXRlQmFja0luaXRfKChzdHJtKSwgKHdpbmRvd0JpdHMpLCAod2luZG93KSwgXAotICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKIAotCi0jaWYgIWRlZmluZWQoWlVUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKLSAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OyAvKiBoYWNrIGZvciBidWdneSBjb21waWxlcnMgKi8KKy8qIHByb3ZpZGUgNjQtYml0IG9mZnNldCBmdW5jdGlvbnMgaWYgX0xBUkdFRklMRTY0X1NPVVJDRSBkZWZpbmVkLCBhbmQvb3IKKyAqIGNoYW5nZSB0aGUgcmVndWxhciBmdW5jdGlvbnMgdG8gNjQgYml0cyBpZiBfRklMRV9PRkZTRVRfQklUUyBpcyA2NCAoaWYKKyAqIGJvdGggYXJlIHRydWUsIHRoZSBhcHBsaWNhdGlvbiBnZXRzIHRoZSAqNjQgZnVuY3Rpb25zLCBhbmQgdGhlIHJlZ3VsYXIKKyAqIGZ1bmN0aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24gc3lzdGVtcworICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUKKyAqLworI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOworICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGNyYzMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZjY0X3QpKTsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWkxJQl9JTlRFUk5BTCkgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyMgIGRlZmluZSBnem9wZW4gZ3pvcGVuNjQKKyMgIGRlZmluZSBnenNlZWsgZ3pzZWVrNjQKKyMgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgIGRlZmluZSBnem9mZnNldCBnem9mZnNldDY0CisjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lIGFkbGVyMzJfY29tYmluZTY0CisjICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgIGlmZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKKyAgICAgWkVYVEVSTiBnekZpbGUgWkVYUE9SVCBnem9wZW42NCBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pzZWVrNjQgT0YoKGd6RmlsZSwgel9vZmZfdCwgaW50KSk7CisgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6dGVsbDY0IE9GKChnekZpbGUpKTsKKyAgICAgWkVYVEVSTiB6X29mZl90IFpFWFBPUlQgZ3pvZmZzZXQ2NCBPRigoZ3pGaWxlKSk7CisgICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBhZGxlcjMyX2NvbWJpbmU2NCBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworIyAgZW5kaWYKKyNlbHNlCisgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopKTsKKyAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlayBPRigoZ3pGaWxlLCB6X29mZl90LCBpbnQpKTsKKyAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6dGVsbCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnem9mZnNldCBPRigoZ3pGaWxlKSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKKyNlbmRpZgorCisvKiBoYWNrIGZvciBidWdneSBjb21waWxlcnMgKi8KKyNpZiAhZGVmaW5lZChaVVRJTF9IKSAmJiAhZGVmaW5lZChOT19EVU1NWV9ERUNMKQorICAgIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307CisjZW5kaWYKKworLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwotWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCB6KSk7CitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlQgaW5mbGF0ZVN5bmNQb2ludCBPRigoel9zdHJlYW1wKSk7CiBaRVhURVJOIGNvbnN0IHVMb25nZiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSAgICBPRigodm9pZCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVVbmRlcm1pbmUgT0YoKHpfc3RyZWFtcCwgaW50KSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIubWFwIGIvTW9kdWxlcy96bGliL3psaWIubWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyODJkMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKQEAgLTAsMCArMSw2OCBAQAorWkxJQl8xLjIuMCB7CisgIGdsb2JhbDoKKyAgICBjb21wcmVzc0JvdW5kOworICAgIGRlZmxhdGVCb3VuZDsKKyAgICBpbmZsYXRlQmFjazsKKyAgICBpbmZsYXRlQmFja0VuZDsKKyAgICBpbmZsYXRlQmFja0luaXRfOworICAgIGluZmxhdGVDb3B5OworICBsb2NhbDoKKyAgICBkZWZsYXRlX2NvcHlyaWdodDsKKyAgICBpbmZsYXRlX2NvcHlyaWdodDsKKyAgICBpbmZsYXRlX2Zhc3Q7CisgICAgaW5mbGF0ZV90YWJsZTsKKyAgICB6Y2FsbG9jOworICAgIHpjZnJlZTsKKyAgICB6X2Vycm1zZzsKKyAgICBnel9lcnJvcjsKKyAgICBnel9pbnRtYXg7CisgICAgXyo7Cit9OworCitaTElCXzEuMi4wLjIgeworICAgIGd6Y2xlYXJlcnI7CisgICAgZ3p1bmdldGM7CisgICAgemxpYkNvbXBpbGVGbGFnczsKK30gWkxJQl8xLjIuMDsKKworWkxJQl8xLjIuMC44IHsKKyAgICBkZWZsYXRlUHJpbWU7Cit9IFpMSUJfMS4yLjAuMjsKKworWkxJQl8xLjIuMiB7CisgICAgYWRsZXIzMl9jb21iaW5lOworICAgIGNyYzMyX2NvbWJpbmU7CisgICAgZGVmbGF0ZVNldEhlYWRlcjsKKyAgICBpbmZsYXRlR2V0SGVhZGVyOworfSBaTElCXzEuMi4wLjg7CisKK1pMSUJfMS4yLjIuMyB7CisgICAgZGVmbGF0ZVR1bmU7CisgICAgZ3pkaXJlY3Q7Cit9IFpMSUJfMS4yLjI7CisKK1pMSUJfMS4yLjIuNCB7CisgICAgaW5mbGF0ZVByaW1lOworfSBaTElCXzEuMi4yLjM7CisKK1pMSUJfMS4yLjMuMyB7CisgICAgYWRsZXIzMl9jb21iaW5lNjQ7CisgICAgY3JjMzJfY29tYmluZTY0OworICAgIGd6b3BlbjY0OworICAgIGd6c2VlazY0OworICAgIGd6dGVsbDY0OworICAgIGluZmxhdGVVbmRlcm1pbmU7Cit9IFpMSUJfMS4yLjIuNDsKKworWkxJQl8xLjIuMy40IHsKKyAgICBpbmZsYXRlUmVzZXQyOworICAgIGluZmxhdGVNYXJrOworfSBaTElCXzEuMi4zLjM7CisKK1pMSUJfMS4yLjMuNSB7CisgICAgZ3pidWZmZXI7CisgICAgZ3pvZmZzZXQ7CisgICAgZ3pvZmZzZXQ2NDsKKyAgICBnemNsb3NlX3I7CisgICAgZ3pjbG9zZV93OworfSBaTElCXzEuMi4zLjQ7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5wYy5pbiBiL01vZHVsZXMvemxpYi96bGliLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNWFjZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5wYy5pbgpAQCAtMCwwICsxLDEzIEBACitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAorc2hhcmVkbGliZGlyPUBzaGFyZWRsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiB6bGliCitEZXNjcmlwdGlvbjogemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5CitWZXJzaW9uOiBAVkVSU0lPTkAKKworUmVxdWlyZXM6CitMaWJzOiAtTCR7bGliZGlyfSAtTCR7c2hhcmVkbGliZGlyfSAtbHoKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuYyBiL01vZHVsZXMvemxpYi96dXRpbC5jCmluZGV4IGQ1NWY1OTQuLjg5OGVkMzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5jCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5jCkBAIC0xLDUgKzEsNSBAQAogLyogenV0aWwuYyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMzQsMjUgKzM0LDI1IEBACiAgICAgdUxvbmcgZmxhZ3M7CiAKICAgICBmbGFncyA9IDA7Ci0gICAgc3dpdGNoIChzaXplb2YodUludCkpIHsKKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih1SW50KSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6ICAgICBmbGFncyArPSAxOyAgICAgYnJlYWs7CiAgICAgY2FzZSA4OiAgICAgZmxhZ3MgKz0gMjsgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6ICAgIGZsYWdzICs9IDM7CiAgICAgfQotICAgIHN3aXRjaCAoc2l6ZW9mKHVMb25nKSkgeworICAgIHN3aXRjaCAoKGludCkoc2l6ZW9mKHVMb25nKSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6ICAgICBmbGFncyArPSAxIDw8IDI7ICAgICAgICBicmVhazsKICAgICBjYXNlIDg6ICAgICBmbGFncyArPSAyIDw8IDI7ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiAgICBmbGFncyArPSAzIDw8IDI7CiAgICAgfQotICAgIHN3aXRjaCAoc2l6ZW9mKHZvaWRwZikpIHsKKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih2b2lkcGYpKSkgewogICAgIGNhc2UgMjogICAgIGJyZWFrOwogICAgIGNhc2UgNDogICAgIGZsYWdzICs9IDEgPDwgNDsgICAgICAgIGJyZWFrOwogICAgIGNhc2UgODogICAgIGZsYWdzICs9IDIgPDwgNDsgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6ICAgIGZsYWdzICs9IDMgPDwgNDsKICAgICB9Ci0gICAgc3dpdGNoIChzaXplb2Yoel9vZmZfdCkpIHsKKyAgICBzd2l0Y2ggKChpbnQpKHNpemVvZih6X29mZl90KSkpIHsKICAgICBjYXNlIDI6ICAgICBicmVhazsKICAgICBjYXNlIDQ6ICAgICBmbGFncyArPSAxIDw8IDY7ICAgICAgICBicmVhazsKICAgICBjYXNlIDg6ICAgICBmbGFncyArPSAyIDw8IDY7ICAgICAgICBicmVhazsKQEAgLTExNyw5ICsxMTcsOSBAQAogIyAgaWZuZGVmIHZlcmJvc2UKICMgICAgZGVmaW5lIHZlcmJvc2UgMAogIyAgZW5kaWYKLWludCB6X3ZlcmJvc2UgPSB2ZXJib3NlOworaW50IFpMSUJfSU5URVJOQUwgel92ZXJib3NlID0gdmVyYm9zZTsKIAotdm9pZCB6X2Vycm9yIChtKQordm9pZCBaTElCX0lOVEVSTkFMIHpfZXJyb3IgKG0pCiAgICAgY2hhciAqbTsKIHsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBtKTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCiAjaWZuZGVmIEhBVkVfTUVNQ1BZCiAKLXZvaWQgem1lbWNweShkZXN0LCBzb3VyY2UsIGxlbikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtY3B5KGRlc3QsIHNvdXJjZSwgbGVuKQogICAgIEJ5dGVmKiBkZXN0OwogICAgIGNvbnN0IEJ5dGVmKiBzb3VyY2U7CiAgICAgdUludCAgbGVuOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgfSB3aGlsZSAoLS1sZW4gIT0gMCk7CiB9CiAKLWludCB6bWVtY21wKHMxLCBzMiwgbGVuKQoraW50IFpMSUJfSU5URVJOQUwgem1lbWNtcChzMSwgczIsIGxlbikKICAgICBjb25zdCBCeXRlZiogczE7CiAgICAgY29uc3QgQnl0ZWYqIHMyOwogICAgIHVJbnQgIGxlbjsKQEAgLTE3MCw3ICsxNzAsNyBAQAogICAgIHJldHVybiAwOwogfQogCi12b2lkIHptZW16ZXJvKGRlc3QsIGxlbikKK3ZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyhkZXN0LCBsZW4pCiAgICAgQnl0ZWYqIGRlc3Q7CiAgICAgdUludCAgbGVuOwogewpAQCAtMjEzLDcgKzIxMyw3IEBACiAgKiBhIHByb3RlY3RlZCBzeXN0ZW0gbGlrZSBPUy8yLiBVc2UgTWljcm9zb2Z0IEMgaW5zdGVhZC4KICAqLwogCi12b2lkcGYgemNhbGxvYyAodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsIHVuc2lnbmVkIHNpemUpCit2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKIHsKICAgICB2b2lkcGYgYnVmID0gb3BhcXVlOyAvKiBqdXN0IHRvIG1ha2Ugc29tZSBjb21waWxlcnMgaGFwcHkgKi8KICAgICB1bGcgYnNpemUgPSAodWxnKWl0ZW1zKnNpemU7CkBAIC0yMzcsNyArMjM3LDcgQEAKICAgICByZXR1cm4gYnVmOwogfQogCi12b2lkICB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQogewogICAgIGludCBuOwogICAgIGlmICgqKHVzaCopJnB0ciAhPSAwKSB7IC8qIG9iamVjdCA8IDY0SyAqLwpAQCAtMjcyLDEzICsyNzIsMTMgQEAKICMgIGRlZmluZSBfaGZyZWUgICBoZnJlZQogI2VuZGlmCiAKLXZvaWRwZiB6Y2FsbG9jICh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywgdW5zaWduZWQgc2l6ZSkKK3ZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgKHZvaWRwZiBvcGFxdWUsIHVJbnQgaXRlbXMsIHVJbnQgc2l6ZSkKIHsKICAgICBpZiAob3BhcXVlKSBvcGFxdWUgPSAwOyAvKiB0byBtYWtlIGNvbXBpbGVyIGhhcHB5ICovCiAgICAgcmV0dXJuIF9oYWxsb2MoKGxvbmcpaXRlbXMsIHNpemUpOwogfQogCi12b2lkICB6Y2ZyZWUgKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpCit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKQogewogICAgIGlmIChvcGFxdWUpIG9wYXF1ZSA9IDA7IC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KICAgICBfaGZyZWUocHRyKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogZXh0ZXJuIHZvaWQgICBmcmVlICAgT0YoKHZvaWRwZiBwdHIpKTsKICNlbmRpZgogCi12b2lkcGYgemNhbGxvYyAob3BhcXVlLCBpdGVtcywgc2l6ZSkKK3ZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgKG9wYXF1ZSwgaXRlbXMsIHNpemUpCiAgICAgdm9pZHBmIG9wYXF1ZTsKICAgICB1bnNpZ25lZCBpdGVtczsKICAgICB1bnNpZ25lZCBzaXplOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZHBmKWNhbGxvYyhpdGVtcywgc2l6ZSk7CiB9CiAKLXZvaWQgIHpjZnJlZSAob3BhcXVlLCBwdHIpCit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlIChvcGFxdWUsIHB0cikKICAgICB2b2lkcGYgb3BhcXVlOwogICAgIHZvaWRwZiBwdHI7CiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvenV0aWwuaCBiL01vZHVsZXMvemxpYi96dXRpbC5oCmluZGV4IDM0NjQ2ZWIuLjI1OGZhODggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96dXRpbC5oCisrKyBiL01vZHVsZXMvemxpYi96dXRpbC5oCkBAIC0xLDUgKzEsNSBAQAogLyogenV0aWwuaCAtLSBpbnRlcm5hbCBpbnRlcmZhY2UgYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTEzLDMxICsxMywyMSBAQAogI2lmbmRlZiBaVVRJTF9ICiAjZGVmaW5lIFpVVElMX0gKIAotI2RlZmluZSBaTElCX0lOVEVSTkFMCisjaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKKyNlbHNlCisjICBkZWZpbmUgWkxJQl9JTlRFUk5BTAorI2VuZGlmCisKICNpbmNsdWRlICJ6bGliLmgiCiAKICNpZmRlZiBTVERDCi0jICBpZm5kZWYgX1dJTjMyX1dDRQorIyAgaWYgIShkZWZpbmVkKF9XSU4zMl9XQ0UpICYmIGRlZmluZWQoX01TQ19WRVIpKQogIyAgICBpbmNsdWRlIDxzdGRkZWYuaD4KICMgIGVuZGlmCiAjICBpbmNsdWRlIDxzdHJpbmcuaD4KICMgIGluY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCi0jaWZkZWYgTk9fRVJSTk9fSAotIyAgIGlmZGVmIF9XSU4zMl9XQ0UKLSAgICAgIC8qIFRoZSBNaWNyb3NvZnQgQyBSdW4tVGltZSBMaWJyYXJ5IGZvciBXaW5kb3dzIENFIGRvZXNuJ3QgaGF2ZQotICAgICAgICogZXJybm8uICBXZSBkZWZpbmUgaXQgYXMgYSBnbG9iYWwgdmFyaWFibGUgdG8gc2ltcGxpZnkgcG9ydGluZy4KLSAgICAgICAqIEl0cyB2YWx1ZSBpcyBhbHdheXMgMCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAgV2UgcmVuYW1lIGl0IHRvCi0gICAgICAgKiBhdm9pZCBjb25mbGljdCB3aXRoIG90aGVyIGxpYnJhcmllcyB0aGF0IHVzZSB0aGUgc2FtZSB3b3JrYXJvdW5kLgotICAgICAgICovCi0jICAgICBkZWZpbmUgZXJybm8gel9lcnJubwotIyAgIGVuZGlmCi0gICAgZXh0ZXJuIGludCBlcnJubzsKLSNlbHNlCi0jICBpZm5kZWYgX1dJTjMyX1dDRQotIyAgICBpbmNsdWRlIDxlcnJuby5oPgotIyAgZW5kaWYKLSNlbmRpZgogCiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCkBAIC04OSw3ICs3OSw3IEBACiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKICMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIGlmKF9fU1REQ19fID09IDEpICYmIChkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChfX0NPTVBBQ1RfXykpCisjICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQogICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KICAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOwogICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CkBAIC0xMTgsNyArMTA4LDcgQEAKICNpZmRlZiBPUzIKICMgIGRlZmluZSBPU19DT0RFICAweDA2CiAjICBpZmRlZiBNX0k4NgotICAgICAjaW5jbHVkZSA8bWFsbG9jLmg+CisjICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0xNDcsMTEgKzEzNywxMSBAQAogIyAgZGVmaW5lIE9TX0NPREUgIDB4MGYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfQkVPU18pCisjaWYgZGVmaW5lZChfQkVPU18pIHx8IGRlZmluZWQoUklTQ09TKQogIyAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCiAjZW5kaWYKIAotI2lmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPiA2MDApKQorI2lmIChkZWZpbmVkKF9NU0NfVkVSKSAmJiAoX01TQ19WRVIgPiA2MDApKSAmJiAhZGVmaW5lZCBfX0lOVEVSSVgKICMgIGlmIGRlZmluZWQoX1dJTjMyX1dDRSkKICMgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCiAjICAgIGlmbmRlZiBfUFRSRElGRl9UX0RFRklORUQKQEAgLTE2Myw2ICsxNTMsMTggQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorICAjcHJhZ21hIHdhcm4gLTgwMDQKKyAgI3ByYWdtYSB3YXJuIC04MDA4CisgICNwcmFnbWEgd2FybiAtODA2NgorI2VuZGlmCisKKy8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCisjaWYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDAKKyAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgYWRsZXIzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lNjQgT0YoKHVMb25nLCB1TG9uZywgel9vZmZfdCkpOworI2VuZGlmCisKICAgICAgICAgLyogY29tbW9uIGRlZmF1bHRzICovCiAKICNpZm5kZWYgT1NfQ09ERQpAQCAtMTk3LDcgKzE5OSw5IEBACiAjICBpZmRlZiBXSU4zMgogICAgICAvKiBJbiBXaW4zMiwgdnNucHJpbnRmIGlzIGF2YWlsYWJsZSBhcyB0aGUgIm5vbi1BTlNJIiBfdnNucHJpbnRmLiAqLwogIyAgICBpZiAhZGVmaW5lZCh2c25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKLSMgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBpZiAhZGVmaW5lZChfTVNDX1ZFUikgfHwgKCBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA8IDE1MDAgKQorIyAgICAgICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogIyAgaWZkZWYgX19TQVNDCkBAIC0yMzIsMTYgKzIzNiwxNiBAQAogIyAgICBkZWZpbmUgem1lbXplcm8oZGVzdCwgbGVuKSBtZW1zZXQoZGVzdCwgMCwgbGVuKQogIyAgZW5kaWYKICNlbHNlCi0gICBleHRlcm4gdm9pZCB6bWVtY3B5ICBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7Ci0gICBleHRlcm4gaW50ICB6bWVtY21wICBPRigoY29uc3QgQnl0ZWYqIHMxLCBjb25zdCBCeXRlZiogczIsIHVJbnQgbGVuKSk7Ci0gICBleHRlcm4gdm9pZCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CisgICB2b2lkIFpMSUJfSU5URVJOQUwgem1lbWNweSBPRigoQnl0ZWYqIGRlc3QsIGNvbnN0IEJ5dGVmKiBzb3VyY2UsIHVJbnQgbGVuKSk7CisgICBpbnQgWkxJQl9JTlRFUk5BTCB6bWVtY21wIE9GKChjb25zdCBCeXRlZiogczEsIGNvbnN0IEJ5dGVmKiBzMiwgdUludCBsZW4pKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6bWVtemVybyBPRigoQnl0ZWYqIGRlc3QsIHVJbnQgbGVuKSk7CiAjZW5kaWYKIAogLyogRGlhZ25vc3RpYyBmdW5jdGlvbnMgKi8KICNpZmRlZiBERUJVRwogIyAgaW5jbHVkZSA8c3RkaW8uaD4KLSAgIGV4dGVybiBpbnQgel92ZXJib3NlOwotICAgZXh0ZXJuIHZvaWQgel9lcnJvciAgICBPRigoY2hhciAqbSkpOworICAgZXh0ZXJuIGludCBaTElCX0lOVEVSTkFMIHpfdmVyYm9zZTsKKyAgIGV4dGVybiB2b2lkIFpMSUJfSU5URVJOQUwgel9lcnJvciBPRigoY2hhciAqbSkpOwogIyAgZGVmaW5lIEFzc2VydChjb25kLG1zZykge2lmKCEoY29uZCkpIHpfZXJyb3IobXNnKTt9CiAjICBkZWZpbmUgVHJhY2UoeCkge2lmICh6X3ZlcmJvc2U+PTApIGZwcmludGYgeCA7fQogIyAgZGVmaW5lIFRyYWNldih4KSB7aWYgKHpfdmVyYm9zZT4wKSBmcHJpbnRmIHggO30KQEAgLTI1OCw4ICsyNjIsOSBAQAogI2VuZGlmCiAKIAotdm9pZHBmIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLCB1bnNpZ25lZCBzaXplKSk7Ci12b2lkICAgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOwordm9pZHBmIFpMSUJfSU5URVJOQUwgemNhbGxvYyBPRigodm9pZHBmIG9wYXF1ZSwgdW5zaWduZWQgaXRlbXMsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplKSk7Cit2b2lkIFpMSUJfSU5URVJOQUwgemNmcmVlICBPRigodm9pZHBmIG9wYXF1ZSwgdm9pZHBmIHB0cikpOwogCiAjZGVmaW5lIFpBTExPQyhzdHJtLCBpdGVtcywgc2l6ZSkgXAogICAgICAgICAgICAoKigoc3RybSktPnphbGxvYykpKChzdHJtKS0+b3BhcXVlLCAoaXRlbXMpLCAoc2l6ZSkpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWJtb2R1bGUuYyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCmluZGV4IGM3OGNmNDIuLjIwNmVmMGMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYm1vZHVsZS5jCisrKyBiL01vZHVsZXMvemxpYm1vZHVsZS5jCkBAIC0xMTcsMTQgKzExNywyMSBAQAogICAgIFB5T2JqZWN0ICpSZXR1cm5WYWwgPSBOVUxMOwogICAgIFB5X2J1ZmZlciBwaW5wdXQ7CiAgICAgQnl0ZSAqaW5wdXQsICpvdXRwdXQ7Ci0gICAgaW50IGxlbmd0aCwgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBlcnI7CisgICAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBlcnI7CiAgICAgel9zdHJlYW0genN0OwogCiAgICAgLyogcmVxdWlyZSBQeXRob24gc3RyaW5nIG9iamVjdCwgb3B0aW9uYWwgJ2xldmVsJyBhcmcgKi8KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGk6Y29tcHJlc3MiLCAmcGlucHV0LCAmbGV2ZWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7CisKKyAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgInNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IHBpbnB1dC5idWY7CiAKICAgICB6c3QuYXZhaWxfb3V0ID0gbGVuZ3RoICsgbGVuZ3RoLzEwMDAgKyAxMiArIDE7CiAKQEAgLTE5OSw3ICsyMDYsOCBAQAogICAgIFB5T2JqZWN0ICpyZXN1bHRfc3RyOwogICAgIFB5X2J1ZmZlciBwaW5wdXQ7CiAgICAgQnl0ZSAqaW5wdXQ7Ci0gICAgaW50IGxlbmd0aCwgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CisgICAgaW50IGVycjsKICAgICBpbnQgd3NpemU9REVGX1dCSVRTOwogICAgIFB5X3NzaXplX3Qgcl9zdHJsZW49REVGQVVMVEFMTE9DOwogICAgIHpfc3RyZWFtIHpzdDsKQEAgLTIwNyw4ICsyMTUsMTQgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGluOmRlY29tcHJlc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsICZyX3N0cmxlbikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKKworICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAic2l6ZSBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBsZW5ndGggPSBwaW5wdXQubGVuOworICAgIGlucHV0ID0gcGlucHV0LmJ1ZjsKIAogICAgIGlmIChyX3N0cmxlbiA8PSAwKQogICAgICAgICByX3N0cmxlbiA9IDE7CmRpZmYgLS1naXQgYS9PYmplY3RzL2Fic3RyYWN0LmMgYi9PYmplY3RzL2Fic3RyYWN0LmMKaW5kZXggMmQ0ZjJlMS4uMmY4ODdhYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9hYnN0cmFjdC5jCisrKyBiL09iamVjdHMvYWJzdHJhY3QuYwpAQCAtNjkzLDQ4ICs2OTMsMzcgQEAKIFB5T2JqZWN0ICoKIFB5T2JqZWN0X0Zvcm1hdChQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZm9ybWF0X3NwZWMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICogc3RyX19mb3JtYXRfXyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1ldGg7CiAgICAgUHlPYmplY3QgKmVtcHR5ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLQotICAgIC8qIEluaXRpYWxpemUgY2FjaGVkIHZhbHVlICovCi0gICAgaWYgKHN0cl9fZm9ybWF0X18gPT0gTlVMTCkgewotICAgIC8qIEluaXRpYWxpemUgc3RhdGljIHZhcmlhYmxlIG5lZWRlZCBieSBfUHlUeXBlX0xvb2t1cCAqLwotICAgIHN0cl9fZm9ybWF0X18gPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiX19mb3JtYXRfXyIpOwotICAgIGlmIChzdHJfX2Zvcm1hdF9fID09IE5VTEwpCi0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9CisgICAgc3RhdGljIFB5T2JqZWN0ICpmb3JtYXRfY2FjaGUgPSBOVUxMOwogCiAgICAgLyogSWYgbm8gZm9ybWF0X3NwZWMgaXMgcHJvdmlkZWQsIHVzZSBhbiBlbXB0eSBzdHJpbmcgKi8KICAgICBpZiAoZm9ybWF0X3NwZWMgPT0gTlVMTCkgewotICAgIGVtcHR5ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOwotICAgIGZvcm1hdF9zcGVjID0gZW1wdHk7CisgICAgICAgIGVtcHR5ID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDApOworICAgICAgICBmb3JtYXRfc3BlYyA9IGVtcHR5OwogICAgIH0KIAotICAgIC8qIE1ha2Ugc3VyZSB0aGUgdHlwZSBpcyBpbml0aWFsaXplZC4gIGZsb2F0IGdldHMgaW5pdGlhbGl6ZWQgbGF0ZSAqLwotICAgIGlmIChQeV9UWVBFKG9iaiktPnRwX2RpY3QgPT0gTlVMTCkKLSAgICBpZiAoUHlUeXBlX1JlYWR5KFB5X1RZUEUob2JqKSkgPCAwKQotICAgICAgICBnb3RvIGRvbmU7Ci0KICAgICAvKiBGaW5kIHRoZSAodW5ib3VuZCEpIF9fZm9ybWF0X18gbWV0aG9kIChhIGJvcnJvd2VkIHJlZmVyZW5jZSkgKi8KLSAgICBtZXRoID0gX1B5VHlwZV9Mb29rdXAoUHlfVFlQRShvYmopLCBzdHJfX2Zvcm1hdF9fKTsKKyAgICBtZXRoID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAiX19mb3JtYXRfXyIsICZmb3JtYXRfY2FjaGUpOwogICAgIGlmIChtZXRoID09IE5VTEwpIHsKLSAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBkZWZpbmUgX19mb3JtYXRfXyIsCi0gICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fZm9ybWF0X18iLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICAvKiBBbmQgY2FsbCBpdCwgYmluZGluZyBpdCB0byB0aGUgdmFsdWUgKi8KLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKG1ldGgsIG9iaiwgZm9ybWF0X3NwZWMsIE5VTEwpOworICAgIC8qIEFuZCBjYWxsIGl0LiAqLworICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MobWV0aCwgZm9ybWF0X3NwZWMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihtZXRoKTsKIAogICAgIGlmIChyZXN1bHQgJiYgIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpKSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgIl9fZm9ybWF0X18gbWV0aG9kIGRpZCBub3QgcmV0dXJuIHN0cmluZyIpOwotICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgIHJlc3VsdCA9IE5VTEw7Ci0gICAgZ290byBkb25lOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9fZm9ybWF0X18gbWV0aG9kIGRpZCBub3QgcmV0dXJuIHN0cmluZyIpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgZ290byBkb25lOwogICAgIH0KIAogZG9uZToKQEAgLTE0NTMsNyArMTQ0Miw3IEBACiBpbnQKIFB5U2VxdWVuY2VfQ2hlY2soUHlPYmplY3QgKnMpCiB7Ci0gICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UocywgKFB5T2JqZWN0ICopJlB5RGljdF9UeXBlKSkKKyAgICBpZiAoUHlEaWN0X0NoZWNrKHMpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcyAhPSBOVUxMICYmIHMtPm9iX3R5cGUtPnRwX2FzX3NlcXVlbmNlICYmCiAgICAgICAgIHMtPm9iX3R5cGUtPnRwX2FzX3NlcXVlbmNlLT5zcV9pdGVtICE9IE5VTEw7CkBAIC0yMzIyLDE1ICsyMzExLDcgQEAKICAgICB2YV9saXN0IGNvdW50dmE7CiAgICAgUHlPYmplY3QgKnJlc3VsdCwgKnRtcDsKIAotI2lmZGVmIFZBX0xJU1RfSVNfQVJSQVkKLSAgICBtZW1jcHkoY291bnR2YSwgdmEsIHNpemVvZih2YV9saXN0KSk7Ci0jZWxzZQotI2lmZGVmIF9fdmFfY29weQotICAgIF9fdmFfY29weShjb3VudHZhLCB2YSk7Ci0jZWxzZQotICAgIGNvdW50dmEgPSB2YTsKLSNlbmRpZgotI2VuZGlmCisgICAgICAgIFB5X1ZBX0NPUFkoY291bnR2YSwgdmEpOwogCiAgICAgd2hpbGUgKCgoUHlPYmplY3QgKil2YV9hcmcoY291bnR2YSwgUHlPYmplY3QgKikpICE9IE5VTEwpCiAgICAgICAgICsrbjsKQEAgLTI1MTksNyArMjUwMCwxMCBAQAogICAgICAgICBpZiAocmV0dmFsID09IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpjID0gUHlPYmplY3RfR2V0QXR0cihpbnN0LCBfX2NsYXNzX18pOwogICAgICAgICAgICAgaWYgKGMgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoYyAhPSAoUHlPYmplY3QgKikoaW5zdC0+b2JfdHlwZSkgJiYKQEAgLTI1MzcsOCArMjUyMSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpY2xzID0gUHlPYmplY3RfR2V0QXR0cihpbnN0LCBfX2NsYXNzX18pOwogICAgICAgICBpZiAoaWNscyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHZhbCA9IC0xOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0dmFsID0gYWJzdHJhY3RfaXNzdWJjbGFzcyhpY2xzLCBjbHMpOwpAQCAtMjcyMSwzICsyNzA3LDY2IEBACiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworCisvKgorICogRmxhdHRlbiBhIHNlcXVlbmNlIG9mIGJ5dGVzKCkgb2JqZWN0cyBpbnRvIGEgQyBhcnJheSBvZgorICogTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyBwb2ludGVycyB3aXRoIGEgTlVMTCBjaGFyKiB0ZXJtaW5hdGluZyB0aGUgYXJyYXkuCisgKiAoaWU6IGFuIGFyZ3Ygb3IgZW52IGxpc3QpCisgKgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYygpIGFuZCBNVVNUCisgKiBiZSBmcmVlZCBieSB0aGUgY2FsbGVyIHVzaW5nIGEgZnJlZSgpIGxvb3Agb3IgX1B5X0ZyZWVDaGFyUEFycmF5KCkuCisgKi8KK2NoYXIgKmNvbnN0ICoKK19QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KFB5T2JqZWN0KiBzZWxmKQoreworICAgIGNoYXIgKiphcnJheTsKKyAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CisgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworCisgICAgYXJnYyA9IFB5U2VxdWVuY2VfU2l6ZShzZWxmKTsKKyAgICBpZiAoYXJnYyA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGlmIChhcnJheSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGNoYXIgKmRhdGE7CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldEl0ZW0oc2VsZiwgaSk7CisgICAgICAgIGRhdGEgPSBQeUJ5dGVzX0FzU3RyaW5nKGl0ZW0pOworICAgICAgICBpZiAoZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBOVUxMIHRlcm1pbmF0ZSBiZWZvcmUgZnJlZWluZy4gKi8KKyAgICAgICAgICAgIGFycmF5W2ldID0gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBhcnJheVtpXSA9IHN0cmR1cChkYXRhKTsKKyAgICAgICAgaWYgKCFhcnJheVtpXSkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorICAgIGFycmF5W2FyZ2NdID0gTlVMTDsKKworICAgIHJldHVybiBhcnJheTsKKworZmFpbDoKKyAgICBQeV9YREVDUkVGKGl0ZW0pOworICAgIF9QeV9GcmVlQ2hhclBBcnJheShhcnJheSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworLyogRnJlZSdzIGEgTlVMTCB0ZXJtaW5hdGVkIGNoYXIqKiBhcnJheSBvZiBDIHN0cmluZ3MuICovCit2b2lkCitfUHlfRnJlZUNoYXJQQXJyYXkoY2hhciAqY29uc3QgYXJyYXlbXSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZm9yIChpID0gMDsgYXJyYXlbaV0gIT0gTlVMTDsgKytpKSB7CisgICAgICAgIGZyZWUoYXJyYXlbaV0pOworICAgIH0KKyAgICBmcmVlKCh2b2lkKilhcnJheSk7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jIGIvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYwppbmRleCAyN2FmZmI1Li43YTc0MTA0IDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKQEAgLTUsMjQgKzUsMTYgQEAKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJieXRlc19tZXRob2RzLmgiCiAKLXN0YXRpYyBQeUJ5dGVBcnJheU9iamVjdCAqbnVsbGJ5dGVzID0gTlVMTDsKIGNoYXIgX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZ1tdID0gIiI7CiAKIHZvaWQKIFB5Qnl0ZUFycmF5X0Zpbmkodm9pZCkKIHsKLSAgICBQeV9DTEVBUihudWxsYnl0ZXMpOwogfQogCiBpbnQKIFB5Qnl0ZUFycmF5X0luaXQodm9pZCkKIHsKLSAgICBudWxsYnl0ZXMgPSBQeU9iamVjdF9OZXcoUHlCeXRlQXJyYXlPYmplY3QsICZQeUJ5dGVBcnJheV9UeXBlKTsKLSAgICBpZiAobnVsbGJ5dGVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIG51bGxieXRlcy0+b2JfYnl0ZXMgPSBOVUxMOwotICAgIFB5X1NJWkUobnVsbGJ5dGVzKSA9IG51bGxieXRlcy0+b2JfYWxsb2MgPSAwOwotICAgIG51bGxieXRlcy0+b2JfZXhwb3J0cyA9IDA7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTQxLDYgKzMzLDcgQEAKICAgICAgICAgUHlPYmplY3QgKmluZGV4ID0gUHlOdW1iZXJfSW5kZXgoYXJnKTsKICAgICAgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIik7CisgICAgICAgICAgICAqdmFsdWUgPSAtMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIGZhY2VfdmFsdWUgPSBQeUxvbmdfQXNMb25nKGluZGV4KTsKQEAgLTUwLDYgKzQzLDcgQEAKICAgICBpZiAoZmFjZV92YWx1ZSA8IDAgfHwgZmFjZV92YWx1ZSA+PSAyNTYpIHsKICAgICAgICAgLyogdGhpcyBpbmNsdWRlcyB0aGUgT3ZlcmZsb3dFcnJvciBpbiBjYXNlIHRoZSBsb25nIGlzIHRvbyBsYXJnZSAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ5dGUgbXVzdCBiZSBpbiByYW5nZSgwLCAyNTYpIik7CisgICAgICAgICp2YWx1ZSA9IC0xOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTMxNiw5ICszMTAsOSBAQAogICAgIGlmIChjb3VudCA8IDApCiAgICAgICAgIGNvdW50ID0gMDsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIHNpemUgPSBteXNpemUgKiBjb3VudDsKLSAgICBpZiAoY291bnQgIT0gMCAmJiBzaXplIC8gY291bnQgIT0gbXlzaXplKQorICAgIGlmIChjb3VudCA+IDAgJiYgbXlzaXplID4gUFlfU1NJWkVfVF9NQVggLyBjb3VudCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgc2l6ZSA9IG15c2l6ZSAqIGNvdW50OwogICAgIHJlc3VsdCA9IChQeUJ5dGVBcnJheU9iamVjdCAqKVB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOwogICAgIGlmIChyZXN1bHQgIT0gTlVMTCAmJiBzaXplICE9IDApIHsKICAgICAgICAgaWYgKG15c2l6ZSA9PSAxKQpAQCAtMzQxLDkgKzMzNSw5IEBACiAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgY291bnQgPSAwOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7Ci0gICAgc2l6ZSA9IG15c2l6ZSAqIGNvdW50OwotICAgIGlmIChjb3VudCAhPSAwICYmIHNpemUgLyBjb3VudCAhPSBteXNpemUpCisgICAgaWYgKGNvdW50ID4gMCAmJiBteXNpemUgPiBQWV9TU0laRV9UX01BWCAvIGNvdW50KQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICBzaXplID0gbXlzaXplICogY291bnQ7CiAgICAgaWYgKHNpemUgPCBzZWxmLT5vYl9hbGxvYykgewogICAgICAgICBQeV9TSVpFKHNlbGYpID0gc2l6ZTsKICAgICAgICAgc2VsZi0+b2JfYnl0ZXNbUHlfU0laRShzZWxmKV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KQEAgLTM5NSw3ICszODksNyBAQAogICAgIH0KICAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbmd0aCwgY3VyLCBpOwotICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QgKilpbmRleCwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNTc5LDcgKzU3Myw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpbmRleCkpIHsKLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0ICopaW5kZXgsCisgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC02NTUsNiArNjQ5LDExIEBACiAKICAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIGlmIChzbGljZWxlbiA9PSAwKQorICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gZG8gaGVyZS4gKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwogICAgICAgICAgICAgaWYgKHN0ZXAgPCAwKSB7CiAgICAgICAgICAgICAgICAgc3RvcCA9IHN0YXJ0ICsgMTsKICAgICAgICAgICAgICAgICBzdGFydCA9IHN0b3AgKyBzdGVwICogKHNsaWNlbGVuIC0gMSkgLSAxOwpAQCAtNjcxLDcgKzY3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5vYl9ieXRlcyArIGN1ciArIDEsIGxpbSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBNb3ZlIHRoZSB0YWlsIG9mIHRoZSBieXRlcywgaW4gb25lIGNodW5rICovCi0gICAgICAgICAgICBjdXIgPSBzdGFydCArIHNsaWNlbGVuKnN0ZXA7CisgICAgICAgICAgICBjdXIgPSBzdGFydCArIChzaXplX3Qpc2xpY2VsZW4qc3RlcDsKICAgICAgICAgICAgIGlmIChjdXIgPCAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKSB7CiAgICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIGN1ciAtIHNsaWNlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfYnl0ZXMgKyBjdXIsCkBAIC02ODUsNyArNjg0LDggQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIEFzc2lnbiBzbGljZSAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCBjdXIsIGk7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgICAgICBzaXplX3QgY3VyOwogCiAgICAgICAgICAgICBpZiAobmVlZGVkICE9IHNsaWNlbGVuKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCkBAIC0xMDM4LDE5ICsxMDM4LDE5IEBACiAvKiBNZXRob2RzICovCiAKICNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgotI2RlZmluZSBTVFJJTkdMSUJfQ01QIG1lbWNtcAogI2RlZmluZSBTVFJJTkdMSUJfTEVOIFB5Qnl0ZUFycmF5X0dFVF9TSVpFCiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgUHlCeXRlQXJyYXlfQVNfU1RSSU5HCiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX0VNUFRZIG51bGxieXRlcworI2RlZmluZSBTVFJJTkdMSUJfSVNTUEFDRSBQeV9JU1NQQUNFCisjZGVmaW5lIFNUUklOR0xJQl9JU0xJTkVCUkVBSyh4KSAoKHggPT0gJ1xuJykgfHwgKHggPT0gJ1xyJykpCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCBQeUJ5dGVBcnJheV9DaGVja0V4YWN0CiAjZGVmaW5lIFNUUklOR0xJQl9NVVRBQkxFIDEKLSNkZWZpbmUgRlJPTV9CWVRFQVJSQVkgMQogCiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9wYXJ0aXRpb24uaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY3R5cGUuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgiCiAKQEAgLTEwNTgsMjEgKzEwNTgsMjAgQEAKIC8qIFRoZSBmb2xsb3dpbmcgUHlfTE9DQUxfSU5MSU5FIGFuZCBQeV9MT0NBTCBmdW5jdGlvbnMKIHdlcmUgY29waWVkIGZyb20gdGhlIG9sZCBjaGFyKiBzdHlsZSBzdHJpbmcgb2JqZWN0LiAqLwogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLV9hZGp1c3RfaW5kaWNlcyhQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqZW5kLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoKmVuZCA+IGxlbikKLSAgICAgICAgKmVuZCA9IGxlbjsKLSAgICBlbHNlIGlmICgqZW5kIDwgMCkKLSAgICAgICAgKmVuZCArPSBsZW47Ci0gICAgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kID0gMDsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ICs9IGxlbjsKLSAgICBpZiAoKnN0YXJ0IDwgMCkKLSAgICAgICAgKnN0YXJ0ID0gMDsKLX0KLQorLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChlbmQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3RhcnQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQogYnl0ZWFycmF5X2ZpbmRfaW50ZXJuYWwoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBpbnQgZGlyKQpAQCAtMTEzOSwxMCArMTEzOCwxMCBAQAogICAgIGlmIChfZ2V0YnVmZmVyKHN1Yl9vYmosICZ2c3ViKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikpOworICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKTsKIAogICAgIGNvdW50X29iaiA9IFB5TG9uZ19Gcm9tU3NpemVfdCgKLSAgICAgICAgc3RyaW5nbGliX2NvdW50KHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgdnN1Yi5idWYsIHZzdWIubGVuKQorICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCB2c3ViLmJ1ZiwgdnN1Yi5sZW4sIFBZX1NTSVpFX1RfTUFYKQogICAgICAgICApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwogICAgIHJldHVybiBjb3VudF9vYmo7CkBAIC0xMjUwLDcgKzEyNDksNyBAQAogICAgIGlmIChfZ2V0YnVmZmVyKHN1YnN0ciwgJnZzdWJzdHIpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgbGVuKTsKKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOwogCiAgICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKICAgICAgICAgLyogc3RhcnRzd2l0aCAqLwpAQCAtMTQ2OCwyMCArMTQ2NywxMSBAQAogfQogCiAKLSNkZWZpbmUgRk9SV0FSRCAxCi0jZGVmaW5lIFJFVkVSU0UgLTEKLQogLyogZmluZCBhbmQgY291bnQgY2hhcmFjdGVycyBhbmQgc3Vic3RyaW5ncyAqLwogCiAjZGVmaW5lIGZpbmRjaGFyKHRhcmdldCwgdGFyZ2V0X2xlbiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAoKGNoYXIgKiltZW1jaHIoKGNvbnN0IHZvaWQgKikodGFyZ2V0KSwgYywgdGFyZ2V0X2xlbikpCiAKLS8qIERvbid0IGNhbGwgaWYgbGVuZ3RoIDwgMiAqLwotI2RlZmluZSBQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBvZmZzZXQsIHBhdHRlcm4sIGxlbmd0aCkgICAgICAgIFwKLSAgKHRhcmdldFtvZmZzZXRdID09IHBhdHRlcm5bMF0gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICB0YXJnZXRbb2Zmc2V0K2xlbmd0aC0xXSA9PSBwYXR0ZXJuW2xlbmd0aC0xXSAmJiAgICAgICAgICAgICAgXAotICAgIW1lbWNtcCh0YXJnZXQrb2Zmc2V0KzEsIHBhdHRlcm4rMSwgbGVuZ3RoLTIpICkKLQogCiAvKiBCeXRlcyBvcHMgbXVzdCByZXR1cm4gYSBzdHJpbmcsIGNyZWF0ZSBhIGNvcHkgKi8KIFB5X0xPQ0FMKFB5Qnl0ZUFycmF5T2JqZWN0ICopCkBAIC0xNTA5LDkzICsxNDk5LDYgQEAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKLVB5X0xPQ0FMKFB5X3NzaXplX3QpCi1maW5kc3RyaW5nKGNvbnN0IGNoYXIgKnRhcmdldCwgUHlfc3NpemVfdCB0YXJnZXRfbGVuLAotICAgICAgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBQeV9zc2l6ZV90IHBhdHRlcm5fbGVuLAotICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LAotICAgICAgICAgICBQeV9zc2l6ZV90IGVuZCwKLSAgICAgICAgICAgaW50IGRpcmVjdGlvbikKLXsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIHN0YXJ0ICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgfQotICAgIGlmIChlbmQgPiB0YXJnZXRfbGVuKSB7Ci0gICAgICAgIGVuZCA9IHRhcmdldF9sZW47Ci0gICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7Ci0gICAgICAgIGVuZCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgICAgIGVuZCA9IDA7Ci0gICAgfQotCi0gICAgLyogemVyby1sZW5ndGggc3Vic3RyaW5ncyBhbHdheXMgbWF0Y2ggYXQgdGhlIGZpcnN0IGF0dGVtcHQgKi8KLSAgICBpZiAocGF0dGVybl9sZW4gPT0gMCkKLSAgICAgICAgcmV0dXJuIChkaXJlY3Rpb24gPiAwKSA/IHN0YXJ0IDogZW5kOwotCi0gICAgZW5kIC09IHBhdHRlcm5fbGVuOwotCi0gICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKLSAgICAgICAgZm9yICg7IGVuZCA+PSBzdGFydDsgZW5kLS0pCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgZW5kLCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVuZDsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKDsgc3RhcnQgPD0gZW5kOyBzdGFydCsrKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIHN0YXJ0LCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0OwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLVB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQotY291bnRzdHJpbmcoY29uc3QgY2hhciAqdGFyZ2V0LCBQeV9zc2l6ZV90IHRhcmdldF9sZW4sCi0gICAgICAgICAgICBjb25zdCBjaGFyICpwYXR0ZXJuLCBQeV9zc2l6ZV90IHBhdHRlcm5fbGVuLAotICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwKLSAgICAgICAgICAgIFB5X3NzaXplX3QgZW5kLAotICAgICAgICAgICAgaW50IGRpcmVjdGlvbiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICBQeV9zc2l6ZV90IGNvdW50PTA7Ci0KLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIHN0YXJ0ICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgfQotICAgIGlmIChlbmQgPiB0YXJnZXRfbGVuKSB7Ci0gICAgICAgIGVuZCA9IHRhcmdldF9sZW47Ci0gICAgfSBlbHNlIGlmIChlbmQgPCAwKSB7Ci0gICAgICAgIGVuZCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgICAgIGVuZCA9IDA7Ci0gICAgfQotCi0gICAgLyogemVyby1sZW5ndGggc3Vic3RyaW5ncyBtYXRjaCBldmVyeXdoZXJlICovCi0gICAgaWYgKHBhdHRlcm5fbGVuID09IDAgfHwgbWF4Y291bnQgPT0gMCkgewotICAgICAgICBpZiAodGFyZ2V0X2xlbisxIDwgbWF4Y291bnQpCi0gICAgICAgICAgICByZXR1cm4gdGFyZ2V0X2xlbisxOwotICAgICAgICByZXR1cm4gbWF4Y291bnQ7Ci0gICAgfQotCi0gICAgZW5kIC09IHBhdHRlcm5fbGVuOwotICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7Ci0gICAgICAgIGZvciAoOyAoZW5kID49IHN0YXJ0KTsgZW5kLS0pCi0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHRhcmdldCwgZW5kLCBwYXR0ZXJuLCBwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDw9IDApIGJyZWFrOwotICAgICAgICAgICAgICAgIGVuZCAtPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoOyAoc3RhcnQgPD0gZW5kKTsgc3RhcnQrKykKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBzdGFydCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAoLS1tYXhjb3VudCA8PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBzdGFydCArPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIAogLyogQWxnb3JpdGhtcyBmb3IgZGlmZmVyZW50IGNhc2VzIG9mIHN0cmluZyByZXBsYWNlbWVudCAqLwogCkBAIC0xNjA3LDMwICsxNTEwLDI4IEBACiB7CiAgICAgY2hhciAqc2VsZl9zLCAqcmVzdWx0X3M7CiAgICAgUHlfc3NpemVfdCBzZWxmX2xlbiwgcmVzdWx0X2xlbjsKLSAgICBQeV9zc2l6ZV90IGNvdW50LCBpLCBwcm9kdWN0OworICAgIFB5X3NzaXplX3QgY291bnQsIGk7CiAgICAgUHlCeXRlQXJyYXlPYmplY3QgKnJlc3VsdDsKIAogICAgIHNlbGZfbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZik7CiAKLSAgICAvKiAxIGF0IHRoZSBlbmQgcGx1cyAxIGFmdGVyIGV2ZXJ5IGNoYXJhY3RlciAqLwotICAgIGNvdW50ID0gc2VsZl9sZW4rMTsKLSAgICBpZiAobWF4Y291bnQgPCBjb3VudCkKKyAgICAvKiAxIGF0IHRoZSBlbmQgcGx1cyAxIGFmdGVyIGV2ZXJ5IGNoYXJhY3RlcjsKKyAgICAgICBjb3VudCA9IG1pbihtYXhjb3VudCwgc2VsZl9sZW4gKyAxKSAqLworICAgIGlmIChtYXhjb3VudCA8PSBzZWxmX2xlbikKICAgICAgICAgY291bnQgPSBtYXhjb3VudDsKKyAgICBlbHNlCisgICAgICAgIC8qIENhbid0IG92ZXJmbG93OiBzZWxmX2xlbiArIDEgPD0gbWF4Y291bnQgPD0gUFlfU1NJWkVfVF9NQVguICovCisgICAgICAgIGNvdW50ID0gc2VsZl9sZW4gKyAxOwogCiAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCiAgICAgLyogICByZXN1bHRfbGVuID0gY291bnQgKiB0b19sZW4gKyBzZWxmX2xlbjsgKi8KLSAgICBwcm9kdWN0ID0gY291bnQgKiB0b19sZW47Ci0gICAgaWYgKHByb2R1Y3QgLyB0b19sZW4gIT0gY291bnQpIHsKKyAgICBhc3NlcnQoY291bnQgPiAwKTsKKyAgICBpZiAodG9fbGVuID4gKFBZX1NTSVpFX1RfTUFYIC0gc2VsZl9sZW4pIC8gY291bnQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmVwbGFjZSBzdHJpbmcgaXMgdG9vIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJlc3VsdF9sZW4gPSBwcm9kdWN0ICsgc2VsZl9sZW47Ci0gICAgaWYgKHJlc3VsdF9sZW4gPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2Ugc3RyaW5nIGlzIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICByZXN1bHRfbGVuID0gY291bnQgKiB0b19sZW4gKyBzZWxmX2xlbjsKIAogICAgIGlmICghIChyZXN1bHQgPSAoUHlCeXRlQXJyYXlPYmplY3QgKikKICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJlc3VsdF9sZW4pKSApCkBAIC0xNzE3LDEwICsxNjE4LDkgQEAKICAgICBzZWxmX2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogICAgIHNlbGZfcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAotICAgIGNvdW50ID0gY291bnRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKyAgICBjb3VudCA9IHN0cmluZ2xpYl9jb3VudChzZWxmX3MsIHNlbGZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOwogCiAgICAgaWYgKGNvdW50ID09IDApIHsKICAgICAgICAgLyogbm8gbWF0Y2hlcyAqLwpAQCAtMTczOSw5ICsxNjM5LDkgQEAKICAgICBzdGFydCA9IHNlbGZfczsKICAgICBlbmQgPSBzZWxmX3MgKyBzZWxmX2xlbjsKICAgICB3aGlsZSAoY291bnQtLSA+IDApIHsKLSAgICAgICAgb2Zmc2V0ID0gZmluZHN0cmluZyhzdGFydCwgZW5kLXN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZW5kLXN0YXJ0LCBGT1JXQVJEKTsKKyAgICAgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc3RhcnQsIGVuZC1zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAgICAgICAgIGlmIChvZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV4dCA9IHN0YXJ0ICsgb2Zmc2V0OwpAQCAtMTgxNyw5ICsxNzE3LDkgQEAKICAgICBzZWxmX3MgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKTsKIAotICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgRk9SV0FSRCk7CisgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgIGlmIChvZmZzZXQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gbWF0Y2hlczsgcmV0dXJuIHRoZSBvcmlnaW5hbCBieXRlcyAqLwogICAgICAgICByZXR1cm4gcmV0dXJuX3NlbGYoc2VsZik7CkBAIC0xODM5LDkgKzE3MzksOSBAQAogICAgIGVuZCA9IHJlc3VsdF9zICsgc2VsZl9sZW47CiAKICAgICB3aGlsZSAoIC0tbWF4Y291bnQgPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0PT0tMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBQeV9NRU1DUFkoc3RhcnQrb2Zmc2V0LCB0b19zLCBmcm9tX2xlbik7CkBAIC0xODYxLDcgKzE3NjEsNyBAQAogICAgIGNoYXIgKnNlbGZfcywgKnJlc3VsdF9zOwogICAgIGNoYXIgKnN0YXJ0LCAqbmV4dCwgKmVuZDsKICAgICBQeV9zc2l6ZV90IHNlbGZfbGVuLCByZXN1bHRfbGVuOwotICAgIFB5X3NzaXplX3QgY291bnQsIHByb2R1Y3Q7CisgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICBQeUJ5dGVBcnJheU9iamVjdCAqcmVzdWx0OwogCiAgICAgc2VsZl9zID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwpAQCAtMTg3NSwxNiArMTc3NSwxMiBAQAogCiAgICAgLyogdXNlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gY3VycmVudCBhbmQgbmV3LCBoZW5jZSB0aGUgIi0xIiAqLwogICAgIC8qICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgY291bnQgKiAodG9fbGVuLTEpICAqLwotICAgIHByb2R1Y3QgPSBjb3VudCAqICh0b19sZW4tMSk7Ci0gICAgaWYgKHByb2R1Y3QgLyAodG9fbGVuLTEpICE9IGNvdW50KSB7CisgICAgYXNzZXJ0KGNvdW50ID4gMCk7CisgICAgaWYgKHRvX2xlbiAtIDEgPiAoUFlfU1NJWkVfVF9NQVggLSBzZWxmX2xlbikgLyBjb3VudCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInJlcGxhY2UgYnl0ZXMgaXMgdG9vIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJlc3VsdF9sZW4gPSBzZWxmX2xlbiArIHByb2R1Y3Q7Ci0gICAgaWYgKHJlc3VsdF9sZW4gPCAwKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInJlcGxhY2UgYnl0ZXMgaXMgdG9vIGxvbmciKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICByZXN1bHRfbGVuID0gc2VsZl9sZW4gKyBjb3VudCAqICh0b19sZW4gLSAxKTsKIAogICAgIGlmICggKHJlc3VsdCA9IChQeUJ5dGVBcnJheU9iamVjdCAqKQogICAgICAgICAgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJlc3VsdF9sZW4pKSA9PSBOVUxMKQpAQCAtMTkyOCwxNSArMTgyNCwxNiBAQAogICAgIGNoYXIgKnNlbGZfcywgKnJlc3VsdF9zOwogICAgIGNoYXIgKnN0YXJ0LCAqbmV4dCwgKmVuZDsKICAgICBQeV9zc2l6ZV90IHNlbGZfbGVuLCByZXN1bHRfbGVuOwotICAgIFB5X3NzaXplX3QgY291bnQsIG9mZnNldCwgcHJvZHVjdDsKKyAgICBQeV9zc2l6ZV90IGNvdW50LCBvZmZzZXQ7CiAgICAgUHlCeXRlQXJyYXlPYmplY3QgKnJlc3VsdDsKIAogICAgIHNlbGZfcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBzZWxmX2xlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJELCBtYXhjb3VudCk7CisgICAgY291bnQgPSBzdHJpbmdsaWJfY291bnQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKwogICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgIC8qIG5vIG1hdGNoZXMsIHJldHVybiB1bmNoYW5nZWQgKi8KICAgICAgICAgcmV0dXJuIHJldHVybl9zZWxmKHNlbGYpOwpAQCAtMTk0NCwxNiArMTg0MSwxMiBAQAogCiAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCiAgICAgLyogICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgY291bnQgKiAodG9fbGVuLWZyb21fbGVuKSAqLwotICAgIHByb2R1Y3QgPSBjb3VudCAqICh0b19sZW4tZnJvbV9sZW4pOwotICAgIGlmIChwcm9kdWN0IC8gKHRvX2xlbi1mcm9tX2xlbikgIT0gY291bnQpIHsKKyAgICBhc3NlcnQoY291bnQgPiAwKTsKKyAgICBpZiAodG9fbGVuIC0gZnJvbV9sZW4gPiAoUFlfU1NJWkVfVF9NQVggLSBzZWxmX2xlbikgLyBjb3VudCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInJlcGxhY2UgYnl0ZXMgaXMgdG9vIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJlc3VsdF9sZW4gPSBzZWxmX2xlbiArIHByb2R1Y3Q7Ci0gICAgaWYgKHJlc3VsdF9sZW4gPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicmVwbGFjZSBieXRlcyBpcyB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgY291bnQgKiAodG9fbGVuIC0gZnJvbV9sZW4pOwogCiAgICAgaWYgKCAocmVzdWx0ID0gKFB5Qnl0ZUFycmF5T2JqZWN0ICopCiAgICAgICAgICAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcmVzdWx0X2xlbikpID09IE5VTEwpCkBAIC0xOTYzLDkgKzE4NTYsOSBAQAogICAgIHN0YXJ0ID0gc2VsZl9zOwogICAgIGVuZCA9IHNlbGZfcyArIHNlbGZfbGVuOwogICAgIHdoaWxlIChjb3VudC0tID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHN0YXJ0LCBlbmQtc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbmQtc3RhcnQsIEZPUldBUkQpOworICAgICAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzdGFydCwgZW5kLXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgaWYgKG9mZnNldCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0ID0gc3RhcnQrb2Zmc2V0OwpAQCAtMjA5NCwxMjMgKzE5ODcsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLQotLyogT3ZlcmFsbG9jYXRlIHRoZSBpbml0aWFsIGxpc3QgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgcmVhbGxvY3MgZm9yIHNtYWxsCi0gICBzcGxpdCBzaXplcy4gIEVnLCAiQSBBIEEgQSBBIEEgQSBBIEEgQSIuc3BsaXQoKSAoMTAgZWxlbWVudHMpIGhhcyB0aHJlZQotICAgcmVzaXplcywgdG8gc2l6ZXMgNCwgOCwgdGhlbiAxNi4gIE1vc3Qgb2JzZXJ2ZWQgc3RyaW5nIHNwbGl0cyBhcmUgZm9yIGh1bWFuCi0gICB0ZXh0IChyb3VnaGx5IDExIHdvcmRzIHBlciBsaW5lKSBhbmQgZmllbGQgZGVsaW1pdGVkIGRhdGEgKHVzdWFsbHkgMS0xMAotICAgZmllbGRzKS4gIEZvciBsYXJnZSBzdHJpbmdzIHRoZSBzcGxpdCBhbGdvcml0aG1zIGFyZSBiYW5kd2lkdGggbGltaXRlZAotICAgc28gaW5jcmVhc2luZyB0aGUgcHJlYWxsb2NhdGlvbiBsaWtlbHkgd2lsbCBub3QgaW1wcm92ZSB0aGluZ3MuKi8KLQotI2RlZmluZSBNQVhfUFJFQUxMT0MgMTIKLQotLyogNSBzcGxpdHMgZ2l2ZXMgNiBlbGVtZW50cyAqLwotI2RlZmluZSBQUkVBTExPQ19TSVpFKG1heHNwbGl0KSBcCi0gICAgKG1heHNwbGl0ID49IE1BWF9QUkVBTExPQyA/IE1BWF9QUkVBTExPQyA6IG1heHNwbGl0KzEpCi0KLSNkZWZpbmUgU1BMSVRfQVBQRU5EKGRhdGEsIGxlZnQsIHJpZ2h0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgc3RyID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoKGRhdGEpICsgKGxlZnQpLCAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJpZ2h0KSAtIChsZWZ0KSk7ICAgICBcCi0gICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5X0RFQ1JFRihzdHIpOwotCi0jZGVmaW5lIFNQTElUX0FERChkYXRhLCBsZWZ0LCByaWdodCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKChkYXRhKSArIChsZWZ0KSwgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyaWdodCkgLSAobGVmdCkpOyAgICAgXAotICAgIGlmIChzdHIgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvdW50IDwgTUFYX1BSRUFMTE9DKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBjb3VudCwgc3RyKTsgICAgICAgICAgICAgIFwKLSAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyKSkgeyAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBjb3VudCsrOyB9Ci0KLS8qIEFsd2F5cyBmb3JjZSB0aGUgbGlzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZS4gKi8KLSNkZWZpbmUgRklYX1BSRUFMTE9DX1NJWkUobGlzdCkgUHlfU0laRShsaXN0KSA9IGNvdW50Ci0KLQotUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCi1zcGxpdF9jaGFyKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuLCBjaGFyIGNoLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaiA8IGxlbikgJiYgKG1heGNvdW50LS0gPiAwKSkgewotICAgICAgICBmb3IoOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgICAgICAgIC8qIEkgZm91bmQgdGhhdCB1c2luZyBtZW1jaHIgbWFrZXMgbm8gZGlmZmVyZW5jZSAqLwotICAgICAgICAgICAgaWYgKHNbal0gPT0gY2gpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaSA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIGksIGxlbik7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotc3BsaXRfd2hpdGVzcGFjZShjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50ID0gMDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDwgbGVuOyApIHsKLSAgICAgICAgLyogZmluZCBhIHRva2VuICovCi0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X0lTU1BBQ0Uoc1tpXSkpCi0gICAgICAgICAgICBpKys7Ci0gICAgICAgIGogPSBpOwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiAhUHlfSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGogPCBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQUREKHMsIGosIGkpOwotICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBTUExJVF9BREQocywgaiwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIFB5RG9jX1NUUlZBUihzcGxpdF9fZG9jX18sCiAiQi5zcGxpdChbc2VwWywgbWF4c3BsaXRdXSkgLT4gbGlzdCBvZiBieXRlYXJyYXlzXG5cCiBcblwKQEAgLTIyMjIsMTQgKzE5OTgsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG4sIGksIGo7Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xLCBjb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwgbjsKKyAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTE7CiAgICAgY29uc3QgY2hhciAqcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgKnN1YjsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnN0ciwgKnN1Ym9iaiA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmxpc3QsICpzdWJvYmogPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2c3ViOwotI2lmZGVmIFVTRV9GQVNUCi0gICAgUHlfc3NpemVfdCBwb3M7Ci0jZW5kaWYKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE9uOnNwbGl0IiwgJnN1Ym9iaiwgJm1heHNwbGl0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjM3LDg2ICsyMDEwLDE4IEBACiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCi0gICAgICAgIHJldHVybiBzcGxpdF93aGl0ZXNwYWNlKHMsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7CiAKICAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZ2c3ViKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKIAotICAgIGlmIChuID09IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAobiA9PSAxKSB7Ci0gICAgICAgIGxpc3QgPSBzcGxpdF9jaGFyKHMsIGxlbiwgc3ViWzBdLCBtYXhzcGxpdCk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICB9Ci0KLSAgICBsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heHNwbGl0KSk7Ci0gICAgaWYgKGxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0jaWZkZWYgVVNFX0ZBU1QKLSAgICBpID0gaiA9IDA7Ci0gICAgd2hpbGUgKG1heHNwbGl0LS0gPiAwKSB7Ci0gICAgICAgIHBvcyA9IGZhc3RzZWFyY2gocytpLCBsZW4taSwgc3ViLCBuLCBGQVNUX1NFQVJDSCk7Ci0gICAgICAgIGlmIChwb3MgPCAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBqID0gaStwb3M7Ci0gICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgaSA9IGogKyBuOwotICAgIH0KLSNlbHNlCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaituIDw9IGxlbikgJiYgKG1heHNwbGl0LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaituIDw9IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHMsIGosIHN1YiwgbikpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIFNQTElUX0FERChzLCBpLCBsZW4pOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGxpc3QgPSBzdHJpbmdsaWJfc3BsaXQoCisgICAgICAgIChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgc3ViLCBuLCBtYXhzcGxpdAorICAgICAgICApOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwogICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgIHJldHVybiBOVUxMOwotfQotCi0vKiBzdHJpbmdsaWIncyBwYXJ0aXRpb24gc2hhcmVzIG51bGxieXRlcyBpbiBzb21lIGNhc2VzLgotICAgdW5kbyB0aGlzLCB3ZSBkb24ndCB3YW50IHRoZSBudWxsYnl0ZXMgdG8gYmUgc2hhcmVkLiAqLwotc3RhdGljIFB5T2JqZWN0ICoKLW1ha2VfbnVsbGJ5dGVzX3VuaXF1ZShQeU9iamVjdCAqcmVzdWx0KQotewotICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewotICAgICAgICBpbnQgaTsKLSAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2socmVzdWx0KSk7Ci0gICAgICAgIGFzc2VydChQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgPT0gMyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0dFVF9JVEVNKHJlc3VsdCwgaSkgPT0gKFB5T2JqZWN0ICopbnVsbGJ5dGVzKSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm5ldyA9IFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwotICAgICAgICAgICAgICAgIGlmIChuZXcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihudWxsYnl0ZXMpOwotICAgICAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCBpLCBuZXcpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihwYXJ0aXRpb25fX2RvY19fLApAQCAtMjM0Myw3ICsyMDQ4LDcgQEAKICAgICAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoYnl0ZXNlcCk7Ci0gICAgcmV0dXJuIG1ha2VfbnVsbGJ5dGVzX3VuaXF1ZShyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihycGFydGl0aW9uX19kb2NfXywKQEAgLTIzNzEsODEgKzIwNzYsNyBAQAogICAgICAgICAgICAgKTsKIAogICAgIFB5X0RFQ1JFRihieXRlc2VwKTsKLSAgICByZXR1cm4gbWFrZV9udWxsYnl0ZXNfdW5pcXVlKHJlc3VsdCk7Ci19Ci0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotcnNwbGl0X2NoYXIoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4sIGNoYXIgY2gsIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaSA9IGogPSBsZW4gLSAxOwotICAgIHdoaWxlICgoaSA+PSAwKSAmJiAobWF4Y291bnQtLSA+IDApKSB7Ci0gICAgICAgIGZvciAoOyBpID49IDA7IGktLSkgewotICAgICAgICAgICAgaWYgKHNbaV0gPT0gY2gpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSArIDEsIGogKyAxKTsKLSAgICAgICAgICAgICAgICBqID0gaSA9IGkgLSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChqID49IC0xKSB7Ci0gICAgICAgIFNQTElUX0FERChzLCAwLCBqICsgMSk7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF93aGl0ZXNwYWNlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3QgbGVuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpID0gaiA9IGxlbiAtIDE7IGkgPj0gMDsgKSB7Ci0gICAgICAgIC8qIGZpbmQgYSB0b2tlbiAqLwotICAgICAgICB3aGlsZSAoaSA+PSAwICYmIFB5X0lTU1BBQ0Uoc1tpXSkpCi0gICAgICAgICAgICBpLS07Ci0gICAgICAgIGogPSBpOwotICAgICAgICB3aGlsZSAoaSA+PSAwICYmICFQeV9JU1NQQUNFKHNbaV0pKQotICAgICAgICAgICAgaS0tOwotICAgICAgICBpZiAoaiA+IGkpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BREQocywgaSArIDEsIGogKyAxKTsKLSAgICAgICAgICAgIHdoaWxlIChpID49IDAgJiYgUHlfSVNTUEFDRShzW2ldKSkKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIFNQTElUX0FERChzLCAwLCBqICsgMSk7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIGlmIChQeUxpc3RfUmV2ZXJzZShsaXN0KSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihyc3BsaXRfX2RvY19fLApAQCAtMjQ2MCwxMCArMjA5MSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVhcnJheV9yc3BsaXQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIG4sIGksIGo7Ci0gICAgUHlfc3NpemVfdCBtYXhzcGxpdCA9IC0xLCBjb3VudCA9IDA7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSwgbjsKKyAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTE7CiAgICAgY29uc3QgY2hhciAqcyA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwgKnN1YjsKLSAgICBQeU9iamVjdCAqbGlzdCwgKnN0ciwgKnN1Ym9iaiA9IFB5X05vbmU7CisgICAgUHlPYmplY3QgKmxpc3QsICpzdWJvYmogPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2c3ViOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8T246cnNwbGl0IiwgJnN1Ym9iaiwgJm1heHNwbGl0KSkKQEAgLTI0NzIsNTQgKzIxMDMsMTggQEAKICAgICAgICAgbWF4c3BsaXQgPSBQWV9TU0laRV9UX01BWDsKIAogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKLSAgICAgICAgcmV0dXJuIHJzcGxpdF93aGl0ZXNwYWNlKHMsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCiAgICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CiAKLSAgICBpZiAobiA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZWxzZSBpZiAobiA9PSAxKSB7Ci0gICAgICAgIGxpc3QgPSByc3BsaXRfY2hhcihzLCBsZW4sIHN1YlswXSwgbWF4c3BsaXQpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGogPSBsZW47Ci0gICAgaSA9IGogLSBuOwotCi0gICAgd2hpbGUgKCAoaSA+PSAwKSAmJiAobWF4c3BsaXQtLSA+IDApICkgewotICAgICAgICBmb3IgKDsgaT49MDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHMsIGksIHN1YiwgbikpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSArIG4sIGopOwotICAgICAgICAgICAgICAgIGogPSBpOwotICAgICAgICAgICAgICAgIGkgLT0gbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICBTUExJVF9BREQocywgMCwgaik7Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOworICAgIGxpc3QgPSBzdHJpbmdsaWJfcnNwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCBzLCBsZW4sIHN1YiwgbiwgbWF4c3BsaXQKKyAgICAgICAgKTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKICAgICByZXR1cm4gbGlzdDsKLQotb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUihyZXZlcnNlX19kb2NfXywKQEAgLTI2OTUsOCArMjI5MCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgcG9wIGFuIGVtcHR5IGJ5dGVhcnJheSIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwb3AgZnJvbSBlbXB0eSBieXRlYXJyYXkiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICh3aGVyZSA8IDApCkBAIC0yODc1LDIyICsyNDcwLDIzIEBACiB9CiAKIFB5RG9jX1NUUlZBUihkZWNvZGVfZG9jLAotIkIuZGVjb2RlKFtlbmNvZGluZ1ssIGVycm9yc11dKSAtPiBzdHJcblwKKyJCLmRlY29kZShlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N0cmljdCcpIC0+IHN0clxuXAogXG5cCi1EZWNvZGUgQiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuIGVuY29kaW5nIGRlZmF1bHRzXG5cCi10byB0aGUgZGVmYXVsdCBlbmNvZGluZy4gZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3JcblwKK0RlY29kZSBCIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciBlbmNvZGluZy4gRGVmYXVsdCBlbmNvZGluZ1xuXAoraXMgJ3V0Zi04Jy4gZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3JcblwKIGhhbmRsaW5nIHNjaGVtZS4gIERlZmF1bHQgaXMgJ3N0cmljdCcgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZVxuXAogYSBVbmljb2RlRGVjb2RlRXJyb3IuICBPdGhlciBwb3NzaWJsZSB2YWx1ZXMgYXJlICdpZ25vcmUnIGFuZCAncmVwbGFjZSdcblwKIGFzIHdlbGwgYXMgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGlzXG5cCiBhYmxlIHRvIGhhbmRsZSBVbmljb2RlRGVjb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZWFycmF5X2RlY29kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitieXRlYXJyYXlfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBjb25zdCBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8c3M6ZGVjb2RlIiwgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkKICAgICAgICAgZW5jb2RpbmcgPSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nKCk7CkBAIC0yOTg0LDYgKzI1ODAsMjcgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLAorIkIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKSAtPiBsaXN0IG9mIGxpbmVzXG5cCitcblwKK1JldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIEIsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cblwKK0xpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kc1xuXAoraXMgZ2l2ZW4gYW5kIHRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2J5dGVhcnJheV9zcGxpdGxpbmVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQga2VlcGVuZHMgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpzcGxpdGxpbmVzIiwgJmtlZXBlbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0bGluZXMoCisgICAgICAgIChQeU9iamVjdCopIHNlbGYsIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZiksIGtlZXBlbmRzCisgICAgICAgICk7Cit9CisKIFB5RG9jX1NUUlZBUihmcm9taGV4X2RvYywKICJieXRlYXJyYXkuZnJvbWhleChzdHJpbmcpIC0+IGJ5dGVhcnJheSAoc3RhdGljIG1ldGhvZClcblwKIFxuXApAQCAtMzEyMCw3ICsyNzM3LDcgQEAKICAgICAgX1B5X2NhcGl0YWxpemVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfY2VudGVyLCBNRVRIX1ZBUkFSR1MsIGNlbnRlcl9fZG9jX199LAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCi0gICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTLCBkZWNvZGVfZG9jfSwKKyAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZGVjb2RlLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkZWNvZGVfZG9jfSwKICAgICB7ImVuZHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLCBlbmRzd2l0aF9fZG9jX199LAogICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAogICAgICBleHBhbmR0YWJzX19kb2NfX30sCkBAIC0zMTYyLDcgKzI3NzksNyBAQAogICAgIHsicnNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9yc3BsaXQsIE1FVEhfVkFSQVJHUywgcnNwbGl0X19kb2NfX30sCiAgICAgeyJyc3RyaXAiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X3JzdHJpcCwgTUVUSF9WQVJBUkdTLCByc3RyaXBfX2RvY19ffSwKICAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zcGxpdCwgTUVUSF9WQVJBUkdTLCBzcGxpdF9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTLAorICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfc3BsaXRsaW5lcywgTUVUSF9WQVJBUkdTLAogICAgICBzcGxpdGxpbmVzX19kb2NfX30sCiAgICAgeyJzdGFydHN3aXRoIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVhcnJheV9zdGFydHN3aXRoLCBNRVRIX1ZBUkFSR1MgLAogICAgICBzdGFydHN3aXRoX19kb2NfX30sCmRpZmYgLS1naXQgYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMgYi9PYmplY3RzL2J5dGVzb2JqZWN0LmMKaW5kZXggZjJlZTEzMS4uMzg0NThlZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc29iamVjdC5jCisrKyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwpAQCAtNTYsNyArNTYsNyBAQAogICAgSWYgYHN0cicgaXMgTlVMTCB0aGVuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSB3aWxsIGFsbG9jYXRlIGBzaXplKzEnCiAgICBieXRlcyAoc2V0dGluZyB0aGUgbGFzdCBieXRlIHRvIHRoZSBudWxsIHRlcm1pbmF0aW5nIGNoYXJhY3RlcikgYW5kIHlvdSBjYW4KICAgIGZpbGwgaW4gdGhlIGRhdGEgeW91cnNlbGYuICBJZiBgc3RyJyBpcyBub24tTlVMTCB0aGVuIHRoZSByZXN1bHRpbmcKLSAgIFB5U3RyaW5nIG9iamVjdCBtdXN0IGJlIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGFuZCB5b3UgbXVzdCBub3QgZmlsbCBpbiBub3IKKyAgIFB5Qnl0ZXMgb2JqZWN0IG11c3QgYmUgdHJlYXRlZCBhcyBpbW11dGFibGUgYW5kIHlvdSBtdXN0IG5vdCBmaWxsIGluIG5vcgogICAgYWx0ZXIgdGhlIGRhdGEgeW91cnNlbGYsIHNpbmNlIHRoZSBzdHJpbmdzIG1heSBiZSBzaGFyZWQuCiAKICAgIFRoZSBQeU9iamVjdCBtZW1iZXIgYG9wLT5vYl9zaXplJywgd2hpY2ggZGVub3RlcyB0aGUgbnVtYmVyIG9mICJleHRyYQpAQCAtMTczLDIwICsxNzMsMTIgQEAKICAgICBjaGFyICpzOwogICAgIFB5T2JqZWN0KiBzdHJpbmc7CiAKLSNpZmRlZiBWQV9MSVNUX0lTX0FSUkFZCi0gICAgUHlfTUVNQ1BZKGNvdW50LCB2YXJncywgc2l6ZW9mKHZhX2xpc3QpKTsKLSNlbHNlCi0jaWZkZWYgIF9fdmFfY29weQotICAgIF9fdmFfY29weShjb3VudCwgdmFyZ3MpOwotI2Vsc2UKLSAgICBjb3VudCA9IHZhcmdzOwotI2VuZGlmCi0jZW5kaWYKKyAgICBQeV9WQV9DT1BZKGNvdW50LCB2YXJncyk7CiAgICAgLyogc3RlcCAxOiBmaWd1cmUgb3V0IGhvdyBsYXJnZSBhIGJ1ZmZlciB3ZSBuZWVkICovCiAgICAgZm9yIChmID0gZm9ybWF0OyAqZjsgZisrKSB7CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHAgPSBmOwotICAgICAgICAgICAgd2hpbGUgKCorK2YgJiYgKmYgIT0gJyUnICYmICFJU0FMUEhBKCpmKSkKKyAgICAgICAgICAgIHdoaWxlICgqKytmICYmICpmICE9ICclJyAmJiAhUHlfSVNBTFBIQSgqZikpCiAgICAgICAgICAgICAgICAgOwogCiAgICAgICAgICAgICAvKiBza2lwIHRoZSAnbCcgb3IgJ3onIGluIHslbGQsICV6ZCwgJWx1LCAlenV9IHNpbmNlCkBAIC0yNTUsMTUgKzI0NywxNSBAQAogICAgICAgICAgICAgLyogcGFyc2UgdGhlIHdpZHRoLnByZWNpc2lvbiBwYXJ0ICh3ZSdyZSBvbmx5CiAgICAgICAgICAgICAgICBpbnRlcmVzdGVkIGluIHRoZSBwcmVjaXNpb24gdmFsdWUsIGlmIGFueSkgKi8KICAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgd2hpbGUgKElTRElHSVQoKmYpKQorICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKmYpKQogICAgICAgICAgICAgICAgIG4gPSAobioxMCkgKyAqZisrIC0gJzAnOwogICAgICAgICAgICAgaWYgKCpmID09ICcuJykgewogICAgICAgICAgICAgICAgIGYrKzsKICAgICAgICAgICAgICAgICBuID0gMDsKLSAgICAgICAgICAgICAgICB3aGlsZSAoSVNESUdJVCgqZikpCisgICAgICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKmYpKQogICAgICAgICAgICAgICAgICAgICBuID0gKG4qMTApICsgKmYrKyAtICcwJzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlICgqZiAmJiAqZiAhPSAnJScgJiYgIUlTQUxQSEEoKmYpKQorICAgICAgICAgICAgd2hpbGUgKCpmICYmICpmICE9ICclJyAmJiAhUHlfSVNBTFBIQSgqZikpCiAgICAgICAgICAgICAgICAgZisrOwogICAgICAgICAgICAgLyogaGFuZGxlIHRoZSBsb25nIGZsYWcsIGJ1dCBvbmx5IGZvciAlbGQgYW5kICVsdS4KICAgICAgICAgICAgICAgIG90aGVycyBjYW4gYmUgYWRkZWQgd2hlbiBuZWNlc3NhcnkuICovCkBAIC00NTQsMjIgKzQ0NiwyMiBAQAogICAgICAgICAgICAgKnArKyA9IGM7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICBpZiAocysxIDwgZW5kICYmIElTWERJR0lUKHNbMF0pICYmIElTWERJR0lUKHNbMV0pKSB7CisgICAgICAgICAgICBpZiAocysxIDwgZW5kICYmIFB5X0lTWERJR0lUKHNbMF0pICYmIFB5X0lTWERJR0lUKHNbMV0pKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHggPSAwOwogICAgICAgICAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqcyk7CiAgICAgICAgICAgICAgICAgcysrOwotICAgICAgICAgICAgICAgIGlmIChJU0RJR0lUKGMpKQorICAgICAgICAgICAgICAgIGlmIChQeV9JU0RJR0lUKGMpKQogICAgICAgICAgICAgICAgICAgICB4ID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChJU0xPV0VSKGMpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTTE9XRVIoYykpCiAgICAgICAgICAgICAgICAgICAgIHggPSAxMCArIGMgLSAnYSc7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB4ID0gMTAgKyBjIC0gJ0EnOwogICAgICAgICAgICAgICAgIHggPSB4IDw8IDQ7CiAgICAgICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCpzKTsKICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgaWYgKElTRElHSVQoYykpCisgICAgICAgICAgICAgICAgaWYgKFB5X0lTRElHSVQoYykpCiAgICAgICAgICAgICAgICAgICAgIHggKz0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChJU0xPV0VSKGMpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFB5X0lTTE9XRVIoYykpCiAgICAgICAgICAgICAgICAgICAgIHggKz0gMTAgKyBjIC0gJ2EnOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgeCArPSAxMCArIGMgLSAnQSc7CkBAIC01NjMsMjkgKzU1NSwxNSBAQAogLyogTWV0aG9kcyAqLwogCiAjaW5jbHVkZSAic3RyaW5nbGliL3N0cmluZ2RlZnMuaCIKLSNkZWZpbmUgU1RSSU5HTElCX0NIQVIgY2hhcgotCi0jZGVmaW5lIFNUUklOR0xJQl9DTVAgbWVtY21wCi0jZGVmaW5lIFNUUklOR0xJQl9MRU4gUHlCeXRlc19HRVRfU0laRQotI2RlZmluZSBTVFJJTkdMSUJfTkVXIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSNkZWZpbmUgU1RSSU5HTElCX1NUUiBQeUJ5dGVzX0FTX1NUUklORwotLyogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMSAqLwotCi0jZGVmaW5lIFNUUklOR0xJQl9FTVBUWSBudWxsc3RyaW5nCi0jZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCBQeUJ5dGVzX0NoZWNrRXhhY3QKLSNkZWZpbmUgU1RSSU5HTElCX01VVEFCTEUgMAogCiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKLQogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jdHlwZS5oIgotI2luY2x1ZGUgInN0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCIKIAotI2RlZmluZSBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcgX1B5Qnl0ZXNfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKLSNkZWZpbmUgX1B5X0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlIF9QeUJ5dGVzX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlCi0jaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmgiCiAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfUmVwcihQeU9iamVjdCAqb2JqLCBpbnQgc21hcnRxdW90ZXMpCkBAIC01OTMsMTMgKzU3MSwxNCBAQAogICAgIHN0YXRpYyBjb25zdCBjaGFyICpoZXhkaWdpdHMgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiAgICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCogb3AgPSAoUHlCeXRlc09iamVjdCopIG9iajsKICAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IFB5X1NJWkUob3ApOwotICAgIHNpemVfdCBuZXdzaXplID0gMyArIDQgKiBsZW5ndGg7CisgICAgc2l6ZV90IG5ld3NpemU7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgaWYgKG5ld3NpemUgPiBQWV9TU0laRV9UX01BWCB8fCAobmV3c2l6ZS0zKSAvIDQgIT0gbGVuZ3RoKSB7CisgICAgaWYgKGxlbmd0aCA+IChQWV9TU0laRV9UX01BWCAtIDMpIC8gNCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICJieXRlcyBvYmplY3QgaXMgdG9vIGxhcmdlIHRvIG1ha2UgcmVwciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgbmV3c2l6ZSA9IDMgKyA0ICogbGVuZ3RoOwogICAgIHYgPSBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoTlVMTCwgbmV3c2l6ZSk7CiAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTc0NiwxMiArNzI1LDEyIEBACiAgICAgLyogd2F0Y2ggb3V0IGZvciBvdmVyZmxvd3M6ICB0aGUgc2l6ZSBjYW4gb3ZlcmZsb3cgaW50LAogICAgICAqIGFuZCB0aGUgIyBvZiBieXRlcyBuZWVkZWQgY2FuIG92ZXJmbG93IHNpemVfdAogICAgICAqLwotICAgIHNpemUgPSBQeV9TSVpFKGEpICogbjsKLSAgICBpZiAobiAmJiBzaXplIC8gbiAhPSBQeV9TSVpFKGEpKSB7CisgICAgaWYgKG4gPiAwICYmIFB5X1NJWkUoYSkgPiBQWV9TU0laRV9UX01BWCAvIG4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAicmVwZWF0ZWQgYnl0ZXMgYXJlIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBzaXplID0gUHlfU0laRShhKSAqIG47CiAgICAgaWYgKHNpemUgPT0gUHlfU0laRShhKSAmJiBQeUJ5dGVzX0NoZWNrRXhhY3QoYSkpIHsKICAgICAgICAgUHlfSU5DUkVGKGEpOwogICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopYTsKQEAgLTg4OSwxMiArODY4LDEyIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIGJ5dGVzX2hhc2goUHlCeXRlc09iamVjdCAqYSkKIHsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGxlbjsKICAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpwOwotICAgIHJlZ2lzdGVyIGxvbmcgeDsKKyAgICByZWdpc3RlciBQeV9oYXNoX3QgeDsKIAogICAgIGlmIChhLT5vYl9zaGFzaCAhPSAtMSkKICAgICAgICAgcmV0dXJuIGEtPm9iX3NoYXNoOwpAQCAtOTMyLDcgKzkxMSw3IEBACiAgICAgICAgIGNoYXIqIHJlc3VsdF9idWY7CiAgICAgICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0KilpdGVtLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW5ndGgpIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMDE0LDEzMyArOTkzLDYgQEAKIAogI2RlZmluZSBTVFJJUE5BTUUoaSkgKHN0cmlwZm9ybWF0W2ldKzMpCiAKLQotLyogRG9uJ3QgY2FsbCBpZiBsZW5ndGggPCAyICovCi0jZGVmaW5lIFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIG9mZnNldCwgcGF0dGVybiwgbGVuZ3RoKSAgICAgICAgXAotICAodGFyZ2V0W29mZnNldF0gPT0gcGF0dGVyblswXSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgIHRhcmdldFtvZmZzZXQrbGVuZ3RoLTFdID09IHBhdHRlcm5bbGVuZ3RoLTFdICYmICAgICAgICAgICAgICBcCi0gICAhbWVtY21wKHRhcmdldCtvZmZzZXQrMSwgcGF0dGVybisxLCBsZW5ndGgtMikgKQotCi0KLS8qIE92ZXJhbGxvY2F0ZSB0aGUgaW5pdGlhbCBsaXN0IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHJlYWxsb2NzIGZvciBzbWFsbAotICAgc3BsaXQgc2l6ZXMuICBFZywgIkEgQSBBIEEgQSBBIEEgQSBBIEEiLnNwbGl0KCkgKDEwIGVsZW1lbnRzKSBoYXMgdGhyZWUKLSAgIHJlc2l6ZXMsIHRvIHNpemVzIDQsIDgsIHRoZW4gMTYuICBNb3N0IG9ic2VydmVkIHN0cmluZyBzcGxpdHMgYXJlIGZvciBodW1hbgotICAgdGV4dCAocm91Z2hseSAxMSB3b3JkcyBwZXIgbGluZSkgYW5kIGZpZWxkIGRlbGltaXRlZCBkYXRhICh1c3VhbGx5IDEtMTAKLSAgIGZpZWxkcykuICBGb3IgbGFyZ2Ugc3RyaW5ncyB0aGUgc3BsaXQgYWxnb3JpdGhtcyBhcmUgYmFuZHdpZHRoIGxpbWl0ZWQKLSAgIHNvIGluY3JlYXNpbmcgdGhlIHByZWFsbG9jYXRpb24gbGlrZWx5IHdpbGwgbm90IGltcHJvdmUgdGhpbmdzLiovCi0KLSNkZWZpbmUgTUFYX1BSRUFMTE9DIDEyCi0KLS8qIDUgc3BsaXRzIGdpdmVzIDYgZWxlbWVudHMgKi8KLSNkZWZpbmUgUFJFQUxMT0NfU0laRShtYXhzcGxpdCkgXAotICAgIChtYXhzcGxpdCA+PSBNQVhfUFJFQUxMT0MgPyBNQVhfUFJFQUxMT0MgOiBtYXhzcGxpdCsxKQotCi0jZGVmaW5lIFNQTElUX0FERChkYXRhLCBsZWZ0LCByaWdodCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgICAgICBcCi0gICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoY291bnQgPCBNQVhfUFJFQUxMT0MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBjb3VudCwgc3RyKTsgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3RyKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgY291bnQrKzsgfQotCi0vKiBBbHdheXMgZm9yY2UgdGhlIGxpc3QgdG8gdGhlIGV4cGVjdGVkIHNpemUuICovCi0jZGVmaW5lIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpIFB5X1NJWkUobGlzdCkgPSBjb3VudAotCi0jZGVmaW5lIFNLSVBfU1BBQ0UocywgaSwgbGVuKSAgICB7IHdoaWxlIChpPGxlbiAmJiAgSVNTUEFDRShzW2ldKSkgaSsrOyB9Ci0jZGVmaW5lIFNLSVBfTk9OU1BBQ0UocywgaSwgbGVuKSB7IHdoaWxlIChpPGxlbiAmJiAhSVNTUEFDRShzW2ldKSkgaSsrOyB9Ci0jZGVmaW5lIFJTS0lQX1NQQUNFKHMsIGkpICAgICAgICB7IHdoaWxlIChpPj0wICAmJiAgSVNTUEFDRShzW2ldKSkgaS0tOyB9Ci0jZGVmaW5lIFJTS0lQX05PTlNQQUNFKHMsIGkpICAgICB7IHdoaWxlIChpPj0wICAmJiAhSVNTUEFDRShzW2ldKSkgaS0tOyB9Ci0KLVB5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQotc3BsaXRfd2hpdGVzcGFjZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IGxlbiwgUHlfc3NpemVfdCBtYXhzcGxpdCkKLXsKLSAgICBjb25zdCBjaGFyICpzID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7Ci0gICAgUHlfc3NpemVfdCBpLCBqLCBjb3VudD0wOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpKTsKLQotICAgIGlmIChsaXN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaSA9IGogPSAwOwotCi0gICAgd2hpbGUgKG1heHNwbGl0LS0gPiAwKSB7Ci0gICAgICAgIFNLSVBfU1BBQ0UocywgaSwgbGVuKTsKLSAgICAgICAgaWYgKGk9PWxlbikgYnJlYWs7Ci0gICAgICAgIGogPSBpOyBpKys7Ci0gICAgICAgIFNLSVBfTk9OU1BBQ0UocywgaSwgbGVuKTsKLSAgICAgICAgaWYgKGogPT0gMCAmJiBpID09IGxlbiAmJiBQeUJ5dGVzX0NoZWNrRXhhY3Qoc2VsZikpIHsKLSAgICAgICAgICAgIC8qIE5vIHdoaXRlc3BhY2UgaW4gc2VsZiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLwotICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwotICAgICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXNlbGYpOwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFNQTElUX0FERChzLCBqLCBpKTsKLSAgICB9Ci0KLSAgICBpZiAoaSA8IGxlbikgewotICAgICAgICAvKiBPbmx5IG9jY3VycyB3aGVuIG1heHNwbGl0IHdhcyByZWFjaGVkICovCi0gICAgICAgIC8qIFNraXAgYW55IHJlbWFpbmluZyB3aGl0ZXNwYWNlIGFuZCBjb3B5IHRvIGVuZCBvZiBzdHJpbmcgKi8KLSAgICAgICAgU0tJUF9TUEFDRShzLCBpLCBsZW4pOwotICAgICAgICBpZiAoaSAhPSBsZW4pCi0gICAgICAgICAgICBTUExJVF9BREQocywgaSwgbGVuKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXNwbGl0X2NoYXIoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsZW4sIGNoYXIgY2gsIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgY29uc3QgY2hhciAqcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIFB5T2JqZWN0ICpsaXN0ID0gUHlMaXN0X05ldyhQUkVBTExPQ19TSVpFKG1heGNvdW50KSk7Ci0KLSAgICBpZiAobGlzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGkgPSBqID0gMDsKLSAgICB3aGlsZSAoKGogPCBsZW4pICYmIChtYXhjb3VudC0tID4gMCkpIHsKLSAgICAgICAgZm9yKDsgajxsZW47IGorKykgewotICAgICAgICAgICAgLyogSSBmb3VuZCB0aGF0IHVzaW5nIG1lbWNociBtYWtlcyBubyBkaWZmZXJlbmNlICovCi0gICAgICAgICAgICBpZiAoc1tqXSA9PSBjaCkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgICAgICAgICBpID0gaiA9IGogKyAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChpID09IDAgJiYgY291bnQgPT0gMCAmJiBQeUJ5dGVzX0NoZWNrRXhhY3Qoc2VsZikpIHsKLSAgICAgICAgLyogY2ggbm90IGluIHNlbGYsIHNvIGp1c3QgdXNlIHNlbGYgYXMgbGlzdFswXSAqLwotICAgICAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzZWxmKTsKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoaSA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIGksIGxlbik7Ci0gICAgfQotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCiBQeURvY19TVFJWQVIoc3BsaXRfX2RvY19fLAogIkIuc3BsaXQoW3NlcFssIG1heHNwbGl0XV0pIC0+IGxpc3Qgb2YgYnl0ZXNcblwKIFxuXApAQCAtMTE1Miw3NCArMTAwNCwyNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3NwbGl0KFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKSwgbiwgaSwgajsKLSAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTEsIGNvdW50PTA7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLCBuOworICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMTsKICAgICBjb25zdCBjaGFyICpzID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZiksICpzdWI7CiAgICAgUHlfYnVmZmVyIHZzdWI7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpzdHIsICpzdWJvYmogPSBQeV9Ob25lOwotI2lmZGVmIFVTRV9GQVNUCi0gICAgUHlfc3NpemVfdCBwb3M7Ci0jZW5kaWYKKyAgICBQeU9iamVjdCAqbGlzdCwgKnN1Ym9iaiA9IFB5X05vbmU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpzcGxpdCIsICZzdWJvYmosICZtYXhzcGxpdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChtYXhzcGxpdCA8IDApCiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQotICAgICAgICByZXR1cm4gc3BsaXRfd2hpdGVzcGFjZShzZWxmLCBsZW4sIG1heHNwbGl0KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwogCi0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG4gPT0gMSkgewotICAgICAgICBsaXN0ID0gc3BsaXRfY2hhcihzZWxmLCBsZW4sIHN1YlswXSwgbWF4c3BsaXQpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgfQotCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotI2lmZGVmIFVTRV9GQVNUCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlIChtYXhzcGxpdC0tID4gMCkgewotICAgICAgICBwb3MgPSBmYXN0c2VhcmNoKHMraSwgbGVuLWksIHN1YiwgbiwgRkFTVF9TRUFSQ0gpOwotICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBqID0gaStwb3M7Ci0gICAgICAgIFNQTElUX0FERChzLCBpLCBqKTsKLSAgICAgICAgaSA9IGogKyBuOwotICAgIH0KLSNlbHNlCi0gICAgaSA9IGogPSAwOwotICAgIHdoaWxlICgoaituIDw9IGxlbikgJiYgKG1heHNwbGl0LS0gPiAwKSkgewotICAgICAgICBmb3IgKDsgaituIDw9IGxlbjsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoUHlfU1RSSU5HX01BVENIKHMsIGosIHN1YiwgbikpIHsKLSAgICAgICAgICAgICAgICBTUExJVF9BREQocywgaSwgaik7Ci0gICAgICAgICAgICAgICAgaSA9IGogPSBqICsgbjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIFNQTElUX0FERChzLCBpLCBsZW4pOwotICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIGxpc3QgPSBzdHJpbmdsaWJfc3BsaXQoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBzdWIsIG4sIG1heHNwbGl0KTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKICAgICByZXR1cm4gbGlzdDsKLQotIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgIHJldHVybiBOVUxMOwogfQogCiBQeURvY19TVFJWQVIocGFydGl0aW9uX19kb2NfXywKQEAgLTEyNzcsOTAgKzEwODEsNiBAQAogICAgICAgICApOwogfQogCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF93aGl0ZXNwYWNlKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbGVuLCBQeV9zc2l6ZV90IG1heHNwbGl0KQotewotICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKTsKLSAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhzcGxpdCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IGxlbi0xOwotCi0gICAgd2hpbGUgKG1heHNwbGl0LS0gPiAwKSB7Ci0gICAgICAgIFJTS0lQX1NQQUNFKHMsIGkpOwotICAgICAgICBpZiAoaTwwKSBicmVhazsKLSAgICAgICAgaiA9IGk7IGktLTsKLSAgICAgICAgUlNLSVBfTk9OU1BBQ0UocywgaSk7Ci0gICAgICAgIGlmIChqID09IGxlbi0xICYmIGkgPCAwICYmIFB5Qnl0ZXNfQ2hlY2tFeGFjdChzZWxmKSkgewotICAgICAgICAgICAgLyogTm8gd2hpdGVzcGFjZSBpbiBzZWxmLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCi0gICAgICAgICAgICBQeV9JTkNSRUYoc2VsZik7Ci0gICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgU1BMSVRfQUREKHMsIGkgKyAxLCBqICsgMSk7Ci0gICAgfQotICAgIGlmIChpID49IDApIHsKLSAgICAgICAgLyogT25seSBvY2N1cnMgd2hlbiBtYXhzcGxpdCB3YXMgcmVhY2hlZC4gIFNraXAgYW55IHJlbWFpbmluZwotICAgICAgICAgICB3aGl0ZXNwYWNlIGFuZCBjb3B5IHRvIGJlZ2lubmluZyBvZiBzdHJpbmcuICovCi0gICAgICAgIFJTS0lQX1NQQUNFKHMsIGkpOwotICAgICAgICBpZiAoaSA+PSAwKQotICAgICAgICAgICAgU1BMSVRfQUREKHMsIDAsIGkgKyAxKTsKLQotICAgIH0KLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1QeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKLXJzcGxpdF9jaGFyKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgbGVuLCBjaGFyIGNoLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIGNvbnN0IGNoYXIgKnMgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOwotCi0gICAgaWYgKGxpc3QgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpID0gaiA9IGxlbiAtIDE7Ci0gICAgd2hpbGUgKChpID49IDApICYmIChtYXhjb3VudC0tID4gMCkpIHsKLSAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZiAoc1tpXSA9PSBjaCkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgICAgIGogPSBpID0gaSAtIDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGkgPCAwICYmIGNvdW50ID09IDAgJiYgUHlCeXRlc19DaGVja0V4YWN0KHNlbGYpKSB7Ci0gICAgICAgIC8qIGNoIG5vdCBpbiBzZWxmLCBzbyBqdXN0IHVzZSBzZWxmIGFzIGxpc3RbMF0gKi8KLSAgICAgICAgUHlfSU5DUkVGKHNlbGYpOwotICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc2VsZik7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIGVsc2UgaWYgKGogPj0gLTEpIHsKLSAgICAgICAgU1BMSVRfQUREKHMsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KIFB5RG9jX1NUUlZBUihyc3BsaXRfX2RvY19fLAogIkIucnNwbGl0KFtzZXBbLCBtYXhzcGxpdF1dKSAtPiBsaXN0IG9mIGJ5dGVzXG5cCiBcblwKQEAgLTEzNzQsNzEgKzEwOTQsMjggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc19yc3BsaXQoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLCBuLCBpLCBqOwotICAgIFB5X3NzaXplX3QgbWF4c3BsaXQgPSAtMSwgY291bnQ9MDsKLSAgICBjb25zdCBjaGFyICpzLCAqc3ViOworICAgIFB5X3NzaXplX3QgbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKSwgbjsKKyAgICBQeV9zc2l6ZV90IG1heHNwbGl0ID0gLTE7CisgICAgY29uc3QgY2hhciAqcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCAqc3ViOwogICAgIFB5X2J1ZmZlciB2c3ViOwotICAgIFB5T2JqZWN0ICpsaXN0LCAqc3RyLCAqc3Vib2JqID0gUHlfTm9uZTsKKyAgICBQeU9iamVjdCAqbGlzdCwgKnN1Ym9iaiA9IFB5X05vbmU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPbjpyc3BsaXQiLCAmc3Vib2JqLCAmbWF4c3BsaXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAobWF4c3BsaXQgPCAwKQogICAgICAgICBtYXhzcGxpdCA9IFBZX1NTSVpFX1RfTUFYOwogICAgIGlmIChzdWJvYmogPT0gUHlfTm9uZSkKLSAgICAgICAgcmV0dXJuIHJzcGxpdF93aGl0ZXNwYWNlKHNlbGYsIGxlbiwgbWF4c3BsaXQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnZzdWIpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3ViID0gdnN1Yi5idWY7CiAgICAgbiA9IHZzdWIubGVuOwogCi0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UgaWYgKG4gPT0gMSkgewotICAgICAgICBsaXN0ID0gcnNwbGl0X2NoYXIoc2VsZiwgbGVuLCBzdWJbMF0sIG1heHNwbGl0KTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgICAgIHJldHVybiBsaXN0OwotICAgIH0KLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4c3BsaXQpKTsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZzdWIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBqID0gbGVuOwotICAgIGkgPSBqIC0gbjsKLQotICAgIHMgPSBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKTsKLSAgICB3aGlsZSAoIChpID49IDApICYmIChtYXhzcGxpdC0tID4gMCkgKSB7Ci0gICAgICAgIGZvciAoOyBpPj0wOyBpLS0pIHsKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0gocywgaSwgc3ViLCBuKSkgewotICAgICAgICAgICAgICAgIFNQTElUX0FERChzLCBpICsgbiwgaik7Ci0gICAgICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgICAgICAgICAgaSAtPSBuOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIFNQTElUX0FERChzLCAwLCBqKTsKLSAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgbGlzdCA9IHN0cmluZ2xpYl9yc3BsaXQoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBzdWIsIG4sIG1heHNwbGl0KTsKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2c3ViKTsKICAgICByZXR1cm4gbGlzdDsKLQotb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmdnN1Yik7Ci0gICAgcmV0dXJuIE5VTEw7CiB9CiAKLSN1bmRlZiBTUExJVF9BREQKLSN1bmRlZiBNQVhfUFJFQUxMT0MKLSN1bmRlZiBQUkVBTExPQ19TSVpFCi0KIAogUHlEb2NfU1RSVkFSKGpvaW5fX2RvY19fLAogIkIuam9pbihpdGVyYWJsZV9vZl9ieXRlcykgLT4gYnl0ZXNcblwKQEAgLTE1NDUsMjAgKzEyMjIsMjAgQEAKICAgICByZXR1cm4gYnl0ZXNfam9pbihzZXAsIHgpOwogfQogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLWJ5dGVzX2FkanVzdF9pbmRpY2VzKFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICplbmQsIFB5X3NzaXplX3QgbGVuKQotewotICAgIGlmICgqZW5kID4gbGVuKQotICAgICAgICAqZW5kID0gbGVuOwotICAgIGVsc2UgaWYgKCplbmQgPCAwKQotICAgICAgICAqZW5kICs9IGxlbjsKLSAgICBpZiAoKmVuZCA8IDApCi0gICAgICAgICplbmQgPSAwOwotICAgIGlmICgqc3RhcnQgPCAwKQotICAgICAgICAqc3RhcnQgKz0gbGVuOwotICAgIGlmICgqc3RhcnQgPCAwKQotICAgICAgICAqc3RhcnQgPSAwOwotfQorLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbmQgPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCiBieXRlc19maW5kX2ludGVybmFsKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBpbnQgZGlyKQpAQCAtMTU5NSw3ICsxMjcyLDcgQEAKIFB5RG9jX1NUUlZBUihmaW5kX19kb2NfXywKICJCLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSkgLT4gaW50XG5cCiBcblwKLVJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIFMgd2hlcmUgc3Vic3RyaW5nIHN1YiBpcyBmb3VuZCxcblwKK1JldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIEIgd2hlcmUgc3Vic3RyaW5nIHN1YiBpcyBmb3VuZCxcblwKIHN1Y2ggdGhhdCBzdWIgaXMgY29udGFpbmVkIHdpdGhpbiBzW3N0YXJ0OmVuZF0uICBPcHRpb25hbFxuXAogYXJndW1lbnRzIHN0YXJ0IGFuZCBlbmQgYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXAogXG5cCkBAIC0xNzE5LDcgKzEzOTYsNyBAQAogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIElTU1BBQ0Uoc1tpXSkpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgUHlfSVNTUEFDRShzW2ldKSkgewogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTcyOCw3ICsxNDA1LDcgQEAKICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgewogICAgICAgICBkbyB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBJU1NQQUNFKHNbal0pKTsKKyAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmIFB5X0lTU1BBQ0Uoc1tqXSkpOwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xODA1LDcgKzE0ODIsNyBAQAogIkIuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSkgLT4gaW50XG5cCiBcblwKIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgc3ViIGluXG5cCi1zdHJpbmcgU1tzdGFydDplbmRdLiAgT3B0aW9uYWwgYXJndW1lbnRzIHN0YXJ0IGFuZCBlbmQgYXJlIGludGVycHJldGVkXG5cCitzdHJpbmcgQltzdGFydDplbmRdLiAgT3B0aW9uYWwgYXJndW1lbnRzIHN0YXJ0IGFuZCBlbmQgYXJlIGludGVycHJldGVkXG5cCiBhcyBpbiBzbGljZSBub3RhdGlvbi4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE4MjYsMTAgKzE1MDMsMTAgQEAKICAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoc3ViX29iaiwgJnN1YiwgJnN1Yl9sZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGJ5dGVzX2FkanVzdF9pbmRpY2VzKCZzdGFydCwgJmVuZCwgUHlCeXRlc19HRVRfU0laRShzZWxmKSk7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgUHlCeXRlc19HRVRfU0laRShzZWxmKSk7CiAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KAotICAgICAgICBzdHJpbmdsaWJfY291bnQoc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LCBzdWIsIHN1Yl9sZW4pCisgICAgICAgIHN0cmluZ2xpYl9jb3VudChzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yiwgc3ViX2xlbiwgUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgICk7CiB9CiAKQEAgLTE5NDYsOSArMTYyMyw2IEBACiAgICAgcmV0dXJuIF9QeV9ieXRlc19tYWtldHJhbnMoYXJncyk7CiB9CiAKLSNkZWZpbmUgRk9SV0FSRCAxCi0jZGVmaW5lIFJFVkVSU0UgLTEKLQogLyogZmluZCBhbmQgY291bnQgY2hhcmFjdGVycyBhbmQgc3Vic3RyaW5ncyAqLwogCiAjZGVmaW5lIGZpbmRjaGFyKHRhcmdldCwgdGFyZ2V0X2xlbiwgYykgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTk4NCw5NCArMTY1OCw2IEBACiAgICAgcmV0dXJuIGNvdW50OwogfQogCi1QeV9MT0NBTChQeV9zc2l6ZV90KQotZmluZHN0cmluZyhjb25zdCBjaGFyICp0YXJnZXQsIFB5X3NzaXplX3QgdGFyZ2V0X2xlbiwKLSAgICAgICAgICAgY29uc3QgY2hhciAqcGF0dGVybiwgUHlfc3NpemVfdCBwYXR0ZXJuX2xlbiwKLSAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwKLSAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsCi0gICAgICAgICAgIGludCBkaXJlY3Rpb24pCi17Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBzdGFydCArPSB0YXJnZXRfbGVuOwotICAgICAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICAgICAgc3RhcnQgPSAwOwotICAgIH0KLSAgICBpZiAoZW5kID4gdGFyZ2V0X2xlbikgewotICAgICAgICBlbmQgPSB0YXJnZXRfbGVuOwotICAgIH0gZWxzZSBpZiAoZW5kIDwgMCkgewotICAgICAgICBlbmQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKGVuZCA8IDApCi0gICAgICAgICAgICBlbmQgPSAwOwotICAgIH0KLQotICAgIC8qIHplcm8tbGVuZ3RoIHN1YnN0cmluZ3MgYWx3YXlzIG1hdGNoIGF0IHRoZSBmaXJzdCBhdHRlbXB0ICovCi0gICAgaWYgKHBhdHRlcm5fbGVuID09IDApCi0gICAgICAgIHJldHVybiAoZGlyZWN0aW9uID4gMCkgPyBzdGFydCA6IGVuZDsKLQotICAgIGVuZCAtPSBwYXR0ZXJuX2xlbjsKLQotICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7Ci0gICAgICAgIGZvciAoOyBlbmQgPj0gc3RhcnQ7IGVuZC0tKQotICAgICAgICAgICAgaWYgKFB5X1NUUklOR19NQVRDSCh0YXJnZXQsIGVuZCwgcGF0dGVybiwgcGF0dGVybl9sZW4pKQotICAgICAgICAgICAgICAgIHJldHVybiBlbmQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yICg7IHN0YXJ0IDw9IGVuZDsgc3RhcnQrKykKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBzdGFydCxwYXR0ZXJuLHBhdHRlcm5fbGVuKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7Ci0gICAgfQotICAgIHJldHVybiAtMTsKLX0KLQotUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCi1jb3VudHN0cmluZyhjb25zdCBjaGFyICp0YXJnZXQsIFB5X3NzaXplX3QgdGFyZ2V0X2xlbiwKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIFB5X3NzaXplX3QgcGF0dGVybl9sZW4sCi0gICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LAotICAgICAgICAgICAgUHlfc3NpemVfdCBlbmQsCi0gICAgICAgICAgICBpbnQgZGlyZWN0aW9uLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFB5X3NzaXplX3QgY291bnQ9MDsKLQotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgc3RhcnQgKz0gdGFyZ2V0X2xlbjsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICB9Ci0gICAgaWYgKGVuZCA+IHRhcmdldF9sZW4pIHsKLSAgICAgICAgZW5kID0gdGFyZ2V0X2xlbjsKLSAgICB9IGVsc2UgaWYgKGVuZCA8IDApIHsKLSAgICAgICAgZW5kICs9IHRhcmdldF9sZW47Ci0gICAgICAgIGlmIChlbmQgPCAwKQotICAgICAgICAgICAgZW5kID0gMDsKLSAgICB9Ci0KLSAgICAvKiB6ZXJvLWxlbmd0aCBzdWJzdHJpbmdzIG1hdGNoIGV2ZXJ5d2hlcmUgKi8KLSAgICBpZiAocGF0dGVybl9sZW4gPT0gMCB8fCBtYXhjb3VudCA9PSAwKSB7Ci0gICAgICAgIGlmICh0YXJnZXRfbGVuKzEgPCBtYXhjb3VudCkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXRfbGVuKzE7Ci0gICAgICAgIHJldHVybiBtYXhjb3VudDsKLSAgICB9Ci0KLSAgICBlbmQgLT0gcGF0dGVybl9sZW47Ci0gICAgaWYgKGRpcmVjdGlvbiA8IDApIHsKLSAgICAgICAgZm9yICg7IChlbmQgPj0gc3RhcnQpOyBlbmQtLSkKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBlbmQscGF0dGVybixwYXR0ZXJuX2xlbikpIHsKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICAgICAgICAgIGlmICgtLW1heGNvdW50IDw9IDApIGJyZWFrOwotICAgICAgICAgICAgICAgIGVuZCAtPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoOyAoc3RhcnQgPD0gZW5kKTsgc3RhcnQrKykKLSAgICAgICAgICAgIGlmIChQeV9TVFJJTkdfTUFUQ0godGFyZ2V0LCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwgcGF0dGVybl9sZW4pKSB7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpZiAoLS1tYXhjb3VudCA8PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBzdGFydCArPSBwYXR0ZXJuX2xlbi0xOwotICAgICAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KIAogLyogQWxnb3JpdGhtcyBmb3IgZGlmZmVyZW50IGNhc2VzIG9mIHN0cmluZyByZXBsYWNlbWVudCAqLwogCkBAIC0yMDgzLDMwICsxNjY5LDI4IEBACiB7CiAgICAgY2hhciAqc2VsZl9zLCAqcmVzdWx0X3M7CiAgICAgUHlfc3NpemVfdCBzZWxmX2xlbiwgcmVzdWx0X2xlbjsKLSAgICBQeV9zc2l6ZV90IGNvdW50LCBpLCBwcm9kdWN0OworICAgIFB5X3NzaXplX3QgY291bnQsIGk7CiAgICAgUHlCeXRlc09iamVjdCAqcmVzdWx0OwogCiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwogCi0gICAgLyogMSBhdCB0aGUgZW5kIHBsdXMgMSBhZnRlciBldmVyeSBjaGFyYWN0ZXIgKi8KLSAgICBjb3VudCA9IHNlbGZfbGVuKzE7Ci0gICAgaWYgKG1heGNvdW50IDwgY291bnQpCisgICAgLyogMSBhdCB0aGUgZW5kIHBsdXMgMSBhZnRlciBldmVyeSBjaGFyYWN0ZXI7CisgICAgICAgY291bnQgPSBtaW4obWF4Y291bnQsIHNlbGZfbGVuICsgMSkgKi8KKyAgICBpZiAobWF4Y291bnQgPD0gc2VsZl9sZW4pCiAgICAgICAgIGNvdW50ID0gbWF4Y291bnQ7CisgICAgZWxzZQorICAgICAgICAvKiBDYW4ndCBvdmVyZmxvdzogc2VsZl9sZW4gKyAxIDw9IG1heGNvdW50IDw9IFBZX1NTSVpFX1RfTUFYLiAqLworICAgICAgICBjb3VudCA9IHNlbGZfbGVuICsgMTsKIAogICAgIC8qIENoZWNrIGZvciBvdmVyZmxvdyAqLwogICAgIC8qICAgcmVzdWx0X2xlbiA9IGNvdW50ICogdG9fbGVuICsgc2VsZl9sZW47ICovCi0gICAgcHJvZHVjdCA9IGNvdW50ICogdG9fbGVuOwotICAgIGlmIChwcm9kdWN0IC8gdG9fbGVuICE9IGNvdW50KSB7CisgICAgYXNzZXJ0KGNvdW50ID4gMCk7CisgICAgaWYgKHRvX2xlbiA+IChQWV9TU0laRV9UX01BWCAtIHNlbGZfbGVuKSAvIGNvdW50KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2VtZW50IGJ5dGVzIGFyZSB0b28gbG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmVzdWx0X2xlbiA9IHByb2R1Y3QgKyBzZWxmX2xlbjsKLSAgICBpZiAocmVzdWx0X2xlbiA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVwbGFjZW1lbnQgYnl0ZXMgYXJlIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICByZXN1bHRfbGVuID0gY291bnQgKiB0b19sZW4gKyBzZWxmX2xlbjsKIAogICAgIGlmICghIChyZXN1bHQgPSAoUHlCeXRlc09iamVjdCAqKQogICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByZXN1bHRfbGVuKSkgKQpAQCAtMjE5MiwxMCArMTc3Niw5IEBACiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwogICAgIHNlbGZfcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4Y291bnQpOworICAgIGNvdW50ID0gc3RyaW5nbGliX2NvdW50KHNlbGZfcywgc2VsZl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjb3VudCk7CiAKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAvKiBubyBtYXRjaGVzICovCkBAIC0yMjE0LDkgKzE3OTcsOSBAQAogICAgIHN0YXJ0ID0gc2VsZl9zOwogICAgIGVuZCA9IHNlbGZfcyArIHNlbGZfbGVuOwogICAgIHdoaWxlIChjb3VudC0tID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHN0YXJ0LCBlbmQtc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbmQtc3RhcnQsIEZPUldBUkQpOworICAgICAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzdGFydCwgZW5kLXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgaWYgKG9mZnNldCA9PSAtMSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBuZXh0ID0gc3RhcnQgKyBvZmZzZXQ7CkBAIC0yMjkyLDkgKzE4NzUsOSBAQAogICAgIHNlbGZfcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpOwogICAgIHNlbGZfbGVuID0gUHlCeXRlc19HRVRfU0laRShzZWxmKTsKIAotICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc2VsZl9zLCBzZWxmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCBzZWxmX2xlbiwgRk9SV0FSRCk7CisgICAgb2Zmc2V0ID0gc3RyaW5nbGliX2ZpbmQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgIGlmIChvZmZzZXQgPT0gLTEpIHsKICAgICAgICAgLyogTm8gbWF0Y2hlczsgcmV0dXJuIHRoZSBvcmlnaW5hbCBzdHJpbmcgKi8KICAgICAgICAgcmV0dXJuIHJldHVybl9zZWxmKHNlbGYpOwpAQCAtMjMxNCw5ICsxODk3LDkgQEAKICAgICBlbmQgPSByZXN1bHRfcyArIHNlbGZfbGVuOwogCiAgICAgd2hpbGUgKCAtLW1heGNvdW50ID4gMCkgewotICAgICAgICBvZmZzZXQgPSBmaW5kc3RyaW5nKHN0YXJ0LCBlbmQtc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBlbmQtc3RhcnQsIEZPUldBUkQpOworICAgICAgICBvZmZzZXQgPSBzdHJpbmdsaWJfZmluZChzdGFydCwgZW5kLXN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgaWYgKG9mZnNldD09LTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgUHlfTUVNQ1BZKHN0YXJ0K29mZnNldCwgdG9fcywgZnJvbV9sZW4pOwpAQCAtMjMzNiw3ICsxOTE5LDcgQEAKICAgICBjaGFyICpzZWxmX3MsICpyZXN1bHRfczsKICAgICBjaGFyICpzdGFydCwgKm5leHQsICplbmQ7CiAgICAgUHlfc3NpemVfdCBzZWxmX2xlbiwgcmVzdWx0X2xlbjsKLSAgICBQeV9zc2l6ZV90IGNvdW50LCBwcm9kdWN0OworICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgUHlCeXRlc09iamVjdCAqcmVzdWx0OwogCiAgICAgc2VsZl9zID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7CkBAIC0yMzUwLDE4ICsxOTMzLDEzIEBACiAKICAgICAvKiB1c2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBjdXJyZW50IGFuZCBuZXcsIGhlbmNlIHRoZSAiLTEiICovCiAgICAgLyogICByZXN1bHRfbGVuID0gc2VsZl9sZW4gKyBjb3VudCAqICh0b19sZW4tMSkgICovCi0gICAgcHJvZHVjdCA9IGNvdW50ICogKHRvX2xlbi0xKTsKLSAgICBpZiAocHJvZHVjdCAvICh0b19sZW4tMSkgIT0gY291bnQpIHsKKyAgICBhc3NlcnQoY291bnQgPiAwKTsKKyAgICBpZiAodG9fbGVuIC0gMSA+IChQWV9TU0laRV9UX01BWCAtIHNlbGZfbGVuKSAvIGNvdW50KSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2VtZW50IGJ5dGVzIGFyZSB0b28gbG9uZyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgcHJvZHVjdDsKLSAgICBpZiAocmVzdWx0X2xlbiA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVwbGFjbWVudCBieXRlcyBhcmUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIHJlc3VsdF9sZW4gPSBzZWxmX2xlbiArIGNvdW50ICogKHRvX2xlbiAtIDEpOwogCiAgICAgaWYgKCAocmVzdWx0ID0gKFB5Qnl0ZXNPYmplY3QgKikKICAgICAgICAgICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHJlc3VsdF9sZW4pKSA9PSBOVUxMKQpAQCAtMjQwNCwxNSArMTk4MiwxNiBAQAogICAgIGNoYXIgKnNlbGZfcywgKnJlc3VsdF9zOwogICAgIGNoYXIgKnN0YXJ0LCAqbmV4dCwgKmVuZDsKICAgICBQeV9zc2l6ZV90IHNlbGZfbGVuLCByZXN1bHRfbGVuOwotICAgIFB5X3NzaXplX3QgY291bnQsIG9mZnNldCwgcHJvZHVjdDsKKyAgICBQeV9zc2l6ZV90IGNvdW50LCBvZmZzZXQ7CiAgICAgUHlCeXRlc09iamVjdCAqcmVzdWx0OwogCiAgICAgc2VsZl9zID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7CiAgICAgc2VsZl9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwogCi0gICAgY291bnQgPSBjb3VudHN0cmluZyhzZWxmX3MsIHNlbGZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlbGZfbGVuLCBGT1JXQVJELCBtYXhjb3VudCk7CisgICAgY291bnQgPSBzdHJpbmdsaWJfY291bnQoc2VsZl9zLCBzZWxmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKKwogICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgIC8qIG5vIG1hdGNoZXMsIHJldHVybiB1bmNoYW5nZWQgKi8KICAgICAgICAgcmV0dXJuIHJldHVybl9zZWxmKHNlbGYpOwpAQCAtMjQyMCwxOCArMTk5OSwxMyBAQAogCiAgICAgLyogQ2hlY2sgZm9yIG92ZXJmbG93ICovCiAgICAgLyogICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgY291bnQgKiAodG9fbGVuLWZyb21fbGVuKSAqLwotICAgIHByb2R1Y3QgPSBjb3VudCAqICh0b19sZW4tZnJvbV9sZW4pOwotICAgIGlmIChwcm9kdWN0IC8gKHRvX2xlbi1mcm9tX2xlbikgIT0gY291bnQpIHsKKyAgICBhc3NlcnQoY291bnQgPiAwKTsKKyAgICBpZiAodG9fbGVuIC0gZnJvbV9sZW4gPiAoUFlfU1NJWkVfVF9NQVggLSBzZWxmX2xlbikgLyBjb3VudCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJyZXBsYWNlbWVudCBieXRlcyBhcmUgdG9vIGxvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJlc3VsdF9sZW4gPSBzZWxmX2xlbiArIHByb2R1Y3Q7Ci0gICAgaWYgKHJlc3VsdF9sZW4gPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2VtZW50IGJ5dGVzIGFyZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgcmVzdWx0X2xlbiA9IHNlbGZfbGVuICsgY291bnQgKiAodG9fbGVuLWZyb21fbGVuKTsKIAogICAgIGlmICggKHJlc3VsdCA9IChQeUJ5dGVzT2JqZWN0ICopCiAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByZXN1bHRfbGVuKSkgPT0gTlVMTCkKQEAgLTI0NDEsOSArMjAxNSw5IEBACiAgICAgc3RhcnQgPSBzZWxmX3M7CiAgICAgZW5kID0gc2VsZl9zICsgc2VsZl9sZW47CiAgICAgd2hpbGUgKGNvdW50LS0gPiAwKSB7Ci0gICAgICAgIG9mZnNldCA9IGZpbmRzdHJpbmcoc3RhcnQsIGVuZC1zdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX3MsIGZyb21fbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGVuZC1zdGFydCwgRk9SV0FSRCk7CisgICAgICAgIG9mZnNldCA9IHN0cmluZ2xpYl9maW5kKHN0YXJ0LCBlbmQtc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21fcywgZnJvbV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwogICAgICAgICBpZiAob2Zmc2V0ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5leHQgPSBzdGFydCtvZmZzZXQ7CkBAIC0yNjAxLDcgKzIxNzUsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RyID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7CiAKLSAgICBieXRlc19hZGp1c3RfaW5kaWNlcygmc3RhcnQsICZlbmQsIGxlbik7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKTsKIAogICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7CiAgICAgICAgIC8qIHN0YXJ0c3dpdGggKi8KQEAgLTI3MTAsMjIgKzIyODQsMjMgQEAKIAogCiBQeURvY19TVFJWQVIoZGVjb2RlX19kb2NfXywKLSJCLmRlY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSkgLT4gc3RyXG5cCisiQi5kZWNvZGUoZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKSAtPiBzdHJcblwKIFxuXAotRGVjb2RlIFMgdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yIGVuY29kaW5nLiBlbmNvZGluZyBkZWZhdWx0c1xuXAotdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcuIGVycm9ycyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG5cCitEZWNvZGUgQiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuIERlZmF1bHQgZW5jb2RpbmdcblwKK2lzICd1dGYtOCcuIGVycm9ycyBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50IGVycm9yXG5cCiBoYW5kbGluZyBzY2hlbWUuICBEZWZhdWx0IGlzICdzdHJpY3QnIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2VcblwKIGEgVW5pY29kZURlY29kZUVycm9yLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlJyBhbmQgJ3JlcGxhY2UnXG5cCiBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZCB3aXRoIGNvZGVjcy5yZWdpc3Rlcl9lcnJvciB0aGF0IGlzXG5cCiBhYmxlIHRvIGhhbmRsZSBVbmljb2RlRGVjb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfZGVjb2RlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2J5dGVzX2RlY29kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHNzOmRlY29kZSIsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmRlY29kZSIsIGt3bGlzdCwgJmVuY29kaW5nLCAmZXJyb3JzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwpCiAgICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwpAQCAtMjczMyw2ICsyMzA4LDI4IEBACiB9CiAKIAorUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLAorIkIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKSAtPiBsaXN0IG9mIGxpbmVzXG5cCitcblwKK1JldHVybiBhIGxpc3Qgb2YgdGhlIGxpbmVzIGluIEIsIGJyZWFraW5nIGF0IGxpbmUgYm91bmRhcmllcy5cblwKK0xpbmUgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyBrZWVwZW5kc1xuXAoraXMgZ2l2ZW4gYW5kIHRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2J5dGVzX3NwbGl0bGluZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBrZWVwZW5kcyA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOnNwbGl0bGluZXMiLCAma2VlcGVuZHMpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBzdHJpbmdsaWJfc3BsaXRsaW5lcygKKyAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoc2VsZiksCisgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZiksIGtlZXBlbmRzCisgICAgICAgICk7Cit9CisKKwogUHlEb2NfU1RSVkFSKGZyb21oZXhfZG9jLAogImJ5dGVzLmZyb21oZXgoc3RyaW5nKSAtPiBieXRlc1xuXAogXG5cCkBAIC0yNzQ1LDExICsyMzQyLDExIEBACiB7CiAgICAgaWYgKGMgPj0gMTI4KQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKElTRElHSVQoYykpCisgICAgaWYgKFB5X0lTRElHSVQoYykpCiAgICAgICAgIHJldHVybiBjIC0gJzAnOwogICAgIGVsc2UgewotICAgICAgICBpZiAoSVNVUFBFUihjKSkKLSAgICAgICAgICAgIGMgPSBUT0xPV0VSKGMpOworICAgICAgICBpZiAoUHlfSVNVUFBFUihjKSkKKyAgICAgICAgICAgIGMgPSBQeV9UT0xPV0VSKGMpOwogICAgICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCiAgICAgICAgICAgICByZXR1cm4gYyAtICdhJyArIDEwOwogICAgIH0KQEAgLTI4MTUsNyArMjQxMiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfZ2V0bmV3YXJncyhQeUJ5dGVzT2JqZWN0ICp2KQogewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIocyMpIiwgdi0+b2Jfc3ZhbCwgUHlfU0laRSh2KSk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIih5IykiLCB2LT5vYl9zdmFsLCBQeV9TSVpFKHYpKTsKIH0KIAogCkBAIC0yODI2LDcgKzI0MjMsNyBAQAogICAgICBfUHlfY2FwaXRhbGl6ZV9fZG9jX199LAogICAgIHsiY2VudGVyIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbilieXRlc19jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTLCBkZWNvZGVfX2RvY19ffSwKKyAgICB7ImRlY29kZSIsIChQeUNGdW5jdGlvbilieXRlc19kZWNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGRlY29kZV9fZG9jX199LAogICAgIHsiZW5kc3dpdGgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywKICAgICAgZW5kc3dpdGhfX2RvY19ffSwKICAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKQEAgLTI4NjUsNyArMjQ2Miw3IEBACiAgICAgeyJyc3BsaXQiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfcnNwbGl0LCBNRVRIX1ZBUkFSR1MsIHJzcGxpdF9fZG9jX199LAogICAgIHsicnN0cmlwIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3JzdHJpcCwgTUVUSF9WQVJBUkdTLCByc3RyaXBfX2RvY19ffSwKICAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NwbGl0LCBNRVRIX1ZBUkFSR1MsIHNwbGl0X19kb2NfX30sCi0gICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKXN0cmluZ2xpYl9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX3NwbGl0bGluZXMsIE1FVEhfVkFSQVJHUywKICAgICAgc3BsaXRsaW5lc19fZG9jX199LAogICAgIHsic3RhcnRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19zdGFydHN3aXRoLCBNRVRIX1ZBUkFSR1MsCiAgICAgIHN0YXJ0c3dpdGhfX2RvY19ffSwKQEAgLTI4OTIsNiArMjQ4OSw3IEBACiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5ldyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic291cmNlIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwogCiAgICAgaWYgKHR5cGUgIT0gJlB5Qnl0ZXNfVHlwZSkKQEAgLTI5MjIsMjggKzI1MjAsNyBAQAogICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVjayhuZXcpKTsKICAgICAgICAgcmV0dXJuIG5ldzsKICAgICB9Ci0KLSAgICAvKiBJZiBpdCdzIG5vdCB1bmljb2RlLCB0aGVyZSBjYW4ndCBiZSBlbmNvZGluZyBvciBlcnJvcnMgKi8KLSAgICBpZiAoZW5jb2RpbmcgIT0gTlVMTCB8fCBlcnJvcnMgIT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImVuY29kaW5nIG9yIGVycm9ycyB3aXRob3V0IGEgc3RyaW5nIGFyZ3VtZW50Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlPYmplY3RfQnl0ZXMoeCk7Ci19Ci0KLVB5T2JqZWN0ICoKLVB5Qnl0ZXNfRnJvbU9iamVjdChQeU9iamVjdCAqeCkKLXsKLSAgICBQeU9iamVjdCAqbmV3LCAqaXQ7Ci0gICAgUHlfc3NpemVfdCBpLCBzaXplOwotCi0gICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogSXMgaXQgYW4gaW50PyAqLworICAgIC8qIElzIGl0IGFuIGludGVnZXI/ICovCiAgICAgc2l6ZSA9IFB5TnVtYmVyX0FzU3NpemVfdCh4LCBQeUV4Y19PdmVyZmxvd0Vycm9yKTsKICAgICBpZiAoc2l6ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQpAQCAtMjk2NSw2ICsyNTQyLDI1IEBACiAgICAgICAgIHJldHVybiBuZXc7CiAgICAgfQogCisgICAgLyogSWYgaXQncyBub3QgdW5pY29kZSwgdGhlcmUgY2FuJ3QgYmUgZW5jb2Rpbmcgb3IgZXJyb3JzICovCisgICAgaWYgKGVuY29kaW5nICE9IE5VTEwgfHwgZXJyb3JzICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJlbmNvZGluZyBvciBlcnJvcnMgd2l0aG91dCBhIHN0cmluZyBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIFB5T2JqZWN0X0J5dGVzKHgpOworfQorCitQeU9iamVjdCAqCitQeUJ5dGVzX0Zyb21PYmplY3QoUHlPYmplY3QgKngpCit7CisgICAgUHlPYmplY3QgKm5ldywgKml0OworICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKKworICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICAvKiBVc2UgdGhlIG1vZGVybiBidWZmZXIgaW50ZXJmYWNlICovCiAgICAgaWYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKHgpKSB7CiAgICAgICAgIFB5X2J1ZmZlciB2aWV3OwpAQCAtMjk4NCwxOCArMjU4MCw2OCBAQAogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY29udmVydCB1bmljb2RlIG9iamVjdCB0byBieXRlcyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlMaXN0X0NoZWNrRXhhY3QoeCkpIHsKKyAgICAgICAgbmV3ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9TSVpFKHgpKTsKKyAgICAgICAgaWYgKG5ldyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHgpOyBpKyspIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgdmFsdWUgPSBQeU51bWJlcl9Bc1NzaXplX3QoCisgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9JVEVNKHgsIGkpLCBQeUV4Y19WYWx1ZUVycm9yKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5ldyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID49IDI1NikgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMgbXVzdCBiZSBpbiByYW5nZSgwLCAyNTYpIik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5ldyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoKFB5Qnl0ZXNPYmplY3QgKiluZXcpLT5vYl9zdmFsW2ldID0gKGNoYXIpIHZhbHVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBuZXc7CisgICAgfQorICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3QoeCkpIHsKKyAgICAgICAgbmV3ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9TSVpFKHgpKTsKKyAgICAgICAgaWYgKG5ldyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHgpOyBpKyspIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgdmFsdWUgPSBQeU51bWJlcl9Bc1NzaXplX3QoCisgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTSh4LCBpKSwgUHlFeGNfVmFsdWVFcnJvcik7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXcpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+PSAyNTYpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzIG11c3QgYmUgaW4gcmFuZ2UoMCwgMjU2KSIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXcpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKChQeUJ5dGVzT2JqZWN0ICopbmV3KS0+b2Jfc3ZhbFtpXSA9IChjaGFyKSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3OworICAgIH0KIAogICAgIC8qIEZvciBpdGVyYXRvciB2ZXJzaW9uLCBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXNpemUgYXMgbmVlZGVkICovCi0gICAgLyogWFhYKGdiKTogaXMgNjQgYSBnb29kIHZhbHVlPyBhbHNvLCBvcHRpbWl6ZSBpZiBsZW5ndGggaXMga25vd24gKi8KLSAgICAvKiBYWFgoZ3VpZG8pOiBwZXJoYXBzIHVzZSBQeXNlcXVlbmNlX0Zhc3QoKSAtLSBJIGNhbid0IGltYWdpbmUgdGhlCi0gICAgICAgaW5wdXQgYmVpbmcgYSB0cnVseSBsb25nIGl0ZXJhdG9yLiAqLwotICAgIHNpemUgPSA2NDsKKyAgICBzaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoeCwgNjQpOworICAgIGlmIChzaXplID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIEFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUgdG8gcHJldmVudCBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCkgZnJvbQorICAgICAgIHJldHVybmluZyBhIHNoYXJlZCBlbXB0eSBieXRlcyBzdHJpbmcuIFRoaXMgcmVxdWlyZWQgYmVjYXVzZSB3ZQorICAgICAgIHdhbnQgdG8gY2FsbCBfUHlCeXRlc19SZXNpemUoKSB0aGUgcmV0dXJuZWQgb2JqZWN0LCB3aGljaCB3ZSBjYW4KKyAgICAgICBvbmx5IGRvIG9uIGJ5dGVzIG9iamVjdHMgd2l0aCByZWZjb3VudCA9PSAxLiAqLworICAgIHNpemUgKz0gMTsKICAgICBuZXcgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUpOwogICAgIGlmIChuZXcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggT3B0aW1pemUgdGhpcyBpZiB0aGUgYXJndW1lbnRzIGlzIGEgbGlzdCwgdHVwbGUgKi8KLQogICAgIC8qIEdldCB0aGUgaXRlcmF0b3IgKi8KICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoeCk7CiAgICAgaWYgKGl0ID09IE5VTEwpCkBAIC0zMDI5LDcgKzI2NzUsNyBAQAogCiAgICAgICAgIC8qIEFwcGVuZCB0aGUgYnl0ZSAqLwogICAgICAgICBpZiAoaSA+PSBzaXplKSB7Ci0gICAgICAgICAgICBzaXplICo9IDI7CisgICAgICAgICAgICBzaXplID0gMiAqIHNpemUgKyAxOwogICAgICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmbmV3LCBzaXplKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQpAQCAtMzIwMCw3ICsyODQ2LDcgQEAKIC8qIF9QeUJ5dGVzX0Zvcm1hdExvbmcgZW11bGF0ZXMgdGhlIGZvcm1hdCBjb2RlcyBkLCB1LCBvLCB4IGFuZCBYLCBhbmQKICAqIHRoZSBGX0FMVCBmbGFnLCBmb3IgUHl0aG9uJ3MgbG9uZyAodW5ib3VuZGVkKSBpbnRzLiAgSXQncyBub3QgdXNlZCBmb3IKICAqIFB5dGhvbidzIHJlZ3VsYXIgaW50cy4KLSAqIFJldHVybiB2YWx1ZTogIGEgbmV3IFB5U3RyaW5nKiwgb3IgTlVMTCBpZiBlcnJvci4KKyAqIFJldHVybiB2YWx1ZTogIGEgbmV3IFB5Qnl0ZXMqLCBvciBOVUxMIGlmIGVycm9yLgogICogIC4gICpwYnVmIGlzIHNldCB0byBwb2ludCBpbnRvIGl0LAogICogICAgICpwbGVuIHNldCB0byB0aGUgIyBvZiBjaGFycyBmb2xsb3dpbmcgdGhhdC4KICAqICAgICBDYWxsZXIgbXVzdCBkZWNyZWYgaXQgd2hlbiBkb25lIHVzaW5nIHBidWYuCmRpZmYgLS1naXQgYS9PYmplY3RzL2NhcHN1bGUuYyBiL09iamVjdHMvY2Fwc3VsZS5jCmluZGV4IGUyNWFmNmMuLmFjZDNkZTYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2Fwc3VsZS5jCisrKyBiL09iamVjdHMvY2Fwc3VsZS5jCkBAIC0yOTgsMjcgKzI5OCwyNyBAQAogCiBQeVR5cGVPYmplY3QgUHlDYXBzdWxlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgICAiUHlDYXBzdWxlIiwJCS8qdHBfbmFtZSovCi0gICAgc2l6ZW9mKFB5Q2Fwc3VsZSksCQkvKnRwX2Jhc2ljc2l6ZSovCi0gICAgMCwJCQkJLyp0cF9pdGVtc2l6ZSovCisgICAgIlB5Q2Fwc3VsZSIsICAgICAgICAgICAgICAgIC8qdHBfbmFtZSovCisgICAgc2l6ZW9mKFB5Q2Fwc3VsZSksICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSovCiAgICAgLyogbWV0aG9kcyAqLwogICAgIGNhcHN1bGVfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KLSAgICAwLAkJCQkvKnRwX3ByaW50Ki8KLSAgICAwLAkJCQkvKnRwX2dldGF0dHIqLwotICAgIDAsCQkJCS8qdHBfc2V0YXR0ciovCi0gICAgMCwJCQkJLyp0cF9yZXNlcnZlZCovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KICAgICBjYXBzdWxlX3JlcHIsIC8qdHBfcmVwciovCi0gICAgMCwJCQkJLyp0cF9hc19udW1iZXIqLwotICAgIDAsCQkJCS8qdHBfYXNfc2VxdWVuY2UqLwotICAgIDAsCQkJCS8qdHBfYXNfbWFwcGluZyovCi0gICAgMCwJCQkJLyp0cF9oYXNoKi8KLSAgICAwLAkJCQkvKnRwX2NhbGwqLwotICAgIDAsCQkJCS8qdHBfc3RyKi8KLSAgICAwLAkJCQkvKnRwX2dldGF0dHJvKi8KLSAgICAwLAkJCQkvKnRwX3NldGF0dHJvKi8KLSAgICAwLAkJCQkvKnRwX2FzX2J1ZmZlciovCi0gICAgMCwJCQkJLyp0cF9mbGFncyovCi0gICAgUHlDYXBzdWxlX1R5cGVfX2RvY19fCS8qdHBfZG9jKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCisgICAgUHlDYXBzdWxlX1R5cGVfX2RvY19fICAgICAgIC8qdHBfZG9jKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9jbGFzc29iamVjdC5jIGIvT2JqZWN0cy9jbGFzc29iamVjdC5jCmluZGV4IGFmZDRlYzMuLjZkZjkzMGYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY2xhc3NvYmplY3QuYworKysgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKQEAgLTI2MywxMCArMjYzLDEwIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIG1ldGhvZF9oYXNoKFB5TWV0aG9kT2JqZWN0ICphKQogewotICAgIGxvbmcgeCwgeTsKKyAgICBQeV9oYXNoX3QgeCwgeTsKICAgICBpZiAoYS0+aW1fc2VsZiA9PSBOVUxMKQogICAgICAgICB4ID0gUHlPYmplY3RfSGFzaChQeV9Ob25lKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9PYmplY3RzL2NvYmplY3QuYyBiL09iamVjdHMvY29iamVjdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjkyMTUwLi4wMDAwMDAwCi0tLSBhL09iamVjdHMvY29iamVjdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLQotLyogV3JhcCB2b2lkKiBwb2ludGVycyB0byBiZSBwYXNzZWQgYmV0d2VlbiBDIG1vZHVsZXMgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0KLS8qIERlY2xhcmF0aW9ucyBmb3Igb2JqZWN0cyBvZiB0eXBlIFB5Q09iamVjdCAqLwotCi10eXBlZGVmIHZvaWQgKCpkZXN0cnVjdG9yMSkodm9pZCAqKTsKLXR5cGVkZWYgdm9pZCAoKmRlc3RydWN0b3IyKSh2b2lkICosIHZvaWQqKTsKLQotCi1zdGF0aWMgaW50IGRlcHJlY2F0aW9uX2V4Y2VwdGlvbih2b2lkKQotewotICAgIHJldHVybiBQeUVycl9XYXJuRXgoUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAiVGhlIENPYmplY3QgQVBJIGlzIGRlcHJlY2F0ZWQgYXMgb2YgUHl0aG9uIDMuMS4gICIKLSAgICAgICAgICAgICAiUGxlYXNlIGNvbnZlcnQgdG8gdXNpbmcgdGhlIENhcHN1bGUgQVBJLiIsIDEpOwotfQotCi1QeU9iamVjdCAqCi1QeUNPYmplY3RfRnJvbVZvaWRQdHIodm9pZCAqY29iaiwgdm9pZCAoKmRlc3RyKSh2b2lkICopKQotewotICAgIFB5Q09iamVjdCAqc2VsZjsKLQotICAgIGlmIChkZXByZWNhdGlvbl9leGNlcHRpb24oKSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzZWxmID0gUHlPYmplY3RfTkVXKFB5Q09iamVjdCwgJlB5Q09iamVjdF9UeXBlKTsKLSAgICBpZiAoc2VsZiA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzZWxmLT5jb2JqZWN0PWNvYmo7Ci0gICAgc2VsZi0+ZGVzdHJ1Y3Rvcj1kZXN0cjsKLSAgICBzZWxmLT5kZXNjPU5VTEw7Ci0KLSAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKLX0KLQotUHlPYmplY3QgKgotUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYyh2b2lkICpjb2JqLCB2b2lkICpkZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZGVzdHIpKHZvaWQgKiwgdm9pZCAqKSkKLXsKLSAgICBQeUNPYmplY3QgKnNlbGY7Ci0KLSAgICBpZiAoZGVwcmVjYXRpb25fZXhjZXB0aW9uKCkpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFkZXNjKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYyBjYWxsZWQgd2l0aCBudWxsIgotICAgICAgICAgICAgICAgICAgICAgICAgIiBkZXNjcmlwdGlvbiIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05FVyhQeUNPYmplY3QsICZQeUNPYmplY3RfVHlwZSk7Ci0gICAgaWYgKHNlbGYgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgc2VsZi0+Y29iamVjdCA9IGNvYmo7Ci0gICAgc2VsZi0+ZGVzdHJ1Y3RvciA9IChkZXN0cnVjdG9yMSlkZXN0cjsKLSAgICBzZWxmLT5kZXNjID0gZGVzYzsKLQotICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOwotfQotCi12b2lkICoKLVB5Q09iamVjdF9Bc1ZvaWRQdHIoUHlPYmplY3QgKnNlbGYpCi17Ci0gICAgaWYgKHNlbGYpIHsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3R5cGUgPT0gJlB5Q09iamVjdF9UeXBlKQotICAgICAgICAgICAgcmV0dXJuICgoUHlDT2JqZWN0ICopc2VsZiktPmNvYmplY3Q7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHlDT2JqZWN0X0FzVm9pZFB0ciB3aXRoIG5vbi1DLW9iamVjdCIpOwotICAgIH0KLSAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHlDT2JqZWN0X0FzVm9pZFB0ciBjYWxsZWQgd2l0aCBudWxsIHBvaW50ZXIiKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCAqCi1QeUNPYmplY3RfR2V0RGVzYyhQeU9iamVjdCAqc2VsZikKLXsKLSAgICBpZiAoc2VsZikgewotICAgICAgICBpZiAoc2VsZi0+b2JfdHlwZSA9PSAmUHlDT2JqZWN0X1R5cGUpCi0gICAgICAgICAgICByZXR1cm4gKChQeUNPYmplY3QgKilzZWxmKS0+ZGVzYzsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJQeUNPYmplY3RfR2V0RGVzYyB3aXRoIG5vbi1DLW9iamVjdCIpOwotICAgIH0KLSAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUHlDT2JqZWN0X0dldERlc2MgY2FsbGVkIHdpdGggbnVsbCBwb2ludGVyIik7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXZvaWQgKgotUHlDT2JqZWN0X0ltcG9ydChjaGFyICptb2R1bGVfbmFtZSwgY2hhciAqbmFtZSkKLXsKLSAgICBQeU9iamVjdCAqbSwgKmM7Ci0gICAgdm9pZCAqciA9IE5VTEw7Ci0KLSAgICBpZiAoKG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kdWxlX25hbWUpKSkgewotICAgICAgICBpZiAoKGMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG0sbmFtZSkpKSB7Ci0gICAgICAgICAgICByID0gUHlDT2JqZWN0X0FzVm9pZFB0cihjKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihjKTsKLQl9Ci0gICAgICAgIFB5X0RFQ1JFRihtKTsKLSAgICB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLWludAotUHlDT2JqZWN0X1NldFZvaWRQdHIoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNvYmopCi17Ci0gICAgUHlDT2JqZWN0KiBjc2VsZiA9IChQeUNPYmplY3QqKXNlbGY7Ci0gICAgaWYgKGNzZWxmID09IE5VTEwgfHwgIVB5Q09iamVjdF9DaGVjayhjc2VsZikgfHwKLQljc2VsZi0+ZGVzdHJ1Y3RvciAhPSBOVUxMKSB7Ci0JUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgCi0JCQkiSW52YWxpZCBjYWxsIHRvIFB5Q09iamVjdF9TZXRWb2lkUHRyIik7Ci0JcmV0dXJuIDA7Ci0gICAgfQotICAgIGNzZWxmLT5jb2JqZWN0ID0gY29iajsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQKLVB5Q09iamVjdF9kZWFsbG9jKFB5Q09iamVjdCAqc2VsZikKLXsKLSAgICBpZiAoc2VsZi0+ZGVzdHJ1Y3RvcikgewotICAgICAgICBpZihzZWxmLT5kZXNjKQotICAgICAgICAgICAgKChkZXN0cnVjdG9yMikoc2VsZi0+ZGVzdHJ1Y3RvcikpKHNlbGYtPmNvYmplY3QsIHNlbGYtPmRlc2MpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAoc2VsZi0+ZGVzdHJ1Y3Rvcikoc2VsZi0+Y29iamVjdCk7Ci0gICAgfQotICAgIFB5T2JqZWN0X0RFTChzZWxmKTsKLX0KLQotCi1QeURvY19TVFJWQVIoUHlDT2JqZWN0X1R5cGVfX2RvY19fLAotIkMgb2JqZWN0cyB0byBiZSBleHBvcnRlZCBmcm9tIG9uZSBleHRlbnNpb24gbW9kdWxlIHRvIGFub3RoZXJcblwKLVxuXAotQyBvYmplY3RzIGFyZSB1c2VkIGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gZXh0ZW5zaW9uIG1vZHVsZXMuICBUaGV5XG5cCi1wcm92aWRlIGEgd2F5IGZvciBhbiBleHRlbnNpb24gbW9kdWxlIHRvIGV4cG9ydCBhIEMgaW50ZXJmYWNlIHRvIG90aGVyXG5cCi1leHRlbnNpb24gbW9kdWxlcywgc28gdGhhdCBleHRlbnNpb24gbW9kdWxlcyBjYW4gdXNlIHRoZSBQeXRob24gaW1wb3J0XG5cCi1tZWNoYW5pc20gdG8gbGluayB0byBvbmUgYW5vdGhlci4iKTsKLQotUHlUeXBlT2JqZWN0IFB5Q09iamVjdF9UeXBlID0gewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCi0gICAgIlB5Q09iamVjdCIsCQkvKnRwX25hbWUqLwotICAgIHNpemVvZihQeUNPYmplY3QpLAkJLyp0cF9iYXNpY3NpemUqLwotICAgIDAsCQkJCS8qdHBfaXRlbXNpemUqLwotICAgIC8qIG1ldGhvZHMgKi8KLSAgICAoZGVzdHJ1Y3RvcilQeUNPYmplY3RfZGVhbGxvYywgLyp0cF9kZWFsbG9jKi8KLSAgICAwLAkJCQkvKnRwX3ByaW50Ki8KLSAgICAwLAkJCQkvKnRwX2dldGF0dHIqLwotICAgIDAsCQkJCS8qdHBfc2V0YXR0ciovCi0gICAgMCwJCQkJLyp0cF9yZXNlcnZlZCovCi0gICAgMCwJCQkJLyp0cF9yZXByKi8KLSAgICAwLAkJCQkvKnRwX2FzX251bWJlciovCi0gICAgMCwJCQkJLyp0cF9hc19zZXF1ZW5jZSovCi0gICAgMCwJCQkJLyp0cF9hc19tYXBwaW5nKi8KLSAgICAwLAkJCQkvKnRwX2hhc2gqLwotICAgIDAsCQkJCS8qdHBfY2FsbCovCi0gICAgMCwJCQkJLyp0cF9zdHIqLwotICAgIDAsCQkJCS8qdHBfZ2V0YXR0cm8qLwotICAgIDAsCQkJCS8qdHBfc2V0YXR0cm8qLwotICAgIDAsCQkJCS8qdHBfYXNfYnVmZmVyKi8KLSAgICAwLAkJCQkvKnRwX2ZsYWdzKi8KLSAgICBQeUNPYmplY3RfVHlwZV9fZG9jX18JLyp0cF9kb2MqLwotfTsKZGlmZiAtLWdpdCBhL09iamVjdHMvY29kZW9iamVjdC5jIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKaW5kZXggZTNlY2NmNy4uYmI5MzhlYSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9jb2Rlb2JqZWN0LmMKQEAgLTU0LDcgKzU0LDcgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICAvKiBDaGVjayBhcmd1bWVudCB0eXBlcyAqLwotICAgIGlmIChhcmdjb3VudCA8IDAgfHwgbmxvY2FscyA8IDAgfHwKKyAgICBpZiAoYXJnY291bnQgPCAwIHx8IGt3b25seWFyZ2NvdW50IDwgMCB8fCBubG9jYWxzIDwgMCB8fAogICAgICAgICBjb2RlID09IE5VTEwgfHwKICAgICAgICAgY29uc3RzID09IE5VTEwgfHwgIVB5VHVwbGVfQ2hlY2soY29uc3RzKSB8fAogICAgICAgICBuYW1lcyA9PSBOVUxMIHx8ICFQeVR1cGxlX0NoZWNrKG5hbWVzKSB8fApAQCAtMTA4LDEwICsxMDgsNTggQEAKICAgICAgICAgUHlfSU5DUkVGKGxub3RhYik7CiAgICAgICAgIGNvLT5jb19sbm90YWIgPSBsbm90YWI7CiAgICAgICAgIGNvLT5jb196b21iaWVmcmFtZSA9IE5VTEw7CisgICAgICAgIGNvLT5jb193ZWFrcmVmbGlzdCA9IE5VTEw7CiAgICAgfQogICAgIHJldHVybiBjbzsKIH0KIAorUHlDb2RlT2JqZWN0ICoKK1B5Q29kZV9OZXdFbXB0eShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZnVuY25hbWUsIGludCBmaXJzdGxpbmVubykKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVtcHR5c3RyaW5nID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKm51bGx0dXBsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZnVuY25hbWVfb2IgPSBOVUxMOworICAgIFB5Q29kZU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKyAgICBpZiAoZW1wdHlzdHJpbmcgPT0gTlVMTCkgeworICAgICAgICBlbXB0eXN0cmluZyA9IFB5Qnl0ZXNfRnJvbVN0cmluZygiIik7CisgICAgICAgIGlmIChlbXB0eXN0cmluZyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGlmIChudWxsdHVwbGUgPT0gTlVMTCkgeworICAgICAgICBudWxsdHVwbGUgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKG51bGx0dXBsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgfQorICAgIGZ1bmNuYW1lX29iID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZnVuY25hbWUpOworICAgIGlmIChmdW5jbmFtZV9vYiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICBmaWxlbmFtZV9vYiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgIGlmIChmaWxlbmFtZV9vYiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWxlZDsKKworICAgIHJlc3VsdCA9IFB5Q29kZV9OZXcoMCwgICAgICAgICAgICAgICAgICAgICAgLyogYXJnY291bnQgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGt3b25seWFyZ2NvdW50ICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubG9jYWxzICovCisgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFja3NpemUgKi8KKyAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZsYWdzICovCisgICAgICAgICAgICAgICAgZW1wdHlzdHJpbmcsICAgICAgICAgICAgICAgICAgICAvKiBjb2RlICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zdHMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIG5hbWVzICovCisgICAgICAgICAgICAgICAgbnVsbHR1cGxlLCAgICAgICAgICAgICAgICAgICAgICAvKiB2YXJuYW1lcyAqLworICAgICAgICAgICAgICAgIG51bGx0dXBsZSwgICAgICAgICAgICAgICAgICAgICAgLyogZnJlZXZhcnMgKi8KKyAgICAgICAgICAgICAgICBudWxsdHVwbGUsICAgICAgICAgICAgICAgICAgICAgIC8qIGNlbGx2YXJzICovCisgICAgICAgICAgICAgICAgZmlsZW5hbWVfb2IsICAgICAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSAqLworICAgICAgICAgICAgICAgIGZ1bmNuYW1lX29iLCAgICAgICAgICAgICAgICAgICAgLyogbmFtZSAqLworICAgICAgICAgICAgICAgIGZpcnN0bGluZW5vLCAgICAgICAgICAgICAgICAgICAgLyogZmlyc3RsaW5lbm8gKi8KKyAgICAgICAgICAgICAgICBlbXB0eXN0cmluZyAgICAgICAgICAgICAgICAgICAgIC8qIGxub3RhYiAqLworICAgICAgICAgICAgICAgICk7CisKK2ZhaWxlZDoKKyAgICBQeV9YREVDUkVGKGZ1bmNuYW1lX29iKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lX29iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUNvZGVPYmplY3QsIHgpCiAKQEAgLTI4NCwyMiArMzMyLDI4IEBACiAgICAgUHlfWERFQ1JFRihjby0+Y29fbG5vdGFiKTsKICAgICBpZiAoY28tPmNvX3pvbWJpZWZyYW1lICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0dDX0RlbChjby0+Y29fem9tYmllZnJhbWUpOworICAgIGlmIChjby0+Y29fd2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QqKWNvKTsKICAgICBQeU9iamVjdF9ERUwoY28pOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogY29kZV9yZXByKFB5Q29kZU9iamVjdCAqY28pCiB7Ci0gICAgaW50IGxpbmVubyA9IC0xOwotICAgIGNoYXIgKmZpbGVuYW1lID0gIj8/PyI7Ci0KKyAgICBpbnQgbGluZW5vOwogICAgIGlmIChjby0+Y29fZmlyc3RsaW5lbm8gIT0gMCkKICAgICAgICAgbGluZW5vID0gY28tPmNvX2ZpcnN0bGluZW5vOwotICAgIGlmIChjby0+Y29fZmlsZW5hbWUgJiYgUHlVbmljb2RlX0NoZWNrKGNvLT5jb19maWxlbmFtZSkpCi0gICAgICAgIGZpbGVuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhjby0+Y29fZmlsZW5hbWUpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgIjxjb2RlIG9iamVjdCAlLjEwMFUgYXQgJXAsIGZpbGUgXCIlLjMwMHNcIiwgbGluZSAlZD4iLAotICAgICAgICAgICAgICAgICAgICBjby0+Y29fbmFtZSwgY28sIGZpbGVuYW1lLCBsaW5lbm8pOworICAgIGVsc2UKKyAgICAgICAgbGluZW5vID0gLTE7CisgICAgaWYgKGNvLT5jb19maWxlbmFtZSAmJiBQeVVuaWNvZGVfQ2hlY2soY28tPmNvX2ZpbGVuYW1lKSkgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoCisgICAgICAgICAgICAiPGNvZGUgb2JqZWN0ICVVIGF0ICVwLCBmaWxlIFwiJVVcIiwgbGluZSAlZD4iLAorICAgICAgICAgICAgY28tPmNvX25hbWUsIGNvLCBjby0+Y29fZmlsZW5hbWUsIGxpbmVubyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgICAgICAgICAgIjxjb2RlIG9iamVjdCAlVSBhdCAlcCwgZmlsZSA/Pz8sIGxpbmUgJWQ+IiwKKyAgICAgICAgICAgIGNvLT5jb19uYW1lLCBjbywgbGluZW5vKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNjMsMTAgKzQxNywxMCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBjb2RlX2hhc2goUHlDb2RlT2JqZWN0ICpjbykKIHsKLSAgICBsb25nIGgsIGgwLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2OworICAgIFB5X2hhc2hfdCBoLCBoMCwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNjsKICAgICBoMCA9IFB5T2JqZWN0X0hhc2goY28tPmNvX25hbWUpOwogICAgIGlmIChoMCA9PSAtMSkgcmV0dXJuIC0xOwogICAgIGgxID0gUHlPYmplY3RfSGFzaChjby0+Y29fY29kZSk7CkBAIC00MTUsNyArNDY5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgY29kZV9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLworICAgIG9mZnNldG9mKFB5Q29kZU9iamVjdCwgY29fd2Vha3JlZmxpc3QpLCAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCkBAIC00MzEsNTQgKzQ4NSwxNCBAQAogICAgIGNvZGVfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotLyogQWxsIGFib3V0IGNfbG5vdGFiLgotCi1jX2xub3RhYiBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBieXRlcyBkaXNndWlzZWQgYXMgYSBQeXRob24gc3RyaW5nLiAgSW4gLU8KLW1vZGUsIFNFVF9MSU5FTk8gb3Bjb2RlcyBhcmVuJ3QgZ2VuZXJhdGVkLCBhbmQgYnl0ZWNvZGUgb2Zmc2V0cyBhcmUgbWFwcGVkCi10byBzb3VyY2UgY29kZSBsaW5lICNzICh3aGVuIG5lZWRlZCBmb3IgdHJhY2ViYWNrcykgdmlhIGNfbG5vdGFiIGluc3RlYWQuCi1UaGUgYXJyYXkgaXMgY29uY2VwdHVhbGx5IGEgbGlzdCBvZgotICAgIChieXRlY29kZSBvZmZzZXQgaW5jcmVtZW50LCBsaW5lIG51bWJlciBpbmNyZW1lbnQpCi1wYWlycy4gIFRoZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgYW5kIGRlbGljYXRlLCBiZXN0IGlsbHVzdHJhdGVkIGJ5IGV4YW1wbGU6Ci0KLSAgICBieXRlIGNvZGUgb2Zmc2V0ICAgIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCi0gICAgMCAgICAgICAgICAgICAgICAgICAgICAgMQotICAgIDYgICAgICAgICAgICAgICAgICAgICAgIDIKLSAgICAgICA1MCAgICAgICAgICAgICAgICAgICA3Ci0gICAgICAzNTAgICAgICAgICAgICAgICAgIDMwNwotICAgICAgMzYxICAgICAgICAgICAgICAgICAzMDgKLQotVGhlIGZpcnN0IHRyaWNrIGlzIHRoYXQgdGhlc2UgbnVtYmVycyBhcmVuJ3Qgc3RvcmVkLCBvbmx5IHRoZSBpbmNyZW1lbnRzCi1mcm9tIG9uZSByb3cgdG8gdGhlIG5leHQgKHRoaXMgZG9lc24ndCByZWFsbHkgd29yaywgYnV0IGl0J3MgYSBzdGFydCk6Ci0KLSAgICAwLCAxLCAgNiwgMSwgIDQ0LCA1LCAgMzAwLCAzMDAsICAxMSwgMQotCi1UaGUgc2Vjb25kIHRyaWNrIGlzIHRoYXQgYW4gdW5zaWduZWQgYnl0ZSBjYW4ndCBob2xkIG5lZ2F0aXZlIHZhbHVlcywgb3IKLXZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIHNvIChhKSB0aGVyZSdzIGEgZGVlcCBhc3N1bXB0aW9uIHRoYXQgYnl0ZSBjb2RlCi1vZmZzZXRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGxpbmUgI3MgYm90aCBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LCBhbmQgKGIpCi1pZiBhdCBsZWFzdCBvbmUgY29sdW1uIGp1bXBzIGJ5IG1vcmUgdGhhbiAyNTUgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LCBtb3JlCi10aGFuIG9uZSBwYWlyIGlzIHdyaXR0ZW4gdG8gdGhlIHRhYmxlLiBJbiBjYXNlICNiLCB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci1mcm9tIGxvb2tpbmcgYXQgdGhlIHRhYmxlIGxhdGVyIGhvdyBtYW55IHdlcmUgd3JpdHRlbi4gIFRoYXQncyB0aGUgZGVsaWNhdGUKLXBhcnQuICBBIHVzZXIgb2YgY19sbm90YWIgZGVzaXJpbmcgdG8gZmluZCB0aGUgc291cmNlIGxpbmUgbnVtYmVyCi1jb3JyZXNwb25kaW5nIHRvIGEgYnl0ZWNvZGUgYWRkcmVzcyBBIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzCi0KLSAgICBsaW5lbm8gPSBhZGRyID0gMAotICAgIGZvciBhZGRyX2luY3IsIGxpbmVfaW5jciBpbiBjX2xub3RhYjoKLSAgICBhZGRyICs9IGFkZHJfaW5jcgotICAgIGlmIGFkZHIgPiBBOgotICAgICAgICByZXR1cm4gbGluZW5vCi0gICAgbGluZW5vICs9IGxpbmVfaW5jcgotCi1JbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3aGVuIHRoZSBhZGRyIGZpZWxkIGluY3JlbWVudHMgYnkgbW9yZSB0aGFuIDI1NSwKLXRoZSBsaW5lICMgaW5jcmVtZW50IGluIGVhY2ggcGFpciBnZW5lcmF0ZWQgbXVzdCBiZSAwIHVudGlsIHRoZSByZW1haW5pbmcgYWRkcgotaW5jcmVtZW50IGlzIDwgMjU2LiAgU28sIGluIHRoZSBleGFtcGxlIGFib3ZlLCBjb21fc2V0X2xpbmVubyBzaG91bGQgbm90IChhcwotd2FzIGFjdHVhbGx5IGRvbmUgdW50aWwgMi4yKSBleHBhbmQgMzAwLCAzMDAgdG8gMjU1LCAyNTUsICA0NSwgNDUsIGJ1dCB0bwotMjU1LCAwLCAgNDUsIDI1NSwgIDAsIDQ1LgorLyogVXNlIGNvX2xub3RhYiB0byBjb21wdXRlIHRoZSBsaW5lIG51bWJlciBmcm9tIGEgYnl0ZWNvZGUgaW5kZXgsIGFkZHJxLiAgU2VlCisgICBsbm90YWJfbm90ZXMudHh0IGZvciB0aGUgZGV0YWlscyBvZiB0aGUgbG5vdGFiIHJlcHJlc2VudGF0aW9uLgogKi8KIAogaW50CiBQeUNvZGVfQWRkcjJMaW5lKFB5Q29kZU9iamVjdCAqY28sIGludCBhZGRycSkKIHsKLSAgICBpbnQgc2l6ZSA9IFB5Qnl0ZXNfU2l6ZShjby0+Y29fbG5vdGFiKSAvIDI7CisgICAgUHlfc3NpemVfdCBzaXplID0gUHlCeXRlc19TaXplKGNvLT5jb19sbm90YWIpIC8gMjsKICAgICB1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcoY28tPmNvX2xub3RhYik7CiAgICAgaW50IGxpbmUgPSBjby0+Y29fZmlyc3RsaW5lbm87CiAgICAgaW50IGFkZHIgPSAwOwpAQCAtNDkxLDg3ICs1MDUsMTMgQEAKICAgICByZXR1cm4gbGluZTsKIH0KIAotLyoKLSAgIENoZWNrIHdoZXRoZXIgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KLQotICovCi0KLSAgICAvKiBUaGUgdGhlb3J5IG9mIFNFVF9MSU5FTk8tbGVzcyB0cmFjaW5nLgotCi0gICAgICAgSW4gYSBudXRzaGVsbCwgd2UgdXNlIHRoZSBjb19sbm90YWIgZmllbGQgb2YgdGhlIGNvZGUgb2JqZWN0Ci0gICAgICAgdG8gdGVsbCB3aGVuIGV4ZWN1dGlvbiBoYXMgbW92ZWQgb250byBhIGRpZmZlcmVudCBsaW5lLgotCi0gICAgICAgQXMgbWVudGlvbmVkIGFib3ZlLCB0aGUgYmFzaWMgaWRlYSBpcyBzbyBzZXQgdGhpbmdzIHVwIHNvCi0gICAgICAgdGhhdAotCi0gICAgICAgICAqaW5zdHJfbGIgPD0gZnJhbWUtPmZfbGFzdGkgPCAqaW5zdHJfdWIKLQotICAgICAgIGlzIHRydWUgc28gbG9uZyBhcyBleGVjdXRpb24gZG9lcyBub3QgY2hhbmdlIGxpbmVzLgotCi0gICAgICAgVGhpcyBpcyBhbGwgZmFpcmx5IHNpbXBsZS4gIERpZ2dpbmcgdGhlIGluZm9ybWF0aW9uIG91dCBvZgotICAgICAgIGNvX2xub3RhYiB0YWtlcyBzb21lIHdvcmssIGJ1dCBpcyBjb25jZXB0dWFsbHkgY2xlYXIuCi0KLSAgICAgICBTb21ld2hhdCBoYXJkZXIgdG8gZXhwbGFpbiBpcyB3aHkgd2UgZG9uJ3QgKmFsd2F5cyogY2FsbCB0aGUKLSAgICAgICBsaW5lIHRyYWNlIGZ1bmN0aW9uIHdoZW4gdGhlIGFib3ZlIHRlc3QgZmFpbHMuCi0KLSAgICAgICBDb25zaWRlciB0aGlzIGNvZGU6Ci0KLSAgICAgICAxOiBkZWYgZihhKToKLSAgICAgICAyOiAgICAgaWYgYToKLSAgICAgICAzOiAgICAgICAgcHJpbnQgMQotICAgICAgIDQ6ICAgICBlbHNlOgotICAgICAgIDU6ICAgICAgICBwcmludCAyCi0KLSAgICAgICB3aGljaCBjb21waWxlcyB0byB0aGlzOgotCi0gICAgICAgMiAgICAgICAgICAgMCBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoYSkKLSAgICAgICAgICAgICAgICAgICAzIEpVTVBfSUZfRkFMU0UgICAgICAgICAgICA5ICh0byAxNSkKLSAgICAgICAgICAgICAgICAgICA2IFBPUF9UT1AKLQotICAgICAgIDMgICAgICAgICAgIDcgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCi0gICAgICAgICAgICAgICAgICAxMCBQUklOVF9JVEVNCi0gICAgICAgICAgICAgICAgICAxMSBQUklOVF9ORVdMSU5FCi0gICAgICAgICAgICAgICAgICAxMiBKVU1QX0ZPUldBUkQgICAgICAgICAgICAgNiAodG8gMjEpCi0gICAgICAgICA+PiAgIDE1IFBPUF9UT1AKLQotICAgICAgIDUgICAgICAgICAgMTYgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDIpCi0gICAgICAgICAgICAgICAgICAxOSBQUklOVF9JVEVNCi0gICAgICAgICAgICAgICAgICAyMCBQUklOVF9ORVdMSU5FCi0gICAgICAgICA+PiAgIDIxIExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQotICAgICAgICAgICAgICAyNCBSRVRVUk5fVkFMVUUKLQotICAgICAgIElmICdhJyBpcyBmYWxzZSwgZXhlY3V0aW9uIHdpbGwganVtcCB0byBpbnN0cnVjdGlvbiBhdCBvZmZzZXQKLSAgICAgICAxNSBhbmQgdGhlIGNvX2xub3RhYiB3aWxsIGNsYWltIHRoYXQgZXhlY3V0aW9uIGhhcyBtb3ZlZCB0bwotICAgICAgIGxpbmUgMy4gIFRoaXMgaXMgYXQgYmVzdCBtaXNsZWFkaW5nLiAgSW4gdGhpcyBjYXNlIHdlIGNvdWxkCi0gICAgICAgYXNzb2NpYXRlIHRoZSBQT1BfVE9QIHdpdGggbGluZSA0LCBidXQgdGhhdCBkb2Vzbid0IG1ha2UKLSAgICAgICBzZW5zZSBpbiBhbGwgY2FzZXMgKEkgdGhpbmspLgotCi0gICAgICAgV2hhdCB3ZSBkbyBpcyBvbmx5IGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24gaWYgdGhlIGNvX2xub3RhYgotICAgICAgIGluZGljYXRlcyB3ZSBoYXZlIGp1bXBlZCB0byB0aGUgKnN0YXJ0KiBvZiBhIGxpbmUsIGkuZS4gaWYgdGhlCi0gICAgICAgY3VycmVudCBpbnN0cnVjdGlvbiBvZmZzZXQgbWF0Y2hlcyB0aGUgb2Zmc2V0IGdpdmVuIGZvciB0aGUKLSAgICAgICBzdGFydCBvZiBhIGxpbmUgYnkgdGhlIGNvX2xub3RhYi4KLQotICAgICAgIFRoaXMgYWxzbyB0YWtlcyBjYXJlIG9mIHRoZSBzaXR1YXRpb24gd2hlcmUgJ2EnIGlzIHRydWUuCi0gICAgICAgRXhlY3V0aW9uIHdpbGwganVtcCBmcm9tIGluc3RydWN0aW9uIG9mZnNldCAxMiB0byBvZmZzZXQgMjEuCi0gICAgICAgVGhlbiB0aGUgY29fbG5vdGFiIHdvdWxkIGltcGx5IHRoYXQgZXhlY3V0aW9uIGhhcyBtb3ZlZCB0byBsaW5lCi0gICAgICAgNSwgd2hpY2ggaXMgYWdhaW4gbWlzbGVhZGluZy4KLQotICAgICAgIFdoeSBkbyB3ZSBzZXQgZl9saW5lbm8gd2hlbiB0cmFjaW5nPyAgV2VsbCwgY29uc2lkZXIgdGhlIGNvZGUKLSAgICAgICBhYm92ZSB3aGVuICdhJyBpcyB0cnVlLiAgSWYgc3RlcHBpbmcgdGhyb3VnaCB0aGlzIHdpdGggJ24nIGluCi0gICAgICAgcGRiLCB5b3Ugd291bGQgc3RvcCBhdCBsaW5lIDEgd2l0aCBhICJjYWxsIiB0eXBlIGV2ZW50LCB0aGVuCi0gICAgICAgbGluZSBldmVudHMgb24gbGluZXMgMiBhbmQgMywgdGhlbiBhICJyZXR1cm4iIHR5cGUgZXZlbnQgLS0gYnV0Ci0gICAgICAgeW91IHdvdWxkIGJlIHNob3duIGxpbmUgNSBkdXJpbmcgdGhpcyBldmVudC4gIFRoaXMgaXMgYSBjaGFuZ2UKLSAgICAgICBmcm9tIHRoZSBiZWhhdmlvdXIgaW4gMi4yIGFuZCBiZWZvcmUsIGFuZCBJJ3ZlIGZvdW5kIGl0Ci0gICAgICAgY29uZnVzaW5nIGluIHByYWN0aWNlLiAgQnkgc2V0dGluZyBhbmQgdXNpbmcgZl9saW5lbm8gd2hlbgotICAgICAgIHRyYWNpbmcsIG9uZSBjYW4gcmVwb3J0IGEgbGluZSBudW1iZXIgZGlmZmVyZW50IGZyb20gdGhhdAotICAgICAgIHN1Z2dlc3RlZCBieSBmX2xhc3RpIG9uIHRoaXMgb25lIG9jY2FzaW9uIHdoZXJlIGl0J3MgZGVzaXJhYmxlLgotICAgICovCi0KLQorLyogVXBkYXRlICpib3VuZHMgdG8gZGVzY3JpYmUgdGhlIGZpcnN0IGFuZCBvbmUtcGFzdC10aGUtbGFzdCBpbnN0cnVjdGlvbnMgaW4KKyAgIHRoZSBzYW1lIGxpbmUgYXMgbGFzdGkuICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGF0IGxpbmUuICovCiBpbnQKLVB5Q29kZV9DaGVja0xpbmVOdW1iZXIoUHlDb2RlT2JqZWN0KiBjbywgaW50IGxhc3RpLCBQeUFkZHJQYWlyICpib3VuZHMpCitfUHlDb2RlX0NoZWNrTGluZU51bWJlcihQeUNvZGVPYmplY3QqIGNvLCBpbnQgbGFzdGksIFB5QWRkclBhaXIgKmJvdW5kcykKIHsKLSAgICBpbnQgc2l6ZSwgYWRkciwgbGluZTsKKyAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgaW50IGFkZHIsIGxpbmU7CiAgICAgdW5zaWduZWQgY2hhciogcDsKIAogICAgIHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19BU19TVFJJTkcoY28tPmNvX2xub3RhYik7CkBAIC01ODYsMTEgKzUyNiw5IEBACiAgICAgICAgaW5zdHJfbGIgLS0gaWYgd2Ugc3RvcmVkIHRoZSBtYXRjaGluZyB2YWx1ZSBvZiBwCiAgICAgICAgc29td2hlcmUgd2UgY291bGQgc2tpcCB0aGUgZmlyc3Qgd2hpbGUgbG9vcC4gKi8KIAotICAgIC8qIHNlZSBjb21tZW50cyBpbiBjb21waWxlLmMgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZgorICAgIC8qIFNlZSBsbm90YWJfbm90ZXMudHh0IGZvciB0aGUgZGVzY3JpcHRpb24gb2YKICAgICAgICBjb19sbm90YWIuICBBIHBvaW50IHRvIHJlbWVtYmVyOiBpbmNyZW1lbnRzIHRvIHAKLSAgICAgICBzaG91bGQgY29tZSBpbiBwYWlycyAtLSBhbHRob3VnaCB3ZSBkb24ndCBjYXJlIGFib3V0Ci0gICAgICAgdGhlIGxpbmUgaW5jcmVtZW50cyBoZXJlLCB0cmVhdGluZyB0aGVtIGFzIGJ5dGUKLSAgICAgICBpbmNyZW1lbnRzIGdldHMgY29uZnVzaW5nLCB0byBzYXkgdGhlIGxlYXN0LiAqLworICAgICAgIGNvbWUgaW4gKGFkZHIsIGxpbmUpIHBhaXJzLiAqLwogCiAgICAgYm91bmRzLT5hcF9sb3dlciA9IDA7CiAgICAgd2hpbGUgKHNpemUgPiAwKSB7CkBAIC02MDMsMTMgKzU0MSw2IEBACiAgICAgICAgIC0tc2l6ZTsKICAgICB9CiAKLSAgICAvKiBJZiBsYXN0aSBhbmQgYWRkciBkb24ndCBtYXRjaCBleGFjdGx5LCB3ZSBkb24ndCB3YW50IHRvCi0gICAgICAgY2hhbmdlIHRoZSBsaW5lbm8gc2xvdCBvbiB0aGUgZnJhbWUgb3IgZXhlY3V0ZSBhIHRyYWNlCi0gICAgICAgZnVuY3Rpb24uICBSZXR1cm4gLTEgaW5zdGVhZC4KLSAgICAqLwotICAgIGlmIChhZGRyICE9IGxhc3RpKQotICAgICAgICBsaW5lID0gLTE7Ci0KICAgICBpZiAoc2l6ZSA+IDApIHsKICAgICAgICAgd2hpbGUgKC0tc2l6ZSA+PSAwKSB7CiAgICAgICAgICAgICBhZGRyICs9ICpwKys7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCmluZGV4IDQ5NDhhMjEuLmUyNDdiYTkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29tcGxleG9iamVjdC5jCisrKyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCkBAIC04LDggKzgsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jaWZuZGVmIFdJVEhPVVRfQ09NUExFWAotCiAvKiBlbGVtZW50YXJ5IG9wZXJhdGlvbnMgb24gY29tcGxleCBudW1iZXJzICovCiAKIHN0YXRpYyBQeV9jb21wbGV4IGNfMSA9IHsxLiwgMC59OwpAQCAtMjY0LDEyICsyNjIsMjUgQEAKICAgICB9CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCit0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChQeU9iamVjdCAqb3ApIHsKKyAgICBQeU9iamVjdCAqZjsKKyAgICBzdGF0aWMgUHlPYmplY3QgKmNvbXBsZXhzdHI7CisKKyAgICBmID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob3AsICJfX2NvbXBsZXhfXyIsICZjb21wbGV4c3RyKTsKKyAgICBpZiAoZikgeworICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKwogUHlfY29tcGxleAogUHlDb21wbGV4X0FzQ0NvbXBsZXgoUHlPYmplY3QgKm9wKQogewogICAgIFB5X2NvbXBsZXggY3Y7CiAgICAgUHlPYmplY3QgKm5ld29wID0gTlVMTDsKLSAgICBzdGF0aWMgUHlPYmplY3QgKmNvbXBsZXhfc3RyID0gTlVMTDsKIAogICAgIGFzc2VydChvcCk7CiAgICAgLyogSWYgb3AgaXMgYWxyZWFkeSBvZiB0eXBlIFB5Q29tcGxleF9UeXBlLCByZXR1cm4gaXRzIHZhbHVlICovCkBAIC0yODIsMjEgKzI5Myw3IEBACiAgICAgY3YucmVhbCA9IC0xLjsKICAgICBjdi5pbWFnID0gMC47CiAKLSAgICBpZiAoY29tcGxleF9zdHIgPT0gTlVMTCkgewotICAgICAgICBpZiAoIShjb21wbGV4X3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJfX2NvbXBsZXhfXyIpKSkKLSAgICAgICAgICAgIHJldHVybiBjdjsKLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICpjb21wbGV4ZnVuYzsKLSAgICAgICAgY29tcGxleGZ1bmMgPSBfUHlUeXBlX0xvb2t1cChvcC0+b2JfdHlwZSwgY29tcGxleF9zdHIpOwotICAgICAgICAvKiBjb21wbGV4ZnVuYyBpcyBhIGJvcnJvd2VkIHJlZmVyZW5jZSAqLwotICAgICAgICBpZiAoY29tcGxleGZ1bmMpIHsKLSAgICAgICAgICAgIG5ld29wID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhjb21wbGV4ZnVuYywgb3AsIE5VTEwpOwotICAgICAgICAgICAgaWYgKCFuZXdvcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KLSAgICB9CisgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKICAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7CkBAIC0zMDksNiArMzA2LDkgQEAKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwogICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBjdjsKKyAgICB9CiAgICAgLyogSWYgbmVpdGhlciBvZiB0aGUgYWJvdmUgd29ya3MsIGludGVycHJldCBvcCBhcyBhIGZsb2F0IGdpdmluZyB0aGUKICAgICAgICByZWFsIHBhcnQgb2YgdGhlIHJlc3VsdCwgYW5kIGZpbGwgaW4gdGhlIGltYWdpbmFyeSBwYXJ0IGFzIDAuICovCiAgICAgZWxzZSB7CkBAIC0zMjQsMTAgKzMyNCwxMSBAQAogICAgIG9wLT5vYl90eXBlLT50cF9mcmVlKG9wKTsKIH0KIAotCiBzdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9mb3JtYXQoUHlDb21wbGV4T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uLCBjaGFyIGZvcm1hdF9jb2RlKQorY29tcGxleF9yZXByKFB5Q29tcGxleE9iamVjdCAqdikKIHsKKyAgICBpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBjaGFyIGZvcm1hdF9jb2RlID0gJ3InOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwogCkBAIC0zNDQsNiArMzQ1LDggQEAKICAgICBjaGFyICp0YWlsID0gIiI7CiAKICAgICBpZiAodi0+Y3ZhbC5yZWFsID09IDAuICYmIGNvcHlzaWduKDEuMCwgdi0+Y3ZhbC5yZWFsKT09MS4wKSB7CisgICAgICAgIC8qIFJlYWwgcGFydCBpcyArMDoganVzdCBvdXRwdXQgdGhlIGltYWdpbmFyeSBwYXJ0IGFuZCBkbyBub3QKKyAgICAgICAgICAgaW5jbHVkZSBwYXJlbnMuICovCiAgICAgICAgIHJlID0gIiI7CiAgICAgICAgIGltID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHYtPmN2YWwuaW1hZywgZm9ybWF0X2NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiwgMCwgTlVMTCk7CkBAIC0zNTIsNyArMzU1LDggQEAKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIEZvcm1hdCBpbWFnaW5hcnkgcGFydCB3aXRoIHNpZ24sIHJlYWwgcGFydCB3aXRob3V0ICovCisgICAgICAgIC8qIEZvcm1hdCBpbWFnaW5hcnkgcGFydCB3aXRoIHNpZ24sIHJlYWwgcGFydCB3aXRob3V0LiBJbmNsdWRlCisgICAgICAgICAgIHBhcmVucyBpbiB0aGUgcmVzdWx0LiAqLwogICAgICAgICBwcmUgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcodi0+Y3ZhbC5yZWFsLCBmb3JtYXRfY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbiwgMCwgTlVMTCk7CiAgICAgICAgIGlmICghcHJlKSB7CkBAIC0zNzEsNyArMzc1LDcgQEAKICAgICAgICAgdGFpbCA9ICIpIjsKICAgICB9CiAgICAgLyogQWxsb2MgdGhlIGZpbmFsIGJ1ZmZlci4gQWRkIG9uZSBmb3IgdGhlICJqIiBpbiB0aGUgZm9ybWF0IHN0cmluZywKLSAgICAgICBhbmQgb25lIGZvciB0aGUgdHJhaWxpbmcgemVyby4gKi8KKyAgICAgICBhbmQgb25lIGZvciB0aGUgdHJhaWxpbmcgemVybyBieXRlLiAqLwogICAgIGxlbiA9IHN0cmxlbihsZWFkKSArIHN0cmxlbihyZSkgKyBzdHJsZW4oaW0pICsgc3RybGVuKHRhaWwpICsgMjsKICAgICBidWYgPSBQeU1lbV9NYWxsb2MobGVuKTsKICAgICBpZiAoIWJ1ZikgewpAQCAtMzg4LDI3ICszOTIsMTUgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcGxleF9yZXByKFB5Q29tcGxleE9iamVjdCAqdikKLXsKLSAgICByZXR1cm4gY29tcGxleF9mb3JtYXQodiwgMCwgJ3InKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBsZXhfc3RyKFB5Q29tcGxleE9iamVjdCAqdikKLXsKLSAgICByZXR1cm4gY29tcGxleF9mb3JtYXQodiwgUHlGbG9hdF9TVFJfUFJFQ0lTSU9OLCAnZycpOwotfQotCi1zdGF0aWMgbG9uZworc3RhdGljIFB5X2hhc2hfdAogY29tcGxleF9oYXNoKFB5Q29tcGxleE9iamVjdCAqdikKIHsKLSAgICBsb25nIGhhc2hyZWFsLCBoYXNoaW1hZywgY29tYmluZWQ7Ci0gICAgaGFzaHJlYWwgPSBfUHlfSGFzaERvdWJsZSh2LT5jdmFsLnJlYWwpOwotICAgIGlmIChoYXNocmVhbCA9PSAtMSkKKyAgICBQeV91aGFzaF90IGhhc2hyZWFsLCBoYXNoaW1hZywgY29tYmluZWQ7CisgICAgaGFzaHJlYWwgPSAoUHlfdWhhc2hfdClfUHlfSGFzaERvdWJsZSh2LT5jdmFsLnJlYWwpOworICAgIGlmIChoYXNocmVhbCA9PSAoUHlfdWhhc2hfdCktMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIGhhc2hpbWFnID0gX1B5X0hhc2hEb3VibGUodi0+Y3ZhbC5pbWFnKTsKLSAgICBpZiAoaGFzaGltYWcgPT0gLTEpCisgICAgaGFzaGltYWcgPSAoUHlfdWhhc2hfdClfUHlfSGFzaERvdWJsZSh2LT5jdmFsLmltYWcpOworICAgIGlmIChoYXNoaW1hZyA9PSAoUHlfdWhhc2hfdCktMSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIC8qIE5vdGU6ICBpZiB0aGUgaW1hZ2luYXJ5IHBhcnQgaXMgMCwgaGFzaGltYWcgaXMgMCBub3csCiAgICAgICogc28gdGhlIGZvbGxvd2luZyByZXR1cm5zIGhhc2hyZWFsIHVuY2hhbmdlZC4gIFRoaXMgaXMKQEAgLTQxNiwxMCArNDA4LDEwIEBACiAgICAgICogY29tcGFyZSBlcXVhbCBtdXN0IGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZSwgc28gdGhhdAogICAgICAqIGhhc2goeCArIDAqaikgbXVzdCBlcXVhbCBoYXNoKHgpLgogICAgICAqLwotICAgIGNvbWJpbmVkID0gaGFzaHJlYWwgKyAxMDAwMDAzICogaGFzaGltYWc7Ci0gICAgaWYgKGNvbWJpbmVkID09IC0xKQotICAgICAgICBjb21iaW5lZCA9IC0yOwotICAgIHJldHVybiBjb21iaW5lZDsKKyAgICBjb21iaW5lZCA9IGhhc2hyZWFsICsgX1B5SEFTSF9JTUFHICogaGFzaGltYWc7CisgICAgaWYgKGNvbWJpbmVkID09IChQeV91aGFzaF90KS0xKQorICAgICAgICBjb21iaW5lZCA9IChQeV91aGFzaF90KS0yOworICAgIHJldHVybiAoUHlfaGFzaF90KWNvbWJpbmVkOwogfQogCiAvKiBUaGlzIG1hY3JvIG1heSByZXR1cm4hICovCkBAIC01MDQsNyArNDk2LDcgQEAKICAgICBxdW90ID0gY19xdW90KGEsIGIpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKHF1b3QpCiAgICAgaWYgKGVycm5vID09IEVET00pIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLCAiY29tcGxleCBkaXZpc2lvbiIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IsICJjb21wbGV4IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KHF1b3QpOwpAQCAtNjIwLDI0ICs2MTIsNTggQEAKIGNvbXBsZXhfcmljaGNvbXBhcmUoUHlPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBpbnQgb3ApCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBQeV9jb21wbGV4IGksIGo7Ci0gICAgVE9fQ09NUExFWCh2LCBpKTsKLSAgICBUT19DT01QTEVYKHcsIGopOworICAgIFB5X2NvbXBsZXggaTsKKyAgICBpbnQgZXF1YWw7CiAKICAgICBpZiAob3AgIT0gUHlfRVEgJiYgb3AgIT0gUHlfTkUpIHsKLSAgICAgICAgLyogWFhYIFNob3VsZCBldmVudHVhbGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgIm5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBVbmltcGxlbWVudGVkOwogICAgIH0KIAotICAgIGlmICgoaS5yZWFsID09IGoucmVhbCAmJiBpLmltYWcgPT0gai5pbWFnKSA9PSAob3AgPT0gUHlfRVEpKQotICAgICAgICByZXMgPSBQeV9UcnVlOworICAgIGFzc2VydChQeUNvbXBsZXhfQ2hlY2sodikpOworICAgIFRPX0NPTVBMRVgodiwgaSk7CisKKyAgICBpZiAoUHlMb25nX0NoZWNrKHcpKSB7CisgICAgICAgIC8qIENoZWNrIGZvciAwLjAgaW1hZ2luYXJ5IHBhcnQgZmlyc3QgdG8gYXZvaWQgdGhlIHJpY2gKKyAgICAgICAgICogY29tcGFyaXNvbiB3aGVuIHBvc3NpYmxlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGkuaW1hZyA9PSAwLjApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpqLCAqc3ViX3JlczsKKyAgICAgICAgICAgIGogPSBQeUZsb2F0X0Zyb21Eb3VibGUoaS5yZWFsKTsKKyAgICAgICAgICAgIGlmIChqID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgIHN1Yl9yZXMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZShqLCB3LCBvcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaik7CisgICAgICAgICAgICByZXR1cm4gc3ViX3JlczsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGVxdWFsID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKHcpKSB7CisgICAgICAgIGVxdWFsID0gKGkucmVhbCA9PSBQeUZsb2F0X0FzRG91YmxlKHcpICYmIGkuaW1hZyA9PSAwLjApOworICAgIH0KKyAgICBlbHNlIGlmIChQeUNvbXBsZXhfQ2hlY2sodykpIHsKKyAgICAgICAgUHlfY29tcGxleCBqOworCisgICAgICAgIFRPX0NPTVBMRVgodywgaik7CisgICAgICAgIGVxdWFsID0gKGkucmVhbCA9PSBqLnJlYWwgJiYgaS5pbWFnID09IGouaW1hZyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBnb3RvIFVuaW1wbGVtZW50ZWQ7CisgICAgfQorCisgICAgaWYgKGVxdWFsID09IChvcCA9PSBQeV9FUSkpCisgICAgICAgICByZXMgPSBQeV9UcnVlOwogICAgIGVsc2UKLSAgICAgICAgcmVzID0gUHlfRmFsc2U7CisgICAgICAgICByZXMgPSBQeV9GYWxzZTsKIAogICAgIFB5X0lOQ1JFRihyZXMpOwogICAgIHJldHVybiByZXM7CisKK1VuaW1wbGVtZW50ZWQ6CisgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsKKyAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03MzgsMjYgKzc2NCwzMCBAQAogICAgIGNoYXIgKmVuZDsKICAgICBkb3VibGUgeD0wLjAsIHk9MC4wLCB6OwogICAgIGludCBnb3RfYnJhY2tldD0wOwotICAgIGNoYXIgc19idWZmZXJbMjU2XTsKKyAgICBQeU9iamVjdCAqc19idWZmZXIgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwogCiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh2KSkgewotICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKHYpID49IChQeV9zc2l6ZV90KXNpemVvZihzX2J1ZmZlcikpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBsaXRlcmFsIHRvbyBsYXJnZSB0byBjb252ZXJ0Iik7CisgICAgICAgIFB5X3NzaXplX3QgaSwgYnVmbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHYpOworICAgICAgICBQeV9VTklDT0RFICpidWZwdHI7CisgICAgICAgIHNfYnVmZmVyID0gUHlVbmljb2RlX1RyYW5zZm9ybURlY2ltYWxUb0FTQ0lJKAorICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodiksIGJ1Zmxlbik7CisgICAgICAgIGlmIChzX2J1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIFJlcGxhY2Ugbm9uLUFTQ0lJIHdoaXRlc3BhY2Ugd2l0aCAnICcgKi8KKyAgICAgICAgYnVmcHRyID0gUHlVbmljb2RlX0FTX1VOSUNPREUoc19idWZmZXIpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnVmbGVuOyBpKyspIHsKKyAgICAgICAgICAgIFB5X1VOSUNPREUgY2ggPSBidWZwdHJbaV07CisgICAgICAgICAgICBpZiAoY2ggPiAxMjcgJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgICAgICBidWZwdHJbaV0gPSAnICc7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFB5VW5pY29kZV9FbmNvZGVEZWNpbWFsKFB5VW5pY29kZV9BU19VTklDT0RFKHYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc19idWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBzID0gc19idWZmZXI7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgcyA9IF9QeVVuaWNvZGVfQXNTdHJpbmdBbmRTaXplKHNfYnVmZmVyLCAmbGVuKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih2LCAmcywgJmxlbikpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJnIGlzIG5vdCBhIHN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtODAwLDcgKzgzMCw3IEBACiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1ZhbHVlRXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBpZiAoZW5kICE9IHMpIHsKICAgICAgICAgLyogYWxsIDQgZm9ybXMgc3RhcnRpbmcgd2l0aCA8ZmxvYXQ+IGxhbmQgaGVyZSAqLwpAQCAtODEzLDcgKzg0Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVmFsdWVFcnJvcikpCiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChlbmQgIT0gcykKICAgICAgICAgICAgICAgICAvKiA8ZmxvYXQ+PHNpZ25lZC1mbG9hdD5qICovCkBAIC04NjgsMjQgKzg5OCwyNiBAQAogICAgIGlmIChzLXN0YXJ0ICE9IGxlbikKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKIAorICAgIFB5X1hERUNSRUYoc19idWZmZXIpOwogICAgIHJldHVybiBjb21wbGV4X3N1YnR5cGVfZnJvbV9kb3VibGVzKHR5cGUsIHgsIHkpOwogCiAgIHBhcnNlX2Vycm9yOgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZyBpcyBhIG1hbGZvcm1lZCBzdHJpbmciKTsKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihzX2J1ZmZlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBjb21wbGV4X25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeU9iamVjdCAqciwgKmksICp0bXAsICpmOworICAgIFB5T2JqZWN0ICpyLCAqaSwgKnRtcDsKICAgICBQeU51bWJlck1ldGhvZHMgKm5iciwgKm5iaSA9IE5VTEw7CiAgICAgUHlfY29tcGxleCBjciwgY2k7CiAgICAgaW50IG93bl9yID0gMDsKICAgICBpbnQgY3JfaXNfY29tcGxleCA9IDA7CiAgICAgaW50IGNpX2lzX2NvbXBsZXggPSAwOwotICAgIHN0YXRpYyBQeU9iamVjdCAqY29tcGxleHN0cjsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InJlYWwiLCAiaW1hZyIsIDB9OwogCiAgICAgciA9IFB5X0ZhbHNlOwpAQCAtOTIwLDI2ICs5NTIsMTUgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogWFhYIEhhY2sgdG8gc3VwcG9ydCBjbGFzc2VzIHdpdGggX19jb21wbGV4X18gbWV0aG9kICovCi0gICAgaWYgKGNvbXBsZXhzdHIgPT0gTlVMTCkgewotICAgICAgICBjb21wbGV4c3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY29tcGxleF9fIik7Ci0gICAgICAgIGlmIChjb21wbGV4c3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZiA9IFB5T2JqZWN0X0dldEF0dHIociwgY29tcGxleHN0cik7Ci0gICAgaWYgKGYgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX05ldygwKTsKLSAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByID0gUHlFdmFsX0NhbGxPYmplY3QoZiwgYXJncyk7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKLSAgICAgICAgUHlfREVDUkVGKGYpOwotICAgICAgICBpZiAociA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdG1wID0gdHJ5X2NvbXBsZXhfc3BlY2lhbF9tZXRob2Qocik7CisgICAgaWYgKHRtcCkgeworICAgICAgICByID0gdG1wOwogICAgICAgICBvd25fciA9IDE7CiAgICAgfQorICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgbmJyID0gci0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgIGlmIChpICE9IE5VTEwpCiAgICAgICAgIG5iaSA9IGktPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKQEAgLTEwNzksNyArMTEwMCw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgKGhhc2hmdW5jKWNvbXBsZXhfaGFzaCwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCi0gICAgKHJlcHJmdW5jKWNvbXBsZXhfc3RyLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAocmVwcmZ1bmMpY29tcGxleF9yZXByLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KQEAgLTExMDQsNSArMTEyNSwzIEBACiAgICAgY29tcGxleF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICBQeU9iamVjdF9EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCmluZGV4IDllZGE0YmQuLjkzZGFlZmQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGVzY3JvYmplY3QuYworKysgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKQEAgLTkyLDcgKzkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRvciAnJVYnIGZvciB0eXBlICclcycgIgogICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBlaXRoZXIgYW4gb2JqZWN0IG9yIGEgdHlwZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JfbmFtZSgoUHlEZXNjck9iamVjdCAqKWRlc2NyKSwgIj8iLAotICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5kX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGVzY3JfVFlQRShkZXNjciktPnRwX25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMDEsMTYgKzEwMSwxNiBAQAogICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0b3IgJyVWJyBmb3IgdHlwZSAnJXMnICIKICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhIHR5cGUsIG5vdCBhICclcycgYXMgYXJnIDIiLAogICAgICAgICAgICAgICAgICAgICAgZGVzY3JfbmFtZSgoUHlEZXNjck9iamVjdCAqKWRlc2NyKSwgIj8iLAotICAgICAgICAgICAgICAgICAgICAgZGVzY3ItPmRfdHlwZS0+dHBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5RGVzY3JfVFlQRShkZXNjciktPnRwX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICghUHlUeXBlX0lzU3VidHlwZSgoUHlUeXBlT2JqZWN0ICopdHlwZSwgZGVzY3ItPmRfdHlwZSkpIHsKKyAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUoKFB5VHlwZU9iamVjdCAqKXR5cGUsIFB5RGVzY3JfVFlQRShkZXNjcikpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRvciAnJVYnIGZvciB0eXBlICclcycgIgogICAgICAgICAgICAgICAgICAgICAgImRvZXNuJ3QgYXBwbHkgdG8gdHlwZSAnJXMnIiwKICAgICAgICAgICAgICAgICAgICAgIGRlc2NyX25hbWUoKFB5RGVzY3JPYmplY3QgKilkZXNjciksICI/IiwKLSAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5kX3R5cGUtPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX1RZUEUoZGVzY3IpLT50cF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgKChQeVR5cGVPYmplY3QgKil0eXBlKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0OSw3ICsxNDksNyBAQAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZSAnJVYnIG9mICclLjEwMHMnIG9iamVjdHMgaXMgbm90IHJlYWRhYmxlIiwKICAgICAgICAgICAgICAgICAgZGVzY3JfbmFtZSgoUHlEZXNjck9iamVjdCAqKWRlc2NyKSwgIj8iLAotICAgICAgICAgICAgICAgICBkZXNjci0+ZF90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgUHlEZXNjcl9UWVBFKGRlc2NyKS0+dHBfbmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIwNCw3ICsyMDQsNyBAQAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwKICAgICAgICAgICAgICAgICAgImF0dHJpYnV0ZSAnJVYnIG9mICclLjEwMHMnIG9iamVjdHMgaXMgbm90IHdyaXRhYmxlIiwKICAgICAgICAgICAgICAgICAgZGVzY3JfbmFtZSgoUHlEZXNjck9iamVjdCAqKWRlc2NyKSwgIj8iLAotICAgICAgICAgICAgICAgICBkZXNjci0+ZF90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgUHlEZXNjcl9UWVBFKGRlc2NyKS0+dHBfbmFtZSk7CiAgICAgcmV0dXJuIC0xOwogfQogCkBAIC0yMjIsMTggKzIyMiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0b3IgJyVWJyBvZiAnJS4xMDBzJyAiCiAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50IiwKICAgICAgICAgICAgICAgICAgICAgIGRlc2NyX25hbWUoKFB5RGVzY3JPYmplY3QgKilkZXNjciksICI/IiwKLSAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5kX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgUHlEZXNjcl9UWVBFKGRlc2NyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBzZWxmID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsKICAgICBpZiAoIV9QeU9iamVjdF9SZWFsSXNTdWJjbGFzcygoUHlPYmplY3QgKilQeV9UWVBFKHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKShkZXNjci0+ZF90eXBlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilQeURlc2NyX1RZUEUoZGVzY3IpKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0b3IgJyVWJyAiCiAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgYSAnJS4xMDBzJyBvYmplY3QgIgogICAgICAgICAgICAgICAgICAgICAgImJ1dCByZWNlaXZlZCBhICclLjEwMHMnIiwKICAgICAgICAgICAgICAgICAgICAgIGRlc2NyX25hbWUoKFB5RGVzY3JPYmplY3QgKilkZXNjciksICI/IiwKLSAgICAgICAgICAgICAgICAgICAgIGRlc2NyLT5kX3R5cGUtPnRwX25hbWUsCisgICAgICAgICAgICAgICAgICAgICBQeURlc2NyX1RZUEUoZGVzY3IpLT50cF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgc2VsZi0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI1OCw3ICsyNTgsNyBAQAogewogICAgIFB5T2JqZWN0ICpmdW5jLCAqcmVzdWx0OwogCi0gICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIChQeU9iamVjdCAqKWRlc2NyLT5kX3R5cGUpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCAoUHlPYmplY3QgKilQeURlc2NyX1RZUEUoZGVzY3IpKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjgxLDE4ICsyODEsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdG9yICclVicgb2YgJyUuMTAwcycgIgogICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBuZWVkcyBhbiBhcmd1bWVudCIsCiAgICAgICAgICAgICAgICAgICAgICBkZXNjcl9uYW1lKChQeURlc2NyT2JqZWN0ICopZGVzY3IpLCAiPyIsCi0gICAgICAgICAgICAgICAgICAgICBkZXNjci0+ZF90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgIFB5RGVzY3JfVFlQRShkZXNjciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgc2VsZiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7CiAgICAgaWYgKCFfUHlPYmplY3RfUmVhbElzU3ViY2xhc3MoKFB5T2JqZWN0ICopUHlfVFlQRShzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikoZGVzY3ItPmRfdHlwZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopUHlEZXNjcl9UWVBFKGRlc2NyKSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdG9yICclVicgIgogICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIGEgJyUuMTAwcycgb2JqZWN0ICIKICAgICAgICAgICAgICAgICAgICAgICJidXQgcmVjZWl2ZWQgYSAnJS4xMDBzJyIsCiAgICAgICAgICAgICAgICAgICAgICBkZXNjcl9uYW1lKChQeURlc2NyT2JqZWN0ICopZGVzY3IpLCAiPyIsCi0gICAgICAgICAgICAgICAgICAgICBkZXNjci0+ZF90eXBlLT50cF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgUHlEZXNjcl9UWVBFKGRlc2NyKS0+dHBfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC03MTIsMTkgKzcxMiwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHByb3h5X2tleXMocHJveHlvYmplY3QgKnBwKQogewotICAgIHJldHVybiBQeU1hcHBpbmdfS2V5cyhwcC0+ZGljdCk7CisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxNZXRob2QocHAtPmRpY3QsICJrZXlzIiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBwcm94eV92YWx1ZXMocHJveHlvYmplY3QgKnBwKQogewotICAgIHJldHVybiBQeU1hcHBpbmdfVmFsdWVzKHBwLT5kaWN0KTsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChwcC0+ZGljdCwgInZhbHVlcyIsIE5VTEwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcHJveHlfaXRlbXMocHJveHlvYmplY3QgKnBwKQogewotICAgIHJldHVybiBQeU1hcHBpbmdfSXRlbXMocHAtPmRpY3QpOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsTWV0aG9kKHBwLT5kaWN0LCAiaXRlbXMiLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTkyNCwxMCArOTI0LDEwIEBACiAgICAgcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiB3cmFwcGVyX2hhc2god3JhcHBlcm9iamVjdCAqd3ApCiB7Ci0gICAgaW50IHgsIHk7CisgICAgUHlfaGFzaF90IHgsIHk7CiAgICAgeCA9IF9QeV9IYXNoUG9pbnRlcih3cC0+ZGVzY3IpOwogICAgIGlmICh4ID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CkBAIC05NTcsNyArOTU3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB3cmFwcGVyX29iamNsYXNzKHdyYXBwZXJvYmplY3QgKndwKQogewotICAgIFB5T2JqZWN0ICpjID0gKFB5T2JqZWN0ICopd3AtPmRlc2NyLT5kX3R5cGU7CisgICAgUHlPYmplY3QgKmMgPSAoUHlPYmplY3QgKilQeURlc2NyX1RZUEUod3AtPmRlc2NyKTsKIAogICAgIFB5X0lOQ1JFRihjKTsKICAgICByZXR1cm4gYzsKQEAgLTEwNjgsNyArMTA2OCw3IEBACiAgICAgYXNzZXJ0KFB5T2JqZWN0X1R5cGVDaGVjayhkLCAmUHlXcmFwcGVyRGVzY3JfVHlwZSkpOwogICAgIGRlc2NyID0gKFB5V3JhcHBlckRlc2NyT2JqZWN0ICopZDsKICAgICBhc3NlcnQoX1B5T2JqZWN0X1JlYWxJc1N1YmNsYXNzKChQeU9iamVjdCAqKVB5X1RZUEUoc2VsZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKikoZGVzY3ItPmRfdHlwZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKVB5RGVzY3JfVFlQRShkZXNjcikpKTsKIAogICAgIHdwID0gUHlPYmplY3RfR0NfTmV3KHdyYXBwZXJvYmplY3QsICZ3cmFwcGVydHlwZSk7CiAgICAgaWYgKHdwICE9IE5VTEwpIHsKQEAgLTExMjQsNyArMTEyNCw3IEBACiB9IHByb3BlcnR5b2JqZWN0OwogCiBzdGF0aWMgUHlPYmplY3QgKiBwcm9wZXJ0eV9jb3B5KFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKik7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBwcm9wZXJ0eV9tZW1iZXJzW10gPSB7CiAgICAgeyJmZ2V0IiwgVF9PQkpFQ1QsIG9mZnNldG9mKHByb3BlcnR5b2JqZWN0LCBwcm9wX2dldCksIFJFQURPTkxZfSwKQEAgLTExNDEsNyArMTE0MSw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHJvcGVydHlfZ2V0dGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZ2V0dGVyKQogewotICAgIHJldHVybiBwcm9wZXJ0eV9jb3B5KHNlbGYsIGdldHRlciwgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgcmV0dXJuIHByb3BlcnR5X2NvcHkoc2VsZiwgZ2V0dGVyLCBOVUxMLCBOVUxMKTsKIH0KIAogCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHByb3BlcnR5X3NldHRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNldHRlcikKIHsKLSAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBzZXR0ZXIsIE5VTEwsIE5VTEwpOworICAgIHJldHVybiBwcm9wZXJ0eV9jb3B5KHNlbGYsIE5VTEwsIHNldHRlciwgTlVMTCk7CiB9CiAKIApAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwcm9wZXJ0eV9kZWxldGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZGVsZXRlcikKIHsKLSAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBOVUxMLCBkZWxldGVyLCBOVUxMKTsKKyAgICByZXR1cm4gcHJvcGVydHlfY29weShzZWxmLCBOVUxMLCBOVUxMLCBkZWxldGVyKTsKIH0KIAogCkBAIC0xMTk5LDcgKzExOTksNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJ1bnJlYWRhYmxlIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihncy0+cHJvcF9nZXQsICIoTykiLCBvYmopOworICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGdzLT5wcm9wX2dldCwgb2JqLCBOVUxMKTsKIH0KIAogc3RhdGljIGludApAQCAtMTIyMCw5ICsxMjIwLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAodmFsdWUgPT0gTlVMTCkKLSAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGZ1bmMsICIoTykiLCBvYmopOworICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZ1bmMsIG9iaiwgTlVMTCk7CiAgICAgZWxzZQotICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZnVuYywgIihPTykiLCBvYmosIHZhbHVlKTsKKyAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmdW5jLCBvYmosIHZhbHVlLCBOVUxMKTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9ERUNSRUYocmVzKTsKQEAgLTEyMzAsMTEgKzEyMzAsMTAgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXByb3BlcnR5X2NvcHkoUHlPYmplY3QgKm9sZCwgUHlPYmplY3QgKmdldCwgUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKmRlbCwKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqZG9jKQorcHJvcGVydHlfY29weShQeU9iamVjdCAqb2xkLCBQeU9iamVjdCAqZ2V0LCBQeU9iamVjdCAqc2V0LCBQeU9iamVjdCAqZGVsKQogewogICAgIHByb3BlcnR5b2JqZWN0ICpwb2xkID0gKHByb3BlcnR5b2JqZWN0ICopb2xkOwotICAgIFB5T2JqZWN0ICpuZXcsICp0eXBlOworICAgIFB5T2JqZWN0ICpuZXcsICp0eXBlLCAqZG9jOwogCiAgICAgdHlwZSA9IFB5T2JqZWN0X1R5cGUob2xkKTsKICAgICBpZiAodHlwZSA9PSBOVUxMKQpAQCAtMTI1MiwxNSArMTI1MSwxMiBAQAogICAgICAgICBQeV9YREVDUkVGKGRlbCk7CiAgICAgICAgIGRlbCA9IHBvbGQtPnByb3BfZGVsID8gcG9sZC0+cHJvcF9kZWwgOiBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoZG9jID09IE5VTEwgfHwgZG9jID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfWERFQ1JFRihkb2MpOwotICAgICAgICBpZiAocG9sZC0+Z2V0dGVyX2RvYyAmJiBnZXQgIT0gUHlfTm9uZSkgewotICAgICAgICAgICAgLyogbWFrZSBfaW5pdCB1c2UgX19kb2NfXyBmcm9tIGdldHRlciAqLwotICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGRvYyA9IHBvbGQtPnByb3BfZG9jID8gcG9sZC0+cHJvcF9kb2MgOiBQeV9Ob25lOwotICAgICAgICB9CisgICAgaWYgKHBvbGQtPmdldHRlcl9kb2MgJiYgZ2V0ICE9IFB5X05vbmUpIHsKKyAgICAgICAgLyogbWFrZSBfaW5pdCB1c2UgX19kb2NfXyBmcm9tIGdldHRlciAqLworICAgICAgICBkb2MgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZG9jID0gcG9sZC0+cHJvcF9kb2MgPyBwb2xkLT5wcm9wX2RvYyA6IFB5X05vbmU7CiAgICAgfQogCiAgICAgbmV3ID0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbih0eXBlLCAiT09PTyIsIGdldCwgc2V0LCBkZWwsIGRvYyk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2RpY3RvYmplY3QuYyBiL09iamVjdHMvZGljdG9iamVjdC5jCmluZGV4IDg0OTJjNjEuLjNmYTVjYzQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGljdG9iamVjdC5jCisrKyBiL09iamVjdHMvZGljdG9iamVjdC5jCkBAIC0xMjQsMTUgKzEyNCw2IEBACiBwb2x5bm9taWFsLiAgSW4gVGltJ3MgZXhwZXJpbWVudHMgdGhlIGN1cnJlbnQgc2NoZW1lIHJhbiBmYXN0ZXIsIHByb2R1Y2VkCiBlcXVhbGx5IGdvb2QgY29sbGlzaW9uIHN0YXRpc3RpY3MsIG5lZWRlZCBsZXNzIGNvZGUgJiB1c2VkIGxlc3MgbWVtb3J5LgogCi1UaGVvcmV0aWNhbCBQeXRob24gMi41IGhlYWRhY2hlOiAgaGFzaCBjb2RlcyBhcmUgb25seSBDICJsb25nIiwgYnV0Ci1zaXplb2YoUHlfc3NpemVfdCkgPiBzaXplb2YobG9uZykgbWF5IGJlIHBvc3NpYmxlLiAgSW4gdGhhdCBjYXNlLCBhbmQgaWYgYQotZGljdCBpcyBnZW51aW5lbHkgaHVnZSwgdGhlbiBvbmx5IHRoZSBzbG90cyBkaXJlY3RseSByZWFjaGFibGUgdmlhIGluZGV4aW5nCi1ieSBhIEMgbG9uZyBjYW4gYmUgdGhlIGZpcnN0IHNsb3QgaW4gYSBwcm9iZSBzZXF1ZW5jZS4gIFRoZSBwcm9iZSBzZXF1ZW5jZQotd2lsbCBzdGlsbCBldmVudHVhbGx5IHJlYWNoIGV2ZXJ5IHNsb3QgaW4gdGhlIHRhYmxlLCBidXQgdGhlIGNvbGxpc2lvbiByYXRlCi1vbiBpbml0aWFsIHByb2JlcyBtYXkgYmUgbXVjaCBoaWdoZXIgdGhhbiB0aGlzIHNjaGVtZSB3YXMgZGVzaWduZWQgZm9yLgotR2V0dGluZyBhIGhhc2ggY29kZSBhcyBmYXQgYXMgUHlfc3NpemVfdCBpcyB0aGUgb25seSByZWFsIGN1cmUuICBCdXQgaW4KLXByYWN0aWNlLCB0aGlzIHByb2JhYmx5IHdvbid0IG1ha2UgYSBsaWNrIG9mIGRpZmZlcmVuY2UgZm9yIG1hbnkgeWVhcnMgKGF0Ci13aGljaCBwb2ludCBldmVyeW9uZSB3aWxsIGhhdmUgdGVyYWJ5dGVzIG9mIFJBTSBvbiA2NC1iaXQgYm94ZXMpLgogKi8KIAogLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCkBAIC0xNDgsNyArMTM5LDcgQEAKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KIHN0YXRpYyBQeURpY3RFbnRyeSAqCi1sb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIGxvbmcgaGFzaCk7Citsb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKTsKIAogI2lmZGVmIFNIT1dfQ09OVkVSU0lPTl9DT1VOVFMKIHN0YXRpYyBsb25nIGNyZWF0ZWQgPSAwTDsKQEAgLTMxOCw3ICszMDksNyBAQAogUHlEaWN0RW50cnkqLgogKi8KIHN0YXRpYyBQeURpY3RFbnRyeSAqCi1sb29rZGljdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBsb25nIGhhc2gpCitsb29rZGljdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKIHsKICAgICByZWdpc3RlciBzaXplX3QgaTsKICAgICByZWdpc3RlciBzaXplX3QgcGVydHVyYjsKQEAgLTQwNyw3ICszOTgsNyBAQAogICogVGhpcyBpcyB2YWx1YWJsZSBiZWNhdXNlIGRpY3RzIHdpdGggb25seSB1bmljb2RlIGtleXMgYXJlIHZlcnkgY29tbW9uLgogICovCiBzdGF0aWMgUHlEaWN0RW50cnkgKgotbG9va2RpY3RfdW5pY29kZShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBsb25nIGhhc2gpCitsb29rZGljdF91bmljb2RlKFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQogewogICAgIHJlZ2lzdGVyIHNpemVfdCBpOwogICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwpAQCAtNDU4LDYgKzQ0OSwyMSBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK19QeURpY3RfSGFzT25seVN0cmluZ0tleXMoUHlPYmplY3QgKmRpY3QpCit7CisgICAgUHlfc3NpemVfdCBwb3MgPSAwOworICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKKyAgICBhc3NlcnQoUHlEaWN0X0NoZWNrKGRpY3QpKTsKKyAgICAvKiBTaG9ydGN1dCAqLworICAgIGlmICgoKFB5RGljdE9iamVjdCAqKWRpY3QpLT5tYV9sb29rdXAgPT0gbG9va2RpY3RfdW5pY29kZSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KGRpY3QsICZwb3MsICZrZXksICZ2YWx1ZSkpCisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGtleSkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKwogI2lmZGVmIFNIT1dfVFJBQ0tfQ09VTlQKICNkZWZpbmUgSU5DUkVBU0VfVFJBQ0tfQ09VTlQgXAogICAgIChjb3VudF90cmFja2VkKyssIGNvdW50X3VudHJhY2tlZC0tKTsKQEAgLTUxMiwxMSArNTE4LDExIEBACiBSZXR1cm5zIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLCBvciAwIG9uIHN1Y2Nlc3MuCiAqLwogc3RhdGljIGludAotaW5zZXJ0ZGljdChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBsb25nIGhhc2gsIFB5T2JqZWN0ICp2YWx1ZSkKK2luc2VydGRpY3QocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqb2xkX3ZhbHVlOwogICAgIHJlZ2lzdGVyIFB5RGljdEVudHJ5ICplcDsKLSAgICB0eXBlZGVmIFB5RGljdEVudHJ5ICooKmxvb2t1cGZ1bmMpKFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqLCBsb25nKTsKKyAgICB0eXBlZGVmIFB5RGljdEVudHJ5ICooKmxvb2t1cGZ1bmMpKFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqLCBQeV9oYXNoX3QpOwogCiAgICAgYXNzZXJ0KG1wLT5tYV9sb29rdXAgIT0gTlVMTCk7CiAgICAgZXAgPSBtcC0+bWFfbG9va3VwKG1wLCBrZXksIGhhc2gpOwpAQCAtNTQwLDcgKzU0Niw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYoZHVtbXkpOwogICAgICAgICB9CiAgICAgICAgIGVwLT5tZV9rZXkgPSBrZXk7Ci0gICAgICAgIGVwLT5tZV9oYXNoID0gKFB5X3NzaXplX3QpaGFzaDsKKyAgICAgICAgZXAtPm1lX2hhc2ggPSBoYXNoOwogICAgICAgICBlcC0+bWVfdmFsdWUgPSB2YWx1ZTsKICAgICAgICAgbXAtPm1hX3VzZWQrKzsKICAgICB9CkBAIC01NTYsNyArNTYyLDcgQEAKIGlzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgIGFuZCBgdmFsdWVgLgogKi8KIHN0YXRpYyB2b2lkCi1pbnNlcnRkaWN0X2NsZWFuKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIGxvbmcgaGFzaCwKK2luc2VydGRpY3RfY2xlYW4ocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gsCiAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICByZWdpc3RlciBzaXplX3QgaTsKQEAgLTU3NSw3ICs1ODEsNyBAQAogICAgIGFzc2VydChlcC0+bWVfdmFsdWUgPT0gTlVMTCk7CiAgICAgbXAtPm1hX2ZpbGwrKzsKICAgICBlcC0+bWVfa2V5ID0ga2V5OwotICAgIGVwLT5tZV9oYXNoID0gKFB5X3NzaXplX3QpaGFzaDsKKyAgICBlcC0+bWVfaGFzaCA9IGhhc2g7CiAgICAgZXAtPm1lX3ZhbHVlID0gdmFsdWU7CiAgICAgbXAtPm1hX3VzZWQrKzsKIH0KQEAgLTY1Miw4ICs2NTgsNyBAQAogICAgIGZvciAoZXAgPSBvbGR0YWJsZTsgaSA+IDA7IGVwKyspIHsKICAgICAgICAgaWYgKGVwLT5tZV92YWx1ZSAhPSBOVUxMKSB7ICAgICAgICAgICAgIC8qIGFjdGl2ZSBlbnRyeSAqLwogICAgICAgICAgICAgLS1pOwotICAgICAgICAgICAgaW5zZXJ0ZGljdF9jbGVhbihtcCwgZXAtPm1lX2tleSwgKGxvbmcpZXAtPm1lX2hhc2gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5tZV92YWx1ZSk7CisgICAgICAgICAgICBpbnNlcnRkaWN0X2NsZWFuKG1wLCBlcC0+bWVfa2V5LCBlcC0+bWVfaGFzaCwgZXAtPm1lX3ZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChlcC0+bWVfa2V5ICE9IE5VTEwpIHsgICAgICAgICAgLyogZHVtbXkgZW50cnkgKi8KICAgICAgICAgICAgIC0taTsKQEAgLTY5OCw3ICs3MDMsNyBAQAogUHlPYmplY3QgKgogUHlEaWN0X0dldEl0ZW0oUHlPYmplY3QgKm9wLCBQeU9iamVjdCAqa2V5KQogewotICAgIGxvbmcgaGFzaDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKW9wOwogICAgIFB5RGljdEVudHJ5ICplcDsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CkBAIC03MTksNyArNzI0LDggQEAKICAgICAgICBMZXQncyBqdXN0IGhvcGUgdGhhdCBubyBleGNlcHRpb24gb2NjdXJzIHRoZW4uLi4gIFRoaXMgbXVzdCBiZQogICAgICAgIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgYW5kIG5vdCBQeVRocmVhZFN0YXRlX0dFVCgpIGJlY2F1c2UgaW4gZGVidWcKICAgICAgICBtb2RlLCB0aGUgbGF0dGVyIGNvbXBsYWlucyBpZiB0c3RhdGUgaXMgTlVMTC4gKi8KLSAgICB0c3RhdGUgPSBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworICAgIHRzdGF0ZSA9IChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgKKyAgICAgICAgJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwogICAgIGlmICh0c3RhdGUgIT0gTlVMTCAmJiB0c3RhdGUtPmN1cmV4Y190eXBlICE9IE5VTEwpIHsKICAgICAgICAgLyogcHJlc2VydmUgdGhlIGV4aXN0aW5nIGV4Y2VwdGlvbiAqLwogICAgICAgICBQeU9iamVjdCAqZXJyX3R5cGUsICplcnJfdmFsdWUsICplcnJfdGI7CkBAIC03NDcsNyArNzUzLDcgQEAKIFB5T2JqZWN0ICoKIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKFB5T2JqZWN0ICpvcCwgUHlPYmplY3QgKmtleSkKIHsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0T2JqZWN0Km1wID0gKFB5RGljdE9iamVjdCAqKW9wOwogICAgIFB5RGljdEVudHJ5ICplcDsKIApAQCAtNzgwLDcgKzc4Niw3IEBACiBQeURpY3RfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICByZWdpc3RlciBQeURpY3RPYmplY3QgKm1wOwotICAgIHJlZ2lzdGVyIGxvbmcgaGFzaDsKKyAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKIAogICAgIGlmICghUHlEaWN0X0NoZWNrKG9wKSkgewpAQCAtODI2LDcgKzgzMiw3IEBACiBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcDsKLSAgICByZWdpc3RlciBsb25nIGhhc2g7CisgICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7CiAgICAgcmVnaXN0ZXIgUHlEaWN0RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICpvbGRfdmFsdWUsICpvbGRfa2V5OwogCkBAIC05NzIsNyArOTc4LDcgQEAKIAogLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBQeURpY3RfTmV4dCB0aGF0IHJldHVybnMgYSBoYXNoIHZhbHVlIGluIGFkZGl0aW9uIHRvIHRoZSBrZXkgYW5kIHZhbHVlLiovCiBpbnQKLV9QeURpY3RfTmV4dChQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgKnBwb3MsIFB5T2JqZWN0ICoqcGtleSwgUHlPYmplY3QgKipwdmFsdWUsIGxvbmcgKnBoYXNoKQorX1B5RGljdF9OZXh0KFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCAqcHBvcywgUHlPYmplY3QgKipwa2V5LCBQeU9iamVjdCAqKnB2YWx1ZSwgUHlfaGFzaF90ICpwaGFzaCkKIHsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CiAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBtYXNrOwpAQCAtOTkwLDcgKzk5Niw3IEBACiAgICAgKnBwb3MgPSBpKzE7CiAgICAgaWYgKGkgPiBtYXNrKQogICAgICAgICByZXR1cm4gMDsKLSAgICAqcGhhc2ggPSAobG9uZykoZXBbaV0ubWVfaGFzaCk7CisgICAgKnBoYXNoID0gZXBbaV0ubWVfaGFzaDsKICAgICBpZiAocGtleSkKICAgICAgICAgKnBrZXkgPSBlcFtpXS5tZV9rZXk7CiAgICAgaWYgKHB2YWx1ZSkKQEAgLTExMTIsNyArMTExOCw3IEBACiBkaWN0X3N1YnNjcmlwdChQeURpY3RPYmplY3QgKm1wLCByZWdpc3RlciBQeU9iamVjdCAqa2V5KQogewogICAgIFB5T2JqZWN0ICp2OwotICAgIGxvbmcgaGFzaDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RFbnRyeSAqZXA7CiAgICAgYXNzZXJ0KG1wLT5tYV90YWJsZSAhPSBOVUxMKTsKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKQEAgLTEzMDYsNyArMTMxMiw3IEBACiAgICAgICAgIFB5T2JqZWN0ICpvbGR2YWx1ZTsKICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICBsb25nIGhhc2g7CisgICAgICAgIFB5X2hhc2hfdCBoYXNoOwogCiAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKHNlcSkpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzI0LDcgKzEzMzAsNyBAQAogICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgbG9uZyBoYXNoOworICAgICAgICBQeV9oYXNoX3QgaGFzaDsKIAogICAgICAgICBpZiAoZGljdHJlc2l6ZShtcCwgUHlTZXRfR0VUX1NJWkUoc2VxKSkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEzODYsOCArMTM5MiwxMiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBQeURpY3RfTWVyZ2VGcm9tU2VxMihzZWxmLCBhcmcsIDEpOwogICAgIH0KLSAgICBpZiAocmVzdWx0ID09IDAgJiYga3dkcyAhPSBOVUxMKQotICAgICAgICByZXN1bHQgPSBQeURpY3RfTWVyZ2Uoc2VsZiwga3dkcywgMSk7CisgICAgaWYgKHJlc3VsdCA9PSAwICYmIGt3ZHMgIT0gTlVMTCkgeworICAgICAgICBpZiAoUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzKGt3ZHMpKQorICAgICAgICAgICAgcmVzdWx0ID0gUHlEaWN0X01lcmdlKHNlbGYsIGt3ZHMsIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTUyOSw3ICsxNTM5LDcgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZW50cnktPm1lX2tleSk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGVudHJ5LT5tZV92YWx1ZSk7CiAgICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGVudHJ5LT5tZV9rZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpZW50cnktPm1lX2hhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm1lX2hhc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm1lX3ZhbHVlKSAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CkBAIC0xNzEyLDcgKzE3MjIsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRpY3RfY29udGFpbnMocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSkKIHsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0RW50cnkgKmVwOwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CkBAIC0xNzMzLDcgKzE3NDMsNyBAQAogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOwogICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwotICAgIGxvbmcgaGFzaDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RFbnRyeSAqZXA7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJnZXQiLCAxLCAyLCAma2V5LCAmZmFpbG9iaikpCkBAIC0xNzYyLDcgKzE3NzIsNyBAQAogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOwogICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwotICAgIGxvbmcgaGFzaDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RFbnRyeSAqZXA7CiAKICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmZhaWxvYmopKQpAQCAtMTc5OCw3ICsxODA4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkaWN0X3BvcChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICpvbGRfdmFsdWUsICpvbGRfa2V5OwogICAgIFB5T2JqZWN0ICprZXksICpkZWZsdCA9IE5VTEw7CkBAIC0xODQzLDcgKzE4NTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRpY3RfcG9waXRlbShQeURpY3RPYmplY3QgKm1wKQogewotICAgIFB5X3NzaXplX3QgaSA9IDA7CisgICAgUHlfaGFzaF90IGkgPSAwOwogICAgIFB5RGljdEVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqcmVzOwogCkBAIC0yMDE4LDcgKzIwMjgsNyBAQAogaW50CiBQeURpY3RfQ29udGFpbnMoUHlPYmplY3QgKm9wLCBQeU9iamVjdCAqa2V5KQogewotICAgIGxvbmcgaGFzaDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKW9wOwogICAgIFB5RGljdEVudHJ5ICplcDsKIApAQCAtMjAzNCw3ICsyMDQ0LDcgQEAKIAogLyogSW50ZXJuYWwgdmVyc2lvbiBvZiBQeURpY3RfQ29udGFpbnMgdXNlZCB3aGVuIHRoZSBoYXNoIHZhbHVlIGlzIGFscmVhZHkga25vd24gKi8KIGludAotX1B5RGljdF9Db250YWlucyhQeU9iamVjdCAqb3AsIFB5T2JqZWN0ICprZXksIGxvbmcgaGFzaCkKK19QeURpY3RfQ29udGFpbnMoUHlPYmplY3QgKm9wLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKW9wOwogICAgIFB5RGljdEVudHJ5ICplcDsKQEAgLTIxMjMsNyArMjEzMyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAmZGljdF9hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgJmRpY3RfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgKGhhc2hmdW5jKVB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAvKiB0cF9oYXNoICovCisgICAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkLCAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCkBAIC0yNzg2LDcgKzI3OTYsNjMgQEAKICAgICAoYmluYXJ5ZnVuYylkaWN0dmlld3Nfb3IsICAgICAgICAgICAvKm5iX29yKi8KIH07CiAKK3N0YXRpYyBQeU9iamVjdCoKK2RpY3R2aWV3c19pc2Rpc2pvaW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKml0OworICAgIFB5T2JqZWN0ICppdGVtID0gTlVMTDsKKworICAgIGlmIChzZWxmID09IG90aGVyKSB7CisgICAgICAgIGlmIChkaWN0dmlld19sZW4oKGRpY3R2aWV3b2JqZWN0ICopc2VsZikgPT0gMCkKKyAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CisgICAgfQorCisgICAgLyogSXRlcmF0ZSBvdmVyIHRoZSBzaG9ydGVyIG9iamVjdCAob25seSBpZiBvdGhlciBpcyBhIHNldCwKKyAgICAgKiBiZWNhdXNlIFB5U2VxdWVuY2VfQ29udGFpbnMgbWF5IGJlIGV4cGVuc2l2ZSBvdGhlcndpc2UpOiAqLworICAgIGlmIChQeUFueVNldF9DaGVjayhvdGhlcikgfHwgUHlEaWN0Vmlld1NldF9DaGVjayhvdGhlcikpIHsKKyAgICAgICAgUHlfc3NpemVfdCBsZW5fc2VsZiA9IGRpY3R2aWV3X2xlbigoZGljdHZpZXdvYmplY3QgKilzZWxmKTsKKyAgICAgICAgUHlfc3NpemVfdCBsZW5fb3RoZXIgPSBQeU9iamVjdF9TaXplKG90aGVyKTsKKyAgICAgICAgaWYgKGxlbl9vdGhlciA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICgobGVuX290aGVyID4gbGVuX3NlbGYpKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gb3RoZXI7CisgICAgICAgICAgICBvdGhlciA9IHNlbGY7CisgICAgICAgICAgICBzZWxmID0gdG1wOworICAgICAgICB9CisgICAgfQorCisgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKG90aGVyKTsKKyAgICBpZiAoaXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoKGl0ZW0gPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKKyAgICAgICAgaW50IGNvbnRhaW5zID0gUHlTZXF1ZW5jZV9Db250YWlucyhzZWxmLCBpdGVtKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICBpZiAoY29udGFpbnMgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb250YWlucykgeworICAgICAgICAgICAgUHlfREVDUkVGKGl0KTsKKyAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9ERUNSRUYoaXQpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsgLyogUHlJdGVyX05leHQgcmFpc2VkIGFuIGV4Y2VwdGlvbi4gKi8KKyAgICBQeV9SRVRVUk5fVFJVRTsKK30KKworUHlEb2NfU1RSVkFSKGlzZGlzam9pbnRfZG9jLAorIlJldHVybiBUcnVlIGlmIHRoZSB2aWV3IGFuZCB0aGUgZ2l2ZW4gaXRlcmFibGUgaGF2ZSBhIG51bGwgaW50ZXJzZWN0aW9uLiIpOworCiBzdGF0aWMgUHlNZXRob2REZWYgZGljdGtleXNfbWV0aG9kc1tdID0geworICAgIHsiaXNkaXNqb2ludCIsICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3R2aWV3c19pc2Rpc2pvaW50LCAgTUVUSF9PLAorICAgICBpc2Rpc2pvaW50X2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI4NzEsNiArMjkzNyw4IEBACiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgZGljdGl0ZW1zX21ldGhvZHNbXSA9IHsKKyAgICB7ImlzZGlzam9pbnQiLCAgICAgIChQeUNGdW5jdGlvbilkaWN0dmlld3NfaXNkaXNqb2ludCwgIE1FVEhfTywKKyAgICAgaXNkaXNqb2ludF9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCmRpZmYgLS1naXQgYS9PYmplY3RzL2VudW1vYmplY3QuYyBiL09iamVjdHMvZW51bW9iamVjdC5jCmluZGV4IGI1NzlmOTYuLjAwYTMzNDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZW51bW9iamVjdC5jCisrKyBiL09iamVjdHMvZW51bW9iamVjdC5jCkBAIC0xNTksMTIgKzE1OSwxMyBAQAogfQogCiBQeURvY19TVFJWQVIoZW51bV9kb2MsCi0iZW51bWVyYXRlKGl0ZXJhYmxlKSAtPiBpdGVyYXRvciBmb3IgaW5kZXgsIHZhbHVlIG9mIGl0ZXJhYmxlXG4iCisiZW51bWVyYXRlKGl0ZXJhYmxlWywgc3RhcnRdKSAtPiBpdGVyYXRvciBmb3IgaW5kZXgsIHZhbHVlIG9mIGl0ZXJhYmxlXG4iCiAiXG4iCiAiUmV0dXJuIGFuIGVudW1lcmF0ZSBvYmplY3QuICBpdGVyYWJsZSBtdXN0IGJlIGFub3RoZXIgb2JqZWN0IHRoYXQgc3VwcG9ydHNcbiIKICJpdGVyYXRpb24uICBUaGUgZW51bWVyYXRlIG9iamVjdCB5aWVsZHMgcGFpcnMgY29udGFpbmluZyBhIGNvdW50IChmcm9tXG4iCi0iemVybykgYW5kIGEgdmFsdWUgeWllbGRlZCBieSB0aGUgaXRlcmFibGUgYXJndW1lbnQuICBlbnVtZXJhdGUgaXMgdXNlZnVsXG4iCi0iZm9yIG9idGFpbmluZyBhbiBpbmRleGVkIGxpc3Q6ICgwLCBzZXFbMF0pLCAoMSwgc2VxWzFdKSwgKDIsIHNlcVsyXSksIC4uLiIpOworInN0YXJ0LCB3aGljaCBkZWZhdWx0cyB0byB6ZXJvKSBhbmQgYSB2YWx1ZSB5aWVsZGVkIGJ5IHRoZSBpdGVyYWJsZSBhcmd1bWVudC5cbiIKKyJlbnVtZXJhdGUgaXMgdXNlZnVsIGZvciBvYnRhaW5pbmcgYW4gaW5kZXhlZCBsaXN0OlxuIgorIiAgICAoMCwgc2VxWzBdKSwgKDEsIHNlcVsxXSksICgyLCBzZXFbMl0pLCAuLi4iKTsKIAogUHlUeXBlT2JqZWN0IFB5RW51bV9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDE1MzE4NjcuLjAxMDZiYTMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC05NTksMjAgKzk1OSwyNyBAQAogLyogVGhpcyBpcyBjYWxsZWQgIm15X2Jhc2VuYW1lIiBpbnN0ZWFkIG9mIGp1c3QgImJhc2VuYW1lIiB0byBhdm9pZCBuYW1lCiAgICBjb25mbGljdHMgd2l0aCBnbGliYzsgYmFzZW5hbWUgaXMgYWxyZWFkeSBwcm90b3R5cGVkIGlmIF9HTlVfU09VUkNFIGlzCiAgICBkZWZpbmVkLCBhbmQgUHl0aG9uIGRvZXMgZGVmaW5lIHRoYXQuICovCi1zdGF0aWMgY2hhciAqCi1teV9iYXNlbmFtZShjaGFyICpuYW1lKQorc3RhdGljIFB5T2JqZWN0KgorbXlfYmFzZW5hbWUoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgY2hhciAqY3AgPSBuYW1lOwotICAgIGNoYXIgKnJlc3VsdCA9IG5hbWU7CisgICAgUHlfVU5JQ09ERSAqdW5pY29kZTsKKyAgICBQeV9zc2l6ZV90IGksIHNpemUsIG9mZnNldDsKIAotICAgIGlmIChuYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiAiPz8/IjsKLSAgICB3aGlsZSAoKmNwICE9ICdcMCcpIHsKLSAgICAgICAgaWYgKCpjcCA9PSBTRVApCi0gICAgICAgICAgICByZXN1bHQgPSBjcCArIDE7Ci0gICAgICAgICsrY3A7CisgICAgdW5pY29kZSA9IFB5VW5pY29kZV9BU19VTklDT0RFKG5hbWUpOworICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUobmFtZSk7CisgICAgb2Zmc2V0ID0gMDsKKyAgICBmb3IoaT0wOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGlmICh1bmljb2RlW2ldID09IFNFUCkKKyAgICAgICAgICAgIG9mZnNldCA9IGkgKyAxOwogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChvZmZzZXQgIT0gMCkgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Vbmljb2RlKAorICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUobmFtZSkgKyBvZmZzZXQsCisgICAgICAgICAgICBzaXplIC0gb2Zmc2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KIH0KIAogCkBAIC05ODAsNyArOTg3LDggQEAKIFN5bnRheEVycm9yX3N0cihQeVN5bnRheEVycm9yT2JqZWN0ICpzZWxmKQogewogICAgIGludCBoYXZlX2xpbmVubyA9IDA7Ci0gICAgY2hhciAqZmlsZW5hbWUgPSAwOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OwogICAgIC8qIEJlbG93LCB3ZSBhbHdheXMgaWdub3JlIG92ZXJmbG93IGVycm9ycywganVzdCBwcmludGluZyAtMS4KICAgICAgICBTdGlsbCwgd2UgY2Fubm90IGFsbG93IGFuIE92ZXJmbG93RXJyb3IgdG8gYmUgcmFpc2VkLCBzbwogICAgICAgIHdlIG5lZWQgdG8gY2FsbCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cuICovCkBAIC05OTAsNyArOTk4LDExIEBACiAgICAgICAgbGluZW5vIGhlcmUgKi8KIAogICAgIGlmIChzZWxmLT5maWxlbmFtZSAmJiBQeVVuaWNvZGVfQ2hlY2soc2VsZi0+ZmlsZW5hbWUpKSB7Ci0gICAgICAgICAgICBmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoc2VsZi0+ZmlsZW5hbWUpOworICAgICAgICBmaWxlbmFtZSA9IG15X2Jhc2VuYW1lKHNlbGYtPmZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBmaWxlbmFtZSA9IE5VTEw7CiAgICAgfQogICAgIGhhdmVfbGluZW5vID0gKHNlbGYtPmxpbmVubyAhPSBOVUxMKSAmJiBQeUxvbmdfQ2hlY2tFeGFjdChzZWxmLT5saW5lbm8pOwogCkBAIC05OTgsMTggKzEwMTAsMjAgQEAKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1N0cihzZWxmLT5tc2cgPyBzZWxmLT5tc2cgOiBQeV9Ob25lKTsKIAogICAgIGlmIChmaWxlbmFtZSAmJiBoYXZlX2xpbmVubykKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlUyAoJXMsIGxpbmUgJWxkKSIsCisgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlUyAoJVUsIGxpbmUgJWxkKSIsCiAgICAgICAgICAgICAgICAgICAgc2VsZi0+bXNnID8gc2VsZi0+bXNnIDogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICBteV9iYXNlbmFtZShmaWxlbmFtZSksCisgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KHNlbGYtPmxpbmVubywgJm92ZXJmbG93KSk7CiAgICAgZWxzZSBpZiAoZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVMgKCVzKSIsCisgICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlUyAoJVUpIiwKICAgICAgICAgICAgICAgICAgICBzZWxmLT5tc2cgPyBzZWxmLT5tc2cgOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgIG15X2Jhc2VuYW1lKGZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpOwogICAgIGVsc2UgLyogb25seSBoYXZlX2xpbmVubyAqLwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVTIChsaW5lICVsZCkiLAorICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVMgKGxpbmUgJWxkKSIsCiAgICAgICAgICAgICAgICAgICAgc2VsZi0+bXNnID8gc2VsZi0+bXNnIDogUHlfTm9uZSwKICAgICAgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coc2VsZi0+bGluZW5vLCAmb3ZlcmZsb3cpKTsKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgU3ludGF4RXJyb3JfbWVtYmVyc1tdID0gewpAQCAtMTQ5Niw3ICsxNTEwLDcgQEAKICAgICBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgUHlfVU5JQ09ERSAqb2JqZWN0LCBQeV9zc2l6ZV90IGxlbmd0aCwKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQogewotICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZUVuY29kZUVycm9yLCAiVXUjbm5VIiwKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvciwgInN1I25ucyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgb2JqZWN0LCBsZW5ndGgsIHN0YXJ0LCBlbmQsIHJlYXNvbik7CiB9CiAKQEAgLTE2MDgsNyArMTYyMiw3IEBACiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKm9iamVjdCwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQsIGNvbnN0IGNoYXIgKnJlYXNvbikKIHsKLSAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciwgIlV5I25uVSIsCisgICAgcmV0dXJuIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IsICJzeSNubnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIG9iamVjdCwgbGVuZ3RoLCBzdGFydCwgZW5kLCByZWFzb24pOwogfQogCkBAIC0xOTIyLDYgKzE5MzYsNyBAQAogICAgICJCYXNlIGNsYXNzIGZvciB3YXJuaW5ncyBhYm91dCBVbmljb2RlIHJlbGF0ZWQgcHJvYmxlbXMsIG1vc3RseVxuIgogICAgICJyZWxhdGVkIHRvIGNvbnZlcnNpb24gcHJvYmxlbXMuIik7CiAKKwogLyoKICAqICAgIEJ5dGVzV2FybmluZyBleHRlbmRzIFdhcm5pbmcKICAqLwpAQCAtMTkzMCw2ICsxOTQ1LDEzIEBACiAgICAgInJlbGF0ZWQgdG8gY29udmVyc2lvbiBmcm9tIHN0ciBvciBjb21wYXJpbmcgdG8gc3RyLiIpOwogCiAKKy8qCisgKiAgICBSZXNvdXJjZVdhcm5pbmcgZXh0ZW5kcyBXYXJuaW5nCisgKi8KK1NpbXBsZUV4dGVuZHNFeGNlcHRpb24oUHlFeGNfV2FybmluZywgUmVzb3VyY2VXYXJuaW5nLAorICAgICJCYXNlIGNsYXNzIGZvciB3YXJuaW5ncyBhYm91dCByZXNvdXJjZSB1c2FnZS4iKTsKKworCiAKIC8qIFByZS1jb21wdXRlZCBSdW50aW1lRXJyb3IgaW5zdGFuY2UgZm9yIHdoZW4gcmVjdXJzaW9uIGRlcHRoIGlzIHJlYWNoZWQuCiAgICBNZWFudCB0byBiZSB1c2VkIHdoZW4gbm9ybWFsaXppbmcgdGhlIGV4Y2VwdGlvbiBmb3IgZXhjZWVkaW5nIHRoZSByZWN1cnNpb24KQEAgLTIwMDQsNiArMjAyNiw3IEBACiAgICAgUFJFX0lOSVQoSW1wb3J0V2FybmluZykKICAgICBQUkVfSU5JVChVbmljb2RlV2FybmluZykKICAgICBQUkVfSU5JVChCeXRlc1dhcm5pbmcpCisgICAgUFJFX0lOSVQoUmVzb3VyY2VXYXJuaW5nKQogCiAgICAgYmx0aW5tb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImJ1aWx0aW5zIik7CiAgICAgaWYgKGJsdGlubW9kID09IE5VTEwpCkBAIC0yMDY2LDYgKzIwODksNyBAQAogICAgIFBPU1RfSU5JVChJbXBvcnRXYXJuaW5nKQogICAgIFBPU1RfSU5JVChVbmljb2RlV2FybmluZykKICAgICBQT1NUX0lOSVQoQnl0ZXNXYXJuaW5nKQorICAgIFBPU1RfSU5JVChSZXNvdXJjZVdhcm5pbmcpCiAKICAgICBwcmVhbGxvY2F0ZV9tZW1lcnJvcnMoKTsKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9maWxlb2JqZWN0LmMgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwppbmRleCBiMzZhYTAyLi5kMjBmMTk2IDEwMDY0NAotLS0gYS9PYmplY3RzL2ZpbGVvYmplY3QuYworKysgYi9PYmplY3RzL2ZpbGVvYmplY3QuYwpAQCAtMjksNyArMjksNyBAQAogUHlGaWxlX0Zyb21GZChpbnQgZmQsIGNoYXIgKm5hbWUsIGNoYXIgKm1vZGUsIGludCBidWZmZXJpbmcsIGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICBjaGFyICplcnJvcnMsIGNoYXIgKm5ld2xpbmUsIGludCBjbG9zZWZkKQogewotICAgIFB5T2JqZWN0ICppbywgKnN0cmVhbSwgKm5hbWVvYmogPSBOVUxMOworICAgIFB5T2JqZWN0ICppbywgKnN0cmVhbTsKIAogICAgIGlvID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJpbyIpOwogICAgIGlmIChpbyA9PSBOVUxMKQpAQCAtNDAsMTYgKzQwLDggQEAKICAgICBQeV9ERUNSRUYoaW8pOwogICAgIGlmIChzdHJlYW0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKG5hbWUgIT0gTlVMTCkgewotICAgICAgICBuYW1lb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobmFtZSk7Ci0gICAgICAgIGlmIChuYW1lb2JqID09IE5VTEwpCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKHN0cmVhbSwgIm5hbWUiLCBuYW1lb2JqKSA8IDApCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lb2JqKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAvKiBpZ25vcmUgbmFtZSBhdHRyaWJ1dGUgYmVjYXVzZSB0aGUgbmFtZSBhdHRyaWJ1dGUgb2YgX0J1ZmZlcmVkSU9NaXhpbgorICAgICAgIGFuZCBUZXh0SU9XcmFwcGVyIGlzIHJlYWQgb25seSAqLwogICAgIHJldHVybiBzdHJlYW07CiB9CiAKQEAgLTM1Miw3ICszNDQsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1maWxlaW9faW5pdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorc3RkcHJpbnRlcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBjcmVhdGUgJ3N0ZGVycnByaW50ZXInIGluc3RhbmNlcyIpOwpAQCAtMzk4LDcgKzM5MCwxMyBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIGVycm5vID0gMDsKKyNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaWYgKG4gPiBJTlRfTUFYKQorICAgICAgICBuID0gSU5UX01BWDsKKyAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIGMsIChpbnQpbik7CisjZWxzZQogICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgYywgbik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKG4gPCAwKSB7CkBAIC01MTcsNyArNTE1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgZmlsZWlvX2luaXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgc3RkcHJpbnRlcl9pbml0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgUHlUeXBlX0dlbmVyaWNBbGxvYywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIHN0ZHByaW50ZXJfbmV3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgUHlPYmplY3RfRGVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCmRpZmYgLS1naXQgYS9PYmplY3RzL2Zsb2F0b2JqZWN0LmMgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKaW5kZXggODE2MWVkNS4uMDljMGU5NiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jCisrKyBiL09iamVjdHMvZmxvYXRvYmplY3QuYwpAQCAtNSw3ICs1LDYgQEAKICAgIGZvciBhbnkga2luZCBvZiBmbG9hdCBleGNlcHRpb24gd2l0aG91dCBsb3NpbmcgcG9ydGFiaWxpdHkuICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KQEAgLTIxLDcgKzIwLDIyIEBACiBleHRlcm4gaW50IGZpbml0ZShkb3VibGUpOwogI2VuZGlmCiAKLS8qIFNwZWNpYWwgZnJlZSBsaXN0IC0tIHNlZSBjb21tZW50cyBmb3Igc2FtZSBjb2RlIGluIGludG9iamVjdC5jLiAqLworLyogU3BlY2lhbCBmcmVlIGxpc3QKKworICAgU2luY2Ugc29tZSBQeXRob24gcHJvZ3JhbXMgY2FuIHNwZW5kIG11Y2ggb2YgdGhlaXIgdGltZSBhbGxvY2F0aW5nCisgICBhbmQgZGVhbGxvY2F0aW5nIGZsb2F0cywgdGhlc2Ugb3BlcmF0aW9ucyBzaG91bGQgYmUgdmVyeSBmYXN0LgorICAgVGhlcmVmb3JlIHdlIHVzZSBhIGRlZGljYXRlZCBhbGxvY2F0aW9uIHNjaGVtZSB3aXRoIGEgbXVjaCBsb3dlcgorICAgb3ZlcmhlYWQgKGluIHNwYWNlIGFuZCB0aW1lKSB0aGFuIHN0cmFpZ2h0IG1hbGxvYygpOiBhIHNpbXBsZQorICAgZGVkaWNhdGVkIGZyZWUgbGlzdCwgZmlsbGVkIHdoZW4gbmVjZXNzYXJ5IHdpdGggbWVtb3J5IGZyb20gbWFsbG9jKCkuCisKKyAgIGJsb2NrX2xpc3QgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgYWxsIFB5RmxvYXRCbG9ja3MgZXZlciBhbGxvY2F0ZWQsCisgICBsaW5rZWQgdmlhIHRoZWlyIG5leHQgbWVtYmVycy4gIFB5RmxvYXRCbG9ja3MgYXJlIG5ldmVyIHJldHVybmVkIHRvIHRoZQorICAgc3lzdGVtIGJlZm9yZSBzaHV0ZG93biAoUHlGbG9hdF9GaW5pKS4KKworICAgZnJlZV9saXN0IGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGF2YWlsYWJsZSBQeUZsb2F0T2JqZWN0cywgbGlua2VkCisgICB2aWEgYWJ1c2Ugb2YgdGhlaXIgb2JfdHlwZSBtZW1iZXJzLgorKi8KKwogI2RlZmluZSBCTE9DS19TSVpFICAgICAgMTAwMCAgICAvKiAxSyBsZXNzIHR5cGljYWwgbWFsbG9jIG92ZXJoZWFkICovCiAjZGVmaW5lIEJIRUFEX1NJWkUgICAgICA4ICAgICAgIC8qIEVub3VnaCBmb3IgYSA2NC1iaXQgcG9pbnRlciAqLwogI2RlZmluZSBOX0ZMT0FUT0JKRUNUUyAgKChCTE9DS19TSVpFIC0gQkhFQURfU0laRSkgLyBzaXplb2YoUHlGbG9hdE9iamVjdCkpCkBAIC02OSw3ICs4Myw3IEBACiBzdGF0aWMgUHlUeXBlT2JqZWN0IEZsb2F0SW5mb1R5cGU7CiAKIFB5RG9jX1NUUlZBUihmbG9hdGluZm9fX2RvY19fLAotInN5cy5mbG9hdGluZm9cblwKKyJzeXMuZmxvYXRfaW5mb1xuXAogXG5cCiBBIHN0cnVjdHNlcSBob2xkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmbG9hdCB0eXBlLiBJdCBjb250YWlucyBsb3cgbGV2ZWxcblwKIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmVjaXNpb24gYW5kIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiBQbGVhc2Ugc3R1ZHlcblwKQEAgLTk2LDcgKzExMCw3IEBACiB9OwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIGZsb2F0aW5mb19kZXNjID0gewotICAgICJzeXMuZmxvYXRpbmZvIiwgICAgICAgICAgICAvKiBuYW1lICovCisgICAgInN5cy5mbG9hdF9pbmZvIiwgICAgICAgICAgIC8qIG5hbWUgKi8KICAgICBmbG9hdGluZm9fX2RvY19fLCAgICAgICAgICAgLyogZG9jICovCiAgICAgZmxvYXRpbmZvX2ZpZWxkcywgICAgICAgICAgIC8qIGZpZWxkcyAqLwogICAgIDExCkBAIC0xNjAsNTIgKzE3NCw1OCBAQAogewogICAgIGNvbnN0IGNoYXIgKnMsICpsYXN0LCAqZW5kOwogICAgIGRvdWJsZSB4OwotICAgIGNoYXIgYnVmZmVyWzI1Nl07IC8qIGZvciBlcnJvcnMgKi8KLSAgICBjaGFyICpzX2J1ZmZlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKnNfYnVmZmVyID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodikpIHsKLSAgICAgICAgc19idWZmZXIgPSAoY2hhciAqKVB5TWVtX01BTExPQyhQeVVuaWNvZGVfR0VUX1NJWkUodikrMSk7CisgICAgICAgIFB5X3NzaXplX3QgaSwgYnVmbGVuID0gUHlVbmljb2RlX0dFVF9TSVpFKHYpOworICAgICAgICBQeV9VTklDT0RFICpidWZwdHI7CisgICAgICAgIHNfYnVmZmVyID0gUHlVbmljb2RlX1RyYW5zZm9ybURlY2ltYWxUb0FTQ0lJKAorICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodiksIGJ1Zmxlbik7CiAgICAgICAgIGlmIChzX2J1ZmZlciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbChQeVVuaWNvZGVfQVNfVU5JQ09ERSh2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBzID0gc19idWZmZXI7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBSZXBsYWNlIG5vbi1BU0NJSSB3aGl0ZXNwYWNlIHdpdGggJyAnICovCisgICAgICAgIGJ1ZnB0ciA9IFB5VW5pY29kZV9BU19VTklDT0RFKHNfYnVmZmVyKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGJ1ZmxlbjsgaSsrKSB7CisgICAgICAgICAgICBQeV9VTklDT0RFIGNoID0gYnVmcHRyW2ldOworICAgICAgICAgICAgaWYgKGNoID4gMTI3ICYmIFB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgYnVmcHRyW2ldID0gJyAnOworICAgICAgICB9CisgICAgICAgIHMgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShzX2J1ZmZlciwgJmxlbik7CisgICAgICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzX2J1ZmZlcik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBsYXN0ID0gcyArIGxlbjsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKHYsICZzLCAmbGVuKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgICAgICAgICAgImZsb2F0KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgbGFzdCA9IHMgKyBsZW47Ci0KLSAgICB3aGlsZSAoUHlfSVNTUEFDRSgqcykpCisgICAgLyogc3RyaXAgc3BhY2UgKi8KKyAgICB3aGlsZSAocyA8IGxhc3QgJiYgUHlfSVNTUEFDRSgqcykpCiAgICAgICAgIHMrKzsKKyAgICB3aGlsZSAocyA8IGxhc3QgLSAxICYmIFB5X0lTU1BBQ0UobGFzdFstMV0pKQorICAgICAgICBsYXN0LS07CiAgICAgLyogV2UgZG9uJ3QgY2FyZSBhYm91dCBvdmVyZmxvdyBvciB1bmRlcmZsb3cuICBJZiB0aGUgcGxhdGZvcm0KICAgICAgKiBzdXBwb3J0cyB0aGVtLCBpbmZpbml0aWVzIGFuZCBzaWduZWQgemVyb2VzIChvbiB1bmRlcmZsb3cpIGFyZQogICAgICAqIGZpbmUuICovCiAgICAgeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAoY2hhciAqKikmZW5kLCBOVUxMKTsKLSAgICBpZiAoeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgd2hpbGUgKFB5X0lTU1BBQ0UoKmVuZCkpCi0gICAgICAgIGVuZCsrOwotICAgIGlmIChlbmQgPT0gbGFzdCkKLSAgICAgICAgcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOwotICAgIGVsc2UgewotICAgICAgICBQeU9TX3NucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgZmxvYXQoKTogJS4yMDBzIiwgcyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBidWZmZXIpOworICAgIGlmIChlbmQgIT0gbGFzdCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gZmxvYXQ6ICIKKyAgICAgICAgICAgICAgICAgICAgICIlUiIsIHYpOwogICAgICAgICByZXN1bHQgPSBOVUxMOwogICAgIH0KKyAgICBlbHNlIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmVzdWx0ID0gTlVMTDsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9IFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKIAotICBlcnJvcjoKLSAgICBpZiAoc19idWZmZXIpCi0gICAgICAgIFB5TWVtX0ZSRUUoc19idWZmZXIpOworICAgIFB5X1hERUNSRUYoc19idWZmZXIpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTI5MCwzMiArMzEwLDIwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1mbG9hdF9zdHJfb3JfcmVwcihQeUZsb2F0T2JqZWN0ICp2LCBpbnQgcHJlY2lzaW9uLCBjaGFyIGZvcm1hdF9jb2RlKQorZmxvYXRfcmVwcihQeUZsb2F0T2JqZWN0ICp2KQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgY2hhciAqYnVmID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKFB5RmxvYXRfQVNfRE9VQkxFKHYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfY29kZSwgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncicsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RUU0ZfQUREX0RPVF8wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICBpZiAoIWJ1ZikKLSAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoYnVmKTsKICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWZsb2F0X3JlcHIoUHlGbG9hdE9iamVjdCAqdikKLXsKLSAgICByZXR1cm4gZmxvYXRfc3RyX29yX3JlcHIodiwgMCwgJ3InKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLWZsb2F0X3N0cihQeUZsb2F0T2JqZWN0ICp2KQotewotICAgIHJldHVybiBmbG9hdF9zdHJfb3JfcmVwcih2LCBQeUZsb2F0X1NUUl9QUkVDSVNJT04sICdnJyk7Ci19Ci0KIC8qIENvbXBhcmlzb24gaXMgcHJldHR5IG11Y2ggYSBuaWdodG1hcmUuICBXaGVuIGNvbXBhcmluZyBmbG9hdCB0byBmbG9hdCwKICAqIHdlIGRvIGl0IGFzIHN0cmFpZ2h0Zm9yd2FyZGx5IChhbmQgbG9uZy13aW5kZWRseSkgYXMgY29uY2VpdmFibGUsIHNvCiAgKiB0aGF0LCBlLmcuLCBQeXRob24geCA9PSB5IGRlbGl2ZXJzIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgcGxhdGZvcm0KQEAgLTUxOSw3ICs1MjcsNyBAQAogICAgIHJldHVybiBQeV9Ob3RJbXBsZW1lbnRlZDsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIGZsb2F0X2hhc2goUHlGbG9hdE9iamVjdCAqdikKIHsKICAgICByZXR1cm4gX1B5X0hhc2hEb3VibGUodi0+b2JfZnZhbCk7CkBAIC01NjcsMTMgKzU3NSwxMSBAQAogICAgIGRvdWJsZSBhLGI7CiAgICAgQ09OVkVSVF9UT19ET1VCTEUodiwgYSk7CiAgICAgQ09OVkVSVF9UT19ET1VCTEUodywgYik7Ci0jaWZkZWYgUHlfTkFOCiAgICAgaWYgKGIgPT0gMC4wKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCBkaXZpc2lvbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZsb2F0IGRpdmlzaW9uIGJ5IHplcm8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotI2VuZGlmCiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgiZGl2aWRlIiwgcmV0dXJuIDApCiAgICAgYSA9IGEgLyBiOwogICAgIFB5RlBFX0VORF9QUk9URUNUKGEpCkBAIC01ODcsMTMgKzU5MywxMSBAQAogICAgIGRvdWJsZSBtb2Q7CiAgICAgQ09OVkVSVF9UT19ET1VCTEUodiwgdngpOwogICAgIENPTlZFUlRfVE9fRE9VQkxFKHcsIHd4KTsKLSNpZmRlZiBQeV9OQU4KICAgICBpZiAod3ggPT0gMC4wKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19aZXJvRGl2aXNpb25FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJmbG9hdCBtb2R1bG8iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotI2VuZGlmCiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgibW9kdWxvIiwgcmV0dXJuIDApCiAgICAgbW9kID0gZm1vZCh2eCwgd3gpOwogICAgIGlmIChtb2QpIHsKQEAgLTYwNSwxMSArNjA5LDggQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogdGhlIHJlbWFpbmRlciBpcyB6ZXJvLCBhbmQgaW4gdGhlIHByZXNlbmNlIG9mIHNpZ25lZCB6ZXJvZXMKICAgICAgICAgICAgZm1vZCByZXR1cm5zIGRpZmZlcmVudCByZXN1bHRzIGFjcm9zcyBwbGF0Zm9ybXM7IGVuc3VyZQotICAgICAgICAgICBpdCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGVub21pbmF0b3I7IHdlJ2QgbGlrZSB0byBkbwotICAgICAgICAgICAibW9kID0gd3ggKiAwLjAiLCBidXQgdGhhdCBtYXkgZ2V0IG9wdGltaXplZCBhd2F5ICovCi0gICAgICAgIG1vZCAqPSBtb2Q7ICAvKiBoaWRlICJtb2QgPSArMCIgZnJvbSBvcHRpbWl6ZXIgKi8KLSAgICAgICAgaWYgKHd4IDwgMC4wKQotICAgICAgICAgICAgbW9kID0gLW1vZDsKKyAgICAgICAgICAgaXQgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRlbm9taW5hdG9yLiAqLworICAgICAgICBtb2QgPSBjb3B5c2lnbigwLjAsIHd4KTsKICAgICB9CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QobW9kKQogICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobW9kKTsKQEAgLTY0NSwxMSArNjQ2LDggQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogdGhlIHJlbWFpbmRlciBpcyB6ZXJvLCBhbmQgaW4gdGhlIHByZXNlbmNlIG9mIHNpZ25lZCB6ZXJvZXMKICAgICAgICAgICAgZm1vZCByZXR1cm5zIGRpZmZlcmVudCByZXN1bHRzIGFjcm9zcyBwbGF0Zm9ybXM7IGVuc3VyZQotICAgICAgICAgICBpdCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGVub21pbmF0b3I7IHdlJ2QgbGlrZSB0byBkbwotICAgICAgICAgICAibW9kID0gd3ggKiAwLjAiLCBidXQgdGhhdCBtYXkgZ2V0IG9wdGltaXplZCBhd2F5ICovCi0gICAgICAgIG1vZCAqPSBtb2Q7ICAvKiBoaWRlICJtb2QgPSArMCIgZnJvbSBvcHRpbWl6ZXIgKi8KLSAgICAgICAgaWYgKHd4IDwgMC4wKQotICAgICAgICAgICAgbW9kID0gLW1vZDsKKyAgICAgICAgICAgaXQgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRlbm9taW5hdG9yLiAqLworICAgICAgICBtb2QgPSBjb3B5c2lnbigwLjAsIHd4KTsKICAgICB9CiAgICAgLyogc25hcCBxdW90aWVudCB0byBuZWFyZXN0IGludGVncmFsIHZhbHVlICovCiAgICAgaWYgKGRpdikgewpAQCAtNjU5LDggKzY1Nyw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBkaXYgaXMgemVybyAtIGdldCB0aGUgc2FtZSBzaWduIGFzIHRoZSB0cnVlIHF1b3RpZW50ICovCi0gICAgICAgIGRpdiAqPSBkaXY7ICAgICAgICAgICAgIC8qIGhpZGUgImRpdiA9ICswIiBmcm9tIG9wdGltaXplcnMgKi8KLSAgICAgICAgZmxvb3JkaXYgPSBkaXYgKiB2eCAvIHd4OyAvKiB6ZXJvIHcvIHNpZ24gb2Ygdngvd3ggKi8KKyAgICAgICAgZmxvb3JkaXYgPSBjb3B5c2lnbigwLjAsIHZ4IC8gd3gpOyAvKiB6ZXJvIHcvIHNpZ24gb2Ygdngvd3ggKi8KICAgICB9CiAgICAgUHlGUEVfRU5EX1BST1RFQ1QoZmxvb3JkaXYpCiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihkZCkiLCBmbG9vcmRpdiwgbW9kKTsKQEAgLTY4MSwxMCArNjc4LDE1IEBACiAgICAgcmV0dXJuIHI7CiB9CiAKKy8qIGRldGVybWluZSB3aGV0aGVyIHggaXMgYW4gb2RkIGludGVnZXIgb3Igbm90OyAgYXNzdW1lcyB0aGF0CisgICB4IGlzIG5vdCBhbiBpbmZpbml0eSBvciBuYW4uICovCisjZGVmaW5lIERPVUJMRV9JU19PRERfSU5URUdFUih4KSAoZm1vZChmYWJzKHgpLCAyLjApID09IDEuMCkKKwogc3RhdGljIFB5T2JqZWN0ICoKIGZsb2F0X3BvdyhQeU9iamVjdCAqdiwgUHlPYmplY3QgKncsIFB5T2JqZWN0ICp6KQogewogICAgIGRvdWJsZSBpdiwgaXcsIGl4OworICAgIGludCBuZWdhdGVfcmVzdWx0ID0gMDsKIAogICAgIGlmICgoUHlPYmplY3QgKil6ICE9IFB5X05vbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInBvdygpIDNyZCBhcmd1bWVudCBub3QgIgpAQCAtNjk5LDE3ICs3MDEsNTMgQEAKICAgICBpZiAoaXcgPT0gMCkgeyAgICAgICAgICAgICAgLyogdioqMCBpcyAxLCBldmVuIDAqKjAgKi8KICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgxLjApOwogICAgIH0KLSAgICBpZiAoaXYgPT0gMC4wKSB7ICAvKiAwKip3IGlzIGVycm9yIGlmIHc8MCwgZWxzZSAxICovCisgICAgaWYgKFB5X0lTX05BTihpdikpIHsgICAgICAgIC8qIG5hbioqdyA9IG5hbiwgdW5sZXNzIHcgPT0gMCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl2KTsKKyAgICB9CisgICAgaWYgKFB5X0lTX05BTihpdykpIHsgICAgICAgIC8qIHYqKm5hbiA9IG5hbiwgdW5sZXNzIHYgPT0gMTsgMSoqbmFuID0gMSAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl2ID09IDEuMCA/IDEuMCA6IGl3KTsKKyAgICB9CisgICAgaWYgKFB5X0lTX0lORklOSVRZKGl3KSkgeworICAgICAgICAvKiB2KippbmYgaXM6IDAuMCBpZiBhYnModikgPCAxOyAxLjAgaWYgYWJzKHYpID09IDE7IGluZiBpZgorICAgICAgICAgKiAgICAgYWJzKHYpID4gMSAoaW5jbHVkaW5nIGNhc2Ugd2hlcmUgdiBpbmZpbml0ZSkKKyAgICAgICAgICoKKyAgICAgICAgICogdioqLWluZiBpczogaW5mIGlmIGFicyh2KSA8IDE7IDEuMCBpZiBhYnModikgPT0gMTsgMC4wIGlmCisgICAgICAgICAqICAgICBhYnModikgPiAxIChpbmNsdWRpbmcgY2FzZSB3aGVyZSB2IGluZmluaXRlKQorICAgICAgICAgKi8KKyAgICAgICAgaXYgPSBmYWJzKGl2KTsKKyAgICAgICAgaWYgKGl2ID09IDEuMCkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMS4wKTsKKyAgICAgICAgZWxzZSBpZiAoKGl3ID4gMC4wKSA9PSAoaXYgPiAxLjApKQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShmYWJzKGl3KSk7IC8qIHJldHVybiBpbmYgKi8KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOworICAgIH0KKyAgICBpZiAoUHlfSVNfSU5GSU5JVFkoaXYpKSB7CisgICAgICAgIC8qICgrLWluZikqKncgaXM6IGluZiBmb3IgdyBwb3NpdGl2ZSwgMCBmb3IgdyBuZWdhdGl2ZTsgaW4KKyAgICAgICAgICogICAgIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gYWRkIHRoZSBhcHByb3ByaWF0ZSBzaWduIGlmIHcgaXMKKyAgICAgICAgICogICAgIGFuIG9kZCBpbnRlZ2VyLgorICAgICAgICAgKi8KKyAgICAgICAgaW50IGl3X2lzX29kZCA9IERPVUJMRV9JU19PRERfSU5URUdFUihpdyk7CisgICAgICAgIGlmIChpdyA+IDAuMCkKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXdfaXNfb2RkID8gaXYgOiBmYWJzKGl2KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXdfaXNfb2RkID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weXNpZ24oMC4wLCBpdikgOiAwLjApOworICAgIH0KKyAgICBpZiAoaXYgPT0gMC4wKSB7ICAvKiAwKip3IGlzOiAwIGZvciB3IHBvc2l0aXZlLCAxIGZvciB3IHplcm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAoYWxyZWFkeSBkZWFsdCB3aXRoIGFib3ZlKSwgYW5kIGFuIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdyBpcyBuZWdhdGl2ZS4gKi8KKyAgICAgICAgaW50IGl3X2lzX29kZCA9IERPVUJMRV9JU19PRERfSU5URUdFUihpdyk7CiAgICAgICAgIGlmIChpdyA8IDAuMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwLjAgY2Fubm90IGJlIHJhaXNlZCB0byBhIG5lZ2F0aXZlIHBvd2VyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAuMCBjYW5ub3QgYmUgcmFpc2VkIHRvIGEgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWdhdGl2ZSBwb3dlciIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgwLjApOworICAgICAgICAvKiB1c2UgY29ycmVjdCBzaWduIGlmIGl3IGlzIG9kZCAqLworICAgICAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKGl3X2lzX29kZCA/IGl2IDogMC4wKTsKICAgICB9Ci0gICAgaWYgKGl2ID09IDEuMCkgeyAvKiAxKip3IGlzIDEsIGV2ZW4gMSoqaW5mIGFuZCAxKipuYW4gKi8KLSAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgxLjApOwotICAgIH0KKwogICAgIGlmIChpdiA8IDAuMCkgewogICAgICAgICAvKiBXaGV0aGVyIHRoaXMgaXMgYW4gZXJyb3IgaXMgYSBtZXNzLCBhbmQgYnVtcHMgaW50byBsaWJtCiAgICAgICAgICAqIGJ1Z3Mgc28gd2UgaGF2ZSB0byBmaWd1cmUgaXQgb3V0IG91cnNlbHZlcy4KQEAgLTcyMCwzMyArNzU4LDQxIEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldHVybiBQeUNvbXBsZXhfVHlwZS50cF9hc19udW1iZXItPm5iX3Bvd2VyKHYsIHcsIHopOwogICAgICAgICB9Ci0gICAgICAgIC8qIGl3IGlzIGFuIGV4YWN0IGludGVnZXIsIGFsYmVpdCBwZXJoYXBzIGEgdmVyeSBsYXJnZSBvbmUuCisgICAgICAgIC8qIGl3IGlzIGFuIGV4YWN0IGludGVnZXIsIGFsYmVpdCBwZXJoYXBzIGEgdmVyeSBsYXJnZQorICAgICAgICAgKiBvbmUuICBSZXBsYWNlIGl2IGJ5IGl0cyBhYnNvbHV0ZSB2YWx1ZSBhbmQgcmVtZW1iZXIKKyAgICAgICAgICogdG8gbmVnYXRlIHRoZSBwb3cgcmVzdWx0IGlmIGl3IGlzIG9kZC4KKyAgICAgICAgICovCisgICAgICAgIGl2ID0gLWl2OworICAgICAgICBuZWdhdGVfcmVzdWx0ID0gRE9VQkxFX0lTX09ERF9JTlRFR0VSKGl3KTsKKyAgICB9CisKKyAgICBpZiAoaXYgPT0gMS4wKSB7IC8qIDEqKncgaXMgMSwgZXZlbiAxKippbmYgYW5kIDEqKm5hbiAqLworICAgICAgICAvKiAoLTEpICoqIGxhcmdlX2ludGVnZXIgYWxzbyBlbmRzIHVwIGhlcmUuICBIZXJlJ3MgYW4KKyAgICAgICAgICogZXh0cmFjdCBmcm9tIHRoZSBjb21tZW50cyBmb3IgdGhlIHByZXZpb3VzCisgICAgICAgICAqIGltcGxlbWVudGF0aW9uIGV4cGxhaW5pbmcgd2h5IHRoaXMgc3BlY2lhbCBjYXNlIGlzCisgICAgICAgICAqIG5lY2Vzc2FyeToKKyAgICAgICAgICoKICAgICAgICAgICogLTEgcmFpc2VkIHRvIGFuIGV4YWN0IGludGVnZXIgc2hvdWxkIG5ldmVyIGJlIGV4Y2VwdGlvbmFsLgogICAgICAgICAgKiBBbGFzLCBzb21lIGxpYm1zIChjaGllZmx5IGdsaWJjIGFzIG9mIGVhcmx5IDIwMDMpIHJldHVybgogICAgICAgICAgKiBOYU4gYW5kIHNldCBFRE9NIG9uIHBvdygtMSwgbGFyZ2VfaW50KSBpZiB0aGUgaW50IGRvZXNuJ3QKICAgICAgICAgICogaGFwcGVuIHRvIGJlIHJlcHJlc2VudGFibGUgaW4gYSAqQyogaW50ZWdlci4gIFRoYXQncyBhCi0gICAgICAgICAqIGJ1Zzsgd2UgbGV0IHRoYXQgc2xpZGUgaW4gbWF0aC5wb3coKSAod2hpY2ggY3VycmVudGx5Ci0gICAgICAgICAqIHJlZmxlY3RzIGFsbCBwbGF0Zm9ybSBhY2NpZGVudHMpLCBidXQgbm90IGZvciBQeXRob24ncyAqKi4KKyAgICAgICAgICogYnVnLgogICAgICAgICAgKi8KLSAgICAgICAgIGlmIChpdiA9PSAtMS4wICYmIFB5X0lTX0ZJTklURShpdykpIHsKLSAgICAgICAgICAgIC8qIFJldHVybiAxIGlmIGl3IGlzIGV2ZW4sIC0xIGlmIGl3IGlzIG9kZDsgdGhlcmUncwotICAgICAgICAgICAgICogbm8gZ3VhcmFudGVlIHRoYXQgYW55IEMgaW50ZWdyYWwgdHlwZSBpcyBiaWcKLSAgICAgICAgICAgICAqIGVub3VnaCB0byBob2xkIGl3LCBzbyB3ZSBoYXZlIHRvIGNoZWNrIHRoaXMKLSAgICAgICAgICAgICAqIGluZGlyZWN0bHkuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGl4ID0gZmxvb3IoaXcgKiAwLjUpICogMi4wOwotICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShpeCA9PSBpdyA/IDEuMCA6IC0xLjApOwotICAgICAgICB9Ci0gICAgICAgIC8qIEVsc2UgaXYgIT0gLTEuMCwgYW5kIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBhcmUgcG9zc2libGUuCi0gICAgICAgICAqIFVubGVzcyB3ZSdyZSB0byB3cml0ZSBwb3coKSBvdXJzZWx2ZXMsIHdlIGhhdmUgdG8gdHJ1c3QKLSAgICAgICAgICogdGhlIHBsYXRmb3JtIHRvIGRvIHRoaXMgY29ycmVjdGx5LgotICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShuZWdhdGVfcmVzdWx0ID8gLTEuMCA6IDEuMCk7CiAgICAgfQorCisgICAgLyogTm93IGl2IGFuZCBpdyBhcmUgZmluaXRlLCBpdyBpcyBub256ZXJvLCBhbmQgaXYgaXMKKyAgICAgKiBwb3NpdGl2ZSBhbmQgbm90IGVxdWFsIHRvIDEuMC4gIFdlIGZpbmFsbHkgYWxsb3cKKyAgICAgKiB0aGUgcGxhdGZvcm0gcG93IHRvIHN0ZXAgaW4gYW5kIGRvIHRoZSByZXN0LgorICAgICAqLwogICAgIGVycm5vID0gMDsKICAgICBQeUZQRV9TVEFSVF9QUk9URUNUKCJwb3ciLCByZXR1cm4gTlVMTCkKICAgICBpeCA9IHBvdyhpdiwgaXcpOwogICAgIFB5RlBFX0VORF9QUk9URUNUKGl4KQogICAgIFB5X0FESlVTVF9FUkFOR0UxKGl4KTsKKyAgICBpZiAobmVnYXRlX3Jlc3VsdCkKKyAgICAgICAgaXggPSAtaXg7CisKICAgICBpZiAoZXJybm8gIT0gMCkgewogICAgICAgICAvKiBXZSBkb24ndCBleHBlY3QgYW55IGVycm5vIHZhbHVlIG90aGVyIHRoYW4gRVJBTkdFLCBidXQKICAgICAgICAgICogdGhlIHJhbmdlIG9mIGxpYm0gYnVncyBhcHBlYXJzIHVuYm91bmRlZC4KQEAgLTc1OCw2ICs4MDQsOCBAQAogICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoaXgpOwogfQogCisjdW5kZWYgRE9VQkxFX0lTX09ERF9JTlRFR0VSCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmbG9hdF9uZWcoUHlGbG9hdE9iamVjdCAqdikKIHsKQEAgLTExMTMsNyArMTE2MSw3IEBACiAgICAgQ09OVkVSVF9UT19ET1VCTEUodiwgeCk7CiAKICAgICBpZiAoUHlfSVNfTkFOKHgpIHx8IFB5X0lTX0lORklOSVRZKHgpKQotICAgICAgICByZXR1cm4gZmxvYXRfc3RyKChQeUZsb2F0T2JqZWN0ICopdik7CisgICAgICAgIHJldHVybiBmbG9hdF9yZXByKChQeUZsb2F0T2JqZWN0ICopdik7CiAKICAgICBpZiAoeCA9PSAwLjApIHsKICAgICAgICAgaWYgKGNvcHlzaWduKDEuMCwgeCkgPT0gLTEuMCkKQEAgLTEzNjYsNyArMTQxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJvdW5kX3VwID0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICBpZiAocm91bmRfdXAgPT0gMSkgeworICAgICAgICBpZiAocm91bmRfdXApIHsKICAgICAgICAgICAgIHggKz0gMipoYWxmX2VwczsKICAgICAgICAgICAgIGlmICh0b3BfZXhwID09IERCTF9NQVhfRVhQICYmCiAgICAgICAgICAgICAgICAgeCA9PSBsZGV4cCgoZG91YmxlKSgyKmhhbGZfZXBzKSwgREJMX01BTlRfRElHKSkKQEAgLTE0NDMsMTMgKzE0OTEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHBhc3MgaW5maW5pdHkgdG8gZmxvYXQuYXNfaW50ZWdlcl9yYXRpby4iKTsKICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSNpZmRlZiBQeV9OQU4KICAgICBpZiAoUHlfSVNfTkFOKHNlbGYpKSB7CiAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHBhc3MgTmFOIHRvIGZsb2F0LmFzX2ludGVnZXJfcmF0aW8uIik7CiAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0jZW5kaWYKIAogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoImFzX2ludGVnZXJfcmF0aW8iLCBnb3RvIGVycm9yKTsKICAgICBmbG9hdF9wYXJ0ID0gZnJleHAoc2VsZiwgJmV4cG9uZW50KTsgICAgICAgIC8qIHNlbGYgPT0gZmxvYXRfcGFydCAqIDIqKmV4cG9uZW50IGV4YWN0bHkgKi8KQEAgLTE4MTcsNyArMTg2Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCiAgICAgKGhhc2hmdW5jKWZsb2F0X2hhc2gsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCi0gICAgKHJlcHJmdW5jKWZsb2F0X3N0ciwgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KKyAgICAocmVwcmZ1bmMpZmxvYXRfcmVwciwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnJhbWVvYmplY3QuYyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwppbmRleCAyY2YyY2RmLi4xMGZiOGIzIDEwMDY0NAotLS0gYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mcmFtZW9iamVjdC5jCkBAIC0zMSwxNyArMzEsMTkgQEAKICAgICByZXR1cm4gZi0+Zl9sb2NhbHM7CiB9CiAKK2ludAorUHlGcmFtZV9HZXRMaW5lTnVtYmVyKFB5RnJhbWVPYmplY3QgKmYpCit7CisgICAgaWYgKGYtPmZfdHJhY2UpCisgICAgICAgIHJldHVybiBmLT5mX2xpbmVubzsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBQeUNvZGVfQWRkcjJMaW5lKGYtPmZfY29kZSwgZi0+Zl9sYXN0aSk7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBmcmFtZV9nZXRsaW5lbm8oUHlGcmFtZU9iamVjdCAqZiwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBpbnQgbGluZW5vOwotCi0gICAgaWYgKGYtPmZfdHJhY2UpCi0gICAgICAgIGxpbmVubyA9IGYtPmZfbGluZW5vOwotICAgIGVsc2UKLSAgICAgICAgbGluZW5vID0gUHlDb2RlX0FkZHIyTGluZShmLT5mX2NvZGUsIGYtPmZfbGFzdGkpOwotCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhsaW5lbm8pOworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpKTsKIH0KIAogLyogU2V0dGVyIGZvciBmX2xpbmVubyAtIHlvdSBjYW4gc2V0IGZfbGluZW5vIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24gaW4KQEAgLTM0NSwxNiArMzQ3LDE0IEBACiBzdGF0aWMgaW50CiBmcmFtZV9zZXR0cmFjZShQeUZyYW1lT2JqZWN0ICpmLCBQeU9iamVjdCogdiwgdm9pZCAqY2xvc3VyZSkKIHsKKyAgICBQeU9iamVjdCogb2xkX3ZhbHVlOworCiAgICAgLyogV2UgcmVseSBvbiBmX2xpbmVubyBiZWluZyBhY2N1cmF0ZSB3aGVuIGZfdHJhY2UgaXMgc2V0LiAqLworICAgIGYtPmZfbGluZW5vID0gUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpOwogCi0gICAgUHlPYmplY3QqIG9sZF92YWx1ZSA9IGYtPmZfdHJhY2U7Ci0KKyAgICBvbGRfdmFsdWUgPSBmLT5mX3RyYWNlOwogICAgIFB5X1hJTkNSRUYodik7CiAgICAgZi0+Zl90cmFjZSA9IHY7Ci0KLSAgICBpZiAodiAhPSBOVUxMKQotICAgICAgICBmLT5mX2xpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKTsKLQogICAgIFB5X1hERUNSRUYob2xkX3ZhbHVlKTsKIAogICAgIHJldHVybiAwOwpAQCAtMzkxLDcgKzM5MSw3IEBACiAgICAgICAgdGhlIGxvY2FsIHZhcmlhYmxlcyBpbiBmX2xvY2Fsc3BsdXMgYXJlIE5VTEwuCiAKICAgIDIuIFdlIGFsc28gbWFpbnRhaW4gYSBzZXBhcmF0ZSBmcmVlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIChqdXN0IGxpa2UKLSAgIGludGVnZXJzIGFyZSBhbGxvY2F0ZWQgaW4gYSBzcGVjaWFsIHdheSAtLSBzZWUgaW50b2JqZWN0LmMpLiAgV2hlbgorICAgZmxvYXRzIGFyZSBhbGxvY2F0ZWQgaW4gYSBzcGVjaWFsIHdheSAtLSBzZWUgZmxvYXRvYmplY3QuYykuICBXaGVuCiAgICBhIHN0YWNrIGZyYW1lIGlzIG9uIHRoZSBmcmVlIGxpc3QsIG9ubHkgdGhlIGZvbGxvd2luZyBtZW1iZXJzIGhhdmUKICAgIGEgbWVhbmluZzoKICAgICBvYl90eXBlICAgICAgICAgICAgID09ICZGcmFtZXR5cGUKZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggYzJhZDk2NC4uNDVmOWY1NyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTMsNyArMyw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJjb2RlLmgiCi0jaW5jbHVkZSAiZXZhbC5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCiBQeU9iamVjdCAqCkBAIC02MjgsNyArNjI3LDcgQEAKICAgICB9CiAKICAgICByZXN1bHQgPSBQeUV2YWxfRXZhbENvZGVFeCgKLSAgICAgICAgKFB5Q29kZU9iamVjdCAqKVB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksCisgICAgICAgIFB5RnVuY3Rpb25fR0VUX0NPREUoZnVuYyksCiAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0dMT0JBTFMoZnVuYyksIChQeU9iamVjdCAqKU5VTEwsCiAgICAgICAgICZQeVR1cGxlX0dFVF9JVEVNKGFyZywgMCksIFB5VHVwbGVfR0VUX1NJWkUoYXJnKSwKICAgICAgICAgaywgbmssIGQsIG5kLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9nZW5vYmplY3QuYyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKaW5kZXggMzRlZTdkYy4uM2ZhMWI0ZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9nZW5vYmplY3QuYworKysgYi9PYmplY3RzL2dlbm9iamVjdC5jCkBAIC0yLDggKzIsNiBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAiZnJhbWVvYmplY3QuaCIKLSNpbmNsdWRlICJnZW5vYmplY3QuaCIKLSNpbmNsdWRlICJjZXZhbC5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgIm9wY29kZS5oIgogCmRpZmYgLS1naXQgYS9PYmplY3RzL2l0ZXJvYmplY3QuYyBiL09iamVjdHMvaXRlcm9iamVjdC5jCmluZGV4IGI1MzRiNGEuLjkxYTkzZjUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvaXRlcm9iamVjdC5jCisrKyBiL09iamVjdHMvaXRlcm9iamVjdC5jCkBAIC0xNzcsOSArMTc3LDcgQEAKICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwogICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGludCBvazsKLSAgICAgICAgICAgIG9rID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHJlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZW50aW5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0VRKTsKKyAgICAgICAgICAgIG9rID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0LT5pdF9zZW50aW5lbCwgcmVzdWx0LCBQeV9FUSk7ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAob2sgPT0gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OyAvKiBDb21tb24gY2FzZSwgZmFzdCBwYXRoICovCiAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbGlzdG9iamVjdC5jIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKaW5kZXggYjNiYjIxZC4uMTg3MTNhYiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9saXN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9saXN0b2JqZWN0LmMKQEAgLTk0MCw2ICs5NDAsNzEgQEAKICAqIHBpZWNlcyB0byB0aGlzIGFsZ29yaXRobTsgcmVhZCBsaXN0c29ydC50eHQgZm9yIG92ZXJ2aWV3cyBhbmQgZGV0YWlscy4KICAqLwogCisvKiBBIHNvcnRzbGljZSBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Yga2V5cyBhbmQgYSBwb2ludGVyIHRvCisgKiBhbiBhcnJheSBvZiBjb3JyZXNwb25kaW5nIHZhbHVlcy4gIEluIG90aGVyIHdvcmRzLCBrZXlzW2ldCisgKiBjb3JyZXNwb25kcyB3aXRoIHZhbHVlc1tpXS4gIElmIHZhbHVlcyA9PSBOVUxMLCB0aGVuIHRoZSBrZXlzIGFyZQorICogYWxzbyB0aGUgdmFsdWVzLgorICoKKyAqIFNldmVyYWwgY29udmVuaWVuY2Ugcm91dGluZXMgYXJlIHByb3ZpZGVkIGhlcmUsIHNvIHRoYXQga2V5cyBhbmQKKyAqIHZhbHVlcyBhcmUgYWx3YXlzIG1vdmVkIGluIHN5bmMuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0ICoqa2V5czsKKyAgICBQeU9iamVjdCAqKnZhbHVlczsKK30gc29ydHNsaWNlOworCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK3NvcnRzbGljZV9jb3B5KHNvcnRzbGljZSAqczEsIFB5X3NzaXplX3QgaSwgc29ydHNsaWNlICpzMiwgUHlfc3NpemVfdCBqKQoreworICAgIHMxLT5rZXlzW2ldID0gczItPmtleXNbal07CisgICAgaWYgKHMxLT52YWx1ZXMgIT0gTlVMTCkKKyAgICAgICAgczEtPnZhbHVlc1tpXSA9IHMyLT52YWx1ZXNbal07Cit9CisKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorc29ydHNsaWNlX2NvcHlfaW5jcihzb3J0c2xpY2UgKmRzdCwgc29ydHNsaWNlICpzcmMpCit7CisgICAgKmRzdC0+a2V5cysrID0gKnNyYy0+a2V5cysrOworICAgIGlmIChkc3QtPnZhbHVlcyAhPSBOVUxMKQorICAgICAgICAqZHN0LT52YWx1ZXMrKyA9ICpzcmMtPnZhbHVlcysrOworfQorCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK3NvcnRzbGljZV9jb3B5X2RlY3Ioc29ydHNsaWNlICpkc3QsIHNvcnRzbGljZSAqc3JjKQoreworICAgICpkc3QtPmtleXMtLSA9ICpzcmMtPmtleXMtLTsKKyAgICBpZiAoZHN0LT52YWx1ZXMgIT0gTlVMTCkKKyAgICAgICAgKmRzdC0+dmFsdWVzLS0gPSAqc3JjLT52YWx1ZXMtLTsKK30KKworCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK3NvcnRzbGljZV9tZW1jcHkoc29ydHNsaWNlICpzMSwgUHlfc3NpemVfdCBpLCBzb3J0c2xpY2UgKnMyLCBQeV9zc2l6ZV90IGosCisgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbikKK3sKKyAgICBtZW1jcHkoJnMxLT5rZXlzW2ldLCAmczItPmtleXNbal0sIHNpemVvZihQeU9iamVjdCAqKSAqIG4pOworICAgIGlmIChzMS0+dmFsdWVzICE9IE5VTEwpCisgICAgICAgIG1lbWNweSgmczEtPnZhbHVlc1tpXSwgJnMyLT52YWx1ZXNbal0sIHNpemVvZihQeU9iamVjdCAqKSAqIG4pOworfQorCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK3NvcnRzbGljZV9tZW1tb3ZlKHNvcnRzbGljZSAqczEsIFB5X3NzaXplX3QgaSwgc29ydHNsaWNlICpzMiwgUHlfc3NpemVfdCBqLAorICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuKQoreworICAgIG1lbW1vdmUoJnMxLT5rZXlzW2ldLCAmczItPmtleXNbal0sIHNpemVvZihQeU9iamVjdCAqKSAqIG4pOworICAgIGlmIChzMS0+dmFsdWVzICE9IE5VTEwpCisgICAgICAgIG1lbW1vdmUoJnMxLT52YWx1ZXNbaV0sICZzMi0+dmFsdWVzW2pdLCBzaXplb2YoUHlPYmplY3QgKikgKiBuKTsKK30KKworUHlfTE9DQUxfSU5MSU5FKHZvaWQpCitzb3J0c2xpY2VfYWR2YW5jZShzb3J0c2xpY2UgKnNsaWNlLCBQeV9zc2l6ZV90IG4pCit7CisgICAgc2xpY2UtPmtleXMgKz0gbjsKKyAgICBpZiAoc2xpY2UtPnZhbHVlcyAhPSBOVUxMKQorICAgICAgICBzbGljZS0+dmFsdWVzICs9IG47Cit9CisKIC8qIENvbXBhcmlzb24gZnVuY3Rpb246IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCB3aXRoIFB5X0xULgogICogUmV0dXJucyAtMSBvbiBlcnJvciwgMSBpZiB4IDwgeSwgMCBpZiB4ID49IHkuCiAgKi8KQEAgLTk2NSwxOSArMTAzMCwxOSBAQAogICAgdGhlIGlucHV0IChub3RoaW5nIGlzIGxvc3Qgb3IgZHVwbGljYXRlZCkuCiAqLwogc3RhdGljIGludAotYmluYXJ5c29ydChQeU9iamVjdCAqKmxvLCBQeU9iamVjdCAqKmhpLCBQeU9iamVjdCAqKnN0YXJ0KQorYmluYXJ5c29ydChzb3J0c2xpY2UgbG8sIFB5T2JqZWN0ICoqaGksIFB5T2JqZWN0ICoqc3RhcnQpCiB7CiAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBrOwogICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CiAgICAgcmVnaXN0ZXIgUHlPYmplY3QgKnBpdm90OwogCi0gICAgYXNzZXJ0KGxvIDw9IHN0YXJ0ICYmIHN0YXJ0IDw9IGhpKTsKKyAgICBhc3NlcnQobG8ua2V5cyA8PSBzdGFydCAmJiBzdGFydCA8PSBoaSk7CiAgICAgLyogYXNzZXJ0IFtsbywgc3RhcnQpIGlzIHNvcnRlZCAqLwotICAgIGlmIChsbyA9PSBzdGFydCkKKyAgICBpZiAobG8ua2V5cyA9PSBzdGFydCkKICAgICAgICAgKytzdGFydDsKICAgICBmb3IgKDsgc3RhcnQgPCBoaTsgKytzdGFydCkgewogICAgICAgICAvKiBzZXQgbCB0byB3aGVyZSAqc3RhcnQgYmVsb25ncyAqLwotICAgICAgICBsID0gbG87CisgICAgICAgIGwgPSBsby5rZXlzOwogICAgICAgICByID0gc3RhcnQ7CiAgICAgICAgIHBpdm90ID0gKnI7CiAgICAgICAgIC8qIEludmFyaWFudHM6CkBAIC0xMDA0LDYgKzEwNjksMTUgQEAKICAgICAgICAgZm9yIChwID0gc3RhcnQ7IHAgPiBsOyAtLXApCiAgICAgICAgICAgICAqcCA9ICoocC0xKTsKICAgICAgICAgKmwgPSBwaXZvdDsKKyAgICAgICAgaWYgKGxvLnZhbHVlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG9mZnNldCA9IGxvLnZhbHVlcyAtIGxvLmtleXM7CisgICAgICAgICAgICBwID0gc3RhcnQgKyBvZmZzZXQ7CisgICAgICAgICAgICBwaXZvdCA9ICpwOworICAgICAgICAgICAgbCArPSBvZmZzZXQ7CisgICAgICAgICAgICBmb3IgKHAgPSBzdGFydCArIG9mZnNldDsgcCA+IGw7IC0tcCkKKyAgICAgICAgICAgICAgICAqcCA9ICoocC0xKTsKKyAgICAgICAgICAgICpsID0gcGl2b3Q7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDA7CiAKQEAgLTEyNzIsNyArMTM0Niw3IEBACiAgKiBhIGNvbnZlbmllbnQgd2F5IHRvIHBhc3Mgc3RhdGUgYXJvdW5kIGFtb25nIHRoZSBoZWxwZXIgZnVuY3Rpb25zLgogICovCiBzdHJ1Y3Qgc19zbGljZSB7Ci0gICAgUHlPYmplY3QgKipiYXNlOworICAgIHNvcnRzbGljZSBiYXNlOwogICAgIFB5X3NzaXplX3QgbGVuOwogfTsKIApAQCAtMTI4Niw3ICsxMzYwLDcgQEAKICAgICAvKiAnYScgaXMgdGVtcCBzdG9yYWdlIHRvIGhlbHAgd2l0aCBtZXJnZXMuICBJdCBjb250YWlucyByb29tIGZvcgogICAgICAqIGFsbG9jZWQgZW50cmllcy4KICAgICAgKi8KLSAgICBQeU9iamVjdCAqKmE7ICAgICAgIC8qIG1heSBwb2ludCB0byB0ZW1wYXJyYXkgYmVsb3cgKi8KKyAgICBzb3J0c2xpY2UgYTsgICAgICAgIC8qIG1heSBwb2ludCB0byB0ZW1wYXJyYXkgYmVsb3cgKi8KICAgICBQeV9zc2l6ZV90IGFsbG9jZWQ7CiAKICAgICAvKiBBIHN0YWNrIG9mIG4gcGVuZGluZyBydW5zIHlldCB0byBiZSBtZXJnZWQuICBSdW4gI2kgc3RhcnRzIGF0CkBAIC0xMzA3LDExICsxMzgxLDI5IEBACiAKIC8qIENvbmNlcHR1YWxseSBhIE1lcmdlU3RhdGUncyBjb25zdHJ1Y3Rvci4gKi8KIHN0YXRpYyB2b2lkCi1tZXJnZV9pbml0KE1lcmdlU3RhdGUgKm1zKQorbWVyZ2VfaW5pdChNZXJnZVN0YXRlICptcywgUHlfc3NpemVfdCBsaXN0X3NpemUsIGludCBoYXNfa2V5ZnVuYykKIHsKICAgICBhc3NlcnQobXMgIT0gTlVMTCk7Ci0gICAgbXMtPmEgPSBtcy0+dGVtcGFycmF5OwotICAgIG1zLT5hbGxvY2VkID0gTUVSR0VTVEFURV9URU1QX1NJWkU7CisgICAgaWYgKGhhc19rZXlmdW5jKSB7CisgICAgICAgIC8qIFRoZSB0ZW1wb3Jhcnkgc3BhY2UgZm9yIG1lcmdpbmcgd2lsbCBuZWVkIGF0IG1vc3QgaGFsZiB0aGUgbGlzdAorICAgICAgICAgKiBzaXplIHJvdW5kZWQgdXAuICBVc2UgdGhlIG1pbmltdW0gcG9zc2libGUgc3BhY2Ugc28gd2UgY2FuIHVzZSB0aGUKKyAgICAgICAgICogcmVzdCBvZiB0ZW1wYXJyYXkgZm9yIG90aGVyIHRoaW5ncy4gIEluIHBhcnRpY3VsYXIsIGlmIHRoZXJlIGlzCisgICAgICAgICAqIGVub3VnaCBleHRyYSBzcGFjZSwgbGlzdHNvcnQoKSB3aWxsIHVzZSBpdCB0byBzdG9yZSB0aGUga2V5cy4KKyAgICAgICAgICovCisgICAgICAgIG1zLT5hbGxvY2VkID0gKGxpc3Rfc2l6ZSArIDEpIC8gMjsKKworICAgICAgICAvKiBtcy0+YWxsb2NlZCBkZXNjcmliZXMgaG93IG1hbnkga2V5cyB3aWxsIGJlIHN0b3JlZCBhdAorICAgICAgICAgICBtcy0+dGVtcGFycmF5LCBidXQgd2UgYWxzbyBuZWVkIHRvIHN0b3JlIHRoZSB2YWx1ZXMuICBIZW5jZSwKKyAgICAgICAgICAgbXMtPmFsbG9jZWQgaXMgY2FwcGVkIGF0IGhhbGYgb2YgTUVSR0VTVEFURV9URU1QX1NJWkUuICovCisgICAgICAgIGlmIChNRVJHRVNUQVRFX1RFTVBfU0laRSAvIDIgPCBtcy0+YWxsb2NlZCkKKyAgICAgICAgICAgIG1zLT5hbGxvY2VkID0gTUVSR0VTVEFURV9URU1QX1NJWkUgLyAyOworICAgICAgICBtcy0+YS52YWx1ZXMgPSAmbXMtPnRlbXBhcnJheVttcy0+YWxsb2NlZF07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtcy0+YWxsb2NlZCA9IE1FUkdFU1RBVEVfVEVNUF9TSVpFOworICAgICAgICBtcy0+YS52YWx1ZXMgPSBOVUxMOworICAgIH0KKyAgICBtcy0+YS5rZXlzID0gbXMtPnRlbXBhcnJheTsKICAgICBtcy0+biA9IDA7CiAgICAgbXMtPm1pbl9nYWxsb3AgPSBNSU5fR0FMTE9QOwogfQpAQCAtMTMyNCwxMCArMTQxNiw4IEBACiBtZXJnZV9mcmVlbWVtKE1lcmdlU3RhdGUgKm1zKQogewogICAgIGFzc2VydChtcyAhPSBOVUxMKTsKLSAgICBpZiAobXMtPmEgIT0gbXMtPnRlbXBhcnJheSkKLSAgICAgICAgUHlNZW1fRnJlZShtcy0+YSk7Ci0gICAgbXMtPmEgPSBtcy0+dGVtcGFycmF5OwotICAgIG1zLT5hbGxvY2VkID0gTUVSR0VTVEFURV9URU1QX1NJWkU7CisgICAgaWYgKG1zLT5hLmtleXMgIT0gbXMtPnRlbXBhcnJheSkKKyAgICAgICAgUHlNZW1fRnJlZShtcy0+YS5rZXlzKTsKIH0KIAogLyogRW5zdXJlIGVub3VnaCB0ZW1wIG1lbW9yeSBmb3IgJ25lZWQnIGFycmF5IHNsb3RzIGlzIGF2YWlsYWJsZS4KQEAgLTEzMzYsNTIgKzE0MjYsNjAgQEAKIHN0YXRpYyBpbnQKIG1lcmdlX2dldG1lbShNZXJnZVN0YXRlICptcywgUHlfc3NpemVfdCBuZWVkKQogeworICAgIGludCBtdWx0aXBsaWVyOworCiAgICAgYXNzZXJ0KG1zICE9IE5VTEwpOwogICAgIGlmIChuZWVkIDw9IG1zLT5hbGxvY2VkKQogICAgICAgICByZXR1cm4gMDsKKworICAgIG11bHRpcGxpZXIgPSBtcy0+YS52YWx1ZXMgIT0gTlVMTCA/IDIgOiAxOworCiAgICAgLyogRG9uJ3QgcmVhbGxvYyEgIFRoYXQgY2FuIGNvc3QgY3ljbGVzIHRvIGNvcHkgdGhlIG9sZCBkYXRhLCBidXQKICAgICAgKiB3ZSBkb24ndCBjYXJlIHdoYXQncyBpbiB0aGUgYmxvY2suCiAgICAgICovCiAgICAgbWVyZ2VfZnJlZW1lbShtcyk7Ci0gICAgaWYgKChzaXplX3QpbmVlZCA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKFB5T2JqZWN0KikpIHsKKyAgICBpZiAoKHNpemVfdCluZWVkID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoUHlPYmplY3QqKSAvIG11bHRpcGxpZXIpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBtcy0+YSA9IChQeU9iamVjdCAqKilQeU1lbV9NYWxsb2MobmVlZCAqIHNpemVvZihQeU9iamVjdCopKTsKLSAgICBpZiAobXMtPmEpIHsKKyAgICBtcy0+YS5rZXlzID0gKFB5T2JqZWN0KiopUHlNZW1fTWFsbG9jKG11bHRpcGxpZXIgKiBuZWVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgaWYgKG1zLT5hLmtleXMgIT0gTlVMTCkgewogICAgICAgICBtcy0+YWxsb2NlZCA9IG5lZWQ7CisgICAgICAgIGlmIChtcy0+YS52YWx1ZXMgIT0gTlVMTCkKKyAgICAgICAgICAgIG1zLT5hLnZhbHVlcyA9ICZtcy0+YS5rZXlzW25lZWRdOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBtZXJnZV9mcmVlbWVtKG1zKTsgICAgICAgICAgLyogcmVzZXQgdG8gc2FuZSBzdGF0ZSAqLwogICAgIHJldHVybiAtMTsKIH0KICNkZWZpbmUgTUVSR0VfR0VUTUVNKE1TLCBORUVEKSAoKE5FRUQpIDw9IChNUyktPmFsbG9jZWQgPyAwIDogICBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlX2dldG1lbShNUywgTkVFRCkpCiAKLS8qIE1lcmdlIHRoZSBuYSBlbGVtZW50cyBzdGFydGluZyBhdCBwYSB3aXRoIHRoZSBuYiBlbGVtZW50cyBzdGFydGluZyBhdCBwYgotICogaW4gYSBzdGFibGUgd2F5LCBpbi1wbGFjZS4gIG5hIGFuZCBuYiBtdXN0IGJlID4gMCwgYW5kIHBhICsgbmEgPT0gcGIuCi0gKiBNdXN0IGFsc28gaGF2ZSB0aGF0ICpwYiA8ICpwYSwgdGhhdCBwYVtuYS0xXSBiZWxvbmdzIGF0IHRoZSBlbmQgb2YgdGhlCi0gKiBtZXJnZSwgYW5kIHNob3VsZCBoYXZlIG5hIDw9IG5iLiAgU2VlIGxpc3Rzb3J0LnR4dCBmb3IgbW9yZSBpbmZvLgotICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgLTEgaWYgZXJyb3IuCisvKiBNZXJnZSB0aGUgbmEgZWxlbWVudHMgc3RhcnRpbmcgYXQgc3NhIHdpdGggdGhlIG5iIGVsZW1lbnRzIHN0YXJ0aW5nIGF0CisgKiBzc2Iua2V5cyA9IHNzYS5rZXlzICsgbmEgaW4gYSBzdGFibGUgd2F5LCBpbi1wbGFjZS4gIG5hIGFuZCBuYiBtdXN0IGJlID4gMC4KKyAqIE11c3QgYWxzbyBoYXZlIHRoYXQgc3NhLmtleXNbbmEtMV0gYmVsb25ncyBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSwgYW5kCisgKiBzaG91bGQgaGF2ZSBuYSA8PSBuYi4gIFNlZSBsaXN0c29ydC50eHQgZm9yIG1vcmUgaW5mby4gIFJldHVybiAwIGlmCisgKiBzdWNjZXNzZnVsLCAtMSBpZiBlcnJvci4KICAqLwogc3RhdGljIFB5X3NzaXplX3QKLW1lcmdlX2xvKE1lcmdlU3RhdGUgKm1zLCBQeU9iamVjdCAqKnBhLCBQeV9zc2l6ZV90IG5hLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcGIsIFB5X3NzaXplX3QgbmIpCittZXJnZV9sbyhNZXJnZVN0YXRlICptcywgc29ydHNsaWNlIHNzYSwgUHlfc3NpemVfdCBuYSwKKyAgICAgICAgIHNvcnRzbGljZSBzc2IsIFB5X3NzaXplX3QgbmIpCiB7CiAgICAgUHlfc3NpemVfdCBrOwotICAgIFB5T2JqZWN0ICoqZGVzdDsKKyAgICBzb3J0c2xpY2UgZGVzdDsKICAgICBpbnQgcmVzdWx0ID0gLTE7ICAgICAgICAgICAgLyogZ3VpbHR5IHVudGlsIHByb3ZlZCBpbm5vY2VudCAqLwogICAgIFB5X3NzaXplX3QgbWluX2dhbGxvcDsKIAotICAgIGFzc2VydChtcyAmJiBwYSAmJiBwYiAmJiBuYSA+IDAgJiYgbmIgPiAwICYmIHBhICsgbmEgPT0gcGIpOworICAgIGFzc2VydChtcyAmJiBzc2Eua2V5cyAmJiBzc2Iua2V5cyAmJiBuYSA+IDAgJiYgbmIgPiAwKTsKKyAgICBhc3NlcnQoc3NhLmtleXMgKyBuYSA9PSBzc2Iua2V5cyk7CiAgICAgaWYgKE1FUkdFX0dFVE1FTShtcywgbmEpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIG1lbWNweShtcy0+YSwgcGEsIG5hICogc2l6ZW9mKFB5T2JqZWN0KikpOwotICAgIGRlc3QgPSBwYTsKLSAgICBwYSA9IG1zLT5hOworICAgIHNvcnRzbGljZV9tZW1jcHkoJm1zLT5hLCAwLCAmc3NhLCAwLCBuYSk7CisgICAgZGVzdCA9IHNzYTsKKyAgICBzc2EgPSBtcy0+YTsKIAotICAgICpkZXN0KysgPSAqcGIrKzsKKyAgICBzb3J0c2xpY2VfY29weV9pbmNyKCZkZXN0LCAmc3NiKTsKICAgICAtLW5iOwogICAgIGlmIChuYiA9PSAwKQogICAgICAgICBnb3RvIFN1Y2NlZWQ7CkBAIC0xMzk4LDExICsxNDk2LDExIEBACiAgICAgICAgICAqLwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBhc3NlcnQobmEgPiAxICYmIG5iID4gMCk7Ci0gICAgICAgICAgICBrID0gSVNMVCgqcGIsICpwYSk7CisgICAgICAgICAgICBrID0gSVNMVChzc2Iua2V5c1swXSwgc3NhLmtleXNbMF0pOwogICAgICAgICAgICAgaWYgKGspIHsKICAgICAgICAgICAgICAgICBpZiAoayA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICAqZGVzdCsrID0gKnBiKys7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2NvcHlfaW5jcigmZGVzdCwgJnNzYik7CiAgICAgICAgICAgICAgICAgKytiY291bnQ7CiAgICAgICAgICAgICAgICAgYWNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAtLW5iOwpAQCAtMTQxMiw3ICsxNTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAqZGVzdCsrID0gKnBhKys7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2NvcHlfaW5jcigmZGVzdCwgJnNzYSk7CiAgICAgICAgICAgICAgICAgKythY291bnQ7CiAgICAgICAgICAgICAgICAgYmNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAtLW5hOwpAQCAtMTQzMywxNCArMTUzMSwxNCBAQAogICAgICAgICAgICAgYXNzZXJ0KG5hID4gMSAmJiBuYiA+IDApOwogICAgICAgICAgICAgbWluX2dhbGxvcCAtPSBtaW5fZ2FsbG9wID4gMTsKICAgICAgICAgICAgIG1zLT5taW5fZ2FsbG9wID0gbWluX2dhbGxvcDsKLSAgICAgICAgICAgIGsgPSBnYWxsb3BfcmlnaHQoKnBiLCBwYSwgbmEsIDApOworICAgICAgICAgICAgayA9IGdhbGxvcF9yaWdodChzc2Iua2V5c1swXSwgc3NhLmtleXMsIG5hLCAwKTsKICAgICAgICAgICAgIGFjb3VudCA9IGs7CiAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgIGlmIChrIDwgMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIG1lbWNweShkZXN0LCBwYSwgayAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgICAgICAgICAgZGVzdCArPSBrOwotICAgICAgICAgICAgICAgIHBhICs9IGs7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX21lbWNweSgmZGVzdCwgMCwgJnNzYSwgMCwgayk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2FkdmFuY2UoJmRlc3QsIGspOworICAgICAgICAgICAgICAgIHNvcnRzbGljZV9hZHZhbmNlKCZzc2EsIGspOwogICAgICAgICAgICAgICAgIG5hIC09IGs7CiAgICAgICAgICAgICAgICAgaWYgKG5hID09IDEpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gQ29weUI7CkBAIC0xNDUxLDI0ICsxNTQ5LDI0IEBACiAgICAgICAgICAgICAgICAgaWYgKG5hID09IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gU3VjY2VlZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0KysgPSAqcGIrKzsKKyAgICAgICAgICAgIHNvcnRzbGljZV9jb3B5X2luY3IoJmRlc3QsICZzc2IpOwogICAgICAgICAgICAgLS1uYjsKICAgICAgICAgICAgIGlmIChuYiA9PSAwKQogICAgICAgICAgICAgICAgIGdvdG8gU3VjY2VlZDsKIAotICAgICAgICAgICAgayA9IGdhbGxvcF9sZWZ0KCpwYSwgcGIsIG5iLCAwKTsKKyAgICAgICAgICAgIGsgPSBnYWxsb3BfbGVmdChzc2Eua2V5c1swXSwgc3NiLmtleXMsIG5iLCAwKTsKICAgICAgICAgICAgIGJjb3VudCA9IGs7CiAgICAgICAgICAgICBpZiAoaykgewogICAgICAgICAgICAgICAgIGlmIChrIDwgMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIG1lbW1vdmUoZGVzdCwgcGIsIGsgKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICAgICAgICAgICAgIGRlc3QgKz0gazsKLSAgICAgICAgICAgICAgICBwYiArPSBrOworICAgICAgICAgICAgICAgIHNvcnRzbGljZV9tZW1tb3ZlKCZkZXN0LCAwLCAmc3NiLCAwLCBrKTsKKyAgICAgICAgICAgICAgICBzb3J0c2xpY2VfYWR2YW5jZSgmZGVzdCwgayk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2FkdmFuY2UoJnNzYiwgayk7CiAgICAgICAgICAgICAgICAgbmIgLT0gazsKICAgICAgICAgICAgICAgICBpZiAobmIgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgZ290byBTdWNjZWVkOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QrKyA9ICpwYSsrOworICAgICAgICAgICAgc29ydHNsaWNlX2NvcHlfaW5jcigmZGVzdCwgJnNzYSk7CiAgICAgICAgICAgICAtLW5hOwogICAgICAgICAgICAgaWYgKG5hID09IDEpCiAgICAgICAgICAgICAgICAgZ290byBDb3B5QjsKQEAgLTE0ODAsNDMgKzE1NzgsNDYgQEAKICAgICByZXN1bHQgPSAwOwogRmFpbDoKICAgICBpZiAobmEpCi0gICAgICAgIG1lbWNweShkZXN0LCBwYSwgbmEgKiBzaXplb2YoUHlPYmplY3QqKSk7CisgICAgICAgIHNvcnRzbGljZV9tZW1jcHkoJmRlc3QsIDAsICZzc2EsIDAsIG5hKTsKICAgICByZXR1cm4gcmVzdWx0OwogQ29weUI6CiAgICAgYXNzZXJ0KG5hID09IDEgJiYgbmIgPiAwKTsKLSAgICAvKiBUaGUgbGFzdCBlbGVtZW50IG9mIHBhIGJlbG9uZ3MgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UuICovCi0gICAgbWVtbW92ZShkZXN0LCBwYiwgbmIgKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgIGRlc3RbbmJdID0gKnBhOworICAgIC8qIFRoZSBsYXN0IGVsZW1lbnQgb2Ygc3NhIGJlbG9uZ3MgYXQgdGhlIGVuZCBvZiB0aGUgbWVyZ2UuICovCisgICAgc29ydHNsaWNlX21lbW1vdmUoJmRlc3QsIDAsICZzc2IsIDAsIG5iKTsKKyAgICBzb3J0c2xpY2VfY29weSgmZGVzdCwgbmIsICZzc2EsIDApOwogICAgIHJldHVybiAwOwogfQogCi0vKiBNZXJnZSB0aGUgbmEgZWxlbWVudHMgc3RhcnRpbmcgYXQgcGEgd2l0aCB0aGUgbmIgZWxlbWVudHMgc3RhcnRpbmcgYXQgcGIKLSAqIGluIGEgc3RhYmxlIHdheSwgaW4tcGxhY2UuICBuYSBhbmQgbmIgbXVzdCBiZSA+IDAsIGFuZCBwYSArIG5hID09IHBiLgotICogTXVzdCBhbHNvIGhhdmUgdGhhdCAqcGIgPCAqcGEsIHRoYXQgcGFbbmEtMV0gYmVsb25ncyBhdCB0aGUgZW5kIG9mIHRoZQotICogbWVyZ2UsIGFuZCBzaG91bGQgaGF2ZSBuYSA+PSBuYi4gIFNlZSBsaXN0c29ydC50eHQgZm9yIG1vcmUgaW5mby4KLSAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC0xIGlmIGVycm9yLgorLyogTWVyZ2UgdGhlIG5hIGVsZW1lbnRzIHN0YXJ0aW5nIGF0IHBhIHdpdGggdGhlIG5iIGVsZW1lbnRzIHN0YXJ0aW5nIGF0CisgKiBzc2Iua2V5cyA9IHNzYS5rZXlzICsgbmEgaW4gYSBzdGFibGUgd2F5LCBpbi1wbGFjZS4gIG5hIGFuZCBuYiBtdXN0IGJlID4gMC4KKyAqIE11c3QgYWxzbyBoYXZlIHRoYXQgc3NhLmtleXNbbmEtMV0gYmVsb25ncyBhdCB0aGUgZW5kIG9mIHRoZSBtZXJnZSwgYW5kCisgKiBzaG91bGQgaGF2ZSBuYSA+PSBuYi4gIFNlZSBsaXN0c29ydC50eHQgZm9yIG1vcmUgaW5mby4gIFJldHVybiAwIGlmCisgKiBzdWNjZXNzZnVsLCAtMSBpZiBlcnJvci4KICAqLwogc3RhdGljIFB5X3NzaXplX3QKLW1lcmdlX2hpKE1lcmdlU3RhdGUgKm1zLCBQeU9iamVjdCAqKnBhLCBQeV9zc2l6ZV90IG5hLCBQeU9iamVjdCAqKnBiLCBQeV9zc2l6ZV90IG5iKQorbWVyZ2VfaGkoTWVyZ2VTdGF0ZSAqbXMsIHNvcnRzbGljZSBzc2EsIFB5X3NzaXplX3QgbmEsCisgICAgICAgICBzb3J0c2xpY2Ugc3NiLCBQeV9zc2l6ZV90IG5iKQogewogICAgIFB5X3NzaXplX3QgazsKLSAgICBQeU9iamVjdCAqKmRlc3Q7CisgICAgc29ydHNsaWNlIGRlc3QsIGJhc2VhLCBiYXNlYjsKICAgICBpbnQgcmVzdWx0ID0gLTE7ICAgICAgICAgICAgLyogZ3VpbHR5IHVudGlsIHByb3ZlZCBpbm5vY2VudCAqLwotICAgIFB5T2JqZWN0ICoqYmFzZWE7Ci0gICAgUHlPYmplY3QgKipiYXNlYjsKICAgICBQeV9zc2l6ZV90IG1pbl9nYWxsb3A7CiAKLSAgICBhc3NlcnQobXMgJiYgcGEgJiYgcGIgJiYgbmEgPiAwICYmIG5iID4gMCAmJiBwYSArIG5hID09IHBiKTsKKyAgICBhc3NlcnQobXMgJiYgc3NhLmtleXMgJiYgc3NiLmtleXMgJiYgbmEgPiAwICYmIG5iID4gMCk7CisgICAgYXNzZXJ0KHNzYS5rZXlzICsgbmEgPT0gc3NiLmtleXMpOwogICAgIGlmIChNRVJHRV9HRVRNRU0obXMsIG5iKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBkZXN0ID0gcGIgKyBuYiAtIDE7Ci0gICAgbWVtY3B5KG1zLT5hLCBwYiwgbmIgKiBzaXplb2YoUHlPYmplY3QqKSk7Ci0gICAgYmFzZWEgPSBwYTsKKyAgICBkZXN0ID0gc3NiOworICAgIHNvcnRzbGljZV9hZHZhbmNlKCZkZXN0LCBuYi0xKTsKKyAgICBzb3J0c2xpY2VfbWVtY3B5KCZtcy0+YSwgMCwgJnNzYiwgMCwgbmIpOworICAgIGJhc2VhID0gc3NhOwogICAgIGJhc2ViID0gbXMtPmE7Ci0gICAgcGIgPSBtcy0+YSArIG5iIC0gMTsKLSAgICBwYSArPSBuYSAtIDE7CisgICAgc3NiLmtleXMgPSBtcy0+YS5rZXlzICsgbmIgLSAxOworICAgIGlmIChzc2IudmFsdWVzICE9IE5VTEwpCisgICAgICAgIHNzYi52YWx1ZXMgPSBtcy0+YS52YWx1ZXMgKyBuYiAtIDE7CisgICAgc29ydHNsaWNlX2FkdmFuY2UoJnNzYSwgbmEgLSAxKTsKIAotICAgICpkZXN0LS0gPSAqcGEtLTsKKyAgICBzb3J0c2xpY2VfY29weV9kZWNyKCZkZXN0LCAmc3NhKTsKICAgICAtLW5hOwogICAgIGlmIChuYSA9PSAwKQogICAgICAgICBnb3RvIFN1Y2NlZWQ7CkBAIC0xNTMzLDExICsxNjM0LDExIEBACiAgICAgICAgICAqLwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBhc3NlcnQobmEgPiAwICYmIG5iID4gMSk7Ci0gICAgICAgICAgICBrID0gSVNMVCgqcGIsICpwYSk7CisgICAgICAgICAgICBrID0gSVNMVChzc2Iua2V5c1swXSwgc3NhLmtleXNbMF0pOwogICAgICAgICAgICAgaWYgKGspIHsKICAgICAgICAgICAgICAgICBpZiAoayA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKLSAgICAgICAgICAgICAgICAqZGVzdC0tID0gKnBhLS07CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2NvcHlfZGVjcigmZGVzdCwgJnNzYSk7CiAgICAgICAgICAgICAgICAgKythY291bnQ7CiAgICAgICAgICAgICAgICAgYmNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAtLW5hOwpAQCAtMTU0Nyw3ICsxNjQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAqZGVzdC0tID0gKnBiLS07CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2NvcHlfZGVjcigmZGVzdCwgJnNzYik7CiAgICAgICAgICAgICAgICAgKytiY291bnQ7CiAgICAgICAgICAgICAgICAgYWNvdW50ID0gMDsKICAgICAgICAgICAgICAgICAtLW5iOwpAQCAtMTU2OCwzMyArMTY2OSwzMyBAQAogICAgICAgICAgICAgYXNzZXJ0KG5hID4gMCAmJiBuYiA+IDEpOwogICAgICAgICAgICAgbWluX2dhbGxvcCAtPSBtaW5fZ2FsbG9wID4gMTsKICAgICAgICAgICAgIG1zLT5taW5fZ2FsbG9wID0gbWluX2dhbGxvcDsKLSAgICAgICAgICAgIGsgPSBnYWxsb3BfcmlnaHQoKnBiLCBiYXNlYSwgbmEsIG5hLTEpOworICAgICAgICAgICAgayA9IGdhbGxvcF9yaWdodChzc2Iua2V5c1swXSwgYmFzZWEua2V5cywgbmEsIG5hLTEpOwogICAgICAgICAgICAgaWYgKGsgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gRmFpbDsKICAgICAgICAgICAgIGsgPSBuYSAtIGs7CiAgICAgICAgICAgICBhY291bnQgPSBrOwogICAgICAgICAgICAgaWYgKGspIHsKLSAgICAgICAgICAgICAgICBkZXN0IC09IGs7Ci0gICAgICAgICAgICAgICAgcGEgLT0gazsKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKGRlc3QrMSwgcGErMSwgayAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2FkdmFuY2UoJmRlc3QsIC1rKTsKKyAgICAgICAgICAgICAgICBzb3J0c2xpY2VfYWR2YW5jZSgmc3NhLCAtayk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX21lbW1vdmUoJmRlc3QsIDEsICZzc2EsIDEsIGspOwogICAgICAgICAgICAgICAgIG5hIC09IGs7CiAgICAgICAgICAgICAgICAgaWYgKG5hID09IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gU3VjY2VlZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0LS0gPSAqcGItLTsKKyAgICAgICAgICAgIHNvcnRzbGljZV9jb3B5X2RlY3IoJmRlc3QsICZzc2IpOwogICAgICAgICAgICAgLS1uYjsKICAgICAgICAgICAgIGlmIChuYiA9PSAxKQogICAgICAgICAgICAgICAgIGdvdG8gQ29weUE7CiAKLSAgICAgICAgICAgIGsgPSBnYWxsb3BfbGVmdCgqcGEsIGJhc2ViLCBuYiwgbmItMSk7CisgICAgICAgICAgICBrID0gZ2FsbG9wX2xlZnQoc3NhLmtleXNbMF0sIGJhc2ViLmtleXMsIG5iLCBuYi0xKTsKICAgICAgICAgICAgIGlmIChrIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIEZhaWw7CiAgICAgICAgICAgICBrID0gbmIgLSBrOwogICAgICAgICAgICAgYmNvdW50ID0gazsKICAgICAgICAgICAgIGlmIChrKSB7Ci0gICAgICAgICAgICAgICAgZGVzdCAtPSBrOwotICAgICAgICAgICAgICAgIHBiIC09IGs7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGRlc3QrMSwgcGIrMSwgayAqIHNpemVvZihQeU9iamVjdCAqKSk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX2FkdmFuY2UoJmRlc3QsIC1rKTsKKyAgICAgICAgICAgICAgICBzb3J0c2xpY2VfYWR2YW5jZSgmc3NiLCAtayk7CisgICAgICAgICAgICAgICAgc29ydHNsaWNlX21lbWNweSgmZGVzdCwgMSwgJnNzYiwgMSwgayk7CiAgICAgICAgICAgICAgICAgbmIgLT0gazsKICAgICAgICAgICAgICAgICBpZiAobmIgPT0gMSkKICAgICAgICAgICAgICAgICAgICAgZ290byBDb3B5QTsKQEAgLTE2MDUsNyArMTcwNiw3IEBACiAgICAgICAgICAgICAgICAgaWYgKG5iID09IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gU3VjY2VlZDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0LS0gPSAqcGEtLTsKKyAgICAgICAgICAgIHNvcnRzbGljZV9jb3B5X2RlY3IoJmRlc3QsICZzc2EpOwogICAgICAgICAgICAgLS1uYTsKICAgICAgICAgICAgIGlmIChuYSA9PSAwKQogICAgICAgICAgICAgICAgIGdvdG8gU3VjY2VlZDsKQEAgLTE2MTcsMTUgKzE3MTgsMTUgQEAKICAgICByZXN1bHQgPSAwOwogRmFpbDoKICAgICBpZiAobmIpCi0gICAgICAgIG1lbWNweShkZXN0LShuYi0xKSwgYmFzZWIsIG5iICogc2l6ZW9mKFB5T2JqZWN0KikpOworICAgICAgICBzb3J0c2xpY2VfbWVtY3B5KCZkZXN0LCAtKG5iLTEpLCAmYmFzZWIsIDAsIG5iKTsKICAgICByZXR1cm4gcmVzdWx0OwogQ29weUE6CiAgICAgYXNzZXJ0KG5iID09IDEgJiYgbmEgPiAwKTsKLSAgICAvKiBUaGUgZmlyc3QgZWxlbWVudCBvZiBwYiBiZWxvbmdzIGF0IHRoZSBmcm9udCBvZiB0aGUgbWVyZ2UuICovCi0gICAgZGVzdCAtPSBuYTsKLSAgICBwYSAtPSBuYTsKLSAgICBtZW1tb3ZlKGRlc3QrMSwgcGErMSwgbmEgKiBzaXplb2YoUHlPYmplY3QgKikpOwotICAgICpkZXN0ID0gKnBiOworICAgIC8qIFRoZSBmaXJzdCBlbGVtZW50IG9mIHNzYiBiZWxvbmdzIGF0IHRoZSBmcm9udCBvZiB0aGUgbWVyZ2UuICovCisgICAgc29ydHNsaWNlX21lbW1vdmUoJmRlc3QsIDEtbmEsICZzc2EsIDEtbmEsIG5hKTsKKyAgICBzb3J0c2xpY2VfYWR2YW5jZSgmZGVzdCwgLW5hKTsKKyAgICBzb3J0c2xpY2VfYWR2YW5jZSgmc3NhLCAtbmEpOworICAgIHNvcnRzbGljZV9jb3B5KCZkZXN0LCAwLCAmc3NiLCAwKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTYzNSw3ICsxNzM2LDcgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBtZXJnZV9hdChNZXJnZVN0YXRlICptcywgUHlfc3NpemVfdCBpKQogewotICAgIFB5T2JqZWN0ICoqcGEsICoqcGI7CisgICAgc29ydHNsaWNlIHNzYSwgc3NiOwogICAgIFB5X3NzaXplX3QgbmEsIG5iOwogICAgIFB5X3NzaXplX3QgazsKIApAQCAtMTY0NCwxMiArMTc0NSwxMiBAQAogICAgIGFzc2VydChpID49IDApOwogICAgIGFzc2VydChpID09IG1zLT5uIC0gMiB8fCBpID09IG1zLT5uIC0gMyk7CiAKLSAgICBwYSA9IG1zLT5wZW5kaW5nW2ldLmJhc2U7CisgICAgc3NhID0gbXMtPnBlbmRpbmdbaV0uYmFzZTsKICAgICBuYSA9IG1zLT5wZW5kaW5nW2ldLmxlbjsKLSAgICBwYiA9IG1zLT5wZW5kaW5nW2krMV0uYmFzZTsKKyAgICBzc2IgPSBtcy0+cGVuZGluZ1tpKzFdLmJhc2U7CiAgICAgbmIgPSBtcy0+cGVuZGluZ1tpKzFdLmxlbjsKICAgICBhc3NlcnQobmEgPiAwICYmIG5iID4gMCk7Ci0gICAgYXNzZXJ0KHBhICsgbmEgPT0gcGIpOworICAgIGFzc2VydChzc2Eua2V5cyArIG5hID09IHNzYi5rZXlzKTsKIAogICAgIC8qIFJlY29yZCB0aGUgbGVuZ3RoIG9mIHRoZSBjb21iaW5lZCBydW5zOyBpZiBpIGlzIHRoZSAzcmQtbGFzdAogICAgICAqIHJ1biBub3csIGFsc28gc2xpZGUgb3ZlciB0aGUgbGFzdCBydW4gKHdoaWNoIGlzbid0IGludm9sdmVkCkBAIC0xNjYzLDEwICsxNzY0LDEwIEBACiAgICAgLyogV2hlcmUgZG9lcyBiIHN0YXJ0IGluIGE/ICBFbGVtZW50cyBpbiBhIGJlZm9yZSB0aGF0IGNhbiBiZQogICAgICAqIGlnbm9yZWQgKGFscmVhZHkgaW4gcGxhY2UpLgogICAgICAqLwotICAgIGsgPSBnYWxsb3BfcmlnaHQoKnBiLCBwYSwgbmEsIDApOworICAgIGsgPSBnYWxsb3BfcmlnaHQoKnNzYi5rZXlzLCBzc2Eua2V5cywgbmEsIDApOwogICAgIGlmIChrIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHBhICs9IGs7CisgICAgc29ydHNsaWNlX2FkdmFuY2UoJnNzYSwgayk7CiAgICAgbmEgLT0gazsKICAgICBpZiAobmEgPT0gMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjc0LDcgKzE3NzUsNyBAQAogICAgIC8qIFdoZXJlIGRvZXMgYSBlbmQgaW4gYj8gIEVsZW1lbnRzIGluIGIgYWZ0ZXIgdGhhdCBjYW4gYmUKICAgICAgKiBpZ25vcmVkIChhbHJlYWR5IGluIHBsYWNlKS4KICAgICAgKi8KLSAgICBuYiA9IGdhbGxvcF9sZWZ0KHBhW25hLTFdLCBwYiwgbmIsIG5iLTEpOworICAgIG5iID0gZ2FsbG9wX2xlZnQoc3NhLmtleXNbbmEtMV0sIHNzYi5rZXlzLCBuYiwgbmItMSk7CiAgICAgaWYgKG5iIDw9IDApCiAgICAgICAgIHJldHVybiBuYjsKIApAQCAtMTY4Miw5ICsxNzgzLDkgQEAKICAgICAgKiBtaW4obmEsIG5iKSBlbGVtZW50cy4KICAgICAgKi8KICAgICBpZiAobmEgPD0gbmIpCi0gICAgICAgIHJldHVybiBtZXJnZV9sbyhtcywgcGEsIG5hLCBwYiwgbmIpOworICAgICAgICByZXR1cm4gbWVyZ2VfbG8obXMsIHNzYSwgbmEsIHNzYiwgbmIpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG1lcmdlX2hpKG1zLCBwYSwgbmEsIHBiLCBuYik7CisgICAgICAgIHJldHVybiBtZXJnZV9oaShtcywgc3NhLCBuYSwgc3NiLCBuYik7CiB9CiAKIC8qIEV4YW1pbmUgdGhlIHN0YWNrIG9mIHJ1bnMgd2FpdGluZyB0byBiZSBtZXJnZWQsIG1lcmdpbmcgYWRqYWNlbnQgcnVucwpAQCAtMTc2NSwxMDMgKzE4NjYsMTIgQEAKICAgICByZXR1cm4gbiArIHI7CiB9CiAKLS8qIFNwZWNpYWwgd3JhcHBlciB0byBzdXBwb3J0IHN0YWJsZSBzb3J0aW5nIHVzaW5nIHRoZSBkZWNvcmF0ZS1zb3J0LXVuZGVjb3JhdGUKLSAgIHBhdHRlcm4uICBIb2xkcyBhIGtleSB3aGljaCBpcyB1c2VkIGZvciBjb21wYXJpc29ucyBhbmQgdGhlIG9yaWdpbmFsIHJlY29yZAotICAgd2hpY2ggaXMgcmV0dXJuZWQgZHVyaW5nIHRoZSB1bmRlY29yYXRlIHBoYXNlLiAgQnkgZXhwb3Npbmcgb25seSB0aGUga2V5Ci0gICBkdXJpbmcgY29tcGFyaXNvbnMsIHRoZSB1bmRlcmx5aW5nIHNvcnQgc3RhYmlsaXR5IGNoYXJhY3RlcmlzdGljcyBhcmUgbGVmdAotICAgdW5jaGFuZ2VkLiAgQWxzbywgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gd2lsbCBvbmx5IHNlZSB0aGUga2V5IGluc3RlYWQgb2YKLSAgIGEgZnVsbCByZWNvcmQuICovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgUHlPYmplY3QgKmtleTsKLSAgICBQeU9iamVjdCAqdmFsdWU7Ci19IHNvcnR3cmFwcGVyb2JqZWN0OwotCi1QeURvY19TVFJWQVIoc29ydHdyYXBwZXJfZG9jLCAiT2JqZWN0IHdyYXBwZXIgd2l0aCBhIGN1c3RvbSBzb3J0IGtleS4iKTsKLXN0YXRpYyBQeU9iamVjdCAqCi1zb3J0d3JhcHBlcl9yaWNoY29tcGFyZShzb3J0d3JhcHBlcm9iamVjdCAqLCBzb3J0d3JhcHBlcm9iamVjdCAqLCBpbnQpOwogc3RhdGljIHZvaWQKLXNvcnR3cmFwcGVyX2RlYWxsb2Moc29ydHdyYXBwZXJvYmplY3QgKik7Ci0KLVB5VHlwZU9iamVjdCBQeVNvcnRXcmFwcGVyX1R5cGUgPSB7Ci0gICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKLSAgICAic29ydHdyYXBwZXIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KLSAgICBzaXplb2Yoc29ydHdyYXBwZXJvYmplY3QpLCAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3Ipc29ydHdyYXBwZXJfZGVhbGxvYywgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JlcHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N0ciAqLwotICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgc29ydHdyYXBwZXJfZG9jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIChyaWNoY21wZnVuYylzb3J0d3JhcHBlcl9yaWNoY29tcGFyZSwgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLX07Ci0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXNvcnR3cmFwcGVyX3JpY2hjb21wYXJlKHNvcnR3cmFwcGVyb2JqZWN0ICphLCBzb3J0d3JhcHBlcm9iamVjdCAqYiwgaW50IG9wKQorcmV2ZXJzZV9zb3J0c2xpY2Uoc29ydHNsaWNlICpzLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2soYiwgJlB5U29ydFdyYXBwZXJfVHlwZSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJleHBlY3RlZCBhIHNvcnR3cmFwcGVyb2JqZWN0Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXR1cm4gUHlPYmplY3RfUmljaENvbXBhcmUoYS0+a2V5LCBiLT5rZXksIG9wKTsKLX0KLQotc3RhdGljIHZvaWQKLXNvcnR3cmFwcGVyX2RlYWxsb2Moc29ydHdyYXBwZXJvYmplY3QgKnNvKQotewotICAgIFB5X1hERUNSRUYoc28tPmtleSk7Ci0gICAgUHlfWERFQ1JFRihzby0+dmFsdWUpOwotICAgIFB5T2JqZWN0X0RlbChzbyk7Ci19Ci0KLS8qIFJldHVybnMgYSBuZXcgcmVmZXJlbmNlIHRvIGEgc29ydHdyYXBwZXIuCi0gICBDb25zdW1lcyB0aGUgcmVmZXJlbmNlcyB0byB0aGUgdHdvIHVuZGVybHlpbmcgb2JqZWN0cy4gKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLWJ1aWxkX3NvcnR3cmFwcGVyKFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKLXsKLSAgICBzb3J0d3JhcHBlcm9iamVjdCAqc287Ci0KLSAgICBzbyA9IFB5T2JqZWN0X05ldyhzb3J0d3JhcHBlcm9iamVjdCwgJlB5U29ydFdyYXBwZXJfVHlwZSk7Ci0gICAgaWYgKHNvID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHNvLT5rZXkgPSBrZXk7Ci0gICAgc28tPnZhbHVlID0gdmFsdWU7Ci0gICAgcmV0dXJuIChQeU9iamVjdCAqKXNvOwotfQotCi0vKiBSZXR1cm5zIGEgbmV3IHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgdW5kZXJseWluZyB0aGUgd3JhcHBlci4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1zb3J0d3JhcHBlcl9nZXR2YWx1ZShQeU9iamVjdCAqc28pCi17Ci0gICAgUHlPYmplY3QgKnZhbHVlOwotCi0gICAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2soc28sICZQeVNvcnRXcmFwcGVyX1R5cGUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZXhwZWN0ZWQgYSBzb3J0d3JhcHBlcm9iamVjdCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgdmFsdWUgPSAoKHNvcnR3cmFwcGVyb2JqZWN0ICopc28pLT52YWx1ZTsKLSAgICBQeV9JTkNSRUYodmFsdWUpOwotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXZlcnNlX3NsaWNlKHMtPmtleXMsICZzLT5rZXlzW25dKTsKKyAgICBpZiAocy0+dmFsdWVzICE9IE5VTEwpCisgICAgICAgIHJldmVyc2Vfc2xpY2Uocy0+dmFsdWVzLCAmcy0+dmFsdWVzW25dKTsKIH0KIAogLyogQW4gYWRhcHRpdmUsIHN0YWJsZSwgbmF0dXJhbCBtZXJnZXNvcnQuICBTZWUgbGlzdHNvcnQudHh0LgpAQCAtMTg3Myw5ICsxODgzLDkgQEAKIGxpc3Rzb3J0KFB5TGlzdE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIE1lcmdlU3RhdGUgbXM7Ci0gICAgUHlPYmplY3QgKipsbywgKipoaTsKICAgICBQeV9zc2l6ZV90IG5yZW1haW5pbmc7CiAgICAgUHlfc3NpemVfdCBtaW5ydW47CisgICAgc29ydHNsaWNlIGxvOwogICAgIFB5X3NzaXplX3Qgc2F2ZWRfb2Jfc2l6ZSwgc2F2ZWRfYWxsb2NhdGVkOwogICAgIFB5T2JqZWN0ICoqc2F2ZWRfb2JfaXRlbTsKICAgICBQeU9iamVjdCAqKmZpbmFsX29iX2l0ZW07CkBAIC0xODgzLDggKzE4OTMsOCBAQAogICAgIGludCByZXZlcnNlID0gMDsKICAgICBQeU9iamVjdCAqa2V5ZnVuYyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKmt2cGFpcjsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJyZXZlcnNlIiwgMH07CisgICAgUHlPYmplY3QgKiprZXlzOwogCiAgICAgYXNzZXJ0KHNlbGYgIT0gTlVMTCk7CiAgICAgYXNzZXJ0IChQeUxpc3RfQ2hlY2soc2VsZikpOwpAQCAtMTkxMyw1OSArMTkyMyw2OCBAQAogICAgIHNlbGYtPm9iX2l0ZW0gPSBOVUxMOwogICAgIHNlbGYtPmFsbG9jYXRlZCA9IC0xOyAvKiBhbnkgb3BlcmF0aW9uIHdpbGwgcmVzZXQgaXQgdG8gPj0gMCAqLwogCi0gICAgaWYgKGtleWZ1bmMgIT0gTlVMTCkgewotICAgICAgICBmb3IgKGk9MCA7IGkgPCBzYXZlZF9vYl9zaXplIDsgaSsrKSB7Ci0gICAgICAgICAgICB2YWx1ZSA9IHNhdmVkX29iX2l0ZW1baV07Ci0gICAgICAgICAgICBrZXkgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGtleWZ1bmMsIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZvciAoaT1pLTEgOyBpPj0wIDsgaS0tKSB7Ci0gICAgICAgICAgICAgICAgICAgIGt2cGFpciA9IHNhdmVkX29iX2l0ZW1baV07Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc29ydHdyYXBwZXJfZ2V0dmFsdWUoa3ZwYWlyKTsKLSAgICAgICAgICAgICAgICAgICAgc2F2ZWRfb2JfaXRlbVtpXSA9IHZhbHVlOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa3ZwYWlyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZ290byBkc3VfZmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGt2cGFpciA9IGJ1aWxkX3NvcnR3cmFwcGVyKGtleSwgdmFsdWUpOwotICAgICAgICAgICAgaWYgKGt2cGFpciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZHN1X2ZhaWw7Ci0gICAgICAgICAgICBzYXZlZF9vYl9pdGVtW2ldID0ga3ZwYWlyOworICAgIGlmIChrZXlmdW5jID09IE5VTEwpIHsKKyAgICAgICAga2V5cyA9IE5VTEw7CisgICAgICAgIGxvLmtleXMgPSBzYXZlZF9vYl9pdGVtOworICAgICAgICBsby52YWx1ZXMgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHNhdmVkX29iX3NpemUgPCBNRVJHRVNUQVRFX1RFTVBfU0laRS8yKQorICAgICAgICAgICAgLyogTGV2ZXJhZ2Ugc3RhY2sgc3BhY2Ugd2UgYWxsb2NhdGVkIGJ1dCB3b24ndCBvdGhlcndpc2UgdXNlICovCisgICAgICAgICAgICBrZXlzID0gJm1zLnRlbXBhcnJheVtzYXZlZF9vYl9zaXplKzFdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGtleXMgPSBQeU1lbV9NQUxMT0Moc2l6ZW9mKFB5T2JqZWN0ICopICogc2F2ZWRfb2Jfc2l6ZSk7CisgICAgICAgICAgICBpZiAoa2V5cyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNhdmVkX29iX3NpemUgOyBpKyspIHsKKyAgICAgICAgICAgIGtleXNbaV0gPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGtleWZ1bmMsIHNhdmVkX29iX2l0ZW1baV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIGlmIChrZXlzW2ldID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGk9aS0xIDsgaT49MCA7IGktLSkKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleXNbaV0pOworICAgICAgICAgICAgICAgIGdvdG8ga2V5ZnVuY19mYWlsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbG8ua2V5cyA9IGtleXM7CisgICAgICAgIGxvLnZhbHVlcyA9IHNhdmVkX29iX2l0ZW07CiAgICAgfQogCi0gICAgLyogUmV2ZXJzZSBzb3J0IHN0YWJpbGl0eSBhY2hpZXZlZCBieSBpbml0aWFsbHkgcmV2ZXJzaW5nIHRoZSBsaXN0LAotICAgIGFwcGx5aW5nIGEgc3RhYmxlIGZvcndhcmQgc29ydCwgdGhlbiByZXZlcnNpbmcgdGhlIGZpbmFsIHJlc3VsdC4gKi8KLSAgICBpZiAocmV2ZXJzZSAmJiBzYXZlZF9vYl9zaXplID4gMSkKLSAgICAgICAgcmV2ZXJzZV9zbGljZShzYXZlZF9vYl9pdGVtLCBzYXZlZF9vYl9pdGVtICsgc2F2ZWRfb2Jfc2l6ZSk7Ci0KLSAgICBtZXJnZV9pbml0KCZtcyk7CisgICAgbWVyZ2VfaW5pdCgmbXMsIHNhdmVkX29iX3NpemUsIGtleXMgIT0gTlVMTCk7CiAKICAgICBucmVtYWluaW5nID0gc2F2ZWRfb2Jfc2l6ZTsKICAgICBpZiAobnJlbWFpbmluZyA8IDIpCiAgICAgICAgIGdvdG8gc3VjY2VlZDsKIAorICAgIC8qIFJldmVyc2Ugc29ydCBzdGFiaWxpdHkgYWNoaWV2ZWQgYnkgaW5pdGlhbGx5IHJldmVyc2luZyB0aGUgbGlzdCwKKyAgICBhcHBseWluZyBhIHN0YWJsZSBmb3J3YXJkIHNvcnQsIHRoZW4gcmV2ZXJzaW5nIHRoZSBmaW5hbCByZXN1bHQuICovCisgICAgaWYgKHJldmVyc2UpIHsKKyAgICAgICAgaWYgKGtleXMgIT0gTlVMTCkKKyAgICAgICAgICAgIHJldmVyc2Vfc2xpY2UoJmtleXNbMF0sICZrZXlzW3NhdmVkX29iX3NpemVdKTsKKyAgICAgICAgcmV2ZXJzZV9zbGljZSgmc2F2ZWRfb2JfaXRlbVswXSwgJnNhdmVkX29iX2l0ZW1bc2F2ZWRfb2Jfc2l6ZV0pOworICAgIH0KKwogICAgIC8qIE1hcmNoIG92ZXIgdGhlIGFycmF5IG9uY2UsIGxlZnQgdG8gcmlnaHQsIGZpbmRpbmcgbmF0dXJhbCBydW5zLAogICAgICAqIGFuZCBleHRlbmRpbmcgc2hvcnQgbmF0dXJhbCBydW5zIHRvIG1pbnJ1biBlbGVtZW50cy4KICAgICAgKi8KLSAgICBsbyA9IHNhdmVkX29iX2l0ZW07Ci0gICAgaGkgPSBsbyArIG5yZW1haW5pbmc7CiAgICAgbWlucnVuID0gbWVyZ2VfY29tcHV0ZV9taW5ydW4obnJlbWFpbmluZyk7CiAgICAgZG8gewogICAgICAgICBpbnQgZGVzY2VuZGluZzsKICAgICAgICAgUHlfc3NpemVfdCBuOwogCiAgICAgICAgIC8qIElkZW50aWZ5IG5leHQgcnVuLiAqLwotICAgICAgICBuID0gY291bnRfcnVuKGxvLCBoaSwgJmRlc2NlbmRpbmcpOworICAgICAgICBuID0gY291bnRfcnVuKGxvLmtleXMsIGxvLmtleXMgKyBucmVtYWluaW5nLCAmZGVzY2VuZGluZyk7CiAgICAgICAgIGlmIChuIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgaWYgKGRlc2NlbmRpbmcpCi0gICAgICAgICAgICByZXZlcnNlX3NsaWNlKGxvLCBsbyArIG4pOworICAgICAgICAgICAgcmV2ZXJzZV9zb3J0c2xpY2UoJmxvLCBuKTsKICAgICAgICAgLyogSWYgc2hvcnQsIGV4dGVuZCB0byBtaW4obWlucnVuLCBucmVtYWluaW5nKS4gKi8KICAgICAgICAgaWYgKG4gPCBtaW5ydW4pIHsKICAgICAgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZm9yY2UgPSBucmVtYWluaW5nIDw9IG1pbnJ1biA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucmVtYWluaW5nIDogbWlucnVuOwotICAgICAgICAgICAgaWYgKGJpbmFyeXNvcnQobG8sIGxvICsgZm9yY2UsIGxvICsgbikgPCAwKQorICAgICAgICAgICAgaWYgKGJpbmFyeXNvcnQobG8sIGxvLmtleXMgKyBmb3JjZSwgbG8ua2V5cyArIG4pIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgICAgICBuID0gZm9yY2U7CiAgICAgICAgIH0KQEAgLTE5NzcsMjcgKzE5OTYsMjcgQEAKICAgICAgICAgaWYgKG1lcmdlX2NvbGxhcHNlKCZtcykgPCAwKQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICAvKiBBZHZhbmNlIHRvIGZpbmQgbmV4dCBydW4uICovCi0gICAgICAgIGxvICs9IG47CisgICAgICAgIHNvcnRzbGljZV9hZHZhbmNlKCZsbywgbik7CiAgICAgICAgIG5yZW1haW5pbmcgLT0gbjsKICAgICB9IHdoaWxlIChucmVtYWluaW5nKTsKLSAgICBhc3NlcnQobG8gPT0gaGkpOwogCiAgICAgaWYgKG1lcmdlX2ZvcmNlX2NvbGxhcHNlKCZtcykgPCAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgYXNzZXJ0KG1zLm4gPT0gMSk7Ci0gICAgYXNzZXJ0KG1zLnBlbmRpbmdbMF0uYmFzZSA9PSBzYXZlZF9vYl9pdGVtKTsKKyAgICBhc3NlcnQoa2V5cyA9PSBOVUxMCisgICAgICAgICAgID8gbXMucGVuZGluZ1swXS5iYXNlLmtleXMgPT0gc2F2ZWRfb2JfaXRlbQorICAgICAgICAgICA6IG1zLnBlbmRpbmdbMF0uYmFzZS5rZXlzID09ICZrZXlzWzBdKTsKICAgICBhc3NlcnQobXMucGVuZGluZ1swXS5sZW4gPT0gc2F2ZWRfb2Jfc2l6ZSk7CisgICAgbG8gPSBtcy5wZW5kaW5nWzBdLmJhc2U7CiAKIHN1Y2NlZWQ6CiAgICAgcmVzdWx0ID0gUHlfTm9uZTsKIGZhaWw6Ci0gICAgaWYgKGtleWZ1bmMgIT0gTlVMTCkgewotICAgICAgICBmb3IgKGk9MCA7IGkgPCBzYXZlZF9vYl9zaXplIDsgaSsrKSB7Ci0gICAgICAgICAgICBrdnBhaXIgPSBzYXZlZF9vYl9pdGVtW2ldOwotICAgICAgICAgICAgdmFsdWUgPSBzb3J0d3JhcHBlcl9nZXR2YWx1ZShrdnBhaXIpOwotICAgICAgICAgICAgc2F2ZWRfb2JfaXRlbVtpXSA9IHZhbHVlOwotICAgICAgICAgICAgUHlfREVDUkVGKGt2cGFpcik7Ci0gICAgICAgIH0KKyAgICBpZiAoa2V5cyAhPSBOVUxMKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzYXZlZF9vYl9zaXplOyBpKyspCisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5c1tpXSk7CisgICAgICAgIGlmIChrZXlzICE9ICZtcy50ZW1wYXJyYXlbc2F2ZWRfb2Jfc2l6ZSsxXSkKKyAgICAgICAgICAgIFB5TWVtX0ZSRUUoa2V5cyk7CiAgICAgfQogCiAgICAgaWYgKHNlbGYtPmFsbG9jYXRlZCAhPSAtMSAmJiByZXN1bHQgIT0gTlVMTCkgewpAQCAtMjAxMyw3ICsyMDMyLDcgQEAKIAogICAgIG1lcmdlX2ZyZWVtZW0oJm1zKTsKIAotZHN1X2ZhaWw6CitrZXlmdW5jX2ZhaWw6CiAgICAgZmluYWxfb2JfaXRlbSA9IHNlbGYtPm9iX2l0ZW07CiAgICAgaSA9IFB5X1NJWkUoc2VsZik7CiAgICAgUHlfU0laRShzZWxmKSA9IHNhdmVkX29iX3NpemU7CkBAIC0yMDk4LDcgKzIxMTcsOCBAQAogbGlzdGluZGV4KFB5TGlzdE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBzdGFydD0wLCBzdG9wPVB5X1NJWkUoc2VsZik7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnYsICpmb3JtYXRfdHVwbGUsICplcnJfc3RyaW5nOworICAgIHN0YXRpYyBQeU9iamVjdCAqZXJyX2Zvcm1hdCA9IE5VTEw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TyZPJjppbmRleCIsICZ2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlFdmFsX1NsaWNlSW5kZXgsICZzdGFydCwKQEAgLTIxMjEsNyArMjE0MSwyMCBAQAogICAgICAgICBlbHNlIGlmIChjbXAgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAibGlzdC5pbmRleCh4KTogeCBub3QgaW4gbGlzdCIpOworICAgIGlmIChlcnJfZm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgZXJyX2Zvcm1hdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIlciBpcyBub3QgaW4gbGlzdCIpOworICAgICAgICBpZiAoZXJyX2Zvcm1hdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGZvcm1hdF90dXBsZSA9IFB5VHVwbGVfUGFjaygxLCB2KTsKKyAgICBpZiAoZm9ybWF0X3R1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGVycl9zdHJpbmcgPSBQeVVuaWNvZGVfRm9ybWF0KGVycl9mb3JtYXQsIGZvcm1hdF90dXBsZSk7CisgICAgUHlfREVDUkVGKGZvcm1hdF90dXBsZSk7CisgICAgaWYgKGVycl9zdHJpbmcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1ZhbHVlRXJyb3IsIGVycl9zdHJpbmcpOworICAgIFB5X0RFQ1JFRihlcnJfc3RyaW5nKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjM2NCw3ICsyMzk3LDcgQEAKICAgICAgICAgUHlPYmplY3QqIGl0OwogICAgICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwogCi0gICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCopaXRlbSwgUHlfU0laRShzZWxmKSwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sIFB5X1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMjQxMyw3ICsyNDQ2LDcgQEAKICAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoOwogCi0gICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCopaXRlbSwgUHlfU0laRShzZWxmKSwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGl0ZW0sIFB5X1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTI1ODIsNyArMjYxNSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KICAgICAmbGlzdF9hc19zZXF1ZW5jZSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgJmxpc3RfYXNfbWFwcGluZywgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgKGhhc2hmdW5jKVB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAvKiB0cF9oYXNoICovCisgICAgUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkLCAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCkBAIC0yODQ4LDQgKzI4ODEsMyBAQAogICAgICAgICBsZW4gPSAwOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKIH0KLQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0IGIvT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNDdlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL2xub3RhYl9ub3Rlcy50eHQKQEAgLTAsMCArMSwxMjQgQEAKK0FsbCBhYm91dCBjb19sbm90YWIsIHRoZSBsaW5lIG51bWJlciB0YWJsZS4KKworQ29kZSBvYmplY3RzIHN0b3JlIGEgZmllbGQgbmFtZWQgY29fbG5vdGFiLiAgVGhpcyBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBieXRlcworZGlzZ3Vpc2VkIGFzIGEgUHl0aG9uIHN0cmluZy4gIEl0IGlzIHVzZWQgdG8gbWFwIGJ5dGVjb2RlIG9mZnNldHMgdG8gc291cmNlIGNvZGUKK2xpbmUgI3MgZm9yIHRyYWNlYmFja3MgYW5kIHRvIGlkZW50aWZ5IGxpbmUgbnVtYmVyIGJvdW5kYXJpZXMgZm9yIGxpbmUgdHJhY2luZy4KKworVGhlIGFycmF5IGlzIGNvbmNlcHR1YWxseSBhIGNvbXByZXNzZWQgbGlzdCBvZgorICAgIChieXRlY29kZSBvZmZzZXQgaW5jcmVtZW50LCBsaW5lIG51bWJlciBpbmNyZW1lbnQpCitwYWlycy4gIFRoZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgYW5kIGRlbGljYXRlLCBiZXN0IGlsbHVzdHJhdGVkIGJ5IGV4YW1wbGU6CisKKyAgICBieXRlIGNvZGUgb2Zmc2V0ICAgIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIDAJCSAgICAxCisgICAgICAgIDYJCSAgICAyCisgICAgICAgNTAJCSAgICA3CisgICAgICAzNTAgICAgICAgICAgICAgICAgIDMwNworICAgICAgMzYxICAgICAgICAgICAgICAgICAzMDgKKworSW5zdGVhZCBvZiBzdG9yaW5nIHRoZXNlIG51bWJlcnMgbGl0ZXJhbGx5LCB3ZSBjb21wcmVzcyB0aGUgbGlzdCBieSBzdG9yaW5nIG9ubHkKK3RoZSBpbmNyZW1lbnRzIGZyb20gb25lIHJvdyB0byB0aGUgbmV4dC4gIENvbmNlcHR1YWxseSwgdGhlIHN0b3JlZCBsaXN0IG1pZ2h0Citsb29rIGxpa2U6CisKKyAgICAwLCAxLCAgNiwgMSwgIDQ0LCA1LCAgMzAwLCAzMDAsICAxMSwgMQorCitUaGUgYWJvdmUgZG9lc24ndCByZWFsbHkgd29yaywgYnV0IGl0J3MgYSBzdGFydC4gTm90ZSB0aGF0IGFuIHVuc2lnbmVkIGJ5dGUKK2Nhbid0IGhvbGQgbmVnYXRpdmUgdmFsdWVzLCBvciB2YWx1ZXMgbGFyZ2VyIHRoYW4gMjU1LCBhbmQgdGhlIGFib3ZlIGV4YW1wbGUKK2NvbnRhaW5zIHR3byBzdWNoIHZhbHVlcy4gU28gd2UgbWFrZSB0d28gdHdlYWtzOgorCisgKGEpIHRoZXJlJ3MgYSBkZWVwIGFzc3VtcHRpb24gdGhhdCBieXRlIGNvZGUgb2Zmc2V0cyBhbmQgdGhlaXIgY29ycmVzcG9uZGluZworIGxpbmUgI3MgYm90aCBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LCBhbmQKKyAoYikgaWYgYXQgbGVhc3Qgb25lIGNvbHVtbiBqdW1wcyBieSBtb3JlIHRoYW4gMjU1IGZyb20gb25lIHJvdyB0byB0aGUgbmV4dCwKKyBtb3JlIHRoYW4gb25lIHBhaXIgaXMgd3JpdHRlbiB0byB0aGUgdGFibGUuIEluIGNhc2UgI2IsIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cKKyBmcm9tIGxvb2tpbmcgYXQgdGhlIHRhYmxlIGxhdGVyIGhvdyBtYW55IHdlcmUgd3JpdHRlbi4gIFRoYXQncyB0aGUgZGVsaWNhdGUKKyBwYXJ0LiAgQSB1c2VyIG9mIGNvX2xub3RhYiBkZXNpcmluZyB0byBmaW5kIHRoZSBzb3VyY2UgbGluZSBudW1iZXIKKyBjb3JyZXNwb25kaW5nIHRvIGEgYnl0ZWNvZGUgYWRkcmVzcyBBIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzCisKKyAgICBsaW5lbm8gPSBhZGRyID0gMAorICAgIGZvciBhZGRyX2luY3IsIGxpbmVfaW5jciBpbiBjb19sbm90YWI6CisgICAgICAgIGFkZHIgKz0gYWRkcl9pbmNyCisgICAgICAgIGlmIGFkZHIgPiBBOgorICAgICAgICAgICAgcmV0dXJuIGxpbmVubworICAgICAgICBsaW5lbm8gKz0gbGluZV9pbmNyCisKKyhJbiBDLCB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IFB5Q29kZV9BZGRyMkxpbmUoKS4pICBJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLAord2hlbiB0aGUgYWRkciBmaWVsZCBpbmNyZW1lbnRzIGJ5IG1vcmUgdGhhbiAyNTUsIHRoZSBsaW5lICMgaW5jcmVtZW50IGluIGVhY2gKK3BhaXIgZ2VuZXJhdGVkIG11c3QgYmUgMCB1bnRpbCB0aGUgcmVtYWluaW5nIGFkZHIgaW5jcmVtZW50IGlzIDwgMjU2LiAgU28sIGluCit0aGUgZXhhbXBsZSBhYm92ZSwgYXNzZW1ibGVfbG5vdGFiIGluIGNvbXBpbGUuYyBzaG91bGQgbm90IChhcyB3YXMgYWN0dWFsbHkgZG9uZQordW50aWwgMi4yKSBleHBhbmQgMzAwLCAzMDAgdG8KKyAgICAyNTUsIDI1NSwgNDUsIDQ1LAorYnV0IHRvCisgICAgMjU1LCAwLCA0NSwgMjU1LCAwLCA0NS4KKworVGhlIGFib3ZlIGlzIHN1ZmZpY2llbnQgdG8gcmVjb25zdHJ1Y3QgbGluZSBudW1iZXJzIGZvciB0cmFjZWJhY2tzLCBidXQgbm90IGZvcgorbGluZSB0cmFjaW5nLiAgVHJhY2luZyBpcyBoYW5kbGVkIGJ5IFB5Q29kZV9DaGVja0xpbmVOdW1iZXIoKSBpbiBjb2Rlb2JqZWN0LmMKK2FuZCBtYXliZV9jYWxsX2xpbmVfdHJhY2UoKSBpbiBjZXZhbC5jLgorCisqKiogVHJhY2luZyAqKioKKworVG8gYSBmaXJzdCBhcHByb3hpbWF0aW9uLCB3ZSB3YW50IHRvIGNhbGwgdGhlIHRyYWNpbmcgZnVuY3Rpb24gd2hlbiB0aGUgbGluZQorbnVtYmVyIG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGNoYW5nZXMuICBSZS1jb21wdXRpbmcgdGhlIGN1cnJlbnQgbGluZSBmb3IKK2V2ZXJ5IGluc3RydWN0aW9uIGlzIGEgbGl0dGxlIHNsb3csIHRob3VnaCwgc28gZWFjaCB0aW1lIHdlIGNvbXB1dGUgdGhlIGxpbmUKK251bWJlciB3ZSBzYXZlIHRoZSBieXRlY29kZSBpbmRpY2VzIHdoZXJlIGl0J3MgdmFsaWQ6CisKKyAgICAgKmluc3RyX2xiIDw9IGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX3ViCisKK2lzIHRydWUgc28gbG9uZyBhcyBleGVjdXRpb24gZG9lcyBub3QgY2hhbmdlIGxpbmVzLiAgVGhhdCBpcywgKmluc3RyX2xiIGhvbGRzCit0aGUgZmlyc3QgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgbGluZSwgYW5kICppbnN0cl91YiBob2xkcyB0aGUgZmlyc3QKK2J5dGVjb2RlIGluZGV4IG9mIHRoZSBuZXh0IGxpbmUuICBBcyBsb25nIGFzIHRoZSBhYm92ZSBleHByZXNzaW9uIGlzIHRydWUsCittYXliZV9jYWxsX2xpbmVfdHJhY2UoKSBkb2VzIG5vdCBuZWVkIHRvIGNhbGwgUHlDb2RlX0NoZWNrTGluZU51bWJlcigpLiAgTm90ZQordGhhdCB0aGUgc2FtZSBsaW5lIG1heSBhcHBlYXIgbXVsdGlwbGUgdGltZXMgaW4gdGhlIGxub3RhYiwgZWl0aGVyIGJlY2F1c2UgdGhlCitieXRlY29kZSBqdW1wZWQgbW9yZSB0aGFuIDI1NSBpbmRpY2VzIGJldHdlZW4gbGluZSBudW1iZXIgY2hhbmdlcyBvciBiZWNhdXNlCit0aGUgY29tcGlsZXIgaW5zZXJ0ZWQgdGhlIHNhbWUgbGluZSB0d2ljZS4gIEV2ZW4gaW4gdGhhdCBjYXNlLCAqaW5zdHJfdWIgaG9sZHMKK3RoZSBmaXJzdCBpbmRleCBvZiB0aGUgbmV4dCBsaW5lLgorCitIb3dldmVyLCB3ZSBkb24ndCAqYWx3YXlzKiB3YW50IHRvIGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24gd2hlbiB0aGUgYWJvdmUKK3Rlc3QgZmFpbHMuCisKK0NvbnNpZGVyIHRoaXMgY29kZToKKworMTogZGVmIGYoYSk6CisyOiAgICB3aGlsZSBhOgorMzogICAgICAgcHJpbnQgMSwKKzQ6ICAgICAgIGJyZWFrCis1OiAgICBlbHNlOgorNjogICAgICAgcHJpbnQgMiwKKword2hpY2ggY29tcGlsZXMgdG8gdGhpczoKKworICAyICAgICAgICAgICAwIFNFVFVQX0xPT1AgICAgICAgICAgICAgIDE5ICh0byAyMikKKyAgICAgICAgPj4gICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoYSkKKyAgICAgICAgICAgICAgNiBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICAxNworCisgIDMgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgICAgMTIgUFJJTlRfSVRFTSAgICAgICAgICAKKworICA0ICAgICAgICAgIDEzIEJSRUFLX0xPT1AgICAgICAgICAgCisgICAgICAgICAgICAgMTQgSlVNUF9BQlNPTFVURSAgICAgICAgICAgIDMKKyAgICAgICAgPj4gICAxNyBQT1BfQkxPQ0sgICAgICAgICAgIAorCisgIDYgICAgICAgICAgMTggTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDIpCisgICAgICAgICAgICAgMjEgUFJJTlRfSVRFTSAgICAgICAgICAKKyAgICAgICAgPj4gICAyMiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICAyNSBSRVRVUk5fVkFMVUUgICAgICAgIAorCitJZiAnYScgaXMgZmFsc2UsIGV4ZWN1dGlvbiB3aWxsIGp1bXAgdG8gdGhlIFBPUF9CTE9DSyBpbnN0cnVjdGlvbiBhdCBvZmZzZXQgMTcKK2FuZCB0aGUgY29fbG5vdGFiIHdpbGwgY2xhaW0gdGhhdCBleGVjdXRpb24gaGFzIG1vdmVkIHRvIGxpbmUgNCwgd2hpY2ggaXMgd3JvbmcuCitJbiB0aGlzIGNhc2UsIHdlIGNvdWxkIGluc3RlYWQgYXNzb2NpYXRlIHRoZSBQT1BfQkxPQ0sgd2l0aCBsaW5lIDUsIGJ1dCB0aGF0Cit3b3VsZCBicmVhayBqdW1wcyBhcm91bmQgbG9vcHMgd2l0aG91dCBlbHNlIGNsYXVzZXMuCisKK1dlIGZpeCB0aGlzIGJ5IG9ubHkgY2FsbGluZyB0aGUgbGluZSB0cmFjZSBmdW5jdGlvbiBmb3IgYSBmb3J3YXJkIGp1bXAgaWYgdGhlCitjb19sbm90YWIgaW5kaWNhdGVzIHdlIGhhdmUganVtcGVkIHRvIHRoZSAqc3RhcnQqIG9mIGEgbGluZSwgaS5lLiBpZiB0aGUgY3VycmVudAoraW5zdHJ1Y3Rpb24gb2Zmc2V0IG1hdGNoZXMgdGhlIG9mZnNldCBnaXZlbiBmb3IgdGhlIHN0YXJ0IG9mIGEgbGluZSBieSB0aGUKK2NvX2xub3RhYi4gIEZvciBiYWNrd2FyZCBqdW1wcywgaG93ZXZlciwgd2UgYWx3YXlzIGNhbGwgdGhlIGxpbmUgdHJhY2UgZnVuY3Rpb24sCit3aGljaCBsZXRzIGEgZGVidWdnZXIgc3RvcCBvbiBldmVyeSBldmFsdWF0aW9uIG9mIGEgbG9vcCBndWFyZCAod2hpY2ggdXN1YWxseQord29uJ3QgYmUgdGhlIGZpcnN0IG9wY29kZSBpbiBhIGxpbmUpLgorCitXaHkgZG8gd2Ugc2V0IGZfbGluZW5vIHdoZW4gdHJhY2luZywgYW5kIG9ubHkganVzdCBiZWZvcmUgY2FsbGluZyB0aGUgdHJhY2UKK2Z1bmN0aW9uPyAgV2VsbCwgY29uc2lkZXIgdGhlIGNvZGUgYWJvdmUgd2hlbiAnYScgaXMgdHJ1ZS4gIElmIHN0ZXBwaW5nIHRocm91Z2gKK3RoaXMgd2l0aCAnbicgaW4gcGRiLCB5b3Ugd291bGQgc3RvcCBhdCBsaW5lIDEgd2l0aCBhICJjYWxsIiB0eXBlIGV2ZW50LCB0aGVuCitsaW5lIGV2ZW50cyBvbiBsaW5lcyAyLCAzLCBhbmQgNCwgdGhlbiBhICJyZXR1cm4iIHR5cGUgZXZlbnQgLS0gYnV0IGJlY2F1c2UgdGhlCitjb2RlIGZvciB0aGUgcmV0dXJuIGFjdHVhbGx5IGZhbGxzIGluIHRoZSByYW5nZSBvZiB0aGUgImxpbmUgNiIgb3Bjb2RlcywgeW91Cit3b3VsZCBiZSBzaG93biBsaW5lIDYgZHVyaW5nIHRoaXMgZXZlbnQuICBUaGlzIGlzIGEgY2hhbmdlIGZyb20gdGhlIGJlaGF2aW91ciBpbgorMi4yIGFuZCBiZWZvcmUsIGFuZCBJJ3ZlIGZvdW5kIGl0IGNvbmZ1c2luZyBpbiBwcmFjdGljZS4gIEJ5IHNldHRpbmcgYW5kIHVzaW5nCitmX2xpbmVubyB3aGVuIHRyYWNpbmcsIG9uZSBjYW4gcmVwb3J0IGEgbGluZSBudW1iZXIgZGlmZmVyZW50IGZyb20gdGhhdAorc3VnZ2VzdGVkIGJ5IGZfbGFzdGkgb24gdGhpcyBvbmUgb2NjYXNpb24gd2hlcmUgaXQncyBkZXNpcmFibGUuCmRpZmYgLS1naXQgYS9PYmplY3RzL2xvbmdvYmplY3QuYyBiL09iamVjdHMvbG9uZ29iamVjdC5jCmluZGV4IDZmOTk4Y2UuLjU1MmY4ZjAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbG9uZ29iamVjdC5jCisrKyBiL09iamVjdHMvbG9uZ29iamVjdC5jCkBAIC00LDcgKzQsNiBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAibG9uZ2ludHJlcHIuaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAogI2luY2x1ZGUgPGZsb2F0Lmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KQEAgLTk1LDE0ICs5NCwxMCBAQAogI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKICNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPiAoeSkgPyAoeSkgOiAoeCkpCiAKLSNkZWZpbmUgU0lHQ0hFQ0soUHlUcnlCbG9jaykgXAotICAgIGlmICgtLV9QeV9UaWNrZXIgPCAwKSB7IFwKLSAgICAgICAgX1B5X1RpY2tlciA9IF9QeV9DaGVja0ludGVydmFsOyBcCi0gICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayBcCi0gICAgfQotCi0vKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCi1zdGF0aWMgaW50IGJpdHNfaW5fZGlnaXQoZGlnaXQgZCk7CisjZGVmaW5lIFNJR0NIRUNLKFB5VHJ5QmxvY2spICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChQeUVycl9DaGVja1NpZ25hbHMoKSkgUHlUcnlCbG9jayAgICBcCisgICAgfSB3aGlsZSgwKQogCiAvKiBOb3JtYWxpemUgKHJlbW92ZSBsZWFkaW5nIHplcm9zIGZyb20pIGEgbG9uZyBpbnQgb2JqZWN0LgogICAgRG9lc24ndCBhdHRlbXB0IHRvIGZyZWUgdGhlIHN0b3JhZ2UtLWluIG1vc3QgY2FzZXMsIGR1ZSB0byB0aGUgbmF0dXJlCkBAIC0yODQsMTIgKzI3OSwxMiBAQAogICAgIG5lZyA9IDA7CiAgICAgaWYgKFB5X0lTX0lORklOSVRZKGR2YWwpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGZsb2F0IGluZmluaXR5IHRvIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY29udmVydCBmbG9hdCBpbmZpbml0eSB0byBpbnRlZ2VyIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoUHlfSVNfTkFOKGR2YWwpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgImNhbm5vdCBjb252ZXJ0IGZsb2F0IE5hTiB0byBpbnRlZ2VyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGNvbnZlcnQgZmxvYXQgTmFOIHRvIGludGVnZXIiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChkdmFsIDwgMC4wKSB7CkBAIC0zNDksOSArMzQ0LDEwIEBACiAKICAgICBpZiAoIVB5TG9uZ19DaGVjayh2dikpIHsKICAgICAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKLSAgICAgICAgaWYgKChuYiA9IHZ2LT5vYl90eXBlLT50cF9hc19udW1iZXIpID09IE5VTEwgfHwKLSAgICAgICAgICAgIG5iLT5uYl9pbnQgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgbmIgPSB2di0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOworICAgICAgICBpZiAobmIgPT0gTlVMTCB8fCBuYi0+bmJfaW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICB2diA9ICgqbmItPm5iX2ludCkgKHZ2KTsKQEAgLTM4OSwxNCArMzg1LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgICAgICBwcmV2ID0geDsKLSAgICAgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikgewotICAgICAgICAgICAgICAgICpvdmVyZmxvdyA9IFB5X1NJWkUodikgPiAwID8gMSA6IC0xOworICAgICAgICAgICAgICAgICpvdmVyZmxvdyA9IHNpZ247CiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIC8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gbG9uZyByZXF1aXJlcyBleHRyYSBjYXJlCi0gICAgICAgICAqIChzZWUgY29tbWVudCBhYm92ZSkuCisgICAgICAgIC8qIEhhdmVuJ3QgbG9zdCBhbnkgYml0cywgYnV0IGNhc3RpbmcgdG8gbG9uZyByZXF1aXJlcyBleHRyYQorICAgICAgICAgKiBjYXJlIChzZWUgY29tbWVudCBhYm92ZSkuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoeCA8PSAodW5zaWduZWQgbG9uZylMT05HX01BWCkgewogICAgICAgICAgICAgcmVzID0gKGxvbmcpeCAqIHNpZ247CkBAIC00MDUsMTEgKzQwMSwxMSBAQAogICAgICAgICAgICAgcmVzID0gTE9OR19NSU47CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAqb3ZlcmZsb3cgPSBQeV9TSVpFKHYpID4gMCA/IDEgOiAtMTsKKyAgICAgICAgICAgICpvdmVyZmxvdyA9IHNpZ247CiAgICAgICAgICAgICAvKiByZXMgaXMgYWxyZWFkeSBzZXQgdG8gLTEgKi8KICAgICAgICAgfQogICAgIH0KLSBleGl0OgorICBleGl0OgogICAgIGlmIChkb19kZWNyZWYpIHsKICAgICAgICAgUHlfREVDUkVGKHZ2KTsKICAgICB9CkBAIC00NjQsNyArNDYwLDcgQEAKICAgICB9CiAgICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgICAgIHByZXYgPSB4OwotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KQogICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKICAgICB9CkBAIC00NzksNyArNDc1LDcgQEAKICAgICB9CiAgICAgLyogZWxzZSBvdmVyZmxvdyAqLwogCi0gb3ZlcmZsb3c6CisgIG92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBDIHNzaXplX3QiKTsKICAgICByZXR1cm4gLTE7CkBAIC01MDksNyArNTA1LDcgQEAKICAgICB4ID0gMDsKICAgICBpZiAoaSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgImNhbid0IGNvbnZlcnQgbmVnYXRpdmUgdmFsdWUgdG8gdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgY29udmVydCBuZWdhdGl2ZSB2YWx1ZSB0byB1bnNpZ25lZCBpbnQiKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtMTsKICAgICB9CiAgICAgc3dpdGNoIChpKSB7CkBAIC01MTgsMTAgKzUxNCwxMSBAQAogICAgIH0KICAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgICAgcHJldiA9IHg7Ci0gICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpIHwgdi0+b2JfZGlnaXRbaV07CiAgICAgICAgIGlmICgoeCA+PiBQeUxvbmdfU0hJRlQpICE9IHByZXYpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICJweXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIEMgdW5zaWduZWQgbG9uZyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweXRob24gaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG8gQyB1bnNpZ25lZCBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtNTYxLDcgKzU1OCw3IEBACiAgICAgfQogICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICAgICBwcmV2ID0geDsKLSAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgKyB2LT5vYl9kaWdpdFtpXTsKKyAgICAgICAgeCA9ICh4IDw8IFB5TG9uZ19TSElGVCkgfCB2LT5vYl9kaWdpdFtpXTsKICAgICAgICAgaWYgKCh4ID4+IFB5TG9uZ19TSElGVCkgIT0gcHJldikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gQyBzaXplX3QiKTsKQEAgLTU5OSw3ICs1OTYsNyBAQAogICAgICAgICBpID0gLWk7CiAgICAgfQogICAgIHdoaWxlICgtLWkgPj0gMCkgewotICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSArIHYtPm9iX2RpZ2l0W2ldOworICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgIH0KICAgICByZXR1cm4geCAqIHNpZ247CiB9CkBAIC02NzYsNyArNjczLDcgQEAKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIAotT3ZlcmZsb3c6CisgIE92ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW50IGhhcyB0b28gbWFueSBiaXRzICIKICAgICAgICAgICAgICAgICAgICAgInRvIGV4cHJlc3MgaW4gYSBwbGF0Zm9ybSBzaXplX3QiKTsKICAgICByZXR1cm4gKHNpemVfdCktMTsKQEAgLTY4Niw3ICs2ODMsNyBAQAogX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCBzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGl0dGxlX2VuZGlhbiwgaW50IGlzX3NpZ25lZCkKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwc3RhcnRieXRlOy8qIExTQiBvZiBieXRlcyAqLworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHBzdGFydGJ5dGU7ICAgIC8qIExTQiBvZiBieXRlcyAqLwogICAgIGludCBpbmNyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpcmVjdGlvbiB0byBtb3ZlIHBzdGFydGJ5dGUgKi8KICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBwZW5kYnl0ZTsgICAgICAvKiBNU0Igb2YgYnl0ZXMgKi8KICAgICBzaXplX3QgbnVtc2lnbmlmaWNhbnRieXRlczsgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBtYXR0ZXIgKi8KQEAgLTc3NCw4ICs3NzEsNyBAQAogICAgICAgICAgICAgaWYgKGFjY3VtYml0cyA+PSBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSdzIGVub3VnaCB0byBmaWxsIGEgUHl0aG9uIGRpZ2l0LiAqLwogICAgICAgICAgICAgICAgIGFzc2VydChpZGlnaXQgPCBuZGlnaXRzKTsKLSAgICAgICAgICAgICAgICB2LT5vYl9kaWdpdFtpZGlnaXRdID0gKGRpZ2l0KShhY2N1bSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX01BU0spOworICAgICAgICAgICAgICAgIHYtPm9iX2RpZ2l0W2lkaWdpdF0gPSAoZGlnaXQpKGFjY3VtICYgUHlMb25nX01BU0spOwogICAgICAgICAgICAgICAgICsraWRpZ2l0OwogICAgICAgICAgICAgICAgIGFjY3VtID4+PSBQeUxvbmdfU0hJRlQ7CiAgICAgICAgICAgICAgICAgYWNjdW1iaXRzIC09IFB5TG9uZ19TSElGVDsKQEAgLTgwMCw5ICs3OTYsOSBAQAogICAgICAgICAgICAgICAgICAgICBpbnQgbGl0dGxlX2VuZGlhbiwgaW50IGlzX3NpZ25lZCkKIHsKICAgICBQeV9zc2l6ZV90IGk7ICAgICAgICAgICAgICAgLyogaW5kZXggaW50byB2LT5vYl9kaWdpdCAqLwotICAgIFB5X3NzaXplX3QgbmRpZ2l0czsgICAgICAgICAgICAgICAgIC8qIHx2LT5vYl9zaXplfCAqLworICAgIFB5X3NzaXplX3QgbmRpZ2l0czsgICAgICAgICAvKiB8di0+b2Jfc2l6ZXwgKi8KICAgICB0d29kaWdpdHMgYWNjdW07ICAgICAgICAgICAgLyogc2xpZGluZyByZWdpc3RlciAqLwotICAgIHVuc2lnbmVkIGludCBhY2N1bWJpdHM7IC8qICMgYml0cyBpbiBhY2N1bSAqLworICAgIHVuc2lnbmVkIGludCBhY2N1bWJpdHM7ICAgICAvKiAjIGJpdHMgaW4gYWNjdW0gKi8KICAgICBpbnQgZG9fdHdvc19jb21wOyAgICAgICAgICAgLyogc3RvcmUgMidzLWNvbXA/ICBpc19zaWduZWQgYW5kIHYgPCAwICovCiAgICAgZGlnaXQgY2Fycnk7ICAgICAgICAgICAgICAgIC8qIGZvciBjb21wdXRpbmcgMidzLWNvbXAgKi8KICAgICBzaXplX3QgajsgICAgICAgICAgICAgICAgICAgLyogIyBieXRlcyBmaWxsZWQgKi8KQEAgLTgxNSw3ICs4MTEsNyBAQAogICAgICAgICBuZGlnaXRzID0gLShQeV9TSVpFKHYpKTsKICAgICAgICAgaWYgKCFpc19zaWduZWQpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIGludCB0byB1bnNpZ25lZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBjb252ZXJ0IG5lZ2F0aXZlIGludCB0byB1bnNpZ25lZCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGRvX3R3b3NfY29tcCA9IDE7CkBAIC04NjEsOCArODU3LDcgQEAKICAgICAgICAgICAgIC8qIENvdW50ICMgb2Ygc2lnbiBiaXRzIC0tIHRoZXkgbmVlZG4ndCBiZSBzdG9yZWQsCiAgICAgICAgICAgICAgKiBhbHRob3VnaCBmb3Igc2lnbmVkIGNvbnZlcnNpb24gd2UgbmVlZCBsYXRlciB0bwogICAgICAgICAgICAgICogbWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBzaWduIGJpdCBnZXRzIHN0b3JlZC4gKi8KLSAgICAgICAgICAgIGRpZ2l0IHMgPSBkb190d29zX2NvbXAgPyB0aGlzZGlnaXQgXiBQeUxvbmdfTUFTSyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzZGlnaXQ7CisgICAgICAgICAgICBkaWdpdCBzID0gZG9fdHdvc19jb21wID8gdGhpc2RpZ2l0IF4gUHlMb25nX01BU0sgOiB0aGlzZGlnaXQ7CiAgICAgICAgICAgICB3aGlsZSAocyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgcyA+Pj0gMTsKICAgICAgICAgICAgICAgICBhY2N1bWJpdHMrKzsKQEAgLTkyMiwyMzAgKzkxNywxMiBAQAogCiAgICAgcmV0dXJuIDA7CiAKLU92ZXJmbG93OgorICBPdmVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgImludCB0b28gYmlnIHRvIGNvbnZlcnQiKTsKICAgICByZXR1cm4gLTE7CiAKIH0KIAotZG91YmxlCi1fUHlMb25nX0FzU2NhbGVkRG91YmxlKFB5T2JqZWN0ICp2diwgaW50ICpleHBvbmVudCkKLXsKLS8qIE5CSVRTX1dBTlRFRCBzaG91bGQgYmUgPiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBkb3VibGUncyBwcmVjaXNpb24sCi0gICBidXQgc21hbGwgZW5vdWdoIHNvIHRoYXQgMioqTkJJVFNfV0FOVEVEIGlzIHdpdGhpbiB0aGUgbm9ybWFsIGRvdWJsZQotICAgcmFuZ2UuICBuYml0c25lZWRlZCBpcyBzZXQgdG8gMSBsZXNzIHRoYW4gdGhhdCBiZWNhdXNlIHRoZSBtb3N0LXNpZ25pZmljYW50Ci0gICBQeXRob24gZGlnaXQgY29udGFpbnMgYXQgbGVhc3QgMSBzaWduaWZpY2FudCBiaXQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvCi0gICBib3RoZXIgY291bnRpbmcgdGhlbSAoY2F0ZXJpbmcgdG8gdGhlIHdvcnN0IGNhc2UgY2hlYXBseSkuCi0KLSAgIDU3IGlzIG9uZSBtb3JlIHRoYW4gVkFYLUQgZG91YmxlIHByZWNpc2lvbjsgSSAoVGltKSBkb24ndCBrbm93IG9mIGEgZG91YmxlCi0gICBmb3JtYXQgd2l0aCBtb3JlIHByZWNpc2lvbiB0aGFuIHRoYXQ7IGl0J3MgMSBsYXJnZXIgc28gdGhhdCB3ZSBhZGQgaW4gYXQKLSAgIGxlYXN0IG9uZSByb3VuZCBiaXQgdG8gc3RhbmQgaW4gZm9yIHRoZSBpZ25vcmVkIGxlYXN0LXNpZ25pZmljYW50IGJpdHMuCi0qLwotI2RlZmluZSBOQklUU19XQU5URUQgNTcKLSAgICBQeUxvbmdPYmplY3QgKnY7Ci0gICAgZG91YmxlIHg7Ci0gICAgY29uc3QgZG91YmxlIG11bHRpcGxpZXIgPSAoZG91YmxlKSgxTCA8PCBQeUxvbmdfU0hJRlQpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQgc2lnbjsKLSAgICBpbnQgbmJpdHNuZWVkZWQ7Ci0KLSAgICBpZiAodnYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHZ2KSkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICB2ID0gKFB5TG9uZ09iamVjdCAqKXZ2OwotICAgIGkgPSBQeV9TSVpFKHYpOwotICAgIHNpZ24gPSAxOwotICAgIGlmIChpIDwgMCkgewotICAgICAgICBzaWduID0gLTE7Ci0gICAgICAgIGkgPSAtKGkpOwotICAgIH0KLSAgICBlbHNlIGlmIChpID09IDApIHsKLSAgICAgICAgKmV4cG9uZW50ID0gMDsKLSAgICAgICAgcmV0dXJuIDAuMDsKLSAgICB9Ci0gICAgLS1pOwotICAgIHggPSAoZG91YmxlKXYtPm9iX2RpZ2l0W2ldOwotICAgIG5iaXRzbmVlZGVkID0gTkJJVFNfV0FOVEVEIC0gMTsKLSAgICAvKiBJbnZhcmlhbnQ6ICBpIFB5dGhvbiBkaWdpdHMgcmVtYWluIHVuYWNjb3VudGVkIGZvci4gKi8KLSAgICB3aGlsZSAoaSA+IDAgJiYgbmJpdHNuZWVkZWQgPiAwKSB7Ci0gICAgICAgIC0taTsKLSAgICAgICAgeCA9IHggKiBtdWx0aXBsaWVyICsgKGRvdWJsZSl2LT5vYl9kaWdpdFtpXTsKLSAgICAgICAgbmJpdHNuZWVkZWQgLT0gUHlMb25nX1NISUZUOwotICAgIH0KLSAgICAvKiBUaGVyZSBhcmUgaSBkaWdpdHMgd2UgZGlkbid0IHNoaWZ0IGluLiAgUHJldGVuZGluZyB0aGV5J3JlIGFsbAotICAgICAgIHplcm9lcywgdGhlIHRydWUgdmFsdWUgaXMgeCAqIDIqKihpKlB5TG9uZ19TSElGVCkuICovCi0gICAgKmV4cG9uZW50ID0gaTsKLSAgICBhc3NlcnQoeCA+IDAuMCk7Ci0gICAgcmV0dXJuIHggKiBzaWduOwotI3VuZGVmIE5CSVRTX1dBTlRFRAotfQotCi0vKiBHZXQgYSBDIGRvdWJsZSBmcm9tIGEgbG9uZyBpbnQgb2JqZWN0LiAgUm91bmRzIHRvIHRoZSBuZWFyZXN0IGRvdWJsZSwKLSAgIHVzaW5nIHRoZSByb3VuZC1oYWxmLXRvLWV2ZW4gcnVsZSBpbiB0aGUgY2FzZSBvZiBhIHRpZS4gKi8KLQotZG91YmxlCi1QeUxvbmdfQXNEb3VibGUoUHlPYmplY3QgKnZ2KQotewotICAgIFB5TG9uZ09iamVjdCAqdiA9IChQeUxvbmdPYmplY3QgKil2djsKLSAgICBQeV9zc2l6ZV90IHJuZF9kaWdpdCwgcm5kX2JpdCwgbSwgbjsKLSAgICBkaWdpdCBsc2IsICpkOwotICAgIGludCByb3VuZF91cCA9IDA7Ci0gICAgZG91YmxlIHg7Ci0KLSAgICBpZiAodnYgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKHZ2KSkgewotICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKLSAgICAgICAgcmV0dXJuIC0xLjA7Ci0gICAgfQotCi0gICAgLyogTm90ZXMgb24gdGhlIG1ldGhvZDogZm9yIHNpbXBsaWNpdHksIGFzc3VtZSB2IGlzIHBvc2l0aXZlIGFuZCA+PQotICAgICAgIDIqKkRCTF9NQU5UX0RJRy4gKEZvciBuZWdhdGl2ZSB2IHdlIGp1c3QgaWdub3JlIHRoZSBzaWduIHVudGlsIHRoZQotICAgICAgIGVuZDsgZm9yIHNtYWxsIHYgbm8gcm91bmRpbmcgaXMgbmVjZXNzYXJ5LikgIFdyaXRlIG4gZm9yIHRoZSBudW1iZXIKLSAgICAgICBvZiBiaXRzIGluIHYsIHNvIHRoYXQgMioqKG4tMSkgPD0gdiA8IDIqKm4sIGFuZCBuID4gREJMX01BTlRfRElHLgotCi0gICAgICAgU29tZSB0ZXJtaW5vbG9neTogdGhlICpyb3VuZGluZyBiaXQqIG9mIHYgaXMgdGhlIDFzdCBiaXQgb2YgdiB0aGF0Ci0gICAgICAgd2lsbCBiZSByb3VuZGVkIGF3YXkgKGJpdCBuIC0gREJMX01BTlRfRElHIC0gMSk7IHRoZSAqcGFyaXR5IGJpdCoKLSAgICAgICBpcyB0aGUgYml0IGltbWVkaWF0ZWx5IGFib3ZlLiAgVGhlIHJvdW5kLWhhbGYtdG8tZXZlbiBydWxlIHNheXMKLSAgICAgICB0aGF0IHdlIHJvdW5kIHVwIGlmIHRoZSByb3VuZGluZyBiaXQgaXMgc2V0LCB1bmxlc3MgdiBpcyBleGFjdGx5Ci0gICAgICAgaGFsZndheSBiZXR3ZWVuIHR3byBmbG9hdHMgYW5kIHRoZSBwYXJpdHkgYml0IGlzIHplcm8uCi0KLSAgICAgICBXcml0ZSBkWzBdIC4uLiBkW21dIGZvciB0aGUgZGlnaXRzIG9mIHYsIGxlYXN0IHRvIG1vc3Qgc2lnbmlmaWNhbnQuCi0gICAgICAgTGV0IHJuZF9iaXQgYmUgdGhlIGluZGV4IG9mIHRoZSByb3VuZGluZyBiaXQsIGFuZCBybmRfZGlnaXQgdGhlCi0gICAgICAgaW5kZXggb2YgdGhlIFB5TG9uZyBkaWdpdCBjb250YWluaW5nIHRoZSByb3VuZGluZyBiaXQuICBUaGVuIHRoZQotICAgICAgIGJpdHMgb2YgdGhlIGRpZ2l0IGRbcm5kX2RpZ2l0XSBsb29rIHNvbWV0aGluZyBsaWtlOgotCi0gICAgICAgICAgICAgIHJvdW5kaW5nIGJpdAotICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICAgIHYKLSAgICAgICAgICBtc2IgLT4gc3Nzc3NydHR0dHR0dHR0IDwtIGxzYgotICAgICAgICAgICAgICAgICAgICAgXgotICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgICBwYXJpdHkgYml0Ci0KLSAgICAgICB3aGVyZSAncycgcmVwcmVzZW50cyBhICdzaWduaWZpY2FudCBiaXQnIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbgotICAgICAgIHRoZSBtYW50aXNzYSBvZiB0aGUgcmVzdWx0LCAncicgaXMgdGhlIHJvdW5kaW5nIGJpdCwgYW5kICd0JwotICAgICAgIHJlcHJlc2VudHMgYSAndHJhaWxpbmcgYml0JyBmb2xsb3dpbmcgdGhlIHJvdW5kaW5nIGJpdC4gIE5vdGUgdGhhdAotICAgICAgIGlmIHRoZSByb3VuZGluZyBiaXQgaXMgYXQgdGhlIHRvcCBvZiBkW3JuZF9kaWdpdF0gdGhlbiB0aGUgcGFyaXR5Ci0gICAgICAgYml0IHdpbGwgYmUgdGhlIGxzYiBvZiBkW3JuZF9kaWdpdCsxXS4gIElmIHdlIHNldAotCi0gICAgICAgICAgbHNiID0gMSA8PCAocm5kX2JpdCAlIFB5TG9uZ19TSElGVCkKLQotICAgICAgIHRoZW4gZFtybmRfZGlnaXRdICYgKFB5TG9uZ19CQVNFIC0gMipsc2IpIHNlbGVjdHMganVzdCB0aGUKLSAgICAgICBzaWduaWZpY2FudCBiaXRzIG9mIGRbcm5kX2RpZ2l0XSwgZFtybmRfZGlnaXRdICYgKGxzYi0xKSBnZXRzIHRoZQotICAgICAgIHRyYWlsaW5nIGJpdHMsIGFuZCBkW3JuZF9kaWdpdF0gJiBsc2IgZ2l2ZXMgdGhlIHJvdW5kaW5nIGJpdC4KLQotICAgICAgIFdlIGluaXRpYWxpemUgdGhlIGRvdWJsZSB4IHRvIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGRpZ2l0cwotICAgICAgIGRbcm5kX2RpZ2l0Om0tMV0sIGJ1dCB3aXRoIHRoZSByb3VuZGluZyBiaXQgYW5kIHRyYWlsaW5nIGJpdHMgb2YKLSAgICAgICBkW3JuZF9kaWdpdF0gbWFza2VkIG91dC4gIFNvIHRoZSB2YWx1ZSBvZiB4IGNvbWVzIGZyb20gdGhlIHRvcAotICAgICAgIERCTF9NQU5UX0RJRyBiaXRzIG9mIHYsIG11bHRpcGxpZWQgYnkgMipsc2IuICBOb3RlIHRoYXQgaW4gdGhlIGxvb3AKLSAgICAgICB0aGF0IHByb2R1Y2VzIHgsIGFsbCBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGFyZSBleGFjdCAoYXNzdW1pbmcKLSAgICAgICB0aGF0IEZMVF9SQURJWD09MikuICBOb3cgaWYgd2UncmUgcm91bmRpbmcgZG93biwgdGhlIHZhbHVlIHdlIHdhbnQKLSAgICAgICB0byByZXR1cm4gaXMgc2ltcGx5Ci0KLSAgICAgICAgICB4ICogMioqKFB5TG9uZ19TSElGVCAqIHJuZF9kaWdpdCkuCi0KLSAgICAgICBhbmQgaWYgd2UncmUgcm91bmRpbmcgdXAsIGl0J3MKLQotICAgICAgICAgICh4ICsgMipsc2IpICogMioqKFB5TG9uZ19TSElGVCAqIHJuZF9kaWdpdCkuCi0KLSAgICAgICBVbmRlciB0aGUgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUsIHdlIHJvdW5kIHVwIGlmLCBhbmQgb25seQotICAgICAgIGlmLCB0aGUgcm91bmRpbmcgYml0IGlzIHNldCAqYW5kKiBhdCBsZWFzdCBvbmUgb2YgdGhlCi0gICAgICAgZm9sbG93aW5nIHRocmVlIGNvbmRpdGlvbnMgaXMgc2F0aXNmaWVkOgotCi0gICAgICAgICAgKDEpIHRoZSBwYXJpdHkgYml0IGlzIHNldCwgb3IKLSAgICAgICAgICAoMikgYXQgbGVhc3Qgb25lIG9mIHRoZSB0cmFpbGluZyBiaXRzIG9mIGRbcm5kX2RpZ2l0XSBpcyBzZXQsIG9yCi0gICAgICAgICAgKDMpIGF0IGxlYXN0IG9uZSBvZiB0aGUgZGlnaXRzIGRbaV0sIDAgPD0gaSA8IHJuZF9kaWdpdAotICAgICAgICAgaXMgbm9uemVyby4KLQotICAgICAgIEZpbmFsbHksIHdlIGhhdmUgdG8gd29ycnkgYWJvdXQgb3ZlcmZsb3cuICBJZiB2ID49IDIqKkRCTF9NQVhfRVhQLAotICAgICAgIG9yIGVxdWl2YWxlbnRseSBuID4gREJMX01BWF9FWFAsIHRoZW4gb3ZlcmZsb3cgb2NjdXJzLiAgSWYgdiA8Ci0gICAgICAgMioqREJMX01BWF9FWFAgdGhlbiB3ZSdyZSB1c3VhbGx5IHNhZmUsIGJ1dCB0aGVyZSdzIGEgY29ybmVyIGNhc2UKLSAgICAgICB0byBjb25zaWRlcjogaWYgdiBpcyB2ZXJ5IGNsb3NlIHRvIDIqKkRCTF9NQVhfRVhQIHRoZW4gaXQncwotICAgICAgIHBvc3NpYmxlIHRoYXQgdiBpcyByb3VuZGVkIHVwIHRvIGV4YWN0bHkgMioqREJMX01BWF9FWFAsIGFuZCB0aGVuCi0gICAgICAgYWdhaW4gb3ZlcmZsb3cgb2NjdXJzLgotICAgICovCi0KLSAgICBpZiAoUHlfU0laRSh2KSA9PSAwKQotICAgICAgICByZXR1cm4gMC4wOwotICAgIG0gPSBBQlMoUHlfU0laRSh2KSkgLSAxOwotICAgIGQgPSB2LT5vYl9kaWdpdDsKLSAgICBhc3NlcnQoZFttXSk7ICAvKiB2IHNob3VsZCBiZSBub3JtYWxpemVkICovCi0KLSAgICAvKiBmYXN0IHBhdGggZm9yIGNhc2Ugd2hlcmUgMCA8IGFicyh2KSA8IDIqKkRCTF9NQU5UX0RJRyAqLwotICAgIGlmIChtIDwgREJMX01BTlRfRElHIC8gUHlMb25nX1NISUZUIHx8Ci0gICAgICAgIChtID09IERCTF9NQU5UX0RJRyAvIFB5TG9uZ19TSElGVCAmJgotICAgICAgICAgZFttXSA8IChkaWdpdCkxIDw8IERCTF9NQU5UX0RJRyVQeUxvbmdfU0hJRlQpKSB7Ci0gICAgICAgIHggPSBkW21dOwotICAgICAgICB3aGlsZSAoLS1tID49IDApCi0gICAgICAgICAgICB4ID0geCpQeUxvbmdfQkFTRSArIGRbbV07Ci0gICAgICAgIHJldHVybiBQeV9TSVpFKHYpIDwgMCA/IC14IDogeDsKLSAgICB9Ci0KLSAgICAvKiBpZiBtIGlzIGh1Z2UgdGhlbiBvdmVyZmxvdyBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlLCBjb21wdXRlIHRoZQotICAgICAgIG51bWJlciBvZiBiaXRzIG4gaW4gdi4gIFRoZSBjb25kaXRpb24gYmVsb3cgaW1wbGllcyBuICg9ICNiaXRzKSA+PQotICAgICAgIG0gKiBQeUxvbmdfU0hJRlQgKyAxID4gREJMX01BWF9FWFAsIGhlbmNlIHYgPj0gMioqREJMX01BWF9FWFAuICovCi0gICAgaWYgKG0gPiAoREJMX01BWF9FWFAtMSkvUHlMb25nX1NISUZUKQotICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgIG4gPSBtICogUHlMb25nX1NISUZUICsgYml0c19pbl9kaWdpdChkW21dKTsKLSAgICBpZiAobiA+IERCTF9NQVhfRVhQKQotICAgICAgICBnb3RvIG92ZXJmbG93OwotCi0gICAgLyogZmluZCBsb2NhdGlvbiBvZiByb3VuZGluZyBiaXQgKi8KLSAgICBhc3NlcnQobiA+IERCTF9NQU5UX0RJRyk7IC8qIGRlYWx0IHdpdGggfHZ8IDwgMioqREJMX01BTlRfRElHIGFib3ZlICovCi0gICAgcm5kX2JpdCA9IG4gLSBEQkxfTUFOVF9ESUcgLSAxOwotICAgIHJuZF9kaWdpdCA9IHJuZF9iaXQvUHlMb25nX1NISUZUOwotICAgIGxzYiA9IChkaWdpdCkxIDw8IChybmRfYml0JVB5TG9uZ19TSElGVCk7Ci0KLSAgICAvKiBHZXQgdG9wIERCTF9NQU5UX0RJRyBiaXRzIG9mIHYuICBBc3N1bWVzIFB5TG9uZ19TSElGVCA8Ci0gICAgICAgREJMX01BTlRfRElHLCBzbyB3ZSdsbCBuZWVkIGJpdHMgZnJvbSBhdCBsZWFzdCAyIGRpZ2l0cyBvZiB2LiAqLwotICAgIHggPSBkW21dOwotICAgIGFzc2VydChtID4gcm5kX2RpZ2l0KTsKLSAgICB3aGlsZSAoLS1tID4gcm5kX2RpZ2l0KQotICAgICAgICB4ID0geCpQeUxvbmdfQkFTRSArIGRbbV07Ci0gICAgeCA9IHgqUHlMb25nX0JBU0UgKyAoZFttXSAmIChQeUxvbmdfQkFTRS0yKmxzYikpOwotCi0gICAgLyogZGVjaWRlIHdoZXRoZXIgdG8gcm91bmQgdXAsIHVzaW5nIHJvdW5kLWhhbGYtdG8tZXZlbiAqLwotICAgIGFzc2VydChtID09IHJuZF9kaWdpdCk7Ci0gICAgaWYgKGRbbV0gJiBsc2IpIHsgLyogaWYgKHJvdW5kaW5nIGJpdCBpcyBzZXQpICovCi0gICAgICAgIGRpZ2l0IHBhcml0eV9iaXQ7Ci0gICAgICAgIGlmIChsc2IgPT0gUHlMb25nX0JBU0UvMikKLSAgICAgICAgICAgIHBhcml0eV9iaXQgPSBkW20rMV0gJiAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwYXJpdHlfYml0ID0gZFttXSAmIDIqbHNiOwotICAgICAgICBpZiAocGFyaXR5X2JpdCkKLSAgICAgICAgICAgIHJvdW5kX3VwID0gMTsKLSAgICAgICAgZWxzZSBpZiAoZFttXSAmIChsc2ItMSkpCi0gICAgICAgICAgICByb3VuZF91cCA9IDE7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKC0tbSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRbbV0pIHsKLSAgICAgICAgICAgICAgICAgICAgcm91bmRfdXAgPSAxOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBhbmQgcm91bmQgdXAgaWYgbmVjZXNzYXJ5ICovCi0gICAgaWYgKHJvdW5kX3VwKSB7Ci0gICAgICAgIHggKz0gMipsc2I7Ci0gICAgICAgIGlmIChuID09IERCTF9NQVhfRVhQICYmCi0gICAgICAgICAgICB4ID09IGxkZXhwKChkb3VibGUpKDIqbHNiKSwgREJMX01BTlRfRElHKSkgewotICAgICAgICAgICAgLyogb3ZlcmZsb3cgY29ybmVyIGNhc2UgKi8KLSAgICAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBzaGlmdCwgYWRqdXN0IGZvciBzaWduLCBhbmQgcmV0dXJuICovCi0gICAgeCA9IGxkZXhwKHgsIHJuZF9kaWdpdCpQeUxvbmdfU0hJRlQpOwotICAgIHJldHVybiBQeV9TSVpFKHYpIDwgMCA/IC14IDogeDsKLQotICBvdmVyZmxvdzoKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgdG8gQyBkb3VibGUiKTsKLSAgICByZXR1cm4gLTEuMDsKLX0KLQogLyogQ3JlYXRlIGEgbmV3IGxvbmcgKG9yIGludCkgb2JqZWN0IGZyb20gYSBDIHBvaW50ZXIgKi8KIAogUHlPYmplY3QgKgpAQCAtMTIwOSw2ICs5ODYsNyBAQAogICovCiAKICNkZWZpbmUgSVNfTElUVExFX0VORElBTiAoaW50KSoodW5zaWduZWQgY2hhciopJm9uZQorI2RlZmluZSBQWV9BQlNfTExPTkdfTUlOICgwLSh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUlOKQogCiAvKiBDcmVhdGUgYSBuZXcgbG9uZyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCiAKQEAgLTEzOTQsOSArMTE3Miw4IEBACiAgICAgY2FzZSAwOiByZXR1cm4gMDsKICAgICBjYXNlIDE6IHJldHVybiB2LT5vYl9kaWdpdFswXTsKICAgICB9Ci0gICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTE0MjcsOSArMTIwNCw4IEBACiAgICAgY2FzZSAxOiByZXR1cm4gdi0+b2JfZGlnaXRbMF07CiAgICAgfQogCi0gICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgKLSAgICAgICAgICAgICAgICAgICAgKFB5TG9uZ09iamVjdCAqKXZ2LCAodW5zaWduZWQgY2hhciAqKSZieXRlcywKLSAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdnYsICh1bnNpZ25lZCBjaGFyICopJmJ5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMCk7CiAKICAgICAvKiBQbGFuIDkgY2FuJ3QgaGFuZGxlIFBZX0xPTkdfTE9ORyBpbiA/IDogZXhwcmVzc2lvbnMgKi8KICAgICBpZiAocmVzIDwgMCkKQEAgLTE0NjYsNyArMTI0Miw3IEBACiAgICAgICAgIGkgPSAtaTsKICAgICB9CiAgICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpIHwgdi0+b2JfZGlnaXRbaV07CiAgICAgfQogICAgIHJldHVybiB4ICogc2lnbjsKIH0KQEAgLTE1MDcsMTMgKzEyODMsMTEwIEBACiB9CiAjdW5kZWYgSVNfTElUVExFX0VORElBTgogCisvKiBHZXQgYSBDIGxvbmcgbG9uZyBpbnQgZnJvbSBhIFB5dGhvbiBsb25nIG9yIFB5dGhvbiBpbnQgb2JqZWN0LgorICAgT24gb3ZlcmZsb3csIHJldHVybnMgLTEgYW5kIHNldHMgKm92ZXJmbG93IHRvIDEgb3IgLTEgZGVwZW5kaW5nCisgICBvbiB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0LiAgT3RoZXJ3aXNlICpvdmVyZmxvdyBpcyAwLgorCisgICBGb3Igb3RoZXIgZXJyb3JzIChlLmcuLCB0eXBlIGVycm9yKSwgcmV0dXJucyAtMSBhbmQgc2V0cyBhbiBlcnJvcgorICAgY29uZGl0aW9uLgorKi8KKworUFlfTE9OR19MT05HCitQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKK3sKKyAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLworICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICB1bnNpZ25lZCBQWV9MT05HX0xPTkcgeCwgcHJldjsKKyAgICBQWV9MT05HX0xPTkcgcmVzOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgc2lnbjsKKyAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KKworICAgICpvdmVyZmxvdyA9IDA7CisgICAgaWYgKHZ2ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIVB5TG9uZ19DaGVjayh2dikpIHsKKyAgICAgICAgUHlOdW1iZXJNZXRob2RzICpuYjsKKyAgICAgICAgbmIgPSB2di0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOworICAgICAgICBpZiAobmIgPT0gTlVMTCB8fCBuYi0+bmJfaW50ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGludGVnZXIgaXMgcmVxdWlyZWQiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICB2diA9ICgqbmItPm5iX2ludCkgKHZ2KTsKKyAgICAgICAgaWYgKHZ2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGRvX2RlY3JlZiA9IDE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHZ2KSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHZ2KTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2ludCBzaG91bGQgcmV0dXJuIGludCBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJlcyA9IC0xOworICAgIHYgPSAoUHlMb25nT2JqZWN0ICopdnY7CisgICAgaSA9IFB5X1NJWkUodik7CisKKyAgICBzd2l0Y2ggKGkpIHsKKyAgICBjYXNlIC0xOgorICAgICAgICByZXMgPSAtKHNkaWdpdCl2LT5vYl9kaWdpdFswXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICByZXMgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHJlcyA9IHYtPm9iX2RpZ2l0WzBdOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzaWduID0gMTsKKyAgICAgICAgeCA9IDA7CisgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgc2lnbiA9IC0xOworICAgICAgICAgICAgaSA9IC0oaSk7CisgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgICAgICAgICBwcmV2ID0geDsKKyAgICAgICAgICAgIHggPSAoeCA8PCBQeUxvbmdfU0hJRlQpICsgdi0+b2JfZGlnaXRbaV07CisgICAgICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CisgICAgICAgICAgICAgICAgKm92ZXJmbG93ID0gc2lnbjsKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyogSGF2ZW4ndCBsb3N0IGFueSBiaXRzLCBidXQgY2FzdGluZyB0byBsb25nIHJlcXVpcmVzIGV4dHJhCisgICAgICAgICAqIGNhcmUgKHNlZSBjb21tZW50IGFib3ZlKS4KKyAgICAgICAgICovCisgICAgICAgIGlmICh4IDw9ICh1bnNpZ25lZCBQWV9MT05HX0xPTkcpUFlfTExPTkdfTUFYKSB7CisgICAgICAgICAgICByZXMgPSAoUFlfTE9OR19MT05HKXggKiBzaWduOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNpZ24gPCAwICYmIHggPT0gUFlfQUJTX0xMT05HX01JTikgeworICAgICAgICAgICAgcmVzID0gUFlfTExPTkdfTUlOOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgKm92ZXJmbG93ID0gc2lnbjsKKyAgICAgICAgICAgIC8qIHJlcyBpcyBhbHJlYWR5IHNldCB0byAtMSAqLworICAgICAgICB9CisgICAgfQorICBleGl0OgorICAgIGlmIChkb19kZWNyZWYpIHsKKyAgICAgICAgUHlfREVDUkVGKHZ2KTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKwogI2VuZGlmIC8qIEhBVkVfTE9OR19MT05HICovCiAKLSNkZWZpbmUgQ0hFQ0tfQklOT1Aodix3KSBcCi0gICAgaWYgKCFQeUxvbmdfQ2hlY2sodikgfHwgIVB5TG9uZ19DaGVjayh3KSkgeyBcCi0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7IFwKLSAgICAgICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOyBcCi0gICAgfQorI2RlZmluZSBDSEVDS19CSU5PUCh2LHcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikgfHwgIVB5TG9uZ19DaGVjayh3KSkgeyAgICAgXAorICAgICAgICAgICAgUHlfSU5DUkVGKFB5X05vdEltcGxlbWVudGVkKTsgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gUHlfTm90SW1wbGVtZW50ZWQ7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogLyogYml0c19pbl9kaWdpdChkKSByZXR1cm5zIHRoZSB1bmlxdWUgaW50ZWdlciBrIHN1Y2ggdGhhdCAyKiooay0xKSA8PSBkIDwKICAgIDIqKmsgaWYgZCBpcyBub256ZXJvLCBlbHNlIDAuICovCkBAIC0xNjQwLDcgKzE1MTMsNyBAQAogICAgIHBvdXQgKz0gc2l6ZTsKICAgICB3aGlsZSAoLS1zaXplID49IDApIHsKICAgICAgICAgZGlnaXQgaGk7Ci0gICAgICAgIHJlbSA9IChyZW0gPDwgUHlMb25nX1NISUZUKSArICotLXBpbjsKKyAgICAgICAgcmVtID0gKHJlbSA8PCBQeUxvbmdfU0hJRlQpIHwgKi0tcGluOwogICAgICAgICAqLS1wb3V0ID0gaGkgPSAoZGlnaXQpKHJlbSAvIG4pOwogICAgICAgICByZW0gLT0gKHR3b2RpZ2l0cyloaSAqIG47CiAgICAgfQpAQCAtMTY2NSw4ICsxNTM4LDEyMiBAQAogICAgIHJldHVybiBsb25nX25vcm1hbGl6ZSh6KTsKIH0KIAotLyogQ29udmVydCBhIGxvbmcgaW50IG9iamVjdCB0byBhIHN0cmluZywgdXNpbmcgYSBnaXZlbiBjb252ZXJzaW9uIGJhc2UuCi0gICBSZXR1cm4gYSBzdHJpbmcgb2JqZWN0LgorLyogQ29udmVydCBhIGxvbmcgaW50ZWdlciB0byBhIGJhc2UgMTAgc3RyaW5nLiAgUmV0dXJucyBhIG5ldyBub24tc2hhcmVkCisgICBzdHJpbmcuICAoUmV0dXJuIHZhbHVlIGlzIG5vbi1zaGFyZWQgc28gdGhhdCBjYWxsZXJzIGNhbiBtb2RpZnkgdGhlCisgICByZXR1cm5lZCB2YWx1ZSBpZiBuZWNlc3NhcnkuKSAqLworCitzdGF0aWMgUHlPYmplY3QgKgorbG9uZ190b19kZWNpbWFsX3N0cmluZyhQeU9iamVjdCAqYWEpCit7CisgICAgUHlMb25nT2JqZWN0ICpzY3JhdGNoLCAqYTsKKyAgICBQeU9iamVjdCAqc3RyOworICAgIFB5X3NzaXplX3Qgc2l6ZSwgc3RybGVuLCBzaXplX2EsIGksIGo7CisgICAgZGlnaXQgKnBvdXQsICpwaW4sIHJlbSwgdGVucG93OworICAgIFB5X1VOSUNPREUgKnA7CisgICAgaW50IG5lZ2F0aXZlOworCisgICAgYSA9IChQeUxvbmdPYmplY3QgKilhYTsKKyAgICBpZiAoYSA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2soYSkpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7CisgICAgbmVnYXRpdmUgPSBQeV9TSVpFKGEpIDwgMDsKKworICAgIC8qIHF1aWNrIGFuZCBkaXJ0eSB1cHBlciBib3VuZCBmb3IgdGhlIG51bWJlciBvZiBkaWdpdHMKKyAgICAgICByZXF1aXJlZCB0byBleHByZXNzIGEgaW4gYmFzZSBfUHlMb25nX0RFQ0lNQUxfQkFTRToKKworICAgICAgICAgI2RpZ2l0cyA9IDEgKyBmbG9vcihsb2cyKGEpIC8gbG9nMihfUHlMb25nX0RFQ0lNQUxfQkFTRSkpCisKKyAgICAgICBCdXQgbG9nMihhKSA8IHNpemVfYSAqIFB5TG9uZ19TSElGVCwgYW5kCisgICAgICAgbG9nMihfUHlMb25nX0RFQ0lNQUxfQkFTRSkgPSBsb2cyKDEwKSAqIF9QeUxvbmdfREVDSU1BTF9TSElGVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4gMyAqIF9QeUxvbmdfREVDSU1BTF9TSElGVAorICAgICovCisgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KKyAgICBzaXplID0gMSArIHNpemVfYSAqIFB5TG9uZ19TSElGVCAvICgzICogX1B5TG9uZ19ERUNJTUFMX1NISUZUKTsKKyAgICBzY3JhdGNoID0gX1B5TG9uZ19OZXcoc2l6ZSk7CisgICAgaWYgKHNjcmF0Y2ggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBjb252ZXJ0IGFycmF5IG9mIGJhc2UgX1B5TG9uZ19CQVNFIGRpZ2l0cyBpbiBwaW4gdG8gYW4gYXJyYXkgb2YKKyAgICAgICBiYXNlIF9QeUxvbmdfREVDSU1BTF9CQVNFIGRpZ2l0cyBpbiBwb3V0LCBmb2xsb3dpbmcgS251dGggKFRBT0NQLAorICAgICAgIFZvbHVtZSAyICgzcmQgZWRuKSwgc2VjdGlvbiA0LjQsIE1ldGhvZCAxYikuICovCisgICAgcGluID0gYS0+b2JfZGlnaXQ7CisgICAgcG91dCA9IHNjcmF0Y2gtPm9iX2RpZ2l0OworICAgIHNpemUgPSAwOworICAgIGZvciAoaSA9IHNpemVfYTsgLS1pID49IDA7ICkgeworICAgICAgICBkaWdpdCBoaSA9IHBpbltpXTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgeworICAgICAgICAgICAgdHdvZGlnaXRzIHogPSAodHdvZGlnaXRzKXBvdXRbal0gPDwgUHlMb25nX1NISUZUIHwgaGk7CisgICAgICAgICAgICBoaSA9IChkaWdpdCkoeiAvIF9QeUxvbmdfREVDSU1BTF9CQVNFKTsKKyAgICAgICAgICAgIHBvdXRbal0gPSAoZGlnaXQpKHogLSAodHdvZGlnaXRzKWhpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeUxvbmdfREVDSU1BTF9CQVNFKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaGkpIHsKKyAgICAgICAgICAgIHBvdXRbc2l6ZSsrXSA9IGhpICUgX1B5TG9uZ19ERUNJTUFMX0JBU0U7CisgICAgICAgICAgICBoaSAvPSBfUHlMb25nX0RFQ0lNQUxfQkFTRTsKKyAgICAgICAgfQorICAgICAgICAvKiBjaGVjayBmb3Iga2V5Ym9hcmQgaW50ZXJydXB0ICovCisgICAgICAgIFNJR0NIRUNLKHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2NyYXRjaCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgLyogcG91dCBzaG91bGQgaGF2ZSBhdCBsZWFzdCBvbmUgZGlnaXQsIHNvIHRoYXQgdGhlIGNhc2Ugd2hlbiBhID0gMAorICAgICAgIHdvcmtzIGNvcnJlY3RseSAqLworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHBvdXRbc2l6ZSsrXSA9IDA7CisKKyAgICAvKiBjYWxjdWxhdGUgZXhhY3QgbGVuZ3RoIG9mIG91dHB1dCBzdHJpbmcsIGFuZCBhbGxvY2F0ZSAqLworICAgIHN0cmxlbiA9IG5lZ2F0aXZlICsgMSArIChzaXplIC0gMSkgKiBfUHlMb25nX0RFQ0lNQUxfU0hJRlQ7CisgICAgdGVucG93ID0gMTA7CisgICAgcmVtID0gcG91dFtzaXplLTFdOworICAgIHdoaWxlIChyZW0gPj0gdGVucG93KSB7CisgICAgICAgIHRlbnBvdyAqPSAxMDsKKyAgICAgICAgc3RybGVuKys7CisgICAgfQorICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZShOVUxMLCBzdHJsZW4pOworICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2NyYXRjaCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGZpbGwgdGhlIHN0cmluZyByaWdodC10by1sZWZ0ICovCisgICAgcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKHN0cikgKyBzdHJsZW47CisgICAgKnAgPSAnXDAnOworICAgIC8qIHBvdXRbMF0gdGhyb3VnaCBwb3V0W3NpemUtMl0gY29udHJpYnV0ZSBleGFjdGx5CisgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovCisgICAgZm9yIChpPTA7IGkgPCBzaXplIC0gMTsgaSsrKSB7CisgICAgICAgIHJlbSA9IHBvdXRbaV07CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBfUHlMb25nX0RFQ0lNQUxfU0hJRlQ7IGorKykgeworICAgICAgICAgICAgKi0tcCA9ICcwJyArIHJlbSAlIDEwOworICAgICAgICAgICAgcmVtIC89IDEwOworICAgICAgICB9CisgICAgfQorICAgIC8qIHBvdXRbc2l6ZS0xXTogYWx3YXlzIHByb2R1Y2UgYXQgbGVhc3Qgb25lIGRlY2ltYWwgZGlnaXQgKi8KKyAgICByZW0gPSBwb3V0W2ldOworICAgIGRvIHsKKyAgICAgICAgKi0tcCA9ICcwJyArIHJlbSAlIDEwOworICAgICAgICByZW0gLz0gMTA7CisgICAgfSB3aGlsZSAocmVtICE9IDApOworCisgICAgLyogYW5kIHNpZ24gKi8KKyAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICotLXAgPSAnLSc7CisKKyAgICAvKiBjaGVjayB3ZSd2ZSBjb3VudGVkIGNvcnJlY3RseSAqLworICAgIGFzc2VydChwID09IFB5VW5pY29kZV9BU19VTklDT0RFKHN0cikpOworICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc3RyOworfQorCisvKiBDb252ZXJ0IGEgbG9uZyBpbnQgb2JqZWN0IHRvIGEgc3RyaW5nLCB1c2luZyBhIGdpdmVuIGNvbnZlcnNpb24gYmFzZSwKKyAgIHdoaWNoIHNob3VsZCBiZSBvbmUgb2YgMiwgOCwgMTAgb3IgMTYuICBSZXR1cm4gYSBzdHJpbmcgb2JqZWN0LgogICAgSWYgYmFzZSBpcyAyLCA4IG9yIDE2LCBhZGQgdGhlIHByb3BlciBwcmVmaXggJzBiJywgJzBvJyBvciAnMHgnLiAqLwogCiBQeU9iamVjdCAqCkBAIC0xNjc2LDMyICsxNjYzLDQ0IEBACiAgICAgUHlPYmplY3QgKnN0cjsKICAgICBQeV9zc2l6ZV90IGksIHN6OwogICAgIFB5X3NzaXplX3Qgc2l6ZV9hOwotICAgIFB5X1VOSUNPREUgKnA7CisgICAgUHlfVU5JQ09ERSAqcCwgc2lnbiA9ICdcMCc7CiAgICAgaW50IGJpdHM7Ci0gICAgY2hhciBzaWduID0gJ1wwJzsKKworICAgIGFzc2VydChiYXNlID09IDIgfHwgYmFzZSA9PSA4IHx8IGJhc2UgPT0gMTAgfHwgYmFzZSA9PSAxNik7CisgICAgaWYgKGJhc2UgPT0gMTApCisgICAgICAgIHJldHVybiBsb25nX3RvX2RlY2ltYWxfc3RyaW5nKChQeU9iamVjdCAqKWEpOwogCiAgICAgaWYgKGEgPT0gTlVMTCB8fCAhUHlMb25nX0NoZWNrKGEpKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgYXNzZXJ0KGJhc2UgPj0gMiAmJiBiYXNlIDw9IDM2KTsKICAgICBzaXplX2EgPSBBQlMoUHlfU0laRShhKSk7CiAKICAgICAvKiBDb21wdXRlIGEgcm91Z2ggdXBwZXIgYm91bmQgZm9yIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyAqLwotICAgIGkgPSBiYXNlOwotICAgIGJpdHMgPSAwOwotICAgIHdoaWxlIChpID4gMSkgewotICAgICAgICArK2JpdHM7Ci0gICAgICAgIGkgPj49IDE7CisgICAgc3dpdGNoIChiYXNlKSB7CisgICAgY2FzZSAxNjoKKyAgICAgICAgYml0cyA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgYml0cyA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgYml0cyA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsgLyogc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUgKi8KKyAgICAgICAgYml0cyA9IDA7IC8qIHRvIHNpbGVuY2UgZ2NjIHdhcm5pbmcgKi8KICAgICB9Ci0gICAgaSA9IDU7Ci0gICAgLyogZW5zdXJlIHdlIGRvbid0IGdldCBzaWduZWQgb3ZlcmZsb3cgaW4gc3ogY2FsY3VsYXRpb24gKi8KLSAgICBpZiAoc2l6ZV9hID4gKFBZX1NTSVpFX1RfTUFYIC0gaSkgLyBQeUxvbmdfU0hJRlQpIHsKKyAgICAvKiBjb21wdXRlIGxlbmd0aCBvZiBvdXRwdXQgc3RyaW5nOiBhbGxvdyAyIGNoYXJhY3RlcnMgZm9yIHByZWZpeCBhbmQKKyAgICAgICAxIGZvciBwb3NzaWJsZSAnLScgc2lnbi4gKi8KKyAgICBpZiAoc2l6ZV9hID4gKFBZX1NTSVpFX1RfTUFYIC0gMykgLyBQeUxvbmdfU0hJRlQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW50IGlzIHRvbyBsYXJnZSB0byBmb3JtYXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN6ID0gaSArIDEgKyAoc2l6ZV9hICogUHlMb25nX1NISUZUIC0gMSkgLyBiaXRzOworICAgIC8qIG5vdyBzaXplX2EgKiBQeUxvbmdfU0hJRlQgKyAzIDw9IFBZX1NTSVpFX1RfTUFYLCBzbyB0aGUgUkhTIGJlbG93CisgICAgICAgaXMgc2FmZSBmcm9tIG92ZXJmbG93ICovCisgICAgc3ogPSAzICsgKHNpemVfYSAqIFB5TG9uZ19TSElGVCArIChiaXRzIC0gMSkpIC8gYml0czsKICAgICBhc3NlcnQoc3ogPj0gMCk7CiAgICAgc3RyID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHN6KTsKICAgICBpZiAoc3RyID09IE5VTEwpCkBAIC0xNzE0LDEwNiArMTcxMywzMyBAQAogICAgIGlmIChQeV9TSVpFKGEpID09IDApIHsKICAgICAgICAgKi0tcCA9ICcwJzsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGJhc2UgJiAoYmFzZSAtIDEpKSA9PSAwKSB7CisgICAgZWxzZSB7CiAgICAgICAgIC8qIEpSSDogc3BlY2lhbCBjYXNlIGZvciBwb3dlci1vZi0yIGJhc2VzICovCiAgICAgICAgIHR3b2RpZ2l0cyBhY2N1bSA9IDA7CiAgICAgICAgIGludCBhY2N1bWJpdHMgPSAwOyAgICAgICAgICAgICAgLyogIyBvZiBiaXRzIGluIGFjY3VtICovCi0gICAgICAgIGludCBiYXNlYml0cyA9IDE7ICAgICAgICAgICAgICAgLyogIyBvZiBiaXRzIGluIGJhc2UtMSAqLwotICAgICAgICBpID0gYmFzZTsKLSAgICAgICAgd2hpbGUgKChpID4+PSAxKSA+IDEpCi0gICAgICAgICAgICArK2Jhc2ViaXRzOwotCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2E7ICsraSkgewogICAgICAgICAgICAgYWNjdW0gfD0gKHR3b2RpZ2l0cylhLT5vYl9kaWdpdFtpXSA8PCBhY2N1bWJpdHM7CiAgICAgICAgICAgICBhY2N1bWJpdHMgKz0gUHlMb25nX1NISUZUOwotICAgICAgICAgICAgYXNzZXJ0KGFjY3VtYml0cyA+PSBiYXNlYml0cyk7CisgICAgICAgICAgICBhc3NlcnQoYWNjdW1iaXRzID49IGJpdHMpOwogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGNoYXIgY2RpZ2l0ID0gKGNoYXIpKGFjY3VtICYgKGJhc2UgLSAxKSk7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjZGlnaXQ7CisgICAgICAgICAgICAgICAgY2RpZ2l0ID0gKFB5X1VOSUNPREUpKGFjY3VtICYgKGJhc2UgLSAxKSk7CiAgICAgICAgICAgICAgICAgY2RpZ2l0ICs9IChjZGlnaXQgPCAxMCkgPyAnMCcgOiAnYSctMTA7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KHAgPiBQeVVuaWNvZGVfQVNfVU5JQ09ERShzdHIpKTsKICAgICAgICAgICAgICAgICAqLS1wID0gY2RpZ2l0OwotICAgICAgICAgICAgICAgIGFjY3VtYml0cyAtPSBiYXNlYml0czsKLSAgICAgICAgICAgICAgICBhY2N1bSA+Pj0gYmFzZWJpdHM7Ci0gICAgICAgICAgICB9IHdoaWxlIChpIDwgc2l6ZV9hLTEgPyBhY2N1bWJpdHMgPj0gYmFzZWJpdHMgOgotICAgICAgICAgICAgICAgICAgICAgICAgYWNjdW0gPiAwKTsKKyAgICAgICAgICAgICAgICBhY2N1bWJpdHMgLT0gYml0czsKKyAgICAgICAgICAgICAgICBhY2N1bSA+Pj0gYml0czsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgPCBzaXplX2EtMSA/IGFjY3VtYml0cyA+PSBiaXRzIDogYWNjdW0gPiAwKTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogTm90IDAsIGFuZCBiYXNlIG5vdCBhIHBvd2VyIG9mIDIuICBEaXZpZGUgcmVwZWF0ZWRseSBieQotICAgICAgICAgICBiYXNlLCBidXQgZm9yIHNwZWVkIHVzZSB0aGUgaGlnaGVzdCBwb3dlciBvZiBiYXNlIHRoYXQKLSAgICAgICAgICAgZml0cyBpbiBhIGRpZ2l0LiAqLwotICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBzaXplX2E7Ci0gICAgICAgIGRpZ2l0ICpwaW4gPSBhLT5vYl9kaWdpdDsKLSAgICAgICAgUHlMb25nT2JqZWN0ICpzY3JhdGNoOwotICAgICAgICAvKiBwb3diYXN3IDwtIGxhcmdlc3QgcG93ZXIgb2YgYmFzZSB0aGF0IGZpdHMgaW4gYSBkaWdpdC4gKi8KLSAgICAgICAgZGlnaXQgcG93YmFzZSA9IGJhc2U7ICAvKiBwb3diYXNlID09IGJhc2UgKiogcG93ZXIgKi8KLSAgICAgICAgaW50IHBvd2VyID0gMTsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgdHdvZGlnaXRzIG5ld3BvdyA9IHBvd2Jhc2UgKiAodHdvZGlnaXRzKWJhc2U7Ci0gICAgICAgICAgICBpZiAobmV3cG93ID4+IFB5TG9uZ19TSElGVCkKLSAgICAgICAgICAgICAgICAvKiBkb2Vzbid0IGZpdCBpbiBhIGRpZ2l0ICovCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBwb3diYXNlID0gKGRpZ2l0KW5ld3BvdzsKLSAgICAgICAgICAgICsrcG93ZXI7Ci0gICAgICAgIH0KIAotICAgICAgICAvKiBHZXQgYSBzY3JhdGNoIGFyZWEgZm9yIHJlcGVhdGVkIGRpdmlzaW9uLiAqLwotICAgICAgICBzY3JhdGNoID0gX1B5TG9uZ19OZXcoc2l6ZSk7Ci0gICAgICAgIGlmIChzY3JhdGNoID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBSZXBlYXRlZGx5IGRpdmlkZSBieSBwb3diYXNlLiAqLwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpbnQgbnRvc3RvcmUgPSBwb3dlcjsKLSAgICAgICAgICAgIGRpZ2l0IHJlbSA9IGlucGxhY2VfZGl2cmVtMShzY3JhdGNoLT5vYl9kaWdpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGluLCBzaXplLCBwb3diYXNlKTsKLSAgICAgICAgICAgIHBpbiA9IHNjcmF0Y2gtPm9iX2RpZ2l0OyAvKiBubyBuZWVkIHRvIHVzZSBhIGFnYWluICovCi0gICAgICAgICAgICBpZiAocGluW3NpemUgLSAxXSA9PSAwKQotICAgICAgICAgICAgICAgIC0tc2l6ZTsKLSAgICAgICAgICAgIFNJR0NIRUNLKHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2NyYXRjaCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9KQotCi0gICAgICAgICAgICAvKiBCcmVhayByZW0gaW50byBkaWdpdHMuICovCi0gICAgICAgICAgICBhc3NlcnQobnRvc3RvcmUgPiAwKTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBkaWdpdCBuZXh0cmVtID0gKGRpZ2l0KShyZW0gLyBiYXNlKTsKLSAgICAgICAgICAgICAgICBjaGFyIGMgPSAoY2hhcikocmVtIC0gbmV4dHJlbSAqIGJhc2UpOwotICAgICAgICAgICAgICAgIGFzc2VydChwID4gUHlVbmljb2RlX0FTX1VOSUNPREUoc3RyKSk7Ci0gICAgICAgICAgICAgICAgYyArPSAoYyA8IDEwKSA/ICcwJyA6ICdhJy0xMDsKLSAgICAgICAgICAgICAgICAqLS1wID0gYzsKLSAgICAgICAgICAgICAgICByZW0gPSBuZXh0cmVtOwotICAgICAgICAgICAgICAgIC0tbnRvc3RvcmU7Ci0gICAgICAgICAgICAgICAgLyogVGVybWluYXRpb24gaXMgYSBiaXQgZGVsaWNhdGU6ICBtdXN0IG5vdAotICAgICAgICAgICAgICAgICAgIHN0b3JlIGxlYWRpbmcgemVyb2VzLCBzbyBtdXN0IGdldCBvdXQgaWYKLSAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgcXVvdGllbnQgYW5kIHJlbSBhcmUgYm90aCAwLiAqLwotICAgICAgICAgICAgfSB3aGlsZSAobnRvc3RvcmUgJiYgKHNpemUgfHwgcmVtKSk7Ci0gICAgICAgIH0gd2hpbGUgKHNpemUgIT0gMCk7Ci0gICAgICAgIFB5X0RFQ1JFRihzY3JhdGNoKTsKLSAgICB9Ci0KLSAgICBpZiAoYmFzZSA9PSAxNikgeworICAgIGlmIChiYXNlID09IDE2KQogICAgICAgICAqLS1wID0gJ3gnOwotICAgICAgICAqLS1wID0gJzAnOwotICAgIH0KLSAgICBlbHNlIGlmIChiYXNlID09IDgpIHsKKyAgICBlbHNlIGlmIChiYXNlID09IDgpCiAgICAgICAgICotLXAgPSAnbyc7Ci0gICAgICAgICotLXAgPSAnMCc7Ci0gICAgfQotICAgIGVsc2UgaWYgKGJhc2UgPT0gMikgeworICAgIGVsc2UgLyogKGJhc2UgPT0gMikgKi8KICAgICAgICAgKi0tcCA9ICdiJzsKLSAgICAgICAgKi0tcCA9ICcwJzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYmFzZSAhPSAxMCkgewotICAgICAgICAqLS1wID0gJyMnOwotICAgICAgICAqLS1wID0gJzAnICsgYmFzZSUxMDsKLSAgICAgICAgaWYgKGJhc2UgPiAxMCkKLSAgICAgICAgICAgICotLXAgPSAnMCcgKyBiYXNlLzEwOwotICAgIH0KKyAgICAqLS1wID0gJzAnOwogICAgIGlmIChzaWduKQogICAgICAgICAqLS1wID0gc2lnbjsKICAgICBpZiAocCAhPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShzdHIpKSB7CkBAIC0yMDcyLDggKzE5OTgsOCBAQAogICAgICAgICAgICAgdHdvZGlnaXRzIGNvbnZtYXggPSBiYXNlOwogICAgICAgICAgICAgaW50IGkgPSAxOwogCi0gICAgICAgICAgICBsb2dfYmFzZV9CQVNFW2Jhc2VdID0gbG9nKChkb3VibGUpYmFzZSkgLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKChkb3VibGUpUHlMb25nX0JBU0UpOworICAgICAgICAgICAgbG9nX2Jhc2VfQkFTRVtiYXNlXSA9IChsb2coKGRvdWJsZSliYXNlKSAvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZygoZG91YmxlKVB5TG9uZ19CQVNFKSk7CiAgICAgICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICAgICAgdHdvZGlnaXRzIG5leHQgPSBjb252bWF4ICogYmFzZTsKICAgICAgICAgICAgICAgICBpZiAobmV4dCA+IFB5TG9uZ19CQVNFKQpAQCAtMjExNyw3ICsyMDQzLDcgQEAKICAgICAgICAgICAgIGMgPSAoZGlnaXQpX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKCpzdHIrKyldOwogICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGNvbnZ3aWR0aCAmJiBzdHIgIT0gc2NhbjsgKytpLCArK3N0cikgewogICAgICAgICAgICAgICAgIGMgPSAodHdvZGlnaXRzKShjICogIGJhc2UgKwotICAgICAgICAgICAgICAgICAgICAoaW50KV9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KV9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0pOwogICAgICAgICAgICAgICAgIGFzc2VydChjIDwgUHlMb25nX0JBU0UpOwogICAgICAgICAgICAgfQogCkBAIC0yMTkwLDcgKzIxMTYsNyBAQAogICAgIGxvbmdfbm9ybWFsaXplKHopOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgbWF5YmVfc21hbGxfbG9uZyh6KTsKIAotIG9uRXJyb3I6CisgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRih6KTsKICAgICBzbGVuID0gc3RybGVuKG9yaWdfc3RyKSA8IDIwMCA/IHN0cmxlbihvcmlnX3N0cikgOiAyMDA7CiAgICAgc3Ryb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKG9yaWdfc3RyLCBzbGVuKTsKQEAgLTIyMDcsMTcgKzIxMzMsMzQgQEAKIFB5TG9uZ19Gcm9tVW5pY29kZShQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IGxlbmd0aCwgaW50IGJhc2UpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICpidWZmZXIgPSAoY2hhciAqKVB5TWVtX01BTExPQyhsZW5ndGgrMSk7CisgICAgUHlPYmplY3QgKmFzY2lpZGlnOworICAgIGNoYXIgKmJ1ZmZlciwgKmVuZDsKKyAgICBQeV9zc2l6ZV90IGksIGJ1ZmxlbjsKKyAgICBQeV9VTklDT0RFICpwdHI7CiAKLSAgICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgYXNjaWlkaWcgPSBQeVVuaWNvZGVfVHJhbnNmb3JtRGVjaW1hbFRvQVNDSUkodSwgbGVuZ3RoKTsKKyAgICBpZiAoYXNjaWlkaWcgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlVbmljb2RlX0VuY29kZURlY2ltYWwodSwgbGVuZ3RoLCBidWZmZXIsIE5VTEwpKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUoYnVmZmVyKTsKKyAgICAvKiBSZXBsYWNlIG5vbi1BU0NJSSB3aGl0ZXNwYWNlIHdpdGggJyAnICovCisgICAgcHRyID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYXNjaWlkaWcpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBQeV9VTklDT0RFIGNoID0gcHRyW2ldOworICAgICAgICBpZiAoY2ggPiAxMjcgJiYgUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgIHB0cltpXSA9ICcgJzsKKyAgICB9CisgICAgYnVmZmVyID0gX1B5VW5pY29kZV9Bc1N0cmluZ0FuZFNpemUoYXNjaWlkaWcsICZidWZsZW4pOworICAgIGlmIChidWZmZXIgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0Zyb21TdHJpbmcoYnVmZmVyLCBOVUxMLCBiYXNlKTsKLSAgICBQeU1lbV9GUkVFKGJ1ZmZlcik7CisgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21TdHJpbmcoYnVmZmVyLCAmZW5kLCBiYXNlKTsKKyAgICBpZiAocmVzdWx0ICE9IE5VTEwgJiYgZW5kICE9IGJ1ZmZlciArIGJ1ZmxlbikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJudWxsIGJ5dGUgaW4gYXJndW1lbnQgZm9yIGludCgpIik7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICByZXN1bHQgPSBOVUxMOworICAgIH0KKyAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTIzNDYsMTIgKzIyODksMTIgQEAKICAgICAgICAgICAgc2luZ2xlLWRpZ2l0IHF1b3RpZW50IHEsIHJlbWFpbmRlciBpbiB2a1swOnNpemVfd10uICovCiAKICAgICAgICAgU0lHQ0hFQ0soewotICAgICAgICAgICAgUHlfREVDUkVGKGEpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgKnByZW0gPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0pCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGEpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgKnByZW0gPSBOVUxMOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfSk7CiAKICAgICAgICAgLyogZXN0aW1hdGUgcXVvdGllbnQgZGlnaXQgcTsgbWF5IG92ZXJlc3RpbWF0ZSBieSAxIChyYXJlKSAqLwogICAgICAgICB2dG9wID0gdmtbc2l6ZV93XTsKQEAgLTIzNzcsNyArMjMyMCw3IEBACiAgICAgICAgICAgICAgICAgKHN0d29kaWdpdHMpcSAqIChzdHdvZGlnaXRzKXcwW2ldOwogICAgICAgICAgICAgdmtbaV0gPSAoZGlnaXQpeiAmIFB5TG9uZ19NQVNLOwogICAgICAgICAgICAgemhpID0gKHNkaWdpdClQeV9BUklUSE1FVElDX1JJR0hUX1NISUZUKHN0d29kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHosIFB5TG9uZ19TSElGVCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiwgUHlMb25nX1NISUZUKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGFkZCB3IGJhY2sgaWYgcSB3YXMgdG9vIGxhcmdlICh0aGlzIGJyYW5jaCB0YWtlbiByYXJlbHkpICovCkBAIC0yNDA2LDYgKzIzNDksMTUzIEBACiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKGEpOwogfQogCisvKiBGb3IgYSBub256ZXJvIFB5TG9uZyBhLCBleHByZXNzIGEgaW4gdGhlIGZvcm0geCAqIDIqKmUsIHdpdGggMC41IDw9CisgICBhYnMoeCkgPCAxLjAgYW5kIGUgPj0gMDsgcmV0dXJuIHggYW5kIHB1dCBlIGluICplLiAgSGVyZSB4IGlzCisgICByb3VuZGVkIHRvIERCTF9NQU5UX0RJRyBzaWduaWZpY2FudCBiaXRzIHVzaW5nIHJvdW5kLWhhbGYtdG8tZXZlbi4KKyAgIElmIGEgPT0gMCwgcmV0dXJuIDAuMCBhbmQgc2V0ICplID0gMC4gIElmIHRoZSByZXN1bHRpbmcgZXhwb25lbnQKKyAgIGUgaXMgbGFyZ2VyIHRoYW4gUFlfU1NJWkVfVF9NQVgsIHJhaXNlIE92ZXJmbG93RXJyb3IgYW5kIHJldHVybgorICAgLTEuMC4gKi8KKworLyogYXR0ZW1wdCB0byBkZWZpbmUgMi4wKipEQkxfTUFOVF9ESUcgYXMgYSBjb21waWxlLXRpbWUgY29uc3RhbnQgKi8KKyNpZiBEQkxfTUFOVF9ESUcgPT0gNTMKKyNkZWZpbmUgRVhQMl9EQkxfTUFOVF9ESUcgOTAwNzE5OTI1NDc0MDk5Mi4wCisjZWxzZQorI2RlZmluZSBFWFAyX0RCTF9NQU5UX0RJRyAobGRleHAoMS4wLCBEQkxfTUFOVF9ESUcpKQorI2VuZGlmCisKK2RvdWJsZQorX1B5TG9uZ19GcmV4cChQeUxvbmdPYmplY3QgKmEsIFB5X3NzaXplX3QgKmUpCit7CisgICAgUHlfc3NpemVfdCBhX3NpemUsIGFfYml0cywgc2hpZnRfZGlnaXRzLCBzaGlmdF9iaXRzLCB4X3NpemU7CisgICAgLyogU2VlIGJlbG93IGZvciB3aHkgeF9kaWdpdHMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaC4gKi8KKyAgICBkaWdpdCByZW0sIHhfZGlnaXRzWzIgKyAoREJMX01BTlRfRElHICsgMSkgLyBQeUxvbmdfU0hJRlRdOworICAgIGRvdWJsZSBkeDsKKyAgICAvKiBDb3JyZWN0aW9uIHRlcm0gZm9yIHJvdW5kLWhhbGYtdG8tZXZlbiByb3VuZGluZy4gIEZvciBhIGRpZ2l0IHgsCisgICAgICAgInggKyBoYWxmX2V2ZW5fY29ycmVjdGlvblt4ICYgN10iIGdpdmVzIHggcm91bmRlZCB0byB0aGUgbmVhcmVzdAorICAgICAgIG11bHRpcGxlIG9mIDQsIHJvdW5kaW5nIHRpZXMgdG8gYSBtdWx0aXBsZSBvZiA4LiAqLworICAgIHN0YXRpYyBjb25zdCBpbnQgaGFsZl9ldmVuX2NvcnJlY3Rpb25bOF0gPSB7MCwgLTEsIC0yLCAxLCAwLCAtMSwgMiwgMX07CisKKyAgICBhX3NpemUgPSBBQlMoUHlfU0laRShhKSk7CisgICAgaWYgKGFfc2l6ZSA9PSAwKSB7CisgICAgICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgMDogc2lnbmlmaWNhbmQgMC4wLCBleHBvbmVudCAwLiAqLworICAgICAgICAqZSA9IDA7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorICAgIGFfYml0cyA9IGJpdHNfaW5fZGlnaXQoYS0+b2JfZGlnaXRbYV9zaXplLTFdKTsKKyAgICAvKiBUaGUgZm9sbG93aW5nIGlzIGFuIG92ZXJmbG93LWZyZWUgdmVyc2lvbiBvZiB0aGUgY2hlY2sKKyAgICAgICAiaWYgKChhX3NpemUgLSAxKSAqIFB5TG9uZ19TSElGVCArIGFfYml0cyA+IFBZX1NTSVpFX1RfTUFYKSAuLi4iICovCisgICAgaWYgKGFfc2l6ZSA+PSAoUFlfU1NJWkVfVF9NQVggLSAxKSAvIFB5TG9uZ19TSElGVCArIDEgJiYKKyAgICAgICAgKGFfc2l6ZSA+IChQWV9TU0laRV9UX01BWCAtIDEpIC8gUHlMb25nX1NISUZUICsgMSB8fAorICAgICAgICAgYV9iaXRzID4gKFBZX1NTSVpFX1RfTUFYIC0gMSkgJSBQeUxvbmdfU0hJRlQgKyAxKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICBhX2JpdHMgPSAoYV9zaXplIC0gMSkgKiBQeUxvbmdfU0hJRlQgKyBhX2JpdHM7CisKKyAgICAvKiBTaGlmdCB0aGUgZmlyc3QgREJMX01BTlRfRElHICsgMiBiaXRzIG9mIGEgaW50byB4X2RpZ2l0c1swOnhfc2l6ZV0KKyAgICAgICAoc2hpZnRpbmcgbGVmdCBpZiBhX2JpdHMgPD0gREJMX01BTlRfRElHICsgMikuCisKKyAgICAgICBOdW1iZXIgb2YgZGlnaXRzIG5lZWRlZCBmb3IgcmVzdWx0OiB3cml0ZSAvLyBmb3IgZmxvb3IgZGl2aXNpb24uCisgICAgICAgVGhlbiBpZiBzaGlmdGluZyBsZWZ0LCB3ZSBlbmQgdXAgdXNpbmcKKworICAgICAgICAgMSArIGFfc2l6ZSArIChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAvLyBQeUxvbmdfU0hJRlQKKworICAgICAgIGRpZ2l0cy4gIElmIHNoaWZ0aW5nIHJpZ2h0LCB3ZSB1c2UKKworICAgICAgICAgYV9zaXplIC0gKGFfYml0cyAtIERCTF9NQU5UX0RJRyAtIDIpIC8vIFB5TG9uZ19TSElGVAorCisgICAgICAgZGlnaXRzLiAgVXNpbmcgYV9zaXplID0gMSArIChhX2JpdHMgLSAxKSAvLyBQeUxvbmdfU0hJRlQgYWxvbmcgd2l0aAorICAgICAgIHRoZSBpbmVxdWFsaXRpZXMKKworICAgICAgICAgbSAvLyBQeUxvbmdfU0hJRlQgKyBuIC8vIFB5TG9uZ19TSElGVCA8PSAobSArIG4pIC8vIFB5TG9uZ19TSElGVAorICAgICAgICAgbSAvLyBQeUxvbmdfU0hJRlQgLSBuIC8vIFB5TG9uZ19TSElGVCA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSArIChtIC0gbiAtIDEpIC8vIFB5TG9uZ19TSElGVCwKKworICAgICAgIHZhbGlkIGZvciBhbnkgaW50ZWdlcnMgbSBhbmQgbiwgd2UgZmluZCB0aGF0IHhfc2l6ZSBzYXRpc2ZpZXMKKworICAgICAgICAgeF9zaXplIDw9IDIgKyAoREJMX01BTlRfRElHICsgMSkgLy8gUHlMb25nX1NISUZUCisKKyAgICAgICBpbiBib3RoIGNhc2VzLgorICAgICovCisgICAgaWYgKGFfYml0cyA8PSBEQkxfTUFOVF9ESUcgKyAyKSB7CisgICAgICAgIHNoaWZ0X2RpZ2l0cyA9IChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAvIFB5TG9uZ19TSElGVDsKKyAgICAgICAgc2hpZnRfYml0cyA9IChEQkxfTUFOVF9ESUcgKyAyIC0gYV9iaXRzKSAlIFB5TG9uZ19TSElGVDsKKyAgICAgICAgeF9zaXplID0gMDsKKyAgICAgICAgd2hpbGUgKHhfc2l6ZSA8IHNoaWZ0X2RpZ2l0cykKKyAgICAgICAgICAgIHhfZGlnaXRzW3hfc2l6ZSsrXSA9IDA7CisgICAgICAgIHJlbSA9IHZfbHNoaWZ0KHhfZGlnaXRzICsgeF9zaXplLCBhLT5vYl9kaWdpdCwgYV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNoaWZ0X2JpdHMpOworICAgICAgICB4X3NpemUgKz0gYV9zaXplOworICAgICAgICB4X2RpZ2l0c1t4X3NpemUrK10gPSByZW07CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzaGlmdF9kaWdpdHMgPSAoYV9iaXRzIC0gREJMX01BTlRfRElHIC0gMikgLyBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHNoaWZ0X2JpdHMgPSAoYV9iaXRzIC0gREJMX01BTlRfRElHIC0gMikgJSBQeUxvbmdfU0hJRlQ7CisgICAgICAgIHJlbSA9IHZfcnNoaWZ0KHhfZGlnaXRzLCBhLT5vYl9kaWdpdCArIHNoaWZ0X2RpZ2l0cywKKyAgICAgICAgICAgICAgICAgICAgICAgYV9zaXplIC0gc2hpZnRfZGlnaXRzLCAoaW50KXNoaWZ0X2JpdHMpOworICAgICAgICB4X3NpemUgPSBhX3NpemUgLSBzaGlmdF9kaWdpdHM7CisgICAgICAgIC8qIEZvciBjb3JyZWN0IHJvdW5kaW5nIGJlbG93LCB3ZSBuZWVkIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICAgICAgICAgICBiaXQgb2YgeCB0byBiZSAnc3RpY2t5JyBmb3IgdGhpcyBzaGlmdDogaWYgYW55IG9mIHRoZSBiaXRzCisgICAgICAgICAgIHNoaWZ0ZWQgb3V0IHdhcyBub256ZXJvLCB3ZSBzZXQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdAorICAgICAgICAgICBvZiB4LiAqLworICAgICAgICBpZiAocmVtKQorICAgICAgICAgICAgeF9kaWdpdHNbMF0gfD0gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd2hpbGUgKHNoaWZ0X2RpZ2l0cyA+IDApCisgICAgICAgICAgICAgICAgaWYgKGEtPm9iX2RpZ2l0Wy0tc2hpZnRfZGlnaXRzXSkgeworICAgICAgICAgICAgICAgICAgICB4X2RpZ2l0c1swXSB8PSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgfQorICAgIGFzc2VydCgxIDw9IHhfc2l6ZSAmJgorICAgICAgICAgICB4X3NpemUgPD0gKFB5X3NzaXplX3QpKHNpemVvZih4X2RpZ2l0cykvc2l6ZW9mKGRpZ2l0KSkpOworCisgICAgLyogUm91bmQsIGFuZCBjb252ZXJ0IHRvIGRvdWJsZS4gKi8KKyAgICB4X2RpZ2l0c1swXSArPSBoYWxmX2V2ZW5fY29ycmVjdGlvblt4X2RpZ2l0c1swXSAmIDddOworICAgIGR4ID0geF9kaWdpdHNbLS14X3NpemVdOworICAgIHdoaWxlICh4X3NpemUgPiAwKQorICAgICAgICBkeCA9IGR4ICogUHlMb25nX0JBU0UgKyB4X2RpZ2l0c1stLXhfc2l6ZV07CisKKyAgICAvKiBSZXNjYWxlOyAgbWFrZSBjb3JyZWN0aW9uIGlmIHJlc3VsdCBpcyAxLjAuICovCisgICAgZHggLz0gNC4wICogRVhQMl9EQkxfTUFOVF9ESUc7CisgICAgaWYgKGR4ID09IDEuMCkgeworICAgICAgICBpZiAoYV9iaXRzID09IFBZX1NTSVpFX1RfTUFYKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZHggPSAwLjU7CisgICAgICAgIGFfYml0cyArPSAxOworICAgIH0KKworICAgICplID0gYV9iaXRzOworICAgIHJldHVybiBQeV9TSVpFKGEpIDwgMCA/IC1keCA6IGR4OworCisgIG92ZXJmbG93OgorICAgIC8qIGV4cG9uZW50ID4gUFlfU1NJWkVfVF9NQVggKi8KKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgImh1Z2UgaW50ZWdlcjogbnVtYmVyIG9mIGJpdHMgb3ZlcmZsb3dzIGEgUHlfc3NpemVfdCIpOworICAgICplID0gMDsKKyAgICByZXR1cm4gLTEuMDsKK30KKworLyogR2V0IGEgQyBkb3VibGUgZnJvbSBhIGxvbmcgaW50IG9iamVjdC4gIFJvdW5kcyB0byB0aGUgbmVhcmVzdCBkb3VibGUsCisgICB1c2luZyB0aGUgcm91bmQtaGFsZi10by1ldmVuIHJ1bGUgaW4gdGhlIGNhc2Ugb2YgYSB0aWUuICovCisKK2RvdWJsZQorUHlMb25nX0FzRG91YmxlKFB5T2JqZWN0ICp2KQoreworICAgIFB5X3NzaXplX3QgZXhwb25lbnQ7CisgICAgZG91YmxlIHg7CisKKyAgICBpZiAodiA9PSBOVUxMIHx8ICFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMS4wOworICAgIH0KKyAgICB4ID0gX1B5TG9uZ19GcmV4cCgoUHlMb25nT2JqZWN0ICopdiwgJmV4cG9uZW50KTsKKyAgICBpZiAoKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB8fCBleHBvbmVudCA+IERCTF9NQVhfRVhQKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaW50IHRvbyBsYXJnZSB0byBjb252ZXJ0IHRvIGZsb2F0Iik7CisgICAgICAgIHJldHVybiAtMS4wOworICAgIH0KKyAgICByZXR1cm4gbGRleHAoeCwgKGludClleHBvbmVudCk7Cit9CisKIC8qIE1ldGhvZHMgKi8KIAogc3RhdGljIHZvaWQKQEAgLTI0MTQsMjIgKzI1MDQsMTMgQEAKICAgICBQeV9UWVBFKHYpLT50cF9mcmVlKHYpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotbG9uZ19yZXByKFB5T2JqZWN0ICp2KQotewotICAgIHJldHVybiBfUHlMb25nX0Zvcm1hdCh2LCAxMCk7Ci19Ci0KIHN0YXRpYyBpbnQKIGxvbmdfY29tcGFyZShQeUxvbmdPYmplY3QgKmEsIFB5TG9uZ09iamVjdCAqYikKIHsKICAgICBQeV9zc2l6ZV90IHNpZ247CiAKICAgICBpZiAoUHlfU0laRShhKSAhPSBQeV9TSVpFKGIpKSB7Ci0gICAgICAgIGlmIChBQlMoUHlfU0laRShhKSkgPT0gMCAmJiBBQlMoUHlfU0laRShiKSkgPT0gMCkKLSAgICAgICAgICAgIHNpZ24gPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaWduID0gUHlfU0laRShhKSAtIFB5X1NJWkUoYik7CisgICAgICAgIHNpZ24gPSBQeV9TSVpFKGEpIC0gUHlfU0laRShiKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X3NzaXplX3QgaSA9IEFCUyhQeV9TSVpFKGEpKTsKQEAgLTI0ODcsMTYgKzI1NjgsMTMgQEAKICAgICByZXR1cm4gdjsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIGxvbmdfaGFzaChQeUxvbmdPYmplY3QgKnYpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyB4OworICAgIFB5X3VoYXNoX3QgeDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IHNpZ247CiAKLSAgICAvKiBUaGlzIGlzIGRlc2lnbmVkIHNvIHRoYXQgUHl0aG9uIGludHMgYW5kIGxvbmdzIHdpdGggdGhlCi0gICAgICAgc2FtZSB2YWx1ZSBoYXNoIHRvIHRoZSBzYW1lIHZhbHVlLCBvdGhlcndpc2UgY29tcGFyaXNvbnMKLSAgICAgICBvZiBtYXBwaW5nIGtleXMgd2lsbCB0dXJuIG91dCB3ZWlyZCAqLwogICAgIGkgPSBQeV9TSVpFKHYpOwogICAgIHN3aXRjaChpKSB7CiAgICAgY2FzZSAtMTogcmV0dXJuIHYtPm9iX2RpZ2l0WzBdPT0xID8gLTIgOiAtKHNkaWdpdCl2LT5vYl9kaWdpdFswXTsKQEAgLTI1MDksMjMgKzI1ODcsNDIgQEAKICAgICAgICAgc2lnbiA9IC0xOwogICAgICAgICBpID0gLShpKTsKICAgICB9Ci0gICAgLyogVGhlIGZvbGxvd2luZyBsb29wIHByb2R1Y2VzIGEgQyB1bnNpZ25lZCBsb25nIHggc3VjaCB0aGF0IHggaXMKLSAgICAgICBjb25ncnVlbnQgdG8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHYgbW9kdWxvIFVMT05HX01BWC4gIFRoZQotICAgICAgIHJlc3VsdGluZyB4IGlzIG5vbnplcm8gaWYgYW5kIG9ubHkgaWYgdiBpcy4gKi8KICAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgLyogRm9yY2UgYSBuYXRpdmUgbG9uZyAjLWJpdHMgKDMyIG9yIDY0KSBjaXJjdWxhciBzaGlmdCAqLwotICAgICAgICB4ID0gKHggPj4gKDgqU0laRU9GX0xPTkctUHlMb25nX1NISUZUKSkgfCAoeCA8PCBQeUxvbmdfU0hJRlQpOworICAgICAgICAvKiBIZXJlIHggaXMgYSBxdWFudGl0eSBpbiB0aGUgcmFuZ2UgWzAsIF9QeUhBU0hfTU9EVUxVUyk7IHdlCisgICAgICAgICAgIHdhbnQgdG8gY29tcHV0ZSB4ICogMioqUHlMb25nX1NISUZUICsgdi0+b2JfZGlnaXRbaV0gbW9kdWxvCisgICAgICAgICAgIF9QeUhBU0hfTU9EVUxVUy4KKworICAgICAgICAgICBUaGUgY29tcHV0YXRpb24gb2YgeCAqIDIqKlB5TG9uZ19TSElGVCAlIF9QeUhBU0hfTU9EVUxVUworICAgICAgICAgICBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgdGhlIGJpdHMgb2YgeC4gIFRvIHNlZSB0aGlzLCB3cml0ZQorCisgICAgICAgICAgICAgeCAqIDIqKlB5TG9uZ19TSElGVCA9IHkgKiAyKipfUHlIQVNIX0JJVFMgKyB6CisKKyAgICAgICAgICAgd2hlcmUgeSA9IHggPj4gKF9QeUhBU0hfQklUUyAtIFB5TG9uZ19TSElGVCkgZ2l2ZXMgdGhlIHRvcAorICAgICAgICAgICBQeUxvbmdfU0hJRlQgYml0cyBvZiB4ICh0aG9zZSB0aGF0IGFyZSBzaGlmdGVkIG91dCBvZiB0aGUKKyAgICAgICAgICAgb3JpZ2luYWwgX1B5SEFTSF9CSVRTIGJpdHMsIGFuZCB6ID0gKHggPDwgUHlMb25nX1NISUZUKSAmCisgICAgICAgICAgIF9QeUhBU0hfTU9EVUxVUyBnaXZlcyB0aGUgYm90dG9tIF9QeUhBU0hfQklUUyAtIFB5TG9uZ19TSElGVAorICAgICAgICAgICBiaXRzIG9mIHgsIHNoaWZ0ZWQgdXAuICBUaGVuIHNpbmNlIDIqKl9QeUhBU0hfQklUUyBpcworICAgICAgICAgICBjb25ncnVlbnQgdG8gMSBtb2R1bG8gX1B5SEFTSF9NT0RVTFVTLCB5KjIqKl9QeUhBU0hfQklUUyBpcworICAgICAgICAgICBjb25ncnVlbnQgdG8geSBtb2R1bG8gX1B5SEFTSF9NT0RVTFVTLiAgU28KKworICAgICAgICAgICAgIHggKiAyKipQeUxvbmdfU0hJRlQgPSB5ICsgeiAobW9kIF9QeUhBU0hfTU9EVUxVUykuCisKKyAgICAgICAgICAgVGhlIHJpZ2h0LWhhbmQgc2lkZSBpcyBqdXN0IHRoZSByZXN1bHQgb2Ygcm90YXRpbmcgdGhlCisgICAgICAgICAgIF9QeUhBU0hfQklUUyBiaXRzIG9mIHggbGVmdCBieSBQeUxvbmdfU0hJRlQgcGxhY2VzOyBzaW5jZQorICAgICAgICAgICBub3QgYWxsIF9QeUhBU0hfQklUUyBiaXRzIG9mIHggYXJlIDFzLCB0aGUgc2FtZSBpcyB0cnVlCisgICAgICAgICAgIGFmdGVyIHJvdGF0aW9uLCBzbyAwIDw9IHkreiA8IF9QeUhBU0hfTU9EVUxVUyBhbmQgeSArIHogaXMKKyAgICAgICAgICAgdGhlIHJlZHVjdGlvbiBvZiB4KjIqKlB5TG9uZ19TSElGVCBtb2R1bG8KKyAgICAgICAgICAgX1B5SEFTSF9NT0RVTFVTLiAqLworICAgICAgICB4ID0gKCh4IDw8IFB5TG9uZ19TSElGVCkgJiBfUHlIQVNIX01PRFVMVVMpIHwKKyAgICAgICAgICAgICh4ID4+IChfUHlIQVNIX0JJVFMgLSBQeUxvbmdfU0hJRlQpKTsKICAgICAgICAgeCArPSB2LT5vYl9kaWdpdFtpXTsKLSAgICAgICAgLyogSWYgdGhlIGFkZGl0aW9uIGFib3ZlIG92ZXJmbG93ZWQgd2UgY29tcGVuc2F0ZSBieQotICAgICAgICAgICBpbmNyZW1lbnRpbmcuICBUaGlzIHByZXNlcnZlcyB0aGUgdmFsdWUgbW9kdWxvCi0gICAgICAgICAgIFVMT05HX01BWC4gKi8KLSAgICAgICAgaWYgKHggPCB2LT5vYl9kaWdpdFtpXSkKLSAgICAgICAgICAgIHgrKzsKKyAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7CiAgICAgfQogICAgIHggPSB4ICogc2lnbjsKLSAgICBpZiAoeCA9PSAodW5zaWduZWQgbG9uZyktMSkKLSAgICAgICAgeCA9ICh1bnNpZ25lZCBsb25nKS0yOwotICAgIHJldHVybiAobG9uZyl4OworICAgIGlmICh4ID09IChQeV91aGFzaF90KS0xKQorICAgICAgICB4ID0gKFB5X3VoYXNoX3QpLTI7CisgICAgcmV0dXJuIChQeV9oYXNoX3QpeDsKIH0KIAogCkBAIC0yNTQzLDggKzI2NDAsOCBAQAogICAgIGlmIChzaXplX2EgPCBzaXplX2IpIHsKICAgICAgICAgeyBQeUxvbmdPYmplY3QgKnRlbXAgPSBhOyBhID0gYjsgYiA9IHRlbXA7IH0KICAgICAgICAgeyBQeV9zc2l6ZV90IHNpemVfdGVtcCA9IHNpemVfYTsKLSAgICAgICAgICBzaXplX2EgPSBzaXplX2I7Ci0gICAgICAgICAgc2l6ZV9iID0gc2l6ZV90ZW1wOyB9CisgICAgICAgICAgICBzaXplX2EgPSBzaXplX2I7CisgICAgICAgICAgICBzaXplX2IgPSBzaXplX3RlbXA7IH0KICAgICB9CiAgICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfYSsxKTsKICAgICBpZiAoeiA9PSBOVUxMKQpAQCAtMjU3OSw4ICsyNjc2LDggQEAKICAgICAgICAgc2lnbiA9IC0xOwogICAgICAgICB7IFB5TG9uZ09iamVjdCAqdGVtcCA9IGE7IGEgPSBiOyBiID0gdGVtcDsgfQogICAgICAgICB7IFB5X3NzaXplX3Qgc2l6ZV90ZW1wID0gc2l6ZV9hOwotICAgICAgICAgIHNpemVfYSA9IHNpemVfYjsKLSAgICAgICAgICBzaXplX2IgPSBzaXplX3RlbXA7IH0KKyAgICAgICAgICAgIHNpemVfYSA9IHNpemVfYjsKKyAgICAgICAgICAgIHNpemVfYiA9IHNpemVfdGVtcDsgfQogICAgIH0KICAgICBlbHNlIGlmIChzaXplX2EgPT0gc2l6ZV9iKSB7CiAgICAgICAgIC8qIEZpbmQgaGlnaGVzdCBkaWdpdCB3aGVyZSBhIGFuZCBiIGRpZmZlcjogKi8KQEAgLTI3MDgsOSArMjgwNSw5IEBACiAgICAgICAgICAgICBkaWdpdCAqcGFlbmQgPSBhLT5vYl9kaWdpdCArIHNpemVfYTsKIAogICAgICAgICAgICAgU0lHQ0hFQ0soewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih6KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGNhcnJ5ID0gKnB6ICsgZiAqIGY7CiAgICAgICAgICAgICAqcHorKyA9IChkaWdpdCkoY2FycnkgJiBQeUxvbmdfTUFTSyk7CkBAIC0yNzQ2LDkgKzI4NDMsOSBAQAogICAgICAgICAgICAgZGlnaXQgKnBiZW5kID0gYi0+b2JfZGlnaXQgKyBzaXplX2I7CiAKICAgICAgICAgICAgIFNJR0NIRUNLKHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0pOwogCiAgICAgICAgICAgICB3aGlsZSAocGIgPCBwYmVuZCkgewogICAgICAgICAgICAgICAgIGNhcnJ5ICs9ICpweiArICpwYisrICogZjsKQEAgLTI3NzIsNyArMjg2OSwxMCBAQAogICAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCiAqLwogc3RhdGljIGludAota211bF9zcGxpdChQeUxvbmdPYmplY3QgKm4sIFB5X3NzaXplX3Qgc2l6ZSwgUHlMb25nT2JqZWN0ICoqaGlnaCwgUHlMb25nT2JqZWN0ICoqbG93KQora211bF9zcGxpdChQeUxvbmdPYmplY3QgKm4sCisgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgUHlMb25nT2JqZWN0ICoqaGlnaCwKKyAgICAgICAgICAgUHlMb25nT2JqZWN0ICoqbG93KQogewogICAgIFB5TG9uZ09iamVjdCAqaGksICpsbzsKICAgICBQeV9zc2l6ZV90IHNpemVfbG8sIHNpemVfaGk7CkBAIC0yOTYxLDcgKzMwNjEsNyBAQAogCiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKHJldCk7CiAKLSBmYWlsOgorICBmYWlsOgogICAgIFB5X1hERUNSRUYocmV0KTsKICAgICBQeV9YREVDUkVGKGFoKTsKICAgICBQeV9YREVDUkVGKGFsKTsKQEAgLTMwNzEsNyArMzE3MSw3IEBACiAgICAgUHlfREVDUkVGKGJzbGljZSk7CiAgICAgcmV0dXJuIGxvbmdfbm9ybWFsaXplKHJldCk7CiAKLSBmYWlsOgorICBmYWlsOgogICAgIFB5X0RFQ1JFRihyZXQpOwogICAgIFB5X1hERUNSRUYoYnNsaWNlKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTMxODMsNDcgKzMyODMsMjY3IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWRpdjsKIH0KIAorLyogUHlMb25nL1B5TG9uZyAtPiBmbG9hdCwgd2l0aCBjb3JyZWN0bHkgcm91bmRlZCByZXN1bHQuICovCisKKyNkZWZpbmUgTUFOVF9ESUdfRElHSVRTIChEQkxfTUFOVF9ESUcgLyBQeUxvbmdfU0hJRlQpCisjZGVmaW5lIE1BTlRfRElHX0JJVFMgKERCTF9NQU5UX0RJRyAlIFB5TG9uZ19TSElGVCkKKwogc3RhdGljIFB5T2JqZWN0ICoKLWxvbmdfdHJ1ZV9kaXZpZGUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiKQorbG9uZ190cnVlX2RpdmlkZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncpCiB7Ci0gICAgZG91YmxlIGFkLCBiZDsKLSAgICBpbnQgZmFpbGVkLCBhZXhwID0gLTEsIGJleHAgPSAtMTsKKyAgICBQeUxvbmdPYmplY3QgKmEsICpiLCAqeDsKKyAgICBQeV9zc2l6ZV90IGFfc2l6ZSwgYl9zaXplLCBzaGlmdCwgZXh0cmFfYml0cywgZGlmZiwgeF9zaXplLCB4X2JpdHM7CisgICAgZGlnaXQgbWFzaywgbG93OworICAgIGludCBpbmV4YWN0LCBuZWdhdGUsIGFfaXNfc21hbGwsIGJfaXNfc21hbGw7CisgICAgZG91YmxlIGR4LCByZXN1bHQ7CiAKLSAgICBDSEVDS19CSU5PUChhLCBiKTsKLSAgICBhZCA9IF9QeUxvbmdfQXNTY2FsZWREb3VibGUoKFB5T2JqZWN0ICopYSwgJmFleHApOwotICAgIGJkID0gX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSgoUHlPYmplY3QgKiliLCAmYmV4cCk7Ci0gICAgZmFpbGVkID0gKGFkID09IC0xLjAgfHwgYmQgPT0gLTEuMCkgJiYgUHlFcnJfT2NjdXJyZWQoKTsKLSAgICBpZiAoZmFpbGVkKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAvKiAnYWV4cCcgYW5kICdiZXhwJyB3ZXJlIGluaXRpYWxpemVkIHRvIC0xIHRvIHNpbGVuY2UgZ2NjLTQuMC54LAotICAgICAgIGJ1dCBzaG91bGQgcmVhbGx5IGJlIHNldCBjb3JyZWN0bHkgYWZ0ZXIgc3VjY2Vzc2Z1bCBjYWxscyB0bwotICAgICAgIF9QeUxvbmdfQXNTY2FsZWREb3VibGUoKSAqLwotICAgIGFzc2VydChhZXhwID49IDAgJiYgYmV4cCA+PSAwKTsKKyAgICBDSEVDS19CSU5PUCh2LCB3KTsKKyAgICBhID0gKFB5TG9uZ09iamVjdCAqKXY7CisgICAgYiA9IChQeUxvbmdPYmplY3QgKil3OwogCi0gICAgaWYgKGJkID09IDAuMCkgeworICAgIC8qCisgICAgICAgTWV0aG9kIGluIGEgbnV0c2hlbGw6CisKKyAgICAgICAgIDAuIHJlZHVjZSB0byBjYXNlIGEsIGIgPiAwOyBmaWx0ZXIgb3V0IG9idmlvdXMgdW5kZXJmbG93L292ZXJmbG93CisgICAgICAgICAxLiBjaG9vc2UgYSBzdWl0YWJsZSBpbnRlZ2VyICdzaGlmdCcKKyAgICAgICAgIDIuIHVzZSBpbnRlZ2VyIGFyaXRobWV0aWMgdG8gY29tcHV0ZSB4ID0gZmxvb3IoMioqLXNoaWZ0KmEvYikKKyAgICAgICAgIDMuIGFkanVzdCB4IGZvciBjb3JyZWN0IHJvdW5kaW5nCisgICAgICAgICA0LiBjb252ZXJ0IHggdG8gYSBkb3VibGUgZHggd2l0aCB0aGUgc2FtZSB2YWx1ZQorICAgICAgICAgNS4gcmV0dXJuIGxkZXhwKGR4LCBzaGlmdCkuCisKKyAgICAgICBJbiBtb3JlIGRldGFpbDoKKworICAgICAgIDAuIEZvciBhbnkgYSwgYS8wIHJhaXNlcyBaZXJvRGl2aXNpb25FcnJvcjsgZm9yIG5vbnplcm8gYiwgMC9iCisgICAgICAgcmV0dXJucyBlaXRoZXIgMC4wIG9yIC0wLjAsIGRlcGVuZGluZyBvbiB0aGUgc2lnbiBvZiBiLiAgRm9yIGEgYW5kCisgICAgICAgYiBib3RoIG5vbnplcm8sIGlnbm9yZSBzaWducyBvZiBhIGFuZCBiLCBhbmQgYWRkIHRoZSBzaWduIGJhY2sgaW4KKyAgICAgICBhdCB0aGUgZW5kLiAgTm93IHdyaXRlIGFfYml0cyBhbmQgYl9iaXRzIGZvciB0aGUgYml0IGxlbmd0aHMgb2YgYQorICAgICAgIGFuZCBiIHJlc3BlY3RpdmVseSAodGhhdCBpcywgYV9iaXRzID0gMSArIGZsb29yKGxvZ18yKGEpKTsgbGlrZXdpc2UKKyAgICAgICBmb3IgYikuICBUaGVuCisKKyAgICAgICAgICAyKiooYV9iaXRzIC0gYl9iaXRzIC0gMSkgPCBhL2IgPCAyKiooYV9iaXRzIC0gYl9iaXRzICsgMSkuCisKKyAgICAgICBTbyBpZiBhX2JpdHMgLSBiX2JpdHMgPiBEQkxfTUFYX0VYUCB0aGVuIGEvYiA+IDIqKkRCTF9NQVhfRVhQIGFuZAorICAgICAgIHNvIG92ZXJmbG93cy4gIFNpbWlsYXJseSwgaWYgYV9iaXRzIC0gYl9iaXRzIDwgREJMX01JTl9FWFAgLQorICAgICAgIERCTF9NQU5UX0RJRyAtIDEgdGhlbiBhL2IgdW5kZXJmbG93cyB0byAwLiAgV2l0aCB0aGVzZSBjYXNlcyBvdXQgb2YKKyAgICAgICB0aGUgd2F5LCB3ZSBjYW4gYXNzdW1lIHRoYXQKKworICAgICAgICAgIERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gMSA8PSBhX2JpdHMgLSBiX2JpdHMgPD0gREJMX01BWF9FWFAuCisKKyAgICAgICAxLiBUaGUgaW50ZWdlciAnc2hpZnQnIGlzIGNob3NlbiBzbyB0aGF0IHggaGFzIHRoZSByaWdodCBudW1iZXIgb2YKKyAgICAgICBiaXRzIGZvciBhIGRvdWJsZSwgcGx1cyB0d28gb3IgdGhyZWUgZXh0cmEgYml0cyB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgIGluIHRoZSByb3VuZGluZyBkZWNpc2lvbnMuICBXcml0aW5nIGFfYml0cyBhbmQgYl9iaXRzIGZvciB0aGUKKyAgICAgICBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBpbiBhIGFuZCBiIHJlc3BlY3RpdmVseSwgYQorICAgICAgIHN0cmFpZ2h0Zm9yd2FyZCBmb3JtdWxhIGZvciBzaGlmdCBpczoKKworICAgICAgICAgIHNoaWZ0ID0gYV9iaXRzIC0gYl9iaXRzIC0gREJMX01BTlRfRElHIC0gMgorCisgICAgICAgVGhpcyBpcyBmaW5lIGluIHRoZSB1c3VhbCBjYXNlLCBidXQgaWYgYS9iIGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgICAgICBzbWFsbGVzdCBub3JtYWwgZmxvYXQgdGhlbiBpdCBjYW4gbGVhZCB0byBkb3VibGUgcm91bmRpbmcgb24gYW4KKyAgICAgICBJRUVFIDc1NCBwbGF0Zm9ybSwgZ2l2aW5nIGluY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0cy4gIFNvIHdlCisgICAgICAgYWRqdXN0IHRoZSBmb3JtdWxhIHNsaWdodGx5LiAgVGhlIGFjdHVhbCBmb3JtdWxhIHVzZWQgaXM6CisKKyAgICAgICAgICAgc2hpZnQgPSBNQVgoYV9iaXRzIC0gYl9iaXRzLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyCisKKyAgICAgICAyLiBUaGUgcXVhbnRpdHkgeCBpcyBjb21wdXRlZCBieSBmaXJzdCBzaGlmdGluZyBhIChsZWZ0IC1zaGlmdCBiaXRzCisgICAgICAgaWYgc2hpZnQgPD0gMCwgcmlnaHQgc2hpZnQgYml0cyBpZiBzaGlmdCA+IDApIGFuZCB0aGVuIGRpdmlkaW5nIGJ5CisgICAgICAgYi4gIEZvciBib3RoIHRoZSBzaGlmdCBhbmQgdGhlIGRpdmlzaW9uLCB3ZSBrZWVwIHRyYWNrIG9mIHdoZXRoZXIKKyAgICAgICB0aGUgcmVzdWx0IGlzIGluZXhhY3QsIGluIGEgZmxhZyAnaW5leGFjdCc7IHRoaXMgaW5mb3JtYXRpb24gaXMKKyAgICAgICBuZWVkZWQgYXQgdGhlIHJvdW5kaW5nIHN0YWdlLgorCisgICAgICAgV2l0aCB0aGUgY2hvaWNlIG9mIHNoaWZ0IGFib3ZlLCB0b2dldGhlciB3aXRoIG91ciBhc3N1bXB0aW9uIHRoYXQKKyAgICAgICBhX2JpdHMgLSBiX2JpdHMgPj0gREJMX01JTl9FWFAgLSBEQkxfTUFOVF9ESUcgLSAxLCBpdCBmb2xsb3dzCisgICAgICAgdGhhdCB4ID49IDEuCisKKyAgICAgICAzLiBOb3cgeCAqIDIqKnNoaWZ0IDw9IGEvYiA8ICh4KzEpICogMioqc2hpZnQuICBXZSB3YW50IHRvIHJlcGxhY2UKKyAgICAgICB0aGlzIHdpdGggYW4gZXhhY3RseSByZXByZXNlbnRhYmxlIGZsb2F0IG9mIHRoZSBmb3JtCisKKyAgICAgICAgICByb3VuZCh4LzIqKmV4dHJhX2JpdHMpICogMioqKGV4dHJhX2JpdHMrc2hpZnQpLgorCisgICAgICAgRm9yIGZsb2F0IHJlcHJlc2VudGFiaWxpdHksIHdlIG5lZWQgeC8yKipleHRyYV9iaXRzIDwKKyAgICAgICAyKipEQkxfTUFOVF9ESUcgYW5kIGV4dHJhX2JpdHMgKyBzaGlmdCA+PSBEQkxfTUlOX0VYUCAtCisgICAgICAgREJMX01BTlRfRElHLiAgVGhpcyB0cmFuc2xhdGVzIHRvIHRoZSBjb25kaXRpb246CisKKyAgICAgICAgICBleHRyYV9iaXRzID49IE1BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHCisKKyAgICAgICBUbyByb3VuZCwgd2UganVzdCBtb2RpZnkgdGhlIGJvdHRvbSBkaWdpdCBvZiB4IGluLXBsYWNlOyB0aGlzIGNhbgorICAgICAgIGVuZCB1cCBnaXZpbmcgYSBkaWdpdCB3aXRoIHZhbHVlID4gUHlMT05HX01BU0ssIGJ1dCB0aGF0J3Mgbm90IGEKKyAgICAgICBwcm9ibGVtIHNpbmNlIGRpZ2l0cyBjYW4gaG9sZCB2YWx1ZXMgdXAgdG8gMipQeUxPTkdfTUFTSysxLgorCisgICAgICAgV2l0aCB0aGUgb3JpZ2luYWwgY2hvaWNlcyBmb3Igc2hpZnQgYWJvdmUsIGV4dHJhX2JpdHMgd2lsbCBhbHdheXMKKyAgICAgICBiZSAyIG9yIDMuICBUaGVuIHJvdW5kaW5nIHVuZGVyIHRoZSByb3VuZC1oYWxmLXRvLWV2ZW4gcnVsZSwgd2UKKyAgICAgICByb3VuZCB1cCBpZmYgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgb2YgdGhlIGV4dHJhIGJpdHMgaXMgMSwgYW5kCisgICAgICAgZWl0aGVyOiAoYSkgdGhlIGNvbXB1dGF0aW9uIG9mIHggaW4gc3RlcCAyIGhhZCBhbiBpbmV4YWN0IHJlc3VsdCwKKyAgICAgICBvciAoYikgYXQgbGVhc3Qgb25lIG90aGVyIG9mIHRoZSBleHRyYSBiaXRzIGlzIDEsIG9yIChjKSB0aGUgbGVhc3QKKyAgICAgICBzaWduaWZpY2FudCBiaXQgb2YgeCAoYWJvdmUgdGhvc2UgdG8gYmUgcm91bmRlZCkgaXMgMS4KKworICAgICAgIDQuIENvbnZlcnNpb24gdG8gYSBkb3VibGUgaXMgc3RyYWlnaHRmb3J3YXJkOyBhbGwgZmxvYXRpbmctcG9pbnQKKyAgICAgICBvcGVyYXRpb25zIGludm9sdmVkIGluIHRoZSBjb252ZXJzaW9uIGFyZSBleGFjdCwgc28gdGhlcmUncyBubworICAgICAgIGRhbmdlciBvZiByb3VuZGluZyBlcnJvcnMuCisKKyAgICAgICA1LiBVc2UgbGRleHAoeCwgc2hpZnQpIHRvIGNvbXB1dGUgeCoyKipzaGlmdCwgdGhlIGZpbmFsIHJlc3VsdC4KKyAgICAgICBUaGUgcmVzdWx0IHdpbGwgYWx3YXlzIGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhcyBhIGRvdWJsZSwgZXhjZXB0CisgICAgICAgaW4gdGhlIGNhc2UgdGhhdCBpdCBvdmVyZmxvd3MuICBUbyBhdm9pZCBkZXBlbmRlbmNlIG9uIHRoZSBleGFjdAorICAgICAgIGJlaGF2aW91ciBvZiBsZGV4cCBvbiBvdmVyZmxvdywgd2UgY2hlY2sgZm9yIG92ZXJmbG93IGJlZm9yZQorICAgICAgIGFwcGx5aW5nIGxkZXhwLiAgVGhlIHJlc3VsdCBvZiBsZGV4cCBpcyBhZGp1c3RlZCBmb3Igc2lnbiBiZWZvcmUKKyAgICAgICByZXR1cm5pbmcuCisgICAgKi8KKworICAgIC8qIFJlZHVjZSB0byBjYXNlIHdoZXJlIGEgYW5kIGIgYXJlIGJvdGggcG9zaXRpdmUuICovCisgICAgYV9zaXplID0gQUJTKFB5X1NJWkUoYSkpOworICAgIGJfc2l6ZSA9IEFCUyhQeV9TSVpFKGIpKTsKKyAgICBuZWdhdGUgPSAoUHlfU0laRShhKSA8IDApIF4gKFB5X1NJWkUoYikgPCAwKTsKKyAgICBpZiAoYl9zaXplID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1plcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgImludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybyIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICJkaXZpc2lvbiBieSB6ZXJvIik7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGlmIChhX3NpemUgPT0gMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKKworICAgIC8qIEZhc3QgcGF0aCBmb3IgYSBhbmQgYiBzbWFsbCAoZXhhY3RseSByZXByZXNlbnRhYmxlIGluIGEgZG91YmxlKS4KKyAgICAgICBSZWxpZXMgb24gZmxvYXRpbmctcG9pbnQgZGl2aXNpb24gYmVpbmcgY29ycmVjdGx5IHJvdW5kZWQ7IHJlc3VsdHMKKyAgICAgICBtYXkgYmUgc3ViamVjdCB0byBkb3VibGUgcm91bmRpbmcgb24geDg2IG1hY2hpbmVzIHRoYXQgb3BlcmF0ZSB3aXRoCisgICAgICAgdGhlIHg4NyBGUFUgc2V0IHRvIDY0LWJpdCBwcmVjaXNpb24uICovCisgICAgYV9pc19zbWFsbCA9IGFfc2l6ZSA8PSBNQU5UX0RJR19ESUdJVFMgfHwKKyAgICAgICAgKGFfc2l6ZSA9PSBNQU5UX0RJR19ESUdJVFMrMSAmJgorICAgICAgICAgYS0+b2JfZGlnaXRbTUFOVF9ESUdfRElHSVRTXSA+PiBNQU5UX0RJR19CSVRTID09IDApOworICAgIGJfaXNfc21hbGwgPSBiX3NpemUgPD0gTUFOVF9ESUdfRElHSVRTIHx8CisgICAgICAgIChiX3NpemUgPT0gTUFOVF9ESUdfRElHSVRTKzEgJiYKKyAgICAgICAgIGItPm9iX2RpZ2l0W01BTlRfRElHX0RJR0lUU10gPj4gTUFOVF9ESUdfQklUUyA9PSAwKTsKKyAgICBpZiAoYV9pc19zbWFsbCAmJiBiX2lzX3NtYWxsKSB7CisgICAgICAgIGRvdWJsZSBkYSwgZGI7CisgICAgICAgIGRhID0gYS0+b2JfZGlnaXRbLS1hX3NpemVdOworICAgICAgICB3aGlsZSAoYV9zaXplID4gMCkKKyAgICAgICAgICAgIGRhID0gZGEgKiBQeUxvbmdfQkFTRSArIGEtPm9iX2RpZ2l0Wy0tYV9zaXplXTsKKyAgICAgICAgZGIgPSBiLT5vYl9kaWdpdFstLWJfc2l6ZV07CisgICAgICAgIHdoaWxlIChiX3NpemUgPiAwKQorICAgICAgICAgICAgZGIgPSBkYiAqIFB5TG9uZ19CQVNFICsgYi0+b2JfZGlnaXRbLS1iX3NpemVdOworICAgICAgICByZXN1bHQgPSBkYSAvIGRiOworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQogCi0gICAgLyogVHJ1ZSB2YWx1ZSBpcyB2ZXJ5IGNsb3NlIHRvIGFkL2JkICogMioqKFB5TG9uZ19TSElGVCooYWV4cC1iZXhwKSkgKi8KLSAgICBhZCAvPSBiZDsgICAgICAgICAgIC8qIG92ZXJmbG93L3VuZGVyZmxvdyBpbXBvc3NpYmxlIGhlcmUgKi8KLSAgICBhZXhwIC09IGJleHA7Ci0gICAgaWYgKGFleHAgPiBJTlRfTUFYIC8gUHlMb25nX1NISUZUKQorICAgIC8qIENhdGNoIG9idmlvdXMgY2FzZXMgb2YgdW5kZXJmbG93IGFuZCBvdmVyZmxvdyAqLworICAgIGRpZmYgPSBhX3NpemUgLSBiX3NpemU7CisgICAgaWYgKGRpZmYgPiBQWV9TU0laRV9UX01BWC9QeUxvbmdfU0hJRlQgLSAxKQorICAgICAgICAvKiBFeHRyZW1lIG92ZXJmbG93ICovCiAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgZWxzZSBpZiAoYWV4cCA8IC0oSU5UX01BWCAvIFB5TG9uZ19TSElGVCkpCi0gICAgICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUoMC4wKTsgICAgICAgICAvKiB1bmRlcmZsb3cgdG8gMCAqLwotICAgIGVycm5vID0gMDsKLSAgICBhZCA9IGxkZXhwKGFkLCBhZXhwICogUHlMb25nX1NISUZUKTsKLSAgICBpZiAoUHlfT1ZFUkZMT1dFRChhZCkpIC8qIGlnbm9yZSB1bmRlcmZsb3cgdG8gMC4wICovCisgICAgZWxzZSBpZiAoZGlmZiA8IDEgLSBQWV9TU0laRV9UX01BWC9QeUxvbmdfU0hJRlQpCisgICAgICAgIC8qIEV4dHJlbWUgdW5kZXJmbG93ICovCisgICAgICAgIGdvdG8gdW5kZXJmbG93X29yX3plcm87CisgICAgLyogTmV4dCBsaW5lIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3dpbmcgYSBQeV9zc2l6ZV90ICovCisgICAgZGlmZiA9IGRpZmYgKiBQeUxvbmdfU0hJRlQgKyBiaXRzX2luX2RpZ2l0KGEtPm9iX2RpZ2l0W2Ffc2l6ZSAtIDFdKSAtCisgICAgICAgIGJpdHNfaW5fZGlnaXQoYi0+b2JfZGlnaXRbYl9zaXplIC0gMV0pOworICAgIC8qIE5vdyBkaWZmID0gYV9iaXRzIC0gYl9iaXRzLiAqLworICAgIGlmIChkaWZmID4gREJMX01BWF9FWFApCiAgICAgICAgIGdvdG8gb3ZlcmZsb3c7Ci0gICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZShhZCk7CisgICAgZWxzZSBpZiAoZGlmZiA8IERCTF9NSU5fRVhQIC0gREJMX01BTlRfRElHIC0gMSkKKyAgICAgICAgZ290byB1bmRlcmZsb3dfb3JfemVybzsKIAotb3ZlcmZsb3c6CisgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCisgICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKworICAgIGluZXhhY3QgPSAwOworCisgICAgLyogeCA9IGFicyhhICogMioqLXNoaWZ0KSAqLworICAgIGlmIChzaGlmdCA8PSAwKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSwgc2hpZnRfZGlnaXRzID0gLXNoaWZ0IC8gUHlMb25nX1NISUZUOworICAgICAgICBkaWdpdCByZW07CisgICAgICAgIC8qIHggPSBhIDw8IC1zaGlmdCAqLworICAgICAgICBpZiAoYV9zaXplID49IFBZX1NTSVpFX1RfTUFYIC0gMSAtIHNoaWZ0X2RpZ2l0cykgeworICAgICAgICAgICAgLyogSW4gcHJhY3RpY2UsIGl0J3MgcHJvYmFibHkgaW1wb3NzaWJsZSB0byBlbmQgdXAKKyAgICAgICAgICAgICAgIGhlcmUuICBCb3RoIGEgYW5kIGIgd291bGQgaGF2ZSB0byBiZSBlbm9ybW91cywKKyAgICAgICAgICAgICAgIHVzaW5nIGNsb3NlIHRvIFNJWkVfVF9NQVggYnl0ZXMgb2YgbWVtb3J5IGVhY2guICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJtZWRpYXRlIG92ZXJmbG93IGR1cmluZyBkaXZpc2lvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICB4ID0gX1B5TG9uZ19OZXcoYV9zaXplICsgc2hpZnRfZGlnaXRzICsgMSk7CisgICAgICAgIGlmICh4ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2hpZnRfZGlnaXRzOyBpKyspCisgICAgICAgICAgICB4LT5vYl9kaWdpdFtpXSA9IDA7CisgICAgICAgIHJlbSA9IHZfbHNoaWZ0KHgtPm9iX2RpZ2l0ICsgc2hpZnRfZGlnaXRzLCBhLT5vYl9kaWdpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgYV9zaXplLCAtc2hpZnQgJSBQeUxvbmdfU0hJRlQpOworICAgICAgICB4LT5vYl9kaWdpdFthX3NpemUgKyBzaGlmdF9kaWdpdHNdID0gcmVtOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfc3NpemVfdCBzaGlmdF9kaWdpdHMgPSBzaGlmdCAvIFB5TG9uZ19TSElGVDsKKyAgICAgICAgZGlnaXQgcmVtOworICAgICAgICAvKiB4ID0gYSA+PiBzaGlmdCAqLworICAgICAgICBhc3NlcnQoYV9zaXplID49IHNoaWZ0X2RpZ2l0cyk7CisgICAgICAgIHggPSBfUHlMb25nX05ldyhhX3NpemUgLSBzaGlmdF9kaWdpdHMpOworICAgICAgICBpZiAoeCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVtID0gdl9yc2hpZnQoeC0+b2JfZGlnaXQsIGEtPm9iX2RpZ2l0ICsgc2hpZnRfZGlnaXRzLAorICAgICAgICAgICAgICAgICAgICAgICBhX3NpemUgLSBzaGlmdF9kaWdpdHMsIHNoaWZ0ICUgUHlMb25nX1NISUZUKTsKKyAgICAgICAgLyogc2V0IGluZXhhY3QgaWYgYW55IG9mIHRoZSBiaXRzIHNoaWZ0ZWQgb3V0IGlzIG5vbnplcm8gKi8KKyAgICAgICAgaWYgKHJlbSkKKyAgICAgICAgICAgIGluZXhhY3QgPSAxOworICAgICAgICB3aGlsZSAoIWluZXhhY3QgJiYgc2hpZnRfZGlnaXRzID4gMCkKKyAgICAgICAgICAgIGlmIChhLT5vYl9kaWdpdFstLXNoaWZ0X2RpZ2l0c10pCisgICAgICAgICAgICAgICAgaW5leGFjdCA9IDE7CisgICAgfQorICAgIGxvbmdfbm9ybWFsaXplKHgpOworICAgIHhfc2l6ZSA9IFB5X1NJWkUoeCk7CisKKyAgICAvKiB4IC8vPSBiLiBJZiB0aGUgcmVtYWluZGVyIGlzIG5vbnplcm8sIHNldCBpbmV4YWN0LiAgV2Ugb3duIHRoZSBvbmx5CisgICAgICAgcmVmZXJlbmNlIHRvIHgsIHNvIGl0J3Mgc2FmZSB0byBtb2RpZnkgaXQgaW4tcGxhY2UuICovCisgICAgaWYgKGJfc2l6ZSA9PSAxKSB7CisgICAgICAgIGRpZ2l0IHJlbSA9IGlucGxhY2VfZGl2cmVtMSh4LT5vYl9kaWdpdCwgeC0+b2JfZGlnaXQsIHhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGItPm9iX2RpZ2l0WzBdKTsKKyAgICAgICAgbG9uZ19ub3JtYWxpemUoeCk7CisgICAgICAgIGlmIChyZW0pCisgICAgICAgICAgICBpbmV4YWN0ID0gMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5TG9uZ09iamVjdCAqZGl2LCAqcmVtOworICAgICAgICBkaXYgPSB4X2RpdnJlbSh4LCBiLCAmcmVtKTsKKyAgICAgICAgUHlfREVDUkVGKHgpOworICAgICAgICB4ID0gZGl2OworICAgICAgICBpZiAoeCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5X1NJWkUocmVtKSkKKyAgICAgICAgICAgIGluZXhhY3QgPSAxOworICAgICAgICBQeV9ERUNSRUYocmVtKTsKKyAgICB9CisgICAgeF9zaXplID0gQUJTKFB5X1NJWkUoeCkpOworICAgIGFzc2VydCh4X3NpemUgPiAwKTsgLyogcmVzdWx0IG9mIGRpdmlzaW9uIGlzIG5ldmVyIHplcm8gKi8KKyAgICB4X2JpdHMgPSAoeF9zaXplLTEpKlB5TG9uZ19TSElGVCtiaXRzX2luX2RpZ2l0KHgtPm9iX2RpZ2l0W3hfc2l6ZS0xXSk7CisKKyAgICAvKiBUaGUgbnVtYmVyIG9mIGV4dHJhIGJpdHMgdGhhdCBoYXZlIHRvIGJlIHJvdW5kZWQgYXdheS4gKi8KKyAgICBleHRyYV9iaXRzID0gTUFYKHhfYml0cywgREJMX01JTl9FWFAgLSBzaGlmdCkgLSBEQkxfTUFOVF9ESUc7CisgICAgYXNzZXJ0KGV4dHJhX2JpdHMgPT0gMiB8fCBleHRyYV9iaXRzID09IDMpOworCisgICAgLyogUm91bmQgYnkgZGlyZWN0bHkgbW9kaWZ5aW5nIHRoZSBsb3cgZGlnaXQgb2YgeC4gKi8KKyAgICBtYXNrID0gKGRpZ2l0KTEgPDwgKGV4dHJhX2JpdHMgLSAxKTsKKyAgICBsb3cgPSB4LT5vYl9kaWdpdFswXSB8IGluZXhhY3Q7CisgICAgaWYgKGxvdyAmIG1hc2sgJiYgbG93ICYgKDMqbWFzay0xKSkKKyAgICAgICAgbG93ICs9IG1hc2s7CisgICAgeC0+b2JfZGlnaXRbMF0gPSBsb3cgJiB+KG1hc2stMVUpOworCisgICAgLyogQ29udmVydCB4IHRvIGEgZG91YmxlIGR4OyB0aGUgY29udmVyc2lvbiBpcyBleGFjdC4gKi8KKyAgICBkeCA9IHgtPm9iX2RpZ2l0Wy0teF9zaXplXTsKKyAgICB3aGlsZSAoeF9zaXplID4gMCkKKyAgICAgICAgZHggPSBkeCAqIFB5TG9uZ19CQVNFICsgeC0+b2JfZGlnaXRbLS14X3NpemVdOworICAgIFB5X0RFQ1JFRih4KTsKKworICAgIC8qIENoZWNrIHdoZXRoZXIgbGRleHAgcmVzdWx0IHdpbGwgb3ZlcmZsb3cgYSBkb3VibGUuICovCisgICAgaWYgKHNoaWZ0ICsgeF9iaXRzID49IERCTF9NQVhfRVhQICYmCisgICAgICAgIChzaGlmdCArIHhfYml0cyA+IERCTF9NQVhfRVhQIHx8IGR4ID09IGxkZXhwKDEuMCwgKGludCl4X2JpdHMpKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXN1bHQgPSBsZGV4cChkeCwgKGludClzaGlmdCk7CisKKyAgc3VjY2VzczoKKyAgICByZXR1cm4gUHlGbG9hdF9Gcm9tRG91YmxlKG5lZ2F0ZSA/IC1yZXN1bHQgOiByZXN1bHQpOworCisgIHVuZGVyZmxvd19vcl96ZXJvOgorICAgIHJldHVybiBQeUZsb2F0X0Zyb21Eb3VibGUobmVnYXRlID8gLTAuMCA6IDAuMCk7CisKKyAgb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICJpbnQvaW50IHRvbyBsYXJnZSBmb3IgYSBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAiaW50ZWdlciBkaXZpc2lvbiByZXN1bHQgdG9vIGxhcmdlIGZvciBhIGZsb2F0Iik7CisgIGVycm9yOgogICAgIHJldHVybiBOVUxMOwotCiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zMjk4LDcgKzM2MTgsNyBAQAogICAgIGlmIChQeV9TSVpFKGIpIDwgMCkgeyAgLyogaWYgZXhwb25lbnQgaXMgbmVnYXRpdmUgKi8KICAgICAgICAgaWYgKGMpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJwb3coKSAybmQgYXJndW1lbnQgIgotICAgICAgICAgICAgICAgICJjYW5ub3QgYmUgbmVnYXRpdmUgd2hlbiAzcmQgYXJndW1lbnQgc3BlY2lmaWVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBiZSBuZWdhdGl2ZSB3aGVuIDNyZCBhcmd1bWVudCBzcGVjaWZpZWQiKTsKICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC0zMzY0LDI2ICszNjg0LDI4IEBACiAgICAgICogaXMgTlVMTC4KICAgICAgKi8KICNkZWZpbmUgUkVEVUNFKFgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjICE9IE5VTEwpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChsX2Rpdm1vZChYLCBjLCBOVUxMLCAmdGVtcCkgPCAwKSAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9YREVDUkVGKFgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFggPSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdGVtcCA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoYyAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAobF9kaXZtb2QoWCwgYywgTlVMTCwgJnRlbXApIDwgMCkgICAgICAgIFwKKyAgICAgICAgICAgICAgICBnb3RvIEVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfWERFQ1JFRihYKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBYID0gdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHRlbXAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQogCiAgICAgLyogTXVsdGlwbHkgdHdvIHZhbHVlcywgdGhlbiByZWR1Y2UgdGhlIHJlc3VsdDoKICAgICAgICByZXN1bHQgPSBYKlkgJSBjLiAgSWYgYyBpcyBOVUxMLCBza2lwIHRoZSBtb2QuICovCi0jZGVmaW5lIE1VTFQoWCwgWSwgcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHRlbXAgPSAoUHlMb25nT2JqZWN0ICopbG9uZ19tdWwoWCwgWSk7ICAgICAgICAgICAgICBcCi0gICAgaWYgKHRlbXAgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ290byBFcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFB5X1hERUNSRUYocmVzdWx0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmVzdWx0ID0gdGVtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFJFRFVDRShyZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19CisjZGVmaW5lIE1VTFQoWCwgWSwgcmVzdWx0KSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRlbXAgPSAoUHlMb25nT2JqZWN0ICopbG9uZ19tdWwoWCwgWSk7ICBcCisgICAgICAgIGlmICh0ZW1wID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIEVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlc3VsdCA9IHRlbXA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRlbXAgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFRFVDRShyZXN1bHQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQogCiAgICAgaWYgKFB5X1NJWkUoYikgPD0gRklWRUFSWV9DVVRPRkYpIHsKICAgICAgICAgLyogTGVmdC10by1yaWdodCBiaW5hcnkgZXhwb25lbnRpYXRpb24gKEhBQyBBbGdvcml0aG0gMTQuNzkpICovCkBAIC0zMzkyLDkgKzM3MTQsOSBAQAogICAgICAgICAgICAgZGlnaXQgYmkgPSBiLT5vYl9kaWdpdFtpXTsKIAogICAgICAgICAgICAgZm9yIChqID0gKGRpZ2l0KTEgPDwgKFB5TG9uZ19TSElGVC0xKTsgaiAhPSAwOyBqID4+PSAxKSB7Ci0gICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KQorICAgICAgICAgICAgICAgIE1VTFQoeiwgeiwgeik7CiAgICAgICAgICAgICAgICAgaWYgKGJpICYgaikKLSAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCBhLCB6KQorICAgICAgICAgICAgICAgICAgICBNVUxUKHosIGEsIHopOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzQwMyw3ICszNzI1LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHopOyAgICAgICAgICAgLyogc3RpbGwgaG9sZHMgMUwgKi8KICAgICAgICAgdGFibGVbMF0gPSB6OwogICAgICAgICBmb3IgKGkgPSAxOyBpIDwgMzI7ICsraSkKLSAgICAgICAgICAgIE1VTFQodGFibGVbaS0xXSwgYSwgdGFibGVbaV0pCisgICAgICAgICAgICBNVUxUKHRhYmxlW2ktMV0sIGEsIHRhYmxlW2ldKTsKIAogICAgICAgICBmb3IgKGkgPSBQeV9TSVpFKGIpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgIGNvbnN0IGRpZ2l0IGJpID0gYi0+b2JfZGlnaXRbaV07CkBAIC0zNDExLDkgKzM3MzMsOSBAQAogICAgICAgICAgICAgZm9yIChqID0gUHlMb25nX1NISUZUIC0gNTsgaiA+PSAwOyBqIC09IDUpIHsKICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaW5kZXggPSAoYmkgPj4gaikgJiAweDFmOwogICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCA1OyArK2spCi0gICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgeiwgeikKKyAgICAgICAgICAgICAgICAgICAgTVVMVCh6LCB6LCB6KTsKICAgICAgICAgICAgICAgICBpZiAoaW5kZXgpCi0gICAgICAgICAgICAgICAgICAgIE1VTFQoeiwgdGFibGVbaW5kZXhdLCB6KQorICAgICAgICAgICAgICAgICAgICBNVUxUKHosIHRhYmxlW2luZGV4XSwgeik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDI4LDEzICszNzUwLDEzIEBACiAgICAgfQogICAgIGdvdG8gRG9uZTsKIAotIEVycm9yOgorICBFcnJvcjoKICAgICBpZiAoeiAhPSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRih6KTsKICAgICAgICAgeiA9IE5VTEw7CiAgICAgfQogICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotIERvbmU6CisgIERvbmU6CiAgICAgaWYgKFB5X1NJWkUoYikgPiBGSVZFQVJZX0NVVE9GRikgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFibGVbaV0pOwpAQCAtMzQ4OSwxNSArMzgxMSwxNCBAQAogc3RhdGljIGludAogbG9uZ19ib29sKFB5TG9uZ09iamVjdCAqdikKIHsKLSAgICByZXR1cm4gQUJTKFB5X1NJWkUodikpICE9IDA7CisgICAgcmV0dXJuIFB5X1NJWkUodikgIT0gMDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIGxvbmdfcnNoaWZ0KFB5TG9uZ09iamVjdCAqYSwgUHlMb25nT2JqZWN0ICpiKQogewogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7Ci0gICAgbG9uZyBzaGlmdGJ5OwotICAgIFB5X3NzaXplX3QgbmV3c2l6ZSwgd29yZHNoaWZ0LCBsb3NoaWZ0LCBoaXNoaWZ0LCBpLCBqOworICAgIFB5X3NzaXplX3Qgc2hpZnRieSwgbmV3c2l6ZSwgd29yZHNoaWZ0LCBsb3NoaWZ0LCBoaXNoaWZ0LCBpLCBqOwogICAgIGRpZ2l0IGxvbWFzaywgaGltYXNrOwogCiAgICAgQ0hFQ0tfQklOT1AoYSwgYik7CkBAIC0zNTE2LDggKzM4MzcsNyBAQAogICAgICAgICBQeV9ERUNSRUYoYTIpOwogICAgIH0KICAgICBlbHNlIHsKLQotICAgICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzTG9uZygoUHlPYmplY3QgKiliKTsKKyAgICAgICAgc2hpZnRieSA9IFB5TG9uZ19Bc1NzaXplX3QoKFB5T2JqZWN0ICopYik7CiAgICAgICAgIGlmIChzaGlmdGJ5ID09IC0xTCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgZ290byByc2hpZnRfZXJyb3I7CiAgICAgICAgIGlmIChzaGlmdGJ5IDwgMCkgewpAQCAtMzU0MSwxMiArMzg2MSwxMSBAQAogICAgICAgICBmb3IgKGkgPSAwLCBqID0gd29yZHNoaWZ0OyBpIDwgbmV3c2l6ZTsgaSsrLCBqKyspIHsKICAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gKGEtPm9iX2RpZ2l0W2pdID4+IGxvc2hpZnQpICYgbG9tYXNrOwogICAgICAgICAgICAgaWYgKGkrMSA8IG5ld3NpemUpCi0gICAgICAgICAgICAgICAgei0+b2JfZGlnaXRbaV0gfD0KLSAgICAgICAgICAgICAgICAgIChhLT5vYl9kaWdpdFtqKzFdIDw8IGhpc2hpZnQpICYgaGltYXNrOworICAgICAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldIHw9IChhLT5vYl9kaWdpdFtqKzFdIDw8IGhpc2hpZnQpICYgaGltYXNrOwogICAgICAgICB9CiAgICAgICAgIHogPSBsb25nX25vcm1hbGl6ZSh6KTsKICAgICB9Ci1yc2hpZnRfZXJyb3I6CisgIHJzaGlmdF9lcnJvcjoKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG1heWJlX3NtYWxsX2xvbmcoeik7CiAKIH0KQEAgLTM1NTgsMjcgKzM4NzcsMjEgQEAKICAgICBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0Kil2OwogICAgIFB5TG9uZ09iamVjdCAqYiA9IChQeUxvbmdPYmplY3QqKXc7CiAgICAgUHlMb25nT2JqZWN0ICp6ID0gTlVMTDsKLSAgICBsb25nIHNoaWZ0Ynk7Ci0gICAgUHlfc3NpemVfdCBvbGRzaXplLCBuZXdzaXplLCB3b3Jkc2hpZnQsIHJlbXNoaWZ0LCBpLCBqOworICAgIFB5X3NzaXplX3Qgc2hpZnRieSwgb2xkc2l6ZSwgbmV3c2l6ZSwgd29yZHNoaWZ0LCByZW1zaGlmdCwgaSwgajsKICAgICB0d29kaWdpdHMgYWNjdW07CiAKICAgICBDSEVDS19CSU5PUChhLCBiKTsKIAotICAgIHNoaWZ0YnkgPSBQeUxvbmdfQXNMb25nKChQeU9iamVjdCAqKWIpOworICAgIHNoaWZ0YnkgPSBQeUxvbmdfQXNTc2l6ZV90KChQeU9iamVjdCAqKWIpOwogICAgIGlmIChzaGlmdGJ5ID09IC0xTCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKICAgICBpZiAoc2hpZnRieSA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJuZWdhdGl2ZSBzaGlmdCBjb3VudCIpOwogICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKICAgICB9Ci0gICAgaWYgKChsb25nKShpbnQpc2hpZnRieSAhPSBzaGlmdGJ5KSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm91dHJhZ2VvdXMgbGVmdCBzaGlmdCBjb3VudCIpOwotICAgICAgICBnb3RvIGxzaGlmdF9lcnJvcjsKLSAgICB9CiAgICAgLyogd29yZHNoaWZ0LCByZW1zaGlmdCA9IGRpdm1vZChzaGlmdGJ5LCBQeUxvbmdfU0hJRlQpICovCi0gICAgd29yZHNoaWZ0ID0gKGludClzaGlmdGJ5IC8gUHlMb25nX1NISUZUOwotICAgIHJlbXNoaWZ0ICA9IChpbnQpc2hpZnRieSAtIHdvcmRzaGlmdCAqIFB5TG9uZ19TSElGVDsKKyAgICB3b3Jkc2hpZnQgPSBzaGlmdGJ5IC8gUHlMb25nX1NISUZUOworICAgIHJlbXNoaWZ0ICA9IHNoaWZ0YnkgLSB3b3Jkc2hpZnQgKiBQeUxvbmdfU0hJRlQ7CiAKICAgICBvbGRzaXplID0gQUJTKFB5X1NJWkUoYSkpOwogICAgIG5ld3NpemUgPSBvbGRzaXplICsgd29yZHNoaWZ0OwpAQCAtMzYwMiw3MiArMzkxNSw3NyBAQAogICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KCFhY2N1bSk7CiAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotbHNoaWZ0X2Vycm9yOgorICBsc2hpZnRfZXJyb3I6CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBtYXliZV9zbWFsbF9sb25nKHopOwogfQogCisvKiBDb21wdXRlIHR3bydzIGNvbXBsZW1lbnQgb2YgZGlnaXQgdmVjdG9yIGFbMDptXSwgd3JpdGluZyByZXN1bHQgdG8KKyAgIHpbMDptXS4gIFRoZSBkaWdpdCB2ZWN0b3IgYSBuZWVkIG5vdCBiZSBub3JtYWxpemVkLCBidXQgc2hvdWxkIG5vdAorICAgYmUgZW50aXJlbHkgemVyby4gIGEgYW5kIHogbWF5IHBvaW50IHRvIHRoZSBzYW1lIGRpZ2l0IHZlY3Rvci4gKi8KKworc3RhdGljIHZvaWQKK3ZfY29tcGxlbWVudChkaWdpdCAqeiwgZGlnaXQgKmEsIFB5X3NzaXplX3QgbSkKK3sKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZGlnaXQgY2FycnkgPSAxOworICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHsKKyAgICAgICAgY2FycnkgKz0gYVtpXSBeIFB5TG9uZ19NQVNLOworICAgICAgICB6W2ldID0gY2FycnkgJiBQeUxvbmdfTUFTSzsKKyAgICAgICAgY2FycnkgPj49IFB5TG9uZ19TSElGVDsKKyAgICB9CisgICAgYXNzZXJ0KGNhcnJ5ID09IDApOworfQogCiAvKiBCaXR3aXNlIGFuZC94b3Ivb3Igb3BlcmF0aW9ucyAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKICAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCi0gICAgICAgICBQeUxvbmdPYmplY3QgKmIpCisgICAgICAgICAgICAgUHlMb25nT2JqZWN0ICpiKQogewotICAgIGRpZ2l0IG1hc2thLCBtYXNrYjsgLyogMCBvciBQeUxvbmdfTUFTSyAqLwotICAgIGludCBuZWd6OworICAgIGludCBuZWdhLCBuZWdiLCBuZWd6OwogICAgIFB5X3NzaXplX3Qgc2l6ZV9hLCBzaXplX2IsIHNpemVfeiwgaTsKICAgICBQeUxvbmdPYmplY3QgKno7Ci0gICAgZGlnaXQgZGlnYSwgZGlnYjsKLSAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmIChQeV9TSVpFKGEpIDwgMCkgewotICAgICAgICBhID0gKFB5TG9uZ09iamVjdCAqKSBsb25nX2ludmVydChhKTsKLSAgICAgICAgaWYgKGEgPT0gTlVMTCkKKyAgICAvKiBCaXR3aXNlIG9wZXJhdGlvbnMgZm9yIG5lZ2F0aXZlIG51bWJlcnMgb3BlcmF0ZSBhcyB0aG91Z2gKKyAgICAgICBvbiBhIHR3bydzIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBTbyBjb252ZXJ0IGFyZ3VtZW50cworICAgICAgIGZyb20gc2lnbi1tYWduaXR1ZGUgdG8gdHdvJ3MgY29tcGxlbWVudCwgYW5kIGNvbnZlcnQgdGhlCisgICAgICAgcmVzdWx0IGJhY2sgdG8gc2lnbi1tYWduaXR1ZGUgYXQgdGhlIGVuZC4gKi8KKworICAgIC8qIElmIGEgaXMgbmVnYXRpdmUsIHJlcGxhY2UgaXQgYnkgaXRzIHR3bydzIGNvbXBsZW1lbnQuICovCisgICAgc2l6ZV9hID0gQUJTKFB5X1NJWkUoYSkpOworICAgIG5lZ2EgPSBQeV9TSVpFKGEpIDwgMDsKKyAgICBpZiAobmVnYSkgeworICAgICAgICB6ID0gX1B5TG9uZ19OZXcoc2l6ZV9hKTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBtYXNrYSA9IFB5TG9uZ19NQVNLOworICAgICAgICB2X2NvbXBsZW1lbnQoei0+b2JfZGlnaXQsIGEtPm9iX2RpZ2l0LCBzaXplX2EpOworICAgICAgICBhID0gejsKICAgICB9Ci0gICAgZWxzZSB7CisgICAgZWxzZQorICAgICAgICAvKiBLZWVwIHJlZmVyZW5jZSBjb3VudCBjb25zaXN0ZW50LiAqLwogICAgICAgICBQeV9JTkNSRUYoYSk7Ci0gICAgICAgIG1hc2thID0gMDsKLSAgICB9Ci0gICAgaWYgKFB5X1NJWkUoYikgPCAwKSB7Ci0gICAgICAgIGIgPSAoUHlMb25nT2JqZWN0ICopIGxvbmdfaW52ZXJ0KGIpOwotICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisKKyAgICAvKiBTYW1lIGZvciBiLiAqLworICAgIHNpemVfYiA9IEFCUyhQeV9TSVpFKGIpKTsKKyAgICBuZWdiID0gUHlfU0laRShiKSA8IDA7CisgICAgaWYgKG5lZ2IpIHsKKyAgICAgICAgeiA9IF9QeUxvbmdfTmV3KHNpemVfYik7CisgICAgICAgIGlmICh6ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihhKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG1hc2tiID0gUHlMb25nX01BU0s7CisgICAgICAgIHZfY29tcGxlbWVudCh6LT5vYl9kaWdpdCwgYi0+b2JfZGlnaXQsIHNpemVfYik7CisgICAgICAgIGIgPSB6OwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihiKTsKLSAgICAgICAgbWFza2IgPSAwOwotICAgIH0KIAotICAgIG5lZ3ogPSAwOwotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlICdeJzoKLSAgICAgICAgaWYgKG1hc2thICE9IG1hc2tiKSB7Ci0gICAgICAgICAgICBtYXNrYSBePSBQeUxvbmdfTUFTSzsKLSAgICAgICAgICAgIG5lZ3ogPSAtMTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlICcmJzoKLSAgICAgICAgaWYgKG1hc2thICYmIG1hc2tiKSB7Ci0gICAgICAgICAgICBvcCA9ICd8JzsKLSAgICAgICAgICAgIG1hc2thIF49IFB5TG9uZ19NQVNLOwotICAgICAgICAgICAgbWFza2IgXj0gUHlMb25nX01BU0s7Ci0gICAgICAgICAgICBuZWd6ID0gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnfCc6Ci0gICAgICAgIGlmIChtYXNrYSB8fCBtYXNrYikgewotICAgICAgICAgICAgb3AgPSAnJic7Ci0gICAgICAgICAgICBtYXNrYSBePSBQeUxvbmdfTUFTSzsKLSAgICAgICAgICAgIG1hc2tiIF49IFB5TG9uZ19NQVNLOwotICAgICAgICAgICAgbmVneiA9IC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOworICAgIC8qIFN3YXAgYSBhbmQgYiBpZiBuZWNlc3NhcnkgdG8gZW5zdXJlIHNpemVfYSA+PSBzaXplX2IuICovCisgICAgaWYgKHNpemVfYSA8IHNpemVfYikgeworICAgICAgICB6ID0gYTsgYSA9IGI7IGIgPSB6OworICAgICAgICBzaXplX3ogPSBzaXplX2E7IHNpemVfYSA9IHNpemVfYjsgc2l6ZV9iID0gc2l6ZV96OworICAgICAgICBuZWd6ID0gbmVnYTsgbmVnYSA9IG5lZ2I7IG5lZ2IgPSBuZWd6OwogICAgIH0KIAogICAgIC8qIEpSSDogVGhlIG9yaWdpbmFsIGxvZ2ljIGhlcmUgd2FzIHRvIGFsbG9jYXRlIHRoZSByZXN1bHQgdmFsdWUgKHopCkBAIC0zNjc1LDQzICszOTkzLDcyIEBACiAgICAgICAgd2hlcmUgdGhlIHJlc3VsdCBpcyBndWFyYW50ZWVkIHRvIGJlIHNob3J0ZXIgdGhhbiB0aGF0OiBBTkQgb2YgdHdvCiAgICAgICAgcG9zaXRpdmVzLCBPUiBvZiB0d28gbmVnYXRpdmVzOiB1c2UgdGhlIHNob3J0ZXIgbnVtYmVyLiAgQU5EIHdpdGgKICAgICAgICBtaXhlZCBzaWduczogdXNlIHRoZSBwb3NpdGl2ZSBudW1iZXIuICBPUiB3aXRoIG1peGVkIHNpZ25zOiB1c2UgdGhlCi0gICAgICAgbmVnYXRpdmUgbnVtYmVyLiAgQWZ0ZXIgdGhlIHRyYW5zZm9ybWF0aW9ucyBhYm92ZSwgb3Agd2lsbCBiZSAnJicKLSAgICAgICBpZmYgb25lIG9mIHRoZXNlIGNhc2VzIGFwcGxpZXMsIGFuZCBtYXNrIHdpbGwgYmUgbm9uLTAgZm9yIG9wZXJhbmRzCi0gICAgICAgd2hvc2UgbGVuZ3RoIHNob3VsZCBiZSBpZ25vcmVkLgorICAgICAgIG5lZ2F0aXZlIG51bWJlci4KICAgICAqLworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlICdeJzoKKyAgICAgICAgbmVneiA9IG5lZ2EgXiBuZWdiOworICAgICAgICBzaXplX3ogPSBzaXplX2E7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJyYnOgorICAgICAgICBuZWd6ID0gbmVnYSAmIG5lZ2I7CisgICAgICAgIHNpemVfeiA9IG5lZ2IgPyBzaXplX2EgOiBzaXplX2I7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3wnOgorICAgICAgICBuZWd6ID0gbmVnYSB8IG5lZ2I7CisgICAgICAgIHNpemVfeiA9IG5lZ2IgPyBzaXplX2IgOiBzaXplX2E7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIHNpemVfYSA9IFB5X1NJWkUoYSk7Ci0gICAgc2l6ZV9iID0gUHlfU0laRShiKTsKLSAgICBzaXplX3ogPSBvcCA9PSAnJicKLSAgICAgICAgPyAobWFza2EKLSAgICAgICAgICAgPyBzaXplX2IKLSAgICAgICAgICAgOiAobWFza2IgPyBzaXplX2EgOiBNSU4oc2l6ZV9hLCBzaXplX2IpKSkKLSAgICAgICAgOiBNQVgoc2l6ZV9hLCBzaXplX2IpOwotICAgIHogPSBfUHlMb25nX05ldyhzaXplX3opOworICAgIC8qIFdlIGFsbG93IGFuIGV4dHJhIGRpZ2l0IGlmIHogaXMgbmVnYXRpdmUsIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAgdGhlIGZpbmFsIHR3bydzIGNvbXBsZW1lbnQgb2YgeiBkb2Vzbid0IG92ZXJmbG93LiAqLworICAgIHogPSBfUHlMb25nX05ldyhzaXplX3ogKyBuZWd6KTsKICAgICBpZiAoeiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihhKTsKICAgICAgICAgUHlfREVDUkVGKGIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZV96OyArK2kpIHsKLSAgICAgICAgZGlnYSA9IChpIDwgc2l6ZV9hID8gYS0+b2JfZGlnaXRbaV0gOiAwKSBeIG1hc2thOwotICAgICAgICBkaWdiID0gKGkgPCBzaXplX2IgPyBiLT5vYl9kaWdpdFtpXSA6IDApIF4gbWFza2I7Ci0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSAnJic6IHotPm9iX2RpZ2l0W2ldID0gZGlnYSAmIGRpZ2I7IGJyZWFrOwotICAgICAgICBjYXNlICd8Jzogei0+b2JfZGlnaXRbaV0gPSBkaWdhIHwgZGlnYjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ14nOiB6LT5vYl9kaWdpdFtpXSA9IGRpZ2EgXiBkaWdiOyBicmVhazsKLSAgICAgICAgfQorICAgIC8qIENvbXB1dGUgZGlnaXRzIGZvciBvdmVybGFwIG9mIGEgYW5kIGIuICovCisgICAgc3dpdGNoKG9wKSB7CisgICAgY2FzZSAnJic6CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2I7ICsraSkKKyAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gYS0+b2JfZGlnaXRbaV0gJiBiLT5vYl9kaWdpdFtpXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnfCc6CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2I7ICsraSkKKyAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gYS0+b2JfZGlnaXRbaV0gfCBiLT5vYl9kaWdpdFtpXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnXic6CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplX2I7ICsraSkKKyAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gYS0+b2JfZGlnaXRbaV0gXiBiLT5vYl9kaWdpdFtpXTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ29weSBhbnkgcmVtYWluaW5nIGRpZ2l0cyBvZiBhLCBpbnZlcnRpbmcgaWYgbmVjZXNzYXJ5LiAqLworICAgIGlmIChvcCA9PSAnXicgJiYgbmVnYikKKyAgICAgICAgZm9yICg7IGkgPCBzaXplX3o7ICsraSkKKyAgICAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gYS0+b2JfZGlnaXRbaV0gXiBQeUxvbmdfTUFTSzsKKyAgICBlbHNlIGlmIChpIDwgc2l6ZV96KQorICAgICAgICBtZW1jcHkoJnotPm9iX2RpZ2l0W2ldLCAmYS0+b2JfZGlnaXRbaV0sCisgICAgICAgICAgICAgICAoc2l6ZV96LWkpKnNpemVvZihkaWdpdCkpOworCisgICAgLyogQ29tcGxlbWVudCByZXN1bHQgaWYgbmVnYXRpdmUuICovCisgICAgaWYgKG5lZ3opIHsKKyAgICAgICAgUHlfU0laRSh6KSA9IC0oUHlfU0laRSh6KSk7CisgICAgICAgIHotPm9iX2RpZ2l0W3NpemVfel0gPSBQeUxvbmdfTUFTSzsKKyAgICAgICAgdl9jb21wbGVtZW50KHotPm9iX2RpZ2l0LCB6LT5vYl9kaWdpdCwgc2l6ZV96KzEpOwogICAgIH0KIAogICAgIFB5X0RFQ1JFRihhKTsKICAgICBQeV9ERUNSRUYoYik7Ci0gICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotICAgIGlmIChuZWd6ID09IDApCi0gICAgICAgIHJldHVybiAoUHlPYmplY3QgKikgbWF5YmVfc21hbGxfbG9uZyh6KTsKLSAgICB2ID0gbG9uZ19pbnZlcnQoeik7Ci0gICAgUHlfREVDUkVGKHopOwotICAgIHJldHVybiB2OworICAgIHJldHVybiAoUHlPYmplY3QgKiltYXliZV9zbWFsbF9sb25nKGxvbmdfbm9ybWFsaXplKHopKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM3NjcsMjMgKzQxMTQsMzQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeU9iamVjdCAqeCA9IE5VTEw7Ci0gICAgaW50IGJhc2UgPSAtOTA5OyAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1bmxpa2VseSEgKi8KKyAgICBQeU9iamVjdCAqb2Jhc2UgPSBOVUxMLCAqeCA9IE5VTEw7CisgICAgbG9uZyBiYXNlOworICAgIGludCBvdmVyZmxvdzsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7IngiLCAiYmFzZSIsIDB9OwogCiAgICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlKQogICAgICAgICByZXR1cm4gbG9uZ19zdWJ0eXBlX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsgLyogV2ltcCBvdXQgKi8KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifE9pOmludCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeCwgJmJhc2UpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJ8T086aW50Iiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4LCAmb2Jhc2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoeCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDBMKTsKLSAgICBpZiAoYmFzZSA9PSAtOTA5KQorICAgIGlmIChvYmFzZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlOdW1iZXJfTG9uZyh4KTsKLSAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpCisKKyAgICBiYXNlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iYXNlLCAmb3ZlcmZsb3cpOworICAgIGlmIChiYXNlID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChvdmVyZmxvdyB8fCAoYmFzZSAhPSAwICYmIGJhc2UgPCAyKSB8fCBiYXNlID4gMzYpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50KCkgYXJnIDIgbXVzdCBiZSA+PSAyIGFuZCA8PSAzNiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHgpKQogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Vbmljb2RlKFB5VW5pY29kZV9BU19VTklDT0RFKHgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRSh4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWJhc2UpOwogICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKHgpIHx8IFB5Qnl0ZXNfQ2hlY2soeCkpIHsKICAgICAgICAgLyogU2luY2UgUHlMb25nX0Zyb21TdHJpbmcgZG9lc24ndCBoYXZlIGEgbGVuZ3RoIHBhcmFtZXRlciwKICAgICAgICAgICogY2hlY2sgaGVyZSBmb3IgcG9zc2libGUgTlVMcyBpbiB0aGUgc3RyaW5nLiAqLwpAQCAtMzc5NywxNSArNDE1NSwxNSBAQAogICAgICAgICAgICAgLyogV2Ugb25seSBzZWUgdGhpcyBpZiB0aGVyZSdzIGEgbnVsbCBieXRlIGluIHgsCiAgICAgICAgICAgICAgICB4IGlzIGEgYnl0ZXMgb3IgYnVmZmVyLCAqYW5kKiBhIGJhc2UgaXMgZ2l2ZW4uICovCiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKLSAgICAgICAgICAgICAgICBiYXNlLCB4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWJhc2UsIHgpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHN0cmluZywgTlVMTCwgYmFzZSk7CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVN0cmluZyhzdHJpbmcsIE5VTEwsIChpbnQpYmFzZSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImludCgpIGNhbid0IGNvbnZlcnQgbm9uLXN0cmluZyB3aXRoIGV4cGxpY2l0IGJhc2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnQoKSBjYW4ndCBjb252ZXJ0IG5vbi1zdHJpbmcgd2l0aCBleHBsaWNpdCBiYXNlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KQEAgLTM4NzAsMTQwICs0MjI4LDE2OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShmb3JtYXRfc3BlYykpOwogfQogCisvKiBSZXR1cm4gYSBwYWlyIChxLCByKSBzdWNoIHRoYXQgYSA9IGIgKiBxICsgciwgYW5kCisgICBhYnMocikgPD0gYWJzKGIpLzIsIHdpdGggZXF1YWxpdHkgcG9zc2libGUgb25seSBpZiBxIGlzIGV2ZW4uCisgICBJbiBvdGhlciB3b3JkcywgcSA9PSBhIC8gYiwgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyIHVzaW5nCisgICByb3VuZC1oYWxmLXRvLWV2ZW4uICovCisKK1B5T2JqZWN0ICoKK19QeUxvbmdfRGl2bW9kTmVhcihQeU9iamVjdCAqYSwgUHlPYmplY3QgKmIpCit7CisgICAgUHlMb25nT2JqZWN0ICpxdW8gPSBOVUxMLCAqcmVtID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb25lID0gTlVMTCwgKnR3aWNlX3JlbSwgKnJlc3VsdCwgKnRlbXA7CisgICAgaW50IGNtcCwgcXVvX2lzX29kZCwgcXVvX2lzX25lZzsKKworICAgIC8qIEVxdWl2YWxlbnQgUHl0aG9uIGNvZGU6CisKKyAgICAgICBkZWYgZGl2bW9kX25lYXIoYSwgYik6CisgICAgICAgICAgIHEsIHIgPSBkaXZtb2QoYSwgYikKKyAgICAgICAgICAgIyByb3VuZCB1cCBpZiBlaXRoZXIgciAvIGIgPiAwLjUsIG9yIHIgLyBiID09IDAuNSBhbmQgcSBpcyBvZGQuCisgICAgICAgICAgICMgVGhlIGV4cHJlc3Npb24gciAvIGIgPiAwLjUgaXMgZXF1aXZhbGVudCB0byAyICogciA+IGIgaWYgYiBpcworICAgICAgICAgICAjIHBvc2l0aXZlLCAyICogciA8IGIgaWYgYiBuZWdhdGl2ZS4KKyAgICAgICAgICAgZ3JlYXRlcl90aGFuX2hhbGYgPSAyKnIgPiBiIGlmIGIgPiAwIGVsc2UgMipyIDwgYgorICAgICAgICAgICBleGFjdGx5X2hhbGYgPSAyKnIgPT0gYgorICAgICAgICAgICBpZiBncmVhdGVyX3RoYW5faGFsZiBvciBleGFjdGx5X2hhbGYgYW5kIHEgJSAyID09IDE6CisgICAgICAgICAgICAgICBxICs9IDEKKyAgICAgICAgICAgICAgIHIgLT0gYgorICAgICAgICAgICByZXR1cm4gcSwgcgorCisgICAgKi8KKyAgICBpZiAoIVB5TG9uZ19DaGVjayhhKSB8fCAhUHlMb25nX0NoZWNrKGIpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibm9uLWludGVnZXIgYXJndW1lbnRzIGluIGRpdmlzaW9uIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIERvIGEgYW5kIGIgaGF2ZSBkaWZmZXJlbnQgc2lnbnM/ICBJZiBzbywgcXVvdGllbnQgaXMgbmVnYXRpdmUuICovCisgICAgcXVvX2lzX25lZyA9IChQeV9TSVpFKGEpIDwgMCkgIT0gKFB5X1NJWkUoYikgPCAwKTsKKworICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxTCk7CisgICAgaWYgKG9uZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsb25nX2RpdnJlbSgoUHlMb25nT2JqZWN0KilhLCAoUHlMb25nT2JqZWN0KiliLCAmcXVvLCAmcmVtKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBjb21wYXJlIHR3aWNlIHRoZSByZW1haW5kZXIgd2l0aCB0aGUgZGl2aXNvciwgdG8gc2VlCisgICAgICAgaWYgd2UgbmVlZCB0byBhZGp1c3QgdGhlIHF1b3RpZW50IGFuZCByZW1haW5kZXIgKi8KKyAgICB0d2ljZV9yZW0gPSBsb25nX2xzaGlmdCgoUHlPYmplY3QgKilyZW0sIG9uZSk7CisgICAgaWYgKHR3aWNlX3JlbSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChxdW9faXNfbmVnKSB7CisgICAgICAgIHRlbXAgPSBsb25nX25lZygoUHlMb25nT2JqZWN0Kil0d2ljZV9yZW0pOworICAgICAgICBQeV9ERUNSRUYodHdpY2VfcmVtKTsKKyAgICAgICAgdHdpY2VfcmVtID0gdGVtcDsKKyAgICAgICAgaWYgKHR3aWNlX3JlbSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgY21wID0gbG9uZ19jb21wYXJlKChQeUxvbmdPYmplY3QgKil0d2ljZV9yZW0sIChQeUxvbmdPYmplY3QgKiliKTsKKyAgICBQeV9ERUNSRUYodHdpY2VfcmVtKTsKKworICAgIHF1b19pc19vZGQgPSBQeV9TSVpFKHF1bykgIT0gMCAmJiAoKHF1by0+b2JfZGlnaXRbMF0gJiAxKSAhPSAwKTsKKyAgICBpZiAoKFB5X1NJWkUoYikgPCAwID8gY21wIDwgMCA6IGNtcCA+IDApIHx8IChjbXAgPT0gMCAmJiBxdW9faXNfb2RkKSkgeworICAgICAgICAvKiBmaXggdXAgcXVvdGllbnQgKi8KKyAgICAgICAgaWYgKHF1b19pc19uZWcpCisgICAgICAgICAgICB0ZW1wID0gbG9uZ19zdWIocXVvLCAoUHlMb25nT2JqZWN0ICopb25lKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVtcCA9IGxvbmdfYWRkKHF1bywgKFB5TG9uZ09iamVjdCAqKW9uZSk7CisgICAgICAgIFB5X0RFQ1JFRihxdW8pOworICAgICAgICBxdW8gPSAoUHlMb25nT2JqZWN0ICopdGVtcDsKKyAgICAgICAgaWYgKHF1byA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgLyogYW5kIHJlbWFpbmRlciAqLworICAgICAgICBpZiAocXVvX2lzX25lZykKKyAgICAgICAgICAgIHRlbXAgPSBsb25nX2FkZChyZW0sIChQeUxvbmdPYmplY3QgKiliKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGVtcCA9IGxvbmdfc3ViKHJlbSwgKFB5TG9uZ09iamVjdCAqKWIpOworICAgICAgICBQeV9ERUNSRUYocmVtKTsKKyAgICAgICAgcmVtID0gKFB5TG9uZ09iamVjdCAqKXRlbXA7CisgICAgICAgIGlmIChyZW0gPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlUdXBsZV9OZXcoMik7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgLyogUHlUdXBsZV9TRVRfSVRFTSBzdGVhbHMgcmVmZXJlbmNlcyAqLworICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCAwLCAoUHlPYmplY3QgKilxdW8pOworICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzdWx0LCAxLCAoUHlPYmplY3QgKilyZW0pOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIHJldHVybiByZXN1bHQ7CisKKyAgZXJyb3I6CisgICAgUHlfWERFQ1JFRihxdW8pOworICAgIFB5X1hERUNSRUYocmVtKTsKKyAgICBQeV9YREVDUkVGKG9uZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb25nX3JvdW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb19uZGlnaXRzPU5VTEwsICp0ZW1wOwotICAgIFB5TG9uZ09iamVjdCAqcG93PU5VTEwsICpxPU5VTEwsICpyPU5VTEwsICpuZGlnaXRzPU5VTEwsICpvbmU7Ci0gICAgaW50IGVycmNvZGU7Ci0gICAgZGlnaXQgcV9tb2RfNDsKKyAgICBQeU9iamVjdCAqb19uZGlnaXRzPU5VTEwsICp0ZW1wLCAqcmVzdWx0LCAqbmRpZ2l0czsKIAotICAgIC8qIE5vdGVzIG9uIHRoZSBhbGdvcml0aG06IHRvIHJvdW5kIHRvIHRoZSBuZWFyZXN0IDEwKipuIChuIHBvc2l0aXZlKSwKLSAgICAgICB0aGUgc3RyYWlnaHRmb3J3YXJkIG1ldGhvZCBpczoKLQotICAgICAgICAgICgxKSBkaXZpZGUgYnkgMTAqKm4KLSAgICAgICAgICAoMikgcm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyIChyb3VuZCB0byBldmVuIGluIGNhc2Ugb2YgdGllKQotICAgICAgICAgICgzKSBtdWx0aXBseSByZXN1bHQgYnkgMTAqKm4uCi0KLSAgICAgICBCdXQgdGhlIHJvdW5kaW5nIHN0ZXAgaW52b2x2ZXMgZXhhbWluaW5nIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlCi0gICAgICAgcXVvdGllbnQgdG8gc2VlIHdoZXRoZXIgaXQncyBncmVhdGVyIHRoYW4gMC41IG9yIG5vdC4gIFNpbmNlIHdlCi0gICAgICAgd2FudCB0byBkbyB0aGUgd2hvbGUgY2FsY3VsYXRpb24gaW4gaW50ZWdlciBhcml0aG1ldGljLCBpdCdzCi0gICAgICAgc2ltcGxlciB0byBkbzoKLQotICAgICAgICAgICgxKSBkaXZpZGUgYnkgKDEwKipuKS8yCi0gICAgICAgICAgKDIpIHJvdW5kIHRvIG5lYXJlc3QgbXVsdGlwbGUgb2YgMiAobXVsdGlwbGUgb2YgNCBpbiBjYXNlIG9mIHRpZSkKLSAgICAgICAgICAoMykgbXVsdGlwbHkgcmVzdWx0IGJ5ICgxMCoqbikvMi4KLQotICAgICAgIFRoZW4gYWxsIHdlIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSBxdW90aWVudAotICAgICAgIGFyaXNpbmcgaW4gc3RlcCAoMikgaXMgd2hldGhlciBpdCdzIHplcm8gb3Igbm90LgotCi0gICAgICAgRG9pbmcgYm90aCBhIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBpcyB3YXN0ZWZ1bCwgYW5kIGlzIGVhc2lseQotICAgICAgIGF2b2lkZWQgaWYgd2UganVzdCBmaWd1cmUgb3V0IGhvdyBtdWNoIHRvIGFkanVzdCB0aGUgb3JpZ2luYWwgaW5wdXQKLSAgICAgICBieSB0byBkbyB0aGUgcm91bmRpbmcuCi0KLSAgICAgICBIZXJlJ3MgdGhlIHdob2xlIGFsZ29yaXRobSBleHByZXNzZWQgaW4gUHl0aG9uLgotCi0gICAgICAgIGRlZiByb3VuZChzZWxmLCBuZGlnaXRzID0gTm9uZSk6Ci0gICAgICAgICIiInJvdW5kKGludCwgaW50KSAtPiBpbnQiIiIKLSAgICAgICAgaWYgbmRpZ2l0cyBpcyBOb25lIG9yIG5kaWdpdHMgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIHBvdyA9IDEwKiotbmRpZ2l0cyA+PiAxCi0gICAgICAgIHEsIHIgPSBkaXZtb2Qoc2VsZiwgcG93KQotICAgICAgICBzZWxmIC09IHIKLSAgICAgICAgaWYgKHEgJiAxICE9IDApOgotICAgICAgICAgICAgaWYgKHEgJiAyID09IHIgPT0gMCk6Ci0gICAgICAgICAgICBzZWxmIC09IHBvdwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYgKz0gcG93Ci0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAqLworICAgIC8qIFRvIHJvdW5kIGFuIGludGVnZXIgbSB0byB0aGUgbmVhcmVzdCAxMCoqbiAobiBwb3NpdGl2ZSksIHdlIG1ha2UgdXNlIG9mCisgICAgICogdGhlIGRpdm1vZF9uZWFyIG9wZXJhdGlvbiwgZGVmaW5lZCBieToKKyAgICAgKgorICAgICAqICAgZGl2bW9kX25lYXIoYSwgYikgPSAocSwgcikKKyAgICAgKgorICAgICAqIHdoZXJlIHEgaXMgdGhlIG5lYXJlc3QgaW50ZWdlciB0byB0aGUgcXVvdGllbnQgYSAvIGIgKHRoZQorICAgICAqIG5lYXJlc3QgZXZlbiBpbnRlZ2VyIGluIHRoZSBjYXNlIG9mIGEgdGllKSBhbmQgciA9PSBhIC0gcSAqIGIuCisgICAgICogSGVuY2UgcSAqIGIgPSBhIC0gciBpcyB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiBiIHRvIGEsCisgICAgICogcHJlZmVycmluZyBldmVuIG11bHRpcGxlcyBpbiB0aGUgY2FzZSBvZiBhIHRpZS4KKyAgICAgKgorICAgICAqIFNvIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIDEwKipuIHRvIG0gaXM6CisgICAgICoKKyAgICAgKiAgIG0gLSBkaXZtb2RfbmVhcihtLCAxMCoqbilbMV0uCisgICAgICovCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TyIsICZvX25kaWdpdHMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAob19uZGlnaXRzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBsb25nX2xvbmcoc2VsZik7CiAKLSAgICBuZGlnaXRzID0gKFB5TG9uZ09iamVjdCAqKVB5TnVtYmVyX0luZGV4KG9fbmRpZ2l0cyk7CisgICAgbmRpZ2l0cyA9IFB5TnVtYmVyX0luZGV4KG9fbmRpZ2l0cyk7CiAgICAgaWYgKG5kaWdpdHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICAvKiBpZiBuZGlnaXRzID49IDAgdGhlbiBubyByb3VuZGluZyBpcyBuZWNlc3Nhcnk7IHJldHVybiBzZWxmIHVuY2hhbmdlZCAqLwogICAgIGlmIChQeV9TSVpFKG5kaWdpdHMpID49IDApIHsKICAgICAgICAgUHlfREVDUkVGKG5kaWdpdHMpOwogICAgICAgICByZXR1cm4gbG9uZ19sb25nKHNlbGYpOwogICAgIH0KIAotICAgIFB5X0lOQ1JFRihzZWxmKTsgLyogdG8ga2VlcCByZWZjb3VudGluZyBzaW1wbGUgKi8KLSAgICAvKiB3ZSBub3cgb3duIHJlZmVyZW5jZXMgdG8gc2VsZiwgbmRpZ2l0cyAqLwotCi0gICAgLyogcG93ID0gMTAgKiogLW5kaWdpdHMgPj4gMSAqLwotICAgIHBvdyA9IChQeUxvbmdPYmplY3QgKilQeUxvbmdfRnJvbUxvbmcoMTBMKTsKLSAgICBpZiAocG93ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgdGVtcCA9IGxvbmdfbmVnKG5kaWdpdHMpOworICAgIC8qIHJlc3VsdCA9IHNlbGYgLSBkaXZtb2RfbmVhcihzZWxmLCAxMCAqKiAtbmRpZ2l0cylbMV0gKi8KKyAgICB0ZW1wID0gbG9uZ19uZWcoKFB5TG9uZ09iamVjdCopbmRpZ2l0cyk7CiAgICAgUHlfREVDUkVGKG5kaWdpdHMpOwotICAgIG5kaWdpdHMgPSAoUHlMb25nT2JqZWN0ICopdGVtcDsKKyAgICBuZGlnaXRzID0gdGVtcDsKICAgICBpZiAobmRpZ2l0cyA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIHRlbXAgPSBsb25nX3BvdygoUHlPYmplY3QgKilwb3csIChQeU9iamVjdCAqKW5kaWdpdHMsIFB5X05vbmUpOwotICAgIFB5X0RFQ1JFRihwb3cpOwotICAgIHBvdyA9IChQeUxvbmdPYmplY3QgKil0ZW1wOwotICAgIGlmIChwb3cgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBhc3NlcnQoUHlMb25nX0NoZWNrKHBvdykpOyAvKiBjaGVjayBsb25nX3BvdyByZXR1cm5lZCBhIGxvbmcgKi8KLSAgICBvbmUgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKDFMKTsKLSAgICBpZiAob25lID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgdGVtcCA9IGxvbmdfcnNoaWZ0KHBvdywgb25lKTsKLSAgICBQeV9ERUNSRUYob25lKTsKLSAgICBQeV9ERUNSRUYocG93KTsKLSAgICBwb3cgPSAoUHlMb25nT2JqZWN0ICopdGVtcDsKLSAgICBpZiAocG93ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogcSwgciA9IGRpdm1vZChzZWxmLCBwb3cpICovCi0gICAgZXJyY29kZSA9IGxfZGl2bW9kKChQeUxvbmdPYmplY3QgKilzZWxmLCBwb3csICZxLCAmcik7Ci0gICAgaWYgKGVycmNvZGUgPT0gLTEpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAvKiBzZWxmIC09IHIgKi8KLSAgICB0ZW1wID0gbG9uZ19zdWIoKFB5TG9uZ09iamVjdCAqKXNlbGYsIHIpOwotICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICBzZWxmID0gdGVtcDsKLSAgICBpZiAoc2VsZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgLyogZ2V0IHZhbHVlIG9mIHF1b3RpZW50IG1vZHVsbyA0ICovCi0gICAgaWYgKFB5X1NJWkUocSkgPT0gMCkKLSAgICAgICAgcV9tb2RfNCA9IDA7Ci0gICAgZWxzZSBpZiAoUHlfU0laRShxKSA+IDApCi0gICAgICAgIHFfbW9kXzQgPSBxLT5vYl9kaWdpdFswXSAmIDM7Ci0gICAgZWxzZQotICAgICAgICBxX21vZF80ID0gKFB5TG9uZ19CQVNFLXEtPm9iX2RpZ2l0WzBdKSAmIDM7Ci0KLSAgICBpZiAoKHFfbW9kXzQgJiAxKSA9PSAxKSB7Ci0gICAgICAgIC8qIHEgaXMgb2RkOyByb3VuZCBzZWxmIHVwIG9yIGRvd24gYnkgYWRkaW5nIG9yIHN1YnRyYWN0aW5nIHBvdyAqLwotICAgICAgICBpZiAocV9tb2RfNCA9PSAxICYmIFB5X1NJWkUocikgPT0gMCkKLSAgICAgICAgICAgIHRlbXAgPSAoUHlPYmplY3QgKilsb25nX3N1YigoUHlMb25nT2JqZWN0ICopc2VsZiwgcG93KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdGVtcCA9IChQeU9iamVjdCAqKWxvbmdfYWRkKChQeUxvbmdPYmplY3QgKilzZWxmLCBwb3cpOwotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHNlbGYgPSB0ZW1wOwotICAgICAgICBpZiAoc2VsZiA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICByZXN1bHQgPSBQeUxvbmdfRnJvbUxvbmcoMTBMKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5kaWdpdHMpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfREVDUkVGKHEpOwotICAgIFB5X0RFQ1JFRihyKTsKLSAgICBQeV9ERUNSRUYocG93KTsKLSAgICBQeV9ERUNSRUYobmRpZ2l0cyk7Ci0gICAgcmV0dXJuIHNlbGY7CiAKLSAgZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihxKTsKLSAgICBQeV9YREVDUkVGKHIpOwotICAgIFB5X1hERUNSRUYocG93KTsKLSAgICBQeV9YREVDUkVGKHNlbGYpOwotICAgIFB5X1hERUNSRUYobmRpZ2l0cyk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgdGVtcCA9IGxvbmdfcG93KHJlc3VsdCwgbmRpZ2l0cywgUHlfTm9uZSk7CisgICAgUHlfREVDUkVGKG5kaWdpdHMpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJlc3VsdCA9IHRlbXA7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHRlbXAgPSBfUHlMb25nX0Rpdm1vZE5lYXIoc2VsZiwgcmVzdWx0KTsKKyAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICByZXN1bHQgPSB0ZW1wOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB0ZW1wID0gbG9uZ19zdWIoKFB5TG9uZ09iamVjdCAqKXNlbGYsCisgICAgICAgICAgICAgICAgICAgIChQeUxvbmdPYmplY3QgKilQeVR1cGxlX0dFVF9JVEVNKHJlc3VsdCwgMSkpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJlc3VsdCA9IHRlbXA7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNDA2NSw3ICs0NDUyLDcgQEAKIAogICAgIHJldHVybiAoUHlPYmplY3QgKilyZXN1bHQ7CiAKLWVycm9yOgorICBlcnJvcjoKICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTQwODcsNiArNDQ3NCwxODcgQEAKIH0KICNlbmRpZgogCisKK3N0YXRpYyBQeU9iamVjdCAqCitsb25nX3RvX2J5dGVzKFB5TG9uZ09iamVjdCAqdiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5T2JqZWN0ICpieXRlb3JkZXJfc3RyOworICAgIFB5T2JqZWN0ICppc19zaWduZWRfb2JqID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgbGl0dGxlX2VuZGlhbjsKKyAgICBpbnQgaXNfc2lnbmVkOworICAgIFB5T2JqZWN0ICpieXRlczsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Imxlbmd0aCIsICJieXRlb3JkZXIiLCAic2lnbmVkIiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiblV8Tzp0b19ieXRlcyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGVuZ3RoLCAmYnl0ZW9yZGVyX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNfc2lnbmVkX29iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGFyZ3MgIT0gTlVMTCAmJiBQeV9TSVpFKGFyZ3MpID4gMikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgIidzaWduZWQnIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYnl0ZW9yZGVyX3N0ciwgImxpdHRsZSIpKQorICAgICAgICBsaXR0bGVfZW5kaWFuID0gMTsKKyAgICBlbHNlIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYnl0ZW9yZGVyX3N0ciwgImJpZyIpKQorICAgICAgICBsaXR0bGVfZW5kaWFuID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAiYnl0ZW9yZGVyIG11c3QgYmUgZWl0aGVyICdsaXR0bGUnIG9yICdiaWcnIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChpc19zaWduZWRfb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X0lzVHJ1ZShpc19zaWduZWRfb2JqKTsKKyAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaXNfc2lnbmVkID0gY21wID8gMSA6IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBJZiB0aGUgc2lnbmVkIGFyZ3VtZW50IHdhcyBvbWl0dGVkLCB1c2UgRmFsc2UgYXMgdGhlCisgICAgICAgICAgIGRlZmF1bHQuICovCisgICAgICAgIGlzX3NpZ25lZCA9IDA7CisgICAgfQorCisgICAgaWYgKGxlbmd0aCA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIGFyZ3VtZW50IG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpOworICAgIGlmIChieXRlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChfUHlMb25nX0FzQnl0ZUFycmF5KHYsICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoYnl0ZXMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgbGl0dGxlX2VuZGlhbiwgaXNfc2lnbmVkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGJ5dGVzOworfQorCitQeURvY19TVFJWQVIobG9uZ190b19ieXRlc19kb2MsCisiaW50LnRvX2J5dGVzKGxlbmd0aCwgYnl0ZW9yZGVyLCAqLCBzaWduZWQ9RmFsc2UpIC0+IGJ5dGVzXG5cCitcblwKK1JldHVybiBhbiBhcnJheSBvZiBieXRlcyByZXByZXNlbnRpbmcgYW4gaW50ZWdlci5cblwKK1xuXAorVGhlIGludGVnZXIgaXMgcmVwcmVzZW50ZWQgdXNpbmcgbGVuZ3RoIGJ5dGVzLiAgQW4gT3ZlcmZsb3dFcnJvciBpc1xuXAorcmFpc2VkIGlmIHRoZSBpbnRlZ2VyIGlzIG5vdCByZXByZXNlbnRhYmxlIHdpdGggdGhlIGdpdmVuIG51bWJlciBvZlxuXAorYnl0ZXMuXG5cCitcblwKK1RoZSBieXRlb3JkZXIgYXJndW1lbnQgZGV0ZXJtaW5lcyB0aGUgYnl0ZSBvcmRlciB1c2VkIHRvIHJlcHJlc2VudCB0aGVcblwKK2ludGVnZXIuICBJZiBieXRlb3JkZXIgaXMgJ2JpZycsIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMgYXQgdGhlXG5cCitiZWdpbm5pbmcgb2YgdGhlIGJ5dGUgYXJyYXkuICBJZiBieXRlb3JkZXIgaXMgJ2xpdHRsZScsIHRoZSBtb3N0XG5cCitzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgYXJyYXkuICBUbyByZXF1ZXN0IHRoZSBuYXRpdmVcblwKK2J5dGUgb3JkZXIgb2YgdGhlIGhvc3Qgc3lzdGVtLCB1c2UgYHN5cy5ieXRlb3JkZXInIGFzIHRoZSBieXRlIG9yZGVyIHZhbHVlLlxuXAorXG5cCitUaGUgc2lnbmVkIGtleXdvcmQtb25seSBhcmd1bWVudCBkZXRlcm1pbmVzIHdoZXRoZXIgdHdvJ3MgY29tcGxlbWVudCBpc1xuXAordXNlZCB0byByZXByZXNlbnQgdGhlIGludGVnZXIuICBJZiBzaWduZWQgaXMgRmFsc2UgYW5kIGEgbmVnYXRpdmUgaW50ZWdlclxuXAoraXMgZ2l2ZW4sIGFuIE92ZXJmbG93RXJyb3IgaXMgcmFpc2VkLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorbG9uZ19mcm9tX2J5dGVzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIFB5T2JqZWN0ICpieXRlb3JkZXJfc3RyOworICAgIFB5T2JqZWN0ICppc19zaWduZWRfb2JqID0gTlVMTDsKKyAgICBpbnQgbGl0dGxlX2VuZGlhbjsKKyAgICBpbnQgaXNfc2lnbmVkOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlPYmplY3QgKmJ5dGVzOworICAgIFB5T2JqZWN0ICpsb25nX29iajsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImJ5dGVzIiwgImJ5dGVvcmRlciIsICJzaWduZWQiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPVXxPOmZyb21fYnl0ZXMiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmJ5dGVvcmRlcl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzX3NpZ25lZF9vYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChhcmdzICE9IE5VTEwgJiYgUHlfU0laRShhcmdzKSA+IDIpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICInc2lnbmVkJyBpcyBhIGtleXdvcmQtb25seSBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGJ5dGVvcmRlcl9zdHIsICJsaXR0bGUiKSkKKyAgICAgICAgbGl0dGxlX2VuZGlhbiA9IDE7CisgICAgZWxzZSBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGJ5dGVvcmRlcl9zdHIsICJiaWciKSkKKyAgICAgICAgbGl0dGxlX2VuZGlhbiA9IDA7CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgImJ5dGVvcmRlciBtdXN0IGJlIGVpdGhlciAnbGl0dGxlJyBvciAnYmlnJyIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoaXNfc2lnbmVkX29iaiAhPSBOVUxMKSB7CisgICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9Jc1RydWUoaXNfc2lnbmVkX29iaik7CisgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlzX3NpZ25lZCA9IGNtcCA/IDEgOiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogSWYgdGhlIHNpZ25lZCBhcmd1bWVudCB3YXMgb21pdHRlZCwgdXNlIEZhbHNlIGFzIHRoZQorICAgICAgICAgICBkZWZhdWx0LiAqLworICAgICAgICBpc19zaWduZWQgPSAwOworICAgIH0KKworICAgIGJ5dGVzID0gUHlPYmplY3RfQnl0ZXMob2JqKTsKKyAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsb25nX29iaiA9IF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgKKyAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIFB5X1NJWkUoYnl0ZXMpLAorICAgICAgICBsaXR0bGVfZW5kaWFuLCBpc19zaWduZWQpOworICAgIFB5X0RFQ1JFRihieXRlcyk7CisKKyAgICAvKiBJZiBmcm9tX2J5dGVzKCkgd2FzIHVzZWQgb24gc3ViY2xhc3MsIGFsbG9jYXRlIG5ldyBzdWJjbGFzcworICAgICAqIGluc3RhbmNlLCBpbml0aWFsaXplIGl0IHdpdGggZGVjb2RlZCBsb25nIHZhbHVlIGFuZCByZXR1cm4gaXQuCisgICAgICovCisgICAgaWYgKHR5cGUgIT0gJlB5TG9uZ19UeXBlICYmIFB5VHlwZV9Jc1N1YnR5cGUodHlwZSwgJlB5TG9uZ19UeXBlKSkgeworICAgICAgICBQeUxvbmdPYmplY3QgKm5ld29iajsKKyAgICAgICAgaW50IGk7CisgICAgICAgIFB5X3NzaXplX3QgbiA9IEFCUyhQeV9TSVpFKGxvbmdfb2JqKSk7CisKKyAgICAgICAgbmV3b2JqID0gKFB5TG9uZ09iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIG4pOworICAgICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsb25nX29iaik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKG5ld29iaikpOworICAgICAgICBQeV9TSVpFKG5ld29iaikgPSBQeV9TSVpFKGxvbmdfb2JqKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgbmV3b2JqLT5vYl9kaWdpdFtpXSA9CisgICAgICAgICAgICAgICAgKChQeUxvbmdPYmplY3QgKilsb25nX29iaiktPm9iX2RpZ2l0W2ldOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihsb25nX29iaik7CisgICAgICAgIHJldHVybiAoUHlPYmplY3QgKiluZXdvYmo7CisgICAgfQorCisgICAgcmV0dXJuIGxvbmdfb2JqOworfQorCitQeURvY19TVFJWQVIobG9uZ19mcm9tX2J5dGVzX2RvYywKKyJpbnQuZnJvbV9ieXRlcyhieXRlcywgYnl0ZW9yZGVyLCAqLCBzaWduZWQ9RmFsc2UpIC0+IGludFxuXAorXG5cCitSZXR1cm4gdGhlIGludGVnZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIGFycmF5IG9mIGJ5dGVzLlxuXAorXG5cCitUaGUgYnl0ZXMgYXJndW1lbnQgbXVzdCBlaXRoZXIgc3VwcG9ydCB0aGUgYnVmZmVyIHByb3RvY29sIG9yIGJlIGFuXG5cCitpdGVyYWJsZSBvYmplY3QgcHJvZHVjaW5nIGJ5dGVzLiAgQnl0ZXMgYW5kIGJ5dGVhcnJheSBhcmUgZXhhbXBsZXMgb2ZcblwKK2J1aWx0LWluIG9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBidWZmZXIgcHJvdG9jb2wuXG5cCitcblwKK1RoZSBieXRlb3JkZXIgYXJndW1lbnQgZGV0ZXJtaW5lcyB0aGUgYnl0ZSBvcmRlciB1c2VkIHRvIHJlcHJlc2VudCB0aGVcblwKK2ludGVnZXIuICBJZiBieXRlb3JkZXIgaXMgJ2JpZycsIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUgaXMgYXQgdGhlXG5cCitiZWdpbm5pbmcgb2YgdGhlIGJ5dGUgYXJyYXkuICBJZiBieXRlb3JkZXIgaXMgJ2xpdHRsZScsIHRoZSBtb3N0XG5cCitzaWduaWZpY2FudCBieXRlIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ5dGUgYXJyYXkuICBUbyByZXF1ZXN0IHRoZSBuYXRpdmVcblwKK2J5dGUgb3JkZXIgb2YgdGhlIGhvc3Qgc3lzdGVtLCB1c2UgYHN5cy5ieXRlb3JkZXInIGFzIHRoZSBieXRlIG9yZGVyIHZhbHVlLlxuXAorXG5cCitUaGUgc2lnbmVkIGtleXdvcmQtb25seSBhcmd1bWVudCBpbmRpY2F0ZXMgd2hldGhlciB0d28ncyBjb21wbGVtZW50IGlzXG5cCit1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlci4iKTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIGxvbmdfbWV0aG9kc1tdID0gewogICAgIHsiY29uanVnYXRlIiwgICAgICAgKFB5Q0Z1bmN0aW9uKWxvbmdfbG9uZywgTUVUSF9OT0FSR1MsCiAgICAgICJSZXR1cm5zIHNlbGYsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhbnkgaW50LiJ9LApAQCAtNDA5Niw2ICs0NjY0LDEwIEBACiAgICAgeyJpc19maW5pdGUiLCAgICAgICAoUHlDRnVuY3Rpb24pbG9uZ19pc19maW5pdGUsICAgIE1FVEhfTk9BUkdTLAogICAgICAiUmV0dXJucyBhbHdheXMgVHJ1ZS4ifSwKICNlbmRpZgorICAgIHsidG9fYnl0ZXMiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWxvbmdfdG9fYnl0ZXMsCisgICAgIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBsb25nX3RvX2J5dGVzX2RvY30sCisgICAgeyJmcm9tX2J5dGVzIiwgICAgICAoUHlDRnVuY3Rpb24pbG9uZ19mcm9tX2J5dGVzLAorICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU3xNRVRIX0NMQVNTLCBsb25nX2Zyb21fYnl0ZXNfZG9jfSwKICAgICB7Il9fdHJ1bmNfXyIsICAgICAgIChQeUNGdW5jdGlvbilsb25nX2xvbmcsIE1FVEhfTk9BUkdTLAogICAgICAiVHJ1bmNhdGluZyBhbiBJbnRlZ3JhbCByZXR1cm5zIGl0c2VsZi4ifSwKICAgICB7Il9fZmxvb3JfXyIsICAgICAgIChQeUNGdW5jdGlvbilsb25nX2xvbmcsIE1FVEhfTk9BUkdTLApAQCAtNDE0Miw0MCArNDcxNCw0MCBAQAogY29udmVydGluZyBhIG5vbi1zdHJpbmcuIik7CiAKIHN0YXRpYyBQeU51bWJlck1ldGhvZHMgbG9uZ19hc19udW1iZXIgPSB7Ci0gICAgKGJpbmFyeWZ1bmMpICAgICAgICBsb25nX2FkZCwgICAgICAgLypuYl9hZGQqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19zdWIsICAgICAgIC8qbmJfc3VidHJhY3QqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19tdWwsICAgICAgIC8qbmJfbXVsdGlwbHkqLwotICAgICAgICAgICAgbG9uZ19tb2QsICAgICAgICAgICAgICAgICAgIC8qbmJfcmVtYWluZGVyKi8KLSAgICAgICAgICAgIGxvbmdfZGl2bW9kLCAgICAgICAgICAgICAgICAvKm5iX2Rpdm1vZCovCi0gICAgICAgICAgICBsb25nX3BvdywgICAgICAgICAgICAgICAgICAgLypuYl9wb3dlciovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX25lZywgICAgICAgLypuYl9uZWdhdGl2ZSovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX2xvbmcsICAgICAgLyp0cF9wb3NpdGl2ZSovCi0gICAgKHVuYXJ5ZnVuYykgICAgICAgICBsb25nX2FicywgICAgICAgLyp0cF9hYnNvbHV0ZSovCi0gICAgKGlucXVpcnkpICAgICAgICAgICBsb25nX2Jvb2wsICAgICAgLyp0cF9ib29sKi8KLSAgICAodW5hcnlmdW5jKSAgICAgICAgIGxvbmdfaW52ZXJ0LCAgICAvKm5iX2ludmVydCovCi0gICAgICAgICAgICBsb25nX2xzaGlmdCwgICAgICAgICAgICAgICAgLypuYl9sc2hpZnQqLwotICAgIChiaW5hcnlmdW5jKSAgICAgICAgbG9uZ19yc2hpZnQsICAgIC8qbmJfcnNoaWZ0Ki8KLSAgICAgICAgICAgIGxvbmdfYW5kLCAgICAgICAgICAgICAgICAgICAvKm5iX2FuZCovCi0gICAgICAgICAgICBsb25nX3hvciwgICAgICAgICAgICAgICAgICAgLypuYl94b3IqLwotICAgICAgICAgICAgbG9uZ19vciwgICAgICAgICAgICAgICAgICAgIC8qbmJfb3IqLwotICAgICAgICAgICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgIC8qbmJfaW50Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKm5iX3Jlc2VydmVkKi8KLSAgICAgICAgICAgIGxvbmdfZmxvYXQsICAgICAgICAgICAgICAgICAvKm5iX2Zsb2F0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FkZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2Vfc3VidHJhY3QgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX211bHRpcGx5ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9yZW1haW5kZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3Bvd2VyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9sc2hpZnQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3JzaGlmdCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfYW5kICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV94b3IgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX29yICovCi0gICAgbG9uZ19kaXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfZmxvb3JfZGl2aWRlICovCi0gICAgbG9uZ190cnVlX2RpdmlkZSwgICAgICAgICAgICAgICAgICAgLyogbmJfdHJ1ZV9kaXZpZGUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2Zsb29yX2RpdmlkZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfdHJ1ZV9kaXZpZGUgKi8KLSAgICBsb25nX2xvbmcsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbmRleCAqLworICAgIChiaW5hcnlmdW5jKWxvbmdfYWRkLCAgICAgICAvKm5iX2FkZCovCisgICAgKGJpbmFyeWZ1bmMpbG9uZ19zdWIsICAgICAgIC8qbmJfc3VidHJhY3QqLworICAgIChiaW5hcnlmdW5jKWxvbmdfbXVsLCAgICAgICAvKm5iX211bHRpcGx5Ki8KKyAgICBsb25nX21vZCwgICAgICAgICAgICAgICAgICAgLypuYl9yZW1haW5kZXIqLworICAgIGxvbmdfZGl2bW9kLCAgICAgICAgICAgICAgICAvKm5iX2Rpdm1vZCovCisgICAgbG9uZ19wb3csICAgICAgICAgICAgICAgICAgIC8qbmJfcG93ZXIqLworICAgICh1bmFyeWZ1bmMpbG9uZ19uZWcsICAgICAgICAvKm5iX25lZ2F0aXZlKi8KKyAgICAodW5hcnlmdW5jKWxvbmdfbG9uZywgICAgICAgLyp0cF9wb3NpdGl2ZSovCisgICAgKHVuYXJ5ZnVuYylsb25nX2FicywgICAgICAgIC8qdHBfYWJzb2x1dGUqLworICAgIChpbnF1aXJ5KWxvbmdfYm9vbCwgICAgICAgICAvKnRwX2Jvb2wqLworICAgICh1bmFyeWZ1bmMpbG9uZ19pbnZlcnQsICAgICAvKm5iX2ludmVydCovCisgICAgbG9uZ19sc2hpZnQsICAgICAgICAgICAgICAgIC8qbmJfbHNoaWZ0Ki8KKyAgICAoYmluYXJ5ZnVuYylsb25nX3JzaGlmdCwgICAgLypuYl9yc2hpZnQqLworICAgIGxvbmdfYW5kLCAgICAgICAgICAgICAgICAgICAvKm5iX2FuZCovCisgICAgbG9uZ194b3IsICAgICAgICAgICAgICAgICAgIC8qbmJfeG9yKi8KKyAgICBsb25nX29yLCAgICAgICAgICAgICAgICAgICAgLypuYl9vciovCisgICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgIC8qbmJfaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLypuYl9yZXNlcnZlZCovCisgICAgbG9uZ19mbG9hdCwgICAgICAgICAgICAgICAgIC8qbmJfZmxvYXQqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FkZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3N1YnRyYWN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5iX2lucGxhY2VfbXVsdGlwbHkgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9yZW1haW5kZXIgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbmJfaW5wbGFjZV9wb3dlciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2xzaGlmdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3JzaGlmdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2FuZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3hvciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX29yICovCisgICAgbG9uZ19kaXYsICAgICAgICAgICAgICAgICAgIC8qIG5iX2Zsb29yX2RpdmlkZSAqLworICAgIGxvbmdfdHJ1ZV9kaXZpZGUsICAgICAgICAgICAvKiBuYl90cnVlX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX2Zsb29yX2RpdmlkZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBuYl9pbnBsYWNlX3RydWVfZGl2aWRlICovCisgICAgbG9uZ19sb25nLCAgICAgICAgICAgICAgICAgIC8qIG5iX2luZGV4ICovCiB9OwogCiBQeVR5cGVPYmplY3QgUHlMb25nX1R5cGUgPSB7CkBAIC00MTg4LDEzICs0NzYwLDEzIEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIGxvbmdfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIGxvbmdfdG9fZGVjaW1hbF9zdHJpbmcsICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgICZsb25nX2FzX251bWJlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwogICAgIChoYXNoZnVuYylsb25nX2hhc2gsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwotICAgIGxvbmdfcmVwciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgbG9uZ190b19kZWNpbWFsX3N0cmluZywgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdHIgKi8KICAgICBQeU9iamVjdF9HZW5lcmljR2V0QXR0ciwgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCkBAIC00MjMxLDggKzQ4MDMsNyBAQAogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9GaWVsZCBpbnRfaW5mb19maWVsZHNbXSA9IHsKICAgICB7ImJpdHNfcGVyX2RpZ2l0IiwgInNpemUgb2YgYSBkaWdpdCBpbiBiaXRzIn0sCi0gICAgeyJzaXplb2ZfZGlnaXQiLCAic2l6ZSBpbiBieXRlcyBvZiB0aGUgQyB0eXBlIHVzZWQgdG8gIgotICAgICAgICAgICAgICAgICAgICAgInJlcHJlc2VudCBhIGRpZ2l0In0sCisgICAgeyJzaXplb2ZfZGlnaXQiLCAic2l6ZSBpbiBieXRlcyBvZiB0aGUgQyB0eXBlIHVzZWQgdG8gcmVwcmVzZW50IGEgZGlnaXQifSwKICAgICB7TlVMTCwgTlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMgYi9PYmplY3RzL21lbW9yeW9iamVjdC5jCmluZGV4IDliNzdlYTcuLjJlMzJiMmEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwpAQCAtMyw2ICszLDIzIEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKIAorI2RlZmluZSBJU19SRUxFQVNFRChtZW1vYmopIFwKKyAgICAoKChQeU1lbW9yeVZpZXdPYmplY3QgKikgbWVtb2JqKS0+dmlldy5idWYgPT0gTlVMTCkKKworI2RlZmluZSBDSEVDS19SRUxFQVNFRChtZW1vYmopIFwKKyAgICBpZiAoSVNfUkVMRUFTRUQobWVtb2JqKSkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIGZvcmJpZGRlbiBvbiByZWxlYXNlZCBtZW1vcnl2aWV3IG9iamVjdCIpOyBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisjZGVmaW5lIENIRUNLX1JFTEVBU0VEX0lOVChtZW1vYmopIFwKKyAgICBpZiAoSVNfUkVMRUFTRUQobWVtb2JqKSkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0aW9uIGZvcmJpZGRlbiBvbiByZWxlYXNlZCBtZW1vcnl2aWV3IG9iamVjdCIpOyBcCisgICAgICAgIHJldHVybiAtMTsgXAorICAgIH0KKwogc3RhdGljIFB5X3NzaXplX3QKIGdldF9zaGFwZTAoUHlfYnVmZmVyICpidWYpCiB7CkBAIC0zNCw2ICs1MSw3IEBACiBtZW1vcnlfZ2V0YnVmKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZiwgUHlfYnVmZmVyICp2aWV3LCBpbnQgZmxhZ3MpCiB7CiAgICAgaW50IHJlcyA9IDA7CisgICAgQ0hFQ0tfUkVMRUFTRURfSU5UKHNlbGYpOwogICAgIGlmIChzZWxmLT52aWV3Lm9iaiAhPSBOVUxMKQogICAgICAgICByZXMgPSBQeU9iamVjdF9HZXRCdWZmZXIoc2VsZi0+dmlldy5vYmosIHZpZXcsIGZsYWdzKTsKICAgICBpZiAodmlldykKQEAgLTU3LDExICs3NSwxNSBAQAogewogICAgIFB5TWVtb3J5Vmlld09iamVjdCAqbXZpZXc7CiAKKyAgICBpZiAoaW5mby0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAiY2Fubm90IG1ha2UgbWVtb3J5IHZpZXcgZnJvbSBhIGJ1ZmZlciB3aXRoIGEgTlVMTCBkYXRhIHBvaW50ZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG12aWV3ID0gKFB5TWVtb3J5Vmlld09iamVjdCAqKQogICAgICAgICBQeU9iamVjdF9HQ19OZXcoUHlNZW1vcnlWaWV3T2JqZWN0LCAmUHlNZW1vcnlWaWV3X1R5cGUpOwogICAgIGlmIChtdmlldyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBtdmlldy0+YmFzZSA9IE5VTEw7CiAgICAgZHVwX2J1ZmZlcigmbXZpZXctPnZpZXcsIGluZm8pOwogICAgIC8qIE5PVEU6IG12aWV3LT52aWV3Lm9iaiBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVmJ2VkIGFzCiAgICAgICAgcGFydCBvZiBQeUJ1ZmZlcl9GaWxsSW5mbygpLiAqLwpAQCAtOTEsOCArMTEzLDYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbXZpZXctPmJhc2UgPSBiYXNlOwotICAgIFB5X0lOQ1JFRihiYXNlKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbXZpZXc7CiB9CiAKQEAgLTI3MCw4ICsyOTAsNiBAQAogCiAgICAgaWYgKFB5QnVmZmVyX0lzQ29udGlndW91cyh2aWV3LCBmb3J0KSkgewogICAgICAgICAvKiBubyBjb3B5IG5lZWRlZCAqLwotICAgICAgICBQeV9JTkNSRUYob2JqKTsKLSAgICAgICAgbWVtLT5iYXNlID0gb2JqOwogICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0sobWVtKTsKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKW1lbTsKICAgICB9CkBAIC0zMDMsMjEgKzMyMSw3IEBACiAgICAgICAgICAgICBQeV9ERUNSRUYobWVtKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgfQotICAgIGlmIChidWZmZXJ0eXBlID09IFB5QlVGX1NIQURPVykgewotICAgICAgICAvKiByZXR1cm4gYSBzaGFkb3dlZCBtZW1vcnktdmlldyBvYmplY3QgKi8KLSAgICAgICAgdmlldy0+YnVmID0gZGVzdDsKLSAgICAgICAgbWVtLT5iYXNlID0gUHlUdXBsZV9QYWNrKDIsIG9iaiwgYnl0ZXMpOwotICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOwotICAgICAgICBpZiAobWVtLT5iYXNlID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihtZW0pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7ICAvKiBYWFggPyAqLwotICAgICAgICAvKiBzdGVhbCB0aGUgcmVmZXJlbmNlICovCi0gICAgICAgIG1lbS0+YmFzZSA9IGJ5dGVzOwogICAgIH0KICAgICBfUHlPYmplY3RfR0NfVFJBQ0sobWVtKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbWVtOwpAQCAtMzI3LDEyICszMzEsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtZW1vcnlfZm9ybWF0X2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNlbGYtPnZpZXcuZm9ybWF0KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIG1lbW9yeV9pdGVtc2l6ZV9nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQogeworICAgIENIRUNLX1JFTEVBU0VEKHNlbGYpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2VsZi0+dmlldy5pdGVtc2l6ZSk7CiB9CiAKQEAgLTM0OCw4ICszNTQsOSBAQAogICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CiAgICAgaW50VHVwbGUgPSBQeVR1cGxlX05ldyhsZW4pOwotICAgIGlmICghaW50VHVwbGUpIHJldHVybiBOVUxMOwotICAgIGZvcihpPTA7IGk8bGVuOyBpKyspIHsKKyAgICBpZiAoIWludFR1cGxlKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykgewogICAgICAgICBvID0gUHlMb25nX0Zyb21Tc2l6ZV90KHZhbHNbaV0pOwogICAgICAgICBpZiAoIW8pIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbnRUdXBsZSk7CkBAIC0zNjMsMzAgKzM3MCwzNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1lbW9yeV9zaGFwZV9nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQogeworICAgIENIRUNLX1JFTEVBU0VEKHNlbGYpOwogICAgIHJldHVybiBfSW50VHVwbGVGcm9tU3NpemV0KHNlbGYtPnZpZXcubmRpbSwgc2VsZi0+dmlldy5zaGFwZSk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBtZW1vcnlfc3RyaWRlc19nZXQoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQogeworICAgIENIRUNLX1JFTEVBU0VEKHNlbGYpOwogICAgIHJldHVybiBfSW50VHVwbGVGcm9tU3NpemV0KHNlbGYtPnZpZXcubmRpbSwgc2VsZi0+dmlldy5zdHJpZGVzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIG1lbW9yeV9zdWJvZmZzZXRzX2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CiAgICAgcmV0dXJuIF9JbnRUdXBsZUZyb21Tc2l6ZXQoc2VsZi0+dmlldy5uZGltLCBzZWxmLT52aWV3LnN1Ym9mZnNldHMpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogbWVtb3J5X3JlYWRvbmx5X2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT52aWV3LnJlYWRvbmx5KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIG1lbW9yeV9uZGltX2dldChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT52aWV3Lm5kaW0pOwogfQogCkBAIC00MDUsNiArNDE3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtZW1vcnlfdG9ieXRlcyhQeU1lbW9yeVZpZXdPYmplY3QgKm1lbSwgUHlPYmplY3QgKm5vYXJncykKIHsKKyAgICBDSEVDS19SRUxFQVNFRChtZW0pOwogICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKAogICAgICAgICAgICAgKFB5T2JqZWN0ICopICZQeUJ5dGVzX1R5cGUsIG1lbSwgTlVMTCk7CiB9CkBAIC00MjAsNiArNDMzLDcgQEAKICAgICBQeU9iamVjdCAqcmVzLCAqaXRlbTsKICAgICBjaGFyICpidWY7CiAKKyAgICBDSEVDS19SRUxFQVNFRChtZW0pOwogICAgIGlmIChzdHJjbXAodmlldy0+Zm9ybWF0LCAiQiIpIHx8IHZpZXctPml0ZW1zaXplICE9IDEpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsIAogICAgICAgICAgICAgICAgICJ0b2xpc3QoKSBvbmx5IHN1cHBvcnRzIGJ5dGUgdmlld3MiKTsKQEAgLTQ0Niw5ICs0NjAsMzcgQEAKICAgICByZXR1cm4gcmVzOwogfQogCitzdGF0aWMgdm9pZAorZG9fcmVsZWFzZShQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPnZpZXcub2JqICE9IE5VTEwpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmKHNlbGYtPnZpZXcpKTsKKyAgICB9CisgICAgc2VsZi0+dmlldy5vYmogPSBOVUxMOworICAgIHNlbGYtPnZpZXcuYnVmID0gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK21lbW9yeV9lbnRlcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgQ0hFQ0tfUkVMRUFTRUQoc2VsZik7CisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiBzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorbWVtb3J5X2V4aXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGRvX3JlbGVhc2UoKFB5TWVtb3J5Vmlld09iamVjdCAqKSBzZWxmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKwogc3RhdGljIFB5TWV0aG9kRGVmIG1lbW9yeV9tZXRob2RzW10gPSB7CisgICAgeyJyZWxlYXNlIiwgbWVtb3J5X2V4aXQsIE1FVEhfTk9BUkdTfSwKICAgICB7InRvYnl0ZXMiLCAoUHlDRnVuY3Rpb24pbWVtb3J5X3RvYnl0ZXMsIE1FVEhfTk9BUkdTLCBOVUxMfSwKICAgICB7InRvbGlzdCIsIChQeUNGdW5jdGlvbiltZW1vcnlfdG9saXN0LCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2VudGVyX18iLCBtZW1vcnlfZW50ZXIsIE1FVEhfTk9BUkdTfSwKKyAgICB7Il9fZXhpdF9fIiwgbWVtb3J5X2V4aXQsIE1FVEhfVkFSQVJHU30sCiAgICAge05VTEwsICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNDU3LDQzICs0OTksMjQgQEAKIG1lbW9yeV9kZWFsbG9jKFB5TWVtb3J5Vmlld09iamVjdCAqc2VsZikKIHsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKLSAgICBpZiAoc2VsZi0+dmlldy5vYmogIT0gTlVMTCkgewotICAgICAgICBpZiAoc2VsZi0+YmFzZSAmJiBQeVR1cGxlX0NoZWNrKHNlbGYtPmJhc2UpKSB7Ci0gICAgICAgICAgICAvKiBTcGVjaWFsIGNhc2Ugd2hlbiBmaXJzdCBlbGVtZW50IGlzIGdlbmVyaWMgb2JqZWN0Ci0gICAgICAgICAgICAgICB3aXRoIGJ1ZmZlciBpbnRlcmZhY2UgYW5kIHRoZSBzZWNvbmQgZWxlbWVudCBpcyBhCi0gICAgICAgICAgICAgICBjb250aWd1b3VzICJzaGFkb3ciIHRoYXQgbXVzdCBiZSBjb3BpZWQgYmFjayBpbnRvCi0gICAgICAgICAgICAgICB0aGUgZGF0YSBhcmVheSBvZiB0aGUgZmlyc3QgdHVwbGUgZWxlbWVudCBiZWZvcmUKLSAgICAgICAgICAgICAgIHJlbGVhc2luZyB0aGUgYnVmZmVyIG9uIHRoZSBmaXJzdCBlbGVtZW50LgotICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgUHlPYmplY3RfQ29weURhdGEoUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5iYXNlLDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5iYXNlLDEpKTsKLQotICAgICAgICAgICAgLyogVGhlIHZpZXcgbWVtYmVyIHNob3VsZCBoYXZlIHJlYWRvbmx5ID09IC0xIGluCi0gICAgICAgICAgICAgICB0aGlzIGluc3RhbmNlIGluZGljYXRpbmcgdGhhdCB0aGUgbWVtb3J5IGNhbgotICAgICAgICAgICAgICAgYmUgImxvY2tlZCIgYW5kIHdhcyBsb2NrZWQgYW5kIHdpbGwgYmUgdW5sb2NrZWQKLSAgICAgICAgICAgICAgIGFnYWluIGFmdGVyIHRoaXMgY2FsbC4KLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCYoc2VsZi0+dmlldykpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmKHNlbGYtPnZpZXcpKTsKLSAgICAgICAgfQotICAgICAgICBQeV9DTEVBUihzZWxmLT5iYXNlKTsKLSAgICB9CisgICAgZG9fcmVsZWFzZShzZWxmKTsKICAgICBQeU9iamVjdF9HQ19EZWwoc2VsZik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBtZW1vcnlfcmVwcihQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bWVtb3J5IGF0ICVwPiIsIHNlbGYpOworICAgIGlmIChJU19SRUxFQVNFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8cmVsZWFzZWQgbWVtb3J5IGF0ICVwPiIsIHNlbGYpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bWVtb3J5IGF0ICVwPiIsIHNlbGYpOwogfQogCiAvKiBTZXF1ZW5jZSBtZXRob2RzICovCiBzdGF0aWMgUHlfc3NpemVfdAogbWVtb3J5X2xlbmd0aChQeU1lbW9yeVZpZXdPYmplY3QgKnNlbGYpCiB7CisgICAgQ0hFQ0tfUkVMRUFTRURfSU5UKHNlbGYpOwogICAgIHJldHVybiBnZXRfc2hhcGUwKCZzZWxmLT52aWV3KTsKIH0KIApAQCAtNTA1LDYgKzUyOCw3IEBACiB7CiAgICAgUHlfYnVmZmVyICp2aWV3ID0gJihzZWxmLT52aWV3KTsKIAorICAgIENIRUNLX1JFTEVBU0VEKHNlbGYpOwogICAgIGlmICh2aWV3LT5uZGltID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBpbmRleGluZyBvZiAwLWRpbSBtZW1vcnkiKTsKQEAgLTU1NCw2ICs1NzgsNyBAQAogICAgIFB5X2J1ZmZlciAqdmlldzsKICAgICB2aWV3ID0gJihzZWxmLT52aWV3KTsKICAgICAKKyAgICBDSEVDS19SRUxFQVNFRChzZWxmKTsKICAgICBpZiAodmlldy0+bmRpbSA9PSAwKSB7CiAgICAgICAgIGlmIChrZXkgPT0gUHlfRWxsaXBzaXMgfHwKICAgICAgICAgICAgIChQeVR1cGxlX0NoZWNrKGtleSkgJiYgUHlUdXBsZV9HRVRfU0laRShrZXkpPT0wKSkgewpAQCAtNTc2LDcgKzYwMSw3IEBACiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhrZXkpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuZ3RoOwogCi0gICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlTbGljZU9iamVjdCopa2V5LCBnZXRfc2hhcGUwKHZpZXcpLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoa2V5LCBnZXRfc2hhcGUwKHZpZXcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmc3RvcCwgJnN0ZXAsICZzbGljZWxlbmd0aCkgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtNjIzLDYgKzY0OCw3IEBACiAgICAgUHlfYnVmZmVyICp2aWV3ID0gJihzZWxmLT52aWV3KTsKICAgICBjaGFyICpzcmNidWYsICpkZXN0YnVmOwogCisgICAgQ0hFQ0tfUkVMRUFTRURfSU5UKHNlbGYpOwogICAgIGlmICh2aWV3LT5yZWFkb25seSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgImNhbm5vdCBtb2RpZnkgcmVhZC1vbmx5IG1lbW9yeSIpOwpAQCAtNjU0LDcgKzY4MCw3IEBACiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhrZXkpKSB7CiAgICAgICAgIFB5X3NzaXplX3Qgc3RvcCwgc3RlcDsKIAotICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5U2xpY2VPYmplY3QqKWtleSwgZ2V0X3NoYXBlMCh2aWV3KSwKKyAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KGtleSwgZ2V0X3NoYXBlMCh2aWV3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJmxlbikgPCAwKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTcxNSw2ICs3NDEsMTEgQEAKICAgICB3dy5vYmogPSBOVUxMOwogICAgIGlmIChvcCAhPSBQeV9FUSAmJiBvcCAhPSBQeV9ORSkKICAgICAgICAgZ290byBfbm90aW1wbDsKKyAgICBpZiAoKFB5TWVtb3J5Vmlld19DaGVjayh2KSAmJiBJU19SRUxFQVNFRCh2KSkgfHwKKyAgICAgICAgKFB5TWVtb3J5Vmlld19DaGVjayh3KSAmJiBJU19SRUxFQVNFRCh3KSkpIHsKKyAgICAgICAgZXF1YWwgPSAodiA9PSB3KTsKKyAgICAgICAgZ290byBfZW5kOworICAgIH0KICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHYsICZ2diwgUHlCVUZfQ09OVElHX1JPKSA9PSAtMSkgewogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBnb3RvIF9ub3RpbXBsOwpAQCAtNzUwLDggKzc4MSw2IEBACiBzdGF0aWMgaW50CiBtZW1vcnlfdHJhdmVyc2UoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKLSAgICBpZiAoc2VsZi0+YmFzZSAhPSBOVUxMKQotICAgICAgICBQeV9WSVNJVChzZWxmLT5iYXNlKTsKICAgICBpZiAoc2VsZi0+dmlldy5vYmogIT0gTlVMTCkKICAgICAgICAgUHlfVklTSVQoc2VsZi0+dmlldy5vYmopOwogICAgIHJldHVybiAwOwpAQCAtNzYwLDcgKzc4OSw2IEBACiBzdGF0aWMgaW50CiBtZW1vcnlfY2xlYXIoUHlNZW1vcnlWaWV3T2JqZWN0ICpzZWxmKQogewotICAgIFB5X0NMRUFSKHNlbGYtPmJhc2UpOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPnZpZXcpOwogICAgIHJldHVybiAwOwogfQpAQCAtNzc0LDEwICs4MDIsMTAgQEAKIH07CiAKIHN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyBtZW1vcnlfYXNfc2VxdWVuY2UgPSB7Ci0JMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCi0JMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCi0JMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfcmVwZWF0ICovCi0JKHNzaXplYXJnZnVuYyltZW1vcnlfaXRlbSwgICAgICAgICAgLyogc3FfaXRlbSAqLworICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9sZW5ndGggKi8KKyAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfY29uY2F0ICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLworICAgICAgICAoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgICAvKiBzcV9pdGVtICovCiB9OwogCiAvKiBCdWZmZXIgbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9tZXRob2RvYmplY3QuYyBiL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKaW5kZXggMzU2ZDE2MS4uZjFhOWY0YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9tZXRob2RvYmplY3QuYworKysgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCkBAIC0yMjQsMTAgKzIyNCwxMCBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBtZXRoX2hhc2goUHlDRnVuY3Rpb25PYmplY3QgKmEpCiB7Ci0gICAgbG9uZyB4LHk7CisgICAgUHlfaGFzaF90IHgsIHk7CiAgICAgaWYgKGEtPm1fc2VsZiA9PSBOVUxMKQogICAgICAgICB4ID0gMDsKICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL09iamVjdHMvbW9kdWxlb2JqZWN0LmMgYi9PYmplY3RzL21vZHVsZW9iamVjdC5jCmluZGV4IGQ5NmQ3YmQuLmYzMWI1ZGEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwpAQCAtNTYsMTAgKzU2LDYgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGNoYXIgYXBpX3ZlcnNpb25fd2FybmluZ1tdID0KLSJQeXRob24gQyBBUEkgdmVyc2lvbiBtaXNtYXRjaCBmb3IgbW9kdWxlICUuMTAwczpcCi0gVGhpcyBQeXRob24gaGFzIEFQSSB2ZXJzaW9uICVkLCBtb2R1bGUgJS4xMDBzIGhhcyB2ZXJzaW9uICVkLiI7Ci0KIFB5T2JqZWN0ICoKIFB5TW9kdWxlX0NyZWF0ZTIoc3RydWN0IFB5TW9kdWxlRGVmKiBtb2R1bGUsIGludCBtb2R1bGVfYXBpX3ZlcnNpb24pCiB7CkBAIC03OSwxMyArNzUsMTQgQEAKICAgICAgICAgbW9kdWxlLT5tX2Jhc2UubV9pbmRleCA9IG1heF9tb2R1bGVfbnVtYmVyOwogICAgIH0KICAgICBuYW1lID0gbW9kdWxlLT5tX25hbWU7Ci0gICAgaWYgKG1vZHVsZV9hcGlfdmVyc2lvbiAhPSBQWVRIT05fQVBJX1ZFUlNJT04pIHsKLSAgICAgICAgY2hhciBtZXNzYWdlWzUxMl07Ci0gICAgICAgIFB5T1Nfc25wcmludGYobWVzc2FnZSwgc2l6ZW9mKG1lc3NhZ2UpLAotICAgICAgICAgICAgICAgICAgICAgIGFwaV92ZXJzaW9uX3dhcm5pbmcsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgUFlUSE9OX0FQSV9WRVJTSU9OLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9hcGlfdmVyc2lvbik7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfUnVudGltZVdhcm5pbmcsIG1lc3NhZ2UsIDEpKQorICAgIGlmIChtb2R1bGVfYXBpX3ZlcnNpb24gIT0gUFlUSE9OX0FQSV9WRVJTSU9OICYmIG1vZHVsZV9hcGlfdmVyc2lvbiAhPSBQWVRIT05fQUJJX1ZFUlNJT04pIHsKKyAgICAgICAgaW50IGVycjsKKyAgICAgICAgZXJyID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SdW50aW1lV2FybmluZywgMSwKKyAgICAgICAgICAgICJQeXRob24gQyBBUEkgdmVyc2lvbiBtaXNtYXRjaCBmb3IgbW9kdWxlICUuMTAwczogIgorICAgICAgICAgICAgIlRoaXMgUHl0aG9uIGhhcyBBUEkgdmVyc2lvbiAlZCwgbW9kdWxlICUuMTAwcyBoYXMgdmVyc2lvbiAlZC4iLAorICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgUFlUSE9OX0FQSV9WRVJTSU9OLCBuYW1lLCBtb2R1bGVfYXBpX3ZlcnNpb24pOworICAgICAgICBpZiAoZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIC8qIE1ha2Ugc3VyZSBuYW1lIGlzIGZ1bGx5IHF1YWxpZmllZC4KQEAgLTE5Miw4ICsxODksOCBAQAogICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWVvYmopOwogfQogCi1jb25zdCBjaGFyICoKLVB5TW9kdWxlX0dldEZpbGVuYW1lKFB5T2JqZWN0ICptKQorUHlPYmplY3QqCitQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdChQeU9iamVjdCAqbSkKIHsKICAgICBQeU9iamVjdCAqZDsKICAgICBQeU9iamVjdCAqZmlsZW9iajsKQEAgLTIwOSw3ICsyMDYsMjEgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAibW9kdWxlIGZpbGVuYW1lIG1pc3NpbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGZpbGVvYmopOworICAgIFB5X0lOQ1JFRihmaWxlb2JqKTsKKyAgICByZXR1cm4gZmlsZW9iajsKK30KKworY29uc3QgY2hhciAqCitQeU1vZHVsZV9HZXRGaWxlbmFtZShQeU9iamVjdCAqbSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW9iajsKKyAgICBjaGFyICp1dGY4OworICAgIGZpbGVvYmogPSBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdChtKTsKKyAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB1dGY4ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhmaWxlb2JqKTsKKyAgICBQeV9ERUNSRUYoZmlsZW9iaik7CisgICAgcmV0dXJuIHV0Zjg7CiB9CiAKIFB5TW9kdWxlRGVmKgpAQCAtMjU0LDEwICsyNjUsMTUgQEAKICAgICBwb3MgPSAwOwogICAgIHdoaWxlIChQeURpY3RfTmV4dChkLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CiAgICAgICAgIGlmICh2YWx1ZSAhPSBQeV9Ob25lICYmIFB5VW5pY29kZV9DaGVjayhrZXkpKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyICpzID0gX1B5VW5pY29kZV9Bc1N0cmluZyhrZXkpOwotICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ18nICYmIHNbMV0gIT0gJ18nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnID4gMSkKLSAgICAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgICBjbGVhclsxXSAlc1xuIiwgcyk7CisgICAgICAgICAgICBQeV9VTklDT0RFICp1ID0gUHlVbmljb2RlX0FTX1VOSUNPREUoa2V5KTsKKyAgICAgICAgICAgIGlmICh1WzBdID09ICdfJyAmJiB1WzFdICE9ICdfJykgeworICAgICAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjICAgY2xlYXJbMV0gJXNcbiIsIHMpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShkLCBrZXksIFB5X05vbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNjcsMTAgKzI4MywxNyBAQAogICAgIHBvcyA9IDA7CiAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGQsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKICAgICAgICAgaWYgKHZhbHVlICE9IFB5X05vbmUgJiYgUHlVbmljb2RlX0NoZWNrKGtleSkpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIgKnMgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBpZiAoc1swXSAhPSAnXycgfHwgc3RyY21wKHMsICJfX2J1aWx0aW5zX18iKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnID4gMSkKLSAgICAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgICBjbGVhclsyXSAlc1xuIiwgcyk7CisgICAgICAgICAgICBQeV9VTklDT0RFICp1ID0gUHlVbmljb2RlX0FTX1VOSUNPREUoa2V5KTsKKyAgICAgICAgICAgIGlmICh1WzBdICE9ICdfJworICAgICAgICAgICAgICAgIHx8IFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgIl9fYnVpbHRpbnNfXyIpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnID4gMSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzID0gX1B5VW5pY29kZV9Bc1N0cmluZyhrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgICBjbGVhclsyXSAlc1xuIiwgcyk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKGQsIGtleSwgUHlfTm9uZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTMyNSwxOSArMzQ4LDIxIEBACiBtb2R1bGVfcmVwcihQeU1vZHVsZU9iamVjdCAqbSkKIHsKICAgICBjb25zdCBjaGFyICpuYW1lOwotICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKnJlcHI7CiAKICAgICBuYW1lID0gUHlNb2R1bGVfR2V0TmFtZSgoUHlPYmplY3QgKiltKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIG5hbWUgPSAiPyI7CiAgICAgfQotICAgIGZpbGVuYW1lID0gUHlNb2R1bGVfR2V0RmlsZW5hbWUoKFB5T2JqZWN0ICopbSk7CisgICAgZmlsZW5hbWUgPSBQeU1vZHVsZV9HZXRGaWxlbmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJyVzJyAoYnVpbHQtaW4pPiIsIG5hbWUpOwogICAgIH0KLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJyVzJyBmcm9tICclcyc+IiwgbmFtZSwgZmlsZW5hbWUpOworICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPG1vZHVsZSAnJXMnIGZyb20gJyVVJz4iLCBuYW1lLCBmaWxlbmFtZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVwcjsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggZDUzNDI3My4uMTdlNTA2OSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC0yLDcgKzIsNiBAQAogLyogR2VuZXJpYyBvYmplY3Qgb3BlcmF0aW9uczsgYW5kIGltcGxlbWVudGF0aW9uIG9mIE5vbmUgKE5vT2JqZWN0KSAqLwogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAic2xpY2VvYmplY3QuaCIgLyogRm9yIFB5RWxsaXBzaXNfVHlwZSAqLwogI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtNTM2LDEwICs1MzUsMTIgQEAKIHsKICAgICByaWNoY21wZnVuYyBmOwogICAgIFB5T2JqZWN0ICpyZXM7CisgICAgaW50IGNoZWNrZWRfcmV2ZXJzZV9vcCA9IDA7CiAKICAgICBpZiAodi0+b2JfdHlwZSAhPSB3LT5vYl90eXBlICYmCiAgICAgICAgIFB5VHlwZV9Jc1N1YnR5cGUody0+b2JfdHlwZSwgdi0+b2JfdHlwZSkgJiYKICAgICAgICAgKGYgPSB3LT5vYl90eXBlLT50cF9yaWNoY29tcGFyZSkgIT0gTlVMTCkgeworICAgICAgICBjaGVja2VkX3JldmVyc2Vfb3AgPSAxOwogICAgICAgICByZXMgPSAoKmYpKHcsIHYsIF9QeV9Td2FwcGVkT3Bbb3BdKTsKICAgICAgICAgaWYgKHJlcyAhPSBQeV9Ob3RJbXBsZW1lbnRlZCkKICAgICAgICAgICAgIHJldHVybiByZXM7CkBAIC01NTEsNyArNTUyLDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIH0KLSAgICBpZiAoKGYgPSB3LT5vYl90eXBlLT50cF9yaWNoY29tcGFyZSkgIT0gTlVMTCkgeworICAgIGlmICghY2hlY2tlZF9yZXZlcnNlX29wICYmIChmID0gdy0+b2JfdHlwZS0+dHBfcmljaGNvbXBhcmUpICE9IE5VTEwpIHsKICAgICAgICAgcmVzID0gKCpmKSh3LCB2LCBfUHlfU3dhcHBlZE9wW29wXSk7CiAgICAgICAgIGlmIChyZXMgIT0gUHlfTm90SW1wbGVtZW50ZWQpCiAgICAgICAgICAgICByZXR1cm4gcmVzOwpAQCAtNjM0LDc3ICs2MzUsMTE4IEBACiAgICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KICovCiAKLWxvbmcKKy8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KKyAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAorICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCisgICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgorCisgICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6CisKKyAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAorICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgorICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAorICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcworICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQorICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCisgICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCisKKyAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCisKKyAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgorCisgICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKKyAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCisKKyAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgorICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKKyAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCisgICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKKyAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgorCisgICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCisgICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycworICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKKyAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0CisKKyAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQorCisgICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQorICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCisgICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKKyAgIGZvciBub25uZWdhdGl2ZSB4LAorCisgICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUworCisgICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgorICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQorICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgorICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KKworICAgKi8KKworUHlfaGFzaF90CiBfUHlfSGFzaERvdWJsZShkb3VibGUgdikKIHsKLSAgICBkb3VibGUgaW50cGFydCwgZnJhY3RwYXJ0OwotICAgIGludCBleHBvOwotICAgIGxvbmcgaGlwYXJ0OwotICAgIGxvbmcgeDsgICAgICAgICAgICAgLyogdGhlIGZpbmFsIGhhc2ggdmFsdWUgKi8KLSAgICAvKiBUaGlzIGlzIGRlc2lnbmVkIHNvIHRoYXQgUHl0aG9uIG51bWJlcnMgb2YgZGlmZmVyZW50IHR5cGVzCi0gICAgICogdGhhdCBjb21wYXJlIGVxdWFsIGhhc2ggdG8gdGhlIHNhbWUgdmFsdWU7IG90aGVyd2lzZSBjb21wYXJpc29ucwotICAgICAqIG9mIG1hcHBpbmcga2V5cyB3aWxsIHR1cm4gb3V0IHdlaXJkLgotICAgICAqLworICAgIGludCBlLCBzaWduOworICAgIGRvdWJsZSBtOworICAgIFB5X3VoYXNoX3QgeCwgeTsKIAotICAgIGZyYWN0cGFydCA9IG1vZGYodiwgJmludHBhcnQpOwotICAgIGlmIChmcmFjdHBhcnQgPT0gMC4wKSB7Ci0gICAgICAgIC8qIFRoaXMgbXVzdCByZXR1cm4gdGhlIHNhbWUgaGFzaCBhcyBhbiBlcXVhbCBpbnQgb3IgbG9uZy4gKi8KLSAgICAgICAgaWYgKGludHBhcnQgPiBMT05HX01BWC8yIHx8IC1pbnRwYXJ0ID4gTE9OR19NQVgvMikgewotICAgICAgICAgICAgLyogQ29udmVydCB0byBsb25nIGFuZCB1c2UgaXRzIGhhc2guICovCi0gICAgICAgICAgICBQeU9iamVjdCAqcGxvbmc7ICAgICAgICAgICAgICAgICAgICAvKiBjb252ZXJ0ZWQgdG8gUHl0aG9uIGxvbmcgKi8KLSAgICAgICAgICAgIGlmIChQeV9JU19JTkZJTklUWShpbnRwYXJ0KSkKLSAgICAgICAgICAgICAgICAvKiBjYW4ndCBjb252ZXJ0IHRvIGxvbmcgaW50IC0tIGFyYml0cmFyeSAqLwotICAgICAgICAgICAgICAgIHYgPSB2IDwgMCA/IC0yNzE4MjguMCA6IDMxNDE1OS4wOwotICAgICAgICAgICAgcGxvbmcgPSBQeUxvbmdfRnJvbURvdWJsZSh2KTsKLSAgICAgICAgICAgIGlmIChwbG9uZyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9IYXNoKHBsb25nKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwbG9uZyk7Ci0gICAgICAgICAgICByZXR1cm4geDsKLSAgICAgICAgfQotICAgICAgICAvKiBGaXRzIGluIGEgQyBsb25nID09IGEgUHl0aG9uIGludCwgc28gaXMgaXRzIG93biBoYXNoLiAqLwotICAgICAgICB4ID0gKGxvbmcpaW50cGFydDsKLSAgICAgICAgaWYgKHggPT0gLTEpCi0gICAgICAgICAgICB4ID0gLTI7Ci0gICAgICAgIHJldHVybiB4OworICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7CisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKKyAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47CiAgICAgfQotICAgIC8qIFRoZSBmcmFjdGlvbmFsIHBhcnQgaXMgbm9uLXplcm8sIHNvIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKLSAgICAgKiBtYWtpbmcgdGhpcyBtYXRjaCB0aGUgaGFzaCBvZiBzb21lIG90aGVyIHR5cGUuCi0gICAgICogVXNlIGZyZXhwIHRvIGdldCBhdCB0aGUgYml0cyBpbiB0aGUgZG91YmxlLgotICAgICAqIFNpbmNlIHRoZSBWQVggRCBkb3VibGUgZm9ybWF0IGhhcyA1NiBtYW50aXNzYSBiaXRzLCB3aGljaCBpcyB0aGUKLSAgICAgKiBtb3N0IG9mIGFueSBkb3VibGUgZm9ybWF0IGluIHVzZSwgZWFjaCBvZiB0aGVzZSBwYXJ0cyBtYXkgaGF2ZSBhcwotICAgICAqIG1hbnkgYXMgKGJ1dCBubyBtb3JlIHRoYW4pIDU2IHNpZ25pZmljYW50IGJpdHMuCi0gICAgICogU28sIGFzc3VtaW5nIHNpemVvZihsb25nKSA+PSA0LCBlYWNoIHBhcnQgY2FuIGJlIGJyb2tlbiBpbnRvIHR3bwotICAgICAqIGxvbmdzOyBmcmV4cCBhbmQgbXVsdGlwbGljYXRpb24gYXJlIHVzZWQgdG8gZG8gdGhhdC4KLSAgICAgKiBBbHNvLCBzaW5jZSB0aGUgQ3JheSBkb3VibGUgZm9ybWF0IGhhcyAxNSBleHBvbmVudCBiaXRzLCB3aGljaCBpcwotICAgICAqIHRoZSBtb3N0IG9mIGFueSBkb3VibGUgZm9ybWF0IGluIHVzZSwgc2hpZnRpbmcgdGhlIGV4cG9uZW50IGZpZWxkCi0gICAgICogbGVmdCBieSAxNSB3b24ndCBvdmVyZmxvdyBhIGxvbmcgKGFnYWluIGFzc3VtaW5nIHNpemVvZihsb25nKSA+PSA0KS4KLSAgICAgKi8KLSAgICB2ID0gZnJleHAodiwgJmV4cG8pOwotICAgIHYgKj0gMjE0NzQ4MzY0OC4wOyAgICAgICAgICAvKiAyKiozMSAqLwotICAgIGhpcGFydCA9IChsb25nKXY7ICAgICAgICAgICAvKiB0YWtlIHRoZSB0b3AgMzIgYml0cyAqLwotICAgIHYgPSAodiAtIChkb3VibGUpaGlwYXJ0KSAqIDIxNDc0ODM2NDguMDsgLyogZ2V0IHRoZSBuZXh0IDMyIGJpdHMgKi8KLSAgICB4ID0gaGlwYXJ0ICsgKGxvbmcpdiArIChleHBvIDw8IDE1KTsKLSAgICBpZiAoeCA9PSAtMSkKLSAgICAgICAgeCA9IC0yOwotICAgIHJldHVybiB4OworCisgICAgbSA9IGZyZXhwKHYsICZlKTsKKworICAgIHNpZ24gPSAxOworICAgIGlmIChtIDwgMCkgeworICAgICAgICBzaWduID0gLTE7CisgICAgICAgIG0gPSAtbTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQorICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KKyAgICB4ID0gMDsKKyAgICB3aGlsZSAobSkgeworICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7CisgICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLworICAgICAgICBlIC09IDI4OworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLworICAgICAgICBtIC09IHk7CisgICAgICAgIHggKz0geTsKKyAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7CisgICAgfQorCisgICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLworICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7CisgICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKKworICAgIHggPSB4ICogc2lnbjsKKyAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKKyAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOworICAgIHJldHVybiAoUHlfaGFzaF90KXg7CiB9CiAKLWxvbmcKK1B5X2hhc2hfdAogX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCiB7Ci0gICAgbG9uZyB4OworICAgIFB5X2hhc2hfdCB4OwogICAgIHNpemVfdCB5ID0gKHNpemVfdClwOwogICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKICAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLwogICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKLSAgICB4ID0gKGxvbmcpeTsKKyAgICB4ID0gKFB5X2hhc2hfdCl5OwogICAgIGlmICh4ID09IC0xKQogICAgICAgICB4ID0gLTI7CiAgICAgcmV0dXJuIHg7CiB9CiAKLWxvbmcKK1B5X2hhc2hfdAogUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICp2KQogewogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJ1bmhhc2hhYmxlIHR5cGU6ICclLjIwMHMnIiwKQEAgLTcxMiw3ICs3NTQsNyBAQAogICAgIHJldHVybiAtMTsKIH0KIAotbG9uZworUHlfaGFzaF90CiBQeU9iamVjdF9IYXNoKFB5T2JqZWN0ICp2KQogewogICAgIFB5VHlwZU9iamVjdCAqdHAgPSBQeV9UWVBFKHYpOwpAQCAtOTM0LDMxICs5NzYsNyBAQAogICAgICAgICAgICAgZ290byBkb25lOwogICAgIH0KIAotI2lmIDAgLyogWFhYIHRoaXMgaXMgbm90IHF1aXRlIF9QeVR5cGVfTG9va3VwIGFueW1vcmUgKi8KLSAgICAvKiBJbmxpbmUgX1B5VHlwZV9Mb29rdXAgKi8KLSAgICB7Ci0gICAgICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICAgICAgUHlPYmplY3QgKm1ybywgKmJhc2UsICpkaWN0OwotCi0gICAgICAgIC8qIExvb2sgaW4gdHBfZGljdCBvZiB0eXBlcyBpbiBNUk8gKi8KLSAgICAgICAgbXJvID0gdHAtPnRwX21ybzsKLSAgICAgICAgYXNzZXJ0KG1ybyAhPSBOVUxMKTsKLSAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2sobXJvKSk7Ci0gICAgICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIGJhc2UgPSBQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSk7Ci0gICAgICAgICAgICBhc3NlcnQoUHlUeXBlX0NoZWNrKGJhc2UpKTsKLSAgICAgICAgICAgIGRpY3QgPSAoKFB5VHlwZU9iamVjdCAqKWJhc2UpLT50cF9kaWN0OwotICAgICAgICAgICAgYXNzZXJ0KGRpY3QgJiYgUHlEaWN0X0NoZWNrKGRpY3QpKTsKLSAgICAgICAgICAgIGRlc2NyID0gUHlEaWN0X0dldEl0ZW0oZGljdCwgbmFtZSk7Ci0gICAgICAgICAgICBpZiAoZGVzY3IgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNlbHNlCiAgICAgZGVzY3IgPSBfUHlUeXBlX0xvb2t1cCh0cCwgbmFtZSk7Ci0jZW5kaWYKLQogICAgIFB5X1hJTkNSRUYoZGVzY3IpOwogCiAgICAgZiA9IE5VTEw7CkBAIC0xNTUyLDEwICsxNTcwLDkgQEAKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeVN0YXRpY01ldGhvZF9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgc3RhdGljIG1ldGhvZCB0eXBlIik7CiAKLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlDb21wbGV4X1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBjb21wbGV4IHR5cGUiKTsKLSNlbmRpZgorCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGbG9hdF9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgZmxvYXQgdHlwZSIpOwogCkBAIC0xNzM4LDEwICsxNzU1LDYgQEAKIAogI2VuZGlmCiAKLS8qIEhhY2sgdG8gZm9yY2UgbG9hZGluZyBvZiBjb2JqZWN0Lm8gKi8KLVB5VHlwZU9iamVjdCAqX1B5X2NvYmplY3RfaGFjayA9ICZQeUNPYmplY3RfVHlwZTsKLQotCiAvKiBIYWNrIHRvIGZvcmNlIGxvYWRpbmcgb2YgcHljYXBzdWxlLm8gKi8KIFB5VHlwZU9iamVjdCAqX1B5Q2Fwc3VsZV9oYWNrID0gJlB5Q2Fwc3VsZV9UeXBlOwogCkBAIC0xODg2LDYgKzE4OTksMTkgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgUHlfVFJBQ0VfUkVGUworLyogRm9yIFB5X0xJTUlURURfQVBJLCB3ZSBuZWVkIGFuIG91dC1vZi1saW5lIHZlcnNpb24gb2YgX1B5X0RlYWxsb2MuCisgICBEZWZpbmUgdGhpcyBoZXJlLCBzbyB3ZSBjYW4gdW5kZWZpbmUgdGhlIG1hY3JvLiAqLworI3VuZGVmIF9QeV9EZWFsbG9jCitQeUFQSV9GVU5DKHZvaWQpIF9QeV9EZWFsbG9jKFB5T2JqZWN0ICopOwordm9pZAorX1B5X0RlYWxsb2MoUHlPYmplY3QgKm9wKQoreworICAgIF9QeV9JTkNfVFBGUkVFUyhvcCkgX1B5X0NPVU5UX0FMTE9DU19DT01NQQorICAgICgqUHlfVFlQRShvcCktPnRwX2RlYWxsb2MpKG9wKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGFmMTJmNDEuLjM5MTYyNjIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTIsNiArMiwyMSBAQAogCiAjaWZkZWYgV0lUSF9QWU1BTExPQwogCisjaWZkZWYgV0lUSF9WQUxHUklORAorI2luY2x1ZGUgPHZhbGdyaW5kL3ZhbGdyaW5kLmg+CisKKy8qIElmIHdlJ3JlIHVzaW5nIEdDQywgdXNlIF9fYnVpbHRpbl9leHBlY3QoKSB0byByZWR1Y2Ugb3ZlcmhlYWQgb2YKKyAgIHRoZSB2YWxncmluZCBjaGVja3MgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoX19HTlVDX18gPiAyKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyMgIGRlZmluZSBVTkxJS0VMWSh2YWx1ZSkgX19idWlsdGluX2V4cGVjdCgodmFsdWUpLCAwKQorI2Vsc2UKKyMgIGRlZmluZSBVTkxJS0VMWSh2YWx1ZSkgKHZhbHVlKQorI2VuZGlmCisKKy8qIC0xIGluZGljYXRlcyB0aGF0IHdlIGhhdmVuJ3QgY2hlY2tlZCB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gdmFsZ3JpbmQgeWV0LiAqLworc3RhdGljIGludCBydW5uaW5nX29uX3ZhbGdyaW5kID0gLTE7CisjZW5kaWYKKwogLyogQW4gb2JqZWN0IGFsbG9jYXRvciBmb3IgUHl0aG9uLgogCiAgICBIZXJlIGlzIGFuIGludHJvZHVjdGlvbiB0byB0aGUgbGF5ZXJzIG9mIHRoZSBQeXRob24gbWVtb3J5IGFyY2hpdGVjdHVyZSwKQEAgLTczNiw2ICs3NTEsMTMgQEAKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorI2lmZGVmIFdJVEhfVkFMR1JJTkQKKyAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCisgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOworICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kKSkKKyAgICAgICAgZ290byByZWRpcmVjdDsKKyNlbmRpZgorCiAgICAgLyoKICAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KICAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawpAQCAtOTM4LDYgKzk2MCwxMSBAQAogICAgIGlmIChwID09IE5VTEwpICAgICAgLyogZnJlZShOVUxMKSBoYXMgbm8gZWZmZWN0ICovCiAgICAgICAgIHJldHVybjsKIAorI2lmZGVmIFdJVEhfVkFMR1JJTkQKKyAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQorICAgICAgICBnb3RvIHJlZGlyZWN0OworI2VuZGlmCisKICAgICBwb29sID0gUE9PTF9BRERSKHApOwogICAgIGlmIChQeV9BRERSRVNTX0lOX1JBTkdFKHAsIHBvb2wpKSB7CiAgICAgICAgIC8qIFdlIGFsbG9jYXRlZCB0aGlzIGFkZHJlc3MuICovCkBAIC0xMTMyLDYgKzExNTksOSBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisjaWZkZWYgV0lUSF9WQUxHUklORAorcmVkaXJlY3Q6CisjZW5kaWYKICAgICAvKiBXZSBkaWRuJ3QgYWxsb2NhdGUgdGhpcyBhZGRyZXNzLiAqLwogICAgIGZyZWUocCk7CiB9CkBAIC0xMTY0LDYgKzExOTQsMTIgQEAKICAgICBpZiAobmJ5dGVzID4gUFlfU1NJWkVfVF9NQVgpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgV0lUSF9WQUxHUklORAorICAgIC8qIFRyZWF0IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEgdGhlIHNhbWUgYXMgMCAqLworICAgIGlmIChVTkxJS0VMWShydW5uaW5nX29uX3ZhbGdyaW5kID4gMCkpCisgICAgICAgIGdvdG8gcmVkaXJlY3Q7CisjZW5kaWYKKwogICAgIHBvb2wgPSBQT09MX0FERFIocCk7CiAgICAgaWYgKFB5X0FERFJFU1NfSU5fUkFOR0UocCwgcG9vbCkpIHsKICAgICAgICAgLyogV2UncmUgaW4gY2hhcmdlIG9mIHRoaXMgYmxvY2sgKi8KQEAgLTExOTEsNiArMTIyNyw5IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGJwOwogICAgIH0KKyNpZmRlZiBXSVRIX1ZBTEdSSU5ECisgcmVkaXJlY3Q6CisjZW5kaWYKICAgICAvKiBXZSdyZSBub3QgbWFuYWdpbmcgdGhpcyBibG9jay4gIElmIG5ieXRlcyA8PQogICAgICAqIFNNQUxMX1JFUVVFU1RfVEhSRVNIT0xELCBpdCdzIHRlbXB0aW5nIHRvIHRyeSB0byB0YWtlIG92ZXIgdGhpcwogICAgICAqIGJsb2NrLiAgSG93ZXZlciwgaWYgd2UgZG8sIHdlIG5lZWQgdG8gY29weSB0aGUgdmFsaWQgZGF0YSBmcm9tCkBAIC0xMjU1LDYgKzEyOTQsMTAgQEAKICNkZWZpbmUgREVBREJZVEUgICAgICAgMHhEQiAgICAvKiBkZWFkIChuZXdseSBmcmVlZCkgbWVtb3J5ICovCiAjZGVmaW5lIEZPUkJJRERFTkJZVEUgIDB4RkIgICAgLyogdW50b3VjaGFibGUgYnl0ZXMgYXQgZWFjaCBlbmQgb2YgYSBibG9jayAqLwogCisvKiBXZSB0YWcgZWFjaCBibG9jayB3aXRoIGFuIEFQSSBJRCBpbiBvcmRlciB0byB0YWcgQVBJIHZpb2xhdGlvbnMgKi8KKyNkZWZpbmUgX1BZTUFMTE9DX01FTV9JRCAnbScgICAvKiB0aGUgUHlNZW1fTWFsbG9jKCkgQVBJICovCisjZGVmaW5lIF9QWU1BTExPQ19PQkpfSUQgJ28nICAgLyogVGhlIFB5T2JqZWN0X01hbGxvYygpIEFQSSAqLworCiBzdGF0aWMgc2l6ZV90IHNlcmlhbG5vID0gMDsgICAgIC8qIGluY3JlbWVudGVkIG9uIGVhY2ggZGVidWcge20scmV9YWxsb2MgKi8KIAogLyogc2VyaWFsbm8gaXMgYWx3YXlzIGluY3JlbWVudGVkIHZpYSBjYWxsaW5nIHRoaXMgcm91dGluZS4gIFRoZSBwb2ludCBpcwpAQCAtMTM0NSw5ICsxMzg4LDUwIEBACiAgICAgaW5zdGFudCBhdCB3aGljaCB0aGlzIGJsb2NrIHdhcyBwYXNzZWQgb3V0LgogKi8KIAorLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlNZW1fKiBtZW1vcnkgQVBJICovCit2b2lkICoKK19QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQoreworICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgbmJ5dGVzKTsKK30KK3ZvaWQgKgorX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQoreworICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19NRU1fSUQsIHAsIG5ieXRlcyk7Cit9Cit2b2lkCitfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApCit7CisgICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfTUVNX0lELCBwKTsKK30KKworLyogZGVidWcgcmVwbGFjZW1lbnRzIGZvciB0aGUgUHlPYmplY3RfKiBtZW1vcnkgQVBJICovCiB2b2lkICoKIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKQogeworICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgbmJ5dGVzKTsKK30KK3ZvaWQgKgorX1B5T2JqZWN0X0RlYnVnUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQoreworICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdSZWFsbG9jQXBpKF9QWU1BTExPQ19PQkpfSUQsIHAsIG5ieXRlcyk7Cit9Cit2b2lkCitfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApCit7CisgICAgX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKK30KK3ZvaWQKK19QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhjb25zdCB2b2lkICpwKQoreworICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzc0FwaShfUFlNQUxMT0NfT0JKX0lELCBwKTsKK30KKworCisvKiBnZW5lcmljIGRlYnVnIG1lbW9yeSBhcGksIHdpdGggYW4gImlkIiB0byBpZGVudGlmeSB0aGUgQVBJIGluIHVzZSAqLwordm9pZCAqCitfUHlPYmplY3RfRGVidWdNYWxsb2NBcGkoY2hhciBpZCwgc2l6ZV90IG5ieXRlcykKK3sKICAgICB1Y2hhciAqcDsgICAgICAgICAgIC8qIGJhc2UgYWRkcmVzcyBvZiBtYWxsb2MnZWQgYmxvY2sgKi8KICAgICB1Y2hhciAqdGFpbDsgICAgICAgIC8qIHAgKyAyKlNTVCArIG5ieXRlcyA9PSBwb2ludGVyIHRvIHRhaWwgcGFkIGJ5dGVzICovCiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwpAQCAtMTM2MiwxMiArMTQ0NiwxNSBAQAogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgLyogYXQgcCwgd3JpdGUgc2l6ZSAoU1NUIGJ5dGVzKSwgaWQgKDEgYnl0ZSksIHBhZCAoU1NULTEgYnl0ZXMpICovCiAgICAgd3JpdGVfc2l6ZV90KHAsIG5ieXRlcyk7Ci0gICAgbWVtc2V0KHAgKyBTU1QsIEZPUkJJRERFTkJZVEUsIFNTVCk7CisgICAgcFtTU1RdID0gKHVjaGFyKWlkOworICAgIG1lbXNldChwICsgU1NUICsgMSAsIEZPUkJJRERFTkJZVEUsIFNTVC0xKTsKIAogICAgIGlmIChuYnl0ZXMgPiAwKQogICAgICAgICBtZW1zZXQocCArIDIqU1NULCBDTEVBTkJZVEUsIG5ieXRlcyk7CiAKKyAgICAvKiBhdCB0YWlsLCB3cml0ZSBwYWQgKFNTVCBieXRlcykgYW5kIHNlcmlhbG5vIChTU1QgYnl0ZXMpICovCiAgICAgdGFpbCA9IHAgKyAyKlNTVCArIG5ieXRlczsKICAgICBtZW1zZXQodGFpbCwgRk9SQklEREVOQllURSwgU1NUKTsKICAgICB3cml0ZV9zaXplX3QodGFpbCArIFNTVCwgc2VyaWFsbm8pOwpAQCAtMTM3NiwyNyArMTQ2MywyOCBAQAogfQogCiAvKiBUaGUgZGVidWcgZnJlZSBmaXJzdCBjaGVja3MgdGhlIDIqU1NUIGJ5dGVzIG9uIGVhY2ggZW5kIGZvciBzYW5pdHkgKGluCi0gICBwYXJ0aWN1bGFyLCB0aGF0IHRoZSBGT1JCSURERU5CWVRFcyBhcmUgc3RpbGwgaW50YWN0KS4KKyAgIHBhcnRpY3VsYXIsIHRoYXQgdGhlIEZPUkJJRERFTkJZVEVzIHdpdGggdGhlIGFwaSBJRCBhcmUgc3RpbGwgaW50YWN0KS4KICAgIFRoZW4gZmlsbHMgdGhlIG9yaWdpbmFsIGJ5dGVzIHdpdGggREVBREJZVEUuCiAgICBUaGVuIGNhbGxzIHRoZSB1bmRlcmx5aW5nIGZyZWUuCiAqLwogdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZSh2b2lkICpwKQorX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCkKIHsKICAgICB1Y2hhciAqcSA9ICh1Y2hhciAqKXAgLSAyKlNTVDsgIC8qIGFkZHJlc3MgcmV0dXJuZWQgZnJvbSBtYWxsb2MgKi8KICAgICBzaXplX3QgbmJ5dGVzOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwotICAgIF9QeU9iamVjdF9EZWJ1Z0NoZWNrQWRkcmVzcyhwKTsKKyAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxKTsKKyAgICBuYnl0ZXMgKz0gNCpTU1Q7CiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChxLCBERUFEQllURSwgbmJ5dGVzKTsKICAgICBQeU9iamVjdF9GcmVlKHEpOwogfQogCiB2b2lkICoKLV9QeU9iamVjdF9EZWJ1Z1JlYWxsb2Modm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK19QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoY2hhciBhcGksIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgdWNoYXIgKnEgPSAodWNoYXIgKilwOwogICAgIHVjaGFyICp0YWlsOwpAQCAtMTQwNSw5ICsxNDkzLDkgQEAKICAgICBpbnQgaTsKIAogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBfUHlPYmplY3RfRGVidWdNYWxsb2MobmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShhcGksIG5ieXRlcyk7CiAKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3MocCk7CisgICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CiAgICAgYnVtcHNlcmlhbG5vKCk7CiAgICAgb3JpZ2luYWxfbmJ5dGVzID0gcmVhZF9zaXplX3QocSAtIDIqU1NUKTsKICAgICB0b3RhbCA9IG5ieXRlcyArIDQqU1NUOwpAQCAtMTQxNywxNiArMTUwNSwyMCBAQAogCiAgICAgaWYgKG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgewogICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLwotICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyk7CisgICAgICAgIG1lbXNldChxICsgbmJ5dGVzLCBERUFEQllURSwgb3JpZ2luYWxfbmJ5dGVzIC0gbmJ5dGVzICsgMipTU1QpOwogICAgIH0KIAotICAgIC8qIFJlc2l6ZSBhbmQgYWRkIGRlY29yYXRpb25zLiAqLworICAgIC8qIFJlc2l6ZSBhbmQgYWRkIGRlY29yYXRpb25zLiBXZSBtYXkgZ2V0IGEgbmV3IHBvaW50ZXIgaGVyZSwgaW4gd2hpY2gKKyAgICAgKiBjYXNlIHdlIGRpZG4ndCBnZXQgdGhlIGNoYW5jZSB0byBtYXJrIHRoZSBvbGQgbWVtb3J5IHdpdGggREVBREJZVEUsCisgICAgICogYnV0IHdlIGxpdmUgd2l0aCB0aGF0LgorICAgICAqLwogICAgIHEgPSAodWNoYXIgKilQeU9iamVjdF9SZWFsbG9jKHEgLSAyKlNTVCwgdG90YWwpOwogICAgIGlmIChxID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd3JpdGVfc2l6ZV90KHEsIG5ieXRlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IFNTVDsgKytpKQorICAgIGFzc2VydChxW1NTVF0gPT0gKHVjaGFyKWFwaSk7CisgICAgZm9yIChpID0gMTsgaSA8IFNTVDsgKytpKQogICAgICAgICBhc3NlcnQocVtTU1QgKyBpXSA9PSBGT1JCSURERU5CWVRFKTsKICAgICBxICs9IDIqU1NUOwogICAgIHRhaWwgPSBxICsgbmJ5dGVzOwpAQCAtMTQ0NSwyNiArMTUzNywzOCBAQAogLyogQ2hlY2sgdGhlIGZvcmJpZGRlbiBieXRlcyBvbiBib3RoIGVuZHMgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHAuCiAgKiBJZiBhbnl0aGluZyBpcyB3cm9uZywgcHJpbnQgaW5mbyB0byBzdGRlcnIgdmlhIF9QeU9iamVjdF9EZWJ1Z0R1bXBBZGRyZXNzLAogICogYW5kIGNhbGwgUHlfRmF0YWxFcnJvciB0byBraWxsIHRoZSBwcm9ncmFtLgorICogVGhlIEFQSSBpZCwgaXMgYWxzbyBjaGVja2VkLgogICovCiAgdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCitfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCiB7CiAgICAgY29uc3QgdWNoYXIgKnEgPSAoY29uc3QgdWNoYXIgKilwOworICAgIGNoYXIgbXNnYnVmWzY0XTsKICAgICBjaGFyICptc2c7CiAgICAgc2l6ZV90IG5ieXRlczsKICAgICBjb25zdCB1Y2hhciAqdGFpbDsKICAgICBpbnQgaTsKKyAgICBjaGFyIGlkOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewogICAgICAgICBtc2cgPSAiZGlkbid0IGV4cGVjdCBhIE5VTEwgcG9pbnRlciI7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCisgICAgLyogQ2hlY2sgdGhlIEFQSSBpZCAqLworICAgIGlkID0gKGNoYXIpcVstU1NUXTsKKyAgICBpZiAoaWQgIT0gYXBpKSB7CisgICAgICAgIG1zZyA9IG1zZ2J1ZjsKKyAgICAgICAgc25wcmludGYobXNnLCBzaXplb2YobXNnYnVmKSwgImJhZCBJRDogQWxsb2NhdGVkIHVzaW5nIEFQSSAnJWMnLCB2ZXJpZmllZCB1c2luZyBBUEkgJyVjJyIsIGlkLCBhcGkpOworICAgICAgICBtc2didWZbc2l6ZW9mKG1zZ2J1ZiktMV0gPSAwOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKwogICAgIC8qIENoZWNrIHRoZSBzdHVmZiBhdCB0aGUgc3RhcnQgb2YgcCBmaXJzdDogIGlmIHRoZXJlJ3MgdW5kZXJ3cml0ZQogICAgICAqIGNvcnJ1cHRpb24sIHRoZSBudW1iZXItb2YtYnl0ZXMgZmllbGQgbWF5IGJlIG51dHMsIGFuZCBjaGVja2luZwogICAgICAqIHRoZSB0YWlsIGNvdWxkIGxlYWQgdG8gYSBzZWdmYXVsdCB0aGVuLgogICAgICAqLwotICAgIGZvciAoaSA9IFNTVDsgaSA+PSAxOyAtLWkpIHsKKyAgICBmb3IgKGkgPSBTU1QtMTsgaSA+PSAxOyAtLWkpIHsKICAgICAgICAgaWYgKCoocS1pKSAhPSBGT1JCSURERU5CWVRFKSB7CiAgICAgICAgICAgICBtc2cgPSAiYmFkIGxlYWRpbmcgcGFkIGJ5dGUiOwogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTE0OTYsMTkgKzE2MDAsMjQgQEAKICAgICBzaXplX3QgbmJ5dGVzLCBzZXJpYWw7CiAgICAgaW50IGk7CiAgICAgaW50IG9rOworICAgIGNoYXIgaWQ7CiAKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkRlYnVnIG1lbW9yeSBibG9jayBhdCBhZGRyZXNzIHA9JXA6XG4iLCBwKTsKLSAgICBpZiAocCA9PSBOVUxMKQorICAgIGZwcmludGYoc3RkZXJyLCAiRGVidWcgbWVtb3J5IGJsb2NrIGF0IGFkZHJlc3MgcD0lcDoiLCBwKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZCA9IChjaGFyKXFbLVNTVF07CisgICAgZnByaW50ZihzdGRlcnIsICIgQVBJICclYydcbiIsIGlkKTsKIAogICAgIG5ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgZnByaW50ZihzdGRlcnIsICIgICAgJSIgUFlfRk9STUFUX1NJWkVfVCAidSBieXRlcyBvcmlnaW5hbGx5ICIKICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3RlZFxuIiwgbmJ5dGVzKTsKIAogICAgIC8qIEluIGNhc2UgdGhpcyBpcyBudXRzLCBjaGVjayB0aGUgbGVhZGluZyBwYWQgYnl0ZXMgZmlyc3QuICovCi0gICAgZnByaW50ZihzdGRlcnIsICIgICAgVGhlICVkIHBhZCBieXRlcyBhdCBwLSVkIGFyZSAiLCBTU1QsIFNTVCk7CisgICAgZnByaW50ZihzdGRlcnIsICIgICAgVGhlICVkIHBhZCBieXRlcyBhdCBwLSVkIGFyZSAiLCBTU1QtMSwgU1NULTEpOwogICAgIG9rID0gMTsKLSAgICBmb3IgKGkgPSAxOyBpIDw9IFNTVDsgKytpKSB7CisgICAgZm9yIChpID0gMTsgaSA8PSBTU1QtMTsgKytpKSB7CiAgICAgICAgIGlmICgqKHEtaSkgIT0gRk9SQklEREVOQllURSkgewogICAgICAgICAgICAgb2sgPSAwOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTE5LDcgKzE2MjgsNyBAQAogICAgIGVsc2UgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vdCBhbGwgRk9SQklEREVOQllURSAoMHglMDJ4KTpcbiIsCiAgICAgICAgICAgICBGT1JCSURERU5CWVRFKTsKLSAgICAgICAgZm9yIChpID0gU1NUOyBpID49IDE7IC0taSkgeworICAgICAgICBmb3IgKGkgPSBTU1QtMTsgaSA+PSAxOyAtLWkpIHsKICAgICAgICAgICAgIGNvbnN0IHVjaGFyIGJ5dGUgPSAqKHEtaSk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAgYXQgcC0lZDogMHglMDJ4IiwgaSwgYnl0ZSk7CiAgICAgICAgICAgICBpZiAoYnl0ZSAhPSBGT1JCSURERU5CWVRFKQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9yYW5nZW9iamVjdC5jIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCmluZGV4IDMzYTRkOWQuLjU4ZDM3M2MgMTAwNjQ0Ci0tLSBhL09iamVjdHMvcmFuZ2VvYmplY3QuYworKysgYi9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKQEAgLTE0LDYgKzE0LDcgQEAKICAgICBQeU9iamVjdCAqc3RhcnQ7CiAgICAgUHlPYmplY3QgKnN0b3A7CiAgICAgUHlPYmplY3QgKnN0ZXA7CisgICAgUHlPYmplY3QgKmxlbmd0aDsKIH0gcmFuZ2VvYmplY3Q7CiAKIC8qIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBzdGVwLiAgQWx3YXlzIHJldHVybnMgYSBuZXcgcmVmZXJlbmNlIG9yCkBAIC00Myw2ICs0NCwzMSBAQAogICAgIHJldHVybiBzdGVwOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorY29tcHV0ZV9yYW5nZV9sZW5ndGgoUHlPYmplY3QgKnN0YXJ0LCBQeU9iamVjdCAqc3RvcCwgUHlPYmplY3QgKnN0ZXApOworCitzdGF0aWMgcmFuZ2VvYmplY3QgKgorbWFrZV9yYW5nZV9vYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqc3RhcnQsCisgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RvcCwgUHlPYmplY3QgKnN0ZXApCit7CisgICAgcmFuZ2VvYmplY3QgKm9iaiA9IE5VTEw7CisgICAgUHlPYmplY3QgKmxlbmd0aDsKKyAgICBsZW5ndGggPSBjb21wdXRlX3JhbmdlX2xlbmd0aChzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgaWYgKGxlbmd0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBvYmogPSBQeU9iamVjdF9OZXcocmFuZ2VvYmplY3QsIHR5cGUpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG9iai0+c3RhcnQgPSBzdGFydDsKKyAgICBvYmotPnN0b3AgPSBzdG9wOworICAgIG9iai0+c3RlcCA9IHN0ZXA7CisgICAgb2JqLT5sZW5ndGggPSBsZW5ndGg7CisgICAgcmV0dXJuIG9iajsKK30KKwogLyogWFhYKG5ub3J3aXR6KTogc2hvdWxkIHdlIGVycm9yIGNoZWNrIGlmIHRoZSB1c2VyIHBhc3NlcyBhbnkgZW1wdHkgcmFuZ2VzPwogICAgcmFuZ2UoLTEwKQogICAgcmFuZ2UoMCwgLTUpCkBAIC01MSw3ICs3Nyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcmFuZ2VfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKLSAgICByYW5nZW9iamVjdCAqb2JqID0gTlVMTDsKKyAgICByYW5nZW9iamVjdCAqb2JqOwogICAgIFB5T2JqZWN0ICpzdGFydCA9IE5VTEwsICpzdG9wID0gTlVMTCwgKnN0ZXAgPSBOVUxMOwogCiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygicmFuZ2UoKSIsIGt3KSkKQEAgLTk3LDE1ICsxMjMsMTEgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIG9iaiA9IFB5T2JqZWN0X05ldyhyYW5nZW9iamVjdCwgJlB5UmFuZ2VfVHlwZSk7Ci0gICAgaWYgKG9iaiA9PSBOVUxMKQotICAgICAgICBnb3RvIEZhaWw7Ci0gICAgb2JqLT5zdGFydCA9IHN0YXJ0OwotICAgIG9iai0+c3RvcCA9IHN0b3A7Ci0gICAgb2JqLT5zdGVwID0gc3RlcDsKLSAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9iajsKKyAgICBvYmogPSBtYWtlX3JhbmdlX29iamVjdCh0eXBlLCBzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgaWYgKG9iaiAhPSBOVUxMKQorICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopIG9iajsKIAotRmFpbDoKKyAgICAvKiBGYWlsZWQgdG8gY3JlYXRlIG9iamVjdCwgcmVsZWFzZSBhdHRyaWJ1dGVzICovCiAgICAgUHlfWERFQ1JFRihzdGFydCk7CiAgICAgUHlfWERFQ1JFRihzdG9wKTsKICAgICBQeV9YREVDUkVGKHN0ZXApOwpAQCAtMTE1LDcgKzEzNyw3IEBACiBQeURvY19TVFJWQVIocmFuZ2VfZG9jLAogInJhbmdlKFtzdGFydCxdIHN0b3BbLCBzdGVwXSkgLT4gcmFuZ2Ugb2JqZWN0XG5cCiBcblwKLVJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBnZW5lcmF0ZXMgdGhlIG51bWJlcnMgaW4gdGhlIHJhbmdlIG9uIGRlbWFuZC4iKTsKK1JldHVybnMgYSB2aXJ0dWFsIHNlcXVlbmNlIG9mIG51bWJlcnMgZnJvbSBzdGFydCB0byBzdG9wIGJ5IHN0ZXAuIik7CiAKIHN0YXRpYyB2b2lkCiByYW5nZV9kZWFsbG9jKHJhbmdlb2JqZWN0ICpyKQpAQCAtMTIzLDYgKzE0NSw3IEBACiAgICAgUHlfREVDUkVGKHItPnN0YXJ0KTsKICAgICBQeV9ERUNSRUYoci0+c3RvcCk7CiAgICAgUHlfREVDUkVGKHItPnN0ZXApOworICAgIFB5X0RFQ1JFRihyLT5sZW5ndGgpOwogICAgIFB5T2JqZWN0X0RlbChyKTsKIH0KIApAQCAtMTMxLDcgKzE1NCw3IEBACiAgKiBQeUxvbmdfQ2hlY2soKS4gIFJldHVybiBOVUxMIHdoZW4gdGhlcmUgaXMgYW4gZXJyb3IuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCoKLXJhbmdlX2xlbmd0aF9vYmoocmFuZ2VvYmplY3QgKnIpCitjb21wdXRlX3JhbmdlX2xlbmd0aChQeU9iamVjdCAqc3RhcnQsIFB5T2JqZWN0ICpzdG9wLCBQeU9iamVjdCAqc3RlcCkKIHsKICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgQWxnb3JpdGhtIGlzIGVxdWFsIHRvIHRoYXQgb2YgZ2V0X2xlbl9vZl9yYW5nZSgpLCBidXQgaXQgb3BlcmF0ZXMKQEAgLTEzOSw3ICsxNjIsNiBAQAogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgICAgaW50IGNtcF9yZXN1bHQ7CiAgICAgUHlPYmplY3QgKmxvLCAqaGk7Ci0gICAgUHlPYmplY3QgKnN0ZXAgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpkaWZmID0gTlVMTDsKICAgICBQeU9iamVjdCAqb25lID0gTlVMTDsKICAgICBQeU9iamVjdCAqdG1wMSA9IE5VTEwsICp0bXAyID0gTlVMTCwgKnJlc3VsdDsKQEAgLTE0OCwyMCArMTcwLDE5IEBACiAgICAgUHlPYmplY3QgKnplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgaWYgKHplcm8gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChyLT5zdGVwLCB6ZXJvLCBQeV9HVCk7CisgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGVwLCB6ZXJvLCBQeV9HVCk7CiAgICAgUHlfREVDUkVGKHplcm8pOwogICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChjbXBfcmVzdWx0ID09IDEpIHsKLSAgICAgICAgbG8gPSByLT5zdGFydDsKLSAgICAgICAgaGkgPSByLT5zdG9wOwotICAgICAgICBzdGVwID0gci0+c3RlcDsKKyAgICAgICAgbG8gPSBzdGFydDsKKyAgICAgICAgaGkgPSBzdG9wOwogICAgICAgICBQeV9JTkNSRUYoc3RlcCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbG8gPSByLT5zdG9wOwotICAgICAgICBoaSA9IHItPnN0YXJ0OwotICAgICAgICBzdGVwID0gUHlOdW1iZXJfTmVnYXRpdmUoci0+c3RlcCk7CisgICAgICAgIGxvID0gc3RvcDsKKyAgICAgICAgaGkgPSBzdGFydDsKKyAgICAgICAgc3RlcCA9IFB5TnVtYmVyX05lZ2F0aXZlKHN0ZXApOwogICAgICAgICBpZiAoIXN0ZXApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yMDYsMzggKzIyNywxNyBAQAogc3RhdGljIFB5X3NzaXplX3QKIHJhbmdlX2xlbmd0aChyYW5nZW9iamVjdCAqcikKIHsKLSAgICBQeU9iamVjdCAqbGVuID0gcmFuZ2VfbGVuZ3RoX29iaihyKTsKLSAgICBQeV9zc2l6ZV90IHJlc3VsdCA9IC0xOwotICAgIGlmIChsZW4pIHsKLSAgICAgICAgcmVzdWx0ID0gUHlMb25nX0FzU3NpemVfdChsZW4pOwotICAgICAgICBQeV9ERUNSRUYobGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gUHlMb25nX0FzU3NpemVfdChyLT5sZW5ndGgpOwogfQogCi0vKiByYW5nZSguLi4pW3hdIGlzIG5lY2Vzc2FyeSBmb3I6ICBzZXFbOl0gPSByYW5nZSguLi4pICovCi0KIHN0YXRpYyBQeU9iamVjdCAqCi1yYW5nZV9pdGVtKHJhbmdlb2JqZWN0ICpyLCBQeV9zc2l6ZV90IGkpCitjb21wdXRlX2l0ZW0ocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICppKQogewotICAgIFB5X3NzaXplX3QgbGVuID0gcmFuZ2VfbGVuZ3RoKHIpOwotICAgIFB5T2JqZWN0ICpyZW0sICppbmNyLCAqcmVzdWx0OwotCi0gICAgLyogWFhYKG5ub3J3aXR6KTogc2hvdWxkIG5lZ2F0aXZlIGluZGljZXMgYmUgc3VwcG9ydGVkPyAqLwotICAgIC8qIFhYWChubm9yd2l0eik6IHNob3VsZCBzdXBwb3J0IHJhbmdlW3hdIHdoZXJlIHggPiBQWV9TU0laRV9UX01BWD8gKi8KLSAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW4pIHsKLSAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhbmdlIG9iamVjdCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogWFhYKG5ub3J3aXR6KTogb3B0aW1pemUgZm9yIHNob3J0IGludHMuICovCi0gICAgcmVtID0gUHlMb25nX0Zyb21Tc2l6ZV90KGkpOwotICAgIGlmICghcmVtKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpbmNyID0gUHlOdW1iZXJfTXVsdGlwbHkocmVtLCByLT5zdGVwKTsKLSAgICBQeV9ERUNSRUYocmVtKTsKKyAgICBQeU9iamVjdCAqaW5jciwgKnJlc3VsdDsKKyAgICAvKiBQeUxvbmcgZXF1aXZhbGVudCB0bzoKKyAgICAgKiAgICByZXR1cm4gci0+c3RhcnQgKyAoaSAqIHItPnN0ZXApCisgICAgICovCisgICAgaW5jciA9IFB5TnVtYmVyX011bHRpcGx5KGksIHItPnN0ZXApOwogICAgIGlmICghaW5jcikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gUHlOdW1iZXJfQWRkKHItPnN0YXJ0LCBpbmNyKTsKQEAgLTI0Niw2ICsyNDYsNDMzIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitjb21wdXRlX3JhbmdlX2l0ZW0ocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICphcmcpCit7CisgICAgaW50IGNtcF9yZXN1bHQ7CisgICAgUHlPYmplY3QgKmksICpyZXN1bHQ7CisKKyAgICBQeU9iamVjdCAqemVybyA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBpZiAoemVybyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIFB5TG9uZyBlcXVpdmFsZW50IHRvOgorICAgICAqICAgaWYgKGFyZyA8IDApIHsKKyAgICAgKiAgICAgaSA9IHItPmxlbmd0aCArIGFyZworICAgICAqICAgfSBlbHNlIHsKKyAgICAgKiAgICAgaSA9IGFyZworICAgICAqICAgfQorICAgICAqLworICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woYXJnLCB6ZXJvLCBQeV9MVCk7CisgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGNtcF9yZXN1bHQgPT0gMSkgeworICAgICAgaSA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGFyZyk7CisgICAgICBpZiAoIWkpIHsKKyAgICAgICAgUHlfREVDUkVGKHplcm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgaSA9IGFyZzsKKyAgICAgIFB5X0lOQ1JFRihpKTsKKyAgICB9CisKKyAgICAvKiBQeUxvbmcgZXF1aXZhbGVudCB0bzoKKyAgICAgKiAgIGlmIChpIDwgMCB8fCBpID49IHItPmxlbmd0aCkgeworICAgICAqICAgICA8cmVwb3J0IGluZGV4IG91dCBvZiBib3VuZHM+CisgICAgICogICB9CisgICAgICovCisgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpLCB6ZXJvLCBQeV9MVCk7CisgICAgUHlfREVDUkVGKHplcm8pOworICAgIGlmIChjbXBfcmVzdWx0ID09IDApIHsKKyAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpLCByLT5sZW5ndGgsIFB5X0dFKTsKKyAgICB9CisgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIHsKKyAgICAgICBQeV9ERUNSRUYoaSk7CisgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChjbXBfcmVzdWx0ID09IDEpIHsKKyAgICAgICAgUHlfREVDUkVGKGkpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyYW5nZSBvYmplY3QgaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJlc3VsdCA9IGNvbXB1dGVfaXRlbShyLCBpKTsKKyAgICBQeV9ERUNSRUYoaSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JhbmdlX2l0ZW0ocmFuZ2VvYmplY3QgKnIsIFB5X3NzaXplX3QgaSkKK3sKKyAgICBQeU9iamVjdCAqcmVzLCAqYXJnID0gUHlMb25nX0Zyb21Mb25nKGkpOworICAgIGlmICghYXJnKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXMgPSBjb21wdXRlX3JhbmdlX2l0ZW0ociwgYXJnKTsKKyAgICBQeV9ERUNSRUYoYXJnKTsKKyAgICByZXR1cm4gcmVzOworfQorCisvKiBBZGRpdGlvbmFsIGhlbHBlcnMsIHNpbmNlIHRoZSBzdGFuZGFyZCBzbGljZSBoZWxwZXJzCisgKiBhbGwgY2xpcCB0byBQWV9TU0laRV9UX01BWAorICovCisKKy8qIFJlcGxhY2UgX1B5RXZhbF9TbGljZUluZGV4ICovCitzdGF0aWMgUHlPYmplY3QgKgorY29tcHV0ZV9zbGljZV9lbGVtZW50KFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaWYgKG9iaiAhPSBOVUxMKSB7CisgICAgICAgIGlmIChQeUluZGV4X0NoZWNrKG9iaikpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0luZGV4KG9iaik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2UgaW5kaWNlcyBtdXN0IGJlIGludGVnZXJzIG9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiBSZXBsYWNlIFB5U2xpY2VfR2V0SW5kaWNlc0V4CisgKiAgIFJlc3VsdCBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIHNsaWNlIGlzIGVtcHR5CisgKiAgICAoLTEgPSBlcnJvciwgMCA9IGVtcHR5IHNsaWNlLCAxID0gc2xpY2UgY29udGFpbnMgZWxlbWVudHMpCisgKi8KK3N0YXRpYyBpbnQKK2NvbXB1dGVfc2xpY2VfaW5kaWNlcyhyYW5nZW9iamVjdCAqciwgUHlTbGljZU9iamVjdCAqc2xpY2UsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydCwgUHlPYmplY3QgKipzdG9wLCBQeU9iamVjdCAqKnN0ZXApCit7CisgICAgaW50IGNtcF9yZXN1bHQsIGhhc19lbGVtZW50czsKKyAgICBQeV9zc2l6ZV90IGNsYW1wZWRfc3RlcCA9IDA7CisgICAgUHlPYmplY3QgKnplcm8gPSBOVUxMLCAqb25lID0gTlVMTCwgKm5lZ19vbmUgPSBOVUxMLCAqY2FuZGlkYXRlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdG1wX3N0YXJ0ID0gTlVMTCwgKnRtcF9zdG9wID0gTlVMTCwgKnRtcF9zdGVwID0gTlVMTDsKKyAgICB6ZXJvID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIGlmICh6ZXJvID09IE5VTEwpIGdvdG8gRmFpbDsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CisgICAgaWYgKG9uZSA9PSBOVUxMKSBnb3RvIEZhaWw7CisgICAgbmVnX29uZSA9IFB5TG9uZ19Gcm9tTG9uZygtMSk7CisgICAgaWYgKG5lZ19vbmUgPT0gTlVMTCkgZ290byBGYWlsOworCisgICAgLyogQ2FsY3VsYXRlIHN0ZXAgdmFsdWUgKi8KKyAgICBpZiAoc2xpY2UtPnN0ZXAgPT0gUHlfTm9uZSkgeworICAgICAgICBjbGFtcGVkX3N0ZXAgPSAxOworICAgICAgICB0bXBfc3RlcCA9IG9uZTsKKyAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGVwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIV9QeUV2YWxfU2xpY2VJbmRleChzbGljZS0+c3RlcCwgJmNsYW1wZWRfc3RlcCkpIGdvdG8gRmFpbDsKKyAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA9PSAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOworICAgICAgICAgICAgZ290byBGYWlsOworICAgICAgICB9CisgICAgICAgIHRtcF9zdGVwID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGVwKTsKKyAgICAgICAgaWYgKHRtcF9zdGVwID09IE5VTEwpIGdvdG8gRmFpbDsKKyAgICB9CisKKyAgICAvKiBDYWxjdWxhdGUgc3RhcnQgdmFsdWUgKi8KKyAgICBpZiAoc2xpY2UtPnN0YXJ0ID09IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKKyAgICAgICAgICAgIHRtcF9zdGFydCA9IFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbmd0aCwgb25lKTsKKyAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG1wX3N0YXJ0ID0gemVybzsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdGFydCk7CisgICAgICAgIGlmIChjYW5kaWRhdGUgPT0gTlVMTCkgZ290byBGYWlsOworICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGNhbmRpZGF0ZSwgemVybywgUHlfTFQpOworICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOworICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgLyogY2FuZGlkYXRlIDwgMCAqLworICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKKyAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOworICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCisgICAgICAgICAgICB0bXBfc3RhcnQgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICBjYW5kaWRhdGUgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB6ZXJvLCBQeV9MVCk7CisgICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7CisgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPCAwICovCisgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RhcnQpOworICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKKyAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBuZWdfb25lOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gMCAqLworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHItPmxlbmd0aCwgUHlfR0UpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgLyogdG1wX3N0YXJ0ID49IHItPmxlbmd0aCAqLworICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7CisgICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0YXJ0ID09IE5VTEwpIGdvdG8gRmFpbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSByLT5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RhcnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENhbGN1bGF0ZSBzdG9wIHZhbHVlICovCisgICAgaWYgKHNsaWNlLT5zdG9wID09IFB5X05vbmUpIHsKKyAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKKyAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FuZGlkYXRlID0gY29tcHV0ZV9zbGljZV9lbGVtZW50KHNsaWNlLT5zdG9wKTsKKyAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7CisgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7CisgICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7CisgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCisgICAgICAgICAgICB0bXBfc3RvcCA9IFB5TnVtYmVyX0FkZChyLT5sZW5ndGgsIGNhbmRpZGF0ZSk7CisgICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOworICAgICAgICAgICAgUHlfQ0xFQVIoY2FuZGlkYXRlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA+PSAwICovCisgICAgICAgICAgICB0bXBfc3RvcCA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgemVybywgUHlfTFQpOworICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOworICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgLyogdG1wX3N0b3AgPCAwICovCisgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7CisgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgeworICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gbmVnX29uZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSB6ZXJvOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIHRtcF9zdG9wID49IDAgKi8KKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0b3AsIHItPmxlbmd0aCwgUHlfR0UpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gci0+bGVuZ3RoICovCisgICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0b3ApOworICAgICAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOworICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3N0b3AgPT0gTlVMTCkgZ290byBGYWlsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRtcF9zdG9wID0gci0+bGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENoZWNrIGlmIHRoZSBzbGljZSBpcyBlbXB0eSBvciBub3QgKi8KKyAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgeworICAgICAgICBoYXNfZWxlbWVudHMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodG1wX3N0YXJ0LCB0bXBfc3RvcCwgUHlfR1QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9MVCk7CisgICAgfQorICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIGdvdG8gRmFpbDsKKworICAgICpzdGFydCA9IHRtcF9zdGFydDsKKyAgICAqc3RvcCA9IHRtcF9zdG9wOworICAgICpzdGVwID0gdG1wX3N0ZXA7CisgICAgUHlfREVDUkVGKG5lZ19vbmUpOworICAgIFB5X0RFQ1JFRihvbmUpOworICAgIFB5X0RFQ1JFRih6ZXJvKTsKKyAgICByZXR1cm4gaGFzX2VsZW1lbnRzOworCisgIEZhaWw6CisgICAgUHlfWERFQ1JFRih0bXBfc3RhcnQpOworICAgIFB5X1hERUNSRUYodG1wX3N0b3ApOworICAgIFB5X1hERUNSRUYodG1wX3N0ZXApOworICAgIFB5X1hERUNSRUYoY2FuZGlkYXRlKTsKKyAgICBQeV9YREVDUkVGKG5lZ19vbmUpOworICAgIFB5X1hERUNSRUYob25lKTsKKyAgICBQeV9YREVDUkVGKHplcm8pOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2NvbXB1dGVfc2xpY2UocmFuZ2VvYmplY3QgKnIsIFB5T2JqZWN0ICpfc2xpY2UpCit7CisgICAgUHlTbGljZU9iamVjdCAqc2xpY2UgPSAoUHlTbGljZU9iamVjdCAqKSBfc2xpY2U7CisgICAgcmFuZ2VvYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqc3RhcnQgPSBOVUxMLCAqc3RvcCA9IE5VTEwsICpzdGVwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3Vic3RhcnQgPSBOVUxMLCAqc3Vic3RvcCA9IE5VTEwsICpzdWJzdGVwID0gTlVMTDsKKyAgICBpbnQgaGFzX2VsZW1lbnRzOworCisgICAgaGFzX2VsZW1lbnRzID0gY29tcHV0ZV9zbGljZV9pbmRpY2VzKHIsIHNsaWNlLCAmc3RhcnQsICZzdG9wLCAmc3RlcCk7CisgICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgcmV0dXJuIE5VTEw7CisKKyAgICBzdWJzdGVwID0gUHlOdW1iZXJfTXVsdGlwbHkoci0+c3RlcCwgc3RlcCk7CisgICAgaWYgKHN1YnN0ZXAgPT0gTlVMTCkgZ290byBmYWlsOworICAgIFB5X0NMRUFSKHN0ZXApOworCisgICAgc3Vic3RhcnQgPSBjb21wdXRlX2l0ZW0ociwgc3RhcnQpOworICAgIGlmIChzdWJzdGFydCA9PSBOVUxMKSBnb3RvIGZhaWw7CisgICAgUHlfQ0xFQVIoc3RhcnQpOworCisgICAgaWYgKGhhc19lbGVtZW50cykgeworICAgICAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOworICAgICAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3Vic3RvcCA9IHN1YnN0YXJ0OworICAgICAgICBQeV9JTkNSRUYoc3Vic3RvcCk7CisgICAgfQorICAgIFB5X0NMRUFSKHN0b3ApOworCisgICAgcmVzdWx0ID0gbWFrZV9yYW5nZV9vYmplY3QoUHlfVFlQRShyKSwgc3Vic3RhcnQsIHN1YnN0b3AsIHN1YnN0ZXApOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgeworICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHJlc3VsdDsKKyAgICB9CitmYWlsOgorICAgIFB5X1hERUNSRUYoc3RhcnQpOworICAgIFB5X1hERUNSRUYoc3RvcCk7CisgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICBQeV9YREVDUkVGKHN1YnN0YXJ0KTsKKyAgICBQeV9YREVDUkVGKHN1YnN0b3ApOworICAgIFB5X1hERUNSRUYoc3Vic3RlcCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIEFzc3VtZXMgKFB5TG9uZ19DaGVja0V4YWN0KG9iKSB8fCBQeUJvb2xfQ2hlY2sob2IpKSAqLworc3RhdGljIGludAorcmFuZ2VfY29udGFpbnNfbG9uZyhyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKm9iKQoreworICAgIGludCBjbXAxLCBjbXAyLCBjbXAzOworICAgIFB5T2JqZWN0ICp0bXAxID0gTlVMTDsKKyAgICBQeU9iamVjdCAqdG1wMiA9IE5VTEw7CisgICAgUHlPYmplY3QgKnplcm8gPSBOVUxMOworICAgIGludCByZXN1bHQgPSAtMTsKKworICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgaWYgKHplcm8gPT0gTlVMTCkgLyogTWVtb3J5RXJyb3IgaW4gaW50KDApICovCisgICAgICAgIGdvdG8gZW5kOworCisgICAgLyogQ2hlY2sgaWYgdGhlIHZhbHVlIGNhbiBwb3NzaWJseSBiZSBpbiB0aGUgcmFuZ2UuICovCisKKyAgICBjbXAxID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHItPnN0ZXAsIHplcm8sIFB5X0dUKTsKKyAgICBpZiAoY21wMSA9PSAtMSkKKyAgICAgICAgZ290byBlbmQ7CisgICAgaWYgKGNtcDEgPT0gMSkgeyAvKiBwb3NpdGl2ZSBzdGVwczogc3RhcnQgPD0gb2IgPCBzdG9wICovCisgICAgICAgIGNtcDIgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woci0+c3RhcnQsIG9iLCBQeV9MRSk7CisgICAgICAgIGNtcDMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wob2IsIHItPnN0b3AsIFB5X0xUKTsKKyAgICB9CisgICAgZWxzZSB7IC8qIG5lZ2F0aXZlIHN0ZXBzOiBzdG9wIDwgb2IgPD0gc3RhcnQgKi8KKyAgICAgICAgY21wMiA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChvYiwgci0+c3RhcnQsIFB5X0xFKTsKKyAgICAgICAgY21wMyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChyLT5zdG9wLCBvYiwgUHlfTFQpOworICAgIH0KKworICAgIGlmIChjbXAyID09IC0xIHx8IGNtcDMgPT0gLTEpIC8qIFR5cGVFcnJvciAqLworICAgICAgICBnb3RvIGVuZDsKKyAgICBpZiAoY21wMiA9PSAwIHx8IGNtcDMgPT0gMCkgeyAvKiBvYiBvdXRzaWRlIG9mIHJhbmdlICovCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8qIENoZWNrIHRoYXQgdGhlIHN0cmlkZSBkb2VzIG5vdCBpbnZhbGlkYXRlIG9iJ3MgbWVtYmVyc2hpcC4gKi8KKyAgICB0bXAxID0gUHlOdW1iZXJfU3VidHJhY3Qob2IsIHItPnN0YXJ0KTsKKyAgICBpZiAodG1wMSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKyAgICB0bXAyID0gUHlOdW1iZXJfUmVtYWluZGVyKHRtcDEsIHItPnN0ZXApOworICAgIGlmICh0bXAyID09IE5VTEwpCisgICAgICAgIGdvdG8gZW5kOworICAgIC8qIHJlc3VsdCA9IChpbnQob2IpIC0gc3RhcnQgJSBzdGVwKSA9PSAwICovCisgICAgcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcDIsIHplcm8sIFB5X0VRKTsKKyAgZW5kOgorICAgIFB5X1hERUNSRUYodG1wMSk7CisgICAgUHlfWERFQ1JFRih0bXAyKTsKKyAgICBQeV9YREVDUkVGKHplcm8pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQKK3JhbmdlX2NvbnRhaW5zKHJhbmdlb2JqZWN0ICpyLCBQeU9iamVjdCAqb2IpCit7CisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KG9iKSB8fCBQeUJvb2xfQ2hlY2sob2IpKQorICAgICAgICByZXR1cm4gcmFuZ2VfY29udGFpbnNfbG9uZyhyLCBvYik7CisKKyAgICByZXR1cm4gKGludClfUHlTZXF1ZW5jZV9JdGVyU2VhcmNoKChQeU9iamVjdCopciwgb2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9JVEVSU0VBUkNIX0NPTlRBSU5TKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JhbmdlX2NvdW50KHJhbmdlb2JqZWN0ICpyLCBQeU9iamVjdCAqb2IpCit7CisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KG9iKSB8fCBQeUJvb2xfQ2hlY2sob2IpKSB7CisgICAgICAgIGludCByZXN1bHQgPSByYW5nZV9jb250YWluc19sb25nKHIsIG9iKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBlbHNlIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CisgICAgICAgIGNvdW50ID0gX1B5U2VxdWVuY2VfSXRlclNlYXJjaCgoUHlPYmplY3QqKXIsIG9iLCBQWV9JVEVSU0VBUkNIX0NPVU5UKTsKKyAgICAgICAgaWYgKGNvdW50ID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QoY291bnQpOworICAgIH0KK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JhbmdlX2luZGV4KHJhbmdlb2JqZWN0ICpyLCBQeU9iamVjdCAqb2IpCit7CisgICAgaW50IGNvbnRhaW5zOworCisgICAgaWYgKCFQeUxvbmdfQ2hlY2tFeGFjdChvYikgJiYgIVB5Qm9vbF9DaGVjayhvYikpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpbmRleDsKKyAgICAgICAgaW5kZXggPSBfUHlTZXF1ZW5jZV9JdGVyU2VhcmNoKChQeU9iamVjdCopciwgb2IsIFBZX0lURVJTRUFSQ0hfSU5ERVgpOworICAgICAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChpbmRleCk7CisgICAgfQorCisgICAgY29udGFpbnMgPSByYW5nZV9jb250YWluc19sb25nKHIsIG9iKTsKKyAgICBpZiAoY29udGFpbnMgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGNvbnRhaW5zKSB7CisgICAgICAgIFB5T2JqZWN0ICppZHgsICp0bXAgPSBQeU51bWJlcl9TdWJ0cmFjdChvYiwgci0+c3RhcnQpOworICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogaWR4ID0gKG9iIC0gci5zdGFydCkgLy8gci5zdGVwICovCisgICAgICAgIGlkeCA9IFB5TnVtYmVyX0Zsb29yRGl2aWRlKHRtcCwgci0+c3RlcCk7CisgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgICAgICByZXR1cm4gaWR4OworICAgIH0KKworICAgIC8qIG9iamVjdCBpcyBub3QgaW4gdGhlIHJhbmdlICovCisgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICIlUiBpcyBub3QgaW4gcmFuZ2UiLCBvYik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyByYW5nZV9hc19zZXF1ZW5jZSA9IHsKKyAgICAobGVuZnVuYylyYW5nZV9sZW5ndGgsICAgICAgLyogc3FfbGVuZ3RoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KKyAgICAoc3NpemVhcmdmdW5jKXJhbmdlX2l0ZW0sICAgLyogc3FfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9zbGljZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3NfaXRlbSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3Nfc2xpY2UgKi8KKyAgICAob2Jqb2JqcHJvYylyYW5nZV9jb250YWlucywgLyogc3FfY29udGFpbnMgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCiByYW5nZV9yZXByKHJhbmdlb2JqZWN0ICpyKQogewogICAgIFB5X3NzaXplX3QgaXN0ZXA7CkBAIC0yNjksMTYgKzY5NiwzNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHJhbmdlX3JlZHVjZShyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyhPT08pKSIsIFB5X1RZUEUociksCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihPKE9PTykpIiwgUHlfVFlQRShyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByLT5zdGFydCwgci0+c3RvcCwgci0+c3RlcCk7CiB9CiAKLXN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyByYW5nZV9hc19zZXF1ZW5jZSA9IHsKLSAgICAobGVuZnVuYylyYW5nZV9sZW5ndGgsICAgICAgLyogc3FfbGVuZ3RoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwotICAgIChzc2l6ZWFyZ2Z1bmMpcmFuZ2VfaXRlbSwgLyogc3FfaXRlbSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgLyogc3Ffc2xpY2UgKi8KK3N0YXRpYyBQeU9iamVjdCAqCityYW5nZV9zdWJzY3JpcHQocmFuZ2VvYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBpdGVtKQoreworICAgIGlmIChQeUluZGV4X0NoZWNrKGl0ZW0pKSB7CisgICAgICAgIFB5T2JqZWN0ICppLCAqcmVzdWx0OworICAgICAgICBpID0gUHlOdW1iZXJfSW5kZXgoaXRlbSk7CisgICAgICAgIGlmICghaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXN1bHQgPSBjb21wdXRlX3JhbmdlX2l0ZW0oc2VsZiwgaSk7CisgICAgICAgIFB5X0RFQ1JFRihpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgaWYgKFB5U2xpY2VfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVfc2xpY2Uoc2VsZiwgaXRlbSk7CisgICAgfQorICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICJyYW5nZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3Igc2xpY2VzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgaXRlbS0+b2JfdHlwZS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgcmFuZ2VfYXNfbWFwcGluZyA9IHsKKyAgICAgICAgKGxlbmZ1bmMpcmFuZ2VfbGVuZ3RoLCAgICAgICAvKiBtcF9sZW5ndGggKi8KKyAgICAgICAgKGJpbmFyeWZ1bmMpcmFuZ2Vfc3Vic2NyaXB0LCAvKiBtcF9zdWJzY3JpcHQgKi8KKyAgICAgICAgKG9iam9iamFyZ3Byb2MpMCwgICAgICAgICAgICAvKiBtcF9hc3Nfc3Vic2NyaXB0ICovCiB9OwogCiBzdGF0aWMgUHlPYmplY3QgKiByYW5nZV9pdGVyKFB5T2JqZWN0ICpzZXEpOwpAQCAtMjg3LDEwICs3MzQsMTggQEAKIFB5RG9jX1NUUlZBUihyZXZlcnNlX2RvYywKICJSZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvci4iKTsKIAorUHlEb2NfU1RSVkFSKGNvdW50X2RvYywKKyJyYW5nZW9iamVjdC5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlIik7CisKK1B5RG9jX1NUUlZBUihpbmRleF9kb2MsCisicmFuZ2VvYmplY3QuaW5kZXgodmFsdWUsIFtzdGFydCwgW3N0b3BdXSkgLT4gaW50ZWdlciAtLSByZXR1cm4gaW5kZXggb2YgdmFsdWUuXG4iCisiUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LiIpOworCiBzdGF0aWMgUHlNZXRob2REZWYgcmFuZ2VfbWV0aG9kc1tdID0gewotICAgIHsiX19yZXZlcnNlZF9fIiwgICAgKFB5Q0Z1bmN0aW9uKXJhbmdlX3JldmVyc2UsIE1FVEhfTk9BUkdTLAotICAgICAgICByZXZlcnNlX2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgICAgICAoUHlDRnVuY3Rpb24pcmFuZ2VfcmVkdWNlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiX19yZXZlcnNlZF9fIiwgICAgKFB5Q0Z1bmN0aW9uKXJhbmdlX3JldmVyc2UsIE1FVEhfTk9BUkdTLCByZXZlcnNlX2RvY30sCisgICAgeyJfX3JlZHVjZV9fIiwgICAgICAoUHlDRnVuY3Rpb24pcmFuZ2VfcmVkdWNlLCAgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImNvdW50IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilyYW5nZV9jb3VudCwgICBNRVRIX08sICAgICAgY291bnRfZG9jfSwKKyAgICB7ImluZGV4IiwgICAgICAgICAgIChQeUNGdW5jdGlvbilyYW5nZV9pbmRleCwgICBNRVRIX08sICAgICAgaW5kZXhfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzA3LDcgKzc2Miw3IEBACiAgICAgICAgIChyZXByZnVuYylyYW5nZV9yZXByLCAgIC8qIHRwX3JlcHIgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgICAgICZyYW5nZV9hc19zZXF1ZW5jZSwgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KKyAgICAgICAgJnJhbmdlX2FzX21hcHBpbmcsICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhbGwgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCkBAIC0zNjcsMjIgKzgyMiw2IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyLT5sZW4gLSByLT5pbmRleCk7CiB9CiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgUHlPYmplY3QgKmluZGV4OwotICAgIFB5T2JqZWN0ICpzdGFydDsKLSAgICBQeU9iamVjdCAqc3RlcDsKLSAgICBQeU9iamVjdCAqbGVuOwotfSBsb25ncmFuZ2VpdGVyb2JqZWN0OwotCi1zdGF0aWMgUHlPYmplY3QgKgotbG9uZ3JhbmdlaXRlcl9sZW4obG9uZ3JhbmdlaXRlcm9iamVjdCAqciwgUHlPYmplY3QgKm5vX2FyZ3MpCi17Ci0gICAgcmV0dXJuIFB5TnVtYmVyX1N1YnRyYWN0KHItPmxlbiwgci0+aW5kZXgpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKnJhbmdlaXRlcl9uZXcoUHlUeXBlT2JqZWN0ICosIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpOwotCiBQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfZG9jLAogICAgICAgICAgICAgICJQcml2YXRlIG1ldGhvZCByZXR1cm5pbmcgYW4gZXN0aW1hdGUgb2YgbGVuKGxpc3QoaXQpKS4iKTsKIApAQCAtMzkyLDYgKzgzMSw4IEBACiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyBQeU9iamVjdCAqcmFuZ2VpdGVyX25ldyhQeVR5cGVPYmplY3QgKiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdyk7CisKIFB5VHlwZU9iamVjdCBQeVJhbmdlSXRlcl9UeXBlID0gewogICAgICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQogICAgICAgICAicmFuZ2VfaXRlcmF0b3IiLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTQ2Niw3ICs5MDcsNyBAQAogICAgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSBDIGxvbmcsIE92ZXJmbG93RXJyb3IgaXMgcmFpc2VkLiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotaW50X3JhbmdlX2l0ZXIobG9uZyBzdGFydCwgbG9uZyBzdG9wLCBsb25nIHN0ZXApCitmYXN0X3JhbmdlX2l0ZXIobG9uZyBzdGFydCwgbG9uZyBzdG9wLCBsb25nIHN0ZXApCiB7CiAgICAgcmFuZ2VpdGVyb2JqZWN0ICppdCA9IFB5T2JqZWN0X05ldyhyYW5nZWl0ZXJvYmplY3QsICZQeVJhbmdlSXRlcl9UeXBlKTsKICAgICB1bnNpZ25lZCBsb25nIHVsZW47CkBAIC00OTgsNyArOTM5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gaW50X3JhbmdlX2l0ZXIoc3RhcnQsIHN0b3AsIHN0ZXApOworICAgIHJldHVybiBmYXN0X3JhbmdlX2l0ZXIoc3RhcnQsIHN0b3AsIHN0ZXApOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFB5T2JqZWN0ICppbmRleDsKKyAgICBQeU9iamVjdCAqc3RhcnQ7CisgICAgUHlPYmplY3QgKnN0ZXA7CisgICAgUHlPYmplY3QgKmxlbjsKK30gbG9uZ3JhbmdlaXRlcm9iamVjdDsKKworc3RhdGljIFB5T2JqZWN0ICoKK2xvbmdyYW5nZWl0ZXJfbGVuKGxvbmdyYW5nZWl0ZXJvYmplY3QgKnIsIFB5T2JqZWN0ICpub19hcmdzKQoreworICAgIHJldHVybiBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW4sIHItPmluZGV4KTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGxvbmdyYW5nZWl0ZXJfbWV0aG9kc1tdID0gewpAQCAtNjEyLDcgKzEwNjcsNyBAQAogICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBnb3RvIGxvbmdfcmFuZ2U7CiAgICAgfQotICAgIGludF9pdCA9IGludF9yYW5nZV9pdGVyKGxzdGFydCwgbHN0b3AsIGxzdGVwKTsKKyAgICBpbnRfaXQgPSBmYXN0X3JhbmdlX2l0ZXIobHN0YXJ0LCBsc3RvcCwgbHN0ZXApOwogICAgIGlmIChpbnRfaXQgPT0gTlVMTCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGdvdG8gbG9uZ19yYW5nZTsKQEAgLTYyNywxNCArMTA4MiwxMSBAQAogICAgIC8qIERvIGFsbCBpbml0aWFsaXphdGlvbiBoZXJlLCBzbyB3ZSBjYW4gREVDUkVGIG9uIGZhaWx1cmUuICovCiAgICAgaXQtPnN0YXJ0ID0gci0+c3RhcnQ7CiAgICAgaXQtPnN0ZXAgPSByLT5zdGVwOworICAgIGl0LT5sZW4gPSByLT5sZW5ndGg7CiAgICAgUHlfSU5DUkVGKGl0LT5zdGFydCk7CiAgICAgUHlfSU5DUkVGKGl0LT5zdGVwKTsKKyAgICBQeV9JTkNSRUYoaXQtPmxlbik7CiAKLSAgICBpdC0+bGVuID0gaXQtPmluZGV4ID0gTlVMTDsKLQotICAgIGl0LT5sZW4gPSByYW5nZV9sZW5ndGhfb2JqKHIpOwotICAgIGlmICghaXQtPmxlbikKLSAgICAgICAgZ290byBjcmVhdGVfZmFpbHVyZTsKICAgICBpdC0+aW5kZXggPSBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgaWYgKCFpdC0+aW5kZXgpCiAgICAgICAgIGdvdG8gY3JlYXRlX2ZhaWx1cmU7CkBAIC02NTEsNyArMTEwMyw3IEBACiB7CiAgICAgcmFuZ2VvYmplY3QgKnJhbmdlID0gKHJhbmdlb2JqZWN0Kikgc2VxOwogICAgIGxvbmdyYW5nZWl0ZXJvYmplY3QgKml0OwotICAgIFB5T2JqZWN0ICpvbmUsICpzdW0sICpkaWZmLCAqbGVuID0gTlVMTCwgKnByb2R1Y3Q7CisgICAgUHlPYmplY3QgKm9uZSwgKnN1bSwgKmRpZmYsICpwcm9kdWN0OwogICAgIGxvbmcgbHN0YXJ0LCBsc3RvcCwgbHN0ZXAsIG5ld19zdGFydCwgbmV3X3N0b3A7CiAgICAgdW5zaWduZWQgbG9uZyB1bGVuOwogCkBAIC03MTQsNyArMTE2Niw3IEBACiAKICAgICBuZXdfc3RvcCA9IGxzdGFydCAtIGxzdGVwOwogICAgIG5ld19zdGFydCA9IChsb25nKShuZXdfc3RvcCArIHVsZW4gKiBsc3RlcCk7Ci0gICAgcmV0dXJuIGludF9yYW5nZV9pdGVyKG5ld19zdGFydCwgbmV3X3N0b3AsIC1sc3RlcCk7CisgICAgcmV0dXJuIGZhc3RfcmFuZ2VfaXRlcihuZXdfc3RhcnQsIG5ld19zdG9wLCAtbHN0ZXApOwogCiBsb25nX3JhbmdlOgogICAgIGl0ID0gUHlPYmplY3RfTmV3KGxvbmdyYW5nZWl0ZXJvYmplY3QsICZQeUxvbmdSYW5nZUl0ZXJfVHlwZSk7CkBAIC03MjIsMTggKzExNzQsMTQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBzdGFydCArIChsZW4gLSAxKSAqIHN0ZXAgKi8KLSAgICBsZW4gPSByYW5nZV9sZW5ndGhfb2JqKHJhbmdlKTsKLSAgICBpZiAoIWxlbikKLSAgICAgICAgZ290byBjcmVhdGVfZmFpbHVyZTsKLQotICAgIC8qIFN0ZWFsIHJlZmVyZW5jZSB0byBsZW4uICovCi0gICAgaXQtPmxlbiA9IGxlbjsKKyAgICBpdC0+bGVuID0gcmFuZ2UtPmxlbmd0aDsKKyAgICBQeV9JTkNSRUYoaXQtPmxlbik7CiAKICAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CiAgICAgaWYgKCFvbmUpCiAgICAgICAgIGdvdG8gY3JlYXRlX2ZhaWx1cmU7CiAKLSAgICBkaWZmID0gUHlOdW1iZXJfU3VidHJhY3QobGVuLCBvbmUpOworICAgIGRpZmYgPSBQeU51bWJlcl9TdWJ0cmFjdChpdC0+bGVuLCBvbmUpOwogICAgIFB5X0RFQ1JFRihvbmUpOwogICAgIGlmICghZGlmZikKICAgICAgICAgZ290byBjcmVhdGVfZmFpbHVyZTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc2V0b2JqZWN0LmMgYi9PYmplY3RzL3NldG9iamVjdC5jCmluZGV4IDdhYTFhN2YuLjQ4ZWRhZDggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc2V0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zZXRvYmplY3QuYwpAQCAtNzUsNyArNzUsNyBAQAogKi8KIAogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgbG9uZyBoYXNoKQorc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKIHsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CiAgICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7CkBAIC0xNTcsNyArMTU3LDcgQEAKICAqIHNlZSBpZiB0aGUgY29tcGFyaXNvbiBhbHRlcmVkIHRoZSB0YWJsZS4KICAqLwogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBsb25nIGhhc2gpCitzZXRfbG9va2tleV91bmljb2RlKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2gpCiB7CiAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwogICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwpAQCAtMjExLDEwICsyMTEsMTAgQEAKIEVhdHMgYSByZWZlcmVuY2UgdG8ga2V5LgogKi8KIHN0YXRpYyBpbnQKLXNldF9pbnNlcnRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgbG9uZyBoYXNoKQorc2V0X2luc2VydF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKICAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Ci0gICAgdHlwZWRlZiBzZXRlbnRyeSAqKCpsb29rdXBmdW5jKShQeVNldE9iamVjdCAqLCBQeU9iamVjdCAqLCBsb25nKTsKKyAgICB0eXBlZGVmIHNldGVudHJ5ICooKmxvb2t1cGZ1bmMpKFB5U2V0T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5X2hhc2hfdCk7CiAKICAgICBhc3NlcnQoc28tPmxvb2t1cCAhPSBOVUxMKTsKICAgICBlbnRyeSA9IHNvLT5sb29rdXAoc28sIGtleSwgaGFzaCk7CkBAIC0yNDgsNyArMjQ4LDcgQEAKIGlzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgogKi8KIHN0YXRpYyB2b2lkCi1zZXRfaW5zZXJ0X2NsZWFuKHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgbG9uZyBoYXNoKQorc2V0X2luc2VydF9jbGVhbihyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQogewogICAgIHJlZ2lzdGVyIHNpemVfdCBpOwogICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwpAQCAtMzQ5LDcgKzM0OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBBQ1RJVkUgKi8KICAgICAgICAgICAgIC0taTsKLSAgICAgICAgICAgIHNldF9pbnNlcnRfY2xlYW4oc28sIGVudHJ5LT5rZXksIChsb25nKSBlbnRyeS0+aGFzaCk7CisgICAgICAgICAgICBzZXRfaW5zZXJ0X2NsZWFuKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2NSw3ICszNjUsNyBAQAogewogICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOwogICAgIFB5T2JqZWN0ICprZXkgPSBlbnRyeS0+a2V5OwotICAgIGxvbmcgaGFzaCA9IGVudHJ5LT5oYXNoOworICAgIFB5X2hhc2hfdCBoYXNoID0gZW50cnktPmhhc2g7CiAKICAgICBhc3NlcnQoc28tPmZpbGwgPD0gc28tPm1hc2spOyAgLyogYXQgbGVhc3Qgb25lIGVtcHR5IHNsb3QgKi8KICAgICBuX3VzZWQgPSBzby0+dXNlZDsKQEAgLTM4Miw3ICszODIsNyBAQAogc3RhdGljIGludAogc2V0X2FkZF9rZXkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5KQogewotICAgIHJlZ2lzdGVyIGxvbmcgaGFzaDsKKyAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKICAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fApAQCAtNDExLDcgKzQxMSw3IEBACiB7ICAgICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqb2xkX2tleTsKIAotICAgIGVudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBvbGRlbnRyeS0+a2V5LCAobG9uZykgb2xkZW50cnktPmhhc2gpOworICAgIGVudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBvbGRlbnRyeS0+a2V5LCBvbGRlbnRyeS0+aGFzaCk7CiAgICAgaWYgKGVudHJ5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKQEAgLTQyNyw3ICs0MjcsNyBAQAogc3RhdGljIGludAogc2V0X2Rpc2NhcmRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBsb25nIGhhc2g7CisgICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7CiAgICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5T2JqZWN0ICpvbGRfa2V5OwogCkBAIC02NDAsNyArNjQwLDcgQEAKIHsKICAgICBQeVNldE9iamVjdCAqb3RoZXI7CiAgICAgUHlPYmplY3QgKmtleTsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwogICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKIApAQCAtNjc4LDcgKzY3OCw3IEBACiBzdGF0aWMgaW50CiBzZXRfY29udGFpbnNfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8CkBAIC03MDAsNyArNzAwLDcgQEAKICAgICBQeU9iamVjdCAqa2V5OwogICAgIHNldGVudHJ5ICpsdV9lbnRyeTsKIAotICAgIGx1X2VudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBlbnRyeS0+a2V5LCAobG9uZykgZW50cnktPmhhc2gpOworICAgIGx1X2VudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CiAgICAgaWYgKGx1X2VudHJ5ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBrZXkgPSBsdV9lbnRyeS0+a2V5OwpAQCAtNzY0LDI1ICs3NjQsMjUgQEAKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIGZyb3plbnNldF9oYXNoKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5U2V0T2JqZWN0ICpzbyA9IChQeVNldE9iamVjdCAqKXNlbGY7Ci0gICAgbG9uZyBoLCBoYXNoID0gMTkyNzg2ODIzN0w7CisgICAgUHlfaGFzaF90IGgsIGhhc2ggPSAxOTI3ODY4MjM3TDsKICAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwogCiAgICAgaWYgKHNvLT5oYXNoICE9IC0xKQogICAgICAgICByZXR1cm4gc28tPmhhc2g7CiAKLSAgICBoYXNoICo9IChsb25nKSBQeVNldF9HRVRfU0laRShzZWxmKSArIDE7CisgICAgaGFzaCAqPSBQeVNldF9HRVRfU0laRShzZWxmKSArIDE7CiAgICAgd2hpbGUgKHNldF9uZXh0KHNvLCAmcG9zLCAmZW50cnkpKSB7CiAgICAgICAgIC8qIFdvcmsgdG8gaW5jcmVhc2UgdGhlIGJpdCBkaXNwZXJzaW9uIGZvciBjbG9zZWx5IHNwYWNlZCBoYXNoCiAgICAgICAgICAgIHZhbHVlcy4gIFRoZSBpcyBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHVzZSBjYXNlcyBoYXZlIG1hbnkKICAgICAgICAgICAgY29tYmluYXRpb25zIG9mIGEgc21hbGwgbnVtYmVyIG9mIGVsZW1lbnRzIHdpdGggbmVhcmJ5CiAgICAgICAgICAgIGhhc2hlcyBzbyB0aGF0IG1hbnkgZGlzdGluY3QgY29tYmluYXRpb25zIGNvbGxhcHNlIHRvIG9ubHkKICAgICAgICAgICAgYSBoYW5kZnVsIG9mIGRpc3RpbmN0IGhhc2ggdmFsdWVzLiAqLwotICAgICAgICBoID0gKGxvbmcpIGVudHJ5LT5oYXNoOworICAgICAgICBoID0gZW50cnktPmhhc2g7CiAgICAgICAgIGhhc2ggXj0gKGggXiAoaCA8PCAxNikgXiA4OTg2OTc0N0wpICAqIDM2NDQ3OTgxNjd1OwogICAgIH0KICAgICBoYXNoID0gaGFzaCAqIDY5MDY5TCArIDkwNzEzMzkyM0w7CkBAIC05MjksNyArOTI5LDcgQEAKICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3Qob3RoZXIpKSB7CiAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZTsKICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSAwOwotICAgICAgICBsb25nIGhhc2g7CisgICAgICAgIFB5X2hhc2hfdCBoYXNoOwogICAgICAgICBQeV9zc2l6ZV90IGRpY3RzaXplID0gUHlEaWN0X1NpemUob3RoZXIpOwogCiAgICAgICAgIC8qIERvIG9uZSBiaWcgcmVzaXplIGF0IHRoZSBzdGFydCwgcmF0aGVyIHRoYW4KQEAgLTExMTcsOSArMTExNyw5IEBACiB7CiAgICAgUHlfc3NpemVfdCB0OwogICAgIHNldGVudHJ5ICp1OwotICAgIHNldGVudHJ5ICooKmYpKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgbG9uZyBoYXNoKTsKKyAgICBzZXRlbnRyeSAqKCpmKShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X3NzaXplX3QgaGFzaCk7CiAgICAgc2V0ZW50cnkgdGFiW1B5U2V0X01JTlNJWkVdOwotICAgIGxvbmcgaDsKKyAgICBQeV9oYXNoX3QgaDsKIAogICAgIHQgPSBhLT5maWxsOyAgICAgYS0+ZmlsbCAgID0gYi0+ZmlsbDsgICAgICAgIGItPmZpbGwgID0gdDsKICAgICB0ID0gYS0+dXNlZDsgICAgIGEtPnVzZWQgICA9IGItPnVzZWQ7ICAgICAgICBiLT51c2VkICA9IHQ7CkBAIC0xMjg4LDcgKzEyODgsNyBAQAogICAgIHdoaWxlICgoa2V5ID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIGludCBydjsKICAgICAgICAgc2V0ZW50cnkgZW50cnk7Ci0gICAgICAgIGxvbmcgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKKyAgICAgICAgUHlfaGFzaF90IGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CiAKICAgICAgICAgaWYgKGhhc2ggPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CkBAIC0xMzQ3LDkgKzEzNDcsOSBAQAogfQogCiBQeURvY19TVFJWQVIoaW50ZXJzZWN0aW9uX2RvYywKLSJSZXR1cm4gdGhlIGludGVyc2VjdGlvbiBvZiB0d28gb3IgbW9yZSBzZXRzIGFzIGEgbmV3IHNldC5cblwKKyJSZXR1cm4gdGhlIGludGVyc2VjdGlvbiBvZiB0d28gc2V0cyBhcyBhIG5ldyBzZXQuXG5cCiBcblwKLShpLmUuIGVsZW1lbnRzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgb2YgdGhlIHNldHMuKSIpOworKGkuZS4gYWxsIGVsZW1lbnRzIHRoYXQgYXJlIGluIGJvdGggc2V0cy4pIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfaW50ZXJzZWN0aW9uX3VwZGF0ZShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICpvdGhlcikKQEAgLTE0NDUsNyArMTQ0NSw3IEBACiAgICAgd2hpbGUgKChrZXkgPSBQeUl0ZXJfTmV4dChpdCkpICE9IE5VTEwpIHsKICAgICAgICAgaW50IHJ2OwogICAgICAgICBzZXRlbnRyeSBlbnRyeTsKLSAgICAgICAgbG9uZyBoYXNoID0gUHlPYmplY3RfSGFzaChrZXkpOzsKKyAgICAgICAgUHlfaGFzaF90IGhhc2ggPSBQeU9iamVjdF9IYXNoKGtleSk7CiAKICAgICAgICAgaWYgKGhhc2ggPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwpAQCAtMTUyOCw2ICsxNTI4LDIwIEBACiAiUmVtb3ZlIGFsbCBlbGVtZW50cyBvZiBhbm90aGVyIHNldCBmcm9tIHRoaXMgc2V0LiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgorc2V0X2NvcHlfYW5kX2RpZmZlcmVuY2UoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqb3RoZXIpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKworICAgIHJlc3VsdCA9IHNldF9jb3B5KHNvKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChzZXRfZGlmZmVyZW5jZV91cGRhdGVfaW50ZXJuYWwoKFB5U2V0T2JqZWN0ICopIHJlc3VsdCwgb3RoZXIpICE9IC0xKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogc2V0X2RpZmZlcmVuY2UoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqb3RoZXIpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKQEAgLTE1MzUsMTMgKzE1NDksMTMgQEAKICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAKICAgICBpZiAoIVB5QW55U2V0X0NoZWNrKG90aGVyKSAgJiYgIVB5RGljdF9DaGVja0V4YWN0KG90aGVyKSkgewotICAgICAgICByZXN1bHQgPSBzZXRfY29weShzbyk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoc2V0X2RpZmZlcmVuY2VfdXBkYXRlX2ludGVybmFsKChQeVNldE9iamVjdCAqKXJlc3VsdCwgb3RoZXIpICE9IC0xKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gc2V0X2NvcHlfYW5kX2RpZmZlcmVuY2Uoc28sIG90aGVyKTsKKyAgICB9CisKKyAgICAvKiBJZiBsZW4oc28pIG11Y2ggbW9yZSB0aGFuIGxlbihvdGhlciksIGl0J3MgbW9yZSBlZmZpY2llbnQgdG8gc2ltcGx5IGNvcHkKKyAgICAgKiBzbyBhbmQgdGhlbiBpdGVyYXRlIG90aGVyIGxvb2tpbmcgZm9yIGNvbW1vbiBlbGVtZW50cy4gKi8KKyAgICBpZiAoKFB5U2V0X0dFVF9TSVpFKHNvKSA+PiAyKSA+IFB5T2JqZWN0X1NpemUob3RoZXIpKSB7CisgICAgICAgIHJldHVybiBzZXRfY29weV9hbmRfZGlmZmVyZW5jZShzbywgb3RoZXIpOwogICAgIH0KIAogICAgIHJlc3VsdCA9IG1ha2VfbmV3X3NldF9iYXNldHlwZShQeV9UWVBFKHNvKSwgTlVMTCk7CkBAIC0xNTUzLDcgKzE1NjcsNyBAQAogICAgICAgICAgICAgc2V0ZW50cnkgZW50cnljb3B5OwogICAgICAgICAgICAgZW50cnljb3B5Lmhhc2ggPSBlbnRyeS0+aGFzaDsKICAgICAgICAgICAgIGVudHJ5Y29weS5rZXkgPSBlbnRyeS0+a2V5OwotICAgICAgICAgICAgaWYgKCFfUHlEaWN0X0NvbnRhaW5zKG90aGVyLCBlbnRyeS0+a2V5LCAobG9uZykgZW50cnktPmhhc2gpKSB7CisgICAgICAgICAgICBpZiAoIV9QeURpY3RfQ29udGFpbnMob3RoZXIsIGVudHJ5LT5rZXksIGVudHJ5LT5oYXNoKSkgewogICAgICAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KChQeVNldE9iamVjdCAqKXJlc3VsdCwgJmVudHJ5Y29weSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTU2Myw2ICsxNTc3LDcgQEAKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICAvKiBJdGVyYXRlIG92ZXIgc28sIGNoZWNraW5nIGZvciBjb21tb24gZWxlbWVudHMgaW4gb3RoZXIuICovCiAgICAgd2hpbGUgKHNldF9uZXh0KHNvLCAmcG9zLCAmZW50cnkpKSB7CiAgICAgICAgIGludCBydiA9IHNldF9jb250YWluc19lbnRyeSgoUHlTZXRPYmplY3QgKilvdGhlciwgZW50cnkpOwogICAgICAgICBpZiAocnYgPT0gLTEpIHsKQEAgLTE2NDQsNyArMTY1OSw3IEBACiAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KG90aGVyKSkgewogICAgICAgICBQeU9iamVjdCAqdmFsdWU7CiAgICAgICAgIGludCBydjsKLSAgICAgICAgbG9uZyBoYXNoOworICAgICAgICBQeV9oYXNoX3QgaGFzaDsKICAgICAgICAgd2hpbGUgKF9QeURpY3RfTmV4dChvdGhlciwgJnBvcywgJmtleSwgJnZhbHVlLCAmaGFzaCkpIHsKICAgICAgICAgICAgIHNldGVudHJ5IGFuX2VudHJ5OwogCkBAIC0yMTE3LDcgKzIxMzIsNyBAQAogICAgICZzZXRfYXNfbnVtYmVyLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgICZzZXRfYXNfc2VxdWVuY2UsICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwotICAgIChoYXNoZnVuYylQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQsICAgICAgLyogdHBfaGFzaCAqLworICAgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAgIC8qIHRwX2hhc2ggKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWxsICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KQEAgLTIxMjksOCArMjE0NCw4IEBACiAgICAgKHRyYXZlcnNlcHJvYylzZXRfdHJhdmVyc2UsICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlzZXRfY2xlYXJfaW50ZXJuYWwsICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIChyaWNoY21wZnVuYylzZXRfcmljaGNvbXBhcmUsICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCi0gICAgb2Zmc2V0b2YoUHlTZXRPYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwotICAgIChnZXRpdGVyZnVuYylzZXRfaXRlciwgICAgICAvKiB0cF9pdGVyICovCisgICAgb2Zmc2V0b2YoUHlTZXRPYmplY3QsIHdlYWtyZWZsaXN0KSwgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICAoZ2V0aXRlcmZ1bmMpc2V0X2l0ZXIsICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBzZXRfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwpAQCAtMjMxMSw3ICsyMzI2LDcgQEAKIH0KIAogaW50Ci1fUHlTZXRfTmV4dEVudHJ5KFB5T2JqZWN0ICpzZXQsIFB5X3NzaXplX3QgKnBvcywgUHlPYmplY3QgKiprZXksIGxvbmcgKmhhc2gpCitfUHlTZXRfTmV4dEVudHJ5KFB5T2JqZWN0ICpzZXQsIFB5X3NzaXplX3QgKnBvcywgUHlPYmplY3QgKiprZXksIFB5X2hhc2hfdCAqaGFzaCkKIHsKICAgICBzZXRlbnRyeSAqZW50cnk7CiAKQEAgLTIzMjIsNyArMjMzNyw3IEBACiAgICAgaWYgKHNldF9uZXh0KChQeVNldE9iamVjdCAqKXNldCwgcG9zLCAmZW50cnkpID09IDApCiAgICAgICAgIHJldHVybiAwOwogICAgICprZXkgPSBlbnRyeS0+a2V5OwotICAgICpoYXNoID0gKGxvbmcpIGVudHJ5LT5oYXNoOworICAgICpoYXNoID0gZW50cnktPmhhc2g7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTIzNjYsMTIgKzIzODEsMjYgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeDsKICAgICBQeU9iamVjdCAqb2IgPSAoUHlPYmplY3QgKilzbzsKLSAgICBsb25nIGhhc2g7CisgICAgUHlfaGFzaF90IGhhc2g7CisgICAgUHlPYmplY3QgKnN0cjsKIAotICAgIC8qIFZlcmlmeSBwcmVjb25kaXRpb25zIGFuZCBleGVyY2lzZSB0eXBlL3NpemUgY2hlY2tzICovCisgICAgLyogVmVyaWZ5IHByZWNvbmRpdGlvbnMgKi8KICAgICBhc3NlcnQoUHlBbnlTZXRfQ2hlY2sob2IpKTsKICAgICBhc3NlcnQoUHlBbnlTZXRfQ2hlY2tFeGFjdChvYikpOwogICAgIGFzc2VydCghUHlGcm96ZW5TZXRfQ2hlY2tFeGFjdChvYikpOworCisgICAgLyogc28uY2xlYXIoKTsgc28gfD0gc2V0KCJhYmMiKTsgKi8KKyAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiYWJjIik7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzZXRfY2xlYXJfaW50ZXJuYWwoc28pOworICAgIGlmIChzZXRfdXBkYXRlX2ludGVybmFsKHNvLCBzdHIpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfREVDUkVGKHN0cik7CisKKyAgICAvKiBFeGVyY2lzZSB0eXBlL3NpemUgY2hlY2tzICovCiAgICAgYXNzZXJ0KFB5U2V0X1NpemUob2IpID09IDMpOwogICAgIGFzc2VydChQeVNldF9HRVRfU0laRShvYikgPT0gMyk7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc2xpY2VvYmplY3QuYyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwppbmRleCBlZTg5MDA2Li41MWM1M2E4IDEwMDY0NAotLS0gYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9zbGljZW9iamVjdC5jCkBAIC05OSw5ICs5OSwxMCBAQAogfQogCiBpbnQKLVB5U2xpY2VfR2V0SW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpyLCBQeV9zc2l6ZV90IGxlbmd0aCwKK1B5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqX3IsIFB5X3NzaXplX3QgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKnN0YXJ0LCBQeV9zc2l6ZV90ICpzdG9wLCBQeV9zc2l6ZV90ICpzdGVwKQogeworICAgIFB5U2xpY2VPYmplY3QgKnIgPSAoUHlTbGljZU9iamVjdCopX3I7CiAgICAgLyogWFhYIHN1cHBvcnQgbG9uZyBpbnRzICovCiAgICAgaWYgKHItPnN0ZXAgPT0gUHlfTm9uZSkgewogICAgICAgICAqc3RlcCA9IDE7CkBAIC0xMzAsOSArMTMxLDExIEBACiB9CiAKIGludAotUHlTbGljZV9HZXRJbmRpY2VzRXgoUHlTbGljZU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpzdGFydCwgUHlfc3NpemVfdCAqc3RvcCwgUHlfc3NpemVfdCAqc3RlcCwgUHlfc3NpemVfdCAqc2xpY2VsZW5ndGgpCitQeVNsaWNlX0dldEluZGljZXNFeChQeU9iamVjdCAqX3IsIFB5X3NzaXplX3QgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXAsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICpzbGljZWxlbmd0aCkKIHsKKyAgICBQeVNsaWNlT2JqZWN0ICpyID0gKFB5U2xpY2VPYmplY3QqKV9yOwogICAgIC8qIHRoaXMgaXMgaGFyZGVyIHRvIGdldCByaWdodCB0aGFuIHlvdSBtaWdodCB0aGluayAqLwogCiAgICAgUHlfc3NpemVfdCBkZWZzdGFydCwgZGVmc3RvcDsKQEAgLTE0Nyw2ICsxNTAsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIC8qIEhlcmUgKnN0ZXAgbWlnaHQgYmUgLVBZX1NTSVpFX1RfTUFYLTE7IGluIHRoaXMgY2FzZSB3ZSByZXBsYWNlIGl0CisgICAgICAgICAqIHdpdGggLVBZX1NTSVpFX1RfTUFYLiAgVGhpcyBkb2Vzbid0IGFmZmVjdCB0aGUgc2VtYW50aWNzLCBhbmQgaXQKKyAgICAgICAgICogZ3VhcmRzIGFnYWluc3QgbGF0ZXIgdW5kZWZpbmVkIGJlaGF2aW91ciByZXN1bHRpbmcgZnJvbSBjb2RlIHRoYXQKKyAgICAgICAgICogZG9lcyAic3RlcCA9IC1zdGVwIiBhcyBwYXJ0IG9mIGEgc2xpY2UgcmV2ZXJzYWwuCisgICAgICAgICAqLworICAgICAgICBpZiAoKnN0ZXAgPCAtUFlfU1NJWkVfVF9NQVgpCisgICAgICAgICAgICAqc3RlcCA9IC1QWV9TU0laRV9UX01BWDsKICAgICB9CiAKICAgICBkZWZzdGFydCA9ICpzdGVwIDwgMCA/IGxlbmd0aC0xIDogMDsKQEAgLTI0OCw3ICsyNTgsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoc2VsZiwgaWxlbiwgJnN0YXJ0LCAmc3RvcCwKKyAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoKFB5T2JqZWN0KilzZWxmLCBpbGVuLCAmc3RhcnQsICZzdG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMzM2LDEzICszNDYsNiBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBsb25nCi1zbGljZV9oYXNoKFB5U2xpY2VPYmplY3QgKnYpCi17Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInVuaGFzaGFibGUgdHlwZSIpOwotICAgIHJldHVybiAtMUw7Ci19Ci0KIFB5VHlwZU9iamVjdCBQeVNsaWNlX1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKICAgICAic2xpY2UiLCAgICAgICAgICAgICAgICAgICAgLyogTmFtZSBvZiB0aGlzIHR5cGUgKi8KQEAgLTM1Nyw3ICszNjAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwotICAgIChoYXNoZnVuYylzbGljZV9oYXNoLCAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIFB5T2JqZWN0X0hhc2hOb3RJbXBsZW1lbnRlZCwgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dCBiL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKaW5kZXggNjBkOTE5ZS4uYWI1MDZkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CkBAIC0xNiwxMCArMTYsNiBAQAogICAgIGEgUHlPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBlbXB0eSBzdHJpbmcsIG9ubHkgdG8gYmUgdXNlZCBpZgogICAgIFNUUklOR0xJQl9NVVRBQkxFIGlzIDAKIAotaW50IFNUUklOR0xJQl9DTVAoU1RSSU5HTElCX0NIQVIqLCBTVFJJTkdMSUJfQ0hBUiosIFB5X3NzaXplX3QpCi0KLSAgICBjb21wYXJlcyB0d28gc3RyaW5ncy4gcmV0dXJucyAwIGlmIHRoZXkgbWF0Y2gsIGFuZCBub24temVybyBpZiBub3QuCi0KIFB5X3NzaXplX3QgU1RSSU5HTElCX0xFTihQeU9iamVjdCopCiAKICAgICByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGdpdmVuIHN0cmluZyBvYmplY3QgKHdoaWNoIG11c3QgYmUgb2YgdGhlCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaAppbmRleCBlYmEzN2U5Li5kZTM0Zjk2IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9jb3VudC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmgKQEAgLTksMjggKzksMjIgQEAKIAogUHlfTE9DQUxfSU5MSU5FKFB5X3NzaXplX3QpCiBzdHJpbmdsaWJfY291bnQoY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAotICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdWIsIFB5X3NzaXplX3Qgc3ViX2xlbikKKyAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4sCisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKIHsKICAgICBQeV9zc2l6ZV90IGNvdW50OwogCiAgICAgaWYgKHN0cl9sZW4gPCAwKQogICAgICAgICByZXR1cm4gMDsgLyogc3RhcnQgPiBsZW4oc3RyKSAqLwogICAgIGlmIChzdWJfbGVuID09IDApCi0gICAgICAgIHJldHVybiBzdHJfbGVuICsgMTsKKyAgICAgICAgcmV0dXJuIChzdHJfbGVuIDwgbWF4Y291bnQpID8gc3RyX2xlbiArIDEgOiBtYXhjb3VudDsKIAotICAgIGNvdW50ID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHN1Yiwgc3ViX2xlbiwgRkFTVF9DT1VOVCk7CisgICAgY291bnQgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc3ViLCBzdWJfbGVuLCBtYXhjb3VudCwgRkFTVF9DT1VOVCk7CiAKICAgICBpZiAoY291bnQgPCAwKQotICAgICAgICBjb3VudCA9IDA7IC8qIG5vIG1hdGNoICovCisgICAgICAgIHJldHVybiAwOyAvKiBubyBtYXRjaCAqLwogCiAgICAgcmV0dXJuIGNvdW50OwogfQogCiAjZW5kaWYKLQotLyoKLUxvY2FsIHZhcmlhYmxlczoKLWMtYmFzaWMtb2Zmc2V0OiA0Ci1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLSovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvY3R5cGUuaAppbmRleCA4OTUxMjc2Li43MzljZjNkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2N0eXBlLmgKQEAgLTEwNyw0ICsxMDcsMyBAQAogICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfTEVOKHNlbGYpKTsKICAgICByZXR1cm4gbmV3b2JqOwogfQotCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmggYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKaW5kZXggMjNiY2NmYi4uZTIzMWM1OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaApAQCAtNSw3ICs1LDcgQEAKIAogLyogZmFzdCBzZWFyY2gvY291bnQgaW1wbGVtZW50YXRpb24sIGJhc2VkIG9uIGEgbWl4IGJldHdlZW4gYm95ZXItCiAgICBtb29yZSBhbmQgaG9yc3Bvb2wsIHdpdGggYSBmZXcgbW9yZSBiZWxscyBhbmQgd2hpc3RsZXMgb24gdGhlIHRvcC4KLSAgIGZvciBzb21lIG1vcmUgYmFja2dyb3VuZCwgc2VlOiBodHRwOi8vZWZmYm90Lm9yZy9zdHJpbmdsaWIuaHRtICovCisgICBmb3Igc29tZSBtb3JlIGJhY2tncm91bmQsIHNlZTogaHR0cDovL2VmZmJvdC5vcmcvem9uZS9zdHJpbmdsaWIuaHRtICovCiAKIC8qIG5vdGU6IGZhc3RzZWFyY2ggbWF5IGFjY2VzcyBzW25dLCB3aGljaCBpc24ndCBhIHByb2JsZW0gd2hlbiB1c2luZwogICAgUHl0aG9uJ3Mgb3JkaW5hcnkgc3RyaW5nIHR5cGVzLCBidXQgbWF5IGNhdXNlIHByb2JsZW1zIGlmIHlvdSdyZQpAQCAtMTYsMTkgKzE2LDM1IEBACiAKICNkZWZpbmUgRkFTVF9DT1VOVCAwCiAjZGVmaW5lIEZBU1RfU0VBUkNIIDEKKyNkZWZpbmUgRkFTVF9SU0VBUkNIIDIKKworI2lmIExPTkdfQklUID49IDEyOAorI2RlZmluZSBTVFJJTkdMSUJfQkxPT01fV0lEVEggMTI4CisjZWxpZiBMT05HX0JJVCA+PSA2NAorI2RlZmluZSBTVFJJTkdMSUJfQkxPT01fV0lEVEggNjQKKyNlbGlmIExPTkdfQklUID49IDMyCisjZGVmaW5lIFNUUklOR0xJQl9CTE9PTV9XSURUSCAzMgorI2Vsc2UKKyNlcnJvciAiTE9OR19CSVQgaXMgc21hbGxlciB0aGFuIDMyIgorI2VuZGlmCisKKyNkZWZpbmUgU1RSSU5HTElCX0JMT09NX0FERChtYXNrLCBjaCkgXAorICAgICgobWFzayB8PSAoMVVMIDw8ICgoY2gpICYgKFNUUklOR0xJQl9CTE9PTV9XSURUSCAtMSkpKSkpCisjZGVmaW5lIFNUUklOR0xJQl9CTE9PTShtYXNrLCBjaCkgICAgIFwKKyAgICAoKG1hc2sgJiAgKDFVTCA8PCAoKGNoKSAmIChTVFJJTkdMSUJfQkxPT01fV0lEVEggLTEpKSkpKQogCiBQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKIGZhc3RzZWFyY2goY29uc3QgU1RSSU5HTElCX0NIQVIqIHMsIFB5X3NzaXplX3QgbiwKICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHAsIFB5X3NzaXplX3QgbSwKLSAgICAgICAgICAgaW50IG1vZGUpCisgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQsIGludCBtb2RlKQogewotICAgIGxvbmcgbWFzazsKKyAgICB1bnNpZ25lZCBsb25nIG1hc2s7CiAgICAgUHlfc3NpemVfdCBza2lwLCBjb3VudCA9IDA7CiAgICAgUHlfc3NpemVfdCBpLCBqLCBtbGFzdCwgdzsKIAogICAgIHcgPSBuIC0gbTsKIAotICAgIGlmICh3IDwgMCkKKyAgICBpZiAodyA8IDAgfHwgKG1vZGUgPT0gRkFTVF9DT1VOVCAmJiBtYXhjb3VudCA9PSAwKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogbG9vayBmb3Igc3BlY2lhbCBjYXNlcyAqLwpAQCAtMzgsNTQgKzU0LDEwMSBAQAogICAgICAgICAvKiB1c2Ugc3BlY2lhbCBjYXNlIGZvciAxLWNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgICAgIGlmIChtb2RlID09IEZBU1RfQ09VTlQpIHsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCi0gICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gcFswXSkKKyAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSBwWzBdKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA9PSBtYXhjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXhjb3VudDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBGQVNUX1NFQVJDSCkgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykKICAgICAgICAgICAgICAgICBpZiAoc1tpXSA9PSBwWzBdKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfSBlbHNlIHsgICAgLyogRkFTVF9SU0VBUkNIICovCisgICAgICAgICAgICBmb3IgKGkgPSBuIC0gMTsgaSA+IC0xOyBpLS0pCisgICAgICAgICAgICAgICAgaWYgKHNbaV0gPT0gcFswXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIG1sYXN0ID0gbSAtIDE7Ci0KLSAgICAvKiBjcmVhdGUgY29tcHJlc3NlZCBib3llci1tb29yZSBkZWx0YSAxIHRhYmxlICovCiAgICAgc2tpcCA9IG1sYXN0IC0gMTsKLSAgICAvKiBwcm9jZXNzIHBhdHRlcm5bOi0xXSAqLwotICAgIGZvciAobWFzayA9IGkgPSAwOyBpIDwgbWxhc3Q7IGkrKykgewotICAgICAgICBtYXNrIHw9ICgxIDw8IChwW2ldICYgMHgxRikpOwotICAgICAgICBpZiAocFtpXSA9PSBwW21sYXN0XSkKLSAgICAgICAgICAgIHNraXAgPSBtbGFzdCAtIGkgLSAxOwotICAgIH0KLSAgICAvKiBwcm9jZXNzIHBhdHRlcm5bLTFdIG91dHNpZGUgdGhlIGxvb3AgKi8KLSAgICBtYXNrIHw9ICgxIDw8IChwW21sYXN0XSAmIDB4MUYpKTsKKyAgICBtYXNrID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPD0gdzsgaSsrKSB7Ci0gICAgICAgIC8qIG5vdGU6IHVzaW5nIG1sYXN0IGluIHRoZSBza2lwIHBhdGggc2xvd3MgdGhpbmdzIGRvd24gb24geDg2ICovCi0gICAgICAgIGlmIChzW2krbS0xXSA9PSBwW20tMV0pIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSBtYXRjaCAqLwotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG1sYXN0OyBqKyspCi0gICAgICAgICAgICAgICAgaWYgKHNbaStqXSAhPSBwW2pdKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChqID09IG1sYXN0KSB7Ci0gICAgICAgICAgICAgICAgLyogZ290IGEgbWF0Y2ghICovCi0gICAgICAgICAgICAgICAgaWYgKG1vZGUgIT0gRkFTVF9DT1VOVCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICAgICBpID0gaSArIG1sYXN0OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGlmIChtb2RlICE9IEZBU1RfUlNFQVJDSCkgeworCisgICAgICAgIC8qIGNyZWF0ZSBjb21wcmVzc2VkIGJveWVyLW1vb3JlIGRlbHRhIDEgdGFibGUgKi8KKworICAgICAgICAvKiBwcm9jZXNzIHBhdHRlcm5bOi0xXSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWxhc3Q7IGkrKykgeworICAgICAgICAgICAgU1RSSU5HTElCX0JMT09NX0FERChtYXNrLCBwW2ldKTsKKyAgICAgICAgICAgIGlmIChwW2ldID09IHBbbWxhc3RdKQorICAgICAgICAgICAgICAgIHNraXAgPSBtbGFzdCAtIGkgLSAxOworICAgICAgICB9CisgICAgICAgIC8qIHByb2Nlc3MgcGF0dGVyblstMV0gb3V0c2lkZSB0aGUgbG9vcCAqLworICAgICAgICBTVFJJTkdMSUJfQkxPT01fQUREKG1hc2ssIHBbbWxhc3RdKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IHc7IGkrKykgeworICAgICAgICAgICAgLyogbm90ZTogdXNpbmcgbWxhc3QgaW4gdGhlIHNraXAgcGF0aCBzbG93cyB0aGluZ3MgZG93biBvbiB4ODYgKi8KKyAgICAgICAgICAgIGlmIChzW2krbS0xXSA9PSBwW20tMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBjYW5kaWRhdGUgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWxhc3Q7IGorKykKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNbaStqXSAhPSBwW2pdKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gbWxhc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogZ290IGEgbWF0Y2ghICovCisgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlICE9IEZBU1RfQ09VTlQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09IG1heGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1heGNvdW50OworICAgICAgICAgICAgICAgICAgICBpID0gaSArIG1sYXN0OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogbWlzczogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBza2lwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBza2lwOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzW2krbV0pKQorICAgICAgICAgICAgICAgICAgICBpID0gaSArIG07CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBuZXh0IGNoYXJhY3RlciBpcyBwYXJ0IG9mIHBhdHRlcm4gKi8KLSAgICAgICAgICAgIGlmICghKG1hc2sgJiAoMSA8PCAoc1tpK21dICYgMHgxRikpKSkKLSAgICAgICAgICAgICAgICBpID0gaSArIG07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSA9IGkgKyBza2lwOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogc2tpcDogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICBpZiAoIShtYXNrICYgKDEgPDwgKHNbaSttXSAmIDB4MUYpKSkpCi0gICAgICAgICAgICAgICAgaSA9IGkgKyBtOworICAgICAgICB9CisgICAgfSBlbHNlIHsgICAgLyogRkFTVF9SU0VBUkNIICovCisKKyAgICAgICAgLyogY3JlYXRlIGNvbXByZXNzZWQgYm95ZXItbW9vcmUgZGVsdGEgMSB0YWJsZSAqLworCisgICAgICAgIC8qIHByb2Nlc3MgcGF0dGVyblswXSBvdXRzaWRlIHRoZSBsb29wICovCisgICAgICAgIFNUUklOR0xJQl9CTE9PTV9BREQobWFzaywgcFswXSk7CisgICAgICAgIC8qIHByb2Nlc3MgcGF0dGVybls6MDotMV0gKi8KKyAgICAgICAgZm9yIChpID0gbWxhc3Q7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgIFNUUklOR0xJQl9CTE9PTV9BREQobWFzaywgcFtpXSk7CisgICAgICAgICAgICBpZiAocFtpXSA9PSBwWzBdKQorICAgICAgICAgICAgICAgIHNraXAgPSBpIC0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IHc7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoc1tpXSA9PSBwWzBdKSB7CisgICAgICAgICAgICAgICAgLyogY2FuZGlkYXRlIG1hdGNoICovCisgICAgICAgICAgICAgICAgZm9yIChqID0gbWxhc3Q7IGogPiAwOyBqLS0pCisgICAgICAgICAgICAgICAgICAgIGlmIChzW2kral0gIT0gcFtqXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChqID09IDApCisgICAgICAgICAgICAgICAgICAgIC8qIGdvdCBhIG1hdGNoISAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgICAgICAgICAvKiBtaXNzOiBjaGVjayBpZiBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpLTFdKSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBtOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBza2lwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBza2lwOiBjaGVjayBpZiBwcmV2aW91cyBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCisgICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmICFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpLTFdKSkKKyAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBtOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCkBAIC05NSwxMCArMTU4LDMgQEAKIH0KIAogI2VuZGlmCi0KLS8qCi1Mb2NhbCB2YXJpYWJsZXM6Ci1jLWJhc2ljLW9mZnNldDogNAotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmluZC5oCmluZGV4IDQ0MDdkNzEuLmNlNjE1ZGMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBpZiAoc3ViX2xlbiA9PSAwKQogICAgICAgICByZXR1cm4gb2Zmc2V0OwogCi0gICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHN1Yiwgc3ViX2xlbiwgRkFTVF9TRUFSQ0gpOworICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzdWIsIHN1Yl9sZW4sIC0xLCBGQVNUX1NFQVJDSCk7CiAKICAgICBpZiAocG9zID49IDApCiAgICAgICAgIHBvcyArPSBvZmZzZXQ7CkBAIC0zMiw0MiArMzIsNDMgQEAKICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4sCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBvZmZzZXQpCiB7Ci0gICAgLyogWFhYIC0gY3JlYXRlIHJldmVyc2VmYXN0c2VhcmNoIGhlbHBlciEgKi8KLSAgICBpZiAoc3ViX2xlbiA9PSAwKSB7Ci0gICAgICAgIGlmIChzdHJfbGVuIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQlyZXR1cm4gc3RyX2xlbiArIG9mZnNldDsKLSAgICB9IGVsc2UgewotCVB5X3NzaXplX3QgaiwgcG9zID0gLTE7Ci0JZm9yIChqID0gc3RyX2xlbiAtIHN1Yl9sZW47IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgaWYgKFNUUklOR0xJQl9DTVAoc3RyK2osIHN1Yiwgc3ViX2xlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHBvcyA9IGogKyBvZmZzZXQ7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwb3M7Ci0gICAgfQorICAgIFB5X3NzaXplX3QgcG9zOworCisgICAgaWYgKHN0cl9sZW4gPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHN1Yl9sZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIHN0cl9sZW4gKyBvZmZzZXQ7CisKKyAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgc3RyX2xlbiwgc3ViLCBzdWJfbGVuLCAtMSwgRkFTVF9SU0VBUkNIKTsKKworICAgIGlmIChwb3MgPj0gMCkKKyAgICAgICAgcG9zICs9IG9mZnNldDsKKworICAgIHJldHVybiBwb3M7CiB9CiAKKy8qIGhlbHBlciBtYWNybyB0byBmaXh1cCBzdGFydC9lbmQgc2xpY2UgdmFsdWVzICovCisjZGVmaW5lIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIGxlbikgICAgICAgICBcCisgICAgaWYgKGVuZCA+IGxlbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCA9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBpZiAoZW5kIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuZCArPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChlbmQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlbmQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHN0YXJ0IDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXJ0ICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChzdGFydCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGFydCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiBQeV9MT0NBTF9JTkxJTkUoUHlfc3NpemVfdCkKIHN0cmluZ2xpYl9maW5kX3NsaWNlKGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdWIsIFB5X3NzaXplX3Qgc3ViX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kKQogewotICAgIGlmIChzdGFydCA8IDApCi0gICAgICAgIHN0YXJ0ICs9IHN0cl9sZW47Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgPSAwOwotICAgIGlmIChlbmQgPiBzdHJfbGVuKQotICAgICAgICBlbmQgPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgKz0gc3RyX2xlbjsKLSAgICBpZiAoZW5kIDwgMCkKLSAgICAgICAgZW5kID0gMDsKLQotICAgIHJldHVybiBzdHJpbmdsaWJfZmluZCgKLSAgICAgICAgc3RyICsgc3RhcnQsIGVuZCAtIHN0YXJ0LAotICAgICAgICBzdWIsIHN1Yl9sZW4sIHN0YXJ0Ci0gICAgICAgICk7CisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc3RyX2xlbik7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9maW5kKHN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViLCBzdWJfbGVuLCBzdGFydCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQpAQCAtNzUsMTcgKzc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3ViLCBQeV9zc2l6ZV90IHN1Yl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCiB7Ci0gICAgaWYgKHN0YXJ0IDwgMCkKLSAgICAgICAgc3RhcnQgKz0gc3RyX2xlbjsKLSAgICBpZiAoc3RhcnQgPCAwKQotICAgICAgICBzdGFydCA9IDA7Ci0gICAgaWYgKGVuZCA+IHN0cl9sZW4pCi0gICAgICAgIGVuZCA9IHN0cl9sZW47Ci0gICAgaWYgKGVuZCA8IDApCi0gICAgICAgIGVuZCArPSBzdHJfbGVuOwotICAgIGlmIChlbmQgPCAwKQotICAgICAgICBlbmQgPSAwOwotCisgICAgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgc3RyX2xlbik7CiAgICAgcmV0dXJuIHN0cmluZ2xpYl9yZmluZChzdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yiwgc3ViX2xlbiwgc3RhcnQpOwogfQogCkBAIC0xMDAsNyArOTEsNyBAQAogICAgICAgICApICE9IC0xOwogfQogCi0jZW5kaWYgLyogU1RSSU5HTElCX1NUUiAqLworI2VuZGlmIC8qIFNUUklOR0xJQl9XQU5UX0NPTlRBSU5TX09CSiAqLwogCiAvKgogVGhpcyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmb3IgdGhlICJmaW5kIiBmYW1pbHkgKGZpbmQsIHJmaW5kLCBpbmRleCwKQEAgLTE0OSw3ICsxNDAsNyBAQAogCiAjdW5kZWYgRk9STUFUX0JVRkZFUl9TSVpFCiAKLSNpZmRlZiBGUk9NX1VOSUNPREUKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCiAvKgogV3JhcHMgc3RyaW5nbGliX3BhcnNlX2FyZ3NfZmluZHMoKSBhbmQgYWRkaXRpb25hbGx5IGVuc3VyZXMgdGhhdCB0aGUKQEAgLTE3OSwxMyArMTcwLDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIEZST01fVU5JQ09ERSAqLworI2VuZGlmIC8qIFNUUklOR0xJQl9JU19VTklDT0RFICovCiAKICNlbmRpZiAvKiBTVFJJTkdMSUJfRklORF9IICovCi0KLS8qCi1Mb2NhbCB2YXJpYWJsZXM6Ci1jLWJhc2ljLW9mZnNldDogNAotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0qLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmggYi9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaAppbmRleCA0NzcwODYzLi40ZmRjNjJkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mb3JtYXR0ZXIuaApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGZvcm1hdCBjb2RlICclYycgIgogICAgICAgICAgICAgICAgICAgICAgImZvciBvYmplY3Qgb2YgdHlwZSAnJS4yMDBzJyIsCi0gICAgICAgICAgICAgICAgICAgICBwcmVzZW50YXRpb25fdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIChjaGFyKXByZXNlbnRhdGlvbl90eXBlLAogICAgICAgICAgICAgICAgICAgICAgdHlwZV9uYW1lKTsKICNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogICAgIGVsc2UKQEAgLTQ0LDYgKzQ0LDI0IEBACiAjZW5kaWYKIH0KIAorc3RhdGljIHZvaWQKK2ludmFsaWRfY29tbWFfdHlwZShTVFJJTkdMSUJfQ0hBUiBwcmVzZW50YXRpb25fdHlwZSkKK3sKKyNpZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQorICAgIC8qIFNlZSBjb21tZW50IGluIHVua25vd25fcHJlc2VudGF0aW9uX3R5cGUgKi8KKyAgICBpZiAocHJlc2VudGF0aW9uX3R5cGUgPiAzMiAmJiBwcmVzZW50YXRpb25fdHlwZSA8IDEyOCkKKyNlbmRpZgorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSAnLCcgd2l0aCAnJWMnLiIsCisgICAgICAgICAgICAgICAgICAgICAoY2hhcilwcmVzZW50YXRpb25fdHlwZSk7CisjaWYgU1RSSU5HTElCX0lTX1VOSUNPREUKKyAgICBlbHNlCisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5ICcsJyB3aXRoICdcXHgleCcuIiwKKyAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpcHJlc2VudGF0aW9uX3R5cGUpOworI2VuZGlmCit9CisKIC8qCiAgICAgZ2V0X2ludGVnZXIgY29uc3VtZXMgMCBvciBtb3JlIGRlY2ltYWwgZGlnaXQgY2hhcmFjdGVycyBmcm9tIGFuCiAgICAgaW5wdXQgc3RyaW5nLCB1cGRhdGVzICpyZXN1bHQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBwb3NpdGl2ZQpAQCAtMjc3LDggKzI5NSw3IEBACiAgICAgICAgICAgICAvKiBUaGVzZSBhcmUgYWxsb3dlZC4gU2VlIFBFUCAzNzguKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzcGVjaWZ5ICcsJyB3aXRoICclYycuIiwgZm9ybWF0LT50eXBlKTsKKyAgICAgICAgICAgIGludmFsaWRfY29tbWFfdHlwZShmb3JtYXQtPnR5cGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC02MzIsOCArNjQ5LDggQEAKICAgICBjYXNlIExUX0RFRkFVTFRfTE9DQUxFOgogICAgICAgICBsb2NhbGVfaW5mby0+ZGVjaW1hbF9wb2ludCA9ICIuIjsKICAgICAgICAgbG9jYWxlX2luZm8tPnRob3VzYW5kc19zZXAgPSAiLCI7Ci0gICAgICAgIGxvY2FsZV9pbmZvLT5ncm91cGluZyA9ICJcMyI7IC8qIEdyb3VwIGV2ZXJ5IDMgY2hhcmFjdGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmcgMCBtZWFucyByZXBlYXQKKyAgICAgICAgbG9jYWxlX2luZm8tPmdyb3VwaW5nID0gIlwzIjsgLyogR3JvdXAgZXZlcnkgMyBjaGFyYWN0ZXJzLiAgVGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbXBsaWNpdCkgdHJhaWxpbmcgMCBtZWFucyByZXBlYXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVseS4gKi8KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMVF9OT19MT0NBTEU6CkBAIC03NTksMTQgKzc3Niw2IEBACiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBFcnJvciB0byBzcGVjaWZ5IGEgY29tbWEuICovCi0gICAgICAgIGlmIChmb3JtYXQtPnRob3VzYW5kc19zZXBhcmF0b3JzKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhvdXNhbmRzIHNlcGFyYXRvcnMgbm90IGFsbG93ZWQgd2l0aCBpbnRlZ2VyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9ybWF0IHNwZWNpZmllciAnYyciKTsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotCiAgICAgICAgIC8qIHRha2VuIGZyb20gdW5pY29kZW9iamVjdC5jIGZvcm1hdGNoYXIoKSAqLwogICAgICAgICAvKiBJbnRlZ2VyIGlucHV0IHRydW5jYXRlZCB0byBhIGNoYXJhY3RlciAqLwogLyogWFhYOiB3b24ndCB3b3JrIGZvciBpbnQgKi8KQEAgLTkzMiwyMCArOTQxLDE2IEBACiAgICAgICAgZnJvbSBhIGhhcmQtY29kZSBwc2V1ZG8tbG9jYWxlICovCiAgICAgTG9jYWxlSW5mbyBsb2NhbGU7CiAKLSAgICAvKiBBbHRlcm5hdGUgaXMgbm90IGFsbG93ZWQgb24gZmxvYXRzLiAqLwotICAgIGlmIChmb3JtYXQtPmFsdGVybmF0ZSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJBbHRlcm5hdGUgZm9ybSAoIykgbm90IGFsbG93ZWQgaW4gZmxvYXQgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KKyAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpCisgICAgICAgIGZsYWdzIHw9IFB5X0RUU0ZfQUxUOwogCiAgICAgaWYgKHR5cGUgPT0gJ1wwJykgewotICAgICAgICAvKiBPbWl0dGVkIHR5cGUgc3BlY2lmaWVyLiBUaGlzIGlzIGxpa2UgJ2cnIGJ1dCB3aXRoIGF0IGxlYXN0IG9uZQotICAgICAgICAgICBkaWdpdCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCwgYW5kIGRpZmZlcmVudCBkZWZhdWx0IHByZWNpc2lvbi4qLwotICAgICAgICB0eXBlID0gJ2cnOwotICAgICAgICBkZWZhdWx0X3ByZWNpc2lvbiA9IFB5RmxvYXRfU1RSX1BSRUNJU0lPTjsKKyAgICAgICAgLyogT21pdHRlZCB0eXBlIHNwZWNpZmllci4gIEJlaGF2ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHJlcHIoeCkKKyAgICAgICAgICAgYW5kIHN0cih4KSBpZiBubyBwcmVjaXNpb24gaXMgZ2l2ZW4sIGVsc2UgbGlrZSAnZycsIGJ1dCB3aXRoCisgICAgICAgICAgIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC4gKi8KICAgICAgICAgZmxhZ3MgfD0gUHlfRFRTRl9BRERfRE9UXzA7CisgICAgICAgIHR5cGUgPSAncic7CisgICAgICAgIGRlZmF1bHRfcHJlY2lzaW9uID0gMDsKICAgICB9CiAKICAgICBpZiAodHlwZSA9PSAnbicpCkBAIC05NTMsMTMgKzk1OCw2IEBACiAgICAgICAgICAgIGZvcm1hdCB0aGUgcmVzdWx0LiBXZSB0YWtlIGNhcmUgb2YgdGhhdCBsYXRlci4gKi8KICAgICAgICAgdHlwZSA9ICdnJzsKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMzAxMDAwCi0gICAgLyogJ0YnIGlzIHRoZSBzYW1lIGFzICdmJywgcGVyIHRoZSBQRVAgKi8KLSAgICAvKiBUaGlzIGlzIG5vIGxvbmdlciB0aGUgY2FzZSBpbiAzLnggKi8KLSAgICBpZiAodHlwZSA9PSAnRicpCi0gICAgICAgIHR5cGUgPSAnZic7Ci0jZW5kaWYKLQogICAgIHZhbCA9IFB5RmxvYXRfQXNEb3VibGUodmFsdWUpOwogICAgIGlmICh2YWwgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIGRvbmU7CkBAIC05NzIsMTIgKzk3MCw4IEBACiAKICAgICBpZiAocHJlY2lzaW9uIDwgMCkKICAgICAgICAgcHJlY2lzaW9uID0gZGVmYXVsdF9wcmVjaXNpb247Ci0KLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMTAwMDAKLSAgICAvKiAzLjEgbm8gbG9uZ2VyIGNvbnZlcnRzIGxhcmdlICdmJyB0byAnZycuICovCi0gICAgaWYgKCh0eXBlID09ICdmJyB8fCB0eXBlID09ICdGJykgJiYgZmFicyh2YWwpID49IDFlNTApCisgICAgZWxzZSBpZiAodHlwZSA9PSAncicpCiAgICAgICAgIHR5cGUgPSAnZyc7Ci0jZW5kaWYKIAogICAgIC8qIENhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGEKICAgICAgICA4LWJpdCBjaGFyLiBUaGlzIGlzIHNhZmUsIGJlY2F1c2Ugd2UndmUgcmVzdHJpY3RlZCB3aGF0ICJ0eXBlIgpAQCAtMTEwNSwxNSArMTA5OSw3IEBACiAgICAgICAgZnJvbSBhIGhhcmQtY29kZSBwc2V1ZG8tbG9jYWxlICovCiAgICAgTG9jYWxlSW5mbyBsb2NhbGU7CiAKLSAgICAvKiBBbHRlcm5hdGUgaXMgbm90IGFsbG93ZWQgb24gY29tcGxleC4gKi8KLSAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQWx0ZXJuYXRlIGZvcm0gKCMpIG5vdCBhbGxvd2VkIGluIGNvbXBsZXggZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIC8qIE5laXRoZXIgaXMgemVybyBwYWRpbmcuICovCisgICAgLyogWmVybyBwYWRkaW5nIGlzIG5vdCBhbGxvd2VkLiAqLwogICAgIGlmIChmb3JtYXQtPmZpbGxfY2hhciA9PSAnMCcpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiWmVybyBwYWRkaW5nIGlzIG5vdCBhbGxvd2VkIGluIGNvbXBsZXggZm9ybWF0ICIKQEAgLTExMzYsMTAgKzExMjIsMTMgQEAKICAgICBpZiAoaW0gPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIGRvbmU7CiAKKyAgICBpZiAoZm9ybWF0LT5hbHRlcm5hdGUpCisgICAgICAgIGZsYWdzIHw9IFB5X0RUU0ZfQUxUOworCiAgICAgaWYgKHR5cGUgPT0gJ1wwJykgewogICAgICAgICAvKiBPbWl0dGVkIHR5cGUgc3BlY2lmaWVyLiBTaG91bGQgYmUgbGlrZSBzdHIoc2VsZikuICovCi0gICAgICAgIHR5cGUgPSAnZyc7Ci0gICAgICAgIGRlZmF1bHRfcHJlY2lzaW9uID0gUHlGbG9hdF9TVFJfUFJFQ0lTSU9OOworICAgICAgICB0eXBlID0gJ3InOworICAgICAgICBkZWZhdWx0X3ByZWNpc2lvbiA9IDA7CiAgICAgICAgIGlmIChyZSA9PSAwLjAgJiYgY29weXNpZ24oMS4wLCByZSkgPT0gMS4wKQogICAgICAgICAgICAgc2tpcF9yZSA9IDE7CiAgICAgICAgIGVsc2UKQEAgLTExNTEsMTUgKzExNDAsMTAgQEAKICAgICAgICAgICAgZm9ybWF0IHRoZSByZXN1bHQuIFdlIHRha2UgY2FyZSBvZiB0aGF0IGxhdGVyLiAqLwogICAgICAgICB0eXBlID0gJ2cnOwogCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAzMDEwMDAwCi0gICAgLyogVGhpcyBpcyBubyBsb25nZXIgdGhlIGNhc2UgaW4gMy54ICovCi0gICAgLyogJ0YnIGlzIHRoZSBzYW1lIGFzICdmJywgcGVyIHRoZSBQRVAgKi8KLSAgICBpZiAodHlwZSA9PSAnRicpCi0gICAgICAgIHR5cGUgPSAnZic7Ci0jZW5kaWYKLQogICAgIGlmIChwcmVjaXNpb24gPCAwKQogICAgICAgICBwcmVjaXNpb24gPSBkZWZhdWx0X3ByZWNpc2lvbjsKKyAgICBlbHNlIGlmICh0eXBlID09ICdyJykKKyAgICAgICAgdHlwZSA9ICdnJzsKIAogICAgIC8qIENhc3QgInR5cGUiLCBiZWNhdXNlIGlmIHdlJ3JlIGluIHVuaWNvZGUgd2UgbmVlZCB0byBwYXNzIGEKICAgICAgICA4LWJpdCBjaGFyLiBUaGlzIGlzIHNhZmUsIGJlY2F1c2Ugd2UndmUgcmVzdHJpY3RlZCB3aGF0ICJ0eXBlIgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAppbmRleCAyMGM3NTA3Li4wMTcwYmRkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaApAQCAtOCwxMCArOCwxMCBAQAogI2VuZGlmCiAKIFB5X0xPQ0FMX0lOTElORShQeU9iamVjdCopCi1zdHJpbmdsaWJfcGFydGl0aW9uKAotICAgIFB5T2JqZWN0KiBzdHJfb2JqLCBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCi0gICAgUHlPYmplY3QqIHNlcF9vYmosIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbgotICAgICkKK3N0cmluZ2xpYl9wYXJ0aXRpb24oUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QqIHNlcF9vYmosCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbikKIHsKICAgICBQeU9iamVjdCogb3V0OwogICAgIFB5X3NzaXplX3QgcG9zOwpAQCAtMjUsMTUgKzI1LDIxIEBACiAgICAgaWYgKCFvdXQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHNlcCwgc2VwX2xlbiwgRkFTVF9TRUFSQ0gpOworICAgIHBvcyA9IGZhc3RzZWFyY2goc3RyLCBzdHJfbGVuLCBzZXAsIHNlcF9sZW4sIC0xLCBGQVNUX1NFQVJDSCk7CiAKICAgICBpZiAocG9zIDwgMCkgeworI2lmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKHN0ciwgc3RyX2xlbikpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMSwgU1RSSU5HTElCX05FVyhOVUxMLCAwKSk7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKyNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIChQeU9iamVjdCopIHN0cl9vYmopOwogICAgICAgICBQeV9JTkNSRUYoU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIChQeU9iamVjdCopIFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gb3V0OwogICAgIH0KIApAQCAtNTIsMTMgKzU4LDEzIEBACiB9CiAKIFB5X0xPQ0FMX0lOTElORShQeU9iamVjdCopCi1zdHJpbmdsaWJfcnBhcnRpdGlvbigKLSAgICBQeU9iamVjdCogc3RyX29iaiwgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAotICAgIFB5T2JqZWN0KiBzZXBfb2JqLCBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4KLSAgICApCitzdHJpbmdsaWJfcnBhcnRpdGlvbihQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzdHIsIFB5X3NzaXplX3Qgc3RyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzZXBfb2JqLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHNlcCwgUHlfc3NpemVfdCBzZXBfbGVuKQogewogICAgIFB5T2JqZWN0KiBvdXQ7Ci0gICAgUHlfc3NpemVfdCBwb3MsIGo7CisgICAgUHlfc3NpemVfdCBwb3M7CiAKICAgICBpZiAoc2VwX2xlbiA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7CkBAIC02OSwyMSArNzUsMjEgQEAKICAgICBpZiAoIW91dCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggLSBjcmVhdGUgcmV2ZXJzZWZhc3RzZWFyY2ggaGVscGVyISAqLwotICAgICAgICBwb3MgPSAtMTsKLSAgICAgICAgZm9yIChqID0gc3RyX2xlbiAtIHNlcF9sZW47IGogPj0gMDsgLS1qKQotICAgICAgICAgICAgaWYgKFNUUklOR0xJQl9DTVAoc3RyK2osIHNlcCwgc2VwX2xlbikgPT0gMCkgewotICAgICAgICAgICAgICAgIHBvcyA9IGo7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgcG9zID0gZmFzdHNlYXJjaChzdHIsIHN0cl9sZW4sIHNlcCwgc2VwX2xlbiwgLTEsIEZBU1RfUlNFQVJDSCk7CiAKICAgICBpZiAocG9zIDwgMCkgeworI2lmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKyNlbHNlCiAgICAgICAgIFB5X0lOQ1JFRihTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMCwgKFB5T2JqZWN0KikgU1RSSU5HTElCX0VNUFRZKTsKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAyLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gb3V0OwogICAgIH0KIApAQCAtMTAyLDEwICsxMDgsMyBAQAogfQogCiAjZW5kaWYKLQotLyoKLUxvY2FsIHZhcmlhYmxlczoKLWMtYmFzaWMtb2Zmc2V0OiA0Ci1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLSovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGU3NzY3Ci0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaApAQCAtMCwwICsxLDM5NCBAQAorLyogc3RyaW5nbGliOiBzcGxpdCBpbXBsZW1lbnRhdGlvbiAqLworCisjaWZuZGVmIFNUUklOR0xJQl9TUExJVF9ICisjZGVmaW5lIFNUUklOR0xJQl9TUExJVF9ICisKKyNpZm5kZWYgU1RSSU5HTElCX0ZBU1RTRUFSQ0hfSAorI2Vycm9yIG11c3QgaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIgYmVmb3JlIGluY2x1ZGluZyB0aGlzIG1vZHVsZQorI2VuZGlmCisKKy8qIE92ZXJhbGxvY2F0ZSB0aGUgaW5pdGlhbCBsaXN0IHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHJlYWxsb2NzIGZvciBzbWFsbAorICAgc3BsaXQgc2l6ZXMuICBFZywgIkEgQSBBIEEgQSBBIEEgQSBBIEEiLnNwbGl0KCkgKDEwIGVsZW1lbnRzKSBoYXMgdGhyZWUKKyAgIHJlc2l6ZXMsIHRvIHNpemVzIDQsIDgsIHRoZW4gMTYuICBNb3N0IG9ic2VydmVkIHN0cmluZyBzcGxpdHMgYXJlIGZvciBodW1hbgorICAgdGV4dCAocm91Z2hseSAxMSB3b3JkcyBwZXIgbGluZSkgYW5kIGZpZWxkIGRlbGltaXRlZCBkYXRhICh1c3VhbGx5IDEtMTAKKyAgIGZpZWxkcykuICBGb3IgbGFyZ2Ugc3RyaW5ncyB0aGUgc3BsaXQgYWxnb3JpdGhtcyBhcmUgYmFuZHdpZHRoIGxpbWl0ZWQKKyAgIHNvIGluY3JlYXNpbmcgdGhlIHByZWFsbG9jYXRpb24gbGlrZWx5IHdpbGwgbm90IGltcHJvdmUgdGhpbmdzLiovCisKKyNkZWZpbmUgTUFYX1BSRUFMTE9DIDEyCisKKy8qIDUgc3BsaXRzIGdpdmVzIDYgZWxlbWVudHMgKi8KKyNkZWZpbmUgUFJFQUxMT0NfU0laRShtYXhzcGxpdCkgXAorICAgIChtYXhzcGxpdCA+PSBNQVhfUFJFQUxMT0MgPyBNQVhfUFJFQUxMT0MgOiBtYXhzcGxpdCsxKQorCisjZGVmaW5lIFNQTElUX0FQUEVORChkYXRhLCBsZWZ0LCByaWdodCkgICAgICAgICBcCisgICAgc3ViID0gU1RSSU5HTElCX05FVygoZGF0YSkgKyAobGVmdCksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgICBcCisgICAgaWYgKHN1YiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgc3ViKSkgeyAgICAgICAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRihzdWIpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRihzdWIpOworCisjZGVmaW5lIFNQTElUX0FERChkYXRhLCBsZWZ0LCByaWdodCkgeyAgICAgICAgICBcCisgICAgc3ViID0gU1RSSU5HTElCX05FVygoZGF0YSkgKyAobGVmdCksICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgICBcCisgICAgaWYgKHN1YiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGNvdW50IDwgTUFYX1BSRUFMTE9DKSB7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBjb3VudCwgc3ViKTsgICAgICBcCisgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN1YikpIHsgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYoc3ViKTsgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgY291bnQrKzsgfQorCisKKy8qIEFsd2F5cyBmb3JjZSB0aGUgbGlzdCB0byB0aGUgZXhwZWN0ZWQgc2l6ZS4gKi8KKyNkZWZpbmUgRklYX1BSRUFMTE9DX1NJWkUobGlzdCkgUHlfU0laRShsaXN0KSA9IGNvdW50CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIFB5T2JqZWN0ICpzdWI7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGkgPSBqID0gMDsKKyAgICB3aGlsZSAobWF4Y291bnQtLSA+IDApIHsKKyAgICAgICAgd2hpbGUgKGkgPCBzdHJfbGVuICYmIFNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpKys7CisgICAgICAgIGlmIChpID09IHN0cl9sZW4pIGJyZWFrOworICAgICAgICBqID0gaTsgaSsrOworICAgICAgICB3aGlsZSAoaSA8IHN0cl9sZW4gJiYgIVNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpKys7CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgICAgIGlmIChqID09IDAgJiYgaSA9PSBzdHJfbGVuICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAgICAgLyogTm8gd2hpdGVzcGFjZSBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCisgICAgICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBTUExJVF9BREQoc3RyLCBqLCBpKTsKKyAgICB9CisKKyAgICBpZiAoaSA8IHN0cl9sZW4pIHsKKyAgICAgICAgLyogT25seSBvY2N1cnMgd2hlbiBtYXhjb3VudCB3YXMgcmVhY2hlZCAqLworICAgICAgICAvKiBTa2lwIGFueSByZW1haW5pbmcgd2hpdGVzcGFjZSBhbmQgY29weSB0byBlbmQgb2Ygc3RyaW5nICovCisgICAgICAgIHdoaWxlIChpIDwgc3RyX2xlbiAmJiBTVFJJTkdMSUJfSVNTUEFDRShzdHJbaV0pKQorICAgICAgICAgICAgaSsrOworICAgICAgICBpZiAoaSAhPSBzdHJfbGVuKQorICAgICAgICAgICAgU1BMSVRfQUREKHN0ciwgaSwgc3RyX2xlbik7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9zcGxpdF9jaGFyKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgY2gsCisgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgY291bnQ9MDsKKyAgICBQeU9iamVjdCAqbGlzdCA9IFB5TGlzdF9OZXcoUFJFQUxMT0NfU0laRShtYXhjb3VudCkpOworICAgIFB5T2JqZWN0ICpzdWI7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGkgPSBqID0gMDsKKyAgICB3aGlsZSAoKGogPCBzdHJfbGVuKSAmJiAobWF4Y291bnQtLSA+IDApKSB7CisgICAgICAgIGZvcig7IGogPCBzdHJfbGVuOyBqKyspIHsKKyAgICAgICAgICAgIC8qIEkgZm91bmQgdGhhdCB1c2luZyBtZW1jaHIgbWFrZXMgbm8gZGlmZmVyZW5jZSAqLworICAgICAgICAgICAgaWYgKHN0cltqXSA9PSBjaCkgeworICAgICAgICAgICAgICAgIFNQTElUX0FERChzdHIsIGksIGopOworICAgICAgICAgICAgICAgIGkgPSBqID0gaiArIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKGNvdW50ID09IDAgJiYgU1RSSU5HTElCX0NIRUNLX0VYQUNUKHN0cl9vYmopKSB7CisgICAgICAgIC8qIGNoIG5vdCBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBzdHJfb2JqIGFzIGxpc3RbMF0gKi8KKyAgICAgICAgUHlfSU5DUkVGKHN0cl9vYmopOworICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgIGNvdW50Kys7CisgICAgfSBlbHNlCisjZW5kaWYKKyAgICBpZiAoaSA8PSBzdHJfbGVuKSB7CisgICAgICAgIFNQTElUX0FERChzdHIsIGksIHN0cl9sZW4pOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitzdHJpbmdsaWJfc3BsaXQoUHlPYmplY3QqIHN0cl9vYmosCisgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSKiBzZXAsIFB5X3NzaXplX3Qgc2VwX2xlbiwKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgIFB5X3NzaXplX3QgaSwgaiwgcG9zLCBjb3VudD0wOworICAgIFB5T2JqZWN0ICpsaXN0LCAqc3ViOworCisgICAgaWYgKHNlcF9sZW4gPT0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImVtcHR5IHNlcGFyYXRvciIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VwX2xlbiA9PSAxKQorICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X2NoYXIoc3RyX29iaiwgc3RyLCBzdHJfbGVuLCBzZXBbMF0sIG1heGNvdW50KTsKKworICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGkgPSBqID0gMDsKKyAgICB3aGlsZSAobWF4Y291bnQtLSA+IDApIHsKKyAgICAgICAgcG9zID0gZmFzdHNlYXJjaChzdHIraSwgc3RyX2xlbi1pLCBzZXAsIHNlcF9sZW4sIC0xLCBGQVNUX1NFQVJDSCk7CisgICAgICAgIGlmIChwb3MgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGogPSBpICsgcG9zOworICAgICAgICBTUExJVF9BREQoc3RyLCBpLCBqKTsKKyAgICAgICAgaSA9IGogKyBzZXBfbGVuOworICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICBpZiAoY291bnQgPT0gMCAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgLyogTm8gbWF0Y2ggaW4gc3RyX29iaiwgc28ganVzdCB1c2UgaXQgYXMgbGlzdFswXSAqLworICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCAwLCAoUHlPYmplY3QgKilzdHJfb2JqKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgaSwgc3RyX2xlbik7CisgICAgfQorICAgIEZJWF9QUkVBTExPQ19TSVpFKGxpc3QpOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9yc3BsaXRfd2hpdGVzcGFjZShQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBQeU9iamVjdCAqc3ViOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpID0gaiA9IHN0cl9sZW4gLSAxOworICAgIHdoaWxlIChtYXhjb3VudC0tID4gMCkgeworICAgICAgICB3aGlsZSAoaSA+PSAwICYmIFNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpLS07CisgICAgICAgIGlmIChpIDwgMCkgYnJlYWs7CisgICAgICAgIGogPSBpOyBpLS07CisgICAgICAgIHdoaWxlIChpID49IDAgJiYgIVNUUklOR0xJQl9JU1NQQUNFKHN0cltpXSkpCisgICAgICAgICAgICBpLS07CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgICAgIGlmIChqID09IHN0cl9sZW4gLSAxICYmIGkgPCAwICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAgICAgLyogTm8gd2hpdGVzcGFjZSBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCisgICAgICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CisgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0obGlzdCwgMCwgKFB5T2JqZWN0ICopc3RyX29iaik7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBTUExJVF9BREQoc3RyLCBpICsgMSwgaiArIDEpOworICAgIH0KKworICAgIGlmIChpID49IDApIHsKKyAgICAgICAgLyogT25seSBvY2N1cnMgd2hlbiBtYXhjb3VudCB3YXMgcmVhY2hlZCAqLworICAgICAgICAvKiBTa2lwIGFueSByZW1haW5pbmcgd2hpdGVzcGFjZSBhbmQgY29weSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nICovCisgICAgICAgIHdoaWxlIChpID49IDAgJiYgU1RSSU5HTElCX0lTU1BBQ0Uoc3RyW2ldKSkKKyAgICAgICAgICAgIGktLTsKKyAgICAgICAgaWYgKGkgPj0gMCkKKyAgICAgICAgICAgIFNQTElUX0FERChzdHIsIDAsIGkgKyAxKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9yc3BsaXRfY2hhcihQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc3RyLCBQeV9zc2l6ZV90IHN0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgY2gsCisgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBQeV9zc2l6ZV90IGksIGosIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBQeU9iamVjdCAqc3ViOworCisgICAgaWYgKGxpc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpID0gaiA9IHN0cl9sZW4gLSAxOworICAgIHdoaWxlICgoaSA+PSAwKSAmJiAobWF4Y291bnQtLSA+IDApKSB7CisgICAgICAgIGZvcig7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAoc3RyW2ldID09IGNoKSB7CisgICAgICAgICAgICAgICAgU1BMSVRfQUREKHN0ciwgaSArIDEsIGogKyAxKTsKKyAgICAgICAgICAgICAgICBqID0gaSA9IGkgLSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChjb3VudCA9PSAwICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAvKiBjaCBub3QgaW4gc3RyX29iaiwgc28ganVzdCB1c2Ugc3RyX29iaiBhcyBsaXN0WzBdICovCisgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICBjb3VudCsrOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgaWYgKGogPj0gLTEpIHsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgMCwgaiArIDEpOworICAgIH0KKyAgICBGSVhfUFJFQUxMT0NfU0laRShsaXN0KTsKKyAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgcmV0dXJuIGxpc3Q7CisKKyAgb25FcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5X0xPQ0FMX0lOTElORShQeU9iamVjdCAqKQorc3RyaW5nbGliX3JzcGxpdChQeU9iamVjdCogc3RyX29iaiwKKyAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiogc2VwLCBQeV9zc2l6ZV90IHNlcF9sZW4sCisgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgUHlfc3NpemVfdCBqLCBwb3MsIGNvdW50PTA7CisgICAgUHlPYmplY3QgKmxpc3QsICpzdWI7CisKKyAgICBpZiAoc2VwX2xlbiA9PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmIChzZXBfbGVuID09IDEpCisgICAgICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0X2NoYXIoc3RyX29iaiwgc3RyLCBzdHJfbGVuLCBzZXBbMF0sIG1heGNvdW50KTsKKworICAgIGxpc3QgPSBQeUxpc3RfTmV3KFBSRUFMTE9DX1NJWkUobWF4Y291bnQpKTsKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGogPSBzdHJfbGVuOworICAgIHdoaWxlIChtYXhjb3VudC0tID4gMCkgeworICAgICAgICBwb3MgPSBmYXN0c2VhcmNoKHN0ciwgaiwgc2VwLCBzZXBfbGVuLCAtMSwgRkFTVF9SU0VBUkNIKTsKKyAgICAgICAgaWYgKHBvcyA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgU1BMSVRfQUREKHN0ciwgcG9zICsgc2VwX2xlbiwgaik7CisgICAgICAgIGogPSBwb3M7CisgICAgfQorI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQorICAgIGlmIChjb3VudCA9PSAwICYmIFNUUklOR0xJQl9DSEVDS19FWEFDVChzdHJfb2JqKSkgeworICAgICAgICAvKiBObyBtYXRjaCBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCisgICAgICAgIFB5X0lOQ1JFRihzdHJfb2JqKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGxpc3QsIDAsIChQeU9iamVjdCAqKXN0cl9vYmopOworICAgICAgICBjb3VudCsrOworICAgIH0gZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICBTUExJVF9BREQoc3RyLCAwLCBqKTsKKyAgICB9CisgICAgRklYX1BSRUFMTE9DX1NJWkUobGlzdCk7CisgICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIHJldHVybiBsaXN0OworCisgIG9uRXJyb3I6CisgICAgUHlfREVDUkVGKGxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCitQeV9MT0NBTF9JTkxJTkUoUHlPYmplY3QgKikKK3N0cmluZ2xpYl9zcGxpdGxpbmVzKFB5T2JqZWN0KiBzdHJfb2JqLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIqIHN0ciwgUHlfc3NpemVfdCBzdHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgaW50IGtlZXBlbmRzKQoreworICAgIC8qIFRoaXMgZG9lcyBub3QgdXNlIHRoZSBwcmVhbGxvY2F0ZWQgbGlzdCBiZWNhdXNlIHNwbGl0bGluZXMgaXMKKyAgICAgICB1c3VhbGx5IHJ1biB3aXRoIGh1bmRyZWRzIG9mIG5ld2xpbmVzLiAgVGhlIG92ZXJoZWFkIG9mCisgICAgICAgc3dpdGNoaW5nIGJldHdlZW4gUHlMaXN0X1NFVF9JVEVNIGFuZCBhcHBlbmQgY2F1c2VzIGFib3V0IGEKKyAgICAgICAyLTMlIHNsb3dkb3duIGZvciB0aGF0IGNvbW1vbiBjYXNlLiAgQSBzbWFydGVyIGltcGxlbWVudGF0aW9uCisgICAgICAgY291bGQgbW92ZSB0aGUgaWYgY2hlY2sgb3V0LCBzbyB0aGUgU0VUX0lURU1zIGFyZSBkb25lIGZpcnN0CisgICAgICAgYW5kIHRoZSBhcHBlbmRzIG9ubHkgZG9uZSB3aGVuIHRoZSBwcmVhbGxvYyBidWZmZXIgaXMgZnVsbC4KKyAgICAgICBUaGF0J3MgdG9vIG11Y2ggd29yayBmb3IgbGl0dGxlIGdhaW4uKi8KKworICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKKyAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7CisgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KDApOworICAgIFB5T2JqZWN0ICpzdWI7CisKKyAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IGogPSAwOyBpIDwgc3RyX2xlbjsgKSB7CisgICAgICAgIFB5X3NzaXplX3QgZW9sOworCisgICAgICAgIC8qIEZpbmQgYSBsaW5lIGFuZCBhcHBlbmQgaXQgKi8KKyAgICAgICAgd2hpbGUgKGkgPCBzdHJfbGVuICYmICFTVFJJTkdMSUJfSVNMSU5FQlJFQUsoc3RyW2ldKSkKKyAgICAgICAgICAgIGkrKzsKKworICAgICAgICAvKiBTa2lwIHRoZSBsaW5lIGJyZWFrIHJlYWRpbmcgQ1JMRiBhcyBvbmUgbGluZSBicmVhayAqLworICAgICAgICBlb2wgPSBpOworICAgICAgICBpZiAoaSA8IHN0cl9sZW4pIHsKKyAgICAgICAgICAgIGlmIChzdHJbaV0gPT0gJ1xyJyAmJiBpICsgMSA8IHN0cl9sZW4gJiYgc3RyW2krMV0gPT0gJ1xuJykKKyAgICAgICAgICAgICAgICBpICs9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgaWYgKGtlZXBlbmRzKQorICAgICAgICAgICAgICAgIGVvbCA9IGk7CisgICAgICAgIH0KKyNpZm5kZWYgU1RSSU5HTElCX01VVEFCTEUKKyAgICAgICAgaWYgKGogPT0gMCAmJiBlb2wgPT0gc3RyX2xlbiAmJiBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1Qoc3RyX29iaikpIHsKKyAgICAgICAgICAgIC8qIE5vIGxpbmVicmVhayBpbiBzdHJfb2JqLCBzbyBqdXN0IHVzZSBpdCBhcyBsaXN0WzBdICovCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHJfb2JqKSkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIFNQTElUX0FQUEVORChzdHIsIGosIGVvbCk7CisgICAgICAgIGogPSBpOworICAgIH0KKyAgICByZXR1cm4gbGlzdDsKKworICBvbkVycm9yOgorICAgIFB5X0RFQ1JFRihsaXN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmggYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmgKaW5kZXggYjIwOTVmZC4uNmYxMDcyNyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ19mb3JtYXQuaApAQCAtNDk5LDEzICs0OTksMTYgQEAKICAgICAgICAgUHlPYmplY3QgKmtleSA9IFN1YlN0cmluZ19uZXdfb2JqZWN0KCZmaXJzdCk7CiAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmICgoa3dhcmdzID09IE5VTEwpIHx8IChvYmogPSBQeURpY3RfR2V0SXRlbShrd2FyZ3MsIGtleSkpID09IE5VTEwpIHsKKworICAgICAgICAvKiBVc2UgUHlPYmplY3RfR2V0SXRlbSBpbnN0ZWFkIG9mIFB5RGljdF9HZXRJdGVtIGJlY2F1c2UgdGhpcworICAgICAgICAgICBjb2RlIGlzIG5vIGxvbmdlciBqdXN0IHVzZWQgd2l0aCBrd2FyZ3MuIEl0IG1pZ2h0IGJlIHBhc3NlZAorICAgICAgICAgICBhIG5vbi1kaWN0IHdoZW4gY2FsbGVkIHRocm91Z2ggZm9ybWF0X21hcC4gKi8KKyAgICAgICAgaWYgKChrd2FyZ3MgPT0gTlVMTCkgfHwgKG9iaiA9IFB5T2JqZWN0X0dldEl0ZW0oa3dhcmdzLCBrZXkpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIGtleSk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgIFB5X0lOQ1JFRihvYmopOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogbG9vayB1cCBpbiBhcmdzICovCkBAIC0xMDM5LDYgKzEwNDIsMTEgQEAKICAgICByZXR1cm4gYnVpbGRfc3RyaW5nKCZpbnB1dCwgYXJncywga3dhcmdzLCByZWN1cnNpb25fZGVwdGgsICZhdXRvX251bWJlcik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkb19zdHJpbmdfZm9ybWF0X21hcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICByZXR1cm4gZG9fc3RyaW5nX2Zvcm1hdChzZWxmLCBOVUxMLCBvYmopOworfQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xMTgwLDEwICsxMTg4LDE1IEBACiAgICBkZXNjcmliaW5nIHRoZSBwYXJzZWQgZWxlbWVudHMuICBJdCdzIGEgd3JhcHBlciBhcm91bmQKICAgIHN0cmluZ2xpYi9zdHJpbmdfZm9ybWF0LmgncyBNYXJrdXBJdGVyYXRvciAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWZvcm1hdHRlcl9wYXJzZXIoU1RSSU5HTElCX09CSkVDVCAqc2VsZikKK2Zvcm1hdHRlcl9wYXJzZXIoUHlPYmplY3QgKmlnbm9yZWQsIFNUUklOR0xJQl9PQkpFQ1QgKnNlbGYpCiB7CiAgICAgZm9ybWF0dGVyaXRlcm9iamVjdCAqaXQ7CiAKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhzZWxmKSkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc3RyLCBnb3QgJXMiLCBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9OZXcoZm9ybWF0dGVyaXRlcm9iamVjdCwgJlB5Rm9ybWF0dGVySXRlcl9UeXBlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzE1LDcgKzEzMjgsNyBAQAogICAgZmllbGRfbmFtZV9zcGxpdC4gIFRoZSBpdGVyYXRvciBpdCByZXR1cm5zIGlzIGEKICAgIEZpZWxkTmFtZUl0ZXJhdG9yICovCiBzdGF0aWMgUHlPYmplY3QgKgotZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQoU1RSSU5HTElCX09CSkVDVCAqc2VsZikKK2Zvcm1hdHRlcl9maWVsZF9uYW1lX3NwbGl0KFB5T2JqZWN0ICppZ25vcmVkLCBTVFJJTkdMSUJfT0JKRUNUICpzZWxmKQogewogICAgIFN1YlN0cmluZyBmaXJzdDsKICAgICBQeV9zc2l6ZV90IGZpcnN0X2lkeDsKQEAgLTEzMjQsNiArMTMzNywxMSBAQAogICAgIFB5T2JqZWN0ICpmaXJzdF9vYmogPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCisgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soc2VsZikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0ciwgZ290ICVzIiwgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGl0ID0gUHlPYmplY3RfTmV3KGZpZWxkbmFtZWl0ZXJvYmplY3QsICZQeUZpZWxkTmFtZUl0ZXJfVHlwZSk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCmluZGV4IGE1NjcyYzcuLjFjNDk0MjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgU1RSSU5HTElCX1RZUEVfTkFNRSAgICAgICJzdHJpbmciCiAjZGVmaW5lIFNUUklOR0xJQl9QQVJTRV9DT0RFICAgICAiUyIKICNkZWZpbmUgU1RSSU5HTElCX0VNUFRZICAgICAgICAgIG51bGxzdHJpbmcKKyNkZWZpbmUgU1RSSU5HTElCX0lTU1BBQ0UgICAgICAgIFB5X0lTU1BBQ0UKKyNkZWZpbmUgU1RSSU5HTElCX0lTTElORUJSRUFLKHgpICgoeCA9PSAnXG4nKSB8fCAoeCA9PSAnXHInKSkKICNkZWZpbmUgU1RSSU5HTElCX0lTREVDSU1BTCh4KSAgICgoeCA+PSAnMCcpICYmICh4IDw9ICc5JykpCiAjZGVmaW5lIFNUUklOR0xJQl9UT0RFQ0lNQUwoeCkgICAoU1RSSU5HTElCX0lTREVDSU1BTCh4KSA/ICh4IC0gJzAnKSA6IC0xKQogI2RlZmluZSBTVFJJTkdMSUJfVE9VUFBFUiAgICAgICAgUHlfVE9VUFBFUgpAQCAtMjEsNyArMjMsNyBAQAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeUJ5dGVzX0NoZWNrCi0jZGVmaW5lIFNUUklOR0xJQl9DTVAgICAgICAgICAgICBtZW1jbXAKKyNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5Qnl0ZXNfQ2hlY2tFeGFjdAogI2RlZmluZSBTVFJJTkdMSUJfVE9TVFIgICAgICAgICAgUHlPYmplY3RfU3RyCiAjZGVmaW5lIFNUUklOR0xJQl9HUk9VUElORyAgICAgICBfUHlCeXRlc19JbnNlcnRUaG91c2FuZHNHcm91cGluZwogI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkdfTE9DQUxFIF9QeUJ5dGVzX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaCBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCmluZGV4IDQzOTBlMjIuLjFlMTMyZTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCkBAIC0xLDEzICsxLDYgQEAKIC8qIE5PVEU6IHRoaXMgQVBJIGlzIC1PTkxZLSBmb3IgdXNlIHdpdGggc2luZ2xlIGJ5dGUgY2hhcmFjdGVyIHN0cmluZ3MuICovCiAvKiBEbyBub3QgdXNlIGl0IHdpdGggVW5pY29kZS4gKi8KIAotI2luY2x1ZGUgImJ5dGVzX21ldGhvZHMuaCIKLQotI2lmbmRlZiBTVFJJTkdMSUJfTVVUQUJMRQotI3dhcm5pbmcgIlNUUklOR0xJQl9NVVRBQkxFIG5vdCBkZWZpbmVkIGJlZm9yZSAjaW5jbHVkZSwgYXNzdW1pbmcgMCIKLSNkZWZpbmUgU1RSSU5HTElCX01VVEFCTEUgMAotI2VuZGlmCi0KIC8qIHRoZSBtb3JlIGNvbXBsaWNhdGVkIG1ldGhvZHMuICBwYXJ0cyBvZiB0aGVzZSBzaG91bGQgYmUgcHVsbGVkIG91dCBpbnRvIHRoZQogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIApAQCAtMjUsMTAgKzE4LDEwIEBACiAgICAgc2l6ZV90IGksIGo7CiAgICAgUHlPYmplY3QgKnU7CiAgICAgaW50IHRhYnNpemUgPSA4OwotCisgICAgCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpleHBhbmR0YWJzIiwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIAogICAgIC8qIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplIG9mIG91dHB1dCBzdHJpbmcgKi8KICAgICBpID0gaiA9IDA7CiAgICAgZSA9IFNUUklOR0xJQl9TVFIoc2VsZikgKyBTVFJJTkdMSUJfTEVOKHNlbGYpOwpAQCAtNTUsMjAgKzQ4LDIwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0KKyAgICAKICAgICBpZiAoKGkgKyBqKSA+IFBZX1NTSVpFX1RfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAicmVzdWx0IGlzIHRvbyBsb25nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLQorICAgIAogICAgIC8qIFNlY29uZCBwYXNzOiBjcmVhdGUgb3V0cHV0IHN0cmluZyBhbmQgZmlsbCBpdCAqLwogICAgIHUgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIGkgKyBqKTsKICAgICBpZiAoIXUpCiAgICAgICAgIHJldHVybiBOVUxMOwotCisgICAgCiAgICAgaiA9IDA7CiAgICAgcSA9IFNUUklOR0xJQl9TVFIodSk7Ci0KKyAgICAKICAgICBmb3IgKHAgPSBTVFJJTkdMSUJfU1RSKHNlbGYpOyBwIDwgZTsgcCsrKQogICAgICAgICBpZiAoKnAgPT0gJ1x0JykgewogICAgICAgICAgICAgaWYgKHRhYnNpemUgPiAwKSB7CkBAIC04NCw3ICs3Nyw3IEBACiAgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJyB8fCAqcCA9PSAnXHInKQogICAgICAgICAgICAgICAgIGogPSAwOwogICAgICAgICB9Ci0KKyAgICAKICAgICByZXR1cm4gdTsKIH0KIApAQCAtMTEwLDE2ICsxMDMsMTYgQEAKICAgICB9CiAKICAgICB1ID0gU1RSSU5HTElCX05FVyhOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSArIHJpZ2h0KTsKKwkJCQkgICBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSArIHJpZ2h0KTsKICAgICBpZiAodSkgewogICAgICAgICBpZiAobGVmdCkKICAgICAgICAgICAgIG1lbXNldChTVFJJTkdMSUJfU1RSKHUpLCBmaWxsLCBsZWZ0KTsKICAgICAgICAgUHlfTUVNQ1BZKFNUUklOR0xJQl9TVFIodSkgKyBsZWZ0LAotICAgICAgICAgICAgICAgU1RSSU5HTElCX1NUUihzZWxmKSwKLSAgICAgICAgICAgICAgIFNUUklOR0xJQl9MRU4oc2VsZikpOworCSAgICAgICBTVFJJTkdMSUJfU1RSKHNlbGYpLAorCSAgICAgICBTVFJJTkdMSUJfTEVOKHNlbGYpKTsKICAgICAgICAgaWYgKHJpZ2h0KQogICAgICAgICAgICAgbWVtc2V0KFNUUklOR0xJQl9TVFIodSkgKyBsZWZ0ICsgU1RSSU5HTElCX0xFTihzZWxmKSwKLSAgICAgICAgICAgICAgICAgICBmaWxsLCByaWdodCk7CisJCSAgIGZpbGwsIHJpZ2h0KTsKICAgICB9CiAKICAgICByZXR1cm4gdTsKQEAgLTI2OSw4NyArMjYyLDMgQEAKIAogICAgIHJldHVybiAoUHlPYmplY3QqKSBzOwogfQotCi0KLSNkZWZpbmUgX1NUUklOR0xJQl9TUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICBcCi0gICAgICAgIHN0ciA9IFNUUklOR0xJQl9ORVcoKGRhdGEpICsgKGxlZnQpLCAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmlnaHQpIC0gKGxlZnQpKTsgICAgIFwKLSAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBzdHIpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0KLVB5RG9jX1NUUlZBUihzcGxpdGxpbmVzX19kb2NfXywKLSJCLnNwbGl0bGluZXMoW2tlZXBlbmRzXSkgLT4gbGlzdCBvZiBsaW5lc1xuXAotXG5cCi1SZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiBCLCBicmVha2luZyBhdCBsaW5lIGJvdW5kYXJpZXMuXG5cCi1MaW5lIGJyZWFrcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSByZXN1bHRpbmcgbGlzdCB1bmxlc3Mga2VlcGVuZHNcblwKLWlzIGdpdmVuIGFuZCB0cnVlLiIpOwotCi1zdGF0aWMgUHlPYmplY3QqCi1zdHJpbmdsaWJfc3BsaXRsaW5lcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQga2VlcGVuZHMgPSAwOwotICAgIFB5T2JqZWN0ICpsaXN0OwotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgY2hhciAqZGF0YTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6c3BsaXRsaW5lcyIsICZrZWVwZW5kcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZGF0YSA9IFNUUklOR0xJQl9TVFIoc2VsZik7Ci0gICAgbGVuID0gU1RSSU5HTElCX0xFTihzZWxmKTsKLQotICAgIC8qIFRoaXMgZG9lcyBub3QgdXNlIHRoZSBwcmVhbGxvY2F0ZWQgbGlzdCBiZWNhdXNlIHNwbGl0bGluZXMgaXMKLSAgICAgICB1c3VhbGx5IHJ1biB3aXRoIGh1bmRyZWRzIG9mIG5ld2xpbmVzLiAgVGhlIG92ZXJoZWFkIG9mCi0gICAgICAgc3dpdGNoaW5nIGJldHdlZW4gUHlMaXN0X1NFVF9JVEVNIGFuZCBhcHBlbmQgY2F1c2VzIGFib3V0IGEKLSAgICAgICAyLTMlIHNsb3dkb3duIGZvciB0aGF0IGNvbW1vbiBjYXNlLiAgQSBzbWFydGVyIGltcGxlbWVudGF0aW9uCi0gICAgICAgY291bGQgbW92ZSB0aGUgaWYgY2hlY2sgb3V0LCBzbyB0aGUgU0VUX0lURU1zIGFyZSBkb25lIGZpcnN0Ci0gICAgICAgYW5kIHRoZSBhcHBlbmRzIG9ubHkgZG9uZSB3aGVuIHRoZSBwcmVhbGxvYyBidWZmZXIgaXMgZnVsbC4KLSAgICAgICBUaGF0J3MgdG9vIG11Y2ggd29yayBmb3IgbGl0dGxlIGdhaW4uKi8KLQotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCi0gICAgZm9yIChpID0gaiA9IDA7IGkgPCBsZW47ICkgewotICAgICAgICBQeV9zc2l6ZV90IGVvbDsKLQotICAgICAgICAvKiBGaW5kIGEgbGluZSBhbmQgYXBwZW5kIGl0ICovCi0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIGRhdGFbaV0gIT0gJ1xuJyAmJiBkYXRhW2ldICE9ICdccicpCi0gICAgICAgICAgICBpKys7Ci0KLSAgICAgICAgLyogU2tpcCB0aGUgbGluZSBicmVhayByZWFkaW5nIENSTEYgYXMgb25lIGxpbmUgYnJlYWsgKi8KLSAgICAgICAgZW9sID0gaTsKLSAgICAgICAgaWYgKGkgPCBsZW4pIHsKLSAgICAgICAgICAgIGlmIChkYXRhW2ldID09ICdccicgJiYgaSArIDEgPCBsZW4gJiYKLSAgICAgICAgICAgICAgICBkYXRhW2krMV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICBpICs9IDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgaWYgKGtlZXBlbmRzKQotICAgICAgICAgICAgICAgIGVvbCA9IGk7Ci0gICAgICAgIH0KLSAgICAgICAgX1NUUklOR0xJQl9TUExJVF9BUFBFTkQoZGF0YSwgaiwgZW9sKTsKLSAgICAgICAgaiA9IGk7Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIF9TVFJJTkdMSUJfU1BMSVRfQVBQRU5EKGRhdGEsIGosIGxlbik7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxpc3Q7Ci0KLSBvbkVycm9yOgotICAgIFB5X1hERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSN1bmRlZiBfU1RSSU5HTElCX1NQTElUX0FQUEVORAotCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCAzNjZhY2ZlLi4wOWRhZTZkIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTExLDYgKzExLDggQEAKICNkZWZpbmUgU1RSSU5HTElCX1RZUEVfTkFNRSAgICAgICJ1bmljb2RlIgogI2RlZmluZSBTVFJJTkdMSUJfUEFSU0VfQ09ERSAgICAgIlUiCiAjZGVmaW5lIFNUUklOR0xJQl9FTVBUWSAgICAgICAgICB1bmljb2RlX2VtcHR5CisjZGVmaW5lIFNUUklOR0xJQl9JU1NQQUNFICAgICAgICBQeV9VTklDT0RFX0lTU1BBQ0UKKyNkZWZpbmUgU1RSSU5HTElCX0lTTElORUJSRUFLICAgIEJMT09NX0xJTkVCUkVBSwogI2RlZmluZSBTVFJJTkdMSUJfSVNERUNJTUFMICAgICAgUHlfVU5JQ09ERV9JU0RFQ0lNQUwKICNkZWZpbmUgU1RSSU5HTElCX1RPREVDSU1BTCAgICAgIFB5X1VOSUNPREVfVE9ERUNJTUFMCiAjZGVmaW5lIFNUUklOR0xJQl9UT1VQUEVSICAgICAgICBQeV9VTklDT0RFX1RPVVBQRVIKQEAgLTIxLDYgKzIzLDcgQEAKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tVW5pY29kZQogI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgUHlVbmljb2RlX1Jlc2l6ZQogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCisjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkcgICAgICAgX1B5VW5pY29kZV9JbnNlcnRUaG91c2FuZHNHcm91cGluZwogI2RlZmluZSBTVFJJTkdMSUJfR1JPVVBJTkdfTE9DQUxFIF9QeVVuaWNvZGVfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmdMb2NhbGUKIApAQCAtMzQsMjMgKzM3LDQgQEAKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCi0vKiBTVFJJTkdMSUJfQ01QIHdhcyBkZWZpbmVkIGFzOgotCi1QeV9MT0NBTF9JTkxJTkUoaW50KQotU1RSSU5HTElCX0NNUChjb25zdCBQeV9VTklDT0RFKiBzdHIsIGNvbnN0IFB5X1VOSUNPREUqIG90aGVyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBpZiAoc3RyWzBdICE9IG90aGVyWzBdKQotICAgICAgICByZXR1cm4gMTsKLSAgICByZXR1cm4gbWVtY21wKCh2b2lkKikgc3RyLCAodm9pZCopIG90aGVyLCBsZW4gKiBzaXplb2YoUHlfVU5JQ09ERSkpOwotfQotCi1idXQgdW5mb3J0dW5hdGVseSB0aGF0IGdpdmVzIGEgZXJyb3IgaWYgdGhlIGZ1bmN0aW9uIGlzbid0IHVzZWQgaW4gYSBmaWxlIHRoYXQKLWluY2x1ZGVzIHRoaXMgZmlsZS4gIFNvLCByZWx1Y3RhbnRseSBjb252ZXJ0IGl0IHRvIGEgbWFjcm8gaW5zdGVhZC4gKi8KLQotI2RlZmluZSBTVFJJTkdMSUJfQ01QKHN0ciwgb3RoZXIsIGxlbikgXAotICAgICgoKHN0cilbMF0gIT0gKG90aGVyKVswXSkgPyBcCi0gICAgIDEgOiBcCi0gICAgIG1lbWNtcCgodm9pZCopIChzdHIpLCAodm9pZCopIChvdGhlciksIChsZW4pICogc2l6ZW9mKFB5X1VOSUNPREUpKSkKLQotCiAjZW5kaWYgLyogIVNUUklOR0xJQl9VTklDT0RFREVGU19IICovCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cnVjdHNlcS5jIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwppbmRleCA3MDMxMjI1Li5lZjE3ZjQ5IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cnVjdHNlcS5jCisrKyBiL09iamVjdHMvc3RydWN0c2VxLmMKQEAgLTMsNyArMyw2IEBACiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKIAogc3RhdGljIGNoYXIgdmlzaWJsZV9sZW5ndGhfa2V5W10gPSAibl9zZXF1ZW5jZV9maWVsZHMiOwogc3RhdGljIGNoYXIgcmVhbF9sZW5ndGhfa2V5W10gPSAibl9maWVsZHMiOwpAQCAtMzAsMTEzICsyOSw0MiBAQAogUHlTdHJ1Y3RTZXF1ZW5jZV9OZXcoUHlUeXBlT2JqZWN0ICp0eXBlKQogewogICAgIFB5U3RydWN0U2VxdWVuY2UgKm9iajsKKyAgICBQeV9zc2l6ZV90IHNpemUgPSBSRUFMX1NJWkVfVFAodHlwZSksIGk7CiAKLSAgICBvYmogPSBQeU9iamVjdF9OZXcoUHlTdHJ1Y3RTZXF1ZW5jZSwgdHlwZSk7CisgICAgb2JqID0gUHlPYmplY3RfR0NfTmV3VmFyKFB5U3RydWN0U2VxdWVuY2UsIHR5cGUsIHNpemUpOwogICAgIGlmIChvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogSGFjayB0aGUgc2l6ZSBvZiB0aGUgdmFyaWFibGUgb2JqZWN0LCBzbyBpbnZpc2libGUgZmllbGRzIGRvbid0IGFwcGVhcgorICAgICB0byBQeXRob24gY29kZS4gKi8KICAgICBQeV9TSVpFKG9iaikgPSBWSVNJQkxFX1NJWkVfVFAodHlwZSk7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgICAgICAgb2JqLT5vYl9pdGVtW2ldID0gTlVMTDsKIAotICAgIHJldHVybiAoUHlPYmplY3QqKSBvYmo7CisgICAgcmV0dXJuIChQeU9iamVjdCopb2JqOworfQorCit2b2lkCitQeVN0cnVjdFNlcXVlbmNlX1NldEl0ZW0oUHlPYmplY3QqIG9wLCBQeV9zc2l6ZV90IGksIFB5T2JqZWN0KiB2KQoreworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0ob3AsIGksIHYpOworfQorCitQeU9iamVjdCoKK1B5U3RydWN0U2VxdWVuY2VfR2V0SXRlbShQeU9iamVjdCogb3AsIFB5X3NzaXplX3QgaSkKK3sKKyAgICByZXR1cm4gUHlTdHJ1Y3RTZXF1ZW5jZV9HRVRfSVRFTShvcCwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBzdHJ1Y3RzZXFfZGVhbGxvYyhQeVN0cnVjdFNlcXVlbmNlICpvYmopCiB7CiAgICAgUHlfc3NpemVfdCBpLCBzaXplOwotCisgICAgCiAgICAgc2l6ZSA9IFJFQUxfU0laRShvYmopOwogICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYmotPm9iX2l0ZW1baV0pOwogICAgIH0KLSAgICBQeU9iamVjdF9EZWwob2JqKTsKLX0KLQotc3RhdGljIFB5X3NzaXplX3QKLXN0cnVjdHNlcV9sZW5ndGgoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQotewotICAgIHJldHVybiBWSVNJQkxFX1NJWkUob2JqKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0Kgotc3RydWN0c2VxX2l0ZW0oUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqLCBQeV9zc2l6ZV90IGkpCi17Ci0gICAgaWYgKGkgPCAwIHx8IGkgPj0gVklTSUJMRV9TSVpFKG9iaikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJ0dXBsZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIFB5X0lOQ1JFRihvYmotPm9iX2l0ZW1baV0pOwotICAgIHJldHVybiBvYmotPm9iX2l0ZW1baV07Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCoKLXN0cnVjdHNlcV9zbGljZShQeVN0cnVjdFNlcXVlbmNlICpvYmosIFB5X3NzaXplX3QgbG93LCBQeV9zc2l6ZV90IGhpZ2gpCi17Ci0gICAgUHlUdXBsZU9iamVjdCAqbnA7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgaWYgKGxvdyA8IDApCi0gICAgICAgIGxvdyA9IDA7Ci0gICAgaWYgKGhpZ2ggPiBWSVNJQkxFX1NJWkUob2JqKSkKLSAgICAgICAgaGlnaCA9IFZJU0lCTEVfU0laRShvYmopOwotICAgIGlmIChoaWdoIDwgbG93KQotICAgICAgICBoaWdoID0gbG93OwotICAgIG5wID0gKFB5VHVwbGVPYmplY3QgKilQeVR1cGxlX05ldyhoaWdoLWxvdyk7Ci0gICAgaWYgKG5wID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGZvcihpID0gbG93OyBpIDwgaGlnaDsgKytpKSB7Ci0gICAgICAgIFB5T2JqZWN0ICp2ID0gb2JqLT5vYl9pdGVtW2ldOwotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0obnAsIGktbG93LCB2KTsKLSAgICB9Ci0gICAgcmV0dXJuIChQeU9iamVjdCAqKSBucDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXN0cnVjdHNlcV9zdWJzY3JpcHQoUHlTdHJ1Y3RTZXF1ZW5jZSAqc2VsZiwgUHlPYmplY3QgKml0ZW0pCi17Ci0gICAgaWYgKFB5SW5kZXhfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpID0gUHlOdW1iZXJfQXNTc2l6ZV90KGl0ZW0sIFB5RXhjX0luZGV4RXJyb3IpOwotICAgICAgICBpZiAoaSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgaWYgKGkgPCAwKQotICAgICAgICAgICAgaSArPSBWSVNJQkxFX1NJWkUoc2VsZik7Ci0KLSAgICAgICAgaWYgKGkgPCAwIHx8IGkgPj0gVklTSUJMRV9TSVpFKHNlbGYpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKLSAgICAgICAgICAgICAgICAidHVwbGUgaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2JfaXRlbVtpXSk7Ci0gICAgICAgIHJldHVybiBzZWxmLT5vYl9pdGVtW2ldOwotICAgIH0KLSAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIHN0b3AsIHN0ZXAsIHNsaWNlbGVuLCBjdXIsIGk7Ci0gICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0KLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0ICopaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZJU0lCTEVfU0laRShzZWxmKSwgJnN0YXJ0LCAmc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNsaWNlbGVuIDw9IDApCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9OZXcoMCk7Ci0gICAgICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KHNsaWNlbGVuKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47Ci0gICAgICAgICAgICAgY3VyICs9IHN0ZXAsIGkrKykgewotICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBzZWxmLT5vYl9pdGVtW2N1cl07Ci0gICAgICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgdik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RydWN0c2VxIGluZGV4IG11c3QgYmUgaW50ZWdlciIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgUHlPYmplY3RfR0NfRGVsKG9iaik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yMjMsMTEgKzE1MSw2IEBACiAgICAgcmV0dXJuIChQeU9iamVjdCopIHJlczsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLW1ha2VfdHVwbGUoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQotewotICAgIHJldHVybiBzdHJ1Y3RzZXFfc2xpY2Uob2JqLCAwLCBWSVNJQkxFX1NJWkUob2JqKSk7Ci19CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzdHJ1Y3RzZXFfcmVwcihQeVN0cnVjdFNlcXVlbmNlICpvYmopCkBAIC0yMzYsNyArMTU5LDYgQEAKICNkZWZpbmUgUkVQUl9CVUZGRVJfU0laRSA1MTIKICNkZWZpbmUgVFlQRV9NQVhTSVpFIDEwMAogCi0gICAgUHlPYmplY3QgKnR1cDsKICAgICBQeVR5cGVPYmplY3QgKnR5cCA9IFB5X1RZUEUob2JqKTsKICAgICBpbnQgaSwgcmVtb3ZlbGFzdCA9IDA7CiAgICAgUHlfc3NpemVfdCBsZW47CkBAIC0yNDYsMTAgKzE2OCw2IEBACiAgICAgLyogcG9pbnRlciB0byBlbmQgb2Ygd3JpdGVhYmxlIGJ1ZmZlcjsgc2FmZXMgc3BhY2UgZm9yICIuLi4pXDAiICovCiAgICAgZW5kb2ZidWY9ICZidWZbUkVQUl9CVUZGRVJfU0laRS01XTsKIAotICAgIGlmICgodHVwID0gbWFrZV90dXBsZShvYmopKSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIC8qICJ0eXBlbmFtZSgiLCBsaW1pdGVkIHRvICBUWVBFX01BWFNJWkUgKi8KICAgICBsZW4gPSBzdHJsZW4odHlwLT50cF9uYW1lKSA+IFRZUEVfTUFYU0laRSA/IFRZUEVfTUFYU0laRSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHR5cC0+dHBfbmFtZSk7CkBAIC0yNjIsMTkgKzE4MCwxNyBAQAogICAgICAgICBjaGFyICpjbmFtZSwgKmNyZXByOwogCiAgICAgICAgIGNuYW1lID0gdHlwLT50cF9tZW1iZXJzW2ldLm5hbWU7Ci0KLSAgICAgICAgdmFsID0gUHlUdXBsZV9HZXRJdGVtKHR1cCwgaSk7Ci0gICAgICAgIGlmIChjbmFtZSA9PSBOVUxMIHx8IHZhbCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChjbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsICJJbiBzdHJ1Y3RzZXFfcmVwcigpLCBtZW1iZXIgJWQgbmFtZSBpcyBOVUxMIgorICAgICAgICAgICAgICAgICAgICAgICAgICIgZm9yIHR5cGUgJS41MDBzIiwgaSwgdHlwLT50cF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIHZhbCA9IFB5U3RydWN0U2VxdWVuY2VfR0VUX0lURU0ob2JqLCBpKTsKICAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIodmFsKTsKLSAgICAgICAgaWYgKHJlcHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHR1cCk7CisgICAgICAgIGlmIChyZXByID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBjcmVwciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcocmVwcik7CiAgICAgICAgIGlmIChjcmVwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodHVwKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0zMDAsNyArMjE2LDYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIFB5X0RFQ1JFRih0dXApOwogICAgIGlmIChyZW1vdmVsYXN0KSB7CiAgICAgICAgIC8qIG92ZXJ3cml0ZSBsYXN0ICIsICIgKi8KICAgICAgICAgcGJ1Zi09MjsKQEAgLTMxMiw2MiArMjI3LDYgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cnVjdHNlcV9jb25jYXQoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqLCBQeU9iamVjdCAqYikKLXsKLSAgICBQeU9iamVjdCAqdHVwLCAqcmVzdWx0OwotICAgIHR1cCA9IG1ha2VfdHVwbGUob2JqKTsKLSAgICByZXN1bHQgPSBQeVNlcXVlbmNlX0NvbmNhdCh0dXAsIGIpOwotICAgIFB5X0RFQ1JFRih0dXApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zdHJ1Y3RzZXFfcmVwZWF0KFB5U3RydWN0U2VxdWVuY2UgKm9iaiwgUHlfc3NpemVfdCBuKQotewotICAgIFB5T2JqZWN0ICp0dXAsICpyZXN1bHQ7Ci0gICAgdHVwID0gbWFrZV90dXBsZShvYmopOwotICAgIHJlc3VsdCA9IFB5U2VxdWVuY2VfUmVwZWF0KHR1cCwgbik7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludAotc3RydWN0c2VxX2NvbnRhaW5zKFB5U3RydWN0U2VxdWVuY2UgKm9iaiwgUHlPYmplY3QgKm8pCi17Ci0gICAgUHlPYmplY3QgKnR1cDsKLSAgICBpbnQgcmVzdWx0OwotICAgIHR1cCA9IG1ha2VfdHVwbGUob2JqKTsKLSAgICBpZiAoIXR1cCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJlc3VsdCA9IFB5U2VxdWVuY2VfQ29udGFpbnModHVwLCBvKTsKLSAgICBQeV9ERUNSRUYodHVwKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgbG9uZwotc3RydWN0c2VxX2hhc2goUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIGxvbmcgcmVzdWx0OwotICAgIHR1cCA9IG1ha2VfdHVwbGUoKFB5U3RydWN0U2VxdWVuY2UqKSBvYmopOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzdWx0ID0gUHlPYmplY3RfSGFzaCh0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1zdHJ1Y3RzZXFfcmljaGNvbXBhcmUoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm8yLCBpbnQgb3ApCi17Ci0gICAgUHlPYmplY3QgKnR1cCwgKnJlc3VsdDsKLSAgICB0dXAgPSBtYWtlX3R1cGxlKChQeVN0cnVjdFNlcXVlbmNlKikgb2JqKTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZSh0dXAsIG8yLCBvcCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHN0cnVjdHNlcV9yZWR1Y2UoUHlTdHJ1Y3RTZXF1ZW5jZSogc2VsZikKIHsKICAgICBQeU9iamVjdCogdHVwOwpAQCAtNDA5LDMzICsyNjgsMTYgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgc3RydWN0c2VxX2FzX3NlcXVlbmNlID0gewotICAgIChsZW5mdW5jKXN0cnVjdHNlcV9sZW5ndGgsCi0gICAgKGJpbmFyeWZ1bmMpc3RydWN0c2VxX2NvbmNhdCwgICAgICAgICAgIC8qIHNxX2NvbmNhdCAqLwotICAgIChzc2l6ZWFyZ2Z1bmMpc3RydWN0c2VxX3JlcGVhdCwgICAgICAgICAvKiBzcV9yZXBlYXQgKi8KLSAgICAoc3NpemVhcmdmdW5jKXN0cnVjdHNlcV9pdGVtLCAgICAgICAgICAgICAgIC8qIHNxX2l0ZW0gKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3NsaWNlICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9hc3NfaXRlbSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfYXNzX3NsaWNlICovCi0gICAgKG9iam9ianByb2Mpc3RydWN0c2VxX2NvbnRhaW5zLCAgICAgICAgICAgICAvKiBzcV9jb250YWlucyAqLwotfTsKLQotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgc3RydWN0c2VxX2FzX21hcHBpbmcgPSB7Ci0gICAgKGxlbmZ1bmMpc3RydWN0c2VxX2xlbmd0aCwKLSAgICAoYmluYXJ5ZnVuYylzdHJ1Y3RzZXFfc3Vic2NyaXB0LAotfTsKLQogc3RhdGljIFB5TWV0aG9kRGVmIHN0cnVjdHNlcV9tZXRob2RzW10gPSB7Ci0gICAgeyJfX3JlZHVjZV9fIiwgKFB5Q0Z1bmN0aW9uKXN0cnVjdHNlcV9yZWR1Y2UsCi0gICAgIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pc3RydWN0c2VxX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAogICAgIHtOVUxMLCBOVUxMfQogfTsKIAogc3RhdGljIFB5VHlwZU9iamVjdCBfc3RydWN0X3NlcXVlbmNlX3RlbXBsYXRlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uYW1lICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCisgICAgc2l6ZW9mKFB5U3RydWN0U2VxdWVuY2UpIC0gc2l6ZW9mKFB5T2JqZWN0ICopLCAvKiB0cF9iYXNpY3NpemUgKi8KKyAgICBzaXplb2YoUHlPYmplY3QgKiksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZW1zaXplICovCiAgICAgKGRlc3RydWN0b3Ipc3RydWN0c2VxX2RlYWxsb2MsICAgICAgICAgICAgICAvKiB0cF9kZWFsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9wcmludCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0ciAqLwpAQCAtNDQzLDE5ICsyODUsMTkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3Jlc2VydmVkICovCiAgICAgKHJlcHJmdW5jKXN0cnVjdHNlcV9yZXByLCAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19udW1iZXIgKi8KLSAgICAmc3RydWN0c2VxX2FzX3NlcXVlbmNlLCAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCi0gICAgJnN0cnVjdHNlcV9hc19tYXBwaW5nLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19tYXBwaW5nICovCi0gICAgc3RydWN0c2VxX2hhc2gsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mbGFncyAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCi0gICAgc3RydWN0c2VxX3JpY2hjb21wYXJlLCAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwpAQCAtNDk0LDExICszMzYsOSBAQAogICAgIG5fbWVtYmVycyA9IGk7CiAKICAgICBtZW1jcHkodHlwZSwgJl9zdHJ1Y3Rfc2VxdWVuY2VfdGVtcGxhdGUsIHNpemVvZihQeVR5cGVPYmplY3QpKTsKKyAgICB0eXBlLT50cF9iYXNlID0gJlB5VHVwbGVfVHlwZTsKICAgICB0eXBlLT50cF9uYW1lID0gZGVzYy0+bmFtZTsKICAgICB0eXBlLT50cF9kb2MgPSBkZXNjLT5kb2M7Ci0gICAgdHlwZS0+dHBfYmFzaWNzaXplID0gc2l6ZW9mKFB5U3RydWN0U2VxdWVuY2UpKwotICAgICAgICBzaXplb2YoUHlPYmplY3QqKSoobl9tZW1iZXJzLTEpOwotICAgIHR5cGUtPnRwX2l0ZW1zaXplID0gMDsKIAogICAgIG1lbWJlcnMgPSBQeU1lbV9ORVcoUHlNZW1iZXJEZWYsIG5fbWVtYmVycy1uX3VubmFtZWRfbWVtYmVycysxKTsKICAgICBpZiAobWVtYmVycyA9PSBOVUxMKQpAQCAtNTM3LDMgKzM3NywxMSBAQAogICAgIFNFVF9ESUNUX0ZST01fSU5UKHJlYWxfbGVuZ3RoX2tleSwgbl9tZW1iZXJzKTsKICAgICBTRVRfRElDVF9GUk9NX0lOVCh1bm5hbWVkX2ZpZWxkc19rZXksIG5fdW5uYW1lZF9tZW1iZXJzKTsKIH0KKworUHlUeXBlT2JqZWN0KgorUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKK3sKKyAgICBQeVR5cGVPYmplY3QgKnJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKHJlc3VsdCwgZGVzYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL09iamVjdHMvdHVwbGVvYmplY3QuYyBiL09iamVjdHMvdHVwbGVvYmplY3QuYwppbmRleCBhYTNiZTgyLi43MmI3OWM5IDEwMDY0NAotLS0gYS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCkBAIC0zMTIsMTMgKzMxMiwxMyBAQAogICAgICAxMzMwMTExLCAxNDEyNjMzLCAxMTY1MDY5LCAxMjQ3NTk5LCAxNDk1MTc3LCAxNTc3Njk5CiAqLwogCi1zdGF0aWMgbG9uZworc3RhdGljIFB5X2hhc2hfdAogdHVwbGVoYXNoKFB5VHVwbGVPYmplY3QgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgbG9uZyB4LCB5OworICAgIHJlZ2lzdGVyIFB5X2hhc2hfdCB4LCB5OwogICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gUHlfU0laRSh2KTsKICAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7Ci0gICAgbG9uZyBtdWx0ID0gMTAwMDAwM0w7CisgICAgUHlfaGFzaF90IG11bHQgPSAxMDAwMDAzTDsKICAgICB4ID0gMHgzNDU2NzhMOwogICAgIHAgPSB2LT5vYl9pdGVtOwogICAgIHdoaWxlICgtLWxlbiA+PSAwKSB7CkBAIC0zMjcsNyArMzI3LDcgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgeCA9ICh4IF4geSkgKiBtdWx0OwogICAgICAgICAvKiB0aGUgY2FzdCBtaWdodCB0cnVuY2F0ZSBsZW47IHRoYXQgZG9lc24ndCBjaGFuZ2UgaGFzaCBzdGFiaWxpdHkgKi8KLSAgICAgICAgbXVsdCArPSAobG9uZykoODI1MjBMICsgbGVuICsgbGVuKTsKKyAgICAgICAgbXVsdCArPSAoUHlfaGFzaF90KSg4MjUyMEwgKyBsZW4gKyBsZW4pOwogICAgIH0KICAgICB4ICs9IDk3NTMxTDsKICAgICBpZiAoeCA9PSAtMSkKQEAgLTY4OSw3ICs2ODksNyBAQAogICAgICAgICBQeU9iamVjdCogaXQ7CiAgICAgICAgIFB5T2JqZWN0ICoqc3JjLCAqKmRlc3Q7CiAKLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0KilpdGVtLAorICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHNlbGYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW5ndGgpIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDMxMGE1NmMuLjhlYWY1MWYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC0xMzU5LDggKzEzNTksMTQgQEAKICAgICBpID0gMDsKICAgICB3aGlsZSAoUHlEaWN0X05leHQoc2V0LCAmaSwgJmssICZ2KSAmJiAoc2l6ZV90KW9mZiA8IHNpemVvZihidWYpKSB7CiAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gY2xhc3NfbmFtZShrKTsKLSAgICAgICAgb2ZmICs9IFB5T1Nfc25wcmludGYoYnVmICsgb2ZmLCBzaXplb2YoYnVmKSAtIG9mZiwgIiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPyBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpIDogIj8iKTsKKyAgICAgICAgY2hhciAqbmFtZV9zdHI7CisgICAgICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG5hbWVfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKKyAgICAgICAgICAgIGlmIChuYW1lX3N0ciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIG5hbWVfc3RyID0gIj8iOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5hbWVfc3RyID0gIj8iOworICAgICAgICBvZmYgKz0gUHlPU19zbnByaW50ZihidWYgKyBvZmYsIHNpemVvZihidWYpIC0gb2ZmLCAiICVzIiwgbmFtZV9zdHIpOwogICAgICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgICAgICBpZiAoLS1uICYmIChzaXplX3QpKG9mZisxKSA8IHNpemVvZihidWYpKSB7CiAgICAgICAgICAgICBidWZbb2ZmKytdID0gJywnOwpAQCAtMTg5OCw2ICsxOTA0LDEyIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorbG9uZworUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCAqdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZS0+dHBfZmxhZ3M7Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0eXBlX25ldyhQeVR5cGVPYmplY3QgKm1ldGF0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0yMjMyLDYgKzIyNDQsMTAgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5zbG90czsgaSsrLCBtcCsrKSB7CiAgICAgICAgICAgICBtcC0+bmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoCiAgICAgICAgICAgICAgICAgUHlUdXBsZV9HRVRfSVRFTShzbG90cywgaSkpOworICAgICAgICAgICAgaWYgKG1wLT5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHlwZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBtcC0+dHlwZSA9IFRfT0JKRUNUX0VYOwogICAgICAgICAgICAgbXAtPm9mZnNldCA9IHNsb3RvZmZzZXQ7CiAKQEAgLTIzMDMsNiArMjMxOSw1NyBAQAogICAgIHJldHVybiAoUHlPYmplY3QgKil0eXBlOwogfQogCitzdGF0aWMgc2hvcnQgc2xvdG9mZnNldHNbXSA9IHsKKyAgICAtMSwgLyogaW52YWxpZCBzbG90ICovCisjaW5jbHVkZSAidHlwZXNsb3RzLmluYyIKK307CisKK1B5T2JqZWN0KiBQeVR5cGVfRnJvbVNwZWMoUHlUeXBlX1NwZWMgKnNwZWMpCit7CisgICAgUHlIZWFwVHlwZU9iamVjdCAqcmVzID0gKFB5SGVhcFR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBjaGFyICpyZXNfc3RhcnQgPSAoY2hhciopcmVzOworICAgIFB5VHlwZV9TbG90ICpzbG90OworCisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzLT5odF9uYW1lID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoc3BlYy0+bmFtZSk7CisgICAgaWYgKCFyZXMtPmh0X25hbWUpCisJZ290byBmYWlsOworICAgIHJlcy0+aHRfdHlwZS50cF9uYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhyZXMtPmh0X25hbWUpOworICAgIGlmICghcmVzLT5odF90eXBlLnRwX25hbWUpCisJZ290byBmYWlsOworCisgICAgcmVzLT5odF90eXBlLnRwX2Jhc2ljc2l6ZSA9IHNwZWMtPmJhc2ljc2l6ZTsKKyAgICByZXMtPmh0X3R5cGUudHBfaXRlbXNpemUgPSBzcGVjLT5pdGVtc2l6ZTsKKyAgICByZXMtPmh0X3R5cGUudHBfZmxhZ3MgPSBzcGVjLT5mbGFncyB8IFB5X1RQRkxBR1NfSEVBUFRZUEU7CisKKyAgICBmb3IgKHNsb3QgPSBzcGVjLT5zbG90czsgc2xvdC0+c2xvdDsgc2xvdCsrKSB7CisJaWYgKHNsb3QtPnNsb3QgPj0gc2l6ZW9mKHNsb3RvZmZzZXRzKS9zaXplb2Yoc2xvdG9mZnNldHNbMF0pKSB7CisJICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJpbnZhbGlkIHNsb3Qgb2Zmc2V0Iik7CisJICAgIGdvdG8gZmFpbDsKKwl9CisJKih2b2lkKiopKHJlc19zdGFydCArIHNsb3RvZmZzZXRzW3Nsb3QtPnNsb3RdKSA9IHNsb3QtPnBmdW5jOworCisgICAgICAgIC8qIG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGRvY3N0cmluZyBzbG90LCB3aGljaCB1c3VhbGx5CisgICAgICAgICAgIHBvaW50cyB0byBhIHN0YXRpYyBzdHJpbmcgbGl0ZXJhbCAqLworICAgICAgICBpZiAoc2xvdC0+c2xvdCA9PSBQeV90cF9kb2MpIHsKKyAgICAgICAgICAgIHNzaXplX3QgbGVuID0gc3RybGVuKHNsb3QtPnBmdW5jKSsxOworICAgICAgICAgICAgY2hhciAqdHBfZG9jID0gUHlPYmplY3RfTUFMTE9DKGxlbik7CisgICAgICAgICAgICBpZiAodHBfZG9jID09IE5VTEwpCisJICAgIAlnb3RvIGZhaWw7CisgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBzbG90LT5wZnVuYywgbGVuKTsKKyAgICAgICAgICAgIHJlcy0+aHRfdHlwZS50cF9kb2MgPSB0cF9kb2M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKFB5T2JqZWN0KilyZXM7CisKKyBmYWlsOgorICAgIFB5X0RFQ1JFRihyZXMpOworICAgIHJldHVybiBOVUxMOworfQorCisKIC8qIEludGVybmFsIEFQSSB0byBsb29rIGZvciBhIG5hbWUgdGhyb3VnaCB0aGUgTVJPLgogICAgVGhpcyByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLCBhbmQgZG9lc24ndCBzZXQgYW4gZXhjZXB0aW9uISAqLwogUHlPYmplY3QgKgpAQCAtMzMwOSwyMyArMzM3NiwzMiBAQAogICAgIFB5T2JqZWN0ICpmb3JtYXRfc3BlYzsKICAgICBQeU9iamVjdCAqc2VsZl9hc19zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmb3JtYXRfbWV0aCA9IE5VTEw7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6X19mb3JtYXRfXyIsICZmb3JtYXRfc3BlYykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc2VsZl9hc19zdHIgPSBQeU9iamVjdF9TdHIoc2VsZik7CiAgICAgaWYgKHNlbGZfYXNfc3RyICE9IE5VTEwpIHsKLSAgICAgICAgLyogZmluZCB0aGUgZm9ybWF0IGZ1bmN0aW9uICovCi0gICAgICAgIGZvcm1hdF9tZXRoID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzZWxmX2FzX3N0ciwgIl9fZm9ybWF0X18iKTsKLSAgICAgICAgaWYgKGZvcm1hdF9tZXRoICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgIC8qIGFuZCBjYWxsIGl0ICovCi0gICAgICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGZvcm1hdF9tZXRoLCBmb3JtYXRfc3BlYywgTlVMTCk7Ci0gICAgICAgIH0KKyAgICAgICAgLyogSXNzdWUgNzk5NDogSWYgd2UncmUgY29udmVydGluZyB0byBhIHN0cmluZywgd2UKKwkgICBzaG91bGQgcmVqZWN0IGZvcm1hdCBzcGVjaWZpY2F0aW9ucyAqLworICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGZvcm1hdF9zcGVjKSA+IDApIHsKKwkgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLAorCQkJICAgICAib2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgIgorCQkJICAgICAic3RyaW5nIGlzIGRlcHJlY2F0ZWQiLCAxKSA8IDApIHsKKwkgICAgICBnb3RvIGRvbmU7CisJICAgIH0KKwkgICAgLyogRXZlbnR1YWxseSB0aGlzIHdpbGwgYmVjb21lIGFuIGVycm9yOgorCSAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorCSAgICAgICAibm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgcGFzc2VkIHRvIG9iamVjdC5fX2Zvcm1hdF9fIik7CisJICAgICAgIGdvdG8gZG9uZTsKKwkgICAgKi8KKwl9CisKKwlyZXN1bHQgPSBQeU9iamVjdF9Gb3JtYXQoc2VsZl9hc19zdHIsIGZvcm1hdF9zcGVjKTsKICAgICB9CiAKK2RvbmU6CiAgICAgUHlfWERFQ1JFRihzZWxmX2FzX3N0cik7Ci0gICAgUHlfWERFQ1JFRihmb3JtYXRfbWV0aCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMzQ4MywxMSArMzU1OSw4IEBACiBzdGF0aWMgdm9pZAogaW5oZXJpdF9zcGVjaWFsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlUeXBlT2JqZWN0ICpiYXNlKQogewotICAgIFB5X3NzaXplX3Qgb2xkc2l6ZSwgbmV3c2l6ZTsKIAogICAgIC8qIENvcHlpbmcgYmFzaWNzaXplIGlzIGNvbm5lY3RlZCB0byB0aGUgR0MgZmxhZ3MgKi8KLSAgICBvbGRzaXplID0gYmFzZS0+dHBfYmFzaWNzaXplOwotICAgIG5ld3NpemUgPSB0eXBlLT50cF9iYXNpY3NpemUgPyB0eXBlLT50cF9iYXNpY3NpemUgOiBvbGRzaXplOwogICAgIGlmICghKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IQVZFX0dDKSAmJgogICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpICYmCiAgICAgICAgICghdHlwZS0+dHBfdHJhdmVyc2UgJiYgIXR5cGUtPnRwX2NsZWFyKSkgewpAQCAtMzUxNCw3ICszNTg3LDggQEAKICAgICAgICAgICAgICAgICB0eXBlLT50cF9uZXcgPSBiYXNlLT50cF9uZXc7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdHlwZS0+dHBfYmFzaWNzaXplID0gbmV3c2l6ZTsKKyAgICBpZiAodHlwZS0+dHBfYmFzaWNzaXplID09IDApCisgICAgICAgIHR5cGUtPnRwX2Jhc2ljc2l6ZSA9IGJhc2UtPnRwX2Jhc2ljc2l6ZTsKIAogICAgIC8qIENvcHkgb3RoZXIgbm9uLWZ1bmN0aW9uIHNsb3RzICovCiAKQEAgLTM5MDEsMTMgKzM5NzUsMTAgQEAKICAgICAgICB0cF9yZXNlcnZlZCkgYnV0IG5vdCB0cF9yaWNoY29tcGFyZS4gKi8KICAgICBpZiAodHlwZS0+dHBfcmVzZXJ2ZWQgJiYgIXR5cGUtPnRwX3JpY2hjb21wYXJlKSB7CiAgICAgICAgIGludCBlcnJvcjsKLSAgICAgICAgY2hhciBtc2dbMjQwXTsKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2csIHNpemVvZihtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkZWZpbmVzIHRwX3Jlc2VydmVkIChmb3JtZXJseSAiCi0gICAgICAgICAgICAgICAgICAgICAgInRwX2NvbXBhcmUpIGJ1dCBub3QgdHBfcmljaGNvbXBhcmUuICIKLSAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaXNvbnMgbWF5IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lKTsKLSAgICAgICAgZXJyb3IgPSBQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCBtc2csIDEpOworICAgICAgICBlcnJvciA9IFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICAgICAgIlR5cGUgJS4xMDBzIGRlZmluZXMgdHBfcmVzZXJ2ZWQgKGZvcm1lcmx5IHRwX2NvbXBhcmUpICIKKyAgICAgICAgICAgICJidXQgbm90IHRwX3JpY2hjb21wYXJlLiBDb21wYXJpc29ucyBtYXkgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZC4iLAorICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIGlmIChlcnJvciA9PSAtMSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtNDMwNiwxNCArNDM3NywxNCBAQAogd3JhcF9oYXNoZnVuYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQpCiB7CiAgICAgaGFzaGZ1bmMgZnVuYyA9IChoYXNoZnVuYyl3cmFwcGVkOwotICAgIGxvbmcgcmVzOworICAgIFB5X2hhc2hfdCByZXM7CiAKICAgICBpZiAoIWNoZWNrX251bV9hcmdzKGFyZ3MsIDApKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXMgPSAoKmZ1bmMpKHNlbGYpOwogICAgIGlmIChyZXMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXMpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQ5MTAsMTIgKzQ5ODEsMTIgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiBzbG90X3RwX2hhc2goUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmZ1bmMsICpyZXM7CiAgICAgc3RhdGljIFB5T2JqZWN0ICpoYXNoX3N0cjsKLSAgICBsb25nIGg7CisgICAgUHlfc3NpemVfdCBoOwogCiAgICAgZnVuYyA9IGxvb2t1cF9tZXRob2Qoc2VsZiwgIl9faGFzaF9fIiwgJmhhc2hfc3RyKTsKIApAQCAtNDkzMiwxNCArNTAwMywzMCBAQAogICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoUHlMb25nX0NoZWNrKHJlcykpCisKKyAgICBpZiAoIVB5TG9uZ19DaGVjayhyZXMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19oYXNoX18gbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlciIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIFRyYW5zZm9ybSB0aGUgUHlMb25nIGByZXNgIHRvIGEgUHlfaGFzaF90IGBoYC4gIEZvciBhbiBleGlzdGluZworICAgICAgIGhhc2hhYmxlIFB5dGhvbiBvYmplY3QgeCwgaGFzaCh4KSB3aWxsIGFsd2F5cyBsaWUgd2l0aGluIHRoZSByYW5nZSBvZgorICAgICAgIFB5X2hhc2hfdC4gIFRoZXJlZm9yZSBvdXIgdHJhbnNmb3JtYXRpb24gbXVzdCBwcmVzZXJ2ZSB2YWx1ZXMgdGhhdAorICAgICAgIGFscmVhZHkgbGllIHdpdGhpbiB0aGlzIHJhbmdlLCB0byBlbnN1cmUgdGhhdCBpZiB4Ll9faGFzaF9fKCkgcmV0dXJucworICAgICAgIGhhc2goeSkgdGhlbiBoYXNoKHgpID09IGhhc2goeSkuICovCisgICAgaCA9IFB5TG9uZ19Bc1NzaXplX3QocmVzKTsKKyAgICBpZiAoaCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIC8qIHJlcyB3YXMgbm90IHdpdGhpbiB0aGUgcmFuZ2Ugb2YgYSBQeV9oYXNoX3QsIHNvIHdlJ3JlIGZyZWUgdG8KKyAgICAgICAgICAgdXNlIGFueSBzdWZmaWNpZW50bHkgYml0LW1peGluZyB0cmFuc2Zvcm1hdGlvbjsKKyAgICAgICAgICAgbG9uZy5fX2hhc2hfXyB3aWxsIGRvIG5pY2VseS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgaCA9IFB5TG9uZ19UeXBlLnRwX2hhc2gocmVzKTsKLSAgICBlbHNlCi0gICAgICAgIGggPSBQeUxvbmdfQXNMb25nKHJlcyk7CisgICAgfQorICAgIC8qIC0xIGlzIHJlc2VydmVkIGZvciBlcnJvcnMuICovCisgICAgaWYgKGggPT0gLTEpCisgICAgICAgIGggPSAtMjsKICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgICAgaWYgKGggPT0gLTEgJiYgIVB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgIGggPSAtMjsKLSAgICAgICAgICAgcmV0dXJuIGg7CisgICAgcmV0dXJuIGg7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01MDc4LDcgKzUxNjUsNyBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWhhbGZfcmljaGNvbXBhcmUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvdGhlciwgaW50IG9wKQorc2xvdF90cF9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCiB7CiAgICAgUHlPYmplY3QgKmZ1bmMsICphcmdzLCAqcmVzOwogICAgIHN0YXRpYyBQeU9iamVjdCAqb3Bfc3RyWzZdOwpAQCAtNTEwMSwyOCArNTE4OCw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1zbG90X3RwX3JpY2hjb21wYXJlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb3RoZXIsIGludCBvcCkKLXsKLSAgICBQeU9iamVjdCAqcmVzOwotCi0gICAgaWYgKFB5X1RZUEUoc2VsZiktPnRwX3JpY2hjb21wYXJlID09IHNsb3RfdHBfcmljaGNvbXBhcmUpIHsKLSAgICAgICAgcmVzID0gaGFsZl9yaWNoY29tcGFyZShzZWxmLCBvdGhlciwgb3ApOwotICAgICAgICBpZiAocmVzICE9IFB5X05vdEltcGxlbWVudGVkKQotICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgfQotICAgIGlmIChQeV9UWVBFKG90aGVyKS0+dHBfcmljaGNvbXBhcmUgPT0gc2xvdF90cF9yaWNoY29tcGFyZSkgewotICAgICAgICByZXMgPSBoYWxmX3JpY2hjb21wYXJlKG90aGVyLCBzZWxmLCBfUHlfU3dhcHBlZE9wW29wXSk7Ci0gICAgICAgIGlmIChyZXMgIT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKLSAgICAgICAgICAgIHJldHVybiByZXM7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob3RJbXBsZW1lbnRlZCk7Ci0gICAgcmV0dXJuIFB5X05vdEltcGxlbWVudGVkOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogc2xvdF90cF9pdGVyKFB5T2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpmdW5jLCAqcmVzOwpAQCAtNTY1OCw3ICs1NzIzLDcgQEAKICAgICAgICAgICAgICAgICBnZW5lcmljID0gcC0+ZnVuY3Rpb247CiAgICAgICAgICAgICBkID0gKFB5V3JhcHBlckRlc2NyT2JqZWN0ICopZGVzY3I7CiAgICAgICAgICAgICBpZiAoZC0+ZF9iYXNlLT53cmFwcGVyID09IHAtPndyYXBwZXIgJiYKLSAgICAgICAgICAgICAgICBQeVR5cGVfSXNTdWJ0eXBlKHR5cGUsIGQtPmRfdHlwZSkpCisgICAgICAgICAgICAgICAgUHlUeXBlX0lzU3VidHlwZSh0eXBlLCBQeURlc2NyX1RZUEUoZCkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChzcGVjaWZpYyA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljID09IGQtPmRfd3JhcHBlZCkKQEAgLTYxNjIsNyArNjIyNyw3IEBACiAgICAgICAgICAgIGFuZCBmaXJzdCBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suICovCiAgICAgICAgIFB5RnJhbWVPYmplY3QgKmYgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5mcmFtZTsKICAgICAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IGYtPmZfY29kZTsKLSAgICAgICAgaW50IGksIG47CisgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKICAgICAgICAgaWYgKGNvID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIoKTogbm8gY29kZSBvYmplY3QiKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvdHlwZXNsb3RzLmluYyBiL09iamVjdHMvdHlwZXNsb3RzLmluYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTg2ZGNmCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy90eXBlc2xvdHMuaW5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qIEdlbmVyYXRlZCBieSB0eXBlc2xvdHMucHkgJFJldmlzaW9uJCAqLworMCwKKzAsCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19tYXBwaW5nLm1wX2Fzc19zdWJzY3JpcHQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbWFwcGluZy5tcF9sZW5ndGgpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbWFwcGluZy5tcF9zdWJzY3JpcHQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2Fic29sdXRlKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9hZGQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2FuZCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfYm9vbCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfZGl2bW9kKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9mbG9hdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfZmxvb3JfZGl2aWRlKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9pbmRleCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW5wbGFjZV9hZGQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2VfYW5kKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9pbnBsYWNlX2Zsb29yX2RpdmlkZSksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW5wbGFjZV9sc2hpZnQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2VfbXVsdGlwbHkpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2Vfb3IpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2VfcG93ZXIpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2lucGxhY2VfcmVtYWluZGVyKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9pbnBsYWNlX3JzaGlmdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW5wbGFjZV9zdWJ0cmFjdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW5wbGFjZV90cnVlX2RpdmlkZSksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW5wbGFjZV94b3IpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX2ludCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfaW52ZXJ0KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9sc2hpZnQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX211bHRpcGx5KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9uZWdhdGl2ZSksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfb3IpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX3Bvc2l0aXZlKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9wb3dlciksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfcmVtYWluZGVyKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl9yc2hpZnQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgYXNfbnVtYmVyLm5iX3N1YnRyYWN0KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX251bWJlci5uYl90cnVlX2RpdmlkZSksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19udW1iZXIubmJfeG9yKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX3NlcXVlbmNlLnNxX2Fzc19pdGVtKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX3NlcXVlbmNlLnNxX2NvbmNhdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19zZXF1ZW5jZS5zcV9jb250YWlucyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19zZXF1ZW5jZS5zcV9pbnBsYWNlX2NvbmNhdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19zZXF1ZW5jZS5zcV9pbnBsYWNlX3JlcGVhdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19zZXF1ZW5jZS5zcV9pdGVtKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGFzX3NlcXVlbmNlLnNxX2xlbmd0aCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBhc19zZXF1ZW5jZS5zcV9yZXBlYXQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9hbGxvYyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2Jhc2UpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9iYXNlcyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2NhbGwpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9jbGVhciksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2RlYWxsb2MpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9kZWwpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9kZXNjcl9nZXQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9kZXNjcl9zZXQpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9kb2MpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9nZXRhdHRyKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfZ2V0YXR0cm8pLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9oYXNoKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfaW5pdCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2lzX2djKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfaXRlciksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2l0ZXJuZXh0KSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfbWV0aG9kcyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX25ldyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX3JlcHIpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9yaWNoY29tcGFyZSksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX3NldGF0dHIpLAorb2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgaHRfdHlwZS50cF9zZXRhdHRybyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX3N0ciksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX3RyYXZlcnNlKSwKK29mZnNldG9mKFB5SGVhcFR5cGVPYmplY3QsIGh0X3R5cGUudHBfbWVtYmVycyksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2dldHNldCksCitvZmZzZXRvZihQeUhlYXBUeXBlT2JqZWN0LCBodF90eXBlLnRwX2ZyZWUpLApkaWZmIC0tZ2l0IGEvT2JqZWN0cy90eXBlc2xvdHMucHkgYi9PYmplY3RzL3R5cGVzbG90cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTAwYzgwCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy90eXBlc2xvdHMucHkKQEAgLTAsMCArMSwzMCBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgVXNhZ2U6IHR5cGVzbG90cy5weSA8IEluY2x1ZGUvdHlwZXNsb3RzLmggPiB0eXBlc2xvdHMuaW5jCisKK2ltcG9ydCBzeXMsIHJlCisKK3ByaW50KCIvKiBHZW5lcmF0ZWQgYnkgdHlwZXNsb3RzLnB5ICRSZXZpc2lvbiQgKi8iKQorcmVzID0ge30KK2ZvciBsaW5lIGluIHN5cy5zdGRpbjoKKyAgICBtID0gcmUubWF0Y2goIiNkZWZpbmUgUHlfKFthLXpfXSspIChbMC05XSspIiwgbGluZSkKKyAgICBpZiBub3QgbToKKyAgICAgICAgY29udGludWUKKyAgICBtZW1iZXIgPSBtLmdyb3VwKDEpCisgICAgaWYgbWVtYmVyLnN0YXJ0c3dpdGgoInRwXyIpOgorICAgICAgICBtZW1iZXIgPSAiaHRfdHlwZS4iK21lbWJlcgorICAgIGVsaWYgbWVtYmVyLnN0YXJ0c3dpdGgoIm5iXyIpOgorICAgICAgICBtZW1iZXIgPSAiYXNfbnVtYmVyLiIrbWVtYmVyCisgICAgZWxpZiBtZW1iZXIuc3RhcnRzd2l0aCgibXBfIik6CisgICAgICAgIG1lbWJlciA9ICJhc19tYXBwaW5nLiIrbWVtYmVyCisgICAgZWxpZiBtZW1iZXIuc3RhcnRzd2l0aCgic3FfIik6CisgICAgICAgIG1lbWJlciA9ICJhc19zZXF1ZW5jZS4iK21lbWJlcgorICAgIGVsaWYgbWVtYmVyLnN0YXJ0c3dpdGgoImJmXyIpOgorICAgICAgICBtZW1iZXIgPSAiYXNfYnVmZmVyLiIrbWVtYmVyCisgICAgcmVzW2ludChtLmdyb3VwKDIpKV0gPSBtZW1iZXIKKworTSA9IG1heChyZXMua2V5cygpKSsxCitmb3IgaSBpbiByYW5nZSgxLE0pOgorICAgIGlmIGkgaW4gcmVzOgorICAgICAgICBwcmludCgib2Zmc2V0b2YoUHlIZWFwVHlwZU9iamVjdCwgJXMpLCIgJSByZXNbaV0pCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIjAsIikKZGlmZiAtLWdpdCBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCmluZGV4IDE1OTdiYmQuLjlmNmFjODkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZWN0eXBlLmMKKysrIGIvT2JqZWN0cy91bmljb2RlY3R5cGUuYwpAQCAtOSw3ICs5LDYgQEAKICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJ1bmljb2Rlb2JqZWN0LmgiCiAKICNkZWZpbmUgQUxQSEFfTUFTSyAweDAxCiAjZGVmaW5lIERFQ0lNQUxfTUFTSyAweDAyCkBAIC0yMywxMSArMjIsMTIgQEAKICNkZWZpbmUgWElEX0NPTlRJTlVFX01BU0sgMHgyMDAKICNkZWZpbmUgUFJJTlRBQkxFX01BU0sgMHg0MDAKICNkZWZpbmUgTk9ERUxUQV9NQVNLIDB4ODAwCisjZGVmaW5lIE5VTUVSSUNfTUFTSyAweDEwMDAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNvbnN0IFB5X1VOSUNPREUgdXBwZXI7Ci0gICAgY29uc3QgUHlfVU5JQ09ERSBsb3dlcjsKLSAgICBjb25zdCBQeV9VTklDT0RFIHRpdGxlOworICAgIGNvbnN0IFB5X1VDUzQgdXBwZXI7CisgICAgY29uc3QgUHlfVUNTNCBsb3dlcjsKKyAgICBjb25zdCBQeV9VQ1M0IHRpdGxlOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgZGVjaW1hbDsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIGRpZ2l0OwogICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGZsYWdzOwpAQCAtMzYsMTUgKzM2LDEzIEBACiAjaW5jbHVkZSAidW5pY29kZXR5cGVfZGIuaCIKIAogc3RhdGljIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqCi1nZXR0eXBlcmVjb3JkKFB5X1VOSUNPREUgY29kZSkKK2dldHR5cGVyZWNvcmQoUHlfVUNTNCBjb2RlKQogewogICAgIGludCBpbmRleDsKIAotI2lmZGVmIFB5X1VOSUNPREVfV0lERQogICAgIGlmIChjb2RlID49IDB4MTEwMDAwKQogICAgICAgICBpbmRleCA9IDA7CiAgICAgZWxzZQotI2VuZGlmCiAgICAgewogICAgICAgICBpbmRleCA9IGluZGV4MVsoY29kZT4+U0hJRlQpXTsKICAgICAgICAgaW5kZXggPSBpbmRleDJbKGluZGV4PDxTSElGVCkrKGNvZGUmKCgxPDxTSElGVCktMSkpXTsKQEAgLTUzLDMwICs1MSwxMCBAQAogICAgIHJldHVybiAmX1B5VW5pY29kZV9UeXBlUmVjb3Jkc1tpbmRleF07CiB9CiAKLS8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgY2F0ZWdvcnkgJ1psJywgJ1pwJyBvcgotICAgdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiAqLwotCi1pbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VTklDT0RFIGNoKQotewotICAgIHN3aXRjaCAoY2gpIHsKLSAgICBjYXNlIDB4MDAwQTogLyogTElORSBGRUVEICovCi0gICAgY2FzZSAweDAwMEQ6IC8qIENBUlJJQUdFIFJFVFVSTiAqLwotICAgIGNhc2UgMHgwMDFDOiAvKiBGSUxFIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFEOiAvKiBHUk9VUCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDAxRTogLyogUkVDT1JEIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDg1OiAvKiBORVhUIExJTkUgKi8KLSAgICBjYXNlIDB4MjAyODogLyogTElORSBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MjAyOTogLyogUEFSQUdSQVBIIFNFUEFSQVRPUiAqLwotICAgICAgICByZXR1cm4gMTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19Ci0KIC8qIFJldHVybnMgdGhlIHRpdGxlY2FzZSBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBjaCBvciBqdXN0CiAgICBjaCBpZiBubyB0aXRsZWNhc2UgbWFwcGluZyBpcyBrbm93bi4gKi8KIAotUHlfVU5JQ09ERSBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKHJlZ2lzdGVyIFB5X1VOSUNPREUgY2gpCitQeV9VQ1M0IF9QeVVuaWNvZGVfVG9UaXRsZWNhc2UocmVnaXN0ZXIgUHlfVUNTNCBjaCkKIHsKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAgICAgaW50IGRlbHRhID0gY3R5cGUtPnRpdGxlOwpAQCAtOTMsNyArNzEsNyBAQAogLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBjYXRlZ29yeSAnTHQnLCAwCiAgICBvdGhlcndpc2UuICovCiAKLWludCBfUHlVbmljb2RlX0lzVGl0bGVjYXNlKFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1RpdGxlY2FzZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIApAQCAtMTAzLDcgKzgxLDcgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgWElEX1N0YXJ0IHByb3BlcnR5LCAwCiAgICBvdGhlcndpc2UuICovCiAKLWludCBfUHlVbmljb2RlX0lzWGlkU3RhcnQoUHlfVU5JQ09ERSBjaCkKK2ludCBfUHlVbmljb2RlX0lzWGlkU3RhcnQoUHlfVUNTNCBjaCkKIHsKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAKQEAgLTExMyw3ICs5MSw3IEBACiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIFhJRF9Db250aW51ZSBwcm9wZXJ0eSwKICAgIDAgb3RoZXJ3aXNlLiAqLwogCi1pbnQgX1B5VW5pY29kZV9Jc1hpZENvbnRpbnVlKFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1hpZENvbnRpbnVlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCkBAIC0xMjMsMTQgKzEwMSwxNCBAQAogLyogUmV0dXJucyB0aGUgaW50ZWdlciBkZWNpbWFsICgwLTkpIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nCiAgICB0aGlzIHByb3BlcnR5LCAtMSBvdGhlcndpc2UuICovCiAKLWludCBfUHlVbmljb2RlX1RvRGVjaW1hbERpZ2l0KFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Ub0RlY2ltYWxEaWdpdChQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIAogICAgIHJldHVybiAoY3R5cGUtPmZsYWdzICYgREVDSU1BTF9NQVNLKSA/IGN0eXBlLT5kZWNpbWFsIDogLTE7CiB9CiAKLWludCBfUHlVbmljb2RlX0lzRGVjaW1hbERpZ2l0KFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc0RlY2ltYWxEaWdpdChQeV9VQ1M0IGNoKQogewogICAgIGlmIChfUHlVbmljb2RlX1RvRGVjaW1hbERpZ2l0KGNoKSA8IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTQwLDE0ICsxMTgsMTQgQEAKIC8qIFJldHVybnMgdGhlIGludGVnZXIgZGlnaXQgKDAtOSkgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcKICAgIHRoaXMgcHJvcGVydHksIC0xIG90aGVyd2lzZS4gKi8KIAotaW50IF9QeVVuaWNvZGVfVG9EaWdpdChQeV9VTklDT0RFIGNoKQoraW50IF9QeVVuaWNvZGVfVG9EaWdpdChQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIAogICAgIHJldHVybiAoY3R5cGUtPmZsYWdzICYgRElHSVRfTUFTSykgPyBjdHlwZS0+ZGlnaXQgOiAtMTsKIH0KIAotaW50IF9QeVVuaWNvZGVfSXNEaWdpdChQeV9VTklDT0RFIGNoKQoraW50IF9QeVVuaWNvZGVfSXNEaWdpdChQeV9VQ1M0IGNoKQogewogICAgIGlmIChfUHlVbmljb2RlX1RvRGlnaXQoY2gpIDwgMCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTcsNTIyICsxMzUsMTEgQEAKIC8qIFJldHVybnMgdGhlIG51bWVyaWMgdmFsdWUgYXMgZG91YmxlIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nCiAgICB0aGlzIHByb3BlcnR5LCAtMS4wIG90aGVyd2lzZS4gKi8KIAotLyogVE9ETzogcmVwbGFjZSB3aXRoIHVuaWNvZGV0eXBlX2RiLmggdGFibGUgKi8KLQotZG91YmxlIF9QeVVuaWNvZGVfVG9OdW1lcmljKFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc051bWVyaWMoUHlfVUNTNCBjaCkKIHsKLSAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgY2FzZSAweDBGMzM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAtMSAvIDI7Ci0gICAgY2FzZSAweDE3RjA6Ci0gICAgY2FzZSAweDMwMDc6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMThBOgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSAwOwotICAgIGNhc2UgMHgwOUY0OgotICAgIGNhc2UgMHgxN0YxOgotICAgIGNhc2UgMHgyMTVGOgotICAgIGNhc2UgMHgyMTYwOgotICAgIGNhc2UgMHgyMTcwOgotICAgIGNhc2UgMHgzMDIxOgotICAgIGNhc2UgMHgzMTkyOgotICAgIGNhc2UgMHgzMjIwOgotICAgIGNhc2UgMHgzMjgwOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwNzoKLSAgICBjYXNlIDB4MTAxNDI6Ci0gICAgY2FzZSAweDEwMTU4OgotICAgIGNhc2UgMHgxMDE1OToKLSAgICBjYXNlIDB4MTAxNUE6Ci0gICAgY2FzZSAweDEwMzIwOgotICAgIGNhc2UgMHgxMDNEMToKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTsKLSAgICBjYXNlIDB4MDBCRDoKLSAgICBjYXNlIDB4MEYyQToKLSAgICBjYXNlIDB4MkNGRDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxNDE6Ci0gICAgY2FzZSAweDEwMTc1OgotICAgIGNhc2UgMHgxMDE3NjoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDI7Ci0gICAgY2FzZSAweDIxNTM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxIC8gMzsKLSAgICBjYXNlIDB4MDBCQzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxNDA6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDEgLyA0OwotICAgIGNhc2UgMHgyMTU1OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMSAvIDU7Ci0gICAgY2FzZSAweDIxNTk6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxIC8gNjsKLSAgICBjYXNlIDB4MjE1QjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDEgLyA4OwotICAgIGNhc2UgMHgwQkYwOgotICAgIGNhc2UgMHgxMzcyOgotICAgIGNhc2UgMHgyMTY5OgotICAgIGNhc2UgMHgyMTc5OgotICAgIGNhc2UgMHgyNDY5OgotICAgIGNhc2UgMHgyNDdEOgotICAgIGNhc2UgMHgyNDkxOgotICAgIGNhc2UgMHgyNEZFOgotICAgIGNhc2UgMHgyNzdGOgotICAgIGNhc2UgMHgyNzg5OgotICAgIGNhc2UgMHgyNzkzOgotICAgIGNhc2UgMHgzMDM4OgotICAgIGNhc2UgMHgzMjI5OgotICAgIGNhc2UgMHgzMjg5OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMDoKLSAgICBjYXNlIDB4MTAxNDk6Ci0gICAgY2FzZSAweDEwMTUwOgotICAgIGNhc2UgMHgxMDE1NzoKLSAgICBjYXNlIDB4MTAxNjA6Ci0gICAgY2FzZSAweDEwMTYxOgotICAgIGNhc2UgMHgxMDE2MjoKLSAgICBjYXNlIDB4MTAxNjM6Ci0gICAgY2FzZSAweDEwMTY0OgotICAgIGNhc2UgMHgxMDMyMjoKLSAgICBjYXNlIDB4MTAzRDM6Ci0gICAgY2FzZSAweDEwQTQ0OgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSAxMDsKLSAgICBjYXNlIDB4MEJGMToKLSAgICBjYXNlIDB4MTM3QjoKLSAgICBjYXNlIDB4MjE2RDoKLSAgICBjYXNlIDB4MjE3RDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMTk6Ci0gICAgY2FzZSAweDEwMTRCOgotICAgIGNhc2UgMHgxMDE1MjoKLSAgICBjYXNlIDB4MTAxNkE6Ci0gICAgY2FzZSAweDEwM0Q1OgotICAgIGNhc2UgMHgxMEE0NjoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwOwotICAgIGNhc2UgMHgwQkYyOgotICAgIGNhc2UgMHgyMTZGOgotICAgIGNhc2UgMHgyMTdGOgotICAgIGNhc2UgMHgyMTgwOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEyMjoKLSAgICBjYXNlIDB4MTAxNEQ6Ci0gICAgY2FzZSAweDEwMTU0OgotICAgIGNhc2UgMHgxMDE3MToKLSAgICBjYXNlIDB4MTBBNDc6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDA7Ci0gICAgY2FzZSAweDEzN0M6Ci0gICAgY2FzZSAweDIxODI6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTJCOgotICAgIGNhc2UgMHgxMDE1NToKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDA7Ci0gICAgY2FzZSAweDIxNkE6Ci0gICAgY2FzZSAweDIxN0E6Ci0gICAgY2FzZSAweDI0NkE6Ci0gICAgY2FzZSAweDI0N0U6Ci0gICAgY2FzZSAweDI0OTI6Ci0gICAgY2FzZSAweDI0RUI6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxMTsKLSAgICBjYXNlIDB4MEYyRjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDExIC8gMjsKLSAgICBjYXNlIDB4MjE2QjoKLSAgICBjYXNlIDB4MjE3QjoKLSAgICBjYXNlIDB4MjQ2QjoKLSAgICBjYXNlIDB4MjQ3RjoKLSAgICBjYXNlIDB4MjQ5MzoKLSAgICBjYXNlIDB4MjRFQzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDEyOwotICAgIGNhc2UgMHgyNDZDOgotICAgIGNhc2UgMHgyNDgwOgotICAgIGNhc2UgMHgyNDk0OgotICAgIGNhc2UgMHgyNEVEOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTM7Ci0gICAgY2FzZSAweDBGMzA6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxMyAvIDI7Ci0gICAgY2FzZSAweDI0NkQ6Ci0gICAgY2FzZSAweDI0ODE6Ci0gICAgY2FzZSAweDI0OTU6Ci0gICAgY2FzZSAweDI0RUU6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxNDsKLSAgICBjYXNlIDB4MjQ2RToKLSAgICBjYXNlIDB4MjQ4MjoKLSAgICBjYXNlIDB4MjQ5NjoKLSAgICBjYXNlIDB4MjRFRjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDE1OwotICAgIGNhc2UgMHgwRjMxOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTUgLyAyOwotICAgIGNhc2UgMHgwOUY5OgotICAgIGNhc2UgMHgyNDZGOgotICAgIGNhc2UgMHgyNDgzOgotICAgIGNhc2UgMHgyNDk3OgotICAgIGNhc2UgMHgyNEYwOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTY7Ci0gICAgY2FzZSAweDE2RUU6Ci0gICAgY2FzZSAweDI0NzA6Ci0gICAgY2FzZSAweDI0ODQ6Ci0gICAgY2FzZSAweDI0OTg6Ci0gICAgY2FzZSAweDI0RjE6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAxNzsKLSAgICBjYXNlIDB4MEYzMjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDE3IC8gMjsKLSAgICBjYXNlIDB4MTZFRjoKLSAgICBjYXNlIDB4MjQ3MToKLSAgICBjYXNlIDB4MjQ4NToKLSAgICBjYXNlIDB4MjQ5OToKLSAgICBjYXNlIDB4MjRGMjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDE4OwotICAgIGNhc2UgMHgxNkYwOgotICAgIGNhc2UgMHgyNDcyOgotICAgIGNhc2UgMHgyNDg2OgotICAgIGNhc2UgMHgyNDlBOgotICAgIGNhc2UgMHgyNEYzOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTk7Ci0gICAgY2FzZSAweDA5RjU6Ci0gICAgY2FzZSAweDE3RjI6Ci0gICAgY2FzZSAweDIxNjE6Ci0gICAgY2FzZSAweDIxNzE6Ci0gICAgY2FzZSAweDMwMjI6Ci0gICAgY2FzZSAweDMxOTM6Ci0gICAgY2FzZSAweDMyMjE6Ci0gICAgY2FzZSAweDMyODE6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTA4OgotICAgIGNhc2UgMHgxMDE1QjoKLSAgICBjYXNlIDB4MTAxNUM6Ci0gICAgY2FzZSAweDEwMTVEOgotICAgIGNhc2UgMHgxMDE1RToKLSAgICBjYXNlIDB4MTAzRDI6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDI7Ci0gICAgY2FzZSAweDIxNTQ6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTc3OgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSAyIC8gMzsKLSAgICBjYXNlIDB4MjE1NjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDIgLyA1OwotICAgIGNhc2UgMHgxMzczOgotICAgIGNhc2UgMHgyNDczOgotICAgIGNhc2UgMHgyNDg3OgotICAgIGNhc2UgMHgyNDlCOgotICAgIGNhc2UgMHgyNEY0OgotICAgIGNhc2UgMHgzMDM5OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMToKLSAgICBjYXNlIDB4MTAzRDQ6Ci0gICAgY2FzZSAweDEwQTQ1OgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSAyMDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUE6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAyMDA7Ci0gICAgY2FzZSAweDEwMTIzOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMDsKLSAgICBjYXNlIDB4MTAxMkM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAyMDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgzMjUxOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjE7Ci0gICAgY2FzZSAweDMyNTI6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAyMjsKLSAgICBjYXNlIDB4MzI1MzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDIzOwotICAgIGNhc2UgMHgzMjU0OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjQ7Ci0gICAgY2FzZSAweDMyNTU6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAyNTsKLSAgICBjYXNlIDB4MzI1NjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDI2OwotICAgIGNhc2UgMHgzMjU3OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjc7Ci0gICAgY2FzZSAweDMyNTg6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAyODsKLSAgICBjYXNlIDB4MzI1OToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDI5OwotICAgIGNhc2UgMHgwOUY2OgotICAgIGNhc2UgMHgxN0YzOgotICAgIGNhc2UgMHgyMTYyOgotICAgIGNhc2UgMHgyMTcyOgotICAgIGNhc2UgMHgzMDIzOgotICAgIGNhc2UgMHgzMTk0OgotICAgIGNhc2UgMHgzMjIyOgotICAgIGNhc2UgMHgzMjgyOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwOToKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzsKLSAgICBjYXNlIDB4MEYyQjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDMgLyAyOwotICAgIGNhc2UgMHgwMEJFOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDE3ODoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMyAvIDQ7Ci0gICAgY2FzZSAweDIxNTc6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzIC8gNTsKLSAgICBjYXNlIDB4MjE1QzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDMgLyA4OwotICAgIGNhc2UgMHgxMzc0OgotICAgIGNhc2UgMHgzMDNBOgotICAgIGNhc2UgMHgzMjVBOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMjoKLSAgICBjYXNlIDB4MTAxNjU6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwOwotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExQjoKLSAgICBjYXNlIDB4MTAxNkI6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzMDA7Ci0gICAgY2FzZSAweDEwMTI0OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwMDsKLSAgICBjYXNlIDB4MTAxMkQ6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzMDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgzMjVCOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzE7Ci0gICAgY2FzZSAweDMyNUM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzMjsKLSAgICBjYXNlIDB4MzI1RDoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDMzOwotICAgIGNhc2UgMHgzMjVFOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzQ7Ci0gICAgY2FzZSAweDMyNUY6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzNTsKLSAgICBjYXNlIDB4MzJCMToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDM2OwotICAgIGNhc2UgMHgzMkIyOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzc7Ci0gICAgY2FzZSAweDMyQjM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSAzODsKLSAgICBjYXNlIDB4MzJCNDoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDM5OwotICAgIGNhc2UgMHgwOUY3OgotICAgIGNhc2UgMHgxN0Y0OgotICAgIGNhc2UgMHgyMTYzOgotICAgIGNhc2UgMHgyMTczOgotICAgIGNhc2UgMHgzMDI0OgotICAgIGNhc2UgMHgzMTk1OgotICAgIGNhc2UgMHgzMjIzOgotICAgIGNhc2UgMHgzMjgzOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwQToKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDsKLSAgICBjYXNlIDB4MjE1ODoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDQgLyA1OwotICAgIGNhc2UgMHgxMzc1OgotICAgIGNhc2UgMHgzMkI1OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExMzoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFDOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwOwotICAgIGNhc2UgMHgxMDEyNToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwMDA7Ci0gICAgY2FzZSAweDEwMTJFOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MzJCNjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDQxOwotICAgIGNhc2UgMHgzMkI3OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDI7Ci0gICAgY2FzZSAweDMyQjg6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA0MzsKLSAgICBjYXNlIDB4MzJCOToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ0OwotICAgIGNhc2UgMHgzMkJBOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDU7Ci0gICAgY2FzZSAweDMyQkI6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA0NjsKLSAgICBjYXNlIDB4MzJCQzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ3OwotICAgIGNhc2UgMHgzMkJEOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDg7Ci0gICAgY2FzZSAweDMyQkU6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA0OTsKLSAgICBjYXNlIDB4MTdGNToKLSAgICBjYXNlIDB4MjE2NDoKLSAgICBjYXNlIDB4MjE3NDoKLSAgICBjYXNlIDB4MzAyNToKLSAgICBjYXNlIDB4MzIyNDoKLSAgICBjYXNlIDB4MzI4NDoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEI6Ci0gICAgY2FzZSAweDEwMTQzOgotICAgIGNhc2UgMHgxMDE0ODoKLSAgICBjYXNlIDB4MTAxNEY6Ci0gICAgY2FzZSAweDEwMTVGOgotICAgIGNhc2UgMHgxMDE3MzoKLSAgICBjYXNlIDB4MTAzMjE6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDU7Ci0gICAgY2FzZSAweDBGMkM6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA1IC8gMjsKLSAgICBjYXNlIDB4MjE1QToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDUgLyA2OwotICAgIGNhc2UgMHgyMTVEOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNSAvIDg7Ci0gICAgY2FzZSAweDEzNzY6Ci0gICAgY2FzZSAweDIxNkM6Ci0gICAgY2FzZSAweDIxN0M6Ci0gICAgY2FzZSAweDMyQkY6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE0OgotICAgIGNhc2UgMHgxMDE0NDoKLSAgICBjYXNlIDB4MTAxNEE6Ci0gICAgY2FzZSAweDEwMTUxOgotICAgIGNhc2UgMHgxMDE2NjoKLSAgICBjYXNlIDB4MTAxNjc6Ci0gICAgY2FzZSAweDEwMTY4OgotICAgIGNhc2UgMHgxMDE2OToKLSAgICBjYXNlIDB4MTAxNzQ6Ci0gICAgY2FzZSAweDEwMzIzOgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSA1MDsKLSAgICBjYXNlIDB4MjE2RToKLSAgICBjYXNlIDB4MjE3RToKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMUQ6Ci0gICAgY2FzZSAweDEwMTQ1OgotICAgIGNhc2UgMHgxMDE0QzoKLSAgICBjYXNlIDB4MTAxNTM6Ci0gICAgY2FzZSAweDEwMTZDOgotICAgIGNhc2UgMHgxMDE2RDoKLSAgICBjYXNlIDB4MTAxNkU6Ci0gICAgY2FzZSAweDEwMTZGOgotICAgIGNhc2UgMHgxMDE3MDoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNTAwOwotICAgIGNhc2UgMHgyMTgxOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEyNjoKLSAgICBjYXNlIDB4MTAxNDY6Ci0gICAgY2FzZSAweDEwMTRFOgotICAgIGNhc2UgMHgxMDE3MjoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNTAwMDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMkY6Ci0gICAgY2FzZSAweDEwMTQ3OgotICAgIGNhc2UgMHgxMDE1NjoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAwOwotI2VuZGlmCi0gICAgY2FzZSAweDE3RjY6Ci0gICAgY2FzZSAweDIxNjU6Ci0gICAgY2FzZSAweDIxNzU6Ci0gICAgY2FzZSAweDMwMjY6Ci0gICAgY2FzZSAweDMyMjU6Ci0gICAgY2FzZSAweDMyODU6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTBDOgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSA2OwotICAgIGNhc2UgMHgxMzc3OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExNToKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFFOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAwOwotICAgIGNhc2UgMHgxMDEyNzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDYwMDA7Ci0gICAgY2FzZSAweDEwMTMwOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGNzoKLSAgICBjYXNlIDB4MjE2NjoKLSAgICBjYXNlIDB4MjE3NjoKLSAgICBjYXNlIDB4MzAyNzoKLSAgICBjYXNlIDB4MzIyNjoKLSAgICBjYXNlIDB4MzI4NjoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEQ6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDc7Ci0gICAgY2FzZSAweDBGMkQ6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA3IC8gMjsKLSAgICBjYXNlIDB4MjE1RToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDcgLyA4OwotICAgIGNhc2UgMHgxMzc4OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExNjoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTFGOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzAwOwotICAgIGNhc2UgMHgxMDEyODoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMDA7Ci0gICAgY2FzZSAweDEwMTMxOgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgNzAwMDA7Ci0jZW5kaWYKLSAgICBjYXNlIDB4MTdGODoKLSAgICBjYXNlIDB4MjE2NzoKLSAgICBjYXNlIDB4MjE3NzoKLSAgICBjYXNlIDB4MzAyODoKLSAgICBjYXNlIDB4MzIyNzoKLSAgICBjYXNlIDB4MzI4NzoKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMEU6Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDg7Ci0gICAgY2FzZSAweDEzNzk6Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTE3OgotI2VuZGlmCi0gICAgICAgIHJldHVybiAoZG91YmxlKSA4MDsKLSNpZmRlZiBQeV9VTklDT0RFX1dJREUKLSAgICBjYXNlIDB4MTAxMjA6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA4MDA7Ci0gICAgY2FzZSAweDEwMTI5OgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgODAwMDsKLSAgICBjYXNlIDB4MTAxMzI6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA4MDAwMDsKLSNlbmRpZgotICAgIGNhc2UgMHgxN0Y5OgotICAgIGNhc2UgMHgyMTY4OgotICAgIGNhc2UgMHgyMTc4OgotICAgIGNhc2UgMHgzMDI5OgotICAgIGNhc2UgMHgzMjI4OgotICAgIGNhc2UgMHgzMjg4OgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDEwRjoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTsKLSAgICBjYXNlIDB4MEYyRToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDkgLyAyOwotICAgIGNhc2UgMHgxMzdBOgotI2lmZGVmIFB5X1VOSUNPREVfV0lERQotICAgIGNhc2UgMHgxMDExODoKLSNlbmRpZgotICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTA7Ci0jaWZkZWYgUHlfVU5JQ09ERV9XSURFCi0gICAgY2FzZSAweDEwMTIxOgotICAgIGNhc2UgMHgxMDM0QToKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDkwMDsKLSAgICBjYXNlIDB4MTAxMkE6Ci0gICAgICAgIHJldHVybiAoZG91YmxlKSA5MDAwOwotICAgIGNhc2UgMHgxMDEzMzoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIDkwMDAwOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIF9QeVVuaWNvZGVfVG9EaWdpdChjaCk7Ci0gICAgfQotfQorICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIAotaW50IF9QeVVuaWNvZGVfSXNOdW1lcmljKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgcmV0dXJuIF9QeVVuaWNvZGVfVG9OdW1lcmljKGNoKSAhPSAtMS4wOworICAgIHJldHVybiAoY3R5cGUtPmZsYWdzICYgTlVNRVJJQ19NQVNLKSAhPSAwOwogfQogCiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyB0byBiZSBoZXgtZXNjYXBlZCB3aGVuIHJlcHIoKWVkLApAQCAtNjg4LDYxICsxNTUsMTcgQEAKICAgICAgICogWnAgU2VwYXJhdG9yLCBQYXJhZ3JhcGggKCdcdTIwMjknLCBQQVJBR1JBUEggU0VQQVJBVE9SKQogICAgICAgKiBacyAoU2VwYXJhdG9yLCBTcGFjZSkgb3RoZXIgdGhhbiBBU0NJSSBzcGFjZSgnXHgyMCcpLgogKi8KLWludCBfUHlVbmljb2RlX0lzUHJpbnRhYmxlKFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc1ByaW50YWJsZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKIAogICAgIHJldHVybiAoY3R5cGUtPmZsYWdzICYgUFJJTlRBQkxFX01BU0spICE9IDA7CiB9CiAKLSNpZm5kZWYgV0FOVF9XQ1RZUEVfRlVOQ1RJT05TCi0KLS8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgYmlkaXJlY3Rpb25hbCB0eXBlCi0gICAnV1MnLCAnQicgb3IgJ1MnIG9yIHRoZSBjYXRlZ29yeSAnWnMnLCAwIG90aGVyd2lzZS4gKi8KLQotaW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgY2gpCi17Ci0gICAgc3dpdGNoIChjaCkgewotICAgIGNhc2UgMHgwMDA5OiAvKiBIT1JJWk9OVEFMIFRBQlVMQVRJT04gKi8KLSAgICBjYXNlIDB4MDAwQTogLyogTElORSBGRUVEICovCi0gICAgY2FzZSAweDAwMEI6IC8qIFZFUlRJQ0FMIFRBQlVMQVRJT04gKi8KLSAgICBjYXNlIDB4MDAwQzogLyogRk9STSBGRUVEICovCi0gICAgY2FzZSAweDAwMEQ6IC8qIENBUlJJQUdFIFJFVFVSTiAqLwotICAgIGNhc2UgMHgwMDFDOiAvKiBGSUxFIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFEOiAvKiBHUk9VUCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MDAxRTogLyogUkVDT1JEIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDFGOiAvKiBVTklUIFNFUEFSQVRPUiAqLwotICAgIGNhc2UgMHgwMDIwOiAvKiBTUEFDRSAqLwotICAgIGNhc2UgMHgwMDg1OiAvKiBORVhUIExJTkUgKi8KLSAgICBjYXNlIDB4MDBBMDogLyogTk8tQlJFQUsgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MTY4MDogLyogT0dIQU0gU1BBQ0UgTUFSSyAqLwotICAgIGNhc2UgMHgyMDAwOiAvKiBFTiBRVUFEICovCi0gICAgY2FzZSAweDIwMDE6IC8qIEVNIFFVQUQgKi8KLSAgICBjYXNlIDB4MjAwMjogLyogRU4gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwMzogLyogRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNDogLyogVEhSRUUtUEVSLUVNIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDU6IC8qIEZPVVItUEVSLUVNIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDY6IC8qIFNJWC1QRVItRU0gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwNzogLyogRklHVVJFIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDg6IC8qIFBVTkNUVUFUSU9OIFNQQUNFICovCi0gICAgY2FzZSAweDIwMDk6IC8qIFRISU4gU1BBQ0UgKi8KLSAgICBjYXNlIDB4MjAwQTogLyogSEFJUiBTUEFDRSAqLwotICAgIGNhc2UgMHgyMDBCOiAvKiBaRVJPIFdJRFRIIFNQQUNFICovCi0gICAgY2FzZSAweDIwMjg6IC8qIExJTkUgU0VQQVJBVE9SICovCi0gICAgY2FzZSAweDIwMjk6IC8qIFBBUkFHUkFQSCBTRVBBUkFUT1IgKi8KLSAgICBjYXNlIDB4MjAyRjogLyogTkFSUk9XIE5PLUJSRUFLIFNQQUNFICovCi0gICAgY2FzZSAweDIwNUY6IC8qIE1FRElVTSBNQVRIRU1BVElDQUwgU1BBQ0UgKi8KLSAgICBjYXNlIDB4MzAwMDogLyogSURFT0dSQVBISUMgU1BBQ0UgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQotCiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGNhdGVnb3J5ICdMbCcsIDAKICAgIG90aGVyd2lzZS4gKi8KIAotaW50IF9QeVVuaWNvZGVfSXNMb3dlcmNhc2UoUHlfVU5JQ09ERSBjaCkKK2ludCBfUHlVbmljb2RlX0lzTG93ZXJjYXNlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCkBAIC03NTIsNyArMTc1LDcgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgY2F0ZWdvcnkgJ0x1JywgMAogICAgb3RoZXJ3aXNlLiAqLwogCi1pbnQgX1B5VW5pY29kZV9Jc1VwcGVyY2FzZShQeV9VTklDT0RFIGNoKQoraW50IF9QeVVuaWNvZGVfSXNVcHBlcmNhc2UoUHlfVUNTNCBjaCkKIHsKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAKQEAgLTc2Miw3ICsxODUsNyBAQAogLyogUmV0dXJucyB0aGUgdXBwZXJjYXNlIFVuaWNvZGUgY2hhcmFjdGVycyBjb3JyZXNwb25kaW5nIHRvIGNoIG9yIGp1c3QKICAgIGNoIGlmIG5vIHVwcGVyY2FzZSBtYXBwaW5nIGlzIGtub3duLiAqLwogCi1QeV9VTklDT0RFIF9QeVVuaWNvZGVfVG9VcHBlcmNhc2UoUHlfVU5JQ09ERSBjaCkKK1B5X1VDUzQgX1B5VW5pY29kZV9Ub1VwcGVyY2FzZShQeV9VQ1M0IGNoKQogewogICAgIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCAqY3R5cGUgPSBnZXR0eXBlcmVjb3JkKGNoKTsKICAgICBpbnQgZGVsdGEgPSBjdHlwZS0+dXBwZXI7CkBAIC03NzYsNyArMTk5LDcgQEAKIC8qIFJldHVybnMgdGhlIGxvd2VyY2FzZSBVbmljb2RlIGNoYXJhY3RlcnMgY29ycmVzcG9uZGluZyB0byBjaCBvciBqdXN0CiAgICBjaCBpZiBubyBsb3dlcmNhc2UgbWFwcGluZyBpcyBrbm93bi4gKi8KIAotUHlfVU5JQ09ERSBfUHlVbmljb2RlX1RvTG93ZXJjYXNlKFB5X1VOSUNPREUgY2gpCitQeV9VQ1M0IF9QeVVuaWNvZGVfVG9Mb3dlcmNhc2UoUHlfVUNTNCBjaCkKIHsKICAgICBjb25zdCBfUHlVbmljb2RlX1R5cGVSZWNvcmQgKmN0eXBlID0gZ2V0dHlwZXJlY29yZChjaCk7CiAgICAgaW50IGRlbHRhID0gY3R5cGUtPmxvd2VyOwpAQCAtNzkwLDQ2ICsyMTMsMTAgQEAKIC8qIFJldHVybnMgMSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzIGhhdmluZyB0aGUgY2F0ZWdvcnkgJ0xsJywgJ0x1JywgJ0x0JywKICAgICdMbycgb3IgJ0xtJywgIDAgb3RoZXJ3aXNlLiAqLwogCi1pbnQgX1B5VW5pY29kZV9Jc0FscGhhKFB5X1VOSUNPREUgY2gpCitpbnQgX1B5VW5pY29kZV9Jc0FscGhhKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCiAgICAgcmV0dXJuIChjdHlwZS0+ZmxhZ3MgJiBBTFBIQV9NQVNLKSAhPSAwOwogfQogCi0jZWxzZQotCi0vKiBFeHBvcnQgdGhlIGludGVyZmFjZXMgdXNpbmcgdGhlIHdjaGFyX3QgdHlwZSBmb3IgcG9ydGFiaWxpdHkKLSAgIHJlYXNvbnM6ICAqLwotCi1pbnQgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoUHlfVU5JQ09ERSBjaCkKLXsKLSAgICByZXR1cm4gaXN3c3BhY2UoY2gpOwotfQotCi1pbnQgX1B5VW5pY29kZV9Jc0xvd2VyY2FzZShQeV9VTklDT0RFIGNoKQotewotICAgIHJldHVybiBpc3dsb3dlcihjaCk7Ci19Ci0KLWludCBfUHlVbmljb2RlX0lzVXBwZXJjYXNlKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgcmV0dXJuIGlzd3VwcGVyKGNoKTsKLX0KLQotUHlfVU5JQ09ERSBfUHlVbmljb2RlX1RvTG93ZXJjYXNlKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgcmV0dXJuIHRvd2xvd2VyKGNoKTsKLX0KLQotUHlfVU5JQ09ERSBfUHlVbmljb2RlX1RvVXBwZXJjYXNlKFB5X1VOSUNPREUgY2gpCi17Ci0gICAgcmV0dXJuIHRvd3VwcGVyKGNoKTsKLX0KLQotaW50IF9QeVVuaWNvZGVfSXNBbHBoYShQeV9VTklDT0RFIGNoKQotewotICAgIHJldHVybiBpc3dhbHBoYShjaCk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2Rlb2JqZWN0LmMgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwppbmRleCAyY2RiYzBlLi43YTcwYTVlIDEwMDY0NAotLS0gYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYworKysgYi9PYmplY3RzL3VuaWNvZGVvYmplY3QuYwpAQCAtNDEsOSArNDEsNiBAQAogCiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJieXRlc19tZXRob2RzLmgiCi0KLSNpbmNsdWRlICJ1bmljb2Rlb2JqZWN0LmgiCiAjaW5jbHVkZSAidWNuaGFzaC5oIgogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMTE0LDIxICsxMTEsMTIgQEAKICAgIHNoYXJlZCBhcyB3ZWxsLiAqLwogc3RhdGljIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZV9sYXRpbjFbMjU2XTsKIAotLyogRGVmYXVsdCBlbmNvZGluZyB0byB1c2UgYW5kIGFzc3VtZSB3aGVuIE5VTEwgaXMgcGFzc2VkIGFzIGVuY29kaW5nCi0gICBwYXJhbWV0ZXI7IGl0IGlzIGZpeGVkIHRvICJ1dGYtOCIuICBBbHdheXMgdXNlIHRoZQotICAgUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpIEFQSSB0byBhY2Nlc3MgdGhpcyBnbG9iYWwuCi0KLSAgIERvbid0IGZvcmdldCB0byBhbHRlciBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIGlmIHlvdSBjaGFuZ2UgdGhlCi0gICBoYXJkIGNvZGVkIGRlZmF1bHQhCi0qLwotc3RhdGljIGNvbnN0IGNoYXIgdW5pY29kZV9kZWZhdWx0X2VuY29kaW5nW10gPSAidXRmLTgiOwotCiAvKiBGYXN0IGRldGVjdGlvbiBvZiB0aGUgbW9zdCBmcmVxdWVudCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgKi8KIGNvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X2FzY2lpX3doaXRlc3BhY2VbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotLyogICAgIGNhc2UgMHgwMDA5OiAqIEhPUklaT05UQUwgVEFCVUxBVElPTiAqLworLyogICAgIGNhc2UgMHgwMDA5OiAqIENIQVJBQ1RFUiBUQUJVTEFUSU9OICovCiAvKiAgICAgY2FzZSAweDAwMEE6ICogTElORSBGRUVEICovCi0vKiAgICAgY2FzZSAweDAwMEI6ICogVkVSVElDQUwgVEFCVUxBVElPTiAqLworLyogICAgIGNhc2UgMHgwMDBCOiAqIExJTkUgVEFCVUxBVElPTiAqLwogLyogICAgIGNhc2UgMHgwMDBDOiAqIEZPUk0gRkVFRCAqLwogLyogICAgIGNhc2UgMHgwMDBEOiAqIENBUlJJQUdFIFJFVFVSTiAqLwogICAgIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDAsCkBAIC0xNjksOCArMTU3LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgY2hhciBhc2NpaV9saW5lYnJlYWtbXSA9IHsKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogLyogICAgICAgICAweDAwMEEsICogTElORSBGRUVEICovCisvKiAgICAgICAgIDB4MDAwQiwgKiBMSU5FIFRBQlVMQVRJT04gKi8KKy8qICAgICAgICAgMHgwMDBDLCAqIEZPUk0gRkVFRCAqLwogLyogICAgICAgICAweDAwMEQsICogQ0FSUklBR0UgUkVUVVJOICovCi0gICAgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwKKyAgICAwLCAwLCAxLCAxLCAxLCAxLCAwLCAwLAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAvKiAgICAgICAgIDB4MDAxQywgKiBGSUxFIFNFUEFSQVRPUiAqLwogLyogICAgICAgICAweDAwMUQsICogR1JPVVAgU0VQQVJBVE9SICovCkBAIC0yMTIsMTEgKzIwMiwyMiBAQAogCiAvKiB0aGUgbGluZWJyZWFrIG1hc2sgaXMgc2V0IHVwIGJ5IFVuaWNvZGVfSW5pdCBiZWxvdyAqLwogCisjaWYgTE9OR19CSVQgPj0gMTI4CisjZGVmaW5lIEJMT09NX1dJRFRIIDEyOAorI2VsaWYgTE9OR19CSVQgPj0gNjQKKyNkZWZpbmUgQkxPT01fV0lEVEggNjQKKyNlbGlmIExPTkdfQklUID49IDMyCisjZGVmaW5lIEJMT09NX1dJRFRIIDMyCisjZWxzZQorI2Vycm9yICJMT05HX0JJVCBpcyBzbWFsbGVyIHRoYW4gMzIiCisjZW5kaWYKKwogI2RlZmluZSBCTE9PTV9NQVNLIHVuc2lnbmVkIGxvbmcKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrOwogCi0jZGVmaW5lIEJMT09NKG1hc2ssIGNoKSAoKG1hc2sgJiAoMSA8PCAoKGNoKSAmIDB4MUYpKSkpCisjZGVmaW5lIEJMT09NX0FERChtYXNrLCBjaCkgKChtYXNrIHw9ICgxVUwgPDwgKChjaCkgJiAoQkxPT01fV0lEVEggLSAxKSkpKSkKKyNkZWZpbmUgQkxPT00obWFzaywgY2gpICAgICAoKG1hc2sgJiAgKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogCiAjZGVmaW5lIEJMT09NX0xJTkVCUkVBSyhjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKChjaCkgPCAxMjhVID8gYXNjaWlfbGluZWJyZWFrWyhjaCldIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMjYsMTIgKzIyNywxMiBAQAogewogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCi0gICAgbG9uZyBtYXNrOworICAgIEJMT09NX01BU0sgbWFzazsKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBtYXNrID0gMDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIG1hc2sgfD0gKDEgPDwgKHB0cltpXSAmIDB4MUYpKTsKKyAgICAgICAgQkxPT01fQUREKG1hc2ssIHB0cltpXSk7CiAKICAgICByZXR1cm4gbWFzazsKIH0KQEAgLTY1MSw3ICs2NTIsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIENvcHkgdGhlIHdjaGFyX3QgZGF0YSBpbnRvIHRoZSBuZXcgb2JqZWN0ICovCi0jaWZkZWYgSEFWRV9VU0FCTEVfV0NIQVJfVAorI2lmIFB5X1VOSUNPREVfU0laRSA9PSBTSVpFT0ZfV0NIQVJfVAogICAgIG1lbWNweSh1bmljb2RlLT5zdHIsIHcsIHNpemUgKiBzaXplb2Yod2NoYXJfdCkpOwogI2Vsc2UKICAgICB7CkBAIC02NzEsNyArNjcyLDggQEAKICN1bmRlZiBDT05WRVJUX1dDSEFSX1RPX1NVUlJPR0FURVMKIAogc3RhdGljIHZvaWQKLW1ha2VmbXQoY2hhciAqZm10LCBpbnQgbG9uZ2ZsYWcsIGludCBzaXplX3RmbGFnLCBpbnQgemVyb3BhZCwgaW50IHdpZHRoLCBpbnQgcHJlY2lzaW9uLCBjaGFyIGMpCittYWtlZm10KGNoYXIgKmZtdCwgaW50IGxvbmdmbGFnLCBpbnQgbG9uZ2xvbmdmbGFnLCBpbnQgc2l6ZV90ZmxhZywKKyAgICAgICAgaW50IHplcm9wYWQsIGludCB3aWR0aCwgaW50IHByZWNpc2lvbiwgY2hhciBjKQogewogICAgICpmbXQrKyA9ICclJzsKICAgICBpZiAod2lkdGgpIHsKQEAgLTY4Myw2ICs2ODUsMTkgQEAKICAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiLiVkIiwgcHJlY2lzaW9uKTsKICAgICBpZiAobG9uZ2ZsYWcpCiAgICAgICAgICpmbXQrKyA9ICdsJzsKKyAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpIHsKKyAgICAgICAgLyogbG9uZ2xvbmdmbGFnIHNob3VsZCBvbmx5IGV2ZXIgYmUgbm9uemVybyBvbiBtYWNoaW5lcyB3aXRoCisgICAgICAgICAgIEhBVkVfTE9OR19MT05HIGRlZmluZWQgKi8KKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICBjaGFyICpmID0gUFlfRk9STUFUX0xPTkdfTE9ORzsKKyAgICAgICAgd2hpbGUgKCpmKQorICAgICAgICAgICAgKmZtdCsrID0gKmYrKzsKKyNlbHNlCisgICAgICAgIC8qIHdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCisgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgKmZtdCsrID0gJ2wnOworI2VuZGlmCisgICAgfQogICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpIHsKICAgICAgICAgY2hhciAqZiA9IFBZX0ZPUk1BVF9TSVpFX1Q7CiAgICAgICAgIHdoaWxlICgqZikKQEAgLTY5NCw2ICs3MDksMTYgQEAKIAogI2RlZmluZSBhcHBlbmRzdHJpbmcoc3RyaW5nKSB7Zm9yIChjb3B5ID0gc3RyaW5nOypjb3B5OykgKnMrKyA9ICpjb3B5Kys7fQogCisvKiBzaXplIG9mIGZpeGVkLXNpemUgYnVmZmVyIGZvciBmb3JtYXR0aW5nIHNpbmdsZSBhcmd1bWVudHMgKi8KKyNkZWZpbmUgSVRFTV9CVUZGRVJfTEVOIDIxCisvKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxkLiAgMjEgY2hhcmFjdGVycworICAgYWxsb3dzIGZvciA2NC1iaXQgaW50ZWdlcnMgKGluIGRlY2ltYWwpIGFuZCBhbiBvcHRpb25hbCBzaWduLiAqLworI2RlZmluZSBNQVhfTE9OR19DSEFSUyAyMQorLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsbGQuCisgICBXZSBuZWVkIGF0IG1vc3QgY2VpbChsb2cxMCgyNTYpKlNJWkVPRl9MT05HX0xPTkcpIGRpZ2l0cywKKyAgIHBsdXMgMSBmb3IgdGhlIHNpZ24uICA1My8yMiBpcyBhbiB1cHBlciBib3VuZCBmb3IgbG9nMTAoMjU2KS4gKi8KKyNkZWZpbmUgTUFYX0xPTkdfTE9OR19DSEFSUyAoMiArIChTSVpFT0ZfTE9OR19MT05HKjUzLTEpIC8gMjIpCisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiB7CkBAIC03MDksMjQgKzczNCwxNiBAQAogICAgIFB5X1VOSUNPREUgKnM7CiAgICAgUHlPYmplY3QgKnN0cmluZzsKICAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KLSAgICBjaGFyIGJ1ZmZlclsyMV07CisgICAgY2hhciBidWZmZXJbSVRFTV9CVUZGRVJfTEVOKzFdOwogICAgIC8qIHVzZSBhYnVmZmVyIGluc3RlYWQgb2YgYnVmZmVyLCBpZiB3ZSBuZWVkIG1vcmUgc3BhY2UKICAgICAgKiAod2hpY2ggY2FuIGhhcHBlbiBpZiB0aGVyZSdzIGEgZm9ybWF0IHNwZWNpZmllciB3aXRoIHdpZHRoKS4gKi8KICAgICBjaGFyICphYnVmZmVyID0gTlVMTDsKICAgICBjaGFyICpyZWFsYnVmZmVyOwogICAgIFB5X3NzaXplX3QgYWJ1ZmZlcnNpemUgPSAwOwotICAgIGNoYXIgZm10WzYwXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgJTB3aWR0aC5wcmVjaXNpb25sZCAqLworICAgIGNoYXIgZm10WzYxXTsgLyogc2hvdWxkIGJlIGVub3VnaCBmb3IgJTB3aWR0aC5wcmVjaXNpb25sbGQgKi8KICAgICBjb25zdCBjaGFyICpjb3B5OwogCi0jaWZkZWYgVkFfTElTVF9JU19BUlJBWQotICAgIFB5X01FTUNQWShjb3VudCwgdmFyZ3MsIHNpemVvZih2YV9saXN0KSk7Ci0jZWxzZQotI2lmZGVmICBfX3ZhX2NvcHkKLSAgICBfX3ZhX2NvcHkoY291bnQsIHZhcmdzKTsKLSNlbHNlCi0gICAgY291bnQgPSB2YXJnczsKLSNlbmRpZgotI2VuZGlmCisgICAgUHlfVkFfQ09QWShjb3VudCwgdmFyZ3MpOwogICAgIC8qIHN0ZXAgMTogY291bnQgdGhlIG51bWJlciBvZiAlUy8lUi8lQS8lcyBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKICAgICAgKiAod2UgY2FsbCBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlPYmplY3RfQVNDSUkoKS8KICAgICAgKiBQeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGZvciB0aGVzZSBvYmplY3RzIG9uY2UgZHVyaW5nIHN0ZXAgMyBhbmQgcHV0IHRoZQpAQCAtNzM1LDE1ICs3NTIsMjIgQEAKICAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKICAgICAgICAgICAgICBpZiAoKihmKzEpPT0nJScpCiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgIGlmICgqKGYrMSk9PSdTJyB8fCAqKGYrMSk9PSdSJyB8fCAqKGYrMSk9PSdBJykKKyAgICAgICAgICAgICBpZiAoKihmKzEpPT0nUycgfHwgKihmKzEpPT0nUicgfHwgKihmKzEpPT0nQScgfHwgKihmKzEpID09ICdWJykKICAgICAgICAgICAgICAgICAgKytjYWxsY291bnQ7Ci0gICAgICAgICAgICAgd2hpbGUgKElTRElHSVQoKHVuc2lnbmVkKSpmKSkKKyAgICAgICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQogICAgICAgICAgICAgICAgICB3aWR0aCA9ICh3aWR0aCoxMCkgKyAqZisrIC0gJzAnOwotICAgICAgICAgICAgIHdoaWxlICgqKytmICYmICpmICE9ICclJyAmJiAhSVNBTFBIQSgodW5zaWduZWQpKmYpKQorICAgICAgICAgICAgIHdoaWxlICgqKytmICYmICpmICE9ICclJyAmJiAhUHlfSVNBTFBIQSgodW5zaWduZWQpKmYpKQogICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgaWYgKCpmID09ICdzJykKICAgICAgICAgICAgICAgICAgKytjYWxsY291bnQ7CiAgICAgICAgICB9CisgICAgICAgICBlbHNlIGlmICgxMjggPD0gKHVuc2lnbmVkIGNoYXIpKmYpIHsKKyAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgZXhwZWN0cyBhbiBBU0NJSS1lbmNvZGVkIGZvcm1hdCAiCisgICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpKmYpOworICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgfQogICAgIH0KICAgICAvKiBzdGVwIDI6IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlc3VsdHMgb2YKICAgICAgKiBQeU9iamVjdF9TdHIoKS9QeU9iamVjdF9SZXByKCkvUHlVbmljb2RlX0RlY29kZVVURjgoKSBjYWxscyAqLwpAQCAtNzU4LDM3ICs3ODIsNzAgQEAKICAgICAvKiBzdGVwIDM6IGZpZ3VyZSBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIHdlIG5lZWQgKi8KICAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKICAgICAgICAgaWYgKCpmID09ICclJykgeworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnID0gMDsKKyNlbmRpZgogICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IGY7CiAgICAgICAgICAgICB3aWR0aCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAoSVNESUdJVCgodW5zaWduZWQpKmYpKQorICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKICAgICAgICAgICAgICAgICB3aWR0aCA9ICh3aWR0aCoxMCkgKyAqZisrIC0gJzAnOwotICAgICAgICAgICAgd2hpbGUgKCorK2YgJiYgKmYgIT0gJyUnICYmICFJU0FMUEhBKCh1bnNpZ25lZCkqZikpCisgICAgICAgICAgICB3aGlsZSAoKisrZiAmJiAqZiAhPSAnJScgJiYgIVB5X0lTQUxQSEEoKHVuc2lnbmVkKSpmKSkKICAgICAgICAgICAgICAgICA7CiAKICAgICAgICAgICAgIC8qIHNraXAgdGhlICdsJyBvciAneicgaW4geyVsZCwgJXpkLCAlbHUsICV6dX0gc2luY2UKICAgICAgICAgICAgICAqIHRoZXkgZG9uJ3QgYWZmZWN0IHRoZSBhbW91bnQgb2Ygc3BhY2Ugd2UgcmVzZXJ2ZS4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCgqZiA9PSAnbCcgfHwgKmYgPT0gJ3onKSAmJgotICAgICAgICAgICAgICAgIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpCisgICAgICAgICAgICBpZiAoKmYgPT0gJ2wnKSB7CisgICAgICAgICAgICAgICAgaWYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnKSB7CisgICAgICAgICAgICAgICAgICAgICsrZjsKKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmWzFdID09ICdsJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChmWzJdID09ICdkJyB8fCBmWzJdID09ICd1JykpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2xvbmdmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZiArPSAyOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ3onICYmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpIHsKICAgICAgICAgICAgICAgICArK2Y7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKICAgICAgICAgICAgIGNhc2UgJ2MnOgorICAgICAgICAgICAgeworI2lmbmRlZiBQeV9VTklDT0RFX1dJREUKKyAgICAgICAgICAgICAgICBpbnQgb3JkaW5hbCA9IHZhX2FyZyhjb3VudCwgaW50KTsKKyAgICAgICAgICAgICAgICBpZiAob3JkaW5hbCA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgbiArPSAyOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbisrOworI2Vsc2UKICAgICAgICAgICAgICAgICAodm9pZCl2YV9hcmcoY291bnQsIGludCk7Ci0gICAgICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoLi4uICovCisgICAgICAgICAgICAgICAgbisrOworI2VuZGlmCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlICclJzoKICAgICAgICAgICAgICAgICBuKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdkJzogY2FzZSAndSc6IGNhc2UgJ2knOiBjYXNlICd4JzoKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKGNvdW50LCBpbnQpOwotICAgICAgICAgICAgICAgIC8qIDIwIGJ5dGVzIGlzIGVub3VnaCB0byBob2xkIGEgNjQtYml0Ci0gICAgICAgICAgICAgICAgICAgaW50ZWdlci4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgVGhpcyBpc24ndCBlbm91Z2ggZm9yIG9jdGFsLgotICAgICAgICAgICAgICAgICAgIElmIGEgd2lkdGggaXMgc3BlY2lmaWVkIHdlIG5lZWQgbW9yZQotICAgICAgICAgICAgICAgICAgICh3aGljaCB3ZSBhbGxvY2F0ZSBsYXRlcikuICovCi0gICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMjApCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMjA7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICBpZiAobG9uZ2xvbmdmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0xPTkdfQ0hBUlMpCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0xPTkdfQ0hBUlM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAvKiBNQVhfTE9OR19DSEFSUyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdCBpbnRlZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgc2lnbi4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuICBUaGlzCisgICAgICAgICAgICAgICAgICAgICAgIGlzbid0IGVub3VnaCBmb3Igb2N0YWwuICBJZiBhIHdpZHRoIGlzIHNwZWNpZmllZCB3ZQorICAgICAgICAgICAgICAgICAgICAgICBuZWVkIG1vcmUgKHdoaWNoIHdlIGFsbG9jYXRlIGxhdGVyKS4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfQ0hBUlMpCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0NIQVJTOwogICAgICAgICAgICAgICAgIG4gKz0gd2lkdGg7CisgICAgICAgICAgICAgICAgLyogWFhYIHNob3VsZCBhbGxvdyBmb3IgbGFyZ2UgcHJlY2lzaW9uIGhlcmUgdG9vLiAqLwogICAgICAgICAgICAgICAgIGlmIChhYnVmZmVyc2l6ZSA8IHdpZHRoKQogICAgICAgICAgICAgICAgICAgICBhYnVmZmVyc2l6ZSA9IHdpZHRoOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtODE1LDEyICs4NzIsMjAgQEAKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKGNvdW50LCBQeU9iamVjdCAqKTsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHIgPSB2YV9hcmcoY291bnQsIGNvbnN0IGNoYXIgKik7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cl9vYmo7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiB8fCBzdHIpOwogICAgICAgICAgICAgICAgIGFzc2VydCghb2JqIHx8IFB5VW5pY29kZV9DaGVjayhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKQorICAgICAgICAgICAgICAgIGlmIChvYmopIHsKICAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX1NJWkUob2JqKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG4gKz0gc3RybGVuKHN0cik7CisgICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyX29iaiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHN0ciwgc3RybGVuKHN0ciksICJyZXBsYWNlIik7CisgICAgICAgICAgICAgICAgICAgIGlmICghc3RyX29iaikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX1NJWkUoc3RyX29iaik7CisgICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBzdHJfb2JqOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgJ1MnOgpAQCAtODg1LDggKzk1MCw5IEBACiAgICAgICAgICAgICBuKys7CiAgICAgfQogICBleHBhbmQ6Ci0gICAgaWYgKGFidWZmZXJzaXplID4gMjApIHsKLSAgICAgICAgYWJ1ZmZlciA9IFB5T2JqZWN0X01hbGxvYyhhYnVmZmVyc2l6ZSk7CisgICAgaWYgKGFidWZmZXJzaXplID4gSVRFTV9CVUZGRVJfTEVOKSB7CisgICAgICAgIC8qIGFkZCAxIGZvciBzcHJpbnRmJ3MgdHJhaWxpbmcgbnVsbCBieXRlICovCisgICAgICAgIGFidWZmZXIgPSBQeU9iamVjdF9NYWxsb2MoYWJ1ZmZlcnNpemUgKyAxKTsKICAgICAgICAgaWYgKCFhYnVmZmVyKSB7CiAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZ290byBmYWlsOwpAQCAtOTEwLDIzICs5NzYsMzIgQEAKICAgICAgICAgaWYgKCpmID09ICclJykgewogICAgICAgICAgICAgY29uc3QgY2hhciogcCA9IGYrKzsKICAgICAgICAgICAgIGludCBsb25nZmxhZyA9IDA7CisgICAgICAgICAgICBpbnQgbG9uZ2xvbmdmbGFnID0gMDsKICAgICAgICAgICAgIGludCBzaXplX3RmbGFnID0gMDsKICAgICAgICAgICAgIHplcm9wYWQgPSAoKmYgPT0gJzAnKTsKICAgICAgICAgICAgIC8qIHBhcnNlIHRoZSB3aWR0aC5wcmVjaXNpb24gcGFydCAqLwogICAgICAgICAgICAgd2lkdGggPSAwOwotICAgICAgICAgICAgd2hpbGUgKElTRElHSVQoKHVuc2lnbmVkKSpmKSkKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCiAgICAgICAgICAgICAgICAgd2lkdGggPSAod2lkdGgqMTApICsgKmYrKyAtICcwJzsKICAgICAgICAgICAgIHByZWNpc2lvbiA9IDA7CiAgICAgICAgICAgICBpZiAoKmYgPT0gJy4nKSB7CiAgICAgICAgICAgICAgICAgZisrOwotICAgICAgICAgICAgICAgIHdoaWxlIChJU0RJR0lUKCh1bnNpZ25lZCkqZikpCisgICAgICAgICAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkKICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbioxMCkgKyAqZisrIC0gJzAnOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogaGFuZGxlIHRoZSBsb25nIGZsYWcsIGJ1dCBvbmx5IGZvciAlbGQgYW5kICVsdS4KLSAgICAgICAgICAgICAgIG90aGVycyBjYW4gYmUgYWRkZWQgd2hlbiBuZWNlc3NhcnkuICovCi0gICAgICAgICAgICBpZiAoKmYgPT0gJ2wnICYmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykpIHsKLSAgICAgICAgICAgICAgICBsb25nZmxhZyA9IDE7Ci0gICAgICAgICAgICAgICAgKytmOworICAgICAgICAgICAgLyogSGFuZGxlICVsZCwgJWx1LCAlbGxkIGFuZCAlbGx1LiAqLworICAgICAgICAgICAgaWYgKCpmID09ICdsJykgeworICAgICAgICAgICAgICAgIGlmIChmWzFdID09ICdkJyB8fCBmWzFdID09ICd1JykgeworICAgICAgICAgICAgICAgICAgICBsb25nZmxhZyA9IDE7CisgICAgICAgICAgICAgICAgICAgICsrZjsKKyAgICAgICAgICAgICAgICB9CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChmWzFdID09ICdsJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgIChmWzJdID09ICdkJyB8fCBmWzJdID09ICd1JykpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZ2xvbmdmbGFnID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZiArPSAyOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaGFuZGxlIHRoZSBzaXplX3QgZmxhZy4gKi8KICAgICAgICAgICAgIGlmICgqZiA9PSAneicgJiYgKGZbMV0gPT0gJ2QnIHx8IGZbMV0gPT0gJ3UnKSkgewpAQCAtOTM2LDEyICsxMDExLDI3IEBACiAKICAgICAgICAgICAgIHN3aXRjaCAoKmYpIHsKICAgICAgICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgICAgICpzKysgPSB2YV9hcmcodmFyZ3MsIGludCk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcodmFyZ3MsIGludCk7CisjaWZuZGVmIFB5X1VOSUNPREVfV0lERQorICAgICAgICAgICAgICAgIGlmIChvcmRpbmFsID4gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIG9yZGluYWwgLT0gMHgxMDAwMDsKKyAgICAgICAgICAgICAgICAgICAgKnMrKyA9IDB4RDgwMCB8IChvcmRpbmFsID4+IDEwKTsKKyAgICAgICAgICAgICAgICAgICAgKnMrKyA9IDB4REMwMCB8IChvcmRpbmFsICYgMHgzRkYpOworICAgICAgICAgICAgICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgKnMrKyA9IG9yZGluYWw7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsIHdpZHRoLCBwcmVjaXNpb24sICdkJyk7CisgICAgICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsIHplcm9wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgcHJlY2lzaW9uLCAnZCcpOwogICAgICAgICAgICAgICAgIGlmIChsb25nZmxhZykKICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihyZWFsYnVmZmVyLCBmbXQsIHZhX2FyZyh2YXJncywgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKQorICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlYWxidWZmZXIsIGZtdCwgdmFfYXJnKHZhcmdzLCBQWV9MT05HX0xPTkcpKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCiAgICAgICAgICAgICAgICAgICAgIHNwcmludGYocmVhbGJ1ZmZlciwgZm10LCB2YV9hcmcodmFyZ3MsIFB5X3NzaXplX3QpKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC05NDksOSArMTAzOSwxNSBAQAogICAgICAgICAgICAgICAgIGFwcGVuZHN0cmluZyhyZWFsYnVmZmVyKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ3UnKTsKKyAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICd1Jyk7CiAgICAgICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQogICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlYWxidWZmZXIsIGZtdCwgdmFfYXJnKHZhcmdzLCB1bnNpZ25lZCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYocmVhbGJ1ZmZlciwgZm10LCB2YV9hcmcodmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKICAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQogICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlYWxidWZmZXIsIGZtdCwgdmFfYXJnKHZhcmdzLCBzaXplX3QpKTsKICAgICAgICAgICAgICAgICBlbHNlCkBAIC05NTksMTIgKzEwNTUsMTIgQEAKICAgICAgICAgICAgICAgICBhcHBlbmRzdHJpbmcocmVhbGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ2knKTsKKyAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ2knKTsKICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlYWxidWZmZXIsIGZtdCwgdmFfYXJnKHZhcmdzLCBpbnQpKTsKICAgICAgICAgICAgICAgICBhcHBlbmRzdHJpbmcocmVhbGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ3gnKTsKKyAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgemVyb3BhZCwgd2lkdGgsIHByZWNpc2lvbiwgJ3gnKTsKICAgICAgICAgICAgICAgICBzcHJpbnRmKHJlYWxidWZmZXIsIGZtdCwgdmFfYXJnKHZhcmdzLCBpbnQpKTsKICAgICAgICAgICAgICAgICBhcHBlbmRzdHJpbmcocmVhbGJ1ZmZlcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05OTIsMTggKzEwODgsMjMgQEAKICAgICAgICAgICAgIGNhc2UgJ1YnOgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcodmFyZ3MsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZyh2YXJncywgY29uc3QgY2hhciAqKTsKKyAgICAgICAgICAgICAgICB2YV9hcmcodmFyZ3MsIGNvbnN0IGNoYXIgKik7CiAgICAgICAgICAgICAgICAgaWYgKG9iaikgewogICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUob2JqKTsKICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHMsIFB5VW5pY29kZV9BU19VTklDT0RFKG9iaiksIHNpemUpOwogICAgICAgICAgICAgICAgICAgICBzICs9IHNpemU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kc3RyaW5nKHN0cik7CisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWShzLCBQeVVuaWNvZGVfQVNfVU5JQ09ERSgqY2FsbHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUoKmNhbGxyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcyArPSBQeVVuaWNvZGVfR0VUX1NJWkUoKmNhbGxyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2NhbGxyZXN1bHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlICdTJzoKICAgICAgICAgICAgIGNhc2UgJ1InOgorICAgICAgICAgICAgY2FzZSAnQSc6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqdWNvcHk7CiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCB1c2l6ZTsKQEAgLTEwMzksNyArMTE0MCw4IEBACiAgICAgICAgICAgICAgICAgYXBwZW5kc3RyaW5nKHApOwogICAgICAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKKyAgICAgICAgfQorICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcysrID0gKmY7CiAgICAgfQogCkBAIC0xMDU0LDcgKzExNTYsNyBAQAogICAgIGlmIChjYWxscmVzdWx0cykgewogICAgICAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQyID0gY2FsbHJlc3VsdHM7CiAgICAgICAgIHdoaWxlIChjYWxscmVzdWx0MiA8IGNhbGxyZXN1bHQpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRigqY2FsbHJlc3VsdDIpOworICAgICAgICAgICAgUHlfWERFQ1JFRigqY2FsbHJlc3VsdDIpOwogICAgICAgICAgICAgKytjYWxscmVzdWx0MjsKICAgICAgICAgfQogICAgICAgICBQeU9iamVjdF9GcmVlKGNhbGxyZXN1bHRzKTsKQEAgLTEwODIsMzUgKzExODQsMTU0IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotUHlfc3NpemVfdCBQeVVuaWNvZGVfQXNXaWRlQ2hhcihQeVVuaWNvZGVPYmplY3QgKnVuaWNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKncsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSkKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgUHlVbmljb2RlX0FzV2lkZUNoYXIoKSBhbmQgUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcoKToKKyAgIGNvbnZlcnQgYSBVbmljb2RlIG9iamVjdCB0byBhIHdpZGUgY2hhcmFjdGVyIHN0cmluZy4KKworICAgLSBJZiB3IGlzIE5VTEw6IHJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUgY2hhcmFjdGVycyAoaW5jbHVkaW5nIHRoZSBudWwKKyAgICAgY2hhcmFjdGVyKSByZXF1aXJlZCB0byBjb252ZXJ0IHRoZSB1bmljb2RlIG9iamVjdC4gSWdub3JlIHNpemUgYXJndW1lbnQuCisKKyAgIC0gT3RoZXJ3aXNlOiByZXR1cm4gdGhlIG51bWJlciBvZiB3aWRlIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyB0aGUgbnVsCisgICAgIGNoYXJhY3Rlcikgd3JpdHRlbiBpbnRvIHcuIFdyaXRlIGF0IG1vc3Qgc2l6ZSB3aWRlIGNoYXJhY3RlcnMgKGluY2x1ZGluZworICAgICB0aGUgbnVsIGNoYXJhY3RlcikuICovCitzdGF0aWMgUHlfc3NpemVfdAordW5pY29kZV9hc3dpZGVjaGFyKFB5VW5pY29kZU9iamVjdCAqdW5pY29kZSwKKyAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICp3LAorICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSkKK3sKKyNpZiBQeV9VTklDT0RFX1NJWkUgPT0gU0laRU9GX1dDSEFSX1QKKyAgICBQeV9zc2l6ZV90IHJlczsKKyAgICBpZiAodyAhPSBOVUxMKSB7CisgICAgICAgIHJlcyA9IFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKTsKKyAgICAgICAgaWYgKHNpemUgPiByZXMpCisgICAgICAgICAgICBzaXplID0gcmVzICsgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzID0gc2l6ZTsKKyAgICAgICAgbWVtY3B5KHcsIHVuaWNvZGUtPnN0ciwgc2l6ZSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKSArIDE7CisjZWxpZiBQeV9VTklDT0RFX1NJWkUgPT0gMiAmJiBTSVpFT0ZfV0NIQVJfVCA9PSA0CisgICAgcmVnaXN0ZXIgY29uc3QgUHlfVU5JQ09ERSAqdTsKKyAgICBjb25zdCBQeV9VTklDT0RFICp1ZW5kOworICAgIGNvbnN0IHdjaGFyX3QgKndvcmlnLCAqd2VuZDsKKyAgICBQeV9zc2l6ZV90IG5jaGFyOworCisgICAgdSA9IFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpOworICAgIHVlbmQgPSB1ICsgUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpOworICAgIGlmICh3ICE9IE5VTEwpIHsKKyAgICAgICAgd29yaWcgPSB3OworICAgICAgICB3ZW5kID0gdyArIHNpemU7CisgICAgICAgIHdoaWxlICh1ICE9IHVlbmQgJiYgdyAhPSB3ZW5kKSB7CisgICAgICAgICAgICBpZiAoMHhEODAwIDw9IHVbMF0gJiYgdVswXSA8PSAweERCRkYKKyAgICAgICAgICAgICAgICAmJiAweERDMDAgPD0gdVsxXSAmJiB1WzFdIDw9IDB4REZGRikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqdyA9ICgoKHVbMF0gJiAweDNGRikgPDwgMTApIHwgKHVbMV0gJiAweDNGRikpICsgMHgxMDAwMDsKKyAgICAgICAgICAgICAgICB1ICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAqdyA9ICp1OworICAgICAgICAgICAgICAgIHUrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHcrKzsKKyAgICAgICAgfQorICAgICAgICBpZiAodyAhPSB3ZW5kKQorICAgICAgICAgICAgKncgPSBMJ1wwJzsKKyAgICAgICAgcmV0dXJuIHcgLSB3b3JpZzsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG5jaGFyID0gMTsgLyogbnVsIGNoYXJhY3RlciBhdCB0aGUgZW5kICovCisgICAgICAgIHdoaWxlICh1ICE9IHVlbmQpIHsKKyAgICAgICAgICAgIGlmICgweEQ4MDAgPD0gdVswXSAmJiB1WzBdIDw9IDB4REJGRgorICAgICAgICAgICAgICAgICYmIDB4REMwMCA8PSB1WzFdICYmIHVbMV0gPD0gMHhERkZGKQorICAgICAgICAgICAgICAgIHUgKz0gMjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB1Kys7CisgICAgICAgICAgICBuY2hhcisrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBuY2hhcjsKKyNlbGlmIFB5X1VOSUNPREVfU0laRSA9PSA0ICYmIFNJWkVPRl9XQ0hBUl9UID09IDIKKyAgICByZWdpc3RlciBQeV9VTklDT0RFICp1LCAqdWVuZCwgb3JkaW5hbDsKKyAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgd2NoYXJfdCAqd29yaWcsICp3ZW5kOworICAgIFB5X3NzaXplX3QgbmNoYXI7CisKKyAgICB1ID0gUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSk7CisgICAgdWVuZCA9IHUgKyBQeVVuaWNvZGVfR0VUX1NJWkUodSk7CisgICAgaWYgKHcgIT0gTlVMTCkgeworICAgICAgICB3b3JpZyA9IHc7CisgICAgICAgIHdlbmQgPSB3ICsgc2l6ZTsKKyAgICAgICAgd2hpbGUgKHUgIT0gdWVuZCAmJiB3ICE9IHdlbmQpIHsKKyAgICAgICAgICAgIG9yZGluYWwgPSAqdTsKKyAgICAgICAgICAgIGlmIChvcmRpbmFsID4gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgb3JkaW5hbCAtPSAweDEwMDAwOworICAgICAgICAgICAgICAgICp3KysgPSAweEQ4MDAgfCAob3JkaW5hbCA+PiAxMCk7CisgICAgICAgICAgICAgICAgKncrKyA9IDB4REMwMCB8IChvcmRpbmFsICYgMHgzRkYpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICp3KysgPSBvcmRpbmFsOworICAgICAgICAgICAgdSsrOworICAgICAgICB9CisgICAgICAgIGlmICh3ICE9IHdlbmQpCisgICAgICAgICAgICAqdyA9IDA7CisgICAgICAgIHJldHVybiB3IC0gd29yaWc7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBuY2hhciA9IDE7IC8qIG51bCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgd2hpbGUgKHUgIT0gdWVuZCkgeworICAgICAgICAgICAgaWYgKCp1ID4gMHhmZmZmKQorICAgICAgICAgICAgICAgIG5jaGFyICs9IDI7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbmNoYXIrKzsKKyAgICAgICAgICAgIHUrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmNoYXI7CisgICAgfQorI2Vsc2UKKyMgIGVycm9yICJ1bnN1cHBvcnRlZCB3Y2hhcl90IGFuZCBQeV9VTklDT0RFIHNpemVzLCBzZWUgaXNzdWUgIzg2NzAiCisjZW5kaWYKK30KKworUHlfc3NpemVfdAorUHlVbmljb2RlX0FzV2lkZUNoYXIoUHlPYmplY3QgKnVuaWNvZGUsCisgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICp3LAorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplKQogewogICAgIGlmICh1bmljb2RlID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgcmV0dXJuIHVuaWNvZGVfYXN3aWRlY2hhcigoUHlVbmljb2RlT2JqZWN0Kil1bmljb2RlLCB3LCBzaXplKTsKK30KIAotICAgIC8qIElmIHBvc3NpYmxlLCB0cnkgdG8gY29weSB0aGUgMC10ZXJtaW5hdGlvbiBhcyB3ZWxsICovCi0gICAgaWYgKHNpemUgPiBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSkpCi0gICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSkgKyAxOword2NoYXJfdCoKK1B5VW5pY29kZV9Bc1dpZGVDaGFyU3RyaW5nKFB5T2JqZWN0ICp1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc2l6ZSkKK3sKKyAgICB3Y2hhcl90KiBidWZmZXI7CisgICAgUHlfc3NpemVfdCBidWZsZW47CiAKLSNpZmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCi0gICAgbWVtY3B5KHcsIHVuaWNvZGUtPnN0ciwgc2l6ZSAqIHNpemVvZih3Y2hhcl90KSk7Ci0jZWxzZQotICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVU5JQ09ERSAqdTsKLSAgICAgICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgICAgICB1ID0gUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSk7Ci0gICAgICAgIGZvciAoaSA9IHNpemU7IGkgPiAwOyBpLS0pCi0gICAgICAgICAgICAqdysrID0gKnUrKzsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0jZW5kaWYKIAotICAgIGlmIChzaXplID4gUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHNpemU7CisgICAgYnVmbGVuID0gdW5pY29kZV9hc3dpZGVjaGFyKChQeVVuaWNvZGVPYmplY3QgKil1bmljb2RlLCBOVUxMLCAwKTsKKyAgICBpZiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgPCBidWZsZW4pIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgYnVmZmVyID0gUHlNZW1fTUFMTE9DKGJ1ZmxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBidWZsZW4gPSB1bmljb2RlX2Fzd2lkZWNoYXIoKFB5VW5pY29kZU9iamVjdCAqKXVuaWNvZGUsIGJ1ZmZlciwgYnVmbGVuKTsKKyAgICBpZiAoc2l6ZSAhPSBOVUxMKQorICAgICAgICAqc2l6ZSA9IGJ1ZmxlbjsKKyAgICByZXR1cm4gYnVmZmVyOwogfQogCiAjZW5kaWYKQEAgLTEyMTAsMjcgKzE0MzEsMjYgQEAKICAgICByZXR1cm4gdjsKIH0KIAotUHlPYmplY3QgKlB5VW5pY29kZV9EZWNvZGUoY29uc3QgY2hhciAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQorLyogQ29udmVydCBlbmNvZGluZyB0byBsb3dlciBjYXNlIGFuZCByZXBsYWNlICdfJyB3aXRoICctJyBpbiBvcmRlciB0bworICAgY2F0Y2ggZS5nLiBVVEZfOC4gUmV0dXJuIDAgb24gZXJyb3IgKGVuY29kaW5nIGlzIGxvbmdlciB0aGFuIGxvd2VyX2xlbi0xKSwKKyAgIDEgb24gc3VjY2Vzcy4gKi8KK3N0YXRpYyBpbnQKK25vcm1hbGl6ZV9lbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICBjaGFyICpsb3dlciwKKyAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93ZXJfbGVuKQogewotICAgIFB5T2JqZWN0ICpidWZmZXIgPSBOVUxMLCAqdW5pY29kZTsKLSAgICBQeV9idWZmZXIgaW5mbzsKLSAgICBjaGFyIGxvd2VyWzIwXTsgIC8qIEVub3VnaCBmb3IgYW55IGVuY29kaW5nIG5hbWUgd2UgcmVjb2duaXplICovCi0gICAgY2hhciAqbDsKICAgICBjb25zdCBjaGFyICplOworICAgIGNoYXIgKmw7CisgICAgY2hhciAqbF9lbmQ7CiAKLSAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkKLSAgICAgICAgZW5jb2RpbmcgPSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nKCk7Ci0KLSAgICAvKiBDb252ZXJ0IGVuY29kaW5nIHRvIGxvd2VyIGNhc2UgYW5kIHJlcGxhY2UgJ18nIHdpdGggJy0nIGluIG9yZGVyIHRvCi0gICAgICAgY2F0Y2ggZS5nLiBVVEZfOCAqLwogICAgIGUgPSBlbmNvZGluZzsKICAgICBsID0gbG93ZXI7Ci0gICAgd2hpbGUgKCplICYmIGwgPCAmbG93ZXJbKHNpemVvZiBsb3dlcikgLSAyXSkgewotICAgICAgICBpZiAoSVNVUFBFUigqZSkpIHsKLSAgICAgICAgICAgICpsKysgPSBUT0xPV0VSKCplKyspOworICAgIGxfZW5kID0gJmxvd2VyW2xvd2VyX2xlbiAtIDFdOworICAgIHdoaWxlICgqZSkgeworICAgICAgICBpZiAobCA9PSBsX2VuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoUHlfSVNVUFBFUigqZSkpIHsKKyAgICAgICAgICAgICpsKysgPSBQeV9UT0xPV0VSKCplKyspOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCplID09ICdfJykgewogICAgICAgICAgICAgKmwrKyA9ICctJzsKQEAgLTEyNDEsMjMgKzE0NjEsMzkgQEAKICAgICAgICAgfQogICAgIH0KICAgICAqbCA9ICdcMCc7CisgICAgcmV0dXJuIDE7Cit9CisKK1B5T2JqZWN0ICpQeVVuaWNvZGVfRGVjb2RlKGNvbnN0IGNoYXIgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKK3sKKyAgICBQeU9iamVjdCAqYnVmZmVyID0gTlVMTCwgKnVuaWNvZGU7CisgICAgUHlfYnVmZmVyIGluZm87CisgICAgY2hhciBsb3dlclsxMV07ICAvKiBFbm91Z2ggZm9yIGFueSBlbmNvZGluZyBzaG9ydGN1dCAqLworCisgICAgaWYgKGVuY29kaW5nID09IE5VTEwpCisgICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogCiAgICAgLyogU2hvcnRjdXRzIGZvciBjb21tb24gZGVmYXVsdCBlbmNvZGluZ3MgKi8KLSAgICBpZiAoc3RyY21wKGxvd2VyLCAidXRmLTgiKSA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjgocywgc2l6ZSwgZXJyb3JzKTsKLSAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8Ci0gICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEocywgc2l6ZSwgZXJyb3JzKTsKKyAgICBpZiAobm9ybWFsaXplX2VuY29kaW5nKGVuY29kaW5nLCBsb3dlciwgc2l6ZW9mKGxvd2VyKSkpIHsKKyAgICAgICAgaWYgKHN0cmNtcChsb3dlciwgInV0Zi04IikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGOChzLCBzaXplLCBlcnJvcnMpOworICAgICAgICBlbHNlIGlmICgoc3RyY21wKGxvd2VyLCAibGF0aW4tMSIpID09IDApIHx8CisgICAgICAgICAgICAgICAgIChzdHJjbXAobG93ZXIsICJpc28tODg1OS0xIikgPT0gMCkpCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxhdGluMShzLCBzaXplLCBlcnJvcnMpOwogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgZGVmaW5lZChIQVZFX1VTQUJMRV9XQ0hBUl9UKQotICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgIm1iY3MiKSA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZU1CQ1Mocywgc2l6ZSwgZXJyb3JzKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZU1CQ1Mocywgc2l6ZSwgZXJyb3JzKTsKICNlbmRpZgotICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgImFzY2lpIikgPT0gMCkKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVBU0NJSShzLCBzaXplLCBlcnJvcnMpOwotICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgInV0Zi0xNiIpID09IDApCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGMTYocywgc2l6ZSwgZXJyb3JzLCAwKTsKLSAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJ1dGYtMzIiKSA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZVVURjMyKHMsIHNpemUsIGVycm9ycywgMCk7CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChsb3dlciwgImFzY2lpIikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlQVNDSUkocywgc2l6ZSwgZXJyb3JzKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAidXRmLTE2IikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGMTYocywgc2l6ZSwgZXJyb3JzLCAwKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAidXRmLTMyIikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGMzIocywgc2l6ZSwgZXJyb3JzLCAwKTsKKyAgICB9CiAKICAgICAvKiBEZWNvZGUgdmlhIHRoZSBjb2RlYyByZWdpc3RyeSAqLwogICAgIGJ1ZmZlciA9IE5VTEw7CkBAIC0xMzc4LDExICsxNjE0LDc3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoUHlPYmplY3QgKnVuaWNvZGUpCit7CisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKEhBVkVfVVNBQkxFX1dDSEFSX1QpCisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVNQkNTKFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgcmV0dXJuIFB5VW5pY29kZV9FbmNvZGVVVEY4KFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVlc2NhcGUiKTsKKyNlbHNlCisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgLyogQm9vdHN0cmFwIGNoZWNrOiBpZiB0aGUgZmlsZXN5c3RlbSBjb2RlYyBpcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIHdlCisgICAgICAgY2Fubm90IHVzZSBpdCB0byBlbmNvZGUgYW5kIGRlY29kZSBmaWxlbmFtZXMgYmVmb3JlIGl0IGlzIGxvYWRlZC4gTG9hZAorICAgICAgIHRoZSBQeXRob24gY29kZWMgcmVxdWlyZXMgdG8gZW5jb2RlIGF0IGxlYXN0IGl0cyBvd24gZmlsZW5hbWUuIFVzZSB0aGUgQworICAgICAgIHZlcnNpb24gb2YgdGhlIGxvY2FsZSBjb2RlYyB1bnRpbCB0aGUgY29kZWMgcmVnaXN0cnkgaXMgaW5pdGlhbGl6ZWQgYW5kCisgICAgICAgdGhlIFB5dGhvbiBjb2RlYyBpcyBsb2FkZWQuCisKKyAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBpbnRlcnByZXRlcnMsIHdlCisgICAgICAgY2Fubm90IG9ubHkgcmVseSBvbiBpdDogY2hlY2sgYWxzbyBpbnRlcnAtPmZzY29kZWNfaW5pdGlhbGl6ZWQgZm9yCisgICAgICAgc3ViaW50ZXJwcmV0ZXJzLiAqLworICAgIGlmIChQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nICYmIGludGVycC0+ZnNjb2RlY19pbml0aWFsaXplZCkgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh1bmljb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBsb2NhbGUgZW5jb2Rpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUgKi8KKyAgICAgICAgd2NoYXJfdCAqd2NoYXI7CisgICAgICAgIGNoYXIgKmJ5dGVzOworICAgICAgICBQeU9iamVjdCAqYnl0ZXNfb2JqOworICAgICAgICBzaXplX3QgZXJyb3JfcG9zOworCisgICAgICAgIHdjaGFyID0gUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcodW5pY29kZSwgTlVMTCk7CisgICAgICAgIGlmICh3Y2hhciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGJ5dGVzID0gX1B5X3djaGFyMmNoYXIod2NoYXIsICZlcnJvcl9wb3MpOworICAgICAgICBpZiAoYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKGVycm9yX3BvcyAhPSAoc2l6ZV90KS0xKSB7CisgICAgICAgICAgICAgICAgY2hhciAqZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgICAgICAgICAgICAgIGlmIChlcnJtc2cgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgZXJybXNnID0gIlB5X3djaGFyMmNoYXIoKSBmYWlsZWQiOworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywKKyAgICAgICAgICAgICAgICAgICAgImZpbGVzeXN0ZW1lbmNvZGluZyIsCisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpLCBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgIGVycm9yX3BvcywgZXJyb3JfcG9zKzEsCisgICAgICAgICAgICAgICAgICAgIGVycm1zZyk7CisgICAgICAgICAgICAgICAgUHlfWERFQ1JFRihleGMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICBQeU1lbV9GcmVlKHdjaGFyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5TWVtX0ZyZWUod2NoYXIpOworCisgICAgICAgIGJ5dGVzX29iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZyhieXRlcyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnl0ZXMpOworICAgICAgICByZXR1cm4gYnl0ZXNfb2JqOworICAgIH0KKyNlbmRpZgorfQorCiBQeU9iamVjdCAqUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhQeU9iamVjdCAqdW5pY29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIFB5T2JqZWN0ICp2OworICAgIGNoYXIgbG93ZXJbMTFdOyAgLyogRW5vdWdoIGZvciBhbnkgZW5jb2Rpbmcgc2hvcnRjdXQgKi8KIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHVuaWNvZGUpKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CkBAIC0xMzkzLDMxICsxNjk1LDQyIEBACiAgICAgICAgIGVuY29kaW5nID0gUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZygpOwogCiAgICAgLyogU2hvcnRjdXRzIGZvciBjb21tb24gZGVmYXVsdCBlbmNvZGluZ3MgKi8KLSAgICBpZiAoZXJyb3JzID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0cmNtcChlbmNvZGluZywgInV0Zi04IikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4U3RyaW5nKHVuaWNvZGUpOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoZW5jb2RpbmcsICJsYXRpbi0xIikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcodW5pY29kZSk7CisgICAgaWYgKG5vcm1hbGl6ZV9lbmNvZGluZyhlbmNvZGluZywgbG93ZXIsIHNpemVvZihsb3dlcikpKSB7CisgICAgICAgIGlmIChzdHJjbXAobG93ZXIsICJ1dGYtOCIpID09IDApCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZVVURjgoUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CisgICAgICAgIGVsc2UgaWYgKChzdHJjbXAobG93ZXIsICJsYXRpbi0xIikgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlTGF0aW4xKFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzKTsKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmIGRlZmluZWQoSEFWRV9VU0FCTEVfV0NIQVJfVCkKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGVuY29kaW5nLCAibWJjcyIpID09IDApCi0gICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzTUJDU1N0cmluZyh1bmljb2RlKTsKKyAgICAgICAgZWxzZSBpZiAoc3RyY21wKGxvd2VyLCAibWJjcyIpID09IDApCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZU1CQ1MoUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CiAjZW5kaWYKLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGVuY29kaW5nLCAiYXNjaWkiKSA9PSAwKQotICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHVuaWNvZGUpOwotICAgICAgICAvKiBEdXJpbmcgYm9vdHN0cmFwLCB3ZSBtYXkgbmVlZCB0byBmaW5kIHRoZSBlbmNvZGluZ3MKLSAgICAgICAgICAgcGFja2FnZSwgdG8gbG9hZCB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcsIGFuZCByZXF1aXJlIHRoZQotICAgICAgICAgICBmaWxlIHN5c3RlbSBlbmNvZGluZyBpbiBvcmRlciB0byBsb2FkIHRoZSBlbmNvZGluZ3MKLSAgICAgICAgICAgcGFja2FnZS4KLQotICAgICAgICAgICBCcmVhayBvdXQgb2YgdGhpcyBkZXBlbmRlbmN5IGJ5IGFzc3VtaW5nIHRoYXQgdGhlIHBhdGggdG8KLSAgICAgICAgICAgdGhlIGVuY29kaW5ncyBtb2R1bGUgaXMgQVNDSUktb25seS4gIFhYWCBjb3VsZCB0cnkgd2NzdG9tYnMKLSAgICAgICAgICAgaW5zdGVhZCwgaWYgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGlzIHRoZSBsb2NhbGUncwotICAgICAgICAgICBlbmNvZGluZy4gKi8KLSAgICAgICAgZWxzZSBpZiAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJgotICAgICAgICAgICAgICAgICBzdHJjbXAoZW5jb2RpbmcsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpID09IDAgJiYKLSAgICAgICAgICAgICAgICAgIVB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycC0+Y29kZWNzX2luaXRpYWxpemVkKQotICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHVuaWNvZGUpOworICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJhc2NpaSIpID09IDApCisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0VuY29kZUFTQ0lJKFB5VW5pY29kZV9BU19VTklDT0RFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CiAgICAgfQorICAgIC8qIER1cmluZyBib290c3RyYXAsIHdlIG1heSBuZWVkIHRvIGZpbmQgdGhlIGVuY29kaW5ncworICAgICAgIHBhY2thZ2UsIHRvIGxvYWQgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nLCBhbmQgcmVxdWlyZSB0aGUKKyAgICAgICBmaWxlIHN5c3RlbSBlbmNvZGluZyBpbiBvcmRlciB0byBsb2FkIHRoZSBlbmNvZGluZ3MKKyAgICAgICBwYWNrYWdlLgorCisgICAgICAgQnJlYWsgb3V0IG9mIHRoaXMgZGVwZW5kZW5jeSBieSBhc3N1bWluZyB0aGF0IHRoZSBwYXRoIHRvCisgICAgICAgdGhlIGVuY29kaW5ncyBtb2R1bGUgaXMgQVNDSUktb25seS4gIFhYWCBjb3VsZCB0cnkgd2NzdG9tYnMKKyAgICAgICBpbnN0ZWFkLCBpZiB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgaXMgdGhlIGxvY2FsZSdzCisgICAgICAgZW5jb2RpbmcuICovCisgICAgaWYgKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgJiYKKyAgICAgICAgICAgICBzdHJjbXAoZW5jb2RpbmcsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpID09IDAgJiYKKyAgICAgICAgICAgICAhUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwLT5jb2RlY3NfaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRW5jb2RlQVNDSUkoUHlVbmljb2RlX0FTX1VOSUNPREUodW5pY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CiAKICAgICAvKiBFbmNvZGUgdmlhIHRoZSBjb2RlYyByZWdpc3RyeSAqLwogICAgIHYgPSBQeUNvZGVjX0VuY29kZSh1bmljb2RlLCBlbmNvZGluZywgZXJyb3JzKTsKQEAgLTE0MzAsMTIgKzE3NDMsMTMgQEAKIAogICAgIC8qIElmIHRoZSBjb2RlYyByZXR1cm5zIGEgYnVmZmVyLCByYWlzZSBhIHdhcm5pbmcgYW5kIGNvbnZlcnQgdG8gYnl0ZXMgKi8KICAgICBpZiAoUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgY2hhciBtc2dbMTAwXTsKKyAgICAgICAgaW50IGVycm9yOwogICAgICAgICBQeU9iamVjdCAqYjsKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2csIHNpemVvZihtc2cpLAotICAgICAgICAgICAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ1ZmZlciBpbnN0ZWFkIG9mIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyk7Ci0gICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfUnVudGltZVdhcm5pbmcsIG1zZywgMSkgPCAwKSB7CisKKyAgICAgICAgZXJyb3IgPSBQeUVycl9XYXJuRm9ybWF0KFB5RXhjX1J1bnRpbWVXYXJuaW5nLCAxLAorICAgICAgICAgICAgImVuY29kZXIgJXMgcmV0dXJuZWQgYnl0ZWFycmF5IGluc3RlYWQgb2YgYnl0ZXMiLAorICAgICAgICAgICAgZW5jb2RpbmcpOworICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xNTA5LDMyICsxODIzLDQ4IEBACiBQeU9iamVjdCoKIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKIHsKLSAgICAvKiBEdXJpbmcgdGhlIGVhcmx5IGJvb3RzdHJhcHBpbmcgcHJvY2VzcywgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZwotICAgICAgIGNhbiBiZSB1bmRlZmluZWQuIElmIGl0IGlzIGNhc2UsIGRlY29kZSB1c2luZyBVVEYtOC4gVGhlIGZvbGxvd2luZyBhc3N1bWVzCi0gICAgICAgdGhhdCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIGlzIHNldCB0byBhIGJ1aWx0LWluIGVuY29kaW5nIGR1cmluZyB0aGUKLSAgICAgICBib290c3RyYXBwaW5nIHByb2Nlc3Mgd2hlcmUgdGhlIGNvZGVjcyBhcmVuJ3QgcmVhZHkgeWV0LgotICAgICovCi0gICAgaWYgKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpIHsKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmIGRlZmluZWQoSEFWRV9VU0FCTEVfV0NIQVJfVCkKLSAgICAgICAgaWYgKHN0cmNtcChQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAibWJjcyIpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTUJDUyhzLCBzaXplLCAicmVwbGFjZSIpOwotICAgICAgICB9CisgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVNQkNTKHMsIHNpemUsIE5VTEwpOwogI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0gICAgICAgIGlmIChzdHJjbXAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgInV0Zi04IikgPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY4KHMsIHNpemUsICJyZXBsYWNlIik7Ci0gICAgICAgIH0KLSNlbmRpZgorICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlVVRGOChzLCBzaXplLCAic3Vycm9nYXRlZXNjYXBlIik7CisjZWxzZQorICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIC8qIEJvb3RzdHJhcCBjaGVjazogaWYgdGhlIGZpbGVzeXN0ZW0gY29kZWMgaXMgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLCB3ZQorICAgICAgIGNhbm5vdCB1c2UgaXQgdG8gZW5jb2RlIGFuZCBkZWNvZGUgZmlsZW5hbWVzIGJlZm9yZSBpdCBpcyBsb2FkZWQuIExvYWQKKyAgICAgICB0aGUgUHl0aG9uIGNvZGVjIHJlcXVpcmVzIHRvIGVuY29kZSBhdCBsZWFzdCBpdHMgb3duIGZpbGVuYW1lLiBVc2UgdGhlIEMKKyAgICAgICB2ZXJzaW9uIG9mIHRoZSBsb2NhbGUgY29kZWMgdW50aWwgdGhlIGNvZGVjIHJlZ2lzdHJ5IGlzIGluaXRpYWxpemVkIGFuZAorICAgICAgIHRoZSBQeXRob24gY29kZWMgaXMgbG9hZGVkLgorCisgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgaW50ZXJwcmV0ZXJzLCB3ZQorICAgICAgIGNhbm5vdCBvbmx5IHJlbHkgb24gaXQ6IGNoZWNrIGFsc28gaW50ZXJwLT5mc2NvZGVjX2luaXRpYWxpemVkIGZvcgorICAgICAgIHN1YmludGVycHJldGVycy4gKi8KKyAgICBpZiAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyAmJiBpbnRlcnAtPmZzY29kZWNfaW5pdGlhbGl6ZWQpIHsKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGUocywgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlcGxhY2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZWVzY2FwZSIpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY4KHMsIHNpemUsICJyZXBsYWNlIik7CisgICAgICAgIC8qIGxvY2FsZSBlbmNvZGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZSAqLworICAgICAgICB3Y2hhcl90ICp3Y2hhcjsKKyAgICAgICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgICAgIHNpemVfdCBsZW47CisKKyAgICAgICAgaWYgKHNbc2l6ZV0gIT0gJ1wwJyB8fCBzaXplICE9IHN0cmxlbihzKSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIE5VTCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgd2NoYXIgPSBfUHlfY2hhcjJ3Y2hhcihzLCAmbGVuKTsKKyAgICAgICAgaWYgKHdjaGFyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKworICAgICAgICB1bmljb2RlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3Y2hhciwgbGVuKTsKKyAgICAgICAgUHlNZW1fRnJlZSh3Y2hhcik7CisgICAgICAgIHJldHVybiB1bmljb2RlOwogICAgIH0KKyNlbmRpZgogfQogCi0vKiBDb252ZXJ0IHRoZSBhcmd1bWVudCB0byBhIGJ5dGVzIG9iamVjdCwgYWNjb3JkaW5nIHRvIHRoZSBmaWxlCi0gICBzeXN0ZW0gZW5jb2RpbmcgKi8KIAogaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKQEAgLTE1NDYsNyArMTg3Niw3IEBACiAgICAgICAgIFB5X0RFQ1JFRigqKFB5T2JqZWN0KiopYWRkcik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoUHlCeXRlc19DaGVjayhhcmcpIHx8IFB5Qnl0ZUFycmF5X0NoZWNrKGFyZykpIHsKKyAgICBpZiAoUHlCeXRlc19DaGVjayhhcmcpKSB7CiAgICAgICAgIG91dHB1dCA9IGFyZzsKICAgICAgICAgUHlfSU5DUkVGKG91dHB1dCk7CiAgICAgfQpAQCAtMTU1NCw5ICsxODg0LDcgQEAKICAgICAgICAgYXJnID0gUHlVbmljb2RlX0Zyb21PYmplY3QoYXJnKTsKICAgICAgICAgaWYgKCFhcmcpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgb3V0cHV0ID0gUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdChhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgICAgIG91dHB1dCA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoYXJnKTsKICAgICAgICAgUHlfREVDUkVGKGFyZyk7CiAgICAgICAgIGlmICghb3V0cHV0KQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTY2LDE1ICsxODk0LDUwIEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoUHlCeXRlc19DaGVjayhvdXRwdXQpKSB7Ci0gICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShvdXRwdXQpOwotICAgICAgICAgZGF0YSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG91dHB1dCk7CisgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUob3V0cHV0KTsKKyAgICBkYXRhID0gUHlCeXRlc19BU19TVFJJTkcob3V0cHV0KTsKKyAgICBpZiAoc2l6ZSAhPSBzdHJsZW4oZGF0YSkpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIE5VTCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgUHlfREVDUkVGKG91dHB1dCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAqKFB5T2JqZWN0KiopYWRkciA9IG91dHB1dDsKKyAgICByZXR1cm4gUHlfQ0xFQU5VUF9TVVBQT1JURUQ7Cit9CisKKworaW50CitQeVVuaWNvZGVfRlNEZWNvZGVyKFB5T2JqZWN0KiBhcmcsIHZvaWQqIGFkZHIpCit7CisgICAgUHlPYmplY3QgKm91dHB1dCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIHZvaWQgKmRhdGE7CisgICAgaWYgKGFyZyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRigqKFB5T2JqZWN0KiopYWRkcik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKKyAgICAgICAgb3V0cHV0ID0gYXJnOworICAgICAgICBQeV9JTkNSRUYob3V0cHV0KTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICBzaXplID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUob3V0cHV0KTsKLSAgICAgICAgIGRhdGEgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcob3V0cHV0KTsKKyAgICAgICAgYXJnID0gUHlCeXRlc19Gcm9tT2JqZWN0KGFyZyk7CisgICAgICAgIGlmICghYXJnKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIG91dHB1dCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHRBbmRTaXplKFB5Qnl0ZXNfQVNfU1RSSU5HKGFyZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoYXJnKSk7CisgICAgICAgIFB5X0RFQ1JFRihhcmcpOworICAgICAgICBpZiAoIW91dHB1dCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhvdXRwdXQpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0cHV0KTsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJkZWNvZGVyIGZhaWxlZCB0byByZXR1cm4gdW5pY29kZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHNpemUgIT0gc3RybGVuKGRhdGEpKSB7CisgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRShvdXRwdXQpOworICAgIGRhdGEgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShvdXRwdXQpOworICAgIGlmIChzaXplICE9IFB5X1VOSUNPREVfc3RybGVuKGRhdGEpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJlbWJlZGRlZCBOVUwgY2hhcmFjdGVyIik7CiAgICAgICAgIFB5X0RFQ1JFRihvdXRwdXQpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MzIsMTggKzE5OTUsMzQgQEAKIAogY29uc3QgY2hhciAqUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZyh2b2lkKQogewotICAgIHJldHVybiB1bmljb2RlX2RlZmF1bHRfZW5jb2Rpbmc7CisgICAgcmV0dXJuICJ1dGYtOCI7CiB9CiAKLWludCBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nKQorLyogY3JlYXRlIG9yIGFkanVzdCBhIFVuaWNvZGVEZWNvZGVFcnJvciAqLworc3RhdGljIHZvaWQKK21ha2VfZGVjb2RlX2V4Y2VwdGlvbihQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnB1dCwgUHlfc3NpemVfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVhc29uKQogewotICAgIGlmIChzdHJjbXAoZW5jb2RpbmcsIHVuaWNvZGVfZGVmYXVsdF9lbmNvZGluZykgIT0gMCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJDYW4gb25seSBzZXQgZGVmYXVsdCBlbmNvZGluZyB0byAlcyIsCi0gICAgICAgICAgICAgICAgICAgICB1bmljb2RlX2RlZmF1bHRfZW5jb2RpbmcpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCpleGNlcHRpb25PYmplY3QgPT0gTlVMTCkgeworICAgICAgICAqZXhjZXB0aW9uT2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlKAorICAgICAgICAgICAgZW5jb2RpbmcsIGlucHV0LCBsZW5ndGgsIHN0YXJ0cG9zLCBlbmRwb3MsIHJlYXNvbik7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIGVsc2UgeworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQoKmV4Y2VwdGlvbk9iamVjdCwgc3RhcnRwb3MpKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kKCpleGNlcHRpb25PYmplY3QsIGVuZHBvcykpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24oKmV4Y2VwdGlvbk9iamVjdCwgcmVhc29uKSkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgcmV0dXJuOworCitvbkVycm9yOgorICAgIFB5X0RFQ1JFRigqZXhjZXB0aW9uT2JqZWN0KTsKKyAgICAqZXhjZXB0aW9uT2JqZWN0ID0gTlVMTDsKIH0KIAogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgpAQCAtMTY3OSwyMCArMjA1OCwxMyBAQAogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpIHsKLSAgICAgICAgKmV4Y2VwdGlvbk9iamVjdCA9IFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZSgKLSAgICAgICAgICAgIGVuY29kaW5nLCAqaW5wdXQsICppbmVuZC0qaW5wdXQsICpzdGFydGlucG9zLCAqZW5kaW5wb3MsIHJlYXNvbik7Ci0gICAgICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQoKmV4Y2VwdGlvbk9iamVjdCwgKnN0YXJ0aW5wb3MpKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kKCpleGNlcHRpb25PYmplY3QsICplbmRpbnBvcykpCi0gICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24oKmV4Y2VwdGlvbk9iamVjdCwgcmVhc29uKSkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICB9CisgICAgbWFrZV9kZWNvZGVfZXhjZXB0aW9uKGV4Y2VwdGlvbk9iamVjdCwKKyAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICppbnB1dCwgKmluZW5kIC0gKmlucHV0LAorICAgICAgICAqc3RhcnRpbnBvcywgKmVuZGlucG9zLAorICAgICAgICByZWFzb24pOworICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3R1cGxlID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygqZXJyb3JIYW5kbGVyLCAqZXhjZXB0aW9uT2JqZWN0LCBOVUxMKTsKICAgICBpZiAocmVzdHVwbGUgPT0gTlVMTCkKQEAgLTI0MDgsNiArMjc4MCwxMjAgQEAKIAogI3VuZGVmIEFTQ0lJX0NIQVJfTUFTSwogCisjaWZkZWYgX19BUFBMRV9fCisKKy8qIFNpbXBsaWZpZWQgVVRGLTggZGVjb2RlciB1c2luZyBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciwKKyAgIHVzZWQgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYLiAqLworCit3Y2hhcl90KgorX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKK3sKKyAgICBpbnQgbjsKKyAgICBjb25zdCBjaGFyICplOworICAgIHdjaGFyX3QgKnVuaWNvZGUsICpwOworCisgICAgLyogTm90ZTogc2l6ZSB3aWxsIGFsd2F5cyBiZSBsb25nZXIgdGhhbiB0aGUgcmVzdWx0aW5nIFVuaWNvZGUKKyAgICAgICBjaGFyYWN0ZXIgY291bnQgKi8KKyAgICBpZiAoUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgPCAoc2l6ZSArIDEpKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB1bmljb2RlID0gUHlNZW1fTWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmICghdW5pY29kZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBVbnBhY2sgVVRGLTggZW5jb2RlZCBkYXRhICovCisgICAgcCA9IHVuaWNvZGU7CisgICAgZSA9IHMgKyBzaXplOworICAgIHdoaWxlIChzIDwgZSkgeworICAgICAgICBQeV9VQ1M0IGNoID0gKHVuc2lnbmVkIGNoYXIpKnM7CisKKyAgICAgICAgaWYgKGNoIDwgMHg4MCkgeworICAgICAgICAgICAgKnArKyA9ICh3Y2hhcl90KWNoOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBuID0gdXRmOF9jb2RlX2xlbmd0aFtjaF07CisgICAgICAgIGlmIChzICsgbiA+IGUpIHsKKyAgICAgICAgICAgIGdvdG8gc3Vycm9nYXRlZXNjYXBlOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoIChuKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgZ290byBzdXJyb2dhdGVlc2NhcGU7CisKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKChzWzFdICYgMHhjMCkgIT0gMHg4MCkKKyAgICAgICAgICAgICAgICBnb3RvIHN1cnJvZ2F0ZWVzY2FwZTsKKyAgICAgICAgICAgIGNoID0gKChzWzBdICYgMHgxZikgPDwgNikgKyAoc1sxXSAmIDB4M2YpOworICAgICAgICAgICAgYXNzZXJ0ICgoY2ggPiAweDAwN0YpICYmIChjaCA8PSAweDA3RkYpKTsKKyAgICAgICAgICAgICpwKysgPSAod2NoYXJfdCljaDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIC8qIERlY29kaW5nIFVURi04IHNlcXVlbmNlcyBpbiByYW5nZSBceGVkXHhhMFx4ODAtXHhlZFx4YmZceGJmCisgICAgICAgICAgICAgICB3aWxsIHJlc3VsdCBpbiBzdXJyb2dhdGVzIGluIHJhbmdlIGQ4MDAtZGZmZi4gU3Vycm9nYXRlcyBhcmUKKyAgICAgICAgICAgICAgIG5vdCB2YWxpZCBVVEYtOCBzbyB0aGV5IGFyZSByZWplY3RlZC4KKyAgICAgICAgICAgICAgIFNlZSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3ZlcnNpb25zL1VuaWNvZGU1LjIuMC9jaDAzLnBkZgorICAgICAgICAgICAgICAgKHRhYmxlIDMtNykgYW5kIGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzM2MjkudHh0ICovCisgICAgICAgICAgICBpZiAoKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisgICAgICAgICAgICAgICAgKHNbMl0gJiAweGMwKSAhPSAweDgwIHx8CisgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKXNbMF0gPT0gMHhFMCAmJgorICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzWzFdIDwgMHhBMCkgfHwKKyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIpc1swXSA9PSAweEVEICYmCisgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNbMV0gPiAweDlGKSkgeworCisgICAgICAgICAgICAgICAgZ290byBzdXJyb2dhdGVlc2NhcGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjaCA9ICgoc1swXSAmIDB4MGYpIDw8IDEyKSArICgoc1sxXSAmIDB4M2YpIDw8IDYpICsgKHNbMl0gJiAweDNmKTsKKyAgICAgICAgICAgIGFzc2VydCAoKGNoID4gMHgwN0ZGKSAmJiAoY2ggPD0gMHhGRkZGKSk7CisgICAgICAgICAgICAqcCsrID0gKFB5X1VOSUNPREUpY2g7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBpZiAoKHNbMV0gJiAweGMwKSAhPSAweDgwIHx8CisgICAgICAgICAgICAgICAgKHNbMl0gJiAweGMwKSAhPSAweDgwIHx8CisgICAgICAgICAgICAgICAgKHNbM10gJiAweGMwKSAhPSAweDgwIHx8CisgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKXNbMF0gPT0gMHhGMCAmJgorICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcilzWzFdIDwgMHg5MCkgfHwKKyAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIpc1swXSA9PSAweEY0ICYmCisgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNbMV0gPiAweDhGKSkgeworICAgICAgICAgICAgICAgIGdvdG8gc3Vycm9nYXRlZXNjYXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2ggPSAoKHNbMF0gJiAweDcpIDw8IDE4KSArICgoc1sxXSAmIDB4M2YpIDw8IDEyKSArCisgICAgICAgICAgICAgICAgICgoc1syXSAmIDB4M2YpIDw8IDYpICsgKHNbM10gJiAweDNmKTsKKyAgICAgICAgICAgIGFzc2VydCAoKGNoID4gMHhGRkZGKSAmJiAoY2ggPD0gMHgxMGZmZmYpKTsKKworI2lmIFNJWkVPRl9XQ0hBUl9UID09IDQKKyAgICAgICAgICAgICpwKysgPSAod2NoYXJfdCljaDsKKyNlbHNlCisgICAgICAgICAgICAvKiAgY29tcHV0ZSBhbmQgYXBwZW5kIHRoZSB0d28gc3Vycm9nYXRlczogKi8KKworICAgICAgICAgICAgLyogIHRyYW5zbGF0ZSBmcm9tIDEwMDAwLi4xMEZGRkYgdG8gMC4uRkZGRiAqLworICAgICAgICAgICAgY2ggLT0gMHgxMDAwMDsKKworICAgICAgICAgICAgLyogIGhpZ2ggc3Vycm9nYXRlID0gdG9wIDEwIGJpdHMgYWRkZWQgdG8gRDgwMCAqLworICAgICAgICAgICAgKnArKyA9ICh3Y2hhcl90KSgweEQ4MDAgKyAoY2ggPj4gMTApKTsKKworICAgICAgICAgICAgLyogIGxvdyBzdXJyb2dhdGUgPSBib3R0b20gMTAgYml0cyBhZGRlZCB0byBEQzAwICovCisgICAgICAgICAgICAqcCsrID0gKHdjaGFyX3QpKDB4REMwMCArIChjaCAmIDB4MDNGRikpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBzICs9IG47CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICBzdXJyb2dhdGVlc2NhcGU6CisgICAgICAgICpwKysgPSAweERDMDAgKyBjaDsKKyAgICAgICAgcysrOworICAgIH0KKyAgICAqcCA9IEwnXDAnOworICAgIHJldHVybiB1bmljb2RlOworfQorCisjZW5kaWYgLyogX19BUFBMRV9fICovCiAKIC8qIEFsbG9jYXRpb24gc3RyYXRlZ3k6ICBpZiB0aGUgc3RyaW5nIGlzIHNob3J0LCBjb252ZXJ0IGludG8gYSBzdGFjayBidWZmZXIKICAgIGFuZCBhbGxvY2F0ZSBleGFjdGx5IGFzIG11Y2ggc3BhY2UgbmVlZGVkIGF0IHRoZSBlbmQuICBFbHNlIGFsbG9jYXRlIHRoZQpAQCAtMzM2Niw3ICszODUyLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkaWdpdHM7ICsraSkgewogICAgICAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikgc1tpXTsKLSAgICAgICAgICAgICAgICBpZiAoIUlTWERJR0lUKGMpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeV9JU1hESUdJVChjKSkgewogICAgICAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IChzK2krMSktc3RhcnRzOwogICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLApAQCAtMzczMiw3ICs0MjE4LDcgQEAKICAgICAgICAgb3V0cG9zID0gcC1QeVVuaWNvZGVfQVNfVU5JQ09ERSh2KTsKICAgICAgICAgZm9yICh4ID0gMCwgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK3MpIHsKICAgICAgICAgICAgIGMgPSAodW5zaWduZWQgY2hhcikqczsKLSAgICAgICAgICAgIGlmICghSVNYRElHSVQoYykpIHsKKyAgICAgICAgICAgIGlmICghUHlfSVNYRElHSVQoYykpIHsKICAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwogICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKQEAgLTQ0MzEsMzIgKzQ5MTcsNDYgQEAKIHN0YXRpYyBpbnQgZGVjb2RlX21iY3MoUHlVbmljb2RlT2JqZWN0ICoqdiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcywgLyogTUJDUyBzdHJpbmcgKi8KICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUsIC8qIHNpemVvZiBNQkNTIHN0cmluZyAqLwotICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmluYWwpCisgICAgICAgICAgICAgICAgICAgICAgIGludCBmaW5hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIFB5X1VOSUNPREUgKnA7Ci0gICAgUHlfc3NpemVfdCBuID0gMDsKLSAgICBpbnQgdXNpemUgPSAwOworICAgIFB5X3NzaXplX3QgbjsKKyAgICBEV09SRCB1c2l6ZTsKKyAgICBEV09SRCBmbGFnczsKIAogICAgIGFzc2VydChzaXplID49IDApOwogCisgICAgLyogY2hlY2sgYW5kIGhhbmRsZSAnZXJyb3JzJyBhcmcgKi8KKyAgICBpZiAoZXJyb3JzPT1OVUxMIHx8IHN0cmNtcChlcnJvcnMsICJzdHJpY3QiKT09MCkKKyAgICAgICAgZmxhZ3MgPSBNQl9FUlJfSU5WQUxJRF9DSEFSUzsKKyAgICBlbHNlIGlmIChzdHJjbXAoZXJyb3JzLCAiaWdub3JlIik9PTApCisgICAgICAgIGZsYWdzID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAibWJjcyBlbmNvZGluZyBkb2VzIG5vdCBzdXBwb3J0IGVycm9ycz0nJXMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKICAgICAvKiBTa2lwIHRyYWlsaW5nIGxlYWQtYnl0ZSB1bmxlc3MgJ2ZpbmFsJyBpcyBzZXQgKi8KICAgICBpZiAoIWZpbmFsICYmIHNpemUgPj0gMSAmJiBpc19kYmNzX2xlYWRfYnl0ZShzLCBzaXplIC0gMSkpCiAgICAgICAgIC0tc2l6ZTsKIAogICAgIC8qIEZpcnN0IGdldCB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0ICovCiAgICAgaWYgKHNpemUgPiAwKSB7Ci0gICAgICAgIHVzaXplID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIHMsIHNpemUsIE5VTEwsIDApOwotICAgICAgICBpZiAodXNpemUgPT0gMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoMCwgTlVMTCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIHVzaXplID0gTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIGZsYWdzLCBzLCBzaXplLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKHVzaXplPT0wKQorICAgICAgICAgICAgZ290byBtYmNzX2RlY29kZV9lcnJvcjsKKyAgICB9IGVsc2UKKyAgICAgICAgdXNpemUgPSAwOwogCiAgICAgaWYgKCp2ID09IE5VTEwpIHsKICAgICAgICAgLyogQ3JlYXRlIHVuaWNvZGUgb2JqZWN0ICovCiAgICAgICAgICp2ID0gX1B5VW5pY29kZV9OZXcodXNpemUpOwogICAgICAgICBpZiAoKnYgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgbiA9IDA7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBFeHRlbmQgdW5pY29kZSBvYmplY3QgKi8KQEAgLTQ0NjYsMTUgKzQ5NjYsMzUgQEAKICAgICB9CiAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwotICAgIGlmIChzaXplID4gMCkgeworICAgIGlmICh1c2l6ZSA+IDApIHsKICAgICAgICAgcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKCp2KSArIG47Ci0gICAgICAgIGlmICgwID09IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLCAwLCBzLCBzaXplLCBwLCB1c2l6ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKDAsIE5VTEwpOwotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoMCA9PSBNdWx0aUJ5dGVUb1dpZGVDaGFyKENQX0FDUCwgZmxhZ3MsIHMsIHNpemUsIHAsIHVzaXplKSkgeworICAgICAgICAgICAgZ290byBtYmNzX2RlY29kZV9lcnJvcjsKICAgICAgICAgfQogICAgIH0KLQogICAgIHJldHVybiBzaXplOworCittYmNzX2RlY29kZV9lcnJvcjoKKyAgICAvKiBJZiB0aGUgbGFzdCBlcnJvciB3YXMgRVJST1JfTk9fVU5JQ09ERV9UUkFOU0xBVElPTiwgdGhlbgorICAgICAgIHdlIHJhaXNlIGEgVW5pY29kZURlY29kZUVycm9yIC0gZWxzZSBpdCBpcyBhICdnZW5lcmljJworICAgICAgIHdpbmRvd3MgZXJyb3IKKyAgICAgKi8KKyAgICBpZiAoR2V0TGFzdEVycm9yKCk9PUVSUk9SX05PX1VOSUNPREVfVFJBTlNMQVRJT04pIHsKKyAgICAgICAgLyogSWRlYWxseSwgd2Ugc2hvdWxkIGdldCByZWFzb24gZnJvbSBGb3JtYXRNZXNzYWdlIC0gdGhpcworICAgICAgICAgICBpcyB0aGUgV2luZG93cyAyMDAwIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGUgbWVzc2FnZQorICAgICAgICAqLworICAgICAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICAgICAgY29uc3QgY2hhciAqcmVhc29uID0gIk5vIG1hcHBpbmcgZm9yIHRoZSBVbmljb2RlIGNoYXJhY3RlciBleGlzdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW4gdGhlIHRhcmdldCBtdWx0aS1ieXRlIGNvZGUgcGFnZS4iOworICAgICAgICBtYWtlX2RlY29kZV9leGNlcHRpb24oJmV4YywgIm1iY3MiLCBzLCBzaXplLCAwLCAwLCByZWFzb24pOworICAgICAgICBpZiAoZXhjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKGV4Yyk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKDAsIE5VTEwpOworICAgIH0KKyAgICByZXR1cm4gLTE7CiB9CiAKIFB5T2JqZWN0ICpQeVVuaWNvZGVfRGVjb2RlTUJDU1N0YXRlZnVsKGNvbnN0IGNoYXIgKnMsCkBAIC00NDkxLDEwICs1MDExLDEwIEBACiAjaWZkZWYgTkVFRF9SRVRSWQogICByZXRyeToKICAgICBpZiAoc2l6ZSA+IElOVF9NQVgpCi0gICAgICAgIGRvbmUgPSBkZWNvZGVfbWJjcygmdiwgcywgSU5UX01BWCwgMCk7CisgICAgICAgIGRvbmUgPSBkZWNvZGVfbWJjcygmdiwgcywgSU5UX01BWCwgMCwgZXJyb3JzKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZG9uZSA9IGRlY29kZV9tYmNzKCZ2LCBzLCAoaW50KXNpemUsICFjb25zdW1lZCk7CisgICAgICAgIGRvbmUgPSBkZWNvZGVfbWJjcygmdiwgcywgKGludClzaXplLCAhY29uc3VtZWQsIGVycm9ycyk7CiAKICAgICBpZiAoZG9uZSA8IDApIHsKICAgICAgICAgUHlfWERFQ1JFRih2KTsKQEAgLTQ1MjgsMjAgKzUwNDgsNDUgQEAKICAqLwogc3RhdGljIGludCBlbmNvZGVfbWJjcyhQeU9iamVjdCAqKnJlcHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKnAsIC8qIHVuaWNvZGUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpemUpIC8qIHNpemUgb2YgdW5pY29kZSAqLworICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwgLyogc2l6ZSBvZiB1bmljb2RlICovCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGVycm9ycykKIHsKLSAgICBpbnQgbWJjc3NpemUgPSAwOwotICAgIFB5X3NzaXplX3QgbiA9IDA7CisgICAgQk9PTCB1c2VkRGVmYXVsdENoYXIgPSBGQUxTRTsKKyAgICBCT09MICpwdXNlZERlZmF1bHRDaGFyOworICAgIGludCBtYmNzc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG47CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgRFdPUkQgZmxhZ3M7CiAKICAgICBhc3NlcnQoc2l6ZSA+PSAwKTsKIAorICAgIC8qIGNoZWNrIGFuZCBoYW5kbGUgJ2Vycm9ycycgYXJnICovCisgICAgaWYgKGVycm9ycz09TlVMTCB8fCBzdHJjbXAoZXJyb3JzLCAic3RyaWN0Iik9PTApIHsKKyAgICAgICAgZmxhZ3MgPSBXQ19OT19CRVNUX0ZJVF9DSEFSUzsKKyAgICAgICAgcHVzZWREZWZhdWx0Q2hhciA9ICZ1c2VkRGVmYXVsdENoYXI7CisgICAgfSBlbHNlIGlmIChzdHJjbXAoZXJyb3JzLCAicmVwbGFjZSIpPT0wKSB7CisgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgcHVzZWREZWZhdWx0Q2hhciA9IE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICJtYmNzIGVuY29kaW5nIGRvZXMgbm90IHN1cHBvcnQgZXJyb3JzPSclcyciLAorICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyk7CisgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCiAgICAgLyogRmlyc3QgZ2V0IHRoZSBzaXplIG9mIHRoZSByZXN1bHQgKi8KICAgICBpZiAoc2l6ZSA+IDApIHsKLSAgICAgICAgbWJjc3NpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX0FDUCwgMCwgcCwgc2l6ZSwgTlVMTCwgMCwgTlVMTCwgTlVMTCk7CisgICAgICAgIG1iY3NzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsIGZsYWdzLCBwLCBzaXplLCBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgICAgIGlmIChtYmNzc2l6ZSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgwLCBOVUxMKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICAvKiBJZiB3ZSB1c2VkIGEgZGVmYXVsdCBjaGFyLCB0aGVuIHdlIGZhaWxlZCEgKi8KKyAgICAgICAgaWYgKHB1c2VkRGVmYXVsdENoYXIgJiYgKnB1c2VkRGVmYXVsdENoYXIpCisgICAgICAgICAgICBnb3RvIG1iY3NfZW5jb2RlX2Vycm9yOworICAgIH0gZWxzZSB7CisgICAgICAgIG1iY3NzaXplID0gMDsKICAgICB9CiAKICAgICBpZiAoKnJlcHIgPT0gTlVMTCkgewpAQCAtNDU0OSw2ICs1MDk0LDcgQEAKICAgICAgICAgKnJlcHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG1iY3NzaXplKTsKICAgICAgICAgaWYgKCpyZXByID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIG4gPSAwOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogRXh0ZW5kIHN0cmluZyBvYmplY3QgKi8KQEAgLTQ1NjAsMTMgKzUxMDYsMjAgQEAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogICAgIGlmIChzaXplID4gMCkgewogICAgICAgICBjaGFyICpzID0gUHlCeXRlc19BU19TVFJJTkcoKnJlcHIpICsgbjsKLSAgICAgICAgaWYgKDAgPT0gV2lkZUNoYXJUb011bHRpQnl0ZShDUF9BQ1AsIDAsIHAsIHNpemUsIHMsIG1iY3NzaXplLCBOVUxMLCBOVUxMKSkgeworICAgICAgICBpZiAoMCA9PSBXaWRlQ2hhclRvTXVsdGlCeXRlKENQX0FDUCwgZmxhZ3MsIHAsIHNpemUsIHMsIG1iY3NzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZSgwLCBOVUxMKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICBpZiAocHVzZWREZWZhdWx0Q2hhciAmJiAqcHVzZWREZWZhdWx0Q2hhcikKKyAgICAgICAgICAgIGdvdG8gbWJjc19lbmNvZGVfZXJyb3I7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CisKK21iY3NfZW5jb2RlX2Vycm9yOgorICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgIm1iY3MiLCBwLCBzaXplLCAwLCAwLCAiaW52YWxpZCBjaGFyYWN0ZXIiKTsKKyAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgcmV0dXJuIC0xOwogfQogCiBQeU9iamVjdCAqUHlVbmljb2RlX0VuY29kZU1CQ1MoY29uc3QgUHlfVU5JQ09ERSAqcCwKQEAgLTQ1NzksMTAgKzUxMzIsMTAgQEAKICNpZmRlZiBORUVEX1JFVFJZCiAgIHJldHJ5OgogICAgIGlmIChzaXplID4gSU5UX01BWCkKLSAgICAgICAgcmV0ID0gZW5jb2RlX21iY3MoJnJlcHIsIHAsIElOVF9NQVgpOworICAgICAgICByZXQgPSBlbmNvZGVfbWJjcygmcmVwciwgcCwgSU5UX01BWCwgZXJyb3JzKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmV0ID0gZW5jb2RlX21iY3MoJnJlcHIsIHAsIChpbnQpc2l6ZSk7CisgICAgICAgIHJldCA9IGVuY29kZV9tYmNzKCZyZXByLCBwLCAoaW50KXNpemUsIGVycm9ycyk7CiAKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBQeV9YREVDUkVGKHJlcHIpOwpAQCAtNTY5OSw2ICs2MjUyLDMwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5VW5pY29kZV9UcmFuc2Zvcm1EZWNpbWFsVG9BU0NJSShQeV9VTklDT0RFICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoKQoreworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgUHlfVU5JQ09ERSAqcDsgLyogd3JpdGUgcG9pbnRlciBpbnRvIHJlc3VsdCAqLworICAgIFB5X3NzaXplX3QgaTsKKyAgICAvKiBDb3B5IHRvIGEgbmV3IHN0cmluZyAqLworICAgIHJlc3VsdCA9IChQeU9iamVjdCAqKV9QeVVuaWNvZGVfTmV3KGxlbmd0aCk7CisgICAgUHlfVU5JQ09ERV9DT1BZKFB5VW5pY29kZV9BU19VTklDT0RFKHJlc3VsdCksIHMsIGxlbmd0aCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHAgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShyZXN1bHQpOworICAgIC8qIEl0ZXJhdGUgb3ZlciBjb2RlIHBvaW50cyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBQeV9VTklDT0RFIGNoID1zW2ldOworICAgICAgICBpZiAoY2ggPiAxMjcpIHsKKyAgICAgICAgICAgIGludCBkZWNpbWFsID0gUHlfVU5JQ09ERV9UT0RFQ0lNQUwoY2gpOworICAgICAgICAgICAgaWYgKGRlY2ltYWwgPj0gMCkKKyAgICAgICAgICAgICAgICBwW2ldID0gJzAnICsgZGVjaW1hbDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQogLyogLS0tIERlY2ltYWwgRW5jb2RlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIGludCBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbChQeV9VTklDT0RFICpzLApAQCAtNTg0MCwyOCArNjQxNywzMCBAQAogCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuaWNvZGVkZWZzLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIKKwogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgotLyogSW5jbHVkZSBfUGFyc2VUdXBsZUZpbmRzIGZyb20gZmluZC5oICovCi0jZGVmaW5lIEZST01fVU5JQ09ERQogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3BhcnRpdGlvbi5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogCiAjZGVmaW5lIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZyBfUHlVbmljb2RlX0luc2VydFRob3VzYW5kc0dyb3VwaW5nCiAjZGVmaW5lIF9QeV9JbnNlcnRUaG91c2FuZHNHcm91cGluZ0xvY2FsZSBfUHlVbmljb2RlX0luc2VydFRob3VzYW5kc0dyb3VwaW5nTG9jYWxlCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKIAogLyogaGVscGVyIG1hY3JvIHRvIGZpeHVwIHN0YXJ0L2VuZCBzbGljZSB2YWx1ZXMgKi8KLSNkZWZpbmUgRklYX1NUQVJUX0VORChvYmopICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhcnQgKz0gKG9iaiktPmxlbmd0aDsgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoc3RhcnQgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kID4gKG9iaiktPmxlbmd0aCkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kID0gKG9iaiktPmxlbmd0aDsgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kICs9IChvYmopLT5sZW5ndGg7ICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZW5kIDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZW5kID0gMDsKKyNkZWZpbmUgQURKVVNUX0lORElDRVMoc3RhcnQsIGVuZCwgbGVuKSAgICAgICAgIFwKKyAgICBpZiAoZW5kID4gbGVuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChlbmQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZW5kICs9IGxlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGVuZCA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGVuZCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoc3RhcnQgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhcnQgKz0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIFB5X3NzaXplX3QgUHlVbmljb2RlX0NvdW50KFB5T2JqZWN0ICpzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic3RyLApAQCAtNTg4MSwxMCArNjQ2MCwxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgRklYX1NUQVJUX0VORChzdHJfb2JqKTsKLQorICAgIEFESlVTVF9JTkRJQ0VTKHN0YXJ0LCBlbmQsIHN0cl9vYmotPmxlbmd0aCk7CiAgICAgcmVzdWx0ID0gc3RyaW5nbGliX2NvdW50KAotICAgICAgICBzdHJfb2JqLT5zdHIgKyBzdGFydCwgZW5kIC0gc3RhcnQsIHN1Yl9vYmotPnN0ciwgc3ViX29iai0+bGVuZ3RoCisgICAgICAgIHN0cl9vYmotPnN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwgc3ViX29iai0+c3RyLCBzdWJfb2JqLT5sZW5ndGgsCisgICAgICAgIFBZX1NTSVpFX1RfTUFYCiAgICAgICAgICk7CiAKICAgICBQeV9ERUNSRUYoc3ViX29iaik7CkBAIC01OTM5LDggKzY1MTgsNyBAQAogICAgIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gMTsKIAotICAgIEZJWF9TVEFSVF9FTkQoc2VsZik7Ci0KKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzZWxmLT5sZW5ndGgpOwogICAgIGVuZCAtPSBzdWJzdHJpbmctPmxlbmd0aDsKICAgICBpZiAoZW5kIDwgc3RhcnQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjI4MSwzMDUgKzY4NTksNDAgQEAKICAgICByZXR1cm4gdTsKIH0KIAotI2RlZmluZSBTUExJVF9BUFBFTkQoZGF0YSwgbGVmdCwgcmlnaHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgoZGF0YSkgKyAobGVmdCksIChyaWdodCkgLSAobGVmdCkpOyAgICAgXAotICAgIGlmICghc3RyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChQeUxpc3RfQXBwZW5kKGxpc3QsIHN0cikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBnb3RvIG9uRXJyb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLQotc3RhdGljCi1QeU9iamVjdCAqc3BsaXRfd2hpdGVzcGFjZShQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCitQeU9iamVjdCAqUHlVbmljb2RlX1NwbGl0bGluZXMoUHlPYmplY3QgKnN0cmluZywgaW50IGtlZXBlbmRzKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIC8qIGZpbmQgYSB0b2tlbiAqLwotICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmICFQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLSAgICAgICAgaWYgKGogPCBpKSB7Ci0gICAgICAgICAgICBpZiAobWF4Y291bnQtLSA8PSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgaSk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8IGxlbiAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA8IGxlbikgewotICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBqLCBsZW4pOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotUHlPYmplY3QgKlB5VW5pY29kZV9TcGxpdGxpbmVzKFB5T2JqZWN0ICpzdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtlZXBlbmRzKQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QgKmxpc3Q7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogCiAgICAgc3RyaW5nID0gUHlVbmljb2RlX0Zyb21PYmplY3Qoc3RyaW5nKTsKICAgICBpZiAoc3RyaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShzdHJpbmcpOwotICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfU0laRShzdHJpbmcpOwogCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIFB5X3NzaXplX3QgZW9sOwotCi0gICAgICAgIC8qIEZpbmQgYSBsaW5lIGFuZCBhcHBlbmQgaXQgKi8KLSAgICAgICAgd2hpbGUgKGkgPCBsZW4gJiYgIUJMT09NX0xJTkVCUkVBSyhkYXRhW2ldKSkKLSAgICAgICAgICAgIGkrKzsKLQotICAgICAgICAvKiBTa2lwIHRoZSBsaW5lIGJyZWFrIHJlYWRpbmcgQ1JMRiBhcyBvbmUgbGluZSBicmVhayAqLwotICAgICAgICBlb2wgPSBpOwotICAgICAgICBpZiAoaSA8IGxlbikgewotICAgICAgICAgICAgaWYgKGRhdGFbaV0gPT0gJ1xyJyAmJiBpICsgMSA8IGxlbiAmJgotICAgICAgICAgICAgICAgIGRhdGFbaSsxXSA9PSAnXG4nKQotICAgICAgICAgICAgICAgIGkgKz0gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICBpZiAoa2VlcGVuZHMpCi0gICAgICAgICAgICAgICAgZW9sID0gaTsKLSAgICAgICAgfQotICAgICAgICBTUExJVF9BUFBFTkQoZGF0YSwgaiwgZW9sKTsKLSAgICAgICAgaiA9IGk7Ci0gICAgfQotICAgIGlmIChqIDwgbGVuKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChkYXRhLCBqLCBsZW4pOwotICAgIH0KKyAgICBsaXN0ID0gc3RyaW5nbGliX3NwbGl0bGluZXMoCisgICAgICAgIChQeU9iamVjdCopIHN0cmluZywgUHlVbmljb2RlX0FTX1VOSUNPREUoc3RyaW5nKSwKKyAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHN0cmluZyksIGtlZXBlbmRzKTsKIAogICAgIFB5X0RFQ1JFRihzdHJpbmcpOwogICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihsaXN0KTsKLSAgICBQeV9ERUNSRUYoc3RyaW5nKTsKLSAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljCi1QeU9iamVjdCAqc3BsaXRfY2hhcihQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgY2gsCi0gICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gMDsgaSA8IGxlbjsgKSB7Ci0gICAgICAgIGlmIChidWZbaV0gPT0gY2gpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBqLCBpKTsKLSAgICAgICAgICAgIGkgPSBqID0gaSArIDE7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaSsrOwotICAgIH0KLSAgICBpZiAoaiA8PSBsZW4pIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgaiwgbGVuKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotUHlPYmplY3QgKnNwbGl0X3N1YnN0cmluZyhQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBtYXhjb3VudCkKLXsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOwotICAgIFB5X3NzaXplX3QgbGVuID0gc2VsZi0+bGVuZ3RoOwotICAgIFB5X3NzaXplX3Qgc3VibGVuID0gc3Vic3RyaW5nLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLQotICAgIGZvciAoaSA9IGogPSAwOyBpIDw9IGxlbiAtIHN1YmxlbjsgKSB7Ci0gICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGksIHN1YnN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBqLCBpKTsKLSAgICAgICAgICAgIGkgPSBqID0gaSArIHN1YmxlbjsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBpKys7Ci0gICAgfQotICAgIGlmIChqIDw9IGxlbikgewotICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBqLCBsZW4pOwotICAgIH0KLSAgICByZXR1cm4gbGlzdDsKLQotICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljCi1QeU9iamVjdCAqcnNwbGl0X3doaXRlc3BhY2UoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNlbGYtPmxlbmd0aDsKLSAgICBQeU9iamVjdCAqc3RyOwotICAgIHJlZ2lzdGVyIGNvbnN0IFB5X1VOSUNPREUgKmJ1ZiA9IHNlbGYtPnN0cjsKLQotICAgIGZvciAoaSA9IGogPSBsZW4gLSAxOyBpID49IDA7ICkgewotICAgICAgICAvKiBmaW5kIGEgdG9rZW4gKi8KLSAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgIGktLTsKLSAgICAgICAgaiA9IGk7Ci0gICAgICAgIHdoaWxlIChpID49IDAgJiYgIVB5X1VOSUNPREVfSVNTUEFDRShidWZbaV0pKQotICAgICAgICAgICAgaS0tOwotICAgICAgICBpZiAoaiA+IGkpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoYnVmLCBpICsgMSwgaiArIDEpOwotICAgICAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoYnVmW2ldKSkKLSAgICAgICAgICAgICAgICBpLS07Ci0gICAgICAgICAgICBqID0gaTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChidWYsIDAsIGogKyAxKTsKLSAgICB9Ci0gICAgaWYgKFB5TGlzdF9SZXZlcnNlKGxpc3QpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotICAgIHJldHVybiBsaXN0OwotCi0gIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKGxpc3QpOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMKLVB5T2JqZWN0ICpyc3BsaXRfY2hhcihQeVVuaWNvZGVPYmplY3QgKnNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSBjaCwKLSAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgUHlfc3NpemVfdCBsZW4gPSBzZWxmLT5sZW5ndGg7Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICByZWdpc3RlciBjb25zdCBQeV9VTklDT0RFICpidWYgPSBzZWxmLT5zdHI7Ci0KLSAgICBmb3IgKGkgPSBqID0gbGVuIC0gMTsgaSA+PSAwOyApIHsKLSAgICAgICAgaWYgKGJ1ZltpXSA9PSBjaCkgewotICAgICAgICAgICAgaWYgKG1heGNvdW50LS0gPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNQTElUX0FQUEVORChidWYsIGkgKyAxLCBqICsgMSk7Ci0gICAgICAgICAgICBqID0gaSA9IGkgLSAxOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGktLTsKLSAgICB9Ci0gICAgaWYgKGogPj0gLTEpIHsKLSAgICAgICAgU1BMSVRfQVBQRU5EKGJ1ZiwgMCwgaiArIDEpOwotICAgIH0KLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYwotUHlPYmplY3QgKnJzcGxpdF9zdWJzdHJpbmcoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVPYmplY3QgKnN1YnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCi17Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgajsKLSAgICBQeV9zc2l6ZV90IGxlbiA9IHNlbGYtPmxlbmd0aDsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbiA9IHN1YnN0cmluZy0+bGVuZ3RoOwotICAgIFB5T2JqZWN0ICpzdHI7Ci0KLSAgICBmb3IgKGkgPSBsZW4gLSBzdWJsZW4sIGogPSBsZW47IGkgPj0gMDsgKSB7Ci0gICAgICAgIGlmIChQeV9VTklDT0RFX01BVENIKHNlbGYsIGksIHN1YnN0cmluZykpIHsKLSAgICAgICAgICAgIGlmIChtYXhjb3VudC0tIDw9IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBTUExJVF9BUFBFTkQoc2VsZi0+c3RyLCBpICsgc3VibGVuLCBqKTsKLSAgICAgICAgICAgIGogPSBpOwotICAgICAgICAgICAgaSAtPSBzdWJsZW47Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaS0tOwotICAgIH0KLSAgICBpZiAoaiA+PSAwKSB7Ci0gICAgICAgIFNQTElUX0FQUEVORChzZWxmLT5zdHIsIDAsIGopOwotICAgIH0KLSAgICBpZiAoUHlMaXN0X1JldmVyc2UobGlzdCkgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgcmV0dXJuIGxpc3Q7Ci0KLSAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSN1bmRlZiBTUExJVF9BUFBFTkQKLQotc3RhdGljCiBQeU9iamVjdCAqc3BsaXQoUHlVbmljb2RlT2JqZWN0ICpzZWxmLAogICAgICAgICAgICAgICAgIFB5VW5pY29kZU9iamVjdCAqc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbWF4Y291bnQpCiB7Ci0gICAgUHlPYmplY3QgKmxpc3Q7Ci0KICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOwogCi0gICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKCFsaXN0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGlmIChzdWJzdHJpbmcgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHNwbGl0X3doaXRlc3BhY2Uoc2VsZixsaXN0LG1heGNvdW50KTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ2xpYl9zcGxpdF93aGl0ZXNwYWNlKAorICAgICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBtYXhjb3VudAorICAgICAgICAgICAgKTsKIAotICAgIGVsc2UgaWYgKHN1YnN0cmluZy0+bGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiBzcGxpdF9jaGFyKHNlbGYsbGlzdCxzdWJzdHJpbmctPnN0clswXSxtYXhjb3VudCk7Ci0KLSAgICBlbHNlIGlmIChzdWJzdHJpbmctPmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJlbXB0eSBzZXBhcmF0b3IiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIHNwbGl0X3N1YnN0cmluZyhzZWxmLGxpc3Qsc3Vic3RyaW5nLG1heGNvdW50KTsKKyAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsCisgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgbWF4Y291bnQKKyAgICAgICAgKTsKIH0KIAogc3RhdGljCkBAIC02NTg3LDI4ICs2OTAwLDE5IEBACiAgICAgICAgICAgICAgICAgIFB5VW5pY29kZU9iamVjdCAqc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG1heGNvdW50KQogewotICAgIFB5T2JqZWN0ICpsaXN0OwotCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKIAotICAgIGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghbGlzdCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICBpZiAoc3Vic3RyaW5nID09IE5VTEwpCi0gICAgICAgIHJldHVybiByc3BsaXRfd2hpdGVzcGFjZShzZWxmLGxpc3QsbWF4Y291bnQpOworICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKAorICAgICAgICAgICAgKFB5T2JqZWN0Kikgc2VsZiwgIHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBtYXhjb3VudAorICAgICAgICAgICAgKTsKIAotICAgIGVsc2UgaWYgKHN1YnN0cmluZy0+bGVuZ3RoID09IDEpCi0gICAgICAgIHJldHVybiByc3BsaXRfY2hhcihzZWxmLGxpc3Qsc3Vic3RyaW5nLT5zdHJbMF0sbWF4Y291bnQpOwotCi0gICAgZWxzZSBpZiAoc3Vic3RyaW5nLT5sZW5ndGggPT0gMCkgewotICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW1wdHkgc2VwYXJhdG9yIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJldHVybiByc3BsaXRfc3Vic3RyaW5nKHNlbGYsbGlzdCxzdWJzdHJpbmcsbWF4Y291bnQpOworICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0KAorICAgICAgICAoUHlPYmplY3QqKSBzZWxmLCAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsCisgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgbWF4Y291bnQKKyAgICAgICAgKTsKIH0KIAogc3RhdGljCkBAIC02NjIxLDEwICs2OTI1LDE0IEBACiAKICAgICBpZiAobWF4Y291bnQgPCAwKQogICAgICAgICBtYXhjb3VudCA9IFBZX1NTSVpFX1RfTUFYOworICAgIGVsc2UgaWYgKG1heGNvdW50ID09IDAgfHwgc2VsZi0+bGVuZ3RoID09IDApCisgICAgICAgIGdvdG8gbm90aGluZzsKIAogICAgIGlmIChzdHIxLT5sZW5ndGggPT0gc3RyMi0+bGVuZ3RoKSB7Ci0gICAgICAgIC8qIHNhbWUgbGVuZ3RoICovCiAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgLyogc2FtZSBsZW5ndGggKi8KKyAgICAgICAgaWYgKHN0cjEtPmxlbmd0aCA9PSAwKQorICAgICAgICAgICAgZ290byBub3RoaW5nOwogICAgICAgICBpZiAoc3RyMS0+bGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgIC8qIHJlcGxhY2UgY2hhcmFjdGVycyAqLwogICAgICAgICAgICAgUHlfVU5JQ09ERSB1MSwgdTI7CkBAIC02NjQzLDggKzY5NTEsOCBAQAogICAgICAgICAgICAgICAgICAgICB1LT5zdHJbaV0gPSB1MjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpID0gZmFzdHNlYXJjaCgKLSAgICAgICAgICAgICAgICBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCwgc3RyMS0+c3RyLCBzdHIxLT5sZW5ndGgsIEZBU1RfU0VBUkNICisgICAgICAgICAgICBpID0gc3RyaW5nbGliX2ZpbmQoCisgICAgICAgICAgICAgICAgc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLCAwCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGlmIChpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG5vdGhpbmc7CkBAIC02NjUyLDE0ICs2OTYwLDIwIEBACiAgICAgICAgICAgICBpZiAoIXUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBQeV9VTklDT0RFX0NPUFkodS0+c3RyLCBzZWxmLT5zdHIsIHNlbGYtPmxlbmd0aCk7Ci0gICAgICAgICAgICB3aGlsZSAoaSA8PSBzZWxmLT5sZW5ndGggLSBzdHIxLT5sZW5ndGgpCi0gICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfTUFUQ0goc2VsZiwgaSwgc3RyMSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tbWF4Y291bnQgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfQ09QWSh1LT5zdHIraSwgc3RyMi0+c3RyLCBzdHIyLT5sZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBpICs9IHN0cjEtPmxlbmd0aDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaSsrOworCisgICAgICAgICAgICAvKiBjaGFuZ2UgZXZlcnl0aGluZyBpbi1wbGFjZSwgc3RhcnRpbmcgd2l0aCB0aGlzIG9uZSAqLworICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHUtPnN0citpLCBzdHIyLT5zdHIsIHN0cjItPmxlbmd0aCk7CisgICAgICAgICAgICBpICs9IHN0cjEtPmxlbmd0aDsKKworICAgICAgICAgICAgd2hpbGUgKCAtLW1heGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIGkgPSBzdHJpbmdsaWJfZmluZChzZWxmLT5zdHIraSwgc2VsZi0+bGVuZ3RoLWksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHUtPnN0citpLCBzdHIyLT5zdHIsIHN0cjItPmxlbmd0aCk7CisgICAgICAgICAgICAgICAgaSArPSBzdHIxLT5sZW5ndGg7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogCkBAIC02NjY4LDkgKzY5ODIsOCBAQAogICAgICAgICBQeV9VTklDT0RFICpwOwogCiAgICAgICAgIC8qIHJlcGxhY2Ugc3RyaW5ncyAqLwotICAgICAgICBuID0gc3RyaW5nbGliX2NvdW50KHNlbGYtPnN0ciwgc2VsZi0+bGVuZ3RoLCBzdHIxLT5zdHIsIHN0cjEtPmxlbmd0aCk7Ci0gICAgICAgIGlmIChuID4gbWF4Y291bnQpCi0gICAgICAgICAgICBuID0gbWF4Y291bnQ7CisgICAgICAgIG4gPSBzdHJpbmdsaWJfY291bnQoc2VsZi0+c3RyLCBzZWxmLT5sZW5ndGgsIHN0cjEtPnN0ciwgc3RyMS0+bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGNvdW50KTsKICAgICAgICAgaWYgKG4gPT0gMCkKICAgICAgICAgICAgIGdvdG8gbm90aGluZzsKICAgICAgICAgLyogbmV3X3NpemUgPSBzZWxmLT5sZW5ndGggKyBuICogKHN0cjItPmxlbmd0aCAtIHN0cjEtPmxlbmd0aCkpOyAqLwpAQCAtNjcwMCwxNSArNzAxMywxMiBAQAogICAgICAgICBpZiAoc3RyMS0+bGVuZ3RoID4gMCkgewogICAgICAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKICAgICAgICAgICAgICAgICAvKiBsb29rIGZvciBuZXh0IG1hdGNoICovCi0gICAgICAgICAgICAgICAgaiA9IGk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGogPD0gZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoUHlfVU5JQ09ERV9NQVRDSChzZWxmLCBqLCBzdHIxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBqKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChqID4gaSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaiA+IGUpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqID0gc3RyaW5nbGliX2ZpbmQoc2VsZi0+c3RyK2ksIHNlbGYtPmxlbmd0aC1pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIxLT5zdHIsIHN0cjEtPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSk7CisgICAgICAgICAgICAgICAgaWYgKGogPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGogPiBpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgdW5jaGFuZ2VkIHBhcnQgW2k6al0gKi8KICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9DT1BZKHAsIHNlbGYtPnN0citpLCBqLWkpOwogICAgICAgICAgICAgICAgICAgICBwICs9IGogLSBpOwpAQCAtNjk3MCwxMCArNzI4MCw3IEBACiAgICAgICAgICAgICByZXR1cm4gKChpbnQpaWRbaV0gPCAoaW50KXN0cltpXSkgPyAtMSA6IDE7CiAgICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCiAgICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KLSAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKHVuaSkgIT0gaSkKLSAgICAgICAgLyogV2UnbGwgc2F5IHRoZSBQeXRob24gc3RyaW5nIGlzIGxvbmdlci4gKi8KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgaWYgKGlkW2ldKQorICAgIGlmIChQeVVuaWNvZGVfR0VUX1NJWkUodW5pKSAhPSBpIHx8IGlkW2ldKQogICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLwogICAgIGlmIChzdHJbaV0pCiAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLwpAQCAtNzE1NCwxMSArNzQ2MSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIEZJWF9TVEFSVF9FTkQoc2VsZik7Ci0KKyAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBzZWxmLT5sZW5ndGgpOwogICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tU3NpemVfdCgKICAgICAgICAgc3RyaW5nbGliX2NvdW50KHNlbGYtPnN0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0cmluZy0+c3RyLCBzdWJzdHJpbmctPmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKQogICAgICAgICApOwogCiAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CkBAIC03MTY3LDM5ICs3NDc0LDI2IEBACiB9CiAKIFB5RG9jX1NUUlZBUihlbmNvZGVfX2RvY19fLAotICAgICAgICAgICAgICJTLmVuY29kZShbZW5jb2RpbmdbLCBlcnJvcnNdXSkgLT4gYnl0ZXNcblwKKyAgICAgICAgICAgICAiUy5lbmNvZGUoZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKSAtPiBieXRlc1xuXAogXG5cCi1FbmNvZGUgUyB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgZW5jb2RpbmcuIGVuY29kaW5nIGRlZmF1bHRzXG5cCi10byB0aGUgZGVmYXVsdCBlbmNvZGluZy4gZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3JcblwKK0VuY29kZSBTIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciBlbmNvZGluZy4gRGVmYXVsdCBlbmNvZGluZ1xuXAoraXMgJ3V0Zi04Jy4gZXJyb3JzIG1heSBiZSBnaXZlbiB0byBzZXQgYSBkaWZmZXJlbnQgZXJyb3JcblwKIGhhbmRsaW5nIHNjaGVtZS4gRGVmYXVsdCBpcyAnc3RyaWN0JyBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlXG5cCiBhIFVuaWNvZGVFbmNvZGVFcnJvci4gT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSAnaWdub3JlJywgJ3JlcGxhY2UnIGFuZFxuXAogJ3htbGNoYXJyZWZyZXBsYWNlJyBhcyB3ZWxsIGFzIGFueSBvdGhlciBuYW1lIHJlZ2lzdGVyZWQgd2l0aFxuXAogY29kZWNzLnJlZ2lzdGVyX2Vycm9yIHRoYXQgY2FuIGhhbmRsZSBVbmljb2RlRW5jb2RlRXJyb3JzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZV9lbmNvZGUoUHlVbmljb2RlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3VuaWNvZGVfZW5jb2RlKFB5VW5pY29kZU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJlbmNvZGluZyIsICJlcnJvcnMiLCAwfTsKICAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7CiAgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifHNzOmVuY29kZSIsICZlbmNvZGluZywgJmVycm9ycykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifHNzOmVuY29kZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB2ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygoUHlPYmplY3QgKilzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKCFQeUJ5dGVzX0NoZWNrKHYpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhIGJ5dGVzIG9iamVjdCAiCi0gICAgICAgICAgICAgICAgICAgICAiKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIHY7Ci0KLSAgb25FcnJvcjoKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygoUHlPYmplY3QgKilzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLApAQCAtNzMzNCwxMiArNzYyOCwxMiBAQAogCiAvKiBCZWxpZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9kdWNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgQVNDSUkgc3RyaW5ncwogICAgYXMgc3RyaW5nX2hhc2goKS4gKi8KLXN0YXRpYyBsb25nCitzdGF0aWMgUHlfaGFzaF90CiB1bmljb2RlX2hhc2goUHlVbmljb2RlT2JqZWN0ICpzZWxmKQogewogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5X1VOSUNPREUgKnA7Ci0gICAgbG9uZyB4OworICAgIFB5X2hhc2hfdCB4OwogCiAgICAgaWYgKHNlbGYtPmhhc2ggIT0gLTEpCiAgICAgICAgIHJldHVybiBzZWxmLT5oYXNoOwpAQCAtODcwNCw2ICs4OTk4LDEzIEBACiB7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhudW1mcmVlKTsKIH0KKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfX2RlY2ltYWwyYXNjaWkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9UcmFuc2Zvcm1EZWNpbWFsVG9BU0NJSShQeVVuaWNvZGVfQVNfVU5JQ09ERShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRShzZWxmKSk7Cit9CiAjZW5kaWYKIAogUHlEb2NfU1RSVkFSKHN0YXJ0c3dpdGhfX2RvY19fLApAQCAtODgxMCw2ICs5MTExLDEyIEBACiBSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiBTLCB1c2luZyBzdWJzdGl0dXRpb25zIGZyb20gYXJncyBhbmQga3dhcmdzLlxuXAogVGhlIHN1YnN0aXR1dGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYnJhY2VzICgneycgYW5kICd9JykuIik7CiAKK1B5RG9jX1NUUlZBUihmb3JtYXRfbWFwX19kb2NfXywKKyAgICAgICAgICAgICAiUy5mb3JtYXRfbWFwKG1hcHBpbmcpIC0+IHN0clxuXAorXG5cCitSZXR1cm4gYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiBTLCB1c2luZyBzdWJzdGl0dXRpb25zIGZyb20gbWFwcGluZy5cblwKK1RoZSBzdWJzdGl0dXRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGJyYWNlcyAoJ3snIGFuZCAnfScpLiIpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZV9fZm9ybWF0X18oUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQogewpAQCAtODg0NCwxMyArOTE1MSwxMiBAQAogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIodSMpIiwgdi0+c3RyLCB2LT5sZW5ndGgpOwogfQogCi0KIHN0YXRpYyBQeU1ldGhvZERlZiB1bmljb2RlX21ldGhvZHNbXSA9IHsKIAogICAgIC8qIE9yZGVyIGlzIGFjY29yZGluZyB0byBjb21tb24gdXNhZ2U6IG9mdGVuIHVzZWQgbWV0aG9kcyBzaG91bGQKICAgICAgICBhcHBlYXIgZmlyc3QsIHNpbmNlIGxvb2t1cCBpcyBkb25lIHNlcXVlbnRpYWxseS4gKi8KIAotICAgIHsiZW5jb2RlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2VuY29kZSwgTUVUSF9WQVJBUkdTLCBlbmNvZGVfX2RvY19ffSwKKyAgICB7ImVuY29kZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9lbmNvZGUsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGVuY29kZV9fZG9jX199LAogICAgIHsicmVwbGFjZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yZXBsYWNlLCBNRVRIX1ZBUkFSR1MsIHJlcGxhY2VfX2RvY19ffSwKICAgICB7InNwbGl0IiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0LCBNRVRIX1ZBUkFSR1MsIHNwbGl0X19kb2NfX30sCiAgICAgeyJyc3BsaXQiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcnNwbGl0LCBNRVRIX1ZBUkFSR1MsIHJzcGxpdF9fZG9jX199LApAQCAtODg5MSw5ICs5MTk3LDggQEAKICAgICB7ImlzcHJpbnRhYmxlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX2lzcHJpbnRhYmxlLCBNRVRIX05PQVJHUywgaXNwcmludGFibGVfX2RvY19ffSwKICAgICB7InpmaWxsIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3pmaWxsLCBNRVRIX1ZBUkFSR1MsIHpmaWxsX19kb2NfX30sCiAgICAgeyJmb3JtYXQiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXQsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGZvcm1hdF9fZG9jX199LAorICAgIHsiZm9ybWF0X21hcCIsIChQeUNGdW5jdGlvbikgZG9fc3RyaW5nX2Zvcm1hdF9tYXAsIE1FVEhfTywgZm9ybWF0X21hcF9fZG9jX199LAogICAgIHsiX19mb3JtYXRfXyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9fZm9ybWF0X18sIE1FVEhfVkFSQVJHUywgcF9mb3JtYXRfX2RvY19ffSwKLSAgICB7Il9mb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdCIsIChQeUNGdW5jdGlvbikgZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQsIE1FVEhfTk9BUkdTfSwKLSAgICB7Il9mb3JtYXR0ZXJfcGFyc2VyIiwgKFB5Q0Z1bmN0aW9uKSBmb3JtYXR0ZXJfcGFyc2VyLCBNRVRIX05PQVJHU30sCiAgICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LApAQCAtODkwMiw4ICs5MjA3LDkgQEAKICNlbmRpZgogCiAjaWYgMAotICAgIC8qIFRoaXMgb25lIGlzIGp1c3QgdXNlZCBmb3IgZGVidWdnaW5nIHRoZSBpbXBsZW1lbnRhdGlvbi4gKi8KKyAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCiAgICAgeyJmcmVlbGlzdHNpemUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZnJlZWxpc3RzaXplLCBNRVRIX05PQVJHU30sCisgICAgeyJfZGVjaW1hbDJhc2NpaSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9fZGVjaW1hbDJhc2NpaSwgTUVUSF9OT0FSR1N9LAogI2VuZGlmCiAKICAgICB7Il9fZ2V0bmV3YXJnc19fIiwgIChQeUNGdW5jdGlvbil1bmljb2RlX2dldG5ld2FyZ3MsIE1FVEhfTk9BUkdTfSwKQEAgLTg5NTQsNyArOTI2MCw3IEBACiAgICAgICAgIFB5X1VOSUNPREUqIHJlc3VsdF9idWY7CiAgICAgICAgIFB5T2JqZWN0KiByZXN1bHQ7CiAKLSAgICAgICAgaWYgKFB5U2xpY2VfR2V0SW5kaWNlc0V4KChQeVNsaWNlT2JqZWN0KilpdGVtLCBQeVVuaWNvZGVfR0VUX1NJWkUoc2VsZiksCisgICAgICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeChpdGVtLCBQeVVuaWNvZGVfR0VUX1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZzdG9wLCAmc3RlcCwgJnNsaWNlbGVuZ3RoKSA8IDApIHsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xMDAwOCw2ICsxMDMxNCwxNSBAQAogICAgIHJldHVybiBzMTsKIH0KIAorUHlfVU5JQ09ERSoKK1B5X1VOSUNPREVfc3RyY2F0KFB5X1VOSUNPREUgKnMxLCBjb25zdCBQeV9VTklDT0RFICpzMikKK3sKKyAgICBQeV9VTklDT0RFICp1MSA9IHMxOworICAgIHUxICs9IFB5X1VOSUNPREVfc3RybGVuKHUxKTsKKyAgICBQeV9VTklDT0RFX3N0cmNweSh1MSwgczIpOworICAgIHJldHVybiBzMTsKK30KKwogaW50CiBQeV9VTklDT0RFX3N0cmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIpCiB7CkBAIC0xMDAyMiw2ICsxMDMzNywyMyBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK1B5X1VOSUNPREVfc3RybmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIsIHNpemVfdCBuKQoreworICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgdTEsIHUyOworICAgIGZvciAoOyBuICE9IDA7IG4tLSkgeworICAgICAgICB1MSA9ICpzMTsKKyAgICAgICAgdTIgPSAqczI7CisgICAgICAgIGlmICh1MSAhPSB1MikKKyAgICAgICAgICAgIHJldHVybiAodTEgPCB1MikgPyAtMSA6ICsxOworICAgICAgICBpZiAodTEgPT0gJ1wwJykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBzMSsrOworICAgICAgICBzMisrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogUHlfVU5JQ09ERSoKIFB5X1VOSUNPREVfc3RyY2hyKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X1VOSUNPREUgYykKIHsKQEAgLTEwMDMyLDE1ICsxMDM2NCw3MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitQeV9VTklDT0RFKgorUHlfVU5JQ09ERV9zdHJyY2hyKGNvbnN0IFB5X1VOSUNPREUgKnMsIFB5X1VOSUNPREUgYykKK3sKKyAgICBjb25zdCBQeV9VTklDT0RFICpwOworICAgIHAgPSBzICsgUHlfVU5JQ09ERV9zdHJsZW4ocyk7CisgICAgd2hpbGUgKHAgIT0gcykgeworICAgICAgICBwLS07CisgICAgICAgIGlmICgqcCA9PSBjKQorICAgICAgICAgICAgcmV0dXJuIChQeV9VTklDT0RFKilwOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworUHlfVU5JQ09ERSoKK1B5VW5pY29kZV9Bc1VuaWNvZGVDb3B5KFB5T2JqZWN0ICpvYmplY3QpCit7CisgICAgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlID0gKFB5VW5pY29kZU9iamVjdCAqKW9iamVjdDsKKyAgICBQeV9VTklDT0RFICpjb3B5OworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKworICAgIC8qIEVuc3VyZSB3ZSB3b24ndCBvdmVyZmxvdyB0aGUgc2l6ZS4gKi8KKyAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKHVuaWNvZGUpID4gKChQWV9TU0laRV9UX01BWCAvIHNpemVvZihQeV9VTklDT0RFKSkgLSAxKSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfU0laRSh1bmljb2RlKSArIDE7IC8qIGNvcHkgdGhlIG51bCBjaGFyYWN0ZXIgKi8KKyAgICBzaXplICo9IHNpemVvZihQeV9VTklDT0RFKTsKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweShjb3B5LCBQeVVuaWNvZGVfQVNfVU5JQ09ERSh1bmljb2RlKSwgc2l6ZSk7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKKy8qIEEgX3N0cmluZyBtb2R1bGUsIHRvIGV4cG9ydCBmb3JtYXR0ZXJfcGFyc2VyIGFuZCBmb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdAorICAgdG8gdGhlIHN0cmluZy5Gb3JtYXR0ZXIgY2xhc3MgaW1wbGVtZW50ZWQgaW4gUHl0aG9uLiAqLworCitzdGF0aWMgUHlNZXRob2REZWYgX3N0cmluZ19tZXRob2RzW10gPSB7CisgICAgeyJmb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdCIsIChQeUNGdW5jdGlvbikgZm9ybWF0dGVyX2ZpZWxkX25hbWVfc3BsaXQsCisgICAgIE1FVEhfTywgUHlEb2NfU1RSKCJzcGxpdCB0aGUgYXJndW1lbnQgYXMgYSBmaWVsZCBuYW1lIil9LAorICAgIHsiZm9ybWF0dGVyX3BhcnNlciIsIChQeUNGdW5jdGlvbikgZm9ybWF0dGVyX3BhcnNlciwKKyAgICAgTUVUSF9PLCBQeURvY19TVFIoInBhcnNlIHRoZSBhcmd1bWVudCBhcyBhIGZvcm1hdCBzdHJpbmciKX0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9zdHJpbmdfbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3N0cmluZyIsCisgICAgUHlEb2NfU1RSKCJzdHJpbmcgaGVscGVyIG1vZHVsZSIpLAorICAgIDAsCisgICAgX3N0cmluZ19tZXRob2RzLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX3N0cmluZyh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zdHJpbmdfbW9kdWxlKTsKK30KKwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgotCi0KLS8qCi0gIExvY2FsIHZhcmlhYmxlczoKLSAgYy1iYXNpYy1vZmZzZXQ6IDQKLSAgaW5kZW50LXRhYnMtbW9kZTogbmlsCi0gIEVuZDoKLSovCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggZjQ2ZjFmYi4uODhhNzkxMiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtMSw0ICsxLDQgQEAKLS8qIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFRvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IDIuNiAqLworLyogdGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgMy4yICovCiAKIC8qIGEgbGlzdCBvZiB1bmlxdWUgY2hhcmFjdGVyIHR5cGUgZGVzY3JpcHRvcnMgKi8KIGNvbnN0IF9QeVVuaWNvZGVfVHlwZVJlY29yZCBfUHlVbmljb2RlX1R5cGVSZWNvcmRzW10gPSB7CkBAIC04LDI0ICs4LDI1IEBACiAgICAgezAsIDAsIDAsIDAsIDAsIDQ4fSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMTA1Nn0sCiAgICAgezAsIDAsIDAsIDAsIDAsIDEwMjR9LAotICAgIHswLCAwLCAwLCAwLCAwLCAxNTQyfSwKLSAgICB7MCwgMCwgMCwgMSwgMSwgMTU0Mn0sCi0gICAgezAsIDAsIDAsIDIsIDIsIDE1NDJ9LAotICAgIHswLCAwLCAwLCAzLCAzLCAxNTQyfSwKLSAgICB7MCwgMCwgMCwgNCwgNCwgMTU0Mn0sCi0gICAgezAsIDAsIDAsIDUsIDUsIDE1NDJ9LAotICAgIHswLCAwLCAwLCA2LCA2LCAxNTQyfSwKLSAgICB7MCwgMCwgMCwgNywgNywgMTU0Mn0sCi0gICAgezAsIDAsIDAsIDgsIDgsIDE1NDJ9LAotICAgIHswLCAwLCAwLCA5LCA5LCAxNTQyfSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgNTYzOH0sCisgICAgezAsIDAsIDAsIDEsIDEsIDU2Mzh9LAorICAgIHswLCAwLCAwLCAyLCAyLCA1NjM4fSwKKyAgICB7MCwgMCwgMCwgMywgMywgNTYzOH0sCisgICAgezAsIDAsIDAsIDQsIDQsIDU2Mzh9LAorICAgIHswLCAwLCAwLCA1LCA1LCA1NjM4fSwKKyAgICB7MCwgMCwgMCwgNiwgNiwgNTYzOH0sCisgICAgezAsIDAsIDAsIDcsIDcsIDU2Mzh9LAorICAgIHswLCAwLCAwLCA4LCA4LCA1NjM4fSwKKyAgICB7MCwgMCwgMCwgOSwgOSwgNTYzOH0sCiAgICAgezAsIDMyLCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgMCwgMCwgMCwgMCwgMTUzNn0sCiAgICAgezY1NTA0LCAwLCA2NTUwNCwgMCwgMCwgMTgwMX0sCiAgICAgezAsIDAsIDAsIDAsIDAsIDE4MDF9LAotICAgIHswLCAwLCAwLCAwLCAyLCAxMDI4fSwKLSAgICB7MCwgMCwgMCwgMCwgMywgMTAyOH0sCisgICAgezAsIDAsIDAsIDAsIDIsIDUxMjR9LAorICAgIHswLCAwLCAwLCAwLCAzLCA1MTI0fSwKICAgICB7NzQzLCAwLCA3NDMsIDAsIDAsIDE4MDF9LAotICAgIHswLCAwLCAwLCAwLCAxLCAxMDI4fSwKKyAgICB7MCwgMCwgMCwgMCwgMSwgNTEyNH0sCisgICAgezAsIDAsIDAsIDAsIDAsIDUxMjB9LAogICAgIHsxMjEsIDAsIDEyMSwgMCwgMCwgMTgwMX0sCiAgICAgezAsIDEsIDAsIDAsIDAsIDE5MjF9LAogICAgIHs2NTUzNSwgMCwgNjU1MzUsIDAsIDAsIDE4MDF9LApAQCAtNjMsMTcgKzY0LDIwIEBACiAgICAgezAsIDEwNzk1LCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgNjUzNzMsIDAsIDAsIDAsIDE5MjF9LAogICAgIHswLCAxMDc5MiwgMCwgMCwgMCwgMTkyMX0sCisgICAgezEwODE1LCAwLCAxMDgxNSwgMCwgMCwgMTgwMX0sCiAgICAgezAsIDY1MzQxLCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgNjksIDAsIDAsIDAsIDE5MjF9LAogICAgIHswLCA3MSwgMCwgMCwgMCwgMTkyMX0sCiAgICAgezEwNzgzLCAwLCAxMDc4MywgMCwgMCwgMTgwMX0sCiAgICAgezEwNzgwLCAwLCAxMDc4MCwgMCwgMCwgMTgwMX0sCisgICAgezEwNzgyLCAwLCAxMDc4MiwgMCwgMCwgMTgwMX0sCiAgICAgezY1MzI2LCAwLCA2NTMyNiwgMCwgMCwgMTgwMX0sCiAgICAgezY1MzMwLCAwLCA2NTMzMCwgMCwgMCwgMTgwMX0sCiAgICAgezY1MzMxLCAwLCA2NTMzMSwgMCwgMCwgMTgwMX0sCiAgICAgezY1MzM0LCAwLCA2NTMzNCwgMCwgMCwgMTgwMX0sCiAgICAgezY1MzMzLCAwLCA2NTMzMywgMCwgMCwgMTgwMX0sCiAgICAgezY1MzI5LCAwLCA2NTMyOSwgMCwgMCwgMTgwMX0sCisgICAgezQyODkzLCA2MTMsIDQyODkzLCAwLCAwLCAzODQ5fSwKICAgICB7NjUzMjcsIDAsIDY1MzI3LCAwLCAwLCAxODAxfSwKICAgICB7NjUzMjUsIDAsIDY1MzI1LCAwLCAwLCAxODAxfSwKICAgICB7MTA3NDMsIDAsIDEwNzQzLCAwLCAwLCAxODAxfSwKQEAgLTExNywxNiArMTIxLDE2IEBACiAgICAgezY1NDg4LCAwLCA2NTQ4OCwgMCwgMCwgMTgwMX0sCiAgICAgezAsIDAsIDAsIDAsIDAsIDE1Mzd9LAogICAgIHswLCA3MjY0LCAwLCAwLCAwLCAxOTIxfSwKLSAgICB7MCwgMCwgMCwgMCwgMSwgMTU0MH0sCi0gICAgezAsIDAsIDAsIDAsIDIsIDE1NDB9LAotICAgIHswLCAwLCAwLCAwLCAzLCAxNTQwfSwKLSAgICB7MCwgMCwgMCwgMCwgNCwgMTU0MH0sCi0gICAgezAsIDAsIDAsIDAsIDUsIDE1NDB9LAotICAgIHswLCAwLCAwLCAwLCA2LCAxNTQwfSwKLSAgICB7MCwgMCwgMCwgMCwgNywgMTU0MH0sCi0gICAgezAsIDAsIDAsIDAsIDgsIDE1NDB9LAotICAgIHswLCAwLCAwLCAwLCA5LCAxNTQwfSwKLSAgICB7MCwgMCwgMCwgMCwgMCwgMTc5Mn0sCisgICAgezAsIDAsIDAsIDAsIDEsIDU2MzZ9LAorICAgIHswLCAwLCAwLCAwLCAyLCA1NjM2fSwKKyAgICB7MCwgMCwgMCwgMCwgMywgNTYzNn0sCisgICAgezAsIDAsIDAsIDAsIDQsIDU2MzZ9LAorICAgIHswLCAwLCAwLCAwLCA1LCA1NjM2fSwKKyAgICB7MCwgMCwgMCwgMCwgNiwgNTYzNn0sCisgICAgezAsIDAsIDAsIDAsIDcsIDU2MzZ9LAorICAgIHswLCAwLCAwLCAwLCA4LCA1NjM2fSwKKyAgICB7MCwgMCwgMCwgMCwgOSwgNTYzNn0sCisgICAgezAsIDAsIDAsIDAsIDAsIDU4ODh9LAogICAgIHs0Mjg3NywgNzU0NSwgNDI4NzcsIDAsIDAsIDM4NDl9LAogICAgIHszODE0LCAwLCAzODE0LCAwLCAwLCAxODAxfSwKICAgICB7NjU0NzcsIDAsIDY1NDc3LCAwLCAwLCAxODAxfSwKQEAgLTE0OSwyMCArMTUzLDIxIEBACiAgICAgezAsIDY1NDI0LCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgNjU0MDgsIDAsIDAsIDAsIDE5MjF9LAogICAgIHswLCA2NTQxMCwgMCwgMCwgMCwgMTkyMX0sCi0gICAgezAsIDAsIDAsIDAsIDAsIDEwMjh9LAotICAgIHswLCAwLCAwLCAwLCA0LCAxMDI4fSwKLSAgICB7MCwgMCwgMCwgMCwgNSwgMTAyOH0sCi0gICAgezAsIDAsIDAsIDAsIDYsIDEwMjh9LAotICAgIHswLCAwLCAwLCAwLCA3LCAxMDI4fSwKLSAgICB7MCwgMCwgMCwgMCwgOCwgMTAyOH0sCi0gICAgezAsIDAsIDAsIDAsIDksIDEwMjh9LAorICAgIHswLCAwLCAwLCAwLCAwLCA1MTI0fSwKKyAgICB7MCwgMCwgMCwgMCwgNCwgNTEyNH0sCisgICAgezAsIDAsIDAsIDAsIDUsIDUxMjR9LAorICAgIHswLCAwLCAwLCAwLCA2LCA1MTI0fSwKKyAgICB7MCwgMCwgMCwgMCwgNywgNTEyNH0sCisgICAgezAsIDAsIDAsIDAsIDgsIDUxMjR9LAorICAgIHswLCAwLCAwLCAwLCA5LCA1MTI0fSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgMTc5Mn0sCiAgICAgezAsIDU4MDE5LCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgNTcxNTMsIDAsIDAsIDAsIDE5MjF9LAogICAgIHswLCA1NzI3NCwgMCwgMCwgMCwgMTkyMX0sCiAgICAgezAsIDI4LCAwLCAwLCAwLCAxOTIxfSwKICAgICB7NjU1MDgsIDAsIDY1NTA4LCAwLCAwLCAxODAxfSwKLSAgICB7MCwgMTYsIDAsIDAsIDAsIDE3OTJ9LAotICAgIHs2NTUyMCwgMCwgNjU1MjAsIDAsIDAsIDE3OTJ9LAorICAgIHswLCAxNiwgMCwgMCwgMCwgNTg4OH0sCisgICAgezY1NTIwLCAwLCA2NTUyMCwgMCwgMCwgNTg4OH0sCiAgICAgezAsIDI2LCAwLCAwLCAwLCAxMDI0fSwKICAgICB7NjU1MTAsIDAsIDY1NTEwLCAwLCAwLCAxMDI0fSwKICAgICB7MCwgNTQ3OTMsIDAsIDAsIDAsIDE5MjF9LApAQCAtMTczLDIxNCArMTc4LDUyNSBAQAogICAgIHswLCA1NDc1NiwgMCwgMCwgMCwgMTkyMX0sCiAgICAgezAsIDU0Nzg3LCAwLCAwLCAwLCAxOTIxfSwKICAgICB7MCwgNTQ3NTMsIDAsIDAsIDAsIDE5MjF9LAorICAgIHswLCA1NDc1NCwgMCwgMCwgMCwgMTkyMX0sCisgICAgezAsIDU0NzIxLCAwLCAwLCAwLCAxOTIxfSwKICAgICB7NTgyNzIsIDAsIDU4MjcyLCAwLCAwLCAxODAxfSwKKyAgICB7MCwgMCwgMCwgMCwgMCwgNTg4OX0sCiAgICAgezQyODc3LCA3NTQ1LCA0Mjg3NywgMCwgMCwgMzk2OX0sCisgICAgezQyODkzLCA2MTMsIDQyODkzLCAwLCAwLCAzOTY5fSwKICAgICB7MCwgNDAsIDAsIDAsIDAsIDE5MjF9LAogICAgIHs2NTQ5NiwgMCwgNjU0OTYsIDAsIDAsIDE4MDF9LAogfTsKIAogLyogdHlwZSBpbmRleGVzICovCi0jZGVmaW5lIFNISUZUIDgKKyNkZWZpbmUgU0hJRlQgNwogc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5kZXgxW10gPSB7CiAgICAgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAKLSAgICAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzQsIDM3LCAKLSAgICAzOCwgMzQsIDM0LCAzNCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCAzNCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDQ3LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAKLSAgICAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCA0OCwgMjEsIDIxLCAyMSwgMjEsIDQ5LCAKLSAgICAyMSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA4LCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgNTUsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDIxLCA1NywgNTgsIDU5LCA2MCwgNjEsIAotICAgIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDgsIDgsIDgsIDY4LCA2OSwgNzAsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDIxLCAyMSwgMjEsIDcxLCA3MiwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgNzMsIDc0LCAKLSAgICA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4MSwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgOCwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgCi0gICAgMjEsIDIxLCAyMSwgMjEsIDgyLCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAyMSwgMjEsIDgzLCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCAKLSAgICA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4LCA4NCwgODUsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIDgsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDg2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIAotICAgIDU2LCA1NiwgNTYsIDU2LCA1NiwgNTYsIDU2LCA4NiwgCisgICAgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNCwgMzUsIDM2LCAzNywgCisgICAgMzgsIDM5LCAzNCwgMzQsIDM0LCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjQsIDY0LCA2NSwgNjYsIDY3LCA2NCwgCisgICAgNjQsIDY0LCA2NCwgNjgsIDY5LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA3MCwgMTcsIDcxLCA3MiwgNzMsIDc0LCA3NSwgCisgICAgNzYsIDY0LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgNjQsIDY0LCA4NCwgODUsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDg2LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDg3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA4OCwgODksIDkwLCA5MSwgMzQsIDM0LCAzNCwgOTIsIDM0LCAzNCwgCisgICAgMzQsIDkzLCA5NCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA5NSwgMzQsIDM0LCAzNCwgOTYsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCA5NywgOTgsIDk5LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxMDAsIDEwMSwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxMDIsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMTAzLCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDEwMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAxMDMsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNSwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwNiwgMTA3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDEwOCwgMTA5LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDExMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMTExLCAzNCwgMzQsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIAorICAgIDEyMSwgMTIyLCAxMjMsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDEyNCwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI2LCAxMjcsIDEyOCwgCisgICAgMTI5LCAxMzAsIDEzMSwgMTMyLCAzNCwgMTMzLCAxMzQsIDEzNSwgMTM2LCAxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAKKyAgICAxNywgMTQzLCAxNDQsIDE0NSwgMTQ2LCAxNDcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE0OCwgMTcsIDE0OSwgMTcsIAorICAgIDE1MCwgMTcsIDE1MSwgMTcsIDE1MiwgMTcsIDE3LCAxNywgMTUzLCAxNywgMTcsIDE3LCAxNTQsIDE1NSwgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTU2LCAxNywgMTU3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTU4LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMzQsIDM0LCAzNCwgMzQsIDE1OSwgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE2MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgNjQsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTcsIDE2NSwgMTcsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIAorICAgIDE3MiwgMTczLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNzQsIDE3NSwgMTc2LCAKKyAgICAxNzcsIDE3OCwgMTcsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCA2NSwgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxODcsIDE4OCwgMTg5LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA4NiwgMTkwLCAzNCwgMTkxLCAKKyAgICAxOTIsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDE5MywgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxOTQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAxOTUsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTk2LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIAorICAgIDM0LCAzNCwgMzQsIDM0LCAzNCwgMTk3LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDE5OCwgMzQsIDE5OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDM0LCAxOTMsIDM0LCAzNCwgMTk5LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAyMDAsIDE3LCAyMDEsIDIwMiwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMjAzLCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAKKyAgICAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgCisgICAgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIAorICAgIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDEyNSwgMTI1LCAxMjUsIDIwMywgCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmRleDJbXSA9IHsKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAzLCAyLCAyLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCAzLCAzLCAzLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAzLCAzLCAzLCAyLCA0LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNiwgMTYsIDE2LCAxNiwgCiAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCkBAIC0zODgsNTQ4ICs3MDQsNTAxIEBACiAgICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCA1LCA1LCAKICAgICA1LCA1LCAxLCAxLCAxLCAxLCAxLCAxLCAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOSwgNSwgNSwgCi0gICAgMSwgNSwgNSwgNSwgNSwgMjAsIDIxLCA1LCAyMiwgNSwgMTcsIDUsIDIzLCAxOSwgNSwgNSwgNSwgNSwgNSwgMTYsIDE2LCAKKyAgICAxLCA1LCA1LCA1LCA1LCAyMCwgMjEsIDUsIDIyLCA1LCAxNywgNSwgMjMsIDE5LCA1LCAyNCwgMjQsIDI0LCA1LCAxNiwgMTYsIAogICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAogICAgIDE2LCAxNiwgMTYsIDUsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxOSwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgCiAgICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCA1LCAKLSAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjQsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI3LCAyOCwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTksIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAxOSwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI5LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAzMCwgMzEsIDMyLCAyNSwgMjYsIDI1LCAyNiwgMzMsIDI1LCAKLSAgICAyNiwgMzQsIDM0LCAyNSwgMjYsIDE5LCAzNSwgMzYsIDM3LCAyNSwgMjYsIDM0LCAzOCwgMzksIDQwLCA0MSwgMjUsIDI2LCAKLSAgICA0MiwgMTksIDQwLCA0MywgNDQsIDQ1LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCA0NiwgMjUsIDI2LCA0NiwgMTksIDE5LCAKLSAgICAyNSwgMjYsIDQ2LCAyNSwgMjYsIDQ3LCA0NywgMjUsIDI2LCAyNSwgMjYsIDQ4LCAyNSwgMjYsIDE5LCA0OSwgMjUsIDI2LCAKLSAgICAxOSwgNTAsIDQ5LCA0OSwgNDksIDQ5LCA1MSwgNTIsIDUzLCA1MSwgNTIsIDUzLCA1MSwgNTIsIDUzLCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgNTQsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDE5LCA1MSwgNTIsIDUzLCAKLSAgICAyNSwgMjYsIDU1LCA1NiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDU3LCAxOSwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNTgsIDI1LCAKLSAgICAyNiwgNTksIDYwLCAxOSwgMTksIDI1LCAyNiwgNjEsIDYyLCA2MywgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDY0LCA2NSwgMTksIDY2LCA2NywgMTksIDY4LCA2OCwgMTksIDY5LCAxOSwgNzAsIDE5LCAxOSwgMTksIDE5LCAKLSAgICA2OCwgMTksIDE5LCA3MSwgMTksIDE5LCAxOSwgMTksIDcyLCA3MywgMTksIDc0LCAxOSwgMTksIDE5LCA3MywgMTksIDc1LCAKLSAgICA3NiwgMTksIDE5LCA3NywgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDc4LCAxOSwgMTksIDc5LCAxOSwgMTksIDc5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgNzksIDgwLCA4MSwgODEsIDgyLCAxOSwgMTksIDE5LCAxOSwgMTksIDgzLCAxOSwgNDksIDE5LCAKKyAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMjUsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI4LCAyOSwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMTksIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAxOSwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDMwLCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAzMSwgMzIsIDMzLCAyNiwgMjcsIDI2LCAyNywgMzQsIDI2LCAKKyAgICAyNywgMzUsIDM1LCAyNiwgMjcsIDE5LCAzNiwgMzcsIDM4LCAyNiwgMjcsIDM1LCAzOSwgNDAsIDQxLCA0MiwgMjYsIDI3LCAKKyAgICA0MywgMTksIDQxLCA0NCwgNDUsIDQ2LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCA0NywgMjYsIDI3LCA0NywgMTksIDE5LCAKKyAgICAyNiwgMjcsIDQ3LCAyNiwgMjcsIDQ4LCA0OCwgMjYsIDI3LCAyNiwgMjcsIDQ5LCAyNiwgMjcsIDE5LCA1MCwgMjYsIDI3LCAKKyAgICAxOSwgNTEsIDUwLCA1MCwgNTAsIDUwLCA1MiwgNTMsIDU0LCA1MiwgNTMsIDU0LCA1MiwgNTMsIDU0LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgNTUsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDE5LCA1MiwgNTMsIDU0LCAKKyAgICAyNiwgMjcsIDU2LCA1NywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDU4LCAxOSwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNTksIDI2LCAKKyAgICAyNywgNjAsIDYxLCA2MiwgNjIsIDI2LCAyNywgNjMsIDY0LCA2NSwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDY2LCA2NywgNjgsIDY5LCA3MCwgMTksIDcxLCA3MSwgMTksIDcyLCAxOSwgNzMsIDE5LCAxOSwgMTksIDE5LCAKKyAgICA3MSwgMTksIDE5LCA3NCwgMTksIDc1LCAxOSwgMTksIDc2LCA3NywgMTksIDc4LCAxOSwgMTksIDE5LCA3NywgMTksIDc5LCAKKyAgICA4MCwgMTksIDE5LCA4MSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDgyLCAxOSwgMTksIDgzLCAxOSwgMTksIDgzLCAKKyAgICAxOSwgMTksIDE5LCAxOSwgODMsIDg0LCA4NSwgODUsIDg2LCAxOSwgMTksIDE5LCAxOSwgMTksIDg3LCAxOSwgNTAsIDE5LCAKICAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDUsIDUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNDksIDUsIDQ5LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNTAsIDUsIDUwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCA4NCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCA4OCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMjUsIDI2LCAyNSwgMjYsIDQ5LCA1LCAyNSwgMjYsIDAsIDAsIDg1LCAKLSAgICA0NCwgNDQsIDQ0LCA1LCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA4NiwgMTcsIDg3LCA4NywgODcsIDAsIDg4LCAwLCA4OSwgODksIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMjYsIDI3LCAyNiwgMjcsIDUwLCA1LCAyNiwgMjcsIDAsIDAsIDg5LCAKKyAgICA0NSwgNDUsIDQ1LCA1LCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA5MCwgMTcsIDkxLCA5MSwgOTEsIDAsIDkyLCAwLCA5MywgOTMsIAogICAgIDE5LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIAotICAgIDAsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDkwLCA5MSwgOTEsIDkxLCAxOSwgMTgsIDE4LCAxOCwgCi0gICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCA5MiwgMTgsIDE4LCAxOCwgCi0gICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgOTMsIDk0LCA5NCwgOTUsIDk2LCA5NywgOTgsIDk4LCA5OCwgOTksIDEwMCwgMTAxLCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAxMDIsIDEwMywgMTA0LCAxOSwgMTA1LCAxMDYsIDUsIDI1LCAyNiwgMTA3LCAyNSwgCi0gICAgMjYsIDE5LCA1NywgNTcsIDU3LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIAotICAgIDEwOCwgMTA4LCAxMDgsIDEwOCwgMTA4LCAxMDgsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMCwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgOTQsIDk1LCA5NSwgOTUsIDE5LCAxOCwgMTgsIDE4LCAKKyAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDk2LCAxOCwgMTgsIDE4LCAKKyAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCA5NywgOTgsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAyLCAxMDIsIDEwMywgCisgICAgMTA0LCAxMDUsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDEwNiwgMTA3LCAxMDgsIDE5LCAxMDksIDExMCwgNSwgMjYsIDI3LCAKKyAgICAxMTEsIDI2LCAyNywgMTksIDU4LCA1OCwgNTgsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAorICAgIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCiAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCi0gICAgMTYsIDE2LCAxNiwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgCi0gICAgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxMDMsIAotICAgIDEwMywgMTAzLCAxMDMsIDEwMywgMTAzLCAxMDMsIDEwMywgMTAzLCAxMDMsIDEwMywgMTAzLCAxMDMsIDEwMywgMTAzLCAKLSAgICAxMDMsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgCi0gICAgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCA1LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDEwOSwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAxMTAsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKLSAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgCi0gICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAotICAgIDExMSwgMTExLCAwLCAwLCA0OSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAotICAgIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTEyLCAxMTIsIDE5LCAwLCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAorICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAorICAgIDE4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAKKyAgICA1LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDExMywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIAorICAgIDI2LCAyNywgMjYsIDI3LCAxMTQsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMCwgMCwgNTAsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxOSwgMCwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCA1LCAxNywgNSwgMTcsIDE3LCA1LCAxNywgMTcsIDUsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA1LCA1LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDE3LCA1LCAxNywgMTcsIDUsIDE3LCAxNywgNSwgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUsIDUsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgMCwgMCwgNSwgNSwgMCwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1LCAKLSAgICA1LCA1LCA1LCA0OSwgNDksIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA1LCA0OSwgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDEsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDQ5LCA0OSwgMTcsIDE3LCA1LCAxNywgCi0gICAgMTcsIDE3LCAxNywgNDksIDQ5LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA0OSwgNDksIDQ5LCA1LCA1LCAKLSAgICA0OSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMSwgNDksIDE3LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICA1LCA1LCA1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDAsIDAsIDUsIDUsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAKKyAgICA1LCA1LCA1LCA1LCA1MCwgNTAsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1MCwgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDEsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUwLCA1MCwgMTcsIDE3LCA1LCAKKyAgICAxNywgMTcsIDE3LCAxNywgNTAsIDUwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1MCwgNTAsIDUwLCAKKyAgICA1LCA1LCA1MCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMSwgNTAsIDE3LCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgNDksIDQ5LCA1LCA1LCA1LCA1LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTcsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgNTAsIDUwLCA1LCA1LCA1LCA1LCA1MCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgCisgICAgMTcsIDE3LCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNTAsIDE3LCAxNywgMTcsIDUwLCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAwLCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAxNywgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCA0OSwgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDAsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNywgMTcsIDUsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxNCwgMTUsIDUsIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAKLSAgICAxNywgMTcsIDE3LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDAsIDAsIDE3LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDE3LCAxNywgMCwgMCwgMTcsIDE3LCAKLSAgICAxNywgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCAwLCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIAotICAgIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNDksIDQ5LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAKLSAgICAwLCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCi0gICAgNDksIDQ5LCAwLCA0OSwgNDksIDAsIDQ5LCA0OSwgMCwgMCwgMTcsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgCi0gICAgMCwgMTcsIDE3LCAwLCAwLCAxNywgMTcsIDE3LCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAKLSAgICAxNywgMTcsIDQ5LCA0OSwgNDksIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAxNywgCi0gICAgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMCwgMCwgCi0gICAgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgMTcsIDE3LCAwLCAwLCA2LCAKLSAgICA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgCi0gICAgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDAsIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgMCwgMTcsIDQ5LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMTcsIDE3LCAwLCAwLCAKLSAgICAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgMCwgNDksIAotICAgIDQ5LCA0OSwgMTcsIDE3LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1LCA0OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICAwLCAwLCAwLCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgNDksIDQ5LCAwLCA0OSwgMCwgNDksIAotICAgIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMTcsIAotICAgIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDQ5LCAxNywgMTcsIDE3LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAxNywgNTAsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUwLCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgNSwgNSwgNiwgCisgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAxNywgMTcsIDE3LCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDAsIDAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgCisgICAgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDE3LCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDAsIAorICAgIDE3LCAxNywgMCwgMCwgMTcsIDE3LCAxNywgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCAwLCA1MCwgCisgICAgNTAsIDAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNTAsIAorICAgIDUwLCA1LCA1LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCAwLCA1MCwgNTAsIDAsIDUwLCA1MCwgMCwgMCwgMTcsIDAsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMTcsIDE3LCAwLCAwLCAxNywgMTcsIDE3LCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgCisgICAgMTEsIDEyLCAxMywgMTQsIDE1LCAxNywgMTcsIDUwLCA1MCwgNTAsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxNywgMTcsIDE3LCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCAwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCAwLCAwLCAxNywgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMCwgCisgICAgMTcsIDE3LCAxNywgMCwgMCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAKKyAgICA1MCwgMTcsIDE3LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCA1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCAwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMTcsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMCwgMCwgMTcsIDE3LCAwLCAwLCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIAorICAgIDAsIDAsIDAsIDAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKKyAgICAxMywgMTQsIDE1LCA1LCA1MCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTcsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgMCwgMCwgMCwgNTAsIDUwLCAwLCA1MCwgMCwgNTAsIDUwLCAwLCAwLCAwLCA1MCwgNTAsIDAsIDAsIDAsIDUwLCA1MCwgCisgICAgNTAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDAsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDUwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgCisgICAgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMjQsIDI0LCAyNCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTcsIDE3LCAxNywgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCAwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMCwgCisgICAgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAxNywgMCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MCwgNTAsIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUsIDAsIDAsIDE3LCAxNywgMCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDE3LCA1MCwgMTcsIDE3LCAxNywgCiAgICAgMTcsIDE3LCAxNywgMTcsIDAsIDE3LCAxNywgMTcsIDAsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNywgMTcsIDAsIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCAxNywgMTcsIDAsIDAsIDYsIDcsIDgsIDksIAotICAgIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDAsIDE3LCAxNywgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDAsIDE3LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDE3LCAxNywgMTcsIDAsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCA0OSwgCi0gICAgNDksIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgNSwgNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE3LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDQ5LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAotICAgIDE0LCAxNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMTcsIAotICAgIDE3LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCAwLCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAKLSAgICA0OSwgMTEzLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAotICAgIDE0LCAxNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCAwLCA0OSwgMCwgMCwgCi0gICAgNDksIDQ5LCAwLCA0OSwgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCAxNywgNDksIDExMywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCA0OSwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCi0gICAgMTMsIDE0LCAxNSwgMCwgMCwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCAxNywgNSwgMTcsIDUsIDE3LCA1LCA1LCA1LCA1LCAxNywgMTcsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCAxNywgMTcsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgMCwgNTAsIDUwLCAxNywgMTcsIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAKKyAgICAxMSwgMTIsIDEzLCAxNCwgMTUsIDAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTcsIDE3LCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgMCwgMCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAxNywgMTcsIDE3LCAwLCAxNywgCisgICAgMTcsIDE3LCAxNywgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgCisgICAgNTAsIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMjQsIDI0LCAyNCwgMjQsIDI0LCAKKyAgICAyNCwgMCwgMCwgMCwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMTcsIDE3LCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgMCwgMCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDE3LCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAwLCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCA1MCwgMTE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNSwgNSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCAwLCA1MCwgMCwgMCwgNTAsIDUwLCAwLCA1MCwgMCwgMCwgCisgICAgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgCisgICAgNTAsIDUwLCA1MCwgMCwgNTAsIDAsIDUwLCAwLCAwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCAxNywgNTAsIDExNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgCisgICAgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgCisgICAgMCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCA2LCA3LCA4LCAKKyAgICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgNSwgMTcsIAorICAgIDUsIDE3LCA1LCAxNywgNSwgNSwgNSwgNSwgMTcsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIAorICAgIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgNSwgMTcsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgMCwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDksIDYsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxNCwgMTUsIDUsIDUsIDUsIDUsIDUsIDUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgNDksIDE3LCAxNywgMTcsIDQ5LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDksIDE3LCAKLSAgICA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCA1LCA1LCAxMTQsIDExNCwgMTE0LCAxMTQsIAotICAgIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAKLSAgICAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgCi0gICAgMTE0LCAxMTQsIDExNCwgMTE0LCAxMTQsIDExNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDUsIDQ5LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDAsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNSwgNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDAsIDAsIAotICAgIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDUsIDEyNCwgMTI0LCAxMjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgNSwgNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgMCwgMTcsIAotICAgIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMSwgMSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNTAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAKKyAgICAxNCwgMTUsIDUsIDUsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCA1MCwgNTAsIAorICAgIDUwLCA1MCwgMTcsIDE3LCAxNywgNTAsIDE3LCAxNywgMTcsIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNTAsIDE3LCA2LCA3LCA4LCAKKyAgICA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1LCA1MCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgMCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIAorICAgIDAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgMiwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCAwLCAwLCAwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1LCA1LCA1LCAxMjgsIDEyOCwgMTI4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDE3LCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDUsIDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDAsIDE3LCAxNywgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDEsIDEsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCA1LCA1LCA1LCA0OSwgNSwgNSwgNSwgNSwgNDksIDE3LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgMTcsIDE3LCAyLCAwLCA2LCA3LCA4LCA5LCAKLSAgICAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCAxNywgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgCi0gICAgMCwgMCwgNSwgMCwgMCwgMCwgNSwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIAotICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgCi0gICAgMTcsIDE3LCAwLCAwLCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxNywgMTcsIDUsIDUsIDUsIDUwLCA1LCA1LCA1LCA1LCA1MCwgMTcsIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAorICAgIDEzLCAxNCwgMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgMTcsIDE3LCAyLCAwLCA2LCA3LCAKKyAgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAxNywgNTAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDUsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIAorICAgIDEzLCAxNCwgMTUsIDExOSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMTcsIDYsIDcsIDgsIDksIDEwLCAxMSwgCisgICAgMTIsIDEzLCAxNCwgMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUwLCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIAorICAgIDE0LCAxNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMTcsIDE3LCAxNywgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDAsIDUwLCA1MCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKKyAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgNSwgNSwgNSwgNSwgCisgICAgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNiwgNywgOCwgOSwgCisgICAgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDYsIDcsIAotICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDAsIDAsIDE3LCAxNywgMTcsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCA0OSwgNDksIDYsIDcsIDgsIDksIDEwLCAxMSwgCi0gICAgMTIsIDEzLCAxNCwgMTUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAKLSAgICAxNSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNSwgNSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCA1LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCA1MCwgNTAsIDUwLCA1MCwgMTcsIDUwLCA1MCwgNTAsIDUwLCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKICAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNDksIDEyNSwgCi0gICAgMTksIDE5LCAxOSwgMTI2LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNywgMTcsIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA1MCwgMTI5LCAKKyAgICAxOSwgMTksIDE5LCAxMzAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgCiAgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCiAgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCi0gICAgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE3LCAxNywgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIAotICAgIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTksIDE5LCAxOSwgMTksIDE5LCAxMjcsIDE5LCAxOSwgMTI4LCAxOSwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAwLCAwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIAotICAgIDEyOSwgMTI5LCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTI5LCAxMjksIDEyOSwgMTI5LCAKLSAgICAxMjksIDEyOSwgMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMTksIDEyOSwgMTksIDEyOSwgMTksIAotICAgIDEyOSwgMTksIDEyOSwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgCi0gICAgMTI5LCAxMjksIDEyOSwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMSwgMTMxLCAxMzIsIAotICAgIDEzMiwgMTMyLCAxMzIsIDEzMywgMTMzLCAxMzQsIDEzNCwgMTM1LCAxMzUsIDEzNiwgMTM2LCAwLCAwLCAxMjksIDEyOSwgCi0gICAgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAxMzcsIAotICAgIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMzcsIDEzNywgMTM3LCAxMzcsIDEzNywgMTM3LCAKLSAgICAxMzcsIDEzNywgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEyOSwgMTI5LCAxMjksIDEzNywgMTM3LCAxMzcsIDEzNywgCi0gICAgMTM3LCAxMzcsIDEzNywgMTM3LCAxMjksIDEyOSwgMTksIDEzOCwgMTksIDAsIDE5LCAxOSwgMTMwLCAxMzAsIDEzOSwgMTM5LCAKLSAgICAxNDAsIDUsIDE0MSwgNSwgNSwgNSwgMTksIDEzOCwgMTksIDAsIDE5LCAxOSwgMTQyLCAxNDIsIDE0MiwgMTQyLCAxNDAsIDUsIAotICAgIDUsIDUsIDEyOSwgMTI5LCAxOSwgMTksIDAsIDAsIDE5LCAxOSwgMTMwLCAxMzAsIDE0MywgMTQzLCAwLCA1LCA1LCA1LCAKLSAgICAxMjksIDEyOSwgMTksIDE5LCAxOSwgMTA0LCAxOSwgMTksIDEzMCwgMTMwLCAxNDQsIDE0NCwgMTA3LCA1LCA1LCA1LCAwLCAKLSAgICAwLCAxOSwgMTM4LCAxOSwgMCwgMTksIDE5LCAxNDUsIDE0NSwgMTQ2LCAxNDYsIDE0MCwgNSwgNSwgMCwgMiwgMiwgMiwgMiwgCi0gICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMSwgMSwgMSwgMSwgMSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMywgMywgMSwgMSwgMSwgMSwgMSwgMiwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMiwgMSwgMSwgMSwgMSwgCi0gICAgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMTQ3LCAxOSwgMCwgMCwgMTQ4LCAxNDksIDE1MCwgMTUxLCAKLSAgICAxNTIsIDE1MywgNSwgNSwgNSwgNSwgNSwgMTksIDE0NywgMjMsIDIwLCAyMSwgMTQ4LCAxNDksIDE1MCwgMTUxLCAxNTIsIAotICAgIDE1MywgNSwgNSwgNSwgNSwgNSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAKKyAgICAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIAorICAgIDE3LCAxNywgMTcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTMxLCAxOSwgMTksIDEzMiwgCisgICAgMTksIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgCisgICAgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzQsIAorICAgIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMCwgMCwgCisgICAgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMCwgMCwgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAKKyAgICAxMzMsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzMywgMTMzLCAxMzMsIAorICAgIDEzMywgMTMzLCAxMzMsIDAsIDAsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDAsIDAsIDE5LCAxMzMsIDE5LCAKKyAgICAxMzMsIDE5LCAxMzMsIDE5LCAxMzMsIDAsIDEzNCwgMCwgMTM0LCAwLCAxMzQsIDAsIDEzNCwgMTMzLCAxMzMsIDEzMywgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzQsIDEzNCwgMTM0LCAxMzUsIAorICAgIDEzNSwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzcsIDEzNywgMTM4LCAxMzgsIDEzOSwgMTM5LCAxNDAsIDE0MCwgMCwgMCwgCisgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAorICAgIDE0MSwgMTQxLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxMzMsIDEzMywgMTMzLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTMzLCAxMzMsIDE5LCAxNDIsIDE5LCAwLCAxOSwgMTksIDEzNCwgMTM0LCAKKyAgICAxNDMsIDE0MywgMTQ0LCA1LCAxNDUsIDUsIDUsIDUsIDE5LCAxNDIsIDE5LCAwLCAxOSwgMTksIDE0NiwgMTQ2LCAxNDYsIAorICAgIDE0NiwgMTQ0LCA1LCA1LCA1LCAxMzMsIDEzMywgMTksIDE5LCAwLCAwLCAxOSwgMTksIDEzNCwgMTM0LCAxNDcsIDE0NywgMCwgCisgICAgNSwgNSwgNSwgMTMzLCAxMzMsIDE5LCAxOSwgMTksIDEwOCwgMTksIDE5LCAxMzQsIDEzNCwgMTQ4LCAxNDgsIDExMSwgNSwgCisgICAgNSwgNSwgMCwgMCwgMTksIDE0MiwgMTksIDAsIDE5LCAxOSwgMTQ5LCAxNDksIDE1MCwgMTUwLCAxNDQsIDUsIDUsIDAsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDEsIDEsIDEsIDEsIDEsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDMsIDMsIDEsIDEsIDEsIDEsIDEsIDIsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE3LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDIsIDEsIAorICAgIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDE1MSwgNTAsIDAsIDAsIDE1MiwgMTUzLCAKKyAgICAxNTQsIDE1NSwgMTU2LCAxNTcsIDUsIDUsIDUsIDUsIDUsIDUwLCAxNTEsIDIzLCAyMCwgMjEsIDE1MiwgMTUzLCAxNTQsIAorICAgIDE1NSwgMTU2LCAxNTcsIDUsIDUsIDUsIDUsIDUsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgNSwgNSwgNSwgNSwgMTcsIDUsIDUsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDEwMiwgNSwgNSwgNSwgNSwgMTAyLCAKKyAgICA1LCA1LCAxOSwgMTAyLCAxMDIsIDEwMiwgMTksIDE5LCAxMDIsIDEwMiwgMTAyLCAxOSwgNSwgMTAyLCA1LCA1LCAxNTgsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCA1LCA1LCA1LCA1LCA1LCA1LCAxMDIsIDUsIDE1OSwgNSwgMTAyLCA1LCAxNjAsIAorICAgIDE2MSwgMTAyLCAxMDIsIDE1OCwgMTksIDEwMiwgMTAyLCAxNjIsIDEwMiwgMTksIDUwLCA1MCwgNTAsIDUwLCAxOSwgNSwgNSwgCisgICAgMTksIDE5LCAxMDIsIDEwMiwgNSwgNSwgNSwgNSwgNSwgMTAyLCAxOSwgMTksIDE5LCAxOSwgNSwgNSwgNSwgNSwgMTYzLCA1LCAKKyAgICAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMTY0LCAxNjQsIAorICAgIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAxNjQsIDE2NCwgMTY0LCAKKyAgICAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgMTY1LCAxNjUsIDE2NSwgCisgICAgMTY1LCAxNjUsIDEyOCwgMTI4LCAxMjgsIDI2LCAyNywgMTI4LCAxMjgsIDEyOCwgMTI4LCAyNCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDE3LCA1LCAKLSAgICA1LCA1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA5OCwgNSwgNSwgNSwgNSwgOTgsIDUsIDUsIDE5LCA5OCwgOTgsIAotICAgIDk4LCAxOSwgMTksIDk4LCA5OCwgOTgsIDE5LCA1LCA5OCwgNSwgNSwgMTI0LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDk4LCA1LCAxNTQsIDUsIDk4LCA1LCAxNTUsIDE1NiwgOTgsIDk4LCAxMjQsIDE5LCA5OCwgOTgsIDE1NywgCi0gICAgOTgsIDE5LCA0OSwgNDksIDQ5LCA0OSwgMTksIDUsIDUsIDE5LCAxOSwgOTgsIDk4LCA1LCA1LCA1LCA1LCA1LCA5OCwgMTksIAotICAgIDE5LCAxOSwgMTksIDUsIDUsIDUsIDUsIDE1OCwgNSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAxNTksIDE1OSwgMTU5LCAKLSAgICAxNTksIDE1OSwgMTU5LCAxNjAsIDE2MCwgMTYwLCAxNjAsIDE2MCwgMTYwLCAxNjAsIDE2MCwgMTYwLCAxNjAsIDE2MCwgCi0gICAgMTYwLCAxNjAsIDE2MCwgMTYwLCAxNjAsIDEyNCwgMTI0LCAxMjQsIDI1LCAyNiwgMTI0LCAxMjQsIDEyNCwgMTI0LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMywgMjAsIDIxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAyNCwgCisgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDIzLCAyMCwgMjEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgCisgICAgMTU2LCAxNTcsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjMsIDIwLCAyMSwgMTUyLCAKKyAgICAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgCisgICAgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY2LCAxNjYsIDE2NiwgMTY3LCAxNjcsIAorICAgIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAKKyAgICAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE2NywgMTY3LCAxNjcsIDE1MSwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDIzLCAyMCwgMjEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDI0LCAKKyAgICAxNTEsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDIzLCAKKyAgICAyMCwgMjEsIDE1MiwgMTUzLCAxNTQsIDE1NSwgMTU2LCAxNTcsIDI0LCAyMywgMjAsIDIxLCAxNTIsIDE1MywgMTU0LCAxNTUsIAorICAgIDE1NiwgMTU3LCAyNCwgMjMsIDIwLCAyMSwgMTUyLCAxNTMsIDE1NCwgMTU1LCAxNTYsIDE1NywgMjQsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDAsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDIzLCAyMCwgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDIzLCAyMCwgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDIzLCAyMCwgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAKLSAgICAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjEsIDE2MSwgCi0gICAgMTYxLCAxNjEsIDE2MSwgMTYxLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIAotICAgIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAxNjIsIDE2MiwgMTYyLCAKLSAgICAxNjIsIDE2MiwgMTQ3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAyMywgMjAsIDIxLCAxNDgsIDE0OSwgMTUwLCAKLSAgICAxNTEsIDE1MiwgMTUzLCA1LCAxNDcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDAsIDUsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDIzLCAyMCwgCi0gICAgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDUsIDIzLCAyMCwgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAKLSAgICAxNTMsIDUsIDIzLCAyMCwgMjEsIDE0OCwgMTQ5LCAxNTAsIDE1MSwgMTUyLCAxNTMsIDUsIDUsIDAsIDAsIDAsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMSwgMTExLCAKLSAgICAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgCi0gICAgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIAotICAgIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAxMTEsIDExMSwgMTExLCAKLSAgICAxMTEsIDExMSwgMTExLCAwLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgCi0gICAgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIAotICAgIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAKLSAgICAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMTEyLCAxMTIsIDExMiwgMCwgMjUsIDI2LCAxNjMsIDE2NCwgMTY1LCAxNjYsIAotICAgIDE2NywgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTY4LCAxNjksIDE3MCwgMCwgMTksIDI1LCAyNiwgMTksIDI1LCAyNiwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNDksIDAsIDAsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAKLSAgICAxOSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCi0gICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAotICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIAorICAgIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAKKyAgICAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgCisgICAgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDExNSwgMTE1LCAxMTUsIDAsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAKKyAgICAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgCisgICAgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAxMTYsIAorICAgIDExNiwgMTE2LCAxMTYsIDExNiwgMTE2LCAwLCAyNiwgMjcsIDE2OCwgMTY5LCAxNzAsIDE3MSwgMTcyLCAyNiwgMjcsIDI2LCAKKyAgICAyNywgMjYsIDI3LCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE5LCAyNiwgMjcsIDE5LCAyNiwgMjcsIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDUwLCAxNzcsIDE3NywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDE5LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCAyNiwgMjcsIDI2LCAyNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMjQsIAorICAgIDUsIDUsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgCisgICAgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIAorICAgIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAxNzgsIDE3OCwgMTc4LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTcsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDg1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA4OSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCkBAIC05NDEsNTI0ICsxMjEwLDgxOCBAQAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDIsIDUsIDUsIDUsIDUsIDQ5LCA0OSwgMTI0LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxMjQsIDEyNCwgCi0gICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDUsIDUsIDEyNCwgMTI0LCAxMjQsIDQ5LCA0OSwgNSwgNSwgNSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAxNywgMTcsIDUsIDUsIDQ5LCA0OSwgNDksIDUsIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDUsIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIAotICAgIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMCwgMCwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgNDksIDE3LCA1LCA1LCA1LCA1LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDUsIDQ5LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgCi0gICAgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAKKyAgICAwLCAwLCAyLCA1LCA1LCA1LCA1LCA1MCwgNTAsIDEyOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCAxMjgsIDEyOCwgCisgICAgMTI4LCA1MCwgNTAsIDUsIDUsIDUsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgMCwgMCwgMTcsIDE3LCA1LCA1LCA1MCwgNTAsIDUwLCA1LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNSwgNSwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDUsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMTksIDE5LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAKLSAgICAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDI1LCAyNiwgMjUsIDI2LCAyNSwgMjYsIDQ5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDI1LCAyNiwgMjUsIDI2LCAxNzIsIDI1LCAyNiwgMjUsIDI2LCAyNSwgCi0gICAgMjYsIDI1LCAyNiwgMjUsIDI2LCA0OSwgNSwgNSwgMjUsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDQ5LCA0OSwgNDksIDE3LCA0OSwgNDksIDQ5LCA0OSwgMTcsIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcsIAotICAgIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNSwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCi0gICAgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDE3LCAxNywgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgMCwgNSwgNSwgNSwgCi0gICAgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMCwgMCwgMCwgMCwgMCwgNDksIDE3LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgCi0gICAgNDksIDAsIDQ5LCA0OSwgMCwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA1LCA1LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDg1LCA4NSwgNSwgNSwgMCwgMCwgMTcsIDE3LCAxNywgMTcsIDE3LCAKLSAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1LCA1LCA1LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDg1LCA0OSwgODUsIDQ5LCA4NSwgMCwgCi0gICAgODUsIDQ5LCA4NSwgNDksIDg1LCA0OSwgODUsIDQ5LCA4NSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAKLSAgICAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCA1LCA1LCA1LCA1LCAxNywgNSwgMTgsIDE4LCAxOCwgMTgsIAotICAgIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIAotICAgIDE4LCAxOCwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDExMywgMTEzLCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgNSwgNSwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCAwLCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAotICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKLSAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgCi0gICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAotICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAxMjQsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTI0LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA1LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAwLCAwLCAwLCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDUsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKLSAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCi0gICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAotICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgCi0gICAgMTMsIDE0LCAxNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgMCwgMCwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCAwLCAwLCAwLCA0OSwgCi0gICAgMCwgMCwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCA1LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAxNywgMTcsIDE3LCAwLCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE3LCAxNywgMTcsIDE3LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgMCwgMCwgMCwgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMTcsIDIzLCAyMCwgMjEsIDE0OCwgNSwgCi0gICAgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0LCAKLSAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgCi0gICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAotICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKLSAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgCi0gICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIAotICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAKLSAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAKKyAgICAyNCwgMjQsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI0LCAyNCwgMjQsIDI0LCAyNCwgCisgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNSwgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA1LCAxNywgCi0gICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCi0gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE3OSwgNTAsIDUwLCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICAxNzksIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIAorICAgIDUwLCAxNzksIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgMTc5LCAKKyAgICAxNzksIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDE3OSwgMTc5LCAxNzksIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgMTc5LCAxNzksIDUwLCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNSwgNSwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIAorICAgIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDUwLCAxNywgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTcsIDE3LCA1LCA1MCwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIAorICAgIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTcsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCAyNiwgMjcsIDI2LCAyNywgCisgICAgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDE5LCAxOSwgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgCisgICAgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgCisgICAgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgCisgICAgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgCisgICAgMjYsIDI3LCA1MCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAyNiwgMjcsIDI2LCAyNywgMTgwLCAyNiwgMjcsIAorICAgIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIDI2LCAyNywgNTAsIDUsIDUsIDI2LCAyNywgMTgxLCAxOSwgMCwgMjYsIDI3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjcsIDI2LCAyNywgMjYsIDI3LCAyNiwgMjcsIAorICAgIDI2LCAyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgNTAsIDUwLCAKKyAgICA1MCwgMTcsIDUwLCA1MCwgNTAsIDUwLCAxNywgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIAorICAgIDUsIDUsIDAsIDAsIDAsIDAsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCA1LCAKKyAgICA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAKKyAgICAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1LCA1LCA1LCA1MCwgMCwgMCwgMCwgCisgICAgMCwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUwLCAKKyAgICA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgMTcsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgMTcsIDE3LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAwLCAwLCA1LCA1LCAKKyAgICA1LCA1LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUsIDUsIDUsIDUwLCAxNywgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTcsIDUwLCAxNywgMTcsIDE3LCA1MCwgNTAsIDE3LCAxNywgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAxNywgMTcsIDUwLCAxNywgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDUsIDE3LCAxNywgMCwgMCwgCisgICAgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTAsIDE3LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDAsIDUwLCA1MCwgCisgICAgMCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgODksIDg5LCA4OSwgODksIDg5LCA4OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA4OSwgODksIDUsIDUsIDAsIDAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgMTcsIDE3LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgMTcsIAorICAgIDE3LCA1LCA1LCA1LCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCA4OSwgNTAsIDg5LCA1MCwgODksIDAsIDg5LCA1MCwgODksIDUwLCA4OSwgNTAsIAorICAgIDg5LCA1MCwgODksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDAsIDAsIDEsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIAorICAgIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgCisgICAgMTYsIDE2LCAxNiwgNSwgNSwgNSwgNSwgMTcsIDUsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAKKyAgICAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsIDE4LCAxOCwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxMTcsIDExNywgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEsIDEsIDEsIDUsIDUsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCAwLCAwLCAKKyAgICAwLCAwLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMjQsIDI0LCAyNCwgMjQsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDI0LCAwLCAwLCAwLCAwLCAwLCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxNywgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDI0LCAyNCwgMjQsIDI0LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDEyOCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxMjgsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIAorICAgIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNSwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAKKyAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgCisgICAgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIAorICAgIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgCisgICAgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCAxODMsIAorICAgIDE4MywgMTgzLCAxODMsIDE4MywgMTgzLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIAorICAgIDEyLCAxMywgMTQsIDE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCAwLCAwLCA1MCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDAsIDAsIDAsIAorICAgIDUwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDUsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDAsIDAsIDAsIDUsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgMCwgMCwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDE3LCAxNywgMTcsIDAsIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMTcsIDE3LCAKKyAgICAxNywgMTcsIDUwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAwLCAwLCAwLCAwLCAxNywgMjMsIDIwLCAyMSwgMTUyLCAyNCwgMjQsIDI0LCAKKyAgICAyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAyNCwgMjQsIDUsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDAsIDAsIDAsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAyMywgMjAsIDIxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIAorICAgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMTcsIDE3LCAxNywgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNywgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCAwLCAwLCAwLCAwLCAyMywgMjAsIDIxLCAxNTIsIDE1MywgMTU0LCAxNTUsIDE1NiwgMTU3LCAyNCwgMjQsIDI0LCAyNCwgCisgICAgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3LCAxNywgMTcsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgMSwgNSwgCisgICAgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDE1OCwgMTU4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIAorICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAKKyAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDE1OCwgMTU4LCAxMjgsIDEyOCwgCisgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MCwgNTAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE3LCAKLSAgICAxNywgMTcsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDE3LCAxNywgMTcsIDE3LCAxNywgCisgICAgNSwgNSwgNSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMTcsIDE3LCAxNywgMTcsIAorICAgIDE3LCAxNywgMTcsIDE3LCA1LCA1LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTcsIDE3LCAKKyAgICAxNywgMTcsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDE3LCAxNywgMTcsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCisgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQsIDI0LCAKKyAgICAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAwLCAKICAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAKLSAgICA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgMTksIDE5LCAxOSwgMTksIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAKICAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgOTgsIDAsIDk4LCA5OCwgMCwgMCwgOTgsIDAsIDAsIDk4LCA5OCwgMCwgMCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDAsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgMTksIDE5LCAxOSwgMTksIDAsIDE5LCAwLCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgOTgsIDk4LCAwLCAKLSAgICA5OCwgOTgsIDk4LCA5OCwgMCwgMCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAwLCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgMCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA5OCwgOTgsIDAsIDk4LCA5OCwgOTgsIAotICAgIDk4LCAwLCA5OCwgOTgsIDk4LCA5OCwgOTgsIDAsIDk4LCAwLCAwLCAwLCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgMCwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxMDIsIDAsIDEwMiwgMTAyLCAwLCAwLCAxMDIsIDAsIDAsIDEwMiwgMTAyLCAwLCAwLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDAsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIAorICAgIDE5LCAxOSwgMCwgMTksIDAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAwLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAwLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDAsIDAsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAwLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDAsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTAyLCAxMDIsIDAsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMCwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDAsIDEwMiwgMCwgMCwgMCwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAwLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAxOSwgCiAgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCiAgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxOSwgMTksIDE5LCAKICAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAKLSAgICA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMCwgMCwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCA1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIAorICAgIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCA1LCAxOSwgMTksIDE5LCAxOSwgCiAgICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCA1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCA1LCAxOSwgMTksIAogICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAwLCAwLCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDUsIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCAKLSAgICA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDUsIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAotICAgIDE5LCAxOSwgMTksIDE5LCA1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgCi0gICAgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDUsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIDk4LCA5OCwgOTgsIAotICAgIDk4LCA5OCwgOTgsIDk4LCA1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgCi0gICAgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAKLSAgICAxOSwgOTgsIDE5LCAwLCAwLCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIAotICAgIDEyLCAxMywgMTQsIDE1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICAxOSwgMTksIDE5LCAxOSwgMTksIDUsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAKKyAgICAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgCisgICAgMTAyLCAxMDIsIDEwMiwgMTAyLCAxMDIsIDEwMiwgNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIAorICAgIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDUsIDE5LCAxOSwgCisgICAgMTksIDE5LCAxOSwgMTksIDEwMiwgMTksIDAsIDAsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDYsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDYsIDcsIAorICAgIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAotICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MSwgMTUxLCAyMywgMjAsIDIxLCAxNTIsIDE1MywgCisgICAgMTU0LCAxNTUsIDE1NiwgMTU3LCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAKKyAgICAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDAsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDAsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIAorICAgIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDUsIDUsIDUsIDAsIDUsIDAsIDUsIDAsIDUsIDAsIDUsIAorICAgIDUsIDUsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIDUsIDAsIDAsIDUsIDUsIDUsIDUsIDAsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIAorICAgIDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDE3OSwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE3OSwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAxNzksIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCisgICAgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc5LCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAKKyAgICA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKKyAgICAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKICAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAKLSAgICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNywgMTcsIDE3LCAxNywgCisgICAgMSwgMSwgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKICAgICAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAKQEAgLTE0NzEsMTggKzIwMzQsMTM3NiBAQAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAogICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIAotICAgIDE3LCAxNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgCisgICAgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAogICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIAotICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAorICAgIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIAogfTsKIAorLyogUmV0dXJucyB0aGUgbnVtZXJpYyB2YWx1ZSBhcyBkb3VibGUgZm9yIFVuaWNvZGUgY2hhcmFjdGVycworICogaGF2aW5nIHRoaXMgcHJvcGVydHksIC0xLjAgb3RoZXJ3aXNlLgorICovCitkb3VibGUgX1B5VW5pY29kZV9Ub051bWVyaWMoUHlfVUNTNCBjaCkKK3sKKyAgICBzd2l0Y2ggKGNoKSB7CisgICAgY2FzZSAweDBGMzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAtMS4wLzIuMDsKKyAgICBjYXNlIDB4MDAzMDoKKyAgICBjYXNlIDB4MDY2MDoKKyAgICBjYXNlIDB4MDZGMDoKKyAgICBjYXNlIDB4MDdDMDoKKyAgICBjYXNlIDB4MDk2NjoKKyAgICBjYXNlIDB4MDlFNjoKKyAgICBjYXNlIDB4MEE2NjoKKyAgICBjYXNlIDB4MEFFNjoKKyAgICBjYXNlIDB4MEI2NjoKKyAgICBjYXNlIDB4MEJFNjoKKyAgICBjYXNlIDB4MEM2NjoKKyAgICBjYXNlIDB4MEM3ODoKKyAgICBjYXNlIDB4MENFNjoKKyAgICBjYXNlIDB4MEQ2NjoKKyAgICBjYXNlIDB4MEU1MDoKKyAgICBjYXNlIDB4MEVEMDoKKyAgICBjYXNlIDB4MEYyMDoKKyAgICBjYXNlIDB4MTA0MDoKKyAgICBjYXNlIDB4MTA5MDoKKyAgICBjYXNlIDB4MTdFMDoKKyAgICBjYXNlIDB4MTdGMDoKKyAgICBjYXNlIDB4MTgxMDoKKyAgICBjYXNlIDB4MTk0NjoKKyAgICBjYXNlIDB4MTlEMDoKKyAgICBjYXNlIDB4MUE4MDoKKyAgICBjYXNlIDB4MUE5MDoKKyAgICBjYXNlIDB4MUI1MDoKKyAgICBjYXNlIDB4MUJCMDoKKyAgICBjYXNlIDB4MUM0MDoKKyAgICBjYXNlIDB4MUM1MDoKKyAgICBjYXNlIDB4MjA3MDoKKyAgICBjYXNlIDB4MjA4MDoKKyAgICBjYXNlIDB4MjE4OToKKyAgICBjYXNlIDB4MjRFQToKKyAgICBjYXNlIDB4MjRGRjoKKyAgICBjYXNlIDB4MzAwNzoKKyAgICBjYXNlIDB4OTZGNjoKKyAgICBjYXNlIDB4QTYyMDoKKyAgICBjYXNlIDB4QTZFRjoKKyAgICBjYXNlIDB4QThEMDoKKyAgICBjYXNlIDB4QTkwMDoKKyAgICBjYXNlIDB4QTlEMDoKKyAgICBjYXNlIDB4QUE1MDoKKyAgICBjYXNlIDB4QUJGMDoKKyAgICBjYXNlIDB4RjlCMjoKKyAgICBjYXNlIDB4RkYxMDoKKyAgICBjYXNlIDB4MTAxOEE6CisgICAgY2FzZSAweDEwNEEwOgorICAgIGNhc2UgMHgxMTA2NjoKKyAgICBjYXNlIDB4MUQ3Q0U6CisgICAgY2FzZSAweDFEN0Q4OgorICAgIGNhc2UgMHgxRDdFMjoKKyAgICBjYXNlIDB4MUQ3RUM6CisgICAgY2FzZSAweDFEN0Y2OgorICAgIGNhc2UgMHgxRjEwMDoKKyAgICBjYXNlIDB4MUYxMDE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAwLjA7CisgICAgY2FzZSAweDAwMzE6CisgICAgY2FzZSAweDAwQjk6CisgICAgY2FzZSAweDA2NjE6CisgICAgY2FzZSAweDA2RjE6CisgICAgY2FzZSAweDA3QzE6CisgICAgY2FzZSAweDA5Njc6CisgICAgY2FzZSAweDA5RTc6CisgICAgY2FzZSAweDBBNjc6CisgICAgY2FzZSAweDBBRTc6CisgICAgY2FzZSAweDBCNjc6CisgICAgY2FzZSAweDBCRTc6CisgICAgY2FzZSAweDBDNjc6CisgICAgY2FzZSAweDBDNzk6CisgICAgY2FzZSAweDBDN0M6CisgICAgY2FzZSAweDBDRTc6CisgICAgY2FzZSAweDBENjc6CisgICAgY2FzZSAweDBFNTE6CisgICAgY2FzZSAweDBFRDE6CisgICAgY2FzZSAweDBGMjE6CisgICAgY2FzZSAweDEwNDE6CisgICAgY2FzZSAweDEwOTE6CisgICAgY2FzZSAweDEzNjk6CisgICAgY2FzZSAweDE3RTE6CisgICAgY2FzZSAweDE3RjE6CisgICAgY2FzZSAweDE4MTE6CisgICAgY2FzZSAweDE5NDc6CisgICAgY2FzZSAweDE5RDE6CisgICAgY2FzZSAweDE5REE6CisgICAgY2FzZSAweDFBODE6CisgICAgY2FzZSAweDFBOTE6CisgICAgY2FzZSAweDFCNTE6CisgICAgY2FzZSAweDFCQjE6CisgICAgY2FzZSAweDFDNDE6CisgICAgY2FzZSAweDFDNTE6CisgICAgY2FzZSAweDIwODE6CisgICAgY2FzZSAweDIxNUY6CisgICAgY2FzZSAweDIxNjA6CisgICAgY2FzZSAweDIxNzA6CisgICAgY2FzZSAweDI0NjA6CisgICAgY2FzZSAweDI0NzQ6CisgICAgY2FzZSAweDI0ODg6CisgICAgY2FzZSAweDI0RjU6CisgICAgY2FzZSAweDI3NzY6CisgICAgY2FzZSAweDI3ODA6CisgICAgY2FzZSAweDI3OEE6CisgICAgY2FzZSAweDMwMjE6CisgICAgY2FzZSAweDMxOTI6CisgICAgY2FzZSAweDMyMjA6CisgICAgY2FzZSAweDMyODA6CisgICAgY2FzZSAweDRFMDA6CisgICAgY2FzZSAweDU4RjE6CisgICAgY2FzZSAweDU4Rjk6CisgICAgY2FzZSAweDVFN0E6CisgICAgY2FzZSAweDVGMEM6CisgICAgY2FzZSAweEE2MjE6CisgICAgY2FzZSAweEE2RTY6CisgICAgY2FzZSAweEE4RDE6CisgICAgY2FzZSAweEE5MDE6CisgICAgY2FzZSAweEE5RDE6CisgICAgY2FzZSAweEFBNTE6CisgICAgY2FzZSAweEFCRjE6CisgICAgY2FzZSAweEZGMTE6CisgICAgY2FzZSAweDEwMTA3OgorICAgIGNhc2UgMHgxMDE0MjoKKyAgICBjYXNlIDB4MTAxNTg6CisgICAgY2FzZSAweDEwMTU5OgorICAgIGNhc2UgMHgxMDE1QToKKyAgICBjYXNlIDB4MTAzMjA6CisgICAgY2FzZSAweDEwM0QxOgorICAgIGNhc2UgMHgxMDRBMToKKyAgICBjYXNlIDB4MTA4NTg6CisgICAgY2FzZSAweDEwOTE2OgorICAgIGNhc2UgMHgxMEE0MDoKKyAgICBjYXNlIDB4MTBBN0Q6CisgICAgY2FzZSAweDEwQjU4OgorICAgIGNhc2UgMHgxMEI3ODoKKyAgICBjYXNlIDB4MTBFNjA6CisgICAgY2FzZSAweDExMDUyOgorICAgIGNhc2UgMHgxMTA2NzoKKyAgICBjYXNlIDB4MTI0MTU6CisgICAgY2FzZSAweDEyNDFFOgorICAgIGNhc2UgMHgxMjQyQzoKKyAgICBjYXNlIDB4MTI0MzQ6CisgICAgY2FzZSAweDEyNDRGOgorICAgIGNhc2UgMHgxMjQ1ODoKKyAgICBjYXNlIDB4MUQzNjA6CisgICAgY2FzZSAweDFEN0NGOgorICAgIGNhc2UgMHgxRDdEOToKKyAgICBjYXNlIDB4MUQ3RTM6CisgICAgY2FzZSAweDFEN0VEOgorICAgIGNhc2UgMHgxRDdGNzoKKyAgICBjYXNlIDB4MUYxMDI6CisgICAgY2FzZSAweDIwOTJBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wOworICAgIGNhc2UgMHgyMTUyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzEwLjA7CisgICAgY2FzZSAweDA5RjQ6CisgICAgY2FzZSAweDBCNzU6CisgICAgY2FzZSAweEE4MzM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMTYuMDsKKyAgICBjYXNlIDB4MDBCRDoKKyAgICBjYXNlIDB4MEI3MzoKKyAgICBjYXNlIDB4MEQ3NDoKKyAgICBjYXNlIDB4MEYyQToKKyAgICBjYXNlIDB4MkNGRDoKKyAgICBjYXNlIDB4QTgzMToKKyAgICBjYXNlIDB4MTAxNDE6CisgICAgY2FzZSAweDEwMTc1OgorICAgIGNhc2UgMHgxMDE3NjoKKyAgICBjYXNlIDB4MTBFN0I6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvMi4wOworICAgIGNhc2UgMHgyMTUzOgorICAgIGNhc2UgMHgxMEU3RDoKKyAgICBjYXNlIDB4MTI0NUE6CisgICAgY2FzZSAweDEyNDVEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzMuMDsKKyAgICBjYXNlIDB4MDBCQzoKKyAgICBjYXNlIDB4MDlGNzoKKyAgICBjYXNlIDB4MEI3MjoKKyAgICBjYXNlIDB4MEQ3MzoKKyAgICBjYXNlIDB4QTgzMDoKKyAgICBjYXNlIDB4MTAxNDA6CisgICAgY2FzZSAweDEwRTdDOgorICAgIGNhc2UgMHgxMjQ2MDoKKyAgICBjYXNlIDB4MTI0NjI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvNC4wOworICAgIGNhc2UgMHgyMTU1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzUuMDsKKyAgICBjYXNlIDB4MjE1OToKKyAgICBjYXNlIDB4MTI0NjE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvNi4wOworICAgIGNhc2UgMHgyMTUwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzcuMDsKKyAgICBjYXNlIDB4MDlGNToKKyAgICBjYXNlIDB4MEI3NjoKKyAgICBjYXNlIDB4MjE1QjoKKyAgICBjYXNlIDB4QTgzNDoKKyAgICBjYXNlIDB4MTI0NUY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxLjAvOC4wOworICAgIGNhc2UgMHgyMTUxOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMS4wLzkuMDsKKyAgICBjYXNlIDB4MEJGMDoKKyAgICBjYXNlIDB4MEQ3MDoKKyAgICBjYXNlIDB4MTM3MjoKKyAgICBjYXNlIDB4MjE2OToKKyAgICBjYXNlIDB4MjE3OToKKyAgICBjYXNlIDB4MjQ2OToKKyAgICBjYXNlIDB4MjQ3RDoKKyAgICBjYXNlIDB4MjQ5MToKKyAgICBjYXNlIDB4MjRGRToKKyAgICBjYXNlIDB4Mjc3RjoKKyAgICBjYXNlIDB4Mjc4OToKKyAgICBjYXNlIDB4Mjc5MzoKKyAgICBjYXNlIDB4MzAzODoKKyAgICBjYXNlIDB4MzIyOToKKyAgICBjYXNlIDB4MzI4OToKKyAgICBjYXNlIDB4NEVDMDoKKyAgICBjYXNlIDB4NTM0MToKKyAgICBjYXNlIDB4NjJGRToKKyAgICBjYXNlIDB4Rjk3MzoKKyAgICBjYXNlIDB4RjlGRDoKKyAgICBjYXNlIDB4MTAxMTA6CisgICAgY2FzZSAweDEwMTQ5OgorICAgIGNhc2UgMHgxMDE1MDoKKyAgICBjYXNlIDB4MTAxNTc6CisgICAgY2FzZSAweDEwMTYwOgorICAgIGNhc2UgMHgxMDE2MToKKyAgICBjYXNlIDB4MTAxNjI6CisgICAgY2FzZSAweDEwMTYzOgorICAgIGNhc2UgMHgxMDE2NDoKKyAgICBjYXNlIDB4MTAzMjI6CisgICAgY2FzZSAweDEwM0QzOgorICAgIGNhc2UgMHgxMDg1QjoKKyAgICBjYXNlIDB4MTA5MTc6CisgICAgY2FzZSAweDEwQTQ0OgorICAgIGNhc2UgMHgxMEI1QzoKKyAgICBjYXNlIDB4MTBCN0M6CisgICAgY2FzZSAweDEwRTY5OgorICAgIGNhc2UgMHgxMTA1QjoKKyAgICBjYXNlIDB4MUQzNjk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMC4wOworICAgIGNhc2UgMHgwQkYxOgorICAgIGNhc2UgMHgwRDcxOgorICAgIGNhc2UgMHgxMzdCOgorICAgIGNhc2UgMHgyMTZEOgorICAgIGNhc2UgMHgyMTdEOgorICAgIGNhc2UgMHg0RjcwOgorICAgIGNhc2UgMHg3NjdFOgorICAgIGNhc2UgMHg5NjRDOgorICAgIGNhc2UgMHgxMDExOToKKyAgICBjYXNlIDB4MTAxNEI6CisgICAgY2FzZSAweDEwMTUyOgorICAgIGNhc2UgMHgxMDE2QToKKyAgICBjYXNlIDB4MTAzRDU6CisgICAgY2FzZSAweDEwODVEOgorICAgIGNhc2UgMHgxMDkxOToKKyAgICBjYXNlIDB4MTBBNDY6CisgICAgY2FzZSAweDEwQjVFOgorICAgIGNhc2UgMHgxMEI3RToKKyAgICBjYXNlIDB4MTBFNzI6CisgICAgY2FzZSAweDExMDY0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwLjA7CisgICAgY2FzZSAweDBCRjI6CisgICAgY2FzZSAweDBENzI6CisgICAgY2FzZSAweDIxNkY6CisgICAgY2FzZSAweDIxN0Y6CisgICAgY2FzZSAweDIxODA6CisgICAgY2FzZSAweDRFREY6CisgICAgY2FzZSAweDUzNDM6CisgICAgY2FzZSAweDk2MjE6CisgICAgY2FzZSAweDEwMTIyOgorICAgIGNhc2UgMHgxMDE0RDoKKyAgICBjYXNlIDB4MTAxNTQ6CisgICAgY2FzZSAweDEwMTcxOgorICAgIGNhc2UgMHgxMDg1RToKKyAgICBjYXNlIDB4MTBBNDc6CisgICAgY2FzZSAweDEwQjVGOgorICAgIGNhc2UgMHgxMEI3RjoKKyAgICBjYXNlIDB4MTEwNjU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwLjA7CisgICAgY2FzZSAweDEzN0M6CisgICAgY2FzZSAweDIxODI6CisgICAgY2FzZSAweDRFMDc6CisgICAgY2FzZSAweDg0MkM6CisgICAgY2FzZSAweDEwMTJCOgorICAgIGNhc2UgMHgxMDE1NToKKyAgICBjYXNlIDB4MTA4NUY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMC4wOworICAgIGNhc2UgMHgyMTg4OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTAwMDAwLjA7CisgICAgY2FzZSAweDRFQkY6CisgICAgY2FzZSAweDUxMDQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMDAwMDAwMDAuMDsKKyAgICBjYXNlIDB4NTE0NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEwMDAwMDAwMDAwMDAuMDsKKyAgICBjYXNlIDB4MjE2QToKKyAgICBjYXNlIDB4MjE3QToKKyAgICBjYXNlIDB4MjQ2QToKKyAgICBjYXNlIDB4MjQ3RToKKyAgICBjYXNlIDB4MjQ5MjoKKyAgICBjYXNlIDB4MjRFQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDExLjA7CisgICAgY2FzZSAweDBGMkY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMS4wLzIuMDsKKyAgICBjYXNlIDB4MjE2QjoKKyAgICBjYXNlIDB4MjE3QjoKKyAgICBjYXNlIDB4MjQ2QjoKKyAgICBjYXNlIDB4MjQ3RjoKKyAgICBjYXNlIDB4MjQ5MzoKKyAgICBjYXNlIDB4MjRFQzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDEyLjA7CisgICAgY2FzZSAweDI0NkM6CisgICAgY2FzZSAweDI0ODA6CisgICAgY2FzZSAweDI0OTQ6CisgICAgY2FzZSAweDI0RUQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxMy4wOworICAgIGNhc2UgMHgwRjMwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTMuMC8yLjA7CisgICAgY2FzZSAweDI0NkQ6CisgICAgY2FzZSAweDI0ODE6CisgICAgY2FzZSAweDI0OTU6CisgICAgY2FzZSAweDI0RUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNC4wOworICAgIGNhc2UgMHgyNDZFOgorICAgIGNhc2UgMHgyNDgyOgorICAgIGNhc2UgMHgyNDk2OgorICAgIGNhc2UgMHgyNEVGOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTUuMDsKKyAgICBjYXNlIDB4MEYzMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE1LjAvMi4wOworICAgIGNhc2UgMHgwOUY5OgorICAgIGNhc2UgMHgyNDZGOgorICAgIGNhc2UgMHgyNDgzOgorICAgIGNhc2UgMHgyNDk3OgorICAgIGNhc2UgMHgyNEYwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMTYuMDsKKyAgICBjYXNlIDB4MTZFRToKKyAgICBjYXNlIDB4MjQ3MDoKKyAgICBjYXNlIDB4MjQ4NDoKKyAgICBjYXNlIDB4MjQ5ODoKKyAgICBjYXNlIDB4MjRGMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE3LjA7CisgICAgY2FzZSAweDBGMzI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxNy4wLzIuMDsKKyAgICBjYXNlIDB4MTZFRjoKKyAgICBjYXNlIDB4MjQ3MToKKyAgICBjYXNlIDB4MjQ4NToKKyAgICBjYXNlIDB4MjQ5OToKKyAgICBjYXNlIDB4MjRGMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDE4LjA7CisgICAgY2FzZSAweDE2RjA6CisgICAgY2FzZSAweDI0NzI6CisgICAgY2FzZSAweDI0ODY6CisgICAgY2FzZSAweDI0OUE6CisgICAgY2FzZSAweDI0RjM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAxOS4wOworICAgIGNhc2UgMHgwMDMyOgorICAgIGNhc2UgMHgwMEIyOgorICAgIGNhc2UgMHgwNjYyOgorICAgIGNhc2UgMHgwNkYyOgorICAgIGNhc2UgMHgwN0MyOgorICAgIGNhc2UgMHgwOTY4OgorICAgIGNhc2UgMHgwOUU4OgorICAgIGNhc2UgMHgwQTY4OgorICAgIGNhc2UgMHgwQUU4OgorICAgIGNhc2UgMHgwQjY4OgorICAgIGNhc2UgMHgwQkU4OgorICAgIGNhc2UgMHgwQzY4OgorICAgIGNhc2UgMHgwQzdBOgorICAgIGNhc2UgMHgwQzdEOgorICAgIGNhc2UgMHgwQ0U4OgorICAgIGNhc2UgMHgwRDY4OgorICAgIGNhc2UgMHgwRTUyOgorICAgIGNhc2UgMHgwRUQyOgorICAgIGNhc2UgMHgwRjIyOgorICAgIGNhc2UgMHgxMDQyOgorICAgIGNhc2UgMHgxMDkyOgorICAgIGNhc2UgMHgxMzZBOgorICAgIGNhc2UgMHgxN0UyOgorICAgIGNhc2UgMHgxN0YyOgorICAgIGNhc2UgMHgxODEyOgorICAgIGNhc2UgMHgxOTQ4OgorICAgIGNhc2UgMHgxOUQyOgorICAgIGNhc2UgMHgxQTgyOgorICAgIGNhc2UgMHgxQTkyOgorICAgIGNhc2UgMHgxQjUyOgorICAgIGNhc2UgMHgxQkIyOgorICAgIGNhc2UgMHgxQzQyOgorICAgIGNhc2UgMHgxQzUyOgorICAgIGNhc2UgMHgyMDgyOgorICAgIGNhc2UgMHgyMTYxOgorICAgIGNhc2UgMHgyMTcxOgorICAgIGNhc2UgMHgyNDYxOgorICAgIGNhc2UgMHgyNDc1OgorICAgIGNhc2UgMHgyNDg5OgorICAgIGNhc2UgMHgyNEY2OgorICAgIGNhc2UgMHgyNzc3OgorICAgIGNhc2UgMHgyNzgxOgorICAgIGNhc2UgMHgyNzhCOgorICAgIGNhc2UgMHgzMDIyOgorICAgIGNhc2UgMHgzMTkzOgorICAgIGNhc2UgMHgzMjIxOgorICAgIGNhc2UgMHgzMjgxOgorICAgIGNhc2UgMHgzNDgzOgorICAgIGNhc2UgMHg0RThDOgorICAgIGNhc2UgMHg1MTY5OgorICAgIGNhc2UgMHg1RjBEOgorICAgIGNhc2UgMHg1RjEwOgorICAgIGNhc2UgMHg4Q0FFOgorICAgIGNhc2UgMHg4Q0IzOgorICAgIGNhc2UgMHg4RDMwOgorICAgIGNhc2UgMHhBNjIyOgorICAgIGNhc2UgMHhBNkU3OgorICAgIGNhc2UgMHhBOEQyOgorICAgIGNhc2UgMHhBOTAyOgorICAgIGNhc2UgMHhBOUQyOgorICAgIGNhc2UgMHhBQTUyOgorICAgIGNhc2UgMHhBQkYyOgorICAgIGNhc2UgMHhGOTc4OgorICAgIGNhc2UgMHhGRjEyOgorICAgIGNhc2UgMHgxMDEwODoKKyAgICBjYXNlIDB4MTAxNUI6CisgICAgY2FzZSAweDEwMTVDOgorICAgIGNhc2UgMHgxMDE1RDoKKyAgICBjYXNlIDB4MTAxNUU6CisgICAgY2FzZSAweDEwM0QyOgorICAgIGNhc2UgMHgxMDRBMjoKKyAgICBjYXNlIDB4MTA4NTk6CisgICAgY2FzZSAweDEwOTFBOgorICAgIGNhc2UgMHgxMEE0MToKKyAgICBjYXNlIDB4MTBCNTk6CisgICAgY2FzZSAweDEwQjc5OgorICAgIGNhc2UgMHgxMEU2MToKKyAgICBjYXNlIDB4MTEwNTM6CisgICAgY2FzZSAweDExMDY4OgorICAgIGNhc2UgMHgxMjQwMDoKKyAgICBjYXNlIDB4MTI0MTY6CisgICAgY2FzZSAweDEyNDFGOgorICAgIGNhc2UgMHgxMjQyMzoKKyAgICBjYXNlIDB4MTI0MkQ6CisgICAgY2FzZSAweDEyNDM1OgorICAgIGNhc2UgMHgxMjQ0QToKKyAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU5OgorICAgIGNhc2UgMHgxRDM2MToKKyAgICBjYXNlIDB4MUQ3RDA6CisgICAgY2FzZSAweDFEN0RBOgorICAgIGNhc2UgMHgxRDdFNDoKKyAgICBjYXNlIDB4MUQ3RUU6CisgICAgY2FzZSAweDFEN0Y4OgorICAgIGNhc2UgMHgxRjEwMzoKKyAgICBjYXNlIDB4MjIzOTA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyLjA7CisgICAgY2FzZSAweDIxNTQ6CisgICAgY2FzZSAweDEwMTc3OgorICAgIGNhc2UgMHgxMEU3RToKKyAgICBjYXNlIDB4MTI0NUI6CisgICAgY2FzZSAweDEyNDVFOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMi4wLzMuMDsKKyAgICBjYXNlIDB4MjE1NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIuMC81LjA7CisgICAgY2FzZSAweDEzNzM6CisgICAgY2FzZSAweDI0NzM6CisgICAgY2FzZSAweDI0ODc6CisgICAgY2FzZSAweDI0OUI6CisgICAgY2FzZSAweDI0RjQ6CisgICAgY2FzZSAweDMwMzk6CisgICAgY2FzZSAweDUzNDQ6CisgICAgY2FzZSAweDVFRkY6CisgICAgY2FzZSAweDEwMTExOgorICAgIGNhc2UgMHgxMDNENDoKKyAgICBjYXNlIDB4MTA4NUM6CisgICAgY2FzZSAweDEwOTE4OgorICAgIGNhc2UgMHgxMEE0NToKKyAgICBjYXNlIDB4MTBCNUQ6CisgICAgY2FzZSAweDEwQjdEOgorICAgIGNhc2UgMHgxMEU2QToKKyAgICBjYXNlIDB4MTEwNUM6CisgICAgY2FzZSAweDFEMzZBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAuMDsKKyAgICBjYXNlIDB4MTAxMUE6CisgICAgY2FzZSAweDEwRTczOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwLjA7CisgICAgY2FzZSAweDEwMTIzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjAwMC4wOworICAgIGNhc2UgMHgxMDEyQzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CisgICAgY2FzZSAweDMyNTE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyMS4wOworICAgIGNhc2UgMHgzMjUyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjIuMDsKKyAgICBjYXNlIDB4MzI1MzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIzLjA7CisgICAgY2FzZSAweDMyNTQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyNC4wOworICAgIGNhc2UgMHgzMjU1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjUuMDsKKyAgICBjYXNlIDB4MzI1NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI2LjA7CisgICAgY2FzZSAweDMyNTc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAyNy4wOworICAgIGNhc2UgMHgzMjU4OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjguMDsKKyAgICBjYXNlIDB4MzI1OToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDI5LjA7CisgICAgY2FzZSAweDAwMzM6CisgICAgY2FzZSAweDAwQjM6CisgICAgY2FzZSAweDA2NjM6CisgICAgY2FzZSAweDA2RjM6CisgICAgY2FzZSAweDA3QzM6CisgICAgY2FzZSAweDA5Njk6CisgICAgY2FzZSAweDA5RTk6CisgICAgY2FzZSAweDBBNjk6CisgICAgY2FzZSAweDBBRTk6CisgICAgY2FzZSAweDBCNjk6CisgICAgY2FzZSAweDBCRTk6CisgICAgY2FzZSAweDBDNjk6CisgICAgY2FzZSAweDBDN0I6CisgICAgY2FzZSAweDBDN0U6CisgICAgY2FzZSAweDBDRTk6CisgICAgY2FzZSAweDBENjk6CisgICAgY2FzZSAweDBFNTM6CisgICAgY2FzZSAweDBFRDM6CisgICAgY2FzZSAweDBGMjM6CisgICAgY2FzZSAweDEwNDM6CisgICAgY2FzZSAweDEwOTM6CisgICAgY2FzZSAweDEzNkI6CisgICAgY2FzZSAweDE3RTM6CisgICAgY2FzZSAweDE3RjM6CisgICAgY2FzZSAweDE4MTM6CisgICAgY2FzZSAweDE5NDk6CisgICAgY2FzZSAweDE5RDM6CisgICAgY2FzZSAweDFBODM6CisgICAgY2FzZSAweDFBOTM6CisgICAgY2FzZSAweDFCNTM6CisgICAgY2FzZSAweDFCQjM6CisgICAgY2FzZSAweDFDNDM6CisgICAgY2FzZSAweDFDNTM6CisgICAgY2FzZSAweDIwODM6CisgICAgY2FzZSAweDIxNjI6CisgICAgY2FzZSAweDIxNzI6CisgICAgY2FzZSAweDI0NjI6CisgICAgY2FzZSAweDI0NzY6CisgICAgY2FzZSAweDI0OEE6CisgICAgY2FzZSAweDI0Rjc6CisgICAgY2FzZSAweDI3Nzg6CisgICAgY2FzZSAweDI3ODI6CisgICAgY2FzZSAweDI3OEM6CisgICAgY2FzZSAweDMwMjM6CisgICAgY2FzZSAweDMxOTQ6CisgICAgY2FzZSAweDMyMjI6CisgICAgY2FzZSAweDMyODI6CisgICAgY2FzZSAweDRFMDk6CisgICAgY2FzZSAweDRFRTg6CisgICAgY2FzZSAweDUzQzE6CisgICAgY2FzZSAweDUzQzI6CisgICAgY2FzZSAweDUzQzM6CisgICAgY2FzZSAweDUzQzQ6CisgICAgY2FzZSAweDVGMEU6CisgICAgY2FzZSAweEE2MjM6CisgICAgY2FzZSAweEE2RTg6CisgICAgY2FzZSAweEE4RDM6CisgICAgY2FzZSAweEE5MDM6CisgICAgY2FzZSAweEE5RDM6CisgICAgY2FzZSAweEFBNTM6CisgICAgY2FzZSAweEFCRjM6CisgICAgY2FzZSAweEY5NkI6CisgICAgY2FzZSAweEZGMTM6CisgICAgY2FzZSAweDEwMTA5OgorICAgIGNhc2UgMHgxMDRBMzoKKyAgICBjYXNlIDB4MTA4NUE6CisgICAgY2FzZSAweDEwOTFCOgorICAgIGNhc2UgMHgxMEE0MjoKKyAgICBjYXNlIDB4MTBCNUE6CisgICAgY2FzZSAweDEwQjdBOgorICAgIGNhc2UgMHgxMEU2MjoKKyAgICBjYXNlIDB4MTEwNTQ6CisgICAgY2FzZSAweDExMDY5OgorICAgIGNhc2UgMHgxMjQwMToKKyAgICBjYXNlIDB4MTI0MDg6CisgICAgY2FzZSAweDEyNDE3OgorICAgIGNhc2UgMHgxMjQyMDoKKyAgICBjYXNlIDB4MTI0MjQ6CisgICAgY2FzZSAweDEyNDI1OgorICAgIGNhc2UgMHgxMjQyRToKKyAgICBjYXNlIDB4MTI0MkY6CisgICAgY2FzZSAweDEyNDM2OgorICAgIGNhc2UgMHgxMjQzNzoKKyAgICBjYXNlIDB4MTI0M0E6CisgICAgY2FzZSAweDEyNDNCOgorICAgIGNhc2UgMHgxMjQ0QjoKKyAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDFEMzYyOgorICAgIGNhc2UgMHgxRDdEMToKKyAgICBjYXNlIDB4MUQ3REI6CisgICAgY2FzZSAweDFEN0U1OgorICAgIGNhc2UgMHgxRDdFRjoKKyAgICBjYXNlIDB4MUQ3Rjk6CisgICAgY2FzZSAweDFGMTA0OgorICAgIGNhc2UgMHgyMEFGRDoKKyAgICBjYXNlIDB4MjBCMTk6CisgICAgY2FzZSAweDIyOTk4OgorICAgIGNhc2UgMHgyM0IxQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMDsKKyAgICBjYXNlIDB4MDlGNjoKKyAgICBjYXNlIDB4MEI3NzoKKyAgICBjYXNlIDB4QTgzNToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMC8xNi4wOworICAgIGNhc2UgMHgwRjJCOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wLzIuMDsKKyAgICBjYXNlIDB4MDBCRToKKyAgICBjYXNlIDB4MDlGODoKKyAgICBjYXNlIDB4MEI3NDoKKyAgICBjYXNlIDB4MEQ3NToKKyAgICBjYXNlIDB4QTgzMjoKKyAgICBjYXNlIDB4MTAxNzg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzLjAvNC4wOworICAgIGNhc2UgMHgyMTU3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMy4wLzUuMDsKKyAgICBjYXNlIDB4MjE1QzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMuMC84LjA7CisgICAgY2FzZSAweDEzNzQ6CisgICAgY2FzZSAweDMwM0E6CisgICAgY2FzZSAweDMyNUE6CisgICAgY2FzZSAweDUzNDU6CisgICAgY2FzZSAweDEwMTEyOgorICAgIGNhc2UgMHgxMDE2NToKKyAgICBjYXNlIDB4MTBFNkI6CisgICAgY2FzZSAweDExMDVEOgorICAgIGNhc2UgMHgxRDM2QjoKKyAgICBjYXNlIDB4MjA5ODM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzMC4wOworICAgIGNhc2UgMHgxMDExQjoKKyAgICBjYXNlIDB4MTAxNkI6CisgICAgY2FzZSAweDEwRTc0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwLjA7CisgICAgY2FzZSAweDEwMTI0OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzAwMC4wOworICAgIGNhc2UgMHgxMDEyRDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMwMDAwLjA7CisgICAgY2FzZSAweDMyNUI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzMS4wOworICAgIGNhc2UgMHgzMjVDOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzIuMDsKKyAgICBjYXNlIDB4MzI1RDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDMzLjA7CisgICAgY2FzZSAweDMyNUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzNC4wOworICAgIGNhc2UgMHgzMjVGOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzUuMDsKKyAgICBjYXNlIDB4MzJCMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM2LjA7CisgICAgY2FzZSAweDMyQjI6CisgICAgICAgIHJldHVybiAoZG91YmxlKSAzNy4wOworICAgIGNhc2UgMHgzMkIzOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgMzguMDsKKyAgICBjYXNlIDB4MzJCNDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDM5LjA7CisgICAgY2FzZSAweDAwMzQ6CisgICAgY2FzZSAweDA2NjQ6CisgICAgY2FzZSAweDA2RjQ6CisgICAgY2FzZSAweDA3QzQ6CisgICAgY2FzZSAweDA5NkE6CisgICAgY2FzZSAweDA5RUE6CisgICAgY2FzZSAweDBBNkE6CisgICAgY2FzZSAweDBBRUE6CisgICAgY2FzZSAweDBCNkE6CisgICAgY2FzZSAweDBCRUE6CisgICAgY2FzZSAweDBDNkE6CisgICAgY2FzZSAweDBDRUE6CisgICAgY2FzZSAweDBENkE6CisgICAgY2FzZSAweDBFNTQ6CisgICAgY2FzZSAweDBFRDQ6CisgICAgY2FzZSAweDBGMjQ6CisgICAgY2FzZSAweDEwNDQ6CisgICAgY2FzZSAweDEwOTQ6CisgICAgY2FzZSAweDEzNkM6CisgICAgY2FzZSAweDE3RTQ6CisgICAgY2FzZSAweDE3RjQ6CisgICAgY2FzZSAweDE4MTQ6CisgICAgY2FzZSAweDE5NEE6CisgICAgY2FzZSAweDE5RDQ6CisgICAgY2FzZSAweDFBODQ6CisgICAgY2FzZSAweDFBOTQ6CisgICAgY2FzZSAweDFCNTQ6CisgICAgY2FzZSAweDFCQjQ6CisgICAgY2FzZSAweDFDNDQ6CisgICAgY2FzZSAweDFDNTQ6CisgICAgY2FzZSAweDIwNzQ6CisgICAgY2FzZSAweDIwODQ6CisgICAgY2FzZSAweDIxNjM6CisgICAgY2FzZSAweDIxNzM6CisgICAgY2FzZSAweDI0NjM6CisgICAgY2FzZSAweDI0Nzc6CisgICAgY2FzZSAweDI0OEI6CisgICAgY2FzZSAweDI0Rjg6CisgICAgY2FzZSAweDI3Nzk6CisgICAgY2FzZSAweDI3ODM6CisgICAgY2FzZSAweDI3OEQ6CisgICAgY2FzZSAweDMwMjQ6CisgICAgY2FzZSAweDMxOTU6CisgICAgY2FzZSAweDMyMjM6CisgICAgY2FzZSAweDMyODM6CisgICAgY2FzZSAweDRFOTY6CisgICAgY2FzZSAweDU2REI6CisgICAgY2FzZSAweDgwODY6CisgICAgY2FzZSAweEE2MjQ6CisgICAgY2FzZSAweEE2RTk6CisgICAgY2FzZSAweEE4RDQ6CisgICAgY2FzZSAweEE5MDQ6CisgICAgY2FzZSAweEE5RDQ6CisgICAgY2FzZSAweEFBNTQ6CisgICAgY2FzZSAweEFCRjQ6CisgICAgY2FzZSAweEZGMTQ6CisgICAgY2FzZSAweDEwMTBBOgorICAgIGNhc2UgMHgxMDRBNDoKKyAgICBjYXNlIDB4MTBBNDM6CisgICAgY2FzZSAweDEwQjVCOgorICAgIGNhc2UgMHgxMEI3QjoKKyAgICBjYXNlIDB4MTBFNjM6CisgICAgY2FzZSAweDExMDU1OgorICAgIGNhc2UgMHgxMTA2QToKKyAgICBjYXNlIDB4MTI0MDI6CisgICAgY2FzZSAweDEyNDA5OgorICAgIGNhc2UgMHgxMjQwRjoKKyAgICBjYXNlIDB4MTI0MTg6CisgICAgY2FzZSAweDEyNDIxOgorICAgIGNhc2UgMHgxMjQyNjoKKyAgICBjYXNlIDB4MTI0MzA6CisgICAgY2FzZSAweDEyNDM4OgorICAgIGNhc2UgMHgxMjQzQzoKKyAgICBjYXNlIDB4MTI0M0Q6CisgICAgY2FzZSAweDEyNDNFOgorICAgIGNhc2UgMHgxMjQzRjoKKyAgICBjYXNlIDB4MTI0NEM6CisgICAgY2FzZSAweDEyNDUyOgorICAgIGNhc2UgMHgxMjQ1MzoKKyAgICBjYXNlIDB4MUQzNjM6CisgICAgY2FzZSAweDFEN0QyOgorICAgIGNhc2UgMHgxRDdEQzoKKyAgICBjYXNlIDB4MUQ3RTY6CisgICAgY2FzZSAweDFEN0YwOgorICAgIGNhc2UgMHgxRDdGQToKKyAgICBjYXNlIDB4MUYxMDU6CisgICAgY2FzZSAweDIwMDY0OgorICAgIGNhc2UgMHgyMDBFMjoKKyAgICBjYXNlIDB4MjYyNkQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0LjA7CisgICAgY2FzZSAweDIxNTg6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0LjAvNS4wOworICAgIGNhc2UgMHgxMzc1OgorICAgIGNhc2UgMHgzMkI1OgorICAgIGNhc2UgMHg1MzRDOgorICAgIGNhc2UgMHgxMDExMzoKKyAgICBjYXNlIDB4MTBFNkM6CisgICAgY2FzZSAweDExMDVFOgorICAgIGNhc2UgMHgxRDM2QzoKKyAgICBjYXNlIDB4MjA5OEM6CisgICAgY2FzZSAweDIwOTlDOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAuMDsKKyAgICBjYXNlIDB4MTAxMUM6CisgICAgY2FzZSAweDEwRTc1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwLjA7CisgICAgY2FzZSAweDEwMTI1OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDAwMC4wOworICAgIGNhc2UgMHgxMDEyRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQwMDAwLjA7CisgICAgY2FzZSAweDMyQjY6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0MS4wOworICAgIGNhc2UgMHgzMkI3OgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDIuMDsKKyAgICBjYXNlIDB4MzJCODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzLjA7CisgICAgY2FzZSAweDMyQjk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0NC4wOworICAgIGNhc2UgMHgzMkJBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDUuMDsKKyAgICBjYXNlIDB4MzJCQjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ2LjA7CisgICAgY2FzZSAweDMyQkM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA0Ny4wOworICAgIGNhc2UgMHgzMkJEOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDguMDsKKyAgICBjYXNlIDB4MzJCRToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQ5LjA7CisgICAgY2FzZSAweDAwMzU6CisgICAgY2FzZSAweDA2NjU6CisgICAgY2FzZSAweDA2RjU6CisgICAgY2FzZSAweDA3QzU6CisgICAgY2FzZSAweDA5NkI6CisgICAgY2FzZSAweDA5RUI6CisgICAgY2FzZSAweDBBNkI6CisgICAgY2FzZSAweDBBRUI6CisgICAgY2FzZSAweDBCNkI6CisgICAgY2FzZSAweDBCRUI6CisgICAgY2FzZSAweDBDNkI6CisgICAgY2FzZSAweDBDRUI6CisgICAgY2FzZSAweDBENkI6CisgICAgY2FzZSAweDBFNTU6CisgICAgY2FzZSAweDBFRDU6CisgICAgY2FzZSAweDBGMjU6CisgICAgY2FzZSAweDEwNDU6CisgICAgY2FzZSAweDEwOTU6CisgICAgY2FzZSAweDEzNkQ6CisgICAgY2FzZSAweDE3RTU6CisgICAgY2FzZSAweDE3RjU6CisgICAgY2FzZSAweDE4MTU6CisgICAgY2FzZSAweDE5NEI6CisgICAgY2FzZSAweDE5RDU6CisgICAgY2FzZSAweDFBODU6CisgICAgY2FzZSAweDFBOTU6CisgICAgY2FzZSAweDFCNTU6CisgICAgY2FzZSAweDFCQjU6CisgICAgY2FzZSAweDFDNDU6CisgICAgY2FzZSAweDFDNTU6CisgICAgY2FzZSAweDIwNzU6CisgICAgY2FzZSAweDIwODU6CisgICAgY2FzZSAweDIxNjQ6CisgICAgY2FzZSAweDIxNzQ6CisgICAgY2FzZSAweDI0NjQ6CisgICAgY2FzZSAweDI0Nzg6CisgICAgY2FzZSAweDI0OEM6CisgICAgY2FzZSAweDI0Rjk6CisgICAgY2FzZSAweDI3N0E6CisgICAgY2FzZSAweDI3ODQ6CisgICAgY2FzZSAweDI3OEU6CisgICAgY2FzZSAweDMwMjU6CisgICAgY2FzZSAweDMyMjQ6CisgICAgY2FzZSAweDMyODQ6CisgICAgY2FzZSAweDM0MDU6CisgICAgY2FzZSAweDM4MkE6CisgICAgY2FzZSAweDRFOTQ6CisgICAgY2FzZSAweDRGMEQ6CisgICAgY2FzZSAweEE2MjU6CisgICAgY2FzZSAweEE2RUE6CisgICAgY2FzZSAweEE4RDU6CisgICAgY2FzZSAweEE5MDU6CisgICAgY2FzZSAweEE5RDU6CisgICAgY2FzZSAweEFBNTU6CisgICAgY2FzZSAweEFCRjU6CisgICAgY2FzZSAweEZGMTU6CisgICAgY2FzZSAweDEwMTBCOgorICAgIGNhc2UgMHgxMDE0MzoKKyAgICBjYXNlIDB4MTAxNDg6CisgICAgY2FzZSAweDEwMTRGOgorICAgIGNhc2UgMHgxMDE1RjoKKyAgICBjYXNlIDB4MTAxNzM6CisgICAgY2FzZSAweDEwMzIxOgorICAgIGNhc2UgMHgxMDRBNToKKyAgICBjYXNlIDB4MTBFNjQ6CisgICAgY2FzZSAweDExMDU2OgorICAgIGNhc2UgMHgxMTA2QjoKKyAgICBjYXNlIDB4MTI0MDM6CisgICAgY2FzZSAweDEyNDBBOgorICAgIGNhc2UgMHgxMjQxMDoKKyAgICBjYXNlIDB4MTI0MTk6CisgICAgY2FzZSAweDEyNDIyOgorICAgIGNhc2UgMHgxMjQyNzoKKyAgICBjYXNlIDB4MTI0MzE6CisgICAgY2FzZSAweDEyNDM5OgorICAgIGNhc2UgMHgxMjQ0RDoKKyAgICBjYXNlIDB4MTI0NTQ6CisgICAgY2FzZSAweDEyNDU1OgorICAgIGNhc2UgMHgxRDM2NDoKKyAgICBjYXNlIDB4MUQ3RDM6CisgICAgY2FzZSAweDFEN0REOgorICAgIGNhc2UgMHgxRDdFNzoKKyAgICBjYXNlIDB4MUQ3RjE6CisgICAgY2FzZSAweDFEN0ZCOgorICAgIGNhc2UgMHgxRjEwNjoKKyAgICBjYXNlIDB4MjAxMjE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjA7CisgICAgY2FzZSAweDBGMkM6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjAvMi4wOworICAgIGNhc2UgMHgyMTVBOgorICAgIGNhc2UgMHgxMjQ1QzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUuMC82LjA7CisgICAgY2FzZSAweDIxNUQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA1LjAvOC4wOworICAgIGNhc2UgMHgxMzc2OgorICAgIGNhc2UgMHgyMTZDOgorICAgIGNhc2UgMHgyMTdDOgorICAgIGNhc2UgMHgyMTg2OgorICAgIGNhc2UgMHgzMkJGOgorICAgIGNhc2UgMHgxMDExNDoKKyAgICBjYXNlIDB4MTAxNDQ6CisgICAgY2FzZSAweDEwMTRBOgorICAgIGNhc2UgMHgxMDE1MToKKyAgICBjYXNlIDB4MTAxNjY6CisgICAgY2FzZSAweDEwMTY3OgorICAgIGNhc2UgMHgxMDE2ODoKKyAgICBjYXNlIDB4MTAxNjk6CisgICAgY2FzZSAweDEwMTc0OgorICAgIGNhc2UgMHgxMDMyMzoKKyAgICBjYXNlIDB4MTBBN0U6CisgICAgY2FzZSAweDEwRTZEOgorICAgIGNhc2UgMHgxMTA1RjoKKyAgICBjYXNlIDB4MUQzNkQ6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA1MC4wOworICAgIGNhc2UgMHgyMTZFOgorICAgIGNhc2UgMHgyMTdFOgorICAgIGNhc2UgMHgxMDExRDoKKyAgICBjYXNlIDB4MTAxNDU6CisgICAgY2FzZSAweDEwMTRDOgorICAgIGNhc2UgMHgxMDE1MzoKKyAgICBjYXNlIDB4MTAxNkM6CisgICAgY2FzZSAweDEwMTZEOgorICAgIGNhc2UgMHgxMDE2RToKKyAgICBjYXNlIDB4MTAxNkY6CisgICAgY2FzZSAweDEwMTcwOgorICAgIGNhc2UgMHgxMEU3NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMC4wOworICAgIGNhc2UgMHgyMTgxOgorICAgIGNhc2UgMHgxMDEyNjoKKyAgICBjYXNlIDB4MTAxNDY6CisgICAgY2FzZSAweDEwMTRFOgorICAgIGNhc2UgMHgxMDE3MjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAuMDsKKyAgICBjYXNlIDB4MjE4NzoKKyAgICBjYXNlIDB4MTAxMkY6CisgICAgY2FzZSAweDEwMTQ3OgorICAgIGNhc2UgMHgxMDE1NjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDUwMDAwLjA7CisgICAgY2FzZSAweDAwMzY6CisgICAgY2FzZSAweDA2NjY6CisgICAgY2FzZSAweDA2RjY6CisgICAgY2FzZSAweDA3QzY6CisgICAgY2FzZSAweDA5NkM6CisgICAgY2FzZSAweDA5RUM6CisgICAgY2FzZSAweDBBNkM6CisgICAgY2FzZSAweDBBRUM6CisgICAgY2FzZSAweDBCNkM6CisgICAgY2FzZSAweDBCRUM6CisgICAgY2FzZSAweDBDNkM6CisgICAgY2FzZSAweDBDRUM6CisgICAgY2FzZSAweDBENkM6CisgICAgY2FzZSAweDBFNTY6CisgICAgY2FzZSAweDBFRDY6CisgICAgY2FzZSAweDBGMjY6CisgICAgY2FzZSAweDEwNDY6CisgICAgY2FzZSAweDEwOTY6CisgICAgY2FzZSAweDEzNkU6CisgICAgY2FzZSAweDE3RTY6CisgICAgY2FzZSAweDE3RjY6CisgICAgY2FzZSAweDE4MTY6CisgICAgY2FzZSAweDE5NEM6CisgICAgY2FzZSAweDE5RDY6CisgICAgY2FzZSAweDFBODY6CisgICAgY2FzZSAweDFBOTY6CisgICAgY2FzZSAweDFCNTY6CisgICAgY2FzZSAweDFCQjY6CisgICAgY2FzZSAweDFDNDY6CisgICAgY2FzZSAweDFDNTY6CisgICAgY2FzZSAweDIwNzY6CisgICAgY2FzZSAweDIwODY6CisgICAgY2FzZSAweDIxNjU6CisgICAgY2FzZSAweDIxNzU6CisgICAgY2FzZSAweDIxODU6CisgICAgY2FzZSAweDI0NjU6CisgICAgY2FzZSAweDI0Nzk6CisgICAgY2FzZSAweDI0OEQ6CisgICAgY2FzZSAweDI0RkE6CisgICAgY2FzZSAweDI3N0I6CisgICAgY2FzZSAweDI3ODU6CisgICAgY2FzZSAweDI3OEY6CisgICAgY2FzZSAweDMwMjY6CisgICAgY2FzZSAweDMyMjU6CisgICAgY2FzZSAweDMyODU6CisgICAgY2FzZSAweDUxNkQ6CisgICAgY2FzZSAweDk2NDY6CisgICAgY2FzZSAweDk2Nzg6CisgICAgY2FzZSAweEE2MjY6CisgICAgY2FzZSAweEE2RUI6CisgICAgY2FzZSAweEE4RDY6CisgICAgY2FzZSAweEE5MDY6CisgICAgY2FzZSAweEE5RDY6CisgICAgY2FzZSAweEFBNTY6CisgICAgY2FzZSAweEFCRjY6CisgICAgY2FzZSAweEY5RDE6CisgICAgY2FzZSAweEY5RDM6CisgICAgY2FzZSAweEZGMTY6CisgICAgY2FzZSAweDEwMTBDOgorICAgIGNhc2UgMHgxMDRBNjoKKyAgICBjYXNlIDB4MTBFNjU6CisgICAgY2FzZSAweDExMDU3OgorICAgIGNhc2UgMHgxMTA2QzoKKyAgICBjYXNlIDB4MTI0MDQ6CisgICAgY2FzZSAweDEyNDBCOgorICAgIGNhc2UgMHgxMjQxMToKKyAgICBjYXNlIDB4MTI0MUE6CisgICAgY2FzZSAweDEyNDI4OgorICAgIGNhc2UgMHgxMjQ0MDoKKyAgICBjYXNlIDB4MTI0NEU6CisgICAgY2FzZSAweDFEMzY1OgorICAgIGNhc2UgMHgxRDdENDoKKyAgICBjYXNlIDB4MUQ3REU6CisgICAgY2FzZSAweDFEN0U4OgorICAgIGNhc2UgMHgxRDdGMjoKKyAgICBjYXNlIDB4MUQ3RkM6CisgICAgY2FzZSAweDFGMTA3OgorICAgIGNhc2UgMHgyMEFFQToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDYuMDsKKyAgICBjYXNlIDB4MTM3NzoKKyAgICBjYXNlIDB4MTAxMTU6CisgICAgY2FzZSAweDEwRTZFOgorICAgIGNhc2UgMHgxMTA2MDoKKyAgICBjYXNlIDB4MUQzNkU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MC4wOworICAgIGNhc2UgMHgxMDExRToKKyAgICBjYXNlIDB4MTBFNzc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAuMDsKKyAgICBjYXNlIDB4MTAxMjc6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA2MDAwLjA7CisgICAgY2FzZSAweDEwMTMwOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgNjAwMDAuMDsKKyAgICBjYXNlIDB4MDAzNzoKKyAgICBjYXNlIDB4MDY2NzoKKyAgICBjYXNlIDB4MDZGNzoKKyAgICBjYXNlIDB4MDdDNzoKKyAgICBjYXNlIDB4MDk2RDoKKyAgICBjYXNlIDB4MDlFRDoKKyAgICBjYXNlIDB4MEE2RDoKKyAgICBjYXNlIDB4MEFFRDoKKyAgICBjYXNlIDB4MEI2RDoKKyAgICBjYXNlIDB4MEJFRDoKKyAgICBjYXNlIDB4MEM2RDoKKyAgICBjYXNlIDB4MENFRDoKKyAgICBjYXNlIDB4MEQ2RDoKKyAgICBjYXNlIDB4MEU1NzoKKyAgICBjYXNlIDB4MEVENzoKKyAgICBjYXNlIDB4MEYyNzoKKyAgICBjYXNlIDB4MTA0NzoKKyAgICBjYXNlIDB4MTA5NzoKKyAgICBjYXNlIDB4MTM2RjoKKyAgICBjYXNlIDB4MTdFNzoKKyAgICBjYXNlIDB4MTdGNzoKKyAgICBjYXNlIDB4MTgxNzoKKyAgICBjYXNlIDB4MTk0RDoKKyAgICBjYXNlIDB4MTlENzoKKyAgICBjYXNlIDB4MUE4NzoKKyAgICBjYXNlIDB4MUE5NzoKKyAgICBjYXNlIDB4MUI1NzoKKyAgICBjYXNlIDB4MUJCNzoKKyAgICBjYXNlIDB4MUM0NzoKKyAgICBjYXNlIDB4MUM1NzoKKyAgICBjYXNlIDB4MjA3NzoKKyAgICBjYXNlIDB4MjA4NzoKKyAgICBjYXNlIDB4MjE2NjoKKyAgICBjYXNlIDB4MjE3NjoKKyAgICBjYXNlIDB4MjQ2NjoKKyAgICBjYXNlIDB4MjQ3QToKKyAgICBjYXNlIDB4MjQ4RToKKyAgICBjYXNlIDB4MjRGQjoKKyAgICBjYXNlIDB4Mjc3QzoKKyAgICBjYXNlIDB4Mjc4NjoKKyAgICBjYXNlIDB4Mjc5MDoKKyAgICBjYXNlIDB4MzAyNzoKKyAgICBjYXNlIDB4MzIyNjoKKyAgICBjYXNlIDB4MzI4NjoKKyAgICBjYXNlIDB4M0I0RDoKKyAgICBjYXNlIDB4NEUwMzoKKyAgICBjYXNlIDB4NjdEMjoKKyAgICBjYXNlIDB4NkYwNjoKKyAgICBjYXNlIDB4QTYyNzoKKyAgICBjYXNlIDB4QTZFQzoKKyAgICBjYXNlIDB4QThENzoKKyAgICBjYXNlIDB4QTkwNzoKKyAgICBjYXNlIDB4QTlENzoKKyAgICBjYXNlIDB4QUE1NzoKKyAgICBjYXNlIDB4QUJGNzoKKyAgICBjYXNlIDB4RkYxNzoKKyAgICBjYXNlIDB4MTAxMEQ6CisgICAgY2FzZSAweDEwNEE3OgorICAgIGNhc2UgMHgxMEU2NjoKKyAgICBjYXNlIDB4MTEwNTg6CisgICAgY2FzZSAweDExMDZEOgorICAgIGNhc2UgMHgxMjQwNToKKyAgICBjYXNlIDB4MTI0MEM6CisgICAgY2FzZSAweDEyNDEyOgorICAgIGNhc2UgMHgxMjQxQjoKKyAgICBjYXNlIDB4MTI0Mjk6CisgICAgY2FzZSAweDEyNDQxOgorICAgIGNhc2UgMHgxMjQ0MjoKKyAgICBjYXNlIDB4MTI0NDM6CisgICAgY2FzZSAweDFEMzY2OgorICAgIGNhc2UgMHgxRDdENToKKyAgICBjYXNlIDB4MUQ3REY6CisgICAgY2FzZSAweDFEN0U5OgorICAgIGNhc2UgMHgxRDdGMzoKKyAgICBjYXNlIDB4MUQ3RkQ6CisgICAgY2FzZSAweDFGMTA4OgorICAgIGNhc2UgMHgyMDAwMToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcuMDsKKyAgICBjYXNlIDB4MEYyRDoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcuMC8yLjA7CisgICAgY2FzZSAweDIxNUU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3LjAvOC4wOworICAgIGNhc2UgMHgxMzc4OgorICAgIGNhc2UgMHgxMDExNjoKKyAgICBjYXNlIDB4MTBFNkY6CisgICAgY2FzZSAweDExMDYxOgorICAgIGNhc2UgMHgxRDM2RjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwLjA7CisgICAgY2FzZSAweDEwMTFGOgorICAgIGNhc2UgMHgxMEU3ODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMC4wOworICAgIGNhc2UgMHgxMDEyODoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDcwMDAuMDsKKyAgICBjYXNlIDB4MTAxMzE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA3MDAwMC4wOworICAgIGNhc2UgMHgwMDM4OgorICAgIGNhc2UgMHgwNjY4OgorICAgIGNhc2UgMHgwNkY4OgorICAgIGNhc2UgMHgwN0M4OgorICAgIGNhc2UgMHgwOTZFOgorICAgIGNhc2UgMHgwOUVFOgorICAgIGNhc2UgMHgwQTZFOgorICAgIGNhc2UgMHgwQUVFOgorICAgIGNhc2UgMHgwQjZFOgorICAgIGNhc2UgMHgwQkVFOgorICAgIGNhc2UgMHgwQzZFOgorICAgIGNhc2UgMHgwQ0VFOgorICAgIGNhc2UgMHgwRDZFOgorICAgIGNhc2UgMHgwRTU4OgorICAgIGNhc2UgMHgwRUQ4OgorICAgIGNhc2UgMHgwRjI4OgorICAgIGNhc2UgMHgxMDQ4OgorICAgIGNhc2UgMHgxMDk4OgorICAgIGNhc2UgMHgxMzcwOgorICAgIGNhc2UgMHgxN0U4OgorICAgIGNhc2UgMHgxN0Y4OgorICAgIGNhc2UgMHgxODE4OgorICAgIGNhc2UgMHgxOTRFOgorICAgIGNhc2UgMHgxOUQ4OgorICAgIGNhc2UgMHgxQTg4OgorICAgIGNhc2UgMHgxQTk4OgorICAgIGNhc2UgMHgxQjU4OgorICAgIGNhc2UgMHgxQkI4OgorICAgIGNhc2UgMHgxQzQ4OgorICAgIGNhc2UgMHgxQzU4OgorICAgIGNhc2UgMHgyMDc4OgorICAgIGNhc2UgMHgyMDg4OgorICAgIGNhc2UgMHgyMTY3OgorICAgIGNhc2UgMHgyMTc3OgorICAgIGNhc2UgMHgyNDY3OgorICAgIGNhc2UgMHgyNDdCOgorICAgIGNhc2UgMHgyNDhGOgorICAgIGNhc2UgMHgyNEZDOgorICAgIGNhc2UgMHgyNzdEOgorICAgIGNhc2UgMHgyNzg3OgorICAgIGNhc2UgMHgyNzkxOgorICAgIGNhc2UgMHgzMDI4OgorICAgIGNhc2UgMHgzMjI3OgorICAgIGNhc2UgMHgzMjg3OgorICAgIGNhc2UgMHg1MTZCOgorICAgIGNhc2UgMHg2MzRDOgorICAgIGNhc2UgMHhBNjI4OgorICAgIGNhc2UgMHhBNkVEOgorICAgIGNhc2UgMHhBOEQ4OgorICAgIGNhc2UgMHhBOTA4OgorICAgIGNhc2UgMHhBOUQ4OgorICAgIGNhc2UgMHhBQTU4OgorICAgIGNhc2UgMHhBQkY4OgorICAgIGNhc2UgMHhGRjE4OgorICAgIGNhc2UgMHgxMDEwRToKKyAgICBjYXNlIDB4MTA0QTg6CisgICAgY2FzZSAweDEwRTY3OgorICAgIGNhc2UgMHgxMTA1OToKKyAgICBjYXNlIDB4MTEwNkU6CisgICAgY2FzZSAweDEyNDA2OgorICAgIGNhc2UgMHgxMjQwRDoKKyAgICBjYXNlIDB4MTI0MTM6CisgICAgY2FzZSAweDEyNDFDOgorICAgIGNhc2UgMHgxMjQyQToKKyAgICBjYXNlIDB4MTI0NDQ6CisgICAgY2FzZSAweDEyNDQ1OgorICAgIGNhc2UgMHgxRDM2NzoKKyAgICBjYXNlIDB4MUQ3RDY6CisgICAgY2FzZSAweDFEN0UwOgorICAgIGNhc2UgMHgxRDdFQToKKyAgICBjYXNlIDB4MUQ3RjQ6CisgICAgY2FzZSAweDFEN0ZFOgorICAgIGNhc2UgMHgxRjEwOToKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDguMDsKKyAgICBjYXNlIDB4MTM3OToKKyAgICBjYXNlIDB4MTAxMTc6CisgICAgY2FzZSAweDEwRTcwOgorICAgIGNhc2UgMHgxMTA2MjoKKyAgICBjYXNlIDB4MUQzNzA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA4MC4wOworICAgIGNhc2UgMHgxMDEyMDoKKyAgICBjYXNlIDB4MTBFNzk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA4MDAuMDsKKyAgICBjYXNlIDB4MTAxMjk6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA4MDAwLjA7CisgICAgY2FzZSAweDEwMTMyOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgODAwMDAuMDsKKyAgICBjYXNlIDB4MDAzOToKKyAgICBjYXNlIDB4MDY2OToKKyAgICBjYXNlIDB4MDZGOToKKyAgICBjYXNlIDB4MDdDOToKKyAgICBjYXNlIDB4MDk2RjoKKyAgICBjYXNlIDB4MDlFRjoKKyAgICBjYXNlIDB4MEE2RjoKKyAgICBjYXNlIDB4MEFFRjoKKyAgICBjYXNlIDB4MEI2RjoKKyAgICBjYXNlIDB4MEJFRjoKKyAgICBjYXNlIDB4MEM2RjoKKyAgICBjYXNlIDB4MENFRjoKKyAgICBjYXNlIDB4MEQ2RjoKKyAgICBjYXNlIDB4MEU1OToKKyAgICBjYXNlIDB4MEVEOToKKyAgICBjYXNlIDB4MEYyOToKKyAgICBjYXNlIDB4MTA0OToKKyAgICBjYXNlIDB4MTA5OToKKyAgICBjYXNlIDB4MTM3MToKKyAgICBjYXNlIDB4MTdFOToKKyAgICBjYXNlIDB4MTdGOToKKyAgICBjYXNlIDB4MTgxOToKKyAgICBjYXNlIDB4MTk0RjoKKyAgICBjYXNlIDB4MTlEOToKKyAgICBjYXNlIDB4MUE4OToKKyAgICBjYXNlIDB4MUE5OToKKyAgICBjYXNlIDB4MUI1OToKKyAgICBjYXNlIDB4MUJCOToKKyAgICBjYXNlIDB4MUM0OToKKyAgICBjYXNlIDB4MUM1OToKKyAgICBjYXNlIDB4MjA3OToKKyAgICBjYXNlIDB4MjA4OToKKyAgICBjYXNlIDB4MjE2ODoKKyAgICBjYXNlIDB4MjE3ODoKKyAgICBjYXNlIDB4MjQ2ODoKKyAgICBjYXNlIDB4MjQ3QzoKKyAgICBjYXNlIDB4MjQ5MDoKKyAgICBjYXNlIDB4MjRGRDoKKyAgICBjYXNlIDB4Mjc3RToKKyAgICBjYXNlIDB4Mjc4ODoKKyAgICBjYXNlIDB4Mjc5MjoKKyAgICBjYXNlIDB4MzAyOToKKyAgICBjYXNlIDB4MzIyODoKKyAgICBjYXNlIDB4MzI4ODoKKyAgICBjYXNlIDB4NEU1RDoKKyAgICBjYXNlIDB4NUVGRToKKyAgICBjYXNlIDB4NzM5NjoKKyAgICBjYXNlIDB4QTYyOToKKyAgICBjYXNlIDB4QTZFRToKKyAgICBjYXNlIDB4QThEOToKKyAgICBjYXNlIDB4QTkwOToKKyAgICBjYXNlIDB4QTlEOToKKyAgICBjYXNlIDB4QUE1OToKKyAgICBjYXNlIDB4QUJGOToKKyAgICBjYXNlIDB4RkYxOToKKyAgICBjYXNlIDB4MTAxMEY6CisgICAgY2FzZSAweDEwNEE5OgorICAgIGNhc2UgMHgxMEU2ODoKKyAgICBjYXNlIDB4MTEwNUE6CisgICAgY2FzZSAweDExMDZGOgorICAgIGNhc2UgMHgxMjQwNzoKKyAgICBjYXNlIDB4MTI0MEU6CisgICAgY2FzZSAweDEyNDE0OgorICAgIGNhc2UgMHgxMjQxRDoKKyAgICBjYXNlIDB4MTI0MkI6CisgICAgY2FzZSAweDEyNDQ2OgorICAgIGNhc2UgMHgxMjQ0NzoKKyAgICBjYXNlIDB4MTI0NDg6CisgICAgY2FzZSAweDEyNDQ5OgorICAgIGNhc2UgMHgxRDM2ODoKKyAgICBjYXNlIDB4MUQ3RDc6CisgICAgY2FzZSAweDFEN0UxOgorICAgIGNhc2UgMHgxRDdFQjoKKyAgICBjYXNlIDB4MUQ3RjU6CisgICAgY2FzZSAweDFEN0ZGOgorICAgIGNhc2UgMHgxRjEwQToKKyAgICBjYXNlIDB4MkY4OTA6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjA7CisgICAgY2FzZSAweDBGMkU6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5LjAvMi4wOworICAgIGNhc2UgMHgxMzdBOgorICAgIGNhc2UgMHgxMDExODoKKyAgICBjYXNlIDB4MTAzNDE6CisgICAgY2FzZSAweDEwRTcxOgorICAgIGNhc2UgMHgxMTA2MzoKKyAgICBjYXNlIDB4MUQzNzE6CisgICAgICAgIHJldHVybiAoZG91YmxlKSA5MC4wOworICAgIGNhc2UgMHgxMDEyMToKKyAgICBjYXNlIDB4MTAzNEE6CisgICAgY2FzZSAweDEwRTdBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwLjA7CisgICAgY2FzZSAweDEwMTJBOgorICAgICAgICByZXR1cm4gKGRvdWJsZSkgOTAwMC4wOworICAgIGNhc2UgMHgxMDEzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDkwMDAwLjA7CisgICAgfQorICAgIHJldHVybiAtMS4wOworfQorCisvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKKyAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCisgKi8KK2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoreworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlIDB4MDAwOToKKyAgICBjYXNlIDB4MDAwQToKKyAgICBjYXNlIDB4MDAwQjoKKyAgICBjYXNlIDB4MDAwQzoKKyAgICBjYXNlIDB4MDAwRDoKKyAgICBjYXNlIDB4MDAxQzoKKyAgICBjYXNlIDB4MDAxRDoKKyAgICBjYXNlIDB4MDAxRToKKyAgICBjYXNlIDB4MDAxRjoKKyAgICBjYXNlIDB4MDAyMDoKKyAgICBjYXNlIDB4MDA4NToKKyAgICBjYXNlIDB4MDBBMDoKKyAgICBjYXNlIDB4MTY4MDoKKyAgICBjYXNlIDB4MTgwRToKKyAgICBjYXNlIDB4MjAwMDoKKyAgICBjYXNlIDB4MjAwMToKKyAgICBjYXNlIDB4MjAwMjoKKyAgICBjYXNlIDB4MjAwMzoKKyAgICBjYXNlIDB4MjAwNDoKKyAgICBjYXNlIDB4MjAwNToKKyAgICBjYXNlIDB4MjAwNjoKKyAgICBjYXNlIDB4MjAwNzoKKyAgICBjYXNlIDB4MjAwODoKKyAgICBjYXNlIDB4MjAwOToKKyAgICBjYXNlIDB4MjAwQToKKyAgICBjYXNlIDB4MjAyODoKKyAgICBjYXNlIDB4MjAyOToKKyAgICBjYXNlIDB4MjAyRjoKKyAgICBjYXNlIDB4MjA1RjoKKyAgICBjYXNlIDB4MzAwMDoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGxpbmUgYnJlYWsKKyAqIHByb3BlcnR5ICdCSycsICdDUicsICdMRicgb3IgJ05MJyBvciBoYXZpbmcgYmlkaXJlY3Rpb25hbAorICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLgorICovCitpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoreworICAgIHN3aXRjaCAoY2gpIHsKKyAgICBjYXNlIDB4MDAwQToKKyAgICBjYXNlIDB4MDAwQjoKKyAgICBjYXNlIDB4MDAwQzoKKyAgICBjYXNlIDB4MDAwRDoKKyAgICBjYXNlIDB4MDAxQzoKKyAgICBjYXNlIDB4MDAxRDoKKyAgICBjYXNlIDB4MDAxRToKKyAgICBjYXNlIDB4MDA4NToKKyAgICBjYXNlIDB4MjAyODoKKyAgICBjYXNlIDB4MjAyOToKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCmluZGV4IGY0M2I2OGQuLjEzMzIzY2YgMTAwNjQ0Ci0tLSBhL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCisrKyBiL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCkBAIC0xMzksNyArMTM5LDcgQEAKIH0KIAogCi1zdGF0aWMgbG9uZworc3RhdGljIFB5X2hhc2hfdAogd2Vha3JlZl9oYXNoKFB5V2Vha1JlZmVyZW5jZSAqc2VsZikKIHsKICAgICBpZiAoc2VsZi0+aGFzaCAhPSAtMSkKQEAgLTU4Myw3ICs1ODMsNyBAQAogfQogCiAKLVdSQVBfTUVUSE9EKHByb3h5X2J5dGVzLCAiX19ieXRlc19fIik7CitXUkFQX01FVEhPRChwcm94eV9ieXRlcywgIl9fYnl0ZXNfXyIpCiAKIAogc3RhdGljIFB5TWV0aG9kRGVmIHByb3h5X21ldGhvZHNbXSA9IHsKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcAppbmRleCA3MDM2OGJmLi4xYzk4ZWFjIDEwMDY0NAotLS0gYS9QQy9WQzYvX2N0eXBlcy5kc3AKKysrIGIvUEMvVkM2L19jdHlwZXMuZHNwCkBAIC00MywxMCArNDMsMTAgQEAKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQogIyBQUk9QIFRhcmdldF9EaXIgIiINCiBGOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQorIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQorIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KICMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQogIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQogQlNDMzI9YnNjbWFrZS5leGUNCmRpZmYgLS1naXQgYS9QQy9WQzYvX21zaS5kc3AgYi9QQy9WQzYvX21zaS5kc3AKaW5kZXggMTZlOTZlMy4uNzZhNjFiYyAxMDA2NDQKLS0tIGEvUEMvVkM2L19tc2kuZHNwCisrKyBiL1BDL1ZDNi9fbXNpLmRzcApAQCAtNDMsMTAgKzQzLDEwIEBACiAjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQorIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KKyMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KKyMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KICMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KIEJTQzMyPWJzY21ha2UuZXhlDQpkaWZmIC0tZ2l0IGEvUEMvVkM2L2J1aWxkX3NzbC5weSBiL1BDL1ZDNi9idWlsZF9zc2wucHkKaW5kZXggYzUxMjY4OC4uOTVhZjA4NCAxMDA2NDQKLS0tIGEvUEMvVkM2L2J1aWxkX3NzbC5weQorKysgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CkBAIC05NSwxMyArOTUsOSBAQAogICAgICIiIgogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSk6CiAgICAgICAgIHJldHVybgotICAgICMgMi40IGNvbXBhdGliaWxpdHkKLSAgICBmaW4gPSBvcGVuKG1ha2VmaWxlKQotICAgIGlmIDE6ICMgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46CisgICAgd2l0aCBvcGVuKG1ha2VmaWxlKSBhcyBmaW46CiAgICAgICAgIGxpbmVzID0gZmluLnJlYWRsaW5lcygpCi0gICAgICAgIGZpbi5jbG9zZSgpCi0gICAgZm91dCA9IG9wZW4obWFrZWZpbGUsICd3JykKLSAgICBpZiAxOiAjIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgorICAgIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgogICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiUEVSTD0iKToKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtMTE3LDcgKzExMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArIG5vYWxnbwogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgJ1xuJwogICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotICAgIGZvdXQuY2xvc2UoKQogCiBkZWYgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCk6CiAgICAgcHJpbnQoInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQpAQCAtMTk5LDcgKzE5NCw3IEBACiAgICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCiAKICAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKLSAgICAgICAgaWYgcGVybCBpcyBOb25lOgorICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6CiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKICAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCiAgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6CmRpZmYgLS1naXQgYS9QQy9WQzYvYnoyLmRzcCBiL1BDL1ZDNi9iejIuZHNwCmluZGV4IDFlOTY5MDQuLjNjMTY0ZmEgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9iejIuZHNwCisrKyBiL1BDL1ZDNi9iejIuZHNwCkBAIC00Myw3ICs0Myw3IEBACiAjIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KICMgUFJPUCBUYXJnZXRfRGlyICIiDQogRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCisjIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQogIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjUiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCiAjIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCiAjIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmluZGV4IGVhNGY1MmQuLmY4YTJjODEgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgYi9QQy9WQzYvcHl0aG9uY29yZS5kc3AKQEAgLTU0LDcgKzU0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMxLmRsbCINCisjIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMyLmRsbCINCiAjIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAicHl0aG9uY29yZSAtIFdpbjMyIERlYnVnIg0KQEAgLTgyLDcgKzgyLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMxX2QuZGxsIiAvcGRidHlwZTpzZXB0DQorIyBBREQgTElOSzMyIGxhcmdlaW50LmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9weXRob24zMl9kLmRsbCIgL3BkYnR5cGU6c2VwdA0KICMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KIA0KICFFTkRJRiANCkBAIC0xMzMsNiArMTMzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxNb2R1bGVzXF9mdW5jdG9vbHNtb2R1bGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE1Nyw2ICsxNjEsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxNb2R1bGVzXF9tYXRoLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfcGlja2xlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xODEsNiArMTg5LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cTW9kdWxlc1xfdGltZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXFB5dGhvblxfd2FybmluZ3MuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI3NywxMCArMjg5LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGNvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0uLlwuLlxQeXRob25cY29kZWNzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zMDksNyArMzE3LDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGRhdGV0aW1lbW9kdWxlLmMNCitTT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTM2MSw2ICszNjksMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxQeXRob25cZmlsZXV0aWxzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNjM1LDYgKzY0NywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXFB5dGhvblxweXRpbWUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxPYmplY3RzXHJhbmdlb2JqZWN0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCmRpZmYgLS1naXQgYS9QQy9WQzYvcmVhZG1lLnR4dCBiL1BDL1ZDNi9yZWFkbWUudHh0CmluZGV4IDU5ZTY1ZDAuLjRlOGQyMzcgMTAwNjQ0Ci0tLSBhL1BDL1ZDNi9yZWFkbWUudHh0CisrKyBiL1BDL1ZDNi9yZWFkbWUudHh0CkBAIC0yLDggKzIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCiAyMDAwIGFuZCBYUC4gIEl0IHJlcXVpcmVzIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYueCBvciA1LnggYW5kIFBsYXRmb3JtCi1TREsgRmVicnVhcnkgMjAwMyBFZGl0aW9uIChDb3JlIFNESykuIFlvdSBjYW4gZG93bmxvYWQgdGhpcyBTREsgZnJvbQotaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL21zZG93bmxvYWQvcGxhdGZvcm1zZGsvc2RrdXBkYXRlL3BzZGstZnVsbC5odG0uCitTREsgRmVicnVhcnkgMjAwMyBFZGl0aW9uIChDb3JlIFNESykuCiAoRm9yIG90aGVyIFdpbmRvd3MgcGxhdGZvcm1zIGFuZCBjb21waWxlcnMsIHNlZSAuLi9yZWFkbWUudHh0LikKIAogQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5kc3ciIGluIE1TVkMrKywgc2VsZWN0CkBAIC0xMyw3ICsxMiw3IEBACiBUaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgogCiAxKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzEue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCisgICAgICAgICAgICAgICBweXRob24zMi57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKIAogMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKICAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCkBAIC0yNCw3ICsyMyw3IEBACiAgICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudDsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQogCiBXaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMxX2QuZGxsLCBweXRob25fZC5leGUsIHB5ZXhwYXRfZC5weWQsIGFuZCBzbyBvbi4KK3RoZWlyIG5hbWU6ICBweXRob24zMl9kLmRsbCwgcHl0aG9uX2QuZXhlLCBweWV4cGF0X2QucHlkLCBhbmQgc28gb24uCiAKIFNVQlBST0pFQ1RTCiAtLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3RjbDg1Mi5wYXRjaCBiL1BDL1ZDNi90Y2w4NTIucGF0Y2gKaW5kZXggMGI2YzQ2Ni4uZWQ2NzgwYSAxMDA2NDQKLS0tIGEvUEMvVkM2L3RjbDg1Mi5wYXRjaAorKysgYi9QQy9WQzYvdGNsODUyLnBhdGNoCkBAIC05LDE0ICs5LDMgQEAKICB0eXBlZGVmIHN0cnVjdCBfc3RhdGk2NAlUY2xfU3RhdEJ1ZjsKICAjICAgICAgICAgZWxzZQogIHR5cGVkZWYgc3RydWN0IF9zdGF0NjQJVGNsX1N0YXRCdWY7Ci0tLS0gdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlGcmkgSnVuIDEzIDAzOjM1OjM5IDIwMDgKLSsrKyB0Y2w4LjUuMlxnZW5lcmljXHRjbC5oCVN1biBKYW4gIDQgMTY6NTI6MzAgMjAwOQotQEAgLTM2Nyw3ICszNjcsNyBAQAotIHR5cGVkZWYgc3RydWN0IHN0YXRpNjQgVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGRlZmluZSBUQ0xfTExfTU9ESUZJRVIJIkwiCi0gIyAgICAgIGVsc2UgLyogX19CT1JMQU5EQ19fICovCi0tIyAgICAgICAgIGlmIF9NU0NfVkVSIDwgMTQwMCAmJiAhZGVmaW5lZChfTV9JWDg2KQotKyMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgLyomJiAhZGVmaW5lZChfTV9JWDg2KSovCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXRpNjQJVGNsX1N0YXRCdWY7Ci0gIyAgICAgICAgIGVsc2UKLSB0eXBlZGVmIHN0cnVjdCBfc3RhdDY0CVRjbF9TdGF0QnVmOwpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagppbmRleCBjMDVhZGRkLi5hNmY4OTdhIDEwMDY0NAotLS0gYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagpAQCAtMzksMTUgKzM5LDE1IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMxLmRsbCINCisJCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMi5kbGwiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KIAkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMS5wZGIiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMi5wZGIiDQogCQkJCVN1YlN5c3RlbT0iMiINCiAJCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMS5saWIiDQorCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQpAQCAtOTksMTUgKzk5LDE1IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMxX2QuZGxsIg0KKwkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMyX2QuZGxsIg0KIAkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQogCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzFfZC5wZGIiDQorCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMl9kLnBkYiINCiAJCQkJU3ViU3lzdGVtPSIyIg0KIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMxX2QubGliIg0KKwkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzJfZC5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQpAQCAtMTY2LDE1ICsxNjYsMTUgQEAKIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQogCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQogCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMxLmRsbCINCisJCQkJT3V0cHV0RmlsZT0iLi9weXRob24zMi5kbGwiDQogCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCiAJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJGQUxTRSINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzEucGRiIg0KKwkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uMzIucGRiIg0KIAkJCQlTdWJTeXN0ZW09IjIiDQogCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzEubGliIg0KKwkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHl0aG9uMzIubGliIg0KIAkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KQEAgLTIzMywxNSArMjMzLDE1IEBACiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCiAJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzEuZGxsIg0KKwkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMyLmRsbCINCiAJCQkJTGlua0luY3JlbWVudGFsPSIxIg0KIAkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQogCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMxLnBkYiINCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMyLnBkYiINCiAJCQkJU3ViU3lzdGVtPSIyIg0KIAkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMxLmxpYiINCisJCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCkBAIC0zOTEsOSArMzkxLDE1IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvZGVjc21vZHVsZS5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIj4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyI+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZnVuY3Rvb2xzbW9kdWxlLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCkBAIC00MDksNiArNDE1LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX21hdGguYyI+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCkBAIC00MjQsMTAgKzQzMywxMyBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1xfc3VicHJvY2Vzcy5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF93ZWFrcmVmLmMiPg0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQY1x3aW5yZWcuYyI+DQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIj4NCkBAIC00MzksOSArNDUxLDYgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc2RsLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCkBAIC00NjYsMTAgKzQ3NSwxMCBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+DQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc19tZXRob2RzLmMiPg0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIj4NCkBAIC00OTAsMTggKzQ5OSwxMiBAQAogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2xsZWN0aW9uc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQpAQCAtNTExLDcgKzUxNCw3IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGRhdGV0aW1lbW9kdWxlLmMiPg0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xkZXNjcm9iamVjdC5jIj4NCkBAIC01NDQsNiArNTQ3LDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyI+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQpAQCAtNzQ2LDYgKzc1Miw5IEBACiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIj4NCiAJCTwvRmlsZT4NCiAJCTxGaWxlDQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCkBAIC04MjEsNiArODMwLDkgQEAKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiPg0KIAkJPC9GaWxlPg0KIAkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXHdpbnJlZy5jIj4NCisJCTwvRmlsZT4NCisJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyI+DQogCQk8L0ZpbGU+DQogCQk8RmlsZQ0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3J0LmJhdCBiL1BDL1ZTNy4xL3J0LmJhdAppbmRleCBiYTFkMDkwLi5hOTEwYTc5IDEwMDc1NQotLS0gYS9QQy9WUzcuMS9ydC5iYXQKKysrIGIvUEMvVlM3LjEvcnQuYmF0CkBAIC0yNyw3ICsyNyw3IEBACiBzZXQgZXhlPXB5dGhvbgogc2V0IHFtb2RlPQogc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCitQQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgogCiA6Q2hlY2tPcHRzCiBpZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvaiBiL1BDL1ZTOC4wL19oYXNobGliLnZjcHJvagppbmRleCBmYWE4Mzg4Li5mMDMxZTJlIDEwMDY0NAotLS0gYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKKysrIGIvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCkBAIC0yNyw3ICsyNyw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTg5LDcgKzg4LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMTUzLDcgKzE1MSw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTIxNiw3ICsyMTMsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC0yODAsNyArMjc2LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMzQzLDcgKzMzOCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTQwOCw3ICs0MDIsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC00NzEsNyArNDY0LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGI3ODVmOTUuLjY0ZjE5ZjEgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTQyLDcgKzQyLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0yOTEsNyArMjkxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC0zNTQsNyArMzU0LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MTcsNyArNDE3LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00ODAsNyArNDgwLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNS45Ig0KKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL19zc2wudmNwcm9qCmluZGV4IDY5Zjc3MjYuLmQ5MjY3YTQgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL19zc2wudmNwcm9qCisrKyBiL1BDL1ZTOC4wL19zc2wudmNwcm9qCkBAIC0yNyw3ICsyNyw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTg5LDcgKzg4LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMTUzLDcgKzE1MSw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTIxNiw3ICsyMTMsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC0yODAsNyArMjc2LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMzQzLDcgKzMzOCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTQwOCw3ICs0MDIsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC00NzEsNyArNDY0LDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKaW5kZXggY2VlNjRhOC4uMzljMWZmMCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgYi9QQy9WUzguMC9idWlsZF9zc2wuYmF0CkBAIC0yLDEwICsyLDEwIEBACiBpZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCiAgIGlmICUxIEVRVSBEZWJ1ZyAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMV9kLmRsbCBleGl0IDEKKyAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzJfZC5kbGwgZXhpdCAxCiAgICkgRUxTRSAoCiAgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzEuZGxsIGV4aXQgMQorICAgIGlmIG5vdCBleGlzdCBweXRob24zMi5kbGwgZXhpdCAxCiAgICkKICkKICVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKaW5kZXggYTA4Y2M1ZS4uZGMxM2VmNSAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5weQpAQCAtMTQxLDExICsxNDEsMjcgQEAKICAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKIAogZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQorICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCisgICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCiAgICAgcHJpbnQoZG9fc2NyaXB0KQogICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCiAKK2RlZiBjbXAoZjEsIGYyKToKKyAgICBidWZzaXplID0gMTAyNCAqIDgKKyAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQorICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQorICAgICAgICAgICAgaWYgYjEgIT0gYjI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3QgYjE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNvcHkoc3JjLCBkc3QpOgorICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6CisgICAgICAgIHJldHVybgorICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQorCiBkZWYgbWFpbigpOgogICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKICAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6CkBAIC0xNjEsMTIgKzE3NywxNCBAQAogICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCiAgICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgogICAgICAgICBtMzIgPSBtYWtlZmlsZQorICAgICAgICBkaXJzdWZmaXggPSAiMzIiCiAgICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKICAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCiAgICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgogICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCiAgICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCisgICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKICAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQpAQCAtMjIwLDggKzIzOCwxNyBAQAogICAgICAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgogICAgICAgICAgICAgICAgIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpCiAgICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBzaHV0aWwuY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKKyAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKKyAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKKworICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQorICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKKyAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCisgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCiAKICAgICAgICAgIyBOb3cgcnVuIG1ha2UuCiAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKQEAgLTIzMCw4ICsyNTcsOCBAQAogICAgICAgICAgICAgICAgIHByaW50KCJtbDY0IGFzc2VtYmxlciBoYXMgZmFpbGVkLiIpCiAgICAgICAgICAgICAgICAgc3lzLmV4aXQocmMpCiAKLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKKyAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQorICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCiAKICAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQogICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKaW5kZXggZTZmZmRmMi4uYTk3ZDFkNSAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgYi9QQy9WUzguMC9iejIudmNwcm9qCkBAIC00Myw3ICs0Myw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtNDE4LDcgKzQxOCw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24uYyBiL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLmMKaW5kZXggMTdhNWYzMi4uNmI5MTY3OCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAva2lsbF9weXRob24uYworKysgYi9QQy9WUzguMC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzFbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzJbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgogICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCmluZGV4IDhjYzNkYTIuLjhlZmEwN2EgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKKysrIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8uYwpAQCAtMTksOSArMTksMTUgQEAKICAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKICAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KIAorICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCisgICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKKyAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQorICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCisgICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgorCiAqLwogCi1pbnQgbWFrZV9idWlsZGluZm8yKCkKK2ludCBtYWtlX2J1aWxkaW5mbzIoY29uc3QgY2hhciAqdG1wcGF0aCkKIHsKICAgICBzdHJ1Y3QgX3N0YXQgc3Q7CiAgICAgSEtFWSBoVG9ydG9pc2U7CkBAIC00Niw3ICs1Miw5IEBACiAgICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCiAgICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwogICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIGdldGJ1aWxkaW5mbzIuYyIpOworICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiXCIgLi5cXC4uIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgIik7CisgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOworICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIik7CiAgICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7CiAgICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTUsMTAgKzYzLDEyIEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKIHsKLSAgICBjaGFyIGNvbW1hbmRbNTAwXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKKyAgICBjaGFyIGNvbW1hbmRbQ01EX1NJWkVdID0gImNsLmV4ZSAtYyAtRF9XSU4zMiAtRFVTRV9ETF9FWFBPUlQgLURfV0lORE9XUyAtRFdJTjMyIC1EX1dJTkRMTCAiOworICAgIGNoYXIgdG1wcGF0aFtDTURfU0laRV0gPSAiIjsKICAgICBpbnQgZG9fdW5saW5rLCByZXN1bHQ7Ci0gICAgaWYgKGFyZ2MgIT0gMikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2VfYnVpbGRpbmZvICQoQ29uZmlndXJhdGlvbk5hbWUpXG4iKTsKKyAgICBjaGFyICp0bXBkaXIgPSBOVUxMOworICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7CiAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICAgfQogICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7CkBAIC03OCwxNiArODgsMjggQEAKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgICB9CisgICAgaWYgKGFyZ2MgPiAyKSB7CisgICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07CisgICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOworICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7CisgICAgfQogCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIoKSkpCisgICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIodG1wcGF0aCkpKSB7CisgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKICAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICBlbHNlCisgICAgfSBlbHNlCiAgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOworICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1GbyIpOworICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKKyAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwogICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwogICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKQotICAgICAgICBfdW5saW5rKCJnZXRidWlsZGluZm8yLmMiKTsKKyAgICBpZiAoZG9fdW5saW5rKSB7CisgICAgICAgIGNvbW1hbmRbMF0gPSAnXDAnOworICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7CisgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIik7CisgICAgICAgIF91bmxpbmsoY29tbWFuZCk7CisgICAgfQogICAgIGlmIChyZXN1bHQgPCAwKQogICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCmluZGV4IDNjYzcxZTYuLmZiNWNjY2QgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKQEAgLTEyLDkgKzEyLDYgQEAKIAkJPFBsYXRmb3JtDQogCQkJTmFtZT0iV2luMzIiDQogCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCiAJPC9QbGF0Zm9ybXM+DQogCTxUb29sRmlsZXM+DQogCTwvVG9vbEZpbGVzPg0KQEAgLTg0LDY0ICs4MSw2IEBACiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCiAJPC9Db25maWd1cmF0aW9ucz4NCiAJPFJlZmVyZW5jZXM+DQogCTwvUmVmZXJlbmNlcz4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCmluZGV4IGI0ZmU5OWYuLjlhY2E0YWEgMTAwNjQ0Ci0tLSBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCisrKyBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCkBAIC03NCw2ICs3NCw3IEBACiAJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCiAJCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9ID0gezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0NCiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGNhcGkiLCAiX3Rlc3RjYXBpLnZjcHJvaiIsICJ7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfSINCkBAIC0xMTIsNiArMTEzLDcgQEAKIAlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3FsaXRlMyIsICJzcWxpdGUzLnZjcHJvaiIsICJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCkBAIC0xMjQsNiArMTI2LDExIEBACiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjcHJvaiIsICJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImtpbGxfcHl0aG9uIiwgImtpbGxfcHl0aG9uLnZjcHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCiBFbmRQcm9qZWN0DQogR2xvYmFsDQpAQCAtNTE0LDYgKzUyMSwyMiBAQAogCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzIGIvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMKaW5kZXggNzAwMjViZC4uNjQ5NDIxNiAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMKKysrIGIvUEMvVlM4LjAvcHlwcm9qZWN0LnZzcHJvcHMKQEAgLTM4LDcgKzM4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzEiDQorCQlWYWx1ZT0icHl0aG9uMzIiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5dGhvbkV4ZSINCkBAIC01MCw3ICs1MCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNS45Ig0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy42LjIxIg0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJiejJEaXIiDQpAQCAtNTgsNyArNTgsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMC45LjhsIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4wYSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0idGNsdGtEaXIiDQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagppbmRleCA1YzgwNmQ4Li43MjUyYmNkIDEwMDY0NAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpAQCAtNTksMTEgKzU5LDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UiDQorCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQogCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQpAQCAtMTM0LDExICsxMzQsMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC0yMTIsMTEgKzIxMiwxMSBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KIAkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICQoSW50RGlyKSINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KQEAgLTI5MCwxMSArMjkwLDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnIg0KKwkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KIAkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQpAQCAtMzY0LDExICszNjQsMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC00MzksMTEgKzQzOSwxMSBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KIAkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlIg0KKwkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQogCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KIAkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KQEAgLTUxNCwxMSArNTE0LDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UiDQorCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICgkSW50RGlyKSINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQogCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQpAQCAtNTg5LDExICs1ODksMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC02NzUsMTAgKzY3NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNzA3LDYgKzcwMywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGR5bmFtaWNfYW5ub3RhdGlvbnMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZW51bW9iamVjdC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxmaWxldXRpbHMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmxvYXRvYmplY3QuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03NTUsMTAgKzc1OSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW50b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg4Myw2ICs4ODMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltZW0uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMDE5LDYgKzEwMjMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcGlja2xlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTAzNSw2ICsxMDQ3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMDU5LDcgKzEwNzksNyBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGRhdGV0aW1lbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTEyMTYsNiArMTIzNiw3MCBAQAogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQogCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQpAQCAtMTM5MSwxMCArMTQ3NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTQ5OSw2ICsxNTc5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTE2NTksNiArMTc0MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTY2Nyw2ICsxNzU1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTE3NTUsNiArMTg0NywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3J0LmJhdCBiL1BDL1ZTOC4wL3J0LmJhdAppbmRleCBjMzVlYzBjLi4wNDI5ZTE5IDEwMDY0NAotLS0gYS9QQy9WUzguMC9ydC5iYXQKKysrIGIvUEMvVlM4LjAvcnQuYmF0CkBAIC0yNyw3ICsyNyw3IEBACiBzZXQgZXhlPXB5dGhvbgogc2V0IHFtb2RlPQogc2V0IGRhc2hPPQotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCitQQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgogCiA6Q2hlY2tPcHRzCiBpZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKaW5kZXggOWZlOGE5Yi4uOWFmYmU1ZCAxMDA2NDQKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKQEAgLTI4Nyw3ICsyODcsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSImcXVvdDsuLlwuLlwuLlxzcWxpdGUtMy41LjkmcXVvdDsiDQorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCkBAIC01MTUsMTEgKzUxNSwxMSBAQAogCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjUuOVxzcWxpdGUzLmgiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy41Ljlcc3FsaXRlM2V4dC5oIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjFcc3FsaXRlM2V4dC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQogCQkJPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNS45XHNxbGl0ZTMuYyINCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcyBiL1BDL1ZTOC4wL3NxbGl0ZTMudnNwcm9wcwppbmRleCA4YzAyOGRjLi44MzAwMzI4IDEwMDY0NAotLS0gYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKKysrIGIvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCkBAIC03LDcgKzcsNyBAQAogCT4NCiAJPFRvb2wNCiAJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy41LjkiDQorCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KIAkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlNRTElURV9BUEk9X19kZWNsc3BlYyhkbGxleHBvcnQpIg0KIAkJV2FybmluZ0xldmVsPSIxIg0KIAkvPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NzbC52Y3Byb2ogYi9QQy9WUzguMC9zc2wudmNwcm9qCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwZDYzNWUKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9WUzguMC9zc2wudmNwcm9qCkBAIC0wLDAgKzEsMTg5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCis8VmlzdWFsU3R1ZGlvUHJvamVjdA0KKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCisJVmVyc2lvbj0iOC4wMCINCisJTmFtZT0ic3NsIg0KKwlQcm9qZWN0R1VJRD0ie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQorCVJvb3ROYW1lc3BhY2U9InNzbCINCisJS2V5d29yZD0iTWFrZUZpbGVQcm9qIg0KKwlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQorCT4NCisJPFBsYXRmb3Jtcz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9IldpbjMyIg0KKwkJLz4NCisJCTxQbGF0Zm9ybQ0KKwkJCU5hbWU9Ing2NCINCisJCS8+DQorCTwvUGxhdGZvcm1zPg0KKwk8VG9vbEZpbGVzPg0KKwk8L1Rvb2xGaWxlcz4NCisJPENvbmZpZ3VyYXRpb25zPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IkRlYnVnfHg2NCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCisJCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KKwkJCQlPdXRwdXQ9IiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkSW5jbHVkZXM9IiINCisJCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KKwkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJSZWxlYXNlfHg2NCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCisJCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KKwkJCQlPdXRwdXQ9IiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkSW5jbHVkZXM9IiINCisJCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KKwkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJPC9Db25maWd1cmF0aW9ucz4NCisJPFJlZmVyZW5jZXM+DQorCTwvUmVmZXJlbmNlcz4NCisJPEZpbGVzPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9fbXNpLmMgYi9QQy9fbXNpLmMKaW5kZXggMjZmM2YzMy4uZDRkODQ4MyAxMDA2NDQKLS0tIGEvUEMvX21zaS5jCisrKyBiL1BDL19tc2kuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIEhlbHBlciBsaWJyYXJ5IGZvciBNU0kgY3JlYXRpb24gd2l0aCBQeXRob24uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWFydGluIHYuIEz2d2lzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTWFydGluIHYuIEzDtndpcwogICogTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogICovCiAKZGlmZiAtLWdpdCBhL1BDL19zdWJwcm9jZXNzLmMgYi9QQy9fc3VicHJvY2Vzcy5jCmluZGV4IDI3ZDNkYzYuLjIzMzhmMzAgMTAwNjQ0Ci0tLSBhL1BDL19zdWJwcm9jZXNzLmMKKysrIGIvUEMvX3N1YnByb2Nlc3MuYwpAQCAtMzI5LDcgKzMyOSw4IEBACiBzdGF0aWMgUHlPYmplY3QqCiBnZXRlbnZpcm9ubWVudChQeU9iamVjdCogZW52aXJvbm1lbnQpCiB7Ci0gICAgaW50IGksIGVudnNpemU7CisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBlbnZzaXplOwogICAgIFB5T2JqZWN0KiBvdXQgPSBOVUxMOwogICAgIFB5T2JqZWN0KiBrZXlzOwogICAgIFB5T2JqZWN0KiB2YWx1ZXM7CkBAIC0zNTYsNyArMzU3LDcgQEAKICAgICBwID0gUHlVbmljb2RlX0FTX1VOSUNPREUob3V0KTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBlbnZzaXplOyBpKyspIHsKLSAgICAgICAgaW50IGtzaXplLCB2c2l6ZSwgdG90YWxzaXplOworICAgICAgICBQeV9zc2l6ZV90IGtzaXplLCB2c2l6ZSwgdG90YWxzaXplOwogICAgICAgICBQeU9iamVjdCoga2V5ID0gUHlMaXN0X0dFVF9JVEVNKGtleXMsIGkpOwogICAgICAgICBQeU9iamVjdCogdmFsdWUgPSBQeUxpc3RfR0VUX0lURU0odmFsdWVzLCBpKTsKIApAQCAtMzcwLDcgKzM3MSw3IEBACiAgICAgICAgIHRvdGFsc2l6ZSA9IChwIC0gUHlVbmljb2RlX0FTX1VOSUNPREUob3V0KSkgKyBrc2l6ZSArIDEgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2c2l6ZSArIDEgKyAxOwogICAgICAgICBpZiAodG90YWxzaXplID4gUHlVbmljb2RlX0dFVF9TSVpFKG91dCkpIHsKLSAgICAgICAgICAgIGludCBvZmZzZXQgPSBwIC0gUHlVbmljb2RlX0FTX1VOSUNPREUob3V0KTsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb2Zmc2V0ID0gcCAtIFB5VW5pY29kZV9BU19VTklDT0RFKG91dCk7CiAgICAgICAgICAgICBQeVVuaWNvZGVfUmVzaXplKCZvdXQsIHRvdGFsc2l6ZSArIDEwMjQpOwogICAgICAgICAgICAgcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKG91dCkgKyBvZmZzZXQ7CiAgICAgICAgIH0KQEAgLTY4Miw1ICs2ODMsNyBAQAogICAgIGRlZmludChkLCAiSU5GSU5JVEUiLCBJTkZJTklURSk7CiAgICAgZGVmaW50KGQsICJXQUlUX09CSkVDVF8wIiwgV0FJVF9PQkpFQ1RfMCk7CiAgICAgZGVmaW50KGQsICJDUkVBVEVfTkVXX0NPTlNPTEUiLCBDUkVBVEVfTkVXX0NPTlNPTEUpOworICAgIGRlZmludChkLCAiQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQIiwgQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQKTsKKwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvUEMvY29uZmlnLmMgYi9QQy9jb25maWcuYwppbmRleCAyOGQwMmIxLi4xZmMyYjQwIDEwMDY0NAotLS0gYS9QQy9jb25maWcuYworKysgYi9QQy9jb25maWcuYwpAQCAtNDMsNyArNDMsNyBAQAogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfcGFyc2VyKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfd2lucmVnKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0cnVjdCh2b2lkKTsKLWV4dGVybiBQeU9iamVjdCogUHlJbml0X2RhdGV0aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2RhdGV0aW1lKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2Z1bmN0b29scyh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19qc29uKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfemxpYih2b2lkKTsKQEAgLTYyLDYgKzYyLDcgQEAKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19waWNrbGUodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RyaW5nKHZvaWQpOwogCiAvKiB0b29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBtYXJrZXIgZm9yIGFkZGl0aW9uYWwgImV4dGVybiIgKi8KIC8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwpAQCAtMTE2LDcgKzExNyw3IEBACiAgICAgeyJwYXJzZXIiLCBQeUluaXRfcGFyc2VyfSwKICAgICB7IndpbnJlZyIsIFB5SW5pdF93aW5yZWd9LAogICAgIHsiX3N0cnVjdCIsIFB5SW5pdF9fc3RydWN0fSwKLSAgICB7ImRhdGV0aW1lIiwgUHlJbml0X2RhdGV0aW1lfSwKKyAgICB7Il9kYXRldGltZSIsIFB5SW5pdF9fZGF0ZXRpbWV9LAogICAgIHsiX2Z1bmN0b29scyIsIFB5SW5pdF9fZnVuY3Rvb2xzfSwKICAgICB7Il9qc29uIiwgUHlJbml0X19qc29ufSwKIApAQCAtMTQ3LDYgKzE0OCw3IEBACiAgICAgeyJidWlsdGlucyIsIE5VTEx9LAogICAgIHsic3lzIiwgTlVMTH0sCiAgICAgeyJfd2FybmluZ3MiLCBfUHlXYXJuaW5nc19Jbml0fSwKKyAgICB7Il9zdHJpbmciLCBQeUluaXRfX3N0cmluZ30sCiAKICAgICB7Il9pbyIsIFB5SW5pdF9faW99LAogICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKZGlmZiAtLWdpdCBhL1BDL2dldHBhdGhwLmMgYi9QQy9nZXRwYXRocC5jCmluZGV4IDBmZTA0YzcuLmNkM2E0YjIgMTAwNjQ0Ci0tLSBhL1BDL2dldHBhdGhwLmMKKysrIGIvUEMvZ2V0cGF0aHAuYwpAQCAtNTEsNiArNTEsOSBAQAogICAgIGV4ZSwgc29tZSB2ZXJ5IHN0cmFuZ2UgaW5zdGFsbGF0aW9uIHNldHVwKSB5b3UgZ2V0IGEgcGF0aCB3aXRoCiAgICAgc29tZSBkZWZhdWx0LCBidXQgcmVsYXRpdmUsIHBhdGhzLgogCisgICogQW4gZW1iZWRkaW5nIGFwcGxpY2F0aW9uIGNhbiB1c2UgUHlfU2V0UGF0aCgpIHRvIG92ZXJyaWRlIGFsbCBvZgorICAgIHRoZXNlIGF1dGhvbWF0aWMgcGF0aCBjb21wdXRhdGlvbnMuCisKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCkBAIC03OSw2ICs4Miw5IEBACiAgKiBUaGUgYXBwcm9hY2ggaXMgYW4gYWRhcHRhdGlvbiBmb3IgV2luZG93cyBvZiB0aGUgc3RyYXRlZ3kgdXNlZCBpbgogICogLi4vTW9kdWxlcy9nZXRwYXRoLmM7IGl0IHVzZXMgdGhlIFdpbmRvd3MgUmVnaXN0cnkgYXMgb25lIG9mIGl0cwogICogaW5mb3JtYXRpb24gc291cmNlcy4KKyAqCisgKiBQeV9TZXRQYXRoKCkgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhpcyBtZWNoYW5pc20uICBDYWxsIFB5X1NldFBhdGgKKyAqIHdpdGggYSBzZW1pY29sb24gc2VwYXJhdGVkIHBhdGggcHJpb3IgdG8gY2FsbGluZyBQeV9Jbml0aWFsaXplLgogICovCiAKICNpZm5kZWYgTEFORE1BUksKQEAgLTY1NCw2ICs2NjAsMjQgQEAKIAogLyogRXh0ZXJuYWwgaW50ZXJmYWNlICovCiAKK3ZvaWQKK1B5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCkKK3sKKyAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpIHsKKyAgICAgICAgZnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOworICAgIH0KKyAgICBpZiAocGF0aCAhPSBOVUxMKSB7CisgICAgICAgIGV4dGVybiB3Y2hhcl90ICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKKyAgICAgICAgd2NoYXJfdCAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7CisgICAgICAgIHdjc25jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOworICAgICAgICBwcmVmaXhbMF0gPSBMJ1wwJzsKKyAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gbWFsbG9jKCh3Y3NsZW4ocGF0aCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkKKyAgICAgICAgICAgIHdjc2NweShtb2R1bGVfc2VhcmNoX3BhdGgsIHBhdGgpOworCX0KK30KKwogd2NoYXJfdCAqCiBQeV9HZXRQYXRoKHZvaWQpCiB7CkBAIC02ODMsMyArNzA3LDM4IEBACiAgICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7CiAgICAgcmV0dXJuIHByb2dwYXRoOwogfQorCisvKiBMb2FkIHB5dGhvbjMuZGxsIGJlZm9yZSBsb2FkaW5nIGFueSBleHRlbnNpb24gbW9kdWxlIHRoYXQgbWlnaHQgcmVmZXIgCisgICB0byBpdC4gVGhhdCB3YXksIHdlIGNhbiBiZSBzdXJlIHRoYXQgYWx3YXlzIHRoZSBweXRob24zLmRsbCBjb3JyZXNwb25kaW5nIAorICAgdG8gdGhpcyBweXRob24gRExMIGlzIGxvYWRlZCwgbm90IGEgcHl0aG9uMy5kbGwgdGhhdCBtaWdodCBiZSBvbiB0aGUgcGF0aAorICAgYnkgY2hhbmNlLgorICAgUmV0dXJuIHdoZXRoZXIgdGhlIERMTCB3YXMgZm91bmQuCisqLworc3RhdGljIGludCBweXRob24zX2NoZWNrZWQgPSAwOworc3RhdGljIEhBTkRMRSBoUHl0aG9uMzsKK2ludAorX1B5X0NoZWNrUHl0aG9uMygpCit7CisgICAgd2NoYXJfdCBweTNwYXRoW01BWFBBVEhMRU4rMV07CisgICAgd2NoYXJfdCAqczsKKyAgICBpZiAocHl0aG9uM19jaGVja2VkKQorICAgICAgICByZXR1cm4gaFB5dGhvbjMgIT0gTlVMTDsKKyAgICBweXRob24zX2NoZWNrZWQgPSAxOworCisgICAgLyogSWYgdGhlcmUgaXMgYSBweXRob24zLmRsbCBuZXh0IHRvIHRoZSBweXRob24zeS5kbGwsCisgICAgICAgYXNzdW1lIHRoaXMgaXMgYSBidWlsZCB0cmVlOyB1c2UgdGhhdCBETEwgKi8KKyAgICB3Y3NjcHkocHkzcGF0aCwgZGxscGF0aCk7CisgICAgcyA9IHdjc3JjaHIocHkzcGF0aCwgTCdcXCcpOworICAgIGlmICghcykKKyAgICAgICAgcyA9IHB5M3BhdGg7CisgICAgd2NzY3B5KHMsIEwiXFxweXRob24zLmRsbCIpOworICAgIGhQeXRob24zID0gTG9hZExpYnJhcnlFeFcocHkzcGF0aCwgTlVMTCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOworICAgIGlmIChoUHl0aG9uMyAhPSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKworICAgIC8qIENoZWNrIHN5cy5wcmVmaXhcRExMc1xweXRob24zLmRsbCAqLworICAgIHdjc2NweShweTNwYXRoLCBQeV9HZXRQcmVmaXgoKSk7CisgICAgd2NzY2F0KHB5M3BhdGgsIEwiXFxETExzXFxweXRob24zLmRsbCIpOworICAgIGhQeXRob24zID0gTG9hZExpYnJhcnlFeFcocHkzcGF0aCwgTlVMTCwgTE9BRF9XSVRIX0FMVEVSRURfU0VBUkNIX1BBVEgpOworICAgIHJldHVybiBoUHl0aG9uMyAhPSBOVUxMOworfQpkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCAzNzYzMWE3Li4xNjZkZjAzIDEwMDc1NQotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtMjAwLDEyICsyMDAsMTIgQEAKIFB5RG9jX1NUUlZBUihnZXRjaF9kb2MsCiAiZ2V0Y2goKSAtPiBrZXkgY2hhcmFjdGVyXG5cCiBcblwKLVJlYWQgYSBrZXlwcmVzcyBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyLiBOb3RoaW5nIGlzIGVjaG9lZCB0b1xuXAotdGhlIGNvbnNvbGUuIFRoaXMgY2FsbCB3aWxsIGJsb2NrIGlmIGEga2V5cHJlc3MgaXMgbm90IGFscmVhZHlcblwKLWF2YWlsYWJsZSwgYnV0IHdpbGwgbm90IHdhaXQgZm9yIEVudGVyIHRvIGJlIHByZXNzZWQuIElmIHRoZSBwcmVzc2VkIGtleVxuXAotd2FzIGEgc3BlY2lhbCBmdW5jdGlvbiBrZXksIHRoaXMgd2lsbCByZXR1cm4gJ1xcMDAwJyBvciAnXFx4ZTAnOyB0aGUgbmV4dFxuXAotY2FsbCB3aWxsIHJldHVybiB0aGUga2V5Y29kZS4gVGhlIENvbnRyb2wtQyBrZXlwcmVzcyBjYW5ub3QgYmUgcmVhZCB3aXRoXG5cCi10aGlzIGZ1bmN0aW9uLiIpOworUmVhZCBhIGtleXByZXNzIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIgYXMgYSBieXRlIHN0cmluZy5cblwKK05vdGhpbmcgaXMgZWNob2VkIHRvIHRoZSBjb25zb2xlLiBUaGlzIGNhbGwgd2lsbCBibG9jayBpZiBhIGtleXByZXNzIGlzXG5cCitub3QgYWxyZWFkeSBhdmFpbGFibGUsIGJ1dCB3aWxsIG5vdCB3YWl0IGZvciBFbnRlciB0byBiZSBwcmVzc2VkLiBJZiB0aGVcblwKK3ByZXNzZWQga2V5IHdhcyBhIHNwZWNpYWwgZnVuY3Rpb24ga2V5LCB0aGlzIHdpbGwgcmV0dXJuICdcXDAwMCcgb3JcblwKKydcXHhlMCc7IHRoZSBuZXh0IGNhbGwgd2lsbCByZXR1cm4gdGhlIGtleWNvZGUuIFRoZSBDb250cm9sLUMga2V5cHJlc3NcblwKK2Nhbm5vdCBiZSByZWFkIHdpdGggdGhpcyBmdW5jdGlvbi4iKTsKIAogI2lmZGVmIF9XQ09OSU9fREVGSU5FRAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI5MSw3ICsyOTEsNyBAQAogUHlEb2NfU1RSVkFSKHB1dGNoX2RvYywKICJwdXRjaChjaGFyKSAtPiBOb25lXG5cCiBcblwKLVByaW50IHRoZSBjaGFyYWN0ZXIgY2hhciB0byB0aGUgY29uc29sZSB3aXRob3V0IGJ1ZmZlcmluZy4iKTsKK1ByaW50IHRoZSBieXRlIHN0cmluZyBjaGFyIHRvIHRoZSBjb25zb2xlIHdpdGhvdXQgYnVmZmVyaW5nLiIpOwogCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMzMwLDggKzMzMCw5IEBACiBQeURvY19TVFJWQVIodW5nZXRjaF9kb2MsCiAidW5nZXRjaChjaGFyKSAtPiBOb25lXG5cCiBcblwKLUNhdXNlIHRoZSBjaGFyYWN0ZXIgY2hhciB0byBiZSBcInB1c2hlZCBiYWNrXCIgaW50byB0aGUgY29uc29sZSBidWZmZXI7XG5cCi1pdCB3aWxsIGJlIHRoZSBuZXh0IGNoYXJhY3RlciByZWFkIGJ5IGdldGNoKCkgb3IgZ2V0Y2hlKCkuIik7CitDYXVzZSB0aGUgYnl0ZSBzdHJpbmcgY2hhciB0byBiZSBcInB1c2hlZCBiYWNrXCIgaW50byB0aGVcblwKK2NvbnNvbGUgYnVmZmVyOyBpdCB3aWxsIGJlIHRoZSBuZXh0IGNoYXJhY3RlciByZWFkIGJ5XG5cCitnZXRjaCgpIG9yIGdldGNoZSgpLiIpOwogCiAjaWZkZWYgX1dDT05JT19ERUZJTkVECiBzdGF0aWMgUHlPYmplY3QgKgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L01ha2VmaWxlIGIvUEMvb3MyZW14L01ha2VmaWxlCmluZGV4IDBkYjQ2YTUuLmQ5Y2RlZDcgMTAwNjQ0Ci0tLSBhL1BDL29zMmVteC9NYWtlZmlsZQorKysgYi9QQy9vczJlbXgvTWFrZWZpbGUKQEAgLTMzMiw2ICszMzIsNyBAQAogCQlQeXRob24vY2V2YWwuYyBcCiAJCVB5dGhvbi9jb21waWxlLmMgXAogCQlQeXRob24vY29kZWNzLmMgXAorCQlQeXRob24vZHluYW1pY19hbm5vdGF0aW9ucy5jIFwKIAkJUHl0aG9uL2Vycm9ycy5jIFwKIAkJUHl0aG9uL2Zyb3plbi5jIFwKIAkJUHl0aG9uL2Zyb3plbm1haW4uYyBcCmRpZmYgLS1naXQgYS9QQy9vczJlbXgvcHl0aG9uMjcuZGVmIGIvUEMvb3MyZW14L3B5dGhvbjI3LmRlZgppbmRleCAwNzc2Y2VkLi5kODdkZDc2IDEwMDY0NAotLS0gYS9QQy9vczJlbXgvcHl0aG9uMjcuZGVmCisrKyBiL1BDL29zMmVteC9weXRob24yNy5kZWYKQEAgLTEwNDgsMTEgKzEwNDgsNiBAQAogICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKICAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgogCi07IEZyb20gcHl0aG9uMjZfcy5saWIocHlzdHJ0b2QpCi0gICJQeU9TX2FzY2lpX3N0cnRvZCIKLSAgIlB5T1NfYXNjaWlfZm9ybWF0ZCIKLSAgIlB5T1NfYXNjaWlfYXRvZiIKLQogOyBGcm9tIHB5dGhvbjI2X3MubGliKHB5dGhvbnJ1bikKICAgIlB5X0lnbm9yZUVudmlyb25tZW50RmxhZyIKICAgIlB5X0RlYnVnRmxhZyIKQEAgLTExNzMsNyArMTE2OCw2IEBACiAgICJQeVRocmVhZF9kZWxldGVfa2V5IgogICAiUHlUaHJlYWRfc2V0X2tleV92YWx1ZSIKICAgIlB5VGhyZWFkX2dldF9rZXlfdmFsdWUiCi0gICJQeVRocmVhZF9fZXhpdF90aHJlYWQiCiAKIDsgRnJvbSBweXRob24yNl9zLmxpYihnY21vZHVsZSkKIDsgICJpbml0Z2MiCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9weXRob24uZGVmIGIvUEMvb3MydmFjcHAvcHl0aG9uLmRlZgppbmRleCA3ZDI2NTQ2Li5hNTI1YzJhIDEwMDY0NAotLS0gYS9QQy9vczJ2YWNwcC9weXRob24uZGVmCisrKyBiL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKQEAgLTM3Niw3ICszNzYsNiBAQAogICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXREaWN0CiAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX05ldwogICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9Td2FwCi0gICAgICAgICAgICAgICBQeVRocmVhZF9fZXhpdF90aHJlYWQKICAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawogICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawogICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQpkaWZmIC0tZ2l0IGEvUEMvcHljb25maWcuaCBiL1BDL3B5Y29uZmlnLmgKaW5kZXggMjQ0NGM4YS4uY2JkZGJkOCAxMDA2NDQKLS0tIGEvUEMvcHljb25maWcuaAorKysgYi9QQy9weWNvbmZpZy5oCkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIE1TX1dJTjMyIC8qIG9ubHkgc3VwcG9ydCB3aW4zMiBhbmQgZ3JlYXRlci4gKi8KICNkZWZpbmUgTVNfV0lORE9XUwogI2lmbmRlZiBQWVRIT05QQVRICi0jCWRlZmluZSBQWVRIT05QQVRIIEwiLlxcRExMczsuXFxsaWI7LlxcbGliXFxwbGF0LXdpbiIKKyMJZGVmaW5lIFBZVEhPTlBBVEggTCIuXFxETExzOy5cXGxpYiIKICNlbmRpZgogI2RlZmluZSBOVF9USFJFQURTCiAjZGVmaW5lIFdJVEhfVEhSRUFECkBAIC05NSwxMiArOTUsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5DRQotLyogUHl0aG9uIHVzZXMgR2V0VmVyc2lvbigpIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KLSAqIFdpbmRvd3MgTlQgYW5kIDl4L01FIHdoZXJlIE9TIFVuaWNvZGUgc3VwcG9ydCBpcyBjb25jZXJuZWQuCi0gKiBXaW5kb3dzIENFIHN1cHBvcnRzIFVuaWNvZGUgaW4gdGhlIHNhbWUgd2F5IGFzIE5UIHNvIHdlCi0gKiBkZWZpbmUgdGhlIG1pc3NpbmcgR2V0VmVyc2lvbigpIGFjY29yZGluZ2x5LgotICovCi0jZGVmaW5lIEdldFZlcnNpb24oKSAoNCkKIC8qIFdpbmRvd3MgQ0UgZG9lcyBub3Qgc3VwcG9ydCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KICNkZWZpbmUgZ2V0ZW52KHYpIChOVUxMKQogI2RlZmluZSBlbnZpcm9uIChOVUxMKQpAQCAtMzI0LDEwICszMTgsMTIgQEAKIAkJCS8qIFNvIE1TVkMgdXNlcnMgbmVlZCBub3Qgc3BlY2lmeSB0aGUgLmxpYiBmaWxlIGluCiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KLSMJCQlpZmRlZiBfREVCVUcKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zMV9kLmxpYiIpCisjCQkJaWYgZGVmaW5lZChfREVCVUcpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzJfZC5saWIiKQorIwkJCWVsaWYgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKKyMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zLmxpYiIpCiAjCQkJZWxzZQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMxLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzIubGliIikKICMJCQllbmRpZiAvKiBfREVCVUcgKi8KICMJCWVuZGlmIC8qIF9NU0NfVkVSICovCiAjCWVuZGlmIC8qIFB5X0JVSUxEX0NPUkUgKi8KQEAgLTcyNyw2ICs3MjMsOSBAQAogLyogRGVmaW5lIGlmIHRoZSBjb21waWxlciBwcm92aWRlcyBhIHdjaGFyLmggaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfV0NIQVJfSCAxCiAKKy8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAyCisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZGwgbGlicmFyeSAoLWxkbCkuICAqLwogLyogI3VuZGVmIEhBVkVfTElCREwgKi8KIApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5kZWYgYi9QQy9weXRob24zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODQ1MzM1Ci0tLSAvZGV2L251bGwKKysrIGIvUEMvcHl0aG9uMy5kZWYKQEAgLTAsMCArMSw2ODkgQEAKK0xJQlJBUlkJInB5dGhvbjMiCitFWFBPUlRTCisgIFB5QXJnX1BhcnNlPXB5dGhvbjMyLlB5QXJnX1BhcnNlCisgIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzIuUHlBcmdfUGFyc2VUdXBsZQorICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzIuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCisgIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjMyLlB5QXJnX1VucGFja1R1cGxlCisgIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzIuUHlBcmdfVmFQYXJzZQorICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMi5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzIuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCisgIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjMyLlB5QmFzZU9iamVjdF9UeXBlIERBVEEKKyAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjMyLlB5Qm9vbF9Gcm9tTG9uZworICBQeUJvb2xfVHlwZT1weXRob24zMi5QeUJvb2xfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjMyLlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzIuUHlCeXRlQXJyYXlfQXNTdHJpbmcKKyAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjMyLlB5Qnl0ZUFycmF5X0NvbmNhdAorICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjMyLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKKyAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzIuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjMyLlB5Qnl0ZUFycmF5X1Jlc2l6ZQorICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjMyLlB5Qnl0ZUFycmF5X1NpemUKKyAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zMi5QeUJ5dGVBcnJheV9UeXBlIERBVEEKKyAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zMi5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKKyAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zMi5QeUJ5dGVzX0FzU3RyaW5nCisgIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjMyLlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjMyLlB5Qnl0ZXNfQ29uY2F0CisgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjMyLlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCisgIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjMyLlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCisgIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zMi5QeUJ5dGVzX0Zyb21Gb3JtYXQKKyAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zMi5QeUJ5dGVzX0Zyb21Gb3JtYXRWCisgIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zMi5QeUJ5dGVzX0Zyb21PYmplY3QKKyAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjMyLlB5Qnl0ZXNfRnJvbVN0cmluZworICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMyLlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlCeXRlc19SZXByPXB5dGhvbjMyLlB5Qnl0ZXNfUmVwcgorICBQeUJ5dGVzX1NpemU9cHl0aG9uMzIuUHlCeXRlc19TaXplCisgIFB5Qnl0ZXNfVHlwZT1weXRob24zMi5QeUJ5dGVzX1R5cGUgREFUQQorICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjMyLlB5Q0Z1bmN0aW9uX0NhbGwKKyAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zMi5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CisgIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjMyLlB5Q0Z1bmN0aW9uX0dldEZsYWdzCisgIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjMyLlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCisgIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzIuUHlDRnVuY3Rpb25fR2V0U2VsZgorICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zMi5QeUNGdW5jdGlvbl9OZXdFeAorICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjMyLlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQorICBQeUNhbGxJdGVyX05ldz1weXRob24zMi5QeUNhbGxJdGVyX05ldworICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzIuUHlDYWxsSXRlcl9UeXBlIERBVEEKKyAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zMi5QeUNhbGxhYmxlX0NoZWNrCisgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjMyLlB5Q2Fwc3VsZV9HZXRDb250ZXh0CisgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjMyLlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCisgIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjMyLlB5Q2Fwc3VsZV9HZXROYW1lCisgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjMyLlB5Q2Fwc3VsZV9HZXRQb2ludGVyCisgIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzIuUHlDYXBzdWxlX0ltcG9ydAorICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zMi5QeUNhcHN1bGVfSXNWYWxpZAorICBQeUNhcHN1bGVfTmV3PXB5dGhvbjMyLlB5Q2Fwc3VsZV9OZXcKKyAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzIuUHlDYXBzdWxlX1NldENvbnRleHQKKyAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzIuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzIuUHlDYXBzdWxlX1NldE5hbWUKKyAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzIuUHlDYXBzdWxlX1NldFBvaW50ZXIKKyAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzIuUHlDYXBzdWxlX1R5cGUgREFUQQorICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zMi5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCisgIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zMi5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzIuUHlDb2RlY19EZWNvZGUKKyAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjMyLlB5Q29kZWNfRGVjb2RlcgorICBQeUNvZGVjX0VuY29kZT1weXRob24zMi5QeUNvZGVjX0VuY29kZQorICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzIuUHlDb2RlY19FbmNvZGVyCisgIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjMyLlB5Q29kZWNfSWdub3JlRXJyb3JzCisgIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjMyLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCisgIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjMyLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCisgIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zMi5QeUNvZGVjX0tub3duRW5jb2RpbmcKKyAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zMi5QeUNvZGVjX0xvb2t1cEVycm9yCisgIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzIuUHlDb2RlY19SZWdpc3RlcgorICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzIuUHlDb2RlY19SZWdpc3RlckVycm9yCisgIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zMi5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzIuUHlDb2RlY19TdHJlYW1SZWFkZXIKKyAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzIuUHlDb2RlY19TdHJlYW1Xcml0ZXIKKyAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzIuUHlDb2RlY19TdHJpY3RFcnJvcnMKKyAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zMi5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCisgIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zMi5QeUNvbXBsZXhfRnJvbURvdWJsZXMKKyAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zMi5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCisgIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzIuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQorICBQeUNvbXBsZXhfVHlwZT1weXRob24zMi5QeUNvbXBsZXhfVHlwZSBEQVRBCisgIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzIuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAorICBQeURlc2NyX05ld0dldFNldD1weXRob24zMi5QeURlc2NyX05ld0dldFNldAorICBQeURlc2NyX05ld01lbWJlcj1weXRob24zMi5QeURlc2NyX05ld01lbWJlcgorICBQeURlc2NyX05ld01ldGhvZD1weXRob24zMi5QeURlc2NyX05ld01ldGhvZAorICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjMyLlB5RGljdEl0ZW1zX1R5cGUgREFUQQorICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjMyLlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQorICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzIuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKKyAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzIuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQorICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzIuUHlEaWN0S2V5c19UeXBlIERBVEEKKyAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjMyLlB5RGljdFByb3h5X05ldworICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjMyLlB5RGljdFByb3h5X1R5cGUgREFUQQorICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zMi5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCisgIFB5RGljdF9DbGVhcj1weXRob24zMi5QeURpY3RfQ2xlYXIKKyAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjMyLlB5RGljdF9Db250YWlucworICBQeURpY3RfQ29weT1weXRob24zMi5QeURpY3RfQ29weQorICBQeURpY3RfRGVsSXRlbT1weXRob24zMi5QeURpY3RfRGVsSXRlbQorICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zMi5QeURpY3RfRGVsSXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbT1weXRob24zMi5QeURpY3RfR2V0SXRlbQorICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zMi5QeURpY3RfR2V0SXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zMi5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgorICBQeURpY3RfSXRlbXM9cHl0aG9uMzIuUHlEaWN0X0l0ZW1zCisgIFB5RGljdF9LZXlzPXB5dGhvbjMyLlB5RGljdF9LZXlzCisgIFB5RGljdF9NZXJnZT1weXRob24zMi5QeURpY3RfTWVyZ2UKKyAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzIuUHlEaWN0X01lcmdlRnJvbVNlcTIKKyAgUHlEaWN0X05ldz1weXRob24zMi5QeURpY3RfTmV3CisgIFB5RGljdF9OZXh0PXB5dGhvbjMyLlB5RGljdF9OZXh0CisgIFB5RGljdF9TZXRJdGVtPXB5dGhvbjMyLlB5RGljdF9TZXRJdGVtCisgIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjMyLlB5RGljdF9TZXRJdGVtU3RyaW5nCisgIFB5RGljdF9TaXplPXB5dGhvbjMyLlB5RGljdF9TaXplCisgIFB5RGljdF9UeXBlPXB5dGhvbjMyLlB5RGljdF9UeXBlIERBVEEKKyAgUHlEaWN0X1VwZGF0ZT1weXRob24zMi5QeURpY3RfVXBkYXRlCisgIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzIuUHlEaWN0X1ZhbHVlcworICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzIuUHlFbGxpcHNpc19UeXBlIERBVEEKKyAgUHlFbnVtX1R5cGU9cHl0aG9uMzIuUHlFbnVtX1R5cGUgREFUQQorICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zMi5QeUVycl9CYWRBcmd1bWVudAorICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzIuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zMi5QeUVycl9DaGVja1NpZ25hbHMKKyAgUHlFcnJfQ2xlYXI9cHl0aG9uMzIuUHlFcnJfQ2xlYXIKKyAgUHlFcnJfRGlzcGxheT1weXRob24zMi5QeUVycl9EaXNwbGF5CisgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzIuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9GZXRjaD1weXRob24zMi5QeUVycl9GZXRjaAorICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzIuUHlFcnJfRm9ybWF0CisgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMi5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjMyLlB5RXJyX05ld0V4Y2VwdGlvbgorICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjMyLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKKyAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzIuUHlFcnJfTm9NZW1vcnkKKyAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjMyLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorICBQeUVycl9PY2N1cnJlZD1weXRob24zMi5QeUVycl9PY2N1cnJlZAorICBQeUVycl9QcmludD1weXRob24zMi5QeUVycl9QcmludAorICBQeUVycl9QcmludEV4PXB5dGhvbjMyLlB5RXJyX1ByaW50RXgKKyAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzIuUHlFcnJfUHJvZ3JhbVRleHQKKyAgUHlFcnJfUmVzdG9yZT1weXRob24zMi5QeUVycl9SZXN0b3JlCisgIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zMi5QeUVycl9TZXRGcm9tRXJybm8KKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjMyLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQorICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzIuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0CisgIFB5RXJyX1NldEludGVycnVwdD1weXRob24zMi5QeUVycl9TZXRJbnRlcnJ1cHQKKyAgUHlFcnJfU2V0Tm9uZT1weXRob24zMi5QeUVycl9TZXROb25lCisgIFB5RXJyX1NldE9iamVjdD1weXRob24zMi5QeUVycl9TZXRPYmplY3QKKyAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjMyLlB5RXJyX1NldFN0cmluZworICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zMi5QeUVycl9TeW50YXhMb2NhdGlvbgorICBQeUVycl9XYXJuRXg9cHl0aG9uMzIuUHlFcnJfV2FybkV4CisgIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zMi5QeUVycl9XYXJuRXhwbGljaXQKKyAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zMi5QeUVycl9XYXJuRm9ybWF0CisgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zMi5QeUVycl9Xcml0ZVVucmFpc2FibGUKKyAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjMyLlB5RXZhbF9BY3F1aXJlTG9jaworICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zMi5QeUV2YWxfQWNxdWlyZVRocmVhZAorICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMyLlB5RXZhbF9DYWxsRnVuY3Rpb24KKyAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzIuUHlFdmFsX0NhbGxNZXRob2QKKyAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzIuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKKyAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjMyLlB5RXZhbF9FdmFsQ29kZQorICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zMi5QeUV2YWxfRXZhbENvZGVFeAorICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjMyLlB5RXZhbF9FdmFsRnJhbWUKKyAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjMyLlB5RXZhbF9FdmFsRnJhbWVFeAorICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzIuUHlFdmFsX0dldEJ1aWx0aW5zCisgIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzIuUHlFdmFsX0dldENhbGxTdGF0cworICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzIuUHlFdmFsX0dldEZyYW1lCisgIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zMi5QeUV2YWxfR2V0RnVuY0Rlc2MKKyAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjMyLlB5RXZhbF9HZXRGdW5jTmFtZQorICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zMi5QeUV2YWxfR2V0R2xvYmFscworICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjMyLlB5RXZhbF9HZXRMb2NhbHMKKyAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjMyLlB5RXZhbF9Jbml0VGhyZWFkcworICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zMi5QeUV2YWxfUmVJbml0VGhyZWFkcworICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzIuUHlFdmFsX1JlbGVhc2VMb2NrCisgIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjMyLlB5RXZhbF9SZWxlYXNlVGhyZWFkCisgIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjMyLlB5RXZhbF9SZXN0b3JlVGhyZWFkCisgIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjMyLlB5RXZhbF9TYXZlVGhyZWFkCisgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzIuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAorICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzIuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKKyAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzIuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQorICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zMi5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCisgIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzIuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjMyLlB5RXhjX0J1ZmZlckVycm9yIERBVEEKKyAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjMyLlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCisgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMi5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19FT0ZFcnJvcj1weXRob24zMi5QeUV4Y19FT0ZFcnJvciBEQVRBCisgIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzIuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCisgIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zMi5QeUV4Y19FeGNlcHRpb24gREFUQQorICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzIuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKKyAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zMi5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKKyAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zMi5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKKyAgUHlFeGNfSU9FcnJvcj1weXRob24zMi5QeUV4Y19JT0Vycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzIuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjMyLlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQorICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjMyLlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQorICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjMyLlB5RXhjX0luZGV4RXJyb3IgREFUQQorICBQeUV4Y19LZXlFcnJvcj1weXRob24zMi5QeUV4Y19LZXlFcnJvciBEQVRBCisgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjMyLlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKKyAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzIuUHlFeGNfTG9va3VwRXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zMi5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zMi5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQorICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzIuUHlFeGNfTmFtZUVycm9yIERBVEEKKyAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zMi5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKKyAgUHlFeGNfT1NFcnJvcj1weXRob24zMi5QeUV4Y19PU0Vycm9yIERBVEEKKyAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zMi5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKKyAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMi5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjMyLlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCisgIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjMyLlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjMyLlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjMyLlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zMi5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKKyAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzIuUHlFeGNfU3ludGF4RXJyb3IgREFUQQorICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjMyLlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQorICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zMi5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCisgIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzIuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCisgIFB5RXhjX1RhYkVycm9yPXB5dGhvbjMyLlB5RXhjX1RhYkVycm9yIERBVEEKKyAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjMyLlB5RXhjX1R5cGVFcnJvciBEQVRBCisgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjMyLlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjMyLlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zMi5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzIuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjMyLlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjMyLlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKKyAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzIuUHlFeGNfVXNlcldhcm5pbmcgREFUQQorICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjMyLlB5RXhjX1ZhbHVlRXJyb3IgREFUQQorICBQeUV4Y19XYXJuaW5nPXB5dGhvbjMyLlB5RXhjX1dhcm5pbmcgREFUQQorICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zMi5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCisgIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjMyLlB5RXhjZXB0aW9uX0dldENhdXNlCisgIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzIuUHlFeGNlcHRpb25fR2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzIuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCisgIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjMyLlB5RXhjZXB0aW9uX1NldENhdXNlCisgIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzIuUHlFeGNlcHRpb25fU2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzIuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCisgIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzIuUHlGaWxlX0Zyb21GZAorICBQeUZpbGVfR2V0TGluZT1weXRob24zMi5QeUZpbGVfR2V0TGluZQorICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzIuUHlGaWxlX1dyaXRlT2JqZWN0CisgIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zMi5QeUZpbGVfV3JpdGVTdHJpbmcKKyAgUHlGaWx0ZXJfVHlwZT1weXRob24zMi5QeUZpbHRlcl9UeXBlIERBVEEKKyAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zMi5QeUZsb2F0X0FzRG91YmxlCisgIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zMi5QeUZsb2F0X0Zyb21Eb3VibGUKKyAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjMyLlB5RmxvYXRfRnJvbVN0cmluZworICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzIuUHlGbG9hdF9HZXRJbmZvCisgIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjMyLlB5RmxvYXRfR2V0TWF4CisgIFB5RmxvYXRfR2V0TWluPXB5dGhvbjMyLlB5RmxvYXRfR2V0TWluCisgIFB5RmxvYXRfVHlwZT1weXRob24zMi5QeUZsb2F0X1R5cGUgREFUQQorICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzIuUHlGcm96ZW5TZXRfTmV3CisgIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzIuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCisgIFB5R0NfQ29sbGVjdD1weXRob24zMi5QeUdDX0NvbGxlY3QKKyAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzIuUHlHSUxTdGF0ZV9FbnN1cmUKKyAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzIuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKKyAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjMyLlB5R0lMU3RhdGVfUmVsZWFzZQorICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzIuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKKyAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjMyLlB5SW1wb3J0X0FkZE1vZHVsZQorICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjMyLlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKKyAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zMi5QeUltcG9ydF9DbGVhbnVwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjMyLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzIuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzIuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCisgIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjMyLlB5SW1wb3J0X0dldEltcG9ydGVyCisgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjMyLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCisgIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjMyLlB5SW1wb3J0X0dldE1hZ2ljVGFnCisgIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzIuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAorICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzIuUHlJbXBvcnRfSW1wb3J0CisgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zMi5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjMyLlB5SW1wb3J0X0ltcG9ydE1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zMi5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjMyLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKKyAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjMyLlB5SW1wb3J0X1JlbG9hZE1vZHVsZQorICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzIuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzIuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQorICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjMyLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKKyAgUHlJdGVyX05leHQ9cHl0aG9uMzIuUHlJdGVyX05leHQKKyAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjMyLlB5TGlzdEl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zMi5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQorICBQeUxpc3RfQXBwZW5kPXB5dGhvbjMyLlB5TGlzdF9BcHBlbmQKKyAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzIuUHlMaXN0X0FzVHVwbGUKKyAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzIuUHlMaXN0X0dldEl0ZW0KKyAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjMyLlB5TGlzdF9HZXRTbGljZQorICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjMyLlB5TGlzdF9JbnNlcnQKKyAgUHlMaXN0X05ldz1weXRob24zMi5QeUxpc3RfTmV3CisgIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjMyLlB5TGlzdF9SZXZlcnNlCisgIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjMyLlB5TGlzdF9TZXRJdGVtCisgIFB5TGlzdF9TZXRTbGljZT1weXRob24zMi5QeUxpc3RfU2V0U2xpY2UKKyAgUHlMaXN0X1NpemU9cHl0aG9uMzIuUHlMaXN0X1NpemUKKyAgUHlMaXN0X1NvcnQ9cHl0aG9uMzIuUHlMaXN0X1NvcnQKKyAgUHlMaXN0X1R5cGU9cHl0aG9uMzIuUHlMaXN0X1R5cGUgREFUQQorICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zMi5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zMi5QeUxvbmdfQXNEb3VibGUKKyAgUHlMb25nX0FzTG9uZz1weXRob24zMi5QeUxvbmdfQXNMb25nCisgIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zMi5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzIuUHlMb25nX0FzTG9uZ0xvbmcKKyAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zMi5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc1NpemVfdD1weXRob24zMi5QeUxvbmdfQXNTaXplX3QKKyAgUHlMb25nX0FzU3NpemVfdD1weXRob24zMi5QeUxvbmdfQXNTc2l6ZV90CisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zMi5QeUxvbmdfQXNVbnNpZ25lZExvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zMi5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjMyLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzIuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaworICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjMyLlB5TG9uZ19Bc1ZvaWRQdHIKKyAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzIuUHlMb25nX0Zyb21Eb3VibGUKKyAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjMyLlB5TG9uZ19Gcm9tTG9uZworICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjMyLlB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzIuUHlMb25nX0Zyb21TaXplX3QKKyAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjMyLlB5TG9uZ19Gcm9tU3NpemVfdAorICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zMi5QeUxvbmdfRnJvbVN0cmluZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zMi5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzIuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zMi5QeUxvbmdfRnJvbVZvaWRQdHIKKyAgUHlMb25nX0dldEluZm89cHl0aG9uMzIuUHlMb25nX0dldEluZm8KKyAgUHlMb25nX1R5cGU9cHl0aG9uMzIuUHlMb25nX1R5cGUgREFUQQorICBQeU1hcF9UeXBlPXB5dGhvbjMyLlB5TWFwX1R5cGUgREFUQQorICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzIuUHlNYXBwaW5nX0NoZWNrCisgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjMyLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzIuUHlNYXBwaW5nX0hhc0tleQorICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjMyLlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKKyAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjMyLlB5TWFwcGluZ19JdGVtcworICBQeU1hcHBpbmdfS2V5cz1weXRob24zMi5QeU1hcHBpbmdfS2V5cworICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjMyLlB5TWFwcGluZ19MZW5ndGgKKyAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzIuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzIuUHlNYXBwaW5nX1NpemUKKyAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zMi5QeU1hcHBpbmdfVmFsdWVzCisgIFB5TWVtX0ZyZWU9cHl0aG9uMzIuUHlNZW1fRnJlZQorICBQeU1lbV9NYWxsb2M9cHl0aG9uMzIuUHlNZW1fTWFsbG9jCisgIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzIuUHlNZW1fUmVhbGxvYworICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzIuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzIuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKKyAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzIuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKKyAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzIuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQorICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzIuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzIuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKKyAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjMyLlB5TW9kdWxlX0FkZE9iamVjdAorICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zMi5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjMyLlB5TW9kdWxlX0NyZWF0ZTIKKyAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjMyLlB5TW9kdWxlX0dldERlZgorICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjMyLlB5TW9kdWxlX0dldERpY3QKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzIuUHlNb2R1bGVfR2V0RmlsZW5hbWUKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzIuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKKyAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zMi5QeU1vZHVsZV9HZXROYW1lCisgIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjMyLlB5TW9kdWxlX0dldFN0YXRlCisgIFB5TW9kdWxlX05ldz1weXRob24zMi5QeU1vZHVsZV9OZXcKKyAgUHlNb2R1bGVfVHlwZT1weXRob24zMi5QeU1vZHVsZV9UeXBlIERBVEEKKyAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zMi5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKKyAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzIuUHlOdW1iZXJfQWJzb2x1dGUKKyAgUHlOdW1iZXJfQWRkPXB5dGhvbjMyLlB5TnVtYmVyX0FkZAorICBQeU51bWJlcl9BbmQ9cHl0aG9uMzIuUHlOdW1iZXJfQW5kCisgIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zMi5QeU51bWJlcl9Bc1NzaXplX3QKKyAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzIuUHlOdW1iZXJfQ2hlY2sKKyAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjMyLlB5TnVtYmVyX0Rpdm1vZAorICBQeU51bWJlcl9GbG9hdD1weXRob24zMi5QeU51bWJlcl9GbG9hdAorICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zMi5QeU51bWJlcl9GbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjMyLlB5TnVtYmVyX0luUGxhY2VBZGQKKyAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zMi5QeU51bWJlcl9JblBsYWNlQW5kCisgIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zMi5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zMi5QeU51bWJlcl9JblBsYWNlTHNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zMi5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKKyAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjMyLlB5TnVtYmVyX0luUGxhY2VPcgorICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzIuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCisgIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzIuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgorICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjMyLlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjMyLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAorICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zMi5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQorICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjMyLlB5TnVtYmVyX0luUGxhY2VYb3IKKyAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzIuUHlOdW1iZXJfSW5kZXgKKyAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjMyLlB5TnVtYmVyX0ludmVydAorICBQeU51bWJlcl9Mb25nPXB5dGhvbjMyLlB5TnVtYmVyX0xvbmcKKyAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjMyLlB5TnVtYmVyX0xzaGlmdAorICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zMi5QeU51bWJlcl9NdWx0aXBseQorICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zMi5QeU51bWJlcl9OZWdhdGl2ZQorICBQeU51bWJlcl9Pcj1weXRob24zMi5QeU51bWJlcl9PcgorICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zMi5QeU51bWJlcl9Qb3NpdGl2ZQorICBQeU51bWJlcl9Qb3dlcj1weXRob24zMi5QeU51bWJlcl9Qb3dlcgorICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzIuUHlOdW1iZXJfUmVtYWluZGVyCisgIFB5TnVtYmVyX1JzaGlmdD1weXRob24zMi5QeU51bWJlcl9Sc2hpZnQKKyAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzIuUHlOdW1iZXJfU3VidHJhY3QKKyAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjMyLlB5TnVtYmVyX1RvQmFzZQorICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjMyLlB5TnVtYmVyX1RydWVEaXZpZGUKKyAgUHlOdW1iZXJfWG9yPXB5dGhvbjMyLlB5TnVtYmVyX1hvcgorICBQeU9TX0FmdGVyRm9yaz1weXRob24zMi5QeU9TX0FmdGVyRm9yaworICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjMyLlB5T1NfSW5pdEludGVycnVwdHMKKyAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzIuUHlPU19JbnB1dEhvb2sgREFUQQorICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjMyLlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKKyAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zMi5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKKyAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjMyLlB5T1NfZG91YmxlX3RvX3N0cmluZworICBQeU9TX2dldHNpZz1weXRob24zMi5QeU9TX2dldHNpZworICBQeU9TX215c3RyaWNtcD1weXRob24zMi5QeU9TX215c3RyaWNtcAorICBQeU9TX215c3RybmljbXA9cHl0aG9uMzIuUHlPU19teXN0cm5pY21wCisgIFB5T1Nfc2V0c2lnPXB5dGhvbjMyLlB5T1Nfc2V0c2lnCisgIFB5T1Nfc25wcmludGY9cHl0aG9uMzIuUHlPU19zbnByaW50ZgorICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzIuUHlPU19zdHJpbmdfdG9fZG91YmxlCisgIFB5T1Nfc3RydG9sPXB5dGhvbjMyLlB5T1Nfc3RydG9sCisgIFB5T1Nfc3RydG91bD1weXRob24zMi5QeU9TX3N0cnRvdWwKKyAgUHlPU192c25wcmludGY9cHl0aG9uMzIuUHlPU192c25wcmludGYKKyAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzIuUHlPYmplY3RfQVNDSUkKKyAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjMyLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgorICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjMyLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKKyAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjMyLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjMyLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKKyAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzIuUHlPYmplY3RfQnl0ZXMKKyAgUHlPYmplY3RfQ2FsbD1weXRob24zMi5QeU9iamVjdF9DYWxsCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zMi5QeU9iamVjdF9DYWxsRnVuY3Rpb24KKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zMi5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzIuUHlPYmplY3RfQ2FsbE1ldGhvZAorICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zMi5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncworICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjMyLlB5T2JqZWN0X0NhbGxPYmplY3QKKyAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjMyLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjMyLlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKKyAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zMi5QeU9iamVjdF9EZWxJdGVtCisgIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzIuUHlPYmplY3RfRGVsSXRlbVN0cmluZworICBQeU9iamVjdF9EaXI9cHl0aG9uMzIuUHlPYmplY3RfRGlyCisgIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zMi5QeU9iamVjdF9Gb3JtYXQKKyAgUHlPYmplY3RfRnJlZT1weXRob24zMi5QeU9iamVjdF9GcmVlCisgIFB5T2JqZWN0X0dDX0RlbD1weXRob24zMi5QeU9iamVjdF9HQ19EZWwKKyAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzIuUHlPYmplY3RfR0NfVHJhY2sKKyAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zMi5QeU9iamVjdF9HQ19VblRyYWNrCisgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjMyLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCisgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjMyLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzIuUHlPYmplY3RfR2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjMyLlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zMi5QeU9iamVjdF9HZXRJdGVtCisgIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzIuUHlPYmplY3RfR2V0SXRlcgorICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjMyLlB5T2JqZWN0X0hhc0F0dHIKKyAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zMi5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzIuUHlPYmplY3RfSGFzaAorICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzIuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCisgIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzIuUHlPYmplY3RfSW5pdAorICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjMyLlB5T2JqZWN0X0luaXRWYXIKKyAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zMi5QeU9iamVjdF9Jc0luc3RhbmNlCisgIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzIuUHlPYmplY3RfSXNTdWJjbGFzcworICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzIuUHlPYmplY3RfSXNUcnVlCisgIFB5T2JqZWN0X0xlbmd0aD1weXRob24zMi5QeU9iamVjdF9MZW5ndGgKKyAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjMyLlB5T2JqZWN0X01hbGxvYworICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzIuUHlPYmplY3RfTm90CisgIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzIuUHlPYmplY3RfUmVhbGxvYworICBQeU9iamVjdF9SZXByPXB5dGhvbjMyLlB5T2JqZWN0X1JlcHIKKyAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzIuUHlPYmplY3RfUmljaENvbXBhcmUKKyAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjMyLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAorICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zMi5QeU9iamVjdF9TZWxmSXRlcgorICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjMyLlB5T2JqZWN0X1NldEF0dHIKKyAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zMi5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzIuUHlPYmplY3RfU2V0SXRlbQorICBQeU9iamVjdF9TaXplPXB5dGhvbjMyLlB5T2JqZWN0X1NpemUKKyAgUHlPYmplY3RfU3RyPXB5dGhvbjMyLlB5T2JqZWN0X1N0cgorICBQeU9iamVjdF9UeXBlPXB5dGhvbjMyLlB5T2JqZWN0X1R5cGUgREFUQQorICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zMi5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncworICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjMyLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKKyAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjMyLlB5UHJvcGVydHlfVHlwZSBEQVRBCisgIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzIuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5UmFuZ2VfVHlwZT1weXRob24zMi5QeVJhbmdlX1R5cGUgREFUQQorICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzIuUHlSZXZlcnNlZF9UeXBlIERBVEEKKyAgUHlTZXFJdGVyX05ldz1weXRob24zMi5QeVNlcUl0ZXJfTmV3CisgIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjMyLlB5U2VxSXRlcl9UeXBlIERBVEEKKyAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zMi5QeVNlcXVlbmNlX0NoZWNrCisgIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjMyLlB5U2VxdWVuY2VfQ29uY2F0CisgIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzIuUHlTZXF1ZW5jZV9Db250YWlucworICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjMyLlB5U2VxdWVuY2VfQ291bnQKKyAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjMyLlB5U2VxdWVuY2VfRGVsSXRlbQorICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjMyLlB5U2VxdWVuY2VfRGVsU2xpY2UKKyAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjMyLlB5U2VxdWVuY2VfRmFzdAorICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzIuUHlTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzIuUHlTZXF1ZW5jZV9HZXRTbGljZQorICBQeVNlcXVlbmNlX0luPXB5dGhvbjMyLlB5U2VxdWVuY2VfSW4KKyAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjMyLlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzIuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CisgIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzIuUHlTZXF1ZW5jZV9JbmRleAorICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zMi5QeVNlcXVlbmNlX0xlbmd0aAorICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzIuUHlTZXF1ZW5jZV9MaXN0CisgIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjMyLlB5U2VxdWVuY2VfUmVwZWF0CisgIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMi5QeVNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zMi5QeVNlcXVlbmNlX1NldFNsaWNlCisgIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zMi5QeVNlcXVlbmNlX1NpemUKKyAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zMi5QeVNlcXVlbmNlX1R1cGxlCisgIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjMyLlB5U2V0SXRlcl9UeXBlIERBVEEKKyAgUHlTZXRfQWRkPXB5dGhvbjMyLlB5U2V0X0FkZAorICBQeVNldF9DbGVhcj1weXRob24zMi5QeVNldF9DbGVhcgorICBQeVNldF9Db250YWlucz1weXRob24zMi5QeVNldF9Db250YWlucworICBQeVNldF9EaXNjYXJkPXB5dGhvbjMyLlB5U2V0X0Rpc2NhcmQKKyAgUHlTZXRfTmV3PXB5dGhvbjMyLlB5U2V0X05ldworICBQeVNldF9Qb3A9cHl0aG9uMzIuUHlTZXRfUG9wCisgIFB5U2V0X1NpemU9cHl0aG9uMzIuUHlTZXRfU2l6ZQorICBQeVNldF9UeXBlPXB5dGhvbjMyLlB5U2V0X1R5cGUgREFUQQorICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzIuUHlTbGljZV9HZXRJbmRpY2VzCisgIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjMyLlB5U2xpY2VfR2V0SW5kaWNlc0V4CisgIFB5U2xpY2VfTmV3PXB5dGhvbjMyLlB5U2xpY2VfTmV3CisgIFB5U2xpY2VfVHlwZT1weXRob24zMi5QeVNsaWNlX1R5cGUgREFUQQorICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzIuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKKyAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjMyLlB5U3RhdGVfRmluZE1vZHVsZQorICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzIuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjMyLlB5U3RydWN0U2VxdWVuY2VfTmV3CisgIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zMi5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMyLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorICBQeVN1cGVyX1R5cGU9cHl0aG9uMzIuUHlTdXBlcl9UeXBlIERBVEEKKyAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zMi5QeVN5c19BZGRXYXJuT3B0aW9uCisgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjMyLlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCisgIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zMi5QeVN5c19Gb3JtYXRTdGRlcnIKKyAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjMyLlB5U3lzX0Zvcm1hdFN0ZG91dAorICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzIuUHlTeXNfR2V0T2JqZWN0CisgIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjMyLlB5U3lzX0hhc1dhcm5PcHRpb25zCisgIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzIuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucworICBQeVN5c19TZXRBcmd2PXB5dGhvbjMyLlB5U3lzX1NldEFyZ3YKKyAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjMyLlB5U3lzX1NldEFyZ3ZFeAorICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzIuUHlTeXNfU2V0T2JqZWN0CisgIFB5U3lzX1NldFBhdGg9cHl0aG9uMzIuUHlTeXNfU2V0UGF0aAorICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zMi5QeVN5c19Xcml0ZVN0ZGVycgorICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zMi5QeVN5c19Xcml0ZVN0ZG91dAorICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjMyLlB5VGhyZWFkU3RhdGVfQ2xlYXIKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzIuUHlUaHJlYWRTdGF0ZV9EZWxldGUKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjMyLlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAorICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zMi5QeVRocmVhZFN0YXRlX0dldAorICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzIuUHlUaHJlYWRTdGF0ZV9HZXREaWN0CisgIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjMyLlB5VGhyZWFkU3RhdGVfTmV3CisgIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzIuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzIuUHlUaHJlYWRTdGF0ZV9Td2FwCisgIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzIuUHlUcmFjZUJhY2tfSGVyZQorICBQeVRyYWNlQmFja19QcmludD1weXRob24zMi5QeVRyYWNlQmFja19QcmludAorICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjMyLlB5VHJhY2VCYWNrX1R5cGUgREFUQQorICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjMyLlB5VHVwbGVJdGVyX1R5cGUgREFUQQorICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzIuUHlUdXBsZV9DbGVhckZyZWVMaXN0CisgIFB5VHVwbGVfR2V0SXRlbT1weXRob24zMi5QeVR1cGxlX0dldEl0ZW0KKyAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zMi5QeVR1cGxlX0dldFNsaWNlCisgIFB5VHVwbGVfTmV3PXB5dGhvbjMyLlB5VHVwbGVfTmV3CisgIFB5VHVwbGVfUGFjaz1weXRob24zMi5QeVR1cGxlX1BhY2sKKyAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjMyLlB5VHVwbGVfU2V0SXRlbQorICBQeVR1cGxlX1NpemU9cHl0aG9uMzIuUHlUdXBsZV9TaXplCisgIFB5VHVwbGVfVHlwZT1weXRob24zMi5QeVR1cGxlX1R5cGUgREFUQQorICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zMi5QeVR5cGVfQ2xlYXJDYWNoZQorICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzIuUHlUeXBlX0Zyb21TcGVjCisgIFB5VHlwZV9HZW5lcmljQWxsb2M9cHl0aG9uMzIuUHlUeXBlX0dlbmVyaWNBbGxvYworICBQeVR5cGVfR2VuZXJpY05ldz1weXRob24zMi5QeVR5cGVfR2VuZXJpY05ldworICBQeVR5cGVfR2V0RmxhZ3M9cHl0aG9uMzIuUHlUeXBlX0dldEZsYWdzCisgIFB5VHlwZV9Jc1N1YnR5cGU9cHl0aG9uMzIuUHlUeXBlX0lzU3VidHlwZQorICBQeVR5cGVfTW9kaWZpZWQ9cHl0aG9uMzIuUHlUeXBlX01vZGlmaWVkCisgIFB5VHlwZV9SZWFkeT1weXRob24zMi5QeVR5cGVfUmVhZHkKKyAgUHlUeXBlX1R5cGU9cHl0aG9uMzIuUHlUeXBlX1R5cGUgREFUQQorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGU9cHl0aG9uMzIuUHlVbmljb2RlRGVjb2RlRXJyb3JfQ3JlYXRlCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMyLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZD1weXRob24zMi5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMyLlB5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzIuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMyLlB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZD1weXRob24zMi5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMyLlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMi5QeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZz1weXRob24zMi5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZworICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQ9cHl0aG9uMzIuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdD1weXRob24zMi5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uPXB5dGhvbjMyLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydD1weXRob24zMi5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQ9cHl0aG9uMzIuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0RW5kCisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbj1weXRob24zMi5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRSZWFzb24KKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQ9cHl0aG9uMzIuUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0U3RhcnQKKyAgUHlVbmljb2RlSXRlcl9UeXBlPXB5dGhvbjMyLlB5VW5pY29kZUl0ZXJfVHlwZSBEQVRBCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZD1weXRob24zMi5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMyLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzIuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMyLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZD1weXRob24zMi5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMyLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydD1weXRob24zMi5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVfQXBwZW5kPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXBwZW5kCisgIFB5VW5pY29kZV9BcHBlbmRBbmREZWw9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9BcHBlbmRBbmREZWwKKyAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9Bc0NoYXJtYXBTdHJpbmc9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmcKKyAgUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZFVuaWNvZGUKKyAgUHlVbmljb2RlX0FzRW5jb2RlZE9iamVjdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nCisgIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmc9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Bc0xhdGluMVN0cmluZworICBQeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNVVEYxNlN0cmluZworICBQeVVuaWNvZGVfQXNVVEYzMlN0cmluZz1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0FzVVRGMzJTdHJpbmcKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZz1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0FzVVRGOFN0cmluZworICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1dpZGVDaGFyPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQXNXaWRlQ2hhcgorICBQeVVuaWNvZGVfQ2xlYXJGcmVlbGlzdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0NsZWFyRnJlZWxpc3QKKyAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Db21wYXJlCisgIFB5VW5pY29kZV9Db25jYXQ9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Db25jYXQKKyAgUHlVbmljb2RlX0NvbnRhaW5zPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQ29udGFpbnMKKyAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfQ291bnQKKyAgUHlVbmljb2RlX0RlY29kZT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZQorICBQeVVuaWNvZGVfRGVjb2RlQVNDSUk9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSQorICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKKyAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZUxhdGluMQorICBQeVVuaWNvZGVfRGVjb2RlUmF3VW5pY29kZUVzY2FwZT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2PXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTYKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMj1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjMyCisgIFB5VW5pY29kZV9EZWNvZGVVVEYzMlN0YXRlZnVsPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGMzJTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgKKyAgUHlVbmljb2RlX0RlY29kZVVURjhTdGF0ZWZ1bD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZVVURjhTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVW5pY29kZUVzY2FwZT1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0RlY29kZVVuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRlNDb252ZXJ0ZXIKKyAgUHlVbmljb2RlX0ZTRGVjb2Rlcj1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0ZTRGVjb2RlcgorICBQeVVuaWNvZGVfRmluZD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0ZpbmQKKyAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0Zvcm1hdAorICBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3Q9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Gcm9tRW5jb2RlZE9iamVjdAorICBQeVVuaWNvZGVfRnJvbUZvcm1hdD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRnJvbUZvcm1hdFYKKyAgUHlVbmljb2RlX0Zyb21PYmplY3Q9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Gcm9tT2JqZWN0CisgIFB5VW5pY29kZV9Gcm9tT3JkaW5hbD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX0Zyb21PcmRpbmFsCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRnJvbVN0cmluZworICBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nQW5kU2l6ZQorICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfRnJvbVdpZGVDaGFyCisgIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX0dldFNpemU9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9HZXRTaXplCisgIFB5VW5pY29kZV9Jc0lkZW50aWZpZXI9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Jc0lkZW50aWZpZXIKKyAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9Kb2luCisgIFB5VW5pY29kZV9QYXJ0aXRpb249cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9QYXJ0aXRpb24KKyAgUHlVbmljb2RlX1JQYXJ0aXRpb249cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uCisgIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9SU3BsaXQKKyAgUHlVbmljb2RlX1JlcGxhY2U9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9SZXBsYWNlCisgIFB5VW5pY29kZV9SZXNpemU9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9SZXNpemUKKyAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfUmljaENvbXBhcmUKKyAgUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZz1weXRob24zMi5QeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfU3BsaXQ9cHl0aG9uMzIuUHlVbmljb2RlVUNTMl9TcGxpdAorICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zMi5QeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMKKyAgUHlVbmljb2RlX1RhaWxtYXRjaD1weXRob24zMi5QeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaAorICBQeVVuaWNvZGVfVHJhbnNsYXRlPXB5dGhvbjMyLlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlCisgIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjMyLlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCisgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjMyLlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjMyLlB5VW5pY29kZV9EZWNvZGVVVEY3CisgIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzIuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjMyLlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzIuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKKyAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjMyLlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zMi5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQorICBQeVVuaWNvZGVfVHlwZT1weXRob24zMi5QeVVuaWNvZGVfVHlwZSBEQVRBCisgIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzIuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCisgIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zMi5QeVdlYWtyZWZfTmV3UHJveHkKKyAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zMi5QeVdlYWtyZWZfTmV3UmVmCisgIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzIuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCisgIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzIuUHlXcmFwcGVyX05ldworICBQeVppcF9UeXBlPXB5dGhvbjMyLlB5WmlwX1R5cGUgREFUQQorICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zMi5QeV9BZGRQZW5kaW5nQ2FsbAorICBQeV9BdEV4aXQ9cHl0aG9uMzIuUHlfQXRFeGl0CisgIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzIuUHlfQnVpbGRWYWx1ZQorICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjMyLlB5X0NvbXBpbGVTdHJpbmcKKyAgUHlfRGVjUmVmPXB5dGhvbjMyLlB5X0RlY1JlZgorICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zMi5QeV9FbmRJbnRlcnByZXRlcgorICBQeV9FeGl0PXB5dGhvbjMyLlB5X0V4aXQKKyAgUHlfRmF0YWxFcnJvcj1weXRob24zMi5QeV9GYXRhbEVycm9yCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzIuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0ZpbmFsaXplPXB5dGhvbjMyLlB5X0ZpbmFsaXplCisgIFB5X0dldEJ1aWxkSW5mbz1weXRob24zMi5QeV9HZXRCdWlsZEluZm8KKyAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzIuUHlfR2V0Q29tcGlsZXIKKyAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjMyLlB5X0dldENvcHlyaWdodAorICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjMyLlB5X0dldEV4ZWNQcmVmaXgKKyAgUHlfR2V0UGF0aD1weXRob24zMi5QeV9HZXRQYXRoCisgIFB5X0dldFBsYXRmb3JtPXB5dGhvbjMyLlB5X0dldFBsYXRmb3JtCisgIFB5X0dldFByZWZpeD1weXRob24zMi5QeV9HZXRQcmVmaXgKKyAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjMyLlB5X0dldFByb2dyYW1GdWxsUGF0aAorICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zMi5QeV9HZXRQcm9ncmFtTmFtZQorICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjMyLlB5X0dldFB5dGhvbkhvbWUKKyAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzIuUHlfR2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfR2V0VmVyc2lvbj1weXRob24zMi5QeV9HZXRWZXJzaW9uCisgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzIuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0luY1JlZj1weXRob24zMi5QeV9JbmNSZWYKKyAgUHlfSW5pdGlhbGl6ZT1weXRob24zMi5QeV9Jbml0aWFsaXplCisgIFB5X0luaXRpYWxpemVFeD1weXRob24zMi5QeV9Jbml0aWFsaXplRXgKKyAgUHlfSXNJbml0aWFsaXplZD1weXRob24zMi5QeV9Jc0luaXRpYWxpemVkCisgIFB5X01haW49cHl0aG9uMzIuUHlfTWFpbgorICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjMyLlB5X01ha2VQZW5kaW5nQ2FsbHMKKyAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzIuUHlfTmV3SW50ZXJwcmV0ZXIKKyAgUHlfUmVwckVudGVyPXB5dGhvbjMyLlB5X1JlcHJFbnRlcgorICBQeV9SZXByTGVhdmU9cHl0aG9uMzIuUHlfUmVwckxlYXZlCisgIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjMyLlB5X1NldFByb2dyYW1OYW1lCisgIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzIuUHlfU2V0UHl0aG9uSG9tZQorICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zMi5QeV9TZXRSZWN1cnNpb25MaW1pdAorICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zMi5QeV9TeW10YWJsZVN0cmluZworICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzIuUHlfVmFCdWlsZFZhbHVlCisgIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzIuX1B5RXJyX0JhZEludGVybmFsQ2FsbAorICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjMyLl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKKyAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzIuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKKyAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zMi5fUHlPYmplY3RfR0NfTWFsbG9jCisgIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzIuX1B5T2JqZWN0X0dDX05ldworICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjMyLl9QeU9iamVjdF9HQ19OZXdWYXIKKyAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zMi5fUHlPYmplY3RfR0NfUmVzaXplCisgIF9QeU9iamVjdF9OZXc9cHl0aG9uMzIuX1B5T2JqZWN0X05ldworICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjMyLl9QeU9iamVjdF9OZXdWYXIKKyAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMyLl9QeVN0YXRlX0FkZE1vZHVsZQorICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjMyLl9QeVRocmVhZFN0YXRlX0luaXQKKyAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzIuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKKyAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjMyLl9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCisgIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjMyLl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKKyAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzIuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKKyAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zMi5fUHlUcmFzaF9kZXN0cm95X2NoYWluCisgIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzIuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjMyLl9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjMyLl9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMyLl9QeV9CdWlsZFZhbHVlX1NpemVUCisgIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjMyLl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKKyAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zMi5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCisgIF9QeV9EZWFsbG9jPXB5dGhvbjMyLl9QeV9EZWFsbG9jCisgIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zMi5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQorICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzIuX1B5X0ZhbHNlU3RydWN0IERBVEEKKyAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzIuX1B5X05vbmVTdHJ1Y3QgREFUQQorICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzIuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKKyAgX1B5X1N3YXBwZWRPcD1weXRob24zMi5fUHlfU3dhcHBlZE9wIERBVEEKKyAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzIuX1B5X1RydWVTdHJ1Y3QgREFUQQorICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMyLl9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMubWFrIGIvUEMvcHl0aG9uMy5tYWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU2MTY3ZgotLS0gL2Rldi9udWxsCisrKyBiL1BDL3B5dGhvbjMubWFrCkBAIC0wLDAgKzEsMTAgQEAKKyQoT3V0RGlyKXB5dGhvbjMyLmRsbDoJcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzJzdHViLmxpYgorCWNsIC9MRCAvRmUkKE91dERpcilweXRob24zLmRsbCBweXRob24zZGxsLmMgcHl0aG9uMy5kZWYgJChPdXREaXIpcHl0aG9uMzJzdHViLmxpYgorCiskKE91dERpcilweXRob24zMnN0dWIubGliOglweXRob24zMnN0dWIuZGVmCisJbGliIC9kZWY6cHl0aG9uMzJzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjMyc3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQorCitjbGVhbjoKKwlkZWwgJChPdXREaXIpcHl0aG9uMy5kbGwgJChPdXREaXIpcHl0aG9uMy5saWIgJChPdXREaXIpcHl0aG9uMzJzdHViLmxpYiAkKE91dERpcilweXRob24zLmV4cCAkKE91dERpcilweXRob24zMnN0dWIuZXhwCisKK3JlYnVpbGQ6IGNsZWFuICQoT3V0RGlyKXB5dGhvbjMyLmRsbApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMzJnZW4ucHkgYi9QQy9weXRob24zMmdlbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTgyZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvUEMvcHl0aG9uMzJnZW4ucHkKQEAgLTAsMCArMSwyNSBAQAorIyBHZW5lcmF0ZSBweXRob24zMnN0dWIuZGVmIG91dCBvZiBweXRob24zLmRlZgorIyBUaGUgcmVndWxhciBpbXBvcnQgbGlicmFyeSBjYW5ub3QgYmUgdXNlZCwKKyMgc2luY2UgaXQgZG9lc24ndCBwcm92aWRlIHRoZSByaWdodCBzeW1ib2xzIGZvcgorIyBkYXRhIGZvcndhcmRpbmcKK291dCA9IG9wZW4oInB5dGhvbjMyc3R1Yi5kZWYiLCAidyIpCitvdXQud3JpdGUoJ0xJQlJBUlkgInB5dGhvbjMyIlxuJykKK291dC53cml0ZSgnRVhQT1JUU1xuJykKKworaW5wID0gb3BlbigicHl0aG9uMy5kZWYiKQoraW5wLnJlYWRsaW5lKCkKK2xpbmUgPSBpbnAucmVhZGxpbmUoKQorYXNzZXJ0IGxpbmUuc3RyaXAoKT09J0VYUE9SVFMnCisKK2ZvciBsaW5lIGluIGlucDoKKyAgICAjIFNZTTE9cHl0aG9uMzIuU1lNMlsgREFUQV0KKyAgICBoZWFkLCB0YWlsID0gbGluZS5zcGxpdCgnLicpCisgICAgaWYgJ0RBVEEnIGluIHRhaWw6CisgICAgICAgIHN5bWJvbCwgdGFpbCA9IHRhaWwuc3BsaXQoJyAnKQorICAgIGVsc2U6CisgICAgICAgIHN5bWJvbCA9IHRhaWwuc3RyaXAoKQorICAgIG91dC53cml0ZShzeW1ib2wrJ1xuJykKKworaW5wLmNsb3NlKCkKK291dC5jbG9zZSgpCisKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMyc3R1Yi5kZWYgYi9QQy9weXRob24zMnN0dWIuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NDNlZjAKLS0tIC9kZXYvbnVsbAorKysgYi9QQy9weXRob24zMnN0dWIuZGVmCkBAIC0wLDAgKzEsNjg5IEBACitMSUJSQVJZICJweXRob24zMiIKK0VYUE9SVFMKK1B5QXJnX1BhcnNlCitQeUFyZ19QYXJzZVR1cGxlCitQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMKK1B5QXJnX1VucGFja1R1cGxlCitQeUFyZ19WYVBhcnNlCitQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcworUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCitQeUJhc2VPYmplY3RfVHlwZQorUHlCb29sX0Zyb21Mb25nCitQeUJvb2xfVHlwZQorUHlCeXRlQXJyYXlJdGVyX1R5cGUKK1B5Qnl0ZUFycmF5X0FzU3RyaW5nCitQeUJ5dGVBcnJheV9Db25jYXQKK1B5Qnl0ZUFycmF5X0Zyb21PYmplY3QKK1B5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCitQeUJ5dGVBcnJheV9SZXNpemUKK1B5Qnl0ZUFycmF5X1NpemUKK1B5Qnl0ZUFycmF5X1R5cGUKK1B5Qnl0ZXNJdGVyX1R5cGUKK1B5Qnl0ZXNfQXNTdHJpbmcKK1B5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCitQeUJ5dGVzX0NvbmNhdAorUHlCeXRlc19Db25jYXRBbmREZWwKK1B5Qnl0ZXNfRGVjb2RlRXNjYXBlCitQeUJ5dGVzX0Zyb21Gb3JtYXQKK1B5Qnl0ZXNfRnJvbUZvcm1hdFYKK1B5Qnl0ZXNfRnJvbU9iamVjdAorUHlCeXRlc19Gcm9tU3RyaW5nCitQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCitQeUJ5dGVzX1JlcHIKK1B5Qnl0ZXNfU2l6ZQorUHlCeXRlc19UeXBlCitQeUNGdW5jdGlvbl9DYWxsCitQeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0CitQeUNGdW5jdGlvbl9HZXRGbGFncworUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KK1B5Q0Z1bmN0aW9uX0dldFNlbGYKK1B5Q0Z1bmN0aW9uX05ld0V4CitQeUNGdW5jdGlvbl9UeXBlCitQeUNhbGxJdGVyX05ldworUHlDYWxsSXRlcl9UeXBlCitQeUNhbGxhYmxlX0NoZWNrCitQeUNhcHN1bGVfR2V0Q29udGV4dAorUHlDYXBzdWxlX0dldERlc3RydWN0b3IKK1B5Q2Fwc3VsZV9HZXROYW1lCitQeUNhcHN1bGVfR2V0UG9pbnRlcgorUHlDYXBzdWxlX0ltcG9ydAorUHlDYXBzdWxlX0lzVmFsaWQKK1B5Q2Fwc3VsZV9OZXcKK1B5Q2Fwc3VsZV9TZXRDb250ZXh0CitQeUNhcHN1bGVfU2V0RGVzdHJ1Y3RvcgorUHlDYXBzdWxlX1NldE5hbWUKK1B5Q2Fwc3VsZV9TZXRQb2ludGVyCitQeUNhcHN1bGVfVHlwZQorUHlDbGFzc01ldGhvZERlc2NyX1R5cGUKK1B5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycworUHlDb2RlY19EZWNvZGUKK1B5Q29kZWNfRGVjb2RlcgorUHlDb2RlY19FbmNvZGUKK1B5Q29kZWNfRW5jb2RlcgorUHlDb2RlY19JZ25vcmVFcnJvcnMKK1B5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCitQeUNvZGVjX0luY3JlbWVudGFsRW5jb2RlcgorUHlDb2RlY19Lbm93bkVuY29kaW5nCitQeUNvZGVjX0xvb2t1cEVycm9yCitQeUNvZGVjX1JlZ2lzdGVyCitQeUNvZGVjX1JlZ2lzdGVyRXJyb3IKK1B5Q29kZWNfUmVwbGFjZUVycm9ycworUHlDb2RlY19TdHJlYW1SZWFkZXIKK1B5Q29kZWNfU3RyZWFtV3JpdGVyCitQeUNvZGVjX1N0cmljdEVycm9ycworUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycworUHlDb21wbGV4X0Zyb21Eb3VibGVzCitQeUNvbXBsZXhfSW1hZ0FzRG91YmxlCitQeUNvbXBsZXhfUmVhbEFzRG91YmxlCitQeUNvbXBsZXhfVHlwZQorUHlEZXNjcl9OZXdDbGFzc01ldGhvZAorUHlEZXNjcl9OZXdHZXRTZXQKK1B5RGVzY3JfTmV3TWVtYmVyCitQeURlc2NyX05ld01ldGhvZAorUHlEaWN0SXRlbXNfVHlwZQorUHlEaWN0SXRlckl0ZW1fVHlwZQorUHlEaWN0SXRlcktleV9UeXBlCitQeURpY3RJdGVyVmFsdWVfVHlwZQorUHlEaWN0S2V5c19UeXBlCitQeURpY3RQcm94eV9OZXcKK1B5RGljdFByb3h5X1R5cGUKK1B5RGljdFZhbHVlc19UeXBlCitQeURpY3RfQ2xlYXIKK1B5RGljdF9Db250YWlucworUHlEaWN0X0NvcHkKK1B5RGljdF9EZWxJdGVtCitQeURpY3RfRGVsSXRlbVN0cmluZworUHlEaWN0X0dldEl0ZW0KK1B5RGljdF9HZXRJdGVtU3RyaW5nCitQeURpY3RfR2V0SXRlbVdpdGhFcnJvcgorUHlEaWN0X0l0ZW1zCitQeURpY3RfS2V5cworUHlEaWN0X01lcmdlCitQeURpY3RfTWVyZ2VGcm9tU2VxMgorUHlEaWN0X05ldworUHlEaWN0X05leHQKK1B5RGljdF9TZXRJdGVtCitQeURpY3RfU2V0SXRlbVN0cmluZworUHlEaWN0X1NpemUKK1B5RGljdF9UeXBlCitQeURpY3RfVXBkYXRlCitQeURpY3RfVmFsdWVzCitQeUVsbGlwc2lzX1R5cGUKK1B5RW51bV9UeXBlCitQeUVycl9CYWRBcmd1bWVudAorUHlFcnJfQmFkSW50ZXJuYWxDYWxsCitQeUVycl9DaGVja1NpZ25hbHMKK1B5RXJyX0NsZWFyCitQeUVycl9EaXNwbGF5CitQeUVycl9FeGNlcHRpb25NYXRjaGVzCitQeUVycl9GZXRjaAorUHlFcnJfRm9ybWF0CitQeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKK1B5RXJyX05ld0V4Y2VwdGlvbgorUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYworUHlFcnJfTm9NZW1vcnkKK1B5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorUHlFcnJfT2NjdXJyZWQKK1B5RXJyX1ByaW50CitQeUVycl9QcmludEV4CitQeUVycl9Qcm9ncmFtVGV4dAorUHlFcnJfUmVzdG9yZQorUHlFcnJfU2V0RnJvbUVycm5vCitQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUKK1B5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdAorUHlFcnJfU2V0SW50ZXJydXB0CitQeUVycl9TZXROb25lCitQeUVycl9TZXRPYmplY3QKK1B5RXJyX1NldFN0cmluZworUHlFcnJfU3ludGF4TG9jYXRpb24KK1B5RXJyX1dhcm5FeAorUHlFcnJfV2FybkV4cGxpY2l0CitQeUVycl9XYXJuRm9ybWF0CitQeUVycl9Xcml0ZVVucmFpc2FibGUKK1B5RXZhbF9BY3F1aXJlTG9jaworUHlFdmFsX0FjcXVpcmVUaHJlYWQKK1B5RXZhbF9DYWxsRnVuY3Rpb24KK1B5RXZhbF9DYWxsTWV0aG9kCitQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcworUHlFdmFsX0V2YWxDb2RlCitQeUV2YWxfRXZhbENvZGVFeAorUHlFdmFsX0V2YWxGcmFtZQorUHlFdmFsX0V2YWxGcmFtZUV4CitQeUV2YWxfR2V0QnVpbHRpbnMKK1B5RXZhbF9HZXRDYWxsU3RhdHMKK1B5RXZhbF9HZXRGcmFtZQorUHlFdmFsX0dldEZ1bmNEZXNjCitQeUV2YWxfR2V0RnVuY05hbWUKK1B5RXZhbF9HZXRHbG9iYWxzCitQeUV2YWxfR2V0TG9jYWxzCitQeUV2YWxfSW5pdFRocmVhZHMKK1B5RXZhbF9SZUluaXRUaHJlYWRzCitQeUV2YWxfUmVsZWFzZUxvY2sKK1B5RXZhbF9SZWxlYXNlVGhyZWFkCitQeUV2YWxfUmVzdG9yZVRocmVhZAorUHlFdmFsX1NhdmVUaHJlYWQKK1B5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQKK1B5RXhjX0FyaXRobWV0aWNFcnJvcgorUHlFeGNfQXNzZXJ0aW9uRXJyb3IKK1B5RXhjX0F0dHJpYnV0ZUVycm9yCitQeUV4Y19CYXNlRXhjZXB0aW9uCitQeUV4Y19CdWZmZXJFcnJvcgorUHlFeGNfQnl0ZXNXYXJuaW5nCitQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcKK1B5RXhjX0VPRkVycm9yCitQeUV4Y19FbnZpcm9ubWVudEVycm9yCitQeUV4Y19FeGNlcHRpb24KK1B5RXhjX0Zsb2F0aW5nUG9pbnRFcnJvcgorUHlFeGNfRnV0dXJlV2FybmluZworUHlFeGNfR2VuZXJhdG9yRXhpdAorUHlFeGNfSU9FcnJvcgorUHlFeGNfSW1wb3J0RXJyb3IKK1B5RXhjX0ltcG9ydFdhcm5pbmcKK1B5RXhjX0luZGVudGF0aW9uRXJyb3IKK1B5RXhjX0luZGV4RXJyb3IKK1B5RXhjX0tleUVycm9yCitQeUV4Y19LZXlib2FyZEludGVycnVwdAorUHlFeGNfTG9va3VwRXJyb3IKK1B5RXhjX01lbW9yeUVycm9yCitQeUV4Y19NZW1vcnlFcnJvckluc3QKK1B5RXhjX05hbWVFcnJvcgorUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcgorUHlFeGNfT1NFcnJvcgorUHlFeGNfT3ZlcmZsb3dFcnJvcgorUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZworUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0CitQeUV4Y19SZWZlcmVuY2VFcnJvcgorUHlFeGNfUnVudGltZUVycm9yCitQeUV4Y19SdW50aW1lV2FybmluZworUHlFeGNfU3RvcEl0ZXJhdGlvbgorUHlFeGNfU3ludGF4RXJyb3IKK1B5RXhjX1N5bnRheFdhcm5pbmcKK1B5RXhjX1N5c3RlbUVycm9yCitQeUV4Y19TeXN0ZW1FeGl0CitQeUV4Y19UYWJFcnJvcgorUHlFeGNfVHlwZUVycm9yCitQeUV4Y19VbmJvdW5kTG9jYWxFcnJvcgorUHlFeGNfVW5pY29kZURlY29kZUVycm9yCitQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IKK1B5RXhjX1VuaWNvZGVFcnJvcgorUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yCitQeUV4Y19Vbmljb2RlV2FybmluZworUHlFeGNfVXNlcldhcm5pbmcKK1B5RXhjX1ZhbHVlRXJyb3IKK1B5RXhjX1dhcm5pbmcKK1B5RXhjX1plcm9EaXZpc2lvbkVycm9yCitQeUV4Y2VwdGlvbl9HZXRDYXVzZQorUHlFeGNlcHRpb25fR2V0Q29udGV4dAorUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCitQeUV4Y2VwdGlvbl9TZXRDYXVzZQorUHlFeGNlcHRpb25fU2V0Q29udGV4dAorUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCitQeUZpbGVfRnJvbUZkCitQeUZpbGVfR2V0TGluZQorUHlGaWxlX1dyaXRlT2JqZWN0CitQeUZpbGVfV3JpdGVTdHJpbmcKK1B5RmlsdGVyX1R5cGUKK1B5RmxvYXRfQXNEb3VibGUKK1B5RmxvYXRfRnJvbURvdWJsZQorUHlGbG9hdF9Gcm9tU3RyaW5nCitQeUZsb2F0X0dldEluZm8KK1B5RmxvYXRfR2V0TWF4CitQeUZsb2F0X0dldE1pbgorUHlGbG9hdF9UeXBlCitQeUZyb3plblNldF9OZXcKK1B5RnJvemVuU2V0X1R5cGUKK1B5R0NfQ29sbGVjdAorUHlHSUxTdGF0ZV9FbnN1cmUKK1B5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlCitQeUdJTFN0YXRlX1JlbGVhc2UKK1B5R2V0U2V0RGVzY3JfVHlwZQorUHlJbXBvcnRfQWRkTW9kdWxlCitQeUltcG9ydF9BcHBlbmRJbml0dGFiCitQeUltcG9ydF9DbGVhbnVwCitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCitQeUltcG9ydF9HZXRJbXBvcnRlcgorUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIKK1B5SW1wb3J0X0dldE1hZ2ljVGFnCitQeUltcG9ydF9HZXRNb2R1bGVEaWN0CitQeUltcG9ydF9JbXBvcnQKK1B5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZQorUHlJbXBvcnRfSW1wb3J0TW9kdWxlCitQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorUHlJbXBvcnRfSW1wb3J0TW9kdWxlTm9CbG9jaworUHlJbXBvcnRfUmVsb2FkTW9kdWxlCitQeUludGVycHJldGVyU3RhdGVfQ2xlYXIKK1B5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKK1B5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKK1B5SXRlcl9OZXh0CitQeUxpc3RJdGVyX1R5cGUKK1B5TGlzdFJldkl0ZXJfVHlwZQorUHlMaXN0X0FwcGVuZAorUHlMaXN0X0FzVHVwbGUKK1B5TGlzdF9HZXRJdGVtCitQeUxpc3RfR2V0U2xpY2UKK1B5TGlzdF9JbnNlcnQKK1B5TGlzdF9OZXcKK1B5TGlzdF9SZXZlcnNlCitQeUxpc3RfU2V0SXRlbQorUHlMaXN0X1NldFNsaWNlCitQeUxpc3RfU2l6ZQorUHlMaXN0X1NvcnQKK1B5TGlzdF9UeXBlCitQeUxvbmdSYW5nZUl0ZXJfVHlwZQorUHlMb25nX0FzRG91YmxlCitQeUxvbmdfQXNMb25nCitQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKK1B5TG9uZ19Bc0xvbmdMb25nCitQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CitQeUxvbmdfQXNTaXplX3QKK1B5TG9uZ19Bc1NzaXplX3QKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZworUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZworUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2sKK1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2sKK1B5TG9uZ19Bc1ZvaWRQdHIKK1B5TG9uZ19Gcm9tRG91YmxlCitQeUxvbmdfRnJvbUxvbmcKK1B5TG9uZ19Gcm9tTG9uZ0xvbmcKK1B5TG9uZ19Gcm9tU2l6ZV90CitQeUxvbmdfRnJvbVNzaXplX3QKK1B5TG9uZ19Gcm9tU3RyaW5nCitQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCitQeUxvbmdfRnJvbVZvaWRQdHIKK1B5TG9uZ19HZXRJbmZvCitQeUxvbmdfVHlwZQorUHlNYXBfVHlwZQorUHlNYXBwaW5nX0NoZWNrCitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZworUHlNYXBwaW5nX0hhc0tleQorUHlNYXBwaW5nX0hhc0tleVN0cmluZworUHlNYXBwaW5nX0l0ZW1zCitQeU1hcHBpbmdfS2V5cworUHlNYXBwaW5nX0xlbmd0aAorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKK1B5TWFwcGluZ19TaXplCitQeU1hcHBpbmdfVmFsdWVzCitQeU1lbV9GcmVlCitQeU1lbV9NYWxsb2MKK1B5TWVtX1JlYWxsb2MKK1B5TWVtYmVyRGVzY3JfVHlwZQorUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKK1B5TWVtb3J5Vmlld19HZXRDb250aWd1b3VzCitQeU1lbW9yeVZpZXdfVHlwZQorUHlNZXRob2REZXNjcl9UeXBlCitQeU1vZHVsZV9BZGRJbnRDb25zdGFudAorUHlNb2R1bGVfQWRkT2JqZWN0CitQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorUHlNb2R1bGVfQ3JlYXRlMgorUHlNb2R1bGVfR2V0RGVmCitQeU1vZHVsZV9HZXREaWN0CitQeU1vZHVsZV9HZXRGaWxlbmFtZQorUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKK1B5TW9kdWxlX0dldE5hbWUKK1B5TW9kdWxlX0dldFN0YXRlCitQeU1vZHVsZV9OZXcKK1B5TW9kdWxlX1R5cGUKK1B5TnVsbEltcG9ydGVyX1R5cGUKK1B5TnVtYmVyX0Fic29sdXRlCitQeU51bWJlcl9BZGQKK1B5TnVtYmVyX0FuZAorUHlOdW1iZXJfQXNTc2l6ZV90CitQeU51bWJlcl9DaGVjaworUHlOdW1iZXJfRGl2bW9kCitQeU51bWJlcl9GbG9hdAorUHlOdW1iZXJfRmxvb3JEaXZpZGUKK1B5TnVtYmVyX0luUGxhY2VBZGQKK1B5TnVtYmVyX0luUGxhY2VBbmQKK1B5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZQorUHlOdW1iZXJfSW5QbGFjZUxzaGlmdAorUHlOdW1iZXJfSW5QbGFjZU11bHRpcGx5CitQeU51bWJlcl9JblBsYWNlT3IKK1B5TnVtYmVyX0luUGxhY2VQb3dlcgorUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgorUHlOdW1iZXJfSW5QbGFjZVJzaGlmdAorUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0CitQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQorUHlOdW1iZXJfSW5QbGFjZVhvcgorUHlOdW1iZXJfSW5kZXgKK1B5TnVtYmVyX0ludmVydAorUHlOdW1iZXJfTG9uZworUHlOdW1iZXJfTHNoaWZ0CitQeU51bWJlcl9NdWx0aXBseQorUHlOdW1iZXJfTmVnYXRpdmUKK1B5TnVtYmVyX09yCitQeU51bWJlcl9Qb3NpdGl2ZQorUHlOdW1iZXJfUG93ZXIKK1B5TnVtYmVyX1JlbWFpbmRlcgorUHlOdW1iZXJfUnNoaWZ0CitQeU51bWJlcl9TdWJ0cmFjdAorUHlOdW1iZXJfVG9CYXNlCitQeU51bWJlcl9UcnVlRGl2aWRlCitQeU51bWJlcl9Yb3IKK1B5T1NfQWZ0ZXJGb3JrCitQeU9TX0luaXRJbnRlcnJ1cHRzCitQeU9TX0lucHV0SG9vaworUHlPU19JbnRlcnJ1cHRPY2N1cnJlZAorUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcgorUHlPU19kb3VibGVfdG9fc3RyaW5nCitQeU9TX2dldHNpZworUHlPU19teXN0cmljbXAKK1B5T1NfbXlzdHJuaWNtcAorUHlPU19zZXRzaWcKK1B5T1Nfc25wcmludGYKK1B5T1Nfc3RyaW5nX3RvX2RvdWJsZQorUHlPU19zdHJ0b2wKK1B5T1Nfc3RydG91bAorUHlPU192c25wcmludGYKK1B5T2JqZWN0X0FTQ0lJCitQeU9iamVjdF9Bc0NoYXJCdWZmZXIKK1B5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKK1B5T2JqZWN0X0FzUmVhZEJ1ZmZlcgorUHlPYmplY3RfQXNXcml0ZUJ1ZmZlcgorUHlPYmplY3RfQnl0ZXMKK1B5T2JqZWN0X0NhbGwKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbgorUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncworUHlPYmplY3RfQ2FsbE1ldGhvZAorUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MKK1B5T2JqZWN0X0NhbGxPYmplY3QKK1B5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgorUHlPYmplY3RfQ2xlYXJXZWFrUmVmcworUHlPYmplY3RfRGVsSXRlbQorUHlPYmplY3RfRGVsSXRlbVN0cmluZworUHlPYmplY3RfRGlyCitQeU9iamVjdF9Gb3JtYXQKK1B5T2JqZWN0X0ZyZWUKK1B5T2JqZWN0X0dDX0RlbAorUHlPYmplY3RfR0NfVHJhY2sKK1B5T2JqZWN0X0dDX1VuVHJhY2sKK1B5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCitQeU9iamVjdF9HZW5lcmljU2V0QXR0cgorUHlPYmplY3RfR2V0QXR0cgorUHlPYmplY3RfR2V0QXR0clN0cmluZworUHlPYmplY3RfR2V0SXRlbQorUHlPYmplY3RfR2V0SXRlcgorUHlPYmplY3RfSGFzQXR0cgorUHlPYmplY3RfSGFzQXR0clN0cmluZworUHlPYmplY3RfSGFzaAorUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCitQeU9iamVjdF9Jbml0CitQeU9iamVjdF9Jbml0VmFyCitQeU9iamVjdF9Jc0luc3RhbmNlCitQeU9iamVjdF9Jc1N1YmNsYXNzCitQeU9iamVjdF9Jc1RydWUKK1B5T2JqZWN0X0xlbmd0aAorUHlPYmplY3RfTWFsbG9jCitQeU9iamVjdF9Ob3QKK1B5T2JqZWN0X1JlYWxsb2MKK1B5T2JqZWN0X1JlcHIKK1B5T2JqZWN0X1JpY2hDb21wYXJlCitQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wKK1B5T2JqZWN0X1NlbGZJdGVyCitQeU9iamVjdF9TZXRBdHRyCitQeU9iamVjdF9TZXRBdHRyU3RyaW5nCitQeU9iamVjdF9TZXRJdGVtCitQeU9iamVjdF9TaXplCitQeU9iamVjdF9TdHIKK1B5T2JqZWN0X1R5cGUKK1B5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzCitQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzCitQeVByb3BlcnR5X1R5cGUKK1B5UmFuZ2VJdGVyX1R5cGUKK1B5UmFuZ2VfVHlwZQorUHlSZXZlcnNlZF9UeXBlCitQeVNlcUl0ZXJfTmV3CitQeVNlcUl0ZXJfVHlwZQorUHlTZXF1ZW5jZV9DaGVjaworUHlTZXF1ZW5jZV9Db25jYXQKK1B5U2VxdWVuY2VfQ29udGFpbnMKK1B5U2VxdWVuY2VfQ291bnQKK1B5U2VxdWVuY2VfRGVsSXRlbQorUHlTZXF1ZW5jZV9EZWxTbGljZQorUHlTZXF1ZW5jZV9GYXN0CitQeVNlcXVlbmNlX0dldEl0ZW0KK1B5U2VxdWVuY2VfR2V0U2xpY2UKK1B5U2VxdWVuY2VfSW4KK1B5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CitQeVNlcXVlbmNlX0luZGV4CitQeVNlcXVlbmNlX0xlbmd0aAorUHlTZXF1ZW5jZV9MaXN0CitQeVNlcXVlbmNlX1JlcGVhdAorUHlTZXF1ZW5jZV9TZXRJdGVtCitQeVNlcXVlbmNlX1NldFNsaWNlCitQeVNlcXVlbmNlX1NpemUKK1B5U2VxdWVuY2VfVHVwbGUKK1B5U2V0SXRlcl9UeXBlCitQeVNldF9BZGQKK1B5U2V0X0NsZWFyCitQeVNldF9Db250YWlucworUHlTZXRfRGlzY2FyZAorUHlTZXRfTmV3CitQeVNldF9Qb3AKK1B5U2V0X1NpemUKK1B5U2V0X1R5cGUKK1B5U2xpY2VfR2V0SW5kaWNlcworUHlTbGljZV9HZXRJbmRpY2VzRXgKK1B5U2xpY2VfTmV3CitQeVNsaWNlX1R5cGUKK1B5U29ydFdyYXBwZXJfVHlwZQorUHlTdGF0ZV9GaW5kTW9kdWxlCitQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW0KK1B5U3RydWN0U2VxdWVuY2VfTmV3CitQeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKK1B5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorUHlTdXBlcl9UeXBlCitQeVN5c19BZGRXYXJuT3B0aW9uCitQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZQorUHlTeXNfRm9ybWF0U3RkZXJyCitQeVN5c19Gb3JtYXRTdGRvdXQKK1B5U3lzX0dldE9iamVjdAorUHlTeXNfSGFzV2Fybk9wdGlvbnMKK1B5U3lzX1Jlc2V0V2Fybk9wdGlvbnMKK1B5U3lzX1NldEFyZ3YKK1B5U3lzX1NldEFyZ3ZFeAorUHlTeXNfU2V0T2JqZWN0CitQeVN5c19TZXRQYXRoCitQeVN5c19Xcml0ZVN0ZGVycgorUHlTeXNfV3JpdGVTdGRvdXQKK1B5VGhyZWFkU3RhdGVfQ2xlYXIKK1B5VGhyZWFkU3RhdGVfRGVsZXRlCitQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQKK1B5VGhyZWFkU3RhdGVfR2V0CitQeVRocmVhZFN0YXRlX0dldERpY3QKK1B5VGhyZWFkU3RhdGVfTmV3CitQeVRocmVhZFN0YXRlX1NldEFzeW5jRXhjCitQeVRocmVhZFN0YXRlX1N3YXAKK1B5VHJhY2VCYWNrX0hlcmUKK1B5VHJhY2VCYWNrX1ByaW50CitQeVRyYWNlQmFja19UeXBlCitQeVR1cGxlSXRlcl9UeXBlCitQeVR1cGxlX0NsZWFyRnJlZUxpc3QKK1B5VHVwbGVfR2V0SXRlbQorUHlUdXBsZV9HZXRTbGljZQorUHlUdXBsZV9OZXcKK1B5VHVwbGVfUGFjaworUHlUdXBsZV9TZXRJdGVtCitQeVR1cGxlX1NpemUKK1B5VHVwbGVfVHlwZQorUHlUeXBlX0NsZWFyQ2FjaGUKK1B5VHlwZV9Gcm9tU3BlYworUHlUeXBlX0dlbmVyaWNBbGxvYworUHlUeXBlX0dlbmVyaWNOZXcKK1B5VHlwZV9HZXRGbGFncworUHlUeXBlX0lzU3VidHlwZQorUHlUeXBlX01vZGlmaWVkCitQeVR5cGVfUmVhZHkKK1B5VHlwZV9UeXBlCitQeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKK1B5VW5pY29kZURlY29kZUVycm9yX0dldEVuY29kaW5nCitQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQKK1B5VW5pY29kZURlY29kZUVycm9yX0dldE9iamVjdAorUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0UmVhc29uCitQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRTdGFydAorUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kCitQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb24KK1B5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0CitQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZworUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0RW5kCitQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QKK1B5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbgorUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQKK1B5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZAorUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uCitQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAorUHlVbmljb2RlSXRlcl9UeXBlCitQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQKK1B5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldE9iamVjdAorUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0UmVhc29uCitQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydAorUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kCitQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb24KK1B5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0CitQeVVuaWNvZGVVQ1MyX0FwcGVuZAorUHlVbmljb2RlVUNTMl9BcHBlbmRBbmREZWwKK1B5VW5pY29kZVVDUzJfQXNBU0NJSVN0cmluZworUHlVbmljb2RlVUNTMl9Bc0NoYXJtYXBTdHJpbmcKK1B5VW5pY29kZVVDUzJfQXNEZWNvZGVkT2JqZWN0CitQeVVuaWNvZGVVQ1MyX0FzRGVjb2RlZFVuaWNvZGUKK1B5VW5pY29kZVVDUzJfQXNFbmNvZGVkT2JqZWN0CitQeVVuaWNvZGVVQ1MyX0FzRW5jb2RlZFN0cmluZworUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRVbmljb2RlCitQeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nCitQeVVuaWNvZGVVQ1MyX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZworUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nCitQeVVuaWNvZGVVQ1MyX0FzVVRGMzJTdHJpbmcKK1B5VW5pY29kZVVDUzJfQXNVVEY4U3RyaW5nCitQeVVuaWNvZGVVQ1MyX0FzVW5pY29kZUVzY2FwZVN0cmluZworUHlVbmljb2RlVUNTMl9Bc1dpZGVDaGFyCitQeVVuaWNvZGVVQ1MyX0NsZWFyRnJlZWxpc3QKK1B5VW5pY29kZVVDUzJfQ29tcGFyZQorUHlVbmljb2RlVUNTMl9Db25jYXQKK1B5VW5pY29kZVVDUzJfQ29udGFpbnMKK1B5VW5pY29kZVVDUzJfQ291bnQKK1B5VW5pY29kZVVDUzJfRGVjb2RlCitQeVVuaWNvZGVVQ1MyX0RlY29kZUFTQ0lJCitQeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAKK1B5VW5pY29kZVVDUzJfRGVjb2RlRlNEZWZhdWx0CitQeVVuaWNvZGVVQ1MyX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKK1B5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xCitQeVVuaWNvZGVVQ1MyX0RlY29kZVJhd1VuaWNvZGVFc2NhcGUKK1B5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTYKK1B5VW5pY29kZVVDUzJfRGVjb2RlVVRGMTZTdGF0ZWZ1bAorUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMgorUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYzMlN0YXRlZnVsCitQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjgKK1B5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsCitQeVVuaWNvZGVVQ1MyX0RlY29kZVVuaWNvZGVFc2NhcGUKK1B5VW5pY29kZVVDUzJfRlNDb252ZXJ0ZXIKK1B5VW5pY29kZVVDUzJfRlNEZWNvZGVyCitQeVVuaWNvZGVVQ1MyX0ZpbmQKK1B5VW5pY29kZVVDUzJfRm9ybWF0CitQeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0CitQeVVuaWNvZGVVQ1MyX0Zyb21Gb3JtYXQKK1B5VW5pY29kZVVDUzJfRnJvbUZvcm1hdFYKK1B5VW5pY29kZVVDUzJfRnJvbU9iamVjdAorUHlVbmljb2RlVUNTMl9Gcm9tT3JkaW5hbAorUHlVbmljb2RlVUNTMl9Gcm9tU3RyaW5nCitQeVVuaWNvZGVVQ1MyX0Zyb21TdHJpbmdBbmRTaXplCitQeVVuaWNvZGVVQ1MyX0Zyb21XaWRlQ2hhcgorUHlVbmljb2RlVUNTMl9HZXREZWZhdWx0RW5jb2RpbmcKK1B5VW5pY29kZVVDUzJfR2V0U2l6ZQorUHlVbmljb2RlVUNTMl9Jc0lkZW50aWZpZXIKK1B5VW5pY29kZVVDUzJfSm9pbgorUHlVbmljb2RlVUNTMl9QYXJ0aXRpb24KK1B5VW5pY29kZVVDUzJfUlBhcnRpdGlvbgorUHlVbmljb2RlVUNTMl9SU3BsaXQKK1B5VW5pY29kZVVDUzJfUmVwbGFjZQorUHlVbmljb2RlVUNTMl9SZXNpemUKK1B5VW5pY29kZVVDUzJfUmljaENvbXBhcmUKK1B5VW5pY29kZVVDUzJfU2V0RGVmYXVsdEVuY29kaW5nCitQeVVuaWNvZGVVQ1MyX1NwbGl0CitQeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMKK1B5VW5pY29kZVVDUzJfVGFpbG1hdGNoCitQeVVuaWNvZGVVQ1MyX1RyYW5zbGF0ZQorUHlVbmljb2RlX0J1aWxkRW5jb2RpbmdNYXAKK1B5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCitQeVVuaWNvZGVfRGVjb2RlVVRGNworUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdAorUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKK1B5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorUHlVbmljb2RlX0ludGVybkluUGxhY2UKK1B5VW5pY29kZV9UeXBlCitQeVdlYWtyZWZfR2V0T2JqZWN0CitQeVdlYWtyZWZfTmV3UHJveHkKK1B5V2Vha3JlZl9OZXdSZWYKK1B5V3JhcHBlckRlc2NyX1R5cGUKK1B5V3JhcHBlcl9OZXcKK1B5WmlwX1R5cGUKK1B5X0FkZFBlbmRpbmdDYWxsCitQeV9BdEV4aXQKK1B5X0J1aWxkVmFsdWUKK1B5X0NvbXBpbGVTdHJpbmcKK1B5X0RlY1JlZgorUHlfRW5kSW50ZXJwcmV0ZXIKK1B5X0V4aXQKK1B5X0ZhdGFsRXJyb3IKK1B5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcKK1B5X0ZpbmFsaXplCitQeV9HZXRCdWlsZEluZm8KK1B5X0dldENvbXBpbGVyCitQeV9HZXRDb3B5cmlnaHQKK1B5X0dldEV4ZWNQcmVmaXgKK1B5X0dldFBhdGgKK1B5X0dldFBsYXRmb3JtCitQeV9HZXRQcmVmaXgKK1B5X0dldFByb2dyYW1GdWxsUGF0aAorUHlfR2V0UHJvZ3JhbU5hbWUKK1B5X0dldFB5dGhvbkhvbWUKK1B5X0dldFJlY3Vyc2lvbkxpbWl0CitQeV9HZXRWZXJzaW9uCitQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nCitQeV9JbmNSZWYKK1B5X0luaXRpYWxpemUKK1B5X0luaXRpYWxpemVFeAorUHlfSXNJbml0aWFsaXplZAorUHlfTWFpbgorUHlfTWFrZVBlbmRpbmdDYWxscworUHlfTmV3SW50ZXJwcmV0ZXIKK1B5X1JlcHJFbnRlcgorUHlfUmVwckxlYXZlCitQeV9TZXRQcm9ncmFtTmFtZQorUHlfU2V0UHl0aG9uSG9tZQorUHlfU2V0UmVjdXJzaW9uTGltaXQKK1B5X1N5bXRhYmxlU3RyaW5nCitQeV9WYUJ1aWxkVmFsdWUKK19QeUVycl9CYWRJbnRlcm5hbENhbGwKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKK19QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUCitfUHlPYmplY3RfR0NfTWFsbG9jCitfUHlPYmplY3RfR0NfTmV3CitfUHlPYmplY3RfR0NfTmV3VmFyCitfUHlPYmplY3RfR0NfUmVzaXplCitfUHlPYmplY3RfTmV3CitfUHlPYmplY3RfTmV3VmFyCitfUHlTdGF0ZV9BZGRNb2R1bGUKK19QeVRocmVhZFN0YXRlX0luaXQKK19QeVRocmVhZFN0YXRlX1ByZWFsbG9jCitfUHlUcmFzaF9kZWxldGVfbGF0ZXIKK19QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nCitfUHlUcmFzaF9kZXBvc2l0X29iamVjdAorX1B5VHJhc2hfZGVzdHJveV9jaGFpbgorX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZQorX1B5V2Vha3JlZl9Qcm94eVR5cGUKK19QeVdlYWtyZWZfUmVmVHlwZQorX1B5X0J1aWxkVmFsdWVfU2l6ZVQKK19QeV9DaGVja1JlY3Vyc2lvbkxpbWl0CitfUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCitfUHlfRGVhbGxvYworX1B5X0VsbGlwc2lzT2JqZWN0CitfUHlfRmFsc2VTdHJ1Y3QKK19QeV9Ob25lU3RydWN0CitfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QKK19QeV9Td2FwcGVkT3AKK19QeV9UcnVlU3RydWN0CitfUHlfVmFCdWlsZFZhbHVlX1NpemVUCmRpZmYgLS1naXQgYS9QQy9weXRob24zZGxsLmMgYi9QQy9weXRob24zZGxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYyOTA3MQotLS0gL2Rldi9udWxsCisrKyBiL1BDL3B5dGhvbjNkbGwuYwpAQCAtMCwwICsxLDkgQEAKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK0JPT0wgV0lOQVBJCitEbGxNYWluKEhJTlNUQU5DRSBoSW5zdERMTCwKKyAgICAgICAgRFdPUkQgZmR3UmVhc29uLAorICAgICAgICBMUFZPSUQgbHBSZXNlcnZlZCkKK3sKKyAgICByZXR1cm4gVFJVRTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9QQy9weXRob25fbnQucmMgYi9QQy9weXRob25fbnQucmMKaW5kZXggZTEzMjgzNy4uOGNjY2YyZCAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uX250LnJjCisrKyBiL1BDL3B5dGhvbl9udC5yYwpAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgVkFMVUUgIkZpbGVEZXNjcmlwdGlvbiIsICJQeXRob24gQ29yZVwwIgogICAgICAgICAgICAgVkFMVUUgIkZpbGVWZXJzaW9uIiwgUFlUSE9OX1ZFUlNJT04KICAgICAgICAgICAgIFZBTFVFICJJbnRlcm5hbE5hbWUiLCAiUHl0aG9uIERMTFwwIgotICAgICAgICAgICAgVkFMVUUgIkxlZ2FsQ29weXJpZ2h0IiwgIkNvcHlyaWdodCCpIDIwMDEtMjAwOCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4gQ29weXJpZ2h0IKkgMjAwMCBCZU9wZW4uY29tLiBDb3B5cmlnaHQgqSAxOTk1LTIwMDEgQ05SSS4gQ29weXJpZ2h0IKkgMTk5MS0xOTk1IFNNQy5cMCIKKyAgICAgICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsICJDb3B5cmlnaHQgqSAyMDAxLTIwMTEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIENvcHlyaWdodCCpIDIwMDAgQmVPcGVuLmNvbS4gQ29weXJpZ2h0IKkgMTk5NS0yMDAxIENOUkkuIENvcHlyaWdodCCpIDE5OTEtMTk5NSBTTUMuXDAiCiAgICAgICAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsIFBZVEhPTl9ETExfTkFNRSAiXDAiCiAgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdE5hbWUiLCAiUHl0aG9uXDAiCiAgICAgICAgICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLCBQWVRIT05fVkVSU0lPTgpkaWZmIC0tZ2l0IGEvUEMvd2lucmVnLmMgYi9QQy93aW5yZWcuYwppbmRleCA1MmQyMzBlLi4xYmM0N2I5IDEwMDY0NAotLS0gYS9QQy93aW5yZWcuYworKysgYi9QQy93aW5yZWcuYwpAQCAtODgsNyArODgsNyBAQAogImtleSBpcyB0aGUgcHJlZGVmaW5lZCBoYW5kbGUgdG8gY29ubmVjdCB0by5cbiIKICJcbiIKICJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCi0iSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvbiBpcyByYWlzZWQuIik7CisiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOwogCiBQeURvY19TVFJWQVIoQ3JlYXRlS2V5X2RvYywKICJrZXkgPSBDcmVhdGVLZXkoa2V5LCBzdWJfa2V5KSAtIENyZWF0ZXMgb3Igb3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCkBAIC0xMDMsNiArMTAzLDIxIEBACiAiVGhlIHJldHVybiB2YWx1ZSBpcyB0aGUgaGFuZGxlIG9mIHRoZSBvcGVuZWQga2V5LlxuIgogIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKIAorUHlEb2NfU1RSVkFSKENyZWF0ZUtleUV4X2RvYywKKyJrZXkgPSBDcmVhdGVLZXlFeChrZXksIHN1Yl9rZXksIHJlcywgc2FtKSAtIENyZWF0ZXMgb3Igb3BlbnMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCisiXG4iCisia2V5IGlzIGFuIGFscmVhZHkgb3BlbiBrZXksIG9yIG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzXG4iCisic3ViX2tleSBpcyBhIHN0cmluZyB0aGF0IG5hbWVzIHRoZSBrZXkgdGhpcyBtZXRob2Qgb3BlbnMgb3IgY3JlYXRlcy5cbiIKKyJyZXMgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorInNhbSBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkXG4iCisiIElmIGtleSBpcyBvbmUgb2YgdGhlIHByZWRlZmluZWQga2V5cywgc3ViX2tleSBtYXkgYmUgTm9uZS4gSW4gdGhhdCBjYXNlLFxuIgorIiB0aGUgaGFuZGxlIHJldHVybmVkIGlzIHRoZSBzYW1lIGtleSBoYW5kbGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbi5cbiIKKyJcbiIKKyJJZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzLCB0aGlzIGZ1bmN0aW9uIG9wZW5zIHRoZSBleGlzdGluZyBrZXlcbiIKKyJcbiIKKyJUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBoYW5kbGUgb2YgdGhlIG9wZW5lZCBrZXkuXG4iCisiSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbiBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworCiBQeURvY19TVFJWQVIoRGVsZXRlS2V5X2RvYywKICJEZWxldGVLZXkoa2V5LCBzdWJfa2V5KSAtIERlbGV0ZXMgdGhlIHNwZWNpZmllZCBrZXkuXG4iCiAiXG4iCkBAIC0xMTMsNyArMTI4LDIyIEBACiAiVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCiAiXG4iCiAiSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKLSJpcyByZW1vdmVkLiAgSWYgdGhlIG1ldGhvZCBmYWlscywgYW4gRW52aXJvbm1lbnRFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworImlzIHJlbW92ZWQuICBJZiB0aGUgbWV0aG9kIGZhaWxzLCBhIFdpbmRvd3NFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworCitQeURvY19TVFJWQVIoRGVsZXRlS2V5RXhfZG9jLAorIkRlbGV0ZUtleUV4KGtleSwgc3ViX2tleSwgc2FtLCByZXMpIC0gRGVsZXRlcyB0aGUgc3BlY2lmaWVkIGtleS5cbiIKKyJcbiIKKyJrZXkgaXMgYW4gYWxyZWFkeSBvcGVuIGtleSwgb3IgYW55IG9uZSBvZiB0aGUgcHJlZGVmaW5lZCBIS0VZXyogY29uc3RhbnRzLlxuIgorInN1Yl9rZXkgaXMgYSBzdHJpbmcgdGhhdCBtdXN0IGJlIGEgc3Via2V5IG9mIHRoZSBrZXkgaWRlbnRpZmllZCBieSB0aGUga2V5IHBhcmFtZXRlci5cbiIKKyJyZXMgaXMgYSByZXNlcnZlZCBpbnRlZ2VyLCBhbmQgbXVzdCBiZSB6ZXJvLiAgRGVmYXVsdCBpcyB6ZXJvLlxuIgorInNhbSBpcyBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGFuIGFjY2VzcyBtYXNrIHRoYXQgZGVzY3JpYmVzIHRoZSBkZXNpcmVkXG4iCisiIFRoaXMgdmFsdWUgbXVzdCBub3QgYmUgTm9uZSwgYW5kIHRoZSBrZXkgbWF5IG5vdCBoYXZlIHN1YmtleXMuXG4iCisiXG4iCisiVGhpcyBtZXRob2QgY2FuIG5vdCBkZWxldGUga2V5cyB3aXRoIHN1YmtleXMuXG4iCisiXG4iCisiSWYgdGhlIG1ldGhvZCBzdWNjZWVkcywgdGhlIGVudGlyZSBrZXksIGluY2x1ZGluZyBhbGwgb2YgaXRzIHZhbHVlcyxcbiIKKyJpcyByZW1vdmVkLiAgSWYgdGhlIG1ldGhvZCBmYWlscywgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbiIKKyJPbiB1bnN1cHBvcnRlZCBXaW5kb3dzIHZlcnNpb25zLCBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZC4iKTsKIAogUHlEb2NfU1RSVkFSKERlbGV0ZVZhbHVlX2RvYywKICJEZWxldGVWYWx1ZShrZXksIHZhbHVlKSAtIFJlbW92ZXMgYSBuYW1lZCB2YWx1ZSBmcm9tIGEgcmVnaXN0cnkga2V5LlxuIgpAQCAtMTI4LDcgKzE1OCw3IEBACiAiaW5kZXggaXMgYW4gaW50ZWdlciB0aGF0IGlkZW50aWZpZXMgdGhlIGluZGV4IG9mIHRoZSBrZXkgdG8gcmV0cmlldmUuXG4iCiAiXG4iCiAiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCi0iSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGFuIEVudmlyb25tZW50RXJyb3IgZXhjZXB0aW9uIGlzXG4iCisiSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5IHVudGlsIGEgV2luZG93c0Vycm9yIGV4Y2VwdGlvbiBpc1xuIgogInJhaXNlZCwgaW5kaWNhdGluZyBubyBtb3JlIHZhbHVlcyBhcmUgYXZhaWxhYmxlLiIpOwogCiBQeURvY19TVFJWQVIoRW51bVZhbHVlX2RvYywKQEAgLTEzNyw3ICsxNjcsNyBAQAogImluZGV4IGlzIGFuIGludGVnZXIgdGhhdCBpZGVudGlmaWVzIHRoZSBpbmRleCBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4iCiAiXG4iCiAiVGhlIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgbmFtZSBvZiBvbmUgc3Via2V5IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuXG4iCi0iSXQgaXMgdHlwaWNhbGx5IGNhbGxlZCByZXBlYXRlZGx5LCB1bnRpbCBhbiBFbnZpcm9ubWVudEVycm9yIGV4Y2VwdGlvblxuIgorIkl0IGlzIHR5cGljYWxseSBjYWxsZWQgcmVwZWF0ZWRseSwgdW50aWwgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uXG4iCiAiaXMgcmFpc2VkLCBpbmRpY2F0aW5nIG5vIG1vcmUgdmFsdWVzLlxuIgogIlxuIgogIlRoZSByZXN1bHQgaXMgYSB0dXBsZSBvZiAzIGl0ZW1zOlxuIgpAQCAtMTkxLDcgKzIyMSw3IEBACiAiIHNlY3VyaXR5IGFjY2VzcyBmb3IgdGhlIGtleS4gIERlZmF1bHQgaXMgS0VZX1JFQURcbiIKICJcbiIKICJUaGUgcmVzdWx0IGlzIGEgbmV3IGhhbmRsZSB0byB0aGUgc3BlY2lmaWVkIGtleVxuIgotIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYW4gRW52aXJvbm1lbnRFcnJvciBleGNlcHRpb24gaXMgcmFpc2VkLiIpOworIklmIHRoZSBmdW5jdGlvbiBmYWlscywgYSBXaW5kb3dzRXJyb3IgZXhjZXB0aW9uIGlzIHJhaXNlZC4iKTsKIAogUHlEb2NfU1RSVkFSKE9wZW5LZXlFeF9kb2MsICJTZWUgT3BlbktleSgpIik7CiAKQEAgLTQyMiw3ICs0NTIsNyBAQAogICAgICAgICAgKHB5aGtleTEgPCBweWhrZXkyID8gLTEgOiAxKTsKIH0KIAotc3RhdGljIGxvbmcKK3N0YXRpYyBQeV9oYXNoX3QKIFB5SEtFWV9oYXNoRnVuYyhQeU9iamVjdCAqb2IpCiB7CiAgICAgLyogSnVzdCB1c2UgdGhlIGFkZHJlc3MuCkBAIC03MzUsOCArNzY1LDkgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgICAgICAgICAgICAgKnJldERhdGFTaXplID0gMiArIFB5VW5pY29kZV9HRVRfREFUQV9TSVpFKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAqcmV0RGF0YVNpemUgPSBQeV9TQUZFX0RPV05DQVNUKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICsgUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUodmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIERXT1JEKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpyZXREYXRhQnVmID0gKEJZVEUgKilQeU1lbV9ORVcoRFdPUkQsICpyZXREYXRhU2l6ZSk7CiAgICAgICAgICAgICBpZiAoKnJldERhdGFCdWY9PU5VTEwpewpAQCAtNzY4LDcgKzc5OSw4IEBACiAgICAgICAgICAgICAgICAgICAgIHQgPSBQeUxpc3RfR0VUX0lURU0odmFsdWUsIGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSArPSAyICsgUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUodCk7CisgICAgICAgICAgICAgICAgICAgIHNpemUgKz0gUHlfU0FGRV9ET1dOQ0FTVCgyICsgUHlVbmljb2RlX0dFVF9EQVRBX1NJWkUodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIERXT1JEKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAqcmV0RGF0YVNpemUgPSBzaXplICsgMjsKQEAgLTgxOCw3ICs4NTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICpyZXREYXRhU2l6ZSA9IHZpZXcubGVuOworICAgICAgICAgICAgICAgICpyZXREYXRhU2l6ZSA9IFB5X1NBRkVfRE9XTkNBU1Qodmlldy5sZW4sIFB5X3NzaXplX3QsIERXT1JEKTsKICAgICAgICAgICAgICAgICBtZW1jcHkoKnJldERhdGFCdWYsIHZpZXcuYnVmLCB2aWV3Lmxlbik7CiAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgICAgICB9CkBAIC05NTcsNiArOTg5LDMyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitQeUNyZWF0ZUtleUV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBIS0VZIGhLZXk7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICB3Y2hhcl90ICpzdWJfa2V5OworICAgIEhLRVkgcmV0S2V5OworICAgIGludCByZXNlcnZlZCA9IDA7CisgICAgUkVHU0FNIGFjY2VzcyA9IEtFWV9XUklURTsKKyAgICBsb25nIHJjOworCisgICAgY2hhciAqa3dsaXN0W10gPSB7ImtleSIsICJzdWJfa2V5IiwgInJlc2VydmVkIiwgImFjY2VzcyIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiT1p8aWk6Q3JlYXRlS2V5RXgiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSwgJnN1Yl9rZXksICZyZXNlcnZlZCwgJmFjY2VzcykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlIS0VZX0FzSEtFWShrZXksICZoS2V5LCBGQUxTRSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmMgPSBSZWdDcmVhdGVLZXlFeFcoaEtleSwgc3ViX2tleSwgcmVzZXJ2ZWQsIE5VTEwsIChEV09SRClOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcywgTlVMTCwgJnJldEtleSwgTlVMTCk7CisgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywgIkNyZWF0ZUtleUV4Iik7CisgICAgcmV0dXJuIFB5SEtFWV9Gcm9tSEtFWShyZXRLZXkpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogUHlEZWxldGVLZXkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIEhLRVkgaEtleTsKQEAgLTk3NSw2ICsxMDMzLDQ3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitQeURlbGV0ZUtleUV4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBIS0VZIGhLZXk7CisgICAgUHlPYmplY3QgKmtleTsKKyAgICBITU9EVUxFIGhNb2Q7CisgICAgdHlwZWRlZiBMT05HIChXSU5BUEkgKlJES0VGdW5jKShIS0VZLCBjb25zdCB3Y2hhcl90KiwgUkVHU0FNLCBpbnQpOworICAgIFJES0VGdW5jIHBmbiA9IE5VTEw7CisgICAgd2NoYXJfdCAqc3ViX2tleTsKKyAgICBsb25nIHJjOworICAgIGludCByZXNlcnZlZCA9IDA7CisgICAgUkVHU0FNIGFjY2VzcyA9IEtFWV9XT1c2NF82NEtFWTsKKworICAgIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAic3ViX2tleSIsICJhY2Nlc3MiLCAicmVzZXJ2ZWQiLCBOVUxMfTsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPdXxpaTpEZWxldGVLZXlFeCIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LCAmc3ViX2tleSwgJmFjY2VzcywgJnJlc2VydmVkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUhLRVlfQXNIS0VZKGtleSwgJmhLZXksIEZBTFNFKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiAqLworICAgIGhNb2QgPSBHZXRNb2R1bGVIYW5kbGUoImFkdmFwaTMyLmRsbCIpOworICAgIGlmIChoTW9kKQorICAgICAgICBwZm4gPSAoUkRLRUZ1bmMpR2V0UHJvY0FkZHJlc3MoaE1vZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnRGVsZXRlS2V5RXhXIik7CisgICAgaWYgKCFwZm4pIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmMgPSAoKnBmbikoaEtleSwgc3ViX2tleSwgYWNjZXNzLCByZXNlcnZlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsICJSZWdEZWxldGVLZXlFeCIpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIFB5RGVsZXRlVmFsdWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIEhLRVkgaEtleTsKQEAgLTEwMzYsNyArMTEzNSw3IEBACiAgICAgaW50IGluZGV4OwogICAgIGxvbmcgcmM7CiAgICAgd2NoYXJfdCAqcmV0VmFsdWVCdWY7Ci0gICAgd2NoYXJfdCAqdG1wQnVmOworICAgIEJZVEUgKnRtcEJ1ZjsKICAgICBCWVRFICpyZXREYXRhQnVmOwogICAgIERXT1JEIHJldFZhbHVlU2l6ZSwgYnVmVmFsdWVTaXplOwogICAgIERXT1JEIHJldERhdGFTaXplLCBidWZEYXRhU2l6ZTsKQEAgLTEwODQsNyArMTE4Myw3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBidWZEYXRhU2l6ZSAqPSAyOwotICAgICAgICB0bXBCdWYgPSAod2NoYXJfdCAqKVB5TWVtX1JlYWxsb2MocmV0RGF0YUJ1ZiwgYnVmRGF0YVNpemUpOworICAgICAgICB0bXBCdWYgPSAoQllURSAqKVB5TWVtX1JlYWxsb2MocmV0RGF0YUJ1ZiwgYnVmRGF0YVNpemUpOwogICAgICAgICBpZiAodG1wQnVmID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXRWYWwgPSBOVUxMOwpAQCAtMTE4NywyNCArMTI4NiwyNiBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlPcGVuS2V5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK1B5T3BlbktleShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgSEtFWSBoS2V5OwotICAgIFB5T2JqZWN0ICpvYktleTsKLQotICAgIHdjaGFyX3QgKnN1YktleTsKLSAgICBpbnQgcmVzID0gMDsKKyAgICBQeU9iamVjdCAqa2V5OworICAgIHdjaGFyX3QgKnN1Yl9rZXk7CisgICAgaW50IHJlc2VydmVkID0gMDsKICAgICBIS0VZIHJldEtleTsKICAgICBsb25nIHJjOwotICAgIFJFR1NBTSBzYW0gPSBLRVlfUkVBRDsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9afGlpOk9wZW5LZXkiLCAmb2JLZXksICZzdWJLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZyZXMsICZzYW0pKQorICAgIFJFR1NBTSBhY2Nlc3MgPSBLRVlfUkVBRDsKKworICAgIGNoYXIgKmt3bGlzdFtdID0geyJrZXkiLCAic3ViX2tleSIsICJyZXNlcnZlZCIsICJhY2Nlc3MiLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk9afGlpOk9wZW5LZXkiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSwgJnN1Yl9rZXksICZyZXNlcnZlZCwgJmFjY2VzcykpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghUHlIS0VZX0FzSEtFWShvYktleSwgJmhLZXksIEZBTFNFKSkKKyAgICBpZiAoIVB5SEtFWV9Bc0hLRVkoa2V5LCAmaEtleSwgRkFMU0UpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IFJlZ09wZW5LZXlFeFcoaEtleSwgc3ViS2V5LCByZXMsIHNhbSwgJnJldEtleSk7CisgICAgcmMgPSBSZWdPcGVuS2V5RXhXKGhLZXksIHN1Yl9rZXksIHJlc2VydmVkLCBhY2Nlc3MsICZyZXRLZXkpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJjICE9IEVSUk9SX1NVQ0NFU1MpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycldpdGhGdW5jdGlvbihyYywgIlJlZ09wZW5LZXlFeCIpOwpAQCAtMTQ3NSw4ICsxNTc2LDggQEAKICAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLy8gT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKLSAgICAvLyBkeW5hbWljYWxseS4KKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7CiAgICAgaWYgKGhNb2QpCiAgICAgICAgIHBmbiA9IChSRFJLRnVuYylHZXRQcm9jQWRkcmVzcyhoTW9kLApAQCAtMTUxMSw4ICsxNjEyLDggQEAKICAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLy8gT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKLSAgICAvLyBkeW5hbWljYWxseS4KKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7CiAgICAgaWYgKGhNb2QpCiAgICAgICAgIHBmbiA9IChSRVJLRnVuYylHZXRQcm9jQWRkcmVzcyhoTW9kLApAQCAtMTU0OCw4ICsxNjQ5LDggQEAKICAgICBpZiAoIVB5SEtFWV9Bc0hLRVkob2JLZXksICZoS2V5LCBGQUxTRSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLy8gT25seSBhdmFpbGFibGUgb24gNjRiaXQgcGxhdGZvcm1zLCBzbyB3ZSBtdXN0IGxvYWQgaXQKLSAgICAvLyBkeW5hbWljYWxseS4KKyAgICAvKiBPbmx5IGF2YWlsYWJsZSBvbiA2NGJpdCBwbGF0Zm9ybXMsIHNvIHdlIG11c3QgbG9hZCBpdAorICAgICAgIGR5bmFtaWNhbGx5LiovCiAgICAgaE1vZCA9IEdldE1vZHVsZUhhbmRsZSgiYWR2YXBpMzIuZGxsIik7CiAgICAgaWYgKGhNb2QpCiAgICAgICAgIHBmbiA9IChSUVJLRnVuYylHZXRQcm9jQWRkcmVzcyhoTW9kLApAQCAtMTU2NSwxNCArMTY2NiwxOCBAQAogICAgIGlmIChyYyAhPSBFUlJPUl9TVUNDRVNTKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVnUXVlcnlSZWZsZWN0aW9uS2V5Iik7Ci0gICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyYyk7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhyZXN1bHQpOwogfQogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHdpbnJlZ19tZXRob2RzW10gPSB7CiAgICAgeyJDbG9zZUtleSIsICAgICAgICAgUHlDbG9zZUtleSwgICAgICAgIE1FVEhfVkFSQVJHUywgQ2xvc2VLZXlfZG9jfSwKICAgICB7IkNvbm5lY3RSZWdpc3RyeSIsICBQeUNvbm5lY3RSZWdpc3RyeSwgTUVUSF9WQVJBUkdTLCBDb25uZWN0UmVnaXN0cnlfZG9jfSwKICAgICB7IkNyZWF0ZUtleSIsICAgICAgICBQeUNyZWF0ZUtleSwgICAgICAgTUVUSF9WQVJBUkdTLCBDcmVhdGVLZXlfZG9jfSwKKyAgICB7IkNyZWF0ZUtleUV4IiwgICAgICAoUHlDRnVuY3Rpb24pUHlDcmVhdGVLZXlFeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBDcmVhdGVLZXlFeF9kb2N9LAogICAgIHsiRGVsZXRlS2V5IiwgICAgICAgIFB5RGVsZXRlS2V5LCAgICAgICBNRVRIX1ZBUkFSR1MsIERlbGV0ZUtleV9kb2N9LAorICAgIHsiRGVsZXRlS2V5RXgiLCAgICAgIChQeUNGdW5jdGlvbilQeURlbGV0ZUtleUV4LAorICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIERlbGV0ZUtleUV4X2RvY30sCiAgICAgeyJEZWxldGVWYWx1ZSIsICAgICAgUHlEZWxldGVWYWx1ZSwgICAgIE1FVEhfVkFSQVJHUywgRGVsZXRlVmFsdWVfZG9jfSwKICAgICB7IkRpc2FibGVSZWZsZWN0aW9uS2V5IiwgUHlEaXNhYmxlUmVmbGVjdGlvbktleSwgTUVUSF9WQVJBUkdTLCBEaXNhYmxlUmVmbGVjdGlvbktleV9kb2N9LAogICAgIHsiRW5hYmxlUmVmbGVjdGlvbktleSIsICBQeUVuYWJsZVJlZmxlY3Rpb25LZXksICBNRVRIX1ZBUkFSR1MsIEVuYWJsZVJlZmxlY3Rpb25LZXlfZG9jfSwKQEAgLTE1ODIsOCArMTY4NywxMCBAQAogICAgICAgICBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3NfZG9jIH0sCiAgICAgeyJGbHVzaEtleSIsICAgICAgICAgUHlGbHVzaEtleSwgICAgICAgIE1FVEhfVkFSQVJHUywgRmx1c2hLZXlfZG9jfSwKICAgICB7IkxvYWRLZXkiLCAgICAgICAgICBQeUxvYWRLZXksICAgICAgICAgTUVUSF9WQVJBUkdTLCBMb2FkS2V5X2RvY30sCi0gICAgeyJPcGVuS2V5IiwgICAgICAgICAgUHlPcGVuS2V5LCAgICAgICAgIE1FVEhfVkFSQVJHUywgT3BlbktleV9kb2N9LAotICAgIHsiT3BlbktleUV4IiwgICAgICAgIFB5T3BlbktleSwgICAgICAgICBNRVRIX1ZBUkFSR1MsIE9wZW5LZXlFeF9kb2N9LAorICAgIHsiT3BlbktleSIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeU9wZW5LZXksIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbktleV9kb2N9LAorICAgIHsiT3BlbktleUV4IiwgICAgICAgIChQeUNGdW5jdGlvbilQeU9wZW5LZXksIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlbktleUV4X2RvY30sCiAgICAgeyJRdWVyeVZhbHVlIiwgICAgICAgUHlRdWVyeVZhbHVlLCAgICAgIE1FVEhfVkFSQVJHUywgUXVlcnlWYWx1ZV9kb2N9LAogICAgIHsiUXVlcnlWYWx1ZUV4IiwgICAgIFB5UXVlcnlWYWx1ZUV4LCAgICBNRVRIX1ZBUkFSR1MsIFF1ZXJ5VmFsdWVFeF9kb2N9LAogICAgIHsiUXVlcnlJbmZvS2V5IiwgICAgIFB5UXVlcnlJbmZvS2V5LCAgICBNRVRIX1ZBUkFSR1MsIFF1ZXJ5SW5mb0tleV9kb2N9LApkaWZmIC0tZ2l0IGEvUEMvd2luc291bmQuYyBiL1BDL3dpbnNvdW5kLmMKaW5kZXggZDQ1NTg0OC4uMWVkOTViYSAxMDA2NDQKLS0tIGEvUEMvd2luc291bmQuYworKysgYi9QQy93aW5zb3VuZC5jCkBAIC03Myw4ICs3Myw2IEBACiBzb3VuZF9wbGF5c291bmQoUHlPYmplY3QgKnMsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5X1VOSUNPREUgKndzb3VuZDsKLSAgICBQeU9iamVjdCAqb3NvdW5kOwotICAgIGNvbnN0IGNoYXIgKnNvdW5kOwogICAgIGludCBmbGFnczsKICAgICBpbnQgb2s7CiAKQEAgLTk1LDMxICs5Myw3IEBACiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQotICAgIC8qIERyb3AgdGhlIGFyZ3VtZW50IHBhcnNpbmcgZXJyb3IgYXMgbmFycm93IHN0cmluZ3MKLSAgICAgICBhcmUgYWxzbyB2YWxpZC4gKi8KLSAgICBQeUVycl9DbGVhcigpOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOlBsYXlTb3VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm9zb3VuZCwgJmZsYWdzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKGZsYWdzICYgU05EX0FTWU5DICYmIGZsYWdzICYgU05EX01FTU9SWSkgewotICAgICAgICAvKiBTaWRlc3RlcCByZWZlcmVuY2UgY291bnRpbmcgaGVhZGFjaGU7IHVuZm9ydHVuYXRlbHkgdGhpcyBhbHNvCi0gICAgICAgICAgIHByZXZlbnQgU05EX0xPT1AgZnJvbSBtZW1vcnkuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJDYW5ub3QgcGxheSBhc3luY2hyb25vdXNseSBmcm9tIG1lbW9yeSIpOwotICAgICAgICBQeV9ERUNSRUYob3NvdW5kKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHNvdW5kID0gUHlCeXRlc19Bc1N0cmluZyhvc291bmQpOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBvayA9IFBsYXlTb3VuZEEoc291bmQsIE5VTEwsIGZsYWdzKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmICghb2spIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkZhaWxlZCB0byBwbGF5IHNvdW5kIik7Ci0gICAgICAgIFB5X0RFQ1JFRihvc291bmQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlfREVDUkVGKG9zb3VuZCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpkaWZmIC0tZ2l0IGEvUENidWlsZC9faGFzaGxpYi52Y3Byb2ogYi9QQ2J1aWxkL19oYXNobGliLnZjcHJvagppbmRleCA1MGQ0MGQxLi5lMDVkOTdlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL19oYXNobGliLnZjcHJvagorKysgYi9QQ2J1aWxkL19oYXNobGliLnZjcHJvagpAQCAtMjcsNyArMjcsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC04OSw3ICs4OCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTE1Myw3ICsxNTEsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC0yMTYsNyArMjEzLDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMjgwLDcgKzI3Niw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTM0Myw3ICszMzgsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC00MDgsNyArNDAyLDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtNDcxLDcgKzQ2NCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3NzbC52Y3Byb2ogYi9QQ2J1aWxkL19zc2wudmNwcm9qCmluZGV4IDc2OWJlOTMuLjU3MjhjODQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NzbC52Y3Byb2oKKysrIGIvUENidWlsZC9fc3NsLnZjcHJvagpAQCAtMjcsNyArMjcsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC04OSw3ICs4OCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTE1Myw3ICsxNTEsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC0yMTYsNyArMjEzLDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtMjgwLDcgKzI3Niw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KQEAgLTM0Myw3ICszMzgsNiBAQAogCQkJPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCkBAIC00MDgsNyArNDAyLDYgQEAKIAkJCT4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQpAQCAtNDcxLDcgKzQ2NCw2IEBACiAJCQk+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfc3NsLnB5IGIvUENidWlsZC9idWlsZF9zc2wucHkKaW5kZXggMjY5M2M0MS4uMmNmN2ZjNiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wucHkKKysrIGIvUENidWlsZC9idWlsZF9zc2wucHkKQEAgLTEwMiwxMSArMTAyLDggQEAKICAgICAiIiIKICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobTMyKToKICAgICAgICAgcmV0dXJuCi0gICAgIyAyLjQgY29tcGF0aWJpbGl0eQotICAgIGZpbiA9IG9wZW4obTMyKQotICAgIGlmIDE6ICMgd2l0aCBvcGVuKG0zMikgYXMgZmluOgotICAgICAgICBmb3V0ID0gb3BlbihtYWtlZmlsZSwgJ3cnKQotICAgICAgICBpZiAxOiAjIHdpdGggb3BlbihtYWtlZmlsZSwgJ3cnKSBhcyBmb3V0OgorICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKKyAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46CiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCiAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCkBAIC0xMjQsMTMgKzEyMSw5IEBACiAgICAgIiIiCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKICAgICAgICAgcmV0dXJuCi0gICAgIyAyLjQgY29tcGF0aWJpbGl0eQotICAgIGZpbiA9IG9wZW4obWFrZWZpbGUpCi0gICAgaWYgMTogIyB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKKyAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKICAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICAgICAgZmluLmNsb3NlKCkKLSAgICBmb3V0ID0gb3BlbihtYWtlZmlsZSwgJ3cnKQotICAgIGlmIDE6ICMgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6CisgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6CiAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCJQRVJMPSIpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCkBAIC0xNDYsMTQgKzEzOSwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBub2FsZ28KICAgICAgICAgICAgICAgICBsaW5lID0gbGluZSArICdcbicKICAgICAgICAgICAgIGZvdXQud3JpdGUobGluZSkKLSAgICBmb3V0LmNsb3NlKCkKIAogZGVmIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpOgotICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQorICAgIHByaW50KCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCisgICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSsiIG5vLWlkZWEgbm8tbWRjMiIpCiAgICAgcHJpbnQoZG9fc2NyaXB0KQogICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCiAKK2RlZiBjbXAoZjEsIGYyKToKKyAgICBidWZzaXplID0gMTAyNCAqIDgKKyAgICB3aXRoIG9wZW4oZjEsICdyYicpIGFzIGZwMSwgb3BlbihmMiwgJ3JiJykgYXMgZnAyOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYjEgPSBmcDEucmVhZChidWZzaXplKQorICAgICAgICAgICAgYjIgPSBmcDIucmVhZChidWZzaXplKQorICAgICAgICAgICAgaWYgYjEgIT0gYjI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBpZiBub3QgYjE6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworZGVmIGNvcHkoc3JjLCBkc3QpOgorICAgIGlmIG9zLnBhdGguaXNmaWxlKGRzdCkgYW5kIGNtcChzcmMsIGRzdCk6CisgICAgICAgIHJldHVybgorICAgIHNodXRpbC5jb3B5KHNyYywgZHN0KQorCiBkZWYgbWFpbigpOgogICAgIGJ1aWxkX2FsbCA9ICItYSIgaW4gc3lzLmFyZ3YKICAgICBpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZSI6CkBAIC0xNjksMTIgKzE3NywxNCBAQAogICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCiAgICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgogICAgICAgICBtMzIgPSBtYWtlZmlsZQorICAgICAgICBkaXJzdWZmaXggPSAiMzIiCiAgICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKICAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCiAgICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgogICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCiAgICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCisgICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKICAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQpAQCAtMjI4LDggKzIzOCwxNyBAQAogICAgICAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgogICAgICAgICAgICAgICAgIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpCiAgICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBzaHV0aWwuY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKKyAgICAgICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmYuaCIsIHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCkKKyAgICAgICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmYuaCIsIHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCkKKworICAgICAgICAjIElmIHRoZSBhc3NlbWJsZXIgZmlsZXMgZG9uJ3QgZXhpc3QgaW4gdG1wWFgsIGNvcHkgdGhlbSB0aGVyZQorICAgICAgICBpZiBwZXJsIGlzIE5vbmUgYW5kIG9zLnBhdGguZXhpc3RzKCJhc20iK2RpcnN1ZmZpeCk6CisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInRtcCIrZGlyc3VmZml4KToKKyAgICAgICAgICAgICAgICBvcy5ta2RpcigidG1wIitkaXJzdWZmaXgpCisgICAgICAgICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCJhc20iK2RpcnN1ZmZpeCk6CisgICAgICAgICAgICAgICAgaWYgbm90IGYuZW5kc3dpdGgoIi5hc20iKTogY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShyInRtcCVzXCVzIiAlIChkaXJzdWZmaXgsIGYpKTogY29udGludWUKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weShyImFzbSVzXCVzIiAlIChkaXJzdWZmaXgsIGYpLCAidG1wIitkaXJzdWZmaXgpCiAKICAgICAgICAgIyBOb3cgcnVuIG1ha2UuCiAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKQEAgLTIzOCw4ICsyNTcsOCBAQAogICAgICAgICAgICAgICAgIHByaW50KCJtbDY0IGFzc2VtYmxlciBoYXMgZmFpbGVkLiIpCiAgICAgICAgICAgICAgICAgc3lzLmV4aXQocmMpCiAKLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgc2h1dGlsLmNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKKyAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXGJ1aWxkaW5mLmgiKQorICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cb3BlbnNzbGNvbmYuaCIpCiAKICAgICAgICAgI21ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQogICAgICAgICBtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIC1mIFwiJXNcIiIgJSBtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZF90a2ludGVyLnB5IGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CmluZGV4IDJkNTc5N2YuLmViMWQwOTIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQorKysgYi9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKQEAgLTExLDkgKzExLDkgQEAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIHBhciA9IG9zLnBhdGgucGFyZGlyCiAKLVRDTCA9ICJ0Y2w4LjUuMiIKLVRLID0gInRrOC41LjIiCi1USVggPSAidGl4LTguNC4wLngiCitUQ0wgPSAidGNsOC41LjkiCitUSyA9ICJ0azguNS45IgorVElYID0gInRpeC04LjQuMy54IgogCiBST09UID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihoZXJlLCBwYXIsIHBhcikpCiAjIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCkBAIC0yMyw3ICsyMyw3IEBACiAgICAgJyVzICVzJykKIAogZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKLSAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrdiBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQorICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKICAgICBjbWQgPSBOTUFLRSAlIChtYWtlZmlsZSwgZGVmaW5lcywgY29tbWFuZCkKICAgICBwcmludCgiXG5cbiIrY21kKyJcbiIpCiAgICAgaWYgb3Muc3lzdGVtKGNtZCkgIT0gMDoKQEAgLTUzLDggKzUzLDggQEAKICAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKFJPT1QsIFRLLCAid2luIikpCiAgICAgICAgIGlmIGNsZWFuOgogICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgImNsZWFuIiwgREVCVUc9MCwgVENMRElSPXRjbGRpcikKLSAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgREVCVUc9MCwgTUFDSElORT1tYWNoaW5lKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIERFQlVHPTAsIElOU1RBTExESVI9ZGVzdCwgTUFDSElORT1tYWNoaW5lKQorICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBERUJVRz0wLCBNQUNISU5FPW1hY2hpbmUsIFRDTERJUj10Y2xkaXIpCisgICAgICAgIG5tYWtlKCJtYWtlZmlsZS52YyIsICJpbnN0YWxsIiwgREVCVUc9MCwgSU5TVEFMTERJUj1kZXN0LCBNQUNISU5FPW1hY2hpbmUsIFRDTERJUj10Y2xkaXIpCiAKICAgICAjIFRJWAogICAgIGlmIDE6CkBAIC02Myw3ICs2Myw3IEBACiAgICAgICAgIGlmIGNsZWFuOgogICAgICAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLCAiY2xlYW4iKQogICAgICAgICBubWFrZSgicHl0aG9uLm1hayIsIE1BQ0hJTkU9bWFjaGluZSwgSU5TVEFMTF9ESVI9ZGVzdCkKLSAgICAgICAgbm1ha2UoInB5dGhvbi5tYWsiLCAiaW5zdGFsbCIsIElOU1RBTExfRElSPWRlc3QpCisgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwgImluc3RhbGwiLCBNQUNISU5FPW1hY2hpbmUsIElOU1RBTExfRElSPWRlc3QpCiAKIGRlZiBtYWluKCk6CiAgICAgaWYgbGVuKHN5cy5hcmd2KSA8IDIgb3Igc3lzLmFyZ3ZbMV0gbm90IGluICgiV2luMzIiLCAiQU1ENjQiKToKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnoyLnZjcHJvaiBiL1BDYnVpbGQvYnoyLnZjcHJvagppbmRleCAwNGFkN2QzLi4wMzU3MzZlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J6Mi52Y3Byb2oKKysrIGIvUENidWlsZC9iejIudmNwcm9qCkBAIC00Myw3ICs0Myw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMjMwLDcgKzIzMCw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtMzU1LDcgKzM1NSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtNDE4LDcgKzQxOCw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpAQCAtNDgxLDcgKzQ4MSw3IEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KIAkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9raWxsX3B5dGhvbi5jIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCmluZGV4IDE3YTVmMzIuLjZiOTE2NzggMTAwNjQ0Ci0tLSBhL1BDYnVpbGQva2lsbF9weXRob24uYworKysgYi9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zMVtfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zMltfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCiAgICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgpkaWZmIC0tZ2l0IGEvUENidWlsZC9tYWtlX2J1aWxkaW5mby5jIGIvUENidWlsZC9tYWtlX2J1aWxkaW5mby5jCmluZGV4IDVhM2QzODUuLmZkM2EyZTIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvbWFrZV9idWlsZGluZm8uYworKysgYi9QQ2J1aWxkL21ha2VfYnVpbGRpbmZvLmMKQEAgLTE5LDkgKzE5LDE1IEBACiAgICBpbnZva2VkIGFzIGEgcHJlLWxpbmsgc3RlcCBmb3IgcHl0aG9uY29yZSwgc28gdGhhdCBvdmVyd3JpdGVzCiAgICBhbnkgcHJldmlvdXMgZ2V0YnVpbGRpbmZvLm8uCiAKKyAgIEhvd2V2ZXIsIGlmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGlzIHdpbGwgYmUgdXNlZAorICAgYXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdoZXJlIGFueSBnZXRidWlsZGluZm8yLmMgYW5kCisgICBnZXRidWlsZGluZm8ubyBmaWxlcyBhcmUgcHV0LiAgVGhpcyBpcyB1c2VmdWwgaWYgbXVsdGlwbGUKKyAgIGNvbmZpZ3VyYXRpb25zIGFyZSBiZWluZyBidWlsdCBpbiBwYXJhbGxlbCwgdG8gYXZvaWQgdGhlbQorICAgdHJhbXBsaW5nIGVhY2ggb3RoZXIncyBmaWxlcy4KKwogKi8KIAotaW50IG1ha2VfYnVpbGRpbmZvMigpCitpbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCiB7CiAgICAgc3RydWN0IF9zdGF0IHN0OwogICAgIEhLRVkgaFRvcnRvaXNlOwpAQCAtNDYsNyArNTIsOSBAQAogICAgIGlmIChfc3RhdChjb21tYW5kKzEsICZzdCkgPCAwKQogICAgICAgICAvKiBzdWJ3Y3Jldi5leGUgbm90IHBhcnQgb2YgdGhlIHJlbGVhc2UgKi8KICAgICAgICAgcmV0dXJuIDA7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiAuLiAuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgZ2V0YnVpbGRpbmZvMi5jIik7CisgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJcIiAuLiAuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgXCIiKTsKKyAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgdG1wcGF0aCk7IC8qIHF1b3RlZCB0bXBwYXRoICovCisgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmNcIiIpOwogICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwogICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTU1LDEwICs2MywxMiBAQAogCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCiB7Ci0gICAgY2hhciBjb21tYW5kWzUwMF0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7CisgICAgY2hhciBjb21tYW5kW0NNRF9TSVpFXSA9ICJjbC5leGUgLWMgLURfV0lOMzIgLURVU0VfRExfRVhQT1JUIC1EX1dJTkRPV1MgLURXSU4zMiAtRF9XSU5ETEwgIjsKKyAgICBjaGFyIHRtcHBhdGhbQ01EX1NJWkVdID0gIiI7CiAgICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKVxuIik7CisgICAgY2hhciAqdG1wZGlyID0gTlVMTDsKKyAgICBpZiAoYXJnYyA8PSAyIHx8IGFyZ2MgPiAzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFrZV9idWlsZGluZm8gJChDb25maWd1cmF0aW9uTmFtZSkgW3RtcGRpcl1cbiIpOwogICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgIH0KICAgICBpZiAoc3RyY21wKGFyZ3ZbMV0sICJSZWxlYXNlIikgPT0gMCkgewpAQCAtNzgsMTYgKzg4LDQxIEBACiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5zdXBwb3J0ZWQgY29uZmlndXJhdGlvbiAlc1xuIiwgYXJndlsxXSk7CiAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAgICAgfQorICAgIGlmIChhcmdjID4gMikgeworICAgICAgICB0bXBkaXIgPSBhcmd2WzJdOworICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgdG1wZGlyKTsKKyAgICAgICAgLyogSGFjayBmaXggZm9yIGJhZCBjb21tYW5kIGxpbmU6ICBJZiB0aGUgY29tbWFuZCBpcyBpc3N1ZWQgbGlrZSB0aGlzOgorICAgICAgICAgKiAkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgRGVidWcgIiQoSW50RGlyKSIKKyAgICAgICAgICogd2Ugd2lsbCBnZXQgYSB0cmFpbGluZyBxdW90ZSBiZWNhdXNlIEludERpciBlbmRzIHdpdGggYSBiYWNrc2xhc2ggdGhhdCB0aGVuCisgICAgICAgICAqIGVzY2FwZXMgdGhlIGZpbmFsICIuICBUbyBzaW1wbGlmeSB0aGUgbGlmZSBmb3IgZGV2ZWxvcGVycywgY2F0Y2ggdGhhdCBwcm9ibGVtCisgICAgICAgICAqIGhlcmUgYnkgY3V0dGluZyBpdCBvZmYuCisgICAgICAgICAqIFRoZSBwcm9wZXIgY29tbWFuZCBsaW5lLCBidHcgaXM6CisgICAgICAgICAqICQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBEZWJ1ZyAiJChJbnREaXIpXCIKKyAgICAgICAgICogSG9vcmF5IGZvciBjb21tYW5kIGxpbmUgcGFyc2luZyBvbiB3aW5kb3dzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHN0cmxlbih0bXBwYXRoKSA+IDAgJiYgdG1wcGF0aFtzdHJsZW4odG1wcGF0aCktMV0gPT0gJyInKQorICAgICAgICAgICAgdG1wcGF0aFtzdHJsZW4odG1wcGF0aCktMV0gPSAnXDAnOworICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7CisgICAgfQogCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIoKSkpCi0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvMi5jIC1EU1VCV0NSRVYgIik7Ci0gICAgZWxzZQorICAgIGlmICgoZG9fdW5saW5rID0gbWFrZV9idWlsZGluZm8yKHRtcHBhdGgpKSkgeworICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIik7CisgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKKyAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmNcIiAtRFNVQldDUkVWICIpOworICAgIH0gZWxzZQogICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXEluY2x1ZGUgLUkuLlxcUEMiKTsKKyAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIiAtRm9cIiIpOworICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKKyAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mby5vXCIgLUkuLlxcSW5jbHVkZSAtSS4uXFxQQyIpOwogICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwogICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKQotICAgICAgICBfdW5saW5rKCJnZXRidWlsZGluZm8yLmMiKTsKKyAgICBpZiAoZG9fdW5saW5rKSB7CisgICAgICAgIGNvbW1hbmRbMF0gPSAnXDAnOworICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIik7CisgICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKKyAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmNcIiIpOworICAgICAgICBfdW5saW5rKGNvbW1hbmQpOworICAgIH0KICAgICBpZiAocmVzdWx0IDwgMCkKICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1BDYnVpbGQvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUENidWlsZC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKaW5kZXggYzg2NDZlMi4uMTkxMGI5ZSAxMDA2NDQKLS0tIGEvUENidWlsZC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKKysrIGIvUENidWlsZC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKQEAgLTEyLDkgKzEyLDYgQEAKIAkJPFBsYXRmb3JtDQogCQkJTmFtZT0iV2luMzIiDQogCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCiAJPC9QbGF0Zm9ybXM+DQogCTxUb29sRmlsZXM+DQogCTwvVG9vbEZpbGVzPg0KQEAgLTg0LDY0ICs4MSw2IEBACiAJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQogCQkJLz4NCiAJCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCiAJPC9Db25maWd1cmF0aW9ucz4NCiAJPFJlZmVyZW5jZXM+DQogCTwvUmVmZXJlbmNlcz4NCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3BjYnVpbGQuc2xuIGIvUENidWlsZC9wY2J1aWxkLnNsbgppbmRleCAxZjZjNmZiLi4xZGU0ZWExIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3BjYnVpbGQuc2xuCisrKyBiL1BDYnVpbGQvcGNidWlsZC5zbG4KQEAgLTczLDYgKzczLDcgQEAKIAlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQogCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQogCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSA9IHs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KQEAgLTExMSw2ICsxMTIsNyBAQAogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfaGFzaGxpYiIsICJfaGFzaGxpYi52Y3Byb2oiLCAiezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0iDQogCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCiAJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9ID0ge0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0NCiAJCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCiAJRW5kUHJvamVjdFNlY3Rpb24NCiBFbmRQcm9qZWN0DQpAQCAtMTI0LDggKzEyNiwxNyBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3NsIiwgInNzbC52Y3Byb2oiLCAie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQorCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCisJCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9ID0ge0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0NCisJRW5kUHJvamVjdFNlY3Rpb24NCitFbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJraWxsX3B5dGhvbiIsICJraWxsX3B5dGhvbi52Y3Byb2oiLCAiezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uM2RsbCIsICJweXRob24zZGxsLnZjcHJvaiIsICJ7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJ4eGxpbWl0ZWQiLCAieHhsaW1pdGVkLnZjcHJvaiIsICJ7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtNTE0LDYgKzUyNSwyMiBAQAogCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTUzMCw2ICs1NTcsMzcgQEAKIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7ODg1RDQ4OTgtRDA4RC00MDkxLTlDNDAtQzcwMENGRTNGQzVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs4ODVENDg5OC1EMDhELTQwOTEtOUM0MC1DNzAwQ0ZFM0ZDNUF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJe0Y3NDlCODIyLUI0ODktNENBNS1BM0FELUNFMDc4RjVGMzM4QX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXtGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7Rjc0OUI4MjItQjQ4OS00Q0E1LUEzQUQtQ0UwNzhGNUYzMzhBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJRW5kR2xvYmFsU2VjdGlvbg0KIAlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KIAkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXByb2plY3QudnNwcm9wcyBiL1BDYnVpbGQvcHlwcm9qZWN0LnZzcHJvcHMKaW5kZXggZWNkN2ZiNS4uM2Y2OWE0MiAxMDA2NDQKLS0tIGEvUENidWlsZC9weXByb2plY3QudnNwcm9wcworKysgYi9QQ2J1aWxkL3B5cHJvamVjdC52c3Byb3BzCkBAIC0zOCw3ICszOCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0iUHlEbGxOYW1lIg0KLQkJVmFsdWU9InB5dGhvbjMxIg0KKwkJVmFsdWU9InB5dGhvbjMyIg0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeXRob25FeGUiDQpAQCAtNTAsNyArNTAsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjUuOSINCisJCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy40Ig0KIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJiejJEaXIiDQpAQCAtNTgsNyArNTgsNyBAQAogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMC45LjhsIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4wYSINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0idGNsdGtEaXIiDQpkaWZmIC0tZ2l0IGEvUENidWlsZC9weXRob24zZGxsLnZjcHJvaiBiL1BDYnVpbGQvcHl0aG9uM2RsbC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjNjc1MgotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvcHl0aG9uM2RsbC52Y3Byb2oKQEAgLTAsMCArMSwyNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KKzxWaXN1YWxTdHVkaW9Qcm9qZWN0DQorCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KKwlWZXJzaW9uPSI5LDAwIg0KKwlOYW1lPSJweXRob24zZGxsIg0KKwlQcm9qZWN0R1VJRD0iezg4NUQ0ODk4LUQwOEQtNDA5MS05QzQwLUM3MDBDRkUzRkM1QX0iDQorCVJvb3ROYW1lc3BhY2U9InB5dGhvbjNkbGwiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCisJCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbiINCisJCQkJT3V0cHV0PSIkKE91dERpcilccHl0aG9uMy5kbGwiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbiINCisJCQkJT3V0cHV0PSIkKE91dERpcilccHl0aG9uMy5kbGwiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIg0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgY2xlYW4iDQorCQkJCU91dHB1dD0iJChPdXREaXIpXHB5dGhvbjMuZGxsIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikgcmVidWlsZCINCisJCQkJQ2xlYW5Db21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIGNsZWFuIg0KKwkJCQlPdXRwdXQ9IiQoT3V0RGlyKVxweXRob24zLmRsbCINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkSW5jbHVkZXM9IiINCisJCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KKwkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg4NiBPdXREaXI9JChPdXREaXIpIg0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14ODYgT3V0RGlyPSQoT3V0RGlyKSByZWJ1aWxkIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDg2IE91dERpcj0kKE91dERpcikgY2xlYW4iDQorCQkJCU91dHB1dD0iJChPdXREaXIpXHB5dGhvbjMuZGxsIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAkKElucHV0RGlyKVwuLlxQQyYjeDBEOyYjeDBBO25tYWtlIC9mIHB5dGhvbjMubWFrIE1BQ0hJTkU9eDY0IE91dERpcj0kKE91dERpcikiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iY2QgJChJbnB1dERpcilcLi5cUEMmI3gwRDsmI3gwQTtubWFrZSAvZiBweXRob24zLm1hayBNQUNISU5FPXg2NCBPdXREaXI9JChPdXREaXIpIHJlYnVpbGQiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9ImNkICQoSW5wdXREaXIpXC4uXFBDJiN4MEQ7JiN4MEE7bm1ha2UgL2YgcHl0aG9uMy5tYWsgTUFDSElORT14NjQgT3V0RGlyPSQoT3V0RGlyKSBjbGVhbiINCisJCQkJT3V0cHV0PSIkKE91dERpcilccHl0aG9uMy5kbGwiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJRmlsdGVyPSJjcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQQ1xweXRob24zLmRlZiINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBDXHB5dGhvbjNkbGwuYyINCisJCQkJPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KKwkJCQkJPg0KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9IkhlYWRlciBGaWxlcyINCisJCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmw7aW5jO3hzZCINCisJCQlVbmlxdWVJZGVudGlmaWVyPSJ7OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfSINCisJCQk+DQorCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCisJCQlGaWx0ZXI9InJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXYiDQorCQkJVW5pcXVlSWRlbnRpZmllcj0iezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX0iDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cUENccHl0aG9uX250LnJjIg0KKwkJCQk+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQkJCT4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCisJCQkJCT4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCisJCQkJCT4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCisJCQkJCT4NCisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQorCQkJCQk+DQorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCTwvRmlsZXM+DQorCTxHbG9iYWxzPg0KKwk8L0dsb2JhbHM+DQorPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2ogYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmNwcm9qCmluZGV4IDExY2QzMTEuLmI4MTg3NjEgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3Byb2oKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjcHJvagpAQCAtNTksMTEgKzU5LDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UiDQorCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICZxdW90OyQoSW50RGlyKVwmcXVvdDsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQogCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQpAQCAtMTM0LDExICsxMzQsMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJnF1b3Q7JChJbnREaXIpXCZxdW90OyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiZxdW90OyQoSW50RGlyKWdldGJ1aWxkaW5mby5vJnF1b3Q7Ig0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC0yMTIsMTEgKzIxMiwxMSBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KIAkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBEZWJ1ZyINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnICZxdW90OyQoSW50RGlyKVwmcXVvdDsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKV9kLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpX2QucGRiIg0KQEAgLTI5MCwxMSArMjkwLDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IERlYnVnIg0KKwkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJnF1b3Q7JChJbnREaXIpXCZxdW90OyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiZxdW90OyQoSW50RGlyKWdldGJ1aWxkaW5mby5vJnF1b3Q7Ig0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpX2QuZGxsIg0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KIAkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSlfZC5wZGIiDQpAQCAtMzY0LDExICszNjQsMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJnF1b3Q7JChJbnREaXIpXCZxdW90OyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiZxdW90OyQoSW50RGlyKWdldGJ1aWxkaW5mby5vJnF1b3Q7Ig0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC00MzksMTEgKzQzOSwxMSBAQAogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KIAkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlIg0KKwkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAmcXVvdDskKEludERpcilcJnF1b3Q7Ig0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJnZXRidWlsZGluZm8ubyINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJnF1b3Q7JChJbnREaXIpZ2V0YnVpbGRpbmZvLm8mcXVvdDsiDQogCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KIAkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KIAkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KQEAgLTUxNCwxMSArNTE0LDExIEBACiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQogCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UiDQorCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICZxdW90OyQoSW50RGlyKVwmcXVvdDsiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSImcXVvdDskKEludERpcilnZXRidWlsZGluZm8ubyZxdW90OyINCiAJCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQogCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQogCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQpAQCAtNTg5LDExICs1ODksMTEgQEAKIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCiAJCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSINCisJCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJnF1b3Q7JChJbnREaXIpXCZxdW90OyINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiZxdW90OyQoSW50RGlyKWdldGJ1aWxkaW5mby5vJnF1b3Q7Ig0KIAkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCiAJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCiAJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCkBAIC02NzUsMTAgKzY3NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcY29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxjb2RlLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNzA3LDYgKzcwMywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGR5bmFtaWNfYW5ub3RhdGlvbnMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZW51bW9iamVjdC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTcyMyw2ICs3MjMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxmaWxldXRpbHMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcZmxvYXRvYmplY3QuaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC03NTUsMTAgKzc1OSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVcaW50b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTg4Myw2ICs4ODMsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cSW5jbHVkZVxweXRpbWUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXEluY2x1ZGVccHltZW0uaCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMDE5LDYgKzEwMjMsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfbWF0aC5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfbWF0aC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfcGlja2xlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTAzNSw2ICsxMDQ3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX3RpbWUuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX3RpbWUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC0xMDU5LDcgKzEwNzksNyBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxNb2R1bGVzXGRhdGV0aW1lbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1xfZGF0ZXRpbWVtb2R1bGUuYyINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KQEAgLTEyMTYsNiArMTIzNiw3MCBAQAogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQogCQkJCQk+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQorCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQorCQkJCQkJPg0KKwkJCQkJCTxUb29sDQorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQorCQkJCQkJLz4NCisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCisJCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCisJCQkJCQk+DQorCQkJCQkJPFRvb2wNCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCisJCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCisJCQkJCQkvPg0KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KKwkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KKwkJCQkJCT4NCisJCQkJCQk8VG9vbA0KKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KKwkJCQkJCS8+DQorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQpAQCAtMTM5MSwxMCArMTQ3NSw2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcY29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cT2JqZWN0c1xjb2Rlb2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTQ5OSw2ICsxNTc5LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTE2NTksNiArMTc0MywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTY2Nyw2ICsxNzU1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxmaWxldXRpbHMuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTE3NTUsNiArMTg0NywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25ccHl0aW1lLmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxQeXRob25ccHlzdGF0ZS5jIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCBmNGRhOTQ1Li5kYmUwMzFmIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC0zNyw3ICszNyw3IEBACiAgICBydW5uaW5nIGEgUHl0aG9uIGNvcmUgYnVpbGRib3QgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQogCiBXaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMxX2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLiBCb3RoCit0aGVpciBuYW1lOiAgcHl0aG9uMzJfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKIHRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCiAKIFRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwpAQCAtMTA0LDcgKzEwNCw3IEBACiAKIFB5dGhvbi1jb250cm9sbGVkIHN1YnByb2plY3RzIHRoYXQgd3JhcCBleHRlcm5hbCBwcm9qZWN0czoKIF9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNS45LCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3Byb2ogKHNlZSBiZWxvdykuCisgICAgV3JhcHMgU1FMaXRlIDMuNy40LCB3aGljaCBpcyBjdXJyZW50bHkgYnVpbHQgYnkgc3FsaXRlMy52Y3Byb2ogKHNlZSBiZWxvdykuCiBfdGtpbnRlcgogICAgIFdyYXBzIHRoZSBUayB3aW5kb3dpbmcgc3lzdGVtLiAgVW5saWtlIF9zcWxpdGUzLCB0aGVyZSdzIG5vCiAgICAgY29ycmVzcG9uZGluZyB0Y2x0ay52Y3Byb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjcHJvaidzCkBAIC0xMzksNyArMTM5LDcgQEAKIAogICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAogCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0wLjkuOGwKKyAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4wYQogCiAgICAgKiogTk9URTogaWYgeW91IHVzZSB0aGUgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwoLWFtZDY0KS5iYXQgYXBwcm9hY2ggZm9yCiAgICAgb2J0YWluaW5nIGV4dGVybmFsIHNvdXJjZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIHNvdXJjZQpkaWZmIC0tZ2l0IGEvUENidWlsZC9ydC5iYXQgYi9QQ2J1aWxkL3J0LmJhdAppbmRleCAxY2UwMTA3Li43MTI5ZTIwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL3J0LmJhdAorKysgYi9QQ2J1aWxkL3J0LmJhdApAQCAtMzAsNyArMzAsNyBAQAogc2V0IHN1ZmZpeD0KIHNldCBxbW9kZT0KIHNldCBkYXNoTz0KLXNldCB0Y2x0az0KK3NldCB0Y2x0az10Y2x0awogCiA6Q2hlY2tPcHRzCiBpZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKQEAgLTM4LDkgKzM4LDkgQEAKIGlmICIlMSI9PSItZCIgKHNldCBzdWZmaXg9X2QpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwogaWYgIiUxIj09Ii14NjQiIChzZXQgcHJlZml4PWFtZDY0KSAmIChzZXQgdGNsdGs9dGNsdGs2NCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCiAKLVBBVEggJVBBVEglOy4uXC4uXCV0Y2x0ayVcYmluCitQQVRIICVQQVRIJTslfmRwMC4uXC4uXCV0Y2x0ayVcYmluCiBzZXQgZXhlPSVwcmVmaXglXHB5dGhvbiVzdWZmaXglCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLUUgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK3NldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtV2QgLUUgLWJiIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5CiBpZiBkZWZpbmVkIHFtb2RlIGdvdG8gUW1vZGUKIAogZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3NzbC52Y3Byb2ogYi9QQ2J1aWxkL3NzbC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyYmUzMAotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQvc3NsLnZjcHJvagpAQCAtMCwwICsxLDE4OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjksMDAiDQorCU5hbWU9InNzbCINCisJUHJvamVjdEdVSUQ9IntFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9Ig0KKwlSb290TmFtZXNwYWNlPSJzc2wiDQorCUtleXdvcmQ9Ik1ha2VGaWxlUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iRGVidWd8V2luMzIiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJEZWJ1Z3x4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCisJCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KKwkJCQlPdXRwdXQ9IiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkSW5jbHVkZXM9IiINCisJCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KKwkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KKwkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQorCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KKwkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQorCQkJCU91dHB1dD0iIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KKwkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KKwkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQorCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCisJCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KKwkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCisJCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KKwkJCQlPdXRwdXQ9IiINCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCisJCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCisJCQkJRm9yY2VkSW5jbHVkZXM9IiINCisJCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KKwkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KKwkJCUNoYXJhY3RlclNldD0iMCINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQorCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCisJCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQorCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCisJCQkJT3V0cHV0PSIiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQorCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQorCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQorCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KKwkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCisJCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJPC9GaWxlcz4NCisJPEdsb2JhbHM+DQorCTwvR2xvYmFscz4NCis8L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUENidWlsZC92czl0bzgucHkgYi9QQ2J1aWxkL3ZzOXRvOC5weQppbmRleCBiYWIzYjZlLi4zYjg4YTE2IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3ZzOXRvOC5weQorKysgYi9QQ2J1aWxkL3ZzOXRvOC5weQpAQCAtMjQsNyArMjQsNyBAQAogCiAgICAgICAgICAgICAjIEJhaC4gVlM4LjAgZG9lcyBub3QgZXhwYW5kIG1hY3JvcyBpbiBmaWxlIG5hbWVzLgogICAgICAgICAgICAgIyBSZXBsYWNlIHRoZW0gaGVyZS4KLSAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgnJChzcWxpdGUzRGlyKScsICcuLlxcLi5cXC4uXFxzcWxpdGUtMy41LjknKQorICAgICAgICAgICAgbGluZXMgPSBsaW5lcy5yZXBsYWNlKCckKHNxbGl0ZTNEaXIpJywgJy4uXFwuLlxcLi5cXHNxbGl0ZS0zLjYuMjEnKQogCiAgICAgICAgIHdpdGggb3BlbihkZXN0bmFtZSwgJ3diJykgYXMgZm91dDoKICAgICAgICAgICAgIGxpbmVzID0gbGluZXMucmVwbGFjZSgiXG4iLCAiXHJcbiIpLmVuY29kZSgpCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3Byb2ogYi9QQ2J1aWxkL3h4bGltaXRlZC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM5MjNlOAotLS0gL2Rldi9udWxsCisrKyBiL1BDYnVpbGQveHhsaW1pdGVkLnZjcHJvagpAQCAtMCwwICsxLDQxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQorPFZpc3VhbFN0dWRpb1Byb2plY3QNCisJUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQorCVZlcnNpb249IjksMDAiDQorCU5hbWU9Inh4bGltaXRlZCINCisJUHJvamVjdEdVSUQ9IntGNzQ5QjgyMi1CNDg5LTRDQTUtQTNBRC1DRTA3OEY1RjMzOEF9Ig0KKwlSb290TmFtZXNwYWNlPSJ4eGxpbWl0ZWQiDQorCUtleXdvcmQ9IldpbjMyUHJvaiINCisJVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KKwk+DQorCTxQbGF0Zm9ybXM+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJXaW4zMiINCisJCS8+DQorCQk8UGxhdGZvcm0NCisJCQlOYW1lPSJ4NjQiDQorCQkvPg0KKwk8L1BsYXRmb3Jtcz4NCisJPFRvb2xGaWxlcz4NCisJPC9Ub29sRmlsZXM+DQorCTxDb25maWd1cmF0aW9ucz4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7X1dJTjMyO19XSU5ETEw7UHlfTElNSVRFRF9BUEk7JChOT0lOSEVSSVQpIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiINCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQorCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQorCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiINCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQorCQkJLz4NCisJCTwvQ29uZmlndXJhdGlvbj4NCisJCTxDb25maWd1cmF0aW9uDQorCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQorCQkJQ2hhcmFjdGVyU2V0PSIwIg0KKwkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCisJCQk+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTUlETFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfTElNSVRFRF9BUEkiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indzb2NrMzIubGliIg0KKwkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KKwkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCisJCQkvPg0KKwkJPC9Db25maWd1cmF0aW9uPg0KKwkJPENvbmZpZ3VyYXRpb24NCisJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiINCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KKwkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9MSU1JVEVEX0FQSSINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3NvY2szMi5saWIiDQorCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQorCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCQk8Q29uZmlndXJhdGlvbg0KKwkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCisJCQlDaGFyYWN0ZXJTZXQ9IjAiDQorCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KKwkJCT4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNSURMVG9vbCINCisJCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3c29jazMyLmxpYiINCisJCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCisJCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQorCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KKwkJCS8+DQorCQkJPFRvb2wNCisJCQkJTmFtZT0iVkNGeENvcFRvb2wiDQorCQkJLz4NCisJCQk8VG9vbA0KKwkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCisJCQkvPg0KKwkJCTxUb29sDQorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KKwkJCS8+DQorCQk8L0NvbmZpZ3VyYXRpb24+DQorCTwvQ29uZmlndXJhdGlvbnM+DQorCTxSZWZlcmVuY2VzPg0KKwk8L1JlZmVyZW5jZXM+DQorCTxGaWxlcz4NCisJCTxGaWx0ZXINCisJCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQorCQkJPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cTW9kdWxlc1x4eGxpbWl0ZWQuYyINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwk8L0ZpbGVzPg0KKwk8R2xvYmFscz4NCisJPC9HbG9iYWxzPg0KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QYXJzZXIvUHl0aG9uLmFzZGwgYi9QYXJzZXIvUHl0aG9uLmFzZGwKaW5kZXggNzg5ZTA3Yi4uOTQwN2IyZiAxMDA2NDQKLS0tIGEvUGFyc2VyL1B5dGhvbi5hc2RsCisrKyBiL1BhcnNlci9QeXRob24uYXNkbApAQCAtMTcsNyArMTcsNyBAQAogCQkJIGV4cHI/IHN0YXJhcmdzLAogCQkJIGV4cHI/IGt3YXJncywKIAkJCSBzdG10KiBib2R5LAotCQkJIGV4cHIgKmRlY29yYXRvcl9saXN0KQorCQkJIGV4cHIqIGRlY29yYXRvcl9saXN0KQogCSAgICAgIHwgUmV0dXJuKGV4cHI/IHZhbHVlKQogCiAJICAgICAgfCBEZWxldGUoZXhwciogdGFyZ2V0cykKQEAgLTM2LDcgKzM2LDcgQEAKIAkgICAgICB8IEFzc2VydChleHByIHRlc3QsIGV4cHI/IG1zZykKIAogCSAgICAgIHwgSW1wb3J0KGFsaWFzKiBuYW1lcykKLQkgICAgICB8IEltcG9ydEZyb20oaWRlbnRpZmllciBtb2R1bGUsIGFsaWFzKiBuYW1lcywgaW50PyBsZXZlbCkKKwkgICAgICB8IEltcG9ydEZyb20oaWRlbnRpZmllcj8gbW9kdWxlLCBhbGlhcyogbmFtZXMsIGludD8gbGV2ZWwpCiAKIAkgICAgICB8IEdsb2JhbChpZGVudGlmaWVyKiBuYW1lcykKIAkgICAgICB8IE5vbmxvY2FsKGlkZW50aWZpZXIqIG5hbWVzKQpkaWZmIC0tZ2l0IGEvUGFyc2VyL2FzZGxfYy5weSBiL1BhcnNlci9hc2RsX2MucHkKaW5kZXggNmRmMTFmNS4uZDY1NTVkNiAxMDA3NTUKLS0tIGEvUGFyc2VyL2FzZGxfYy5weQorKysgYi9QYXJzZXIvYXNkbF9jLnB5CkBAIC0zNzYsNiArMzc2LDcgQEAKICAgICAgICAgc2VsZi5lbWl0KGZvcm1hdCAlIGVycm9yLCAxLCByZWZsb3c9RmFsc2UpCiAgICAgICAgIGlmIGFkZF9sYWJlbDoKICAgICAgICAgICAgIHNlbGYuZW1pdCgiZmFpbGVkOiIsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoIlB5X1hERUNSRUYodG1wKTsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoInJldHVybiAxOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgifSIsIDApCiAgICAgICAgIHNlbGYuZW1pdCgiIiwgMCkKQEAgLTcyMCw3ICs3MjEsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZm5hbWVzLCBpLCBmaWVsZCk7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKSZQeVR5cGVfVHlwZSwgIlUoTyl7c09zc30iLAorICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKSZQeVR5cGVfVHlwZSwgInMoTyl7c09zc30iLAogICAgICAgICAgICAgICAgICAgICB0eXBlLCBiYXNlLCAiX2ZpZWxkcyIsIGZuYW1lcywgIl9fbW9kdWxlX18iLCAiX2FzdCIpOwogICAgIFB5X0RFQ1JFRihmbmFtZXMpOwogICAgIHJldHVybiAoUHlUeXBlT2JqZWN0KilyZXN1bHQ7CkBAIC03MzAsOCArNzMxLDkgQEAKIHsKICAgICBpbnQgaSwgcmVzdWx0OwogICAgIFB5T2JqZWN0ICpzLCAqbCA9IFB5VHVwbGVfTmV3KG51bV9maWVsZHMpOwotICAgIGlmICghbCkgcmV0dXJuIDA7Ci0gICAgZm9yKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhdHRyc1tpXSk7CiAgICAgICAgIGlmICghcykgewogICAgICAgICAgICAgUHlfREVDUkVGKGwpOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL2dyYW1tYXIubWFrIGIvUGFyc2VyL2dyYW1tYXIubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWYwMjhmLi4wMDAwMDAwCi0tLSBhL1BhcnNlci9ncmFtbWFyLm1haworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLSMgVGhpcyBtYW5hZ2VzIHRvIHJlYnVpbGQgZ3JhbWluaXQue2gsIGN9IHVuZGVyIE1TVkMgNiAoV2luZG93cyksIHZpYQotIwotIyAgICAgbm1ha2UgL2YgZ3JhbW1hci5tYWsKLSMKLSMgWW91IG1heSBhbHNvIG5lZWQgdG8gY29weSBweXRob24yMy5kbGwgaW50byB0aGlzIGRpcmVjdG9yeSwgb3IgZ2V0Ci0jIGl0IG9uIHlvdXIgc2VhcmNoIHBhdGguCi0jCi0jIFRoZSBpbnRlcm1lZGlhdGUgZmlsZXMgY2FuIGJlIG51a2VkIGFmdGVyd2FyZHM6Ci0jCi0jICAgICBubWFrZSAvZiBncmFtbWFyLm1hayBjbGVhbgotIwotIyBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIG1hemUgb2YgcHJlcHJvY2Vzc29yICNkZWZpbmUncyBvbiBXaW5kb3dzLCBhbmQKLSMgYXMgYSByZXN1bHQgdGhpcyByZXF1aXJlcyBsaW5raW5nIHdpdGggcHl0aG9uMjMubGliLCBzbyBpdCdzIG9mIG5vIHVzZQotIyBmb3IgYm9vdHN0cmFwcGluZyAodGhlIGNhdXNlIGFwcGVhcnMgdG8gYmUgYSB1c2VsZXNzLS0gaW4gdGhpcwotIyBwYXJ0aWN1bGFyIGNhc2UgLS1wcmFnbWEgaW4gUENccHljb25maWcuaCwgd2hpY2ggZGVtYW5kcyB0aGF0Ci0jIHB5dGhvbjIzLmxpYiBnZXQgbGlua2VkIGluKS4KLQotTElCUz0gLi5cUENidWlsZFxweXRob24yNS5saWIKLQotQ0ZMQUdTPSAvSSAuLlxJbmNsdWRlIC9JIC4uXFBDIC9EIE1TX05PX0NPUkVETEwgL0QgUEdFTiAvTUQKLQotR1JBTU1BUl9IPSAuLlxJbmNsdWRlXGdyYW1pbml0LmgKLUdSQU1NQVJfQz0gLi5cUHl0aG9uXGdyYW1pbml0LmMKLUdSQU1NQVJfSU5QVVQ9IC4uXEdyYW1tYXJcR3JhbW1hcgotCi1QR0VOPSBwZ2VuLmV4ZQotCi1QT0JKUz0gYWNjZWxlci5vYmogZ3JhbW1hcjEub2JqIGxpc3Rub2RlLm9iaiBub2RlLm9iaiBwYXJzZXIub2JqIFwKLSAgICAgICBwYXJzZXRvay5vYmogdG9rZW5pemVyLm9iaiBiaXRzZXQub2JqIG1ldGFncmFtbWFyLm9iagotCi1QQVJTRVJfT0JKUz0gJChQT0JKUykgbXlyZWFkbGluZS5vYmoKLQotUEdPQkpTPSBmaXJzdHNldHMub2JqIGdyYW1tYXIub2JqIHBnZW4ub2JqIHByaW50Z3JhbW1hci5vYmogcGdlbm1haW4ub2JqCi0KLVBHRU5PQkpTPSAkKFBPQkpTKSAkKFBHT0JKUykKLQotJChHUkFNTUFSX0gpICQoR1JBTU1BUl9DKTogJChQR0VOKSAkKEdSQU1NQVJfSU5QVVQpCi0JCSQoUEdFTikgJChHUkFNTUFSX0lOUFVUKSAkKEdSQU1NQVJfSCkgJChHUkFNTUFSX0MpCi0KLSQoUEdFTik6CSQoUEdFTk9CSlMpCi0JCSQoQ0MpICQoUEdFTk9CSlMpICQoTElCUykgL0ZlJChQR0VOKQotCi1jbGVhbjoKLSAgICAgICAgZGVsICoub2JqCi0gICAgICAgIGRlbCAkKFBHRU4pCmRpZmYgLS1naXQgYS9QYXJzZXIvbXlyZWFkbGluZS5jIGIvUGFyc2VyL215cmVhZGxpbmUuYwppbmRleCA3MTY2ZmMxLi41MDgwMmMzIDEwMDY0NAotLS0gYS9QYXJzZXIvbXlyZWFkbGluZS5jCisrKyBiL1BhcnNlci9teXJlYWRsaW5lLmMKQEAgLTg3LDcgKzg3LDcgQEAKICNlbmRpZgogICAgICAgICAgICAgaWYgKHMgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIC8qIHRyeSBhZ2FpbiAqLworCSAgICAvKiB0cnkgYWdhaW4gKi8KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1BhcnNlci9wYXJzZXRvay5jIGIvUGFyc2VyL3BhcnNldG9rLmMKaW5kZXggMTZjZjVjYi4uNzYzNmE1NCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNldG9rLmMKKysrIGIvUGFyc2VyL3BhcnNldG9rLmMKQEAgLTQ2LDEzICs0NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKKyAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CiAKICAgICBpbml0ZXJyKGVycl9yZXQsIGZpbGVuYW1lKTsKIAogICAgIGlmICgqZmxhZ3MgJiBQeVBBUlNFX0lHTk9SRV9DT09LSUUpCi0gICAgICAgIHRvayA9IFB5VG9rZW5pemVyX0Zyb21VVEY4KHMpOworICAgICAgICB0b2sgPSBQeVRva2VuaXplcl9Gcm9tVVRGOChzLCBleGVjX2lucHV0KTsKICAgICBlbHNlCi0gICAgICAgIHRvayA9IFB5VG9rZW5pemVyX0Zyb21TdHJpbmcocyk7CisgICAgICAgIHRvayA9IFB5VG9rZW5pemVyX0Zyb21TdHJpbmcocywgZXhlY19pbnB1dCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKSB7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gUHlFcnJfT2NjdXJyZWQoKSA/IEVfREVDT0RFIDogRV9OT01FTTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNDAsMTYgKzI0MSwyNCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0b2stPmVuY29kaW5nICE9IE5VTEwpIHsKKyAgICAgICAgLyogJ25vZGVzLT5uX3N0cicgdXNlcyBQeU9iamVjdF8qLCB3aGlsZSAndG9rLT5lbmNvZGluZycgd2FzCisgICAgICAgICAqIGFsbG9jYXRlZCB1c2luZyBQeU1lbV8KKyAgICAgICAgICovCiAgICAgICAgIG5vZGUqIHIgPSBQeU5vZGVfTmV3KGVuY29kaW5nX2RlY2wpOwotICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgaWYgKHIpCisgICAgICAgICAgICByLT5uX3N0ciA9IFB5T2JqZWN0X01BTExPQyhzdHJsZW4odG9rLT5lbmNvZGluZykrMSk7CisgICAgICAgIGlmICghciB8fCAhci0+bl9zdHIpIHsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKKyAgICAgICAgICAgIGlmIChyKQorICAgICAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUocik7CiAgICAgICAgICAgICBuID0gTlVMTDsKICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQotICAgICAgICByLT5uX3N0ciA9IHRvay0+ZW5jb2Rpbmc7CisgICAgICAgIHN0cmNweShyLT5uX3N0ciwgdG9rLT5lbmNvZGluZyk7CisgICAgICAgIFB5TWVtX0ZSRUUodG9rLT5lbmNvZGluZyk7CisgICAgICAgIHRvay0+ZW5jb2RpbmcgPSBOVUxMOwogICAgICAgICByLT5uX25jaGlsZHJlbiA9IDE7CiAgICAgICAgIHItPm5fY2hpbGQgPSBuOwotICAgICAgICB0b2stPmVuY29kaW5nID0gTlVMTDsKICAgICAgICAgbiA9IHI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDg4ZmE3ZjEuLjRiN2I1NWEgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC0xMyw2ICsxMyw4IEBACiAgICAtIGNoZWNrIGZvciBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgb2YgbmFtZXMgKGluc3RlYWQgb2YgZmF0YWwgZXJyKQogKi8KIAorI2RlZmluZSBQR0VOCisKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJwZ2VuaGVhZGVycy5oIgogI2luY2x1ZGUgImdyYW1tYXIuaCIKZGlmZiAtLWdpdCBhL1BhcnNlci9wcmludGdyYW1tYXIuYyBiL1BhcnNlci9wcmludGdyYW1tYXIuYwppbmRleCAwMWY1NTJmLi5kZDdlNmFlIDEwMDY0NAotLS0gYS9QYXJzZXIvcHJpbnRncmFtbWFyLmMKKysrIGIvUGFyc2VyL3ByaW50Z3JhbW1hci5jCkBAIC0xLDYgKzEsOCBAQAogCiAvKiBQcmludCBhIGJ1bmNoIG9mIEMgaW5pdGlhbGl6ZXJzIHRoYXQgcmVwcmVzZW50IGEgZ3JhbW1hciAqLwogCisjZGVmaW5lIFBHRU4KKwogI2luY2x1ZGUgInBnZW5oZWFkZXJzLmgiCiAjaW5jbHVkZSAiZ3JhbW1hci5oIgogCmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmMgYi9QYXJzZXIvdG9rZW5pemVyLmMKaW5kZXggZDk4NTEzMS4uNWJhMTJhNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5jCisrKyBiL1BhcnNlci90b2tlbml6ZXIuYwpAQCAtMTE5LDYgKzExOSw3IEBACiAgICAgdG9rLT5idWYgPSB0b2stPmN1ciA9IHRvay0+ZW5kID0gdG9rLT5pbnAgPSB0b2stPnN0YXJ0ID0gTlVMTDsKICAgICB0b2stPmRvbmUgPSBFX09LOwogICAgIHRvay0+ZnAgPSBOVUxMOworICAgIHRvay0+aW5wdXQgPSBOVUxMOwogICAgIHRvay0+dGFic2l6ZSA9IFRBQlNJWkU7CiAgICAgdG9rLT5pbmRlbnQgPSAwOwogICAgIHRvay0+aW5kc3RhY2tbMF0gPSAwOwpAQCAtMTQ1LDYgKzE0NiwxNyBAQAogICAgIHJldHVybiB0b2s7CiB9CiAKK3N0YXRpYyBjaGFyICoKK25ld19zdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgY2hhciogcmVzdWx0ID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobGVuICsgMSk7CisgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgIG1lbWNweShyZXN1bHQsIHMsIGxlbik7CisgICAgICAgIHJlc3VsdFtsZW5dID0gJ1wwJzsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lmZGVmIFBHRU4KIAogc3RhdGljIGNoYXIgKgpAQCAtMTU5LDEwICsxNzEsMTAgQEAKICAgICByZXR1cm4gZmVvZih0b2stPmZwKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgKgotZGVjb2RlX3N0cihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK3N0YXRpYyBjaGFyICoKK2RlY29kZV9zdHIoY29uc3QgY2hhciAqc3RyLCBpbnQgZXhlY19pbnB1dCwgc3RydWN0IHRva19zdGF0ZSAqdG9rKQogewotICAgIHJldHVybiBzdHI7CisgICAgcmV0dXJuIG5ld19zdHJpbmcoc3RyLCBzdHJsZW4oc3RyKSk7CiB9CiAKICNlbHNlIC8qIFBHRU4gKi8KQEAgLTE3NywxNiArMTg5LDYgQEAKICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogYXMgaWYgaXQgd2VyZSBFT0YgKi8KIH0KIAotc3RhdGljIGNoYXIgKgotbmV3X3N0cmluZyhjb25zdCBjaGFyICpzLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBjaGFyKiByZXN1bHQgPSAoY2hhciAqKVB5TWVtX01BTExPQyhsZW4gKyAxKTsKLSAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgbWVtY3B5KHJlc3VsdCwgcywgbGVuKTsKLSAgICAgICAgcmVzdWx0W2xlbl0gPSAnXDAnOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBzdGF0aWMgY2hhciAqCiBnZXRfbm9ybWFsX25hbWUoY2hhciAqcykgICAgICAgIC8qIGZvciB1dGYtOCBhbmQgbGF0aW4tMSAqLwpAQCAtMjQzLDcgKzI0NSw3IEBACiAgICAgICAgICAgICB9IHdoaWxlICh0WzBdID09ICdceDIwJyB8fCB0WzBdID09ICdcdCcpOwogCiAgICAgICAgICAgICBiZWdpbiA9IHQ7Ci0gICAgICAgICAgICB3aGlsZSAoaXNhbG51bShQeV9DSEFSTUFTSyh0WzBdKSkgfHwKKyAgICAgICAgICAgIHdoaWxlIChQeV9JU0FMTlVNKHRbMF0pIHx8CiAgICAgICAgICAgICAgICAgICAgdFswXSA9PSAnLScgfHwgdFswXSA9PSAnXycgfHwgdFswXSA9PSAnLicpCiAgICAgICAgICAgICAgICAgdCsrOwogCkBAIC00NjAsMTcgKzQ2MiwyMCBAQAogZnBfc2V0cmVhZGwoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBjb25zdCBjaGFyKiBlbmMpCiB7CiAgICAgUHlPYmplY3QgKnJlYWRsaW5lID0gTlVMTCwgKnN0cmVhbSA9IE5VTEwsICppbyA9IE5VTEw7CisgICAgaW50IGZkOwogCiAgICAgaW8gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrKCJpbyIpOwogICAgIGlmIChpbyA9PSBOVUxMKQogICAgICAgICBnb3RvIGNsZWFudXA7CiAKLSAgICBpZiAodG9rLT5maWxlbmFtZSkKLSAgICAgICAgc3RyZWFtID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbywgIm9wZW4iLCAic3NpcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rLT5maWxlbmFtZSwgInIiLCAtMSwgZW5jKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmVhbSA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW8sICJvcGVuIiwgImlzaXNPT08iLAotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5vKHRvay0+ZnApLCAiciIsIC0xLCBlbmMsIFB5X05vbmUsIFB5X05vbmUsIFB5X0ZhbHNlKTsKKyAgICBmZCA9IGZpbGVubyh0b2stPmZwKTsKKyAgICBpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsIE5VTEwpOworICAgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgICAgc3RyZWFtID0gUHlPYmplY3RfQ2FsbE1ldGhvZChpbywgIm9wZW4iLCAiaXNpc09PTyIsCisgICAgICAgICAgICAgICAgICAgIGZkLCAiciIsIC0xLCBlbmMsIFB5X05vbmUsIFB5X05vbmUsIFB5X0ZhbHNlKTsKICAgICBpZiAoc3RyZWFtID09IE5VTEwpCiAgICAgICAgIGdvdG8gY2xlYW51cDsKIApAQCAtNTQwLDYgKzU0NSw3IEBACiB7CiAgICAgY2hhciAqbGluZSA9IE5VTEw7CiAgICAgaW50IGJhZGNoYXIgPSAwOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICh0b2stPmRlY29kaW5nX3N0YXRlID09IFNUQVRFX05PUk1BTCkgewogICAgICAgICAgICAgLyogV2UgYWxyZWFkeSBoYXZlIGEgY29kZWMgYXNzb2NpYXRlZCB3aXRoCkBAIC01NzgsMTYgKzU4NCwyMSBAQAogICAgICAgICAgICAgfQogICAgIH0KICAgICBpZiAoYmFkY2hhcikgewotICAgICAgICBjaGFyIGJ1Zls1MDBdOwogICAgICAgICAvKiBOZWVkIHRvIGFkZCAxIHRvIHRoZSBsaW5lIG51bWJlciwgc2luY2UgdGhpcyBsaW5lCiAgICAgICAgICAgIGhhcyBub3QgYmVlbiBjb3VudGVkLCB5ZXQuICAqLwotICAgICAgICBzcHJpbnRmKGJ1ZiwKLSAgICAgICAgICAgICJOb24tVVRGLTggY29kZSBzdGFydGluZyB3aXRoICdcXHglLjJ4JyAiCi0gICAgICAgICAgICAiaW4gZmlsZSAlLjIwMHMgb24gbGluZSAlaSwgIgotICAgICAgICAgICAgImJ1dCBubyBlbmNvZGluZyBkZWNsYXJlZDsgIgotICAgICAgICAgICAgInNlZSBodHRwOi8vcHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDI2My8gZm9yIGRldGFpbHMiLAotICAgICAgICAgICAgYmFkY2hhciwgdG9rLT5maWxlbmFtZSwgdG9rLT5saW5lbm8gKyAxKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLCBidWYpOworICAgICAgICBpZiAodG9rLT5maWxlbmFtZSAhPSBOVUxMKQorICAgICAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHRvay0+ZmlsZW5hbWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZmlsZT4iKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIk5vbi1VVEYtOCBjb2RlIHN0YXJ0aW5nIHdpdGggJ1xceCUuMngnICIKKyAgICAgICAgICAgICAgICAgICAgImluIGZpbGUgJVUgb24gbGluZSAlaSwgIgorICAgICAgICAgICAgICAgICAgICAiYnV0IG5vIGVuY29kaW5nIGRlY2xhcmVkOyAiCisgICAgICAgICAgICAgICAgICAgICJzZWUgaHR0cDovL3B5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLTAyNjMvIGZvciBkZXRhaWxzIiwKKyAgICAgICAgICAgICAgICAgICAgYmFkY2hhciwgZmlsZW5hbWUsIHRvay0+bGluZW5vICsgMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBlcnJvcl9yZXQodG9rKTsKICAgICB9CiAjZW5kaWYKQEAgLTY1MiwxNyArNjYzLDYyIEBACiAgICAgcmV0dXJuIHV0Zjg7CiB9CiAKKworc3RhdGljIGNoYXIgKgordHJhbnNsYXRlX25ld2xpbmVzKGNvbnN0IGNoYXIgKnMsIGludCBleGVjX2lucHV0LCBzdHJ1Y3QgdG9rX3N0YXRlICp0b2spIHsKKyAgICBpbnQgc2tpcF9uZXh0X2xmID0gMCwgbmVlZGVkX2xlbmd0aCA9IHN0cmxlbihzKSArIDIsIGZpbmFsX2xlbmd0aDsKKyAgICBjaGFyICpidWYsICpjdXJyZW50OworICAgIGNoYXIgYyA9ICdcMCc7CisgICAgYnVmID0gUHlNZW1fTUFMTE9DKG5lZWRlZF9sZW5ndGgpOworICAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgICB0b2stPmRvbmUgPSBFX05PTUVNOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZm9yIChjdXJyZW50ID0gYnVmOyAqczsgcysrLCBjdXJyZW50KyspIHsKKyAgICAgICAgYyA9ICpzOworICAgICAgICBpZiAoc2tpcF9uZXh0X2xmKSB7CisgICAgICAgICAgICBza2lwX25leHRfbGYgPSAwOworICAgICAgICAgICAgaWYgKGMgPT0gJ1xuJykgeworICAgICAgICAgICAgICAgIGMgPSAqKytzOworICAgICAgICAgICAgICAgIGlmICghYykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGMgPT0gJ1xyJykgeworICAgICAgICAgICAgc2tpcF9uZXh0X2xmID0gMTsKKyAgICAgICAgICAgIGMgPSAnXG4nOworICAgICAgICB9CisgICAgICAgICpjdXJyZW50ID0gYzsKKyAgICB9CisgICAgLyogSWYgdGhpcyBpcyBleGVjIGlucHV0LCBhZGQgYSBuZXdsaW5lIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBpZgorICAgICAgIHRoZXJlIGlzbid0IG9uZSBhbHJlYWR5LiAqLworICAgIGlmIChleGVjX2lucHV0ICYmIGMgIT0gJ1xuJykgeworICAgICAgICAqY3VycmVudCA9ICdcbic7CisgICAgICAgIGN1cnJlbnQrKzsKKyAgICB9CisgICAgKmN1cnJlbnQgPSAnXDAnOworICAgIGZpbmFsX2xlbmd0aCA9IGN1cnJlbnQgLSBidWYgKyAxOworICAgIGlmIChmaW5hbF9sZW5ndGggPCBuZWVkZWRfbGVuZ3RoICYmIGZpbmFsX2xlbmd0aCkKKyAgICAgICAgLyogc2hvdWxkIG5ldmVyIGZhaWwgKi8KKyAgICAgICAgYnVmID0gUHlNZW1fUkVBTExPQyhidWYsIGZpbmFsX2xlbmd0aCk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwogLyogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgU1RSIGZvciB1c2UgYXMgdGhlIGJ1ZmZlciBvZiBUT0suCiAgICBMb29rIGZvciBlbmNvZGluZyBkZWNsYXJhdGlvbnMgaW5zaWRlIFNUUiwgYW5kIHJlY29yZCB0aGVtCiAgICBpbnNpZGUgVE9LLiAgKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKgotZGVjb2RlX3N0cihjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKK2RlY29kZV9zdHIoY29uc3QgY2hhciAqaW5wdXQsIGludCBzaW5nbGUsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBQeU9iamVjdCogdXRmOCA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqc3RyOwogICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgY29uc3QgY2hhciAqbmV3bFsyXSA9IHtOVUxMLCBOVUxMfTsKICAgICBpbnQgbGluZW5vID0gMDsKKyAgICB0b2stPmlucHV0ID0gc3RyID0gdHJhbnNsYXRlX25ld2xpbmVzKGlucHV0LCBzaW5nbGUsIHRvayk7CisgICAgaWYgKHN0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB0b2stPmVuYyA9IE5VTEw7CiAgICAgdG9rLT5zdHIgPSBzdHI7CiAgICAgaWYgKCFjaGVja19ib20oYnVmX2dldGMsIGJ1Zl91bmdldGMsIGJ1Zl9zZXRyZWFkbCwgdG9rKSkKQEAgLTcxMywxMiArNzY5LDEyIEBACiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBzdHJpbmcgKi8KIAogc3RydWN0IHRva19zdGF0ZSAqCi1QeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKK1B5VG9rZW5pemVyX0Zyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgZXhlY19pbnB1dCkKIHsKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCB0b2spOworICAgIHN0ciA9IChjaGFyICopZGVjb2RlX3N0cihzdHIsIGV4ZWNfaW5wdXQsIHRvayk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CiAgICAgICAgIFB5VG9rZW5pemVyX0ZyZWUodG9rKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MzAsMTEgKzc4NiwxOCBAQAogfQogCiBzdHJ1Y3QgdG9rX3N0YXRlICoKLVB5VG9rZW5pemVyX0Zyb21VVEY4KGNvbnN0IGNoYXIgKnN0cikKK1B5VG9rZW5pemVyX0Zyb21VVEY4KGNvbnN0IGNoYXIgKnN0ciwgaW50IGV4ZWNfaW5wdXQpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisjaWZuZGVmIFBHRU4KKyAgICB0b2stPmlucHV0ID0gc3RyID0gdHJhbnNsYXRlX25ld2xpbmVzKHN0ciwgZXhlY19pbnB1dCwgdG9rKTsKKyNlbmRpZgorICAgIGlmIChzdHIgPT0gTlVMTCkgeworICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICB0b2stPmRlY29kaW5nX3N0YXRlID0gU1RBVEVfUkFXOwogICAgIHRvay0+cmVhZF9jb2Rpbmdfc3BlYyA9IDE7CiAgICAgdG9rLT5lbmMgPSBOVUxMOwpAQCAtNzUxLDcgKzgxNCw2IEBACiAgICAgcmV0dXJuIHRvazsKIH0KIAotCiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBmaWxlICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgpAQCAtNzk3LDYgKzg1OSw4IEBACiAjZW5kaWYKICAgICBpZiAodG9rLT5mcCAhPSBOVUxMICYmIHRvay0+YnVmICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUodG9rLT5idWYpOworICAgIGlmICh0b2stPmlucHV0KQorICAgICAgICBQeU1lbV9GUkVFKChjaGFyICopdG9rLT5pbnB1dCk7CiAgICAgUHlNZW1fRlJFRSh0b2spOwogfQogCkBAIC04MzIsNiArODk2LDEzIEBACiAgICAgICAgIGlmICh0b2stPnByb21wdCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjaGFyICpuZXd0b2sgPSBQeU9TX1JlYWRsaW5lKHN0ZGluLCBzdGRvdXQsIHRvay0+cHJvbXB0KTsKICNpZm5kZWYgUEdFTgorICAgICAgICAgICAgaWYgKG5ld3RvayAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY2hhciAqdHJhbnNsYXRlZCA9IHRyYW5zbGF0ZV9uZXdsaW5lcyhuZXd0b2ssIDAsIHRvayk7CisgICAgICAgICAgICAgICAgUHlNZW1fRlJFRShuZXd0b2spOworICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CisgICAgICAgICAgICAgICAgbmV3dG9rID0gdHJhbnNsYXRlZDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICh0b2stPmVuY29kaW5nICYmIG5ld3RvayAmJiAqbmV3dG9rKSB7CiAgICAgICAgICAgICAgICAgLyogUmVjb2RlIHRvIFVURi04ICovCiAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBidWZsZW47CkBAIC0xNDA3LDEwICsxNDc4LDggQEAKICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKICAgICAgICAgICAgIGlmIChjID09ICcuJykKICAgICAgICAgICAgICAgICBnb3RvIGZyYWN0aW9uOwotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICAgICAgICAgIGlmIChjID09ICdqJyB8fCBjID09ICdKJykKICAgICAgICAgICAgICAgICBnb3RvIGltYWdpbmFyeTsKLSNlbmRpZgogICAgICAgICAgICAgaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKSB7CiAKICAgICAgICAgICAgICAgICAvKiBIZXggKi8KQEAgLTE0NjIsMTAgKzE1MzEsOCBAQAogICAgICAgICAgICAgICAgICAgICBnb3RvIGZyYWN0aW9uOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGV4cG9uZW50OwotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjID09ICdqJyB8fCBjID09ICdKJykKICAgICAgICAgICAgICAgICAgICAgZ290byBpbWFnaW5hcnk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBlbHNlIGlmIChub256ZXJvKSB7CiAgICAgICAgICAgICAgICAgICAgIHRvay0+ZG9uZSA9IEVfVE9LRU47CiAgICAgICAgICAgICAgICAgICAgIHRva19iYWNrdXAodG9rLCBjKTsKQEAgLTE1MDIsMTIgKzE1NjksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSB0b2tfbmV4dGModG9rKTsKICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoaXNkaWdpdChjKSk7CiAgICAgICAgICAgICAgICAgfQotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnaicgfHwgYyA9PSAnSicpCiAgICAgICAgICAgICAgICAgICAgIC8qIEltYWdpbmFyeSBwYXJ0ICovCiAgICAgICAgIGltYWdpbmFyeToKICAgICAgICAgICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwotI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgdG9rX2JhY2t1cCh0b2ssIGMpOwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3Rva2VuaXplci5oIGIvUGFyc2VyL3Rva2VuaXplci5oCmluZGV4IDZjMTc0MmYuLjJiZTNiZjIgMTAwNjQ0Ci0tLSBhL1BhcnNlci90b2tlbml6ZXIuaAorKysgYi9QYXJzZXIvdG9rZW5pemVyLmgKQEAgLTUzLDE1ICs1MywxNiBAQAogICAgIGludCBjb250X2xpbmU7ICAgICAgICAgIC8qIHdoZXRoZXIgd2UgYXJlIGluIGEgY29udGludWF0aW9uIGxpbmUuICovCiAgICAgY29uc3QgY2hhciogbGluZV9zdGFydDsgICAgIC8qIHBvaW50ZXIgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lICovCiAjaWZuZGVmIFBHRU4KLSAgICBQeU9iamVjdCAqZGVjb2RpbmdfcmVhZGxpbmU7IC8qIGNvZGVjcy5vcGVuKC4uLikucmVhZGxpbmUgKi8KKyAgICBQeU9iamVjdCAqZGVjb2RpbmdfcmVhZGxpbmU7IC8qIG9wZW4oLi4uKS5yZWFkbGluZSAqLwogICAgIFB5T2JqZWN0ICpkZWNvZGluZ19idWZmZXI7CiAjZW5kaWYKICAgICBjb25zdCBjaGFyKiBlbmM7ICAgICAgICAvKiBFbmNvZGluZyBmb3IgdGhlIGN1cnJlbnQgc3RyLiAqLwogICAgIGNvbnN0IGNoYXIqIHN0cjsKKyAgICBjb25zdCBjaGFyKiBpbnB1dDsgLyogVG9rZW5pemVyJ3MgbmV3bGluZSB0cmFuc2xhdGVkIGNvcHkgb2YgdGhlIHN0cmluZy4gKi8KIH07CiAKLWV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbVVURjgoY29uc3QgY2hhciAqKTsKK2V4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tVVRGOChjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjaGFyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKik7CiBleHRlcm4gdm9pZCBQeVRva2VuaXplcl9GcmVlKHN0cnVjdCB0b2tfc3RhdGUgKik7CmRpZmYgLS1naXQgYS9QeXRob24vUHl0aG9uLWFzdC5jIGIvUHl0aG9uL1B5dGhvbi1hc3QuYwppbmRleCBlZmM2OWRjLi4yYzA5Zjk2IDEwMDY0NAotLS0gYS9QeXRob24vUHl0aG9uLWFzdC5jCisrKyBiL1B5dGhvbi9QeXRob24tYXN0LmMKQEAgLTIsNyArMiw3IEBACiAKIAogLyoKLSAgIF9fdmVyc2lvbl9fIDY3NjE2LgorICAgX192ZXJzaW9uX18gODIxNjMuCiAKICAgIFRoaXMgbW9kdWxlIG11c3QgYmUgY29tbWl0dGVkIHNlcGFyYXRlbHkgYWZ0ZXIgZWFjaCBBU1QgZ3JhbW1hciBjaGFuZ2U7CiAgICBUaGUgX192ZXJzaW9uX18gbnVtYmVyIGlzIHNldCB0byB0aGUgcmV2aXNpb24gbnVtYmVyIG9mIHRoZSBjb21taXQKQEAgLTUyNyw3ICs1MjcsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZm5hbWVzLCBpLCBmaWVsZCk7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKSZQeVR5cGVfVHlwZSwgIlUoTyl7c09zc30iLAorICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbigoUHlPYmplY3QqKSZQeVR5cGVfVHlwZSwgInMoTyl7c09zc30iLAogICAgICAgICAgICAgICAgICAgICB0eXBlLCBiYXNlLCAiX2ZpZWxkcyIsIGZuYW1lcywgIl9fbW9kdWxlX18iLCAiX2FzdCIpOwogICAgIFB5X0RFQ1JFRihmbmFtZXMpOwogICAgIHJldHVybiAoUHlUeXBlT2JqZWN0KilyZXN1bHQ7CkBAIC01MzcsOCArNTM3LDkgQEAKIHsKICAgICBpbnQgaSwgcmVzdWx0OwogICAgIFB5T2JqZWN0ICpzLCAqbCA9IFB5VHVwbGVfTmV3KG51bV9maWVsZHMpOwotICAgIGlmICghbCkgcmV0dXJuIDA7Ci0gICAgZm9yKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CisgICAgaWYgKCFsKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2ZpZWxkczsgaSsrKSB7CiAgICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhdHRyc1tpXSk7CiAgICAgICAgIGlmICghcykgewogICAgICAgICAgICAgUHlfREVDUkVGKGwpOwpAQCAtMTMzMiwxMSArMTMzMyw2IEBACiAgICAgICAgICAgIGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKQogewogICAgICAgICBzdG10X3R5IHA7Ci0gICAgICAgIGlmICghbW9kdWxlKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCBtb2R1bGUgaXMgcmVxdWlyZWQgZm9yIEltcG9ydEZyb20iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgICAgICBwID0gKHN0bXRfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOwogICAgICAgICBpZiAoIXApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNTIwLDYgKzM1MTYsNyBAQAogCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzb21lIHNvcnQgb2YgbW9kLCBidXQgZ290ICVSIiwgb2JqKTsKICAgICAgICAgZmFpbGVkOgorICAgICAgICBQeV9YREVDUkVGKHRtcCk7CiAgICAgICAgIHJldHVybiAxOwogfQogCkBAIC00NTQ0LDggKzQ1NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gTlVMTDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwibW9kdWxlXCIgbWlzc2luZyBmcm9tIEltcG9ydEZyb20iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gTlVMTDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcob2JqLCAibmFtZXMiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlczsKQEAgLTQ3MTYsNiArNDcxMiw3IEBACiAKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHNvbWUgc29ydCBvZiBzdG10LCBidXQgZ290ICVSIiwgb2JqKTsKICAgICAgICAgZmFpbGVkOgorICAgICAgICBQeV9YREVDUkVGKHRtcCk7CiAgICAgICAgIHJldHVybiAxOwogfQogCkBAIC01ODMxLDYgKzU4MjgsNyBAQAogCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzb21lIHNvcnQgb2YgZXhwciwgYnV0IGdvdCAlUiIsIG9iaik7CiAgICAgICAgIGZhaWxlZDoKKyAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgICAgICByZXR1cm4gMTsKIH0KIApAQCAtNjAxMSw2ICs2MDA5LDcgQEAKIAogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiZXhwZWN0ZWQgc29tZSBzb3J0IG9mIHNsaWNlLCBidXQgZ290ICVSIiwgb2JqKTsKICAgICAgICAgZmFpbGVkOgorICAgICAgICBQeV9YREVDUkVGKHRtcCk7CiAgICAgICAgIHJldHVybiAxOwogfQogCkBAIC02NDQzLDYgKzY0NDIsNyBAQAogCiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJleHBlY3RlZCBzb21lIHNvcnQgb2YgZXhjZXB0aGFuZGxlciwgYnV0IGdvdCAlUiIsIG9iaik7CiAgICAgICAgIGZhaWxlZDoKKyAgICAgICAgUHlfWERFQ1JFRih0bXApOwogICAgICAgICByZXR1cm4gMTsKIH0KIApAQCAtNjczOSw3ICs2NzM5LDcgQEAKICAgICAgICAgICAgIE5VTEw7CiAgICAgICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJfX3ZlcnNpb25fXyIsICI2NzYxNiIpIDwgMCkKKyAgICAgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJfX3ZlcnNpb25fXyIsICI4MjE2MyIpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJtb2QiLCAoUHlPYmplY3QqKW1vZF90eXBlKSA8IDApIHJldHVybgogICAgICAgICAgICAgTlVMTDsKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCA1NDNlMGJiLi5hNzk3ODg3IDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAogICAgIG5hbWUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNhdGVnb3J5LCAiX19uYW1lX18iKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKSAgLyogWFhYIENhbiBhbiBvYmplY3QgbGFjayBhICdfX25hbWVfXycgYXR0cmlidXRlPyAqLwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm47CiAKICAgICBmX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CiAgICAgaWYgKGZfc3RkZXJyID09IE5VTEwpIHsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZ2xvYmFscyA9IGYtPmZfZ2xvYmFsczsKLSAgICAgICAgKmxpbmVubyA9IFB5Q29kZV9BZGRyMkxpbmUoZi0+Zl9jb2RlLCBmLT5mX2xhc3RpKTsKKyAgICAgICAgKmxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihmKTsKICAgICB9CiAKICAgICAqbW9kdWxlID0gTlVMTDsKQEAgLTQ5OCwyMyArNDk4LDIxIEBACiAgICAgKmZpbGVuYW1lID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fZmlsZV9fIik7CiAgICAgaWYgKCpmaWxlbmFtZSAhPSBOVUxMKSB7CiAgICAgICAgIFB5X3NzaXplX3QgbGVuID0gUHlVbmljb2RlX0dldFNpemUoKmZpbGVuYW1lKTsKLSAgICAgICAgY29uc3QgY2hhciAqZmlsZV9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKCpmaWxlbmFtZSk7Ci0gICAgICAgICAgICBpZiAoZmlsZV9zdHIgPT0gTlVMTCB8fCAobGVuIDwgMCAmJiBQeUVycl9PY2N1cnJlZCgpKSkKLSAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOworICAgICAgICBQeV9VTklDT0RFICp1bmljb2RlID0gUHlVbmljb2RlX0FTX1VOSUNPREUoKmZpbGVuYW1lKTsKIAogICAgICAgICAvKiBpZiBmaWxlbmFtZS5sb3dlcigpLmVuZHN3aXRoKCgiLnB5YyIsICIucHlvIikpOiAqLwogICAgICAgICBpZiAobGVuID49IDQgJiYKLSAgICAgICAgICAgIGZpbGVfc3RyW2xlbi00XSA9PSAnLicgJiYKLSAgICAgICAgICAgIHRvbG93ZXIoZmlsZV9zdHJbbGVuLTNdKSA9PSAncCcgJiYKLSAgICAgICAgICAgIHRvbG93ZXIoZmlsZV9zdHJbbGVuLTJdKSA9PSAneScgJiYKLSAgICAgICAgICAgICh0b2xvd2VyKGZpbGVfc3RyW2xlbi0xXSkgPT0gJ2MnIHx8Ci0gICAgICAgICAgICAgICAgdG9sb3dlcihmaWxlX3N0cltsZW4tMV0pID09ICdvJykpCisgICAgICAgICAgICB1bmljb2RlW2xlbi00XSA9PSAnLicgJiYKKyAgICAgICAgICAgIFB5X1VOSUNPREVfVE9MT1dFUih1bmljb2RlW2xlbi0zXSkgPT0gJ3AnICYmCisgICAgICAgICAgICBQeV9VTklDT0RFX1RPTE9XRVIodW5pY29kZVtsZW4tMl0pID09ICd5JyAmJgorICAgICAgICAgICAgKFB5X1VOSUNPREVfVE9MT1dFUih1bmljb2RlW2xlbi0xXSkgPT0gJ2MnIHx8CisgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9UT0xPV0VSKHVuaWNvZGVbbGVuLTFdKSA9PSAnbycpKQogICAgICAgICB7Ci0gICAgICAgICAgICAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoZmlsZV9zdHIsIGxlbi0xKTsKLSAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tVW5pY29kZSh1bmljb2RlLCBsZW4tMSk7CisgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBoYW5kbGVfZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfSU5DUkVGKCpmaWxlbmFtZSk7CiAgICAgfQogICAgIGVsc2UgewpAQCAtNzEyLDE5ICs3MTAsMTcgQEAKIAogCiAvKiBGdW5jdGlvbiB0byBpc3N1ZSBhIHdhcm5pbmcgbWVzc2FnZTsgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbi4gKi8KLWludAotUHlFcnJfV2FybkV4KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqdGV4dCwgUHlfc3NpemVfdCBzdGFja19sZXZlbCkKKworc3RhdGljIGludAord2Fybl91bmljb2RlKFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKm1lc3NhZ2UsCisgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFja19sZXZlbCkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICptZXNzYWdlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodGV4dCk7Ci0gICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgaWYgKGNhdGVnb3J5ID09IE5VTEwpCiAgICAgICAgIGNhdGVnb3J5ID0gUHlFeGNfUnVudGltZVdhcm5pbmc7CiAKICAgICByZXMgPSBkb193YXJuKG1lc3NhZ2UsIGNhdGVnb3J5LCBzdGFja19sZXZlbCk7Ci0gICAgUHlfREVDUkVGKG1lc3NhZ2UpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtNzMyLDYgKzcyOCw0MiBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK1B5RXJyX1dhcm5Gb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LCBQeV9zc2l6ZV90IHN0YWNrX2xldmVsLAorICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBpbnQgcmV0OworICAgIFB5T2JqZWN0ICptZXNzYWdlOworICAgIHZhX2xpc3QgdmFyZ3M7CisKKyNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCisgICAgdmFfc3RhcnQodmFyZ3MsIGZvcm1hdCk7CisjZWxzZQorICAgIHZhX3N0YXJ0KHZhcmdzKTsKKyNlbmRpZgorICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CisgICAgaWYgKG1lc3NhZ2UgIT0gTlVMTCkgeworICAgICAgICByZXQgPSB3YXJuX3VuaWNvZGUoY2F0ZWdvcnksIG1lc3NhZ2UsIHN0YWNrX2xldmVsKTsKKyAgICAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHJldCA9IC0xOworICAgIHZhX2VuZCh2YXJncyk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50CitQeUVycl9XYXJuRXgoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICp0ZXh0LCBQeV9zc2l6ZV90IHN0YWNrX2xldmVsKQoreworICAgIGludCByZXQ7CisgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0ZXh0KTsKKyAgICBpZiAobWVzc2FnZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0ID0gd2Fybl91bmljb2RlKGNhdGVnb3J5LCBtZXNzYWdlLCBzdGFja19sZXZlbCk7CisgICAgUHlfREVDUkVGKG1lc3NhZ2UpOworICAgIHJldHVybiByZXQ7Cit9CisKIC8qIFB5RXJyX1dhcm4gaXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgIFVzZSBQeUVycl9XYXJuRXggaW5zdGVhZC4gKi8KIApAQCAtNzUxLDcgKzc4Myw3IEBACiB7CiAgICAgUHlPYmplY3QgKnJlczsKICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHRleHQpOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZpbGVuYW1lX3N0cik7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOwogICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOwogICAgIGludCByZXQgPSAtMTsKIApAQCAtODAzLDYgKzgzNSw3IEBACiAgICAgc3RhdGljIFB5T2JqZWN0ICppZ25vcmVfc3RyID0gTlVMTDsKICAgICBzdGF0aWMgUHlPYmplY3QgKmVycm9yX3N0ciA9IE5VTEw7CiAgICAgc3RhdGljIFB5T2JqZWN0ICpkZWZhdWx0X3N0ciA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICphbHdheXNfc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqYWN0aW9uX29iaiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmxpbmVubywgKnJlc3VsdDsKIApAQCAtODMwLDYgKzg2MywxNCBAQAogICAgICAgICB9CiAgICAgICAgIGFjdGlvbl9vYmogPSBkZWZhdWx0X3N0cjsKICAgICB9CisgICAgZWxzZSBpZiAoIXN0cmNtcChhY3Rpb24sICJhbHdheXMiKSkgeworICAgICAgICBpZiAoYWx3YXlzX3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBhbHdheXNfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImFsd2F5cyIpOworICAgICAgICAgICAgaWYgKGFsd2F5c19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBhY3Rpb25fb2JqID0gYWx3YXlzX3N0cjsKKyAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInVua25vd24gYWN0aW9uIik7CiAgICAgfQpAQCAtODQ2LDI4ICs4ODcsNDIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbml0X2ZpbHRlcnModm9pZCkKIHsKLSAgICBQeU9iamVjdCAqZmlsdGVycyA9IFB5TGlzdF9OZXcoMyk7Ci0gICAgY29uc3QgY2hhciAqYnl0ZXNfYWN0aW9uOworICAgIC8qIERvbid0IHNpbGVuY2UgRGVwcmVjYXRpb25XYXJuaW5nIGlmIC0zIHdhcyB1c2VkLiAqLworICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlMaXN0X05ldyg1KTsKKyAgICB1bnNpZ25lZCBpbnQgcG9zID0gMDsgIC8qIFBvc3QtaW5jcmVtZW50ZWQgaW4gZWFjaCB1c2UuICovCisgICAgdW5zaWduZWQgaW50IHg7CisgICAgY29uc3QgY2hhciAqYnl0ZXNfYWN0aW9uLCAqcmVzb3VyY2VfYWN0aW9uOworCiAgICAgaWYgKGZpbHRlcnMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgMCwKKyAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZV9maWx0ZXIoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAiaWdub3JlIikpOworICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCBwb3MrKywKICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX2ZpbHRlcihQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCAiaWdub3JlIikpOwotICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCAxLCBjcmVhdGVfZmlsdGVyKFB5RXhjX0ltcG9ydFdhcm5pbmcsICJpZ25vcmUiKSk7CisgICAgUHlMaXN0X1NFVF9JVEVNKGZpbHRlcnMsIHBvcysrLAorICAgICAgICAgICAgICAgICAgICBjcmVhdGVfZmlsdGVyKFB5RXhjX0ltcG9ydFdhcm5pbmcsICJpZ25vcmUiKSk7CiAgICAgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcgPiAxKQogICAgICAgICBieXRlc19hY3Rpb24gPSAiZXJyb3IiOwogICAgIGVsc2UgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcpCiAgICAgICAgIGJ5dGVzX2FjdGlvbiA9ICJkZWZhdWx0IjsKICAgICBlbHNlCiAgICAgICAgIGJ5dGVzX2FjdGlvbiA9ICJpZ25vcmUiOwotICAgIFB5TGlzdF9TRVRfSVRFTShmaWx0ZXJzLCAyLCBjcmVhdGVfZmlsdGVyKFB5RXhjX0J5dGVzV2FybmluZywKKyAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssIGNyZWF0ZV9maWx0ZXIoUHlFeGNfQnl0ZXNXYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICBieXRlc19hY3Rpb24pKTsKLQotICAgIGlmIChQeUxpc3RfR0VUX0lURU0oZmlsdGVycywgMCkgPT0gTlVMTCB8fAotICAgICAgICBQeUxpc3RfR0VUX0lURU0oZmlsdGVycywgMSkgPT0gTlVMTCB8fAotICAgICAgICBQeUxpc3RfR0VUX0lURU0oZmlsdGVycywgMikgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoZmlsdGVycyk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIHJlc291cmNlIHVzYWdlIHdhcm5pbmdzIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gcHlkZWJ1ZyBtb2RlICovCisjaWZkZWYgUHlfREVCVUcKKyAgICByZXNvdXJjZV9hY3Rpb24gPSAiYWx3YXlzIjsKKyNlbHNlCisgICAgcmVzb3VyY2VfYWN0aW9uID0gImlnbm9yZSI7CisjZW5kaWYKKyAgICBQeUxpc3RfU0VUX0lURU0oZmlsdGVycywgcG9zKyssIGNyZWF0ZV9maWx0ZXIoUHlFeGNfUmVzb3VyY2VXYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZV9hY3Rpb24pKTsKKyAgICBmb3IgKHggPSAwOyB4IDwgcG9zOyB4ICs9IDEpIHsKKyAgICAgICAgaWYgKFB5TGlzdF9HRVRfSVRFTShmaWx0ZXJzLCB4KSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZmlsdGVycyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBmaWx0ZXJzOwpAQCAtOTA2LDEzICs5NjEsMTMgQEAKICAgICBpZiAoX29uY2VfcmVnaXN0cnkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfSU5DUkVGKF9vbmNlX3JlZ2lzdHJ5KTsKLSAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJvbmNlX3JlZ2lzdHJ5IiwgX29uY2VfcmVnaXN0cnkpIDwgMCkKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfb25jZXJlZ2lzdHJ5IiwgX29uY2VfcmVnaXN0cnkpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBfZGVmYXVsdF9hY3Rpb24gPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZGVmYXVsdCIpOwogICAgIGlmIChfZGVmYXVsdF9hY3Rpb24gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGVmYXVsdF9hY3Rpb24iLCBfZGVmYXVsdF9hY3Rpb24pIDwgMCkKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfZGVmYXVsdGFjdGlvbiIsIF9kZWZhdWx0X2FjdGlvbikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gbTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCBkOTdlOTUxLi4yZWUyMTg2IDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgIlB5dGhvbi1hc3QuaCIKICNpbmNsdWRlICJncmFtbWFyLmgiCiAjaW5jbHVkZSAibm9kZS5oIgotI2luY2x1ZGUgInB5YXJlbmEuaCIKICNpbmNsdWRlICJhc3QuaCIKICNpbmNsdWRlICJ0b2tlbi5oIgogI2luY2x1ZGUgInBhcnNldG9rLmgiCkBAIC05MCw3ICs4OSw3IEBACiBzdGF0aWMgaW50CiBhc3RfZXJyb3IoY29uc3Qgbm9kZSAqbiwgY29uc3QgY2hhciAqZXJyc3RyKQogewotICAgIFB5T2JqZWN0ICp1ID0gUHlfQnVpbGRWYWx1ZSgiemkiLCBlcnJzdHIsIExJTkVOTyhuKSk7CisgICAgUHlPYmplY3QgKnUgPSBQeV9CdWlsZFZhbHVlKCJ6aWkiLCBlcnJzdHIsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0KTsKICAgICBpZiAoIXUpCiAgICAgICAgIHJldHVybiAwOwogICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19TeW50YXhFcnJvciwgdSk7CkBAIC0xMDEsNyArMTAwLDcgQEAKIHN0YXRpYyB2b2lkCiBhc3RfZXJyb3JfZmluaXNoKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0YmFjaywgKmVycnN0ciwgKmxvYywgKnRtcDsKKyAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdGJhY2ssICplcnJzdHIsICpvZmZzZXQsICpsb2MsICp0bXA7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lX29iajsKICAgICBsb25nIGxpbmVubzsKIApAQCAtMTE5LDYgKzExOCwxMSBAQAogICAgICAgICBQeV9ERUNSRUYoZXJyc3RyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBvZmZzZXQgPSBQeVR1cGxlX0dldEl0ZW0odmFsdWUsIDIpOworICAgIGlmICghb2Zmc2V0KSB7CisgICAgICAgIFB5X0RFQ1JFRihlcnJzdHIpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAKICAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChmaWxlbmFtZSwgbGluZW5vKTsKQEAgLTEzMyw3ICsxMzcsNyBAQAogICAgICAgICBmaWxlbmFtZV9vYmogPSBQeV9Ob25lOwogICAgIH0KICAgICBpZiAoZmlsZW5hbWVfb2JqICE9IE5VTEwpCi0gICAgICAgIHRtcCA9IFB5X0J1aWxkVmFsdWUoIihObE9PKSIsIGZpbGVuYW1lX29iaiwgbGluZW5vLCBQeV9Ob25lLCBsb2MpOworICAgICAgICB0bXAgPSBQeV9CdWlsZFZhbHVlKCIoTmxPTykiLCBmaWxlbmFtZV9vYmosIGxpbmVubywgb2Zmc2V0LCBsb2MpOwogICAgIGVsc2UKICAgICAgICAgdG1wID0gTlVMTDsKICAgICBQeV9ERUNSRUYobG9jKTsKQEAgLTM2NywxOSArMzcxLDI0IEBACiAgICAgIk5vbmUiLAogICAgICJUcnVlIiwKICAgICAiRmFsc2UiLAotICAgICJfX2RlYnVnX18iLAogICAgIE5VTEwsCiB9OwogCiBzdGF0aWMgaW50Ci1mb3JiaWRkZW5fbmFtZShleHByX3R5IGUsIGNvbnN0IG5vZGUgKm4pCitmb3JiaWRkZW5fbmFtZShpZGVudGlmaWVyIG5hbWUsIGNvbnN0IG5vZGUgKm4sIGludCBmdWxsX2NoZWNrcykKIHsKLSAgICBjb25zdCBjaGFyICoqcDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGUtPnYuTmFtZS5pZCkpOwotICAgIGZvciAocCA9IEZPUkJJRERFTjsgKnA7IHArKykgewotICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoZS0+di5OYW1lLmlkLCAqcCkgPT0gMCkgewotICAgICAgICAgICAgYXN0X2Vycm9yKG4sICJhc3NpZ25tZW50IHRvIGtleXdvcmQiKTsKLSAgICAgICAgICAgIHJldHVybiAxOworICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpOworICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19kZWJ1Z19fIikgPT0gMCkgeworICAgICAgICBhc3RfZXJyb3IobiwgImFzc2lnbm1lbnQgdG8ga2V5d29yZCIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGZ1bGxfY2hlY2tzKSB7CisgICAgICAgIGNvbnN0IGNoYXIgKipwOworICAgICAgICBmb3IgKHAgPSBGT1JCSURERU47ICpwOyBwKyspIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAqcCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGFzdF9lcnJvcihuLCAiYXNzaWdubWVudCB0byBrZXl3b3JkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC00MTMsNiArNDIyLDggQEAKICAgICBzd2l0Y2ggKGUtPmtpbmQpIHsKICAgICAgICAgY2FzZSBBdHRyaWJ1dGVfa2luZDoKICAgICAgICAgICAgIGUtPnYuQXR0cmlidXRlLmN0eCA9IGN0eDsKKyAgICAgICAgICAgIGlmIChjdHggPT0gU3RvcmUgJiYgZm9yYmlkZGVuX25hbWUoZS0+di5BdHRyaWJ1dGUuYXR0ciwgbiwgMSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdWJzY3JpcHRfa2luZDoKICAgICAgICAgICAgIGUtPnYuU3Vic2NyaXB0LmN0eCA9IGN0eDsKQEAgLTQyNCw3ICs0MzUsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTmFtZV9raW5kOgogICAgICAgICAgICAgaWYgKGN0eCA9PSBTdG9yZSkgewotICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShlLCBuKSkKKyAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoZS0+di5OYW1lLmlkLCBuLCAxKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGZvcmJpZGRlbl9uYW1lKCkgY2FsbHMgYXN0X2Vycm9yKCkgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGUtPnYuTmFtZS5jdHggPSBjdHg7CkBAIC00MzQsMTAgKzQ0NSwxMyBAQAogICAgICAgICAgICAgcyA9IGUtPnYuTGlzdC5lbHRzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVHVwbGVfa2luZDoKLSAgICAgICAgICAgIGlmIChhc2RsX3NlcV9MRU4oZS0+di5UdXBsZS5lbHRzKSA9PSAwKQotICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZXJyb3IobiwgImNhbid0IGFzc2lnbiB0byAoKSIpOwotICAgICAgICAgICAgZS0+di5UdXBsZS5jdHggPSBjdHg7Ci0gICAgICAgICAgICBzID0gZS0+di5UdXBsZS5lbHRzOworICAgICAgICAgICAgaWYgKGFzZGxfc2VxX0xFTihlLT52LlR1cGxlLmVsdHMpKSAgeworICAgICAgICAgICAgICAgIGUtPnYuVHVwbGUuY3R4ID0gY3R4OworICAgICAgICAgICAgICAgIHMgPSBlLT52LlR1cGxlLmVsdHM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBleHByX25hbWUgPSAiKCkiOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTGFtYmRhX2tpbmQ6CiAgICAgICAgICAgICBleHByX25hbWUgPSAibGFtYmRhIjsKQEAgLTYwNCwyMCArNjE4LDIzIEBACiBzdGF0aWMgYXNkbF9zZXEgKgogc2VxX2Zvcl90ZXN0bGlzdChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuKQogewotICAgIC8qIHRlc3RsaXN0OiB0ZXN0ICgnLCcgdGVzdCkqIFsnLCddICovCisgICAgLyogdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KKyAgICAgICB0ZXN0bGlzdF9zdGFyX2V4cHI6IHRlc3R8c3Rhcl9leHByICgnLCcgdGVzdHxzdGFyX2V4cHIpKiBbJywnXQorICAgICovCiAgICAgYXNkbF9zZXEgKnNlcTsKICAgICBleHByX3R5IGV4cHJlc3Npb247CiAgICAgaW50IGk7Ci0gICAgYXNzZXJ0KFRZUEUobikgPT0gdGVzdGxpc3QgfHwgVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKTsKKyAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdCB8fCBUWVBFKG4pID09IHRlc3RsaXN0X3N0YXJfZXhwciB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2NvbXApOwogCiAgICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewotICAgICAgICBhc3NlcnQoVFlQRShDSElMRChuLCBpKSkgPT0gdGVzdCB8fCBUWVBFKENISUxEKG4sIGkpKSA9PSB0ZXN0X25vY29uZCk7CisgICAgICAgIGNvbnN0IG5vZGUgKmNoID0gQ0hJTEQobiwgaSk7CisgICAgICAgIGFzc2VydChUWVBFKGNoKSA9PSB0ZXN0IHx8IFRZUEUoY2gpID09IHRlc3Rfbm9jb25kIHx8IFRZUEUoY2gpID09IHN0YXJfZXhwcik7CiAKLSAgICAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBpKSk7CisgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgY2gpOwogICAgICAgICBpZiAoIWV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNjM5LDYgKzY1Niw4IEBACiAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKGNoKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChmb3JiaWRkZW5fbmFtZShuYW1lLCBjaCwgMCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKE5DSChuKSA9PSAzICYmIFRZUEUoQ0hJTEQobiwgMSkpID09IENPTE9OKSB7CiAgICAgICAgIGFubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQobiwgMikpOwpAQCAtNzA1LDYgKzcyNCw4IEBACiAgICAgICAgICAgICAgICAgYXJnbmFtZSA9IE5FV19JREVOVElGSUVSKGNoKTsKICAgICAgICAgICAgICAgICBpZiAoIWFyZ25hbWUpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGFyZ25hbWUsIGNoLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoYXJnbmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmcpCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC04NjMsNiArODg0LDggQEAKICAgICAgICAgICAgICAgICAgICAgdmFyYXJnID0gTkVXX0lERU5USUZJRVIoQ0hJTEQoY2gsIDApKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKHZhcmFyZywgQ0hJTEQoY2gsIDApLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIHZhcmFyZyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwpAQCAtODkyLDYgKzkxNSw4IEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgha3dhcmdhbm5vdGF0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShrd2FyZywgQ0hJTEQoY2gsIDApLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEwMDksNiArMTAzNCw4IEBACiAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIG5hbWVfaSkpOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGZvcmJpZGRlbl9uYW1lKG5hbWUsIENISUxEKG4sIG5hbWVfaSksIDApKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gYXN0X2Zvcl9hcmd1bWVudHMoYywgQ0hJTEQobiwgbmFtZV9pICsgMSkpOwogICAgIGlmICghYXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMTgzLDcgKzEyMTAsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBuX2ZvcnM7IGkrKykgewogICAgICAgICBjb21wcmVoZW5zaW9uX3R5IGNvbXA7CiAgICAgICAgIGFzZGxfc2VxICp0OwotICAgICAgICBleHByX3R5IGV4cHJlc3Npb247CisgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbiwgZmlyc3Q7CiAgICAgICAgIG5vZGUgKmZvcl9jaDsKIAogICAgICAgICBSRVEobiwgY29tcF9mb3IpOwpAQCAtMTE5OCwxNCArMTIyNSwxMyBAQAogCiAgICAgICAgIC8qIENoZWNrIHRoZSAjIG9mIGNoaWxkcmVuIHJhdGhlciB0aGFuIHRoZSBsZW5ndGggb2YgdCwgc2luY2UKICAgICAgICAgICAgKHggZm9yIHgsIGluIC4uLikgaGFzIDEgZWxlbWVudCBpbiB0LCBidXQgc3RpbGwgcmVxdWlyZXMgYSBUdXBsZS4gKi8KKyAgICAgICAgZmlyc3QgPSAoZXhwcl90eSlhc2RsX3NlcV9HRVQodCwgMCk7CiAgICAgICAgIGlmIChOQ0goZm9yX2NoKSA9PSAxKQotICAgICAgICAgICAgY29tcCA9IGNvbXByZWhlbnNpb24oKGV4cHJfdHkpYXNkbF9zZXFfR0VUKHQsIDApLCBleHByZXNzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBjb21wID0gY29tcHJlaGVuc2lvbihmaXJzdCwgZXhwcmVzc2lvbiwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbXAgPSBjb21wcmVoZW5zaW9uKFR1cGxlKHQsIFN0b3JlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmNfYXJlbmEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgTlVMTCwgYy0+Y19hcmVuYSk7Ci0KKyAgICAgICAgICAgIGNvbXAgPSBjb21wcmVoZW5zaW9uKFR1cGxlKHQsIFN0b3JlLCBmaXJzdC0+bGluZW5vLCBmaXJzdC0+Y29sX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uLCBOVUxMLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFjb21wKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEyODUsNyArMTMxMSw2IEBACiAgICAga2V5ID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDApKTsKICAgICBpZiAoIWtleSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KICAgICB2YWx1ZSA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAyKSk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTI0LDE0ICsxNTQ5LDcgQEAKIAogICAgIGNoID0gQ0hJTEQobiwgTkNIKG4pIC0gMSk7CiAgICAgaWYgKFRZUEUoY2gpID09IHNsaWNlb3ApIHsKLSAgICAgICAgaWYgKE5DSChjaCkgPT0gMSkgewotICAgICAgICAgICAgLyogTm8gZXhwcmVzc2lvbiwgc28gc3RlcCBpcyBOb25lICovCi0gICAgICAgICAgICBjaCA9IENISUxEKGNoLCAwKTsKLSAgICAgICAgICAgIHN0ZXAgPSBOYW1lKG5ld19pZGVudGlmaWVyKCJOb25lIiwgYy0+Y19hcmVuYSksIExvYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBMSU5FTk8oY2gpLCBjaC0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLSAgICAgICAgICAgIGlmICghc3RlcCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5DSChjaCkgIT0gMSkgewogICAgICAgICAgICAgY2ggPSBDSElMRChjaCwgMSk7CiAgICAgICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGVzdCkgewogICAgICAgICAgICAgICAgIHN0ZXAgPSBhc3RfZm9yX2V4cHIoYywgY2gpOwpAQCAtMTY3NSwzNCArMTY5Myw4IEBACiBzdGF0aWMgZXhwcl90eQogYXN0X2Zvcl9mYWN0b3Ioc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKLSAgICBub2RlICpwZmFjdG9yLCAqcHBvd2VyLCAqcGF0b20sICpwbnVtOwogICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKIAotICAgIC8qIElmIHRoZSB1bmFyeSAtIG9wZXJhdG9yIGlzIGFwcGxpZWQgdG8gYSBjb25zdGFudCwgZG9uJ3QgZ2VuZXJhdGUKLSAgICAgICBhIFVOQVJZX05FR0FUSVZFIG9wY29kZS4gIEp1c3Qgc3RvcmUgdGhlIGFwcHJvcmlhdGUgdmFsdWUgYXMgYQotICAgICAgIGNvbnN0YW50LiAgVGhlIHBlZXBob2xlIG9wdGltaXplciBhbHJlYWR5IGRvZXMgc29tZXRoaW5nIGxpa2UKLSAgICAgICB0aGlzIGJ1dCBpdCBkb2Vzbid0IGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29uc3RhbnQgaXMKLSAgICAgICAoc3lzLm1heGludCAtIDEpLiAgSW4gdGhhdCBjYXNlLCB3ZSB3YW50IGEgUHlJbnRPYmplY3QsIG5vdCBhCi0gICAgICAgUHlMb25nT2JqZWN0LgotICAgICovCi0gICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IE1JTlVTCi0gICAgICAgICYmIE5DSChuKSA9PSAyCi0gICAgICAgICYmIFRZUEUoKHBmYWN0b3IgPSBDSElMRChuLCAxKSkpID09IGZhY3RvcgotICAgICAgICAmJiBOQ0gocGZhY3RvcikgPT0gMQotICAgICAgICAmJiBUWVBFKChwcG93ZXIgPSBDSElMRChwZmFjdG9yLCAwKSkpID09IHBvd2VyCi0gICAgICAgICYmIE5DSChwcG93ZXIpID09IDEKLSAgICAgICAgJiYgVFlQRSgocGF0b20gPSBDSElMRChwcG93ZXIsIDApKSkgPT0gYXRvbQotICAgICAgICAmJiBUWVBFKChwbnVtID0gQ0hJTEQocGF0b20sIDApKSkgPT0gTlVNQkVSKSB7Ci0gICAgICAgIGNoYXIgKnMgPSBQeU9iamVjdF9NQUxMT0Moc3RybGVuKFNUUihwbnVtKSkgKyAyKTsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBzWzBdID0gJy0nOwotICAgICAgICBzdHJjcHkocyArIDEsIFNUUihwbnVtKSk7Ci0gICAgICAgIFB5T2JqZWN0X0ZSRUUoU1RSKHBudW0pKTsKLSAgICAgICAgU1RSKHBudW0pID0gczsKLSAgICAgICAgcmV0dXJuIGFzdF9mb3JfYXRvbShjLCBwYXRvbSk7Ci0gICAgfQotCiAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAxKSk7CiAgICAgaWYgKCFleHByZXNzaW9uKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4ODYsMTAgKzE4NzgsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBzdGFyX2V4cHI6Ci0gICAgICAgICAgICBpZiAoVFlQRShDSElMRChuLCAwKSkgPT0gU1RBUikgewotICAgICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX3N0YXJyZWQoYywgbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBGYWxsdGhyb3VnaCAqLworICAgICAgICAgICAgcmV0dXJuIGFzdF9mb3Jfc3RhcnJlZChjLCBuKTsKICAgICAgICAgLyogVGhlIG5leHQgZml2ZSBjYXNlcyBhbGwgaGFuZGxlIEJpbk9wcy4gIFRoZSBtYWluIGJvZHkgb2YgY29kZQogICAgICAgICAgICBpcyB0aGUgc2FtZSBpbiBlYWNoIGNhc2UsIGJ1dCB0aGUgc3dpdGNoIHR1cm5lZCBpbnNpZGUgb3V0IHRvCiAgICAgICAgICAgIHJldXNlIHRoZSBjb2RlIGZvciBlYWNoIHR5cGUgb2Ygb3BlcmF0b3IuCkBAIC0yMDI1LDcgKzIwMTQsNyBAQAogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+a2luZCAhPSBOYW1lX2tpbmQpIHsKICAgICAgICAgICAgICAgICAgIGFzdF9lcnJvcihDSElMRChjaCwgMCksICJrZXl3b3JkIGNhbid0IGJlIGFuIGV4cHJlc3Npb24iKTsKICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yYmlkZGVuX25hbWUoZSwgY2gpKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JiaWRkZW5fbmFtZShlLT52Lk5hbWUuaWQsIGNoLCAxKSkgewogICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGtleSA9IGUtPnYuTmFtZS5pZDsKQEAgLTIwNjcsNyArMjA1Niw2IEBACiB7CiAgICAgLyogdGVzdGxpc3RfY29tcDogdGVzdCAoY29tcF9mb3IgfCAoJywnIHRlc3QpKiBbJywnXSkgKi8KICAgICAvKiB0ZXN0bGlzdDogdGVzdCAoJywnIHRlc3QpKiBbJywnXSAqLwotICAgIC8qIHRlc3RsaXN0MTogdGVzdCAoJywnIHRlc3QpKiAqLwogICAgIGFzc2VydChOQ0gobikgPiAwKTsKICAgICBpZiAoVFlQRShuKSA9PSB0ZXN0bGlzdF9jb21wKSB7CiAgICAgICAgIGlmIChOQ0gobikgPiAxKQpAQCAtMjA3NSw3ICsyMDYzLDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChUWVBFKG4pID09IHRlc3RsaXN0IHx8Ci0gICAgICAgICAgICAgICBUWVBFKG4pID09IHRlc3RsaXN0MSk7CisgICAgICAgICAgICAgICBUWVBFKG4pID09IHRlc3RsaXN0X3N0YXJfZXhwcik7CiAgICAgfQogICAgIGlmIChOQ0gobikgPT0gMSkKICAgICAgICAgcmV0dXJuIGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCAwKSk7CkBAIC0yMDkxLDkgKzIwNzksOSBAQAogYXN0X2Zvcl9leHByX3N0bXQoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbikKIHsKICAgICBSRVEobiwgZXhwcl9zdG10KTsKLSAgICAvKiBleHByX3N0bXQ6IHRlc3RsaXN0IChhdWdhc3NpZ24gKHlpZWxkX2V4cHJ8dGVzdGxpc3QpCisgICAgLyogZXhwcl9zdG10OiB0ZXN0bGlzdF9zdGFyX2V4cHIgKGF1Z2Fzc2lnbiAoeWllbGRfZXhwcnx0ZXN0bGlzdCkKICAgICAgICAgICAgICAgICB8ICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3QpKSopCi0gICAgICAgdGVzdGxpc3Q6IHRlc3QgKCcsJyB0ZXN0KSogWycsJ10KKyAgICAgICB0ZXN0bGlzdF9zdGFyX2V4cHI6ICh0ZXN0fHN0YXJfZXhwcikgKCcsJyB0ZXN0fHN0YXJfZXhwcikqIFsnLCddCiAgICAgICAgYXVnYXNzaWduOiAnKz0nIHwgJy09JyB8ICcqPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JwogICAgICAgICAgICAgICAgIHwgJzw8PScgfCAnPj49JyB8ICcqKj0nIHwgJy8vPScKICAgICAgICB0ZXN0OiAuLi4gaGVyZSBzdGFydHMgdGhlIG9wZXJhdG9yIHByZWNlbmRlbmNlIGRhbmNlCkBAIC0yMTczLDcgKzIxNjEsNyBAQAogICAgICAgICAgICAgYXNkbF9zZXFfU0VUKHRhcmdldHMsIGkgLyAyLCBlKTsKICAgICAgICAgfQogICAgICAgICB2YWx1ZSA9IENISUxEKG4sIE5DSChuKSAtIDEpOwotICAgICAgICBpZiAoVFlQRSh2YWx1ZSkgPT0gdGVzdGxpc3QpCisgICAgICAgIGlmIChUWVBFKHZhbHVlKSA9PSB0ZXN0bGlzdF9zdGFyX2V4cHIpCiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl90ZXN0bGlzdChjLCB2YWx1ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgdmFsdWUpOwpAQCAtMjE4Myw2ICsyMTcxLDcgQEAKICAgICB9CiB9CiAKKwogc3RhdGljIGFzZGxfc2VxICoKIGFzdF9mb3JfZXhwcmxpc3Qoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgZXhwcl9jb250ZXh0X3R5IGNvbnRleHQpCiB7CkBAIC0yMjgzLDQ5ICsyMjcyLDY0IEBACiB9CiAKIHN0YXRpYyBhbGlhc190eQotYWxpYXNfZm9yX2ltcG9ydF9uYW1lKHN0cnVjdCBjb21waWxpbmcgKmMsIGNvbnN0IG5vZGUgKm4pCithbGlhc19mb3JfaW1wb3J0X25hbWUoc3RydWN0IGNvbXBpbGluZyAqYywgY29uc3Qgbm9kZSAqbiwgaW50IHN0b3JlKQogewogICAgIC8qCiAgICAgICBpbXBvcnRfYXNfbmFtZTogTkFNRSBbJ2FzJyBOQU1FXQogICAgICAgZG90dGVkX2FzX25hbWU6IGRvdHRlZF9uYW1lIFsnYXMnIE5BTUVdCiAgICAgICBkb3R0ZWRfbmFtZTogTkFNRSAoJy4nIE5BTUUpKgogICAgICovCi0gICAgUHlPYmplY3QgKnN0ciwgKm5hbWU7CisgICAgaWRlbnRpZmllciBzdHIsIG5hbWU7CiAKICBsb29wOgogICAgIHN3aXRjaCAoVFlQRShuKSkgewotICAgICAgICBjYXNlIGltcG9ydF9hc19uYW1lOgorICAgICAgICAgY2FzZSBpbXBvcnRfYXNfbmFtZTogeworICAgICAgICAgICAgbm9kZSAqbmFtZV9ub2RlID0gQ0hJTEQobiwgMCk7CiAgICAgICAgICAgICBzdHIgPSBOVUxMOwotICAgICAgICAgICAgaWYgKE5DSChuKSA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgc3RyID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMikpOwotICAgICAgICAgICAgICAgIGlmICghc3RyKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5hbWUgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAwKSk7CisgICAgICAgICAgICBuYW1lID0gTkVXX0lERU5USUZJRVIobmFtZV9ub2RlKTsKICAgICAgICAgICAgIGlmICghbmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMykgeworICAgICAgICAgICAgICAgIG5vZGUgKnN0cl9ub2RlID0gQ0hJTEQobiwgMik7CisgICAgICAgICAgICAgICAgc3RyID0gTkVXX0lERU5USUZJRVIoc3RyX25vZGUpOworICAgICAgICAgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAoc3RvcmUgJiYgZm9yYmlkZGVuX25hbWUoc3RyLCBzdHJfbm9kZSwgMCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKG5hbWUsIG5hbWVfbm9kZSwgMCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKG5hbWUsIHN0ciwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBkb3R0ZWRfYXNfbmFtZToKICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMSkgewogICAgICAgICAgICAgICAgIG4gPSBDSElMRChuLCAwKTsKICAgICAgICAgICAgICAgICBnb3RvIGxvb3A7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBhbGlhc190eSBhID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIDApKTsKKyAgICAgICAgICAgICAgICBub2RlICphc25hbWVfbm9kZSA9IENISUxEKG4sIDIpOworICAgICAgICAgICAgICAgIGFsaWFzX3R5IGEgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgMCksIDApOwogICAgICAgICAgICAgICAgIGlmICghYSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KCFhLT5hc25hbWUpOwotICAgICAgICAgICAgICAgIGEtPmFzbmFtZSA9IE5FV19JREVOVElGSUVSKENISUxEKG4sIDIpKTsKKyAgICAgICAgICAgICAgICBhLT5hc25hbWUgPSBORVdfSURFTlRJRklFUihhc25hbWVfbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFhLT5hc25hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShhLT5hc25hbWUsIGFzbmFtZV9ub2RlLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBkb3R0ZWRfbmFtZToKICAgICAgICAgICAgIGlmIChOQ0gobikgPT0gMSkgewotICAgICAgICAgICAgICAgIG5hbWUgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAwKSk7CisgICAgICAgICAgICAgICAgbm9kZSAqbmFtZV9ub2RlID0gQ0hJTEQobiwgMCk7CisgICAgICAgICAgICAgICAgbmFtZSA9IE5FV19JREVOVElGSUVSKG5hbWVfbm9kZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAoc3RvcmUgJiYgZm9yYmlkZGVuX25hbWUobmFtZSwgbmFtZV9ub2RlLCAwKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzKG5hbWUsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CkBAIC0yNDA1LDcgKzI0MDksNyBAQAogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewotICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpKTsKKyAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpKSwgMSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydF9hbGlhcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCBpIC8gMiwgaW1wb3J0X2FsaWFzKTsKQEAgLTI0MTYsMTMgKzI0MjAsMTUgQEAKICAgICAgICAgaW50IG5fY2hpbGRyZW47CiAgICAgICAgIGludCBpZHgsIG5kb3RzID0gMDsKICAgICAgICAgYWxpYXNfdHkgbW9kID0gTlVMTDsKLSAgICAgICAgaWRlbnRpZmllciBtb2RuYW1lOworICAgICAgICBpZGVudGlmaWVyIG1vZG5hbWUgPSBOVUxMOwogCiAgICAgICAgLyogQ291bnQgdGhlIG51bWJlciBvZiBkb3RzIChmb3IgcmVsYXRpdmUgaW1wb3J0cykgYW5kIGNoZWNrIGZvciB0aGUKICAgICAgICAgICBvcHRpb25hbCBtb2R1bGUgbmFtZSAqLwogICAgICAgICBmb3IgKGlkeCA9IDE7IGlkeCA8IE5DSChuKTsgaWR4KyspIHsKICAgICAgICAgICAgIGlmIChUWVBFKENISUxEKG4sIGlkeCkpID09IGRvdHRlZF9uYW1lKSB7Ci0gICAgICAgICAgICAgICAgbW9kID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGlkeCkpOworICAgICAgICAgICAgICAgIG1vZCA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBDSElMRChuLCBpZHgpLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1vZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgaWR4Kys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgaWR4KSkgPT0gRUxMSVBTSVMpIHsKQEAgLTI0NjcsMTQgKzI0NzMsMTQgQEAKIAogICAgICAgICAvKiBoYW5kbGUgImZyb20gLi4uIGltcG9ydCAqIiBzcGVjaWFsIGIvYyB0aGVyZSdzIG5vIGNoaWxkcmVuICovCiAgICAgICAgIGlmIChUWVBFKG4pID09IFNUQVIpIHsKLSAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBuKTsKKyAgICAgICAgICAgIGFsaWFzX3R5IGltcG9ydF9hbGlhcyA9IGFsaWFzX2Zvcl9pbXBvcnRfbmFtZShjLCBuLCAxKTsKICAgICAgICAgICAgIGlmICghaW1wb3J0X2FsaWFzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChhbGlhc2VzLCAwLCBpbXBvcnRfYWxpYXMpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChuKTsgaSArPSAyKSB7Ci0gICAgICAgICAgICAgICAgYWxpYXNfdHkgaW1wb3J0X2FsaWFzID0gYWxpYXNfZm9yX2ltcG9ydF9uYW1lKGMsIENISUxEKG4sIGkpKTsKKyAgICAgICAgICAgICAgICBhbGlhc190eSBpbXBvcnRfYWxpYXMgPSBhbGlhc19mb3JfaW1wb3J0X25hbWUoYywgQ0hJTEQobiwgaSksIDEpOwogICAgICAgICAgICAgICAgIGlmICghaW1wb3J0X2FsaWFzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfU0VUKGFsaWFzZXMsIGkgLyAyLCBpbXBvcnRfYWxpYXMpOwpAQCAtMjQ4Miw4ICsyNDg4LDYgQEAKICAgICAgICAgfQogICAgICAgICBpZiAobW9kICE9IE5VTEwpCiAgICAgICAgICAgICBtb2RuYW1lID0gbW9kLT5uYW1lOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtb2RuYW1lID0gbmV3X2lkZW50aWZpZXIoIiIsIGMtPmNfYXJlbmEpOwogICAgICAgICByZXR1cm4gSW1wb3J0RnJvbShtb2RuYW1lLCBhbGlhc2VzLCBuZG90cywgbGluZW5vLCBjb2xfb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjLT5jX2FyZW5hKTsKICAgICB9CkBAIC0yNzk2LDcgKzI4MDAsNyBAQAogewogICAgIGFzZGxfc2VxICpfdGFyZ2V0LCAqc2VxID0gTlVMTCwgKnN1aXRlX3NlcTsKICAgICBleHByX3R5IGV4cHJlc3Npb247Ci0gICAgZXhwcl90eSB0YXJnZXQ7CisgICAgZXhwcl90eSB0YXJnZXQsIGZpcnN0OwogICAgIGNvbnN0IG5vZGUgKm5vZGVfdGFyZ2V0OwogICAgIC8qIGZvcl9zdG10OiAnZm9yJyBleHBybGlzdCAnaW4nIHRlc3RsaXN0ICc6JyBzdWl0ZSBbJ2Vsc2UnICc6JyBzdWl0ZV0gKi8KICAgICBSRVEobiwgZm9yX3N0bXQpOwpAQCAtMjgxMywxMCArMjgxNywxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBDaGVjayB0aGUgIyBvZiBjaGlsZHJlbiByYXRoZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIF90YXJnZXQsIHNpbmNlCiAgICAgICAgZm9yIHgsIGluIC4uLiBoYXMgMSBlbGVtZW50IGluIF90YXJnZXQsIGJ1dCBzdGlsbCByZXF1aXJlcyBhIFR1cGxlLiAqLworICAgIGZpcnN0ID0gKGV4cHJfdHkpYXNkbF9zZXFfR0VUKF90YXJnZXQsIDApOwogICAgIGlmIChOQ0gobm9kZV90YXJnZXQpID09IDEpCi0gICAgICAgIHRhcmdldCA9IChleHByX3R5KWFzZGxfc2VxX0dFVChfdGFyZ2V0LCAwKTsKKyAgICAgICAgdGFyZ2V0ID0gZmlyc3Q7CiAgICAgZWxzZQotICAgICAgICB0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOworICAgICAgICB0YXJnZXQgPSBUdXBsZShfdGFyZ2V0LCBTdG9yZSwgZmlyc3QtPmxpbmVubywgZmlyc3QtPmNvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogCiAgICAgZXhwcmVzc2lvbiA9IGFzdF9mb3JfdGVzdGxpc3QoYywgQ0hJTEQobiwgMykpOwogICAgIGlmICghZXhwcmVzc2lvbikKQEAgLTI4NjQsNiArMjg2OSw4IEBACiAgICAgICAgIGlkZW50aWZpZXIgZSA9IE5FV19JREVOVElGSUVSKENISUxEKGV4YywgMykpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGUsIENISUxEKGV4YywgMyksIDApKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGV4cHJlc3Npb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoZXhjLCAxKSk7CiAgICAgICAgIGlmICghZXhwcmVzc2lvbikKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzAzNiw2ICszMDQzLDggQEAKICAgICAgICAgY2xhc3NuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpOwogICAgICAgICBpZiAoIWNsYXNzbmFtZSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoY2xhc3NuYW1lLCBDSElMRChuLCAzKSwgMCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgcmV0dXJuIENsYXNzRGVmKGNsYXNzbmFtZSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgcywgZGVjb3JhdG9yX3NlcSwKICAgICAgICAgICAgICAgICAgICAgICAgIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKICAgICB9CkBAIC0zMDQ3LDYgKzMwNTYsOCBAQAogICAgICAgICBjbGFzc25hbWUgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAxKSk7CiAgICAgICAgIGlmICghY2xhc3NuYW1lKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChmb3JiaWRkZW5fbmFtZShjbGFzc25hbWUsIENISUxEKG4sIDMpLCAwKSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gQ2xhc3NEZWYoY2xhc3NuYW1lLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBzLCBkZWNvcmF0b3Jfc2VxLAogICAgICAgICAgICAgICAgICAgICAgICAgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KQEAgLTMwNzAsNiArMzA4MSw4IEBACiAgICAgY2xhc3NuYW1lID0gTkVXX0lERU5USUZJRVIoQ0hJTEQobiwgMSkpOwogICAgIGlmICghY2xhc3NuYW1lKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoZm9yYmlkZGVuX25hbWUoY2xhc3NuYW1lLCBDSElMRChuLCAxKSwgMCkpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIENsYXNzRGVmKGNsYXNzbmFtZSwgY2FsbC0+di5DYWxsLmFyZ3MsIGNhbGwtPnYuQ2FsbC5rZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgY2FsbC0+di5DYWxsLnN0YXJhcmdzLCBjYWxsLT52LkNhbGwua3dhcmdzLCBzLApAQCAtMzE1NCwxNyArMzE2NywxMyBAQAogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBsb25nIHg7CiAgICAgZG91YmxlIGR4OwotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICBQeV9jb21wbGV4IGNvbXBsOwogICAgIGludCBpbWZsYWc7Ci0jZW5kaWYKIAogICAgIGFzc2VydChzICE9IE5VTEwpOwogICAgIGVycm5vID0gMDsKICAgICBlbmQgPSBzICsgc3RybGVuKHMpIC0gMTsKLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7Ci0jZW5kaWYKICAgICBpZiAoc1swXSA9PSAnMCcpIHsKICAgICAgICAgeCA9IChsb25nKSBQeU9TX3N0cnRvdWwoKGNoYXIgKilzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICAgICAgaWYgKHggPCAwICYmIGVycm5vID09IDApIHsKQEAgLTMxODEsNyArMzE5MCw2IEBACiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CiAgICAgfQogICAgIC8qIFhYWCBIdWdlIGZsb2F0cyBtYXkgc2lsZW50bHkgZmFpbCAqLwotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICBpZiAoaW1mbGFnKSB7CiAgICAgICAgIGNvbXBsLnJlYWwgPSAwLjsKICAgICAgICAgY29tcGwuaW1hZyA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCAoY2hhciAqKikmZW5kLCBOVUxMKTsKQEAgLTMxOTAsNyArMzE5OCw2IEBACiAgICAgICAgIHJldHVybiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGNvbXBsKTsKICAgICB9CiAgICAgZWxzZQotI2VuZGlmCiAgICAgewogICAgICAgICBkeCA9IFB5T1Nfc3RyaW5nX3RvX2RvdWJsZShzLCBOVUxMLCBOVUxMKTsKICAgICAgICAgaWYgKGR4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKZGlmZiAtLWdpdCBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKaW5kZXggM2U0NGFhMC4uNjI1ODE2NyAxMDA2NDQKLS0tIGEvUHl0aG9uL2JsdGlubW9kdWxlLmMKKysrIGIvUHl0aG9uL2JsdGlubW9kdWxlLmMKQEAgLTUsMTAgKzUsMTMgQEAKIAogI2luY2x1ZGUgIm5vZGUuaCIKICNpbmNsdWRlICJjb2RlLmgiCi0jaW5jbHVkZSAiZXZhbC5oIgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorI2lmZGVmIEhBVkVfTEFOR0lORk9fSAorI2luY2x1ZGUgPGxhbmdpbmZvLmg+ICAgLyogQ09ERVNFVCAqLworI2VuZGlmCisKIC8qIFRoZSBkZWZhdWx0IGVuY29kaW5nIHVzZWQgYnkgdGhlIHBsYXRmb3JtIGZpbGUgc3lzdGVtIEFQSXMKICAgIENhbiByZW1haW4gTlVMTCBmb3IgYWxsIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgc3VjaCBhIGNvbmNlcHQKIApAQCAtMjEsMzQgKzI0LDE0IEBACiAjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKIGNvbnN0IGNoYXIgKlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAidXRmLTgiOwogaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAxOwotI2Vsc2UKLWNvbnN0IGNoYXIgKlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOyAvKiB1c2UgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoQ09ERVNFVCkKK2NvbnN0IGNoYXIgKlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOyAvKiBzZXQgYnkgaW5pdGZzZW5jb2RpbmcoKSAqLwogaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOworI2Vsc2UKK2NvbnN0IGNoYXIgKlB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAidXRmLTgiOworaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAxOwogI2VuZGlmCiAKLWludAotX1B5X1NldEZpbGVTeXN0ZW1FbmNvZGluZyhQeU9iamVjdCAqcykKLXsKLSAgICBQeU9iamVjdCAqZGVmZW5jLCAqY29kZWM7Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2socykpIHsKLSAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZGVmZW5jID0gX1B5VW5pY29kZV9Bc0RlZmF1bHRFbmNvZGVkU3RyaW5nKHMsIE5VTEwpOwotICAgIGlmICghZGVmZW5jKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoUHlCeXRlc19Bc1N0cmluZyhkZWZlbmMpKTsKLSAgICBpZiAoY29kZWMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIFB5X0RFQ1JFRihjb2RlYyk7Ci0gICAgaWYgKCFQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nICYmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpCi0gICAgICAgIC8qIEEgZmlsZSBzeXN0ZW0gZW5jb2Rpbmcgd2FzIHNldCBhdCBydW4tdGltZSAqLwotICAgICAgICBmcmVlKChjaGFyKilQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKTsKLSAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gc3RyZHVwKFB5Qnl0ZXNfQXNTdHJpbmcoZGVmZW5jKSk7Ci0gICAgUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IDA7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX19fYnVpbGRfY2xhc3NfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewpAQCAtMTg5LDggKzE3MiwxMiBAQAogUHlEb2NfU1RSVkFSKGltcG9ydF9kb2MsCiAiX19pbXBvcnRfXyhuYW1lLCBnbG9iYWxzPXt9LCBsb2NhbHM9e30sIGZyb21saXN0PVtdLCBsZXZlbD0tMSkgLT4gbW9kdWxlXG5cCiBcblwKLUltcG9ydCBhIG1vZHVsZS4gIFRoZSBnbG9iYWxzIGFyZSBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0O1xuXAotdGhleSBhcmUgbm90IG1vZGlmaWVkLiAgVGhlIGxvY2FscyBhcmUgY3VycmVudGx5IHVudXNlZC4gIFRoZSBmcm9tbGlzdFxuXAorSW1wb3J0IGEgbW9kdWxlLiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIHVzZSBieSB0aGUgUHl0aG9uXG5cCitpbnRlcnByZXRlciBhbmQgbm90IGZvciBnZW5lcmFsIHVzZSBpdCBpcyBiZXR0ZXIgdG8gdXNlXG5cCitpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIHRvIHByb2dyYW1tYXRpY2FsbHkgaW1wb3J0IGEgbW9kdWxlLlxuXAorXG5cCitUaGUgZ2xvYmFscyBhcmd1bWVudCBpcyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb250ZXh0O1xuXAordGhleSBhcmUgbm90IG1vZGlmaWVkLiAgVGhlIGxvY2FscyBhcmd1bWVudCBpcyB1bnVzZWQuICBUaGUgZnJvbWxpc3RcblwKIHNob3VsZCBiZSBhIGxpc3Qgb2YgbmFtZXMgdG8gZW11bGF0ZSBgYGZyb20gbmFtZSBpbXBvcnQgLi4uJycsIG9yIGFuXG5cCiBlbXB0eSBsaXN0IHRvIGVtdWxhdGUgYGBpbXBvcnQgbmFtZScnLlxuXAogV2hlbiBpbXBvcnRpbmcgYSBtb2R1bGUgZnJvbSBhIHBhY2thZ2UsIG5vdGUgdGhhdCBfX2ltcG9ydF9fKCdBLkInLCAuLi4pXG5cCkBAIC0zMjAsNyArMzA3LDIxIEBACiBQeURvY19TVFJWQVIoYmluX2RvYywKICJiaW4obnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBvciBsb25nIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworCisKK3N0YXRpYyBQeU9iamVjdCAqCitidWlsdGluX2NhbGxhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKChsb25nKVB5Q2FsbGFibGVfQ2hlY2sodikpOworfQorCitQeURvY19TVFJWQVIoY2FsbGFibGVfZG9jLAorImNhbGxhYmxlKG9iamVjdCkgLT4gYm9vbFxuXAorXG5cCitSZXR1cm4gd2hldGhlciB0aGUgb2JqZWN0IGlzIGNhbGxhYmxlIChpLmUuLCBzb21lIGtpbmQgb2YgZnVuY3Rpb24pLlxuXAorTm90ZSB0aGF0IGNsYXNzZXMgYXJlIGNhbGxhYmxlLCBhcyBhcmUgaW5zdGFuY2VzIG9mIGNsYXNzZXMgd2l0aCBhXG5cCitfX2NhbGxfXygpIG1ldGhvZC4iKTsKIAogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC01NDIsMTkgKzU0MywyMCBAQAogICAgIGludCBtb2RlID0gLTE7CiAgICAgaW50IGRvbnRfaW5oZXJpdCA9IDA7CiAgICAgaW50IHN1cHBsaWVkX2ZsYWdzID0gMDsKKyAgICBpbnQgb3B0aW1pemUgPSAtMTsKICAgICBpbnQgaXNfYXN0OwogICAgIFB5Q29tcGlsZXJGbGFncyBjZjsKICAgICBQeU9iamVjdCAqY21kOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsic291cmNlIiwgImZpbGVuYW1lIiwgIm1vZGUiLCAiZmxhZ3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9udF9pbmhlcml0IiwgTlVMTH07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkb250X2luaGVyaXQiLCAib3B0aW1pemUiLCBOVUxMfTsKICAgICBpbnQgc3RhcnRbXSA9IHtQeV9maWxlX2lucHV0LCBQeV9ldmFsX2lucHV0LCBQeV9zaW5nbGVfaW5wdXR9OwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mc3xpaTpjb21waWxlIiwgIGt3bGlzdCwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT08mc3xpaWk6Y29tcGlsZSIsICBrd2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNtZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZmaWxlbmFtZV9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyLCAmc3VwcGxpZWRfZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbnRfaW5oZXJpdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbnRfaW5oZXJpdCwgJm9wdGltaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGZpbGVuYW1lX29iaik7CkBAIC01NjksNiArNTcxLDEyIEBACiAgICAgfQogICAgIC8qIFhYWCBXYXJuIGlmIChzdXBwbGllZF9mbGFncyAmIFB5Q0ZfTUFTS19PQlNPTEVURSkgIT0gMD8gKi8KIAorICAgIGlmIChvcHRpbWl6ZSA8IC0xIHx8IG9wdGltaXplID4gMikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21waWxlKCk6IGludmFsaWQgb3B0aW1pemUgdmFsdWUiKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKICAgICBpZiAoIWRvbnRfaW5oZXJpdCkgewogICAgICAgICBQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzKCZjZik7CiAgICAgfQpAQCAtNjAzLDggKzYxMSw4IEBACiAgICAgICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlKG1vZCwgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBhcmVuYSk7CisgICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgfQogICAgICAgICBnb3RvIGZpbmFsbHk7CkBAIC02MTQsNyArNjIyLDcgQEAKICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICByZXN1bHQgPSBQeV9Db21waWxlU3RyaW5nRmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZik7CisgICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOwogICAgIGdvdG8gZmluYWxseTsKIAogZXJyb3I6CkBAIC03MjYsNyArNzM0LDcgQEAKICAgICAgICAgImNvZGUgb2JqZWN0IHBhc3NlZCB0byBldmFsKCkgbWF5IG5vdCBjb250YWluIGZyZWUgdmFyaWFibGVzIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlFdmFsX0V2YWxDb2RlKChQeUNvZGVPYmplY3QgKikgY21kLCBnbG9iYWxzLCBsb2NhbHMpOworICAgICAgICByZXR1cm4gUHlFdmFsX0V2YWxDb2RlKGNtZCwgZ2xvYmFscywgbG9jYWxzKTsKICAgICB9CiAKICAgICBjZi5jZl9mbGFncyA9IFB5Q0ZfU09VUkNFX0lTX1VURjg7CkBAIC04MDIsNyArODEwLDcgQEAKICAgICAgICAgICAgICAgICAiY29udGFpbiBmcmVlIHZhcmlhYmxlcyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgdiA9IFB5RXZhbF9FdmFsQ29kZSgoUHlDb2RlT2JqZWN0ICopIHByb2csIGdsb2JhbHMsIGxvY2Fscyk7CisgICAgICAgIHYgPSBQeUV2YWxfRXZhbENvZGUocHJvZywgZ2xvYmFscywgbG9jYWxzKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGNoYXIgKnN0cjsKQEAgLTg5NywyNCArOTA1LDIxIEBACiAgICAgfQogICAgIHYgPSBQeU9iamVjdF9HZXRBdHRyKHYsIG5hbWUpOwogICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0V4Y2VwdGlvbikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm4gUHlfRmFsc2U7CisgICAgICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiAgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0RFQ1JFRih2KTsKLSAgICBQeV9JTkNSRUYoUHlfVHJ1ZSk7Ci0gICAgcmV0dXJuIFB5X1RydWU7CisgICAgUHlfUkVUVVJOX1RSVUU7CiB9CiAKIFB5RG9jX1NUUlZBUihoYXNhdHRyX2RvYywKICJoYXNhdHRyKG9iamVjdCwgbmFtZSkgLT4gYm9vbFxuXAogXG5cCiBSZXR1cm4gd2hldGhlciB0aGUgb2JqZWN0IGhhcyBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgZ2l2ZW4gbmFtZS5cblwKLShUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyBnZXRhdHRyKG9iamVjdCwgbmFtZSkgYW5kIGNhdGNoaW5nIGV4Y2VwdGlvbnMuKSIpOworKFRoaXMgaXMgZG9uZSBieSBjYWxsaW5nIGdldGF0dHIob2JqZWN0LCBuYW1lKSBhbmQgY2F0Y2hpbmcgQXR0cmlidXRlRXJyb3IuKSIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMTYzLDEyICsxMTY4LDEyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnVpbHRpbl9oYXNoKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdikKIHsKLSAgICBsb25nIHg7CisgICAgUHlfaGFzaF90IHg7CiAKICAgICB4ID0gUHlPYmplY3RfSGFzaCh2KTsKICAgICBpZiAoeCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh4KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHgpOwogfQogCiBQeURvY19TVFJWQVIoaGFzaF9kb2MsCkBAIC0xMTg3LDcgKzExOTIsNyBAQAogUHlEb2NfU1RSVkFSKGhleF9kb2MsCiAiaGV4KG51bWJlcikgLT4gc3RyaW5nXG5cCiBcblwKLVJldHVybiB0aGUgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlciBvciBsb25nIGludGVnZXIuIik7CitSZXR1cm4gdGhlIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTEzNzUsNyArMTM4MCw3IEBACiBQeURvY19TVFJWQVIob2N0X2RvYywKICJvY3QobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG9yIGxvbmcgaW50ZWdlci4iKTsKK1JldHVybiB0aGUgb2N0YWwgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTQ4NiwxMyArMTQ5MSwxOSBAQAogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgfQogCi0gICAgaWYgKHNlcCAmJiBzZXAgIT0gUHlfTm9uZSAmJiAhUHlVbmljb2RlX0NoZWNrKHNlcCkpIHsKKyAgICBpZiAoc2VwID09IFB5X05vbmUpIHsKKyAgICAgICAgc2VwID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoc2VwICYmICFQeVVuaWNvZGVfQ2hlY2soc2VwKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInNlcCBtdXN0IGJlIE5vbmUgb3IgYSBzdHJpbmcsIG5vdCAlLjIwMHMiLAogICAgICAgICAgICAgICAgICAgICAgc2VwLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChlbmQgJiYgZW5kICE9IFB5X05vbmUgJiYgIVB5VW5pY29kZV9DaGVjayhlbmQpKSB7CisgICAgaWYgKGVuZCA9PSBQeV9Ob25lKSB7CisgICAgICAgIGVuZCA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKGVuZCAmJiAhUHlVbmljb2RlX0NoZWNrKGVuZCkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJlbmQgbXVzdCBiZSBOb25lIG9yIGEgc3RyaW5nLCBub3QgJS4yMDBzIiwKICAgICAgICAgICAgICAgICAgICAgIGVuZC0+b2JfdHlwZS0+dHBfbmFtZSk7CkBAIC0xNTAxLDcgKzE1MTIsNyBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfU2l6ZShhcmdzKTsgaSsrKSB7CiAgICAgICAgIGlmIChpID4gMCkgewotICAgICAgICAgICAgaWYgKHNlcCA9PSBOVUxMIHx8IHNlcCA9PSBQeV9Ob25lKQorICAgICAgICAgICAgaWYgKHNlcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZygiICIsIGZpbGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZU9iamVjdChzZXAsIGZpbGUsCkBAIC0xNTE1LDcgKzE1MjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGVuZCA9PSBOVUxMIHx8IGVuZCA9PSBQeV9Ob25lKQorICAgIGlmIChlbmQgPT0gTlVMTCkKICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGZpbGUpOwogICAgIGVsc2UKICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlT2JqZWN0KGVuZCwgZmlsZSwgUHlfUFJJTlRfUkFXKTsKQEAgLTE2MDgsMTMgKzE2MTksMjAgQEAKICAgICAgICAgY2hhciAqcHJvbXB0OwogICAgICAgICBjaGFyICpzOwogICAgICAgICBQeU9iamVjdCAqc3RkaW5fZW5jb2Rpbmc7CisgICAgICAgIGNoYXIgKnN0ZGluX2VuY29kaW5nX3N0cjsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAgICAgc2l6ZV90IGxlbjsKIAogICAgICAgICBzdGRpbl9lbmNvZGluZyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmluLCAiZW5jb2RpbmciKTsKICAgICAgICAgaWYgKCFzdGRpbl9lbmNvZGluZykKICAgICAgICAgICAgIC8qIHN0ZGluIGlzIGEgdGV4dCBzdHJlYW0sIHNvIGl0IG11c3QgaGF2ZSBhbgogICAgICAgICAgICAgICAgZW5jb2RpbmcuICovCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgc3RkaW5fZW5jb2Rpbmdfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzdGRpbl9lbmNvZGluZyk7CisgICAgICAgIGlmIChzdGRpbl9lbmNvZGluZ19zdHIgID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGRpbl9lbmNvZGluZyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICB0bXAgPSBQeU9iamVjdF9DYWxsTWV0aG9kKGZvdXQsICJmbHVzaCIsICIiKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTE2MjMsMTIgKzE2NDEsMTggQEAKICAgICAgICAgaWYgKHByb21wdGFyZyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqc3RyaW5ncG87CiAgICAgICAgICAgICBQeU9iamVjdCAqc3Rkb3V0X2VuY29kaW5nOwotICAgICAgICAgICAgc3Rkb3V0X2VuY29kaW5nID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhmb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2RpbmciKTsKKyAgICAgICAgICAgIGNoYXIgKnN0ZG91dF9lbmNvZGluZ19zdHI7CisgICAgICAgICAgICBzdGRvdXRfZW5jb2RpbmcgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGZvdXQsICJlbmNvZGluZyIpOwogICAgICAgICAgICAgaWYgKHN0ZG91dF9lbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0ZGluX2VuY29kaW5nKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0ZG91dF9lbmNvZGluZ19zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHN0ZG91dF9lbmNvZGluZyk7CisgICAgICAgICAgICBpZiAoc3Rkb3V0X2VuY29kaW5nX3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0ZGluX2VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3Rkb3V0X2VuY29kaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cmluZ3BvID0gUHlPYmplY3RfU3RyKHByb21wdGFyZyk7CiAgICAgICAgICAgICBpZiAoc3RyaW5ncG8gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGRpbl9lbmNvZGluZyk7CkBAIC0xNjM2LDcgKzE2NjAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcG8gPSBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHN0cmluZ3BvLAotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfQXNTdHJpbmcoc3Rkb3V0X2VuY29kaW5nKSwgTlVMTCk7CisgICAgICAgICAgICAgICAgc3Rkb3V0X2VuY29kaW5nX3N0ciwgTlVMTCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3Rkb3V0X2VuY29kaW5nKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHJpbmdwbyk7CiAgICAgICAgICAgICBpZiAocG8gPT0gTlVMTCkgewpAQCAtMTY2MiwyMiArMTY4NiwyMyBAQAogICAgICAgICAgICAgUHlfREVDUkVGKHN0ZGluX2VuY29kaW5nKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmICgqcyA9PSAnXDAnKSB7CisKKyAgICAgICAgbGVuID0gc3RybGVuKHMpOworICAgICAgICBpZiAobGVuID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwogICAgICAgICAgICAgcmVzdWx0ID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsgLyogc3RyaXAgdHJhaWxpbmcgJ1xuJyAqLwotICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzKTsKKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlucHV0OiBpbnB1dCB0b28gbG9uZyIpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBQeVVuaWNvZGVfRGVjb2RlCi0gICAgICAgICAgICAgICAgICAgIChzLCBsZW4tMSwKLSAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfQXNTdHJpbmcoc3RkaW5fZW5jb2RpbmcpLAotICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgbGVuLS07ICAgLyogc3RyaXAgdHJhaWxpbmcgJ1xuJyAqLworICAgICAgICAgICAgICAgIGlmIChsZW4gIT0gMCAmJiBzW2xlbi0xXSA9PSAnXHInKQorICAgICAgICAgICAgICAgICAgICBsZW4tLTsgICAvKiBzdHJpcCB0cmFpbGluZyAnXHInICovCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0RlY29kZShzLCBsZW4sIHN0ZGluX2VuY29kaW5nX3N0ciwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHN0ZGluX2VuY29kaW5nKTsKQEAgLTE5NzksNiArMjAwNCwxNSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgLyogSXQncyB0ZW1wdGluZyB0byB1c2UgUHlOdW1iZXJfSW5QbGFjZUFkZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIFB5TnVtYmVyX0FkZCBoZXJlLCB0byBhdm9pZCBxdWFkcmF0aWMgcnVubmluZyB0aW1lCisgICAgICAgICAgIHdoZW4gZG9pbmcgJ3N1bShsaXN0X29mX2xpc3RzLCBbXSknLiAgSG93ZXZlciwgdGhpcworICAgICAgICAgICB3b3VsZCBwcm9kdWNlIGEgY2hhbmdlIGluIGJlaGF2aW91cjogYSBzbmlwcGV0IGxpa2UKKworICAgICAgICAgICAgIGVtcHR5ID0gW10KKyAgICAgICAgICAgICBzdW0oW1t4XSBmb3IgeCBpbiByYW5nZSgxMCldLCBlbXB0eSkKKworICAgICAgICAgICB3b3VsZCBjaGFuZ2UgdGhlIHZhbHVlIG9mIGVtcHR5LiAqLwogICAgICAgICB0ZW1wID0gUHlOdW1iZXJfQWRkKHJlc3VsdCwgaXRlbSk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CkBAIC0yMjMzLDYgKzIyNjcsNyBAQAogICAgIHsiYW55IiwgICAgICAgICAgICAgYnVpbHRpbl9hbnksICAgICAgICBNRVRIX08sIGFueV9kb2N9LAogICAgIHsiYXNjaWkiLCAgICAgICAgICAgYnVpbHRpbl9hc2NpaSwgICAgICBNRVRIX08sIGFzY2lpX2RvY30sCiAgICAgeyJiaW4iLCAgICAgICAgICAgICBidWlsdGluX2JpbiwgICAgICAgIE1FVEhfTywgYmluX2RvY30sCisgICAgeyJjYWxsYWJsZSIsICAgICAgICBidWlsdGluX2NhbGxhYmxlLCAgIE1FVEhfTywgY2FsbGFibGVfZG9jfSwKICAgICB7ImNociIsICAgICAgICAgICAgIGJ1aWx0aW5fY2hyLCAgICAgICAgTUVUSF9WQVJBUkdTLCBjaHJfZG9jfSwKICAgICB7ImNvbXBpbGUiLCAgICAgICAgIChQeUNGdW5jdGlvbilidWlsdGluX2NvbXBpbGUsICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIGNvbXBpbGVfZG9jfSwKICAgICB7ImRlbGF0dHIiLCAgICAgICAgIGJ1aWx0aW5fZGVsYXR0ciwgICAgTUVUSF9WQVJBUkdTLCBkZWxhdHRyX2RvY30sCkBAIC0yMzIzLDkgKzIzNTgsNyBAQAogICAgIFNFVEJVSUxUSU4oImJ5dGVhcnJheSIsICAgICAgICAgICAgICZQeUJ5dGVBcnJheV9UeXBlKTsKICAgICBTRVRCVUlMVElOKCJieXRlcyIsICAgICAgICAgICAgICAgICAmUHlCeXRlc19UeXBlKTsKICAgICBTRVRCVUlMVElOKCJjbGFzc21ldGhvZCIsICAgICAgICAgICAmUHlDbGFzc01ldGhvZF9UeXBlKTsKLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgU0VUQlVJTFRJTigiY29tcGxleCIsICAgICAgICAgICAgICAgJlB5Q29tcGxleF9UeXBlKTsKLSNlbmRpZgogICAgIFNFVEJVSUxUSU4oImRpY3QiLCAgICAgICAgICAgICAgICAgICZQeURpY3RfVHlwZSk7CiAgICAgU0VUQlVJTFRJTigiZW51bWVyYXRlIiwgICAgICAgICAgICAgJlB5RW51bV9UeXBlKTsKICAgICBTRVRCVUlMVElOKCJmaWx0ZXIiLCAgICAgICAgICAgICAgICAmUHlGaWx0ZXJfVHlwZSk7CmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IGQzZWQ4NzEuLjQzYTVjOTAgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlICJjb2RlLmgiCiAjaW5jbHVkZSAiZnJhbWVvYmplY3QuaCIKLSNpbmNsdWRlICJldmFsLmgiCiAjaW5jbHVkZSAib3Bjb2RlLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKQEAgLTEzNiw4ICsxMzUsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqIGltcG9ydF9mcm9tKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIGludCBpbXBvcnRfYWxsX2Zyb20oUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgdm9pZCBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeU9iamVjdCAqLCBjb25zdCBjaGFyICosIFB5T2JqZWN0ICopOworc3RhdGljIHZvaWQgZm9ybWF0X2V4Y191bmJvdW5kKFB5Q29kZU9iamVjdCAqY28sIGludCBvcGFyZyk7CiBzdGF0aWMgUHlPYmplY3QgKiB1bmljb2RlX2NvbmNhdGVuYXRlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKiwgdW5zaWduZWQgY2hhciAqKTsKK3N0YXRpYyBQeU9iamVjdCAqIHNwZWNpYWxfbG9va3VwKFB5T2JqZWN0ICosIGNoYXIgKiwgUHlPYmplY3QgKiopOwogCiAjZGVmaW5lIE5BTUVfRVJST1JfTVNHIFwKICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKQEAgLTIxNyw0MiArMjE4LDEyNyBAQAogCiAKICNpZmRlZiBXSVRIX1RIUkVBRAorI2RlZmluZSBHSUxfUkVRVUVTVCBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2Ryb3BfcmVxdWVzdCkKKyNlbHNlCisjZGVmaW5lIEdJTF9SRVFVRVNUIDAKKyNlbmRpZgorCisvKiBUaGlzIGNhbiBzZXQgZXZhbF9icmVha2VyIHRvIDAgZXZlbiB0aG91Z2ggZ2lsX2Ryb3BfcmVxdWVzdCBiZWNhbWUKKyAgIDEuICBXZSBiZWxpZXZlIHRoaXMgaXMgYWxsIHJpZ2h0IGJlY2F1c2UgdGhlIGV2YWwgbG9vcCB3aWxsIHJlbGVhc2UKKyAgIHRoZSBHSUwgZXZlbnR1YWxseSBhbnl3YXkuICovCisjZGVmaW5lIENPTVBVVEVfRVZBTF9CUkVBS0VSKCkgXAorICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCggXAorICAgICAgICAmZXZhbF9icmVha2VyLCBcCisgICAgICAgIEdJTF9SRVFVRVNUIHwgXAorICAgICAgICBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmcGVuZGluZ2NhbGxzX3RvX2RvKSB8IFwKKyAgICAgICAgcGVuZGluZ19hc3luY19leGMpCisKKyNpZmRlZiBXSVRIX1RIUkVBRAorCisjZGVmaW5lIFNFVF9HSUxfRFJPUF9SRVFVRVNUKCkgXAorICAgIGRvIHsgXAorICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QsIDEpOyBcCisgICAgICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZXZhbF9icmVha2VyLCAxKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUkVTRVRfR0lMX0RST1BfUkVRVUVTVCgpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZnaWxfZHJvcF9yZXF1ZXN0LCAwKTsgXAorICAgICAgICBDT01QVVRFX0VWQUxfQlJFQUtFUigpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKy8qIFBlbmRpbmcgY2FsbHMgYXJlIG9ubHkgbW9kaWZpZWQgdW5kZXIgcGVuZGluZ19sb2NrICovCisjZGVmaW5lIFNJR05BTF9QRU5ESU5HX0NBTExTKCkgXAorICAgIGRvIHsgXAorICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbywgMSk7IFwKKyAgICAgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZldmFsX2JyZWFrZXIsIDEpOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBVTlNJR05BTF9QRU5ESU5HX0NBTExTKCkgXAorICAgIGRvIHsgXAorICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbywgMCk7IFwKKyAgICAgICAgQ09NUFVURV9FVkFMX0JSRUFLRVIoKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0lHTkFMX0FTWU5DX0VYQygpIFwKKyAgICBkbyB7IFwKKyAgICAgICAgcGVuZGluZ19hc3luY19leGMgPSAxOyBcCisgICAgICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZXZhbF9icmVha2VyLCAxKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgVU5TSUdOQUxfQVNZTkNfRVhDKCkgXAorICAgIGRvIHsgcGVuZGluZ19hc3luY19leGMgPSAwOyBDT01QVVRFX0VWQUxfQlJFQUtFUigpOyB9IHdoaWxlICgwKQorCisKKyNpZmRlZiBXSVRIX1RIUkVBRAogCiAjaWZkZWYgSEFWRV9FUlJOT19ICiAjaW5jbHVkZSA8ZXJybm8uaD4KICNlbmRpZgogI2luY2x1ZGUgInB5dGhyZWFkLmgiCiAKLXN0YXRpYyBQeVRocmVhZF90eXBlX2xvY2sgaW50ZXJwcmV0ZXJfbG9jayA9IDA7IC8qIFRoaXMgaXMgdGhlIEdJTCAqLwogc3RhdGljIFB5VGhyZWFkX3R5cGVfbG9jayBwZW5kaW5nX2xvY2sgPSAwOyAvKiBmb3IgcGVuZGluZyBjYWxscyAqLwogc3RhdGljIGxvbmcgbWFpbl90aHJlYWQgPSAwOworLyogVGhpcyBzaW5nbGUgdmFyaWFibGUgY29uc29saWRhdGVzIGFsbCByZXF1ZXN0cyB0byBicmVhayBvdXQgb2YgdGhlIGZhc3QgcGF0aAorICAgaW4gdGhlIGV2YWwgbG9vcC4gKi8KK3N0YXRpYyBfUHlfYXRvbWljX2ludCBldmFsX2JyZWFrZXIgPSB7MH07CisvKiBSZXF1ZXN0IGZvciBkcm9wcGluZyB0aGUgR0lMICovCitzdGF0aWMgX1B5X2F0b21pY19pbnQgZ2lsX2Ryb3BfcmVxdWVzdCA9IHswfTsKKy8qIFJlcXVlc3QgZm9yIHJ1bm5pbmcgcGVuZGluZyBjYWxscy4gKi8KK3N0YXRpYyBfUHlfYXRvbWljX2ludCBwZW5kaW5nY2FsbHNfdG9fZG8gPSB7MH07CisvKiBSZXF1ZXN0IGZvciBsb29raW5nIGF0IHRoZSBgYXN5bmNfZXhjYCBmaWVsZCBvZiB0aGUgY3VycmVudCB0aHJlYWQgc3RhdGUuCisgICBHdWFyZGVkIGJ5IHRoZSBHSUwuICovCitzdGF0aWMgaW50IHBlbmRpbmdfYXN5bmNfZXhjID0gMDsKKworI2luY2x1ZGUgImNldmFsX2dpbC5oIgogCiBpbnQKIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQodm9pZCkKIHsKLSAgICByZXR1cm4gaW50ZXJwcmV0ZXJfbG9jayAhPSAwOworICAgIHJldHVybiBnaWxfY3JlYXRlZCgpOwogfQogCiB2b2lkCiBQeUV2YWxfSW5pdFRocmVhZHModm9pZCkKIHsKLSAgICBpZiAoaW50ZXJwcmV0ZXJfbG9jaykKKyAgICBpZiAoZ2lsX2NyZWF0ZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGludGVycHJldGVyX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGludGVycHJldGVyX2xvY2ssIDEpOworICAgIGNyZWF0ZV9naWwoKTsKKyAgICB0YWtlX2dpbChQeVRocmVhZFN0YXRlX0dFVCgpKTsKICAgICBtYWluX3RocmVhZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKKyAgICBpZiAoIXBlbmRpbmdfbG9jaykKKyAgICAgICAgcGVuZGluZ19sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworfQorCit2b2lkCitfUHlFdmFsX0ZpbmlUaHJlYWRzKHZvaWQpCit7CisgICAgaWYgKCFnaWxfY3JlYXRlZCgpKQorICAgICAgICByZXR1cm47CisgICAgZGVzdHJveV9naWwoKTsKKyAgICBhc3NlcnQoIWdpbF9jcmVhdGVkKCkpOwogfQogCiB2b2lkCiBQeUV2YWxfQWNxdWlyZUxvY2sodm9pZCkKIHsKLSAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soaW50ZXJwcmV0ZXJfbG9jaywgMSk7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBpZiAodHN0YXRlID09IE5VTEwpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5RXZhbF9BY3F1aXJlTG9jazogY3VycmVudCB0aHJlYWQgc3RhdGUgaXMgTlVMTCIpOworICAgIHRha2VfZ2lsKHRzdGF0ZSk7CiB9CiAKIHZvaWQKIFB5RXZhbF9SZWxlYXNlTG9jayh2b2lkKQogewotICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhpbnRlcnByZXRlcl9sb2NrKTsKKyAgICAvKiBUaGlzIGZ1bmN0aW9uIG11c3Qgc3VjY2VlZCB3aGVuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZSBpcyBOVUxMLgorICAgICAgIFdlIHRoZXJlZm9yZSBhdm9pZCBQeVRocmVhZFN0YXRlX0dFVCgpIHdoaWNoIGR1bXBzIGEgZmF0YWwgZXJyb3IKKyAgICAgICBpbiBkZWJ1ZyBtb2RlLgorICAgICovCisgICAgZHJvcF9naWwoKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpOwogfQogCiB2b2lkCkBAIC0yNjEsOCArMzQ3LDggQEAKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5RXZhbF9BY3F1aXJlVGhyZWFkOiBOVUxMIG5ldyB0aHJlYWQgc3RhdGUiKTsKICAgICAvKiBDaGVjayBzb21lb25lIGhhcyBjYWxsZWQgUHlFdmFsX0luaXRUaHJlYWRzKCkgdG8gY3JlYXRlIHRoZSBsb2NrICovCi0gICAgYXNzZXJ0KGludGVycHJldGVyX2xvY2spOwotICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbnRlcnByZXRlcl9sb2NrLCAxKTsKKyAgICBhc3NlcnQoZ2lsX2NyZWF0ZWQoKSk7CisgICAgdGFrZV9naWwodHN0YXRlKTsKICAgICBpZiAoUHlUaHJlYWRTdGF0ZV9Td2FwKHRzdGF0ZSkgIT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJQeUV2YWxfQWNxdWlyZVRocmVhZDogbm9uLU5VTEwgb2xkIHRocmVhZCBzdGF0ZSIpOwpAQCAtMjc1LDcgKzM2MSw3IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5RXZhbF9SZWxlYXNlVGhyZWFkOiBOVUxMIHRocmVhZCBzdGF0ZSIpOwogICAgIGlmIChQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCkgIT0gdHN0YXRlKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUV2YWxfUmVsZWFzZVRocmVhZDogd3JvbmcgdGhyZWFkIHN0YXRlIik7Ci0gICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGludGVycHJldGVyX2xvY2spOworICAgIGRyb3BfZ2lsKHRzdGF0ZSk7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZW5zdXJlIHRoYXQgbmV3bHkKQEAgLTI4NywxNyArMzczLDEzIEBACiBQeUV2YWxfUmVJbml0VGhyZWFkcyh2b2lkKQogewogICAgIFB5T2JqZWN0ICp0aHJlYWRpbmcsICpyZXN1bHQ7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CiAKLSAgICBpZiAoIWludGVycHJldGVyX2xvY2spCisgICAgaWYgKCFnaWxfY3JlYXRlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgLypYWFggQ2FuJ3QgdXNlIFB5VGhyZWFkX2ZyZWVfbG9jayBoZXJlIGJlY2F1c2UgaXQgZG9lcyB0b28KLSAgICAgIG11Y2ggZXJyb3ItY2hlY2tpbmcuICBEb2luZyB0aGlzIGNsZWFubHkgd291bGQgcmVxdWlyZQotICAgICAgYWRkaW5nIGEgbmV3IGZ1bmN0aW9uIHRvIGVhY2ggdGhyZWFkXyouaC4gIEluc3RlYWQsIGp1c3QKLSAgICAgIGNyZWF0ZSBhIG5ldyBsb2NrIGFuZCB3YXN0ZSBhIGxpdHRsZSBiaXQgb2YgbWVtb3J5ICovCi0gICAgaW50ZXJwcmV0ZXJfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICByZWNyZWF0ZV9naWwoKTsKICAgICBwZW5kaW5nX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7Ci0gICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGludGVycHJldGVyX2xvY2ssIDEpOworICAgIHRha2VfZ2lsKHRzdGF0ZSk7CiAgICAgbWFpbl90aHJlYWQgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CiAKICAgICAvKiBVcGRhdGUgdGhlIHRocmVhZGluZyBtb2R1bGUgd2l0aCB0aGUgbmV3IHN0YXRlLgpAQCAtMzE3LDcgKzM5OSwyMCBAQAogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICBQeV9ERUNSRUYodGhyZWFkaW5nKTsKIH0KLSNlbmRpZgorCisjZWxzZQorc3RhdGljIF9QeV9hdG9taWNfaW50IGV2YWxfYnJlYWtlciA9IHswfTsKK3N0YXRpYyBpbnQgcGVuZGluZ19hc3luY19leGMgPSAwOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzaWduYWwgdGhhdCBhc3luYyBleGNlcHRpb25zIGFyZSB3YWl0aW5nIHRvIGJlCisgICByYWlzZWQsIHRoZXJlZm9yZSBpdCBpcyBhbHNvIHVzZWZ1bCBpbiBub24tdGhyZWFkZWQgYnVpbGRzLiAqLworCit2b2lkCitfUHlFdmFsX1NpZ25hbEFzeW5jRXhjKHZvaWQpCit7CisgICAgU0lHTkFMX0FTWU5DX0VYQygpOworfQogCiAvKiBGdW5jdGlvbnMgc2F2ZV90aHJlYWQgYW5kIHJlc3RvcmVfdGhyZWFkIGFyZSBhbHdheXMgZGVmaW5lZCBzbwogICAgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgbmVlZG4ndCBiZSBjb21waWxlZCBzZXBhcmF0ZWx5IGZvciB1c2UKQEAgLTMzMCw4ICs0MjUsOCBAQAogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlFdmFsX1NhdmVUaHJlYWQ6IE5VTEwgdHN0YXRlIik7CiAjaWZkZWYgV0lUSF9USFJFQUQKLSAgICBpZiAoaW50ZXJwcmV0ZXJfbG9jaykKLSAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGludGVycHJldGVyX2xvY2spOworICAgIGlmIChnaWxfY3JlYXRlZCgpKQorICAgICAgICBkcm9wX2dpbCh0c3RhdGUpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRzdGF0ZTsKIH0KQEAgLTM0Miw5ICs0MzcsOSBAQAogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlFdmFsX1Jlc3RvcmVUaHJlYWQ6IE5VTEwgdHN0YXRlIik7CiAjaWZkZWYgV0lUSF9USFJFQUQKLSAgICBpZiAoaW50ZXJwcmV0ZXJfbG9jaykgeworICAgIGlmIChnaWxfY3JlYXRlZCgpKSB7CiAgICAgICAgIGludCBlcnIgPSBlcnJubzsKLSAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGludGVycHJldGVyX2xvY2ssIDEpOworICAgICAgICB0YWtlX2dpbCh0c3RhdGUpOwogICAgICAgICBlcnJubyA9IGVycjsKICAgICB9CiAjZW5kaWYKQEAgLTM5MCw3ICs0ODUsNiBAQAogfSBwZW5kaW5nY2FsbHNbTlBFTkRJTkdDQUxMU107CiBzdGF0aWMgaW50IHBlbmRpbmdmaXJzdCA9IDA7CiBzdGF0aWMgaW50IHBlbmRpbmdsYXN0ID0gMDsKLXN0YXRpYyB2b2xhdGlsZSBpbnQgcGVuZGluZ2NhbGxzX3RvX2RvID0gMTsgLyogdHJpZ2dlciBpbml0aWFsaXphdGlvbiBvZiBsb2NrICovCiBzdGF0aWMgY2hhciBwZW5kaW5nYnVzeSA9IDA7CiAKIGludApAQCAtNDI5LDggKzUyMyw3IEBACiAgICAgICAgIHBlbmRpbmdsYXN0ID0gajsKICAgICB9CiAgICAgLyogc2lnbmFsIG1haW4gbG9vcCAqLwotICAgIF9QeV9UaWNrZXIgPSAwOwotICAgIHBlbmRpbmdjYWxsc190b19kbyA9IDE7CisgICAgU0lHTkFMX1BFTkRJTkdfQ0FMTFMoKTsKICAgICBpZiAobG9jayAhPSBOVUxMKQogICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sobG9jayk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQ3Miw3ICs1NjUsMTAgQEAKICAgICAgICAgICAgIGFyZyA9IHBlbmRpbmdjYWxsc1tqXS5hcmc7CiAgICAgICAgICAgICBwZW5kaW5nZmlyc3QgPSAoaiArIDEpICUgTlBFTkRJTkdDQUxMUzsKICAgICAgICAgfQotICAgICAgICBwZW5kaW5nY2FsbHNfdG9fZG8gPSBwZW5kaW5nZmlyc3QgIT0gcGVuZGluZ2xhc3Q7CisgICAgICAgIGlmIChwZW5kaW5nZmlyc3QgIT0gcGVuZGluZ2xhc3QpCisgICAgICAgICAgICBTSUdOQUxfUEVORElOR19DQUxMUygpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBVTlNJR05BTF9QRU5ESU5HX0NBTExTKCk7CiAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhwZW5kaW5nX2xvY2spOwogICAgICAgICAvKiBoYXZpbmcgcmVsZWFzZWQgdGhlIGxvY2ssIHBlcmZvcm0gdGhlIGNhbGxiYWNrICovCiAgICAgICAgIGlmIChmdW5jID09IE5VTEwpCkBAIC01MTcsNyArNjEzLDcgQEAKIH0gcGVuZGluZ2NhbGxzW05QRU5ESU5HQ0FMTFNdOwogc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nZmlyc3QgPSAwOwogc3RhdGljIHZvbGF0aWxlIGludCBwZW5kaW5nbGFzdCA9IDA7Ci1zdGF0aWMgdm9sYXRpbGUgaW50IHBlbmRpbmdjYWxsc190b19kbyA9IDA7CitzdGF0aWMgX1B5X2F0b21pY19pbnQgcGVuZGluZ2NhbGxzX3RvX2RvID0gezB9OwogCiBpbnQKIFB5X0FkZFBlbmRpbmdDYWxsKGludCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKQEAgLTUzOCw4ICs2MzQsNyBAQAogICAgIHBlbmRpbmdjYWxsc1tpXS5hcmcgPSBhcmc7CiAgICAgcGVuZGluZ2xhc3QgPSBqOwogCi0gICAgX1B5X1RpY2tlciA9IDA7Ci0gICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gMTsgLyogU2lnbmFsIG1haW4gbG9vcCAqLworICAgIFNJR05BTF9QRU5ESU5HX0NBTExTKCk7CiAgICAgYnVzeSA9IDA7CiAgICAgLyogWFhYIEVuZCBjcml0aWNhbCBzZWN0aW9uICovCiAgICAgcmV0dXJuIDA7CkBAIC01NTIsNyArNjQ3LDcgQEAKICAgICBpZiAoYnVzeSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgYnVzeSA9IDE7Ci0gICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gMDsKKyAgICBVTlNJR05BTF9QRU5ESU5HX0NBTExTKCk7CiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgaTsKICAgICAgICAgaW50ICgqZnVuYykodm9pZCAqKTsKQEAgLTU2NSw3ICs2NjAsNyBAQAogICAgICAgICBwZW5kaW5nZmlyc3QgPSAoaSArIDEpICUgTlBFTkRJTkdDQUxMUzsKICAgICAgICAgaWYgKGZ1bmMoYXJnKSA8IDApIHsKICAgICAgICAgICAgIGJ1c3kgPSAwOwotICAgICAgICAgICAgcGVuZGluZ2NhbGxzX3RvX2RvID0gMTsgLyogV2UncmUgbm90IGRvbmUgeWV0ICovCisgICAgICAgICAgICBTSUdOQUxfUEVORElOR19DQUxMUygpOyAvKiBXZSdyZSBub3QgZG9uZSB5ZXQgKi8KICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTY1OCwxMyArNzUzLDEwIEBACiAgICBmYXN0X25leHRfb3Bjb2RlKi8KIHN0YXRpYyBpbnQgX1B5X1RyYWNpbmdQb3NzaWJsZSA9IDA7CiAKLS8qIGZvciBtYW5pcHVsYXRpbmcgdGhlIHRocmVhZCBzd2l0Y2ggYW5kIHBlcmlvZGljICJzdHVmZiIgLSB1c2VkIHRvIGJlCi0gICBwZXIgdGhyZWFkLCBub3cganVzdCBhIHBhaXIgbycgZ2xvYmFscyAqLwotaW50IF9QeV9DaGVja0ludGVydmFsID0gMTAwOwotdm9sYXRpbGUgaW50IF9QeV9UaWNrZXIgPSAwOyAvKiBzbyB0aGF0IHdlIGhpdCBhICJ0aWNrIiBmaXJzdCB0aGluZyAqLworCiAKIFB5T2JqZWN0ICoKLVB5RXZhbF9FdmFsQ29kZShQeUNvZGVPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscykKK1B5RXZhbF9FdmFsQ29kZShQeU9iamVjdCAqY28sIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzKQogewogICAgIHJldHVybiBQeUV2YWxfRXZhbENvZGVFeChjbywKICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxzLCBsb2NhbHMsCkBAIC03NjMsMTEgKzg1NSwyNCBAQAogICAgLWZuby1jcm9zc2p1bXBpbmcpLgogKi8KIAotI2lmIGRlZmluZWQoVVNFX0NPTVBVVEVEX0dPVE9TKSAmJiBkZWZpbmVkKERZTkFNSUNfRVhFQ1VUSU9OX1BST0ZJTEUpCisjaWZkZWYgRFlOQU1JQ19FWEVDVVRJT05fUFJPRklMRQogI3VuZGVmIFVTRV9DT01QVVRFRF9HT1RPUworI2RlZmluZSBVU0VfQ09NUFVURURfR09UT1MgMAogI2VuZGlmCiAKLSNpZmRlZiBVU0VfQ09NUFVURURfR09UT1MKKyNpZmRlZiBIQVZFX0NPTVBVVEVEX0dPVE9TCisgICAgI2lmbmRlZiBVU0VfQ09NUFVURURfR09UT1MKKyAgICAjZGVmaW5lIFVTRV9DT01QVVRFRF9HT1RPUyAxCisgICAgI2VuZGlmCisjZWxzZQorICAgICNpZiBkZWZpbmVkKFVTRV9DT01QVVRFRF9HT1RPUykgJiYgVVNFX0NPTVBVVEVEX0dPVE9TCisgICAgI2Vycm9yICJDb21wdXRlZCBnb3RvcyBhcmUgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGNvbXBpbGVyLiIKKyAgICAjZW5kaWYKKyAgICAjdW5kZWYgVVNFX0NPTVBVVEVEX0dPVE9TCisgICAgI2RlZmluZSBVU0VfQ09NUFVURURfR09UT1MgMAorI2VuZGlmCisKKyNpZiBVU0VfQ09NUFVURURfR09UT1MKIC8qIEltcG9ydCB0aGUgc3RhdGljIGp1bXAgdGFibGUgKi8KICNpbmNsdWRlICJvcGNvZGVfdGFyZ2V0cy5oIgogCkBAIC03OTEsMTEgKzg5Niw4IEBACiAKICNkZWZpbmUgRElTUEFUQ0goKSBcCiAgICAgeyBcCi0gICAgICAgIC8qIEF2b2lkIG11bHRpcGxlIGxvYWRzIGZyb20gX1B5X1RpY2tlciBkZXNwaXRlIGB2b2xhdGlsZWAgKi8gXAotICAgICAgICBpbnQgX3RpY2sgPSBfUHlfVGlja2VyIC0gMTsgXAotICAgICAgICBfUHlfVGlja2VyID0gX3RpY2s7IFwKLSAgICAgICAgaWYgKF90aWNrID49IDApIHsgXAotICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOyBcCisgICAgICAgIGlmICghX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmV2YWxfYnJlYWtlcikpIHsgICAgICBcCisgICAgICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsgXAogICAgICAgICB9IFwKICAgICAgICAgY29udGludWU7IFwKICAgICB9CkBAIC05MTYsNyArMTAxOCw3IEBACiAKICovCiAKLSNpZiBkZWZpbmVkKERZTkFNSUNfRVhFQ1VUSU9OX1BST0ZJTEUpIHx8IGRlZmluZWQoVVNFX0NPTVBVVEVEX0dPVE9TKQorI2lmIGRlZmluZWQoRFlOQU1JQ19FWEVDVVRJT05fUFJPRklMRSkgfHwgVVNFX0NPTVBVVEVEX0dPVE9TCiAjZGVmaW5lIFBSRURJQ1Qob3ApICAgICAgICAgICAgIGlmICgwKSBnb3RvIFBSRURfIyNvcAogI2RlZmluZSBQUkVESUNURUQob3ApICAgICAgICAgICBQUkVEXyMjb3A6CiAjZGVmaW5lIFBSRURJQ1RFRF9XSVRIX0FSRyhvcCkgIFBSRURfIyNvcDoKQEAgLTkzNywxMCArMTAzOSwxMiBAQAogI2RlZmluZSBTRUNPTkQoKSAgICAgICAgICAoc3RhY2tfcG9pbnRlclstMl0pCiAjZGVmaW5lIFRISVJEKCkgICAgICAgICAgIChzdGFja19wb2ludGVyWy0zXSkKICNkZWZpbmUgRk9VUlRIKCkgICAgICAgICAgKHN0YWNrX3BvaW50ZXJbLTRdKQorI2RlZmluZSBQRUVLKG4pICAgICAgICAgICAoc3RhY2tfcG9pbnRlclstKG4pXSkKICNkZWZpbmUgU0VUX1RPUCh2KSAgICAgICAgKHN0YWNrX3BvaW50ZXJbLTFdID0gKHYpKQogI2RlZmluZSBTRVRfU0VDT05EKHYpICAgICAoc3RhY2tfcG9pbnRlclstMl0gPSAodikpCiAjZGVmaW5lIFNFVF9USElSRCh2KSAgICAgIChzdGFja19wb2ludGVyWy0zXSA9ICh2KSkKICNkZWZpbmUgU0VUX0ZPVVJUSCh2KSAgICAgKHN0YWNrX3BvaW50ZXJbLTRdID0gKHYpKQorI2RlZmluZSBTRVRfVkFMVUUobiwgdikgICAoc3RhY2tfcG9pbnRlclstKG4pXSA9ICh2KSkKICNkZWZpbmUgQkFTSUNfU1RBQ0tBREoobikgKHN0YWNrX3BvaW50ZXIgKz0gbikKICNkZWZpbmUgQkFTSUNfUFVTSCh2KSAgICAgKCpzdGFja19wb2ludGVyKysgPSAodikpCiAjZGVmaW5lIEJBU0lDX1BPUCgpICAgICAgICgqLS1zdGFja19wb2ludGVyKQpAQCAtMTEyNCw3ICsxMjI4LDE2IEBACiAgICAgbGx0cmFjZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGYtPmZfZ2xvYmFscywgIl9fbGx0cmFjZV9fIikgIT0gTlVMTDsKICNlbmRpZgogI2lmIGRlZmluZWQoUHlfREVCVUcpIHx8IGRlZmluZWQoTExUUkFDRSkKLSAgICBmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoY28tPmNvX2ZpbGVuYW1lKTsKKyAgICB7CisgICAgICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisgICAgICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgICAgICBmaWxlbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoY28tPmNvX2ZpbGVuYW1lKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwgJiYgdHN0YXRlLT5vdmVyZmxvd2VkKSB7CisgICAgICAgICAgICAvKiBtYXhpbXVtIHJlY3Vyc2lvbiBkZXB0aCBleGNlZWRlZCAqLworICAgICAgICAgICAgZ290byBleGl0X2V2YWxfZnJhbWU7CisgICAgICAgIH0KKyAgICAgICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIHdoeSA9IFdIWV9OT1Q7CkBAIC0xMTY2LDU1ICsxMjc5LDQ2IEBACiAgICAgICAgICAgIGFzeW5jIEkvTyBoYW5kbGVyKTsgc2VlIFB5X0FkZFBlbmRpbmdDYWxsKCkgYW5kCiAgICAgICAgICAgIFB5X01ha2VQZW5kaW5nQ2FsbHMoKSBhYm92ZS4gKi8KIAotICAgICAgICBpZiAoLS1fUHlfVGlja2VyIDwgMCkgeworICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmV2YWxfYnJlYWtlcikpIHsKICAgICAgICAgICAgIGlmICgqbmV4dF9pbnN0ciA9PSBTRVRVUF9GSU5BTExZKSB7CiAgICAgICAgICAgICAgICAgLyogTWFrZSB0aGUgbGFzdCBvcGNvZGUgYmVmb3JlCiAgICAgICAgICAgICAgICAgICAgYSB0cnk6IGZpbmFsbHk6IGJsb2NrIHVuaW50ZXJydXB0aWJsZS4gKi8KICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfbmV4dF9vcGNvZGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBfUHlfVGlja2VyID0gX1B5X0NoZWNrSW50ZXJ2YWw7CiAgICAgICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlcisrOwogI2lmZGVmIFdJVEhfVFNDCiAgICAgICAgICAgICB0aWNrZWQgPSAxOwogI2VuZGlmCi0gICAgICAgICAgICBpZiAocGVuZGluZ2NhbGxzX3RvX2RvKSB7CisgICAgICAgICAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJnBlbmRpbmdjYWxsc190b19kbykpIHsKICAgICAgICAgICAgICAgICBpZiAoUHlfTWFrZVBlbmRpbmdDYWxscygpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocGVuZGluZ2NhbGxzX3RvX2RvKQotICAgICAgICAgICAgICAgICAgICAvKiBNYWtlUGVuZGluZ0NhbGxzKCkgZGlkbid0IHN1Y2NlZWQuCi0gICAgICAgICAgICAgICAgICAgICAgIEZvcmNlIGVhcmx5IHJlLWV4ZWN1dGlvbiBvZiB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICJwZXJpb2RpYyIgY29kZSwgcG9zc2libHkgYWZ0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgYSB0aHJlYWQgc3dpdGNoICovCi0gICAgICAgICAgICAgICAgICAgIF9QeV9UaWNrZXIgPSAwOwogICAgICAgICAgICAgfQogI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXJfbG9jaykgeworICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZnaWxfZHJvcF9yZXF1ZXN0KSkgewogICAgICAgICAgICAgICAgIC8qIEdpdmUgYW5vdGhlciB0aHJlYWQgYSBjaGFuY2UgKi8KLQogICAgICAgICAgICAgICAgIGlmIChQeVRocmVhZFN0YXRlX1N3YXAoTlVMTCkgIT0gdHN0YXRlKQogICAgICAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjZXZhbDogdHN0YXRlIG1peC11cCIpOwotICAgICAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhpbnRlcnByZXRlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICBkcm9wX2dpbCh0c3RhdGUpOwogCiAgICAgICAgICAgICAgICAgLyogT3RoZXIgdGhyZWFkcyBtYXkgcnVuIG5vdyAqLwogCi0gICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKGludGVycHJldGVyX2xvY2ssIDEpOworICAgICAgICAgICAgICAgIHRha2VfZ2lsKHRzdGF0ZSk7CiAgICAgICAgICAgICAgICAgaWYgKFB5VGhyZWFkU3RhdGVfU3dhcCh0c3RhdGUpICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNldmFsOiBvcnBoYW4gdHN0YXRlIik7Ci0KLSAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgdGhyZWFkIGludGVycnVwdHMgKi8KLQotICAgICAgICAgICAgICAgIGlmICh0c3RhdGUtPmFzeW5jX2V4YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSB0c3RhdGUtPmFzeW5jX2V4YzsKLSAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5hc3luY19leGMgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKHgpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmCisgICAgICAgICAgICAvKiBDaGVjayBmb3IgYXN5bmNocm9ub3VzIGV4Y2VwdGlvbnMuICovCisgICAgICAgICAgICBpZiAodHN0YXRlLT5hc3luY19leGMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHggPSB0c3RhdGUtPmFzeW5jX2V4YzsKKyAgICAgICAgICAgICAgICB0c3RhdGUtPmFzeW5jX2V4YyA9IE5VTEw7CisgICAgICAgICAgICAgICAgVU5TSUdOQUxfQVNZTkNfRVhDKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZSh4KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7CisgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICBnb3RvIG9uX2Vycm9yOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICBmYXN0X25leHRfb3Bjb2RlOgpAQCAtMTMzNSw1MCArMTQzOSwyMSBAQAogICAgICAgICAgICAgU0VUX1RISVJEKHYpOwogICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogCi0gICAgICAgIFRBUkdFVChST1RfRk9VUikKLSAgICAgICAgICAgIHUgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIHcgPSBUSElSRCgpOwotICAgICAgICAgICAgeCA9IEZPVVJUSCgpOwotICAgICAgICAgICAgU0VUX1RPUCh2KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7Ci0gICAgICAgICAgICBTRVRfVEhJUkQoeCk7Ci0gICAgICAgICAgICBTRVRfRk9VUlRIKHUpOwotICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwotCiAgICAgICAgIFRBUkdFVChEVVBfVE9QKQogICAgICAgICAgICAgdiA9IFRPUCgpOwogICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgUFVTSCh2KTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKIAotICAgICAgICBUQVJHRVQoRFVQX1RPUFgpCi0gICAgICAgICAgICBpZiAob3BhcmcgPT0gMikgewotICAgICAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKLSAgICAgICAgICAgICAgICBTVEFDS0FESigyKTsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7Ci0gICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvcGFyZyA9PSAzKSB7Ci0gICAgICAgICAgICAgICAgeCA9IFRPUCgpOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgICAgICB3ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHcpOwotICAgICAgICAgICAgICAgIHYgPSBUSElSRCgpOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBTVEFDS0FESigzKTsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgICAgIFNFVF9TRUNPTkQodyk7Ci0gICAgICAgICAgICAgICAgU0VUX1RISVJEKHYpOwotICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImludmFsaWQgYXJndW1lbnQgdG8gRFVQX1RPUFgiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgKGJ5dGVjb2RlIGNvcnJ1cHRpb24/KSIpOwotICAgICAgICAgICAgLyogTmV2ZXIgcmV0dXJucywgc28gZG9uJ3QgYm90aGVyIHRvIHNldCB3aHkuICovCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKQorICAgICAgICAgICAgeCA9IFRPUCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHgpOworICAgICAgICAgICAgdyA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlfSU5DUkVGKHcpOworICAgICAgICAgICAgU1RBQ0tBREooMik7CisgICAgICAgICAgICBTRVRfVE9QKHgpOworICAgICAgICAgICAgU0VUX1NFQ09ORCh3KTsKKyAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKIAogICAgICAgICBUQVJHRVQoVU5BUllfUE9TSVRJVkUpCiAgICAgICAgICAgICB2ID0gVE9QKCk7CkBAIC0xNTY2LDcgKzE2NDEsNyBAQAogCiAgICAgICAgIFRBUkdFVChMSVNUX0FQUEVORCkKICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBzdGFja19wb2ludGVyWy1vcGFyZ107CisgICAgICAgICAgICB2ID0gUEVFSyhvcGFyZyk7CiAgICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKHYsIHcpOwogICAgICAgICAgICAgUHlfREVDUkVGKHcpOwogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CkBAIC0xODQxLDE1ICsxOTE2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgY3JlYXRlZCB3aGVuIHRoZSBleGNlcHRpb24gd2FzIGNhdWdodCwgb3RoZXJ3aXNlCiAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGFjayB3aWxsIGJlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gKi8KICAgICAgICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgIT0gRVhDRVBUX0hBTkRMRVIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOwotICAgICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9OT1Q7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGItPmJfdHlwZSA9PSBFWENFUFRfSEFORExFUik7CisgICAgICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKKyAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHYpKSB7CkBAIC0xOTMzLDcgKzIwMDIsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAodW5wYWNrX2l0ZXJhYmxlKHYsIG9wYXJnLCAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyBvcGFyZykpIHsKLSAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICs9IG9wYXJnOworICAgICAgICAgICAgICAgIFNUQUNLQURKKG9wYXJnKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogdW5wYWNrX2l0ZXJhYmxlKCkgcmFpc2VkIGFuIGV4Y2VwdGlvbiAqLwogICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CkBAIC0yMDMzLDcgKzIxMDIsNyBAQAogICAgICAgICAgICAgICAgIC8qIElubGluZSB0aGUgUHlEaWN0X0dldEl0ZW0oKSBjYWxscy4KICAgICAgICAgICAgICAgICAgICBXQVJOSU5HOiB0aGlzIGlzIGFuIGV4dHJlbWUgc3BlZWQgaGFjay4KICAgICAgICAgICAgICAgICAgICBEbyBub3QgdHJ5IHRoaXMgYXQgaG9tZS4gKi8KLSAgICAgICAgICAgICAgICBsb25nIGhhc2ggPSAoKFB5VW5pY29kZU9iamVjdCAqKXcpLT5oYXNoOworICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoID0gKChQeVVuaWNvZGVPYmplY3QgKil3KS0+aGFzaDsKICAgICAgICAgICAgICAgICBpZiAoaGFzaCAhPSAtMSkgewogICAgICAgICAgICAgICAgICAgICBQeURpY3RPYmplY3QgKmQ7CiAgICAgICAgICAgICAgICAgICAgIFB5RGljdEVudHJ5ICplOwpAQCAtMjA5Myw2ICsyMTYyLDE2IEBACiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIFRBUkdFVChERUxFVEVfREVSRUYpCisgICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOworICAgICAgICAgICAgaWYgKFB5Q2VsbF9HRVQoeCkgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5Q2VsbF9TZXQoeCwgTlVMTCk7CisgICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IC0xOworICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBUQVJHRVQoTE9BRF9DTE9TVVJFKQogICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKQEAgLTIxMDgsMjIgKzIxODcsNyBAQAogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIC8qIERvbid0IHN0b21wIGV4aXN0aW5nIGV4Y2VwdGlvbiAqLwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAob3BhcmcgPCBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fY2VsbHZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcmcpOwotICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAotICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19VbmJvdW5kTG9jYWxFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICAgICAgICAgdik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHYgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgb3BhcmcgLQotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpOwotICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkJPVU5ERlJFRV9FUlJPUl9NU0csIHYpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpCkBAIC0yNDc0LDYgKzI1MzgsMzMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFDS19MRVZFTCgpKTsKICAgICAgICAgICAgIERJU1BBVENIKCk7CiAKKyAgICAgICAgVEFSR0VUKFNFVFVQX1dJVEgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqZXhpdCwgKmVudGVyOworICAgICAgICAgICAgdyA9IFRPUCgpOworICAgICAgICAgICAgeCA9IHNwZWNpYWxfbG9va3VwKHcsICJfX2V4aXRfXyIsICZleGl0KTsKKyAgICAgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFNFVF9UT1AoeCk7CisgICAgICAgICAgICB1ID0gc3BlY2lhbF9sb29rdXAodywgIl9fZW50ZXJfXyIsICZlbnRlcik7CisgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoIXUpIHsKKyAgICAgICAgICAgICAgICB4ID0gTlVMTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHggPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHUsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgaWYgKCF4KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogU2V0dXAgdGhlIGZpbmFsbHkgYmxvY2sgYmVmb3JlIHB1c2hpbmcgdGhlIHJlc3VsdAorICAgICAgICAgICAgICAgb2YgX19lbnRlcl9fIG9uIHRoZSBzdGFjay4gKi8KKyAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBTRVRVUF9GSU5BTExZLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOworCisgICAgICAgICAgICBQVVNIKHgpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCiAgICAgICAgIFRBUkdFVChXSVRIX0NMRUFOVVApCiAgICAgICAgIHsKICAgICAgICAgICAgIC8qIEF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGFyZSAxLTMgdmFsdWVzIGluZGljYXRpbmcKQEAgLTI0ODIsMzMgKzI1NzMsNzAgQEAKICAgICAgICAgICAgICAgIC0gKFRPUCwgU0VDT05EKSA9IChXSFlfe1JFVFVSTixDT05USU5VRX0pLCByZXR2YWwKICAgICAgICAgICAgICAgIC0gVE9QID0gV0hZXyo7IG5vIHJldHZhbCBiZWxvdyBpdAogICAgICAgICAgICAgICAgLSAoVE9QLCBTRUNPTkQsIFRISVJEKSA9IGV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICAgKEZPVVJUSCwgRklUSCwgU0lYVEgpID0gcHJldmlvdXMgZXhjZXB0aW9uIGZvciBFWENFUFRfSEFORExFUgogICAgICAgICAgICAgICAgQmVsb3cgdGhlbSBpcyBFWElULCB0aGUgY29udGV4dC5fX2V4aXRfXyBib3VuZCBtZXRob2QuCiAgICAgICAgICAgICAgICBJbiB0aGUgbGFzdCBjYXNlLCB3ZSBtdXN0IGNhbGwKICAgICAgICAgICAgICAgICAgRVhJVChUT1AsIFNFQ09ORCwgVEhJUkQpCiAgICAgICAgICAgICAgICBvdGhlcndpc2Ugd2UgbXVzdCBjYWxsCiAgICAgICAgICAgICAgICAgIEVYSVQoTm9uZSwgTm9uZSwgTm9uZSkKIAotICAgICAgICAgICAgICAgSW4gYWxsIGNhc2VzLCB3ZSByZW1vdmUgRVhJVCBmcm9tIHRoZSBzdGFjaywgbGVhdmluZwotICAgICAgICAgICAgICAgdGhlIHJlc3QgaW4gdGhlIHNhbWUgb3JkZXIuCisgICAgICAgICAgICAgICBJbiB0aGUgZmlyc3QgdHdvIGNhc2VzLCB3ZSByZW1vdmUgRVhJVCBmcm9tIHRoZQorICAgICAgICAgICAgICAgc3RhY2ssIGxlYXZpbmcgdGhlIHJlc3QgaW4gdGhlIHNhbWUgb3JkZXIuICBJbiB0aGUKKyAgICAgICAgICAgICAgIHRoaXJkIGNhc2UsIHdlIHNoaWZ0IHRoZSBib3R0b20gMyB2YWx1ZXMgb2YgdGhlCisgICAgICAgICAgICAgICBzdGFjayBkb3duLCBhbmQgcmVwbGFjZSB0aGUgZW1wdHkgc3BvdCB3aXRoIE5VTEwuCiAKICAgICAgICAgICAgICAgIEluIGFkZGl0aW9uLCBpZiB0aGUgc3RhY2sgcmVwcmVzZW50cyBhbiBleGNlcHRpb24sCiAgICAgICAgICAgICAgICAqYW5kKiB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5zIGEgJ3RydWUnIHZhbHVlLCB3ZQotICAgICAgICAgICAgICAgInphcCIgdGhpcyBpbmZvcm1hdGlvbiwgdG8gcHJldmVudCBFTkRfRklOQUxMWSBmcm9tCi0gICAgICAgICAgICAgICByZS1yYWlzaW5nIHRoZSBleGNlcHRpb24uICAoQnV0IG5vbi1sb2NhbCBnb3RvcwotICAgICAgICAgICAgICAgc2hvdWxkIHN0aWxsIGJlIHJlc3VtZWQuKQorICAgICAgICAgICAgICAgcHVzaCBXSFlfU0lMRU5DRUQgb250byB0aGUgc3RhY2suICBFTkRfRklOQUxMWSB3aWxsCisgICAgICAgICAgICAgICB0aGVuIG5vdCByZS1yYWlzZSB0aGUgZXhjZXB0aW9uLiAgKEJ1dCBub24tbG9jYWwKKyAgICAgICAgICAgICAgIGdvdG9zIHNob3VsZCBzdGlsbCBiZSByZXN1bWVkLikKICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0X2Z1bmMgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGl0X2Z1bmM7CiAgICAgICAgICAgICB1ID0gVE9QKCk7CiAgICAgICAgICAgICBpZiAodSA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpUE9QKCk7CisgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gVE9QKCk7CisgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKICAgICAgICAgICAgICAgICB2ID0gdyA9IFB5X05vbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sodSkpIHsKKyAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2goUHlMb25nX0FzTG9uZyh1KSkgeworICAgICAgICAgICAgICAgIGNhc2UgV0hZX1JFVFVSTjoKKyAgICAgICAgICAgICAgICBjYXNlIFdIWV9DT05USU5VRToKKyAgICAgICAgICAgICAgICAgICAgLyogUmV0dmFsIGluIFRPUC4gKi8KKyAgICAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gU0VDT05EKCk7CisgICAgICAgICAgICAgICAgICAgIFNFVF9TRUNPTkQoVE9QKCkpOworICAgICAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHUgPSB2ID0gdyA9IFB5X05vbmU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHAsICpleGMsICp0YjsKKyAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpibG9jazsKICAgICAgICAgICAgICAgICB2ID0gU0VDT05EKCk7CiAgICAgICAgICAgICAgICAgdyA9IFRISVJEKCk7CisgICAgICAgICAgICAgICAgdHAgPSBGT1VSVEgoKTsKKyAgICAgICAgICAgICAgICBleGMgPSBQRUVLKDUpOworICAgICAgICAgICAgICAgIHRiID0gUEVFSyg2KTsKKyAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBQRUVLKDcpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg3LCB0Yik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4Yyk7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDUsIHRwKTsKKyAgICAgICAgICAgICAgICAvKiBVTldJTkRfRVhDRVBUX0hBTkRMRVIgd2lsbCBwb3AgdGhpcyBvZmYuICovCisgICAgICAgICAgICAgICAgU0VUX0ZPVVJUSChOVUxMKTsKKyAgICAgICAgICAgICAgICAvKiBXZSBqdXN0IHNoaWZ0ZWQgdGhlIHN0YWNrIGRvd24sIHNvIHdlIGhhdmUKKyAgICAgICAgICAgICAgICAgICB0byB0ZWxsIHRoZSBleGNlcHQgaGFuZGxlciBibG9jayB0aGF0IHRoZQorICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgbG93ZXIgdGhhbiBpdCBleHBlY3RzLiAqLworICAgICAgICAgICAgICAgIGJsb2NrID0gJmYtPmZfYmxvY2tzdGFja1tmLT5mX2libG9jayAtIDFdOworICAgICAgICAgICAgICAgIGFzc2VydChibG9jay0+Yl90eXBlID09IEVYQ0VQVF9IQU5ETEVSKTsKKyAgICAgICAgICAgICAgICBibG9jay0+Yl9sZXZlbC0tOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogWFhYIE5vdCB0aGUgZmFzdGVzdCB3YXkgdG8gY2FsbCBpdC4uLiAqLwogICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCB1LCB2LCB3LApAQCAtMjUyOCwxMSArMjY1Niw3IEBACiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYW4gZXhjZXB0aW9uIGFuZCBhIFRydWUgcmV0dXJuICovCi0gICAgICAgICAgICAgICAgU1RBQ0tBREooLTIpOwotICAgICAgICAgICAgICAgIFNFVF9UT1AoUHlMb25nX0Zyb21Mb25nKChsb25nKSBXSFlfU0lMRU5DRUQpKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQVVNIKFB5TG9uZ19Gcm9tTG9uZygobG9uZykgV0hZX1NJTEVOQ0VEKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQUkVESUNUKEVORF9GSU5BTExZKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcxNywxMyArMjg0MSwxMyBAQAogICAgICAgICAgICAgb3BhcmcgPSBvcGFyZzw8MTYgfCBORVhUQVJHKCk7CiAgICAgICAgICAgICBnb3RvIGRpc3BhdGNoX29wY29kZTsKIAotI2lmZGVmIFVTRV9DT01QVVRFRF9HT1RPUworI2lmIFVTRV9DT01QVVRFRF9HT1RPUwogICAgICAgICBfdW5rbm93bl9vcGNvZGU6CiAjZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJYWFggbGluZW5vOiAlZCwgb3Bjb2RlOiAlZFxuIiwKLSAgICAgICAgICAgICAgICBQeUNvZGVfQWRkcjJMaW5lKGYtPmZfY29kZSwgZi0+Zl9sYXN0aSksCisgICAgICAgICAgICAgICAgUHlGcmFtZV9HZXRMaW5lTnVtYmVyKGYpLAogICAgICAgICAgICAgICAgIG9wY29kZSk7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJ1bmtub3duIG9wY29kZSIpOwogICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKQEAgLTI4MDEsMTkgKzI5MjUsMTggQEAKIAogZmFzdF9ibG9ja19lbmQ6CiAgICAgICAgIHdoaWxlICh3aHkgIT0gV0hZX05PVCAmJiBmLT5mX2libG9jayA+IDApIHsKLSAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgLyogUGVlayBhdCB0aGUgY3VycmVudCBibG9jay4gKi8KKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSAmZi0+Zl9ibG9ja3N0YWNrW2YtPmZfaWJsb2NrIC0gMV07CiAKICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEKTsKICAgICAgICAgICAgIGlmIChiLT5iX3R5cGUgPT0gU0VUVVBfTE9PUCAmJiB3aHkgPT0gV0hZX0NPTlRJTlVFKSB7Ci0gICAgICAgICAgICAgICAgLyogRm9yIGEgY29udGludWUgaW5zaWRlIGEgdHJ5IGJsb2NrLAotICAgICAgICAgICAgICAgICAgIGRvbid0IHBvcCB0aGUgYmxvY2sgZm9yIHRoZSBsb29wLiAqLwotICAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cChmLCBiLT5iX3R5cGUsIGItPmJfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYi0+Yl9sZXZlbCk7CiAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKICAgICAgICAgICAgICAgICBKVU1QVE8oUHlMb25nX0FTX0xPTkcocmV0dmFsKSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBOb3cgd2UgaGF2ZSB0byBwb3AgdGhlIGJsb2NrLiAqLworICAgICAgICAgICAgZi0+Zl9pYmxvY2stLTsKIAogICAgICAgICAgICAgaWYgKGItPmJfdHlwZSA9PSBFWENFUFRfSEFORExFUikgewogICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKQEAgLTI5MzcsMTUgKzMwNjAsMTcgQEAKICAgIHRoZSB0ZXN0IGluIHRoZSBpZiBzdGF0ZW1lbnRzIGluIE1pc2MvZ2RiaW5pdCAocHlzdGFjayBhbmQgcHlzdGFja3YpLiAqLwogCiBQeU9iamVjdCAqCi1QeUV2YWxfRXZhbENvZGVFeChQeUNvZGVPYmplY3QgKmNvLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKK1B5RXZhbF9FdmFsQ29kZUV4KFB5T2JqZWN0ICpfY28sIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAogICAgICAgICAgICBQeU9iamVjdCAqKmFyZ3MsIGludCBhcmdjb3VudCwgUHlPYmplY3QgKiprd3MsIGludCBrd2NvdW50LAogICAgICAgICAgICBQeU9iamVjdCAqKmRlZnMsIGludCBkZWZjb3VudCwgUHlPYmplY3QgKmt3ZGVmcywgUHlPYmplY3QgKmNsb3N1cmUpCiB7CisgICAgUHlDb2RlT2JqZWN0KiBjbyA9IChQeUNvZGVPYmplY3QqKV9jbzsKICAgICByZWdpc3RlciBQeUZyYW1lT2JqZWN0ICpmOwogICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIFB5T2JqZWN0ICp4LCAqdTsKKyAgICBpbnQgdG90YWxfYXJncyA9IGNvLT5jb19hcmdjb3VudCArIGNvLT5jb19rd29ubHlhcmdjb3VudDsKIAogICAgIGlmIChnbG9iYWxzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLApAQCAtMjk2Miw5ICszMDg3LDcgQEAKICAgICBmYXN0bG9jYWxzID0gZi0+Zl9sb2NhbHNwbHVzOwogICAgIGZyZWV2YXJzID0gZi0+Zl9sb2NhbHNwbHVzICsgY28tPmNvX25sb2NhbHM7CiAKLSAgICBpZiAoY28tPmNvX2FyZ2NvdW50ID4gMCB8fAotICAgICAgICBjby0+Y29fa3dvbmx5YXJnY291bnQgPiAwIHx8Ci0gICAgICAgIGNvLT5jb19mbGFncyAmIChDT19WQVJBUkdTIHwgQ09fVkFSS0VZV09SRFMpKSB7CisgICAgaWYgKHRvdGFsX2FyZ3MgfHwgY28tPmNvX2ZsYWdzICYgKENPX1ZBUkFSR1MgfCBDT19WQVJLRVlXT1JEUykpIHsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBuID0gYXJnY291bnQ7CiAgICAgICAgIFB5T2JqZWN0ICprd2RpY3QgPSBOVUxMOwpAQCAtMjk3Miw3ICszMDk1LDcgQEAKICAgICAgICAgICAgIGt3ZGljdCA9IFB5RGljdF9OZXcoKTsKICAgICAgICAgICAgIGlmIChrd2RpY3QgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICBpID0gY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OworICAgICAgICAgICAgaSA9IHRvdGFsX2FyZ3M7CiAgICAgICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykKICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBTRVRMT0NBTChpLCBrd2RpY3QpOwpAQCAtMjk4MSwxMyArMzEwNCwxMiBAQAogICAgICAgICAgICAgaWYgKCEoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiJVUoKSB0YWtlcyAlcyAlZCAiCi0gICAgICAgICAgICAgICAgICAgICIlc3Bvc2l0aW9uYWwgYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICAgICAgY28tPmNvX25hbWUsCiAgICAgICAgICAgICAgICAgICAgIGRlZmNvdW50ID8gImF0IG1vc3QiIDogImV4YWN0bHkiLAogICAgICAgICAgICAgICAgICAgICBjby0+Y29fYXJnY291bnQsCi0gICAgICAgICAgICAgICAgICAgIGt3Y291bnQgPyAibm9uLWtleXdvcmQgIiA6ICIiLAogICAgICAgICAgICAgICAgICAgICBjby0+Y29fYXJnY291bnQgPT0gMSA/ICIiIDogInMiLAotICAgICAgICAgICAgICAgICAgICBhcmdjb3VudCk7CisgICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ICsga3djb3VudCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IGNvLT5jb19hcmdjb3VudDsKQEAgLTMwMDEsNyArMzEyMyw3IEBACiAgICAgICAgICAgICB1ID0gUHlUdXBsZV9OZXcoYXJnY291bnQgLSBuKTsKICAgICAgICAgICAgIGlmICh1ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgU0VUTE9DQUwoY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50LCB1KTsKKyAgICAgICAgICAgIFNFVExPQ0FMKHRvdGFsX2FyZ3MsIHUpOwogICAgICAgICAgICAgZm9yIChpID0gbjsgaSA8IGFyZ2NvdW50OyBpKyspIHsKICAgICAgICAgICAgICAgICB4ID0gYXJnc1tpXTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CkBAIC0zMDIxLDE4ICszMTQzLDE0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBTcGVlZCBoYWNrOiBkbyByYXcgcG9pbnRlciBjb21wYXJlcy4gQXMgbmFtZXMgYXJlCiAgICAgICAgICAgICAgICBub3JtYWxseSBpbnRlcm5lZCB0aGlzIHNob3VsZCBhbG1vc3QgYWx3YXlzIGhpdC4gKi8KLSAgICAgICAgICAgIGNvX3Zhcm5hbWVzID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKGNvLT5jb192YXJuYW1lcyk7Ci0gICAgICAgICAgICBmb3IgKGogPSAwOwotICAgICAgICAgICAgICAgICBqIDwgY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwotICAgICAgICAgICAgICAgICBqKyspIHsKKyAgICAgICAgICAgIGNvX3Zhcm5hbWVzID0gKChQeVR1cGxlT2JqZWN0ICopKGNvLT5jb192YXJuYW1lcykpLT5vYl9pdGVtOworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvdGFsX2FyZ3M7IGorKykgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpubSA9IGNvX3Zhcm5hbWVzW2pdOwogICAgICAgICAgICAgICAgIGlmIChubSA9PSBrZXl3b3JkKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGt3X2ZvdW5kOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogU2xvdyBmYWxsYmFjaywganVzdCBpbiBjYXNlICovCi0gICAgICAgICAgICBmb3IgKGogPSAwOwotICAgICAgICAgICAgICAgICBqIDwgY28tPmNvX2FyZ2NvdW50ICsgY28tPmNvX2t3b25seWFyZ2NvdW50OwotICAgICAgICAgICAgICAgICBqKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0b3RhbF9hcmdzOyBqKyspIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbm0gPSBjb192YXJuYW1lc1tqXTsKICAgICAgICAgICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKAogICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLCBubSwgUHlfRVEpOwpAQCAtMzA0MSwyMiArMzE1OSwxNyBAQAogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNtcCA8IDApCiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIENoZWNrIGVycm9ycyBmcm9tIENvbXBhcmUgKi8KLSAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgaWYgKGogPj0gdG90YWxfYXJncyAmJiBrd2RpY3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlVSgpIGdvdCBhbiB1bmV4cGVjdGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmQgYXJndW1lbnQgJyVTJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLT5jb19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkKTsKICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICBpZiAoaiA+PSBjby0+Y29fYXJnY291bnQgKyBjby0+Y29fa3dvbmx5YXJnY291bnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoa3dkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlVSgpIGdvdCBhbiB1bmV4cGVjdGVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50ICclUyciLAotICAgICAgICAgICAgICAgICAgICAgICAgY28tPmNvX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShrd2RpY3QsIGtleXdvcmQsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLWt3X2ZvdW5kOgorICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0oa3dkaWN0LCBrZXl3b3JkLCB2YWx1ZSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICBrd19mb3VuZDoKICAgICAgICAgICAgIGlmIChHRVRMT0NBTChqKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJVUoKSBnb3QgbXVsdGlwbGUgIgpAQCAtMzA3MCwyMCArMzE4MywxOCBAQAogICAgICAgICAgICAgU0VUTE9DQUwoaiwgdmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChjby0+Y29fa3dvbmx5YXJnY291bnQgPiAwKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSBjby0+Y29fYXJnY291bnQ7Ci0gICAgICAgICAgICAgICAgIGkgPCBjby0+Y29fYXJnY291bnQgKyBjby0+Y29fa3dvbmx5YXJnY291bnQ7Ci0gICAgICAgICAgICAgICAgIGkrKykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lLCAqZGVmOworICAgICAgICAgICAgZm9yIChpID0gY28tPmNvX2FyZ2NvdW50OyBpIDwgdG90YWxfYXJnczsgaSsrKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWU7CiAgICAgICAgICAgICAgICAgaWYgKEdFVExPQ0FMKGkpICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb192YXJuYW1lcywgaSk7Ci0gICAgICAgICAgICAgICAgZGVmID0gTlVMTDsKLSAgICAgICAgICAgICAgICBpZiAoa3dkZWZzICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIGRlZiA9IFB5RGljdF9HZXRJdGVtKGt3ZGVmcywgbmFtZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWYpOwotICAgICAgICAgICAgICAgICAgICBTRVRMT0NBTChpLCBkZWYpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAoa3dkZWZzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmRlZiA9IFB5RGljdF9HZXRJdGVtKGt3ZGVmcywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChkZWYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgU0VUTE9DQUwoaSwgZGVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICIlVSgpIG5lZWRzIGtleXdvcmQtb25seSBhcmd1bWVudCAlUyIsCkBAIC0zMDk1LDE2ICszMjA2LDE5IEBACiAgICAgICAgICAgICBpbnQgbSA9IGNvLT5jb19hcmdjb3VudCAtIGRlZmNvdW50OwogICAgICAgICAgICAgZm9yIChpID0gYXJnY291bnQ7IGkgPCBtOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoR0VUTE9DQUwoaSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBpbnQgaiwgZ2l2ZW4gPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY28tPmNvX2FyZ2NvdW50OyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoR0VUTE9DQUwoaikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l2ZW4rKzsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICIlVSgpIHRha2VzICVzICVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICIlc3Bvc2l0aW9uYWwgYXJndW1lbnQlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQlcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAiKCVkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjby0+Y29fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICgoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZjb3VudCkgPyAiYXQgbGVhc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogImV4YWN0bHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgbSwga3djb3VudCA/ICJub24ta2V5d29yZCAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtID09IDEgPyAiIiA6ICJzIiwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0sIG0gPT0gMSA/ICIiIDogInMiLCBnaXZlbik7CiAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMTIxLDE0ICszMjM1LDEyIEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChhcmdjb3VudCA+IDAgfHwga3djb3VudCA+IDApIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVVKCkgdGFrZXMgbm8gYXJndW1lbnRzICglZCBnaXZlbikiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvLT5jb19uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ2NvdW50ICsga3djb3VudCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KKyAgICBlbHNlIGlmIChhcmdjb3VudCA+IDAgfHwga3djb3VudCA+IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICIlVSgpIHRha2VzIG5vIGFyZ3VtZW50cyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvLT5jb19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgYXJnY291bnQgKyBrd2NvdW50KTsKKyAgICAgICAgZ290byBmYWlsOwogICAgIH0KICAgICAvKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBzdG9yYWdlIGZvciBjZWxsIHZhcnMsIGFuZCBjb3B5IGZyZWUKICAgICAgICB2YXJzIGludG8gZnJhbWUuICBUaGlzIGlzbid0IHRvbyBlZmZpY2llbnQgcmlnaHQgbm93LiAqLwpAQCAtMzEzNyw3ICszMjQ5LDcgQEAKICAgICAgICAgUHlfVU5JQ09ERSAqY2VsbG5hbWUsICphcmduYW1lOwogICAgICAgICBQeU9iamVjdCAqYzsKIAotICAgICAgICBuYXJncyA9IGNvLT5jb19hcmdjb3VudCArIGNvLT5jb19rd29ubHlhcmdjb3VudDsKKyAgICAgICAgbmFyZ3MgPSB0b3RhbF9hcmdzOwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fVkFSQVJHUykKICAgICAgICAgICAgIG5hcmdzKys7CiAgICAgICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19WQVJLRVlXT1JEUykKQEAgLTMyMTMsNiArMzMyNSwxOSBAQAogfQogCiAKK3N0YXRpYyBQeU9iamVjdCAqCitzcGVjaWFsX2xvb2t1cChQeU9iamVjdCAqbywgY2hhciAqbWV0aCwgUHlPYmplY3QgKipjYWNoZSkKK3sKKyAgICBQeU9iamVjdCAqcmVzOworICAgIHJlcyA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG8sIG1ldGgsIGNhY2hlKTsKKyAgICBpZiAocmVzID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAqY2FjaGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworCiAvKiBMb2dpYyBmb3IgdGhlIHJhaXNlIHN0YXRlbWVudCAodG9vIGNvbXBsaWNhdGVkIGZvciBpbmxpbmluZykuCiAgICBUaGlzICpjb25zdW1lcyogYSByZWZlcmVuY2UgY291bnQgdG8gZWFjaCBvZiBpdHMgYXJndW1lbnRzLiAqLwogc3RhdGljIGVudW0gd2h5X2NvZGUKQEAgLTMzNDMsNyArMzQ2OCw4IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidG9vIG1hbnkgdmFsdWVzIHRvIHVucGFjayIpOworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInRvbyBtYW55IHZhbHVlcyB0byB1bnBhY2sgIgorICAgICAgICAgICAgICAgICAgICAgIihleHBlY3RlZCAlZCkiLCBhcmdjbnQpOwogICAgICAgICBnb3RvIEVycm9yOwogICAgIH0KIApAQCAtMzQ3MSwzMyArMzU5NywzMCBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIFNlZSBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHRyYWNpbmcgd29ya3MuICovCiBzdGF0aWMgaW50CiBtYXliZV9jYWxsX2xpbmVfdHJhY2UoUHlfdHJhY2VmdW5jIGZ1bmMsIFB5T2JqZWN0ICpvYmosCiAgICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUsIGludCAqaW5zdHJfbGIsIGludCAqaW5zdHJfdWIsCiAgICAgICAgICAgICAgICAgICAgICAgaW50ICppbnN0cl9wcmV2KQogewogICAgIGludCByZXN1bHQgPSAwOworICAgIGludCBsaW5lID0gZnJhbWUtPmZfbGluZW5vOwogCiAgICAgLyogSWYgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gZXhlY3V0ZWQgaXNuJ3QgaW4gdGhlIGN1cnJlbnQKLSAgICAgICBpbnN0cnVjdGlvbiB3aW5kb3csIHJlc2V0IHRoZSB3aW5kb3cuICBJZiB0aGUgbGFzdAotICAgICAgIGluc3RydWN0aW9uIGhhcHBlbnMgdG8gZmFsbCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9yIGlmIGl0Ci0gICAgICAgcmVwcmVzZW50cyBhIGp1bXAgYmFja3dhcmRzLCBjYWxsIHRoZSB0cmFjZSBmdW5jdGlvbi4KKyAgICAgICBpbnN0cnVjdGlvbiB3aW5kb3csIHJlc2V0IHRoZSB3aW5kb3cuCiAgICAgKi8KLSAgICBpZiAoKGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX2xiIHx8IGZyYW1lLT5mX2xhc3RpID49ICppbnN0cl91YikpIHsKLSAgICAgICAgaW50IGxpbmU7CisgICAgaWYgKGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX2xiIHx8IGZyYW1lLT5mX2xhc3RpID49ICppbnN0cl91YikgewogICAgICAgICBQeUFkZHJQYWlyIGJvdW5kczsKLQotICAgICAgICBsaW5lID0gUHlDb2RlX0NoZWNrTGluZU51bWJlcihmcmFtZS0+Zl9jb2RlLCBmcmFtZS0+Zl9sYXN0aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvdW5kcyk7Ci0gICAgICAgIGlmIChsaW5lID49IDApIHsKLSAgICAgICAgICAgIGZyYW1lLT5mX2xpbmVubyA9IGxpbmU7Ci0gICAgICAgICAgICByZXN1bHQgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7Ci0gICAgICAgIH0KKyAgICAgICAgbGluZSA9IF9QeUNvZGVfQ2hlY2tMaW5lTnVtYmVyKGZyYW1lLT5mX2NvZGUsIGZyYW1lLT5mX2xhc3RpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJvdW5kcyk7CiAgICAgICAgICppbnN0cl9sYiA9IGJvdW5kcy5hcF9sb3dlcjsKICAgICAgICAgKmluc3RyX3ViID0gYm91bmRzLmFwX3VwcGVyOwogICAgIH0KLSAgICBlbHNlIGlmIChmcmFtZS0+Zl9sYXN0aSA8PSAqaW5zdHJfcHJldikgeworICAgIC8qIElmIHRoZSBsYXN0IGluc3RydWN0aW9uIGZhbGxzIGF0IHRoZSBzdGFydCBvZiBhIGxpbmUgb3IgaWYKKyAgICAgICBpdCByZXByZXNlbnRzIGEganVtcCBiYWNrd2FyZHMsIHVwZGF0ZSB0aGUgZnJhbWUncyBsaW5lCisgICAgICAgbnVtYmVyIGFuZCBjYWxsIHRoZSB0cmFjZSBmdW5jdGlvbi4gKi8KKyAgICBpZiAoZnJhbWUtPmZfbGFzdGkgPT0gKmluc3RyX2xiIHx8IGZyYW1lLT5mX2xhc3RpIDwgKmluc3RyX3ByZXYpIHsKKyAgICAgICAgZnJhbWUtPmZfbGluZW5vID0gbGluZTsKICAgICAgICAgcmVzdWx0ID0gY2FsbF90cmFjZShmdW5jLCBvYmosIGZyYW1lLCBQeVRyYWNlX0xJTkUsIFB5X05vbmUpOwogICAgIH0KICAgICAqaW5zdHJfcHJldiA9IGZyYW1lLT5mX2xhc3RpOwpAQCAtMzYwMiwxOCArMzcyNSw3IEBACiAKIAogLyogRXh0ZXJuYWwgaW50ZXJmYWNlIHRvIGNhbGwgYW55IGNhbGxhYmxlIG9iamVjdC4KLSAgIFRoZSBhcmcgbXVzdCBiZSBhIHR1cGxlIG9yIE5VTEwuICovCi0KLSN1bmRlZiBQeUV2YWxfQ2FsbE9iamVjdAotLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGV4cG9ydCB0aGlzIGludGVyZmFjZSAqLwotCi1QeU9iamVjdCAqCi1QeUV2YWxfQ2FsbE9iamVjdChQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKLXsKLSAgICByZXR1cm4gUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoZnVuYywgYXJnLCAoUHlPYmplY3QgKilOVUxMKTsKLX0KLSNkZWZpbmUgUHlFdmFsX0NhbGxPYmplY3QoZnVuYyxhcmcpIFwKLSAgICBQeUV2YWxfQ2FsbE9iamVjdFdpdGhLZXl3b3JkcyhmdW5jLCBhcmcsIChQeU9iamVjdCAqKU5VTEwpCisgICBUaGUgYXJnIG11c3QgYmUgYSB0dXBsZSBvciBOVUxMLiAgVGhlIGt3IG11c3QgYmUgYSBkaWN0IG9yIE5VTEwuICovCiAKIFB5T2JqZWN0ICoKIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3cpCkBAIC0zODU4LDcgKzM5NzAsNyBAQAogICAgICAgICBkID0gJlB5VHVwbGVfR0VUX0lURU0oYXJnZGVmcywgMCk7CiAgICAgICAgIG5kID0gUHlfU0laRShhcmdkZWZzKTsKICAgICB9Ci0gICAgcmV0dXJuIFB5RXZhbF9FdmFsQ29kZUV4KGNvLCBnbG9iYWxzLAorICAgIHJldHVybiBQeUV2YWxfRXZhbENvZGVFeCgoUHlPYmplY3QqKWNvLCBnbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilOVUxMLCAoKnBwX3N0YWNrKS1uLCBuYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpwcF9zdGFjayktMipuaywgbmssIGQsIG5kLCBrd2RlZnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR0VUX0NMT1NVUkUoZnVuYykpOwpAQCAtNDI1NSw2ICs0MzY3LDI4IEBACiAgICAgUHlFcnJfRm9ybWF0KGV4YywgZm9ybWF0X3N0ciwgb2JqX3N0cik7CiB9CiAKK3N0YXRpYyB2b2lkCitmb3JtYXRfZXhjX3VuYm91bmQoUHlDb2RlT2JqZWN0ICpjbywgaW50IG9wYXJnKQoreworICAgIFB5T2JqZWN0ICpuYW1lOworICAgIC8qIERvbid0IHN0b21wIGV4aXN0aW5nIGV4Y2VwdGlvbiAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9wYXJnIDwgUHlUdXBsZV9HRVRfU0laRShjby0+Y29fY2VsbHZhcnMpKSB7CisgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19jZWxsdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhcmcpOworICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKKyAgICAgICAgICAgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAorICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKKyAgICAgICAgICAgIG5hbWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGNvLT5jb19mcmVldmFycywgb3BhcmcgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycykpOworICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQk9VTkRGUkVFX0VSUk9SX01TRywgbmFtZSk7CisgICAgfQorfQorCiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZV9jb25jYXRlbmF0ZShQeU9iamVjdCAqdiwgUHlPYmplY3QgKncsCiAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqZiwgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cikKQEAgLTQyNzAsNyArNDQwNCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICh2LT5vYl9yZWZjbnQgPT0gMikgeworICAgIGlmIChQeV9SRUZDTlQodikgPT0gMikgewogICAgICAgICAvKiBJbiB0aGUgY29tbW9uIGNhc2UsIHRoZXJlIGFyZSAyIHJlZmVyZW5jZXMgdG8gdGhlIHZhbHVlCiAgICAgICAgICAqIHN0b3JlZCBpbiAndmFyaWFibGUnIHdoZW4gdGhlICs9IGlzIHBlcmZvcm1lZDogb25lIG9uIHRoZQogICAgICAgICAgKiB2YWx1ZSBzdGFjayAoaW4gJ3YnKSBhbmQgb25lIHN0aWxsIHN0b3JlZCBpbiB0aGUKQEAgLTQzMTEsNyArNDQ0NSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAodi0+b2JfcmVmY250ID09IDEgJiYgIVB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkgeworICAgIGlmIChQeV9SRUZDTlQodikgPT0gMSAmJiAhUHlVbmljb2RlX0NIRUNLX0lOVEVSTkVEKHYpKSB7CiAgICAgICAgIC8qIE5vdyB3ZSBvd24gdGhlIGxhc3QgcmVmZXJlbmNlIHRvICd2Jywgc28gd2UgY2FuIHJlc2l6ZSBpdAogICAgICAgICAgKiBpbi1wbGFjZS4KICAgICAgICAgICovCmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWxfZ2lsLmggYi9QeXRob24vY2V2YWxfZ2lsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY3YTM1MAotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9jZXZhbF9naWwuaApAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBHbG9iYWwgSW50ZXJwcmV0ZXIgTG9jayAoR0lMKS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworCisvKiBGaXJzdCBzb21lIGdlbmVyYWwgc2V0dGluZ3MgKi8KKworLyogbWljcm9zZWNvbmRzICh0aGUgUHl0aG9uIEFQSSB1c2VzIHNlY29uZHMsIHRob3VnaCkgKi8KKyNkZWZpbmUgREVGQVVMVF9JTlRFUlZBTCA1MDAwCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnaWxfaW50ZXJ2YWwgPSBERUZBVUxUX0lOVEVSVkFMOworI2RlZmluZSBJTlRFUlZBTCAoZ2lsX2ludGVydmFsID49IDEgPyBnaWxfaW50ZXJ2YWwgOiAxKQorCisvKiBFbmFibGUgaWYgeW91IHdhbnQgdG8gZm9yY2UgdGhlIHN3aXRjaGluZyBvZiB0aHJlYWRzIGF0IGxlYXN0IGV2ZXJ5IGBnaWxfaW50ZXJ2YWxgICovCisjdW5kZWYgRk9SQ0VfU1dJVENISU5HCisjZGVmaW5lIEZPUkNFX1NXSVRDSElORworCisKKy8qCisgICBOb3RlcyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb246CisKKyAgIC0gVGhlIEdJTCBpcyBqdXN0IGEgYm9vbGVhbiB2YXJpYWJsZSAoZ2lsX2xvY2tlZCkgd2hvc2UgYWNjZXNzIGlzIHByb3RlY3RlZAorICAgICBieSBhIG11dGV4IChnaWxfbXV0ZXgpLCBhbmQgd2hvc2UgY2hhbmdlcyBhcmUgc2lnbmFsbGVkIGJ5IGEgY29uZGl0aW9uCisgICAgIHZhcmlhYmxlIChnaWxfY29uZCkuIGdpbF9tdXRleCBpcyB0YWtlbiBmb3Igc2hvcnQgcGVyaW9kcyBvZiB0aW1lLAorICAgICBhbmQgdGhlcmVmb3JlIG1vc3RseSB1bmNvbnRlbmRlZC4KKworICAgLSBJbiB0aGUgR0lMLWhvbGRpbmcgdGhyZWFkLCB0aGUgbWFpbiBsb29wIChQeUV2YWxfRXZhbEZyYW1lRXgpIG11c3QgYmUKKyAgICAgYWJsZSB0byByZWxlYXNlIHRoZSBHSUwgb24gZGVtYW5kIGJ5IGFub3RoZXIgdGhyZWFkLiBBIHZvbGF0aWxlIGJvb2xlYW4KKyAgICAgdmFyaWFibGUgKGdpbF9kcm9wX3JlcXVlc3QpIGlzIHVzZWQgZm9yIHRoYXQgcHVycG9zZSwgd2hpY2ggaXMgY2hlY2tlZAorICAgICBhdCBldmVyeSB0dXJuIG9mIHRoZSBldmFsIGxvb3AuIFRoYXQgdmFyaWFibGUgaXMgc2V0IGFmdGVyIGEgd2FpdCBvZgorICAgICBgaW50ZXJ2YWxgIG1pY3Jvc2Vjb25kcyBvbiBgZ2lsX2NvbmRgIGhhcyB0aW1lZCBvdXQuCisgICAgICAKKyAgICAgIFtBY3R1YWxseSwgYW5vdGhlciB2b2xhdGlsZSBib29sZWFuIHZhcmlhYmxlIChldmFsX2JyZWFrZXIpIGlzIHVzZWQKKyAgICAgICB3aGljaCBPUnMgc2V2ZXJhbCBjb25kaXRpb25zIGludG8gb25lLiBWb2xhdGlsZSBib29sZWFucyBhcmUKKyAgICAgICBzdWZmaWNpZW50IGFzIGludGVyLXRocmVhZCBzaWduYWxsaW5nIG1lYW5zIHNpbmNlIFB5dGhvbiBpcyBydW4KKyAgICAgICBvbiBjYWNoZS1jb2hlcmVudCBhcmNoaXRlY3R1cmVzIG9ubHkuXQorCisgICAtIEEgdGhyZWFkIHdhbnRpbmcgdG8gdGFrZSB0aGUgR0lMIHdpbGwgZmlyc3QgbGV0IHBhc3MgYSBnaXZlbiBhbW91bnQgb2YKKyAgICAgdGltZSAoYGludGVydmFsYCBtaWNyb3NlY29uZHMpIGJlZm9yZSBzZXR0aW5nIGdpbF9kcm9wX3JlcXVlc3QuIFRoaXMKKyAgICAgZW5jb3VyYWdlcyBhIGRlZmluZWQgc3dpdGNoaW5nIHBlcmlvZCwgYnV0IGRvZXNuJ3QgZW5mb3JjZSBpdCBzaW5jZQorICAgICBvcGNvZGVzIGNhbiB0YWtlIGFuIGFyYml0cmFyeSB0aW1lIHRvIGV4ZWN1dGUuCisgCisgICAgIFRoZSBgaW50ZXJ2YWxgIHZhbHVlIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHVzZXIgdG8gcmVhZCBhbmQgbW9kaWZ5CisgICAgIHVzaW5nIHRoZSBQeXRob24gQVBJIGBzeXMue2dldCxzZXR9c3dpdGNoaW50ZXJ2YWwoKWAuCisKKyAgIC0gV2hlbiBhIHRocmVhZCByZWxlYXNlcyB0aGUgR0lMIGFuZCBnaWxfZHJvcF9yZXF1ZXN0IGlzIHNldCwgdGhhdCB0aHJlYWQKKyAgICAgZW5zdXJlcyB0aGF0IGFub3RoZXIgR0lMLWF3YWl0aW5nIHRocmVhZCBnZXRzIHNjaGVkdWxlZC4KKyAgICAgSXQgZG9lcyBzbyBieSB3YWl0aW5nIG9uIGEgY29uZGl0aW9uIHZhcmlhYmxlIChzd2l0Y2hfY29uZCkgdW50aWwKKyAgICAgdGhlIHZhbHVlIG9mIGdpbF9sYXN0X2hvbGRlciBpcyBjaGFuZ2VkIHRvIHNvbWV0aGluZyBlbHNlIHRoYW4gaXRzCisgICAgIG93biB0aHJlYWQgc3RhdGUgcG9pbnRlciwgaW5kaWNhdGluZyB0aGF0IGFub3RoZXIgdGhyZWFkIHdhcyBhYmxlIHRvCisgICAgIHRha2UgdGhlIEdJTC4KKyAKKyAgICAgVGhpcyBpcyBtZWFudCB0byBwcm9oaWJpdCB0aGUgbGF0ZW5jeS1hZHZlcnNlIGJlaGF2aW91ciBvbiBtdWx0aS1jb3JlCisgICAgIG1hY2hpbmVzIHdoZXJlIG9uZSB0aHJlYWQgd291bGQgc3BlY3VsYXRpdmVseSByZWxlYXNlIHRoZSBHSUwsIGJ1dCBzdGlsbAorICAgICBydW4gYW5kIGVuZCB1cCBiZWluZyB0aGUgZmlyc3QgdG8gcmUtYWNxdWlyZSBpdCwgbWFraW5nIHRoZSAidGltZXNsaWNlcyIKKyAgICAgbXVjaCBsb25nZXIgdGhhbiBleHBlY3RlZC4KKyAgICAgKE5vdGU6IHRoaXMgbWVjaGFuaXNtIGlzIGVuYWJsZWQgd2l0aCBGT1JDRV9TV0lUQ0hJTkcgYWJvdmUpCisqLworCisjaWZuZGVmIF9QT1NJWF9USFJFQURTCisvKiBUaGlzIG1lYW5zIHB0aHJlYWRzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gbGliYyBoZWFkZXJzLCBoZW5jZSB0aGUgbWFjcm8KKyAgIG5vdCBwcmVzZW50IGluIHVuaXN0ZC5oLiBCdXQgdGhleSBzdGlsbCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYW4gZXh0ZXJuYWwKKyAgIGxpYnJhcnkgKGUuZy4gZ251IHB0aCBpbiBwdGhyZWFkIGVtdWxhdGlvbikgKi8KKyMgaWZkZWYgSEFWRV9QVEhSRUFEX0gKKyMgIGluY2x1ZGUgPHB0aHJlYWQuaD4gLyogX1BPU0lYX1RIUkVBRFMgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZmRlZiBfUE9TSVhfVEhSRUFEUworCisvKgorICogUE9TSVggc3VwcG9ydAorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNkZWZpbmUgQUREX01JQ1JPU0VDT05EUyh0diwgaW50ZXJ2YWwpIFwKK2RvIHsgXAorICAgIHR2LnR2X3VzZWMgKz0gKGxvbmcpIGludGVydmFsOyBcCisgICAgdHYudHZfc2VjICs9IHR2LnR2X3VzZWMgLyAxMDAwMDAwOyBcCisgICAgdHYudHZfdXNlYyAlPSAxMDAwMDAwOyBcCit9IHdoaWxlICgwKQorCisvKiBXZSBhc3N1bWUgYWxsIG1vZGVybiBQT1NJWCBzeXN0ZW1zIGhhdmUgZ2V0dGltZW9mZGF5KCkgKi8KKyNpZmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFoKKyNkZWZpbmUgR0VUVElNRU9GREFZKHB0dikgZ2V0dGltZW9mZGF5KHB0dikKKyNlbHNlCisjZGVmaW5lIEdFVFRJTUVPRkRBWShwdHYpIGdldHRpbWVvZmRheShwdHYsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKQorI2VuZGlmCisKKyNkZWZpbmUgTVVURVhfVCBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgTVVURVhfSU5JVChtdXQpIFwKKyAgICBpZiAocHRocmVhZF9tdXRleF9pbml0KCZtdXQsIE5VTEwpKSB7IFwKKyAgICAgICAgUHlfRmF0YWxFcnJvcigicHRocmVhZF9tdXRleF9pbml0KCIgI211dCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgTVVURVhfRklOSShtdXQpIFwKKyAgICBpZiAocHRocmVhZF9tdXRleF9kZXN0cm95KCZtdXQpKSB7IFwKKyAgICAgICAgUHlfRmF0YWxFcnJvcigicHRocmVhZF9tdXRleF9kZXN0cm95KCIgI211dCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgTVVURVhfTE9DSyhtdXQpIFwKKyAgICBpZiAocHRocmVhZF9tdXRleF9sb2NrKCZtdXQpKSB7IFwKKyAgICAgICAgUHlfRmF0YWxFcnJvcigicHRocmVhZF9tdXRleF9sb2NrKCIgI211dCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgTVVURVhfVU5MT0NLKG11dCkgXAorICAgIGlmIChwdGhyZWFkX211dGV4X3VubG9jaygmbXV0KSkgeyBcCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoInB0aHJlYWRfbXV0ZXhfdW5sb2NrKCIgI211dCAiKSBmYWlsZWQiKTsgfTsKKworI2RlZmluZSBDT05EX1QgcHRocmVhZF9jb25kX3QKKyNkZWZpbmUgQ09ORF9JTklUKGNvbmQpIFwKKyAgICBpZiAocHRocmVhZF9jb25kX2luaXQoJmNvbmQsIE5VTEwpKSB7IFwKKyAgICAgICAgUHlfRmF0YWxFcnJvcigicHRocmVhZF9jb25kX2luaXQoIiAjY29uZCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgQ09ORF9GSU5JKGNvbmQpIFwKKyAgICBpZiAocHRocmVhZF9jb25kX2Rlc3Ryb3koJmNvbmQpKSB7IFwKKyAgICAgICAgUHlfRmF0YWxFcnJvcigicHRocmVhZF9jb25kX2Rlc3Ryb3koIiAjY29uZCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgQ09ORF9TSUdOQUwoY29uZCkgXAorICAgIGlmIChwdGhyZWFkX2NvbmRfc2lnbmFsKCZjb25kKSkgeyBcCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoInB0aHJlYWRfY29uZF9zaWduYWwoIiAjY29uZCAiKSBmYWlsZWQiKTsgfTsKKyNkZWZpbmUgQ09ORF9XQUlUKGNvbmQsIG11dCkgXAorICAgIGlmIChwdGhyZWFkX2NvbmRfd2FpdCgmY29uZCwgJm11dCkpIHsgXAorICAgICAgICBQeV9GYXRhbEVycm9yKCJwdGhyZWFkX2NvbmRfd2FpdCgiICNjb25kICIpIGZhaWxlZCIpOyB9OworI2RlZmluZSBDT05EX1RJTUVEX1dBSVQoY29uZCwgbXV0LCBtaWNyb3NlY29uZHMsIHRpbWVvdXRfcmVzdWx0KSBcCisgICAgeyBcCisgICAgICAgIGludCByOyBcCisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsgXAorICAgICAgICBzdHJ1Y3QgdGltZXZhbCBkZWFkbGluZTsgXAorICAgICAgICBcCisgICAgICAgIEdFVFRJTUVPRkRBWSgmZGVhZGxpbmUpOyBcCisgICAgICAgIEFERF9NSUNST1NFQ09ORFMoZGVhZGxpbmUsIG1pY3Jvc2Vjb25kcyk7IFwKKyAgICAgICAgdHMudHZfc2VjID0gZGVhZGxpbmUudHZfc2VjOyBcCisgICAgICAgIHRzLnR2X25zZWMgPSBkZWFkbGluZS50dl91c2VjICogMTAwMDsgXAorICAgICAgICBcCisgICAgICAgIHIgPSBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCZjb25kLCAmbXV0LCAmdHMpOyBcCisgICAgICAgIGlmIChyID09IEVUSU1FRE9VVCkgXAorICAgICAgICAgICAgdGltZW91dF9yZXN1bHQgPSAxOyBcCisgICAgICAgIGVsc2UgaWYgKHIpIFwKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInB0aHJlYWRfY29uZF90aW1lZHdhaXQoIiAjY29uZCAiKSBmYWlsZWQiKTsgXAorICAgICAgICBlbHNlIFwKKyAgICAgICAgICAgIHRpbWVvdXRfcmVzdWx0ID0gMDsgXAorICAgIH0gXAorCisjZWxpZiBkZWZpbmVkKE5UX1RIUkVBRFMpCisKKy8qCisgKiBXaW5kb3dzICgyMDAwIGFuZCBsYXRlciwgYXMgd2VsbCBhcyAoaG9wZWZ1bGx5KSBDRSkgc3VwcG9ydAorICovCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKKyNkZWZpbmUgTVVURVhfVCBDUklUSUNBTF9TRUNUSU9OCisjZGVmaW5lIE1VVEVYX0lOSVQobXV0KSBkbyB7IFwKKyAgICBpZiAoIShJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uQW5kU3BpbkNvdW50KCYobXV0KSwgNDAwMCkpKSBcCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNyZWF0ZU11dGV4KCIgI211dCAiKSBmYWlsZWQiKTsgXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTVVURVhfRklOSShtdXQpIFwKKyAgICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJihtdXQpKQorI2RlZmluZSBNVVRFWF9MT0NLKG11dCkgXAorICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCYobXV0KSkKKyNkZWZpbmUgTVVURVhfVU5MT0NLKG11dCkgXAorICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCYobXV0KSkKKworLyogV2UgZW11bGF0ZSBjb25kaXRpb24gdmFyaWFibGVzIHdpdGggYSBzZW1hcGhvcmUuCisgICBXZSB1c2UgYSBTZW1hcGhvcmUgcmF0aGVyIHRoYW4gYW4gYXV0by1yZXNldCBldmVudCwgYmVjYXVzZSBhbHRob3VnaAorICAgYW4gYXV0by1yZXNlbnQgZXZlbnQgbWlnaHQgYXBwZWFyIHRvIHNvbHZlIHRoZSBsb3N0LXdha2V1cCBidWcgKHJhY2UKKyAgIGNvbmRpdGlvbiBiZXR3ZWVuIHJlbGVhc2luZyB0aGUgb3V0ZXIgbG9jayBhbmQgd2FpdGluZykgYmVjYXVzZSBpdAorICAgbWFpbnRhaW5zIHN0YXRlIGV2ZW4gdGhvdWdoIGEgd2FpdCBoYXNuJ3QgaGFwcGVuZWQsIHRoZXJlIGlzIHN0aWxsCisgICBhIGxvc3Qgd2FrZXVwIHByb2JsZW0gaWYgbW9yZSB0aGFuIG9uZSB0aHJlYWQgYXJlIGludGVycnVwdGVkIGluIHRoZQorICAgY3JpdGljYWwgcGxhY2UuICBBIHNlbWFwaG9yZSBzb2x2ZXMgdGhhdC4KKyAgIEJlY2F1c2UgaXQgaXMgb2sgdG8gc2lnbmFsIGEgY29uZGl0aW9uIHZhcmlhYmxlIHdpdGggbm8gb25lCisgICB3YWl0aW5nLCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG51bWJlciBvZgorICAgd2FpdGluZyB0aHJlYWRzLiAgT3RoZXJ3aXNlLCB0aGUgc2VtYXBob3JlJ3Mgc3RhdGUgY291bGQgcmlzZQorICAgd2l0aG91dCBib3VuZC4KKworICAgR2VuZXJpYyBlbXVsYXRpb25zIG9mIHRoZSBwdGhyZWFkX2NvbmRfKiBBUEkgdXNpbmcKKyAgIFdpbjMyIGZ1bmN0aW9ucyBjYW4gYmUgZm91bmQgb24gdGhlIFdlYi4KKyAgIFRoZSBmb2xsb3dpbmcgcmVhZCBjYW4gYmUgZWRpZmljYXRpbmcgKG9yIG5vdCk6CisgICBodHRwOi8vd3d3LmNzZS53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sCisqLwordHlwZWRlZiBzdHJ1Y3QgQ09ORF9UCit7CisgICAgSEFORExFIHNlbTsgICAgLyogdGhlIHNlbWFwaG9yZSAqLworICAgIGludCBuX3dhaXRpbmc7IC8qIGhvdyBtYW55IGFyZSB1bnJlbGVhc2VkICovCit9IENPTkRfVDsKKworX19pbmxpbmUgc3RhdGljIHZvaWQgX2NvbmRfaW5pdChDT05EX1QgKmNvbmQpCit7CisgICAgLyogQSBzZW1hcGhvcmUgd2l0aCBhIGxhcmdlIG1heCB2YWx1ZSwgIFRoZSBwb3NpdGl2ZSB2YWx1ZQorICAgICAqIGlzIG9ubHkgbmVlZGVkIHRvIGNhdGNoIHRob3NlICJsb3N0IHdha2V1cCIgZXZlbnRzIGFuZAorICAgICAqIHJhY2UgY29uZGl0aW9ucyB3aGVuIGEgdGltZWQgd2FpdCBlbGFwc2VzLgorICAgICAqLworICAgIGlmICghKGNvbmQtPnNlbSA9IENyZWF0ZVNlbWFwaG9yZShOVUxMLCAwLCAxMDAwLCBOVUxMKSkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNyZWF0ZVNlbWFwaG9yZSgpIGZhaWxlZCIpOworICAgIGNvbmQtPm5fd2FpdGluZyA9IDA7Cit9CisKK19faW5saW5lIHN0YXRpYyB2b2lkIF9jb25kX2ZpbmkoQ09ORF9UICpjb25kKQoreworICAgIEJPT0wgb2sgPSBDbG9zZUhhbmRsZShjb25kLT5zZW0pOworICAgIGlmICghb2spCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNsb3NlSGFuZGxlKCkgZmFpbGVkIik7Cit9CisKK19faW5saW5lIHN0YXRpYyB2b2lkIF9jb25kX3dhaXQoQ09ORF9UICpjb25kLCBNVVRFWF9UICptdXQpCit7CisgICAgKytjb25kLT5uX3dhaXRpbmc7CisgICAgTVVURVhfVU5MT0NLKCptdXQpOworICAgIC8qICJsb3N0IHdha2V1cCBidWciIHdvdWxkIG9jY3VyIGlmIHRoZSBjYWxsZXIgd2VyZSBpbnRlcnJ1cHRlZCBoZXJlLAorICAgICAqIGJ1dCB3ZSBhcmUgc2FmZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBhIHNlbWFwaG9yZSB3aWNoIGhhcyBhbiBpbnRlcm5hbAorICAgICAqIGNvdW50LgorICAgICAqLworICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGNvbmQtPnNlbSwgSU5GSU5JVEUpID09IFdBSVRfRkFJTEVEKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJXYWl0Rm9yU2luZ2xlT2JqZWN0KCkgZmFpbGVkIik7CisgICAgTVVURVhfTE9DSygqbXV0KTsKK30KKworX19pbmxpbmUgc3RhdGljIGludCBfY29uZF90aW1lZF93YWl0KENPTkRfVCAqY29uZCwgTVVURVhfVCAqbXV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzKQoreworICAgIERXT1JEIHI7CisgICAgKytjb25kLT5uX3dhaXRpbmc7CisgICAgTVVURVhfVU5MT0NLKCptdXQpOworICAgIHIgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0KGNvbmQtPnNlbSwgdXMgLyAxMDAwKTsKKyAgICBpZiAociA9PSBXQUlUX0ZBSUxFRCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiV2FpdEZvclNpbmdsZU9iamVjdCgpIGZhaWxlZCIpOworICAgIE1VVEVYX0xPQ0soKm11dCk7CisgICAgaWYgKHIgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICAtLWNvbmQtPm5fd2FpdGluZzsKKyAgICAgICAgLyogSGVyZSB3ZSBoYXZlIGEgYmVuaWduIHJhY2UgY29uZGl0aW9uIHdpdGggX2NvbmRfc2lnbmFsLiAgSWYgdGhlCisgICAgICAgICAqIHdhaXQgb3BlcmF0aW9uIGhhcyB0aW1lZCBvdXQsIGJ1dCBiZWZvcmUgd2UgY2FuIGFjcXVpcmUgdGhlCisgICAgICAgICAqIG11dGV4IGFnYWluIHRvIGRlY3JlbWVudCBuX3dhaXRpbmcsIGEgdGhyZWFkIGhvbGRpbmcgdGhlIG11dGV4CisgICAgICAgICAqIHN0aWxsIHNlZXMgYSBwb3NpdGl2ZSBuX3dhaXRpbmcgdmFsdWUgYW5kIG1heSBjYWxsCisgICAgICAgICAqIFJlbGVhc2VTZW1hcGhvcmUgYW5kIGRlY3JlbWVudCBuX3dhaXRpbmcuCisgICAgICAgICAqIFRoaXMgd2lsbCBjYXVzZSBuX3dhaXRpbmcgdG8gYmUgZGVjcmVtZW50ZWQgdHdpY2UuCisgICAgICAgICAqIFRoaXMgaXMgYmVuaWduLCB0aG91Z2gsIGJlY2F1c2UgUmVsZWFzZVNlbWFwaG9yZSB3aWxsIGFsc28gaGF2ZQorICAgICAgICAgKiBiZWVuIGNhbGxlZCwgbGVhdmluZyB0aGUgc2VtYXBob3JlIHN0YXRlIHBvc2l0aXZlLiAgV2UgbWF5CisgICAgICAgICAqIHRodXMgZW5kIHVwIHdpdGggc2VtYXBob3JlIGluIHN0YXRlIDEsIGFuZCBuX3dhaXRpbmcgPT0gLTEsIGFuZAorICAgICAgICAgKiB0aGUgbmV4dCB0aW1lIHNvbWVvbmUgY2FsbHMgX2NvbmRfd2FpdCgpLCB0aGF0IHRocmVhZCB3aWxsCisgICAgICAgICAqIHBhc3MgcmlnaHQgdGhyb3VnaCwgZGVjcmVtZW50aW5nIHRoZSBzZW1hcGhvcmUgc3RhdGUgYW5kCisgICAgICAgICAqIGluY3JlbWVudGluZyBuX3dhaXRpbmcsIHRodXMgY29ycmVjdGluZyB0aGUgZXh0cmEgX2NvbmRfc2lnbmFsLgorICAgICAgICAgKi8KKyAgICByZXR1cm4gciA9PSBXQUlUX1RJTUVPVVQ7Cit9CisKK19faW5saW5lIHN0YXRpYyB2b2lkIF9jb25kX3NpZ25hbChDT05EX1QgICpjb25kKSB7CisgICAgLyogTk9URTogVGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBtdXRleCBoZWxkICovCisgICAgaWYgKGNvbmQtPm5fd2FpdGluZyA+IDApIHsKKyAgICAgICAgaWYgKCFSZWxlYXNlU2VtYXBob3JlKGNvbmQtPnNlbSwgMSwgTlVMTCkpCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJSZWxlYXNlU2VtYXBob3JlKCkgZmFpbGVkIik7CisgICAgICAgIC0tY29uZC0+bl93YWl0aW5nOworICAgIH0KK30KKworI2RlZmluZSBDT05EX0lOSVQoY29uZCkgXAorICAgIF9jb25kX2luaXQoJihjb25kKSkKKyNkZWZpbmUgQ09ORF9GSU5JKGNvbmQpIFwKKyAgICBfY29uZF9maW5pKCYoY29uZCkpCisjZGVmaW5lIENPTkRfU0lHTkFMKGNvbmQpIFwKKyAgICBfY29uZF9zaWduYWwoJihjb25kKSkKKyNkZWZpbmUgQ09ORF9XQUlUKGNvbmQsIG11dCkgXAorICAgIF9jb25kX3dhaXQoJihjb25kKSwgJihtdXQpKQorI2RlZmluZSBDT05EX1RJTUVEX1dBSVQoY29uZCwgbXV0LCB1cywgdGltZW91dF9yZXN1bHQpIGRvIHsgXAorICAgICh0aW1lb3V0X3Jlc3VsdCkgPSBfY29uZF90aW1lZF93YWl0KCYoY29uZCksICYobXV0KSwgdXMpOyBcCit9IHdoaWxlICgwKQorCisjZWxzZQorCisjZXJyb3IgWW91IG5lZWQgZWl0aGVyIGEgUE9TSVgtY29tcGF0aWJsZSBvciBhIFdpbmRvd3Mgc3lzdGVtIQorCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRFMsIE5UX1RIUkVBRFMgKi8KKworCisvKiBXaGV0aGVyIHRoZSBHSUwgaXMgYWxyZWFkeSB0YWtlbiAoLTEgaWYgdW5pbml0aWFsaXplZCkuIFRoaXMgaXMgYXRvbWljCisgICBiZWNhdXNlIGl0IGNhbiBiZSByZWFkIHdpdGhvdXQgYW55IGxvY2sgdGFrZW4gaW4gY2V2YWwuYy4gKi8KK3N0YXRpYyBfUHlfYXRvbWljX2ludCBnaWxfbG9ja2VkID0gey0xfTsKKy8qIE51bWJlciBvZiBHSUwgc3dpdGNoZXMgc2luY2UgdGhlIGJlZ2lubmluZy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdpbF9zd2l0Y2hfbnVtYmVyID0gMDsKKy8qIExhc3QgUHlUaHJlYWRTdGF0ZSBob2xkaW5nIC8gaGF2aW5nIGhlbGQgdGhlIEdJTC4gVGhpcyBoZWxwcyB1cyBrbm93CisgICB3aGV0aGVyIGFueW9uZSBlbHNlIHdhcyBzY2hlZHVsZWQgYWZ0ZXIgd2UgZHJvcHBlZCB0aGUgR0lMLiAqLworc3RhdGljIF9QeV9hdG9taWNfYWRkcmVzcyBnaWxfbGFzdF9ob2xkZXIgPSB7TlVMTH07CisKKy8qIFRoaXMgY29uZGl0aW9uIHZhcmlhYmxlIGFsbG93cyBvbmUgb3Igc2V2ZXJhbCB0aHJlYWRzIHRvIHdhaXQgdW50aWwKKyAgIHRoZSBHSUwgaXMgcmVsZWFzZWQuIEluIGFkZGl0aW9uLCB0aGUgbXV0ZXggYWxzbyBwcm90ZWN0cyB0aGUgYWJvdmUKKyAgIHZhcmlhYmxlcy4gKi8KK3N0YXRpYyBDT05EX1QgZ2lsX2NvbmQ7CitzdGF0aWMgTVVURVhfVCBnaWxfbXV0ZXg7CisKKyNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKKy8qIFRoaXMgY29uZGl0aW9uIHZhcmlhYmxlIGhlbHBzIHRoZSBHSUwtcmVsZWFzaW5nIHRocmVhZCB3YWl0IGZvcgorICAgYSBHSUwtYXdhaXRpbmcgdGhyZWFkIHRvIGJlIHNjaGVkdWxlZCBhbmQgdGFrZSB0aGUgR0lMLiAqLworc3RhdGljIENPTkRfVCBzd2l0Y2hfY29uZDsKK3N0YXRpYyBNVVRFWF9UIHN3aXRjaF9tdXRleDsKKyNlbmRpZgorCisKK3N0YXRpYyBpbnQgZ2lsX2NyZWF0ZWQodm9pZCkKK3sKKyAgICByZXR1cm4gX1B5X2F0b21pY19sb2FkX2V4cGxpY2l0KCZnaWxfbG9ja2VkLCBfUHlfbWVtb3J5X29yZGVyX2FjcXVpcmUpID49IDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9naWwodm9pZCkKK3sKKyAgICBNVVRFWF9JTklUKGdpbF9tdXRleCk7CisjaWZkZWYgRk9SQ0VfU1dJVENISU5HCisgICAgTVVURVhfSU5JVChzd2l0Y2hfbXV0ZXgpOworI2VuZGlmCisgICAgQ09ORF9JTklUKGdpbF9jb25kKTsKKyNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKKyAgICBDT05EX0lOSVQoc3dpdGNoX2NvbmQpOworI2VuZGlmCisgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIsIE5VTEwpOworICAgIF9QeV9BTk5PVEFURV9SV0xPQ0tfQ1JFQVRFKCZnaWxfbG9ja2VkKTsKKyAgICBfUHlfYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZnaWxfbG9ja2VkLCAwLCBfUHlfbWVtb3J5X29yZGVyX3JlbGVhc2UpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2dpbCh2b2lkKQoreworICAgIE1VVEVYX0ZJTkkoZ2lsX211dGV4KTsKKyNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKKyAgICBNVVRFWF9GSU5JKHN3aXRjaF9tdXRleCk7CisjZW5kaWYKKyAgICBDT05EX0ZJTkkoZ2lsX2NvbmQpOworI2lmZGVmIEZPUkNFX1NXSVRDSElORworICAgIENPTkRfRklOSShzd2l0Y2hfY29uZCk7CisjZW5kaWYKKyAgICBfUHlfYXRvbWljX3N0b3JlX2V4cGxpY2l0KCZnaWxfbG9ja2VkLCAtMSwgX1B5X21lbW9yeV9vcmRlcl9yZWxlYXNlKTsKKyAgICBfUHlfQU5OT1RBVEVfUldMT0NLX0RFU1RST1koJmdpbF9sb2NrZWQpOworfQorCitzdGF0aWMgdm9pZCByZWNyZWF0ZV9naWwodm9pZCkKK3sKKyAgICBfUHlfQU5OT1RBVEVfUldMT0NLX0RFU1RST1koJmdpbF9sb2NrZWQpOworICAgIC8qIFhYWCBzaG91bGQgd2UgZGVzdHJveSB0aGUgb2xkIE9TIHJlc291cmNlcyBoZXJlPyAqLworICAgIGNyZWF0ZV9naWwoKTsKK30KKworc3RhdGljIHZvaWQgZHJvcF9naWwoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQoreworICAgIGlmICghX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9sb2NrZWQpKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJkcm9wX2dpbDogR0lMIGlzIG5vdCBsb2NrZWQiKTsKKyAgICAvKiB0c3RhdGUgaXMgYWxsb3dlZCB0byBiZSBOVUxMIChlYXJseSBpbnRlcnByZXRlciBpbml0KSAqLworICAgIGlmICh0c3RhdGUgIT0gTlVMTCkgeworICAgICAgICAvKiBTdWItaW50ZXJwcmV0ZXIgc3VwcG9ydDogdGhyZWFkcyBtaWdodCBoYXZlIGJlZW4gc3dpdGNoZWQKKyAgICAgICAgICAgdW5kZXIgb3VyIGZlZXQgdXNpbmcgUHlUaHJlYWRTdGF0ZV9Td2FwKCkuIEZpeCB0aGUgR0lMIGxhc3QKKyAgICAgICAgICAgaG9sZGVyIHZhcmlhYmxlIHNvIHRoYXQgb3VyIGhldXJpc3RpY3Mgd29yay4gKi8KKyAgICAgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZnaWxfbGFzdF9ob2xkZXIsIHRzdGF0ZSk7CisgICAgfQorCisgICAgTVVURVhfTE9DSyhnaWxfbXV0ZXgpOworICAgIF9QeV9BTk5PVEFURV9SV0xPQ0tfUkVMRUFTRUQoJmdpbF9sb2NrZWQsIC8qaXNfd3JpdGU9Ki8xKTsKKyAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9sb2NrZWQsIDApOworICAgIENPTkRfU0lHTkFMKGdpbF9jb25kKTsKKyAgICBNVVRFWF9VTkxPQ0soZ2lsX211dGV4KTsKKyAgICAKKyNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKKyAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QpICYmIHRzdGF0ZSAhPSBOVUxMKSB7CisgICAgICAgIE1VVEVYX0xPQ0soc3dpdGNoX211dGV4KTsKKyAgICAgICAgLyogTm90IHN3aXRjaGVkIHlldCA9PiB3YWl0ICovCisgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyKSA9PSB0c3RhdGUpIHsKKwkgICAgUkVTRVRfR0lMX0RST1BfUkVRVUVTVCgpOworICAgICAgICAgICAgLyogTk9URTogaWYgQ09ORF9XQUlUIGRvZXMgbm90IGF0b21pY2FsbHkgc3RhcnQgd2FpdGluZyB3aGVuCisgICAgICAgICAgICAgICByZWxlYXNpbmcgdGhlIG11dGV4LCBhbm90aGVyIHRocmVhZCBjYW4gcnVuIHRocm91Z2gsIHRha2UKKyAgICAgICAgICAgICAgIHRoZSBHSUwgYW5kIGRyb3AgaXQgYWdhaW4sIGFuZCByZXNldCB0aGUgY29uZGl0aW9uCisgICAgICAgICAgICAgICBiZWZvcmUgd2UgZXZlbiBoYWQgYSBjaGFuY2UgdG8gd2FpdCBmb3IgaXQuICovCisgICAgICAgICAgICBDT05EX1dBSVQoc3dpdGNoX2NvbmQsIHN3aXRjaF9tdXRleCk7CisJfQorICAgICAgICBNVVRFWF9VTkxPQ0soc3dpdGNoX211dGV4KTsKKyAgICB9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgdGFrZV9naWwoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQoreworICAgIGludCBlcnI7CisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJ0YWtlX2dpbDogTlVMTCB0c3RhdGUiKTsKKworICAgIGVyciA9IGVycm5vOworICAgIE1VVEVYX0xPQ0soZ2lsX211dGV4KTsKKworICAgIGlmICghX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9sb2NrZWQpKQorICAgICAgICBnb3RvIF9yZWFkeTsKKyAgICAKKyAgICB3aGlsZSAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9sb2NrZWQpKSB7CisgICAgICAgIGludCB0aW1lZF9vdXQgPSAwOworICAgICAgICB1bnNpZ25lZCBsb25nIHNhdmVkX3N3aXRjaG51bTsKKworICAgICAgICBzYXZlZF9zd2l0Y2hudW0gPSBnaWxfc3dpdGNoX251bWJlcjsKKyAgICAgICAgQ09ORF9USU1FRF9XQUlUKGdpbF9jb25kLCBnaWxfbXV0ZXgsIElOVEVSVkFMLCB0aW1lZF9vdXQpOworICAgICAgICAvKiBJZiB3ZSB0aW1lZCBvdXQgYW5kIG5vIHN3aXRjaCBvY2N1cnJlZCBpbiB0aGUgbWVhbnRpbWUsIGl0IGlzIHRpbWUKKyAgICAgICAgICAgdG8gYXNrIHRoZSBHSUwtaG9sZGluZyB0aHJlYWQgdG8gZHJvcCBpdC4gKi8KKyAgICAgICAgaWYgKHRpbWVkX291dCAmJgorICAgICAgICAgICAgX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9sb2NrZWQpICYmCisgICAgICAgICAgICBnaWxfc3dpdGNoX251bWJlciA9PSBzYXZlZF9zd2l0Y2hudW0pIHsKKyAgICAgICAgICAgIFNFVF9HSUxfRFJPUF9SRVFVRVNUKCk7CisgICAgICAgIH0KKyAgICB9CitfcmVhZHk6CisjaWZkZWYgRk9SQ0VfU1dJVENISU5HCisgICAgLyogVGhpcyBtdXRleCBtdXN0IGJlIHRha2VuIGJlZm9yZSBtb2RpZnlpbmcgZ2lsX2xhc3RfaG9sZGVyIChzZWUgZHJvcF9naWwoKSkuICovCisgICAgTVVURVhfTE9DSyhzd2l0Y2hfbXV0ZXgpOworI2VuZGlmCisgICAgLyogV2Ugbm93IGhvbGQgdGhlIEdJTCAqLworICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmZ2lsX2xvY2tlZCwgMSk7CisgICAgX1B5X0FOTk9UQVRFX1JXTE9DS19BQ1FVSVJFRCgmZ2lsX2xvY2tlZCwgLyppc193cml0ZT0qLzEpOworCisgICAgaWYgKHRzdGF0ZSAhPSBfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2xhc3RfaG9sZGVyKSkgeworICAgICAgICBfUHlfYXRvbWljX3N0b3JlX3JlbGF4ZWQoJmdpbF9sYXN0X2hvbGRlciwgdHN0YXRlKTsKKyAgICAgICAgKytnaWxfc3dpdGNoX251bWJlcjsKKyAgICB9CisKKyNpZmRlZiBGT1JDRV9TV0lUQ0hJTkcKKyAgICBDT05EX1NJR05BTChzd2l0Y2hfY29uZCk7CisgICAgTVVURVhfVU5MT0NLKHN3aXRjaF9tdXRleCk7CisjZW5kaWYKKyAgICBpZiAoX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJmdpbF9kcm9wX3JlcXVlc3QpKSB7CisgICAgICAgIFJFU0VUX0dJTF9EUk9QX1JFUVVFU1QoKTsKKyAgICB9CisgICAgaWYgKHRzdGF0ZS0+YXN5bmNfZXhjICE9IE5VTEwpIHsKKyAgICAgICAgX1B5RXZhbF9TaWduYWxBc3luY0V4YygpOworICAgIH0KKyAgICAKKyAgICBNVVRFWF9VTkxPQ0soZ2lsX211dGV4KTsKKyAgICBlcnJubyA9IGVycjsKK30KKwordm9pZCBfUHlFdmFsX1NldFN3aXRjaEludGVydmFsKHVuc2lnbmVkIGxvbmcgbWljcm9zZWNvbmRzKQoreworICAgIGdpbF9pbnRlcnZhbCA9IG1pY3Jvc2Vjb25kczsKK30KKwordW5zaWduZWQgbG9uZyBfUHlFdmFsX0dldFN3aXRjaEludGVydmFsKCkKK3sKKyAgICByZXR1cm4gZ2lsX2ludGVydmFsOworfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbXBpbGUuYyBiL1B5dGhvbi9jb21waWxlLmMKaW5kZXggMTliMmFkZC4uMWQ2ZTM4YyAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbXBpbGUuYworKysgYi9QeXRob24vY29tcGlsZS5jCkBAIC0yNSwxMCArMjUsOCBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLWFzdC5oIgogI2luY2x1ZGUgIm5vZGUuaCIKLSNpbmNsdWRlICJweWFyZW5hLmgiCiAjaW5jbHVkZSAiYXN0LmgiCiAjaW5jbHVkZSAiY29kZS5oIgotI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJzeW10YWJsZS5oIgogI2luY2x1ZGUgIm9wY29kZS5oIgogCkBAIC0xMTcsMTMgKzExNSwxMyBAQAogICAgICAgIG1lbWJlcnMsIHlvdSBjYW4gcmVhY2ggYWxsIGVhcmx5IGFsbG9jYXRlZCBibG9ja3MuICovCiAgICAgYmFzaWNibG9jayAqdV9ibG9ja3M7CiAgICAgYmFzaWNibG9jayAqdV9jdXJibG9jazsgLyogcG9pbnRlciB0byBjdXJyZW50IGJsb2NrICovCi0gICAgaW50IHVfdG1wbmFtZTsgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSB2YXJpYWJsZXMgZm9yIGxpc3QgY29tcHMgKi8KIAogICAgIGludCB1X25mYmxvY2tzOwogICAgIHN0cnVjdCBmYmxvY2tpbmZvIHVfZmJsb2NrW0NPX01BWEJMT0NLU107CiAKICAgICBpbnQgdV9maXJzdGxpbmVubzsgLyogdGhlIGZpcnN0IGxpbmVubyBvZiB0aGUgYmxvY2sgKi8KICAgICBpbnQgdV9saW5lbm87ICAgICAgICAgIC8qIHRoZSBsaW5lbm8gZm9yIHRoZSBjdXJyZW50IHN0bXQgKi8KKyAgICBpbnQgdV9jb2xfb2Zmc2V0OyAgICAgIC8qIHRoZSBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgc3RtdCAqLwogICAgIGludCB1X2xpbmVub19zZXQ7ICAvKiBib29sZWFuIHRvIGluZGljYXRlIHdoZXRoZXIgaW5zdHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZ2VuZXJhdGVkIHdpdGggY3VycmVudCBsaW5lbm8gKi8KIH07CkBAIC0xNDEsMTIgKzEzOSwxMiBAQAogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmNfZnV0dXJlOyAvKiBwb2ludGVyIHRvIG1vZHVsZSdzIF9fZnV0dXJlX18gKi8KICAgICBQeUNvbXBpbGVyRmxhZ3MgKmNfZmxhZ3M7CiAKKyAgICBpbnQgY19vcHRpbWl6ZTsgICAgICAgICAgICAgIC8qIG9wdGltaXphdGlvbiBsZXZlbCAqLwogICAgIGludCBjX2ludGVyYWN0aXZlOyAgICAgICAgICAgLyogdHJ1ZSBpZiBpbiBpbnRlcmFjdGl2ZSBtb2RlICovCiAgICAgaW50IGNfbmVzdGxldmVsOwogCiAgICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnU7IC8qIGNvbXBpbGVyIHN0YXRlIGZvciBjdXJyZW50IGJsb2NrICovCiAgICAgUHlPYmplY3QgKmNfc3RhY2s7ICAgICAgICAgICAvKiBQeXRob24gbGlzdCBob2xkaW5nIGNvbXBpbGVyX3VuaXQgcHRycyAqLwotICAgIGNoYXIgKmNfZW5jb2Rpbmc7ICAgICAgICAgICAgLyogc291cmNlIGVuY29kaW5nIChhIGJvcnJvd2VkIHJlZmVyZW5jZSkgKi8KICAgICBQeUFyZW5hICpjX2FyZW5hOyAgICAgICAgICAgIC8qIHBvaW50ZXIgdG8gbWVtb3J5IGFsbG9jYXRpb24gYXJlbmEgKi8KIH07CiAKQEAgLTE3OCw3ICsxNzYsNyBAQAogc3RhdGljIGludCBjb21waWxlcl9pbl9sb29wKHN0cnVjdCBjb21waWxlciAqKTsKIAogc3RhdGljIGludCBpbnBsYWNlX2Jpbm9wKHN0cnVjdCBjb21waWxlciAqLCBvcGVyYXRvcl90eSk7Ci1zdGF0aWMgaW50IGV4cHJfY29uc3RhbnQoZXhwcl90eSBlKTsKK3N0YXRpYyBpbnQgZXhwcl9jb25zdGFudChzdHJ1Y3QgY29tcGlsZXIgKiwgZXhwcl90eSk7CiAKIHN0YXRpYyBpbnQgY29tcGlsZXJfd2l0aChzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2NhbGxfaGVscGVyKHN0cnVjdCBjb21waWxlciAqYywgaW50IG4sCkBAIC0yNTcsOCArMjU1LDggQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKLVB5QVNUX0NvbXBpbGUobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCi0gICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgICAgICAgICAgICAgIGludCBvcHRpbWl6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgc3RydWN0IGNvbXBpbGVyIGM7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0yODYsNiArMjg0LDcgQEAKICAgICBjLmNfZnV0dXJlLT5mZl9mZWF0dXJlcyA9IG1lcmdlZDsKICAgICBmbGFncy0+Y2ZfZmxhZ3MgPSBtZXJnZWQ7CiAgICAgYy5jX2ZsYWdzID0gZmxhZ3M7CisgICAgYy5jX29wdGltaXplID0gKG9wdGltaXplID09IC0xKSA/IFB5X09wdGltaXplRmxhZyA6IG9wdGltaXplOwogICAgIGMuY19uZXN0bGV2ZWwgPSAwOwogCiAgICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKQEAgLTI5NSw5ICsyOTQsNiBAQAogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCi0gICAgLyogWFhYIGluaXRpYWxpemUgdG8gTlVMTCBmb3Igbm93LCBuZWVkIHRvIGhhbmRsZSAqLwotICAgIGMuY19lbmNvZGluZyA9IE5VTEw7Ci0KICAgICBjbyA9IGNvbXBpbGVyX21vZCgmYywgbW9kKTsKIAogIGZpbmFsbHk6CkBAIC00ODgsMTAgKzQ4NCwxMCBAQAogICAgIH0KIAogICAgIHUtPnVfYmxvY2tzID0gTlVMTDsKLSAgICB1LT51X3RtcG5hbWUgPSAwOwogICAgIHUtPnVfbmZibG9ja3MgPSAwOwogICAgIHUtPnVfZmlyc3RsaW5lbm8gPSBsaW5lbm87CiAgICAgdS0+dV9saW5lbm8gPSAwOworICAgIHUtPnVfY29sX29mZnNldCA9IDA7CiAgICAgdS0+dV9saW5lbm9fc2V0ID0gMDsKICAgICB1LT51X2NvbnN0cyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoIXUtPnVfY29uc3RzKSB7CkBAIC01NTEsMTYgKzU0Nyw2IEBACiAKIH0KIAotLyogQWxsb2NhdGUgYSBuZXcgImFub255bW91cyIgbG9jYWwgdmFyaWFibGUuICBVc2VkIGJ5IHdpdGggc3RhdGVtZW50cy4gKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLWNvbXBpbGVyX25ld190bXBuYW1lKHN0cnVjdCBjb21waWxlciAqYykKLXsKLSAgICBjaGFyIHRtcG5hbWVbMjU2XTsKLSAgICBQeU9TX3NucHJpbnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIl9bJWRdIiwgKytjLT51LT51X3RtcG5hbWUpOwotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyh0bXBuYW1lKTsKLX0KLQogLyogQWxsb2NhdGUgYSBuZXcgYmxvY2sgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gaXQuCiAgICBSZXR1cm5zIE5VTEwgb24gZXJyb3IuCiAqLwpAQCAtNjk2LDggKzY4Miw4IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgY2FzZSBEVVBfVE9QOgogICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgUk9UX0ZPVVI6Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBEVVBfVE9QX1RXTzoKKyAgICAgICAgICAgIHJldHVybiAyOwogCiAgICAgICAgIGNhc2UgVU5BUllfUE9TSVRJVkU6CiAgICAgICAgIGNhc2UgVU5BUllfTkVHQVRJVkU6CkBAIC03NTksNiArNzQ1LDggQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBCUkVBS19MT09QOgogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKKyAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCiAgICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgpAQCAtNzg2LDcgKzc3NCw3IEBACiAgICAgICAgIGNhc2UgVU5QQUNLX0VYOgogICAgICAgICAgICAgcmV0dXJuIChvcGFyZyYweEZGKSArIChvcGFyZz4+OCk7CiAgICAgICAgIGNhc2UgRk9SX0lURVI6Ci0gICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiBvciAtMSwgYXQgZW5kIG9mIGl0ZXJhdG9yICovCiAKICAgICAgICAgY2FzZSBTVE9SRV9BVFRSOgogICAgICAgICAgICAgcmV0dXJuIC0yOwpAQCAtNzk2LDggKzc4NCw2IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgREVMRVRFX0dMT0JBTDoKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIERVUF9UT1BYOgotICAgICAgICAgICAgcmV0dXJuIG9wYXJnOwogICAgICAgICBjYXNlIExPQURfQ09OU1Q6CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBMT0FEX05BTUU6CkBAIC04MTMsNyArNzk5LDcgQEAKICAgICAgICAgY2FzZSBDT01QQVJFX09QOgogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIElNUE9SVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgSU1QT1JUX0ZST006CiAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtODczLDYgKzg1OSw4IEBACiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBTVE9SRV9ERVJFRjoKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY2FzZSBERUxFVEVfREVSRUY6CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3Bjb2RlID0gJWRcbiIsIG9wY29kZSk7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJvcGNvZGVfc3RhY2tfZWZmZWN0KCkiKTsKQEAgLTkyMyw3ICs5MTEsNiBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB0ID0gUHlUdXBsZV9QYWNrKDIsIG8sIG8tPm9iX3R5cGUpOwogICAgIH0KLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgZWxzZSBpZiAoUHlDb21wbGV4X0NoZWNrKG8pKSB7CiAgICAgICAgIFB5X2NvbXBsZXggejsKICAgICAgICAgaW50IHJlYWxfbmVnemVybywgaW1hZ19uZWd6ZXJvOwpAQCAtOTQ4LDcgKzkzNSw2IEBACiAgICAgICAgICAgICB0ID0gUHlUdXBsZV9QYWNrKDIsIG8sIG8tPm9iX3R5cGUpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmIC8qIFdJVEhPVVRfQ09NUExFWCAqLwogICAgIGVsc2UgewogICAgICAgICB0ID0gUHlUdXBsZV9QYWNrKDIsIG8sIG8tPm9iX3R5cGUpOwogICAgIH0KQEAgLTExNjUsNyArMTE1MSw3IEBACiAgICAgaWYgKCFhc2RsX3NlcV9MRU4oc3RtdHMpKQogICAgICAgICByZXR1cm4gMTsKICAgICBzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChzdG10cywgMCk7Ci0gICAgaWYgKGNvbXBpbGVyX2lzZG9jc3RyaW5nKHN0KSAmJiBQeV9PcHRpbWl6ZUZsYWcgPCAyKSB7CisgICAgaWYgKGNvbXBpbGVyX2lzZG9jc3RyaW5nKHN0KSAmJiBjLT5jX29wdGltaXplIDwgMikgewogICAgICAgICAvKiBkb24ndCBnZW5lcmF0ZSBkb2NzdHJpbmdzIGlmIC1PTyAqLwogICAgICAgICBpID0gMTsKICAgICAgICAgVklTSVQoYywgZXhwciwgc3QtPnYuRXhwci52YWx1ZSk7CkBAIC0xNDc5LDcgKzE0NjUsNyBAQAogCiAgICAgc3QgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQocy0+di5GdW5jdGlvbkRlZi5ib2R5LCAwKTsKICAgICBkb2NzdHJpbmcgPSBjb21waWxlcl9pc2RvY3N0cmluZyhzdCk7Ci0gICAgaWYgKGRvY3N0cmluZyAmJiBQeV9PcHRpbWl6ZUZsYWcgPCAyKQorICAgIGlmIChkb2NzdHJpbmcgJiYgYy0+Y19vcHRpbWl6ZSA8IDIpCiAgICAgICAgIGZpcnN0X2NvbnN0ID0gc3QtPnYuRXhwci52YWx1ZS0+di5TdHIuczsKICAgICBpZiAoY29tcGlsZXJfYWRkX28oYywgYy0+dS0+dV9jb25zdHMsIGZpcnN0X2NvbnN0KSA8IDApICAgICAgewogICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwpAQCAtMTY3Niw2ICsxNjYyLDExIEBACiAgICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCAodm9pZCAqKWUsIGUtPmxpbmVubykpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgLyogTWFrZSBOb25lIHRoZSBmaXJzdCBjb25zdGFudCwgc28gdGhlIGxhbWJkYSBjYW4ndCBoYXZlIGEKKyAgICAgICBkb2NzdHJpbmcuICovCisgICAgaWYgKGNvbXBpbGVyX2FkZF9vKGMsIGMtPnUtPnVfY29uc3RzLCBQeV9Ob25lKSA8IDApCisgICAgICAgIHJldHVybiAwOworCiAgICAgYy0+dS0+dV9hcmdjb3VudCA9IGFzZGxfc2VxX0xFTihhcmdzLT5hcmdzKTsKICAgICBjLT51LT51X2t3b25seWFyZ2NvdW50ID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmt3b25seWFyZ3MpOwogICAgIFZJU0lUX0lOX1NDT1BFKGMsIGV4cHIsIGUtPnYuTGFtYmRhLmJvZHkpOwpAQCAtMTcwOCw3ICsxNjk5LDcgQEAKICAgICBpZiAoZW5kID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgY29uc3RhbnQgPSBleHByX2NvbnN0YW50KHMtPnYuSWYudGVzdCk7CisgICAgY29uc3RhbnQgPSBleHByX2NvbnN0YW50KGMsIHMtPnYuSWYudGVzdCk7CiAgICAgLyogY29uc3RhbnQgPSAwOiAiaWYgMCIKICAgICAgKiBjb25zdGFudCA9IDE6ICJpZiAxIiwgImlmIDIiLCAuLi4KICAgICAgKiBjb25zdGFudCA9IC0xOiByZXN0ICovCkBAIC0xNzU0LDkgKzE3NDUsNiBAQAogICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuRm9yLml0ZXIpOwogICAgIEFERE9QKGMsIEdFVF9JVEVSKTsKICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBzdGFydCk7Ci0gICAgLyogZm9yIGV4cHJlc3Npb25zIG11c3QgYmUgdHJhY2VkIG9uIGVhY2ggaXRlcmF0aW9uLAotICAgICAgIHNvIHdlIG5lZWQgdG8gc2V0IGFuIGV4dHJhIGxpbmUgbnVtYmVyLiAqLwotICAgIGMtPnUtPnVfbGluZW5vX3NldCA9IDA7CiAgICAgQURET1BfSlJFTChjLCBGT1JfSVRFUiwgY2xlYW51cCk7CiAgICAgVklTSVQoYywgZXhwciwgcy0+di5Gb3IudGFyZ2V0KTsKICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5Gb3IuYm9keSk7CkBAIC0xNzczLDcgKzE3NjEsNyBAQAogY29tcGlsZXJfd2hpbGUoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7CiAgICAgYmFzaWNibG9jayAqbG9vcCwgKm9yZWxzZSwgKmVuZCwgKmFuY2hvciA9IE5VTEw7Ci0gICAgaW50IGNvbnN0YW50ID0gZXhwcl9jb25zdGFudChzLT52LldoaWxlLnRlc3QpOworICAgIGludCBjb25zdGFudCA9IGV4cHJfY29uc3RhbnQoYywgcy0+di5XaGlsZS50ZXN0KTsKIAogICAgIGlmIChjb25zdGFudCA9PSAwKSB7CiAgICAgICAgIGlmIChzLT52LldoaWxlLm9yZWxzZSkKQEAgLTE4MDIsOSArMTc5MCw2IEBACiAgICAgaWYgKCFjb21waWxlcl9wdXNoX2ZibG9jayhjLCBMT09QLCBsb29wKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGNvbnN0YW50ID09IC0xKSB7Ci0gICAgICAgIC8qIHdoaWxlIGV4cHJlc3Npb25zIG11c3QgYmUgdHJhY2VkIG9uIGVhY2ggaXRlcmF0aW9uLAotICAgICAgICAgICBzbyB3ZSBuZWVkIHRvIHNldCBhbiBleHRyYSBsaW5lIG51bWJlci4gKi8KLSAgICAgICAgYy0+dS0+dV9saW5lbm9fc2V0ID0gMDsKICAgICAgICAgVklTSVQoYywgZXhwciwgcy0+di5XaGlsZS50ZXN0KTsKICAgICAgICAgQURET1BfSkFCUyhjLCBQT1BfSlVNUF9JRl9GQUxTRSwgYW5jaG9yKTsKICAgICB9CkBAIC0xOTgyLDYgKzE5NjcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsICJkZWZhdWx0ICdleGNlcHQ6JyBtdXN0IGJlIGxhc3QiKTsKICAgICAgICAgYy0+dS0+dV9saW5lbm9fc2V0ID0gMDsKICAgICAgICAgYy0+dS0+dV9saW5lbm8gPSBoYW5kbGVyLT5saW5lbm87CisgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCA9IGhhbmRsZXItPmNvbF9vZmZzZXQ7CiAgICAgICAgIGV4Y2VwdCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICAgICAgaWYgKGV4Y2VwdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTU0LDYgKzIxNDAsMTMgQEAKIAogICAgIFB5T2JqZWN0ICpuYW1lcyA9IFB5VHVwbGVfTmV3KG4pOwogICAgIFB5T2JqZWN0ICpsZXZlbDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKmVtcHR5X3N0cmluZzsKKworICAgIGlmICghZW1wdHlfc3RyaW5nKSB7CisgICAgICAgIGVtcHR5X3N0cmluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKyAgICAgICAgaWYgKCFlbXB0eV9zdHJpbmcpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBpZiAoIW5hbWVzKQogICAgICAgICByZXR1cm4gMDsKQEAgLTIxNzEsMjMgKzIxNjQsMjQgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShuYW1lcywgaSwgYWxpYXMtPm5hbWUpOwogICAgIH0KIAotICAgIGlmIChzLT5saW5lbm8gPiBjLT5jX2Z1dHVyZS0+ZmZfbGluZW5vKSB7Ci0gICAgICAgIGlmICghUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcocy0+di5JbXBvcnRGcm9tLm1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19mdXR1cmVfXyIpKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobGV2ZWwpOwotICAgICAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlcl9lcnJvcihjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIik7Ci0KLSAgICAgICAgfQorICAgIGlmIChzLT5saW5lbm8gPiBjLT5jX2Z1dHVyZS0+ZmZfbGluZW5vICYmIHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUsICJfX2Z1dHVyZV9fIikpIHsKKyAgICAgICAgUHlfREVDUkVGKGxldmVsKTsKKyAgICAgICAgUHlfREVDUkVGKG5hbWVzKTsKKyAgICAgICAgcmV0dXJuIGNvbXBpbGVyX2Vycm9yKGMsICJmcm9tIF9fZnV0dXJlX18gaW1wb3J0cyBtdXN0IG9jY3VyICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIik7CiAgICAgfQogCiAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBsZXZlbCwgY29uc3RzKTsKICAgICBQeV9ERUNSRUYobGV2ZWwpOwogICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgbmFtZXMsIGNvbnN0cyk7CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICBBRERPUF9OQU1FKGMsIElNUE9SVF9OQU1FLCBzLT52LkltcG9ydEZyb20ubW9kdWxlLCBuYW1lcyk7CisgICAgaWYgKHMtPnYuSW1wb3J0RnJvbS5tb2R1bGUpIHsKKyAgICAgICAgQURET1BfTkFNRShjLCBJTVBPUlRfTkFNRSwgcy0+di5JbXBvcnRGcm9tLm1vZHVsZSwgbmFtZXMpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgQURET1BfTkFNRShjLCBJTVBPUlRfTkFNRSwgZW1wdHlfc3RyaW5nLCBuYW1lcyk7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgYWxpYXNfdHkgYWxpYXMgPSAoYWxpYXNfdHkpYXNkbF9zZXFfR0VUKHMtPnYuSW1wb3J0RnJvbS5uYW1lcywgaSk7CiAgICAgICAgIGlkZW50aWZpZXIgc3RvcmVfbmFtZTsKQEAgLTIyMTksNyArMjIxMyw3IEBACiAgICAgc3RhdGljIFB5T2JqZWN0ICphc3NlcnRpb25fZXJyb3IgPSBOVUxMOwogICAgIGJhc2ljYmxvY2sgKmVuZDsKIAotICAgIGlmIChQeV9PcHRpbWl6ZUZsYWcpCisgICAgaWYgKGMtPmNfb3B0aW1pemUpCiAgICAgICAgIHJldHVybiAxOwogICAgIGlmIChhc3NlcnRpb25fZXJyb3IgPT0gTlVMTCkgewogICAgICAgICBhc3NlcnRpb25fZXJyb3IgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiQXNzZXJ0aW9uRXJyb3IiKTsKQEAgLTIyNTYsNiArMjI1MCw3IEBACiAKICAgICAvKiBBbHdheXMgYXNzaWduIGEgbGluZW5vIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIGZvciBhIHN0bXQuICovCiAgICAgYy0+dS0+dV9saW5lbm8gPSBzLT5saW5lbm87CisgICAgYy0+dS0+dV9jb2xfb2Zmc2V0ID0gcy0+Y29sX29mZnNldDsKICAgICBjLT51LT51X2xpbmVub19zZXQgPSAwOwogCiAgICAgc3dpdGNoIChzLT5raW5kKSB7CkBAIC0yNTE3LDEzICsyNTEyLDcgQEAKICAgICAgICAgY2FzZSBBdWdMb2FkOgogICAgICAgICBjYXNlIEF1Z1N0b3JlOgogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRGVsOgotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4gbm90IGRlbGV0ZSB2YXJpYWJsZSAnJVMnIHJlZmVyZW5jZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICJpbiBuZXN0ZWQgc2NvcGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgRGVsOiBvcCA9IERFTEVURV9ERVJFRjsgYnJlYWs7CiAgICAgICAgIGNhc2UgUGFyYW06CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0zMDI0LDcgKzMwMTMsNyBAQAogICovCiAKIHN0YXRpYyBpbnQKLWV4cHJfY29uc3RhbnQoZXhwcl90eSBlKQorZXhwcl9jb25zdGFudChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKICAgICBjaGFyICppZDsKICAgICBzd2l0Y2ggKGUtPmtpbmQpIHsKQEAgLTMwNDIsNyArMzAzMSw3IEBACiAgICAgICAgIGlmIChzdHJjbXAoaWQsICJGYWxzZSIpID09IDApIHJldHVybiAwOwogICAgICAgICBpZiAoc3RyY21wKGlkLCAiTm9uZSIpID09IDApIHJldHVybiAwOwogICAgICAgICBpZiAoc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAhIFB5X09wdGltaXplRmxhZzsKKyAgICAgICAgICAgIHJldHVybiAhIGMtPmNfb3B0aW1pemU7CiAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTMwNzUsODYgKzMwNjQsMzIgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3dpdGgoc3RydWN0IGNvbXBpbGVyICpjLCBzdG10X3R5IHMpCiB7Ci0gICAgc3RhdGljIGlkZW50aWZpZXIgZW50ZXJfYXR0ciwgZXhpdF9hdHRyOwogICAgIGJhc2ljYmxvY2sgKmJsb2NrLCAqZmluYWxseTsKLSAgICBpZGVudGlmaWVyIHRtcHZhbHVlID0gTlVMTCwgdG1wZXhpdCA9IE5VTEw7CiAKICAgICBhc3NlcnQocy0+a2luZCA9PSBXaXRoX2tpbmQpOwogCi0gICAgaWYgKCFlbnRlcl9hdHRyKSB7Ci0gICAgICAgIGVudGVyX2F0dHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19lbnRlcl9fIik7Ci0gICAgICAgIGlmICghZW50ZXJfYXR0cikKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAoIWV4aXRfYXR0cikgewotICAgICAgICBleGl0X2F0dHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19leGl0X18iKTsKLSAgICAgICAgaWYgKCFleGl0X2F0dHIpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KICAgICBibG9jayA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKICAgICBmaW5hbGx5ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIGlmICghYmxvY2sgfHwgIWZpbmFsbHkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKSB7Ci0gICAgICAgIC8qIENyZWF0ZSBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkIGNvbnRleHQuX19lbnRlcl9fKCkuCi0gICAgICAgICAgIFdlIG5lZWQgdG8gZG8gdGhpcyByYXRoZXIgdGhhbiBwcmVzZXJ2aW5nIGl0IG9uIHRoZSBzdGFjawotICAgICAgICAgICBiZWNhdXNlIFNFVFVQX0ZJTkFMTFkgcmVtZW1iZXJzIHRoZSBzdGFjayBsZXZlbC4KLSAgICAgICAgICAgV2UgbmVlZCB0byBkbyB0aGUgYXNzaWdubWVudCAqaW5zaWRlKiB0aGUgdHJ5L2ZpbmFsbHkKLSAgICAgICAgICAgc28gdGhhdCBjb250ZXh0Ll9fZXhpdF9fKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGFzc2lnbm1lbnQKLSAgICAgICAgICAgZmFpbHMuICBCdXQgd2UgbmVlZCB0byBjYWxsIGNvbnRleHQuX19lbnRlcl9fKCkgKmJlZm9yZSoKLSAgICAgICAgICAgdGhlIHRyeS9maW5hbGx5IHNvIHRoYXQgaWYgaXQgZmFpbHMgd2Ugd29uJ3QgY2FsbAotICAgICAgICAgICBjb250ZXh0Ll9fZXhpdF9fKCkuCi0gICAgICAgICovCi0gICAgICAgIHRtcHZhbHVlID0gY29tcGlsZXJfbmV3X3RtcG5hbWUoYyk7Ci0gICAgICAgIGlmICh0bXB2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgdG1wdmFsdWUpOwotICAgIH0KLSAgICB0bXBleGl0ID0gY29tcGlsZXJfbmV3X3RtcG5hbWUoYyk7Ci0gICAgaWYgKHRtcGV4aXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCB0bXBleGl0KTsKLQogICAgIC8qIEV2YWx1YXRlIEVYUFIgKi8KICAgICBWSVNJVChjLCBleHByLCBzLT52LldpdGguY29udGV4dF9leHByKTsKKyAgICBBRERPUF9KUkVMKGMsIFNFVFVQX1dJVEgsIGZpbmFsbHkpOwogCi0gICAgLyogU3F1aXJyZWwgYXdheSBjb250ZXh0Ll9fZXhpdF9fIGJ5IHN0dWZmaW5nIGl0IHVuZGVyIGNvbnRleHQgKi8KLSAgICBBRERPUChjLCBEVVBfVE9QKTsKLSAgICBBRERPUF9PKGMsIExPQURfQVRUUiwgZXhpdF9hdHRyLCBuYW1lcyk7Ci0gICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wZXhpdCwgU3RvcmUpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIENhbGwgY29udGV4dC5fX2VudGVyX18oKSAqLwotICAgIEFERE9QX08oYywgTE9BRF9BVFRSLCBlbnRlcl9hdHRyLCBuYW1lcyk7Ci0gICAgQURET1BfSShjLCBDQUxMX0ZVTkNUSU9OLCAwKTsKLQotICAgIGlmIChzLT52LldpdGgub3B0aW9uYWxfdmFycykgewotICAgICAgICAvKiBTdG9yZSBpdCBpbiB0bXB2YWx1ZSAqLwotICAgICAgICBpZiAoIWNvbXBpbGVyX25hbWVvcChjLCB0bXB2YWx1ZSwgU3RvcmUpKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBEaXNjYXJkIHJlc3VsdCBmcm9tIGNvbnRleHQuX19lbnRlcl9fKCkgKi8KLSAgICAgICAgQURET1AoYywgUE9QX1RPUCk7Ci0gICAgfQotCi0gICAgLyogU3RhcnQgdGhlIHRyeSBibG9jayAqLwotICAgIEFERE9QX0pSRUwoYywgU0VUVVBfRklOQUxMWSwgZmluYWxseSk7Ci0KKyAgICAvKiBTRVRVUF9XSVRIIHB1c2hlcyBhIGZpbmFsbHkgYmxvY2suICovCiAgICAgY29tcGlsZXJfdXNlX25leHRfYmxvY2soYywgYmxvY2spOwogICAgIGlmICghY29tcGlsZXJfcHVzaF9mYmxvY2soYywgRklOQUxMWV9UUlksIGJsb2NrKSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBpZiAocy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpIHsKLSAgICAgICAgLyogQmluZCBzYXZlZCByZXN1bHQgb2YgY29udGV4dC5fX2VudGVyX18oKSB0byBWQVIgKi8KLSAgICAgICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wdmFsdWUsIExvYWQpIHx8Ci0gICAgICAgICAgICAhY29tcGlsZXJfbmFtZW9wKGMsIHRtcHZhbHVlLCBEZWwpKQotICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuV2l0aC5vcHRpb25hbF92YXJzKTsKICAgICB9CisgICAgZWxzZSB7CisgICAgLyogRGlzY2FyZCByZXN1bHQgZnJvbSBjb250ZXh0Ll9fZW50ZXJfXygpICovCisgICAgICAgIEFERE9QKGMsIFBPUF9UT1ApOworICAgIH0KIAogICAgIC8qIEJMT0NLIGNvZGUgKi8KICAgICBWSVNJVF9TRVEoYywgc3RtdCwgcy0+di5XaXRoLmJvZHkpOwpAQCAtMzE3MSw5ICszMTA2LDYgQEAKICAgICAvKiBGaW5hbGx5IGJsb2NrIHN0YXJ0czsgY29udGV4dC5fX2V4aXRfXyBpcyBvbiB0aGUgc3RhY2sgdW5kZXIKICAgICAgICB0aGUgZXhjZXB0aW9uIG9yIHJldHVybiBpbmZvcm1hdGlvbi4gSnVzdCBpc3N1ZSBvdXIgbWFnaWMKICAgICAgICBvcGNvZGUuICovCi0gICAgaWYgKCFjb21waWxlcl9uYW1lb3AoYywgdG1wZXhpdCwgTG9hZCkgfHwKLSAgICAgICAgIWNvbXBpbGVyX25hbWVvcChjLCB0bXBleGl0LCBEZWwpKQotICAgICAgICByZXR1cm4gMDsKICAgICBBRERPUChjLCBXSVRIX0NMRUFOVVApOwogCiAgICAgLyogRmluYWxseSBibG9jayBlbmRzLiAqLwpAQCAtMzE5NCw2ICszMTI2LDggQEAKICAgICAgICAgYy0+dS0+dV9saW5lbm8gPSBlLT5saW5lbm87CiAgICAgICAgIGMtPnUtPnVfbGluZW5vX3NldCA9IDA7CiAgICAgfQorICAgIC8qIFVwZGF0aW5nIHRoZSBjb2x1bW4gb2Zmc2V0IGlzIGFsd2F5cyBoYXJtbGVzcy4gKi8KKyAgICBjLT51LT51X2NvbF9vZmZzZXQgPSBlLT5jb2xfb2Zmc2V0OwogICAgIHN3aXRjaCAoZS0+a2luZCkgewogICAgIGNhc2UgQm9vbE9wX2tpbmQ6CiAgICAgICAgIHJldHVybiBjb21waWxlcl9ib29sb3AoYywgZSk7CkBAIC0zNDI3LDcgKzMzNjEsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfZXJyb3Ioc3RydWN0IGNvbXBpbGVyICpjLCBjb25zdCBjaGFyICplcnJzdHIpCiB7Ci0gICAgUHlPYmplY3QgKmxvYzsKKyAgICBQeU9iamVjdCAqbG9jLCAqZmlsZW5hbWU7CiAgICAgUHlPYmplY3QgKnUgPSBOVUxMLCAqdiA9IE5VTEw7CiAKICAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubyk7CkBAIC0zNDM1LDggKzMzNjksMTcgQEAKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKHppT08pIiwgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCi0gICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSwgbG9jKTsKKyAgICBpZiAoYy0+Y19maWxlbmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChjLT5jX2ZpbGVuYW1lKTsKKyAgICAgICAgaWYgKCFmaWxlbmFtZSkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgZmlsZW5hbWUgPSBQeV9Ob25lOworICAgIH0KKyAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKE5paU8pIiwgZmlsZW5hbWUsIGMtPnUtPnVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgIGMtPnUtPnVfY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXUpCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKHpPKSIsIGVycnN0ciwgdSk7CkBAIC0zNDcwLDcgKzM0MTMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChjdHggPT0gQXVnTG9hZCkgewotICAgICAgICBBRERPUF9JKGMsIERVUF9UT1BYLCAyKTsKKyAgICAgICAgQURET1AoYywgRFVQX1RPUF9UV08pOwogICAgIH0KICAgICBlbHNlIGlmIChjdHggPT0gQXVnU3RvcmUpIHsKICAgICAgICAgQURET1AoYywgUk9UX1RIUkVFKTsKQEAgLTM2MDcsNyArMzU1MCw3IEBACiBzdGF0aWMgaW50CiBzdGFja2RlcHRoX3dhbGsoc3RydWN0IGNvbXBpbGVyICpjLCBiYXNpY2Jsb2NrICpiLCBpbnQgZGVwdGgsIGludCBtYXhkZXB0aCkKIHsKLSAgICBpbnQgaTsKKyAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoOwogICAgIHN0cnVjdCBpbnN0ciAqaW5zdHI7CiAgICAgaWYgKGItPmJfc2VlbiB8fCBiLT5iX3N0YXJ0ZGVwdGggPj0gZGVwdGgpCiAgICAgICAgIHJldHVybiBtYXhkZXB0aDsKQEAgLTM2MjAsOCArMzU2MywxNyBAQAogICAgICAgICAgICAgbWF4ZGVwdGggPSBkZXB0aDsKICAgICAgICAgYXNzZXJ0KGRlcHRoID49IDApOyAvKiBpbnZhbGlkIGNvZGUgb3IgYnVnIGluIHN0YWNrZGVwdGgoKSAqLwogICAgICAgICBpZiAoaW5zdHItPmlfanJlbCB8fCBpbnN0ci0+aV9qYWJzKSB7CisgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aDsKKyAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gRk9SX0lURVIpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRfZGVwdGggPSBkZXB0aC0yOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRklOQUxMWSB8fAorICAgICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRVhDRVBUKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoID0gZGVwdGgrMzsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X2RlcHRoID4gbWF4ZGVwdGgpCisgICAgICAgICAgICAgICAgICAgIG1heGRlcHRoID0gdGFyZ2V0X2RlcHRoOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWF4ZGVwdGggPSBzdGFja2RlcHRoX3dhbGsoYywgaW5zdHItPmlfdGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGgsIG1heGRlcHRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCwgbWF4ZGVwdGgpOwogICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wY29kZSA9PSBKVU1QX0FCU09MVVRFIHx8CiAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfRk9SV0FSRCkgewogICAgICAgICAgICAgICAgIGdvdG8gb3V0OyAvKiByZW1haW5pbmcgY29kZSBpcyBkZWFkICovCkBAIC0zNzA5LDUxICszNjYxLDkgQEAKICAgICByZXR1cm4gc2l6ZTsKIH0KIAotLyogQWxsIGFib3V0IGFfbG5vdGFiLgotCi1jX2xub3RhYiBpcyBhbiBhcnJheSBvZiB1bnNpZ25lZCBieXRlcyBkaXNndWlzZWQgYXMgYSBQeXRob24gc3RyaW5nLgotSXQgaXMgdXNlZCB0byBtYXAgYnl0ZWNvZGUgb2Zmc2V0cyB0byBzb3VyY2UgY29kZSBsaW5lICNzICh3aGVuIG5lZWRlZAotZm9yIHRyYWNlYmFja3MpLgotCi1UaGUgYXJyYXkgaXMgY29uY2VwdHVhbGx5IGEgbGlzdCBvZgotICAgIChieXRlY29kZSBvZmZzZXQgaW5jcmVtZW50LCBsaW5lIG51bWJlciBpbmNyZW1lbnQpCi1wYWlycy4gIFRoZSBkZXRhaWxzIGFyZSBpbXBvcnRhbnQgYW5kIGRlbGljYXRlLCBiZXN0IGlsbHVzdHJhdGVkIGJ5IGV4YW1wbGU6Ci0KLSAgICBieXRlIGNvZGUgb2Zmc2V0ICAgIHNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCi0gICAgMCAgICAgICAgICAgICAgICAgICAgICAgMQotICAgIDYgICAgICAgICAgICAgICAgICAgICAgIDIKLSAgICAgICA1MCAgICAgICAgICAgICAgICAgICA3Ci0gICAgICAzNTAgICAgICAgICAgICAgICAgIDMwNwotICAgICAgMzYxICAgICAgICAgICAgICAgICAzMDgKLQotVGhlIGZpcnN0IHRyaWNrIGlzIHRoYXQgdGhlc2UgbnVtYmVycyBhcmVuJ3Qgc3RvcmVkLCBvbmx5IHRoZSBpbmNyZW1lbnRzCi1mcm9tIG9uZSByb3cgdG8gdGhlIG5leHQgKHRoaXMgZG9lc24ndCByZWFsbHkgd29yaywgYnV0IGl0J3MgYSBzdGFydCk6Ci0KLSAgICAwLCAxLCAgNiwgMSwgIDQ0LCA1LCAgMzAwLCAzMDAsICAxMSwgMQotCi1UaGUgc2Vjb25kIHRyaWNrIGlzIHRoYXQgYW4gdW5zaWduZWQgYnl0ZSBjYW4ndCBob2xkIG5lZ2F0aXZlIHZhbHVlcywgb3IKLXZhbHVlcyBsYXJnZXIgdGhhbiAyNTUsIHNvIChhKSB0aGVyZSdzIGEgZGVlcCBhc3N1bXB0aW9uIHRoYXQgYnl0ZSBjb2RlCi1vZmZzZXRzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIGxpbmUgI3MgYm90aCBpbmNyZWFzZSBtb25vdG9uaWNhbGx5LCBhbmQgKGIpCi1pZiBhdCBsZWFzdCBvbmUgY29sdW1uIGp1bXBzIGJ5IG1vcmUgdGhhbiAyNTUgZnJvbSBvbmUgcm93IHRvIHRoZSBuZXh0LCBtb3JlCi10aGFuIG9uZSBwYWlyIGlzIHdyaXR0ZW4gdG8gdGhlIHRhYmxlLiBJbiBjYXNlICNiLCB0aGVyZSdzIG5vIHdheSB0byBrbm93Ci1mcm9tIGxvb2tpbmcgYXQgdGhlIHRhYmxlIGxhdGVyIGhvdyBtYW55IHdlcmUgd3JpdHRlbi4gIFRoYXQncyB0aGUgZGVsaWNhdGUKLXBhcnQuICBBIHVzZXIgb2YgY19sbm90YWIgZGVzaXJpbmcgdG8gZmluZCB0aGUgc291cmNlIGxpbmUgbnVtYmVyCi1jb3JyZXNwb25kaW5nIHRvIGEgYnl0ZWNvZGUgYWRkcmVzcyBBIHNob3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzCi0KLSAgICBsaW5lbm8gPSBhZGRyID0gMAotICAgIGZvciBhZGRyX2luY3IsIGxpbmVfaW5jciBpbiBjX2xub3RhYjoKLSAgICBhZGRyICs9IGFkZHJfaW5jcgotICAgIGlmIGFkZHIgPiBBOgotICAgICAgICByZXR1cm4gbGluZW5vCi0gICAgbGluZW5vICs9IGxpbmVfaW5jcgotCi1JbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3aGVuIHRoZSBhZGRyIGZpZWxkIGluY3JlbWVudHMgYnkgbW9yZSB0aGFuIDI1NSwKLXRoZSBsaW5lICMgaW5jcmVtZW50IGluIGVhY2ggcGFpciBnZW5lcmF0ZWQgbXVzdCBiZSAwIHVudGlsIHRoZSByZW1haW5pbmcgYWRkcgotaW5jcmVtZW50IGlzIDwgMjU2LiAgU28sIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhc3NlbWJsZV9sbm90YWIgKGl0IHVzZWQKLXRvIGJlIGNhbGxlZCBjb21fc2V0X2xpbmVubykgc2hvdWxkIG5vdCAoYXMgd2FzIGFjdHVhbGx5IGRvbmUgdW50aWwgMi4yKQotZXhwYW5kIDMwMCwgMzAwIHRvIDI1NSwgMjU1LCA0NSwgNDUsCi0gICAgICAgICAgICBidXQgdG8gMjU1LCAgIDAsIDQ1LCAyNTUsIDAsIDQ1LgotKi8KKy8qIEFwcGVuZHMgYSBwYWlyIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUgbnVtYmVyIHRhYmxlLCBhX2xub3RhYiwgcmVwcmVzZW50aW5nCisgICB0aGUgaW5zdHJ1Y3Rpb24ncyBieXRlY29kZSBvZmZzZXQgYW5kIGxpbmUgbnVtYmVyLiAgU2VlCisgICBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGluZSBudW1iZXIgdGFibGUuICovCiAKIHN0YXRpYyBpbnQKIGFzc2VtYmxlX2xub3RhYihzdHJ1Y3QgYXNzZW1ibGVyICphLCBzdHJ1Y3QgaW5zdHIgKmkpCkBAIC0zODk1LDQ5ICszODA1LDQ3IEBACiBhc3NlbWJsZV9qdW1wX29mZnNldHMoc3RydWN0IGFzc2VtYmxlciAqYSwgc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIGJhc2ljYmxvY2sgKmI7Ci0gICAgaW50IGJzaXplLCB0b3RzaXplLCBleHRlbmRlZF9hcmdfY291bnQsIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ID0gMDsKKyAgICBpbnQgYnNpemUsIHRvdHNpemUsIGV4dGVuZGVkX2FyZ19jb3VudCA9IDAsIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50OwogICAgIGludCBpOwogCiAgICAgLyogQ29tcHV0ZSB0aGUgc2l6ZSBvZiBlYWNoIGJsb2NrIGFuZCBmaXh1cCBqdW1wIGFyZ3MuCiAgICAgICAgUmVwbGFjZSBibG9jayBwb2ludGVyIHdpdGggcG9zaXRpb24gaW4gYnl0ZWNvZGUuICovCi1zdGFydDoKLSAgICB0b3RzaXplID0gMDsKLSAgICBmb3IgKGkgPSBhLT5hX25ibG9ja3MgLSAxOyBpID49IDA7IGktLSkgewotICAgICAgICBiID0gYS0+YV9wb3N0b3JkZXJbaV07Ci0gICAgICAgIGJzaXplID0gYmxvY2tzaXplKGIpOwotICAgICAgICBiLT5iX29mZnNldCA9IHRvdHNpemU7Ci0gICAgICAgIHRvdHNpemUgKz0gYnNpemU7Ci0gICAgfQotICAgIGV4dGVuZGVkX2FyZ19jb3VudCA9IDA7Ci0gICAgZm9yIChiID0gYy0+dS0+dV9ibG9ja3M7IGIgIT0gTlVMTDsgYiA9IGItPmJfbGlzdCkgewotICAgICAgICBic2l6ZSA9IGItPmJfb2Zmc2V0OwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYi0+Yl9pdXNlZDsgaSsrKSB7Ci0gICAgICAgICAgICBzdHJ1Y3QgaW5zdHIgKmluc3RyID0gJmItPmJfaW5zdHJbaV07Ci0gICAgICAgICAgICAvKiBSZWxhdGl2ZSBqdW1wcyBhcmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8KLSAgICAgICAgICAgICAgIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyIGFmdGVyIGZldGNoaW5nCi0gICAgICAgICAgICAgICB0aGUganVtcCBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBic2l6ZSArPSBpbnN0cnNpemUoaW5zdHIpOwotICAgICAgICAgICAgaWYgKGluc3RyLT5pX2phYnMpCi0gICAgICAgICAgICAgICAgaW5zdHItPmlfb3BhcmcgPSBpbnN0ci0+aV90YXJnZXQtPmJfb2Zmc2V0OwotICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHItPmlfanJlbCkgewotICAgICAgICAgICAgICAgIGludCBkZWx0YSA9IGluc3RyLT5pX3RhcmdldC0+Yl9vZmZzZXQgLSBic2l6ZTsKLSAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGRlbHRhOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wYXJnID4gMHhmZmZmKQotICAgICAgICAgICAgICAgIGV4dGVuZGVkX2FyZ19jb3VudCsrOworICAgIGRvIHsKKyAgICAgICAgdG90c2l6ZSA9IDA7CisgICAgICAgIGZvciAoaSA9IGEtPmFfbmJsb2NrcyAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgICAgICBiID0gYS0+YV9wb3N0b3JkZXJbaV07CisgICAgICAgICAgICBic2l6ZSA9IGJsb2Nrc2l6ZShiKTsKKyAgICAgICAgICAgIGItPmJfb2Zmc2V0ID0gdG90c2l6ZTsKKyAgICAgICAgICAgIHRvdHNpemUgKz0gYnNpemU7CiAgICAgICAgIH0KLSAgICB9CisgICAgICAgIGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ID0gZXh0ZW5kZWRfYXJnX2NvdW50OworICAgICAgICBleHRlbmRlZF9hcmdfY291bnQgPSAwOworICAgICAgICBmb3IgKGIgPSBjLT51LT51X2Jsb2NrczsgYiAhPSBOVUxMOyBiID0gYi0+Yl9saXN0KSB7CisgICAgICAgICAgICBic2l6ZSA9IGItPmJfb2Zmc2V0OworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGItPmJfaXVzZWQ7IGkrKykgeworICAgICAgICAgICAgICAgIHN0cnVjdCBpbnN0ciAqaW5zdHIgPSAmYi0+Yl9pbnN0cltpXTsKKyAgICAgICAgICAgICAgICAvKiBSZWxhdGl2ZSBqdW1wcyBhcmUgY29tcHV0ZWQgcmVsYXRpdmUgdG8KKyAgICAgICAgICAgICAgICAgICB0aGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBhZnRlciBmZXRjaGluZworICAgICAgICAgICAgICAgICAgIHRoZSBqdW1wIGluc3RydWN0aW9uLgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYnNpemUgKz0gaW5zdHJzaXplKGluc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdHItPmlfamFicykKKyAgICAgICAgICAgICAgICAgICAgaW5zdHItPmlfb3BhcmcgPSBpbnN0ci0+aV90YXJnZXQtPmJfb2Zmc2V0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluc3RyLT5pX2pyZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGRlbHRhID0gaW5zdHItPmlfdGFyZ2V0LT5iX29mZnNldCAtIGJzaXplOworICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGFyZyA9IGRlbHRhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChpbnN0ci0+aV9vcGFyZyA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnX2NvdW50Kys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgIC8qIFhYWDogVGhpcyBpcyBhbiBhd2Z1bCBoYWNrIHRoYXQgY291bGQgaHVydCBwZXJmb3JtYW5jZSwgYnV0CiAgICAgICAgIG9uIHRoZSBicmlnaHQgc2lkZSBpdCBzaG91bGQgd29yayB1bnRpbCB3ZSBjb21lIHVwCiAgICAgICAgIHdpdGggYSBiZXR0ZXIgc29sdXRpb24uCiAKLSAgICAgICAgSW4gdGhlIG1lYW50aW1lLCBzaG91bGQgdGhlIGdvdG8gYmUgZHJvcHBlZCBpbiBmYXZvcgotICAgICAgICBvZiBhIGxvb3A/Ci0KICAgICAgICAgVGhlIGlzc3VlIGlzIHRoYXQgaW4gdGhlIGZpcnN0IGxvb3AgYmxvY2tzaXplKCkgaXMgY2FsbGVkCiAgICAgICAgIHdoaWNoIGNhbGxzIGluc3Ryc2l6ZSgpIHdoaWNoIHJlcXVpcmVzIGlfb3BhcmcgYmUgc2V0CiAgICAgICAgIGFwcHJvcHJpYXRlbHkuICAgICAgICAgIFRoZXJlIGlzIGEgYm9vdHN0cmFwIHByb2JsZW0gYmVjYXVzZQpAQCAtMzk0OCwxMCArMzg1Niw3IEBACiAgICAgICAgIG9uZXMgaW4ganVtcCBpbnN0cnVjdGlvbnMuICBTbyB0aGlzIHNob3VsZCBjb252ZXJnZQogICAgICAgICBmYWlybHkgcXVpY2tseS4KICAgICAqLwotICAgIGlmIChsYXN0X2V4dGVuZGVkX2FyZ19jb3VudCAhPSBleHRlbmRlZF9hcmdfY291bnQpIHsKLSAgICAgICAgbGFzdF9leHRlbmRlZF9hcmdfY291bnQgPSBleHRlbmRlZF9hcmdfY291bnQ7Ci0gICAgICAgIGdvdG8gc3RhcnQ7Ci0gICAgfQorICAgIH0gd2hpbGUgKGxhc3RfZXh0ZW5kZWRfYXJnX2NvdW50ICE9IGV4dGVuZGVkX2FyZ19jb3VudCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00MTc3LDMgKzQwODIsMTMgQEAKICAgICBhc3NlbWJsZV9mcmVlKCZhKTsKICAgICByZXR1cm4gY287CiB9CisKKyN1bmRlZiBQeUFTVF9Db21waWxlCitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKQorUHlBU1RfQ29tcGlsZShtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCit7CisgICAgcmV0dXJuIFB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLCBmbGFncywgLTEsIGFyZW5hKTsKK30KKworCmRpZmYgLS1naXQgYS9QeXRob24vZHRvYS5jIGIvUHl0aG9uL2R0b2EuYwppbmRleCA0YjJjNmMzLi40NGRjMDFmIDEwMDY0NAotLS0gYS9QeXRob24vZHRvYS5jCisrKyBiL1B5dGhvbi9kdG9hLmMKQEAgLTEzODIsNyArMTM4Miw2IEBACiAgICAgQmlnaW50ICpiLCAqZDsKICAgICBpbnQgYjIsIGQyLCBkZCwgaSwgbmQsIG5kMCwgb2RkLCBwMiwgcDU7CiAKLSAgICBkZCA9IDA7IC8qIHNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBhYm91dCBwb3NzaWJseSB1bnVzZWQgdmFyaWFibGUgKi8KICAgICBuZCA9IGJjLT5uZDsKICAgICBuZDAgPSBiYy0+bmQwOwogICAgIHA1ID0gbmQgKyBiYy0+ZTA7CkBAIC0yMzYyLDcgKzIzNjEsNyBAQAogCiAgICAgLyogc2V0IHBvaW50ZXJzIHRvIE5VTEwsIHRvIHNpbGVuY2UgZ2NjIGNvbXBpbGVyIHdhcm5pbmdzIGFuZCBtYWtlCiAgICAgICAgY2xlYW51cCBlYXNpZXIgb24gZXJyb3IgKi8KLSAgICBtbG8gPSBtaGkgPSBiID0gUyA9IDA7CisgICAgbWxvID0gbWhpID0gUyA9IDA7CiAgICAgczAgPSAwOwogCiAgICAgdS5kID0gZGQ7CkBAIC0yNzEzLDggKzI3MTIsNiBAQAogICAgICAqIGFuZCBmb3IgYWxsIGFuZCBwYXNzIHRoZW0gYW5kIGEgc2hpZnQgdG8gcXVvcmVtLCBzbyBpdAogICAgICAqIGNhbiBkbyBzaGlmdHMgYW5kIG9ycyB0byBjb21wdXRlIHRoZSBudW1lcmF0b3IgZm9yIHEuCiAgICAgICovCi0gICAgaWYgKChpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4MWYpKQotICAgICAgICBpID0gMzIgLSBpOwogI2RlZmluZSBpSW5jIDI4CiAgICAgaSA9IGRzaGlmdChTLCBzMik7CiAgICAgYjIgKz0gaTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLmMgYi9QeXRob24vZHluYW1pY19hbm5vdGF0aW9ucy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNTExZGEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vZHluYW1pY19hbm5vdGF0aW9ucy5jCkBAIC0wLDAgKzEsMTU0IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAwOSwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogLS0tCisgKiBBdXRob3I6IEtvc3R5YSBTZXJlYnJ5YW55CisgKi8KKworI2lmZGVmIF9NU0NfVkVSCisjIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyMgZXJyb3IgIlRoaXMgZmlsZSBzaG91bGQgYmUgYnVpbHQgYXMgcHVyZSBDIHRvIGF2b2lkIG5hbWUgbWFuZ2xpbmciCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiZHluYW1pY19hbm5vdGF0aW9ucy5oIgorCisvKiBFYWNoIGZ1bmN0aW9uIGlzIGVtcHR5IGFuZCBjYWxsZWQgKHZpYSBhIG1hY3JvKSBvbmx5IGluIGRlYnVnIG1vZGUuCisgICBUaGUgYXJndW1lbnRzIGFyZSBjYXB0dXJlZCBieSBkeW5hbWljIHRvb2xzIGF0IHJ1bnRpbWUuICovCisKKyNpZiBEWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQgPT0gMQorCit2b2lkIEFubm90YXRlUldMb2NrQ3JlYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpsb2NrKXt9Cit2b2lkIEFubm90YXRlUldMb2NrRGVzdHJveShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmxvY2spe30KK3ZvaWQgQW5ub3RhdGVSV0xvY2tBY3F1aXJlZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpsb2NrLCBsb25nIGlzX3cpe30KK3ZvaWQgQW5ub3RhdGVSV0xvY2tSZWxlYXNlZChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpsb2NrLCBsb25nIGlzX3cpe30KK3ZvaWQgQW5ub3RhdGVCYXJyaWVySW5pdChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpiYXJyaWVyLCBsb25nIGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgcmVpbml0aWFsaXphdGlvbl9hbGxvd2VkKSB7fQordm9pZCBBbm5vdGF0ZUJhcnJpZXJXYWl0QmVmb3JlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmJhcnJpZXIpIHt9Cit2b2lkIEFubm90YXRlQmFycmllcldhaXRBZnRlcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmJhcnJpZXIpIHt9Cit2b2lkIEFubm90YXRlQmFycmllckRlc3Ryb3koY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqYmFycmllcikge30KKwordm9pZCBBbm5vdGF0ZUNvbmRWYXJXYWl0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmN2LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmxvY2spe30KK3ZvaWQgQW5ub3RhdGVDb25kVmFyU2lnbmFsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqY3Ype30KK3ZvaWQgQW5ub3RhdGVDb25kVmFyU2lnbmFsQWxsKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqY3Ype30KK3ZvaWQgQW5ub3RhdGVQdWJsaXNoTWVtb3J5UmFuZ2UoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgc2l6ZSl7fQordm9pZCBBbm5vdGF0ZVVucHVibGlzaE1lbW9yeVJhbmdlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplKXt9Cit2b2lkIEFubm90YXRlUENRQ3JlYXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpwY3Epe30KK3ZvaWQgQW5ub3RhdGVQQ1FEZXN0cm95KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqcGNxKXt9Cit2b2lkIEFubm90YXRlUENRUHV0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICpwY3Epe30KK3ZvaWQgQW5ub3RhdGVQQ1FHZXQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKnBjcSl7fQordm9pZCBBbm5vdGF0ZU5ld01lbW9yeShjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICBsb25nIHNpemUpe30KK3ZvaWQgQW5ub3RhdGVFeHBlY3RSYWNlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pe30KK3ZvaWQgQW5ub3RhdGVCZW5pZ25SYWNlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9sYXRpbGUgdm9pZCAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24pe30KK3ZvaWQgQW5ub3RhdGVCZW5pZ25SYWNlU2l6ZWQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKm1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbikge30KK3ZvaWQgQW5ub3RhdGVNdXRleElzVXNlZEFzQ29uZFZhcihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICptdSl7fQordm9pZCBBbm5vdGF0ZVRyYWNlTWVtb3J5KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFyZyl7fQordm9pZCBBbm5vdGF0ZVRocmVhZE5hbWUoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKXt9Cit2b2lkIEFubm90YXRlSWdub3JlUmVhZHNCZWdpbihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSl7fQordm9pZCBBbm5vdGF0ZUlnbm9yZVJlYWRzRW5kKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKXt9Cit2b2lkIEFubm90YXRlSWdub3JlV3JpdGVzQmVnaW4oY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpe30KK3ZvaWQgQW5ub3RhdGVJZ25vcmVXcml0ZXNFbmQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpe30KK3ZvaWQgQW5ub3RhdGVJZ25vcmVTeW5jQmVnaW4oY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpe30KK3ZvaWQgQW5ub3RhdGVJZ25vcmVTeW5jRW5kKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKXt9Cit2b2lkIEFubm90YXRlRW5hYmxlUmFjZURldGVjdGlvbihjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgaW50IGVuYWJsZSl7fQordm9pZCBBbm5vdGF0ZU5vT3AoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsCisgICAgICAgICAgICAgICAgICBjb25zdCB2b2xhdGlsZSB2b2lkICphcmcpe30KK3ZvaWQgQW5ub3RhdGVGbHVzaFN0YXRlKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKXt9CisKK3N0YXRpYyBpbnQgR2V0UnVubmluZ09uVmFsZ3JpbmQodm9pZCkgeworI2lmZGVmIFJVTk5JTkdfT05fVkFMR1JJTkQKKyAgaWYgKFJVTk5JTkdfT05fVkFMR1JJTkQpIHJldHVybiAxOworI2VuZGlmCisKKyNpZm5kZWYgX01TQ19WRVIKKyAgY2hhciAqcnVubmluZ19vbl92YWxncmluZF9zdHIgPSBnZXRlbnYoIlJVTk5JTkdfT05fVkFMR1JJTkQiKTsKKyAgaWYgKHJ1bm5pbmdfb25fdmFsZ3JpbmRfc3RyKSB7CisgICAgcmV0dXJuIHN0cmNtcChydW5uaW5nX29uX3ZhbGdyaW5kX3N0ciwgIjAiKSAhPSAwOworICB9CisjZWxzZQorICAvKiBWaXN1YWwgU3R1ZGlvIGlzc3VlcyB3YXJuaW5ncyBpZiB3ZSB1c2UgZ2V0ZW52LAorICAgKiBzbyB3ZSB1c2UgR2V0RW52aXJvbm1lbnRWYXJpYWJsZUEgaW5zdGVhZC4KKyAgICovCisgIGNoYXIgdmFsdWVbMTAwXSA9ICIxIjsKKyAgaW50IHJlcyA9IEdldEVudmlyb25tZW50VmFyaWFibGVBKCJSVU5OSU5HX09OX1ZBTEdSSU5EIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgLyogdmFsdWUgd2lsbCByZW1haW4gIjEiIGlmIHJlcyA9PSAwIG9yIHJlcyA+PSBzaXplb2YodmFsdWUpLiBUaGUgbGF0dGVyCisgICAqIGNhbiBoYXBwZW4gb25seSBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbG9uZywgaW4gdGhpcyBjYXNlIGl0IGNhbid0IGJlICIwIi4KKyAgICovCisgIGlmIChyZXMgPiAwICYmICFzdHJjbXAodmFsdWUsICIwIikpCisgICAgcmV0dXJuIDE7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CisKKy8qIFNlZSB0aGUgY29tbWVudHMgaW4gZHluYW1pY19hbm5vdGF0aW9ucy5oICovCitpbnQgUnVubmluZ09uVmFsZ3JpbmQodm9pZCkgeworICBzdGF0aWMgdm9sYXRpbGUgaW50IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSAtMTsKKyAgLyogQyBkb2Vzbid0IGhhdmUgdGhyZWFkLXNhZmUgaW5pdGlhbGl6YXRpb24gb2Ygc3RhdGljcywgYW5kIHdlCisgICAgIGRvbid0IHdhbnQgdG8gZGVwZW5kIG9uIHB0aHJlYWRfb25jZSBoZXJlLCBzbyBoYWNrIGl0LiAqLworICBpbnQgbG9jYWxfcnVubmluZ19vbl92YWxncmluZCA9IHJ1bm5pbmdfb25fdmFsZ3JpbmQ7CisgIGlmIChsb2NhbF9ydW5uaW5nX29uX3ZhbGdyaW5kID09IC0xKQorICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBsb2NhbF9ydW5uaW5nX29uX3ZhbGdyaW5kID0gR2V0UnVubmluZ09uVmFsZ3JpbmQoKTsKKyAgcmV0dXJuIGxvY2FsX3J1bm5pbmdfb25fdmFsZ3JpbmQ7Cit9CisKKyNlbmRpZiAgLyogRFlOQU1JQ19BTk5PVEFUSU9OU19FTkFCTEVEID09IDEgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2F0aGVvcy5jIGIvUHl0aG9uL2R5bmxvYWRfYXRoZW9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NmEzNWIuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYXRoZW9zLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0KLS8qIFN1cHBvcnQgZm9yIGR5bmFtaWMgbG9hZGluZyBvZiBleHRlbnNpb24gbW9kdWxlcyAqLwotCi0jaW5jbHVkZSA8YXRoZW9zL2ltYWdlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgImltcG9ydGRsLmgiCi0KLQotY29uc3Qgc3RydWN0IGZpbGVkZXNjciBfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsKLSAgICB7Ii5zbyIsICJyYiIsIENfRVhURU5TSU9OfSwKLSAgICB7Im1vZHVsZS5zbyIsICJyYiIsIENfRVhURU5TSU9OfSwKLSAgICB7MCwgMH0KLX07Ci0KLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKmZxbmFtZSwgY29uc3QgY2hhciAqc2hvcnRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsIEZJTEUgKmZwKQotewotICAgIHZvaWQgKnA7Ci0gICAgaW50IGxpYjsKLSAgICBjaGFyIGZ1bmNuYW1lWzI1OF07Ci0KLSAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgIHByaW50ZigibG9hZF9saWJyYXJ5ICVzXG4iLCBwYXRobmFtZSk7Ci0KLSAgICBsaWIgPSBsb2FkX2xpYnJhcnkocGF0aG5hbWUsIDApOwotICAgIGlmIChsaWIgPCAwKSB7Ci0gICAgICAgIGNoYXIgYnVmWzUxMl07Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIHBlcnJvcihwYXRobmFtZSk7Ci0gICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkZhaWxlZCB0byBsb2FkICUuMjAwczogJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICBwYXRobmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCBidWYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIlB5SW5pdF8lLjIwMHMiLCBzaG9ydG5hbWUpOwotICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgcHJpbnRmKCJnZXRfc3ltYm9sX2FkZHJlc3MgJXNcbiIsIGZ1bmNuYW1lKTsKLSAgICBpZiAoZ2V0X3N5bWJvbF9hZGRyZXNzKGxpYiwgZnVuY25hbWUsIC0xLCAmcCkgPCAwKSB7Ci0gICAgICAgIHAgPSBOVUxMOwotICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgICAgICBwZXJyb3IoZnVuY25hbWUpOwotICAgIH0KLQotICAgIHJldHVybiAoZGxfZnVuY3B0cikgcDsKLX0KZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMgYi9QeXRob24vZHlubG9hZF9zaGxpYi5jCmluZGV4IDg3ZGFlMjcuLjdlYTUxMGUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3NobGliLmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwpAQCAtMzAsMjcgKzMwLDM2IEBACiAjZGVmaW5lIExFQURfVU5ERVJTQ09SRSAiIgogI2VuZGlmCiAKKy8qIFRoZSAuc28gZXh0ZW5zaW9uIG1vZHVsZSBBQkkgdGFnLCBzdXBwbGllZCBieSB0aGUgTWFrZWZpbGUgdmlhCisgICBNYWtlZmlsZS5wcmUuaW4gYW5kIGNvbmZpZ3VyZS4gIFRoaXMgaXMgdXNlZCB0byBkaXNjcmltaW5hdGUgYmV0d2VlbgorICAgaW5jb21wYXRpYmxlIC5zbyBmaWxlcyBzbyB0aGF0IGV4dGVuc2lvbnMgZm9yIGRpZmZlcmVudCBQeXRob24gYnVpbGRzIGNhbgorICAgbGl2ZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuICBFLmcuIGZvb21vZHVsZS5jcHl0aG9uLTMyLnNvCisqLwogCiBjb25zdCBzdHJ1Y3QgZmlsZWRlc2NyIF9QeUltcG9ydF9EeW5Mb2FkRmlsZXRhYltdID0gewogI2lmZGVmIF9fQ1lHV0lOX18KICAgICB7Ii5kbGwiLCAicmIiLCBDX0VYVEVOU0lPTn0sCiAgICAgeyJtb2R1bGUuZGxsIiwgInJiIiwgQ19FWFRFTlNJT059LAotI2Vsc2UKKyNlbHNlICAvKiAhX19DWUdXSU5fXyAqLwogI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCiAgICAgeyIucHlkIiwgInJiIiwgQ19FWFRFTlNJT059LAogICAgIHsiLmRsbCIsICJyYiIsIENfRVhURU5TSU9OfSwKLSNlbHNlCisjZWxzZSAgLyogIShkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSkgKi8KICNpZmRlZiBfX1ZNUwogICAgIHsiLmV4ZSIsICJyYiIsIENfRVhURU5TSU9OfSwKICAgICB7Ii5FWEUiLCAicmIiLCBDX0VYVEVOU0lPTn0sCiAgICAgeyJtb2R1bGUuZXhlIiwgInJiIiwgQ19FWFRFTlNJT059LAogICAgIHsiTU9EVUxFLkVYRSIsICJyYiIsIENfRVhURU5TSU9OfSwKLSNlbHNlCisjZWxzZSAgLyogIV9fVk1TICovCisgICAgeyIuIiBTT0FCSSAiLnNvIiwgInJiIiwgQ19FWFRFTlNJT059LAorICAgIHsibW9kdWxlLiIgU09BQkkgIi5zbyIsICJyYiIsIENfRVhURU5TSU9OfSwKKyAgICB7Ii5hYmkiIFBZVEhPTl9BQklfU1RSSU5HICIuc28iLCAicmIiLCBDX0VYVEVOU0lPTn0sCisgICAgeyJtb2R1bGUuYWJpIiBQWVRIT05fQUJJX1NUUklORyAiLnNvIiwgInJiIiwgQ19FWFRFTlNJT059LAogICAgIHsiLnNvIiwgInJiIiwgQ19FWFRFTlNJT059LAogICAgIHsibW9kdWxlLnNvIiwgInJiIiwgQ19FWFRFTlNJT059LAotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmICAvKiBfX1ZNUyAqLworI2VuZGlmICAvKiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSAqLworI2VuZGlmICAvKiBfX0NZR1dJTl9fICovCiAgICAgezAsIDB9CiB9OwogCmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF93aW4uYyBiL1B5dGhvbi9keW5sb2FkX3dpbi5jCmluZGV4IGU3ZDYxY2UuLjczYTFkY2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9keW5sb2FkX3dpbi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3dpbi5jCkBAIC0xMzQsNiArMTM0LDE1IEBACiAgICAgICAgICAgICAgICAgIXN0cm5jbXAoaW1wb3J0X25hbWUsInB5dGhvbiIsNikpIHsKICAgICAgICAgICAgICAgICBjaGFyICpwY2g7CiAKKyNpZm5kZWYgX0RFQlVHCisgICAgICAgICAgICAgICAgLyogSW4gYSByZWxlYXNlIHZlcnNpb24sIGRvbid0IGNsYWltIHRoYXQgcHl0aG9uMy5kbGwgaXMKKyAgICAgICAgICAgICAgICAgICBhIFB5dGhvbiBETEwuICovCisgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChpbXBvcnRfbmFtZSwgInB5dGhvbjMuZGxsIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpbXBvcnRfZGF0YSArPSAyMDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisKICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgcHl0aG9uIHByZWZpeCBpcyBmb2xsb3dlZCBvbmx5CiAgICAgICAgICAgICAgICAgICAgYnkgbnVtYmVycyB0byB0aGUgZW5kIG9mIHRoZSBiYXNlbmFtZSAqLwogICAgICAgICAgICAgICAgIHBjaCA9IGltcG9ydF9uYW1lICsgNjsKQEAgLTE2MiwxMyArMTcxLDE2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLQogZGxfZnVuY3B0ciBfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMoY29uc3QgY2hhciAqZnFuYW1lLCBjb25zdCBjaGFyICpzaG9ydG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRobmFtZSwgRklMRSAqZnApCiB7CiAgICAgZGxfZnVuY3B0ciBwOwogICAgIGNoYXIgZnVuY25hbWVbMjU4XSwgKmltcG9ydF9weXRob247CiAKKyNpZm5kZWYgX0RFQlVHCisgICAgX1B5X0NoZWNrUHl0aG9uMygpOworI2VuZGlmCisKICAgICBQeU9TX3NucHJpbnRmKGZ1bmNuYW1lLCBzaXplb2YoZnVuY25hbWUpLCAiUHlJbml0XyUuMjAwcyIsIHNob3J0bmFtZSk7CiAKICAgICB7CmRpZmYgLS1naXQgYS9QeXRob24vZXJyb3JzLmMgYi9QeXRob24vZXJyb3JzLmMKaW5kZXggZGIwYmFmMS4uNWE5YTYyNCAxMDA2NDQKLS0tIGEvUHl0aG9uL2Vycm9ycy5jCisrKyBiL1B5dGhvbi9lcnJvcnMuYwpAQCAtMTMwLDkgKzEzMCwxNCBAQAogUHlPYmplY3QgKgogUHlFcnJfT2NjdXJyZWQodm9pZCkKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIC8qIElmIHRoZXJlIGlzIG5vIHRocmVhZCBzdGF0ZSwgUHlUaHJlYWRTdGF0ZV9HRVQgY2FsbHMKKyAgICAgICBQeV9GYXRhbEVycm9yLCB3aGljaCBjYWxscyBQeUVycl9PY2N1cnJlZC4gIFRvIGF2b2lkIHRoZQorICAgICAgIHJlc3VsdGluZyBpbmZpbml0ZSBsb29wLCB3ZSBpbmxpbmUgUHlUaHJlYWRTdGF0ZV9HRVQgaGVyZSBhbmQKKyAgICAgICB0cmVhdCBubyB0aHJlYWQgYXMgbm8gZXJyb3IuICovCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0KKyAgICAgICAgKChQeVRocmVhZFN0YXRlKilfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpOwogCi0gICAgcmV0dXJuIHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CisgICAgcmV0dXJuIHRzdGF0ZSA9PSBOVUxMID8gTlVMTCA6IHRzdGF0ZS0+Y3VyZXhjX3R5cGU7CiB9CiAKIApAQCAtMzM4LDI1ICszNDMsMTcgQEAKICAgICBQeU9iamVjdCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqdjsKICAgICBpbnQgaSA9IGVycm5vOwotI2lmZGVmIFBMQU45Ci0gICAgY2hhciBlcnJidWZbRVJSTUFYXTsKLSNlbHNlCiAjaWZuZGVmIE1TX1dJTkRPV1MKICAgICBjaGFyICpzOwogI2Vsc2UKICAgICBXQ0hBUiAqc19idWYgPSBOVUxMOwogI2VuZGlmIC8qIFVuaXgvV2luZG93cyAqLwotI2VuZGlmIC8qIFBMQU4gOSovCiAKICNpZmRlZiBFSU5UUgogICAgIGlmIChpID09IEVJTlRSICYmIFB5RXJyX0NoZWNrU2lnbmFscygpKQogICAgICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgogCi0jaWZkZWYgUExBTjkKLSAgICByZXJyc3RyKGVycmJ1Ziwgc2l6ZW9mIGVycmJ1Zik7Ci0gICAgbWVzc2FnZSA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGVycmJ1Ziwgc3RybGVuKGVycmJ1ZiksICJpZ25vcmUiKTsKLSNlbHNlCiAjaWZuZGVmIE1TX1dJTkRPV1MKICAgICBpZiAoaSA9PSAwKQogICAgICAgICBzID0gIkVycm9yIjsgLyogU29tZXRpbWVzIGVycm5vIGRpZG4ndCBnZXQgc2V0ICovCkBAIC00MDMsNyArNDAwLDYgQEAKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvKiBVbml4L1dpbmRvd3MgKi8KLSNlbmRpZiAvKiBQTEFOIDkqLwogCiAgICAgaWYgKG1lc3NhZ2UgPT0gTlVMTCkKICAgICB7CkBAIC00MzMsNyArNDI5LDcgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmlsZW5hbWUpIDogTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBuYW1lKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC01MTksNyArNTE1LDcgQEAKICAgICBpbnQgaWVyciwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0Zyb21TdHJpbmcoZmlsZW5hbWUpIDogTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdChleGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwpAQCAtNTU2LDcgKzU1Miw3IEBACiAgICAgaW50IGllcnIsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7Ci0gICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZpbGVuYW1lKSA6IE5VTEw7CisgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpIDogTlVMTDsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CkBAIC02NjEsNyArNjU3LDcgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKICAgICB9CiAgICAgLyogQ3JlYXRlIGEgcmVhbCBuZXctc3R5bGUgY2xhc3MuICovCi0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZQeVR5cGVfVHlwZSwgIlVPTyIsCisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKChQeU9iamVjdCAqKSZQeVR5cGVfVHlwZSwgInNPTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdCsxLCBiYXNlcywgZGljdCk7CiAgIGZhaWx1cmU6CiAgICAgUHlfWERFQ1JFRihiYXNlcyk7CkBAIC02NzEsNiArNjY3LDQxIEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorCisvKiBDcmVhdGUgYW4gZXhjZXB0aW9uIHdpdGggZG9jc3RyaW5nICovCitQeU9iamVjdCAqCitQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmRvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KQoreworICAgIGludCByZXN1bHQ7CisgICAgUHlPYmplY3QgKnJldCA9IE5VTEw7CisgICAgUHlPYmplY3QgKm15ZGljdCA9IE5VTEw7IC8qIHBvaW50cyB0byB0aGUgZGljdCBvbmx5IGlmIHdlIGNyZWF0ZSBpdCAqLworICAgIFB5T2JqZWN0ICpkb2NvYmo7CisKKyAgICBpZiAoZGljdCA9PSBOVUxMKSB7CisgICAgICAgIGRpY3QgPSBteWRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRvYyAhPSBOVUxMKSB7CisgICAgICAgIGRvY29iaiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRvYyk7CisgICAgICAgIGlmIChkb2NvYmogPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbHVyZTsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgIl9fZG9jX18iLCBkb2NvYmopOworICAgICAgICBQeV9ERUNSRUYoZG9jb2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgfQorCisgICAgcmV0ID0gUHlFcnJfTmV3RXhjZXB0aW9uKG5hbWUsIGJhc2UsIGRpY3QpOworICBmYWlsdXJlOgorICAgIFB5X1hERUNSRUYobXlkaWN0KTsKKyAgICByZXR1cm4gcmV0OworfQorCisKIC8qIENhbGwgd2hlbiBhbiBleGNlcHRpb24gaGFzIG9jY3VycmVkIGJ1dCB0aGVyZSBpcyBubyB3YXkgZm9yIFB5dGhvbgogICAgdG8gaGFuZGxlIGl0LiAgRXhhbXBsZXM6IGV4Y2VwdGlvbiBpbiBfX2RlbF9fIG9yIGR1cmluZyBHQy4gKi8KIHZvaWQKQEAgLTcxNCw4ICs3NDUsMTAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5X1hERUNSRUYobW9kdWxlTmFtZSk7CiAgICAgICAgIH0KLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaW4gIiwgZik7Ci0gICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApOworICAgICAgICBpZiAob2JqKSB7CisgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBpbiAiLCBmKTsKKyAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChvYmosIGYsIDApOworICAgICAgICB9CiAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGlnbm9yZWRcbiIsIGYpOwogICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KICAgICB9CkBAIC03MjcsMTIgKzc2MCwxOCBAQAogZXh0ZXJuIFB5T2JqZWN0ICpQeU1vZHVsZV9HZXRXYXJuaW5nc01vZHVsZSh2b2lkKTsKIAogCit2b2lkCitQeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykgeworICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIGxpbmVubywgLTEpOworfQorCisKIC8qIFNldCBmaWxlIGFuZCBsaW5lIGluZm9ybWF0aW9uIGZvciB0aGUgY3VycmVudCBleGNlcHRpb24uCiAgICBJZiB0aGUgZXhjZXB0aW9uIGlzIG5vdCBhIFN5bnRheEVycm9yLCBhbHNvIHNldHMgYWRkaXRpb25hbCBhdHRyaWJ1dGVzCiAgICB0byBtYWtlIHByaW50aW5nIG9mIGV4Y2VwdGlvbnMgYmVsaWV2ZSBpdCBpcyBhIHN5bnRheCBlcnJvci4gKi8KIAogdm9pZAotUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCitQeUVycl9TeW50YXhMb2NhdGlvbkV4KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBQeU9iamVjdCAqZXhjLCAqdiwgKnRiLCAqdG1wOwogCkBAIC03NDksOCArNzg4LDE4IEBACiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBQeV9ERUNSRUYodG1wKTsKICAgICB9CisgICAgaWYgKGNvbF9vZmZzZXQgPj0gMCkgeworICAgICAgICB0bXAgPSBQeUxvbmdfRnJvbUxvbmcoY29sX29mZnNldCk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcodiwgIm9mZnNldCIsIHRtcCkpCisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgICAgICB9CisgICAgfQogICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIHRtcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZpbGVuYW1lKTsKKyAgICAgICAgdG1wID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7CiAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ZpbGV1dGlscy5jIGIvUHl0aG9uL2ZpbGV1dGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NjNlYWEKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vZmlsZXV0aWxzLmMKQEAgLTAsMCArMSw0MzEgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1RBVAorCisvKiBEZWNvZGUgYSBieXRlIHN0cmluZyBmcm9tIHRoZSBsb2NhbGUgZW5jb2Rpbmcgd2l0aCB0aGUKKyAgIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyICh1bmRlY29kYWJsZSBieXRlcyBhcmUgZGVjb2RlZCBhcyBjaGFyYWN0ZXJzCisgICBpbiByYW5nZSBVK0RDODAuLlUrRENGRikuIElmIGEgYnl0ZSBzZXF1ZW5jZSBjYW4gYmUgZGVjb2RlZCBhcyBhIHN1cnJvZ2F0ZQorICAgY2hhcmFjdGVyLCBlc2NhcGUgdGhlIGJ5dGVzIHVzaW5nIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciBpbnN0ZWFkCisgICBvZiBkZWNvZGluZyB0aGVtLgorCisgICBVc2UgX1B5X3djaGFyMmNoYXIoKSB0byBlbmNvZGUgdGhlIGNoYXJhY3RlciBzdHJpbmcgYmFjayB0byBhIGJ5dGUgc3RyaW5nLgorCisgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCisgICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKKyAgIGNoYXJhY3RlcnMgZXhjbHVkaW5nIHRoZSBudWxsIGNoYXJhY3RlciBpbnRvICpzaXplIGlmIHNpemUgaXMgbm90IE5VTEwsIG9yCisgICBOVUxMIG9uIGVycm9yIChjb252ZXJzaW9uIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yKS4KKworICAgQ29udmVyc2lvbiBlcnJvcnMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDCisgICBsaWJyYXJ5LiAqLword2NoYXJfdCoKK19QeV9jaGFyMndjaGFyKGNvbnN0IGNoYXIqIGFyZywgc2l6ZV90ICpzaXplKQoreworICAgIHdjaGFyX3QgKnJlczsKKyNpZmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUworICAgIC8qIFNvbWUgcGxhdGZvcm1zIGhhdmUgYSBicm9rZW4gaW1wbGVtZW50YXRpb24gb2YKKyAgICAgKiBtYnN0b3djcyB3aGljaCBkb2VzIG5vdCBjb3VudCB0aGUgY2hhcmFjdGVycyB0aGF0CisgICAgICogd291bGQgcmVzdWx0IGZyb20gY29udmVyc2lvbi4gIFVzZSBhbiB1cHBlciBib3VuZC4KKyAgICAgKi8KKyAgICBzaXplX3QgYXJnc2l6ZSA9IHN0cmxlbihhcmcpOworI2Vsc2UKKyAgICBzaXplX3QgYXJnc2l6ZSA9IG1ic3Rvd2NzKE5VTEwsIGFyZywgMCk7CisjZW5kaWYKKyAgICBzaXplX3QgY291bnQ7CisgICAgdW5zaWduZWQgY2hhciAqaW47CisgICAgd2NoYXJfdCAqb3V0OworI2lmZGVmIEhBVkVfTUJSVE9XQworICAgIG1ic3RhdGVfdCBtYnM7CisjZW5kaWYKKyAgICBpZiAoYXJnc2l6ZSAhPSAoc2l6ZV90KS0xKSB7CisgICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKChhcmdzaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGlmICghcmVzKQorICAgICAgICAgICAgZ290byBvb207CisgICAgICAgIGNvdW50ID0gbWJzdG93Y3MocmVzLCBhcmcsIGFyZ3NpemUrMSk7CisgICAgICAgIGlmIChjb3VudCAhPSAoc2l6ZV90KS0xKSB7CisgICAgICAgICAgICB3Y2hhcl90ICp0bXA7CisgICAgICAgICAgICAvKiBPbmx5IHVzZSB0aGUgcmVzdWx0IGlmIGl0IGNvbnRhaW5zIG5vCisgICAgICAgICAgICAgICBzdXJyb2dhdGUgY2hhcmFjdGVycy4gKi8KKyAgICAgICAgICAgIGZvciAodG1wID0gcmVzOyAqdG1wICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKnRtcCA8IDB4ZDgwMCB8fCAqdG1wID4gMHhkZmZmKTsgdG1wKyspCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgaWYgKCp0bXAgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChzaXplICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICpzaXplID0gY291bnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgfQorICAgIC8qIENvbnZlcnNpb24gZmFpbGVkLiBGYWxsIGJhY2sgdG8gZXNjYXBpbmcgd2l0aCBzdXJyb2dhdGVlc2NhcGUuICovCisjaWZkZWYgSEFWRV9NQlJUT1dDCisgICAgLyogVHJ5IGNvbnZlcnNpb24gd2l0aCBtYnJ0d29jIChDOTkpLCBhbmQgZXNjYXBlIG5vbi1kZWNvZGFibGUgYnl0ZXMuICovCisKKyAgICAvKiBPdmVyYWxsb2NhdGU7IGFzIG11bHRpLWJ5dGUgY2hhcmFjdGVycyBhcmUgaW4gdGhlIGFyZ3VtZW50LCB0aGUKKyAgICAgICBhY3R1YWwgb3V0cHV0IGNvdWxkIHVzZSBsZXNzIG1lbW9yeS4gKi8KKyAgICBhcmdzaXplID0gc3RybGVuKGFyZykgKyAxOworICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgIGlmICghcmVzKQorICAgICAgICBnb3RvIG9vbTsKKyAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7CisgICAgb3V0ID0gcmVzOworICAgIG1lbXNldCgmbWJzLCAwLCBzaXplb2YgbWJzKTsKKyAgICB3aGlsZSAoYXJnc2l6ZSkgeworICAgICAgICBzaXplX3QgY29udmVydGVkID0gbWJydG93YyhvdXQsIChjaGFyKilpbiwgYXJnc2l6ZSwgJm1icyk7CisgICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gMCkKKyAgICAgICAgICAgIC8qIFJlYWNoZWQgZW5kIG9mIHN0cmluZzsgbnVsbCBjaGFyIHN0b3JlZC4gKi8KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY29udmVydGVkID09IChzaXplX3QpLTIpIHsKKyAgICAgICAgICAgIC8qIEluY29tcGxldGUgY2hhcmFjdGVyLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sCisgICAgICAgICAgICAgICBzaW5jZSB3ZSBwcm92aWRlIGV2ZXJ5dGhpbmcgdGhhdCB3ZSBoYXZlIC0KKyAgICAgICAgICAgICAgIHVubGVzcyB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgQyBsaWJyYXJ5LCBvciBJCisgICAgICAgICAgICAgICBtaXN1bmRlcnN0b29kIGhvdyBtYnJ0b3djIHdvcmtzLiAqLworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIG1icnRvd2MgcmVzdWx0IC0yXG4iKTsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUocmVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGlmIChjb252ZXJ0ZWQgPT0gKHNpemVfdCktMSkgeworICAgICAgICAgICAgLyogQ29udmVyc2lvbiBlcnJvci4gRXNjYXBlIGFzIFVURi04YiwgYW5kIHN0YXJ0IG92ZXIKKyAgICAgICAgICAgICAgIGluIHRoZSBpbml0aWFsIHNoaWZ0IHN0YXRlLiAqLworICAgICAgICAgICAgKm91dCsrID0gMHhkYzAwICsgKmluKys7CisgICAgICAgICAgICBhcmdzaXplLS07CisgICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKKyAgICAgICAgICAgIC8qIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIuICBFc2NhcGUgdGhlIG9yaWdpbmFsCisgICAgICAgICAgICAgICBieXRlIHNlcXVlbmNlIHdpdGggc3Vycm9nYXRlZXNjYXBlLiAqLworICAgICAgICAgICAgYXJnc2l6ZSAtPSBjb252ZXJ0ZWQ7CisgICAgICAgICAgICB3aGlsZSAoY29udmVydGVkLS0pCisgICAgICAgICAgICAgICAgKm91dCsrID0gMHhkYzAwICsgKmluKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKiBzdWNjZXNzZnVsbHkgY29udmVydGVkIHNvbWUgYnl0ZXMgKi8KKyAgICAgICAgaW4gKz0gY29udmVydGVkOworICAgICAgICBhcmdzaXplIC09IGNvbnZlcnRlZDsKKyAgICAgICAgb3V0Kys7CisgICAgfQorI2Vsc2UKKyAgICAvKiBDYW5ub3QgdXNlIEMgbG9jYWxlIGZvciBlc2NhcGluZzsgbWFudWFsbHkgZXNjYXBlIGFzIGlmIGNoYXJzZXQKKyAgICAgICBpcyBBU0NJSSAoaS5lLiBlc2NhcGUgYWxsIGJ5dGVzID4gMTI4LiBUaGlzIHdpbGwgc3RpbGwgcm91bmR0cmlwCisgICAgICAgY29ycmVjdGx5IGluIHRoZSBsb2NhbGUncyBjaGFyc2V0LCB3aGljaCBtdXN0IGJlIGFuIEFTQ0lJIHN1cGVyc2V0LiAqLworICAgIHJlcyA9IFB5TWVtX01hbGxvYygoc3RybGVuKGFyZykrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBpZiAoIXJlcykgZ290byBvb207CisgICAgaW4gPSAodW5zaWduZWQgY2hhciopYXJnOworICAgIG91dCA9IHJlczsKKyAgICB3aGlsZSgqaW4pCisgICAgICAgIGlmKCppbiA8IDEyOCkKKyAgICAgICAgICAgICpvdXQrKyA9ICppbisrOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqb3V0KysgPSAweGRjMDAgKyAqaW4rKzsKKyAgICAqb3V0ID0gMDsKKyNlbmRpZgorICAgIGlmIChzaXplICE9IE5VTEwpCisgICAgICAgICpzaXplID0gb3V0IC0gcmVzOworICAgIHJldHVybiByZXM7Citvb206CisgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyogRW5jb2RlIGEgKHdpZGUpIGNoYXJhY3RlciBzdHJpbmcgdG8gdGhlIGxvY2FsZSBlbmNvZGluZyB3aXRoIHRoZQorICAgc3Vycm9nYXRlZXNjYXBlIGVycm9yIGhhbmRsZXIgKGNoYXJhY3RlcnMgaW4gcmFuZ2UgVStEQzgwLi5VK0RDRkYgYXJlCisgICBjb252ZXJ0ZWQgdG8gYnl0ZXMgMHg4MC4uMHhGRikuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgX1B5X2NoYXIyd2NoYXIoKS4KKworICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBieXRlIHN0cmluZyAodXNlIFB5TWVtX0ZyZWUoKSB0byBmcmVlCisgICB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBjb252ZXJzaW9uIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLgorCisgICBJZiBlcnJvcl9wb3MgaXMgbm90IE5VTEw6ICplcnJvcl9wb3MgaXMgdGhlIGluZGV4IG9mIHRoZSBpbnZhbGlkIGNoYXJhY3RlcgorICAgb24gY29udmVyc2lvbiBlcnJvciwgb3IgKHNpemVfdCktMSBvdGhlcndpc2UuICovCitjaGFyKgorX1B5X3djaGFyMmNoYXIoY29uc3Qgd2NoYXJfdCAqdGV4dCwgc2l6ZV90ICplcnJvcl9wb3MpCit7CisgICAgY29uc3Qgc2l6ZV90IGxlbiA9IHdjc2xlbih0ZXh0KTsKKyAgICBjaGFyICpyZXN1bHQgPSBOVUxMLCAqYnl0ZXMgPSBOVUxMOworICAgIHNpemVfdCBpLCBzaXplLCBjb252ZXJ0ZWQ7CisgICAgd2NoYXJfdCBjLCBidWZbMl07CisKKyAgICBpZiAoZXJyb3JfcG9zICE9IE5VTEwpCisgICAgICAgICplcnJvcl9wb3MgPSAoc2l6ZV90KS0xOworCisgICAgLyogVGhlIGZ1bmN0aW9uIHdvcmtzIGluIHR3byBzdGVwczoKKyAgICAgICAxLiBjb21wdXRlIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMgKHNpemUpCisgICAgICAgMi4gb3V0cHV0cyB0aGUgYnl0ZXMgKi8KKyAgICBzaXplID0gMDsKKyAgICBidWZbMV0gPSAwOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIGMgPSB0ZXh0W2ldOworICAgICAgICAgICAgaWYgKGMgPj0gMHhkYzgwICYmIGMgPD0gMHhkY2ZmKSB7CisgICAgICAgICAgICAgICAgLyogVVRGLThiIHN1cnJvZ2F0ZSAqLworICAgICAgICAgICAgICAgIGlmIChieXRlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICpieXRlcysrID0gYyAtIDB4ZGMwMDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZS0tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNpemUrKzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZlswXSA9IGM7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IHdjc3RvbWJzKGJ5dGVzLCBidWYsIHNpemUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udmVydGVkID0gd2NzdG9tYnMoTlVMTCwgYnVmLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoY29udmVydGVkID09IChzaXplX3QpLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JfcG9zICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3JfcG9zID0gaTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChieXRlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVzICs9IGNvbnZlcnRlZDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSAtPSBjb252ZXJ0ZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSArPSBjb252ZXJ0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgICAgICAqYnl0ZXMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzaXplICs9IDE7IC8qIG51bCBieXRlIGF0IHRoZSBlbmQgKi8KKyAgICAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnl0ZXMgPSByZXN1bHQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEluIHByaW5jaXBsZSwgdGhpcyBzaG91bGQgdXNlIEhBVkVfX1dTVEFULCBhbmQgX3dzdGF0CisgICBzaG91bGQgYmUgZGV0ZWN0ZWQgYnkgYXV0b2NvbmYuIEhvd2V2ZXIsIG5vIGN1cnJlbnQKKyAgIFBPU0lYIHN5c3RlbSBwcm92aWRlcyB0aGF0IGZ1bmN0aW9uLCBzbyB0ZXN0aW5nIGZvcgorICAgaXQgaXMgcG9pbnRsZXNzLgorICAgTm90IHN1cmUgd2hldGhlciB0aGUgTVNfV0lORE9XUyBndWFyZHMgYXJlIG5lY2Vzc2FyeToKKyAgIHBlcmhhcHMgZm9yIGN5Z3dpbi9taW5ndyBidWlsZHM/CisqLworI2lmIGRlZmluZWQoSEFWRV9TVEFUKSAmJiAhZGVmaW5lZChNU19XSU5ET1dTKQorCisvKiBHZXQgZmlsZSBzdGF0dXMuIEVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlIGVuY29kaW5nLiAqLworCitpbnQKK19QeV93c3RhdChjb25zdCB3Y2hhcl90KiBwYXRoLCBzdHJ1Y3Qgc3RhdCAqYnVmKQoreworICAgIGludCBlcnI7CisgICAgY2hhciAqZm5hbWU7CisgICAgZm5hbWUgPSBfUHlfd2NoYXIyY2hhcihwYXRoLCBOVUxMKTsKKyAgICBpZiAoZm5hbWUgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlcnIgPSBzdGF0KGZuYW1lLCBidWYpOworICAgIFB5TWVtX0ZyZWUoZm5hbWUpOworICAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogQ2FsbCBfd3N0YXQoKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCisgICBjYWxsIHN0YXQoKSBvdGhlcndpc2UuIE9ubHkgZmlsbCBzdF9tb2RlIGF0dHJpYnV0ZSBvbiBXaW5kb3dzLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBfd3N0YXQoKSAvIHN0YXQoKSBlcnJvciBvciAoaWYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgIHVuaWNvZGUgZXJyb3IuICovCisKK2ludAorX1B5X3N0YXQoUHlPYmplY3QgKnBhdGgsIHN0cnVjdCBzdGF0ICpzdGF0YnVmKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpbnQgZXJyOworICAgIHN0cnVjdCBfc3RhdCB3c3RhdGJ1ZjsKKworICAgIGVyciA9IF93c3RhdChQeVVuaWNvZGVfQVNfVU5JQ09ERShwYXRoKSwgJndzdGF0YnVmKTsKKyAgICBpZiAoIWVycikKKyAgICAgICAgc3RhdGJ1Zi0+c3RfbW9kZSA9IHdzdGF0YnVmLnN0X21vZGU7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgaW50IHJldDsKKyAgICBQeU9iamVjdCAqYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHBhdGgpOworICAgIGlmIChieXRlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0ID0gc3RhdChQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIHN0YXRidWYpOworICAgIFB5X0RFQ1JFRihieXRlcyk7CisgICAgcmV0dXJuIHJldDsKKyNlbmRpZgorfQorCisvKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQorICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gKi8KKworRklMRSAqCitfUHlfd2ZvcGVuKGNvbnN0IHdjaGFyX3QgKnBhdGgsIGNvbnN0IHdjaGFyX3QgKm1vZGUpCit7CisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBGSUxFICpmOworICAgIGNoYXIgKmNwYXRoOworICAgIGNoYXIgY21vZGVbMTBdOworICAgIHNpemVfdCByOworICAgIHIgPSB3Y3N0b21icyhjbW9kZSwgbW9kZSwgMTApOworICAgIGlmIChyID09IChzaXplX3QpLTEgfHwgciA+PSAxMCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNwYXRoID0gX1B5X3djaGFyMmNoYXIocGF0aCwgTlVMTCk7CisgICAgaWYgKGNwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGYgPSBmb3BlbihjcGF0aCwgY21vZGUpOworICAgIFB5TWVtX0ZyZWUoY3BhdGgpOworICAgIHJldHVybiBmOworI2Vsc2UKKyAgICByZXR1cm4gX3dmb3BlbihwYXRoLCBtb2RlKTsKKyNlbmRpZgorfQorCisvKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCisgICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLworCitGSUxFKgorX1B5X2ZvcGVuKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB3Y2hhcl90IHdtb2RlWzEwXTsKKyAgICBpbnQgdXNpemU7CisKKyAgICB1c2l6ZSA9IE11bHRpQnl0ZVRvV2lkZUNoYXIoQ1BfQUNQLCAwLCBtb2RlLCAtMSwgd21vZGUsIHNpemVvZih3bW9kZSkpOworICAgIGlmICh1c2l6ZSA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBfd2ZvcGVuKFB5VW5pY29kZV9BU19VTklDT0RFKHBhdGgpLCB3bW9kZSk7CisjZWxzZQorICAgIEZJTEUgKmY7CisgICAgUHlPYmplY3QgKmJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChwYXRoKTsKKyAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZiA9IGZvcGVuKFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKSwgbW9kZSk7CisgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICByZXR1cm4gZjsKKyNlbmRpZgorfQorCisjaWZkZWYgSEFWRV9SRUFETElOSworCisvKiBSZWFkIHZhbHVlIG9mIHN5bWJvbGljIGxpbmsuIEVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlIGVuY29kaW5nLCBkZWNvZGUKKyAgIHRoZSByZXN1bHQgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLiAqLworCitpbnQKK19QeV93cmVhZGxpbmsoY29uc3Qgd2NoYXJfdCAqcGF0aCwgd2NoYXJfdCAqYnVmLCBzaXplX3QgYnVmc2l6KQoreworICAgIGNoYXIgKmNwYXRoOworICAgIGNoYXIgY2J1ZltQQVRIX01BWF07CisgICAgd2NoYXJfdCAqd2J1ZjsKKyAgICBpbnQgcmVzOworICAgIHNpemVfdCByMTsKKworICAgIGNwYXRoID0gX1B5X3djaGFyMmNoYXIocGF0aCwgTlVMTCk7CisgICAgaWYgKGNwYXRoID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gKGludClyZWFkbGluayhjcGF0aCwgY2J1ZiwgUEFUSF9NQVgpOworICAgIFB5TWVtX0ZyZWUoY3BhdGgpOworICAgIGlmIChyZXMgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAocmVzID09IFBBVEhfTUFYKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNidWZbcmVzXSA9ICdcMCc7IC8qIGJ1ZiB3aWxsIGJlIG51bGwgdGVybWluYXRlZCAqLworICAgIHdidWYgPSBfUHlfY2hhcjJ3Y2hhcihjYnVmLCAmcjEpOworICAgIGlmICh3YnVmID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGJ1ZnNpeiA8PSByMSkgeworICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB3Y3NuY3B5KGJ1Ziwgd2J1ZiwgYnVmc2l6KTsKKyAgICBQeU1lbV9GcmVlKHdidWYpOworICAgIHJldHVybiAoaW50KXIxOworfQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1JFQUxQQVRICisKKy8qIFJldHVybiB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZS4gRW5jb2RlIHBhdGggdG8gdGhlIGxvY2FsZQorICAgZW5jb2RpbmcsIGRlY29kZSB0aGUgcmVzdWx0IGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZy4gKi8KKword2NoYXJfdCoKK19QeV93cmVhbHBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCwKKyAgICAgICAgICAgICAgd2NoYXJfdCAqcmVzb2x2ZWRfcGF0aCwgc2l6ZV90IHJlc29sdmVkX3BhdGhfc2l6ZSkKK3sKKyAgICBjaGFyICpjcGF0aDsKKyAgICBjaGFyIGNyZXNvbHZlZF9wYXRoW1BBVEhfTUFYXTsKKyAgICB3Y2hhcl90ICp3cmVzb2x2ZWRfcGF0aDsKKyAgICBjaGFyICpyZXM7CisgICAgc2l6ZV90IHI7CisgICAgY3BhdGggPSBfUHlfd2NoYXIyY2hhcihwYXRoLCBOVUxMKTsKKyAgICBpZiAoY3BhdGggPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlcyA9IHJlYWxwYXRoKGNwYXRoLCBjcmVzb2x2ZWRfcGF0aCk7CisgICAgUHlNZW1fRnJlZShjcGF0aCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdyZXNvbHZlZF9wYXRoID0gX1B5X2NoYXIyd2NoYXIoY3Jlc29sdmVkX3BhdGgsICZyKTsKKyAgICBpZiAod3Jlc29sdmVkX3BhdGggPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChyZXNvbHZlZF9wYXRoX3NpemUgPD0gcikgeworICAgICAgICBQeU1lbV9GcmVlKHdyZXNvbHZlZF9wYXRoKTsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOworICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIHJldHVybiByZXNvbHZlZF9wYXRoOworfQorI2VuZGlmCisKKy8qIEdldCB0aGUgY3VycmVudCBkaXJlY3RvcnkuIHNpemUgaXMgdGhlIGJ1ZmZlciBzaXplIGluIHdpZGUgY2hhcmFjdGVycworICAgaW5jbHVkaW5nIHRoZSBudWxsIGNoYXJhY3Rlci4gRGVjb2RlIHRoZSBwYXRoIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZy4gKi8KKword2NoYXJfdCoKK19QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworI2Vsc2UKKyAgICBjaGFyIGZuYW1lW1BBVEhfTUFYXTsKKyAgICB3Y2hhcl90ICp3bmFtZTsKKyAgICBzaXplX3QgbGVuOworCisgICAgaWYgKGdldGN3ZChmbmFtZSwgUEFUSF9NQVgpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHduYW1lID0gX1B5X2NoYXIyd2NoYXIoZm5hbWUsICZsZW4pOworICAgIGlmICh3bmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoc2l6ZSA8PSBsZW4pIHsKKyAgICAgICAgUHlNZW1fRnJlZSh3bmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB3Y3NuY3B5KGJ1Ziwgd25hbWUsIHNpemUpOworICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgIHJldHVybiBidWY7CisjZW5kaWYKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCmluZGV4IDc5Y2I1ZjkuLmMzNTA5MDcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCisrKyBiL1B5dGhvbi9mb3JtYXR0ZXJfdW5pY29kZS5jCkBAIC05LDggKzksNiBAQAogI2RlZmluZSBGT1JNQVRfU1RSSU5HICBfUHlVbmljb2RlX0Zvcm1hdEFkdmFuY2VkCiAjZGVmaW5lIEZPUk1BVF9MT05HICAgIF9QeUxvbmdfRm9ybWF0QWR2YW5jZWQKICNkZWZpbmUgRk9STUFUX0ZMT0FUICAgX1B5RmxvYXRfRm9ybWF0QWR2YW5jZWQKLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAjZGVmaW5lIEZPUk1BVF9DT01QTEVYIF9QeUNvbXBsZXhfRm9ybWF0QWR2YW5jZWQKLSNlbmRpZgogCiAjaW5jbHVkZSAiLi4vT2JqZWN0cy9zdHJpbmdsaWIvZm9ybWF0dGVyLmgiCmRpZmYgLS1naXQgYS9QeXRob24vZnV0dXJlLmMgYi9QeXRob24vZnV0dXJlLmMKaW5kZXggNTE1ZGNkOS4uZDZiNjUzZiAxMDA2NDQKLS0tIGEvUHl0aG9uL2Z1dHVyZS5jCisrKyBiL1B5dGhvbi9mdXR1cmUuYwpAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlICJ0b2tlbi5oIgogI2luY2x1ZGUgImdyYW1pbml0LmgiCiAjaW5jbHVkZSAiY29kZS5oIgotI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJzeW10YWJsZS5oIgogCiAjZGVmaW5lIFVOREVGSU5FRF9GVVRVUkVfRkVBVFVSRSAiZnV0dXJlIGZlYXR1cmUgJS4xMDBzIGlzIG5vdCBkZWZpbmVkIgpAQCAtNDQsMTIgKzQzLDEyIEBACiAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGZlYXR1cmUsICJicmFjZXMiKSA9PSAwKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhIGNoYW5jZSIpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb24oZmlsZW5hbWUsIHMtPmxpbmVubyk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgVU5ERUZJTkVEX0ZVVFVSRV9GRUFUVVJFLCBmZWF0dXJlKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uKGZpbGVuYW1lLCBzLT5saW5lbm8pOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtOTgsOCArOTcsNyBAQAogICAgICAgICAgICAgICAgIGlmIChkb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUl9MQVRFX0ZVVFVSRSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uKGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5saW5lbm8pOworICAgICAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFmdXR1cmVfY2hlY2tfZmVhdHVyZXMoZmYsIHMsIGZpbGVuYW1lKSkKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRhcmdzLmMgYi9QeXRob24vZ2V0YXJncy5jCmluZGV4IDAwMDliMzUuLjYwMDk0MWQgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9nZXRhcmdzLmMKKysrIGIvUHl0aG9uL2dldGFyZ3MuYwpAQCAtMTA1LDE1ICsxMDUsNyBAQAogewogICAgIHZhX2xpc3QgbHZhOwogCi0jaWZkZWYgVkFfTElTVF9JU19BUlJBWQotICAgIG1lbWNweShsdmEsIHZhLCBzaXplb2YodmFfbGlzdCkpOwotI2Vsc2UKLSNpZmRlZiBfX3ZhX2NvcHkKLSAgICBfX3ZhX2NvcHkobHZhLCB2YSk7Ci0jZWxzZQotICAgIGx2YSA9IHZhOwotI2VuZGlmCi0jZW5kaWYKKyAgICAgICAgUHlfVkFfQ09QWShsdmEsIHZhKTsKIAogICAgIHJldHVybiB2Z2V0YXJnczEoYXJncywgZm9ybWF0LCAmbHZhLCAwKTsKIH0KQEAgLTEyMywxNSArMTE1LDcgQEAKIHsKICAgICB2YV9saXN0IGx2YTsKIAotI2lmZGVmIFZBX0xJU1RfSVNfQVJSQVkKLSAgICBtZW1jcHkobHZhLCB2YSwgc2l6ZW9mKHZhX2xpc3QpKTsKLSNlbHNlCi0jaWZkZWYgX192YV9jb3B5Ci0gICAgX192YV9jb3B5KGx2YSwgdmEpOwotI2Vsc2UKLSAgICBsdmEgPSB2YTsKLSNlbmRpZgotI2VuZGlmCisgICAgICAgIFB5X1ZBX0NPUFkobHZhLCB2YSk7CiAKICAgICByZXR1cm4gdmdldGFyZ3MxKGFyZ3MsIGZvcm1hdCwgJmx2YSwgRkxBR19TSVpFX1QpOwogfQpAQCAtMTYyLDEwICsxNDYsMTkgQEAKIH0KIAogc3RhdGljIGludAotYWRkY2xlYW51cCh2b2lkICpwdHIsIFB5T2JqZWN0ICoqZnJlZWxpc3QsIFB5Q2Fwc3VsZV9EZXN0cnVjdG9yIGRlc3RyKQorYWRkY2xlYW51cCh2b2lkICpwdHIsIFB5T2JqZWN0ICoqZnJlZWxpc3QsIGludCBpc19idWZmZXIpCiB7CiAgICAgUHlPYmplY3QgKmNvYmo7CiAgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBQeUNhcHN1bGVfRGVzdHJ1Y3RvciBkZXN0cjsKKworICAgIGlmIChpc19idWZmZXIpIHsKKyAgICAgICAgZGVzdHIgPSBjbGVhbnVwX2J1ZmZlcjsKKyAgICAgICAgbmFtZSA9IEdFVEFSR1NfQ0FQU1VMRV9OQU1FX0NMRUFOVVBfQlVGRkVSOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlc3RyID0gY2xlYW51cF9wdHI7CisgICAgICAgIG5hbWUgPSBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX1BUUjsKKyAgICB9CiAKICAgICBpZiAoISpmcmVlbGlzdCkgewogICAgICAgICAqZnJlZWxpc3QgPSBQeUxpc3RfTmV3KDApOwpAQCAtMTc1LDEzICsxNjgsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGRlc3RyID09IGNsZWFudXBfcHRyKSB7Ci0gICAgICAgIG5hbWUgPSBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX1BUUjsKLSAgICB9IGVsc2UgaWYgKGRlc3RyID09IGNsZWFudXBfYnVmZmVyKSB7Ci0gICAgICAgIG5hbWUgPSBHRVRBUkdTX0NBUFNVTEVfTkFNRV9DTEVBTlVQX0JVRkZFUjsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQogICAgIGNvYmogPSBQeUNhcHN1bGVfTmV3KHB0ciwgbmFtZSwgZGVzdHIpOwogICAgIGlmICghY29iaikgewogICAgICAgICBkZXN0cihwdHIpOwpAQCAtNjI1LDYgKzYxMSw3IEBACiAgICAgICAgICpxPXM7IFwKICAgICB9CiAjZGVmaW5lIEJVRkZFUl9MRU4gICAgICAoKGZsYWdzICYgRkxBR19TSVpFX1QpID8gKnEyOipxKQorI2RlZmluZSBSRVRVUk5fRVJSX09DQ1VSUkVEIHJldHVybiBtc2didWYKIAogICAgIGNvbnN0IGNoYXIgKmZvcm1hdCA9ICpwX2Zvcm1hdDsKICAgICBjaGFyIGMgPSAqZm9ybWF0Kys7CkBAIC02MzYsMTkgKzYyMywxOSBAQAogICAgICAgICBjaGFyICpwID0gdmFfYXJnKCpwX3ZhLCBjaGFyICopOwogICAgICAgICBsb25nIGl2YWw7CiAgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF9lcnJvcihhcmcpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8Yj4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBpdmFsID0gUHlMb25nX0FzTG9uZyhhcmcpOwogICAgICAgICBpZiAoaXZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8Yj4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlIGlmIChpdmFsIDwgMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAidW5zaWduZWQgYnl0ZSBpbnRlZ2VyIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxiPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zaWduZWQgYnl0ZSBpbnRlZ2VyIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl2YWwgPiBVQ0hBUl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgInVuc2lnbmVkIGJ5dGUgaW50ZWdlciBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8Yj4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc2lnbmVkIGJ5dGUgaW50ZWdlciBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCA9ICh1bnNpZ25lZCBjaGFyKSBpdmFsOwpAQCAtNjYwLDEwICs2NDcsMTAgQEAKICAgICAgICAgY2hhciAqcCA9IHZhX2FyZygqcF92YSwgY2hhciAqKTsKICAgICAgICAgbG9uZyBpdmFsOwogICAgICAgICBpZiAoZmxvYXRfYXJndW1lbnRfZXJyb3IoYXJnKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJpbnRlZ2VyPEI+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soYXJnKTsKICAgICAgICAgaWYgKGl2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJpbnRlZ2VyPEI+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgKnAgPSAodW5zaWduZWQgY2hhcikgaXZhbDsKICAgICAgICAgYnJlYWs7CkBAIC02NzMsMTkgKzY2MCwxOSBAQAogICAgICAgICBzaG9ydCAqcCA9IHZhX2FyZygqcF92YSwgc2hvcnQgKik7CiAgICAgICAgIGxvbmcgaXZhbDsKICAgICAgICAgaWYgKGZsb2F0X2FyZ3VtZW50X2Vycm9yKGFyZykpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxoPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGl2YWwgPSBQeUxvbmdfQXNMb25nKGFyZyk7CiAgICAgICAgIGlmIChpdmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxoPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGVsc2UgaWYgKGl2YWwgPCBTSFJUX01JTikgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAic2lnbmVkIHNob3J0IGludGVnZXIgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJpbnRlZ2VyPGg+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZWQgc2hvcnQgaW50ZWdlciBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpdmFsID4gU0hSVF9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgInNpZ25lZCBzaG9ydCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxoPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIHNob3J0IGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgKnAgPSAoc2hvcnQpIGl2YWw7CkBAIC02OTcsMTAgKzY4NCwxMCBAQAogICAgICAgICB1bnNpZ25lZCBzaG9ydCAqcCA9IHZhX2FyZygqcF92YSwgdW5zaWduZWQgc2hvcnQgKik7CiAgICAgICAgIGxvbmcgaXZhbDsKICAgICAgICAgaWYgKGZsb2F0X2FyZ3VtZW50X2Vycm9yKGFyZykpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxIPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGl2YWwgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdNYXNrKGFyZyk7CiAgICAgICAgIGlmIChpdmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxIPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICpwID0gKHVuc2lnbmVkIHNob3J0KSBpdmFsOwogICAgICAgICBicmVhazsKQEAgLTcxMCwxOSArNjk3LDE5IEBACiAgICAgICAgIGludCAqcCA9IHZhX2FyZygqcF92YSwgaW50ICopOwogICAgICAgICBsb25nIGl2YWw7CiAgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF9lcnJvcihhcmcpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8aT4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBpdmFsID0gUHlMb25nX0FzTG9uZyhhcmcpOwogICAgICAgICBpZiAoaXZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8aT4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlIGlmIChpdmFsID4gSU5UX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxpPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVkIGludGVnZXIgaXMgZ3JlYXRlciB0aGFuIG1heGltdW0iKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaXZhbCA8IElOVF9NSU4pIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJzaWduZWQgaW50ZWdlciBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8aT4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICpwID0gaXZhbDsKQEAgLTczNCwxMCArNzIxLDEwIEBACiAgICAgICAgIHVuc2lnbmVkIGludCAqcCA9IHZhX2FyZygqcF92YSwgdW5zaWduZWQgaW50ICopOwogICAgICAgICB1bnNpZ25lZCBpbnQgaXZhbDsKICAgICAgICAgaWYgKGZsb2F0X2FyZ3VtZW50X2Vycm9yKGFyZykpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiaW50ZWdlcjxJPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGl2YWwgPSAodW5zaWduZWQgaW50KVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2soYXJnKTsKICAgICAgICAgaWYgKGl2YWwgPT0gKHVuc2lnbmVkIGludCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8ST4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCA9IGl2YWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNzQ5LDE0ICs3MzYsMTQgQEAKICAgICAgICAgUHlfc3NpemVfdCAqcCA9IHZhX2FyZygqcF92YSwgUHlfc3NpemVfdCAqKTsKICAgICAgICAgUHlfc3NpemVfdCBpdmFsID0gLTE7CiAgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF9lcnJvcihhcmcpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8bj4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgoYXJnKTsKICAgICAgICAgaWYgKGlvYmogIT0gTlVMTCkgewogICAgICAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc1NzaXplX3QoaW9iaik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGl2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJpbnRlZ2VyPG4+IiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKICAgICAgICAgKnAgPSBpdmFsOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03NjQsMTAgKzc1MSwxMCBAQAogICAgICAgICBsb25nICpwID0gdmFfYXJnKCpwX3ZhLCBsb25nICopOwogICAgICAgICBsb25nIGl2YWw7CiAgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF9lcnJvcihhcmcpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8bD4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBpdmFsID0gUHlMb25nX0FzTG9uZyhhcmcpOwogICAgICAgICBpZiAoaXZhbCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImludGVnZXI8bD4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCA9IGl2YWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNzg3LDEyICs3NzQsMTQgQEAKICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogICAgIGNhc2UgJ0wnOiB7LyogUFlfTE9OR19MT05HICovCiAgICAgICAgIFBZX0xPTkdfTE9ORyAqcCA9IHZhX2FyZyggKnBfdmEsIFBZX0xPTkdfTE9ORyAqICk7Ci0gICAgICAgIFBZX0xPTkdfTE9ORyBpdmFsID0gUHlMb25nX0FzTG9uZ0xvbmcoIGFyZyApOwotICAgICAgICBpZiAoaXZhbCA9PSAoUFlfTE9OR19MT05HKS0xICYmIFB5RXJyX09jY3VycmVkKCkgKSB7Ci0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigibG9uZzxMPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgUFlfTE9OR19MT05HIGl2YWw7CisgICAgICAgIGlmIChmbG9hdF9hcmd1bWVudF9lcnJvcihhcmcpKQorICAgICAgICAgICAgUkVUVVJOX0VSUl9PQ0NVUlJFRDsKKyAgICAgICAgaXZhbCA9IFB5TG9uZ19Bc0xvbmdMb25nKGFyZyk7CisgICAgICAgIGlmIChpdmFsID09IChQWV9MT05HX0xPTkcpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgICpwID0gaXZhbDsKLSAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTgxMiw3ICs4MDEsNyBAQAogICAgICAgICBmbG9hdCAqcCA9IHZhX2FyZygqcF92YSwgZmxvYXQgKik7CiAgICAgICAgIGRvdWJsZSBkdmFsID0gUHlGbG9hdF9Bc0RvdWJsZShhcmcpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJmbG9hdDxmPiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICpwID0gKGZsb2F0KSBkdmFsOwogICAgICAgICBicmVhazsKQEAgLTgyMiwyNCArODExLDIyIEBACiAgICAgICAgIGRvdWJsZSAqcCA9IHZhX2FyZygqcF92YSwgZG91YmxlICopOwogICAgICAgICBkb3VibGUgZHZhbCA9IFB5RmxvYXRfQXNEb3VibGUoYXJnKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigiZmxvYXQ8ZD4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCA9IGR2YWw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICBjYXNlICdEJzogey8qIGNvbXBsZXggZG91YmxlICovCiAgICAgICAgIFB5X2NvbXBsZXggKnAgPSB2YV9hcmcoKnBfdmEsIFB5X2NvbXBsZXggKik7CiAgICAgICAgIFB5X2NvbXBsZXggY3ZhbDsKICAgICAgICAgY3ZhbCA9IFB5Q29tcGxleF9Bc0NDb21wbGV4KGFyZyk7CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImNvbXBsZXg8RD4iLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAqcCA9IGN2YWw7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbmRpZiAvKiBXSVRIT1VUX0NPTVBMRVggKi8KIAogICAgIGNhc2UgJ2MnOiB7LyogY2hhciAqLwogICAgICAgICBjaGFyICpwID0gdmFfYXJnKCpwX3ZhLCBjaGFyICopOwpAQCAtODYwLDczICs4NDcsOSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICAvKiBYWFggV0FBQUFIISAgJ3MnLCAneScsICd6JywgJ3UnLCAnWicsICdlJywgJ3cnLCAndCcgY29kZXMgYWxsCisgICAgLyogWFhYIFdBQUFBSCEgICdzJywgJ3knLCAneicsICd1JywgJ1onLCAnZScsICd3JyBjb2RlcyBhbGwKICAgICAgICBuZWVkIHRvIGJlIGNsZWFuZWQgdXAhICovCiAKLSAgICBjYXNlICdzJzogey8qIHRleHQgc3RyaW5nICovCi0gICAgICAgIGlmICgqZm9ybWF0ID09ICcqJykgewotICAgICAgICAgICAgUHlfYnVmZmVyICpwID0gKFB5X2J1ZmZlciAqKXZhX2FyZygqcF92YSwgUHlfYnVmZmVyICopOwotCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICB1YXJnID0gVU5JQ09ERV9ERUZBVUxUX0VOQ09ESU5HKGFyZyk7Ci0gICAgICAgICAgICAgICAgaWYgKHVhcmcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoQ09OVl9VTklDT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICAgICAgUHlCdWZmZXJfRmlsbEluZm8ocCwgYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHVhcmcpLCBQeUJ5dGVzX0dFVF9TSVpFKHVhcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KLSAgICAgICAgICAgICAgICBjaGFyICpidWY7Ci0gICAgICAgICAgICAgICAgaWYgKGdldGJ1ZmZlcihhcmcsIHAsICZidWYpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoYnVmLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWRkY2xlYW51cChwLCBmcmVlbGlzdCwgY2xlYW51cF9idWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIoY2xlYW51cCBwcm9ibGVtKSIsCi0gICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZvcm1hdCsrOwotICAgICAgICB9IGVsc2UgaWYgKCpmb3JtYXQgPT0gJyMnKSB7Ci0gICAgICAgICAgICB2b2lkICoqcCA9ICh2b2lkICoqKXZhX2FyZygqcF92YSwgY2hhciAqKik7Ci0gICAgICAgICAgICBGRVRDSF9TSVpFOwotCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICB1YXJnID0gVU5JQ09ERV9ERUZBVUxUX0VOQ09ESU5HKGFyZyk7Ci0gICAgICAgICAgICAgICAgaWYgKHVhcmcgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoQ09OVl9VTklDT0RFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICAgICAgKnAgPSBQeUJ5dGVzX0FTX1NUUklORyh1YXJnKTsKLSAgICAgICAgICAgICAgICBTVE9SRV9TSVpFKFB5Qnl0ZXNfR0VUX1NJWkUodWFyZykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KLSAgICAgICAgICAgICAgICAvKiBYWFggUmVhbGx5PyAqLwotICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50ID0gY29udmVydGJ1ZmZlcihhcmcsIHAsICZidWYpOwotICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKGJ1ZiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICAgICAgICAgIFNUT1JFX1NJWkUoY291bnQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9ybWF0Kys7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFyICoqcCA9IHZhX2FyZygqcF92YSwgY2hhciAqKik7Ci0KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewotICAgICAgICAgICAgICAgIHVhcmcgPSBVTklDT0RFX0RFRkFVTFRfRU5DT0RJTkcoYXJnKTsKLSAgICAgICAgICAgICAgICBpZiAodWFyZyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihDT05WX1VOSUNPREUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgICAgICAgICAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHVhcmcpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJzdHJpbmciLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIHN0cmxlbigqcCkgIT0gUHlCeXRlc19HRVRfU0laRSh1YXJnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigic3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogICAgIGNhc2UgJ3knOiB7LyogYW55IGJ1ZmZlci1saWtlIG9iamVjdCwgYnV0IG5vdCBQeVVuaWNvZGUgKi8KICAgICAgICAgdm9pZCAqKnAgPSAodm9pZCAqKil2YV9hcmcoKnBfdmEsIGNoYXIgKiopOwogICAgICAgICBjaGFyICpidWY7CkBAIC05MzUsNyArODU4LDcgQEAKICAgICAgICAgICAgIGlmIChnZXRidWZmZXIoYXJnLCAoUHlfYnVmZmVyKilwLCAmYnVmKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoYnVmLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgICAgIGlmIChhZGRjbGVhbnVwKHAsIGZyZWVsaXN0LCBjbGVhbnVwX2J1ZmZlcikpIHsKKyAgICAgICAgICAgIGlmIChhZGRjbGVhbnVwKHAsIGZyZWVsaXN0LCAxKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKAogICAgICAgICAgICAgICAgICAgICAiKGNsZWFudXAgcHJvYmxlbSkiLAogICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CkBAIC05NDUsMTkgKzg2OCwyNyBAQAogICAgICAgICBjb3VudCA9IGNvbnZlcnRidWZmZXIoYXJnLCBwLCAmYnVmKTsKICAgICAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKGJ1ZiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICcjJykgeworICAgICAgICBpZiAoKmZvcm1hdCA9PSAnIycpIHsKICAgICAgICAgICAgIEZFVENIX1NJWkU7CiAgICAgICAgICAgICBTVE9SRV9TSVpFKGNvdW50KTsKICAgICAgICAgICAgIGZvcm1hdCsrOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHN0cmxlbigqcCkgIT0gY291bnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCisgICAgICAgICAgICAgICAgICAgICJieXRlcyB3aXRob3V0IG51bGwgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSAneic6IHsvKiBsaWtlICdzJyBvciAncyMnLCBidXQgTm9uZSBpcyBva2F5LCBzdG9yZWQgYXMgTlVMTCAqLworICAgIGNhc2UgJ3MnOiAvKiB0ZXh0IHN0cmluZyAqLworICAgIGNhc2UgJ3onOiAvKiB0ZXh0IHN0cmluZyBvciBOb25lICovCisgICAgewogICAgICAgICBpZiAoKmZvcm1hdCA9PSAnKicpIHsKKyAgICAgICAgICAgIC8qICJzKiIgb3IgInoqIiAqLwogICAgICAgICAgICAgUHlfYnVmZmVyICpwID0gKFB5X2J1ZmZlciAqKXZhX2FyZygqcF92YSwgUHlfYnVmZmVyICopOwogCi0gICAgICAgICAgICBpZiAoYXJnID09IFB5X05vbmUpCisgICAgICAgICAgICBpZiAoYyA9PSAneicgJiYgYXJnID09IFB5X05vbmUpCiAgICAgICAgICAgICAgICAgUHlCdWZmZXJfRmlsbEluZm8ocCwgTlVMTCwgTlVMTCwgMCwgMSwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewogICAgICAgICAgICAgICAgIHVhcmcgPSBVTklDT0RFX0RFRkFVTFRfRU5DT0RJTkcoYXJnKTsKQEAgLTk3MywxOCArOTA0LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgKGdldGJ1ZmZlcihhcmcsIHAsICZidWYpIDwgMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoYnVmLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWRkY2xlYW51cChwLCBmcmVlbGlzdCwgY2xlYW51cF9idWZmZXIpKSB7CisgICAgICAgICAgICBpZiAoYWRkY2xlYW51cChwLCBmcmVlbGlzdCwgMSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigKICAgICAgICAgICAgICAgICAgICAgIihjbGVhbnVwIHByb2JsZW0pIiwKICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9ybWF0Kys7CiAgICAgICAgIH0gZWxzZSBpZiAoKmZvcm1hdCA9PSAnIycpIHsgLyogYW55IGJ1ZmZlci1saWtlIG9iamVjdCAqLworICAgICAgICAgICAgLyogInMjIiBvciAieiMiICovCiAgICAgICAgICAgICB2b2lkICoqcCA9ICh2b2lkICoqKXZhX2FyZygqcF92YSwgY2hhciAqKik7CiAgICAgICAgICAgICBGRVRDSF9TSVpFOwogCi0gICAgICAgICAgICBpZiAoYXJnID09IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICAqcCA9IDA7CisgICAgICAgICAgICBpZiAoYyA9PSAneicgJiYgYXJnID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICAqcCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgU1RPUkVfU0laRSgwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayhhcmcpKSB7CkBAIC0xMDA1LDE2ICs5MzcsMTIgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvcm1hdCsrOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogInMiIG9yICJ6IiAqLwogICAgICAgICAgICAgY2hhciAqKnAgPSB2YV9hcmcoKnBfdmEsIGNoYXIgKiopOwogICAgICAgICAgICAgdWFyZyA9IE5VTEw7CiAKLSAgICAgICAgICAgIGlmIChhcmcgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICAqcCA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGFyZykpIHsKLSAgICAgICAgICAgICAgICAvKiBFbmFibGUgbnVsbCBieXRlIGNoZWNrIGJlbG93ICovCi0gICAgICAgICAgICAgICAgdWFyZyA9IGFyZzsKLSAgICAgICAgICAgICAgICAqcCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGFyZyk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYyA9PSAneicgJiYgYXJnID09IFB5X05vbmUpCisgICAgICAgICAgICAgICAgKnAgPSBOVUxMOwogICAgICAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKGFyZykpIHsKICAgICAgICAgICAgICAgICB1YXJnID0gVU5JQ09ERV9ERUZBVUxUX0VOQ09ESU5HKGFyZyk7CiAgICAgICAgICAgICAgICAgaWYgKHVhcmcgPT0gTlVMTCkKQEAgLTEwMjMsMzUgKzk1MSwyOCBAQAogICAgICAgICAgICAgICAgICpwID0gUHlCeXRlc19BU19TVFJJTkcodWFyZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoInN0cmluZyBvciBOb25lIiwKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihjID09ICd6JyA/ICJzdHIgb3IgTm9uZSIgOiAic3RyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoKmZvcm1hdCA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBGRVRDSF9TSVpFOwotICAgICAgICAgICAgICAgIGFzc2VydCgwKTsgLyogWFhYIHJlZHVuZGFudCB3aXRoIGlmLWNhc2UgKi8KLSAgICAgICAgICAgICAgICBpZiAoYXJnID09IFB5X05vbmUpIHsKLSAgICAgICAgICAgICAgICAgICAgU1RPUkVfU0laRSgwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFNUT1JFX1NJWkUoUHlCeXRlc19TaXplKGFyZykpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCpwICE9IE5VTEwgJiYgdWFyZyAhPSBOVUxMICYmCisgICAgICAgICAgICBpZiAoKnAgIT0gTlVMTCAmJiB1YXJnICE9IE5VTEwgJiYKICAgICAgICAgICAgICAgICAoUHlfc3NpemVfdCkgc3RybGVuKCpwKSAhPSBQeUJ5dGVzX0dFVF9TSVpFKHVhcmcpKQogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKAotICAgICAgICAgICAgICAgICAgICAic3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcyBvciBOb25lIiwKKyAgICAgICAgICAgICAgICAgICAgYyA9PSAneicgPyAic3RyIHdpdGhvdXQgbnVsbCBieXRlcyBvciBOb25lIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJzdHIgd2l0aG91dCBudWxsIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgJ1onOiB7LyogdW5pY29kZSwgbWF5IGJlIE5VTEwgKE5vbmUpICovCisgICAgY2FzZSAndSc6IC8qIHJhdyB1bmljb2RlIGJ1ZmZlciAoUHlfVU5JQ09ERSAqKSAqLworICAgIGNhc2UgJ1onOiAvKiByYXcgdW5pY29kZSBidWZmZXIgb3IgTm9uZSAqLworICAgIHsKICAgICAgICAgaWYgKCpmb3JtYXQgPT0gJyMnKSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KKyAgICAgICAgICAgIC8qICJzIyIgb3IgIlojIiAqLwogICAgICAgICAgICAgUHlfVU5JQ09ERSAqKnAgPSB2YV9hcmcoKnBfdmEsIFB5X1VOSUNPREUgKiopOwogICAgICAgICAgICAgRkVUQ0hfU0laRTsKIAotICAgICAgICAgICAgaWYgKGFyZyA9PSBQeV9Ob25lKSB7Ci0gICAgICAgICAgICAgICAgKnAgPSAwOworICAgICAgICAgICAgaWYgKGMgPT0gJ1onICYmIGFyZyA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgKnAgPSBOVUxMOwogICAgICAgICAgICAgICAgIFNUT1JFX1NJWkUoMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewpAQCAtMTA2MiwxNCArOTgzLDIwIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoInN0ciBvciBOb25lIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAgICAgZm9ybWF0Kys7CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiAicyIgb3IgIloiICovCiAgICAgICAgICAgICBQeV9VTklDT0RFICoqcCA9IHZhX2FyZygqcF92YSwgUHlfVU5JQ09ERSAqKik7CiAKLSAgICAgICAgICAgIGlmIChhcmcgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICAqcCA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkKKyAgICAgICAgICAgIGlmIChjID09ICdaJyAmJiBhcmcgPT0gUHlfTm9uZSkKKyAgICAgICAgICAgICAgICAqcCA9IE5VTEw7CisgICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewogICAgICAgICAgICAgICAgICpwID0gUHlVbmljb2RlX0FTX1VOSUNPREUoYXJnKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigic3RyIG9yIE5vbmUiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgaWYgKFB5X1VOSUNPREVfc3RybGVuKCpwKSAhPSBQeVVuaWNvZGVfR0VUX1NJWkUoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCisgICAgICAgICAgICAgICAgICAgICAgICAic3RyIHdpdGhvdXQgbnVsbCBjaGFyYWN0ZXIgb3IgTm9uZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihjID09ICdaJyA/ICJzdHIgb3IgTm9uZSIgOiAic3RyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTE4MCwxMSArMTEwNywxMCBAQAogICAgICAgICAgICAgICAgICpidWZmZXIgPSBQeU1lbV9ORVcoY2hhciwgc2l6ZSArIDEpOwogICAgICAgICAgICAgICAgIGlmICgqYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHMpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigKLSAgICAgICAgICAgICAgICAgICAgICAgICIobWVtb3J5IGVycm9yKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJfT0NDVVJSRUQ7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChhZGRjbGVhbnVwKCpidWZmZXIsIGZyZWVsaXN0LCBjbGVhbnVwX3B0cikpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkY2xlYW51cCgqYnVmZmVyLCBmcmVlbGlzdCwgMCkpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigKICAgICAgICAgICAgICAgICAgICAgICAgICIoY2xlYW51cCBwcm9ibGVtKSIsCkBAIC0xMjIzLDEwICsxMTQ5LDEwIEBACiAgICAgICAgICAgICAqYnVmZmVyID0gUHlNZW1fTkVXKGNoYXIsIHNpemUgKyAxKTsKICAgICAgICAgICAgIGlmICgqYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoIihtZW1vcnkgZXJyb3IpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJSX09DQ1VSUkVEOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFkZGNsZWFudXAoKmJ1ZmZlciwgZnJlZWxpc3QsIGNsZWFudXBfcHRyKSkgeworICAgICAgICAgICAgaWYgKGFkZGNsZWFudXAoKmJ1ZmZlciwgZnJlZWxpc3QsIDApKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIoY2xlYW51cCBwcm9ibGVtKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKQEAgLTEyMzcsMTkgKzExNjMsNiBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlICd1Jzogey8qIHJhdyB1bmljb2RlIGJ1ZmZlciAoUHlfVU5JQ09ERSAqKSAqLwotICAgICAgICBQeV9VTklDT0RFICoqcCA9IHZhX2FyZygqcF92YSwgUHlfVU5JQ09ERSAqKik7Ci0gICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGFyZykpCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigic3RyIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICAqcCA9IFB5VW5pY29kZV9BU19VTklDT0RFKGFyZyk7Ci0gICAgICAgIGlmICgqZm9ybWF0ID09ICcjJykgeyAvKiBzdG9yZSBwb2ludGVyIGFuZCBzaXplICovCi0gICAgICAgICAgICBGRVRDSF9TSVpFOwotICAgICAgICAgICAgU1RPUkVfU0laRShQeVVuaWNvZGVfR0VUX1NJWkUoYXJnKSk7Ci0gICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KICAgICBjYXNlICdTJzogeyAvKiBQeUJ5dGVzIG9iamVjdCAqLwogICAgICAgICBQeU9iamVjdCAqKnAgPSB2YV9hcmcoKnBfdmEsIFB5T2JqZWN0ICoqKTsKICAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soYXJnKSkKQEAgLTEyOTAsMTcgKzEyMDMsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKHR5cGUtPnRwX25hbWUsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKIAogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKCpmb3JtYXQgPT0gJz8nKSB7Ci0gICAgICAgICAgICBpbnF1aXJ5IHByZWQgPSB2YV9hcmcoKnBfdmEsIGlucXVpcnkpOwotICAgICAgICAgICAgcCA9IHZhX2FyZygqcF92YSwgUHlPYmplY3QgKiopOwotICAgICAgICAgICAgZm9ybWF0Kys7Ci0gICAgICAgICAgICBpZiAoKCpwcmVkKShhcmcpKQotICAgICAgICAgICAgICAgICpwID0gYXJnOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIodW5zcGVjaWZpZWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0KLSAgICAgICAgfQogICAgICAgICBlbHNlIGlmICgqZm9ybWF0ID09ICcmJykgewogICAgICAgICAgICAgdHlwZWRlZiBpbnQgKCpjb252ZXJ0ZXIpKFB5T2JqZWN0ICosIHZvaWQgKik7CiAgICAgICAgICAgICBjb252ZXJ0ZXIgY29udmVydCA9IHZhX2FyZygqcF92YSwgY29udmVydGVyKTsKQEAgLTEzMjMsOTYgKzEyMjUsMjkgQEAKICAgICB9CiAKIAotICAgIGNhc2UgJ3cnOiB7IC8qIG1lbW9yeSBidWZmZXIsIHJlYWQtd3JpdGUgYWNjZXNzICovCisgICAgY2FzZSAndyc6IHsgLyogIncqIjogbWVtb3J5IGJ1ZmZlciwgcmVhZC13cml0ZSBhY2Nlc3MgKi8KICAgICAgICAgdm9pZCAqKnAgPSB2YV9hcmcoKnBfdmEsIHZvaWQgKiopOwotICAgICAgICBQeUJ1ZmZlclByb2NzICpwYiA9IGFyZy0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOwotICAgICAgICBQeV9zc2l6ZV90IGNvdW50OwotICAgICAgICBpbnQgdGVtcD0tMTsKLSAgICAgICAgUHlfYnVmZmVyIHZpZXc7CiAKLSAgICAgICAgaWYgKHBiICYmIHBiLT5iZl9yZWxlYXNlYnVmZmVyICYmICpmb3JtYXQgIT0gJyonKQotICAgICAgICAgICAgLyogQnVmZmVyIG11c3QgYmUgcmVsZWFzZWQsIHlldCBjYWxsZXIgZG9lcyBub3QgdXNlCi0gICAgICAgICAgICAgICB0aGUgUHlfYnVmZmVyIHByb3RvY29sLiAqLwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoInBpbm5lZCBidWZmZXIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0KLQotICAgICAgICBpZiAocGIgJiYgcGItPmJmX2dldGJ1ZmZlciAmJiAqZm9ybWF0ID09ICcqJykgewotICAgICAgICAgICAgLyogQ2FsbGVyIGlzIGludGVyZXN0ZWQgaW4gUHlfYnVmZmVyLCBhbmQgdGhlIG9iamVjdAotICAgICAgICAgICAgICAgc3VwcG9ydHMgaXQgZGlyZWN0bHkuICovCi0gICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCAoUHlfYnVmZmVyKilwLCBQeUJVRl9XUklUQUJMRSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycigicmVhZC13cml0ZSBidWZmZXIiLCBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYWRkY2xlYW51cChwLCBmcmVlbGlzdCwgY2xlYW51cF9idWZmZXIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgICAgICIoY2xlYW51cCBwcm9ibGVtKSIsCi0gICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghUHlCdWZmZXJfSXNDb250aWd1b3VzKChQeV9idWZmZXIqKXAsICdDJykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImNvbnRpZ3VvdXMgYnVmZmVyIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBIZXJlIHdlIGhhdmUgcHJvY2Vzc2VkIHcqLCBvbmx5IHcgYW5kIHcjIHJlbWFpbi4gKi8KLSAgICAgICAgaWYgKHBiID09IE5VTEwgfHwKLSAgICAgICAgICAgIHBiLT5iZl9nZXRidWZmZXIgPT0gTlVMTCB8fAotICAgICAgICAgICAgKCh0ZW1wID0gUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCVUZfU0lNUExFKSkgIT0gMCkgfHwKLSAgICAgICAgICAgIHZpZXcucmVhZG9ubHkgPT0gMSkgewotICAgICAgICAgICAgaWYgKHRlbXA9PTApIHsKLSAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJzaW5nbGUtc2VnbWVudCByZWFkLXdyaXRlIGJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGNvdW50ID0gdmlldy5sZW4pIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIodW5zcGVjaWZpZWQpIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICAqcCA9IHZpZXcuYnVmOwotICAgICAgICBpZiAoKmZvcm1hdCA9PSAnIycpIHsKLSAgICAgICAgICAgIEZFVENIX1NJWkU7Ci0gICAgICAgICAgICBTVE9SRV9TSVpFKGNvdW50KTsKLSAgICAgICAgICAgIGZvcm1hdCsrOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgICAgLypURU86IFRoaXMgY2FuIGJlIGVsaW1pbmF0ZWQgLS0tIGhlcmUgb25seSBmb3IgYmFja3dhcmQKLSAgICAgICAgY29tcGF0aWJpbGl0eSAqLwotICAgIGNhc2UgJ3QnOiB7IC8qIDgtYml0IGNoYXJhY3RlciBidWZmZXIsIHJlYWQtb25seSBhY2Nlc3MgKi8KLSAgICAgICAgY2hhciAqKnAgPSB2YV9hcmcoKnBfdmEsIGNoYXIgKiopOwotICAgICAgICBQeUJ1ZmZlclByb2NzICpwYiA9IGFyZy0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOwotICAgICAgICBQeV9zc2l6ZV90IGNvdW50OwotICAgICAgICBQeV9idWZmZXIgdmlldzsKLQotICAgICAgICBpZiAoKmZvcm1hdCsrICE9ICcjJykKKyAgICAgICAgaWYgKCpmb3JtYXQgIT0gJyonKQogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgImludmFsaWQgdXNlIG9mICd0JyBmb3JtYXQgY2hhcmFjdGVyIiwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCB1c2Ugb2YgJ3cnIGZvcm1hdCBjaGFyYWN0ZXIiLAogICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgaWYgKHBiID09IE5VTEwgfHwgcGItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICBmb3JtYXQrKzsKKworICAgICAgICAvKiBDYWxsZXIgaXMgaW50ZXJlc3RlZCBpbiBQeV9idWZmZXIsIGFuZCB0aGUgb2JqZWN0CisgICAgICAgICAgIHN1cHBvcnRzIGl0IGRpcmVjdGx5LiAqLworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgKFB5X2J1ZmZlciopcCwgUHlCVUZfV1JJVEFCTEUpIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJyZWFkLXdyaXRlIGJ1ZmZlciIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cygoUHlfYnVmZmVyKilwLCAnQycpKSB7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKChQeV9idWZmZXIqKXApOworICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoImNvbnRpZ3VvdXMgYnVmZmVyIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOworICAgICAgICB9CisgICAgICAgIGlmIChhZGRjbGVhbnVwKHAsIGZyZWVsaXN0LCAxKSkgewogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgImJ5dGVzIG9yIHJlYWQtb25seSBjaGFyYWN0ZXIgYnVmZmVyIiwKKyAgICAgICAgICAgICAgICAiKGNsZWFudXAgcHJvYmxlbSkiLAogICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKLSAgICAgICAgaWYgKHBiLT5iZl9yZWxlYXNlYnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoCi0gICAgICAgICAgICAgICAgInN0cmluZyBvciBwaW5uZWQgYnVmZmVyIiwKLSAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7Ci0KLSAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCi0gICAgICAgICAgICByZXR1cm4gY29udmVydGVycigic3RyaW5nIG9yIHNpbmdsZS1zZWdtZW50IHJlYWQtb25seSBidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotCi0gICAgICAgIGNvdW50ID0gdmlldy5sZW47Ci0gICAgICAgICpwID0gdmlldy5idWY7Ci0KLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7Ci0KLSAgICAgICAgaWYgKGNvdW50IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCIodW5zcGVjaWZpZWQpIiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwotICAgICAgICB7Ci0gICAgICAgICAgICBGRVRDSF9TSVpFOwotICAgICAgICAgICAgU1RPUkVfU0laRShjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQyNCw2NSArMTI1OSw0NyBAQAogCiAgICAgKnBfZm9ybWF0ID0gZm9ybWF0OwogICAgIHJldHVybiBOVUxMOworCisjdW5kZWYgRkVUQ0hfU0laRQorI3VuZGVmIFNUT1JFX1NJWkUKKyN1bmRlZiBCVUZGRVJfTEVOCisjdW5kZWYgUkVUVVJOX0VSUl9PQ0NVUlJFRAogfQogCiBzdGF0aWMgUHlfc3NpemVfdAogY29udmVydGJ1ZmZlcihQeU9iamVjdCAqYXJnLCB2b2lkICoqcCwgY2hhciAqKmVycm1zZykKIHsKLSAgICBQeUJ1ZmZlclByb2NzICpwYiA9IGFyZy0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOworICAgIFB5QnVmZmVyUHJvY3MgKnBiID0gUHlfVFlQRShhcmcpLT50cF9hc19idWZmZXI7CiAgICAgUHlfc3NpemVfdCBjb3VudDsKICAgICBQeV9idWZmZXIgdmlldzsKIAogICAgICplcnJtc2cgPSBOVUxMOwogICAgICpwID0gTlVMTDsKLSAgICBpZiAocGIgPT0gTlVMTCB8fAotICAgICAgICBwYi0+YmZfZ2V0YnVmZmVyID09IE5VTEwgfHwKLSAgICAgICAgcGItPmJmX3JlbGVhc2VidWZmZXIgIT0gTlVMTCkgewotICAgICAgICAqZXJybXNnID0gImJ5dGVzIG9yIHJlYWQtb25seSBidWZmZXIiOworICAgIGlmIChwYiAhPSBOVUxMICYmIHBiLT5iZl9yZWxlYXNlYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgKmVycm1zZyA9ICJyZWFkLW9ubHkgcGlubmVkIGJ1ZmZlciI7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewotICAgICAgICAqZXJybXNnID0gImJ5dGVzIG9yIHNpbmdsZS1zZWdtZW50IHJlYWQtb25seSBidWZmZXIiOworICAgIGlmIChnZXRidWZmZXIoYXJnLCAmdmlldywgZXJybXNnKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9CiAgICAgY291bnQgPSB2aWV3LmxlbjsKICAgICAqcCA9IHZpZXcuYnVmOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiBjb3VudDsKIH0KIAotLyogWFhYIGZvciAzLngsIGdldGJ1ZmZlciBhbmQgY29udmVydGJ1ZmZlciBjYW4gcHJvYmFibHkKLSAgIGJlIG1lcmdlZCBhZ2Fpbi4gKi8KIHN0YXRpYyBpbnQKIGdldGJ1ZmZlcihQeU9iamVjdCAqYXJnLCBQeV9idWZmZXIgKnZpZXcsIGNoYXIgKiplcnJtc2cpCiB7Ci0gICAgdm9pZCAqYnVmOwotICAgIFB5X3NzaXplX3QgY291bnQ7Ci0gICAgUHlCdWZmZXJQcm9jcyAqcGIgPSBhcmctPm9iX3R5cGUtPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAocGIgPT0gTlVMTCkgeworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgKmVycm1zZyA9ICJieXRlcyBvciBidWZmZXIiOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChwYi0+YmZfZ2V0YnVmZmVyKSB7Ci0gICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCB2aWV3LCAwKSA8IDApIHsKLSAgICAgICAgICAgICplcnJtc2cgPSAiY29udmVydGlibGUgdG8gYSBidWZmZXIiOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmICghUHlCdWZmZXJfSXNDb250aWd1b3VzKHZpZXcsICdDJykpIHsKLSAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Ci0gICAgICAgICAgICAqZXJybXNnID0gImNvbnRpZ3VvdXMgYnVmZmVyIjsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cyh2aWV3LCAnQycpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7CisgICAgICAgICplcnJtc2cgPSAiY29udGlndW91cyBidWZmZXIiOworICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotCi0gICAgY291bnQgPSBjb252ZXJ0YnVmZmVyKGFyZywgJmJ1ZiwgZXJybXNnKTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgICplcnJtc2cgPSAiY29udmVydGlibGUgdG8gYSBidWZmZXIiOwotICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgfQotICAgIFB5QnVmZmVyX0ZpbGxJbmZvKHZpZXcsIE5VTEwsIGJ1ZiwgY291bnQsIDEsIDApOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xNTU4LDE1ICsxMzc1LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0jaWZkZWYgVkFfTElTVF9JU19BUlJBWQotICAgIG1lbWNweShsdmEsIHZhLCBzaXplb2YodmFfbGlzdCkpOwotI2Vsc2UKLSNpZmRlZiBfX3ZhX2NvcHkKLSAgICBfX3ZhX2NvcHkobHZhLCB2YSk7Ci0jZWxzZQotICAgIGx2YSA9IHZhOwotI2VuZGlmCi0jZW5kaWYKKyAgICAgICAgUHlfVkFfQ09QWShsdmEsIHZhKTsKIAogICAgIHJldHZhbCA9IHZnZXRhcmdza2V5d29yZHMoYXJncywga2V5d29yZHMsIGZvcm1hdCwga3dsaXN0LCAmbHZhLCAwKTsKICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMTU5MCwyMSArMTM5OSwyOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSNpZmRlZiBWQV9MSVNUX0lTX0FSUkFZCi0gICAgbWVtY3B5KGx2YSwgdmEsIHNpemVvZih2YV9saXN0KSk7Ci0jZWxzZQotI2lmZGVmIF9fdmFfY29weQotICAgIF9fdmFfY29weShsdmEsIHZhKTsKLSNlbHNlCi0gICAgbHZhID0gdmE7Ci0jZW5kaWYKLSNlbmRpZgorICAgICAgICBQeV9WQV9DT1BZKGx2YSwgdmEpOwogCiAgICAgcmV0dmFsID0gdmdldGFyZ3NrZXl3b3JkcyhhcmdzLCBrZXl3b3JkcywgZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbHZhLCBGTEFHX1NJWkVfVCk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAoraW50CitQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHMoUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpZiAoIVB5RGljdF9DaGVjayhrd2FyZ3MpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCFfUHlEaWN0X0hhc09ubHlTdHJpbmdLZXlzKGt3YXJncykpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50cyBtdXN0IGJlIHN0cmluZ3MiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiAxOworfQorCiAjZGVmaW5lIElTX0VORF9PRl9GT1JNQVQoYykgKGMgPT0gJ1wwJyB8fCBjID09ICc7JyB8fCBjID09ICc6JykKIAogc3RhdGljIGludApAQCAtMTczOCwxOCArMTU1NCwyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5d29yZHMgbXVzdCBiZSBzdHJpbmdzIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNsZWFucmV0dXJuKDAsIGZyZWVsaXN0KTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIGNoZWNrIHRoYXQgX1B5VW5pY29kZV9Bc1N0cmluZygpIHJlc3VsdCBpcyBub3QgTlVMTCAqLwogICAgICAgICAgICAga3MgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGtleSk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cmNtcChrcywga3dsaXN0W2ldKSkgewotICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGtzICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAoa3MsIGt3bGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFtYXRjaCkgewogICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJXMnIGlzIGFuIGludmFsaWQga2V5d29yZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJVUnIGlzIGFuIGludmFsaWQga2V5d29yZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgdGhpcyBmdW5jdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5KTsKICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5yZXR1cm4oMCwgZnJlZWxpc3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNzg0LDkgKzE2MDMsNyBAQAogI2VuZGlmCiAgICAgY2FzZSAnZic6IC8qIGZsb2F0ICovCiAgICAgY2FzZSAnZCc6IC8qIGRvdWJsZSAqLwotI2lmbmRlZiBXSVRIT1VUX0NPTVBMRVgKICAgICBjYXNlICdEJzogLyogY29tcGxleCBkb3VibGUgKi8KLSNlbmRpZgogICAgIGNhc2UgJ2MnOiAvKiBjaGFyICovCiAgICAgY2FzZSAnQyc6IC8qIHVuaWNvZGUgY2hhciAqLwogICAgICAgICB7CkBAIC0xODE2LDcgKzE2MzMsNiBAQAogICAgIGNhc2UgJ3onOiAvKiBzdHJpbmcgb3IgTm9uZSAqLwogICAgIGNhc2UgJ3knOiAvKiBieXRlcyAqLwogICAgIGNhc2UgJ3UnOiAvKiB1bmljb2RlIHN0cmluZyAqLwotICAgIGNhc2UgJ3QnOiAvKiBidWZmZXIsIHJlYWQtb25seSAqLwogICAgIGNhc2UgJ3cnOiAvKiBidWZmZXIsIHJlYWQtd3JpdGUgKi8KICAgICAgICAgewogICAgICAgICAgICAgKHZvaWQpIHZhX2FyZygqcF92YSwgY2hhciAqKik7CkBAIC0xODQ5LDE2ICsxNjY1LDYgQEAKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKCpwX3ZhLCBQeVR5cGVPYmplY3QqKTsKICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKCpwX3ZhLCBQeU9iamVjdCAqKik7CiAgICAgICAgICAgICB9Ci0jaWYgMAotLyogSSBkb24ndCBrbm93IHdoYXQgdGhpcyBpcyBmb3IgKi8KLSAgICAgICAgICAgIGVsc2UgaWYgKCpmb3JtYXQgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgaW5xdWlyeSBwcmVkID0gdmFfYXJnKCpwX3ZhLCBpbnF1aXJ5KTsKLSAgICAgICAgICAgICAgICBmb3JtYXQrKzsKLSAgICAgICAgICAgICAgICBpZiAoKCpwcmVkKShhcmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICh2b2lkKSB2YV9hcmcoKnBfdmEsIFB5T2JqZWN0ICoqKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgICAgIGVsc2UgaWYgKCpmb3JtYXQgPT0gJyYnKSB7CiAgICAgICAgICAgICAgICAgdHlwZWRlZiBpbnQgKCpjb252ZXJ0ZXIpKFB5T2JqZWN0ICosIHZvaWQgKik7CiAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZygqcF92YSwgY29udmVydGVyKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRjb3B5cmlnaHQuYyBiL1B5dGhvbi9nZXRjb3B5cmlnaHQuYwppbmRleCA4MjRjN2IxLi4xMzg4ZjJjIDEwMDY0NAotLS0gYS9QeXRob24vZ2V0Y29weXJpZ2h0LmMKKysrIGIvUHl0aG9uL2dldGNvcHlyaWdodC5jCkBAIC0yLDcgKzIsNyBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLXN0YXRpYyBjaGFyIGNwcnRbXSA9IAorc3RhdGljIGNoYXIgY3BydFtdID0KICJcCiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAxMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi5cblwKIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cCmRpZmYgLS1naXQgYS9QeXRob24vZ2V0b3B0LmMgYi9QeXRob24vZ2V0b3B0LmMKaW5kZXggNTE0NzMyMC4uMDY0YTE4NyAxMDA2NDQKLS0tIGEvUHl0aG9uL2dldG9wdC5jCisrKyBiL1B5dGhvbi9nZXRvcHQuYwpAQCAtODksMTIgKzg5LDYgQEAKICAgICAgICAgcmV0dXJuICdfJzsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uID09ICdYJykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAiLVggaXMgcmVzZXJ2ZWQgZm9yIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGFyZ3VtZW50c1xuIik7Ci0gICAgICAgIHJldHVybiAnXyc7Ci0gICAgfQotCiAgICAgaWYgKChwdHIgPSB3Y3NjaHIob3B0c3RyaW5nLCBvcHRpb24pKSA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChfUHlPU19vcHRlcnIpCiAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogLSVjXG4iLCAoY2hhcilvcHRpb24pOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2dyYW1pbml0LmMgYi9QeXRob24vZ3JhbWluaXQuYwppbmRleCA5MWRhZTAzLi5hOGFmNTgzIDEwMDY0NAotLS0gYS9QeXRob24vZ3JhbWluaXQuYworKysgYi9QeXRob24vZ3JhbWluaXQuYwpAQCAtMTgwLDggKzE4MCw4IEBACiAgICAgezI0LCA5fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfOF81WzRdID0gewotICAgIHsyOCwgMX0sCi0gICAgezMxLCAyfSwKKyAgICB7MjgsIDEwfSwKKyAgICB7MzEsIDExfSwKICAgICB7MzIsIDN9LAogICAgIHswLCA1fSwKIH07CkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICB7MCwgNn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzhfN1syXSA9IHsKLSAgICB7MjgsIDEwfSwKKyAgICB7MjgsIDEyfSwKICAgICB7MzIsIDN9LAogfTsKIHN0YXRpYyBhcmMgYXJjc184XzhbMV0gPSB7CkBAIC0yMDEsMTQgKzIwMSw0MCBAQAogICAgIHswLCA5fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfOF8xMFszXSA9IHsKLSAgICB7MzAsIDd9LAotICAgIHsyOSwgMTF9LAorICAgIHszMCwgNX0sCisgICAgezI5LCA0fSwKICAgICB7MCwgMTB9LAogfTsKLXN0YXRpYyBhcmMgYXJjc184XzExWzFdID0geworc3RhdGljIGFyYyBhcmNzXzhfMTFbM10gPSB7CisgICAgezI4LCAxM30sCisgICAgezMwLCAxNH0sCisgICAgezAsIDExfSwKK307CitzdGF0aWMgYXJjIGFyY3NfOF8xMlszXSA9IHsKKyAgICB7MzAsIDd9LAorICAgIHsyOSwgMTV9LAorICAgIHswLCAxMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzhfMTNbMl0gPSB7CisgICAgezMwLCAxNH0sCisgICAgezAsIDEzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfOF8xNFsyXSA9IHsKKyAgICB7MjgsIDE2fSwKKyAgICB7MzIsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc184XzE1WzFdID0gewogICAgIHsyNCwgNn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc184WzEyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc184XzE2WzNdID0geworICAgIHszMCwgMTR9LAorICAgIHsyOSwgMTd9LAorICAgIHswLCAxNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzhfMTdbMV0gPSB7CisgICAgezI0LCAxM30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc184WzE4XSA9IHsKICAgICB7MywgYXJjc184XzB9LAogICAgIHszLCBhcmNzXzhfMX0sCiAgICAgezMsIGFyY3NfOF8yfSwKQEAgLTIyMCw3ICsyNDYsMTMgQEAKICAgICB7MSwgYXJjc184Xzh9LAogICAgIHsyLCBhcmNzXzhfOX0sCiAgICAgezMsIGFyY3NfOF8xMH0sCi0gICAgezEsIGFyY3NfOF8xMX0sCisgICAgezMsIGFyY3NfOF8xMX0sCisgICAgezMsIGFyY3NfOF8xMn0sCisgICAgezIsIGFyY3NfOF8xM30sCisgICAgezIsIGFyY3NfOF8xNH0sCisgICAgezEsIGFyY3NfOF8xNX0sCisgICAgezMsIGFyY3NfOF8xNn0sCisgICAgezEsIGFyY3NfOF8xN30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzlfMFsxXSA9IHsKICAgICB7MjEsIDF9LApAQCAtMjYzLDggKzI5NSw4IEBACiAgICAgezI0LCA5fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTBfNVs0XSA9IHsKLSAgICB7MzQsIDF9LAotICAgIHszMSwgMn0sCisgICAgezM0LCAxMH0sCisgICAgezMxLCAxMX0sCiAgICAgezMyLCAzfSwKICAgICB7MCwgNX0sCiB9OwpAQCAtMjczLDcgKzMwNSw3IEBACiAgICAgezAsIDZ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xMF83WzJdID0gewotICAgIHszNCwgMTB9LAorICAgIHszNCwgMTJ9LAogICAgIHszMiwgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzEwXzhbMV0gPSB7CkBAIC0yODQsMTQgKzMxNiw0MCBAQAogICAgIHswLCA5fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTBfMTBbM10gPSB7Ci0gICAgezMwLCA3fSwKLSAgICB7MjksIDExfSwKKyAgICB7MzAsIDV9LAorICAgIHsyOSwgNH0sCiAgICAgezAsIDEwfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTBfMTFbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMTBfMTFbM10gPSB7CisgICAgezM0LCAxM30sCisgICAgezMwLCAxNH0sCisgICAgezAsIDExfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMTBfMTJbM10gPSB7CisgICAgezMwLCA3fSwKKyAgICB7MjksIDE1fSwKKyAgICB7MCwgMTJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMF8xM1syXSA9IHsKKyAgICB7MzAsIDE0fSwKKyAgICB7MCwgMTN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMF8xNFsyXSA9IHsKKyAgICB7MzQsIDE2fSwKKyAgICB7MzIsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xMF8xNVsxXSA9IHsKICAgICB7MjQsIDZ9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMTBbMTJdID0geworc3RhdGljIGFyYyBhcmNzXzEwXzE2WzNdID0geworICAgIHszMCwgMTR9LAorICAgIHsyOSwgMTd9LAorICAgIHswLCAxNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzEwXzE3WzFdID0geworICAgIHsyNCwgMTN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTBbMThdID0gewogICAgIHszLCBhcmNzXzEwXzB9LAogICAgIHszLCBhcmNzXzEwXzF9LAogICAgIHszLCBhcmNzXzEwXzJ9LApAQCAtMzAzLDcgKzM2MSwxMyBAQAogICAgIHsxLCBhcmNzXzEwXzh9LAogICAgIHsyLCBhcmNzXzEwXzl9LAogICAgIHszLCBhcmNzXzEwXzEwfSwKLSAgICB7MSwgYXJjc18xMF8xMX0sCisgICAgezMsIGFyY3NfMTBfMTF9LAorICAgIHszLCBhcmNzXzEwXzEyfSwKKyAgICB7MiwgYXJjc18xMF8xM30sCisgICAgezIsIGFyY3NfMTBfMTR9LAorICAgIHsxLCBhcmNzXzEwXzE1fSwKKyAgICB7MywgYXJjc18xMF8xNn0sCisgICAgezEsIGFyY3NfMTBfMTd9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xMV8wWzFdID0gewogICAgIHsyMSwgMX0sCkBAIC0zNjQsMjAgKzQyOCwyMCBAQAogICAgIHsxLCBhcmNzXzE0XzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xNV8wWzFdID0gewotICAgIHs5LCAxfSwKKyAgICB7NDUsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xNV8xWzNdID0gewotICAgIHs0NSwgMn0sCisgICAgezQ2LCAyfSwKICAgICB7MjksIDN9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTVfMlsyXSA9IHsKLSAgICB7NDYsIDR9LAorICAgIHs0NywgNH0sCiAgICAgezksIDR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xNV8zWzJdID0gewotICAgIHs0NiwgNX0sCi0gICAgezksIDV9LAorICAgIHs0NywgNX0sCisgICAgezQ1LCA1fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTVfNFsxXSA9IHsKICAgICB7MCwgNH0sCkBAIC0zOTQsOSArNDU4LDI1IEBACiAgICAgezEsIGFyY3NfMTVfNH0sCiAgICAgezIsIGFyY3NfMTVfNX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzE2XzBbMTJdID0gewotICAgIHs0NywgMX0sCitzdGF0aWMgYXJjIGFyY3NfMTZfMFsyXSA9IHsKKyAgICB7MjQsIDF9LAogICAgIHs0OCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzE2XzFbMl0gPSB7CisgICAgezMwLCAyfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzE2XzJbM10gPSB7CisgICAgezI0LCAxfSwKKyAgICB7NDgsIDF9LAorICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzE2WzNdID0geworICAgIHsyLCBhcmNzXzE2XzB9LAorICAgIHsyLCBhcmNzXzE2XzF9LAorICAgIHszLCBhcmNzXzE2XzJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18xN18wWzEyXSA9IHsKICAgICB7NDksIDF9LAogICAgIHs1MCwgMX0sCiAgICAgezUxLCAxfSwKQEAgLTQwNyw2NCArNDg3LDU2IEBACiAgICAgezU2LCAxfSwKICAgICB7NTcsIDF9LAogICAgIHs1OCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzE2XzFbMV0gPSB7Ci0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMTZbMl0gPSB7Ci0gICAgezEyLCBhcmNzXzE2XzB9LAotICAgIHsxLCBhcmNzXzE2XzF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18xN18wWzFdID0gewogICAgIHs1OSwgMX0sCisgICAgezYwLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMTdfMVsxXSA9IHsKLSAgICB7NjAsIDJ9LAorICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMTdfMlsxXSA9IHsKLSAgICB7MCwgMn0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18xN1szXSA9IHsKLSAgICB7MSwgYXJjc18xN18wfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMTdbMl0gPSB7CisgICAgezEyLCBhcmNzXzE3XzB9LAogICAgIHsxLCBhcmNzXzE3XzF9LAotICAgIHsxLCBhcmNzXzE3XzJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xOF8wWzFdID0gewogICAgIHs2MSwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzE4XzFbMV0gPSB7Ci0gICAgezAsIDF9LAorICAgIHs2MiwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18xOFsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18xOF8yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzE4WzNdID0gewogICAgIHsxLCBhcmNzXzE4XzB9LAogICAgIHsxLCBhcmNzXzE4XzF9LAorICAgIHsxLCBhcmNzXzE4XzJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18xOV8wWzVdID0gewotICAgIHs2MiwgMX0sCitzdGF0aWMgYXJjIGFyY3NfMTlfMFsxXSA9IHsKICAgICB7NjMsIDF9LAotICAgIHs2NCwgMX0sCi0gICAgezY1LCAxfSwKLSAgICB7NjYsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18xOV8xWzFdID0gewogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzE5WzJdID0gewotICAgIHs1LCBhcmNzXzE5XzB9LAorICAgIHsxLCBhcmNzXzE5XzB9LAogICAgIHsxLCBhcmNzXzE5XzF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yMF8wWzFdID0geworc3RhdGljIGFyYyBhcmNzXzIwXzBbNV0gPSB7CisgICAgezY0LCAxfSwKKyAgICB7NjUsIDF9LAorICAgIHs2NiwgMX0sCiAgICAgezY3LCAxfSwKKyAgICB7NjgsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18yMF8xWzFdID0gewogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzIwWzJdID0gewotICAgIHsxLCBhcmNzXzIwXzB9LAorICAgIHs1LCBhcmNzXzIwXzB9LAogICAgIHsxLCBhcmNzXzIwXzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18yMV8wWzFdID0gewotICAgIHs2OCwgMX0sCisgICAgezY5LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjFfMVsxXSA9IHsKICAgICB7MCwgMX0sCkBAIC00NzQsMTQ0ICs1NDYsMTM1IEBACiAgICAgezEsIGFyY3NfMjFfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzIyXzBbMV0gPSB7Ci0gICAgezY5LCAxfSwKKyAgICB7NzAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yMl8xWzJdID0geworc3RhdGljIGFyYyBhcmNzXzIyXzFbMV0gPSB7CisgICAgezAsIDF9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMjJbMl0gPSB7CisgICAgezEsIGFyY3NfMjJfMH0sCisgICAgezEsIGFyY3NfMjJfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzIzXzBbMV0gPSB7CisgICAgezcxLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjNfMVsyXSA9IHsKICAgICB7OSwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yMl8yWzFdID0geworc3RhdGljIGFyYyBhcmNzXzIzXzJbMV0gPSB7CiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMjJbM10gPSB7Ci0gICAgezEsIGFyY3NfMjJfMH0sCi0gICAgezIsIGFyY3NfMjJfMX0sCi0gICAgezEsIGFyY3NfMjJfMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzIzXzBbMV0gPSB7Ci0gICAgezQ2LCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjNfMVsxXSA9IHsKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18yM1syXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMjNbM10gPSB7CiAgICAgezEsIGFyY3NfMjNfMH0sCi0gICAgezEsIGFyY3NfMjNfMX0sCisgICAgezIsIGFyY3NfMjNfMX0sCisgICAgezEsIGFyY3NfMjNfMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzI0XzBbMV0gPSB7Ci0gICAgezcwLCAxfSwKKyAgICB7NDcsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yNF8xWzJdID0geworc3RhdGljIGFyYyBhcmNzXzI0XzFbMV0gPSB7CisgICAgezAsIDF9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMjRbMl0gPSB7CisgICAgezEsIGFyY3NfMjRfMH0sCisgICAgezEsIGFyY3NfMjRfMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzI1XzBbMV0gPSB7CisgICAgezcyLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjVfMVsyXSA9IHsKICAgICB7MjQsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMjRfMlsyXSA9IHsKLSAgICB7NzEsIDN9LAorc3RhdGljIGFyYyBhcmNzXzI1XzJbMl0gPSB7CisgICAgezczLCAzfSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzI0XzNbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMjVfM1sxXSA9IHsKICAgICB7MjQsIDR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yNF80WzFdID0geworc3RhdGljIGFyYyBhcmNzXzI1XzRbMV0gPSB7CiAgICAgezAsIDR9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMjRbNV0gPSB7Ci0gICAgezEsIGFyY3NfMjRfMH0sCi0gICAgezIsIGFyY3NfMjRfMX0sCi0gICAgezIsIGFyY3NfMjRfMn0sCi0gICAgezEsIGFyY3NfMjRfM30sCi0gICAgezEsIGFyY3NfMjRfNH0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzI1WzVdID0geworICAgIHsxLCBhcmNzXzI1XzB9LAorICAgIHsyLCBhcmNzXzI1XzF9LAorICAgIHsyLCBhcmNzXzI1XzJ9LAorICAgIHsxLCBhcmNzXzI1XzN9LAorICAgIHsxLCBhcmNzXzI1XzR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yNV8wWzJdID0gewotICAgIHs3MiwgMX0sCi0gICAgezczLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjVfMVsxXSA9IHsKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18yNVsyXSA9IHsKLSAgICB7MiwgYXJjc18yNV8wfSwKLSAgICB7MSwgYXJjc18yNV8xfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjZfMFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18yNl8wWzJdID0gewogICAgIHs3NCwgMX0sCisgICAgezc1LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjZfMVsxXSA9IHsKLSAgICB7NzUsIDJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yNl8yWzFdID0gewotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzI2WzNdID0gewotICAgIHsxLCBhcmNzXzI2XzB9LAotICAgIHsxLCBhcmNzXzI2XzF9LAotICAgIHsxLCBhcmNzXzI2XzJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yN18wWzFdID0gewotICAgIHs3MSwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzI3XzFbM10gPSB7Ci0gICAgezc2LCAyfSwKLSAgICB7NzcsIDJ9LAotICAgIHsxMiwgM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzI3XzJbNF0gPSB7Ci0gICAgezc2LCAyfSwKLSAgICB7NzcsIDJ9LAotICAgIHsxMiwgM30sCi0gICAgezc0LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjdfM1sxXSA9IHsKLSAgICB7NzQsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yN180WzNdID0gewotICAgIHszMSwgNX0sCi0gICAgezEzLCA2fSwKLSAgICB7NzgsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yN181WzFdID0gewotICAgIHswLCA1fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjdfNlsxXSA9IHsKLSAgICB7NzgsIDd9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yN183WzFdID0gewotICAgIHsxNSwgNX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc18yN1s4XSA9IHsKLSAgICB7MSwgYXJjc18yN18wfSwKLSAgICB7MywgYXJjc18yN18xfSwKLSAgICB7NCwgYXJjc18yN18yfSwKLSAgICB7MSwgYXJjc18yN18zfSwKLSAgICB7MywgYXJjc18yN180fSwKLSAgICB7MSwgYXJjc18yN181fSwKLSAgICB7MSwgYXJjc18yN182fSwKLSAgICB7MSwgYXJjc18yN183fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMjhfMFsxXSA9IHsKLSAgICB7MjEsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18yOF8xWzJdID0gewotICAgIHs4MCwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18yOF8yWzFdID0gewotICAgIHsyMSwgM30sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzI2WzJdID0geworICAgIHsyLCBhcmNzXzI2XzB9LAorICAgIHsxLCBhcmNzXzI2XzF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yN18wWzFdID0geworICAgIHs3NiwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzI3XzFbMV0gPSB7CisgICAgezc3LCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjdfMlsxXSA9IHsKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc18yN1szXSA9IHsKKyAgICB7MSwgYXJjc18yN18wfSwKKyAgICB7MSwgYXJjc18yN18xfSwKKyAgICB7MSwgYXJjc18yN18yfSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjhfMFsxXSA9IHsKKyAgICB7NzMsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOF8xWzNdID0geworICAgIHs3OCwgMn0sCisgICAgezc5LCAyfSwKKyAgICB7MTIsIDN9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOF8yWzRdID0geworICAgIHs3OCwgMn0sCisgICAgezc5LCAyfSwKKyAgICB7MTIsIDN9LAorICAgIHs3NiwgNH0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzI4XzNbMV0gPSB7Ci0gICAgezAsIDN9LAorICAgIHs3NiwgNH0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18yOFs0XSA9IHsKK3N0YXRpYyBhcmMgYXJjc18yOF80WzNdID0geworICAgIHszMSwgNX0sCisgICAgezEzLCA2fSwKKyAgICB7ODAsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOF81WzFdID0geworICAgIHswLCA1fSwKK307CitzdGF0aWMgYXJjIGFyY3NfMjhfNlsxXSA9IHsKKyAgICB7ODAsIDd9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18yOF83WzFdID0geworICAgIHsxNSwgNX0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc18yOFs4XSA9IHsKICAgICB7MSwgYXJjc18yOF8wfSwKLSAgICB7MiwgYXJjc18yOF8xfSwKLSAgICB7MSwgYXJjc18yOF8yfSwKKyAgICB7MywgYXJjc18yOF8xfSwKKyAgICB7NCwgYXJjc18yOF8yfSwKICAgICB7MSwgYXJjc18yOF8zfSwKKyAgICB7MywgYXJjc18yOF80fSwKKyAgICB7MSwgYXJjc18yOF81fSwKKyAgICB7MSwgYXJjc18yOF82fSwKKyAgICB7MSwgYXJjc18yOF83fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjlfMFsxXSA9IHsKLSAgICB7MTIsIDF9LAorICAgIHsyMSwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzI5XzFbMl0gPSB7Ci0gICAgezgwLCAyfSwKKyAgICB7ODIsIDJ9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMjlfMlsxXSA9IHsKQEAgLTYyNywzNyArNjkwLDQ1IEBACiAgICAgezEsIGFyY3NfMjlfM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzMwXzBbMV0gPSB7Ci0gICAgezc5LCAxfSwKKyAgICB7MTIsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMF8xWzJdID0gewotICAgIHszMCwgMn0sCisgICAgezgyLCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzMwXzJbMl0gPSB7Ci0gICAgezc5LCAxfSwKLSAgICB7MCwgMn0sCitzdGF0aWMgYXJjIGFyY3NfMzBfMlsxXSA9IHsKKyAgICB7MjEsIDN9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMzBbM10gPSB7CitzdGF0aWMgYXJjIGFyY3NfMzBfM1sxXSA9IHsKKyAgICB7MCwgM30sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc18zMFs0XSA9IHsKICAgICB7MSwgYXJjc18zMF8wfSwKICAgICB7MiwgYXJjc18zMF8xfSwKLSAgICB7MiwgYXJjc18zMF8yfSwKKyAgICB7MSwgYXJjc18zMF8yfSwKKyAgICB7MSwgYXJjc18zMF8zfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzFfMFsxXSA9IHsKICAgICB7ODEsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMV8xWzJdID0gewotICAgIHszMCwgMH0sCisgICAgezMwLCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18zMVsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc18zMV8yWzJdID0geworICAgIHs4MSwgMX0sCisgICAgezAsIDJ9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzFbM10gPSB7CiAgICAgezEsIGFyY3NfMzFfMH0sCiAgICAgezIsIGFyY3NfMzFfMX0sCisgICAgezIsIGFyY3NfMzFfMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzMyXzBbMV0gPSB7Ci0gICAgezIxLCAxfSwKKyAgICB7ODMsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zMl8xWzJdID0gewotICAgIHs3NiwgMH0sCisgICAgezMwLCAwfSwKICAgICB7MCwgMX0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc18zMlsyXSA9IHsKQEAgLTY2NSwyMiArNzM2LDE4IEBACiAgICAgezIsIGFyY3NfMzJfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzMzXzBbMV0gPSB7Ci0gICAgezgyLCAxfSwKKyAgICB7MjEsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zM18xWzFdID0gewotICAgIHsyMSwgMn0sCitzdGF0aWMgYXJjIGFyY3NfMzNfMVsyXSA9IHsKKyAgICB7NzgsIDB9LAorICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzNfMlsyXSA9IHsKLSAgICB7MzAsIDF9LAotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzMzWzNdID0geworc3RhdGljIHN0YXRlIHN0YXRlc18zM1syXSA9IHsKICAgICB7MSwgYXJjc18zM18wfSwKLSAgICB7MSwgYXJjc18zM18xfSwKLSAgICB7MiwgYXJjc18zM18yfSwKKyAgICB7MiwgYXJjc18zM18xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzRfMFsxXSA9IHsKLSAgICB7ODMsIDF9LAorICAgIHs4NCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM0XzFbMV0gPSB7CiAgICAgezIxLCAyfSwKQEAgLTY5NSw4MyArNzYyLDYyIEBACiAgICAgezIsIGFyY3NfMzRfMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM1XzBbMV0gPSB7Ci0gICAgezg0LCAxfSwKKyAgICB7ODUsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zNV8xWzFdID0gewotICAgIHsyNCwgMn0sCisgICAgezIxLCAyfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzVfMlsyXSA9IHsKLSAgICB7MzAsIDN9LAorICAgIHszMCwgMX0sCiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zNV8zWzFdID0gewotICAgIHsyNCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM1XzRbMV0gPSB7Ci0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfMzVbNV0gPSB7CitzdGF0aWMgc3RhdGUgc3RhdGVzXzM1WzNdID0gewogICAgIHsxLCBhcmNzXzM1XzB9LAogICAgIHsxLCBhcmNzXzM1XzF9LAogICAgIHsyLCBhcmNzXzM1XzJ9LAotICAgIHsxLCBhcmNzXzM1XzN9LAotICAgIHsxLCBhcmNzXzM1XzR9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zNl8wWzhdID0gewotICAgIHs4NSwgMX0sCitzdGF0aWMgYXJjIGFyY3NfMzZfMFsxXSA9IHsKICAgICB7ODYsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc18zNl8xWzFdID0geworICAgIHsyNCwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzM2XzJbMl0gPSB7CisgICAgezMwLCAzfSwKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzM2XzNbMV0gPSB7CisgICAgezI0LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfMzZfNFsxXSA9IHsKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc18zNls1XSA9IHsKKyAgICB7MSwgYXJjc18zNl8wfSwKKyAgICB7MSwgYXJjc18zNl8xfSwKKyAgICB7MiwgYXJjc18zNl8yfSwKKyAgICB7MSwgYXJjc18zNl8zfSwKKyAgICB7MSwgYXJjc18zNl80fSwKK307CitzdGF0aWMgYXJjIGFyY3NfMzdfMFs4XSA9IHsKICAgICB7ODcsIDF9LAogICAgIHs4OCwgMX0sCiAgICAgezg5LCAxfSwKKyAgICB7OTAsIDF9LAorICAgIHs5MSwgMX0sCiAgICAgezE5LCAxfSwKICAgICB7MTgsIDF9LAogICAgIHsxNywgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzM2XzFbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfMzdfMVsxXSA9IHsKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc18zNlsyXSA9IHsKLSAgICB7OCwgYXJjc18zNl8wfSwKLSAgICB7MSwgYXJjc18zNl8xfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzdfMFsxXSA9IHsKLSAgICB7OTAsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zN18xWzFdID0gewotICAgIHsyNCwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM3XzJbMV0gPSB7Ci0gICAgezI1LCAzfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzdfM1sxXSA9IHsKLSAgICB7MjYsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zN180WzNdID0gewotICAgIHs5MSwgMX0sCi0gICAgezkyLCA1fSwKLSAgICB7MCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzM3XzVbMV0gPSB7Ci0gICAgezI1LCA2fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfMzdfNlsxXSA9IHsKLSAgICB7MjYsIDd9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zN183WzFdID0gewotICAgIHswLCA3fSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzM3WzhdID0gewotICAgIHsxLCBhcmNzXzM3XzB9LAorc3RhdGljIHN0YXRlIHN0YXRlc18zN1syXSA9IHsKKyAgICB7OCwgYXJjc18zN18wfSwKICAgICB7MSwgYXJjc18zN18xfSwKLSAgICB7MSwgYXJjc18zN18yfSwKLSAgICB7MSwgYXJjc18zN18zfSwKLSAgICB7MywgYXJjc18zN180fSwKLSAgICB7MSwgYXJjc18zN181fSwKLSAgICB7MSwgYXJjc18zN182fSwKLSAgICB7MSwgYXJjc18zN183fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzhfMFsxXSA9IHsKLSAgICB7OTMsIDF9LAorICAgIHs5MiwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM4XzFbMV0gPSB7CiAgICAgezI0LCAyfSwKQEAgLTc4Miw4ICs4MjgsOSBAQAogc3RhdGljIGFyYyBhcmNzXzM4XzNbMV0gPSB7CiAgICAgezI2LCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzhfNFsyXSA9IHsKLSAgICB7OTIsIDV9LAorc3RhdGljIGFyYyBhcmNzXzM4XzRbM10gPSB7CisgICAgezkzLCAxfSwKKyAgICB7OTQsIDV9LAogICAgIHswLCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzhfNVsxXSA9IHsKQEAgLTgwMCwyNjcgKzg0NywyNzkgQEAKICAgICB7MSwgYXJjc18zOF8xfSwKICAgICB7MSwgYXJjc18zOF8yfSwKICAgICB7MSwgYXJjc18zOF8zfSwKLSAgICB7MiwgYXJjc18zOF80fSwKKyAgICB7MywgYXJjc18zOF80fSwKICAgICB7MSwgYXJjc18zOF81fSwKICAgICB7MSwgYXJjc18zOF82fSwKICAgICB7MSwgYXJjc18zOF83fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzlfMFsxXSA9IHsKLSAgICB7OTQsIDF9LAorICAgIHs5NSwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM5XzFbMV0gPSB7Ci0gICAgezYwLCAyfSwKKyAgICB7MjQsIDJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc18zOV8yWzFdID0gewotICAgIHs5NSwgM30sCisgICAgezI1LCAzfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzlfM1sxXSA9IHsKLSAgICB7OSwgNH0sCisgICAgezI2LCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzlfNFsxXSA9IHsKLSAgICB7MjUsIDV9LAorc3RhdGljIGFyYyBhcmNzXzM5XzRbMl0gPSB7CisgICAgezk0LCA1fSwKKyAgICB7MCwgNH0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzM5XzVbMV0gPSB7Ci0gICAgezI2LCA2fSwKKyAgICB7MjUsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc18zOV82WzJdID0gewotICAgIHs5MiwgN30sCi0gICAgezAsIDZ9LAorc3RhdGljIGFyYyBhcmNzXzM5XzZbMV0gPSB7CisgICAgezI2LCA3fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfMzlfN1sxXSA9IHsKLSAgICB7MjUsIDh9LAorICAgIHswLCA3fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfMzlfOFsxXSA9IHsKLSAgICB7MjYsIDl9LAotfTsKLXN0YXRpYyBhcmMgYXJjc18zOV85WzFdID0gewotICAgIHswLCA5fSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzM5WzEwXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfMzlbOF0gPSB7CiAgICAgezEsIGFyY3NfMzlfMH0sCiAgICAgezEsIGFyY3NfMzlfMX0sCiAgICAgezEsIGFyY3NfMzlfMn0sCiAgICAgezEsIGFyY3NfMzlfM30sCi0gICAgezEsIGFyY3NfMzlfNH0sCisgICAgezIsIGFyY3NfMzlfNH0sCiAgICAgezEsIGFyY3NfMzlfNX0sCi0gICAgezIsIGFyY3NfMzlfNn0sCisgICAgezEsIGFyY3NfMzlfNn0sCiAgICAgezEsIGFyY3NfMzlfN30sCi0gICAgezEsIGFyY3NfMzlfOH0sCi0gICAgezEsIGFyY3NfMzlfOX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzBbMV0gPSB7CiAgICAgezk2LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDBfMVsxXSA9IHsKLSAgICB7MjUsIDJ9LAorICAgIHs2MiwgMn0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzJbMV0gPSB7Ci0gICAgezI2LCAzfSwKKyAgICB7OTcsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MF8zWzJdID0gewotICAgIHs5NywgNH0sCi0gICAgezk4LCA1fSwKK3N0YXRpYyBhcmMgYXJjc180MF8zWzFdID0geworICAgIHs5LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDBfNFsxXSA9IHsKLSAgICB7MjUsIDZ9LAorICAgIHsyNSwgNX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzVbMV0gPSB7Ci0gICAgezI1LCA3fSwKKyAgICB7MjYsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MF82WzFdID0gewotICAgIHsyNiwgOH0sCitzdGF0aWMgYXJjIGFyY3NfNDBfNlsyXSA9IHsKKyAgICB7OTQsIDd9LAorICAgIHswLCA2fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDBfN1sxXSA9IHsKLSAgICB7MjYsIDl9LAorICAgIHsyNSwgOH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQwXzhbNF0gPSB7Ci0gICAgezk3LCA0fSwKLSAgICB7OTIsIDEwfSwKLSAgICB7OTgsIDV9LAotICAgIHswLCA4fSwKK3N0YXRpYyBhcmMgYXJjc180MF84WzFdID0geworICAgIHsyNiwgOX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQwXzlbMV0gPSB7CiAgICAgezAsIDl9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MF8xMFsxXSA9IHsKLSAgICB7MjUsIDExfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDBfMTFbMV0gPSB7Ci0gICAgezI2LCAxMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQwXzEyWzJdID0gewotICAgIHs5OCwgNX0sCi0gICAgezAsIDEyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQwWzEzXSA9IHsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDBbMTBdID0gewogICAgIHsxLCBhcmNzXzQwXzB9LAogICAgIHsxLCBhcmNzXzQwXzF9LAogICAgIHsxLCBhcmNzXzQwXzJ9LAotICAgIHsyLCBhcmNzXzQwXzN9LAorICAgIHsxLCBhcmNzXzQwXzN9LAogICAgIHsxLCBhcmNzXzQwXzR9LAogICAgIHsxLCBhcmNzXzQwXzV9LAotICAgIHsxLCBhcmNzXzQwXzZ9LAorICAgIHsyLCBhcmNzXzQwXzZ9LAogICAgIHsxLCBhcmNzXzQwXzd9LAotICAgIHs0LCBhcmNzXzQwXzh9LAorICAgIHsxLCBhcmNzXzQwXzh9LAogICAgIHsxLCBhcmNzXzQwXzl9LAotICAgIHsxLCBhcmNzXzQwXzEwfSwKLSAgICB7MSwgYXJjc180MF8xMX0sCi0gICAgezIsIGFyY3NfNDBfMTJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180MV8wWzFdID0gewotICAgIHs5OSwgMX0sCisgICAgezk4LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDFfMVsxXSA9IHsKLSAgICB7MTAwLCAyfSwKKyAgICB7MjUsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV8yWzJdID0geworc3RhdGljIGFyYyBhcmNzXzQxXzJbMV0gPSB7CisgICAgezI2LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDFfM1syXSA9IHsKKyAgICB7OTksIDR9LAorICAgIHsxMDAsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180MV80WzFdID0geworICAgIHsyNSwgNn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQxXzVbMV0gPSB7CisgICAgezI1LCA3fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDFfNlsxXSA9IHsKKyAgICB7MjYsIDh9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180MV83WzFdID0geworICAgIHsyNiwgOX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQxXzhbNF0gPSB7CisgICAgezk5LCA0fSwKKyAgICB7OTQsIDEwfSwKKyAgICB7MTAwLCA1fSwKKyAgICB7MCwgOH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQxXzlbMV0gPSB7CisgICAgezAsIDl9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180MV8xMFsxXSA9IHsKKyAgICB7MjUsIDExfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDFfMTFbMV0gPSB7CisgICAgezI2LCAxMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQxXzEyWzJdID0geworICAgIHsxMDAsIDV9LAorICAgIHswLCAxMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180MVsxM10gPSB7CisgICAgezEsIGFyY3NfNDFfMH0sCisgICAgezEsIGFyY3NfNDFfMX0sCisgICAgezEsIGFyY3NfNDFfMn0sCisgICAgezIsIGFyY3NfNDFfM30sCisgICAgezEsIGFyY3NfNDFfNH0sCisgICAgezEsIGFyY3NfNDFfNX0sCisgICAgezEsIGFyY3NfNDFfNn0sCisgICAgezEsIGFyY3NfNDFfN30sCisgICAgezQsIGFyY3NfNDFfOH0sCisgICAgezEsIGFyY3NfNDFfOX0sCisgICAgezEsIGFyY3NfNDFfMTB9LAorICAgIHsxLCBhcmNzXzQxXzExfSwKKyAgICB7MiwgYXJjc180MV8xMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQyXzBbMV0gPSB7CisgICAgezEwMSwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQyXzFbMV0gPSB7CisgICAgezEwMiwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQyXzJbMl0gPSB7CiAgICAgezMwLCAxfSwKICAgICB7MjUsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180MV8zWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQyXzNbMV0gPSB7CiAgICAgezI2LCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDFfNFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc180Ml80WzFdID0gewogICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQxWzVdID0gewotICAgIHsxLCBhcmNzXzQxXzB9LAotICAgIHsxLCBhcmNzXzQxXzF9LAotICAgIHsyLCBhcmNzXzQxXzJ9LAotICAgIHsxLCBhcmNzXzQxXzN9LAotICAgIHsxLCBhcmNzXzQxXzR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180Ml8wWzFdID0gewotICAgIHsyNCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQyXzFbMl0gPSB7Ci0gICAgezgwLCAyfSwKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQyXzJbMV0gPSB7Ci0gICAgezEwMSwgM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzQyXzNbMV0gPSB7Ci0gICAgezAsIDN9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDJbNF0gPSB7CitzdGF0aWMgc3RhdGUgc3RhdGVzXzQyWzVdID0gewogICAgIHsxLCBhcmNzXzQyXzB9LAotICAgIHsyLCBhcmNzXzQyXzF9LAotICAgIHsxLCBhcmNzXzQyXzJ9LAorICAgIHsxLCBhcmNzXzQyXzF9LAorICAgIHsyLCBhcmNzXzQyXzJ9LAogICAgIHsxLCBhcmNzXzQyXzN9LAorICAgIHsxLCBhcmNzXzQyXzR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180M18wWzFdID0gewotICAgIHsxMDIsIDF9LAorICAgIHsyNCwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQzXzFbMl0gPSB7CisgICAgezgyLCAyfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQzXzJbMV0gPSB7CisgICAgezEwMywgM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzQzXzNbMV0gPSB7CisgICAgezAsIDN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNDNbNF0gPSB7CisgICAgezEsIGFyY3NfNDNfMH0sCisgICAgezIsIGFyY3NfNDNfMX0sCisgICAgezEsIGFyY3NfNDNfMn0sCisgICAgezEsIGFyY3NfNDNfM30sCit9Oworc3RhdGljIGFyYyBhcmNzXzQ0XzBbMV0gPSB7CisgICAgezEwNCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzQ0XzFbMl0gPSB7CiAgICAgezI0LCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQzXzJbMl0gPSB7Ci0gICAgezgwLCAzfSwKK3N0YXRpYyBhcmMgYXJjc180NF8yWzJdID0geworICAgIHs4MiwgM30sCiAgICAgezAsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180M18zWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQ0XzNbMV0gPSB7CiAgICAgezIxLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDNfNFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc180NF80WzFdID0gewogICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQzWzVdID0gewotICAgIHsxLCBhcmNzXzQzXzB9LAotICAgIHsyLCBhcmNzXzQzXzF9LAotICAgIHsyLCBhcmNzXzQzXzJ9LAotICAgIHsxLCBhcmNzXzQzXzN9LAotICAgIHsxLCBhcmNzXzQzXzR9LAorc3RhdGljIHN0YXRlIHN0YXRlc180NFs1XSA9IHsKKyAgICB7MSwgYXJjc180NF8wfSwKKyAgICB7MiwgYXJjc180NF8xfSwKKyAgICB7MiwgYXJjc180NF8yfSwKKyAgICB7MSwgYXJjc180NF8zfSwKKyAgICB7MSwgYXJjc180NF80fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDRfMFsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc180NV8wWzJdID0gewogICAgIHszLCAxfSwKICAgICB7MiwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQ0XzFbMV0gPSB7Ci0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180NF8yWzFdID0gewotICAgIHsxMDMsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180NF8zWzFdID0gewotICAgIHs2LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDRfNFsyXSA9IHsKLSAgICB7NiwgNH0sCi0gICAgezEwNCwgMX0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc180NFs1XSA9IHsKLSAgICB7MiwgYXJjc180NF8wfSwKLSAgICB7MSwgYXJjc180NF8xfSwKLSAgICB7MSwgYXJjc180NF8yfSwKLSAgICB7MSwgYXJjc180NF8zfSwKLSAgICB7MiwgYXJjc180NF80fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDVfMFsyXSA9IHsKLSAgICB7MTA1LCAxfSwKLSAgICB7MTA2LCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNDVfMVsyXSA9IHsKLSAgICB7OTAsIDN9LAorc3RhdGljIGFyYyBhcmNzXzQ1XzFbMV0gPSB7CiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180NV8yWzFdID0gewotICAgIHswLCAyfSwKKyAgICB7MTA1LCAzfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDVfM1sxXSA9IHsKLSAgICB7MTA1LCA0fSwKKyAgICB7NiwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzQ1XzRbMV0gPSB7Ci0gICAgezkyLCA1fSwKK3N0YXRpYyBhcmMgYXJjc180NV80WzJdID0geworICAgIHs2LCA0fSwKKyAgICB7MTA2LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDVfNVsxXSA9IHsKLSAgICB7MjQsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDVbNl0gPSB7CitzdGF0aWMgc3RhdGUgc3RhdGVzXzQ1WzVdID0gewogICAgIHsyLCBhcmNzXzQ1XzB9LAotICAgIHsyLCBhcmNzXzQ1XzF9LAorICAgIHsxLCBhcmNzXzQ1XzF9LAogICAgIHsxLCBhcmNzXzQ1XzJ9LAogICAgIHsxLCBhcmNzXzQ1XzN9LAotICAgIHsxLCBhcmNzXzQ1XzR9LAotICAgIHsxLCBhcmNzXzQ1XzV9LAorICAgIHsyLCBhcmNzXzQ1XzR9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180Nl8wWzJdID0gewotICAgIHsxMDUsIDF9LAotICAgIHsxMDgsIDF9LAorICAgIHsxMDcsIDF9LAorICAgIHsxMDgsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180Nl8xWzFdID0geworc3RhdGljIGFyYyBhcmNzXzQ2XzFbMl0gPSB7CisgICAgezkyLCAzfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc180NlsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc180Nl8yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDZfM1sxXSA9IHsKKyAgICB7MTA3LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDZfNFsxXSA9IHsKKyAgICB7OTQsIDV9LAorfTsKK3N0YXRpYyBhcmMgYXJjc180Nl81WzFdID0geworICAgIHsyNCwgMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180Nls2XSA9IHsKICAgICB7MiwgYXJjc180Nl8wfSwKLSAgICB7MSwgYXJjc180Nl8xfSwKKyAgICB7MiwgYXJjc180Nl8xfSwKKyAgICB7MSwgYXJjc180Nl8yfSwKKyAgICB7MSwgYXJjc180Nl8zfSwKKyAgICB7MSwgYXJjc180Nl80fSwKKyAgICB7MSwgYXJjc180Nl81fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDdfMFsxXSA9IHsKLSAgICB7MTA5LCAxfSwKK3N0YXRpYyBhcmMgYXJjc180N18wWzJdID0geworICAgIHsxMDcsIDF9LAorICAgIHsxMTAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc180N18xWzJdID0gewotICAgIHszMywgMn0sCi0gICAgezI1LCAzfSwKK3N0YXRpYyBhcmMgYXJjc180N18xWzFdID0geworICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNDdfMlsxXSA9IHsKLSAgICB7MjUsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc180N18zWzFdID0gewotICAgIHsyNCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzQ3XzRbMV0gPSB7Ci0gICAgezAsIDR9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNDdbNV0gPSB7Ci0gICAgezEsIGFyY3NfNDdfMH0sCi0gICAgezIsIGFyY3NfNDdfMX0sCi0gICAgezEsIGFyY3NfNDdfMn0sCi0gICAgezEsIGFyY3NfNDdfM30sCi0gICAgezEsIGFyY3NfNDdfNH0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzQ3WzJdID0geworICAgIHsyLCBhcmNzXzQ3XzB9LAorICAgIHsxLCBhcmNzXzQ3XzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180OF8wWzFdID0gewotICAgIHsxMDksIDF9LAorICAgIHsxMTEsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc180OF8xWzJdID0gewogICAgIHszMywgMn0sCkBAIC0xMDcwLDcgKzExMjksNyBAQAogICAgIHsyNSwgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ4XzNbMV0gPSB7Ci0gICAgezEwNywgNH0sCisgICAgezI0LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNDhfNFsxXSA9IHsKICAgICB7MCwgNH0sCkBAIC0xMDgzLDE1ICsxMTQyLDI3IEBACiAgICAgezEsIGFyY3NfNDhfNH0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ5XzBbMV0gPSB7Ci0gICAgezExMCwgMX0sCisgICAgezExMSwgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzQ5XzFbMl0gPSB7Ci0gICAgezExMSwgMH0sCi0gICAgezAsIDF9LAorICAgIHszMywgMn0sCisgICAgezI1LCAzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzQ5WzJdID0geworc3RhdGljIGFyYyBhcmNzXzQ5XzJbMV0gPSB7CisgICAgezI1LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDlfM1sxXSA9IHsKKyAgICB7MTA5LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNDlfNFsxXSA9IHsKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc180OVs1XSA9IHsKICAgICB7MSwgYXJjc180OV8wfSwKICAgICB7MiwgYXJjc180OV8xfSwKKyAgICB7MSwgYXJjc180OV8yfSwKKyAgICB7MSwgYXJjc180OV8zfSwKKyAgICB7MSwgYXJjc180OV80fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNTBfMFsxXSA9IHsKICAgICB7MTEyLCAxfSwKQEAgLTExMDQsOTEgKzExNzUsOTAgQEAKICAgICB7MSwgYXJjc181MF8wfSwKICAgICB7MiwgYXJjc181MF8xfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNTFfMFsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc181MV8wWzFdID0gewogICAgIHsxMTQsIDF9LAotICAgIHsxMTUsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181MV8xWzFdID0gewotICAgIHsxMTIsIDJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc181MV8yWzFdID0gewotICAgIHswLCAyfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzUxWzNdID0gewotICAgIHsyLCBhcmNzXzUxXzB9LAotICAgIHsxLCBhcmNzXzUxXzF9LAotICAgIHsxLCBhcmNzXzUxXzJ9LAotfTsKLXN0YXRpYyBhcmMgYXJjc181Ml8wWzFdID0gewotICAgIHsxMTYsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc181Ml8xWzJdID0gewotICAgIHsxMTcsIDB9LAorc3RhdGljIGFyYyBhcmNzXzUxXzFbMl0gPSB7CisgICAgezExNSwgMH0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNTJbMl0gPSB7Ci0gICAgezEsIGFyY3NfNTJfMH0sCi0gICAgezIsIGFyY3NfNTJfMX0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzUxWzJdID0geworICAgIHsxLCBhcmNzXzUxXzB9LAorICAgIHsyLCBhcmNzXzUxXzF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181M18wWzEwXSA9IHsKLSAgICB7MTE4LCAxfSwKK3N0YXRpYyBhcmMgYXJjc181Ml8wWzJdID0geworICAgIHsxMTYsIDF9LAorICAgIHsxMTcsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181Ml8xWzFdID0geworICAgIHsxMTQsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181Ml8yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzUyWzNdID0geworICAgIHsyLCBhcmNzXzUyXzB9LAorICAgIHsxLCBhcmNzXzUyXzF9LAorICAgIHsxLCBhcmNzXzUyXzJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181M18wWzFdID0geworICAgIHsxMDMsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181M18xWzJdID0geworICAgIHsxMTgsIDB9LAorICAgIHswLCAxfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzUzWzJdID0geworICAgIHsxLCBhcmNzXzUzXzB9LAorICAgIHsyLCBhcmNzXzUzXzF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181NF8wWzEwXSA9IHsKICAgICB7MTE5LCAxfSwKICAgICB7MTIwLCAxfSwKICAgICB7MTIxLCAxfSwKICAgICB7MTIyLCAxfSwKICAgICB7MTIzLCAxfSwKICAgICB7MTI0LCAxfSwKLSAgICB7OTUsIDF9LAotICAgIHsxMTQsIDJ9LAotICAgIHsxMjUsIDN9LAotfTsKLXN0YXRpYyBhcmMgYXJjc181M18xWzFdID0gewotICAgIHswLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTNfMlsxXSA9IHsKLSAgICB7OTUsIDF9LAotfTsKLXN0YXRpYyBhcmMgYXJjc181M18zWzJdID0gewotICAgIHsxMTQsIDF9LAotICAgIHswLCAzfSwKLX07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzUzWzRdID0gewotICAgIHsxMCwgYXJjc181M18wfSwKLSAgICB7MSwgYXJjc181M18xfSwKLSAgICB7MSwgYXJjc181M18yfSwKLSAgICB7MiwgYXJjc181M18zfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNTRfMFsyXSA9IHsKLSAgICB7MzEsIDF9LAotICAgIHsxMDEsIDJ9LAorICAgIHsxMjUsIDF9LAorICAgIHs5NywgMX0sCisgICAgezExNiwgMn0sCisgICAgezEyNiwgM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzU0XzFbMV0gPSB7Ci0gICAgezEwMSwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzU0XzJbMV0gPSB7Ci0gICAgezAsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNTRbM10gPSB7Ci0gICAgezIsIGFyY3NfNTRfMH0sCi0gICAgezEsIGFyY3NfNTRfMX0sCi0gICAgezEsIGFyY3NfNTRfMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzU1XzBbMV0gPSB7Ci0gICAgezEyNiwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzU1XzFbMl0gPSB7Ci0gICAgezEyNywgMH0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNTVbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNTRfMlsxXSA9IHsKKyAgICB7OTcsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181NF8zWzJdID0geworICAgIHsxMTYsIDF9LAorICAgIHswLCAzfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzU0WzRdID0geworICAgIHsxMCwgYXJjc181NF8wfSwKKyAgICB7MSwgYXJjc181NF8xfSwKKyAgICB7MSwgYXJjc181NF8yfSwKKyAgICB7MiwgYXJjc181NF8zfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNTVfMFsxXSA9IHsKKyAgICB7MzEsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181NV8xWzFdID0geworICAgIHsxMDMsIDJ9LAorfTsKK3N0YXRpYyBhcmMgYXJjc181NV8yWzFdID0geworICAgIHswLCAyfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzU1WzNdID0gewogICAgIHsxLCBhcmNzXzU1XzB9LAotICAgIHsyLCBhcmNzXzU1XzF9LAorICAgIHsxLCBhcmNzXzU1XzF9LAorICAgIHsxLCBhcmNzXzU1XzJ9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181Nl8wWzFdID0gewotICAgIHsxMjgsIDF9LAorICAgIHsxMjcsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181Nl8xWzJdID0gewotICAgIHsxMjksIDB9LAorICAgIHsxMjgsIDB9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzU2WzJdID0gewpAQCAtMTE5NiwxMCArMTI2NiwxMCBAQAogICAgIHsyLCBhcmNzXzU2XzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181N18wWzFdID0gewotICAgIHsxMzAsIDF9LAorICAgIHsxMjksIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181N18xWzJdID0gewotICAgIHsxMzEsIDB9LAorICAgIHsxMzAsIDB9LAogICAgIHswLCAxfSwKIH07CiBzdGF0aWMgc3RhdGUgc3RhdGVzXzU3WzJdID0gewpAQCAtMTIwNywyMyArMTI3NywyMiBAQAogICAgIHsyLCBhcmNzXzU3XzF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc181OF8wWzFdID0gewotICAgIHsxMzIsIDF9LAorICAgIHsxMzEsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc181OF8xWzNdID0gewotICAgIHsxMzMsIDB9LAotICAgIHsxMzQsIDB9LAorc3RhdGljIGFyYyBhcmNzXzU4XzFbMl0gPSB7CisgICAgezEzMiwgMH0sCiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNThbMl0gPSB7CiAgICAgezEsIGFyY3NfNThfMH0sCi0gICAgezMsIGFyY3NfNThfMX0sCisgICAgezIsIGFyY3NfNThfMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzU5XzBbMV0gPSB7Ci0gICAgezEzNSwgMX0sCisgICAgezEzMywgMX0sCiB9Owogc3RhdGljIGFyYyBhcmNzXzU5XzFbM10gPSB7Ci0gICAgezEzNiwgMH0sCi0gICAgezEzNywgMH0sCisgICAgezEzNCwgMH0sCisgICAgezEzNSwgMH0sCiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNTlbMl0gPSB7CkBAIC0xMjMxLDQ3NyArMTMwMCw0ODIgQEAKICAgICB7MywgYXJjc181OV8xfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjBfMFsxXSA9IHsKLSAgICB7MTM4LCAxfSwKKyAgICB7MTM2LCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjBfMVs1XSA9IHsKLSAgICB7MzEsIDB9LAotICAgIHsxMzksIDB9LAotICAgIHsxNDAsIDB9LAotICAgIHsxNDEsIDB9LAorc3RhdGljIGFyYyBhcmNzXzYwXzFbM10gPSB7CisgICAgezEzNywgMH0sCisgICAgezEzOCwgMH0sCiAgICAgezAsIDF9LAogfTsKIHN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjBbMl0gPSB7CiAgICAgezEsIGFyY3NfNjBfMH0sCi0gICAgezUsIGFyY3NfNjBfMX0sCisgICAgezMsIGFyY3NfNjBfMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYxXzBbNF0gPSB7Ci0gICAgezEzNiwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNjFfMFsxXSA9IHsKKyAgICB7MTM5LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjFfMVs1XSA9IHsKKyAgICB7MzEsIDB9LAorICAgIHsxNDAsIDB9LAorICAgIHsxNDEsIDB9LAorICAgIHsxNDIsIDB9LAorICAgIHswLCAxfSwKK307CitzdGF0aWMgc3RhdGUgc3RhdGVzXzYxWzJdID0geworICAgIHsxLCBhcmNzXzYxXzB9LAorICAgIHs1LCBhcmNzXzYxXzF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182Ml8wWzRdID0gewogICAgIHsxMzcsIDF9LAotICAgIHsxNDIsIDF9LAotICAgIHsxNDMsIDJ9LAorICAgIHsxMzgsIDF9LAorICAgIHsxNDMsIDF9LAorICAgIHsxNDQsIDJ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182MV8xWzFdID0gewotICAgIHsxMzgsIDJ9LAorc3RhdGljIGFyYyBhcmNzXzYyXzFbMV0gPSB7CisgICAgezEzOSwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYxXzJbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjJfMlsxXSA9IHsKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc182MVszXSA9IHsKLSAgICB7NCwgYXJjc182MV8wfSwKLSAgICB7MSwgYXJjc182MV8xfSwKLSAgICB7MSwgYXJjc182MV8yfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjJbM10gPSB7CisgICAgezQsIGFyY3NfNjJfMH0sCisgICAgezEsIGFyY3NfNjJfMX0sCisgICAgezEsIGFyY3NfNjJfMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzYyXzBbMV0gPSB7Ci0gICAgezE0NCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYyXzFbM10gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjNfMFsxXSA9IHsKICAgICB7MTQ1LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjNfMVszXSA9IHsKKyAgICB7MTQ2LCAxfSwKICAgICB7MzIsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjJfMlsxXSA9IHsKLSAgICB7MTM4LCAzfSwKK3N0YXRpYyBhcmMgYXJjc182M18yWzFdID0geworICAgIHsxMzksIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182Ml8zWzFdID0geworc3RhdGljIGFyYyBhcmNzXzYzXzNbMV0gPSB7CiAgICAgezAsIDN9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjJbNF0gPSB7Ci0gICAgezEsIGFyY3NfNjJfMH0sCi0gICAgezMsIGFyY3NfNjJfMX0sCi0gICAgezEsIGFyY3NfNjJfMn0sCi0gICAgezEsIGFyY3NfNjJfM30sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzYzWzRdID0geworICAgIHsxLCBhcmNzXzYzXzB9LAorICAgIHszLCBhcmNzXzYzXzF9LAorICAgIHsxLCBhcmNzXzYzXzJ9LAorICAgIHsxLCBhcmNzXzYzXzN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182M18wWzEwXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182NF8wWzEwXSA9IHsKICAgICB7MTMsIDF9LAotICAgIHsxNDcsIDJ9LAotICAgIHsxNDksIDN9LAorICAgIHsxNDgsIDJ9LAorICAgIHsxNTAsIDN9LAogICAgIHsyMSwgNH0sCi0gICAgezE1MiwgNH0sCi0gICAgezE1MywgNX0sCi0gICAgezc3LCA0fSwKLSAgICB7MTU0LCA0fSwKKyAgICB7MTUzLCA0fSwKKyAgICB7MTU0LCA1fSwKKyAgICB7NzksIDR9LAogICAgIHsxNTUsIDR9LAogICAgIHsxNTYsIDR9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182M18xWzNdID0gewotICAgIHs0NiwgNn0sCi0gICAgezE0NiwgNn0sCi0gICAgezE1LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjNfMlsyXSA9IHsKLSAgICB7MTQ2LCA3fSwKLSAgICB7MTQ4LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjNfM1syXSA9IHsKLSAgICB7MTUwLCA4fSwKLSAgICB7MTUxLCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNjNfNFsxXSA9IHsKLSAgICB7MCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYzXzVbMl0gPSB7Ci0gICAgezE1MywgNX0sCi0gICAgezAsIDV9LAotfTsKLXN0YXRpYyBhcmMgYXJjc182M182WzFdID0gewotICAgIHsxNSwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYzXzdbMV0gPSB7Ci0gICAgezE0OCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzYzXzhbMV0gPSB7Ci0gICAgezE1MSwgNH0sCi19Owotc3RhdGljIHN0YXRlIHN0YXRlc182M1s5XSA9IHsKLSAgICB7MTAsIGFyY3NfNjNfMH0sCi0gICAgezMsIGFyY3NfNjNfMX0sCi0gICAgezIsIGFyY3NfNjNfMn0sCi0gICAgezIsIGFyY3NfNjNfM30sCi0gICAgezEsIGFyY3NfNjNfNH0sCi0gICAgezIsIGFyY3NfNjNfNX0sCi0gICAgezEsIGFyY3NfNjNfNn0sCi0gICAgezEsIGFyY3NfNjNfN30sCi0gICAgezEsIGFyY3NfNjNfOH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY0XzBbMV0gPSB7Ci0gICAgezI0LCAxfSwKKyAgICB7MTU3LCA0fSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNjRfMVszXSA9IHsKLSAgICB7MTU3LCAyfSwKKyAgICB7NDcsIDZ9LAorICAgIHsxNDcsIDZ9LAorICAgIHsxNSwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY0XzJbMl0gPSB7CisgICAgezE0NywgN30sCisgICAgezE0OSwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY0XzNbMl0gPSB7CisgICAgezE1MSwgOH0sCisgICAgezE1MiwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzY0XzRbMV0gPSB7CisgICAgezAsIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182NF81WzJdID0geworICAgIHsxNTQsIDV9LAorICAgIHswLCA1fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjRfNlsxXSA9IHsKKyAgICB7MTUsIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182NF83WzFdID0geworICAgIHsxNDksIDR9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182NF84WzFdID0geworICAgIHsxNTIsIDR9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjRbOV0gPSB7CisgICAgezEwLCBhcmNzXzY0XzB9LAorICAgIHszLCBhcmNzXzY0XzF9LAorICAgIHsyLCBhcmNzXzY0XzJ9LAorICAgIHsyLCBhcmNzXzY0XzN9LAorICAgIHsxLCBhcmNzXzY0XzR9LAorICAgIHsyLCBhcmNzXzY0XzV9LAorICAgIHsxLCBhcmNzXzY0XzZ9LAorICAgIHsxLCBhcmNzXzY0Xzd9LAorICAgIHsxLCBhcmNzXzY0Xzh9LAorfTsKK3N0YXRpYyBhcmMgYXJjc182NV8wWzJdID0geworICAgIHsyNCwgMX0sCisgICAgezQ4LCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNjVfMVszXSA9IHsKKyAgICB7MTU4LCAyfSwKICAgICB7MzAsIDN9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfMlsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182NV8yWzFdID0gewogICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjRfM1syXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182NV8zWzNdID0gewogICAgIHsyNCwgNH0sCisgICAgezQ4LCA0fSwKICAgICB7MCwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY0XzRbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjVfNFsyXSA9IHsKICAgICB7MzAsIDN9LAogICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzY0WzVdID0gewotICAgIHsxLCBhcmNzXzY0XzB9LAotICAgIHszLCBhcmNzXzY0XzF9LAotICAgIHsxLCBhcmNzXzY0XzJ9LAotICAgIHsyLCBhcmNzXzY0XzN9LAotICAgIHsyLCBhcmNzXzY0XzR9LAorc3RhdGljIHN0YXRlIHN0YXRlc182NVs1XSA9IHsKKyAgICB7MiwgYXJjc182NV8wfSwKKyAgICB7MywgYXJjc182NV8xfSwKKyAgICB7MSwgYXJjc182NV8yfSwKKyAgICB7MywgYXJjc182NV8zfSwKKyAgICB7MiwgYXJjc182NV80fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjVfMFszXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182Nl8wWzNdID0gewogICAgIHsxMywgMX0sCi0gICAgezE0NywgMn0sCi0gICAgezc2LCAzfSwKKyAgICB7MTQ4LCAyfSwKKyAgICB7NzgsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182NV8xWzJdID0geworc3RhdGljIGFyYyBhcmNzXzY2XzFbMl0gPSB7CiAgICAgezE0LCA0fSwKICAgICB7MTUsIDV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182NV8yWzFdID0gewotICAgIHsxNTgsIDZ9LAorc3RhdGljIGFyYyBhcmNzXzY2XzJbMV0gPSB7CisgICAgezE1OSwgNn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY1XzNbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjZfM1sxXSA9IHsKICAgICB7MjEsIDV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182NV80WzFdID0geworc3RhdGljIGFyYyBhcmNzXzY2XzRbMV0gPSB7CiAgICAgezE1LCA1fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjVfNVsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182Nl81WzFdID0gewogICAgIHswLCA1fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjVfNlsxXSA9IHsKLSAgICB7MTQ4LCA1fSwKK3N0YXRpYyBhcmMgYXJjc182Nl82WzFdID0geworICAgIHsxNDksIDV9LAogfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjVbN10gPSB7Ci0gICAgezMsIGFyY3NfNjVfMH0sCi0gICAgezIsIGFyY3NfNjVfMX0sCi0gICAgezEsIGFyY3NfNjVfMn0sCi0gICAgezEsIGFyY3NfNjVfM30sCi0gICAgezEsIGFyY3NfNjVfNH0sCi0gICAgezEsIGFyY3NfNjVfNX0sCi0gICAgezEsIGFyY3NfNjVfNn0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzY2WzddID0geworICAgIHszLCBhcmNzXzY2XzB9LAorICAgIHsyLCBhcmNzXzY2XzF9LAorICAgIHsxLCBhcmNzXzY2XzJ9LAorICAgIHsxLCBhcmNzXzY2XzN9LAorICAgIHsxLCBhcmNzXzY2XzR9LAorICAgIHsxLCBhcmNzXzY2XzV9LAorICAgIHsxLCBhcmNzXzY2XzZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182Nl8wWzFdID0gewotICAgIHsxNTksIDF9LAorc3RhdGljIGFyYyBhcmNzXzY3XzBbMV0gPSB7CisgICAgezE2MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY2XzFbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjdfMVsyXSA9IHsKICAgICB7MzAsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjZfMlsyXSA9IHsKLSAgICB7MTU5LCAxfSwKK3N0YXRpYyBhcmMgYXJjc182N18yWzJdID0geworICAgIHsxNjAsIDF9LAogICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzY2WzNdID0gewotICAgIHsxLCBhcmNzXzY2XzB9LAotICAgIHsyLCBhcmNzXzY2XzF9LAotICAgIHsyLCBhcmNzXzY2XzJ9LAorc3RhdGljIHN0YXRlIHN0YXRlc182N1szXSA9IHsKKyAgICB7MSwgYXJjc182N18wfSwKKyAgICB7MiwgYXJjc182N18xfSwKKyAgICB7MiwgYXJjc182N18yfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjdfMFsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182OF8wWzJdID0gewogICAgIHsyNCwgMX0sCiAgICAgezI1LCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNjdfMVsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc182OF8xWzJdID0gewogICAgIHsyNSwgMn0sCiAgICAgezAsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182N18yWzNdID0geworc3RhdGljIGFyYyBhcmNzXzY4XzJbM10gPSB7CiAgICAgezI0LCAzfSwKLSAgICB7MTYwLCA0fSwKKyAgICB7MTYxLCA0fSwKICAgICB7MCwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY3XzNbMl0gPSB7Ci0gICAgezE2MCwgNH0sCitzdGF0aWMgYXJjIGFyY3NfNjhfM1syXSA9IHsKKyAgICB7MTYxLCA0fSwKICAgICB7MCwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY3XzRbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjhfNFsxXSA9IHsKICAgICB7MCwgNH0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc182N1s1XSA9IHsKLSAgICB7MiwgYXJjc182N18wfSwKLSAgICB7MiwgYXJjc182N18xfSwKLSAgICB7MywgYXJjc182N18yfSwKLSAgICB7MiwgYXJjc182N18zfSwKLSAgICB7MSwgYXJjc182N180fSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNjhbNV0gPSB7CisgICAgezIsIGFyY3NfNjhfMH0sCisgICAgezIsIGFyY3NfNjhfMX0sCisgICAgezMsIGFyY3NfNjhfMn0sCisgICAgezIsIGFyY3NfNjhfM30sCisgICAgezEsIGFyY3NfNjhfNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY4XzBbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNjlfMFsxXSA9IHsKICAgICB7MjUsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc182OF8xWzJdID0geworc3RhdGljIGFyYyBhcmNzXzY5XzFbMl0gPSB7CiAgICAgezI0LCAyfSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzY4XzJbMV0gPSB7Ci0gICAgezAsIDJ9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNjhbM10gPSB7Ci0gICAgezEsIGFyY3NfNjhfMH0sCi0gICAgezIsIGFyY3NfNjhfMX0sCi0gICAgezEsIGFyY3NfNjhfMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY5XzBbMV0gPSB7Ci0gICAgezExNiwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY5XzFbMl0gPSB7Ci0gICAgezMwLCAyfSwKLSAgICB7MCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzY5XzJbMl0gPSB7Ci0gICAgezExNiwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNjlfMlsxXSA9IHsKICAgICB7MCwgMn0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc182OVszXSA9IHsKICAgICB7MSwgYXJjc182OV8wfSwKICAgICB7MiwgYXJjc182OV8xfSwKLSAgICB7MiwgYXJjc182OV8yfSwKKyAgICB7MSwgYXJjc182OV8yfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzBfMFsxXSA9IHsKLSAgICB7MjQsIDF9LAorc3RhdGljIGFyYyBhcmNzXzcwXzBbMl0gPSB7CisgICAgezEwMywgMX0sCisgICAgezQ4LCAxfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzBfMVsyXSA9IHsKICAgICB7MzAsIDJ9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzBfMlsyXSA9IHsKLSAgICB7MjQsIDF9LAorc3RhdGljIGFyYyBhcmNzXzcwXzJbM10gPSB7CisgICAgezEwMywgMX0sCisgICAgezQ4LCAxfSwKICAgICB7MCwgMn0sCiB9Owogc3RhdGljIHN0YXRlIHN0YXRlc183MFszXSA9IHsKLSAgICB7MSwgYXJjc183MF8wfSwKKyAgICB7MiwgYXJjc183MF8wfSwKICAgICB7MiwgYXJjc183MF8xfSwKLSAgICB7MiwgYXJjc183MF8yfSwKKyAgICB7MywgYXJjc183MF8yfSwKIH07CiBzdGF0aWMgYXJjIGFyY3NfNzFfMFsxXSA9IHsKICAgICB7MjQsIDF9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV8xWzRdID0geworc3RhdGljIGFyYyBhcmNzXzcxXzFbMl0gPSB7CisgICAgezMwLCAyfSwKKyAgICB7MCwgMX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzcxXzJbMl0gPSB7CisgICAgezI0LCAxfSwKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIHN0YXRlIHN0YXRlc183MVszXSA9IHsKKyAgICB7MSwgYXJjc183MV8wfSwKKyAgICB7MiwgYXJjc183MV8xfSwKKyAgICB7MiwgYXJjc183MV8yfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzJfMFsxXSA9IHsKKyAgICB7MjQsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183Ml8xWzRdID0gewogICAgIHsyNSwgMn0sCi0gICAgezE1NywgM30sCisgICAgezE1OCwgM30sCiAgICAgezMwLCA0fSwKICAgICB7MCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcxXzJbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzJfMlsxXSA9IHsKICAgICB7MjQsIDV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV8zWzFdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzNbMV0gPSB7CiAgICAgezAsIDN9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV80WzJdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzRbMl0gPSB7CiAgICAgezI0LCA2fSwKICAgICB7MCwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcxXzVbM10gPSB7Ci0gICAgezE1NywgM30sCitzdGF0aWMgYXJjIGFyY3NfNzJfNVszXSA9IHsKKyAgICB7MTU4LCAzfSwKICAgICB7MzAsIDd9LAogICAgIHswLCA1fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzFfNlsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183Ml82WzJdID0gewogICAgIHszMCwgNH0sCiAgICAgezAsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV83WzJdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzdbMl0gPSB7CiAgICAgezI0LCA4fSwKICAgICB7MCwgN30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcxXzhbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzJfOFsxXSA9IHsKICAgICB7MjUsIDl9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183MV85WzFdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzlbMV0gPSB7CiAgICAgezI0LCAxMH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcxXzEwWzJdID0geworc3RhdGljIGFyYyBhcmNzXzcyXzEwWzJdID0gewogICAgIHszMCwgN30sCiAgICAgezAsIDEwfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzcxWzExXSA9IHsKLSAgICB7MSwgYXJjc183MV8wfSwKLSAgICB7NCwgYXJjc183MV8xfSwKLSAgICB7MSwgYXJjc183MV8yfSwKLSAgICB7MSwgYXJjc183MV8zfSwKLSAgICB7MiwgYXJjc183MV80fSwKLSAgICB7MywgYXJjc183MV81fSwKLSAgICB7MiwgYXJjc183MV82fSwKLSAgICB7MiwgYXJjc183MV83fSwKLSAgICB7MSwgYXJjc183MV84fSwKLSAgICB7MSwgYXJjc183MV85fSwKLSAgICB7MiwgYXJjc183MV8xMH0sCitzdGF0aWMgc3RhdGUgc3RhdGVzXzcyWzExXSA9IHsKKyAgICB7MSwgYXJjc183Ml8wfSwKKyAgICB7NCwgYXJjc183Ml8xfSwKKyAgICB7MSwgYXJjc183Ml8yfSwKKyAgICB7MSwgYXJjc183Ml8zfSwKKyAgICB7MiwgYXJjc183Ml80fSwKKyAgICB7MywgYXJjc183Ml81fSwKKyAgICB7MiwgYXJjc183Ml82fSwKKyAgICB7MiwgYXJjc183Ml83fSwKKyAgICB7MSwgYXJjc183Ml84fSwKKyAgICB7MSwgYXJjc183Ml85fSwKKyAgICB7MiwgYXJjc183Ml8xMH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzBbMV0gPSB7Ci0gICAgezE2MSwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNzNfMFsxXSA9IHsKKyAgICB7MTYyLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzJfMVsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183M18xWzFdID0gewogICAgIHsyMSwgMn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzJbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzNfMlsyXSA9IHsKICAgICB7MTMsIDN9LAogICAgIHsyNSwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzNbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzNfM1syXSA9IHsKICAgICB7MTQsIDV9LAogICAgIHsxNSwgNn0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzRbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzNfNFsxXSA9IHsKICAgICB7MjYsIDd9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183Ml81WzFdID0geworc3RhdGljIGFyYyBhcmNzXzczXzVbMV0gPSB7CiAgICAgezE1LCA2fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzJfNlsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183M182WzFdID0gewogICAgIHsyNSwgNH0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzcyXzdbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzNfN1sxXSA9IHsKICAgICB7MCwgN30sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc183Mls4XSA9IHsKLSAgICB7MSwgYXJjc183Ml8wfSwKLSAgICB7MSwgYXJjc183Ml8xfSwKLSAgICB7MiwgYXJjc183Ml8yfSwKLSAgICB7MiwgYXJjc183Ml8zfSwKLSAgICB7MSwgYXJjc183Ml80fSwKLSAgICB7MSwgYXJjc183Ml81fSwKLSAgICB7MSwgYXJjc183Ml82fSwKLSAgICB7MSwgYXJjc183Ml83fSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzNbOF0gPSB7CisgICAgezEsIGFyY3NfNzNfMH0sCisgICAgezEsIGFyY3NfNzNfMX0sCisgICAgezIsIGFyY3NfNzNfMn0sCisgICAgezIsIGFyY3NfNzNfM30sCisgICAgezEsIGFyY3NfNzNfNH0sCisgICAgezEsIGFyY3NfNzNfNX0sCisgICAgezEsIGFyY3NfNzNfNn0sCisgICAgezEsIGFyY3NfNzNfN30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzczXzBbM10gPSB7Ci0gICAgezE2MiwgMX0sCitzdGF0aWMgYXJjIGFyY3NfNzRfMFszXSA9IHsKKyAgICB7MTYzLCAxfSwKICAgICB7MzEsIDJ9LAogICAgIHszMiwgM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzczXzFbMl0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzRfMVsyXSA9IHsKICAgICB7MzAsIDR9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzNfMlsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183NF8yWzFdID0gewogICAgIHsyNCwgNX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzczXzNbMV0gPSB7CitzdGF0aWMgYXJjIGFyY3NfNzRfM1sxXSA9IHsKICAgICB7MjQsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183M180WzRdID0gewotICAgIHsxNjIsIDF9LAorc3RhdGljIGFyYyBhcmNzXzc0XzRbNF0gPSB7CisgICAgezE2MywgMX0sCiAgICAgezMxLCAyfSwKICAgICB7MzIsIDN9LAogICAgIHswLCA0fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzNfNVsyXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183NF81WzJdID0gewogICAgIHszMCwgN30sCiAgICAgezAsIDV9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183M182WzFdID0geworc3RhdGljIGFyYyBhcmNzXzc0XzZbMV0gPSB7CiAgICAgezAsIDZ9LAogfTsKLXN0YXRpYyBhcmMgYXJjc183M183WzJdID0gewotICAgIHsxNjIsIDV9LAorc3RhdGljIGFyYyBhcmNzXzc0XzdbMl0gPSB7CisgICAgezE2MywgNX0sCiAgICAgezMyLCAzfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzczWzhdID0gewotICAgIHszLCBhcmNzXzczXzB9LAotICAgIHsyLCBhcmNzXzczXzF9LAotICAgIHsxLCBhcmNzXzczXzJ9LAotICAgIHsxLCBhcmNzXzczXzN9LAotICAgIHs0LCBhcmNzXzczXzR9LAotICAgIHsyLCBhcmNzXzczXzV9LAotICAgIHsxLCBhcmNzXzczXzZ9LAotICAgIHsyLCBhcmNzXzczXzd9LAorc3RhdGljIHN0YXRlIHN0YXRlc183NFs4XSA9IHsKKyAgICB7MywgYXJjc183NF8wfSwKKyAgICB7MiwgYXJjc183NF8xfSwKKyAgICB7MSwgYXJjc183NF8yfSwKKyAgICB7MSwgYXJjc183NF8zfSwKKyAgICB7NCwgYXJjc183NF80fSwKKyAgICB7MiwgYXJjc183NF81fSwKKyAgICB7MSwgYXJjc183NF82fSwKKyAgICB7MiwgYXJjc183NF83fSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfMFsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183NV8wWzFdID0gewogICAgIHsyNCwgMX0sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc0XzFbM10gPSB7Ci0gICAgezE1NywgMn0sCitzdGF0aWMgYXJjIGFyY3NfNzVfMVszXSA9IHsKKyAgICB7MTU4LCAyfSwKICAgICB7MjksIDN9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfMlsxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183NV8yWzFdID0gewogICAgIHswLCAyfSwKIH07Ci1zdGF0aWMgYXJjIGFyY3NfNzRfM1sxXSA9IHsKK3N0YXRpYyBhcmMgYXJjc183NV8zWzFdID0gewogICAgIHsyNCwgMn0sCiB9Owotc3RhdGljIHN0YXRlIHN0YXRlc183NFs0XSA9IHsKLSAgICB7MSwgYXJjc183NF8wfSwKLSAgICB7MywgYXJjc183NF8xfSwKLSAgICB7MSwgYXJjc183NF8yfSwKLSAgICB7MSwgYXJjc183NF8zfSwKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzVbNF0gPSB7CisgICAgezEsIGFyY3NfNzVfMH0sCisgICAgezMsIGFyY3NfNzVfMX0sCisgICAgezEsIGFyY3NfNzVfMn0sCisgICAgezEsIGFyY3NfNzVfM30sCiB9Owotc3RhdGljIGFyYyBhcmNzXzc1XzBbMl0gPSB7Ci0gICAgezE1NywgMX0sCi0gICAgezE2NCwgMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc1XzFbMV0gPSB7Ci0gICAgezAsIDF9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzVbMl0gPSB7Ci0gICAgezIsIGFyY3NfNzVfMH0sCi0gICAgezEsIGFyY3NfNzVfMX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc2XzBbMV0gPSB7Ci0gICAgezk0LCAxfSwKK3N0YXRpYyBhcmMgYXJjc183Nl8wWzJdID0geworICAgIHsxNTgsIDF9LAorICAgIHsxNjUsIDF9LAogfTsKIHN0YXRpYyBhcmMgYXJjc183Nl8xWzFdID0gewotICAgIHs2MCwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc2XzJbMV0gPSB7Ci0gICAgezk1LCAzfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzZfM1sxXSA9IHsKLSAgICB7MTA1LCA0fSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzZfNFsyXSA9IHsKLSAgICB7MTYzLCA1fSwKLSAgICB7MCwgNH0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc2XzVbMV0gPSB7Ci0gICAgezAsIDV9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzZbNl0gPSB7Ci0gICAgezEsIGFyY3NfNzZfMH0sCi0gICAgezEsIGFyY3NfNzZfMX0sCi0gICAgezEsIGFyY3NfNzZfMn0sCi0gICAgezEsIGFyY3NfNzZfM30sCi0gICAgezIsIGFyY3NfNzZfNH0sCi0gICAgezEsIGFyY3NfNzZfNX0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc3XzBbMV0gPSB7Ci0gICAgezkwLCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzdfMVsxXSA9IHsKLSAgICB7MTA3LCAyfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzdfMlsyXSA9IHsKLSAgICB7MTYzLCAzfSwKLSAgICB7MCwgMn0sCi19Owotc3RhdGljIGFyYyBhcmNzXzc3XzNbMV0gPSB7Ci0gICAgezAsIDN9LAotfTsKLXN0YXRpYyBzdGF0ZSBzdGF0ZXNfNzdbNF0gPSB7Ci0gICAgezEsIGFyY3NfNzdfMH0sCi0gICAgezEsIGFyY3NfNzdfMX0sCi0gICAgezIsIGFyY3NfNzdfMn0sCi0gICAgezEsIGFyY3NfNzdfM30sCi19Owotc3RhdGljIGFyYyBhcmNzXzc4XzBbMV0gPSB7Ci0gICAgezI0LCAxfSwKLX07Ci1zdGF0aWMgYXJjIGFyY3NfNzhfMVsyXSA9IHsKLSAgICB7MzAsIDB9LAogICAgIHswLCAxfSwKIH07Ci1zdGF0aWMgc3RhdGUgc3RhdGVzXzc4WzJdID0geworc3RhdGljIHN0YXRlIHN0YXRlc183NlsyXSA9IHsKKyAgICB7MiwgYXJjc183Nl8wfSwKKyAgICB7MSwgYXJjc183Nl8xfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfMFsxXSA9IHsKKyAgICB7OTYsIDF9LAorfTsKK3N0YXRpYyBhcmMgYXJjc183N18xWzFdID0geworICAgIHs2MiwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc3XzJbMV0gPSB7CisgICAgezk3LCAzfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfM1sxXSA9IHsKKyAgICB7MTA3LCA0fSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzdfNFsyXSA9IHsKKyAgICB7MTY0LCA1fSwKKyAgICB7MCwgNH0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc3XzVbMV0gPSB7CisgICAgezAsIDV9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzdbNl0gPSB7CisgICAgezEsIGFyY3NfNzdfMH0sCisgICAgezEsIGFyY3NfNzdfMX0sCisgICAgezEsIGFyY3NfNzdfMn0sCisgICAgezEsIGFyY3NfNzdfM30sCisgICAgezIsIGFyY3NfNzdfNH0sCisgICAgezEsIGFyY3NfNzdfNX0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc4XzBbMV0gPSB7CisgICAgezkyLCAxfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzhfMVsxXSA9IHsKKyAgICB7MTA5LCAyfSwKK307CitzdGF0aWMgYXJjIGFyY3NfNzhfMlsyXSA9IHsKKyAgICB7MTY0LCAzfSwKKyAgICB7MCwgMn0sCit9Oworc3RhdGljIGFyYyBhcmNzXzc4XzNbMV0gPSB7CisgICAgezAsIDN9LAorfTsKK3N0YXRpYyBzdGF0ZSBzdGF0ZXNfNzhbNF0gPSB7CiAgICAgezEsIGFyY3NfNzhfMH0sCi0gICAgezIsIGFyY3NfNzhfMX0sCisgICAgezEsIGFyY3NfNzhfMX0sCisgICAgezIsIGFyY3NfNzhfMn0sCisgICAgezEsIGFyY3NfNzhfM30sCiB9Owogc3RhdGljIGFyYyBhcmNzXzc5XzBbMV0gPSB7CiAgICAgezIxLCAxfSwKQEAgLTE3MzAsMTEgKzE4MDQsMTEgQEAKIH07CiBzdGF0aWMgZGZhIGRmYXNbODFdID0gewogICAgIHsyNTYsICJzaW5nbGVfaW5wdXQiLCAwLCAzLCBzdGF0ZXNfMCwKLSAgICAgIlwwMDRcMDUwXDA2MFwyMDBcMDAwXDAwMFwwMDBcMDUwXDM3MFwwNDRcMDM0XDE0NFwwMTFcMDQwXDAwNFwwMDBcMDAwXDEwM1wwNTBcMDM3XDIwMiJ9LAorICAgICAiXDAwNFwwNTBcMDYwXDIwMFwwMDBcMDAwXDAwMFwyNDBcMzQwXDIyM1wxNjBcMjIwXDA0NVwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMjA0In0sCiAgICAgezI1NywgImZpbGVfaW5wdXQiLCAwLCAyLCBzdGF0ZXNfMSwKLSAgICAgIlwyMDRcMDUwXDA2MFwyMDBcMDAwXDAwMFwwMDBcMDUwXDM3MFwwNDRcMDM0XDE0NFwwMTFcMDQwXDAwNFwwMDBcMDAwXDEwM1wwNTBcMDM3XDIwMiJ9LAorICAgICAiXDIwNFwwNTBcMDYwXDIwMFwwMDBcMDAwXDAwMFwyNDBcMzQwXDIyM1wxNjBcMjIwXDA0NVwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMjA0In0sCiAgICAgezI1OCwgImV2YWxfaW5wdXQiLCAwLCAzLCBzdGF0ZXNfMiwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDQwXDAwNFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCiAgICAgezI1OSwgImRlY29yYXRvciIsIDAsIDcsIHN0YXRlc18zLAogICAgICAiXDAwMFwwMTBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI2MCwgImRlY29yYXRvcnMiLCAwLCAyLCBzdGF0ZXNfNCwKQEAgLTE3NDUsMTQ4ICsxODE5LDE0OCBAQAogICAgICAiXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI2MywgInBhcmFtZXRlcnMiLCAwLCA0LCBzdGF0ZXNfNywKICAgICAgIlwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNjQsICJ0eXBlZGFyZ3NsaXN0IiwgMCwgMTIsIHN0YXRlc184LAorICAgIHsyNjQsICJ0eXBlZGFyZ3NsaXN0IiwgMCwgMTgsIHN0YXRlc184LAogICAgICAiXDAwMFwwMDBcMDQwXDIwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI2NSwgInRmcGRlZiIsIDAsIDQsIHN0YXRlc185LAogICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI2NiwgInZhcmFyZ3NsaXN0IiwgMCwgMTIsIHN0YXRlc18xMCwKKyAgICB7MjY2LCAidmFyYXJnc2xpc3QiLCAwLCAxOCwgc3RhdGVzXzEwLAogICAgICAiXDAwMFwwMDBcMDQwXDIwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezI2NywgInZmcGRlZiIsIDAsIDIsIHN0YXRlc18xMSwKICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAogICAgIHsyNjgsICJzdG10IiwgMCwgMiwgc3RhdGVzXzEyLAotICAgICAiXDAwMFwwNTBcMDYwXDIwMFwwMDBcMDAwXDAwMFwwNTBcMzcwXDA0NFwwMzRcMTQ0XDAxMVwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMjAyIn0sCisgICAgICJcMDAwXDA1MFwwNjBcMjAwXDAwMFwwMDBcMDAwXDI0MFwzNDBcMjIzXDE2MFwyMjBcMDQ1XDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwyMDQifSwKICAgICB7MjY5LCAic2ltcGxlX3N0bXQiLCAwLCA0LCBzdGF0ZXNfMTMsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDA1MFwzNzBcMDQ0XDAzNFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wyMDAifSwKKyAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMjQwXDM0MFwyMjNcMTYwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDIwMCJ9LAogICAgIHsyNzAsICJzbWFsbF9zdG10IiwgMCwgMiwgc3RhdGVzXzE0LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwNTBcMzcwXDA0NFwwMzRcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMjAwIn0sCisgICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDI0MFwzNDBcMjIzXDE2MFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwyMDAifSwKICAgICB7MjcxLCAiZXhwcl9zdG10IiwgMCwgNiwgc3RhdGVzXzE1LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezI3MiwgImF1Z2Fzc2lnbiIsIDAsIDIsIHN0YXRlc18xNiwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwzNzdcMDA3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzMsICJkZWxfc3RtdCIsIDAsIDMsIHN0YXRlc18xNywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDEwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzQsICJwYXNzX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMTgsCisgICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MjcyLCAidGVzdGxpc3Rfc3Rhcl9leHByIiwgMCwgMywgc3RhdGVzXzE2LAorICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezI3MywgImF1Z2Fzc2lnbiIsIDAsIDIsIHN0YXRlc18xNywKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwzNzZcMDM3XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyNzQsICJkZWxfc3RtdCIsIDAsIDMsIHN0YXRlc18xOCwKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzUsICJmbG93X3N0bXQiLCAwLCAyLCBzdGF0ZXNfMTksCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxNzBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDAifSwKLSAgICB7Mjc2LCAiYnJlYWtfc3RtdCIsIDAsIDIsIHN0YXRlc18yMCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyNzcsICJjb250aW51ZV9zdG10IiwgMCwgMiwgc3RhdGVzXzIxLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI3OCwgInJldHVybl9zdG10IiwgMCwgMywgc3RhdGVzXzIyLAorICAgIHsyNzUsICJwYXNzX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMTksCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjc2LCAiZmxvd19zdG10IiwgMCwgMiwgc3RhdGVzXzIwLAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMzQwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwIn0sCisgICAgezI3NywgImJyZWFrX3N0bXQiLCAwLCAyLCBzdGF0ZXNfMjEsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjc5LCAieWllbGRfc3RtdCIsIDAsIDIsIHN0YXRlc18yMywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMCJ9LAotICAgIHsyODAsICJyYWlzZV9zdG10IiwgMCwgNSwgc3RhdGVzXzI0LAorICAgIHsyNzgsICJjb250aW51ZV9zdG10IiwgMCwgMiwgc3RhdGVzXzIyLAogICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4MSwgImltcG9ydF9zdG10IiwgMCwgMiwgc3RhdGVzXzI1LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4MiwgImltcG9ydF9uYW1lIiwgMCwgMywgc3RhdGVzXzI2LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4MywgImltcG9ydF9mcm9tIiwgMCwgOCwgc3RhdGVzXzI3LAorICAgIHsyNzksICJyZXR1cm5fc3RtdCIsIDAsIDMsIHN0YXRlc18yMywKICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODQsICJpbXBvcnRfYXNfbmFtZSIsIDAsIDQsIHN0YXRlc18yOCwKKyAgICB7MjgwLCAieWllbGRfc3RtdCIsIDAsIDIsIHN0YXRlc18yNCwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMCJ9LAorICAgIHsyODEsICJyYWlzZV9zdG10IiwgMCwgNSwgc3RhdGVzXzI1LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4MiwgImltcG9ydF9zdG10IiwgMCwgMiwgc3RhdGVzXzI2LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4MywgImltcG9ydF9uYW1lIiwgMCwgMywgc3RhdGVzXzI3LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4NCwgImltcG9ydF9mcm9tIiwgMCwgOCwgc3RhdGVzXzI4LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI4NSwgImltcG9ydF9hc19uYW1lIiwgMCwgNCwgc3RhdGVzXzI5LAogICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI4NSwgImRvdHRlZF9hc19uYW1lIiwgMCwgNCwgc3RhdGVzXzI5LAorICAgIHsyODYsICJkb3R0ZWRfYXNfbmFtZSIsIDAsIDQsIHN0YXRlc18zMCwKICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODYsICJpbXBvcnRfYXNfbmFtZXMiLCAwLCAzLCBzdGF0ZXNfMzAsCisgICAgezI4NywgImltcG9ydF9hc19uYW1lcyIsIDAsIDMsIHN0YXRlc18zMSwKICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODcsICJkb3R0ZWRfYXNfbmFtZXMiLCAwLCAyLCBzdGF0ZXNfMzEsCisgICAgezI4OCwgImRvdHRlZF9hc19uYW1lcyIsIDAsIDIsIHN0YXRlc18zMiwKICAgICAgIlwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyODgsICJkb3R0ZWRfbmFtZSIsIDAsIDIsIHN0YXRlc18zMiwKKyAgICB7Mjg5LCAiZG90dGVkX25hbWUiLCAwLCAyLCBzdGF0ZXNfMzMsCiAgICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjg5LCAiZ2xvYmFsX3N0bXQiLCAwLCAzLCBzdGF0ZXNfMzMsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjkwLCAibm9ubG9jYWxfc3RtdCIsIDAsIDMsIHN0YXRlc18zNCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDEwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHsyOTEsICJhc3NlcnRfc3RtdCIsIDAsIDUsIHN0YXRlc18zNSwKKyAgICB7MjkwLCAiZ2xvYmFsX3N0bXQiLCAwLCAzLCBzdGF0ZXNfMzQsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MjkyLCAiY29tcG91bmRfc3RtdCIsIDAsIDIsIHN0YXRlc18zNiwKLSAgICAgIlwwMDBcMDEwXDAyMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDE0NFwwMTFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMiJ9LAotICAgIHsyOTMsICJpZl9zdG10IiwgMCwgOCwgc3RhdGVzXzM3LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5NCwgIndoaWxlX3N0bXQiLCAwLCA4LCBzdGF0ZXNfMzgsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjk1LCAiZm9yX3N0bXQiLCAwLCAxMCwgc3RhdGVzXzM5LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5NiwgInRyeV9zdG10IiwgMCwgMTMsIHN0YXRlc180MCwKKyAgICB7MjkxLCAibm9ubG9jYWxfc3RtdCIsIDAsIDMsIHN0YXRlc18zNSwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTIsICJhc3NlcnRfc3RtdCIsIDAsIDUsIHN0YXRlc18zNiwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTMsICJjb21wb3VuZF9zdG10IiwgMCwgMiwgc3RhdGVzXzM3LAorICAgICAiXDAwMFwwMTBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjIwXDA0NVwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDA0In0sCisgICAgezI5NCwgImlmX3N0bXQiLCAwLCA4LCBzdGF0ZXNfMzgsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMjBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7Mjk1LCAid2hpbGVfc3RtdCIsIDAsIDgsIHN0YXRlc18zOSwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTYsICJmb3Jfc3RtdCIsIDAsIDEwLCBzdGF0ZXNfNDAsCiAgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7Mjk3LCAid2l0aF9zdG10IiwgMCwgNSwgc3RhdGVzXzQxLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAxMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezI5OCwgIndpdGhfaXRlbSIsIDAsIDQsIHN0YXRlc180MiwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDQwXDAwNFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHsyOTksICJleGNlcHRfY2xhdXNlIiwgMCwgNSwgc3RhdGVzXzQzLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMwMCwgInN1aXRlIiwgMCwgNSwgc3RhdGVzXzQ0LAotICAgICAiXDAwNFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwNTBcMzcwXDA0NFwwMzRcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMjAwIn0sCi0gICAgezMwMSwgInRlc3QiLCAwLCA2LCBzdGF0ZXNfNDUsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzAyLCAidGVzdF9ub2NvbmQiLCAwLCAyLCBzdGF0ZXNfNDYsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzAzLCAibGFtYmRlZiIsIDAsIDUsIHN0YXRlc180NywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMDQsICJsYW1iZGVmX25vY29uZCIsIDAsIDUsIHN0YXRlc180OCwKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMDUsICJvcl90ZXN0IiwgMCwgMiwgc3RhdGVzXzQ5LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMwNiwgImFuZF90ZXN0IiwgMCwgMiwgc3RhdGVzXzUwLAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMwNywgIm5vdF90ZXN0IiwgMCwgMywgc3RhdGVzXzUxLAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMwOCwgImNvbXBhcmlzb24iLCAwLCAyLCBzdGF0ZXNfNTIsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzA5LCAiY29tcF9vcCIsIDAsIDQsIHN0YXRlc181MywKLSAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDMwNFwwNzdcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAotICAgIHszMTAsICJzdGFyX2V4cHIiLCAwLCAzLCBzdGF0ZXNfNTQsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzExLCAiZXhwciIsIDAsIDIsIHN0YXRlc181NSwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHszMTIsICJ4b3JfZXhwciIsIDAsIDIsIHN0YXRlc181NiwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHszMTMsICJhbmRfZXhwciIsIDAsIDIsIHN0YXRlc181NywKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHszMTQsICJzaGlmdF9leHByIiwgMCwgMiwgc3RhdGVzXzU4LAotICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMxNSwgImFyaXRoX2V4cHIiLCAwLCAyLCBzdGF0ZXNfNTksCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzE2LCAidGVybSIsIDAsIDIsIHN0YXRlc182MCwKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHszMTcsICJmYWN0b3IiLCAwLCAzLCBzdGF0ZXNfNjEsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzE4LCAicG93ZXIiLCAwLCA0LCBzdGF0ZXNfNjIsCi0gICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDUwXDAzN1wwMDAifSwKLSAgICB7MzE5LCAiYXRvbSIsIDAsIDksIHN0YXRlc182MywKLSAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNTBcMDM3XDAwMCJ9LAotICAgIHszMjAsICJ0ZXN0bGlzdF9jb21wIiwgMCwgNSwgc3RhdGVzXzY0LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMyMSwgInRyYWlsZXIiLCAwLCA3LCBzdGF0ZXNfNjUsCi0gICAgICJcMDAwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDEwXDAwMFwwMDAifSwKLSAgICB7MzIyLCAic3Vic2NyaXB0bGlzdCIsIDAsIDMsIHN0YXRlc182NiwKLSAgICAgIlwwMDBcMDQwXDA0MFwyMDJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDQwXDAwNFwwMDBcMDAwXDEwM1wwNTBcMDM3XDAwMCJ9LAotICAgIHszMjMsICJzdWJzY3JpcHQiLCAwLCA1LCBzdGF0ZXNfNjcsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzI0LCAic2xpY2VvcCIsIDAsIDMsIHN0YXRlc182OCwKKyAgICB7Mjk3LCAidHJ5X3N0bXQiLCAwLCAxMywgc3RhdGVzXzQxLAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezI5OCwgIndpdGhfc3RtdCIsIDAsIDUsIHN0YXRlc180MiwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHsyOTksICJ3aXRoX2l0ZW0iLCAwLCA0LCBzdGF0ZXNfNDMsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzAwLCAiZXhjZXB0X2NsYXVzZSIsIDAsIDUsIHN0YXRlc180NCwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAxXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMDEsICJzdWl0ZSIsIDAsIDUsIHN0YXRlc180NSwKKyAgICAgIlwwMDRcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMjQwXDM0MFwyMjNcMTYwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDIwMCJ9LAorICAgIHszMDIsICJ0ZXN0IiwgMCwgNiwgc3RhdGVzXzQ2LAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMwMywgInRlc3Rfbm9jb25kIiwgMCwgMiwgc3RhdGVzXzQ3LAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMwNCwgImxhbWJkZWYiLCAwLCA1LCBzdGF0ZXNfNDgsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzA1LCAibGFtYmRlZl9ub2NvbmQiLCAwLCA1LCBzdGF0ZXNfNDksCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzA2LCAib3JfdGVzdCIsIDAsIDIsIHN0YXRlc181MCwKKyAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMDcsICJhbmRfdGVzdCIsIDAsIDIsIHN0YXRlc181MSwKKyAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMDgsICJub3RfdGVzdCIsIDAsIDMsIHN0YXRlc181MiwKKyAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMDksICJjb21wYXJpc29uIiwgMCwgMiwgc3RhdGVzXzUzLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMxMCwgImNvbXBfb3AiLCAwLCA0LCBzdGF0ZXNfNTQsCisgICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyXDAwMFwyMjBcMTc3XDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKKyAgICB7MzExLCAic3Rhcl9leHByIiwgMCwgMywgc3RhdGVzXzU1LAorICAgICAiXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCisgICAgezMxMiwgImV4cHIiLCAwLCAyLCBzdGF0ZXNfNTYsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzEzLCAieG9yX2V4cHIiLCAwLCAyLCBzdGF0ZXNfNTcsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzE0LCAiYW5kX2V4cHIiLCAwLCAyLCBzdGF0ZXNfNTgsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzE1LCAic2hpZnRfZXhwciIsIDAsIDIsIHN0YXRlc181OSwKKyAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMTYsICJhcml0aF9leHByIiwgMCwgMiwgc3RhdGVzXzYwLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMxNywgInRlcm0iLCAwLCAyLCBzdGF0ZXNfNjEsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzE4LCAiZmFjdG9yIiwgMCwgMywgc3RhdGVzXzYyLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMxOSwgInBvd2VyIiwgMCwgNCwgc3RhdGVzXzYzLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEyMFwwNzZcMDAwIn0sCisgICAgezMyMCwgImF0b20iLCAwLCA5LCBzdGF0ZXNfNjQsCisgICAgICJcMDAwXDA0MFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTIwXDA3NlwwMDAifSwKKyAgICB7MzIxLCAidGVzdGxpc3RfY29tcCIsIDAsIDUsIHN0YXRlc182NSwKKyAgICAgIlwwMDBcMDQwXDA0MFwyMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMjIsICJ0cmFpbGVyIiwgMCwgNywgc3RhdGVzXzY2LAorICAgICAiXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDEwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDBcMDAwIn0sCisgICAgezMyMywgInN1YnNjcmlwdGxpc3QiLCAwLCAzLCBzdGF0ZXNfNjcsCisgICAgICJcMDAwXDA0MFwwNDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjAwXDAwMFwwMDBcMDAwXDIwMFwwMjBcMDAwXDAwMFwyMDZcMTIwXDA3NlwwMDAifSwKKyAgICB7MzI0LCAic3Vic2NyaXB0IiwgMCwgNSwgc3RhdGVzXzY4LAorICAgICAiXDAwMFwwNDBcMDQwXDAwMlwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMyNSwgInNsaWNlb3AiLCAwLCAzLCBzdGF0ZXNfNjksCiAgICAgICJcMDAwXDAwMFwwMDBcMDAyXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzI1LCAiZXhwcmxpc3QiLCAwLCAzLCBzdGF0ZXNfNjksCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzI2LCAidGVzdGxpc3QiLCAwLCAzLCBzdGF0ZXNfNzAsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzI3LCAiZGljdG9yc2V0bWFrZXIiLCAwLCAxMSwgc3RhdGVzXzcxLAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCi0gICAgezMyOCwgImNsYXNzZGVmIiwgMCwgOCwgc3RhdGVzXzcyLAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAyIn0sCi0gICAgezMyOSwgImFyZ2xpc3QiLCAwLCA4LCBzdGF0ZXNfNzMsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMVwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzMwLCAiYXJndW1lbnQiLCAwLCA0LCBzdGF0ZXNfNzQsCi0gICAgICJcMDAwXDA0MFwwNDBcMjAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDA0MFwwMDRcMDAwXDAwMFwxMDNcMDUwXDAzN1wwMDAifSwKLSAgICB7MzMxLCAiY29tcF9pdGVyIiwgMCwgMiwgc3RhdGVzXzc1LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTA0XDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzMiwgImNvbXBfZm9yIiwgMCwgNiwgc3RhdGVzXzc2LAotICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMTAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCi0gICAgezMzMywgImNvbXBfaWYiLCAwLCA0LCBzdGF0ZXNfNzcsCi0gICAgICJcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDRcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKLSAgICB7MzM0LCAidGVzdGxpc3QxIiwgMCwgMiwgc3RhdGVzXzc4LAotICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDA0MFwwMDBcMDAwXDAwMFwwNDBcMDA0XDAwMFwwMDBcMTAzXDA1MFwwMzdcMDAwIn0sCisgICAgezMyNiwgImV4cHJsaXN0IiwgMCwgMywgc3RhdGVzXzcwLAorICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMyNywgInRlc3RsaXN0IiwgMCwgMywgc3RhdGVzXzcxLAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMyOCwgImRpY3RvcnNldG1ha2VyIiwgMCwgMTEsIHN0YXRlc183MiwKKyAgICAgIlwwMDBcMDQwXDA0MFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwyMDBcMDAwXDAwMFwwMDBcMjAwXDAyMFwwMDBcMDAwXDIwNlwxMjBcMDc2XDAwMCJ9LAorICAgIHszMjksICJjbGFzc2RlZiIsIDAsIDgsIHN0YXRlc183MywKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwNCJ9LAorICAgIHszMzAsICJhcmdsaXN0IiwgMCwgOCwgc3RhdGVzXzc0LAorICAgICAiXDAwMFwwNDBcMDQwXDIwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMzMSwgImFyZ3VtZW50IiwgMCwgNCwgc3RhdGVzXzc1LAorICAgICAiXDAwMFwwNDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDIwMFwwMDBcMDAwXDAwMFwyMDBcMDIwXDAwMFwwMDBcMjA2XDEyMFwwNzZcMDAwIn0sCisgICAgezMzMiwgImNvbXBfaXRlciIsIDAsIDIsIHN0YXRlc183NiwKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAyMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMzMsICJjb21wX2ZvciIsIDAsIDYsIHN0YXRlc183NywKKyAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDFcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgIHszMzQsICJjb21wX2lmIiwgMCwgNCwgc3RhdGVzXzc4LAorICAgICAiXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDIwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIn0sCiAgICAgezMzNSwgImVuY29kaW5nX2RlY2wiLCAwLCAyLCBzdGF0ZXNfNzksCiAgICAgICJcMDAwXDAwMFwwNDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDAifSwKICAgICB7MzM2LCAieWllbGRfZXhwciIsIDAsIDMsIHN0YXRlc184MCwKQEAgLTE4OTcsMjkgKzE5NzEsMjkgQEAKICAgICB7MjU2LCAwfSwKICAgICB7NCwgMH0sCiAgICAgezI2OSwgMH0sCi0gICAgezI5MiwgMH0sCisgICAgezI5MywgMH0sCiAgICAgezI1NywgMH0sCiAgICAgezI2OCwgMH0sCiAgICAgezAsIDB9LAogICAgIHsyNTgsIDB9LAotICAgIHszMjYsIDB9LAorICAgIHszMjcsIDB9LAogICAgIHsyNTksIDB9LAogICAgIHs1MCwgMH0sCi0gICAgezI4OCwgMH0sCisgICAgezI4OSwgMH0sCiAgICAgezcsIDB9LAotICAgIHszMjksIDB9LAorICAgIHszMzAsIDB9LAogICAgIHs4LCAwfSwKICAgICB7MjYwLCAwfSwKICAgICB7MjYxLCAwfSwKLSAgICB7MzI4LCAwfSwKKyAgICB7MzI5LCAwfSwKICAgICB7MjYyLCAwfSwKICAgICB7MSwgImRlZiJ9LAogICAgIHsxLCAwfSwKICAgICB7MjYzLCAwfSwKICAgICB7NTEsIDB9LAotICAgIHszMDEsIDB9LAorICAgIHszMDIsIDB9LAogICAgIHsxMSwgMH0sCi0gICAgezMwMCwgMH0sCisgICAgezMwMSwgMH0sCiAgICAgezI2NCwgMH0sCiAgICAgezI2NSwgMH0sCiAgICAgezIyLCAwfSwKQEAgLTE5MzEsMTUgKzIwMDUsMTcgQEAKICAgICB7MjcwLCAwfSwKICAgICB7MTMsIDB9LAogICAgIHsyNzEsIDB9LAotICAgIHsyNzMsIDB9LAogICAgIHsyNzQsIDB9LAogICAgIHsyNzUsIDB9LAotICAgIHsyODEsIDB9LAotICAgIHsyODksIDB9LAorICAgIHsyNzYsIDB9LAorICAgIHsyODIsIDB9LAogICAgIHsyOTAsIDB9LAogICAgIHsyOTEsIDB9LAorICAgIHsyOTIsIDB9LAogICAgIHsyNzIsIDB9LAorICAgIHsyNzMsIDB9LAogICAgIHszMzYsIDB9LAorICAgIHszMTEsIDB9LAogICAgIHszNywgMH0sCiAgICAgezM4LCAwfSwKICAgICB7MzksIDB9LApAQCAtMTk1MywzNiArMjAyOSwzNiBAQAogICAgIHs0NywgMH0sCiAgICAgezQ5LCAwfSwKICAgICB7MSwgImRlbCJ9LAotICAgIHszMjUsIDB9LAorICAgIHszMjYsIDB9LAogICAgIHsxLCAicGFzcyJ9LAotICAgIHsyNzYsIDB9LAogICAgIHsyNzcsIDB9LAogICAgIHsyNzgsIDB9LAotICAgIHsyODAsIDB9LAogICAgIHsyNzksIDB9LAorICAgIHsyODEsIDB9LAorICAgIHsyODAsIDB9LAogICAgIHsxLCAiYnJlYWsifSwKICAgICB7MSwgImNvbnRpbnVlIn0sCiAgICAgezEsICJyZXR1cm4ifSwKICAgICB7MSwgInJhaXNlIn0sCiAgICAgezEsICJmcm9tIn0sCi0gICAgezI4MiwgMH0sCiAgICAgezI4MywgMH0sCisgICAgezI4NCwgMH0sCiAgICAgezEsICJpbXBvcnQifSwKLSAgICB7Mjg3LCAwfSwKKyAgICB7Mjg4LCAwfSwKICAgICB7MjMsIDB9LAogICAgIHs1MiwgMH0sCi0gICAgezI4NiwgMH0sCi0gICAgezI4NCwgMH0sCi0gICAgezEsICJhcyJ9LAorICAgIHsyODcsIDB9LAogICAgIHsyODUsIDB9LAorICAgIHsxLCAiYXMifSwKKyAgICB7Mjg2LCAwfSwKICAgICB7MSwgImdsb2JhbCJ9LAogICAgIHsxLCAibm9ubG9jYWwifSwKICAgICB7MSwgImFzc2VydCJ9LAotICAgIHsyOTMsIDB9LAogICAgIHsyOTQsIDB9LAogICAgIHsyOTUsIDB9LAogICAgIHsyOTYsIDB9LAogICAgIHsyOTcsIDB9LAorICAgIHsyOTgsIDB9LAogICAgIHsxLCAiaWYifSwKICAgICB7MSwgImVsaWYifSwKICAgICB7MSwgImVsc2UifSwKQEAgLTE5OTAsMjcgKzIwNjYsMjYgQEAKICAgICB7MSwgImZvciJ9LAogICAgIHsxLCAiaW4ifSwKICAgICB7MSwgInRyeSJ9LAotICAgIHsyOTksIDB9LAorICAgIHszMDAsIDB9LAogICAgIHsxLCAiZmluYWxseSJ9LAogICAgIHsxLCAid2l0aCJ9LAotICAgIHsyOTgsIDB9LAotICAgIHszMTEsIDB9LAorICAgIHsyOTksIDB9LAorICAgIHszMTIsIDB9LAogICAgIHsxLCAiZXhjZXB0In0sCiAgICAgezUsIDB9LAogICAgIHs2LCAwfSwKLSAgICB7MzA1LCAwfSwKLSAgICB7MzAzLCAwfSwKLSAgICB7MzAyLCAwfSwKLSAgICB7MzA0LCAwfSwKLSAgICB7MSwgImxhbWJkYSJ9LAogICAgIHszMDYsIDB9LAotICAgIHsxLCAib3IifSwKKyAgICB7MzA0LCAwfSwKKyAgICB7MzAzLCAwfSwKKyAgICB7MzA1LCAwfSwKKyAgICB7MSwgImxhbWJkYSJ9LAogICAgIHszMDcsIDB9LAorICAgIHsxLCAib3IifSwKKyAgICB7MzA4LCAwfSwKICAgICB7MSwgImFuZCJ9LAogICAgIHsxLCAibm90In0sCi0gICAgezMwOCwgMH0sCi0gICAgezMxMCwgMH0sCiAgICAgezMwOSwgMH0sCisgICAgezMxMCwgMH0sCiAgICAgezIwLCAwfSwKICAgICB7MjEsIDB9LAogICAgIHsyOCwgMH0sCkBAIC0yMDE5LDQ1ICsyMDk0LDQ0IEBACiAgICAgezI5LCAwfSwKICAgICB7MjksIDB9LAogICAgIHsxLCAiaXMifSwKLSAgICB7MzEyLCAwfSwKLSAgICB7MTgsIDB9LAogICAgIHszMTMsIDB9LAotICAgIHszMywgMH0sCisgICAgezE4LCAwfSwKICAgICB7MzE0LCAwfSwKLSAgICB7MTksIDB9LAorICAgIHszMywgMH0sCiAgICAgezMxNSwgMH0sCisgICAgezE5LCAwfSwKKyAgICB7MzE2LCAwfSwKICAgICB7MzQsIDB9LAogICAgIHszNSwgMH0sCi0gICAgezMxNiwgMH0sCisgICAgezMxNywgMH0sCiAgICAgezE0LCAwfSwKICAgICB7MTUsIDB9LAotICAgIHszMTcsIDB9LAorICAgIHszMTgsIDB9LAogICAgIHsxNywgMH0sCiAgICAgezI0LCAwfSwKICAgICB7NDgsIDB9LAogICAgIHszMiwgMH0sCi0gICAgezMxOCwgMH0sCiAgICAgezMxOSwgMH0sCi0gICAgezMyMSwgMH0sCiAgICAgezMyMCwgMH0sCisgICAgezMyMiwgMH0sCisgICAgezMyMSwgMH0sCiAgICAgezksIDB9LAogICAgIHsxMCwgMH0sCiAgICAgezI2LCAwfSwKLSAgICB7MzI3LCAwfSwKKyAgICB7MzI4LCAwfSwKICAgICB7MjcsIDB9LAogICAgIHsyLCAwfSwKICAgICB7MywgMH0sCiAgICAgezEsICJOb25lIn0sCiAgICAgezEsICJUcnVlIn0sCiAgICAgezEsICJGYWxzZSJ9LAotICAgIHszMzIsIDB9LAotICAgIHszMjIsIDB9LAorICAgIHszMzMsIDB9LAogICAgIHszMjMsIDB9LAogICAgIHszMjQsIDB9LAorICAgIHszMjUsIDB9LAogICAgIHsxLCAiY2xhc3MifSwKLSAgICB7MzMwLCAwfSwKICAgICB7MzMxLCAwfSwKLSAgICB7MzMzLCAwfSwKKyAgICB7MzMyLCAwfSwKICAgICB7MzM0LCAwfSwKICAgICB7MzM1LCAwfSwKICAgICB7MSwgInlpZWxkIn0sCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0LmMgYi9QeXRob24vaW1wb3J0LmMKaW5kZXggNWQ4MDk4My4uMjM3NTJlZSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydC5jCisrKyBiL1B5dGhvbi9pbXBvcnQuYwpAQCAtNSwxMyArNSw5IEBACiAKICNpbmNsdWRlICJQeXRob24tYXN0LmgiCiAjdW5kZWYgWWllbGQgLyogdW5kZWZpbmUgbWFjcm8gY29uZmxpY3Rpbmcgd2l0aCB3aW5iYXNlLmggKi8KLSNpbmNsdWRlICJweWFyZW5hLmgiCi0jaW5jbHVkZSAicHl0aG9ucnVuLmgiCiAjaW5jbHVkZSAiZXJyY29kZS5oIgogI2luY2x1ZGUgIm1hcnNoYWwuaCIKICNpbmNsdWRlICJjb2RlLmgiCi0jaW5jbHVkZSAiY29tcGlsZS5oIgotI2luY2x1ZGUgImV2YWwuaCIKICNpbmNsdWRlICJvc2RlZnMuaCIKICNpbmNsdWRlICJpbXBvcnRkbC5oIgogCkBAIC0yNSw2ICsyMSw4IEBACiAjaWZkZWYgTVNfV0lORE9XUwogLyogZm9yIHN0YXQuc3RfbW9kZSAqLwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CisvKiBmb3IgX21rZGlyICovCisjaW5jbHVkZSA8ZGlyZWN0Lmg+CiAjZW5kaWYKIAogCkBAIC00Myw2ICs0MSwxNSBAQAogICAgVGhlIGN1cnJlbnQgd29ya2luZyBzY2hlbWUgaXMgdG8gaW5jcmVtZW50IHRoZSBwcmV2aW91cyB2YWx1ZSBieQogICAgMTAuCiAKKyAgIFN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKKyAgIG51bWJlciBhbHNvIGluY2x1ZGVzIGEgbmV3ICJtYWdpYyB0YWciLCBpLmUuIGEgaHVtYW4gcmVhZGFibGUgc3RyaW5nIHVzZWQKKyAgIHRvIHJlcHJlc2VudCB0aGUgbWFnaWMgbnVtYmVyIGluIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLiAgV2hlbiB5b3UgY2hhbmdlCisgICB0aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKKyAgIGNhbiBiZSBuYW1lZCBhZnRlciB0aGUgUHl0aG9uIG1ham9yIHZlcnNpb24gb2YgdGhlIG1hZ2ljIG51bWJlciBidW1wLCBidXQKKyAgIGl0IGNhbiByZWFsbHkgYmUgYW55dGhpbmcsIGFzIGxvbmcgYXMgaXQncyBkaWZmZXJlbnQgdGhhbiBhbnl0aGluZyBlbHNlCisgICB0aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKKyAgIHdpdGggUHl0aG9uIDMuMmEwLgorCiAgICBLbm93biB2YWx1ZXM6CiAgICAgICAgUHl0aG9uIDEuNTogICAyMDEyMQogICAgICAgIFB5dGhvbiAxLjUuMTogMjAxMjEKQEAgLTc4LDI2ICs4NSwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKLSAgICAgICAgICAgICAgICAgICAgICAzMDcwIChQRVAgMzEwOSByYWlzZSBjaGFuZ2VzKQotICAgICAgICAgICAgICAgICAgICAgIDMwODAgKFBFUCAzMTM3IG1ha2UgX19maWxlX18gYW5kIF9fbmFtZV9fIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgICAgMzA5MCAoa2lsbCBzdHI4IGludGVybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAzMTAwIChtZXJnZSBmcm9tIDIuNmEwLCBzZWUgNjIxNTEpCi0gICAgICAgICAgICAgICAgICAgICAgMzEwMiAoX19maWxlX18gcG9pbnRzIHRvIHNvdXJjZSBmaWxlKQotICAgICAgIFB5dGhvbiAzLjBhNDogMzExMCAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCi0gICAgICAgUHl0aG9uIDMuMGE1OiAzMTMwIChsZXhpY2FsIGV4Y2VwdGlvbiBzdGFja2luZywgaW5jbHVkaW5nIFBPUF9FWENFUFQpCi0gICAgICAgUHl0aG9uIDMuMWEwOiAzMTQwIChvcHRpbWl6ZSBsaXN0LCBzZXQgYW5kIGRpY3QgY29tcHJlaGVuc2lvbnM6CisgICAgICAgICAgICAgICAgICAgICAgMzA2MSAoc3RyaW5nIGxpdGVyYWxzIGJlY29tZSB1bmljb2RlKQorICAgICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCisgICAgICAgICAgICAgICAgICAgICAgMzA4MSAoUEVQIDMxMzcgbWFrZSBfX2ZpbGVfXyBhbmQgX19uYW1lX18gdW5pY29kZSkKKyAgICAgICAgICAgICAgICAgICAgICAzMDkxIChraWxsIHN0cjggaW50ZXJuaW5nKQorICAgICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKKyAgICAgICAgICAgICAgICAgICAgICAzMTAzIChfX2ZpbGVfXyBwb2ludHMgdG8gc291cmNlIGZpbGUpCisgICAgICAgUHl0aG9uIDMuMGE0OiAzMTExIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKS4KKyAgICAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKKyAgICAgICBQeXRob24gMy4xYTA6IDMxNDEgKG9wdGltaXplIGxpc3QsIHNldCBhbmQgZGljdCBjb21wcmVoZW5zaW9uczoKICAgICAgICAgICAgICAgIGNoYW5nZSBMSVNUX0FQUEVORCBhbmQgU0VUX0FERCwgYWRkIE1BUF9BREQpCi0gICAgICAgUHl0aG9uIDMuMWEwOiAzMTUwIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyAgICAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgogICAgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorICAgICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCisgICAgICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKKyAgICAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKKyAgICAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgorICAgICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKICovCi0jZGVmaW5lIE1BR0lDICgzMTUwIHwgKChsb25nKSdccic8PDE2KSB8ICgobG9uZyknXG4nPDwyNCkpCiAKLS8qIE1hZ2ljIHdvcmQgYXMgZ2xvYmFsOyBub3RlIHRoYXQgX1B5SW1wb3J0X0luaXQoKSBjYW4gY2hhbmdlIHRoZQotICAgdmFsdWUgb2YgdGhpcyBnbG9iYWwgdG8gYWNjb21tb2RhdGUgZm9yIGFsdGVyYXRpb25zIG9mIGhvdyB0aGUKLSAgIGNvbXBpbGVyIHdvcmtzIHdoaWNoIGFyZSBlbmFibGVkIGJ5IGNvbW1hbmQgbGluZSBzd2l0Y2hlcy4gKi8KKy8qIE1BR0lDIG11c3QgY2hhbmdlIHdoZW5ldmVyIHRoZSBieXRlY29kZSBlbWl0dGVkIGJ5IHRoZSBjb21waWxlciBtYXkgbm8KKyAgIGxvbmdlciBiZSB1bmRlcnN0b29kIGJ5IG9sZGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZXZhbCBsb29wICh1c3VhbGx5CisgICBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKQorICAgVEFHIG11c3QgY2hhbmdlIGZvciBlYWNoIG1ham9yIFB5dGhvbiByZWxlYXNlLiBUaGUgbWFnaWMgbnVtYmVyIHdpbGwgdGFrZQorICAgY2FyZSBvZiBhbnkgYnl0ZWNvZGUgY2hhbmdlcyB0aGF0IG9jY3VyIGR1cmluZyBkZXZlbG9wbWVudC4KKyovCisjZGVmaW5lIE1BR0lDICgzMTgwIHwgKChsb25nKSdccic8PDE2KSB8ICgobG9uZyknXG4nPDwyNCkpCisjZGVmaW5lIFRBRyAiY3B5dGhvbi0zMiIKKyNkZWZpbmUgQ0FDSEVESVIgIl9fcHljYWNoZV9fIgorLyogQ3VycmVudCBtYWdpYyB3b3JkIGFuZCBzdHJpbmcgdGFnIGFzIGdsb2JhbHMuICovCiBzdGF0aWMgbG9uZyBweWNfbWFnaWMgPSBNQUdJQzsKK3N0YXRpYyBjb25zdCBjaGFyICpweWNfdGFnID0gVEFHOwogCi0vKiBTZWUgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uKCkgYmVsb3cgKi8KKy8qIFNlZSBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25Vbmljb2RlKCkgYmVsb3cgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9ucyA9IE5VTEw7CiAKIC8qIFRoaXMgdGFibGUgaXMgZGVmaW5lZCBpbiBjb25maWcuYzogKi8KQEAgLTE2MCwxMyArMTgwLDYgQEAKICAgICAgICAgICAgICAgICBmaWxldGFiLT5zdWZmaXggPSAiLnB5byI7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICB7Ci0gICAgICAgIC8qIEZpeCB0aGUgcHljX21hZ2ljIHNvIHRoYXQgYnl0ZSBjb21waWxlZCBjb2RlIGNyZWF0ZWQKLSAgICAgICAgICAgdXNpbmcgdGhlIGFsbC1Vbmljb2RlIG1ldGhvZCBkb2Vzbid0IGludGVyZmVyZSB3aXRoCi0gICAgICAgICAgIGNvZGUgY3JlYXRlZCBpbiBub3JtYWwgb3BlcmF0aW9uIG1vZGUuICovCi0gICAgICAgIHB5Y19tYWdpYyA9IE1BR0lDICsgMTsKLSAgICB9CiB9CiAKIHZvaWQKQEAgLTMwMiwxNCArMzE1LDI3IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgZnJvbSBQeU9TX0FmdGVyRm9yayB0byBlbnN1cmUgdGhhdCBuZXdseQotICAgY3JlYXRlZCBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IHNoYXJlIGxvY2tzIHdpdGggdGhlIHBhcmVudCwgYnV0IGZvciBzb21lCi0gICByZWFzb24gb25seSBvbiBBSVggc3lzdGVtcy4gSW5zdGVhZCBvZiByZS1pbml0aWFsaXppbmcgdGhlIGxvY2ssIHdlIG5vdwotICAgYWNxdWlyZSB0aGUgaW1wb3J0IGxvY2sgYXJvdW5kIGZvcmsoKSBjYWxscy4gKi8KKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gUHlPU19BZnRlckZvcmsgdG8gZW5zdXJlIHRoYXQgbmV3bHkKKyAgIGNyZWF0ZWQgY2hpbGQgcHJvY2Vzc2VzIGRvIG5vdCBzaGFyZSBsb2NrcyB3aXRoIHRoZSBwYXJlbnQuCisgICBXZSBub3cgYWNxdWlyZSB0aGUgaW1wb3J0IGxvY2sgYXJvdW5kIGZvcmsoKSBjYWxscyBidXQgb24gc29tZSBwbGF0Zm9ybXMKKyAgIChTb2xhcmlzIDkgYW5kIGVhcmxpZXI/IHNlZSBpc3VlNzI0MikgdGhhdCBzdGlsbCBsZWZ0IHVzIHdpdGggcHJvYmxlbXMuICovCiAKIHZvaWQKIF9QeUltcG9ydF9SZUluaXRMb2NrKHZvaWQpCiB7CisgICAgaWYgKGltcG9ydF9sb2NrICE9IE5VTEwpCisgICAgICAgIGltcG9ydF9sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChpbXBvcnRfbG9ja19sZXZlbCA+IDEpIHsKKyAgICAgICAgLyogRm9ya2VkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgaW1wb3J0ICovCisgICAgICAgIGxvbmcgbWUgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7CisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbXBvcnRfbG9jaywgMCk7CisJLyogWFhYOiBjYW4gdGhlIHByZXZpb3VzIGxpbmUgZmFpbD8gKi8KKyAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gbWU7CisgICAgICAgIGltcG9ydF9sb2NrX2xldmVsLS07CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1wb3J0X2xvY2tfdGhyZWFkID0gLTE7CisgICAgICAgIGltcG9ydF9sb2NrX2xldmVsID0gMDsKKyAgICB9CiB9CiAKICNlbmRpZgpAQCAtNTIwLDcgKzU0Niw3IEBACiB9CiAKIAotLyogSGVscGVyIGZvciBweXRob25ydW4uYyAtLSByZXR1cm4gbWFnaWMgbnVtYmVyICovCisvKiBIZWxwZXIgZm9yIHB5dGhvbnJ1bi5jIC0tIHJldHVybiBtYWdpYyBudW1iZXIgYW5kIHRhZy4gKi8KIAogbG9uZwogUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIodm9pZCkKQEAgLTUyOSwyNCArNTU1LDMwIEBACiB9CiAKIAorY29uc3QgY2hhciAqCitQeUltcG9ydF9HZXRNYWdpY1RhZyh2b2lkKQoreworICAgIHJldHVybiBweWNfdGFnOworfQorCiAvKiBNYWdpYyBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgKGJ1aWx0LWluIGFzIHdlbGwgYXMgZHluYW1pY2FsbHkKICAgIGxvYWRlZCkuICBUbyBwcmV2ZW50IGluaXRpYWxpemluZyBhbiBleHRlbnNpb24gbW9kdWxlIG1vcmUgdGhhbgogICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSBtb2R1bGUgbmFtZQogICAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieSBmaWxlbmFtZSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZAogICAgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MKLSAgIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uKCkKKyAgIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uVW5pY29kZSgpCiAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHN1Y2NlZWRzLiAgQQogICAgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZwotICAgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24oKS4KKyAgIF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uVW5pY29kZSgpLgogCi0gICBNb2R1bGVzIHdoaWNoIGRvIHN1cHBvcnQgbXVsdGlwbGUgbXVsdGlwbGUgaW5pdGlhbGl6YXRpb24gc2V0Ci0gICB0aGVpciBtX3NpemUgZmllbGQgdG8gYSBub24tbmVnYXRpdmUgbnVtYmVyIChpbmRpY2F0aW5nIHRoZSBzaXplCi0gICBvZiB0aGUgbW9kdWxlLXNwZWNpZmljIHN0YXRlKS4gVGhleSBhcmUgc3RpbGwgcmVjb3JkZWQgaW4gdGhlCi0gICBleHRlbnNpb25zIGRpY3Rpb25hcnksIHRvIGF2b2lkIGxvYWRpbmcgc2hhcmVkIGxpYnJhcmllcyB0d2ljZS4KKyAgIE1vZHVsZXMgd2hpY2ggZG8gc3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXphdGlvbiBzZXQgdGhlaXIgbV9zaXplCisgICBmaWVsZCB0byBhIG5vbi1uZWdhdGl2ZSBudW1iZXIgKGluZGljYXRpbmcgdGhlIHNpemUgb2YgdGhlCisgICBtb2R1bGUtc3BlY2lmaWMgc3RhdGUpLiBUaGV5IGFyZSBzdGlsbCByZWNvcmRlZCBpbiB0aGUgZXh0ZW5zaW9ucworICAgZGljdGlvbmFyeSwgdG8gYXZvaWQgbG9hZGluZyBzaGFyZWQgbGlicmFyaWVzIHR3aWNlLgogKi8KIAogaW50Ci1fUHlJbXBvcnRfRml4dXBFeHRlbnNpb24oUHlPYmplY3QgKm1vZCwgY2hhciAqbmFtZSwgY2hhciAqZmlsZW5hbWUpCitfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25Vbmljb2RlKFB5T2JqZWN0ICptb2QsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3Q7CiAgICAgc3RydWN0IFB5TW9kdWxlRGVmICpkZWY7CkBAIC01ODYsMTggKzYxOCwzMSBAQAogICAgICAgICBpZiAoZGVmLT5tX2Jhc2UubV9jb3B5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGV4dGVuc2lvbnMsIGZpbGVuYW1lLCAoUHlPYmplY3QqKWRlZik7CisgICAgUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywgZmlsZW5hbWUsIChQeU9iamVjdCopZGVmKTsKICAgICByZXR1cm4gMDsKIH0KIAoraW50CitfUHlJbXBvcnRfRml4dXBCdWlsdGluKFB5T2JqZWN0ICptb2QsIGNoYXIgKm5hbWUpCit7CisgICAgaW50IHJlczsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhuYW1lKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJlcyA9IF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvblVuaWNvZGUobW9kLCBuYW1lLCBmaWxlbmFtZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gcmVzOworfQorCiBQeU9iamVjdCAqCi1fUHlJbXBvcnRfRmluZEV4dGVuc2lvbihjaGFyICpuYW1lLCBjaGFyICpmaWxlbmFtZSkKK19QeUltcG9ydF9GaW5kRXh0ZW5zaW9uVW5pY29kZShjaGFyICpuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0OwogICAgIFB5TW9kdWxlRGVmKiBkZWY7CiAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGVmID0gKFB5TW9kdWxlRGVmKilQeURpY3RfR2V0SXRlbVN0cmluZyhleHRlbnNpb25zLCBmaWxlbmFtZSk7CisgICAgZGVmID0gKFB5TW9kdWxlRGVmKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBmaWxlbmFtZSk7CiAgICAgaWYgKGRlZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZGVmLT5tX3NpemUgPT0gLTEpIHsKQEAgLTYyOCwxMiArNjczLDIzIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCi0gICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJpbXBvcnQgJXMgIyBwcmV2aW91c2x5IGxvYWRlZCAoJXMpXG4iLAorICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoImltcG9ydCAlcyAjIHByZXZpb3VzbHkgbG9hZGVkICglVSlcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGZpbGVuYW1lKTsKICAgICByZXR1cm4gbW9kOwogCiB9CiAKK1B5T2JqZWN0ICoKK19QeUltcG9ydF9GaW5kQnVpbHRpbihjaGFyICpuYW1lKQoreworICAgIFB5T2JqZWN0ICpyZXMsICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKG5hbWUpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXMgPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvblVuaWNvZGUobmFtZSwgZmlsZW5hbWUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHJlczsKK30KIAogLyogR2V0IHRoZSBtb2R1bGUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gYSBtb2R1bGUgbmFtZS4KICAgIEZpcnN0IGNoZWNrIHRoZSBtb2R1bGVzIGRpY3Rpb25hcnkgaWYgdGhlcmUncyBvbmUgdGhlcmUsCkBAIC02NjQsNyArNzIwLDcgQEAKIAogLyogUmVtb3ZlIG5hbWUgZnJvbSBzeXMubW9kdWxlcywgaWYgaXQncyB0aGVyZS4gKi8KIHN0YXRpYyB2b2lkCi1fUmVtb3ZlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCityZW1vdmVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7CiAgICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsIG5hbWUpID09IE5VTEwpCkBAIC02NzQsNyArNzMwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgInN5cy5tb2R1bGVzIGZhaWxlZCIpOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKiBnZXRfc291cmNlZmlsZShjb25zdCBjaGFyICpmaWxlKTsKK3N0YXRpYyBQeU9iamVjdCAqIGdldF9zb3VyY2VmaWxlKGNoYXIgKmZpbGUpOworc3RhdGljIGNoYXIgKm1ha2Vfc291cmNlX3BhdGhuYW1lKGNoYXIgKnBhdGhuYW1lLCBjaGFyICpidWYpOworc3RhdGljIGNoYXIgKm1ha2VfY29tcGlsZWRfcGF0aG5hbWUoY2hhciAqcGF0aG5hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZWJ1Zyk7CiAKIC8qIEV4ZWN1dGUgYSBjb2RlIG9iamVjdCBpbiBhIG1vZHVsZSBhbmQgcmV0dXJuIHRoZSBtb2R1bGUgb2JqZWN0CiAgKiBXSVRIIElOQ1JFTUVOVEVEIFJFRkVSRU5DRSBDT1VOVC4gIElmIGFuIGVycm9yIG9jY3VycywgbmFtZSBpcwpAQCAtNjgyLDE2ICs3NDEsMjggQEAKICAqIGluIHN5cy5tb2R1bGVzLiAgVGhlIGNhbGxlciBtYXkgd2lzaCB0byByZXN0b3JlIHRoZSBvcmlnaW5hbAogICogbW9kdWxlIG9iamVjdCAoaWYgYW55KSBpbiB0aGlzIGNhc2U7IFB5SW1wb3J0X1JlbG9hZE1vZHVsZSBpcyBhbgogICogZXhhbXBsZS4KKyAqCisgKiBOb3RlIHRoYXQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKCkgaXMgdGhlIHByZWZlcnJlZCwgcmljaGVyCisgKiBpbnRlcmZhY2UuICBUaGUgb3RoZXIgdHdvIGV4aXN0IHByaW1hcmlseSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAqLwogUHlPYmplY3QgKgogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogewotICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4KG5hbWUsIGNvLCAoY2hhciAqKU5VTEwpOworICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCisgICAgICAgIG5hbWUsIGNvLCAoY2hhciAqKU5VTEwsIChjaGFyICopTlVMTCk7CiB9CiAKIFB5T2JqZWN0ICoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSkKIHsKKyAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAorICAgICAgICBuYW1lLCBjbywgcGF0aG5hbWUsIChjaGFyICopTlVMTCk7Cit9CisKK1B5T2JqZWN0ICoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwYXRobmFtZSkKK3sKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKICAgICBQeU9iamVjdCAqbSwgKmQsICp2OwogCkBAIC03MjEsNyArNzkyLDIxIEBACiAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydCAqLwogICAgIFB5X0RFQ1JFRih2KTsKIAotICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoKFB5Q29kZU9iamVjdCAqKWNvLCBkLCBkKTsKKyAgICAvKiBSZW1lbWJlciB0aGUgcHljIHBhdGggbmFtZSBhcyB0aGUgX19jYWNoZWRfXyBhdHRyaWJ1dGUuICovCisgICAgaWYgKGNwYXRobmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHYgPSBQeV9Ob25lOworICAgICAgICBQeV9JTkNSRUYodik7CisgICAgfQorICAgIGVsc2UgaWYgKCh2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoY3BhdGhuYW1lKSkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBOb3QgaW1wb3J0YW50IGVub3VnaCB0byByZXBvcnQgKi8KKyAgICAgICAgdiA9IFB5X05vbmU7CisgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICB9CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX2NhY2hlZF9fIiwgdikgIT0gMCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogTm90IGltcG9ydGFudCBlbm91Z2ggdG8gcmVwb3J0ICovCisgICAgUHlfREVDUkVGKHYpOworCisgICAgdiA9IFB5RXZhbF9FdmFsQ29kZShjbywgZCwgZCk7CiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBQeV9ERUNSRUYodik7CkBAIC03MzgsMzcgKzgyMywxOTQgQEAKICAgICByZXR1cm4gbTsKIAogICBlcnJvcjoKLSAgICBfUmVtb3ZlTW9kdWxlKG5hbWUpOworICAgIHJlbW92ZV9tb2R1bGUobmFtZSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKIAorLyogTGlrZSBzdHJyY2hyKHN0cmluZywgJy8nKSBidXQgc2VhcmNoZXMgZm9yIHRoZSByaWdodG1vc3Qgb2YgZWl0aGVyIFNFUAorICAgb3IgQUxUU0VQLCBpZiB0aGUgbGF0dGVyIGlzIGRlZmluZWQuCisqLworc3RhdGljIGNoYXIgKgorcmlnaHRtb3N0X3NlcChjaGFyICpzKQoreworICAgIGNoYXIgKmZvdW5kLCBjOworICAgIGZvciAoZm91bmQgPSBOVUxMOyAoYyA9ICpzKTsgcysrKSB7CisgICAgICAgIGlmIChjID09IFNFUAorI2lmZGVmIEFMVFNFUAorICAgICAgICAgICAgfHwgYyA9PSBBTFRTRVAKKyNlbmRpZgorICAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICBmb3VuZCA9IHM7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZvdW5kOworfQorCisKIC8qIEdpdmVuIGEgcGF0aG5hbWUgZm9yIGEgUHl0aG9uIHNvdXJjZSBmaWxlLCBmaWxsIGEgYnVmZmVyIHdpdGggdGhlCiAgICBwYXRobmFtZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGlsZWQgZmlsZS4gIFJldHVybiB0aGUgcGF0aG5hbWUKICAgIGZvciB0aGUgY29tcGlsZWQgZmlsZSwgb3IgTlVMTCBpZiB0aGVyZSdzIG5vIHNwYWNlIGluIHRoZSBidWZmZXIuCiAgICBEb2Vzbid0IHNldCBhbiBleGNlcHRpb24uICovCiAKIHN0YXRpYyBjaGFyICoKLW1ha2VfY29tcGlsZWRfcGF0aG5hbWUoY2hhciAqcGF0aG5hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK21ha2VfY29tcGlsZWRfcGF0aG5hbWUoY2hhciAqcGF0aG5hbWUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwgaW50IGRlYnVnKQogeworICAgIC8qIGZvby5weSAtPiBfX3B5Y2FjaGVfXy9mb28uPHRhZz4ucHljICovCiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihwYXRobmFtZSk7Ci0gICAgaWYgKGxlbisyID4gYnVmbGVuKQorICAgIHNpemVfdCBpLCBzYXZlOworICAgIGNoYXIgKnBvczsKKyAgICBpbnQgc2VwID0gU0VQOworCisgICAgLyogU2FuaXR5IGNoZWNrIHRoYXQgdGhlIGJ1ZmZlciBoYXMgcm91Z2hseSBlbm91Z2ggc3BhY2UgdG8gaG9sZCB3aGF0CisgICAgICAgd2lsbCBldmVudHVhbGx5IGJlIHRoZSBmdWxsIHBhdGggdG8gdGhlIGNvbXBpbGVkIGZpbGUuICBUaGUgNSBleHRyYQorICAgICAgIGJ5dGVzIGluY2x1ZGUgdGhlIHNsYXNoIGFmZXIgX19weWNhY2hlX18sIHRoZSB0d28gZXh0cmEgZG90cywgdGhlCisgICAgICAgZXh0cmEgdHJhaWxpbmcgY2hhcmFjdGVyICgnYycgb3IgJ28nKSBhbmQgbnVsbC4gIFRoaXMgaXNuJ3QgZXhhY3QKKyAgICAgICBiZWNhdXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyIGNhbiBhZmZlY3QgaG93IG1hbnkgYWN0dWFsCisgICAgICAgY2hhcmFjdGVycyBvZiB0aGUgc3RyaW5nIGdldCBpbnRvIHRoZSBidWZmZXIuICBXZSdsbCBkbyBhIGZpbmFsCisgICAgICAgc2FuaXR5IGNoZWNrIGJlZm9yZSB3cml0aW5nIHRoZSBleHRlbnNpb24gdG8gZW5zdXJlIHdlIGRvIG5vdAorICAgICAgIG92ZXJmbG93IHRoZSBidWZmZXIuCisgICAgKi8KKyAgICBpZiAobGVuICsgc3RybGVuKENBQ0hFRElSKSArIHN0cmxlbihweWNfdGFnKSArIDUgPiBidWZsZW4pCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIC8qIFRyZWF0IC5weXcgYXMgaWYgaXQgd2VyZSAucHkuICBUaGUgY2FzZSBvZiAiLnB5dyIgbXVzdCBtYXRjaAotICAgICAgIHRoYXQgdXNlZCBpbiBfUHlJbXBvcnRfU3RhbmRhcmRGaWxldGFiLiAqLwotICAgIGlmIChsZW4gPj0gNCAmJiBzdHJjbXAoJnBhdGhuYW1lW2xlbi00XSwgIi5weXciKSA9PSAwKQotICAgICAgICAtLWxlbjsgICAgICAgICAgLyogcHJldGVuZCAndycgaXNuJ3QgdGhlcmUgKi8KLSNlbmRpZgotICAgIG1lbWNweShidWYsIHBhdGhuYW1lLCBsZW4pOwotICAgIGJ1ZltsZW5dID0gUHlfT3B0aW1pemVGbGFnID8gJ28nIDogJ2MnOwotICAgIGJ1ZltsZW4rMV0gPSAnXDAnOworICAgIC8qIEZpbmQgdGhlIGxhc3QgcGF0aCBzZXBhcmF0b3IgYW5kIGNvcHkgZXZlcnl0aGluZyBmcm9tIHRoZSBzdGFydCBvZgorICAgICAgIHRoZSBzb3VyY2Ugc3RyaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIHNlcGFyYXRvci4KKyAgICAqLworICAgIGlmICgocG9zID0gcmlnaHRtb3N0X3NlcChwYXRobmFtZSkpID09IE5VTEwpIHsKKyAgICAgICAgaSA9IDA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzZXAgPSAqcG9zOworICAgICAgICBpID0gcG9zIC0gcGF0aG5hbWUgKyAxOworICAgICAgICBzdHJuY3B5KGJ1ZiwgcGF0aG5hbWUsIGkpOworICAgIH0KIAorICAgIHNhdmUgPSBpOworICAgIGJ1ZltpKytdID0gJ1wwJzsKKyAgICAvKiBBZGQgX19weWNhY2hlX18vICovCisgICAgc3RyY2F0KGJ1ZiwgQ0FDSEVESVIpOworICAgIGkgKz0gc3RybGVuKENBQ0hFRElSKSAtIDE7CisgICAgYnVmW2krK10gPSBzZXA7CisgICAgYnVmW2krK10gPSAnXDAnOworICAgIC8qIEFkZCB0aGUgYmFzZSBmaWxlbmFtZSwgYnV0IHJlbW92ZSB0aGUgLnB5IG9yIC5weXcgZXh0ZW5zaW9uLCBzaW5jZQorICAgICAgIHRoZSB0YWcgbmFtZSBtdXN0IGdvIGJlZm9yZSB0aGUgZXh0ZW5zaW9uLgorICAgICovCisgICAgc3RyY2F0KGJ1ZiwgcGF0aG5hbWUgKyBzYXZlKTsKKyAgICBpZiAoKHBvcyA9IHN0cnJjaHIoYnVmLCAnLicpKSAhPSBOVUxMKQorICAgICAgICAqKytwb3MgPSAnXDAnOworICAgIHN0cmNhdChidWYsIHB5Y190YWcpOworICAgIC8qIFRoZSBsZW5ndGggdGVzdCBhYm92ZSBhc3N1bWVzIHRoYXQgd2UncmUgb25seSBhZGRpbmcgb25lIGNoYXJhY3RlcgorICAgICAgIHRvIHRoZSBlbmQgb2Ygd2hhdCB3b3VsZCBub3JtYWxseSBiZSB0aGUgZXh0ZW5zaW9uLiAgV2hhdCBpZiB0aGVyZQorICAgICAgIGlzIG5vIGV4dGVuc2lvbiwgb3IgdGhlIHN0cmluZyBlbmRzIGluICcuJyBvciAnLnAnLCBhbmQgb3RoZXJ3aXNlCisgICAgICAgZmlsbHMgdGhlIGJ1ZmZlcj8gIEJ5IGFwcGVuZGluZyA0IG1vcmUgY2hhcmFjdGVycyBvbnRvIHRoZSBzdHJpbmcKKyAgICAgICBoZXJlLCB3ZSBjb3VsZCBvdmVycnVuIHRoZSBidWZmZXIuCisKKyAgICAgICBBcyBhIHNpbXBsZSBleGFtcGxlLCBsZXQncyBzYXkgYnVmbGVuPTMyIGFuZCB0aGUgaW5wdXQgc3RyaW5nIGlzCisgICAgICAgJ3h4eC5weScuICBzdHJsZW4oKSB3b3VsZCBiZSA2IGFuZCB0aGUgdGVzdCBhYm92ZSB3b3VsZCB5aWVsZDoKKworICAgICAgICg2ICsgMTEgKyAxMCArIDUgPT0gMzIpID4gMzIKKworICAgICAgIHdoaWNoIGlzIGZhbHNlIGFuZCBzbyB0aGUgbmFtZSBtYW5nbGluZyB3b3VsZCBjb250aW51ZS4gIFRoaXMgd291bGQKKyAgICAgICBiZSBmaW5lIGJlY2F1c2Ugd2UnZCBlbmQgdXAgd2l0aCB0aGlzIHN0cmluZyBpbiBidWY6CisKKyAgICAgICBfX3B5Y2FjaGVfXy94eHguY3B5dGhvbi0zMi5weWNcMAorCisgICAgICAgc3RybGVuKG9mIHRoYXQpID09IDMwICsgdGhlIG51bCBmaXRzIGluc2lkZSBhIDMyIGNoYXJhY3RlciBidWZmZXIuCisgICAgICAgV2UgY2FuIGV2ZW4gaGFuZGxlIGFuIGlucHV0IHN0cmluZyBvZiBzYXkgJ3h4eHh4JyBhYm92ZSBiZWNhdXNlCisgICAgICAgdGhhdCdzICg1ICsgMTEgKyAxMCArIDUgPT0gMzEpID4gMzIgd2hpY2ggaXMgYWxzbyBmYWxzZS4gIE5hbWUKKyAgICAgICBtYW5nbGluZyB0aGF0IHlpZWxkczoKKworICAgICAgIF9fcHljYWNoZV9fL3h4eHh4Y3B5dGhvbi0zMi5weWNcMAorCisgICAgICAgd2hpY2ggaXMgMzIgY2hhcmFjdGVycyBpbmNsdWRpbmcgdGhlIG51bCwgYW5kIHRodXMgZml0cyBpbiB0aGUKKyAgICAgICBidWZmZXIuIEhvd2V2ZXIsIGFuIGlucHV0IHN0cmluZyBvZiAneHh4eHh4JyB3b3VsZCB5aWVsZCBhIHJlc3VsdAorICAgICAgIHN0cmluZyBvZjoKKworICAgICAgIF9fcHljYWNoZV9fL3h4eHh4eGNweXRob24tMzIucHljXDAKKworICAgICAgIHdoaWNoIGlzIDMzIGNoYXJhY3RlcnMgbG9uZyAoaW5jbHVkaW5nIHRoZSBudWwpLCB0aHVzIG92ZXJmbG93aW5nCisgICAgICAgdGhlIGJ1ZmZlciwgZXZlbiB0aG91Z2ggdGhlIGZpcnN0IHRlc3Qgd291bGQgZmFpbCwgaS5lLjogdGhlIGlucHV0CisgICAgICAgc3RyaW5nIGlzIGFsc28gNiBjaGFyYWN0ZXJzIGxvbmcsIHNvIDMyID4gMzIgaXMgZmFsc2UuCisKKyAgICAgICBUaGUgcmVhc29uIHRoZSBmaXJzdCB0ZXN0IGZhaWxzIGJ1dCB3ZSBzdGlsbCBvdmVyZmxvdyB0aGUgYnVmZmVyIGlzCisgICAgICAgdGhhdCB0aGUgdGVzdCBhYm92ZSBvbmx5IGV4cGVjdHMgdG8gYWRkIG9uZSBleHRyYSBjaGFyYWN0ZXIgdG8gYmUKKyAgICAgICBhZGRlZCB0byB0aGUgZXh0ZW5zaW9uLCBhbmQgaGVyZSB3ZSdyZSBhZGRpbmcgdGhyZWUgKHB5YykuICBXZQorICAgICAgIGRvbid0IGFkZCB0aGUgZmlyc3QgZG90LCBzbyB0aGF0IHJlY2xhaW1zIG9uZSBvZiBleHBlY3RlZAorICAgICAgIHBvc2l0aW9ucywgbGVhdmluZyB1cyBvdmVyZmxvd2luZyBieSAxIGJ5dGUgKDMgZXh0cmEgLSAxIHJlY2xhaW1lZAorICAgICAgIGRvdCAtIDEgZXhwZWN0ZWQgZXh0cmEgPT0gMSBvdmVyZmxvd2VkKS4KKworICAgICAgIFRoZSBiZXN0IHdlIGNhbiBkbyBpcyBlbnN1cmUgdGhhdCB3ZSBzdGlsbCBoYXZlIGVub3VnaCByb29tIGluIHRoZQorICAgICAgIHRhcmdldCBidWZmZXIgYmVmb3JlIHdlIHdyaXRlIHRoZSBleHRlbnNpb24uICBCZWNhdXNlIGl0J3MgYWx3YXlzCisgICAgICAgb25seSB0aGUgZXh0ZW5zaW9uIHRoYXQgY2FuIGNhdXNlIHRoZSBvdmVyZmxvdywgYW5kIG5ldmVyIHRoZSBvdGhlcgorICAgICAgIHBhdGggYnl0ZXMgd2UndmUgd3JpdHRlbiwgaXQncyBzdWZmaWNpZW50IHRvIGp1c3QgZG8gb25lIG1vcmUgdGVzdAorICAgICAgIGhlcmUuICBTdGlsbCwgdGhlIGFzc2VydGlvbiB0aGF0IGZvbGxvd3MgY2FuJ3QgaHVydC4KKyAgICAqLworI2lmIDAKKyAgICBwcmludGYoInN0cmxlbihidWYpOiAlZDsgYnVmbGVuOiAlZFxuIiwgKGludClzdHJsZW4oYnVmKSwgKGludClidWZsZW4pOworI2VuZGlmCisgICAgaWYgKHN0cmxlbihidWYpICsgNSA+IGJ1ZmxlbikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RyY2F0KGJ1ZiwgZGVidWcgPyAiLnB5YyIgOiAiLnB5byIpOworICAgIGFzc2VydChzdHJsZW4oYnVmKSA8IGJ1Zmxlbik7CiAgICAgcmV0dXJuIGJ1ZjsKIH0KIAogCisvKiBHaXZlbiBhIHBhdGhuYW1lIHRvIGEgUHl0aG9uIGJ5dGUgY29tcGlsZWQgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIHRoZQorICAgc291cmNlIGZpbGUsIGlmIHRoZSBwYXRoIG1hdGNoZXMgdGhlIFBFUCAzMTQ3IGZvcm1hdC4gIFRoaXMgZG9lcyBub3QgY2hlY2sKKyAgIGZvciBhbnkgZmlsZSBleGlzdGVuY2UsIGhvd2V2ZXIsIGlmIHRoZSBweWMgZmlsZSBuYW1lIGRvZXMgbm90IG1hdGNoIFBFUAorICAgMzE0NyBzdHlsZSwgTlVMTCBpcyByZXR1cm5lZC4gIGJ1ZiBtdXN0IGJlIGF0IGxlYXN0IGFzIGJpZyBhcyBwYXRobmFtZTsKKyAgIHRoZSByZXN1bHRpbmcgcGF0aCB3aWxsIGFsd2F5cyBiZSBzaG9ydGVyLiAqLworCitzdGF0aWMgY2hhciAqCittYWtlX3NvdXJjZV9wYXRobmFtZShjaGFyICpwYXRobmFtZSwgY2hhciAqYnVmKQoreworICAgIC8qIF9fcHljYWNoZV9fL2Zvby48dGFnPi5weWMgLT4gZm9vLnB5ICovCisgICAgc2l6ZV90IGksIGo7CisgICAgY2hhciAqbGVmdCwgKnJpZ2h0LCAqZG90MCwgKmRvdDEsIHNlcDsKKworICAgIC8qIExvb2sgYmFjayB0d28gc2xhc2hlcyBmcm9tIHRoZSBlbmQuICBJbiBiZXR3ZWVuIHRoZXNlIHR3byBzbGFzaGVzCisgICAgICAgbXVzdCBiZSB0aGUgc3RyaW5nIF9fcHljYWNoZV9fIG9yIHRoaXMgaXMgbm90IGEgUEVQIDMxNDcgc3R5bGUKKyAgICAgICBwYXRoLiAgSXQncyBwb3NzaWJsZSBmb3IgdGhlcmUgdG8gYmUgb25seSBvbmUgc2xhc2guCisgICAgKi8KKyAgICBpZiAoKHJpZ2h0ID0gcmlnaHRtb3N0X3NlcChwYXRobmFtZSkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHNlcCA9ICpyaWdodDsKKyAgICAqcmlnaHQgPSAnXDAnOworICAgIGxlZnQgPSByaWdodG1vc3Rfc2VwKHBhdGhuYW1lKTsKKyAgICAqcmlnaHQgPSBzZXA7CisgICAgaWYgKGxlZnQgPT0gTlVMTCkKKyAgICAgICAgbGVmdCA9IHBhdGhuYW1lOworICAgIGVsc2UKKyAgICAgICAgbGVmdCsrOworICAgIGlmIChyaWdodC1sZWZ0ICE9IHN0cmxlbihDQUNIRURJUikgfHwKKyAgICAgICAgc3RybmNtcChsZWZ0LCBDQUNIRURJUiwgcmlnaHQtbGVmdCkgIT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBOb3cgdmVyaWZ5IHRoYXQgdGhlIHBhdGggY29tcG9uZW50IHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCBzbGFzaAorICAgICAgIGhhcyB0d28gZG90cyBpbiBpdC4KKyAgICAqLworICAgIGlmICgoZG90MCA9IHN0cmNocihyaWdodCArIDEsICcuJykpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICgoZG90MSA9IHN0cmNocihkb3QwICsgMSwgJy4nKSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgLyogVG9vIG1hbnkgZG90cz8gKi8KKyAgICBpZiAoc3RyY2hyKGRvdDEgKyAxLCAnLicpICE9IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogVGhpcyBpcyBhIFBFUCAzMTQ3IHBhdGguICBTdGFydCBieSBjb3B5aW5nIGV2ZXJ5dGhpbmcgZnJvbSB0aGUKKyAgICAgICBzdGFydCBvZiBwYXRobmFtZSB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsZWZ0bW9zdCBzbGFzaC4gIFRoZW4KKyAgICAgICBjb3B5IHRoZSBmaWxlJ3MgYmFzZW5hbWUsIHJlbW92aW5nIHRoZSBtYWdpYyB0YWcgYW5kIGFkZGluZyBhIC5weQorICAgICAgIHN1ZmZpeC4KKyAgICAqLworICAgIHN0cm5jcHkoYnVmLCBwYXRobmFtZSwgKGk9bGVmdC1wYXRobmFtZSkpOworICAgIHN0cm5jcHkoYnVmK2ksIHJpZ2h0KzEsIChqPWRvdDAtcmlnaHQpKTsKKyAgICBzdHJjcHkoYnVmK2kraiwgInB5Iik7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwogLyogR2l2ZW4gYSBwYXRobmFtZSBmb3IgYSBQeXRob24gc291cmNlIGZpbGUsIGl0cyB0aW1lIG9mIGxhc3QKICAgIG1vZGlmaWNhdGlvbiwgYW5kIGEgcGF0aG5hbWUgZm9yIGEgY29tcGlsZWQgZmlsZSwgY2hlY2sgd2hldGhlciB0aGUKICAgIGNvbXBpbGVkIGZpbGUgcmVwcmVzZW50cyB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UuICBJZiBzbywKQEAgLTg0OSw3ICsxMDkxLDggQEAKICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCJpbXBvcnQgJXMgIyBwcmVjb21waWxlZCBmcm9tICVzXG4iLAogICAgICAgICAgICAgbmFtZSwgY3BhdGhuYW1lKTsKLSAgICBtID0gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChuYW1lLCAoUHlPYmplY3QgKiljbywgY3BhdGhuYW1lKTsKKyAgICBtID0gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAorICAgICAgICBuYW1lLCAoUHlPYmplY3QgKiljbywgY3BhdGhuYW1lLCBjcGF0aG5hbWUpOwogICAgIFB5X0RFQ1JFRihjbyk7CiAKICAgICByZXR1cm4gbTsKQEAgLTkyMiwxMiArMTE2NSw0MiBAQAogd3JpdGVfY29tcGlsZWRfbW9kdWxlKFB5Q29kZU9iamVjdCAqY28sIGNoYXIgKmNwYXRobmFtZSwgc3RydWN0IHN0YXQgKnNyY3N0YXQpCiB7CiAgICAgRklMRSAqZnA7CisgICAgY2hhciAqZGlycGF0aDsKICAgICB0aW1lX3QgbXRpbWUgPSBzcmNzdGF0LT5zdF9tdGltZTsKICNpZmRlZiBNU19XSU5ET1dTICAgLyogc2luY2UgV2luZG93cyB1c2VzIGRpZmZlcmVudCBwZXJtaXNzaW9ucyAgKi8KICAgICBtb2RlX3QgbW9kZSA9IHNyY3N0YXQtPnN0X21vZGUgJiB+U19JRVhFQzsKICNlbHNlCiAgICAgbW9kZV90IG1vZGUgPSBzcmNzdGF0LT5zdF9tb2RlICYgflNfSVhVU1IgJiB+U19JWEdSUCAmIH5TX0lYT1RIOworICAgIG1vZGVfdCBkaXJtb2RlID0gKHNyY3N0YXQtPnN0X21vZGUgfAorICAgICAgICAgICAgICAgICAgICAgIFNfSVhVU1IgfCBTX0lYR1JQIHwgU19JWE9USCB8CisgICAgICAgICAgICAgICAgICAgICAgU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIKTsKICNlbmRpZgorICAgIGludCBzYXZlZDsKKworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcnkgZXhpc3RzLiAqLworICAgIGRpcnBhdGggPSByaWdodG1vc3Rfc2VwKGNwYXRobmFtZSk7CisgICAgaWYgKGRpcnBhdGggPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKKyAgICAgICAgICAgICAgICAiIyBubyAlcyBwYXRoIGZvdW5kICVzXG4iLAorICAgICAgICAgICAgICAgIENBQ0hFRElSLCBjcGF0aG5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNhdmVkID0gKmRpcnBhdGg7CisgICAgKmRpcnBhdGggPSAnXDAnOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChfbWtkaXIoY3BhdGhuYW1lKSA8IDAgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisjZWxzZQorICAgIGlmIChta2RpcihjcGF0aG5hbWUsIGRpcm1vZGUpIDwgMCAmJiBlcnJubyAhPSBFRVhJU1QpIHsKKyNlbmRpZgorICAgICAgICAqZGlycGF0aCA9IHNhdmVkOworICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKKyAgICAgICAgICAgICAgICAiIyBjYW5ub3QgY3JlYXRlIGNhY2hlIGRpciAlc1xuIiwgY3BhdGhuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAqZGlycGF0aCA9IHNhdmVkOwogCiAgICAgZnAgPSBvcGVuX2V4Y2x1c2l2ZShjcGF0aG5hbWUsIG1vZGUpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7CkBAIC0xMDM1LDggKzEzMDgsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZW5kaWYKLSAgICBjcGF0aG5hbWUgPSBtYWtlX2NvbXBpbGVkX3BhdGhuYW1lKHBhdGhuYW1lLCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KU1BWFBBVEhMRU4gKyAxKTsKKyAgICBjcGF0aG5hbWUgPSBtYWtlX2NvbXBpbGVkX3BhdGhuYW1lKAorICAgICAgICBwYXRobmFtZSwgYnVmLCAoc2l6ZV90KU1BWFBBVEhMRU4gKyAxLCAhUHlfT3B0aW1pemVGbGFnKTsKICAgICBpZiAoY3BhdGhuYW1lICE9IE5VTEwgJiYKICAgICAgICAgKGZwYyA9IGNoZWNrX2NvbXBpbGVkX21vZHVsZShwYXRobmFtZSwgc3Quc3RfbXRpbWUsIGNwYXRobmFtZSkpKSB7CiAgICAgICAgIGNvID0gcmVhZF9jb21waWxlZF9tb2R1bGUoY3BhdGhuYW1lLCBmcGMpOwpAQCAtMTA2Myw3ICsxMzM2LDggQEAKICAgICAgICAgICAgICAgICB3cml0ZV9jb21waWxlZF9tb2R1bGUoY28sIGNwYXRobmFtZSwgJnN0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBtID0gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChuYW1lLCAoUHlPYmplY3QgKiljbywgcGF0aG5hbWUpOworICAgIG0gPSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCisgICAgICAgIG5hbWUsIChQeU9iamVjdCAqKWNvLCBwYXRobmFtZSwgY3BhdGhuYW1lKTsKICAgICBQeV9ERUNSRUYoY28pOwogCiAgICAgcmV0dXJuIG07CkBAIC0xMDczLDcgKzEzNDcsNyBAQAogICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgcHkgZmlsZSBpZiBhdmFpbGFibGUsIGVsc2UgdGhlIGdpdmVuIHBhdGgKICAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWdldF9zb3VyY2VmaWxlKGNvbnN0IGNoYXIgKmZpbGUpCitnZXRfc291cmNlZmlsZShjaGFyICpmaWxlKQogewogICAgIGNoYXIgcHlbTUFYUEFUSExFTiArIDFdOwogICAgIFB5X3NzaXplX3QgbGVuOwpAQCAtMTA5MCw4ICsxMzY0LDE1IEBACiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGUpOwogICAgIH0KIAotICAgIHN0cm5jcHkocHksIGZpbGUsIGxlbi0xKTsKLSAgICBweVtsZW4tMV0gPSAnXDAnOworICAgIC8qIFN0YXJ0IGJ5IHRyeWluZyB0byB0dXJuIFBFUCAzMTQ3IHBhdGggaW50byBzb3VyY2UgcGF0aC4gIElmIHRoYXQKKyAgICAgKiBmYWlscywganVzdCBjaG9wIG9mZiB0aGUgdHJhaWxpbmcgY2hhcmFjdGVyLCBpLmUuIGxlZ2FjeSBweWMgcGF0aAorICAgICAqIHRvIHB5LgorICAgICAqLworICAgIGlmIChtYWtlX3NvdXJjZV9wYXRobmFtZShmaWxlLCBweSkgPT0gTlVMTCkgeworICAgICAgICBzdHJuY3B5KHB5LCBmaWxlLCBsZW4tMSk7CisgICAgICAgIHB5W2xlbi0xXSA9ICdcMCc7CisgICAgfQorCiAgICAgaWYgKHN0YXQocHksICZzdGF0YnVmKSA9PSAwICYmCiAgICAgICAgIFNfSVNSRUcoc3RhdGJ1Zi5zdF9tb2RlKSkgewogICAgICAgICB1ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChweSk7CkBAIC0xMzkwLDggKzE2NzEsNyBAQAogICAgICAgICBpZiAoIXYpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayh2KSkgewotICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwKLSAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCBOVUxMKTsKKyAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KHYpOwogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTQ2MSwxNCArMTc0MSwxNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAmZmRfcGFja2FnZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGNoYXIgd2FybnN0cltNQVhQQVRITEVOKzgwXTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKHdhcm5zdHIsICJOb3QgaW1wb3J0aW5nIGRpcmVjdG9yeSAiCi0gICAgICAgICAgICAgICAgICAgICInJS4qcyc6IG1pc3NpbmcgX19pbml0X18ucHkiLAotICAgICAgICAgICAgICAgICAgICBNQVhQQVRITEVOLCBidWYpOwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfSW1wb3J0V2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5zdHIsIDEpKSB7CisgICAgICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoYnVmKTsKKyAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZXJyID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19JbXBvcnRXYXJuaW5nLCAxLAorICAgICAgICAgICAgICAgICAgICAiTm90IGltcG9ydGluZyBkaXJlY3RvcnkgJyVVJzogbWlzc2luZyBfX2luaXRfXy5weSIsCisgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCkBAIC0xNTQ4LDIyICsxODMwLDYgQEAKICAgICByZXR1cm4gZmRwOwogfQogCi0vKiBIZWxwZXJzIGZvciBtYWluLmMKLSAqICBGaW5kIHRoZSBzb3VyY2UgZmlsZSBjb3JyZXNwb25kaW5nIHRvIGEgbmFtZWQgbW9kdWxlCi0gKi8KLXN0cnVjdCBmaWxlZGVzY3IgKgotX1B5SW1wb3J0X0ZpbmRNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKnBhdGgsIGNoYXIgKmJ1ZiwKLSAgICAgICAgICAgIHNpemVfdCBidWZsZW4sIEZJTEUgKipwX2ZwLCBQeU9iamVjdCAqKnBfbG9hZGVyKQotewotICAgIHJldHVybiBmaW5kX21vZHVsZSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuYW1lLCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICBidWYsIGJ1ZmxlbiwgcF9mcCwgcF9sb2FkZXIpOwotfQotCi1QeUFQSV9GVU5DKGludCkgX1B5SW1wb3J0X0lzU2NyaXB0KHN0cnVjdCBmaWxlZGVzY3IgKiBmZCkKLXsKLSAgICByZXR1cm4gZmQtPnR5cGUgPT0gUFlfU09VUkNFIHx8IGZkLT50eXBlID09IFBZX0NPTVBJTEVEOwotfQotCiAvKiBjYXNlX29rKGNoYXIqIGJ1ZiwgUHlfc3NpemVfdCBsZW4sIFB5X3NzaXplX3QgbmFtZWxlbiwgY2hhciogbmFtZSkKICAqIFRoZSBhcmd1bWVudHMgaGVyZSBhcmUgdHJpY2t5LCBiZXN0IHNob3duIGJ5IGV4YW1wbGU6CiAgKiAgICAvYS9iL2MvZC9lL2YvZy9oL2kvai9rL3NvbWVfbG9uZ19tb2R1bGVfbmFtZS5weVwwCkBAIC0xNzE4LDggKzE5ODQsOCBAQAogI2VuZGlmCiB9CiAKLQogI2lmZGVmIEhBVkVfU1RBVAorCiAvKiBIZWxwZXIgdG8gbG9vayBmb3IgX19pbml0X18ucHkgb3IgX19pbml0X18ucHlbY29dIGluIHBvdGVudGlhbCBwYWNrYWdlICovCiBzdGF0aWMgaW50CiBmaW5kX2luaXRfbW9kdWxlKGNoYXIgKmJ1ZikKQEAgLTE3NzEsMTUgKzIwMzcsNTIgQEAKIAogc3RhdGljIGludCBpbml0X2J1aWx0aW4oY2hhciAqKTsgLyogRm9yd2FyZCAqLwogCitzdGF0aWMgUHlPYmplY3QqCitsb2FkX2J1aWx0aW4oY2hhciAqbmFtZSwgY2hhciAqcGF0aG5hbWUsIGludCB0eXBlKQoreworICAgIFB5T2JqZWN0ICptLCAqbW9kdWxlczsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKHBhdGhuYW1lICE9IE5VTEwgJiYgcGF0aG5hbWVbMF0gIT0gJ1wwJykKKyAgICAgICAgbmFtZSA9IHBhdGhuYW1lOworCisgICAgaWYgKHR5cGUgPT0gQ19CVUlMVElOKQorICAgICAgICBlcnIgPSBpbml0X2J1aWx0aW4obmFtZSk7CisgICAgZWxzZQorICAgICAgICBlcnIgPSBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUobmFtZSk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChlcnIgPT0gMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgIlB1cnBvcnRlZCAlcyBtb2R1bGUgJS4yMDBzIG5vdCBmb3VuZCIsCisgICAgICAgICAgICAgICAgdHlwZSA9PSBDX0JVSUxUSU4gPworICAgICAgICAgICAgICAgICJidWlsdGluIiA6ICJmcm96ZW4iLAorICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOworICAgIG0gPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCBuYW1lKTsKKyAgICBpZiAobSA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19JbXBvcnRFcnJvciwKKyAgICAgICAgICAgICAgICAiJXMgbW9kdWxlICUuMjAwcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQiLAorICAgICAgICAgICAgICAgIHR5cGUgPT0gQ19CVUlMVElOID8KKyAgICAgICAgICAgICAgICAiYnVpbHRpbiIgOiAiZnJvemVuIiwKKyAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihtKTsKKyAgICByZXR1cm4gbTsKK30KKwogLyogTG9hZCBhbiBleHRlcm5hbCBtb2R1bGUgdXNpbmcgdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggYW5kIHJldHVybgogICAgaXRzIG1vZHVsZSBvYmplY3QgV0lUSCBJTkNSRU1FTlRFRCBSRUZFUkVOQ0UgQ09VTlQgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKIGxvYWRfbW9kdWxlKGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjaGFyICpwYXRobmFtZSwgaW50IHR5cGUsIFB5T2JqZWN0ICpsb2FkZXIpCiB7Ci0gICAgUHlPYmplY3QgKm1vZHVsZXM7CiAgICAgUHlPYmplY3QgKm07Ci0gICAgaW50IGVycjsKIAogICAgIC8qIEZpcnN0IGNoZWNrIHRoYXQgdGhlcmUncyBhbiBvcGVuIGZpbGUgKGlmIHdlIG5lZWQgb25lKSAgKi8KICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTE4MTUsMzQgKzIxMTgsNyBAQAogCiAgICAgY2FzZSBDX0JVSUxUSU46CiAgICAgY2FzZSBQWV9GUk9aRU46Ci0gICAgICAgIGlmIChwYXRobmFtZSAhPSBOVUxMICYmIHBhdGhuYW1lWzBdICE9ICdcMCcpCi0gICAgICAgICAgICBuYW1lID0gcGF0aG5hbWU7Ci0gICAgICAgIGlmICh0eXBlID09IENfQlVJTFRJTikKLSAgICAgICAgICAgIGVyciA9IGluaXRfYnVpbHRpbihuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyID0gUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKG5hbWUpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiUHVycG9ydGVkICVzIG1vZHVsZSAlLjIwMHMgbm90IGZvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID09IENfQlVJTFRJTiA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVpbHRpbiIgOiAiZnJvemVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1vZHVsZXMgPSBQeUltcG9ydF9HZXRNb2R1bGVEaWN0KCk7Ci0gICAgICAgIG0gPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCBuYW1lKTsKLSAgICAgICAgaWYgKG0gPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgICAgIFB5RXhjX0ltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICIlcyBtb2R1bGUgJS4yMDBzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCIsCi0gICAgICAgICAgICAgICAgdHlwZSA9PSBDX0JVSUxUSU4gPwotICAgICAgICAgICAgICAgICAgICAiYnVpbHRpbiIgOiAiZnJvemVuIiwKLSAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihtKTsKKyAgICAgICAgbSA9IGxvYWRfYnVpbHRpbihuYW1lLCBwYXRobmFtZSwgdHlwZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBJTVBfSE9PSzogewpAQCAtMTg3Niw3ICsyMTUyLDcgQEAKIHsKICAgICBzdHJ1Y3QgX2luaXR0YWIgKnA7CiAKLSAgICBpZiAoX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24obmFtZSwgbmFtZSkgIT0gTlVMTCkKKyAgICBpZiAoX1B5SW1wb3J0X0ZpbmRCdWlsdGluKG5hbWUpICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAxOwogCiAgICAgZm9yIChwID0gUHlJbXBvcnRfSW5pdHRhYjsgcC0+bmFtZSAhPSBOVUxMOyBwKyspIHsKQEAgLTE4OTMsNyArMjE2OSw3IEBACiAgICAgICAgICAgICBtb2QgPSAoKnAtPmluaXRmdW5jKSgpOwogICAgICAgICAgICAgaWYgKG1vZCA9PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24obW9kLCBuYW1lLCBuYW1lKSA8IDApCisgICAgICAgICAgICBpZiAoX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihtb2QsIG5hbWUpIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAvKiBGaXh1cEV4dGVuc2lvbiBoYXMgcHV0IHRoZSBtb2R1bGUgaW50byBzeXMubW9kdWxlcywKICAgICAgICAgICAgICAgIHNvIHdlIGNhbiByZWxlYXNlIG91ciBvd24gcmVmZXJlbmNlLiAqLwpAQCAtMjUxMCwxNCArMjc4Niw3IEBACiAgICAgICAgICAgICBjaGFyICpzdWJuYW1lOwogICAgICAgICAgICAgUHlPYmplY3QgKnN1Ym1vZDsKICAgICAgICAgICAgIGNoYXIgKnA7Ci0gICAgICAgICAgICBpZiAoIVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpIHsKLSAgICAgICAgICAgICAgICBpdGVtOCA9IFB5VW5pY29kZV9FbmNvZGVBU0NJSShQeVVuaWNvZGVfQXNVbmljb2RlKGl0ZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HZXRTaXplKGl0ZW0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpdGVtOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgTlVMTCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpdGVtOCA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQoaXRlbSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW04KSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDYW5ub3QgZW5jb2RlIHBhdGggaXRlbSIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjczOSw3ICszMDA4LDcgQEAKICAgIG1vcmUgYWNjdXJhdGVseSAtLSBpdCBpbnZva2VzIHRoZSBfX2ltcG9ydF9fKCkgZnVuY3Rpb24gZnJvbSB0aGUKICAgIGJ1aWx0aW5zIG9mIHRoZSBjdXJyZW50IGdsb2JhbHMuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGltcG9ydCBpcwogICAgZG9uZSB1c2luZyB3aGF0ZXZlciBpbXBvcnQgaG9va3MgYXJlIGluc3RhbGxlZCBpbiB0aGUgY3VycmVudAotICAgZW52aXJvbm1lbnQsIGUuZy4gYnkgInJleGVjIi4KKyAgIGVudmlyb25tZW50LgogICAgQSBkdW1teSBsaXN0IFsiX19kb2NfXyJdIGlzIHBhc3NlZCBhcyB0aGUgNHRoIGFyZ3VtZW50IHNvIHRoYXQKICAgIGUuZy4gUHlJbXBvcnRfSW1wb3J0KFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ3aW4zMmNvbS5jbGllbnQuZ2VuY2FjaGUiKSkKICAgIHdpbGwgcmV0dXJuIDxtb2R1bGUgImdlbmNhY2hlIj4gaW5zdGVhZCBvZiA8bW9kdWxlICJ3aW4zMmNvbSI+LiAqLwpAQCAtMjc1Myw2ICszMDIyLDcgQEAKICAgICBQeU9iamVjdCAqZ2xvYmFscyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmltcG9ydCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbW9kdWxlcyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnIgPSBOVUxMOwogCiAgICAgLyogSW5pdGlhbGl6ZSBjb25zdGFudCBzdHJpbmcgb2JqZWN0cyAqLwpAQCAtMjc2Myw3ICszMDMzLDcgQEAKICAgICAgICAgYnVpbHRpbnNfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fYnVpbHRpbnNfXyIpOwogICAgICAgICBpZiAoYnVpbHRpbnNfc3RyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgc2lsbHlfbGlzdCA9IFB5X0J1aWxkVmFsdWUoIltzXSIsICJfX2RvY19fIik7CisgICAgICAgIHNpbGx5X2xpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgICAgICBpZiAoc2lsbHlfbGlzdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjc5OSw5ICszMDY5LDE4IEBACiAgICAgICAgIGdvdG8gZXJyOwogCiAgICAgLyogQ2FsbCB0aGUgX19pbXBvcnRfXyBmdW5jdGlvbiB3aXRoIHRoZSBwcm9wZXIgYXJndW1lbnQgbGlzdAotICAgICAqIEFsd2F5cyB1c2UgYWJzb2x1dGUgaW1wb3J0IGhlcmUuICovCisgICAgICAgQWx3YXlzIHVzZSBhYnNvbHV0ZSBpbXBvcnQgaGVyZS4KKyAgICAgICBDYWxsaW5nIGZvciBzaWRlLWVmZmVjdCBvZiBpbXBvcnQuICovCiAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihpbXBvcnQsICJPT09PaSIsIG1vZHVsZV9uYW1lLCBnbG9iYWxzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscywgc2lsbHlfbGlzdCwgMCwgTlVMTCk7CisgICAgaWYgKHIgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnI7CisgICAgUHlfREVDUkVGKHIpOworCisgICAgbW9kdWxlcyA9IFB5SW1wb3J0X0dldE1vZHVsZURpY3QoKTsKKyAgICByID0gUHlEaWN0X0dldEl0ZW0obW9kdWxlcywgbW9kdWxlX25hbWUpOworICAgIGlmIChyICE9IE5VTEwpCisgICAgICAgIFB5X0lOQ1JFRihyKTsKIAogICBlcnI6CiAgICAgUHlfWERFQ1JFRihnbG9iYWxzKTsKQEAgLTI4MTcsMTkgKzMwOTYsMzEgQEAKICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfZ2V0X21hZ2ljKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoraW1wX21ha2VfbWFnaWMobG9uZyBtYWdpYykKIHsKICAgICBjaGFyIGJ1Zls0XTsKIAotICAgIGJ1ZlswXSA9IChjaGFyKSAoKHB5Y19tYWdpYyA+PiAgMCkgJiAweGZmKTsKLSAgICBidWZbMV0gPSAoY2hhcikgKChweWNfbWFnaWMgPj4gIDgpICYgMHhmZik7Ci0gICAgYnVmWzJdID0gKGNoYXIpICgocHljX21hZ2ljID4+IDE2KSAmIDB4ZmYpOwotICAgIGJ1ZlszXSA9IChjaGFyKSAoKHB5Y19tYWdpYyA+PiAyNCkgJiAweGZmKTsKKyAgICBidWZbMF0gPSAoY2hhcikgKChtYWdpYyA+PiAgMCkgJiAweGZmKTsKKyAgICBidWZbMV0gPSAoY2hhcikgKChtYWdpYyA+PiAgOCkgJiAweGZmKTsKKyAgICBidWZbMl0gPSAoY2hhcikgKChtYWdpYyA+PiAxNikgJiAweGZmKTsKKyAgICBidWZbM10gPSAoY2hhcikgKChtYWdpYyA+PiAyNCkgJiAweGZmKTsKIAogICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1ZiwgNCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitpbXBfZ2V0X21hZ2ljKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQoreworICAgIHJldHVybiBpbXBfbWFrZV9tYWdpYyhweWNfbWFnaWMpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgoraW1wX2dldF90YWcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHB5Y190YWcpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogaW1wX2dldF9zdWZmaXhlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKIHsKICAgICBQeU9iamVjdCAqbGlzdDsKQEAgLTI5MTUsMTQgKzMyMDYsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBpbXBfZmluZF9tb2R1bGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGNoYXIgKm5hbWU7CisgICAgUHlPYmplY3QgKm5hbWU7CiAgICAgUHlPYmplY3QgKnJldCwgKnBhdGggPSBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXN8TzpmaW5kX21vZHVsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZuYW1lLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZ8TzpmaW5kX21vZHVsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0ID0gY2FsbF9maW5kX21vZHVsZShuYW1lLCBwYXRoKTsKLSAgICBQeU1lbV9GcmVlKG5hbWUpOworICAgIHJldCA9IGNhbGxfZmluZF9tb2R1bGUoUHlCeXRlc19BU19TVFJJTkcobmFtZSksIHBhdGgpOworICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0zMDQwLDIzICszMzMxLDIzIEBACiBpbXBfbG9hZF9jb21waWxlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqbmFtZTsKLSAgICBjaGFyICpwYXRobmFtZTsKKyAgICBQeU9iamVjdCAqcGF0aG5hbWU7CiAgICAgUHlPYmplY3QgKmZvYiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm07CiAgICAgRklMRSAqZnA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzZXN8Tzpsb2FkX2NvbXBpbGVkIiwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNPJnxPOmxvYWRfY29tcGlsZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZwYXRobmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvYikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZwID0gZ2V0X2ZpbGUocGF0aG5hbWUsIGZvYiwgInJiIik7CisgICAgZnAgPSBnZXRfZmlsZShQeUJ5dGVzX0FTX1NUUklORyhwYXRobmFtZSksIGZvYiwgInJiIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgUHlNZW1fRnJlZShwYXRobmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBtID0gbG9hZF9jb21waWxlZF9tb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKKyAgICBtID0gbG9hZF9jb21waWxlZF9tb2R1bGUobmFtZSwgUHlCeXRlc19BU19TVFJJTkcocGF0aG5hbWUpLCBmcCk7CiAgICAgZmNsb3NlKGZwKTsKLSAgICBQeU1lbV9GcmVlKHBhdGhuYW1lKTsKKyAgICBQeV9ERUNSRUYocGF0aG5hbWUpOwogICAgIHJldHVybiBtOwogfQogCkBAIC0zMDY2LDI0ICszMzU3LDI0IEBACiBpbXBfbG9hZF9keW5hbWljKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpuYW1lOworICAgIFB5T2JqZWN0ICpwYXRoYnl0ZXM7CiAgICAgY2hhciAqcGF0aG5hbWU7CiAgICAgUHlPYmplY3QgKmZvYiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm07CiAgICAgRklMRSAqZnAgPSBOVUxMOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2VzfE86bG9hZF9keW5hbWljIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRobmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvYikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzTyZ8Tzpsb2FkX2R5bmFtaWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aGJ5dGVzLCAmZm9iKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGF0aG5hbWUgPSBQeUJ5dGVzX0FTX1NUUklORyhwYXRoYnl0ZXMpOwogICAgIGlmIChmb2IpIHsKICAgICAgICAgZnAgPSBnZXRfZmlsZShwYXRobmFtZSwgZm9iLCAiciIpOwogICAgICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlNZW1fRnJlZShwYXRobmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocGF0aGJ5dGVzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogICAgIG0gPSBfUHlJbXBvcnRfTG9hZER5bmFtaWNNb2R1bGUobmFtZSwgcGF0aG5hbWUsIGZwKTsKLSAgICBQeU1lbV9GcmVlKHBhdGhuYW1lKTsKKyAgICBQeV9ERUNSRUYocGF0aGJ5dGVzKTsKICAgICBpZiAoZnApCiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgcmV0dXJuIG07CkBAIC0zMDk1LDIyICszMzg2LDIyIEBACiBpbXBfbG9hZF9zb3VyY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqcGF0aG5hbWU7CisgICAgUHlPYmplY3QgKnBhdGhuYW1lOwogICAgIFB5T2JqZWN0ICpmb2IgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptOwogICAgIEZJTEUgKmZwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2VzfE86bG9hZF9zb3VyY2UiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08mfE86bG9hZF9zb3VyY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZywgJnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZwYXRobmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvYikpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGZwID0gZ2V0X2ZpbGUocGF0aG5hbWUsIGZvYiwgInIiKTsKKyAgICBmcCA9IGdldF9maWxlKFB5Qnl0ZXNfQVNfU1RSSU5HKHBhdGhuYW1lKSwgZm9iLCAiciIpOwogICAgIGlmIChmcCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUocGF0aG5hbWUpOworICAgICAgICBQeV9ERUNSRUYocGF0aG5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbSA9IGxvYWRfc291cmNlX21vZHVsZShuYW1lLCBwYXRobmFtZSwgZnApOwotICAgIFB5TWVtX0ZyZWUocGF0aG5hbWUpOworICAgIG0gPSBsb2FkX3NvdXJjZV9tb2R1bGUobmFtZSwgUHlCeXRlc19BU19TVFJJTkcocGF0aG5hbWUpLCBmcCk7CisgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKICAgICBmY2xvc2UoZnApOwogICAgIHJldHVybiBtOwogfQpAQCAtMzEyMCwxNiArMzQxMSwxNiBAQAogewogICAgIGNoYXIgKm5hbWU7CiAgICAgUHlPYmplY3QgKmZvYjsKLSAgICBjaGFyICpwYXRobmFtZTsKKyAgICBQeU9iamVjdCAqcGF0aG5hbWU7CiAgICAgUHlPYmplY3QgKiByZXQ7CiAgICAgY2hhciAqc3VmZml4OyAvKiBVbnVzZWQgKi8KICAgICBjaGFyICptb2RlOwogICAgIGludCB0eXBlOwogICAgIEZJTEUgKmZwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzT2VzKHNzaSk6bG9hZF9tb2R1bGUiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic09PJihzc2kpOmxvYWRfbW9kdWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsICZmb2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICZwYXRobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWZmaXgsICZtb2RlLCAmdHlwZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmICgqbW9kZSkgewpAQCAtMzE0MCw3ICszNDMxLDcgQEAKICAgICAgICAgaWYgKCEoKm1vZGUgPT0gJ3InIHx8ICptb2RlID09ICdVJykgfHwgc3RyY2hyKG1vZGUsICcrJykpIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGZpbGUgb3BlbiBtb2RlICUuMjAwcyIsIG1vZGUpOwotICAgICAgICAgICAgUHlNZW1fRnJlZShwYXRobmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYocGF0aG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMTQ5LDEyICszNDQwLDEyIEBACiAgICAgZWxzZSB7CiAgICAgICAgIGZwID0gZ2V0X2ZpbGUoTlVMTCwgZm9iLCBtb2RlKTsKICAgICAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUocGF0aG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIHJldCA9IGxvYWRfbW9kdWxlKG5hbWUsIGZwLCBwYXRobmFtZSwgdHlwZSwgTlVMTCk7Ci0gICAgUHlNZW1fRnJlZShwYXRobmFtZSk7CisgICAgcmV0ID0gbG9hZF9tb2R1bGUobmFtZSwgZnAsIFB5Qnl0ZXNfQVNfU1RSSU5HKHBhdGhuYW1lKSwgdHlwZSwgTlVMTCk7CisgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKICAgICBpZiAoZnApCiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgcmV0dXJuIHJldDsKQEAgLTMxNjQsMTMgKzM0NTUsMTMgQEAKIGltcF9sb2FkX3BhY2thZ2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqcGF0aG5hbWU7CisgICAgUHlPYmplY3QgKnBhdGhuYW1lOwogICAgIFB5T2JqZWN0ICogcmV0OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic2VzOmxvYWRfcGFja2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmcGF0aG5hbWUpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08mOmxvYWRfcGFja2FnZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZwYXRobmFtZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldCA9IGxvYWRfcGFja2FnZShuYW1lLCBwYXRobmFtZSk7Ci0gICAgUHlNZW1fRnJlZShwYXRobmFtZSk7CisgICAgcmV0ID0gbG9hZF9wYWNrYWdlKG5hbWUsIFB5Qnl0ZXNfQVNfU1RSSU5HKHBhdGhuYW1lKSk7CisgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0zMTk0LDYgKzM0ODUsODIgQEAKIFxuXAogUmVsb2FkIHRoZSBtb2R1bGUuICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuIik7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitpbXBfY2FjaGVfZnJvbV9zb3VyY2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWJ1Z19vdmVycmlkZSIsIE5VTEx9OworCisgICAgY2hhciBidWZbTUFYUEFUSExFTisxXTsKKyAgICBQeU9iamVjdCAqcGF0aGJ5dGVzOworICAgIGNoYXIgKmNwYXRobmFtZTsKKyAgICBQeU9iamVjdCAqZGVidWdfb3ZlcnJpZGUgPSBOVUxMOworICAgIGludCBkZWJ1ZyA9ICFQeV9PcHRpbWl6ZUZsYWc7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcygKKyAgICAgICAgICAgICAgICBhcmdzLCBrd3MsICJPJnxPIiwga3dsaXN0LAorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJnBhdGhieXRlcywgJmRlYnVnX292ZXJyaWRlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoZGVidWdfb3ZlcnJpZGUgIT0gTlVMTCAmJgorICAgICAgICAoZGVidWcgPSBQeU9iamVjdF9Jc1RydWUoZGVidWdfb3ZlcnJpZGUpKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHBhdGhieXRlcyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNwYXRobmFtZSA9IG1ha2VfY29tcGlsZWRfcGF0aG5hbWUoCisgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHBhdGhieXRlcyksCisgICAgICAgIGJ1ZiwgTUFYUEFUSExFTisxLCBkZWJ1Zyk7CisgICAgUHlfREVDUkVGKHBhdGhieXRlcyk7CisKKyAgICBpZiAoY3BhdGhuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLCAicGF0aCBidWZmZXIgdG9vIHNob3J0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChidWYpOworfQorCitQeURvY19TVFJWQVIoZG9jX2NhY2hlX2Zyb21fc291cmNlLAorIkdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5IGZpbGUsIHJldHVybiB0aGUgcGF0aCB0byBpdHMgLnB5Yy8ucHlvIGZpbGUuXG5cCitcblwKK1RoZSAucHkgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZVxuXAorLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb25cblwKK3dpbGwgYmUgLnB5YyB1bmxlc3MgX19kZWJ1Z19fIGlzIG5vdCBkZWZpbmVkLCB0aGVuIGl0IHdpbGwgYmUgLnB5by5cblwKK1xuXAorSWYgZGVidWdfb3ZlcnJpZGUgaXMgbm90IE5vbmUsIHRoZW4gaXQgbXVzdCBiZSBhIGJvb2xlYW4gYW5kIGlzIHRha2VuIGFzXG5cCit0aGUgdmFsdWUgb2YgX19kZWJ1Z19fIGluc3RlYWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpbXBfc291cmNlX2Zyb21fY2FjaGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsIE5VTEx9OworCisgICAgUHlPYmplY3QgKnBhdGhuYW1lX29iajsKKyAgICBjaGFyICpwYXRobmFtZTsKKyAgICBjaGFyIGJ1ZltNQVhQQVRITEVOKzFdOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoCisgICAgICAgICAgICAgICAgYXJncywga3dzLCAiTyYiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmcGF0aG5hbWVfb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwYXRobmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHBhdGhuYW1lX29iaik7CisgICAgaWYgKG1ha2Vfc291cmNlX3BhdGhuYW1lKHBhdGhuYW1lLCBidWYpID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJOb3QgYSBQRVAgMzE0NyBweWMgcGF0aDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUpOworICAgICAgICBQeV9ERUNSRUYocGF0aG5hbWVfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0RFQ1JFRihwYXRobmFtZV9vYmopOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhidWYpOworfQorCitQeURvY19TVFJWQVIoZG9jX3NvdXJjZV9mcm9tX2NhY2hlLAorIkdpdmVuIHRoZSBwYXRoIHRvIGEgLnB5Yy4vLnB5byBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weSBmaWxlLlxuXAorXG5cCitUaGUgLnB5Yy8ucHlvIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdDsgdGhpcyBzaW1wbHkgcmV0dXJucyB0aGUgcGF0aCB0b1xuXAordGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5Yy8ucHlvIGZpbGUuICBJZiBwYXRoXG5cCitkb2VzIG5vdCBjb25mb3JtIHRvIFBFUCAzMTQ3IGZvcm1hdCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4iKTsKKwogLyogRG9jIHN0cmluZ3MgKi8KIAogUHlEb2NfU1RSVkFSKGRvY19pbXAsCkBAIC0zMjE2LDYgKzM1ODMsMTAgQEAKICJnZXRfbWFnaWMoKSAtPiBzdHJpbmdcblwKIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuIik7CiAKK1B5RG9jX1NUUlZBUihkb2NfZ2V0X3RhZywKKyJnZXRfdGFnKCkgLT4gc3RyaW5nXG5cCitSZXR1cm4gdGhlIG1hZ2ljIHRhZyBmb3IgLnB5YyBvciAucHlvIGZpbGVzLiIpOworCiBQeURvY19TVFJWQVIoZG9jX2dldF9zdWZmaXhlcywKICJnZXRfc3VmZml4ZXMoKSAtPiBbKHN1ZmZpeCwgbW9kZSwgdHlwZSksIC4uLl1cblwKIFJldHVybiBhIGxpc3Qgb2YgKHN1ZmZpeCwgbW9kZSwgdHlwZSkgdHVwbGVzIGRlc2NyaWJpbmcgdGhlIGZpbGVzXG5cCkBAIC0zMjQ2LDYgKzM2MTcsNyBAQAogc3RhdGljIFB5TWV0aG9kRGVmIGltcF9tZXRob2RzW10gPSB7CiAgICAgeyJmaW5kX21vZHVsZSIsICAgICAgaW1wX2ZpbmRfbW9kdWxlLCAgTUVUSF9WQVJBUkdTLCBkb2NfZmluZF9tb2R1bGV9LAogICAgIHsiZ2V0X21hZ2ljIiwgICAgICAgIGltcF9nZXRfbWFnaWMsICAgIE1FVEhfTk9BUkdTLCAgZG9jX2dldF9tYWdpY30sCisgICAgeyJnZXRfdGFnIiwgICAgICAgICAgaW1wX2dldF90YWcsICAgICAgTUVUSF9OT0FSR1MsICBkb2NfZ2V0X3RhZ30sCiAgICAgeyJnZXRfc3VmZml4ZXMiLCBpbXBfZ2V0X3N1ZmZpeGVzLCBNRVRIX05PQVJHUywgIGRvY19nZXRfc3VmZml4ZXN9LAogICAgIHsibG9hZF9tb2R1bGUiLCAgICAgIGltcF9sb2FkX21vZHVsZSwgIE1FVEhfVkFSQVJHUywgZG9jX2xvYWRfbW9kdWxlfSwKICAgICB7Im5ld19tb2R1bGUiLCAgICAgICBpbXBfbmV3X21vZHVsZSwgICBNRVRIX1ZBUkFSR1MsIGRvY19uZXdfbW9kdWxlfSwKQEAgLTMyNTMsNiArMzYyNSwxMCBAQAogICAgIHsiYWNxdWlyZV9sb2NrIiwgaW1wX2FjcXVpcmVfbG9jaywgTUVUSF9OT0FSR1MsICBkb2NfYWNxdWlyZV9sb2NrfSwKICAgICB7InJlbGVhc2VfbG9jayIsIGltcF9yZWxlYXNlX2xvY2ssIE1FVEhfTk9BUkdTLCAgZG9jX3JlbGVhc2VfbG9ja30sCiAgICAgeyJyZWxvYWQiLCAgICAgICBpbXBfcmVsb2FkLCAgICAgICBNRVRIX08sICAgICAgIGRvY19yZWxvYWR9LAorICAgIHsiY2FjaGVfZnJvbV9zb3VyY2UiLCAoUHlDRnVuY3Rpb24paW1wX2NhY2hlX2Zyb21fc291cmNlLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkb2NfY2FjaGVfZnJvbV9zb3VyY2V9LAorICAgIHsic291cmNlX2Zyb21fY2FjaGUiLCAoUHlDRnVuY3Rpb24paW1wX3NvdXJjZV9mcm9tX2NhY2hlLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBkb2Nfc291cmNlX2Zyb21fY2FjaGV9LAogICAgIC8qIFRoZSByZXN0IGFyZSBvYnNvbGV0ZSAqLwogICAgIHsiZ2V0X2Zyb3plbl9vYmplY3QiLCAgICAgICBpbXBfZ2V0X2Zyb3plbl9vYmplY3QsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiaXNfZnJvemVuX3BhY2thZ2UiLCAgIGltcF9pc19mcm96ZW5fcGFja2FnZSwgIE1FVEhfVkFSQVJHU30sCkBAIC0zMjg4LDU2ICszNjY0LDY5IEBACiBzdGF0aWMgaW50CiBOdWxsSW1wb3J0ZXJfaW5pdChOdWxsSW1wb3J0ZXIgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyICpwYXRoOwotICAgIFB5X3NzaXplX3QgcGF0aGxlbjsKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIFB5T2JqZWN0ICpwYXRoOworICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7CisgICAgaW50IHJ2OwogCiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiTnVsbEltcG9ydGVyKCkiLCBrd2RzKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJlczpOdWxsSW1wb3J0ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nLCAmcGF0aCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjpOdWxsSW1wb3J0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZwYXRoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgcGF0aGxlbiA9IHN0cmxlbihwYXRoKTsKLSAgICBpZiAocGF0aGxlbiA9PSAwKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUocGF0aCk7CisgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocGF0aCkgPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgImVtcHR5IHBhdGhuYW1lIik7CiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgewotI2lmbmRlZiBNU19XSU5ET1dTCi0gICAgICAgIHN0cnVjdCBzdGF0IHN0YXRidWY7Ci0gICAgICAgIGludCBydjsKLQotICAgICAgICBydiA9IHN0YXQocGF0aCwgJnN0YXRidWYpOwotICAgICAgICBQeU1lbV9GcmVlKHBhdGgpOwotICAgICAgICBpZiAocnYgPT0gMCkgewotICAgICAgICAgICAgLyogaXQgZXhpc3RzICovCi0gICAgICAgICAgICBpZiAoU19JU0RJUihzdGF0YnVmLnN0X21vZGUpKSB7Ci0gICAgICAgICAgICAgICAgLyogaXQncyBhIGRpcmVjdG9yeSAqLwotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4aXN0aW5nIGRpcmVjdG9yeSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UgLyogTVNfV0lORE9XUyAqLwotICAgICAgICBEV09SRCBydjsKLSAgICAgICAgLyogc2VlIGlzc3VlMTI5MyBhbmQgaXNzdWUzNjc3OgotICAgICAgICAgKiBzdGF0KCkgb24gV2luZG93cyBkb2Vzbid0IHJlY29nbmlzZSBwYXRocyBsaWtlCi0gICAgICAgICAqICJlOlxcc2hhcmVkXFwiIGFuZCAiXFxcXHdoaXRlcmFiLWMyem5saFxcc2hhcmVkIiBhcyBkaXJzLgotICAgICAgICAgKi8KLSAgICAgICAgcnYgPSBHZXRGaWxlQXR0cmlidXRlc0EocGF0aCk7Ci0gICAgICAgIFB5TWVtX0ZyZWUocGF0aCk7Ci0gICAgICAgIGlmIChydiAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgewotICAgICAgICAgICAgLyogaXQgZXhpc3RzICovCi0gICAgICAgICAgICBpZiAocnYgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpIHsKLSAgICAgICAgICAgICAgICAvKiBpdCdzIGEgZGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhpc3RpbmcgZGlyZWN0b3J5Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CisKKyAgICBydiA9IHN0YXQoUHlCeXRlc19BU19TVFJJTkcocGF0aCksICZzdGF0YnVmKTsKKyAgICBQeV9ERUNSRUYocGF0aCk7CisgICAgaWYgKHJ2ID09IDApIHsKKyAgICAgICAgLyogaXQgZXhpc3RzICovCisgICAgICAgIGlmIChTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgIC8qIGl0J3MgYSBkaXJlY3RvcnkgKi8KKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgImV4aXN0aW5nIGRpcmVjdG9yeSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogTVNfV0lORE9XUyAqLworICAgIFB5T2JqZWN0ICpwYXRob2JqOworICAgIERXT1JEIHJ2OworICAgIHdjaGFyX3QgKnBhdGg7CisKKyAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKCJOdWxsSW1wb3J0ZXIoKSIsIGt3ZHMpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6TnVsbEltcG9ydGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGhvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKHBhdGhvYmopID09IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0ltcG9ydEVycm9yLCAiZW1wdHkgcGF0aG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHBhdGggPSBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyhwYXRob2JqLCBOVUxMKTsKKyAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyogc2VlIGlzc3VlMTI5MyBhbmQgaXNzdWUzNjc3OgorICAgICAqIHN0YXQoKSBvbiBXaW5kb3dzIGRvZXNuJ3QgcmVjb2duaXNlIHBhdGhzIGxpa2UKKyAgICAgKiAiZTpcXHNoYXJlZFxcIiBhbmQgIlxcXFx3aGl0ZXJhYi1jMnpubGhcXHNoYXJlZCIgYXMgZGlycy4KKyAgICAgKi8KKyAgICBydiA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoKTsKKyAgICBQeU1lbV9GcmVlKHBhdGgpOworICAgIGlmIChydiAhPSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykgeworICAgICAgICAvKiBpdCBleGlzdHMgKi8KKyAgICAgICAgaWYgKHJ2ICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSB7CisgICAgICAgICAgICAvKiBpdCdzIGEgZGlyZWN0b3J5ICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsICJleGlzdGluZyBkaXJlY3RvcnkiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0zNDQwLDcgKzM4MjksNiBAQAogICBmYWlsdXJlOgogICAgIFB5X1hERUNSRUYobSk7CiAgICAgcmV0dXJuIE5VTEw7Ci0KIH0KIAogCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0ZGwuYyBiL1B5dGhvbi9pbXBvcnRkbC5jCmluZGV4IDUwNzIyMmIuLjljYWVkNDUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnRkbC5jCisrKyBiL1B5dGhvbi9pbXBvcnRkbC5jCkBAIC0yNywxMCArMjcsMTYgQEAKICAgICBkbF9mdW5jcHRyIHAwOwogICAgIFB5T2JqZWN0KiAoKnApKHZvaWQpOwogICAgIHN0cnVjdCBQeU1vZHVsZURlZiAqZGVmOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAKLSAgICBpZiAoKG0gPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbihuYW1lLCBwYXRobmFtZSkpICE9IE5VTEwpIHsKKyAgICBwYXRoID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChwYXRobmFtZSk7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoKG0gPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvblVuaWNvZGUobmFtZSwgcGF0aCkpICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKG0pOwotICAgICAgICByZXR1cm4gbTsKKyAgICAgICAgcmVzdWx0ID0gbTsKKyAgICAgICAgZ290byBmaW5hbGx5OwogICAgIH0KICAgICBsYXN0ZG90ID0gc3RycmNocihuYW1lLCAnLicpOwogICAgIGlmIChsYXN0ZG90ID09IE5VTEwpIHsKQEAgLTQ1LDI2ICs1MSwyNiBAQAogICAgIHAwID0gX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKG5hbWUsIHNob3J0bmFtZSwgcGF0aG5hbWUsIGZwKTsKICAgICBwID0gKFB5T2JqZWN0KigqKSh2b2lkKSlwMDsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKHAgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsCiAgICAgICAgICAgICJkeW5hbWljIG1vZHVsZSBkb2VzIG5vdCBkZWZpbmUgaW5pdCBmdW5jdGlvbiAoUHlJbml0XyUuMjAwcykiLAogICAgICAgICAgICAgICAgICAgICAgc2hvcnRuYW1lKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIG9sZGNvbnRleHQgPSBfUHlfUGFja2FnZUNvbnRleHQ7CiAgICAgX1B5X1BhY2thZ2VDb250ZXh0ID0gcGFja2FnZWNvbnRleHQ7CiAgICAgbSA9ICgqcCkoKTsKICAgICBfUHlfUGFja2FnZUNvbnRleHQgPSBvbGRjb250ZXh0OwogICAgIGlmIChtID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6YXRpb24gb2YgJXMgcmFpc2VkIHVucmVwb3J0ZWQgZXhjZXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgIHNob3J0bmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIFJlbWVtYmVyIHBvaW50ZXIgdG8gbW9kdWxlIGluaXQgZnVuY3Rpb24uICovCkBAIC03MiwxNyArNzgsMjUgQEAKICAgICBkZWYtPm1fYmFzZS5tX2luaXQgPSBwOwogCiAgICAgLyogUmVtZW1iZXIgdGhlIGZpbGVuYW1lIGFzIHRoZSBfX2ZpbGVfXyBhdHRyaWJ1dGUgKi8KLSAgICBwYXRoID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChwYXRobmFtZSk7CiAgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiX19maWxlX18iLCBwYXRoKSA8IDApCiAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIE5vdCBpbXBvcnRhbnQgZW5vdWdoIHRvIHJlcG9ydCAqLworICAgIGVsc2UKKyAgICAgICAgUHlfSU5DUkVGKHBhdGgpOwogCi0gICAgaWYgKF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbihtLCBuYW1lLCBwYXRobmFtZSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uVW5pY29kZShtLCBuYW1lLCBwYXRoKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQogICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigKICAgICAgICAgICAgICJpbXBvcnQgJXMgIyBkeW5hbWljYWxseSBsb2FkZWQgZnJvbSAlc1xuIiwKICAgICAgICAgICAgIG5hbWUsIHBhdGhuYW1lKTsKLSAgICByZXR1cm4gbTsKKyAgICByZXN1bHQgPSBtOworICAgIGdvdG8gZmluYWxseTsKKworZXJyb3I6CisgICAgcmVzdWx0ID0gTlVMTDsKK2ZpbmFsbHk6CisgICAgUHlfREVDUkVGKHBhdGgpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNlbmRpZiAvKiBIQVZFX0RZTkFNSUNfTE9BRElORyAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21hcnNoYWwuYyBiL1B5dGhvbi9tYXJzaGFsLmMKaW5kZXggMjEwOTNlZS4uNzNkNGYzNyAxMDA2NDQKLS0tIGEvUHl0aG9uL21hcnNoYWwuYworKysgYi9QeXRob24vbWFyc2hhbC5jCkBAIC0yNTQsNyArMjU0LDYgQEAKICAgICAgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgfQogICAgIH0KLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgZWxzZSBpZiAoUHlDb21wbGV4X0NoZWNrRXhhY3QodikpIHsKICAgICAgICAgaWYgKHAtPnZlcnNpb24gPiAxKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKQEAgLTI5Nyw3ICsyOTYsNiBAQAogICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICB9CiAgICAgfQotI2VuZGlmCiAgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIHdfYnl0ZShUWVBFX1NUUklORywgcCk7CiAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOwpAQCAtNzE0LDcgKzcxMiw2IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0jaWZuZGVmIFdJVEhPVVRfQ09NUExFWAogICAgIGNhc2UgVFlQRV9DT01QTEVYOgogICAgICAgICB7CiAgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdOwpAQCAtNzczLDcgKzc3MCw2IEBACiAgICAgICAgICAgICByZXR2YWwgPSBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KGMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSNlbmRpZgogCiAgICAgY2FzZSBUWVBFX1NUUklORzoKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKQEAgLTEwODIsMjMgKzEwNzgsMTMgQEAKIFB5T2JqZWN0ICoKIFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKEZJTEUgKmZwKQogewotLyogNzUlIG9mIDIuMSdzIC5weWMgZmlsZXMgY2FuIGV4cGxvaXQgU01BTExfRklMRV9MSU1JVC4KLSAqIFJFQVNPTkFCTEVfRklMRV9MSU1JVCBpcyBieSBkZWZuIHNvbWV0aGluZyBiaWcgZW5vdWdoIGZvciBUa2ludGVyLnB5Yy4KLSAqLwotI2RlZmluZSBTTUFMTF9GSUxFX0xJTUlUICgxTCA8PCAxNCkKKy8qIFJFQVNPTkFCTEVfRklMRV9MSU1JVCBpcyBieSBkZWZuIHNvbWV0aGluZyBiaWcgZW5vdWdoIGZvciBUa2ludGVyLnB5Yy4gKi8KICNkZWZpbmUgUkVBU09OQUJMRV9GSUxFX0xJTUlUICgxTCA8PCAxOCkKICNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgb2ZmX3QgZmlsZXNpemU7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgZmlsZXNpemUgPSBnZXRmaWxlc2l6ZShmcCk7Ci0gICAgaWYgKGZpbGVzaXplID4gMCkgewotICAgICAgICBjaGFyIGJ1ZltTTUFMTF9GSUxFX0xJTUlUXTsKLSAgICAgICAgY2hhciogcEJ1ZiA9IE5VTEw7Ci0gICAgICAgIGlmIChmaWxlc2l6ZSA8PSBTTUFMTF9GSUxFX0xJTUlUKQotICAgICAgICAgICAgcEJ1ZiA9IGJ1ZjsKLSAgICAgICAgZWxzZSBpZiAoZmlsZXNpemUgPD0gUkVBU09OQUJMRV9GSUxFX0xJTUlUKQotICAgICAgICAgICAgcEJ1ZiA9IChjaGFyICopUHlNZW1fTUFMTE9DKGZpbGVzaXplKTsKKyAgICBpZiAoZmlsZXNpemUgPiAwICYmIGZpbGVzaXplIDw9IFJFQVNPTkFCTEVfRklMRV9MSU1JVCkgeworICAgICAgICBjaGFyKiBwQnVmID0gKGNoYXIgKilQeU1lbV9NQUxMT0MoZmlsZXNpemUpOwogICAgICAgICBpZiAocEJ1ZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeU9iamVjdCogdjsKICAgICAgICAgICAgIHNpemVfdCBuOwpAQCAtMTEwNiw4ICsxMDkyLDcgQEAKICAgICAgICAgICAgICAgIGlzIHNtYWxsZXIgdGhhbiBSRUFTT05BQkxFX0ZJTEVfTElNSVQgKi8KICAgICAgICAgICAgIG4gPSBmcmVhZChwQnVmLCAxLCAoaW50KWZpbGVzaXplLCBmcCk7CiAgICAgICAgICAgICB2ID0gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKHBCdWYsIG4pOwotICAgICAgICAgICAgaWYgKHBCdWYgIT0gYnVmKQotICAgICAgICAgICAgICAgIFB5TWVtX0ZSRUUocEJ1Zik7CisgICAgICAgICAgICBQeU1lbV9GUkVFKHBCdWYpOwogICAgICAgICAgICAgcmV0dXJuIHY7CiAgICAgICAgIH0KIApAQCAtMTExOCw3ICsxMTAzLDYgQEAKICAgICAgKi8KICAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShmcCk7CiAKLSN1bmRlZiBTTUFMTF9GSUxFX0xJTUlUCiAjdW5kZWYgUkVBU09OQUJMRV9GSUxFX0xJTUlUCiB9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9tb2RzdXBwb3J0LmMgYi9QeXRob24vbW9kc3VwcG9ydC5jCmluZGV4IGY0MDViYWUuLjg1YjBkNjYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9tb2RzdXBwb3J0LmMKKysrIGIvUHl0aG9uL21vZHN1cHBvcnQuYwpAQCAtMjc5LDExICsyNzksOSBAQAogICAgICAgICAgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgKICAgICAgICAgICAgICAgICAoZG91YmxlKXZhX2FyZygqcF92YSwgdmFfZG91YmxlKSk7CiAKLSNpZm5kZWYgV0lUSE9VVF9DT01QTEVYCiAgICAgICAgIGNhc2UgJ0QnOgogICAgICAgICAgICAgcmV0dXJuIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgoCiAgICAgICAgICAgICAgICAgKigoUHlfY29tcGxleCAqKXZhX2FyZygqcF92YSwgUHlfY29tcGxleCAqKSkpOwotI2VuZGlmIC8qIFdJVEhPVVRfQ09NUExFWCAqLwogCiAgICAgICAgIGNhc2UgJ2MnOgogICAgICAgICB7CkBAIC0zMDQsMzkgKzMwMiw3IEBACiAKICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgIGNhc2UgJ3onOgotICAgICAgICB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgICAgIGNoYXIgKnN0ciA9IHZhX2FyZygqcF92YSwgY2hhciAqKTsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgbjsKLSAgICAgICAgICAgIGlmICgqKnBfZm9ybWF0ID09ICcjJykgewotICAgICAgICAgICAgICAgICsrKnBfZm9ybWF0OwotICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZMQUdfU0laRV9UKQotICAgICAgICAgICAgICAgICAgICBuID0gdmFfYXJnKCpwX3ZhLCBQeV9zc2l6ZV90KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG4gPSB2YV9hcmcoKnBfdmEsIGludCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbiA9IC0xOwotICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5X05vbmU7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBtID0gc3RybGVuKHN0cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtID4gUFlfU1NJWkVfVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmcgZm9yIFB5dGhvbiBzdHJpbmciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG4gPSAoUHlfc3NpemVfdCltOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKHN0ciwgbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgJ1UnOgorICAgICAgICBjYXNlICdVJzogICAvKiBYWFggZGVwcmVjYXRlZCBhbGlhcyAqLwogICAgICAgICB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGNoYXIgKnN0ciA9IHZhX2FyZygqcF92YSwgY2hhciAqKTsKQEAgLTQ5MCwxNSArNDU2LDcgQEAKICAgICBpbnQgbiA9IGNvdW50Zm9ybWF0KGYsICdcMCcpOwogICAgIHZhX2xpc3QgbHZhOwogCi0jaWZkZWYgVkFfTElTVF9JU19BUlJBWQotICAgIG1lbWNweShsdmEsIHZhLCBzaXplb2YodmFfbGlzdCkpOwotI2Vsc2UKLSNpZmRlZiBfX3ZhX2NvcHkKLSAgICBfX3ZhX2NvcHkobHZhLCB2YSk7Ci0jZWxzZQotICAgIGx2YSA9IHZhOwotI2VuZGlmCi0jZW5kaWYKKyAgICAgICAgUHlfVkFfQ09QWShsdmEsIHZhKTsKIAogICAgIGlmIChuIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaCBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCmluZGV4IGM0N2M3YzguLmE5MWRhNzkgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCisrKyBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCkBAIC00LDcgKzQsNyBAQAogICAgICYmVEFSR0VUX1JPVF9UV08sCiAgICAgJiZUQVJHRVRfUk9UX1RIUkVFLAogICAgICYmVEFSR0VUX0RVUF9UT1AsCi0gICAgJiZUQVJHRVRfUk9UX0ZPVVIsCisgICAgJiZUQVJHRVRfRFVQX1RPUF9UV08sCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZfdW5rbm93bl9vcGNvZGUsCkBAIC05OCw3ICs5OCw3IEBACiAgICAgJiZUQVJHRVRfREVMRVRFX0FUVFIsCiAgICAgJiZUQVJHRVRfU1RPUkVfR0xPQkFMLAogICAgICYmVEFSR0VUX0RFTEVURV9HTE9CQUwsCi0gICAgJiZUQVJHRVRfRFVQX1RPUFgsCisgICAgJiZfdW5rbm93bl9vcGNvZGUsCiAgICAgJiZUQVJHRVRfTE9BRF9DT05TVCwKICAgICAmJlRBUkdFVF9MT0FEX05BTUUsCiAgICAgJiZUQVJHRVRfQlVJTERfVFVQTEUsCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogICAgICYmVEFSR0VUX0xPQURfQ0xPU1VSRSwKICAgICAmJlRBUkdFVF9MT0FEX0RFUkVGLAogICAgICYmVEFSR0VUX1NUT1JFX0RFUkVGLAotICAgICYmX3Vua25vd25fb3Bjb2RlLAorICAgICYmVEFSR0VUX0RFTEVURV9ERVJFRiwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJlRBUkdFVF9DQUxMX0ZVTkNUSU9OX1ZBUiwKICAgICAmJlRBUkdFVF9DQUxMX0ZVTkNUSU9OX0tXLAogICAgICYmVEFSR0VUX0NBTExfRlVOQ1RJT05fVkFSX0tXLAorICAgICYmVEFSR0VUX1NFVFVQX1dJVEgsCiAgICAgJiZUQVJHRVRfRVhURU5ERURfQVJHLAotICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX0xJU1RfQVBQRU5ELAogICAgICYmVEFSR0VUX1NFVF9BREQsCiAgICAgJiZUQVJHRVRfTUFQX0FERCwKZGlmZiAtLWdpdCBhL1B5dGhvbi9wZWVwaG9sZS5jIGIvUHl0aG9uL3BlZXBob2xlLmMKaW5kZXggYzI3ODc4Yy4uMzU5ZWRhOCAxMDA2NDQKLS0tIGEvUHl0aG9uL3BlZXBob2xlLmMKKysrIGIvUHl0aG9uL3BlZXBob2xlLmMKQEAgLTQsMTAgKzQsOCBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLWFzdC5oIgogI2luY2x1ZGUgIm5vZGUuaCIKLSNpbmNsdWRlICJweWFyZW5hLmgiCiAjaW5jbHVkZSAiYXN0LmgiCiAjaW5jbHVkZSAiY29kZS5oIgotI2luY2x1ZGUgImNvbXBpbGUuaCIKICNpbmNsdWRlICJzeW10YWJsZS5oIgogI2luY2x1ZGUgIm9wY29kZS5oIgogCkBAIC0zMSw3ICsyOSw4IEBACiAgICBuZXcgY29uc3RhbnQgKGMxLCBjMiwgLi4uIGNuKSBjYW4gYmUgYXBwZW5kZWQuCiAgICBDYWxsZWQgd2l0aCBjb2Rlc3RyIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBMT0FEX0NPTlNULgogICAgQmFpbHMgb3V0IHdpdGggbm8gY2hhbmdlIGlmIG9uZSBvciBtb3JlIG9mIHRoZSBMT0FEX0NPTlNUcyBpcyBtaXNzaW5nLgotICAgQWxzbyB3b3JrcyBmb3IgQlVJTERfTElTVCB3aGVuIGZvbGxvd2VkIGJ5IGFuICJpbiIgb3IgIm5vdCBpbiIgdGVzdC4KKyAgIEFsc28gd29ya3MgZm9yIEJVSUxEX0xJU1QgYW5kIEJVSUxUX1NFVCB3aGVuIGZvbGxvd2VkIGJ5IGFuICJpbiIgb3IgIm5vdCBpbiIKKyAgIHRlc3Q7IGZvciBCVUlMRF9TRVQgaXQgYXNzZW1ibGVzIGEgZnJvemVuc2V0IHJhdGhlciB0aGFuIGEgdHVwbGUuCiAqLwogc3RhdGljIGludAogdHVwbGVfb2ZfY29uc3RhbnRzKHVuc2lnbmVkIGNoYXIgKmNvZGVzdHIsIFB5X3NzaXplX3QgbiwgUHlPYmplY3QgKmNvbnN0cykKQEAgLTQxLDcgKzQwLDcgQEAKIAogICAgIC8qIFByZS1jb25kaXRpb25zICovCiAgICAgYXNzZXJ0KFB5TGlzdF9DaGVja0V4YWN0KGNvbnN0cykpOwotICAgIGFzc2VydChjb2Rlc3RyW24qM10gPT0gQlVJTERfVFVQTEUgfHwgY29kZXN0cltuKjNdID09IEJVSUxEX0xJU1QpOworICAgIGFzc2VydChjb2Rlc3RyW24qM10gPT0gQlVJTERfVFVQTEUgfHwgY29kZXN0cltuKjNdID09IEJVSUxEX0xJU1QgfHwgY29kZXN0cltuKjNdID09IEJVSUxEX1NFVCk7CiAgICAgYXNzZXJ0KEdFVEFSRyhjb2Rlc3RyLCAobiozKSkgPT0gbik7CiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspCiAgICAgICAgIGFzc2VydChjb2Rlc3RyW2kqM10gPT0gTE9BRF9DT05TVCk7CkBAIC01OSw2ICs1OCwxNiBAQAogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG5ld2NvbnN0LCBpLCBjb25zdGFudCk7CiAgICAgfQogCisgICAgLyogSWYgaXQncyBhIEJVSUxEX1NFVCwgdXNlIHRoZSBQeVR1cGxlIHdlIGp1c3QgYnVpbHQgdG8gY3JlYXRlIGEKKyAgICAgIFB5RnJvemVuU2V0LCBhbmQgdXNlIHRoYXQgYXMgdGhlIGNvbnN0YW50IGluc3RlYWQ6ICovCisgICAgaWYgKGNvZGVzdHJbbiozXSA9PSBCVUlMRF9TRVQpIHsKKyAgICAgICAgUHlPYmplY3QgKnR1cGxlID0gbmV3Y29uc3Q7CisgICAgICAgIG5ld2NvbnN0ID0gUHlGcm96ZW5TZXRfTmV3KHR1cGxlKTsKKyAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKKyAgICAgICAgaWYgKG5ld2NvbnN0ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICAvKiBBcHBlbmQgZm9sZGVkIGNvbnN0YW50IG9udG8gY29uc3RzICovCiAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY29uc3RzLCBuZXdjb25zdCkpIHsKICAgICAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKQEAgLTE2NiwxMyArMTc1LDE2IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKG5ld2NvbnN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgaWYoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQpKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHNpemUgPSBQeU9iamVjdF9TaXplKG5ld2NvbnN0KTsKLSAgICBpZiAoc2l6ZSA9PSAtMSkKKyAgICBpZiAoc2l6ZSA9PSAtMSkgeworICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlib2FyZEludGVycnVwdCkpCisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICBlbHNlIGlmIChzaXplID4gMjApIHsKKyAgICB9IGVsc2UgaWYgKHNpemUgPiAyMCkgewogICAgICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0yMTUsNiArMjI3LDkgQEAKICAgICAgICAgY2FzZSBVTkFSWV9JTlZFUlQ6CiAgICAgICAgICAgICBuZXdjb25zdCA9IFB5TnVtYmVyX0ludmVydCh2KTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVOQVJZX1BPU0lUSVZFOgorICAgICAgICAgICAgbmV3Y29uc3QgPSBQeU51bWJlcl9Qb3NpdGl2ZSh2KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLyogQ2FsbGVkIHdpdGggYW4gdW5rbm93biBvcGNvZGUgKi8KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKQEAgLTIyMyw3ICsyMzgsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGlmIChuZXdjb25zdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGlmKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleWJvYXJkSW50ZXJydXB0KSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjY5LDYgKzI4NSw3IEBACiAgICAgICAgICAgICBjYXNlIFNFVFVQX0xPT1A6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0VYQ0VQVDoKICAgICAgICAgICAgIGNhc2UgU0VUVVBfRklOQUxMWToKKyAgICAgICAgICAgIGNhc2UgU0VUVVBfV0lUSDoKICAgICAgICAgICAgICAgICBqID0gR0VUSlVNUFRHVChjb2RlLCBpKTsKICAgICAgICAgICAgICAgICBibG9ja3Nbal0gPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDUwLDIwICs0NjcsMjEgQEAKICAgICAgICAgICAgICAgICBjdW1sYyA9IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAvKiBUcnkgdG8gZm9sZCB0dXBsZXMgb2YgY29uc3RhbnRzIChpbmNsdWRlcyBhIGNhc2UgZm9yIGxpc3RzCisgICAgICAgICAgICAgICAgLyogVHJ5IHRvIGZvbGQgdHVwbGVzIG9mIGNvbnN0YW50cyAoaW5jbHVkZXMgYSBjYXNlIGZvciBsaXN0cyBhbmQgc2V0cwogICAgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBvbmx5IHVzZWQgZm9yICJpbiIgYW5kICJub3QgaW4iIHRlc3RzKS4KICAgICAgICAgICAgICAgICAgICBTa2lwIG92ZXIgQlVJTERfU0VRTiAxIFVOUEFDS19TRVFOIDEuCiAgICAgICAgICAgICAgICAgICAgUmVwbGFjZSBCVUlMRF9TRVFOIDIgVU5QQUNLX1NFUU4gMiB3aXRoIFJPVDIuCiAgICAgICAgICAgICAgICAgICAgUmVwbGFjZSBCVUlMRF9TRVFOIDMgVU5QQUNLX1NFUU4gMyB3aXRoIFJPVDMgUk9UMi4gKi8KICAgICAgICAgICAgIGNhc2UgQlVJTERfVFVQTEU6CiAgICAgICAgICAgICBjYXNlIEJVSUxEX0xJU1Q6CisgICAgICAgICAgICBjYXNlIEJVSUxEX1NFVDoKICAgICAgICAgICAgICAgICBqID0gR0VUQVJHKGNvZGVzdHIsIGkpOwogICAgICAgICAgICAgICAgIGggPSBpIC0gMyAqIGo7CiAgICAgICAgICAgICAgICAgaWYgKGggPj0gMCAgJiYKICAgICAgICAgICAgICAgICAgICAgaiA8PSBsYXN0bGMgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICAoKG9wY29kZSA9PSBCVUlMRF9UVVBMRSAmJgogICAgICAgICAgICAgICAgICAgICAgIElTQkFTSUNCTE9DSyhibG9ja3MsIGgsIDMqKGorMSkpKSB8fAotICAgICAgICAgICAgICAgICAgICAgKG9wY29kZSA9PSBCVUlMRF9MSVNUICYmCisgICAgICAgICAgICAgICAgICAgICAoKG9wY29kZSA9PSBCVUlMRF9MSVNUIHx8IG9wY29kZSA9PSBCVUlMRF9TRVQpICYmCiAgICAgICAgICAgICAgICAgICAgICAgY29kZXN0cltpKzNdPT1DT01QQVJFX09QICYmCiAgICAgICAgICAgICAgICAgICAgICAgSVNCQVNJQ0JMT0NLKGJsb2NrcywgaCwgMyooaisyKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAoR0VUQVJHKGNvZGVzdHIsaSszKT09NiB8fApAQCAtNDc1LDcgKzQ5Myw4IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChjb2Rlc3RyW2krM10gIT0gVU5QQUNLX1NFUVVFTkNFICB8fAogICAgICAgICAgICAgICAgICAgICAhSVNCQVNJQ0JMT0NLKGJsb2NrcyxpLDYpIHx8Ci0gICAgICAgICAgICAgICAgICAgIGogIT0gR0VUQVJHKGNvZGVzdHIsIGkrMykpCisgICAgICAgICAgICAgICAgICAgIGogIT0gR0VUQVJHKGNvZGVzdHIsIGkrMykgfHwKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID09IEJVSUxEX1NFVCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKGogPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBtZW1zZXQoY29kZXN0citpLCBOT1AsIDYpOwpAQCAtNTE3LDYgKzUzNiw3IEBACiAgICAgICAgICAgICAgICAgICAgTE9BRF9DT05TVCBjMSAgVU5BUllfT1AgLS0+ICAgICAgICAgICAgICAgICAgTE9BRF9DT05TVCB1bmFyeV9vcChjKSAqLwogICAgICAgICAgICAgY2FzZSBVTkFSWV9ORUdBVElWRToKICAgICAgICAgICAgIGNhc2UgVU5BUllfSU5WRVJUOgorICAgICAgICAgICAgY2FzZSBVTkFSWV9QT1NJVElWRToKICAgICAgICAgICAgICAgICBpZiAobGFzdGxjID49IDEgICAgICAgICAgICAgICAgICAmJgogICAgICAgICAgICAgICAgICAgICBJU0JBU0lDQkxPQ0soYmxvY2tzLCBpLTMsIDQpICAmJgogICAgICAgICAgICAgICAgICAgICBmb2xkX3VuYXJ5b3BzX29uX2NvbnN0YW50cygmY29kZXN0cltpLTNdLCBjb25zdHMpKSAgICAgICAgICAgICAgICAgIHsKQEAgLTU4NCw2ICs2MDQsNyBAQAogICAgICAgICAgICAgY2FzZSBTRVRVUF9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CisgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CiAgICAgICAgICAgICAgICAgdGd0ID0gR0VUSlVNUFRHVChjb2Rlc3RyLCBpKTsKICAgICAgICAgICAgICAgICAvKiBSZXBsYWNlIEpVTVBfKiB0byBhIFJFVFVSTiBpbnRvIGp1c3QgYSBSRVRVUk4gKi8KICAgICAgICAgICAgICAgICBpZiAoVU5DT05ESVRJT05BTF9KVU1QKG9wY29kZSkgJiYKQEAgLTY2Niw2ICs2ODcsNyBAQAogICAgICAgICAgICAgY2FzZSBTRVRVUF9MT09QOgogICAgICAgICAgICAgY2FzZSBTRVRVUF9FWENFUFQ6CiAgICAgICAgICAgICBjYXNlIFNFVFVQX0ZJTkFMTFk6CisgICAgICAgICAgICBjYXNlIFNFVFVQX1dJVEg6CiAgICAgICAgICAgICAgICAgaiA9IGFkZHJtYXBbR0VUQVJHKGNvZGVzdHIsIGkpICsgaSArIDNdIC0gYWRkcm1hcFtpXSAtIDM7CiAgICAgICAgICAgICAgICAgU0VUQVJHKGNvZGVzdHIsIGksIGopOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5YXJlbmEuYyBiL1B5dGhvbi9weWFyZW5hLmMKaW5kZXggMmQ2MzYzOC4uNWEyNTVhZSAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5YXJlbmEuYworKysgYi9QeXRob24vcHlhcmVuYS5jCkBAIC0xLDUgKzEsNCBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgInB5YXJlbmEuaCIKIAogLyogQSBzaW1wbGUgYXJlbmEgYmxvY2sgc3RydWN0dXJlLgogCmRpZmYgLS1naXQgYS9QeXRob24vcHltYXRoLmMgYi9QeXRob24vcHltYXRoLmMKaW5kZXggOTE1OWI2ZS4uODI3YTc3MyAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5bWF0aC5jCisrKyBiL1B5dGhvbi9weW1hdGguYwpAQCAtNzcsMjAyICs3NywzIEBACiAgICAgcmV0dXJuIGNvcHlzaWduKHksIHgpOwogfQogI2VuZGlmIC8qIEhBVkVfUk9VTkQgKi8KLQotI2lmbmRlZiBIQVZFX0xPRzFQCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotZG91YmxlCi1sb2cxcChkb3VibGUgeCkKLXsKLSAgICAvKiBGb3IgeCBzbWFsbCwgd2UgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guICBMZXQgeSBiZSB0aGUgbmVhcmVzdAotICAgICAgIGZsb2F0IHRvIDEreCwgdGhlbgotCi0gICAgICAgICAxK3ggPSB5ICogKDEgLSAoeS0xLXgpL3kpCi0KLSAgICAgICBzbyBsb2coMSt4KSA9IGxvZyh5KSArIGxvZygxLSh5LTEteCkveSkuICBTaW5jZSAoeS0xLXgpL3kgaXMgdGlueSwKLSAgICAgICB0aGUgc2Vjb25kIHRlcm0gaXMgd2VsbCBhcHByb3hpbWF0ZWQgYnkgKHktMS14KS95LiAgSWYgYWJzKHgpID49Ci0gICAgICAgREJMX0VQU0lMT04vMiBvciB0aGUgcm91bmRpbmctbW9kZSBpcyBzb21lIGZvcm0gb2Ygcm91bmQtdG8tbmVhcmVzdAotICAgICAgIHRoZW4geS0xLXggd2lsbCBiZSBleGFjdGx5IHJlcHJlc2VudGFibGUsIGFuZCBpcyBjb21wdXRlZCBleGFjdGx5Ci0gICAgICAgYnkgKHktMSkteC4KLQotICAgICAgIElmIGFicyh4KSA8IERCTF9FUFNJTE9OLzIgYW5kIHRoZSByb3VuZGluZyBtb2RlIGlzIG5vdCBrbm93biB0byBiZQotICAgICAgIHJvdW5kLXRvLW5lYXJlc3QgdGhlbiB0aGlzIG1ldGhvZCBpcyBzbGlnaHRseSBkYW5nZXJvdXM6IDEreCBjb3VsZAotICAgICAgIGJlIHJvdW5kZWQgdXAgdG8gMStEQkxfRVBTSUxPTiBpbnN0ZWFkIG9mIGRvd24gdG8gMSwgYW5kIGluIHRoYXQKLSAgICAgICBjYXNlIHktMS14IHdpbGwgbm90IGJlIGV4YWN0bHkgcmVwcmVzZW50YWJsZSBhbnkgbW9yZSBhbmQgdGhlCi0gICAgICAgcmVzdWx0IGNhbiBiZSBvZmYgYnkgbWFueSB1bHBzLiAgQnV0IHRoaXMgaXMgZWFzaWx5IGZpeGVkOiBmb3IgYQotICAgICAgIGZsb2F0aW5nLXBvaW50IG51bWJlciB8eHwgPCBEQkxfRVBTSUxPTi8yLiwgdGhlIGNsb3Nlc3QKLSAgICAgICBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gbG9nKDEreCkgaXMgZXhhY3RseSB4LgotICAgICovCi0KLSAgICBkb3VibGUgeTsKLSAgICBpZiAoZmFicyh4KSA8IERCTF9FUFNJTE9OLzIuKSB7Ci0gICAgICAgIHJldHVybiB4OwotICAgIH0gZWxzZSBpZiAoLTAuNSA8PSB4ICYmIHggPD0gMS4pIHsKLSAgICAgICAgLyogV0FSTklORzogaXQncyBwb3NzaWJsZSB0aGFuIGFuIG92ZXJlYWdlciBjb21waWxlcgotICAgICAgICAgICB3aWxsIGluY29ycmVjdGx5IG9wdGltaXplIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzCi0gICAgICAgICAgIHRvIHRoZSBlcXVpdmFsZW50IG9mICJyZXR1cm4gbG9nKDEuK3gpIi4gSWYgdGhpcwotICAgICAgICAgICBoYXBwZW5zLCB0aGVuIHJlc3VsdHMgZnJvbSBsb2cxcCB3aWxsIGJlIGluYWNjdXJhdGUKLSAgICAgICAgICAgZm9yIHNtYWxsIHguICovCi0gICAgICAgIHkgPSAxLit4OwotICAgICAgICByZXR1cm4gbG9nKHkpLSgoeS0xLikteCkveTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBOYU5zIGFuZCBpbmZpbml0aWVzIHNob3VsZCBlbmQgdXAgaGVyZSAqLwotICAgICAgICByZXR1cm4gbG9nKDEuK3gpOwotICAgIH0KLX0KLSNlbmRpZiAvKiBIQVZFX0xPRzFQICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZSBsbjIgPSA2LjkzMTQ3MTgwNTU5OTQ1Mjg2MjI3RS0wMTsKLXN0YXRpYyBjb25zdCBkb3VibGUgdHdvX3Bvd19tMjggPSAzLjcyNTI5MDI5ODQ2MTkxNDFFLTA5OyAvKiAyKiotMjggKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgdHdvX3Bvd19wMjggPSAyNjg0MzU0NTYuMDsgLyogMioqMjggKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDAuMDsKLQotLyogYXNpbmgoeCkKLSAqIE1ldGhvZCA6Ci0gKiAgICAgIEJhc2VkIG9uCi0gKiAgICAgICAgICAgICAgYXNpbmgoeCkgPSBzaWduKHgpICogbG9nIFsgfHh8ICsgc3FydCh4KngrMSkgXQotICogICAgICB3ZSBoYXZlCi0gKiAgICAgIGFzaW5oKHgpIDo9IHggIGlmICAxK3gqeD0xLAotICogICAgICAgICAgICAgICA6PSBzaWduKHgpKihsb2coeCkrbG4yKSkgZm9yIGxhcmdlIHx4fCwgZWxzZQotICogICAgICAgICAgICAgICA6PSBzaWduKHgpKmxvZygyfHh8KzEvKHx4fCtzcXJ0KHgqeCsxKSkpIGlmfHh8PjIsIGVsc2UKLSAqICAgICAgICAgICAgICAgOj0gc2lnbih4KSpsb2cxcCh8eHwgKyB4XjIvKDEgKyBzcXJ0KDEreF4yKSkpCi0gKi8KLQotI2lmbmRlZiBIQVZFX0FTSU5ICi1kb3VibGUKLWFzaW5oKGRvdWJsZSB4KQotewotICAgIGRvdWJsZSB3OwotICAgIGRvdWJsZSBhYnN4ID0gZmFicyh4KTsKLQotICAgIGlmIChQeV9JU19OQU4oeCkgfHwgUHlfSVNfSU5GSU5JVFkoeCkpIHsKLSAgICAgICAgcmV0dXJuIHgreDsKLSAgICB9Ci0gICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCi0gICAgICAgIHJldHVybiB4OyAgICAgICAgICAgICAgIC8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KLSAgICB9Ci0gICAgaWYgKGFic3ggPiB0d29fcG93X3AyOCkgeyAgICAgICAgICAgLyogfHh8ID4gMioqMjggKi8KLSAgICAgICAgdyA9IGxvZyhhYnN4KStsbjI7Ci0gICAgfQotICAgIGVsc2UgaWYgKGFic3ggPiAyLjApIHsgICAgICAgICAgICAgIC8qIDIgPCB8eHwgPCAyKioyOCAqLwotICAgICAgICB3ID0gbG9nKDIuMCphYnN4ICsgMS4wIC8gKHNxcnQoeCp4ICsgMS4wKSArIGFic3gpKTsKLSAgICB9Ci0gICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMioqLTI4IDw9IHx4fCA8IDI9ICovCi0gICAgICAgIGRvdWJsZSB0ID0geCp4OwotICAgICAgICB3ID0gbG9nMXAoYWJzeCArIHQgLyAoMS4wICsgc3FydCgxLjAgKyB0KSkpOwotICAgIH0KLSAgICByZXR1cm4gY29weXNpZ24odywgeCk7Ci0KLX0KLSNlbmRpZiAvKiBIQVZFX0FTSU5IICovCi0KLS8qIGFjb3NoKHgpCi0gKiBNZXRob2QgOgotICogICAgICBCYXNlZCBvbgotICogICAgICAgICAgICBhY29zaCh4KSA9IGxvZyBbIHggKyBzcXJ0KHgqeC0xKSBdCi0gKiAgICAgIHdlIGhhdmUKLSAqICAgICAgICAgICAgYWNvc2goeCkgOj0gbG9nKHgpK2xuMiwgaWYgeCBpcyBsYXJnZTsgZWxzZQotICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2coMngtMS8oc3FydCh4KngtMSkreCkpIGlmIHg+MjsgZWxzZQotICogICAgICAgICAgICBhY29zaCh4KSA6PSBsb2cxcCh0K3NxcnQoMi4wKnQrdCp0KSk7IHdoZXJlIHQ9eC0xLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIGFjb3NoKHgpIGlzIE5hTiB3aXRoIHNpZ25hbCBpZiB4PDEuCi0gKiAgICAgIGFjb3NoKE5hTikgaXMgTmFOIHdpdGhvdXQgc2lnbmFsLgotICovCi0KLSNpZm5kZWYgSEFWRV9BQ09TSAotZG91YmxlCi1hY29zaChkb3VibGUgeCkKLXsKLSAgICBpZiAoUHlfSVNfTkFOKHgpKSB7Ci0gICAgICAgIHJldHVybiB4K3g7Ci0gICAgfQotICAgIGlmICh4IDwgMS4pIHsgICAgICAgICAgICAgICAgICAgICAgIC8qIHggPCAxOyAgcmV0dXJuIGEgc2lnbmFsaW5nIE5hTiAqLwotICAgICAgICBlcnJubyA9IEVET007Ci0jaWZkZWYgUHlfTkFOCi0gICAgICAgIHJldHVybiBQeV9OQU47Ci0jZWxzZQotICAgICAgICByZXR1cm4gKHgteCkvKHgteCk7Ci0jZW5kaWYKLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA+PSB0d29fcG93X3AyOCkgeyAgICAgICAgLyogeCA+IDIqKjI4ICovCi0gICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh4KSkgewotICAgICAgICAgICAgcmV0dXJuIHgreDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBsb2coeCkrbG4yOyAgICAgICAgICAgICAgICAgIC8qIGFjb3NoKGh1Z2UpPWxvZygyeCkgKi8KLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICh4ID09IDEuKSB7Ci0gICAgICAgIHJldHVybiAwLjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhY29zaCgxKSA9IDAgKi8KLSAgICB9Ci0gICAgZWxzZSBpZiAoeCA+IDIuKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAyIDwgeCA8IDIqKjI4ICovCi0gICAgICAgIGRvdWJsZSB0ID0geCp4OwotICAgICAgICByZXR1cm4gbG9nKDIuMCp4IC0gMS4wIC8gKHggKyBzcXJ0KHQgLSAxLjApKSk7Ci0gICAgfQotICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEgPCB4IDw9IDIgKi8KLSAgICAgICAgZG91YmxlIHQgPSB4IC0gMS4wOwotICAgICAgICByZXR1cm4gbG9nMXAodCArIHNxcnQoMi4wKnQgKyB0KnQpKTsKLSAgICB9Ci19Ci0jZW5kaWYgLyogSEFWRV9BQ09TSCAqLwotCi0vKiBhdGFuaCh4KQotICogTWV0aG9kIDoKLSAqICAgIDEuUmVkdWNlZCB4IHRvIHBvc2l0aXZlIGJ5IGF0YW5oKC14KSA9IC1hdGFuaCh4KQotICogICAgMi5Gb3IgeD49MC41Ci0gKiAgICAgICAgICAgICAgICAxICAgICAgICAgICAyeCAgICAgICAgICAgICAgICAgICAgICAgICAgeAotICogICAgICBhdGFuaCh4KSA9IC0tLSAqIGxvZygxICsgLS0tLS0tLSkgPSAwLjUgKiBsb2cxcCgyICogLS0tLS0tLS0pCi0gKiAgICAgICAgICAgICAgICAyICAgICAgICAgIDEgLSB4ICAgICAgICAgICAgICAgICAgICAxIC0geAotICoKLSAqICAgICAgRm9yIHg8MC41Ci0gKiAgICAgIGF0YW5oKHgpID0gMC41KmxvZzFwKDJ4KzJ4KngvKDEteCkpCi0gKgotICogU3BlY2lhbCBjYXNlczoKLSAqICAgICAgYXRhbmgoeCkgaXMgTmFOIGlmIHx4fCA+PSAxIHdpdGggc2lnbmFsOwotICogICAgICBhdGFuaChOYU4pIGlzIHRoYXQgTmFOIHdpdGggbm8gc2lnbmFsOwotICoKLSAqLwotCi0jaWZuZGVmIEhBVkVfQVRBTkgKLWRvdWJsZQotYXRhbmgoZG91YmxlIHgpCi17Ci0gICAgZG91YmxlIGFic3g7Ci0gICAgZG91YmxlIHQ7Ci0KLSAgICBpZiAoUHlfSVNfTkFOKHgpKSB7Ci0gICAgICAgIHJldHVybiB4K3g7Ci0gICAgfQotICAgIGFic3ggPSBmYWJzKHgpOwotICAgIGlmIChhYnN4ID49IDEuKSB7ICAgICAgICAgICAgICAgICAgIC8qIHx4fCA+PSAxICovCi0gICAgICAgIGVycm5vID0gRURPTTsKLSNpZmRlZiBQeV9OQU4KLSAgICAgICAgcmV0dXJuIFB5X05BTjsKLSNlbHNlCi0gICAgICAgIHJldHVybiB4L3plcm87Ci0jZW5kaWYKLSAgICB9Ci0gICAgaWYgKGFic3ggPCB0d29fcG93X20yOCkgeyAgICAgICAgICAgLyogfHh8IDwgMioqLTI4ICovCi0gICAgICAgIHJldHVybiB4OwotICAgIH0KLSAgICBpZiAoYWJzeCA8IDAuNSkgeyAgICAgICAgICAgICAgICAgICAvKiB8eHwgPCAwLjUgKi8KLSAgICAgICAgdCA9IGFic3grYWJzeDsKLSAgICAgICAgdCA9IDAuNSAqIGxvZzFwKHQgKyB0KmFic3ggLyAoMS4wIC0gYWJzeCkpOwotICAgIH0KLSAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAwLjUgPD0gfHh8IDw9IDEuMCAqLwotICAgICAgICB0ID0gMC41ICogbG9nMXAoKGFic3ggKyBhYnN4KSAvICgxLjAgLSBhYnN4KSk7Ci0gICAgfQotICAgIHJldHVybiBjb3B5c2lnbih0LCB4KTsKLX0KLSNlbmRpZiAvKiBIQVZFX0FUQU5IICovCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCBlYTBkMDVkLi5iMzQ3YzQxIDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTQ3LDcgKzQ3LDkgQEAKIAogc3RhdGljIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwX2hlYWQgPSBOVUxMOwogCi1QeVRocmVhZFN0YXRlICpfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID0gTlVMTDsKKy8qIEFzc3VtaW5nIHRoZSBjdXJyZW50IHRocmVhZCBob2xkcyB0aGUgR0lMLCB0aGlzIGlzIHRoZQorICAgUHlUaHJlYWRTdGF0ZSBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLiAqLworX1B5X2F0b21pY19hZGRyZXNzIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgPSB7TlVMTH07CiBQeVRocmVhZEZyYW1lR2V0dGVyIF9QeVRocmVhZFN0YXRlX0dldEZyYW1lID0gTlVMTDsKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC03Nyw2ICs3OSw3IEBACiAgICAgICAgIGludGVycC0+Y29kZWNfc2VhcmNoX2NhY2hlID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSA9IE5VTEw7CiAgICAgICAgIGludGVycC0+Y29kZWNzX2luaXRpYWxpemVkID0gMDsKKyAgICAgICAgaW50ZXJwLT5mc2NvZGVjX2luaXRpYWxpemVkID0gMDsKICNpZmRlZiBIQVZFX0RMT1BFTgogI2lmZGVmIFJUTERfTk9XCiAgICAgICAgIGludGVycC0+ZGxvcGVuZmxhZ3MgPSBSVExEX05PVzsKQEAgLTMzNCw3ICszMzcsNyBAQAogdm9pZAogUHlUaHJlYWRTdGF0ZV9EZWxldGUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewotICAgIGlmICh0c3RhdGUgPT0gX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkKKyAgICBpZiAodHN0YXRlID09IF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KSkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IHRzdGF0ZSBpcyBzdGlsbCBjdXJyZW50Iik7CiAgICAgdHN0YXRlX2RlbGV0ZV9jb21tb24odHN0YXRlKTsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMzQ4LDExICszNTEsMTIgQEAKIHZvaWQKIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCgpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gX1B5VGhyZWFkU3RhdGVfQ3VycmVudDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSopX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoCisgICAgICAgICZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50KTsKICAgICBpZiAodHN0YXRlID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAiUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50OiBubyBjdXJyZW50IHRzdGF0ZSIpOwotICAgIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgPSBOVUxMOworICAgIF9QeV9hdG9taWNfc3RvcmVfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCwgTlVMTCk7CiAgICAgdHN0YXRlX2RlbGV0ZV9jb21tb24odHN0YXRlKTsKICAgICBpZiAoYXV0b0ludGVycHJldGVyU3RhdGUgJiYgUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSB0c3RhdGUpCiAgICAgICAgIFB5VGhyZWFkX2RlbGV0ZV9rZXlfdmFsdWUoYXV0b1RMU2tleSk7CkBAIC0zNjQsMTkgKzM2OCwyMiBAQAogUHlUaHJlYWRTdGF0ZSAqCiBQeVRocmVhZFN0YXRlX0dldCh2b2lkKQogewotICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID09IE5VTEwpCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0dldDogbm8gY3VycmVudCB0aHJlYWQiKTsKIAotICAgIHJldHVybiBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworICAgIHJldHVybiB0c3RhdGU7CiB9CiAKIAogUHlUaHJlYWRTdGF0ZSAqCiBQeVRocmVhZFN0YXRlX1N3YXAoUHlUaHJlYWRTdGF0ZSAqbmV3dHMpCiB7Ci0gICAgUHlUaHJlYWRTdGF0ZSAqb2xkdHMgPSBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworICAgIFB5VGhyZWFkU3RhdGUgKm9sZHRzID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CiAKLSAgICBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID0gbmV3dHM7CisgICAgX1B5X2F0b21pY19zdG9yZV9yZWxheGVkKCZfUHlUaHJlYWRTdGF0ZV9DdXJyZW50LCBuZXd0cyk7CiAgICAgLyogSXQgc2hvdWxkIG5vdCBiZSBwb3NzaWJsZSBmb3IgbW9yZSB0aGFuIG9uZSB0aHJlYWQgc3RhdGUKICAgICAgICB0byBiZSB1c2VkIGZvciBhIHRocmVhZC4gIENoZWNrIHRoaXMgdGhlIGJlc3Qgd2UgY2FuIGluIGRlYnVnCiAgICAgICAgYnVpbGRzLgpAQCAtNDA1LDE2ICs0MTIsMTggQEAKIFB5T2JqZWN0ICoKIFB5VGhyZWFkU3RhdGVfR2V0RGljdCh2b2lkKQogewotICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9DdXJyZW50ID09IE5VTEwpCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUHlUaHJlYWRTdGF0ZV9DdXJyZW50LT5kaWN0ID09IE5VTEwpIHsKKyAgICBpZiAodHN0YXRlLT5kaWN0ID09IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKmQ7Ci0gICAgICAgIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQtPmRpY3QgPSBkID0gUHlEaWN0X05ldygpOworICAgICAgICB0c3RhdGUtPmRpY3QgPSBkID0gUHlEaWN0X05ldygpOwogICAgICAgICBpZiAoZCA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgcmV0dXJuIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQtPmRpY3Q7CisgICAgcmV0dXJuIHRzdGF0ZS0+ZGljdDsKIH0KIAogCkBAIC00NTMsNiArNDYyLDcgQEAKICAgICAgICAgICAgIHAtPmFzeW5jX2V4YyA9IGV4YzsKICAgICAgICAgICAgIEhFQURfVU5MT0NLKCk7CiAgICAgICAgICAgICBQeV9YREVDUkVGKG9sZF9leGMpOworICAgICAgICAgICAgX1B5RXZhbF9TaWduYWxBc3luY0V4YygpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICB9CkBAIC01NDksMTAgKzU1OSw3IEBACiB7CiAgICAgLyogTXVzdCBiZSB0aGUgdHN0YXRlIGZvciB0aGlzIHRocmVhZCAqLwogICAgIGFzc2VydChQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpPT10c3RhdGUpOwotICAgIC8qIE9uIFdpbmRvd3MgYXQgbGVhc3QsIHNpbXBsZSByZWFkcyBhbmQgd3JpdGVzIHRvIDMyIGJpdCB2YWx1ZXMKLSAgICAgICBhcmUgYXRvbWljLgotICAgICovCi0gICAgcmV0dXJuIHRzdGF0ZSA9PSBfUHlUaHJlYWRTdGF0ZV9DdXJyZW50OworICAgIHJldHVybiB0c3RhdGUgPT0gX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwogfQogCiAvKiBJbnRlcm5hbCBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gZnVuY3Rpb25zIGNhbGxlZCBieQpAQCAtNTYzLDYgKzU3MCw4IEBACiB7CiAgICAgYXNzZXJ0KGkgJiYgdCk7IC8qIG11c3QgaW5pdCB3aXRoIHZhbGlkIHN0YXRlcyAqLwogICAgIGF1dG9UTFNrZXkgPSBQeVRocmVhZF9jcmVhdGVfa2V5KCk7CisgICAgaWYgKGF1dG9UTFNrZXkgPT0gLTEpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNvdWxkIG5vdCBhbGxvY2F0ZSBUTFMgZW50cnkiKTsKICAgICBhdXRvSW50ZXJwcmV0ZXJTdGF0ZSA9IGk7CiAgICAgYXNzZXJ0KFB5VGhyZWFkX2dldF9rZXlfdmFsdWUoYXV0b1RMU2tleSkgPT0gTlVMTCk7CiAgICAgYXNzZXJ0KHQtPmdpbHN0YXRlX2NvdW50ZXIgPT0gMCk7CkBAIC01NzcsNiArNTg2LDIzIEBACiAgICAgYXV0b0ludGVycHJldGVyU3RhdGUgPSBOVUxMOwogfQogCisvKiBSZXNldCB0aGUgVExTIGtleSAtIGNhbGxlZCBieSBQeU9TX0FmdGVyRm9yay4KKyAqIFRoaXMgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGJ1dCBzb21lIC0gYnVnZ3kgLSBwdGhyZWFkIGltcGxlbWVudGF0aW9ucworICogZG9uJ3QgZmx1c2ggVExTIG9uIGZvcmssIHNlZSBpc3N1ZSAjMTA1MTcuCisgKi8KK3ZvaWQKK19QeUdJTFN0YXRlX1JlaW5pdCh2b2lkKQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCk7CisgICAgUHlUaHJlYWRfZGVsZXRlX2tleShhdXRvVExTa2V5KTsKKyAgICBpZiAoKGF1dG9UTFNrZXkgPSBQeVRocmVhZF9jcmVhdGVfa2V5KCkpID09IC0xKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDb3VsZCBub3QgYWxsb2NhdGUgVExTIGVudHJ5Iik7CisKKyAgICAvKiByZS1hc3NvY2lhdGUgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIHdpdGggdGhlIG5ldyBrZXkgKi8KKyAgICBpZiAoUHlUaHJlYWRfc2V0X2tleV92YWx1ZShhdXRvVExTa2V5LCAodm9pZCAqKXRzdGF0ZSkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJDb3VsZG4ndCBjcmVhdGUgYXV0b1RMU2tleSBtYXBwaW5nIik7Cit9CisKIC8qIFdoZW4gYSB0aHJlYWQgc3RhdGUgaXMgY3JlYXRlZCBmb3IgYSB0aHJlYWQgYnkgc29tZSBtZWNoYW5pc20gb3RoZXIgdGhhbgogICAgUHlHSUxTdGF0ZV9FbnN1cmUsIGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIEdJTFN0YXRlIG1hY2hpbmVyeSBrbm93cyBhYm91dAogICAgaXQgc28gaXQgZG9lc24ndCB0cnkgdG8gY3JlYXRlIGFub3RoZXIgdGhyZWFkIHN0YXRlIGZvciB0aGUgdGhyZWFkICh0aGlzIGlzCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdHJ0b2QuYyBiL1B5dGhvbi9weXN0cnRvZC5jCmluZGV4IGY3ZGRkMTMuLjc1ZTMwMzIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXN0cnRvZC5jCisrKyBiL1B5dGhvbi9weXN0cnRvZC5jCkBAIC0zLDExICszLDggQEAKICNpbmNsdWRlIDxQeXRob24uaD4KICNpbmNsdWRlIDxsb2NhbGUuaD4KIAotLyogX1B5X3BhcnNlX2luZl9vcl9uYW46IEF0dGVtcHQgdG8gcGFyc2UgYSBzdHJpbmcgb2YgdGhlIGZvcm0gIm5hbiIsICJpbmYiIG9yCi0gICAiaW5maW5pdHkiLCB3aXRoIGFuIG9wdGlvbmFsIGxlYWRpbmcgc2lnbiBvZiAiKyIgb3IgIi0iLiAgT24gc3VjY2VzcywKLSAgIHJldHVybiB0aGUgTmFOIG9yIEluZmluaXR5IGFzIGEgZG91YmxlIGFuZCBzZXQgKmVuZHB0ciB0byBwb2ludCBqdXN0IGJleW9uZAotICAgdGhlIHN1Y2Nlc3NmdWxseSBwYXJzZWQgcG9ydGlvbiBvZiB0aGUgc3RyaW5nLiAgT24gZmFpbHVyZSwgcmV0dXJuIC0xLjAgYW5kCi0gICBzZXQgKmVuZHB0ciB0byBwb2ludCB0byB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZy4gKi8KKy8qIENhc2UtaW5zZW5zaXRpdmUgc3RyaW5nIG1hdGNoIHVzZWQgZm9yIG5hbiBhbmQgaW5mIGRldGVjdGlvbjsgdCBzaG91bGQgYmUKKyAgIGxvd2VyLWNhc2UuICBSZXR1cm5zIDEgZm9yIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgMCBvdGhlcndpc2UuICovCiAKIHN0YXRpYyBpbnQKIGNhc2VfaW5zZW5zaXRpdmVfbWF0Y2goY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKQEAgLTE5LDYgKzE2LDEyIEBACiAgICAgcmV0dXJuICp0ID8gMCA6IDE7CiB9CiAKKy8qIF9QeV9wYXJzZV9pbmZfb3JfbmFuOiBBdHRlbXB0IHRvIHBhcnNlIGEgc3RyaW5nIG9mIHRoZSBmb3JtICJuYW4iLCAiaW5mIiBvcgorICAgImluZmluaXR5Iiwgd2l0aCBhbiBvcHRpb25hbCBsZWFkaW5nIHNpZ24gb2YgIisiIG9yICItIi4gIE9uIHN1Y2Nlc3MsCisgICByZXR1cm4gdGhlIE5hTiBvciBJbmZpbml0eSBhcyBhIGRvdWJsZSBhbmQgc2V0ICplbmRwdHIgdG8gcG9pbnQganVzdCBiZXlvbmQKKyAgIHRoZSBzdWNjZXNzZnVsbHkgcGFyc2VkIHBvcnRpb24gb2YgdGhlIHN0cmluZy4gIE9uIGZhaWx1cmUsIHJldHVybiAtMS4wIGFuZAorICAgc2V0ICplbmRwdHIgdG8gcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuICovCisKIGRvdWJsZQogX1B5X3BhcnNlX2luZl9vcl9uYW4oY29uc3QgY2hhciAqcCwgY2hhciAqKmVuZHB0cikKIHsKQEAgLTU1LDcgKzU4LDcgQEAKIH0KIAogLyoqCi0gKiBQeU9TX2FzY2lpX3N0cnRvZDoKKyAqIF9QeU9TX2FzY2lpX3N0cnRvZDoKICAqIEBucHRyOiAgICB0aGUgc3RyaW5nIHRvIGNvbnZlcnQgdG8gYSBudW1lcmljIHZhbHVlLgogICogQGVuZHB0cjogIGlmIG5vbi0lTlVMTCwgaXQgcmV0dXJucyB0aGUgY2hhcmFjdGVyIGFmdGVyCiAgKiAgICAgICAgICAgdGhlIGxhc3QgY2hhcmFjdGVyIHVzZWQgaW4gdGhlIGNvbnZlcnNpb24uCkBAIC04NSw3ICs4OCw3IEBACiAKICNpZm5kZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgogCi1kb3VibGUKK3N0YXRpYyBkb3VibGUKIF9QeU9TX2FzY2lpX3N0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQogewogICAgIGRvdWJsZSByZXN1bHQ7CkBAIC0xMTgsNyArMTIxLDcgQEAKICAgIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdHMuCiAqLwogCi1kb3VibGUKK3N0YXRpYyBkb3VibGUKIF9QeU9TX2FzY2lpX3N0cnRvZChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQogewogICAgIGNoYXIgKmZhaWxfcG9zOwpAQCAtMjY3LDQ4ICsyNzAsMTAgQEAKIAogI2VuZGlmCiAKLS8qIFB5T1NfYXNjaWlfc3RydG9kIGlzIERFUFJFQ0FURUQgaW4gUHl0aG9uIDMuMSAqLwotCi1kb3VibGUKLVB5T1NfYXNjaWlfc3RydG9kKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIpCi17Ci0gICAgY2hhciAqZmFpbF9wb3M7Ci0gICAgY29uc3QgY2hhciAqcDsKLSAgICBkb3VibGUgeDsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgIlB5T1NfYXNjaWlfc3RydG9kIGFuZCBQeU9TX2FzY2lpX2F0b2YgYXJlICIKLSAgICAgICAgICAgICAgICAgICAgICJkZXByZWNhdGVkLiAgVXNlIFB5T1Nfc3RyaW5nX3RvX2RvdWJsZSAiCi0gICAgICAgICAgICAgICAgICAgICAiaW5zdGVhZC4iLCAxKSA8IDApCi0gICAgICAgIHJldHVybiAtMS4wOwotCi0gICAgLyogX1B5T1NfYXNjaWlfc3RydG9kIGFscmVhZHkgZG9lcyBldmVyeXRoaW5nIHRoYXQgd2Ugd2FudCwKLSAgICAgICBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IHBhcnNlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLwotICAgIHAgPSBucHRyOwotICAgIHdoaWxlIChQeV9JU1NQQUNFKCpwKSkKLSAgICAgICAgcCsrOwotICAgIHggPSBfUHlPU19hc2NpaV9zdHJ0b2QocCwgJmZhaWxfcG9zKTsKLSAgICBpZiAoZmFpbF9wb3MgPT0gcCkKLSAgICAgICAgZmFpbF9wb3MgPSAoY2hhciAqKW5wdHI7Ci0gICAgaWYgKGVuZHB0cikKLSAgICAgICAgKmVuZHB0ciA9IChjaGFyICopZmFpbF9wb3M7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLS8qIFB5T1NfYXNjaWlfc3RydG9kIGlzIERFUFJFQ0FURUQgaW4gUHl0aG9uIDMuMSAqLwotCi1kb3VibGUKLVB5T1NfYXNjaWlfYXRvZihjb25zdCBjaGFyICpucHRyKQotewotICAgIHJldHVybiBQeU9TX2FzY2lpX3N0cnRvZChucHRyLCBOVUxMKTsKLX0KLQotLyogUHlPU19zdHJpbmdfdG9fZG91YmxlIGlzIHRoZSByZWNvbW1lbmRlZCByZXBsYWNlbWVudCBmb3IgdGhlIGRlcHJlY2F0ZWQKLSAgIFB5T1NfYXNjaWlfc3RydG9kIGFuZCBQeU9TX2FzY2lpX2F0b2YgZnVuY3Rpb25zLiAgSXQgY29udmVydHMgYQotICAgbnVsbC10ZXJtaW5hdGVkIGJ5dGUgc3RyaW5nIHMgKGludGVycHJldGVkIGFzIGEgc3RyaW5nIG9mIEFTQ0lJIGNoYXJhY3RlcnMpCi0gICB0byBhIGZsb2F0LiAgVGhlIHN0cmluZyBzaG91bGQgbm90IGhhdmUgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlIChpbgotICAgY29udHJhc3QsIFB5T1NfYXNjaWlfc3RydG9kIGFsbG93cyBsZWFkaW5nIHdoaXRlc3BhY2UgYnV0IG5vdCB0cmFpbGluZwotICAgd2hpdGVzcGFjZSkuICBUaGUgY29udmVyc2lvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgY3VycmVudCBsb2NhbGUuCisvKiBQeU9TX3N0cmluZ190b19kb3VibGUgY29udmVydHMgYSBudWxsLXRlcm1pbmF0ZWQgYnl0ZSBzdHJpbmcgcyAoaW50ZXJwcmV0ZWQKKyAgIGFzIGEgc3RyaW5nIG9mIEFTQ0lJIGNoYXJhY3RlcnMpIHRvIGEgZmxvYXQuICBUaGUgc3RyaW5nIHNob3VsZCBub3QgaGF2ZQorICAgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLiAgVGhlIGNvbnZlcnNpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlCisgICBjdXJyZW50IGxvY2FsZS4KIAogICAgSWYgZW5kcHRyIGlzIE5VTEwsIHRyeSB0byBjb252ZXJ0IHRoZSB3aG9sZSBzdHJpbmcuICBSYWlzZSBWYWx1ZUVycm9yIGFuZAogICAgcmV0dXJuIC0xLjAgaWYgdGhlIHN0cmluZyBpcyBub3QgYSB2YWxpZCByZXByZXNlbnRhdGlvbiBvZiBhIGZsb2F0aW5nLXBvaW50CkBAIC0zNjYsNiArMzMxLDggQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisjaWZkZWYgUFlfTk9fU0hPUlRfRkxPQVRfUkVQUgorCiAvKiBHaXZlbiBhIHN0cmluZyB0aGF0IG1heSBoYXZlIGEgZGVjaW1hbCBwb2ludCBpbiB0aGUgY3VycmVudAogICAgbG9jYWxlLCBjaGFuZ2UgaXQgYmFjayB0byBhIGRvdC4gIFNpbmNlIHRoZSBzdHJpbmcgY2Fubm90IGdldAogICAgbG9uZ2VyLCBubyBuZWVkIGZvciBhIG1heGltdW0gYnVmZmVyIHNpemUgcGFyYW1ldGVyLiAqLwpAQCAtNjE1LDEyICs1ODIsMTMgQEAKICNkZWZpbmUgRkxPQVRfRk9STUFUQlVGTEVOIDEyMAogCiAvKioKLSAqIFB5T1NfYXNjaWlfZm9ybWF0ZDoKKyAqIF9QeU9TX2FzY2lpX2Zvcm1hdGQ6CiAgKiBAYnVmZmVyOiBBIGJ1ZmZlciB0byBwbGFjZSB0aGUgcmVzdWx0aW5nIHN0cmluZyBpbgogICogQGJ1Zl9zaXplOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuCiAgKiBAZm9ybWF0OiBUaGUgcHJpbnRmKCktc3R5bGUgZm9ybWF0IHRvIHVzZSBmb3IgdGhlCiAgKiAgICAgICAgICBjb2RlIHRvIHVzZSBmb3IgY29udmVydGluZy4KICAqIEBkOiBUaGUgI2dkb3VibGUgdG8gY29udmVydAorICogQHByZWNpc2lvbjogVGhlIHByZWNpc2lvbiB0byB1c2Ugd2hlbiBmb3JtYXR0aW5nLgogICoKICAqIENvbnZlcnRzIGEgI2dkb3VibGUgdG8gYSBzdHJpbmcsIHVzaW5nIHRoZSAnLicgYXMKICAqIGRlY2ltYWwgcG9pbnQuIFRvIGZvcm1hdCB0aGUgbnVtYmVyIHlvdSBwYXNzIGluCkBAIC02MzMsNyArNjAxLDcgQEAKICAqIFJldHVybiB2YWx1ZTogVGhlIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB3aXRoIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLgogICogT24gZmFpbHVyZSByZXR1cm5zIE5VTEwgYnV0IGRvZXMgbm90IHNldCBhbnkgUHl0aG9uIGV4Y2VwdGlvbi4KICAqKi8KLWNoYXIgKgorc3RhdGljIGNoYXIgKgogX1B5T1NfYXNjaWlfZm9ybWF0ZChjaGFyICAgICAgICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgYnVmX3NpemUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LApAQCAtNzEzLDIyICs2ODEsNiBAQAogICAgIHJldHVybiBidWZmZXI7CiB9CiAKLWNoYXIgKgotUHlPU19hc2NpaV9mb3JtYXRkKGNoYXIgICAgICAgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICBzaXplX3QgICAgICBidWZfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgZG91YmxlICAgICAgZCkKLXsKLSAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICJQeU9TX2FzY2lpX2Zvcm1hdGQgaXMgZGVwcmVjYXRlZCwgIgotICAgICAgICAgICAgICAgICAgICAgInVzZSBQeU9TX2RvdWJsZV90b19zdHJpbmcgaW5zdGVhZCIsIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gX1B5T1NfYXNjaWlfZm9ybWF0ZChidWZmZXIsIGJ1Zl9zaXplLCBmb3JtYXQsIGQsIC0xKTsKLX0KLQotI2lmZGVmIFBZX05PX1NIT1JUX0ZMT0FUX1JFUFIKLQogLyogVGhlIGZhbGxiYWNrIGNvZGUgdG8gdXNlIGlmIF9QeV9kZ19kdG9hIGlzIG5vdCBhdmFpbGFibGUuICovCiAKIFB5QVBJX0ZVTkMoY2hhciAqKSBQeU9TX2RvdWJsZV90b19zdHJpbmcoZG91YmxlIHZhbCwKZGlmZiAtLWdpdCBhL1B5dGhvbi9weXRob25ydW4uYyBiL1B5dGhvbi9weXRob25ydW4uYwppbmRleCBjNmNmMDg4Li5mYWFmNTRhIDEwMDY0NAotLS0gYS9QeXRob24vcHl0aG9ucnVuLmMKKysrIGIvUHl0aG9uL3B5dGhvbnJ1bi5jCkBAIC0xMSwxNCArMTEsMTAgQEAKICNpbmNsdWRlICJwYXJzZXRvay5oIgogI2luY2x1ZGUgImVycmNvZGUuaCIKICNpbmNsdWRlICJjb2RlLmgiCi0jaW5jbHVkZSAiY29tcGlsZS5oIgogI2luY2x1ZGUgInN5bXRhYmxlLmgiCi0jaW5jbHVkZSAicHlhcmVuYS5oIgogI2luY2x1ZGUgImFzdC5oIgotI2luY2x1ZGUgImV2YWwuaCIKICNpbmNsdWRlICJtYXJzaGFsLmgiCiAjaW5jbHVkZSAib3NkZWZzLmgiCi0jaW5jbHVkZSAiYWJzdHJhY3QuaCIKIAogI2lmZGVmIEhBVkVfU0lHTkFMX0gKICNpbmNsdWRlIDxzaWduYWwuaD4KQEAgLTU3LDYgKzUzLDcgQEAKIAogLyogRm9yd2FyZCAqLwogc3RhdGljIHZvaWQgaW5pdG1haW4odm9pZCk7CitzdGF0aWMgaW50IGluaXRmc2VuY29kaW5nKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKTsKIHN0YXRpYyB2b2lkIGluaXRzaXRlKHZvaWQpOwogc3RhdGljIGludCBpbml0c3RkaW8odm9pZCk7CiBzdGF0aWMgdm9pZCBmbHVzaF9pbyh2b2lkKTsKQEAgLTgxLDYgKzc4LDcgQEAKIAogaW50IFB5X0RlYnVnRmxhZzsgLyogTmVlZGVkIGJ5IHBhcnNlci5jICovCiBpbnQgUHlfVmVyYm9zZUZsYWc7IC8qIE5lZWRlZCBieSBpbXBvcnQuYyAqLworaW50IFB5X1F1aWV0RmxhZzsgLyogTmVlZGVkIGJ5IHN5c21vZHVsZS5jICovCiBpbnQgUHlfSW50ZXJhY3RpdmVGbGFnOyAvKiBOZWVkZWQgYnkgUHlfRmRJc0ludGVyYWN0aXZlKCkgYmVsb3cgKi8KIGludCBQeV9JbnNwZWN0RmxhZzsgLyogTmVlZGVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGV4aXQgYXQgU3lzdGVtRXJyb3IgKi8KIGludCBQeV9Ob1NpdGVGbGFnOyAvKiBTdXBwcmVzcyAnaW1wb3J0IHNpdGUnICovCkBAIC0xMzMsMTggKzEzMSwxMyBAQAogICAgIHJldHVybiBmbGFnOwogfQogCi0jaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoQ09ERVNFVCkKIHN0YXRpYyBjaGFyKgotZ2V0X2NvZGVzZXQodm9pZCkKK2dldF9jb2RlY19uYW1lKGNvbnN0IGNoYXIgKmVuY29kaW5nKQogewotICAgIGNoYXIqIGNvZGVzZXQ7Ci0gICAgUHlPYmplY3QgKmNvZGVjLCAqbmFtZTsKKyAgICBjaGFyICpuYW1lX3V0ZjgsICpuYW1lX3N0cjsKKyAgICBQeU9iamVjdCAqY29kZWMsICpuYW1lID0gTlVMTDsKIAotICAgIGNvZGVzZXQgPSBubF9sYW5naW5mbyhDT0RFU0VUKTsKLSAgICBpZiAoIWNvZGVzZXQgfHwgY29kZXNldFswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGNvZGVzZXQpOworICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKICAgICBpZiAoIWNvZGVjKQogICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0xNTMsMTUgKzE0NiwzNCBAQAogICAgIGlmICghbmFtZSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIGNvZGVzZXQgPSBzdHJkdXAoX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKSk7CisgICAgbmFtZV91dGY4ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lKTsKKyAgICBpZiAobmFtZV91dGY4ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgbmFtZV9zdHIgPSBzdHJkdXAobmFtZV91dGY4KTsKICAgICBQeV9ERUNSRUYobmFtZSk7Ci0gICAgcmV0dXJuIGNvZGVzZXQ7CisgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBuYW1lX3N0cjsKIAogZXJyb3I6CiAgICAgUHlfWERFQ1JFRihjb2RlYyk7Ci0gICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiBOVUxMOwogfQorCisjaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoQ09ERVNFVCkKK3N0YXRpYyBjaGFyKgorZ2V0X2NvZGVzZXQodm9pZCkKK3sKKyAgICBjaGFyKiBjb2Rlc2V0ID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7CisgICAgaWYgKCFjb2Rlc2V0IHx8IGNvZGVzZXRbMF0gPT0gJ1wwJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNPREVTRVQgaXMgbm90IHNldCBvciBlbXB0eSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGdldF9jb2RlY19uYW1lKGNvZGVzZXQpOworfQogI2VuZGlmCiAKIHZvaWQKQEAgLTE3MSwxNiArMTgzLDEzIEBACiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlOwogICAgIFB5T2JqZWN0ICpiaW1vZCwgKnN5c21vZCwgKnBzdGRlcnI7CiAgICAgY2hhciAqcDsKLSNpZiBkZWZpbmVkKEhBVkVfTEFOR0lORk9fSCkgJiYgZGVmaW5lZChDT0RFU0VUKQotICAgIGNoYXIgKmNvZGVzZXQ7Ci0jZW5kaWYKICAgICBleHRlcm4gdm9pZCBfUHlfUmVhZHlUeXBlcyh2b2lkKTsKIAogICAgIGlmIChpbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogICAgIGluaXRpYWxpemVkID0gMTsKIAotI2lmZGVmIEhBVkVfU0VUTE9DQUxFCisjaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoSEFWRV9TRVRMT0NBTEUpCiAgICAgLyogU2V0IHVwIHRoZSBMQ19DVFlQRSBsb2NhbGUsIHNvIHdlIGNhbiBvYnRhaW4KICAgICAgICB0aGUgbG9jYWxlJ3MgY2hhcnNldCB3aXRob3V0IGhhdmluZyB0byBzd2l0Y2gKICAgICAgICBsb2NhbGVzLiAqLwpAQCAtMjA1LDYgKzIxNCwxOCBAQAogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBtYWtlIGZpcnN0IHRocmVhZCIpOwogICAgICh2b2lkKSBQeVRocmVhZFN0YXRlX1N3YXAodHN0YXRlKTsKIAorI2lmZGVmIFdJVEhfVEhSRUFECisgICAgLyogV2UgY2FuJ3QgY2FsbCBfUHlFdmFsX0ZpbmlUaHJlYWRzKCkgaW4gUHlfRmluYWxpemUgYmVjYXVzZQorICAgICAgIGRlc3Ryb3lpbmcgdGhlIEdJTCBtaWdodCBmYWlsIHdoZW4gaXQgaXMgYmVpbmcgcmVmZXJlbmNlZCBmcm9tCisgICAgICAgYW5vdGhlciBydW5uaW5nIHRocmVhZCAoc2VlIGlzc3VlICM5OTAxKS4KKyAgICAgICBJbnN0ZWFkIHdlIGRlc3Ryb3kgdGhlIHByZXZpb3VzbHkgY3JlYXRlZCBHSUwgaGVyZSwgd2hpY2ggZW5zdXJlcworICAgICAgIHRoYXQgd2UgY2FuIGNhbGwgUHlfSW5pdGlhbGl6ZSAvIFB5X0ZpbmFsaXplIG11bHRpcGxlIHRpbWVzLiAqLworICAgIF9QeUV2YWxfRmluaVRocmVhZHMoKTsKKworICAgIC8qIEF1dG8tdGhyZWFkLXN0YXRlIEFQSSAqLworICAgIF9QeUdJTFN0YXRlX0luaXQoaW50ZXJwLCB0c3RhdGUpOworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKICAgICBfUHlfUmVhZHlUeXBlcygpOwogCiAgICAgaWYgKCFfUHlGcmFtZV9Jbml0KCkpCkBAIC0yMzEsNyArMjUyLDcgQEAKICAgICBiaW1vZCA9IF9QeUJ1aWx0aW5fSW5pdCgpOwogICAgIGlmIChiaW1vZCA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIGJ1aWx0aW5zIG1vZHVsZXMiKTsKLSAgICBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb24oYmltb2QsICJidWlsdGlucyIsICJidWlsdGlucyIpOworICAgIF9QeUltcG9ydF9GaXh1cEJ1aWx0aW4oYmltb2QsICJidWlsdGlucyIpOwogICAgIGludGVycC0+YnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJpbW9kKTsKICAgICBpZiAoaW50ZXJwLT5idWlsdGlucyA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIGJ1aWx0aW5zIGRpY3QiKTsKQEAgLTI0Nyw3ICsyNjgsNyBAQAogICAgIGlmIChpbnRlcnAtPnN5c2RpY3QgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzeXMgZGljdCIpOwogICAgIFB5X0lOQ1JFRihpbnRlcnAtPnN5c2RpY3QpOwotICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbihzeXNtb2QsICJzeXMiLCAic3lzIik7CisgICAgX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihzeXNtb2QsICJzeXMiKTsKICAgICBQeVN5c19TZXRQYXRoKFB5X0dldFBhdGgoKSk7CiAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoaW50ZXJwLT5zeXNkaWN0LCAibW9kdWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJwLT5tb2R1bGVzKTsKQEAgLTI2OCw0MiArMjg5LDI4IEBACiAgICAgLyogSW5pdGlhbGl6ZSBfd2FybmluZ3MuICovCiAgICAgX1B5V2FybmluZ3NfSW5pdCgpOwogCi0jaWYgZGVmaW5lZChIQVZFX0xBTkdJTkZPX0gpICYmIGRlZmluZWQoQ09ERVNFVCkKLSAgICAvKiBPbiBVbml4LCBzZXQgdGhlIGZpbGUgc3lzdGVtIGVuY29kaW5nIGFjY29yZGluZyB0byB0aGUKLSAgICAgICB1c2VyJ3MgcHJlZmVyZW5jZSwgaWYgdGhlIENPREVTRVQgbmFtZXMgYSB3ZWxsLWtub3duCi0gICAgICAgUHl0aG9uIGNvZGVjLCBhbmQgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBpc24ndAotICAgICAgIGluaXRpYWxpemVkIGJ5IG90aGVyIG1lYW5zLiBBbHNvIHNldCB0aGUgZW5jb2Rpbmcgb2YKLSAgICAgICBzdGRpbiBhbmQgc3Rkb3V0IGlmIHRoZXNlIGFyZSB0ZXJtaW5hbHMuICAqLworICAgIF9QeVRpbWVfSW5pdCgpOwogCi0gICAgY29kZXNldCA9IGdldF9jb2Rlc2V0KCk7Ci0gICAgaWYgKGNvZGVzZXQpIHsKLSAgICAgICAgaWYgKCFQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKQotICAgICAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IGNvZGVzZXQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZyZWUoY29kZXNldCk7Ci0gICAgfQotI2VuZGlmCisgICAgaWYgKGluaXRmc2VuY29kaW5nKGludGVycCkgPCAwKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiB1bmFibGUgdG8gbG9hZCB0aGUgZmlsZSBzeXN0ZW0gY29kZWMiKTsKIAogICAgIGlmIChpbnN0YWxsX3NpZ3MpCiAgICAgICAgIGluaXRzaWdzKCk7IC8qIFNpZ25hbCBoYW5kbGluZyBzdHVmZiwgaW5jbHVkaW5nIGluaXRpbnRyKCkgKi8KIAotICAgIC8qIEluaXRpYWxpemUgd2FybmluZ3MuICovCi0gICAgaWYgKFB5U3lzX0hhc1dhcm5PcHRpb25zKCkpIHsKLSAgICAgICAgUHlPYmplY3QgKndhcm5pbmdzX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgid2FybmluZ3MiKTsKLSAgICAgICAgaWYgKCF3YXJuaW5nc19tb2R1bGUpCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBQeV9YREVDUkVGKHdhcm5pbmdzX21vZHVsZSk7Ci0gICAgfQotCiAgICAgaW5pdG1haW4oKTsgLyogTW9kdWxlIF9fbWFpbl9fICovCiAgICAgaWYgKGluaXRzdGRpbygpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN5cyBzdGFuZGFyZCBzdHJlYW1zIik7CiAKLSAgICAvKiBhdXRvLXRocmVhZC1zdGF0ZSBBUEksIGlmIGF2YWlsYWJsZSAqLwotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgX1B5R0lMU3RhdGVfSW5pdChpbnRlcnAsIHRzdGF0ZSk7Ci0jZW5kaWYgLyogV0lUSF9USFJFQUQgKi8KKyAgICAvKiBJbml0aWFsaXplIHdhcm5pbmdzLiAqLworICAgIGlmIChQeVN5c19IYXNXYXJuT3B0aW9ucygpKSB7CisgICAgICAgIFB5T2JqZWN0ICp3YXJuaW5nc19tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoIndhcm5pbmdzIik7CisgICAgICAgIGlmICh3YXJuaW5nc19tb2R1bGUgPT0gTlVMTCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICInaW1wb3J0IHdhcm5pbmdzJyBmYWlsZWQ7IHRyYWNlYmFjazpcbiIpOworICAgICAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgfQorICAgICAgICBQeV9YREVDUkVGKHdhcm5pbmdzX21vZHVsZSk7CisgICAgfQogCiAgICAgaWYgKCFQeV9Ob1NpdGVGbGFnKQogICAgICAgICBpbml0c2l0ZSgpOyAvKiBNb2R1bGUgc2l0ZSAqLwpAQCAtNDE2LDYgKzQyMyw5IEBACiAgICAgd2hpbGUgKFB5R0NfQ29sbGVjdCgpID4gMCkKICAgICAgICAgLyogbm90aGluZyAqLzsKICNlbmRpZgorICAgIC8qIFdlIHJ1biB0aGlzIHdoaWxlIG1vc3QgaW50ZXJwcmV0ZXIgc3RhdGUgaXMgc3RpbGwgYWxpdmUsIHNvIHRoYXQKKyAgICAgICBkZWJ1ZyBpbmZvcm1hdGlvbiBjYW4gYmUgcHJpbnRlZCBvdXQgKi8KKyAgICBfUHlHQ19GaW5pKCk7CiAKICAgICAvKiBEZXN0cm95IGFsbCBtb2R1bGVzICovCiAgICAgUHlJbXBvcnRfQ2xlYW51cCgpOwpAQCAtNDk5LDcgKzUwOSw3IEBACiAgICAgX1B5VW5pY29kZV9GaW5pKCk7CiAKICAgICAvKiByZXNldCBmaWxlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nICovCi0gICAgaWYgKCFQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nKSB7CisgICAgaWYgKCFQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nICYmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpIHsKICAgICAgICAgZnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CiAgICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSBOVUxMOwogICAgIH0KQEAgLTU2OCw3ICs1NzgsNyBAQAogICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKICAgICBpbnRlcnAtPm1vZHVsZXNfcmVsb2FkaW5nID0gUHlEaWN0X05ldygpOwogCi0gICAgYmltb2QgPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbigiYnVpbHRpbnMiLCAiYnVpbHRpbnMiKTsKKyAgICBiaW1vZCA9IF9QeUltcG9ydF9GaW5kQnVpbHRpbigiYnVpbHRpbnMiKTsKICAgICBpZiAoYmltb2QgIT0gTlVMTCkgewogICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zID0gUHlNb2R1bGVfR2V0RGljdChiaW1vZCk7CiAgICAgICAgIGlmIChpbnRlcnAtPmJ1aWx0aW5zID09IE5VTEwpCkBAIC01NzksNyArNTg5LDcgQEAKICAgICAvKiBpbml0aWFsaXplIGJ1aWx0aW4gZXhjZXB0aW9ucyAqLwogICAgIF9QeUV4Y19Jbml0KCk7CiAKLSAgICBzeXNtb2QgPSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbigic3lzIiwgInN5cyIpOworICAgIHN5c21vZCA9IF9QeUltcG9ydF9GaW5kQnVpbHRpbigic3lzIik7CiAgICAgaWYgKGJpbW9kICE9IE5VTEwgJiYgc3lzbW9kICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnBzdGRlcnI7CiAgICAgICAgIGludGVycC0+c3lzZGljdCA9IFB5TW9kdWxlX0dldERpY3Qoc3lzbW9kKTsKQEAgLTU5OSw2ICs2MDksMTAgQEAKICAgICAgICAgUHlfREVDUkVGKHBzdGRlcnIpOwogCiAgICAgICAgIF9QeUltcG9ydEhvb2tzX0luaXQoKTsKKworICAgICAgICBpZiAoaW5pdGZzZW5jb2RpbmcoaW50ZXJwKSA8IDApCisgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKwogICAgICAgICBpZiAoaW5pdHN0ZGlvKCkgPCAwKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHN5cyBzdGFuZGFyZCBzdHJlYW1zIik7CkBAIC02MTMsNyArNjI3LDcgQEAKIGhhbmRsZV9lcnJvcjoKICAgICAvKiBPb3BzLCBpdCBkaWRuJ3Qgd29yay4gIFVuZG8gaXQgYWxsLiAqLwogCi0gICAgUHlFcnJfUHJpbnQoKTsKKyAgICBQeUVycl9QcmludEV4KDApOwogICAgIFB5VGhyZWFkU3RhdGVfQ2xlYXIodHN0YXRlKTsKICAgICBQeVRocmVhZFN0YXRlX1N3YXAoc2F2ZV90c3RhdGUpOwogICAgIFB5VGhyZWFkU3RhdGVfRGVsZXRlKHRzdGF0ZSk7CkBAIC03MTEsMzAgKzcyNSw1MyBAQAogICAgIH0KIH0KIAorc3RhdGljIGludAoraW5pdGZzZW5jb2RpbmcoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCit7CisgICAgUHlPYmplY3QgKmNvZGVjOworI2lmIGRlZmluZWQoSEFWRV9MQU5HSU5GT19IKSAmJiBkZWZpbmVkKENPREVTRVQpCisgICAgY2hhciAqY29kZXNldCA9IE5VTEw7CisKKyAgICBpZiAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIC8qIE9uIFVuaXgsIHNldCB0aGUgZmlsZSBzeXN0ZW0gZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHRoZQorICAgICAgICAgICB1c2VyJ3MgcHJlZmVyZW5jZSwgaWYgdGhlIENPREVTRVQgbmFtZXMgYSB3ZWxsLWtub3duCisgICAgICAgICAgIFB5dGhvbiBjb2RlYywgYW5kIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgaXNuJ3QKKyAgICAgICAgICAgaW5pdGlhbGl6ZWQgYnkgb3RoZXIgbWVhbnMuICovCisgICAgICAgIGNvZGVzZXQgPSBnZXRfY29kZXNldCgpOworICAgICAgICBpZiAoY29kZXNldCA9PSBOVUxMKQorICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogVW5hYmxlIHRvIGdldCB0aGUgbG9jYWxlIGVuY29kaW5nIik7CisKKyAgICAgICAgUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyA9IGNvZGVzZXQ7CisgICAgICAgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOworICAgICAgICBpbnRlcnAtPmZzY29kZWNfaW5pdGlhbGl6ZWQgPSAxOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIHRoZSBlbmNvZGluZyBpcyBtYmNzLCB1dGYtOCBvciBhc2NpaSAqLworICAgIGNvZGVjID0gX1B5Q29kZWNfTG9va3VwKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOworICAgIGlmICghY29kZWMpIHsKKyAgICAgICAgLyogU3VjaCBlcnJvciBjYW4gb25seSBvY2N1cnMgaW4gY3JpdGljYWwgc2l0dWF0aW9uczogbm8gbW9yZQorICAgICAgICAgKiBtZW1vcnksIGltcG9ydCBhIG1vZHVsZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSBmYWlsZWQsCisgICAgICAgICAqIGV0Yy4gKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQeV9ERUNSRUYoY29kZWMpOworICAgIGludGVycC0+ZnNjb2RlY19pbml0aWFsaXplZCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKIC8qIEltcG9ydCB0aGUgc2l0ZSBtb2R1bGUgKG5vdCBpbnRvIF9fbWFpbl9fIHRob3VnaCkgKi8KIAogc3RhdGljIHZvaWQKIGluaXRzaXRlKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpmOworICAgIFB5T2JqZWN0ICptOwogICAgIG0gPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInNpdGUiKTsKICAgICBpZiAobSA9PSBOVUxMKSB7Ci0gICAgICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgICAgICBpZiAoZiA9PSBOVUxMIHx8IGYgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwotICAgICAgICAgICAgUHlFcnJfRmV0Y2goJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoCi0gICAgICAgICAgICAgICAgIidpbXBvcnQgc2l0ZScgZmFpbGVkOyB0cmFjZWJhY2s6XG4iLCBmKTsKLSAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRyYWNlYmFjayk7Ci0gICAgICAgICAgICBQeUVycl9QcmludCgpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygKLSAgICAgICAgICAgICAgIidpbXBvcnQgc2l0ZScgZmFpbGVkOyB1c2UgLXYgZm9yIHRyYWNlYmFja1xuIiwgZik7Ci0gICAgICAgIH0KKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgUHlfRmluYWxpemUoKTsKKyAgICAgICAgZXhpdCgxKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0RFQ1JFRihtKTsKQEAgLTc0OCw2ICs3ODUsNyBAQAogewogICAgIFB5T2JqZWN0ICpidWYgPSBOVUxMLCAqc3RyZWFtID0gTlVMTCwgKnRleHQgPSBOVUxMLCAqcmF3ID0gTlVMTCwgKnJlczsKICAgICBjb25zdCBjaGFyKiBtb2RlOworICAgIGNvbnN0IGNoYXIqIG5ld2xpbmU7CiAgICAgUHlPYmplY3QgKmxpbmVfYnVmZmVyaW5nOwogICAgIGludCBidWZmZXJpbmcsIGlzYXR0eTsKIApAQCAtNzk4LDkgKzgzNiwxNyBAQAogICAgIFB5X0NMRUFSKHJhdyk7CiAgICAgUHlfQ0xFQVIodGV4dCk7CiAKKyAgICBuZXdsaW5lID0gIlxuIjsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCF3cml0ZV9tb2RlKSB7CisgICAgICAgIC8qIHRyYW5zbGF0ZSBcclxuIHRvIFxuIGZvciBzeXMuc3RkaW4gb24gV2luZG93cyAqLworICAgICAgICBuZXdsaW5lID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKwogICAgIHN0cmVhbSA9IFB5T2JqZWN0X0NhbGxNZXRob2QoaW8sICJUZXh0SU9XcmFwcGVyIiwgIk9zc3NPIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgZW5jb2RpbmcsIGVycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbiIsIGxpbmVfYnVmZmVyaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmUsIGxpbmVfYnVmZmVyaW5nKTsKICAgICBQeV9DTEVBUihidWYpOwogICAgIGlmIChzdHJlYW0gPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTg2MCw4ICs5MDYsMTAgQEAKIAogICAgIC8qIFNldCBidWlsdGlucy5vcGVuICovCiAgICAgaWYgKFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoYmltb2QsICJvcGVuIiwgd3JhcHBlcikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHdyYXBwZXIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBQeV9ERUNSRUYod3JhcHBlcik7CiAKICAgICBlbmNvZGluZyA9IFB5X0dFVEVOVigiUFlUSE9OSU9FTkNPRElORyIpOwogICAgIGVycm9ycyA9IE5VTEw7CkBAIC0xMDU2LDIyICsxMTA0LDM0IEBACiAgICAgICAgIGlmICghb2VuYykKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZW5jID0gX1B5VW5pY29kZV9Bc1N0cmluZyhvZW5jKTsKKyAgICAgICAgaWYgKGVuYyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICB2ID0gUHlTeXNfR2V0T2JqZWN0KCJwczEiKTsKICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgIHYgPSBQeU9iamVjdF9TdHIodik7CiAgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodikpCisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2KSkgewogICAgICAgICAgICAgcHMxID0gX1B5VW5pY29kZV9Bc1N0cmluZyh2KTsKKyAgICAgICAgICAgIGlmIChwczEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgcHMxID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgdyA9IFB5U3lzX0dldE9iamVjdCgicHMyIik7CiAgICAgaWYgKHcgIT0gTlVMTCkgewogICAgICAgICB3ID0gUHlPYmplY3RfU3RyKHcpOwogICAgICAgICBpZiAodyA9PSBOVUxMKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHcpKQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2sodykpIHsKICAgICAgICAgICAgIHBzMiA9IF9QeVVuaWNvZGVfQXNTdHJpbmcodyk7CisgICAgICAgICAgICBpZiAocHMyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHBzMiA9ICIiOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKICAgICBpZiAoYXJlbmEgPT0gTlVMTCkgewpAQCAtMTE1OCw3ICsxMjE4LDggQEAKIHsKICAgICBQeU9iamVjdCAqbSwgKmQsICp2OwogICAgIGNvbnN0IGNoYXIgKmV4dDsKLSAgICBpbnQgc2V0X2ZpbGVfbmFtZSA9IDAsIHJldCwgbGVuOworICAgIGludCBzZXRfZmlsZV9uYW1lID0gMCwgcmV0OworICAgIHNpemVfdCBsZW47CiAKICAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOwogICAgIGlmIChtID09IE5VTEwpCkBAIC0xMTczLDYgKzEyMzQsOCBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGYpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19jYWNoZWRfXyIsIFB5X05vbmUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgc2V0X2ZpbGVfbmFtZSA9IDE7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICB9CkBAIC0xMzU5LDEwICsxNDIyLDEyIEBACiAgICAgICAgIGV4aXRjb2RlID0gKGludClQeUxvbmdfQXNMb25nKHZhbHVlKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKnN5c19zdGRlcnIgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOwotICAgICAgICBpZiAoc3lzX3N0ZGVyciAhPSBOVUxMKQotICAgICAgICAgICAgUHlPYmplY3RfQ2FsbE1ldGhvZChzeXNfc3RkZXJyLCAiZmx1c2giLCBOVUxMKTsKLSAgICAgICAgUHlPYmplY3RfUHJpbnQodmFsdWUsIHN0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgIGlmIChzeXNfc3RkZXJyICE9IE5VTEwgJiYgc3lzX3N0ZGVyciAhPSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodmFsdWUsIHN5c19zdGRlcnIsIFB5X1BSSU5UX1JBVyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdF9QcmludCh2YWx1ZSwgc3RkZXJyLCBQeV9QUklOVF9SQVcpOworICAgICAgICAgICAgZmZsdXNoKHN0ZGVycik7CisgICAgICAgIH0KICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIlxuIik7CiAgICAgICAgIGV4aXRjb2RlID0gMTsKICAgICB9CkBAIC0xNzA4LDcgKzE3NzMsNyBAQAogICAgIGNvID0gUHlBU1RfQ29tcGlsZShtb2QsIGZpbGVuYW1lLCBmbGFncywgYXJlbmEpOwogICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKGNvLCBnbG9iYWxzLCBsb2NhbHMpOworICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgbG9jYWxzKTsKICAgICBQeV9ERUNSRUYoY28pOwogICAgIHJldHVybiB2OwogfQpAQCAtMTczOCw3ICsxODAzLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGNvID0gKFB5Q29kZU9iamVjdCAqKXY7Ci0gICAgdiA9IFB5RXZhbF9FdmFsQ29kZShjbywgZ2xvYmFscywgbG9jYWxzKTsKKyAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKChQeU9iamVjdCopY28sIGdsb2JhbHMsIGxvY2Fscyk7CiAgICAgaWYgKHYgJiYgZmxhZ3MpCiAgICAgICAgIGZsYWdzLT5jZl9mbGFncyB8PSAoY28tPmNvX2ZsYWdzICYgUHlDRl9NQVNLKTsKICAgICBQeV9ERUNSRUYoY28pOwpAQCAtMTc0Niw4ICsxODExLDggQEAKIH0KIAogUHlPYmplY3QgKgotUHlfQ29tcGlsZVN0cmluZ0ZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgbW9kX3R5IG1vZDsKQEAgLTE3NjUsMTEgKzE4MzAsMTkgQEAKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgY28gPSBQeUFTVF9Db21waWxlKG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopY287CiB9CiAKKy8qIEZvciB1c2UgaW4gUHlfTElNSVRFRF9BUEkgKi8KKyN1bmRlZiBQeV9Db21waWxlU3RyaW5nCitQeU9iamVjdCAqCitQeUNvbXBpbGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQoreworICAgIHJldHVybiBQeV9Db21waWxlU3RyaW5nRmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnQsIE5VTEwpOworfQorCiBzdHJ1Y3Qgc3ltdGFibGUgKgogUHlfU3ltdGFibGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogewpAQCAtMTkxMyw3ICsxOTg2LDcgQEAKIGVycl9pbnB1dChwZXJyZGV0YWlsICplcnIpCiB7CiAgICAgUHlPYmplY3QgKnYsICp3LCAqZXJydHlwZSwgKmVycnRleHQ7Ci0gICAgUHlPYmplY3QqIHUgPSBOVUxMOworICAgIFB5T2JqZWN0ICptc2dfb2JqID0gTlVMTDsKICAgICBQeU9iamVjdCAqZmlsZW5hbWU7CiAgICAgY2hhciAqbXNnID0gTlVMTDsKIApAQCAtMTk3MSwxNCArMjA0NCw5IEBACiAgICAgY2FzZSBFX0RFQ09ERTogewogICAgICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdGI7CiAgICAgICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0Yik7Ci0gICAgICAgIGlmICh2YWx1ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICB1ID0gUHlPYmplY3RfU3RyKHZhbHVlKTsKLSAgICAgICAgICAgIGlmICh1ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBtc2cgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHUpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChtc2cgPT0gTlVMTCkKLSAgICAgICAgICAgIG1zZyA9ICJ1bmtub3duIGRlY29kZSBlcnJvciI7CisgICAgICAgIG1zZyA9ICJ1bmtub3duIGRlY29kZSBlcnJvciI7CisgICAgICAgIGlmICh2YWx1ZSAhPSBOVUxMKQorICAgICAgICAgICAgbXNnX29iaiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7CiAgICAgICAgIFB5X1hERUNSRUYodHlwZSk7CiAgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgICAgICBQeV9YREVDUkVGKHRiKTsKQEAgLTIwMTYsMTQgKzIwODQsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLT5saW5lbm8sIGVyci0+b2Zmc2V0LCBlcnJ0ZXh0KTsKICAgICBlbHNlCiAgICAgICAgIHYgPSBOVUxMOwotICAgIHcgPSBOVUxMOwotICAgIGlmICh2ICE9IE5VTEwpCi0gICAgICAgIHcgPSBQeV9CdWlsZFZhbHVlKCIoc08pIiwgbXNnLCB2KTsKLSAgICBQeV9YREVDUkVGKHUpOworICAgIGlmICh2ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKG1zZ19vYmopCisgICAgICAgICAgICB3ID0gUHlfQnVpbGRWYWx1ZSgiKE9PKSIsIG1zZ19vYmosIHYpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB3ID0gUHlfQnVpbGRWYWx1ZSgiKHNPKSIsIG1zZywgdik7CisgICAgfSBlbHNlCisgICAgICAgIHcgPSBOVUxMOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlFcnJfU2V0T2JqZWN0KGVycnR5cGUsIHcpOwogICAgIFB5X1hERUNSRUYodyk7CiBjbGVhbnVwOgorICAgIFB5X1hERUNSRUYobXNnX29iaik7CiAgICAgaWYgKGVyci0+dGV4dCAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0X0ZSRUUoZXJyLT50ZXh0KTsKICAgICAgICAgZXJyLT50ZXh0ID0gTlVMTDsKQEAgLTIxNjAsNiArMjIzMiwyNyBAQAogfQogCiAKKy8qIFJlc3RvcmUgc2lnbmFscyB0aGF0IHRoZSBpbnRlcnByZXRlciBoYXMgY2FsbGVkIFNJR19JR04gb24gdG8gU0lHX0RGTC4KKyAqCisgKiBBbGwgb2YgdGhlIGNvZGUgaW4gdGhpcyBmdW5jdGlvbiBtdXN0IG9ubHkgdXNlIGFzeW5jLXNpZ25hbC1zYWZlIGZ1bmN0aW9ucywKKyAqIGxpc3RlZCBhdCBgbWFuIDcgc2lnbmFsYCBvcgorICogaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwuCisgKi8KK3ZvaWQKK19QeV9SZXN0b3JlU2lnbmFscyh2b2lkKQoreworI2lmZGVmIFNJR1BJUEUKKyAgICBQeU9TX3NldHNpZyhTSUdQSVBFLCBTSUdfREZMKTsKKyNlbmRpZgorI2lmZGVmIFNJR1hGWgorICAgIFB5T1Nfc2V0c2lnKFNJR1hGWiwgU0lHX0RGTCk7CisjZW5kaWYKKyNpZmRlZiBTSUdYRlNaCisgICAgUHlPU19zZXRzaWcoU0lHWEZTWiwgU0lHX0RGTCk7CisjZW5kaWYKK30KKworCiAvKgogICogVGhlIGZpbGUgZGVzY3JpcHRvciBmZCBpcyBjb25zaWRlcmVkIGBgaW50ZXJhY3RpdmUnJyBpZiBlaXRoZXIKICAqICAgYSkgaXNhdHR5KGZkKSBpcyBUUlVFLCBvcgpAQCAtMjI1Myw2ICsyMzQ2LDExIEBACiAjZW5kaWYKIH0KIAorLyoKKyAqIEFsbCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIG11c3Qgb25seSB1c2UgYXN5bmMtc2lnbmFsLXNhZmUgZnVuY3Rpb25zLAorICogbGlzdGVkIGF0IGBtYW4gNyBzaWduYWxgIG9yCisgKiBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbC4KKyAqLwogUHlPU19zaWdoYW5kbGVyX3QKIFB5T1Nfc2V0c2lnKGludCBzaWcsIFB5T1Nfc2lnaGFuZGxlcl90IGhhbmRsZXIpCiB7CkBAIC0yMzcwLDcgKzI0NjgsMTUgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikKIFB5X0NvbXBpbGVTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwLCBpbnQgcykKIHsKLSAgICByZXR1cm4gUHlfQ29tcGlsZVN0cmluZ0ZsYWdzKHN0ciwgcCwgcywgTlVMTCk7CisgICAgcmV0dXJuIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKHN0ciwgcCwgcywgTlVMTCwgLTEpOworfQorCisjdW5kZWYgUHlfQ29tcGlsZVN0cmluZ0ZsYWdzCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopCitQeV9Db21waWxlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwLCBpbnQgcywKKyAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQoreworICAgIHJldHVybiBQeV9Db21waWxlU3RyaW5nRXhGbGFncyhzdHIsIHAsIHMsIGZsYWdzLCAtMSk7CiB9CiAKICN1bmRlZiBQeVJ1bl9JbnRlcmFjdGl2ZU9uZQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGltZS5jIGIvUHl0aG9uL3B5dGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjc2OTUKLS0tIC9kZXYvbnVsbAorKysgYi9QeXRob24vcHl0aW1lLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgIlB5dGhvbi5oIgorCisjaWZkZWYgX19BUFBMRV9fCisjaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkgJiYgZGVmaW5lZChIQVZFX0ZUSU1FKQorICAvKgorICAgKiBfUHlUaW1lX2dldHRpbWVvZmRheSBmYWxscyBiYWNrIHRvIGZ0aW1lIHdoZW4gZ2V0dHRpbWVvZmRheSBmYWlscyBiZWNhdXNlIHRoZSBsYXR0ZXIKKyAgICogbWlnaHQgZmFpbCBvbiBzb21lIHBsYXRmb3Jtcy4gVGhpcyBmYWxsYmFjayBpcyB1bndhbnRlZCBvbiBNYWNPU1ggYmVjYXVzZQorICAgKiB0aGF0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gdXNlIGEgYmluYXJ5IGJ1aWxkIG9uIE9TWCAxMC40IG9uIGVhcmxpZXIKKyAgICogcmVsZWFzZXMgb2YgdGhlIE9TLiBUaGVyZWZvcmUgY2xhaW0gd2UgZG9uJ3Qgc3VwcG9ydCBmdGltZS4KKyAgICovCisjIHVuZGVmIEhBVkVfRlRJTUUKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0ZUSU1FCisjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisjaWYgIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoUFlPU19PUzIpCitleHRlcm4gaW50IGZ0aW1lKHN0cnVjdCB0aW1lYiAqKTsKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisjZW5kaWYgLyogSEFWRV9GVElNRSAqLworCit2b2lkCitfUHlUaW1lX2dldHRpbWVvZmRheShfUHlUaW1lX3RpbWV2YWwgKnRwKQoreworICAgIC8qIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGdldCB0aGUgdGltZToKKyAgICAgICgxKSBnZXR0aW1lb2ZkYXkoKSAtLSByZXNvbHV0aW9uIGluIG1pY3Jvc2Vjb25kcworICAgICAgKDIpIGZ0aW1lKCkgLS0gcmVzb2x1dGlvbiBpbiBtaWxsaXNlY29uZHMKKyAgICAgICgzKSB0aW1lKCkgLS0gcmVzb2x1dGlvbiBpbiBzZWNvbmRzCisgICAgICBJbiBhbGwgY2FzZXMgdGhlIHJldHVybiB2YWx1ZSBpbiBhIHRpbWV2YWwgc3RydWN0LgorICAgICAgU2luY2Ugb24gc29tZSBzeXN0ZW1zIChlLmcuIFNDTyBPRFQgMy4wKSBnZXR0aW1lb2ZkYXkoKSBtYXkKKyAgICAgIGZhaWwsIHNvIHdlIGZhbGwgYmFjayBvbiBmdGltZSgpIG9yIHRpbWUoKS4KKyAgICAgIE5vdGU6IGNsb2NrIHJlc29sdXRpb24gZG9lcyBub3QgaW1wbHkgY2xvY2sgYWNjdXJhY3khICovCisjaWZkZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyNpZmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFoKKyAgICBpZiAoZ2V0dGltZW9mZGF5KHRwKSA9PSAwKQorICAgICAgICByZXR1cm47CisjZWxzZSAvKiAhR0VUVElNRU9GREFZX05PX1RaICovCisgICAgaWYgKGdldHRpbWVvZmRheSh0cCwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpID09IDApCisgICAgICAgIHJldHVybjsKKyNlbmRpZiAvKiAhR0VUVElNRU9GREFZX05PX1RaICovCisjZW5kaWYgLyogIUhBVkVfR0VUVElNRU9GREFZICovCisjaWYgZGVmaW5lZChIQVZFX0ZUSU1FKQorICAgIHsKKyAgICAgICAgc3RydWN0IHRpbWViIHQ7CisgICAgICAgIGZ0aW1lKCZ0KTsKKyAgICAgICAgdHAtPnR2X3NlYyA9IHQudGltZTsKKyAgICAgICAgdHAtPnR2X3VzZWMgPSB0Lm1pbGxpdG0gKiAxMDAwOworICAgIH0KKyNlbHNlIC8qICFIQVZFX0ZUSU1FICovCisgICAgdHAtPnR2X3NlYyA9IHRpbWUoTlVMTCk7CisgICAgdHAtPnR2X3VzZWMgPSAwOworI2VuZGlmIC8qICFIQVZFX0ZUSU1FICovCisgICAgcmV0dXJuOworfQorCit2b2lkCitfUHlUaW1lX0luaXQoKQoreworICAgIC8qIERvIG5vdGhpbmcuICBOZWVkZWQgdG8gZm9yY2UgbGlua2luZy4gKi8KK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeW10YWJsZS5jIGIvUHl0aG9uL3N5bXRhYmxlLmMKaW5kZXggMzc2YWQyYy4uMTViYTZiNSAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5bXRhYmxlLmMKKysrIGIvUHl0aG9uL3N5bXRhYmxlLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAogc3RhdGljIFB5U1RFbnRyeU9iamVjdCAqCiBzdGVfbmV3KHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgX1B5X2Jsb2NrX3R5IGJsb2NrLAotICAgICAgICAgICAgICB2b2lkICprZXksIGludCBsaW5lbm8pCisgICAgICAgIHZvaWQgKmtleSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgUHlTVEVudHJ5T2JqZWN0ICpzdGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICprOwpAQCAtMzgsNyArMzgsNiBAQAogICAgICAgICBnb3RvIGZhaWw7CiAgICAgc3RlLT5zdGVfdGFibGUgPSBzdDsKICAgICBzdGUtPnN0ZV9pZCA9IGs7Ci0gICAgc3RlLT5zdGVfdG1wbmFtZSA9IDA7CiAKICAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKICAgICBQeV9JTkNSRUYobmFtZSk7CkBAIC02Niw5ICs2NSwxMCBAQAogICAgIHN0ZS0+c3RlX3ZhcmFyZ3MgPSAwOwogICAgIHN0ZS0+c3RlX3ZhcmtleXdvcmRzID0gMDsKICAgICBzdGUtPnN0ZV9vcHRfbGluZW5vID0gMDsKLSAgICBzdGUtPnN0ZV90bXBuYW1lID0gMDsKKyAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCA9IDA7CiAgICAgc3RlLT5zdGVfdG1wbmFtZSA9IDA7CiAgICAgc3RlLT5zdGVfbGluZW5vID0gbGluZW5vOworICAgIHN0ZS0+c3RlX2NvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OwogCiAgICAgaWYgKHN0LT5zdF9jdXIgIT0gTlVMTCAmJgogICAgICAgICAoc3QtPnN0X2N1ci0+c3RlX25lc3RlZCB8fApAQCAtMTY2LDcgKzE2Niw4IEBACiBzdGF0aWMgaW50IHN5bXRhYmxlX2FuYWx5emUoc3RydWN0IHN5bXRhYmxlICpzdCk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX3dhcm4oc3RydWN0IHN5bXRhYmxlICpzdCwgY2hhciAqbXNnLCBpbnQgbGluZW5vKTsKIHN0YXRpYyBpbnQgc3ltdGFibGVfZW50ZXJfYmxvY2soc3RydWN0IHN5bXRhYmxlICpzdCwgaWRlbnRpZmllciBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfYmxvY2tfdHkgYmxvY2ssIHZvaWQgKmFzdCwgaW50IGxpbmVubyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9ibG9ja190eSBibG9jaywgdm9pZCAqYXN0LCBpbnQgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sX29mZnNldCk7CiBzdGF0aWMgaW50IHN5bXRhYmxlX2V4aXRfYmxvY2soc3RydWN0IHN5bXRhYmxlICpzdCwgdm9pZCAqYXN0KTsKIHN0YXRpYyBpbnQgc3ltdGFibGVfdmlzaXRfc3RtdChzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBzdG10X3R5IHMpOwogc3RhdGljIGludCBzeW10YWJsZV92aXNpdF9leHByKHN0cnVjdCBzeW10YWJsZSAqc3QsIGV4cHJfdHkgcyk7CkBAIC0yMzMsNyArMjM0LDcgQEAKICAgICBzdC0+c3RfZnV0dXJlID0gZnV0dXJlOwogICAgIC8qIE1ha2UgdGhlIGluaXRpYWwgc3ltYm9sIGluZm9ybWF0aW9uIGdhdGhlcmluZyBwYXNzICovCiAgICAgaWYgKCFHRVRfSURFTlRJRklFUih0b3ApIHx8Ci0gICAgICAgICFzeW10YWJsZV9lbnRlcl9ibG9jayhzdCwgdG9wLCBNb2R1bGVCbG9jaywgKHZvaWQgKiltb2QsIDApKSB7CisgICAgICAgICFzeW10YWJsZV9lbnRlcl9ibG9jayhzdCwgdG9wLCBNb2R1bGVCbG9jaywgKHZvaWQgKiltb2QsIDAsIDApKSB7CiAgICAgICAgIFB5U3ltdGFibGVfRnJlZShzdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTM5Myw4ICszOTQsOCBAQAogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgJyVVJyBpcyBwYXJhbWV0ZXIgYW5kIGdsb2JhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uKHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX2xpbmVubyk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KHN0ZS0+c3RlX3RhYmxlLT5zdF9maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfbGluZW5vLCBzdGUtPnN0ZV9jb2xfb2Zmc2V0KTsKIAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTUzNyw4ICs1MzgsOCBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBQeUVycl9TeW50YXhMb2NhdGlvbihzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2xpbmVubyk7CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsIHN0ZS0+c3RlX29wdF9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGUtPnN0ZV9vcHRfY29sX29mZnNldCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg3Niw4ICs4NzcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CiAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N5bnRheFdhcm5pbmcpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIG1zZyk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbihzdC0+c3RfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vKTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtOTEwLDcgKzkxMSw3IEBACiAKIHN0YXRpYyBpbnQKIHN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0cnVjdCBzeW10YWJsZSAqc3QsIGlkZW50aWZpZXIgbmFtZSwgX1B5X2Jsb2NrX3R5IGJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXN0LCBpbnQgbGluZW5vKQorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXN0LCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBQeVNURW50cnlPYmplY3QgKnByZXYgPSBOVUxMOwogCkBAIC05MjEsNyArOTIyLDcgQEAKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoc3QtPnN0X2N1cik7CiAgICAgfQotICAgIHN0LT5zdF9jdXIgPSBzdGVfbmV3KHN0LCBuYW1lLCBibG9jaywgYXN0LCBsaW5lbm8pOworICAgIHN0LT5zdF9jdXIgPSBzdGVfbmV3KHN0LCBuYW1lLCBibG9jaywgYXN0LCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgIGlmIChzdC0+c3RfY3VyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChibG9jayA9PSBNb2R1bGVCbG9jaykKQEAgLTk2Niw4ICs5NjcsOSBAQAogICAgICAgICBpZiAoKGZsYWcgJiBERUZfUEFSQU0pICYmICh2YWwgJiBERUZfUEFSQU0pKSB7CiAgICAgICAgICAgICAvKiBJcyBpdCBiZXR0ZXIgdG8gdXNlICdtYW5nbGVkJyBvciAnbmFtZScgaGVyZT8gKi8KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwgRFVQTElDQVRFX0FSR1VNRU5ULCBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uKHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vKTsKKyAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgICAgIHZhbCB8PSBmbGFnOwpAQCAtMTEwMCw3ICsxMTAyLDYgQEAKIH0KIAogCi0KIHN0YXRpYyBpbnQKIHN5bXRhYmxlX3Zpc2l0X3N0bXQoc3RydWN0IHN5bXRhYmxlICpzdCwgc3RtdF90eSBzKQogewpAQCAtMTExOCw3ICsxMTE5LDggQEAKICAgICAgICAgaWYgKHMtPnYuRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3QpCiAgICAgICAgICAgICBWSVNJVF9TRVEoc3QsIGV4cHIsIHMtPnYuRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3QpOwogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBzLT52LkZ1bmN0aW9uRGVmLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25CbG9jaywgKHZvaWQgKilzLCBzLT5saW5lbm8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopcywgcy0+bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFZJU0lUX0lOX0JMT0NLKHN0LCBhcmd1bWVudHMsIHMtPnYuRnVuY3Rpb25EZWYuYXJncywgcyk7CiAgICAgICAgIFZJU0lUX1NFUV9JTl9CTE9DSyhzdCwgc3RtdCwgcy0+di5GdW5jdGlvbkRlZi5ib2R5LCBzKTsKQEAgLTExMzgsNyArMTE0MCw3IEBACiAgICAgICAgIGlmIChzLT52LkNsYXNzRGVmLmRlY29yYXRvcl9saXN0KQogICAgICAgICAgICAgVklTSVRfU0VRKHN0LCBleHByLCBzLT52LkNsYXNzRGVmLmRlY29yYXRvcl9saXN0KTsKICAgICAgICAgaWYgKCFzeW10YWJsZV9lbnRlcl9ibG9jayhzdCwgcy0+di5DbGFzc0RlZi5uYW1lLCBDbGFzc0Jsb2NrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopcywgcy0+bGluZW5vKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXMsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pIHx8CiAgICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19jbGFzc19fLCBERUZfTE9DQUwpIHx8CkBAIC0xMTYyLDggKzExNjQsOSBAQAogICAgICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV9nZW5lcmF0b3IpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9WQUxfSU5fR0VORVJBVE9SKTsKLSAgICAgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbihzdC0+c3RfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmxpbmVubyk7CisgICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTIyNSwxNSArMTIyOCwxOSBAQAogICAgICAgICBWSVNJVF9TRVEoc3QsIGFsaWFzLCBzLT52LkltcG9ydC5uYW1lcyk7CiAgICAgICAgIC8qIFhYWCBEb24ndCBoYXZlIHRoZSBsaW5lbm8gYXZhaWxhYmxlIGluc2lkZQogICAgICAgICAgICB2aXNpdF9hbGlhcyAqLwotICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3Vub3B0aW1pemVkICYmICFzdC0+c3RfY3VyLT5zdGVfb3B0X2xpbmVubykKKyAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV91bm9wdGltaXplZCAmJiAhc3QtPnN0X2N1ci0+c3RlX29wdF9saW5lbm8pIHsKICAgICAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9vcHRfbGluZW5vID0gcy0+bGluZW5vOworICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX29wdF9jb2xfb2Zmc2V0ID0gcy0+Y29sX29mZnNldDsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEltcG9ydEZyb21fa2luZDoKICAgICAgICAgVklTSVRfU0VRKHN0LCBhbGlhcywgcy0+di5JbXBvcnRGcm9tLm5hbWVzKTsKICAgICAgICAgLyogWFhYIERvbid0IGhhdmUgdGhlIGxpbmVubyBhdmFpbGFibGUgaW5zaWRlCiAgICAgICAgICAgIHZpc2l0X2FsaWFzICovCi0gICAgICAgIGlmIChzdC0+c3RfY3VyLT5zdGVfdW5vcHRpbWl6ZWQgJiYgIXN0LT5zdF9jdXItPnN0ZV9vcHRfbGluZW5vKQorICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3Vub3B0aW1pemVkICYmICFzdC0+c3RfY3VyLT5zdGVfb3B0X2xpbmVubykgewogICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX29wdF9saW5lbm8gPSBzLT5saW5lbm87CisgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfb3B0X2NvbF9vZmZzZXQgPSBzLT5jb2xfb2Zmc2V0OworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2xvYmFsX2tpbmQ6IHsKICAgICAgICAgaW50IGk7CkBAIC0xMjk4LDEyICsxMzA1LDggQEAKICAgICAgICAgLyogbm90aGluZyB0byBkbyBoZXJlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2l0aF9raW5kOgotICAgICAgICBpZiAoIXN5bXRhYmxlX25ld190bXBuYW1lKHN0KSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBWSVNJVChzdCwgZXhwciwgcy0+di5XaXRoLmNvbnRleHRfZXhwcik7CiAgICAgICAgIGlmIChzLT52LldpdGgub3B0aW9uYWxfdmFycykgewotICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9uZXdfdG1wbmFtZShzdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBWSVNJVChzdCwgZXhwciwgcy0+di5XaXRoLm9wdGlvbmFsX3ZhcnMpOwogICAgICAgICB9CiAgICAgICAgIFZJU0lUX1NFUShzdCwgc3RtdCwgcy0+di5XaXRoLmJvZHkpOwpAQCAtMTMyNywxMyArMTMzMCwxMyBAQAogICAgICAgICBWSVNJVChzdCwgZXhwciwgZS0+di5VbmFyeU9wLm9wZXJhbmQpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIExhbWJkYV9raW5kOiB7Ci0gICAgICAgIGlmICghR0VUX0lERU5USUZJRVIobGFtYmRhKSB8fAotICAgICAgICAgICAgIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGxhbWJkYSwgREVGX0xPQ0FMKSkKKyAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihsYW1iZGEpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmIChlLT52LkxhbWJkYS5hcmdzLT5kZWZhdWx0cykKICAgICAgICAgICAgIFZJU0lUX1NFUShzdCwgZXhwciwgZS0+di5MYW1iZGEuYXJncy0+ZGVmYXVsdHMpOwogICAgICAgICBpZiAoIXN5bXRhYmxlX2VudGVyX2Jsb2NrKHN0LCBsYW1iZGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25CbG9jaywgKHZvaWQgKillLCBlLT5saW5lbm8pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopZSwgZS0+bGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPmNvbF9vZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIFZJU0lUX0lOX0JMT0NLKHN0LCBhcmd1bWVudHMsIGUtPnYuTGFtYmRhLmFyZ3MsICh2b2lkKillKTsKICAgICAgICAgVklTSVRfSU5fQkxPQ0soc3QsIGV4cHIsIGUtPnYuTGFtYmRhLmJvZHksICh2b2lkKillKTsKQEAgLTEzNzYsOCArMTM3OSw4IEBACiAgICAgICAgIGlmIChzdC0+c3RfY3VyLT5zdGVfcmV0dXJuc192YWx1ZSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgIFJFVFVSTl9WQUxfSU5fR0VORVJBVE9SKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uKHN0LT5zdF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBlLT5saW5lbm8pOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPmxpbmVubywgZS0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE1NDIsNyArMTU0NSw3IEBACiBzeW10YWJsZV92aXNpdF9hbGlhcyhzdHJ1Y3Qgc3ltdGFibGUgKnN0LCBhbGlhc190eSBhKQogewogICAgIC8qIENvbXB1dGUgc3RvcmVfbmFtZSwgdGhlIG5hbWUgYWN0dWFsbHkgYm91bmQgYnkgdGhlIGltcG9ydAotICAgICAgIG9wZXJhdGlvbi4gIEl0IGlzIGRpZmVyZW50IHRoYW4gYS0+bmFtZSB3aGVuIGEtPm5hbWUgaXMgYQorICAgICAgIG9wZXJhdGlvbi4gIEl0IGlzIGRpZmZlcmVudCB0aGFuIGEtPm5hbWUgd2hlbiBhLT5uYW1lIGlzIGEKICAgICAgICBkb3R0ZWQgcGFja2FnZSBuYW1lIChlLmcuIHNwYW0uZWdncykKICAgICAqLwogICAgIFB5T2JqZWN0ICpzdG9yZV9uYW1lOwpAQCAtMTU2Niw4ICsxNTY5LDkgQEAKICAgICBlbHNlIHsKICAgICAgICAgaWYgKHN0LT5zdF9jdXItPnN0ZV90eXBlICE9IE1vZHVsZUJsb2NrKSB7CiAgICAgICAgIGludCBsaW5lbm8gPSBzdC0+c3RfY3VyLT5zdGVfbGluZW5vOworICAgICAgICBpbnQgY29sX29mZnNldCA9IHN0LT5zdF9jdXItPnN0ZV9jb2xfb2Zmc2V0OwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIElNUE9SVF9TVEFSX1dBUk5JTkcpOwotICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbihzdC0+c3RfZmlsZW5hbWUsIGxpbmVubyk7CisgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBsaW5lbm8sIGNvbF9vZmZzZXQpOwogICAgICAgICBQeV9ERUNSRUYoc3RvcmVfbmFtZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xNjMxLDcgKzE2MzUsOCBAQAogICAgIFZJU0lUKHN0LCBleHByLCBvdXRlcm1vc3QtPml0ZXIpOwogICAgIC8qIENyZWF0ZSBjb21wcmVoZW5zaW9uIHNjb3BlIGZvciB0aGUgcmVzdCAqLwogICAgIGlmICghc2NvcGVfbmFtZSB8fAotICAgICAgICAhc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHNjb3BlX25hbWUsIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopZSwgZS0+bGluZW5vKSkgeworICAgICAgICAhc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHNjb3BlX25hbWUsIEZ1bmN0aW9uQmxvY2ssICh2b2lkICopZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUtPmxpbmVubywgZS0+Y29sX29mZnNldCkpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHN0LT5zdF9jdXItPnN0ZV9nZW5lcmF0b3IgPSBpc19nZW5lcmF0b3I7CmRpZmYgLS1naXQgYS9QeXRob24vc3lzbW9kdWxlLmMgYi9QeXRob24vc3lzbW9kdWxlLmMKaW5kZXggYzY4ODE3Mi4uNzNkYzBkZCAxMDA2NDQKLS0tIGEvUHl0aG9uL3N5c21vZHVsZS5jCisrKyBiL1B5dGhvbi9zeXNtb2R1bGUuYwpAQCAtMTUsMTAgKzE1LDggQEAKICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKLSNpbmNsdWRlICJzdHJ1Y3RzZXEuaCIKICNpbmNsdWRlICJjb2RlLmgiCiAjaW5jbHVkZSAiZnJhbWVvYmplY3QuaCIKLSNpbmNsdWRlICJldmFsLmgiCiAKICNpbmNsdWRlICJvc2RlZnMuaCIKIApAQCAtNjcsNiArNjUsNjggQEAKICAgICAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKHNkLCBuYW1lLCB2KTsKIH0KIAorLyogV3JpdGUgcmVwcihvKSB0byBzeXMuc3Rkb3V0IHVzaW5nIHN5cy5zdGRvdXQuZW5jb2RpbmcgYW5kICdiYWNrc2xhc2hyZXBsYWNlJworICAgZXJyb3IgaGFuZGxlci4gSWYgc3lzLnN0ZG91dCBoYXMgYSBidWZmZXIgYXR0cmlidXRlLCB1c2UKKyAgIHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKGVuY29kZWQpLCBvdGhlcndpc2UgcmVkZWNvZGUgdGhlIHN0cmluZyBhbmQgdXNlCisgICBzeXMuc3Rkb3V0LndyaXRlKHJlZGVjb2RlZCkuCisKKyAgIEhlbHBlciBmdW5jdGlvbiBmb3Igc3lzX2Rpc3BsYXlob29rKCkuICovCitzdGF0aWMgaW50CitzeXNfZGlzcGxheWhvb2tfdW5lbmNvZGFibGUoUHlPYmplY3QgKm91dGYsIFB5T2JqZWN0ICpvKQoreworICAgIFB5T2JqZWN0ICpzdGRvdXRfZW5jb2RpbmcgPSBOVUxMOworICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqZXNjYXBlZF9zdHIsICpyZXByX3N0ciwgKmJ1ZmZlciwgKnJlc3VsdDsKKyAgICBjaGFyICpzdGRvdXRfZW5jb2Rpbmdfc3RyOworICAgIGludCByZXQ7CisKKyAgICBzdGRvdXRfZW5jb2RpbmcgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKG91dGYsICJlbmNvZGluZyIpOworICAgIGlmIChzdGRvdXRfZW5jb2RpbmcgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBzdGRvdXRfZW5jb2Rpbmdfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyhzdGRvdXRfZW5jb2RpbmcpOworICAgIGlmIChzdGRvdXRfZW5jb2Rpbmdfc3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXByX3N0ciA9IFB5T2JqZWN0X1JlcHIobyk7CisgICAgaWYgKHJlcHJfc3RyID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgZW5jb2RlZCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcocmVwcl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0X2VuY29kaW5nX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFja3NsYXNocmVwbGFjZSIpOworICAgIFB5X0RFQ1JFRihyZXByX3N0cik7CisgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIGJ1ZmZlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcob3V0ZiwgImJ1ZmZlciIpOworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE1ldGhvZChidWZmZXIsICJ3cml0ZSIsICIoTykiLCBlbmNvZGVkKTsKKyAgICAgICAgUHlfREVDUkVGKGJ1ZmZlcik7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBlc2NhcGVkX3N0ciA9IFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChlbmNvZGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXRfZW5jb2Rpbmdfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RyaWN0Iik7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChlc2NhcGVkX3N0ciwgb3V0ZiwgUHlfUFJJTlRfUkFXKSAhPSAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXNjYXBlZF9zdHIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoZXNjYXBlZF9zdHIpOworICAgIH0KKyAgICByZXQgPSAwOworICAgIGdvdG8gZmluYWxseTsKKworZXJyb3I6CisgICAgcmV0ID0gLTE7CitmaW5hbGx5OgorICAgIFB5X1hERUNSRUYoc3Rkb3V0X2VuY29kaW5nKTsKKyAgICByZXR1cm4gcmV0OworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogc3lzX2Rpc3BsYXlob29rKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbykKIHsKQEAgLTc0LDYgKzEzNCw3IEBACiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CiAgICAgUHlPYmplY3QgKm1vZHVsZXMgPSBpbnRlcnAtPm1vZHVsZXM7CiAgICAgUHlPYmplY3QgKmJ1aWx0aW5zID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7CisgICAgaW50IGVycjsKIAogICAgIGlmIChidWlsdGlucyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IGJ1aWx0aW5zIG1vZHVsZSIpOwpAQCAtOTQsOCArMTU1LDE5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJsb3N0IHN5cy5zdGRvdXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChQeUZpbGVfV3JpdGVPYmplY3Qobywgb3V0ZiwgMCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChvLCBvdXRmLCAwKSAhPSAwKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKKyAgICAgICAgICAgIC8qIHJlcHIobykgaXMgbm90IGVuY29kYWJsZSB0byBzeXMuc3Rkb3V0LmVuY29kaW5nIHdpdGgKKyAgICAgICAgICAgICAqIHN5cy5zdGRvdXQuZXJyb3JzIGVycm9yIGhhbmRsZXIgKHdoaWNoIGlzIHByb2JhYmx5ICdzdHJpY3QnKSAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGVyciA9IHN5c19kaXNwbGF5aG9va191bmVuY29kYWJsZShvdXRmLCBvKTsKKyAgICAgICAgICAgIGlmIChlcnIpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIG91dGYpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKGJ1aWx0aW5zLCAiXyIsIG8pICE9IDApCkBAIC0xODMsMzAgKzI1NSwxMyBAQAogKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXN5c19zZXRkZWZhdWx0ZW5jb2RpbmcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGNoYXIgKmVuY29kaW5nOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpzZXRkZWZhdWx0ZW5jb2RpbmciLCAmZW5jb2RpbmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1NldERlZmF1bHRFbmNvZGluZyhlbmNvZGluZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLQotUHlEb2NfU1RSVkFSKHNldGRlZmF1bHRlbmNvZGluZ19kb2MsCi0ic2V0ZGVmYXVsdGVuY29kaW5nKGVuY29kaW5nKVxuXAotXG5cCi1TZXQgdGhlIGN1cnJlbnQgZGVmYXVsdCBzdHJpbmcgZW5jb2RpbmcgdXNlZCBieSB0aGUgVW5pY29kZSBpbXBsZW1lbnRhdGlvbi4iCi0pOwotCi1zdGF0aWMgUHlPYmplY3QgKgogc3lzX2dldGZpbGVzeXN0ZW1lbmNvZGluZyhQeU9iamVjdCAqc2VsZikKIHsKICAgICBpZiAoUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZykKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiZmlsZXN5c3RlbSBlbmNvZGluZyBpcyBub3QgaW5pdGlhbGl6ZWQiKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogUHlEb2NfU1RSVkFSKGdldGZpbGVzeXN0ZW1lbmNvZGluZ19kb2MsCkBAIC0yMTcsMjUgKzI3Miw2IEBACiApOwogCiBzdGF0aWMgUHlPYmplY3QgKgotc3lzX3NldGZpbGVzeXN0ZW1lbmNvZGluZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm5ld19lbmNvZGluZzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlU6c2V0ZmlsZXN5c3RlbWVuY29kaW5nIiwgJm5ld19lbmNvZGluZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfUHlfU2V0RmlsZVN5c3RlbUVuY29kaW5nKG5ld19lbmNvZGluZykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKLX0KLQotUHlEb2NfU1RSVkFSKHNldGZpbGVzeXN0ZW1lbmNvZGluZ19kb2MsCi0ic2V0ZmlsZXN5c3RlbWVuY29kaW5nKHN0cmluZykgLT4gTm9uZVxuXAotXG5cCi1TZXQgdGhlIGVuY29kaW5nIHVzZWQgdG8gY29udmVydCBVbmljb2RlIGZpbGVuYW1lcyBpblxuXAotb3BlcmF0aW5nIHN5c3RlbSBmaWxlbmFtZXMuIgotKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKIHN5c19pbnRlcm4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpzOwpAQCAtNDQ4LDEwICs0ODQsMTcgQEAKIFNlZSB0aGUgcHJvZmlsZXIgY2hhcHRlciBpbiB0aGUgbGlicmFyeSBtYW51YWwuIgogKTsKIAorc3RhdGljIGludCBfY2hlY2tfaW50ZXJ2YWwgPSAxMDA7CisKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfc2V0Y2hlY2tpbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldGNoZWNraW50ZXJ2YWwiLCAmX1B5X0NoZWNrSW50ZXJ2YWwpKQorICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgInN5cy5nZXRjaGVja2ludGVydmFsKCkgYW5kIHN5cy5zZXRjaGVja2ludGVydmFsKCkgIgorICAgICAgICAgICAgICAgICAgICAgImFyZSBkZXByZWNhdGVkLiAgVXNlIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbCgpICIKKyAgICAgICAgICAgICAgICAgICAgICJpbnN0ZWFkLiIsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOnNldGNoZWNraW50ZXJ2YWwiLCAmX2NoZWNrX2ludGVydmFsKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtNDY3LDEzICs1MTAsNTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0Y2hlY2tpbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhfUHlfQ2hlY2tJbnRlcnZhbCk7CisgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAic3lzLmdldGNoZWNraW50ZXJ2YWwoKSBhbmQgc3lzLnNldGNoZWNraW50ZXJ2YWwoKSAiCisgICAgICAgICAgICAgICAgICAgICAiYXJlIGRlcHJlY2F0ZWQuICBVc2Ugc3lzLmdldHN3aXRjaGludGVydmFsKCkgIgorICAgICAgICAgICAgICAgICAgICAgImluc3RlYWQuIiwgMSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKF9jaGVja19pbnRlcnZhbCk7CiB9CiAKIFB5RG9jX1NUUlZBUihnZXRjaGVja2ludGVydmFsX2RvYywKICJnZXRjaGVja2ludGVydmFsKCkgLT4gY3VycmVudCBjaGVjayBpbnRlcnZhbDsgc2VlIHNldGNoZWNraW50ZXJ2YWwoKS4iCiApOwogCisjaWZkZWYgV0lUSF9USFJFQUQKK3N0YXRpYyBQeU9iamVjdCAqCitzeXNfc2V0c3dpdGNoaW50ZXJ2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGRvdWJsZSBkOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZDpzZXRzd2l0Y2hpbnRlcnZhbCIsICZkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGQgPD0gMC4wKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInN3aXRjaCBpbnRlcnZhbCBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBfUHlFdmFsX1NldFN3aXRjaEludGVydmFsKCh1bnNpZ25lZCBsb25nKSAoMWU2ICogZCkpOworICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICByZXR1cm4gUHlfTm9uZTsKK30KKworUHlEb2NfU1RSVkFSKHNldHN3aXRjaGludGVydmFsX2RvYywKKyJzZXRzd2l0Y2hpbnRlcnZhbChuKVxuXAorXG5cCitTZXQgdGhlIGlkZWFsIHRocmVhZCBzd2l0Y2hpbmcgZGVsYXkgaW5zaWRlIHRoZSBQeXRob24gaW50ZXJwcmV0ZXJcblwKK1RoZSBhY3R1YWwgZnJlcXVlbmN5IG9mIHN3aXRjaGluZyB0aHJlYWRzIGNhbiBiZSBsb3dlciBpZiB0aGVcblwKK2ludGVycHJldGVyIGV4ZWN1dGVzIGxvbmcgc2VxdWVuY2VzIG9mIHVuaW50ZXJydXB0aWJsZSBjb2RlXG5cCisodGhpcyBpcyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyBhbmQgd29ya2xvYWQtZGVwZW5kZW50KS5cblwKK1xuXAorVGhlIHBhcmFtZXRlciBtdXN0IHJlcHJlc2VudCB0aGUgZGVzaXJlZCBzd2l0Y2hpbmcgZGVsYXkgaW4gc2Vjb25kc1xuXAorQSB0eXBpY2FsIHZhbHVlIGlzIDAuMDA1ICg1IG1pbGxpc2Vjb25kcykuIgorKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N5c19nZXRzd2l0Y2hpbnRlcnZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgcmV0dXJuIFB5RmxvYXRfRnJvbURvdWJsZSgxZS02ICogX1B5RXZhbF9HZXRTd2l0Y2hJbnRlcnZhbCgpKTsKK30KKworUHlEb2NfU1RSVkFSKGdldHN3aXRjaGludGVydmFsX2RvYywKKyJnZXRzd2l0Y2hpbnRlcnZhbCgpIC0+IGN1cnJlbnQgdGhyZWFkIHN3aXRjaCBpbnRlcnZhbDsgc2VlIHNldHN3aXRjaGludGVydmFsKCkuIgorKTsKKworI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCisKICNpZmRlZiBXSVRIX1RTQwogc3RhdGljIFB5T2JqZWN0ICoKIHN5c19zZXR0c2NkdW1wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTUxNyw2ICs2MDYsNTcgQEAKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAorc3RhdGljIFB5VHlwZU9iamVjdCBIYXNoX0luZm9UeXBlOworCitQeURvY19TVFJWQVIoaGFzaF9pbmZvX2RvYywKKyJoYXNoX2luZm9cblwKK1xuXAorQSBzdHJ1Y3Qgc2VxdWVuY2UgcHJvdmlkaW5nIHBhcmFtZXRlcnMgdXNlZCBmb3IgY29tcHV0aW5nXG5cCitudW1lcmljIGhhc2hlcy4gIFRoZSBhdHRyaWJ1dGVzIGFyZSByZWFkIG9ubHkuIik7CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0ZpZWxkIGhhc2hfaW5mb19maWVsZHNbXSA9IHsKKyAgICB7IndpZHRoIiwgIndpZHRoIG9mIHRoZSB0eXBlIHVzZWQgZm9yIGhhc2hpbmcsIGluIGJpdHMifSwKKyAgICB7Im1vZHVsdXMiLCAicHJpbWUgbnVtYmVyIGdpdmluZyB0aGUgbW9kdWx1cyBvbiB3aGljaCB0aGUgaGFzaCAiCisgICAgICAgICAgICAgICAgImZ1bmN0aW9uIGlzIGJhc2VkIn0sCisgICAgeyJpbmYiLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIHBvc2l0aXZlIGluZmluaXR5In0sCisgICAgeyJuYW4iLCAidmFsdWUgdG8gYmUgdXNlZCBmb3IgaGFzaCBvZiBhIG5hbiJ9LAorICAgIHsiaW1hZyIsICJtdWx0aXBsaWVyIHVzZWQgZm9yIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyIn0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIGhhc2hfaW5mb19kZXNjID0geworICAgICJzeXMuaGFzaF9pbmZvIiwKKyAgICBoYXNoX2luZm9fZG9jLAorICAgIGhhc2hfaW5mb19maWVsZHMsCisgICAgNSwKK307CisKK3N0YXRpYyBQeU9iamVjdCAqCitnZXRfaGFzaF9pbmZvKHZvaWQpCit7CisgICAgUHlPYmplY3QgKmhhc2hfaW5mbzsKKyAgICBpbnQgZmllbGQgPSAwOworICAgIGhhc2hfaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZIYXNoX0luZm9UeXBlKTsKKyAgICBpZiAoaGFzaF9pbmZvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDgqc2l6ZW9mKFB5X2hhc2hfdCkpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tU3NpemVfdChfUHlIQVNIX01PRFVMVVMpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhfUHlIQVNIX0lORikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfTkFOKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoX1B5SEFTSF9JTUFHKSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgUHlfQ0xFQVIoaGFzaF9pbmZvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBoYXNoX2luZm87Cit9CisKKwogUHlEb2NfU1RSVkFSKHNldHJlY3Vyc2lvbmxpbWl0X2RvYywKICJzZXRyZWN1cnNpb25saW1pdChuKVxuXAogXG5cCkBAIC01NDQsMjYgKzY4NCw2NSBAQAogUHlEb2NfU1RSVkFSKGdldHdpbmRvd3N2ZXJzaW9uX2RvYywKICJnZXR3aW5kb3dzdmVyc2lvbigpXG5cCiBcblwKLVJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVubmluZyB2ZXJzaW9uIG9mIFdpbmRvd3MuXG5cCi1UaGUgcmVzdWx0IGlzIGEgdHVwbGUgb2YgKG1ham9yLCBtaW5vciwgYnVpbGQsIHBsYXRmb3JtLCB0ZXh0KVxuXAotQWxsIGVsZW1lbnRzIGFyZSBudW1iZXJzLCBleGNlcHQgdGV4dCB3aGljaCBpcyBhIHN0cmluZy5cblwKLVBsYXRmb3JtIG1heSBiZSAwIGZvciB3aW4zMnMsIDEgZm9yIFdpbmRvd3MgOXgvTUUsIDIgZm9yIFdpbmRvd3MgTlQvMjAwMC9YUFxuXAotIgorUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBydW5uaW5nIHZlcnNpb24gb2YgV2luZG93cyBhcyBhIG5hbWVkIHR1cGxlLlxuXAorVGhlIG1lbWJlcnMgYXJlIG5hbWVkOiBtYWpvciwgbWlub3IsIGJ1aWxkLCBwbGF0Zm9ybSwgc2VydmljZV9wYWNrLFxuXAorc2VydmljZV9wYWNrX21ham9yLCBzZXJ2aWNlX3BhY2tfbWlub3IsIHN1aXRlX21hc2ssIGFuZCBwcm9kdWN0X3R5cGUuIEZvclxuXAorYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgb25seSB0aGUgZmlyc3QgNSBpdGVtcyBhcmUgYXZhaWxhYmxlIGJ5IGluZGV4aW5nLlxuXAorQWxsIGVsZW1lbnRzIGFyZSBudW1iZXJzLCBleGNlcHQgc2VydmljZV9wYWNrIHdoaWNoIGlzIGEgc3RyaW5nLiBQbGF0Zm9ybVxuXAorbWF5IGJlIDAgZm9yIHdpbjMycywgMSBmb3IgV2luZG93cyA5eC9NRSwgMiBmb3IgV2luZG93cyBOVC8yMDAwL1hQL1Zpc3RhLzcsXG5cCiszIGZvciBXaW5kb3dzIENFLiBQcm9kdWN0X3R5cGUgbWF5IGJlIDEgZm9yIGEgd29ya3N0YXRpb24sIDIgZm9yIGEgZG9tYWluXG5cCitjb250cm9sbGVyLCAzIGZvciBhIHNlcnZlci4iCiApOwogCitzdGF0aWMgUHlUeXBlT2JqZWN0IFdpbmRvd3NWZXJzaW9uVHlwZSA9IHswLCAwLCAwLCAwLCAwLCAwfTsKKworc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgd2luZG93c192ZXJzaW9uX2ZpZWxkc1tdID0geworICAgIHsibWFqb3IiLCAiTWFqb3IgdmVyc2lvbiBudW1iZXIifSwKKyAgICB7Im1pbm9yIiwgIk1pbm9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJidWlsZCIsICJCdWlsZCBudW1iZXIifSwKKyAgICB7InBsYXRmb3JtIiwgIk9wZXJhdGluZyBzeXN0ZW0gcGxhdGZvcm0ifSwKKyAgICB7InNlcnZpY2VfcGFjayIsICJMYXRlc3QgU2VydmljZSBQYWNrIGluc3RhbGxlZCBvbiB0aGUgc3lzdGVtIn0sCisgICAgeyJzZXJ2aWNlX3BhY2tfbWFqb3IiLCAiU2VydmljZSBQYWNrIG1ham9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJzZXJ2aWNlX3BhY2tfbWlub3IiLCAiU2VydmljZSBQYWNrIG1pbm9yIHZlcnNpb24gbnVtYmVyIn0sCisgICAgeyJzdWl0ZV9tYXNrIiwgIkJpdCBtYXNrIGlkZW50aWZ5aW5nIGF2YWlsYWJsZSBwcm9kdWN0IHN1aXRlcyJ9LAorICAgIHsicHJvZHVjdF90eXBlIiwgIlN5c3RlbSBwcm9kdWN0IHR5cGUifSwKKyAgICB7MH0KK307CisKK3N0YXRpYyBQeVN0cnVjdFNlcXVlbmNlX0Rlc2Mgd2luZG93c192ZXJzaW9uX2Rlc2MgPSB7CisgICAgInN5cy5nZXR3aW5kb3dzdmVyc2lvbiIsICAvKiBuYW1lICovCisgICAgZ2V0d2luZG93c3ZlcnNpb25fZG9jLCAgICAvKiBkb2MgKi8KKyAgICB3aW5kb3dzX3ZlcnNpb25fZmllbGRzLCAgIC8qIGZpZWxkcyAqLworICAgIDUgICAgICAgICAgICAgICAgICAgICAgICAgLyogRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IHRoZSBmaXJzdCA1IGl0ZW1zIGFyZSBhY2Nlc3NpYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWEgaW5kZXhpbmcsIHRoZSByZXN0IGFyZSBuYW1lIG9ubHkgKi8KK307CisKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0d2luZG93c3ZlcnNpb24oUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgT1NWRVJTSU9OSU5GTyB2ZXI7CisgICAgUHlPYmplY3QgKnZlcnNpb247CisgICAgaW50IHBvcyA9IDA7CisgICAgT1NWRVJTSU9OSU5GT0VYIHZlcjsKICAgICB2ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih2ZXIpOwotICAgIGlmICghR2V0VmVyc2lvbkV4KCZ2ZXIpKQorICAgIGlmICghR2V0VmVyc2lvbkV4KChPU1ZFUlNJT05JTkZPKikgJnZlcikpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiSEhISHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZlci5kd01ham9yVmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuZHdNaW5vclZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyLmR3QnVpbGROdW1iZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdmVyLmR3UGxhdGZvcm1JZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB2ZXIuc3pDU0RWZXJzaW9uKTsKKworICAgIHZlcnNpb24gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmV2luZG93c1ZlcnNpb25UeXBlKTsKKyAgICBpZiAodmVyc2lvbiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5TG9uZ19Gcm9tTG9uZyh2ZXIuZHdNYWpvclZlcnNpb24pKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeUxvbmdfRnJvbUxvbmcodmVyLmR3TWlub3JWZXJzaW9uKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlMb25nX0Zyb21Mb25nKHZlci5kd0J1aWxkTnVtYmVyKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlMb25nX0Zyb21Mb25nKHZlci5kd1BsYXRmb3JtSWQpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeVVuaWNvZGVfRnJvbVN0cmluZyh2ZXIuc3pDU0RWZXJzaW9uKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2ZXJzaW9uLCBwb3MrKywgUHlMb25nX0Zyb21Mb25nKHZlci53U2VydmljZVBhY2tNYWpvcikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odmVyc2lvbiwgcG9zKyssIFB5TG9uZ19Gcm9tTG9uZyh2ZXIud1NlcnZpY2VQYWNrTWlub3IpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeUxvbmdfRnJvbUxvbmcodmVyLndTdWl0ZU1hc2spKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHZlcnNpb24sIHBvcysrLCBQeUxvbmdfRnJvbUxvbmcodmVyLndQcm9kdWN0VHlwZSkpOworCisgICAgcmV0dXJuIHZlcnNpb247CiB9CiAKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCkBAIC04ODcsMTQgKzEwNjYsMTYgQEAKICNpZmRlZiBVU0VfTUFMTE9QVAogICAgIHsibWRlYnVnIiwgICAgICAgICAgc3lzX21kZWJ1ZywgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgotICAgIHsic2V0ZGVmYXVsdGVuY29kaW5nIiwgc3lzX3NldGRlZmF1bHRlbmNvZGluZywgTUVUSF9WQVJBUkdTLAotICAgICBzZXRkZWZhdWx0ZW5jb2RpbmdfZG9jfSwKLSAgICB7InNldGZpbGVzeXN0ZW1lbmNvZGluZyIsIHN5c19zZXRmaWxlc3lzdGVtZW5jb2RpbmcsIE1FVEhfVkFSQVJHUywKLSAgICAgc2V0ZmlsZXN5c3RlbWVuY29kaW5nX2RvY30sCiAgICAgeyJzZXRjaGVja2ludGVydmFsIiwgICAgICAgIHN5c19zZXRjaGVja2ludGVydmFsLCBNRVRIX1ZBUkFSR1MsCiAgICAgIHNldGNoZWNraW50ZXJ2YWxfZG9jfSwKICAgICB7ImdldGNoZWNraW50ZXJ2YWwiLCAgICAgICAgc3lzX2dldGNoZWNraW50ZXJ2YWwsIE1FVEhfTk9BUkdTLAogICAgICBnZXRjaGVja2ludGVydmFsX2RvY30sCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICB7InNldHN3aXRjaGludGVydmFsIiwgICAgICAgc3lzX3NldHN3aXRjaGludGVydmFsLCBNRVRIX1ZBUkFSR1MsCisgICAgIHNldHN3aXRjaGludGVydmFsX2RvY30sCisgICAgeyJnZXRzd2l0Y2hpbnRlcnZhbCIsICAgICAgIHN5c19nZXRzd2l0Y2hpbnRlcnZhbCwgTUVUSF9OT0FSR1MsCisgICAgIGdldHN3aXRjaGludGVydmFsX2RvY30sCisjZW5kaWYKICNpZmRlZiBIQVZFX0RMT1BFTgogICAgIHsic2V0ZGxvcGVuZmxhZ3MiLCBzeXNfc2V0ZGxvcGVuZmxhZ3MsIE1FVEhfVkFSQVJHUywKICAgICAgc2V0ZGxvcGVuZmxhZ3NfZG9jfSwKQEAgLTk1MCwyMSArMTEzMSwyNiBAQAogfQogCiB2b2lkCi1QeVN5c19BZGRXYXJuT3B0aW9uKGNvbnN0IHdjaGFyX3QgKnMpCitQeVN5c19BZGRXYXJuT3B0aW9uVW5pY29kZShQeU9iamVjdCAqdW5pY29kZSkKIHsKLSAgICBQeU9iamVjdCAqc3RyOwotCiAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwgfHwgIVB5TGlzdF9DaGVjayh3YXJub3B0aW9ucykpIHsKICAgICAgICAgUHlfWERFQ1JFRih3YXJub3B0aW9ucyk7CiAgICAgICAgIHdhcm5vcHRpb25zID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN0ciA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocywgLTEpOwotICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICBQeUxpc3RfQXBwZW5kKHdhcm5vcHRpb25zLCBzdHIpOwotICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICB9CisgICAgUHlMaXN0X0FwcGVuZCh3YXJub3B0aW9ucywgdW5pY29kZSk7Cit9CisKK3ZvaWQKK1B5U3lzX0FkZFdhcm5PcHRpb24oY29uc3Qgd2NoYXJfdCAqcykKK3sKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICB1bmljb2RlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihzLCAtMSk7CisgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlKHVuaWNvZGUpOworICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKIH0KIAogaW50CkBAIC05NzMsNiArMTE1OSw2MSBAQAogICAgIHJldHVybiAod2Fybm9wdGlvbnMgIT0gTlVMTCAmJiAoUHlMaXN0X1NpemUod2Fybm9wdGlvbnMpID4gMCkpID8gMSA6IDA7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqeG9wdGlvbnMgPSBOVUxMOworCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X3hvcHRpb25zKHZvaWQpCit7CisgICAgaWYgKHhvcHRpb25zID09IE5VTEwgfHwgIVB5RGljdF9DaGVjayh4b3B0aW9ucykpIHsKKyAgICAgICAgUHlfWERFQ1JFRih4b3B0aW9ucyk7CisgICAgICAgIHhvcHRpb25zID0gUHlEaWN0X05ldygpOworICAgIH0KKyAgICByZXR1cm4geG9wdGlvbnM7Cit9CisKK3ZvaWQKK1B5U3lzX0FkZFhPcHRpb24oY29uc3Qgd2NoYXJfdCAqcykKK3sKKyAgICBQeU9iamVjdCAqb3B0czsKKyAgICBQeU9iamVjdCAqbmFtZSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisgICAgY29uc3Qgd2NoYXJfdCAqbmFtZV9lbmQ7CisgICAgaW50IHI7CisKKyAgICBvcHRzID0gZ2V0X3hvcHRpb25zKCk7CisgICAgaWYgKG9wdHMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKworICAgIG5hbWVfZW5kID0gd2NzY2hyKHMsIEwnPScpOworICAgIGlmICghbmFtZV9lbmQpIHsKKyAgICAgICAgbmFtZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocywgLTEpOworICAgICAgICB2YWx1ZSA9IFB5X1RydWU7CisgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBuYW1lID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihzLCBuYW1lX2VuZCAtIHMpOworICAgICAgICB2YWx1ZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIobmFtZV9lbmQgKyAxLCAtMSk7CisgICAgfQorICAgIGlmIChuYW1lID09IE5VTEwgfHwgdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICByID0gUHlEaWN0X1NldEl0ZW0ob3B0cywgbmFtZSwgdmFsdWUpOworICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICBQeV9ERUNSRUYodmFsdWUpOworICAgIHJldHVybjsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihuYW1lKTsKKyAgICBQeV9YREVDUkVGKHZhbHVlKTsKKyAgICAvKiBObyByZXR1cm4gdmFsdWUsIHRoZXJlZm9yZSBjbGVhciBlcnJvciBzdGF0ZSBpZiBwb3NzaWJsZSAqLworICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCkpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7Cit9CisKK1B5T2JqZWN0ICoKK1B5U3lzX0dldFhPcHRpb25zKHZvaWQpCit7CisgICAgcmV0dXJuIGdldF94b3B0aW9ucygpOworfQorCiAvKiBYWFggVGhpcyBkb2Mgc3RyaW5nIGlzIHRvbyBsb25nIHRvIGJlIGEgc2luZ2xlIHN0cmluZyBsaXRlcmFsIGluIFZDKysgNS4wLgogICAgVHdvIGxpdGVyYWxzIGNvbmNhdGVuYXRlZCB3b3JrcyBqdXN0IGZpbmUuICBJZiB5b3UgaGF2ZSBhIEsmUiBjb21waWxlcgogICAgb3Igb3RoZXIgYWJvbWluYXRpb24gdGhhdCBob3dldmVyICpkb2VzKiB1bmRlcnN0YW5kIGxvbmdlciBzdHJpbmdzLApAQCAtMTEyNSw3ICsxMzY2LDggQEAKICNlbmRpZgogICAgIC8qIHsidW5idWZmZXJlZCIsICAgICAgICAgICAgICAgICAgICItdSJ9LCAqLwogICAgIC8qIHsic2tpcF9maXJzdCIsICAgICAgICAgICAgICAgICAgICIteCJ9LCAqLwotICAgIHsiYnl0ZXNfd2FybmluZyIsICItYiJ9LAorICAgIHsiYnl0ZXNfd2FybmluZyIsICAgICAgICAgICAiLWIifSwKKyAgICB7InF1aWV0IiwgICAgICAgICAgICAgICAgICAgIi1xIn0sCiAgICAgezB9CiB9OwogCkBAIC0xMTM0LDkgKzEzNzYsOSBAQAogICAgIGZsYWdzX19kb2NfXywgICAgICAgLyogZG9jICovCiAgICAgZmxhZ3NfZmllbGRzLCAgICAgICAvKiBmaWVsZHMgKi8KICNpZmRlZiBSSVNDT1MKLSAgICAxMgorICAgIDEzCiAjZWxzZQotICAgIDExCisgICAgMTIKICNlbmRpZgogfTsKIApAQCAtMTE2OSw2ICsxNDExLDcgQEAKICAgICAvKiBTZXRGbGFnKHNhd191bmJ1ZmZlcmVkX2ZsYWcpOyAqLwogICAgIC8qIFNldEZsYWcoc2tpcGZpcnN0bGluZSk7ICovCiAgICAgU2V0RmxhZyhQeV9CeXRlc1dhcm5pbmdGbGFnKTsKKyAgICBTZXRGbGFnKFB5X1F1aWV0RmxhZyk7CiAjdW5kZWYgU2V0RmxhZwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKQEAgLTEzMDQsNyArMTU0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKFBZX1ZFUlNJT05fSEVYKSk7CiAgICAgc3ZudmVyc2lvbl9pbml0KCk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygic3VidmVyc2lvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlKCIoVVVVKSIsICJDUHl0aG9uIiwgYnJhbmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlfQnVpbGRWYWx1ZSgiKHNzcykiLCAiQ1B5dGhvbiIsIGJyYW5jaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZuX3JldmlzaW9uKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiX21lcmN1cmlhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9CdWlsZFZhbHVlKCIoc3p6KSIsICJDUHl0aG9uIiwgX1B5X2hnaWRlbnRpZmllcigpLApAQCAtMTMzMCw2ICsxNTczLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeUZsb2F0X0dldEluZm8oKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiaW50X2luZm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0dldEluZm8oKSk7CisgICAgLyogaW5pdGlhbGl6ZSBoYXNoX2luZm8gKi8KKyAgICBpZiAoSGFzaF9JbmZvVHlwZS50cF9uYW1lID09IDApCisgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYyk7CisgICAgU0VUX1NZU19GUk9NX1NUUklORygiaGFzaF9pbmZvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldF9oYXNoX2luZm8oKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygibWF4dW5pY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoUHlVbmljb2RlX0dldE1heCgpKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnVpbHRpbl9tb2R1bGVfbmFtZXMiLApAQCAtMTM1NCw2ICsxNjAyLDEwIEBACiAgICAgU0VUX1NZU19GUk9NX1NUUklORygid2ludmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpKTsKICNlbmRpZgorI2lmZGVmIEFCSUZMQUdTCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYWJpZmxhZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21TdHJpbmcoQUJJRkxBR1MpKTsKKyNlbmRpZgogICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIHdhcm5vcHRpb25zID0gUHlMaXN0X05ldygwKTsKICAgICB9CkBAIC0xMzY0LDYgKzE2MTYsMTEgQEAKICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwogICAgIH0KIAorICAgIHYgPSBnZXRfeG9wdGlvbnMoKTsKKyAgICBpZiAodiAhPSBOVUxMKSB7CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfeG9wdGlvbnMiLCB2KTsKKyAgICB9CisKICAgICAvKiB2ZXJzaW9uX2luZm8gKi8KICAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gMCkKICAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVmVyc2lvbkluZm9UeXBlLCAmdmVyc2lvbl9pbmZvX2Rlc2MpOwpAQCAtMTM4MCw2ICsxNjM3LDE2IEBACiAgICAgRmxhZ3NUeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIEZsYWdzVHlwZS50cF9uZXcgPSBOVUxMOwogCisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgLyogZ2V0d2luZG93c3ZlcnNpb24gKi8KKyAgICBpZiAoV2luZG93c1ZlcnNpb25UeXBlLnRwX25hbWUgPT0gMCkKKyAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2luZG93c1ZlcnNpb25UeXBlLCAmd2luZG93c192ZXJzaW9uX2Rlc2MpOworICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KKyAgICBXaW5kb3dzVmVyc2lvblR5cGUudHBfaW5pdCA9IE5VTEw7CisgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX25ldyA9IE5VTEw7CisjZW5kaWYKKwogICAgIC8qIGZsb2F0IHJlcHIgc3R5bGU6IDAuMDMgKHNob3J0KSB2cyAwLjAyOTk5OTk5OTk5OTk5OTk5OSAobGVnYWN5KSAqLwogI2lmbmRlZiBQWV9OT19TSE9SVF9GTE9BVF9SRVBSCiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZmxvYXRfcmVwcl9zdHlsZSIsCkBAIC0xNDgwLDEzMCArMTc0NywxMjIgQEAKICAgICByZXR1cm4gYXY7CiB9CiAKLSNpZmRlZiBIQVZFX1JFQUxQQVRICi1zdGF0aWMgd2NoYXJfdCoKLV93cmVhbHBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCwgd2NoYXJfdCAqcmVzb2x2ZWRfcGF0aCkKLXsKLSAgICBjaGFyIGNwYXRoW1BBVEhfTUFYXTsKLSAgICBjaGFyIGNyZXNvbHZlZF9wYXRoW1BBVEhfTUFYXTsKLSAgICBjaGFyICpyZXM7Ci0gICAgc2l6ZV90IHI7Ci0gICAgciA9IHdjc3RvbWJzKGNwYXRoLCBwYXRoLCBQQVRIX01BWCk7Ci0gICAgaWYgKHIgPT0gKHNpemVfdCktMSB8fCByID49IFBBVEhfTUFYKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmVzID0gcmVhbHBhdGgoY3BhdGgsIGNyZXNvbHZlZF9wYXRoKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHIgPSBtYnN0b3djcyhyZXNvbHZlZF9wYXRoLCBjcmVzb2x2ZWRfcGF0aCwgUEFUSF9NQVgpOwotICAgIGlmIChyID09IChzaXplX3QpLTEgfHwgciA+PSBQQVRIX01BWCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwotfQotI2VuZGlmCisjZGVmaW5lIF9IQVZFX1NDUklQVF9BUkdVTUVOVChhcmdjLCBhcmd2KSBcCisgIChhcmdjID4gMCAmJiBhcmd2MCAhPSBOVUxMICYmIFwKKyAgIHdjc2NtcChhcmd2MCwgTCItYyIpICE9IDAgJiYgd2NzY21wKGFyZ3YwLCBMIi1tIikgIT0gMCkKIAotdm9pZAotUHlTeXNfU2V0QXJndkV4KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndiwgaW50IHVwZGF0ZXBhdGgpCitzdGF0aWMgdm9pZAorc3lzX3VwZGF0ZV9wYXRoKGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKKyAgICB3Y2hhcl90ICphcmd2MDsKKyAgICB3Y2hhcl90ICpwID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IG4gPSAwOworICAgIFB5T2JqZWN0ICphOworICAgIFB5T2JqZWN0ICpwYXRoOworI2lmZGVmIEhBVkVfUkVBRExJTksKKyAgICB3Y2hhcl90IGxpbmtbTUFYUEFUSExFTisxXTsKKyAgICB3Y2hhcl90IGFyZ3YwY29weVsyKk1BWFBBVEhMRU4rMV07CisgICAgaW50IG5yID0gMDsKKyNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9SRUFMUEFUSCkKICAgICB3Y2hhcl90IGZ1bGxwYXRoW01BWFBBVEhMRU5dOwogI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChNU19XSU5DRSkKICAgICB3Y2hhcl90IGZ1bGxwYXRoW01BWF9QQVRIXTsKICNlbmRpZgorCisgICAgcGF0aCA9IFB5U3lzX0dldE9iamVjdCgicGF0aCIpOworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIGFyZ3YwID0gYXJndlswXTsKKworI2lmZGVmIEhBVkVfUkVBRExJTksKKyAgICBpZiAoX0hBVkVfU0NSSVBUX0FSR1VNRU5UKGFyZ2MsIGFyZ3YpKQorICAgICAgICBuciA9IF9QeV93cmVhZGxpbmsoYXJndjAsIGxpbmssIE1BWFBBVEhMRU4pOworICAgIGlmIChuciA+IDApIHsKKyAgICAgICAgLyogSXQncyBhIHN5bWxpbmsgKi8KKyAgICAgICAgbGlua1tucl0gPSAnXDAnOworICAgICAgICBpZiAobGlua1swXSA9PSBTRVApCisgICAgICAgICAgICBhcmd2MCA9IGxpbms7IC8qIExpbmsgdG8gYWJzb2x1dGUgcGF0aCAqLworICAgICAgICBlbHNlIGlmICh3Y3NjaHIobGluaywgU0VQKSA9PSBOVUxMKQorICAgICAgICAgICAgOyAvKiBMaW5rIHdpdGhvdXQgcGF0aCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIE11c3Qgam9pbihkaXJuYW1lKGFyZ3YwKSwgbGluaykgKi8KKyAgICAgICAgICAgIHdjaGFyX3QgKnEgPSB3Y3NyY2hyKGFyZ3YwLCBTRVApOworICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBhcmd2MCA9IGxpbms7IC8qIGFyZ3YwIHdpdGhvdXQgcGF0aCAqLworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogTXVzdCBtYWtlIGEgY29weSAqLworICAgICAgICAgICAgICAgIHdjc2NweShhcmd2MGNvcHksIGFyZ3YwKTsKKyAgICAgICAgICAgICAgICBxID0gd2NzcmNocihhcmd2MGNvcHksIFNFUCk7CisgICAgICAgICAgICAgICAgd2NzY3B5KHErMSwgbGluayk7CisgICAgICAgICAgICAgICAgYXJndjAgPSBhcmd2MGNvcHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLyogSEFWRV9SRUFETElOSyAqLworI2lmIFNFUCA9PSAnXFwnIC8qIFNwZWNpYWwgY2FzZSBmb3IgTVMgZmlsZW5hbWUgc3ludGF4ICovCisgICAgaWYgKF9IQVZFX1NDUklQVF9BUkdVTUVOVChhcmdjLCBhcmd2KSkgeworICAgICAgICB3Y2hhcl90ICpxOworI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoTVNfV0lOQ0UpCisgICAgICAgIC8qIFRoaXMgY29kZSBoZXJlIHJlcGxhY2VzIHRoZSBmaXJzdCBlbGVtZW50IGluIGFyZ3Ygd2l0aCB0aGUgZnVsbAorICAgICAgICBwYXRoIHRoYXQgaXQgcmVwcmVzZW50cy4gVW5kZXIgQ0UsIHRoZXJlIGFyZSBubyByZWxhdGl2ZSBwYXRocyBzbworICAgICAgICB0aGUgYXJndW1lbnQgbXVzdCBiZSB0aGUgZnVsbCBwYXRoIGFueXdheS4gKi8KKyAgICAgICAgd2NoYXJfdCAqcHRlbXA7CisgICAgICAgIGlmIChHZXRGdWxsUGF0aE5hbWVXKGFyZ3YwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZ1bGxwYXRoKS9zaXplb2YoZnVsbHBhdGhbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHRlbXApKSB7CisgICAgICAgICAgICBhcmd2MCA9IGZ1bGxwYXRoOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgcCA9IHdjc3JjaHIoYXJndjAsIFNFUCk7CisgICAgICAgIC8qIFRlc3QgZm9yIGFsdGVybmF0ZSBzZXBhcmF0b3IgKi8KKyAgICAgICAgcSA9IHdjc3JjaHIocCA/IHAgOiBhcmd2MCwgJy8nKTsKKyAgICAgICAgaWYgKHEgIT0gTlVMTCkKKyAgICAgICAgICAgIHAgPSBxOworICAgICAgICBpZiAocCAhPSBOVUxMKSB7CisgICAgICAgICAgICBuID0gcCArIDEgLSBhcmd2MDsKKyAgICAgICAgICAgIGlmIChuID4gMSAmJiBwWy0xXSAhPSAnOicpCisgICAgICAgICAgICAgICAgbi0tOyAvKiBEcm9wIHRyYWlsaW5nIHNlcGFyYXRvciAqLworICAgICAgICB9CisgICAgfQorI2Vsc2UgLyogQWxsIG90aGVyIGZpbGVuYW1lIHN5bnRheGVzICovCisgICAgaWYgKF9IQVZFX1NDUklQVF9BUkdVTUVOVChhcmdjLCBhcmd2KSkgeworI2lmIGRlZmluZWQoSEFWRV9SRUFMUEFUSCkKKyAgICAgICAgaWYgKF9QeV93cmVhbHBhdGgoYXJndjAsIGZ1bGxwYXRoLCBQQVRIX01BWCkpIHsKKyAgICAgICAgICAgIGFyZ3YwID0gZnVsbHBhdGg7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBwID0gd2NzcmNocihhcmd2MCwgU0VQKTsKKyAgICB9CisgICAgaWYgKHAgIT0gTlVMTCkgeworICAgICAgICBuID0gcCArIDEgLSBhcmd2MDsKKyNpZiBTRVAgPT0gJy8nIC8qIFNwZWNpYWwgY2FzZSBmb3IgVW5peCBmaWxlbmFtZSBzeW50YXggKi8KKyAgICAgICAgaWYgKG4gPiAxKQorICAgICAgICAgICAgbi0tOyAvKiBEcm9wIHRyYWlsaW5nIHNlcGFyYXRvciAqLworI2VuZGlmIC8qIFVuaXggKi8KKyAgICB9CisjZW5kaWYgLyogQWxsIG90aGVycyAqLworICAgIGEgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKGFyZ3YwLCBuKTsKKyAgICBpZiAoYSA9PSBOVUxMKQorICAgICAgICBQeV9GYXRhbEVycm9yKCJubyBtZW0gZm9yIHN5cy5wYXRoIGluc2VydGlvbiIpOworICAgIGlmIChQeUxpc3RfSW5zZXJ0KHBhdGgsIDAsIGEpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigic3lzLnBhdGguaW5zZXJ0KDApIGZhaWxlZCIpOworICAgIFB5X0RFQ1JFRihhKTsKK30KKwordm9pZAorUHlTeXNfU2V0QXJndkV4KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndiwgaW50IHVwZGF0ZXBhdGgpCit7CiAgICAgUHlPYmplY3QgKmF2ID0gbWFrZWFyZ3ZvYmplY3QoYXJnYywgYXJndik7Ci0gICAgUHlPYmplY3QgKnBhdGggPSBQeVN5c19HZXRPYmplY3QoInBhdGgiKTsKICAgICBpZiAoYXYgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigibm8gbWVtIGZvciBzeXMuYXJndiIpOwogICAgIGlmIChQeVN5c19TZXRPYmplY3QoImFyZ3YiLCBhdikgIT0gMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2FuJ3QgYXNzaWduIHN5cy5hcmd2Iik7Ci0gICAgaWYgKHVwZGF0ZXBhdGggJiYgcGF0aCAhPSBOVUxMKSB7Ci0gICAgICAgIHdjaGFyX3QgKmFyZ3YwID0gYXJndlswXTsKLSAgICAgICAgd2NoYXJfdCAqcCA9IE5VTEw7Ci0gICAgICAgIFB5X3NzaXplX3QgbiA9IDA7Ci0gICAgICAgIFB5T2JqZWN0ICphOwotICAgICAgICBleHRlcm4gaW50IF9QeV93cmVhZGxpbmsoY29uc3Qgd2NoYXJfdCAqLCB3Y2hhcl90ICosIHNpemVfdCk7Ci0jaWZkZWYgSEFWRV9SRUFETElOSwotICAgICAgICB3Y2hhcl90IGxpbmtbTUFYUEFUSExFTisxXTsKLSAgICAgICAgd2NoYXJfdCBhcmd2MGNvcHlbMipNQVhQQVRITEVOKzFdOwotICAgICAgICBpbnQgbnIgPSAwOwotICAgICAgICBpZiAoYXJnYyA+IDAgJiYgYXJndjAgIT0gTlVMTCAmJiB3Y3NjbXAoYXJndjAsIEwiLWMiKSAhPSAwKQotICAgICAgICAgICAgbnIgPSBfUHlfd3JlYWRsaW5rKGFyZ3YwLCBsaW5rLCBNQVhQQVRITEVOKTsKLSAgICAgICAgaWYgKG5yID4gMCkgewotICAgICAgICAgICAgLyogSXQncyBhIHN5bWxpbmsgKi8KLSAgICAgICAgICAgIGxpbmtbbnJdID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChsaW5rWzBdID09IFNFUCkKLSAgICAgICAgICAgICAgICBhcmd2MCA9IGxpbms7IC8qIExpbmsgdG8gYWJzb2x1dGUgcGF0aCAqLwotICAgICAgICAgICAgZWxzZSBpZiAod2NzY2hyKGxpbmssIFNFUCkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICA7IC8qIExpbmsgd2l0aG91dCBwYXRoICovCi0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBNdXN0IGpvaW4oZGlybmFtZShhcmd2MCksIGxpbmspICovCi0gICAgICAgICAgICAgICAgd2NoYXJfdCAqcSA9IHdjc3JjaHIoYXJndjAsIFNFUCk7Ci0gICAgICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgYXJndjAgPSBsaW5rOyAvKiBhcmd2MCB3aXRob3V0IHBhdGggKi8KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLyogTXVzdCBtYWtlIGEgY29weSAqLwotICAgICAgICAgICAgICAgICAgICB3Y3NjcHkoYXJndjBjb3B5LCBhcmd2MCk7Ci0gICAgICAgICAgICAgICAgICAgIHEgPSB3Y3NyY2hyKGFyZ3YwY29weSwgU0VQKTsKLSAgICAgICAgICAgICAgICAgICAgd2NzY3B5KHErMSwgbGluayk7Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3YwID0gYXJndjBjb3B5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIEhBVkVfUkVBRExJTksgKi8KLSNpZiBTRVAgPT0gJ1xcJyAvKiBTcGVjaWFsIGNhc2UgZm9yIE1TIGZpbGVuYW1lIHN5bnRheCAqLwotICAgICAgICBpZiAoYXJnYyA+IDAgJiYgYXJndjAgIT0gTlVMTCAmJiB3Y3NjbXAoYXJndjAsIEwiLWMiKSAhPSAwKSB7Ci0gICAgICAgICAgICB3Y2hhcl90ICpxOwotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoTVNfV0lOQ0UpCi0gICAgICAgICAgICAvKiBUaGlzIGNvZGUgaGVyZSByZXBsYWNlcyB0aGUgZmlyc3QgZWxlbWVudCBpbiBhcmd2IHdpdGggdGhlIGZ1bGwKLSAgICAgICAgICAgIHBhdGggdGhhdCBpdCByZXByZXNlbnRzLiBVbmRlciBDRSwgdGhlcmUgYXJlIG5vIHJlbGF0aXZlIHBhdGhzIHNvCi0gICAgICAgICAgICB0aGUgYXJndW1lbnQgbXVzdCBiZSB0aGUgZnVsbCBwYXRoIGFueXdheS4gKi8KLSAgICAgICAgICAgIHdjaGFyX3QgKnB0ZW1wOwotICAgICAgICAgICAgaWYgKEdldEZ1bGxQYXRoTmFtZVcoYXJndjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGZ1bGxwYXRoKS9zaXplb2YoZnVsbHBhdGhbMF0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdGVtcCkpIHsKLSAgICAgICAgICAgICAgICBhcmd2MCA9IGZ1bGxwYXRoOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBwID0gd2NzcmNocihhcmd2MCwgU0VQKTsKLSAgICAgICAgICAgIC8qIFRlc3QgZm9yIGFsdGVybmF0ZSBzZXBhcmF0b3IgKi8KLSAgICAgICAgICAgIHEgPSB3Y3NyY2hyKHAgPyBwIDogYXJndjAsICcvJyk7Ci0gICAgICAgICAgICBpZiAocSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHAgPSBxOwotICAgICAgICAgICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG4gPSBwICsgMSAtIGFyZ3YwOwotICAgICAgICAgICAgICAgIGlmIChuID4gMSAmJiBwWy0xXSAhPSAnOicpCi0gICAgICAgICAgICAgICAgICAgIG4tLTsgLyogRHJvcCB0cmFpbGluZyBzZXBhcmF0b3IgKi8KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UgLyogQWxsIG90aGVyIGZpbGVuYW1lIHN5bnRheGVzICovCi0gICAgICAgIGlmIChhcmdjID4gMCAmJiBhcmd2MCAhPSBOVUxMICYmIHdjc2NtcChhcmd2MCwgTCItYyIpICE9IDApIHsKLSNpZiBkZWZpbmVkKEhBVkVfUkVBTFBBVEgpCi0gICAgICAgICAgICBpZiAoX3dyZWFscGF0aChhcmd2MCwgZnVsbHBhdGgpKSB7Ci0gICAgICAgICAgICAgICAgYXJndjAgPSBmdWxscGF0aDsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICAgICAgcCA9IHdjc3JjaHIoYXJndjAsIFNFUCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHAgIT0gTlVMTCkgewotICAgICAgICAgICAgbiA9IHAgKyAxIC0gYXJndjA7Ci0jaWYgU0VQID09ICcvJyAvKiBTcGVjaWFsIGNhc2UgZm9yIFVuaXggZmlsZW5hbWUgc3ludGF4ICovCi0gICAgICAgICAgICBpZiAobiA+IDEpCi0gICAgICAgICAgICAgICAgbi0tOyAvKiBEcm9wIHRyYWlsaW5nIHNlcGFyYXRvciAqLwotI2VuZGlmIC8qIFVuaXggKi8KLSAgICAgICAgfQotI2VuZGlmIC8qIEFsbCBvdGhlcnMgKi8KLSAgICAgICAgYSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoYXJndjAsIG4pOwotICAgICAgICBpZiAoYSA9PSBOVUxMKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigibm8gbWVtIGZvciBzeXMucGF0aCBpbnNlcnRpb24iKTsKLSAgICAgICAgaWYgKFB5TGlzdF9JbnNlcnQocGF0aCwgMCwgYSkgPCAwKQotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigic3lzLnBhdGguaW5zZXJ0KDApIGZhaWxlZCIpOwotICAgICAgICBQeV9ERUNSRUYoYSk7Ci0gICAgfQogICAgIFB5X0RFQ1JFRihhdik7CisgICAgaWYgKHVwZGF0ZXBhdGgpCisgICAgICAgIHN5c191cGRhdGVfcGF0aChhcmdjLCBhcmd2KTsKIH0KIAogdm9pZApAQCAtMTYxNiwxOCArMTg3NSwxNCBAQAogICAgUHlFcnJfQ2hlY2tTaWduYWxzKCk6IGF2b2lkIHRoZSBjYWxsIHRvIFB5T2JqZWN0X1N0cigpLiAqLwogCiBzdGF0aWMgaW50Ci1zeXNfcHlmaWxlX3dyaXRlKGNvbnN0IGNoYXIgKnRleHQsIFB5T2JqZWN0ICpmaWxlKQorc3lzX3B5ZmlsZV93cml0ZV91bmljb2RlKFB5T2JqZWN0ICp1bmljb2RlLCBQeU9iamVjdCAqZmlsZSkKIHsKLSAgICBQeU9iamVjdCAqdW5pY29kZSA9IE5VTEwsICp3cml0ZXIgPSBOVUxMLCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICp3cml0ZXIgPSBOVUxMLCAqYXJncyA9IE5VTEwsICpyZXN1bHQgPSBOVUxMOwogICAgIGludCBlcnI7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodGV4dCk7Ci0gICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQogICAgIHdyaXRlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoZmlsZSwgIndyaXRlIik7CiAgICAgaWYgKHdyaXRlciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTY0NywxMyArMTkwMiwyOSBAQAogZXJyb3I6CiAgICAgZXJyID0gLTE7CiBmaW5hbGx5OgotICAgIFB5X1hERUNSRUYodW5pY29kZSk7CiAgICAgUHlfWERFQ1JFRih3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoYXJncyk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQKK3N5c19weWZpbGVfd3JpdGUoY29uc3QgY2hhciAqdGV4dCwgUHlPYmplY3QgKmZpbGUpCit7CisgICAgUHlPYmplY3QgKnVuaWNvZGUgPSBOVUxMOworICAgIGludCBlcnI7CisKKyAgICBpZiAoZmlsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB1bmljb2RlID0gUHlVbmljb2RlX0Zyb21TdHJpbmcodGV4dCk7CisgICAgaWYgKHVuaWNvZGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgZXJyID0gc3lzX3B5ZmlsZV93cml0ZV91bmljb2RlKHVuaWNvZGUsIGZpbGUpOworICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICByZXR1cm4gZXJyOworfQogCiAvKiBBUElzIHRvIHdyaXRlIHRvIHN5cy5zdGRvdXQgb3Igc3lzLnN0ZGVyciB1c2luZyBhIHByaW50Zi1saWtlIGludGVyZmFjZS4KICAgIEFkYXB0ZWQgZnJvbSBjb2RlIHN1Ym1pdHRlZCBieSBKdXN0IHZhbiBSb3NzdW0uCkBAIC0xNjY2LDggKzE5MzcsOCBAQAogICAgICAgbm8gZXhjZXB0aW9ucyBhcmUgcmFpc2VkLgogCiAgICAgICBQeUVycl9DaGVja1NpZ25hbHMoKSBpcyBub3QgY2FsbGVkIHRvIGF2b2lkIHRoZSBleGVjdXRpb24gb2YgdGhlIFB5dGhvbgotICAgICAgc2lnbmFsIGhhbmRsZXJzOiB0aGV5IG1heSByYWlzZSBhIG5ldyBleGNlcHRpb24gd2hlcmVhcyBteXdyaXRlKCkgaWdub3JlcwotICAgICAgYWxsIGV4Y2VwdGlvbnMuCisgICAgICBzaWduYWwgaGFuZGxlcnM6IHRoZXkgbWF5IHJhaXNlIGEgbmV3IGV4Y2VwdGlvbiB3aGVyZWFzIHN5c193cml0ZSgpCisgICAgICBpZ25vcmVzIGFsbCBleGNlcHRpb25zLgogCiAgICAgICBCb3RoIHRha2UgYSBwcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZyBhcyB0aGVpciBmaXJzdCBhcmd1bWVudCBmb2xsb3dlZAogICAgICAgYnkgYSB2YXJpYWJsZSBsZW5ndGggYXJndW1lbnQgbGlzdCBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtYXQgc3RyaW5nLgpAQCAtMTY4NCw3ICsxOTU1LDcgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotbXl3cml0ZShjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX3dyaXRlKGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCiB7CiAgICAgUHlPYmplY3QgKmZpbGU7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKQEAgLTE3MDAsMTAgKzE5NzEsOCBAQAogICAgIH0KICAgICBpZiAod3JpdHRlbiA8IDAgfHwgKHNpemVfdCl3cml0dGVuID49IHNpemVvZihidWZmZXIpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIgKnRydW5jYXRlZCA9ICIuLi4gdHJ1bmNhdGVkIjsKLSAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGUodHJ1bmNhdGVkLCBmaWxlKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoc3lzX3B5ZmlsZV93cml0ZSh0cnVuY2F0ZWQsIGZpbGUpICE9IDApCiAgICAgICAgICAgICBmcHV0cyh0cnVuY2F0ZWQsIGZwKTsKLSAgICAgICAgfQogICAgIH0KICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwogfQpAQCAtMTcxNCw3ICsxOTgzLDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgbXl3cml0ZSgic3Rkb3V0Iiwgc3Rkb3V0LCBmb3JtYXQsIHZhKTsKKyAgICBzeXNfd3JpdGUoInN0ZG91dCIsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMTcyNCw2ICsxOTkzLDQ4IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIG15d3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCJzdGRlcnIiLCBzdGRlcnIsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7Cit9CisKK3N0YXRpYyB2b2lkCitzeXNfZm9ybWF0KGNoYXIgKm5hbWUsIEZJTEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmEpCit7CisgICAgUHlPYmplY3QgKmZpbGUsICptZXNzYWdlOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisgICAgY2hhciAqdXRmODsKKworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QobmFtZSk7CisgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlX3VuaWNvZGUobWVzc2FnZSwgZmlsZSkgIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHV0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG1lc3NhZ2UpOworICAgICAgICAgICAgaWYgKHV0ZjggIT0gTlVMTCkKKyAgICAgICAgICAgICAgICBmcHV0cyh1dGY4LCBmcCk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1lc3NhZ2UpOworICAgIH0KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworfQorCit2b2lkCitQeVN5c19Gb3JtYXRTdGRvdXQoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisgICAgdmFfbGlzdCB2YTsKKworICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOworICAgIHN5c19mb3JtYXQoInN0ZG91dCIsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKK30KKwordm9pZAorUHlTeXNfRm9ybWF0U3RkZXJyKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgdmE7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICBzeXNfZm9ybWF0KCJzdGRlcnIiLCBzdGRlcnIsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkLmMgYi9QeXRob24vdGhyZWFkLmMKaW5kZXggNGE5YjQzNi4uZDIyNDA0NiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZC5jCisrKyBiL1B5dGhvbi90aHJlYWQuYwpAQCAtMjMsMTIgKzIzLDYgQEAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaWZkZWYgX19zZ2kKLSNpZm5kZWYgSEFWRV9QVEhSRUFEX0ggLyogWFhYIE5lZWQgdG8gY2hlY2sgaW4gY29uZmlndXJlLmluICovCi0jdW5kZWYgX1BPU0lYX1RIUkVBRFMKLSNlbmRpZgotI2VuZGlmCi0KICNpbmNsdWRlICJweXRocmVhZC5oIgogCiAjaWZuZGVmIF9QT1NJWF9USFJFQURTCkBAIC0xMDEsNiArOTUsNyBAQAogc3RhdGljIHNpemVfdCBfcHl0aHJlYWRfc3RhY2tzaXplID0gMDsKIAogI2lmZGVmIFNHSV9USFJFQURTCisjZXJyb3IgU0dJIElyaXggdGhyZWFkcyBhcmUgbm93IHVuc3VwcG9ydGVkLCBhbmQgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gMy4zLgogI2luY2x1ZGUgInRocmVhZF9zZ2kuaCIKICNlbmRpZgogCkBAIC0xMDksMTAgKzEwNCwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBTVU5fTFdQCisjZXJyb3IgU3VuT1MgbGlnaHR3ZWlnaHQgcHJvY2Vzc2VzIGFyZSBub3cgdW5zdXBwb3J0ZWQsIGFuZCBjb2RlIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjMuCiAjaW5jbHVkZSAidGhyZWFkX2x3cC5oIgogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1BUSAorI2Vycm9yIEdOVSBwdGggdGhyZWFkcyBhcmUgbm93IHVuc3VwcG9ydGVkLCBhbmQgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gMy4zLgogI2luY2x1ZGUgInRocmVhZF9wdGguaCIKICN1bmRlZiBfUE9TSVhfVEhSRUFEUwogI2VuZGlmCkBAIC0xMjIsNiArMTE5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgQ19USFJFQURTCisjZXJyb3IgTWFjaCBDIFRocmVhZHMgYXJlIG5vdyB1bnN1cHBvcnRlZCwgYW5kIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIDMuMy4KICNpbmNsdWRlICJ0aHJlYWRfY3RocmVhZC5oIgogI2VuZGlmCiAKQEAgLTEzNywxMCArMTM1LDYgQEAKICNpbmNsdWRlICJ0aHJlYWRfcGxhbjkuaCIKICNlbmRpZgogCi0jaWZkZWYgQVRIRU9TX1RIUkVBRFMKLSNpbmNsdWRlICJ0aHJlYWRfYXRoZW9zLmgiCi0jZW5kaWYKLQogLyoKICNpZmRlZiBGT09CQVJfVEhSRUFEUwogI2luY2x1ZGUgInRocmVhZF9mb29iYXIuaCIKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfYXRoZW9zLmggYi9QeXRob24vdGhyZWFkX2F0aGVvcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzkwYjU3Li4wMDAwMDAwCi0tLSBhL1B5dGhvbi90aHJlYWRfYXRoZW9zLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMDAgKzAsMCBAQAotLyogVGhyZWFkaW5nIGZvciBBdGhlT1MuCi0gICBCYXNlZCBvbiB0aHJlYWRfYmVvcy5oLiAqLwotCi0jaW5jbHVkZSA8YXRoZW9zL3RocmVhZHMuaD4KLSNpbmNsdWRlIDxhdGhlb3Mvc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXRoZW9zL2F0b21pYy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIE1pc3NpbmcgZGVjbCBmcm9tIHRocmVhZHMuaCAqLwotZXh0ZXJuIGludCBleGl0X3RocmVhZChpbnQpOwotCi0KLS8qIFVuZGVmaW5lIEZBU1RMT0NLIHRvIHBsYXkgd2l0aCBzaW1wbGUgc2VtYXBob3Jlcy4gKi8KLSNkZWZpbmUgRkFTVExPQ0sKLQotCi0jaWZkZWYgRkFTVExPQ0sKLQotLyogVXNlIGFuIGF0b21pYyBjb3VudGVyIGFuZCBhIHNlbWFwaG9yZSBmb3IgbWF4aW11bSBzcGVlZC4gKi8KLXR5cGVkZWYgc3RydWN0IGZhc3RtdXRleCB7Ci0gICAgc2VtX2lkIHNlbTsKLSAgICBhdG9taWNfdCBjb3VudDsKLX0gZmFzdG11dGV4X3Q7Ci0KLQotc3RhdGljIGludCBmYXN0bXV0ZXhfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIGZhc3RtdXRleF90ICogbXV0ZXgpOwotc3RhdGljIGludCBmYXN0bXV0ZXhfZGVzdHJveShmYXN0bXV0ZXhfdCAqIG11dGV4KTsKLXN0YXRpYyBpbnQgZmFzdG11dGV4X2xvY2soZmFzdG11dGV4X3QgKiBtdXRleCk7Ci1zdGF0aWMgaW50IGZhc3RtdXRleF90aW1lZGxvY2soZmFzdG11dGV4X3QgKiBtdXRleCwgYmlndGltZV90IHRpbWVvdXQpOwotc3RhdGljIGludCBmYXN0bXV0ZXhfdW5sb2NrKGZhc3RtdXRleF90ICogbXV0ZXgpOwotCi0KLXN0YXRpYyBpbnQgZmFzdG11dGV4X2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBmYXN0bXV0ZXhfdCAqIG11dGV4KQotewotICAgIG11dGV4LT5jb3VudCA9IDA7Ci0gICAgbXV0ZXgtPnNlbSA9IGNyZWF0ZV9zZW1hcGhvcmUobmFtZSwgMCwgMCk7Ci0gICAgcmV0dXJuIChtdXRleC0+c2VtIDwgMCkgPyAtMSA6IDA7Ci19Ci0KLQotc3RhdGljIGludCBmYXN0bXV0ZXhfZGVzdHJveShmYXN0bXV0ZXhfdCAqIG11dGV4KQotewotICAgIGlmIChmYXN0bXV0ZXhfdGltZWRsb2NrKG11dGV4LCAwKSA9PSAwIHx8IGVycm5vID09IEVXT1VMREJMT0NLKSB7Ci0gICAgICAgIHJldHVybiBkZWxldGVfc2VtYXBob3JlKG11dGV4LT5zZW0pOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGZhc3RtdXRleF9sb2NrKGZhc3RtdXRleF90ICogbXV0ZXgpCi17Ci0gICAgYXRvbWljX3QgcHJldiA9IGF0b21pY19hZGQoJm11dGV4LT5jb3VudCwgMSk7Ci0gICAgaWYgKHByZXYgPiAwKQotICAgICAgICByZXR1cm4gbG9ja19zZW1hcGhvcmUobXV0ZXgtPnNlbSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBmYXN0bXV0ZXhfdGltZWRsb2NrKGZhc3RtdXRleF90ICogbXV0ZXgsIGJpZ3RpbWVfdCB0aW1lb3V0KQotewotICAgIGF0b21pY190IHByZXYgPSBhdG9taWNfYWRkKCZtdXRleC0+Y291bnQsIDEpOwotICAgIGlmIChwcmV2ID4gMCkKLSAgICAgICAgcmV0dXJuIGxvY2tfc2VtYXBob3JlX3gobXV0ZXgtPnNlbSwgMSwgMCwgdGltZW91dCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBmYXN0bXV0ZXhfdW5sb2NrKGZhc3RtdXRleF90ICogbXV0ZXgpCi17Ci0gICAgYXRvbWljX3QgcHJldiA9IGF0b21pY19hZGQoJm11dGV4LT5jb3VudCwgLTEpOwotICAgIGlmIChwcmV2ID4gMSkKLSAgICAgICAgcmV0dXJuIHVubG9ja19zZW1hcGhvcmUobXV0ZXgtPnNlbSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQVNUTE9DSyAqLwotCi0KLS8qCi0gKiBJbml0aWFsaXphdGlvbi4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQotewotICAgIC8qIERvIG5vdGhpbmcuICovCi0gICAgcmV0dXJuOwotfQotCi0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqCi0gKi8KLQotc3RhdGljIGF0b21pY190IHRocmVhZF9jb3VudCA9IDA7Ci0KLWxvbmcgUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykgKHZvaWQgKiksIHZvaWQgKmFyZykKLXsKLSAgICBzdGF0dXNfdCBzdWNjZXNzID0gLTE7Ci0gICAgdGhyZWFkX2lkIHRpZDsKLSAgICBjaGFyIG5hbWVbT1NfTkFNRV9MRU5HVEhdOwotICAgIGF0b21pY190IHRoaXNfdGhyZWFkOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQgY2FsbGVkXG4iKSk7Ci0KLSAgICB0aGlzX3RocmVhZCA9IGF0b21pY19hZGQoJnRocmVhZF9jb3VudCwgMSk7Ci0gICAgUHlPU19zbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJweXRob24gdGhyZWFkICglZCkiLCB0aGlzX3RocmVhZCk7Ci0KLSAgICB0aWQgPSBzcGF3bl90aHJlYWQobmFtZSwgZnVuYywgTk9STUFMX1BSSU9SSVRZLCAwLCBhcmcpOwotICAgIGlmICh0aWQgPCAwKSB7Ci0gICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIHNwYXduX3RocmVhZCBmYWlsZWQ6ICVzXG4iLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdWNjZXNzID0gcmVzdW1lX3RocmVhZCh0aWQpOwotICAgICAgICBpZiAoc3VjY2VzcyA8IDApIHsKLSAgICAgICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIHJlc3VtZV90aHJlYWQgZmFpbGVkOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gKHN1Y2Nlc3MgPCAwID8gLTEgOiB0aWQpOwotfQotCi0KLWxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKQotewotICAgIHJldHVybiBnZXRfdGhyZWFkX2lkKE5VTEwpOwotfQotCi0KLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLQotICAgIC8qIFRocmVhZC1zYWZlIHdheSB0byByZWFkIGEgdmFyaWFibGUgd2l0aG91dCBhIG11dGV4OiAqLwotICAgIGlmIChhdG9taWNfYWRkKCZ0aHJlYWRfY291bnQsIDApID09IDApIHsKLSAgICAgICAgLyogTm8gdGhyZWFkcyBhcm91bmQsIHNvIGV4aXQgbWFpbigpLiAqLwotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qIFdlJ3JlIGEgdGhyZWFkICovCi0gICAgICAgIGV4aXRfdGhyZWFkKDApOwotICAgIH0KLX0KLQotCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0KLSAgICAvKiBObyBuZWVkIHRvIGRvIGFueXRoaW5nLCB0aGUgdGhyZWFkcyBnZXQgdG9ybiBkb3duIGlmIG1haW4oKWV4aXRzLiAqLwotICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgZXhpdChzdGF0dXMpOwotfQotCi0KLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PX0VYSVRfUFJPRyAqLwotCi0KLS8qCi0gKiBMb2NrIHN1cHBvcnQuCi0gKgotICovCi0KLXN0YXRpYyBhdG9taWNfdCBsb2NrX2NvdW50ID0gMDsKLQotUHlUaHJlYWRfdHlwZV9sb2NrIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCkKLXsKLSNpZmRlZiBGQVNUTE9DSwotICAgIGZhc3RtdXRleF90ICpsb2NrOwotI2Vsc2UKLSAgICBzZW1faWQgc2VtYTsKLSNlbmRpZgotICAgIGNoYXIgbmFtZVtPU19OQU1FX0xFTkdUSF07Ci0gICAgYXRvbWljX3QgdGhpc19sb2NrOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgY2FsbGVkXG4iKSk7Ci0KLSNpZmRlZiBGQVNUTE9DSwotICAgIGxvY2sgPSAoZmFzdG11dGV4X3QgKikgbWFsbG9jKHNpemVvZihmYXN0bXV0ZXhfdCkpOwotICAgIGlmIChsb2NrID09IE5VTEwpIHsKLSAgICAgICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgZmFpbGVkOiBvdXQgb2YgbWVtb3J5XG4iKSk7Ci0gICAgICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBOVUxMOwotICAgIH0KLSNlbmRpZgotICAgIHRoaXNfbG9jayA9IGF0b21pY19hZGQoJmxvY2tfY291bnQsIDEpOwotICAgIFB5T1Nfc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicHl0aG9uIGxvY2sgKCVkKSIsIHRoaXNfbG9jayk7Ci0KLSNpZmRlZiBGQVNUTE9DSwotICAgIGlmIChmYXN0bXV0ZXhfY3JlYXRlKG5hbWUsIGxvY2spIDwgMCkgewotICAgICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgZnJlZShsb2NrKTsKLSAgICAgICAgbG9jayA9IE5VTEw7Ci0gICAgfQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCktPiAlcFxuIiwgbG9jaykpOwotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKSBsb2NrOwotI2Vsc2UKLSAgICBzZW1hID0gY3JlYXRlX3NlbWFwaG9yZShuYW1lLCAxLCAwKTsKLSAgICBpZiAoc2VtYSA8IDApIHsKLSAgICAgICAgZHByaW50ZigoIlB5VGhyZWFkX2FsbG9jYXRlX2xvY2sgZmFpbGVkOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIHNlbWEgPSAwOwotICAgIH0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpLT4gJXBcbiIsIHNlbWEpKTsKLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaykgc2VtYTsKLSNlbmRpZgotfQotCi0KLXZvaWQgUHlUaHJlYWRfZnJlZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9mcmVlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0jaWZkZWYgRkFTVExPQ0sKLSAgICBpZiAoZmFzdG11dGV4X2Rlc3Ryb3koKGZhc3RtdXRleF90ICopIGxvY2spIDwgMCkgewotICAgICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZnJlZV9sb2NrKCVwKSBmYWlsZWQ6ICVzXG4iLCBsb2NrLAotICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICB9Ci0gICAgZnJlZShsb2NrKTsKLSNlbHNlCi0gICAgaWYgKGRlbGV0ZV9zZW1hcGhvcmUoKHNlbV9pZCkgbG9jaykgPCAwKSB7Ci0gICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9mcmVlX2xvY2soJXApIGZhaWxlZDogJXNcbiIsIGxvY2ssCi0gICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgIH0KLSNlbmRpZgotfQotCi0KLWludCBQeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSAgICBpbnQgcmV0dmFsOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwgbG9jaywKLSAgICAgICAgICAgICB3YWl0ZmxhZykpOwotCi0jaWZkZWYgRkFTVExPQ0sKLSAgICBpZiAod2FpdGZsYWcpCi0gICAgICAgIHJldHZhbCA9IGZhc3RtdXRleF9sb2NrKChmYXN0bXV0ZXhfdCAqKSBsb2NrKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHZhbCA9IGZhc3RtdXRleF90aW1lZGxvY2soKGZhc3RtdXRleF90ICopIGxvY2ssIDApOwotI2Vsc2UKLSAgICBpZiAod2FpdGZsYWcpCi0gICAgICAgIHJldHZhbCA9IGxvY2tfc2VtYXBob3JlKChzZW1faWQpIGxvY2spOwotICAgIGVsc2UKLSAgICAgICAgcmV0dmFsID0gbG9ja19zZW1hcGhvcmVfeCgoc2VtX2lkKSBsb2NrLCAxLCAwLCAwKTsKLSNlbmRpZgotICAgIGlmIChyZXR2YWwgPCAwKSB7Ci0gICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICBsb2NrLCB3YWl0ZmxhZywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgfQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKS0+ICVkXG4iLCBsb2NrLCB3YWl0ZmxhZywKLSAgICAgICAgICAgICByZXR2YWwpKTsKLSAgICByZXR1cm4gcmV0dmFsIDwgMCA/IDAgOiAxOwotfQotCi0KLXZvaWQgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwgbG9jaykpOwotCi0jaWZkZWYgRkFTVExPQ0sKLSAgICBpZiAoZmFzdG11dGV4X3VubG9jaygoZmFzdG11dGV4X3QgKikgbG9jaykgPCAwKSB7Ci0gICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGZhaWxlZDogJXNcbiIsIGxvY2ssCi0gICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgIH0KLSNlbHNlCi0gICAgaWYgKHVubG9ja19zZW1hcGhvcmUoKHNlbV9pZCkgbG9jaykgPCAwKSB7Ci0gICAgICAgIGRwcmludGYoKCJQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGZhaWxlZDogJXNcbiIsIGxvY2ssCi0gICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgIH0KLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9jdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX2N0aHJlYWQuaAppbmRleCA4Y2I1MDQ0Li4xYjNlMzkwIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX2N0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX2N0aHJlYWQuaApAQCAtNTAsNTkgKzUwLDE1IEBACiAgICAgcmV0dXJuIChsb25nKSBjdGhyZWFkX3NlbGYoKTsKIH0KIAotc3RhdGljIHZvaWQKLWRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIGN0aHJlYWRfZXhpdCgwKTsKLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMKLXZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOworICAgIGN0aHJlYWRfZXhpdCgwKTsKIH0KIAotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9mb29iYXIuaCBiL1B5dGhvbi90aHJlYWRfZm9vYmFyLmgKaW5kZXggYzJkZmZhNi4uZDJiNzhjNSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF9mb29iYXIuaAorKysgYi9QeXRob24vdGhyZWFkX2Zvb2Jhci5oCkBAIC0yOSw1NCArMjksMTQgQEAKICAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKIH0KIAotc3RhdGljCi12b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotfQotCiB2b2lkCiBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYwotdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7CisgICAgICAgIGV4aXQoMCk7CiB9CiAKLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuCiAgKi8KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbHdwLmggYi9QeXRob24vdGhyZWFkX2x3cC5oCmluZGV4IDc1MTljZDQuLmJhN2IzN2EgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfbHdwLmgKKysrIGIvUHl0aG9uL3RocmVhZF9sd3AuaApAQCAtNDcsNTAgKzQ3LDE0IEBACiAgICAgcmV0dXJuIHRpZC50aHJlYWRfaWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKGludCBub19jbGVhbnVwKQordm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewogICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOworICAgICAgICBleGl0KDApOwogICAgIGx3cF9kZXN0cm95KFNFTEYpOwogfQogCi12b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLSAgICBwb2RfZXhpdChzdGF0dXMpOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9udC5oIGIvUHl0aG9uL3RocmVhZF9udC5oCmluZGV4IGUzYTMzODcuLmQxYmIwZTUgMTAwNjQ0Ci0tLSBhL1B5dGhvbi90aHJlYWRfbnQuaAorKysgYi9QeXRob24vdGhyZWFkX250LmgKQEAgLTksODIgKzksMzEgQEAKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKIAotdHlwZWRlZiBzdHJ1Y3QgTlJNVVRFWCB7Ci0gICAgTE9ORyAgIG93bmVkIDsKLSAgICBEV09SRCAgdGhyZWFkX2lkIDsKLSAgICBIQU5ETEUgaGV2ZW50IDsKLX0gTlJNVVRFWCwgKlBOUk1VVEVYIDsKKyNkZWZpbmUgUE5STVVURVggSEFORExFCiAKLQotQk9PTAotSW5pdGlhbGl6ZU5vblJlY3Vyc2l2ZU11dGV4KFBOUk1VVEVYIG11dGV4KQorUE5STVVURVgKK0FsbG9jTm9uUmVjdXJzaXZlTXV0ZXgoKQogewotICAgIG11dGV4LT5vd25lZCA9IC0xIDsgIC8qIE5vIHRocmVhZHMgaGF2ZSBlbnRlcmVkIE5vblJlY3Vyc2l2ZU11dGV4ICovCi0gICAgbXV0ZXgtPnRocmVhZF9pZCA9IDAgOwotICAgIG11dGV4LT5oZXZlbnQgPSBDcmVhdGVFdmVudChOVUxMLCBGQUxTRSwgRkFMU0UsIE5VTEwpIDsKLSAgICByZXR1cm4gbXV0ZXgtPmhldmVudCAhPSBOVUxMIDsgICAgICAvKiBUUlVFIGlmIHRoZSBtdXRleCBpcyBjcmVhdGVkICovCisgICAgcmV0dXJuIENyZWF0ZVNlbWFwaG9yZShOVUxMLCAxLCAxLCBOVUxMKTsKIH0KIAogVk9JRAotRGVsZXRlTm9uUmVjdXJzaXZlTXV0ZXgoUE5STVVURVggbXV0ZXgpCitGcmVlTm9uUmVjdXJzaXZlTXV0ZXgoUE5STVVURVggbXV0ZXgpCiB7CiAgICAgLyogTm8gaW4tdXNlIGNoZWNrICovCi0gICAgQ2xvc2VIYW5kbGUobXV0ZXgtPmhldmVudCkgOwotICAgIG11dGV4LT5oZXZlbnQgPSBOVUxMIDsgLyogSnVzdCBpbiBjYXNlICovCisgICAgQ2xvc2VIYW5kbGUobXV0ZXgpOwogfQogCiBEV09SRAotRW50ZXJOb25SZWN1cnNpdmVNdXRleChQTlJNVVRFWCBtdXRleCwgQk9PTCB3YWl0KQorRW50ZXJOb25SZWN1cnNpdmVNdXRleChQTlJNVVRFWCBtdXRleCwgRFdPUkQgbWlsbGlzZWNvbmRzKQogewotICAgIC8qIEFzc3VtZSB0aGF0IHRoZSB0aHJlYWQgd2FpdHMgc3VjY2Vzc2Z1bGx5ICovCi0gICAgRFdPUkQgcmV0IDsKLQotICAgIC8qIEludGVybG9ja2VkSW5jcmVtZW50KCZtdXRleC0+b3duZWQpID09IDAgbWVhbnMgdGhhdCBubyB0aHJlYWQgY3VycmVudGx5IG93bnMgdGhlIG11dGV4ICovCi0gICAgaWYgKCF3YWl0KQotICAgIHsKLSAgICAgICAgaWYgKEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCZtdXRleC0+b3duZWQsIDAsIC0xKSAhPSAtMSkKLSAgICAgICAgICAgIHJldHVybiBXQUlUX1RJTUVPVVQgOwotICAgICAgICByZXQgPSBXQUlUX09CSkVDVF8wIDsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICByZXQgPSBJbnRlcmxvY2tlZEluY3JlbWVudCgmbXV0ZXgtPm93bmVkKSA/Ci0gICAgICAgICAgICAvKiBTb21lIHRocmVhZCBvd25zIHRoZSBtdXRleCwgbGV0J3Mgd2FpdC4uLiAqLwotICAgICAgICAgICAgV2FpdEZvclNpbmdsZU9iamVjdChtdXRleC0+aGV2ZW50LCBJTkZJTklURSkgOiBXQUlUX09CSkVDVF8wIDsKLQotICAgIG11dGV4LT50aHJlYWRfaWQgPSBHZXRDdXJyZW50VGhyZWFkSWQoKSA7IC8qIFdlIG93biBpdCAqLwotICAgIHJldHVybiByZXQgOworICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0KG11dGV4LCBtaWxsaXNlY29uZHMpOwogfQogCiBCT09MCiBMZWF2ZU5vblJlY3Vyc2l2ZU11dGV4KFBOUk1VVEVYIG11dGV4KQogewotICAgIC8qIFdlIGRvbid0IG93biB0aGUgbXV0ZXggKi8KLSAgICBtdXRleC0+dGhyZWFkX2lkID0gMCA7Ci0gICAgcmV0dXJuCi0gICAgICAgIEludGVybG9ja2VkRGVjcmVtZW50KCZtdXRleC0+b3duZWQpIDwgMCB8fAotICAgICAgICBTZXRFdmVudChtdXRleC0+aGV2ZW50KSA7IC8qIE90aGVyIHRocmVhZHMgYXJlIHdhaXRpbmcsIHdha2Ugb25lIG9uIHRoZW0gdXAgKi8KLX0KLQotUE5STVVURVgKLUFsbG9jTm9uUmVjdXJzaXZlTXV0ZXgodm9pZCkKLXsKLSAgICBQTlJNVVRFWCBtdXRleCA9IChQTlJNVVRFWCltYWxsb2Moc2l6ZW9mKE5STVVURVgpKSA7Ci0gICAgaWYgKG11dGV4ICYmICFJbml0aWFsaXplTm9uUmVjdXJzaXZlTXV0ZXgobXV0ZXgpKQotICAgIHsKLSAgICAgICAgZnJlZShtdXRleCkgOwotICAgICAgICBtdXRleCA9IE5VTEwgOwotICAgIH0KLSAgICByZXR1cm4gbXV0ZXggOwotfQotCi12b2lkCi1GcmVlTm9uUmVjdXJzaXZlTXV0ZXgoUE5STVVURVggbXV0ZXgpCi17Ci0gICAgaWYgKG11dGV4KQotICAgIHsKLSAgICAgICAgRGVsZXRlTm9uUmVjdXJzaXZlTXV0ZXgobXV0ZXgpIDsKLSAgICAgICAgZnJlZShtdXRleCkgOwotICAgIH0KKyAgICByZXR1cm4gUmVsZWFzZVNlbWFwaG9yZShtdXRleCwgMSwgTlVMTCk7CiB9CiAKIGxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKTsKQEAgLTIwMywxNiArMTUyLDYgQEAKICNlbmRpZgogfQogCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBleGl0KHN0YXR1cyk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KIC8qCiAgKiBMb2NrIHN1cHBvcnQuIEl0IGhhcyB0b28gYmUgaW1wbGVtZW50ZWQgYXMgc2VtYXBob3Jlcy4KICAqIEkgW0RhZ10gdHJpZWQgdG8gaW1wbGVtZW50IGl0IHdpdGggbXV0ZXggYnV0IEkgY291bGQgZmluZCBhIHdheSB0bwpAQCAtMjQ4LDE4ICsxODcsNDYgQEAKICAqIGFuZCAwIGlmIHRoZSBsb2NrIHdhcyBub3QgYWNxdWlyZWQuIFRoaXMgbWVhbnMgYSAwIGlzIHJldHVybmVkCiAgKiBpZiB0aGUgbG9jayBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIGJ5IHRoaXMgdGhyZWFkIQogICovCitQeUxvY2tTdGF0dXMKK1B5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfVElNRU9VVF9UIG1pY3Jvc2Vjb25kcywgaW50IGludHJfZmxhZykKK3sKKyAgICAvKiBGb3cgbm93LCBpbnRyX2ZsYWcgZG9lcyBub3RoaW5nIG9uIFdpbmRvd3MsIGFuZCBsb2NrIGFjcXVpcmVzIGFyZQorICAgICAqIHVuaW50ZXJydXB0aWJsZS4gICovCisgICAgUHlMb2NrU3RhdHVzIHN1Y2Nlc3M7CisgICAgUFlfVElNRU9VVF9UIG1pbGxpc2Vjb25kczsKKworICAgIGlmIChtaWNyb3NlY29uZHMgPj0gMCkgeworICAgICAgICBtaWxsaXNlY29uZHMgPSBtaWNyb3NlY29uZHMgLyAxMDAwOworICAgICAgICBpZiAobWljcm9zZWNvbmRzICUgMTAwMCA+IDApCisgICAgICAgICAgICArK21pbGxpc2Vjb25kczsKKyAgICAgICAgaWYgKChEV09SRCkgbWlsbGlzZWNvbmRzICE9IG1pbGxpc2Vjb25kcykKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlRpbWVvdXQgdG9vIGxhcmdlIGZvciBhIERXT1JELCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAicGxlYXNlIGNoZWNrIFBZX1RJTUVPVVRfTUFYIik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbWlsbGlzZWNvbmRzID0gSU5GSU5JVEU7CisKKyAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoJXAsICVsbGQpIGNhbGxlZFxuIiwKKyAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksIGFMb2NrLCBtaWNyb3NlY29uZHMpKTsKKworICAgIGlmIChhTG9jayAmJiBFbnRlck5vblJlY3Vyc2l2ZU11dGV4KChQTlJNVVRFWClhTG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRFdPUkQpbWlsbGlzZWNvbmRzKSA9PSBXQUlUX09CSkVDVF8wKSB7CisgICAgICAgIHN1Y2Nlc3MgPSBQWV9MT0NLX0FDUVVJUkVEOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3VjY2VzcyA9IFBZX0xPQ0tfRkFJTFVSRTsKKyAgICB9CisKKyAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVsbGQpIC0+ICVkXG4iLAorICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwgYUxvY2ssIG1pY3Jvc2Vjb25kcywgc3VjY2VzcykpOworCisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CiBpbnQKIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2ssIGludCB3YWl0ZmxhZykKIHsKLSAgICBpbnQgc3VjY2VzcyA7Ci0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSxhTG9jaywgd2FpdGZsYWcpKTsKLQotICAgIHN1Y2Nlc3MgPSBhTG9jayAmJiBFbnRlck5vblJlY3Vyc2l2ZU11dGV4KChQTlJNVVRFWCkgYUxvY2ssICh3YWl0ZmxhZyA/IElORklOSVRFIDogMCkpID09IFdBSVRfT0JKRUNUXzAgOwotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgLT4gJWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSxhTG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKLQotICAgIHJldHVybiBzdWNjZXNzOworICAgIHJldHVybiBQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoYUxvY2ssIHdhaXRmbGFnID8gLTEgOiAwLCAwKTsKIH0KIAogdm9pZApAQCAtMzA2LDcgKzI3MywxMCBAQAogaW50CiBQeVRocmVhZF9jcmVhdGVfa2V5KHZvaWQpCiB7Ci0gICAgcmV0dXJuIChpbnQpIFRsc0FsbG9jKCk7CisgICAgRFdPUkQgcmVzdWx0PSBUbHNBbGxvYygpOworICAgIGlmIChyZXN1bHQgPT0gVExTX09VVF9PRl9JTkRFWEVTKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIChpbnQpcmVzdWx0OwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX29zMi5oIGIvUHl0aG9uL3RocmVhZF9vczIuaAppbmRleCAyODI4NGJiLi4xYjI2NGI1IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX29zMi5oCisrKyBiL1B5dGhvbi90aHJlYWRfb3MyLmgKQEAgLTY4LDU2ICs2OCwxNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQKK1B5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7CiAgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLAogICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgIGV4aXQoMCk7CiAgICAgX2VuZHRocmVhZCgpOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cywgaW50IG5vX2NsZWFudXApCi17Ci0gICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfcHJvZyglZCkgY2FsbGVkXG4iLCBzdGF0dXMpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aCBhbiBldmVudCBzZW1hcGhvcmUgYW5kIGNyaXRpY2FsCiAgKiBzZWN0aW9ucyB0byBtYWtlIGl0IGJlaGF2ZSBtb3JlIGxpa2UgYSBwb3NpeCBtdXRleCB0aGFuIGl0cyBPUy8yCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aC5oIGIvUHl0aG9uL3RocmVhZF9wdGguaAppbmRleCAxZjE2OTRhLi44MmEwMGU3IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aC5oCisrKyBiL1B5dGhvbi90aHJlYWRfcHRoLmgKQEAgLTc0LDQ5ICs3NCwxNCBAQAogICAgIHJldHVybiAobG9uZykgKihsb25nICopICZ0aHJlYWRpZDsKIH0KIAotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoaW50IG5vX2NsZWFudXApCit2b2lkIFB5VGhyZWFkX2V4aXRfdGhyZWFkKHZvaWQpCiB7CiAgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICB9CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAppbmRleCAzMmZkMmQwLi5mZmM3OTFjIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaApAQCAtNjQsNyArNjQsOCBAQAogLyogV2hldGhlciBvciBub3QgdG8gdXNlIHNlbWFwaG9yZXMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gZW11bGF0aW5nIHRoZW0gd2l0aAogICogbXV0ZXhlcyBhbmQgY29uZGl0aW9uIHZhcmlhYmxlczoKICAqLwotI2lmIGRlZmluZWQoX1BPU0lYX1NFTUFQSE9SRVMpICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMpCisjaWYgKGRlZmluZWQoX1BPU0lYX1NFTUFQSE9SRVMpICYmICFkZWZpbmVkKEhBVkVfQlJPS0VOX1BPU0lYX1NFTUFQSE9SRVMpICYmIFwKKyAgICAgZGVmaW5lZChIQVZFX1NFTV9USU1FRFdBSVQpKQogIyAgZGVmaW5lIFVTRV9TRU1BUEhPUkVTCiAjZWxzZQogIyAgdW5kZWYgVVNFX1NFTUFQSE9SRVMKQEAgLTgzLDYgKzg0LDI2IEBACiAjZW5kaWYKIAogCisvKiBXZSBhc3N1bWUgYWxsIG1vZGVybiBQT1NJWCBzeXN0ZW1zIGhhdmUgZ2V0dGltZW9mZGF5KCkgKi8KKyNpZmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFoKKyNkZWZpbmUgR0VUVElNRU9GREFZKHB0dikgZ2V0dGltZW9mZGF5KHB0dikKKyNlbHNlCisjZGVmaW5lIEdFVFRJTUVPRkRBWShwdHYpIGdldHRpbWVvZmRheShwdHYsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKQorI2VuZGlmCisKKyNkZWZpbmUgTUlDUk9TRUNPTkRTX1RPX1RJTUVTUEVDKG1pY3Jvc2Vjb25kcywgdHMpIFwKK2RvIHsgXAorICAgIHN0cnVjdCB0aW1ldmFsIHR2OyBcCisgICAgR0VUVElNRU9GREFZKCZ0dik7IFwKKyAgICB0di50dl91c2VjICs9IG1pY3Jvc2Vjb25kcyAlIDEwMDAwMDA7IFwKKyAgICB0di50dl9zZWMgKz0gbWljcm9zZWNvbmRzIC8gMTAwMDAwMDsgXAorICAgIHR2LnR2X3NlYyArPSB0di50dl91c2VjIC8gMTAwMDAwMDsgXAorICAgIHR2LnR2X3VzZWMgJT0gMTAwMDAwMDsgXAorICAgIHRzLnR2X3NlYyA9IHR2LnR2X3NlYzsgXAorICAgIHRzLnR2X25zZWMgPSB0di50dl91c2VjICogMTAwMDsgXAorfSB3aGlsZSgwKQorCisKIC8qIEEgcHRocmVhZCBtdXRleCBpc24ndCBzdWZmaWNpZW50IHRvIG1vZGVsIHRoZSBQeXRob24gbG9jayB0eXBlCiAgKiBiZWNhdXNlLCBhY2NvcmRpbmcgdG8gRHJhZnQgNSBvZiB0aGUgZG9jcyAoUDEwMDMuNGEvRDUpLCBib3RoIG9mIHRoZQogICogZm9sbG93aW5nIGFyZSB1bmRlZmluZWQ6CkBAIC0yMjUsNTUgKzI0NiwxNSBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIH0KLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBleGl0KDApOworICAgIH0KIH0KIAotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KHN0YXR1cyk7Ci19Ci0KLXZvaWQKLVB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkCi1QeVRocmVhZF9fZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMSk7Ci19Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCi0KICNpZmRlZiBVU0VfU0VNQVBIT1JFUwogCiAvKgpAQCAtMzM1LDMxICszMTYsNTYgQEAKICAgICByZXR1cm4gKHN0YXR1cyA9PSAtMSkgPyBlcnJubyA6IHN0YXR1czsKIH0KIAotaW50Ci1QeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIGludCB3YWl0ZmxhZykKK1B5TG9ja1N0YXR1cworUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBQWV9USU1FT1VUX1QgbWljcm9zZWNvbmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnRyX2ZsYWcpCiB7Ci0gICAgaW50IHN1Y2Nlc3M7CisgICAgUHlMb2NrU3RhdHVzIHN1Y2Nlc3M7CiAgICAgc2VtX3QgKnRoZWxvY2sgPSAoc2VtX3QgKilsb2NrOwogICAgIGludCBzdGF0dXMsIGVycm9yID0gMDsKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOworICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoJXAsICVsbGQsICVkKSBjYWxsZWRcbiIsCisgICAgICAgICAgICAgbG9jaywgbWljcm9zZWNvbmRzLCBpbnRyX2ZsYWcpKTsKIAorICAgIGlmIChtaWNyb3NlY29uZHMgPiAwKQorICAgICAgICBNSUNST1NFQ09ORFNfVE9fVElNRVNQRUMobWljcm9zZWNvbmRzLCB0cyk7CiAgICAgZG8gewotICAgICAgICBpZiAod2FpdGZsYWcpCi0gICAgICAgICAgICBzdGF0dXMgPSBmaXhfc3RhdHVzKHNlbV93YWl0KHRoZWxvY2spKTsKLSAgICAgICAgZWxzZQorICAgICAgICBpZiAobWljcm9zZWNvbmRzID4gMCkKKyAgICAgICAgICAgIHN0YXR1cyA9IGZpeF9zdGF0dXMoc2VtX3RpbWVkd2FpdCh0aGVsb2NrLCAmdHMpKTsKKyAgICAgICAgZWxzZSBpZiAobWljcm9zZWNvbmRzID09IDApCiAgICAgICAgICAgICBzdGF0dXMgPSBmaXhfc3RhdHVzKHNlbV90cnl3YWl0KHRoZWxvY2spKTsKLSAgICB9IHdoaWxlIChzdGF0dXMgPT0gRUlOVFIpOyAvKiBSZXRyeSBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdGF0dXMgPSBmaXhfc3RhdHVzKHNlbV93YWl0KHRoZWxvY2spKTsKKyAgICAgICAgLyogUmV0cnkgaWYgaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwsIHVubGVzcyB0aGUgY2FsbGVyIHdhbnRzIHRvIGJlCisgICAgICAgICAgIG5vdGlmaWVkLiAgKi8KKyAgICB9IHdoaWxlICghaW50cl9mbGFnICYmIHN0YXR1cyA9PSBFSU5UUik7CiAKLSAgICBpZiAod2FpdGZsYWcpIHsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJzZW1fd2FpdCIpOwotICAgIH0gZWxzZSBpZiAoc3RhdHVzICE9IEVBR0FJTikgewotICAgICAgICBDSEVDS19TVEFUVVMoInNlbV90cnl3YWl0Iik7CisgICAgLyogRG9uJ3QgY2hlY2sgdGhlIHN0YXR1cyBpZiB3ZSdyZSBzdG9wcGluZyBiZWNhdXNlIG9mIGFuIGludGVycnVwdC4gICovCisgICAgaWYgKCEoaW50cl9mbGFnICYmIHN0YXR1cyA9PSBFSU5UUikpIHsKKyAgICAgICAgaWYgKG1pY3Jvc2Vjb25kcyA+IDApIHsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gRVRJTUVET1VUKQorICAgICAgICAgICAgICAgIENIRUNLX1NUQVRVUygic2VtX3RpbWVkd2FpdCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1pY3Jvc2Vjb25kcyA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IEVBR0FJTikKKyAgICAgICAgICAgICAgICBDSEVDS19TVEFUVVMoInNlbV90cnl3YWl0Iik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBDSEVDS19TVEFUVVMoInNlbV93YWl0Iik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBzdWNjZXNzID0gKHN0YXR1cyA9PSAwKSA/IDEgOiAwOworICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICBzdWNjZXNzID0gUFlfTE9DS19BQ1FVSVJFRDsKKyAgICB9IGVsc2UgaWYgKGludHJfZmxhZyAmJiBzdGF0dXMgPT0gRUlOVFIpIHsKKyAgICAgICAgc3VjY2VzcyA9IFBZX0xPQ0tfSU5UUjsKKyAgICB9IGVsc2UgeworICAgICAgICBzdWNjZXNzID0gUFlfTE9DS19GQUlMVVJFOworICAgIH0KIAotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKKyAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrX3RpbWVkKCVwLCAlbGxkLCAlZCkgLT4gJWRcbiIsCisgICAgICAgICAgICAgbG9jaywgbWljcm9zZWNvbmRzLCBpbnRyX2ZsYWcsIHN1Y2Nlc3MpKTsKICAgICByZXR1cm4gc3VjY2VzczsKIH0KIApAQCAtMzk4LDYgKzQwNCwxMiBAQAogICAgICAgICBzdGF0dXMgPSBwdGhyZWFkX211dGV4X2luaXQoJmxvY2stPm11dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhhdHRyX2RlZmF1bHQpOwogICAgICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfbXV0ZXhfaW5pdCIpOworICAgICAgICAvKiBNYXJrIHRoZSBwdGhyZWFkIG11dGV4IHVuZGVybHlpbmcgYSBQeXRob24gbXV0ZXggYXMKKyAgICAgICAgICAgcHVyZSBoYXBwZW5zLWJlZm9yZS4gIFdlIGNhbid0IHNpbXBseSBtYXJrIHRoZQorICAgICAgICAgICBQeXRob24tbGV2ZWwgbXV0ZXggYXMgYSBtdXRleCBiZWNhdXNlIGl0IGNhbiBiZQorICAgICAgICAgICBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW4gZGlmZmVyZW50IHRocmVhZHMsIHdoaWNoCisgICAgICAgICAgIHdpbGwgY2F1c2UgZXJyb3JzLiAqLworICAgICAgICBfUHlfQU5OT1RBVEVfUFVSRV9IQVBQRU5TX0JFRk9SRV9NVVRFWCgmbG9jay0+bXV0KTsKIAogICAgICAgICBzdGF0dXMgPSBwdGhyZWFkX2NvbmRfaW5pdCgmbG9jay0+bG9ja19yZWxlYXNlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jb25kYXR0cl9kZWZhdWx0KTsKQEAgLTQzMCwzNyArNDQyLDY5IEBACiAgICAgZnJlZSgodm9pZCAqKXRoZWxvY2spOwogfQogCi1pbnQKLVB5VGhyZWFkX2FjcXVpcmVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgbG9jaywgaW50IHdhaXRmbGFnKQorUHlMb2NrU3RhdHVzCitQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIFBZX1RJTUVPVVRfVCBtaWNyb3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGludHJfZmxhZykKIHsKLSAgICBpbnQgc3VjY2VzczsKKyAgICBQeUxvY2tTdGF0dXMgc3VjY2VzczsKICAgICBwdGhyZWFkX2xvY2sgKnRoZWxvY2sgPSAocHRocmVhZF9sb2NrICopbG9jazsKICAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7CiAKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgY2FsbGVkXG4iLCBsb2NrLCB3YWl0ZmxhZykpOworICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoJXAsICVsbGQsICVkKSBjYWxsZWRcbiIsCisgICAgICAgICAgICAgbG9jaywgbWljcm9zZWNvbmRzLCBpbnRyX2ZsYWcpKTsKIAogICAgIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfbG9jayggJnRoZWxvY2stPm11dCApOwogICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9tdXRleF9sb2NrWzFdIik7Ci0gICAgc3VjY2VzcyA9IHRoZWxvY2stPmxvY2tlZCA9PSAwOwogCi0gICAgaWYgKCAhc3VjY2VzcyAmJiB3YWl0ZmxhZyApIHsKKyAgICBpZiAodGhlbG9jay0+bG9ja2VkID09IDApIHsKKyAgICAgICAgc3VjY2VzcyA9IFBZX0xPQ0tfQUNRVUlSRUQ7CisgICAgfSBlbHNlIGlmIChtaWNyb3NlY29uZHMgPT0gMCkgeworICAgICAgICBzdWNjZXNzID0gUFlfTE9DS19GQUlMVVJFOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICAgICAgaWYgKG1pY3Jvc2Vjb25kcyA+IDApCisgICAgICAgICAgICBNSUNST1NFQ09ORFNfVE9fVElNRVNQRUMobWljcm9zZWNvbmRzLCB0cyk7CiAgICAgICAgIC8qIGNvbnRpbnVlIHRyeWluZyB1bnRpbCB3ZSBnZXQgdGhlIGxvY2sgKi8KIAogICAgICAgICAvKiBtdXQgbXVzdCBiZSBsb2NrZWQgYnkgbWUgLS0gcGFydCBvZiB0aGUgY29uZGl0aW9uCiAgICAgICAgICAqIHByb3RvY29sICovCi0gICAgICAgIHdoaWxlICggdGhlbG9jay0+bG9ja2VkICkgewotICAgICAgICAgICAgc3RhdHVzID0gcHRocmVhZF9jb25kX3dhaXQoJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0KTsKLSAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX3dhaXQiKTsKKyAgICAgICAgc3VjY2VzcyA9IFBZX0xPQ0tfRkFJTFVSRTsKKyAgICAgICAgd2hpbGUgKHN1Y2Nlc3MgPT0gUFlfTE9DS19GQUlMVVJFKSB7CisgICAgICAgICAgICBpZiAobWljcm9zZWNvbmRzID4gMCkgeworICAgICAgICAgICAgICAgIHN0YXR1cyA9IHB0aHJlYWRfY29uZF90aW1lZHdhaXQoCisgICAgICAgICAgICAgICAgICAgICZ0aGVsb2NrLT5sb2NrX3JlbGVhc2VkLAorICAgICAgICAgICAgICAgICAgICAmdGhlbG9jay0+bXV0LCAmdHMpOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRVRJTUVET1VUKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfY29uZF90aW1lZF93YWl0Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBwdGhyZWFkX2NvbmRfd2FpdCgKKyAgICAgICAgICAgICAgICAgICAgJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsCisgICAgICAgICAgICAgICAgICAgICZ0aGVsb2NrLT5tdXQpOworICAgICAgICAgICAgICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9jb25kX3dhaXQiKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGludHJfZmxhZyAmJiBzdGF0dXMgPT0gMCAmJiB0aGVsb2NrLT5sb2NrZWQpIHsKKyAgICAgICAgICAgICAgICAvKiBXZSB3ZXJlIHdva2VuIHVwLCBidXQgZGlkbid0IGdldCB0aGUgbG9jay4gIFdlIHByb2JhYmx5IHJlY2VpdmVkCisgICAgICAgICAgICAgICAgICogYSBzaWduYWwuICBSZXR1cm4gUFlfTE9DS19JTlRSIHRvIGFsbG93IHRoZSBjYWxsZXIgdG8gaGFuZGxlCisgICAgICAgICAgICAgICAgICogaXQgYW5kIHJldHJ5LiAgKi8KKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gUFlfTE9DS19JTlRSOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gMCAmJiAhdGhlbG9jay0+bG9ja2VkKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFBZX0xPQ0tfQUNRVUlSRUQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBQWV9MT0NLX0ZBSUxVUkU7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3VjY2VzcyA9IDE7CiAgICAgfQotICAgIGlmIChzdWNjZXNzKSB0aGVsb2NrLT5sb2NrZWQgPSAxOworICAgIGlmIChzdWNjZXNzID09IFBZX0xPQ0tfQUNRVUlSRUQpIHRoZWxvY2stPmxvY2tlZCA9IDE7CiAgICAgc3RhdHVzID0gcHRocmVhZF9tdXRleF91bmxvY2soICZ0aGVsb2NrLT5tdXQgKTsKICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfbXV0ZXhfdW5sb2NrWzFdIik7CiAKLSAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSAwOwotICAgIGRwcmludGYoKCJQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSAtPiAlZFxuIiwgbG9jaywgd2FpdGZsYWcsIHN1Y2Nlc3MpKTsKKyAgICBpZiAoZXJyb3IpIHN1Y2Nlc3MgPSBQWV9MT0NLX0ZBSUxVUkU7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZCglcCwgJWxsZCwgJWQpIC0+ICVkXG4iLAorICAgICAgICAgICAgIGxvY2ssIG1pY3Jvc2Vjb25kcywgaW50cl9mbGFnLCBzdWNjZXNzKSk7CiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKQEAgLTQ4Nyw2ICs1MzEsMTIgQEAKIAogI2VuZGlmIC8qIFVTRV9TRU1BUEhPUkVTICovCiAKK2ludAorUHlUaHJlYWRfYWNxdWlyZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrLCBpbnQgd2FpdGZsYWcpCit7CisgICAgcmV0dXJuIFB5VGhyZWFkX2FjcXVpcmVfbG9ja190aW1lZChsb2NrLCB3YWl0ZmxhZyA/IC0xIDogMCwgLyppbnRyX2ZsYWc9Ki8wKTsKK30KKwogLyogc2V0IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZS4KICAqIFJldHVybiAwIGlmIHNpemUgaXMgdmFsaWQsIC0xIGlmIHNpemUgaXMgaW52YWxpZCwKICAqIC0yIGlmIHNldHRpbmcgc3RhY2sgc2l6ZSBpcyBub3Qgc3VwcG9ydGVkLgpAQCAtNTMxLDMgKzU4MSw0NiBAQAogfQogCiAjZGVmaW5lIFRIUkVBRF9TRVRfU1RBQ0tTSVpFKHgpIF9weXRocmVhZF9wdGhyZWFkX3NldF9zdGFja3NpemUoeCkKKworI2RlZmluZSBQeV9IQVZFX05BVElWRV9UTFMKKworaW50CitQeVRocmVhZF9jcmVhdGVfa2V5KHZvaWQpCit7CisgICAgcHRocmVhZF9rZXlfdCBrZXk7CisgICAgaW50IGZhaWwgPSBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCk7CisgICAgcmV0dXJuIGZhaWwgPyAtMSA6IGtleTsKK30KKwordm9pZAorUHlUaHJlYWRfZGVsZXRlX2tleShpbnQga2V5KQoreworICAgIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpOworfQorCit2b2lkCitQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlKGludCBrZXkpCit7CisgICAgcHRocmVhZF9zZXRzcGVjaWZpYyhrZXksIE5VTEwpOworfQorCitpbnQKK1B5VGhyZWFkX3NldF9rZXlfdmFsdWUoaW50IGtleSwgdm9pZCAqdmFsdWUpCit7CisgICAgaW50IGZhaWw7CisgICAgdm9pZCAqb2xkVmFsdWUgPSBwdGhyZWFkX2dldHNwZWNpZmljKGtleSk7CisgICAgaWYgKG9sZFZhbHVlICE9IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIGZhaWwgPSBwdGhyZWFkX3NldHNwZWNpZmljKGtleSwgdmFsdWUpOworICAgIHJldHVybiBmYWlsID8gLTEgOiAwOworfQorCit2b2lkICoKK1B5VGhyZWFkX2dldF9rZXlfdmFsdWUoaW50IGtleSkKK3sKKyAgICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhrZXkpOworfQorCit2b2lkCitQeVRocmVhZF9SZUluaXRUTFModm9pZCkKK3t9CmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3NnaS5oIGIvUHl0aG9uL3RocmVhZF9zZ2kuaAppbmRleCA2NzlkMTEzLi43NzFhYjJjIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3NnaS5oCisrKyBiL1B5dGhvbi90aHJlYWRfc2dpLmgKQEAgLTE3LDkgKzE3LDYgQEAKIHN0YXRpYyBpbnQgd2FpdGluZ19mb3JfdGhyZWFkczsgLyogcHJvdGVjdGVkIGJ5IGNvdW50X2xvY2sgKi8KIHN0YXRpYyBpbnQgbnRocmVhZHM7ICAgICAgICAgICAgLyogcHJvdGVjdGVkIGJ5IGNvdW50X2xvY2sgKi8KIHN0YXRpYyBpbnQgZXhpdF9zdGF0dXM7Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIGludCBkb19leGl0OyAgICAgICAgICAgICAvKiBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvZ3JhbSBpcyB0byBleGl0ICovCi0jZW5kaWYKIHN0YXRpYyBpbnQgZXhpdGluZzsgICAgICAgICAgICAgLyogd2UncmUgYWxyZWFkeSBleGl0aW5nIChmb3IgbWF5YmVfZXhpdCkgKi8KIHN0YXRpYyBwaWRfdCBteV9waWQ7ICAgICAgICAgICAgLyogUElEIG9mIG1haW4gdGhyZWFkICovCiBzdGF0aWMgc3RydWN0IHBpZGxpc3QgewpAQCAtMjcsNTMgKzI0LDExIEBACiAgICAgcGlkX3QgY2hpbGQ7CiB9IHBpZGxpc3RbTUFYUFJPQ107ICAgICAvKiBQSURzIG9mIG90aGVyIHRocmVhZHM7IHByb3RlY3RlZCBieSBjb3VudF9sb2NrICovCiBzdGF0aWMgaW50IG1heHBpZGluZGV4OyAgICAgICAgIC8qICMgb2YgUElEcyBpbiBwaWRsaXN0ICovCi0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBhcyBhIHNpZ25hbCBoYW5kbGVyIHdoZW4gYW5vdGhlciB0aHJlYWQKLSAqIGV4aXRzLiAgV2hlbiB0aGF0IGhhcHBlbnMsIHdlIG11c3Qgc2VlIHdoZXRoZXIgd2UgaGF2ZSB0byBleGl0IGFzCi0gKiB3ZWxsIChiZWNhdXNlIG9mIGFuIFB5VGhyZWFkX2V4aXRfcHJvZygpKSBvciB3aGV0aGVyIHdlIHNob3VsZCBjb250aW51ZSBvbi4KLSAqLwotc3RhdGljIHZvaWQgZXhpdF9zaWcodm9pZCkKLXsKLSAgICBkMnByaW50ZigoImV4aXRfc2lnIGNhbGxlZFxuIikpOwotICAgIGlmIChleGl0aW5nICYmIGdldHBpZCgpID09IG15X3BpZCkgewotICAgICAgICBkMnByaW50ZigoImFscmVhZHkgZXhpdGluZ1xuIikpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChkb19leGl0KSB7Ci0gICAgICAgIGQycHJpbnRmKCgiZXhpdGluZyBpbiBleGl0X3NpZ1xuIikpOwotI2lmZGVmIFB5X0RFQlVHCi0gICAgICAgIGlmICgodGhyZWFkX2RlYnVnICYgOCkgPT0gMCkKLSAgICAgICAgICAgIHRocmVhZF9kZWJ1ZyAmPSB+MTsgLyogZG9uJ3QgcHJvZHVjZSBkZWJ1ZyBtZXNzYWdlcyAqLwotI2VuZGlmCi0gICAgICAgIFB5VGhyZWFkX2V4aXRfdGhyZWFkKCk7Ci0gICAgfQotfQotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB3aGVuIGEgcHJvY2VzcyBjYWxscyBleGl0KCkuICBJZiB0aGF0IHdhc24ndAotICogZG9uZSBmcm9tIHRoZSBsaWJyYXJ5LCB3ZSBkbyBhcyBpZiBhbiBQeVRocmVhZF9leGl0X3Byb2coKSB3YXMgaW50ZW5kZWQuCi0gKi8KLXN0YXRpYyB2b2lkIG1heWJlX2V4aXQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgibWF5YmVfZXhpdCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoZXhpdGluZykgewotICAgICAgICBkcHJpbnRmKCgiYWxyZWFkeSBleGl0aW5nXG4iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUHlUaHJlYWRfZXhpdF9wcm9nKDApOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogSW5pdGlhbGl6YXRpb24uCiAgKi8KIHN0YXRpYyB2b2lkIFB5VGhyZWFkX19pbml0X3RocmVhZCh2b2lkKQogewotI2lmbmRlZiBOT19FWElUX1BST0cKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHM7Ci0jZW5kaWYgLyogTk9fRVhJVF9QUk9HICovCiAjaWZkZWYgVVNFX0RMCiAgICAgbG9uZyBhZGRyLCBzaXplOwogI2VuZGlmIC8qIFVTRV9ETCAqLwpAQCAtOTMsMTYgKzQ4LDYgQEAKICAgICBpZiAodXNjb25maWcoQ09ORl9JTklUVVNFUlMsIDE2KSA8IDApCiAgICAgICAgIHBlcnJvcigidXNjb25maWcgLSBDT05GX0lOSVRVU0VSUyIpOwogICAgIG15X3BpZCA9IGdldHBpZCgpOyAgICAgICAgICAvKiBzbyB0aGF0IHdlIGtub3cgd2hpY2ggaXMgdGhlIG1haW4gdGhyZWFkICovCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgIGF0ZXhpdChtYXliZV9leGl0KTsKLSAgICBzLnNhX2hhbmRsZXIgPSBleGl0X3NpZzsKLSAgICBzaWdlbXB0eXNldCgmcy5zYV9tYXNrKTsKLSAgICAvKnNpZ2FkZHNldCgmcy5zYV9tYXNrLCBTSUdVU1IxKTsqLwotICAgIHMuc2FfZmxhZ3MgPSAwOwotICAgIHNpZ2FjdGlvbihTSUdVU1IxLCAmcywgMCk7Ci0gICAgaWYgKHByY3RsKFBSX1NFVEVYSVRTSUcsIFNJR1VTUjEpIDwgMCkKLSAgICAgICAgcGVycm9yKCJwcmN0bCAtIFBSX1NFVEVYSVRTSUciKTsKLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KICAgICBpZiAodXNjb25maWcoQ09ORl9BUkVOQVRZUEUsIFVTX1NIQVJFRE9OTFkpIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c2NvbmZpZyAtIENPTkZfQVJFTkFUWVBFIik7CiAgICAgdXNjb25maWcoQ09ORl9MT0NLVFlQRSwgVVNfREVCVUcpOyAvKiBYWFggKi8KQEAgLTIyNyw0NiArMTcyLDI0IEBACiAgICAgcmV0dXJuIGdldHBpZCgpOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKK3ZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKICAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7CiAgICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgZXhpdCgwKTsKICAgICBpZiAodXNzZXRsb2NrKGNvdW50X2xvY2spIDwgMCkKICAgICAgICAgcGVycm9yKCJ1c3NldGxvY2sgKGNvdW50X2xvY2spIik7CiAgICAgbnRocmVhZHMtLTsKICAgICBpZiAoZ2V0cGlkKCkgPT0gbXlfcGlkKSB7CiAgICAgICAgIC8qIG1haW4gdGhyZWFkOyB3YWl0IGZvciBvdGhlciB0aHJlYWRzIHRvIGV4aXQgKi8KICAgICAgICAgZXhpdGluZyA9IDE7Ci0jaWZuZGVmIE5PX0VYSVRfUFJPRwotICAgICAgICBpZiAoZG9fZXhpdCkgewotICAgICAgICAgICAgaW50IGk7Ci0KLSAgICAgICAgICAgIC8qIG5vdGlmeSBvdGhlciB0aHJlYWRzICovCi0gICAgICAgICAgICBjbGVhbl90aHJlYWRzKCk7Ci0gICAgICAgICAgICBpZiAobnRocmVhZHMgPj0gMCkgewotICAgICAgICAgICAgICAgIGRwcmludGYoKCJraWxsIG90aGVyIHRocmVhZHNcbiIpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWF4cGlkaW5kZXg7IGkrKykKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBpZGxpc3RbaV0uY2hpbGQgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpIGtpbGwocGlkbGlzdFtpXS5jaGlsZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJR0tJTEwpOwotICAgICAgICAgICAgICAgIF9leGl0KGV4aXRfc3RhdHVzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwogICAgICAgICB3YWl0aW5nX2Zvcl90aHJlYWRzID0gMTsKICAgICAgICAgaWYgKHVzc2V0bG9jayh3YWl0X2xvY2spIDwgMCkKICAgICAgICAgICAgIHBlcnJvcigidXNzZXRsb2NrICh3YWl0X2xvY2spIik7CiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGlmIChudGhyZWFkcyA8IDApIHsKICAgICAgICAgICAgICAgICBkcHJpbnRmKCgicmVhbGx5IGV4aXQgKCVkKVxuIiwgZXhpdF9zdGF0dXMpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgICAgICAgICAgX2V4aXQoZXhpdF9zdGF0dXMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZXhpdChleGl0X3N0YXR1cyk7CisgICAgICAgICAgICAgICAgZXhpdChleGl0X3N0YXR1cyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodXN1bnNldGxvY2soY291bnRfbG9jaykgPCAwKQogICAgICAgICAgICAgICAgIHBlcnJvcigidXN1bnNldGxvY2sgKGNvdW50X2xvY2spIik7CkBAIC0yODMsNTAgKzIwNiwxMSBAQAogICAgICAgICBpZiAodXN1bnNldGxvY2sod2FpdF9sb2NrKSA8IDApCiAgICAgICAgICAgICBwZXJyb3IoInVzdW5zZXRsb2NrICh3YWl0X2xvY2spIik7CiAgICAgfQotI2lmbmRlZiBOT19FWElUX1BST0cKLSAgICBlbHNlIGlmIChkb19leGl0KQotICAgICAgICAodm9pZCkga2lsbChteV9waWQsIFNJR1VTUjEpOwotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwogICAgIGlmICh1c3Vuc2V0bG9jayhjb3VudF9sb2NrKSA8IDApCiAgICAgICAgIHBlcnJvcigidXN1bnNldGxvY2sgKGNvdW50X2xvY2spIik7CiAgICAgX2V4aXQoMCk7CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZCBQeVRocmVhZF9fZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgxKTsKLX0KLQotI2lmbmRlZiBOT19FWElUX1BST0cKLXN0YXRpYyB2b2lkIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzLCBpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF9wcm9nKCVkKSBjYWxsZWRcbiIsIHN0YXR1cykpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIGRvX2V4aXQgPSAxOwotICAgIGV4aXRfc3RhdHVzID0gc3RhdHVzOwotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKG5vX2NsZWFudXApOwotfQotCi12b2lkIFB5VGhyZWFkX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAxKTsKLX0KLSNlbmRpZiAvKiBOT19FWElUX1BST0cgKi8KLQogLyoKICAqIExvY2sgc3VwcG9ydC4KICAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9zb2xhcmlzLmggYi9QeXRob24vdGhyZWFkX3NvbGFyaXMuaAppbmRleCA1NmFjOGFlLi4xY2UxY2ZjIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3NvbGFyaXMuaAorKysgYi9QeXRob24vdGhyZWFkX3NvbGFyaXMuaApAQCAtNjQsNTkgKzY0LDE1IEBACiAgICAgcmV0dXJuIHRocl9zZWxmKCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1kb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgaWYgKG5vX2NsZWFudXApCi0gICAgICAgICAgICBfZXhpdCgwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdCgwKTsKLSAgICB0aHJfZXhpdCgwKTsKLX0KLQogdm9pZAogUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKIHsKLSAgICBkb19QeVRocmVhZF9leGl0X3RocmVhZCgwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfdGhyZWFkKHZvaWQpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF90aHJlYWQoMSk7Ci19Ci0KLSNpZm5kZWYgTk9fRVhJVF9QUk9HCi1zdGF0aWMgdm9pZAotZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIlB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIikpOwogICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgX2V4aXQoc3RhdHVzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXhpdChzdGF0dXMpOwotICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICBfZXhpdChzdGF0dXMpOwotICAgIGVsc2UKLSAgICAgICAgZXhpdChzdGF0dXMpOworICAgICAgICBleGl0KDApOworICAgIHRocl9leGl0KDApOwogfQogCi12b2lkCi1QeVRocmVhZF9leGl0X3Byb2coaW50IHN0YXR1cykKLXsKLSAgICBkb19QeVRocmVhZF9leGl0X3Byb2coc3RhdHVzLCAwKTsKLX0KLQotdm9pZAotUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LgogICovCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3dpbmNlLmggYi9QeXRob24vdGhyZWFkX3dpbmNlLmgKaW5kZXggMzNjZjVhNC4uNTFkZGMwMiAxMDA2NDQKLS0tIGEvUHl0aG9uL3RocmVhZF93aW5jZS5oCisrKyBiL1B5dGhvbi90aHJlYWRfd2luY2UuaApAQCAtNTMsNDkgKzUzLDE0IEBACiAgICAgcmV0dXJuIEdldEN1cnJlbnRUaHJlYWRJZCgpOwogfQogCi1zdGF0aWMgdm9pZCBkb19QeVRocmVhZF9leGl0X3RocmVhZChpbnQgbm9fY2xlYW51cCkKLXsKLSAgICBkcHJpbnRmKCgiJWxkOiBkb19QeVRocmVhZF9leGl0X3RocmVhZCBjYWxsZWRcbiIsIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIGlmIChub19jbGVhbnVwKQotICAgICAgICAgICAgZXhpdCgwKTsgLyogWFhYIC0gd2FzIF9leGl0KCkhISAqLwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0KDApOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KLQogdm9pZCBQeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQogewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDApOwotfQotCi12b2lkIFB5VGhyZWFkX19leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfdGhyZWFkKDEpOwotfQotCi0jaWZuZGVmIE5PX0VYSVRfUFJPRwotc3RhdGljIHZvaWQgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMsIGludCBub19jbGVhbnVwKQotewotICAgIGRwcmludGYoKCJQeVRocmVhZF9leGl0X3Byb2coJWQpIGNhbGxlZFxuIiwgc3RhdHVzKSk7CisgICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iLCBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKICAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBpZiAobm9fY2xlYW51cCkKLSAgICAgICAgICAgIF9leGl0KHN0YXR1cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV4aXQoc3RhdHVzKTsKKyAgICAgICAgZXhpdCgwKTsKKyAgICBfZW5kdGhyZWFkKCk7CiB9CiAKLXZvaWQgUHlUaHJlYWRfZXhpdF9wcm9nKGludCBzdGF0dXMpCi17Ci0gICAgZG9fUHlUaHJlYWRfZXhpdF9wcm9nKHN0YXR1cywgMCk7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfX2V4aXRfcHJvZyhpbnQgc3RhdHVzKQotewotICAgIGRvX1B5VGhyZWFkX2V4aXRfcHJvZyhzdGF0dXMsIDEpOwotfQotI2VuZGlmIC8qIE5PX0VYSVRfUFJPRyAqLwotCiAvKgogICogTG9jayBzdXBwb3J0LiBJdCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgdXNpbmcgTXV0ZXhlcywgYXMKICAqIENFIGRvZXNudCBzdXBwb3J0IHNlbWFwaG9yZXMuICBUaGVyZWZvcmUgd2UgdXNlIHNvbWUgaGFja3MgdG8KZGlmZiAtLWdpdCBhL1B5dGhvbi90cmFjZWJhY2suYyBiL1B5dGhvbi90cmFjZWJhY2suYwppbmRleCAyZjFjMjEzLi41OWJiM2YwIDEwMDY0NAotLS0gYS9QeXRob24vdHJhY2ViYWNrLmMKKysrIGIvUHl0aG9uL3RyYWNlYmFjay5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgImZyYW1lb2JqZWN0LmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAib3NkZWZzLmgiCi0jaW5jbHVkZSAidHJhY2ViYWNrLmgiCiAjaWZkZWYgSEFWRV9GQ05UTF9ICiAjaW5jbHVkZSA8ZmNudGwuaD4KICNlbmRpZgpAQCAtMTE0LDggKzExMyw3IEBACiAgICAgICAgIFB5X1hJTkNSRUYoZnJhbWUpOwogICAgICAgICB0Yi0+dGJfZnJhbWUgPSBmcmFtZTsKICAgICAgICAgdGItPnRiX2xhc3RpID0gZnJhbWUtPmZfbGFzdGk7Ci0gICAgICAgIHRiLT50Yl9saW5lbm8gPSBQeUNvZGVfQWRkcjJMaW5lKGZyYW1lLT5mX2NvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5mX2xhc3RpKTsKKyAgICAgICAgdGItPnRiX2xpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihmcmFtZSk7CiAgICAgICAgIFB5T2JqZWN0X0dDX1RyYWNrKHRiKTsKICAgICB9CiAgICAgcmV0dXJuIHRiOwpAQCAtMTUwLDggKzE0OCw3IEBACiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgUHlPYmplY3QqIHJlc3VsdDsKIAotICAgIGZpbGVieXRlcyA9IFB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QoZmlsZW5hbWUsCi0gICAgICAgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICBmaWxlYnl0ZXMgPSBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKICAgICBpZiAoZmlsZWJ5dGVzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzksOSArMTc2LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh2KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHBhdGggPSBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0KHYsIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVlc2NhcGUiKTsKKyAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQodik7CiAgICAgICAgIGlmIChwYXRoID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCBhNTljYjkxLi41MjE1YWVmIDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDE1ICsxLDEzIEBACi1UaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuMS4zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIFB5dGhvbiB2ZXJzaW9uIDMuMgorPT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCi1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEKK1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotUHl0aG9uIDMueCBpcyBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBsYW5ndWFnZSwgd2hpY2ggaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCi0yLnggbGluZSBvZiByZWxlYXNlcy4gIFRoZSBsYW5ndWFnZSBpcyBtb3N0bHkgdGhlIHNhbWUsIGJ1dCBtYW55IGRldGFpbHMsCi1lc3BlY2lhbGx5IGhvdyBidWlsdC1pbiBvYmplY3RzIGxpa2UgZGljdGlvbmFyaWVzIGFuZCBzdHJpbmdzIHdvcmssIGhhdmUKLWNoYW5nZWQgY29uc2lkZXJhYmx5LCBhbmQgYSBsb3Qgb2YgZGVwcmVjYXRlZCBmZWF0dXJlcyBoYXZlIGZpbmFsbHkgYmVlbgotcmVtb3ZlZC4KK1B5dGhvbiAzLnggaXMgYSBuZXcgdmVyc2lvbiBvZiB0aGUgbGFuZ3VhZ2UsIHdoaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSAyLngKK2xpbmUgb2YgcmVsZWFzZXMuICBUaGUgbGFuZ3VhZ2UgaXMgbW9zdGx5IHRoZSBzYW1lLCBidXQgbWFueSBkZXRhaWxzLCBlc3BlY2lhbGx5Citob3cgYnVpbHQtaW4gb2JqZWN0cyBsaWtlIGRpY3Rpb25hcmllcyBhbmQgc3RyaW5ncyB3b3JrLCBoYXZlIGNoYW5nZWQKK2NvbnNpZGVyYWJseSwgYW5kIGEgbG90IG9mIGRlcHJlY2F0ZWQgZmVhdHVyZXMgaGF2ZSBmaW5hbGx5IGJlZW4gcmVtb3ZlZC4KIAogCiBCdWlsZCBJbnN0cnVjdGlvbnMKQEAgLTI0LDIwICsyMiwxOSBAQAogCiBUaGlzIHdpbGwgaW5zdGFsbCBQeXRob24gYXMgcHl0aG9uMy4KIAotWW91IGNhbiBwYXNzIG1hbnkgb3B0aW9ucyB0byB0aGUgY29uZmlndXJlIHNjcmlwdDsgcnVuICIuL2NvbmZpZ3VyZQotLS1oZWxwIiB0byBmaW5kIG91dCBtb3JlLiAgT24gT1NYIGFuZCBDeWd3aW4sIHRoZSBleGVjdXRhYmxlIGlzIGNhbGxlZAotcHl0aG9uLmV4ZTsgZWxzZXdoZXJlIGl0J3MganVzdCBweXRob24uCitZb3UgY2FuIHBhc3MgbWFueSBvcHRpb25zIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0OyBydW4gIi4vY29uZmlndXJlIC0taGVscCIgdG8KK2ZpbmQgb3V0IG1vcmUuICBPbiBPU1ggYW5kIEN5Z3dpbiwgdGhlIGV4ZWN1dGFibGUgaXMgY2FsbGVkIHB5dGhvbi5leGU7CitlbHNld2hlcmUgaXQncyBqdXN0IHB5dGhvbi4KIAotT24gTWFjIE9TIFgsIGlmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgUHl0aG9uIHdpdGggLS1lbmFibGUtZnJhbWV3b3JrLAoteW91IHNob3VsZCB1c2UgIm1ha2UgZnJhbWV3b3JraW5zdGFsbCIgdG8gZG8gdGhlIGluc3RhbGxhdGlvbi4gIE5vdGUKLXRoYXQgdGhpcyBpbnN0YWxscyB0aGUgUHl0aG9uIGV4ZWN1dGFibGUgaW4gYSBwbGFjZSB0aGF0IGlzIG5vdAotbm9ybWFsbHkgb24geW91ciBQQVRILCB5b3UgbWF5IHdhbnQgdG8gc2V0IHVwIGEgc3ltbGluayBpbgotL3Vzci9sb2NhbC9iaW4uCitPbiBNYWMgT1MgWCwgaWYgeW91IGhhdmUgY29uZmlndXJlZCBQeXRob24gd2l0aCAtLWVuYWJsZS1mcmFtZXdvcmssIHlvdSBzaG91bGQKK3VzZSAibWFrZSBmcmFtZXdvcmtpbnN0YWxsIiB0byBkbyB0aGUgaW5zdGFsbGF0aW9uLiAgTm90ZSB0aGF0IHRoaXMgaW5zdGFsbHMgdGhlCitQeXRob24gZXhlY3V0YWJsZSBpbiBhIHBsYWNlIHRoYXQgaXMgbm90IG5vcm1hbGx5IG9uIHlvdXIgUEFUSCwgeW91IG1heSB3YW50IHRvCitzZXQgdXAgYSBzeW1saW5rIGluIC91c3IvbG9jYWwvYmluLgogCiBPbiBXaW5kb3dzLCBzZWUgUENidWlsZC9yZWFkbWUudHh0LgogCi1JZiB5b3Ugd2lzaCwgeW91IGNhbiBjcmVhdGUgYSBzdWJkaXJlY3RvcnkgYW5kIGludm9rZSBjb25maWd1cmUgZnJvbQotdGhlcmUuICBGb3IgZXhhbXBsZToKK0lmIHlvdSB3aXNoLCB5b3UgY2FuIGNyZWF0ZSBhIHN1YmRpcmVjdG9yeSBhbmQgaW52b2tlIGNvbmZpZ3VyZSBmcm9tIHRoZXJlLiAgRm9yCitleGFtcGxlOgogCiAgICAgbWtkaXIgZGVidWcKICAgICBjZCBkZWJ1ZwpAQCAtNDUsMjEgKzQyLDIxIEBACiAgICAgbWFrZQogICAgIG1ha2UgdGVzdAogCi0oVGhpcyB3aWxsIGZhaWwgaWYgeW91ICphbHNvKiBidWlsdCBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gIFlvdQotc2hvdWxkIGRvIGEgIm1ha2UgY2xlYW4iIGF0IHRoZSB0b3BsZXZlbCBmaXJzdC4pCisoVGhpcyB3aWxsIGZhaWwgaWYgeW91ICphbHNvKiBidWlsdCBhdCB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gIFlvdSBzaG91bGQgZG8gYQorIm1ha2UgY2xlYW4iIGF0IHRoZSB0b3BsZXZlbCBmaXJzdC4pCiAKIAogV2hhdCdzIE5ldwogLS0tLS0tLS0tLQogCiBXZSB0cnkgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgb3ZlcnZpZXcgb2YgdGhlIGNoYW5nZXMgaW4gdGhlICJXaGF0J3MgTmV3IGluCi1QeXRob24gMy4xIiBkb2N1bWVudCwgZm91bmQgYXQKK1B5dGhvbiAzLjIiIGRvY3VtZW50LCBmb3VuZCBhdAogCi0gICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjEvd2hhdHNuZXcvMy4xLmh0bWwKKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMi93aGF0c25ldy8zLjIuaHRtbAogCi1Gb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sCi1pcyBpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNwotcmVsZWFzZSB1bmRlciBkZXZlbG9wbWVudCkuCitGb3IgYSBtb3JlIGRldGFpbGVkIGNoYW5nZSBsb2csIHJlYWQgTWlzYy9ORVdTICh0aG91Z2ggdGhpcyBmaWxlLCB0b28sIGlzCitpbmNvbXBsZXRlLCBhbmQgYWxzbyBkb2Vzbid0IGxpc3QgYW55dGhpbmcgbWVyZ2VkIGluIGZyb20gdGhlIDIuNyByZWxlYXNlIHVuZGVyCitkZXZlbG9wbWVudCkuCiAKIElmIHlvdSB3YW50IHRvIGluc3RhbGwgbXVsdGlwbGUgdmVyc2lvbnMgb2YgUHl0aG9uIHNlZSB0aGUgc2VjdGlvbiBiZWxvdwogZW50aXRsZWQgIkluc3RhbGxpbmcgbXVsdGlwbGUgdmVyc2lvbnMiLgpAQCAtNjgsODkgKzY1LDgxIEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKLURvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAzLjEgaXMgb25saW5lLCB1cGRhdGVkIHR3aWNlIGEgZGF5OgorRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuMiBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMS8KKyAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMi8KIAotQWxsIGRvY3VtZW50YXRpb24gaXMgYWxzbyBhdmFpbGFibGUgb25saW5lIGF0IHRoZSBQeXRob24gd2ViIHNpdGUKLShodHRwOi8vZG9jcy5weXRob24ub3JnLywgc2VlIGJlbG93KS4gIEl0IGlzIGF2YWlsYWJsZSBvbmxpbmUgZm9yCi1vY2Nhc2lvbmFsIHJlZmVyZW5jZSwgb3IgY2FuIGJlIGRvd25sb2FkZWQgaW4gbWFueSBmb3JtYXRzIGZvciBmYXN0ZXIKLWFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uIGlzIGRvd25sb2FkYWJsZSBpbiBIVE1MLCBQb3N0U2NyaXB0LCBQREYsCi1MYVRlWCAodGhyb3VnaCAyLjUpLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCAoMi42KykgZm9ybWF0czsgdGhlIExhVGVYIGFuZAotcmVTdHJ1Y3R1cmVkVGV4dCB2ZXJzaW9ucyBhcmUgcHJpbWFyaWx5IGZvciBkb2N1bWVudGF0aW9uIGF1dGhvcnMsCi10cmFuc2xhdG9ycywgYW5kIHBlb3BsZSB3aXRoIHNwZWNpYWwgZm9ybWF0dGluZyByZXF1aXJlbWVudHMuCitJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIG1hbnkgZm9ybWF0cyBmb3IgZmFzdGVyIGFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uCitpcyBkb3dubG9hZGFibGUgaW4gSFRNTCwgUERGLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXRzOyB0aGUgbGF0dGVyIHZlcnNpb24KK2lzIHByaW1hcmlseSBmb3IgZG9jdW1lbnRhdGlvbiBhdXRob3JzLCB0cmFuc2xhdG9ycywgYW5kIHBlb3BsZSB3aXRoIHNwZWNpYWwKK2Zvcm1hdHRpbmcgcmVxdWlyZW1lbnRzLgogCiAKIENvbnZlcnRpbmcgRnJvbSBQeXRob24gMi54IHRvIDMueAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVB5dGhvbiBzdGFydGluZyB3aXRoIDIuNiB3aWxsIGNvbnRhaW4gZmVhdHVyZXMgdG8gaGVscCBsb2NhdGluZyBjb2RlIHRoYXQKLW5lZWRzIHRvIGJlIGNoYW5nZWQsIHN1Y2ggYXMgb3B0aW9uYWwgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIGZlYXR1cmVzIGFyZQotdXNlZCwgYW5kIGJhY2twb3J0ZWQgdmVyc2lvbnMgb2YgY2VydGFpbiBrZXkgUHl0aG9uIDMueCBmZWF0dXJlcy4KK1B5dGhvbiBzdGFydGluZyB3aXRoIDIuNiBjb250YWlucyBmZWF0dXJlcyB0byBoZWxwIGxvY2F0aW5nIGNvZGUgdGhhdCBuZWVkcyB0bworYmUgY2hhbmdlZCwgc3VjaCBhcyBvcHRpb25hbCB3YXJuaW5ncyB3aGVuIGRlcHJlY2F0ZWQgZmVhdHVyZXMgYXJlIHVzZWQsIGFuZAorYmFja3BvcnRlZCB2ZXJzaW9ucyBvZiBjZXJ0YWluIGtleSBQeXRob24gMy54IGZlYXR1cmVzLgogCiBBIHNvdXJjZS10by1zb3VyY2UgdHJhbnNsYXRpb24gdG9vbCwgIjJ0bzMiLCBjYW4gdGFrZSBjYXJlIG9mIHRoZSBtdW5kYW5lIHRhc2sKIG9mIGNvbnZlcnRpbmcgbGFyZ2UgYW1vdW50cyBvZiBzb3VyY2UgY29kZS4gIEl0IGlzIG5vdCBhIGNvbXBsZXRlIHNvbHV0aW9uIGJ1dAogaXMgY29tcGxlbWVudGVkIGJ5IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5ncyBpbiAyLjYuICBTZWUKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4yL2xpYnJhcnkvMnRvMy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKIFRlc3RpbmcKIC0tLS0tLS0KIAotVG8gdGVzdCB0aGUgaW50ZXJwcmV0ZXIsIHR5cGUgIm1ha2UgdGVzdCIgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCi1UaGlzIHJ1bnMgdGhlIHRlc3Qgc2V0IHR3aWNlIChvbmNlIHdpdGggbm8gY29tcGlsZWQgZmlsZXMsIG9uY2Ugd2l0aAotdGhlIGNvbXBpbGVkIGZpbGVzIGxlZnQgYnkgdGhlIHByZXZpb3VzIHRlc3QgcnVuKS4gIFRoZSB0ZXN0IHNldAotcHJvZHVjZXMgc29tZSBvdXRwdXQuICBZb3UgY2FuIGdlbmVyYWxseSBpZ25vcmUgdGhlIG1lc3NhZ2VzIGFib3V0Ci1za2lwcGVkIHRlc3RzIGR1ZSB0byBvcHRpb25hbCBmZWF0dXJlcyB3aGljaCBjYW4ndCBiZSBpbXBvcnRlZC4KLUlmIGEgbWVzc2FnZSBpcyBwcmludGVkIGFib3V0IGEgZmFpbGVkIHRlc3Qgb3IgYSB0cmFjZWJhY2sgb3IgY29yZQotZHVtcCBpcyBwcm9kdWNlZCwgc29tZXRoaW5nIGlzIHdyb25nLiAgT24gc29tZSBMaW51eCBzeXN0ZW1zICh0aG9zZQotdGhhdCBhcmUgbm90IHlldCB1c2luZyBnbGliYyA2KSwgdGVzdF9zdHJmdGltZSBmYWlscyBkdWUgdG8gYQotbm9uLXN0YW5kYXJkIGltcGxlbWVudGF0aW9uIG9mIHN0cmZ0aW1lKCkgaW4gdGhlIEMgbGlicmFyeS4gUGxlYXNlCi1pZ25vcmUgdGhpcywgb3IgdXBncmFkZSB0byBnbGliYyB2ZXJzaW9uIDYuCitUbyB0ZXN0IHRoZSBpbnRlcnByZXRlciwgdHlwZSAibWFrZSB0ZXN0IiBpbiB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeS4gIFRoaXMgcnVucwordGhlIHRlc3Qgc2V0IHR3aWNlIChvbmNlIHdpdGggbm8gY29tcGlsZWQgZmlsZXMsIG9uY2Ugd2l0aCB0aGUgY29tcGlsZWQgZmlsZXMKK2xlZnQgYnkgdGhlIHByZXZpb3VzIHRlc3QgcnVuKS4gIFRoZSB0ZXN0IHNldCBwcm9kdWNlcyBzb21lIG91dHB1dC4gIFlvdSBjYW4KK2dlbmVyYWxseSBpZ25vcmUgdGhlIG1lc3NhZ2VzIGFib3V0IHNraXBwZWQgdGVzdHMgZHVlIHRvIG9wdGlvbmFsIGZlYXR1cmVzIHdoaWNoCitjYW4ndCBiZSBpbXBvcnRlZC4gIElmIGEgbWVzc2FnZSBpcyBwcmludGVkIGFib3V0IGEgZmFpbGVkIHRlc3Qgb3IgYSB0cmFjZWJhY2sKK29yIGNvcmUgZHVtcCBpcyBwcm9kdWNlZCwgc29tZXRoaW5nIGlzIHdyb25nLgogCiBCeSBkZWZhdWx0LCB0ZXN0cyBhcmUgcHJldmVudGVkIGZyb20gb3ZlcnVzaW5nIHJlc291cmNlcyBsaWtlIGRpc2sgc3BhY2UgYW5kCiBtZW1vcnkuICBUbyBlbmFibGUgdGhlc2UgdGVzdHMsIHJ1biAibWFrZSB0ZXN0YWxsIi4KIAotSU1QT1JUQU5UOiBJZiB0aGUgdGVzdHMgZmFpbCBhbmQgeW91IGRlY2lkZSB0byBtYWlsIGEgYnVnIHJlcG9ydCwKLSpkb24ndCogaW5jbHVkZSB0aGUgb3V0cHV0IG9mICJtYWtlIHRlc3QiLiAgSXQgaXMgdXNlbGVzcy4gIFJ1biB0aGUKLWZhaWxpbmcgdGVzdCBtYW51YWxseSwgYXMgZm9sbG93czoKK0lNUE9SVEFOVDogSWYgdGhlIHRlc3RzIGZhaWwgYW5kIHlvdSBkZWNpZGUgdG8gbWFpbCBhIGJ1ZyByZXBvcnQsICpkb24ndCoKK2luY2x1ZGUgdGhlIG91dHB1dCBvZiAibWFrZSB0ZXN0Ii4gIEl0IGlzIHVzZWxlc3MuICBSdW4gdGhlIGZhaWxpbmcgdGVzdAorbWFudWFsbHksIGFzIGZvbGxvd3M6CiAKLSAgICAgICAgLi9weXRob24gTGliL3Rlc3QvcmVncnRlc3QucHkgLXYgdGVzdF93aGF0ZXZlcgorICAgICAgICAuL3B5dGhvbiAtbSB0ZXN0IC12IHRlc3Rfd2hhdGV2ZXIKIAotKHN1YnN0aXR1dGluZyB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgJy4nIGlmIHlvdSBidWlsdCBpbiBhCi1kaWZmZXJlbnQgZGlyZWN0b3J5KS4gIFRoaXMgcnVucyB0aGUgdGVzdCBpbiB2ZXJib3NlIG1vZGUuCisoc3Vic3RpdHV0aW5nIHRoZSB0b3Agb2YgdGhlIHNvdXJjZSB0cmVlIGZvciAnLicgaWYgeW91IGJ1aWx0IGluIGEgZGlmZmVyZW50CitkaXJlY3RvcnkpLiAgVGhpcyBydW5zIHRoZSB0ZXN0IGluIHZlcmJvc2UgbW9kZS4KIAogCiBJbnN0YWxsaW5nIG11bHRpcGxlIHZlcnNpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIE9uIFVuaXggYW5kIE1hYyBzeXN0ZW1zIGlmIHlvdSBpbnRlbmQgdG8gaW5zdGFsbCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBQeXRob24KLXVzaW5nIHRoZSBzYW1lIGluc3RhbGxhdGlvbiBwcmVmaXggKC0tcHJlZml4IGFyZ3VtZW50IHRvIHRoZSBjb25maWd1cmUKLXNjcmlwdCkgeW91IG11c3QgdGFrZSBjYXJlIHRoYXQgeW91ciBwcmltYXJ5IHB5dGhvbiBleGVjdXRhYmxlIGlzIG5vdAotb3ZlcndyaXR0ZW4gYnkgdGhlIGluc3RhbGxhdGlvbiBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uLiAgQWxsIGZpbGVzIGFuZAotZGlyZWN0b3JpZXMgaW5zdGFsbGVkIHVzaW5nICJtYWtlIGFsdGluc3RhbGwiIGNvbnRhaW4gdGhlIG1ham9yIGFuZCBtaW5vcgotdmVyc2lvbiBhbmQgY2FuIHRodXMgbGl2ZSBzaWRlLWJ5LXNpZGUuICAibWFrZSBpbnN0YWxsIiBhbHNvIGNyZWF0ZXMKLSR7cHJlZml4fS9iaW4vcHl0aG9uMyB3aGljaCByZWZlcnMgdG8gJHtwcmVmaXh9L2Jpbi9weXRob25YLlkuICBJZiB5b3UgaW50ZW5kCi10byBpbnN0YWxsIG11bHRpcGxlIHZlcnNpb25zIHVzaW5nIHRoZSBzYW1lIHByZWZpeCB5b3UgbXVzdCBkZWNpZGUgd2hpY2gKLXZlcnNpb24gKGlmIGFueSkgaXMgeW91ciAicHJpbWFyeSIgdmVyc2lvbi4gIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nCi0ibWFrZSBpbnN0YWxsIi4gIEluc3RhbGwgYWxsIG90aGVyIHZlcnNpb25zIHVzaW5nICJtYWtlIGFsdGluc3RhbGwiLgordXNpbmcgdGhlIHNhbWUgaW5zdGFsbGF0aW9uIHByZWZpeCAoLS1wcmVmaXggYXJndW1lbnQgdG8gdGhlIGNvbmZpZ3VyZSBzY3JpcHQpCit5b3UgbXVzdCB0YWtlIGNhcmUgdGhhdCB5b3VyIHByaW1hcnkgcHl0aG9uIGV4ZWN1dGFibGUgaXMgbm90IG92ZXJ3cml0dGVuIGJ5IHRoZQoraW5zdGFsbGF0aW9uIG9mIGEgZGlmZmVyZW50IHZlcnNpb24uICBBbGwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluc3RhbGxlZCB1c2luZworIm1ha2UgYWx0aW5zdGFsbCIgY29udGFpbiB0aGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gYW5kIGNhbiB0aHVzIGxpdmUKK3NpZGUtYnktc2lkZS4gICJtYWtlIGluc3RhbGwiIGFsc28gY3JlYXRlcyAke3ByZWZpeH0vYmluL3B5dGhvbjMgd2hpY2ggcmVmZXJzIHRvCiske3ByZWZpeH0vYmluL3B5dGhvblguWS4gIElmIHlvdSBpbnRlbmQgdG8gaW5zdGFsbCBtdWx0aXBsZSB2ZXJzaW9ucyB1c2luZyB0aGUKK3NhbWUgcHJlZml4IHlvdSBtdXN0IGRlY2lkZSB3aGljaCB2ZXJzaW9uIChpZiBhbnkpIGlzIHlvdXIgInByaW1hcnkiIHZlcnNpb24uCitJbnN0YWxsIHRoYXQgdmVyc2lvbiB1c2luZyAibWFrZSBpbnN0YWxsIi4gIEluc3RhbGwgYWxsIG90aGVyIHZlcnNpb25zIHVzaW5nCisibWFrZSBhbHRpbnN0YWxsIi4KIAotRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGluc3RhbGwgUHl0aG9uIDIuNSwgMi42IGFuZCAzLjAgd2l0aCAyLjYgYmVpbmcKLXRoZSBwcmltYXJ5IHZlcnNpb24sIHlvdSB3b3VsZCBleGVjdXRlICJtYWtlIGluc3RhbGwiIGluIHlvdXIgMi42IGJ1aWxkCi1kaXJlY3RvcnkgYW5kICJtYWtlIGFsdGluc3RhbGwiIGluIHRoZSBvdGhlcnMuCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi41LCAyLjYgYW5kIDMuMiB3aXRoIDIuNiBiZWluZyB0aGUKK3ByaW1hcnkgdmVyc2lvbiwgeW91IHdvdWxkIGV4ZWN1dGUgIm1ha2UgaW5zdGFsbCIgaW4geW91ciAyLjYgYnVpbGQgZGlyZWN0b3J5CithbmQgIm1ha2UgYWx0aW5zdGFsbCIgaW4gdGhlIG90aGVycy4KIAogCiBJc3N1ZSBUcmFja2VyIGFuZCBNYWlsaW5nIExpc3QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XZSdyZSBzb2xpY2l0aW5nIGJ1ZyByZXBvcnRzIGFib3V0IGFsbCBhc3BlY3RzIG9mIHRoZSBsYW5ndWFnZS4gIEZpeGVzCi1hcmUgYWxzbyB3ZWxjb21lLCBwcmVmZXJhYmxlIGluIHVuaWZpZWQgZGlmZiBmb3JtYXQuICBQbGVhc2UgdXNlIHRoZQotaXNzdWUgdHJhY2tlcjoKK1dlJ3JlIHNvbGljaXRpbmcgYnVnIHJlcG9ydHMgYWJvdXQgYWxsIGFzcGVjdHMgb2YgdGhlIGxhbmd1YWdlLiAgRml4ZXMgYXJlIGFsc28KK3dlbGNvbWUsIHByZWZlcmFibGUgaW4gdW5pZmllZCBkaWZmIGZvcm1hdC4gIFBsZWFzZSB1c2UgdGhlIGlzc3VlIHRyYWNrZXI6CiAKICAgICBodHRwOi8vYnVncy5weXRob24ub3JnLwogCi1JZiB5b3UncmUgbm90IHN1cmUgd2hldGhlciB5b3UncmUgZGVhbGluZyB3aXRoIGEgYnVnIG9yIGEgZmVhdHVyZSwgdXNlCi10aGUgbWFpbGluZyBsaXN0OgorSWYgeW91J3JlIG5vdCBzdXJlIHdoZXRoZXIgeW91J3JlIGRlYWxpbmcgd2l0aCBhIGJ1ZyBvciBhIGZlYXR1cmUsIHVzZSB0aGUKK21haWxpbmcgbGlzdDoKIAogICAgIHB5dGhvbi1kZXZAcHl0aG9uLm9yZwogCkBAIC0xNjMsOCArMTUyLDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSWYgeW91IGhhdmUgYSBwcm9wb3NhbCB0byBjaGFuZ2UgUHl0aG9uLCB5b3UgbWF5IHdhbnQgdG8gc2VuZCBhbiBlbWFpbCB0byB0aGUKLWNvbXAubGFuZy5weXRob24gb3IgcHl0aG9uLWlkZWFzIG1haWxpbmcgbGlzdHMgZm9yIGluaXRhbCBmZWVkYmFjay4gQSBQeXRob24KLUVuaGFuY2VtZW50IFByb3Bvc2FsIChQRVApIG1heSBiZSBzdWJtaXR0ZWQgaWYgeW91ciBpZGVhIGdhaW5zIGdyb3VuZC4gQWxsCitjb21wLmxhbmcucHl0aG9uIG9yIHB5dGhvbi1pZGVhcyBtYWlsaW5nIGxpc3RzIGZvciBpbml0YWwgZmVlZGJhY2suICBBIFB5dGhvbgorRW5oYW5jZW1lbnQgUHJvcG9zYWwgKFBFUCkgbWF5IGJlIHN1Ym1pdHRlZCBpZiB5b3VyIGlkZWEgZ2FpbnMgZ3JvdW5kLiAgQWxsCiBjdXJyZW50IFBFUHMsIGFzIHdlbGwgYXMgZ3VpZGVsaW5lcyBmb3Igc3VibWl0dGluZyBhIG5ldyBQRVAsIGFyZSBsaXN0ZWQgYXQKIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy8uCiAKQEAgLTE3MiwzMiArMTYxLDI3IEBACiBSZWxlYXNlIFNjaGVkdWxlCiAtLS0tLS0tLS0tLS0tLS0tCiAKLVNlZSBQRVAgMzc1IGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDM3NS8KK1NlZSBQRVAgMzkyIGZvciByZWxlYXNlIGRldGFpbHM6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtMDM5Mi8KIAogCiBDb3B5cmlnaHQgYW5kIExpY2Vuc2UgSW5mb3JtYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Db3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKLVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMQorUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1Db3B5cmlnaHQgKGMpIDIwMDAgQmVPcGVuLmNvbS4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDIwMDAgQmVPcGVuLmNvbS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLUNvcHlyaWdodCAoYykgMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMuICBBbGwKK3JpZ2h0cyByZXNlcnZlZC4KIAotQ29weXJpZ2h0IChjKSAxOTkxLTE5OTUgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMTk5MS0xOTk1IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLVNlZSB0aGUgZmlsZSAiTElDRU5TRSIgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBoaXN0b3J5IG9mIHRoaXMKLXNvZnR3YXJlLCB0ZXJtcyAmIGNvbmRpdGlvbnMgZm9yIHVzYWdlLCBhbmQgYSBESVNDTEFJTUVSIE9GIEFMTAotV0FSUkFOVElFUy4KK1NlZSB0aGUgZmlsZSAiTElDRU5TRSIgZm9yIGluZm9ybWF0aW9uIG9uIHRoZSBoaXN0b3J5IG9mIHRoaXMgc29mdHdhcmUsIHRlcm1zICYKK2NvbmRpdGlvbnMgZm9yIHVzYWdlLCBhbmQgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgogCi1UaGlzIFB5dGhvbiBkaXN0cmlidXRpb24gY29udGFpbnMgKm5vKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKEdQTCkgY29kZSwgc28gaXQgbWF5IGJlIHVzZWQgaW4gcHJvcHJpZXRhcnkgcHJvamVjdHMuICBUaGVyZSBhcmUKLWludGVyZmFjZXMgdG8gc29tZSBHTlUgY29kZSBidXQgdGhlc2UgYXJlIGVudGlyZWx5IG9wdGlvbmFsLgorVGhpcyBQeXRob24gZGlzdHJpYnV0aW9uIGNvbnRhaW5zICpubyogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgY29kZSwgc28KK2l0IG1heSBiZSB1c2VkIGluIHByb3ByaWV0YXJ5IHByb2plY3RzLiAgVGhlcmUgYXJlIGludGVyZmFjZXMgdG8gc29tZSBHTlUgY29kZQorYnV0IHRoZXNlIGFyZSBlbnRpcmVseSBvcHRpb25hbC4KIAotQWxsIHRyYWRlbWFya3MgcmVmZXJlbmNlZCBoZXJlaW4gYXJlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUKLWhvbGRlcnMuCitBbGwgdHJhZGVtYXJrcyByZWZlcmVuY2VkIGhlcmVpbiBhcmUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBob2xkZXJzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvUkVBRE1FIGIvVG9vbHMvUkVBRE1FCmluZGV4IGFlOWI1OTIuLmMxZjg5YmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1JFQURNRQorKysgYi9Ub29scy9SRUFETUUKQEAgLTEsMzMgKzEsNDIgQEAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgbnVtYmVyIG9mIFB5dGhvbiBwcm9ncmFtcyB0aGF0IGFyZSB1c2VmdWwKIHdoaWxlIGJ1aWxkaW5nIG9yIGV4dGVuZGluZyBQeXRob24uCiAKLWZhcXdpegkJRkFRIFdpemFyZC4KLQkJU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9jZ2ktYmluL2ZhcXcucHkKLQkJZm9yIGEgbGl2ZSBleGFtcGxlLgorYnVpbGRib3QgICAgICAgIEJhdGNoZmlsZXMgZm9yIHJ1bm5pbmcgb24gV2luZG93cyBidWlsZHNsYXZlcy4KIAotZnJlZXplCQlDcmVhdGUgYSBzdGFuZC1hbG9uZSBleGVjdXRhYmxlIGZyb20gYSBQeXRob24gcHJvZ3JhbS4KK2NjYmVuY2ggICAgICAgICBBIFB5dGhvbiBjb25jdXJyZW5jeSBiZW5jaG1hcmsuCiAKLWkxOG4JCVRvb2xzIGZvciBpbnRlcm5hdGlvbmFsaXphdGlvbi4gcHlnZXR0ZXh0LnB5IAotCQlwYXJzZXMgUHl0aG9uIHNvdXJjZSBjb2RlIGFuZCBnZW5lcmF0ZXMgLnBvdCBmaWxlcywKLQkJYW5kIG1zZ2ZtdC5weSBnZW5lcmF0ZXMgYSBiaW5hcnkgbWVzc2FnZSBjYXRhbG9nIAotCQlmcm9tIGEgY2F0YWxvZyBpbiB0ZXh0IGZvcm1hdC4KK2RlbW8gICAgICAgICAgICBTZXZlcmFsIFB5dGhvbiBwcm9ncmFtbWluZyBkZW1vcy4KIAotbW9kdWxhdG9yCUludGVyYWN0aXZlbHkgZ2VuZXJhdGUgYm9pbGVyIHBsYXRlIGZvciBhbiBleHRlbnNpb24KLQkJbW9kdWxlLgkgV29ya3MgZWFzaWVzdCBpZiB5b3UgaGF2ZSBUay4KK2ZyZWV6ZSAgICAgICAgICBDcmVhdGUgYSBzdGFuZC1hbG9uZSBleGVjdXRhYmxlIGZyb20gYSBQeXRob24gcHJvZ3JhbS4KIAotcHluY2hlCQlBIFRraW50ZXItYmFzZWQgY29sb3IgZWRpdG9yLgorZ2RiICAgICAgICAgICAgIFB5dGhvbiBjb2RlIHRvIGJlIHJ1biBpbnNpZGUgZ2RiLCB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICAgICAgICAgIGRlYnVnIFB5dGhvbiBpdHNlbGYgKGJ5IERhdmlkIE1hbGNvbG0pLgorCitpMThuICAgICAgICAgICAgVG9vbHMgZm9yIGludGVybmF0aW9uYWxpemF0aW9uLiBweWdldHRleHQucHkKKyAgICAgICAgICAgICAgICBwYXJzZXMgUHl0aG9uIHNvdXJjZSBjb2RlIGFuZCBnZW5lcmF0ZXMgLnBvdCBmaWxlcywKKyAgICAgICAgICAgICAgICBhbmQgbXNnZm10LnB5IGdlbmVyYXRlcyBhIGJpbmFyeSBtZXNzYWdlIGNhdGFsb2cKKyAgICAgICAgICAgICAgICBmcm9tIGEgY2F0YWxvZyBpbiB0ZXh0IGZvcm1hdC4KKworaW9iZW5jaCAgICAgICAgIEJlbmNobWFyayBmb3IgdGhlIG5ldyBQeXRob24gSS9PIHN5c3RlbS4KKworbXNpICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHBhY2thZ2luZyBQeXRob24gYXMgYW4gTVNJIHBhY2thZ2Ugb24gV2luZG93cy4KKworcGFyc2VyICAgICAgICAgIFVuLXBhcnNpbmcgdG9vbCB0byBnZW5lcmF0ZSBjb2RlIGZyb20gYW4gQVNULgorCitweWJlbmNoICAgICAgICAgQ29tcHJlaGVuc2l2ZSBQeXRob24gYmVuY2htYXJraW5nIHN1aXRlLgorCitweW5jaGUgICAgICAgICAgQSBUa2ludGVyLWJhc2VkIGNvbG9yIGVkaXRvci4KIAogc2NyaXB0cyAgICAgICAgIEEgbnVtYmVyIG9mIHVzZWZ1bCBzaW5nbGUtZmlsZSBwcm9ncmFtcywgZS5nLiB0YWJuYW5ueS5weQogICAgICAgICAgICAgICAgIGJ5IFRpbSBQZXRlcnMsIHdoaWNoIGNoZWNrcyBmb3IgaW5jb25zaXN0ZW50IG1peGluZyBvZgogICAgICAgICAgICAgICAgIHRhYnMgYW5kIHNwYWNlcywgYW5kIDJ0bzMsIHdoaWNoIGNvbnZlcnRzIFB5dGhvbiAyIGNvZGUKICAgICAgICAgICAgICAgICB0byBQeXRob24gMyBjb2RlLgogCi11bmljb2RlCQlUb29scyB1c2VkIHRvIGdlbmVyYXRlIHVuaWNvZGUgZGF0YWJhc2UgZmlsZXMgZm9yCi0JCVB5dGhvbiAyLjAgKGJ5IEZyZWRyaWsgTHVuZGgpLgordGVzdDJ0bzMgICAgICAgIEEgZGVtb25zdHJhdGlvbiBvZiBob3cgdG8gdXNlIDJ0bzMgdHJhbnNwYXJlbnRseSBpbiBzZXR1cC5weS4KIAotd2ViY2hlY2tlcglBIGxpbmsgY2hlY2tlciBmb3Igd2ViIHNpdGVzLgordW5pY29kZSAgICAgICAgIFRvb2xzIGZvciBnZW5lcmF0aW5nIHVuaWNvZGVkYXRhIGFuZCBjb2RlY3MgZnJvbSB1bmljb2RlLm9yZworICAgICAgICAgICAgICAgIGFuZCBvdGhlciBtYXBwaW5nIGZpbGVzIChieSBGcmVkcmlrIEx1bmRoLCBNYXJjLUFuZHJlIExlbWJ1cmcKKyAgICAgICAgICAgICAgICBhbmQgTWFydGluIHZvbiBMb2V3aXMpLgogCi13b3JsZAkJU2NyaXB0IHRvIHRha2UgYSBsaXN0IG9mIEludGVybmV0IGFkZHJlc3NlcyBhbmQgcHJpbnQKLQkJb3V0IHdoZXJlIGluIHRoZSB3b3JsZCB0aG9zZSBhZGRyZXNzZXMgb3JpZ2luYXRlIGZyb20sCi0JCWJhc2VkIG9uIHRoZSB0b3AtbGV2ZWwgZG9tYWluIGNvdW50cnkgY29kZSBmb3VuZCBpbgotCQl0aGUgYWRkcmVzcy4gCit1bml0dGVzdGd1aSAgICAgQSBUa2ludGVyIGJhc2VkIEdVSSB0ZXN0IHJ1bm5lciBmb3IgdW5pdHRlc3QsIHdpdGggdGVzdAorICAgICAgICAgICAgICAgIGRpc2NvdmVyeS4KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdAppbmRleCA5ZmIzNWU5Li43MTU4MDVhIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9jbGVhbi1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvY2xlYW4tYW1kNjQuYmF0CkBAIC0xLDcgKzEsMTAgQEAKIEByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImNsZWFuIiBzdGVwLgogY2FsbCAiJVZTOTBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAotY2QgUENidWlsZAogQGVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgogZGVsIC9zIExpYlwqLnB5YyBMaWJcKi5weW8KK0BlY2hvIERlbGV0aW5nIHRlc3QgbGVmdG92ZXJzIC4uLgorcm1kaXIgL3MgL3EgYnVpbGQKK2NkIFBDYnVpbGQKIHZjYnVpbGQgL2NsZWFuIHBjYnVpbGQuc2xuICJSZWxlYXNlfHg2NCIKIHZjYnVpbGQgL2NsZWFuIHBjYnVpbGQuc2xuICJEZWJ1Z3x4NjQiCitjZCAuLgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvY2xlYW4uYmF0IGIvVG9vbHMvYnVpbGRib3QvY2xlYW4uYmF0CmluZGV4IGVjNzE4MDQuLjVjOGYzM2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2NsZWFuLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9jbGVhbi5iYXQKQEAgLTIsNiArMiw5IEBACiBjYWxsICIlVlM5MENPTU5UT09MUyV2c3ZhcnMzMi5iYXQiCiBAZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uCiBkZWwgL3MgTGliXCoucHljIExpYlwqLnB5bworQGVjaG8gRGVsZXRpbmcgdGVzdCBsZWZ0b3ZlcnMgLi4uCitybWRpciAvcyAvcSBidWlsZAogY2QgUENidWlsZAogdmNidWlsZCAvY2xlYW4gcGNidWlsZC5zbG4gIlJlbGVhc2V8V2luMzIiCiB2Y2J1aWxkIC9jbGVhbiBwY2J1aWxkLnNsbiAiRGVidWd8V2luMzIiCitjZCAuLgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IDFjYjJjZTcuLjk1NDIzOGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTUsMTcgKzUsMTcgQEAKIGNhbGwgIiVWUzkwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODZfYW1kNjQKIAogaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRjbDg1Zy5kbGwgKAotICAgIGNkIHRjbC04LjUuMi4xXHdpbgorICAgIGNkIHRjbC04LjUuOS4wXHdpbgogICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIAogaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjIuMFx3aW4gICAgCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMi4xIGNsZWFuCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuMi4xIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjIuMSBpbnN0YWxsCisgICAgY2QgdGstOC41LjkuMFx3aW4gICAgCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuOS4wIGNsZWFuCisgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgVENMRElSPS4uXC4uXHRjbC04LjUuOS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjkuMCBpbnN0YWxsCiAgICAgY2QgLi5cLi4KICkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKaW5kZXggOGJlZWUxNC4uMWZmMjgyZSAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtY29tbW9uLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CkBAIC0xNCw4ICsxNCw4IEBACiBAcmVtIGlmIGV4aXN0IHRrOC40LjE2IHJkIC9zL3EgdGs4LjQuMTYKIEByZW0gaWYgZXhpc3QgdGstOC40LjE4LjEgcmQgL3MvcSB0ay04LjQuMTguMQogQHJlbSBpZiBleGlzdCBkYi00LjQuMjAgcmQgL3MvcSBkYi00LjQuMjAKLUByZW0gaWYgZXhpc3Qgb3BlbnNzbC0wLjkuOGwgcmQgL3MvcSBvcGVuc3NsLTAuOS44bAotQHJlbSBpZiBleGlzdCBzcWxpdGUtMy41LjkgcmQgL3MvcSBzcWxpdGUtMy41LjkgICAgCitAcmVtIGlmIGV4aXN0IG9wZW5zc2wtMS4wLjBhIHJkIC9zL3Egb3BlbnNzbC0xLjAuMGEKK0ByZW0gaWYgZXhpc3Qgc3FsaXRlLTMuNy40IHJkIC9zL3Egc3FsaXRlLTMuNy40ICAgIAogCiBAcmVtIGJ6aXAKIGlmIG5vdCBleGlzdCBiemlwMi0xLjAuNSAoCkBAIC0yNywxNyArMjcsMTcgQEAKIGlmIG5vdCBleGlzdCBkYi00LjQuMjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvZGItNC40LjIwLXZzOSBkYi00LjQuMjAKIAogQHJlbSBPcGVuU1NMCi1pZiBub3QgZXhpc3Qgb3BlbnNzbC0wLjkuOGwgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0wLjkuOGwKK2lmIG5vdCBleGlzdCBvcGVuc3NsLTEuMC4wYSBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4wYQogCiBAcmVtIHRjbC90awotaWYgbm90IGV4aXN0IHRjbC04LjUuMi4xICgKK2lmIG5vdCBleGlzdCB0Y2wtOC41LjkuMCAoCiAgICByZCAvcy9xIHRjbHRrIHRjbHRrNjQKLSAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3RjbC04LjUuMi4xCisgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjkuMAogKQotaWYgbm90IGV4aXN0IHRrLTguNS4yLjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjIuMAoraWYgbm90IGV4aXN0IHRrLTguNS45LjAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGstOC41LjkuMAogCiBAcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy41LjkgKAotICByZCAvcy9xIHNxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvc3FsaXRlLTMuNS45CitpZiBub3QgZXhpc3Qgc3FsaXRlLTMuNy40ICgKKyAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNi4yMQorICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtMy43LjQKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAppbmRleCBkOTBlOGNlLi5lOTU4ZmQ2IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CkBAIC02LDE2ICs2LDE2IEBACiAKIGlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGNsODVnLmRsbCAoCiAgICAgQHJlbSBhbGwgYW5kIGluc3RhbGwgbmVlZCB0byBiZSBzZXBhcmF0ZSBpbnZvY2F0aW9ucywgb3RoZXJ3aXNlIG5tYWtlaGxwIGlzIG5vdCBmb3VuZCBvbiBpbnN0YWxsCi0gICAgY2QgdGNsLTguNS4yLjFcd2luCisgICAgY2QgdGNsLTguNS45LjBcd2luCiAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAogICAgIGNkIC4uXC4uCiApCiAKIGlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMi4wXHdpbiAgICAKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjIuMSBjbGVhbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMi4xIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuMi4xIGluc3RhbGwKKyAgICBjZCB0ay04LjUuOS4wXHdpbiAgICAKKyAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjkuMCBjbGVhbgorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuOS4wIGFsbAorICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgVENMRElSPS4uXC4uXHRjbC04LjUuOS4wIGluc3RhbGwKICAgICBjZCAuLlwuLgogKQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAppbmRleCAxNmMwN2ZiLi41ODgyZGVmIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdApAQCAtMSw0ICsxLDQgQEAKIEByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuCiBjZCBQQ2J1aWxkCi1jYWxsIHJ0LmJhdCAtZCAtcSAtdWFsbCAtcncgLW4KK2NhbGwgcnQuYmF0IC1kIC1xIC11YWxsIC1yd1cgLW4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvY2NiZW5jaC9jY2JlbmNoLnB5IGIvVG9vbHMvY2NiZW5jaC9jY2JlbmNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNzExOGYKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jY2JlbmNoL2NjYmVuY2gucHkKQEAgLTAsMCArMSw2MTIgQEAKKyMgVGhpcyBmaWxlIHNob3VsZCBiZSBrZXB0IGNvbXBhdGlibGUgd2l0aCBib3RoIFB5dGhvbiAyLjYgYW5kIFB5dGhvbiA+PSAzLjAuCisKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24KK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKworIiIiCitjY2JlbmNoLCBhIFB5dGhvbiBjb25jdXJyZW5jeSBiZW5jaG1hcmsuCisiIiIKKworaW1wb3J0IHRpbWUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzb2NrZXQKK2Zyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlciwgU1VQUFJFU1NfSEVMUAoraW1wb3J0IHBsYXRmb3JtCisKKyMgQ29tcGF0aWJpbGl0eQordHJ5OgorICAgIHhyYW5nZQorZXhjZXB0IE5hbWVFcnJvcjoKKyAgICB4cmFuZ2UgPSByYW5nZQorCit0cnk6CisgICAgbWFwID0gaXRlcnRvb2xzLmltYXAKK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBwYXNzCisKKworVEhST1VHSFBVVF9EVVJBVElPTiA9IDIuMAorCitMQVRFTkNZX1BJTkdfSU5URVJWQUwgPSAwLjEKK0xBVEVOQ1lfRFVSQVRJT04gPSAyLjAKKworQkFORFdJRFRIX1BBQ0tFVF9TSVpFID0gMTAyNAorQkFORFdJRFRIX0RVUkFUSU9OID0gMi4wCisKKworZGVmIHRhc2tfcGlkaWdpdHMoKToKKyAgICAiIiJQaSBjYWxjdWxhdGlvbiAoUHl0aG9uKSIiIgorICAgIF9tYXAgPSBtYXAKKyAgICBfY291bnQgPSBpdGVydG9vbHMuY291bnQKKyAgICBfaXNsaWNlID0gaXRlcnRvb2xzLmlzbGljZQorCisgICAgZGVmIGNhbGNfbmRpZ2l0cyhuKToKKyAgICAgICAgIyBGcm9tIGh0dHA6Ly9zaG9vdG91dC5hbGlvdGguZGViaWFuLm9yZy8KKyAgICAgICAgZGVmIGdlbl94KCk6CisgICAgICAgICAgICByZXR1cm4gX21hcChsYW1iZGEgazogKGssIDQqayArIDIsIDAsIDIqayArIDEpLCBfY291bnQoMSkpCisKKyAgICAgICAgZGVmIGNvbXBvc2UoYSwgYik6CisgICAgICAgICAgICBhcSwgYXIsIGFzXywgYXQgPSBhCisgICAgICAgICAgICBicSwgYnIsIGJzLCBidCA9IGIKKyAgICAgICAgICAgIHJldHVybiAoYXEgKiBicSwKKyAgICAgICAgICAgICAgICAgICAgYXEgKiBiciArIGFyICogYnQsCisgICAgICAgICAgICAgICAgICAgIGFzXyAqIGJxICsgYXQgKiBicywKKyAgICAgICAgICAgICAgICAgICAgYXNfICogYnIgKyBhdCAqIGJ0KQorCisgICAgICAgIGRlZiBleHRyYWN0KHosIGopOgorICAgICAgICAgICAgcSwgciwgcywgdCA9IHoKKyAgICAgICAgICAgIHJldHVybiAocSpqICsgcikgLy8gKHMqaiArIHQpCisKKyAgICAgICAgZGVmIHBpX2RpZ2l0cygpOgorICAgICAgICAgICAgeiA9ICgxLCAwLCAwLCAxKQorICAgICAgICAgICAgeCA9IGdlbl94KCkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgeSA9IGV4dHJhY3QoeiwgMykKKyAgICAgICAgICAgICAgICB3aGlsZSB5ICE9IGV4dHJhY3QoeiwgNCk6CisgICAgICAgICAgICAgICAgICAgIHogPSBjb21wb3NlKHosIG5leHQoeCkpCisgICAgICAgICAgICAgICAgICAgIHkgPSBleHRyYWN0KHosIDMpCisgICAgICAgICAgICAgICAgeiA9IGNvbXBvc2UoKDEwLCAtMTAqeSwgMCwgMSksIHopCisgICAgICAgICAgICAgICAgeWllbGQgeQorCisgICAgICAgIHJldHVybiBsaXN0KF9pc2xpY2UocGlfZGlnaXRzKCksIG4pKQorCisgICAgcmV0dXJuIGNhbGNfbmRpZ2l0cywgKDUwLCApCisKK2RlZiB0YXNrX3JlZ2V4KCk6CisgICAgIiIicmVndWxhciBleHByZXNzaW9uIChDKSIiIgorICAgICMgWFhYIHRoaXMgdGFzayBnaXZlcyBob3JyZW5kb3VzIGxhdGVuY3kgcmVzdWx0cy4KKyAgICBpbXBvcnQgcmUKKyAgICAjIFRha2VuIGZyb20gdGhlIGBpbnNwZWN0YCBtb2R1bGUKKyAgICBwYXQgPSByZS5jb21waWxlKHInXihccypkZWZccyl8KC4qKD88IVx3KWxhbWJkYSg6fFxzKSl8XihccypAKScsIHJlLk1VTFRJTElORSkKKyAgICB3aXRoIG9wZW4oX19maWxlX18sICJyIikgYXMgZjoKKyAgICAgICAgYXJnID0gZi5yZWFkKDIwMDApCisKKyAgICBkZWYgZmluZGFsbChzKToKKyAgICAgICAgdCA9IHRpbWUudGltZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBwYXQuZmluZGFsbChzKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcHJpbnQodGltZS50aW1lKCkgLSB0KQorICAgIHJldHVybiBwYXQuZmluZGFsbCwgKGFyZywgKQorCitkZWYgdGFza19zb3J0KCk6CisgICAgIiIibGlzdCBzb3J0aW5nIChDKSIiIgorICAgIGRlZiBsaXN0X3NvcnQobCk6CisgICAgICAgIGwgPSBsWzo6LTFdCisgICAgICAgIGwuc29ydCgpCisKKyAgICByZXR1cm4gbGlzdF9zb3J0LCAobGlzdChyYW5nZSgxMDAwKSksICkKKworZGVmIHRhc2tfY29tcHJlc3NfemxpYigpOgorICAgICIiInpsaWIgY29tcHJlc3Npb24gKEMpIiIiCisgICAgaW1wb3J0IHpsaWIKKyAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgIGFyZyA9IGYucmVhZCg1MDAwKSAqIDMKKworICAgIGRlZiBjb21wcmVzcyhzKToKKyAgICAgICAgemxpYi5kZWNvbXByZXNzKHpsaWIuY29tcHJlc3MocywgNSkpCisgICAgcmV0dXJuIGNvbXByZXNzLCAoYXJnLCApCisKK2RlZiB0YXNrX2NvbXByZXNzX2J6MigpOgorICAgICIiImJ6MiBjb21wcmVzc2lvbiAoQykiIiIKKyAgICBpbXBvcnQgYnoyCisgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICBhcmcgPSBmLnJlYWQoMzAwMCkgKiAyCisKKyAgICBkZWYgY29tcHJlc3Mocyk6CisgICAgICAgIGJ6Mi5jb21wcmVzcyhzKQorICAgIHJldHVybiBjb21wcmVzcywgKGFyZywgKQorCitkZWYgdGFza19oYXNoaW5nKCk6CisgICAgIiIiU0hBMSBoYXNoaW5nIChDKSIiIgorICAgIGltcG9ydCBoYXNobGliCisgICAgd2l0aCBvcGVuKF9fZmlsZV9fLCAicmIiKSBhcyBmOgorICAgICAgICBhcmcgPSBmLnJlYWQoNTAwMCkgKiAzMAorCisgICAgZGVmIGNvbXB1dGUocyk6CisgICAgICAgIGhhc2hsaWIuc2hhMShzKS5kaWdlc3QoKQorICAgIHJldHVybiBjb21wdXRlLCAoYXJnLCApCisKKwordGhyb3VnaHB1dF90YXNrcyA9IFt0YXNrX3BpZGlnaXRzLCB0YXNrX3JlZ2V4XQorZm9yIG1vZCBpbiAnYnoyJywgJ2hhc2hsaWInOgorICAgIHRyeToKKyAgICAgICAgZ2xvYmFscygpW21vZF0gPSBfX2ltcG9ydF9fKG1vZCkKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGdsb2JhbHMoKVttb2RdID0gTm9uZQorCisjIEZvciB3aGF0ZXZlciByZWFzb25zLCB6bGliIGdpdmVzIGlycmVndWxhciByZXN1bHRzLCBzbyB3ZSBwcmVmZXIgYnoyIG9yCisjIGhhc2hsaWIgaWYgYXZhaWxhYmxlLgorIyAoTk9URTogaGFzaGxpYiByZWxlYXNlcyB0aGUgR0lMIGZyb20gMi43IGFuZCAzLjEgb253YXJkcykKK2lmIGJ6MiBpcyBub3QgTm9uZToKKyAgICB0aHJvdWdocHV0X3Rhc2tzLmFwcGVuZCh0YXNrX2NvbXByZXNzX2J6MikKK2VsaWYgaGFzaGxpYiBpcyBub3QgTm9uZToKKyAgICB0aHJvdWdocHV0X3Rhc2tzLmFwcGVuZCh0YXNrX2hhc2hpbmcpCitlbHNlOgorICAgIHRocm91Z2hwdXRfdGFza3MuYXBwZW5kKHRhc2tfY29tcHJlc3NfemxpYikKKworbGF0ZW5jeV90YXNrcyA9IHRocm91Z2hwdXRfdGFza3MKK2JhbmR3aWR0aF90YXNrcyA9IFt0YXNrX3BpZGlnaXRzXQorCisKK2NsYXNzIFRpbWVkTG9vcDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgYXJncyk6CisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHN0YXJ0X3RpbWUsIG1pbl9kdXJhdGlvbiwgZW5kX2V2ZW50LCBkb195aWVsZD1GYWxzZSk6CisgICAgICAgIHN0ZXAgPSAyMAorICAgICAgICBuaXRlcnMgPSAwCisgICAgICAgIGR1cmF0aW9uID0gMC4wCisgICAgICAgIF90aW1lID0gdGltZS50aW1lCisgICAgICAgIF9zbGVlcCA9IHRpbWUuc2xlZXAKKyAgICAgICAgX2Z1bmMgPSBzZWxmLmZ1bmMKKyAgICAgICAgX2FyZ3MgPSBzZWxmLmFyZ3MKKyAgICAgICAgdDEgPSBzdGFydF90aW1lCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShzdGVwKToKKyAgICAgICAgICAgICAgICBfZnVuYygqX2FyZ3MpCisgICAgICAgICAgICB0MiA9IF90aW1lKCkKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciB0aHJlYWQgdGVybWluYXRlZCwgdGhlIGN1cnJlbnQgbWVhc3VyZW1lbnQgaXMgaW52YWxpZAorICAgICAgICAgICAgIyA9PiByZXR1cm4gdGhlIHByZXZpb3VzIG9uZS4KKyAgICAgICAgICAgIGlmIGVuZF9ldmVudDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbml0ZXJzLCBkdXJhdGlvbgorICAgICAgICAgICAgbml0ZXJzICs9IHN0ZXAKKyAgICAgICAgICAgIGR1cmF0aW9uID0gdDIgLSBzdGFydF90aW1lCisgICAgICAgICAgICBpZiBkdXJhdGlvbiA+PSBtaW5fZHVyYXRpb246CisgICAgICAgICAgICAgICAgZW5kX2V2ZW50LmFwcGVuZChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBuaXRlcnMsIGR1cmF0aW9uCisgICAgICAgICAgICBpZiB0MiAtIHQxIDwgMC4wMToKKyAgICAgICAgICAgICAgICAjIE1pbmltaXplIGludGVyZmVyZW5jZSBvZiBtZWFzdXJlbWVudCBvbiBvdmVyYWxsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICBzdGVwID0gc3RlcCAqIDMgLy8gMgorICAgICAgICAgICAgZWxpZiBkb195aWVsZDoKKyAgICAgICAgICAgICAgICAjIE9TIHNjaGVkdWxpbmcgb2YgUHl0aG9uIHRocmVhZHMgaXMgc29tZXRpbWVzIHNvIGJhZCB0aGF0IHdlCisgICAgICAgICAgICAgICAgIyBoYXZlIHRvIGZvcmNlIHRocmVhZCBzd2l0Y2hpbmcgb3Vyc2VsdmVzLCBvdGhlcndpc2Ugd2UgZ2V0CisgICAgICAgICAgICAgICAgIyBjb21wbGV0ZWx5IHVzZWxlc3MgcmVzdWx0cy4KKyAgICAgICAgICAgICAgICBfc2xlZXAoMC4wMDAxKQorICAgICAgICAgICAgdDEgPSB0MgorCisKK2RlZiBydW5fdGhyb3VnaHB1dF90ZXN0KGZ1bmMsIGFyZ3MsIG50aHJlYWRzKToKKyAgICBhc3NlcnQgbnRocmVhZHMgPj0gMQorCisgICAgIyBXYXJtIHVwCisgICAgZnVuYygqYXJncykKKworICAgIHJlc3VsdHMgPSBbXQorICAgIGxvb3AgPSBUaW1lZExvb3AoZnVuYywgYXJncykKKyAgICBlbmRfZXZlbnQgPSBbXQorCisgICAgaWYgbnRocmVhZHMgPT0gMToKKyAgICAgICAgIyBQdXJlIHNpbmdsZS10aHJlYWRlZCBwZXJmb3JtYW5jZSwgd2l0aG91dCBhbnkgc3dpdGNoaW5nIG9yCisgICAgICAgICMgc3luY2hyb25pemF0aW9uIG92ZXJoZWFkLgorICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobG9vcChzdGFydF90aW1lLCBUSFJPVUdIUFVUX0RVUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZF9ldmVudCwgZG9feWllbGQ9RmFsc2UpKQorICAgICAgICByZXR1cm4gcmVzdWx0cworCisgICAgc3RhcnRlZCA9IEZhbHNlCisgICAgcmVhZHlfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgIHN0YXJ0X2NvbmQgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKyAgICByZWFkeSA9IFtdCisKKyAgICBkZWYgcnVuKCk6CisgICAgICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgICAgIHJlYWR5LmFwcGVuZChOb25lKQorICAgICAgICAgICAgcmVhZHlfY29uZC5ub3RpZnkoKQorICAgICAgICB3aXRoIHN0YXJ0X2NvbmQ6CisgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzdGFydF9jb25kLndhaXQoKQorICAgICAgICByZXN1bHRzLmFwcGVuZChsb29wKHN0YXJ0X3RpbWUsIFRIUk9VR0hQVVRfRFVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX2V2ZW50LCBkb195aWVsZD1UcnVlKSkKKworICAgIHRocmVhZHMgPSBbXQorICAgIGZvciBpIGluIHJhbmdlKG50aHJlYWRzKToKKyAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKSkKKyAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICB0LnNldERhZW1vbihUcnVlKQorICAgICAgICB0LnN0YXJ0KCkKKyAgICAjIFdlIGRvbid0IHdhbnQgbWVhc3VyZW1lbnRzIHRvIGluY2x1ZGUgdGhyZWFkIHN0YXJ0dXAgb3ZlcmhlYWQsCisgICAgIyBzbyB3ZSBhcnJhbmdlIGZvciB0aW1pbmcgdG8gc3RhcnQgYWZ0ZXIgYWxsIHRocmVhZHMgYXJlIHJlYWR5LgorICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgd2hpbGUgbGVuKHJlYWR5KSA8IG50aHJlYWRzOgorICAgICAgICAgICAgcmVhZHlfY29uZC53YWl0KCkKKyAgICB3aXRoIHN0YXJ0X2NvbmQ6CisgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICBzdGFydGVkID0gVHJ1ZQorICAgICAgICBzdGFydF9jb25kLm5vdGlmeShudGhyZWFkcykKKyAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICB0LmpvaW4oKQorCisgICAgcmV0dXJuIHJlc3VsdHMKKworZGVmIHJ1bl90aHJvdWdocHV0X3Rlc3RzKG1heF90aHJlYWRzKToKKyAgICBmb3IgdGFzayBpbiB0aHJvdWdocHV0X3Rhc2tzOgorICAgICAgICBwcmludCh0YXNrLl9fZG9jX18pCisgICAgICAgIHByaW50KCkKKyAgICAgICAgZnVuYywgYXJncyA9IHRhc2soKQorICAgICAgICBudGhyZWFkcyA9IDEKKyAgICAgICAgYmFzZWxpbmVfc3BlZWQgPSBOb25lCisgICAgICAgIHdoaWxlIG50aHJlYWRzIDw9IG1heF90aHJlYWRzOgorICAgICAgICAgICAgcmVzdWx0cyA9IHJ1bl90aHJvdWdocHV0X3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpCisgICAgICAgICAgICAjIFRha2luZyB0aGUgbWF4IGR1cmF0aW9uIHJhdGhlciB0aGFuIGF2ZXJhZ2UgZ2l2ZXMgcGVzc2ltaXN0aWMKKyAgICAgICAgICAgICMgcmVzdWx0cyByYXRoZXIgdGhhbiBvcHRpbWlzdGljLgorICAgICAgICAgICAgc3BlZWQgPSBzdW0oclswXSBmb3IgciBpbiByZXN1bHRzKSAvIG1heChyWzFdIGZvciByIGluIHJlc3VsdHMpCisgICAgICAgICAgICBwcmludCgidGhyZWFkcz0lZDogJWQiICUgKG50aHJlYWRzLCBzcGVlZCksIGVuZD0iIikKKyAgICAgICAgICAgIGlmIGJhc2VsaW5lX3NwZWVkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcHJpbnQoIiBpdGVyYXRpb25zL3MuIikKKyAgICAgICAgICAgICAgICBiYXNlbGluZV9zcGVlZCA9IHNwZWVkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50KCIgKCAlZCAlJSkiICUgKHNwZWVkIC8gYmFzZWxpbmVfc3BlZWQgKiAxMDApKQorICAgICAgICAgICAgbnRocmVhZHMgKz0gMQorICAgICAgICBwcmludCgpCisKKworTEFUX0VORCA9ICJFTkQiCisKK2RlZiBfc2VuZHRvKHNvY2ssIHMsIGFkZHIpOgorICAgIHNvY2suc2VuZHRvKHMuZW5jb2RlKCdhc2NpaScpLCBhZGRyKQorCitkZWYgX3JlY3Yoc29jaywgbik6CisgICAgcmV0dXJuIHNvY2sucmVjdihuKS5kZWNvZGUoJ2FzY2lpJykKKworZGVmIGxhdGVuY3lfY2xpZW50KGFkZHIsIG5iX3BpbmdzLCBpbnRlcnZhbCk6CisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHRyeToKKyAgICAgICAgX3RpbWUgPSB0aW1lLnRpbWUKKyAgICAgICAgX3NsZWVwID0gdGltZS5zbGVlcAorICAgICAgICBkZWYgX3BpbmcoKToKKyAgICAgICAgICAgIF9zZW5kdG8oc29jaywgIiVyXG4iICUgX3RpbWUoKSwgYWRkcikKKyAgICAgICAgIyBUaGUgZmlyc3QgcGluZyBzaWduYWxzIHRoZSBwYXJlbnQgcHJvY2VzcyB0aGF0IHdlIGFyZSByZWFkeS4KKyAgICAgICAgX3BpbmcoKQorICAgICAgICAjIFdlIGdpdmUgdGhlIHBhcmVudCBhIGJpdCBvZiB0aW1lIHRvIG5vdGljZS4KKyAgICAgICAgX3NsZWVwKDEuMCkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobmJfcGluZ3MpOgorICAgICAgICAgICAgX3NsZWVwKGludGVydmFsKQorICAgICAgICAgICAgX3BpbmcoKQorICAgICAgICBfc2VuZHRvKHNvY2ssIExBVF9FTkQgKyAiXG4iLCBhZGRyKQorICAgIGZpbmFsbHk6CisgICAgICAgIHNvY2suY2xvc2UoKQorCitkZWYgcnVuX2xhdGVuY3lfY2xpZW50KCoqa3dhcmdzKToKKyAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgb3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKV0KKyAgICBjbWRfbGluZS5leHRlbmQoWyctLWxhdGNsaWVudCcsIHJlcHIoa3dhcmdzKV0pCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUpICMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgcnVuX2xhdGVuY3lfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcyk6CisgICAgIyBDcmVhdGUgYSBsaXN0ZW5pbmcgc29ja2V0IHRvIHJlY2VpdmUgdGhlIHBpbmdzLiBXZSB1c2UgVURQIHdoaWNoIHNob3VsZAorICAgICMgYmUgcGFpbmxlc3NseSBjcm9zcy1wbGF0Zm9ybS4KKyAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCisgICAgc29jay5iaW5kKCgiMTI3LjAuMC4xIiwgMCkpCisgICAgYWRkciA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgaW50ZXJ2YWwgPSBMQVRFTkNZX1BJTkdfSU5URVJWQUwKKyAgICBkdXJhdGlvbiA9IExBVEVOQ1lfRFVSQVRJT04KKyAgICBuYl9waW5ncyA9IGludChkdXJhdGlvbiAvIGludGVydmFsKQorCisgICAgcmVzdWx0cyA9IFtdCisgICAgdGhyZWFkcyA9IFtdCisgICAgZW5kX2V2ZW50ID0gW10KKyAgICBzdGFydF9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisgICAgc3RhcnRlZCA9IEZhbHNlCisgICAgaWYgbnRocmVhZHMgPiAwOgorICAgICAgICAjIFdhcm0gdXAKKyAgICAgICAgZnVuYygqYXJncykKKworICAgICAgICByZXN1bHRzID0gW10KKyAgICAgICAgbG9vcCA9IFRpbWVkTG9vcChmdW5jLCBhcmdzKQorICAgICAgICByZWFkeSA9IFtdCisgICAgICAgIHJlYWR5X2NvbmQgPSB0aHJlYWRpbmcuQ29uZGl0aW9uKCkKKworICAgICAgICBkZWYgcnVuKCk6CisgICAgICAgICAgICB3aXRoIHJlYWR5X2NvbmQ6CisgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKE5vbmUpCisgICAgICAgICAgICAgICAgcmVhZHlfY29uZC5ub3RpZnkoKQorICAgICAgICAgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzdGFydGVkOgorICAgICAgICAgICAgICAgICAgICBzdGFydF9jb25kLndhaXQoKQorICAgICAgICAgICAgbG9vcChzdGFydF90aW1lLCBkdXJhdGlvbiAqIDEuNSwgZW5kX2V2ZW50LCBkb195aWVsZD1GYWxzZSkKKworICAgICAgICBmb3IgaSBpbiByYW5nZShudGhyZWFkcyk6CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pKQorICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5zZXREYWVtb24oVHJ1ZSkKKyAgICAgICAgICAgIHQuc3RhcnQoKQorICAgICAgICAjIFdhaXQgZm9yIHRocmVhZHMgdG8gYmUgcmVhZHkKKyAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgd2hpbGUgbGVuKHJlYWR5KSA8IG50aHJlYWRzOgorICAgICAgICAgICAgICAgIHJlYWR5X2NvbmQud2FpdCgpCisKKyAgICAjIFJ1biB0aGUgY2xpZW50IGFuZCB3YWl0IGZvciB0aGUgZmlyc3QgcGluZyhzKSB0byBhcnJpdmUgYmVmb3JlCisgICAgIyB1bmJsb2NraW5nIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMuCisgICAgY2h1bmtzID0gW10KKyAgICBwcm9jZXNzID0gcnVuX2xhdGVuY3lfY2xpZW50KGFkZHI9c29jay5nZXRzb2NrbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfcGluZ3M9bmJfcGluZ3MsIGludGVydmFsPWludGVydmFsKQorICAgIHMgPSBfcmVjdihzb2NrLCA0MDk2KQorICAgIF90aW1lID0gdGltZS50aW1lCisKKyAgICB3aXRoIHN0YXJ0X2NvbmQ6CisgICAgICAgIHN0YXJ0X3RpbWUgPSBfdGltZSgpCisgICAgICAgIHN0YXJ0ZWQgPSBUcnVlCisgICAgICAgIHN0YXJ0X2NvbmQubm90aWZ5KG50aHJlYWRzKQorCisgICAgd2hpbGUgTEFUX0VORCBub3QgaW4gczoKKyAgICAgICAgcyA9IF9yZWN2KHNvY2ssIDQwOTYpCisgICAgICAgIHQgPSBfdGltZSgpCisgICAgICAgIGNodW5rcy5hcHBlbmQoKHQsIHMpKQorCisgICAgIyBUZWxsIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMgdG8gc3RvcC4KKyAgICBlbmRfZXZlbnQuYXBwZW5kKE5vbmUpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5qb2luKCkKKyAgICBwcm9jZXNzLndhaXQoKQorICAgIHNvY2suY2xvc2UoKQorCisgICAgZm9yIHJlY3ZfdGltZSwgY2h1bmsgaW4gY2h1bmtzOgorICAgICAgICAjIE5PVEU6IGl0IGlzIGFzc3VtZWQgdGhhdCBhIGxpbmUgc2VudCBieSBhIGNsaWVudCB3YXNuJ3QgcmVjZWl2ZWQKKyAgICAgICAgIyBpbiB0d28gY2h1bmtzIGJlY2F1c2UgdGhlIGxpbmVzIGFyZSB2ZXJ5IHNtYWxsLgorICAgICAgICBmb3IgbGluZSBpbiBjaHVuay5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lIGFuZCBsaW5lICE9IExBVF9FTkQ6CisgICAgICAgICAgICAgICAgc2VuZF90aW1lID0gZXZhbChsaW5lKQorICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbmRfdGltZSwgZmxvYXQpCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKHNlbmRfdGltZSwgcmVjdl90aW1lKSkKKworICAgIHJldHVybiByZXN1bHRzCisKK2RlZiBydW5fbGF0ZW5jeV90ZXN0cyhtYXhfdGhyZWFkcyk6CisgICAgZm9yIHRhc2sgaW4gbGF0ZW5jeV90YXNrczoKKyAgICAgICAgcHJpbnQoIkJhY2tncm91bmQgQ1BVIHRhc2s6IiwgdGFzay5fX2RvY19fKQorICAgICAgICBwcmludCgpCisgICAgICAgIGZ1bmMsIGFyZ3MgPSB0YXNrKCkKKyAgICAgICAgbnRocmVhZHMgPSAwCisgICAgICAgIHdoaWxlIG50aHJlYWRzIDw9IG1heF90aHJlYWRzOgorICAgICAgICAgICAgcmVzdWx0cyA9IHJ1bl9sYXRlbmN5X3Rlc3QoZnVuYywgYXJncywgbnRocmVhZHMpCisgICAgICAgICAgICBuID0gbGVuKHJlc3VsdHMpCisgICAgICAgICAgICAjIFdlIHByaW50IG91dCBtaWxsaXNlY29uZHMKKyAgICAgICAgICAgIGxhdHMgPSBbMTAwMCAqICh0MiAtIHQxKSBmb3IgKHQxLCB0MikgaW4gcmVzdWx0c10KKyAgICAgICAgICAgICNwcmludChsaXN0KG1hcChpbnQsIGxhdHMpKSkKKyAgICAgICAgICAgIGF2ZyA9IHN1bShsYXRzKSAvIG4KKyAgICAgICAgICAgIGRldiA9IChzdW0oKHggLSBhdmcpICoqIDIgZm9yIHggaW4gbGF0cykgLyBuKSAqKiAwLjUKKyAgICAgICAgICAgIHByaW50KCJDUFUgdGhyZWFkcz0lZDogJWQgbXMuIChzdGQgZGV2OiAlZCBtcy4pIiAlIChudGhyZWFkcywgYXZnLCBkZXYpLCBlbmQ9IiIpCisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAjcHJpbnQoIiAgICBbLi4uIGZyb20gJWQgc2FtcGxlc10iICUgbikKKyAgICAgICAgICAgIG50aHJlYWRzICs9IDEKKyAgICAgICAgcHJpbnQoKQorCisKK0JXX0VORCA9ICJFTkQiCisKK2RlZiBiYW5kd2lkdGhfY2xpZW50KGFkZHIsIHBhY2tldF9zaXplLCBkdXJhdGlvbik6CisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgIGxvY2FsX2FkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICBfdGltZSA9IHRpbWUudGltZQorICAgIF9zbGVlcCA9IHRpbWUuc2xlZXAKKyAgICBkZWYgX3NlbmRfY2h1bmsobXNnKToKKyAgICAgICAgX3NlbmR0byhzb2NrLCAoIiVyIyVzXG4iICUgKGxvY2FsX2FkZHIsIG1zZykpLnJqdXN0KHBhY2tldF9zaXplKSwgYWRkcikKKyAgICAjIFdlIGdpdmUgdGhlIHBhcmVudCBzb21lIHRpbWUgdG8gYmUgcmVhZHkuCisgICAgX3NsZWVwKDEuMCkKKyAgICB0cnk6CisgICAgICAgIHN0YXJ0X3RpbWUgPSBfdGltZSgpCisgICAgICAgIGVuZF90aW1lID0gc3RhcnRfdGltZSArIGR1cmF0aW9uICogMi4wCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIF90aW1lKCkgPCBlbmRfdGltZToKKyAgICAgICAgICAgIF9zZW5kX2NodW5rKHN0cihpKSkKKyAgICAgICAgICAgIHMgPSBfcmVjdihzb2NrLCBwYWNrZXRfc2l6ZSkKKyAgICAgICAgICAgIGFzc2VydCBsZW4ocykgPT0gcGFja2V0X3NpemUKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICBfc2VuZF9jaHVuayhCV19FTkQpCisgICAgZmluYWxseToKKyAgICAgICAgc29jay5jbG9zZSgpCisKK2RlZiBydW5fYmFuZHdpZHRoX2NsaWVudCgqKmt3YXJncyk6CisgICAgY21kX2xpbmUgPSBbc3lzLmV4ZWN1dGFibGUsICctRScsIG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXyldCisgICAgY21kX2xpbmUuZXh0ZW5kKFsnLS1id2NsaWVudCcsIHJlcHIoa3dhcmdzKV0pCisgICAgcmV0dXJuIHN1YnByb2Nlc3MuUG9wZW4oY21kX2xpbmUpICMsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCitkZWYgcnVuX2JhbmR3aWR0aF90ZXN0KGZ1bmMsIGFyZ3MsIG50aHJlYWRzKToKKyAgICAjIENyZWF0ZSBhIGxpc3RlbmluZyBzb2NrZXQgdG8gcmVjZWl2ZSB0aGUgcGFja2V0cy4gV2UgdXNlIFVEUCB3aGljaCBzaG91bGQKKyAgICAjIGJlIHBhaW5sZXNzbHkgY3Jvc3MtcGxhdGZvcm0uCisgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgIHNvY2suYmluZCgoIjEyNy4wLjAuMSIsIDApKQorICAgIGFkZHIgPSBzb2NrLmdldHNvY2tuYW1lKCkKKworICAgIGR1cmF0aW9uID0gQkFORFdJRFRIX0RVUkFUSU9OCisgICAgcGFja2V0X3NpemUgPSBCQU5EV0lEVEhfUEFDS0VUX1NJWkUKKworICAgIHJlc3VsdHMgPSBbXQorICAgIHRocmVhZHMgPSBbXQorICAgIGVuZF9ldmVudCA9IFtdCisgICAgc3RhcnRfY29uZCA9IHRocmVhZGluZy5Db25kaXRpb24oKQorICAgIHN0YXJ0ZWQgPSBGYWxzZQorICAgIGlmIG50aHJlYWRzID4gMDoKKyAgICAgICAgIyBXYXJtIHVwCisgICAgICAgIGZ1bmMoKmFyZ3MpCisKKyAgICAgICAgcmVzdWx0cyA9IFtdCisgICAgICAgIGxvb3AgPSBUaW1lZExvb3AoZnVuYywgYXJncykKKyAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICByZWFkeV9jb25kID0gdGhyZWFkaW5nLkNvbmRpdGlvbigpCisKKyAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgd2l0aCByZWFkeV9jb25kOgorICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZChOb25lKQorICAgICAgICAgICAgICAgIHJlYWR5X2NvbmQubm90aWZ5KCkKKyAgICAgICAgICAgIHdpdGggc3RhcnRfY29uZDoKKyAgICAgICAgICAgICAgICB3aGlsZSBub3Qgc3RhcnRlZDoKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29uZC53YWl0KCkKKyAgICAgICAgICAgIGxvb3Aoc3RhcnRfdGltZSwgZHVyYXRpb24gKiAxLjUsIGVuZF9ldmVudCwgZG9feWllbGQ9RmFsc2UpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRocmVhZHMpOgorICAgICAgICAgICAgdGhyZWFkcy5hcHBlbmQodGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKSkKKyAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgICAgIHQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgIyBXYWl0IGZvciB0aHJlYWRzIHRvIGJlIHJlYWR5CisgICAgICAgIHdpdGggcmVhZHlfY29uZDoKKyAgICAgICAgICAgIHdoaWxlIGxlbihyZWFkeSkgPCBudGhyZWFkczoKKyAgICAgICAgICAgICAgICByZWFkeV9jb25kLndhaXQoKQorCisgICAgIyBSdW4gdGhlIGNsaWVudCBhbmQgd2FpdCBmb3IgdGhlIGZpcnN0IHBhY2tldCB0byBhcnJpdmUgYmVmb3JlCisgICAgIyB1bmJsb2NraW5nIHRoZSBiYWNrZ3JvdW5kIHRocmVhZHMuCisgICAgcHJvY2VzcyA9IHJ1bl9iYW5kd2lkdGhfY2xpZW50KGFkZHI9YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X3NpemU9cGFja2V0X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uPWR1cmF0aW9uKQorICAgIF90aW1lID0gdGltZS50aW1lCisgICAgIyBUaGlzIHdpbGwgYWxzbyB3YWl0IGZvciB0aGUgcGFyZW50IHRvIGJlIHJlYWR5CisgICAgcyA9IF9yZWN2KHNvY2ssIHBhY2tldF9zaXplKQorICAgIHJlbW90ZV9hZGRyID0gZXZhbChzLnBhcnRpdGlvbignIycpWzBdKQorCisgICAgd2l0aCBzdGFydF9jb25kOgorICAgICAgICBzdGFydF90aW1lID0gX3RpbWUoKQorICAgICAgICBzdGFydGVkID0gVHJ1ZQorICAgICAgICBzdGFydF9jb25kLm5vdGlmeShudGhyZWFkcykKKworICAgIG4gPSAwCisgICAgZmlyc3RfdGltZSA9IE5vbmUKKyAgICB3aGlsZSBub3QgZW5kX2V2ZW50IGFuZCBCV19FTkQgbm90IGluIHM6CisgICAgICAgIF9zZW5kdG8oc29jaywgcywgcmVtb3RlX2FkZHIpCisgICAgICAgIHMgPSBfcmVjdihzb2NrLCBwYWNrZXRfc2l6ZSkKKyAgICAgICAgaWYgZmlyc3RfdGltZSBpcyBOb25lOgorICAgICAgICAgICAgZmlyc3RfdGltZSA9IF90aW1lKCkKKyAgICAgICAgbiArPSAxCisgICAgZW5kX3RpbWUgPSBfdGltZSgpCisKKyAgICBlbmRfZXZlbnQuYXBwZW5kKE5vbmUpCisgICAgZm9yIHQgaW4gdGhyZWFkczoKKyAgICAgICAgdC5qb2luKCkKKyAgICBwcm9jZXNzLmtpbGwoKQorCisgICAgcmV0dXJuIChuIC0gMSkgLyAoZW5kX3RpbWUgLSBmaXJzdF90aW1lKQorCitkZWYgcnVuX2JhbmR3aWR0aF90ZXN0cyhtYXhfdGhyZWFkcyk6CisgICAgZm9yIHRhc2sgaW4gYmFuZHdpZHRoX3Rhc2tzOgorICAgICAgICBwcmludCgiQmFja2dyb3VuZCBDUFUgdGFzazoiLCB0YXNrLl9fZG9jX18pCisgICAgICAgIHByaW50KCkKKyAgICAgICAgZnVuYywgYXJncyA9IHRhc2soKQorICAgICAgICBudGhyZWFkcyA9IDAKKyAgICAgICAgYmFzZWxpbmVfc3BlZWQgPSBOb25lCisgICAgICAgIHdoaWxlIG50aHJlYWRzIDw9IG1heF90aHJlYWRzOgorICAgICAgICAgICAgcmVzdWx0cyA9IHJ1bl9iYW5kd2lkdGhfdGVzdChmdW5jLCBhcmdzLCBudGhyZWFkcykKKyAgICAgICAgICAgIHNwZWVkID0gcmVzdWx0cworICAgICAgICAgICAgI3NwZWVkID0gbGVuKHJlc3VsdHMpICogMS4wIC8gcmVzdWx0c1stMV1bMF0KKyAgICAgICAgICAgIHByaW50KCJDUFUgdGhyZWFkcz0lZDogJS4xZiIgJSAobnRocmVhZHMsIHNwZWVkKSwgZW5kPSIiKQorICAgICAgICAgICAgaWYgYmFzZWxpbmVfc3BlZWQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBwcmludCgiIHBhY2tldHMvcy4iKQorICAgICAgICAgICAgICAgIGJhc2VsaW5lX3NwZWVkID0gc3BlZWQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIiAoICVkICUlKSIgJSAoc3BlZWQgLyBiYXNlbGluZV9zcGVlZCAqIDEwMCkpCisgICAgICAgICAgICBudGhyZWFkcyArPSAxCisgICAgICAgIHByaW50KCkKKworCitkZWYgbWFpbigpOgorICAgIHVzYWdlID0gInVzYWdlOiAlcHJvZyBbLWh8LS1oZWxwXSBbb3B0aW9uc10iCisgICAgcGFyc2VyID0gT3B0aW9uUGFyc2VyKHVzYWdlPXVzYWdlKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRocm91Z2hwdXQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InRocm91Z2hwdXQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biB0aHJvdWdocHV0IHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWwiLCAiLS1sYXRlbmN5IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJsYXRlbmN5IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gbGF0ZW5jeSB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYmFuZHdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJiYW5kd2lkdGgiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biBJL08gYmFuZHdpZHRoIHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLWkiLCAiLS1pbnRlcnZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsIGRlc3Q9ImNoZWNrX2ludGVydmFsIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN5cy5zZXRjaGVja2ludGVydmFsKCkgdmFsdWUiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItSSIsICItLXN3aXRjaC1pbnRlcnZhbCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImZsb2F0IiwgZGVzdD0ic3dpdGNoX2ludGVydmFsIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InN5cy5zZXRzd2l0Y2hpbnRlcnZhbCgpIHZhbHVlIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLW4iLCAiLS1udW0tdGhyZWFkcyIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIHR5cGU9ImludCIsIGRlc3Q9Im50aHJlYWRzIiwgZGVmYXVsdD00LAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9Im1heCBudW1iZXIgb2YgdGhyZWFkcyBpbiB0ZXN0cyIpCisKKyAgICAjIEhpZGRlbiBvcHRpb24gdG8gcnVuIHRoZSBwaW5naW5nIGFuZCBiYW5kd2lkdGggY2xpZW50cworICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1sYXRjbGllbnQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJsYXRjbGllbnQiLCBkZWZhdWx0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD1TVVBQUkVTU19IRUxQKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCIiLCAiLS1id2NsaWVudCIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZSIsIGRlc3Q9ImJ3Y2xpZW50IiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9U1VQUFJFU1NfSEVMUCkKKworICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyIpCisKKyAgICBpZiBvcHRpb25zLmxhdGNsaWVudDoKKyAgICAgICAga3dhcmdzID0gZXZhbChvcHRpb25zLmxhdGNsaWVudCkKKyAgICAgICAgbGF0ZW5jeV9jbGllbnQoKiprd2FyZ3MpCisgICAgICAgIHJldHVybgorCisgICAgaWYgb3B0aW9ucy5id2NsaWVudDoKKyAgICAgICAga3dhcmdzID0gZXZhbChvcHRpb25zLmJ3Y2xpZW50KQorICAgICAgICBiYW5kd2lkdGhfY2xpZW50KCoqa3dhcmdzKQorICAgICAgICByZXR1cm4KKworICAgIGlmIG5vdCBvcHRpb25zLnRocm91Z2hwdXQgYW5kIG5vdCBvcHRpb25zLmxhdGVuY3kgYW5kIG5vdCBvcHRpb25zLmJhbmR3aWR0aDoKKyAgICAgICAgb3B0aW9ucy50aHJvdWdocHV0ID0gb3B0aW9ucy5sYXRlbmN5ID0gb3B0aW9ucy5iYW5kd2lkdGggPSBUcnVlCisgICAgaWYgb3B0aW9ucy5jaGVja19pbnRlcnZhbDoKKyAgICAgICAgc3lzLnNldGNoZWNraW50ZXJ2YWwob3B0aW9ucy5jaGVja19pbnRlcnZhbCkKKyAgICBpZiBvcHRpb25zLnN3aXRjaF9pbnRlcnZhbDoKKyAgICAgICAgc3lzLnNldHN3aXRjaGludGVydmFsKG9wdGlvbnMuc3dpdGNoX2ludGVydmFsKQorCisgICAgcHJpbnQoIj09ICVzICVzICglcykgPT0iICUgKAorICAgICAgICBwbGF0Zm9ybS5weXRob25faW1wbGVtZW50YXRpb24oKSwKKyAgICAgICAgcGxhdGZvcm0ucHl0aG9uX3ZlcnNpb24oKSwKKyAgICAgICAgcGxhdGZvcm0ucHl0aG9uX2J1aWxkKClbMF0sCisgICAgKSkKKyAgICAjIFByb2Nlc3NvciBpZGVudGlmaWNhdGlvbiBvZnRlbiBoYXMgcmVwZWF0ZWQgc3BhY2VzCisgICAgY3B1ID0gJyAnLmpvaW4ocGxhdGZvcm0ucHJvY2Vzc29yKCkuc3BsaXQoKSkKKyAgICBwcmludCgiPT0gJXMgJXMgb24gJyVzJyA9PSIgJSAoCisgICAgICAgIHBsYXRmb3JtLm1hY2hpbmUoKSwKKyAgICAgICAgcGxhdGZvcm0uc3lzdGVtKCksCisgICAgICAgIGNwdSwKKyAgICApKQorICAgIHByaW50KCkKKworICAgIGlmIG9wdGlvbnMudGhyb3VnaHB1dDoKKyAgICAgICAgcHJpbnQoIi0tLSBUaHJvdWdocHV0IC0tLSIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcnVuX3Rocm91Z2hwdXRfdGVzdHMob3B0aW9ucy5udGhyZWFkcykKKworICAgIGlmIG9wdGlvbnMubGF0ZW5jeToKKyAgICAgICAgcHJpbnQoIi0tLSBMYXRlbmN5IC0tLSIpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcnVuX2xhdGVuY3lfdGVzdHMob3B0aW9ucy5udGhyZWFkcykKKworICAgIGlmIG9wdGlvbnMuYmFuZHdpZHRoOgorICAgICAgICBwcmludCgiLS0tIEkvTyBiYW5kd2lkdGggLS0tIikKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBydW5fYmFuZHdpZHRoX3Rlc3RzKG9wdGlvbnMubnRocmVhZHMpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9kZW1vL1JFQURNRSBiL1Rvb2xzL2RlbW8vUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTQzNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9kZW1vL1JFQURNRQpAQCAtMCwwICsxLDE2IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGNvbGxlY3Rpb24gb2YgZGVtb25zdHJhdGlvbiBzY3JpcHRzIGZvcgordmFyaW91cyBhc3BlY3RzIG9mIFB5dGhvbiBwcm9ncmFtbWluZy4KKworYmVlci5weSAgICAgICAgV2VsbC1rbm93biBwcm9ncmFtbWluZyBleGFtcGxlOiBCb3R0bGVzIG9mIGJlZXIuCitlaWZmZWwucHkgICAgICBQeXRob24gYWR2YW5jZWQgbWFnaWM6IEEgbWV0YWNsYXNzIGZvciBFaWZmZWwgcG9zdC9wcmVjb25kaXRpb25zLgoraGFub2kucHkgICAgICAgV2VsbC1rbm93biBwcm9ncmFtbWluZyBleGFtcGxlOiBUb3dlcnMgb2YgSGFub2kuCitsaWZlLnB5ICAgICAgICBDdXJzZXMgcHJvZ3JhbW1pbmc6IFNpbXBsZSBnYW1lLW9mLWxpZmUuCittYXJrb3YucHkgICAgICBBbGdvcml0aG1zOiBNYXJrb3YgY2hhaW4gc2ltdWxhdGlvbi4KK21jYXN0LnB5ICAgICAgIE5ldHdvcmsgcHJvZ3JhbW1pbmc6IFNlbmQgYW5kIHJlY2VpdmUgVURQIG11bHRpY2FzdCBwYWNrZXRzLgorcXVlZW5zLnB5ICAgICAgV2VsbC1rbm93biBwcm9ncmFtbWluZyBleGFtcGxlOiBOLVF1ZWVucyBwcm9ibGVtLgorcmVkZW1vLnB5ICAgICAgUmVndWxhciBFeHByZXNzaW9uczogR1VJIHNjcmlwdCB0byB0ZXN0IHJlZ2V4ZXMuCitycHl0aG9uLnB5ICAgICBOZXR3b3JrIHByb2dyYW1taW5nOiBTbWFsbCBjbGllbnQgZm9yIHJlbW90ZSBjb2RlIGV4ZWN1dGlvbi4KK3JweXRob25kLnB5ICAgIE5ldHdvcmsgcHJvZ3JhbW1pbmc6IFNtYWxsIHNlcnZlciBmb3IgcmVtb3RlIGNvZGUgZXhlY3V0aW9uLgorc29ydHZpc3UucHkgICAgR1VJIHByb2dyYW1taW5nOiBWaXN1YWxpemF0aW9uIG9mIGRpZmZlcmVudCBzb3J0IGFsZ29yaXRobXMuCitzczEucHkgICAgICAgICBHVUkvQXBwbGljYXRpb24gcHJvZ3JhbW1pbmc6IEEgc2ltcGxlIHNwcmVhZHNoZWV0IGFwcGxpY2F0aW9uLgordmVjdG9yLnB5ICAgICAgUHl0aG9uIGJhc2ljczogQSB2ZWN0b3IgY2xhc3Mgd2l0aCBkZW1vbnN0cmF0aW5nIHNwZWNpYWwgbWV0aG9kcy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvYmVlci5weSBiL1Rvb2xzL2RlbW8vYmVlci5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CnNpbWlsYXJpdHkgaW5kZXggNjclCnJlbmFtZSBmcm9tIERlbW8vc2NyaXB0cy9iZWVyLnB5CnJlbmFtZSB0byBUb29scy9kZW1vL2JlZXIucHkKaW5kZXggODEzNTUwOS4uYWY1ODM4MAotLS0gYS9EZW1vL3NjcmlwdHMvYmVlci5weQorKysgYi9Ub29scy9kZW1vL2JlZXIucHkKQEAgLTEsNiArMSwxMSBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0jIEJ5IEd2UiwgZGVteXN0aWZpZWQgYWZ0ZXIgYSB2ZXJzaW9uIGJ5IEZyZWRyaWsgTHVuZGguCisiIiIKK0EgUHl0aG9uIHZlcnNpb24gb2YgdGhlIGNsYXNzaWMgImJvdHRsZXMgb2YgYmVlciBvbiB0aGUgd2FsbCIgcHJvZ3JhbW1pbmcKK2V4YW1wbGUuCisKK0J5IEd1aWRvIHZhbiBSb3NzdW0sIGRlbXlzdGlmaWVkIGFmdGVyIGEgdmVyc2lvbiBieSBGcmVkcmlrIEx1bmRoLgorIiIiCiAKIGltcG9ydCBzeXMKIApkaWZmIC0tZ2l0IGEvVG9vbHMvZGVtby9laWZmZWwucHkgYi9Ub29scy9kZW1vL2VpZmZlbC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYTI4MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZGVtby9laWZmZWwucHkKQEAgLTAsMCArMSwxNDYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworIiIiCitTdXBwb3J0IEVpZmZlbC1zdHlsZSBwcmVjb25kaXRpb25zIGFuZCBwb3N0Y29uZGl0aW9ucyBmb3IgZnVuY3Rpb25zLgorCitBbiBleGFtcGxlIGZvciBQeXRob24gbWV0YWNsYXNzZXMuCisiIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHR5cGVzIGltcG9ydCBGdW5jdGlvblR5cGUgYXMgZnVuY3Rpb24KKworY2xhc3MgRWlmZmVsQmFzZU1ldGFDbGFzcyh0eXBlKToKKworICAgIGRlZiBfX25ld19fKG1ldGEsIG5hbWUsIGJhc2VzLCBkaWN0KToKKyAgICAgICAgbWV0YS5jb252ZXJ0X21ldGhvZHMoZGljdCkKKyAgICAgICAgcmV0dXJuIHN1cGVyKEVpZmZlbEJhc2VNZXRhQ2xhc3MsIG1ldGEpLl9fbmV3X18oCisgICAgICAgICAgICBtZXRhLCBuYW1lLCBiYXNlcywgZGljdCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjb252ZXJ0X21ldGhvZHMoY2xzLCBkaWN0KToKKyAgICAgICAgIiIiUmVwbGFjZSBmdW5jdGlvbnMgaW4gZGljdCB3aXRoIEVpZmZlbE1ldGhvZCB3cmFwcGVycy4KKworICAgICAgICBUaGUgZGljdCBpcyBtb2RpZmllZCBpbiBwbGFjZS4KKworICAgICAgICBJZiBhIG1ldGhvZCBlbmRzIGluIF9wcmUgb3IgX3Bvc3QsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgZGljdAorICAgICAgICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIG1ldGhvZC4KKyAgICAgICAgIiIiCisgICAgICAgICMgZmluZCBtZXRob2RzIHdpdGggcHJlIG9yIHBvc3QgY29uZGl0aW9ucworICAgICAgICBtZXRob2RzID0gW10KKyAgICAgICAgZm9yIGssIHYgaW4gZGljdC5pdGVtcygpOgorICAgICAgICAgICAgaWYgay5lbmRzd2l0aCgnX3ByZScpIG9yIGsuZW5kc3dpdGgoJ19wb3N0Jyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UodiwgZnVuY3Rpb24pCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodiwgZnVuY3Rpb24pOgorICAgICAgICAgICAgICAgIG1ldGhvZHMuYXBwZW5kKGspCisgICAgICAgIGZvciBtIGluIG1ldGhvZHM6CisgICAgICAgICAgICBwcmUgPSBkaWN0LmdldCgiJXNfcHJlIiAlIG0pCisgICAgICAgICAgICBwb3N0ID0gZGljdC5nZXQoIiVzX3Bvc3QiICUgbSkKKyAgICAgICAgICAgIGlmIHByZSBvciBwb3N0OgorICAgICAgICAgICAgICAgIGRpY3Rba10gPSBjbHMubWFrZV9laWZmZWxfbWV0aG9kKGRpY3RbbV0sIHByZSwgcG9zdCkKKworCitjbGFzcyBFaWZmZWxNZXRhQ2xhc3MxKEVpZmZlbEJhc2VNZXRhQ2xhc3MpOgorICAgICMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlICJlaWZmZWwiIG1ldGEgY2xhc3MgdGhhdCB1c2VzIG5lc3RlZCBmdW5jdGlvbnMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgbWFrZV9laWZmZWxfbWV0aG9kKGZ1bmMsIHByZSwgcG9zdCk6CisgICAgICAgIGRlZiBtZXRob2Qoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIGlmIHByZToKKyAgICAgICAgICAgICAgICBwcmUoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgcnYgPSBmdW5jKHNlbGYsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgIGlmIHBvc3Q6CisgICAgICAgICAgICAgICAgcG9zdChzZWxmLCBydiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgcmV0dXJuIHJ2CisKKyAgICAgICAgaWYgZnVuYy5fX2RvY19fOgorICAgICAgICAgICAgbWV0aG9kLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KKworICAgICAgICByZXR1cm4gbWV0aG9kCisKKworY2xhc3MgRWlmZmVsTWV0aG9kV3JhcHBlcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpbnN0LCBkZXNjcik6CisgICAgICAgIHNlbGYuX2luc3QgPSBpbnN0CisgICAgICAgIHNlbGYuX2Rlc2NyID0gZGVzY3IKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3IuY2FsbG1ldGhvZChzZWxmLl9pbnN0LCBhcmdzLCBrd2FyZ3MpCisKKworY2xhc3MgRWlmZmVsRGVzY3JpcHRvcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCBwcmUsIHBvc3QpOgorICAgICAgICBzZWxmLl9mdW5jID0gZnVuYworICAgICAgICBzZWxmLl9wcmUgPSBwcmUKKyAgICAgICAgc2VsZi5fcG9zdCA9IHBvc3QKKworICAgICAgICBzZWxmLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICBzZWxmLl9fZG9jX18gPSBmdW5jLl9fZG9jX18KKworICAgIGRlZiBfX2dldF9fKHNlbGYsIG9iaiwgY2xzKToKKyAgICAgICAgcmV0dXJuIEVpZmZlbE1ldGhvZFdyYXBwZXIob2JqLCBzZWxmKQorCisgICAgZGVmIGNhbGxtZXRob2Qoc2VsZiwgaW5zdCwgYXJncywga3dhcmdzKToKKyAgICAgICAgaWYgc2VsZi5fcHJlOgorICAgICAgICAgICAgc2VsZi5fcHJlKGluc3QsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgeCA9IHNlbGYuX2Z1bmMoaW5zdCwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLl9wb3N0OgorICAgICAgICAgICAgc2VsZi5fcG9zdChpbnN0LCB4LCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiB4CisKKworY2xhc3MgRWlmZmVsTWV0YUNsYXNzMihFaWZmZWxCYXNlTWV0YUNsYXNzKToKKyAgICAjIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSAiZWlmZmVsIiBtZXRhIGNsYXNzIHRoYXQgdXNlcyBkZXNjcmlwdG9ycworCisgICAgbWFrZV9laWZmZWxfbWV0aG9kID0gRWlmZmVsRGVzY3JpcHRvcgorCisKK2NsYXNzIFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0RWlmZmVsTWV0YUNsYXNzMShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChFaWZmZWxNZXRhQ2xhc3MxKQorCisgICAgZGVmIHRlc3RFaWZmZWxNZXRhQ2xhc3MyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KEVpZmZlbE1ldGFDbGFzczIpCisKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgbWV0YWNsYXNzKToKKyAgICAgICAgY2xhc3MgRWlmZmVsKG1ldGFjbGFzcz1tZXRhY2xhc3MpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3QoRWlmZmVsKToKKyAgICAgICAgICAgIGRlZiBtKHNlbGYsIGFyZyk6CisgICAgICAgICAgICAgICAgIiIiTWFrZSBpdCBhIGxpdHRsZSBsYXJnZXIiIiIKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJnICsgMQorCisgICAgICAgICAgICBkZWYgbTIoc2VsZiwgYXJnKToKKyAgICAgICAgICAgICAgICAiIiJNYWtlIGl0IGEgbGl0dGxlIGxhcmdlciIiIgorICAgICAgICAgICAgICAgIHJldHVybiBhcmcgKyAxCisKKyAgICAgICAgICAgIGRlZiBtMl9wcmUoc2VsZiwgYXJnKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYXJnID4gMAorCisgICAgICAgICAgICBkZWYgbTJfcG9zdChzZWxmLCByZXN1bHQsIGFyZyk6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJlc3VsdCA+IGFyZworCisgICAgICAgIGNsYXNzIFN1YihUZXN0KToKKyAgICAgICAgICAgIGRlZiBtMihzZWxmLCBhcmcpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmcqKjIKKworICAgICAgICAgICAgZGVmIG0yX3Bvc3Qoc2VsZiwgUmVzdWx0LCBhcmcpOgorICAgICAgICAgICAgICAgIHN1cGVyKFN1Yiwgc2VsZikubTJfcG9zdChSZXN1bHQsIGFyZykKKyAgICAgICAgICAgICAgICBhc3NlcnQgUmVzdWx0IDwgMTAwCisKKyAgICAgICAgdCA9IFRlc3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubSgxKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm0yKDEpLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdC5tMiwgMCkKKworICAgICAgICBzID0gU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHMubTIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBzLm0yLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLm0yKDUpLCAyNSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL2hhbm9pLnB5IGIvVG9vbHMvZGVtby9oYW5vaS5weQpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBEZW1vL3RraW50ZXIvZ3VpZG8vaGFub2kucHkKcmVuYW1lIHRvIFRvb2xzL2RlbW8vaGFub2kucHkKaW5kZXggMzRhMGJiYS4uZGFkMDIzNCAxMDA3NTUKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL2hhbm9pLnB5CisrKyBiL1Rvb2xzL2RlbW8vaGFub2kucHkKQEAgLTEsMTcgKzEsMTggQEAKLSMgQW5pbWF0ZWQgVG93ZXJzIG9mIEhhbm9pIHVzaW5nIFRrIHdpdGggb3B0aW9uYWwgYml0bWFwIGZpbGUgaW4KLSMgYmFja2dyb3VuZC4KLSMKLSMgVXNhZ2U6IHRraGFub2kgW24gW2JpdG1hcGZpbGVdXQotIwotIyBuIGlzIHRoZSBudW1iZXIgb2YgcGllY2VzIHRvIGFuaW1hdGU7IGRlZmF1bHQgaXMgNCwgbWF4aW11bSAxNS4KLSMKLSMgVGhlIGJpdG1hcCBmaWxlIGNhbiBiZSBhbnkgWDExIGJpdG1hcCBmaWxlIChsb29rIGluCi0jIC91c3IvaW5jbHVkZS9YMTEvYml0bWFwcyBmb3Igc2FtcGxlcyk7IGl0IGlzIGRpc3BsYXllZCBhcyB0aGUKLSMgYmFja2dyb3VuZCBvZiB0aGUgYW5pbWF0aW9uLiAgRGVmYXVsdCBpcyBubyBiaXRtYXAuCisjIS91c3IvYmluL2VudiBweXRob24zCiAKLSMgVGhpcyB1c2VzIFN0ZWVuIEx1bWhvbHQncyBUayBpbnRlcmZhY2UKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorIiIiCitBbmltYXRlZCBUb3dlcnMgb2YgSGFub2kgdXNpbmcgVGsgd2l0aCBvcHRpb25hbCBiaXRtYXAgZmlsZSBpbiBiYWNrZ3JvdW5kLgogCitVc2FnZTogaGFub2kucHkgW24gW2JpdG1hcGZpbGVdXQorCituIGlzIHRoZSBudW1iZXIgb2YgcGllY2VzIHRvIGFuaW1hdGU7IGRlZmF1bHQgaXMgNCwgbWF4aW11bSAxNS4KKworVGhlIGJpdG1hcCBmaWxlIGNhbiBiZSBhbnkgWDExIGJpdG1hcCBmaWxlIChsb29rIGluIC91c3IvaW5jbHVkZS9YMTEvYml0bWFwcyBmb3IKK3NhbXBsZXMpOyBpdCBpcyBkaXNwbGF5ZWQgYXMgdGhlIGJhY2tncm91bmQgb2YgdGhlIGFuaW1hdGlvbi4gIERlZmF1bHQgaXMgbm8KK2JpdG1hcC4KKyIiIgorCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBDYW52YXMKIAogIyBCYXNpYyBUb3dlcnMtb2YtSGFub2kgYWxnb3JpdGhtOiBtb3ZlIG4gcGllY2VzIGZyb20gYSB0byBiLCB1c2luZyBjCiAjIGFzIHRlbXBvcmFyeS4gIEZvciBlYWNoIG1vdmUsIGNhbGwgcmVwb3J0KCkKQEAgLTEyMyw3ICsxMjQsNiBAQAogICAgICAgICBzZWxmLnBlZ3N0YXRlW2JdLmFwcGVuZChpKQogCiAKLSMgTWFpbiBwcm9ncmFtCiBkZWYgbWFpbigpOgogICAgIGltcG9ydCBzeXMKIApkaWZmIC0tZ2l0IGEvRGVtby9jdXJzZXMvbGlmZS5weSBiL1Rvb2xzL2RlbW8vbGlmZS5weQpzaW1pbGFyaXR5IGluZGV4IDY2JQpyZW5hbWUgZnJvbSBEZW1vL2N1cnNlcy9saWZlLnB5CnJlbmFtZSB0byBUb29scy9kZW1vL2xpZmUucHkKaW5kZXggZGRmZjhmYS4uZGZiOWFiOCAxMDA3NTUKLS0tIGEvRGVtby9jdXJzZXMvbGlmZS5weQorKysgYi9Ub29scy9kZW1vL2xpZmUucHkKQEAgLTEsMjQgKzEsMjMgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBsaWZlLnB5IC0tIEEgY3Vyc2VzLWJhc2VkIHZlcnNpb24gb2YgQ29ud2F5J3MgR2FtZSBvZiBMaWZlLgotIyBDb250cmlidXRlZCBieSBBTUsKLSMKLSMgQW4gZW1wdHkgYm9hcmQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFuZCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6Ci0jICBFIDogRXJhc2UgdGhlIGJvYXJkCi0jICBSIDogRmlsbCB0aGUgYm9hcmQgcmFuZG9tbHkKLSMgIFMgOiBTdGVwIGZvciBhIHNpbmdsZSBnZW5lcmF0aW9uCi0jICBDIDogVXBkYXRlIGNvbnRpbnVvdXNseSB1bnRpbCBhIGtleSBpcyBzdHJ1Y2sKLSMgIFEgOiBRdWl0Ci0jICBDdXJzb3Iga2V5cyA6ICBNb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIHRoZSBib2FyZAotIyAgU3BhY2Ugb3IgRW50ZXIgOiBUb2dnbGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJzb3IncyBwb3NpdGlvbgotIwotIyBUT0RPIDoKLSMgICBTdXBwb3J0IHRoZSBtb3VzZQotIyAgIFVzZSBjb2xvdXIgaWYgYXZhaWxhYmxlCi0jICAgTWFrZSBib2FyZCB1cGRhdGVzIGZhc3RlcgotIworIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi1pbXBvcnQgcmFuZG9tLCBzdHJpbmcsIHRyYWNlYmFjaworIiIiCitBIGN1cnNlcy1iYXNlZCB2ZXJzaW9uIG9mIENvbndheSdzIEdhbWUgb2YgTGlmZS4KKworQW4gZW1wdHkgYm9hcmQgd2lsbCBiZSBkaXNwbGF5ZWQsIGFuZCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBhdmFpbGFibGU6CisgRSA6IEVyYXNlIHRoZSBib2FyZAorIFIgOiBGaWxsIHRoZSBib2FyZCByYW5kb21seQorIFMgOiBTdGVwIGZvciBhIHNpbmdsZSBnZW5lcmF0aW9uCisgQyA6IFVwZGF0ZSBjb250aW51b3VzbHkgdW50aWwgYSBrZXkgaXMgc3RydWNrCisgUSA6IFF1aXQKKyBDdXJzb3Iga2V5cyA6ICBNb3ZlIHRoZSBjdXJzb3IgYXJvdW5kIHRoZSBib2FyZAorIFNwYWNlIG9yIEVudGVyIDogVG9nZ2xlIHRoZSBjb250ZW50cyBvZiB0aGUgY3Vyc29yJ3MgcG9zaXRpb24KKworQ29udHJpYnV0ZWQgYnkgQW5kcmV3IEt1Y2hsaW5nLCBNb3VzZSBzdXBwb3J0IGFuZCBjb2xvciBieSBEYWZ5ZGQgQ3Jvc2J5LgorIiIiCisKIGltcG9ydCBjdXJzZXMKK2ltcG9ydCByYW5kb20KKwogCiBjbGFzcyBMaWZlQm9hcmQ6CiAgICAgIiIiRW5jYXBzdWxhdGVzIGEgTGlmZSBib2FyZApAQCAtMzIsNyArMzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0IGdlbmVyYXRpb24uICBUaGVuIGRpc3BsYXkgdGhlIHN0YXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBib2FyZCBhbmQgcmVmcmVzaCB0aGUgc2NyZWVuLgogICAgIGVyYXNlKCkgLS0gY2xlYXIgdGhlIGVudGlyZSBib2FyZAotICAgIG1ha2VSYW5kb20oKSAtLSBmaWxsIHRoZSBib2FyZCByYW5kb21seQorICAgIG1ha2VfcmFuZG9tKCkgLS0gZmlsbCB0aGUgYm9hcmQgcmFuZG9tbHkKICAgICBzZXQoeSx4KSAtLSBzZXQgdGhlIGdpdmVuIGNlbGwgdG8gTGl2ZTsgZG9lc24ndCByZWZyZXNoIHRoZSBzY3JlZW4KICAgICB0b2dnbGUoeSx4KSAtLSBjaGFuZ2UgdGhlIGdpdmVuIGNlbGwgZnJvbSBsaXZlIHRvIGRlYWQsIG9yIHZpY2UKICAgICAgICAgICAgICAgICAgICB2ZXJzYSwgYW5kIHJlZnJlc2ggdGhlIHNjcmVlbiBkaXNwbGF5CkBAIC01NCw3ICs1Myw3IEBACiAgICAgICAgICMgRHJhdyBhIGJvcmRlciBhcm91bmQgdGhlIGJvYXJkCiAgICAgICAgIGJvcmRlcl9saW5lID0gJysnKyhzZWxmLlgqJy0nKSsnKycKICAgICAgICAgc2VsZi5zY3IuYWRkc3RyKDAsIDAsIGJvcmRlcl9saW5lKQotICAgICAgICBzZWxmLnNjci5hZGRzdHIoc2VsZi5ZKzEsMCwgYm9yZGVyX2xpbmUpCisgICAgICAgIHNlbGYuc2NyLmFkZHN0cihzZWxmLlkrMSwgMCwgYm9yZGVyX2xpbmUpCiAgICAgICAgIGZvciB5IGluIHJhbmdlKDAsIHNlbGYuWSk6CiAgICAgICAgICAgICBzZWxmLnNjci5hZGRzdHIoMSt5LCAwLCAnfCcpCiAgICAgICAgICAgICBzZWxmLnNjci5hZGRzdHIoMSt5LCBzZWxmLlgrMSwgJ3wnKQpAQCAtNjMsMTkgKzYyLDIzIEBACiAgICAgZGVmIHNldChzZWxmLCB5LCB4KToKICAgICAgICAgIiIiU2V0IGEgY2VsbCB0byB0aGUgbGl2ZSBzdGF0ZSIiIgogICAgICAgICBpZiB4PDAgb3Igc2VsZi5YPD14IG9yIHk8MCBvciBzZWxmLlk8PXk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb29yZGluYXRlcyBvdXQgb2YgcmFuZ2UgJWksJWkiJSAoeSx4KSkKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNvb3JkaW5hdGVzIG91dCBvZiByYW5nZSAlaSwlaSIlICh5LCB4KSkKICAgICAgICAgc2VsZi5zdGF0ZVt4LHldID0gMQogCiAgICAgZGVmIHRvZ2dsZShzZWxmLCB5LCB4KToKICAgICAgICAgIiIiVG9nZ2xlIGEgY2VsbCdzIHN0YXRlIGJldHdlZW4gbGl2ZSBhbmQgZGVhZCIiIgotICAgICAgICBpZiB4PDAgb3Igc2VsZi5YPD14IG9yIHk8MCBvciBzZWxmLlk8PXk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb29yZGluYXRlcyBvdXQgb2YgcmFuZ2UgJWksJWkiJSAoeSx4KSkKLSAgICAgICAgaWYgKHgseSkgaW4gc2VsZi5zdGF0ZToKLSAgICAgICAgICAgIGRlbCBzZWxmLnN0YXRlW3gseV0KKyAgICAgICAgaWYgeCA8IDAgb3Igc2VsZi5YIDw9IHggb3IgeSA8IDAgb3Igc2VsZi5ZIDw9IHk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDb29yZGluYXRlcyBvdXQgb2YgcmFuZ2UgJWksJWkiJSAoeSwgeCkpCisgICAgICAgIGlmICh4LCB5KSBpbiBzZWxmLnN0YXRlOgorICAgICAgICAgICAgZGVsIHNlbGYuc3RhdGVbeCwgeV0KICAgICAgICAgICAgIHNlbGYuc2NyLmFkZGNoKHkrMSwgeCsxLCAnICcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnN0YXRlW3gseV0gPSAxCisgICAgICAgICAgICBzZWxmLnN0YXRlW3gsIHldID0gMQorICAgICAgICAgICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKKyAgICAgICAgICAgICAgICAjIExldCdzIHBpY2sgYSByYW5kb20gY29sb3IhCisgICAgICAgICAgICAgICAgc2VsZi5zY3IuYXR0cnNldChjdXJzZXMuY29sb3JfcGFpcihyYW5kb20ucmFuZHJhbmdlKDEsIDcpKSkKICAgICAgICAgICAgIHNlbGYuc2NyLmFkZGNoKHkrMSwgeCsxLCBzZWxmLmNoYXIpCisgICAgICAgICAgICBzZWxmLnNjci5hdHRyc2V0KDApCiAgICAgICAgIHNlbGYuc2NyLnJlZnJlc2goKQogCiAgICAgZGVmIGVyYXNlKHNlbGYpOgpAQCAtMTExLDcgKzExNCwxMiBAQAogICAgICAgICAgICAgICAgIGlmIHMgPT0gMzoKICAgICAgICAgICAgICAgICAgICAgIyBCaXJ0aAogICAgICAgICAgICAgICAgICAgICBkW2ksal0gPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIExldCdzIHBpY2sgYSByYW5kb20gY29sb3IhCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNjci5hdHRyc2V0KGN1cnNlcy5jb2xvcl9wYWlyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbS5yYW5kcmFuZ2UoMSwgNykpKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNjci5hZGRjaChqKzEsIGkrMSwgc2VsZi5jaGFyKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNjci5hdHRyc2V0KDApCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaXZlOiBzZWxmLmJvcmluZyA9IDAKICAgICAgICAgICAgICAgICBlbGlmIHMgPT0gMiBhbmQgbGl2ZTogZFtpLGpdID0gMSAgICAgICAjIFN1cnZpdmFsCiAgICAgICAgICAgICAgICAgZWxpZiBsaXZlOgpAQCAtMTIxLDcgKzEyOSw3IEBACiAgICAgICAgIHNlbGYuc3RhdGUgPSBkCiAgICAgICAgIHNlbGYuc2NyLnJlZnJlc2goKQogCi0gICAgZGVmIG1ha2VSYW5kb20oc2VsZik6CisgICAgZGVmIG1ha2VfcmFuZG9tKHNlbGYpOgogICAgICAgICAiRmlsbCB0aGUgYm9hcmQgd2l0aCBhIHJhbmRvbSBwYXR0ZXJuIgogICAgICAgICBzZWxmLnN0YXRlID0ge30KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2VsZi5YKToKQEAgLTE0MCwxMCArMTQ4LDE1IEBACiBkZWYgZGlzcGxheV9tZW51KHN0ZHNjciwgbWVudV95KToKICAgICAiRGlzcGxheSB0aGUgbWVudSBvZiBwb3NzaWJsZSBrZXlzdHJva2UgY29tbWFuZHMiCiAgICAgZXJhc2VfbWVudShzdGRzY3IsIG1lbnVfeSkKKworICAgICMgSWYgY29sb3IsIHRoZW4gbGlnaHQgdGhlIG1lbnUgdXAgOi0pCisgICAgaWYgY3Vyc2VzLmhhc19jb2xvcnMoKToKKyAgICAgICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLmNvbG9yX3BhaXIoMSkpCiAgICAgc3Rkc2NyLmFkZHN0cihtZW51X3ksIDQsCi0gICAgICAgICAgICAgICAgICAnVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBtb3ZlLCBhbmQgc3BhY2Ugb3IgRW50ZXIgdG8gdG9nZ2xlIGEgY2VsbC4nKQorICAgICAgICAnVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBtb3ZlLCBhbmQgc3BhY2Ugb3IgRW50ZXIgdG8gdG9nZ2xlIGEgY2VsbC4nKQogICAgIHN0ZHNjci5hZGRzdHIobWVudV95KzEsIDQsCi0gICAgICAgICAgICAgICAgICAnRSlyYXNlIHRoZSBib2FyZCwgUilhbmRvbSBmaWxsLCBTKXRlcCBvbmNlIG9yIEMpb250aW51b3VzbHksIFEpdWl0JykKKyAgICAgICAgJ0UpcmFzZSB0aGUgYm9hcmQsIFIpYW5kb20gZmlsbCwgUyl0ZXAgb25jZSBvciBDKW9udGludW91c2x5LCBRKXVpdCcpCisgICAgc3Rkc2NyLmF0dHJzZXQoMCkKIAogZGVmIGtleWxvb3Aoc3Rkc2NyKToKICAgICAjIENsZWFyIHRoZSBzY3JlZW4gYW5kIGRpc3BsYXkgdGhlIG1lbnUgb2Yga2V5cwpAQCAtMTUyLDYgKzE2NSwxOSBAQAogICAgIG1lbnVfeSA9IChzdGRzY3JfeS0zKS0xCiAgICAgZGlzcGxheV9tZW51KHN0ZHNjciwgbWVudV95KQogCisgICAgIyBJZiBjb2xvciwgdGhlbiBpbml0aWFsaXplIHRoZSBjb2xvciBwYWlycworICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6CisgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMSwgY3Vyc2VzLkNPTE9SX0JMVUUsIDApCisgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMiwgY3Vyc2VzLkNPTE9SX0NZQU4sIDApCisgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMywgY3Vyc2VzLkNPTE9SX0dSRUVOLCAwKQorICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDQsIGN1cnNlcy5DT0xPUl9NQUdFTlRBLCAwKQorICAgICAgICBjdXJzZXMuaW5pdF9wYWlyKDUsIGN1cnNlcy5DT0xPUl9SRUQsIDApCisgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoNiwgY3Vyc2VzLkNPTE9SX1lFTExPVywgMCkKKyAgICAgICAgY3Vyc2VzLmluaXRfcGFpcig3LCBjdXJzZXMuQ09MT1JfV0hJVEUsIDApCisKKyAgICAjIFNldCB1cCB0aGUgbWFzayB0byBsaXN0ZW4gZm9yIG1vdXNlIGV2ZW50cworICAgIGN1cnNlcy5tb3VzZW1hc2soY3Vyc2VzLkJVVFRPTjFfQ0xJQ0tFRCkKKwogICAgICMgQWxsb2NhdGUgYSBzdWJ3aW5kb3cgZm9yIHRoZSBMaWZlIGJvYXJkIGFuZCBjcmVhdGUgdGhlIGJvYXJkIG9iamVjdAogICAgIHN1YndpbiA9IHN0ZHNjci5zdWJ3aW4oc3Rkc2NyX3ktMywgc3Rkc2NyX3gsIDAsIDApCiAgICAgYm9hcmQgPSBMaWZlQm9hcmQoc3Vid2luLCBjaGFyPW9yZCgnKicpKQpAQCAtMTYxLDEwICsxODcsMTAgQEAKICAgICB4cG9zLCB5cG9zID0gYm9hcmQuWC8vMiwgYm9hcmQuWS8vMgogCiAgICAgIyBNYWluIGxvb3A6Ci0gICAgd2hpbGUgKDEpOgorICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHN0ZHNjci5tb3ZlKDEreXBvcywgMSt4cG9zKSAgICAgIyBNb3ZlIHRoZSBjdXJzb3IKICAgICAgICAgYyA9IHN0ZHNjci5nZXRjaCgpICAgICAgICAgICAgICAgICMgR2V0IGEga2V5c3Ryb2tlCi0gICAgICAgIGlmIDA8YzwyNTY6CisgICAgICAgIGlmIDAgPCBjIDwgMjU2OgogICAgICAgICAgICAgYyA9IGNocihjKQogICAgICAgICAgICAgaWYgYyBpbiAnIFxuJzoKICAgICAgICAgICAgICAgICBib2FyZC50b2dnbGUoeXBvcywgeHBvcykKQEAgLTE3NiwxNCArMjAyLDE0IEBACiAgICAgICAgICAgICAgICAgIyBBY3RpdmF0ZSBub2RlbGF5IG1vZGU7IGdldGNoKCkgd2lsbCByZXR1cm4gLTEKICAgICAgICAgICAgICAgICAjIGlmIG5vIGtleXN0cm9rZSBpcyBhdmFpbGFibGUsIGluc3RlYWQgb2Ygd2FpdGluZy4KICAgICAgICAgICAgICAgICBzdGRzY3Iubm9kZWxheSgxKQotICAgICAgICAgICAgICAgIHdoaWxlICgxKToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICBjID0gc3Rkc2NyLmdldGNoKCkKICAgICAgICAgICAgICAgICAgICAgaWYgYyAhPSAtMToKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIHN0ZHNjci5hZGRzdHIoMCwwLCAnLycpCisgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5hZGRzdHIoMCwgMCwgJy8nKQogICAgICAgICAgICAgICAgICAgICBzdGRzY3IucmVmcmVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGJvYXJkLmRpc3BsYXkoKQotICAgICAgICAgICAgICAgICAgICBzdGRzY3IuYWRkc3RyKDAsMCwgJysnKQorICAgICAgICAgICAgICAgICAgICBzdGRzY3IuYWRkc3RyKDAsIDAsICcrJykKICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQogCiAgICAgICAgICAgICAgICAgc3Rkc2NyLm5vZGVsYXkoMCkgICAgICAgIyBEaXNhYmxlIG5vZGVsYXkgbW9kZQpAQCAtMTk0LDE1ICsyMjAsMjUgQEAKICAgICAgICAgICAgIGVsaWYgYyBpbiAnUXEnOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICBlbGlmIGMgaW4gJ1JyJzoKLSAgICAgICAgICAgICAgICBib2FyZC5tYWtlUmFuZG9tKCkKKyAgICAgICAgICAgICAgICBib2FyZC5tYWtlX3JhbmRvbSgpCiAgICAgICAgICAgICAgICAgYm9hcmQuZGlzcGxheSh1cGRhdGVfYm9hcmQ9RmFsc2UpCiAgICAgICAgICAgICBlbGlmIGMgaW4gJ1NzJzoKICAgICAgICAgICAgICAgICBib2FyZC5kaXNwbGF5KCkKICAgICAgICAgICAgIGVsc2U6IHBhc3MgICAgICAgICAgICAgICAgICAjIElnbm9yZSBpbmNvcnJlY3Qga2V5cwotICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9VUCBhbmQgeXBvcz4wOiAgICAgICAgICAgIHlwb3MgLT0gMQotICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9ET1dOIGFuZCB5cG9zPGJvYXJkLlktMTogIHlwb3MgKz0gMQotICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9MRUZUIGFuZCB4cG9zPjA6ICAgICAgICAgIHhwb3MgLT0gMQotICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9SSUdIVCBhbmQgeHBvczxib2FyZC5YLTE6IHhwb3MgKz0gMQorICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9VUCBhbmQgeXBvcyA+IDA6ICAgICAgICAgICAgeXBvcyAtPSAxCisgICAgICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX0RPV04gYW5kIHlwb3MgPCBib2FyZC5ZLTE6ICB5cG9zICs9IDEKKyAgICAgICAgZWxpZiBjID09IGN1cnNlcy5LRVlfTEVGVCBhbmQgeHBvcyA+IDA6ICAgICAgICAgIHhwb3MgLT0gMQorICAgICAgICBlbGlmIGMgPT0gY3Vyc2VzLktFWV9SSUdIVCBhbmQgeHBvcyA8IGJvYXJkLlgtMTogeHBvcyArPSAxCisgICAgICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX01PVVNFOgorICAgICAgICAgICAgbW91c2VfaWQsIG1vdXNlX3gsIG1vdXNlX3ksIG1vdXNlX3osIGJ1dHRvbl9zdGF0ZSA9IGN1cnNlcy5nZXRtb3VzZSgpCisgICAgICAgICAgICBpZiAobW91c2VfeCA+IDAgYW5kIG1vdXNlX3ggPCBib2FyZC5YKzEgYW5kCisgICAgICAgICAgICAgICAgbW91c2VfeSA+IDAgYW5kIG1vdXNlX3kgPCBib2FyZC5ZKzEpOgorICAgICAgICAgICAgICAgIHhwb3MgPSBtb3VzZV94IC0gMQorICAgICAgICAgICAgICAgIHlwb3MgPSBtb3VzZV95IC0gMQorICAgICAgICAgICAgICAgIGJvYXJkLnRvZ2dsZSh5cG9zLCB4cG9zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIFRoZXkndmUgY2xpY2tlZCBvdXRzaWRlIHRoZSBib2FyZAorICAgICAgICAgICAgICAgIGN1cnNlcy5mbGFzaCgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIElnbm9yZSBpbmNvcnJlY3Qga2V5cwogICAgICAgICAgICAgcGFzcwpAQCAtMjExLDYgKzI0Nyw1IEBACiBkZWYgbWFpbihzdGRzY3IpOgogICAgIGtleWxvb3Aoc3Rkc2NyKSAgICAgICAgICAgICAgICAgICAgIyBFbnRlciB0aGUgbWFpbiBsb29wCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBjdXJzZXMud3JhcHBlcihtYWluKQpkaWZmIC0tZ2l0IGEvRGVtby9zY3JpcHRzL21hcmtvdi5weSBiL1Rvb2xzL2RlbW8vbWFya292LnB5CnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERlbW8vc2NyaXB0cy9tYXJrb3YucHkKcmVuYW1lIHRvIFRvb2xzL2RlbW8vbWFya292LnB5CmluZGV4IDk5MGM5NzIuLjdhMDcyMGYgMTAwNzU1Ci0tLSBhL0RlbW8vc2NyaXB0cy9tYXJrb3YucHkKKysrIGIvVG9vbHMvZGVtby9tYXJrb3YucHkKQEAgLTEsNCArMSw4IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCisKKyIiIgorTWFya292IGNoYWluIHNpbXVsYXRpb24gb2Ygd29yZHMgb3IgY2hhcmFjdGVycy4KKyIiIgogCiBjbGFzcyBNYXJrb3Y6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhpc3RzaXplLCBjaG9pY2UpOgpkaWZmIC0tZ2l0IGEvRGVtby9zb2NrZXRzL21jYXN0LnB5IGIvVG9vbHMvZGVtby9tY2FzdC5weQpzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJvbSBEZW1vL3NvY2tldHMvbWNhc3QucHkKcmVuYW1lIHRvIFRvb2xzL2RlbW8vbWNhc3QucHkKaW5kZXggYjdmODU1Ni4uOTI0YzdjMyAxMDA3NTUKLS0tIGEvRGVtby9zb2NrZXRzL21jYXN0LnB5CisrKyBiL1Rvb2xzL2RlbW8vbWNhc3QucHkKQEAgLTEsMTMgKzEsMTUgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBTZW5kL3JlY2VpdmUgVURQIG11bHRpY2FzdCBwYWNrZXRzLgotIyBSZXF1aXJlcyB0aGF0IHlvdXIgT1Mga2VybmVsIHN1cHBvcnRzIElQIG11bHRpY2FzdC4KLSMKLSMgVXNhZ2U6Ci0jICAgbWNhc3QgLXMgKHNlbmRlciwgSVB2NCkKLSMgICBtY2FzdCAtcyAtNiAoc2VuZGVyLCBJUHY2KQotIyAgIG1jYXN0ICAgIChyZWNlaXZlcnMsIElQdjQpCi0jICAgbWNhc3QgIC02ICAocmVjZWl2ZXJzLCBJUHY2KQorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCisiIiIKK1NlbmQvcmVjZWl2ZSBVRFAgbXVsdGljYXN0IHBhY2tldHMuCitSZXF1aXJlcyB0aGF0IHlvdXIgT1Mga2VybmVsIHN1cHBvcnRzIElQIG11bHRpY2FzdC4KKworVXNhZ2U6CisgIG1jYXN0IC1zIChzZW5kZXIsIElQdjQpCisgIG1jYXN0IC1zIC02IChzZW5kZXIsIElQdjYpCisgIG1jYXN0ICAgIChyZWNlaXZlcnMsIElQdjQpCisgIG1jYXN0ICAtNiAgKHJlY2VpdmVycywgSVB2NikKKyIiIgogCiBNWVBPUlQgPSA4MTIzCiBNWUdST1VQXzQgPSAnMjI1LjAuMC4yNTAnCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvcXVlZW5zLnB5IGIvVG9vbHMvZGVtby9xdWVlbnMucHkKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gRGVtby9zY3JpcHRzL3F1ZWVucy5weQpyZW5hbWUgdG8gVG9vbHMvZGVtby9xdWVlbnMucHkKaW5kZXggNzI2NDMzYy4uZGNjMWJhZSAxMDA3NTUKLS0tIGEvRGVtby9zY3JpcHRzL3F1ZWVucy5weQorKysgYi9Ub29scy9kZW1vL3F1ZWVucy5weQpAQCAtMSwxMiArMSwxMiBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCi0iIiJOIHF1ZWVucyBwcm9ibGVtLgorIiIiCitOIHF1ZWVucyBwcm9ibGVtLgogCiBUaGUgKHdlbGwta25vd24pIHByb2JsZW0gaXMgZHVlIHRvIE5pa2xhdXMgV2lydGguCiAKIFRoaXMgc29sdXRpb24gaXMgaW5zcGlyZWQgYnkgRGlqa3N0cmEgKFN0cnVjdHVyZWQgUHJvZ3JhbW1pbmcpLiAgSXQgaXMKIGEgY2xhc3NpYyByZWN1cnNpdmUgYmFja3RyYWNraW5nIGFwcHJvYWNoLgotCiAiIiIKIAogTiA9IDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdDsgY29tbWFuZCBsaW5lIG92ZXJyaWRlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZWRlbW8ucHkgYi9Ub29scy9kZW1vL3JlZGVtby5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gVG9vbHMvc2NyaXB0cy9yZWRlbW8ucHkKcmVuYW1lIHRvIFRvb2xzL2RlbW8vcmVkZW1vLnB5CmRpZmYgLS1naXQgYS9Ub29scy9kZW1vL3JweXRob24ucHkgYi9Ub29scy9kZW1vL3JweXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWU3YmMwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2RlbW8vcnB5dGhvbi5weQpAQCAtMCwwICsxLDM4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyIiIgorUmVtb3RlIHB5dGhvbiBjbGllbnQuCitFeGVjdXRlIFB5dGhvbiBjb21tYW5kcyByZW1vdGVseSBhbmQgc2VuZCBvdXRwdXQgYmFjay4KKyIiIgorCitpbXBvcnQgc3lzCitmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0LCBBRl9JTkVULCBTT0NLX1NUUkVBTSwgU0hVVF9XUgorCitQT1JUID0gNDEyNworQlVGU0laRSA9IDEwMjQKKworZGVmIG1haW4oKToKKyAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMzoKKyAgICAgICAgcHJpbnQoInVzYWdlOiBycHl0aG9uIGhvc3QgY29tbWFuZCIpCisgICAgICAgIHN5cy5leGl0KDIpCisgICAgaG9zdCA9IHN5cy5hcmd2WzFdCisgICAgcG9ydCA9IFBPUlQKKyAgICBpID0gaG9zdC5maW5kKCc6JykKKyAgICBpZiBpID49IDA6CisgICAgICAgIHBvcnQgPSBpbnQocG9ydFtpKzE6XSkKKyAgICAgICAgaG9zdCA9IGhvc3RbOmldCisgICAgY29tbWFuZCA9ICcgJy5qb2luKHN5cy5hcmd2WzI6XSkKKyAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKQorICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisgICAgcy5zZW5kKGNvbW1hbmQuZW5jb2RlKCkpCisgICAgcy5zaHV0ZG93bihTSFVUX1dSKQorICAgIHJlcGx5ID0gYicnCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgZGF0YSA9IHMucmVjdihCVUZTSVpFKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJlcGx5ICs9IGRhdGEKKyAgICBwcmludChyZXBseS5kZWNvZGUoKSwgZW5kPScgJykKKyAgICBzLmNsb3NlKCkKKworbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9kZW1vL3JweXRob25kLnB5IGIvVG9vbHMvZGVtby9ycHl0aG9uZC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZmZlMTNhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZGVtby9ycHl0aG9uZC5weQpAQCAtMCwwICsxLDU4IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisKKyIiIgorUmVtb3RlIHB5dGhvbiBzZXJ2ZXIuCitFeGVjdXRlIFB5dGhvbiBjb21tYW5kcyByZW1vdGVseSBhbmQgc2VuZCBvdXRwdXQgYmFjay4KKworV0FSTklORzogVGhpcyB2ZXJzaW9uIGhhcyBhIGdhcGluZyBzZWN1cml0eSBob2xlIC0tIGl0IGFjY2VwdHMgcmVxdWVzdHMKK2Zyb20gYW55IGhvc3Qgb24gdGhlIEludGVybmV0IQorIiIiCisKK2ltcG9ydCBzeXMKK2Zyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNCitpbXBvcnQgaW8KK2ltcG9ydCB0cmFjZWJhY2sKKworUE9SVCA9IDQxMjcKK0JVRlNJWkUgPSAxMDI0CisKK2RlZiBtYWluKCk6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHBvcnQgPSBpbnQoc3lzLmFyZ3ZbMV0pCisgICAgZWxzZToKKyAgICAgICAgcG9ydCA9IFBPUlQKKyAgICBzID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNKQorICAgIHMuYmluZCgoJycsIHBvcnQpKQorICAgIHMubGlzdGVuKDEpCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgY29ubiwgKHJlbW90ZWhvc3QsIHJlbW90ZXBvcnQpID0gcy5hY2NlcHQoKQorICAgICAgICBwcmludCgnY29ubmVjdGlvbiBmcm9tJywgcmVtb3RlaG9zdCwgcmVtb3RlcG9ydCkKKyAgICAgICAgcmVxdWVzdCA9IGInJworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgZGF0YSA9IGNvbm4ucmVjdihCVUZTSVpFKQorICAgICAgICAgICAgaWYgbm90IGRhdGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHJlcXVlc3QgKz0gZGF0YQorICAgICAgICByZXBseSA9IGV4ZWN1dGUocmVxdWVzdC5kZWNvZGUoKSkKKyAgICAgICAgY29ubi5zZW5kKHJlcGx5LmVuY29kZSgpKQorICAgICAgICBjb25uLmNsb3NlKCkKKworZGVmIGV4ZWN1dGUocmVxdWVzdCk6CisgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVyciA9IGZha2VmaWxlID0gaW8uU3RyaW5nSU8oKQorICAgIHRyeToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhlYyhyZXF1ZXN0LCB7fSwge30pCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoMTAwKQorICAgIGZpbmFsbHk6CisgICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAorICAgIHJldHVybiBmYWtlZmlsZS5nZXR2YWx1ZSgpCisKK3RyeToKKyAgICBtYWluKCkKK2V4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9EZW1vL3RraW50ZXIvZ3VpZG8vc29ydHZpc3UucHkgYi9Ub29scy9kZW1vL3NvcnR2aXN1LnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gRGVtby90a2ludGVyL2d1aWRvL3NvcnR2aXN1LnB5CnJlbmFtZSB0byBUb29scy9kZW1vL3NvcnR2aXN1LnB5CmluZGV4IDMyNmJhZWMuLjg0NDdiYzcKLS0tIGEvRGVtby90a2ludGVyL2d1aWRvL3NvcnR2aXN1LnB5CisrKyBiL1Rvb2xzL2RlbW8vc29ydHZpc3UucHkKQEAgLTEsNiArMSw3IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKLSIiIlNvcnRpbmcgYWxnb3JpdGhtcyB2aXN1YWxpemVyIHVzaW5nIFRraW50ZXIuCisiIiIKK1NvcnRpbmcgYWxnb3JpdGhtcyB2aXN1YWxpemVyIHVzaW5nIFRraW50ZXIuCiAKIFRoaXMgbW9kdWxlIGlzIGNvbXByaXNlZCBvZiB0aHJlZSBgYGNvbXBvbmVudHMnJzoKIApAQCAtMTUsMTMgKzE2LDExIEBACiAKIC0gYW5kIGEgYGBkcml2ZXInJyBjbGFzcyB3aGljaCBjYW4gYmUgdXNlZCBhcyBhIEdyYWlsIGFwcGxldCBvciBhcyBhCiBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbi4KLQogIiIiCiAKIGZyb20gdGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IHJhbmRvbQogCi0KIFhHUklEID0gMTAKIFlHUklEID0gMTAKIFdJRFRIID0gNgpkaWZmIC0tZ2l0IGEvRGVtby90a2ludGVyL2d1aWRvL3NzMS5weSBiL1Rvb2xzL2RlbW8vc3MxLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRGVtby90a2ludGVyL2d1aWRvL3NzMS5weQpyZW5hbWUgdG8gVG9vbHMvZGVtby9zczEucHkKaW5kZXggOGIwNzQ4OS4uNGNlYTY2NwotLS0gYS9EZW1vL3RraW50ZXIvZ3VpZG8vc3MxLnB5CisrKyBiL1Rvb2xzL2RlbW8vc3MxLnB5CkBAIC0xLDQgKzEsOCBAQAotIiIiU1MxIC0tIGEgc3ByZWFkc2hlZXQuIiIiCisjIS91c3IvYmluL2VudiBweXRob24zCisKKyIiIgorU1MxIC0tIGEgc3ByZWFkc2hlZXQtbGlrZSBhcHBsaWNhdGlvbi4KKyIiIgogCiBpbXBvcnQgb3MKIGltcG9ydCByZQpAQCAtNTgyLDcgKzU4Niw3IEBACiAgICAgICAgIGNlbGwgPSBUay5MYWJlbChzZWxmLmNlbGxncmlkLCByZWxpZWY9J3JhaXNlZCcpCiAgICAgICAgIGNlbGwuZ3JpZF9jb25maWd1cmUoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J05TV0UnKQogICAgICAgICBjZWxsLmJpbmQoIjxCdXR0b25QcmVzcy0xPiIsIHNlbGYuc2VsZWN0YWxsKQotICAgICAgICAjIENyZWF0ZSB0aGUgdG9wIHJvdyBvZiBsYWJlbHMsIGFuZCBjb25maXVyZSB0aGUgZ3JpZCBjb2x1bW5zCisgICAgICAgICMgQ3JlYXRlIHRoZSB0b3Agcm93IG9mIGxhYmVscywgYW5kIGNvbmZpZ3VyZSB0aGUgZ3JpZCBjb2x1bW5zCiAgICAgICAgIGZvciB4IGluIHJhbmdlKDEsIGNvbHVtbnMrMSk6CiAgICAgICAgICAgICBzZWxmLmNlbGxncmlkLmdyaWRfY29sdW1uY29uZmlndXJlKHgsIG1pbnNpemU9NjQpCiAgICAgICAgICAgICBjZWxsID0gVGsuTGFiZWwoc2VsZi5jZWxsZ3JpZCwgdGV4dD1jb2xudW0ybmFtZSh4KSwgcmVsaWVmPSdyYWlzZWQnKQpkaWZmIC0tZ2l0IGEvRGVtby9jbGFzc2VzL1ZlYy5weSBiL1Rvb2xzL2RlbW8vdmVjdG9yLnB5CnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBmcm9tIERlbW8vY2xhc3Nlcy9WZWMucHkKcmVuYW1lIHRvIFRvb2xzL2RlbW8vdmVjdG9yLnB5CmluZGV4IDc4N2FmNjkuLmRhNWIzODkgMTAwNzU1Ci0tLSBhL0RlbW8vY2xhc3Nlcy9WZWMucHkKKysrIGIvVG9vbHMvZGVtby92ZWN0b3IucHkKQEAgLTEsNyArMSwxMyBAQAotY2xhc3MgVmVjOgotICAgICIiIiBBIHNpbXBsZSB2ZWN0b3IgY2xhc3MKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotICAgIEluc3RhbmNlcyBvZiB0aGUgVmVjIGNsYXNzICBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBudW1iZXJzCisiIiIKK0EgZGVtb25zdHJhdGlvbiBvZiBjbGFzc2VzIGFuZCB0aGVpciBzcGVjaWFsIG1ldGhvZHMgaW4gUHl0aG9uLgorIiIiCisKK2NsYXNzIFZlYzoKKyAgICAiIiJBIHNpbXBsZSB2ZWN0b3IgY2xhc3MuCisKKyAgICBJbnN0YW5jZXMgb2YgdGhlIFZlYyBjbGFzcyBjYW4gYmUgY29uc3RydWN0ZWQgZnJvbSBudW1iZXJzCiAKICAgICA+Pj4gYSA9IFZlYygxLCAyLCAzKQogICAgID4+PiBiID0gVmVjKDMsIDIsIDEpCmRpZmYgLS1naXQgYS9Ub29scy9mYXF3aXovUkVBRE1FIGIvVG9vbHMvZmFxd2l6L1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTFlNGQ0NC4uMDAwMDAwMAotLS0gYS9Ub29scy9mYXF3aXovUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLUZBUSBXaXphcmQKLS0tLS0tLS0tLS0KLQotQXV0aG9yOiBHdWlkbyB2YW4gUm9zc3VtIDxndWlkb0BweXRob24ub3JnPgotVmVyc2lvbjogMS4wCi1EYXRlOiAgNiBBcHJpbCAxOTk4Ci0KLQotVGhpcyBpcyBhIENHSSBwcm9ncmFtIHRoYXQgbWFpbnRhaW5zIGEgdXNlci1lZGl0YWJsZSBGQVEuICBJdCB1c2VzIFJDUwotdG8ga2VlcCB0cmFjayBvZiBjaGFuZ2VzIHRvIGluZGl2aWR1YWwgRkFRIGVudHJpZXMuICBJdCBpcyBmdWxseQotY29uZmlndXJhYmxlOyBldmVyeXRoaW5nIHlvdSBtaWdodCB3YW50IHRvIGNoYW5nZSB3aGVuIHVzaW5nIHRoaXMKLXByb2dyYW0gdG8gbWFpbnRhaW4gc29tZSBvdGhlciBGQVEgdGhhbiB0aGUgUHl0aG9uIEZBUSBpcyBjb250YWluZWQgaW4KLXRoZSBjb25maWd1cmF0aW9uIG1vZHVsZSwgZmFxY29uZi5weS4KLQotTm90ZSB0aGF0IHRoZSBidWxrIG9mIHRoZSBjb2RlIGlzIG5vdCBhbiBleGVjdXRhYmxlIHNjcmlwdDsgaXQncyBhbgotaW1wb3J0YWJsZSBtb2R1bGUuICBUaGUgYWN0dWFsIHNjcmlwdCBpbiBjZ2ktYmluIGlzIG1pbmltYWwuCi0KLUZpbGVzOgotCi1mYXF3LnB5CQlleGVjdXRhYmxlIHNjcmlwdCB0byBiZSBlZGl0ZWQgYW5kIGluc3RhbGxlZCBpbiBjZ2ktYmluCi1mYXF3aXoucHkJbWFpbiBtb2R1bGUsIGxpdmVzIGluIHNhbWUgZGlyZWN0b3J5IGFzIEZBUSBlbnRyeSBmaWxlcwotZmFxY29uZi5weQltYWluIGNvbmZpZ3VyYXRpb24gbW9kdWxlCi1mYXFjdXN0LnB5CWFkZGl0aW9uYWwgbG9jYWwgY3VzdG9taXphdGlvbiBtb2R1bGUgKG9wdGlvbmFsKQotbW92ZS1mYXF3aXouc2ggIFNjcmlwdCB0byBtb3ZlIGZhcXdpeiBlbnRyaWVzLgotCi0KLVdoYXQncyBOZXc/Ci0tLS0tLS0tLS0tLQotCi1WZXJzaW9uIDEuMCBjb3JyZWN0cyBzb21lIG1pbm9yIGJ1Z3MgYW5kIHVzZXMgdGFiLWFnbm9zdGljCi1pbmRlbnRhdGlvbjsgaXQgaXMgb3RoZXJ3aXNlIHVuY2hhbmdlZCBmcm9tIHZlcnNpb24gMC45LjAuCi0KLVZlcnNpb24gMC45LjAgdXNlcyB0aGUgcmUgbW9kdWxlIChQZXJsIHN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMpIGZvcgotYWxsIGl0cyByZWd1bGFyIGV4cHJlc3Npb24gbmVlZHMsIGluc3RlYWQgb2YgdGhlIHJlZ2V4IGFuZCByZWdzdWIKLW1vZHVsZXMgKEVtYWNzIHN0eWxlKS4gIFRoaXMgYWZmZWN0cyB0aGUgc3ludGF4IGZvciByZWd1bGFyCi1leHByZXNzaW9ucyBlbnRlcmVkIGJ5IHRoZSB1c2VyIGFzIHNlYXJjaCBzdHJpbmdzICh3aXRoICJyZWd1bGFyCi1leHByZXNzaW9uIiBjaGVja2VkKSwgaGVuY2UgdGhlIHZlcnNpb24gbnVtYmVyIGp1bXAuCi0KLQotU2V0dXAgSW5mb3JtYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgYXNzdW1lcyB5b3UgYXJlIGZhbWlsaWFyIHdpdGggUHl0aG9uLCB3aXRoIHlvdXIgaHR0cCBzZXJ2ZXIsIGFuZAotd2l0aCBydW5uaW5nIENHSSBzY3JpcHRzIHVuZGVyIHlvdXIgaHR0cCBzZXJ2ZXIuICBZb3UgbmVlZCBQeXRob24gMS41Ci1vciBiZXR0ZXIuCi0KLVNlbGVjdCBhIHBsYWNlIHdoZXJlIHRoZSBQeXRob24gbW9kdWxlcyB0aGF0IGNvbnN0aXR1dGUgdGhlIEZBUSB3aXphcmQKLXdpbGwgbGl2ZSAodGhlIGRpcmVjdG9yeSB3aGVyZSB5b3UgdW5wYWNrZWQgaXQgaXMgYW4gb2J2aW91cyBjaG9pY2UpLgotVGhpcyB3aWxsIGJlIGNhbGxlZCB0aGUgU1JDRElSLiAgVGhpcyBkaXJlY3Rvcnkgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotYnkgb3RoZXIgdXNlcnMgb2YgeW91ciBzeXN0ZW0gKHNpbmNlIHRoZXkgd291bGQgYmUgYWJsZSB0byBleGVjdXRlCi1hcmJpdHJhcnkgY29kZSBieSBpbnZva2luZyB0aGUgRkFRIHdpemFyZCdzIENHSSBzY3JpcHQpLgotCi1DcmVhdGUgYSBkZWRpY2F0ZWQgd29ya2luZyBkaXJlY3RvcnksIHByZWZlcmFibHkgb25lIHRoYXQncyBub3QKLWRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHlvdXIgaHR0cCBzZXJ2ZXIuICBUaGlzIHdpbGwgYmUgY2FsbGVkIHRoZQotRkFRRElSLiAgQ3JlYXRlIGEgc3ViZGlyZWN0b3J5IG5hbWVkIFJDUy4gIE1ha2UgYm90aCB0aGUgd29ya2luZwotZGlyZWN0b3J5IGFuZCB0aGUgUkNTIHN1YmRpcmVjdG9yeSB3cmxkLXdyaXRhYmxlLiAgKFRoaXMgaXMgZXNzZW50aWFsLAotc2luY2UgdGhlIEZBUSB3aXphcmQgcnVucyBhcyB1c2Ugbm9ib2R5LCBhbmQgbmVlZHMgdG8gY3JlYXRlCi1hZGRpdGlvbmFsIGZpbGVzIGhlcmUhKQotCi1FZGl0IGZhcWNvbmYucHkgdG8gcmVmbGVjdCB5b3VyIHNldHVwLiAgWW91IG9ubHkgbmVlZCB0byBlZGl0IHRoZSB0b3AKLXBhcnQsIHVwIHRpbGwgdGhlIGxpbmUgb2YgYWxsIGRhc2hlcy4gIFRoZSBjb21tZW50cyBzaG91bGQgZ3VpZGUgeW91Ci1pbiB5b3VyIGVkaXRzLiAgKEFjdHVhbGx5LCB5b3UgY2FuIGFsc28gY2hvb3NlIHRvIGFkZCB5b3VyIGNoYW5nZXMgdG8KLWZhcWN1c3QucHkgYW5kIGxlYXZlIGZhcWNvbmYucHkgYWxvbmUuICBUaGlzIGlzIGVzc2VudGlhbCBpZiB5b3UgYXJlCi1tYWludGFpbmluZyBtdWx0aXBsZSBGQVFzOyBzZWUgYmVsb3cuKQotCi1Eb24ndCBmb3JnZXQgdG8gZWRpdCB0aGUgU0VDVElPTl9USVRMRVMgdmFyaWFibGVzIHRvIHJlZmxlY3QgdGhlIHNldAotb2Ygc2VjdGlvbiB0aXRsZXMgZm9yIHlvdXIgRkFRIQotCi1OZXh0LCBlZGl0IGZhcXcucHkgdG8gcmVmbGVjdCB0aGUgcGF0aG5hbWUgb2YgeW91ciBQeXRob24gaW50ZXJwcmV0ZXIKLWFuZCB0aGUgdmFsdWVzIGZvciBTUkNESVIgYW5kIEZBUURJUiB0aGF0IHlvdSBqdXN0IGNob3NlLiAgVGhlbgotaW5zdGFsbCBmYXF3LnB5IGluIHlvdXIgY2dpLWJpbiBkaXJlY3RvcnkuICBNYWtlIHN1cmUgdGhhdCBpdCBpcwotd29ybGQtZXhlY3V0YWJsZS4gIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gY29ubmVjdCB0byB0aGUgRkFRIHdpemFyZAotYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZyBVUkwgaW4geW91ciB3ZWIgY2xpZW50IChzdWJzaXR1dGluZyB0aGUKLWFwcHJvcHJpYXRlIGhvc3QgYW5kIHBvcnQgZm9yICJ5b3VyLndlYi5zZXJ2ZXIiLCBhbmQgcGVyaGFwcwotc3BlY2lmeWluZyBhIGRpZmZlcmVudCBkaXJlY3RvcnkgZm9yICJjZ2ktYmluIiBpZiBsb2NhbCBjb252ZW50aW9ucyBzbwotZGljdGF0ZSk6Ci0KLQlodHRwOi8veW91ci53ZWIuc2VydmVyL2NnaS1iaW4vZmFxdy5weQotCi1JZiB5b3UgYXJlIHVuYWJsZSB0byBnZXQgdGhpcyB3b3JraW5nLCBjaGVjayB5b3VyIHNlcnZlcidzIGVycm9yX2xvZwotZmlsZS4gIFRoZSBkb2N1bWVudGF0aW9uIGZvciBQeXRob24ncyBjZ2kgbW9kdWxlIGluIHRoZSBQeXRob24gTGlicmFyeQotUmVmZXJlbmNlIE1hbnVhbCBnaXZlcyBwbGVudHl1IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgaW5zdGFsbGluZwotYW5kIGRlYnVnZ2luZyBDR0kgc2NyaXB0cywgaW5jbHVkaW5nIHNldHVwIGRlYnVnZ2luZy4gIFRoaXMKLWRvY3VtZW50YXRpb24gaXMgcmVwZWF0ZWQgaW4gdGhlIGRvYyBzdHJpbmcgaW4gdGhlIGNnaSBtb2R1bGU7IHRyeQotYGBpbXBvcnQgY2dpOyBwcmludCBjZ2kuX19kb2NfXycnLgotCi1Bc3N1bWluZyB0aGlzIHdvcmtzLCB5b3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIGFkZCB0aGUgZmlyc3QgZW50cnkgdG8KLXlvdXIgRkFRIHVzaW5nIHRoZSBGQVEgd2l6YXJkIGludGVyZmFjZS4gIFRoaXMgY3JlYXRlcyBhIGZpbGUKLWZhcTAxLjAwMS5odHAgaW4geW91ciB3b3JraW5nIGRpcmVjdG9yeSBhbmQgYW4gUkNTIHJldmlzaW9uIGhpc3RvcnkKLWZpbGUgZmFxMDEuMDAxLmh0cCx2IGluIHRoZSBSQ1Mgc3ViZGlyZWN0b3J5LiAgWW91IGNhbiBub3cgZXhlcmNpc2UKLXRoZSBvdGhlciBGQVEgd2l6YXJkIGZlYXR1cmVzIChzZWFyY2gsIGluZGV4LCB3aG9sZSBGQVEsIHdoYXQncyBuZXcsCi1yb3VsZXR0ZSwgYW5kIHNvIG9uKS4KLQotCi1NYWludGFpbmluZyBNdWx0aXBsZSBGQVFzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSBoYXZlIG11bHRpcGxlIEZBUXMsIHlvdSBuZWVkIGEgc2VwYXJhdGUgRkFRRElSIHBlciBGQVEsIGFuZCBhCi1kaWZmZXJlbnQgY3VzdG9taXphdGlvbiBmaWxlIHBlciBGQVEuICBUaGUgZWFzaWVzdCB0aGluZyB0byBkbyB3b3VsZAotYmUgdG8gaGF2ZSB0aGUgZmFxY3VzdC5weSBmb3IgZWFjaCBGQVEgbGl2ZSBpbiB0aGUgRkFRRElSIGZvciB0aGF0Ci1GQVEsIGJ1dCB0aGF0IGNyZWF0ZXMgc29tZSBzZWN1cml0eSBjb25jZXJucywgc2luY2UgdGhlIEZBUURJUiBtdXN0IGJlCi13b3JsZCB3cml0YWJsZTogKmlmKiBzb21lb25lIHdobyBicmVha3MgaW50byB5b3VyIHN5c3RlbSAob3IgYQotbGVnaXRpbWF0ZSB1c2VyKSBtYW5hZ2VzIHRvIGVkaXQgdGhlIGZhcWN1c3QucHkgZmlsZSB0aGV5IGNhbiBnZXQKLWFyYml0cmFyeSBjb2RlIHRvIGV4ZWN1dGUgdGhyb3VnaCB0aGUgRkFRIHdpemFyZC4gIFRoZXJlZm9yZSwgeW91IHdpbGwKLW5lZWQgYSBtb3JlIGNvbXBsZXggc2V0dXAuCi0KLVRoZSBiZXN0IHdheSBpcyBwcm9iYWJseSB0byBoYXZlIGEgZGlyZWN0b3J5IHRoYXQgaXMgb25seSB3cml0YWJsZSBieQoteW91IGZvciBlYWNoIEZBUSwgd2hlcmUgeW91IHBsYWNlIHRoZSBjb3B5IG9mIGZhcWN1c3QucHkgZm9yIHRoYXQgRkFRLAotYW5kIGhhdmUgYSB3b3JsZC13cml0YWJsZSBzdWJkaXJlY3RvcnkgREFUQSBmb3IgdGhlIGRhdGEuICBZb3UgdGhlbgotc2V0IEZBUURJUiB0byBwb2ludCB0byB0aGUgREFUQSBkaXJlY3RvcnkgYW5kIGNoYW5nZSB0aGUgZmFxdy5weQotYm9vdHN0cmFwIHNjcmlwdCB0byBhZGQgRkFRRElSLy4uIHRvIHN5cy5wYXRoIChpbiBmcm9udCBvZiBTUkNESVIsIHNvCi10aGUgZHVtbXkgZmFxY3VzdC5weSBmcm9tIFNSQ0RJUiBpcyBpZ25vcmVkKS4KLQotLS1HdWlkbyB2YW4gUm9zc3VtIChob21lIHBhZ2U6IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9+Z3VpZG8vKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZmFxd2l6L2ZhcWNvbmYucHkgYi9Ub29scy9mYXF3aXovZmFxY29uZi5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFhY2Q4MC4uMDAwMDAwMAotLS0gYS9Ub29scy9mYXF3aXovZmFxY29uZi5weQorKysgL2Rldi9udWxsCkBAIC0xLDU3NyArMCwwIEBACi0iIiJGQVEgV2l6YXJkIGN1c3RvbWl6YXRpb24gbW9kdWxlLgotCi1FZGl0IHRoaXMgZmlsZSB0byBjdXN0b21pemUgdGhlIEZBUSBXaXphcmQuICBGb3Igbm9ybWFsIHB1cnBvc2VzLCB5b3UKLXNob3VsZCBvbmx5IGhhdmUgdG8gY2hhbmdlIHRoZSBGQVEgc2VjdGlvbiB0aXRsZXMgYW5kIHRoZSBzbWFsbCBncm91cAotb2YgcGFyYW1ldGVycyBiZWxvdyBpdC4KLQotIiIiCi0KLSMgVGl0bGVzIG9mIEZBUSBzZWN0aW9ucwotCi1TRUNUSU9OX1RJVExFUyA9IHsKLSAgICAjIFNlY3Rpb25OdW1iZXIgOiBTZWN0aW9uVGl0bGU7IG5lZWQgYXQgbGVhc3Qgb25lIGVudHJ5Ci0gICAgMTogIkdlbmVyYWwgaW5mb3JtYXRpb24gYW5kIGF2YWlsYWJpbGl0eSIsCi19Ci0KLSMgUGFyYW1ldGVycyB5b3UgZGVmaW5pdGVseSB3YW50IHRvIGNoYW5nZQotCi1TSE9SVE5BTUUgPSAiR2VuZXJpYyIgICAgICAgICAgICAgICAgICAgIyBGQVEgbmFtZSB3aXRoICJGQVEiIG9taXR0ZWQKLVBBU1NXT1JEID0gIiIgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFBhc3N3b3JkIGZvciBlZGl0aW5nCi1PV05FUk5BTUUgPSAiRkFRIG93bmVyIiAgICAgICAgICAgICAgICAgIyBOYW1lIGZvciBmZWVkYmFjawotT1dORVJFTUFJTCA9ICJub2JvZHlAYW55d2hlcmUub3JnIiAgICAgICMgRW1haWwgZm9yIGZlZWRiYWNrCi1IT01FVVJMID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIgICAgICAgIyBSZWxhdGVkIGhvbWUgcGFnZQotSE9NRU5BTUUgPSAiUHl0aG9uIGhvbWUiICAgICAgICAgICAgICAgICMgTmFtZSBvZiByZWxhdGVkIGhvbWUgcGFnZQotUkNTQklORElSID0gIi91c3IvbG9jYWwvYmluLyIgICAgICAgICAgICMgRGlyZWN0b3J5IGNvbnRhaW5pbmcgUkNTIGNvbW1hbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAobXVzdCBlbmQgaW4gYSBzbGFzaCkKLQotIyBQYXJhbWV0ZXJzIHlvdSBjYW4gbm9ybWFsbHkgbGVhdmUgYWxvbmUKLQotTUFYSElUUyA9IDEwICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWF4ICNoaXRzIHRvIGJlIHNob3duIGRpcmVjdGx5Ci1DT09LSUVfTElGRVRJTUUgPSAyOCoyNCozNjAwICAgICAgICAgICAgIyBDb29raWUgZXhwaXJhdGlvbiBpbiBzZWNvbmRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoMjgqMjQqMzYwMCA9IDI4IGRheXMgPSA0IHdlZWtzKQotUFJPQ0VTU19QUkVGT1JNQVQgPSAxICAgICAgICAgICAgICAgICAgICMgdG9nZ2xlIHdoZXRoZXIgcHJlZm9ybWF0dGVkIHRleHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdpbGwgcmVwbGFjZSB1cmxzIGFuZCBlbWFpbHMgd2l0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSFRNTCBsaW5rcwotCi0jIE1hcmtlcnMgYXBwZW5kZWQgdG8gdGl0bGUgdG8gaW5kaWNhdGUgcmVjZW50bHkgY2hhbmdlCi0jIChtYXkgY29udGFpbiBIVE1MLCBlLmcuIDxJTUc+KTsgYW5kIGNvcnJlc3BvbmRpbmcKLQotTUFSS19WRVJZX1JFQ0VOVCA9ICIgKioiICAgICAgICAgICAgICAgICMgQ2hhbmdlZCB2ZXJ5IHJlY2VudGx5Ci1NQVJLX1JFQ0VOVCA9ICIgKiIgICAgICAgICAgICAgICAgICAgICAgIyBDaGFuZ2VkIHJlY2VudGx5Ci1EVF9WRVJZX1JFQ0VOVCA9IDI0KjM2MDAgICAgICAgICAgICAgICAgIyAyNCBob3VycwotRFRfUkVDRU5UID0gNyoyNCozNjAwICAgICAgICAgICAgICAgICAgICMgNyBkYXlzCi0KLUVYUExBSU5fTUFSS1MgPSAiIiIKLTxQPihFbnRyaWVzIG1hcmtlZCB3aXRoICoqIHdlcmUgY2hhbmdlZCB3aXRoaW4gdGhlIGxhc3QgMjQgaG91cnM7Ci1lbnRyaWVzIG1hcmtlZCB3aXRoICogd2VyZSBjaGFuZ2VkIHdpdGhpbiB0aGUgbGFzdCA3IGRheXMuKQotPFA+Ci0iIiIKLQotIyBWZXJzaW9uIC0tIGRvbid0IGNoYW5nZSB1bmxlc3MgeW91IGVkaXQgZmFxd2l6LnB5Ci0KLVdJWlZFUlNJT04gPSAiMS4wLjQiICAgICAgICAgICAgICAgICAgICAjIEZBUSBXaXphcmQgdmVyc2lvbgotCi1pbXBvcnQgb3MsIHN5cwotaWYgb3MubmFtZSBpbiBbJ250JyxdOgotICAgICMgT24gTlQgd2UnbGwgcHJvYmFibHkgYmUgcnVubmluZyBweXRob24gZnJvbSBhIGJhdGNoIGZpbGUsCi0gICAgIyBzbyBzeXMuYXJndlswXSBpcyBub3QgaGVscGZ1bAotICAgIEZBUUNHSSA9ICdmYXEuYmF0JyAgICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgVVJMIG9mIHRoZSBGQVEgY2dpIHNjcmlwdAotICAgICMgTE9HTkFNRSBpcyBub3QgdHlwaWNhbGx5IHNldCBvbiBOVAotICAgIG9zLmVudmlyb25bICdMT0dOQU1FJyBdID0gIkZBUVdpemFyZCIKLWVsc2U6Ci0gICAgIyBUaGlzIHBhcmFtZXRlciBpcyBub3JtYWxseSBvdmVyd3JpdHRlbiB3aXRoIGEgZHluYW1pYyB2YWx1ZQotICAgIEZBUUNHSSA9ICdmYXF3LnB5JyAgICAgICAgICAgICAgICAgICMgUmVsYXRpdmUgVVJMIG9mIHRoZSBGQVEgY2dpIHNjcmlwdAotICAgIEZBUUNHSSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pIG9yIEZBUUNHSQotZGVsIG9zLCBzeXMKLQotIyBQZXJsIChyZSBtb2R1bGUpIHN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byByZWNvZ25pemUgRkFRIGVudHJ5Ci0jIGZpbGVzOiBncm91cCgxKSBzaG91bGQgYmUgdGhlIHNlY3Rpb24gbnVtYmVyLCBncm91cCgyKSBzaG91bGQgYmUgdGhlCi0jIHF1ZXN0aW9uIG51bWJlci4gIEJvdGggc2hvdWxkIGJlIGZpeGVkIHdpZHRoIHNvIHNpbXBsZS1taW5kZWQKLSMgc29ydGluZyB5aWVsZHMgdGhlIHJpZ2h0IG9yZGVyLgotCi1PS0ZJTEVOQU1FID0gciJeZmFxKFxkXGQpXC4oXGRcZFxkKVwuaHRwJCIKLQotIyBGb3JtYXQgdG8gY29uc3RydWN0IGEgRkFRIGVudHJ5IGZpbGUgbmFtZQotCi1ORVdGSUxFTkFNRSA9ICJmYXElMDJkLiUwM2QuaHRwIgotCi0jIExvYWQgbG9jYWwgY3VzdG9taXphdGlvbnMgb24gdG9wIG9mIHRoZSBwcmV2aW91cyBwYXJhbWV0ZXJzCi0KLXRyeToKLSAgICBmcm9tIGZhcWN1c3QgaW1wb3J0ICoKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi0KLSMgQ2FsY3VsYXRlZCBwYXJhbWV0ZXIgbmFtZXMKLQotQ09PS0lFX05BTUUgPSBTSE9SVE5BTUUgKyAiLUZBUS1XaXphcmQiICMgTmFtZSB1c2VkIGZvciBOZXRzY2FwZSBjb29raWUKLUZBUU5BTUUgPSBTSE9SVE5BTUUgKyAiIEZBUSIgICAgICAgICAgICAjIE5hbWUgb2YgdGhlIEZBUQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotIyBBbnl0aGluZyBiZWxvdyB0aGlzIHBvaW50IG5vcm1hbGx5IG5lZWRuJ3QgYmUgY2hhbmdlZDsgeW91IHdvdWxkCi0jIGNoYW5nZSB0aGlzIGlmIHlvdSB3ZXJlIHRvIGNyZWF0ZSBlLmcuIGEgRnJlbmNoIHRyYW5zbGF0aW9uIG9yIGlmCi0jIHlvdSBqdXN0IGFyZW4ndCBoYXBweSB3aXRoIHRoZSB0ZXh0IGdlbmVyYXRlZCBieSB0aGUgRkFRIFdpemFyZC4KLQotIyBNb3N0IHN0cmluZ3MgaGVyZSBhcmUgc3ViamVjdCB0byBzdWJzdGl0dXRpb24gKHN0cmluZyVkaWN0aW9uYXJ5KQotCi0jIFJDUyBjb21tYW5kcwotCi1pbXBvcnQgb3MKLWlmIG9zLm5hbWUgaW4gWydudCcsIF06Ci0gICAgU0hfUkxPRyA9IFJDU0JJTkRJUiArICJybG9nICUoZmlsZSlzIDwgTlVMIgotICAgIFNIX1JMT0dfSCA9IFJDU0JJTkRJUiArICJybG9nIC1oICUoZmlsZSlzICA8IE5VTCIKLSAgICBTSF9SRElGRiA9IFJDU0JJTkRJUiArICJyY3NkaWZmIC1yJShwcmV2KXMgLXIlKHJldilzICUoZmlsZSlzIDwgTlVMIgotICAgIFNIX1JFVklTSU9OID0gUkNTQklORElSICsgImNvIC1wJShyZXYpcyAlKGZpbGUpcyA8IE5VTCIKLSAgICAjIyMgSGF2ZSB0byB1c2UgY28gLWwsIG9yIHRoZSBmaWxlIGlzIG5vdCBtYXJrZWQgcncgb24gTlQKLSAgICBTSF9MT0NLID0gUkNTQklORElSICsgImNvIC1sICUoZmlsZSlzIDwgTlVMIgotICAgIFNIX0NIRUNLSU4gPSAgUkNTQklORElSICsgImNpIC11ICUoZmlsZSlzIDwgJSh0Zm4pcyIKLWVsc2U6Ci0gICAgU0hfUkxPRyA9IFJDU0JJTkRJUiArICJybG9nICUoZmlsZSlzIDwvZGV2L251bGwgMj4mMSIKLSAgICBTSF9STE9HX0ggPSBSQ1NCSU5ESVIgKyAicmxvZyAtaCAlKGZpbGUpcyA8L2Rldi9udWxsIDI+JjEiCi0gICAgU0hfUkRJRkYgPSBSQ1NCSU5ESVIgKyAicmNzZGlmZiAtciUocHJldilzIC1yJShyZXYpcyAlKGZpbGUpcyA8L2Rldi9udWxsIDI+JjEiCi0gICAgU0hfUkVWSVNJT04gPSBSQ1NCSU5ESVIgKyAiY28gLXAlKHJldilzICUoZmlsZSlzIDwvZGV2L251bGwgMj4mMSIKLSAgICBTSF9MT0NLID0gUkNTQklORElSICsgInJjcyAtbCAlKGZpbGUpcyA8L2Rldi9udWxsIDI+JjEiCi0gICAgU0hfQ0hFQ0tJTiA9ICBSQ1NCSU5ESVIgKyAiY2kgLXUgJShmaWxlKXMgPCUodGZuKXMgMj4mMSIKLWRlbCBvcwotCi0jIFRpdGxlcyBmb3IgdmFyaW91cyBvdXRwdXQgcGFnZXMgKG5vdCBzdWJqZWN0IHRvIHN1YnN0aXR1dGlvbikKLQotVF9IT01FID0gRkFRTkFNRSArICIgV2l6YXJkICIgKyBXSVpWRVJTSU9OCi1UX0VSUk9SID0gIlNvcnJ5LCBhbiBlcnJvciBvY2N1cnJlZCIKLVRfUk9VTEVUVEUgPSBGQVFOQU1FICsgIiBSb3VsZXR0ZSIKLVRfQUxMID0gIlRoZSBXaG9sZSAiICsgRkFRTkFNRQotVF9JTkRFWCA9IEZBUU5BTUUgKyAiIEluZGV4IgotVF9TRUFSQ0ggPSBGQVFOQU1FICsgIiBTZWFyY2ggUmVzdWx0cyIKLVRfUkVDRU5UID0gIldoYXQncyBOZXcgaW4gdGhlICIgKyBGQVFOQU1FCi1UX1NIT1cgPSBGQVFOQU1FICsgIiBFbnRyeSIKLVRfTE9HID0gIlJDUyBsb2cgZm9yICVzIGVudHJ5IiAlIEZBUU5BTUUKLVRfUkVWSVNJT04gPSAiUkNTIHJldmlzaW9uIGZvciAlcyBlbnRyeSIgJSBGQVFOQU1FCi1UX0RJRkYgPSAiUkNTIGRpZmYgZm9yICVzIGVudHJ5IiAlIEZBUU5BTUUKLVRfQUREID0gIkFkZCBhbiBlbnRyeSB0byB0aGUgIiArIEZBUU5BTUUKLVRfREVMRVRFID0gIkRlbGV0aW5nIGFuIGVudHJ5IGZyb20gdGhlICIgKyBGQVFOQU1FCi1UX0VESVQgPSBGQVFOQU1FICsgIiBFZGl0IFdpemFyZCIKLVRfUkVWSUVXID0gVF9FRElUICsgIiAtIFJldmlldyBDaGFuZ2VzIgotVF9DT01NSVRURUQgPSBUX0VESVQgKyAiIC0gQ2hhbmdlcyBDb21taXR0ZWQiCi1UX0NPTU1JVEZBSUxFRCA9IFRfRURJVCArICIgLSBDb21taXQgRmFpbGVkIgotVF9DQU5UQ09NTUlUID0gVF9FRElUICsgIiAtIENvbW1pdCBSZWplY3RlZCIKLVRfSEVMUCA9IFRfRURJVCArICIgLSBIZWxwIgotCi0jIEdlbmVyaWMgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlCi0KLVBST0xPR1VFID0gJycnCi08SFRNTD4KLTxIRUFEPgotPFRJVExFPiUodGl0bGUpczwvVElUTEU+Ci08L0hFQUQ+Ci0KLTxCT0RZCi0gICAgICBCR0NPTE9SPSIjRkZGRkZGIgotICAgICAgVEVYVD0iIzAwMDAwMCIKLSAgICAgIExJTks9IiNBQTAwMDAiCi0gICAgICBWTElOSz0iIzkwNkE2QSI+Ci08SDE+JSh0aXRsZSlzPC9IMT4KLScnJwotCi1FUElMT0dVRSA9ICcnJwotPEhSPgotPEEgSFJFRj0iJShIT01FVVJMKXMiPiUoSE9NRU5BTUUpczwvQT4gLwotPEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9aG9tZSI+JShGQVFOQU1FKXMgV2l6YXJkICUoV0laVkVSU0lPTilzPC9BPiAvCi1GZWVkYmFjayB0byA8QSBIUkVGPSJtYWlsdG86JShPV05FUkVNQUlMKXMiPiUoT1dORVJOQU1FKXM8L0E+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KLScnJwotCi0jIEhvbWUgcGFnZQotCi1IT01FID0gIiIiCi08SDI+U2VhcmNoIHRoZSAlKEZBUU5BTUUpczo8L0gyPgotCi08QkxPQ0tRVU9URT4KLQotPEZPUk0gQUNUSU9OPSIlKEZBUUNHSSlzIj4KLSAgICA8SU5QVVQgVFlQRT10ZXh0IE5BTUU9cXVlcnk+Ci0gICAgPElOUFVUIFRZUEU9c3VibWl0IFZBTFVFPSJTZWFyY2giPjxCUj4KLSAgICA8SU5QVVQgVFlQRT1yYWRpbyBOQU1FPXF1ZXJ5dHlwZSBWQUxVRT1zaW1wbGUgQ0hFQ0tFRD4KLSAgICAgICAgU2ltcGxlIHN0cmluZwotICAgICAgICAvCi0gICAgPElOUFVUIFRZUEU9cmFkaW8gTkFNRT1xdWVyeXR5cGUgVkFMVUU9cmVnZXg+Ci0gICAgICAgIFJlZ3VsYXIgZXhwcmVzc2lvbgotICAgICAgICAvPEJSPgotICAgIDxJTlBVVCBUWVBFPXJhZGlvIE5BTUU9cXVlcnl0eXBlIFZBTFVFPWFueWtleXdvcmRzPgotICAgICAgICBLZXl3b3JkcyAoYW55KQotICAgICAgICAvCi0gICAgPElOUFVUIFRZUEU9cmFkaW8gTkFNRT1xdWVyeXR5cGUgVkFMVUU9YWxsa2V5d29yZHM+Ci0gICAgICAgIEtleXdvcmRzIChhbGwpCi0gICAgICAgIDxCUj4KLSAgICA8SU5QVVQgVFlQRT1yYWRpbyBOQU1FPWNhc2Vmb2xkIFZBTFVFPXllcyBDSEVDS0VEPgotICAgICAgICBGb2xkIGNhc2UKLSAgICAgICAgLwotICAgIDxJTlBVVCBUWVBFPXJhZGlvIE5BTUU9Y2FzZWZvbGQgVkFMVUU9bm8+Ci0gICAgICAgIENhc2Ugc2Vuc2l0aXZlCi0gICAgICAgIDxCUj4KLSAgICA8SU5QVVQgVFlQRT1oaWRkZW4gTkFNRT1yZXEgVkFMVUU9c2VhcmNoPgotPC9GT1JNPgotCi08L0JMT0NLUVVPVEU+Ci0KLTxIUj4KLQotPEgyPk90aGVyIGZvcm1zIG9mICUoRkFRTkFNRSlzIGFjY2Vzczo8L0gyPgotCi08VUw+Ci08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9aW5kZXgiPkZBUSBpbmRleDwvQT4KLTxMST48QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1hbGwiPlRoZSB3aG9sZSBGQVE8L0E+Ci08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9cmVjZW50Ij5XaGF0J3MgbmV3IGluIHRoZSBGQVE/PC9BPgotPExJPjxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPXJvdWxldHRlIj5GQVEgcm91bGV0dGU8L0E+Ci08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9YWRkIj5BZGQgYSBGQVEgZW50cnk8L0E+Ci08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9ZGVsZXRlIj5EZWxldGUgYSBGQVEgZW50cnk8L0E+Ci08L1VMPgotIiIiCi0KLSMgSW5kZXggZm9ybWF0dGluZwotCi1JTkRFWF9TRUNUSU9OID0gIiIiCi08UD4KLTxIUj4KLTxIMj4lKHNlYylzLiAlKHRpdGxlKXM8L0gyPgotPFVMPgotIiIiCi0KLUlOREVYX0FERFNFQ1RJT04gPSAiIiIKLTxQPgotPExJPjxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPW5ldyZhbXA7c2VjdGlvbj0lKHNlYylzIj5BZGQgbmV3IGVudHJ5PC9BPgotKGF0IHRoaXMgcG9pbnQpCi0iIiIKLQotSU5ERVhfRU5EU0VDVElPTiA9ICIiIgotPC9VTD4KLSIiIgotCi1JTkRFWF9FTlRSWSA9ICIiIlwKLTxMST48QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1zaG93JmFtcDtmaWxlPSUoZmlsZSlzIj4lKHRpdGxlKXM8L0E+Ci0iIiIKLQotTE9DQUxfRU5UUlkgPSAiIiJcCi08TEk+PEEgSFJFRj0iIyUoc2VjKXMuJShudW0pcyI+JSh0aXRsZSlzPC9BPgotIiIiCi0KLSMgRW50cnkgZm9ybWF0dGluZwotCi1FTlRSWV9IRUFERVIxID0gIiIiCi08SFI+Ci08SDI+PEEgTkFNRT0iJShzZWMpcy4lKG51bSlzIj4lKHRpdGxlKXM8L0E+XAotIiIiCi0KLUVOVFJZX0hFQURFUjIgPSAiIiJcCi08L0gyPgotIiIiCi0KLUVOVFJZX0ZPT1RFUiA9ICIiIgotPEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9ZWRpdCZhbXA7ZmlsZT0lKGZpbGUpcyI+RWRpdCB0aGlzIGVudHJ5PC9BPiAvCi08QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1sb2cmYW1wO2ZpbGU9JShmaWxlKXMiPkxvZyBpbmZvPC9BPgotIiIiCi0KLUVOVFJZX0xPR0lORk8gPSAiIiIKLS8gTGFzdCBjaGFuZ2VkIG9uICUobGFzdF9jaGFuZ2VkX2RhdGUpcyBieQotPEEgSFJFRj0ibWFpbHRvOiUobGFzdF9jaGFuZ2VkX2VtYWlsKXMiPiUobGFzdF9jaGFuZ2VkX2F1dGhvcilzPC9BPgotIiIiCi0KLSMgU2VhcmNoCi0KLU5PX0hJVFMgPSAiIiIKLU5vIGhpdHMuCi0iIiIKLQotT05FX0hJVCA9ICIiIgotWW91ciBzZWFyY2ggbWF0Y2hlZCB0aGUgZm9sbG93aW5nIGVudHJ5OgotIiIiCi0KLUZFV19ISVRTID0gIiIiCi1Zb3VyIHNlYXJjaCBtYXRjaGVkIHRoZSBmb2xsb3dpbmcgJShjb3VudClzIGVudHJpZXM6Ci0iIiIKLQotTUFOWV9ISVRTID0gIiIiCi1Zb3VyIHNlYXJjaCBtYXRjaGVkIG1vcmUgdGhhbiAlKE1BWEhJVFMpcyBlbnRyaWVzLgotVGhlICUoY291bnQpcyBtYXRjaGluZyBlbnRyaWVzIGFyZSBwcmVzZW50ZWQgaGVyZSBvcmRlcmVkIGJ5IHNlY3Rpb246Ci0iIiIKLQotIyBSQ1MgbG9nIGFuZCBkaWZmCi0KLUxPRyA9ICIiIgotQ2xpY2sgb24gYSByZXZpc2lvbiBsaW5lIHRvIHNlZSB0aGUgZGlmZiBiZXR3ZWVuIHRoYXQgcmV2aXNpb24gYW5kIHRoZQotcHJldmlvdXMgb25lLgotIiIiCi0KLVJFVklTSU9OTElOSyA9ICIiIlwKLTxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPXJldmlzaW9uJmFtcDtmaWxlPSUoZmlsZSlzJmFtcDtyZXY9JShyZXYpcyIKLT4lKGxpbmUpczwvQT5cCi0iIiIKLURJRkZMSU5LID0gIiIiXAotICg8QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1kaWZmJmFtcDtmaWxlPSUoZmlsZSlzJmFtcDtcCi1wcmV2PSUocHJldilzJmFtcDtyZXY9JShyZXYpcyIKLT5kaWZmIC1yJShwcmV2KXMgLXIlKHJldilzPC9BPilcCi0iIiIKLQotIyBSZWNlbnRseSBjaGFuZ2VkIGVudHJpZXMKLQotTk9fUkVDRU5UID0gIiIiCi08SFI+Ci1ObyAlKEZBUU5BTUUpcyBlbnRyaWVzIHdlcmUgY2hhbmdlZCBpbiB0aGUgbGFzdCAlKHBlcmlvZClzLgotIiIiCi0KLVZJRVdfTUVOVSA9ICIiIgotPEhSPgotVmlldyBlbnRyaWVzIGNoYW5nZWQgaW4gdGhlIGxhc3QuLi4KLTxVTD4KLTxMST48QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1yZWNlbnQmYW1wO2RheXM9MSI+MjQgaG91cnM8L0E+Ci08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9cmVjZW50JmFtcDtkYXlzPTIiPjIgZGF5czwvQT4KLTxMST48QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1yZWNlbnQmYW1wO2RheXM9MyI+MyBkYXlzPC9BPgotPExJPjxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPXJlY2VudCZhbXA7ZGF5cz03Ij53ZWVrPC9BPgotPExJPjxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPXJlY2VudCZhbXA7ZGF5cz0yOCI+NCB3ZWVrczwvQT4KLTxMST48QSBIUkVGPSIlKEZBUUNHSSlzP3JlcT1yZWNlbnQmYW1wO2RheXM9MzY1MjUwIj5taWxsZW5uaXVtPC9BPgotPC9VTD4KLSIiIgotCi1PTkVfUkVDRU5UID0gVklFV19NRU5VICsgIiIiCi1UaGUgZm9sbG93aW5nICUoRkFRTkFNRSlzIGVudHJ5IHdhcyBjaGFuZ2VkIGluIHRoZSBsYXN0ICUocGVyaW9kKXM6Ci0iIiIKLQotU09NRV9SRUNFTlQgPSBWSUVXX01FTlUgKyAiIiIKLVRoZSBmb2xsb3dpbmcgJShjb3VudClzICUoRkFRTkFNRSlzIGVudHJpZXMgd2VyZSBjaGFuZ2VkCi1pbiB0aGUgbGFzdCAlKHBlcmlvZClzLCBtb3N0IHJlY2VudGx5IGNoYW5nZWQgc2hvd24gZmlyc3Q6Ci0iIiIKLQotVEFJTF9SRUNFTlQgPSBWSUVXX01FTlUKLQotIyBMYXN0IGNoYW5nZWQgYmFubmVyIG9uICJhbGwiIChzdHJmdGltZSBmb3JtYXQpCi1MQVNUX0NIQU5HRUQgPSAiTGFzdCBjaGFuZ2VkIG9uICVjICVaIgotCi0jICJDb21wYXQiIGNvbW1hbmQgcHJvbG9ndWUgKHRoaXMgaGFzIG5vIDxCT0RZPiB0YWcpCi1DT01QQVQgPSAiIiIKLTxIMT5UaGUgd2hvbGUgJShGQVFOQU1FKXM8L0gxPgotU2VlIGFsc28gdGhlIDxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPWhvbWUiPiUoRkFRTkFNRSlzIFdpemFyZDwvQT4uCi08UD4KLSIiIgotCi0jIEVkaXRpbmcKLQotRURJVEhFQUQgPSAiIiIKLTxBIEhSRUY9IiUoRkFRQ0dJKXM/cmVxPWhlbHAiPkNsaWNrIGZvciBIZWxwPC9BPgotIiIiCi0KLVJFVklFV0hFQUQgPSBFRElUSEVBRAotCi0KLUVESVRGT1JNMSA9ICIiIgotPEZPUk0gQUNUSU9OPSIlKEZBUUNHSSlzIiBNRVRIT0Q9UE9TVD4KLTxJTlBVVCBUWVBFPWhpZGRlbiBOQU1FPXJlcSBWQUxVRT1yZXZpZXc+Ci08SU5QVVQgVFlQRT1oaWRkZW4gTkFNRT1maWxlIFZBTFVFPSUoZmlsZSlzPgotPElOUFVUIFRZUEU9aGlkZGVuIE5BTUU9ZWRpdHZlcnNpb24gVkFMVUU9JShlZGl0dmVyc2lvbilzPgotPEhSPgotIiIiCi0KLUVESVRGT1JNMiA9ICIiIgotVGl0bGU6IDxJTlBVVCBUWVBFPXRleHQgU0laRT03MCBOQU1FPXRpdGxlIFZBTFVFPSIlKHRpdGxlKXMiPjxCUj4KLTxURVhUQVJFQSBDT0xTPTcyIFJPV1M9MjAgTkFNRT1ib2R5PiUoYm9keSlzCi08L1RFWFRBUkVBPjxCUj4KLUxvZyBtZXNzYWdlIChyZWFzb24gZm9yIHRoZSBjaGFuZ2UpOjxCUj4KLTxURVhUQVJFQSBDT0xTPTcyIFJPV1M9NSBOQU1FPWxvZz4lKGxvZylzCi08L1RFWFRBUkVBPjxCUj4KLVBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIGxvZ2dpbmcgcHVycG9zZXM6Ci08VEFCTEUgRlJBTUU9bm9uZSBDT0xTPTI+Ci0gICAgPFRSPgotICAgICAgICA8VEQ+TmFtZToKLSAgICAgICAgPFREPjxJTlBVVCBUWVBFPXRleHQgU0laRT00MCBOQU1FPWF1dGhvciBWQUxVRT0iJShhdXRob3IpcyI+Ci0gICAgPFRSPgotICAgICAgICA8VEQ+RW1haWw6Ci0gICAgICAgIDxURD48SU5QVVQgVFlQRT10ZXh0IFNJWkU9NDAgTkFNRT1lbWFpbCBWQUxVRT0iJShlbWFpbClzIj4KLSAgICA8VFI+Ci0gICAgICAgIDxURD5QYXNzd29yZDoKLSAgICAgICAgPFREPjxJTlBVVCBUWVBFPXBhc3N3b3JkIFNJWkU9MjAgTkFNRT1wYXNzd29yZCBWQUxVRT0iJShwYXNzd29yZClzIj4KLTwvVEFCTEU+Ci0KLTxJTlBVVCBUWVBFPXN1Ym1pdCBOQU1FPXJldmlldyBWQUxVRT0iUHJldmlldyBFZGl0Ij4KLUNsaWNrIHRoaXMgYnV0dG9uIHRvIHByZXZpZXcgeW91ciBjaGFuZ2VzLgotIiIiCi0KLUVESVRGT1JNMyA9ICIiIgotPC9GT1JNPgotIiIiCi0KLUNPTU1JVCA9ICIiIgotPElOUFVUIFRZUEU9c3VibWl0IE5BTUU9Y29tbWl0IFZBTFVFPSJDb21taXQiPgotQ2xpY2sgdGhpcyBidXR0b24gdG8gY29tbWl0IHlvdXIgY2hhbmdlcy4KLTxIUj4KLSIiIgotCi1OT0NPTU1JVF9IRUFEID0gIiIiCi1UbyBjb21taXQgeW91ciBjaGFuZ2VzLCBwbGVhc2UgY29ycmVjdCB0aGUgZm9sbG93aW5nIGVycm9ycyBpbiB0aGUKLWZvcm0gYmVsb3cgYW5kIGNsaWNrIHRoZSBQcmV2aWV3IEVkaXQgYnV0dG9uLgotPFVMPgotIiIiCi1OT0NPTU1JVF9UQUlMID0gIiIiCi08L1VMPgotPEhSPgotIiIiCi0KLUNBTlRDT01NSVRfSEVBRCA9ICIiIgotU29tZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBpcyBtaXNzaW5nOgotPFVMPgotIiIiCi1ORUVEX1BBU1NXRCA9ICI8TEk+WW91IG11c3QgcHJvdmlkZSB0aGUgY29ycmVjdCBwYXNzd29yZC5cbiIKLU5FRURfQVVUSE9SID0gIjxMST5Zb3UgbXVzdCBlbnRlciB5b3VyIG5hbWUuXG4iCi1ORUVEX0VNQUlMID0gIjxMST5Zb3UgbXVzdCBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MuXG4iCi1ORUVEX0xPRyA9ICI8TEk+WW91IG11c3QgZW50ZXIgYSBsb2cgbWVzc2FnZS5cbiIKLUNBTlRDT01NSVRfVEFJTCA9ICIiIgotPC9VTD4KLVBsZWFzZSB1c2UgeW91ciBicm93c2VyJ3MgQmFjayBjb21tYW5kIHRvIGNvcnJlY3QgdGhlIGZvcm0gYW5kIGNvbW1pdAotYWdhaW4uCi0iIiIKLQotTkVXQ09ORkxJQ1QgPSAiIiIKLTxQPgotWW91IGFyZSBjcmVhdGluZyBhIG5ldyBlbnRyeSwgYnV0IHRoZSBlbnRyeSBudW1iZXIgc3BlY2lmaWVkIGlzIG5vdAotY29ycmVjdC4KLTxQPgotVGhlIHR3byBtb3N0IGNvbW1vbiBjYXVzZXMgb2YgdGhpcyBwcm9ibGVtIGFyZToKLTxVTD4KLTxMST5BZnRlciBjcmVhdGluZyB0aGUgZW50cnkgeW91cnNlbGYsIHlvdSB3ZW50IGJhY2sgaW4geW91ciBicm93c2VyLAotICAgIGVkaXRlZCB0aGUgZW50cnkgc29tZSBtb3JlLCBhbmQgY2xpY2tlZCBDb21taXQgYWdhaW4uCi08TEk+U29tZW9uZSBlbHNlIHN0YXJ0ZWQgY3JlYXRpbmcgYSBuZXcgZW50cnkgaW4gdGhlIHNhbWUgc2VjdGlvbiBhbmQKLSAgICBjb21taXR0ZWQgYmVmb3JlIHlvdSBkaWQuCi08L1VMPgotKEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0aGUgbGFzdCBlbnRyeSBpbiB0aGUgc2VjdGlvbiB3YXMgcGh5c2ljYWxseQotZGVsZXRlZCwgYnV0IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gZXhjZXB0IHRocm91Z2ggbWFudWFsIGludGVydmVudGlvbgotYnkgdGhlIEZBUSBtYWludGFpbmVyLikKLTxQPgotPEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9bmV3JmFtcDtzZWN0aW9uPSUoc2VjKXMiPkNsaWNrIGhlcmUgdG8gdHJ5Ci1hZ2Fpbi48L0E+Ci08UD4KLSIiIgotCi1WRVJTSU9OQ09ORkxJQ1QgPSAiIiIKLTxQPgotWW91IGVkaXRlZCB2ZXJzaW9uICUoZWRpdHZlcnNpb24pcyBidXQgdGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAlKHZlcnNpb24pcy4KLTxQPgotVGhlIHR3byBtb3N0IGNvbW1vbiBjYXVzZXMgb2YgdGhpcyBwcm9ibGVtIGFyZToKLTxVTD4KLTxMST5BZnRlciBjb21taXR0aW5nIGEgY2hhbmdlLCB5b3Ugd2VudCBiYWNrIGluIHlvdXIgYnJvd3NlciwKLSAgICBlZGl0ZWQgdGhlIGVudHJ5IHNvbWUgbW9yZSwgYW5kIGNsaWNrZWQgQ29tbWl0IGFnYWluLgotPExJPlNvbWVvbmUgZWxzZSBzdGFydGVkIGVkaXRpbmcgdGhlIHNhbWUgZW50cnkgYW5kIGNvbW1pdHRlZAotICAgIGJlZm9yZSB5b3UgZGlkLgotPC9VTD4KLTxQPgotPEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9c2hvdyZhbXA7ZmlsZT0lKGZpbGUpcyI+Q2xpY2sgaGVyZSB0byByZWxvYWQKLXRoZSBlbnRyeSBhbmQgdHJ5IGFnYWluLjwvQT4KLTxQPgotIiIiCi0KLUNBTlRXUklURSA9ICIiIgotQ2FuJ3Qgd3JpdGUgZmlsZSAlKGZpbGUpcyAoJSh3aHkpcykuCi0iIiIKLQotRklMRUhFQURFUiA9ICIiIlwKLVRpdGxlOiAlKHRpdGxlKXMKLUxhc3QtQ2hhbmdlZC1EYXRlOiAlKGRhdGUpcwotTGFzdC1DaGFuZ2VkLUF1dGhvcjogJShhdXRob3IpcwotTGFzdC1DaGFuZ2VkLUVtYWlsOiAlKGVtYWlsKXMKLUxhc3QtQ2hhbmdlZC1SZW1vdGUtSG9zdDogJShSRU1PVEVfSE9TVClzCi1MYXN0LUNoYW5nZWQtUmVtb3RlLUFkZHJlc3M6ICUoUkVNT1RFX0FERFIpcwotIiIiCi0KLUxPR0hFQURFUiA9ICIiIlwKLUxhc3QtQ2hhbmdlZC1EYXRlOiAlKGRhdGUpcwotTGFzdC1DaGFuZ2VkLUF1dGhvcjogJShhdXRob3IpcwotTGFzdC1DaGFuZ2VkLUVtYWlsOiAlKGVtYWlsKXMKLUxhc3QtQ2hhbmdlZC1SZW1vdGUtSG9zdDogJShSRU1PVEVfSE9TVClzCi1MYXN0LUNoYW5nZWQtUmVtb3RlLUFkZHJlc3M6ICUoUkVNT1RFX0FERFIpcwotCi0lKGxvZylzCi0iIiIKLQotQ09NTUlUVEVEID0gIiIiCi1Zb3VyIGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZC4KLSIiIgotCi1DT01NSVRGQUlMRUQgPSAiIiIKLUV4aXQgc3RhdHVzICUoc3RzKXMuCi0iIiIKLQotIyBBZGQvRGVsZXRlCi0KLUFERF9IRUFEID0gIiIiCi1BdCB0aGUgbW9tZW50LCBuZXcgZW50cmllcyBjYW4gb25seSBiZSBhZGRlZCBhdCB0aGUgZW5kIG9mIGEgc2VjdGlvbi4KLVRoaXMgaXMgYmVjYXVzZSB0aGUgZW50cnkgbnVtYmVycyBhcmUgYWxzbyB0aGVpcgotdW5pcXVlIGlkZW50aWZpZXJzIC0tIGl0J3MgYSBiYWQgaWRlYSB0byByZW51bWJlciBlbnRyaWVzLgotPFA+Ci1DbGljayBvbiB0aGUgc2VjdGlvbiB0byB3aGljaCB5b3Ugd2FudCB0byBhZGQgYSBuZXcgZW50cnk6Ci08VUw+Ci0iIiIKLQotQUREX1NFQ1RJT04gPSAiIiJcCi08TEk+PEEgSFJFRj0iJShGQVFDR0kpcz9yZXE9bmV3JmFtcDtzZWN0aW9uPSUoc2VjdGlvbilzIj4lKHNlY3Rpb24pcy4gJSh0aXRsZSlzPC9BPgotIiIiCi0KLUFERF9UQUlMID0gIiIiCi08L1VMPgotIiIiCi0KLVJPVUxFVFRFID0gIiIiCi08UD5IaXQgeW91ciBicm93c2VyJ3MgUmVsb2FkIGJ1dHRvbiB0byBwbGF5IGFnYWluLjxQPgotIiIiCi0KLURFTEVURSA9ICIiIgotQXQgdGhlIG1vbWVudCwgdGhlcmUncyBubyBkaXJlY3Qgd2F5IHRvIGRlbGV0ZSBlbnRyaWVzLgotVGhpcyBpcyBiZWNhdXNlIHRoZSBlbnRyeSBudW1iZXJzIGFyZSBhbHNvIHRoZWlyCi11bmlxdWUgaWRlbnRpZmllcnMgLS0gaXQncyBhIGJhZCBpZGVhIHRvIHJlbnVtYmVyIGVudHJpZXMuCi08UD4KLUlmIHlvdSByZWFsbHkgdGhpbmsgYW4gZW50cnkgbmVlZHMgdG8gYmUgZGVsZXRlZCwKLWNoYW5nZSB0aGUgdGl0bGUgdG8gIihkZWxldGVkKSIgYW5kIG1ha2UgdGhlIGJvZHkKLWVtcHR5IChrZWVwIHRoZSBlbnRyeSBudW1iZXIgaW4gdGhlIHRpdGxlIHRob3VnaCkuCi0iIiIKLQotIyBIZWxwIGZpbGUgZm9yIHRoZSBGQVEgRWRpdCBXaXphcmQKLQotSEVMUCA9ICIiIgotVXNpbmcgdGhlICUoRkFRTkFNRSlzIEVkaXQgV2l6YXJkIHNwZWFrcyBtb3N0bHkgZm9yIGl0c2VsZi4gIEhlcmUgYXJlCi1zb21lIGFuc3dlcnMgdG8gcXVlc3Rpb25zIHlvdSBhcmUgbGlrZWx5IHRvIGFzazoKLQotPFA+PEhSPgotCi08SDI+SSBjYW4gcmV2aWV3IGFuIGVudHJ5IGJ1dCBJIGNhbid0IGNvbW1pdCBpdC48L0gyPgotCi1UaGUgY29tbWl0IGJ1dHRvbiBvbmx5IGFwcGVhcnMgaWYgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLTxVTD4KLQotPExJPlRoZSBOYW1lIGZpZWxkIGlzIG5vdCBlbXB0eS4KLQotPExJPlRoZSBFbWFpbCBmaWVsZCBjb250YWlucyBhdCBsZWFzdCBhbiBAIGNoYXJhY3Rlci4KLQotPExJPlRoZSBMb2cgbWVzc2FnZSBib3ggaXMgbm90IGVtcHR5LgotCi08TEk+VGhlIFBhc3N3b3JkIGZpZWxkIGNvbnRhaW5zIHRoZSBwcm9wZXIgcGFzc3dvcmQuCi0KLTwvVUw+Ci0KLTxQPjxIUj4KLQotPEgyPldoYXQgaXMgdGhlIHBhc3N3b3JkPzwvSDI+Ci0KLUF0IHRoZSBtb21lbnQsIG9ubHkgUFNBIG1lbWJlcnMgd2lsbCBiZSB0b2xkIHRoZSBwYXNzd29yZC4gIFRoaXMgaXMgYQotZ29vZCB0aW1lIHRvIGpvaW4gdGhlIFBTQSEgIFNlZSA8QQotSFJFRj0iaHR0cDovL3d3dy5weXRob24ub3JnL3BzYS8iPnRoZSBQU0EgaG9tZSBwYWdlPC9BPi4KLQotPFA+PEhSPgotCi08SDI+Q2FuIEkgdXNlIEhUTUwgaW4gdGhlIEZBUSBlbnRyeT88L0gyPgotCi1ZZXMsIGlmIHlvdSBpbmNsdWRlIGl0IGluICZsdDtIVE1MJnJ0OyBhbmQgJmx0Oy9IVE1MJmd0OyB0YWdzLgotPFA+Ci1BbHNvLCBpZiB5b3UgaW5jbHVkZSBhIFVSTCBvciBhbiBlbWFpbCBhZGRyZXNzIGluIHRoZSB0ZXh0IGl0IHdpbGwKLWF1dG9tYXRpZ2FsbHkgYmVjb21lIGFuIGFuY2hvciBvZiB0aGUgcmlnaHQgdHlwZS4gIEFsc28sICp3b3JkKgotaXMgbWFkZSBpdGFsaWMgKGJ1dCBvbmx5IGZvciBzaW5nbGUgYWxwaGFiZXRpYyB3b3JkcykuCi0KLTxQPjxIUj4KLQotPEgyPkhvdyBkbyBJIGRlbGluZWF0ZSBwYXJhZ3JhcGhzPzwvSDI+Ci0KLVVzZSBibGFuayBsaW5lcyB0byBzZXBhcmF0ZSBwYXJhZ3JhcGhzLgotCi08UD48SFI+Ci0KLTxIMj5Ib3cgZG8gSSBlbnRlciBleGFtcGxlIHRleHQ/PC9IMj4KLQotQW55IGxpbmUgdGhhdCBiZWdpbnMgd2l0aCBhIHNwYWNlIG9yIHRhYiBpcyBhc3N1bWVkIHRvIGJlIHBhcnQgb2YKLWxpdGVyYWwgdGV4dC4gIEJsb2NrcyBvZiBsaXRlcmFsIHRleHQgZGVsaW5lYXRlZCBieSBibGFuayBsaW5lcyBhcmUKLXBsYWNlZCBpbnNpZGUgJmx0O1BSRSZndDsuLi4mbHQ7L1BSRSZndDsuCi0iIiIKLQotIyBMb2FkIGxvY2FsIGN1c3RvbWl6YXRpb25zIGFnYWluLCBpbiBjYXNlIHRoZXkgc2V0IHNvbWUgb3RoZXIgdmFyaWFibGVzCi0KLXRyeToKLSAgICBmcm9tIGZhcWN1c3QgaW1wb3J0ICoKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9Ub29scy9mYXF3aXovZmFxY3VzdC5weSBiL1Rvb2xzL2ZhcXdpei9mYXFjdXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjE2NzgxLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2ZhcXdpei9mYXFjdXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotIyBBZGQgeW91ciBjdXN0b21pemF0aW9ucyBoZXJlIC0tIG1vZGlmaWVkIGNvcGllcyBvZiB3aGF0J3MgaW4gZmFxY29uZi5weS4KZGlmZiAtLWdpdCBhL1Rvb2xzL2ZhcXdpei9mYXF3LnB5IGIvVG9vbHMvZmFxd2l6L2ZhcXcucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ5NzJmNjEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvZmFxd2l6L2ZhcXcucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0jISAvdXNyL2xvY2FsL2Jpbi9weXRob24KLQotIiIiRkFRIHdpemFyZCBib290c3RyYXAuIiIiCi0KLSMgVGhpcyBpcyBhIGxvbmdlciB2ZXJzaW9uIG9mIHRoZSBib290c3RyYXAgc2NyaXB0IGdpdmVuIGF0IHRoZSBlbmQgb2YKLSMgZmFxd2luLnB5OyBpdCBwcmludHMgdGltaW5nIHN0YXRpc3RpY3MgYXQgdGhlIGVuZCBvZiB0aGUgcmVndWxhciBDR0kKLSMgc2NyaXB0J3Mgb3V0cHV0IChzbyB5b3UgY2FuIG1vbml0b3IgaG93IGl0IGlzIGRvaW5nKS4KLQotIyBUaGlzIHNjcmlwdCBzaG91bGQgYmUgcGxhY2VkIGluIHlvdXIgY2dpLWJpbiBkaXJlY3RvcnkgYW5kIG1hZGUKLSMgZXhlY3V0YWJsZS4KLQotIyBZb3UgbmVlZCB0byBlZGl0IHRoZSBmaXJzdCBsaW5lIGFuZCB0aGUgbGluZXMgdGhhdCBkZWZpbmUgRkFRRElSIGFuZAotIyBTUkNESVIsIGJlbG93OiBjaGFuZ2UgL3Vzci9sb2NhbC9iaW4vcHl0aG9uIHRvIHdoZXJlIHlvdXIgUHl0aG9uCi0jIGludGVycHJldGVyIGxpdmVzLCBjaGFuZ2UgdGhlIHZhbHVlIGZvciBGQVFESVIgdG8gd2hlcmUgeW91ciBGQVEKLSMgbGl2ZXMsIGFuZCBjaGFuZ2UgdGhlIHZhbHVlIGZvciBTUkNESVIgdG8gd2hlcmUgeW91ciBmYXF3aXoucHkKLSMgbW9kdWxlIGxpdmVzLiAgVGhlIGZhcWNvbmYucHkgYW5kIGZhcWN1c3QucHkgZmlsZXMgbGl2ZSB0aGVyZSwgdG9vLgotCi1pbXBvcnQgb3MKLXQxID0gb3MudGltZXMoKSAjIElmIHRoaXMgZG9lc24ndCB3b3JrLCBqdXN0IGdldCByaWQgb2YgdGhlIHRpbWluZyBjb2RlIQotdHJ5OgotICAgIEZBUURJUiA9ICIvdXNyL3Blb3BsZS9ndWlkby9weXRob24vRkFRIgotICAgIFNSQ0RJUiA9ICIvdXNyL3Blb3BsZS9ndWlkby9weXRob24vc3JjL1Rvb2xzL2ZhcXdpeiIKLSAgICBpbXBvcnQgb3MsIHN5cwotICAgIG9zLmNoZGlyKEZBUURJUikKLSAgICBzeXMucGF0aC5pbnNlcnQoMCwgU1JDRElSKQotICAgIGltcG9ydCBmYXF3aXoKLWV4Y2VwdCBTeXN0ZW1FeGl0IGFzIG46Ci0gICAgc3lzLmV4aXQobikKLWV4Y2VwdDoKLSAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgcHJpbnQoKQotICAgIGltcG9ydCBjZ2kKLSAgICBjZ2kucHJpbnRfZXhjZXB0aW9uKHQsIHYsIHRiKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZmFxd2l6L2ZhcXdpei5weSBiL1Rvb2xzL2ZhcXdpei9mYXF3aXoucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5YWI2NWQuLjAwMDAwMDAKLS0tIGEvVG9vbHMvZmFxd2l6L2ZhcXdpei5weQorKysgL2Rldi9udWxsCkBAIC0xLDg0MCArMCwwIEBACi0iIiJHZW5lcmljIEZBUSBXaXphcmQuCi0KLVRoaXMgaXMgYSBDR0kgcHJvZ3JhbSB0aGF0IG1haW50YWlucyBhIHVzZXItZWRpdGFibGUgRkFRLiAgSXQgdXNlcyBSQ1MKLXRvIGtlZXAgdHJhY2sgb2YgY2hhbmdlcyB0byBpbmRpdmlkdWFsIEZBUSBlbnRyaWVzLiAgSXQgaXMgZnVsbHkKLWNvbmZpZ3VyYWJsZTsgZXZlcnl0aGluZyB5b3UgbWlnaHQgd2FudCB0byBjaGFuZ2Ugd2hlbiB1c2luZyB0aGlzCi1wcm9ncmFtIHRvIG1haW50YWluIHNvbWUgb3RoZXIgRkFRIHRoYW4gdGhlIFB5dGhvbiBGQVEgaXMgY29udGFpbmVkIGluCi10aGUgY29uZmlndXJhdGlvbiBtb2R1bGUsIGZhcWNvbmYucHkuCi0KLU5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhbiBleGVjdXRhYmxlIHNjcmlwdDsgaXQncyBhbiBpbXBvcnRhYmxlIG1vZHVsZS4KLVRoZSBhY3R1YWwgc2NyaXB0IHRvIHBsYWNlIGluIGNnaS1iaW4gaXMgZmFxdy5weS4KLQotIiIiCi0KLWltcG9ydCBzeXMsIHRpbWUsIG9zLCBzdGF0LCByZSwgY2dpLCBmYXFjb25mCi1mcm9tIGZhcWNvbmYgaW1wb3J0ICogICAgICAgICAgICAgICAgICAgIyBUaGlzIGltcG9ydHMgYWxsIHVwcGVyY2FzZSBuYW1lcwotbm93ID0gdGltZS50aW1lKCkKLQotY2xhc3MgRmlsZUVycm9yOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotCi1jbGFzcyBJbnZhbGlkRmlsZShGaWxlRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgTm9TdWNoU2VjdGlvbihGaWxlRXJyb3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWN0aW9uKToKLSAgICAgICAgRmlsZUVycm9yLl9faW5pdF9fKHNlbGYsIE5FV0ZJTEVOQU1FICUoc2VjdGlvbiwgMSkpCi0gICAgICAgIHNlbGYuc2VjdGlvbiA9IHNlY3Rpb24KLQotY2xhc3MgTm9TdWNoRmlsZShGaWxlRXJyb3IpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCB3aHk9Tm9uZSk6Ci0gICAgICAgIEZpbGVFcnJvci5fX2luaXRfXyhzZWxmLCBmaWxlKQotICAgICAgICBzZWxmLndoeSA9IHdoeQotCi1kZWYgZXNjYXBlKHMpOgotICAgIHMgPSBzLnJlcGxhY2UoJyYnLCAnJmFtcDsnKQotICAgIHMgPSBzLnJlcGxhY2UoJzwnLCAnJmx0OycpCi0gICAgcyA9IHMucmVwbGFjZSgnPicsICcmZ3Q7JykKLSAgICByZXR1cm4gcwotCi1kZWYgZXNjYXBlcShzKToKLSAgICBzID0gZXNjYXBlKHMpCi0gICAgcyA9IHMucmVwbGFjZSgnIicsICcmcXVvdDsnKQotICAgIHJldHVybiBzCi0KLWRlZiBfaW50ZXJwb2xhdGUoZm9ybWF0LCBhcmdzLCBrdyk6Ci0gICAgdHJ5OgotICAgICAgICBxdW90ZSA9IGt3WydfcXVvdGUnXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcXVvdGUgPSAxCi0gICAgZCA9IChrdywpICsgYXJncyArIChmYXFjb25mLl9fZGljdF9fLCkKLSAgICBtID0gTWFnaWNEaWN0KGQsIHF1b3RlKQotICAgIHJldHVybiBmb3JtYXQgJSBtCi0KLWRlZiBpbnRlcnBvbGF0ZShmb3JtYXQsICphcmdzLCAqKmt3KToKLSAgICByZXR1cm4gX2ludGVycG9sYXRlKGZvcm1hdCwgYXJncywga3cpCi0KLWRlZiBlbWl0KGZvcm1hdCwgKmFyZ3MsICoqa3cpOgotICAgIHRyeToKLSAgICAgICAgZiA9IGt3WydfZmlsZSddCi0gICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICBmID0gc3lzLnN0ZG91dAotICAgIGYud3JpdGUoX2ludGVycG9sYXRlKGZvcm1hdCwgYXJncywga3cpKQotCi10cmFuc2xhdGVfcHJvZyA9IE5vbmUKLQotZGVmIHRyYW5zbGF0ZSh0ZXh0LCBwcmU9MCk6Ci0gICAgZ2xvYmFsIHRyYW5zbGF0ZV9wcm9nCi0gICAgaWYgbm90IHRyYW5zbGF0ZV9wcm9nOgotICAgICAgICB0cmFuc2xhdGVfcHJvZyA9IHByb2cgPSByZS5jb21waWxlKAotICAgICAgICAgICAgcidcYihodHRwfGZ0cHxodHRwcyk6Ly9cUysoXGJ8Lyl8XGJbLS5cd10rQFstLlx3XSsnKQotICAgIGVsc2U6Ci0gICAgICAgIHByb2cgPSB0cmFuc2xhdGVfcHJvZwotICAgIGkgPSAwCi0gICAgbGlzdCA9IFtdCi0gICAgd2hpbGUgMToKLSAgICAgICAgbSA9IHByb2cuc2VhcmNoKHRleHQsIGkpCi0gICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaiA9IG0uc3RhcnQoKQotICAgICAgICBsaXN0LmFwcGVuZChlc2NhcGUodGV4dFtpOmpdKSkKLSAgICAgICAgaSA9IGoKLSAgICAgICAgdXJsID0gbS5ncm91cCgwKQotICAgICAgICB3aGlsZSB1cmxbLTFdIGluICcoKTs6LC4/XCciPD4nOgotICAgICAgICAgICAgdXJsID0gdXJsWzotMV0KLSAgICAgICAgaSA9IGkgKyBsZW4odXJsKQotICAgICAgICB1cmwgPSBlc2NhcGUodXJsKQotICAgICAgICBpZiBub3QgcHJlIG9yIChwcmUgYW5kIFBST0NFU1NfUFJFRk9STUFUKToKLSAgICAgICAgICAgIGlmICc6JyBpbiB1cmw6Ci0gICAgICAgICAgICAgICAgcmVwbCA9ICc8QSBIUkVGPSIlcyI+JXM8L0E+JyAlICh1cmwsIHVybCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVwbCA9ICc8QSBIUkVGPSJtYWlsdG86JXMiPiVzPC9BPicgJSAodXJsLCB1cmwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXBsID0gdXJsCi0gICAgICAgIGxpc3QuYXBwZW5kKHJlcGwpCi0gICAgaiA9IGxlbih0ZXh0KQotICAgIGxpc3QuYXBwZW5kKGVzY2FwZSh0ZXh0W2k6al0pKQotICAgIHJldHVybiAnJy5qb2luKGxpc3QpCi0KLWRlZiBlbXBoYXNpemUobGluZSk6Ci0gICAgcmV0dXJuIHJlLnN1YihyJ1wqKFthLXpBLVpdKylcKicsIHInPEk+XDE8L0k+JywgbGluZSkKLQotcmV2cGFyc2VfcHJvZyA9IE5vbmUKLQotZGVmIHJldnBhcnNlKHJldik6Ci0gICAgZ2xvYmFsIHJldnBhcnNlX3Byb2cKLSAgICBpZiBub3QgcmV2cGFyc2VfcHJvZzoKLSAgICAgICAgcmV2cGFyc2VfcHJvZyA9IHJlLmNvbXBpbGUocideKFxkezEsM30pXC4oXGR7MSw0fSkkJykKLSAgICBtID0gcmV2cGFyc2VfcHJvZy5tYXRjaChyZXYpCi0gICAgaWYgbm90IG06Ci0gICAgICAgIHJldHVybiBOb25lCi0gICAgW21ham9yLCBtaW5vcl0gPSBtYXAoaW50LCBtLmdyb3VwKDEsIDIpKQotICAgIHJldHVybiBtYWpvciwgbWlub3IKLQotbG9nb24gPSAwCi1kZWYgbG9nKHRleHQpOgotICAgIGlmIGxvZ29uOgotICAgICAgICBsb2dmaWxlID0gb3BlbigibG9nZmlsZSIsICJhIikKLSAgICAgICAgbG9nZmlsZS53cml0ZSh0ZXh0ICsgIlxuIikKLSAgICAgICAgbG9nZmlsZS5jbG9zZSgpCi0KLWRlZiBsb2FkX2Nvb2tpZXMoKToKLSAgICBpZiAnSFRUUF9DT09LSUUnIG5vdCBpbiBvcy5lbnZpcm9uOgotICAgICAgICByZXR1cm4ge30KLSAgICByYXcgPSBvcy5lbnZpcm9uWydIVFRQX0NPT0tJRSddCi0gICAgd29yZHMgPSBbcy5zdHJpcCgpIGZvciBzIGluIHJhdy5zcGxpdCgnOycpXQotICAgIGNvb2tpZXMgPSB7fQotICAgIGZvciB3b3JkIGluIHdvcmRzOgotICAgICAgICBpID0gd29yZC5maW5kKCc9JykKLSAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAga2V5LCB2YWx1ZSA9IHdvcmRbOmldLCB3b3JkW2krMTpdCi0gICAgICAgICAgICBjb29raWVzW2tleV0gPSB2YWx1ZQotICAgIHJldHVybiBjb29raWVzCi0KLWRlZiBsb2FkX215X2Nvb2tpZSgpOgotICAgIGNvb2tpZXMgPSBsb2FkX2Nvb2tpZXMoKQotICAgIHRyeToKLSAgICAgICAgdmFsdWUgPSBjb29raWVzW0NPT0tJRV9OQU1FXQotICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgcmV0dXJuIHt9Ci0gICAgaW1wb3J0IHVybGxpYi5wYXJzZQotICAgIHZhbHVlID0gdXJsbGliLnBhcnNlLnVucXVvdGUodmFsdWUpCi0gICAgd29yZHMgPSB2YWx1ZS5zcGxpdCgnLycpCi0gICAgd2hpbGUgbGVuKHdvcmRzKSA8IDM6Ci0gICAgICAgIHdvcmRzLmFwcGVuZCgnJykKLSAgICBhdXRob3IgPSAnLycuam9pbih3b3Jkc1s6LTJdKQotICAgIGVtYWlsID0gd29yZHNbLTJdCi0gICAgcGFzc3dvcmQgPSB3b3Jkc1stMV0KLSAgICByZXR1cm4geydhdXRob3InOiBhdXRob3IsCi0gICAgICAgICAgICAnZW1haWwnOiBlbWFpbCwKLSAgICAgICAgICAgICdwYXNzd29yZCc6IHBhc3N3b3JkfQotCi1kZWYgc2VuZF9teV9jb29raWUodWkpOgotICAgIG5hbWUgPSBDT09LSUVfTkFNRQotICAgIHZhbHVlID0gIiVzLyVzLyVzIiAlICh1aS5hdXRob3IsIHVpLmVtYWlsLCB1aS5wYXNzd29yZCkKLSAgICBpbXBvcnQgdXJsbGliLnBhcnNlCi0gICAgdmFsdWUgPSB1cmxsaWIucGFyc2UucXVvdGUodmFsdWUpCi0gICAgdGhlbiA9IG5vdyArIENPT0tJRV9MSUZFVElNRQotICAgIGdtdCA9IHRpbWUuZ210aW1lKHRoZW4pCi0gICAgcGF0aCA9IG9zLmVudmlyb24uZ2V0KCdTQ1JJUFRfTkFNRScsICcvY2dpLWJpbi8nKQotICAgIHByaW50KCJTZXQtQ29va2llOiAlcz0lczsgcGF0aD0lczsiICUgKG5hbWUsIHZhbHVlLCBwYXRoKSwgZW5kPScgJykKLSAgICBwcmludCh0aW1lLnN0cmZ0aW1lKCJleHBpcmVzPSVhLCAlZC0lYi0leSAlWCBHTVQiLCBnbXQpKQotCi1jbGFzcyBNYWdpY0RpY3Q6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZCwgcXVvdGUpOgotICAgICAgICBzZWxmLl9fZCA9IGQKLSAgICAgICAgc2VsZi5fX3F1b3RlID0gcXVvdGUKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICBmb3IgZCBpbiBzZWxmLl9fZDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IGRba2V5XQotICAgICAgICAgICAgICAgIGlmIHZhbHVlOgotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0cih2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fX3F1b3RlOgotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBlc2NhcGVxKHZhbHVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUKLSAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHJldHVybiAnJwotCi1jbGFzcyBVc2VySW5wdXQ6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19mb3JtID0gY2dpLkZpZWxkU3RvcmFnZSgpCi0gICAgICAgICNsb2coIlxuXG5ib2R5OiAiICsgc2VsZi5ib2R5KQotCi0gICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lWzBdID09ICdfJzoKLSAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fX2Zvcm1bbmFtZV0udmFsdWUKLSAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIHZhbHVlID0gJycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3RyaXAoKQotICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIHZhbHVlKQotICAgICAgICByZXR1cm4gdmFsdWUKLQotICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCBrZXkpCi0KLWNsYXNzIEZhcUVudHJ5OgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBmaWxlLCBzZWNfbnVtKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLnNlYywgc2VsZi5udW0gPSBzZWNfbnVtCi0gICAgICAgIGlmIGZwOgotICAgICAgICAgICAgaW1wb3J0IGVtYWlsCi0gICAgICAgICAgICBzZWxmLl9faGVhZGVycyA9IGVtYWlsLm1lc3NhZ2VfZnJvbV9maWxlKGZwKQotICAgICAgICAgICAgc2VsZi5ib2R5ID0gZnAucmVhZCgpLnN0cmlwKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX19oZWFkZXJzID0geyd0aXRsZSc6ICIlZC4lZC4gIiAlIHNlY19udW19Ci0gICAgICAgICAgICBzZWxmLmJvZHkgPSAnJwotCi0gICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lWzBdID09ICdfJzoKLSAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCi0gICAgICAgIGtleSA9ICctJy5qb2luKG5hbWUuc3BsaXQoJ18nKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9faGVhZGVyc1trZXldCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHZhbHVlID0gJycKLSAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCB2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwga2V5KQotCi0gICAgZGVmIGxvYWRfdmVyc2lvbihzZWxmKToKLSAgICAgICAgY29tbWFuZCA9IGludGVycG9sYXRlKFNIX1JMT0dfSCwgc2VsZikKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNvbW1hbmQpCi0gICAgICAgIHZlcnNpb24gPSAnJwotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIGxpbmVbOjVdID09ICdoZWFkOic6Ci0gICAgICAgICAgICAgICAgdmVyc2lvbiA9IGxpbmVbNTpdLnN0cmlwKCkKLSAgICAgICAgcC5jbG9zZSgpCi0gICAgICAgIHNlbGYudmVyc2lvbiA9IHZlcnNpb24KLQotICAgIGRlZiBnZXRtdGltZShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYubGFzdF9jaGFuZ2VkX2RhdGU6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gb3Muc3RhdChzZWxmLmZpbGUpW3N0YXQuU1RfTVRJTUVdCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgZW1pdF9tYXJrcyhzZWxmKToKLSAgICAgICAgbXRpbWUgPSBzZWxmLmdldG10aW1lKCkKLSAgICAgICAgaWYgbXRpbWUgPj0gbm93IC0gRFRfVkVSWV9SRUNFTlQ6Ci0gICAgICAgICAgICBlbWl0KE1BUktfVkVSWV9SRUNFTlQsIHNlbGYpCi0gICAgICAgIGVsaWYgbXRpbWUgPj0gbm93IC0gRFRfUkVDRU5UOgotICAgICAgICAgICAgZW1pdChNQVJLX1JFQ0VOVCwgc2VsZikKLQotICAgIGRlZiBzaG93KHNlbGYsIGVkaXQ9MSk6Ci0gICAgICAgIGVtaXQoRU5UUllfSEVBREVSMSwgc2VsZikKLSAgICAgICAgc2VsZi5lbWl0X21hcmtzKCkKLSAgICAgICAgZW1pdChFTlRSWV9IRUFERVIyLCBzZWxmKQotICAgICAgICBwcmUgPSAwCi0gICAgICAgIHJhdyA9IDAKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5ib2R5LnNwbGl0KCdcbicpOgotICAgICAgICAgICAgIyBBbGxvdyB0aGUgdXNlciB0byBpbnNlcnQgcmF3IGh0bWwgaW50byBhIEZBUSBhbnN3ZXIKLSAgICAgICAgICAgICMgKFNraXAgTW9udGFuYXJvLCB3aXRoIGNoYW5nZXMgYnkgR3VpZG8pCi0gICAgICAgICAgICB0YWcgPSBsaW5lLnJzdHJpcCgpLmxvd2VyKCkKLSAgICAgICAgICAgIGlmIHRhZyA9PSAnPGh0bWw+JzoKLSAgICAgICAgICAgICAgICByYXcgPSAxCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIHRhZyA9PSAnPC9odG1sPic6Ci0gICAgICAgICAgICAgICAgcmF3ID0gMAotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiByYXc6Ci0gICAgICAgICAgICAgICAgcHJpbnQobGluZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RyaXAoKToKLSAgICAgICAgICAgICAgICBpZiBwcmU6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCc8L1BSRT4nKQotICAgICAgICAgICAgICAgICAgICBwcmUgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJzxQPicpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lWzBdLmlzc3BhY2UoKToKLSAgICAgICAgICAgICAgICAgICAgaWYgcHJlOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJzwvUFJFPicpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmUgPSAwCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHByZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc8UFJFPicpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmUgPSAxCi0gICAgICAgICAgICAgICAgaWYgJy8nIGluIGxpbmUgb3IgJ0AnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSB0cmFuc2xhdGUobGluZSwgcHJlKQotICAgICAgICAgICAgICAgIGVsaWYgJzwnIGluIGxpbmUgb3IgJyYnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmUgPSBlc2NhcGUobGluZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgcHJlIGFuZCAnKicgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGVtcGhhc2l6ZShsaW5lKQotICAgICAgICAgICAgICAgIHByaW50KGxpbmUpCi0gICAgICAgIGlmIHByZToKLSAgICAgICAgICAgIHByaW50KCc8L1BSRT4nKQotICAgICAgICAgICAgcHJlID0gMAotICAgICAgICBpZiBlZGl0OgotICAgICAgICAgICAgcHJpbnQoJzxQPicpCi0gICAgICAgICAgICBlbWl0KEVOVFJZX0ZPT1RFUiwgc2VsZikKLSAgICAgICAgICAgIGlmIHNlbGYubGFzdF9jaGFuZ2VkX2RhdGU6Ci0gICAgICAgICAgICAgICAgZW1pdChFTlRSWV9MT0dJTkZPLCBzZWxmKQotICAgICAgICBwcmludCgnPFA+JykKLQotY2xhc3MgRmFxRGlyOgotCi0gICAgZW50cnljbGFzcyA9IEZhcUVudHJ5Ci0KLSAgICBfX29rcHJvZyA9IHJlLmNvbXBpbGUoT0tGSUxFTkFNRSkKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXI9b3MuY3VyZGlyKToKLSAgICAgICAgc2VsZi5fX2RpciA9IGRpcgotICAgICAgICBzZWxmLl9fZmlsZXMgPSBOb25lCi0KLSAgICBkZWYgX19maWxsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fZmlsZXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5fX2ZpbGVzID0gZmlsZXMgPSBbXQotICAgICAgICBva3Byb2cgPSBzZWxmLl9fb2twcm9nCi0gICAgICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIoc2VsZi5fX2Rpcik6Ci0gICAgICAgICAgICBpZiBzZWxmLl9fb2twcm9nLm1hdGNoKGZpbGUpOgotICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChmaWxlKQotICAgICAgICBmaWxlcy5zb3J0KCkKLQotICAgIGRlZiBnb29kKHNlbGYsIGZpbGUpOgotICAgICAgICByZXR1cm4gc2VsZi5fX29rcHJvZy5tYXRjaChmaWxlKQotCi0gICAgZGVmIHBhcnNlKHNlbGYsIGZpbGUpOgotICAgICAgICBtID0gc2VsZi5nb29kKGZpbGUpCi0gICAgICAgIGlmIG5vdCBtOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgc2VjLCBudW0gPSBtLmdyb3VwKDEsIDIpCi0gICAgICAgIHJldHVybiBpbnQoc2VjKSwgaW50KG51bSkKLQotICAgIGRlZiBsaXN0KHNlbGYpOgotICAgICAgICAjIFhYWCBDYWxsZXIgc2hvdWxkbid0IG1vZGlmeSByZXN1bHQKLSAgICAgICAgc2VsZi5fX2ZpbGwoKQotICAgICAgICByZXR1cm4gc2VsZi5fX2ZpbGVzCi0KLSAgICBkZWYgb3BlbihzZWxmLCBmaWxlKToKLSAgICAgICAgc2VjX251bSA9IHNlbGYucGFyc2UoZmlsZSkKLSAgICAgICAgaWYgbm90IHNlY19udW06Ci0gICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZShmaWxlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4oZmlsZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgTm9TdWNoRmlsZShmaWxlLCBtc2cpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmVudHJ5Y2xhc3MoZnAsIGZpbGUsIHNlY19udW0pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCi0KLSAgICBkZWYgc2hvdyhzZWxmLCBmaWxlLCBlZGl0PTEpOgotICAgICAgICBzZWxmLm9wZW4oZmlsZSkuc2hvdyhlZGl0PWVkaXQpCi0KLSAgICBkZWYgbmV3KHNlbGYsIHNlY3Rpb24pOgotICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBTRUNUSU9OX1RJVExFUzoKLSAgICAgICAgICAgIHJhaXNlIE5vU3VjaFNlY3Rpb24oc2VjdGlvbikKLSAgICAgICAgbWF4bnVtID0gMAotICAgICAgICBmb3IgZmlsZSBpbiBzZWxmLmxpc3QoKToKLSAgICAgICAgICAgIHNlYywgbnVtID0gc2VsZi5wYXJzZShmaWxlKQotICAgICAgICAgICAgaWYgc2VjID09IHNlY3Rpb246Ci0gICAgICAgICAgICAgICAgbWF4bnVtID0gbWF4KG1heG51bSwgbnVtKQotICAgICAgICBzZWNfbnVtID0gKHNlY3Rpb24sIG1heG51bSsxKQotICAgICAgICBmaWxlID0gTkVXRklMRU5BTUUgJSBzZWNfbnVtCi0gICAgICAgIHJldHVybiBzZWxmLmVudHJ5Y2xhc3MoTm9uZSwgZmlsZSwgc2VjX251bSkKLQotY2xhc3MgRmFxV2l6YXJkOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnVpID0gVXNlcklucHV0KCkKLSAgICAgICAgc2VsZi5kaXIgPSBGYXFEaXIoKQotCi0gICAgZGVmIGdvKHNlbGYpOgotICAgICAgICBwcmludCgnQ29udGVudC10eXBlOiB0ZXh0L2h0bWwnKQotICAgICAgICByZXEgPSBzZWxmLnVpLnJlcSBvciAnaG9tZScKLSAgICAgICAgbW5hbWUgPSAnZG9fJXMnICUgcmVxCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1ldGggPSBnZXRhdHRyKHNlbGYsIG1uYW1lKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLmVycm9yKCJCYWQgcmVxdWVzdCB0eXBlICVyLiIgJSAocmVxLCkpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbWV0aCgpCi0gICAgICAgICAgICBleGNlcHQgSW52YWxpZEZpbGUgYXMgZXhjOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIkludmFsaWQgZW50cnkgZmlsZSBuYW1lICVzIiAlIGV4Yy5maWxlKQotICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEZpbGUgYXMgZXhjOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIk5vIGVudHJ5IHdpdGggZmlsZSBuYW1lICVzIiAlIGV4Yy5maWxlKQotICAgICAgICAgICAgZXhjZXB0IE5vU3VjaFNlY3Rpb24gYXMgZXhjOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIk5vIHNlY3Rpb24gbnVtYmVyICVzIiAlIGV4Yy5zZWN0aW9uKQotICAgICAgICBzZWxmLmVwaWxvZ3VlKCkKLQotICAgIGRlZiBlcnJvcihzZWxmLCBtZXNzYWdlLCAqKmt3KToKLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX0VSUk9SKQotICAgICAgICBlbWl0KG1lc3NhZ2UsIGt3KQotCi0gICAgZGVmIHByb2xvZ3VlKHNlbGYsIHRpdGxlLCBlbnRyeT1Ob25lLCAqKmt3KToKLSAgICAgICAgZW1pdChQUk9MT0dVRSwgZW50cnksIGt3ZGljdD1rdywgdGl0bGU9ZXNjYXBlKHRpdGxlKSkKLQotICAgIGRlZiBlcGlsb2d1ZShzZWxmKToKLSAgICAgICAgZW1pdChFUElMT0dVRSkKLQotICAgIGRlZiBkb19ob21lKHNlbGYpOgotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfSE9NRSkKLSAgICAgICAgZW1pdChIT01FKQotCi0gICAgZGVmIGRvX2RlYnVnKHNlbGYpOgotICAgICAgICBzZWxmLnByb2xvZ3VlKCJGQVEgV2l6YXJkIERlYnVnZ2luZyIpCi0gICAgICAgIGZvcm0gPSBjZ2kuRmllbGRTdG9yYWdlKCkKLSAgICAgICAgY2dpLnByaW50X2Zvcm0oZm9ybSkKLSAgICAgICAgY2dpLnByaW50X2Vudmlyb24ob3MuZW52aXJvbikKLSAgICAgICAgY2dpLnByaW50X2RpcmVjdG9yeSgpCi0gICAgICAgIGNnaS5wcmludF9hcmd1bWVudHMoKQotCi0gICAgZGVmIGRvX3NlYXJjaChzZWxmKToKLSAgICAgICAgcXVlcnkgPSBzZWxmLnVpLnF1ZXJ5Ci0gICAgICAgIGlmIG5vdCBxdWVyeToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoIkVtcHR5IHF1ZXJ5IHN0cmluZyEiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNlbGYudWkucXVlcnl0eXBlID09ICdzaW1wbGUnOgotICAgICAgICAgICAgcXVlcnkgPSByZS5lc2NhcGUocXVlcnkpCi0gICAgICAgICAgICBxdWVyaWVzID0gW3F1ZXJ5XQotICAgICAgICBlbGlmIHNlbGYudWkucXVlcnl0eXBlIGluICgnYW55a2V5d29yZHMnLCAnYWxsa2V5d29yZHMnKToKLSAgICAgICAgICAgIHdvcmRzID0gW19mIGZvciBfZiBpbiByZS5zcGxpdCgnXFcrJywgcXVlcnkpIGlmIF9mXQotICAgICAgICAgICAgaWYgbm90IHdvcmRzOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIk5vIGtleXdvcmRzIHNwZWNpZmllZCEiKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgd29yZHMgPSBbcidcYiVzXGInICUgdyBmb3IgdyBpbiB3b3Jkc10KLSAgICAgICAgICAgIGlmIHNlbGYudWkucXVlcnl0eXBlWzozXSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICBxdWVyaWVzID0gWyd8Jy5qb2luKHdvcmRzKV0KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBFYWNoIG9mIHRoZSBpbmRpdmlkdWFsIHF1ZXJpZXMgbXVzdCBtYXRjaAotICAgICAgICAgICAgICAgIHF1ZXJpZXMgPSB3b3JkcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBEZWZhdWx0IHRvIHJlZ3VsYXIgZXhwcmVzc2lvbgotICAgICAgICAgICAgcXVlcmllcyA9IFtxdWVyeV0KLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX1NFQVJDSCkKLSAgICAgICAgcHJvZ3MgPSBbXQotICAgICAgICBmb3IgcXVlcnkgaW4gcXVlcmllczoKLSAgICAgICAgICAgIGlmIHNlbGYudWkuY2FzZWZvbGQgPT0gJ25vJzoKLSAgICAgICAgICAgICAgICBwID0gcmUuY29tcGlsZShxdWVyeSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcCA9IHJlLmNvbXBpbGUocXVlcnksIHJlLklHTk9SRUNBU0UpCi0gICAgICAgICAgICBwcm9ncy5hcHBlbmQocCkKLSAgICAgICAgaGl0cyA9IFtdCi0gICAgICAgIGZvciBmaWxlIGluIHNlbGYuZGlyLmxpc3QoKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBGaWxlRXJyb3I6Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRzCi0gICAgICAgICAgICBmb3IgcCBpbiBwcm9nczoKLSAgICAgICAgICAgICAgICBpZiBub3QgcC5zZWFyY2goZW50cnkudGl0bGUpIGFuZCBub3QgcC5zZWFyY2goZW50cnkuYm9keSk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGhpdHMuYXBwZW5kKGZpbGUpCi0gICAgICAgIGlmIG5vdCBoaXRzOgotICAgICAgICAgICAgZW1pdChOT19ISVRTLCBzZWxmLnVpLCBjb3VudD0wKQotICAgICAgICBlbGlmIGxlbihoaXRzKSA8PSBNQVhISVRTOgotICAgICAgICAgICAgaWYgbGVuKGhpdHMpID09IDE6Ci0gICAgICAgICAgICAgICAgZW1pdChPTkVfSElULCBjb3VudD0xKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbWl0KEZFV19ISVRTLCBjb3VudD1sZW4oaGl0cykpCi0gICAgICAgICAgICBzZWxmLmZvcm1hdF9hbGwoaGl0cywgaGVhZGVycz0wKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW1pdChNQU5ZX0hJVFMsIGNvdW50PWxlbihoaXRzKSkKLSAgICAgICAgICAgIHNlbGYuZm9ybWF0X2luZGV4KGhpdHMpCi0KLSAgICBkZWYgZG9fYWxsKHNlbGYpOgotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfQUxMKQotICAgICAgICBmaWxlcyA9IHNlbGYuZGlyLmxpc3QoKQotICAgICAgICBzZWxmLmxhc3RfY2hhbmdlZChmaWxlcykKLSAgICAgICAgc2VsZi5mb3JtYXRfaW5kZXgoZmlsZXMsIGxvY2FscmVmcz0xKQotICAgICAgICBzZWxmLmZvcm1hdF9hbGwoZmlsZXMpCi0KLSAgICBkZWYgZG9fY29tcGF0KHNlbGYpOgotICAgICAgICBmaWxlcyA9IHNlbGYuZGlyLmxpc3QoKQotICAgICAgICBlbWl0KENPTVBBVCkKLSAgICAgICAgc2VsZi5sYXN0X2NoYW5nZWQoZmlsZXMpCi0gICAgICAgIHNlbGYuZm9ybWF0X2luZGV4KGZpbGVzLCBsb2NhbHJlZnM9MSkKLSAgICAgICAgc2VsZi5mb3JtYXRfYWxsKGZpbGVzLCBlZGl0PTApCi0gICAgICAgIHN5cy5leGl0KDApICAgICAgICAgICAgICAgICAgICAgIyBYWFggSGFjayB0byBzdXBwcmVzcyBlcGlsb2d1ZQotCi0gICAgZGVmIGxhc3RfY2hhbmdlZChzZWxmLCBmaWxlcyk6Ci0gICAgICAgIGxhdGVzdCA9IDAKLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oZmlsZSkKLSAgICAgICAgICAgIGlmIGVudHJ5OgotICAgICAgICAgICAgICAgIG10aW1lID0gbXRpbWUgPSBlbnRyeS5nZXRtdGltZSgpCi0gICAgICAgICAgICAgICAgaWYgbXRpbWUgPiBsYXRlc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGxhdGVzdCA9IG10aW1lCi0gICAgICAgIHByaW50KHRpbWUuc3RyZnRpbWUoTEFTVF9DSEFOR0VELCB0aW1lLmxvY2FsdGltZShsYXRlc3QpKSkKLSAgICAgICAgZW1pdChFWFBMQUlOX01BUktTKQotCi0gICAgZGVmIGZvcm1hdF9hbGwoc2VsZiwgZmlsZXMsIGVkaXQ9MSwgaGVhZGVycz0xKToKLSAgICAgICAgc2VjID0gMAotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBOb1N1Y2hGaWxlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBpZiBoZWFkZXJzIGFuZCBlbnRyeS5zZWMgIT0gc2VjOgotICAgICAgICAgICAgICAgIHNlYyA9IGVudHJ5LnNlYwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBTRUNUSU9OX1RJVExFU1tzZWNdCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJVbnRpdGxlZCIKLSAgICAgICAgICAgICAgICBlbWl0KCJcbjxIUj5cbjxIMT4lKHNlYylzLiAlKHRpdGxlKXM8L0gxPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHNlYz1zZWMsIHRpdGxlPXRpdGxlKQotICAgICAgICAgICAgZW50cnkuc2hvdyhlZGl0PWVkaXQpCi0KLSAgICBkZWYgZG9faW5kZXgoc2VsZik6Ci0gICAgICAgIHNlbGYucHJvbG9ndWUoVF9JTkRFWCkKLSAgICAgICAgZmlsZXMgPSBzZWxmLmRpci5saXN0KCkKLSAgICAgICAgc2VsZi5sYXN0X2NoYW5nZWQoZmlsZXMpCi0gICAgICAgIHNlbGYuZm9ybWF0X2luZGV4KGZpbGVzLCBhZGQ9MSkKLQotICAgIGRlZiBmb3JtYXRfaW5kZXgoc2VsZiwgZmlsZXMsIGFkZD0wLCBsb2NhbHJlZnM9MCk6Ci0gICAgICAgIHNlYyA9IDAKLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBzZWxmLmRpci5vcGVuKGZpbGUpCi0gICAgICAgICAgICBleGNlcHQgTm9TdWNoRmlsZToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgZW50cnkuc2VjICE9IHNlYzoKLSAgICAgICAgICAgICAgICBpZiBzZWM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGFkZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGVtaXQoSU5ERVhfQUREU0VDVElPTiwgc2VjPXNlYykKLSAgICAgICAgICAgICAgICAgICAgZW1pdChJTkRFWF9FTkRTRUNUSU9OLCBzZWM9c2VjKQotICAgICAgICAgICAgICAgIHNlYyA9IGVudHJ5LnNlYwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBTRUNUSU9OX1RJVExFU1tzZWNdCi0gICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICJVbnRpdGxlZCIKLSAgICAgICAgICAgICAgICBlbWl0KElOREVYX1NFQ1RJT04sIHNlYz1zZWMsIHRpdGxlPXRpdGxlKQotICAgICAgICAgICAgaWYgbG9jYWxyZWZzOgotICAgICAgICAgICAgICAgIGVtaXQoTE9DQUxfRU5UUlksIGVudHJ5KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbWl0KElOREVYX0VOVFJZLCBlbnRyeSkKLSAgICAgICAgICAgIGVudHJ5LmVtaXRfbWFya3MoKQotICAgICAgICBpZiBzZWM6Ci0gICAgICAgICAgICBpZiBhZGQ6Ci0gICAgICAgICAgICAgICAgZW1pdChJTkRFWF9BRERTRUNUSU9OLCBzZWM9c2VjKQotICAgICAgICAgICAgZW1pdChJTkRFWF9FTkRTRUNUSU9OLCBzZWM9c2VjKQotCi0gICAgZGVmIGRvX3JlY2VudChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYudWkuZGF5czoKLSAgICAgICAgICAgIGRheXMgPSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkYXlzID0gZmxvYXQoc2VsZi51aS5kYXlzKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdXRvZmYgPSBub3cgLSBkYXlzICogMjQgKiAzNjAwCi0gICAgICAgIGV4Y2VwdCBPdmVyZmxvd0Vycm9yOgotICAgICAgICAgICAgY3V0b2ZmID0gMAotICAgICAgICBsaXN0ID0gW10KLSAgICAgICAgZm9yIGZpbGUgaW4gc2VsZi5kaXIubGlzdCgpOgotICAgICAgICAgICAgZW50cnkgPSBzZWxmLmRpci5vcGVuKGZpbGUpCi0gICAgICAgICAgICBpZiBub3QgZW50cnk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG10aW1lID0gZW50cnkuZ2V0bXRpbWUoKQotICAgICAgICAgICAgaWYgbXRpbWUgPj0gY3V0b2ZmOgotICAgICAgICAgICAgICAgIGxpc3QuYXBwZW5kKChtdGltZSwgZmlsZSkpCi0gICAgICAgIGxpc3Quc29ydCgpCi0gICAgICAgIGxpc3QucmV2ZXJzZSgpCi0gICAgICAgIHNlbGYucHJvbG9ndWUoVF9SRUNFTlQpCi0gICAgICAgIGlmIGRheXMgPD0gMToKLSAgICAgICAgICAgIHBlcmlvZCA9ICIlLjJnIGhvdXJzIiAlIChkYXlzKjI0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGVyaW9kID0gIiUuNmcgZGF5cyIgJSBkYXlzCi0gICAgICAgIGlmIG5vdCBsaXN0OgotICAgICAgICAgICAgZW1pdChOT19SRUNFTlQsIHBlcmlvZD1wZXJpb2QpCi0gICAgICAgIGVsaWYgbGVuKGxpc3QpID09IDE6Ci0gICAgICAgICAgICBlbWl0KE9ORV9SRUNFTlQsIHBlcmlvZD1wZXJpb2QpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlbWl0KFNPTUVfUkVDRU5ULCBwZXJpb2Q9cGVyaW9kLCBjb3VudD1sZW4obGlzdCkpCi0gICAgICAgIHNlbGYuZm9ybWF0X2FsbChbbXRpbWVfZmlsZVsxXSBmb3IgbXRpbWVfZmlsZSBpbiBsaXN0XSwgaGVhZGVycz0wKQotICAgICAgICBlbWl0KFRBSUxfUkVDRU5UKQotCi0gICAgZGVmIGRvX3JvdWxldHRlKHNlbGYpOgotICAgICAgICBpbXBvcnQgcmFuZG9tCi0gICAgICAgIGZpbGVzID0gc2VsZi5kaXIubGlzdCgpCi0gICAgICAgIGlmIG5vdCBmaWxlczoKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoIk5vIGVudHJpZXMuIikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBmaWxlID0gcmFuZG9tLmNob2ljZShmaWxlcykKLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX1JPVUxFVFRFKQotICAgICAgICBlbWl0KFJPVUxFVFRFKQotICAgICAgICBzZWxmLmRpci5zaG93KGZpbGUpCi0KLSAgICBkZWYgZG9faGVscChzZWxmKToKLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX0hFTFApCi0gICAgICAgIGVtaXQoSEVMUCkKLQotICAgIGRlZiBkb19zaG93KHNlbGYpOgotICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oc2VsZi51aS5maWxlKQotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfU0hPVykKLSAgICAgICAgZW50cnkuc2hvdygpCi0KLSAgICBkZWYgZG9fYWRkKHNlbGYpOgotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfQUREKQotICAgICAgICBlbWl0KEFERF9IRUFEKQotICAgICAgICBzZWN0aW9ucyA9IHNvcnRlZChTRUNUSU9OX1RJVExFUy5pdGVtcygpKQotICAgICAgICBmb3Igc2VjdGlvbiwgdGl0bGUgaW4gc2VjdGlvbnM6Ci0gICAgICAgICAgICBlbWl0KEFERF9TRUNUSU9OLCBzZWN0aW9uPXNlY3Rpb24sIHRpdGxlPXRpdGxlKQotICAgICAgICBlbWl0KEFERF9UQUlMKQotCi0gICAgZGVmIGRvX2RlbGV0ZShzZWxmKToKLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX0RFTEVURSkKLSAgICAgICAgZW1pdChERUxFVEUpCi0KLSAgICBkZWYgZG9fbG9nKHNlbGYpOgotICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oc2VsZi51aS5maWxlKQotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfTE9HLCBlbnRyeSkKLSAgICAgICAgZW1pdChMT0csIGVudHJ5KQotICAgICAgICBzZWxmLnJsb2coaW50ZXJwb2xhdGUoU0hfUkxPRywgZW50cnkpLCBlbnRyeSkKLQotICAgIGRlZiBybG9nKHNlbGYsIGNvbW1hbmQsIGVudHJ5PU5vbmUpOgotICAgICAgICBvdXRwdXQgPSBvcy5wb3Blbihjb21tYW5kKS5yZWFkKCkKLSAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnPFBSRT4nKQotICAgICAgICBhdGhlYWQgPSAwCi0gICAgICAgIGxpbmVzID0gb3V0cHV0LnNwbGl0KCdcbicpCi0gICAgICAgIHdoaWxlIGxpbmVzIGFuZCBub3QgbGluZXNbLTFdOgotICAgICAgICAgICAgZGVsIGxpbmVzWy0xXQotICAgICAgICBpZiBsaW5lczoKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lc1stMV0KLSAgICAgICAgICAgIGlmIGxpbmVbOjFdID09ICc9JyBhbmQgbGVuKGxpbmUpID49IDQwIGFuZCBcCi0gICAgICAgICAgICAgICBsaW5lID09IGxpbmVbMF0qbGVuKGxpbmUpOgotICAgICAgICAgICAgICAgIGRlbCBsaW5lc1stMV0KLSAgICAgICAgaGVhZHJldiA9IE5vbmUKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBlbnRyeSBhbmQgYXRoZWFkIGFuZCBsaW5lWzo5XSA9PSAncmV2aXNpb24gJzoKLSAgICAgICAgICAgICAgICByZXYgPSBsaW5lWzk6XS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgbWFtaSA9IHJldnBhcnNlKHJldikKLSAgICAgICAgICAgICAgICBpZiBub3QgbWFtaToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBlbWl0KFJFVklTSU9OTElOSywgZW50cnksIHJldj1yZXYsIGxpbmU9bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWFtaVsxXSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gIiVkLiVkIiAlIChtYW1pWzBdLCBtYW1pWzFdLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWl0KERJRkZMSU5LLCBlbnRyeSwgcHJldj1wcmV2LCByZXY9cmV2KQotICAgICAgICAgICAgICAgICAgICBpZiBoZWFkcmV2OgotICAgICAgICAgICAgICAgICAgICAgICAgZW1pdChESUZGTElOSywgZW50cnksIHByZXY9cmV2LCByZXY9aGVhZHJldikKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRyZXYgPSByZXYKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgICAgIGF0aGVhZCA9IDAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYXRoZWFkID0gMAotICAgICAgICAgICAgICAgIGlmIGxpbmVbOjFdID09ICctJyBhbmQgbGVuKGxpbmUpID49IDIwIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgbGluZSA9PSBsZW4obGluZSkgKiBsaW5lWzBdOgotICAgICAgICAgICAgICAgICAgICBhdGhlYWQgPSAxCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJzxIUj4nKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KGxpbmUpCi0gICAgICAgIHByaW50KCc8L1BSRT4nKQotCi0gICAgZGVmIGRvX3JldmlzaW9uKHNlbGYpOgotICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oc2VsZi51aS5maWxlKQotICAgICAgICByZXYgPSBzZWxmLnVpLnJldgotICAgICAgICBtYW1pID0gcmV2cGFyc2UocmV2KQotICAgICAgICBpZiBub3QgbWFtaToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoIkludmFsaWQgcmV2aXNpb24gbnVtYmVyOiAlci4iICUgKHJldiwpKQotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfUkVWSVNJT04sIGVudHJ5KQotICAgICAgICBzZWxmLnNoZWxsKGludGVycG9sYXRlKFNIX1JFVklTSU9OLCBlbnRyeSwgcmV2PXJldikpCi0KLSAgICBkZWYgZG9fZGlmZihzZWxmKToKLSAgICAgICAgZW50cnkgPSBzZWxmLmRpci5vcGVuKHNlbGYudWkuZmlsZSkKLSAgICAgICAgcHJldiA9IHNlbGYudWkucHJldgotICAgICAgICByZXYgPSBzZWxmLnVpLnJldgotICAgICAgICBtYW1pID0gcmV2cGFyc2UocmV2KQotICAgICAgICBpZiBub3QgbWFtaToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoIkludmFsaWQgcmV2aXNpb24gbnVtYmVyOiAlci4iICUgKHJldiwpKQotICAgICAgICBpZiBwcmV2OgotICAgICAgICAgICAgaWYgbm90IHJldnBhcnNlKHByZXYpOgotICAgICAgICAgICAgICAgIHNlbGYuZXJyb3IoIkludmFsaWQgcHJldmlvdXMgcmV2aXNpb24gbnVtYmVyOiAlci4iICUgKHByZXYsKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByZXYgPSAnJWQuJWQnICUgKG1hbWlbMF0sIG1hbWlbMV0pCi0gICAgICAgIHNlbGYucHJvbG9ndWUoVF9ESUZGLCBlbnRyeSkKLSAgICAgICAgc2VsZi5zaGVsbChpbnRlcnBvbGF0ZShTSF9SRElGRiwgZW50cnksIHJldj1yZXYsIHByZXY9cHJldikpCi0KLSAgICBkZWYgc2hlbGwoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIG91dHB1dCA9IG9zLnBvcGVuKGNvbW1hbmQpLnJlYWQoKQotICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCc8UFJFPicpCi0gICAgICAgIHByaW50KGVzY2FwZShvdXRwdXQpKQotICAgICAgICBwcmludCgnPC9QUkU+JykKLQotICAgIGRlZiBkb19uZXcoc2VsZik6Ci0gICAgICAgIGVudHJ5ID0gc2VsZi5kaXIubmV3KHNlY3Rpb249aW50KHNlbGYudWkuc2VjdGlvbikpCi0gICAgICAgIGVudHJ5LnZlcnNpb24gPSAnKm5ldyonCi0gICAgICAgIHNlbGYucHJvbG9ndWUoVF9FRElUKQotICAgICAgICBlbWl0KEVESVRIRUFEKQotICAgICAgICBlbWl0KEVESVRGT1JNMSwgZW50cnksIGVkaXR2ZXJzaW9uPWVudHJ5LnZlcnNpb24pCi0gICAgICAgIGVtaXQoRURJVEZPUk0yLCBlbnRyeSwgbG9hZF9teV9jb29raWUoKSkKLSAgICAgICAgZW1pdChFRElURk9STTMpCi0gICAgICAgIGVudHJ5LnNob3coZWRpdD0wKQotCi0gICAgZGVmIGRvX2VkaXQoc2VsZik6Ci0gICAgICAgIGVudHJ5ID0gc2VsZi5kaXIub3BlbihzZWxmLnVpLmZpbGUpCi0gICAgICAgIGVudHJ5LmxvYWRfdmVyc2lvbigpCi0gICAgICAgIHNlbGYucHJvbG9ndWUoVF9FRElUKQotICAgICAgICBlbWl0KEVESVRIRUFEKQotICAgICAgICBlbWl0KEVESVRGT1JNMSwgZW50cnksIGVkaXR2ZXJzaW9uPWVudHJ5LnZlcnNpb24pCi0gICAgICAgIGVtaXQoRURJVEZPUk0yLCBlbnRyeSwgbG9hZF9teV9jb29raWUoKSkKLSAgICAgICAgZW1pdChFRElURk9STTMpCi0gICAgICAgIGVudHJ5LnNob3coZWRpdD0wKQotCi0gICAgZGVmIGRvX3JldmlldyhzZWxmKToKLSAgICAgICAgc2VuZF9teV9jb29raWUoc2VsZi51aSkKLSAgICAgICAgaWYgc2VsZi51aS5lZGl0dmVyc2lvbiA9PSAnKm5ldyonOgotICAgICAgICAgICAgc2VjLCBudW0gPSBzZWxmLmRpci5wYXJzZShzZWxmLnVpLmZpbGUpCi0gICAgICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm5ldyhzZWN0aW9uPXNlYykKLSAgICAgICAgICAgIGVudHJ5LnZlcnNpb24gPSAiKm5ldyoiCi0gICAgICAgICAgICBpZiBlbnRyeS5maWxlICE9IHNlbGYudWkuZmlsZToKLSAgICAgICAgICAgICAgICBzZWxmLmVycm9yKCJDb21taXQgdmVyc2lvbiBjb25mbGljdCEiKQotICAgICAgICAgICAgICAgIGVtaXQoTkVXQ09ORkxJQ1QsIHNlbGYudWksIHNlYz1zZWMsIG51bT1udW0pCi0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oc2VsZi51aS5maWxlKQotICAgICAgICAgICAgZW50cnkubG9hZF92ZXJzaW9uKCkKLSAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBGQVEgZW50cnkgbnVtYmVyIGRpZG4ndCBjaGFuZ2UKLSAgICAgICAgaWYgc2VsZi51aS50aXRsZS5zcGxpdCgpWzoxXSAhPSBlbnRyeS50aXRsZS5zcGxpdCgpWzoxXToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoIkRvbid0IGNoYW5nZSB0aGUgZW50cnkgbnVtYmVyIHBsZWFzZSEiKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgZWRpdGVkIHZlcnNpb24gaXMgdGhlIGN1cnJlbnQgdmVyc2lvbgotICAgICAgICBpZiBlbnRyeS52ZXJzaW9uICE9IHNlbGYudWkuZWRpdHZlcnNpb246Ci0gICAgICAgICAgICBzZWxmLmVycm9yKCJDb21taXQgdmVyc2lvbiBjb25mbGljdCEiKQotICAgICAgICAgICAgZW1pdChWRVJTSU9OQ09ORkxJQ1QsIGVudHJ5LCBzZWxmLnVpKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGNvbW1pdF9vayA9ICgobm90IFBBU1NXT1JECi0gICAgICAgICAgICAgICAgICAgICAgb3Igc2VsZi51aS5wYXNzd29yZCA9PSBQQVNTV09SRCkKLSAgICAgICAgICAgICAgICAgICAgIGFuZCBzZWxmLnVpLmF1dGhvcgotICAgICAgICAgICAgICAgICAgICAgYW5kICdAJyBpbiBzZWxmLnVpLmVtYWlsCi0gICAgICAgICAgICAgICAgICAgICBhbmQgc2VsZi51aS5sb2cpCi0gICAgICAgIGlmIHNlbGYudWkuY29tbWl0OgotICAgICAgICAgICAgaWYgbm90IGNvbW1pdF9vazoKLSAgICAgICAgICAgICAgICBzZWxmLmNhbnRjb21taXQoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdChlbnRyeSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLnByb2xvZ3VlKFRfUkVWSUVXKQotICAgICAgICBlbWl0KFJFVklFV0hFQUQpCi0gICAgICAgIGVudHJ5LmJvZHkgPSBzZWxmLnVpLmJvZHkKLSAgICAgICAgZW50cnkudGl0bGUgPSBzZWxmLnVpLnRpdGxlCi0gICAgICAgIGVudHJ5LnNob3coZWRpdD0wKQotICAgICAgICBlbWl0KEVESVRGT1JNMSwgc2VsZi51aSwgZW50cnkpCi0gICAgICAgIGlmIGNvbW1pdF9vazoKLSAgICAgICAgICAgIGVtaXQoQ09NTUlUKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW1pdChOT0NPTU1JVF9IRUFEKQotICAgICAgICAgICAgc2VsZi5lcnJvcmRldGFpbCgpCi0gICAgICAgICAgICBlbWl0KE5PQ09NTUlUX1RBSUwpCi0gICAgICAgIGVtaXQoRURJVEZPUk0yLCBzZWxmLnVpLCBlbnRyeSwgbG9hZF9teV9jb29raWUoKSkKLSAgICAgICAgZW1pdChFRElURk9STTMpCi0KLSAgICBkZWYgY2FudGNvbW1pdChzZWxmKToKLSAgICAgICAgc2VsZi5wcm9sb2d1ZShUX0NBTlRDT01NSVQpCi0gICAgICAgIHByaW50KENBTlRDT01NSVRfSEVBRCkKLSAgICAgICAgc2VsZi5lcnJvcmRldGFpbCgpCi0gICAgICAgIHByaW50KENBTlRDT01NSVRfVEFJTCkKLQotICAgIGRlZiBlcnJvcmRldGFpbChzZWxmKToKLSAgICAgICAgaWYgUEFTU1dPUkQgYW5kIHNlbGYudWkucGFzc3dvcmQgIT0gUEFTU1dPUkQ6Ci0gICAgICAgICAgICBlbWl0KE5FRURfUEFTU1dEKQotICAgICAgICBpZiBub3Qgc2VsZi51aS5sb2c6Ci0gICAgICAgICAgICBlbWl0KE5FRURfTE9HKQotICAgICAgICBpZiBub3Qgc2VsZi51aS5hdXRob3I6Ci0gICAgICAgICAgICBlbWl0KE5FRURfQVVUSE9SKQotICAgICAgICBpZiBub3Qgc2VsZi51aS5lbWFpbDoKLSAgICAgICAgICAgIGVtaXQoTkVFRF9FTUFJTCkKLQotICAgIGRlZiBjb21taXQoc2VsZiwgZW50cnkpOgotICAgICAgICBmaWxlID0gZW50cnkuZmlsZQotICAgICAgICAjIE5vcm1hbGl6ZSBsaW5lIGVuZGluZ3MgaW4gYm9keQotICAgICAgICBpZiAnXHInIGluIHNlbGYudWkuYm9keToKLSAgICAgICAgICAgIHNlbGYudWkuYm9keSA9IHJlLnN1YignXHJcbj8nLCAnXG4nLCBzZWxmLnVpLmJvZHkpCi0gICAgICAgICMgTm9ybWFsaXplIHdoaXRlc3BhY2UgaW4gdGl0bGUKLSAgICAgICAgc2VsZi51aS50aXRsZSA9ICcgJy5qb2luKHNlbGYudWkudGl0bGUuc3BsaXQoKSkKLSAgICAgICAgIyBDaGVjayB0aGF0IHRoZXJlIHdlcmUgYW55IGNoYW5nZXMKLSAgICAgICAgaWYgc2VsZi51aS5ib2R5ID09IGVudHJ5LmJvZHkgYW5kIHNlbGYudWkudGl0bGUgPT0gZW50cnkudGl0bGU6Ci0gICAgICAgICAgICBzZWxmLmVycm9yKCJZb3UgZGlkbid0IG1ha2UgYW55IGNoYW5nZXMhIikKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgbmVlZCB0byBsb2NrIGhlcmUgYmVjYXVzZSBvdGhlcndpc2UgdGhlIGZpbGUgZXhpc3RzIGFuZCBpcyBub3Qgd3JpdGFibGUgKG9uIE5UKQotICAgICAgICBjb21tYW5kID0gaW50ZXJwb2xhdGUoU0hfTE9DSywgZmlsZT1maWxlKQotICAgICAgICBwID0gb3MucG9wZW4oY29tbWFuZCkKLSAgICAgICAgb3V0cHV0ID0gcC5yZWFkKCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy51bmxpbmsoZmlsZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmID0gb3BlbihmaWxlLCAndycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoQ0FOVFdSSVRFLCBmaWxlPWZpbGUsIHdoeT13aHkpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGF0ZSA9IHRpbWUuY3RpbWUobm93KQotICAgICAgICBlbWl0KEZJTEVIRUFERVIsIHNlbGYudWksIG9zLmVudmlyb24sIGRhdGU9ZGF0ZSwgX2ZpbGU9ZiwgX3F1b3RlPTApCi0gICAgICAgIGYud3JpdGUoJ1xuJykKLSAgICAgICAgZi53cml0ZShzZWxmLnVpLmJvZHkpCi0gICAgICAgIGYud3JpdGUoJ1xuJykKLSAgICAgICAgZi5jbG9zZSgpCi0KLSAgICAgICAgaW1wb3J0IHRlbXBmaWxlCi0gICAgICAgIHRmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkKLSAgICAgICAgZW1pdChMT0dIRUFERVIsIHNlbGYudWksIG9zLmVudmlyb24sIGRhdGU9ZGF0ZSwgX2ZpbGU9dGYpCi0gICAgICAgIHRmLmZsdXNoKCkKLSAgICAgICAgdGYuc2VlaygwKQotCi0gICAgICAgIGNvbW1hbmQgPSBpbnRlcnBvbGF0ZShTSF9DSEVDS0lOLCBmaWxlPWZpbGUsIHRmbj10Zi5uYW1lKQotICAgICAgICBsb2coIlxuXG4iICsgY29tbWFuZCkKLSAgICAgICAgcCA9IG9zLnBvcGVuKGNvbW1hbmQpCi0gICAgICAgIG91dHB1dCA9IHAucmVhZCgpCi0gICAgICAgIHN0cyA9IHAuY2xvc2UoKQotICAgICAgICBsb2coIm91dHB1dDogIiArIG91dHB1dCkKLSAgICAgICAgbG9nKCJkb25lOiAiICsgc3RyKHN0cykpCi0gICAgICAgIGxvZygiVGVtcEZpbGU6XG4iICsgdGYucmVhZCgpICsgImVuZCIpCi0KLSAgICAgICAgaWYgbm90IHN0czoKLSAgICAgICAgICAgIHNlbGYucHJvbG9ndWUoVF9DT01NSVRURUQpCi0gICAgICAgICAgICBlbWl0KENPTU1JVFRFRCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZXJyb3IoVF9DT01NSVRGQUlMRUQpCi0gICAgICAgICAgICBlbWl0KENPTU1JVEZBSUxFRCwgc3RzPXN0cykKLSAgICAgICAgcHJpbnQoJzxQUkU+JXM8L1BSRT4nICUgZXNjYXBlKG91dHB1dCkpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MudW5saW5rKHRmLm5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBlbnRyeSA9IHNlbGYuZGlyLm9wZW4oZmlsZSkKLSAgICAgICAgZW50cnkuc2hvdygpCi0KLXdpeiA9IEZhcVdpemFyZCgpCi13aXouZ28oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZmFxd2l6L21vdmUtZmFxd2l6LnNoIGIvVG9vbHMvZmFxd2l6L21vdmUtZmFxd2l6LnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiM2JjYzkyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2ZhcXdpei9tb3ZlLWZhcXdpei5zaAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBDaHJpc3RpYW4gUmVpcyA8a2lrb0Bhc3luYy5jb20uYnI+Ci0jCi0jIE1vdmVzIAotIyAKLSMgRXhhbXBsZToKLSMKLSMgICBibGFja2plc3VzOn4+IC4vbW92ZS1mYXF3aXouc2ggMlwuMSAzXC4yCi0jICAgTW92aW5nIEZBUSBxdWVzdGlvbiAwMi4wMDEgdG8gMDMuMDAyCi0KLWlmIFsgeCQyID0geCBdOyB0aGVuCi0gICAgZWNobyAiTmVlZCAyIGFyZ3M6IG9yaWdpbmFsX3ZlcnNpb24gZmluYWxfdmVyc2lvbi4iCi0gICAgZXhpdCAyCi1maQotCi1pZiBbICEgLWQgZGF0YSAtbyAhIC1kIGRhdGEvUkNTIF07IHRoZW4KLSAgICBlY2hvICJSdW4gdGhpcyBpbnNpZGUgdGhlIGZhcXdpeiBkYXRhLyBkaXJlY3RvcnkncyBwYXJlbnQgZGlyLiIKLSAgICBleGl0IDIKLWZpCi0KLWN1dF9uX3BhZCgpIHsKLSAgICB0PWBlY2hvICQxIHwgY3V0IC1kLiAtZiAkMmAKLSAgICBleHBvcnQgJDM9YGVjaG8gJHQgfCBhd2sgInsgdG1wID0gXFwkMDsgbCA9IGxlbmd0aCh0bXApOyBmb3IgKGkgPSAwOyBpIDwgJDItbCsxOyBpKyspIHsgdG1wID0gIjAiLnRtcCB9IHByaW50IHRtcCAgfSJgCi19Ci0KLWN1dF9uX3BhZCAkMSAxIHByZWZpeDEKLWN1dF9uX3BhZCAkMSAyIHN1ZmZpeDEKLWN1dF9uX3BhZCAkMiAxIHByZWZpeDIKLWN1dF9uX3BhZCAkMiAyIHN1ZmZpeDIKLWlmIHdoaWNoIHRlbXBmaWxlID4vZGV2L251bGw7IHRoZW4KLSAgICB0bXBmaWxlPSQodGVtcGZpbGUgLWQgLikKLWVsaWYgWyAtbiAiJFJBTkRPTSIgXTsgdGhlbgotICAgIHRtcGZpbGU9dG1wJFJBTkRPTS50bXAKLWVsc2UKLSAgICB0bXBmaWxlPXRtcCQkLnRtcAotZmkKLWZpbGUxPWZhcSRwcmVmaXgxLiRzdWZmaXgxLmh0cAotZmlsZTI9ZmFxJHByZWZpeDIuJHN1ZmZpeDIuaHRwCi0KLWVjaG8gIk1vdmluZyBGQVEgcXVlc3Rpb24gJHByZWZpeDEuJHN1ZmZpeDEgdG8gJHByZWZpeDIuJHN1ZmZpeDIiIAotCi1zZWQgLWUgInMvJDFcLi8kMlwuL2ciIGRhdGEvJGZpbGUxID4gJHt0bXBmaWxlfTEKLXNlZCAtZSAicy8kMVwuLyQyXC4vZyIgZGF0YS9SQ1MvJGZpbGUxLHYgPiAke3RtcGZpbGV9MgotCi1pZiBbIC1mIGRhdGEvJGZpbGUyIF07IHRoZW4KLSAgICBlY2hvICJUYXJnZXQgRkFRIGV4aXN0cy4gV29uJ3QgY2xvYmJlci4iCi0gICAgZXhpdCAyCi1maQotCi1tdiAke3RtcGZpbGV9MSBkYXRhLyRmaWxlMgotbXYgJHt0bXBmaWxlfTIgZGF0YS9SQ1MvJGZpbGUyLHYKLW12IGRhdGEvJGZpbGUxIGRhdGEvJGZpbGUxLm9yaWcKLW12IGRhdGEvUkNTLyRmaWxlMSx2IGRhdGEvUkNTLyRmaWxlMSx2Lm9yaWcKLQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL1JFQURNRS50eHQgYi9Ub29scy9mcmFtZXIvUkVBRE1FLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE5M2E0ZC4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvUkVBRE1FLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotZnJhbWVyIGlzIGEgdG9vbCB0byBnZW5lcmF0ZSBib2lsZXJwbGF0ZSBjb2RlIGZvciBDIGV4dGVuc2lvbiB0eXBlcy4KLQotVGhlIGJvaWxlcnBsYXRlIGlzIGdlbmVyYXRlZCBmcm9tIGEgc3BlY2lmaWNhdGlvbiBvYmplY3Qgd3JpdHRlbiBpbgotUHl0aG9uLiAgVGhlIHNwZWNpZmljYXRpb24gdXNlcyB0aGUgY2xhc3Mgc3RhdGVtZW50IHRvIGRlc2NyaWJlIHRoZQotZXh0ZW5zaW9uIG1vZHVsZSBhbmQgYW55IGV4dGVuc2lvbiB0eXBlcyBpdCBjb250YWlucy4gIEZyb20gdGhlCi1zcGVjaWZpY2F0aW9uLCBmcmFtZXIgY2FuIGdlbmVyYXRlIGFsbCB0aGUgYm9pbGVycGxhdGUgQyBjb2RlLAotaW5jbHVkaW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zLCBhcmd1bWVudCBoYW5kbGluZyBjb2RlLCBhbmQgdHlwZQotb2JqZWN0cy4KZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyYW1lci9UT0RPLnR4dCBiL1Rvb2xzL2ZyYW1lci9UT0RPLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU4NmM4ZS4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvVE9ETy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLUFkZCBzcGVjIGZvciBnZXRzZXRzLgotR2VuZXJhdGUgYSBkaXN0dXRpbHMgc2V0dXAgc2NyaXB0LgotSGFuZGxlIG9wZXJhdG9yIG92ZXJsb2FkaW5nLgotR2VuZXJhdGUgdHJhdmVyc2UgYW5kIGNsZWFyIG1ldGhvZHMgZm9yIEdDLgotSGFuZGxlIG1hcHBpbmcsIHNlcXVlbmNlLCBidWZmZXIgcHJvdG9jb2xzLgotRmluaXNoIHRoZSB0b2RvIGxpc3QuCmRpZmYgLS1naXQgYS9Ub29scy9mcmFtZXIvZXhhbXBsZS5weSBiL1Rvb2xzL2ZyYW1lci9leGFtcGxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTI2N2U5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL2ZyYW1lci9leGFtcGxlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLSIiIkdlbmVyYXRlIHRoZSBza2VsZXRvbiBmb3IgY1N0cmluZ0lPIGFzIGFuIGV4YW1wbGUgb2YgZnJhbWVyLiIiIgotCi1mcm9tIGZyYW1lci5iYXNlcyBpbXBvcnQgTW9kdWxlLCBUeXBlCi1mcm9tIGZyYW1lci5tZW1iZXIgaW1wb3J0IG1lbWJlcgotCi1jbGFzcyBjU3RyaW5nSU8oTW9kdWxlKToKLSAgICAiIiJBIHNpbXBsZSBmYXN0IHBhcnRpYWwgU3RyaW5nSU8gcmVwbGFjZW1lbnQuCi0KLSAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBhIHNpbXBsZSB1c2VmdWwgcmVwbGFjZW1lbnQgZm9yIHRoZSBTdHJpbmdJTwotICAgIG1vZHVsZSB0aGF0IGlzIHdyaXR0ZW4gaW4gQy4gIEl0IGRvZXMgbm90IHByb3ZpZGUgdGhlIGZ1bGwKLSAgICBnZW5lcmFsaXR5IG9mIFN0cmluZ0lPLCBidXQgaXQgcHJvdmlkZXMgZW5vdWdoIGZvciBtb3N0Ci0gICAgYXBwbGljYXRpb25zIGFuZCBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQotICAgIHBpY2tsZSBtb2R1bGUuCi0KLSAgICBVc2FnZToKLQotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi0KLSAgICBhbl9vdXRwdXRfc3RyZWFtID0gU3RyaW5nSU8oKQotICAgIGFuX291dHB1dF9zdHJlYW0ud3JpdGUoc29tZV9zdHVmZikKLSAgICAuLi4KLSAgICB2YWx1ZSA9IGFuX291dHB1dF9zdHJlYW0uZ2V0dmFsdWUoKQotCi0gICAgYW5faW5wdXRfc3RyZWFtID0gU3RyaW5nSU8oYV9zdHJpbmcpCi0gICAgc3BhbSA9IGFuX2lucHV0X3N0cmVhbS5yZWFkbGluZSgpCi0gICAgc3BhbSA9IGFuX2lucHV0X3N0cmVhbS5yZWFkKDUpCi0gICAgYW5faW5wdXRfc3RyZWFtLnNlZWsoMCkgICAgICAgICAgICAgIyBPSywgc3RhcnQgb3ZlcgotICAgIHNwYW0gPSBhbl9pbnB1dF9zdHJlYW0ucmVhZCgpICAgICAgICMgYW5kIHJlYWQgaXQgYWxsCi0gICAgIiIiCi0KLSAgICBfX2ZpbGVfXyA9ICJjU3RyaW5nSU8uYyIKLQotICAgIGRlZiBTdHJpbmdJTyhvKToKLSAgICAgICAgIiIiUmV0dXJuIGEgU3RyaW5nSU8tbGlrZSBzdHJlYW0gZm9yIHJlYWRpbmcgb3Igd3JpdGluZyIiIgotICAgIFN0cmluZ0lPLnB5YXJnID0gInxPIgotCi0gICAgY2xhc3MgSW5wdXRUeXBlKFR5cGUpOgotICAgICAgICAiU2ltcGxlIHR5cGUgZm9yIHRyZWF0aW5nIHN0cmluZ3MgYXMgaW5wdXQgZmlsZSBzdHJlYW1zIgotCi0gICAgICAgIGFiYnJldiA9ICJpbnB1dCIKLQotICAgICAgICBzdHJ1Y3QgPSAiIiJcCi0gICAgICAgIHR5cGVkZWYgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdF9IRUFECi0gICAgICAgICAgICAgICAgY2hhciAqYnVmOwotICAgICAgICAgICAgICAgIGludCBwb3M7Ci0gICAgICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnBidWY7Ci0gICAgICAgIH0gSW5wdXRPYmplY3Q7Ci0gICAgICAgICIiIgotCi0gICAgICAgIGRlZiBmbHVzaChzZWxmKToKLSAgICAgICAgICAgICIiIkRvZXMgbm90aGluZyIiIgotCi0gICAgICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKLSAgICAgICAgICAgICIiIkdldCB0aGUgc3RyaW5nIHZhbHVlLgotCi0gICAgICAgICAgICBJZiB1c2VfcG9zIGlzIHNwZWNpZmllZCBhbmQgaXMgYSB0cnVlIHZhbHVlLCB0aGVuIHRoZQotICAgICAgICAgICAgc3RyaW5nIHJldHVybmVkIHdpbGwgaW5jbHVkZSBvbmx5IHRoZSB0ZXh0IHVwIHRvIHRoZQotICAgICAgICAgICAgY3VycmVudCBmaWxlIHBvc2l0aW9uLgotICAgICAgICAgICAgIiIiCi0KLSAgICAgICAgZGVmIGlzYXR0eShzZWxmKToKLSAgICAgICAgICAgICIiIkFsd2F5cyByZXR1cm5zIEZhbHNlIiIiCi0KLSAgICAgICAgZGVmIHJlYWQoc2VsZiwgcyk6Ci0gICAgICAgICAgICAiIiJSZXR1cm4gcyBjaGFyYWN0ZXJzIG9yIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcuIiIiCi0gICAgICAgIHJlYWQucHlhcmcgPSAifGkiCi0KLSAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgICAgICAgICAgIiIiUmVhZCBvbmUgbGluZS4iIiIKLQotICAgICAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIGhpbnQpOgotICAgICAgICAgICAgIiIiUmVhZCBhbGwgbGluZXMuIiIiCi0gICAgICAgIHJlYWRsaW5lcy5weWFyZyA9ICJ8aSIKLQotICAgICAgICBkZWYgcmVzZXQoc2VsZik6Ci0gICAgICAgICAgICAiIiJSZXNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nLiIiIgotCi0gICAgICAgIGRlZiB0ZWxsKHNlbGYpOgotICAgICAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uLiIiIgotCi0gICAgICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3MpOgotICAgICAgICAgICAgIiIiVHJ1bmNhdGUgdGhlIGZpbGUgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uIiIiCi0gICAgICAgIHRydW5jYXRlLnB5YXJnID0gInxpIgotCi0gICAgICAgIGRlZiBzZWVrKHNlbGYsIHBvc2l0aW9uLCBtb2RlPTApOgotICAgICAgICAgICAgIiIiU2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotCi0gICAgICAgICAgICBUaGUgb3B0aW9uYWwgbW9kZSBhcmd1bWVudCBjYW4gYmUgMCBmb3IgYWJzb2x1dGUsIDEgZm9yIHJlbGF0aXZlLAotICAgICAgICAgICAgYW5kIDIgZm9yIHJlbGF0aXZlIHRvIEVPRi4gIFRoZSBkZWZhdWx0IGlzIGFic29sdXRlLgotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlZWsucHlhcmcgPSAiaXxpIgotCi0gICAgICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgICAgIHBhc3MKLQotICAgIGNsYXNzIE91dHB1dFR5cGUoSW5wdXRUeXBlKToKLSAgICAgICAgIlNpbXBsZSB0eXBlIGZvciBvdXRwdXQgc3RyaW5ncy4iCi0KLSAgICAgICAgYWJicmV2ID0gIm91dHB1dCIKLQotICAgICAgICBzdHJ1Y3QgPSAiIiJcCi0gICAgICAgIHR5cGVkZWYgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdF9IRUFECi0gICAgICAgICAgICAgICAgY2hhciAqYnVmOwotICAgICAgICAgICAgICAgIGludCBwb3M7Ci0gICAgICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgaW50IHNvZnRzcGFjZTsKLSAgICAgICAgfSBPdXRwdXRPYmplY3Q7Ci0gICAgICAgICIiIgotCi0gICAgICAgIHNvZnRzcGFjZSA9IG1lbWJlcigpCi0KLSAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICAgICAgIiIiRXhwbGljaXRseSByZWxlYXNlIHJlc291cmNlcy4iIiIKLQotICAgICAgICBkZWYgd3JpdGUoc2VsZiwgcyk6Ci0gICAgICAgICAgICAiIiJXcml0ZSBhIHN0cmluZyB0byB0aGUgZmlsZS4iIiIKLSAgICAgICAgICAgICMgWFhYIEhhY2s6IHdyaXRpbmcgTm9uZSByZXNldHMgdGhlIGJ1ZmZlcgotCi0gICAgICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVzKToKLSAgICAgICAgICAgICIiIldyaXRlIGVhY2ggc3RyaW5nIGluIGxpbmVzLiIiIgotCi0KLWNTdHJpbmdJTy5nZW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9fX2luaXRfXy5weSBiL1Rvb2xzL2ZyYW1lci9mcmFtZXIvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4ZjkwNTguLjAwMDAwMDAKLS0tIGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIiIiQSB0b29sIHRvIGdlbmVyYXRlIGJhc2ljIGZyYW1ld29yayBmb3IgQyBleHRlbnNpb24gdHlwZXMuCi0KLVRoZSBiYXNpYyBpZGVhcyBpcyB0aGUgc2FtZSBhcyBtb2R1bGF0b3IsIGJ1dCB0aGUgY29kZSBnZW5lcmF0ZXMgY29kZQotdXNpbmcgbWFueSBvZiB0aGUgbmV3IGZlYXR1cmVzIGludHJvZHVjZWQgaW4gUHl0aG9uIDIuMi4gIEl0IGFsc28KLXRha2VzIGEgbW9yZSBkZWNsYXJhdGl2ZSBhcHByb2FjaCB0byBnZW5lcmF0aW5nIGNvZGUuCi0iIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyYW1lci9mcmFtZXIvYmFzZXMucHkgYi9Ub29scy9mcmFtZXIvZnJhbWVyL2Jhc2VzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGFhY2I5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL2ZyYW1lci9mcmFtZXIvYmFzZXMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotIiIiUHJvdmlkZXMgdGhlIE1vZHVsZSBhbmQgVHlwZSBiYXNlIGNsYXNzZXMgdGhhdCB1c2VyIGNvZGUgaW5oZXJpdHMgZnJvbS4iIiIKLQotX19hbGxfXyA9IFsiTW9kdWxlIiwgIlR5cGUiLCAibWVtYmVyIl0KLQotZnJvbSBmcmFtZXIgaW1wb3J0IHN0cnVjdCwgdGVtcGxhdGUKLWZyb20gZnJhbWVyLmZ1bmN0aW9uIGltcG9ydCBGdW5jdGlvbiwgTWV0aG9kCi1mcm9tIGZyYW1lci5tZW1iZXIgaW1wb3J0IG1lbWJlcgotZnJvbSBmcmFtZXIuc2xvdHMgaW1wb3J0ICoKLWZyb20gZnJhbWVyLnV0aWwgaW1wb3J0IGNzdHJpbmcsIHVuaW5kZW50Ci0KLWZyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZQotCi0jIFRoZSBNb2R1bGUgYW5kIFR5cGUgY2xhc3NlcyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgbWV0YWNsYXNzZXMsCi0jIGJlY2F1c2UgbW9zdCBvZiB0aGUgbWV0aG9kcyBhcmUgY2xhc3MgbWV0aG9kcy4gIEl0IGlzIGVhc2llciB0byB1c2UKLSMgbWV0YWNsYXNzZXMgdGhhbiB0aGUgY3VtYmVyc29tZSBjbGFzc21ldGhvZCgpIGJ1aWx0aW4uICBUaGV5IGhhdmUKLSMgY2xhc3MgbWV0aG9kcyBiZWNhdXNlIHRoZXkgYXJlIGV4cG9zZWQgdG8gdXNlciBjb2RlIGFzIGJhc2UgY2xhc3Nlcy4KLQotY2xhc3MgQmFzZU1ldGFjbGFzcyh0eXBlKToKLSAgICAiIiJTaGFyZWQgaW5mcmFzdHJ1Y3R1cmUgZm9yIGdlbmVyYXRpbmcgbW9kdWxlcyBhbmQgdHlwZXMuIiIiCi0KLSAgICAjIGp1c3QgbWV0aG9kZGVmIHNvIGZhcgotCi0gICAgZGVmIGR1bXBfbWV0aG9kZGVmKHNlbGYsIGYsIGZ1bmN0aW9ucywgdmFycyk6Ci0gICAgICAgIGRlZiBwKHRlbXBsLCB2YXJzPXZhcnMpOiAjIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvdXRwdXQKLSAgICAgICAgICAgIHByaW50KHRlbXBsICUgdmFycywgZmlsZT1mKQotCi0gICAgICAgIGlmIG5vdCBmdW5jdGlvbnM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcCh0ZW1wbGF0ZS5tZXRob2RkZWZfc3RhcnQpCi0gICAgICAgIGZvciBuYW1lLCBmdW5jIGluIHNvcnRlZChmdW5jdGlvbnMuaXRlbXMoKSk6Ci0gICAgICAgICAgICBpZiBmdW5jLl9fZG9jX186Ci0gICAgICAgICAgICAgICAgcCh0ZW1wbGF0ZS5tZXRob2RkZWZfZGVmX2RvYywgZnVuYy52YXJzKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwKHRlbXBsYXRlLm1ldGhvZGRlZl9kZWYsIGZ1bmMudmFycykKLSAgICAgICAgcCh0ZW1wbGF0ZS5tZXRob2RkZWZfZW5kKQotCi1jbGFzcyBNb2R1bGVNZXRhY2xhc3MoQmFzZU1ldGFjbGFzcyk6Ci0gICAgIiIiUHJvdmlkZXMgbWV0aG9kcyBmb3IgTW9kdWxlIGNsYXNzLiIiIgotCi0gICAgZGVmIGdlbihzZWxmKToKLSAgICAgICAgc2VsZi5hbmFseXplKCkKLSAgICAgICAgc2VsZi5pbml0dmFycygpCi0gICAgICAgIGYgPSBvcGVuKHNlbGYuX19maWxlbmFtZSwgInciKQotICAgICAgICBzZWxmLmR1bXAoZikKLSAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBkZWYgYW5hbHl6ZShzZWxmKToKLSAgICAgICAgc2VsZi5uYW1lID0gZ2V0YXR0cihzZWxmLCAiYWJicmV2Iiwgc2VsZi5fX25hbWVfXykKLSAgICAgICAgc2VsZi5fX2Z1bmN0aW9ucyA9IHt9Ci0gICAgICAgIHNlbGYuX190eXBlcyA9IHt9Ci0gICAgICAgIHNlbGYuX19tZW1iZXJzID0gRmFsc2UKLQotICAgICAgICBmb3IgbmFtZSwgb2JqIGluIHNlbGYuX19kaWN0X18uaXRlbXMoKToKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBGdW5jdGlvblR5cGUpOgotICAgICAgICAgICAgICAgIHNlbGYuX19mdW5jdGlvbnNbbmFtZV0gPSBGdW5jdGlvbihvYmosIHNlbGYpCi0gICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBUeXBlTWV0YWNsYXNzKToKLSAgICAgICAgICAgICAgICBvYmouX1R5cGVNZXRhY2xhc3NfX21vZHVsZSA9IHNlbGYubmFtZQotICAgICAgICAgICAgICAgIG9iai5hbmFseXplKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9fdHlwZXNbbmFtZV0gPSBvYmoKLSAgICAgICAgICAgICAgICBpZiBvYmouaGFzX21lbWJlcnMoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fX21lbWJlcnMgPSBUcnVlCi0KLSAgICBkZWYgaW5pdHZhcnMoc2VsZik6Ci0gICAgICAgIHYgPSBzZWxmLl9fdmFycyA9IHt9Ci0gICAgICAgIGZpbGVuYW1lID0gZ2V0YXR0cihzZWxmLCAiX19maWxlX18iLCBOb25lKQotICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgotICAgICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLl9fbmFtZV9fICsgIm1vZHVsZS5jIgotICAgICAgICBzZWxmLl9fZmlsZW5hbWUgPSB2WyJGaWxlTmFtZSJdID0gZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IHZbIk1vZHVsZU5hbWUiXSA9IHNlbGYuX19uYW1lX18KLSAgICAgICAgdlsiTWV0aG9kRGVmTmFtZSJdID0gIiVzX21ldGhvZHMiICUgbmFtZQotICAgICAgICB2WyJNb2R1bGVEb2NzdHJpbmciXSA9IGNzdHJpbmcodW5pbmRlbnQoc2VsZi5fX2RvY19fKSkKLQotICAgIGRlZiBkdW1wKHNlbGYsIGYpOgotICAgICAgICBkZWYgcCh0ZW1wbCwgdmFycz1zZWxmLl9fdmFycyk6ICMgaGVscGVyIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIG91dHB1dAotICAgICAgICAgICAgcHJpbnQodGVtcGwgJSB2YXJzLCBmaWxlPWYpCi0KLSAgICAgICAgcCh0ZW1wbGF0ZS5tb2R1bGVfc3RhcnQpCi0gICAgICAgIGlmIHNlbGYuX19tZW1iZXJzOgotICAgICAgICAgICAgcCh0ZW1wbGF0ZS5tZW1iZXJfaW5jbHVkZSkKLSAgICAgICAgcHJpbnQoZmlsZT1mKQotCi0gICAgICAgIGlmIHNlbGYuX19kb2NfXzoKLSAgICAgICAgICAgIHAodGVtcGxhdGUubW9kdWxlX2RvYykKLQotICAgICAgICBmb3IgbmFtZSwgdHlwZSBpbiBzb3J0ZWQoc2VsZi5fX3R5cGVzLml0ZW1zKCkpOgotICAgICAgICAgICAgdHlwZS5kdW1wKGYpCi0KLSAgICAgICAgZm9yIG5hbWUsIGZ1bmMgIGluIHNvcnRlZChzZWxmLl9fZnVuY3Rpb25zLml0ZW1zKCkpOgotICAgICAgICAgICAgZnVuYy5kdW1wKGYpCi0KLSAgICAgICAgc2VsZi5kdW1wX21ldGhvZGRlZihmLCBzZWxmLl9fZnVuY3Rpb25zLCBzZWxmLl9fdmFycykKLQotICAgICAgICBwKHRlbXBsYXRlLm1vZHVsZV9pbml0X3N0YXJ0KQotICAgICAgICBmb3IgbmFtZSwgdHlwZSBpbiBzb3J0ZWQoc2VsZi5fX3R5cGVzLml0ZW1zKCkpOgotICAgICAgICAgICAgdHlwZS5kdW1wX2luaXQoZikKLQotICAgICAgICBwKCJ9IikKLQotY2xhc3MgTW9kdWxlKG1ldGFjbGFzcz1Nb2R1bGVNZXRhY2xhc3MpOgotICAgIHBhc3MKLQotY2xhc3MgVHlwZU1ldGFjbGFzcyhCYXNlTWV0YWNsYXNzKToKLQotICAgIGRlZiBkdW1wKHNlbGYsIGYpOgotICAgICAgICBzZWxmLmluaXR2YXJzKCkKLQotICAgICAgICAjIGRlZmluZWQgYWZ0ZXIgaW5pdHZhcnMoKSBzbyB0aGF0IF9fdmFycyBpcyBkZWZpbmVkCi0gICAgICAgIGRlZiBwKHRlbXBsLCB2YXJzPXNlbGYuX192YXJzKToKLSAgICAgICAgICAgIHByaW50KHRlbXBsICUgdmFycywgZmlsZT1mKQotCi0gICAgICAgIGlmIHNlbGYuc3RydWN0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJpbnQodW5pbmRlbnQoc2VsZi5zdHJ1Y3QsIEZhbHNlKSwgZmlsZT1mKQotCi0gICAgICAgIGlmIHNlbGYuX19kb2NfXzoKLSAgICAgICAgICAgIHAodGVtcGxhdGUuZG9jc3RyaW5nKQotCi0gICAgICAgIGZvciBuYW1lLCBmdW5jIGluIHNvcnRlZChzZWxmLl9fbWV0aG9kcy5pdGVtcygpKToKLSAgICAgICAgICAgIGZ1bmMuZHVtcChmKQotCi0gICAgICAgIHNlbGYuZHVtcF9tZXRob2RkZWYoZiwgc2VsZi5fX21ldGhvZHMsIHNlbGYuX192YXJzKQotICAgICAgICBzZWxmLmR1bXBfbWVtYmVyZGVmKGYpCi0gICAgICAgIHNlbGYuZHVtcF9zbG90cyhmKQotCi0gICAgZGVmIGhhc19tZW1iZXJzKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fbWVtYmVyczoKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgIGRlZiBhbmFseXplKHNlbGYpOgotICAgICAgICAjIGNhbGxlZCBieSBNb2R1bGVNZXRhY2xhc3MgYW5hbHl6ZSgpCi0gICAgICAgIHNlbGYubmFtZSA9IGdldGF0dHIoc2VsZiwgImFiYnJldiIsIHNlbGYuX19uYW1lX18pCi0gICAgICAgIHNyYyA9IGdldGF0dHIoc2VsZiwgInN0cnVjdCIsIE5vbmUpCi0gICAgICAgIGlmIHNyYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX19zdHJ1Y3QgPSBzdHJ1Y3QucGFyc2Uoc3JjKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fX3N0cnVjdCA9IE5vbmUKLSAgICAgICAgc2VsZi5fX21ldGhvZHMgPSB7fQotICAgICAgICBzZWxmLl9fbWVtYmVycyA9IHt9Ci0gICAgICAgIGZvciBjbHMgaW4gc2VsZi5fX21yb19fOgotICAgICAgICAgICAgZm9yIGssIHYgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCBGdW5jdGlvblR5cGUpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbWV0aG9kc1trXSA9IE1ldGhvZCh2LCBzZWxmKQotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgbWVtYmVyKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fX21lbWJlcnNba10gPSB2Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCBzZWxmLl9fc3RydWN0IGlzIG5vdCBOb25lCi0gICAgICAgICAgICAgICAgICAgIHYucmVnaXN0ZXIoaywgc2VsZi5fX3N0cnVjdCkKLSAgICAgICAgc2VsZi5hbmFseXplX3Nsb3RzKCkKLQotICAgIGRlZiBhbmFseXplX3Nsb3RzKHNlbGYpOgotICAgICAgICBzZWxmLl9fc2xvdHMgPSB7fQotICAgICAgICBmb3IgcyBpbiBTbG90czoKLSAgICAgICAgICAgIGlmIHMuc3BlY2lhbCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBtZXRoID0gc2VsZi5fX21ldGhvZHMuZ2V0KHMuc3BlY2lhbCkKLSAgICAgICAgICAgICAgICBpZiBtZXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9fc2xvdHNbc10gPSBtZXRoCi0gICAgICAgIHNlbGYuX19zbG90c1tUUF9OQU1FXSA9ICciJXMuJXMiJyAlIChzZWxmLl9fbW9kdWxlLCBzZWxmLl9fbmFtZV9fKQotICAgICAgICBpZiBzZWxmLl9fZG9jX186Ci0gICAgICAgICAgICBzZWxmLl9fc2xvdHNbVFBfRE9DXSA9ICIlc19kb2MiICUgc2VsZi5uYW1lCi0gICAgICAgIGlmIHNlbGYuX19zdHJ1Y3QgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9fc2xvdHNbVFBfQkFTSUNTSVpFXSA9ICJzaXplb2YoJXMpIiAlIHNlbGYuX19zdHJ1Y3QubmFtZQotICAgICAgICAgICAgc2VsZi5fX3Nsb3RzW1RQX0RFQUxMT0NdID0gIiVzX2RlYWxsb2MiICUgc2VsZi5uYW1lCi0gICAgICAgIGlmIHNlbGYuX19tZXRob2RzOgotICAgICAgICAgICAgc2VsZi5fX3Nsb3RzW1RQX01FVEhPRFNdID0gIiVzX21ldGhvZHMiICUgc2VsZi5uYW1lCi0gICAgICAgIGlmIHNlbGYuX19tZW1iZXJzOgotICAgICAgICAgICAgc2VsZi5fX3Nsb3RzW1RQX01FTUJFUlNdID0gIiVzX21lbWJlcnMiICUgc2VsZi5uYW1lCi0KLSAgICBkZWYgaW5pdHZhcnMoc2VsZik6Ci0gICAgICAgIHYgPSBzZWxmLl9fdmFycyA9IHt9Ci0gICAgICAgIHZbIlR5cGVOYW1lIl0gPSBzZWxmLl9fbmFtZV9fCi0gICAgICAgIHZbIkNUeXBlTmFtZSJdID0gIlB5JXNfVHlwZSIgJSBzZWxmLl9fbmFtZV9fCi0gICAgICAgIHZbIk1ldGhvZERlZk5hbWUiXSA9IHNlbGYuX19zbG90c1tUUF9NRVRIT0RTXQotICAgICAgICBpZiBzZWxmLl9fZG9jX186Ci0gICAgICAgICAgICB2WyJEb2NzdHJpbmdWYXIiXSA9IHNlbGYuX19zbG90c1tUUF9ET0NdCi0gICAgICAgICAgICB2WyJEb2NzdHJpbmciXSA9IGNzdHJpbmcodW5pbmRlbnQoc2VsZi5fX2RvY19fKSkKLSAgICAgICAgaWYgc2VsZi5fX3N0cnVjdCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHZbIlN0cnVjdE5hbWUiXSA9IHNlbGYuX19zdHJ1Y3QubmFtZQotICAgICAgICBpZiBzZWxmLl9fbWVtYmVyczoKLSAgICAgICAgICAgIHZbIk1lbWJlckRlZk5hbWUiXSA9IHNlbGYuX19zbG90c1tUUF9NRU1CRVJTXQotCi0gICAgZGVmIGR1bXBfbWVtYmVyZGVmKHNlbGYsIGYpOgotICAgICAgICBkZWYgcCh0ZW1wbCwgdmFycz1zZWxmLl9fdmFycyk6Ci0gICAgICAgICAgICBwcmludCh0ZW1wbCAlIHZhcnMsIGZpbGU9ZikKLQotICAgICAgICBpZiBub3Qgc2VsZi5fX21lbWJlcnM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgcCh0ZW1wbGF0ZS5tZW1iZXJkZWZfc3RhcnQpCi0gICAgICAgIGZvciBuYW1lLCBzbG90IGluIHNvcnRlZChzZWxmLl9fbWVtYmVycy5pdGVtcygpKToKLSAgICAgICAgICAgIHNsb3QuZHVtcChmKQotICAgICAgICBwKHRlbXBsYXRlLm1lbWJlcmRlZl9lbmQpCi0KLSAgICBkZWYgZHVtcF9zbG90cyhzZWxmLCBmKToKLSAgICAgICAgZGVmIHAodGVtcGwsIHZhcnM9c2VsZi5fX3ZhcnMpOgotICAgICAgICAgICAgcHJpbnQodGVtcGwgJSB2YXJzLCBmaWxlPWYpCi0KLSAgICAgICAgaWYgc2VsZi5zdHJ1Y3Q6Ci0gICAgICAgICAgICBwKHRlbXBsYXRlLmRlYWxsb2NfZnVuYywgeyJuYW1lIiA6IHNlbGYuX19zbG90c1tUUF9ERUFMTE9DXX0pCi0KLSAgICAgICAgcCh0ZW1wbGF0ZS50eXBlX3N0cnVjdF9zdGFydCkKLSAgICAgICAgZm9yIHMgaW4gU2xvdHNbOi01XTogIyBYWFgKLSAgICAgICAgICAgIHZhbCA9IHNlbGYuX19zbG90cy5nZXQocywgcy5kZWZhdWx0KQotICAgICAgICAgICAgbnRhYnMgPSA0IC0gKDQgKyBsZW4odmFsKSkgLyA4Ci0gICAgICAgICAgICBsaW5lID0gIiAgICAgICAgJXMsJXMvKiAlcyAqLyIgJSAodmFsLCAiXHQiICogbnRhYnMsIHMubmFtZSkKLSAgICAgICAgICAgIHByaW50KGxpbmUsIGZpbGU9ZikKLSAgICAgICAgcCh0ZW1wbGF0ZS50eXBlX3N0cnVjdF9lbmQpCi0KLSAgICBkZWYgZHVtcF9pbml0KHNlbGYsIGYpOgotICAgICAgICBkZWYgcCh0ZW1wbCk6Ci0gICAgICAgICAgICBwcmludCh0ZW1wbCAlIHNlbGYuX192YXJzLCBmaWxlPWYpCi0KLSAgICAgICAgcCh0ZW1wbGF0ZS50eXBlX2luaXRfdHlwZSkKLSAgICAgICAgcCh0ZW1wbGF0ZS5tb2R1bGVfYWRkX3R5cGUpCi0KLWNsYXNzIFR5cGUobWV0YWNsYXNzPVR5cGVNZXRhY2xhc3MpOgotICAgIHBhc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyYW1lci9mcmFtZXIvZnVuY3Rpb24ucHkgYi9Ub29scy9mcmFtZXIvZnJhbWVyL2Z1bmN0aW9uLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTVlYTIwLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2ZyYW1lci9mcmFtZXIvZnVuY3Rpb24ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotIiIiRnVuY3Rpb25zLiIiIgotCi1mcm9tIGZyYW1lciBpbXBvcnQgdGVtcGxhdGUKLWZyb20gZnJhbWVyLnV0aWwgaW1wb3J0IGNzdHJpbmcsIHVuaW5kZW50Ci0KLU1FVEhfTyA9ICJNRVRIX08iCi1NRVRIX05PQVJHUyA9ICJNRVRIX05PQVJHUyIKLU1FVEhfVkFSQVJHUyA9ICJNRVRIX1ZBUkFSR1MiCi0KLWRlZiBwYXJzZWZtdChmbXQpOgotICAgIGZvciBjIGluIGZtdDoKLSAgICAgICAgaWYgYyA9PSAnfCc6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICB5aWVsZCBjCi0KLWNsYXNzIEFyZ3VtZW50OgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuY3R5cGUgPSAiUHlPYmplY3QgKiIKLSAgICAgICAgc2VsZi5kZWZhdWx0ID0gTm9uZQotCi0gICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiJXMlcyIgJSAoc2VsZi5jdHlwZSwgc2VsZi5uYW1lKQotCi0gICAgZGVmIHNldGZtdChzZWxmLCBjb2RlKToKLSAgICAgICAgc2VsZi5jdHlwZSA9IHNlbGYuX2NvZGVzW2NvZGVdCi0gICAgICAgIGlmIHNlbGYuY3R5cGVbLTFdICE9ICIqIjoKLSAgICAgICAgICAgIHNlbGYuY3R5cGUgKz0gIiAiCi0KLSAgICBfY29kZXMgPSB7Ik8iOiAiUHlPYmplY3QgKiIsCi0gICAgICAgICAgICAgICJpIjogImludCIsCi0gICAgICAgICAgICAgIH0KLQotICAgIGRlZiBkZWNsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmRlZmF1bHQgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzdHIoc2VsZikgKyAiOyIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiJXMgPSAlczsiICUgKHNlbGYsIHNlbGYuZGVmYXVsdCkKLQotY2xhc3MgX0FyZ3VtZW50TGlzdChvYmplY3QpOgotCi0gICAgIyB0aGVzZSBpbnN0YW5jZSB2YXJpYWJsZXMgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJ5IHN1YmNsYXNzZXMKLSAgICBtbF9tZXRoID0gTm9uZQotICAgIGZtdCA9IE5vbmUKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzKToKLSAgICAgICAgc2VsZi5hcmdzID0gbGlzdChtYXAoQXJndW1lbnQsIGFyZ3MpKQotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5hcmdzKQotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGkpOgotICAgICAgICByZXR1cm4gc2VsZi5hcmdzW2ldCi0KLSAgICBkZWYgZHVtcF9kZWNscyhzZWxmLCBmKToKLSAgICAgICAgcGFzcwotCi1jbGFzcyBOb0FyZ3MoX0FyZ3VtZW50TGlzdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncyk6Ci0gICAgICAgIGFzc2VydCBsZW4oYXJncykgPT0gMAotICAgICAgICBzdXBlcihOb0FyZ3MsIHNlbGYpLl9faW5pdF9fKGFyZ3MpCi0gICAgICAgIHNlbGYubWxfbWV0aCA9IE1FVEhfTk9BUkdTCi0KLSAgICBkZWYgY19hcmdzKHNlbGYpOgotICAgICAgICByZXR1cm4gIlB5T2JqZWN0ICpzZWxmIgotCi1jbGFzcyBPbmVBcmcoX0FyZ3VtZW50TGlzdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncyk6Ci0gICAgICAgIGFzc2VydCBsZW4oYXJncykgPT0gMQotICAgICAgICBzdXBlcihPbmVBcmcsIHNlbGYpLl9faW5pdF9fKGFyZ3MpCi0gICAgICAgIHNlbGYubWxfbWV0aCA9IE1FVEhfTwotCi0gICAgZGVmIGNfYXJncyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJQeU9iamVjdCAqc2VsZiwgJXMiICUgc2VsZi5hcmdzWzBdCi0KLWNsYXNzIFZhckFyZ3MoX0FyZ3VtZW50TGlzdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXJncywgZm10PU5vbmUpOgotICAgICAgICBzdXBlcihWYXJBcmdzLCBzZWxmKS5fX2luaXRfXyhhcmdzKQotICAgICAgICBzZWxmLm1sX21ldGggPSBNRVRIX1ZBUkFSR1MKLSAgICAgICAgaWYgZm10IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5mbXQgPSBmbXQKLSAgICAgICAgICAgIGkgPSAwCi0gICAgICAgICAgICBmb3IgY29kZSBpbiBwYXJzZWZtdChmbXQpOgotICAgICAgICAgICAgICAgIHNlbGYuYXJnc1tpXS5zZXRmbXQoY29kZSkKLSAgICAgICAgICAgICAgICBpICs9IDEKLQotICAgIGRlZiBjX2FyZ3Moc2VsZik6Ci0gICAgICAgIHJldHVybiAiUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzIgotCi0gICAgZGVmIHRhcmdldHMoc2VsZik6Ci0gICAgICAgIHJldHVybiAiLCAiLmpvaW4oWyImJXMiICUgYS5uYW1lIGZvciBhIGluIHNlbGYuYXJnc10pCi0KLSAgICBkZWYgZHVtcF9kZWNscyhzZWxmLCBmKToKLSAgICAgICAgZm9yIGEgaW4gc2VsZi5hcmdzOgotICAgICAgICAgICAgcHJpbnQoIiAgICAgICAgJXMiICUgYS5kZWNsKCksIGZpbGU9ZikKLQotZGVmIEFyZ3VtZW50TGlzdChmdW5jLCBtZXRob2QpOgotICAgIGNvZGUgPSBmdW5jLl9fY29kZV9fCi0gICAgYXJncyA9IGNvZGUuY29fdmFybmFtZXNbOmNvZGUuY29fYXJnY291bnRdCi0gICAgaWYgbWV0aG9kOgotICAgICAgICBhcmdzID0gYXJnc1sxOl0KLSAgICBweWFyZyA9IGdldGF0dHIoZnVuYywgInB5YXJnIiwgTm9uZSkKLSAgICBpZiBweWFyZyBpcyBub3QgTm9uZToKLSAgICAgICAgYXJncyA9IFZhckFyZ3MoYXJncywgcHlhcmcpCi0gICAgICAgIGlmIGZ1bmMuX19kZWZhdWx0c19fOgotICAgICAgICAgICAgTCA9IGxpc3QoZnVuYy5fX2RlZmF1bHRzX18pCi0gICAgICAgICAgICBuZGVmYXVsdCA9IGxlbihMKQotICAgICAgICAgICAgaSA9IGxlbihhcmdzKSAtIG5kZWZhdWx0Ci0gICAgICAgICAgICB3aGlsZSBMOgotICAgICAgICAgICAgICAgIGFyZ3NbaV0uZGVmYXVsdCA9IEwucG9wKDApCi0gICAgICAgIHJldHVybiBhcmdzCi0gICAgZWxzZToKLSAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gTm9BcmdzKGFyZ3MpCi0gICAgICAgIGVsaWYgbGVuKGFyZ3MpID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gT25lQXJnKGFyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVmFyQXJncyhhcmdzKQotCi1jbGFzcyBGdW5jdGlvbjoKLQotICAgIG1ldGhvZCA9IEZhbHNlCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgcGFyZW50KToKLSAgICAgICAgc2VsZi5fZnVuYyA9IGZ1bmMKLSAgICAgICAgc2VsZi5fcGFyZW50ID0gcGFyZW50Ci0gICAgICAgIHNlbGYuYW5hbHl6ZSgpCi0gICAgICAgIHNlbGYuaW5pdHZhcnMoKQotCi0gICAgZGVmIGR1bXAoc2VsZiwgZik6Ci0gICAgICAgIGRlZiBwKHRlbXBsLCB2YXJzPU5vbmUpOiAjIGhlbHBlciBmdW5jdGlvbiB0byBnZW5lcmF0ZSBvdXRwdXQKLSAgICAgICAgICAgIGlmIHZhcnMgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB2YXJzID0gc2VsZi52YXJzCi0gICAgICAgICAgICBwcmludCh0ZW1wbCAlIHZhcnMsIGZpbGU9ZikKLQotICAgICAgICBpZiBzZWxmLl9fZG9jX186Ci0gICAgICAgICAgICBwKHRlbXBsYXRlLmRvY3N0cmluZykKLQotICAgICAgICBkID0geyJuYW1lIiA6IHNlbGYudmFyc1siQ05hbWUiXSwKLSAgICAgICAgICAgICAiYXJncyIgOiBzZWxmLmFyZ3MuY19hcmdzKCksCi0gICAgICAgICAgICAgfQotICAgICAgICBwKHRlbXBsYXRlLmZ1bmNkZWZfc3RhcnQsIGQpCi0KLSAgICAgICAgc2VsZi5hcmdzLmR1bXBfZGVjbHMoZikKLQotICAgICAgICBpZiBzZWxmLmFyZ3MubWxfbWV0aCA9PSBNRVRIX1ZBUkFSR1M6Ci0gICAgICAgICAgICBwKHRlbXBsYXRlLnZhcmFyZ3MpCi0KLSAgICAgICAgcCh0ZW1wbGF0ZS5mdW5jZGVmX2VuZCkKLQotICAgIGRlZiBhbmFseXplKHNlbGYpOgotICAgICAgICBzZWxmLl9fZG9jX18gPSBzZWxmLl9mdW5jLl9fZG9jX18KLSAgICAgICAgc2VsZi5hcmdzID0gQXJndW1lbnRMaXN0KHNlbGYuX2Z1bmMsIHNlbGYubWV0aG9kKQotCi0gICAgZGVmIGluaXR2YXJzKHNlbGYpOgotICAgICAgICB2ID0gc2VsZi52YXJzID0ge30KLSAgICAgICAgdlsiUHl0aG9uTmFtZSJdID0gc2VsZi5fZnVuYy5fX25hbWVfXwotICAgICAgICBzID0gdlsiQ05hbWUiXSA9ICIlc18lcyIgJSAoc2VsZi5fcGFyZW50Lm5hbWUsIHNlbGYuX2Z1bmMuX19uYW1lX18pCi0gICAgICAgIHZbIkRvY3N0cmluZ1ZhciJdID0gcyArICJfZG9jIgotICAgICAgICB2WyJNZXRoVHlwZSJdID0gc2VsZi5hcmdzLm1sX21ldGgKLSAgICAgICAgaWYgc2VsZi5fX2RvY19fOgotICAgICAgICAgICAgdlsiRG9jc3RyaW5nIl0gPSBjc3RyaW5nKHVuaW5kZW50KHNlbGYuX19kb2NfXykpCi0gICAgICAgIGlmIHNlbGYuYXJncy5mbXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2WyJBcmdQYXJzZSJdID0gc2VsZi5hcmdzLmZtdAotICAgICAgICAgICAgdlsiQXJnVGFyZ2V0cyJdID0gc2VsZi5hcmdzLnRhcmdldHMoKQotCi1jbGFzcyBNZXRob2QoRnVuY3Rpb24pOgotCi0gICAgbWV0aG9kID0gVHJ1ZQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9tZW1iZXIucHkgYi9Ub29scy9mcmFtZXIvZnJhbWVyL21lbWJlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDgzOGMxZi4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvZnJhbWVyL21lbWJlci5weQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLWZyb20gZnJhbWVyIGltcG9ydCB0ZW1wbGF0ZQotZnJvbSBmcmFtZXIudXRpbCBpbXBvcnQgY3N0cmluZywgdW5pbmRlbnQKLQotVF9TSE9SVCA9ICJUX1NIT1JUIgotVF9JTlQgPSAiVF9JTlQiCi1UX0xPTkcgPSAiVF9MT05HIgotVF9GTE9BVCA9ICJUX0ZMT0FUIgotVF9ET1VCTEUgPSAiVF9ET1VCTEUiCi1UX1NUUklORyA9ICJUX1NUUklORyIKLVRfT0JKRUNUID0gIlRfT0JKRUNUIgotVF9DSEFSID0gIlRfQ0hBUiIKLVRfQllURSA9ICJUX0JZVEUiCi1UX1VCWVRFID0gIlRfVUJZVEUiCi1UX1VJTlQgPSAiVF9VSU5UIgotVF9VTE9ORyA9ICJUX1VMT05HIgotVF9TVFJJTkdfSU5QTEFDRSA9ICJUX1NUUklOR19JTlBMQUNFIgotVF9PQkpFQ1RfRVggPSAiVF9PQkpFQ1RfRVgiCi0KLVJPID0gUkVBRE9OTFkgPSAiUkVBRE9OTFkiCi1SRUFEX1JFU1RSSUNURUQgPSAiUkVBRF9SRVNUUklDVEVEIgotV1JJVEVfUkVTVFJJQ1RFRCA9ICJXUklURV9SRVNUUklDVEVEIgotUkVTVFJJQ1QgPSAiUkVTVFJJQ1RFRCIKLQotYzJ0ID0geyJpbnQiIDogVF9JTlQsCi0gICAgICAgInVuc2lnbmVkIGludCIgOiBUX1VJTlQsCi0gICAgICAgImxvbmciIDogVF9MT05HLAotICAgICAgICJ1bnNpZ25lZCBsb25nIiA6IFRfTE9ORywKLSAgICAgICAiZmxvYXQiIDogVF9GTE9BVCwKLSAgICAgICAiZG91YmxlIiA6IFRfRE9VQkxFLAotICAgICAgICJjaGFyICoiIDogVF9DSEFSLAotICAgICAgICJQeU9iamVjdCAqIiA6IFRfT0JKRUNULAotICAgICAgIH0KLQotY2xhc3MgbWVtYmVyKG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgY25hbWU9Tm9uZSwgdHlwZT1Ob25lLCBmbGFncz1Ob25lLCBkb2M9Tm9uZSk6Ci0gICAgICAgIHNlbGYudHlwZSA9IHR5cGUKLSAgICAgICAgc2VsZi5mbGFncyA9IGZsYWdzCi0gICAgICAgIHNlbGYuY25hbWUgPSBjbmFtZQotICAgICAgICBzZWxmLmRvYyA9IGRvYwotICAgICAgICBzZWxmLm5hbWUgPSBOb25lCi0gICAgICAgIHNlbGYuc3RydWN0ID0gTm9uZQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG5hbWUsIHN0cnVjdCk6Ci0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5zdHJ1Y3QgPSBzdHJ1Y3QKLSAgICAgICAgc2VsZi5pbml0dmFycygpCi0KLSAgICBkZWYgaW5pdHZhcnMoc2VsZik6Ci0gICAgICAgIHYgPSBzZWxmLnZhcnMgPSB7fQotICAgICAgICB2WyJQeXRob25OYW1lIl0gPSBzZWxmLm5hbWUKLSAgICAgICAgaWYgc2VsZi5jbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHZbIkNOYW1lIl0gPSBzZWxmLmNuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2WyJDTmFtZSJdID0gc2VsZi5uYW1lCi0gICAgICAgIHZbIkZsYWdzIl0gPSBzZWxmLmZsYWdzIG9yICIwIgotICAgICAgICB2WyJUeXBlIl0gPSBzZWxmLmdldF90eXBlKCkKLSAgICAgICAgaWYgc2VsZi5kb2MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB2WyJEb2NzdHJpbmciXSA9IGNzdHJpbmcodW5pbmRlbnQoc2VsZi5kb2MpKQotICAgICAgICB2WyJTdHJ1Y3ROYW1lIl0gPSBzZWxmLnN0cnVjdC5uYW1lCi0KLSAgICBkZWYgZ2V0X3R5cGUoc2VsZik6Ci0gICAgICAgICIiIkRlZHVjZSB0eXBlIGNvZGUgZnJvbSBzdHJ1Y3Qgc3BlY2lmaWNhdGlvbiBpZiBub3QgZGVmaW5lZCIiIgotICAgICAgICBpZiBzZWxmLnR5cGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlCi0gICAgICAgIGN0eXBlID0gc2VsZi5zdHJ1Y3QuZ2V0X3R5cGUoc2VsZi5uYW1lKQotICAgICAgICByZXR1cm4gYzJ0W2N0eXBlXQotCi0gICAgZGVmIGR1bXAoc2VsZiwgZik6Ci0gICAgICAgIGlmIHNlbGYuZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBwcmludCh0ZW1wbGF0ZS5tZW1iZXJkZWZfZGVmICUgc2VsZi52YXJzLCBmaWxlPWYpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCh0ZW1wbGF0ZS5tZW1iZXJkZWZfZGVmX2RvYyAlIHNlbGYudmFycywgZmlsZT1mKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9zbG90cy5weSBiL1Rvb2xzL2ZyYW1lci9mcmFtZXIvc2xvdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNmU2ZmUuLjAwMDAwMDAKLS0tIGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9zbG90cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSIiIkRlc2NyaXB0aW9ucyBvZiBhbGwgdGhlIHNsb3RzIGluIFB5dGhvbidzIHR5cGUgb2JqZWN0cy4iIiIKLQotY2xhc3MgU2xvdChvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBjYXN0PU5vbmUsIHNwZWNpYWw9Tm9uZSwgZGVmYXVsdD0iMCIpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuY2FzdCA9IGNhc3QKLSAgICAgICAgc2VsZi5zcGVjaWFsID0gc3BlY2lhbAotICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0Ci0KLVNsb3RzID0gKFNsb3QoIm9iX3NpemUiKSwKLSAgICAgICAgIFNsb3QoInRwX25hbWUiKSwKLSAgICAgICAgIFNsb3QoInRwX2Jhc2ljc2l6ZSIpLAotICAgICAgICAgU2xvdCgidHBfaXRlbXNpemUiKSwKLSAgICAgICAgIFNsb3QoInRwX2RlYWxsb2MiLCAiZGVzdHJ1Y3RvciIpLAotICAgICAgICAgU2xvdCgidHBfcHJpbnQiLCAicHJpbnRmdW5jIiksCi0gICAgICAgICBTbG90KCJ0cF9nZXRhdHRyIiwgImdldGF0dHJmdW5jIiksCi0gICAgICAgICBTbG90KCJ0cF9zZXRhdHRyIiwgInNldGF0dHJmdW5jIiksCi0gICAgICAgICBTbG90KCJ0cF9yZXNlcnZlZCIsICJ2b2lkKiIpLAotICAgICAgICAgU2xvdCgidHBfcmVwciIsICJyZXByZnVuYyIsICJfX3JlcHJfXyIpLAotICAgICAgICAgU2xvdCgidHBfYXNfbnVtYmVyIiksCi0gICAgICAgICBTbG90KCJ0cF9hc19zZXF1ZW5jZSIpLAotICAgICAgICAgU2xvdCgidHBfYXNfbWFwcGluZyIpLAotICAgICAgICAgU2xvdCgidHBfaGFzaCIsICJoYXNoZnVuYyIsICJfX2hhc2hfXyIpLAotICAgICAgICAgU2xvdCgidHBfY2FsbCIsICJ0ZXJuYXJ5ZnVuYyIsICJfX2NhbGxfXyIpLAotICAgICAgICAgU2xvdCgidHBfc3RyIiwgInJlcHJmdW5jIiwgIl9fc3RyX18iKSwKLSAgICAgICAgIFNsb3QoInRwX2dldGF0dHJvIiwgImdldGF0dHJvZnVuYyIsICJfX2dldGF0dHJfXyIsICMgWFhYCi0gICAgICAgICAgICAgICJQeU9iamVjdF9HZW5lcmljR2V0QXR0ciIpLAotICAgICAgICAgU2xvdCgidHBfc2V0YXR0cm8iLCAic2V0YXR0cm9mdW5jIiwgIl9fc2V0YXR0cl9fIiksCi0gICAgICAgICBTbG90KCJ0cF9hc19idWZmZXIiKSwKLSAgICAgICAgIFNsb3QoInRwX2ZsYWdzIiwgZGVmYXVsdD0iUHlfVFBGTEFHU19ERUZBVUxUIiksCi0gICAgICAgICBTbG90KCJ0cF9kb2MiKSwKLSAgICAgICAgIFNsb3QoInRwX3RyYXZlcnNlIiwgInRyYXZlcnNlcHJveCIpLAotICAgICAgICAgU2xvdCgidHBfY2xlYXIiLCAiaW5xdWlyeSIpLAotICAgICAgICAgU2xvdCgidHBfcmljaGNvbXBhcmUiLCAicmljaGNtcGZ1bmMiKSwKLSAgICAgICAgIFNsb3QoInRwX3dlYWtsaXN0b2Zmc2V0IiksCi0gICAgICAgICBTbG90KCJ0cF9pdGVyIiwgImdldGl0ZXJmdW5jIiwgIl9faXRlcl9fIiksCi0gICAgICAgICBTbG90KCJ0cF9pdGVybmV4dCIsICJpdGVybmV4dGZ1bmMiLCAiX19uZXh0X18iKSwgIyBYWFgKLSAgICAgICAgIFNsb3QoInRwX21ldGhvZHMiKSwKLSAgICAgICAgIFNsb3QoInRwX21lbWJlcnMiKSwKLSAgICAgICAgIFNsb3QoInRwX2dldHNldCIpLAotICAgICAgICAgU2xvdCgidHBfYmFzZSIpLAotICAgICAgICAgU2xvdCgidHBfZGljdCIpLAotICAgICAgICAgU2xvdCgidHBfZGVzY3JfZ2V0IiwgImRlc2NyZ2V0ZnVuYyIpLAotICAgICAgICAgU2xvdCgidHBfZGVzY3Jfc2V0IiwgImRlc2Nyc2V0ZnVuYyIpLAotICAgICAgICAgU2xvdCgidHBfZGljdG9mZnNldCIpLAotICAgICAgICAgU2xvdCgidHBfaW5pdCIsICJpbml0cHJvYyIsICJfX2luaXRfXyIpLAotICAgICAgICAgU2xvdCgidHBfYWxsb2MiLCAiYWxsb2NmdW5jIiksCi0gICAgICAgICBTbG90KCJ0cF9uZXciLCAibmV3ZnVuYyIpLAotICAgICAgICAgU2xvdCgidHBfZnJlZSIsICJmcmVlZnVuYyIpLAotICAgICAgICAgU2xvdCgidHBfaXNfZ2MiLCAiaW5xdWlyeSIpLAotICAgICAgICAgU2xvdCgidHBfYmFzZXMiKSwKLSAgICAgICAgIFNsb3QoInRwX21ybyIpLAotICAgICAgICAgU2xvdCgidHBfY2FjaGUiKSwKLSAgICAgICAgIFNsb3QoInRwX3N1YmNsYXNzZXMiKSwKLSAgICAgICAgIFNsb3QoInRwX3dlYWtsaXN0IiksCi0gICAgICAgICApCi0KLSMgZ2l2ZSBzb21lIHNsb3RzIHN5bWJvbGljIG5hbWVzCi1UUF9OQU1FID0gU2xvdHNbMV0KLVRQX0JBU0lDU0laRSA9IFNsb3RzWzJdCi1UUF9ERUFMTE9DID0gU2xvdHNbNF0KLVRQX0RPQyA9IFNsb3RzWzIwXQotVFBfTUVUSE9EUyA9IFNsb3RzWzI3XQotVFBfTUVNQkVSUyA9IFNsb3RzWzI4XQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL2ZyYW1lci9zdHJ1Y3QucHkgYi9Ub29scy9mcmFtZXIvZnJhbWVyL3N0cnVjdC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjMmFlYy4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvZnJhbWVyL3N0cnVjdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLSIiIlJ1ZGltZW50YXJ5IHBhcnNlciBmb3IgQyBzdHJ1Y3QgZGVmaW5pdGlvbnMuIiIiCi0KLWltcG9ydCByZQotCi1QeU9iamVjdF9IRUFEID0gIlB5T2JqZWN0X0hFQUQiCi1QeU9iamVjdF9WQVJfSEVBRCA9ICJQeU9iamVjdF9WQVJfSEVBRCIKLQotcnhfbmFtZSA9IHJlLmNvbXBpbGUoIn0gKFx3Kyk7IikKLQotY2xhc3MgU3RydWN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBoZWFkLCBtZW1iZXJzKToKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLmhlYWQgPSBoZWFkCi0gICAgICAgIHNlbGYubWVtYmVycyA9IG1lbWJlcnMKLQotICAgIGRlZiBnZXRfdHlwZShzZWxmLCBuYW1lKToKLSAgICAgICAgZm9yIF9uYW1lLCB0eXBlIGluIHNlbGYubWVtYmVyczoKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gX25hbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbWVtYmVyIG5hbWVkICVzIiAlIG5hbWUpCi0KLWRlZiBwYXJzZShzKToKLSAgICAiIiJQYXJzZSBhIEMgc3RydWN0IGRlZmluaXRpb24uCi0KLSAgICBUaGUgcGFyc2VyIGlzIHZlcnkgcmVzdHJpY3RlZCBpbiB3aGF0IGl0IHdpbGwgYWNjZXB0LgotICAgICIiIgotCi0gICAgbGluZXMgPSBbX2YgZm9yIF9mIGluIHMuc3BsaXQoIlxuIikgaWYgX2ZdICMgZ2V0IG5vbi1lbXB0eSBsaW5lcwotICAgIGFzc2VydCBsaW5lc1swXS5zdHJpcCgpID09ICJ0eXBlZGVmIHN0cnVjdCB7IgotICAgIHB5aGVhZCA9IGxpbmVzWzFdLnN0cmlwKCkKLSAgICBhc3NlcnQgKHB5aGVhZC5zdGFydHN3aXRoKCJQeU9iamVjdCIpIGFuZAotICAgICAgICAgICAgcHloZWFkLmVuZHN3aXRoKCJIRUFEIikpCi0gICAgbWVtYmVycyA9IFtdCi0gICAgZm9yIGxpbmUgaW4gbGluZXNbMjpdOgotICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgifSIpOgotICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICBhc3NlcnQgbGluZS5lbmRzd2l0aCgiOyIpCi0gICAgICAgIGxpbmUgPSBsaW5lWzotMV0KLSAgICAgICAgd29yZHMgPSBsaW5lLnNwbGl0KCkKLSAgICAgICAgbmFtZSA9IHdvcmRzWy0xXQotICAgICAgICB0eXBlID0gIiAiLmpvaW4od29yZHNbOi0xXSkKLSAgICAgICAgaWYgbmFtZVswXSA9PSAiKiI6Ci0gICAgICAgICAgICBuYW1lID0gbmFtZVsxOl0KLSAgICAgICAgICAgIHR5cGUgKz0gIiAqIgotICAgICAgICBtZW1iZXJzLmFwcGVuZCgobmFtZSwgdHlwZSkpCi0gICAgbmFtZSA9IE5vbmUKLSAgICBtbyA9IHJ4X25hbWUuc2VhcmNoKGxpbmUpCi0gICAgYXNzZXJ0IG1vIGlzIG5vdCBOb25lCi0gICAgbmFtZSA9IG1vLmdyb3VwKDEpCi0gICAgcmV0dXJuIFN0cnVjdChuYW1lLCBweWhlYWQsIG1lbWJlcnMpCmRpZmYgLS1naXQgYS9Ub29scy9mcmFtZXIvZnJhbWVyL3N0cnVjdHBhcnNlLnB5IGIvVG9vbHMvZnJhbWVyL2ZyYW1lci9zdHJ1Y3RwYXJzZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Y0MjI0Yi4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvZnJhbWVyL3N0cnVjdHBhcnNlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotIiIiUnVkaW1lbnRhcnkgcGFyc2VyIGZvciBDIHN0cnVjdCBkZWZpbml0aW9ucy4iIiIKLQotaW1wb3J0IHJlCi0KLVB5T2JqZWN0X0hFQUQgPSAiUHlPYmplY3RfSEVBRCIKLVB5T2JqZWN0X1ZBUl9IRUFEID0gIlB5T2JqZWN0X1ZBUl9IRUFEIgotCi1yeF9uYW1lID0gcmUuY29tcGlsZSgifSAoXHcrKTsiKQotCi1jbGFzcyBTdHJ1Y3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGhlYWQsIG1lbWJlcnMpOgotICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuaGVhZCA9IGhlYWQKLSAgICAgICAgc2VsZi5tZW1iZXJzID0gbWVtYmVycwotCi1kZWYgcGFyc2Uocyk6Ci0gICAgIiIiUGFyc2UgYSBDIHN0cnVjdCBkZWZpbml0aW9uLgotCi0gICAgVGhlIHBhcnNlciBpcyB2ZXJ5IHJlc3RyaWN0ZWQgaW4gd2hhdCBpdCB3aWxsIGFjY2VwdC4KLSAgICAiIiIKLQotICAgIGxpbmVzID0gW19mIGZvciBfZiBpbiBzLnNwbGl0KCJcbiIpIGlmIF9mXSAjIGdldCBub24tZW1wdHkgbGluZXMKLSAgICBhc3NlcnQgbGluZXNbMF0uc3RyaXAoKSA9PSAidHlwZWRlZiBzdHJ1Y3QgeyIKLSAgICBweWhlYWQgPSBsaW5lc1sxXS5zdHJpcCgpCi0gICAgYXNzZXJ0IChweWhlYWQuc3RhcnRzd2l0aCgiUHlPYmplY3QiKSBhbmQKLSAgICAgICAgICAgIHB5aGVhZC5lbmRzd2l0aCgiSEVBRCIpKQotICAgIG1lbWJlcnMgPSBbXQotICAgIGZvciBsaW5lIGluIGxpbmVzWzI6XToKLSAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIn0iKToKLSAgICAgICAgICAgIGJyZWFrCi0KLSAgICAgICAgYXNzZXJ0IGxpbmUuZW5kc3dpdGgoIjsiKQotICAgICAgICBsaW5lID0gbGluZVs6LTFdCi0gICAgICAgIHdvcmRzID0gbGluZS5zcGxpdCgpCi0gICAgICAgIG5hbWUgPSB3b3Jkc1stMV0KLSAgICAgICAgdHlwZSA9ICIgIi5qb2luKHdvcmRzWzotMV0pCi0gICAgICAgIGlmIG5hbWVbMF0gPT0gIioiOgotICAgICAgICAgICAgbmFtZSA9IG5hbWVbMTpdCi0gICAgICAgICAgICB0eXBlICs9ICIgKiIKLSAgICAgICAgbWVtYmVycy5hcHBlbmQoKG5hbWUsIHR5cGUpKQotICAgIG5hbWUgPSBOb25lCi0gICAgbW8gPSByeF9uYW1lLnNlYXJjaChsaW5lKQotICAgIGFzc2VydCBtbyBpcyBub3QgTm9uZQotICAgIG5hbWUgPSBtby5ncm91cCgxKQotICAgIHJldHVybiBTdHJ1Y3QobmFtZSwgcHloZWFkLCBtZW1iZXJzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJhbWVyL2ZyYW1lci90ZW1wbGF0ZS5weSBiL1Rvb2xzL2ZyYW1lci9mcmFtZXIvdGVtcGxhdGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZjk1MzcuLjAwMDAwMDAKLS0tIGEvVG9vbHMvZnJhbWVyL2ZyYW1lci90ZW1wbGF0ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0iIiJmcmFtZXIncyBDIGNvZGUgdGVtcGxhdGVzLgotCi1UZW1wbGF0ZXMgdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzOgotCi1GaWxlTmFtZTogbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBDIHNvdXJjZSBjb2RlCi1Nb2R1bGVOYW1lOiBuYW1lIG9mIHRoZSBtb2R1bGUsIGFzIGluICJpbXBvcnQgTW9kdWxlTmFtZSIKLU1vZHVsZURvY3N0cmluZzogQyBzdHJpbmcgY29udGFpbmluZyB0aGUgbW9kdWxlIGRvYyBzdHJpbmcKLSIiIgotCi1tb2R1bGVfc3RhcnQgPSAnI2luY2x1ZGUgIlB5dGhvbi5oIicKLW1lbWJlcl9pbmNsdWRlID0gJyNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCInCi0KLW1vZHVsZV9kb2MgPSAiIiJcCi1QeURvY19TVFJWQVIoJShNb2R1bGVOYW1lKXNfZG9jLAotJShNb2R1bGVEb2NzdHJpbmcpcyk7Ci0iIiIKLQotbWV0aG9kZGVmX3N0YXJ0ID0gIiIiXAotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiAlKE1ldGhvZERlZk5hbWUpc1tdID0geyIiIgotCi1tZXRob2RkZWZfZGVmID0gIiIiXAotICAgICAgICB7IiUoUHl0aG9uTmFtZSlzIiwgKFB5Q0Z1bmN0aW9uKSUoQ05hbWUpcywgJShNZXRoVHlwZSlzfSwiIiIKLQotbWV0aG9kZGVmX2RlZl9kb2MgPSAiIiJcCi0gICAgICAgIHsiJShQeXRob25OYW1lKXMiLCAoUHlDRnVuY3Rpb24pJShDTmFtZSlzLCAlKE1ldGhUeXBlKXMsCi0gICAgICAgICAlKERvY3N0cmluZ1ZhcilzfSwiIiIKLQotbWV0aG9kZGVmX2VuZCA9ICIiIlwKLSAgICAgICAge05VTEwsIE5VTEx9Ci19OwotIiIiCi0KLW1lbWJlcmRlZl9zdGFydCA9ICIiIlwKLSNkZWZpbmUgT0ZGKFgpIG9mZnNldG9mKCUoU3RydWN0TmFtZSlzLCBYKQotCi1zdGF0aWMgc3RydWN0IFB5TWVtYmVyRGVmICUoTWVtYmVyRGVmTmFtZSlzW10gPSB7IiIiCi0KLW1lbWJlcmRlZl9kZWZfZG9jID0gIiIiXAotICAgICAgICB7IiUoUHl0aG9uTmFtZSlzIiwgJShUeXBlKXMsIE9GRiglKENOYW1lKXMpLCAlKEZsYWdzKXMsCi0gICAgICAgICAlKERvY3N0cmluZylzfSwiIiIKLQotbWVtYmVyZGVmX2RlZiA9ICIiIlwKLSAgICAgICAgeyIlKFB5dGhvbk5hbWUpcyIsICUoVHlwZSlzLCBPRkYoJShDTmFtZSlzKSwgJShGbGFncylzfSwiIiIKLQotbWVtYmVyZGVmX2VuZCA9ICIiIlwKLSAgICAgICAge05VTEx9Ci19OwotCi0jdW5kZWYgT0ZGCi0iIiIKLQotZGVhbGxvY19mdW5jID0gIiIic3RhdGljIHZvaWQKLSUobmFtZSlzKFB5T2JqZWN0ICpvYikKLXsKLX0KLSIiIgotCi1kb2NzdHJpbmcgPSAiIiJcCi1QeURvY19TVFJWQVIoJShEb2NzdHJpbmdWYXIpcywKLSUoRG9jc3RyaW5nKXMpOwotIiIiCi0KLWZ1bmNkZWZfc3RhcnQgPSAiIiJcCi1zdGF0aWMgUHlPYmplY3QgKgotJShuYW1lKXMoJShhcmdzKXMpCi17IiIiCi0KLWZ1bmNkZWZfZW5kID0gIiIiXAotfQotIiIiCi0KLXZhcmFyZ3MgPSAiIiJcCi0gICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBcIiUoQXJnUGFyc2UpczolKFB5dGhvbk5hbWUpc1wiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJShBcmdUYXJnZXRzKXMpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyIiIgotCi1tb2R1bGVfaW5pdF9zdGFydCA9ICIiIlwKLVB5TU9ESU5JVF9GVU5DCi1pbml0JShNb2R1bGVOYW1lKXModm9pZCkKLXsKLSAgICAgICAgUHlPYmplY3QgKm1vZDsKLQotICAgICAgICBtb2QgPSBQeV9Jbml0TW9kdWxlMygiJShNb2R1bGVOYW1lKXMiLCAlKE1ldGhvZERlZk5hbWUpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJShNb2R1bGVOYW1lKXNfZG9jKTsKLSAgICAgICAgaWYgKG1vZCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSIiIgotCi10eXBlX2luaXRfdHlwZSA9ICIgICAgICAgICUoQ1R5cGVOYW1lKXMub2JfdHlwZSA9ICZQeVR5cGVfVHlwZTsiCi1tb2R1bGVfYWRkX3R5cGUgPSAiIiJcCi0gICAgICAgIGlmICghUHlPYmplY3RfU2V0QXR0clN0cmluZyhtb2QsICIlKFR5cGVOYW1lKXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJiUoQ1R5cGVOYW1lKXMpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSIiIgotCi10eXBlX3N0cnVjdF9zdGFydCA9ICIiIlwKLXN0YXRpYyBQeVR5cGVPYmplY3QgJShDVHlwZU5hbWUpcyA9IHsKLSAgICAgICAgUHlPYmplY3RfSEVBRF9JTklUKDApIiIiCi0KLXR5cGVfc3RydWN0X2VuZCA9ICIiIlwKLX07Ci0iIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyYW1lci9mcmFtZXIvdXRpbC5weSBiL1Rvb2xzL2ZyYW1lci9mcmFtZXIvdXRpbC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzNmMzMwOS4uMDAwMDAwMAotLS0gYS9Ub29scy9mcmFtZXIvZnJhbWVyL3V0aWwucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi1kZWYgY3N0cmluZyhzLCB3aWR0aD03MCk6Ci0gICAgIiIiUmV0dXJuIEMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIHN0cmluZy4KLQotICAgIHdpZHRoIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3aWR0aCBvZiBhbnkgbGluZSBvZiB0aGUgQyBzdHJpbmcuCi0gICAgIiIiCi0gICAgTCA9IFtdCi0gICAgZm9yIGwgaW4gcy5zcGxpdCgiXG4iKToKLSAgICAgICAgaWYgbGVuKGwpIDwgd2lkdGg6Ci0gICAgICAgICAgICBMLmFwcGVuZChyJyIlc1xuIicgJSBsKQotCi0gICAgcmV0dXJuICJcbiIuam9pbihMKQotCi1kZWYgdW5pbmRlbnQocywgc2tpcGZpcnN0PVRydWUpOgotICAgICIiIlJldHVybiBhbiB1bmluZGVudGVkIHZlcnNpb24gb2YgYSBkb2NzdHJpbmcuCi0KLSAgICBSZW1vdmVzIGluZGVudGF0aW9uIG9uIGxpbmVzIGZvbGxvd2luZyB0aGUgZmlyc3Qgb25lLCB1c2luZyB0aGUKLSAgICBsZWFkaW5nIHdoaXRlc3BhY2Ugb2YgdGhlIGZpcnN0IGluZGVudGVkIGxpbmUgdGhhdCBpcyBub3QgYmxhbmsKLSAgICB0byBkZXRlcm1pbmUgdGhlIGluZGVudGF0aW9uLgotICAgICIiIgotCi0gICAgbGluZXMgPSBzLnNwbGl0KCJcbiIpCi0gICAgaWYgc2tpcGZpcnN0OgotICAgICAgICBmaXJzdCA9IGxpbmVzLnBvcCgwKQotICAgICAgICBMID0gW2ZpcnN0XQotICAgIGVsc2U6Ci0gICAgICAgIEwgPSBbXQotICAgIGluZGVudCA9IE5vbmUKLSAgICBmb3IgbCBpbiBsaW5lczoKLSAgICAgICAgbHMgPSBsLnN0cmlwKCkKLSAgICAgICAgaWYgbHM6Ci0gICAgICAgICAgICBpbmRlbnQgPSBsZW4obCkgLSBsZW4obHMpCi0gICAgICAgICAgICBicmVhawotICAgIEwgKz0gW2xbaW5kZW50Ol0gZm9yIGwgaW4gbGluZXNdCi0KLSAgICByZXR1cm4gIlxuIi5qb2luKEwpCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvZnJlZXplLnB5IGIvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQppbmRleCBhNzY3M2M5Li5hNDEyNjdhIDEwMDc1NQotLS0gYS9Ub29scy9mcmVlemUvZnJlZXplLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiJGcmVlemUgYSBQeXRob24gc2NyaXB0IGludG8gYSBiaW5hcnkuCiAKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAgICAgIyBtb2R1bGVzIHRoYXQgYXJlIGltcG9ydGVkIGJ5IHRoZSBQeXRob24gcnVudGltZQogICAgIGltcGxpY2l0cyA9IFtdCi0gICAgZm9yIG1vZHVsZSBpbiAoJ3NpdGUnLCAnd2FybmluZ3MnLCk6CisgICAgZm9yIG1vZHVsZSBpbiAoJ3NpdGUnLCAnd2FybmluZ3MnLCAnZW5jb2RpbmdzLnV0Zl84JywgJ2VuY29kaW5ncy5sYXRpbl8xJyk6CiAgICAgICAgIGlmIG1vZHVsZSBub3QgaW4gZXhjbHVkZToKICAgICAgICAgICAgIGltcGxpY2l0cy5hcHBlbmQobW9kdWxlKQogCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CmluZGV4IDJhYWIzZDkuLjAxODk5MmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CkBAIC0zLDE0ICszLDEzIEBACiAKICMgV3JpdGUgdGhlIGNvbmZpZy5jIGZpbGUKIAotbmV2ZXIgPSBbJ21hcnNoYWwnLCAnX19tYWluX18nLCAnYnVpbHRpbnMnLCAnc3lzJywgJ2V4Y2VwdGlvbnMnLCAnX3dhcm5pbmdzJ10KK25ldmVyID0gWydtYXJzaGFsJywgJ2ltcCcsICdfYXN0JywgJ19fbWFpbl9fJywgJ2J1aWx0aW5zJywKKyAgICAgICAgICdzeXMnLCAnZ2MnLCAnX3dhcm5pbmdzJ10KIAogZGVmIG1ha2Vjb25maWcoaW5mcCwgb3V0ZnAsIG1vZHVsZXMsIHdpdGhfaWZkZWY9MCk6CiAgICAgbTEgPSByZS5jb21waWxlKCctLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0nKQogICAgIG0yID0gcmUuY29tcGlsZSgnLS0gQURETU9EVUxFIE1BUktFUiAyIC0tJykKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gaW5mcC5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgIGZvciBsaW5lIGluIGluZnA6CiAgICAgICAgIG91dGZwLndyaXRlKGxpbmUpCiAgICAgICAgIGlmIG0xIGFuZCBtMS5zZWFyY2gobGluZSk6CiAgICAgICAgICAgICBtMSA9IE5vbmUKQEAgLTE4LDggKzE3LDggQEAKICAgICAgICAgICAgICAgICBpZiBtb2QgaW4gbmV2ZXI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgaWYgd2l0aF9pZmRlZjoKLSAgICAgICAgICAgICAgICAgICAgb3V0ZnAud3JpdGUoIiNpZm5kZWYgaW5pdCVzXG4iJW1vZCkKLSAgICAgICAgICAgICAgICBvdXRmcC53cml0ZSgnZXh0ZXJuIHZvaWQgaW5pdCVzKHZvaWQpO1xuJyAlIG1vZCkKKyAgICAgICAgICAgICAgICAgICAgb3V0ZnAud3JpdGUoIiNpZm5kZWYgUHlJbml0XyVzXG4iJW1vZCkKKyAgICAgICAgICAgICAgICBvdXRmcC53cml0ZSgnZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfJXModm9pZCk7XG4nICUgbW9kKQogICAgICAgICAgICAgICAgIGlmIHdpdGhfaWZkZWY6CiAgICAgICAgICAgICAgICAgICAgIG91dGZwLndyaXRlKCIjZW5kaWZcbiIpCiAgICAgICAgIGVsaWYgbTIgYW5kIG0yLnNlYXJjaChsaW5lKToKQEAgLTI3LDcgKzI2LDcgQEAKICAgICAgICAgICAgIGZvciBtb2QgaW4gbW9kdWxlczoKICAgICAgICAgICAgICAgICBpZiBtb2QgaW4gbmV2ZXI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgb3V0ZnAud3JpdGUoJ1x0eyIlcyIsIGluaXQlc30sXG4nICUKKyAgICAgICAgICAgICAgICBvdXRmcC53cml0ZSgnXHR7IiVzIiwgUHlJbml0XyVzfSxcbicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb2QsIG1vZCkpCiAgICAgaWYgbTE6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01BUktFUiAxIG5ldmVyIGZvdW5kXG4nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weSBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNiMDUyOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2dkYi9saWJweXRob24ucHkKQEAgLTAsMCArMSwxNjMzIEBACisjIS91c3IvYmluL3B5dGhvbgorJycnCitGcm9tIGdkYiA3IG9ud2FyZHMsIGdkYidzIGJ1aWxkIGNhbiBiZSBjb25maWd1cmVkIC0td2l0aC1weXRob24sIGFsbG93aW5nIGdkYgordG8gYmUgZXh0ZW5kZWQgd2l0aCBQeXRob24gY29kZSBlLmcuIGZvciBsaWJyYXJ5LXNwZWNpZmljIGRhdGEgdmlzdWFsaXphdGlvbnMsCitzdWNoIGFzIGZvciB0aGUgQysrIFNUTCB0eXBlcy4gIERvY3VtZW50YXRpb24gb24gdGhpcyBBUEkgY2FuIGJlIHNlZW4gYXQ6CitodHRwOi8vc291cmNld2FyZS5vcmcvZ2RiL2N1cnJlbnQvb25saW5lZG9jcy9nZGIvUHl0aG9uLUFQSS5odG1sCisKKworVGhpcyBweXRob24gbW9kdWxlIGRlYWxzIHdpdGggdGhlIGNhc2Ugd2hlbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZCAodGhlCisiaW5mZXJpb3IgcHJvY2VzcyIgaW4gZ2RiIHBhcmxhbmNlKSBpcyBpdHNlbGYgcHl0aG9uLCBvciBtb3JlIHNwZWNpZmljYWxseSwKK2xpbmtlZCBhZ2FpbnN0IGxpYnB5dGhvbi4gIEluIHRoaXMgc2l0dWF0aW9uLCBhbG1vc3QgZXZlcnkgaXRlbSBvZiBkYXRhIGlzIGEKKyhQeU9iamVjdCopLCBhbmQgaGF2aW5nIHRoZSBkZWJ1Z2dlciBtZXJlbHkgcHJpbnQgdGhlaXIgYWRkcmVzc2VzIGlzIG5vdCB2ZXJ5CitlbmxpZ2h0ZW5pbmcuCisKK1RoaXMgbW9kdWxlIGVtYmVkcyBrbm93bGVkZ2UgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgbGlicHl0aG9uIHNvCit0aGF0IHdlIGNhbiBlbWl0IHVzZWZ1bCB2aXN1YWxpemF0aW9ucyBlLmcuIGEgc3RyaW5nLCBhIGxpc3QsIGEgZGljdCwgYSBmcmFtZQorZ2l2aW5nIGZpbGUvbGluZSBpbmZvcm1hdGlvbiBhbmQgdGhlIHN0YXRlIG9mIGxvY2FsIHZhcmlhYmxlcworCitJbiBwYXJ0aWN1bGFyLCBnaXZlbiBhIGdkYi5WYWx1ZSBjb3JyZXNwb25kaW5nIHRvIGEgUHlPYmplY3QqIGluIHRoZSBpbmZlcmlvcgorcHJvY2Vzcywgd2UgY2FuIGdlbmVyYXRlIGEgInByb3h5IHZhbHVlIiB3aXRoaW4gdGhlIGdkYiBwcm9jZXNzLiAgRm9yIGV4YW1wbGUsCitnaXZlbiBhIFB5T2JqZWN0KiBpbiB0aGUgaW5mZXJpb3IgcHJvY2VzcyB0aGF0IGlzIGluIGZhY3QgYSBQeUxpc3RPYmplY3QqCitob2xkaW5nIHRocmVlIFB5T2JqZWN0KiB0aGF0IHR1cm4gb3V0IHRvIGJlIFB5Qnl0ZXNPYmplY3QqIGluc3RhbmNlcywgd2UgY2FuCitnZW5lcmF0ZSBhIHByb3h5IHZhbHVlIHdpdGhpbiB0aGUgZ2RiIHByb2Nlc3MgdGhhdCBpcyBhIGxpc3Qgb2YgYnl0ZXMKK2luc3RhbmNlczoKKyAgW2IiZm9vIiwgYiJiYXIiLCBiImJheiJdCisKK0RvaW5nIHNvIGNhbiBiZSBleHBlbnNpdmUgZm9yIGNvbXBsaWNhdGVkIGdyYXBocyBvZiBvYmplY3RzLCBhbmQgY291bGQgdGFrZQorc29tZSB0aW1lLCBzbyB3ZSBhbHNvIGhhdmUgYSAid3JpdGVfcmVwciIgbWV0aG9kIHRoYXQgd3JpdGVzIGEgcmVwcmVzZW50YXRpb24KK29mIHRoZSBkYXRhIHRvIGEgZmlsZS1saWtlIG9iamVjdC4gIFRoaXMgYWxsb3dzIHVzIHRvIHN0b3AgdGhlIHRyYXZlcnNhbCBieQoraGF2aW5nIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBpdCBnZXRzIHRvbyBtdWNoIGRhdGEuCisKK1dpdGggYm90aCAicHJveHl2YWwiIGFuZCAid3JpdGVfcmVwciIgd2Uga2VlcCB0cmFjayBvZiB0aGUgc2V0IG9mIGFsbCBhZGRyZXNzZXMKK3Zpc2l0ZWQgc28gZmFyIGluIHRoZSB0cmF2ZXJzYWwsIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8gY3ljbGVzIGluCit0aGUgZ3JhcGggb2Ygb2JqZWN0IHJlZmVyZW5jZXMuCisKK1dlIHRyeSB0byBkZWZlciBnZGIubG9va3VwX3R5cGUoKSBpbnZvY2F0aW9ucyBmb3IgcHl0aG9uIHR5cGVzIHVudGlsIGFzIGxhdGUgYXMKK3Bvc3NpYmxlOiBmb3IgYSBkeW5hbWljYWxseSBsaW5rZWQgcHl0aG9uIGJpbmFyeSwgd2hlbiB0aGUgcHJvY2VzcyBzdGFydHMgaW4KK3RoZSBkZWJ1Z2dlciwgdGhlIGxpYnB5dGhvbi5zbyBoYXNuJ3QgYmVlbiBkeW5hbWljYWxseSBsb2FkZWQgeWV0LCBzbyBub25lIG9mCit0aGUgdHlwZSBuYW1lcyBhcmUga25vd24gdG8gdGhlIGRlYnVnZ2VyCisKK1RoZSBtb2R1bGUgYWxzbyBleHRlbmRzIGdkYiB3aXRoIHNvbWUgcHl0aG9uLXNwZWNpZmljIGNvbW1hbmRzLgorJycnCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50CitpbXBvcnQgZ2RiCitpbXBvcnQgbG9jYWxlCitpbXBvcnQgc3lzCisKKyMgTG9vayB1cCB0aGUgZ2RiLlR5cGUgZm9yIHNvbWUgc3RhbmRhcmQgdHlwZXM6CitfdHlwZV9jaGFyX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgnY2hhcicpLnBvaW50ZXIoKSAjIGNoYXIqCitfdHlwZV91bnNpZ25lZF9jaGFyX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgndW5zaWduZWQgY2hhcicpLnBvaW50ZXIoKSAjIHVuc2lnbmVkIGNoYXIqCitfdHlwZV92b2lkX3B0ciA9IGdkYi5sb29rdXBfdHlwZSgndm9pZCcpLnBvaW50ZXIoKSAjIHZvaWQqCitfdHlwZV9zaXplX3QgPSBnZGIubG9va3VwX3R5cGUoJ3NpemVfdCcpCisKK1NJWkVPRl9WT0lEX1AgPSBfdHlwZV92b2lkX3B0ci5zaXplb2YKKworCitQeV9UUEZMQUdTX0hFQVBUWVBFID0gKDFMIDw8IDkpCisKK1B5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgPSAoMUwgPDwgMjQpCitQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MgICAgID0gKDFMIDw8IDI1KQorUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICA9ICgxTCA8PCAyNikKK1B5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MgICAgPSAoMUwgPDwgMjcpCitQeV9UUEZMQUdTX1VOSUNPREVfU1VCQ0xBU1MgID0gKDFMIDw8IDI4KQorUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICA9ICgxTCA8PCAyOSkKK1B5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MgPSAoMUwgPDwgMzApCitQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgICAgID0gKDFMIDw8IDMxKQorCisKK01BWF9PVVRQVVRfTEVOPTEwMjQKKworaGV4ZGlnaXRzID0gIjAxMjM0NTY3ODlhYmNkZWYiCisKK0VOQ09ESU5HID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkKKworY2xhc3MgTnVsbFB5T2JqZWN0UHRyKFJ1bnRpbWVFcnJvcik6CisgICAgcGFzcworCisKK2RlZiBzYWZldHlfbGltaXQodmFsKToKKyAgICAjIEdpdmVuIGEgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLCBsaW1pdCBpdCB0byBzb21lCisgICAgIyBzYWZldHkgdGhyZXNob2xkIHNvIHRoYXQgYXJiaXRyYXJ5IGJyZWFrYWdlIHdpdGhpbiBzYWlkIHByb2Nlc3MgZG9lc24ndAorICAgICMgYnJlYWsgdGhlIGdkYiBwcm9jZXNzIHRvbyBtdWNoIChlLmcuIHNpemVzIG9mIGl0ZXJhdGlvbnMsIHNpemVzIG9mIGxpc3RzKQorICAgIHJldHVybiBtaW4odmFsLCAxMDAwKQorCisKK2RlZiBzYWZlX3JhbmdlKHZhbCk6CisgICAgIyBBcyBwZXIgcmFuZ2UsIGJ1dCBkb24ndCB0cnVzdCB0aGUgdmFsdWUgdG9vIG11Y2g6IGNhcCBpdCB0byBhIHNhZmV0eQorICAgICMgdGhyZXNob2xkIGluIGNhc2UgdGhlIGRhdGEgd2FzIGNvcnJ1cHRlZAorICAgIHJldHVybiB4cmFuZ2Uoc2FmZXR5X2xpbWl0KHZhbCkpCisKK2RlZiB3cml0ZV91bmljb2RlKGZpbGUsIHRleHQpOgorICAgICMgV3JpdGUgYSBieXRlIG9yIHVuaWNvZGUgc3RyaW5nIHRvIGZpbGUuIFVuaWNvZGUgc3RyaW5ncyBhcmUgZW5jb2RlZCB0bworICAgICMgRU5DT0RJTkcgZW5jb2Rpbmcgd2l0aCAnYmFja3NsYXNocmVwbGFjZScgZXJyb3IgaGFuZGxlciB0byBhdm9pZAorICAgICMgVW5pY29kZUVuY29kZUVycm9yLgorICAgIGlmIGlzaW5zdGFuY2UodGV4dCwgdW5pY29kZSk6CisgICAgICAgIHRleHQgPSB0ZXh0LmVuY29kZShFTkNPRElORywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgIGZpbGUud3JpdGUodGV4dCkKKworZGVmIG9zX2ZzZW5jb2RlKGZpbGVuYW1lKToKKyAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxlbmFtZSwgdW5pY29kZSk6CisgICAgICAgIHJldHVybiBmaWxlbmFtZQorICAgIGVuY29kaW5nID0gc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZygpCisgICAgaWYgZW5jb2RpbmcgPT0gJ21iY3MnOgorICAgICAgICAjIG1iY3MgZG9lc24ndCBzdXBwb3J0IHN1cnJvZ2F0ZWVzY2FwZQorICAgICAgICByZXR1cm4gZmlsZW5hbWUuZW5jb2RlKGVuY29kaW5nKQorICAgIGVuY29kZWQgPSBbXQorICAgIGZvciBjaGFyIGluIGZpbGVuYW1lOgorICAgICAgICAjIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyCisgICAgICAgIGlmIDB4REM4MCA8PSBvcmQoY2hhcikgPD0gMHhEQ0ZGOgorICAgICAgICAgICAgYnl0ZSA9IGNocihvcmQoY2hhcikgLSAweERDMDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBieXRlID0gY2hhci5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIGVuY29kZWQuYXBwZW5kKGJ5dGUpCisgICAgcmV0dXJuICcnLmpvaW4oZW5jb2RlZCkKKworY2xhc3MgU3RyaW5nVHJ1bmNhdGVkKFJ1bnRpbWVFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBUcnVuY2F0ZWRTdHJpbmdJTyhvYmplY3QpOgorICAgICcnJ1NpbWlsYXIgdG8gY1N0cmluZ0lPLCBidXQgY2FuIHRydW5jYXRlIHRoZSBvdXRwdXQgYnkgcmFpc2luZyBhCisgICAgU3RyaW5nVHJ1bmNhdGVkIGV4Y2VwdGlvbicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXhsZW49Tm9uZSk6CisgICAgICAgIHNlbGYuX3ZhbCA9ICcnCisgICAgICAgIHNlbGYubWF4bGVuID0gbWF4bGVuCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIHNlbGYubWF4bGVuOgorICAgICAgICAgICAgaWYgbGVuKGRhdGEpICsgbGVuKHNlbGYuX3ZhbCkgPiBzZWxmLm1heGxlbjoKKyAgICAgICAgICAgICAgICAjIFRydW5jYXRpb246CisgICAgICAgICAgICAgICAgc2VsZi5fdmFsICs9IGRhdGFbMDpzZWxmLm1heGxlbiAtIGxlbihzZWxmLl92YWwpXQorICAgICAgICAgICAgICAgIHJhaXNlIFN0cmluZ1RydW5jYXRlZCgpCisKKyAgICAgICAgc2VsZi5fdmFsICs9IGRhdGEKKworICAgIGRlZiBnZXR2YWx1ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbAorCitjbGFzcyBQeU9iamVjdFB0cihvYmplY3QpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIGVpdGhlciBhIChQeU9iamVjdCopIHdpdGhpbiB0aGUKKyAgICBpbmZlcmlvciBwcm9jZXNzLCBvciBzb21lIHN1YmNsYXNzIHBvaW50ZXIgZS5nLiAoUHlCeXRlc09iamVjdCopCisKKyAgICBUaGVyZSB3aWxsIGJlIGEgc3ViY2xhc3MgZm9yIGV2ZXJ5IHJlZmluZWQgUHlPYmplY3QgdHlwZSB0aGF0IHdlIGNhcmUKKyAgICBhYm91dC4KKworICAgIE5vdGUgdGhhdCBhdCBldmVyeSBzdGFnZSB0aGUgdW5kZXJseWluZyBwb2ludGVyIGNvdWxkIGJlIE5VTEwsIHBvaW50CisgICAgdG8gY29ycnVwdCBkYXRhLCBldGM7IHRoaXMgaXMgdGhlIGRlYnVnZ2VyLCBhZnRlciBhbGwuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5T2JqZWN0JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdkYnZhbCwgY2FzdF90bz1Ob25lKToKKyAgICAgICAgaWYgY2FzdF90bzoKKyAgICAgICAgICAgIHNlbGYuX2dkYnZhbCA9IGdkYnZhbC5jYXN0KGNhc3RfdG8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9nZGJ2YWwgPSBnZGJ2YWwKKworICAgIGRlZiBmaWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCB0aGUgZ2RiLlZhbHVlIGZvciB0aGUgZ2l2ZW4gZmllbGQgd2l0aGluIHRoZSBQeU9iamVjdCwgY29waW5nIHdpdGgKKyAgICAgICAgc29tZSBweXRob24gMiB2ZXJzdXMgcHl0aG9uIDMgZGlmZmVyZW5jZXMuCisKKyAgICAgICAgVmFyaW91cyBsaWJweXRob24gdHlwZXMgYXJlIGRlZmluZWQgdXNpbmcgdGhlICJQeU9iamVjdF9IRUFEIiBhbmQKKyAgICAgICAgIlB5T2JqZWN0X1ZBUl9IRUFEIiBtYWNyb3MuCisKKyAgICAgICAgSW4gUHl0aG9uIDIsIHRoaXMgdGhlc2UgYXJlIGRlZmluZWQgc28gdGhhdCAib2JfdHlwZSIgYW5kIChmb3IgYSB2YXIKKyAgICAgICAgb2JqZWN0KSAib2Jfc2l6ZSIgYXJlIGZpZWxkcyBvZiB0aGUgdHlwZSBpbiBxdWVzdGlvbi4KKworICAgICAgICBJbiBQeXRob24gMywgdGhpcyBpcyBkZWZpbmVkIGFzIGFuIGVtYmVkZGVkIFB5VmFyT2JqZWN0IHR5cGUgdGh1czoKKyAgICAgICAgICAgUHlWYXJPYmplY3Qgb2JfYmFzZTsKKyAgICAgICAgc28gdGhhdCB0aGUgIm9iX3NpemUiIGZpZWxkIGlzIGxvY2F0ZWQgaW5zaXplIHRoZSAib2JfYmFzZSIgZmllbGQsIGFuZAorICAgICAgICB0aGUgIm9iX3R5cGUiIGlzIG1vc3QgZWFzaWx5IGFjY2Vzc2VkIGJ5IGNhc3RpbmcgYmFjayB0byBhIChQeU9iamVjdCopLgorICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19udWxsKCk6CisgICAgICAgICAgICByYWlzZSBOdWxsUHlPYmplY3RQdHIoc2VsZikKKworICAgICAgICBpZiBuYW1lID09ICdvYl90eXBlJzoKKyAgICAgICAgICAgIHB5b19wdHIgPSBzZWxmLl9nZGJ2YWwuY2FzdChQeU9iamVjdFB0ci5nZXRfZ2RiX3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBweW9fcHRyLmRlcmVmZXJlbmNlKClbbmFtZV0KKworICAgICAgICBpZiBuYW1lID09ICdvYl9zaXplJzoKKyAgICAgICAgICAgIHB5b19wdHIgPSBzZWxmLl9nZGJ2YWwuY2FzdChQeVZhck9iamVjdFB0ci5nZXRfZ2RiX3R5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiBweW9fcHRyLmRlcmVmZXJlbmNlKClbbmFtZV0KKworICAgICAgICAjIEdlbmVyYWwgY2FzZTogbG9vayBpdCB1cCBpbnNpZGUgdGhlIG9iamVjdDoKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5kZXJlZmVyZW5jZSgpW25hbWVdCisKKyAgICBkZWYgcHlvcF9maWVsZChzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCBhIFB5T2JqZWN0UHRyIGZvciB0aGUgZ2l2ZW4gUHlPYmplY3QqIGZpZWxkIHdpdGhpbiB0aGlzIFB5T2JqZWN0LAorICAgICAgICBjb3Bpbmcgd2l0aCBzb21lIHB5dGhvbiAyIHZlcnN1cyBweXRob24gMyBkaWZmZXJlbmNlcy4KKyAgICAgICAgJycnCisgICAgICAgIHJldHVybiBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmZpZWxkKG5hbWUpKQorCisgICAgZGVmIHdyaXRlX2ZpZWxkX3JlcHIoc2VsZiwgbmFtZSwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgJycnCisgICAgICAgIEV4dHJhY3QgdGhlIFB5T2JqZWN0KiBmaWVsZCBuYW1lZCAibmFtZSIsIGFuZCB3cml0ZSBpdHMgcmVwcmVzZW50YXRpb24KKyAgICAgICAgdG8gZmlsZS1saWtlIG9iamVjdCAib3V0IgorICAgICAgICAnJycKKyAgICAgICAgZmllbGRfb2JqID0gc2VsZi5weW9wX2ZpZWxkKG5hbWUpCisgICAgICAgIGZpZWxkX29iai53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKworICAgIGRlZiBnZXRfdHJ1bmNhdGVkX3JlcHIoc2VsZiwgbWF4bGVuKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCBhIHJlcHItbGlrZSBzdHJpbmcgZm9yIHRoZSBkYXRhLCBidXQgdHJ1bmNhdGUgaXQgYXQgIm1heGxlbiIgYnl0ZXMKKyAgICAgICAgKGVuZGluZyB0aGUgb2JqZWN0IGdyYXBoIHRyYXZlcnNhbCBhcyBzb29uIGFzIHlvdSBkbykKKyAgICAgICAgJycnCisgICAgICAgIG91dCA9IFRydW5jYXRlZFN0cmluZ0lPKG1heGxlbikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi53cml0ZV9yZXByKG91dCwgc2V0KCkpCisgICAgICAgIGV4Y2VwdCBTdHJpbmdUcnVuY2F0ZWQ6CisgICAgICAgICAgICAjIFRydW5jYXRpb24gb2NjdXJyZWQ6CisgICAgICAgICAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkgKyAnLi4uKHRydW5jYXRlZCknCisKKyAgICAgICAgIyBObyB0cnVuY2F0aW9uIG9jY3VycmVkOgorICAgICAgICByZXR1cm4gb3V0LmdldHZhbHVlKCkKKworICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gUHlUeXBlT2JqZWN0UHRyKHNlbGYuZmllbGQoJ29iX3R5cGUnKSkKKworICAgIGRlZiBpc19udWxsKHNlbGYpOgorICAgICAgICByZXR1cm4gMCA9PSBsb25nKHNlbGYuX2dkYnZhbCkKKworICAgIGRlZiBpc19vcHRpbWl6ZWRfb3V0KHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgSXMgdGhlIHZhbHVlIG9mIHRoZSB1bmRlcmx5aW5nIFB5T2JqZWN0KiB2aXNpYmxlIHRvIHRoZSBkZWJ1Z2dlcj8KKworICAgICAgICBUaGlzIGNhbiB2YXJ5IHdpdGggdGhlIHByZWNpc2UgdmVyc2lvbiBvZiB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZAorICAgICAgICBQeXRob24sIGFuZCB0aGUgcHJlY2lzZSB2ZXJzaW9uIG9mIGdkYi4KKworICAgICAgICBTZWUgZS5nLiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTU1Njk3NSB3aXRoCisgICAgICAgIFB5RXZhbF9FdmFsRnJhbWVFeCdzICJmIgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIHNlbGYuX2dkYnZhbC5pc19vcHRpbWl6ZWRfb3V0CisKKyAgICBkZWYgc2FmZV90cF9uYW1lKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlKCkuZmllbGQoJ3RwX25hbWUnKS5zdHJpbmcoKQorICAgICAgICBleGNlcHQgTnVsbFB5T2JqZWN0UHRyOgorICAgICAgICAgICAgIyBOVUxMIHRwX25hbWU/CisgICAgICAgICAgICByZXR1cm4gJ3Vua25vd24nCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIENhbid0IGV2ZW4gcmVhZCB0aGUgb2JqZWN0IGF0IGFsbD8KKyAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgJycnCisgICAgICAgIFNjcmFwZSBhIHZhbHVlIGZyb20gdGhlIGluZmVyaW9yIHByb2Nlc3MsIGFuZCB0cnkgdG8gcmVwcmVzZW50IGl0CisgICAgICAgIHdpdGhpbiB0aGUgZ2RiIHByb2Nlc3MsIHdoaWxzdCAoaG9wZWZ1bGx5KSBhdm9pZGluZyBjcmFzaGVzIHdoZW4KKyAgICAgICAgdGhlIHJlbW90ZSBkYXRhIGlzIGNvcnJ1cHQuCisKKyAgICAgICAgRGVyaXZlZCBjbGFzc2VzIHdpbGwgb3ZlcnJpZGUgdGhpcy4KKworICAgICAgICBGb3IgZXhhbXBsZSwgYSBQeUludE9iamVjdCogd2l0aCBvYl9pdmFsIDQyIGluIHRoZSBpbmZlcmlvciBwcm9jZXNzCisgICAgICAgIHNob3VsZCByZXN1bHQgaW4gYW4gaW50KDQyKSBpbiB0aGlzIHByb2Nlc3MuCisKKyAgICAgICAgdmlzaXRlZDogYSBzZXQgb2YgYWxsIGdkYi5WYWx1ZSBweW9iamVjdCBwb2ludGVycyBhbHJlYWR5IHZpc2l0ZWQKKyAgICAgICAgd2hpbHN0IGdlbmVyYXRpbmcgdGhpcyB2YWx1ZSAodG8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSByZWN1cnNpb24gd2hlbgorICAgICAgICB2aXNpdGluZyBvYmplY3QgZ3JhcGhzIHdpdGggbG9vcHMpLiAgQW5hbG9nb3VzIHRvIFB5X1JlcHJFbnRlciBhbmQKKyAgICAgICAgUHlfUmVwckxlYXZlCisgICAgICAgICcnJworCisgICAgICAgIGNsYXNzIEZha2VSZXByKG9iamVjdCk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENsYXNzIHJlcHJlc2VudGluZyBhIG5vbi1kZXNjcmlwdCBQeU9iamVjdCogdmFsdWUgaW4gdGhlIGluZmVyaW9yCisgICAgICAgICAgICBwcm9jZXNzIGZvciB3aGVuIHdlIGRvbid0IGhhdmUgYSBjdXN0b20gc2NyYXBlciwgaW50ZW5kZWQgdG8gaGF2ZQorICAgICAgICAgICAgYSBzYW5lIHJlcHIoKS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHBfbmFtZSwgYWRkcmVzcyk6CisgICAgICAgICAgICAgICAgc2VsZi50cF9uYW1lID0gdHBfbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcyA9IGFkZHJlc3MKKworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgRm9yIHRoZSBOVUxMIHBvaW50ZXIsIHdlIGhhdmUgbm8gd2F5IG9mIGtub3dpbmcgYSB0eXBlLCBzbworICAgICAgICAgICAgICAgICMgc3BlY2lhbC1jYXNlIGl0IGFzIHBlcgorICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgwMzIjbXNnMTAwODgyCisgICAgICAgICAgICAgICAgaWYgc2VsZi5hZGRyZXNzID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnMHgwJworICAgICAgICAgICAgICAgIHJldHVybiAnPCVzIGF0IHJlbW90ZSAweCV4PicgJSAoc2VsZi50cF9uYW1lLCBzZWxmLmFkZHJlc3MpCisKKyAgICAgICAgcmV0dXJuIEZha2VSZXByKHNlbGYuc2FmZV90cF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb25nKHNlbGYuX2dkYnZhbCkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgV3JpdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIHNjcmFwZWQgZnJvbSB0aGUgaW5mZXJpb3IKKyAgICAgICAgcHJvY2VzcyB0byAib3V0IiwgYSBmaWxlLWxpa2Ugb2JqZWN0LgorICAgICAgICAnJycKKyAgICAgICAgIyBEZWZhdWx0IGltcGxlbWVudGF0aW9uOiBnZW5lcmF0ZSBhIHByb3h5IHZhbHVlIGFuZCB3cml0ZSBpdHMgcmVwcgorICAgICAgICAjIEhvd2V2ZXIsIHRoaXMgY291bGQgaW52b2x2ZSBhIGxvdCBvZiB3b3JrIGZvciBjb21wbGljYXRlZCBvYmplY3RzLAorICAgICAgICAjIHNvIGZvciBkZXJpdmVkIGNsYXNzZXMgd2Ugc3BlY2lhbGl6ZSB0aGlzCisgICAgICAgIHJldHVybiBvdXQud3JpdGUocmVwcihzZWxmLnByb3h5dmFsKHZpc2l0ZWQpKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdWJjbGFzc19mcm9tX3R5cGUoY2xzLCB0KToKKyAgICAgICAgJycnCisgICAgICAgIEdpdmVuIGEgUHlUeXBlT2JqZWN0UHRyIGluc3RhbmNlIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhCisgICAgICAgIChQeVR5cGVPYmplY3QqKSwgZGV0ZXJtaW5lIHRoZSBjb3JyZXNwb25kaW5nIHN1YmNsYXNzIG9mIFB5T2JqZWN0UHRyCisgICAgICAgIHRvIHVzZQorCisgICAgICAgIElkZWFsbHksIHdlIHdvdWxkIGxvb2sgdXAgdGhlIHN5bWJvbHMgZm9yIHRoZSBnbG9iYWwgdHlwZXMsIGJ1dCB0aGF0CisgICAgICAgIGlzbid0IHdvcmtpbmcgeWV0OgorICAgICAgICAgIChnZGIpIHB5dGhvbiBwcmludCBnZGIubG9va3VwX3N5bWJvbCgnUHlMaXN0X1R5cGUnKVswXS52YWx1ZQorICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgICAgICAgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3I6IFN5bWJvbCB0eXBlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIFB5dGhvbiBzY3JpcHRzLgorICAgICAgICAgIEVycm9yIHdoaWxlIGV4ZWN1dGluZyBQeXRob24gY29kZS4KKworICAgICAgICBGb3Igbm93LCB3ZSB1c2UgdHBfZmxhZ3MsIGFmdGVyIGRvaW5nIHNvbWUgc3RyaW5nIGNvbXBhcmlzb25zIG9uIHRoZQorICAgICAgICB0cF9uYW1lIGZvciBzb21lIHNwZWNpYWwtY2FzZXMgdGhhdCBkb24ndCBzZWVtIHRvIGJlIHZpc2libGUgdGhyb3VnaAorICAgICAgICBmbGFncworICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHBfbmFtZSA9IHQuZmllbGQoJ3RwX25hbWUnKS5zdHJpbmcoKQorICAgICAgICAgICAgdHBfZmxhZ3MgPSBpbnQodC5maWVsZCgndHBfZmxhZ3MnKSkKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKKyAgICAgICAgICAgICMgSGFuZGxlIGFueSBraW5kIG9mIGVycm9yIGUuZy4gTlVMTCBwdHJzIGJ5IHNpbXBseSB1c2luZyB0aGUgYmFzZQorICAgICAgICAgICAgIyBjbGFzcworICAgICAgICAgICAgcmV0dXJuIGNscworCisgICAgICAgICNwcmludCAndHBfZmxhZ3MgPSAweCUwOHgnICUgdHBfZmxhZ3MKKyAgICAgICAgI3ByaW50ICd0cF9uYW1lID0gJXInICUgdHBfbmFtZQorCisgICAgICAgIG5hbWVfbWFwID0geydib29sJzogUHlCb29sT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnY2xhc3NvYmonOiBQeUNsYXNzT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnaW5zdGFuY2UnOiBQeUluc3RhbmNlT2JqZWN0UHRyLAorICAgICAgICAgICAgICAgICAgICAnTm9uZVR5cGUnOiBQeU5vbmVTdHJ1Y3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdmcmFtZSc6IFB5RnJhbWVPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdzZXQnIDogUHlTZXRPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdmcm96ZW5zZXQnIDogUHlTZXRPYmplY3RQdHIsCisgICAgICAgICAgICAgICAgICAgICdidWlsdGluX2Z1bmN0aW9uX29yX21ldGhvZCcgOiBQeUNGdW5jdGlvbk9iamVjdFB0ciwKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICBpZiB0cF9uYW1lIGluIG5hbWVfbWFwOgorICAgICAgICAgICAgcmV0dXJuIG5hbWVfbWFwW3RwX25hbWVdCisKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFOgorICAgICAgICAgICAgcmV0dXJuIEhlYXBUeXBlT2JqZWN0UHRyCisKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlMb25nT2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTOgorICAgICAgICAgICAgcmV0dXJuIFB5TGlzdE9iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfVFVQTEVfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZU9iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlCeXRlc09iamVjdFB0cgorICAgICAgICBpZiB0cF9mbGFncyAmIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVPYmplY3RQdHIKKyAgICAgICAgaWYgdHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1M6CisgICAgICAgICAgICByZXR1cm4gUHlEaWN0T2JqZWN0UHRyCisgICAgICAgIGlmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19CQVNFX0VYQ19TVUJDTEFTUzoKKyAgICAgICAgICAgIHJldHVybiBQeUJhc2VFeGNlcHRpb25PYmplY3RQdHIKKyAgICAgICAgI2lmIHRwX2ZsYWdzICYgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTOgorICAgICAgICAjICAgIHJldHVybiBQeVR5cGVPYmplY3RQdHIKKworICAgICAgICAjIFVzZSB0aGUgYmFzZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIGNscworCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fcHlvYmplY3RfcHRyKGNscywgZ2RidmFsKToKKyAgICAgICAgJycnCisgICAgICAgIFRyeSB0byBsb2NhdGUgdGhlIGFwcHJvcHJpYXRlIGRlcml2ZWQgY2xhc3MgZHluYW1pY2FsbHksIGFuZCBjYXN0CisgICAgICAgIHRoZSBwb2ludGVyIGFjY29yZGluZ2x5LgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IFB5T2JqZWN0UHRyKGdkYnZhbCkKKyAgICAgICAgICAgIGNscyA9IGNscy5zdWJjbGFzc19mcm9tX3R5cGUocC50eXBlKCkpCisgICAgICAgICAgICByZXR1cm4gY2xzKGdkYnZhbCwgY2FzdF90bz1jbHMuZ2V0X2dkYl90eXBlKCkpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAjIEhhbmRsZSBhbnkga2luZCBvZiBlcnJvciBlLmcuIE5VTEwgcHRycyBieSBzaW1wbHkgdXNpbmcgdGhlIGJhc2UKKyAgICAgICAgICAgICMgY2xhc3MKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmV0dXJuIGNscyhnZGJ2YWwpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZ2V0X2dkYl90eXBlKGNscyk6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX3R5cGUoY2xzLl90eXBlbmFtZSkucG9pbnRlcigpCisKKyAgICBkZWYgYXNfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGxvbmcoc2VsZi5fZ2RidmFsKQorCitjbGFzcyBQeVZhck9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5VmFyT2JqZWN0JworCitjbGFzcyBQcm94eUFscmVhZHlWaXNpdGVkKG9iamVjdCk6CisgICAgJycnCisgICAgUGxhY2Vob2xkZXIgcHJveHkgdG8gdXNlIHdoZW4gcHJvdGVjdGluZyBhZ2FpbnN0IGluZmluaXRlIHJlY3Vyc2lvbiBkdWUgdG8KKyAgICBsb29wcyBpbiB0aGUgb2JqZWN0IGdyYXBoLgorCisgICAgQW5hbG9nb3VzIHRvIHRoZSB2YWx1ZXMgZW1pdHRlZCBieSB0aGUgdXNlcnMgb2YgUHlfUmVwckVudGVyIGFuZCBQeV9SZXByTGVhdmUKKyAgICAnJycKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVwKToKKyAgICAgICAgc2VsZi5fcmVwID0gcmVwCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZXAKKworCitkZWYgX3dyaXRlX2luc3RhbmNlX3JlcHIob3V0LCB2aXNpdGVkLCBuYW1lLCBweW9wX2F0dHJkaWN0LCBhZGRyZXNzKToKKyAgICAnJydTaGFyZWQgY29kZSBmb3IgdXNlIGJ5IG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNsYXNzZXM6CisgICAgd3JpdGUgYSByZXByZXNlbnRhdGlvbiB0byBmaWxlLWxpa2Ugb2JqZWN0ICJvdXQiJycnCisgICAgb3V0LndyaXRlKCc8JykKKyAgICBvdXQud3JpdGUobmFtZSkKKworICAgICMgV3JpdGUgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgIGlmIGlzaW5zdGFuY2UocHlvcF9hdHRyZGljdCwgUHlEaWN0T2JqZWN0UHRyKToKKyAgICAgICAgb3V0LndyaXRlKCcoJykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX2FyZywgcHlvcF92YWwgaW4gcHlvcF9hdHRyZGljdC5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIG91dC53cml0ZShweW9wX2FyZy5wcm94eXZhbCh2aXNpdGVkKSkKKyAgICAgICAgICAgIG91dC53cml0ZSgnPScpCisgICAgICAgICAgICBweW9wX3ZhbC53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKKyAgICAgICAgb3V0LndyaXRlKCcpJykKKyAgICBvdXQud3JpdGUoJyBhdCByZW1vdGUgMHgleD4nICUgYWRkcmVzcykKKworCitjbGFzcyBJbnN0YW5jZVByb3h5KG9iamVjdCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xfbmFtZSwgYXR0cmRpY3QsIGFkZHJlc3MpOgorICAgICAgICBzZWxmLmNsX25hbWUgPSBjbF9uYW1lCisgICAgICAgIHNlbGYuYXR0cmRpY3QgPSBhdHRyZGljdAorICAgICAgICBzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5hdHRyZGljdCwgZGljdCk6CisgICAgICAgICAgICBrd2FyZ3MgPSAnLCAnLmpvaW4oWyIlcz0lciIgJSAoYXJnLCB2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmcsIHZhbCBpbiBzZWxmLmF0dHJkaWN0Lml0ZXJpdGVtcygpXSkKKyAgICAgICAgICAgIHJldHVybiAnPCVzKCVzKSBhdCByZW1vdGUgMHgleD4nICUgKHNlbGYuY2xfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3YXJncywgc2VsZi5hZGRyZXNzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICc8JXMgYXQgcmVtb3RlIDB4JXg+JyAlIChzZWxmLmNsX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkcmVzcykKKworZGVmIF9QeU9iamVjdF9WQVJfU0laRSh0eXBlb2JqLCBuaXRlbXMpOgorICAgIHJldHVybiAoICggdHlwZW9iai5maWVsZCgndHBfYmFzaWNzaXplJykgKworICAgICAgICAgICAgICAgbml0ZW1zICogdHlwZW9iai5maWVsZCgndHBfaXRlbXNpemUnKSArCisgICAgICAgICAgICAgICAoU0laRU9GX1ZPSURfUCAtIDEpCisgICAgICAgICAgICAgKSAmIH4oU0laRU9GX1ZPSURfUCAtIDEpCisgICAgICAgICAgICkuY2FzdChfdHlwZV9zaXplX3QpCisKK2NsYXNzIEhlYXBUeXBlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlPYmplY3QnCisKKyAgICBkZWYgZ2V0X2F0dHJfZGljdChzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIEdldCB0aGUgUHlEaWN0T2JqZWN0IHB0ciByZXByZXNlbnRpbmcgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5CisgICAgICAgIChvciBOb25lIGlmIHRoZXJlJ3MgYSBwcm9ibGVtKQorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdHlwZW9iaiA9IHNlbGYudHlwZSgpCisgICAgICAgICAgICBkaWN0b2Zmc2V0ID0gaW50X2Zyb21faW50KHR5cGVvYmouZmllbGQoJ3RwX2RpY3RvZmZzZXQnKSkKKyAgICAgICAgICAgIGlmIGRpY3RvZmZzZXQgIT0gMDoKKyAgICAgICAgICAgICAgICBpZiBkaWN0b2Zmc2V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9QeVZhck9iamVjdF9wdHIgPSBnZGIubG9va3VwX3R5cGUoJ1B5VmFyT2JqZWN0JykucG9pbnRlcigpCisgICAgICAgICAgICAgICAgICAgIHRzaXplID0gaW50X2Zyb21faW50KHNlbGYuX2dkYnZhbC5jYXN0KHR5cGVfUHlWYXJPYmplY3RfcHRyKVsnb2Jfc2l6ZSddKQorICAgICAgICAgICAgICAgICAgICBpZiB0c2l6ZSA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICB0c2l6ZSA9IC10c2l6ZQorICAgICAgICAgICAgICAgICAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHR5cGVvYmosIHRzaXplKQorICAgICAgICAgICAgICAgICAgICBkaWN0b2Zmc2V0ICs9IHNpemUKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGRpY3RvZmZzZXQgPiAwCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBkaWN0b2Zmc2V0ICUgU0laRU9GX1ZPSURfUCA9PSAwCisKKyAgICAgICAgICAgICAgICBkaWN0cHRyID0gc2VsZi5fZ2RidmFsLmNhc3QoX3R5cGVfY2hhcl9wdHIpICsgZGljdG9mZnNldAorICAgICAgICAgICAgICAgIFB5T2JqZWN0UHRyUHRyID0gUHlPYmplY3RQdHIuZ2V0X2dkYl90eXBlKCkucG9pbnRlcigpCisgICAgICAgICAgICAgICAgZGljdHB0ciA9IGRpY3RwdHIuY2FzdChQeU9iamVjdFB0clB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZGljdHB0ci5kZXJlZmVyZW5jZSgpKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBDb3JydXB0IGRhdGEgc29tZXdoZXJlOyBmYWlsIHNhZmUKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIE5vdCBmb3VuZCwgb3Igc29tZSBraW5kIG9mIGVycm9yOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAnJycKKyAgICAgICAgU3VwcG9ydCBmb3IgbmV3LXN0eWxlIGNsYXNzZXMuCisKKyAgICAgICAgQ3VycmVudGx5IHdlIGp1c3QgbG9jYXRlIHRoZSBkaWN0aW9uYXJ5IHVzaW5nIGEgdHJhbnNsaXRlcmF0aW9uIHRvCisgICAgICAgIHB5dGhvbiBvZiBfUHlPYmplY3RfR2V0RGljdFB0ciwgaWdub3JpbmcgZGVzY3JpcHRvcnMKKyAgICAgICAgJycnCisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCc8Li4uPicpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHB5b3BfYXR0cl9kaWN0ID0gc2VsZi5nZXRfYXR0cl9kaWN0KCkKKyAgICAgICAgaWYgcHlvcF9hdHRyX2RpY3Q6CisgICAgICAgICAgICBhdHRyX2RpY3QgPSBweW9wX2F0dHJfZGljdC5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXR0cl9kaWN0ID0ge30KKyAgICAgICAgdHBfbmFtZSA9IHNlbGYuc2FmZV90cF9uYW1lKCkKKworICAgICAgICAjIE5ldy1zdHlsZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIEluc3RhbmNlUHJveHkodHBfbmFtZSwgYXR0cl9kaWN0LCBsb25nKHNlbGYuX2dkYnZhbCkpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJzwuLi4+JykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBweW9wX2F0dHJkaWN0ID0gc2VsZi5nZXRfYXR0cl9kaWN0KCkKKyAgICAgICAgX3dyaXRlX2luc3RhbmNlX3JlcHIob3V0LCB2aXNpdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNhZmVfdHBfbmFtZSgpLCBweW9wX2F0dHJkaWN0LCBzZWxmLmFzX2FkZHJlc3MoKSkKKworY2xhc3MgUHJveHlFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHBfbmFtZSwgYXJncyk6CisgICAgICAgIHNlbGYudHBfbmFtZSA9IHRwX25hbWUKKyAgICAgICAgc2VsZi5hcmdzID0gYXJncworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzJXInICUgKHNlbGYudHBfbmFtZSwgc2VsZi5hcmdzKQorCitjbGFzcyBQeUJhc2VFeGNlcHRpb25PYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5QmFzZUV4Y2VwdGlvbk9iamVjdCogaS5lLiBhbiBleGNlcHRpb24KKyAgICB3aXRoaW4gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5QmFzZUV4Y2VwdGlvbk9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyguLi4pJykKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisgICAgICAgIGFyZ19wcm94eSA9IHNlbGYucHlvcF9maWVsZCgnYXJncycpLnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgIHJldHVybiBQcm94eUV4Y2VwdGlvbihzZWxmLnNhZmVfdHBfbmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3Byb3h5KQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCcoLi4uKScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKHNlbGYuc2FmZV90cF9uYW1lKCkpCisgICAgICAgIHNlbGYud3JpdGVfZmllbGRfcmVwcignYXJncycsIG91dCwgdmlzaXRlZCkKKworY2xhc3MgUHlDbGFzc09iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlDbGFzc09iamVjdCogaS5lLiBhIDxjbGFzc29iaj4KKyAgICBpbnN0YW5jZSB3aXRoaW4gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQuCisgICAgIiIiCisgICAgX3R5cGVuYW1lID0gJ1B5Q2xhc3NPYmplY3QnCisKKworY2xhc3MgQnVpbHRJbkZ1bmN0aW9uUHJveHkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWxfbmFtZSk6CisgICAgICAgIHNlbGYubWxfbmFtZSA9IG1sX25hbWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8YnVpbHQtaW4gZnVuY3Rpb24gJXM+IiAlIHNlbGYubWxfbmFtZQorCitjbGFzcyBCdWlsdEluTWV0aG9kUHJveHkob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWxfbmFtZSwgcHlvcF9tX3NlbGYpOgorICAgICAgICBzZWxmLm1sX25hbWUgPSBtbF9uYW1lCisgICAgICAgIHNlbGYucHlvcF9tX3NlbGYgPSBweW9wX21fc2VsZgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8YnVpbHQtaW4gbWV0aG9kICVzIG9mICVzIG9iamVjdCBhdCByZW1vdGUgMHgleD4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5tbF9uYW1lLAorICAgICAgICAgICAgICAgICAgIHNlbGYucHlvcF9tX3NlbGYuc2FmZV90cF9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgc2VsZi5weW9wX21fc2VsZi5hc19hZGRyZXNzKCkpCisgICAgICAgICAgICAgICAgKQorCitjbGFzcyBQeUNGdW5jdGlvbk9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlDRnVuY3Rpb25PYmplY3QqCisgICAgKHNlZSBJbmNsdWRlL21ldGhvZG9iamVjdC5oIGFuZCBPYmplY3RzL21ldGhvZG9iamVjdC5jKQorICAgICIiIgorICAgIF90eXBlbmFtZSA9ICdQeUNGdW5jdGlvbk9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgbV9tbCA9IHNlbGYuZmllbGQoJ21fbWwnKSAjIG1fbWwgaXMgYSAoUHlNZXRob2REZWYqKQorICAgICAgICBtbF9uYW1lID0gbV9tbFsnbWxfbmFtZSddLnN0cmluZygpCisKKyAgICAgICAgcHlvcF9tX3NlbGYgPSBzZWxmLnB5b3BfZmllbGQoJ21fc2VsZicpCisgICAgICAgIGlmIHB5b3BfbV9zZWxmLmlzX251bGwoKToKKyAgICAgICAgICAgIHJldHVybiBCdWlsdEluRnVuY3Rpb25Qcm94eShtbF9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEJ1aWx0SW5NZXRob2RQcm94eShtbF9uYW1lLCBweW9wX21fc2VsZikKKworCitjbGFzcyBQeUNvZGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5Q29kZU9iamVjdCogaS5lLiBhIDxjb2RlPiBpbnN0YW5jZQorICAgIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlDb2RlT2JqZWN0JworCisgICAgZGVmIGFkZHIybGluZShzZWxmLCBhZGRycSk6CisgICAgICAgICcnJworICAgICAgICBHZXQgdGhlIGxpbmUgbnVtYmVyIGZvciBhIGdpdmVuIGJ5dGVjb2RlIG9mZnNldAorCisgICAgICAgIEFuYWxvZ291cyB0byBQeUNvZGVfQWRkcjJMaW5lOyB0cmFuc2xhdGVkIGZyb20gcHNldWRvY29kZSBpbgorICAgICAgICBPYmplY3RzL2xub3RhYl9ub3Rlcy50eHQKKyAgICAgICAgJycnCisgICAgICAgIGNvX2xub3RhYiA9IHNlbGYucHlvcF9maWVsZCgnY29fbG5vdGFiJykucHJveHl2YWwoc2V0KCkpCisKKyAgICAgICAgIyBJbml0aWFsaXplIGxpbmVubyB0byBjb19maXJzdGxpbmVubyBhcyBwZXIgUHlDb2RlX0FkZHIyTGluZQorICAgICAgICAjIG5vdCAwLCBhcyBsbm90YWJfbm90ZXMudHh0IGhhcyBpdDoKKyAgICAgICAgbGluZW5vID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ2NvX2ZpcnN0bGluZW5vJykpCisKKyAgICAgICAgYWRkciA9IDAKKyAgICAgICAgZm9yIGFkZHJfaW5jciwgbGluZV9pbmNyIGluIHppcChjb19sbm90YWJbOjoyXSwgY29fbG5vdGFiWzE6OjJdKToKKyAgICAgICAgICAgIGFkZHIgKz0gb3JkKGFkZHJfaW5jcikKKyAgICAgICAgICAgIGlmIGFkZHIgPiBhZGRycToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZW5vCisgICAgICAgICAgICBsaW5lbm8gKz0gb3JkKGxpbmVfaW5jcikKKyAgICAgICAgcmV0dXJuIGxpbmVubworCisKK2NsYXNzIFB5RGljdE9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgIiIiCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGEgUHlEaWN0T2JqZWN0KiBpLmUuIGEgZGljdCBpbnN0YW5jZQorICAgIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlEaWN0T2JqZWN0JworCisgICAgZGVmIGl0ZXJpdGVtcyhzZWxmKToKKyAgICAgICAgJycnCisgICAgICAgIFlpZWxkcyBhIHNlcXVlbmNlIG9mIChQeU9iamVjdFB0ciBrZXksIFB5T2JqZWN0UHRyIHZhbHVlKSBwYWlycywKKyAgICAgICAgYW5hbGFnb3VzIHRvIGRpY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgJycnCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFfbWFzaycpICsgMSk6CisgICAgICAgICAgICBlcCA9IHNlbGYuZmllbGQoJ21hX3RhYmxlJykgKyBpCisgICAgICAgICAgICBweW9wX3ZhbHVlID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZXBbJ21lX3ZhbHVlJ10pCisgICAgICAgICAgICBpZiBub3QgcHlvcF92YWx1ZS5pc19udWxsKCk6CisgICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihlcFsnbWVfa2V5J10pCisgICAgICAgICAgICAgICAgeWllbGQgKHB5b3Bfa2V5LCBweW9wX3ZhbHVlKQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgney4uLn0nKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICBmb3IgcHlvcF9rZXksIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyaXRlbXMoKToKKyAgICAgICAgICAgIHByb3h5X2tleSA9IHB5b3Bfa2V5LnByb3h5dmFsKHZpc2l0ZWQpCisgICAgICAgICAgICBwcm94eV92YWx1ZSA9IHB5b3BfdmFsdWUucHJveHl2YWwodmlzaXRlZCkKKyAgICAgICAgICAgIHJlc3VsdFtwcm94eV9rZXldID0gcHJveHlfdmFsdWUKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCd7Li4ufScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgb3V0LndyaXRlKCd7JykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX2tleSwgcHlvcF92YWx1ZSBpbiBzZWxmLml0ZXJpdGVtcygpOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgICAgICBvdXQud3JpdGUoJzogJykKKyAgICAgICAgICAgIHB5b3BfdmFsdWUud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIG91dC53cml0ZSgnfScpCisKK2NsYXNzIFB5SW5zdGFuY2VPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeUluc3RhbmNlT2JqZWN0JworCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICByZXR1cm4gUHJveHlBbHJlYWR5VmlzaXRlZCgnPC4uLj4nKQorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICAjIEdldCBuYW1lIG9mIGNsYXNzOgorICAgICAgICBpbl9jbGFzcyA9IHNlbGYucHlvcF9maWVsZCgnaW5fY2xhc3MnKQorICAgICAgICBjbF9uYW1lID0gaW5fY2xhc3MucHlvcF9maWVsZCgnY2xfbmFtZScpLnByb3h5dmFsKHZpc2l0ZWQpCisKKyAgICAgICAgIyBHZXQgZGljdGlvbmFyeSBvZiBpbnN0YW5jZSBhdHRyaWJ1dGVzOgorICAgICAgICBpbl9kaWN0ID0gc2VsZi5weW9wX2ZpZWxkKCdpbl9kaWN0JykucHJveHl2YWwodmlzaXRlZCkKKworICAgICAgICAjIE9sZC1zdHlsZSBjbGFzczoKKyAgICAgICAgcmV0dXJuIEluc3RhbmNlUHJveHkoY2xfbmFtZSwgaW5fZGljdCwgbG9uZyhzZWxmLl9nZGJ2YWwpKQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgb3V0LndyaXRlKCc8Li4uPicpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgIyBPbGQtc3R5bGUgY2xhc3M6CisKKyAgICAgICAgIyBHZXQgbmFtZSBvZiBjbGFzczoKKyAgICAgICAgaW5fY2xhc3MgPSBzZWxmLnB5b3BfZmllbGQoJ2luX2NsYXNzJykKKyAgICAgICAgY2xfbmFtZSA9IGluX2NsYXNzLnB5b3BfZmllbGQoJ2NsX25hbWUnKS5wcm94eXZhbCh2aXNpdGVkKQorCisgICAgICAgICMgR2V0IGRpY3Rpb25hcnkgb2YgaW5zdGFuY2UgYXR0cmlidXRlczoKKyAgICAgICAgcHlvcF9pbl9kaWN0ID0gc2VsZi5weW9wX2ZpZWxkKCdpbl9kaWN0JykKKworICAgICAgICBfd3JpdGVfaW5zdGFuY2VfcmVwcihvdXQsIHZpc2l0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsX25hbWUsIHB5b3BfaW5fZGljdCwgc2VsZi5hc19hZGRyZXNzKCkpCisKK2NsYXNzIFB5TGlzdE9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5TGlzdE9iamVjdCcKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgIyBHZXQgdGhlIGdkYi5WYWx1ZSBmb3IgdGhlIChQeU9iamVjdCopIHdpdGggdGhlIGdpdmVuIGluZGV4OgorICAgICAgICBmaWVsZF9vYl9pdGVtID0gc2VsZi5maWVsZCgnb2JfaXRlbScpCisgICAgICAgIHJldHVybiBmaWVsZF9vYl9pdGVtW2ldCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCdbLi4uXScpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHJlc3VsdCA9IFtQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmW2ldKS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnb2Jfc2l6ZScpKSldCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIG91dC53cml0ZSgnWy4uLl0nKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIG91dC53cml0ZSgnWycpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2UoaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ29iX3NpemUnKSkpOgorICAgICAgICAgICAgaWYgaSA+IDA6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICBlbGVtZW50ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZltpXSkKKyAgICAgICAgICAgIGVsZW1lbnQud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIG91dC53cml0ZSgnXScpCisKK2NsYXNzIFB5TG9uZ09iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5TG9uZ09iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgJycnCisgICAgICAgIFB5dGhvbidzIEluY2x1ZGUvbG9uZ29ianJlcC5oIGhhcyB0aGlzIGRlY2xhcmF0aW9uOgorICAgICAgICAgICBzdHJ1Y3QgX2xvbmdvYmplY3QgeworICAgICAgICAgICAgICAgUHlPYmplY3RfVkFSX0hFQUQKKyAgICAgICAgICAgICAgIGRpZ2l0IG9iX2RpZ2l0WzFdOworICAgICAgICAgICB9OworCisgICAgICAgIHdpdGggdGhpcyBkZXNjcmlwdGlvbjoKKyAgICAgICAgICAgIFRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhIG51bWJlciBpcyBlcXVhbCB0bworICAgICAgICAgICAgICAgICBTVU0oZm9yIGk9MCB0aHJvdWdoIGFicyhvYl9zaXplKS0xKSBvYl9kaWdpdFtpXSAqIDIqKihTSElGVCppKQorICAgICAgICAgICAgTmVnYXRpdmUgbnVtYmVycyBhcmUgcmVwcmVzZW50ZWQgd2l0aCBvYl9zaXplIDwgMDsKKyAgICAgICAgICAgIHplcm8gaXMgcmVwcmVzZW50ZWQgYnkgb2Jfc2l6ZSA9PSAwLgorCisgICAgICAgIHdoZXJlIFNISUZUIGNhbiBiZSBlaXRoZXI6CisgICAgICAgICAgICAjZGVmaW5lIFB5TG9uZ19TSElGVCAgICAgICAgMzAKKyAgICAgICAgICAgICNkZWZpbmUgUHlMb25nX1NISUZUICAgICAgICAxNQorICAgICAgICAnJycKKyAgICAgICAgb2Jfc2l6ZSA9IGxvbmcoc2VsZi5maWVsZCgnb2Jfc2l6ZScpKQorICAgICAgICBpZiBvYl9zaXplID09IDA6CisgICAgICAgICAgICByZXR1cm4gMEwKKworICAgICAgICBvYl9kaWdpdCA9IHNlbGYuZmllbGQoJ29iX2RpZ2l0JykKKworICAgICAgICBpZiBnZGIubG9va3VwX3R5cGUoJ2RpZ2l0Jykuc2l6ZW9mID09IDI6CisgICAgICAgICAgICBTSElGVCA9IDE1TAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgU0hJRlQgPSAzMEwKKworICAgICAgICBkaWdpdHMgPSBbbG9uZyhvYl9kaWdpdFtpXSkgKiAyKiooU0hJRlQqaSkKKyAgICAgICAgICAgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2UoYWJzKG9iX3NpemUpKV0KKyAgICAgICAgcmVzdWx0ID0gc3VtKGRpZ2l0cykKKyAgICAgICAgaWYgb2Jfc2l6ZSA8IDA6CisgICAgICAgICAgICByZXN1bHQgPSAtcmVzdWx0CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiB3cml0ZV9yZXByKHNlbGYsIG91dCwgdmlzaXRlZCk6CisgICAgICAgICMgV3JpdGUgdGhpcyBvdXQgYXMgYSBQeXRob24gMyBpbnQgbGl0ZXJhbCwgaS5lLiB3aXRob3V0IHRoZSAiTCIgc3VmZml4CisgICAgICAgIHByb3h5ID0gc2VsZi5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICBvdXQud3JpdGUoIiVzIiAlIHByb3h5KQorCisKK2NsYXNzIFB5Qm9vbE9iamVjdFB0cihQeUxvbmdPYmplY3RQdHIpOgorICAgICIiIgorICAgIENsYXNzIHdyYXBwaW5nIGEgZ2RiLlZhbHVlIHRoYXQncyBhIFB5Qm9vbE9iamVjdCogaS5lLiBvbmUgb2YgdGhlIHR3bworICAgIDxib29sPiBpbnN0YW5jZXMgKFB5X1RydWUvUHlfRmFsc2UpIHdpdGhpbiB0aGUgcHJvY2VzcyBiZWluZyBkZWJ1Z2dlZC4KKyAgICAiIiIKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgIGlmIFB5TG9uZ09iamVjdFB0ci5wcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworY2xhc3MgUHlOb25lU3RydWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICAiIiIKKyAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBQeU9iamVjdCogcG9pbnRpbmcgdG8gdGhlCisgICAgc2luZ2xldG9uICh3ZSBob3BlKSBfUHlfTm9uZVN0cnVjdCB3aXRoIG9iX3R5cGUgUHlOb25lX1R5cGUKKyAgICAiIiIKKyAgICBfdHlwZW5hbWUgPSAnUHlPYmplY3QnCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgUHlGcmFtZU9iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5RnJhbWVPYmplY3QnCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2RidmFsLCBjYXN0X3RvKToKKyAgICAgICAgUHlPYmplY3RQdHIuX19pbml0X18oc2VsZiwgZ2RidmFsLCBjYXN0X3RvKQorCisgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHNlbGYuY28gPSBQeUNvZGVPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoc2VsZi5maWVsZCgnZl9jb2RlJykpCisgICAgICAgICAgICBzZWxmLmNvX25hbWUgPSBzZWxmLmNvLnB5b3BfZmllbGQoJ2NvX25hbWUnKQorICAgICAgICAgICAgc2VsZi5jb19maWxlbmFtZSA9IHNlbGYuY28ucHlvcF9maWVsZCgnY29fZmlsZW5hbWUnKQorCisgICAgICAgICAgICBzZWxmLmZfbGluZW5vID0gaW50X2Zyb21faW50KHNlbGYuZmllbGQoJ2ZfbGluZW5vJykpCisgICAgICAgICAgICBzZWxmLmZfbGFzdGkgPSBpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnZl9sYXN0aScpKQorICAgICAgICAgICAgc2VsZi5jb19ubG9jYWxzID0gaW50X2Zyb21faW50KHNlbGYuY28uZmllbGQoJ2NvX25sb2NhbHMnKSkKKyAgICAgICAgICAgIHNlbGYuY29fdmFybmFtZXMgPSBQeVR1cGxlT2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGYuY28uZmllbGQoJ2NvX3Zhcm5hbWVzJykpCisKKyAgICBkZWYgaXRlcl9sb2NhbHMoc2VsZik6CisgICAgICAgICcnJworICAgICAgICBZaWVsZCBhIHNlcXVlbmNlIG9mIChuYW1lLHZhbHVlKSBwYWlycyBvZiBQeU9iamVjdFB0ciBpbnN0YW5jZXMsIGZvcgorICAgICAgICB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoaXMgZnJhbWUKKyAgICAgICAgJycnCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZl9sb2NhbHNwbHVzID0gc2VsZi5maWVsZCgnZl9sb2NhbHNwbHVzJykKKyAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShzZWxmLmNvX25sb2NhbHMpOgorICAgICAgICAgICAgcHlvcF92YWx1ZSA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGZfbG9jYWxzcGx1c1tpXSkKKyAgICAgICAgICAgIGlmIG5vdCBweW9wX3ZhbHVlLmlzX251bGwoKToKKyAgICAgICAgICAgICAgICBweW9wX25hbWUgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmNvX3Zhcm5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHlpZWxkIChweW9wX25hbWUsIHB5b3BfdmFsdWUpCisKKyAgICBkZWYgaXRlcl9nbG9iYWxzKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGQgYSBzZXF1ZW5jZSBvZiAobmFtZSx2YWx1ZSkgcGFpcnMgb2YgUHlPYmplY3RQdHIgaW5zdGFuY2VzLCBmb3IKKyAgICAgICAgdGhlIGdsb2JhbCB2YXJpYWJsZXMgb2YgdGhpcyBmcmFtZQorICAgICAgICAnJycKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2dsb2JhbHMgPSBzZWxmLnB5b3BfZmllbGQoJ2ZfZ2xvYmFscycpCisgICAgICAgIHJldHVybiBweW9wX2dsb2JhbHMuaXRlcml0ZW1zKCkKKworICAgIGRlZiBpdGVyX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICAnJycKKyAgICAgICAgWWllbGQgYSBzZXF1ZW5jZSBvZiAobmFtZSx2YWx1ZSkgcGFpcnMgb2YgUHlPYmplY3RQdHIgaW5zdGFuY2VzLCBmb3IKKyAgICAgICAgdGhlIGJ1aWx0aW4gdmFyaWFibGVzCisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHB5b3BfYnVpbHRpbnMgPSBzZWxmLnB5b3BfZmllbGQoJ2ZfYnVpbHRpbnMnKQorICAgICAgICByZXR1cm4gcHlvcF9idWlsdGlucy5pdGVyaXRlbXMoKQorCisgICAgZGVmIGdldF92YXJfYnlfbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgJycnCisgICAgICAgIExvb2sgZm9yIHRoZSBuYW1lZCBsb2NhbCB2YXJpYWJsZSwgcmV0dXJuaW5nIGEgKFB5T2JqZWN0UHRyLCBzY29wZSkgcGFpcgorICAgICAgICB3aGVyZSBzY29wZSBpcyBhIHN0cmluZyAnbG9jYWwnLCAnZ2xvYmFsJywgJ2J1aWx0aW4nCisKKyAgICAgICAgSWYgbm90IGZvdW5kLCByZXR1cm4gKE5vbmUsIE5vbmUpCisgICAgICAgICcnJworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9sb2NhbHMoKToKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gcHlvcF9uYW1lLnByb3h5dmFsKHNldCgpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcHlvcF92YWx1ZSwgJ2xvY2FsJworICAgICAgICBmb3IgcHlvcF9uYW1lLCBweW9wX3ZhbHVlIGluIHNlbGYuaXRlcl9nbG9iYWxzKCk6CisgICAgICAgICAgICBpZiBuYW1lID09IHB5b3BfbmFtZS5wcm94eXZhbChzZXQoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5b3BfdmFsdWUsICdnbG9iYWwnCisgICAgICAgIGZvciBweW9wX25hbWUsIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyX2J1aWx0aW5zKCk6CisgICAgICAgICAgICBpZiBuYW1lID09IHB5b3BfbmFtZS5wcm94eXZhbChzZXQoKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHB5b3BfdmFsdWUsICdidWlsdGluJworICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQorCisgICAgZGVmIGZpbGVuYW1lKHNlbGYpOgorICAgICAgICAnJydHZXQgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgUHl0aG9uIHNvdXJjZSBmaWxlLCBhcyBhIHN0cmluZycnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybiAnKGZyYW1lIGluZm9ybWF0aW9uIG9wdGltaXplZCBvdXQpJworICAgICAgICByZXR1cm4gc2VsZi5jb19maWxlbmFtZS5wcm94eXZhbChzZXQoKSkKKworICAgIGRlZiBjdXJyZW50X2xpbmVfbnVtKHNlbGYpOgorICAgICAgICAnJydHZXQgY3VycmVudCBsaW5lIG51bWJlciBhcyBhbiBpbnRlZ2VyICgxLWJhc2VkKQorCisgICAgICAgIFRyYW5zbGF0ZWQgZnJvbSBQeUZyYW1lX0dldExpbmVOdW1iZXIgYW5kIFB5Q29kZV9BZGRyMkxpbmUKKworICAgICAgICBTZWUgT2JqZWN0cy9sbm90YWJfbm90ZXMudHh0CisgICAgICAgICcnJworICAgICAgICBpZiBzZWxmLmlzX29wdGltaXplZF9vdXQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZfdHJhY2UgPSBzZWxmLmZpZWxkKCdmX3RyYWNlJykKKyAgICAgICAgaWYgbG9uZyhmX3RyYWNlKSAhPSAwOgorICAgICAgICAgICAgIyB3ZSBoYXZlIGEgbm9uLU5VTEwgZl90cmFjZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZfbGluZW5vCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjdHJ5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY28uYWRkcjJsaW5lKHNlbGYuZl9sYXN0aSkKKyAgICAgICAgICAgICNleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgICAgcmV0dXJuIHNlbGYuZl9saW5lbm8KKworICAgIGRlZiBjdXJyZW50X2xpbmUoc2VsZik6CisgICAgICAgICcnJ0dldCB0aGUgdGV4dCBvZiB0aGUgY3VycmVudCBzb3VyY2UgbGluZSBhcyBhIHN0cmluZywgd2l0aCBhIHRyYWlsaW5nCisgICAgICAgIG5ld2xpbmUgY2hhcmFjdGVyJycnCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW1pemVkX291dCgpOgorICAgICAgICAgICAgcmV0dXJuICcoZnJhbWUgaW5mb3JtYXRpb24gb3B0aW1pemVkIG91dCknCisgICAgICAgIGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZSgpCisgICAgICAgIHdpdGggb3Blbihvc19mc2VuY29kZShmaWxlbmFtZSksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGFsbF9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICMgQ29udmVydCBmcm9tIDEtYmFzZWQgY3VycmVudF9saW5lX251bSB0byAwLWJhc2VkIGxpc3Qgb2Zmc2V0OgorICAgICAgICAgICAgcmV0dXJuIGFsbF9saW5lc1tzZWxmLmN1cnJlbnRfbGluZV9udW0oKS0xXQorCisgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpbWl6ZWRfb3V0KCk6CisgICAgICAgICAgICBvdXQud3JpdGUoJyhmcmFtZSBpbmZvcm1hdGlvbiBvcHRpbWl6ZWQgb3V0KScpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgb3V0LndyaXRlKCdGcmFtZSAweCV4LCBmb3IgZmlsZSAlcywgbGluZSAlaSwgaW4gJXMgKCcKKyAgICAgICAgICAgICAgICAgICUgKHNlbGYuYXNfYWRkcmVzcygpLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb19maWxlbmFtZS5wcm94eXZhbCh2aXNpdGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9saW5lX251bSgpLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb19uYW1lLnByb3h5dmFsKHZpc2l0ZWQpKSkKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIGZvciBweW9wX25hbWUsIHB5b3BfdmFsdWUgaW4gc2VsZi5pdGVyX2xvY2FscygpOgorICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorCisgICAgICAgICAgICBvdXQud3JpdGUocHlvcF9uYW1lLnByb3h5dmFsKHZpc2l0ZWQpKQorICAgICAgICAgICAgb3V0LndyaXRlKCc9JykKKyAgICAgICAgICAgIHB5b3BfdmFsdWUud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisKKyAgICAgICAgb3V0LndyaXRlKCcpJykKKworY2xhc3MgUHlTZXRPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVNldE9iamVjdCcKKworICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKKyAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgorICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgorICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyVzKC4uLiknICUgc2VsZi5zYWZlX3RwX25hbWUoKSkKKyAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCisKKyAgICAgICAgbWVtYmVycyA9IFtdCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDA6CisgICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgorICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLmFwcGVuZChrZXlfcHJveHkpCisgICAgICAgIGlmIHNlbGYuc2FmZV90cF9uYW1lKCkgPT0gJ2Zyb3plbnNldCc6CisgICAgICAgICAgICByZXR1cm4gZnJvemVuc2V0KG1lbWJlcnMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2V0KG1lbWJlcnMpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEVtdWxhdGUgUHl0aG9uIDMncyBzZXRfcmVwcgorICAgICAgICB0cF9uYW1lID0gc2VsZi5zYWZlX3RwX25hbWUoKQorCisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIG91dC53cml0ZSgnKC4uLiknKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgICMgUHl0aG9uIDMncyBzZXRfcmVwciBzcGVjaWFsLWNhc2VzIHRoZSBlbXB0eSBzZXQ6CisgICAgICAgIGlmIG5vdCBzZWxmLmZpZWxkKCd1c2VkJyk6CisgICAgICAgICAgICBvdXQud3JpdGUodHBfbmFtZSkKKyAgICAgICAgICAgIG91dC53cml0ZSgnKCknKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBQeXRob24gMyB1c2VzIHt9IGZvciBzZXQgbGl0ZXJhbHM6CisgICAgICAgIGlmIHRwX25hbWUgIT0gJ3NldCc6CisgICAgICAgICAgICBvdXQud3JpdGUodHBfbmFtZSkKKyAgICAgICAgICAgIG91dC53cml0ZSgnKCcpCisKKyAgICAgICAgb3V0LndyaXRlKCd7JykKKyAgICAgICAgZmlyc3QgPSBUcnVlCisgICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKKyAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KKyAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQorICAgICAgICAgICAgaWYga2V5ICE9IDA6CisgICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCisgICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkgIyBGSVhNRSEKKyAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0OgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIG91dC53cml0ZSgnfScpCisKKyAgICAgICAgaWYgdHBfbmFtZSAhPSAnc2V0JzoKKyAgICAgICAgICAgIG91dC53cml0ZSgnKScpCisKKworY2xhc3MgUHlCeXRlc09iamVjdFB0cihQeU9iamVjdFB0cik6CisgICAgX3R5cGVuYW1lID0gJ1B5Qnl0ZXNPYmplY3QnCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgZmllbGRfb2Jfc2l6ZSA9IHNlbGYuZmllbGQoJ29iX3NpemUnKQorICAgICAgICBmaWVsZF9vYl9zdmFsID0gc2VsZi5maWVsZCgnb2Jfc3ZhbCcpCisgICAgICAgIGNoYXJfcHRyID0gZmllbGRfb2Jfc3ZhbC5hZGRyZXNzLmNhc3QoX3R5cGVfdW5zaWduZWRfY2hhcl9wdHIpCisgICAgICAgIHJldHVybiAnJy5qb2luKFtjaHIoY2hhcl9wdHJbaV0pIGZvciBpIGluIHNhZmVfcmFuZ2UoZmllbGRfb2Jfc2l6ZSldKQorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpCisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIFdyaXRlIHRoaXMgb3V0IGFzIGEgUHl0aG9uIDMgYnl0ZXMgbGl0ZXJhbCwgaS5lLiB3aXRoIGEgImIiIHByZWZpeAorCisgICAgICAgICMgR2V0IGEgUHlTdHJpbmdPYmplY3QqIHdpdGhpbiB0aGUgUHl0aG9uIDIgZ2RiIHByb2Nlc3M6CisgICAgICAgIHByb3h5ID0gc2VsZi5wcm94eXZhbCh2aXNpdGVkKQorCisgICAgICAgICMgVHJhbnNsaXRlcmF0aW9uIG9mIFB5dGhvbiAzJ3MgT2JqZWN0cy9ieXRlc29iamVjdC5jOlB5Qnl0ZXNfUmVwcgorICAgICAgICAjIHRvIFB5dGhvbiAyIGNvZGU6CisgICAgICAgIHF1b3RlID0gIiciCisgICAgICAgIGlmICInIiBpbiBwcm94eSBhbmQgbm90ICciJyBpbiBwcm94eToKKyAgICAgICAgICAgIHF1b3RlID0gJyInCisgICAgICAgIG91dC53cml0ZSgnYicpCisgICAgICAgIG91dC53cml0ZShxdW90ZSkKKyAgICAgICAgZm9yIGJ5dGUgaW4gcHJveHk6CisgICAgICAgICAgICBpZiBieXRlID09IHF1b3RlIG9yIGJ5dGUgPT0gJ1xcJzoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ1xcJykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoYnl0ZSkKKyAgICAgICAgICAgIGVsaWYgYnl0ZSA9PSAnXHQnOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFx0JykKKyAgICAgICAgICAgIGVsaWYgYnl0ZSA9PSAnXG4nOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFxuJykKKyAgICAgICAgICAgIGVsaWYgYnl0ZSA9PSAnXHInOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFxyJykKKyAgICAgICAgICAgIGVsaWYgYnl0ZSA8ICcgJyBvciBvcmQoYnl0ZSkgPj0gMHg3ZjoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ1xceCcpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1sob3JkKGJ5dGUpICYgMHhmMCkgPj4gNF0pCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1tvcmQoYnl0ZSkgJiAweGZdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoYnl0ZSkKKyAgICAgICAgb3V0LndyaXRlKHF1b3RlKQorCitjbGFzcyBQeVR1cGxlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlUdXBsZU9iamVjdCcKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgIyBHZXQgdGhlIGdkYi5WYWx1ZSBmb3IgdGhlIChQeU9iamVjdCopIHdpdGggdGhlIGdpdmVuIGluZGV4OgorICAgICAgICBmaWVsZF9vYl9pdGVtID0gc2VsZi5maWVsZCgnb2JfaXRlbScpCisgICAgICAgIHJldHVybiBmaWVsZF9vYl9pdGVtW2ldCisKKyAgICBkZWYgcHJveHl2YWwoc2VsZiwgdmlzaXRlZCk6CisgICAgICAgICMgR3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBsb29wczoKKyAgICAgICAgaWYgc2VsZi5hc19hZGRyZXNzKCkgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybiBQcm94eUFscmVhZHlWaXNpdGVkKCcoLi4uKScpCisgICAgICAgIHZpc2l0ZWQuYWRkKHNlbGYuYXNfYWRkcmVzcygpKQorCisgICAgICAgIHJlc3VsdCA9IHR1cGxlKFtQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmW2ldKS5wcm94eXZhbCh2aXNpdGVkKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gc2FmZV9yYW5nZShpbnRfZnJvbV9pbnQoc2VsZi5maWVsZCgnb2Jfc2l6ZScpKSldKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIEd1YXJkIGFnYWluc3QgaW5maW5pdGUgbG9vcHM6CisgICAgICAgIGlmIHNlbGYuYXNfYWRkcmVzcygpIGluIHZpc2l0ZWQ6CisgICAgICAgICAgICBvdXQud3JpdGUoJyguLi4pJykKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFkZChzZWxmLmFzX2FkZHJlc3MoKSkKKworICAgICAgICBvdXQud3JpdGUoJygnKQorICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKGludF9mcm9tX2ludChzZWxmLmZpZWxkKCdvYl9zaXplJykpKToKKyAgICAgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnLCAnKQorICAgICAgICAgICAgZWxlbWVudCA9IFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKHNlbGZbaV0pCisgICAgICAgICAgICBlbGVtZW50LndyaXRlX3JlcHIob3V0LCB2aXNpdGVkKQorICAgICAgICBpZiBzZWxmLmZpZWxkKCdvYl9zaXplJykgPT0gMToKKyAgICAgICAgICAgIG91dC53cml0ZSgnLCknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0LndyaXRlKCcpJykKKworY2xhc3MgUHlUeXBlT2JqZWN0UHRyKFB5T2JqZWN0UHRyKToKKyAgICBfdHlwZW5hbWUgPSAnUHlUeXBlT2JqZWN0JworCisKK2RlZiBfdW5pY2hyX2lzX3ByaW50YWJsZShjaGFyKToKKyAgICAjIExvZ2ljIGFkYXB0ZWQgZnJvbSBQeXRob24gMydzIFRvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5CisgICAgaWYgY2hhciA9PSB1IiAiOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGltcG9ydCB1bmljb2RlZGF0YQorICAgIHJldHVybiB1bmljb2RlZGF0YS5jYXRlZ29yeShjaGFyKSBub3QgaW4gKCJDIiwgIloiKQorCitpZiBzeXMubWF4dW5pY29kZSA+PSAweDEwMDAwOgorICAgIF91bmljaHIgPSB1bmljaHIKK2Vsc2U6CisgICAgIyBOZWVkZWQgZm9yIHByb3BlciBzdXJyb2dhdGUgc3VwcG9ydCBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBpbiBnZGIKKyAgICBkZWYgX3VuaWNocih4KToKKyAgICAgICAgaWYgeCA8IDB4MTAwMDA6CisgICAgICAgICAgICByZXR1cm4gdW5pY2hyKHgpCisgICAgICAgIHggLT0gMHgxMDAwMAorICAgICAgICBjaDEgPSAweEQ4MDAgfCAoeCA+PiAxMCkKKyAgICAgICAgY2gyID0gMHhEQzAwIHwgKHggJiAweDNGRikKKyAgICAgICAgcmV0dXJuIHVuaWNocihjaDEpICsgdW5pY2hyKGNoMikKKworCitjbGFzcyBQeVVuaWNvZGVPYmplY3RQdHIoUHlPYmplY3RQdHIpOgorICAgIF90eXBlbmFtZSA9ICdQeVVuaWNvZGVPYmplY3QnCisKKyAgICBkZWYgY2hhcl93aWR0aChzZWxmKToKKyAgICAgICAgX3R5cGVfUHlfVU5JQ09ERSA9IGdkYi5sb29rdXBfdHlwZSgnUHlfVU5JQ09ERScpCisgICAgICAgIHJldHVybiBfdHlwZV9QeV9VTklDT0RFLnNpemVvZgorCisgICAgZGVmIHByb3h5dmFsKHNlbGYsIHZpc2l0ZWQpOgorICAgICAgICAjIEZyb20gdW5pY29kZW9iamVjdC5oOgorICAgICAgICAjICAgICBQeV9zc2l6ZV90IGxlbmd0aDsgIC8qIExlbmd0aCBvZiByYXcgVW5pY29kZSBkYXRhIGluIGJ1ZmZlciAqLworICAgICAgICAjICAgICBQeV9VTklDT0RFICpzdHI7ICAgIC8qIFJhdyBVbmljb2RlIGJ1ZmZlciAqLworICAgICAgICBmaWVsZF9sZW5ndGggPSBsb25nKHNlbGYuZmllbGQoJ2xlbmd0aCcpKQorICAgICAgICBmaWVsZF9zdHIgPSBzZWxmLmZpZWxkKCdzdHInKQorCisgICAgICAgICMgR2F0aGVyIGEgbGlzdCBvZiBpbnRzIGZyb20gdGhlIFB5X1VOSUNPREUgYXJyYXk7IHRoZXNlIGFyZSBlaXRoZXIKKyAgICAgICAgIyBVQ1MtMiBvciBVQ1MtNCBjb2RlIHBvaW50czoKKyAgICAgICAgaWYgc2VsZi5jaGFyX3dpZHRoKCkgPiAyOgorICAgICAgICAgICAgUHlfVU5JQ09ERXMgPSBbaW50KGZpZWxkX3N0cltpXSkgZm9yIGkgaW4gc2FmZV9yYW5nZShmaWVsZF9sZW5ndGgpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBIG1vcmUgZWxhYm9yYXRlIHJvdXRpbmUgaWYgc2l6ZW9mKFB5X1VOSUNPREUpIGlzIDIgaW4gdGhlCisgICAgICAgICAgICAjIGluZmVyaW9yIHByb2Nlc3M6IHdlIG11c3Qgam9pbiBzdXJyb2dhdGUgcGFpcnMuCisgICAgICAgICAgICBQeV9VTklDT0RFcyA9IFtdCisgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgbGltaXQgPSBzYWZldHlfbGltaXQoZmllbGRfbGVuZ3RoKQorICAgICAgICAgICAgd2hpbGUgaSA8IGxpbWl0OgorICAgICAgICAgICAgICAgIHVjcyA9IGludChmaWVsZF9zdHJbaV0pCisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgaWYgdWNzIDwgMHhEODAwIG9yIHVjcyA+PSAweERDMDAgb3IgaSA9PSBmaWVsZF9sZW5ndGg6CisgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVzLmFwcGVuZCh1Y3MpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGJlIGEgc3Vycm9nYXRlIHBhaXIuCisgICAgICAgICAgICAgICAgdWNzMiA9IGludChmaWVsZF9zdHJbaV0pCisgICAgICAgICAgICAgICAgaWYgdWNzMiA8IDB4REMwMCBvciB1Y3MyID4gMHhERkZGOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGNvZGUgPSAodWNzICYgMHgwM0ZGKSA8PCAxMAorICAgICAgICAgICAgICAgIGNvZGUgfD0gdWNzMiAmIDB4MDNGRgorICAgICAgICAgICAgICAgIGNvZGUgKz0gMHgwMDAxMDAwMAorICAgICAgICAgICAgICAgIFB5X1VOSUNPREVzLmFwcGVuZChjb2RlKQorICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICMgQ29udmVydCB0aGUgaW50IGNvZGUgcG9pbnRzIHRvIHVuaWNvZGUgY2hhcmFjdGVycywgYW5kIGdlbmVyYXRlIGEKKyAgICAgICAgIyBsb2NhbCB1bmljb2RlIGluc3RhbmNlLgorICAgICAgICAjIFRoaXMgc3BsaXRzIHN1cnJvZ2F0ZSBwYWlycyBpZiBzaXplb2YoUHlfVU5JQ09ERSkgaXMgMiBoZXJlIChpbiBnZGIpLgorICAgICAgICByZXN1bHQgPSB1Jycuam9pbihbX3VuaWNocih1Y3MpIGZvciB1Y3MgaW4gUHlfVU5JQ09ERXNdKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgd3JpdGVfcmVwcihzZWxmLCBvdXQsIHZpc2l0ZWQpOgorICAgICAgICAjIFdyaXRlIHRoaXMgb3V0IGFzIGEgUHl0aG9uIDMgc3RyIGxpdGVyYWwsIGkuZS4gd2l0aG91dCBhICJ1IiBwcmVmaXgKKworICAgICAgICAjIEdldCBhIFB5VW5pY29kZU9iamVjdCogd2l0aGluIHRoZSBQeXRob24gMiBnZGIgcHJvY2VzczoKKyAgICAgICAgcHJveHkgPSBzZWxmLnByb3h5dmFsKHZpc2l0ZWQpCisKKyAgICAgICAgIyBUcmFuc2xpdGVyYXRpb24gb2YgUHl0aG9uIDMncyBPYmplY3QvdW5pY29kZW9iamVjdC5jOnVuaWNvZGVfcmVwcgorICAgICAgICAjIHRvIFB5dGhvbiAyOgorICAgICAgICBpZiAiJyIgaW4gcHJveHkgYW5kICciJyBub3QgaW4gcHJveHk6CisgICAgICAgICAgICBxdW90ZSA9ICciJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcXVvdGUgPSAiJyIKKyAgICAgICAgb3V0LndyaXRlKHF1b3RlKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4ocHJveHkpOgorICAgICAgICAgICAgY2ggPSBwcm94eVtpXQorICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgICMgRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMKKyAgICAgICAgICAgIGlmIGNoID09IHF1b3RlIG9yIGNoID09ICdcXCc6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCdcXCcpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKGNoKQorCisgICAgICAgICAgICAjICBNYXAgc3BlY2lhbCB3aGl0ZXNwYWNlIHRvICdcdCcsIFxuJywgJ1xyJworICAgICAgICAgICAgZWxpZiBjaCA9PSAnXHQnOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFx0JykKKyAgICAgICAgICAgIGVsaWYgY2ggPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ1xcbicpCisgICAgICAgICAgICBlbGlmIGNoID09ICdccic6CisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCdcXHInKQorCisgICAgICAgICAgICAjIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxpZiBjaCA8ICcgJyBvciBjaCA9PSAweDdGOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFx4JykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhvcmQoY2gpID4+IDQpICYgMHgwMDBGXSkKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzW29yZChjaCkgJiAweDAwMEZdKQorCisgICAgICAgICAgICAjIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcworICAgICAgICAgICAgZWxpZiBvcmQoY2gpIDwgMHg3RjoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoY2gpCisKKyAgICAgICAgICAgICMgTm9uLUFTQ0lJIGNoYXJhY3RlcnMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdWNzID0gY2gKKyAgICAgICAgICAgICAgICBjaDIgPSBOb25lCisgICAgICAgICAgICAgICAgaWYgc3lzLm1heHVuaWNvZGUgPCAweDEwMDAwOgorICAgICAgICAgICAgICAgICAgICAjIElmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGhlcmUgKGluIGdkYiksIGpvaW4KKyAgICAgICAgICAgICAgICAgICAgIyBzdXJyb2dhdGUgcGFpcnMgYmVmb3JlIGNhbGxpbmcgX3VuaWNocl9pc19wcmludGFibGUuCisgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbGVuKHByb3h5KQorICAgICAgICAgICAgICAgICAgICBhbmQgMHhEODAwIDw9IG9yZChjaCkgPCAweERDMDAgXAorICAgICAgICAgICAgICAgICAgICBhbmQgMHhEQzAwIDw9IG9yZChwcm94eVtpXSkgPD0gMHhERkZGKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoMiA9IHByb3h5W2ldCisgICAgICAgICAgICAgICAgICAgICAgICB1Y3MgPSBjaCArIGNoMgorICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgICAgICAjIFVuZm9ydHVhdGVseSwgUHl0aG9uIDIncyB1bmljb2RlIHR5cGUgZG9lc24ndCBzZWVtCisgICAgICAgICAgICAgICAgIyB0byBleHBvc2UgdGhlICJpc3ByaW50YWJsZSIgbWV0aG9kCisgICAgICAgICAgICAgICAgcHJpbnRhYmxlID0gX3VuaWNocl9pc19wcmludGFibGUodWNzKQorICAgICAgICAgICAgICAgIGlmIHByaW50YWJsZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdWNzLmVuY29kZShFTkNPRElORykKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50YWJsZSA9IEZhbHNlCisKKyAgICAgICAgICAgICAgICAjIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICMgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcHJpbnRhYmxlOgorICAgICAgICAgICAgICAgICAgICBpZiBjaDIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIE1hdGNoIFB5dGhvbiAzJ3MgcmVwcmVzZW50YXRpb24gb2Ygbm9uLXByaW50YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgIyB3aWRlIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gKG9yZChjaCkgJiAweDAzRkYpIDw8IDEwCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIHw9IG9yZChjaDIpICYgMHgwM0ZGCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlICs9IDB4MDAwMTAwMDAKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBvcmQodWNzKQorCisgICAgICAgICAgICAgICAgICAgICMgTWFwIDgtYml0IGNoYXJhY3RlcnMgdG8gJ1xceGhoJworICAgICAgICAgICAgICAgICAgICBpZiBjb2RlIDw9IDB4ZmY6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ1xceCcpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhjb2RlID4+IDQpICYgMHgwMDBGXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShoZXhkaWdpdHNbY29kZSAmIDB4MDAwRl0pCisgICAgICAgICAgICAgICAgICAgICMgTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JworICAgICAgICAgICAgICAgICAgICBlbGlmIGNvZGUgPj0gMHgxMDAwMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXFxVJykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShoZXhkaWdpdHNbKGNvZGUgPj4gMjgpICYgMHgwMDAwMDAwRl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhjb2RlID4+IDI0KSAmIDB4MDAwMDAwMEZdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1soY29kZSA+PiAyMCkgJiAweDAwMDAwMDBGXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShoZXhkaWdpdHNbKGNvZGUgPj4gMTYpICYgMHgwMDAwMDAwRl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhjb2RlID4+IDEyKSAmIDB4MDAwMDAwMEZdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1soY29kZSA+PiA4KSAmIDB4MDAwMDAwMEZdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1soY29kZSA+PiA0KSAmIDB4MDAwMDAwMEZdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1tjb2RlICYgMHgwMDAwMDAwRl0pCisgICAgICAgICAgICAgICAgICAgICMgTWFwIDE2LWJpdCBjaGFyYWN0ZXJzIHRvICdcdXh4eHgnCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJ1xcdScpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhjb2RlID4+IDEyKSAmIDB4MDAwRl0pCisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoaGV4ZGlnaXRzWyhjb2RlID4+IDgpICYgMHgwMDBGXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShoZXhkaWdpdHNbKGNvZGUgPj4gNCkgJiAweDAwMEZdKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKGhleGRpZ2l0c1tjb2RlICYgMHgwMDBGXSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIENvcHkgY2hhcmFjdGVycyBhcy1pcworICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoY2gpCisgICAgICAgICAgICAgICAgICAgIGlmIGNoMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC53cml0ZShjaDIpCisKKyAgICAgICAgb3V0LndyaXRlKHF1b3RlKQorCisKKworCitkZWYgaW50X2Zyb21faW50KGdkYnZhbCk6CisgICAgcmV0dXJuIGludChzdHIoZ2RidmFsKSkKKworCitkZWYgc3RyaW5naWZ5KHZhbCk6CisgICAgIyBUT0RPOiByZXByKCkgcHV0cyBldmVyeXRoaW5nIG9uIG9uZSBsaW5lOyBwZm9ybWF0IGNhbiBiZSBuaWNlciwgYnV0CisgICAgIyBjYW4gbGVhZCB0byB2LmxvbmcgcmVzdWx0czsgdGhpcyBmdW5jdGlvbiBpc29sYXRlcyB0aGUgY2hvaWNlCisgICAgaWYgVHJ1ZToKKyAgICAgICAgcmV0dXJuIHJlcHIodmFsKQorICAgIGVsc2U6CisgICAgICAgIGZyb20gcHByaW50IGltcG9ydCBwZm9ybWF0CisgICAgICAgIHJldHVybiBwZm9ybWF0KHZhbCkKKworCitjbGFzcyBQeU9iamVjdFB0clByaW50ZXI6CisgICAgIlByaW50cyBhIChQeU9iamVjdCopIgorCisgICAgZGVmIF9faW5pdF9fIChzZWxmLCBnZGJ2YWwpOgorICAgICAgICBzZWxmLmdkYnZhbCA9IGdkYnZhbAorCisgICAgZGVmIHRvX3N0cmluZyAoc2VsZik6CisgICAgICAgIHB5b3AgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihzZWxmLmdkYnZhbCkKKyAgICAgICAgaWYgVHJ1ZToKKyAgICAgICAgICAgIHJldHVybiBweW9wLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgR2VuZXJhdGUgZnVsbCBwcm94eSB2YWx1ZSB0aGVuIHN0cmluZ2lmeSBpdC4KKyAgICAgICAgICAgICMgRG9pbmcgc28gY291bGQgYmUgZXhwZW5zaXZlCisgICAgICAgICAgICBwcm94eXZhbCA9IHB5b3AucHJveHl2YWwoc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5naWZ5KHByb3h5dmFsKQorCitkZWYgcHJldHR5X3ByaW50ZXJfbG9va3VwKGdkYnZhbCk6CisgICAgdHlwZSA9IGdkYnZhbC50eXBlLnVucXVhbGlmaWVkKCkKKyAgICBpZiB0eXBlLmNvZGUgPT0gZ2RiLlRZUEVfQ09ERV9QVFI6CisgICAgICAgIHR5cGUgPSB0eXBlLnRhcmdldCgpLnVucXVhbGlmaWVkKCkKKyAgICAgICAgdCA9IHN0cih0eXBlKQorICAgICAgICBpZiB0IGluICgiUHlPYmplY3QiLCAiUHlGcmFtZU9iamVjdCIsICJQeVVuaWNvZGVPYmplY3QiKToKKyAgICAgICAgICAgIHJldHVybiBQeU9iamVjdFB0clByaW50ZXIoZ2RidmFsKQorCisiIiIKK0R1cmluZyBkZXZlbG9wbWVudCwgSSd2ZSBiZWVuIG1hbnVhbGx5IGludm9raW5nIHRoZSBjb2RlIGluIHRoaXMgd2F5OgorKGdkYikgcHl0aG9uCisKK2ltcG9ydCBzeXMKK3N5cy5wYXRoLmFwcGVuZCgnL2hvbWUvZGF2aWQvY29kaW5nL3B5dGhvbi1nZGInKQoraW1wb3J0IGxpYnB5dGhvbgorZW5kCisKK3RoZW4gcmVsb2FkaW5nIGl0IGFmdGVyIGVhY2ggZWRpdCBsaWtlIHRoaXM6CisoZ2RiKSBweXRob24gcmVsb2FkKGxpYnB5dGhvbikKKworVGhlIGZvbGxvd2luZyBjb2RlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgcHJldHR5cHJpbnRlciBpcyByZWdpc3RlcmVkCitpZiB0aGUgY29kZSBpcyBhdXRvbG9hZGVkIGJ5IGdkYiB3aGVuIHZpc2l0aW5nIGxpYnB5dGhvbi5zbywgcHJvdmlkZWQKK3RoYXQgdGhpcyBweXRob24gZmlsZSBpcyBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcGF0aCBhcyB0aGUgbGlicmFyeSAob3IgaXRzCisuZGVidWcgZmlsZSkgcGx1cyBhICItZ2RiLnB5IiBzdWZmaXgsIGUuZzoKKyAgL3Vzci9saWIvbGlicHl0aG9uMi42LnNvLjEuMC1nZGIucHkKKyAgL3Vzci9saWIvZGVidWcvdXNyL2xpYi9saWJweXRob24yLjYuc28uMS4wLmRlYnVnLWdkYi5weQorIiIiCitkZWYgcmVnaXN0ZXIgKG9iaik6CisgICAgaWYgb2JqID09IE5vbmU6CisgICAgICAgIG9iaiA9IGdkYgorCisgICAgIyBXaXJlIHVwIHRoZSBwcmV0dHktcHJpbnRlcgorICAgIG9iai5wcmV0dHlfcHJpbnRlcnMuYXBwZW5kKHByZXR0eV9wcmludGVyX2xvb2t1cCkKKworcmVnaXN0ZXIgKGdkYi5jdXJyZW50X29iamZpbGUgKCkpCisKKworCisjIFVuZm9ydHVuYXRlbHksIHRoZSBleGFjdCBBUEkgZXhwb3NlZCBieSB0aGUgZ2RiIG1vZHVsZSB2YXJpZXMgc29tZXdoYXQKKyMgZnJvbSBidWlsZCB0byBidWlsZAorIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTgyNzk/I21zZzEwMjI3NgorCitjbGFzcyBGcmFtZShvYmplY3QpOgorICAgICcnJworICAgIFdyYXBwZXIgZm9yIGdkYi5GcmFtZSwgYWRkaW5nIHZhcmlvdXMgbWV0aG9kcworICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBnZGJmcmFtZSk6CisgICAgICAgIHNlbGYuX2dkYmZyYW1lID0gZ2RiZnJhbWUKKworICAgIGRlZiBvbGRlcihzZWxmKToKKyAgICAgICAgb2xkZXIgPSBzZWxmLl9nZGJmcmFtZS5vbGRlcigpCisgICAgICAgIGlmIG9sZGVyOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKG9sZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBuZXdlcihzZWxmKToKKyAgICAgICAgbmV3ZXIgPSBzZWxmLl9nZGJmcmFtZS5uZXdlcigpCisgICAgICAgIGlmIG5ld2VyOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1lKG5ld2VyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBzZWxlY3Qoc2VsZik6CisgICAgICAgICcnJ0lmIHN1cHBvcnRlZCwgc2VsZWN0IHRoaXMgZnJhbWUgYW5kIHJldHVybiBUcnVlOyByZXR1cm4gRmFsc2UgaWYgdW5zdXBwb3J0ZWQKKworICAgICAgICBOb3QgYWxsIGJ1aWxkcyBoYXZlIGEgZ2RiLkZyYW1lLnNlbGVjdCBtZXRob2Q7IHNlZW1zIHRvIGJlIHByZXNlbnQgb24gRmVkb3JhIDEyCisgICAgICAgIG9ud2FyZHMsIGJ1dCBhYnNlbnQgb24gVWJ1bnR1IGJ1aWxkYm90JycnCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuX2dkYmZyYW1lLCAnc2VsZWN0Jyk6CisgICAgICAgICAgICBwcmludCAoJ1VuYWJsZSB0byBzZWxlY3QgZnJhbWU6ICcKKyAgICAgICAgICAgICAgICAgICAndGhpcyBidWlsZCBvZiBnZGIgZG9lcyBub3QgZXhwb3NlIGEgZ2RiLkZyYW1lLnNlbGVjdCBtZXRob2QnKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuX2dkYmZyYW1lLnNlbGVjdCgpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZ2V0X2luZGV4KHNlbGYpOgorICAgICAgICAnJydDYWxjdWxhdGUgaW5kZXggb2YgZnJhbWUsIHN0YXJ0aW5nIGF0IDAgZm9yIHRoZSBuZXdlc3QgZnJhbWUgd2l0aGluCisgICAgICAgIHRoaXMgdGhyZWFkJycnCisgICAgICAgIGluZGV4ID0gMAorICAgICAgICAjIEdvIGRvd24gdW50aWwgeW91IHJlYWNoIHRoZSBuZXdlc3QgZnJhbWU6CisgICAgICAgIGl0ZXJfZnJhbWUgPSBzZWxmCisgICAgICAgIHdoaWxlIGl0ZXJfZnJhbWUubmV3ZXIoKToKKyAgICAgICAgICAgIGluZGV4ICs9IDEKKyAgICAgICAgICAgIGl0ZXJfZnJhbWUgPSBpdGVyX2ZyYW1lLm5ld2VyKCkKKyAgICAgICAgcmV0dXJuIGluZGV4CisKKyAgICBkZWYgaXNfZXZhbGZyYW1lZXgoc2VsZik6CisgICAgICAgICcnJ0lzIHRoaXMgYSBQeUV2YWxfRXZhbEZyYW1lRXggZnJhbWU/JycnCisgICAgICAgIGlmIHNlbGYuX2dkYmZyYW1lLm5hbWUoKSA9PSAnUHlFdmFsX0V2YWxGcmFtZUV4JzoKKyAgICAgICAgICAgICcnJworICAgICAgICAgICAgSSBiZWxpZXZlIHdlIGFsc28gbmVlZCB0byBmaWx0ZXIgb24gdGhlIGlubGluZQorICAgICAgICAgICAgc3RydWN0IGZyYW1lX2lkLmlubGluZV9kZXB0aCwgb25seSByZWdhcmRpbmcgZnJhbWVzIHdpdGgKKyAgICAgICAgICAgIGFuIGlubGluZSBkZXB0aCBvZiAwIGFzIGFjdHVhbGx5IGJlaW5nIHRoaXMgZnVuY3Rpb24KKworICAgICAgICAgICAgU28gd2UgcmVqZWN0IHRob3NlIHdpdGggdHlwZSBnZGIuSU5MSU5FX0ZSQU1FCisgICAgICAgICAgICAnJycKKyAgICAgICAgICAgIGlmIHNlbGYuX2dkYmZyYW1lLnR5cGUoKSA9PSBnZGIuTk9STUFMX0ZSQU1FOgorICAgICAgICAgICAgICAgICMgV2UgaGF2ZSBhIFB5RXZhbF9FdmFsRnJhbWVFeCBmcmFtZToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGdldF9weW9wKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gc2VsZi5fZ2RiZnJhbWUucmVhZF92YXIoJ2YnKQorICAgICAgICAgICAgcmV0dXJuIFB5RnJhbWVPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoZikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9zZWxlY3RlZF9mcmFtZShjbHMpOgorICAgICAgICBfZ2RiZnJhbWUgPSBnZGIuc2VsZWN0ZWRfZnJhbWUoKQorICAgICAgICBpZiBfZ2RiZnJhbWU6CisgICAgICAgICAgICByZXR1cm4gRnJhbWUoX2dkYmZyYW1lKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoY2xzKToKKyAgICAgICAgJycnVHJ5IHRvIG9idGFpbiB0aGUgRnJhbWUgZm9yIHRoZSBweXRob24gY29kZSBpbiB0aGUgc2VsZWN0ZWQgZnJhbWUsCisgICAgICAgIG9yIE5vbmUnJycKKyAgICAgICAgZnJhbWUgPSBjbHMuZ2V0X3NlbGVjdGVkX2ZyYW1lKCkKKworICAgICAgICB3aGlsZSBmcmFtZToKKyAgICAgICAgICAgIGlmIGZyYW1lLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lCisgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLm9sZGVyKCkKKworICAgICAgICAjIE5vdCBmb3VuZDoKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBwcmludF9zdW1tYXJ5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICBweW9wID0gc2VsZi5nZXRfcHlvcCgpCisgICAgICAgICAgICBpZiBweW9wOgorICAgICAgICAgICAgICAgIGxpbmUgPSBweW9wLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikKKyAgICAgICAgICAgICAgICB3cml0ZV91bmljb2RlKHN5cy5zdGRvdXQsICcjJWkgJXNcbicgJSAoc2VsZi5nZXRfaW5kZXgoKSwgbGluZSkpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShweW9wLmN1cnJlbnRfbGluZSgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcjJWkgKHVuYWJsZSB0byByZWFkIHB5dGhvbiBmcmFtZSBpbmZvcm1hdGlvbilcbicgJSBzZWxmLmdldF9pbmRleCgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnIyVpXG4nICUgc2VsZi5nZXRfaW5kZXgoKSkKKworY2xhc3MgUHlMaXN0KGdkYi5Db21tYW5kKToKKyAgICAnJydMaXN0IHRoZSBjdXJyZW50IFB5dGhvbiBzb3VyY2UgY29kZSwgaWYgYW55CisKKyAgICBVc2UKKyAgICAgICBweS1saXN0IFNUQVJUCisgICAgdG8gbGlzdCBhdCBhIGRpZmZlcmVudCBsaW5lIG51bWJlciB3aXRoaW4gdGhlIHB5dGhvbiBzb3VyY2UuCisKKyAgICBVc2UKKyAgICAgICBweS1saXN0IFNUQVJULCBFTkQKKyAgICB0byBsaXN0IGEgc3BlY2lmaWMgcmFuZ2Ugb2YgbGluZXMgd2l0aGluIHRoZSBweXRob24gc291cmNlLgorICAgICcnJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBnZGIuQ29tbWFuZC5fX2luaXRfXyAoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweS1saXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0ZJTEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBpbXBvcnQgcmUKKworICAgICAgICBzdGFydCA9IE5vbmUKKyAgICAgICAgZW5kID0gTm9uZQorCisgICAgICAgIG0gPSByZS5tYXRjaChyJ1xzKihcZCspXHMqJywgYXJncykKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHN0YXJ0ID0gaW50KG0uZ3JvdXAoMCkpCisgICAgICAgICAgICBlbmQgPSBzdGFydCArIDEwCisKKyAgICAgICAgbSA9IHJlLm1hdGNoKHInXHMqKFxkKylccyosXHMqKFxkKylccyonLCBhcmdzKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgc3RhcnQsIGVuZCA9IG1hcChpbnQsIG0uZ3JvdXBzKCkpCisKKyAgICAgICAgZnJhbWUgPSBGcmFtZS5nZXRfc2VsZWN0ZWRfcHl0aG9uX2ZyYW1lKCkKKyAgICAgICAgaWYgbm90IGZyYW1lOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byBsb2NhdGUgcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHlvcCA9IGZyYW1lLmdldF9weW9wKCkKKyAgICAgICAgaWYgbm90IHB5b3A6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIHJlYWQgaW5mb3JtYXRpb24gb24gcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZmlsZW5hbWUgPSBweW9wLmZpbGVuYW1lKCkKKyAgICAgICAgbGluZW5vID0gcHlvcC5jdXJyZW50X2xpbmVfbnVtKCkKKworICAgICAgICBpZiBzdGFydCBpcyBOb25lOgorICAgICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSA1CisgICAgICAgICAgICBlbmQgPSBsaW5lbm8gKyA1CisKKyAgICAgICAgaWYgc3RhcnQ8MToKKyAgICAgICAgICAgIHN0YXJ0ID0gMQorCisgICAgICAgIHdpdGggb3Blbihvc19mc2VuY29kZShmaWxlbmFtZSksICdyJykgYXMgZjoKKyAgICAgICAgICAgIGFsbF9saW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgICMgc3RhcnQgYW5kIGVuZCBhcmUgMS1iYXNlZCwgYWxsX2xpbmVzIGlzIDAtYmFzZWQ7CisgICAgICAgICAgICAjIHNvIFtzdGFydC0xOmVuZF0gYXMgYSBweXRob24gc2xpY2UgZ2l2ZXMgdXMgW3N0YXJ0LCBlbmRdIGFzIGEKKyAgICAgICAgICAgICMgY2xvc2VkIGludGVydmFsCisgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoYWxsX2xpbmVzW3N0YXJ0LTE6ZW5kXSk6CisgICAgICAgICAgICAgICAgbGluZXN0ciA9IHN0cihpK3N0YXJ0KQorICAgICAgICAgICAgICAgICMgSGlnaGxpZ2h0IGN1cnJlbnQgbGluZToKKyAgICAgICAgICAgICAgICBpZiBpICsgc3RhcnQgPT0gbGluZW5vOgorICAgICAgICAgICAgICAgICAgICBsaW5lc3RyID0gJz4nICsgbGluZXN0cgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJyU0cyAgICAlcycgJSAobGluZXN0ciwgbGluZSkpCisKKworIyAuLi5hbmQgcmVnaXN0ZXIgdGhlIGNvbW1hbmQ6CitQeUxpc3QoKQorCitkZWYgbW92ZV9pbl9zdGFjayhtb3ZlX3VwKToKKyAgICAnJydNb3ZlIHVwIG9yIGRvd24gdGhlIHN0YWNrIChmb3IgdGhlIHB5LXVwL3B5LWRvd24gY29tbWFuZCknJycKKyAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgIHdoaWxlIGZyYW1lOgorICAgICAgICBpZiBtb3ZlX3VwOgorICAgICAgICAgICAgaXRlcl9mcmFtZSA9IGZyYW1lLm9sZGVyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ZXJfZnJhbWUgPSBmcmFtZS5uZXdlcigpCisKKyAgICAgICAgaWYgbm90IGl0ZXJfZnJhbWU6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGlmIGl0ZXJfZnJhbWUuaXNfZXZhbGZyYW1lZXgoKToKKyAgICAgICAgICAgICMgUmVzdWx0OgorICAgICAgICAgICAgaWYgaXRlcl9mcmFtZS5zZWxlY3QoKToKKyAgICAgICAgICAgICAgICBpdGVyX2ZyYW1lLnByaW50X3N1bW1hcnkoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZnJhbWUgPSBpdGVyX2ZyYW1lCisKKyAgICBpZiBtb3ZlX3VwOgorICAgICAgICBwcmludCAnVW5hYmxlIHRvIGZpbmQgYW4gb2xkZXIgcHl0aG9uIGZyYW1lJworICAgIGVsc2U6CisgICAgICAgIHByaW50ICdVbmFibGUgdG8gZmluZCBhIG5ld2VyIHB5dGhvbiBmcmFtZScKKworY2xhc3MgUHlVcChnZGIuQ29tbWFuZCk6CisgICAgJ1NlbGVjdCBhbmQgcHJpbnQgdGhlIHB5dGhvbiBzdGFjayBmcmFtZSB0aGF0IGNhbGxlZCB0aGlzIG9uZSAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LXVwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBtb3ZlX2luX3N0YWNrKG1vdmVfdXA9VHJ1ZSkKKworY2xhc3MgUHlEb3duKGdkYi5Db21tYW5kKToKKyAgICAnU2VsZWN0IGFuZCBwcmludCB0aGUgcHl0aG9uIHN0YWNrIGZyYW1lIGNhbGxlZCBieSB0aGlzIG9uZSAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWRvd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTU1BTkRfU1RBQ0ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG1vdmVfaW5fc3RhY2sobW92ZV91cD1GYWxzZSkKKworIyBOb3QgYWxsIGJ1aWxkcyBvZiBnZGIgaGF2ZSBnZGIuRnJhbWUuc2VsZWN0CitpZiBoYXNhdHRyKGdkYi5GcmFtZSwgJ3NlbGVjdCcpOgorICAgIFB5VXAoKQorICAgIFB5RG93bigpCisKK2NsYXNzIFB5QmFja3RyYWNlKGdkYi5Db21tYW5kKToKKyAgICAnRGlzcGxheSB0aGUgY3VycmVudCBweXRob24gZnJhbWUgYW5kIGFsbCB0aGUgZnJhbWVzIHdpdGhpbiBpdHMgY2FsbCBzdGFjayAoaWYgYW55KScKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX1NUQUNLLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgICAgICB3aGlsZSBmcmFtZToKKyAgICAgICAgICAgIGlmIGZyYW1lLmlzX2V2YWxmcmFtZWV4KCk6CisgICAgICAgICAgICAgICAgZnJhbWUucHJpbnRfc3VtbWFyeSgpCisgICAgICAgICAgICBmcmFtZSA9IGZyYW1lLm9sZGVyKCkKKworUHlCYWNrdHJhY2UoKQorCitjbGFzcyBQeVByaW50KGdkYi5Db21tYW5kKToKKyAgICAnTG9vayB1cCB0aGUgZ2l2ZW4gcHl0aG9uIHZhcmlhYmxlIG5hbWUsIGFuZCBwcmludCBpdCcKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LXByaW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYi5DT01NQU5EX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NUExFVEVfTk9ORSkKKworCisgICAgZGVmIGludm9rZShzZWxmLCBhcmdzLCBmcm9tX3R0eSk6CisgICAgICAgIG5hbWUgPSBzdHIoYXJncykKKworICAgICAgICBmcmFtZSA9IEZyYW1lLmdldF9zZWxlY3RlZF9weXRob25fZnJhbWUoKQorICAgICAgICBpZiBub3QgZnJhbWU6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIGxvY2F0ZSBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX2ZyYW1lID0gZnJhbWUuZ2V0X3B5b3AoKQorICAgICAgICBpZiBub3QgcHlvcF9mcmFtZToKKyAgICAgICAgICAgIHByaW50ICdVbmFibGUgdG8gcmVhZCBpbmZvcm1hdGlvbiBvbiBweXRob24gZnJhbWUnCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweW9wX3Zhciwgc2NvcGUgPSBweW9wX2ZyYW1lLmdldF92YXJfYnlfbmFtZShuYW1lKQorCisgICAgICAgIGlmIHB5b3BfdmFyOgorICAgICAgICAgICAgcHJpbnQgKCclcyAlciA9ICVzJworICAgICAgICAgICAgICAgICAgICUgKHNjb3BlLAorICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgcHlvcF92YXIuZ2V0X3RydW5jYXRlZF9yZXByKE1BWF9PVVRQVVRfTEVOKSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnJXIgbm90IGZvdW5kJyAlIG5hbWUKKworUHlQcmludCgpCisKK2NsYXNzIFB5TG9jYWxzKGdkYi5Db21tYW5kKToKKyAgICAnTG9vayB1cCB0aGUgZ2l2ZW4gcHl0aG9uIHZhcmlhYmxlIG5hbWUsIGFuZCBwcmludCBpdCcKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGdkYi5Db21tYW5kLl9faW5pdF9fIChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB5LWxvY2FscyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZGIuQ09NTUFORF9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiLkNPTVBMRVRFX05PTkUpCisKKworICAgIGRlZiBpbnZva2Uoc2VsZiwgYXJncywgZnJvbV90dHkpOgorICAgICAgICBuYW1lID0gc3RyKGFyZ3MpCisKKyAgICAgICAgZnJhbWUgPSBGcmFtZS5nZXRfc2VsZWN0ZWRfcHl0aG9uX2ZyYW1lKCkKKyAgICAgICAgaWYgbm90IGZyYW1lOgorICAgICAgICAgICAgcHJpbnQgJ1VuYWJsZSB0byBsb2NhdGUgcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHlvcF9mcmFtZSA9IGZyYW1lLmdldF9weW9wKCkKKyAgICAgICAgaWYgbm90IHB5b3BfZnJhbWU6CisgICAgICAgICAgICBwcmludCAnVW5hYmxlIHRvIHJlYWQgaW5mb3JtYXRpb24gb24gcHl0aG9uIGZyYW1lJworICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIHB5b3BfbmFtZSwgcHlvcF92YWx1ZSBpbiBweW9wX2ZyYW1lLml0ZXJfbG9jYWxzKCk6CisgICAgICAgICAgICBwcmludCAoJyVzID0gJXMnCisgICAgICAgICAgICAgICAgICAgJSAocHlvcF9uYW1lLnByb3h5dmFsKHNldCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICBweW9wX3ZhbHVlLmdldF90cnVuY2F0ZWRfcmVwcihNQVhfT1VUUFVUX0xFTikpKQorCitQeUxvY2FscygpCmRpZmYgLS1naXQgYS9Ub29scy9pMThuL21ha2Vsb2NhbGVhbGlhcy5weSBiL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CmluZGV4IDQ1ODc2YzEuLjY4NTQ0YWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CisrKyBiL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAiIiIKICAgICBDb252ZXJ0IHRoZSBYMTEgbG9jYWxlLmFsaWFzIGZpbGUgaW50byBhIG1hcHBpbmcgZGljdGlvbmFyeSBzdWl0YWJsZQogICAgIGZvciBsb2NhbGUucHkuCkBAIC05LDcgKzksNyBAQAogaW1wb3J0IGxvY2FsZQogCiAjIExvY2F0aW9uIG9mIHRoZSBhbGlhcyBmaWxlCi1MT0NBTEVfQUxJQVMgPSAnL3Vzci9saWIvWDExL2xvY2FsZS9sb2NhbGUuYWxpYXMnCitMT0NBTEVfQUxJQVMgPSAnL3Vzci9zaGFyZS9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcycKIAogZGVmIHBhcnNlKGZpbGVuYW1lKToKIApkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9tc2dmbXQucHkgYi9Ub29scy9pMThuL21zZ2ZtdC5weQppbmRleCA4NjBlNGVhLi5hNTU0NDQyIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL21zZ2ZtdC5weQorKysgYi9Ub29scy9pMThuL21zZ2ZtdC5weQpAQCAtMSw2ICsxLDUgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLSMgLSotIGNvZGluZzogaXNvLTg4NTktMSAtKi0KLSMgV3JpdHRlbiBieSBNYXJ0aW4gdi4gTPZ3aXMgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KKyMhIC91c3IvYmluL2VudiBweXRob24zCisjIFdyaXR0ZW4gYnkgTWFydGluIHYuIEzDtndpcyA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgogCiAiIiJHZW5lcmF0ZSBiaW5hcnkgbWVzc2FnZSBjYXRhbG9nIGZyb20gdGV4dHVhbCB0cmFuc2xhdGlvbiBkZXNjcmlwdGlvbi4KIApAQCAtMzAsNiArMjksNyBAQAogaW1wb3J0IGdldG9wdAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IGFycmF5Citmcm9tIGVtYWlsLnBhcnNlciBpbXBvcnQgSGVhZGVyUGFyc2VyCiAKIF9fdmVyc2lvbl9fID0gIjEuMSIKIApAQCAtNTksMTMgKzU5LDEzIEBACiAgICAgIyB0aGUga2V5cyBhcmUgc29ydGVkIGluIHRoZSAubW8gZmlsZQogICAgIGtleXMgPSBzb3J0ZWQoTUVTU0FHRVMua2V5cygpKQogICAgIG9mZnNldHMgPSBbXQotICAgIGlkcyA9IHN0cnMgPSAnJworICAgIGlkcyA9IHN0cnMgPSBiJycKICAgICBmb3IgaWQgaW4ga2V5czoKICAgICAgICAgIyBGb3IgZWFjaCBzdHJpbmcsIHdlIG5lZWQgc2l6ZSBhbmQgZmlsZSBvZmZzZXQuICBFYWNoIHN0cmluZyBpcyBOVUwKICAgICAgICAgIyB0ZXJtaW5hdGVkOyB0aGUgTlVMIGRvZXMgbm90IGNvdW50IGludG8gdGhlIHNpemUuCiAgICAgICAgIG9mZnNldHMuYXBwZW5kKChsZW4oaWRzKSwgbGVuKGlkKSwgbGVuKHN0cnMpLCBsZW4oTUVTU0FHRVNbaWRdKSkpCi0gICAgICAgIGlkcyArPSBpZCArICdcMCcKLSAgICAgICAgc3RycyArPSBNRVNTQUdFU1tpZF0gKyAnXDAnCisgICAgICAgIGlkcyArPSBpZCArIGInXDAnCisgICAgICAgIHN0cnMgKz0gTUVTU0FHRVNbaWRdICsgYidcMCcKICAgICBvdXRwdXQgPSAnJwogICAgICMgVGhlIGhlYWRlciBpcyA3IDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4gIFdlIGRvbid0IHVzZSBoYXNoIHRhYmxlcywgc28KICAgICAjIHRoZSBrZXlzIHN0YXJ0IHJpZ2h0IGFmdGVyIHRoZSBpbmRleCB0YWJsZXMuCkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgb3V0ZmlsZSA9IG9zLnBhdGguc3BsaXRleHQoaW5maWxlKVswXSArICcubW8nCiAKICAgICB0cnk6Ci0gICAgICAgIGxpbmVzID0gb3BlbihpbmZpbGUpLnJlYWRsaW5lcygpCisgICAgICAgIGxpbmVzID0gb3BlbihpbmZpbGUsICdyYicpLnJlYWRsaW5lcygpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgc3lzLmV4aXQoMSkKQEAgLTExNiw5ICsxMTYsMTQgQEAKICAgICBzZWN0aW9uID0gTm9uZQogICAgIGZ1enp5ID0gMAogCisgICAgIyBTdGFydCBvZmYgYXNzdW1pbmcgTGF0aW4tMSwgc28gZXZlcnl0aGluZyBkZWNvZGVzIHdpdGhvdXQgZmFpbHVyZSwKKyAgICAjIHVudGlsIHdlIGtub3cgdGhlIGV4YWN0IGVuY29kaW5nCisgICAgZW5jb2RpbmcgPSAnbGF0aW4tMScKKwogICAgICMgUGFyc2UgdGhlIGNhdGFsb2cKICAgICBsbm8gPSAwCiAgICAgZm9yIGwgaW4gbGluZXM6CisgICAgICAgIGwgPSBsLmRlY29kZShlbmNvZGluZykKICAgICAgICAgbG5vICs9IDEKICAgICAgICAgIyBJZiB3ZSBnZXQgYSBjb21tZW50IGxpbmUgYWZ0ZXIgYSBtc2dzdHIsIHRoaXMgaXMgYSBuZXcgZW50cnkKICAgICAgICAgaWYgbFswXSA9PSAnIycgYW5kIHNlY3Rpb24gPT0gU1RSOgpAQCAtMTMyLDE2ICsxMzcsNDUgQEAKICAgICAgICAgaWYgbFswXSA9PSAnIyc6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAjIE5vdyB3ZSBhcmUgaW4gYSBtc2dpZCBzZWN0aW9uLCBvdXRwdXQgcHJldmlvdXMgc2VjdGlvbgotICAgICAgICBpZiBsLnN0YXJ0c3dpdGgoJ21zZ2lkJyk6CisgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgnbXNnaWQnKSBhbmQgbm90IGwuc3RhcnRzd2l0aCgnbXNnaWRfcGx1cmFsJyk6CiAgICAgICAgICAgICBpZiBzZWN0aW9uID09IFNUUjoKICAgICAgICAgICAgICAgICBhZGQobXNnaWQsIG1zZ3N0ciwgZnV6enkpCisgICAgICAgICAgICAgICAgaWYgbm90IG1zZ2lkOgorICAgICAgICAgICAgICAgICAgICAjIFNlZSB3aGV0aGVyIHRoZXJlIGlzIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCisgICAgICAgICAgICAgICAgICAgIHAgPSBIZWFkZXJQYXJzZXIoKQorICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gcC5wYXJzZXN0cihtc2dzdHIuZGVjb2RlKGVuY29kaW5nKSkuZ2V0X2NvbnRlbnRfY2hhcnNldCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGNoYXJzZXQ6CisgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IGNoYXJzZXQKICAgICAgICAgICAgIHNlY3Rpb24gPSBJRAogICAgICAgICAgICAgbCA9IGxbNTpdCi0gICAgICAgICAgICBtc2dpZCA9IG1zZ3N0ciA9ICcnCisgICAgICAgICAgICBtc2dpZCA9IG1zZ3N0ciA9IGInJworICAgICAgICAgICAgaXNfcGx1cmFsID0gRmFsc2UKKyAgICAgICAgIyBUaGlzIGlzIGEgbWVzc2FnZSB3aXRoIHBsdXJhbCBmb3JtcworICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgnbXNnaWRfcGx1cmFsJyk6CisgICAgICAgICAgICBpZiBzZWN0aW9uICE9IElEOgorICAgICAgICAgICAgICAgIHByaW50KCdtc2dpZF9wbHVyYWwgbm90IHByZWNlZWRlZCBieSBtc2dpZCBvbiAlczolZCcgJSAoaW5maWxlLCBsbm8pLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgbCA9IGxbMTI6XQorICAgICAgICAgICAgbXNnaWQgKz0gYidcMCcgIyBzZXBhcmF0b3Igb2Ygc2luZ3VsYXIgYW5kIHBsdXJhbAorICAgICAgICAgICAgaXNfcGx1cmFsID0gVHJ1ZQogICAgICAgICAjIE5vdyB3ZSBhcmUgaW4gYSBtc2dzdHIgc2VjdGlvbgogICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgnbXNnc3RyJyk6CiAgICAgICAgICAgICBzZWN0aW9uID0gU1RSCi0gICAgICAgICAgICBsID0gbFs2Ol0KKyAgICAgICAgICAgIGlmIGwuc3RhcnRzd2l0aCgnbXNnc3RyWycpOgorICAgICAgICAgICAgICAgIGlmIG5vdCBpc19wbHVyYWw6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCdwbHVyYWwgd2l0aG91dCBtc2dpZF9wbHVyYWwgb24gJXM6JWQnICUgKGluZmlsZSwgbG5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGwgPSBsLnNwbGl0KCddJywgMSlbMV0KKyAgICAgICAgICAgICAgICBpZiBtc2dzdHI6CisgICAgICAgICAgICAgICAgICAgIG1zZ3N0ciArPSBiJ1wwJyAjIFNlcGFyYXRvciBvZiB0aGUgdmFyaW91cyBwbHVyYWwgZm9ybXMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaXNfcGx1cmFsOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnaW5kZXhlZCBtc2dzdHIgcmVxdWlyZWQgZm9yIHBsdXJhbCBvbiAgJXM6JWQnICUgKGluZmlsZSwgbG5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICBzeXMuZXhpdCgxKQorICAgICAgICAgICAgICAgIGwgPSBsWzY6XQogICAgICAgICAjIFNraXAgZW1wdHkgbGluZXMKICAgICAgICAgbCA9IGwuc3RyaXAoKQogICAgICAgICBpZiBub3QgbDoKQEAgLTE0OSw5ICsxODMsOSBAQAogICAgICAgICAjIFhYWDogRG9lcyB0aGlzIGFsd2F5cyBmb2xsb3cgUHl0aG9uIGVzY2FwZSBzZW1hbnRpY3M/CiAgICAgICAgIGwgPSBldmFsKGwpCiAgICAgICAgIGlmIHNlY3Rpb24gPT0gSUQ6Ci0gICAgICAgICAgICBtc2dpZCArPSBsCisgICAgICAgICAgICBtc2dpZCArPSBsLmVuY29kZShlbmNvZGluZykKICAgICAgICAgZWxpZiBzZWN0aW9uID09IFNUUjoKLSAgICAgICAgICAgIG1zZ3N0ciArPSBsCisgICAgICAgICAgICBtc2dzdHIgKz0gbC5lbmNvZGUoZW5jb2RpbmcpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgnU3ludGF4IGVycm9yIG9uICVzOiVkJyAlIChpbmZpbGUsIGxubyksIFwKICAgICAgICAgICAgICAgICAgICdiZWZvcmU6JywgZmlsZT1zeXMuc3RkZXJyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaTE4bi9weWdldHRleHQucHkgYi9Ub29scy9pMThuL3B5Z2V0dGV4dC5weQppbmRleCBkNGVhNTk3Li42N2E5NjBmIDEwMDc1NQotLS0gYS9Ub29scy9pMThuL3B5Z2V0dGV4dC5weQorKysgYi9Ub29scy9pMThuL3B5Z2V0dGV4dC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTEgLSotCiAjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBCYXJyeSBXYXJzYXcgPGJhcnJ5QHpvcGUuY29tPgogIwpkaWZmIC0tZ2l0IGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5IGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmRkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKQEAgLTAsMCArMSw1NDUgQEAKKyMgLSotIGNvZGluZzogdXRmLTggLSotCisjIFRoaXMgZmlsZSBzaG91bGQgYmUga2VwdCBjb21wYXRpYmxlIHdpdGggYm90aCBQeXRob24gMi42IGFuZCBQeXRob24gPj0gMy4wLgorCitpbXBvcnQgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaXRlcnRvb2xzCitmcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRpb25QYXJzZXIKKworb3V0ID0gc3lzLnN0ZG91dAorCitURVhUX0VOQ09ESU5HID0gJ3V0ZjgnCitORVdMSU5FUyA9ICdsZicKKworIyBDb21wYXRpYmlsaXR5Cit0cnk6CisgICAgeHJhbmdlCitleGNlcHQgTmFtZUVycm9yOgorICAgIHhyYW5nZSA9IHJhbmdlCisKK2RlZiB0ZXh0X29wZW4oZm4sIG1vZGUsIGVuY29kaW5nPU5vbmUpOgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUsIGVuY29kaW5nPWVuY29kaW5nIG9yIFRFWFRfRU5DT0RJTkcpCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG9wZW4oZm4sIG1vZGUpCisKK2RlZiBnZXRfZmlsZV9zaXplcygpOgorICAgIGZvciBzIGluIFsnMjAgS0InLCAnNDAwIEtCJywgJzEwIE1CJ106CisgICAgICAgIHNpemUsIHVuaXQgPSBzLnNwbGl0KCkKKyAgICAgICAgc2l6ZSA9IGludChzaXplKSAqIHsnS0InOiAxMDI0LCAnTUInOiAxMDI0ICoqIDJ9W3VuaXRdCisgICAgICAgIHlpZWxkIHMucmVwbGFjZSgnICcsICcnKSwgc2l6ZQorCitkZWYgZ2V0X2JpbmFyeV9maWxlcygpOgorICAgIHJldHVybiAoKG5hbWUgKyAiLmJpbiIsIHNpemUpIGZvciBuYW1lLCBzaXplIGluIGdldF9maWxlX3NpemVzKCkpCisKK2RlZiBnZXRfdGV4dF9maWxlcygpOgorICAgIHJldHVybiAoKCIlcy0lcy0lcy50eHQiICUgKG5hbWUsIFRFWFRfRU5DT0RJTkcsIE5FV0xJTkVTKSwgc2l6ZSkKKyAgICAgICAgZm9yIG5hbWUsIHNpemUgaW4gZ2V0X2ZpbGVfc2l6ZXMoKSkKKworZGVmIHdpdGhfb3Blbl9tb2RlKG1vZGUpOgorICAgIGRlZiBkZWNvcmF0ZShmKToKKyAgICAgICAgZi5maWxlX29wZW5fbW9kZSA9IG1vZGUKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gZGVjb3JhdGUKKworZGVmIHdpdGhfc2l6ZXMoKnNpemVzKToKKyAgICBkZWYgZGVjb3JhdGUoZik6CisgICAgICAgIGYuZmlsZV9zaXplcyA9IHNpemVzCisgICAgICAgIHJldHVybiBmCisgICAgcmV0dXJuIGRlY29yYXRlCisKKworIyBIZXJlIGJlZ2luIHRoZSB0ZXN0cworCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9ieXRld2lzZShmKToKKyAgICAiIiIgcmVhZCBvbmUgdW5pdCBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKDEpOgorICAgICAgICBwYXNzCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX3NtYWxsX2NodW5rcyhmKToKKyAgICAiIiIgcmVhZCAyMCB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKDIwKToKKyAgICAgICAgcGFzcworCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9iaWdfY2h1bmtzKGYpOgorICAgICIiIiByZWFkIDQwOTYgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGYuc2VlaygwKQorICAgIHdoaWxlIGYucmVhZCg0MDk2KToKKyAgICAgICAgcGFzcworCitAd2l0aF9vcGVuX21vZGUoInIiKQorQHdpdGhfc2l6ZXMoInNtYWxsIiwgIm1lZGl1bSIsICJsYXJnZSIpCitkZWYgcmVhZF93aG9sZV9maWxlKGYpOgorICAgICIiIiByZWFkIHdob2xlIGNvbnRlbnRzIGF0IG9uY2UgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKCk6CisgICAgICAgIHBhc3MKKworQHdpdGhfb3Blbl9tb2RlKCJydCIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX2xpbmVzKGYpOgorICAgICIiIiByZWFkIG9uZSBsaW5lIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgbGluZSBpbiBmOgorICAgICAgICBwYXNzCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBzZWVrX2ZvcndhcmRfYnl0ZXdpc2UoZik6CisgICAgIiIiIHNlZWsgZm9yd2FyZCBvbmUgdW5pdCBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDAsIDIpCisgICAgc2l6ZSA9IGYudGVsbCgpCisgICAgZi5zZWVrKDAsIDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIHNpemUgLSAxKToKKyAgICAgICAgZi5zZWVrKGksIDApCisKK0B3aXRoX29wZW5fbW9kZSgiciIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBzZWVrX2ZvcndhcmRfYmxvY2t3aXNlKGYpOgorICAgICIiIiBzZWVrIGZvcndhcmQgMTAwMCB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDAsIDIpCisgICAgc2l6ZSA9IGYudGVsbCgpCisgICAgZi5zZWVrKDAsIDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIHNpemUgLSAxLCAxMDAwKToKKyAgICAgICAgZi5zZWVrKGksIDApCisKK0B3aXRoX29wZW5fbW9kZSgicmIiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9zZWVrX2J5dGV3aXNlKGYpOgorICAgICIiIiBhbHRlcm5hdGUgcmVhZCAmIHNlZWsgb25lIHVuaXQgIiIiCisgICAgZi5zZWVrKDApCisgICAgd2hpbGUgZi5yZWFkKDEpOgorICAgICAgICBmLnNlZWsoMSwgMSkKKworQHdpdGhfb3Blbl9tb2RlKCJyYiIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX3NlZWtfYmxvY2t3aXNlKGYpOgorICAgICIiIiBhbHRlcm5hdGUgcmVhZCAmIHNlZWsgMTAwMCB1bml0cyAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICB3aGlsZSBmLnJlYWQoMTAwMCk6CisgICAgICAgIGYuc2VlaygxMDAwLCAxKQorCisKK0B3aXRoX29wZW5fbW9kZSgidyIpCitAd2l0aF9zaXplcygic21hbGwiKQorZGVmIHdyaXRlX2J5dGV3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIHdyaXRlIG9uZSB1bml0IGF0IGEgdGltZSAiIiIKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSkpOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMV0pCisKK0B3aXRoX29wZW5fbW9kZSgidyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiB3cml0ZV9zbWFsbF9jaHVua3MoZiwgc291cmNlKToKKyAgICAiIiIgd3JpdGUgMjAgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMjApOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrMjBdKQorCitAd2l0aF9vcGVuX21vZGUoInciKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgd3JpdGVfbWVkaXVtX2NodW5rcyhmLCBzb3VyY2UpOgorICAgICIiIiB3cml0ZSA0MDk2IHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDQwOTYpOgorICAgICAgICBmLndyaXRlKHNvdXJjZVtpOmkrNDA5Nl0pCisKK0B3aXRoX29wZW5fbW9kZSgidyIpCitAd2l0aF9zaXplcygibGFyZ2UiKQorZGVmIHdyaXRlX2xhcmdlX2NodW5rcyhmLCBzb3VyY2UpOgorICAgICIiIiB3cml0ZSAxZTYgdW5pdHMgYXQgYSB0aW1lICIiIgorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMTAwMDAwMCk6CisgICAgICAgIGYud3JpdGUoc291cmNlW2k6aSsxMDAwMDAwXSkKKworCitAd2l0aF9vcGVuX21vZGUoIncrIikKK0B3aXRoX3NpemVzKCJzbWFsbCIpCitkZWYgbW9kaWZ5X2J5dGV3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIG1vZGlmeSBvbmUgdW5pdCBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzFdKQorCitAd2l0aF9vcGVuX21vZGUoIncrIikKK0B3aXRoX3NpemVzKCJtZWRpdW0iKQorZGVmIG1vZGlmeV9zbWFsbF9jaHVua3MoZiwgc291cmNlKToKKyAgICAiIiIgbW9kaWZ5IDIwIHVuaXRzIGF0IGEgdGltZSAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIwKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzIwXSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3KyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBtb2RpZnlfbWVkaXVtX2NodW5rcyhmLCBzb3VyY2UpOgorICAgICIiIiBtb2RpZnkgNDA5NiB1bml0cyBhdCBhIHRpbWUgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCA0MDk2KToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzQwOTZdKQorCitAd2l0aF9vcGVuX21vZGUoIndiKyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBtb2RpZnlfc2Vla19mb3J3YXJkX2J5dGV3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIGFsdGVybmF0ZSB3cml0ZSAmIHNlZWsgb25lIHVuaXQgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzFdKQorICAgICAgICBmLnNlZWsoaSsyKQorCitAd2l0aF9vcGVuX21vZGUoIndiKyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiBtb2RpZnlfc2Vla19mb3J3YXJkX2Jsb2Nrd2lzZShmLCBzb3VyY2UpOgorICAgICIiIiBhbHRlcm5hdGUgd3JpdGUgJiBzZWVrIDEwMDAgdW5pdHMgIiIiCisgICAgZi5zZWVrKDApCisgICAgZm9yIGkgaW4geHJhbmdlKDAsIGxlbihzb3VyY2UpLCAyMDAwKToKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaTppKzEwMDBdKQorICAgICAgICBmLnNlZWsoaSsyMDAwKQorCisjIFhYWCB0aGUgMiBmb2xsb3dpbmcgdGVzdHMgZG9uJ3Qgd29yayB3aXRoIHB5M2sncyB0ZXh0IElPCitAd2l0aF9vcGVuX21vZGUoIndiKyIpCitAd2l0aF9zaXplcygibWVkaXVtIikKK2RlZiByZWFkX21vZGlmeV9ieXRld2lzZShmLCBzb3VyY2UpOgorICAgICIiIiBhbHRlcm5hdGUgcmVhZCAmIHdyaXRlIG9uZSB1bml0ICIiIgorICAgIGYuc2VlaygwKQorICAgIGZvciBpIGluIHhyYW5nZSgwLCBsZW4oc291cmNlKSwgMik6CisgICAgICAgIGYucmVhZCgxKQorICAgICAgICBmLndyaXRlKHNvdXJjZVtpKzE6aSsyXSkKKworQHdpdGhfb3Blbl9tb2RlKCJ3YisiKQorQHdpdGhfc2l6ZXMoIm1lZGl1bSIpCitkZWYgcmVhZF9tb2RpZnlfYmxvY2t3aXNlKGYsIHNvdXJjZSk6CisgICAgIiIiIGFsdGVybmF0ZSByZWFkICYgd3JpdGUgMTAwMCB1bml0cyAiIiIKKyAgICBmLnNlZWsoMCkKKyAgICBmb3IgaSBpbiB4cmFuZ2UoMCwgbGVuKHNvdXJjZSksIDIwMDApOgorICAgICAgICBmLnJlYWQoMTAwMCkKKyAgICAgICAgZi53cml0ZShzb3VyY2VbaSsxMDAwOmkrMjAwMF0pCisKKworcmVhZF90ZXN0cyA9IFsKKyAgICByZWFkX2J5dGV3aXNlLCByZWFkX3NtYWxsX2NodW5rcywgcmVhZF9saW5lcywgcmVhZF9iaWdfY2h1bmtzLAorICAgIE5vbmUsIHJlYWRfd2hvbGVfZmlsZSwgTm9uZSwKKyAgICBzZWVrX2ZvcndhcmRfYnl0ZXdpc2UsIHNlZWtfZm9yd2FyZF9ibG9ja3dpc2UsCisgICAgcmVhZF9zZWVrX2J5dGV3aXNlLCByZWFkX3NlZWtfYmxvY2t3aXNlLAorXQorCit3cml0ZV90ZXN0cyA9IFsKKyAgICB3cml0ZV9ieXRld2lzZSwgd3JpdGVfc21hbGxfY2h1bmtzLCB3cml0ZV9tZWRpdW1fY2h1bmtzLCB3cml0ZV9sYXJnZV9jaHVua3MsCitdCisKK21vZGlmeV90ZXN0cyA9IFsKKyAgICBtb2RpZnlfYnl0ZXdpc2UsIG1vZGlmeV9zbWFsbF9jaHVua3MsIG1vZGlmeV9tZWRpdW1fY2h1bmtzLAorICAgIE5vbmUsCisgICAgbW9kaWZ5X3NlZWtfZm9yd2FyZF9ieXRld2lzZSwgbW9kaWZ5X3NlZWtfZm9yd2FyZF9ibG9ja3dpc2UsCisgICAgcmVhZF9tb2RpZnlfYnl0ZXdpc2UsIHJlYWRfbW9kaWZ5X2Jsb2Nrd2lzZSwKK10KKworZGVmIHJ1bl9kdXJpbmcoZHVyYXRpb24sIGZ1bmMpOgorICAgIF90ID0gdGltZS50aW1lCisgICAgbiA9IDAKKyAgICBzdGFydCA9IG9zLnRpbWVzKCkKKyAgICBzdGFydF90aW1lc3RhbXAgPSBfdCgpCisgICAgcmVhbF9zdGFydCA9IHN0YXJ0WzRdIG9yIHN0YXJ0X3RpbWVzdGFtcAorICAgIHdoaWxlIFRydWU6CisgICAgICAgIGZ1bmMoKQorICAgICAgICBuICs9IDEKKyAgICAgICAgaWYgX3QoKSAtIHN0YXJ0X3RpbWVzdGFtcCA+IGR1cmF0aW9uOgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbmQgPSBvcy50aW1lcygpCisgICAgcmVhbCA9IChlbmRbNF0gaWYgc3RhcnRbNF0gZWxzZSB0aW1lLnRpbWUoKSkgLSByZWFsX3N0YXJ0CisgICAgcmV0dXJuIG4sIHJlYWwsIHN1bShlbmRbMDoyXSkgLSBzdW0oc3RhcnRbMDoyXSkKKworZGVmIHdhcm1fY2FjaGUoZmlsZW5hbWUpOgorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgZi5yZWFkKCkKKworCitkZWYgcnVuX2FsbF90ZXN0cyhvcHRpb25zKToKKyAgICBkZWYgcHJpbnRfbGFiZWwoZmlsZW5hbWUsIGZ1bmMpOgorICAgICAgICBuYW1lID0gcmUuc3BsaXQocidbLS5dJywgZmlsZW5hbWUpWzBdCisgICAgICAgIG91dC53cml0ZSgKKyAgICAgICAgICAgICgiWyVzXSAlcy4uLiAiCisgICAgICAgICAgICAgICAgJSAobmFtZS5jZW50ZXIoNyksIGZ1bmMuX19kb2NfXy5zdHJpcCgpKQorICAgICAgICAgICAgKS5sanVzdCg1MikpCisgICAgICAgIG91dC5mbHVzaCgpCisKKyAgICBkZWYgcHJpbnRfcmVzdWx0cyhzaXplLCBuLCByZWFsLCBjcHUpOgorICAgICAgICBidyA9IG4gKiBmbG9hdChzaXplKSAvIDEwMjQgKiogMiAvIHJlYWwKKyAgICAgICAgYncgPSAoIiU0ZCBNQi9zIiBpZiBidyA+IDEwMCBlbHNlICIlLjNnIE1CL3MiKSAlIGJ3CisgICAgICAgIG91dC53cml0ZShidy5yanVzdCgxMikgKyAiXG4iKQorICAgICAgICBpZiBjcHUgPCAwLjkwICogcmVhbDoKKyAgICAgICAgICAgIG91dC53cml0ZSgiICAgd2FybmluZzogdGVzdCBhYm92ZSB1c2VkIG9ubHkgJWQlJSBDUFUsICIKKyAgICAgICAgICAgICAgICAicmVzdWx0IG1heSBiZSBmbGF3ZWQhXG4iICUgKDEwMC4wICogY3B1IC8gcmVhbCkpCisKKyAgICBkZWYgcnVuX29uZV90ZXN0KG5hbWUsIHNpemUsIG9wZW5fZnVuYywgdGVzdF9mdW5jLCAqYXJncyk6CisgICAgICAgIG1vZGUgPSB0ZXN0X2Z1bmMuZmlsZV9vcGVuX21vZGUKKyAgICAgICAgcHJpbnRfbGFiZWwobmFtZSwgdGVzdF9mdW5jKQorICAgICAgICBpZiAidyIgbm90IGluIG1vZGUgb3IgIisiIGluIG1vZGU6CisgICAgICAgICAgICB3YXJtX2NhY2hlKG5hbWUpCisgICAgICAgIHdpdGggb3Blbl9mdW5jKG5hbWUpIGFzIGY6CisgICAgICAgICAgICBuLCByZWFsLCBjcHUgPSBydW5fZHVyaW5nKDEuNSwgbGFtYmRhOiB0ZXN0X2Z1bmMoZiwgKmFyZ3MpKQorICAgICAgICBwcmludF9yZXN1bHRzKHNpemUsIG4sIHJlYWwsIGNwdSkKKworICAgIGRlZiBydW5fdGVzdF9mYW1pbHkodGVzdHMsIG1vZGVfZmlsdGVyLCBmaWxlcywgb3Blbl9mdW5jLCAqbWFrZV9hcmdzKToKKyAgICAgICAgZm9yIHRlc3RfZnVuYyBpbiB0ZXN0czoKKyAgICAgICAgICAgIGlmIHRlc3RfZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBtb2RlX2ZpbHRlciBpbiB0ZXN0X2Z1bmMuZmlsZV9vcGVuX21vZGU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZvciBzIGluIHRlc3RfZnVuYy5maWxlX3NpemVzOgorICAgICAgICAgICAgICAgIG5hbWUsIHNpemUgPSBmaWxlc1tzaXplX25hbWVzW3NdXQorICAgICAgICAgICAgICAgICNuYW1lICs9IGZpbGVfZXh0CisgICAgICAgICAgICAgICAgYXJncyA9IHR1cGxlKGYobmFtZSwgc2l6ZSkgZm9yIGYgaW4gbWFrZV9hcmdzKQorICAgICAgICAgICAgICAgIHJ1bl9vbmVfdGVzdChuYW1lLCBzaXplLAorICAgICAgICAgICAgICAgICAgICBvcGVuX2Z1bmMsIHRlc3RfZnVuYywgKmFyZ3MpCisKKyAgICBzaXplX25hbWVzID0geworICAgICAgICAic21hbGwiOiAwLAorICAgICAgICAibWVkaXVtIjogMSwKKyAgICAgICAgImxhcmdlIjogMiwKKyAgICB9CisKKyAgICBiaW5hcnlfZmlsZXMgPSBsaXN0KGdldF9iaW5hcnlfZmlsZXMoKSkKKyAgICB0ZXh0X2ZpbGVzID0gbGlzdChnZXRfdGV4dF9maWxlcygpKQorICAgIGlmICJiIiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiQmluYXJ5IHVuaXQgPSBvbmUgYnl0ZSIpCisgICAgaWYgInQiIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJUZXh0IHVuaXQgPSBvbmUgY2hhcmFjdGVyICglcy1kZWNvZGVkKSIgJSBURVhUX0VOQ09ESU5HKQorCisgICAgIyBCaW5hcnkgcmVhZHMKKyAgICBpZiAiYiIgaW4gb3B0aW9ucyBhbmQgInIiIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIEJpbmFyeSBpbnB1dCAqKlxuIikKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KHJlYWRfdGVzdHMsICJ0IiwgYmluYXJ5X2ZpbGVzLCBsYW1iZGEgZm46IG9wZW4oZm4sICJyYiIpKQorCisgICAgIyBUZXh0IHJlYWRzCisgICAgaWYgInQiIGluIG9wdGlvbnMgYW5kICJyIiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBUZXh0IGlucHV0ICoqXG4iKQorICAgICAgICBydW5fdGVzdF9mYW1pbHkocmVhZF90ZXN0cywgImIiLCB0ZXh0X2ZpbGVzLCBsYW1iZGEgZm46IHRleHRfb3BlbihmbiwgInIiKSkKKworICAgICMgQmluYXJ5IHdyaXRlcworICAgIGlmICJiIiBpbiBvcHRpb25zIGFuZCAidyIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogQmluYXJ5IGFwcGVuZCAqKlxuIikKKyAgICAgICAgZGVmIG1ha2VfdGVzdF9zb3VyY2UobmFtZSwgc2l6ZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KHdyaXRlX3Rlc3RzLCAidCIsIGJpbmFyeV9maWxlcywKKyAgICAgICAgICAgIGxhbWJkYSBmbjogb3Blbihvcy5kZXZudWxsLCAid2IiKSwgbWFrZV90ZXN0X3NvdXJjZSkKKworICAgICMgVGV4dCB3cml0ZXMKKyAgICBpZiAidCIgaW4gb3B0aW9ucyBhbmQgInciIGluIG9wdGlvbnM6CisgICAgICAgIHByaW50KCJcbioqIFRleHQgYXBwZW5kICoqXG4iKQorICAgICAgICBkZWYgbWFrZV90ZXN0X3NvdXJjZShuYW1lLCBzaXplKToKKyAgICAgICAgICAgIHdpdGggdGV4dF9vcGVuKG5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KHdyaXRlX3Rlc3RzLCAiYiIsIHRleHRfZmlsZXMsCisgICAgICAgICAgICBsYW1iZGEgZm46IHRleHRfb3Blbihvcy5kZXZudWxsLCAidyIpLCBtYWtlX3Rlc3Rfc291cmNlKQorCisgICAgIyBCaW5hcnkgb3ZlcndyaXRlcworICAgIGlmICJiIiBpbiBvcHRpb25zIGFuZCAidyIgaW4gb3B0aW9uczoKKyAgICAgICAgcHJpbnQoIlxuKiogQmluYXJ5IG92ZXJ3cml0ZSAqKlxuIikKKyAgICAgICAgZGVmIG1ha2VfdGVzdF9zb3VyY2UobmFtZSwgc2l6ZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gZi5yZWFkKCkKKyAgICAgICAgcnVuX3Rlc3RfZmFtaWx5KG1vZGlmeV90ZXN0cywgInQiLCBiaW5hcnlfZmlsZXMsCisgICAgICAgICAgICBsYW1iZGEgZm46IG9wZW4oZm4sICJyK2IiKSwgbWFrZV90ZXN0X3NvdXJjZSkKKworICAgICMgVGV4dCBvdmVyd3JpdGVzCisgICAgaWYgInQiIGluIG9wdGlvbnMgYW5kICJ3IiBpbiBvcHRpb25zOgorICAgICAgICBwcmludCgiXG4qKiBUZXh0IG92ZXJ3cml0ZSAqKlxuIikKKyAgICAgICAgZGVmIG1ha2VfdGVzdF9zb3VyY2UobmFtZSwgc2l6ZSk6CisgICAgICAgICAgICB3aXRoIHRleHRfb3BlbihuYW1lLCAiciIpIGFzIGY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpCisgICAgICAgIHJ1bl90ZXN0X2ZhbWlseShtb2RpZnlfdGVzdHMsICJiIiwgdGV4dF9maWxlcywKKyAgICAgICAgICAgIGxhbWJkYSBmbjogb3BlbihmbiwgInIrIiksIG1ha2VfdGVzdF9zb3VyY2UpCisKKworZGVmIHByZXBhcmVfZmlsZXMoKToKKyAgICBwcmludCgiUHJlcGFyaW5nIGZpbGVzLi4uIikKKyAgICAjIEJpbmFyeSBmaWxlcworICAgIGZvciBuYW1lLCBzaXplIGluIGdldF9iaW5hcnlfZmlsZXMoKToKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUobmFtZSkgYW5kIG9zLnBhdGguZ2V0c2l6ZShuYW1lKSA9PSBzaXplOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgd2l0aCBvcGVuKG5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKG9zLnVyYW5kb20oc2l6ZSkpCisgICAgIyBUZXh0IGZpbGVzCisgICAgY2h1bmsgPSBbXQorICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiclUiLCBlbmNvZGluZz0ndXRmOCcpIGFzIGY6CisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIiMgPGlvYmVuY2ggdGV4dCBjaHVuayBtYXJrZXI+Iik6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBjaHVuayBtYXJrZXIgaW4gJXMgISIgJSBfX2ZpbGVfXykKKyAgICAgICAgaWYgTkVXTElORVMgPT0gImFsbCI6CisgICAgICAgICAgICBpdCA9IGl0ZXJ0b29scy5jeWNsZShbIlxuIiwgIlxyIiwgIlxyXG4iXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdCgKKyAgICAgICAgICAgICAgICB7ImNyIjogIlxyIiwgImxmIjogIlxuIiwgImNybGYiOiAiXHJcbiJ9W05FV0xJTkVTXSkKKyAgICAgICAgY2h1bmsgPSAiIi5qb2luKGxpbmUucmVwbGFjZSgiXG4iLCBuZXh0KGl0KSkgZm9yIGxpbmUgaW4gZikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjaHVuaywgYnl0ZXMpOgorICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5kZWNvZGUoJ3V0ZjgnKQorICAgICAgICBjaHVuayA9IGNodW5rLmVuY29kZShURVhUX0VOQ09ESU5HKQorICAgIGZvciBuYW1lLCBzaXplIGluIGdldF90ZXh0X2ZpbGVzKCk6CisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKG5hbWUpIGFuZCBvcy5wYXRoLmdldHNpemUobmFtZSkgPT0gc2l6ZToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGhlYWQgPSBjaHVuayAqIChzaXplIC8vIGxlbihjaHVuaykpCisgICAgICAgIHRhaWwgPSBjaHVua1s6c2l6ZSAlIGxlbihjaHVuayldCisgICAgICAgICMgQWRqdXN0IHRhaWwgdG8gZW5kIG9uIGEgY2hhcmFjdGVyIGJvdW5kYXJ5CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdGFpbC5kZWNvZGUoVEVYVF9FTkNPRElORykKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICB0YWlsID0gdGFpbFs6LTFdCisgICAgICAgIHdpdGggb3BlbihuYW1lLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShoZWFkKQorICAgICAgICAgICAgZi53cml0ZSh0YWlsKQorCitkZWYgbWFpbigpOgorICAgIGdsb2JhbCBURVhUX0VOQ09ESU5HLCBORVdMSU5FUworCisgICAgdXNhZ2UgPSAidXNhZ2U6ICVwcm9nIFstaHwtLWhlbHBdIFtvcHRpb25zXSIKKyAgICBwYXJzZXIgPSBPcHRpb25QYXJzZXIodXNhZ2U9dXNhZ2UpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1iIiwgIi0tYmluYXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJiaW5hcnkiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biBiaW5hcnkgSS9PIHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXh0IiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJ0ZXh0IiwgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJydW4gdGV4dCBJL08gdGVzdHMiKQorICAgIHBhcnNlci5hZGRfb3B0aW9uKCItciIsICItLXJlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9InJlYWQiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biByZWFkIHRlc3RzIikKKyAgICBwYXJzZXIuYWRkX29wdGlvbigiLXciLCAiLS13cml0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0id3JpdGUiLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9InJ1biB3cml0ZSAmIG1vZGlmeSB0ZXN0cyIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1FIiwgIi0tZW5jb2RpbmciLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJlbmNvZGluZyIsIGRlZmF1bHQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJlbmNvZGluZyBmb3IgdGV4dCB0ZXN0cyAoZGVmYXVsdDogJXMpIiAlIFRFWFRfRU5DT0RJTkcpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1OIiwgIi0tbmV3bGluZXMiLAorICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0ic3RvcmUiLCBkZXN0PSJuZXdsaW5lcyIsIGRlZmF1bHQ9J2xmJywKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJsaW5lIGVuZGluZ3MgZm9yIHRleHQgdGVzdHMgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIihvbmUgb2Y6IHtsZiAoZGVmYXVsdCksIGNyLCBjcmxmLCBhbGx9KSIpCisgICAgcGFyc2VyLmFkZF9vcHRpb24oIi1tIiwgIi0taW8tbW9kdWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249InN0b3JlIiwgZGVzdD0iaW9fbW9kdWxlIiwgZGVmYXVsdD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9ImlvIG1vZHVsZSB0byB0ZXN0IChkZWZhdWx0OiBidWlsdGluIG9wZW4oKSkiKQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYgYXJnczoKKyAgICAgICAgcGFyc2VyLmVycm9yKCJ1bmV4cGVjdGVkIGFyZ3VtZW50cyIpCisgICAgTkVXTElORVMgPSBvcHRpb25zLm5ld2xpbmVzLmxvd2VyKCkKKyAgICBpZiBORVdMSU5FUyBub3QgaW4gKCdsZicsICdjcicsICdjcmxmJywgJ2FsbCcpOgorICAgICAgICBwYXJzZXIuZXJyb3IoImludmFsaWQgJ25ld2xpbmVzJyBvcHRpb246ICVyIiAlIE5FV0xJTkVTKQorCisgICAgdGVzdF9vcHRpb25zID0gIiIKKyAgICBpZiBvcHRpb25zLnJlYWQ6CisgICAgICAgIHRlc3Rfb3B0aW9ucyArPSAiciIKKyAgICBpZiBvcHRpb25zLndyaXRlOgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInciCisgICAgZWxpZiBub3Qgb3B0aW9ucy5yZWFkOgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInJ3IgorICAgIGlmIG9wdGlvbnMudGV4dDoKKyAgICAgICAgdGVzdF9vcHRpb25zICs9ICJ0IgorICAgIGlmIG9wdGlvbnMuYmluYXJ5OgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gImIiCisgICAgZWxpZiBub3Qgb3B0aW9ucy50ZXh0OgorICAgICAgICB0ZXN0X29wdGlvbnMgKz0gInRiIgorCisgICAgaWYgb3B0aW9ucy5lbmNvZGluZzoKKyAgICAgICAgVEVYVF9FTkNPRElORyA9IG9wdGlvbnMuZW5jb2RpbmcKKworICAgIGlmIG9wdGlvbnMuaW9fbW9kdWxlOgorICAgICAgICBnbG9iYWxzKClbJ29wZW4nXSA9IF9faW1wb3J0X18ob3B0aW9ucy5pb19tb2R1bGUsIHt9LCB7fSwgWydvcGVuJ10pLm9wZW4KKworICAgIHByZXBhcmVfZmlsZXMoKQorICAgIHJ1bl9hbGxfdGVzdHModGVzdF9vcHRpb25zKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQorCisKKyMgLS0gVGhpcyBwYXJ0IHRvIGV4ZXJjaXNlIHRleHQgcmVhZGluZy4gRG9uJ3QgY2hhbmdlIGFueXRoaW5nISAtLQorIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4KKworIiIiCisxLgorR8OhdHRpciBhbGxhciwKK8Ohw7ByIGdhbmdpIGZyYW0sCit1bSBza2/DsGFzayBza3lsaSwKK3VtIHNreWdnbmFzdCBza3lsaSwKK8O+dsOtIGF0IMOzdsOtc3QgZXIgYXQgdml0YSwKK2h2YXIgw7N2aW5pcgorc2l0amEgw6EgZmxldGkgZnlyaXIuCisKKzIuCitHZWZlbmRyIGhlaWxpciEKK0dlc3RyIGVyIGlubiBrb21pbm4sCitodmFyIHNrYWwgc2l0amEgc2rDoT8KK01qw7ZrIGVyIGJyw6HDsHIsCitzw6EgZXIgw6EgYnLDtm5kdW0gc2thbAorc8OtbnMgb2YgZnJlaXN0YSBmcmFtYS4KKworMy4KK0VsZHMgZXIgw77DtnJmLAorw75laW1zIGlubiBlciBrb21pbm4KK29rIMOhIGtuw6kga2FsaW5uOworbWF0YXIgb2sgdsOhw7BhCitlciBtYW5uaSDDvsO2cmYsCivDvmVpbSBlciBoZWZyIHVtIGZqYWxsIGZhcml0LgorCis0LgorVmF0bnMgZXIgw77DtnJmLAorw75laW0gZXIgdGlsIHZlcsOwYXIga2VtciwKK8O+ZXJydSBvayDDvmrDs8OwbGHDsGFyLAorZ8Ozw7BzIG9mIMOmw7BpcywKK2VmIHPDqXIgZ2V0YSBtw6Z0dGksCitvcsOwcyBvayBlbmRyw77Dtmd1LgorCis1LgorVml0cyBlciDDvsO2cmYsCivDvmVpbSBlciB2w63DsGEgcmF0YXI7Citkw6ZsdCBlciBoZWltYSBodmF0OworYXQgYXVnYWJyYWfDsGkgdmVyw7ByLAorc8OhIGVyIGVra2kga2Fubgorb2sgbWXDsCBzbm90cnVtIHNpdHIuCisKKzYuCitBdCBoeWdnamFuZGkgc2lubmkKK3NreWxpLXQgbWHDsHIgaHLDpnNpbm4gdmVyYSwKK2hlbGRyIGfDpnRpbm4gYXQgZ2XDsGk7CivDvsOhIGVyIGhvcnNrciBvayDDvsO2Z3VsbAora2VtciBoZWltaXNnYXLDsGEgdGlsLAorc2phbGRhbiB2ZXLDsHIgdsOtdGkgdsO2cnVtLAorw752w60gYXQgw7Nicmlnw7ByYSB2aW4KK2bDpnIgbWHDsHIgYWxkcmVnaQorZW4gbWFubnZpdCBtaWtpdC4KKworNy4KK0lubiB2YXJpIGdlc3RyLAorZXIgdGlsIHZlcsOwYXIga2VtciwKK8O+dW5udSBobGrDs8OwaSDDvmVnaXIsCitleXJ1bSBobMO9w7BpciwKK2VuIGF1Z3VtIHNrb8OwYXI7CitzdsOhIG7DvXNpc2sgZnLDs8OwcmEgaHZlcnIgZnlyaXIuCisKKzguCitIaW5uIGVyIHPDpmxsLAorZXIgc8OpciBvZiBnZXRyCitsb2Ygb2sgbMOta25zdGFmaTsKK8OzZMOmbGxhIGVyIHZpw7Agw75hdCwKK2VyIG1hw7ByIGVpZ2Egc2thbAorYW5uYXJzIGJyasOzc3R1bSDDrS4KKyIiIgorCisiIiIKK0MnZXN0IHJldmVuaXIgdGFyZCwgamUgbGUgc2Vucywgc3VyIHVuIHN1amV0IHRyb3AgcmViYXR0dSBldCBkw6lqw6AgcHJlc3F1ZSBvdWJsacOpLiBNb24gw6l0YXQsIHF1aSBuZSBtZSBwZXJtZXQgcGx1cyBhdWN1biB0cmF2YWlsIHN1aXZpLCBtb24gYXZlcnNpb24gcG91ciBsZSBnZW5yZSBwb2zDqW1pcXVlLCBvbnQgY2F1c8OpIG1hIGxlbnRldXIgw6Agw6ljcmlyZSBldCBtYSByw6lwdWduYW5jZSDDoCBwdWJsaWVyLiBKJ2F1cmFpcyBtw6ptZSB0b3V0IMOgIGZhaXQgc3VwcHJpbcOpIGNlcyBMZXR0cmVzLCBvdSBwbHV0w7R0IGplIGxpZSBsZXMgYXVyYWlzIHBvaW50IMOpY3JpdGVzLCBzJ2lsIG4nZcO7dCDDqXTDqSBxdWVzdGlvbiBxdWUgZGUgbW9pIDogTWFpcyBtYSBwYXRyaWUgbmUgbSdlc3QgcGFzIHRlbGxlbWVudCBkZXZlbnVlIMOpdHJhbmfDqHJlIHF1ZSBqZSBwdWlzc2Ugdm9pciB0cmFucXVpbGxlbWVudCBvcHByaW1lciBzZXMgY2l0b3llbnMsIHN1cnRvdXQgbG9yc3F1J2lscyBuJ29udCBjb21wcm9taXMgbGV1cnMgZHJvaXRzIHF1J2VuIGTDqWZlbmRhbnQgbWEgY2F1c2UuIEplIHNlcmFpcyBsZSBkZXJuaWVyIGRlcyBob21tZXMgc2kgZGFucyB1bmUgdGVsbGUgb2NjYXNpb24gaifDqWNvdXRhaXMgdW4gc2VudGltZW50IHF1aSBuJ2VzdCBwbHVzIG5pIGRvdWNldXIgbmkgcGF0aWVuY2UsIG1haXMgZmFpYmxlc3NlIGV0IGzDomNoZXTDqSwgZGFucyBjZWx1aSBxdSdpbCBlbXDDqmNoZSBkZSByZW1wbGlyIHNvbiBkZXZvaXIuCitSaWVuIGRlIG1vaW5zIGltcG9ydGFudCBwb3VyIGxlIHB1YmxpYywgaidlbiBjb252aWVucywgcXVlIGxhIG1hdGnDqHJlIGRlIGNlcyBsZXR0cmVzLiBMYSBjb25zdGl0dXRpb24gZCd1bmUgcGV0aXRlIFLDqXB1YmxpcXVlLCBsZSBzb3J0IGQndW4gcGV0aXQgcGFydGljdWxpZXIsIGwnZXhwb3PDqSBkZSBxdWVscXVlcyBpbmp1c3RpY2VzLCBsYSByw6lmdXRhdGlvbiBkZSBxdWVscXVlcyBzb3BoaXNtZXMgOyB0b3V0IGNlbGEgbidhIHJpZW4gZW4gc29pIGQnYXNzZXogY29uc2lkw6lyYWJsZSBwb3VyIG3DqXJpdGVyIGJlYXVjb3VwIGRlIGxlY3RldXJzIDogbWFpcyBzaSBtZXMgc3VqZXRzIHNvbnQgcGV0aXRzIG1lcyBvYmpldHMgc29udCBncmFuZHMsIGV0IGRpZ25lcyBkZSBsJ2F0dGVudGlvbiBkZSB0b3V0IGhvbm7DqnRlIGhvbW1lLiBMYWlzc29ucyBHZW7DqHZlIMOgIHNhIHBsYWNlLCBldCBSb3Vzc2VhdSBkYW5zIHNhIGTDqXByZXNzaW9uIDsgbWFpcyBsYSByZWxpZ2lvbiwgbWFpcyBsYSBsaWJlcnTDqSwgbGEganVzdGljZSAhIHZvaWzDoCwgcXVpIHF1ZSB2b3VzIHNveWV6LCBjZSBxdWkgbidlc3QgcGFzIGF1LWRlc3NvdXMgZGUgdm91cy4KK1F1J29uIG5lIGNoZXJjaGUgcGFzIG3Dqm1lIGljaSBkYW5zIGxlIHN0eWxlIGxlIGTDqWRvbW1hZ2VtZW50IGRlIGwnYXJpZGl0w6kgZGUgbGEgbWF0acOocmUuIENldXggcXVlIHF1ZWxxdWVzIHRyYWl0cyBoZXVyZXV4IGRlIG1hIHBsdW1lIG9udCBzaSBmb3J0IGlycml0w6lzIHRyb3V2ZXJvbnQgZGUgcXVvaSBzJ2FwYWlzZXIgZGFucyBjZXMgbGV0dHJlcywgTCdob25uZXVyIGRlIGTDqWZlbmRyZSB1biBvcHByaW3DqSBlw7t0IGVuZmxhbW3DqSBtb24gY29ldXIgc2kgaidhdmFpcyBwYXJsw6kgcG91ciB1biBhdXRyZS4gUsOpZHVpdCBhdSB0cmlzdGUgZW1wbG9pIGRlIG1lIGTDqWZlbmRyZSBtb2ktbcOqbWUsIGonYWkgZMO7IG1lIGJvcm5lciDDoCByYWlzb25uZXIgOyBtJ8OpY2hhdWZmZXIgZcO7dCDDqXTDqSBtJ2F2aWxpci4gSidhdXJhaSBkb25jIHRyb3V2w6kgZ3LDomNlIGVuIGNlIHBvaW50IGRldmFudCBjZXV4IHF1aSBzJ2ltYWdpbmVudCBxdSdpbCBlc3QgZXNzZW50aWVsIMOgIGxhIHbDqXJpdMOpIGQnw6p0cmUgZGl0ZSBmcm9pZGVtZW50IDsgb3BpbmlvbiBxdWUgcG91cnRhbnQgaidhaSBwZWluZSDDoCBjb21wcmVuZHJlLiBMb3JzcXUndW5lIHZpdmUgcGVyc3Vhc2lvbiBub3VzIGFuaW1lLCBsZSBtb3llbiBkJ2VtcGxveWVyIHVuIGxhbmdhZ2UgZ2xhY8OpID8gUXVhbmQgQXJjaGltw6hkZSB0b3V0IHRyYW5zcG9ydMOpIGNvdXJhaXQgbnUgZGFucyBsZXMgcnVlcyBkZSBTeXJhY3VzZSwgZW4gYXZhaXQtaWwgbW9pbnMgdHJvdXbDqSBsYSB2w6lyaXTDqSBwYXJjZSBxdSdpbCBzZSBwYXNzaW9ubmFpdCBwb3VyIGVsbGUgPyBUb3V0IGF1IGNvbnRyYWlyZSwgY2VsdWkgcXVpIGxhIHNlbnQgbmUgcGV1dCBzJ2Fic3RlbmlyIGRlIGwnYWRvcmVyIDsgY2VsdWkgcXVpIGRlbWV1cmUgZnJvaWQgbmUgbCdhIHBhcyB2dWUuCitRdW9pIHF1J2lsIGVuIHNvaXQsIGplIHByaWUgbGVzIGxlY3RldXJzIGRlIHZvdWxvaXIgYmllbiBtZXR0cmUgw6AgcGFydCBtb24gYmVhdSBzdHlsZSwgZXQgZCdleGFtaW5lciBzZXVsZW1lbnQgc2kgamUgcmFpc29ubmUgYmllbiBvdSBtYWwgOyBjYXIgZW5maW4sIGRlIGNlbGEgc2V1bCBxdSd1biBhdXRldXIgcydleHByaW1lIGVuIGJvbnMgdGVybWVzLCBqZSBuZSB2b2lzIHBhcyBjb21tZW50IGlsIHBldXQgcydlbnN1aXZyZSBxdWUgY2V0IGF1dGV1ciBuZSBzYWl0IGNlIHF1J2lsIGRpdC4KKyIiIgpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL0VYQU1QTEUucHkgYi9Ub29scy9tb2R1bGF0b3IvRVhBTVBMRS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM2YTVhNy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvRVhBTVBMRS5weQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMKLSMgRXhhbXBsZSBpbnB1dCBmaWxlIGZvciBtb2R1bGF0b3IgaWYgeW91IGRvbid0IGhhdmUgdGsuCi0jCi0jIFlvdSBtYXkgYWxzbyBoYXZlIHRvIHN0cmlwIHNvbWUgaW1wb3J0cyBvdXQgb2YgbW9kdWxhdG9yIHRvIG1ha2UKLSMgaXQgd29yay4KLQotaW1wb3J0IGdlbm1vZHVsZQotCi0jCi0jIEdlbmVyYXRlIGNvZGUgZm9yIGEgc2ltcGxlIG9iamVjdCB3aXRoIGEgbWV0aG9kIGNhbGxlZCBzYW1wbGUKLQotbyA9IGdlbm1vZHVsZS5vYmplY3QoKQotby5uYW1lID0gJ3NpbXBsZSBvYmplY3QnCi1vLmFiYnJldiA9ICdzaW1wJwotby5tZXRob2RsaXN0ID0gWydzYW1wbGUnXQotby5mdW5jbGlzdCA9IFsnbmV3J10KLQotIwotIyBHZW5lcmF0ZSBjb2RlIGZvciBhbiBvYmplY3QgdGhhdCBsb29rcyBudW1iZXJpc2gKLSMKLW8yID0gZ2VubW9kdWxlLm9iamVjdCgpCi1vMi5uYW1lID0gJ251bWJlci1saWtlIG9iamVjdCcKLW8yLmFiYnJldiA9ICdubCcKLW8yLnR5cGVsaXN0ID0gWyd0cF9hc19udW1iZXInXQotbzIuZnVuY2xpc3QgPSBbJ25ldycsICd0cF9yZXByJywgJ3RwX2NvbXBhcmUnXQotCi0jCi0jIEdlbmVyYXRlIGNvZGUgZm9yIGEgbWV0aG9kIHdpdGggYSBmdWxsIGNvbXBsZW1lbnQgb2YgZnVuY3Rpb25zLAotIyBzb21lIG1ldGhvZHMsIGFjY2Vzc2libGUgYXMgc2VxdWVuY2UgYW5kIGFsbG93aW5nIHN0cnVjdG1lbWJlci5jIHR5cGUKLSMgc3RydWN0dXJlIGFjY2VzcyBhcyB3ZWxsLgotIwotbzMgPSBnZW5tb2R1bGUub2JqZWN0KCkKLW8zLm5hbWUgPSAnb3Zlci10aGUtdG9wIG9iamVjdCcKLW8zLmFiYnJldiA9ICdvdCcKLW8zLm1ldGhvZGxpc3QgPSBbJ21ldGhvZDEnLCAnbWV0aG9kMiddCi1vMy5mdW5jbGlzdCA9IFsnbmV3JywgJ3RwX2RlYWxsb2MnLCAndHBfcHJpbnQnLCAndHBfZ2V0YXR0cicsICd0cF9zZXRhdHRyJywKLSAgICAgICAgICAgICd0cF9jb21wYXJlJywgJ3RwX3JlcHInLCAndHBfaGFzaCddCi1vMy50eXBlbGlzdCA9IFsndHBfYXNfc2VxdWVuY2UnLCAnc3RydWN0dXJlJ10KLQotIwotIyBOb3cgZ2VuZXJhdGUgY29kZSBmb3IgYSBtb2R1bGUgdGhhdCBpbmNvcnBvcmF0ZXMgdGhlc2Ugb2JqZWN0IHR5cGVzLgotIyBBbHNvIGFkZCB0aGUgYm9pbGVycGxhdGVzIGZvciBmdW5jdGlvbnMgdG8gY3JlYXRlIGluc3RhbmNlcyBvZiBlYWNoCi0jIHR5cGUuCi0jCi1tID0gZ2VubW9kdWxlLm1vZHVsZSgpCi1tLm5hbWUgPSAnc2FtcGxlJwotbS5hYmJyZXYgPSAnc2FtcGxlJwotbS5tZXRob2RsaXN0ID0gWyduZXdzaW1wbGUnLCAnbmV3bnVtYmVyaXNoJywgJ25ld290dCddCi1tLm9iamVjdHMgPSBbbywgbzIsIG8zXQotCi1mcCA9IG9wZW4oJ0VYQU1QTEVtb2R1bGUuYycsICd3JykKLWdlbm1vZHVsZS53cml0ZShmcCwgbSkKLWZwLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9SRUFETUUgYi9Ub29scy9tb2R1bGF0b3IvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWU4NmI0Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1UaGlzIGlzIHJlbGVhc2UgMS4yIG9mIG1vZHVsYXRvciwgYSBnZW5lcmF0b3Igb2YgYm9pbGVycGxhdGUgY29kZSBmb3IKLW1vZHVsZXMgdG8gYmUgd3JpdHRlbiBpbiBDLgotCi1EaWZmZXJlbmNlIGJldHdlZW4gMS4yIGFuZCAxLjE6IF9fZG9jX18gdGVtcGxhdGVzIGFyZSBub3cgZ2VuZXJhdGVkCi0odGhhbmtzIHRvIEppbSBGdWx0b24pLgotCi1EaWZmZXJlbmNlIGJldHdlZW4gMS4xIGFuZCAxLjA6IHRoZSB0ZW1wbGF0ZXMgbm93IHVzZSAibmV3LXN0eWxlIgotbmFtaW5nIGNvbnZlbnRpb25zLiBNYW55IHRoYW5rcyB0byBDaGFrIFRhbiA8dGFuQGVlLnJvY2hlc3Rlci5lZHU+IGZvcgotc3VwcGx5aW5nIHRoZW0uCi0KLVVzYWdlIHdoZW4geW91IGhhdmUgdGsgaXMgKnJlYWxseSogc2ltcGxlOiBzdGFydCBtb2R1bGF0b3IsIGZpbGwgb3V0Ci10aGUgZm9ybXMgc3BlY2lmeWluZyBhbGwgdGhlIG9iamVjdHMgYW5kIG1ldGhvZHMsIHRlbGwgbW9kdWxhdG9yCi13aGV0aGVyIG9iamVjdHMgc2hvdWxkIGFsc28gYmUgYWNjZXNzaWJsZSBhcyBzZXF1ZW5jZXMsIGV0YyBhbmQgcHJlc3MKLSdnZW5lcmF0ZSBjb2RlJy4gSXQgd2lsbCB3cml0ZSBhIGNvbXBsZXRlIHNrZWxldG9uIG1vZHVsZSBmb3IgeW91LgotCi1Vc2FnZSB3aGVuIHlvdSBkb24ndCBoYXZlIHRrIGlzIHNsaWdodGx5IG1vcmUgZGlmZmljdWx0LiBMb29rIGF0Ci1FWEFNUExFLnB5IGZvciBzb21lIGRldGFpbHMgKHRvIHJ1biwgdXNlICJweXRob24gRVhBTVBMRS5weSIpLiAgRG9uJ3QKLWJvdGhlciB3aXRoIEVYQU1QTEUucHkgaWYgeW91IGhhdmUgVGtpbnRlciEhIQotCi1PaCB5ZWFoOiB5b3UnbGwgcHJvYmFibHkgd2FudCB0byBjaGFuZ2UgVGVtcGxhdGVzL2NvcHlyaWdodCwgb3IgYWxsCi15b3VyIGNvZGUgZW5kcyB1cCBhcyBiZWluZyBjb3B5cmlnaHRlZCB0byBDV0k6LSkKLQotTGV0IG1lIGtub3cgd2hhdCB5b3UgdGhpbmssCi0JCQkJSmFjayBKYW5zZW4sIGphY2tAY3dpLm5sCi0JCQkJCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvU2Nyb2xsZWRMaXN0Ym94LnB5IGIvVG9vbHMvbW9kdWxhdG9yL1Njcm9sbGVkTGlzdGJveC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVjNjQ2ZC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvU2Nyb2xsZWRMaXN0Ym94LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotIyBBIFNjcm9sbGVkTGlzdCB3aWRnZXQgZmVlbHMgbGlrZSBhIGxpc3Qgd2lkZ2V0IGJ1dCBhbHNvIGhhcyBhCi0jIHZlcnRpY2FsIHNjcm9sbCBiYXIgb24gaXRzIHJpZ2h0LiAgKExhdGVyLCBvcHRpb25zIG1heSBiZSBhZGRlZCB0bwotIyBhZGQgYSBob3Jpem9udGFsIGJhciBhcyB3ZWxsLCB0byBtYWtlIHRoZSBiYXJzIGRpc2FwcGVhcgotIyBhdXRvbWF0aWNhbGx5IHdoZW4gbm90IG5lZWRlZCwgdG8gbW92ZSB0aGVtIHRvIHRoZSBvdGhlciBzaWRlIG9mIHRoZQotIyB3aW5kb3csIGV0Yy4pCi0jCi0jIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcGFzc2VkIHRvIHRoZSBMaXN0IHdpZGdldC4KLSMgQSBGcmFtZSB3aWRnZXQgaXMgaW5zZXJ0ZWQgYmV0d2VlbiB0aGUgbWFzdGVyIGFuZCB0aGUgbGlzdCwgdG8gaG9sZAotIyB0aGUgU2Nyb2xsYmFyIHdpZGdldC4KLSMgTW9zdCBtZXRob2RzIGNhbGxzIGFyZSBpbmhlcml0ZWQgZnJvbSB0aGUgTGlzdCB3aWRnZXQ7IFBhY2sgbWV0aG9kcwotIyBhcmUgcmVkaXJlY3RlZCB0byB0aGUgRnJhbWUgd2lkZ2V0IGhvd2V2ZXIuCi0KLWZyb20gVGtpbnRlciBpbXBvcnQgKgotZnJvbSBUa2ludGVyIGltcG9ydCBfY25mbWVyZ2UKLQotY2xhc3MgU2Nyb2xsZWRMaXN0Ym94KExpc3Rib3gpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9KToKLSAgICAgICAgY25mID0gX2NuZm1lcmdlKGNuZikKLSAgICAgICAgZmNuZiA9IHt9Ci0gICAgICAgIHZjbmYgPSB7J25hbWUnOiAndmJhcicsCi0gICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAncmlnaHQnLCAnZmlsbCc6ICd5J30sfQotICAgICAgICBmb3IgayBpbiBsaXN0KGNuZi5rZXlzKCkpOgotICAgICAgICAgICAgaWYgdHlwZShrKSA9PSBDbGFzc1R5cGUgb3IgayA9PSAnbmFtZSc6Ci0gICAgICAgICAgICAgICAgZmNuZltrXSA9IGNuZltrXQotICAgICAgICAgICAgICAgIGRlbCBjbmZba10KLSAgICAgICAgc2VsZi5mcmFtZSA9IEZyYW1lKG1hc3RlciwgZmNuZikKLSAgICAgICAgc2VsZi52YmFyID0gU2Nyb2xsYmFyKHNlbGYuZnJhbWUsIHZjbmYpCi0gICAgICAgIGNuZltQYWNrXSA9IHsnc2lkZSc6ICdsZWZ0JywgJ2ZpbGwnOiAnYm90aCcsICdleHBhbmQnOiAneWVzJ30KLSAgICAgICAgY25mWyduYW1lJ10gPSAnbGlzdCcKLSAgICAgICAgTGlzdGJveC5fX2luaXRfXyhzZWxmLCBzZWxmLmZyYW1lLCBjbmYpCi0gICAgICAgIHNlbGZbJ3lzY3JvbGxjb21tYW5kJ10gPSAoc2VsZi52YmFyLCAnc2V0JykKLSAgICAgICAgc2VsZi52YmFyWydjb21tYW5kJ10gPSAoc2VsZiwgJ3l2aWV3JykKLQotICAgICAgICAjIENvcHkgUGFjayBtZXRob2RzIG9mIHNlbGYuZnJhbWUgLS0gaGFjayEKLSAgICAgICAgZm9yIG0gaW4gUGFjay5fX2RpY3RfXzoKLSAgICAgICAgICAgIGlmIG1bMF0gIT0gJ18nIGFuZCBtICE9ICdjb25maWcnOgotICAgICAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgbSwgZ2V0YXR0cihzZWxmLmZyYW1lLCBtKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX2hlYWQgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV9oZWFkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTAwMTA5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX2hlYWQKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1zdGF0aWMgUHlPYmplY3QgKkVycm9yT2JqZWN0OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfbWV0aG9kIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9tb2R1bGVfbWV0aG9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDQ4YjFmLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX21ldGhvZAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLQotc3RhdGljIGNoYXIgJGFiYnJldiRfJG1ldGhvZCRfX2RvY19fW10gPQotIiIKLTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkXyRtZXRob2QkKFB5T2JqZWN0ICpzZWxmIC8qIE5vdCB1c2VkICovLCBQeU9iamVjdCAqYXJncykKLXsKLQotCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIikpCi0JCXJldHVybiBOVUxMOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlyZXR1cm4gUHlfTm9uZTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX3RhaWwgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL21vZHVsZV90YWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWNjNTBiLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvbW9kdWxlX3RhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0KLS8qIExpc3Qgb2YgbWV0aG9kcyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgKi8KLQotc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiAkYWJicmV2JF9tZXRob2RzW10gPSB7Ci0JJG1ldGhvZGxpc3QkCi0Je05VTEwsCSAoUHlDRnVuY3Rpb24pTlVMTCwgMCwgTlVMTH0JCS8qIHNlbnRpbmVsICovCi19OwotCi0KLS8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIGluaXQkbmFtZSQpICovCi0KLXN0YXRpYyBjaGFyICRuYW1lJF9tb2R1bGVfZG9jdW1lbnRhdGlvbltdID0gCi0iIgotOwotCi12b2lkCi1pbml0JG5hbWUkKCkKLXsKLQlQeU9iamVjdCAqbSwgKmQ7Ci0KLQkvKiBDcmVhdGUgdGhlIG1vZHVsZSBhbmQgYWRkIHRoZSBmdW5jdGlvbnMgKi8KLQltID0gUHlfSW5pdE1vZHVsZTQoIiRuYW1lJCIsICRhYmJyZXYkX21ldGhvZHMsCi0JCSRuYW1lJF9tb2R1bGVfZG9jdW1lbnRhdGlvbiwKLQkJKFB5T2JqZWN0KilOVUxMLFBZVEhPTl9BUElfVkVSU0lPTik7Ci0KLQkvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwotCWQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotCUVycm9yT2JqZWN0ID0gUHlTdHJpbmdfRnJvbVN0cmluZygiJG5hbWUkLmVycm9yIik7Ci0JUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgImVycm9yIiwgRXJyb3JPYmplY3QpOwotCi0JLyogWFhYWCBBZGQgY29uc3RhbnRzIGhlcmUgKi8KLQkKLQkvKiBDaGVjayBmb3IgZXJyb3JzICovCi0JaWYgKFB5RXJyX09jY3VycmVkKCkpCi0JCVB5X0ZhdGFsRXJyb3IoImNhbid0IGluaXRpYWxpemUgbW9kdWxlICRuYW1lJCIpOwotfQotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9oZWFkIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfaGVhZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdkMWY2YS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9oZWFkCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotCi0vKiBEZWNsYXJhdGlvbnMgZm9yIG9iamVjdHMgb2YgdHlwZSAkbmFtZSQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotCVB5T2JqZWN0X0hFQUQKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBzdHVmZiBoZXJlICovCi19ICRhYmJyZXYkb2JqZWN0OwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0ICRBYmJyZXYkdHlwZTsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21ldGhvZCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X21ldGhvZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE1MTYyYy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tZXRob2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi0KLXN0YXRpYyBjaGFyICRhYmJyZXYkXyRtZXRob2QkX19kb2NfX1tdID0gCi0iIgotOwotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfJG1ldGhvZCQoJGFiYnJldiRvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotCWlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiIikpCi0JCXJldHVybiBOVUxMOwotCVB5X0lOQ1JFRihQeV9Ob25lKTsKLQlyZXR1cm4gUHlfTm9uZTsKLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbWxpc3QgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyYTllMS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9tbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotCi1zdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmICRhYmJyZXYkX21ldGhvZHNbXSA9IHsKLQkkbWV0aG9kbGlzdCQKLQl7TlVMTCwJCU5VTEx9CQkvKiBzZW50aW5lbCAqLwotfTsKLQotLyogLS0tLS0tLS0tLSAqLwotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9uZXcgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9uZXcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwYzVlMzYuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfbmV3CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotCi1zdGF0aWMgJGFiYnJldiRvYmplY3QgKgotbmV3JGFiYnJldiRvYmplY3QoKQotewotCSRhYmJyZXYkb2JqZWN0ICpzZWxmOwotCQotCXNlbGYgPSBQeU9iamVjdF9ORVcoJGFiYnJldiRvYmplY3QsICYkQWJicmV2JHR5cGUpOwotCWlmIChzZWxmID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCS8qIFhYWFggQWRkIHlvdXIgb3duIGluaXRpYWxpemVycyBoZXJlICovCi0JcmV0dXJuIHNlbGY7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3N0cnVjdHVyZSBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3N0cnVjdHVyZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzhkYWE2Mi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF9zdHJ1Y3R1cmUKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0KLS8qIENvZGUgdG8gYWNjZXNzIHN0cnVjdHVyZSBtZW1iZXJzIGJ5IGFjY2Vzc2luZyBhdHRyaWJ1dGVzICovCi0KLSNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKLQotI2RlZmluZSBPRkYoeCkgb2Zmc2V0b2YoWFhYWG9iamVjdCwgeCkKLQotc3RhdGljIFB5TWVtYmVyRGVmICRhYmJyZXYkX21lbWJlcmxpc3RbXSA9IHsKLQkvKiBYWFhYIEFkZCBsaW5lcyBsaWtlIHsgImZvbyIsIFRfSU5ULCBPRkYoZm9vKSwgUkVBRE9OTFkgfSAgKi8KLQotCXtOVUxMfQkvKiBTZW50aW5lbCAqLwotfTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2dldGF0dHIoJGFiYnJldiRvYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUpCi17Ci0JUHlPYmplY3QgKnJ2OwotCQotCS8qIFhYWFggQWRkIHlvdXIgb3duIGdldGF0dHIgY29kZSBoZXJlICovCi0JcnYgPSBQeU1lbWJlcl9HZXRPbmUoKGNoYXIgKikvKlhYWFgqLzAsICYkYWJicmV2JF9tZW1iZXJsaXN0W2ldKTsKLQlpZiAocnYpCi0JCXJldHVybiBydjsKLQlQeUVycl9DbGVhcigpOwotCXJldHVybiBQeV9GaW5kTWV0aG9kKCRhYmJyZXYkX21ldGhvZHMsIChQeU9iamVjdCAqKXNlbGYsIG5hbWUpOwotfQotCi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX3NldGF0dHIoJGFiYnJldiRvYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQotewotCS8qIFhYWFggQWRkIHlvdXIgb3duIHNldGF0dHIgY29kZSBoZXJlICovCi0JaWYgKCB2ID09IE5VTEwgKSB7Ci0JCVB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgIkNhbm5vdCBkZWxldGUgYXR0cmlidXRlIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JcmV0dXJuIFB5TWVtYmVyX1NldE9uZSgoY2hhciAqKS8qWFhYWCovMCwgJiRhYmJyZXYkX21lbWJlcmxpc3RbaV0sIHYpOwotfQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdGFpbCBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTMzNGMuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdGFpbAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLQotc3RhdGljIGNoYXIgJEFiYnJldiR0eXBlX19kb2NfX1tdID0gCi0iIgotOwotCi1zdGF0aWMgUHlUeXBlT2JqZWN0ICRBYmJyZXYkdHlwZSA9IHsKLQlQeU9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlKQotCTAsCQkJCS8qb2Jfc2l6ZSovCi0JIiRuYW1lJCIsCQkJLyp0cF9uYW1lKi8KLQlzaXplb2YoJGFiYnJldiRvYmplY3QpLAkJLyp0cF9iYXNpY3NpemUqLwotCTAsCQkJCS8qdHBfaXRlbXNpemUqLwotCS8qIG1ldGhvZHMgKi8KLQkoZGVzdHJ1Y3RvcikkdHBfZGVhbGxvYyQsCS8qdHBfZGVhbGxvYyovCi0JKHByaW50ZnVuYykkdHBfcHJpbnQkLAkJLyp0cF9wcmludCovCi0JKGdldGF0dHJmdW5jKSR0cF9nZXRhdHRyJCwJLyp0cF9nZXRhdHRyKi8KLQkoc2V0YXR0cmZ1bmMpJHRwX3NldGF0dHIkLAkvKnRwX3NldGF0dHIqLwotCShjbXBmdW5jKSR0cF9jb21wYXJlJCwJCS8qdHBfY29tcGFyZSovCi0JKHJlcHJmdW5jKSR0cF9yZXByJCwJCS8qdHBfcmVwciovCi0JJHRwX2FzX251bWJlciQsCQkJLyp0cF9hc19udW1iZXIqLwotCSR0cF9hc19zZXF1ZW5jZSQsCQkvKnRwX2FzX3NlcXVlbmNlKi8KLQkkdHBfYXNfbWFwcGluZyQsCQkvKnRwX2FzX21hcHBpbmcqLwotCShoYXNoZnVuYykkdHBfaGFzaCQsCQkvKnRwX2hhc2gqLwotCSh0ZXJuYXJ5ZnVuYykkdHBfY2FsbCQsCQkvKnRwX2NhbGwqLwotCShyZXByZnVuYykkdHBfc3RyJCwJCS8qdHBfc3RyKi8KLQotCS8qIFNwYWNlIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCi0JMEwsMEwsMEwsMEwsCi0JJEFiYnJldiR0eXBlX19kb2NfXyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwotfTsKLQotLyogRW5kIG9mIGNvZGUgZm9yICRuYW1lJCBvYmplY3RzICovCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19tYXBwaW5nIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbWFwcGluZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkyMTNiNy4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9hc19tYXBwaW5nCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotCi0vKiBDb2RlIHRvIGFjY2VzcyAkbmFtZSQgb2JqZWN0cyBhcyBtYXBwaW5ncyAqLwotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9sZW5ndGgoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JLyogWFhYWCBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIG1hcHBpbmcgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3N1YnNjcmlwdCgkYWJicmV2JG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmtleSkKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgaXRlbSBvZiBzZWxmIGluZGV4ZWQgYnkga2V5ICovCi19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2Fzc19zdWIoJGFiYnJldiRvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKLXsKLQkvKiBYWFhYIFB1dCB3IGluIHNlbGYgdW5kZXIga2V5IHYgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIFB5TWFwcGluZ01ldGhvZHMgJGFiYnJldiRfYXNfbWFwcGluZyA9IHsKLQkoaW5xdWlyeSkkYWJicmV2JF9sZW5ndGgsCQkvKm1wX2xlbmd0aCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfc3Vic2NyaXB0LAkJLyptcF9zdWJzY3JpcHQqLwotCShvYmpvYmphcmdwcm9jKSRhYmJyZXYkX2Fzc19zdWIsCS8qbXBfYXNzX3N1YnNjcmlwdCovCi19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbnVtYmVyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfbnVtYmVyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzQyNmMyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX251bWJlcgorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi0KLS8qIENvZGUgdG8gYWNjZXNzICRuYW1lJCBvYmplY3RzIGFzIG51bWJlcnMgKi8KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2FkZCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCBBZGQgdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfc3ViKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIFN1YnRyYWN0IHRoZW0gKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX211bCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCBNdWx0aXBseSB0aGVtICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9kaXYoJGFiYnJldiRvYmplY3QgKngsICRhYmJyZXYkb2JqZWN0ICp5KQotewotCS8qIFhYWFggRGl2aWRlIHRoZW0gKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX21vZCgkYWJicmV2JG9iamVjdCAqeCwgJGFiYnJldiRvYmplY3QgKnkpCi17Ci0JLyogWFhYWCBNb2R1bG8gdGhlbSAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfZGl2bW9kKCRhYmJyZXYkb2JqZWN0ICp4LCAkYWJicmV2JG9iamVjdCAqeSkKLXsKLQkvKiBYWFhYIFJldHVybiAyLXR1cGxlIHdpdGggZGl2IGFuZCBtb2QgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3BvdygkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncsICRhYmJyZXYkb2JqZWN0ICp6KQotewotCS8qIFhYWFggKi8KLX0JCQkJCi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9uZWcoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcG9zKCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2FicygkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX25vbnplcm8oJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXR1cm4gMSBpZiBub24temVybyAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfaW52ZXJ0KCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2xzaGlmdCgkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcnNoaWZ0KCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9hbmQoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3hvcigkYWJicmV2JG9iamVjdCAqdiwgJGFiYnJldiRvYmplY3QgKncpCi17Ci0JLyogWFhYWCAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfb3IoJGFiYnJldiRvYmplY3QgKnYsICRhYmJyZXYkb2JqZWN0ICp3KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2ludCgkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9sb25nKCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2Zsb2F0KCRhYmJyZXYkb2JqZWN0ICp2KQotewotCS8qIFhYWFggKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX29jdCgkYWJicmV2JG9iamVjdCAqdikKLXsKLQkvKiBYWFhYIFJldHVybiBvYmplY3QgYXMgb2N0YWwgc3RyaW5nb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9oZXgoJGFiYnJldiRvYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXR1cm4gb2JqZWN0IGFzIGhleCBzdHJpbmdvYmplY3QgKi8KLX0KLQotc3RhdGljIFB5TnVtYmVyTWV0aG9kcyAkYWJicmV2JF9hc19udW1iZXIgPSB7Ci0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfYWRkLAkvKm5iX2FkZCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfc3ViLAkvKm5iX3N1YnRyYWN0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9tdWwsCS8qbmJfbXVsdGlwbHkqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2RpdiwJLypuYl9kaXZpZGUqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX21vZCwJLypuYl9yZW1haW5kZXIqLwotCShiaW5hcnlmdW5jKSRhYmJyZXYkX2Rpdm1vZCwJLypuYl9kaXZtb2QqLwotCSh0ZXJuYXJ5ZnVuYykkYWJicmV2JF9wb3csCS8qbmJfcG93ZXIqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfbmVnLAkvKm5iX25lZ2F0aXZlKi8KLQkodW5hcnlmdW5jKSRhYmJyZXYkX3BvcywJLypuYl9wb3NpdGl2ZSovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9hYnMsCS8qbmJfYWJzb2x1dGUqLwotCShpbnF1aXJ5KSRhYmJyZXYkX25vbnplcm8sCS8qbmJfbm9uemVybyovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9pbnZlcnQsCS8qbmJfaW52ZXJ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9sc2hpZnQsCS8qbmJfbHNoaWZ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9yc2hpZnQsCS8qbmJfcnNoaWZ0Ki8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9hbmQsCS8qbmJfYW5kKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF94b3IsCS8qbmJfeG9yKi8KLQkoYmluYXJ5ZnVuYykkYWJicmV2JF9vciwJLypuYl9vciovCi0JKGNvZXJjaW9uKSRhYmJyZXYkX2NvZXJjZSwJLypuYl9jb2VyY2UqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfaW50LAkvKm5iX2ludCovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9sb25nLAkvKm5iX2xvbmcqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfZmxvYXQsCS8qbmJfZmxvYXQqLwotCSh1bmFyeWZ1bmMpJGFiYnJldiRfb2N0LAkvKm5iX29jdCovCi0JKHVuYXJ5ZnVuYykkYWJicmV2JF9oZXgsCS8qbmJfaGV4Ki8KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2FzX3NlcXVlbmNlIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfc2VxdWVuY2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0YzBiOTIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfYXNfc2VxdWVuY2UKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0KLS8qIENvZGUgdG8gaGFuZGxlIGFjY2Vzc2luZyAkbmFtZSQgb2JqZWN0cyBhcyBzZXF1ZW5jZSBvYmplY3RzICovCi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX2xlbmd0aCgkYWJicmV2JG9iamVjdCAqc2VsZikKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0ICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9jb25jYXQoJGFiYnJldiRvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpiYikKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBzZWxmIGFuZCBiYiAqLwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotJGFiYnJldiRfcmVwZWF0KCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBpbnQgbikKLXsKLQkvKiBYWFhYIFJldHVybiBhIG5ldyBvYmplY3QgdGhhdCBpcyBuIHRpbWVzIHNlbGYgKi8KLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX2l0ZW0oJGFiYnJldiRvYmplY3QgKnNlbGYsIGludCBpKQotewotCS8qIFhYWFggUmV0dXJuIHRoZSBpLXRoIG9iamVjdCBvZiBzZWxmICovCi19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9zbGljZSgkYWJicmV2JG9iamVjdCAqc2VsZiwgaW50IGlsb3csIGludCBpaGlnaCkKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgaWxvdy4uaWhpZ2ggc2xpY2Ugb2Ygc2VsZiBpbiBhIG5ldyBvYmplY3QgKi8KLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfYXNzX2l0ZW0oJGFiYnJldiRvYmplY3QgKnNlbGYsIGludCBpLCBQeU9iamVjdCAqdikKLXsKLQkvKiBYWFhYIEFzc2lnbiB0byB0aGUgaS10aCBlbGVtZW50IG9mIHNlbGYgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotJGFiYnJldiRfYXNzX3NsaWNlKFB5TGlzdE9iamVjdCAqc2VsZiwgaW50IGlsb3csIGludCBpaGlnaCwgUHlPYmplY3QgKnYpCi17Ci0JLyogWFhYWCBSZXBsYWNlIGlsb3cuLmloaWdoIHNsaWNlIG9mIHNlbGYgd2l0aCB2ICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBQeVNlcXVlbmNlTWV0aG9kcyAkYWJicmV2JF9hc19zZXF1ZW5jZSA9IHsKLQkoaW5xdWlyeSkkYWJicmV2JF9sZW5ndGgsCQkvKnNxX2xlbmd0aCovCi0JKGJpbmFyeWZ1bmMpJGFiYnJldiRfY29uY2F0LAkJLypzcV9jb25jYXQqLwotCShpbnRhcmdmdW5jKSRhYmJyZXYkX3JlcGVhdCwJCS8qc3FfcmVwZWF0Ki8KLQkoaW50YXJnZnVuYykkYWJicmV2JF9pdGVtLAkJLypzcV9pdGVtKi8KLQkoaW50aW50YXJnZnVuYykkYWJicmV2JF9zbGljZSwJCS8qc3Ffc2xpY2UqLwotCShpbnRvYmphcmdwcm9jKSRhYmJyZXYkX2Fzc19pdGVtLAkvKnNxX2Fzc19pdGVtKi8KLQkoaW50aW50b2JqYXJncHJvYykkYWJicmV2JF9hc3Nfc2xpY2UsCS8qc3FfYXNzX3NsaWNlKi8KLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9jYWxsIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY2FsbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTkzZjE3Zi4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9jYWxsCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9jYWxsKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKLXsKLQkvKiBYWFhYIFJldHVybiB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgc2VsZiB3aXRoIGFyZ3VtZW50IGFyZ3MgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY29tcGFyZSBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2NvbXBhcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1M2JhZTAuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfY29tcGFyZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi1zdGF0aWMgaW50Ci0kYWJicmV2JF9jb21wYXJlKCRhYmJyZXYkb2JqZWN0ICp2LCAkYWJicmV2JG9iamVjdCAqdykKLXsKLQkvKiBYWFhYIENvbXBhcmUgb2JqZWN0cyBhbmQgcmV0dXJuIC0xLCAwIG9yIDEgKi8KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2RlYWxsb2MgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9kZWFsbG9jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDA0MTlhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX2RlYWxsb2MKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotc3RhdGljIHZvaWQKLSRhYmJyZXYkX2RlYWxsb2MoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JLyogWFhYWCBBZGQgeW91ciBvd24gY2xlYW51cCBjb2RlIGhlcmUgKi8KLQlQeU1lbV9ERUwoc2VsZik7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9nZXRhdHRyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfZ2V0YXR0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmExYjJlOC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9nZXRhdHRyCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9nZXRhdHRyKCRhYmJyZXYkb2JqZWN0ICpzZWxmLCBjaGFyICpuYW1lKQotewotCS8qIFhYWFggQWRkIHlvdXIgb3duIGdldGF0dHIgY29kZSBoZXJlICovCi0JcmV0dXJuIFB5X0ZpbmRNZXRob2QoJGFiYnJldiRfbWV0aG9kcywgKFB5T2JqZWN0ICopc2VsZiwgbmFtZSk7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9oYXNoIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfaGFzaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ2M2Y2YS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9oYXNoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLXN0YXRpYyBsb25nCi0kYWJicmV2JF9oYXNoKCRhYmJyZXYkb2JqZWN0ICpzZWxmKQotewotCS8qIFhYWFggUmV0dXJuIGEgaGFzaCBvZiBzZWxmIChvciAtMSkgKi8KLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3ByaW50IGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfcHJpbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NDA4ZDIuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfcHJpbnQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLQotc3RhdGljIGludAotJGFiYnJldiRfcHJpbnQoJGFiYnJldiRvYmplY3QgKnNlbGYsIEZJTEUgKmZwLCBpbnQgZmxhZ3MpCi17Ci0JLyogWFhYWCBBZGQgY29kZSBoZXJlIHRvIHByaW50IHNlbGYgdG8gZnAgKi8KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3JlcHIgYi9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9yZXByCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTIyMjI1Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3JlcHIKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLQotc3RhdGljIFB5T2JqZWN0ICoKLSRhYmJyZXYkX3JlcHIoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JUHlPYmplY3QgKnM7Ci0KLQkvKiBYWFhYIEFkZCBjb2RlIGhlcmUgdG8gcHV0IHNlbGYgaW50byBzICovCi0JcmV0dXJuIHM7Ci19CmRpZmYgLS1naXQgYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zZXRhdHRyIGIvVG9vbHMvbW9kdWxhdG9yL1RlbXBsYXRlcy9vYmplY3RfdHBfc2V0YXR0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZlNGJjOC4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zZXRhdHRyCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0KLXN0YXRpYyBpbnQKLSRhYmJyZXYkX3NldGF0dHIoJGFiYnJldiRvYmplY3QgKnNlbGYsIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICp2KQotewotCS8qIFNldCBhdHRyaWJ1dGUgJ25hbWUnIHRvIHZhbHVlICd2Jy4gdj09TlVMTCBtZWFucyBkZWxldGUgKi8KLQkKLQkvKiBYWFhYIEFkZCB5b3VyIG93biBzZXRhdHRyIGNvZGUgaGVyZSAqLwotCXJldHVybiAtMTsKLX0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3N0ciBiL1Rvb2xzL21vZHVsYXRvci9UZW1wbGF0ZXMvb2JqZWN0X3RwX3N0cgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzNjQ4ZS4uMDAwMDAwMAotLS0gYS9Ub29scy9tb2R1bGF0b3IvVGVtcGxhdGVzL29iamVjdF90cF9zdHIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0KLXN0YXRpYyBQeU9iamVjdCAqCi0kYWJicmV2JF9zdHIoJGFiYnJldiRvYmplY3QgKnNlbGYpCi17Ci0JUHlPYmplY3QgKnM7Ci0KLQkvKiBYWFhYIEFkZCBjb2RlIGhlcmUgdG8gcHV0IHNlbGYgaW50byBzICovCi0JcmV0dXJuIHM7Ci19Ci0KZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9Ua2V4dHJhLnB5IGIvVG9vbHMvbW9kdWxhdG9yL1RrZXh0cmEucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGIxMDUxYWEuLjAwMDAwMDAKLS0tIGEvVG9vbHMvbW9kdWxhdG9yL1RrZXh0cmEucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEEgUHl0aG9uIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGRpYWxvZyBib3hlcyB3aXRoIGEgdGV4dCBtZXNzYWdlLAotIyBvcHRpb25hbCBiaXRtYXAsIGFuZCBhbnkgbnVtYmVyIG9mIGJ1dHRvbnMuCi0jIENmLiBPdXN0ZXJob3V0LCBUY2wgYW5kIHRoZSBUayBUb29sa2l0LCBGaWdzLiAyNy4yLTMsIHBwLiAyNjktMjcwLgotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLQotbWFpbldpZGdldCA9IE5vbmUKLQotZGVmIGRpYWxvZyhtYXN0ZXIsIHRpdGxlLCB0ZXh0LCBiaXRtYXAsIGRlZmF1bHQsICphcmdzKToKLQotICAgICMgMS4gQ3JlYXRlIHRoZSB0b3AtbGV2ZWwgd2luZG93IGFuZCBkaXZpZGUgaXQgaW50byB0b3AKLSAgICAjIGFuZCBib3R0b20gcGFydHMuCi0KLSAgICB3ID0gVG9wbGV2ZWwobWFzdGVyLCB7J2NsYXNzJzogJ0RpYWxvZyd9KQotICAgIHcudGl0bGUodGl0bGUpCi0gICAgdy5pY29ubmFtZSgnRGlhbG9nJykKLQotICAgIHRvcCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICd0b3AnLCAnZmlsbCc6ICdib3RoJ319KQotICAgIGJvdCA9IEZyYW1lKHcsIHsncmVsaWVmJzogJ3JhaXNlZCcsICdiZCc6IDEsCi0gICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdib3R0b20nLCAnZmlsbCc6ICdib3RoJ319KQotCi0gICAgIyAyLiBGaWxsIHRoZSB0b3AgcGFydCB3aXRoIHRoZSBiaXRtYXAgYW5kIG1lc3NhZ2UuCi0KLSAgICBtc2cgPSBNZXNzYWdlKHRvcCwKLSAgICAgICAgICAgICAgICAgIHsnd2lkdGgnOiAnM2knLAotICAgICAgICAgICAgICAgICAgICd0ZXh0JzogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAnZm9udCc6ICctQWRvYmUtVGltZXMtTWVkaXVtLVItTm9ybWFsLSotMTgwLSonLAotICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdyaWdodCcsICdleHBhbmQnOiAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6ICdib3RoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnM20nLCAncGFkeSc6ICczbSd9fSkKLSAgICBpZiBiaXRtYXA6Ci0gICAgICAgIGJtID0gTGFiZWwodG9wLCB7J2JpdG1hcCc6IGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICAjIDMuIENyZWF0ZSBhIHJvdyBvZiBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIGRpYWxvZy4KLQotICAgIGJ1dHRvbnMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGJ1dCBpbiBhcmdzOgotICAgICAgICBiID0gQnV0dG9uKGJvdCwgeyd0ZXh0JzogYnV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogKCdzZXQnLCAnYnV0dG9uJywgaSl9KQotICAgICAgICBidXR0b25zLmFwcGVuZChiKQotICAgICAgICBpZiBpID09IGRlZmF1bHQ6Ci0gICAgICAgICAgICBiZCA9IEZyYW1lKGJvdCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnMm0nfX0pCi0gICAgICAgICAgICBiLmxpZnQoKQotICAgICAgICAgICAgYi5wYWNrICh7J2luJzogYmQsICdzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnMm0nLCAncGFkeSc6ICcybScsCi0gICAgICAgICAgICAgICAgICAgICAnaXBhZHgnOiAnMm0nLCAnaXBhZHknOiAnMW0nfSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGIucGFjayAoeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR5JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGkgPSBpKzEKLQotICAgICMgNC4gU2V0IHVwIGEgYmluZGluZyBmb3IgPFJldHVybj4sIGlmIHRoZXJlJ3MgYSBkZWZhdWx0LAotICAgICMgc2V0IGEgZ3JhYiwgYW5kIGNsYWltIHRoZSBmb2N1cyB0b28uCi0KLSAgICBpZiBkZWZhdWx0ID49IDA6Ci0gICAgICAgIHcuYmluZCgnPFJldHVybj4nLAotICAgICAgICAgICAgICAgbGFtYmRhIGUsIGI9YnV0dG9uc1tkZWZhdWx0XSwgaT1kZWZhdWx0OgotICAgICAgICAgICAgICAgKGIuZmxhc2goKSwKLSAgICAgICAgICAgICAgICBiLnNldHZhcignYnV0dG9uJywgaSkpKQotCi0gICAgb2xkRm9jdXMgPSB3LnRrLmNhbGwoJ2ZvY3VzJykgIyBYWFgKLSAgICB3LmdyYWJfc2V0KCkKLSAgICB3LmZvY3VzKCkKLQotICAgICMgNS4gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcmVzcG9uZCwgdGhlbiByZXN0b3JlIHRoZSBmb2N1cwotICAgICMgYW5kIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGJ1dHRvbi4KLQotICAgIHcud2FpdHZhcignYnV0dG9uJykKLSAgICB3LmRlc3Ryb3koKQotICAgIHcudGsuY2FsbCgnZm9jdXMnLCBvbGRGb2N1cykgIyBYWFgKLSAgICByZXR1cm4gdy5nZXRpbnQody5nZXR2YXIoJ2J1dHRvbicpKQotCi1kZWYgc3RyZGlhbG9nKG1hc3RlciwgdGl0bGUsIHRleHQsIGJpdG1hcCwgZGVmYXVsdCwgKmFyZ3MpOgotCi0gICAgIyAxLiBDcmVhdGUgdGhlIHRvcC1sZXZlbCB3aW5kb3cgYW5kIGRpdmlkZSBpdCBpbnRvIHRvcAotICAgICMgYW5kIGJvdHRvbSBwYXJ0cy4KLQotICAgIHcgPSBUb3BsZXZlbChtYXN0ZXIsIHsnY2xhc3MnOiAnRGlhbG9nJ30pCi0gICAgdy50aXRsZSh0aXRsZSkKLSAgICB3Lmljb25uYW1lKCdEaWFsb2cnKQotCi0gICAgdG9wID0gRnJhbWUodywgeydyZWxpZWYnOiAncmFpc2VkJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ3RvcCcsICdmaWxsJzogJ2JvdGgnfX0pCi0gICAgaWYgYXJnczoKLSAgICAgICAgYm90ID0gRnJhbWUodywgeydyZWxpZWYnOiAncmFpc2VkJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2JvdHRvbScsICdmaWxsJzogJ2JvdGgnfX0pCi0KLSAgICAjIDIuIEZpbGwgdGhlIHRvcCBwYXJ0IHdpdGggdGhlIGJpdG1hcCwgbWVzc2FnZSBhbmQgaW5wdXQgZmllbGQuCi0KLSAgICBpZiBiaXRtYXA6Ci0gICAgICAgIGJtID0gTGFiZWwodG9wLCB7J2JpdG1hcCc6IGJpdG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOiB7J3NpZGUnOiAnbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICBtc2cgPSBNZXNzYWdlKHRvcCwKLSAgICAgICAgICAgICAgICAgIHsnd2lkdGgnOiAnM2knLAotICAgICAgICAgICAgICAgICAgICd0ZXh0JzogdGV4dCwKLSAgICAgICAgICAgICAgICAgICAnZm9udCc6ICctQWRvYmUtVGltZXMtTWVkaXVtLVItTm9ybWFsLSotMTgwLSonLAotICAgICAgICAgICAgICAgICAgIFBhY2s6IHsnc2lkZSc6ICdsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOiAnYm90aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nfX0pCi0KLSAgICBmaWVsZCA9IEVudHJ5KHRvcCwKLSAgICAgICAgICAgICAgICAgIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZCc6MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzNtJywgJ3BhZHknOiczbSd9fSkKLSAgICAjIDMuIENyZWF0ZSBhIHJvdyBvZiBidXR0b25zIGF0IHRoZSBib3R0b20gb2YgdGhlIGRpYWxvZy4KLQotICAgIGJ1dHRvbnMgPSBbXQotICAgIGkgPSAwCi0gICAgZm9yIGJ1dCBpbiBhcmdzOgotICAgICAgICBiID0gQnV0dG9uKGJvdCwgeyd0ZXh0JzogYnV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzogKCdzZXQnLCAnYnV0dG9uJywgaSl9KQotICAgICAgICBidXR0b25zLmFwcGVuZChiKQotICAgICAgICBpZiBpID09IGRlZmF1bHQ6Ci0gICAgICAgICAgICBiZCA9IEZyYW1lKGJvdCwgeydyZWxpZWYnOiAnc3Vua2VuJywgJ2JkJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazogeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnMm0nfX0pCi0gICAgICAgICAgICBiLmxpZnQoKQotICAgICAgICAgICAgYi5wYWNrICh7J2luJzogYmQsICdzaWRlJzogJ2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOiAnMm0nLCAncGFkeSc6ICcybScsCi0gICAgICAgICAgICAgICAgICAgICAnaXBhZHgnOiAnMm0nLCAnaXBhZHknOiAnMW0nfSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGIucGFjayAoeydzaWRlJzogJ2xlZnQnLCAnZXhwYW5kJzogMSwKLSAgICAgICAgICAgICAgICAgICAgICdwYWR4JzogJzNtJywgJ3BhZHknOiAnM20nLAotICAgICAgICAgICAgICAgICAgICAgJ2lwYWR5JzogJzJtJywgJ2lwYWR5JzogJzFtJ30pCi0gICAgICAgIGkgPSBpKzEKLQotICAgICMgNC4gU2V0IHVwIGEgYmluZGluZyBmb3IgPFJldHVybj4sIGlmIHRoZXJlJ3MgYSBkZWZhdWx0LAotICAgICMgc2V0IGEgZ3JhYiwgYW5kIGNsYWltIHRoZSBmb2N1cyB0b28uCi0KLSAgICBpZiBub3QgYXJnczoKLSAgICAgICAgdy5iaW5kKCc8UmV0dXJuPicsIGxhbWJkYSBhcmcsIHRvcD10b3A6IHRvcC5zZXR2YXIoJ2J1dHRvbicsIDApKQotICAgICAgICBmaWVsZC5iaW5kKCc8UmV0dXJuPicsIGxhbWJkYSBhcmcsIHRvcD10b3A6IHRvcC5zZXR2YXIoJ2J1dHRvbicsIDApKQotICAgIGVsaWYgZGVmYXVsdCA+PSAwOgotICAgICAgICB3LmJpbmQoJzxSZXR1cm4+JywKLSAgICAgICAgICAgICAgIGxhbWJkYSBlLCBiPWJ1dHRvbnNbZGVmYXVsdF0sIGk9ZGVmYXVsdDoKLSAgICAgICAgICAgICAgIChiLmZsYXNoKCksCi0gICAgICAgICAgICAgICAgYi5zZXR2YXIoJ2J1dHRvbicsIGkpKSkKLSAgICAgICAgZmllbGQuYmluZCgnPFJldHVybj4nLAotICAgICAgICAgICAgICAgbGFtYmRhIGUsIGI9YnV0dG9uc1tkZWZhdWx0XSwgaT1kZWZhdWx0OgotICAgICAgICAgICAgICAgKGIuZmxhc2goKSwKLSAgICAgICAgICAgICAgICBiLnNldHZhcignYnV0dG9uJywgaSkpKQotCi0gICAgb2xkRm9jdXMgPSB3LnRrLmNhbGwoJ2ZvY3VzJykgIyBYWFgKLSAgICB3LmdyYWJfc2V0KCkKLSAgICBmaWVsZC5mb2N1cygpCi0KLSAgICAjIDUuIFdhaXQgZm9yIHRoZSB1c2VyIHRvIHJlc3BvbmQsIHRoZW4gcmVzdG9yZSB0aGUgZm9jdXMKLSAgICAjIGFuZCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBidXR0b24uCi0KLSAgICB3LndhaXR2YXIoJ2J1dHRvbicpCi0gICAgdiA9IGZpZWxkLmdldCgpCi0gICAgdy5kZXN0cm95KCkKLSAgICB3LnRrLmNhbGwoJ2ZvY3VzJywgb2xkRm9jdXMpICMgWFhYCi0gICAgaWYgYXJnczoKLSAgICAgICAgcmV0dXJuIHYsIHcuZ2V0aW50KHcuZ2V0dmFyKCdidXR0b24nKSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gdgotCi1kZWYgbWVzc2FnZShzdHIpOgotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwgJ01lc3NhZ2UnLCBzdHIsICcnLCAwLCAnT0snKQotCi1kZWYgYXNreW4oc3RyKToKLSAgICBpID0gZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDAsICdObycsICdZZXMnKQotICAgIHJldHVybiBpCi0KLWRlZiBhc2t5bmMoc3RyKToKLSAgICBpID0gZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDAsICdDYW5jZWwnLCAnTm8nLCAnWWVzJykKLSAgICByZXR1cm4gaS0xCi0KLWRlZiBhc2tzdHIoc3RyKToKLSAgICBpID0gc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDApCi0gICAgcmV0dXJuIGkKLQotZGVmIGFza2ZpbGUoc3RyKTogICAgICAgIyBYWFhYIEZvciBub3cuLi4KLSAgICBpID0gc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsIHN0ciwgJycsIDApCi0gICAgcmV0dXJuIGkKLQotIyBUaGUgcmVzdCBpcyB0aGUgdGVzdCBwcm9ncmFtLgotCi1kZWYgX2dvKCk6Ci0gICAgaSA9IGRpYWxvZyhtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgJ05vdCBSZXNwb25kaW5nJywKLSAgICAgICAgICAgICAgICJUaGUgZmlsZSBzZXJ2ZXIgaXNuJ3QgcmVzcG9uZGluZyByaWdodCBub3c7ICIKLSAgICAgICAgICAgICAgICJJJ2xsIGtlZXAgdHJ5aW5nLiIsCi0gICAgICAgICAgICAgICAnJywKLSAgICAgICAgICAgICAgIC0xLAotICAgICAgICAgICAgICAgJ09LJykKLSAgICBwcmludCgncHJlc3NlZCBidXR0b24nLCBpKQotICAgIGkgPSBkaWFsb2cobWFpbldpZGdldCwKLSAgICAgICAgICAgICAgICdGaWxlIE1vZGlmaWVkJywKLSAgICAgICAgICAgICAgICdGaWxlICJ0Y2wuaCIgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgJwotICAgICAgICAgICAgICAgJ3RoZSBsYXN0IHRpbWUgaXQgd2FzIHNhdmVkLiAnCi0gICAgICAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2F2ZSBpdCBiZWZvcmUgZXhpdGluZyB0aGUgYXBwbGljYXRpb24/JywKLSAgICAgICAgICAgICAgICd3YXJuaW5nJywKLSAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAnU2F2ZSBGaWxlJywKLSAgICAgICAgICAgICAgICdEaXNjYXJkIENoYW5nZXMnLAotICAgICAgICAgICAgICAgJ1JldHVybiBUbyBFZGl0b3InKQotICAgIHByaW50KCdwcmVzc2VkIGJ1dHRvbicsIGkpCi0gICAgcHJpbnQobWVzc2FnZSgnVGVzdCBvZiBtZXNzYWdlJykpCi0gICAgcHJpbnQoYXNreW4oJ1Rlc3Qgb2YgeWVzL25vJykpCi0gICAgcHJpbnQoYXNreW5jKCdUZXN0IG9mIHllcy9uby9jYW5jZWwnKSkKLSAgICBwcmludChhc2tzdHIoJ1R5cGUgYSBzdHJpbmc6JykpCi0gICAgcHJpbnQoc3RyZGlhbG9nKG1haW5XaWRnZXQsICdRdWVzdGlvbicsICdBbm90aGVyIHN0cmluZzonLCAnJywKLSAgICAgICAgICAgICAgICAgIDAsICdTYXZlJywgJ1NhdmUgYXMgdGV4dCcpKQotCi1kZWYgX3Rlc3QoKToKLSAgICBnbG9iYWwgbWFpbldpZGdldAotICAgIG1haW5XaWRnZXQgPSBGcmFtZSgpCi0gICAgUGFjay5jb25maWcobWFpbldpZGdldCkKLSAgICBzdGFydCA9IEJ1dHRvbihtYWluV2lkZ2V0LAotICAgICAgICAgICAgICAgICAgIHsndGV4dCc6ICdQcmVzcyBIZXJlIFRvIFN0YXJ0JywgJ2NvbW1hbmQnOiBfZ299KQotICAgIHN0YXJ0LnBhY2soKQotICAgIGVuZGl0ID0gQnV0dG9uKG1haW5XaWRnZXQsCi0gICAgICAgICAgICAgICAgICAgeyd0ZXh0JzogJ0V4aXQnLAotICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6ICdleGl0JywKLSAgICAgICAgICAgICAgICAgICAgUGFjazogeydmaWxsJyA6ICdib3RoJ319KQotICAgIG1haW5XaWRnZXQubWFpbmxvb3AoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9nZW5tb2R1bGUucHkgYi9Ub29scy9tb2R1bGF0b3IvZ2VubW9kdWxlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBmODcwM2VmLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9nZW5tb2R1bGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotIwotIyBHZW5tb2R1bGUgLSBBIHB5dGhvbiBwcm9ncmFtIHRvIGhlbHAgeW91IGJ1aWxkICh0ZW1wbGF0ZSkgbW9kdWxlcy4KLSMKLSMgVXNhZ2U6Ci0jCi0jIG8gPSBnZW5tb2R1bGUub2JqZWN0KCkKLSMgby5uYW1lID0gJ2R3YXJ2ZSBvYmplY3QnCi0jIG8uYWJicmV2ID0gJ2R3JwotIyBvLmZ1bmNsaXN0ID0gWyduZXcnLCAnZGVhbGxvYycsICdnZXRhdHRyJywgJ3NldGF0dHInXQotIyBvLm1ldGhvZGxpc3QgPSBbJ2RpZyddCi0jCi0jIG0gPSBnZW5tb2R1bGUubW9kdWxlKCkKLSMgbS5uYW1lID0gJ2JlaW5ncycKLSMgbS5hYmJyZXYgPSAnYmUnCi0jIG0ubWV0aG9kbGlzdCA9IFsnbmV3ZHdhcnZlJ10KLSMgbS5vYmplY3RzID0gW29dCi0jCi0jIGdlbm1vZHVsZS53cml0ZShzeXMuc3Rkb3V0LCBtKQotIwotaW1wb3J0IHN5cwotaW1wb3J0IG9zCi1pbXBvcnQgdmFyc3Vic3QKLQotZXJyb3IgPSAnZ2VubW9kdWxlLmVycm9yJwotCi0jCi0jIE5hbWVzIG9mIGZ1bmN0aW9ucyBpbiB0aGUgb2JqZWN0LWRlc2NyaXB0aW9uIHN0cnVjdC4KLSMKLUZVTkNMSVNUID0gWyduZXcnLCAndHBfZGVhbGxvYycsICd0cF9wcmludCcsICd0cF9nZXRhdHRyJywgJ3RwX3NldGF0dHInLAotICAgICAgICAgICAgJ3RwX2NvbXBhcmUnLCAndHBfcmVwcicsICd0cF9oYXNoJywgJ3RwX2NhbGwnLCAndHBfc3RyJ10KLVRZUEVMSVNUID0gWyd0cF9hc19udW1iZXInLCAndHBfYXNfc2VxdWVuY2UnLCAndHBfYXNfbWFwcGluZycsICdzdHJ1Y3R1cmUnXQotCi0jCi0jIHdyaXRlciBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBvYmplY3QgYW5kIG1vZHVsZSBjbGFzc2VzCi0jIGl0IGNvbnRhaW5zIGNvZGUgY29tbW9uIHRvIGJvdGguCi0jCi1jbGFzcyB3cml0ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9zdWJzdCA9IE5vbmUKLQotICAgIGRlZiBtYWtlc3Vic3Qoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9zdWJzdDoKLSAgICAgICAgICAgIGlmICdhYmJyZXYnIG5vdCBpbiBzZWxmLl9fZGljdF9fOgotICAgICAgICAgICAgICAgIHNlbGYuYWJicmV2ID0gc2VsZi5uYW1lCi0gICAgICAgICAgICBzZWxmLkFiYnJldiA9IHNlbGYuYWJicmV2WzBdLnVwcGVyKCkrc2VsZi5hYmJyZXZbMTpdCi0gICAgICAgICAgICBzdWJzdCA9IHZhcnN1YnN0LlZhcnN1YnN0KHNlbGYuX19kaWN0X18pCi0gICAgICAgICAgICBzdWJzdC51c2VpbmRlbnQoMSkKLSAgICAgICAgICAgIHNlbGYuX3N1YnN0ID0gc3Vic3Quc3Vic3QKLQotICAgIGRlZiBhZGRjb2RlKHNlbGYsIG5hbWUsIGZwKToKLSAgICAgICAgaWZwID0gc2VsZi5vcGVudGVtcGxhdGUobmFtZSkKLSAgICAgICAgc2VsZi5tYWtlc3Vic3QoKQotICAgICAgICBkID0gaWZwLnJlYWQoKQotICAgICAgICBkID0gc2VsZi5fc3Vic3QoZCkKLSAgICAgICAgZnAud3JpdGUoZCkKLQotICAgIGRlZiBvcGVudGVtcGxhdGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZvciBwIGluIHN5cy5wYXRoOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocCwgbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlbihmbiwgJ3InKQotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocCwgJ1RlbXBsYXRlcycpCi0gICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihmbiwgbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGZuKToKLSAgICAgICAgICAgICAgICByZXR1cm4gb3BlbihmbiwgJ3InKQotICAgICAgICByYWlzZSBlcnJvcignVGVtcGxhdGUgJytuYW1lKycgbm90IGZvdW5kIGZvciAnK3NlbGYuX3R5cGUrJyAnKyBcCi0gICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUpCi0KLWNsYXNzIG1vZHVsZSh3cml0ZXIpOgotICAgIF90eXBlID0gJ21vZHVsZScKLQotICAgIGRlZiB3cml0ZWNvZGUoc2VsZiwgZnApOgotICAgICAgICBzZWxmLmFkZGNvZGUoJ2NvcHlyaWdodCcsIGZwKQotICAgICAgICBzZWxmLmFkZGNvZGUoJ21vZHVsZV9oZWFkJywgZnApCi0gICAgICAgIGZvciBvIGluIHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgIG8ud3JpdGVoZWFkKGZwKQotICAgICAgICBmb3IgbyBpbiBzZWxmLm9iamVjdHM6Ci0gICAgICAgICAgICBvLndyaXRlYm9keShmcCkKLSAgICAgICAgbmV3X21sID0gJycKLSAgICAgICAgZm9yIGZuIGluIHNlbGYubWV0aG9kbGlzdDoKLSAgICAgICAgICAgIHNlbGYubWV0aG9kID0gZm4KLSAgICAgICAgICAgIHNlbGYuYWRkY29kZSgnbW9kdWxlX21ldGhvZCcsIGZwKQotICAgICAgICAgICAgbmV3X21sID0gbmV3X21sICsgKAotICAgICAgICAgICAgICAgICAgICAgICd7IiVzIixcdChQeUNGdW5jdGlvbiklc18lcyxcdE1FVEhfVkFSQVJHUyxcdCVzXyVzX19kb2NfX30sXG4nCi0gICAgICAgICAgICAgICAgICAgICAgJShmbiwgc2VsZi5hYmJyZXYsIGZuLCBzZWxmLmFiYnJldiwgZm4pKQotICAgICAgICBzZWxmLm1ldGhvZGxpc3QgPSBuZXdfbWwKLSAgICAgICAgc2VsZi5hZGRjb2RlKCdtb2R1bGVfdGFpbCcsIGZwKQotCi1jbGFzcyBvYmplY3Qod3JpdGVyKToKLSAgICBfdHlwZSA9ICdvYmplY3QnCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnR5cGVsaXN0ID0gW10KLSAgICAgICAgc2VsZi5tZXRob2RsaXN0ID0gW10KLSAgICAgICAgc2VsZi5mdW5jbGlzdCA9IFsnbmV3J10KLSAgICAgICAgd3JpdGVyLl9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgd3JpdGVjb2RlKHNlbGYsIGZwKToKLSAgICAgICAgc2VsZi5hZGRjb2RlKCdjb3B5cmlnaHQnLCBmcCkKLSAgICAgICAgc2VsZi53cml0ZWhlYWQoZnApCi0gICAgICAgIHNlbGYud3JpdGVib2R5KGZwKQotCi0gICAgZGVmIHdyaXRlaGVhZChzZWxmLCBmcCk6Ci0gICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0X2hlYWQnLCBmcCkKLQotICAgIGRlZiB3cml0ZWJvZHkoc2VsZiwgZnApOgotICAgICAgICBuZXdfbWwgPSAnJwotICAgICAgICBmb3IgZm4gaW4gc2VsZi5tZXRob2RsaXN0OgotICAgICAgICAgICAgc2VsZi5tZXRob2QgPSBmbgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfbWV0aG9kJywgZnApCi0gICAgICAgICAgICBuZXdfbWwgPSBuZXdfbWwgKyAoCi0gICAgICAgICAgICAgICAgICAgICAgJ3siJXMiLFx0KFB5Q0Z1bmN0aW9uKSVzXyVzLFx0TUVUSF9WQVJBUkdTLFx0JXNfJXNfX2RvY19ffSxcbicKLSAgICAgICAgICAgICAgICAgICAgICAlKGZuLCBzZWxmLmFiYnJldiwgZm4sIHNlbGYuYWJicmV2LCBmbikpCi0gICAgICAgIHNlbGYubWV0aG9kbGlzdCA9IG5ld19tbAotICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF9tbGlzdCcsIGZwKQotCi0gICAgICAgICMgQWRkIGdldGF0dHIgaWYgd2UgaGF2ZSBtZXRob2RzCi0gICAgICAgIGlmIHNlbGYubWV0aG9kbGlzdCBhbmQgbm90ICd0cF9nZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgc2VsZi5mdW5jbGlzdC5pbnNlcnQoMCwgJ3RwX2dldGF0dHInKQotCi0gICAgICAgIGZvciBmbiBpbiBGVU5DTElTVDoKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwgZm4sICcwJykKLQotICAgICAgICAjCi0gICAgICAgICMgU3BlY2lhbCBjYXNlIGZvciBzdHJ1Y3R1cmUtYWNjZXNzIG9iamVjdHM6IHB1dCBnZXRhdHRyIGluIHRoZQotICAgICAgICAjIGxpc3Qgb2YgZnVuY3Rpb25zIGJ1dCBkb24ndCBnZW5lcmF0ZSBjb2RlIGZvciBpdCBkaXJlY3RseSwKLSAgICAgICAgIyB0aGUgY29kZSBpcyBvYnRhaW5lZCBmcm9tIHRoZSBvYmplY3Rfc3RydWN0dXJlIHRlbXBsYXRlLgotICAgICAgICAjIFRoZSBzYW1lIGdvZXMgZm9yIHNldGF0dHIuCi0gICAgICAgICMKLSAgICAgICAgaWYgJ3N0cnVjdHVyZScgaW4gc2VsZi50eXBlbGlzdDoKLSAgICAgICAgICAgIGlmICd0cF9nZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgICAgIHNlbGYuZnVuY2xpc3QucmVtb3ZlKCd0cF9nZXRhdHRyJykKLSAgICAgICAgICAgIGlmICd0cF9zZXRhdHRyJyBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgICAgIHNlbGYuZnVuY2xpc3QucmVtb3ZlKCd0cF9zZXRhdHRyJykKLSAgICAgICAgICAgIHNlbGYudHBfZ2V0YXR0ciA9IHNlbGYuYWJicmV2ICsgJ19nZXRhdHRyJwotICAgICAgICAgICAgc2VsZi50cF9zZXRhdHRyID0gc2VsZi5hYmJyZXYgKyAnX3NldGF0dHInCi0gICAgICAgIGZvciBmbiBpbiBzZWxmLmZ1bmNsaXN0OgotICAgICAgICAgICAgc2VsZi5hZGRjb2RlKCdvYmplY3RfJytmbiwgZnApCi0gICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGZuLCAnJXNfJXMnJShzZWxmLmFiYnJldiwgZm5bMzpdKSkKLSAgICAgICAgZm9yIHRuIGluIFRZUEVMSVNUOgotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCB0biwgJzAnKQotICAgICAgICBmb3IgdG4gaW4gc2VsZi50eXBlbGlzdDoKLSAgICAgICAgICAgIHNlbGYuYWRkY29kZSgnb2JqZWN0XycrdG4sIGZwKQotICAgICAgICAgICAgc2V0YXR0cihzZWxmLCB0biwgJyYlc18lcyclKHNlbGYuYWJicmV2LCB0blszOl0pKQotICAgICAgICBzZWxmLmFkZGNvZGUoJ29iamVjdF90YWlsJywgZnApCi0KLWRlZiB3cml0ZShmcCwgb2JqKToKLSAgICBvYmoud3JpdGVjb2RlKGZwKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG8gPSBvYmplY3QoKQotICAgIG8ubmFtZSA9ICdkd2FydmUgb2JqZWN0JwotICAgIG8uYWJicmV2ID0gJ2R3JwotICAgIG8uZnVuY2xpc3QgPSBbJ25ldycsICd0cF9kZWFsbG9jJ10KLSAgICBvLm1ldGhvZGxpc3QgPSBbJ2RpZyddCi0gICAgbSA9IG1vZHVsZSgpCi0gICAgbS5uYW1lID0gJ2JlaW5ncycKLSAgICBtLmFiYnJldiA9ICdiZScKLSAgICBtLm1ldGhvZGxpc3QgPSBbJ25ld2R3YXJ2ZSddCi0gICAgbS5vYmplY3RzID0gW29dCi0gICAgd3JpdGUoc3lzLnN0ZG91dCwgbSkKZGlmZiAtLWdpdCBhL1Rvb2xzL21vZHVsYXRvci9tb2R1bGF0b3IucHkgYi9Ub29scy9tb2R1bGF0b3IvbW9kdWxhdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkNzE5NjQ5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci9tb2R1bGF0b3IucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotIwotIyBNb2R1bGF0b3IgLSBHZW5lcmF0ZSBza2VsZXRvbiBtb2R1bGVzLgotIwotIyBUaGUgdXNlciBmaWxscyBvdXQgc29tZSBmb3JtcyB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdGhlIG1vZHVsZQotIyBzaG91bGQgc3VwcG9ydCAobWV0aG9kcywgb2JqZWN0cyksIG5hbWVzIG9mIHRoZXNlIHRoaW5ncywgcHJlZml4ZXMgdG8KLSMgdXNlIGZvciBDIGNvZGUsIHdoZXRoZXIgdGhlIG9iamVjdHMgc2hvdWxkIGFsc28gc3VwcG9ydCBhY2Nlc3MgYXMgbnVtYmVycywKLSMgZXRjIGV0YyBldGMuCi0jIFdoZW4gdGhlIHVzZXIgcHJlc3NlcyAnR2VuZXJhdGUgY29kZScgd2UgZ2VuZXJhdGUgYSBjb21wbGV0ZSBza2VsZXRvbgotIyBtb2R1bGUgaW4gQy4KLSMKLSMgQWx0ZXJuYXRpdmVseSwgdGhlIHNlbGVjdGlvbnMgbWFkZSBjYW4gYmUgc2F2ZSB0byBhIHB5dGhvbiBzb3VyY2VmaWxlIGFuZAotIyB0aGlzIHNvdXJjZWZpbGUgY2FuIGJlIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIChyZXN1bHRpbmcgaW4gdGhlIHNhbWUKLSMgc2tlbGV0b24gQyBjb2RlKS4KLSMKLSMgSmFjayBKYW5zZW4sIENXSSwgT2N0b2JlciAxOTk0LgotIwotCi1pbXBvcnQgc3lzLCBvcwotaWYgb3MubmFtZSAhPSAnbWFjJzoKLSAgICBzeXMucGF0aC5hcHBlbmQob3MucGF0aC5qb2luKG9zLmVudmlyb25bJ0hPTUUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcmMvcHl0aG9uL1Rvb2xzL21vZHVsYXRvcicpKQotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLWZyb20gVGtleHRyYSBpbXBvcnQgKgotZnJvbSBTY3JvbGxlZExpc3Rib3ggaW1wb3J0IFNjcm9sbGVkTGlzdGJveAotaW1wb3J0IHN5cwotaW1wb3J0IGdlbm1vZHVsZQotaW1wb3J0IHN0cmluZwotCi1vb3BzID0gJ29vcHMnCi0KLUlERU5UU1RBUlRDSEFSUyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgJ18nCi1JREVOVENIQVJTID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyBzdHJpbmcuZGlnaXRzICsgJ18nCi0KLSMgQ2hlY2sgdGhhdCBzdHJpbmcgaXMgYSBsZWdhbCBDIGlkZW50aWZpZXIKLWRlZiBjaGVja2lkKHN0cik6Ci0gICAgaWYgbm90IHN0cjogcmV0dXJuIDAKLSAgICBpZiBub3Qgc3RyWzBdIGluIElERU5UU1RBUlRDSEFSUzoKLSAgICAgICAgcmV0dXJuIDAKLSAgICBmb3IgYyBpbiBzdHJbMTpdOgotICAgICAgICBpZiBub3QgYyBpbiBJREVOVENIQVJTOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICByZXR1cm4gMQotCi1kZWYgZ2V0bGlzdGxpc3QobGlzdCk6Ci0gICAgcnYgPSBbXQotICAgIG4gPSBsaXN0LnNpemUoKQotICAgIGZvciBpIGluIHJhbmdlKG4pOgotICAgICAgICBydi5hcHBlbmQobGlzdC5nZXQoaSkpCi0gICAgcmV0dXJuIHJ2Ci0KLWNsYXNzIFVJOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5tYWluID0gRnJhbWUoKQotICAgICAgICBzZWxmLm1haW4ucGFjaygpCi0gICAgICAgIHNlbGYubWFpbi5tYXN0ZXIudGl0bGUoJ01vZHVsYXRvcjogTW9kdWxlIHZpZXcnKQotICAgICAgICBzZWxmLmNtZGZyYW1lID0gRnJhbWUoc2VsZi5tYWluLCB7J3JlbGllZic6J3JhaXNlZCcsICdiZCc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5vYmpmcmFtZSA9IEZyYW1lKHNlbGYubWFpbiwge1BhY2s6eydzaWRlJzondG9wJywgJ2ZpbGwnOid4JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmQnOjF9fSkKLQotCi0gICAgICAgIHNlbGYuY2hlY2tfYnV0dG9uID0gQnV0dG9uKHNlbGYuY21kZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXh0JzonQ2hlY2snLCAnY29tbWFuZCc6c2VsZi5jYl9jaGVjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLnNhdmVfYnV0dG9uID0gQnV0dG9uKHNlbGYuY21kZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXh0JzonU2F2ZS4uLicsICdjb21tYW5kJzpzZWxmLmNiX3NhdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5jb2RlX2J1dHRvbiA9IEJ1dHRvbihzZWxmLmNtZGZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsndGV4dCc6J0dlbmVyYXRlIGNvZGUuLi4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9nZW5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYucXVpdF9idXR0b24gPSBCdXR0b24oc2VsZi5jbWRmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3RleHQnOidRdWl0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW1hbmQnOnNlbGYuY2JfcXVpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidyaWdodCcsICdwYWR4JzonMC41bSd9fSkKLQotICAgICAgICBzZWxmLm1vZHVsZSA9IFVJX21vZHVsZShzZWxmKQotICAgICAgICBzZWxmLm9iamVjdHMgPSBbXQotICAgICAgICBzZWxmLm1vZGlmaWVkID0gMAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5tYWluLm1haW5sb29wKCkKLQotICAgIGRlZiBjYl9xdWl0KHNlbGYsICphcmdzKToKLSAgICAgICAgaWYgc2VsZi5tb2RpZmllZDoKLSAgICAgICAgICAgIGlmIG5vdCBhc2t5bignWW91IGhhdmUgbm90IHNhdmVkXG5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcXVpdD8nKToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc3lzLmV4aXQoMCkKLQotICAgIGRlZiBjYl9jaGVjayhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYubW9kdWxlLnN5bmNocm9uaXplKCkKLSAgICAgICAgICAgIGZvciBvIGluIHNlbGYub2JqZWN0czoKLSAgICAgICAgICAgICAgICBvLnN5bmNocm9uaXplKCkKLSAgICAgICAgZXhjZXB0IG9vcHM6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICBkZWYgY2Jfc2F2ZShzZWxmLCAqYXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHB5Y29kZSA9IHNlbGYubW9kdWxlLmdlbmNvZGUoJ20nLCBzZWxmLm9iamVjdHMpCi0gICAgICAgIGV4Y2VwdCBvb3BzOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZm4gPSBhc2tmaWxlKCdQeXRob24gZmlsZSBuYW1lOiAnKQotICAgICAgICBpZiBub3QgZm46Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBmcCA9IG9wZW4oZm4sICd3JykKLQotICAgICAgICBmcC53cml0ZShweWNvZGUpCi0gICAgICAgIGZwLmNsb3NlKCkKLQotICAgIGRlZiBjYl9nZW5jb2RlKHNlbGYsICphcmdzKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcHljb2RlID0gc2VsZi5tb2R1bGUuZ2VuY29kZSgnbScsIHNlbGYub2JqZWN0cykKLSAgICAgICAgZXhjZXB0IG9vcHM6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgZm4gPSBhc2tmaWxlKCdDIGZpbGUgbmFtZTogJykKLSAgICAgICAgaWYgbm90IGZuOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgZnAgPSBvcGVuKGZuLCAndycpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlYyhweWNvZGUpCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIG1lc3NhZ2UoJ0FuIGVycm9yIG9jY3VycmVkOi0pJykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBnZW5tb2R1bGUud3JpdGUoZnAsIG0pCi0gICAgICAgIGZwLmNsb3NlKCkKLQotY2xhc3MgVUlfbW9kdWxlOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgotICAgICAgICBzZWxmLnBhcmVudCA9IHBhcmVudAotICAgICAgICBzZWxmLmZyYW1lID0gRnJhbWUocGFyZW50Lm9iamZyYW1lLCB7J3JlbGllZic6J3JhaXNlZCcsICdiZCc6JzAuMm0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYxID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjIgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMyA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmY0ID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0KLSAgICAgICAgc2VsZi5sMSA9IExhYmVsKHNlbGYuZjEsIHsndGV4dCc6J01vZHVsZTonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubmFtZV9lbnRyeSA9IEVudHJ5KHNlbGYuZjEsIHsncmVsaWVmJzonc3Vua2VuJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bScsICdleHBhbmQnOjF9fSkKLSAgICAgICAgc2VsZi5sMiA9IExhYmVsKHNlbGYuZjEsIHsndGV4dCc6J0FiYnJldjonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYuYWJicmV2X2VudHJ5ID0gRW50cnkoc2VsZi5mMSwgeydyZWxpZWYnOidzdW5rZW4nLCAnd2lkdGgnOjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nfX0pCi0KLSAgICAgICAgc2VsZi5sMyA9IExhYmVsKHNlbGYuZjIsIHsndGV4dCc6J01ldGhvZHM6JywgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLm1ldGhvZF9saXN0ID0gU2Nyb2xsZWRMaXN0Ym94KHNlbGYuZjIsIHsncmVsaWVmJzonc3Vua2VuJywnYmQnOjIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdleHBhbmQnOjEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bScsICdmaWxsJzonYm90aCd9fSkKLQotICAgICAgICBzZWxmLmw0ID0gTGFiZWwoc2VsZi5mMywgeyd0ZXh0JzonQWRkIG1ldGhvZDonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5ID0gRW50cnkoc2VsZi5mMywgeydyZWxpZWYnOidzdW5rZW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeCc6JzAuNW0nLCAnZXhwYW5kJzoxfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2VudHJ5LmJpbmQoJzxSZXR1cm4+Jywgc2VsZi5jYl9tZXRob2QpCi0gICAgICAgIHNlbGYuZGVsZXRlX2J1dHRvbiA9IEJ1dHRvbihzZWxmLmYzLCB7J3RleHQnOidEZWxldGUgbWV0aG9kJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbWFuZCc6c2VsZi5jYl9kZWxtZXRob2QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0KLSAgICAgICAgc2VsZi5uZXdvYmpfYnV0dG9uID0gQnV0dG9uKHNlbGYuZjQsIHsndGV4dCc6J25ldyBvYmplY3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzpzZWxmLmNiX25ld29iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLQotICAgIGRlZiBjYl9kZWxtZXRob2Qoc2VsZiwgKmFyZ3MpOgotICAgICAgICBsaXN0ID0gc2VsZi5tZXRob2RfbGlzdC5jdXJzZWxlY3Rpb24oKQotICAgICAgICBmb3IgaSBpbiBsaXN0OgotICAgICAgICAgICAgc2VsZi5tZXRob2RfbGlzdC5kZWxldGUoaSkKLQotICAgIGRlZiBjYl9uZXdvYmooc2VsZiwgKmFyZyk6Ci0gICAgICAgIHNlbGYucGFyZW50Lm9iamVjdHMuYXBwZW5kKFVJX29iamVjdChzZWxmLnBhcmVudCkpCi0KLSAgICBkZWYgY2JfbWV0aG9kKHNlbGYsICphcmcpOgotICAgICAgICBuYW1lID0gc2VsZi5tZXRob2RfZW50cnkuZ2V0KCkKLSAgICAgICAgaWYgbm90IG5hbWU6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkuZGVsZXRlKCcwJywgJ2VuZCcpCi0gICAgICAgIHNlbGYubWV0aG9kX2xpc3QuaW5zZXJ0KCdlbmQnLCBuYW1lKQotCi0gICAgZGVmIHN5bmNocm9uaXplKHNlbGYpOgotICAgICAgICBuID0gc2VsZi5uYW1lX2VudHJ5LmdldCgpCi0gICAgICAgIGlmIG5vdCBuOgotICAgICAgICAgICAgbWVzc2FnZSgnTW9kdWxlIG5hbWUgbm90IHNldCcpCi0gICAgICAgICAgICByYWlzZSBvb3BzCi0gICAgICAgIGlmIG5vdCBjaGVja2lkKG4pOgotICAgICAgICAgICAgbWVzc2FnZSgnTW9kdWxlIG5hbWUgbm90IGFuIGlkZW50aWZpZXI6XG4nK24pCi0gICAgICAgICAgICByYWlzZSBvb3BzCi0gICAgICAgIGlmIG5vdCBzZWxmLmFiYnJldl9lbnRyeS5nZXQoKToKLSAgICAgICAgICAgIHNlbGYuYWJicmV2X2VudHJ5Lmluc2VydCgnZW5kJywgbikKLSAgICAgICAgbSA9IGdldGxpc3RsaXN0KHNlbGYubWV0aG9kX2xpc3QpCi0gICAgICAgIGZvciBuIGluIG06Ci0gICAgICAgICAgICBpZiBub3QgY2hlY2tpZChuKToKLSAgICAgICAgICAgICAgICBtZXNzYWdlKCdNZXRob2QgbmFtZSBub3QgYW4gaWRlbnRpZmllcjpcbicrbikKLSAgICAgICAgICAgICAgICByYWlzZSBvb3BzCi0KLSAgICBkZWYgZ2VuY29kZShzZWxmLCBuYW1lLCBvYmplY3RzKToKLSAgICAgICAgcnYgPSAnJwotICAgICAgICBzZWxmLnN5bmNocm9uaXplKCkKLSAgICAgICAgZm9yIG8gaW4gb2JqZWN0czoKLSAgICAgICAgICAgIG8uc3luY2hyb25pemUoKQotICAgICAgICBvbmFtZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ob2JqZWN0cykpOgotICAgICAgICAgICAgb25hbWUgPSAnbyVkJyAlIChpKzEpCi0gICAgICAgICAgICBydiA9IHJ2ICsgb2JqZWN0c1tpXS5nZW5jb2RlKG9uYW1lKQotICAgICAgICAgICAgb25hbWVzLmFwcGVuZChvbmFtZSkKLSAgICAgICAgcnYgPSBydiArICclcyA9IGdlbm1vZHVsZS5tb2R1bGUoKVxuJyAlIChuYW1lLCkKLSAgICAgICAgcnYgPSBydiArICclcy5uYW1lID0gJXJcbicgJSAobmFtZSwgc2VsZi5uYW1lX2VudHJ5LmdldCgpKQotICAgICAgICBydiA9IHJ2ICsgJyVzLmFiYnJldiA9ICVyXG4nICUgKG5hbWUsIHNlbGYuYWJicmV2X2VudHJ5LmdldCgpKQotICAgICAgICBydiA9IHJ2ICsgJyVzLm1ldGhvZGxpc3QgPSAlclxuJyAlIChuYW1lLCBnZXRsaXN0bGlzdChzZWxmLm1ldGhvZF9saXN0KSkKLSAgICAgICAgcnYgPSBydiArICclcy5vYmplY3RzID0gWyVzXVxuJyAlIChuYW1lLCAnLCcuam9pbihvbmFtZXMpKQotICAgICAgICBydiA9IHJ2ICsgJ1xuJwotICAgICAgICByZXR1cm4gcnYKLQotb2JqZWN0X251bWJlciA9IDAKLQotY2xhc3MgVUlfb2JqZWN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQpOgotICAgICAgICBnbG9iYWwgb2JqZWN0X251bWJlcgotCi0gICAgICAgIG9iamVjdF9udW1iZXIgPSBvYmplY3RfbnVtYmVyICsgMQotICAgICAgICBzZWxmLm51bSA9IG9iamVjdF9udW1iZXIKLSAgICAgICAgc2VsZi52cHJlZiA9ICdvJXJfJyAlIHNlbGYubnVtCi0gICAgICAgIHNlbGYuZnJhbWUgPSBUb3BsZXZlbChwYXJlbnQub2JqZnJhbWUpCi0jICAgICAgIHNlbGYuZnJhbWUucGFjaygpCi0gICAgICAgIHNlbGYuZnJhbWUudGl0bGUoJ01vZHVsYXRvcjogb2JqZWN0IHZpZXcnKQotIyAgICAgICBzZWxmLmZyYW1lID0gRnJhbWUocGFyZW50Lm9iamZyYW1lLCB7J3JlbGllZic6J3JhaXNlZCcsICdiZCc6JzAuMm0nLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmYxID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0gICAgICAgIHNlbGYuZjIgPSBGcmFtZShzZWxmLmZyYW1lLCB7UGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzoneCd9fSkKLSAgICAgICAgc2VsZi5mMyA9IEZyYW1lKHNlbGYuZnJhbWUsIHtQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmY0ID0gRnJhbWUoc2VsZi5mcmFtZSwge1BhY2s6eydzaWRlJzondG9wJywgJ3BhZHknOicwLjVtJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsbCc6J3gnfX0pCi0KLQotICAgICAgICBzZWxmLmwxID0gTGFiZWwoc2VsZi5mMSwgeyd0ZXh0JzonT2JqZWN0OicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5uYW1lX2VudHJ5ID0gRW50cnkoc2VsZi5mMSwgeydyZWxpZWYnOidzdW5rZW4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJywgJ2V4cGFuZCc6MX19KQotICAgICAgICBzZWxmLmwyID0gTGFiZWwoc2VsZi5mMSwgeyd0ZXh0JzonQWJicmV2OicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5hYmJyZXZfZW50cnkgPSBFbnRyeShzZWxmLmYxLCB7J3JlbGllZic6J3N1bmtlbicsICd3aWR0aCc6NSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bSd9fSkKLQotICAgICAgICBzZWxmLmwzID0gTGFiZWwoc2VsZi5mMiwgeyd0ZXh0JzonTWV0aG9kczonLCBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkeCc6JzAuNW0nfX0pCi0gICAgICAgIHNlbGYubWV0aG9kX2xpc3QgPSBTY3JvbGxlZExpc3Rib3goc2VsZi5mMiwgeydyZWxpZWYnOidzdW5rZW4nLCdiZCc6MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ2V4cGFuZCc6MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZHgnOicwLjVtJywgJ2ZpbGwnOidib3RoJ319KQotCi0gICAgICAgIHNlbGYubDQgPSBMYWJlbChzZWxmLmYzLCB7J3RleHQnOidBZGQgbWV0aG9kOicsIFBhY2s6eydzaWRlJzonbGVmdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkgPSBFbnRyeShzZWxmLmYzLCB7J3JlbGllZic6J3N1bmtlbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2s6eydzaWRlJzonbGVmdCcsICdwYWR4JzonMC41bScsICdleHBhbmQnOjF9fSkKLSAgICAgICAgc2VsZi5tZXRob2RfZW50cnkuYmluZCgnPFJldHVybj4nLCBzZWxmLmNiX21ldGhvZCkKLSAgICAgICAgc2VsZi5kZWxldGVfYnV0dG9uID0gQnV0dG9uKHNlbGYuZjMsIHsndGV4dCc6J0RlbGV0ZSBtZXRob2QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21tYW5kJzpzZWxmLmNiX2RlbG1ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLQotCi0gICAgICAgIHNlbGYubDUgPSBMYWJlbChzZWxmLmY0LCB7J3RleHQnOidmdW5jdGlvbnM6JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J2xlZnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWR4JzonMC41bSd9fSkKLSAgICAgICAgc2VsZi5mNSA9IEZyYW1lKHNlbGYuZjQsIHtQYWNrOnsnc2lkZSc6J2xlZnQnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxsJzonYm90aCd9fSkKLSAgICAgICAgc2VsZi5sNiA9IExhYmVsKHNlbGYuZjQsIHsndGV4dCc6J1R5cGVzOicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOidsZWZ0JywgJ3BhZHgnOicwLjVtJ319KQotICAgICAgICBzZWxmLmY2ID0gRnJhbWUoc2VsZi5mNCwge1BhY2s6eydzaWRlJzonbGVmdCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGwnOid4J319KQotICAgICAgICBzZWxmLmZ1bmNzID0ge30KLSAgICAgICAgZm9yIGkgaW4gZ2VubW9kdWxlLkZVTkNMSVNUOgotICAgICAgICAgICAgdm5hbWUgPSBzZWxmLnZwcmVmK2kKLSAgICAgICAgICAgIHNlbGYuZjUuc2V0dmFyKHZuYW1lLCAwKQotICAgICAgICAgICAgYiA9IENoZWNrYnV0dG9uKHNlbGYuZjUsIHsndmFyaWFibGUnOnZuYW1lLCAndGV4dCc6aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFjazp7J3NpZGUnOid0b3AnLCAncGFkeSc6JzAuNW0nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5jaG9yJzondycsJ2V4cGFuZCc6MX19KQotICAgICAgICAgICAgc2VsZi5mdW5jc1tpXSA9IGIKLSAgICAgICAgc2VsZi5mNS5zZXR2YXIoc2VsZi52cHJlZisnbmV3JywgMSkKLQotICAgICAgICBzZWxmLnR5cGVzID0ge30KLSAgICAgICAgZm9yIGkgaW4gZ2VubW9kdWxlLlRZUEVMSVNUOgotICAgICAgICAgICAgdm5hbWUgPSBzZWxmLnZwcmVmICsgaQotICAgICAgICAgICAgc2VsZi5mNi5zZXR2YXIodm5hbWUsIDApCi0gICAgICAgICAgICBiID0gQ2hlY2tidXR0b24oc2VsZi5mNiwgeyd2YXJpYWJsZSc6dm5hbWUsICd0ZXh0JzppLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrOnsnc2lkZSc6J3RvcCcsICdwYWR5JzonMC41bScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmNob3InOid3J319KQotICAgICAgICAgICAgc2VsZi50eXBlc1tpXSA9IGIKLQotICAgIGRlZiBjYl9tZXRob2Qoc2VsZiwgKmFyZyk6Ci0gICAgICAgIG5hbWUgPSBzZWxmLm1ldGhvZF9lbnRyeS5nZXQoKQotICAgICAgICBpZiBub3QgbmFtZToKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLm1ldGhvZF9lbnRyeS5kZWxldGUoJzAnLCAnZW5kJykKLSAgICAgICAgc2VsZi5tZXRob2RfbGlzdC5pbnNlcnQoJ2VuZCcsIG5hbWUpCi0KLSAgICBkZWYgY2JfZGVsbWV0aG9kKHNlbGYsICphcmdzKToKLSAgICAgICAgbGlzdCA9IHNlbGYubWV0aG9kX2xpc3QuY3Vyc2VsZWN0aW9uKCkKLSAgICAgICAgZm9yIGkgaW4gbGlzdDoKLSAgICAgICAgICAgIHNlbGYubWV0aG9kX2xpc3QuZGVsZXRlKGkpCi0KLSAgICBkZWYgc3luY2hyb25pemUoc2VsZik6Ci0gICAgICAgIG4gPSBzZWxmLm5hbWVfZW50cnkuZ2V0KCkKLSAgICAgICAgaWYgbm90IG46Ci0gICAgICAgICAgICBtZXNzYWdlKCdPYmplY3QgbmFtZSBub3Qgc2V0JykKLSAgICAgICAgICAgIHJhaXNlIG9vcHMKLSAgICAgICAgaWYgbm90IHNlbGYuYWJicmV2X2VudHJ5LmdldCgpOgotICAgICAgICAgICAgc2VsZi5hYmJyZXZfZW50cnkuaW5zZXJ0KCdlbmQnLCBuKQotICAgICAgICBuID0gc2VsZi5hYmJyZXZfZW50cnkuZ2V0KCkKLSAgICAgICAgaWYgbm90IGNoZWNraWQobik6Ci0gICAgICAgICAgICBtZXNzYWdlKCdBYmJyZXZpYXRpb24gbm90IGFuIGlkZW50aWZpZXI6XG4nK24pCi0gICAgICAgICAgICByYWlzZSBvb3BzCi0gICAgICAgIG0gPSBnZXRsaXN0bGlzdChzZWxmLm1ldGhvZF9saXN0KQotICAgICAgICBmb3IgbiBpbiBtOgotICAgICAgICAgICAgaWYgbm90IGNoZWNraWQobik6Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSgnTWV0aG9kIG5hbWUgbm90IGFuIGlkZW50aWZpZXI6XG4nK24pCi0gICAgICAgICAgICAgICAgcmFpc2Ugb29wcwotICAgICAgICBpZiBtOgotICAgICAgICAgICAgc2VsZi5mNS5zZXR2YXIoc2VsZi52cHJlZisndHBfZ2V0YXR0cicsIDEpCi0gICAgICAgIHBhc3MKLQotICAgIGRlZiBnZW5jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICBydiA9ICcnCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMgPSBnZW5tb2R1bGUub2JqZWN0KClcbicgJSAobmFtZSwpCi0gICAgICAgIHJ2ID0gcnYgKyAnJXMubmFtZSA9ICVyXG4nICUgKG5hbWUsIHNlbGYubmFtZV9lbnRyeS5nZXQoKSkKLSAgICAgICAgcnYgPSBydiArICclcy5hYmJyZXYgPSAlclxuJyAlIChuYW1lLCBzZWxmLmFiYnJldl9lbnRyeS5nZXQoKSkKLSAgICAgICAgcnYgPSBydiArICclcy5tZXRob2RsaXN0ID0gJXJcbicgJSAobmFtZSwgZ2V0bGlzdGxpc3Qoc2VsZi5tZXRob2RfbGlzdCkpCi0gICAgICAgIGZsID0gW10KLSAgICAgICAgZm9yIGZuIGluIGdlbm1vZHVsZS5GVU5DTElTVDoKLSAgICAgICAgICAgIHZuYW1lID0gc2VsZi52cHJlZiArIGZuCi0gICAgICAgICAgICBpZiBzZWxmLmY1LmdldHZhcih2bmFtZSkgPT0gJzEnOgotICAgICAgICAgICAgICAgIGZsLmFwcGVuZChmbikKLSAgICAgICAgcnYgPSBydiArICclcy5mdW5jbGlzdCA9ICVyXG4nICUgKG5hbWUsIGZsKQotCi0gICAgICAgIGZsID0gW10KLSAgICAgICAgZm9yIGZuIGluIGdlbm1vZHVsZS5UWVBFTElTVDoKLSAgICAgICAgICAgIHZuYW1lID0gc2VsZi52cHJlZiArIGZuCi0gICAgICAgICAgICBpZiBzZWxmLmY1LmdldHZhcih2bmFtZSkgPT0gJzEnOgotICAgICAgICAgICAgICAgIGZsLmFwcGVuZChmbikKLQotICAgICAgICBydiA9IHJ2ICsgJyVzLnR5cGVsaXN0ID0gJXJcbicgJSAobmFtZSwgZmwpCi0KLSAgICAgICAgcnYgPSBydiArICdcbicKLSAgICAgICAgcmV0dXJuIHJ2Ci0KLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMjoKLSAgICAgICAgdWkgPSBVSSgpCi0gICAgICAgIHVpLnJ1bigpCi0gICAgZWxpZiBsZW4oc3lzLmFyZ3YpID09IDI6Ci0gICAgICAgIGZwID0gb3BlbihzeXMuYXJndlsxXSkKLSAgICAgICAgcHljb2RlID0gZnAucmVhZCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWMocHljb2RlKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdBbiBlcnJvciBvY2N1cnJlZDotKVxuJykKLSAgICAgICAgICAgIHN5cy5leGl0KDEpCi0gICAgICAgICMjZ2VubW9kdWxlLndyaXRlKHN5cy5zdGRvdXQsIG0pCi0gICAgZWxzZToKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVXNhZ2U6IG1vZHVsYXRvciBbZmlsZV1cbicpCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLW1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbW9kdWxhdG9yL3ZhcnN1YnN0LnB5IGIvVG9vbHMvbW9kdWxhdG9yL3ZhcnN1YnN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjY4NTEyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL21vZHVsYXRvci92YXJzdWJzdC5weQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMKLSMgVmFyaWFibGUgc3Vic3RpdHV0aW9uLiBWYXJpYWJsZXMgYXJlICRkZWxpbWl0ZWQkCi0jCi1pbXBvcnQgcmUKLQotZXJyb3IgPSAndmFyc3Vic3QuZXJyb3InCi0KLWNsYXNzIFZhcnN1YnN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaWN0KToKLSAgICAgICAgc2VsZi5kaWN0ID0gZGljdAotICAgICAgICBzZWxmLnByb2cgPSByZS5jb21waWxlKCdcJChbYS16QS1aMC05X10qKVwkJykKLSAgICAgICAgc2VsZi5kb191c2VpbmRlbnQgPSAwCi0KLSAgICBkZWYgdXNlaW5kZW50KHNlbGYsIG9ub2ZmKToKLSAgICAgICAgc2VsZi5kb191c2VpbmRlbnQgPSBvbm9mZgotCi0gICAgZGVmIHN1YnN0KHNlbGYsIHMpOgotICAgICAgICBydiA9ICcnCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICBtID0gc2VsZi5wcm9nLnNlYXJjaChzKQotICAgICAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ2ICsgcwotICAgICAgICAgICAgcnYgPSBydiArIHNbOm0uc3RhcnQoKV0KLSAgICAgICAgICAgIHMgPSBzW20uZW5kKCk6XQotICAgICAgICAgICAgaWYgbS5lbmQoKSAtIG0uc3RhcnQoKSA9PSAyOgotICAgICAgICAgICAgICAgICMgRXNjYXBlZCBkb2xsYXIKLSAgICAgICAgICAgICAgICBydiA9IHJ2ICsgJyQnCi0gICAgICAgICAgICAgICAgcyA9IHNbMjpdCi0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIG5hbWUgPSBtLmdyb3VwKDEpCi0gICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiBzZWxmLmRpY3Q6Ci0gICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ05vIHN1Y2ggdmFyaWFibGU6ICcrbmFtZSkKLSAgICAgICAgICAgIHZhbHVlID0gc2VsZi5kaWN0W25hbWVdCi0gICAgICAgICAgICBpZiBzZWxmLmRvX3VzZWluZGVudCBhbmQgJ1xuJyBpbiB2YWx1ZToKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX21vZGluZGVudCh2YWx1ZSwgcnYpCi0gICAgICAgICAgICBydiA9IHJ2ICsgdmFsdWUKLQotICAgIGRlZiBfbW9kaW5kZW50KHNlbGYsIHZhbHVlLCBvbGQpOgotICAgICAgICBsYXN0bmwgPSBvbGQucmZpbmQoJ1xuJywgMCkgKyAxCi0gICAgICAgIGxhc3RubCA9IGxlbihvbGQpIC0gbGFzdG5sCi0gICAgICAgIHN1YiA9ICdcbicgKyAoJyAnKmxhc3RubCkKLSAgICAgICAgcmV0dXJuIHJlLnN1YignXG4nLCBzdWIsIHZhbHVlKQotCi1kZWYgX3Rlc3QoKToKLSAgICBpbXBvcnQgc3lzCi0gICAgaW1wb3J0IG9zCi0KLSAgICBzeXMuc3RkZXJyLndyaXRlKCctLSBDb3B5aW5nIHN0ZGluIHRvIHN0ZG91dCB3aXRoIGVudmlyb25tZW50IG1hcCAtLVxuJykKLSAgICBjID0gVmFyc3Vic3Qob3MuZW52aXJvbikKLSAgICBjLnVzZWluZGVudCgxKQotICAgIGQgPSBzeXMuc3RkaW4ucmVhZCgpCi0gICAgc3lzLnN0ZG91dC53cml0ZShjLnN1YnN0KGQpKQotICAgIHN5cy5leGl0KDEpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgX3Rlc3QoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21lcmdlLnB5IGIvVG9vbHMvbXNpL21lcmdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWRlMjA5Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL21zaS9tZXJnZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLWltcG9ydCBtc2lsaWIsb3Msd2luMzJjb20sdGVtcGZpbGUsc3lzCi1QQ0JVSUxEPSJQQ0J1aWxkIgotY2VydG5hbWUgPSBOb25lCi1mcm9tIGNvbmZpZyBpbXBvcnQgKgotCi1XaW42NCA9ICJhbWQ2NCIgaW4gUENCVUlMRAotCi1tb2RfZGlyID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIlByb2dyYW1GaWxlcyJdLCAiQ29tbW9uIEZpbGVzIiwgIk1lcmdlIE1vZHVsZXMiKQotbXNpID0gTm9uZQotaWYgbGVuKHN5cy5hcmd2KT09MjoKLSAgICBtc2kgPSBzeXMuYXJndlsxXQotaWYgV2luNjQ6Ci0gICAgbW9kdWxlcyA9IFsiTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIiwgInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIl0KLSAgICBpZiBub3QgbXNpOiBtc2kgPSAicHl0aG9uLSVzLmFtZDY0Lm1zaSIgJSBmdWxsX2N1cnJlbnRfdmVyc2lvbgotZWxzZToKLSAgICBtb2R1bGVzID0gWyJNaWNyb3NvZnRfVkM5MF9DUlRfeDg2Lm1zbSIsInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Ni5tc20iXQotICAgIGlmIG5vdCBtc2k6IG1zaSA9ICJweXRob24tJXMubXNpIiAlIGZ1bGxfY3VycmVudF92ZXJzaW9uCi1mb3IgaSwgbiBpbiBlbnVtZXJhdGUobW9kdWxlcyk6Ci0gICAgbW9kdWxlc1tpXSA9IG9zLnBhdGguam9pbihtb2RfZGlyLCBuKQotCi1kZWYgbWVyZ2UobXNpLCBmZWF0dXJlLCByb290ZGlyLCBtb2R1bGVzKToKLSAgICBjYWJfYW5kX2ZpbGVjb3VudCA9IFtdCi0gICAgIyBTdGVwIDE6IE1lcmdlIGRhdGFiYXNlcywgZXh0cmFjdCBjYWJmaWxlcwotICAgIG0gPSBtc2lsaWIuTWFrZU1lcmdlMigpCi0gICAgbS5PcGVuTG9nKCJtZXJnZS5sb2ciKQotICAgIHByaW50ICJPcGVuZWQgTG9nIgotICAgIG0uT3BlbkRhdGFiYXNlKG1zaSkKLSAgICBwcmludCAiT3BlbmVkIERCIgotICAgIGZvciBtb2R1bGUgaW4gbW9kdWxlczoKLSAgICAgICAgcHJpbnQgbW9kdWxlCi0gICAgICAgIG0uT3Blbk1vZHVsZShtb2R1bGUsMCkKLSAgICAgICAgcHJpbnQgIk9wZW5lZCBNb2R1bGUiLG1vZHVsZQotICAgICAgICBtLk1lcmdlKGZlYXR1cmUsIHJvb3RkaXIpCi0gICAgICAgIHByaW50ICJFcnJvcnM6IgotICAgICAgICBmb3IgZSBpbiBtLkVycm9yczoKLSAgICAgICAgICAgIHByaW50IGUuVHlwZSwgZS5Nb2R1bGVUYWJsZSwgZS5EYXRhYmFzZVRhYmxlCi0gICAgICAgICAgICBwcmludCAiICAgTW9ka2V5czoiLAotICAgICAgICAgICAgZm9yIHMgaW4gZS5Nb2R1bGVLZXlzOiBwcmludCBzLAotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgICAgIHByaW50ICIgICBEQktleXM6IiwKLSAgICAgICAgICAgIGZvciBzIGluIGUuRGF0YWJhc2VLZXlzOiBwcmludCBzLAotICAgICAgICAgICAgcHJpbnQKLSAgICAgICAgY2FibmFtZSA9IHRlbXBmaWxlLm1rdGVtcChzdWZmaXg9Ii5jYWIiKQotICAgICAgICBtLkV4dHJhY3RDQUIoY2FibmFtZSkKLSAgICAgICAgY2FiX2FuZF9maWxlY291bnQuYXBwZW5kKChjYWJuYW1lLCBsZW4obS5Nb2R1bGVGaWxlcykpKQotICAgICAgICBtLkNsb3NlTW9kdWxlKCkKLSAgICBtLkNsb3NlRGF0YWJhc2UoVHJ1ZSkKLSAgICBtLkNsb3NlTG9nKCkKLQotICAgICMgU3RlcCAyOiBBZGQgQ0FCIGZpbGVzCi0gICAgaSA9IG1zaWxpYi5NYWtlSW5zdGFsbGVyKCkKLSAgICBkYiA9IGkuT3BlbkRhdGFiYXNlKG1zaSwgd2luMzJjb20uY2xpZW50LmNvbnN0YW50cy5tc2lPcGVuRGF0YWJhc2VNb2RlVHJhbnNhY3QpCi0KLSAgICB2ID0gZGIuT3BlblZpZXcoIlNFTEVDVCBMYXN0U2VxdWVuY2UgRlJPTSBNZWRpYSIpCi0gICAgdi5FeGVjdXRlKE5vbmUpCi0gICAgbWF4bWVkaWEgPSAtMQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHIgPSB2LkZldGNoKCkKLSAgICAgICAgaWYgbm90IHI6IGJyZWFrCi0gICAgICAgIHNlcSA9IHIuSW50ZWdlckRhdGEoMSkKLSAgICAgICAgaWYgc2VxID4gbWF4bWVkaWE6Ci0gICAgICAgICAgICBtYXhtZWRpYSA9IHNlcQotICAgIHByaW50ICJTdGFydCBvZiBNZWRpYSIsIG1heG1lZGlhCi0KLSAgICBmb3IgY2FibmFtZSwgY291bnQgaW4gY2FiX2FuZF9maWxlY291bnQ6Ci0gICAgICAgIHN0cmVhbSA9ICJtZXJnZWQlZCIgJSBtYXhtZWRpYQotICAgICAgICBtc2lsaWIuYWRkX2RhdGEoZGIsICJNZWRpYSIsCi0gICAgICAgICAgICAgICAgWyhtYXhtZWRpYSsxLCBtYXhtZWRpYStjb3VudCwgTm9uZSwgIiMiK3N0cmVhbSwgTm9uZSwgTm9uZSldKQotICAgICAgICBtc2lsaWIuYWRkX3N0cmVhbShkYiwgc3RyZWFtLCAgY2FibmFtZSkKLSAgICAgICAgb3MudW5saW5rKGNhYm5hbWUpCi0gICAgICAgIG1heG1lZGlhICs9IGNvdW50Ci0gICAgIyBUaGUgbWVyZ2UgbW9kdWxlIHNldHMgQUxMVVNFUlMgdG8gMSBpbiB0aGUgcHJvcGVydHkgdGFibGUuIAotICAgICMgVGhpcyBpcyB1bmRlc2lyZWQ7IGRlbGV0ZSB0aGF0Ci0gICAgdiA9IGRiLk9wZW5WaWV3KCJERUxFVEUgRlJPTSBQcm9wZXJ0eSBXSEVSRSBQcm9wZXJ0eT0nQUxMVVNFUlMnIikKLSAgICB2LkV4ZWN1dGUoTm9uZSkKLSAgICB2LkNsb3NlKCkKLSAgICBkYi5Db21taXQoKQotCi1tZXJnZShtc2ksICJTaGFyZWRDUlQiLCAiVEFSR0VURElSIiwgbW9kdWxlcykKLQotIyBjZXJ0bmFtZSAoZnJvbSBjb25maWcucHkpIHNob3VsZCBiZSAoYSBzdWJzdHJpbmcgb2YpCi0jIHRoZSBjZXJ0aWZpY2F0ZSBzdWJqZWN0LCBlLmcuICJQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiIKLWlmIGNlcnRuYW1lOgotICAgIG9zLnN5c3RlbSgnc2lnbnRvb2wgc2lnbiAvbiAiJXMiIC90IGh0dHA6Ly90aW1lc3RhbXAudmVyaXNpZ24uY29tL3NjcmlwdHMvdGltZXN0YW1wLmRsbCAlcycgJSAoY2VydG5hbWUsIG1zaSkpCmRpZmYgLS1naXQgYS9Ub29scy9tc2kvbXNpLnB5IGIvVG9vbHMvbXNpL21zaS5weQppbmRleCBiNjY4YzdhLi41M2U2NTJkIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvbXNpLnB5CisrKyBiL1Rvb2xzL21zaS9tc2kucHkKQEAgLTcsNiArNyw3IEBACiBmcm9tIHdpbjMyY29tLmNsaWVudCBpbXBvcnQgY29uc3RhbnRzCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCiBmcm9tIHV1aWRzIGltcG9ydCBwcm9kdWN0X2NvZGVzCitpbXBvcnQgdGVtcGZpbGUKIAogIyBTZXR0aW5ncyBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBjb25maWcucHkgYmVsb3cKICMgMCBmb3Igb2ZmaWNpYWwgcHl0aG9uLm9yZyByZWxlYXNlcwpAQCAtMjgsNiArMjksOCBAQAogUENCVUlMRD0iUENidWlsZCIKICMgbXN2Y3J0IHZlcnNpb24KIE1TVkNSID0gIjkwIgorIyBOYW1lIG9mIGNlcnRpZmljYXRlIGluIGRlZmF1bHQgc3RvcmUgdG8gc2lnbiBNU0kgd2l0aAorY2VydG5hbWUgPSBOb25lCiAjIE1ha2UgYSB6aXAgZmlsZSBjb250YWluaW5nIHRoZSBQREIgZmlsZXMgZm9yIHRoaXMgYnVpbGQ/CiBwZGJ6aXAgPSBUcnVlCiAKQEAgLTExNSw2ICsxMTgsNyBAQAogICAgICIyNyI6Ins0ZmUyMWM3Ni0xNzYwLTQzN2ItYTJmMi05OTkwOTEzMGExNzV9IiwKICAgICAiMzAiOiJ7Njk1M2JjM2ItNjc2OC00MjkxLTg0MTAtNzkxNGNlNmUyY2E4fSIsCiAgICAgIjMxIjoiezRhZmNiYTBiLTEzZTQtNDdjMy1iZWJlLTQ3NzQyOGI0NjkxM30iLAorICAgICIzMiI6InszZmY5NTMxNS0xMDk2LTRkMzEtYmQ4Ni02MDFkNTQzOGFkNWV9IiwKICAgICB9IFttYWpvcittaW5vcl0KIAogIyBDb21wdXRlIHRoZSBuYW1lIHRoYXQgU3BoaW54IGdpdmVzIHRvIHRoZSBkb2NmaWxlCkBAIC0yMjEsNyArMjI1LDggQEAKICAgICAjIHNjaGVtYSByZXByZXNlbnRzIHRoZSBpbnN0YWxsZXIgMi4wIGRhdGFiYXNlIHNjaGVtYS4KICAgICAjIHNlcXVlbmNlIGlzIHRoZSBzZXQgb2Ygc3RhbmRhcmQgc2VxdWVuY2VzCiAgICAgIyAodWkvZXhlY3V0ZSwgYWRtaW4vYWR2dC9pbnN0YWxsKQotICAgIGRiID0gbXNpbGliLmluaXRfZGF0YWJhc2UoInB5dGhvbi0lcyVzLm1zaSIgJSAoZnVsbF9jdXJyZW50X3ZlcnNpb24sIG1zaWxpYi5hcmNoX2V4dCksCisgICAgbXNpbmFtZSA9ICJweXRob24tJXMlcy5tc2kiICUgKGZ1bGxfY3VycmVudF92ZXJzaW9uLCBtc2lsaWIuYXJjaF9leHQpCisgICAgZGIgPSBtc2lsaWIuaW5pdF9kYXRhYmFzZShtc2luYW1lLAogICAgICAgICAgICAgICAgICAgc2NoZW1hLCBQcm9kdWN0TmFtZT0iUHl0aG9uICIrZnVsbF9jdXJyZW50X3ZlcnNpb24rcHJvZHVjdHN1ZmZpeCwKICAgICAgICAgICAgICAgICAgIFByb2R1Y3RDb2RlPXByb2R1Y3RfY29kZSwKICAgICAgICAgICAgICAgICAgIFByb2R1Y3RWZXJzaW9uPWN1cnJlbnRfdmVyc2lvbiwKQEAgLTI0NCw3ICsyNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJQcm9kdWN0TGluZSIsICJQeXRob24lcyVzIiAlIChtYWpvciwgbWlub3IpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSkKICAgICBkYi5Db21taXQoKQotICAgIHJldHVybiBkYgorICAgIHJldHVybiBkYiwgbXNpbmFtZQogCiBkZWYgcmVtb3ZlX29sZF92ZXJzaW9ucyhkYik6CiAgICAgIkZpbGwgdGhlIHVwZ3JhZGUgdGFibGUuIgpAQCAtODc2LDcgKzg4MSw2IEBACiAgICAgc2h1dGlsLmNvcHlmaWxlb2JqKG9wZW4ob3MucGF0aC5qb2luKHNyY2RpciwgIkxJQ0VOU0UiKSksIG91dCkKICAgICBzaHV0aWwuY29weWZpbGVvYmoob3BlbigiY3J0bGljZW5zZS50eHQiKSwgb3V0KQogICAgIGZvciBuYW1lLCBwYXQsIGZpbGUgaW4gKCgiYnppcDIiLCJiemlwMi0qIiwgIkxJQ0VOU0UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAoIkJlcmtlbGV5IERCIiwgImRiLSoiLCAiTElDRU5TRSIpLAogICAgICAgICAgICAgICAgICAgICAgICgib3BlbnNzbCIsICJvcGVuc3NsLSoiLCAiTElDRU5TRSIpLAogICAgICAgICAgICAgICAgICAgICAgICgiVGNsIiwgInRjbDgqIiwgImxpY2Vuc2UudGVybXMiKSwKICAgICAgICAgICAgICAgICAgICAgICAoIlRrIiwgInRrOCoiLCAibGljZW5zZS50ZXJtcyIpLApAQCAtOTAwLDYgKzkwNCwxMyBAQAogICAgICAgICAgICAga3dbJ2NvbXBvbmVudGZsYWdzJ10gPSAyICNtc2lkYkNvbXBvbmVudEF0dHJpYnV0ZXNPcHRpb25hbAogICAgICAgICBEaXJlY3RvcnkuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCiAKKyAgICBkZWYgY2hlY2tfdW5wYWNrYWdlZChzZWxmKToKKyAgICAgICAgc2VsZi51bnBhY2thZ2VkX2ZpbGVzLmRpc2NhcmQoJ19fcHljYWNoZV9fJykKKyAgICAgICAgc2VsZi51bnBhY2thZ2VkX2ZpbGVzLmRpc2NhcmQoJy5zdm4nKQorICAgICAgICBpZiBzZWxmLnVucGFja2FnZWRfZmlsZXM6CisgICAgICAgICAgICBwcmludCAiV2FybmluZzogVW5wYWNrYWdlZCBmaWxlcyBpbiAlcyIgJSBzZWxmLmFic29sdXRlCisgICAgICAgICAgICBwcmludCBzZWxmLnVucGFja2FnZWRfZmlsZXMKKwogIyBTZWUgIkZpbGUgVGFibGUiLCAiQ29tcG9uZW50IFRhYmxlIiwgIkRpcmVjdG9yeSBUYWJsZSIsCiAjICJGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSIKIGRlZiBhZGRfZmlsZXMoZGIpOgpAQCAtOTYzLDEzICs5NzQsMTMgQEAKICAgICAgICAgZXh0ZW5zaW9ucy5yZW1vdmUoIl9jdHlwZXMucHlkIikKIAogICAgICMgQWRkIGFsbCAucHkgZmlsZXMgaW4gTGliLCBleGNlcHQgdGtpbnRlciwgdGVzdAotICAgIGRpcnM9e30KKyAgICBkaXJzID0gW10KICAgICBweWRpcnMgPSBbKHJvb3QsIkxpYiIpXQogICAgIHdoaWxlIHB5ZGlyczoKICAgICAgICAgIyBDb21taXQgZXZlcnkgbm93IGFuZCB0aGVuLCBvciBlbHNlIGluc3RhbGxlciB3aWxsIGNvbXBsYWluCiAgICAgICAgIGRiLkNvbW1pdCgpCiAgICAgICAgIHBhcmVudCwgZGlyID0gcHlkaXJzLnBvcCgpCi0gICAgICAgIGlmIGRpciA9PSAiLnN2biIgb3IgZGlyLnN0YXJ0c3dpdGgoInBsYXQtIik6CisgICAgICAgIGlmIGRpciA9PSAiLnN2biIgb3IgZGlyID09ICdfX3B5Y2FjaGVfXycgb3IgZGlyLnN0YXJ0c3dpdGgoInBsYXQtIik6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbGlmIGRpciBpbiBbInRraW50ZXIiLCAiaWRsZWxpYiIsICJJY29ucyJdOgogICAgICAgICAgICAgaWYgbm90IGhhdmVfdGNsOgpAQCAtOTg3LDcgKzk5OCw3IEBACiAgICAgICAgICAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQogICAgICAgICBsaWIgPSBQeURpcmVjdG9yeShkYiwgY2FiLCBwYXJlbnQsIGRpciwgZGlyLCAiJXN8JXMiICUgKHBhcmVudC5tYWtlX3Nob3J0KGRpciksIGRpcikpCiAgICAgICAgICMgQWRkIGFkZGl0aW9uYWwgZmlsZXMKLSAgICAgICAgZGlyc1tkaXJdPWxpYgorICAgICAgICBkaXJzLmFwcGVuZChsaWIpCiAgICAgICAgIGxpYi5nbG9iKCIqLnR4dCIpCiAgICAgICAgIGlmIGRpcj09J3NpdGUtcGFja2FnZXMnOgogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJSRUFETUUudHh0Iiwgc3JjPSJSRUFETUUiKQpAQCAtOTk3LDE5ICsxMDA4LDE0IEBACiAgICAgICAgIGlmIGZpbGVzOgogICAgICAgICAgICAgIyBBZGQgYW4gZW50cnkgdG8gdGhlIFJlbW92ZUZpbGUgdGFibGUgdG8gcmVtb3ZlIGJ5dGVjb2RlIGZpbGVzLgogICAgICAgICAgICAgbGliLnJlbW92ZV9weWMoKQotICAgICAgICBpZiBkaXIuZW5kc3dpdGgoJy5lZ2ctaW5mbycpOgotICAgICAgICAgICAgbGliLmFkZF9maWxlKCdlbnRyeV9wb2ludHMudHh0JykKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgnUEtHLUlORk8nKQotICAgICAgICAgICAgbGliLmFkZF9maWxlKCd0b3BfbGV2ZWwudHh0JykKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgnemlwLXNhZmUnKQotICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBwYWNrYWdlIFJFQURNRXMgaWYgcHJlc2VudAorICAgICAgICBsaWIuZ2xvYigiUkVBRE1FIikKKyAgICAgICAgaWYgZGlyPT0nTGliJzoKKyAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgnd3NnaXJlZi5lZ2ctaW5mbycpCiAgICAgICAgIGlmIGRpcj09J3Rlc3QnIGFuZCBwYXJlbnQucGh5c2ljYWw9PSdMaWInOgogICAgICAgICAgICAgbGliLmFkZF9maWxlKCIxODV0ZXN0LmRiIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiYXVkaW90ZXN0LmF1IikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiY2ZncGFyc2VyLjEiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJzZ21sX2lucHV0Lmh0bWwiKQotICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0LnhtbCIpCi0gICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3QueG1sLm91dCIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInRlc3R0YXIudGFyIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgidGVzdF9kaWZmbGliX2V4cGVjdC5odG1sIikKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiY2hlY2tfc291bmRjYXJkLnZicyIpCkBAIC0xMDE4LDI2ICsxMDI0LDQxIEBACiAgICAgICAgICAgICBsaWIuZ2xvYigiKi51dWUiKQogICAgICAgICAgICAgbGliLmdsb2IoIioucGVtIikKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLnBjayIpCisgICAgICAgICAgICBsaWIuZ2xvYigiY2ZncGFyc2VyLioiKQorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ6aXBfY3A0MzdfaGVhZGVyLnppcCIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInppcGRpci56aXAiKQorICAgICAgICBpZiBkaXI9PSdjYXBhdGgnOgorICAgICAgICAgICAgbGliLmdsb2IoIiouMCIpCiAgICAgICAgIGlmIGRpcj09J3Rlc3RzJyBhbmQgcGFyZW50LnBoeXNpY2FsPT0nZGlzdHV0aWxzJzoKICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiU2V0dXAuc2FtcGxlIikKICAgICAgICAgaWYgZGlyPT0nZGVjaW1hbHRlc3RkYXRhJzoKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLmRlY1Rlc3QiKQorICAgICAgICBpZiBkaXI9PSd4bWx0ZXN0ZGF0YSc6CisgICAgICAgICAgICBsaWIuZ2xvYigiKi54bWwiKQorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0ZXN0LnhtbC5vdXQiKQogICAgICAgICBpZiBkaXI9PSdvdXRwdXQnOgogICAgICAgICAgICAgbGliLmdsb2IoInRlc3RfKiIpCisgICAgICAgIGlmIGRpcj09J3NuZGhkcmRhdGEnOgorICAgICAgICAgICAgbGliLmdsb2IoInNuZGhkci4qIikKICAgICAgICAgaWYgZGlyPT0naWRsZWxpYic6CiAgICAgICAgICAgICBsaWIuZ2xvYigiKi5kZWYiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJpZGxlLmJhdCIpCisgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIkNoYW5nZUxvZyIpCiAgICAgICAgIGlmIGRpcj09Ikljb25zIjoKICAgICAgICAgICAgIGxpYi5nbG9iKCIqLmdpZiIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoImlkbGUuaWNucyIpCiAgICAgICAgIGlmIGRpcj09ImNvbW1hbmQiIGFuZCBwYXJlbnQucGh5c2ljYWw9PSJkaXN0dXRpbHMiOgogICAgICAgICAgICAgbGliLmdsb2IoIndpbmluc3QqLmV4ZSIpCi0gICAgICAgIGlmIGRpcj09InNldHVwdG9vbHMiOgotICAgICAgICAgICAgbGliLmFkZF9maWxlKCJjbGkuZXhlIikKLSAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgiZ3VpLmV4ZSIpCisgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoImNvbW1hbmRfdGVtcGxhdGUiKQogICAgICAgICBpZiBkaXI9PSJsaWIydG8zIjoKICAgICAgICAgICAgIGxpYi5yZW1vdmVmaWxlKCJwaWNrbGUiLCAiKi5waWNrbGUiKQorICAgICAgICBpZiBkaXI9PSJtYWNob2xpYiI6CisgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIlJFQURNRS5jdHlwZXMiKQorICAgICAgICAgICAgbGliLmdsb2IoImZldGNoX21hY2hvbGliKiIpCisgICAgICAgIGlmIGRpcj09J3R1cnRsZWRlbW8nOgorICAgICAgICAgICAgbGliLmFkZF9maWxlKCJ0dXJ0bGUuY2ZnIikKKyAgICAgICAgaWYgZGlyPT0icHlkb2NfZGF0YSI6CisgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIl9weWRvYy5jc3MiKQogICAgICAgICBpZiBkaXI9PSJkYXRhIiBhbmQgcGFyZW50LnBoeXNpY2FsPT0idGVzdCIgYW5kIHBhcmVudC5iYXNlZGlyLnBoeXNpY2FsPT0iZW1haWwiOgogICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBjb250YWluIGFsbCBub24tLnN2biBmaWxlcyBsaXN0ZWQgaW4gc3VidmVyc2lvbgogICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihsaWIuYWJzb2x1dGUpOgpAQCAtMTA0OSw2ICsxMDcwLDggQEAKICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcihsaWIuYWJzb2x1dGUpOgogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4obGliLmFic29sdXRlLCBmKSk6CiAgICAgICAgICAgICAgICAgcHlkaXJzLmFwcGVuZCgobGliLCBmKSkKKyAgICBmb3IgZCBpbiBkaXJzOgorICAgICAgICBkLmNoZWNrX3VucGFja2FnZWQoKQogICAgICMgQWRkIERMTHMKICAgICBkZWZhdWx0X2ZlYXR1cmUuc2V0X2N1cnJlbnQoKQogICAgIGxpYiA9IERMTHMKQEAgLTEwNjQsNiArMTA4Nyw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBkbGxzLmFwcGVuZChmKQogICAgICAgICBsaWIuYWRkX2ZpbGUoZikKKyAgICBsaWIuYWRkX2ZpbGUoJ3B5dGhvbjMuZGxsJykKICAgICAjIEFkZCBzcWxpdGUKICAgICBpZiBtc2lsaWIubXNpX3R5cGU9PSJJbnRlbDY0OzEwMzMiOgogICAgICAgICBzcWxpdGVfYXJjaCA9ICIvaWE2NCIKQEAgLTExMDAsNiArMTEyNCw3IEBACiAgICAgZm9yIGYgaW4gZGxsczoKICAgICAgICAgbGliLmFkZF9maWxlKGYucmVwbGFjZSgncHlkJywnbGliJykpCiAgICAgbGliLmFkZF9maWxlKCdweXRob24lcyVzLmxpYicgJSAobWFqb3IsIG1pbm9yKSkKKyAgICBsaWIuYWRkX2ZpbGUoJ3B5dGhvbjMubGliJykKICAgICAjIEFkZCB0aGUgbWluZ3ctZm9ybWF0IGxpYnJhcnkKICAgICBpZiBoYXZlX21pbmd3OgogICAgICAgICBsaWIuYWRkX2ZpbGUoJ2xpYnB5dGhvbiVzJXMuYScgJSAobWFqb3IsIG1pbm9yKSkKQEAgLTExMjAsNyArMTE0NSw3IEBACiAgICAgIyBBZGQgdG9vbHMKICAgICB0b29scy5zZXRfY3VycmVudCgpCiAgICAgdG9vbGRpciA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHJvb3QsICJUb29scyIsICJUb29scyIsICJUT09MU3xUb29scyIpCi0gICAgZm9yIGYgaW4gWydpMThuJywgJ3B5bmNoZScsICdTY3JpcHRzJywgJ3dlYmNoZWNrZXInXToKKyAgICBmb3IgZiBpbiBbJ2kxOG4nLCAncHluY2hlJywgJ1NjcmlwdHMnXToKICAgICAgICAgbGliID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgdG9vbGRpciwgZiwgZiwgIiVzfCVzIiAlICh0b29sZGlyLm1ha2Vfc2hvcnQoZiksIGYpKQogICAgICAgICBsaWIuZ2xvYigiKi5weSIpCiAgICAgICAgIGxpYi5nbG9iKCIqLnB5dyIsIGV4Y2x1ZGU9WydweWRvY2d1aS5weXcnXSkKQEAgLTEzMDcsNyArMTMzMiw3IEBACiAgICAgICAgICAgICBwZGJ6aXAud3JpdGUob3MucGF0aC5qb2luKHNyY2RpciwgUENCVUlMRCwgZiksIGYpCiAgICAgcGRiemlwLmNsb3NlKCkKIAotZGIgPSBidWlsZF9kYXRhYmFzZSgpCitkYixtc2luYW1lID0gYnVpbGRfZGF0YWJhc2UoKQogdHJ5OgogICAgIGFkZF9mZWF0dXJlcyhkYikKICAgICBhZGRfdWkoZGIpCkBAIC0xMzE4LDUgKzEzNDMsNzcgQEAKIGZpbmFsbHk6CiAgICAgZGVsIGRiCiAKKyMgTWVyZ2UgQ1JUIGludG8gTVNJIGZpbGUuIFRoaXMgcmVxdWlyZXMgdGhlIGRhdGFiYXNlIHRvIGJlIGNsb3NlZC4KK21vZF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MuZW52aXJvblsiUHJvZ3JhbUZpbGVzIl0sICJDb21tb24gRmlsZXMiLCAiTWVyZ2UgTW9kdWxlcyIpCitpZiBtc2lsaWIuV2luNjQ6CisgICAgbW9kdWxlcyA9IFsiTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIiwgInBvbGljeV85XzBfTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Nl94NjQubXNtIl0KK2Vsc2U6CisgICAgbW9kdWxlcyA9IFsiTWljcm9zb2Z0X1ZDOTBfQ1JUX3g4Ni5tc20iLCJwb2xpY3lfOV8wX01pY3Jvc29mdF9WQzkwX0NSVF94ODYubXNtIl0KKworZm9yIGksIG4gaW4gZW51bWVyYXRlKG1vZHVsZXMpOgorICAgIG1vZHVsZXNbaV0gPSBvcy5wYXRoLmpvaW4obW9kX2RpciwgbikKKworZGVmIG1lcmdlKG1zaSwgZmVhdHVyZSwgcm9vdGRpciwgbW9kdWxlcyk6CisgICAgY2FiX2FuZF9maWxlY291bnQgPSBbXQorICAgICMgU3RlcCAxOiBNZXJnZSBkYXRhYmFzZXMsIGV4dHJhY3QgY2FiZmlsZXMKKyAgICBtID0gbXNpbGliLk1ha2VNZXJnZTIoKQorICAgIG0uT3BlbkxvZygibWVyZ2UubG9nIikKKyAgICBtLk9wZW5EYXRhYmFzZShtc2kpCisgICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgorICAgICAgICBwcmludCBtb2R1bGUKKyAgICAgICAgbS5PcGVuTW9kdWxlKG1vZHVsZSwwKQorICAgICAgICBtLk1lcmdlKGZlYXR1cmUsIHJvb3RkaXIpCisgICAgICAgIHByaW50ICJFcnJvcnM6IgorICAgICAgICBmb3IgZSBpbiBtLkVycm9yczoKKyAgICAgICAgICAgIHByaW50IGUuVHlwZSwgZS5Nb2R1bGVUYWJsZSwgZS5EYXRhYmFzZVRhYmxlCisgICAgICAgICAgICBwcmludCAiICAgTW9ka2V5czoiLAorICAgICAgICAgICAgZm9yIHMgaW4gZS5Nb2R1bGVLZXlzOiBwcmludCBzLAorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgICAgIHByaW50ICIgICBEQktleXM6IiwKKyAgICAgICAgICAgIGZvciBzIGluIGUuRGF0YWJhc2VLZXlzOiBwcmludCBzLAorICAgICAgICAgICAgcHJpbnQKKyAgICAgICAgY2FibmFtZSA9IHRlbXBmaWxlLm1rdGVtcChzdWZmaXg9Ii5jYWIiKQorICAgICAgICBtLkV4dHJhY3RDQUIoY2FibmFtZSkKKyAgICAgICAgY2FiX2FuZF9maWxlY291bnQuYXBwZW5kKChjYWJuYW1lLCBsZW4obS5Nb2R1bGVGaWxlcykpKQorICAgICAgICBtLkNsb3NlTW9kdWxlKCkKKyAgICBtLkNsb3NlRGF0YWJhc2UoVHJ1ZSkKKyAgICBtLkNsb3NlTG9nKCkKKworICAgICMgU3RlcCAyOiBBZGQgQ0FCIGZpbGVzCisgICAgaSA9IG1zaWxpYi5NYWtlSW5zdGFsbGVyKCkKKyAgICBkYiA9IGkuT3BlbkRhdGFiYXNlKG1zaSwgY29uc3RhbnRzLm1zaU9wZW5EYXRhYmFzZU1vZGVUcmFuc2FjdCkKKworICAgIHYgPSBkYi5PcGVuVmlldygiU0VMRUNUIExhc3RTZXF1ZW5jZSBGUk9NIE1lZGlhIikKKyAgICB2LkV4ZWN1dGUoTm9uZSkKKyAgICBtYXhtZWRpYSA9IC0xCisgICAgd2hpbGUgMToKKyAgICAgICAgciA9IHYuRmV0Y2goKQorICAgICAgICBpZiBub3QgcjogYnJlYWsKKyAgICAgICAgc2VxID0gci5JbnRlZ2VyRGF0YSgxKQorICAgICAgICBpZiBzZXEgPiBtYXhtZWRpYToKKyAgICAgICAgICAgIG1heG1lZGlhID0gc2VxCisgICAgcHJpbnQgIlN0YXJ0IG9mIE1lZGlhIiwgbWF4bWVkaWEKKworICAgIGZvciBjYWJuYW1lLCBjb3VudCBpbiBjYWJfYW5kX2ZpbGVjb3VudDoKKyAgICAgICAgc3RyZWFtID0gIm1lcmdlZCVkIiAlIG1heG1lZGlhCisgICAgICAgIG1zaWxpYi5hZGRfZGF0YShkYiwgIk1lZGlhIiwKKyAgICAgICAgICAgICAgICBbKG1heG1lZGlhKzEsIG1heG1lZGlhK2NvdW50LCBOb25lLCAiIyIrc3RyZWFtLCBOb25lLCBOb25lKV0pCisgICAgICAgIG1zaWxpYi5hZGRfc3RyZWFtKGRiLCBzdHJlYW0sICBjYWJuYW1lKQorICAgICAgICBvcy51bmxpbmsoY2FibmFtZSkKKyAgICAgICAgbWF4bWVkaWEgKz0gY291bnQKKyAgICAjIFRoZSBtZXJnZSBtb2R1bGUgc2V0cyBBTExVU0VSUyB0byAxIGluIHRoZSBwcm9wZXJ0eSB0YWJsZS4KKyAgICAjIFRoaXMgaXMgdW5kZXNpcmVkOyBkZWxldGUgdGhhdAorICAgIHYgPSBkYi5PcGVuVmlldygiREVMRVRFIEZST00gUHJvcGVydHkgV0hFUkUgUHJvcGVydHk9J0FMTFVTRVJTJyIpCisgICAgdi5FeGVjdXRlKE5vbmUpCisgICAgdi5DbG9zZSgpCisgICAgZGIuQ29tbWl0KCkKKworbWVyZ2UobXNpbmFtZSwgIlNoYXJlZENSVCIsICJUQVJHRVRESVIiLCBtb2R1bGVzKQorCisjIGNlcnRuYW1lIChmcm9tIGNvbmZpZy5weSkgc2hvdWxkIGJlIChhIHN1YnN0cmluZyBvZikKKyMgdGhlIGNlcnRpZmljYXRlIHN1YmplY3QsIGUuZy4gIlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIgoraWYgY2VydG5hbWU6CisgICAgb3Muc3lzdGVtKCdzaWdudG9vbCBzaWduIC9uICIlcyIgL3QgaHR0cDovL3RpbWVzdGFtcC52ZXJpc2lnbi5jb20vc2NyaXB0cy90aW1lc3RhbXAuZGxsICVzJyAlIChjZXJ0bmFtZSwgbXNpbmFtZSkpCisKIGlmIHBkYnppcDoKICAgICBidWlsZF9wZGJ6aXAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21zaWxpYi5weSBiL1Rvb2xzL21zaS9tc2lsaWIucHkKaW5kZXggNmY0OWI0Yy4uNTc5NWQwZSAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21zaWxpYi5weQorKysgYi9Ub29scy9tc2kvbXNpbGliLnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHdpbjMyY29tLmNsaWVudAogaW1wb3J0IHB5dGhvbmNvbSwgcHl3aW50eXBlcwogZnJvbSB3aW4zMmNvbS5jbGllbnQgaW1wb3J0IGNvbnN0YW50cwotaW1wb3J0IHJlLCBzdHJpbmcsIG9zLCBzZXRzLCBnbG9iLCBzdWJwcm9jZXNzLCBzeXMsIF93aW5yZWcsIHN0cnVjdAoraW1wb3J0IHJlLCBzdHJpbmcsIG9zLCBzZXRzLCBnbG9iLCBzdWJwcm9jZXNzLCBzeXMsIF93aW5yZWcsIHN0cnVjdCwgX21zaQogCiB0cnk6CiAgICAgYmFzZXN0cmluZwpAQCAtMzUwLDcgKzM1MCw3IEBACiBjbGFzcyBDQUI6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIHNlbGYuZmlsZSA9IG9wZW4obmFtZSsiLnR4dCIsICJ3dCIpCisgICAgICAgIHNlbGYuZmlsZXMgPSBbXQogICAgICAgICBzZWxmLmZpbGVuYW1lcyA9IHNldHMuU2V0KCkKICAgICAgICAgc2VsZi5pbmRleCA9IDAKIApAQCAtMzY5LDUxICszNjksMTggQEAKICAgICAgICAgaWYgbm90IGxvZ2ljYWw6CiAgICAgICAgICAgICBsb2dpY2FsID0gc2VsZi5nZW5faWQoZGlyLCBmaWxlKQogICAgICAgICBzZWxmLmluZGV4ICs9IDEKLSAgICAgICAgaWYgZnVsbC5maW5kKCIgIikhPS0xOgotICAgICAgICAgICAgcHJpbnQgPj5zZWxmLmZpbGUsICciJXMiICVzJyAlIChmdWxsLCBsb2dpY2FsKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQgPj5zZWxmLmZpbGUsICclcyAlcycgJSAoZnVsbCwgbG9naWNhbCkKKyAgICAgICAgc2VsZi5maWxlcy5hcHBlbmQoKGZ1bGwsIGxvZ2ljYWwpKQogICAgICAgICByZXR1cm4gc2VsZi5pbmRleCwgbG9naWNhbAogCiAgICAgZGVmIGNvbW1pdChzZWxmLCBkYik6Ci0gICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWUrIi5jYWIiKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZm9yIGssIHYgaW4gWyhyIlNvZnR3YXJlXE1pY3Jvc29mdFxWaXN1YWxTdHVkaW9cNy4xXFNldHVwXFZTIiwgIlZTN0NvbW1vbkJpbkRpciIpLAotICAgICAgICAgICAgICAgICAgICAgKHIiU29mdHdhcmVcTWljcm9zb2Z0XFZpc3VhbFN0dWRpb1w4LjBcU2V0dXBcVlMiLCAiVlM3Q29tbW9uQmluRGlyIiksCi0gICAgICAgICAgICAgICAgICAgICAociJTb2Z0d2FyZVxNaWNyb3NvZnRcVmlzdWFsU3R1ZGlvXDkuMFxTZXR1cFxWUyIsICJWUzdDb21tb25CaW5EaXIiKSwKLSAgICAgICAgICAgICAgICAgICAgIChyIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW4zMlNES1xEaXJlY3RvcmllcyIsICJJbnN0YWxsIERpciIpLAotICAgICAgICAgICAgICAgICAgICBdOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGtleSA9IF93aW5yZWcuT3BlbktleShfd2lucmVnLkhLRVlfTE9DQUxfTUFDSElORSwgaykKLSAgICAgICAgICAgICAgICBkaXIgPSBfd2lucmVnLlF1ZXJ5VmFsdWVFeChrZXksIHYpWzBdCi0gICAgICAgICAgICAgICAgX3dpbnJlZy5DbG9zZUtleShrZXkpCi0gICAgICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgSW5kZXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGNhYmFyYyA9IG9zLnBhdGguam9pbihkaXIsIHIiQmluIiwgImNhYmFyYy5leGUiKQotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhYmFyYyk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmludCAiV0FSTklORzogY2FiYXJjLmV4ZSBub3QgZm91bmQgaW4gcmVnaXN0cnkiCi0gICAgICAgICAgICBjYWJhcmMgPSAiY2FiYXJjLmV4ZSIKLSAgICAgICAgY21kID0gciciJXMiIC1tIGx6eDoyMSBuICVzLmNhYiBAJXMudHh0JyAlIChjYWJhcmMsIHNlbGYubmFtZSwgc2VsZi5uYW1lKQotICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHNoZWxsPVRydWUsIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICAgICAgICBmb3IgbGluZSBpbiBwLnN0ZG91dDoKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiICAtLSBhZGRpbmcgIik6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiLiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUobGluZSkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5uYW1lKyIuY2FiIik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yLCAiY2FiYXJjIGZhaWxlZCIKKyAgICAgICAgX21zaS5GQ0lDcmVhdGUoc2VsZi5uYW1lKyIuY2FiIiwgc2VsZi5maWxlcykKICAgICAgICAgYWRkX2RhdGEoZGIsICJNZWRpYSIsCiAgICAgICAgICAgICAgICAgWygxLCBzZWxmLmluZGV4LCBOb25lLCAiIyIrc2VsZi5uYW1lLCBOb25lLCBOb25lKV0pCiAgICAgICAgIGFkZF9zdHJlYW0oZGIsIHNlbGYubmFtZSwgc2VsZi5uYW1lKyIuY2FiIikKLSAgICAgICAgb3MudW5saW5rKHNlbGYubmFtZSsiLnR4dCIpCiAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWUrIi5jYWIiKQogICAgICAgICBkYi5Db21taXQoKQogCkBAIC00NTEsNiArNDE4LDEyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFic29sdXRlID0gcGh5c2ljYWwKICAgICAgICAgICAgIGJsb2dpY2FsID0gTm9uZQorICAgICAgICAjIGluaXRpYWxseSBhc3N1bWUgdGhhdCBhbGwgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIHVucGFja2FnZWQKKyAgICAgICAgIyBhcyBmaWxlcyBmcm9tIHNlbGYuYWJzb2x1dGUgZ2V0IGFkZGVkLCB0aGlzIHNldCBpcyByZWR1Y2VkCisgICAgICAgIHNlbGYudW5wYWNrYWdlZF9maWxlcyA9IHNldCgpCisgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoc2VsZi5hYnNvbHV0ZSk6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5hYnNvbHV0ZSwgZikpOgorICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrYWdlZF9maWxlcy5hZGQoZikKICAgICAgICAgYWRkX2RhdGEoZGIsICJEaXJlY3RvcnkiLCBbKGxvZ2ljYWwsIGJsb2dpY2FsLCBkZWZhdWx0KV0pCiAKICAgICBkZWYgc3RhcnRfY29tcG9uZW50KHNlbGYsIGNvbXBvbmVudCA9IE5vbmUsIGZlYXR1cmUgPSBOb25lLCBmbGFncyA9IE5vbmUsIGtleWZpbGUgPSBOb25lLCB1dWlkPU5vbmUpOgpAQCAtNTI3LDYgKzUwMCwxMSBAQAogICAgICAgICAgICAgc3JjID0gZmlsZQogICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguYmFzZW5hbWUoZmlsZSkKICAgICAgICAgYWJzb2x1dGUgPSBvcy5wYXRoLmpvaW4oc2VsZi5hYnNvbHV0ZSwgc3JjKQorICAgICAgICBpZiBhYnNvbHV0ZS5zdGFydHN3aXRoKHNlbGYuYWJzb2x1dGUpOgorICAgICAgICAgICAgIyBtYXJrIGZpbGUgYXMgcGFja2FnZWQKKyAgICAgICAgICAgIHJlbGF0aXZlID0gYWJzb2x1dGVbbGVuKHNlbGYuYWJzb2x1dGUpKzE6XQorICAgICAgICAgICAgaWYgcmVsYXRpdmUgaW4gc2VsZi51bnBhY2thZ2VkX2ZpbGVzOgorICAgICAgICAgICAgICAgIHNlbGYudW5wYWNrYWdlZF9maWxlcy5yZW1vdmUocmVsYXRpdmUpCiAgICAgICAgIGFzc2VydCBub3QgcmUuc2VhcmNoKHInW1w/fD48Oi8qXSInLCBmaWxlKSAjIHJlc3RyaWN0aW9ucyBvbiBsb25nIG5hbWVzCiAgICAgICAgIGlmIHNlbGYua2V5ZmlsZXMuaGFzX2tleShmaWxlKToKICAgICAgICAgICAgIGxvZ2ljYWwgPSBzZWxmLmtleWZpbGVzW2ZpbGVdCkBAIC01NzIsMTAgKzU1MCwxNyBAQAogICAgICAgICByZXR1cm4gZmlsZXMKIAogICAgIGRlZiByZW1vdmVfcHljKHNlbGYpOgotICAgICAgICAiUmVtb3ZlIC5weWMvLnB5byBmaWxlcyBvbiB1bmluc3RhbGwiCisgICAgICAgICJSZW1vdmUgLnB5Yy8ucHlvIGZpbGVzIGZyb20gX19weWNhY2hlX18gb24gdW5pbnN0YWxsIgorICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmxvZ2ljYWwgKyAiX3B5Y2FjaGUiCisgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJEaXJlY3RvcnkiLCBbKGRpcmVjdG9yeSwgc2VsZi5sb2dpY2FsLCAiX19QWUNBfjF8X19weWNhY2hlX18iKV0pCisgICAgICAgIGZsYWdzID0gMjU2IGlmIFdpbjY0IGVsc2UgMAorICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiQ29tcG9uZW50IiwKKyAgICAgICAgICAgICAgICBbKGRpcmVjdG9yeSwgZ2VuX3V1aWQoKSwgZGlyZWN0b3J5LCBmbGFncywgTm9uZSwgTm9uZSldKQorICAgICAgICBhZGRfZGF0YShzZWxmLmRiLCAiRmVhdHVyZUNvbXBvbmVudHMiLCBbKGN1cnJlbnRfZmVhdHVyZS5pZCwgZGlyZWN0b3J5KV0pCisgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJDcmVhdGVGb2xkZXIiLCBbKGRpcmVjdG9yeSwgZGlyZWN0b3J5KV0pCiAgICAgICAgIGFkZF9kYXRhKHNlbGYuZGIsICJSZW1vdmVGaWxlIiwKLSAgICAgICAgICAgICAgICAgWyhzZWxmLmNvbXBvbmVudCsiYyIsIHNlbGYuY29tcG9uZW50LCAiKi5weWMiLCBzZWxmLmxvZ2ljYWwsIDIpLAotICAgICAgICAgICAgICAgICAgKHNlbGYuY29tcG9uZW50KyJvIiwgc2VsZi5jb21wb25lbnQsICIqLnB5byIsIHNlbGYubG9naWNhbCwgMildKQorICAgICAgICAgICAgICAgICBbKHNlbGYuY29tcG9uZW50LCBzZWxmLmNvbXBvbmVudCwgIiouKiIsIGRpcmVjdG9yeSwgMiksCisgICAgICAgICAgICAgICAgIF0pCiAKICAgICBkZWYgcmVtb3ZlZmlsZShzZWxmLCBrZXksIHBhdHRlcm4pOgogICAgICAgICAiQWRkIGEgUmVtb3ZlRmlsZSBlbnRyeSIKZGlmZiAtLWdpdCBhL1Rvb2xzL21zaS91dWlkcy5weSBiL1Rvb2xzL21zaS91dWlkcy5weQppbmRleCBhNWU1Y2QyLi4wOWRhNDBhIDEwMDY0NAotLS0gYS9Ub29scy9tc2kvdXVpZHMucHkKKysrIGIvVG9vbHMvbXNpL3V1aWRzLnB5CkBAIC03LDIzICs3LDYgQEAKICMgZ2VuZXJhdGVkLiBGb3Igb2ZmaWNpYWwgcmVsZWFzZXMsIHdlIHJlY29yZCB0aGUgcHJvZHVjdCBjb2RlcywKICMgc28gcGVvcGxlIGNhbiByZWZlciB0byB0aGVtLgogcHJvZHVjdF9jb2RlcyA9IHsKLSAgICAnMi40LjEwMSc6ICd7MGU5YjRkOGUtNmNkYS00NDZlLWEyMDgtN2I5MmYzZGRmZmEwfScsICMgMi40YTEsIHJlbGVhc2VkIGFzIGEgc25hcHNob3QKLSAgICAnMi40LjEwMic6ICd7MWI5OTg3NDUtNDkwMS00ZWRiLWJjNTItMjEzNjg5ZTFiOTIyfScsICMgMi40YTIKLSAgICAnMi40LjEwMyc6ICd7MzNmYzhiZDItMWU4Zi00YWRkLWE0MGEtYWRlMjcyOGQ1OTQyfScsICMgMi40YTMKLSAgICAnMi40LjExMSc6ICd7NTFhN2UyYTgtMjAyNS00ZWYwLTg2ZmYtZTZhYWI3NDJkMWZhfScsICMgMi40YjEKLSAgICAnMi40LjExMic6ICd7NGE1ZTdjMWQtYzY1OS00ZmUzLWI4YzktN2M2NWJkOWM5NWE1fScsICMgMi40YjIKLSAgICAnMi40LjEyMSc6ICd7NzU1MDg4MjEtYThlOS00MGE4LTk1YmQtZGJlNjAzM2RkYmVhfScsICMgMi40YzEKLSAgICAnMi40LjEyMic6ICd7ODNhOTExOGItNGJkZC00NzNiLWFmYzMtYmNiMTQyZmVjYTllfScsICMgMi40YzIKLSAgICAnMi40LjE1MCc6ICd7ODJkOTMwMmUtZjIwOS00ODA1LWI1NDgtNTIwODcwNDc0ODNhfScsICMgMi40LjAKLSAgICAnMi40LjExMjEnOid7YmUwMjc0MTEtOGU2Yi00NDQwLWEyOWItYjA3ZGYwNjkwMjMwfScsICMgMi40LjFjMQotICAgICcyLjQuMTEyMic6J3swMjgxODc1Mi00OGJmLTQwNzQtYTI4MS03YTQxMTRjNGYxYjF9JywgIyAyLjQuMWMyCi0gICAgJzIuNC4xMTUwJzonezRkNGY1MzQ2LTdlNGEtNDBiNS05Mzg3LWZkYjYxODEzNTdmY30nLCAjIDIuNC4xCi0gICAgJzIuNC4yMTIxJzonezVlZjlkNmI2LWRmNzgtNDVkMi1hYjA5LTE0Nzg2YTNjNWE5OX0nLCAjIDIuNC4yYzEKLSAgICAnMi40LjIxNTAnOid7YjE5MWU0OWMtZWEyMy00M2IyLWIyOGEtMTRlMDc4NDA2OWI4fScsICMgMi40LjIKLSAgICAnMi40LjMxMjEnOid7ZjY2OWVkNGQtMWRjZS00MWM0LTk2MTctZDk4NTM5NzE4N2ExfScsICMgMi40LjNjMQotICAgICcyLjQuMzE1MCc6J3s3NWU3MWFkZC0wNDJjLTRmMzAtYmZhYy1hOWVjNDIzNTEzMTN9JywgIyAyLjQuMwotICAgICcyLjQuNDEyMSc6J3tjZDI4NjJkYi0yMmE0LTQ2ODgtODc3Mi04NTQwN2VhMjE1NTB9JywgIyAyLjQuNGMxCi0gICAgJzIuNC40MTUwJzonezYwZTJjOGM5LTZjZjMtNGIxYS05NjE4LWUzMDQ5NDZjOTRlNn0nLCAjIDIuNC40CiAgICAgJzIuNS4xMDEnOiAne2JjMTRjZTNlLTVlNzItNGE2NC1hYzFmLWJmNTlhNTcxODk4Y30nLCAjIDIuNWExCiAgICAgJzIuNS4xMDInOiAnezVlZWQ1MWMxLThlOWQtNDA3MS05NGM1LWI0MGRlNWQ0OWJhNX0nLCAjIDIuNWEyCiAgICAgJzIuNS4xMDMnOiAnezczZGNkOTY2LWZmZWMtNDE1Zi1iYjM5LTgzNDJjMWY0NzAxN30nLCAjIDIuNWEzCkBAIC01MCw2ICszMywyMyBAQAogICAgICcyLjYuMTE1MCc6J3s5Y2M4OTE3MC0wMDBiLTQ1N2QtOTFmMS01MzY5MWY4NWIyMjN9JywgIyAyLjYuMQogICAgICcyLjYuMjEyMSc6J3thZGFjNDEyYi1iMjA5LTRjMTUtYjZhYi1kY2ExYjZlNDcxNDR9JywgIyAyLjYuMmMxCiAgICAgJzIuNi4yMTUwJzonezI0YWFiNDIwLTRlMzAtNDQ5Ni05NzM5LTNlMjE2ZjNkZTZhZX0nLCAjIDIuNi4yCisgICAgJzIuNi4zMTIxJzone2E3M2UwMjU0LWRjZGEtNGZlNC1iZjM3LWM3ZTFjNGY0ZWJiNn0nLCAjIDIuNi4zYzEKKyAgICAnMi42LjMxNTAnOid7M2Q5YWMwOTUtZTExNS00ZTk0LWJkZWYtN2Y3ZWRmMTc2OTdkfScsICMgMi42LjMKKyAgICAnMi42LjQxMjEnOid7NzI3ZGU2MDUtMDM1OS00NjA2LWE5NGItYzIwMzM2NTIzNzlifScsICMgMi42LjRjMQorICAgICcyLjYuNDEyMic6J3s0Zjc2MDNjNi02MzUyLTQyOTktYTM5OC0xNTBhMzFiMTlhY2N9JywgIyAyLjYuNGMyCisgICAgJzIuNi40MTUwJzone2U3Mzk0YTBmLTNmODAtNDViMS04N2ZjLWFiY2Q1MTg5MzI0Nn0nLCAjIDIuNi40CisgICAgJzIuNi41MTIxJzone2UwZTI3M2Q3LTc1OTgtNDcwMS04MzI1LWM5MGMwNjlmZDVmZn0nLCAjIDIuNi41YzEKKyAgICAnMi42LjUxMjInOid7ZmEyMjdiNzYtMDY3MS00ZGM2LWI4MjYtYzJmZjJhNzBkZmQ1fScsICMgMi42LjVjMgorICAgICcyLjYuNTE1MCc6J3s0NzIzZjE5OS1mYTY0LTQyMzMtOGU2ZS05ZmNjYzk1YTE4ZWV9JywgIyAyLjYuNQorICAgICcyLjcuMTAxJzogJ3tlY2ExYmJlZi00MzJjLTQ5YWUtYTY2Ny1jMjEzY2M3YmJmMjJ9JywgIyAyLjdhMQorICAgICcyLjcuMTAyJzogJ3syMWNlMTZlZC03M2M0LTQ2MGQtOWIxMS01MjJmNDE3YjIwOTB9JywgIyAyLjdhMgorICAgICcyLjcuMTAzJzogJ3s2ZTdkYmQ1NS1iYTRhLTQ4YWMtYTY4OC02Yzc1ZGI0ZDc1MDB9JywgIyAyLjdhMworICAgICcyLjcuMTA0JzogJ3tlZTc3NGJhMy03NGE1LTQ4ZDktYjQyNS1iMzVhMjg3MjYwYzh9JywgIyAyLjdhNAorICAgICcyLjcuMTExJzogJ3s5Y2ZkOWVjNy1hOWM3LTQ5ODAtYTFjNi0wNTRmYzY0OTNlYjN9JywgIyAyLjdiMQorICAgICcyLjcuMTEyJzogJ3s5YTcyZmFmNi1jMzA0LTQxNjUtODU5NS05MjkxZmYzMGNhYzZ9JywgIyAyLjdiMgorICAgICcyLjcuMTIxJzogJ3tmNTMwYzk0YS1kZDUzLTRkZTktOTQ4ZS1iNjMyYjljYjQ4ZDJ9JywgIyAyLjdjMQorICAgICcyLjcuMTIyJzogJ3tmODA5MDVkMi1kZDhkLTRiOGUtOGE0MC1jMjNjOTNkY2EwN2R9JywgIyAyLjdjMgorICAgICcyLjcuMTUwJzogJ3syMGMzMTQzNS0yYTBhLTQ1ODAtYmU4Yi1hYzA2ZmMyNDNjYTR9JywgIyAyLjcuMAogICAgICczLjAuMTAxJzogJ3s4NTU0MjYzYS0zMjQyLTQ4NTctOTM1OS1hYTg3YmMyYzU4YzJ9JywgIyAzLjBhMQogICAgICczLjAuMTAyJzogJ3s2OTJkNmUyYy1mMGFjLTQwYjgtYTEzMy03MTkxYWVlYjY3Zjl9JywgIyAzLjBhMgogICAgICczLjAuMTAzJzogJ3s0OWNiMjk5NS03NTFhLTQ3NTMtYmU3YS1kMGIxYmI1ODVlMDZ9JywgIyAzLjBhMwpAQCAtNzcsNyArNzcsMTQgQEAKICAgICAnMy4xLjExNTAnOid7N2ZmOTA0NjAtODliNy00MzViLWI1ODMtYjM3YjI4MTVjY2M3fScsICMgMy4xLjEKICAgICAnMy4xLjIxMjEnOid7ZWM0NTYyNGEtMzc4Yy00M2JlLTkxZjMtM2Y3YTU5YjBkOTBjfScsICMgMy4xLjJjMQogICAgICczLjEuMjE1MCc6J3tkNDBhZjAxNi01MDZjLTQzZmItYTczOC1iZDU0ZmE4YzFlODV9JywgIyAzLjEuMgotICAgICczLjEuMzEyMSc6J3thMWU0MzZmOC05MmZjLTRkZGItYWYxOC1hMTI1MjljNTdhYWZ9JywgIyAzLjEuM3JjMQotICAgICczLjEuMzEyMic6J3syZmMxOTAyNi1hM2U1LTQ5M2UtOTJhMC1jMWYzYjRhMjcyYWV9JywgIyAzLjEuM3JjMgotICAgICczLjEuMzE1MCc6J3tmNzE5ZDhhNi00NmZjLTRkNzEtOTRjNi1mZmQxN2E4YzlmMzV9JywgIyAzLjEuMworICAgICczLjIuMTAxJyA6J3tiNDExZjE2OC03YTM2LTRmZmYtOTAyYy1hNTU0ZDFjNzhhNGZ9JywgIyAzLjJhMQorICAgICczLjIuMTAyJyA6J3s3OWZmNzNiNy04MzU5LTQxMGYtYjljNS0xNTJkMjAyNmY4Yzh9JywgIyAzLjJhMgorICAgICczLjIuMTAzJyA6J3tlNzYzNWM2NS1jMjIxLTRiOWItYjcwYS01NjExYjgzNjlkNzd9JywgIyAzLjJhMworICAgICczLjIuMTA0JyA6J3s3NDhjZDEzOS03NWI4LTRjYTgtOThhNy01ODI2MjI5ODE4MWV9JywgIyAzLjJhNAorICAgICczLjIuMTExJyA6J3syMGJmYzE2Zi1jN2NkLTRmYzAtOGY5Ni05OTE0NjE0YTNjNTB9JywgIyAzLjJiMQorICAgICczLjIuMTEyJyA6J3swZTM1MGM5OC04ZDczLTQ5OTMtYjY4Ni1jZmU4NzE2MDA0NmV9JywgIyAzLjJiMgorICAgICczLjIuMTIxJyA6J3syMDk0OTY4ZC03NTgzLTQ3ZjYtYTdmZC0yMjMwNDUzMmUwOWZ9JywgIyAzLjJyYzEKKyAgICAnMy4yLjEyMicgOid7NGYzZWRmYTYtY2Y3MC00NjlhLTgyNWYtZTEyMDZhYTdmNDEyfScsICMgMy4ycmMyCisgICAgJzMuMi4xMjMnIDonezkwYzY3M2Q3LThjZmQtNDk2OS05ODE2LWY3ZDcwYmFkODdmM30nLCAjIDMuMnJjMworICAgICczLjIuMTUwJyA6J3tiMjA0MmQ1ZS05ODZkLTQ0ZWMtYWVlMy1hZmU0MTA4Y2NjOTN9JywgIyAzLjIuMAogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFyc2VyL3Rlc3RfdW5wYXJzZS5weSBiL1Rvb2xzL3BhcnNlci90ZXN0X3VucGFyc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1NzUyMwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3BhcnNlci90ZXN0X3VucGFyc2UucHkKQEAgLTAsMCArMSwyNDAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCB0b2tlbml6ZQoraW1wb3J0IGFzdAoraW1wb3J0IHVucGFyc2UKKworZGVmIHJlYWRfcHlmaWxlKGZpbGVuYW1lKToKKyAgICAiIiJSZWFkIGFuZCByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGEgUHl0aG9uIHNvdXJjZSBmaWxlIChhcyBhCisgICAgc3RyaW5nKSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgZmlsZSBlbmNvZGluZy4iIiIKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIHB5ZmlsZToKKyAgICAgICAgZW5jb2RpbmcgPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcocHlmaWxlLnJlYWRsaW5lKVswXQorICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInIiLCBlbmNvZGluZz1lbmNvZGluZykgYXMgcHlmaWxlOgorICAgICAgICBzb3VyY2UgPSBweWZpbGUucmVhZCgpCisgICAgcmV0dXJuIHNvdXJjZQorCitmb3JfZWxzZSA9ICIiIlwKK2RlZiBmKCk6CisgICAgZm9yIHggaW4gcmFuZ2UoMTApOgorICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHkgPSAyCisgICAgeiA9IDMKKyIiIgorCit3aGlsZV9lbHNlID0gIiIiXAorZGVmIGcoKToKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBicmVhaworICAgIGVsc2U6CisgICAgICAgIHkgPSAyCisgICAgeiA9IDMKKyIiIgorCityZWxhdGl2ZV9pbXBvcnQgPSAiIiJcCitmcm9tIC4gaW1wb3J0IGZyZWQKK2Zyb20gLi4gaW1wb3J0IGJhcm5leQorZnJvbSAuYXVzdHJhbGlhIGltcG9ydCBzaHJpbXAgYXMgcHJhd25zCisiIiIKKworbm9ubG9jYWxfZXggPSAiIiJcCitkZWYgZigpOgorICAgIHggPSAxCisgICAgZGVmIGcoKToKKyAgICAgICAgbm9ubG9jYWwgeAorICAgICAgICB4ID0gMgorICAgICAgICB5ID0gNworICAgICAgICBkZWYgaCgpOgorICAgICAgICAgICAgbm9ubG9jYWwgeCwgeQorIiIiCisKKyMgYWxzbyBhY3RzIGFzIHRlc3QgZm9yICdleGNlcHQgLi4uIGFzIC4uLicKK3JhaXNlX2Zyb20gPSAiIiJcCit0cnk6CisgICAgMSAvIDAKK2V4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgIHJhaXNlIEFyaXRobWV0aWNFcnJvciBmcm9tIGUKKyIiIgorCitjbGFzc19kZWNvcmF0b3IgPSAiIiJcCitAZjEoYXJnKQorQGYyCitjbGFzcyBGb286IHBhc3MKKyIiIgorCitlbGlmMSA9ICIiIlwKK2lmIGNvbmQxOgorICAgIHN1aXRlMQorZWxpZiBjb25kMjoKKyAgICBzdWl0ZTIKK2Vsc2U6CisgICAgc3VpdGUzCisiIiIKKworZWxpZjIgPSAiIiJcCitpZiBjb25kMToKKyAgICBzdWl0ZTEKK2VsaWYgY29uZDI6CisgICAgc3VpdGUyCisiIiIKKwordHJ5X2V4Y2VwdF9maW5hbGx5ID0gIiIiXAordHJ5OgorICAgIHN1aXRlMQorZXhjZXB0IGV4MToKKyAgICBzdWl0ZTIKK2V4Y2VwdCBleDI6CisgICAgc3VpdGUzCitlbHNlOgorICAgIHN1aXRlNAorZmluYWxseToKKyAgICBzdWl0ZTUKKyIiIgorCitjbGFzcyBBU1RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGFzc2VydEFTVEVxdWFsKHNlbGYsIGFzdDEsIGFzdDIpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzdC5kdW1wKGFzdDEpLCBhc3QuZHVtcChhc3QyKSkKKworICAgIGRlZiBjaGVja19yb3VuZHRyaXAoc2VsZiwgY29kZTEsIGZpbGVuYW1lPSJpbnRlcm5hbCIpOgorICAgICAgICBhc3QxID0gY29tcGlsZShjb2RlMSwgZmlsZW5hbWUsICJleGVjIiwgYXN0LlB5Q0ZfT05MWV9BU1QpCisgICAgICAgIHVucGFyc2VfYnVmZmVyID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB1bnBhcnNlLlVucGFyc2VyKGFzdDEsIHVucGFyc2VfYnVmZmVyKQorICAgICAgICBjb2RlMiA9IHVucGFyc2VfYnVmZmVyLmdldHZhbHVlKCkKKyAgICAgICAgYXN0MiA9IGNvbXBpbGUoY29kZTIsIGZpbGVuYW1lLCAiZXhlYyIsIGFzdC5QeUNGX09OTFlfQVNUKQorICAgICAgICBzZWxmLmFzc2VydEFTVEVxdWFsKGFzdDEsIGFzdDIpCisKK2NsYXNzIFVucGFyc2VUZXN0Q2FzZShBU1RUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3Igc3BlY2lmaWMgYnVncyBmb3VuZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIHVucGFyc2UKKworICAgIGRlZiB0ZXN0X2RlbF9zdGF0ZW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWwgeCwgeSwgeiIpCisKKyAgICBkZWYgdGVzdF9zaGlmdHMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCI0NSA8PCAyIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjEzID4+IDciKQorCisgICAgZGVmIHRlc3RfZm9yX2Vsc2Uoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGZvcl9lbHNlKQorCisgICAgZGVmIHRlc3Rfd2hpbGVfZWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAod2hpbGVfZWxzZSkKKworICAgIGRlZiB0ZXN0X3VuYXJ5X3BhcmVucyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIigtMSkqKjciKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiKC0xLikqKjgiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiKC0xaikqKjYiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgibm90IFRydWUgb3IgRmFsc2UiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiVHJ1ZSBvciBub3QgRmFsc2UiKQorCisgICAgZGVmIHRlc3RfaW50ZWdlcl9wYXJlbnMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIzIC5fX2Fic19fKCkiKQorCisgICAgZGVmIHRlc3RfaHVnZV9mbG9hdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjFlMTAwMCIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCItMWUxMDAwIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjFlMTAwMGoiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTFlMTAwMGoiKQorCisgICAgZGVmIHRlc3RfbWluX2ludChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc3RyKC0yKiozMSkpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHN0cigtMioqNjMpKQorCisgICAgZGVmIHRlc3RfaW1hZ2luYXJ5X2xpdGVyYWxzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiN2oiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiLTdqIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjBqIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIi0waiIpCisKKyAgICBkZWYgdGVzdF9sYW1iZGFfcGFyZW50aGVzZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCIobGFtYmRhOiBpbnQpKCkiKQorCisgICAgZGVmIHRlc3RfY2hhaW5lZF9jb21wYXJpc29ucyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIjEgPCA0IDw9IDUiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiYSBpcyBiIGlzIGMgaXMgbm90IGQiKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZihhKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZihiID0gMik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYSwgYik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYSwgYiA9IDIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGEgPSA1LCBiID0gMik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoKiwgYSA9IDEsIGIgPSAyKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZigqLCBhID0gMSwgYik6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoKiwgYSwgYiA9IDIpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGEsIGIgPSBOb25lLCAqLCBjLCAqKmt3ZHMpOiBwYXNzIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoImRlZiBmKGE9MiwgKmFyZ3MsIGM9NSwgZCwgKiprd2RzKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZigqYXJncywgKiprd2FyZ3MpOiBwYXNzIikKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAocmVsYXRpdmVfaW1wb3J0KQorCisgICAgZGVmIHRlc3Rfbm9ubG9jYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKG5vbmxvY2FsX2V4KQorCisgICAgZGVmIHRlc3RfcmFpc2VfZnJvbShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAocmFpc2VfZnJvbSkKKworICAgIGRlZiB0ZXN0X2J5dGVzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiYicxMjMnIikKKworICAgIGRlZiB0ZXN0X2Fubm90YXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYSA6IGludCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoYTogaW50ID0gNSk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoKmFyZ3M6IFtpbnRdKTogcGFzcyIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJkZWYgZigqKmt3YXJnczogZGljdCk6IHBhc3MiKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiZGVmIGYoKSAtPiBOb25lOiBwYXNzIikKKworICAgIGRlZiB0ZXN0X3NldF9saXRlcmFsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgieydhJywgJ2InLCAnYyd9IikKKworICAgIGRlZiB0ZXN0X3NldF9jb21wcmVoZW5zaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgie3ggZm9yIHggaW4gcmFuZ2UoNSl9IikKKworICAgIGRlZiB0ZXN0X2RpY3RfY29tcHJlaGVuc2lvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoInt4OiB4KnggZm9yIHggaW4gcmFuZ2UoMTApfSIpCisKKyAgICBkZWYgdGVzdF9jbGFzc19kZWNvcmF0b3JzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcChjbGFzc19kZWNvcmF0b3IpCisKKyAgICBkZWYgdGVzdF9jbGFzc19kZWZpbml0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiY2xhc3MgQShtZXRhY2xhc3M9dHlwZSwgKltdLCAqKnt9KTogcGFzcyIpCisKKyAgICBkZWYgdGVzdF9lbGlmcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoZWxpZjEpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGVsaWYyKQorCisgICAgZGVmIHRlc3RfdHJ5X2V4Y2VwdF9maW5hbGx5KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCh0cnlfZXhjZXB0X2ZpbmFsbHkpCisKK2NsYXNzIERpcmVjdG9yeVRlc3RDYXNlKEFTVFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHJvdW5kdHJpcCBiZWhhdmlvdXIgb24gYWxsIGZpbGVzIGluIExpYiBhbmQgTGliL3Rlc3QuIiIiCisKKyAgICAjIHRlc3QgZGlyZWN0b3JpZXMsIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBkaXN0cmlidXRpb24KKyAgICB0ZXN0X2RpcmVjdG9yaWVzID0gJ0xpYicsIG9zLnBhdGguam9pbignTGliJywgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3RfZmlsZXMoc2VsZik6CisgICAgICAgICMgZ2V0IG5hbWVzIG9mIGZpbGVzIHRvIHRlc3QKKyAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCBvcy5wYXJkaXIpCisKKyAgICAgICAgbmFtZXMgPSBbXQorICAgICAgICBmb3IgZCBpbiBzZWxmLnRlc3RfZGlyZWN0b3JpZXM6CisgICAgICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0X2RpciwgZCkKKyAgICAgICAgICAgIGZvciBuIGluIG9zLmxpc3RkaXIodGVzdF9kaXIpOgorICAgICAgICAgICAgICAgIGlmIG4uZW5kc3dpdGgoJy5weScpIGFuZCBub3Qgbi5zdGFydHN3aXRoKCdiYWQnKToKKyAgICAgICAgICAgICAgICAgICAgbmFtZXMuYXBwZW5kKG9zLnBhdGguam9pbih0ZXN0X2RpciwgbikpCisKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgdGVzdC5zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgJXMnICUgZmlsZW5hbWUpCisgICAgICAgICAgICBzb3VyY2UgPSByZWFkX3B5ZmlsZShmaWxlbmFtZSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKHNvdXJjZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChVbnBhcnNlVGVzdENhc2UsIERpcmVjdG9yeVRlc3RDYXNlKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9EZW1vL3BhcnNlci91bnBhcnNlLnB5IGIvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKc2ltaWxhcml0eSBpbmRleCA2OSUKcmVuYW1lIGZyb20gRGVtby9wYXJzZXIvdW5wYXJzZS5weQpyZW5hbWUgdG8gVG9vbHMvcGFyc2VyL3VucGFyc2UucHkKaW5kZXggZDUzYTZjNC4uZTk2ZWY1NCAxMDA2NDQKLS0tIGEvRGVtby9wYXJzZXIvdW5wYXJzZS5weQorKysgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMSw5ICsxLDE1IEBACiAiVXNhZ2U6IHVucGFyc2UucHkgPHBhdGggdG8gc291cmNlIGZpbGU+IgogaW1wb3J0IHN5cwotaW1wb3J0IF9hc3QKK2ltcG9ydCBtYXRoCitpbXBvcnQgYXN0CitpbXBvcnQgdG9rZW5pemUKIGltcG9ydCBpbwogaW1wb3J0IG9zCiAKKyMgTGFyZ2UgZmxvYXQgYW5kIGltYWdpbmFyeSBsaXRlcmFscyBnZXQgdHVybmVkIGludG8gaW5maW5pdGllcyBpbiB0aGUgQVNULgorIyBXZSB1bnBhcnNlIHRob3NlIGluZmluaXRpZXMgdG8gSU5GU1RSLgorSU5GU1RSID0gIjFlIiArIHJlcHIoc3lzLmZsb2F0X2luZm8ubWF4XzEwX2V4cCArIDEpCisKIGRlZiBpbnRlcmxlYXZlKGludGVyLCBmLCBzZXEpOgogICAgICIiIkNhbGwgZiBvbiBlYWNoIGl0ZW0gaW4gc2VxLCBjYWxsaW5nIGludGVyKCkgaW4gYmV0d2Vlbi4KICAgICAiIiIKQEAgLTIwLDcgKzI2LDcgQEAKIGNsYXNzIFVucGFyc2VyOgogICAgICIiIk1ldGhvZHMgaW4gdGhpcyBjbGFzcyByZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBBU1QgYW5kCiAgICAgb3V0cHV0IHNvdXJjZSBjb2RlIGZvciB0aGUgYWJzdHJhY3Qgc3ludGF4OyBvcmlnaW5hbCBmb3JtYXR0aW5nCi0gICAgaXMgZGlzcmVnYXJnZWQuICIiIgorICAgIGlzIGRpc3JlZ2FyZGVkLiAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmVlLCBmaWxlID0gc3lzLnN0ZG91dCk6CiAgICAgICAgICIiIlVucGFyc2VyKHRyZWUsIGZpbGU9c3lzLnN0ZG91dCkgLT4gTm9uZS4KQEAgLTgwLDEwICs4NiwxMSBAQAogCiAgICAgZGVmIF9JbXBvcnRGcm9tKHNlbGYsIHQpOgogICAgICAgICBzZWxmLmZpbGwoImZyb20gIikKLSAgICAgICAgc2VsZi53cml0ZSh0Lm1vZHVsZSkKKyAgICAgICAgc2VsZi53cml0ZSgiLiIgKiB0LmxldmVsKQorICAgICAgICBpZiB0Lm1vZHVsZToKKyAgICAgICAgICAgIHNlbGYud3JpdGUodC5tb2R1bGUpCiAgICAgICAgIHNlbGYud3JpdGUoIiBpbXBvcnQgIikKICAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQubmFtZXMpCi0gICAgICAgICMgWFhYKGpwZSkgd2hhdCBpcyBsZXZlbCBmb3I/CiAKICAgICBkZWYgX0Fzc2lnbihzZWxmLCB0KToKICAgICAgICAgc2VsZi5maWxsKCkKQEAgLTExNSw3ICsxMjIsNyBAQAogCiAgICAgZGVmIF9EZWxldGUoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgiZGVsICIpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2godC50YXJnZXRzKQorICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgc2VsZi5kaXNwYXRjaCwgdC50YXJnZXRzKQogCiAgICAgZGVmIF9Bc3NlcnQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgiYXNzZXJ0ICIpCkBAIC0xMjQsMjQgKzEzMSwxNCBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiLCAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm1zZykKIAotICAgIGRlZiBfUHJpbnQoc2VsZiwgdCk6Ci0gICAgICAgIHNlbGYuZmlsbCgicHJpbnQgIikKLSAgICAgICAgZG9fY29tbWEgPSBGYWxzZQotICAgICAgICBpZiB0LmRlc3Q6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKCI+PiIpCi0gICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuZGVzdCkKLSAgICAgICAgICAgIGRvX2NvbW1hID0gVHJ1ZQotICAgICAgICBmb3IgZSBpbiB0LnZhbHVlczoKLSAgICAgICAgICAgIGlmIGRvX2NvbW1hOnNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIGVsc2U6ZG9fY29tbWE9VHJ1ZQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChlKQotICAgICAgICBpZiBub3QgdC5ubDoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIiwiKQotCiAgICAgZGVmIF9HbG9iYWwoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgiZ2xvYmFsICIpCiAgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCBzZWxmLndyaXRlLCB0Lm5hbWVzKQogCisgICAgZGVmIF9Ob25sb2NhbChzZWxmLCB0KToKKyAgICAgICAgc2VsZi5maWxsKCJub25sb2NhbCAiKQorICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgc2VsZi53cml0ZSwgdC5uYW1lcykKKwogICAgIGRlZiBfWWllbGQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIigiKQogICAgICAgICBzZWxmLndyaXRlKCJ5aWVsZCIpCkBAIC0xNTEsMTUgKzE0OCwxNSBAQAogICAgICAgICBzZWxmLndyaXRlKCIpIikKIAogICAgIGRlZiBfUmFpc2Uoc2VsZiwgdCk6Ci0gICAgICAgIHNlbGYuZmlsbCgncmFpc2UgJykKLSAgICAgICAgaWYgdC50eXBlOgotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnR5cGUpCi0gICAgICAgIGlmIHQuaW5zdDoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5pbnN0KQotICAgICAgICBpZiB0LnRiYWNrOgotICAgICAgICAgICAgc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnRiYWNrKQorICAgICAgICBzZWxmLmZpbGwoInJhaXNlIikKKyAgICAgICAgaWYgbm90IHQuZXhjOgorICAgICAgICAgICAgYXNzZXJ0IG5vdCB0LmNhdXNlCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi53cml0ZSgiICIpCisgICAgICAgIHNlbGYuZGlzcGF0Y2godC5leGMpCisgICAgICAgIGlmIHQuY2F1c2U6CisgICAgICAgICAgICBzZWxmLndyaXRlKCIgZnJvbSAiKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmNhdXNlKQogCiAgICAgZGVmIF9UcnlFeGNlcHQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgidHJ5IikKQEAgLTE3NiwxMCArMTczLDE0IEBACiAgICAgICAgICAgICBzZWxmLmxlYXZlKCkKIAogICAgIGRlZiBfVHJ5RmluYWxseShzZWxmLCB0KToKLSAgICAgICAgc2VsZi5maWxsKCJ0cnkiKQotICAgICAgICBzZWxmLmVudGVyKCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCi0gICAgICAgIHNlbGYubGVhdmUoKQorICAgICAgICBpZiBsZW4odC5ib2R5KSA9PSAxIGFuZCBpc2luc3RhbmNlKHQuYm9keVswXSwgYXN0LlRyeUV4Y2VwdCk6CisgICAgICAgICAgICAjIHRyeS1leGNlcHQtZmluYWxseQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZpbGwoInRyeSIpCisgICAgICAgICAgICBzZWxmLmVudGVyKCkKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQorICAgICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICAgICAgc2VsZi5maWxsKCJmaW5hbGx5IikKICAgICAgICAgc2VsZi5lbnRlcigpCkBAIC0xOTIsMjEgKzE5Myw0MCBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiICIpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudHlwZSkKICAgICAgICAgaWYgdC5uYW1lOgotICAgICAgICAgICAgc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm5hbWUpCisgICAgICAgICAgICBzZWxmLndyaXRlKCIgYXMgIikKKyAgICAgICAgICAgIHNlbGYud3JpdGUodC5uYW1lKQogICAgICAgICBzZWxmLmVudGVyKCkKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCiAgICAgICAgIHNlbGYubGVhdmUoKQogCiAgICAgZGVmIF9DbGFzc0RlZihzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSgiXG4iKQorICAgICAgICBmb3IgZGVjbyBpbiB0LmRlY29yYXRvcl9saXN0OgorICAgICAgICAgICAgc2VsZi5maWxsKCJAIikKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2goZGVjbykKICAgICAgICAgc2VsZi5maWxsKCJjbGFzcyAiK3QubmFtZSkKLSAgICAgICAgaWYgdC5iYXNlczoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIigiKQotICAgICAgICAgICAgZm9yIGEgaW4gdC5iYXNlczoKLSAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGEpCi0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKSIpCisgICAgICAgIHNlbGYud3JpdGUoIigiKQorICAgICAgICBjb21tYSA9IEZhbHNlCisgICAgICAgIGZvciBlIGluIHQuYmFzZXM6CisgICAgICAgICAgICBpZiBjb21tYTogc2VsZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZWxzZTogY29tbWEgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGUpCisgICAgICAgIGZvciBlIGluIHQua2V5d29yZHM6CisgICAgICAgICAgICBpZiBjb21tYTogc2VsZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZWxzZTogY29tbWEgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGUpCisgICAgICAgIGlmIHQuc3RhcmFyZ3M6CisgICAgICAgICAgICBpZiBjb21tYTogc2VsZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZWxzZTogY29tbWEgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndyaXRlKCIqIikKKyAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5zdGFyYXJncykKKyAgICAgICAgaWYgdC5rd2FyZ3M6CisgICAgICAgICAgICBpZiBjb21tYTogc2VsZi53cml0ZSgiLCAiKQorICAgICAgICAgICAgZWxzZTogY29tbWEgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndyaXRlKCIqKiIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmdzKQorICAgICAgICBzZWxmLndyaXRlKCIpIikKKwogICAgICAgICBzZWxmLmVudGVyKCkKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCiAgICAgICAgIHNlbGYubGVhdmUoKQpAQCAtMjE5LDYgKzIzOSw5IEBACiAgICAgICAgIHNlbGYuZmlsbCgiZGVmICIrdC5uYW1lICsgIigiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYXJncykKICAgICAgICAgc2VsZi53cml0ZSgiKSIpCisgICAgICAgIGlmIHQucmV0dXJuczoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIiAtPiAiKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnJldHVybnMpCiAgICAgICAgIHNlbGYuZW50ZXIoKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKICAgICAgICAgc2VsZi5sZWF2ZSgpCkBAIC0yMzUsMTUgKzI1OCwyNCBAQAogICAgICAgICAgICAgc2VsZi5maWxsKCJlbHNlIikKICAgICAgICAgICAgIHNlbGYuZW50ZXIoKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9yZWxzZSkKLSAgICAgICAgICAgIHNlbGYubGVhdmUKKyAgICAgICAgICAgIHNlbGYubGVhdmUoKQogCiAgICAgZGVmIF9JZihzZWxmLCB0KToKICAgICAgICAgc2VsZi5maWxsKCJpZiAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGVzdCkKICAgICAgICAgc2VsZi5lbnRlcigpCi0gICAgICAgICMgWFhYIGVsaWY/CiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5ib2R5KQogICAgICAgICBzZWxmLmxlYXZlKCkKKyAgICAgICAgIyBjb2xsYXBzZSBuZXN0ZWQgaWZzIGludG8gZXF1aXZhbGVudCBlbGlmcy4KKyAgICAgICAgd2hpbGUgKHQub3JlbHNlIGFuZCBsZW4odC5vcmVsc2UpID09IDEgYW5kCisgICAgICAgICAgICAgICBpc2luc3RhbmNlKHQub3JlbHNlWzBdLCBhc3QuSWYpKToKKyAgICAgICAgICAgIHQgPSB0Lm9yZWxzZVswXQorICAgICAgICAgICAgc2VsZi5maWxsKCJlbGlmICIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudGVzdCkKKyAgICAgICAgICAgIHNlbGYuZW50ZXIoKQorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmJvZHkpCisgICAgICAgICAgICBzZWxmLmxlYXZlKCkKKyAgICAgICAgIyBmaW5hbCBlbHNlCiAgICAgICAgIGlmIHQub3JlbHNlOgogICAgICAgICAgICAgc2VsZi5maWxsKCJlbHNlIikKICAgICAgICAgICAgIHNlbGYuZW50ZXIoKQpAQCAtMjYwLDcgKzI5Miw3IEBACiAgICAgICAgICAgICBzZWxmLmZpbGwoImVsc2UiKQogICAgICAgICAgICAgc2VsZi5lbnRlcigpCiAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3JlbHNlKQotICAgICAgICAgICAgc2VsZi5sZWF2ZQorICAgICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICBkZWYgX1dpdGgoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYuZmlsbCgid2l0aCAiKQpAQCAtMjczLDE5ICszMDUsMTggQEAKICAgICAgICAgc2VsZi5sZWF2ZSgpCiAKICAgICAjIGV4cHIKKyAgICBkZWYgX0J5dGVzKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5zKSkKKwogICAgIGRlZiBfU3RyKHNlbGYsIHRyZWUpOgogICAgICAgICBzZWxmLndyaXRlKHJlcHIodHJlZS5zKSkKIAogICAgIGRlZiBfTmFtZShzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmlkKQogCi0gICAgZGVmIF9SZXByKHNlbGYsIHQpOgotICAgICAgICBzZWxmLndyaXRlKCJgIikKLSAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhbHVlKQotICAgICAgICBzZWxmLndyaXRlKCJgIikKLQogICAgIGRlZiBfTnVtKHNlbGYsIHQpOgotICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKSkKKyAgICAgICAgIyBTdWJzdGl0dXRlIG92ZXJmbG93aW5nIGRlY2ltYWwgbGl0ZXJhbCBmb3IgQVNUIGluZmluaXRpZXMuCisgICAgICAgIHNlbGYud3JpdGUocmVwcih0Lm4pLnJlcGxhY2UoImluZiIsIElORlNUUikpCiAKICAgICBkZWYgX0xpc3Qoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoIlsiKQpAQCAtMzA2LDYgKzMzNywyMiBAQAogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChnZW4pCiAgICAgICAgIHNlbGYud3JpdGUoIikiKQogCisgICAgZGVmIF9TZXRDb21wKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmVsdCkKKyAgICAgICAgZm9yIGdlbiBpbiB0LmdlbmVyYXRvcnM6CisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGdlbikKKyAgICAgICAgc2VsZi53cml0ZSgifSIpCisKKyAgICBkZWYgX0RpY3RDb21wKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgc2VsZi5kaXNwYXRjaCh0LmtleSkKKyAgICAgICAgc2VsZi53cml0ZSgiOiAiKQorICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFsdWUpCisgICAgICAgIGZvciBnZW4gaW4gdC5nZW5lcmF0b3JzOgorICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChnZW4pCisgICAgICAgIHNlbGYud3JpdGUoIn0iKQorCiAgICAgZGVmIF9jb21wcmVoZW5zaW9uKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCIgZm9yICIpCiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC50YXJnZXQpCkBAIC0zMjQsMTQgKzM3MSwyMCBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQub3JlbHNlKQogICAgICAgICBzZWxmLndyaXRlKCIpIikKIAorICAgIGRlZiBfU2V0KHNlbGYsIHQpOgorICAgICAgICBhc3NlcnQodC5lbHRzKSAjIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgZWxlbWVudAorICAgICAgICBzZWxmLndyaXRlKCJ7IikKKyAgICAgICAgaW50ZXJsZWF2ZShsYW1iZGE6IHNlbGYud3JpdGUoIiwgIiksIHNlbGYuZGlzcGF0Y2gsIHQuZWx0cykKKyAgICAgICAgc2VsZi53cml0ZSgifSIpCisKICAgICBkZWYgX0RpY3Qoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUoInsiKQotICAgICAgICBkZWYgd3JpdGVtKHh4eF90b2RvX2NoYW5nZW1lKToKLSAgICAgICAgICAgIChrLCB2KSA9IHh4eF90b2RvX2NoYW5nZW1lCisgICAgICAgIGRlZiB3cml0ZV9wYWlyKHBhaXIpOgorICAgICAgICAgICAgKGssIHYpID0gcGFpcgogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChrKQogICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh2KQotICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgiLCAiKSwgd3JpdGVtLCB6aXAodC5rZXlzLCB0LnZhbHVlcykpCisgICAgICAgIGludGVybGVhdmUobGFtYmRhOiBzZWxmLndyaXRlKCIsICIpLCB3cml0ZV9wYWlyLCB6aXAodC5rZXlzLCB0LnZhbHVlcykpCiAgICAgICAgIHNlbGYud3JpdGUoIn0iKQogCiAgICAgZGVmIF9UdXBsZShzZWxmLCB0KToKQEAgLTM0NiwxMyArMzk5LDE0IEBACiAKICAgICB1bm9wID0geyJJbnZlcnQiOiJ+IiwgIk5vdCI6ICJub3QiLCAiVUFkZCI6IisiLCAiVVN1YiI6Ii0ifQogICAgIGRlZiBfVW5hcnlPcChzZWxmLCB0KToKLSAgICAgICAgc2VsZi53cml0ZShzZWxmLnVub3BbdC5vcC5fX2NsYXNzX18uX19uYW1lX19dKQogICAgICAgICBzZWxmLndyaXRlKCIoIikKKyAgICAgICAgc2VsZi53cml0ZShzZWxmLnVub3BbdC5vcC5fX2NsYXNzX18uX19uYW1lX19dKQorICAgICAgICBzZWxmLndyaXRlKCIgIikKICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lm9wZXJhbmQpCiAgICAgICAgIHNlbGYud3JpdGUoIikiKQogCiAgICAgYmlub3AgPSB7ICJBZGQiOiIrIiwgIlN1YiI6Ii0iLCAiTXVsdCI6IioiLCAiRGl2IjoiLyIsICJNb2QiOiIlIiwKLSAgICAgICAgICAgICAgICAgICAgIkxTaGlmdCI6Ij4+IiwgIlJTaGlmdCI6Ijw8IiwgIkJpdE9yIjoifCIsICJCaXRYb3IiOiJeIiwgIkJpdEFuZCI6IiYiLAorICAgICAgICAgICAgICAgICAgICAiTFNoaWZ0IjoiPDwiLCAiUlNoaWZ0IjoiPj4iLCAiQml0T3IiOiJ8IiwgIkJpdFhvciI6Il4iLCAiQml0QW5kIjoiJiIsCiAgICAgICAgICAgICAgICAgICAgICJGbG9vckRpdiI6Ii8vIiwgIlBvdyI6ICIqKiJ9CiAgICAgZGVmIF9CaW5PcChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSgiKCIpCkBAIC0zNjksOSArNDIzLDkgQEAKICAgICAgICAgZm9yIG8sIGUgaW4gemlwKHQub3BzLCB0LmNvbXBhcmF0b3JzKToKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiAiICsgc2VsZi5jbXBvcHNbby5fX2NsYXNzX18uX19uYW1lX19dICsgIiAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChlKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKSIpCisgICAgICAgIHNlbGYud3JpdGUoIikiKQogCi0gICAgYm9vbG9wcyA9IHtfYXN0LkFuZDogJ2FuZCcsIF9hc3QuT3I6ICdvcid9CisgICAgYm9vbG9wcyA9IHthc3QuQW5kOiAnYW5kJywgYXN0Lk9yOiAnb3InfQogICAgIGRlZiBfQm9vbE9wKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKCIoIikKICAgICAgICAgcyA9ICIgJXMgIiAlIHNlbGYuYm9vbG9wc1t0Lm9wLl9fY2xhc3NfX10KQEAgLTM4MCw2ICs0MzQsMTEgQEAKIAogICAgIGRlZiBfQXR0cmlidXRlKHNlbGYsdCk6CiAgICAgICAgIHNlbGYuZGlzcGF0Y2godC52YWx1ZSkKKyAgICAgICAgIyBTcGVjaWFsIGNhc2U6IDMuX19hYnNfXygpIGlzIGEgc3ludGF4IGVycm9yLCBzbyBpZiB0LnZhbHVlCisgICAgICAgICMgaXMgYW4gaW50ZWdlciBsaXRlcmFsIHRoZW4gd2UgbmVlZCB0byBlaXRoZXIgcGFyZW50aGVzaXplCisgICAgICAgICMgaXQgb3IgYWRkIGFuIGV4dHJhIHNwYWNlIHRvIGdldCAzIC5fX2Fic19fKCkuCisgICAgICAgIGlmIGlzaW5zdGFuY2UodC52YWx1ZSwgYXN0Lk51bSkgYW5kIGlzaW5zdGFuY2UodC52YWx1ZS5uLCBpbnQpOgorICAgICAgICAgICAgc2VsZi53cml0ZSgiICIpCiAgICAgICAgIHNlbGYud3JpdGUoIi4iKQogICAgICAgICBzZWxmLndyaXRlKHQuYXR0cikKIApAQCAtNDMzLDI4ICs0OTIsNTUgQEAKICAgICBkZWYgX0V4dFNsaWNlKHNlbGYsIHQpOgogICAgICAgICBpbnRlcmxlYXZlKGxhbWJkYTogc2VsZi53cml0ZSgnLCAnKSwgc2VsZi5kaXNwYXRjaCwgdC5kaW1zKQogCisgICAgIyBhcmd1bWVudAorICAgIGRlZiBfYXJnKHNlbGYsIHQpOgorICAgICAgICBzZWxmLndyaXRlKHQuYXJnKQorICAgICAgICBpZiB0LmFubm90YXRpb246CisgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCisgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYW5ub3RhdGlvbikKKwogICAgICMgb3RoZXJzCiAgICAgZGVmIF9hcmd1bWVudHMoc2VsZiwgdCk6CiAgICAgICAgIGZpcnN0ID0gVHJ1ZQotICAgICAgICBub25EZWYgPSBsZW4odC5hcmdzKS1sZW4odC5kZWZhdWx0cykKLSAgICAgICAgZm9yIGEgaW4gdC5hcmdzWzA6bm9uRGVmXToKKyAgICAgICAgIyBub3JtYWwgYXJndW1lbnRzCisgICAgICAgIGRlZmF1bHRzID0gW05vbmVdICogKGxlbih0LmFyZ3MpIC0gbGVuKHQuZGVmYXVsdHMpKSArIHQuZGVmYXVsdHMKKyAgICAgICAgZm9yIGEsIGQgaW4gemlwKHQuYXJncywgZGVmYXVsdHMpOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQogICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChhKQotICAgICAgICBmb3IgYSxkIGluIHppcCh0LmFyZ3Nbbm9uRGVmOl0sIHQuZGVmYXVsdHMpOgorICAgICAgICAgICAgaWYgZDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI9IikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGQpCisKKyAgICAgICAgIyB2YXJhcmdzLCBvciBiYXJlICcqJyBpZiBubyB2YXJhcmdzIGJ1dCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzIHByZXNlbnQKKyAgICAgICAgaWYgdC52YXJhcmcgb3IgdC5rd29ubHlhcmdzOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChhKSwKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIj0iKQotICAgICAgICAgICAgc2VsZi5kaXNwYXRjaChkKQotICAgICAgICBpZiB0LnZhcmFyZzoKLSAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKLSAgICAgICAgICAgIHNlbGYud3JpdGUoIioiK3QudmFyYXJnKQorICAgICAgICAgICAgc2VsZi53cml0ZSgiKiIpCisgICAgICAgICAgICBpZiB0LnZhcmFyZzoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKHQudmFyYXJnKQorICAgICAgICAgICAgICAgIGlmIHQudmFyYXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnYW5ub3RhdGlvbikKKworICAgICAgICAjIGtleXdvcmQtb25seSBhcmd1bWVudHMKKyAgICAgICAgaWYgdC5rd29ubHlhcmdzOgorICAgICAgICAgICAgZm9yIGEsIGQgaW4gemlwKHQua3dvbmx5YXJncywgdC5rd19kZWZhdWx0cyk6CisgICAgICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGEpLAorICAgICAgICAgICAgICAgIGlmIGQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoIj0iKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKGQpCisKKyAgICAgICAgIyBrd2FyZ3MKICAgICAgICAgaWYgdC5rd2FyZzoKICAgICAgICAgICAgIGlmIGZpcnN0OmZpcnN0ID0gRmFsc2UKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnKQorICAgICAgICAgICAgaWYgdC5rd2FyZ2Fubm90YXRpb246CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQorICAgICAgICAgICAgICAgIHNlbGYuZGlzcGF0Y2godC5rd2FyZ2Fubm90YXRpb24pCiAKICAgICBkZWYgX2tleXdvcmQoc2VsZiwgdCk6CiAgICAgICAgIHNlbGYud3JpdGUodC5hcmcpCkBAIC00NjIsMTAgKzU0OCwxMiBAQAogICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFsdWUpCiAKICAgICBkZWYgX0xhbWJkYShzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZSgiKCIpCiAgICAgICAgIHNlbGYud3JpdGUoImxhbWJkYSAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYXJncykKICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQogICAgICAgICBzZWxmLmRpc3BhdGNoKHQuYm9keSkKKyAgICAgICAgc2VsZi53cml0ZSgiKSIpCiAKICAgICBkZWYgX2FsaWFzKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQubmFtZSkKQEAgLTQ3Myw4ICs1NjEsMTEgQEAKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiBhcyAiK3QuYXNuYW1lKQogCiBkZWYgcm91bmR0cmlwKGZpbGVuYW1lLCBvdXRwdXQ9c3lzLnN0ZG91dCk6Ci0gICAgc291cmNlID0gb3BlbihmaWxlbmFtZSkucmVhZCgpCi0gICAgdHJlZSA9IGNvbXBpbGUoc291cmNlLCBmaWxlbmFtZSwgImV4ZWMiLCBfYXN0LlB5Q0ZfT05MWV9BU1QpCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBweWZpbGU6CisgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHB5ZmlsZS5yZWFkbGluZSlbMF0KKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIHB5ZmlsZToKKyAgICAgICAgc291cmNlID0gcHlmaWxlLnJlYWQoKQorICAgIHRyZWUgPSBjb21waWxlKHNvdXJjZSwgZmlsZW5hbWUsICJleGVjIiwgYXN0LlB5Q0ZfT05MWV9BU1QpCiAgICAgVW5wYXJzZXIodHJlZSwgb3V0cHV0KQogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weSBiL1Rvb2xzL3B5YmVuY2gvcHliZW5jaC5weQppbmRleCA5ZjFlMmU0Li44ZWFhZDYzIDEwMDc1NQotLS0gYS9Ub29scy9weWJlbmNoL3B5YmVuY2gucHkKKysrIGIvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5CkBAIC0yMjgsNyArMjI4LDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdhdCBsZWFzdCBvbmUgY2FsaWJyYXRpb24gcnVuIGlzIHJlcXVpcmVkJykKICAgICAgICAgICAgIHNlbGYuY2FsaWJyYXRpb25fcnVucyA9IGNhbGlicmF0aW9uX3J1bnMKICAgICAgICAgaWYgdGltZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lciA9IHRpbWVyCisgICAgICAgICAgICBzZWxmLnRpbWVyID0gdGltZXIKIAogICAgICAgICAjIEluaXQgdmFyaWFibGVzCiAgICAgICAgIHNlbGYudGltZXMgPSBbXQpkaWZmIC0tZ2l0IGEvVG9vbHMvcHluY2hlL0NoaXBWaWV3ZXIucHkgYi9Ub29scy9weW5jaGUvQ2hpcFZpZXdlci5weQppbmRleCBmNTlhYTI4Li43ODEzOWY4IDEwMDY0NAotLS0gYS9Ub29scy9weW5jaGUvQ2hpcFZpZXdlci5weQorKysgYi9Ub29scy9weW5jaGUvQ2hpcFZpZXdlci5weQpAQCAtMTMsNyArMTMsNyBAQAogc2VsZWN0ZWQgYW5kIG5lYXJlc3QgQ2hpcFdpZGdldHMuCiAiIiIKIAotZnJvbSBUa2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGltcG9ydCBDb2xvckRCCiAKIAwKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9EZXRhaWxzVmlld2VyLnB5IGIvVG9vbHMvcHluY2hlL0RldGFpbHNWaWV3ZXIucHkKaW5kZXggMTFhOTlhNi4uZmRjNzliNyAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL0RldGFpbHNWaWV3ZXIucHkKKysrIGIvVG9vbHMvcHluY2hlL0RldGFpbHNWaWV3ZXIucHkKQEAgLTUyLDcgKzUyLDcgQEAKIFNoaWZ0ICsgUmlnaHQgPT0gKzI1CiAiIiIKIAotZnJvbSBUa2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIAogU1RPUCA9ICdTdG9wJwogV1JBUCA9ICdXcmFwIEFyb3VuZCcKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9MaXN0Vmlld2VyLnB5IGIvVG9vbHMvcHluY2hlL0xpc3RWaWV3ZXIucHkKaW5kZXggMjEzY2QwOC4uYjE4Nzg0NCAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL0xpc3RWaWV3ZXIucHkKKysrIGIvVG9vbHMvcHluY2hlL0xpc3RWaWV3ZXIucHkKQEAgLTE1LDcgKzE1LDcgQEAKIGdpdmVuIG5hbWUsIHdpdGhvdXQgc2VsZWN0aW5nIHRoZSBjb2xvci4KICIiIgogCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKK2Zyb20gdGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IENvbG9yREIKIAogQUREVE9WSUVXID0gJ0NvbG9yICVMaXN0IFdpbmRvdy4uLicKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9QeW5jaGVXaWRnZXQucHkgYi9Ub29scy9weW5jaGUvUHluY2hlV2lkZ2V0LnB5CmluZGV4IGZjZmU3Y2UuLjM2NGYyMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3B5bmNoZS9QeW5jaGVXaWRnZXQucHkKKysrIGIvVG9vbHMvcHluY2hlL1B5bmNoZVdpZGdldC5weQpAQCAtNiw5ICs2LDggQEAKIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLWltcG9ydCB0a01lc3NhZ2VCb3gKLWltcG9ydCB0a0ZpbGVEaWFsb2cKK2Zyb20gdGtpbnRlciBpbXBvcnQgKgorZnJvbSB0a2ludGVyIGltcG9ydCBtZXNzYWdlYm94LCBmaWxlZGlhbG9nCiBpbXBvcnQgQ29sb3JEQgogCiAjIE1pbGxpc2Vjb25kcyBiZXR3ZWVuIGludGVycnVwdCBjaGVja3MKQEAgLTE1MCw3ICsxNDksNyBAQAogCiAgICAgZGVmIF9fcG9wdXBfYWJvdXQoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIGZyb20gTWFpbiBpbXBvcnQgX192ZXJzaW9uX18KLSAgICAgICAgdGtNZXNzYWdlQm94LnNob3dpbmZvKCdBYm91dCBQeW5jaGUgJyArIF9fdmVyc2lvbl9fLAorICAgICAgICBtZXNzYWdlYm94LnNob3dpbmZvKCdBYm91dCBQeW5jaGUgJyArIF9fdmVyc2lvbl9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycnXAogUHluY2hlICVzCiBUaGUgUFl0aG9uaWNhbGx5IE5hdHVyYWwKQEAgLTE2OCw3ICsxNjcsNyBAQAogICAgIGRlZiBfX2xvYWQoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICBpZGlyLCBpZmlsZSA9IG9zLnBhdGguc3BsaXQoc2VsZi5fX3NiLmNvbG9yZGIoKS5maWxlbmFtZSgpKQotICAgICAgICAgICAgZmlsZSA9IHRrRmlsZURpYWxvZy5hc2tvcGVuZmlsZW5hbWUoCisgICAgICAgICAgICBmaWxlID0gZmlsZWRpYWxvZy5hc2tvcGVuZmlsZW5hbWUoCiAgICAgICAgICAgICAgICAgZmlsZXR5cGVzPVsoJ1RleHQgZmlsZXMnLCAnKi50eHQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQWxsIGZpbGVzJywgJyonKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCkBAIC0xODAsMTIgKzE3OSwxMiBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGNvbG9yZGIgPSBDb2xvckRCLmdldF9jb2xvcmRiKGZpbGUpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCdSZWFkIGVycm9yJywgJycnXAorICAgICAgICAgICAgICAgIG1lc3NhZ2Vib3guc2hvd2Vycm9yKCdSZWFkIGVycm9yJywgJycnXAogQ291bGQgbm90IG9wZW4gZmlsZSBmb3IgcmVhZGluZzoKICVzJycnICUgZmlsZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgY29sb3JkYiBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoJ1VucmVjb2duaXplZCBjb2xvciBmaWxlIHR5cGUnLCAnJydcCisgICAgICAgICAgICAgICAgbWVzc2FnZWJveC5zaG93ZXJyb3IoJ1VucmVjb2duaXplZCBjb2xvciBmaWxlIHR5cGUnLCAnJydcCiBVbnJlY29nbml6ZWQgY29sb3IgZmlsZSB0eXBlIGluIGZpbGU6CiAlcycnJyAlIGZpbGUpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTI0OSw2ICsyNDgsOCBAQAogCiAKIAwKK2ltcG9ydCBmdW5jdG9vbHMKK0BmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKIGNsYXNzIFBvcHVwVmlld2VyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUsIG5hbWUsIHN3aXRjaGJvYXJkLCByb290KToKICAgICAgICAgc2VsZi5fX20gPSBtb2R1bGUKQEAgLTI3OSw4ICsyODAsMTEgQEAKICAgICAgICAgICAgIHNlbGYuX19zYi5hZGRfdmlldyhzZWxmLl9fd2luZG93KQogICAgICAgICBzZWxmLl9fd2luZG93LmRlaWNvbmlmeSgpCiAKLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBjbXAoc2VsZi5fX21lbnV0ZXh0LCBvdGhlci5fX21lbnV0ZXh0KQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX21lbnV0ZXh0ID09IG90aGVyLl9fbWVudXRleHQKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX21lbnV0ZXh0IDwgb3RoZXIuX19tZW51dGV4dAogCiAKIGRlZiBtYWtlX3ZpZXdfcG9wdXBzKHN3aXRjaGJvYXJkLCByb290LCBleHRyYXBhdGgpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvcHluY2hlL1N0cmlwVmlld2VyLnB5IGIvVG9vbHMvcHluY2hlL1N0cmlwVmlld2VyLnB5CmluZGV4IGE3ZGUzOTguLjJiMGVkZTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3B5bmNoZS9TdHJpcFZpZXdlci5weQorKysgYi9Ub29scy9weW5jaGUvU3RyaXBWaWV3ZXIucHkKQEAgLTI0LDcgKzI0LDcgQEAKIHRoaXMgY2FuIGJlIHNsb3cuCiAiIiIKIAotZnJvbSBUa2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGltcG9ydCBDb2xvckRCCiAKICMgTG9hZCB0aGlzIHNjcmlwdCBpbnRvIHRoZSBUY2wgaW50ZXJwcmV0ZXIgYW5kIGNhbGwgaXQgaW4KQEAgLTYyLDMyICs2MiwzMiBAQAogIyByZWQgdmFyaWF0aW9ucywgZ3JlZW4rYmx1ZSA9IGN5YW4gY29uc3RhbnQKIGRlZiBjb25zdGFudF9yZWRfZ2VuZXJhdG9yKG51bWNoaXBzLCByZWQsIGdyZWVuLCBibHVlKToKICAgICBzZXEgPSBjb25zdGFudChudW1jaGlwcykKLSAgICByZXR1cm4gbGlzdChtYXAoTm9uZSwgW3JlZF0gKiBudW1jaGlwcywgc2VxLCBzZXEpKQorICAgIHJldHVybiBsaXN0KHppcChbcmVkXSAqIG51bWNoaXBzLCBzZXEsIHNlcSkpCiAKICMgZ3JlZW4gdmFyaWF0aW9ucywgcmVkK2JsdWUgPSBtYWdlbnRhIGNvbnN0YW50CiBkZWYgY29uc3RhbnRfZ3JlZW5fZ2VuZXJhdG9yKG51bWNoaXBzLCByZWQsIGdyZWVuLCBibHVlKToKICAgICBzZXEgPSBjb25zdGFudChudW1jaGlwcykKLSAgICByZXR1cm4gbGlzdChtYXAoTm9uZSwgc2VxLCBbZ3JlZW5dICogbnVtY2hpcHMsIHNlcSkpCisgICAgcmV0dXJuIGxpc3QoemlwKHNlcSwgW2dyZWVuXSAqIG51bWNoaXBzLCBzZXEpKQogCiAjIGJsdWUgdmFyaWF0aW9ucywgcmVkK2dyZWVuID0geWVsbG93IGNvbnN0YW50CiBkZWYgY29uc3RhbnRfYmx1ZV9nZW5lcmF0b3IobnVtY2hpcHMsIHJlZCwgZ3JlZW4sIGJsdWUpOgogICAgIHNlcSA9IGNvbnN0YW50KG51bWNoaXBzKQotICAgIHJldHVybiBsaXN0KG1hcChOb25lLCBzZXEsIHNlcSwgW2JsdWVdICogbnVtY2hpcHMpKQorICAgIHJldHVybiBsaXN0KHppcChzZXEsIHNlcSwgW2JsdWVdICogbnVtY2hpcHMpKQogCiAjIHJlZCB2YXJpYXRpb25zLCBncmVlbitibHVlID0gY3lhbiBjb25zdGFudAogZGVmIGNvbnN0YW50X2N5YW5fZ2VuZXJhdG9yKG51bWNoaXBzLCByZWQsIGdyZWVuLCBibHVlKToKICAgICBzZXEgPSBjb25zdGFudChudW1jaGlwcykKLSAgICByZXR1cm4gbGlzdChtYXAoTm9uZSwgc2VxLCBbZ3JlZW5dICogbnVtY2hpcHMsIFtibHVlXSAqIG51bWNoaXBzKSkKKyAgICByZXR1cm4gbGlzdCh6aXAoc2VxLCBbZ3JlZW5dICogbnVtY2hpcHMsIFtibHVlXSAqIG51bWNoaXBzKSkKIAogIyBncmVlbiB2YXJpYXRpb25zLCByZWQrYmx1ZSA9IG1hZ2VudGEgY29uc3RhbnQKIGRlZiBjb25zdGFudF9tYWdlbnRhX2dlbmVyYXRvcihudW1jaGlwcywgcmVkLCBncmVlbiwgYmx1ZSk6CiAgICAgc2VxID0gY29uc3RhbnQobnVtY2hpcHMpCi0gICAgcmV0dXJuIGxpc3QobWFwKE5vbmUsIFtyZWRdICogbnVtY2hpcHMsIHNlcSwgW2JsdWVdICogbnVtY2hpcHMpKQorICAgIHJldHVybiBsaXN0KHppcChbcmVkXSAqIG51bWNoaXBzLCBzZXEsIFtibHVlXSAqIG51bWNoaXBzKSkKIAogIyBibHVlIHZhcmlhdGlvbnMsIHJlZCtncmVlbiA9IHllbGxvdyBjb25zdGFudAogZGVmIGNvbnN0YW50X3llbGxvd19nZW5lcmF0b3IobnVtY2hpcHMsIHJlZCwgZ3JlZW4sIGJsdWUpOgogICAgIHNlcSA9IGNvbnN0YW50KG51bWNoaXBzKQotICAgIHJldHVybiBsaXN0KG1hcChOb25lLCBbcmVkXSAqIG51bWNoaXBzLCBbZ3JlZW5dICogbnVtY2hpcHMsIHNlcSkpCisgICAgcmV0dXJuIGxpc3QoemlwKFtyZWRdICogbnVtY2hpcHMsIFtncmVlbl0gKiBudW1jaGlwcywgc2VxKSkKIAogCiAMCkBAIC0xMTksNyArMTE5LDcgQEAKICAgICAgICAgcmV0dXJuIGFycm93LCB0ZXh0CiAKICAgICBkZWYgX3goc2VsZik6Ci0gICAgICAgIGNvb3JkcyA9IHNlbGYuX2NhbnZhcy5jb29yZHMoc2VsZi5fVEFHKQorICAgICAgICBjb29yZHMgPSBsaXN0KHNlbGYuX2NhbnZhcy5jb29yZHMoc2VsZi5fVEFHKSkKICAgICAgICAgYXNzZXJ0IGNvb3JkcwogICAgICAgICByZXR1cm4gY29vcmRzWzBdCiAKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgICAgICByZXR1cm4gYXJyb3csIHRleHQKIAogICAgIGRlZiBfeChzZWxmKToKLSAgICAgICAgY29vcmRzID0gc2VsZi5fY2FudmFzLmNvb3JkcyhzZWxmLl9UQUcpCisgICAgICAgIGNvb3JkcyA9IGxpc3Qoc2VsZi5fY2FudmFzLmNvb3JkcyhzZWxmLl9UQUcpKQogICAgICAgICBhc3NlcnQgY29vcmRzCiAgICAgICAgIHJldHVybiBjb29yZHNbMF0gKyBzZWxmLl9BUlJPV1dJRFRICiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9Td2l0Y2hib2FyZC5weSBiL1Rvb2xzL3B5bmNoZS9Td2l0Y2hib2FyZC5weQppbmRleCAyOWY5OWFmLi4wMTNiYjAxIDEwMDY0NAotLS0gYS9Ub29scy9weW5jaGUvU3dpdGNoYm9hcmQucHkKKysrIGIvVG9vbHMvcHluY2hlL1N3aXRjaGJvYXJkLnB5CkBAIC00Miw3ICs0Miw2IEBACiAiIiIKIAogaW1wb3J0IHN5cwotZnJvbSB0eXBlcyBpbXBvcnQgRGljdFR5cGUKIGltcG9ydCBtYXJzaGFsCiAKIApAQCAtNjIsMTAgKzYxLDExIEBACiAgICAgICAgIGlmIGluaXRmaWxlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKGluaXRmaWxlKQorICAgICAgICAgICAgICAgICAgICBmcCA9IG9wZW4oaW5pdGZpbGUsICdyYicpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19vcHRpb25kYiA9IG1hcnNoYWwubG9hZChmcCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2VsZi5fX29wdGlvbmRiLCBEaWN0VHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnUHJvYmxlbSByZWFkaW5nIG9wdGlvbnMgZnJvbSBmaWxlOicsIGluaXRmaWxlLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuX19vcHRpb25kYiwgZGljdCk6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnUHJvYmxlbSByZWFkaW5nIG9wdGlvbnMgZnJvbSBmaWxlOicsIGluaXRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX29wdGlvbmRiID0ge30KICAgICAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwpAQCAtMTE2LDcgKzExNiw3IEBACiAgICAgICAgIGZwID0gTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgZnAgPSBvcGVuKHNlbGYuX19pbml0ZmlsZSwgJ3cnKQorICAgICAgICAgICAgICAgIGZwID0gb3BlbihzZWxmLl9faW5pdGZpbGUsICd3YicpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHdyaXRlIG9wdGlvbnMgdG8gZmlsZTonLCBcCiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2luaXRmaWxlLCBmaWxlPXN5cy5zdGRlcnIpCmRpZmYgLS1naXQgYS9Ub29scy9weW5jaGUvVGV4dFZpZXdlci5weSBiL1Rvb2xzL3B5bmNoZS9UZXh0Vmlld2VyLnB5CmluZGV4IDQ1NmJkOTYuLmJhYTFlNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3B5bmNoZS9UZXh0Vmlld2VyLnB5CisrKyBiL1Rvb2xzL3B5bmNoZS9UZXh0Vmlld2VyLnB5CkBAIC0xNSw3ICsxNSw3IEBACiBpbiB0aGUgdGV4dCB3aW5kb3cgKHdoaWNoIG9ubHkgaGFzIGEgYmFja2dyb3VuZCkuCiAiIiIKIAotZnJvbSBUa2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGltcG9ydCBDb2xvckRCCiAKIEFERFRPVklFVyA9ICdUZXh0IFdpbmRvdy4uLicKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9UeXBlaW5WaWV3ZXIucHkgYi9Ub29scy9weW5jaGUvVHlwZWluVmlld2VyLnB5CmluZGV4IGQ1NmMxYjMuLjJmOTNlNmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3B5bmNoZS9UeXBlaW5WaWV3ZXIucHkKKysrIGIvVG9vbHMvcHluY2hlL1R5cGVpblZpZXdlci5weQpAQCAtMTIsNyArMTIsNyBAQAogeW91IG11c3QgaGl0IFJldHVybiBvciBUYWIgdG8gc2VsZWN0IHRoZSBjb2xvci4KICIiIgogCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKK2Zyb20gdGtpbnRlciBpbXBvcnQgKgogCiAKIAwKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvUkVBRE1FIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKaW5kZXggYjFjMTY3ZS4uOGMwMjUyOSAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9SRUFETUUKKysrIGIvVG9vbHMvc2NyaXB0cy9SRUFETUUKQEAgLTEsNjcgKzEsNjMgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBleGVjdXRhYmxlIFB5dGhvbiBzY3JpcHRzIHRoYXQKLWFyZSB1c2VmdWwgd2hpbGUgYnVpbGRpbmcsIGV4dGVuZGluZyBvciBtYW5hZ2luZyBQeXRob24uICBTb21lIChlLmcuLAotZHV0cmVlIG9yIGxsbCkgYXJlIGFsc28gZ2VuZXJhbGx5IHVzZWZ1bCBVTklYIHRvb2xzLgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBjb2xsZWN0aW9uIG9mIGV4ZWN1dGFibGUgUHl0aG9uIHNjcmlwdHMgdGhhdCBhcmUKK3VzZWZ1bCB3aGlsZSBidWlsZGluZywgZXh0ZW5kaW5nIG9yIG1hbmFnaW5nIFB5dGhvbi4gIFNvbWUgKGUuZy4sIGR1dHJlZSBvciBsbGwpCithcmUgYWxzbyBnZW5lcmFsbHkgdXNlZnVsIFVOSVggdG9vbHMuCiAKLVNlZSBhbHNvIHRoZSBEZW1vL3NjcmlwdHMgZGlyZWN0b3J5IQotCi1hbmFseXplX2R4cC5weQkJQW5hbHl6ZXMgdGhlIHJlc3VsdCBvZiBzeXMuZ2V0ZHhwKCkKLWJ5ZXh0LnB5CQlQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KLWJ5dGV5ZWFycy5weQkJUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKLWNoZWNrYXBwZW5kLnB5CQlTZWFyY2ggZm9yIG11bHRpLWFyZ3VtZW50IC5hcHBlbmQoKSBjYWxscwotY2hlY2tweWMucHkJCUNoZWNrIHByZXNlbmNlIGFuZCB2YWxpZGl0eSBvZiAiLnB5YyIgZmlsZXMKLWNsYXNzZml4LnB5CQlDb252ZXJ0IG9sZCBjbGFzcyBzeW50YXggdG8gbmV3Ci1jbGVhbmZ1dHVyZS5weQkJRml4IHJlZHVudGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCi1jb21iaW5lcmVmcy5weQkJQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQuCi1jb3B5dGltZS5weQkJQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCi1jcmxmLnB5CQkJQ2hhbmdlIENSTEYgbGluZSBlbmRpbmdzIHRvIExGIChXaW5kb3dzIHRvIFVuaXgpCi1jdnNmaWxlcy5weQkJUHJpbnQgYSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIHVuZGVyIENWUwotZGIycGlja2xlLnB5CQlEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQotZGlmZi5weQkJCVByaW50IGZpbGUgZGlmZnMgaW4gY29udGV4dCwgdW5pZmllZCwgb3IgbmRpZmYgZm9ybWF0cwotZHV0cmVlLnB5CQlGb3JtYXQgZHUoMSkgb3V0cHV0IGFzIGEgdHJlZSBzb3J0ZWQgYnkgc2l6ZQotZXB0YWdzLnB5CQlDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcworMnRvMyAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCithbmFseXplX2R4cC5weSAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQorYnlleHQucHkgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCitieXRleWVhcnMucHkgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQorY2hlY2tweWMucHkgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcworY2xlYW5mdXR1cmUucHkgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCitjb21iaW5lcmVmcy5weSAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAorY29weXRpbWUucHkgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCitjcmxmLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKK2RiMnBpY2tsZS5weSAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCitkaWZmLnB5ICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKK2R1dHJlZS5weSAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCitlcHRhZ3MucHkgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwogZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lIAotZmluZGRpdi5weQkJQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKLWZpbmRsaW5rc3RvLnB5CQlSZWN1cnNpdmVseSBmaW5kIHN5bWJvbGljIGxpbmtzIHRvIGEgZ2l2ZW4gcGF0aCBwcmVmaXgKLWZpbmRub2NvZGluZy5weQkJRmluZCBzb3VyY2UgZmlsZXMgd2hpY2ggbmVlZCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbgotZml4Y2lkLnB5CQlNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCi1maXhkaXYucHkJCVRvb2wgdG8gZml4IGRpdmlzaW9uIG9wZXJhdG9ycy4KLWZpeGhlYWRlci5weQkJQWRkIHNvbWUgY3BwIG1hZ2ljIHRvIGEgQyBpbmNsdWRlIGZpbGUKLWZpeG5vdGljZS5weQkJRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcwotZml4cHMucHkJCUZpeCBQeXRob24gc2NyaXB0cycgZmlyc3QgbGluZSAoaWYgIyEpCi1mdHBtaXJyb3IucHkJCUZUUCBtaXJyb3Igc2NyaXB0Ci1nb29nbGUucHkJCU9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCi1ncHJvZjJodG1sLnB5CQlUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwKLWgycHkucHkJCQlUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCi1pZGxlCQkJTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKLWlmZGVmLnB5CQlSZW1vdmUgI2lmKG4pZGVmIGdyb3VwcyBmcm9tIEMgc291cmNlcwotbGZjci5weQkJCUNoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQotbGlua3RyZWUucHkJCU1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCi1sbGwucHkJCQlGaW5kIGFuZCBsaXN0IHN5bWJvbGljIGxpbmtzIGluIGN1cnJlbnQgZGlyZWN0b3J5Ci1sb2dtZXJnZS5weQkJQ29uc29saWRhdGUgQ1ZTL1JDUyBsb2dzIHJlYWQgZnJvbSBzdGRpbgotbWFpbGVyZGFlbW9uLnB5CQlwYXJzZSBlcnJvciBtZXNzYWdlcyBmcm9tIG1haWxlciBkYWVtb25zIChTam9lcmQmSmFjaykKLW1kNXN1bS5weQkJUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcy4KLW1ldGhmaXgucHkJCUZpeCBvbGQgbWV0aG9kIHN5bnRheCBkZWYgZihzZWxmLCAoYTEsIC4uLiwgYU4pKToKLW1rcmVhbC5weQkJVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKLW5kaWZmLnB5CQlJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKLW5tMmRlZi5weQkJQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKLW9iamdyYXBoLnB5CQlQcmludCBvYmplY3QgZ3JhcGggZnJvbSBubSBvdXRwdXQgb24gYSBsaWJyYXJ5Ci1wYXJzZWVudGl0aWVzLnB5CVV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKLXBhdGhmaXgucHkJCUNoYW5nZSAjIS91c3IvbG9jYWwvYmluL3B5dGhvbiBpbnRvIHNvbWV0aGluZyBlbHNlCi1wZGVwcy5weQkJUHJpbnQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUHl0aG9uIG1vZHVsZXMKLXBpY2tsZTJkYi5weQkJTG9hZCBhIHBpY2tsZSBnZW5lcmF0ZWQgYnkgZGIycGlja2xlLnB5IHRvIGEgZGF0YWJhc2UKLXBpbmRlbnQucHkJCUluZGVudCBQeXRob24gY29kZSwgZ2l2aW5nIGJsb2NrLWNsb3NpbmcgY29tbWVudHMKLXB0YWdzLnB5CQlDcmVhdGUgdmkgdGFncyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotcHlkb2MJCQlQeXRob24gZG9jdW1lbnRhdGlvbiBicm93c2VyLgotcHlzb3VyY2UucHkJCUZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcwotcmVkZW1vLnB5CQlCYXNpYyByZWd1bGFyIGV4cHJlc3Npb24gZGVtb25zdHJhdGlvbiBmYWNpbGl0eQotcmVpbmRlbnQucHkJCUNoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cy4KLXJncmVwLnB5CQlSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQotc2V0dXAucHkJCUluc3RhbGwgYWxsIHNjcmlwdHMgbGlzdGVkIGhlcmUKLXN1ZmYucHkJCQlTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKLXN2bmVvbC5weQkJU2V0cyBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKLXRleGNoZWNrLnB5ICAgICAgICAgICAgIFZhbGlkYXRlIFB5dGhvbiBMYVRlWCBmb3JtYXR0aW5nIChSYXltb25kIEhldHRpbmdlcikKLXRleGkyaHRtbC5weQkJQ29udmVydCBHTlUgdGV4aW5mbyBmaWxlcyBpbnRvIEhUTUwKLXRyZWVzeW5jLnB5CQlTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRlb3N5bmNyYXRpYykKLXVudGFiaWZ5LnB5CQlSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKLXdoaWNoLnB5CQlGaW5kIGEgcHJvZ3JhbSBpbiAkUEFUSAoteHhjaS5weQkJCVdyYXBwZXIgZm9yIHJjc2RpZmYgYW5kIGNpCitmaW5kZGl2LnB5ICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycworZmluZGxpbmtzdG8ucHkgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CitmaW5kbm9jb2RpbmcucHkgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCitmaXhjaWQucHkgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCitmaXhkaXYucHkgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCitmaXhoZWFkZXIucHkgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQorZml4bm90aWNlLnB5ICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcworZml4cHMucHkgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKK2Z0cG1pcnJvci5weSAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0Citnb29nbGUucHkgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQorZ3Byb2YyaHRtbC5weSAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCitoMnB5LnB5ICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCitpZGxlMyAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQoraWZkZWYucHkgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKK2xmY3IucHkgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQorbGlua3RyZWUucHkgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKK2xsbC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKK21haWxlcmRhZW1vbi5weSAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQorbWFrZV9jdHlwZS5weSAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYworbWQ1c3VtLnB5ICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcworbWtyZWFsLnB5ICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKK25kaWZmLnB5ICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQorbm0yZGVmLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKK29iamdyYXBoLnB5ICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKK3BhcnNlZW50aXRpZXMucHkgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKK3BhdGNoY2hlY2sucHkgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZworcGF0aGZpeC5weSAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKK3BkZXBzLnB5ICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCitwaWNrbGUyZGIucHkgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQorcGluZGVudC5weSAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cworcHRhZ3MucHkgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK3B5ZG9jMyAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKK3B5c291cmNlLnB5ICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcworcmVkZW1vLnB5ICAgICAgICAgICAgICAgQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKK3JlaW5kZW50LnB5ICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cworcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCityZ3JlcC5weSAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQorc2VydmUucHkgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCitzdWZmLnB5ICAgICAgICAgICAgICAgICBTb3J0IGEgbGlzdCBvZiBmaWxlcyBieSBzdWZmaXgKK3N2bmVvbC5weSAgICAgICAgICAgICAgIFNldCBzdm46ZW9sLXN0eWxlIG9uIGFsbCBmaWxlcyBpbiBkaXJlY3RvcnkKK3RleGkyaHRtbC5weSAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCit0cmVlc3luYy5weSAgICAgICAgICAgICBTeW5jaHJvbml6ZSBzb3VyY2UgdHJlZXMgKHZlcnkgaWRpb3N5bmNyYXRpYykKK3VudGFiaWZ5LnB5ICAgICAgICAgICAgIFJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcword2luX2FkZDJwYXRoLnB5ICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cword2hpY2gucHkgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvYWJpdHlwZS5weSBiL1Rvb2xzL3NjcmlwdHMvYWJpdHlwZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzVlZjZhCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc2NyaXB0cy9hYml0eXBlLnB5CkBAIC0wLDAgKzEsMTk5IEBACisjIFRoaXMgc2NyaXB0IGNvbnZlcnRzIGEgQyBmaWxlIHRvIHVzZSB0aGUgUEVQIDM4NCB0eXBlIGRlZmluaXRpb24gQVBJCisjIFVzYWdlOiBhYml0eXBlLnB5IDwgb2xkX2NvZGUgPiBuZXdfY29kZQoraW1wb3J0IHJlLCBzeXMKKworIyMjIyMjIyMjIyMjIFNpbXBsaXN0aWMgQyBzY2FubmVyICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK3Rva2VuaXplciA9IHJlLmNvbXBpbGUoCisgICAgciIoP1A8cHJlcHJvYz4jLipcbikiCisgICAgciJ8KD9QPGNvbW1lbnQ+L1wqLio/XCovKSIKKyAgICByInwoP1A8aWRlbnQ+W2EtekEtWl9dW2EtekEtWjAtOV9dKikiCisgICAgciJ8KD9QPHdzPlsgXHRcbl0rKSIKKyAgICByInwoP1A8b3RoZXI+LikiLAorICAgIHJlLk1VTFRJTElORSkKKwordG9rZW5zID0gW10KK3NvdXJjZSA9IHN5cy5zdGRpbi5yZWFkKCkKK3BvcyA9IDAKK3doaWxlIHBvcyAhPSBsZW4oc291cmNlKToKKyAgICBtID0gdG9rZW5pemVyLm1hdGNoKHNvdXJjZSwgcG9zKQorICAgIHRva2Vucy5hcHBlbmQoW20ubGFzdGdyb3VwLCBtLmdyb3VwKCldKQorICAgIHBvcyArPSBsZW4odG9rZW5zWy0xXVsxXSkKKyAgICBpZiB0b2tlbnNbLTFdWzBdID09ICdwcmVwcm9jJzoKKyAgICAgICAgIyBjb250aW51YXRpb24gbGluZXMgYXJlIGNvbnNpZGVyZWQKKyAgICAgICAgIyBvbmx5IGluIHByZXByb2Nlc3Mgc3RhdGVtZW50cworICAgICAgICB3aGlsZSB0b2tlbnNbLTFdWzFdLmVuZHN3aXRoKCdcXFxuJyk6CisgICAgICAgICAgICBubCA9IHNvdXJjZS5maW5kKCdcbicsIHBvcykKKyAgICAgICAgICAgIGlmIG5sID09IC0xOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzb3VyY2VbcG9zOl0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGluZSA9IHNvdXJjZVtwb3M6bmwrMV0KKyAgICAgICAgICAgIHRva2Vuc1stMV1bMV0gKz0gbGluZQorICAgICAgICAgICAgcG9zICs9IGxlbihsaW5lKQorCisjIyMjIyMgUmVwbGFjZW1lbnQgb2YgUHlUeXBlT2JqZWN0IHN0YXRpYyBpbnN0YW5jZXMgIyMjIyMjIyMjIyMjIyMKKworIyBjbGFzc2lmeSBlYWNoIHRva2VuLCBnaXZpbmcgaXQgYSBvbmUtbGV0dGVyIGNvZGU6CisjIFM6IHN0YXRpYworIyBUOiBQeVR5cGVPYmplY3QKKyMgSTogaWRlbnQKKyMgVzogd2hpdGVzcGFjZQorIyA9LCB7LCB9LCA7IDogdGhlbXNlbHZlcworZGVmIGNsYXNzaWZ5KCk6CisgICAgcmVzID0gW10KKyAgICBmb3IgdCx2IGluIHRva2VuczoKKyAgICAgICAgaWYgdCA9PSAnb3RoZXInIGFuZCB2IGluICI9e307IjoKKyAgICAgICAgICAgIHJlcy5hcHBlbmQodikKKyAgICAgICAgZWxpZiB0ID09ICdpZGVudCc6CisgICAgICAgICAgICBpZiB2ID09ICdQeVR5cGVPYmplY3QnOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoJ1QnKQorICAgICAgICAgICAgZWxpZiB2ID09ICdzdGF0aWMnOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoJ1MnKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMuYXBwZW5kKCdJJykKKyAgICAgICAgZWxpZiB0ID09ICd3cyc6CisgICAgICAgICAgICByZXMuYXBwZW5kKCdXJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoJy4nKQorICAgIHJldHVybiAnJy5qb2luKHJlcykKKworIyBPYnRhaW4gYSBsaXN0IG9mIGZpZWxkcyBvZiBhIFB5VHlwZU9iamVjdCwgaW4gZGVjbGFyYXRpb24gb3JkZXIsCisjIHNraXBwaW5nIG9iX2Jhc2UKKyMgQWxsIGNvbW1lbnRzIGFyZSBkcm9wcGVkIGZyb20gdGhlIHZhcmlhYmxlICh3aGljaCBhcmUgdHlwaWNhbGx5CisjIGp1c3QgdGhlIHNsb3QgbmFtZXMsIGFueXdheSksIGFuZCBpbmZvcm1hdGlvbiBpcyBkaXNjYXJkZWQgd2hldGhlcgorIyB0aGUgb3JpZ2luYWwgdHlwZSB3YXMgc3RhdGljLgorZGVmIGdldF9maWVsZHMoc3RhcnQsIHJlYWxfZW5kKToKKyAgICBwb3MgPSBzdGFydAorICAgICMgc3RhdGljPworICAgIGlmIHRva2Vuc1twb3NdWzFdID09ICdzdGF0aWMnOgorICAgICAgICBwb3MgKz0gMgorICAgICMgUHlUeXBlT2JqZWN0CisgICAgcG9zICs9IDIKKyAgICAjIG5hbWUKKyAgICBuYW1lID0gdG9rZW5zW3Bvc11bMV0KKyAgICBwb3MgKz0gMQorICAgIHdoaWxlIHRva2Vuc1twb3NdWzFdICE9ICd7JzoKKyAgICAgICAgcG9zICs9IDEKKyAgICBwb3MgKz0gMQorICAgICMgUHlWYXJPYmplY3RfSEVBRF9JTklUCisgICAgd2hpbGUgdG9rZW5zW3Bvc11bMF0gaW4gKCd3cycsICdjb21tZW50Jyk6CisgICAgICAgIHBvcyArPSAxCisgICAgaWYgdG9rZW5zW3Bvc11bMV0gIT0gJ1B5VmFyT2JqZWN0X0hFQURfSU5JVCc6CisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbiwgJyVzIGhhcyBubyBQeVZhck9iamVjdF9IRUFEX0lOSVQnICUgbmFtZQorICAgIHdoaWxlIHRva2Vuc1twb3NdWzFdICE9ICcpJzoKKyAgICAgICAgcG9zICs9IDEKKyAgICBwb3MgKz0gMQorICAgICMgZmllbGQgZGVmaW5pdGlvbnM6IHZhcmlvdXMgdG9rZW5zLCBjb21tYS1zZXBhcmF0ZWQKKyAgICBmaWVsZHMgPSBbXQorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHdoaWxlIHRva2Vuc1twb3NdWzBdIGluICgnd3MnLCAnY29tbWVudCcpOgorICAgICAgICAgICAgcG9zICs9IDEKKyAgICAgICAgZW5kID0gcG9zCisgICAgICAgIHdoaWxlIHRva2Vuc1tlbmRdWzFdIG5vdCBpbiAnLH0nOgorICAgICAgICAgICAgaWYgdG9rZW5zW2VuZF1bMV0gPT0gJygnOgorICAgICAgICAgICAgICAgIG5lc3RpbmcgPSAxCisgICAgICAgICAgICAgICAgd2hpbGUgbmVzdGluZzoKKyAgICAgICAgICAgICAgICAgICAgZW5kICs9IDEKKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW5zW2VuZF1bMV0gPT0gJygnOiBuZXN0aW5nKz0xCisgICAgICAgICAgICAgICAgICAgIGlmIHRva2Vuc1tlbmRdWzFdID09ICcpJzogbmVzdGluZy09MQorICAgICAgICAgICAgZW5kICs9IDEKKyAgICAgICAgYXNzZXJ0IGVuZCA8IHJlYWxfZW5kCisgICAgICAgICMgam9pbiBmaWVsZCwgZXhjbHVkaW5nIHNlcGFyYXRvciBhbmQgdHJhaWxpbmcgd3MKKyAgICAgICAgZW5kMSA9IGVuZC0xCisgICAgICAgIHdoaWxlIHRva2Vuc1tlbmQxXVswXSBpbiAoJ3dzJywgJ2NvbW1lbnQnKToKKyAgICAgICAgICAgIGVuZDEgLT0gMQorICAgICAgICBmaWVsZHMuYXBwZW5kKCcnLmpvaW4odFsxXSBmb3IgdCBpbiB0b2tlbnNbcG9zOmVuZDErMV0pKQorICAgICAgICBpZiB0b2tlbnNbZW5kXVsxXSA9PSAnfSc6CisgICAgICAgICAgICBicmVhaworICAgICAgICBwb3MgPSBlbmQrMQorICAgIHJldHVybiBuYW1lLCBmaWVsZHMKKworIyBMaXN0IG9mIHR5cGUgc2xvdHMgYXMgb2YgUHl0aG9uIDMuMiwgb21pdHRpbmcgb2JfYmFzZQordHlwZXNsb3RzID0gWworICAgICd0cF9uYW1lJywKKyAgICAndHBfYmFzaWNzaXplJywKKyAgICAndHBfaXRlbXNpemUnLAorICAgICd0cF9kZWFsbG9jJywKKyAgICAndHBfcHJpbnQnLAorICAgICd0cF9nZXRhdHRyJywKKyAgICAndHBfc2V0YXR0cicsCisgICAgJ3RwX3Jlc2VydmVkJywKKyAgICAndHBfcmVwcicsCisgICAgJ3RwX2FzX251bWJlcicsCisgICAgJ3RwX2FzX3NlcXVlbmNlJywKKyAgICAndHBfYXNfbWFwcGluZycsCisgICAgJ3RwX2hhc2gnLAorICAgICd0cF9jYWxsJywKKyAgICAndHBfc3RyJywKKyAgICAndHBfZ2V0YXR0cm8nLAorICAgICd0cF9zZXRhdHRybycsCisgICAgJ3RwX2FzX2J1ZmZlcicsCisgICAgJ3RwX2ZsYWdzJywKKyAgICAndHBfZG9jJywKKyAgICAndHBfdHJhdmVyc2UnLAorICAgICd0cF9jbGVhcicsCisgICAgJ3RwX3JpY2hjb21wYXJlJywKKyAgICAndHBfd2Vha2xpc3RvZmZzZXQnLAorICAgICd0cF9pdGVyJywKKyAgICAnaXRlcm5leHRmdW5jJywKKyAgICAndHBfbWV0aG9kcycsCisgICAgJ3RwX21lbWJlcnMnLAorICAgICd0cF9nZXRzZXQnLAorICAgICd0cF9iYXNlJywKKyAgICAndHBfZGljdCcsCisgICAgJ3RwX2Rlc2NyX2dldCcsCisgICAgJ3RwX2Rlc2NyX3NldCcsCisgICAgJ3RwX2RpY3RvZmZzZXQnLAorICAgICd0cF9pbml0JywKKyAgICAndHBfYWxsb2MnLAorICAgICd0cF9uZXcnLAorICAgICd0cF9mcmVlJywKKyAgICAndHBfaXNfZ2MnLAorICAgICd0cF9iYXNlcycsCisgICAgJ3RwX21ybycsCisgICAgJ3RwX2NhY2hlJywKKyAgICAndHBfc3ViY2xhc3NlcycsCisgICAgJ3RwX3dlYWtsaXN0JywKKyAgICAndHBfZGVsJworICAgICd0cF92ZXJzaW9uX3RhZycKK10KKworIyBHZW5lcmF0ZSBhIFB5VHlwZV9TcGVjIGRlZmluaXRpb24KK2RlZiBtYWtlX3Nsb3RzKG5hbWUsIGZpZWxkcyk6CisgICAgcmVzID0gW10KKyAgICByZXMuYXBwZW5kKCdzdGF0aWMgUHlUeXBlX1Nsb3QgJXNfc2xvdHNbXSA9IHsnICUgbmFtZSkKKyAgICAjIGRlZmF1bHRzIGZvciBzcGVjCisgICAgc3BlYyA9IHsgJ3RwX2l0ZW1zaXplJzonMCcgfQorICAgIGZvciBpLCB2YWwgaW4gZW51bWVyYXRlKGZpZWxkcyk6CisgICAgICAgIGlmIHZhbC5lbmRzd2l0aCgnMCcpOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgdHlwZXNsb3RzW2ldIGluICgndHBfbmFtZScsICd0cF9kb2MnLCAndHBfYmFzaWNzaXplJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndHBfaXRlbXNpemUnLCAndHBfZmxhZ3MnKToKKyAgICAgICAgICAgIHNwZWNbdHlwZXNsb3RzW2ldXSA9IHZhbAorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmVzLmFwcGVuZCgnICAgIHtQeV8lcywgJXN9LCcgJSAodHlwZXNsb3RzW2ldLCB2YWwpKQorICAgIHJlcy5hcHBlbmQoJ307JykKKyAgICByZXMuYXBwZW5kKCdzdGF0aWMgUHlUeXBlX1NwZWMgJXNfc3BlYyA9IHsnICUgbmFtZSkKKyAgICByZXMuYXBwZW5kKCcgICAgJXMsJyAlIHNwZWNbJ3RwX25hbWUnXSkKKyAgICByZXMuYXBwZW5kKCcgICAgJXMsJyAlIHNwZWNbJ3RwX2Jhc2ljc2l6ZSddKQorICAgIHJlcy5hcHBlbmQoJyAgICAlcywnICUgc3BlY1sndHBfaXRlbXNpemUnXSkKKyAgICByZXMuYXBwZW5kKCcgICAgJXMsJyAlIHNwZWNbJ3RwX2ZsYWdzJ10pCisgICAgcmVzLmFwcGVuZCgnICAgICVzX3Nsb3RzLCcgJSBuYW1lKQorICAgIHJlcy5hcHBlbmQoJ307XG4nKQorICAgIHJldHVybiAnXG4nLmpvaW4ocmVzKQorCisKKyMgTWFpbiBsb29wOiByZXBsYWNlIGFsbCBzdGF0aWMgUHlUeXBlT2JqZWN0cyB1bnRpbAorIyB0aGVyZSBhcmUgbm9uZSBsZWZ0Lgord2hpbGUgMToKKyAgICBjID0gY2xhc3NpZnkoKQorICAgIG0gPSByZS5zZWFyY2goJyhTVyk/VFdJVz89Vz97Lio/fTsnLCBjKQorICAgIGlmIG5vdCBtOgorICAgICAgICBicmVhaworICAgIHN0YXJ0ID0gbS5zdGFydCgpCisgICAgZW5kID0gbS5lbmQoKQorICAgIG5hbWUsIGZpZWxkcyA9IGdldF9maWVsZHMoc3RhcnQsIG0pCisgICAgdG9rZW5zW3N0YXJ0OmVuZF0gPSBbKCcnLG1ha2Vfc2xvdHMobmFtZSwgZmllbGRzKSldCisKKyMgT3V0cHV0IHJlc3VsdCB0byBzdGRvdXQKK2ZvciB0LCB2IGluIHRva2VuczoKKyAgICBzeXMuc3Rkb3V0LndyaXRlKHYpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5IGIvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQppbmRleCBlNWIwOTBjLi5iNzlmZjM3IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKQEAgLTEsMTAgKzEsMTEgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24zLjAKKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIlNob3cgZmlsZSBzdGF0aXN0aWNzIGJ5IGV4dGVuc2lvbi4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiAKKwogY2xhc3MgU3RhdHM6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CkBAIC0yOCwxMiArMjksMTEgQEAKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgJXM6ICVzXG4iICUgKGRpciwgZXJyKSkKICAgICAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgInVubGlzdGFibGUiLCAxKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIG5hbWVzLnNvcnQoKQotICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKG5hbWVzKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aCgiLiMiKToKLSAgICAgICAgICAgICAgICBjb250aW51ZSAjIFNraXAgQ1ZTIHRlbXAgZmlsZXMKKyAgICAgICAgICAgICAgICBjb250aW51ZSAgIyBTa2lwIENWUyB0ZW1wIGZpbGVzCiAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCJ+Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUjIFNraXAgRW1hY3MgYmFja3VwIGZpbGVzCisgICAgICAgICAgICAgICAgY29udGludWUgICMgU2tpcCBFbWFjcyBiYWNrdXAgZmlsZXMKICAgICAgICAgICAgIGZ1bGwgPSBvcy5wYXRoLmpvaW4oZGlyLCBuYW1lKQogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZnVsbCk6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRzdGF0cygiPGxuaz4iLCAibGlua3MiLCAxKQpAQCAtNDYsMjYgKzQ2LDI1IEBACiAgICAgICAgIGhlYWQsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCiAgICAgICAgIGhlYWQsIGJhc2UgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQogICAgICAgICBpZiBleHQgPT0gYmFzZToKLSAgICAgICAgICAgIGV4dCA9ICIiICMgRS5nLiAuY3ZzaWdub3JlIGlzIGRlZW1lZCBub3QgdG8gaGF2ZSBhbiBleHRlbnNpb24KKyAgICAgICAgICAgIGV4dCA9ICIiICAjIEUuZy4gLmN2c2lnbm9yZSBpcyBkZWVtZWQgbm90IHRvIGhhdmUgYW4gZXh0ZW5zaW9uCiAgICAgICAgIGV4dCA9IG9zLnBhdGgubm9ybWNhc2UoZXh0KQogICAgICAgICBpZiBub3QgZXh0OgogICAgICAgICAgICAgZXh0ID0gIjxub25lPiIKICAgICAgICAgc2VsZi5hZGRzdGF0cyhleHQsICJmaWxlcyIsIDEpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAicmIiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBvcGVuICVzOiAlc1xuIiAlIChmaWxlbmFtZSwgZXJyKSkKICAgICAgICAgICAgIHNlbGYuYWRkc3RhdHMoZXh0LCAidW5vcGVuYWJsZSIsIDEpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGF0YSA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFkZHN0YXRzKGV4dCwgImJ5dGVzIiwgbGVuKGRhdGEpKQogICAgICAgICBpZiBiJ1wwJyBpbiBkYXRhOgogICAgICAgICAgICAgc2VsZi5hZGRzdGF0cyhleHQsICJiaW5hcnkiLCAxKQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgc2VsZi5hZGRzdGF0cyhleHQsICJlbXB0eSIsIDEpCi0gICAgICAgICNzZWxmLmFkZHN0YXRzKGV4dCwgImNoYXJzIiwgbGVuKGRhdGEpKQorICAgICAgICAjIHNlbGYuYWRkc3RhdHMoZXh0LCAiY2hhcnMiLCBsZW4oZGF0YSkpCiAgICAgICAgIGxpbmVzID0gc3RyKGRhdGEsICJsYXRpbi0xIikuc3BsaXRsaW5lcygpCiAgICAgICAgIHNlbGYuYWRkc3RhdHMoZXh0LCAibGluZXMiLCBsZW4obGluZXMpKQogICAgICAgICBkZWwgbGluZXMKQEAgLTEwNSwxNyArMTA0LDIwIEBACiAgICAgICAgIGZvciBleHQgaW4gZXh0czoKICAgICAgICAgICAgIHNlbGYuc3RhdHNbZXh0XVsiZXh0Il0gPSBleHQKICAgICAgICAgY29scy5pbnNlcnQoMCwgImV4dCIpCisKICAgICAgICAgZGVmIHByaW50aGVhZGVyKCk6CiAgICAgICAgICAgICBmb3IgY29sIGluIGNvbHM6CiAgICAgICAgICAgICAgICAgcHJpbnQoIiUqcyIgJSAoY29sd2lkdGhbY29sXSwgY29sKSwgZW5kPScgJykKICAgICAgICAgICAgIHByaW50KCkKKwogICAgICAgICBwcmludGhlYWRlcigpCiAgICAgICAgIGZvciBleHQgaW4gZXh0czoKICAgICAgICAgICAgIGZvciBjb2wgaW4gY29sczoKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuc3RhdHNbZXh0XS5nZXQoY29sLCAiIikKICAgICAgICAgICAgICAgICBwcmludCgiJSpzIiAlIChjb2x3aWR0aFtjb2xdLCB2YWx1ZSksIGVuZD0nICcpCiAgICAgICAgICAgICBwcmludCgpCi0gICAgICAgIHByaW50aGVhZGVyKCkgIyBBbm90aGVyIGhlYWRlciBhdCB0aGUgYm90dG9tCisgICAgICAgIHByaW50aGVhZGVyKCkgICMgQW5vdGhlciBoZWFkZXIgYXQgdGhlIGJvdHRvbQorCiAKIGRlZiBtYWluKCk6CiAgICAgYXJncyA9IHN5cy5hcmd2WzE6XQpAQCAtMTI1LDUgKzEyNyw2IEBACiAgICAgcy5zdGF0YXJncyhhcmdzKQogICAgIHMucmVwb3J0KCkKIAorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQppbmRleCBmNDg2ZDI2Li40OTBiMzdmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICMgUHJpbnQgdGhlIHByb2R1Y3Qgb2YgYWdlIGFuZCBzaXplIG9mIGVhY2ggZmlsZSwgaW4gc3VpdGFibGUgdW5pdHMuCiAjCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NoZWNrYXBwZW5kLnB5IGIvVG9vbHMvc2NyaXB0cy9jaGVja2FwcGVuZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNGM3NGVlNS4uMDAwMDAwMAotLS0gYS9Ub29scy9zY3JpcHRzL2NoZWNrYXBwZW5kLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBSZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYnkgVGltIFBldGVycywgMjggRmVicnVhcnkgMjAwMC4KLQotIiIiY2hlY2thcHBlbmQucHkgLS0gc2VhcmNoIGZvciBtdWx0aS1hcmd1bWVudCAuYXBwZW5kKCkgY2FsbHMuCi0KLVVzYWdlOiAgc3BlY2lmeSBvbmUgb3IgbW9yZSBmaWxlIG9yIGRpcmVjdG9yeSBwYXRoczoKLSAgICBjaGVja2FwcGVuZCBbLXZdIGZpbGVfb3JfZGlyIFtmaWxlX29yX2Rpcl0gLi4uCi0KLUVhY2ggZmlsZV9vcl9kaXIgaXMgY2hlY2tlZCBmb3IgbXVsdGktYXJndW1lbnQgLmFwcGVuZCgpIGNhbGxzLiAgV2hlbgotYSBkaXJlY3RvcnksIGFsbCAucHkgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSwgYW5kIHJlY3Vyc2l2ZWx5IGluIGl0cwotc3ViZGlyZWN0b3JpZXMsIGFyZSBjaGVja2VkLgotCi1Vc2UgLXYgZm9yIHN0YXR1cyBtc2dzLiAgVXNlIC12diBmb3IgbW9yZSBzdGF0dXMgbXNncy4KLQotSW4gdGhlIGFic2VuY2Ugb2YgLXYsIHRoZSBvbmx5IG91dHB1dCBpcyBwYWlycyBvZiB0aGUgZm9ybQotCi0gICAgZmlsZW5hbWUobGluZW51bWJlcik6Ci0gICAgbGluZSBjb250YWluaW5nIHRoZSBzdXNwaWNpb3VzIGFwcGVuZAotCi1Ob3RlIHRoYXQgdGhpcyBmaW5kcyBtdWx0aS1hcmd1bWVudCBhcHBlbmQgY2FsbHMgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCi10aGV5J3JlIGF0dGFjaGVkIHRvIGxpc3Qgb2JqZWN0cy4gIElmIGEgbW9kdWxlIGRlZmluZXMgYSBjbGFzcyB3aXRoIGFuCi1hcHBlbmQgbWV0aG9kIHRoYXQgdGFrZXMgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgY2FsbHMgdG8gdGhhdCBtZXRob2QKLXdpbGwgYmUgbGlzdGVkLgotCi1Ob3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBmaW5kIG11bHRpLWFyZ3VtZW50IGxpc3QuYXBwZW5kIGNhbGxzIG1hZGUgdmlhIGEKLWJvdW5kIG1ldGhvZCBvYmplY3QuICBGb3IgZXhhbXBsZSwgdGhpcyBpcyBub3QgY2F1Z2h0OgotCi0gICAgc29tZWxpc3QgPSBbXQotICAgIHB1c2ggPSBzb21lbGlzdC5hcHBlbmQKLSAgICBwdXNoKDEsIDIsIDMpCi0iIiIKLQotX192ZXJzaW9uX18gPSAxLCAwLCAwCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotaW1wb3J0IGdldG9wdAotaW1wb3J0IHRva2VuaXplCi0KLXZlcmJvc2UgPSAwCi0KLWRlZiBlcnJwcmludCgqYXJncyk6Ci0gICAgbXNnID0gJyAnLmpvaW4oYXJncykKLSAgICBzeXMuc3RkZXJyLndyaXRlKG1zZykKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCi0KLWRlZiBtYWluKCk6Ci0gICAgYXJncyA9IHN5cy5hcmd2WzE6XQotICAgIGdsb2JhbCB2ZXJib3NlCi0gICAgdHJ5OgotICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJ2IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgZXJycHJpbnQoc3RyKG1zZykgKyAiXG5cbiIgKyBfX2RvY19fKQotICAgICAgICByZXR1cm4KLSAgICBmb3Igb3B0LCBvcHRhcmcgaW4gb3B0czoKLSAgICAgICAgaWYgb3B0ID09ICctdic6Ci0gICAgICAgICAgICB2ZXJib3NlID0gdmVyYm9zZSArIDEKLSAgICBpZiBub3QgYXJnczoKLSAgICAgICAgZXJycHJpbnQoX19kb2NfXykKLSAgICAgICAgcmV0dXJuCi0gICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICBjaGVjayhhcmcpCi0KLWRlZiBjaGVjayhmaWxlKToKLSAgICBpZiBvcy5wYXRoLmlzZGlyKGZpbGUpIGFuZCBub3Qgb3MucGF0aC5pc2xpbmsoZmlsZSk6Ci0gICAgICAgIGlmIHZlcmJvc2U6Ci0gICAgICAgICAgICBwcmludCgiJXI6IGxpc3RpbmcgZGlyZWN0b3J5IiAlIChmaWxlLCkpCi0gICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihmaWxlKQotICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKLSAgICAgICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGZpbGUsIG5hbWUpCi0gICAgICAgICAgICBpZiAoKG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpIGFuZAotICAgICAgICAgICAgICAgICBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIG9yIG9zLnBhdGgubm9ybWNhc2UobmFtZVstMzpdKSA9PSAiLnB5Iik6Ci0gICAgICAgICAgICAgICAgY2hlY2soZnVsbG5hbWUpCi0gICAgICAgIHJldHVybgotCi0gICAgdHJ5OgotICAgICAgICBmID0gb3BlbihmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgZXJycHJpbnQoIiVyOiBJL08gRXJyb3I6ICVzIiAlIChmaWxlLCBtc2cpKQotICAgICAgICByZXR1cm4KLQotICAgIGlmIHZlcmJvc2UgPiAxOgotICAgICAgICBwcmludCgiY2hlY2tpbmcgJXIgLi4uIiAlIChmaWxlLCkpCi0KLSAgICBvayA9IEFwcGVuZENoZWNrZXIoZmlsZSwgZikucnVuKCkKLSAgICBpZiB2ZXJib3NlIGFuZCBvazoKLSAgICAgICAgcHJpbnQoIiVyOiBDbGVhbiBiaWxsIG9mIGhlYWx0aC4iICUgKGZpbGUsKSkKLQotW0ZJTkRfRE9ULAotIEZJTkRfQVBQRU5ELAotIEZJTkRfTFBBUkVOLAotIEZJTkRfQ09NTUEsCi0gRklORF9TVE1UXSAgID0gcmFuZ2UoNSkKLQotY2xhc3MgQXBwZW5kQ2hlY2tlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZm5hbWUsIGZpbGUpOgotICAgICAgICBzZWxmLmZuYW1lID0gZm5hbWUKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLnN0YXRlID0gRklORF9ET1QKLSAgICAgICAgc2VsZi5uZXJyb3JzID0gMAotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKHNlbGYuZmlsZS5yZWFkbGluZSkKLSAgICAgICAgICAgIGZvciBfdG9rZW4gaW4gdG9rZW5zOgotICAgICAgICAgICAgICAgIHNlbGYudG9rZW5lYXRlcigqX3Rva2VuKQotICAgICAgICBleGNlcHQgdG9rZW5pemUuVG9rZW5FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBlcnJwcmludCgiJXI6IFRva2VuIEVycm9yOiAlcyIgJSAoc2VsZi5mbmFtZSwgbXNnKSkKLSAgICAgICAgICAgIHNlbGYubmVycm9ycyA9IHNlbGYubmVycm9ycyArIDEKLSAgICAgICAgcmV0dXJuIHNlbGYubmVycm9ycyA9PSAwCi0KLSAgICBkZWYgdG9rZW5lYXRlcihzZWxmLCB0eXBlLCB0b2tlbiwgc3RhcnQsIGVuZCwgbGluZSwKLSAgICAgICAgICAgICAgICBORVdMSU5FPXRva2VuaXplLk5FV0xJTkUsCi0gICAgICAgICAgICAgICAgSlVOSz0odG9rZW5pemUuQ09NTUVOVCwgdG9rZW5pemUuTkwpLAotICAgICAgICAgICAgICAgIE9QPXRva2VuaXplLk9QLAotICAgICAgICAgICAgICAgIE5BTUU9dG9rZW5pemUuTkFNRSk6Ci0KLSAgICAgICAgc3RhdGUgPSBzZWxmLnN0YXRlCi0KLSAgICAgICAgaWYgdHlwZSBpbiBKVU5LOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGVsaWYgc3RhdGUgaXMgRklORF9ET1Q6Ci0gICAgICAgICAgICBpZiB0eXBlIGlzIE9QIGFuZCB0b2tlbiA9PSAiLiI6Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBGSU5EX0FQUEVORAotCi0gICAgICAgIGVsaWYgc3RhdGUgaXMgRklORF9BUFBFTkQ6Ci0gICAgICAgICAgICBpZiB0eXBlIGlzIE5BTUUgYW5kIHRva2VuID09ICJhcHBlbmQiOgotICAgICAgICAgICAgICAgIHNlbGYubGluZSA9IGxpbmUKLSAgICAgICAgICAgICAgICBzZWxmLmxpbmVubyA9IHN0YXJ0WzBdCi0gICAgICAgICAgICAgICAgc3RhdGUgPSBGSU5EX0xQQVJFTgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IEZJTkRfRE9UCi0KLSAgICAgICAgZWxpZiBzdGF0ZSBpcyBGSU5EX0xQQVJFTjoKLSAgICAgICAgICAgIGlmIHR5cGUgaXMgT1AgYW5kIHRva2VuID09ICIoIjoKLSAgICAgICAgICAgICAgICBzZWxmLmxldmVsID0gMQotICAgICAgICAgICAgICAgIHN0YXRlID0gRklORF9DT01NQQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzdGF0ZSA9IEZJTkRfRE9UCi0KLSAgICAgICAgZWxpZiBzdGF0ZSBpcyBGSU5EX0NPTU1BOgotICAgICAgICAgICAgaWYgdHlwZSBpcyBPUDoKLSAgICAgICAgICAgICAgICBpZiB0b2tlbiBpbiAoIigiLCAieyIsICJbIik6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBzZWxmLmxldmVsICsgMQotICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gaW4gKCIpIiwgIn0iLCAiXSIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxldmVsID0gc2VsZi5sZXZlbCAtIDEKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5sZXZlbCA9PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBGSU5EX0RPVAotICAgICAgICAgICAgICAgIGVsaWYgdG9rZW4gPT0gIiwiIGFuZCBzZWxmLmxldmVsID09IDE6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubmVycm9ycyA9IHNlbGYubmVycm9ycyArIDEKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIiVzKCVkKTpcbiVzIiAlIChzZWxmLmZuYW1lLCBzZWxmLmxpbmVubywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmUpKQotICAgICAgICAgICAgICAgICAgICAjIGRvbid0IGdyaXBlIGFib3V0IHRoaXMgc3RtdCBhZ2FpbgotICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEZJTkRfU1RNVAotCi0gICAgICAgIGVsaWYgc3RhdGUgaXMgRklORF9TVE1UOgotICAgICAgICAgICAgaWYgdHlwZSBpcyBORVdMSU5FOgotICAgICAgICAgICAgICAgIHN0YXRlID0gRklORF9ET1QKLQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXJyb3IoInVua25vd24gaW50ZXJuYWwgc3RhdGUgJyVyJyIgJSAoc3RhdGUsKSkKLQotICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CmluZGV4IDJlOGZkNWEuLmQ0ZmRjZTIgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAjIENoZWNrIHRoYXQgYWxsICIucHljIiBmaWxlcyBleGlzdCBhbmQgYXJlIHVwLXRvLWRhdGUKICMgVXNlcyBtb2R1bGUgJ29zJwogCkBAIC03LDE0ICs3LDE3IEBACiBmcm9tIHN0YXQgaW1wb3J0IFNUX01USU1FCiBpbXBvcnQgaW1wCiAKKyMgUEVQIDMxNDcgY29tcGF0aWJpbGl0eSAoUFlDIFJlcG9zaXRvcnkgRGlyZWN0b3JpZXMpCitjYWNoZV9mcm9tX3NvdXJjZSA9IChpbXAuY2FjaGVfZnJvbV9zb3VyY2UgaWYgaGFzYXR0cihpbXAsICdnZXRfdGFnJykgZWxzZQorICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCisKKwogZGVmIG1haW4oKToKLSAgICBzaWxlbnQgPSAwCi0gICAgdmVyYm9zZSA9IDAKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIHN5cy5hcmd2WzFdID09ICctdic6Ci0gICAgICAgICAgICB2ZXJib3NlID0gMQotICAgICAgICBlbGlmIHN5cy5hcmd2WzFdID09ICctcyc6Ci0gICAgICAgICAgICBzaWxlbnQgPSAxCisgICAgaWYgbGVuKHN5cy5hcmd2KSA+IDE6CisgICAgICAgIHZlcmJvc2UgPSAoc3lzLmFyZ3ZbMV0gPT0gJy12JykKKyAgICAgICAgc2lsZW50ID0gKHN5cy5hcmd2WzFdID09ICctcycpCisgICAgZWxzZToKKyAgICAgICAgdmVyYm9zZSA9IHNpbGVudCA9IEZhbHNlCiAgICAgTUFHSUMgPSBpbXAuZ2V0X21hZ2ljKCkKICAgICBpZiBub3Qgc2lsZW50OgogICAgICAgICBwcmludCgnVXNpbmcgTUFHSUMgd29yZCcsIHJlcHIoTUFHSUMpKQpAQCAtMjYsOSArMjksOCBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgbm90IHNpbGVudDoKICAgICAgICAgICAgIHByaW50KCdDaGVja2luZyAnLCByZXByKGRpcm5hbWUpLCAnLi4uJykKLSAgICAgICAgbmFtZXMuc29ydCgpCi0gICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICAgICAgaWYgbmFtZVstMzpdID09ICcucHknOgorICAgICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQobmFtZXMpOgorICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5Jyk6CiAgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KG5hbWUpCkBAIC0zNywzMCArMzksMzEgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnQ2hlY2snLCByZXByKG5hbWUpLCAnLi4uJykKLSAgICAgICAgICAgICAgICBuYW1lX2MgPSBuYW1lICsgJ2MnCisgICAgICAgICAgICAgICAgbmFtZV9jID0gY2FjaGVfZnJvbV9zb3VyY2UobmFtZSkKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKG5hbWVfYywgJ3InKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4obmFtZV9jLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWNfc3RyID0gZi5yZWFkKDQpCisgICAgICAgICAgICAgICAgICAgICAgICBtdGltZV9zdHIgPSBmLnJlYWQoNCkKICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBvcGVuJywgcmVwcihuYW1lX2MpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIG1hZ2ljX3N0ciA9IGYucmVhZCg0KQotICAgICAgICAgICAgICAgIG10aW1lX3N0ciA9IGYucmVhZCg0KQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIGlmIG1hZ2ljX3N0ciAhPSBNQUdJQzoKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0JhZCBNQUdJQyB3b3JkIGluICIucHljIiBmaWxlJywgZW5kPScgJykKICAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihuYW1lX2MpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIG10aW1lID0gZ2V0X2xvbmcobXRpbWVfc3RyKQotICAgICAgICAgICAgICAgIGlmIG10aW1lID09IDAgb3IgbXRpbWUgPT0gLTE6CisgICAgICAgICAgICAgICAgaWYgbXRpbWUgaW4gezAsIC0xfToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0JhZCAiLnB5YyIgZmlsZScsIHJlcHIobmFtZV9jKSkKICAgICAgICAgICAgICAgICBlbGlmIG10aW1lICE9IHN0W1NUX01USU1FXToKICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ091dC1vZi1kYXRlICIucHljIiBmaWxlJywgZW5kPScgJykKICAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihuYW1lX2MpKQogCisKIGRlZiBnZXRfbG9uZyhzKToKICAgICBpZiBsZW4ocykgIT0gNDoKICAgICAgICAgcmV0dXJuIC0xCi0gICAgcmV0dXJuIG9yZChzWzBdKSArIChvcmQoc1sxXSk8PDgpICsgKG9yZChzWzJdKTw8MTYpICsgKG9yZChzWzNdKTw8MjQpCisgICAgcmV0dXJuIHNbMF0gKyAoc1sxXSA8PCA4KSArIChzWzJdIDw8IDE2KSArIChzWzNdIDw8IDI0KQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NsYXNzZml4LnB5IGIvVG9vbHMvc2NyaXB0cy9jbGFzc2ZpeC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMGNkMWU0OS4uMDAwMDAwMAotLS0gYS9Ub29scy9zY3JpcHRzL2NsYXNzZml4LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkwICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIyBUaGlzIHNjcmlwdCBpcyBvYnNvbGV0ZSAtLSBpdCBpcyBrZXB0IGZvciBoaXN0b3JpY2FsIHB1cnBvc2VzIG9ubHkuCi0jCi0jIEZpeCBQeXRob24gc291cmNlIGZpbGVzIHRvIHVzZSB0aGUgbmV3IGNsYXNzIGRlZmluaXRpb24gc3ludGF4LCBpLmUuLAotIyB0aGUgc3ludGF4IHVzZWQgaW4gUHl0aG9uIHZlcnNpb25zIGJlZm9yZSAwLjkuODoKLSMgICAgICAgY2xhc3MgQygpID0gYmFzZSgpLCBiYXNlKCksIC4uLjogLi4uCi0jIGlzIGNoYW5nZWQgdG8gdGhlIGN1cnJlbnQgc3ludGF4OgotIyAgICAgICBjbGFzcyBDKGJhc2UsIGJhc2UsIC4uLik6IC4uLgotIwotIyBUaGUgc2NyaXB0IHVzZXMgaGV1cmlzdGljcyB0byBmaW5kIGNsYXNzIGRlZmluaXRpb25zIHRoYXQgdXN1YWxseQotIyB3b3JrIGJ1dCBvY2Nhc2lvbmFsbHkgY2FuIGZhaWw7IGNhcmVmdWxseSBjaGVjayB0aGUgb3V0cHV0IQotIwotIyBDb21tYW5kIGxpbmUgYXJndW1lbnRzIGFyZSBmaWxlcyBvciBkaXJlY3RvcmllcyB0byBiZSBwcm9jZXNzZWQuCi0jIERpcmVjdG9yaWVzIGFyZSBzZWFyY2hlZCByZWN1cnNpdmVseSBmb3IgZmlsZXMgd2hvc2UgbmFtZSBsb29rcwotIyBsaWtlIGEgcHl0aG9uIG1vZHVsZS4KLSMgU3ltYm9saWMgbGlua3MgYXJlIGFsd2F5cyBpZ25vcmVkIChleGNlcHQgYXMgZXhwbGljaXQgZGlyZWN0b3J5Ci0jIGFyZ3VtZW50cykuICBPZiBjb3Vyc2UsIHRoZSBvcmlnaW5hbCBmaWxlIGlzIGtlcHQgYXMgYSBiYWNrLXVwCi0jICh3aXRoIGEgIn4iIGF0dGFjaGVkIHRvIGl0cyBuYW1lKS4KLSMKLSMgQ2hhbmdlcyBtYWRlIGFyZSByZXBvcnRlZCB0byBzdGRvdXQgaW4gYSBkaWZmLWxpa2UgZm9ybWF0LgotIwotIyBVbmRvdWJ0ZWRseSB5b3UgY2FuIGRvIHRoaXMgdXNpbmcgZmluZCBhbmQgc2VkIG9yIHBlcmwsIGJ1dCB0aGlzIGlzCi0jIGEgbmljZSBleGFtcGxlIG9mIFB5dGhvbiBjb2RlIHRoYXQgcmVjdXJzZXMgZG93biBhIGRpcmVjdG9yeSB0cmVlCi0jIGFuZCB1c2VzIHJlZ3VsYXIgZXhwcmVzc2lvbnMuICBBbHNvIG5vdGUgc2V2ZXJhbCBzdWJ0bGV0aWVzIGxpa2UKLSMgcHJlc2VydmluZyB0aGUgZmlsZSdzIG1vZGUgYW5kIGF2b2lkaW5nIHRvIGV2ZW4gd3JpdGUgYSB0ZW1wIGZpbGUKLSMgd2hlbiBubyBjaGFuZ2VzIGFyZSBuZWVkZWQgZm9yIGEgZmlsZS4KLSMKLSMgTkI6IGJ5IGNoYW5naW5nIG9ubHkgdGhlIGZ1bmN0aW9uIGZpeGxpbmUoKSB5b3UgY2FuIHR1cm4gdGhpcwotIyBpbnRvIGEgcHJvZ3JhbSBmb3IgYSBkaWZmZXJlbnQgY2hhbmdlIHRvIFB5dGhvbiBwcm9ncmFtcy4uLgotCi1pbXBvcnQgc3lzCi1pbXBvcnQgcmUKLWltcG9ydCBvcwotZnJvbSBzdGF0IGltcG9ydCAqCi0KLWVyciA9IHN5cy5zdGRlcnIud3JpdGUKLWRiZyA9IGVycgotcmVwID0gc3lzLnN0ZG91dC53cml0ZQotCi1kZWYgbWFpbigpOgotICAgIGJhZCA9IDAKLSAgICBpZiBub3Qgc3lzLmFyZ3ZbMTpdOiAjIE5vIGFyZ3VtZW50cwotICAgICAgICBlcnIoJ3VzYWdlOiAnICsgc3lzLmFyZ3ZbMF0gKyAnIGZpbGUtb3ItZGlyZWN0b3J5IC4uLlxuJykKLSAgICAgICAgc3lzLmV4aXQoMikKLSAgICBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XToKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihhcmcpOgotICAgICAgICAgICAgaWYgcmVjdXJzZWRvd24oYXJnKTogYmFkID0gMQotICAgICAgICBlbGlmIG9zLnBhdGguaXNsaW5rKGFyZyk6Ci0gICAgICAgICAgICBlcnIoYXJnICsgJzogd2lsbCBub3QgcHJvY2VzcyBzeW1ib2xpYyBsaW5rc1xuJykKLSAgICAgICAgICAgIGJhZCA9IDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGZpeChhcmcpOiBiYWQgPSAxCi0gICAgc3lzLmV4aXQoYmFkKQotCi1pc3B5dGhvbnByb2cgPSByZS5jb21waWxlKCdeW2EtekEtWjAtOV9dK1wucHkkJykKLWRlZiBpc3B5dGhvbihuYW1lKToKLSAgICByZXR1cm4gaXNweXRob25wcm9nLm1hdGNoKG5hbWUpID49IDAKLQotZGVmIHJlY3Vyc2Vkb3duKGRpcm5hbWUpOgotICAgIGRiZygncmVjdXJzZWRvd24oJXIpXG4nICUgKGRpcm5hbWUsKSkKLSAgICBiYWQgPSAwCi0gICAgdHJ5OgotICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCi0gICAgICAgIHJldHVybiAxCi0gICAgbmFtZXMuc29ydCgpCi0gICAgc3ViZGlycyA9IFtdCi0gICAgZm9yIG5hbWUgaW4gbmFtZXM6Ci0gICAgICAgIGlmIG5hbWUgaW4gKG9zLmN1cmRpciwgb3MucGFyZGlyKTogY29udGludWUKLSAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oZGlybmFtZSwgbmFtZSkKLSAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpOiBwYXNzCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdWJkaXJzLmFwcGVuZChmdWxsbmFtZSkKLSAgICAgICAgZWxpZiBpc3B5dGhvbihuYW1lKToKLSAgICAgICAgICAgIGlmIGZpeChmdWxsbmFtZSk6IGJhZCA9IDEKLSAgICBmb3IgZnVsbG5hbWUgaW4gc3ViZGlyczoKLSAgICAgICAgaWYgcmVjdXJzZWRvd24oZnVsbG5hbWUpOiBiYWQgPSAxCi0gICAgcmV0dXJuIGJhZAotCi1kZWYgZml4KGZpbGVuYW1lKToKLSMjICBkYmcoJ2ZpeCglcilcbicgJSAoZmlsZW5hbWUsKSkKLSAgICB0cnk6Ci0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCi0gICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIoJyVzOiBjYW5ub3Qgb3BlbjogJXJcbicgJSAoZmlsZW5hbWUsIG1zZykpCi0gICAgICAgIHJldHVybiAxCi0gICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCi0gICAgdGVtcG5hbWUgPSBvcy5wYXRoLmpvaW4oaGVhZCwgJ0AnICsgdGFpbCkKLSAgICBnID0gTm9uZQotICAgICMgSWYgd2UgZmluZCBhIG1hdGNoLCB3ZSByZXdpbmQgdGhlIGZpbGUgYW5kIHN0YXJ0IG92ZXIgYnV0Ci0gICAgIyBub3cgY29weSBldmVyeXRoaW5nIHRvIGEgdGVtcCBmaWxlLgotICAgIGxpbmVubyA9IDAKLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZi5yZWFkbGluZSgpCi0gICAgICAgIGlmIG5vdCBsaW5lOiBicmVhawotICAgICAgICBsaW5lbm8gPSBsaW5lbm8gKyAxCi0gICAgICAgIHdoaWxlIGxpbmVbLTI6XSA9PSAnXFxcbic6Ci0gICAgICAgICAgICBuZXh0bGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICAgICAgaWYgbm90IG5leHRsaW5lOiBicmVhawotICAgICAgICAgICAgbGluZSA9IGxpbmUgKyBuZXh0bGluZQotICAgICAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQotICAgICAgICBuZXdsaW5lID0gZml4bGluZShsaW5lKQotICAgICAgICBpZiBuZXdsaW5lICE9IGxpbmU6Ci0gICAgICAgICAgICBpZiBnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBnID0gb3Blbih0ZW1wbmFtZSwgJ3cnKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgICAgIGVycignJXM6IGNhbm5vdCBjcmVhdGU6ICVyXG4nICUgKHRlbXBuYW1lLCBtc2cpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICAgICAgICAgIGYuc2VlaygwKQotICAgICAgICAgICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgICAgICAgICByZXAoZmlsZW5hbWUgKyAnOlxuJykKLSAgICAgICAgICAgICAgICBjb250aW51ZSAjIHJlc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nCi0gICAgICAgICAgICByZXAocmVwcihsaW5lbm8pICsgJ1xuJykKLSAgICAgICAgICAgIHJlcCgnPCAnICsgbGluZSkKLSAgICAgICAgICAgIHJlcCgnPiAnICsgbmV3bGluZSkKLSAgICAgICAgaWYgZyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGcud3JpdGUobmV3bGluZSkKLQotICAgICMgRW5kIG9mIGZpbGUKLSAgICBmLmNsb3NlKCkKLSAgICBpZiBub3QgZzogcmV0dXJuIDAgIyBObyBjaGFuZ2VzCi0KLSAgICAjIEZpbmlzaGluZyB0b3VjaCAtLSBtb3ZlIGZpbGVzCi0KLSAgICAjIEZpcnN0IGNvcHkgdGhlIGZpbGUncyBtb2RlIHRvIHRoZSB0ZW1wIGZpbGUKLSAgICB0cnk6Ci0gICAgICAgIHN0YXRidWYgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDBvNzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKLSAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KLSAgICB0cnk6Ci0gICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgZXJyKCclczogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQotICAgICMgTm93IG1vdmUgdGhlIHRlbXAgZmlsZSB0byB0aGUgb3JpZ2luYWwgZmlsZQotICAgIHRyeToKLSAgICAgICAgb3MucmVuYW1lKHRlbXBuYW1lLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIoJyVzOiByZW5hbWUgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCi0gICAgICAgIHJldHVybiAxCi0gICAgIyBSZXR1cm4gc3VjY2VzCi0gICAgcmV0dXJuIDAKLQotIyBUaGlzIGV4cHJlc3Npb24gZG9lc24ndCBjYXRjaCAqYWxsKiBjbGFzcyBkZWZpbml0aW9uIGhlYWRlcnMsCi0jIGJ1dCBpdCdzIHByZXR0eSBkYXJuIGNsb3NlLgotY2xhc3NleHByID0gJ14oWyBcdF0qY2xhc3MgK1thLXpBLVowLTlfXSspICooICopICooKD0uKik/KTonCi1jbGFzc3Byb2cgPSByZS5jb21waWxlKGNsYXNzZXhwcikKLQotIyBFeHByZXNzaW9ucyBmb3IgZmluZGluZyBiYXNlIGNsYXNzIGV4cHJlc3Npb25zLgotYmFzZWV4cHIgPSAnXiAqKC4qKSAqKCAqKSAqJCcKLWJhc2Vwcm9nID0gcmUuY29tcGlsZShiYXNlZXhwcikKLQotZGVmIGZpeGxpbmUobGluZSk6Ci0gICAgaWYgY2xhc3Nwcm9nLm1hdGNoKGxpbmUpIDwgMDogIyBObyAnY2xhc3MnIGtleXdvcmQgLS0gbm8gY2hhbmdlCi0gICAgICAgIHJldHVybiBsaW5lCi0KLSAgICAoYTAsIGIwKSwgKGExLCBiMSksIChhMiwgYjIpID0gY2xhc3Nwcm9nLnJlZ3NbOjNdCi0gICAgIyBhMCwgYjAgPSBXaG9sZSBtYXRjaCAodXAgdG8gJzonKQotICAgICMgYTEsIGIxID0gRmlyc3Qgc3ViZXhwcmVzc2lvbiAodXAgdG8gY2xhc3NuYW1lKQotICAgICMgYTIsIGIyID0gU2Vjb25kIHN1YmV4cHJlc3Npb24gKD0uKikKLSAgICBoZWFkID0gbGluZVs6YjFdCi0gICAgdGFpbCA9IGxpbmVbYjA6XSAjIFVubWF0Y2hlZCByZXN0IG9mIGxpbmUKLQotICAgIGlmIGEyID09IGIyOiAjIE5vIGJhc2UgY2xhc3NlcyAtLSBlYXN5IGNhc2UKLSAgICAgICAgcmV0dXJuIGhlYWQgKyAnOicgKyB0YWlsCi0KLSAgICAjIEdldCByaWQgb2YgbGVhZGluZyAnPScKLSAgICBiYXNlcGFydCA9IGxpbmVbYTIrMTpiMl0KLQotICAgICMgRXh0cmFjdCBsaXN0IG9mIGJhc2UgZXhwcmVzc2lvbnMKLSAgICBiYXNlcyA9IGJhc2VwYXJ0LnNwbGl0KCcsJykKLQotICAgICMgU3RyaXAgdHJhaWxpbmcgJygpJyBmcm9tIGVhY2ggYmFzZSBleHByZXNzaW9uCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKGJhc2VzKSk6Ci0gICAgICAgIGlmIGJhc2Vwcm9nLm1hdGNoKGJhc2VzW2ldKSA+PSAwOgotICAgICAgICAgICAgeDEsIHkxID0gYmFzZXByb2cucmVnc1sxXQotICAgICAgICAgICAgYmFzZXNbaV0gPSBiYXNlc1tpXVt4MTp5MV0KLQotICAgICMgSm9pbiB0aGUgYmFzZXMgYmFjayBhZ2FpbiBhbmQgYnVpbGQgdGhlIG5ldyBsaW5lCi0gICAgYmFzZXBhcnQgPSAnLCAnLmpvaW4oYmFzZXMpCi0KLSAgICByZXR1cm4gaGVhZCArICcoJyArIGJhc2VwYXJ0ICsgJyk6JyArIHRhaWwKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2xlYW5mdXR1cmUucHkgYi9Ub29scy9zY3JpcHRzL2NsZWFuZnV0dXJlLnB5CmluZGV4IGU2YzhjOGMuLmI0OGFiNjAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2xlYW5mdXR1cmUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jbGVhbmZ1dHVyZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiImNsZWFuZnV0dXJlIFstZF1bLXJdWy12XSBwYXRoIC4uLgogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NvbWJpbmVyZWZzLnB5IGIvVG9vbHMvc2NyaXB0cy9jb21iaW5lcmVmcy5weQppbmRleCA2ODcwNGRkLi5lMTBlNDlhIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL2NvbWJpbmVyZWZzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY29tYmluZXJlZnMucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKIGNvbWJpbmVyZWZzIHBhdGgKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkgYi9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CmluZGV4IGJhNGEyNjcuLmUwMjIwYjUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICMgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY3JsZi5weSBiL1Rvb2xzL3NjcmlwdHMvY3JsZi5weQppbmRleCAzZGZhMTMxLi4wNjIyMjgyIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NybGYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jcmxmLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKICJSZXBsYWNlIENSTEYgd2l0aCBMRiBpbiBhcmd1bWVudCBmaWxlcy4gIFByaW50IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuIgogCiBpbXBvcnQgc3lzLCBvcwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jdnNmaWxlcy5weSBiL1Rvb2xzL3NjcmlwdHMvY3ZzZmlsZXMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDllNjVkYzguLjAwMDAwMDAKLS0tIGEvVG9vbHMvc2NyaXB0cy9jdnNmaWxlcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIiUHJpbnQgYSBsaXN0IG9mIGZpbGVzIHRoYXQgYXJlIG1lbnRpb25lZCBpbiBDVlMgZGlyZWN0b3JpZXMuCi0KLVVzYWdlOiBjdnNmaWxlcy5weSBbLW4gZmlsZV0gW2RpcmVjdG9yeV0gLi4uCi0KLUlmIHRoZSAnLW4gZmlsZScgb3B0aW9uIGlzIGdpdmVuLCBvbmx5IGZpbGVzIHVuZGVyIENWUyB0aGF0IGFyZSBuZXdlcgotdGhhbiB0aGUgZ2l2ZW4gZmlsZSBhcmUgcHJpbnRlZDsgYnkgZGVmYXVsdCwgYWxsIGZpbGVzIHVuZGVyIENWUyBhcmUKLXByaW50ZWQuICBBcyBhIHNwZWNpYWwgY2FzZSwgaWYgYSBmaWxlIGRvZXMgbm90IGV4aXN0LCBpdCBpcyBhbHdheXMKLXByaW50ZWQuCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3RhdAotaW1wb3J0IGdldG9wdAotCi1jdXRvZmZ0aW1lID0gMAotCi1kZWYgbWFpbigpOgotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAibjoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHByaW50KF9fZG9jX18sIGVuZD0nICcpCi0gICAgICAgIHJldHVybiAxCi0gICAgZ2xvYmFsIGN1dG9mZnRpbWUKLSAgICBuZXdlcmZpbGUgPSBOb25lCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyA9PSAnLW4nOgotICAgICAgICAgICAgY3V0b2ZmdGltZSA9IGdldG10aW1lKGEpCi0gICAgaWYgYXJnczoKLSAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICAgICAgcHJvY2VzcyhhcmcpCi0gICAgZWxzZToKLSAgICAgICAgcHJvY2VzcygiLiIpCi0KLWRlZiBwcm9jZXNzKGRpcik6Ci0gICAgY3ZzZGlyID0gMAotICAgIHN1YmRpcnMgPSBbXQotICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZm9yIG5hbWUgaW4gbmFtZXM6Ci0gICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGRpciwgbmFtZSkKLSAgICAgICAgaWYgbmFtZSA9PSAiQ1ZTIjoKLSAgICAgICAgICAgIGN2c2RpciA9IGZ1bGxuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICAgICBzdWJkaXJzLmFwcGVuZChmdWxsbmFtZSkKLSAgICBpZiBjdnNkaXI6Ci0gICAgICAgIGVudHJpZXMgPSBvcy5wYXRoLmpvaW4oY3ZzZGlyLCAiRW50cmllcyIpCi0gICAgICAgIGZvciBlIGluIG9wZW4oZW50cmllcykucmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICB3b3JkcyA9IGUuc3BsaXQoJy8nKQotICAgICAgICAgICAgaWYgd29yZHNbMF0gPT0gJycgYW5kIHdvcmRzWzE6XToKLSAgICAgICAgICAgICAgICBuYW1lID0gd29yZHNbMV0KLSAgICAgICAgICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIG5hbWUpCi0gICAgICAgICAgICAgICAgaWYgY3V0b2ZmdGltZSBhbmQgZ2V0bXRpbWUoZnVsbG5hbWUpIDw9IGN1dG9mZnRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludChmdWxsbmFtZSkKLSAgICBmb3Igc3ViIGluIHN1YmRpcnM6Ci0gICAgICAgIHByb2Nlc3Moc3ViKQotCi1kZWYgZ2V0bXRpbWUoZmlsZW5hbWUpOgotICAgIHRyeToKLSAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIDAKLSAgICByZXR1cm4gc3Rbc3RhdC5TVF9NVElNRV0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZGIycGlja2xlLnB5IGIvVG9vbHMvc2NyaXB0cy9kYjJwaWNrbGUucHkKaW5kZXggOWRkOGJkMy4uYTU1MzJhOCAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9kYjJwaWNrbGUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9kYjJwaWNrbGUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiCiBTeW5vcHNpczogJShwcm9nKXMgWy1ofC1nfC1ifC1yfC1hXSBkYmZpbGUgWyBwaWNrbGVmaWxlIF0KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZHV0cmVlLnB5IGIvVG9vbHMvc2NyaXB0cy9kdXRyZWUucHkKaW5kZXggZGJmNGYxYS4uNmI0MzYxYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9kdXRyZWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9kdXRyZWUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIyBGb3JtYXQgZHUgb3V0cHV0IGluIGEgdHJlZSBzaGFwZQogCiBpbXBvcnQgb3MsIHN5cywgZXJybm8KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZXB0YWdzLnB5IGIvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKaW5kZXggOGQzNWRmYi4uNjcxZmYxMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9lcHRhZ3MucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiQ3JlYXRlIGEgVEFHUyBmaWxlIGZvciBQeXRob24gcHJvZ3JhbXMsIHVzYWJsZSB3aXRoIEdOVSBFbWFjcy4KIAogdXNhZ2U6IGVwdGFncyBweWZpbGVzLi4uCmRpZmYgLS1naXQgYS9EZW1vL3NjcmlwdHMvZmluZC11bmFtZS5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZC11bmFtZS5weQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIERlbW8vc2NyaXB0cy9maW5kLXVuYW1lLnB5CnJlbmFtZSB0byBUb29scy9zY3JpcHRzL2ZpbmQtdW5hbWUucHkKaW5kZXggMTkwMjQyMy4uYjZlYzFiNgotLS0gYS9EZW1vL3NjcmlwdHMvZmluZC11bmFtZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmQtdW5hbWUucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiCiBGb3IgZWFjaCBhcmd1bWVudCBvbiB0aGUgY29tbWFuZCBsaW5lLCBsb29rIGZvciBpdCBpbiB0aGUgc2V0IG9mIGFsbCBVbmljb2RlCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgYi9Ub29scy9zY3JpcHRzL2ZpbmRfcmVjdXJzaW9ubGltaXQucHkKaW5kZXggNmY3NWQ2ZC4uNDQzZjA1MiAxMDA2NDQKLS0tIGEvVG9vbHMvc2NyaXB0cy9maW5kX3JlY3Vyc2lvbmxpbWl0LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZF9yZWN1cnNpb25saW1pdC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAiIiJGaW5kIHRoZSBtYXhpbXVtIHJlY3Vyc2lvbiBsaW1pdCB0aGF0IHByZXZlbnRzIGludGVycHJldGVyIHRlcm1pbmF0aW9uLgogCiBUaGlzIHNjcmlwdCBmaW5kcyB0aGUgbWF4aW11bSBzYWZlIHJlY3Vyc2lvbiBsaW1pdCBvbiBhIHBhcnRpY3VsYXIKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQppbmRleCA1NTg3OTFmLi5mMjRhNzAyIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiZmluZGRpdiAtIGEgZ3JlcC1saWtlIHRvb2wgdGhhdCBsb29rcyBmb3IgZGl2aXNpb24gb3BlcmF0b3JzLgogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQppbmRleCBkM2RhN2U0Li5iNGMwOWVmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIGZpbmRsaW5rc3RvCiAjCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRub2NvZGluZy5weSBiL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CmluZGV4IDc4ZmM4ZWYuLjc3NjA3Y2UgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZG5vY29kaW5nLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICIiIkxpc3QgYWxsIHRob3NlIFB5dGhvbiBmaWxlcyB0aGF0IHJlcXVpcmUgYSBjb2RpbmcgZGlyZWN0aXZlCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKaW5kZXggYjIxYTgzNi4uMmQ0Y2QxYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIFBlcmZvcm0gbWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcy4KICMgVGhpcyBhY3R1YWxseSB0b2tlbml6ZXMgdGhlIGZpbGVzICh0byBzb21lIGV4dGVudCkgc28gaXQgY2FuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CmluZGV4IDhiMTVjYzYuLjRlY2JlYTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiZml4ZGl2IC0gdG9vbCB0byBmaXggZGl2aXNpb24gb3BlcmF0b3JzLgogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGhlYWRlci5weSBiL1Rvb2xzL3NjcmlwdHMvZml4aGVhZGVyLnB5CmluZGV4IDEyMDgwMzEuLmVjODQwNTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4aGVhZGVyLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4aGVhZGVyLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBBZGQgc29tZSBzdGFuZGFyZCBjcHAgbWFnaWMgdG8gYSBoZWFkZXIgZmlsZQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeG5vdGljZS5weSBiL1Rvb2xzL3NjcmlwdHMvZml4bm90aWNlLnB5CmluZGV4IGQzNWEzMzkuLmFhYzg2OTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4bm90aWNlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4bm90aWNlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiKE9zdGVuc2libHkpIGZpeCBjb3B5cmlnaHQgbm90aWNlcyBpbiBmaWxlcy4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maXhwcy5weSBiL1Rvb2xzL3NjcmlwdHMvZml4cHMucHkKaW5kZXggZmQyY2E3MS4uYjAwMjI2MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhwcy5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpeHBzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICMgRml4IFB5dGhvbiBzY3JpcHQocykgdG8gcmVmZXJlbmNlIHRoZSBpbnRlcnByZXRlciB2aWEgL3Vzci9iaW4vZW52IHB5dGhvbi4KICMgV2FybmluZzogdGhpcyBvdmVyd3JpdGVzIHRoZSBmaWxlIHdpdGhvdXQgbWFraW5nIGEgYmFja3VwLgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9mdHBtaXJyb3IucHkgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQppbmRleCBiNzlkYjFhLi45ZThiZTFkIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQorKysgYi9Ub29scy9zY3JpcHRzL2Z0cG1pcnJvci5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIk1pcnJvciBhIHJlbW90ZSBmdHAgc3VidHJlZSBpbnRvIGEgbG9jYWwgZGlyZWN0b3J5IHRyZWUuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NzbC9nZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5IGIvVG9vbHMvc2NyaXB0cy9nZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5CnNpbWlsYXJpdHkgaW5kZXggODglCnJlbmFtZSBmcm9tIFRvb2xzL3NzbC9nZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5CnJlbmFtZSB0byBUb29scy9zY3JpcHRzL2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkKaW5kZXggYWI4NTFlZi4uNTgxMWYyMCAxMDA2NDQKLS0tIGEvVG9vbHMvc3NsL2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9nZXQtcmVtb3RlLWNlcnRpZmljYXRlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAjCiAjIGZldGNoIHRoZSBjZXJ0aWZpY2F0ZSB0aGF0IHRoZSBzZXJ2ZXIocykgYXJlIHByb3ZpZGluZyBpbiBQRU0gZm9ybQogIwpAQCAtOCw3ICs4LDYgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgb3MKLWltcG9ydCBzc2wKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogCkBAIC0zOCw3ICszNyw4IEBACiAgICAgICAgICAgICAgICAgc3RhdHVzLCBvdXRwdXQgPSBzdWJwcm9jKHInb3BlbnNzbCB4NTA5IC1pbiAiJXMiIC1vdXQgIiVzIicgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG4sIHRuMikpCiAgICAgICAgICAgICAgICAgaWYgc3RhdHVzICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIE9wZXJhdGlvbkVycm9yKHN0YXR1cywgdHNpZywgb3V0cHV0KQorICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ09wZW5TU0wgeDUwOSBmYWlsZWQgd2l0aCBzdGF0dXMgJXMgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXQ6ICVyJyAlIChzdGF0dXMsIG91dHB1dCkpCiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKHRuMiwgJ3JiJykKICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQpAQCAtNjMsNyArNjMsOCBAQAogICAgICAgICAgICAgJ29wZW5zc2wgc19jbGllbnQgLWNvbm5lY3QgIiVzOiVzIiAtc2hvd2NlcnRzIDwgL2Rldi9udWxsJyAlCiAgICAgICAgICAgICAoaG9zdCwgcG9ydCkpCiAgICAgaWYgc3RhdHVzICE9IDA6Ci0gICAgICAgIHJhaXNlIE9TRXJyb3Ioc3RhdHVzKQorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ09wZW5TU0wgY29ubmVjdCBmYWlsZWQgd2l0aCBzdGF0dXMgJXMgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdvdXRwdXQ6ICVyJyAlIChzdGF0dXMsIG91dHB1dCkpCiAgICAgY2VydHRleHQgPSBzdHJpcF90b194NTA5X2NlcnQob3V0cHV0KQogICAgIGlmIG5vdCBjZXJ0dGV4dDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCByZXNwb25zZSByZWNlaXZlZCBmcm9tIHNlcnZlciBhdCAlczolcyIgJQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9nb29nbGUucHkgYi9Ub29scy9zY3JpcHRzL2dvb2dsZS5weQppbmRleCA2MjE5YzJkLi4xMjE1MmJiIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2dvb2dsZS5weQorKysgYi9Ub29scy9zY3JpcHRzL2dvb2dsZS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKIGltcG9ydCBzeXMsIHdlYmJyb3dzZXIKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5IGIvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5CmluZGV4IGNiMDFjMmMuLmYzYzcyMDIgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZ3Byb2YyaHRtbC5weQorKysgYi9Ub29scy9zY3JpcHRzL2dwcm9mMmh0bWwucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uMi4zCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMzIuMwogCiAiIiJUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwuIiIiCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQppbmRleCA5YjViNjk3Li40NWFhNDM5IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBSZWFkICNkZWZpbmUncyBhbmQgdHJhbnNsYXRlIHRvIFB5dGhvbiBjb2RlLgogIyBIYW5kbGUgI2luY2x1ZGUgc3RhdGVtZW50cy4KQEAgLTQ5LDEzICs0OSw3IEBACiAgICAgdHJ5OgogICAgICAgICBzZWFyY2hkaXJzPW9zLmVudmlyb25bJ0lOQ0xVREUnXS5zcGxpdCgnOycpCiAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYXRoZW9zIik6Ci0gICAgICAgICAgICAgICAgc2VhcmNoZGlycz1vcy5lbnZpcm9uWydDX0lOQ0xVREVfUEFUSCddLnNwbGl0KCc6JykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgc2VhcmNoZGlycz1bJy91c3IvaW5jbHVkZSddCisgICAgICAgIHNlYXJjaGRpcnM9WycvdXNyL2luY2x1ZGUnXQogCiBkZWYgbWFpbigpOgogICAgIGdsb2JhbCBmaWxlZGljdApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9pZmRlZi5weSBiL1Rvb2xzL3NjcmlwdHMvaWZkZWYucHkKaW5kZXggMmVkN2E2Ni4uNDYxNjdhZCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9pZmRlZi5weQorKysgYi9Ub29scy9zY3JpcHRzL2lmZGVmLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBTZWxlY3RpdmVseSBwcmVwcm9jZXNzICNpZmRlZiAvICNpZm5kZWYgc3RhdGVtZW50cy4KICMgVXNhZ2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2xmY3IucHkgYi9Ub29scy9zY3JpcHRzL2xmY3IucHkKaW5kZXggMWI5YTViNy4uZDA5NDAyMiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9sZmNyLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbGZjci5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICJSZXBsYWNlIExGIHdpdGggQ1JMRiBpbiBhcmd1bWVudCBmaWxlcy4gIFByaW50IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuIgogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5IGIvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQppbmRleCA3NDhiMDQyLi45ODJmNDgwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIGxpbmt0cmVlCiAjCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2xsbC5weSBiL1Rvb2xzL3NjcmlwdHMvbGxsLnB5CmluZGV4IDVlZTE1MDQuLmFhNGU1NTAgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbGxsLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbGxsLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBGaW5kIHN5bWJvbGljIGxpbmtzIGFuZCBzaG93IHdoZXJlIHRoZXkgcG9pbnQgdG8uCiAjIEFyZ3VtZW50cyBhcmUgZGlyZWN0b3JpZXMgdG8gc2VhcmNoOyBkZWZhdWx0IGlzIGN1cnJlbnQgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9sb2dtZXJnZS5weSBiL1Rvb2xzL3NjcmlwdHMvbG9nbWVyZ2UucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA2NzUwYjAuLjAwMDAwMDAKLS0tIGEvVG9vbHMvc2NyaXB0cy9sb2dtZXJnZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCi0KLSIiIkNvbnNvbGlkYXRlIGEgYnVuY2ggb2YgQ1ZTIG9yIFJDUyBsb2dzIHJlYWQgZnJvbSBzdGRpbi4KLQotSW5wdXQgc2hvdWxkIGJlIHRoZSBvdXRwdXQgb2YgYSBDVlMgb3IgUkNTIGxvZ2dpbmcgY29tbWFuZCwgZS5nLgotCi0gICAgY3ZzIGxvZyAtcnJlbGVhc2UxNDoKLQotd2hpY2ggZHVtcHMgYWxsIGxvZyBtZXNzYWdlcyBmcm9tIHJlbGVhc2UxLjQgdXB3YXJkcyAoYXNzdW1pbmcgdGhhdAotcmVsZWFzZSAxLjQgd2FzIHRhZ2dlZCB3aXRoIHRhZyAncmVsZWFzZTE0JykuICBOb3RlIHRoZSB0cmFpbGluZwotY29sb24hCi0KLVRoaXMgY29sbGVjdHMgYWxsIHRoZSByZXZpc2lvbiByZWNvcmRzIGFuZCBvdXRwdXRzIHRoZW0gc29ydGVkIGJ5IGRhdGUKLXJhdGhlciB0aGFuIGJ5IGZpbGUsIGNvbGxhcHNpbmcgZHVwbGljYXRlIHJldmlzaW9uIHJlY29yZCwgaS5lLiwKLXJlY29yZHMgd2l0aCB0aGUgc2FtZSBtZXNzYWdlIGZvciBkaWZmZXJlbnQgZmlsZXMuCi0KLVRoZSAtdCBvcHRpb24gY2F1c2VzIGl0IHRvIHRydW5jYXRlIChkaXNjYXJkKSB0aGUgbGFzdCByZXZpc2lvbiBsb2cKLWVudHJ5OyB0aGlzIGlzIHVzZWZ1bCB3aGVuIHVzaW5nIHNvbWV0aGluZyBsaWtlIHRoZSBhYm92ZSBjdnMgbG9nCi1jb21tYW5kLCB3aGljaCBzaG93cyB0aGUgcmV2aXNpb25zIGluY2x1ZGluZyB0aGUgZ2l2ZW4gdGFnLCB3aGlsZSB5b3UKLXByb2JhYmx5IHdhbnQgZXZlcnl0aGluZyAqc2luY2UqIHRoYXQgdGFnLgotCi1UaGUgLXIgb3B0aW9uIHJldmVyc2VzIHRoZSBvdXRwdXQgKG9sZGVzdCBmaXJzdDsgdGhlIGRlZmF1bHQgaXMgb2xkZXN0Ci1sYXN0KS4KLQotVGhlIC1iIHRhZyBvcHRpb24gcmVzdHJpY3RzIHRoZSBvdXRwdXQgdG8gKm9ubHkqIGNoZWNraW4gbWVzc2FnZXMKLWJlbG9uZ2luZyB0byB0aGUgZ2l2ZW4gYnJhbmNoIHRhZy4gIFRoZSBmb3JtIC1iIEhFQUQgcmVzdHJpY3RzIHRoZQotb3V0cHV0IHRvIGNoZWNraW4gbWVzc2FnZXMgYmVsb25naW5nIHRvIHRoZSBDVlMgaGVhZCAodHJ1bmspLiAgKEl0Ci1wcm9kdWNlcyBzb21lIG91dHB1dCBpZiB0YWcgaXMgYSBub24tYnJhbmNoIHRhZywgYnV0IHRoaXMgb3V0cHV0IGlzCi1ub3QgdmVyeSB1c2VmdWwuKQotCi0taCBwcmludHMgdGhpcyBtZXNzYWdlIGFuZCBleGl0cy4KLQotWFhYIFRoaXMgY29kZSB3YXMgY3JlYXRlZCBieSByZXZlcnNlIGVuZ2luZWVyaW5nIENWUyAxLjkgYW5kIFJDUyA1LjcKLWZyb20gdGhlaXIgb3V0cHV0LgotIiIiCi0KLWltcG9ydCBzeXMsIGVycm5vLCBnZXRvcHQsIHJlCi0KLXNlcDEgPSAnPScqNzcgKyAnXG4nICAgICAgICAgICAgICAgICAgICAjIGZpbGUgc2VwYXJhdG9yCi1zZXAyID0gJy0nKjI4ICsgJ1xuJyAgICAgICAgICAgICAgICAgICAgIyByZXZpc2lvbiBzZXBhcmF0b3IKLQotZGVmIG1haW4oKToKLSAgICAiIiJNYWluIHByb2dyYW0iIiIKLSAgICB0cnVuY2F0ZV9sYXN0ID0gMAotICAgIHJldmVyc2UgPSAwCi0gICAgYnJhbmNoID0gTm9uZQotICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInRyYjpoIikKLSAgICBmb3IgbywgYSBpbiBvcHRzOgotICAgICAgICBpZiBvID09ICctdCc6Ci0gICAgICAgICAgICB0cnVuY2F0ZV9sYXN0ID0gMQotICAgICAgICBlbGlmIG8gPT0gJy1yJzoKLSAgICAgICAgICAgIHJldmVyc2UgPSAxCi0gICAgICAgIGVsaWYgbyA9PSAnLWInOgotICAgICAgICAgICAgYnJhbmNoID0gYQotICAgICAgICBlbGlmIG8gPT0gJy1oJzoKLSAgICAgICAgICAgIHByaW50KF9fZG9jX18pCi0gICAgICAgICAgICBzeXMuZXhpdCgwKQotICAgIGRhdGFiYXNlID0gW10KLSAgICB3aGlsZSAxOgotICAgICAgICBjaHVuayA9IHJlYWRfY2h1bmsoc3lzLnN0ZGluKQotICAgICAgICBpZiBub3QgY2h1bms6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICByZWNvcmRzID0gZGlnZXN0X2NodW5rKGNodW5rLCBicmFuY2gpCi0gICAgICAgIGlmIHRydW5jYXRlX2xhc3Q6Ci0gICAgICAgICAgICBkZWwgcmVjb3Jkc1stMV0KLSAgICAgICAgZGF0YWJhc2VbbGVuKGRhdGFiYXNlKTpdID0gcmVjb3JkcwotICAgIGRhdGFiYXNlLnNvcnQoKQotICAgIGlmIG5vdCByZXZlcnNlOgotICAgICAgICBkYXRhYmFzZS5yZXZlcnNlKCkKLSAgICBmb3JtYXRfb3V0cHV0KGRhdGFiYXNlKQotCi1kZWYgcmVhZF9jaHVuayhmcCk6Ci0gICAgIiIiUmVhZCBhIGNodW5rIC0tIGRhdGEgZm9yIG9uZSBmaWxlLCBlbmRpbmcgd2l0aCBzZXAxLgotCi0gICAgU3BsaXQgdGhlIGNodW5rIGluIHBhcnRzIHNlcGFyYXRlZCBieSBzZXAyLgotCi0gICAgIiIiCi0gICAgY2h1bmsgPSBbXQotICAgIGxpbmVzID0gW10KLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGxpbmUgPT0gc2VwMToKLSAgICAgICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZChsaW5lcykKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGxpbmUgPT0gc2VwMjoKLSAgICAgICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZChsaW5lcykKLSAgICAgICAgICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKLSAgICByZXR1cm4gY2h1bmsKLQotZGVmIGRpZ2VzdF9jaHVuayhjaHVuaywgYnJhbmNoPU5vbmUpOgotICAgICIiIkRpZ2VzdCBhIGNodW5rIC0tIGV4dHJhY3Qgd29ya2luZyBmaWxlIG5hbWUgYW5kIHJldmlzaW9ucyIiIgotICAgIGxpbmVzID0gY2h1bmtbMF0KLSAgICBrZXkgPSAnV29ya2luZyBmaWxlOicKLSAgICBrZXlsZW4gPSBsZW4oa2V5KQotICAgIGZvciBsaW5lIGluIGxpbmVzOgotICAgICAgICBpZiBsaW5lWzprZXlsZW5dID09IGtleToKLSAgICAgICAgICAgIHdvcmtpbmdfZmlsZSA9IGxpbmVba2V5bGVuOl0uc3RyaXAoKQotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICB3b3JraW5nX2ZpbGUgPSBOb25lCi0gICAgaWYgYnJhbmNoIGlzIE5vbmU6Ci0gICAgICAgIHBhc3MKLSAgICBlbGlmIGJyYW5jaCA9PSAiSEVBRCI6Ci0gICAgICAgIGJyYW5jaCA9IHJlLmNvbXBpbGUociJeXGQrXC5cZCskIikKLSAgICBlbHNlOgotICAgICAgICByZXZpc2lvbnMgPSB7fQotICAgICAgICBrZXkgPSAnc3ltYm9saWMgbmFtZXM6XG4nCi0gICAgICAgIGZvdW5kID0gMAotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmIGxpbmUgPT0ga2V5OgotICAgICAgICAgICAgICAgIGZvdW5kID0gMQotICAgICAgICAgICAgZWxpZiBmb3VuZDoKLSAgICAgICAgICAgICAgICBpZiBsaW5lWzBdIGluICdcdCAnOgotICAgICAgICAgICAgICAgICAgICB0YWcsIHJldiA9IGxpbmUuc3BsaXQoKQotICAgICAgICAgICAgICAgICAgICBpZiB0YWdbLTFdID09ICc6JzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZ1s6LTFdCi0gICAgICAgICAgICAgICAgICAgIHJldmlzaW9uc1t0YWddID0gcmV2Ci0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAwCi0gICAgICAgIHJldiA9IHJldmlzaW9ucy5nZXQoYnJhbmNoKQotICAgICAgICBicmFuY2ggPSByZS5jb21waWxlKHIiXjw+JCIpICMgPD4gdG8gZm9yY2UgYSBtaXNtYXRjaCBieSBkZWZhdWx0Ci0gICAgICAgIGlmIHJldjoKLSAgICAgICAgICAgIGlmIHJldi5maW5kKCcuMC4nKSA+PSAwOgotICAgICAgICAgICAgICAgIHJldiA9IHJldi5yZXBsYWNlKCcuMC4nLCAnLicpCi0gICAgICAgICAgICAgICAgYnJhbmNoID0gcmUuY29tcGlsZShyIl4iICsgcmUuZXNjYXBlKHJldikgKyByIlwuXGQrJCIpCi0gICAgcmVjb3JkcyA9IFtdCi0gICAgZm9yIGxpbmVzIGluIGNodW5rWzE6XToKLSAgICAgICAgcmV2bGluZSA9IGxpbmVzWzBdCi0gICAgICAgIGRhdGVsaW5lID0gbGluZXNbMV0KLSAgICAgICAgdGV4dCA9IGxpbmVzWzI6XQotICAgICAgICB3b3JkcyA9IGRhdGVsaW5lLnNwbGl0KCkKLSAgICAgICAgYXV0aG9yID0gTm9uZQotICAgICAgICBpZiBsZW4od29yZHMpID49IDMgYW5kIHdvcmRzWzBdID09ICdkYXRlOic6Ci0gICAgICAgICAgICBkYXRld29yZCA9IHdvcmRzWzFdCi0gICAgICAgICAgICB0aW1ld29yZCA9IHdvcmRzWzJdCi0gICAgICAgICAgICBpZiB0aW1ld29yZFstMTpdID09ICc7JzoKLSAgICAgICAgICAgICAgICB0aW1ld29yZCA9IHRpbWV3b3JkWzotMV0KLSAgICAgICAgICAgIGRhdGUgPSBkYXRld29yZCArICcgJyArIHRpbWV3b3JkCi0gICAgICAgICAgICBpZiBsZW4od29yZHMpID49IDUgYW5kIHdvcmRzWzNdID09ICdhdXRob3I6JzoKLSAgICAgICAgICAgICAgICBhdXRob3IgPSB3b3Jkc1s0XQotICAgICAgICAgICAgICAgIGlmIGF1dGhvclstMTpdID09ICc7JzoKLSAgICAgICAgICAgICAgICAgICAgYXV0aG9yID0gYXV0aG9yWzotMV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRhdGUgPSBOb25lCi0gICAgICAgICAgICB0ZXh0Lmluc2VydCgwLCByZXZsaW5lKQotICAgICAgICB3b3JkcyA9IHJldmxpbmUuc3BsaXQoKQotICAgICAgICBpZiBsZW4od29yZHMpID49IDIgYW5kIHdvcmRzWzBdID09ICdyZXZpc2lvbic6Ci0gICAgICAgICAgICByZXYgPSB3b3Jkc1sxXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBObyAncmV2aXNpb24nIGxpbmUgLS0gd2VpcmQuLi4KLSAgICAgICAgICAgIHJldiA9IE5vbmUKLSAgICAgICAgICAgIHRleHQuaW5zZXJ0KDAsIHJldmxpbmUpCi0gICAgICAgIGlmIGJyYW5jaDoKLSAgICAgICAgICAgIGlmIHJldiBpcyBOb25lIG9yIG5vdCBicmFuY2gubWF0Y2gocmV2KToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZWNvcmRzLmFwcGVuZCgoZGF0ZSwgd29ya2luZ19maWxlLCByZXYsIGF1dGhvciwgdGV4dCkpCi0gICAgcmV0dXJuIHJlY29yZHMKLQotZGVmIGZvcm1hdF9vdXRwdXQoZGF0YWJhc2UpOgotICAgIHByZXZ0ZXh0ID0gTm9uZQotICAgIHByZXYgPSBbXQotICAgIGRhdGFiYXNlLmFwcGVuZCgoTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSkpICMgU2VudGluZWwKLSAgICBmb3IgKGRhdGUsIHdvcmtpbmdfZmlsZSwgcmV2LCBhdXRob3IsIHRleHQpIGluIGRhdGFiYXNlOgotICAgICAgICBpZiB0ZXh0ICE9IHByZXZ0ZXh0OgotICAgICAgICAgICAgaWYgcHJldjoKLSAgICAgICAgICAgICAgICBwcmludChzZXAyLCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgIGZvciAocF9kYXRlLCBwX3dvcmtpbmdfZmlsZSwgcF9yZXYsIHBfYXV0aG9yKSBpbiBwcmV2OgotICAgICAgICAgICAgICAgICAgICBwcmludChwX2RhdGUsIHBfYXV0aG9yLCBwX3dvcmtpbmdfZmlsZSwgcF9yZXYpCi0gICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZWxpbmVzKHByZXZ0ZXh0KQotICAgICAgICAgICAgcHJldiA9IFtdCi0gICAgICAgIHByZXYuYXBwZW5kKChkYXRlLCB3b3JraW5nX2ZpbGUsIHJldiwgYXV0aG9yKSkKLSAgICAgICAgcHJldnRleHQgPSB0ZXh0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdHJ5OgotICAgICAgICBtYWluKCkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgotICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQSVBFOgotICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbWFpbGVyZGFlbW9uLnB5IGIvVG9vbHMvc2NyaXB0cy9tYWlsZXJkYWVtb24ucHkKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQppbmRleCAxNDBjMGIzLi43NDNkYTcyIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL21kNXN1bS5weQorKysgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIlB5dGhvbiB1dGlsaXR5IHRvIHByaW50IE1ENSBjaGVja3N1bXMgb2YgYXJndW1lbnQgZmlsZXMuCiAiIiIKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbWV0aGZpeC5weSBiL1Rvb2xzL3NjcmlwdHMvbWV0aGZpeC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZjVmZTdjZC4uMDAwMDAwMAotLS0gYS9Ub29scy9zY3JpcHRzL21ldGhmaXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIEZpeCBQeXRob24gc291cmNlIGZpbGVzIHRvIGF2b2lkIHVzaW5nCi0jICAgICAgIGRlZiBtZXRob2Qoc2VsZiwgKGFyZzEsIC4uLiwgYXJnbikpOgotIyBpbnN0ZWFkIG9mIHRoZSBtb3JlIHJhdGlvbmFsCi0jICAgICAgIGRlZiBtZXRob2Qoc2VsZiwgYXJnMSwgLi4uLCBhcmduKToKLSMKLSMgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdG8gYmUgcHJvY2Vzc2VkLgotIyBEaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgcmVjdXJzaXZlbHkgZm9yIGZpbGVzIHdob3NlIG5hbWUgbG9va3MKLSMgbGlrZSBhIHB5dGhvbiBtb2R1bGUuCi0jIFN5bWJvbGljIGxpbmtzIGFyZSBhbHdheXMgaWdub3JlZCAoZXhjZXB0IGFzIGV4cGxpY2l0IGRpcmVjdG9yeQotIyBhcmd1bWVudHMpLiAgT2YgY291cnNlLCB0aGUgb3JpZ2luYWwgZmlsZSBpcyBrZXB0IGFzIGEgYmFjay11cAotIyAod2l0aCBhICJ+IiBhdHRhY2hlZCB0byBpdHMgbmFtZSkuCi0jIEl0IGNvbXBsYWlucyBhYm91dCBiaW5hcmllcyAoZmlsZXMgY29udGFpbmluZyBudWxsIGJ5dGVzKQotIyBhbmQgYWJvdXQgZmlsZXMgdGhhdCBhcmUgb3N0ZW5zaWJseSBub3QgUHl0aG9uIGZpbGVzOiBpZiB0aGUgZmlyc3QKLSMgbGluZSBzdGFydHMgd2l0aCAnIyEnIGFuZCBkb2VzIG5vdCBjb250YWluIHRoZSBzdHJpbmcgJ3B5dGhvbicuCi0jCi0jIENoYW5nZXMgbWFkZSBhcmUgcmVwb3J0ZWQgdG8gc3Rkb3V0IGluIGEgZGlmZi1saWtlIGZvcm1hdC4KLSMKLSMgVW5kb3VidGVkbHkgeW91IGNhbiBkbyB0aGlzIHVzaW5nIGZpbmQgYW5kIHNlZCBvciBwZXJsLCBidXQgdGhpcyBpcwotIyBhIG5pY2UgZXhhbXBsZSBvZiBQeXRob24gY29kZSB0aGF0IHJlY3Vyc2VzIGRvd24gYSBkaXJlY3RvcnkgdHJlZQotIyBhbmQgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zLiAgQWxzbyBub3RlIHNldmVyYWwgc3VidGxldGllcyBsaWtlCi0jIHByZXNlcnZpbmcgdGhlIGZpbGUncyBtb2RlIGFuZCBhdm9pZGluZyB0byBldmVuIHdyaXRlIGEgdGVtcCBmaWxlCi0jIHdoZW4gbm8gY2hhbmdlcyBhcmUgbmVlZGVkIGZvciBhIGZpbGUuCi0jCi0jIE5COiBieSBjaGFuZ2luZyBvbmx5IHRoZSBmdW5jdGlvbiBmaXhsaW5lKCkgeW91IGNhbiB0dXJuIHRoaXMKLSMgaW50byBhIHByb2dyYW0gZm9yIGEgZGlmZmVyZW50IGNoYW5nZSB0byBQeXRob24gcHJvZ3JhbXMuLi4KLQotaW1wb3J0IHN5cwotaW1wb3J0IHJlCi1pbXBvcnQgb3MKLWZyb20gc3RhdCBpbXBvcnQgKgotCi1lcnIgPSBzeXMuc3RkZXJyLndyaXRlCi1kYmcgPSBlcnIKLXJlcCA9IHN5cy5zdGRvdXQud3JpdGUKLQotZGVmIG1haW4oKToKLSAgICBiYWQgPSAwCi0gICAgaWYgbm90IHN5cy5hcmd2WzE6XTogIyBObyBhcmd1bWVudHMKLSAgICAgICAgZXJyKCd1c2FnZTogJyArIHN5cy5hcmd2WzBdICsgJyBmaWxlLW9yLWRpcmVjdG9yeSAuLi5cbicpCi0gICAgICAgIHN5cy5leGl0KDIpCi0gICAgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIoYXJnKToKLSAgICAgICAgICAgIGlmIHJlY3Vyc2Vkb3duKGFyZyk6IGJhZCA9IDEKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzbGluayhhcmcpOgotICAgICAgICAgICAgZXJyKGFyZyArICc6IHdpbGwgbm90IHByb2Nlc3Mgc3ltYm9saWMgbGlua3NcbicpCi0gICAgICAgICAgICBiYWQgPSAxCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBmaXgoYXJnKTogYmFkID0gMQotICAgIHN5cy5leGl0KGJhZCkKLQotaXNweXRob25wcm9nID0gcmUuY29tcGlsZSgnXlthLXpBLVowLTlfXStcLnB5JCcpCi1kZWYgaXNweXRob24obmFtZSk6Ci0gICAgcmV0dXJuIGlzcHl0aG9ucHJvZy5tYXRjaChuYW1lKSA+PSAwCi0KLWRlZiByZWN1cnNlZG93bihkaXJuYW1lKToKLSAgICBkYmcoJ3JlY3Vyc2Vkb3duKCVyKVxuJyAlIChkaXJuYW1lLCkpCi0gICAgYmFkID0gMAotICAgIHRyeToKLSAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgZXJyKCclczogY2Fubm90IGxpc3QgZGlyZWN0b3J5OiAlclxuJyAlIChkaXJuYW1lLCBtc2cpKQotICAgICAgICByZXR1cm4gMQotICAgIG5hbWVzLnNvcnQoKQotICAgIHN1YmRpcnMgPSBbXQotICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICBpZiBuYW1lIGluIChvcy5jdXJkaXIsIG9zLnBhcmRpcik6IGNvbnRpbnVlCi0gICAgICAgIGZ1bGxuYW1lID0gb3MucGF0aC5qb2luKGRpcm5hbWUsIG5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNsaW5rKGZ1bGxuYW1lKTogcGFzcwotICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZnVsbG5hbWUpOgotICAgICAgICAgICAgc3ViZGlycy5hcHBlbmQoZnVsbG5hbWUpCi0gICAgICAgIGVsaWYgaXNweXRob24obmFtZSk6Ci0gICAgICAgICAgICBpZiBmaXgoZnVsbG5hbWUpOiBiYWQgPSAxCi0gICAgZm9yIGZ1bGxuYW1lIGluIHN1YmRpcnM6Ci0gICAgICAgIGlmIHJlY3Vyc2Vkb3duKGZ1bGxuYW1lKTogYmFkID0gMQotICAgIHJldHVybiBiYWQKLQotZGVmIGZpeChmaWxlbmFtZSk6Ci0jIyAgZGJnKCdmaXgoJXIpXG4nICUgKGZpbGVuYW1lLCkpCi0gICAgdHJ5OgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgJ3InKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgZXJyKCclczogY2Fubm90IG9wZW46ICVyXG4nICUgKGZpbGVuYW1lLCBtc2cpKQotICAgICAgICByZXR1cm4gMQotICAgIGhlYWQsIHRhaWwgPSBvcy5wYXRoLnNwbGl0KGZpbGVuYW1lKQotICAgIHRlbXBuYW1lID0gb3MucGF0aC5qb2luKGhlYWQsICdAJyArIHRhaWwpCi0gICAgZyA9IE5vbmUKLSAgICAjIElmIHdlIGZpbmQgYSBtYXRjaCwgd2UgcmV3aW5kIHRoZSBmaWxlIGFuZCBzdGFydCBvdmVyIGJ1dAotICAgICMgbm93IGNvcHkgZXZlcnl0aGluZyB0byBhIHRlbXAgZmlsZS4KLSAgICBsaW5lbm8gPSAwCi0gICAgd2hpbGUgMToKLSAgICAgICAgbGluZSA9IGYucmVhZGxpbmUoKQotICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgbGluZW5vID0gbGluZW5vICsgMQotICAgICAgICBpZiBnIGlzIE5vbmUgYW5kICdcMCcgaW4gbGluZToKLSAgICAgICAgICAgICMgQ2hlY2sgZm9yIGJpbmFyeSBmaWxlcwotICAgICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogY29udGFpbnMgbnVsbCBieXRlczsgbm90IGZpeGVkXG4nKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICByZXR1cm4gMQotICAgICAgICBpZiBsaW5lbm8gPT0gMSBhbmQgZyBpcyBOb25lIGFuZCBsaW5lWzoyXSA9PSAnIyEnOgotICAgICAgICAgICAgIyBDaGVjayBmb3Igbm9uLVB5dGhvbiBzY3JpcHRzCi0gICAgICAgICAgICB3b3JkcyA9IGxpbmVbMjpdLnNwbGl0KCkKLSAgICAgICAgICAgIGlmIHdvcmRzIGFuZCByZS5zZWFyY2goJ1twUF15dGhvbicsIHdvcmRzWzBdKSA8IDA6Ci0gICAgICAgICAgICAgICAgbXNnID0gZmlsZW5hbWUgKyAnOiAnICsgd29yZHNbMF0KLSAgICAgICAgICAgICAgICBtc2cgPSBtc2cgKyAnIHNjcmlwdDsgbm90IGZpeGVkXG4nCi0gICAgICAgICAgICAgICAgZXJyKG1zZykKLSAgICAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMQotICAgICAgICB3aGlsZSBsaW5lWy0yOl0gPT0gJ1xcXG4nOgotICAgICAgICAgICAgbmV4dGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBuZXh0bGluZTogYnJlYWsKLSAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbmV4dGxpbmUKLSAgICAgICAgICAgIGxpbmVubyA9IGxpbmVubyArIDEKLSAgICAgICAgbmV3bGluZSA9IGZpeGxpbmUobGluZSkKLSAgICAgICAgaWYgbmV3bGluZSAhPSBsaW5lOgotICAgICAgICAgICAgaWYgZyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZyA9IG9wZW4odGVtcG5hbWUsICd3JykKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICBlcnIoJyVzOiBjYW5ub3QgY3JlYXRlOiAlclxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgICAgICAgICBmLnNlZWsoMCkKLSAgICAgICAgICAgICAgICBsaW5lbm8gPSAwCi0gICAgICAgICAgICAgICAgcmVwKGZpbGVuYW1lICsgJzpcbicpCi0gICAgICAgICAgICAgICAgY29udGludWUgIyByZXN0YXJ0IGZyb20gdGhlIGJlZ2lubmluZwotICAgICAgICAgICAgcmVwKHJlcHIobGluZW5vKSArICdcbicpCi0gICAgICAgICAgICByZXAoJzwgJyArIGxpbmUpCi0gICAgICAgICAgICByZXAoJz4gJyArIG5ld2xpbmUpCi0gICAgICAgIGlmIGcgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBnLndyaXRlKG5ld2xpbmUpCi0KLSAgICAjIEVuZCBvZiBmaWxlCi0gICAgZi5jbG9zZSgpCi0gICAgaWYgbm90IGc6IHJldHVybiAwICMgTm8gY2hhbmdlcwotCi0gICAgIyBGaW5pc2hpbmcgdG91Y2ggLS0gbW92ZSBmaWxlcwotCi0gICAgIyBGaXJzdCBjb3B5IHRoZSBmaWxlJ3MgbW9kZSB0byB0aGUgdGVtcCBmaWxlCi0gICAgdHJ5OgotICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKLSAgICAgICAgb3MuY2htb2QodGVtcG5hbWUsIHN0YXRidWZbU1RfTU9ERV0gJiAwbzc3NzcpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgZXJyKCclczogd2FybmluZzogY2htb2QgZmFpbGVkICglcilcbicgJSAodGVtcG5hbWUsIG1zZykpCi0gICAgIyBUaGVuIG1ha2UgYSBiYWNrdXAgb2YgdGhlIG9yaWdpbmFsIGZpbGUgYXMgZmlsZW5hbWV+Ci0gICAgdHJ5OgotICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGZpbGVuYW1lICsgJ34nKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKLSAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKLSAgICB0cnk6Ci0gICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgZXJyKCclczogcmVuYW1lIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQotICAgICAgICByZXR1cm4gMQotICAgICMgUmV0dXJuIHN1Y2NlcwotICAgIHJldHVybiAwCi0KLQotZml4cGF0ID0gJ15bIFx0XStkZWYgK1thLXpBLVowLTlfXSsgKiggKnNlbGYgKiwgKigoICooLiopICopKSAqKSAqOicKLWZpeHByb2cgPSByZS5jb21waWxlKGZpeHBhdCkKLQotZGVmIGZpeGxpbmUobGluZSk6Ci0gICAgaWYgZml4cHJvZy5tYXRjaChsaW5lKSA+PSAwOgotICAgICAgICAoYSwgYiksIChjLCBkKSA9IGZpeHByb2cucmVnc1sxOjNdCi0gICAgICAgIGxpbmUgPSBsaW5lWzphXSArIGxpbmVbYzpkXSArIGxpbmVbYjpdCi0gICAgcmV0dXJuIGxpbmUKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbWtyZWFsLnB5IGIvVG9vbHMvc2NyaXB0cy9ta3JlYWwucHkKaW5kZXggOGJjMmVjMS4uYjIxOTA5ZSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ta3JlYWwucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ta3JlYWwucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIG1rcmVhbAogIwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9uZGlmZi5weSBiL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKaW5kZXggYzYwYzhhOC4uMjQyMjA5MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQorKysgYi9Ub29scy9zY3JpcHRzL25kaWZmLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBNb2R1bGUgbmRpZmYgdmVyc2lvbiAxLjcuMAogIyBSZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiAwOC1EZWMtMjAwMCwKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbm0yZGVmLnB5IGIvVG9vbHMvc2NyaXB0cy9ubTJkZWYucHkKaW5kZXggOWRmYjk5MS4uOGYwNzU1OSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ubTJkZWYucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9ubTJkZWYucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIibm0yZGVmLnB5CiAKIEhlbHBlcnMgdG8gZXh0cmFjdCBzeW1ib2xzIGZyb20gVW5peCBsaWJzIGFuZCBhdXRvLWdlbmVyYXRlCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL29iamdyYXBoLnB5IGIvVG9vbHMvc2NyaXB0cy9vYmpncmFwaC5weQppbmRleCAwOTc1YTNiLi4xZTFmY2UwIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL29iamdyYXBoLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvb2JqZ3JhcGgucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIG9iamdyYXBoCiAjCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhcnNlZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlZW50aXRpZXMucHkKaW5kZXggOGQ5MzE2Ny4uNWIwZjFjNiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXJzZWVudGl0aWVzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGFyc2VlbnRpdGllcy5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAiIiIgVXRpbGl0eSBmb3IgcGFyc2luZyBIVE1MIGVudGl0eSBkZWZpbml0aW9ucyBhdmFpbGFibGUgZnJvbToKIAogICAgICAgaHR0cDovL3d3dy53My5vcmcvIGFzIGUuZy4KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weSBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQppbmRleCA2Y2JhYzEwLi5kZDA4ZTBhIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CkBAIC0zMCwyMCArMzAsMjQgQEAKIHJlcCA9IHN5cy5zdGRvdXQud3JpdGUKIAogbmV3X2ludGVycHJldGVyID0gTm9uZQorcHJlc2VydmVfdGltZXN0YW1wcyA9IEZhbHNlCiAKIGRlZiBtYWluKCk6CiAgICAgZ2xvYmFsIG5ld19pbnRlcnByZXRlcgotICAgIHVzYWdlID0gKCd1c2FnZTogJXMgLWkgL2ludGVycHJldGVyIGZpbGUtb3ItZGlyZWN0b3J5IC4uLlxuJyAlCisgICAgZ2xvYmFsIHByZXNlcnZlX3RpbWVzdGFtcHMKKyAgICB1c2FnZSA9ICgndXNhZ2U6ICVzIC1pIC9pbnRlcnByZXRlciAtcCBmaWxlLW9yLWRpcmVjdG9yeSAuLi5cbicgJQogICAgICAgICAgICAgIHN5cy5hcmd2WzBdKQogICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaTonKQorICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICdpOnAnKQogICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICBlcnIobXNnICsgJ1xuJykKKyAgICAgICAgZXJyKHN0cihtc2cpICsgJ1xuJykKICAgICAgICAgZXJyKHVzYWdlKQogICAgICAgICBzeXMuZXhpdCgyKQogICAgIGZvciBvLCBhIGluIG9wdHM6CiAgICAgICAgIGlmIG8gPT0gJy1pJzoKICAgICAgICAgICAgIG5ld19pbnRlcnByZXRlciA9IGEuZW5jb2RlKCkKKyAgICAgICAgaWYgbyA9PSAnLXAnOgorICAgICAgICAgICAgcHJlc2VydmVfdGltZXN0YW1wcyA9IFRydWUKICAgICBpZiBub3QgbmV3X2ludGVycHJldGVyIG9yIG5vdCBuZXdfaW50ZXJwcmV0ZXIuc3RhcnRzd2l0aChiJy8nKSBvciBcCiAgICAgICAgICAgIG5vdCBhcmdzOgogICAgICAgICBlcnIoJy1pIG9wdGlvbiBvciBmaWxlLW9yLWRpcmVjdG9yeSBtaXNzaW5nXG4nKQpAQCAtMTE5LDkgKzEyMywxMyBAQAogCiAgICAgIyBGaW5pc2hpbmcgdG91Y2ggLS0gbW92ZSBmaWxlcwogCisgICAgbXRpbWUgPSBOb25lCisgICAgYXRpbWUgPSBOb25lCiAgICAgIyBGaXJzdCBjb3B5IHRoZSBmaWxlJ3MgbW9kZSB0byB0aGUgdGVtcCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBzdGF0YnVmID0gb3Muc3RhdChmaWxlbmFtZSkKKyAgICAgICAgbXRpbWUgPSBzdGF0YnVmLnN0X210aW1lCisgICAgICAgIGF0aW1lID0gc3RhdGJ1Zi5zdF9hdGltZQogICAgICAgICBvcy5jaG1vZCh0ZW1wbmFtZSwgc3RhdGJ1ZltTVF9NT0RFXSAmIDBvNzc3NykKICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKQEAgLTEzNiw2ICsxNDQsMTMgQEAKICAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiByZW5hbWUgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCisgICAgaWYgcHJlc2VydmVfdGltZXN0YW1wczoKKyAgICAgICAgaWYgYXRpbWUgYW5kIG10aW1lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCAoYXRpbWUsIG10aW1lKSkKKyAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgICAgICAgICAgZXJyKCclczogcmVzZXQgb2YgdGltZXN0YW1wIGZhaWxlZCAoJXIpXG4nICUgKGZpbGVuYW1lLCBtc2cpKQorICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgIyBSZXR1cm4gc3VjY2VzCiAgICAgcmV0dXJuIDAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9wZGVwcy5weSBiL1Rvb2xzL3NjcmlwdHMvcGRlcHMucHkKaW5kZXggNWM1YTA1Yi4uOTM4ZjMxYyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wZGVwcy5weQorKysgYi9Ub29scy9zY3JpcHRzL3BkZXBzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBwZGVwcwogIwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9waWNrbGUyZGIucHkgYi9Ub29scy9zY3JpcHRzL3BpY2tsZTJkYi5weQppbmRleCBhNDNmZmFlLi5iNWI2NTcxIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3BpY2tsZTJkYi5weQorKysgYi9Ub29scy9zY3JpcHRzL3BpY2tsZTJkYi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKIFN5bm9wc2lzOiAlKHByb2cpcyBbLWh8LWJ8LWd8LXJ8LWF8LWRdIFsgcGlja2xlZmlsZSBdIGRiZmlsZQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CmluZGV4IDNmMzAwMGQuLjE1YjYzOTkgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQorKysgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIFRoaXMgZmlsZSBjb250YWlucyBhIGNsYXNzIGFuZCBhIG1haW4gcHJvZ3JhbSB0aGF0IHBlcmZvcm0gdGhyZWUKICMgcmVsYXRlZCAodGhvdWdoIGNvbXBsaW1lbnRhcnkpIGZvcm1hdHRpbmcgb3BlcmF0aW9ucyBvbiBQeXRob24KQEAgLTg4LDEwICs4OCwxMCBAQAogbmV4dFsnaWYnXSA9IG5leHRbJ2VsaWYnXSA9ICdlbGlmJywgJ2Vsc2UnLCAnZW5kJwogbmV4dFsnd2hpbGUnXSA9IG5leHRbJ2ZvciddID0gJ2Vsc2UnLCAnZW5kJwogbmV4dFsndHJ5J10gPSAnZXhjZXB0JywgJ2ZpbmFsbHknCi1uZXh0WydleGNlcHQnXSA9ICdleGNlcHQnLCAnZWxzZScsICdlbmQnCituZXh0WydleGNlcHQnXSA9ICdleGNlcHQnLCAnZWxzZScsICdmaW5hbGx5JywgJ2VuZCcKIG5leHRbJ2Vsc2UnXSA9IG5leHRbJ2ZpbmFsbHknXSA9IG5leHRbJ2RlZiddID0gbmV4dFsnY2xhc3MnXSA9ICdlbmQnCiBuZXh0WydlbmQnXSA9ICgpCi1zdGFydCA9ICdpZicsICd3aGlsZScsICdmb3InLCAndHJ5JywgJ2RlZicsICdjbGFzcycKK3N0YXJ0ID0gJ2lmJywgJ3doaWxlJywgJ2ZvcicsICd0cnknLCAnd2l0aCcsICdkZWYnLCAnY2xhc3MnCiAKIGNsYXNzIFB5dGhvbkluZGVudGVyOgogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B0YWdzLnB5IGIvVG9vbHMvc2NyaXB0cy9wdGFncy5weQppbmRleCBhYzAxMzU2Li5jYTY0M2IzIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3B0YWdzLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcHRhZ3MucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIHB0YWdzCiAjCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5c291cmNlLnB5IGIvVG9vbHMvc2NyaXB0cy9weXNvdXJjZS5weQppbmRleCAwNWMyYjg2Li4wNDgxMzFlIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3B5c291cmNlLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcHlzb3VyY2UucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiXAogTGlzdCBweXRob24gc291cmNlIGZpbGVzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weSBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKaW5kZXggODU1N2I1ZC4uYmI0MTUyMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBSZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYnkgVGltIFBldGVycywgMDMgT2N0b2JlciAyMDAwLgogCkBAIC00MiwyNiArNDIsMjcgQEAKIF9fdmVyc2lvbl9fID0gIjEiCiAKIGltcG9ydCB0b2tlbml6ZQotaW1wb3J0IG9zLCBzaHV0aWwKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogCi12ZXJib3NlICAgID0gMAotcmVjdXJzZSAgICA9IDAKLWRyeXJ1biAgICAgPSAwCit2ZXJib3NlID0gRmFsc2UKK3JlY3Vyc2UgPSBGYWxzZQorZHJ5cnVuID0gRmFsc2UKIG1ha2ViYWNrdXAgPSBUcnVlCiAKKwogZGVmIHVzYWdlKG1zZz1Ob25lKToKLSAgICBpZiBtc2cgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgIHByaW50KF9fZG9jX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgbXNnID0gX19kb2NfXworICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorCiAKIGRlZiBlcnJwcmludCgqYXJncyk6Ci0gICAgc2VwID0gIiIKLSAgICBmb3IgYXJnIGluIGFyZ3M6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoc2VwICsgc3RyKGFyZykpCi0gICAgICAgIHNlcCA9ICIgIgorICAgIHN5cy5zdGRlcnIud3JpdGUoIiAiLmpvaW4oc3RyKGFyZykgZm9yIGFyZyBpbiBhcmdzKSkKICAgICBzeXMuc3RkZXJyLndyaXRlKCJcbiIpCiAKKwogZGVmIG1haW4oKToKICAgICBpbXBvcnQgZ2V0b3B0CiAgICAgZ2xvYmFsIHZlcmJvc2UsIHJlY3Vyc2UsIGRyeXJ1biwgbWFrZWJhY2t1cApAQCAtNzMsMTMgKzc0LDEzIEBACiAgICAgICAgIHJldHVybgogICAgIGZvciBvLCBhIGluIG9wdHM6CiAgICAgICAgIGlmIG8gaW4gKCctZCcsICctLWRyeXJ1bicpOgotICAgICAgICAgICAgZHJ5cnVuICs9IDEKKyAgICAgICAgICAgIGRyeXJ1biA9IFRydWUKICAgICAgICAgZWxpZiBvIGluICgnLXInLCAnLS1yZWN1cnNlJyk6Ci0gICAgICAgICAgICByZWN1cnNlICs9IDEKKyAgICAgICAgICAgIHJlY3Vyc2UgPSBUcnVlCiAgICAgICAgIGVsaWYgbyBpbiAoJy1uJywgJy0tbm9iYWNrdXAnKToKICAgICAgICAgICAgIG1ha2ViYWNrdXAgPSBGYWxzZQogICAgICAgICBlbGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKLSAgICAgICAgICAgIHZlcmJvc2UgKz0gMQorICAgICAgICAgICAgdmVyYm9zZSA9IFRydWUKICAgICAgICAgZWxpZiBvIGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTkxLDYgKzkyLDcgQEAKICAgICBmb3IgYXJnIGluIGFyZ3M6CiAgICAgICAgIGNoZWNrKGFyZykKIAorCiBkZWYgY2hlY2soZmlsZSk6CiAgICAgaWYgb3MucGF0aC5pc2RpcihmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKGZpbGUpOgogICAgICAgICBpZiB2ZXJib3NlOgpAQCAtMTA3LDE0ICsxMDksMTUgQEAKIAogICAgIGlmIHZlcmJvc2U6CiAgICAgICAgIHByaW50KCJjaGVja2luZyIsIGZpbGUsICIuLi4iLCBlbmQ9JyAnKQorICAgIHdpdGggIG9wZW4oZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgZW5jb2RpbmcsIF8gPSB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmcoZi5yZWFkbGluZSkKICAgICB0cnk6Ci0gICAgICAgIGYgPSBvcGVuKGZpbGUpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgIHIgPSBSZWluZGVudGVyKGYpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnJwcmludCgiJXM6IEkvTyBFcnJvcjogJXMiICUgKGZpbGUsIHN0cihtc2cpKSkKICAgICAgICAgcmV0dXJuCiAKLSAgICByID0gUmVpbmRlbnRlcihmKQotICAgIGYuY2xvc2UoKQogICAgIGlmIHIucnVuKCk6CiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgiY2hhbmdlZC4iKQpAQCAtMTI2LDkgKzEyOSw4IEBACiAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKGZpbGUsIGJhaykKICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgiYmFja2VkIHVwIiwgZmlsZSwgInRvIiwgYmFrKQotICAgICAgICAgICAgZiA9IG9wZW4oZmlsZSwgInciKQotICAgICAgICAgICAgci53cml0ZShmKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZSwgInciLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICByLndyaXRlKGYpCiAgICAgICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgICAgIHByaW50KCJ3cm90ZSBuZXciLCBmaWxlKQogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtMTM3LDYgKzEzOSw3IEBACiAgICAgICAgICAgICBwcmludCgidW5jaGFuZ2VkLiIpCiAgICAgICAgIHJldHVybiBGYWxzZQogCisKIGRlZiBfcnN0cmlwKGxpbmUsIEpVTks9J1xuIFx0Jyk6CiAgICAgIiIiUmV0dXJuIGxpbmUgc3RyaXBwZWQgb2YgdHJhaWxpbmcgc3BhY2VzLCB0YWJzLCBuZXdsaW5lcy4KIApAQCAtMTQ2LDEwICsxNDksMTEgQEAKICAgICAiIiIKIAogICAgIGkgPSBsZW4obGluZSkKLSAgICB3aGlsZSBpID4gMCBhbmQgbGluZVtpLTFdIGluIEpVTks6CisgICAgd2hpbGUgaSA+IDAgYW5kIGxpbmVbaSAtIDFdIGluIEpVTks6CiAgICAgICAgIGkgLT0gMQogICAgIHJldHVybiBsaW5lWzppXQogCisKIGNsYXNzIFJlaW5kZW50ZXI6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZik6CkBAIC0xOTIsOSArMTk2LDkgQEAKICAgICAgICAgIyB3ZSBzZWUgYSBsaW5lIHdpdGggKnNvbWV0aGluZyogb24gaXQuCiAgICAgICAgIGkgPSBzdGF0c1swXVswXQogICAgICAgICBhZnRlci5leHRlbmQobGluZXNbMTppXSkKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHN0YXRzKS0xKToKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHN0YXRzKSAtIDEpOgogICAgICAgICAgICAgdGhpc3N0bXQsIHRoaXNsZXZlbCA9IHN0YXRzW2ldCi0gICAgICAgICAgICBuZXh0c3RtdCA9IHN0YXRzW2krMV1bMF0KKyAgICAgICAgICAgIG5leHRzdG10ID0gc3RhdHNbaSArIDFdWzBdCiAgICAgICAgICAgICBoYXZlID0gZ2V0bHNwYWNlKGxpbmVzW3RoaXNzdG10XSkKICAgICAgICAgICAgIHdhbnQgPSB0aGlzbGV2ZWwgKiA0CiAgICAgICAgICAgICBpZiB3YW50IDwgMDoKQEAgLTIwNiw3ICsyMTAsNyBAQAogICAgICAgICAgICAgICAgICAgICB3YW50ID0gaGF2ZTJ3YW50LmdldChoYXZlLCAtMSkKICAgICAgICAgICAgICAgICAgICAgaWYgd2FudCA8IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZW4gaXQgcHJvYmFibHkgYmVsb25ncyB0byB0aGUgbmV4dCByZWFsIHN0bXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpKzEsIGxlbihzdGF0cyktMSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaiBpbiByYW5nZShpICsgMSwgbGVuKHN0YXRzKSAtIDEpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsaW5lLCBqbGV2ZWwgPSBzdGF0c1tqXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGpsZXZlbCA+PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXZlID09IGdldGxzcGFjZShsaW5lc1tqbGluZV0pOgpAQCAtMjE2LDExICsyMjAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbW1lbnQgbGlrZSB0aGlzIG9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgc2hpZnQgaXQgbGlrZSBpdHMgYmFzZQogICAgICAgICAgICAgICAgICAgICAgICAgIyBsaW5lIGdvdCBzaGlmdGVkLgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaS0xLCAtMSwgLTEpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gcmFuZ2UoaSAtIDEsIC0xLCAtMSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxpbmUsIGpsZXZlbCA9IHN0YXRzW2pdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgamxldmVsID49IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgPSBoYXZlICsgZ2V0bHNwYWNlKGFmdGVyW2psaW5lLTFdKSAtIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGxzcGFjZShsaW5lc1tqbGluZV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbnQgPSBoYXZlICsgKGdldGxzcGFjZShhZnRlcltqbGluZSAtIDFdKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGxzcGFjZShsaW5lc1tqbGluZV0pKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBpZiB3YW50IDwgMDoKICAgICAgICAgICAgICAgICAgICAgICAgICMgU3RpbGwgbm8gbHVjayAtLSBsZWF2ZSBpdCBhbG9uZS4KQEAgLTI5NSw2ICsyOTksNyBAQAogICAgICAgICAgICAgaWYgbGluZTogICAjIG5vdCBlbmRtYXJrZXIKICAgICAgICAgICAgICAgICBzZWxmLnN0YXRzLmFwcGVuZCgoc2xpbmVjb2xbMF0sIHNlbGYubGV2ZWwpKQogCisKICMgQ291bnQgbnVtYmVyIG9mIGxlYWRpbmcgYmxhbmtzLgogZGVmIGdldGxzcGFjZShsaW5lKToKICAgICBpLCBuID0gMCwgbGVuKGxpbmUpCkBAIC0zMDIsNSArMzA3LDYgQEAKICAgICAgICAgaSArPSAxCiAgICAgcmV0dXJuIGkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9yZ3JlcC5weSBiL1Rvb2xzL3NjcmlwdHMvcmdyZXAucHkKaW5kZXggMTJkNzM2ZS4uMTkxN2UwNSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9yZ3JlcC5weQorKysgYi9Ub29scy9zY3JpcHRzL3JncmVwLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiUmV2ZXJzZSBncmVwLgogCkBAIC05LDggKzksOSBAQAogaW1wb3J0IHJlCiBpbXBvcnQgZ2V0b3B0CiAKKwogZGVmIG1haW4oKToKLSAgICBidWZzaXplID0gNjQqMTAyNAorICAgIGJ1ZnNpemUgPSA2NCAqIDEwMjQKICAgICByZWZsYWdzID0gMAogICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImkiKQogICAgIGZvciBvLCBhIGluIG9wdHM6CkBAIC0yNCwxMSArMjUsMTEgQEAKICAgICB0cnk6CiAgICAgICAgIHByb2cgPSByZS5jb21waWxlKHBhdHRlcm4sIHJlZmxhZ3MpCiAgICAgZXhjZXB0IHJlLmVycm9yIGFzIG1zZzoKLSAgICAgICAgdXNhZ2UoImVycm9yIGluIHJlZ3VsYXIgZXhwcmVzc2lvbjogJXMiICUgc3RyKG1zZykpCisgICAgICAgIHVzYWdlKCJlcnJvciBpbiByZWd1bGFyIGV4cHJlc3Npb246ICVzIiAlIG1zZykKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQogICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKLSAgICAgICAgdXNhZ2UoImNhbid0IG9wZW4gJXM6ICVzIiAlIChyZXByKGZpbGVuYW1lKSwgc3RyKG1zZykpLCAxKQorICAgICAgICB1c2FnZSgiY2FuJ3Qgb3BlbiAlcjogJXMiICUgKGZpbGVuYW1lLCBtc2cpLCAxKQogICAgIGYuc2VlaygwLCAyKQogICAgIHBvcyA9IGYudGVsbCgpCiAgICAgbGVmdG92ZXIgPSBOb25lCkBAIC00OSwxNiArNTAsMTcgQEAKICAgICAgICAgICAgIGRlbCBsaW5lc1swXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGVmdG92ZXIgPSBOb25lCi0gICAgICAgIGxpbmVzLnJldmVyc2UoKQotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgZm9yIGxpbmUgaW4gcmV2ZXJzZWQobGluZXMpOgogICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGluZSk6CiAgICAgICAgICAgICAgICAgcHJpbnQobGluZSkKIAorCiBkZWYgdXNhZ2UobXNnLCBjb2RlPTIpOgogICAgIHN5cy5zdGRvdXQgPSBzeXMuc3RkZXJyCiAgICAgcHJpbnQobXNnKQogICAgIHByaW50KF9fZG9jX18pCiAgICAgc3lzLmV4aXQoY29kZSkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9zZXJ2ZS5weSBiL1Rvb2xzL3NjcmlwdHMvc2VydmUucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODliM2Q2MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvc2VydmUucHkKQEAgLTAsMCArMSwzNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworJycnCitTbWFsbCB3c2dpcmVmIGJhc2VkIHdlYiBzZXJ2ZXIuIFRha2VzIGEgcGF0aCB0byBzZXJ2ZSBmcm9tIGFuZCBhbgorb3B0aW9uYWwgcG9ydCBudW1iZXIgKGRlZmF1bHRzIHRvIDgwMDApLCB0aGVuIHRyaWVzIHRvIHNlcnZlIGZpbGVzLgorTWltZSB0eXBlcyBhcmUgZ3Vlc3NlZCBmcm9tIHRoZSBmaWxlIG5hbWVzLCA0MDQgZXJyb3JzIGFyZSB0aHJvd24KK2lmIHRoZSBmaWxlIGlzIG5vdCBmb3VuZC4gVXNlZCBmb3IgdGhlIG1ha2Ugc2VydmUgdGFyZ2V0IGluIERvYy4KKycnJworaW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgbWltZXR5cGVzCitmcm9tIHdzZ2lyZWYgaW1wb3J0IHNpbXBsZV9zZXJ2ZXIsIHV0aWwKKworZGVmIGFwcChlbnZpcm9uLCByZXNwb25kKToKKworICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGVudmlyb25bJ1BBVEhfSU5GTyddWzE6XSkKKyAgICBpZiAnLicgbm90IGluIGZuLnNwbGl0KG9zLnBhdGguc2VwKVstMV06CisgICAgICAgIGZuID0gb3MucGF0aC5qb2luKGZuLCAnaW5kZXguaHRtbCcpCisgICAgdHlwZSA9IG1pbWV0eXBlcy5ndWVzc190eXBlKGZuKVswXQorCisgICAgaWYgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICByZXNwb25kKCcyMDAgT0snLCBbKCdDb250ZW50LVR5cGUnLCB0eXBlKV0pCisgICAgICAgIHJldHVybiB1dGlsLkZpbGVXcmFwcGVyKG9wZW4oZm4sICJyYiIpKQorICAgIGVsc2U6CisgICAgICAgIHJlc3BvbmQoJzQwNCBOb3QgRm91bmQnLCBbKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXSkKKyAgICAgICAgcmV0dXJuIFsnbm90IGZvdW5kJ10KKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwYXRoID0gc3lzLmFyZ3ZbMV0KKyAgICBwb3J0ID0gaW50KHN5cy5hcmd2WzJdKSBpZiBsZW4oc3lzLmFyZ3YpID4gMiBlbHNlIDgwMDAKKyAgICBodHRwZCA9IHNpbXBsZV9zZXJ2ZXIubWFrZV9zZXJ2ZXIoJycsIHBvcnQsIGFwcCkKKyAgICBwcmludCgiU2VydmluZyB7fSBvbiBwb3J0IHt9LCBjb250cm9sLUMgdG8gc3RvcCIuZm9ybWF0KHBhdGgsIHBvcnQpKQorICAgIHRyeToKKyAgICAgICAgaHR0cGQuc2VydmVfZm9yZXZlcigpCisgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICBwcmludCgiXGJcYlNodXR0aW5nIGRvd24uIikKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvc2V0dXAucHkgYi9Ub29scy9zY3JpcHRzL3NldHVwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTUwMzY4Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL3NjcmlwdHMvc2V0dXAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBzZXR1cAotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHNldHVwKAotICAgICAgc2NyaXB0cz1bCi0gICAgICAgICdieXRleWVhcnMucHknLAotICAgICAgICAnY2hlY2tweWMucHknLAotICAgICAgICAnY29weXRpbWUucHknLAotICAgICAgICAnY3JsZi5weScsCi0gICAgICAgICdkdXRyZWUucHknLAotICAgICAgICAnZnRwbWlycm9yLnB5JywKLSAgICAgICAgJ2gycHkucHknLAotICAgICAgICAnbGZjci5weScsCi0gICAgICAgICcuLi9pMThuL3B5Z2V0dGV4dC5weScsCi0gICAgICAgICdsb2dtZXJnZS5weScsCi0gICAgICAgICcuLi8uLi9MaWIvdGFibmFubnkucHknLAotICAgICAgICAnLi4vLi4vTGliL3RpbWVpdC5weScsCi0gICAgICAgICd1bnRhYmlmeS5weScsCi0gICAgICAgIF0sCi0gICAgICApCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3N1ZmYucHkgYi9Ub29scy9zY3JpcHRzL3N1ZmYucHkKaW5kZXggNDYyZWMzMi4uMGVlYTBkNyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9zdWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvc3VmZi5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICMgc3VmZgogIwpAQCAtNiwyNCArNiwyMSBAQAogCiBpbXBvcnQgc3lzCiAKKwogZGVmIG1haW4oKToKICAgICBmaWxlcyA9IHN5cy5hcmd2WzE6XQogICAgIHN1ZmZpeGVzID0ge30KICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CiAgICAgICAgIHN1ZmYgPSBnZXRzdWZmaXgoZmlsZW5hbWUpCi0gICAgICAgIGlmIHN1ZmYgbm90IGluIHN1ZmZpeGVzOgotICAgICAgICAgICAgc3VmZml4ZXNbc3VmZl0gPSBbXQotICAgICAgICBzdWZmaXhlc1tzdWZmXS5hcHBlbmQoZmlsZW5hbWUpCi0gICAga2V5cyA9IHNvcnRlZChzdWZmaXhlcy5rZXlzKCkpCi0gICAgZm9yIHN1ZmYgaW4ga2V5czoKLSAgICAgICAgcHJpbnQocmVwcihzdWZmKSwgbGVuKHN1ZmZpeGVzW3N1ZmZdKSkKKyAgICAgICAgc3VmZml4ZXMuc2V0ZGVmYXVsdChzdWZmLCBbXSkuYXBwZW5kKGZpbGVuYW1lKQorICAgIGZvciBzdWZmLCBmaWxlbmFtZXMgaW4gc29ydGVkKHN1ZmZpeGVzLml0ZW1zKCkpOgorICAgICAgICBwcmludChyZXByKHN1ZmYpLCBsZW4oZmlsZW5hbWVzKSkKKwogCiBkZWYgZ2V0c3VmZml4KGZpbGVuYW1lKToKLSAgICBzdWZmID0gJycKLSAgICBmb3IgaSBpbiByYW5nZShsZW4oZmlsZW5hbWUpKToKLSAgICAgICAgaWYgZmlsZW5hbWVbaV0gPT0gJy4nOgotICAgICAgICAgICAgc3VmZiA9IGZpbGVuYW1lW2k6XQotICAgIHJldHVybiBzdWZmCisgICAgbmFtZSwgc2VwLCBzdWZmID0gZmlsZW5hbWUucnBhcnRpdGlvbignLicpCisgICAgcmV0dXJuIHNlcCArIHN1ZmYgaWYgc2VwIGVsc2UgJycKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9zdm5lb2wucHkgYi9Ub29scy9zY3JpcHRzL3N2bmVvbC5weQppbmRleCA5MzU3YzdlLi44YWJkZDAxIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3N2bmVvbC5weQorKysgYi9Ub29scy9zY3JpcHRzL3N2bmVvbC5weQpAQCAtMSw0ICsxLDQgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KKyMhIC91c3IvYmluL2VudiBweXRob24zCiAKICIiIgogU1ZOIGhlbHBlciBzY3JpcHQuCkBAIC0zMiw5ICszMiwxMiBAQAogCiBpbXBvcnQgcmUKIGltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKKwogCiBkZWYgcHJvcGZpbGVzKHJvb3QsIGZuKToKLSAgICBkZWZhdWx0ID0gb3MucGF0aC5qb2luKHJvb3QsICIuc3ZuIiwgInByb3BzIiwgZm4rIi5zdm4td29yayIpCisgICAgZGVmYXVsdCA9IG9zLnBhdGguam9pbihyb290LCAiLnN2biIsICJwcm9wcyIsIGZuICsgIi5zdm4td29yayIpCiAgICAgdHJ5OgogICAgICAgICBmb3JtYXQgPSBpbnQob3Blbihvcy5wYXRoLmpvaW4ocm9vdCwgIi5zdm4iLCAiZm9ybWF0IikpLnJlYWQoKS5zdHJpcCgpKQogICAgIGV4Y2VwdCBJT0Vycm9yOgpAQCAtNDIsMTIgKzQ1LDEzIEBACiAgICAgaWYgZm9ybWF0IGluICg4LCA5KToKICAgICAgICAgIyBJbiB2ZXJzaW9uIDggYW5kIDksIGNvbW1pdHRlZCBwcm9wcyBhcmUgc3RvcmVkIGluIHByb3AtYmFzZSwgbG9jYWwKICAgICAgICAgIyBtb2RpZmljYXRpb25zIGluIHByb3BzCi0gICAgICAgIHJldHVybiBbb3MucGF0aC5qb2luKHJvb3QsICIuc3ZuIiwgInByb3AtYmFzZSIsIGZuKyIuc3ZuLWJhc2UiKSwKLSAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocm9vdCwgIi5zdm4iLCAicHJvcHMiLCBmbisiLnN2bi13b3JrIildCi0gICAgcmFpc2UgVmFsdWVFcnJvciwgIlVua25vd24gcmVwb3NpdG9yeSBmb3JtYXQiCisgICAgICAgIHJldHVybiBbb3MucGF0aC5qb2luKHJvb3QsICIuc3ZuIiwgInByb3AtYmFzZSIsIGZuICsgIi5zdm4tYmFzZSIpLAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyb290LCAiLnN2biIsICJwcm9wcyIsIGZuICsgIi5zdm4td29yayIpXQorICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gcmVwb3NpdG9yeSBmb3JtYXQiKQorCiAKIGRlZiBwcm9wbGlzdChyb290LCBmbik6Ci0gICAgIlJldHVybiBhIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgZm9yIGZpbGUgZm4gaW4gZGlyZWN0b3J5IHJvb3QiCisgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lcyBmb3IgZmlsZSBmbiBpbiBkaXJlY3Rvcnkgcm9vdC4iIiIKICAgICByZXN1bHQgPSBbXQogICAgIGZvciBwYXRoIGluIHByb3BmaWxlcyhyb290LCBmbik6CiAgICAgICAgIHRyeToKQEAgLTU2LDcgKzYwLDcgQEAKICAgICAgICAgICAgICMgbm8gcHJvcGVydGllcyBmaWxlOiBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sLAogICAgICAgICAgICAgIyBvciBubyBwcm9wZXJ0aWVzIHNldAogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgd2hpbGUgMToKKyAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICMga2V5LXZhbHVlIHBhaXJzLCBvZiB0aGUgZm9ybQogICAgICAgICAgICAgIyBLIDxsZW5ndGg+CiAgICAgICAgICAgICAjIDxrZXluYW1lPk5MCkBAIC03OSwxMyArODMsMzIgQEAKICAgICAgICAgZi5jbG9zZSgpCiAgICAgcmV0dXJuIHJlc3VsdAogCisKK2RlZiBzZXRfZW9sX25hdGl2ZShwYXRoKToKKyAgICBjbWQgPSAnc3ZuIHByb3BzZXQgc3ZuOmVvbC1zdHlsZSBuYXRpdmUgInt9IicuZm9ybWF0KHBhdGgpCisgICAgcHJvcHNldCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzaGVsbD1UcnVlKQorICAgIHByb3BzZXQud2FpdCgpCisKKwogcG9zc2libGVfdGV4dF9maWxlID0gcmUuY29tcGlsZShyIlwuKFtoY118cHl8dHh0fHNsbnx2Y3Byb2opJCIpLnNlYXJjaAogCi1mb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsaygnLicpOgotICAgIGlmICcuc3ZuJyBpbiBkaXJzOgotICAgICAgICBkaXJzLnJlbW92ZSgnLnN2bicpCi0gICAgZm9yIGZuIGluIGZpbGVzOgotICAgICAgICBpZiBwb3NzaWJsZV90ZXh0X2ZpbGUoZm4pOgorCitkZWYgbWFpbigpOgorICAgIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMTpdIG9yIFtvcy5jdXJkaXJdOgorICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShhcmcpOgorICAgICAgICAgICAgcm9vdCwgZm4gPSBvcy5wYXRoLnNwbGl0KGFyZykKICAgICAgICAgICAgIGlmICdzdm46ZW9sLXN0eWxlJyBub3QgaW4gcHJvcGxpc3Qocm9vdCwgZm4pOgotICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocm9vdCwgZm4pCi0gICAgICAgICAgICAgICAgb3Muc3lzdGVtKCdzdm4gcHJvcHNldCBzdm46ZW9sLXN0eWxlIG5hdGl2ZSAiJXMiJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgc2V0X2VvbF9uYXRpdmUoYXJnKQorICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoYXJnKToKKyAgICAgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKGFyZyk6CisgICAgICAgICAgICAgICAgaWYgJy5zdm4nIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKCcuc3ZuJykKKyAgICAgICAgICAgICAgICBmb3IgZm4gaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIGlmIHBvc3NpYmxlX3RleHRfZmlsZShmbik6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAnc3ZuOmVvbC1zdHlsZScgbm90IGluIHByb3BsaXN0KHJvb3QsIGZuKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZuKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9lb2xfbmF0aXZlKHBhdGgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdGV4aTJodG1sLnB5IGIvVG9vbHMvc2NyaXB0cy90ZXhpMmh0bWwucHkKaW5kZXggODYyMjlmMi4uYWYyMTQ3YSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90ZXhpMmh0bWwucHkKKysrIGIvVG9vbHMvc2NyaXB0cy90ZXhpMmh0bWwucHkKQEAgLTEsNCArMSw0IEBACi0jISAvdXNyL2Jpbi9lbnYgcHl0aG9uCisjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAjIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MLCBvbmUgZmlsZSBwZXIgbm9kZS4KICMgQmFzZWQgb24gVGV4aW5mbyAyLjE0LgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weSBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKaW5kZXggODY0M2VlNy4uYjI2NDljNCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQorKysgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIiIiU2NyaXB0IHRvIHN5bmNocm9uaXplIHR3byBzb3VyY2UgdHJlZXMuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CmluZGV4IDFmNDU1MjAuLjRiNjdjMTUgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQpAQCAtMSwxMCArMSwxMSBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIlJlcGxhY2UgdGFicyB3aXRoIHNwYWNlcyBpbiBhcmd1bWVudCBmaWxlcy4gIFByaW50IG5hbWVzIG9mIGNoYW5nZWQgZmlsZXMuIgogCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBnZXRvcHQKK2ltcG9ydCB0b2tlbml6ZQogCiBkZWYgbWFpbigpOgogICAgIHRhYnNpemUgPSA4CkBAIC0yMywxMSArMjQsMTIgQEAKICAgICBmb3IgZmlsZW5hbWUgaW4gYXJnczoKICAgICAgICAgcHJvY2VzcyhmaWxlbmFtZSwgdGFic2l6ZSkKIAorCiBkZWYgcHJvY2VzcyhmaWxlbmFtZSwgdGFic2l6ZSwgdmVyYm9zZT1UcnVlKToKICAgICB0cnk6Ci0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICB0ZXh0ID0gZi5yZWFkKCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihmaWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIHRleHQgPSBmLnJlYWQoKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBmLmVuY29kaW5nCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludCgiJXI6IEkvTyBlcnJvcjogJXMiICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICByZXR1cm4KQEAgLTQzLDExICs0NSwxMSBAQAogICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKICAgICBleGNlcHQgb3MuZXJyb3I6CiAgICAgICAgIHBhc3MKLSAgICBmID0gb3BlbihmaWxlbmFtZSwgInciKQotICAgIGYud3JpdGUobmV3dGV4dCkKLSAgICBmLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpIGFzIGY6CisgICAgICAgIGYud3JpdGUobmV3dGV4dCkKICAgICBpZiB2ZXJib3NlOgogICAgICAgICBwcmludChmaWxlbmFtZSkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aGljaC5weSBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKaW5kZXggYTlmNDkwNy4uNGZjMzdhMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy93aGljaC5weQorKysgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgorIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBWYXJpYW50IG9mICJ3aGljaCIuCiAjIE9uIHN0ZGVyciwgbmVhciBhbmQgdG90YWwgbWlzc2VzIGFyZSByZXBvcnRlZC4KZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMveHhjaS5weSBiL1Rvb2xzL3NjcmlwdHMveHhjaS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOGNmZmM5ZS4uMDAwMDAwMAotLS0gYS9Ub29scy9zY3JpcHRzL3h4Y2kucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIHh4Y2kKLSMKLSMgY2hlY2sgaW4gZmlsZXMgZm9yIHdoaWNoIHJjc2RpZmYgcmV0dXJucyBub256ZXJvIGV4aXQgc3RhdHVzCi0KLWltcG9ydCBzeXMKLWltcG9ydCBvcwotZnJvbSBzdGF0IGltcG9ydCAqCi1pbXBvcnQgZm5tYXRjaAotCi1FWEVDTUFHSUMgPSAnXDAwMVwxNDBcMDAwXDAxMCcKLQotTUFYU0laRSA9IDIwMCoxMDI0ICMgRmlsZXMgdGhpcyBiaWcgbXVzdCBiZSBiaW5hcmllcyBhbmQgYXJlIHNraXBwZWQuCi0KLWRlZiBnZXRhcmdzKCk6Ci0gICAgYXJncyA9IHN5cy5hcmd2WzE6XQotICAgIGlmIGFyZ3M6Ci0gICAgICAgIHJldHVybiBhcmdzCi0gICAgcHJpbnQoJ05vIGFyZ3VtZW50cywgY2hlY2tpbmcgYWxtb3N0ICosIGluICJscyAtdCIgb3JkZXInKQotICAgIGxpc3QgPSBbXQotICAgIGZvciBmaWxlIGluIG9zLmxpc3RkaXIob3MuY3VyZGlyKToKLSAgICAgICAgaWYgbm90IHNraXBmaWxlKGZpbGUpOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQoKGdldG10aW1lKGZpbGUpLCBmaWxlKSkKLSAgICBsaXN0LnNvcnQoKQotICAgIGlmIG5vdCBsaXN0OgotICAgICAgICBwcmludCgnTm90aGluZyB0byBkbyAtLSBleGl0IDEnKQotICAgICAgICBzeXMuZXhpdCgxKQotICAgIGxpc3Quc29ydCgpCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICBmb3IgbXRpbWUsIGZpbGUgaW4gbGlzdDogYXJncy5hcHBlbmQoZmlsZSkKLSAgICByZXR1cm4gYXJncwotCi1kZWYgZ2V0bXRpbWUoZmlsZSk6Ci0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLnN0YXQoZmlsZSkKLSAgICAgICAgcmV0dXJuIHN0W1NUX01USU1FXQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIC0xCi0KLWJhZG5hbWVzID0gWyd0YWdzJywgJ1RBR1MnLCAneHl6enknLCAnbm9odXAub3V0JywgJ2NvcmUnXQotYmFkcHJlZml4ZXMgPSBbJy4nLCAnLCcsICdAJywgJyMnLCAnby4nXQotYmFkc3VmZml4ZXMgPSBcCi0gICAgICAgIFsnficsICcuYScsICcubycsICcub2xkJywgJy5iYWsnLCAnLm9yaWcnLCAnLm5ldycsICcucHJldicsICcubm90JywgXAotICAgICAgICAgJy5weWMnLCAnLmZkYycsICcucmdiJywgJy5lbGMnLCAnLHYnXQotaWdub3JlID0gW10KLQotZGVmIHNldHVwKCk6Ci0gICAgaWdub3JlWzpdID0gYmFkbmFtZXMKLSAgICBmb3IgcCBpbiBiYWRwcmVmaXhlczoKLSAgICAgICAgaWdub3JlLmFwcGVuZChwICsgJyonKQotICAgIGZvciBwIGluIGJhZHN1ZmZpeGVzOgotICAgICAgICBpZ25vcmUuYXBwZW5kKCcqJyArIHApCi0gICAgdHJ5OgotICAgICAgICBmID0gb3BlbignLnh4Y2lnbicsICdyJykKLSAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgcmV0dXJuCi0gICAgaWdub3JlWzpdID0gaWdub3JlICsgZi5yZWFkKCkuc3BsaXQoKQotCi1kZWYgc2tpcGZpbGUoZmlsZSk6Ci0gICAgZm9yIHAgaW4gaWdub3JlOgotICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2goZmlsZSwgcCk6IHJldHVybiAxCi0gICAgdHJ5OgotICAgICAgICBzdCA9IG9zLmxzdGF0KGZpbGUpCi0gICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICByZXR1cm4gMSAjIERvZXNuJ3QgZXhpc3QgLS0gc2tpcCBpdAotICAgICMgU2tpcCBub24tcGxhaW4gZmlsZXMuCi0gICAgaWYgbm90IFNfSVNSRUcoc3RbU1RfTU9ERV0pOiByZXR1cm4gMQotICAgICMgU2tpcCBodWdlIGZpbGVzIC0tIHByb2JhYmx5IGJpbmFyaWVzLgotICAgIGlmIHN0W1NUX1NJWkVdID49IE1BWFNJWkU6IHJldHVybiAxCi0gICAgIyBTa2lwIGV4ZWN1dGFibGVzCi0gICAgdHJ5OgotICAgICAgICBkYXRhID0gb3BlbihmaWxlLCAncicpLnJlYWQobGVuKEVYRUNNQUdJQykpCi0gICAgICAgIGlmIGRhdGEgPT0gRVhFQ01BR0lDOiByZXR1cm4gMQotICAgIGV4Y2VwdDoKLSAgICAgICAgcGFzcwotICAgIHJldHVybiAwCi0KLWRlZiBiYWRwcmVmaXgoZmlsZSk6Ci0gICAgZm9yIGJhZCBpbiBiYWRwcmVmaXhlczoKLSAgICAgICAgaWYgZmlsZVs6bGVuKGJhZCldID09IGJhZDogcmV0dXJuIDEKLSAgICByZXR1cm4gMAotCi1kZWYgYmFkc3VmZml4KGZpbGUpOgotICAgIGZvciBiYWQgaW4gYmFkc3VmZml4ZXM6Ci0gICAgICAgIGlmIGZpbGVbLWxlbihiYWQpOl0gPT0gYmFkOiByZXR1cm4gMQotICAgIHJldHVybiAwCi0KLWRlZiBnbyhhcmdzKToKLSAgICBmb3IgZmlsZSBpbiBhcmdzOgotICAgICAgICBwcmludChmaWxlICsgJzonKQotICAgICAgICBpZiBkaWZmZXJpbmcoZmlsZSk6Ci0gICAgICAgICAgICBzaG93ZGlmZnMoZmlsZSkKLSAgICAgICAgICAgIGlmIGFza3llc25vKCdDaGVjayBpbiAnICsgZmlsZSArICcgPyAnKToKLSAgICAgICAgICAgICAgICBzdHMgPSBvcy5zeXN0ZW0oJ3JjcyAtbCAnICsgZmlsZSkgIyBpZ25vcmVkCi0gICAgICAgICAgICAgICAgc3RzID0gb3Muc3lzdGVtKCdjaSAtbCAnICsgZmlsZSkKLQotZGVmIGRpZmZlcmluZyhmaWxlKToKLSAgICBjbWQgPSAnY28gLXAgJyArIGZpbGUgKyAnIDI+L2Rldi9udWxsIHwgY21wIC1zIC0gJyArIGZpbGUKLSAgICBzdHMgPSBvcy5zeXN0ZW0oY21kKQotICAgIHJldHVybiBzdHMgIT0gMAotCi1kZWYgc2hvd2RpZmZzKGZpbGUpOgotICAgIGNtZCA9ICdyY3NkaWZmICcgKyBmaWxlICsgJyAyPiYxIHwgJHtQQUdFUi1tb3JlfScKLSAgICBzdHMgPSBvcy5zeXN0ZW0oY21kKQotCi1kZWYgcmF3X2lucHV0KHByb21wdCk6Ci0gICAgc3lzLnN0ZG91dC53cml0ZShwcm9tcHQpCi0gICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgcmV0dXJuIHN5cy5zdGRpbi5yZWFkbGluZSgpCi0KLWRlZiBhc2t5ZXNubyhwcm9tcHQpOgotICAgIHMgPSBpbnB1dChwcm9tcHQpCi0gICAgcmV0dXJuIHMgaW4gWyd5JywgJ3llcyddCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdHJ5OgotICAgICAgICBzZXR1cCgpCi0gICAgICAgIGdvKGdldGFyZ3MoKSkKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHByaW50KCdbSW50cl0nKQpkaWZmIC0tZ2l0IGEvRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvUkVBRE1FIGIvVG9vbHMvdGVzdDJ0bzMvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy9SRUFETUUKcmVuYW1lIHRvIFRvb2xzL3Rlc3QydG8zL1JFQURNRQpkaWZmIC0tZ2l0IGEvRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvbWFpbnRlc3QucHkgYi9Ub29scy90ZXN0MnRvMy9tYWludGVzdC5weQpzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBEZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy9tYWludGVzdC5weQpyZW5hbWUgdG8gVG9vbHMvdGVzdDJ0bzMvbWFpbnRlc3QucHkKaW5kZXggNzJhMjZkZC4uMDM2ZGQ0ZiAxMDA2NDQKLS0tIGEvRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvbWFpbnRlc3QucHkKKysrIGIvVG9vbHMvdGVzdDJ0bzMvbWFpbnRlc3QucHkKQEAgLTEsNCArMSw0IEBACi0jIS91c3IvYmluL2VudiBweXRob24KKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKIAogIyBUaGUgYWJvdmUgbGluZSBzaG91bGQgZ2V0IHJlcGxhY2VkIHdpdGggdGhlIHBhdGggdG8gdGhlIFB5dGhvbgogIyBpbnRlcnByZXRlcjsgdGhlIGJsb2NrIGJlbG93IHNob3VsZCBnZXQgMnRvMy1jb252ZXJ0ZWQuCmRpZmYgLS1naXQgYS9EZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy9zZXR1cC5weSBiL1Rvb2xzL3Rlc3QydG8zL3NldHVwLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy9zZXR1cC5weQpyZW5hbWUgdG8gVG9vbHMvdGVzdDJ0bzMvc2V0dXAucHkKZGlmZiAtLWdpdCBhL0RlbW8vZGlzdHV0aWxzL3Rlc3QydG8zL3Rlc3QvcnVudGVzdHMucHkgYi9Ub29scy90ZXN0MnRvMy90ZXN0L3J1bnRlc3RzLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy90ZXN0L3J1bnRlc3RzLnB5CnJlbmFtZSB0byBUb29scy90ZXN0MnRvMy90ZXN0L3J1bnRlc3RzLnB5CmRpZmYgLS1naXQgYS9EZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy90ZXN0L3Rlc3RfZm9vLnB5IGIvVG9vbHMvdGVzdDJ0bzMvdGVzdC90ZXN0X2Zvby5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvdGVzdC90ZXN0X2Zvby5weQpyZW5hbWUgdG8gVG9vbHMvdGVzdDJ0bzMvdGVzdC90ZXN0X2Zvby5weQpkaWZmIC0tZ2l0IGEvRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvdGVzdDJ0bzMvX19pbml0X18ucHkgYi9Ub29scy90ZXN0MnRvMy90ZXN0MnRvMy9fX2luaXRfXy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRGVtby9kaXN0dXRpbHMvdGVzdDJ0bzMvdGVzdDJ0bzMvX19pbml0X18ucHkKcmVuYW1lIHRvIFRvb2xzL3Rlc3QydG8zL3Rlc3QydG8zL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9EZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy90ZXN0MnRvMy9oZWxsby5weSBiL1Rvb2xzL3Rlc3QydG8zL3Rlc3QydG8zL2hlbGxvLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEZW1vL2Rpc3R1dGlscy90ZXN0MnRvMy90ZXN0MnRvMy9oZWxsby5weQpyZW5hbWUgdG8gVG9vbHMvdGVzdDJ0bzMvdGVzdDJ0bzMvaGVsbG8ucHkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weSBiL1Rvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weQppbmRleCBkYWRlMWNlLi4wZjVjMWUyIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkKKysrIGIvVG9vbHMvdW5pY29kZS9jb21wYXJlY29kZWNzLnB5CkBAIC0xLDQgKzEsNCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIS91c3IvYmluL2VudiBweXRob24zCiAKICIiIiBDb21wYXJlIHRoZSBvdXRwdXQgb2YgdHdvIGNvZGVjcy4KIApkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weSBiL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKaW5kZXggYzM4NDZlOS4uN2U3ZDZkMCAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQorKysgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CkBAIC0zNCwxNCArMzQsMTYgQEAKICMgU3RhbmRhcmQgdW5kZWZpbmVkIFVuaWNvZGUgY29kZSBwb2ludAogVU5JX1VOREVGSU5FRCA9IGNocigweEZGRkUpCiAKKyMgUGxhY2Vob2xkZXIgZm9yIGEgbWlzc2luZyBjb2RlcG9pbnQKK01JU1NJTkdfQ09ERSA9IC0xCisKIG1hcFJFID0gcmUuY29tcGlsZSgnKCg/OjB4WzAtOWEtZkEtRl0rXCs/KSspJwogICAgICAgICAgICAgICAgICAgICdccysnCiAgICAgICAgICAgICAgICAgICAgJygoPzooPzoweFswLTlhLWZBLVpdK3w8W0EtWmEtel0rPilcKz8pKiknCiAgICAgICAgICAgICAgICAgICAgJ1xzKicKICAgICAgICAgICAgICAgICAgICAnKCMuKyk/JykKIAotZGVmIHBhcnNlY29kZXMoY29kZXMsCi0gICAgICAgICAgICAgICBsZW49bGVuLCBmaWx0ZXI9ZmlsdGVyLHJhbmdlPXJhbmdlKToKK2RlZiBwYXJzZWNvZGVzKGNvZGVzLCBsZW49bGVuLCByYW5nZT1yYW5nZSk6CiAKICAgICAiIiIgQ29udmVydHMgY29kZSBjb21iaW5hdGlvbnMgdG8gZWl0aGVyIGEgc2luZ2xlIGNvZGUgaW50ZWdlcgogICAgICAgICBvciBhIHR1cGxlIG9mIGludGVnZXJzLgpAQCAtNTMsNyArNTUsNyBAQAogCiAgICAgIiIiCiAgICAgaWYgbm90IGNvZGVzOgotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTUlTU0lOR19DT0RFCiAgICAgbCA9IGNvZGVzLnNwbGl0KCcrJykKICAgICBpZiBsZW4obCkgPT0gMToKICAgICAgICAgcmV0dXJuIGludChsWzBdLDE2KQpAQCAtNjEsOCArNjMsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsW2ldID0gaW50KGxbaV0sMTYpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbFtpXSA9IE5vbmUKLSAgICBsID0gW3ggZm9yIHggaW4gbCBpZiB4IGlzIG5vdCBOb25lXQorICAgICAgICAgICAgbFtpXSA9IE1JU1NJTkdfQ09ERQorICAgIGwgPSBbeCBmb3IgeCBpbiBsIGlmIHggIT0gTUlTU0lOR19DT0RFXQogICAgIGlmIGxlbihsKSA9PSAxOgogICAgICAgICByZXR1cm4gbFswXQogICAgIGVsc2U6CkBAIC0xMTQsNyArMTE2LDcgQEAKICAgICAjIG1hcHBpbmdzIHRvIE5vbmUgZm9yIHRoZSByZXN0CiAgICAgaWYgbGVuKGlkZW50aXR5KSA+PSBsZW4odW5tYXBwZWQpOgogICAgICAgICBmb3IgZW5jIGluIHVubWFwcGVkOgotICAgICAgICAgICAgZW5jMnVuaVtlbmNdID0gKE5vbmUsICIiKQorICAgICAgICAgICAgZW5jMnVuaVtlbmNdID0gKE1JU1NJTkdfQ09ERSwgIiIpCiAgICAgICAgIGVuYzJ1bmlbJ0lERU5USVRZJ10gPSAyNTYKIAogICAgIHJldHVybiBlbmMydW5pCkBAIC0yMTIsNyArMjE0LDcgQEAKICAgICAgICAgICAgIChtYXBrZXksIG1hcGNvbW1lbnQpID0gbWFwa2V5CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobWFwdmFsdWUsIHR1cGxlKToKICAgICAgICAgICAgIChtYXB2YWx1ZSwgbWFwY29tbWVudCkgPSBtYXB2YWx1ZQotICAgICAgICBpZiBtYXBrZXkgaXMgTm9uZToKKyAgICAgICAgaWYgbWFwa2V5ID09IE1JU1NJTkdfQ09ERToKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHRhYmxlW21hcGtleV0gPSAobWFwdmFsdWUsIG1hcGNvbW1lbnQpCiAgICAgICAgIGlmIG1hcGtleSA+IG1heGtleToKQEAgLTIyNCwxMSArMjI2LDExIEBACiAgICAgIyBDcmVhdGUgdGFibGUgY29kZQogICAgIGZvciBrZXkgaW4gcmFuZ2UobWF4a2V5ICsgMSk6CiAgICAgICAgIGlmIGtleSBub3QgaW4gdGFibGU6Ci0gICAgICAgICAgICBtYXB2YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIG1hcHZhbHVlID0gTUlTU0lOR19DT0RFCiAgICAgICAgICAgICBtYXBjb21tZW50ID0gJ1VOREVGSU5FRCcKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHZhbHVlLCBtYXBjb21tZW50ID0gdGFibGVba2V5XQotICAgICAgICBpZiBtYXB2YWx1ZSBpcyBOb25lOgorICAgICAgICBpZiBtYXB2YWx1ZSA9PSBNSVNTSU5HX0NPREU6CiAgICAgICAgICAgICBtYXBjaGFyID0gVU5JX1VOREVGSU5FRAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtYXB2YWx1ZSwgdHVwbGUpOgpAQCAtMjM3LDExICsyMzksMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbWFwY2hhciA9IGNocihtYXB2YWx1ZSkKICAgICAgICAgaWYgbWFwY29tbWVudCBhbmQgY29tbWVudHM6Ci0gICAgICAgICAgICBhcHBlbmQoJyAgICAlclx0IyAgJXMgLT4gJXMnICUgKG1hcGNoYXIsCisgICAgICAgICAgICBhcHBlbmQoJyAgICAlYSBcdCMgICVzIC0+ICVzJyAlIChtYXBjaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhyZXByKGtleSwga2V5X3ByZWNpc2lvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcGNvbW1lbnQpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXBwZW5kKCcgICAgJXInICUgbWFwY2hhcikKKyAgICAgICAgICAgIGFwcGVuZCgnICAgICVhJyAlIG1hcGNoYXIpCiAKICAgICBhcHBlbmQoJyknKQogICAgIHJldHVybiBsCmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjLnB5IGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTFlZjVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlYy5weQpAQCAtMCwwICsxLDYxIEBACisiIiJUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgYSBQeXRob24gY29kZWMgbW9kdWxlIGZyb20gYSBXaW5kb3dzIENvZGUgUGFnZS4KKworSXQgdXNlcyB0aGUgZnVuY3Rpb24gTXVsdGlCeXRlVG9XaWRlQ2hhciB0byBnZW5lcmF0ZSBhIGRlY29kaW5nIHRhYmxlLgorIiIiCisKK2ltcG9ydCBjdHlwZXMKK2Zyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcworZnJvbSBnZW5jb2RlYyBpbXBvcnQgY29kZWdlbgoraW1wb3J0IHVuaWNvZGVkYXRhCisKK2RlZiBnZW53aW5tYXAoY29kZXBhZ2UpOgorICAgIE11bHRpQnl0ZVRvV2lkZUNoYXIgPSBjdHlwZXMud2luZGxsLmtlcm5lbDMyLk11bHRpQnl0ZVRvV2lkZUNoYXIKKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyLmFyZ3R5cGVzID0gW3dpbnR5cGVzLlVJTlQsIHdpbnR5cGVzLkRXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ludHlwZXMuTFBDU1RSLCBjdHlwZXMuY19pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW50eXBlcy5MUFdTVFIsIGN0eXBlcy5jX2ludF0KKyAgICBNdWx0aUJ5dGVUb1dpZGVDaGFyLnJlc3R5cGUgPSBjdHlwZXMuY19pbnQKKworICAgIGVuYzJ1bmkgPSB7fQorCisgICAgZm9yIGkgaW4gbGlzdChyYW5nZSgzMikpICsgWzEyN106CisgICAgICAgIGVuYzJ1bmlbaV0gPSAoaSwgJ0NPTlRST0wgQ0hBUkFDVEVSJykKKworICAgIGZvciBpIGluIHJhbmdlKDI1Nik6CisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoMikKKyAgICAgICAgcmV0ID0gTXVsdGlCeXRlVG9XaWRlQ2hhcigKKyAgICAgICAgICAgIGNvZGVwYWdlLCAwLAorICAgICAgICAgICAgYnl0ZXMoW2ldKSwgMSwKKyAgICAgICAgICAgIGJ1ZiwgMikKKyAgICAgICAgYXNzZXJ0IHJldCA9PSAxLCAiaW52YWxpZCBjb2RlIHBhZ2UiCisgICAgICAgIGFzc2VydCBidWZbMV0gPT0gJ1x4MDAnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSB1bmljb2RlZGF0YS5uYW1lKGJ1ZlswXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmFtZSA9IGVuYzJ1bmlbaV1bMV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBuYW1lID0gJycKKworICAgICAgICBlbmMydW5pW2ldID0gKG9yZChidWZbMF0pLCBuYW1lKQorCisgICAgcmV0dXJuIGVuYzJ1bmkKKworZGVmIGdlbndpbmNvZGVjKGNvZGVwYWdlKToKKyAgICBpbXBvcnQgcGxhdGZvcm0KKyAgICBtYXAgPSBnZW53aW5tYXAoY29kZXBhZ2UpCisgICAgZW5jb2RpbmduYW1lID0gJ2NwJWQnICUgY29kZXBhZ2UKKyAgICBjb2RlID0gY29kZWdlbigiIiwgbWFwLCBlbmNvZGluZ25hbWUpCisgICAgIyBSZXBsYWNlIGZpcnN0IGxpbmVzIHdpdGggb3VyIG93biBkb2NzdHJpbmcKKyAgICBjb2RlID0gJycnXAorIiIiUHl0aG9uIENoYXJhY3RlciBNYXBwaW5nIENvZGVjICVzIGdlbmVyYXRlZCBvbiBXaW5kb3dzOgorJXMgd2l0aCB0aGUgY29tbWFuZDoKKyAgcHl0aG9uIFRvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWMucHkgJXMKKyIiIiMiCisnJycgJSAoZW5jb2RpbmduYW1lLCAnICcuam9pbihwbGF0Zm9ybS53aW4zMl92ZXIoKSksIGNvZGVwYWdlCisgICAgICApICsgY29kZS5zcGxpdCgnIiIiIyInLCAxKVsxXQorCisgICAgcHJpbnQoY29kZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgc3lzCisgICAgZ2Vud2luY29kZWMoaW50KHN5cy5hcmd2WzFdKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdCBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2NhYjBkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlY3MuYmF0CkBAIC0wLDAgKzEsNyBAQAorQHJlbSBSZWNyZWF0ZSBzb21lIHB5dGhvbiBjaGFybWFwIGNvZGVjcyBmcm9tIHRoZSBXaW5kb3dzIGZ1bmN0aW9uCitAcmVtIE11bHRpQnl0ZVRvV2lkZUNoYXIuCisKK0BjZCAvZCAlfmRwMAorQG1rZGlyIGJ1aWxkCitAcmVtIEFyYWJpYyBET1MgY29kZSBwYWdlCitjOlxweXRob24zMFxweXRob24gZ2Vud2luY29kZWMucHkgNzIwID4gYnVpbGQvY3A3MjAucHkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKaW5kZXggYzM1MTcwYy4uZDUwMzE5MCAxMDA2NDQKLS0tIGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKKysrIGIvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkKQEAgLTI1LDE4ICsyNSwyMCBAQAogIyB3cml0dGVuIGJ5IEZyZWRyaWsgTHVuZGggKGZyZWRyaWtAcHl0aG9ud2FyZS5jb20pCiAjCiAKLWltcG9ydCBzeXMKK2ltcG9ydCBzeXMsIG9zLCB6aXBmaWxlCiAKIFNDUklQVCA9IHN5cy5hcmd2WzBdCi1WRVJTSU9OID0gIjIuNiIKK1ZFUlNJT04gPSAiMy4yIgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNS4xLjAiCitVTklEQVRBX1ZFUlNJT04gPSAiNi4wLjAiCiBVTklDT0RFX0RBVEEgPSAiVW5pY29kZURhdGElcy50eHQiCiBDT01QT1NJVElPTl9FWENMVVNJT05TID0gIkNvbXBvc2l0aW9uRXhjbHVzaW9ucyVzLnR4dCIKIEVBU1RBU0lBTl9XSURUSCA9ICJFYXN0QXNpYW5XaWR0aCVzLnR4dCIKK1VOSUhBTiA9ICJVbmloYW4lcy56aXAiCiBERVJJVkVEX0NPUkVfUFJPUEVSVElFUyA9ICJEZXJpdmVkQ29yZVByb3BlcnRpZXMlcy50eHQiCiBERVJJVkVETk9STUFMSVpBVElPTl9QUk9QUyA9ICJEZXJpdmVkTm9ybWFsaXphdGlvblByb3BzJXMudHh0IgorTElORV9CUkVBSyA9ICJMaW5lQnJlYWslcy50eHQiCiAKIG9sZF92ZXJzaW9ucyA9IFsiMy4yLjAiXQogCkBAIC01MSw2ICs1Myw4IEBACiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKK01BTkRBVE9SWV9MSU5FX0JSRUFLUyA9IFsgIkJLIiwgIkNSIiwgIkxGIiwgIk5MIiBdCisKICMgbm90ZTogc2hvdWxkIG1hdGNoIGRlZmluaXRpb25zIGluIE9iamVjdHMvdW5pY29kZWN0eXBlLmMKIEFMUEhBX01BU0sgPSAweDAxCiBERUNJTUFMX01BU0sgPSAweDAyCkBAIC02NCwyNiArNjgsMjkgQEAKIFhJRF9DT05USU5VRV9NQVNLID0gMHgyMDAKIFBSSU5UQUJMRV9NQVNLID0gMHg0MDAKIE5PREVMVEFfTUFTSyA9IDB4ODAwCitOVU1FUklDX01BU0sgPSAweDEwMDAKKworIyB0aGVzZSByYW5nZXMgbmVlZCB0byBtYXRjaCB1bmljb2RlZGF0YS5jOmlzX3VuaWZpZWRfaWRlb2dyYXBoCitjamtfcmFuZ2VzID0gWworICAgICgnMzQwMCcsICc0REI1JyksCisgICAgKCc0RTAwJywgJzlGQ0InKSwKKyAgICAoJzIwMDAwJywgJzJBNkQ2JyksCisgICAgKCcyQTcwMCcsICcyQjczNCcpLAorICAgICgnMkI3NDAnLCAnMkI4MUQnKQorXQogCiBkZWYgbWFrZXRhYmxlcyh0cmFjZT0wKToKIAogICAgIHByaW50KCItLS0gUmVhZGluZyIsIFVOSUNPREVfREFUQSAlICIiLCAiLi4uIikKIAogICAgIHZlcnNpb24gPSAiIgotICAgIHVuaWNvZGUgPSBVbmljb2RlRGF0YShVTklDT0RFX0RBVEEgJSB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBDT01QT1NJVElPTl9FWENMVVNJT05TICUgdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgRUFTVEFTSUFOX1dJRFRIICUgdmVyc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgREVSSVZFRF9DT1JFX1BST1BFUlRJRVMgJSB2ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBERVJJVkVETk9STUFMSVpBVElPTl9QUk9QUyAlIHZlcnNpb24pCisgICAgdW5pY29kZSA9IFVuaWNvZGVEYXRhKFVOSURBVEFfVkVSU0lPTikKIAogICAgIHByaW50KGxlbihsaXN0KGZpbHRlcihOb25lLCB1bmljb2RlLnRhYmxlKSkpLCAiY2hhcmFjdGVycyIpCiAKICAgICBmb3IgdmVyc2lvbiBpbiBvbGRfdmVyc2lvbnM6CiAgICAgICAgIHByaW50KCItLS0gUmVhZGluZyIsIFVOSUNPREVfREFUQSAlICgiLSIrdmVyc2lvbiksICIuLi4iKQotICAgICAgICBvbGRfdW5pY29kZSA9IFVuaWNvZGVEYXRhKFVOSUNPREVfREFUQSAlICgiLSIrdmVyc2lvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NUE9TSVRJT05fRVhDTFVTSU9OUyAlICgiLSIrdmVyc2lvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRUFTVEFTSUFOX1dJRFRIICUgKCItIit2ZXJzaW9uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERVJJVkVEX0NPUkVfUFJPUEVSVElFUyAlICgiLSIrdmVyc2lvbikpCisgICAgICAgIG9sZF91bmljb2RlID0gVW5pY29kZURhdGEodmVyc2lvbiwgY2prX2NoZWNrPUZhbHNlKQogICAgICAgICBwcmludChsZW4obGlzdChmaWx0ZXIoTm9uZSwgb2xkX3VuaWNvZGUudGFibGUpKSksICJjaGFyYWN0ZXJzIikKICAgICAgICAgbWVyZ2Vfb2xkX3ZlcnNpb24odmVyc2lvbiwgdW5pY29kZSwgb2xkX3VuaWNvZGUpCiAKQEAgLTM1Nyw2ICszNjQsOSBAQAogICAgIHRhYmxlID0gW2R1bW15XQogICAgIGNhY2hlID0gezA6IGR1bW15fQogICAgIGluZGV4ID0gWzBdICogbGVuKHVuaWNvZGUuY2hhcnMpCisgICAgbnVtZXJpYyA9IHt9CisgICAgc3BhY2VzID0gW10KKyAgICBsaW5lYnJlYWtzID0gW10KIAogICAgIGZvciBjaGFyIGluIHVuaWNvZGUuY2hhcnM6CiAgICAgICAgIHJlY29yZCA9IHVuaWNvZGUudGFibGVbY2hhcl0KQEAgLTM3MSwxMCArMzgxLDEyIEBACiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gQUxQSEFfTUFTSwogICAgICAgICAgICAgaWYgY2F0ZWdvcnkgPT0gIkxsIjoKICAgICAgICAgICAgICAgICBmbGFncyB8PSBMT1dFUl9NQVNLCi0gICAgICAgICAgICBpZiBjYXRlZ29yeSA9PSAiWmwiIG9yIGJpZGlyZWN0aW9uYWwgPT0gIkIiOgorICAgICAgICAgICAgaWYgJ0xpbmVfQnJlYWsnIGluIHByb3BlcnRpZXMgb3IgYmlkaXJlY3Rpb25hbCA9PSAiQiI6CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTElORUJSRUFLX01BU0sKKyAgICAgICAgICAgICAgICBsaW5lYnJlYWtzLmFwcGVuZChjaGFyKQogICAgICAgICAgICAgaWYgY2F0ZWdvcnkgPT0gIlpzIiBvciBiaWRpcmVjdGlvbmFsIGluICgiV1MiLCAiQiIsICJTIik6CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gU1BBQ0VfTUFTSworICAgICAgICAgICAgICAgIHNwYWNlcy5hcHBlbmQoY2hhcikKICAgICAgICAgICAgIGlmIGNhdGVnb3J5ID09ICJMdCI6CiAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gVElUTEVfTUFTSwogICAgICAgICAgICAgaWYgY2F0ZWdvcnkgPT0gIkx1IjoKQEAgLTQyMyw2ICs0MzUsOSBAQAogICAgICAgICAgICAgaWYgcmVjb3JkWzddOgogICAgICAgICAgICAgICAgIGZsYWdzIHw9IERJR0lUX01BU0sKICAgICAgICAgICAgICAgICBkaWdpdCA9IGludChyZWNvcmRbN10pCisgICAgICAgICAgICBpZiByZWNvcmRbOF06CisgICAgICAgICAgICAgICAgZmxhZ3MgfD0gTlVNRVJJQ19NQVNLCisgICAgICAgICAgICAgICAgbnVtZXJpYy5zZXRkZWZhdWx0KHJlY29yZFs4XSwgW10pLmFwcGVuZChjaGFyKQogICAgICAgICAgICAgaXRlbSA9ICgKICAgICAgICAgICAgICAgICB1cHBlciwgbG93ZXIsIHRpdGxlLCBkZWNpbWFsLCBkaWdpdCwgZmxhZ3MKICAgICAgICAgICAgICAgICApCkBAIC00MzQsNiArNDQ5LDkgQEAKICAgICAgICAgICAgIGluZGV4W2NoYXJdID0gaQogCiAgICAgcHJpbnQobGVuKHRhYmxlKSwgInVuaXF1ZSBjaGFyYWN0ZXIgdHlwZSBlbnRyaWVzIikKKyAgICBwcmludChzdW0obWFwKGxlbiwgbnVtZXJpYy52YWx1ZXMoKSkpLCAibnVtZXJpYyBjb2RlIHBvaW50cyIpCisgICAgcHJpbnQobGVuKHNwYWNlcyksICJ3aGl0ZXNwYWNlIGNvZGUgcG9pbnRzIikKKyAgICBwcmludChsZW4obGluZWJyZWFrcyksICJsaW5lYnJlYWsgY29kZSBwb2ludHMiKQogCiAgICAgcHJpbnQoIi0tLSBXcml0aW5nIiwgRklMRSwgIi4uLiIpCiAKQEAgLTQ1NSw2ICs0NzMsNjMgQEAKICAgICBBcnJheSgiaW5kZXgxIiwgaW5kZXgxKS5kdW1wKGZwLCB0cmFjZSkKICAgICBBcnJheSgiaW5kZXgyIiwgaW5kZXgyKS5kdW1wKGZwLCB0cmFjZSkKIAorICAgICMgR2VuZXJhdGUgY29kZSBmb3IgX1B5VW5pY29kZV9Ub051bWVyaWMoKQorICAgIG51bWVyaWNfaXRlbXMgPSBzb3J0ZWQobnVtZXJpYy5pdGVtcygpKQorICAgIHByaW50KCcvKiBSZXR1cm5zIHRoZSBudW1lcmljIHZhbHVlIGFzIGRvdWJsZSBmb3IgVW5pY29kZSBjaGFyYWN0ZXJzJywgZmlsZT1mcCkKKyAgICBwcmludCgnICogaGF2aW5nIHRoaXMgcHJvcGVydHksIC0xLjAgb3RoZXJ3aXNlLicsIGZpbGU9ZnApCisgICAgcHJpbnQoJyAqLycsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2RvdWJsZSBfUHlVbmljb2RlX1RvTnVtZXJpYyhQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQorICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCisgICAgZm9yIHZhbHVlLCBjb2RlcG9pbnRzIGluIG51bWVyaWNfaXRlbXM6CisgICAgICAgICMgVHVybiB0ZXh0IGludG8gZmxvYXQgbGl0ZXJhbHMKKyAgICAgICAgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLycpCisgICAgICAgIHBhcnRzID0gW3JlcHIoZmxvYXQocGFydCkpIGZvciBwYXJ0IGluIHBhcnRzXQorICAgICAgICB2YWx1ZSA9ICcvJy5qb2luKHBhcnRzKQorCisgICAgICAgIGNvZGVwb2ludHMuc29ydCgpCisgICAgICAgIGZvciBjb2RlcG9pbnQgaW4gY29kZXBvaW50czoKKyAgICAgICAgICAgIHByaW50KCcgICAgY2FzZSAweCUwNFg6JyAlIChjb2RlcG9pbnQsKSwgZmlsZT1mcCkKKyAgICAgICAgcHJpbnQoJyAgICAgICAgcmV0dXJuIChkb3VibGUpICVzOycgJSAodmFsdWUsKSwgZmlsZT1mcCkKKyAgICBwcmludCgnICAgIH0nLCBmaWxlPWZwKQorICAgIHByaW50KCcgICAgcmV0dXJuIC0xLjA7JywgZmlsZT1mcCkKKyAgICBwcmludCgnfScsIGZpbGU9ZnApCisgICAgcHJpbnQoZmlsZT1mcCkKKworICAgICMgR2VuZXJhdGUgY29kZSBmb3IgX1B5VW5pY29kZV9Jc1doaXRlc3BhY2UoKQorICAgIHByaW50KCIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQorICAgIHByaW50KCIgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCisgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQorICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCisKKyAgICBmb3IgY29kZXBvaW50IGluIHNvcnRlZChzcGFjZXMpOgorICAgICAgICBwcmludCgnICAgIGNhc2UgMHglMDRYOicgJSAoY29kZXBvaW50LCksIGZpbGU9ZnApCisgICAgcHJpbnQoJyAgICAgICAgcmV0dXJuIDE7JywgZmlsZT1mcCkKKworICAgIHByaW50KCcgICAgfScsIGZpbGU9ZnApCisgICAgcHJpbnQoJyAgICByZXR1cm4gMDsnLCBmaWxlPWZwKQorICAgIHByaW50KCd9JywgZmlsZT1mcCkKKyAgICBwcmludChmaWxlPWZwKQorCisgICAgIyBHZW5lcmF0ZSBjb2RlIGZvciBfUHlVbmljb2RlX0lzTGluZWJyZWFrKCkKKyAgICBwcmludCgiLyogUmV0dXJucyAxIGZvciBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBsaW5lIGJyZWFrIiwgZmlsZT1mcCkKKyAgICBwcmludCgiICogcHJvcGVydHkgJ0JLJywgJ0NSJywgJ0xGJyBvciAnTkwnIG9yIGhhdmluZyBiaWRpcmVjdGlvbmFsIiwgZmlsZT1mcCkKKyAgICBwcmludCgiICogdHlwZSAnQicsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCisgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKHJlZ2lzdGVyIGNvbnN0IFB5X1VDUzQgY2gpJywgZmlsZT1mcCkKKyAgICBwcmludCgneycsIGZpbGU9ZnApCisgICAgcHJpbnQoJyAgICBzd2l0Y2ggKGNoKSB7JywgZmlsZT1mcCkKKyAgICBmb3IgY29kZXBvaW50IGluIHNvcnRlZChsaW5lYnJlYWtzKToKKyAgICAgICAgcHJpbnQoJyAgICBjYXNlIDB4JTA0WDonICUgKGNvZGVwb2ludCwpLCBmaWxlPWZwKQorICAgIHByaW50KCcgICAgICAgIHJldHVybiAxOycsIGZpbGU9ZnApCisKKyAgICBwcmludCgnICAgIH0nLCBmaWxlPWZwKQorICAgIHByaW50KCcgICAgcmV0dXJuIDA7JywgZmlsZT1mcCkKKyAgICBwcmludCgnfScsIGZpbGU9ZnApCisgICAgcHJpbnQoZmlsZT1mcCkKKwogICAgIGZwLmNsb3NlKCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjcwLDEyICs3NDUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgZWxpZiBrID09IDg6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIHByaW50ICJOVU1FUklDIixoZXgoaSksIGBvbGQudGFibGVbaV1ba11gLCBuZXcudGFibGVbaV1ba10KICAgICAgICAgICAgICAgICAgICAgICAgICMgU2luY2UgMCBlbmNvZGVzICJubyBjaGFuZ2UiLCB0aGUgb2xkIHZhbHVlIGlzIGJldHRlciBub3QgMAotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbHVlICE9ICIwIiBhbmQgdmFsdWUgIT0gIi0xIgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfY2hhbmdlc1tpXSA9IC0xCiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCByZS5tYXRjaCgiXlswLTldKyQiLCB2YWx1ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2NoYW5nZXNbaV0gPSBpbnQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19jaGFuZ2VzW2ldID0gZmxvYXQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG51bWVyaWNfY2hhbmdlc1tpXSBub3QgaW4gKDAsIC0xKQogICAgICAgICAgICAgICAgICAgICBlbGlmIGsgPT0gOToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlID09ICdZJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXJyb3JlZF9jaGFuZ2VzW2ldID0gJzEnCkBAIC02OTYsNiArNzcwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGVsaWYgayA9PSAxNjoKICAgICAgICAgICAgICAgICAgICAgICAgICMgZGVyaXZlZCBwcm9wZXJ0eSBjaGFuZ2VzOyBub3QgeWV0CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsaWYgayA9PSAxNzoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm9ybWFsaXphdGlvbiBxdWlja2NoZWNrcyBhcmUgbm90IHBlcmZvcm1lZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBmb3Igb2xkZXIgdmVyc2lvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIERpZmZlcmVuY2UoRXhjZXB0aW9uKTpwYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBEaWZmZXJlbmNlKGhleChpKSwgaywgb2xkLnRhYmxlW2ldLCBuZXcudGFibGVbaV0pCkBAIC03MDQsNiArNzgyLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19jaGFuZ2VzKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemF0aW9uX2NoYW5nZXMpKQogCitkZWYgb3Blbl9kYXRhKHRlbXBsYXRlLCB2ZXJzaW9uKToKKyAgICBsb2NhbCA9IHRlbXBsYXRlICUgKCctJyt2ZXJzaW9uLCkKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMobG9jYWwpOgorICAgICAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3QKKyAgICAgICAgaWYgdmVyc2lvbiA9PSAnMy4yLjAnOgorICAgICAgICAgICAgIyBpcnJlZ3VsYXIgdXJsIHN0cnVjdHVyZQorICAgICAgICAgICAgdXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzMuMi1VcGRhdGUvJyArIGxvY2FsCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1cmwgPSAoJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyVzL3VjZC8nK3RlbXBsYXRlKSAlICh2ZXJzaW9uLCAnJykKKyAgICAgICAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUodXJsLCBmaWxlbmFtZT1sb2NhbCkKKyAgICBpZiBsb2NhbC5lbmRzd2l0aCgnLnR4dCcpOgorICAgICAgICByZXR1cm4gb3Blbihsb2NhbCwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICBlbHNlOgorICAgICAgICAjIFVuaWhhbi56aXAKKyAgICAgICAgcmV0dXJuIG9wZW4obG9jYWwsICdyYicpCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgdGhlIGZvbGxvd2luZyBzdXBwb3J0IGNvZGUgaXMgdGFrZW4gZnJvbSB0aGUgdW5pZGIgdXRpbGl0aWVzCkBAIC03MTEsOCArODA0LDYgQEAKIAogIyBsb2FkIGEgdW5pY29kZS1kYXRhIGZpbGUgZnJvbSBkaXNrCiAKLWltcG9ydCBzeXMKLQogY2xhc3MgVW5pY29kZURhdGE6CiAgICAgIyBSZWNvcmQgc3RydWN0dXJlOgogICAgICMgW0lELCBuYW1lLCBjYXRlZ29yeSwgY29tYmluaW5nLCBiaWRpLCBkZWNvbXAsICAoNikKQEAgLTcyMCwxMCArODExLDEyIEBACiAgICAgIyAgSVNPLWNvbW1lbnQsIHVwcGVyY2FzZSwgbG93ZXJjYXNlLCB0aXRsZWNhc2UsIGVhLXdpZHRoLCAoMTYpCiAgICAgIyAgZGVyaXZlZC1wcm9wc10gKDE3KQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCBleGNsdXNpb25zLCBlYXN0YXNpYW53aWR0aCwKLSAgICAgICAgICAgICAgICAgZGVyaXZlZHByb3BzLCBkZXJpdmVkbm9ybWFsaXphdGlvbnByb3BzPU5vbmUsIGV4cGFuZD0xKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgbGluZWJyZWFrcHJvcHM9RmFsc2UsCisgICAgICAgICAgICAgICAgIGV4cGFuZD0xLAorICAgICAgICAgICAgICAgICBjamtfY2hlY2s9VHJ1ZSk6CiAgICAgICAgIHNlbGYuY2hhbmdlZCA9IFtdCi0gICAgICAgIGZpbGUgPSBvcGVuKGZpbGVuYW1lKQorICAgICAgICBmaWxlID0gb3Blbl9kYXRhKFVOSUNPREVfREFUQSwgdmVyc2lvbikKICAgICAgICAgdGFibGUgPSBbTm9uZV0gKiAweDExMDAwMAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgcyA9IGZpbGUucmVhZGxpbmUoKQpAQCAtNzMzLDYgKzgyNiw4IEBACiAgICAgICAgICAgICBjaGFyID0gaW50KHNbMF0sIDE2KQogICAgICAgICAgICAgdGFibGVbY2hhcl0gPSBzCiAKKyAgICAgICAgY2prX3Jhbmdlc19mb3VuZCA9IFtdCisKICAgICAgICAgIyBleHBhbmQgZmlyc3QtbGFzdCByYW5nZXMKICAgICAgICAgaWYgZXhwYW5kOgogICAgICAgICAgICAgZmllbGQgPSBOb25lCkBAIC03NDMsMTkgKzgzOCwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc1sxXSA9ICIiCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IHMKICAgICAgICAgICAgICAgICAgICAgZWxpZiBzWzFdWy01Ol0gPT0gIkxhc3Q+IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNbMV0uc3RhcnRzd2l0aCgiPENKSyBJZGVvZ3JhcGgiKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjamtfcmFuZ2VzX2ZvdW5kLmFwcGVuZCgoZmllbGRbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbMF0pKQogICAgICAgICAgICAgICAgICAgICAgICAgc1sxXSA9ICIiCiAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IE5vbmUKICAgICAgICAgICAgICAgICBlbGlmIGZpZWxkOgogICAgICAgICAgICAgICAgICAgICBmMiA9IGZpZWxkWzpdCiAgICAgICAgICAgICAgICAgICAgIGYyWzBdID0gIiVYIiAlIGkKICAgICAgICAgICAgICAgICAgICAgdGFibGVbaV0gPSBmMgorICAgICAgICAgICAgaWYgY2prX2NoZWNrIGFuZCBjamtfcmFuZ2VzICE9IGNqa19yYW5nZXNfZm91bmQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ0pLIHJhbmdlcyBkZXZpYXRlOiBoYXZlICVyIiAlIGNqa19yYW5nZXNfZm91bmQpCiAKICAgICAgICAgIyBwdWJsaWMgYXR0cmlidXRlcwotICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IFVOSUNPREVfREFUQSAlICcnCiAgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZQogICAgICAgICBzZWxmLmNoYXJzID0gbGlzdChyYW5nZSgweDExMDAwMCkpICMgdW5pY29kZSAzLjIKIAotICAgICAgICBmaWxlID0gb3BlbihleGNsdXNpb25zKQorICAgICAgICBmaWxlID0gb3Blbl9kYXRhKENPTVBPU0lUSU9OX0VYQ0xVU0lPTlMsIHZlcnNpb24pCiAgICAgICAgIHNlbGYuZXhjbHVzaW9ucyA9IHt9CiAgICAgICAgIGZvciBzIGluIGZpbGU6CiAgICAgICAgICAgICBzID0gcy5zdHJpcCgpCkBAIC03NjcsNyArODY3LDcgQEAKICAgICAgICAgICAgIHNlbGYuZXhjbHVzaW9uc1tjaGFyXSA9IDEKIAogICAgICAgICB3aWR0aHMgPSBbTm9uZV0gKiAweDExMDAwMAotICAgICAgICBmb3IgcyBpbiBvcGVuKGVhc3Rhc2lhbndpZHRoKToKKyAgICAgICAgZm9yIHMgaW4gb3Blbl9kYXRhKEVBU1RBU0lBTl9XSURUSCwgdmVyc2lvbik6CiAgICAgICAgICAgICBzID0gcy5zdHJpcCgpCiAgICAgICAgICAgICBpZiBub3QgczoKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtNzg4LDcgKzg4OCw3IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDB4MTEwMDAwKToKICAgICAgICAgICAgIGlmIHRhYmxlW2ldIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRhYmxlW2ldLmFwcGVuZChzZXQoKSkKLSAgICAgICAgZm9yIHMgaW4gb3BlbihkZXJpdmVkcHJvcHMpOgorICAgICAgICBmb3IgcyBpbiBvcGVuX2RhdGEoREVSSVZFRF9DT1JFX1BST1BFUlRJRVMsIHZlcnNpb24pOgogICAgICAgICAgICAgcyA9IHMuc3BsaXQoJyMnLCAxKVswXS5zdHJpcCgpCiAgICAgICAgICAgICBpZiBub3QgczoKICAgICAgICAgICAgICAgICBjb250aW51ZQpAQCAtODA3LDI4ICs5MDcsNjQgQEAKICAgICAgICAgICAgICAgICAgICAgIyBhcHBseSB0byB1bmFzc2lnbmVkIGNvZGUgcG9pbnRzOyBpZ25vcmUgdGhlbQogICAgICAgICAgICAgICAgICAgICB0YWJsZVtjaGFyXVstMV0uYWRkKHApCiAKLSAgICAgICAgaWYgZGVyaXZlZG5vcm1hbGl6YXRpb25wcm9wczoKLSAgICAgICAgICAgIHF1aWNrY2hlY2tzID0gWzBdICogMHgxMTAwMDAgIyBkZWZhdWx0IGlzIFllcwotICAgICAgICAgICAgcWNfb3JkZXIgPSAnTkZEX1FDIE5GS0RfUUMgTkZDX1FDIE5GS0NfUUMnLnNwbGl0KCkKLSAgICAgICAgICAgIGZvciBzIGluIG9wZW4oZGVyaXZlZG5vcm1hbGl6YXRpb25wcm9wcyk6Ci0gICAgICAgICAgICAgICAgaWYgJyMnIGluIHM6Ci0gICAgICAgICAgICAgICAgICAgIHMgPSBzWzpzLmluZGV4KCcjJyldCi0gICAgICAgICAgICAgICAgcyA9IFtpLnN0cmlwKCkgZm9yIGkgaW4gcy5zcGxpdCgnOycpXQotICAgICAgICAgICAgICAgIGlmIGxlbihzKSA8IDIgb3Igc1sxXSBub3QgaW4gcWNfb3JkZXI6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgcXVpY2tjaGVjayA9ICdNTicuaW5kZXgoc1syXSkgKyAxICMgTWF5YmUgb3IgTm8KLSAgICAgICAgICAgICAgICBxdWlja2NoZWNrX3NoaWZ0ID0gcWNfb3JkZXIuaW5kZXgoc1sxXSkqMgotICAgICAgICAgICAgICAgIHF1aWNrY2hlY2sgPDw9IHF1aWNrY2hlY2tfc2hpZnQKLSAgICAgICAgICAgICAgICBpZiAnLi4nIG5vdCBpbiBzWzBdOgotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3QgPSBpbnQoc1swXSwgMTYpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QsIGxhc3QgPSBbaW50KGMsIDE2KSBmb3IgYyBpbiBzWzBdLnNwbGl0KCcuLicpXQotICAgICAgICAgICAgICAgIGZvciBjaGFyIGluIHJhbmdlKGZpcnN0LCBsYXN0KzEpOgotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgbm90IChxdWlja2NoZWNrc1tjaGFyXT4+cXVpY2tjaGVja19zaGlmdCkmMwotICAgICAgICAgICAgICAgICAgICBxdWlja2NoZWNrc1tjaGFyXSB8PSBxdWlja2NoZWNrCi0gICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAweDExMDAwMCk6Ci0gICAgICAgICAgICAgICAgaWYgdGFibGVbaV0gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIHRhYmxlW2ldLmFwcGVuZChxdWlja2NoZWNrc1tpXSkKKyAgICAgICAgZm9yIHMgaW4gb3Blbl9kYXRhKExJTkVfQlJFQUssIHZlcnNpb24pOgorICAgICAgICAgICAgcyA9IHMucGFydGl0aW9uKCcjJylbMF0KKyAgICAgICAgICAgIHMgPSBbaS5zdHJpcCgpIGZvciBpIGluIHMuc3BsaXQoJzsnKV0KKyAgICAgICAgICAgIGlmIGxlbihzKSA8IDIgb3Igc1sxXSBub3QgaW4gTUFOREFUT1JZX0xJTkVfQlJFQUtTOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiAnLi4nIG5vdCBpbiBzWzBdOgorICAgICAgICAgICAgICAgIGZpcnN0ID0gbGFzdCA9IGludChzWzBdLCAxNikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlyc3QsIGxhc3QgPSBbaW50KGMsIDE2KSBmb3IgYyBpbiBzWzBdLnNwbGl0KCcuLicpXQorICAgICAgICAgICAgZm9yIGNoYXIgaW4gcmFuZ2UoZmlyc3QsIGxhc3QrMSk6CisgICAgICAgICAgICAgICAgdGFibGVbY2hhcl1bLTFdLmFkZCgnTGluZV9CcmVhaycpCisKKyAgICAgICAgIyBXZSBvbmx5IHdhbnQgdGhlIHF1aWNrY2hlY2sgcHJvcGVydGllcworICAgICAgICAjIEZvcm1hdDogTkY/X1FDOyBZKGVzKS9OKG8pL00oYXliZSkKKyAgICAgICAgIyBZZXMgaXMgdGhlIGRlZmF1bHQsIGhlbmNlIG9ubHkgTiBhbmQgTSBvY2N1cgorICAgICAgICAjIEluIDMuMi4wLCB0aGUgZm9ybWF0IHdhcyBkaWZmZXJlbnQgKE5GP19OTykKKyAgICAgICAgIyBUaGUgcGFyc2luZyB3aWxsIGluY29ycmVjdGx5IGRldGVybWluZSB0aGVzZSBhcworICAgICAgICAjICJ5ZXMiLCBob3dldmVyLCB1bmljb2RlZGF0YS5jIHdpbGwgbm90IHBlcmZvcm0gcXVpY2tjaGVja3MKKyAgICAgICAgIyBmb3Igb2xkZXIgdmVyc2lvbnMsIGFuZCBubyBkZWx0YSByZWNvcmRzIHdpbGwgYmUgY3JlYXRlZC4KKyAgICAgICAgcXVpY2tjaGVja3MgPSBbMF0gKiAweDExMDAwMAorICAgICAgICBxY19vcmRlciA9ICdORkRfUUMgTkZLRF9RQyBORkNfUUMgTkZLQ19RQycuc3BsaXQoKQorICAgICAgICBmb3IgcyBpbiBvcGVuX2RhdGEoREVSSVZFRE5PUk1BTElaQVRJT05fUFJPUFMsIHZlcnNpb24pOgorICAgICAgICAgICAgaWYgJyMnIGluIHM6CisgICAgICAgICAgICAgICAgcyA9IHNbOnMuaW5kZXgoJyMnKV0KKyAgICAgICAgICAgIHMgPSBbaS5zdHJpcCgpIGZvciBpIGluIHMuc3BsaXQoJzsnKV0KKyAgICAgICAgICAgIGlmIGxlbihzKSA8IDIgb3Igc1sxXSBub3QgaW4gcWNfb3JkZXI6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHF1aWNrY2hlY2sgPSAnTU4nLmluZGV4KHNbMl0pICsgMSAjIE1heWJlIG9yIE5vCisgICAgICAgICAgICBxdWlja2NoZWNrX3NoaWZ0ID0gcWNfb3JkZXIuaW5kZXgoc1sxXSkqMgorICAgICAgICAgICAgcXVpY2tjaGVjayA8PD0gcXVpY2tjaGVja19zaGlmdAorICAgICAgICAgICAgaWYgJy4uJyBub3QgaW4gc1swXToKKyAgICAgICAgICAgICAgICBmaXJzdCA9IGxhc3QgPSBpbnQoc1swXSwgMTYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZpcnN0LCBsYXN0ID0gW2ludChjLCAxNikgZm9yIGMgaW4gc1swXS5zcGxpdCgnLi4nKV0KKyAgICAgICAgICAgIGZvciBjaGFyIGluIHJhbmdlKGZpcnN0LCBsYXN0KzEpOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3QgKHF1aWNrY2hlY2tzW2NoYXJdPj5xdWlja2NoZWNrX3NoaWZ0KSYzCisgICAgICAgICAgICAgICAgcXVpY2tjaGVja3NbY2hhcl0gfD0gcXVpY2tjaGVjaworICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCAweDExMDAwMCk6CisgICAgICAgICAgICBpZiB0YWJsZVtpXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0YWJsZVtpXS5hcHBlbmQocXVpY2tjaGVja3NbaV0pCisKKyAgICAgICAgemlwID0gemlwZmlsZS5aaXBGaWxlKG9wZW5fZGF0YShVTklIQU4sIHZlcnNpb24pKQorICAgICAgICBpZiB2ZXJzaW9uID09ICczLjIuMCc6CisgICAgICAgICAgICBkYXRhID0gemlwLm9wZW4oJ1VuaWhhbi0zLjIuMC50eHQnKS5yZWFkKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRhdGEgPSB6aXAub3BlbignVW5paGFuX051bWVyaWNWYWx1ZXMudHh0JykucmVhZCgpCisgICAgICAgIGZvciBsaW5lIGluIGRhdGEuZGVjb2RlKCJ1dGYtOCIpLnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoJ1UrJyk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGNvZGUsIHRhZywgdmFsdWUgPSBsaW5lLnNwbGl0KE5vbmUsIDMpWzozXQorICAgICAgICAgICAgaWYgdGFnIG5vdCBpbiAoJ2tBY2NvdW50aW5nTnVtZXJpYycsICdrUHJpbWFyeU51bWVyaWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tPdGhlck51bWVyaWMnKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdHJpcCgpLnJlcGxhY2UoJywnLCAnJykKKyAgICAgICAgICAgIGkgPSBpbnQoY29kZVsyOl0sIDE2KQorICAgICAgICAgICAgIyBQYXRjaCB0aGUgbnVtZXJpYyBmaWVsZAorICAgICAgICAgICAgaWYgdGFibGVbaV0gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdGFibGVbaV1bOF0gPSB2YWx1ZQogCiAgICAgZGVmIHVzZWxhdGluMShzZWxmKToKICAgICAgICAgIyByZXN0cmljdCBjaGFyYWN0ZXIgcmFuZ2UgdG8gSVNPIExhdGluIDEKQEAgLTk3OSw3ICsxMTE1LDYgQEAKICAgICB5b3UnbGwgZ2V0LgogICAgICIiIgogCi0gICAgaW1wb3J0IHN5cwogICAgIGlmIHRyYWNlOgogICAgICAgICBkZWYgZHVtcCh0MSwgdDIsIHNoaWZ0LCBieXRlcyk6CiAgICAgICAgICAgICBwcmludCgiJWQrJWQgYmlucyBhdCBzaGlmdCAlZDsgJWQgYnl0ZXMiICUgKApkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pdHRlc3RndWkvUkVBRE1FLnR4dCBiL1Rvb2xzL3VuaXR0ZXN0Z3VpL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ4MDlkZgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaXR0ZXN0Z3VpL1JFQURNRS50eHQKQEAgLTAsMCArMSwxNiBAQAordW5pdHRlc3RndWkucHkgaXMgR1VJIGZyYW1ld29yayBhbmQgYXBwbGljYXRpb24gZm9yIHVzZSB3aXRoIFB5dGhvbiB1bml0IAordGVzdGluZyBmcmFtZXdvcmsuIEl0IGV4ZWN1dGVzIHRlc3RzIHdyaXR0ZW4gdXNpbmcgdGhlIGZyYW1ld29yayBwcm92aWRlZCAKK2J5IHRoZSAndW5pdHRlc3QnIG1vZHVsZS4KKworQmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5IFN0ZXZlIFB1cmNlbGwsIGZyb206CisKKyAgaHR0cDovL3B5dW5pdC5zb3VyY2Vmb3JnZS5uZXQvCisKK1VwZGF0ZWQgZm9yIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IGJ5IE1hcmsgUm9kZHkgYW5kIFB5dGhvbiAzCitzdXBwb3J0IGJ5IEJyaWFuIEN1cnRpbi4KKworRm9yIGRldGFpbHMgb24gaG93IHRvIG1ha2UgeW91ciB0ZXN0cyB3b3JrIHdpdGggdGVzdCBkaXNjb3ZlcnksCithbmQgZm9yIGV4cGxhbmF0aW9ucyBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCBzZWUgdGhlIHVuaXR0ZXN0Citkb2N1bWVudGF0aW9uOgorCisgICAgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3VuaXR0ZXN0Lmh0bWwjdGVzdC1kaXNjb3ZlcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaXR0ZXN0Z3VpL3VuaXR0ZXN0Z3VpLnB5IGIvVG9vbHMvdW5pdHRlc3RndWkvdW5pdHRlc3RndWkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyNjY0NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaXR0ZXN0Z3VpL3VuaXR0ZXN0Z3VpLnB5CkBAIC0wLDAgKzEsNDc5IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyIiIgorR1VJIGZyYW1ld29yayBhbmQgYXBwbGljYXRpb24gZm9yIHVzZSB3aXRoIFB5dGhvbiB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLgorRXhlY3V0ZSB0ZXN0cyB3cml0dGVuIHVzaW5nIHRoZSBmcmFtZXdvcmsgcHJvdmlkZWQgYnkgdGhlICd1bml0dGVzdCcgbW9kdWxlLgorCitVcGRhdGVkIGZvciB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBieSBNYXJrIFJvZGR5IGFuZCBQeXRob24gMworc3VwcG9ydCBieSBCcmlhbiBDdXJ0aW4uCisKK0Jhc2VkIG9uIHRoZSBvcmlnaW5hbCBieSBTdGV2ZSBQdXJjZWxsLCBmcm9tOgorCisgIGh0dHA6Ly9weXVuaXQuc291cmNlZm9yZ2UubmV0LworCitDb3B5cmlnaHQgKGMpIDE5OTksIDIwMDAsIDIwMDEgU3RldmUgUHVyY2VsbAorVGhpcyBtb2R1bGUgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIFB5dGhvbiBpdHNlbGYsIHNvIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbWVzc2FnZQorYW5kIGRpc2NsYWltZXIgYXJlIHJldGFpbmVkIGluIHRoZWlyIG9yaWdpbmFsIGZvcm0uCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIENPREUsIEVWRU4gSUYgVEhFIEFVVEhPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCisKK1RIRSBBVVRIT1IgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIENPREUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsCitBTkQgVEhFUkUgSVMgTk8gT0JMSUdBVElPTiBXSEFUU09FVkVSIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsCitTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisiIiIKKworX19hdXRob3JfXyA9ICJTdGV2ZSBQdXJjZWxsIChzdGVwaGVuX3B1cmNlbGxAeWFob28uY29tKSIKK19fdmVyc2lvbl9fID0gIiRSZXZpc2lvbjogMS43ICQiWzExOi0yXQorCitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCitpbXBvcnQgdW5pdHRlc3QKKworaW1wb3J0IHRraW50ZXIgYXMgdGsKK2Zyb20gdGtpbnRlciBpbXBvcnQgbWVzc2FnZWJveAorZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nCitmcm9tIHRraW50ZXIgaW1wb3J0IHNpbXBsZWRpYWxvZworCisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR1VJIGZyYW1ld29yayBjbGFzc2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgQmFzZUdVSVRlc3RSdW5uZXIob2JqZWN0KToKKyAgICAiIiJTdWJjbGFzcyB0aGlzIGNsYXNzIHRvIGNyZWF0ZSBhIEdVSSBUZXN0UnVubmVyIHRoYXQgdXNlcyBhIHNwZWNpZmljCisgICAgd2luZG93aW5nIHRvb2xraXQuIFRoZSBjbGFzcyB0YWtlcyBjYXJlIG9mIHJ1bm5pbmcgdGVzdHMgaW4gdGhlIGNvcnJlY3QKKyAgICBtYW5uZXIsIGFuZCBtYWtpbmcgY2FsbGJhY2tzIHRvIHRoZSBkZXJpdmVkIGNsYXNzIHRvIG9idGFpbiBpbmZvcm1hdGlvbgorICAgIG9yIHNpZ25hbCB0aGF0IGV2ZW50cyBoYXZlIG9jY3VycmVkLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLmN1cnJlbnRSZXN1bHQgPSBOb25lCisgICAgICAgIHNlbGYucnVubmluZyA9IDAKKyAgICAgICAgc2VsZi5fX3JvbGxiYWNrSW1wb3J0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX19yb2xsYmFja0ltcG9ydGVyID0gUm9sbGJhY2tJbXBvcnRlcigpCisgICAgICAgIHNlbGYudGVzdF9zdWl0ZSA9IE5vbmUKKworICAgICAgICAjdGVzdCBkaXNjb3ZlcnkgdmFyaWFibGVzCisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3RvX3JlYWQgPSAnJworICAgICAgICBzZWxmLnRvcF9sZXZlbF9kaXIgPSAnJworICAgICAgICBzZWxmLnRlc3RfZmlsZV9nbG9iX3BhdHRlcm4gPSAndGVzdCoucHknCisKKyAgICAgICAgc2VsZi5pbml0R1VJKCphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBlcnJvckRpYWxvZyhzZWxmLCB0aXRsZSwgbWVzc2FnZSk6CisgICAgICAgICJPdmVycmlkZSB0byBkaXNwbGF5IGFuIGVycm9yIGFyaXNpbmcgZnJvbSBHVUkgdXNhZ2UiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBnZXREaXJlY3RvcnlUb0Rpc2NvdmVyKHNlbGYpOgorICAgICAgICAiT3ZlcnJpZGUgdG8gcHJvbXB0IHVzZXIgZm9yIGRpcmVjdG9yeSB0byBwZXJmb3JtIHRlc3QgZGlzY292ZXJ5IgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVuQ2xpY2tlZChzZWxmKToKKyAgICAgICAgIlRvIGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byB1c2VyIGNob29zaW5nIHRvIHJ1biBhIHRlc3QiCisgICAgICAgIGlmIHNlbGYucnVubmluZzogcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLnRlc3Rfc3VpdGU6CisgICAgICAgICAgICBzZWxmLmVycm9yRGlhbG9nKCJUZXN0IERpc2NvdmVyeSIsICJZb3UgZGlzY292ZXIgc29tZSB0ZXN0cyBmaXJzdCEiKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuY3VycmVudFJlc3VsdCA9IEdVSVRlc3RSZXN1bHQoc2VsZikKKyAgICAgICAgc2VsZi50b3RhbFRlc3RzID0gc2VsZi50ZXN0X3N1aXRlLmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gMQorICAgICAgICBzZWxmLm5vdGlmeVJ1bm5pbmcoKQorICAgICAgICBzZWxmLnRlc3Rfc3VpdGUucnVuKHNlbGYuY3VycmVudFJlc3VsdCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gMAorICAgICAgICBzZWxmLm5vdGlmeVN0b3BwZWQoKQorCisgICAgZGVmIHN0b3BDbGlja2VkKHNlbGYpOgorICAgICAgICAiVG8gYmUgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHVzZXIgc3RvcHBpbmcgdGhlIHJ1bm5pbmcgb2YgYSB0ZXN0IgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRSZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRSZXN1bHQuc3RvcCgpCisKKyAgICBkZWYgZGlzY292ZXJDbGlja2VkKHNlbGYpOgorICAgICAgICBzZWxmLl9fcm9sbGJhY2tJbXBvcnRlci5yb2xsYmFja0ltcG9ydHMoKQorICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmdldERpcmVjdG9yeVRvRGlzY292ZXIoKQorICAgICAgICBpZiBub3QgZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3RvX3JlYWQgPSBkaXJlY3RvcnkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBFeHBsaWNpdGx5IHVzZSAnTm9uZScgdmFsdWUgaWYgbm8gdG9wIGxldmVsIGRpcmVjdG9yeSBpcworICAgICAgICAgICAgIyBzcGVjaWZpZWQgKGluZGljYXRlZCBieSBlbXB0eSBzdHJpbmcpIGFzIGRpc2NvdmVyKCkgZXhwbGljaXRseQorICAgICAgICAgICAgIyBjaGVja3MgZm9yIGEgJ05vbmUnIHRvIGRldGVybWluZSBpZiBubyB0bGQgaGFzIGJlZW4gc3BlY2lmaWVkCisgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyID0gc2VsZi50b3BfbGV2ZWxfZGlyIG9yIE5vbmUKKyAgICAgICAgICAgIHRlc3RzID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIuZGlzY292ZXIoZGlyZWN0b3J5LCBzZWxmLnRlc3RfZmlsZV9nbG9iX3BhdHRlcm4sIHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICBzZWxmLnRlc3Rfc3VpdGUgPSB0ZXN0cworICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpCisgICAgICAgICAgICBzZWxmLmVycm9yRGlhbG9nKCJVbmFibGUgdG8gcnVuIHRlc3QgJyVzJyIgJSBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBsb2FkaW5nIHNwZWNpZmllZCB0ZXN0OiAlcywgJXMiICUgKGV4Y190eXBlLCBleGNfdmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYubm90aWZ5VGVzdHNEaXNjb3ZlcmVkKHNlbGYudGVzdF9zdWl0ZSkKKworICAgICMgUmVxdWlyZWQgY2FsbGJhY2tzCisKKyAgICBkZWYgbm90aWZ5VGVzdHNEaXNjb3ZlcmVkKHNlbGYsIHRlc3Rfc3VpdGUpOgorICAgICAgICAiT3ZlcnJpZGUgdG8gZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3VpdGUgb2YgZGlzY292ZXJlZCB0ZXN0cyIKKyAgICAgICAgcGFzcworCisgICAgZGVmIG5vdGlmeVJ1bm5pbmcoc2VsZik6CisgICAgICAgICJPdmVycmlkZSB0byBzZXQgR1VJIGluICdydW5uaW5nJyBtb2RlLCBlbmFibGluZyAnc3RvcCcgYnV0dG9uIGV0Yy4iCisgICAgICAgIHBhc3MKKworICAgIGRlZiBub3RpZnlTdG9wcGVkKHNlbGYpOgorICAgICAgICAiT3ZlcnJpZGUgdG8gc2V0IEdVSSBpbiAnc3RvcHBlZCcgbW9kZSwgZW5hYmxpbmcgJ3J1bicgYnV0dG9uIGV0Yy4iCisgICAgICAgIHBhc3MKKworICAgIGRlZiBub3RpZnlUZXN0RmFpbGVkKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgICJPdmVycmlkZSB0byBpbmRpY2F0ZSB0aGF0IGEgdGVzdCBoYXMganVzdCBmYWlsZWQiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBub3RpZnlUZXN0RXJyb3JlZChzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiT3ZlcnJpZGUgdG8gaW5kaWNhdGUgdGhhdCBhIHRlc3QgaGFzIGp1c3QgZXJyb3JlZCIKKyAgICAgICAgcGFzcworCisgICAgZGVmIG5vdGlmeVRlc3RTa2lwcGVkKHNlbGYsIHRlc3QsIHJlYXNvbik6CisgICAgICAgICJPdmVycmlkZSB0byBpbmRpY2F0ZSB0aGF0IHRlc3Qgd2FzIHNraXBwZWQiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBub3RpZnlUZXN0RmFpbGVkRXhwZWN0ZWRseShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICAiT3ZlcnJpZGUgdG8gaW5kaWNhdGUgdGhhdCB0ZXN0IGhhcyBqdXN0IGZhaWxlZCBleHBlY3RlZGx5IgorICAgICAgICBwYXNzCisKKyAgICBkZWYgbm90aWZ5VGVzdFN0YXJ0ZWQoc2VsZiwgdGVzdCk6CisgICAgICAgICJPdmVycmlkZSB0byBpbmRpY2F0ZSB0aGF0IGEgdGVzdCBpcyBhYm91dCB0byBydW4iCisgICAgICAgIHBhc3MKKworICAgIGRlZiBub3RpZnlUZXN0RmluaXNoZWQoc2VsZiwgdGVzdCk6CisgICAgICAgICIiIk92ZXJyaWRlIHRvIGluZGljYXRlIHRoYXQgYSB0ZXN0IGhhcyBmaW5pc2hlZCAoaXQgbWF5IGFscmVhZHkgaGF2ZQorICAgICAgICAgICBmYWlsZWQgb3IgZXJyb3JlZCkiIiIKKyAgICAgICAgcGFzcworCisKK2NsYXNzIEdVSVRlc3RSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CisgICAgIiIiQSBUZXN0UmVzdWx0IHRoYXQgbWFrZXMgY2FsbGJhY2tzIHRvIGl0cyBhc3NvY2lhdGVkIEdVSSBUZXN0UnVubmVyLgorICAgIFVzZWQgYnkgQmFzZUdVSVRlc3RSdW5uZXIuIE5lZWQgbm90IGJlIGNyZWF0ZWQgZGlyZWN0bHkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNhbGxiYWNrKToKKyAgICAgICAgdW5pdHRlc3QuVGVzdFJlc3VsdC5fX2luaXRfXyhzZWxmKQorICAgICAgICBzZWxmLmNhbGxiYWNrID0gY2FsbGJhY2sKKworICAgIGRlZiBhZGRFcnJvcihzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICB1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEVycm9yKHNlbGYsIHRlc3QsIGVycikKKyAgICAgICAgc2VsZi5jYWxsYmFjay5ub3RpZnlUZXN0RXJyb3JlZCh0ZXN0LCBlcnIpCisKKyAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICB1bml0dGVzdC5UZXN0UmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgdGVzdCwgZXJyKQorICAgICAgICBzZWxmLmNhbGxiYWNrLm5vdGlmeVRlc3RGYWlsZWQodGVzdCwgZXJyKQorCisgICAgZGVmIGFkZFNraXAoc2VsZiwgdGVzdCwgcmVhc29uKToKKyAgICAgICAgc3VwZXIoR1VJVGVzdFJlc3VsdCxzZWxmKS5hZGRTa2lwKHRlc3QsIHJlYXNvbikKKyAgICAgICAgc2VsZi5jYWxsYmFjay5ub3RpZnlUZXN0U2tpcHBlZCh0ZXN0LCByZWFzb24pCisKKyAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHN1cGVyKEdVSVRlc3RSZXN1bHQsc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKHRlc3QsIGVycikKKyAgICAgICAgc2VsZi5jYWxsYmFjay5ub3RpZnlUZXN0RmFpbGVkRXhwZWN0ZWRseSh0ZXN0LCBlcnIpCisKKyAgICBkZWYgc3RvcFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RvcFRlc3Qoc2VsZiwgdGVzdCkKKyAgICAgICAgc2VsZi5jYWxsYmFjay5ub3RpZnlUZXN0RmluaXNoZWQodGVzdCkKKworICAgIGRlZiBzdGFydFRlc3Qoc2VsZiwgdGVzdCk6CisgICAgICAgIHVuaXR0ZXN0LlRlc3RSZXN1bHQuc3RhcnRUZXN0KHNlbGYsIHRlc3QpCisgICAgICAgIHNlbGYuY2FsbGJhY2subm90aWZ5VGVzdFN0YXJ0ZWQodGVzdCkKKworCitjbGFzcyBSb2xsYmFja0ltcG9ydGVyOgorICAgICIiIlRoaXMgdHJpY2t5IGxpdHRsZSBjbGFzcyBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IG1vZHVsZXMgdW5kZXIgdGVzdAorICAgIHdpbGwgYmUgcmVsb2FkZWQgdGhlIG5leHQgdGltZSB0aGV5IGFyZSBpbXBvcnRlZC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucHJldmlvdXNNb2R1bGVzID0gc3lzLm1vZHVsZXMuY29weSgpCisKKyAgICBkZWYgcm9sbGJhY2tJbXBvcnRzKHNlbGYpOgorICAgICAgICBmb3IgbW9kbmFtZSBpbiBzeXMubW9kdWxlcy5jb3B5KCkua2V5cygpOgorICAgICAgICAgICAgaWYgbm90IG1vZG5hbWUgaW4gc2VsZi5wcmV2aW91c01vZHVsZXM6CisgICAgICAgICAgICAgICAgIyBGb3JjZSByZWxvYWQgd2hlbiBtb2RuYW1lIG5leHQgaW1wb3J0ZWQKKyAgICAgICAgICAgICAgICBkZWwoc3lzLm1vZHVsZXNbbW9kbmFtZV0pCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFRraW50ZXIgR1VJCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgRGlzY292ZXJTZXR0aW5nc0RpYWxvZyhzaW1wbGVkaWFsb2cuRGlhbG9nKToKKyAgICAiIiIKKyAgICBEaWFsb2cgYm94IGZvciBwcm9tcHRpbmcgdGVzdCBkaXNjb3Zlcnkgc2V0dGluZ3MKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXIsIHRvcF9sZXZlbF9kaXIsIHRlc3RfZmlsZV9nbG9iX3BhdHRlcm4sICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYudG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKKyAgICAgICAgc2VsZi5kaXJWYXIgPSB0ay5TdHJpbmdWYXIoKQorICAgICAgICBzZWxmLmRpclZhci5zZXQodG9wX2xldmVsX2RpcikKKworICAgICAgICBzZWxmLnRlc3RfZmlsZV9nbG9iX3BhdHRlcm4gPSB0ZXN0X2ZpbGVfZ2xvYl9wYXR0ZXJuCisgICAgICAgIHNlbGYudGVzdFBhdHRlcm5WYXIgPSB0ay5TdHJpbmdWYXIoKQorICAgICAgICBzZWxmLnRlc3RQYXR0ZXJuVmFyLnNldCh0ZXN0X2ZpbGVfZ2xvYl9wYXR0ZXJuKQorCisgICAgICAgIHNpbXBsZWRpYWxvZy5EaWFsb2cuX19pbml0X18oc2VsZiwgbWFzdGVyLCB0aXRsZT0iRGlzY292ZXIgU2V0dGluZ3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLCAqKmt3YXJncykKKworICAgIGRlZiBib2R5KHNlbGYsIG1hc3Rlcik6CisgICAgICAgIHRrLkxhYmVsKG1hc3RlciwgdGV4dD0iVG9wIExldmVsIERpcmVjdG9yeSIpLmdyaWQocm93PTApCisgICAgICAgIHNlbGYuZTEgPSB0ay5FbnRyeShtYXN0ZXIsIHRleHR2YXJpYWJsZT1zZWxmLmRpclZhcikKKyAgICAgICAgc2VsZi5lMS5ncmlkKHJvdyA9IDAsIGNvbHVtbj0xKQorICAgICAgICB0ay5CdXR0b24obWFzdGVyLCB0ZXh0PSIuLi4iLAorICAgICAgICAgICAgICAgICAgY29tbWFuZD1sYW1iZGE6IHNlbGYuc2VsZWN0RGlyQ2xpY2tlZChtYXN0ZXIpKS5ncmlkKHJvdz0wLGNvbHVtbj0zKQorCisgICAgICAgIHRrLkxhYmVsKG1hc3RlciwgdGV4dD0iVGVzdCBGaWxlIFBhdHRlcm4iKS5ncmlkKHJvdz0xKQorICAgICAgICBzZWxmLmUyID0gdGsuRW50cnkobWFzdGVyLCB0ZXh0dmFyaWFibGUgPSBzZWxmLnRlc3RQYXR0ZXJuVmFyKQorICAgICAgICBzZWxmLmUyLmdyaWQocm93ID0gMSwgY29sdW1uPTEpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2VsZWN0RGlyQ2xpY2tlZChzZWxmLCBtYXN0ZXIpOgorICAgICAgICBkaXJfcGF0aCA9IGZpbGVkaWFsb2cuYXNrZGlyZWN0b3J5KHBhcmVudD1tYXN0ZXIpCisgICAgICAgIGlmIGRpcl9wYXRoOgorICAgICAgICAgICAgc2VsZi5kaXJWYXIuc2V0KGRpcl9wYXRoKQorCisgICAgZGVmIGFwcGx5KHNlbGYpOgorICAgICAgICBzZWxmLnRvcF9sZXZlbF9kaXIgPSBzZWxmLmRpclZhci5nZXQoKQorICAgICAgICBzZWxmLnRlc3RfZmlsZV9nbG9iX3BhdHRlcm4gPSBzZWxmLnRlc3RQYXR0ZXJuVmFyLmdldCgpCisKK2NsYXNzIFRrVGVzdFJ1bm5lcihCYXNlR1VJVGVzdFJ1bm5lcik6CisgICAgIiIiQW4gaW1wbGVtZW50YXRpb24gb2YgQmFzZUdVSVRlc3RSdW5uZXIgdXNpbmcgVGtpbnRlci4KKyAgICAiIiIKKyAgICBkZWYgaW5pdEdVSShzZWxmLCByb290LCBpbml0aWFsVGVzdE5hbWUpOgorICAgICAgICAiIiJTZXQgdXAgdGhlIEdVSSBpbnNpZGUgdGhlIGdpdmVuIHJvb3Qgd2luZG93LiBUaGUgdGVzdCBuYW1lIGVudHJ5CisgICAgICAgIGZpZWxkIHdpbGwgYmUgcHJlLWZpbGxlZCB3aXRoIHRoZSBnaXZlbiBpbml0aWFsVGVzdE5hbWUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnJvb3QgPSByb290CisKKyAgICAgICAgc2VsZi5zdGF0dXNWYXIgPSB0ay5TdHJpbmdWYXIoKQorICAgICAgICBzZWxmLnN0YXR1c1Zhci5zZXQoIklkbGUiKQorCisgICAgICAgICN0ayB2YXJzIGZvciB0cmFja2luZyBjb3VudHMgb2YgdGVzdCByZXN1bHQgdHlwZXMKKyAgICAgICAgc2VsZi5ydW5Db3VudFZhciA9IHRrLkludFZhcigpCisgICAgICAgIHNlbGYuZmFpbENvdW50VmFyID0gdGsuSW50VmFyKCkKKyAgICAgICAgc2VsZi5lcnJvckNvdW50VmFyID0gdGsuSW50VmFyKCkKKyAgICAgICAgc2VsZi5za2lwQ291bnRWYXIgPSB0ay5JbnRWYXIoKQorICAgICAgICBzZWxmLmV4cGVjdEZhaWxDb3VudFZhciA9IHRrLkludFZhcigpCisgICAgICAgIHNlbGYucmVtYWluaW5nQ291bnRWYXIgPSB0ay5JbnRWYXIoKQorCisgICAgICAgIHNlbGYudG9wID0gdGsuRnJhbWUoKQorICAgICAgICBzZWxmLnRvcC5wYWNrKGZpbGw9dGsuQk9USCwgZXhwYW5kPTEpCisgICAgICAgIHNlbGYuY3JlYXRlV2lkZ2V0cygpCisKKyAgICBkZWYgZ2V0RGlyZWN0b3J5VG9EaXNjb3ZlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbGVkaWFsb2cuYXNrZGlyZWN0b3J5KCkKKworICAgIGRlZiBzZXR0aW5nc0NsaWNrZWQoc2VsZik6CisgICAgICAgIGQgPSBEaXNjb3ZlclNldHRpbmdzRGlhbG9nKHNlbGYudG9wLCBzZWxmLnRvcF9sZXZlbF9kaXIsIHNlbGYudGVzdF9maWxlX2dsb2JfcGF0dGVybikKKyAgICAgICAgc2VsZi50b3BfbGV2ZWxfZGlyID0gZC50b3BfbGV2ZWxfZGlyCisgICAgICAgIHNlbGYudGVzdF9maWxlX2dsb2JfcGF0dGVybiA9IGQudGVzdF9maWxlX2dsb2JfcGF0dGVybgorCisgICAgZGVmIG5vdGlmeVRlc3RzRGlzY292ZXJlZChzZWxmLCB0ZXN0X3N1aXRlKToKKyAgICAgICAgZGlzY292ZXJlZCA9IHRlc3Rfc3VpdGUuY291bnRUZXN0Q2FzZXMoKQorICAgICAgICBzZWxmLnJ1bkNvdW50VmFyLnNldCgwKQorICAgICAgICBzZWxmLmZhaWxDb3VudFZhci5zZXQoMCkKKyAgICAgICAgc2VsZi5lcnJvckNvdW50VmFyLnNldCgwKQorICAgICAgICBzZWxmLnJlbWFpbmluZ0NvdW50VmFyLnNldChkaXNjb3ZlcmVkKQorICAgICAgICBzZWxmLnByb2dyZXNzQmFyLnNldFByb2dyZXNzRnJhY3Rpb24oMC4wKQorICAgICAgICBzZWxmLmVycm9yTGlzdGJveC5kZWxldGUoMCwgdGsuRU5EKQorICAgICAgICBzZWxmLnN0YXR1c1Zhci5zZXQoIkRpc2NvdmVyaW5nIHRlc3RzIGZyb20gJXMuIEZvdW5kOiAlcyIgJQorICAgICAgICAgICAgKHNlbGYuZGlyZWN0b3J5X3RvX3JlYWQsIGRpc2NvdmVyZWQpKQorICAgICAgICBzZWxmLnN0b3BHb0J1dHRvblsnc3RhdGUnXSA9IHRrLk5PUk1BTAorCisgICAgZGVmIGNyZWF0ZVdpZGdldHMoc2VsZik6CisgICAgICAgICIiIkNyZWF0ZXMgYW5kIHBhY2tzIHRoZSB2YXJpb3VzIHdpZGdldHMuCisKKyAgICAgICAgV2h5IGlzIGl0IHRoYXQgR1VJIGNvZGUgYWx3YXlzIGVuZHMgdXAgbG9va2luZyBhIG1lc3MsIGRlc3BpdGUgYWxsIHRoZQorICAgICAgICBiZXN0IGludGVudGlvbnMgdG8ga2VlcCBpdCB0aWR5PyBBbnN3ZXJzIG9uIGEgcG9zdGNhcmQsIHBsZWFzZS4KKyAgICAgICAgIiIiCisgICAgICAgICMgU3RhdHVzIGJhcgorICAgICAgICBzdGF0dXNGcmFtZSA9IHRrLkZyYW1lKHNlbGYudG9wLCByZWxpZWY9dGsuU1VOS0VOLCBib3JkZXJ3aWR0aD0yKQorICAgICAgICBzdGF0dXNGcmFtZS5wYWNrKGFuY2hvcj10ay5TVywgZmlsbD10ay5YLCBzaWRlPXRrLkJPVFRPTSkKKyAgICAgICAgdGsuTGFiZWwoc3RhdHVzRnJhbWUsIHdpZHRoPTEsIHRleHR2YXJpYWJsZT1zZWxmLnN0YXR1c1ZhcikucGFjayhzaWRlPXRrLlRPUCwgZmlsbD10ay5YKQorCisgICAgICAgICMgQXJlYSB0byBlbnRlciBuYW1lIG9mIHRlc3QgdG8gcnVuCisgICAgICAgIGxlZnRGcmFtZSA9IHRrLkZyYW1lKHNlbGYudG9wLCBib3JkZXJ3aWR0aD0zKQorICAgICAgICBsZWZ0RnJhbWUucGFjayhmaWxsPXRrLkJPVEgsIHNpZGU9dGsuTEVGVCwgYW5jaG9yPXRrLk5XLCBleHBhbmQ9MSkKKyAgICAgICAgc3VpdGVOYW1lRnJhbWUgPSB0ay5GcmFtZShsZWZ0RnJhbWUsIGJvcmRlcndpZHRoPTMpCisgICAgICAgIHN1aXRlTmFtZUZyYW1lLnBhY2soZmlsbD10ay5YKQorCisgICAgICAgICMgUHJvZ3Jlc3MgYmFyCisgICAgICAgIHByb2dyZXNzRnJhbWUgPSB0ay5GcmFtZShsZWZ0RnJhbWUsIHJlbGllZj10ay5HUk9PVkUsIGJvcmRlcndpZHRoPTIpCisgICAgICAgIHByb2dyZXNzRnJhbWUucGFjayhmaWxsPXRrLlgsIGV4cGFuZD0wLCBhbmNob3I9dGsuTlcpCisgICAgICAgIHRrLkxhYmVsKHByb2dyZXNzRnJhbWUsIHRleHQ9IlByb2dyZXNzOiIpLnBhY2soYW5jaG9yPXRrLlcpCisgICAgICAgIHNlbGYucHJvZ3Jlc3NCYXIgPSBQcm9ncmVzc0Jhcihwcm9ncmVzc0ZyYW1lLCByZWxpZWY9dGsuU1VOS0VOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyd2lkdGg9MikKKyAgICAgICAgc2VsZi5wcm9ncmVzc0Jhci5wYWNrKGZpbGw9dGsuWCwgZXhwYW5kPTEpCisKKworICAgICAgICAjIEFyZWEgd2l0aCBidXR0b25zIHRvIHN0YXJ0L3N0b3AgdGVzdHMgYW5kIHF1aXQKKyAgICAgICAgYnV0dG9uRnJhbWUgPSB0ay5GcmFtZShzZWxmLnRvcCwgYm9yZGVyd2lkdGg9MykKKyAgICAgICAgYnV0dG9uRnJhbWUucGFjayhzaWRlPXRrLkxFRlQsIGFuY2hvcj10ay5OVywgZmlsbD10ay5ZKQorCisgICAgICAgIHRrLkJ1dHRvbihidXR0b25GcmFtZSwgdGV4dD0iRGlzY292ZXIgVGVzdHMiLAorICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmRpc2NvdmVyQ2xpY2tlZCkucGFjayhmaWxsPXRrLlgpCisKKworICAgICAgICBzZWxmLnN0b3BHb0J1dHRvbiA9IHRrLkJ1dHRvbihidXR0b25GcmFtZSwgdGV4dD0iU3RhcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYucnVuQ2xpY2tlZCwgc3RhdGU9dGsuRElTQUJMRUQpCisgICAgICAgIHNlbGYuc3RvcEdvQnV0dG9uLnBhY2soZmlsbD10ay5YKQorCisgICAgICAgIHRrLkJ1dHRvbihidXR0b25GcmFtZSwgdGV4dD0iQ2xvc2UiLAorICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnRvcC5xdWl0KS5wYWNrKHNpZGU9dGsuQk9UVE9NLCBmaWxsPXRrLlgpCisgICAgICAgIHRrLkJ1dHRvbihidXR0b25GcmFtZSwgdGV4dD0iU2V0dGluZ3MiLAorICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnNldHRpbmdzQ2xpY2tlZCkucGFjayhzaWRlPXRrLkJPVFRPTSwgZmlsbD10ay5YKQorCisgICAgICAgICMgQXJlYSB3aXRoIGxhYmVscyByZXBvcnRpbmcgcmVzdWx0cworICAgICAgICBmb3IgbGFiZWwsIHZhciBpbiAoKCdSdW46Jywgc2VsZi5ydW5Db3VudFZhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0ZhaWx1cmVzOicsIHNlbGYuZmFpbENvdW50VmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnRXJyb3JzOicsIHNlbGYuZXJyb3JDb3VudFZhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1NraXBwZWQ6Jywgc2VsZi5za2lwQ291bnRWYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdFeHBlY3RlZCBGYWlsdXJlczonLCBzZWxmLmV4cGVjdEZhaWxDb3VudFZhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1JlbWFpbmluZzonLCBzZWxmLnJlbWFpbmluZ0NvdW50VmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk6CisgICAgICAgICAgICB0ay5MYWJlbChwcm9ncmVzc0ZyYW1lLCB0ZXh0PWxhYmVsKS5wYWNrKHNpZGU9dGsuTEVGVCkKKyAgICAgICAgICAgIHRrLkxhYmVsKHByb2dyZXNzRnJhbWUsIHRleHR2YXJpYWJsZT12YXIsCisgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kPSJibHVlIikucGFjayhzaWRlPXRrLkxFRlQsIGZpbGw9dGsuWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZD0xLCBhbmNob3I9dGsuVykKKworICAgICAgICAjIExpc3QgYm94IHNob3dpbmcgZXJyb3JzIGFuZCBmYWlsdXJlcworICAgICAgICB0ay5MYWJlbChsZWZ0RnJhbWUsIHRleHQ9IkZhaWx1cmVzIGFuZCBlcnJvcnM6IikucGFjayhhbmNob3I9dGsuVykKKyAgICAgICAgbGlzdEZyYW1lID0gdGsuRnJhbWUobGVmdEZyYW1lLCByZWxpZWY9dGsuU1VOS0VOLCBib3JkZXJ3aWR0aD0yKQorICAgICAgICBsaXN0RnJhbWUucGFjayhmaWxsPXRrLkJPVEgsIGFuY2hvcj10ay5OVywgZXhwYW5kPTEpCisgICAgICAgIHNlbGYuZXJyb3JMaXN0Ym94ID0gdGsuTGlzdGJveChsaXN0RnJhbWUsIGZvcmVncm91bmQ9J3JlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rtb2RlPXRrLlNJTkdMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGJvcmRlcndpZHRoPTApCisgICAgICAgIHNlbGYuZXJyb3JMaXN0Ym94LnBhY2soc2lkZT10ay5MRUZULCBmaWxsPXRrLkJPVEgsIGV4cGFuZD0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj10ay5OVykKKyAgICAgICAgbGlzdFNjcm9sbCA9IHRrLlNjcm9sbGJhcihsaXN0RnJhbWUsIGNvbW1hbmQ9c2VsZi5lcnJvckxpc3Rib3gueXZpZXcpCisgICAgICAgIGxpc3RTY3JvbGwucGFjayhzaWRlPXRrLkxFRlQsIGZpbGw9dGsuWSwgYW5jaG9yPXRrLk4pCisgICAgICAgIHNlbGYuZXJyb3JMaXN0Ym94LmJpbmQoIjxEb3VibGUtMT4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBlLCBzZWxmPXNlbGY6IHNlbGYuc2hvd1NlbGVjdGVkRXJyb3IoKSkKKyAgICAgICAgc2VsZi5lcnJvckxpc3Rib3guY29uZmlndXJlKHlzY3JvbGxjb21tYW5kPWxpc3RTY3JvbGwuc2V0KQorCisgICAgZGVmIGVycm9yRGlhbG9nKHNlbGYsIHRpdGxlLCBtZXNzYWdlKToKKyAgICAgICAgbWVzc2FnZWJveC5zaG93ZXJyb3IocGFyZW50PXNlbGYucm9vdCwgdGl0bGU9dGl0bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9bWVzc2FnZSkKKworICAgIGRlZiBub3RpZnlSdW5uaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnJ1bkNvdW50VmFyLnNldCgwKQorICAgICAgICBzZWxmLmZhaWxDb3VudFZhci5zZXQoMCkKKyAgICAgICAgc2VsZi5lcnJvckNvdW50VmFyLnNldCgwKQorICAgICAgICBzZWxmLnJlbWFpbmluZ0NvdW50VmFyLnNldChzZWxmLnRvdGFsVGVzdHMpCisgICAgICAgIHNlbGYuZXJyb3JJbmZvID0gW10KKyAgICAgICAgd2hpbGUgc2VsZi5lcnJvckxpc3Rib3guc2l6ZSgpOgorICAgICAgICAgICAgc2VsZi5lcnJvckxpc3Rib3guZGVsZXRlKDApCisgICAgICAgICNTdG9wcGluZyBzZWVtcyBub3QgdG8gd29yaywgc28gc2ltcGx5IGRpc2FibGUgdGhlIHN0YXJ0IGJ1dHRvbgorICAgICAgICAjc2VsZi5zdG9wR29CdXR0b24uY29uZmlnKGNvbW1hbmQ9c2VsZi5zdG9wQ2xpY2tlZCwgdGV4dD0iU3RvcCIpCisgICAgICAgIHNlbGYuc3RvcEdvQnV0dG9uLmNvbmZpZyhzdGF0ZT10ay5ESVNBQkxFRCkKKyAgICAgICAgc2VsZi5wcm9ncmVzc0Jhci5zZXRQcm9ncmVzc0ZyYWN0aW9uKDAuMCkKKyAgICAgICAgc2VsZi50b3AudXBkYXRlX2lkbGV0YXNrcygpCisKKyAgICBkZWYgbm90aWZ5U3RvcHBlZChzZWxmKToKKyAgICAgICAgc2VsZi5zdG9wR29CdXR0b24uY29uZmlnKHN0YXRlPXRrLkRJU0FCTEVEKQorICAgICAgICAjc2VsZi5zdG9wR29CdXR0b24uY29uZmlnKGNvbW1hbmQ9c2VsZi5ydW5DbGlja2VkLCB0ZXh0PSJTdGFydCIpCisgICAgICAgIHNlbGYuc3RhdHVzVmFyLnNldCgiSWRsZSIpCisKKyAgICBkZWYgbm90aWZ5VGVzdFN0YXJ0ZWQoc2VsZiwgdGVzdCk6CisgICAgICAgIHNlbGYuc3RhdHVzVmFyLnNldChzdHIodGVzdCkpCisgICAgICAgIHNlbGYudG9wLnVwZGF0ZV9pZGxldGFza3MoKQorCisgICAgZGVmIG5vdGlmeVRlc3RGYWlsZWQoc2VsZiwgdGVzdCwgZXJyKToKKyAgICAgICAgc2VsZi5mYWlsQ291bnRWYXIuc2V0KDEgKyBzZWxmLmZhaWxDb3VudFZhci5nZXQoKSkKKyAgICAgICAgc2VsZi5lcnJvckxpc3Rib3guaW5zZXJ0KHRrLkVORCwgIkZhaWx1cmU6ICVzIiAlIHRlc3QpCisgICAgICAgIHNlbGYuZXJyb3JJbmZvLmFwcGVuZCgodGVzdCxlcnIpKQorCisgICAgZGVmIG5vdGlmeVRlc3RFcnJvcmVkKHNlbGYsIHRlc3QsIGVycik6CisgICAgICAgIHNlbGYuZXJyb3JDb3VudFZhci5zZXQoMSArIHNlbGYuZXJyb3JDb3VudFZhci5nZXQoKSkKKyAgICAgICAgc2VsZi5lcnJvckxpc3Rib3guaW5zZXJ0KHRrLkVORCwgIkVycm9yOiAlcyIgJSB0ZXN0KQorICAgICAgICBzZWxmLmVycm9ySW5mby5hcHBlbmQoKHRlc3QsZXJyKSkKKworICAgIGRlZiBub3RpZnlUZXN0U2tpcHBlZChzZWxmLCB0ZXN0LCByZWFzb24pOgorICAgICAgICBzdXBlcihUa1Rlc3RSdW5uZXIsIHNlbGYpLm5vdGlmeVRlc3RTa2lwcGVkKHRlc3QsIHJlYXNvbikKKyAgICAgICAgc2VsZi5za2lwQ291bnRWYXIuc2V0KDEgKyBzZWxmLnNraXBDb3VudFZhci5nZXQoKSkKKworICAgIGRlZiBub3RpZnlUZXN0RmFpbGVkRXhwZWN0ZWRseShzZWxmLCB0ZXN0LCBlcnIpOgorICAgICAgICBzdXBlcihUa1Rlc3RSdW5uZXIsIHNlbGYpLm5vdGlmeVRlc3RGYWlsZWRFeHBlY3RlZGx5KHRlc3QsIGVycikKKyAgICAgICAgc2VsZi5leHBlY3RGYWlsQ291bnRWYXIuc2V0KDEgKyBzZWxmLmV4cGVjdEZhaWxDb3VudFZhci5nZXQoKSkKKworCisgICAgZGVmIG5vdGlmeVRlc3RGaW5pc2hlZChzZWxmLCB0ZXN0KToKKyAgICAgICAgc2VsZi5yZW1haW5pbmdDb3VudFZhci5zZXQoc2VsZi5yZW1haW5pbmdDb3VudFZhci5nZXQoKSAtIDEpCisgICAgICAgIHNlbGYucnVuQ291bnRWYXIuc2V0KDEgKyBzZWxmLnJ1bkNvdW50VmFyLmdldCgpKQorICAgICAgICBmcmFjdGlvbkRvbmUgPSBmbG9hdChzZWxmLnJ1bkNvdW50VmFyLmdldCgpKS9mbG9hdChzZWxmLnRvdGFsVGVzdHMpCisgICAgICAgIGZpbGxDb2xvciA9IGxlbihzZWxmLmVycm9ySW5mbykgYW5kICJyZWQiIG9yICJncmVlbiIKKyAgICAgICAgc2VsZi5wcm9ncmVzc0Jhci5zZXRQcm9ncmVzc0ZyYWN0aW9uKGZyYWN0aW9uRG9uZSwgZmlsbENvbG9yKQorCisgICAgZGVmIHNob3dTZWxlY3RlZEVycm9yKHNlbGYpOgorICAgICAgICBzZWxlY3Rpb24gPSBzZWxmLmVycm9yTGlzdGJveC5jdXJzZWxlY3Rpb24oKQorICAgICAgICBpZiBub3Qgc2VsZWN0aW9uOiByZXR1cm4KKyAgICAgICAgc2VsZWN0ZWQgPSBpbnQoc2VsZWN0aW9uWzBdKQorICAgICAgICB0eHQgPSBzZWxmLmVycm9yTGlzdGJveC5nZXQoc2VsZWN0ZWQpCisgICAgICAgIHdpbmRvdyA9IHRrLlRvcGxldmVsKHNlbGYucm9vdCkKKyAgICAgICAgd2luZG93LnRpdGxlKHR4dCkKKyAgICAgICAgd2luZG93LnByb3RvY29sKCdXTV9ERUxFVEVfV0lORE9XJywgd2luZG93LnF1aXQpCisgICAgICAgIHRlc3QsIGVycm9yID0gc2VsZi5lcnJvckluZm9bc2VsZWN0ZWRdCisgICAgICAgIHRrLkxhYmVsKHdpbmRvdywgdGV4dD1zdHIodGVzdCksCisgICAgICAgICAgICAgICAgIGZvcmVncm91bmQ9InJlZCIsIGp1c3RpZnk9dGsuTEVGVCkucGFjayhhbmNob3I9dGsuVykKKyAgICAgICAgdHJhY2ViYWNrTGluZXMgPSAgdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24oKmVycm9yKQorICAgICAgICB0cmFjZWJhY2tUZXh0ID0gIiIuam9pbih0cmFjZWJhY2tMaW5lcykKKyAgICAgICAgdGsuTGFiZWwod2luZG93LCB0ZXh0PXRyYWNlYmFja1RleHQsIGp1c3RpZnk9dGsuTEVGVCkucGFjaygpCisgICAgICAgIHRrLkJ1dHRvbih3aW5kb3csIHRleHQ9IkNsb3NlIiwKKyAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9d2luZG93LnF1aXQpLnBhY2soc2lkZT10ay5CT1RUT00pCisgICAgICAgIHdpbmRvdy5iaW5kKCc8S2V5LVJldHVybj4nLCBsYW1iZGEgZSwgdz13aW5kb3c6IHcucXVpdCgpKQorICAgICAgICB3aW5kb3cubWFpbmxvb3AoKQorICAgICAgICB3aW5kb3cuZGVzdHJveSgpCisKKworY2xhc3MgUHJvZ3Jlc3NCYXIodGsuRnJhbWUpOgorICAgICIiIkEgc2ltcGxlIHByb2dyZXNzIGJhciB0aGF0IHNob3dzIGEgcGVyY2VudGFnZSBwcm9ncmVzcyBpbgorICAgIHRoZSBnaXZlbiBjb2xvdXIuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdGsuRnJhbWUuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNhbnZhcyA9IHRrLkNhbnZhcyhzZWxmLCBoZWlnaHQ9JzIwJywgd2lkdGg9JzYwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZD0nd2hpdGUnLCBib3JkZXJ3aWR0aD0zKQorICAgICAgICBzZWxmLmNhbnZhcy5wYWNrKGZpbGw9dGsuWCwgZXhwYW5kPTEpCisgICAgICAgIHNlbGYucmVjdCA9IHNlbGYudGV4dCA9IE5vbmUKKyAgICAgICAgc2VsZi5jYW52YXMuYmluZCgnPENvbmZpZ3VyZT4nLCBzZWxmLnBhaW50KQorICAgICAgICBzZWxmLnNldFByb2dyZXNzRnJhY3Rpb24oMC4wKQorCisgICAgZGVmIHNldFByb2dyZXNzRnJhY3Rpb24oc2VsZiwgZnJhY3Rpb24sIGNvbG9yPSdibHVlJyk6CisgICAgICAgIHNlbGYuZnJhY3Rpb24gPSBmcmFjdGlvbgorICAgICAgICBzZWxmLmNvbG9yID0gY29sb3IKKyAgICAgICAgc2VsZi5wYWludCgpCisgICAgICAgIHNlbGYuY2FudmFzLnVwZGF0ZV9pZGxldGFza3MoKQorCisgICAgZGVmIHBhaW50KHNlbGYsICphcmdzKToKKyAgICAgICAgdG90YWxXaWR0aCA9IHNlbGYuY2FudmFzLndpbmZvX3dpZHRoKCkKKyAgICAgICAgd2lkdGggPSBpbnQoc2VsZi5mcmFjdGlvbiAqIGZsb2F0KHRvdGFsV2lkdGgpKQorICAgICAgICBoZWlnaHQgPSBzZWxmLmNhbnZhcy53aW5mb19oZWlnaHQoKQorICAgICAgICBpZiBzZWxmLnJlY3QgaXMgbm90IE5vbmU6IHNlbGYuY2FudmFzLmRlbGV0ZShzZWxmLnJlY3QpCisgICAgICAgIGlmIHNlbGYudGV4dCBpcyBub3QgTm9uZTogc2VsZi5jYW52YXMuZGVsZXRlKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5yZWN0ID0gc2VsZi5jYW52YXMuY3JlYXRlX3JlY3RhbmdsZSgwLCAwLCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9c2VsZi5jb2xvcikKKyAgICAgICAgcGVyY2VudFN0cmluZyA9ICIlMy4wZiUlIiAlICgxMDAuMCAqIHNlbGYuZnJhY3Rpb24pCisgICAgICAgIHNlbGYudGV4dCA9IHNlbGYuY2FudmFzLmNyZWF0ZV90ZXh0KHRvdGFsV2lkdGgvMiwgaGVpZ2h0LzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj10ay5DRU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9cGVyY2VudFN0cmluZykKKworZGVmIG1haW4oaW5pdGlhbFRlc3ROYW1lPSIiKToKKyAgICByb290ID0gdGsuVGsoKQorICAgIHJvb3QudGl0bGUoIlB5VW5pdCIpCisgICAgcnVubmVyID0gVGtUZXN0UnVubmVyKHJvb3QsIGluaXRpYWxUZXN0TmFtZSkKKyAgICByb290LnByb3RvY29sKCdXTV9ERUxFVEVfV0lORE9XJywgcm9vdC5xdWl0KQorICAgIHJvb3QubWFpbmxvb3AoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAyOgorICAgICAgICBtYWluKHN5cy5hcmd2WzFdKQorICAgIGVsc2U6CisgICAgICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd2ViY2hlY2tlci9SRUFETUUgYi9Ub29scy93ZWJjaGVja2VyL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUxYmIzZC4uMDAwMDAwMAotLS0gYS9Ub29scy93ZWJjaGVja2VyL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLVdlYmNoZWNrZXIKLS0tLS0tLS0tLS0KLQotVGhpcyBpcyBhIHNpbXBsZSB3ZWIgdHJlZSBjaGVja2VyLCB1c2VmdWwgdG8gZmluZCBiYWQgbGlua3MgaW4gYSB3ZWIKLXRyZWUuICBJdCBjdXJyZW50bHkgY2hlY2tzIGxpbmtzIHBvaW50aW5nIHdpdGhpbiB0aGUgc2FtZSBzdWJ3ZWIgZm9yCi12YWxpZGl0eS4gIFRoZSBtYWluIHByb2dyYW0gaXMgIndlYmNoZWNrZXIucHkiLiAgU2VlIGl0cyBkb2Mgc3RyaW5nCi0ob3IgaW52b2tlIGl0IHdpdGggdGhlIG9wdGlvbiAiLT8iKSBmb3IgbW9yZSBkZWZhaWxzLgotCi1IaXN0b3J5OgotCi0tIEphbiAxOTk3LiAgRmlyc3QgcmVsZWFzZS4gIFRoZSBtb2R1bGUgcm9ib3RwYXJzZXIucHkgd2FzIHdyaXR0ZW4gYnkKLVNraXAgTW9udGFuYXJvOyB0aGUgcmVzdCBpcyBvcmlnaW5hbCB3b3JrIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCi0KLS0gTWF5IDE5OTkuICBTYW0gQmF5ZXIgY29udHJpYnV0ZWQgYSBuZXcgdmVyc2lvbiwgd2NuZXcucHksIHdoaWNoCi1zdXBwb3J0cyBjaGVja2luZyBpbnRlcm5hbCBsaW5rcyAoI3NwYW0gZnJhZ21lbnRzIGluIFVSTHMpIGFuZCBzb21lCi1vdGhlciBvcHRpb25zLgotCi0tIE5vdiAxOTk5LiAgU2FtIEJheWVyIGNvbnRyaWJ1dGVkIHBhdGNoZXMgdG8gcmVpbnRlZ3JhdGUgd2NuZXcucHkKLWludG8gd2ViY2hlY2tlci5weSwgYW5kIGNvcnJlc3BvbmRpbmcgbW9kcyB0byB3Y2d1aS5weSBhbmQKLXdlYnN1Y2tlci5weS4KLQotLSBNYXIgMjAwNC4gIENocmlzIEhlcmJvcnRoIGNvbnRyaWJ1dGVkIGEgcGF0Y2ggdG8gbGV0IHdlYmNoZWNrZXIucHkKLWhhbmRsZSBYSFRNTCdzICdpZCcgYXR0cmlidXRlLgpkaWZmIC0tZ2l0IGEvVG9vbHMvd2ViY2hlY2tlci90a3Rvb2xzLnB5IGIvVG9vbHMvd2ViY2hlY2tlci90a3Rvb2xzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTY4ZjlhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvdGt0b29scy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM2NiArMCwwIEBACi0iIiJBc3NvcnRlZCBUay1yZWxhdGVkIHN1YnJvdXRpbmVzIHVzZWQgaW4gR3JhaWwuIiIiCi0KLQotZnJvbSB0eXBlcyBpbXBvcnQgKgotZnJvbSBUa2ludGVyIGltcG9ydCAqCi0KLWRlZiBfY2xlYXJfZW50cnlfd2lkZ2V0KGV2ZW50KToKLSAgICB0cnk6Ci0gICAgICAgIHdpZGdldCA9IGV2ZW50LndpZGdldAotICAgICAgICB3aWRnZXQuZGVsZXRlKDAsIElOU0VSVCkKLSAgICBleGNlcHQ6IHBhc3MKLWRlZiBpbnN0YWxsX2tleWJpbmRpbmdzKHJvb3QpOgotICAgIHJvb3QuYmluZF9jbGFzcygnRW50cnknLCAnPENvbnRyb2wtdT4nLCBfY2xlYXJfZW50cnlfd2lkZ2V0KQotCi0KLWRlZiBtYWtlX3RvcGxldmVsKG1hc3RlciwgdGl0bGU9Tm9uZSwgY2xhc3NfPU5vbmUpOgotICAgICIiIkNyZWF0ZSBhIFRvcGxldmVsIHdpZGdldC4KLQotICAgIFRoaXMgaXMgYSBzaG9ydGN1dCBmb3IgYSBUb3BsZXZlbCgpIGluc3RhbnRpYXRpb24gcGx1cyBjYWxscyB0bwotICAgIHNldCB0aGUgdGl0bGUgYW5kIGljb24gbmFtZSBvZiB0aGUgd2lkZ2V0LgotCi0gICAgIiIiCi0KLSAgICBpZiBjbGFzc186Ci0gICAgICAgIHdpZGdldCA9IFRvcGxldmVsKG1hc3RlciwgY2xhc3NfPWNsYXNzXykKLSAgICBlbHNlOgotICAgICAgICB3aWRnZXQgPSBUb3BsZXZlbChtYXN0ZXIpCi0gICAgaWYgdGl0bGU6Ci0gICAgICAgIHdpZGdldC50aXRsZSh0aXRsZSkKLSAgICAgICAgd2lkZ2V0Lmljb25uYW1lKHRpdGxlKQotICAgIHJldHVybiB3aWRnZXQKLQotZGVmIHNldF90cmFuc2llbnQod2lkZ2V0LCBtYXN0ZXIsIHJlbHg9MC41LCByZWx5PTAuMywgZXhwb3NlPTEpOgotICAgICIiIk1ha2UgYW4gZXhpc3RpbmcgdG9wbGV2ZWwgd2lkZ2V0IHRyYW5zaWVudCBmb3IgYSBtYXN0ZXIuCi0KLSAgICBUaGUgd2lkZ2V0IG11c3QgZXhpc3QgYnV0IHNob3VsZCBub3QgeWV0IGhhdmUgYmVlbiBwbGFjZWQ7IGluCi0gICAgb3RoZXIgd29yZHMsIHRoaXMgc2hvdWxkIGJlIGNhbGxlZCBhZnRlciBjcmVhdGluZyBhbGwgdGhlCi0gICAgc3Vid2lkZ2V0IGJ1dCBiZWZvcmUgbGV0dGluZyB0aGUgdXNlciBpbnRlcmFjdC4KLSAgICAiIiIKLQotICAgIHdpZGdldC53aXRoZHJhdygpICMgUmVtYWluIGludmlzaWJsZSB3aGlsZSB3ZSBmaWd1cmUgb3V0IHRoZSBnZW9tZXRyeQotICAgIHdpZGdldC50cmFuc2llbnQobWFzdGVyKQotICAgIHdpZGdldC51cGRhdGVfaWRsZXRhc2tzKCkgIyBBY3R1YWxpemUgZ2VvbWV0cnkgaW5mb3JtYXRpb24KLSAgICBpZiBtYXN0ZXIud2luZm9faXNtYXBwZWQoKToKLSAgICAgICAgbV93aWR0aCA9IG1hc3Rlci53aW5mb193aWR0aCgpCi0gICAgICAgIG1faGVpZ2h0ID0gbWFzdGVyLndpbmZvX2hlaWdodCgpCi0gICAgICAgIG1feCA9IG1hc3Rlci53aW5mb19yb290eCgpCi0gICAgICAgIG1feSA9IG1hc3Rlci53aW5mb19yb290eSgpCi0gICAgZWxzZToKLSAgICAgICAgbV93aWR0aCA9IG1hc3Rlci53aW5mb19zY3JlZW53aWR0aCgpCi0gICAgICAgIG1faGVpZ2h0ID0gbWFzdGVyLndpbmZvX3NjcmVlbmhlaWdodCgpCi0gICAgICAgIG1feCA9IG1feSA9IDAKLSAgICB3X3dpZHRoID0gd2lkZ2V0LndpbmZvX3JlcXdpZHRoKCkKLSAgICB3X2hlaWdodCA9IHdpZGdldC53aW5mb19yZXFoZWlnaHQoKQotICAgIHggPSBtX3ggKyAobV93aWR0aCAtIHdfd2lkdGgpICogcmVseAotICAgIHkgPSBtX3kgKyAobV9oZWlnaHQgLSB3X2hlaWdodCkgKiByZWx5Ci0gICAgd2lkZ2V0Lmdlb21ldHJ5KCIrJWQrJWQiICUgKHgsIHkpKQotICAgIGlmIGV4cG9zZToKLSAgICAgICAgd2lkZ2V0LmRlaWNvbmlmeSgpICAgICAgIyBCZWNvbWUgdmlzaWJsZSBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbgotICAgIHJldHVybiB3aWRnZXQKLQotCi1kZWYgbWFrZV9zY3JvbGxiYXJzKHBhcmVudCwgaGJhciwgdmJhciwgcGFjaz0xLCBjbGFzc189Tm9uZSwgbmFtZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICB0YWtlZm9jdXM9MCk6Ci0KLSAgICAiIiJTdWJyb3V0aW5lIHRvIGNyZWF0ZSBhIGZyYW1lIHdpdGggc2Nyb2xsYmFycy4KLQotICAgIFRoaXMgaXMgdXNlZCBieSBtYWtlX3RleHRfYm94IGFuZCBzaW1pbGFyIHJvdXRpbmVzLgotCi0gICAgTm90ZTogdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUgeC95IHNjcm9sbCBjb21tYW5kCi0gICAgcHJvcGVydGllcyAoZS5nLiBieSBjYWxsaW5nIHNldF9zY3JvbGxfY29tbWFuZHMoKSkuCi0KLSAgICBSZXR1cm4gYSB0dXBsZSBjb250YWluaW5nIHRoZSBoYmFyLCB0aGUgdmJhciwgYW5kIHRoZSBmcmFtZSwgd2hlcmUKLSAgICBoYmFyIGFuZCB2YmFyIGFyZSBOb25lIGlmIG5vdCByZXF1ZXN0ZWQuCi0KLSAgICAiIiIKLSAgICBpZiBjbGFzc186Ci0gICAgICAgIGlmIG5hbWU6IGZyYW1lID0gRnJhbWUocGFyZW50LCBjbGFzc189Y2xhc3NfLCBuYW1lPW5hbWUpCi0gICAgICAgIGVsc2U6IGZyYW1lID0gRnJhbWUocGFyZW50LCBjbGFzc189Y2xhc3NfKQotICAgIGVsc2U6Ci0gICAgICAgIGlmIG5hbWU6IGZyYW1lID0gRnJhbWUocGFyZW50LCBuYW1lPW5hbWUpCi0gICAgICAgIGVsc2U6IGZyYW1lID0gRnJhbWUocGFyZW50KQotCi0gICAgaWYgcGFjazoKLSAgICAgICAgZnJhbWUucGFjayhmaWxsPUJPVEgsIGV4cGFuZD0xKQotCi0gICAgY29ybmVyID0gTm9uZQotICAgIGlmIHZiYXI6Ci0gICAgICAgIGlmIG5vdCBoYmFyOgotICAgICAgICAgICAgdmJhciA9IFNjcm9sbGJhcihmcmFtZSwgdGFrZWZvY3VzPXRha2Vmb2N1cykKLSAgICAgICAgICAgIHZiYXIucGFjayhmaWxsPVksIHNpZGU9UklHSFQpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB2YmFyZnJhbWUgPSBGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MCkKLSAgICAgICAgICAgIHZiYXJmcmFtZS5wYWNrKGZpbGw9WSwgc2lkZT1SSUdIVCkKLSAgICAgICAgICAgIHZiYXIgPSBTY3JvbGxiYXIoZnJhbWUsIG5hbWU9InZiYXIiLCB0YWtlZm9jdXM9dGFrZWZvY3VzKQotICAgICAgICAgICAgdmJhci5wYWNrKGluXz12YmFyZnJhbWUsIGV4cGFuZD0xLCBmaWxsPVksIHNpZGU9VE9QKQotICAgICAgICAgICAgc2J3aWR0aCA9IHZiYXIud2luZm9fcmVxd2lkdGgoKQotICAgICAgICAgICAgY29ybmVyID0gRnJhbWUodmJhcmZyYW1lLCB3aWR0aD1zYndpZHRoLCBoZWlnaHQ9c2J3aWR0aCkKLSAgICAgICAgICAgIGNvcm5lci5wcm9wYWdhdGUoMCkKLSAgICAgICAgICAgIGNvcm5lci5wYWNrKHNpZGU9Qk9UVE9NKQotICAgIGVsc2U6Ci0gICAgICAgIHZiYXIgPSBOb25lCi0KLSAgICBpZiBoYmFyOgotICAgICAgICBoYmFyID0gU2Nyb2xsYmFyKGZyYW1lLCBvcmllbnQ9SE9SSVpPTlRBTCwgbmFtZT0iaGJhciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGFrZWZvY3VzPXRha2Vmb2N1cykKLSAgICAgICAgaGJhci5wYWNrKGZpbGw9WCwgc2lkZT1CT1RUT00pCi0gICAgZWxzZToKLSAgICAgICAgaGJhciA9IE5vbmUKLQotICAgIHJldHVybiBoYmFyLCB2YmFyLCBmcmFtZQotCi0KLWRlZiBzZXRfc2Nyb2xsX2NvbW1hbmRzKHdpZGdldCwgaGJhciwgdmJhcik6Ci0KLSAgICAiIiJMaW5rIGEgc2Nyb2xsYWJsZSB3aWRnZXQgdG8gaXRzIHNjcm9sbCBiYXJzLgotCi0gICAgVGhlIHNjcm9sbCBiYXJzIG1heSBiZSBlbXB0eS4KLQotICAgICIiIgotCi0gICAgaWYgdmJhcjoKLSAgICAgICAgd2lkZ2V0Wyd5c2Nyb2xsY29tbWFuZCddID0gKHZiYXIsICdzZXQnKQotICAgICAgICB2YmFyWydjb21tYW5kJ10gPSAod2lkZ2V0LCAneXZpZXcnKQotCi0gICAgaWYgaGJhcjoKLSAgICAgICAgd2lkZ2V0Wyd4c2Nyb2xsY29tbWFuZCddID0gKGhiYXIsICdzZXQnKQotICAgICAgICBoYmFyWydjb21tYW5kJ10gPSAod2lkZ2V0LCAneHZpZXcnKQotCi0gICAgd2lkZ2V0LnZiYXIgPSB2YmFyCi0gICAgd2lkZ2V0LmhiYXIgPSBoYmFyCi0KLQotZGVmIG1ha2VfdGV4dF9ib3gocGFyZW50LCB3aWR0aD0wLCBoZWlnaHQ9MCwgaGJhcj0wLCB2YmFyPTEsCi0gICAgICAgICAgICAgICAgICBmaWxsPUJPVEgsIGV4cGFuZD0xLCB3cmFwPVdPUkQsIHBhY2s9MSwKLSAgICAgICAgICAgICAgICAgIGNsYXNzXz1Ob25lLCBuYW1lPU5vbmUsIHRha2Vmb2N1cz1Ob25lKToKLQotICAgICIiIlN1YnJvdXRpbmUgdG8gY3JlYXRlIGEgdGV4dCBib3guCi0KLSAgICBDcmVhdGU6Ci0gICAgLSBhIGJvdGgtd2F5cyBmaWxsaW5nIGFuZCBleHBhbmRpbmcgZnJhbWUsIGNvbnRhaW5pbmc6Ci0gICAgICAtIGEgdGV4dCB3aWRnZXQgb24gdGhlIGxlZnQsIGFuZAotICAgICAgLSBwb3NzaWJseSBhIHZlcnRpY2FsIHNjcm9sbCBiYXIgb24gdGhlIHJpZ2h0LgotICAgICAgLSBwb3NzaWJseSBhIGhvcml6b250YTsgc2Nyb2xsIGJhciBhdCB0aGUgYm90dG9tLgotCi0gICAgUmV0dXJuIHRoZSB0ZXh0IHdpZGdldCBhbmQgdGhlIGZyYW1lIHdpZGdldC4KLQotICAgICIiIgotICAgIGhiYXIsIHZiYXIsIGZyYW1lID0gbWFrZV9zY3JvbGxiYXJzKHBhcmVudCwgaGJhciwgdmJhciwgcGFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc189Y2xhc3NfLCBuYW1lPW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZWZvY3VzPXRha2Vmb2N1cykKLQotICAgIHdpZGdldCA9IFRleHQoZnJhbWUsIHdyYXA9d3JhcCwgbmFtZT0idGV4dCIpCi0gICAgaWYgd2lkdGg6IHdpZGdldC5jb25maWcod2lkdGg9d2lkdGgpCi0gICAgaWYgaGVpZ2h0OiB3aWRnZXQuY29uZmlnKGhlaWdodD1oZWlnaHQpCi0gICAgd2lkZ2V0LnBhY2soZXhwYW5kPWV4cGFuZCwgZmlsbD1maWxsLCBzaWRlPUxFRlQpCi0KLSAgICBzZXRfc2Nyb2xsX2NvbW1hbmRzKHdpZGdldCwgaGJhciwgdmJhcikKLQotICAgIHJldHVybiB3aWRnZXQsIGZyYW1lCi0KLQotZGVmIG1ha2VfbGlzdF9ib3gocGFyZW50LCB3aWR0aD0wLCBoZWlnaHQ9MCwgaGJhcj0wLCB2YmFyPTEsCi0gICAgICAgICAgICAgICAgICBmaWxsPUJPVEgsIGV4cGFuZD0xLCBwYWNrPTEsIGNsYXNzXz1Ob25lLCBuYW1lPU5vbmUsCi0gICAgICAgICAgICAgICAgICB0YWtlZm9jdXM9Tm9uZSk6Ci0KLSAgICAiIiJTdWJyb3V0aW5lIHRvIGNyZWF0ZSBhIGxpc3QgYm94LgotCi0gICAgTGlrZSBtYWtlX3RleHRfYm94KCkuCi0gICAgIiIiCi0gICAgaGJhciwgdmJhciwgZnJhbWUgPSBtYWtlX3Njcm9sbGJhcnMocGFyZW50LCBoYmFyLCB2YmFyLCBwYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzXz1jbGFzc18sIG5hbWU9bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlZm9jdXM9dGFrZWZvY3VzKQotCi0gICAgd2lkZ2V0ID0gTGlzdGJveChmcmFtZSwgbmFtZT0ibGlzdGJveCIpCi0gICAgaWYgd2lkdGg6IHdpZGdldC5jb25maWcod2lkdGg9d2lkdGgpCi0gICAgaWYgaGVpZ2h0OiB3aWRnZXQuY29uZmlnKGhlaWdodD1oZWlnaHQpCi0gICAgd2lkZ2V0LnBhY2soZXhwYW5kPWV4cGFuZCwgZmlsbD1maWxsLCBzaWRlPUxFRlQpCi0KLSAgICBzZXRfc2Nyb2xsX2NvbW1hbmRzKHdpZGdldCwgaGJhciwgdmJhcikKLQotICAgIHJldHVybiB3aWRnZXQsIGZyYW1lCi0KLQotZGVmIG1ha2VfY2FudmFzKHBhcmVudCwgd2lkdGg9MCwgaGVpZ2h0PTAsIGhiYXI9MSwgdmJhcj0xLAotICAgICAgICAgICAgICAgIGZpbGw9Qk9USCwgZXhwYW5kPTEsIHBhY2s9MSwgY2xhc3NfPU5vbmUsIG5hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgICB0YWtlZm9jdXM9Tm9uZSk6Ci0KLSAgICAiIiJTdWJyb3V0aW5lIHRvIGNyZWF0ZSBhIGNhbnZhcy4KLQotICAgIExpa2UgbWFrZV90ZXh0X2JveCgpLgotCi0gICAgIiIiCi0KLSAgICBoYmFyLCB2YmFyLCBmcmFtZSA9IG1ha2Vfc2Nyb2xsYmFycyhwYXJlbnQsIGhiYXIsIHZiYXIsIHBhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfPWNsYXNzXywgbmFtZT1uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2Vmb2N1cz10YWtlZm9jdXMpCi0KLSAgICB3aWRnZXQgPSBDYW52YXMoZnJhbWUsIHNjcm9sbHJlZ2lvbj0oMCwgMCwgd2lkdGgsIGhlaWdodCksIG5hbWU9ImNhbnZhcyIpCi0gICAgaWYgd2lkdGg6IHdpZGdldC5jb25maWcod2lkdGg9d2lkdGgpCi0gICAgaWYgaGVpZ2h0OiB3aWRnZXQuY29uZmlnKGhlaWdodD1oZWlnaHQpCi0gICAgd2lkZ2V0LnBhY2soZXhwYW5kPWV4cGFuZCwgZmlsbD1maWxsLCBzaWRlPUxFRlQpCi0KLSAgICBzZXRfc2Nyb2xsX2NvbW1hbmRzKHdpZGdldCwgaGJhciwgdmJhcikKLQotICAgIHJldHVybiB3aWRnZXQsIGZyYW1lCi0KLQotCi1kZWYgbWFrZV9mb3JtX2VudHJ5KHBhcmVudCwgbGFiZWwsIGJvcmRlcndpZHRoPU5vbmUpOgotCi0gICAgIiIiU3Vicm91dGluZSB0byBjcmVhdGUgYSBmb3JtIGVudHJ5LgotCi0gICAgQ3JlYXRlOgotICAgIC0gYSBob3Jpem9udGFsbHkgZmlsbGluZyBhbmQgZXhwYW5kaW5nIGZyYW1lLCBjb250YWluaW5nOgotICAgICAgLSBhIGxhYmVsIG9uIHRoZSBsZWZ0LCBhbmQKLSAgICAgIC0gYSB0ZXh0IGVudHJ5IG9uIHRoZSByaWdodC4KLQotICAgIFJldHVybiB0aGUgZW50cnkgd2lkZ2V0IGFuZCB0aGUgZnJhbWUgd2lkZ2V0LgotCi0gICAgIiIiCi0KLSAgICBmcmFtZSA9IEZyYW1lKHBhcmVudCkKLSAgICBmcmFtZS5wYWNrKGZpbGw9WCkKLQotICAgIGxhYmVsID0gTGFiZWwoZnJhbWUsIHRleHQ9bGFiZWwpCi0gICAgbGFiZWwucGFjayhzaWRlPUxFRlQpCi0KLSAgICBpZiBib3JkZXJ3aWR0aCBpcyBOb25lOgotICAgICAgICBlbnRyeSA9IEVudHJ5KGZyYW1lLCByZWxpZWY9U1VOS0VOKQotICAgIGVsc2U6Ci0gICAgICAgIGVudHJ5ID0gRW50cnkoZnJhbWUsIHJlbGllZj1TVU5LRU4sIGJvcmRlcndpZHRoPWJvcmRlcndpZHRoKQotICAgIGVudHJ5LnBhY2soc2lkZT1MRUZULCBmaWxsPVgsIGV4cGFuZD0xKQotCi0gICAgcmV0dXJuIGVudHJ5LCBmcmFtZQotCi0jIFRoaXMgaXMgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmdW5jdGlvbiBhYm92ZS4gIFRoaXMKLSMgdmVyc2lvbiBkb2VzIHRoZSBwcm9wZXIgYWxpZ2hubWVudCBvZiBsYWJlbHMgd2l0aCB0aGVpciBmaWVsZHMuICBJdAotIyBzaG91bGQgcHJvYmFibHkgZXZlbnR1YWxseSByZXBsYWNlIG1ha2VfZm9ybV9lbnRyeSBhbHRvZ2V0aGVyLgotIwotIyBUaGUgb25lIGFubm95aW5nIGJ1ZyBpcyB0aGF0IHRoZSB0ZXh0IGVudHJ5IGZpZWxkIHNob3VsZCBiZQotIyBleHBhbmRhYmxlIHdoaWxlIHN0aWxsIGFsaWduaW5nIHRoZSBjb2xvbnMuICBUaGlzIGRvZXNuJ3Qgd29yayB5ZXQuCi0jCi1kZWYgbWFrZV9sYWJlbGVkX2Zvcm1fZW50cnkocGFyZW50LCBsYWJlbCwgZW50cnl3aWR0aD0yMCwgZW50cnloZWlnaHQ9MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHdpZHRoPTAsIGJvcmRlcndpZHRoPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZWZvY3VzPU5vbmUpOgotICAgICIiIlN1YnJvdXRpbmUgdG8gY3JlYXRlIGEgZm9ybSBlbnRyeS4KLQotICAgIENyZWF0ZToKLSAgICAtIGEgaG9yaXpvbnRhbGx5IGZpbGxpbmcgYW5kIGV4cGFuZGluZyBmcmFtZSwgY29udGFpbmluZzoKLSAgICAgIC0gYSBsYWJlbCBvbiB0aGUgbGVmdCwgYW5kCi0gICAgICAtIGEgdGV4dCBlbnRyeSBvbiB0aGUgcmlnaHQuCi0KLSAgICBSZXR1cm4gdGhlIGVudHJ5IHdpZGdldCBhbmQgdGhlIGZyYW1lIHdpZGdldC4KLSAgICAiIiIKLSAgICBpZiBsYWJlbCBhbmQgbGFiZWxbLTFdICE9ICc6JzogbGFiZWwgPSBsYWJlbCArICc6JwotCi0gICAgZnJhbWUgPSBGcmFtZShwYXJlbnQpCi0KLSAgICBsYWJlbCA9IExhYmVsKGZyYW1lLCB0ZXh0PWxhYmVsLCB3aWR0aD1sYWJlbHdpZHRoLCBhbmNob3I9RSkKLSAgICBsYWJlbC5wYWNrKHNpZGU9TEVGVCkKLSAgICBpZiBlbnRyeWhlaWdodCA9PSAxOgotICAgICAgICBpZiBib3JkZXJ3aWR0aCBpcyBOb25lOgotICAgICAgICAgICAgZW50cnkgPSBFbnRyeShmcmFtZSwgcmVsaWVmPVNVTktFTiwgd2lkdGg9ZW50cnl3aWR0aCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGVudHJ5ID0gRW50cnkoZnJhbWUsIHJlbGllZj1TVU5LRU4sIHdpZHRoPWVudHJ5d2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPWJvcmRlcndpZHRoKQotICAgICAgICBlbnRyeS5wYWNrKHNpZGU9UklHSFQsIGV4cGFuZD0xLCBmaWxsPVgpCi0gICAgICAgIGZyYW1lLnBhY2soZmlsbD1YKQotICAgIGVsc2U6Ci0gICAgICAgIGVudHJ5ID0gbWFrZV90ZXh0X2JveChmcmFtZSwgZW50cnl3aWR0aCwgZW50cnloZWlnaHQsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlZm9jdXM9dGFrZWZvY3VzKQotICAgICAgICBmcmFtZS5wYWNrKGZpbGw9Qk9USCwgZXhwYW5kPTEpCi0KLSAgICByZXR1cm4gZW50cnksIGZyYW1lLCBsYWJlbAotCi0KLWRlZiBtYWtlX2RvdWJsZV9mcmFtZShtYXN0ZXI9Tm9uZSwgY2xhc3NfPU5vbmUsIG5hbWU9Tm9uZSwgcmVsaWVmPVJBSVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aD0xKToKLSAgICAiIiJDcmVhdGUgYSBwYWlyIG9mIGZyYW1lcyBzdWl0YWJsZSBmb3IgJ2hvc3RpbmcnIGEgZGlhbG9nLiIiIgotICAgIGlmIG5hbWU6Ci0gICAgICAgIGlmIGNsYXNzXzogZnJhbWUgPSBGcmFtZShtYXN0ZXIsIGNsYXNzXz1jbGFzc18sIG5hbWU9bmFtZSkKLSAgICAgICAgZWxzZTogZnJhbWUgPSBGcmFtZShtYXN0ZXIsIG5hbWU9bmFtZSkKLSAgICBlbHNlOgotICAgICAgICBpZiBjbGFzc186IGZyYW1lID0gRnJhbWUobWFzdGVyLCBjbGFzc189Y2xhc3NfKQotICAgICAgICBlbHNlOiBmcmFtZSA9IEZyYW1lKG1hc3RlcikKLSAgICB0b3AgPSBGcmFtZShmcmFtZSwgbmFtZT0idG9wZnJhbWUiLCByZWxpZWY9cmVsaWVmLAotICAgICAgICAgICAgICAgIGJvcmRlcndpZHRoPWJvcmRlcndpZHRoKQotICAgIGJvdHRvbSA9IEZyYW1lKGZyYW1lLCBuYW1lPSJib3R0b21mcmFtZSIpCi0gICAgYm90dG9tLnBhY2soZmlsbD1YLCBwYWR4PScxbScsIHBhZHk9JzFtJywgc2lkZT1CT1RUT00pCi0gICAgdG9wLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCwgcGFkeD0nMW0nLCBwYWR5PScxbScpCi0gICAgZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RIKQotICAgIHRvcCA9IEZyYW1lKHRvcCkKLSAgICB0b3AucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RILCBwYWR4PScybScsIHBhZHk9JzJtJykKLQotICAgIHJldHVybiBmcmFtZSwgdG9wLCBib3R0b20KLQotCi1kZWYgbWFrZV9ncm91cF9mcmFtZShtYXN0ZXIsIG5hbWU9Tm9uZSwgbGFiZWw9Tm9uZSwgZmlsbD1ZLAotICAgICAgICAgICAgICAgICAgICAgc2lkZT1Ob25lLCBleHBhbmQ9Tm9uZSwgZm9udD1Ob25lKToKLSAgICAiIiJDcmVhdGUgbmVzdGVkIGZyYW1lcyB3aXRoIGEgYm9yZGVyIGFuZCBvcHRpb25hbCBsYWJlbC4KLQotICAgIFRoZSBvdXRlciBmcmFtZSBpcyBvbmx5IHVzZWQgdG8gcHJvdmlkZSB0aGUgZGVjb3JhdGl2ZSBib3JkZXIsIHRvCi0gICAgY29udHJvbCBwYWNraW5nLCBhbmQgdG8gaG9zdCB0aGUgbGFiZWwuICBUaGUgaW5uZXIgZnJhbWUgaXMgcGFja2VkCi0gICAgdG8gZmlsbCB0aGUgb3V0ZXIgZnJhbWUgYW5kIHNob3VsZCBiZSB1c2VkIGFzIHRoZSBwYXJlbnQgb2YgYWxsCi0gICAgc3ViLXdpZGdldHMuICBPbmx5IHRoZSBpbm5lciBmcmFtZSBpcyByZXR1cm5lZC4KLQotICAgICIiIgotICAgIGZvbnQgPSBmb250IG9yICItKi1oZWx2ZXRpY2EtbWVkaXVtLXItbm9ybWFsLSotKi0xMDAtKi0qLSotKi0qLSoiCi0gICAgb3V0ZXIgPSBGcmFtZShtYXN0ZXIsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUpCi0gICAgb3V0ZXIucGFjayhleHBhbmQ9ZXhwYW5kLCBmaWxsPWZpbGwsIHNpZGU9c2lkZSkKLSAgICBpZiBsYWJlbDoKLSAgICAgICAgTGFiZWwob3V0ZXIsIHRleHQ9bGFiZWwsIGZvbnQ9Zm9udCwgYW5jaG9yPVcpLnBhY2soZmlsbD1YKQotICAgIGlubmVyID0gRnJhbWUobWFzdGVyLCBib3JkZXJ3aWR0aD0nMW0nLCBuYW1lPW5hbWUpCi0gICAgaW5uZXIucGFjayhleHBhbmQ9MSwgZmlsbD1CT1RILCBpbl89b3V0ZXIpCi0gICAgaW5uZXIuZm9yZ2V0ID0gb3V0ZXIuZm9yZ2V0Ci0gICAgcmV0dXJuIGlubmVyCi0KLQotZGVmIHVuaWZ5X2J1dHRvbl93aWR0aHMoKmJ1dHRvbnMpOgotICAgICIiIk1ha2UgYnV0dG9ucyBwYXNzZWQgaW4gYWxsIGhhdmUgdGhlIHNhbWUgd2lkdGguCi0KLSAgICBXb3JrcyBmb3IgbGFiZWxzIGFuZCBvdGhlciB3aWRnZXRzIHdpdGggdGhlICd0ZXh0JyBvcHRpb24uCi0KLSAgICAiIiIKLSAgICB3aWQgPSAwCi0gICAgZm9yIGJ0biBpbiBidXR0b25zOgotICAgICAgICB3aWQgPSBtYXgod2lkLCBsZW4oYnRuWyJ0ZXh0Il0pKQotICAgIGZvciBidG4gaW4gYnV0dG9uczoKLSAgICAgICAgYnRuWyJ3aWR0aCJdID0gd2lkCi0KLQotZGVmIGZsYXR0ZW4obXNnKToKLSAgICAiIiJUdXJuIGEgbGlzdCBvciB0dXBsZSBpbnRvIGEgc2luZ2xlIHN0cmluZyAtLSByZWN1cnNpdmVseS4iIiIKLSAgICB0ID0gdHlwZShtc2cpCi0gICAgaWYgdCBpbiAoTGlzdFR5cGUsIFR1cGxlVHlwZSk6Ci0gICAgICAgIG1zZyA9ICcgJy5qb2luKG1hcChmbGF0dGVuLCBtc2cpKQotICAgIGVsaWYgdCBpcyBDbGFzc1R5cGU6Ci0gICAgICAgIG1zZyA9IG1zZy5fX25hbWVfXwotICAgIGVsc2U6Ci0gICAgICAgIG1zZyA9IHN0cihtc2cpCi0gICAgcmV0dXJuIG1zZwotCi0KLWRlZiBib29sZWFuKHMpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHN0cmluZyBpcyBhIFRrIGJvb2xlYW4sIHdpdGhvdXQgZXJyb3IgY2hlY2tpbmcuIiIiCi0gICAgaWYgcy5sb3dlcigpIGluICgnJywgJzAnLCAnbm8nLCAnb2ZmJywgJ2ZhbHNlJyk6IHJldHVybiAwCi0gICAgZWxzZTogcmV0dXJuIDEKLQotCi1kZWYgdGVzdCgpOgotICAgICIiIlRlc3QgbWFrZV90ZXh0X2JveCgpLCBtYWtlX2Zvcm1fZW50cnkoKSwgZmxhdHRlbigpLCBib29sZWFuKCkuIiIiCi0gICAgaW1wb3J0IHN5cwotICAgIHJvb3QgPSBUaygpCi0gICAgZW50cnksIGVmcmFtZSA9IG1ha2VfZm9ybV9lbnRyeShyb290LCAnQm9vbGVhbjonKQotICAgIHRleHQsIHRmcmFtZSA9IG1ha2VfdGV4dF9ib3gocm9vdCkKLSAgICBkZWYgZW50ZXIoZXZlbnQsIGVudHJ5PWVudHJ5LCB0ZXh0PXRleHQpOgotICAgICAgICBzID0gYm9vbGVhbihlbnRyeS5nZXQoKSkgYW5kICdcbnllcycgb3IgJ1xubm8nCi0gICAgICAgIHRleHQuaW5zZXJ0KCdlbmQnLCBzKQotICAgIGVudHJ5LmJpbmQoJzxSZXR1cm4+JywgZW50ZXIpCi0gICAgZW50cnkuaW5zZXJ0KEVORCwgZmxhdHRlbihzeXMuYXJndikpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0KCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkgYi9Ub29scy93ZWJjaGVja2VyL3djZ3VpLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0Y2U2MTNhLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvd2NndWkucHkKKysrIC9kZXYvbnVsbApAQCAtMSw0NjIgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0iIiJHVUkgaW50ZXJmYWNlIHRvIHdlYmNoZWNrZXIuCi0KLVRoaXMgd29ya3MgYXMgYSBHcmFpbCBhcHBsZXQgdG9vISAgRS5nLgotCi0gIDxBUFBMRVQgQ09ERT13Y2d1aS5weSBOQU1FPUNoZWNrZXJXaW5kb3c+PC9BUFBMRVQ+Ci0KLUNoZWNrcG9pbnRzIGFyZSBub3QgKHlldD8/PyAgZXZlcj8/Pykgc3VwcG9ydGVkLgotCi1Vc2VyIGludGVyZmFjZToKLQotRW50ZXIgYSByb290IHRvIGNoZWNrIGluIHRoZSB0ZXh0IGVudHJ5IGJveC4gIFRvIGVudGVyIG1vcmUgdGhhbiBvbmUgcm9vdCwKLWVudGVyIHRoZW0gb25lIGF0IGEgdGltZSBhbmQgcHJlc3MgPFJldHVybj4gZm9yIGVhY2ggb25lLgotCi1Db21tYW5kIGJ1dHRvbnMgU3RhcnQsIFN0b3AgYW5kICJDaGVjayBvbmUiIGdvdmVybiB0aGUgY2hlY2tpbmcgcHJvY2VzcyBpbgotdGhlIG9idmlvdXMgd2F5LiAgU3RhcnQgYW5kICJDaGVjayBvbmUiIGFsc28gZW50ZXIgdGhlIHJvb3QgZnJvbSB0aGUgdGV4dAotZW50cnkgYm94IGlmIG9uZSBpcyBwcmVzZW50LiAgVGhlcmUncyBhbHNvIGEgY2hlY2sgYm94IChlbmFibGVkIGJ5IGRlZmF1bHQpCi10byBkZWNpZGUgd2hldGhlciBhY3R1YWxseSB0byBmb2xsb3cgZXh0ZXJuYWwgbGlua3MgKHNpbmNlIHRoaXMgY2FuIHNsb3cKLXRoZSBjaGVja2luZyBkb3duIGNvbnNpZGVyYWJseSkuICBGaW5hbGx5IHRoZXJlJ3MgYSBRdWl0IGJ1dHRvbi4KLQotQSBzZXJpZXMgb2YgY2hlY2tidXR0b25zIGRldGVybWluZXMgd2hldGhlciB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgcGFuZWwKLWlzIHNob3duLiAgTGlzdCBwYW5lbHMgYXJlIGFsc28gYXV0b21hdGljYWxseSBzaG93biBvciBoaWRkZW4gd2hlbiB0aGVpcgotc3RhdHVzIGNoYW5nZXMgYmV0d2VlbiBlbXB0eSB0byBub24tZW1wdHkuICBUaGVyZSBhcmUgc2l4IHBhbmVsczoKLQotTG9nICAgICAgICAtLSByYXcgb3V0cHV0IGZyb20gdGhlIGNoZWNrZXIgKC12LCAtcSBhZmZlY3QgdGhpcykKLVRvIGNoZWNrICAgLS0gbGlua3MgZGlzY292ZXJlZCBidXQgbm90IHlldCBjaGVja2VkCi1DaGVja2VkICAgIC0tIGxpbmtzIHRoYXQgaGF2ZSBiZWVuIGNoZWNrZWQKLUJhZCBsaW5rcyAgLS0gbGlua3MgdGhhdCBmYWlsZWQgdXBvbiBjaGVja2luZwotRXJyb3JzICAgICAtLSBwYWdlcyBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBiYWQgbGluawotRGV0YWlscyAgICAtLSBkZXRhaWxzIGFib3V0IG9uZSBVUkw7IGRvdWJsZSBjbGljayBvbiBhIFVSTCBpbiBhbnkgb2YKLSAgICAgICAgICAgICAgdGhlIGFib3ZlIGxpc3QgcGFuZWxzIChub3QgaW4gTG9nKSB3aWxsIHNob3cgZGV0YWlscwotICAgICAgICAgICAgICBmb3IgdGhhdCBVUkwKLQotVXNlIHlvdXIgd2luZG93IG1hbmFnZXIncyBDbG9zZSBjb21tYW5kIHRvIHF1aXQuCi0KLUNvbW1hbmQgbGluZSBvcHRpb25zOgotCi0tbSBieXRlcyAgLS0gc2tpcCBIVE1MIHBhZ2VzIGxhcmdlciB0aGFuIHRoaXMgc2l6ZSAoZGVmYXVsdCAlKE1BWFBBR0UpZCkKLS1xICAgICAgICAtLSBxdWlldCBvcGVyYXRpb24gKGFsc28gc3VwcHJlc3NlcyBleHRlcm5hbCBsaW5rcyByZXBvcnQpCi0tdiAgICAgICAgLS0gdmVyYm9zZSBvcGVyYXRpb247IHJlcGVhdGluZyAtdiB3aWxsIGluY3JlYXNlIHZlcmJvc2l0eQotLXQgcm9vdCAgIC0tIHNwZWNpZnkgcm9vdCBkaXIgd2hpY2ggc2hvdWxkIGJlIHRyZWF0ZWQgYXMgaW50ZXJuYWwgKGNhbiByZXBlYXQpCi0tYSAgICAgICAgLS0gZG9uJ3QgY2hlY2sgbmFtZSBhbmNob3JzCi0KLUNvbW1hbmQgbGluZSBhcmd1bWVudHM6Ci0KLXJvb3R1cmwgICAtLSBVUkwgdG8gc3RhcnQgY2hlY2tpbmcKLSAgICAgICAgICAgICAoZGVmYXVsdCAlKERFRlJPT1QpcykKLQotWFhYIFRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyAoLW0sIC1xLCAtdikgc2hvdWxkIGJlIEdVSSBhY2Nlc3NpYmxlLgotCi1YWFggVGhlIHJvb3RzIHNob3VsZCBiZSB2aXNpYmxlIGFzIGEgbGlzdCAoPykuCi0KLVhYWCBUaGUgbXVsdGlwYW5lbCB1c2VyIGludGVyZmFjZSBpcyBjbHVtc3kuCi0KLSIiIgotCi0jICcgRW1hY3MgYmFpdAotCi0KLWltcG9ydCBzeXMKLWltcG9ydCBnZXRvcHQKLWZyb20gVGtpbnRlciBpbXBvcnQgKgotaW1wb3J0IHRrdG9vbHMKLWltcG9ydCB3ZWJjaGVja2VyCi0KLSMgT3ZlcnJpZGUgc29tZSBmb3IgYSB3ZWFrZXIgcGxhdGZvcm0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnbWFjJzoKLSAgICB3ZWJjaGVja2VyLkRFRlJPT1QgPSAiaHR0cDovL2dyYWlsLmNucmkucmVzdG9uLnZhLnVzLyIKLSAgICB3ZWJjaGVja2VyLk1BWFBBR0UgPSA1MDAwMAotICAgIHdlYmNoZWNrZXIudmVyYm9zZSA9IDQKLQotZGVmIG1haW4oKToKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ3Q6bTpxdmEnKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICBzeXMuc3Rkb3V0ID0gc3lzLnN0ZGVycgotICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHByaW50KF9fZG9jX18ldmFycyh3ZWJjaGVja2VyKSkKLSAgICAgICAgc3lzLmV4aXQoMikKLSAgICB3ZWJjaGVja2VyLnZlcmJvc2UgPSB3ZWJjaGVja2VyLlZFUkJPU0UKLSAgICB3ZWJjaGVja2VyLm5vbmFtZXMgPSB3ZWJjaGVja2VyLk5PTkFNRVMKLSAgICB3ZWJjaGVja2VyLm1heHBhZ2UgPSB3ZWJjaGVja2VyLk1BWFBBR0UKLSAgICBleHRyYV9yb290cyA9IFtdCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyA9PSAnLW0nOgotICAgICAgICAgICAgd2ViY2hlY2tlci5tYXhwYWdlID0gaW50KGEpCi0gICAgICAgIGlmIG8gPT0gJy1xJzoKLSAgICAgICAgICAgIHdlYmNoZWNrZXIudmVyYm9zZSA9IDAKLSAgICAgICAgaWYgbyA9PSAnLXYnOgotICAgICAgICAgICAgd2ViY2hlY2tlci52ZXJib3NlID0gd2ViY2hlY2tlci52ZXJib3NlICsgMQotICAgICAgICBpZiBvID09ICctdCc6Ci0gICAgICAgICAgICBleHRyYV9yb290cy5hcHBlbmQoYSkKLSAgICAgICAgaWYgbyA9PSAnLWEnOgotICAgICAgICAgICAgd2ViY2hlY2tlci5ub25hbWVzID0gbm90IHdlYmNoZWNrZXIubm9uYW1lcwotICAgIHJvb3QgPSBUayhjbGFzc05hbWU9J1dlYmNoZWNrZXInKQotICAgIHJvb3QucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgYyA9IENoZWNrZXJXaW5kb3cocm9vdCkKLSAgICBjLnNldGZsYWdzKHZlcmJvc2U9d2ViY2hlY2tlci52ZXJib3NlLCBtYXhwYWdlPXdlYmNoZWNrZXIubWF4cGFnZSwKLSAgICAgICAgICAgICAgIG5vbmFtZXM9d2ViY2hlY2tlci5ub25hbWVzKQotICAgIGlmIGFyZ3M6Ci0gICAgICAgIGZvciBhcmcgaW4gYXJnc1s6LTFdOgotICAgICAgICAgICAgYy5hZGRyb290KGFyZykKLSAgICAgICAgYy5zdWdnZXN0cm9vdChhcmdzWy0xXSkKLSAgICAjIFVzdWFsbHkgY29uZGl0aW9uZWQgb24gd2hldGhlciBleHRlcm5hbCBsaW5rcwotICAgICMgd2lsbCBiZSBjaGVja2VkLCBidXQgc2luY2UgdGhhdCdzIG5vdCBhIGNvbW1hbmQKLSAgICAjIGxpbmUgb3B0aW9uLCBqdXN0IHRvc3MgdGhlbSBpbi4KLSAgICBmb3IgdXJsX3Jvb3QgaW4gZXh0cmFfcm9vdHM6Ci0gICAgICAgICMgTWFrZSBzdXJlIGl0J3MgdGVybWluYXRlZCBieSBhIHNsYXNoLAotICAgICAgICAjIHNvIHRoYXQgYWRkcm9vdCBkb2Vzbid0IGRpc2NhcmQgdGhlIGxhc3QKLSAgICAgICAgIyBkaXJlY3RvcnkgY29tcG9uZW50LgotICAgICAgICBpZiB1cmxfcm9vdFstMV0gIT0gIi8iOgotICAgICAgICAgICAgdXJsX3Jvb3QgPSB1cmxfcm9vdCArICIvIgotICAgICAgICBjLmFkZHJvb3QodXJsX3Jvb3QsIGFkZF90b19kbyA9IDApCi0gICAgcm9vdC5tYWlubG9vcCgpCi0KLQotY2xhc3MgQ2hlY2tlcldpbmRvdyh3ZWJjaGVja2VyLkNoZWNrZXIpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgcm9vdD13ZWJjaGVja2VyLkRFRlJPT1QpOgotICAgICAgICBzZWxmLl9fcGFyZW50ID0gcGFyZW50Ci0KLSAgICAgICAgc2VsZi5fX3RvcGNvbnRyb2xzID0gRnJhbWUocGFyZW50KQotICAgICAgICBzZWxmLl9fdG9wY29udHJvbHMucGFjayhzaWRlPVRPUCwgZmlsbD1YKQotICAgICAgICBzZWxmLl9fbGFiZWwgPSBMYWJlbChzZWxmLl9fdG9wY29udHJvbHMsIHRleHQ9IlJvb3QgVVJMOiIpCi0gICAgICAgIHNlbGYuX19sYWJlbC5wYWNrKHNpZGU9TEVGVCkKLSAgICAgICAgc2VsZi5fX3Jvb3RlbnRyeSA9IEVudHJ5KHNlbGYuX190b3Bjb250cm9scywgd2lkdGg9NjApCi0gICAgICAgIHNlbGYuX19yb290ZW50cnkucGFjayhzaWRlPUxFRlQpCi0gICAgICAgIHNlbGYuX19yb290ZW50cnkuYmluZCgnPFJldHVybj4nLCBzZWxmLmVudGVycm9vdCkKLSAgICAgICAgc2VsZi5fX3Jvb3RlbnRyeS5mb2N1c19zZXQoKQotCi0gICAgICAgIHNlbGYuX19jb250cm9scyA9IEZyYW1lKHBhcmVudCkKLSAgICAgICAgc2VsZi5fX2NvbnRyb2xzLnBhY2soc2lkZT1UT1AsIGZpbGw9WCkKLSAgICAgICAgc2VsZi5fX3J1bm5pbmcgPSAwCi0gICAgICAgIHNlbGYuX19zdGFydCA9IEJ1dHRvbihzZWxmLl9fY29udHJvbHMsIHRleHQ9IlJ1biIsIGNvbW1hbmQ9c2VsZi5zdGFydCkKLSAgICAgICAgc2VsZi5fX3N0YXJ0LnBhY2soc2lkZT1MRUZUKQotICAgICAgICBzZWxmLl9fc3RvcCA9IEJ1dHRvbihzZWxmLl9fY29udHJvbHMsIHRleHQ9IlN0b3AiLCBjb21tYW5kPXNlbGYuc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9RElTQUJMRUQpCi0gICAgICAgIHNlbGYuX19zdG9wLnBhY2soc2lkZT1MRUZUKQotICAgICAgICBzZWxmLl9fc3RlcCA9IEJ1dHRvbihzZWxmLl9fY29udHJvbHMsIHRleHQ9IkNoZWNrIG9uZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5zdGVwKQotICAgICAgICBzZWxmLl9fc3RlcC5wYWNrKHNpZGU9TEVGVCkKLSAgICAgICAgc2VsZi5fX2N2ID0gQm9vbGVhblZhcihwYXJlbnQpCi0gICAgICAgIHNlbGYuX19jdi5zZXQoc2VsZi5jaGVja2V4dCkKLSAgICAgICAgc2VsZi5fX2NoZWNrZXh0ID0gQ2hlY2tidXR0b24oc2VsZi5fX2NvbnRyb2xzLCB2YXJpYWJsZT1zZWxmLl9fY3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi51cGRhdGVfY2hlY2tleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9IkNoZWNrIG5vbmxvY2FsIGxpbmtzIiwpCi0gICAgICAgIHNlbGYuX19jaGVja2V4dC5wYWNrKHNpZGU9TEVGVCkKLSAgICAgICAgc2VsZi5fX3Jlc2V0ID0gQnV0dG9uKHNlbGYuX19jb250cm9scywgdGV4dD0iU3RhcnQgb3ZlciIsIGNvbW1hbmQ9c2VsZi5yZXNldCkKLSAgICAgICAgc2VsZi5fX3Jlc2V0LnBhY2soc2lkZT1MRUZUKQotICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOiAjIE5vIFF1aXQgYnV0dG9uIHVuZGVyIEdyYWlsIQotICAgICAgICAgICAgc2VsZi5fX3F1aXQgPSBCdXR0b24oc2VsZi5fX2NvbnRyb2xzLCB0ZXh0PSJRdWl0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5fX3BhcmVudC5xdWl0KQotICAgICAgICAgICAgc2VsZi5fX3F1aXQucGFjayhzaWRlPVJJR0hUKQotCi0gICAgICAgIHNlbGYuX19zdGF0dXMgPSBMYWJlbChwYXJlbnQsIHRleHQ9IlN0YXR1czogaW5pdGlhbCIsIGFuY2hvcj1XKQotICAgICAgICBzZWxmLl9fc3RhdHVzLnBhY2soc2lkZT1UT1AsIGZpbGw9WCkKLSAgICAgICAgc2VsZi5fX2NoZWNraW5nID0gTGFiZWwocGFyZW50LCB0ZXh0PSJJZGxlIiwgYW5jaG9yPVcpCi0gICAgICAgIHNlbGYuX19jaGVja2luZy5wYWNrKHNpZGU9VE9QLCBmaWxsPVgpCi0gICAgICAgIHNlbGYuX19tcCA9IG1wID0gTXVsdGlQYW5lbChwYXJlbnQpCi0gICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9fbG9nID0gTG9nUGFuZWwobXAsICJMb2ciKQotICAgICAgICBzZWxmLl9fdG9kbyA9IExpc3RQYW5lbChtcCwgIlRvIGNoZWNrIiwgc2VsZiwgc2VsZi5zaG93aW5mbykKLSAgICAgICAgc2VsZi5fX2RvbmUgPSBMaXN0UGFuZWwobXAsICJDaGVja2VkIiwgc2VsZiwgc2VsZi5zaG93aW5mbykKLSAgICAgICAgc2VsZi5fX2JhZCA9IExpc3RQYW5lbChtcCwgIkJhZCBsaW5rcyIsIHNlbGYsIHNlbGYuc2hvd2luZm8pCi0gICAgICAgIHNlbGYuX19lcnJvcnMgPSBMaXN0UGFuZWwobXAsICJQYWdlcyB3LyBiYWQgbGlua3MiLCBzZWxmLCBzZWxmLnNob3dpbmZvKQotICAgICAgICBzZWxmLl9fZGV0YWlscyA9IExvZ1BhbmVsKG1wLCAiRGV0YWlscyIpCi0gICAgICAgIHNlbGYucm9vdF9zZWVkID0gTm9uZQotICAgICAgICB3ZWJjaGVja2VyLkNoZWNrZXIuX19pbml0X18oc2VsZikKLSAgICAgICAgaWYgcm9vdDoKLSAgICAgICAgICAgIHJvb3QgPSBzdHIocm9vdCkuc3RyaXAoKQotICAgICAgICAgICAgaWYgcm9vdDoKLSAgICAgICAgICAgICAgICBzZWxmLnN1Z2dlc3Ryb290KHJvb3QpCi0gICAgICAgIHNlbGYubmV3c3RhdHVzKCkKLQotICAgIGRlZiByZXNldChzZWxmKToKLSAgICAgICAgd2ViY2hlY2tlci5DaGVja2VyLnJlc2V0KHNlbGYpCi0gICAgICAgIGZvciBwIGluIHNlbGYuX190b2RvLCBzZWxmLl9fZG9uZSwgc2VsZi5fX2JhZCwgc2VsZi5fX2Vycm9yczoKLSAgICAgICAgICAgIHAuY2xlYXIoKQotICAgICAgICBpZiBzZWxmLnJvb3Rfc2VlZDoKLSAgICAgICAgICAgIHNlbGYuc3VnZ2VzdHJvb3Qoc2VsZi5yb290X3NlZWQpCi0KLSAgICBkZWYgc3VnZ2VzdHJvb3Qoc2VsZiwgcm9vdCk6Ci0gICAgICAgIHNlbGYuX19yb290ZW50cnkuZGVsZXRlKDAsIEVORCkKLSAgICAgICAgc2VsZi5fX3Jvb3RlbnRyeS5pbnNlcnQoRU5ELCByb290KQotICAgICAgICBzZWxmLl9fcm9vdGVudHJ5LnNlbGVjdF9yYW5nZSgwLCBFTkQpCi0gICAgICAgIHNlbGYucm9vdF9zZWVkID0gcm9vdAotCi0gICAgZGVmIGVudGVycm9vdChzZWxmLCBldmVudD1Ob25lKToKLSAgICAgICAgcm9vdCA9IHNlbGYuX19yb290ZW50cnkuZ2V0KCkKLSAgICAgICAgcm9vdCA9IHJvb3Quc3RyaXAoKQotICAgICAgICBpZiByb290OgotICAgICAgICAgICAgc2VsZi5fX2NoZWNraW5nLmNvbmZpZyh0ZXh0PSJBZGRpbmcgcm9vdCAiK3Jvb3QpCi0gICAgICAgICAgICBzZWxmLl9fY2hlY2tpbmcudXBkYXRlX2lkbGV0YXNrcygpCi0gICAgICAgICAgICBzZWxmLmFkZHJvb3Qocm9vdCkKLSAgICAgICAgICAgIHNlbGYuX19jaGVja2luZy5jb25maWcodGV4dD0iSWRsZSIpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaSA9IHNlbGYuX190b2RvLml0ZW1zLmluZGV4KHJvb3QpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fX3RvZG8ubGlzdC5zZWxlY3RfY2xlYXIoMCwgRU5EKQotICAgICAgICAgICAgICAgIHNlbGYuX190b2RvLmxpc3Quc2VsZWN0X3NldChpKQotICAgICAgICAgICAgICAgIHNlbGYuX190b2RvLmxpc3QueXZpZXcoaSkKLSAgICAgICAgc2VsZi5fX3Jvb3RlbnRyeS5kZWxldGUoMCwgRU5EKQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBzZWxmLl9fc3RhcnQuY29uZmlnKHN0YXRlPURJU0FCTEVELCByZWxpZWY9U1VOS0VOKQotICAgICAgICBzZWxmLl9fc3RvcC5jb25maWcoc3RhdGU9Tk9STUFMKQotICAgICAgICBzZWxmLl9fc3RlcC5jb25maWcoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgIHNlbGYuZW50ZXJyb290KCkKLSAgICAgICAgc2VsZi5fX3J1bm5pbmcgPSAxCi0gICAgICAgIHNlbGYuZ28oKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIHNlbGYuX19zdG9wLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCwgcmVsaWVmPVNVTktFTikKLSAgICAgICAgc2VsZi5fX3J1bm5pbmcgPSAwCi0KLSAgICBkZWYgc3RlcChzZWxmKToKLSAgICAgICAgc2VsZi5fX3N0YXJ0LmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgc2VsZi5fX3N0ZXAuY29uZmlnKHN0YXRlPURJU0FCTEVELCByZWxpZWY9U1VOS0VOKQotICAgICAgICBzZWxmLmVudGVycm9vdCgpCi0gICAgICAgIHNlbGYuX19ydW5uaW5nID0gMAotICAgICAgICBzZWxmLmRvc29tZXRoaW5nKCkKLQotICAgIGRlZiBnbyhzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fX3J1bm5pbmc6Ci0gICAgICAgICAgICBzZWxmLl9fcGFyZW50LmFmdGVyX2lkbGUoc2VsZi5kb3NvbWV0aGluZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX19jaGVja2luZy5jb25maWcodGV4dD0iSWRsZSIpCi0gICAgICAgICAgICBzZWxmLl9fc3RhcnQuY29uZmlnKHN0YXRlPU5PUk1BTCwgcmVsaWVmPVJBSVNFRCkKLSAgICAgICAgICAgIHNlbGYuX19zdG9wLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCwgcmVsaWVmPVJBSVNFRCkKLSAgICAgICAgICAgIHNlbGYuX19zdGVwLmNvbmZpZyhzdGF0ZT1OT1JNQUwsIHJlbGllZj1SQUlTRUQpCi0KLSAgICBfX2J1c3kgPSAwCi0KLSAgICBkZWYgZG9zb21ldGhpbmcoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX19idXN5OiByZXR1cm4KLSAgICAgICAgc2VsZi5fX2J1c3kgPSAxCi0gICAgICAgIGlmIHNlbGYudG9kbzoKLSAgICAgICAgICAgIGwgPSBzZWxmLl9fdG9kby5zZWxlY3RlZGluZGljZXMoKQotICAgICAgICAgICAgaWYgbDoKLSAgICAgICAgICAgICAgICBpID0gbFswXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpID0gMAotICAgICAgICAgICAgICAgIHNlbGYuX190b2RvLmxpc3Quc2VsZWN0X3NldChpKQotICAgICAgICAgICAgc2VsZi5fX3RvZG8ubGlzdC55dmlldyhpKQotICAgICAgICAgICAgdXJsID0gc2VsZi5fX3RvZG8uaXRlbXNbaV0KLSAgICAgICAgICAgIHNlbGYuX19jaGVja2luZy5jb25maWcodGV4dD0iQ2hlY2tpbmcgIitzZWxmLmZvcm1hdF91cmwodXJsKSkKLSAgICAgICAgICAgIHNlbGYuX19wYXJlbnQudXBkYXRlKCkKLSAgICAgICAgICAgIHNlbGYuZG9wYWdlKHVybCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc3RvcCgpCi0gICAgICAgIHNlbGYuX19idXN5ID0gMAotICAgICAgICBzZWxmLmdvKCkKLQotICAgIGRlZiBzaG93aW5mbyhzZWxmLCB1cmwpOgotICAgICAgICBkID0gc2VsZi5fX2RldGFpbHMKLSAgICAgICAgZC5jbGVhcigpCi0gICAgICAgIGQucHV0KCJVUkw6ICAgICVzXG4iICUgc2VsZi5mb3JtYXRfdXJsKHVybCkpCi0gICAgICAgIGlmIHVybCBpbiBzZWxmLmJhZDoKLSAgICAgICAgICAgIGQucHV0KCJFcnJvcjogICVzXG4iICUgc3RyKHNlbGYuYmFkW3VybF0pKQotICAgICAgICBpZiB1cmwgaW4gc2VsZi5yb290czoKLSAgICAgICAgICAgIGQucHV0KCJOb3RlOiAgIFRoaXMgaXMgYSByb290IFVSTFxuIikKLSAgICAgICAgaWYgdXJsIGluIHNlbGYuZG9uZToKLSAgICAgICAgICAgIGQucHV0KCJTdGF0dXM6IGNoZWNrZWRcbiIpCi0gICAgICAgICAgICBvID0gc2VsZi5kb25lW3VybF0KLSAgICAgICAgZWxpZiB1cmwgaW4gc2VsZi50b2RvOgotICAgICAgICAgICAgZC5wdXQoIlN0YXR1czogdG8gY2hlY2tcbiIpCi0gICAgICAgICAgICBvID0gc2VsZi50b2RvW3VybF0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGQucHV0KCJTdGF0dXM6IHVua25vd24gKCEpXG4iKQotICAgICAgICAgICAgbyA9IFtdCi0gICAgICAgIGlmIChub3QgdXJsWzFdKSBhbmQgdXJsWzBdIGluIHNlbGYuZXJyb3JzOgotICAgICAgICAgICAgZC5wdXQoIkJhZCBsaW5rcyBmcm9tIHRoaXMgcGFnZTpcbiIpCi0gICAgICAgICAgICBmb3IgdHJpcGxlIGluIHNlbGYuZXJyb3JzW3VybFswXV06Ci0gICAgICAgICAgICAgICAgbGluaywgcmF3bGluaywgbXNnID0gdHJpcGxlCi0gICAgICAgICAgICAgICAgZC5wdXQoIiAgSFJFRiAgJXMiICUgc2VsZi5mb3JtYXRfdXJsKGxpbmspKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VybChsaW5rKSAhPSByYXdsaW5rOiBkLnB1dCgiICglcykiICVyYXdsaW5rKQotICAgICAgICAgICAgICAgIGQucHV0KCJcbiIpCi0gICAgICAgICAgICAgICAgZC5wdXQoIiAgZXJyb3IgJXNcbiIgJSBzdHIobXNnKSkKLSAgICAgICAgc2VsZi5fX21wLnNob3dwYW5lbCgiRGV0YWlscyIpCi0gICAgICAgIGZvciBzb3VyY2UsIHJhd2xpbmsgaW4gbzoKLSAgICAgICAgICAgIGQucHV0KCJPcmlnaW46ICVzIiAlIHNvdXJjZSkKLSAgICAgICAgICAgIGlmIHJhd2xpbmsgIT0gc2VsZi5mb3JtYXRfdXJsKHVybCk6Ci0gICAgICAgICAgICAgICAgZC5wdXQoIiAoJXMpIiAlIHJhd2xpbmspCi0gICAgICAgICAgICBkLnB1dCgiXG4iKQotICAgICAgICBkLnRleHQueXZpZXcoIjEuMCIpCi0KLSAgICBkZWYgc2V0YmFkKHNlbGYsIHVybCwgbXNnKToKLSAgICAgICAgd2ViY2hlY2tlci5DaGVja2VyLnNldGJhZChzZWxmLCB1cmwsIG1zZykKLSAgICAgICAgc2VsZi5fX2JhZC5pbnNlcnQodXJsKQotICAgICAgICBzZWxmLm5ld3N0YXR1cygpCi0KLSAgICBkZWYgc2V0Z29vZChzZWxmLCB1cmwpOgotICAgICAgICB3ZWJjaGVja2VyLkNoZWNrZXIuc2V0Z29vZChzZWxmLCB1cmwpCi0gICAgICAgIHNlbGYuX19iYWQucmVtb3ZlKHVybCkKLSAgICAgICAgc2VsZi5uZXdzdGF0dXMoKQotCi0gICAgZGVmIG5ld2xpbmsoc2VsZiwgdXJsLCBvcmlnaW4pOgotICAgICAgICB3ZWJjaGVja2VyLkNoZWNrZXIubmV3bGluayhzZWxmLCB1cmwsIG9yaWdpbikKLSAgICAgICAgaWYgdXJsIGluIHNlbGYuZG9uZToKLSAgICAgICAgICAgIHNlbGYuX19kb25lLmluc2VydCh1cmwpCi0gICAgICAgIGVsaWYgdXJsIGluIHNlbGYudG9kbzoKLSAgICAgICAgICAgIHNlbGYuX190b2RvLmluc2VydCh1cmwpCi0gICAgICAgIHNlbGYubmV3c3RhdHVzKCkKLQotICAgIGRlZiBtYXJrZG9uZShzZWxmLCB1cmwpOgotICAgICAgICB3ZWJjaGVja2VyLkNoZWNrZXIubWFya2RvbmUoc2VsZiwgdXJsKQotICAgICAgICBzZWxmLl9fZG9uZS5pbnNlcnQodXJsKQotICAgICAgICBzZWxmLl9fdG9kby5yZW1vdmUodXJsKQotICAgICAgICBzZWxmLm5ld3N0YXR1cygpCi0KLSAgICBkZWYgc2V0ZXJyb3Ioc2VsZiwgdXJsLCB0cmlwbGUpOgotICAgICAgICB3ZWJjaGVja2VyLkNoZWNrZXIuc2V0ZXJyb3Ioc2VsZiwgdXJsLCB0cmlwbGUpCi0gICAgICAgIHNlbGYuX19lcnJvcnMuaW5zZXJ0KCh1cmwsICcnKSkKLSAgICAgICAgc2VsZi5uZXdzdGF0dXMoKQotCi0gICAgZGVmIG5ld3N0YXR1cyhzZWxmKToKLSAgICAgICAgc2VsZi5fX3N0YXR1cy5jb25maWcodGV4dD0iU3RhdHVzOiAiK3NlbGYuc3RhdHVzKCkpCi0gICAgICAgIHNlbGYuX19wYXJlbnQudXBkYXRlKCkKLQotICAgIGRlZiB1cGRhdGVfY2hlY2tleHQoc2VsZik6Ci0gICAgICAgIHNlbGYuY2hlY2tleHQgPSBzZWxmLl9fY3YuZ2V0KCkKLQotCi1jbGFzcyBMaXN0UGFuZWw6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbXAsIG5hbWUsIGNoZWNrZXIsIHNob3dpbmZvPU5vbmUpOgotICAgICAgICBzZWxmLm1wID0gbXAKLSAgICAgICAgc2VsZi5uYW1lID0gbmFtZQotICAgICAgICBzZWxmLnNob3dpbmZvID0gc2hvd2luZm8KLSAgICAgICAgc2VsZi5jaGVja2VyID0gY2hlY2tlcgotICAgICAgICBzZWxmLnBhbmVsID0gbXAuYWRkcGFuZWwobmFtZSkKLSAgICAgICAgc2VsZi5saXN0LCBzZWxmLmZyYW1lID0gdGt0b29scy5tYWtlX2xpc3RfYm94KAotICAgICAgICAgICAgc2VsZi5wYW5lbCwgd2lkdGg9NjAsIGhlaWdodD01KQotICAgICAgICBzZWxmLmxpc3QuY29uZmlnKGV4cG9ydHNlbGVjdGlvbj0wKQotICAgICAgICBpZiBzaG93aW5mbzoKLSAgICAgICAgICAgIHNlbGYubGlzdC5iaW5kKCc8RG91YmxlLUJ1dHRvbi0xPicsIHNlbGYuZG91YmxlY2xpY2spCi0gICAgICAgIHNlbGYuaXRlbXMgPSBbXQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICBzZWxmLml0ZW1zID0gW10KLSAgICAgICAgc2VsZi5saXN0LmRlbGV0ZSgwLCBFTkQpCi0gICAgICAgIHNlbGYubXAuaGlkZXBhbmVsKHNlbGYubmFtZSkKLQotICAgIGRlZiBkb3VibGVjbGljayhzZWxmLCBldmVudCk6Ci0gICAgICAgIGwgPSBzZWxmLnNlbGVjdGVkaW5kaWNlcygpCi0gICAgICAgIGlmIGw6Ci0gICAgICAgICAgICBzZWxmLnNob3dpbmZvKHNlbGYuaXRlbXNbbFswXV0pCi0KLSAgICBkZWYgc2VsZWN0ZWRpbmRpY2VzKHNlbGYpOgotICAgICAgICBsID0gc2VsZi5saXN0LmN1cnNlbGVjdGlvbigpCi0gICAgICAgIGlmIG5vdCBsOiByZXR1cm4gW10KLSAgICAgICAgcmV0dXJuIGxpc3QobWFwKGludCwgbCkpCi0KLSAgICBkZWYgaW5zZXJ0KHNlbGYsIHVybCk6Ci0gICAgICAgIGlmIHVybCBub3QgaW4gc2VsZi5pdGVtczoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLml0ZW1zOgotICAgICAgICAgICAgICAgIHNlbGYubXAuc2hvd3BhbmVsKHNlbGYubmFtZSkKLSAgICAgICAgICAgICMgKEkgdHJpZWQgc29ydGluZyBhbHBoYWJldGljYWxseSwgYnV0IHRoZSBkaXNwbGF5IGlzIHRvbyBqdW1weSkKLSAgICAgICAgICAgIGkgPSBsZW4oc2VsZi5pdGVtcykKLSAgICAgICAgICAgIHNlbGYubGlzdC5pbnNlcnQoaSwgc2VsZi5jaGVja2VyLmZvcm1hdF91cmwodXJsKSkKLSAgICAgICAgICAgIHNlbGYubGlzdC55dmlldyhpKQotICAgICAgICAgICAgc2VsZi5pdGVtcy5pbnNlcnQoaSwgdXJsKQotCi0gICAgZGVmIHJlbW92ZShzZWxmLCB1cmwpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpID0gc2VsZi5pdGVtcy5pbmRleCh1cmwpCi0gICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB3YXNfc2VsZWN0ZWQgPSBpIGluIHNlbGYuc2VsZWN0ZWRpbmRpY2VzKCkKLSAgICAgICAgICAgIHNlbGYubGlzdC5kZWxldGUoaSkKLSAgICAgICAgICAgIGRlbCBzZWxmLml0ZW1zW2ldCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5pdGVtczoKLSAgICAgICAgICAgICAgICBzZWxmLm1wLmhpZGVwYW5lbChzZWxmLm5hbWUpCi0gICAgICAgICAgICBlbGlmIHdhc19zZWxlY3RlZDoKLSAgICAgICAgICAgICAgICBpZiBpID49IGxlbihzZWxmLml0ZW1zKToKLSAgICAgICAgICAgICAgICAgICAgaSA9IGxlbihzZWxmLml0ZW1zKSAtIDEKLSAgICAgICAgICAgICAgICBzZWxmLmxpc3Quc2VsZWN0X3NldChpKQotCi0KLWNsYXNzIExvZ1BhbmVsOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1wLCBuYW1lKToKLSAgICAgICAgc2VsZi5tcCA9IG1wCi0gICAgICAgIHNlbGYubmFtZSA9IG5hbWUKLSAgICAgICAgc2VsZi5wYW5lbCA9IG1wLmFkZHBhbmVsKG5hbWUpCi0gICAgICAgIHNlbGYudGV4dCwgc2VsZi5mcmFtZSA9IHRrdG9vbHMubWFrZV90ZXh0X2JveChzZWxmLnBhbmVsLCBoZWlnaHQ9MTApCi0gICAgICAgIHNlbGYudGV4dC5jb25maWcod3JhcD1OT05FKQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICBzZWxmLnRleHQuZGVsZXRlKCIxLjAiLCBFTkQpCi0gICAgICAgIHNlbGYudGV4dC55dmlldygiMS4wIikKLQotICAgIGRlZiBwdXQoc2VsZiwgcyk6Ci0gICAgICAgIHNlbGYudGV4dC5pbnNlcnQoRU5ELCBzKQotICAgICAgICBpZiAnXG4nIGluIHM6Ci0gICAgICAgICAgICBzZWxmLnRleHQueXZpZXcoRU5EKQotCi0gICAgZGVmIHdyaXRlKHNlbGYsIHMpOgotICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KEVORCwgcykKLSAgICAgICAgaWYgJ1xuJyBpbiBzOgotICAgICAgICAgICAgc2VsZi50ZXh0Lnl2aWV3KEVORCkKLSAgICAgICAgICAgIHNlbGYucGFuZWwudXBkYXRlKCkKLQotCi1jbGFzcyBNdWx0aVBhbmVsOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCk6Ci0gICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50Ci0gICAgICAgIHNlbGYuZnJhbWUgPSBGcmFtZShzZWxmLnBhcmVudCkKLSAgICAgICAgc2VsZi5mcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYudG9wZnJhbWUgPSBGcmFtZShzZWxmLmZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9UkFJU0VEKQotICAgICAgICBzZWxmLnRvcGZyYW1lLnBhY2soZmlsbD1YKQotICAgICAgICBzZWxmLmJvdGZyYW1lID0gRnJhbWUoc2VsZi5mcmFtZSkKLSAgICAgICAgc2VsZi5ib3RmcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0gICAgICAgIHNlbGYucGFuZWxuYW1lcyA9IFtdCi0gICAgICAgIHNlbGYucGFuZWxzID0ge30KLQotICAgIGRlZiBhZGRwYW5lbChzZWxmLCBuYW1lLCBvbj0wKToKLSAgICAgICAgdiA9IFN0cmluZ1ZhcihzZWxmLnBhcmVudCkKLSAgICAgICAgaWYgb246Ci0gICAgICAgICAgICB2LnNldChuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdi5zZXQoIiIpCi0gICAgICAgIGNoZWNrID0gQ2hlY2tidXR0b24oc2VsZi50b3BmcmFtZSwgdGV4dD1uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnZhbHVlPSIiLCBvbnZhbHVlPW5hbWUsIHZhcmlhYmxlPXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmNoZWNrcGFuZWwpCi0gICAgICAgIGNoZWNrLnBhY2soc2lkZT1MRUZUKQotICAgICAgICBwYW5lbCA9IEZyYW1lKHNlbGYuYm90ZnJhbWUpCi0gICAgICAgIGxhYmVsID0gTGFiZWwocGFuZWwsIHRleHQ9bmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPVJBSVNFRCwgYW5jaG9yPVcpCi0gICAgICAgIGxhYmVsLnBhY2soc2lkZT1UT1AsIGZpbGw9WCkKLSAgICAgICAgdCA9IHYsIGNoZWNrLCBwYW5lbAotICAgICAgICBzZWxmLnBhbmVsbmFtZXMuYXBwZW5kKG5hbWUpCi0gICAgICAgIHNlbGYucGFuZWxzW25hbWVdID0gdAotICAgICAgICBpZiBvbjoKLSAgICAgICAgICAgIHBhbmVsLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLSAgICAgICAgcmV0dXJuIHBhbmVsCi0KLSAgICBkZWYgc2hvd3BhbmVsKHNlbGYsIG5hbWUpOgotICAgICAgICB2LCBjaGVjaywgcGFuZWwgPSBzZWxmLnBhbmVsc1tuYW1lXQotICAgICAgICB2LnNldChuYW1lKQotICAgICAgICBwYW5lbC5wYWNrKGV4cGFuZD0xLCBmaWxsPUJPVEgpCi0KLSAgICBkZWYgaGlkZXBhbmVsKHNlbGYsIG5hbWUpOgotICAgICAgICB2LCBjaGVjaywgcGFuZWwgPSBzZWxmLnBhbmVsc1tuYW1lXQotICAgICAgICB2LnNldCgiIikKLSAgICAgICAgcGFuZWwucGFja19mb3JnZXQoKQotCi0gICAgZGVmIGNoZWNrcGFuZWwoc2VsZik6Ci0gICAgICAgIGZvciBuYW1lIGluIHNlbGYucGFuZWxuYW1lczoKLSAgICAgICAgICAgIHYsIGNoZWNrLCBwYW5lbCA9IHNlbGYucGFuZWxzW25hbWVdCi0gICAgICAgICAgICBwYW5lbC5wYWNrX2ZvcmdldCgpCi0gICAgICAgIGZvciBuYW1lIGluIHNlbGYucGFuZWxuYW1lczoKLSAgICAgICAgICAgIHYsIGNoZWNrLCBwYW5lbCA9IHNlbGYucGFuZWxzW25hbWVdCi0gICAgICAgICAgICBpZiB2LmdldCgpOgotICAgICAgICAgICAgICAgIHBhbmVsLnBhY2soZXhwYW5kPTEsIGZpbGw9Qk9USCkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvd2ViY2hlY2tlci93Y21hYy5weSBiL1Rvb2xzL3dlYmNoZWNrZXIvd2NtYWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZGNkNWQuLjAwMDAwMDAKLS0tIGEvVG9vbHMvd2ViY2hlY2tlci93Y21hYy5weQorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotaW1wb3J0IHdlYmNoZWNrZXIsIHN5cwotd2ViY2hlY2tlci5ERUZST09UID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9weXRob24vIgotd2ViY2hlY2tlci5NQVhQQUdFID0gNTAwMDAKLXdlYmNoZWNrZXIudmVyYm9zZSA9IDIKLXN5cy5hcmd2LmFwcGVuZCgnLXgnKQotd2ViY2hlY2tlci5tYWluKCkKLXN5cy5zdGRvdXQud3JpdGUoIlxuQ1IgdG8gZXhpdDogIikKLXN5cy5zdGRvdXQuZmx1c2goKQotc3lzLnN0ZGluLnJlYWRsaW5lKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd2ViY2hlY2tlci5weSBiL1Rvb2xzL3dlYmNoZWNrZXIvd2ViY2hlY2tlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNjUxY2Y4NS4uMDAwMDAwMAotLS0gYS9Ub29scy93ZWJjaGVja2VyL3dlYmNoZWNrZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4OTAgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0jIE9yaWdpbmFsIGNvZGUgYnkgR3VpZG8gdmFuIFJvc3N1bTsgZXh0ZW5zaXZlIGNoYW5nZXMgYnkgU2FtIEJheWVyLAotIyBpbmNsdWRpbmcgY29kZSB0byBjaGVjayBVUkwgZnJhZ21lbnRzLgotCi0iIiJXZWIgdHJlZSBjaGVja2VyLgotCi1UaGlzIHV0aWxpdHkgaXMgaGFuZHkgdG8gY2hlY2sgYSBzdWJ3ZWIgb2YgdGhlIHdvcmxkLXdpZGUgd2ViIGZvcgotZXJyb3JzLiAgQSBzdWJ3ZWIgaXMgc3BlY2lmaWVkIGJ5IGdpdmluZyBvbmUgb3IgbW9yZSBgYHJvb3QgVVJMcycnOyBhCi1wYWdlIGJlbG9uZ3MgdG8gdGhlIHN1YndlYiBpZiBvbmUgb2YgdGhlIHJvb3QgVVJMcyBpcyBhbiBpbml0aWFsCi1wcmVmaXggb2YgaXQuCi0KLUZpbGUgVVJMIGV4dGVuc2lvbjoKLQotSW4gb3JkZXIgdG8gZWFzeSB0aGUgY2hlY2tpbmcgb2Ygc3Vid2VicyB2aWEgdGhlIGxvY2FsIGZpbGUgc3lzdGVtLAotdGhlIGludGVycHJldGF0aW9uIG9mIGBgZmlsZTonJyBVUkxzIGlzIGV4dGVuZGVkIHRvIG1pbWljIHRoZSBiZWhhdmlvcgotb2YgeW91ciBhdmVyYWdlIEhUVFAgZGFlbW9uOiBpZiBhIGRpcmVjdG9yeSBwYXRobmFtZSBpcyBnaXZlbiwgdGhlCi1maWxlIGluZGV4Lmh0bWwgaW4gdGhhdCBkaXJlY3RvcnkgaXMgcmV0dXJuZWQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UKLWEgZGlyZWN0b3J5IGxpc3RpbmcgaXMgcmV0dXJuZWQuICBOb3csIHlvdSBjYW4gcG9pbnQgd2ViY2hlY2tlciB0byB0aGUKLWRvY3VtZW50IHRyZWUgaW4gdGhlIGxvY2FsIGZpbGUgc3lzdGVtIG9mIHlvdXIgSFRUUCBkYWVtb24sIGFuZCBoYXZlCi1tb3N0IG9mIGl0IGNoZWNrZWQuICBJbiBmYWN0IHRoZSBkZWZhdWx0IHdvcmtzIHRoaXMgd2F5IGlmIHlvdXIgbG9jYWwKLXdlYiB0cmVlIGlzIGxvY2F0ZWQgYXQgL3Vzci9sb2NhbC9ldGMvaHR0cGQvaHRkcGNzICh0aGUgZGVmYXVsdCBmb3IKLXRoZSBOQ1NBIEhUVFAgZGFlbW9uIGFuZCBwcm9iYWJseSBvdGhlcnMpLgotCi1SZXBvcnQgcHJpbnRlZDoKLQotV2hlbiBkb25lLCBpdCByZXBvcnRzIHBhZ2VzIHdpdGggYmFkIGxpbmtzIHdpdGhpbiB0aGUgc3Vid2ViLiAgV2hlbgotaW50ZXJydXB0ZWQsIGl0IHJlcG9ydHMgZm9yIHRoZSBwYWdlcyB0aGF0IGl0IGhhcyBjaGVja2VkIGFscmVhZHkuCi0KLUluIHZlcmJvc2UgbW9kZSwgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgcHJpbnRlZCBkdXJpbmcgdGhlCi1pbmZvcm1hdGlvbiBnYXRoZXJpbmcgcGhhc2UuICBCeSBkZWZhdWx0LCBpdCBwcmludHMgYSBzdW1tYXJ5IG9mIGl0cwotd29yayBzdGF0dXMgZXZlcnkgNTAgVVJMcyAoYWRqdXN0YWJsZSB3aXRoIHRoZSAtciBvcHRpb24pLCBhbmQgaXQKLXJlcG9ydHMgZXJyb3JzIGFzIHRoZXkgYXJlIGVuY291bnRlcmVkLiAgVXNlIHRoZSAtcSBvcHRpb24gdG8gZGlzYWJsZQotdGhpcyBvdXRwdXQuCi0KLUNoZWNrcG9pbnQgZmVhdHVyZToKLQotV2hldGhlciBpbnRlcnJ1cHRlZCBvciBub3QsIGl0IGR1bXBzIGl0cyBzdGF0ZSAoYSBQeXRob24gcGlja2xlKSB0byBhCi1jaGVja3BvaW50IGZpbGUgYW5kIHRoZSAtUiBvcHRpb24gYWxsb3dzIGl0IHRvIHJlc3RhcnQgZnJvbSB0aGUKLWNoZWNrcG9pbnQgKGFzc3VtaW5nIHRoYXQgdGhlIHBhZ2VzIG9uIHRoZSBzdWJ3ZWIgdGhhdCB3ZXJlIGFscmVhZHkKLXByb2Nlc3NlZCBoYXZlbid0IGNoYW5nZWQpLiAgRXZlbiB3aGVuIGl0IGhhcyBydW4gdGlsbCBjb21wbGV0aW9uLCAtUgotY2FuIHN0aWxsIGJlIHVzZWZ1bCAtLSBpdCB3aWxsIHByaW50IHRoZSByZXBvcnRzIGFnYWluLCBhbmQgLVJxIHByaW50cwotdGhlIGVycm9ycyBvbmx5LiAgSW4gdGhpcyBjYXNlLCB0aGUgY2hlY2twb2ludCBmaWxlIGlzIG5vdCB3cml0dGVuCi1hZ2Fpbi4gIFRoZSBjaGVja3BvaW50IGZpbGUgY2FuIGJlIHNldCB3aXRoIHRoZSAtZCBvcHRpb24uCi0KLVRoZSBjaGVja3BvaW50IGZpbGUgaXMgd3JpdHRlbiBhcyBhIFB5dGhvbiBwaWNrbGUuICBSZW1lbWJlciB0aGF0Ci1QeXRob24ncyBwaWNrbGUgbW9kdWxlIGlzIGN1cnJlbnRseSBxdWl0ZSBzbG93LiAgR2l2ZSBpdCB0aGUgdGltZSBpdAotbmVlZHMgdG8gbG9hZCBhbmQgc2F2ZSB0aGUgY2hlY2twb2ludCBmaWxlLiAgV2hlbiBpbnRlcnJ1cHRlZCB3aGlsZQotd3JpdGluZyB0aGUgY2hlY2twb2ludCBmaWxlLCB0aGUgb2xkIGNoZWNrcG9pbnQgZmlsZSBpcyBub3QKLW92ZXJ3cml0dGVuLCBidXQgYWxsIHdvcmsgZG9uZSBpbiB0aGUgY3VycmVudCBydW4gaXMgbG9zdC4KLQotTWlzY2VsbGFuZW91czoKLQotLSBZb3UgbWF5IGZpbmQgdGhlIChUay1iYXNlZCkgR1VJIHZlcnNpb24gZWFzaWVyIHRvIHVzZS4gIFNlZSB3Y2d1aS5weS4KLQotLSBXZWJjaGVja2VyIGhvbm9ycyB0aGUgInJvYm90cy50eHQiIGNvbnZlbnRpb24uICBUaGFua3MgdG8gU2tpcAotTW9udGFuYXJvIGZvciBoaXMgcm9ib3RwYXJzZXIucHkgbW9kdWxlIChpbmNsdWRlZCBpbiB0aGlzIGRpcmVjdG9yeSkhCi1UaGUgYWdlbnQgbmFtZSBpcyBoYXJkd2lyZWQgdG8gIndlYmNoZWNrZXIiLiAgVVJMcyB0aGF0IGFyZSBkaXNhbGxvd2VkCi1ieSB0aGUgcm9ib3RzLnR4dCBmaWxlIGFyZSByZXBvcnRlZCBhcyBleHRlcm5hbCBVUkxzLgotCi0tIEJlY2F1c2UgdGhlIFNHTUwgcGFyc2VyIGlzIGEgYml0IHNsb3csIHZlcnkgbGFyZ2UgU0dNTCBmaWxlcyBhcmUKLXNraXBwZWQuICBUaGUgc2l6ZSBsaW1pdCBjYW4gYmUgc2V0IHdpdGggdGhlIC1tIG9wdGlvbi4KLQotLSBXaGVuIHRoZSBzZXJ2ZXIgb3IgcHJvdG9jb2wgZG9lcyBub3QgdGVsbCB1cyBhIGZpbGUncyB0eXBlLCB3ZSBndWVzcwotaXQgYmFzZWQgb24gdGhlIFVSTCdzIHN1ZmZpeC4gIFRoZSBtaW1ldHlwZXMucHkgbW9kdWxlIChhbHNvIGluIHRoaXMKLWRpcmVjdG9yeSkgaGFzIGEgYnVpbHQtaW4gdGFibGUgbWFwcGluZyBtb3N0IGN1cnJlbnRseSBrbm93biBzdWZmaXhlcywKLWFuZCBpbiBhZGRpdGlvbiBhdHRlbXB0cyB0byByZWFkIHRoZSBtaW1lLnR5cGVzIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4KLXRoZSBkZWZhdWx0IGxvY2F0aW9ucyBvZiBOZXRzY2FwZSBhbmQgdGhlIE5DU0EgSFRUUCBkYWVtb24uCi0KLS0gV2UgZm9sbG93IGxpbmtzIGluZGljYXRlZCBieSA8QT4sIDxGUkFNRT4gYW5kIDxJTUc+IHRhZ3MuICBXZSBhbHNvCi1ob25vciB0aGUgPEJBU0U+IHRhZy4KLQotLSBXZSBub3cgY2hlY2sgaW50ZXJuYWwgTkFNRSBhbmNob3IgbGlua3MsIGFzIHdlbGwgYXMgdG9wbGV2ZWwgbGlua3MuCi0KLS0gQ2hlY2tpbmcgZXh0ZXJuYWwgbGlua3MgaXMgbm93IGRvbmUgYnkgZGVmYXVsdDsgdXNlIC14IHRvICpkaXNhYmxlKgotdGhpcyBmZWF0dXJlLiAgRXh0ZXJuYWwgbGlua3MgYXJlIG5vdyBjaGVja2VkIGR1cmluZyBub3JtYWwKLXByb2Nlc3NpbmcuICAoWFhYIFRoZSBzdGF0dXMgb2YgYSBjaGVja2VkIGxpbmsgY291bGQgYmUgY2F0ZWdvcml6ZWQKLWJldHRlci4gIExhdGVyLi4uKQotCi0tIElmIGV4dGVybmFsIGxpbmtzIGFyZSBub3QgY2hlY2tlZCwgeW91IGNhbiB1c2UgdGhlIC10IGZsYWcgdG8KLXByb3ZpZGUgc3BlY2lmaWMgb3ZlcnJpZGVzIHRvIC14LgotCi1Vc2FnZTogd2ViY2hlY2tlci5weSBbb3B0aW9uXSAuLi4gW3Jvb3R1cmxdIC4uLgotCi1PcHRpb25zOgotCi0tUiAgICAgICAgLS0gcmVzdGFydCBmcm9tIGNoZWNrcG9pbnQgZmlsZQotLWQgZmlsZSAgIC0tIGNoZWNrcG9pbnQgZmlsZW5hbWUgKGRlZmF1bHQgJShEVU1QRklMRSlzKQotLW0gYnl0ZXMgIC0tIHNraXAgSFRNTCBwYWdlcyBsYXJnZXIgdGhhbiB0aGlzIHNpemUgKGRlZmF1bHQgJShNQVhQQUdFKWQpCi0tbiAgICAgICAgLS0gcmVwb3J0cyBvbmx5LCBubyBjaGVja2luZyAodXNlIHdpdGggLVIpCi0tcSAgICAgICAgLS0gcXVpZXQgb3BlcmF0aW9uIChhbHNvIHN1cHByZXNzZXMgZXh0ZXJuYWwgbGlua3MgcmVwb3J0KQotLXIgbnVtYmVyIC0tIG51bWJlciBvZiBsaW5rcyBwcm9jZXNzZWQgcGVyIHJvdW5kIChkZWZhdWx0ICUoUk9VTkRTSVpFKWQpCi0tdCByb290ICAgLS0gc3BlY2lmeSByb290IGRpciB3aGljaCBzaG91bGQgYmUgdHJlYXRlZCBhcyBpbnRlcm5hbCAoY2FuIHJlcGVhdCkKLS12ICAgICAgICAtLSB2ZXJib3NlIG9wZXJhdGlvbjsgcmVwZWF0aW5nIC12IHdpbGwgaW5jcmVhc2UgdmVyYm9zaXR5Ci0teCAgICAgICAgLS0gZG9uJ3QgY2hlY2sgZXh0ZXJuYWwgbGlua3MgKHRoZXNlIGFyZSBvZnRlbiBzbG93IHRvIGNoZWNrKQotLWEgICAgICAgIC0tIGRvbid0IGNoZWNrIG5hbWUgYW5jaG9ycwotCi1Bcmd1bWVudHM6Ci0KLXJvb3R1cmwgICAtLSBVUkwgdG8gc3RhcnQgY2hlY2tpbmcKLSAgICAgICAgICAgICAoZGVmYXVsdCAlKERFRlJPT1QpcykKLQotIiIiCi0KLQotX192ZXJzaW9uX18gPSAiJFJldmlzaW9uJCIKLQotCi1pbXBvcnQgc3lzCi1pbXBvcnQgb3MKLWZyb20gdHlwZXMgaW1wb3J0ICoKLWltcG9ydCBpbwotaW1wb3J0IGdldG9wdAotaW1wb3J0IHBpY2tsZQotCi1pbXBvcnQgdXJsbGliLnJlcXVlc3QKLWltcG9ydCB1cmxsaWIucGFyc2UgYXMgdXJscGFyc2UKLWltcG9ydCBzZ21sbGliCi1pbXBvcnQgY2dpCi0KLWltcG9ydCBtaW1ldHlwZXMKLWZyb20gdXJsbGliIGltcG9ydCByb2JvdHBhcnNlcgotCi0jIEV4dHJhY3QgcmVhbCB2ZXJzaW9uIG51bWJlciBpZiBuZWNlc3NhcnkKLWlmIF9fdmVyc2lvbl9fWzBdID09ICckJzoKLSAgICBfdiA9IF9fdmVyc2lvbl9fLnNwbGl0KCkKLSAgICBpZiBsZW4oX3YpID09IDM6Ci0gICAgICAgIF9fdmVyc2lvbl9fID0gX3ZbMV0KLQotCi0jIFR1bmFibGUgcGFyYW1ldGVycwotREVGUk9PVCA9ICJmaWxlOi91c3IvbG9jYWwvZXRjL2h0dHBkL2h0ZG9jcy8iICAgIyBEZWZhdWx0IHJvb3QgVVJMCi1DSEVDS0VYVCA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGVjayBleHRlcm5hbCByZWZlcmVuY2VzICgxIGRlZXApCi1WRVJCT1NFID0gMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWZXJib3NpdHkgbGV2ZWwgKDAtMykKLU1BWFBBR0UgPSAxNTAwMDAgICAgICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBmaWxlcyBiaWdnZXIgdGhhbiB0aGlzCi1ST1VORFNJWkUgPSA1MCAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOdW1iZXIgb2YgbGlua3MgcHJvY2Vzc2VkIHBlciByb3VuZAotRFVNUEZJTEUgPSAiQHdlYmNoZWNrZXIucGlja2xlIiAgICAgICAgICMgUGlja2xlZCBjaGVja3BvaW50Ci1BR0VOVE5BTUUgPSAid2ViY2hlY2tlciIgICAgICAgICAgICAgICAgIyBBZ2VudCBuYW1lIGZvciByb2JvdHMudHh0IHBhcnNlcgotTk9OQU1FUyA9IDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yY2UgbmFtZSBhbmNob3IgY2hlY2tpbmcKLQotCi0jIEdsb2JhbCB2YXJpYWJsZXMKLQotCi1kZWYgbWFpbigpOgotICAgIGNoZWNrZXh0ID0gQ0hFQ0tFWFQKLSAgICB2ZXJib3NlID0gVkVSQk9TRQotICAgIG1heHBhZ2UgPSBNQVhQQUdFCi0gICAgcm91bmRzaXplID0gUk9VTkRTSVpFCi0gICAgZHVtcGZpbGUgPSBEVU1QRklMRQotICAgIHJlc3RhcnQgPSAwCi0gICAgbm9ydW4gPSAwCi0KLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgJ1JkOm06bnFyOnQ6dnhhJykKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgc3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIKLSAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludChfX2RvY19fJWdsb2JhbHMoKSkKLSAgICAgICAgc3lzLmV4aXQoMikKLQotICAgICMgVGhlIGV4dHJhX3Jvb3RzIHZhcmlhYmxlIGNvbGxlY3RzIGV4dHJhIHJvb3RzLgotICAgIGV4dHJhX3Jvb3RzID0gW10KLSAgICBub25hbWVzID0gTk9OQU1FUwotCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyA9PSAnLVInOgotICAgICAgICAgICAgcmVzdGFydCA9IDEKLSAgICAgICAgaWYgbyA9PSAnLWQnOgotICAgICAgICAgICAgZHVtcGZpbGUgPSBhCi0gICAgICAgIGlmIG8gPT0gJy1tJzoKLSAgICAgICAgICAgIG1heHBhZ2UgPSBpbnQoYSkKLSAgICAgICAgaWYgbyA9PSAnLW4nOgotICAgICAgICAgICAgbm9ydW4gPSAxCi0gICAgICAgIGlmIG8gPT0gJy1xJzoKLSAgICAgICAgICAgIHZlcmJvc2UgPSAwCi0gICAgICAgIGlmIG8gPT0gJy1yJzoKLSAgICAgICAgICAgIHJvdW5kc2l6ZSA9IGludChhKQotICAgICAgICBpZiBvID09ICctdCc6Ci0gICAgICAgICAgICBleHRyYV9yb290cy5hcHBlbmQoYSkKLSAgICAgICAgaWYgbyA9PSAnLWEnOgotICAgICAgICAgICAgbm9uYW1lcyA9IG5vdCBub25hbWVzCi0gICAgICAgIGlmIG8gPT0gJy12JzoKLSAgICAgICAgICAgIHZlcmJvc2UgPSB2ZXJib3NlICsgMQotICAgICAgICBpZiBvID09ICcteCc6Ci0gICAgICAgICAgICBjaGVja2V4dCA9IG5vdCBjaGVja2V4dAotCi0gICAgaWYgdmVyYm9zZSA+IDA6Ci0gICAgICAgIHByaW50KEFHRU5UTkFNRSwgInZlcnNpb24iLCBfX3ZlcnNpb25fXykKLQotICAgIGlmIHJlc3RhcnQ6Ci0gICAgICAgIGMgPSBsb2FkX3BpY2tsZShkdW1wZmlsZT1kdW1wZmlsZSwgdmVyYm9zZT12ZXJib3NlKQotICAgIGVsc2U6Ci0gICAgICAgIGMgPSBDaGVja2VyKCkKLQotICAgIGMuc2V0ZmxhZ3MoY2hlY2tleHQ9Y2hlY2tleHQsIHZlcmJvc2U9dmVyYm9zZSwKLSAgICAgICAgICAgICAgIG1heHBhZ2U9bWF4cGFnZSwgcm91bmRzaXplPXJvdW5kc2l6ZSwKLSAgICAgICAgICAgICAgIG5vbmFtZXM9bm9uYW1lcwotICAgICAgICAgICAgICAgKQotCi0gICAgaWYgbm90IHJlc3RhcnQgYW5kIG5vdCBhcmdzOgotICAgICAgICBhcmdzLmFwcGVuZChERUZST09UKQotCi0gICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICBjLmFkZHJvb3QoYXJnKQotCi0gICAgIyBUaGUgLXQgZmxhZyBpcyBvbmx5IG5lZWRlZCBpZiBleHRlcm5hbCBsaW5rcyBhcmUgbm90IHRvIGJlCi0gICAgIyBjaGVja2VkLiBTbyAtdCB2YWx1ZXMgYXJlIGlnbm9yZWQgdW5sZXNzIC14IHdhcyBzcGVjaWZpZWQuCi0gICAgaWYgbm90IGNoZWNrZXh0OgotICAgICAgICBmb3Igcm9vdCBpbiBleHRyYV9yb290czoKLSAgICAgICAgICAgICMgTWFrZSBzdXJlIGl0J3MgdGVybWluYXRlZCBieSBhIHNsYXNoLAotICAgICAgICAgICAgIyBzbyB0aGF0IGFkZHJvb3QgZG9lc24ndCBkaXNjYXJkIHRoZSBsYXN0Ci0gICAgICAgICAgICAjIGRpcmVjdG9yeSBjb21wb25lbnQuCi0gICAgICAgICAgICBpZiByb290Wy0xXSAhPSAiLyI6Ci0gICAgICAgICAgICAgICAgcm9vdCA9IHJvb3QgKyAiLyIKLSAgICAgICAgICAgIGMuYWRkcm9vdChyb290LCBhZGRfdG9fZG8gPSAwKQotCi0gICAgdHJ5OgotCi0gICAgICAgIGlmIG5vdCBub3J1bjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjLnJ1bigpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCJbcnVuIGludGVycnVwdGVkXSIpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYy5yZXBvcnQoKQotICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICBpZiB2ZXJib3NlID4gMDoKLSAgICAgICAgICAgICAgICBwcmludCgiW3JlcG9ydCBpbnRlcnJ1cHRlZF0iKQotCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgYy5zYXZlX3BpY2tsZShkdW1wZmlsZSk6Ci0gICAgICAgICAgICBpZiBkdW1wZmlsZSA9PSBEVU1QRklMRToKLSAgICAgICAgICAgICAgICBwcmludCgiVXNlIGBgJXMgLVInJyB0byByZXN0YXJ0LiIgJSBzeXMuYXJndlswXSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlVzZSBgYCVzIC1SIC1kICVzJycgdG8gcmVzdGFydC4iICUgKHN5cy5hcmd2WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdW1wZmlsZSkpCi0KLQotZGVmIGxvYWRfcGlja2xlKGR1bXBmaWxlPURVTVBGSUxFLCB2ZXJib3NlPVZFUkJPU0UpOgotICAgIGlmIHZlcmJvc2UgPiAwOgotICAgICAgICBwcmludCgiTG9hZGluZyBjaGVja3BvaW50IGZyb20gJXMgLi4uIiAlIGR1bXBmaWxlKQotICAgIGYgPSBvcGVuKGR1bXBmaWxlLCAicmIiKQotICAgIGMgPSBwaWNrbGUubG9hZChmKQotICAgIGYuY2xvc2UoKQotICAgIGlmIHZlcmJvc2UgPiAwOgotICAgICAgICBwcmludCgiRG9uZS4iKQotICAgICAgICBwcmludCgiUm9vdDoiLCAiXG4gICAgICAiLmpvaW4oYy5yb290cykpCi0gICAgcmV0dXJuIGMKLQotCi1jbGFzcyBDaGVja2VyOgotCi0gICAgY2hlY2tleHQgPSBDSEVDS0VYVAotICAgIHZlcmJvc2UgPSBWRVJCT1NFCi0gICAgbWF4cGFnZSA9IE1BWFBBR0UKLSAgICByb3VuZHNpemUgPSBST1VORFNJWkUKLSAgICBub25hbWVzID0gTk9OQU1FUwotCi0gICAgdmFsaWRmbGFncyA9IHR1cGxlKGRpcigpKQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLnJlc2V0KCkKLQotICAgIGRlZiBzZXRmbGFncyhzZWxmLCAqKmt3KToKLSAgICAgICAgZm9yIGtleSBpbiBrdzoKLSAgICAgICAgICAgIGlmIGtleSBub3QgaW4gc2VsZi52YWxpZGZsYWdzOgotICAgICAgICAgICAgICAgIHJhaXNlIE5hbWVFcnJvcigiaW52YWxpZCBrZXl3b3JkIGFyZ3VtZW50OiAlcyIgJSBzdHIoa2V5KSkKLSAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4ga3cuaXRlbXMoKToKLSAgICAgICAgICAgIHNldGF0dHIoc2VsZiwga2V5LCB2YWx1ZSkKLQotICAgIGRlZiByZXNldChzZWxmKToKLSAgICAgICAgc2VsZi5yb290cyA9IFtdCi0gICAgICAgIHNlbGYudG9kbyA9IHt9Ci0gICAgICAgIHNlbGYuZG9uZSA9IHt9Ci0gICAgICAgIHNlbGYuYmFkID0ge30KLQotICAgICAgICAjIEFkZCBhIG5hbWUgdGFibGUsIHNvIHRoYXQgdGhlIG5hbWUgVVJMcyBjYW4gYmUgY2hlY2tlZC4gQWxzbwotICAgICAgICAjIHNlcnZlcyBhcyBhbiBpbXBsaWNpdCBjYWNoZSBmb3Igd2hpY2ggVVJMcyBhcmUgZG9uZS4KLSAgICAgICAgc2VsZi5uYW1lX3RhYmxlID0ge30KLQotICAgICAgICBzZWxmLnJvdW5kID0gMAotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYXJlIG5vdCBwaWNrbGVkOgotICAgICAgICBzZWxmLnJvYm90cyA9IHt9Ci0gICAgICAgIHNlbGYuZXJyb3JzID0ge30KLSAgICAgICAgc2VsZi51cmxvcGVuZXIgPSBNeVVSTG9wZW5lcigpCi0gICAgICAgIHNlbGYuY2hhbmdlZCA9IDAKLQotICAgIGRlZiBub3RlKHNlbGYsIGxldmVsLCBmb3JtYXQsICphcmdzKToKLSAgICAgICAgaWYgc2VsZi52ZXJib3NlID4gbGV2ZWw6Ci0gICAgICAgICAgICBpZiBhcmdzOgotICAgICAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCVhcmdzCi0gICAgICAgICAgICBzZWxmLm1lc3NhZ2UoZm9ybWF0KQotCi0gICAgZGVmIG1lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQlYXJncwotICAgICAgICBwcmludChmb3JtYXQpCi0KLSAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICByZXR1cm4gKHNlbGYucm9vdHMsIHNlbGYudG9kbywgc2VsZi5kb25lLCBzZWxmLmJhZCwgc2VsZi5yb3VuZCkKLQotICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgotICAgICAgICBzZWxmLnJlc2V0KCkKLSAgICAgICAgKHNlbGYucm9vdHMsIHNlbGYudG9kbywgc2VsZi5kb25lLCBzZWxmLmJhZCwgc2VsZi5yb3VuZCkgPSBzdGF0ZQotICAgICAgICBmb3Igcm9vdCBpbiBzZWxmLnJvb3RzOgotICAgICAgICAgICAgc2VsZi5hZGRyb2JvdChyb290KQotICAgICAgICBmb3IgdXJsIGluIHNlbGYuYmFkOgotICAgICAgICAgICAgc2VsZi5tYXJrZXJyb3IodXJsKQotCi0gICAgZGVmIGFkZHJvb3Qoc2VsZiwgcm9vdCwgYWRkX3RvX2RvID0gMSk6Ci0gICAgICAgIGlmIHJvb3Qgbm90IGluIHNlbGYucm9vdHM6Ci0gICAgICAgICAgICB0cm9vdCA9IHJvb3QKLSAgICAgICAgICAgIHNjaGVtZSwgbmV0bG9jLCBwYXRoLCBwYXJhbXMsIHF1ZXJ5LCBmcmFnbWVudCA9IFwKLSAgICAgICAgICAgICAgICAgICAgdXJscGFyc2UudXJscGFyc2Uocm9vdCkKLSAgICAgICAgICAgIGkgPSBwYXRoLnJmaW5kKCIvIikgKyAxCi0gICAgICAgICAgICBpZiAwIDwgaSA8IGxlbihwYXRoKToKLSAgICAgICAgICAgICAgICBwYXRoID0gcGF0aFs6aV0KLSAgICAgICAgICAgICAgICB0cm9vdCA9IHVybHBhcnNlLnVybHVucGFyc2UoKHNjaGVtZSwgbmV0bG9jLCBwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLCBxdWVyeSwgZnJhZ21lbnQpKQotICAgICAgICAgICAgc2VsZi5yb290cy5hcHBlbmQodHJvb3QpCi0gICAgICAgICAgICBzZWxmLmFkZHJvYm90KHJvb3QpCi0gICAgICAgICAgICBpZiBhZGRfdG9fZG86Ci0gICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5rKChyb290LCAiIiksICgiPHJvb3Q+Iiwgcm9vdCkpCi0KLSAgICBkZWYgYWRkcm9ib3Qoc2VsZiwgcm9vdCk6Ci0gICAgICAgIHJvb3QgPSB1cmxwYXJzZS51cmxqb2luKHJvb3QsICIvIikKLSAgICAgICAgaWYgcm9vdCBpbiBzZWxmLnJvYm90czogcmV0dXJuCi0gICAgICAgIHVybCA9IHVybHBhcnNlLnVybGpvaW4ocm9vdCwgIi9yb2JvdHMudHh0IikKLSAgICAgICAgc2VsZi5yb2JvdHNbcm9vdF0gPSBycCA9IHJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCi0gICAgICAgIHNlbGYubm90ZSgyLCAiUGFyc2luZyAlcyIsIHVybCkKLSAgICAgICAgcnAuZGVidWcgPSBzZWxmLnZlcmJvc2UgPiAzCi0gICAgICAgIHJwLnNldF91cmwodXJsKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBycC5yZWFkKCkKLSAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBtc2c6Ci0gICAgICAgICAgICBzZWxmLm5vdGUoMSwgIkkvTyBlcnJvciBwYXJzaW5nICVzOiAlcyIsIHVybCwgbXNnKQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgd2hpbGUgc2VsZi50b2RvOgotICAgICAgICAgICAgc2VsZi5yb3VuZCA9IHNlbGYucm91bmQgKyAxCi0gICAgICAgICAgICBzZWxmLm5vdGUoMCwgIlxuUm91bmQgJWQgKCVzKVxuIiwgc2VsZi5yb3VuZCwgc2VsZi5zdGF0dXMoKSkKLSAgICAgICAgICAgIHVybHMgPSBzb3J0ZWQoc2VsZi50b2RvLmtleXMoKSkKLSAgICAgICAgICAgIGRlbCB1cmxzW3NlbGYucm91bmRzaXplOl0KLSAgICAgICAgICAgIGZvciB1cmwgaW4gdXJsczoKLSAgICAgICAgICAgICAgICBzZWxmLmRvcGFnZSh1cmwpCi0KLSAgICBkZWYgc3RhdHVzKHNlbGYpOgotICAgICAgICByZXR1cm4gIiVkIHRvdGFsLCAlZCB0byBkbywgJWQgZG9uZSwgJWQgYmFkIiAlICgKLSAgICAgICAgICAgIGxlbihzZWxmLnRvZG8pK2xlbihzZWxmLmRvbmUpLAotICAgICAgICAgICAgbGVuKHNlbGYudG9kbyksIGxlbihzZWxmLmRvbmUpLAotICAgICAgICAgICAgbGVuKHNlbGYuYmFkKSkKLQotICAgIGRlZiByZXBvcnQoc2VsZik6Ci0gICAgICAgIHNlbGYubWVzc2FnZSgiIikKLSAgICAgICAgaWYgbm90IHNlbGYudG9kbzogcyA9ICJGaW5hbCIKLSAgICAgICAgZWxzZTogcyA9ICJJbnRlcmltIgotICAgICAgICBzZWxmLm1lc3NhZ2UoIiVzIFJlcG9ydCAoJXMpIiwgcywgc2VsZi5zdGF0dXMoKSkKLSAgICAgICAgc2VsZi5yZXBvcnRfZXJyb3JzKCkKLQotICAgIGRlZiByZXBvcnRfZXJyb3JzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5iYWQ6Ci0gICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIlxuTm8gZXJyb3JzIikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLm1lc3NhZ2UoIlxuRXJyb3IgUmVwb3J0OiIpCi0gICAgICAgIHNvdXJjZXMgPSBzb3J0ZWQoc2VsZi5lcnJvcnMua2V5cygpKQotICAgICAgICBmb3Igc291cmNlIGluIHNvdXJjZXM6Ci0gICAgICAgICAgICB0cmlwbGVzID0gc2VsZi5lcnJvcnNbc291cmNlXQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIiKQotICAgICAgICAgICAgaWYgbGVuKHRyaXBsZXMpID4gMToKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIiVkIEVycm9ycyBpbiAlcyIsIGxlbih0cmlwbGVzKSwgc291cmNlKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIkVycm9yIGluICVzIiwgc291cmNlKQotICAgICAgICAgICAgIyBDYWxsIHNlbGYuZm9ybWF0X3VybCgpIGluc3RlYWQgb2YgcmVmZXJyaW5nCi0gICAgICAgICAgICAjIHRvIHRoZSBVUkwgZGlyZWN0bHksIHNpbmNlIHRoZSBVUkxzIGluIHRoZXNlCi0gICAgICAgICAgICAjIHRyaXBsZXMgaXMgbm93IGEgKFVSTCwgZnJhZ21lbnQpIHBhaXIuIFRoZSB2YWx1ZQotICAgICAgICAgICAgIyBvZiB0aGUgInNvdXJjZSIgdmFyaWFibGUgY29tZXMgZnJvbSB0aGUgbGlzdCBvZgotICAgICAgICAgICAgIyBvcmlnaW5zLCBhbmQgaXMgYSBVUkwsIG5vdCBhIHBhaXIuCi0gICAgICAgICAgICBmb3IgdXJsLCByYXdsaW5rLCBtc2cgaW4gdHJpcGxlczoKLSAgICAgICAgICAgICAgICBpZiByYXdsaW5rICE9IHNlbGYuZm9ybWF0X3VybCh1cmwpOiBzID0gIiAoJXMpIiAlIHJhd2xpbmsKLSAgICAgICAgICAgICAgICBlbHNlOiBzID0gIiIKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIiAgSFJFRiAlcyVzXG4gICAgbXNnICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXRfdXJsKHVybCksIHMsIG1zZykKLQotICAgIGRlZiBkb3BhZ2Uoc2VsZiwgdXJsX3BhaXIpOgotCi0gICAgICAgICMgQWxsIHByaW50aW5nIG9mIFVSTHMgdXNlcyBmb3JtYXRfdXJsKCk7IGFyZ3VtZW50IGNoYW5nZWQgdG8KLSAgICAgICAgIyB1cmxfcGFpciBmb3IgY2xhcml0eS4KLSAgICAgICAgaWYgc2VsZi52ZXJib3NlID4gMToKLSAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZSA+IDI6Ci0gICAgICAgICAgICAgICAgc2VsZi5zaG93KCJDaGVjayAiLCBzZWxmLmZvcm1hdF91cmwodXJsX3BhaXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmcm9tIiwgc2VsZi50b2RvW3VybF9wYWlyXSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJDaGVjayAlcyIsIHNlbGYuZm9ybWF0X3VybCh1cmxfcGFpcikpCi0gICAgICAgIHVybCwgbG9jYWxfZnJhZ21lbnQgPSB1cmxfcGFpcgotICAgICAgICBpZiBsb2NhbF9mcmFnbWVudCBhbmQgc2VsZi5ub25hbWVzOgotICAgICAgICAgICAgc2VsZi5tYXJrZG9uZSh1cmxfcGFpcikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwYWdlID0gc2VsZi5nZXRwYWdlKHVybF9wYWlyKQotICAgICAgICBleGNlcHQgc2dtbGxpYi5TR01MUGFyc2VFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBtc2cgPSBzZWxmLnNhbml0aXplKG1zZykKLSAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiRXJyb3IgcGFyc2luZyAlczogJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZvcm1hdF91cmwodXJsX3BhaXIpLCBtc2cpCi0gICAgICAgICAgICAjIERvbnQgYWN0dWFsbHkgbWFyayB0aGUgVVJMIGFzIGJhZCAtIGl0IGV4aXN0cywganVzdAotICAgICAgICAgICAgIyB3ZSBjYW4ndCBwYXJzZSBpdCEKLSAgICAgICAgICAgIHBhZ2UgPSBOb25lCi0gICAgICAgIGlmIHBhZ2U6Ci0gICAgICAgICAgICAjIFN0b3JlIHRoZSBwYWdlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoaXMgVVJMLgotICAgICAgICAgICAgc2VsZi5uYW1lX3RhYmxlW3VybF0gPSBwYWdlCi0gICAgICAgICAgICAjIElmIHRoZXJlIGlzIGEgZnJhZ21lbnQgaW4gdGhpcyB1cmxfcGFpciwgYW5kIGl0J3Mgbm90Ci0gICAgICAgICAgICAjIGluIHRoZSBsaXN0IG9mIG5hbWVzIGZvciB0aGUgcGFnZSwgY2FsbCBzZXRiYWQoKSwgc2luY2UKLSAgICAgICAgICAgICMgaXQncyBhIG1pc3NpbmcgYW5jaG9yLgotICAgICAgICAgICAgaWYgbG9jYWxfZnJhZ21lbnQgYW5kIGxvY2FsX2ZyYWdtZW50IG5vdCBpbiBwYWdlLmdldG5hbWVzKCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zZXRiYWQodXJsX3BhaXIsICgiTWlzc2luZyBuYW1lIGFuY2hvciBgJXMnIiAlIGxvY2FsX2ZyYWdtZW50KSkKLSAgICAgICAgICAgIGZvciBpbmZvIGluIHBhZ2UuZ2V0bGlua2luZm9zKCk6Ci0gICAgICAgICAgICAgICAgIyBnZXRsaW5raW5mb3MoKSBub3cgcmV0dXJucyB0aGUgZnJhZ21lbnQgYXMgd2VsbCwKLSAgICAgICAgICAgICAgICAjIGFuZCB3ZSBzdG9yZSB0aGF0IGZyYWdtZW50IGhlcmUgaW4gdGhlICJ0b2RvIiBkaWN0aW9uYXJ5LgotICAgICAgICAgICAgICAgIGxpbmssIHJhd2xpbmssIGZyYWdtZW50ID0gaW5mbwotICAgICAgICAgICAgICAgICMgSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0aGUgZnJhZ21lbnQgYXMgdGhlIG9yaWdpbiwgc2luY2UKLSAgICAgICAgICAgICAgICAjIHRoZSBvcmlnaW4gaXMgbG9naWNhbGx5IGEgcGFnZS4KLSAgICAgICAgICAgICAgICBvcmlnaW4gPSB1cmwsIHJhd2xpbmsKLSAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmsoKGxpbmssIGZyYWdtZW50KSwgb3JpZ2luKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBJZiBubyBwYWdlIGhhcyBiZWVuIGNyZWF0ZWQgeWV0LCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAjIHJlY29yZCB0aGF0IGZhY3QuCi0gICAgICAgICAgICBzZWxmLm5hbWVfdGFibGVbdXJsX3BhaXJbMF1dID0gTm9uZQotICAgICAgICBzZWxmLm1hcmtkb25lKHVybF9wYWlyKQotCi0gICAgZGVmIG5ld2xpbmsoc2VsZiwgdXJsLCBvcmlnaW4pOgotICAgICAgICBpZiB1cmwgaW4gc2VsZi5kb25lOgotICAgICAgICAgICAgc2VsZi5uZXdkb25lbGluayh1cmwsIG9yaWdpbikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYubmV3dG9kb2xpbmsodXJsLCBvcmlnaW4pCi0KLSAgICBkZWYgbmV3ZG9uZWxpbmsoc2VsZiwgdXJsLCBvcmlnaW4pOgotICAgICAgICBpZiBvcmlnaW4gbm90IGluIHNlbGYuZG9uZVt1cmxdOgotICAgICAgICAgICAgc2VsZi5kb25lW3VybF0uYXBwZW5kKG9yaWdpbikKLQotICAgICAgICAjIENhbGwgc2VsZi5mb3JtYXRfdXJsKCksIHNpbmNlIHRoZSBVUkwgaGVyZQotICAgICAgICAjIGlzIG5vdyBhIChVUkwsIGZyYWdtZW50KSBwYWlyLgotICAgICAgICBzZWxmLm5vdGUoMywgIiAgRG9uZSBsaW5rICVzIiwgc2VsZi5mb3JtYXRfdXJsKHVybCkpCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBpZiBpdCdzIGJhZCwgdGhhdCB0aGUgb3JpZ2luIGdldHMgYWRkZWQuCi0gICAgICAgIGlmIHVybCBpbiBzZWxmLmJhZDoKLSAgICAgICAgICAgIHNvdXJjZSwgcmF3bGluayA9IG9yaWdpbgotICAgICAgICAgICAgdHJpcGxlID0gdXJsLCByYXdsaW5rLCBzZWxmLmJhZFt1cmxdCi0gICAgICAgICAgICBzZWxmLnNldGVycm9yKHNvdXJjZSwgdHJpcGxlKQotCi0gICAgZGVmIG5ld3RvZG9saW5rKHNlbGYsIHVybCwgb3JpZ2luKToKLSAgICAgICAgIyBDYWxsIHNlbGYuZm9ybWF0X3VybCgpLCBzaW5jZSB0aGUgVVJMIGhlcmUKLSAgICAgICAgIyBpcyBub3cgYSAoVVJMLCBmcmFnbWVudCkgcGFpci4KLSAgICAgICAgaWYgdXJsIGluIHNlbGYudG9kbzoKLSAgICAgICAgICAgIGlmIG9yaWdpbiBub3QgaW4gc2VsZi50b2RvW3VybF06Ci0gICAgICAgICAgICAgICAgc2VsZi50b2RvW3VybF0uYXBwZW5kKG9yaWdpbikKLSAgICAgICAgICAgIHNlbGYubm90ZSgzLCAiICBTZWVuIHRvZG8gbGluayAlcyIsIHNlbGYuZm9ybWF0X3VybCh1cmwpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi50b2RvW3VybF0gPSBbb3JpZ2luXQotICAgICAgICAgICAgc2VsZi5ub3RlKDMsICIgIE5ldyB0b2RvIGxpbmsgJXMiLCBzZWxmLmZvcm1hdF91cmwodXJsKSkKLQotICAgIGRlZiBmb3JtYXRfdXJsKHNlbGYsIHVybCk6Ci0gICAgICAgIGxpbmssIGZyYWdtZW50ID0gdXJsCi0gICAgICAgIGlmIGZyYWdtZW50OiByZXR1cm4gbGluayArICIjIiArIGZyYWdtZW50Ci0gICAgICAgIGVsc2U6IHJldHVybiBsaW5rCi0KLSAgICBkZWYgbWFya2RvbmUoc2VsZiwgdXJsKToKLSAgICAgICAgc2VsZi5kb25lW3VybF0gPSBzZWxmLnRvZG9bdXJsXQotICAgICAgICBkZWwgc2VsZi50b2RvW3VybF0KLSAgICAgICAgc2VsZi5jaGFuZ2VkID0gMQotCi0gICAgZGVmIGlucm9vdHMoc2VsZiwgdXJsKToKLSAgICAgICAgZm9yIHJvb3QgaW4gc2VsZi5yb290czoKLSAgICAgICAgICAgIGlmIHVybFs6bGVuKHJvb3QpXSA9PSByb290OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmlzYWxsb3dlZChyb290LCB1cmwpCi0gICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgaXNhbGxvd2VkKHNlbGYsIHJvb3QsIHVybCk6Ci0gICAgICAgIHJvb3QgPSB1cmxwYXJzZS51cmxqb2luKHJvb3QsICIvIikKLSAgICAgICAgcmV0dXJuIHNlbGYucm9ib3RzW3Jvb3RdLmNhbl9mZXRjaChBR0VOVE5BTUUsIHVybCkKLQotICAgIGRlZiBnZXRwYWdlKHNlbGYsIHVybF9wYWlyKToKLSAgICAgICAgIyBJbmNvbWluZyBhcmd1bWVudCBuYW1lIGlzIGEgKFVSTCwgZnJhZ21lbnQpIHBhaXIuCi0gICAgICAgICMgVGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBjYWNoZWQgaW4gdGhlIG5hbWVfdGFibGUgdmFyaWFibGUuCi0gICAgICAgIHVybCwgZnJhZ21lbnQgPSB1cmxfcGFpcgotICAgICAgICBpZiB1cmwgaW4gc2VsZi5uYW1lX3RhYmxlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZV90YWJsZVt1cmxdCi0KLSAgICAgICAgc2NoZW1lLCBwYXRoID0gdXJsbGliLnJlcXVlc3Quc3BsaXR0eXBlKHVybCkKLSAgICAgICAgaWYgc2NoZW1lIGluICgnbWFpbHRvJywgJ25ld3MnLCAnamF2YXNjcmlwdCcsICd0ZWxuZXQnKToKLSAgICAgICAgICAgIHNlbGYubm90ZSgxLCAiIE5vdCBjaGVja2luZyAlcyBVUkwiICUgc2NoZW1lKQotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgaXNpbnQgPSBzZWxmLmlucm9vdHModXJsKQotCi0gICAgICAgICMgRW5zdXJlIHRoYXQgb3BlbnBhZ2UgZ2V0cyB0aGUgVVJMIHBhaXIgdG8KLSAgICAgICAgIyBwcmludCBvdXQgaXRzIGVycm9yIG1lc3NhZ2UgYW5kIHJlY29yZCB0aGUgZXJyb3IgcGFpcgotICAgICAgICAjIGNvcnJlY3RseS4KLSAgICAgICAgaWYgbm90IGlzaW50OgotICAgICAgICAgICAgaWYgbm90IHNlbGYuY2hlY2tleHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5ub3RlKDEsICIgTm90IGNoZWNraW5nIGV4dCBsaW5rIikKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgZiA9IHNlbGYub3BlbnBhZ2UodXJsX3BhaXIpCi0gICAgICAgICAgICBpZiBmOgotICAgICAgICAgICAgICAgIHNlbGYuc2FmZWNsb3NlKGYpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICB0ZXh0LCBudXJsID0gc2VsZi5yZWFkaHRtbCh1cmxfcGFpcikKLQotICAgICAgICBpZiBudXJsICE9IHVybDoKLSAgICAgICAgICAgIHNlbGYubm90ZSgxLCAiIFJlZGlyZWN0ZWQgdG8gJXMiLCBudXJsKQotICAgICAgICAgICAgdXJsID0gbnVybAotICAgICAgICBpZiB0ZXh0OgotICAgICAgICAgICAgcmV0dXJuIFBhZ2UodGV4dCwgdXJsLCBtYXhwYWdlPXNlbGYubWF4cGFnZSwgY2hlY2tlcj1zZWxmKQotCi0gICAgIyBUaGVzZSBuZXh0IHRocmVlIGZ1bmN0aW9ucyB0YWtlIChVUkwsIGZyYWdtZW50KSBwYWlycyBhcwotICAgICMgYXJndW1lbnRzLCBzbyB0aGF0IG9wZW5wYWdlKCkgcmVjZWl2ZXMgdGhlIGFwcHJvcHJpYXRlIHR1cGxlIHRvCi0gICAgIyByZWNvcmQgZXJyb3IgbWVzc2FnZXMuCi0gICAgZGVmIHJlYWRodG1sKHNlbGYsIHVybF9wYWlyKToKLSAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybF9wYWlyCi0gICAgICAgIHRleHQgPSBOb25lCi0gICAgICAgIGYsIHVybCA9IHNlbGYub3Blbmh0bWwodXJsX3BhaXIpCi0gICAgICAgIGlmIGY6Ci0gICAgICAgICAgICB0ZXh0ID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICByZXR1cm4gdGV4dCwgdXJsCi0KLSAgICBkZWYgb3Blbmh0bWwoc2VsZiwgdXJsX3BhaXIpOgotICAgICAgICB1cmwsIGZyYWdtZW50ID0gdXJsX3BhaXIKLSAgICAgICAgZiA9IHNlbGYub3BlbnBhZ2UodXJsX3BhaXIpCi0gICAgICAgIGlmIGY6Ci0gICAgICAgICAgICB1cmwgPSBmLmdldHVybCgpCi0gICAgICAgICAgICBpbmZvID0gZi5pbmZvKCkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNoZWNrZm9yaHRtbChpbmZvLCB1cmwpOgotICAgICAgICAgICAgICAgIHNlbGYuc2FmZWNsb3NlKGYpCi0gICAgICAgICAgICAgICAgZiA9IE5vbmUKLSAgICAgICAgcmV0dXJuIGYsIHVybAotCi0gICAgZGVmIG9wZW5wYWdlKHNlbGYsIHVybF9wYWlyKToKLSAgICAgICAgdXJsLCBmcmFnbWVudCA9IHVybF9wYWlyCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnVybG9wZW5lci5vcGVuKHVybCkKLSAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKSBhcyBtc2c6Ci0gICAgICAgICAgICBtc2cgPSBzZWxmLnNhbml0aXplKG1zZykKLSAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiRXJyb3IgJXMiLCBtc2cpCi0gICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPiAwOgotICAgICAgICAgICAgICAgIHNlbGYuc2hvdygiIEhSRUYgIiwgdXJsLCAiICBmcm9tIiwgc2VsZi50b2RvW3VybF9wYWlyXSkKLSAgICAgICAgICAgIHNlbGYuc2V0YmFkKHVybF9wYWlyLCBtc2cpCi0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGNoZWNrZm9yaHRtbChzZWxmLCBpbmZvLCB1cmwpOgotICAgICAgICBpZiAnY29udGVudC10eXBlJyBpbiBpbmZvOgotICAgICAgICAgICAgY3R5cGUgPSBjZ2kucGFyc2VfaGVhZGVyKGluZm9bJ2NvbnRlbnQtdHlwZSddKVswXS5sb3dlcigpCi0gICAgICAgICAgICBpZiAnOycgaW4gY3R5cGU6Ci0gICAgICAgICAgICAgICAgIyBoYW5kbGUgY29udGVudC10eXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvODg1OS0xIDoKLSAgICAgICAgICAgICAgICBjdHlwZSA9IGN0eXBlLnNwbGl0KCc7JywgMSlbMF0uc3RyaXAoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgdXJsWy0xOl0gPT0gIi8iOgotICAgICAgICAgICAgICAgIHJldHVybiAxCi0gICAgICAgICAgICBjdHlwZSwgZW5jb2RpbmcgPSBtaW1ldHlwZXMuZ3Vlc3NfdHlwZSh1cmwpCi0gICAgICAgIGlmIGN0eXBlID09ICd0ZXh0L2h0bWwnOgotICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYubm90ZSgxLCAiIE5vdCBIVE1MLCBtaW1lIHR5cGUgJXMiLCBjdHlwZSkKLSAgICAgICAgICAgIHJldHVybiAwCi0KLSAgICBkZWYgc2V0Z29vZChzZWxmLCB1cmwpOgotICAgICAgICBpZiB1cmwgaW4gc2VsZi5iYWQ6Ci0gICAgICAgICAgICBkZWwgc2VsZi5iYWRbdXJsXQotICAgICAgICAgICAgc2VsZi5jaGFuZ2VkID0gMQotICAgICAgICAgICAgc2VsZi5ub3RlKDAsICIoQ2xlYXIgcHJldmlvdXNseSBzZWVuIGVycm9yKSIpCi0KLSAgICBkZWYgc2V0YmFkKHNlbGYsIHVybCwgbXNnKToKLSAgICAgICAgaWYgdXJsIGluIHNlbGYuYmFkIGFuZCBzZWxmLmJhZFt1cmxdID09IG1zZzoKLSAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiKFNlZW4gdGhpcyBlcnJvciBiZWZvcmUpIikKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBzZWxmLmJhZFt1cmxdID0gbXNnCi0gICAgICAgIHNlbGYuY2hhbmdlZCA9IDEKLSAgICAgICAgc2VsZi5tYXJrZXJyb3IodXJsKQotCi0gICAgZGVmIG1hcmtlcnJvcihzZWxmLCB1cmwpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcmlnaW5zID0gc2VsZi50b2RvW3VybF0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgb3JpZ2lucyA9IHNlbGYuZG9uZVt1cmxdCi0gICAgICAgIGZvciBzb3VyY2UsIHJhd2xpbmsgaW4gb3JpZ2luczoKLSAgICAgICAgICAgIHRyaXBsZSA9IHVybCwgcmF3bGluaywgc2VsZi5iYWRbdXJsXQotICAgICAgICAgICAgc2VsZi5zZXRlcnJvcihzb3VyY2UsIHRyaXBsZSkKLQotICAgIGRlZiBzZXRlcnJvcihzZWxmLCB1cmwsIHRyaXBsZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBVUkxzIGFyZSBub3cgcHJvY2Vzc2VkLCBJIG5lZWQgdG8KLSAgICAgICAgICAgICMgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBVUkwgaGFzbid0IGJlZW4gZW50ZXJlZCBpbiB0aGUKLSAgICAgICAgICAgICMgZXJyb3IgbGlzdC4gIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0cmlwbGUgaGVyZSBpcyBhCi0gICAgICAgICAgICAjIChVUkwsIGZyYWdtZW50KSBwYWlyLCBidXQgdGhlIFVSTCBrZXkgaXMgbm90LCBzaW5jZSBpdCdzCi0gICAgICAgICAgICAjIGZyb20gdGhlIGxpc3Qgb2Ygb3JpZ2lucy4KLSAgICAgICAgICAgIGlmIHRyaXBsZSBub3QgaW4gc2VsZi5lcnJvcnNbdXJsXToKLSAgICAgICAgICAgICAgICBzZWxmLmVycm9yc1t1cmxdLmFwcGVuZCh0cmlwbGUpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZXJyb3JzW3VybF0gPSBbdHJpcGxlXQotCi0gICAgIyBUaGUgZm9sbG93aW5nIHVzZWQgdG8gYmUgdG9wbGV2ZWwgZnVuY3Rpb25zOyB0aGV5IGhhdmUgYmVlbgotICAgICMgY2hhbmdlZCBpbnRvIG1ldGhvZHMgc28gdGhleSBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLgotCi0gICAgZGVmIHNob3coc2VsZiwgcDEsIGxpbmssIHAyLCBvcmlnaW5zKToKLSAgICAgICAgc2VsZi5tZXNzYWdlKCIlcyAlcyIsIHAxLCBsaW5rKQotICAgICAgICBpID0gMAotICAgICAgICBmb3Igc291cmNlLCByYXdsaW5rIGluIG9yaWdpbnM6Ci0gICAgICAgICAgICBpID0gaSsxCi0gICAgICAgICAgICBpZiBpID09IDI6Ci0gICAgICAgICAgICAgICAgcDIgPSAnICcqbGVuKHAyKQotICAgICAgICAgICAgaWYgcmF3bGluayAhPSBsaW5rOiBzID0gIiAoJXMpIiAlIHJhd2xpbmsKLSAgICAgICAgICAgIGVsc2U6IHMgPSAiIgotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCIlcyAlcyVzIiwgcDIsIHNvdXJjZSwgcykKLQotICAgIGRlZiBzYW5pdGl6ZShzZWxmLCBtc2cpOgotICAgICAgICBpZiBpc2luc3RhbmNlKElPRXJyb3IsIENsYXNzVHlwZSkgYW5kIGlzaW5zdGFuY2UobXNnLCBJT0Vycm9yKToKLSAgICAgICAgICAgICMgRG8gdGhlIG90aGVyIGJyYW5jaCByZWN1cnNpdmVseQotICAgICAgICAgICAgbXNnLmFyZ3MgPSBzZWxmLnNhbml0aXplKG1zZy5hcmdzKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UobXNnLCBUdXBsZVR5cGUpOgotICAgICAgICAgICAgaWYgbGVuKG1zZykgPj0gNCBhbmQgbXNnWzBdID09ICdodHRwIGVycm9yJyBhbmQgXAotICAgICAgICAgICAgICAgaXNpbnN0YW5jZShtc2dbM10sIEluc3RhbmNlVHlwZSk6Ci0gICAgICAgICAgICAgICAgIyBSZW1vdmUgdGhlIE1lc3NhZ2UgaW5zdGFuY2UgLS0gaXQgbWF5IGNvbnRhaW4KLSAgICAgICAgICAgICAgICAjIGEgZmlsZSBvYmplY3Qgd2hpY2ggcHJldmVudHMgcGlja2xpbmcuCi0gICAgICAgICAgICAgICAgbXNnID0gbXNnWzozXSArIG1zZ1s0Ol0KLSAgICAgICAgcmV0dXJuIG1zZwotCi0gICAgZGVmIHNhZmVjbG9zZShzZWxmLCBmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdXJsID0gZi5nZXR1cmwoKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiB1cmxbOjRdID09ICdmdHA6JyBvciB1cmxbOjddID09ICdmaWxlOi8vJzoKLSAgICAgICAgICAgICAgICAjIEFwcGFyZW50bHkgZnRwIGNvbm5lY3Rpb25zIGRvbid0IGxpa2UgdG8gYmUgY2xvc2VkCi0gICAgICAgICAgICAgICAgIyBwcmVtYXR1cmVseS4uLgotICAgICAgICAgICAgICAgIHRleHQgPSBmLnJlYWQoKQotICAgICAgICBmLmNsb3NlKCkKLQotICAgIGRlZiBzYXZlX3BpY2tsZShzZWxmLCBkdW1wZmlsZT1EVU1QRklMRSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmNoYW5nZWQ6Ci0gICAgICAgICAgICBzZWxmLm5vdGUoMCwgIlxuTm8gbmVlZCB0byBzYXZlIGNoZWNrcG9pbnQiKQotICAgICAgICBlbGlmIG5vdCBkdW1wZmlsZToKLSAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiTm8gZHVtcGZpbGUsIHdvbid0IHNhdmUgY2hlY2twb2ludCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm5vdGUoMCwgIlxuU2F2aW5nIGNoZWNrcG9pbnQgdG8gJXMgLi4uIiwgZHVtcGZpbGUpCi0gICAgICAgICAgICBuZXdmaWxlID0gZHVtcGZpbGUgKyAiLm5ldyIKLSAgICAgICAgICAgIGYgPSBvcGVuKG5ld2ZpbGUsICJ3YiIpCi0gICAgICAgICAgICBwaWNrbGUuZHVtcChzZWxmLCBmKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MudW5saW5rKGR1bXBmaWxlKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIG9zLnJlbmFtZShuZXdmaWxlLCBkdW1wZmlsZSkKLSAgICAgICAgICAgIHNlbGYubm90ZSgwLCAiRG9uZS4iKQotICAgICAgICAgICAgcmV0dXJuIDEKLQotCi1jbGFzcyBQYWdlOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQsIHVybCwgdmVyYm9zZT1WRVJCT1NFLCBtYXhwYWdlPU1BWFBBR0UsIGNoZWNrZXI9Tm9uZSk6Ci0gICAgICAgIHNlbGYudGV4dCA9IHRleHQKLSAgICAgICAgc2VsZi51cmwgPSB1cmwKLSAgICAgICAgc2VsZi52ZXJib3NlID0gdmVyYm9zZQotICAgICAgICBzZWxmLm1heHBhZ2UgPSBtYXhwYWdlCi0gICAgICAgIHNlbGYuY2hlY2tlciA9IGNoZWNrZXIKLQotICAgICAgICAjIFRoZSBwYXJzaW5nIG9mIHRoZSBwYWdlIGlzIGRvbmUgaW4gdGhlIF9faW5pdF9fKCkgcm91dGluZSBpbgotICAgICAgICAjIG9yZGVyIHRvIGluaXRpYWxpemUgdGhlIGxpc3Qgb2YgbmFtZXMgdGhlIGZpbGUKLSAgICAgICAgIyBjb250YWlucy4gU3RvcmVkIHRoZSBwYXJzZXIgaW4gYW4gaW5zdGFuY2UgdmFyaWFibGUuIFBhc3NlZAotICAgICAgICAjIHRoZSBVUkwgdG8gTXlIVE1MUGFyc2VyKCkuCi0gICAgICAgIHNpemUgPSBsZW4oc2VsZi50ZXh0KQotICAgICAgICBpZiBzaXplID4gc2VsZi5tYXhwYWdlOgotICAgICAgICAgICAgc2VsZi5ub3RlKDAsICJTa2lwIGh1Z2UgZmlsZSAlcyAoJS4wZiBLYnl0ZXMpIiwgc2VsZi51cmwsIChzaXplKjAuMDAxKSkKLSAgICAgICAgICAgIHNlbGYucGFyc2VyID0gTm9uZQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuY2hlY2tlci5ub3RlKDIsICIgIFBhcnNpbmcgJXMgKCVkIGJ5dGVzKSIsIHNlbGYudXJsLCBzaXplKQotICAgICAgICBzZWxmLnBhcnNlciA9IE15SFRNTFBhcnNlcih1cmwsIHZlcmJvc2U9c2VsZi52ZXJib3NlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VyPXNlbGYuY2hlY2tlcikKLSAgICAgICAgc2VsZi5wYXJzZXIuZmVlZChzZWxmLnRleHQpCi0gICAgICAgIHNlbGYucGFyc2VyLmNsb3NlKCkKLQotICAgIGRlZiBub3RlKHNlbGYsIGxldmVsLCBtc2csICphcmdzKToKLSAgICAgICAgaWYgc2VsZi5jaGVja2VyOgotICAgICAgICAgICAgc2VsZi5jaGVja2VyLm5vdGUobGV2ZWwsIG1zZywgKmFyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLnZlcmJvc2UgPj0gbGV2ZWw6Ci0gICAgICAgICAgICAgICAgaWYgYXJnczoKLSAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnJWFyZ3MKLSAgICAgICAgICAgICAgICBwcmludChtc2cpCi0KLSAgICAjIE1ldGhvZCB0byByZXRyaWV2ZSBuYW1lcy4KLSAgICBkZWYgZ2V0bmFtZXMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYucGFyc2VyOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyc2VyLm5hbWVzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gW10KLQotICAgIGRlZiBnZXRsaW5raW5mb3Moc2VsZik6Ci0gICAgICAgICMgRmlsZSByZWFkaW5nIGlzIGRvbmUgaW4gX19pbml0X18oKSByb3V0aW5lLiAgU3RvcmUgcGFyc2VyIGluCi0gICAgICAgICMgbG9jYWwgdmFyaWFibGUgdG8gaW5kaWNhdGUgc3VjY2VzcyBvZiBwYXJzaW5nLgotCi0gICAgICAgICMgSWYgbm8gcGFyc2VyIHdhcyBzdG9yZWQsIGZhaWwuCi0gICAgICAgIGlmIG5vdCBzZWxmLnBhcnNlcjogcmV0dXJuIFtdCi0KLSAgICAgICAgcmF3bGlua3MgPSBzZWxmLnBhcnNlci5nZXRsaW5rcygpCi0gICAgICAgIGJhc2UgPSB1cmxwYXJzZS51cmxqb2luKHNlbGYudXJsLCBzZWxmLnBhcnNlci5nZXRiYXNlKCkgb3IgIiIpCi0gICAgICAgIGluZm9zID0gW10KLSAgICAgICAgZm9yIHJhd2xpbmsgaW4gcmF3bGlua3M6Ci0gICAgICAgICAgICB0ID0gdXJscGFyc2UudXJscGFyc2UocmF3bGluaykKLSAgICAgICAgICAgICMgRE9OJ1QgRElTQ0FSRCBUSEUgRlJBR01FTlQhIEluc3RlYWQsIGluY2x1ZGUKLSAgICAgICAgICAgICMgaXQgaW4gdGhlIHR1cGxlcyB3aGljaCBhcmUgcmV0dXJuZWQuIFNlZSBDaGVja2VyLmRvcGFnZSgpLgotICAgICAgICAgICAgZnJhZ21lbnQgPSB0Wy0xXQotICAgICAgICAgICAgdCA9IHRbOi0xXSArICgnJywpCi0gICAgICAgICAgICByYXdsaW5rID0gdXJscGFyc2UudXJsdW5wYXJzZSh0KQotICAgICAgICAgICAgbGluayA9IHVybHBhcnNlLnVybGpvaW4oYmFzZSwgcmF3bGluaykKLSAgICAgICAgICAgIGluZm9zLmFwcGVuZCgobGluaywgcmF3bGluaywgZnJhZ21lbnQpKQotCi0gICAgICAgIHJldHVybiBpbmZvcwotCi0KLWNsYXNzIE15U3RyaW5nSU8oaW8uU3RyaW5nSU8pOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgaW5mbyk6Ci0gICAgICAgIHNlbGYuX191cmwgPSB1cmwKLSAgICAgICAgc2VsZi5fX2luZm8gPSBpbmZvCi0gICAgICAgIHN1cGVyKE15U3RyaW5nSU8sIHNlbGYpLl9faW5pdF9fKHNlbGYpCi0KLSAgICBkZWYgaW5mbyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX19pbmZvCi0KLSAgICBkZWYgZ2V0dXJsKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fX3VybAotCi0KLWNsYXNzIE15VVJMb3BlbmVyKHVybGxpYi5yZXF1ZXN0LkZhbmN5VVJMb3BlbmVyKToKLQotICAgIGh0dHBfZXJyb3JfZGVmYXVsdCA9IHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5odHRwX2Vycm9yX2RlZmF1bHQKLQotICAgIGRlZiBfX2luaXRfXygqYXJncyk6Ci0gICAgICAgIHNlbGYgPSBhcmdzWzBdCi0gICAgICAgIHVybGxpYi5yZXF1ZXN0LkZhbmN5VVJMb3BlbmVyLl9faW5pdF9fKCphcmdzKQotICAgICAgICBzZWxmLmFkZGhlYWRlcnMgPSBbCi0gICAgICAgICAgICAoJ1VzZXItYWdlbnQnLCAnUHl0aG9uLXdlYmNoZWNrZXIvJXMnICUgX192ZXJzaW9uX18pLAotICAgICAgICAgICAgXQotCi0gICAgZGVmIGh0dHBfZXJyb3JfNDAxKHNlbGYsIHVybCwgZnAsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycyk6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgb3Blbl9maWxlKHNlbGYsIHVybCk6Ci0gICAgICAgIHBhdGggPSB1cmxsaWIudXJsMnBhdGhuYW1lKHVybGxpYi51bnF1b3RlKHVybCkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICBpZiBwYXRoWy0xXSAhPSBvcy5zZXA6Ci0gICAgICAgICAgICAgICAgdXJsID0gdXJsICsgJy8nCi0gICAgICAgICAgICBpbmRleHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgImluZGV4Lmh0bWwiKQotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoaW5kZXhwYXRoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcGVuX2ZpbGUodXJsICsgImluZGV4Lmh0bWwiKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihwYXRoKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IobXNnKS53aXRoX3RyYWNlYmFjayhleGNfdGIpCi0gICAgICAgICAgICBuYW1lcy5zb3J0KCkKLSAgICAgICAgICAgIHMgPSBNeVN0cmluZ0lPKCJmaWxlOiIrdXJsLCB7J2NvbnRlbnQtdHlwZSc6ICd0ZXh0L2h0bWwnfSkKLSAgICAgICAgICAgIHMud3JpdGUoJzxCQVNFIEhSRUY9ImZpbGU6JXMiPlxuJyAlCi0gICAgICAgICAgICAgICAgICAgIHVybGxpYi5xdW90ZShvcy5wYXRoLmpvaW4ocGF0aCwgIiIpKSkKLSAgICAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgotICAgICAgICAgICAgICAgIHEgPSB1cmxsaWIucXVvdGUobmFtZSkKLSAgICAgICAgICAgICAgICBzLndyaXRlKCc8QSBIUkVGPSIlcyI+JXM8L0E+XG4nICUgKHEsIHEpKQotICAgICAgICAgICAgcy5zZWVrKDApCi0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICByZXR1cm4gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIub3Blbl9maWxlKHNlbGYsIHVybCkKLQotCi1jbGFzcyBNeUhUTUxQYXJzZXIoc2dtbGxpYi5TR01MUGFyc2VyKToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB1cmwsIHZlcmJvc2U9VkVSQk9TRSwgY2hlY2tlcj1Ob25lKToKLSAgICAgICAgc2VsZi5teXZlcmJvc2UgPSB2ZXJib3NlICMgbm93IHVudXNlZAotICAgICAgICBzZWxmLmNoZWNrZXIgPSBjaGVja2VyCi0gICAgICAgIHNlbGYuYmFzZSA9IE5vbmUKLSAgICAgICAgc2VsZi5saW5rcyA9IHt9Ci0gICAgICAgIHNlbGYubmFtZXMgPSBbXQotICAgICAgICBzZWxmLnVybCA9IHVybAotICAgICAgICBzZ21sbGliLlNHTUxQYXJzZXIuX19pbml0X18oc2VsZikKLQotICAgIGRlZiBjaGVja19uYW1lX2lkKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICAiIiIgQ2hlY2sgdGhlIG5hbWUgb3IgaWQgYXR0cmlidXRlcyBvbiBhbiBlbGVtZW50LgotICAgICAgICAiIiIKLSAgICAgICAgIyBXZSBtdXN0IHJlc2N1ZSB0aGUgTkFNRSBvciBpZCAobmFtZSBpcyBkZXByZWNhdGVkIGluIFhIVE1MKQotICAgICAgICAjIGF0dHJpYnV0ZXMgZnJvbSB0aGUgYW5jaG9yLCBpbiBvcmRlciB0bwotICAgICAgICAjIGNhY2hlIHRoZSBpbnRlcm5hbCBhbmNob3JzIHdoaWNoIGFyZSBtYWRlCi0gICAgICAgICMgYXZhaWxhYmxlIGluIHRoZSBwYWdlLgotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlczoKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gIm5hbWUiIG9yIG5hbWUgPT0gImlkIjoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmLm5hbWVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXIubWVzc2FnZSgiV0FSTklORzogZHVwbGljYXRlIElEIG5hbWUgJXMgaW4gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgc2VsZi51cmwpCi0gICAgICAgICAgICAgICAgZWxzZTogc2VsZi5uYW1lcy5hcHBlbmQodmFsdWUpCi0gICAgICAgICAgICAgICAgYnJlYWsKLQotICAgIGRlZiB1bmtub3duX3N0YXJ0dGFnKHNlbGYsIHRhZywgYXR0cmlidXRlcyk6Ci0gICAgICAgICIiIiBJbiBYSFRNTCwgeW91IGNhbiBoYXZlIGlkIGF0dHJpYnV0ZXMgb24gYW55IGVsZW1lbnQuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmNoZWNrX25hbWVfaWQoYXR0cmlidXRlcykKLQotICAgIGRlZiBzdGFydF9hKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnaHJlZicpCi0gICAgICAgIHNlbGYuY2hlY2tfbmFtZV9pZChhdHRyaWJ1dGVzKQotCi0gICAgZGVmIGVuZF9hKHNlbGYpOiBwYXNzCi0KLSAgICBkZWYgZG9fYXJlYShzZWxmLCBhdHRyaWJ1dGVzKToKLSAgICAgICAgc2VsZi5saW5rX2F0dHIoYXR0cmlidXRlcywgJ2hyZWYnKQotICAgICAgICBzZWxmLmNoZWNrX25hbWVfaWQoYXR0cmlidXRlcykKLQotICAgIGRlZiBkb19ib2R5KHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnYmFja2dyb3VuZCcsICdiZ3NvdW5kJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9faW1nKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnc3JjJywgJ2xvd3NyYycpCi0gICAgICAgIHNlbGYuY2hlY2tfbmFtZV9pZChhdHRyaWJ1dGVzKQotCi0gICAgZGVmIGRvX2ZyYW1lKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnc3JjJywgJ2xvbmdkZXNjJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9faWZyYW1lKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnc3JjJywgJ2xvbmdkZXNjJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fbGluayhzZWxmLCBhdHRyaWJ1dGVzKToKLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGF0dHJpYnV0ZXM6Ci0gICAgICAgICAgICBpZiBuYW1lID09ICJyZWwiOgotICAgICAgICAgICAgICAgIHBhcnRzID0gdmFsdWUubG93ZXIoKS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgaWYgKCAgcGFydHMgPT0gWyJzdHlsZXNoZWV0Il0KLSAgICAgICAgICAgICAgICAgICAgICBvciBwYXJ0cyA9PSBbImFsdGVybmF0ZSIsICJzdHlsZXNoZWV0Il0pOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAiaHJlZiIpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHNlbGYuY2hlY2tfbmFtZV9pZChhdHRyaWJ1dGVzKQotCi0gICAgZGVmIGRvX29iamVjdChzZWxmLCBhdHRyaWJ1dGVzKToKLSAgICAgICAgc2VsZi5saW5rX2F0dHIoYXR0cmlidXRlcywgJ2RhdGEnLCAndXNlbWFwJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fc2NyaXB0KHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBzZWxmLmxpbmtfYXR0cihhdHRyaWJ1dGVzLCAnc3JjJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fdGFibGUoc2VsZiwgYXR0cmlidXRlcyk6Ci0gICAgICAgIHNlbGYubGlua19hdHRyKGF0dHJpYnV0ZXMsICdiYWNrZ3JvdW5kJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fdGQoc2VsZiwgYXR0cmlidXRlcyk6Ci0gICAgICAgIHNlbGYubGlua19hdHRyKGF0dHJpYnV0ZXMsICdiYWNrZ3JvdW5kJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fdGgoc2VsZiwgYXR0cmlidXRlcyk6Ci0gICAgICAgIHNlbGYubGlua19hdHRyKGF0dHJpYnV0ZXMsICdiYWNrZ3JvdW5kJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgZG9fdHIoc2VsZiwgYXR0cmlidXRlcyk6Ci0gICAgICAgIHNlbGYubGlua19hdHRyKGF0dHJpYnV0ZXMsICdiYWNrZ3JvdW5kJykKLSAgICAgICAgc2VsZi5jaGVja19uYW1lX2lkKGF0dHJpYnV0ZXMpCi0KLSAgICBkZWYgbGlua19hdHRyKHNlbGYsIGF0dHJpYnV0ZXMsICphcmdzKToKLSAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIGF0dHJpYnV0ZXM6Ci0gICAgICAgICAgICBpZiBuYW1lIGluIGFyZ3M6Ci0gICAgICAgICAgICAgICAgaWYgdmFsdWU6IHZhbHVlID0gdmFsdWUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGlmIHZhbHVlOiBzZWxmLmxpbmtzW3ZhbHVlXSA9IE5vbmUKLQotICAgIGRlZiBkb19iYXNlKHNlbGYsIGF0dHJpYnV0ZXMpOgotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gYXR0cmlidXRlczoKLSAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hyZWYnOgotICAgICAgICAgICAgICAgIGlmIHZhbHVlOiB2YWx1ZSA9IHZhbHVlLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jaGVja2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VyLm5vdGUoMSwgIiAgQmFzZSAlcyIsIHZhbHVlKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmJhc2UgPSB2YWx1ZQotICAgICAgICBzZWxmLmNoZWNrX25hbWVfaWQoYXR0cmlidXRlcykKLQotICAgIGRlZiBnZXRsaW5rcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5saW5rcy5rZXlzKCkpCi0KLSAgICBkZWYgZ2V0YmFzZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYmFzZQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy93ZWJjaGVja2VyL3dlYnN1Y2tlci5weSBiL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzYmJkZWMzLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvd2Vic3Vja2VyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIiQSB2YXJpYW50IG9uIHdlYmNoZWNrZXIgdGhhdCBjcmVhdGVzIGEgbWlycm9yIGNvcHkgb2YgYSByZW1vdGUgc2l0ZS4iIiIKLQotX192ZXJzaW9uX18gPSAiJFJldmlzaW9uJCIKLQotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgdXJsbGliLnBhcnNlCi0KLWltcG9ydCB3ZWJjaGVja2VyCi0KLSMgRXh0cmFjdCByZWFsIHZlcnNpb24gbnVtYmVyIGlmIG5lY2Vzc2FyeQotaWYgX192ZXJzaW9uX19bMF0gPT0gJyQnOgotICAgIF92ID0gX192ZXJzaW9uX18uc3BsaXQoKQotICAgIGlmIGxlbihfdikgPT0gMzoKLSAgICAgICAgX192ZXJzaW9uX18gPSBfdlsxXQotCi1kZWYgbWFpbigpOgotICAgIHZlcmJvc2UgPSB3ZWJjaGVja2VyLlZFUkJPU0UKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInF2IikKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludCgidXNhZ2U6Iiwgc3lzLmFyZ3ZbMF0sICJbLXF2XSAuLi4gW3Jvb3R1cmxdIC4uLiIpCi0gICAgICAgIHJldHVybiAyCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyA9PSAiLXEiOgotICAgICAgICAgICAgdmVyYm9zZSA9IDAKLSAgICAgICAgaWYgbyA9PSAiLXYiOgotICAgICAgICAgICAgdmVyYm9zZSA9IHZlcmJvc2UgKyAxCi0gICAgYyA9IFN1Y2tlcigpCi0gICAgYy5zZXRmbGFncyh2ZXJib3NlPXZlcmJvc2UpCi0gICAgYy51cmxvcGVuZXIuYWRkaGVhZGVycyA9IFsKLSAgICAgICAgICAgICgnVXNlci1hZ2VudCcsICd3ZWJzdWNrZXIvJXMnICUgX192ZXJzaW9uX18pLAotICAgICAgICBdCi0gICAgZm9yIGFyZyBpbiBhcmdzOgotICAgICAgICBwcmludCgiQWRkaW5nIHJvb3QiLCBhcmcpCi0gICAgICAgIGMuYWRkcm9vdChhcmcpCi0gICAgcHJpbnQoIlJ1bi4uLiIpCi0gICAgYy5ydW4oKQotCi1jbGFzcyBTdWNrZXIod2ViY2hlY2tlci5DaGVja2VyKToKLQotICAgIGNoZWNrZXh0ID0gMAotICAgIG5vbmFtZXMgPSAxCi0KLSAgICAjIFNBTSAxMS8xMy85OTogaW4gZ2VuZXJhbCwgVVJMcyBhcmUgbm93IFVSTCBwYWlycy4KLSAgICAjIFNpbmNlIHdlJ3ZlIHN1cHByZXNzZWQgbmFtZSBhbmNob3IgY2hlY2tpbmcsCi0gICAgIyB3ZSBjYW4gaWdub3JlIHRoZSBzZWNvbmQgZGltZW5zaW9uLgotCi0gICAgZGVmIHJlYWRodG1sKHNlbGYsIHVybF9wYWlyKToKLSAgICAgICAgdXJsID0gdXJsX3BhaXJbMF0KLSAgICAgICAgdGV4dCA9IE5vbmUKLSAgICAgICAgcGF0aCA9IHNlbGYuc2F2ZWZpbGVuYW1lKHVybCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBmID0gc2VsZi5vcGVucGFnZSh1cmxfcGFpcikKLSAgICAgICAgICAgIGlmIGY6Ci0gICAgICAgICAgICAgICAgaW5mbyA9IGYuaW5mbygpCi0gICAgICAgICAgICAgICAgbnVybCA9IGYuZ2V0dXJsKCkKLSAgICAgICAgICAgICAgICBpZiBudXJsICE9IHVybDoKLSAgICAgICAgICAgICAgICAgICAgdXJsID0gbnVybAotICAgICAgICAgICAgICAgICAgICBwYXRoID0gc2VsZi5zYXZlZmlsZW5hbWUodXJsKQotICAgICAgICAgICAgICAgIHRleHQgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuc2F2ZWZpbGUodGV4dCwgcGF0aCkKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5jaGVja2Zvcmh0bWwoaW5mbywgdXJsKToKLSAgICAgICAgICAgICAgICAgICAgdGV4dCA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHNlbGYuY2hlY2tmb3JodG1sKHt9LCB1cmwpOgotICAgICAgICAgICAgICAgIHRleHQgPSBmLnJlYWQoKQotICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgIHJldHVybiB0ZXh0LCB1cmwKLQotICAgIGRlZiBzYXZlZmlsZShzZWxmLCB0ZXh0LCBwYXRoKToKLSAgICAgICAgZGlyLCBiYXNlID0gb3MucGF0aC5zcGxpdChwYXRoKQotICAgICAgICBtYWtlZGlycyhkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICJ3YiIpCi0gICAgICAgICAgICBmLndyaXRlKHRleHQpCi0gICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYubWVzc2FnZSgic2F2ZWQgJXMiLCBwYXRoKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICBzZWxmLm1lc3NhZ2UoImRpZG4ndCBzYXZlICVzOiAlcyIsIHBhdGgsIHN0cihtc2cpKQotCi0gICAgZGVmIHNhdmVmaWxlbmFtZShzZWxmLCB1cmwpOgotICAgICAgICB0eXBlLCByZXN0ID0gdXJsbGliLnBhcnNlLnNwbGl0dHlwZSh1cmwpCi0gICAgICAgIGhvc3QsIHBhdGggPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0KHJlc3QpCi0gICAgICAgIHBhdGggPSBwYXRoLmxzdHJpcCgiLyIpCi0gICAgICAgIHVzZXIsIGhvc3QgPSB1cmxsaWIucGFyc2Uuc3BsaXR1c2VyKGhvc3QpCi0gICAgICAgIGhvc3QsIHBvcnQgPSB1cmxsaWIucGFyc2Uuc3BsaXRucG9ydChob3N0KQotICAgICAgICBob3N0ID0gaG9zdC5sb3dlcigpCi0gICAgICAgIGlmIG5vdCBwYXRoIG9yIHBhdGhbLTFdID09ICIvIjoKLSAgICAgICAgICAgIHBhdGggPSBwYXRoICsgImluZGV4Lmh0bWwiCi0gICAgICAgIGlmIG9zLnNlcCAhPSAiLyI6Ci0gICAgICAgICAgICBwYXRoID0gb3Muc2VwLmpvaW4ocGF0aC5zcGxpdCgiLyIpKQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAibWFjIjoKLSAgICAgICAgICAgICAgICBwYXRoID0gb3Muc2VwICsgcGF0aAotICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGhvc3QsIHBhdGgpCi0gICAgICAgIHJldHVybiBwYXRoCi0KLWRlZiBtYWtlZGlycyhkaXIpOgotICAgIGlmIG5vdCBkaXI6Ci0gICAgICAgIHJldHVybgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MucmVuYW1lKGRpciwgZGlyICsgIi5iYWsiKQotICAgICAgICAgICAgICAgIG9zLm1rZGlyKGRpcikKLSAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZGlyICsgIi5iYWsiLCBvcy5wYXRoLmpvaW4oZGlyLCAiaW5kZXguaHRtbCIpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgcmV0dXJuCi0gICAgaGVhZCwgdGFpbCA9IG9zLnBhdGguc3BsaXQoZGlyKQotICAgIGlmIG5vdCB0YWlsOgotICAgICAgICBwcmludCgiSHVoPyAgRG9uJ3Qga25vdyBob3cgdG8gbWFrZSBkaXIiLCBkaXIpCi0gICAgICAgIHJldHVybgotICAgIG1ha2VkaXJzKGhlYWQpCi0gICAgb3MubWtkaXIoZGlyLCAwbzc3NykKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBzeXMuZXhpdChtYWluKCkgb3IgMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3dlYmNoZWNrZXIvd3NndWkucHkgYi9Ub29scy93ZWJjaGVja2VyL3dzZ3VpLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBiMjIyM2M0Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL3dlYmNoZWNrZXIvd3NndWkucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotIyEgL3Vzci9iaW4vZW52IHB5dGhvbgotCi0iIiJUa2ludGVyLWJhc2VkIEdVSSBmb3Igd2Vic3Vja2VyLgotCi1FYXN5IHVzZTogdHlwZSBvciBwYXN0ZSBzb3VyY2UgVVJMIGFuZCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgaW4KLXRoZWlyIHJlc3BlY3RpdmUgdGV4dCBib3hlcywgY2xpY2sgR08gb3IgaGl0IHJldHVybiwgYW5kIHByZXN0by4KLSIiIgotCi1mcm9tIFRraW50ZXIgaW1wb3J0ICoKLWltcG9ydCB3ZWJzdWNrZXIKLWltcG9ydCBvcwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHF1ZXVlCi1pbXBvcnQgdGltZQotCi1WRVJCT1NFID0gMgotCi0KLXRyeToKLSAgICBjbGFzcyBDYW5jZWxlZChFeGNlcHRpb24pOgotICAgICAgICAiRXhjZXB0aW9uIHVzZWQgdG8gY2FuY2VsIHJ1bigpLiIKLWV4Y2VwdCAoTmFtZUVycm9yLCBUeXBlRXJyb3IpOgotICAgIENhbmNlbGVkID0gX19uYW1lX18gKyAiLkNhbmNlbGVkIgotCi0KLWNsYXNzIFN1Y2tlclRocmVhZCh3ZWJzdWNrZXIuU3Vja2VyKToKLQotICAgIHN0b3BpdCA9IDAKLSAgICBzYXZlZGlyID0gTm9uZQotICAgIHJvb3RkaXIgPSBOb25lCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgbXNncSk6Ci0gICAgICAgIHNlbGYubXNncSA9IG1zZ3EKLSAgICAgICAgd2Vic3Vja2VyLlN1Y2tlci5fX2luaXRfXyhzZWxmKQotICAgICAgICBzZWxmLnNldGZsYWdzKHZlcmJvc2U9VkVSQk9TRSkKLSAgICAgICAgc2VsZi51cmxvcGVuZXIuYWRkaGVhZGVycyA9IFsKLSAgICAgICAgICAgICgnVXNlci1hZ2VudCcsICd3ZWJzdWNrZXIvJXMnICUgd2Vic3Vja2VyLl9fdmVyc2lvbl9fKSwKLSAgICAgICAgXQotCi0gICAgZGVmIG1lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQlYXJncwotICAgICAgICAjI3ByaW50IGZvcm1hdAotICAgICAgICBzZWxmLm1zZ3EucHV0KGZvcm1hdCkKLQotICAgIGRlZiBydW4xKHNlbGYsIHVybCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLnJlc2V0KCkKLSAgICAgICAgICAgICAgICBzZWxmLmFkZHJvb3QodXJsKQotICAgICAgICAgICAgICAgIHNlbGYucnVuKCkKLSAgICAgICAgICAgIGV4Y2VwdCBDYW5jZWxlZDoKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIltjYW5jZWxlZF0iKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UoIltkb25lXSIpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLm1zZ3EucHV0KE5vbmUpCi0KLSAgICBkZWYgc2F2ZWZpbGUoc2VsZiwgdGV4dCwgcGF0aCk6Ci0gICAgICAgIGlmIHNlbGYuc3RvcGl0OgotICAgICAgICAgICAgcmFpc2UgQ2FuY2VsZWQKLSAgICAgICAgd2Vic3Vja2VyLlN1Y2tlci5zYXZlZmlsZShzZWxmLCB0ZXh0LCBwYXRoKQotCi0gICAgZGVmIGdldHBhZ2Uoc2VsZiwgdXJsKToKLSAgICAgICAgaWYgc2VsZi5zdG9waXQ6Ci0gICAgICAgICAgICByYWlzZSBDYW5jZWxlZAotICAgICAgICByZXR1cm4gd2Vic3Vja2VyLlN1Y2tlci5nZXRwYWdlKHNlbGYsIHVybCkKLQotICAgIGRlZiBzYXZlZmlsZW5hbWUoc2VsZiwgdXJsKToKLSAgICAgICAgcGF0aCA9IHdlYnN1Y2tlci5TdWNrZXIuc2F2ZWZpbGVuYW1lKHNlbGYsIHVybCkKLSAgICAgICAgaWYgc2VsZi5zYXZlZGlyOgotICAgICAgICAgICAgbiA9IGxlbihzZWxmLnJvb3RkaXIpCi0gICAgICAgICAgICBpZiBwYXRoWzpuXSA9PSBzZWxmLnJvb3RkaXI6Ci0gICAgICAgICAgICAgICAgcGF0aCA9IHBhdGhbbjpdCi0gICAgICAgICAgICAgICAgd2hpbGUgcGF0aFs6MV0gPT0gb3Muc2VwOgotICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aFsxOl0KLSAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHNlbGYuc2F2ZWRpciwgcGF0aCkKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBYWFhhZGRyb2JvdChzZWxmLCAqYXJncyk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiBYWFhpc2FsbG93ZWQoc2VsZiwgKmFyZ3MpOgotICAgICAgICByZXR1cm4gMQotCi0KLWNsYXNzIEFwcDoKLQotICAgIHN1Y2tlciA9IE5vbmUKLSAgICBtc2dxID0gTm9uZQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHRvcCk6Ci0gICAgICAgIHNlbGYudG9wID0gdG9wCi0gICAgICAgIHRvcC5jb2x1bW5jb25maWd1cmUoOTksIHdlaWdodD0xKQotICAgICAgICBzZWxmLnVybF9sYWJlbCA9IExhYmVsKHRvcCwgdGV4dD0iVVJMOiIpCi0gICAgICAgIHNlbGYudXJsX2xhYmVsLmdyaWQocm93PTAsIGNvbHVtbj0wLCBzdGlja3k9J2UnKQotICAgICAgICBzZWxmLnVybF9lbnRyeSA9IEVudHJ5KHRvcCwgd2lkdGg9NjAsIGV4cG9ydHNlbGVjdGlvbj0wKQotICAgICAgICBzZWxmLnVybF9lbnRyeS5ncmlkKHJvdz0wLCBjb2x1bW49MSwgc3RpY2t5PSd3ZScsCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNwYW49OTkpCi0gICAgICAgIHNlbGYudXJsX2VudHJ5LmZvY3VzX3NldCgpCi0gICAgICAgIHNlbGYudXJsX2VudHJ5LmJpbmQoIjxLZXktUmV0dXJuPiIsIHNlbGYuZ28pCi0gICAgICAgIHNlbGYuZGlyX2xhYmVsID0gTGFiZWwodG9wLCB0ZXh0PSJEaXJlY3Rvcnk6IikKLSAgICAgICAgc2VsZi5kaXJfbGFiZWwuZ3JpZChyb3c9MSwgY29sdW1uPTAsIHN0aWNreT0nZScpCi0gICAgICAgIHNlbGYuZGlyX2VudHJ5ID0gRW50cnkodG9wKQotICAgICAgICBzZWxmLmRpcl9lbnRyeS5ncmlkKHJvdz0xLCBjb2x1bW49MSwgc3RpY2t5PSd3ZScsCi0gICAgICAgICAgICAgICAgICAgIGNvbHVtbnNwYW49OTkpCi0gICAgICAgIHNlbGYuZ29fYnV0dG9uID0gQnV0dG9uKHRvcCwgdGV4dD0iR28iLCBjb21tYW5kPXNlbGYuZ28pCi0gICAgICAgIHNlbGYuZ29fYnV0dG9uLmdyaWQocm93PTIsIGNvbHVtbj0xLCBzdGlja3k9J3cnKQotICAgICAgICBzZWxmLmNhbmNlbF9idXR0b24gPSBCdXR0b24odG9wLCB0ZXh0PSJDYW5jZWwiLAotICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmNhbmNlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlPURJU0FCTEVEKQotICAgICAgICBzZWxmLmNhbmNlbF9idXR0b24uZ3JpZChyb3c9MiwgY29sdW1uPTIsIHN0aWNreT0ndycpCi0gICAgICAgIHNlbGYuYXV0b19idXR0b24gPSBCdXR0b24odG9wLCB0ZXh0PSJQYXN0ZStHbyIsCi0gICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLmF1dG8pCi0gICAgICAgIHNlbGYuYXV0b19idXR0b24uZ3JpZChyb3c9MiwgY29sdW1uPTMsIHN0aWNreT0ndycpCi0gICAgICAgIHNlbGYuc3RhdHVzX2xhYmVsID0gTGFiZWwodG9wLCB0ZXh0PSJbaWRsZV0iKQotICAgICAgICBzZWxmLnN0YXR1c19sYWJlbC5ncmlkKHJvdz0yLCBjb2x1bW49NCwgc3RpY2t5PSd3JykKLSAgICAgICAgc2VsZi50b3AudXBkYXRlX2lkbGV0YXNrcygpCi0gICAgICAgIHNlbGYudG9wLmdyaWRfcHJvcGFnYXRlKDApCi0KLSAgICBkZWYgbWVzc2FnZShzZWxmLCB0ZXh0LCAqYXJncyk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICB0ZXh0ID0gdGV4dCAlIGFyZ3MKLSAgICAgICAgc2VsZi5zdGF0dXNfbGFiZWwuY29uZmlnKHRleHQ9dGV4dCkKLQotICAgIGRlZiBjaGVja19tc2dxKHNlbGYpOgotICAgICAgICB3aGlsZSBub3Qgc2VsZi5tc2dxLmVtcHR5KCk6Ci0gICAgICAgICAgICBtc2cgPSBzZWxmLm1zZ3EuZ2V0KCkKLSAgICAgICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuZ29fYnV0dG9uLmNvbmZpZ3VyZShzdGF0ZT1OT1JNQUwpCi0gICAgICAgICAgICAgICAgc2VsZi5hdXRvX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9Tk9STUFMKQotICAgICAgICAgICAgICAgIHNlbGYuY2FuY2VsX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdWNrZXI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc3Vja2VyLnN0b3BpdCA9IDAKLSAgICAgICAgICAgICAgICBzZWxmLnRvcC5iZWxsKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlKG1zZykKLSAgICAgICAgc2VsZi50b3AuYWZ0ZXIoMTAwLCBzZWxmLmNoZWNrX21zZ3EpCi0KLSAgICBkZWYgZ28oc2VsZiwgZXZlbnQ9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBzZWxmLm1zZ3E6Ci0gICAgICAgICAgICBzZWxmLm1zZ3EgPSBxdWV1ZS5RdWV1ZSgwKQotICAgICAgICAgICAgc2VsZi5jaGVja19tc2dxKCkKLSAgICAgICAgaWYgbm90IHNlbGYuc3Vja2VyOgotICAgICAgICAgICAgc2VsZi5zdWNrZXIgPSBTdWNrZXJUaHJlYWQoc2VsZi5tc2dxKQotICAgICAgICBpZiBzZWxmLnN1Y2tlci5zdG9waXQ6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi51cmxfZW50cnkuc2VsZWN0aW9uX3JhbmdlKDAsIEVORCkKLSAgICAgICAgdXJsID0gc2VsZi51cmxfZW50cnkuZ2V0KCkKLSAgICAgICAgdXJsID0gdXJsLnN0cmlwKCkKLSAgICAgICAgaWYgbm90IHVybDoKLSAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJbRXJyb3I6IE5vIFVSTCBlbnRlcmVkXSIpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgc2VsZi5yb290dXJsID0gdXJsCi0gICAgICAgIGRpciA9IHNlbGYuZGlyX2VudHJ5LmdldCgpLnN0cmlwKCkKLSAgICAgICAgaWYgbm90IGRpcjoKLSAgICAgICAgICAgIHNlbGYuc3Vja2VyLnNhdmVkaXIgPSBOb25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnN1Y2tlci5zYXZlZGlyID0gZGlyCi0gICAgICAgICAgICBzZWxmLnN1Y2tlci5yb290ZGlyID0gb3MucGF0aC5kaXJuYW1lKAotICAgICAgICAgICAgICAgIHdlYnN1Y2tlci5TdWNrZXIuc2F2ZWZpbGVuYW1lKHNlbGYuc3Vja2VyLCB1cmwpKQotICAgICAgICBzZWxmLmdvX2J1dHRvbi5jb25maWd1cmUoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgIHNlbGYuYXV0b19idXR0b24uY29uZmlndXJlKHN0YXRlPURJU0FCTEVEKQotICAgICAgICBzZWxmLmNhbmNlbF9idXR0b24uY29uZmlndXJlKHN0YXRlPU5PUk1BTCkKLSAgICAgICAgc2VsZi5tZXNzYWdlKCAnW3J1bm5pbmcuLi5dJykKLSAgICAgICAgc2VsZi5zdWNrZXIuc3RvcGl0ID0gMAotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5zdWNrZXIucnVuMSwgYXJncz0odXJsLCkpCi0gICAgICAgIHQuc3RhcnQoKQotCi0gICAgZGVmIGNhbmNlbChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5zdWNrZXI6Ci0gICAgICAgICAgICBzZWxmLnN1Y2tlci5zdG9waXQgPSAxCi0gICAgICAgIHNlbGYubWVzc2FnZSgiW2NhbmNlbGluZy4uLl0iKQotCi0gICAgZGVmIGF1dG8oc2VsZik6Ci0gICAgICAgIHRyaWVzID0gWydQUklNQVJZJywgJ0NMSVBCT0FSRCddCi0gICAgICAgIHRleHQgPSAiIgotICAgICAgICBmb3IgdCBpbiB0cmllczoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi50b3Auc2VsZWN0aW9uX2dldChzZWxlY3Rpb249dCkKLSAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvcjoKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgdGV4dCA9IHRleHQuc3RyaXAoKQotICAgICAgICAgICAgaWYgdGV4dDoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgdGV4dDoKLSAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQotICAgICAgICAgICAgc2VsZi5tZXNzYWdlKCJbRXJyb3I6IGNsaXBib2FyZCBpcyBlbXB0eV0iKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYudXJsX2VudHJ5LmRlbGV0ZSgwLCBFTkQpCi0gICAgICAgIHNlbGYudXJsX2VudHJ5Lmluc2VydCgwLCB0ZXh0KQotICAgICAgICBzZWxmLmdvKCkKLQotCi1jbGFzcyBBcHBBcnJheToKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3A9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCB0b3A6Ci0gICAgICAgICAgICB0b3AgPSBUaygpCi0gICAgICAgICAgICB0b3AudGl0bGUoIndlYnN1Y2tlciBHVUkiKQotICAgICAgICAgICAgdG9wLmljb25uYW1lKCJ3c2d1aSIpCi0gICAgICAgICAgICB0b3Aud21fcHJvdG9jb2woJ1dNX0RFTEVURV9XSU5ET1cnLCBzZWxmLmV4aXQpCi0gICAgICAgIHNlbGYudG9wID0gdG9wCi0gICAgICAgIHNlbGYuYXBwZnJhbWUgPSBGcmFtZShzZWxmLnRvcCkKLSAgICAgICAgc2VsZi5hcHBmcmFtZS5wYWNrKGZpbGw9J2JvdGgnKQotICAgICAgICBzZWxmLmFwcGxpc3QgPSBbXQotICAgICAgICBzZWxmLmV4aXRfYnV0dG9uID0gQnV0dG9uKHRvcCwgdGV4dD0iRXhpdCIsIGNvbW1hbmQ9c2VsZi5leGl0KQotICAgICAgICBzZWxmLmV4aXRfYnV0dG9uLnBhY2soc2lkZT1SSUdIVCkKLSAgICAgICAgc2VsZi5uZXdfYnV0dG9uID0gQnV0dG9uKHRvcCwgdGV4dD0iTmV3IiwgY29tbWFuZD1zZWxmLmFkZHN1Y2tlcikKLSAgICAgICAgc2VsZi5uZXdfYnV0dG9uLnBhY2soc2lkZT1MRUZUKQotICAgICAgICBzZWxmLmFkZHN1Y2tlcigpCi0gICAgICAgICMjc2VsZi5hcHBsaXN0WzBdLnVybF9lbnRyeS5pbnNlcnQoRU5ELCAiaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9lc3NheXMvIikKLQotICAgIGRlZiBhZGRzdWNrZXIoc2VsZik6Ci0gICAgICAgIHNlbGYudG9wLmdlb21ldHJ5KCIiKQotICAgICAgICBmcmFtZSA9IEZyYW1lKHNlbGYuYXBwZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUpCi0gICAgICAgIGZyYW1lLnBhY2soZmlsbD0neCcpCi0gICAgICAgIGFwcCA9IEFwcChmcmFtZSkKLSAgICAgICAgc2VsZi5hcHBsaXN0LmFwcGVuZChhcHApCi0KLSAgICBkb25lID0gMAotCi0gICAgZGVmIG1haW5sb29wKHNlbGYpOgotICAgICAgICB3aGlsZSBub3Qgc2VsZi5kb25lOgotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCi0gICAgICAgICAgICBzZWxmLnRvcC51cGRhdGUoKQotCi0gICAgZGVmIGV4aXQoc2VsZik6Ci0gICAgICAgIGZvciBhcHAgaW4gc2VsZi5hcHBsaXN0OgotICAgICAgICAgICAgYXBwLmNhbmNlbCgpCi0gICAgICAgICAgICBhcHAubWVzc2FnZSgiW2V4aXRpbmcuLi5dIikKLSAgICAgICAgc2VsZi5kb25lID0gMQotCi0KLWRlZiBtYWluKCk6Ci0gICAgQXBwQXJyYXkoKS5tYWlubG9vcCgpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy93b3JsZC9SRUFETUUgYi9Ub29scy93b3JsZC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YmI2MTAuLjAwMDAwMDAKLS0tIGEvVG9vbHMvd29ybGQvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotd29ybGQgLS0gUHJpbnQgbWFwcGluZ3MgYmV0d2VlbiBjb3VudHJ5IG5hbWVzIGFuZCBETlMgY291bnRyeSBjb2Rlcy4KLQotQ29udGFjdDogQmFycnkgV2Fyc2F3Ci1FbWFpbDogICBid2Fyc2F3QHB5dGhvbi5vcmcKLQotVGhpcyBzY3JpcHQgd2lsbCB0YWtlIGEgbGlzdCBvZiBJbnRlcm5ldCBhZGRyZXNzZXMgYW5kIHByaW50IG91dCB3aGVyZSBpbiB0aGUKLXdvcmxkIHRob3NlIGFkZHJlc3NlcyBvcmlnaW5hdGUgZnJvbSwgYmFzZWQgb24gdGhlIHRvcC1sZXZlbCBkb21haW4gY291bnRyeQotY29kZSBmb3VuZCBpbiB0aGUgYWRkcmVzcy4gIEFkZHJlc3NlcyBjYW4gYmUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0KLSAgICB4eCAgICAgICAgICAgICAgICAtLSBqdXN0IHRoZSBjb3VudHJ5IGNvZGUgb3IgdG9wLWxldmVsIGRvbWFpbiBpZGVudGlmaWVyCi0gICAgaG9zdC5kb21haW4ueHggICAgLS0gYW55IEludGVybmV0IGhvc3Qgb3IgbmV0d29yayBuYW1lCi0gICAgc29tZWJvZHlAd2hlcmUueHggLS0gYW4gSW50ZXJuZXQgZW1haWwgYWRkcmVzcwotCi1JZiBubyBtYXRjaCBpcyBmb3VuZCwgdGhlIGFkZHJlc3MgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gWypdCi1hbmQgYSByZXZlcnNlIGxvb2t1cCBpcyBhdHRlbXB0ZWQuICBUaGlzIHNjcmlwdCB3aWxsIHNlYXJjaCB0aGUgY291bnRyeSBuYW1lcwotYW5kIHByaW50IGEgbGlzdCBvZiBtYXRjaGluZyBlbnRyaWVzLiAgWW91IGNhbiBmb3JjZSByZXZlcnNlIG1hcHBpbmdzIHdpdGggdGhlCi1gLXInIGZsYWcgKHNlZSBiZWxvdykuCi0KLUZvciBleGFtcGxlOgotCi0gICAgJSUgd29ybGQgdHogdXMKLSAgICB0eiBvcmlnaW5hdGVkIGZyb20gVGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZgotICAgIHVzIG9yaWdpbmF0ZWQgZnJvbSBVbml0ZWQgU3RhdGVzCi0KLSAgICAlJSB3b3JsZCB1bml0ZWQKLSAgICB1bml0ZWQgbWF0Y2hlcyA2IGNvdW50cmllczoKLSAgICAgICAgYWU6IFVuaXRlZCBBcmFiIEVtaXJhdGVzCi0gICAgICAgIHVrOiBVbml0ZWQgS2luZ2RvbSAoY29tbW9uIHByYWN0aWNlKQotICAgICAgICB1bTogVW5pdGVkIFN0YXRlcyBNaW5vciBPdXRseWluZyBJc2xhbmRzCi0gICAgICAgIHVzOiBVbml0ZWQgU3RhdGVzCi0gICAgICAgIHR6OiBUYW56YW5pYSwgVW5pdGVkIFJlcHVibGljIG9mCi0gICAgICAgIGdiOiBVbml0ZWQgS2luZ2RvbQotCi0KLSBbKl0gTm90ZSB0aGF0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgbXVzdCBjb25mb3JtIHRvIFB5dGhvbiAxLjUncyByZS5weSBtb2R1bGUKLSBzeW50YXguICBUaGUgY29tcGFyaXNvbiBpcyBkb25lIHdpdGggdGhlIHNlYXJjaCgpIG1ldGhvZC4KLQotQ291bnRyeSBjb2RlcyBhcmUgbWFpbnRhaW5lZCBieSB0aGUgUklQRSBOZXR3b3JrIENvb3JkaW5hdGlvbiBDZW50cmUsCi1pbiBjb29yZGluYXRpb24gd2l0aCB0aGUgSVNPIDMxNjYgTWFpbnRlbmFuY2UgQWdlbmN5IGF0IERJTiBCZXJsaW4uICBUaGUKLWF1dGhvcml0YXRpdmUgc291cmNlIG9mIGNvdW5yeSBjb2RlIG1hcHBpbmdzIGlzOgotCi0gICAgPHVybDpmdHA6Ly9pbmZvLnJpcGUubmV0L2lzbzMxNjYtY291bnRyeWNvZGVzPgotCi1UaGUgbGF0ZXN0IGtub3duIGNoYW5nZSB0byB0aGlzIGluZm9ybWF0aW9uIHdhczoKLQotICAgIFRodSBBdWcgIDcgMTc6NTk6NTEgTUVUIERTVCAxOTk3Ci0KLVRoaXMgc2NyaXB0IGFsc28ga25vd3MgYWJvdXQgbm9uLWdlb2dyYXBoaWMgdG9wLWxldmVsIGRvbWFpbnMuCi0KLVVzYWdlOiB3b3JsZCBbLWRdIFstcCBmaWxlXSBbLW9dIFstaF0gYWRkciBbYWRkciAuLi5dCi0KLSAgICAtLWR1bXAKLSAgICAtZAotICAgICAgICBQcmludCBtYXBwaW5nIG9mIGFsbCB0b3AtbGV2ZWwgZG9tYWlucy4KLQotICAgIC0tcGFyc2UgZmlsZQotICAgIC1wIGZpbGUKLSAgICAgICAgUGFyc2UgYW4gaXNvMzE2Ni1jb3VudHJ5Y29kZXMgZmlsZSBleHRyYWN0aW5nIHRoZSB0d28gbGV0dGVyIGNvdW50cnkKLSAgICAgICAgY29kZSBmb2xsb3dlZCBieSB0aGUgY291bnRyeSBuYW1lLiAgTm90ZSB0aGF0IHRoZSB0aHJlZSBsZXR0ZXIgY291bnRyeQotICAgICAgICBjb2RlcyBhbmQgbnVtYmVycywgd2hpY2ggYXJlIGFsc28gcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGZvcm1hdAotICAgICAgICBmaWxlLCBhcmUgaWdub3JlZC4KLQotICAgIC0tb3V0cHV0ZGljdAotICAgIC1vCi0gICAgICAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgLXAnIG9wdGlvbiwgb3V0cHV0IGlzIGluIHRoZSBmb3JtCi0gICAgICAgIG9mIGEgUHl0aG9uIGRpY3Rpb25hcnksIGFuZCBjb3VudHJ5IG5hbWVzIGFyZSBub3JtYWxpemVkCi0gICAgICAgIHcuci50LiBjYXBpdGFsaXphdGlvbi4gIFRoaXMgbWFrZXMgaXQgYXBwcm9wcmlhdGUgZm9yIGN1dHRpbmcgYW5kCi0gICAgICAgIHBhc3RpbmcgYmFjayBpbnRvIHRoaXMgZmlsZS4KLQotICAgIC0tcmV2ZXJzZQotICAgIC1yCi0gICAgICAgIEZvcmNlIHJldmVyc2UgbG9va3VwLiAgSW4gdGhpcyBtb2RlIHRoZSBhZGRyZXNzIGNhbiBiZSBhbnkgUHl0aG9uCi0gICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbjsgdGhpcyBpcyBtYXRjaGVkIGFnYWluc3QgYWxsIGNvdW50cnkgbmFtZXMgYW5kIGEKLSAgICAgICAgbGlzdCBvZiBtYXRjaGluZyBtYXBwaW5ncyBpcyBwcmludGVkLiAgSW4gbm9ybWFsIG1vZGUgKGUuZy4gd2l0aG91dAotICAgICAgICB0aGlzIGZsYWcpLCByZXZlcnNlIGxvb2t1cCBpcyBwZXJmb3JtZWQgb24gYWRkcmVzc2VzIGlmIG5vIG1hdGNoaW5nCi0gICAgICAgIGNvdW50cnkgY29kZSBpcyBmb3VuZC4KLQotICAgIC1oCi0gICAgLS1oZWxwCi0gICAgICAgIFByaW50IHRoaXMgbWVzc2FnZS4KLQotDAotTG9jYWwgVmFyaWFibGVzOgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6CmRpZmYgLS1naXQgYS9Ub29scy93b3JsZC93b3JsZCBiL1Rvb2xzL3dvcmxkL3dvcmxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxNjQ1MmYzLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL3dvcmxkL3dvcmxkCisrKyAvZGV2L251bGwKQEAgLTEsNTY4ICswLDAgQEAKLSMhIC91c3IvYmluL2VudiBweXRob24KLQotIiIid29ybGQgLS0gUHJpbnQgbWFwcGluZ3MgYmV0d2VlbiBjb3VudHJ5IG5hbWVzIGFuZCBETlMgY291bnRyeSBjb2Rlcy4KLQotQ29udGFjdDogQmFycnkgV2Fyc2F3Ci1FbWFpbDogICBiYXJyeUBweXRob24ub3JnCi1WZXJzaW9uOiAlKF9fdmVyc2lvbl9fKXMKLQotVGhpcyBzY3JpcHQgd2lsbCB0YWtlIGEgbGlzdCBvZiBJbnRlcm5ldCBhZGRyZXNzZXMgYW5kIHByaW50IG91dCB3aGVyZSBpbiB0aGUKLXdvcmxkIHRob3NlIGFkZHJlc3NlcyBvcmlnaW5hdGUgZnJvbSwgYmFzZWQgb24gdGhlIHRvcC1sZXZlbCBkb21haW4gY291bnRyeQotY29kZSBmb3VuZCBpbiB0aGUgYWRkcmVzcy4gIEFkZHJlc3NlcyBjYW4gYmUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6Ci0KLSAgICB4eCAgICAgICAgICAgICAgICAtLSBqdXN0IHRoZSBjb3VudHJ5IGNvZGUgb3IgdG9wLWxldmVsIGRvbWFpbiBpZGVudGlmaWVyCi0gICAgaG9zdC5kb21haW4ueHggICAgLS0gYW55IEludGVybmV0IGhvc3Qgb3IgbmV0d29yayBuYW1lCi0gICAgc29tZWJvZHlAd2hlcmUueHggLS0gYW4gSW50ZXJuZXQgZW1haWwgYWRkcmVzcwotCi1JZiBubyBtYXRjaCBpcyBmb3VuZCwgdGhlIGFkZHJlc3MgaXMgaW50ZXJwcmV0ZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEKLXJldmVyc2UgbG9va3VwIGlzIGF0dGVtcHRlZC4gIFRoaXMgc2NyaXB0IHdpbGwgc2VhcmNoIHRoZSBjb3VudHJ5IG5hbWVzIGFuZAotcHJpbnQgYSBsaXN0IG9mIG1hdGNoaW5nIGVudHJpZXMuICBZb3UgY2FuIGZvcmNlIHJldmVyc2UgbWFwcGluZ3Mgd2l0aCB0aGUKLWAtcicgZmxhZyAoc2VlIGJlbG93KS4KLQotRm9yIGV4YW1wbGU6Ci0KLSAgICAlJSB3b3JsZCB0eiB1cwotICAgIHR6IG9yaWdpbmF0ZWQgZnJvbSBUYW56YW5pYSwgVW5pdGVkIFJlcHVibGljIG9mCi0gICAgdXMgb3JpZ2luYXRlZCBmcm9tIFVuaXRlZCBTdGF0ZXMKLQotICAgICUlIHdvcmxkIHVuaXRlZAotICAgIHVuaXRlZCBtYXRjaGVzIDYgY291bnRyaWVzOgotICAgICAgICBhZTogVW5pdGVkIEFyYWIgRW1pcmF0ZXMKLSAgICAgICAgdWs6IFVuaXRlZCBLaW5nZG9tIChjb21tb24gcHJhY3RpY2UpCi0gICAgICAgIHVtOiBVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMKLSAgICAgICAgdXM6IFVuaXRlZCBTdGF0ZXMKLSAgICAgICAgdHo6IFRhbnphbmlhLCBVbml0ZWQgUmVwdWJsaWMgb2YKLSAgICAgICAgZ2I6IFVuaXRlZCBLaW5nZG9tCi0KLUNvdW50cnkgY29kZXMgYXJlIG1haW50YWluZWQgYnkgdGhlIFJJUEUgTmV0d29yayBDb29yZGluYXRpb24gQ2VudHJlLAotaW4gY29vcmRpbmF0aW9uIHdpdGggdGhlIElTTyAzMTY2IE1haW50ZW5hbmNlIEFnZW5jeSBhdCBESU4gQmVybGluLiAgVGhlCi1hdXRob3JpdGF0aXZlIHNvdXJjZSBvZiBjb3VudHJ5IGNvZGUgbWFwcGluZ3MgaXM6Ci0KLSAgICA8dXJsOmZ0cDovL2Z0cC5yaXBlLm5ldC9pc28zMTY2LWNvdW50cnljb2Rlcy50eHQ+Ci0KLVRoZSBsYXRlc3Qga25vd24gY2hhbmdlIHRvIHRoaXMgaW5mb3JtYXRpb24gd2FzOgotCi0gICAgTW9uZGF5LCAxMCBPY3RvYmVyIDIwMDYsIDE3OjU5OjUxIFVUQyAyMDA2Ci0KLVRoaXMgc2NyaXB0IGFsc28ga25vd3MgYWJvdXQgbm9uLWdlb2dyYXBoaWMgdG9wLWxldmVsIGRvbWFpbnMsIGFuZCB0aGUKLWFkZGl0aW9uYWwgY2NUTERzIHJlc2VydmVkIGJ5IElBTkEuCi0KLVVzYWdlOiAlKFBST0dSQU0pcyBbLWRdIFstcCBmaWxlXSBbLW9dIFstaF0gYWRkciBbYWRkciAuLi5dCi0KLSAgICAtLWR1bXAKLSAgICAtZAotICAgICAgICBQcmludCBtYXBwaW5nIG9mIGFsbCB0b3AtbGV2ZWwgZG9tYWlucy4KLQotICAgIC0tcGFyc2UgZmlsZQotICAgIC1wIGZpbGUKLSAgICAgICAgUGFyc2UgYW4gaXNvMzE2Ni1jb3VudHJ5Y29kZXMgZmlsZSBleHRyYWN0aW5nIHRoZSB0d28gbGV0dGVyIGNvdW50cnkKLSAgICAgICAgY29kZSBmb2xsb3dlZCBieSB0aGUgY291bnRyeSBuYW1lLiAgTm90ZSB0aGF0IHRoZSB0aHJlZSBsZXR0ZXIgY291bnRyeQotICAgICAgICBjb2RlcyBhbmQgbnVtYmVycywgd2hpY2ggYXJlIGFsc28gcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGZvcm1hdAotICAgICAgICBmaWxlLCBhcmUgaWdub3JlZC4KLQotICAgIC0tb3V0cHV0ZGljdAotICAgIC1vCi0gICAgICAgIFdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBgLXAnIG9wdGlvbiwgb3V0cHV0IGlzIGluIHRoZSBmb3JtCi0gICAgICAgIG9mIGEgUHl0aG9uIGRpY3Rpb25hcnksIGFuZCBjb3VudHJ5IG5hbWVzIGFyZSBub3JtYWxpemVkCi0gICAgICAgIHcuci50LiBjYXBpdGFsaXphdGlvbi4gIFRoaXMgbWFrZXMgaXQgYXBwcm9wcmlhdGUgZm9yIGN1dHRpbmcgYW5kCi0gICAgICAgIHBhc3RpbmcgYmFjayBpbnRvIHRoaXMgZmlsZS4gIE91dHB1dCBpcyBhbHdheXMgdG8gc3RhbmRhcmQgb3V0LgotCi0gICAgLS1yZXZlcnNlCi0gICAgLXIKLSAgICAgICAgRm9yY2UgcmV2ZXJzZSBsb29rdXAuICBJbiB0aGlzIG1vZGUgdGhlIGFkZHJlc3MgY2FuIGJlIGFueSBQeXRob24KLSAgICAgICAgcmVndWxhciBleHByZXNzaW9uOyB0aGlzIGlzIG1hdGNoZWQgYWdhaW5zdCBhbGwgY291bnRyeSBuYW1lcyBhbmQgYQotICAgICAgICBsaXN0IG9mIG1hdGNoaW5nIG1hcHBpbmdzIGlzIHByaW50ZWQuICBJbiBub3JtYWwgbW9kZSAoZS5nLiB3aXRob3V0Ci0gICAgICAgIHRoaXMgZmxhZyksIHJldmVyc2UgbG9va3VwIGlzIHBlcmZvcm1lZCBvbiBhZGRyZXNzZXMgaWYgbm8gbWF0Y2hpbmcKLSAgICAgICAgY291bnRyeSBjb2RlIGlzIGZvdW5kLgotCi0gICAgLWgKLSAgICAtLWhlbHAKLSAgICAgICAgUHJpbnQgdGhpcyBtZXNzYWdlLgotIiIiCi1fX3ZlcnNpb25fXyA9ICckUmV2aXNpb24kJwotCi0KLWltcG9ydCBzeXMKLWltcG9ydCBnZXRvcHQKLWltcG9ydCByZQotCi1QUk9HUkFNID0gc3lzLmFyZ3ZbMF0KLQotCi0MCi1kZWYgdXNhZ2UoY29kZSwgbXNnPScnKToKLSAgICBwcmludChfX2RvY19fICUgZ2xvYmFscygpKQotICAgIGlmIG1zZzoKLSAgICAgICAgcHJpbnQobXNnKQotICAgIHN5cy5leGl0KGNvZGUpCi0KLQotDAotZGVmIHJlc29sdmUocmF3YWRkcik6Ci0gICAgcGFydHMgPSByYXdhZGRyLnNwbGl0KCcuJykKLSAgICBpZiBub3QgbGVuKHBhcnRzKToKLSAgICAgICAgIyBubyB0b3AgbGV2ZWwgZG9tYWluIGZvdW5kLCBib3VuY2UgaXQgdG8gdGhlIG5leHQgc3RlcAotICAgICAgICByZXR1cm4gcmF3YWRkcgotICAgIGFkZHIgPSBwYXJ0c1stMV0KLSAgICBpZiBhZGRyIGluIG5hbWVvcmdzOgotICAgICAgICBwcmludChyYXdhZGRyLCAnaXMgaW4gdGhlJywgbmFtZW9yZ3NbYWRkcl0sICd0b3AgbGV2ZWwgZG9tYWluJykKLSAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBlbGlmIGFkZHIgaW4gY291bnRyaWVzOgotICAgICAgICBwcmludChyYXdhZGRyLCAnb3JpZ2luYXRlZCBmcm9tJywgY291bnRyaWVzW2FkZHJdKQotICAgICAgICByZXR1cm4gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgICMgTm90IHJlc29sdmVkLCBib3VuY2UgaXQgdG8gdGhlIG5leHQgc3RlcAotICAgICAgICByZXR1cm4gcmF3YWRkcgotCi0KLQwKLWRlZiByZXZlcnNlKHJlZ2V4cCk6Ci0gICAgbWF0Y2hlcyA9IFtdCi0gICAgY3JlID0gcmUuY29tcGlsZShyZWdleHAsIHJlLklHTk9SRUNBU0UpCi0gICAgZm9yIGNvZGUsIGNvdW50cnkgaW4gYWxsLml0ZW1zKCk6Ci0gICAgICAgIG1vID0gY3JlLnNlYXJjaChjb3VudHJ5KQotICAgICAgICBpZiBtbzoKLSAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKGNvZGUpCi0gICAgIyBwcmludCByZXN1bHRzCi0gICAgaWYgbm90IG1hdGNoZXM6Ci0gICAgICAgICMgbm90IHJlc29sdmVkLCBib3VuY2UgaXQgdG8gdGhlIG5leHQgc3RlcAotICAgICAgICByZXR1cm4gcmVnZXhwCi0gICAgaWYgbGVuKG1hdGNoZXMpID09IDE6Ci0gICAgICAgIGNvZGUgPSBtYXRjaGVzWzBdCi0gICAgICAgIHByaW50KHJlZ2V4cCwgIm1hdGNoZXMgY29kZSBgJXMnLCAlcyIgJSAoY29kZSwgYWxsW2NvZGVdKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludChyZWdleHAsICdtYXRjaGVzICVkIGNvdW50cmllczonICUgbGVuKG1hdGNoZXMpKQotICAgICAgICBmb3IgY29kZSBpbiBtYXRjaGVzOgotICAgICAgICAgICAgcHJpbnQoIiAgICAlczogJXMiICUgKGNvZGUsIGFsbFtjb2RlXSkpCi0gICAgcmV0dXJuIE5vbmUKLQotCi0MCi1kZWYgcGFyc2UoZmlsZSwgbm9ybWFsaXplKToKLSAgICB0cnk6Ci0gICAgICAgIGZwID0gb3BlbihmaWxlKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKLSAgICAgICAgZXJybm8sIG1zZyA9IGVyci5hcmdzCi0gICAgICAgIHByaW50KG1zZywgJzonLCBmaWxlKQotICAgICAgICByZXR1cm4KLQotICAgIGNyZSA9IHJlLmNvbXBpbGUoJyguKj8pWyBcdF0rKFtBLVpdezJ9KVsgXHRdK1tBLVpdezN9WyBcdF0rWzAtOV17M30nKQotICAgIHNjYW5uaW5nID0gMAotCi0gICAgaWYgbm9ybWFsaXplOgotICAgICAgICBwcmludCgnY291bnRyaWVzID0geycpCi0KLSAgICB3aGlsZSAxOgotICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoKQotICAgICAgICBpZiBsaW5lID09ICcnOgotICAgICAgICAgICAgYnJlYWsgICAgICAgICAgICAgICAgICAgICAgICMgRU9GCi0gICAgICAgIGlmIHNjYW5uaW5nOgotICAgICAgICAgICAgbW8gPSBjcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgIGlmIG5vdCBtbzoKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgZWxpZiBsaW5lWzBdID09ICctJzoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnQ291bGQgbm90IHBhcnNlIGxpbmU6JywgbGluZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGNvdW50cnksIGNvZGUgPSBtby5ncm91cCgxLCAyKQotICAgICAgICAgICAgaWYgbm9ybWFsaXplOgotICAgICAgICAgICAgICAgIHdvcmRzID0gY291bnRyeS5zcGxpdCgpCi0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHdvcmRzKSk6Ci0gICAgICAgICAgICAgICAgICAgIHcgPSB3b3Jkc1tpXQotICAgICAgICAgICAgICAgICAgICAjIFhYWCBzcGVjaWFsIGNhc2VzCi0gICAgICAgICAgICAgICAgICAgIGlmIHcgaW4gKCdBTkQnLCAnT0YnLCAnT0YpJywgJ25hbWU6JywgJ01FVFJPUE9MSVRBTicpOgotICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3Lmxvd2VyKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB3ID09ICdUSEUnIGFuZCBpICE9IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tpXSA9IHcubG93ZXIoKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGxlbih3KSA+IDMgYW5kIHdbMV0gPT0gIiciOgotICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3WzA6M10udXBwZXIoKSArIHdbMzpdLmxvd2VyKCkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB3IGluICgnKFUuUy4pJywgJ1UuUy4nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgZWxpZiB3WzBdID09ICcoJyBhbmQgdyAhPSAnKGxvY2FsJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRzW2ldID0gJygnICsgd1sxOl0uY2FwaXRhbGl6ZSgpCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgdy5maW5kKCctJykgIT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tpXSA9ICctJy5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzLmNhcGl0YWxpemUoKSBmb3IgcyBpbiB3LnNwbGl0KCctJyldKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbaV0gPSB3LmNhcGl0YWxpemUoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBjb2RlLmxvd2VyKCkKLSAgICAgICAgICAgICAgICBjb3VudHJ5ID0gJyAnLmpvaW4od29yZHMpCi0gICAgICAgICAgICAgICAgcHJpbnQoJyAgICAiJXMiOiAiJXMiLCcgJSAoY29kZSwgY291bnRyeSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KGNvZGUsIGNvdW50cnkpCi0KLSAgICAgICAgZWxpZiBsaW5lWzBdID09ICctJzoKLSAgICAgICAgICAgIHNjYW5uaW5nID0gMQotCi0gICAgaWYgbm9ybWFsaXplOgotICAgICAgICBwcmludCgnICAgIH0nKQotCi0MCi1kZWYgbWFpbigpOgotICAgIGhlbHAgPSAwCi0gICAgc3RhdHVzID0gMAotICAgIGR1bXAgPSAwCi0gICAgcGFyc2VmaWxlID0gTm9uZQotICAgIG5vcm1hbGl6ZSA9IDAKLSAgICBmb3JjZXJldiA9IDAKLQotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoCi0gICAgICAgICAgICBzeXMuYXJndlsxOl0sCi0gICAgICAgICAgICAncDpyb2hkJywKLSAgICAgICAgICAgIFsncGFyc2U9JywgJ3JldmVyc2UnLCAnb3V0cHV0ZGljdCcsICdoZWxwJywgJ2R1bXAnXSkKLSAgICBleGNlcHQgZ2V0b3B0LmVycm9yIGFzIG1zZzoKLSAgICAgICAgdXNhZ2UoMSwgbXNnKQotCi0gICAgZm9yIG9wdCwgYXJnIGluIG9wdHM6Ci0gICAgICAgIGlmIG9wdCBpbiAoJy1oJywgJy0taGVscCcpOgotICAgICAgICAgICAgaGVscCA9IDEKLSAgICAgICAgZWxpZiBvcHQgaW4gKCctZCcsICctLWR1bXAnKToKLSAgICAgICAgICAgIGR1bXAgPSAxCi0gICAgICAgIGVsaWYgb3B0IGluICgnLXAnLCAnLS1wYXJzZScpOgotICAgICAgICAgICAgcGFyc2VmaWxlID0gYXJnCi0gICAgICAgIGVsaWYgb3B0IGluICgnLW8nLCAnLS1vdXRwdXRkaWN0Jyk6Ci0gICAgICAgICAgICBub3JtYWxpemUgPSAxCi0gICAgICAgIGVsaWYgb3B0IGluICgnLXInLCAnLS1yZXZlcnNlJyk6Ci0gICAgICAgICAgICBmb3JjZXJldiA9IDEKLQotICAgIGlmIGhlbHA6Ci0gICAgICAgIHVzYWdlKHN0YXR1cykKLQotICAgIGlmIGR1bXA6Ci0gICAgICAgIHByaW50KCdPZmZpY2lhbCBjb3VudHJ5IGNvZGVkIGRvbWFpbnM6JykKLSAgICAgICAgY29kZXMgPSBzb3J0ZWQoY291bnRyaWVzKQotICAgICAgICBmb3IgY29kZSBpbiBjb2RlczoKLSAgICAgICAgICAgIHByaW50KCcgICAgICAlMnM6JyAlIGNvZGUsIGNvdW50cmllc1tjb2RlXSkKLQotICAgICAgICBwcmludCgnXG5PdGhlciB0b3AtbGV2ZWwgZG9tYWluczonKQotICAgICAgICBjb2RlcyA9IHNvcnRlZChuYW1lb3JncykKLSAgICAgICAgZm9yIGNvZGUgaW4gY29kZXM6Ci0gICAgICAgICAgICBwcmludCgnICAlNnM6JyAlIGNvZGUsIG5hbWVvcmdzW2NvZGVdKQotICAgIGVsaWYgcGFyc2VmaWxlOgotICAgICAgICBwYXJzZShwYXJzZWZpbGUsIG5vcm1hbGl6ZSkKLSAgICBlbHNlOgotICAgICAgICBpZiBub3QgZm9yY2VyZXY6Ci0gICAgICAgICAgICBhcmdzID0gZmlsdGVyKE5vbmUsIG1hcChyZXNvbHZlLCBhcmdzKSkKLSAgICAgICAgYXJncyA9IGZpbHRlcihOb25lLCBtYXAocmV2ZXJzZSwgYXJncykpCi0gICAgICAgIGZvciBhcmcgaW4gYXJnczoKLSAgICAgICAgICAgIHByaW50KCdXaGVyZSBpbiB0aGUgd29ybGQgaXMgJXM/JyAlIGFyZykKLQotCi0MCi0jIFRoZSBtYXBwaW5ncwotbmFtZW9yZ3MgPSB7Ci0gICAgIyBOZXcgdG9wIGxldmVsIGRvbWFpbnMgYXMgZGVzY3JpYmVkIGJ5IElDQU5OCi0gICAgIyBodHRwOi8vd3d3LmljYW5uLm9yZy90bGRzLwotICAgICJhZXJvIjogImFpci10cmFuc3BvcnQgaW5kdXN0cnkiLAotICAgICJhc2lhIjogImZyb20gQXNpYS9mb3IgQXNpYSIsCi0gICAgImFycGEiOiAiQXJwYW5ldCIsCi0gICAgImJpeiI6ICJidXNpbmVzcyIsCi0gICAgImNhdCI6ICJDYXRhbGFuIGNvbW11bml0eSIsCi0gICAgImNvbSI6ICJjb21tZXJjaWFsIiwKLSAgICAiY29vcCI6ICJjb29wZXJhdGl2ZXMiLAotICAgICJlZHUiOiAiZWR1Y2F0aW9uYWwiLAotICAgICJnb3YiOiAiZ292ZXJubWVudCIsCi0gICAgImluZm8iOiAidW5yZXN0cmljdGVkIGBpbmZvJyIsCi0gICAgImludCI6ICJpbnRlcm5hdGlvbmFsIiwKLSAgICAiam9icyI6ICJlbXBsb3ltZW50LXJlbGF0ZWQiLAotICAgICJtaWwiOiAibWlsaXRhcnkiLAotICAgICJtb2JpIjogIm1vYmlsZSBzcGVjaWZpYyIsCi0gICAgIm11c2V1bSI6ICJtdXNldW1zIiwKLSAgICAibmFtZSI6ICJgbmFtZScgKGZvciByZWdpc3RyYXRpb24gYnkgaW5kaXZpZHVhbHMpIiwKLSAgICAibmV0IjogIm5ldHdvcmtpbmciLAotICAgICJvcmciOiAibm9uLWNvbW1lcmNpYWwiLAotICAgICJwcm8iOiAicHJvZmVzc2lvbmFscyIsCi0gICAgInRlbCI6ICJidXNpbmVzcyB0ZWxlY29tbXVuaWNhdGlvbnMiLAotICAgICJ0cmF2ZWwiOiAidHJhdmVsIGFuZCB0b3VyaXNtIiwKLSAgICAjIFRoZXNlIGFkZGl0aW9uYWwgY2NUTERzIGFyZSBpbmNsdWRlZCBoZXJlIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCBwYXJ0Ci0gICAgIyBvZiBJU08gMzE2Ni4gIElBTkEgaGFzIGEgZGVjb2RpbmcgdGFibGUgbGlzdGluZyBhbGwgcmVzZXJ2ZWQgY2NUTERzOgotICAgICMKLSAgICAjIGh0dHA6Ly93d3cuaXNvLm9yZy9pc28vaXNvLTMxNjYtMV9kZWNvZGluZ190YWJsZQotICAgICMKLSAgICAjIE5vdGUgdGhhdCBgdWsnIGlzIHRoZSBjb21tb24gcHJhY3RpY2UgY291bnRyeSBjb2RlIGZvciB0aGUgVW5pdGVkCi0gICAgIyBLaW5nZG9tLiAgQUZBSUNULCB0aGUgb2ZmaWNpYWwgYGdiJyBjb2RlIGlzIHJvdXRpbmVseSBpZ25vcmVkIQotICAgICMKLSAgICAjIDxELk0uUGlja0BxbXcuYWMudWs+IHRlbGxzIG1lIHRoYXQgYHVrJyB3YXMgbG9uZyBpbiB1c2UgYmVmb3JlIElTTzMxNjYKLSAgICAjIHdhcyBhZG9wdGVkIGZvciB0b3AtbGV2ZWwgRE5TIHpvbmUgbmFtZXMgKGFsdGhvdWdoIGluIHRoZSByZXZlcnNlIG9yZGVyCi0gICAgIyBsaWtlIHVrLmFjLnFtdykgYW5kIHdhcyBjYXJyaWVkIGZvcndhcmQgKHdpdGggdGhlIHJldmVyc2FsKSB0byBhdm9pZCBhCi0gICAgIyBsYXJnZS1zY2FsZSByZW5hbWluZyBwcm9jZXNzIGFzIHRoZSBVSyBzd2l0Y2hlZCBmcm9tIHRoZWlyIG9sZCBgQ29sb3VyZWQKLSAgICAjIEJvb2snIHByb3RvY29scyBvdmVyIFguMjUgdG8gSW50ZXJuZXQgcHJvdG9jb2xzIG92ZXIgSVAuCi0gICAgIwotICAgICMgU2VlIDx1cmw6ZnRwOi8vZnRwLnJpcGUubmV0L3JpcGUvZG9jcy9yaXBlLTE1OS50eHQ+Ci0gICAgIwotICAgICMgQWxzbywgYHN1Jywgd2hpbGUgb2Jzb2xldGUgaXMgc3RpbGwgaW4gbGltaXRlZCB1c2UuCi0gICAgImFjIjogIkFzY2Vuc2lvbiBJc2xhbmQiLAotICAgICJjcCI6ICJDbGlwcGVydG9uIElzbGFuZCIsCi0gICAgImRnIjogIkRpZWdvIEdhcmNpYSIsCi0gICAgImVhIjogIkNldXRhLCBNZWxpbGxhIiwKLSAgICAiZXUiOiAiRXVyb3BlYW4gVW5pb24iLAotICAgICJmeCI6ICJNZXRyb3BvbGl0YW4gRnJhbmNlIiwKLSAgICAiaWMiOiAiQ2FuYXJ5IElzbGFuZHMiLAotICAgICJ0YSI6ICJUcmlzdGFuIGRhIEN1bmhhIiwKLSAgICAidWsiOiAiVW5pdGVkIEtpbmdkb20gKGNvbW1vbiBwcmFjdGljZSkiLAotICAgICJzdSI6ICJTb3ZpZXQgVW5pb24gKHN0aWxsIGluIGxpbWl0ZWQgdXNlKSIsCi0gICAgfQotCi0KLQwKLWNvdW50cmllcyA9IHsKLSAgICAiYWYiOiAiQWZnaGFuaXN0YW4iLAotICAgICJheCI6ICJBbGFuZCBJc2xhbmRzIiwKLSAgICAiYWwiOiAiQWxiYW5pYSIsCi0gICAgImR6IjogIkFsZ2VyaWEiLAotICAgICJhcyI6ICJBbWVyaWNhbiBTYW1vYSIsCi0gICAgImFkIjogIkFuZG9ycmEiLAotICAgICJhbyI6ICJBbmdvbGEiLAotICAgICJhaSI6ICJBbmd1aWxsYSIsCi0gICAgImFxIjogIkFudGFyY3RpY2EiLAotICAgICJhZyI6ICJBbnRpZ3VhIGFuZCBCYXJidWRhIiwKLSAgICAiYXIiOiAiQXJnZW50aW5hIiwKLSAgICAiYW0iOiAiQXJtZW5pYSIsCi0gICAgImF3IjogIkFydWJhIiwKLSAgICAiYXUiOiAiQXVzdHJhbGlhIiwKLSAgICAiYXQiOiAiQXVzdHJpYSIsCi0gICAgImF6IjogIkF6ZXJiYWlqYW4iLAotICAgICJicyI6ICJCYWhhbWFzIiwKLSAgICAiYmgiOiAiQmFocmFpbiIsCi0gICAgImJkIjogIkJhbmdsYWRlc2giLAotICAgICJiYiI6ICJCYXJiYWRvcyIsCi0gICAgImJ5IjogIkJlbGFydXMiLAotICAgICJiZSI6ICJCZWxnaXVtIiwKLSAgICAiYnoiOiAiQmVsaXplIiwKLSAgICAiYmoiOiAiQmVuaW4iLAotICAgICJibSI6ICJCZXJtdWRhIiwKLSAgICAiYnQiOiAiQmh1dGFuIiwKLSAgICAiYm8iOiAiQm9saXZpYSIsCi0gICAgImJhIjogIkJvc25pYSBhbmQgSGVyemVnb3ZpbmEiLAotICAgICJidyI6ICJCb3Rzd2FuYSIsCi0gICAgImJ2IjogIkJvdXZldCBJc2xhbmQiLAotICAgICJiciI6ICJCcmF6aWwiLAotICAgICJpbyI6ICJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnkiLAotICAgICJibiI6ICJCcnVuZWkgRGFydXNzYWxhbSIsCi0gICAgImJnIjogIkJ1bGdhcmlhIiwKLSAgICAiYmYiOiAiQnVya2luYSBGYXNvIiwKLSAgICAiYmkiOiAiQnVydW5kaSIsCi0gICAgImtoIjogIkNhbWJvZGlhIiwKLSAgICAiY20iOiAiQ2FtZXJvb24iLAotICAgICJjYSI6ICJDYW5hZGEiLAotICAgICJjdiI6ICJDYXBlIFZlcmRlIiwKLSAgICAia3kiOiAiQ2F5bWFuIElzbGFuZHMiLAotICAgICJjZiI6ICJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMiLAotICAgICJ0ZCI6ICJDaGFkIiwKLSAgICAiY2wiOiAiQ2hpbGUiLAotICAgICJjbiI6ICJDaGluYSIsCi0gICAgImN4IjogIkNocmlzdG1hcyBJc2xhbmQiLAotICAgICJjYyI6ICJDb2NvcyAoS2VlbGluZykgSXNsYW5kcyIsCi0gICAgImNvIjogIkNvbG9tYmlhIiwKLSAgICAia20iOiAiQ29tb3JvcyIsCi0gICAgImNnIjogIkNvbmdvIiwKLSAgICAiY2QiOiAiQ29uZ28sIFRoZSBEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSIsCi0gICAgImNrIjogIkNvb2sgSXNsYW5kcyIsCi0gICAgImNyIjogIkNvc3RhIFJpY2EiLAotICAgICJjaSI6ICJDb3RlIEQnSXZvaXJlIiwKLSAgICAiaHIiOiAiQ3JvYXRpYSIsCi0gICAgImN1IjogIkN1YmEiLAotICAgICJjeSI6ICJDeXBydXMiLAotICAgICJjeiI6ICJDemVjaCBSZXB1YmxpYyIsCi0gICAgImRrIjogIkRlbm1hcmsiLAotICAgICJkaiI6ICJEamlib3V0aSIsCi0gICAgImRtIjogIkRvbWluaWNhIiwKLSAgICAiZG8iOiAiRG9taW5pY2FuIFJlcHVibGljIiwKLSAgICAiZWMiOiAiRWN1YWRvciIsCi0gICAgImVnIjogIkVneXB0IiwKLSAgICAic3YiOiAiRWwgU2FsdmFkb3IiLAotICAgICJncSI6ICJFcXVhdG9yaWFsIEd1aW5lYSIsCi0gICAgImVyIjogIkVyaXRyZWEiLAotICAgICJlZSI6ICJFc3RvbmlhIiwKLSAgICAiZXQiOiAiRXRoaW9waWEiLAotICAgICJmayI6ICJGYWxrbGFuZCBJc2xhbmRzIChNYWx2aW5hcykiLAotICAgICJmbyI6ICJGYXJvZSBJc2xhbmRzIiwKLSAgICAiZmoiOiAiRmlqaSIsCi0gICAgImZpIjogIkZpbmxhbmQiLAotICAgICJmciI6ICJGcmFuY2UiLAotICAgICJnZiI6ICJGcmVuY2ggR3VpYW5hIiwKLSAgICAicGYiOiAiRnJlbmNoIFBvbHluZXNpYSIsCi0gICAgInRmIjogIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcyIsCi0gICAgImdhIjogIkdhYm9uIiwKLSAgICAiZ20iOiAiR2FtYmlhIiwKLSAgICAiZ2UiOiAiR2VvcmdpYSIsCi0gICAgImRlIjogIkdlcm1hbnkiLAotICAgICJnaCI6ICJHaGFuYSIsCi0gICAgImdpIjogIkdpYnJhbHRhciIsCi0gICAgImdyIjogIkdyZWVjZSIsCi0gICAgImdsIjogIkdyZWVubGFuZCIsCi0gICAgImdkIjogIkdyZW5hZGEiLAotICAgICJncCI6ICJHdWFkZWxvdXBlIiwKLSAgICAiZ3UiOiAiR3VhbSIsCi0gICAgImd0IjogIkd1YXRlbWFsYSIsCi0gICAgImdnIjogIkd1ZXJuc2V5IiwKLSAgICAiZ24iOiAiR3VpbmVhIiwKLSAgICAiZ3ciOiAiR3VpbmVhLUJpc3NhdSIsCi0gICAgImd5IjogIkd1eWFuYSIsCi0gICAgImh0IjogIkhhaXRpIiwKLSAgICAiaG0iOiAiSGVhcmQgSXNsYW5kIGFuZCBNY2RvbmFsZCBJc2xhbmRzIiwKLSAgICAidmEiOiAiSG9seSBTZWUgKFZhdGljYW4gQ2l0eSBTdGF0ZSkiLAotICAgICJobiI6ICJIb25kdXJhcyIsCi0gICAgImhrIjogIkhvbmcgS29uZyIsCi0gICAgImh1IjogIkh1bmdhcnkiLAotICAgICJpcyI6ICJJY2VsYW5kIiwKLSAgICAiaW4iOiAiSW5kaWEiLAotICAgICJpZCI6ICJJbmRvbmVzaWEiLAotICAgICJpciI6ICJJcmFuIChJc2xhbWljIFJlcHVibGljIG9mKSIsCi0gICAgImlxIjogIklyYXEiLAotICAgICJpZSI6ICJJcmVsYW5kIiwKLSAgICAiaW0iOiAiSXNsZSBvZiBNYW4iLAotICAgICJpbCI6ICJJc3JhZWwiLAotICAgICJpdCI6ICJJdGFseSIsCi0gICAgImptIjogIkphbWFpY2EiLAotICAgICJqcCI6ICJKYXBhbiIsCi0gICAgImplIjogIkplcnNleSIsCi0gICAgImpvIjogIkpvcmRhbiIsCi0gICAgImt6IjogIkthemFraHN0YW4iLAotICAgICJrZSI6ICJLZW55YSIsCi0gICAgImtpIjogIktpcmliYXRpIiwKLSAgICAia3AiOiAiS29yZWEsIERlbW9jcmF0aWMgUGVvcGxlJ3MgUmVwdWJsaWMgb2YiLAotICAgICJrciI6ICJLb3JlYSwgUmVwdWJsaWMgb2YiLAotICAgICJrdyI6ICJLdXdhaXQiLAotICAgICJrZyI6ICJLeXJneXpzdGFuIiwKLSAgICAibGEiOiAiTGFvIFBlb3BsZSdzIERlbW9jcmF0aWMgUmVwdWJsaWMiLAotICAgICJsdiI6ICJMYXR2aWEiLAotICAgICJsYiI6ICJMZWJhbm9uIiwKLSAgICAibHMiOiAiTGVzb3RobyIsCi0gICAgImxyIjogIkxpYmVyaWEiLAotICAgICJseSI6ICJMaWJ5YW4gQXJhYiBKYW1haGlyaXlhIiwKLSAgICAibGkiOiAiTGllY2h0ZW5zdGVpbiIsCi0gICAgImx0IjogIkxpdGh1YW5pYSIsCi0gICAgImx1IjogIkx1eGVtYm91cmciLAotICAgICJtbyI6ICJNYWNhbyIsCi0gICAgIm1rIjogIk1hY2Vkb25pYSwgVGhlIEZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiIsCi0gICAgIm1nIjogIk1hZGFnYXNjYXIiLAotICAgICJtdyI6ICJNYWxhd2kiLAotICAgICJteSI6ICJNYWxheXNpYSIsCi0gICAgIm12IjogIk1hbGRpdmVzIiwKLSAgICAibWwiOiAiTWFsaSIsCi0gICAgIm10IjogIk1hbHRhIiwKLSAgICAibWgiOiAiTWFyc2hhbGwgSXNsYW5kcyIsCi0gICAgIm1xIjogIk1hcnRpbmlxdWUiLAotICAgICJtciI6ICJNYXVyaXRhbmlhIiwKLSAgICAibXUiOiAiTWF1cml0aXVzIiwKLSAgICAieXQiOiAiTWF5b3R0ZSIsCi0gICAgIm14IjogIk1leGljbyIsCi0gICAgImZtIjogIk1pY3JvbmVzaWEsIEZlZGVyYXRlZCBTdGF0ZXMgb2YiLAotICAgICJtZCI6ICJNb2xkb3ZhLCBSZXB1YmxpYyBvZiIsCi0gICAgIm1jIjogIk1vbmFjbyIsCi0gICAgIm1uIjogIk1vbmdvbGlhIiwKLSAgICAibWUiOiAiTW9udGVuZWdybyIsCi0gICAgIm1zIjogIk1vbnRzZXJyYXQiLAotICAgICJtYSI6ICJNb3JvY2NvIiwKLSAgICAibXoiOiAiTW96YW1iaXF1ZSIsCi0gICAgIm1tIjogIk15YW5tYXIiLAotICAgICJuYSI6ICJOYW1pYmlhIiwKLSAgICAibnIiOiAiTmF1cnUiLAotICAgICJucCI6ICJOZXBhbCIsCi0gICAgIm5sIjogIk5ldGhlcmxhbmRzIiwKLSAgICAiYW4iOiAiTmV0aGVybGFuZHMgQW50aWxsZXMiLAotICAgICJuYyI6ICJOZXcgQ2FsZWRvbmlhIiwKLSAgICAibnoiOiAiTmV3IFplYWxhbmQiLAotICAgICJuaSI6ICJOaWNhcmFndWEiLAotICAgICJuZSI6ICJOaWdlciIsCi0gICAgIm5nIjogIk5pZ2VyaWEiLAotICAgICJudSI6ICJOaXVlIiwKLSAgICAibmYiOiAiTm9yZm9sayBJc2xhbmQiLAotICAgICJtcCI6ICJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMiLAotICAgICJubyI6ICJOb3J3YXkiLAotICAgICJvbSI6ICJPbWFuIiwKLSAgICAicGsiOiAiUGFraXN0YW4iLAotICAgICJwdyI6ICJQYWxhdSIsCi0gICAgInBzIjogIlBhbGVzdGluaWFuIFRlcnJpdG9yeSwgT2NjdXBpZWQiLAotICAgICJwYSI6ICJQYW5hbWEiLAotICAgICJwZyI6ICJQYXB1YSBOZXcgR3VpbmVhIiwKLSAgICAicHkiOiAiUGFyYWd1YXkiLAotICAgICJwZSI6ICJQZXJ1IiwKLSAgICAicGgiOiAiUGhpbGlwcGluZXMiLAotICAgICJwbiI6ICJQaXRjYWlybiIsCi0gICAgInBsIjogIlBvbGFuZCIsCi0gICAgInB0IjogIlBvcnR1Z2FsIiwKLSAgICAicHIiOiAiUHVlcnRvIFJpY28iLAotICAgICJxYSI6ICJRYXRhciIsCi0gICAgInJlIjogIlJldW5pb24iLAotICAgICJybyI6ICJSb21hbmlhIiwKLSAgICAicnUiOiAiUnVzc2lhbiBGZWRlcmF0aW9uIiwKLSAgICAicnciOiAiUndhbmRhIiwKLSAgICAic2giOiAiU2FpbnQgSGVsZW5hIiwKLSAgICAia24iOiAiU2FpbnQgS2l0dHMgYW5kIE5ldmlzIiwKLSAgICAibGMiOiAiU2FpbnQgTHVjaWEiLAotICAgICJwbSI6ICJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uIiwKLSAgICAidmMiOiAiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXMiLAotICAgICJ3cyI6ICJTYW1vYSIsCi0gICAgInNtIjogIlNhbiBNYXJpbm8iLAotICAgICJzdCI6ICJTYW8gVG9tZSBhbmQgUHJpbmNpcGUiLAotICAgICJzYSI6ICJTYXVkaSBBcmFiaWEiLAotICAgICJzbiI6ICJTZW5lZ2FsIiwKLSAgICAicnMiOiAiU2VyYmlhIiwKLSAgICAic2MiOiAiU2V5Y2hlbGxlcyIsCi0gICAgInNsIjogIlNpZXJyYSBMZW9uZSIsCi0gICAgInNnIjogIlNpbmdhcG9yZSIsCi0gICAgInNrIjogIlNsb3Zha2lhIiwKLSAgICAic2kiOiAiU2xvdmVuaWEiLAotICAgICJzYiI6ICJTb2xvbW9uIElzbGFuZHMiLAotICAgICJzbyI6ICJTb21hbGlhIiwKLSAgICAiemEiOiAiU291dGggQWZyaWNhIiwKLSAgICAiZ3MiOiAiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMiLAotICAgICJlcyI6ICJTcGFpbiIsCi0gICAgImxrIjogIlNyaSBMYW5rYSIsCi0gICAgInNkIjogIlN1ZGFuIiwKLSAgICAic3IiOiAiU3VyaW5hbWUiLAotICAgICJzaiI6ICJTdmFsYmFyZCBhbmQgSmFuIE1heWVuIiwKLSAgICAic2giOiAiU3QuIEhlbGVuYSIsCi0gICAgInBtIjogIlN0LiBQaWVycmUgYW5kIE1pcXVlbG9uIiwKLSAgICAic3oiOiAiU3dhemlsYW5kIiwKLSAgICAic2UiOiAiU3dlZGVuIiwKLSAgICAiY2giOiAiU3dpdHplcmxhbmQiLAotICAgICJzeSI6ICJTeXJpYW4gQXJhYiBSZXB1YmxpYyIsCi0gICAgInR3IjogIlRhaXdhbiwgUHJvdmluY2Ugb2YgQ2hpbmEiLAotICAgICJ0aiI6ICJUYWppa2lzdGFuIiwKLSAgICAidHoiOiAiVGFuemFuaWEsIFVuaXRlZCBSZXB1YmxpYyBvZiIsCi0gICAgInRoIjogIlRoYWlsYW5kIiwKLSAgICAidGwiOiAiVGltb3ItTGVzdGUiLAotICAgICJ0ZyI6ICJUb2dvIiwKLSAgICAidGsiOiAiVG9rZWxhdSIsCi0gICAgInRvIjogIlRvbmdhIiwKLSAgICAidHQiOiAiVHJpbmlkYWQgYW5kIFRvYmFnbyIsCi0gICAgInRuIjogIlR1bmlzaWEiLAotICAgICJ0ciI6ICJUdXJrZXkiLAotICAgICJ0bSI6ICJUdXJrbWVuaXN0YW4iLAotICAgICJ0YyI6ICJUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMiLAotICAgICJ0diI6ICJUdXZhbHUiLAotICAgICJ1ZyI6ICJVZ2FuZGEiLAotICAgICJ1YSI6ICJVa3JhaW5lIiwKLSAgICAiYWUiOiAiVW5pdGVkIEFyYWIgRW1pcmF0ZXMiLAotICAgICJnYiI6ICJVbml0ZWQgS2luZ2RvbSIsCi0gICAgInVzIjogIlVuaXRlZCBTdGF0ZXMiLAotICAgICJ1bSI6ICJVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMiLAotICAgICJ1eSI6ICJVcnVndWF5IiwKLSAgICAidXoiOiAiVXpiZWtpc3RhbiIsCi0gICAgInZ1IjogIlZhbnVhdHUiLAotICAgICJ2YSI6ICJWYXRpY2FuIENpdHkgU3RhdGUgKEhvbHkgU2VlKSIsCi0gICAgInZlIjogIlZlbmV6dWVsYSIsCi0gICAgInZuIjogIlZpZXQgTmFtIiwKLSAgICAidmciOiAiVmlyZ2luIElzbGFuZHMgKEJyaXRpc2gpIiwKLSAgICAidmkiOiAiVmlyZ2luIElzbGFuZHMgKFUuUy4pIiwKLSAgICAid2YiOiAiV2FsbGlzIGFuZCBGdXR1bmEiLAotICAgICJlaCI6ICJXZXN0ZXJuIFNhaGFyYSIsCi0gICAgInllIjogIlllbWVuIiwKLSAgICAieXUiOiAiWXVnb3NsYXZpYSIsCi0gICAgInptIjogIlphbWJpYSIsCi0gICAgInp3IjogIlppbWJhYndlIiwKLSAgICB9Ci0KLWFsbCA9IG5hbWVvcmdzLmNvcHkoKQotYWxsLnVwZGF0ZShjb3VudHJpZXMpCi0KLQwKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggOTBhZDE1Ni4uOThhZTZlNiAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMSw3ICsxLDcgQEAKICMhIC9iaW4vc2gKICMgRnJvbSBjb25maWd1cmUuaW4gUmV2aXNpb24uCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCBmb3IgcHl0aG9uIDMuMS4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4IGZvciBweXRob24gMy4yLgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTYxLDggKzU2MSw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMScKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4xJworUEFDS0FHRV9WRVJTSU9OPSczLjInCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuMicKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYwNiw2ICs2MDYsNyBAQAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCiBTUkNESVJTCiBUSFJFQURIRUFERVJTCitTT0FCSQogTElCQwogTElCTQogSEFWRV9HRVRIT1NUQllOQU1FCkBAIC02MjMsMTEgKzYyNCwxNCBAQAogVVNFX1RIUkVBRF9NT0RVTEUKIFNJR05BTF9PQkpTCiBVU0VfU0lHTkFMX01PRFVMRQorTElCRkZJX0lOQ0xVREVESVIKK1BLR19DT05GSUcKIFNITElCUwogQ0ZMQUdTRk9SU0hBUkVECiBMSU5LRk9SU0hBUkVECiBDQ1NIQVJFRAogQkxEU0hBUkVECitMRENYWFNIQVJFRAogTERTSEFSRUQKIFNPCiBMSUJUT09MX0NSVUZUCkBAIC02MzUsNiArNjM5LDcgQEAKIFVOSVZFUlNBTF9BUkNIX0ZMQUdTCiBCQVNFQ0ZMQUdTCiBPUFQKK0FCSUZMQUdTCiBMTgogSU5TVEFMTF9EQVRBCiBJTlNUQUxMX1NDUklQVApAQCAtNjQ3LDExICs2NTIsMTQgQEAKIEFSRkxBR1MKIEFSCiBSQU5MSUIKK1VTRV9JTkxJTkUKIEdOVUxECiBMSU5LQ0MKK0xEVkVSU0lPTgogUlVOU0hBUkVECiBJTlNUU09OQU1FCiBMRExJQlJBUllESVIKK1BZM0xJQlJBUlkKIEJMRExJQlJBUlkKIERMTExJQlJBUlkKIExETElCUkFSWQpAQCAtNjczLDYgKzY4MSw3IEBACiBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiBTR0lfQUJJCiBNQUNIREVQCitGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWAogRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYCiBGUkFNRVdPUktBTFRJTlNUQUxMTEFTVAogRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUCkBAIC02ODMsNyArNjkyLDYgQEAKIFBZVEhPTkZSQU1FV09SS0RJUgogUFlUSE9ORlJBTUVXT1JLSURFTlRJRklFUgogUFlUSE9ORlJBTUVXT1JLCi1MSVBPXzY0QklUX0ZMQUdTCiBMSVBPXzMyQklUX0ZMQUdTCiBBUkNIX1JVTl8zMkJJVAogVU5JVkVSU0FMU0RLCkBAIC03NDIsMTggKzc1MCwxOSBAQAogZW5hYmxlX3Byb2ZpbGluZwogd2l0aF9weWRlYnVnCiB3aXRoX2xpYnMKK3dpdGhfc3lzdGVtX2V4cGF0CiB3aXRoX3N5c3RlbV9mZmkKK2VuYWJsZV9sb2FkYWJsZV9zcWxpdGVfZXh0ZW5zaW9ucwogd2l0aF9kYm1saWJvcmRlcgogd2l0aF9zaWduYWxfbW9kdWxlCiB3aXRoX2RlY190aHJlYWRzCiB3aXRoX3RocmVhZHMKIHdpdGhfdGhyZWFkCi13aXRoX3B0aAogZW5hYmxlX2lwdjYKIHdpdGhfZG9jX3N0cmluZ3MKIHdpdGhfdHNjCiB3aXRoX3B5bWFsbG9jCi13aXRoX3djdHlwZV9mdW5jdGlvbnMKK3dpdGhfdmFsZ3JpbmQKIHdpdGhfZnBlY3RsCiB3aXRoX2xpYm0KIHdpdGhfbGliYwpAQCAtNzY5LDggKzc3OCw3IEBACiBMREZMQUdTCiBMSUJTCiBDUFBGTEFHUwotQ1BQCi1DUFBGTEFHUycKK0NQUCcKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCkBAIC0xMzEzLDcgKzEzMjEsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuMiB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xMzc0LDcgKzEzODIsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjE6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy4yOiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTEzODgsNiArMTM5Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIChNYWNPU1h8RGFyd2luKSBmcmFtZXdvcmsKICAgLS1lbmFibGUtc2hhcmVkICAgICAgICAgZGlzYWJsZS9lbmFibGUgYnVpbGRpbmcgc2hhcmVkIHB5dGhvbiBsaWJyYXJ5CiAgIC0tZW5hYmxlLXByb2ZpbGluZyAgICAgIGVuYWJsZSBDLWxldmVsIGNvZGUgcHJvZmlsaW5nCisgIC0tZW5hYmxlLWxvYWRhYmxlLXNxbGl0ZS1leHRlbnNpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgbG9hZGFibGUgZXh0ZW5zaW9ucyBpbiBfc3FsaXRlIG1vZHVsZQogICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICBFbmFibGUgaXB2NiAod2l0aCBpcHY0KSBzdXBwb3J0CiAgIC0tZGlzYWJsZS1pcHY2ICAgICAgICAgIERpc2FibGUgaXB2NiBzdXBwb3J0CiAgIC0tZW5hYmxlLWJpZy1kaWdpdHNbPUJJVFNdCkBAIC0xNDA5LDYgKzE0MTksOCBAQAogICAtLXdpdGgtc3VmZml4PS5leGUgICAgICBzZXQgZXhlY3V0YWJsZSBzdWZmaXgKICAgLS13aXRoLXB5ZGVidWcgICAgICAgICAgYnVpbGQgd2l0aCBQeV9ERUJVRyBkZWZpbmVkCiAgIC0td2l0aC1saWJzPSdsaWIxIC4uLicgIGxpbmsgYWdhaW5zdCBhZGRpdGlvbmFsIGxpYnMKKyAgLS13aXRoLXN5c3RlbS1leHBhdCAgICAgYnVpbGQgcHlleHBhdCBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGV4cGF0CisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnkKICAgLS13aXRoLXN5c3RlbS1mZmkgICAgICAgYnVpbGQgX2N0eXBlcyBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGZmaSBsaWJyYXJ5CiAgIC0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlciB0byBjaGVjayBkYiBiYWNrZW5kcyBmb3IgZGJtLiBWYWxpZCB2YWx1ZSBpcyBhCkBAIC0xNDIwLDE3ICsxNDMyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGUvZW5hYmxlIHRocmVhZCBzdXBwb3J0CiAgIC0td2l0aChvdXQpLXRocmVhZFs9RElSRUNUT1JZXQogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXByZWNhdGVkOyB1c2UgLS13aXRoKG91dCktdGhyZWFkcwotICAtLXdpdGgtcHRoICAgICAgICAgICAgICB1c2UgR05VIHB0aCB0aHJlYWRpbmcgbGlicmFyaWVzCiAgIC0td2l0aChvdXQpLWRvYy1zdHJpbmdzIGRpc2FibGUvZW5hYmxlIGRvY3VtZW50YXRpb24gc3RyaW5ncwogICAtLXdpdGgob3V0KS10c2MgICAgICAgICBlbmFibGUvZGlzYWJsZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxlCiAgIC0td2l0aChvdXQpLXB5bWFsbG9jICAgIGRpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3MKLSAgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMgdXNlIHdjdHlwZS5oIGZ1bmN0aW9ucworICAtLXdpdGgtdmFsZ3JpbmQgICAgICAgICBFbmFibGUgVmFsZ3JpbmQgc3VwcG9ydAogICAtLXdpdGgtZnBlY3RsICAgICAgICAgICBlbmFibGUgU0lHRlBFIGNhdGNoaW5nCiAgIC0td2l0aC1saWJtPVNUUklORyAgICAgIG1hdGggbGlicmFyeQogICAtLXdpdGgtbGliYz1TVFJJTkcgICAgICBDIGxpYnJhcnkKICAgLS13aXRoLXdpZGUtdW5pY29kZSAgICAgVXNlIDQtYnl0ZSBVbmljb2RlIGNoYXJhY3RlcnMgKGRlZmF1bHQgaXMgMiBieXRlcykKLSAgLS13aXRoLWNvbXB1dGVkLWdvdG9zICAgVXNlIGNvbXB1dGVkIGdvdG9zIC8gdGhyZWFkZWQgZGlzcGF0Y2ggaW4gZXZhbHVhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wIChub3QgYXZhaWxhYmxlIG9uIGFsbCBjb21waWxlcnMpCisgIC0td2l0aChvdXQpLWNvbXB1dGVkLWdvdG9zCisgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21wdXRlZCBnb3RvcyBpbiBldmFsdWF0aW9uIGxvb3AgKGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCBvbiBzdXBwb3J0ZWQgY29tcGlsZXJzKQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCkBAIC0xNTA4LDcgKzE1MjAsNyBAQAogdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzCiBpZiAkYWNfaW5pdF92ZXJzaW9uOyB0aGVuCiAgIGNhdCA8PFxfQUNFT0YKLXB5dGhvbiBjb25maWd1cmUgMy4xCitweXRob24gY29uZmlndXJlIDMuMgogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4CiAKIENvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KQEAgLTIzMzksNyArMjM1MSw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjEsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgcHl0aG9uICRhc19tZSAzLjIsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjcwNiw4ICsyNzE4LDkgQEAKIG12IGNvbmZkZWZzLmgubmV3IGNvbmZkZWZzLmgKIAogCi1WRVJTSU9OPTMuMQorVkVSU0lPTj0zLjIKIAorIyBWZXJzaW9uIG51bWJlciBvZiBQeXRob24ncyBvd24gc2hhcmVkIGxpYnJhcnkgZmlsZS4KIAogU09WRVJTSU9OPTEuMAogCkBAIC0yODAxLDcgKzI4MTQsNiBAQAogCiBVTklWRVJTQUxfQVJDSFM9IjMyLWJpdCIKIAotCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzLi4uICIgPiY2OyB9CiAKQEAgLTI4NjMsMjYgKzI4NzUsNTUgQEAKIAkJZW5hYmxlX2ZyYW1ld29yaz0KIAkJOzsKIAkqKQotCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9JGVuYWJsZXZhbAorCQlQWVRIT05GUkFNRVdPUktQUkVGSVg9IiR7ZW5hYmxldmFsfSIKIAkJUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUj0kUFlUSE9ORlJBTUVXT1JLUFJFRklYLyRQWVRIT05GUkFNRVdPUktESVIKIAkJRlJBTUVXT1JLSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgotCQljYXNlICIke1VOSVZFUlNBTF9BUkNIU30iIGluCi0JCWFsbHwzLXdheXxpbnRlbCkKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzNHdheSBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzNHdheSIKLQkJCTs7Ci0JCSopCi0JCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKLQkJCTs7Ci0JCWVzYWMKKwkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKKwogCQllbHNlCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7cHJlZml4fSIKIAkJZmkKKworCQljYXNlICIke2VuYWJsZXZhbH0iIGluCisJCS9TeXN0ZW0qKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiIDsgdGhlbgorCQkJCSMgU2VlIGJlbG93CisJCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIvdXNyIgorCQkJZmkKKwkJCTs7CisKKwkJL0xpYnJhcnkqKQorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCisJCQk7OworCisJCSovTGlicmFyeS9GcmFtZXdvcmtzKQorCQkJTURJUj0iYGRpcm5hbWUgIiR7ZW5hYmxldmFsfSJgIgorCQkJTURJUj0iYGRpcm5hbWUgIiR7TURJUn0iYCIKKwkJCUZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYPSIke01ESVJ9L0FwcGxpY2F0aW9ucyIKKworCQkJaWYgdGVzdCAiJHtwcmVmaXh9IiA9ICJOT05FIjsgdGhlbgorCQkJCSMgVXNlciBoYXNuJ3Qgc3BlY2lmaWVkIHRoZQorCQkJCSMgLS1wcmVmaXggb3B0aW9uLCBidXQgd2FudHMgdG8gaW5zdGFsbAorCQkJCSMgdGhlIGZyYW1ld29yayBpbiBhIG5vbi1kZWZhdWx0IGxvY2F0aW9uLAorCQkJCSMgZW5zdXJlIHRoYXQgdGhlIGNvbXBhdGliaWxpdHkgbGlua3MgZ2V0CisJCQkJIyBpbnN0YWxsZWQgcmVsYXRpdmUgdG8gdGhhdCBwcmVmaXggYXMgd2VsbAorCQkJCSMgaW5zdGVhZCBvZiBpbiAvdXNyL2xvY2FsLgorCQkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtNRElSfSIKKwkJCWZpCisJCQk7OworCisJCSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisJCWVzYWMKKwogCQlwcmVmaXg9JFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIvVmVyc2lvbnMvJFZFUlNJT04KIAogCQkjIEFkZCBmaWxlcyBmb3IgTWFjIHNwZWNpZmljIGNvZGUgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0CkBAIC0yOTE0LDExICsyOTU1LDYgQEAKIAlmaQogCWVuYWJsZV9mcmFtZXdvcms9CiAKLQlpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiCi0JdGhlbgotCQlGUkFNRVdPUktJTlNUQUxMTEFTVD11cGRhdGU0d2F5dW5pdmVyc2FsCi0JCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQlmaQogCiBmaQogCkBAIC0yOTMzLDkgKzI5NjksMTAgQEAKIAogCiAKKwogIyNBQ19BUkdfV0lUSChkeWxkLAotIyMgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZHlsZCwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXIpKQorIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAorIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKICMjCiAjIFNldCBuYW1lIGZvciBtYWNoaW5lLWRlcGVuZGVudCBsaWJyYXJ5IGZpbGVzCiAKQEAgLTI5NTksNyArMjk5Niw2IEBACiAJY2FzZSAkTUFDSERFUCBpbgogCWN5Z3dpbiopIE1BQ0hERVA9ImN5Z3dpbiI7OwogCWRhcndpbiopIE1BQ0hERVA9ImRhcndpbiI7OwotCWF0aGVvcyopIE1BQ0hERVA9ImF0aGVvcyI7OwogICAgICAgICBpcml4NjQ2KSBNQUNIREVQPSJpcml4NiI7OwogCScnKQlNQUNIREVQPSJ1bmtub3duIjs7CiAJZXNhYwpAQCAtMzAwMiw5ICszMDM4LDEyIEBACiAgICMgTWFyYyBSZWNodAogICBOZXRCU0QvMS41IHwgTmV0QlNELzEuNS4qIHwgTmV0QlNELzEuNiB8IE5ldEJTRC8xLjYuKiB8IE5ldEJTRC8xLjZbQS1TXSkKICAgICBkZWZpbmVfeG9wZW5fc291cmNlPW5vOzsKLSAgIyBPbiBTb2xhcmlzIDIuNiwgc3lzL3dhaXQuaCBpcyBpbmNvbnNpc3RlbnQgaW4gdGhlIHVzYWdlCi0gICMgb2YgdW5pb24gX18/c2lndmFsLiBSZXBvcnRlZCBieSBTdHVhcnQgQmlzaG9wLgotICBTdW5PUy81LjYpCisgICMgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgU29sYXJpcywgX1hPUEVOX1NPVVJDRSBpcyBub3Qgc28gbXVjaCBhCisgICMgcmVxdWVzdCB0byBlbmFibGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCBhcyBhIHJlcXVlc3QKKyAgIyB0byBkaXNhYmxlIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHN0YW5kYXJkLiAgVGhlIGJlc3Qgd2F5CisgICMgZm9yIFB5dGhvbiB0byB1c2UgU29sYXJpcyBpcyBzaW1wbHkgdG8gbGVhdmUgX1hPUEVOX1NPVVJDRSBvdXQKKyAgIyBlbnRpcmVseSBhbmQgZGVmaW5lIF9fRVhURU5TSU9OU19fIGluc3RlYWQuCisgIFN1bk9TLyopCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7CiAgICMgT24gVW5peFdhcmUgNywgdV9sb25nIGlzIG5ldmVyIGRlZmluZWQgd2l0aCBfWE9QRU5fU09VUkNFLAogICAjIGJ1dCB1c2VkIGluIC91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oLiBSZXBvcnRlZCBieSBUaW0gUmljZS4KQEAgLTMwNTAsMzggKzMwODksMTcgQEAKIAogaWYgdGVzdCAkZGVmaW5lX3hvcGVuX3NvdXJjZSA9IHllcwogdGhlbgotICAjIE9uIFNvbGFyaXMgdy8gZysrIGl0IGFwcGVhcnMgdGhhdCBfWE9QRU5fU09VUkNFIGhhcyB0byBiZQotICAjIGRlZmluZWQgcHJlY2lzZWx5IGFzIGcrKyBkZWZpbmVzIGl0Ci0gICMgRnVydGhlcm1vcmUsIG9uIFNvbGFyaXMgMTAsIFhQRzYgcmVxdWlyZXMgdGhlIHVzZSBvZiBhIEM5OQotICAjIGNvbXBpbGVyCi0gIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi0gICAgU3VuT1MvNS44fFN1bk9TLzUuOXxTdW5PUy81LjEwfFN1bk9TLzUuMTEpCi0KLSRhc19lY2hvICIjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAwIiA+PmNvbmZkZWZzLmgKLQotICAgICAgOzsKLSAgICAqKQogCiAkYXNfZWNobyAiI2RlZmluZSBfWE9QRU5fU09VUkNFIDYwMCIgPj5jb25mZGVmcy5oCiAKLSAgICAgIDs7Ci0gIGVzYWMKIAogICAjIE9uIFRydTY0IFVuaXggNC4wRiwgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRSBhbHNvIHJlcXVpcmVzCiAgICMgZGVmaW5pdGlvbiBvZiBfWE9QRU5fU09VUkNFX0VYVEVOREVEIGFuZCBfUE9TSVhfQ19TT1VSQ0UsIG9yIGVsc2UKICAgIyBzZXZlcmFsIEFQSXMgYXJlIG5vdCBkZWNsYXJlZC4gU2luY2UgdGhpcyBpcyBhbHNvIG5lZWRlZCBpbiBzb21lCiAgICMgY2FzZXMgZm9yIEhQLVVYLCB3ZSBkZWZpbmUgaXQgZ2xvYmFsbHkuCi0gICMgZXhjZXB0IGZvciBTb2xhcmlzIDEwLCB3aGVyZSBpdCBtdXN0IG5vdCBiZSBkZWZpbmVkLAotICAjIGFzIGl0IGltcGxpZXMgWFBHNC4yCi0gIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCi0gICAgU3VuT1MvNS4xMHxTdW5PUy81LjExKQotICAgICAgOzsKLSAgICAqKQogCiAkYXNfZWNobyAiI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDEiID4+Y29uZmRlZnMuaAogCi0gICAgICA7OwotICBlc2FjCiAKIAogJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX0NfU09VUkNFIDIwMDExMkwiID4+Y29uZmRlZnMuaApAQCAtMzE2NSw2ICszMTgzLDEyIEBACiAoaXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBkbyAnbWFrZSBjbGVhbicgYmVmb3JlIGNvbXBpbGluZykiICIkTElORU5PIiA1CiBmaQogCisjIERvbid0IGxldCBBQ19QUk9HX0NDIHNldCB0aGUgZGVmYXVsdCBDRkxBR1MuIEl0IG5vcm1hbGx5IHNldHMgLWcgLU8yCisjIHdoZW4gdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZW0sIGJ1dCB3ZSBkb24ndCBhbHdheXMgd2FudCAtTzIsIGFuZAorIyB3ZSBzZXQgLWcgbGF0ZXIuCitpZiB0ZXN0IC16ICIkQ0ZMQUdTIjsgdGhlbgorICAgICAgICBDRkxBR1M9CitmaQogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC00NjA1LDcgKzQ2MjksNiBAQAogCiAKIAotCiAjIENoZWNrIGZvciB1bnN1cHBvcnRlZCBzeXN0ZW1zCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogYXRoZW9zKnxMaW51eCovMSopCkBAIC00NjY0LDEyICs0Njg3LDYgQEAKICAgICBjYXNlICRDQyBpbgogICAgIGNjfCovY2MpIENDPSIkQ0MgLUFlIjs7CiAgICAgZXNhYzs7Ci1TdW5PUyopCi0gICAgIyBTb21lIGZ1bmN0aW9ucyBoYXZlIGEgcHJvdG90eXBlIG9ubHkgd2l0aCB0aGF0IGRlZmluZSwgZS5nLiBjb25mc3RyCi0KLSRhc19lY2hvICIjZGVmaW5lIF9fRVhURU5TSU9OU19fIDEiID4+Y29uZmRlZnMuaAotCi0gICAgOzsKIGVzYWMKIAogCkBAIC00Njc4LDcgKzQ2OTUsNyBAQAogJGFzX2VjaG9fbiAiY2hlY2tpbmcgTElCUkFSWS4uLiAiID4mNjsgfQogaWYgdGVzdCAteiAiJExJQlJBUlkiCiB0aGVuCi0JTElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5hJworCUxJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikkKEFCSUZMQUdTKS5hJwogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTElCUkFSWSIgPiY1CiAkYXNfZWNobyAiJExJQlJBUlkiID4mNjsgfQpAQCAtNDY5Niw2ICs0NzEzLDExIEBACiAjCiAjIElOU1RTT05BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHRoYXQgd2lsbCBiZSB1c2UgdG8gaW5zdGFsbAogIyBvbiB0aGUgc3lzdGVtIC0gc29tZSBzeXN0ZW1zIGxpa2UgdmVyc2lvbiBzdWZmaXgsIG90aGVycyBkb24ndAorIworIyBMRFZFUlNJT04gaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyLCBub3JtYWxseSB0aGUgUHl0aG9uIHZlcnNpb24KKyMgd2l0aCB0aGUgQUJJIGJ1aWxkIGZsYWdzIGFwcGVuZGVkLgorCisKIAogCiAKQEAgLTQ3MDgsNiArNDczMCw3IEBACiBETExMSUJSQVJZPScnCiBMRExJQlJBUllESVI9JycKIFJVTlNIQVJFRD0nJworTERWRVJTSU9OPSIkVkVSU0lPTiIKIAogIyBMSU5LQ0MgaXMgdGhlIGNvbW1hbmQgdGhhdCBsaW5rcyB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgLS0gZGVmYXVsdCBpcyAkKENDKS4KICMgSWYgQ1hYIGlzIHNldCwgYW5kIGlmIGl0IGlzIG5lZWRlZCB0byBsaW5rIGEgbWFpbiBmdW5jdGlvbiB0aGF0IHdhcwpAQCAtNDc1OSw2ICs0NzgyLDU2IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEdOVUxEIiA+JjUKICRhc19lY2hvICIkR05VTEQiID4mNjsgfQogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2lubGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2N2X2NfaW5saW5lPW5vCitmb3IgYWNfa3cgaW4gaW5saW5lIF9faW5saW5lX18gX19pbmxpbmU7IGRvCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYgaW50IGZvb190Oworc3RhdGljICRhY19rdyBmb29fdCBzdGF0aWNfZm9vICgpIHtyZXR1cm4gMDsgfQorJGFjX2t3IGZvb190IGZvbyAoKSB7cmV0dXJuIDA7IH0KKyNlbmRpZgorCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19pbmxpbmU9JGFjX2t3CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIHRlc3QgIiRhY19jdl9jX2lubGluZSIgIT0gbm8gJiYgYnJlYWsKK2RvbmUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19pbmxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2lubGluZSIgPiY2OyB9CisKK2Nhc2UgJGFjX2N2X2NfaW5saW5lIGluCisgIGlubGluZSB8IHllcykgOzsKKyAgKikKKyAgICBjYXNlICRhY19jdl9jX2lubGluZSBpbgorICAgICAgbm8pIGFjX3ZhbD07OworICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7CisgICAgZXNhYworICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgaW5saW5lICRhY192YWwKKyNlbmRpZgorX0FDRU9GCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0lOTElORSAxIiA+PmNvbmZkZWZzLmgKKworCitmaQorCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0tZW5hYmxlLXNoYXJlZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS1lbmFibGUtc2hhcmVkLi4uICIgPiY2OyB9CiAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KQEAgLTQ3NzAsNyArNDg0Myw3IEBACiBpZiB0ZXN0IC16ICIkZW5hYmxlX3NoYXJlZCIKIHRoZW4KICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotICBDWUdXSU4qIHwgYXRoZW9zKikKKyAgQ1lHV0lOKikKICAgICBlbmFibGVfc2hhcmVkPSJ5ZXMiOzsKICAgKikKICAgICBlbmFibGVfc2hhcmVkPSJubyI7OwpAQCAtNDgzOSwxOCArNDkxMiwyMiBAQAogCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQotICAgICAgICAgIExETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5kbGwuYScKLSAgICAgICAgICBETExMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLmRsbCcKKyAgICAgICAgICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5kbGwuYScKKyAgICAgICAgICBETExMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZGxsJwogICAgICAgICAgIDs7CiAgICAgU3VuT1MqKQotCSAgTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNvJwotCSAgQkxETElCUkFSWT0nLVdsLC1SLCQoTElCRElSKSAtTC4gLWxweXRob24kKFZFUlNJT04pJworCSAgTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCisJICBCTERMSUJSQVJZPSctV2wsLVIsJChMSUJESVIpIC1MLiAtbHB5dGhvbiQoTERWRVJTSU9OKScKIAkgIFJVTlNIQVJFRD1MRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtMRF9MSUJSQVJZX1BBVEh9CiAJICBJTlNUU09OQU1FPSIkTERMSUJSQVJZIi4kU09WRVJTSU9OCisJICBpZiB0ZXN0ICIkd2l0aF9weWRlYnVnIiAhPSB5ZXMKKwkgIHRoZW4KKwkgICAgICBQWTNMSUJSQVJZPWxpYnB5dGhvbjMuc28KKwkgIGZpCiAgICAgICAgICAgOzsKICAgICBMaW51eCp8R05VKnxOZXRCU0QqfEZyZWVCU0QqfERyYWdvbkZseSopCi0JICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuc28nCi0JICBCTERMSUJSQVJZPSctTC4gLWxweXRob24kKFZFUlNJT04pJworCSAgTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCisJICBCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCiAJICBSVU5TSEFSRUQ9TERfTElCUkFSWV9QQVRIPWBwd2RgOiR7TERfTElCUkFSWV9QQVRIfQogCSAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogCSAgICAgIEZyZWVCU0QqKQpAQCAtNDg1OCwzNiArNDkzNSwzNSBAQAogCQk7OwogCSAgZXNhYwogCSAgSU5TVFNPTkFNRT0iJExETElCUkFSWSIuJFNPVkVSU0lPTgorCSAgaWYgdGVzdCAiJHdpdGhfcHlkZWJ1ZyIgIT0geWVzCisgICAgICAgICAgdGhlbgorCSAgICAgIFBZM0xJQlJBUlk9bGlicHl0aG9uMy5zbworCSAgZmkKIAkgIDs7CiAgICAgaHAqfEhQKikKIAkgIGNhc2UgYHVuYW1lIC1tYCBpbgogCQlpYTY0KQotCQkJTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNvJworCQkJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCiAJCQk7OwogCQkqKQotCQkJTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNsJworCQkJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc2wnCiAJCQk7OwogCSAgZXNhYwotCSAgQkxETElCUkFSWT0nLVdsLCtiLCQoTElCRElSKSAtTC4gLWxweXRob24kKFZFUlNJT04pJworCSAgQkxETElCUkFSWT0nLVdsLCtiLCQoTElCRElSKSAtTC4gLWxweXRob24kKExEVkVSU0lPTiknCiAJICBSVU5TSEFSRUQ9U0hMSUJfUEFUSD1gcHdkYDoke1NITElCX1BBVEh9CiAJICA7OwogICAgIE9TRiopCi0JICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuc28nCi0JICBCTERMSUJSQVJZPSctcnBhdGggJChMSUJESVIpIC1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCisJICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKKwkgIEJMRExJQlJBUlk9Jy1ycGF0aCAkKExJQkRJUikgLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwogCSAgUlVOU0hBUkVEPUxEX0xJQlJBUllfUEFUSD1gcHdkYDoke0xEX0xJQlJBUllfUEFUSH0KIAkgIDs7Ci0gICAgYXRoZW9zKikKLQkgIExETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKLQkgIEJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCi0JICBSVU5TSEFSRUQ9RExMX1BBVEg9YHB3ZGA6JHtETExfUEFUSDotL2F0aGVvcy9zeXMvbGliczovYXRoZW9zL2F1dG9sbmsvbGlifQotCSAgOzsKICAgICBEYXJ3aW4qKQotICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuZHlsaWInCi0JQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChWRVJTSU9OKScKKyAgICAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZHlsaWInCisJQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwogCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtEWUxEX0xJQlJBUllfUEFUSH0nCiAJOzsKICAgICBBSVgqKQotCUxETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKKwlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKIAlSVU5TSEFSRUQ9TElCUEFUSD1gcHdkYDoke0xJQlBBVEh9CiAJOzsKIApAQCAtNDg5Niw3ICs0OTcyLDcgQEAKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCiAgICAgICAgICAgQkxETElCUkFSWT0nJChMSUJSQVJZKScKLSAgICAgICAgICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuZGxsLmEnCisgICAgICAgICAgTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZGxsLmEnCiAgICAgICAgICAgOzsKICAgZXNhYwogZmkKQEAgLTUyODIsMTEgKzUzNTgsMTQgQEAKIGlmIHRlc3QgLXogIiRMTiIgOyB0aGVuCiAJY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogCQlDWUdXSU4qKSBMTj0ibG4gLXMiOzsKLQkJYXRoZW9zKikgTE49ImxuIC1zIjs7CiAJCSopIExOPWxuOzsKIAllc2FjCiBmaQogCisjIEZvciBjYWxjdWxhdGluZyB0aGUgLnNvIEFCSSB0YWcuCisKK0FCSUZMQUdTPSIiCisKICMgQ2hlY2sgZm9yIC0td2l0aC1weWRlYnVnCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtcHlkZWJ1ZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLXB5ZGVidWcuLi4gIiA+JjY7IH0KQEAgLTUzMDIsNiArNTM4MSw3IEBACiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9OwogICBQeV9ERUJVRz0ndHJ1ZScKKyAgQUJJRkxBR1M9IiR7QUJJRkxBR1N9ZCIKIGVsc2UgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9OyBQeV9ERUJVRz0nZmFsc2UnCiBmaQpAQCAtNTM0Myw3ICs1NDIzLDcgQEAKIAkgICAgaWYgdGVzdCAiJFB5X0RFQlVHIiA9ICd0cnVlJyA7IHRoZW4KIAkJIyBPcHRpbWl6YXRpb24gbWVzc2VzIHVwIGRlYnVnZ2Vycywgc28gdHVybiBpdCBvZmYgZm9yCiAJCSMgZGVidWcgYnVpbGRzLgotCQlPUFQ9Ii1nIC1XYWxsICRTVFJJQ1RfUFJPVE8iCisJCU9QVD0iLWcgLU8wIC1XYWxsICRTVFJJQ1RfUFJPVE8iCiAJICAgIGVsc2UKIAkJT1BUPSItZyAkV1JBUCAtTzMgLVdhbGwgJFNUUklDVF9QUk9UTyIKIAkgICAgZmkKQEAgLTU0ODEsMzAgKzU1NjEsMjggQEAKIAkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KIAkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKIAkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCiAJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQorCQkgICBBUkNIX1JVTl8zMkJJVD0iIgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCiAJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iIgorCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKIAogCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiAtZXh0cmFjdCBwcGM3NDAwIgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQgLWV4dHJhY3QgcHBjNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKIAogCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgogCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgogCiAJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCiAJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYgLWV4dHJhY3QgcHBjNzQwMCIKLQkJICAgTElQT182NEJJVF9GTEFHUz0iLWV4dHJhY3QgeDg2XzY0IgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCiAKIAkJIGVsc2UKIAkgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQpAQCAtNTUxNyw3ICs1NTk1LDcgQEAKIAkJdGhlbgogCQkJQ0ZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKIAkJCUxERkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCUNQUEZMQUdTRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisJCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKIAkJZmkKIAkgICAgZmkKIApAQCAtNTU5NSw4NSArNTY3Myw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIGRpc2FibGUgY2hlY2sgZm9yIGljYyBzaW5jZSBpdCBzZWVtcyB0byBwYXNzLCBidXQgZ2VuZXJhdGVzIGEgd2FybmluZwotaWYgdGVzdCAiJENDIiA9IGljYwotdGhlbgotICBhY19jdl9vcHRfb2xpbWl0X29rPW5vCi1maQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLU9QVDpPbGltaXQ9MCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PUFQ6T2xpbWl0PTAuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfb3B0X29saW1pdF9vays6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY2M9IiRDQyIKLUNDPSIkQ0MgLU9QVDpPbGltaXQ9MCIKLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zfb3B0X29saW1pdF9vaz1ubwotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi1pbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X29wdF9vbGltaXRfb2s9eWVzCi1lbHNlCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi1DQz0iJGFjX3NhdmVfY2MiCi1maQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29wdF9vbGltaXRfb2siID4mNQotJGFzX2VjaG8gIiRhY19jdl9vcHRfb2xpbWl0X29rIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X29wdF9vbGltaXRfb2sgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhY19zeXNfc3lzdGVtIGluCi0JIyBYWFggaXMgdGhpcyBicmFuY2ggbmVlZGVkPyBPbiBNYWNPU1ggMTAuMi4yIHRoZSByZXN1bHQgb2YgdGhlCi0JIyBvbGltaXRfb2sgdGVzdCBpcyAibm8iLiAgSXMgaXQgInllcyIgaW4gc29tZSBvdGhlciBEYXJ3aW4tZXNxdWUKLQkjIGVudmlyb25tZW50PwotICAgICAgICBEYXJ3aW4qKQotCSAgICA7OwotICAgICAgICAqKQotCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtT1BUOk9saW1pdD0wIgotCSAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PbGltaXQgMTUwMCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1PbGltaXQgMTUwMC4uLiAiID4mNjsgfQotICBpZiAke2FjX2N2X29saW1pdF9vays6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY2M9IiRDQyIKLSAgQ0M9IiRDQyAtT2xpbWl0IDE1MDAiCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgYWNfY3Zfb2xpbWl0X29rPW5vCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLWludCBtYWluKCkgeyByZXR1cm4gMDsgfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfb2xpbWl0X29rPXllcwotZWxzZQotICBhY19jdl9vbGltaXRfb2s9bm8KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0gIENDPSIkYWNfc2F2ZV9jYyIKLWZpCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vbGltaXRfb2siID4mNQotJGFzX2VjaG8gIiRhY19jdl9vbGltaXRfb2siID4mNjsgfQotICBpZiB0ZXN0ICRhY19jdl9vbGltaXRfb2sgPSB5ZXM7IHRoZW4KLSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtT2xpbWl0IDE1MDAiCi0gIGZpCi1maQotCiAjIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0CiBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCiB0aGVuCkBAIC01Njg1LDcgKzU2ODQsNiBAQAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAgICAgdm9pZCBmKGNoYXIqLC4uLilfX2F0dHJpYnV0ZSgoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDEsIDIpKSk7Ci0KIGludAogbWFpbiAoKQogewpAQCAtNTY5MywxNSArNTY5MSwxOSBAQAogICA7CiAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAorCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAogZmkKQEAgLTYwNzMsNyArNjA3NSw3IEBACiBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdW4uaCBzeXMvdXRzbmFtZS5oIHN5cy93YWl0LmggcHR5LmggbGlidXRpbC5oIFwKIHN5cy9yZXNvdXJjZS5oIG5ldHBhY2tldC9wYWNrZXQuaCBzeXNleGl0cy5oIGJsdWV0b290aC5oIFwKLWJsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmgKK2JsdWV0b290aC9ibHVldG9vdGguaCBsaW51eC90aXBjLmggc3Bhd24uaCB1dGlsLmgKIGRvIDoKICAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAogYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCkBAIC02MzczLDEzICs2Mzc1LDE2IEBACiAjZWxzZQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCisKIGludAogbWFpbiAoKQogewotIG1ha2VkZXYoMCwgMCkKKworICBtYWtlZGV2KDAsIDApCiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9oYXNfbWFrZWRldj15ZXMKQEAgLTY1MjEsMzkgKzY1MjYsMTEgQEAKIAogZmkKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3R5cGVfc2lnbmFsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAqKHNpZ25hbCAoMCwgMCkpICgwKSA9PSAxOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3R5cGVfc2lnbmFsPWludAotZWxzZQotICBhY19jdl90eXBlX3NpZ25hbD12b2lkCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3R5cGVfc2lnbmFsIiA+JjY7IH0KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorI2RlZmluZSBSRVRTSUdUWVBFIHZvaWQKIF9BQ0VPRgogCi0KIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNpemVfdCIgImFjX2N2X3R5cGVfc2l6ZV90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCiBpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc2l6ZV90IiA9IHh5ZXM7IHRoZW4gOgogCkBAIC03MTg2LDQ4ICs3MTYzLDQ1IEBACiBmaQogCiAKLQotIyBIbXBoLiBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHN5cy90eXBlcy5oPi4KKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygb2ZmX3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdC4uLiAiID4mNjsgfQogaWYgJHthY19jdl9zaXplb2Zfb2ZmX3QrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl9vZmZfdD00Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChvZmZfdCkpIiAiYWNfY3Zfc2l6ZW9mX29mZl90IiAgICAgICAgIgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZihvZmZfdCkpOwotICBleGl0KDApOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX29mZl90PWBjYXQgY29uZnRlc3R2YWxgCisjZW5kaWYKKworIjsgdGhlbiA6CisKIGVsc2UKLSAgYWNfY3Zfc2l6ZW9mX29mZl90PTAKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiRhY19jdl90eXBlX29mZl90IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKG9mZl90KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX29mZl90PTAKKyAgIGZpCiBmaQogCi0KIGZpCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjUKICRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjY7IH0KIAorCisKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX09GRl9UICRhY19jdl9zaXplb2Zfb2ZmX3QKIF9BQ0VPRgogCiAKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0Li4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2xvbmciID0geWVzCkBAIC03MjQ4LDQyICs3MjIyLDQyIEBACiAkYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotIyBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHRpbWUuaD4uCisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHRpbWVfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHRpbWVfdC4uLiAiID4mNjsgfQogaWYgJHthY19jdl9zaXplb2ZfdGltZV90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9zaXplb2ZfdGltZV90PTQKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHRpbWVfdCkpIiAiYWNfY3Zfc2l6ZW9mX3RpbWVfdCIgICAgICAgICIKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RJTUVfSAogI2luY2x1ZGUgPHRpbWUuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZih0aW1lX3QpKTsKLSAgZXhpdCgwKTsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3NpemVvZl90aW1lX3Q9YGNhdCBjb25mdGVzdHZhbGAKKyNlbmRpZgorCisiOyB0aGVuIDoKKwogZWxzZQotICBhY19jdl9zaXplb2ZfdGltZV90PTAKLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3RpbWVfdCIgPSB5ZXM7IHRoZW4KKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh0aW1lX3QpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2ZfdGltZV90PTAKKyAgIGZpCiBmaQogCi0KIGZpCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3RpbWVfdCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X3NpemVvZl90aW1lX3QiID4mNjsgfQogCisKKwogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfVElNRV9UICRhY19jdl9zaXplb2ZfdGltZV90CiBfQUNFT0YKQEAgLTcyOTksMTIgKzcyNzMsMTQgQEAKIGVsaWYgdGVzdCAiJGFjX2N2X3B0aHJlYWQiID0gInllcyIKIHRoZW4gQ0M9IiRDQyAtcHRocmVhZCIKIGZpCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF90Li4uICIgPiY2OyB9CiBoYXZlX3B0aHJlYWRfdD1ubwogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworICAjaW5jbHVkZSA8cHRocmVhZC5oPgogaW50CiBtYWluICgpCiB7CkBAIC03MzEyLDYgKzcyODgsNyBAQAogICA7CiAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgaGF2ZV9wdGhyZWFkX3Q9eWVzCkBAIC03MzIwLDUyICs3Mjk3LDQ4IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfcHRocmVhZF90IiA+JjUKICRhc19lY2hvICIkaGF2ZV9wdGhyZWFkX3QiID4mNjsgfQogaWYgdGVzdCAiJGhhdmVfcHRocmVhZF90IiA9IHllcyA7IHRoZW4KLSAgIyBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHB0aHJlYWQuaD4uCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBwdGhyZWFkX3QiID4mNQorICAjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIHB0aHJlYWRfdCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHB0aHJlYWRfdC4uLiAiID4mNjsgfQotICBpZiAke2FjX2N2X3NpemVvZl9wdGhyZWFkX3QrOn0gZmFsc2U7IHRoZW4gOgoraWYgJHthY19jdl9zaXplb2ZfcHRocmVhZF90Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBhY19jdl9zaXplb2ZfcHRocmVhZF90PTQKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHB0aHJlYWRfdCkpIiAiYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCIgICAgICAgICIKKyNpZmRlZiBIQVZFX1BUSFJFQURfSAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSAgbWFpbigpCi0gIHsKLSAgICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gICAgaWYgKCFmKSBleGl0KDEpOwotICAgIGZwcmludGYoZiwgIiVkXG4iLCBzaXplb2YocHRocmVhZF90KSk7Ci0gICAgZXhpdCgwKTsKLSAgfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD1gY2F0IGNvbmZ0ZXN0dmFsYAorI2VuZGlmCisKKyI7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9MAotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfcHRocmVhZF90IiA9IHllczsgdGhlbgorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHB0aHJlYWRfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9MAorICAgZmkKIGZpCiAKLQogZmkKLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QiID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfcHRocmVhZF90IiA+JjUKICRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCIgPiY2OyB9CiAKKworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QKIF9BQ0VPRgogCisKIGZpCiBDQz0iJGFjX3NhdmVfY2MiCiAKIAotCi0KIGNhc2UgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIERhcndpbi9bMDE1NjddXC4uKikKICAgICBPVEhFUl9MSUJUT09MX09QVD0iLXByZWJpbmQgLXNlZzFhZGRyIDB4MTAwMDAwMDAiCkBAIC03NDk5LDM2ICs3NDcyLDcgQEAKIAogCiAKLSMgU08gaXMgdGhlIGV4dGVuc2lvbiBvZiBzaGFyZWQgbGlicmFyaWVzIGAoaW5jbHVkaW5nIHRoZSBkb3QhKQotIyAtLSB1c3VhbGx5IC5zbywgLnNsIG9uIEhQLVVYLCAuZGxsIG9uIEN5Z3dpbgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBTTyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBTTy4uLiAiID4mNjsgfQotaWYgdGVzdCAteiAiJFNPIgotdGhlbgotCWNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLQlocCp8SFAqKQotCQljYXNlIGB1bmFtZSAtbWAgaW4KLQkJCWlhNjQpIFNPPS5zbzs7Ci0JICAJCSopICAgIFNPPS5zbDs7Ci0JCWVzYWMKLQkJOzsKLQlDWUdXSU4qKSAgIFNPPS5kbGw7OwotCSopCSAgIFNPPS5zbzs7Ci0JZXNhYwotZWxzZQotCSMgdGhpcyBtaWdodCBhbHNvIGJlIGEgdGVybWNhcCB2YXJpYWJsZSwgc2VlICM2MTAzMzIKLSAgICAgICAgZWNobwotICAgICAgICBlY2hvICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nCi0gICAgICAgIGVjaG8gJysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKycKLQllY2hvICcrIFdBUk5JTkc6IFlvdSBoYXZlIHNldCBTTyBpbiB5b3VyIGVudmlyb25tZW50LiAgICAgICAgICAgICAgICAgICAgICsnCi0gICAgICAgIGVjaG8gJysgRG8geW91IHJlYWxseSBtZWFuIHRvIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzPyAgKycKLSAgICAgICAgZWNobyAnKyBDb250aW51aW5nIGluIDEwIHNlY29uZHMgdG8gbGV0IHlvdSB0byBwb25kZXIuICAgICAgICAgICAgICAgICAgICArJwotICAgICAgICBlY2hvICcrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsnCi0gICAgICAgIGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKLQlzbGVlcCAxMAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU08iID4mNQotJGFzX2VjaG8gIiRTTyIgPiY2OyB9CisKIAogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC03NTUxLDM2ICs3NDk1LDQ3IEBACiAJSVJJWC81KikgTERTSEFSRUQ9ImxkIC1zaGFyZWQiOzsKIAlJUklYKi82KikgTERTSEFSRUQ9ImxkICR7U0dJX0FCSX0gLXNoYXJlZCAtYWxsIjs7CiAJU3VuT1MvNSopCi0JCWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLQkJdGhlbiBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKExERkxBR1MpJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRyAkKExERkxBR1MpJzsKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nJChDQykgLUcnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1HJwogCQlmaSA7OwogCWhwKnxIUCopCi0JCWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLQkJdGhlbiBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKLQkJZWxzZSBMRFNIQVJFRD0nbGQgLWInOworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSdsZCAtYicKIAkJZmkgOzsKIAlPU0YqKSBMRFNIQVJFRD0ibGQgLXNoYXJlZCAtZXhwZWN0X3VucmVzb2x2ZWQgXCIqXCIiOzsKIAlEYXJ3aW4vMS4zKikKLQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZScKKwkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgogCQkJIyBMaW5rIGFnYWluc3QgdGhlIGZyYW1ld29yay4gQWxsIGV4dGVybmFscyBzaG91bGQgYmUgZGVmaW5lZC4KIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCisJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJZWxzZQogCQkJIyBObyBmcmFtZXdvcmsuIElnbm9yZSB1bmRlZmluZWQgc3ltYm9scywgYXNzdW1pbmcgdGhleSBjb21lIGZyb20gUHl0aG9uCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEIC11bmRlZmluZWQgc3VwcHJlc3MiCisJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEIC11bmRlZmluZWQgc3VwcHJlc3MiCiAJCWZpIDs7CiAJRGFyd2luLzEuNCp8RGFyd2luLzUuKnxEYXJ3aW4vNi4qKQotCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlJworCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCiAJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQllbHNlCiAJCQkjIE5vIGZyYW1ld29yaywgdXNlIHRoZSBQeXRob24gYXBwIGFzIGJ1bmRsZS1sb2FkZXIKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCVUlMRFBZVEhPTiknCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCisJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCiAJCWZpIDs7CiAJRGFyd2luLyopCiAJCSMgVXNlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAgd2hlbmV2ZXIgcG9zc2libGUgKDEwLjMgYW5kIGxhdGVyKS4KQEAgLTc1OTEsNTggKzc1NDYsNzggQEAKIAkJCWlmIHRlc3QgIiR7ZW5hYmxlX3VuaXZlcnNhbHNka30iOyB0aGVuCiAJCQkJTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgogCQkJZmkKLQkJCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKIAkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgogCQllbHNlCi0JCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlJworCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCiAJCQkJIyBMaW5rIGFnYWluc3QgdGhlIGZyYW1ld29yay4gQWxsIGV4dGVybmFscyBzaG91bGQgYmUgZGVmaW5lZC4KIAkJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKKwkJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCWVsc2UKIAkJCQkjIE5vIGZyYW1ld29yaywgdXNlIHRoZSBQeXRob24gYXBwIGFzIGJ1bmRsZS1sb2FkZXIKIAkJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQlVJTERQWVRIT04pJwogCQkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKKwkJCQlMRENYWFNIQVJFRD0iJExEQ1hYU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCiAJCQlmaQogCQlmaQogCQk7OwotCUxpbnV4KnxHTlUqfFFOWCopIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJzs7Ci0JQlNEL09TKi80KikgTERTSEFSRUQ9ImdjYyAtc2hhcmVkIjs7CisJTGludXgqfEdOVSp8UU5YKikKKwkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCc7OworCUJTRC9PUyovNCopCisJCUxEU0hBUkVEPSJnY2MgLXNoYXJlZCIKKwkJTERDWFhTSEFSRUQ9ImcrKyAtc2hhcmVkIjs7CiAJRnJlZUJTRCopCiAJCWlmIFsgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF0KIAkJdGhlbgotCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJHtMREZMQUdTfScKKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJwogCQllbHNlCi0JCQlMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUgJHtMREZMQUdTfSIKKwkJCUxEU0hBUkVEPSJsZCAtQnNoYXJlYWJsZSIKIAkJZmk7OwogCU9wZW5CU0QqKQogCQlpZiBbICJgJENDIC1kTSAtRSAtIDwvZGV2L251bGwgfCBncmVwIF9fRUxGX19gIiAhPSAiIiBdCiAJCXRoZW4KLQkJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKSAke0xERkxBR1N9JworCQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpJworCQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCAkKENDU0hBUkVEKScKIAkJZWxzZQogCQkJCWNhc2UgYHVuYW1lIC1yYCBpbgogCQkJCVswMV0uKiB8IDIuWzAtN10gfCAyLlswLTddLiopCiAJCQkJICAgTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCiAJCQkJICAgOzsKIAkJCQkqKQotCQkJCSAgIExEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpICR7TERGTEFHU30nCisJCQkJICAgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCknCisJCQkJICAgTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkICQoQ0NTSEFSRUQpJwogCQkJCSAgIDs7CiAJCQkJZXNhYwogCQlmaTs7Ci0JTmV0QlNEKnxEcmFnb25GbHkqKSBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAke0xERkxBR1N9Jzs7CisJTmV0QlNEKnxEcmFnb25GbHkqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CiAJT3BlblVOSVgqfFVuaXhXYXJlKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRycKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nJChDQykgLUcnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1HJwogCQlmaTs7Ci0JU0NPX1NWKikgTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCc7OwotCUNZR1dJTiopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIjs7Ci0JYXRoZW9zKikgTERTSEFSRUQ9ImdjYyAtc2hhcmVkIjs7CisJU0NPX1NWKikKKwkJTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtV2wsLUcsLUJleHBvcnQnOzsKKwlDWUdXSU4qKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSIKKwkJTERDWFhTSEFSRUQ9ImcrKyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiOzsKIAkqKQlMRFNIQVJFRD0ibGQiOzsKIAllc2FjCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRFNIQVJFRCIgPiY1CiAkYXNfZWNobyAiJExEU0hBUkVEIiA+JjY7IH0KK0xEQ1hYU0hBUkVEPSR7TERDWFhTSEFSRUQtJExEU0hBUkVEfQogQkxEU0hBUkVEPSR7QkxEU0hBUkVELSRMRFNIQVJFRH0KICMgQ0NTSEFSRUQgYXJlIHRoZSBDICpmbGFncyogdXNlZCB0byBjcmVhdGUgb2JqZWN0cyB0byBnbyBpbnRvIGEgc2hhcmVkCiAjIGxpYnJhcnkgKG1vZHVsZSkgLS0gdGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgYSBmZXcgc3lzdGVtcwpAQCAtNzY3OCw3ICs3NjUzLDYgQEAKIAkJICAgKmdjYyopIENDU0hBUkVEPSItc2hhcmVkIjs7CiAJCSAgICopIENDU0hBUkVEPSIiOzsKIAkJICAgZXNhYzs7Ci0JYXRoZW9zKikgQ0NTSEFSRUQ9Ii1mUElDIjs7CiAJZXNhYwogZmkKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0NTSEFSRUQiID4mNQpAQCAtNzk3OCw3ICs3OTUyLDggQEAKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZW51aW5lIEFJWCBDKysgZXh0ZW5zaW9ucyBzdXBwb3J0Li4uICIgPiY2OyB9CiAJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxsb2FkLmg+CisKKwkJICAjaW5jbHVkZSA8bG9hZC5oPgogaW50CiBtYWluICgpCiB7CkBAIC03OTg2LDE2ICs3OTYxLDIxIEBACiAgIDsKICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCisKICRhc19lY2hvICIjZGVmaW5lIEFJWF9HRU5VSU5FX0NQTFVTUExVUyAxIiA+PmNvbmZkZWZzLmgKIAotCQkJICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKwkJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisKKwkJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAogICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0OzsKQEAgLTgxMDAsNiArODA4MCwxMjAgQEAKIGZpCiAKIAoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QS0dfQ09ORklHPSIkUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BLR19DT05GSUc9JGFjX2N2X3BhdGhfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJFBLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wYXRoX1BLR19DT05GSUciOyB0aGVuCisgIGFjX3B0X1BLR19DT05GSUc9JFBLR19DT05GSUcKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwa2ctY29uZmlnIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBwa2ctY29uZmlnOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkYWNfcHRfUEtHX0NPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9hY19wdF9QS0dfQ09ORklHPSIkYWNfcHRfUEtHX0NPTkZJRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK2FjX3B0X1BLR19DT05GSUc9JGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRworaWYgdGVzdCAtbiAiJGFjX3B0X1BLR19DT05GSUciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcHRfUEtHX0NPTkZJRyIgPiY1CiskYXNfZWNobyAiJGFjX3B0X1BLR19DT05GSUciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19wdF9QS0dfQ09ORklHIiA9IHg7IHRoZW4KKyAgICBQS0dfQ09ORklHPSIiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgUEtHX0NPTkZJRz0kYWNfcHRfUEtHX0NPTkZJRworICBmaQorZWxzZQorICBQS0dfQ09ORklHPSIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIgorZmkKKworCisjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBleHBhdCBsaWJyYXJ5Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzdGVtX2V4cGF0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXN0ZW1fZXhwYXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c3RlbV9leHBhdDsKK2Vsc2UKKyAgd2l0aF9zeXN0ZW1fZXhwYXQ9Im5vIgorZmkKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGhfc3lzdGVtX2V4cGF0IiA+JjUKKyRhc19lY2hvICIkd2l0aF9zeXN0ZW1fZXhwYXQiID4mNjsgfQorCiAjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBsaWJmZmkgbGlicmFyeQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLXN5c3RlbS1mZmkiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1zeXN0ZW0tZmZpLi4uICIgPiY2OyB9CkBAIC04MTEyLDkgKzgyMDYsMzAgQEAKIGZpCiAKIAoraWYgdGVzdCAiJHdpdGhfc3lzdGVtX2ZmaSIgPSAieWVzIiAmJiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKyAgICBMSUJGRklfSU5DTFVERURJUj0iYCIkUEtHX0NPTkZJRyIgbGliZmZpIC0tY2ZsYWdzLW9ubHktSSAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncy9eLUkvLztzLyAqJC8vJ2AiCitlbHNlCisgICAgTElCRkZJX0lOQ0xVREVESVI9IiIKK2ZpCisKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3N5c3RlbV9mZmkiID4mNQogJGFzX2VjaG8gIiR3aXRoX3N5c3RlbV9mZmkiID4mNjsgfQogCisjIENoZWNrIGZvciBzdXBwb3J0IGZvciBsb2FkYWJsZSBzcWxpdGUgZXh0ZW5zaW9ucworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWxvYWRhYmxlLXNxbGl0ZS1leHRlbnNpb25zLi4uICIgPiY2OyB9CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbG9hZGFibGVfc3FsaXRlX2V4dGVuc2lvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sb2FkYWJsZV9zcWxpdGVfZXh0ZW5zaW9uczsKK2Vsc2UKKyAgZW5hYmxlX2xvYWRhYmxlX3NxbGl0ZV9leHRlbnNpb25zPSJubyIKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfbG9hZGFibGVfc3FsaXRlX2V4dGVuc2lvbnMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfbG9hZGFibGVfc3FsaXRlX2V4dGVuc2lvbnMiID4mNjsgfQorCiAjIENoZWNrIGZvciAtLXdpdGgtZGJtbGlib3JkZXIKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1kYm1saWJvcmRlciIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS13aXRoLWRibWxpYm9yZGVyLi4uICIgPiY2OyB9CkBAIC04MzE5LDI0ICs4NDM0LDYgQEAKICAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyIKIGVsc2UKIAotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0td2l0aC1wdGgiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1wdGguLi4gIiA+JjY7IH0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wdGggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3B0aCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIHdpdGh2YWw9JHdpdGhfcHRoOyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQotJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KLSAgICAgICAgICAgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFdJVEhfVEhSRUFEIDEiID4+Y29uZmRlZnMuaAotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFRIIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICAgICAgICAgICAgICBMSUJTPSItbHB0aCAkTElCUyIKLSAgICAgICAgICAgICAgICAgIFRIUkVBRE9CSj0iUHl0aG9uL3RocmVhZC5vIgotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQogICAgICMgSnVzdCBsb29raW5nIGZvciBwdGhyZWFkX2NyZWF0ZSBpbiBsaWJwdGhyZWFkIGlzIG5vdCBlbm91Z2g6CiAgICAgIyBvbiBIUC9VWCwgcHRocmVhZC5oIHJlbmFtZXMgcHRocmVhZF9jcmVhdGUgdG8gYSBkaWZmZXJlbnQgc3ltYm9sIG5hbWUuCiAgICAgIyBTbyB3ZSByZWFsbHkgaGF2ZSB0byBpbmNsdWRlIHB0aHJlYWQuaCwgYW5kIHRoZW4gbGluay4KQEAgLTgzNzcsMTYgKzg0NzQsNiBAQAogICAgIFRIUkVBRE9CSj0iUHl0aG9uL3RocmVhZC5vIgogZWxzZQogCi0gICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImF0aGVvcy90aHJlYWRzLmgiICJhY19jdl9oZWFkZXJfYXRoZW9zX3RocmVhZHNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYXRoZW9zX3RocmVhZHNfaCIgPSB4eWVzOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9USFJFQUQgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgQVRIRU9TX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oCi0KLSAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyIKLWVsc2UKLQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZHMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZHMuLi4gIiA+JjY7IH0KIGlmICR7YWNfY3ZfbGliX3B0aHJlYWRzX3B0aHJlYWRfY3JlYXRlKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTg1NzUsMTYgKzg2NjIsMTEgQEAKIAogZmkKIAotCi1maQotCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLWZpCi0KIAogZmkKIApAQCAtODgwMyw2ICs4ODg1LDcgQEAKIGVsc2UKIAogICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiAgIGlwdjY9bm8KQEAgLTg4MjMsMTMgKzg5MDYsMTcgQEAKIAogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogICBpcHY2PXllcworCiBlbHNlCisKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CiAgIGlwdjY9bm8KKwogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKICAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKQEAgLTg4NDEsMjUgKzg5MjgsMzEgQEAKICRhc19lY2hvX24gImNoZWNraW5nIGlmIFJGQzI1NTMgQVBJIGlzIGF2YWlsYWJsZS4uLiAiID4mNjsgfQogCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCSAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KIGludAogbWFpbiAoKQogewogc3RydWN0IHNvY2thZGRyX2luNiB4OwoteC5zaW42X3Njb3BlX2lkOworCQkJICAgIHguc2luNl9zY29wZV9pZDsKICAgOwogICByZXR1cm4gMDsKIH0KKwogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQotCQlpcHY2PXllcworCSAgaXB2Nj15ZXMKKwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkJaXB2Nj1ubworCSAgaXB2Nj1ubworCiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQpAQCAtOTAzNCw3ICs5MTI3LDggQEAKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBPU1ggMTAuNSBTREsgb3IgbGF0ZXIuLi4gIiA+JjY7IH0KIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxDYXJib24vQ2FyYm9uLmg+CisKKyAgI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KIGludAogbWFpbiAoKQogewpAQCAtOTA0MiwxNCArOTEzNiwxOCBAQAogICA7CiAgIHJldHVybiAwOwogfQorCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKIAorCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX09TWDEwNV9TREsgMSIgPj5jb25mZGVmcy5oCiAKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KKwogZWxzZQorCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiAkYXNfZWNobyAibm8iID4mNjsgfQogCkBAIC05MTEyLDcgKzkyMTAsOSBAQAogCiAKIGlmIHRlc3QgLXogIiR3aXRoX3B5bWFsbG9jIgotdGhlbiB3aXRoX3B5bWFsbG9jPSJ5ZXMiCit0aGVuCisgICAgd2l0aF9weW1hbGxvYz0ieWVzIgorICAgIEFCSUZMQUdTPSIke0FCSUZMQUdTfW0iCiBmaQogaWYgdGVzdCAiJHdpdGhfcHltYWxsb2MiICE9ICJubyIKIHRoZW4KQEAgLTkxMjMsMjggKzkyMjMsMzMgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9weW1hbGxvYyIgPiY1CiAkYXNfZWNobyAiJHdpdGhfcHltYWxsb2MiID4mNjsgfQogCi0jIENoZWNrIGZvciAtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zLi4uICIgPiY2OyB9CisjIENoZWNrIGZvciBWYWxncmluZCBzdXBwb3J0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtdmFsZ3JpbmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC12YWxncmluZC4uLiAiID4mNjsgfQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXdjdHlwZS1mdW5jdGlvbnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3djdHlwZV9mdW5jdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX3djdHlwZV9mdW5jdGlvbnM7Ci1pZiB0ZXN0ICIkd2l0aHZhbCIgIT0gbm8KLXRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgV0FOVF9XQ1RZUEVfRlVOQ1RJT05TIDEiID4+Y29uZmRlZnMuaAotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdmFsZ3JpbmQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3ZhbGdyaW5kK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF92YWxncmluZDsKIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9CisgIHdpdGhfdmFsZ3JpbmQ9bm8KIGZpCiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF92YWxncmluZCIgPiY1CiskYXNfZWNobyAiJHdpdGhfdmFsZ3JpbmQiID4mNjsgfQoraWYgdGVzdCAiJHdpdGhfdmFsZ3JpbmQiICE9IG5vOyB0aGVuCisgICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInZhbGdyaW5kL3ZhbGdyaW5kLmgiICJhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdmFsZ3JpbmRfdmFsZ3JpbmRfaCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgV0lUSF9WQUxHUklORCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBhc19mbl9lcnJvciAkPyAiVmFsZ3JpbmQgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGhlYWRlcnMgbm90IGF2YWlsYWJsZSIgIiRMSU5FTk8iIDUKKworZmkKKworCisgICAgT1BUPSItRERZTkFNSUNfQU5OT1RBVElPTlNfRU5BQkxFRD0xICRPUFQiCitmaQogCiAjIC1JJHtETElOQ0xESVJ9IGlzIGFkZGVkIHRvIHRoZSBjb21waWxlIHJ1bGUgZm9yIGltcG9ydGRsLm8KIApAQCAtOTE4MSw3ICs5Mjg2LDYgQEAKIAlocCp8SFAqKSBEWU5MT0FERklMRT0iZHlubG9hZF9ocHV4Lm8iOzsKIAkjIFVzZSBkeW5sb2FkX25leHQuYyBvbmx5IG9uIDEwLjIgYW5kIGJlbG93LCB3aGljaCBkb24ndCBoYXZlIG5hdGl2ZSBkbG9wZW4oKQogCURhcndpbi9bMDE1Nl1cLi4qKSBEWU5MT0FERklMRT0iZHlubG9hZF9uZXh0Lm8iOzsKLQlhdGhlb3MqKSBEWU5MT0FERklMRT0iZHlubG9hZF9hdGhlb3MubyI7OwogCSopCiAJIyB1c2UgZHlubG9hZF9zaGxpYi5jIGFuZCBkbG9wZW4oKSBpZiB3ZSBoYXZlIGl0OyBvdGhlcndpc2Ugc3R1YgogCSMgb3V0IGFueSBkeW5hbWljIGxvYWRpbmcKQEAgLTkyMTYsMTcgKzkzMjAsMTcgQEAKICRhc19lY2hvICJNQUNIREVQX09CSlMiID4mNjsgfQogCiAjIGNoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKLWZvciBhY19mdW5jIGluIGFsYXJtIHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAorZm9yIGFjX2Z1bmMgaW4gYWxhcm0gYWNjZXB0NCBzZXRpdGltZXIgZ2V0aXRpbWVyIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGNob3duIFwKICBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZXhlY3YgZmNobW9kIGZjaG93biBmb3JrIGZwYXRoY29uZiBmdGltZSBmdHJ1bmNhdGUgXAogIGdhaV9zdHJlcnJvciBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCi0gZ2V0cHJpb3JpdHkgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKLSBraWxsIGtpbGxwZyBsY2htb2QgbGNob3duIGxzdGF0IG1icnRvd2MgbWtmaWZvIG1rbm9kIG1rdGltZSBcCisgZ2V0cHJpb3JpdHkgZ2V0cmVzdWlkIGdldHJlc2dpZCBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAorIGluaXRncm91cHMga2lsbCBraWxscGcgbGNobW9kIGxjaG93biBsc3RhdCBtYnJ0b3djIG1rZmlmbyBta25vZCBta3RpbWUgXAogIG1yZW1hcCBuaWNlIHBhdGhjb25mIHBhdXNlIHBsb2NrIHBvbGwgcHRocmVhZF9pbml0IFwKICBwdXRlbnYgcmVhZGxpbmsgcmVhbHBhdGggXAogIHNlbGVjdCBzZW1fb3BlbiBzZW1fdGltZWR3YWl0IHNlbV9nZXR2YWx1ZSBzZW1fdW5saW5rIHNldGVnaWQgc2V0ZXVpZCBcCiAgc2V0Z2lkIFwKLSBzZXRsb2NhbGUgc2V0cmVnaWQgc2V0cmV1aWQgc2V0c2lkIHNldHBnaWQgc2V0cGdycCBzZXR1aWQgc2V0dmJ1ZiBzbnByaW50ZiBcCi0gc2lnYWN0aW9uIHNpZ2ludGVycnVwdCBzaWdyZWxzZSBzdHJmdGltZSBzdHJsY3B5IFwKKyBzZXRsb2NhbGUgc2V0cmVnaWQgc2V0cmV1aWQgc2V0cmVzdWlkIHNldHJlc2dpZCBzZXRzaWQgc2V0cGdpZCBzZXRwZ3JwIHNldHVpZCBzZXR2YnVmIFwKKyBzaWdhY3Rpb24gc2lnaW50ZXJydXB0IHNpZ3JlbHNlIHNucHJpbnRmIHN0cmZ0aW1lIHN0cmxjcHkgXAogIHN5c2NvbmYgdGNnZXRwZ3JwIHRjc2V0cGdycCB0ZW1wbmFtIHRpbWVnbSB0aW1lcyB0bXBmaWxlIHRtcG5hbSB0bXBuYW1fciBcCiAgdHJ1bmNhdGUgdW5hbWUgdW5zZXRlbnYgdXRpbWVzIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAogIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSBfZ2V0cHR5CkBAIC05MjYxLDcgKzkzNjUsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NIUk9PVCAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05Mjg2LDcgKzkzOTAsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJTksgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTMxMSw3ICs5NDE1LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TWU1MSU5LIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkzMzYsNyArOTQ0MCw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRkNIRElSIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTkzNjEsNyArOTQ2NSw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfRlNZTkMgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTM4Niw3ICs5NDkwLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTQxMSw3ICs5NTE1LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FUE9MTCAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05NDM5LDcgKzk1NDMsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0tRVUVVRSAxIiA+PmNvbmZkZWZzLmgKIAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CkBAIC05NDU4LDcgKzk1NjIsNiBAQAogY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKICNpbmNsdWRlIDxzdGRpby5oPgogCiBpbnQKQEAgLTk0NzMsNyArOTU3Niw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ1RFUk1JRF9SIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTk1NzYsNyArOTY3OSw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiBpbnQKQEAgLTk1OTEsNyArOTY5Myw3IEBACiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTg5Niw3ICs5OTk4LDYgQEAKIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotI2luY2x1ZGUgImNvbmZkZWZzLmgiCiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAogaW50CkBAIC05OTExLDcgKzEwMDEyLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9IU1RSRVJST1IgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTkyNiw3ICsxMDAyNyw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC05OTQ0LDcgKzEwMDQ0LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTk1OSw3ICsxMDA1OSw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC05OTc3LDcgKzEwMDc2LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTkVUX1BUT04gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtOTk5Miw3ICsxMDA5MSw2IEBACiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSNpbmNsdWRlICJjb25mZGVmcy5oIgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2lmZGVmIEhBVkVfR1JQX0gKICNpbmNsdWRlIDxncnAuaD4KQEAgLTEwMDEwLDcgKzEwMTA4LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TRVRHUk9VUFMgMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtMTAzMDUsNyArMTA0MDMsNiBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBHRVRQR1JQX0hBVkVfQVJHIDEiID4+Y29uZmRlZnMuaAogCi0KIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTAzMzQsNyArMTA0MzEsNiBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBTRVRQR1JQX0hBVkVfQVJHIDEiID4+Y29uZmRlZnMuaAogCi0KIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTA0MjgsMjMgKzEwNTI0LDI5IEBACiBpbnQKIG1haW4gKCkKIHsKLQogZ2V0YWRkcmluZm8oTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRhZGRyaW5mbyBidWciID4mNQorICBoYXZlX2dldGFkZHJpbmZvPXllcworZWxzZQorICBoYXZlX2dldGFkZHJpbmZvPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9nZXRhZGRyaW5mbyIgPiY1CiskYXNfZWNobyAiJGhhdmVfZ2V0YWRkcmluZm8iID4mNjsgfQoraWYgdGVzdCAkaGF2ZV9nZXRhZGRyaW5mbyA9IHllcwordGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGdldGFkZHJpbmZvIGJ1ZyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBnZXRhZGRyaW5mbyBidWcuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGJ1Z2d5IiA+JjUKLSRhc19lY2hvICJidWdneSIgPiY2OyB9Ci1idWdneWdldGFkZHJpbmZvPXllcworICBpZiAke2FjX2N2X2J1Z2d5X2dldGFkZHJpbmZvKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9idWdneV9nZXRhZGRyaW5mbz15ZXMKIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwpAQCAtMTA0NTUsNyArMTA1NTcsNyBAQAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAKLW1haW4oKQoraW50IG1haW4oKQogewogICBpbnQgcGFzc2l2ZSwgZ2FpZXJyLCBpbmV0NCA9IDAsIGluZXQ2ID0gMDsKICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWksICphaXRvcDsKQEAgLTEwNTI3LDQwICsxMDYyOSwzNSBAQAogCiAgIGlmIChhaXRvcCkKICAgICBmcmVlYWRkcmluZm8oYWl0b3ApOwotICBleGl0KDApOworICByZXR1cm4gMDsKIAogIGJhZDoKICAgaWYgKGFpdG9wKQogICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMSk7CisgIHJldHVybiAxOwogfQogCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZ29vZCIgPiY1Ci0kYXNfZWNobyAiZ29vZCIgPiY2OyB9Ci1idWdneWdldGFkZHJpbmZvPW5vCisgIGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvPW5vCiBlbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBidWdneSIgPiY1Ci0kYXNfZWNobyAiYnVnZ3kiID4mNjsgfQotYnVnZ3lnZXRhZGRyaW5mbz15ZXMKKyAgYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89eWVzCiBmaQogcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotZWxzZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWJ1Z2d5Z2V0YWRkcmluZm89eWVzCitmaQogCiBmaQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAotaWYgdGVzdCAiJGJ1Z2d5Z2V0YWRkcmluZm8iID0gInllcyI7IHRoZW4KLQlpZiB0ZXN0ICIkaXB2NiIgPSAieWVzIjsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWdneV9nZXRhZGRyaW5mbyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvIiA+JjY7IH0KKworaWYgdGVzdCAkaGF2ZV9nZXRhZGRyaW5mbyA9IG5vIC1vICIkYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm8iID0geWVzCit0aGVuCisJaWYgdGVzdCAkaXB2NiA9IHllcworCXRoZW4KIAkJZWNobyAnRmF0YWw6IFlvdSBtdXN0IGdldCB3b3JraW5nIGdldGFkZHJpbmZvKCkgZnVuY3Rpb24uJwogCQllY2hvICcgICAgICAgb3IgeW91IGNhbiBzcGVjaWZ5ICItLWRpc2FibGUtaXB2NiInLgogCQlleGl0IDEKQEAgLTEwNTcwLDYgKzEwNjY3LDcgQEAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSIgPj5jb25mZGVmcy5oCiAKIGZpCisKIGZvciBhY19mdW5jIGluIGdldG5hbWVpbmZvCiBkbyA6CiAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldG5hbWVpbmZvIiAiYWNfY3ZfZnVuY19nZXRuYW1laW5mbyIKQEAgLTEwNzk2LDYgKzEwODk0LDcgQEAKIGlmICR7YWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSs6fSBmYWxzZTsgdGhlbiA6CiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCisKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHRpbWUuaD4KQEAgLTEwODEzLDYgKzEwOTEyLDcgQEAKICAgYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZT1ubwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiBmaQogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUiID4mNQpAQCAtMTA4NjAsOCArMTA5NjAsNyBAQAogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSMJCWluY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KIGludAogbWFpbiAoKQogewpAQCAtMTExMDMsMTEgKzExMjAyLDkgQEAKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogCi0KICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxIiA+PmNvbmZkZWZzLmgKIAotICBoYXZlX3Byb3RvdHlwZXM9eWVzCi0KKyAgIGhhdmVfcHJvdG90eXBlcz15ZXMKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9wcm90b3R5cGVzIiA+JjUKQEAgLTExMTcwLDcgKzExMjY3LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TT0NLRVRQQUlSIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTExMjA0LDYgKzExMzAxLDcgQEAKIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CisKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIApAQCAtMTEyOTMsNDMgKzExMzkxLDYgQEAKICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLSMgICAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gICAgICBjaGFyICpuYW1lOwotICAgICAgc3RydWN0IGhvc3RlbnQgKmhlOwotICAgICAgY2hhciBidWZmZXJbMjA0OF07Ci0gICAgICBpbnQgYnVmbGVuID0gMjA0ODsKLSAgICAgIGludCBoX2Vycm5vcDsKLQotICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgYnVmZmVyLCBidWZsZW4sICZoX2Vycm5vcCkKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEiID4+Y29uZmRlZnMuaAotCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfQVJHIDEiID4+Y29uZmRlZnMuaAotCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzLi4uICIgPiY2OyB9Ci0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KICMgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KIAogaW50CkBAIC0xMTMzOCw5ICsxMTM5OSwxMSBAQAogCiAgICAgICAgIGNoYXIgKm5hbWU7CiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgICAgc3RydWN0IGhvc3RlbnRfZGF0YSBkYXRhOworICAgICAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7CisgICAgICAgIGludCBoX2Vycm5vcDsKIAotICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCAmZGF0YSk7CisgICAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCiAKICAgOwogICByZXR1cm4gMDsKQEAgLTExMzUxLDcgKzExNDE0LDcgQEAKICAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMSIgPj5jb25mZGVmcy5oCiAKIAotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfM19BUkcgMSIgPj5jb25mZGVmcy5oCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAxIiA+PmNvbmZkZWZzLmgKIAogICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQpAQCAtMTEzNjAsNiArMTE0MjMsNDEgQEAKIAogICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZ2V0aG9zdGJ5bmFtZV9yIHdpdGggMyBhcmdzLi4uICIgPiY2OyB9CisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIyAgICAgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KKworaW50CittYWluICgpCit7CisKKyAgICAgICAgICAgIGNoYXIgKm5hbWU7CisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7CisgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudF9kYXRhIGRhdGE7CisKKyAgICAgICAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsICZkYXRhKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKyAgICAgICAgICAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitlbHNlCisKKyAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKQEAgLTExNjYzLDI0ICsxMTc2MSwyNCBAQAogIyBjb3JyZWN0bHktcm91bmRlZCBzdHJpbmcgPC0+IGRvdWJsZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmcm9tCiAjIFB5dGhvbi9kdG9hLmMsIHdoaWNoIGluIHR1cm4gcmVxdWlyZSB0aGF0IHRoZSBGUFUgdXNlcyA1My1iaXQKICMgcm91bmRpbmc7IHRoaXMgaXMgYSBwcm9ibGVtIG9uIHg4Niwgd2hlcmUgdGhlIHg4NyBGUFUgaGFzIGEgZGVmYXVsdAotIyByb3VuZGluZyBwcmVjaXNpb24gb2YgNjQgYml0cy4gIEZvciBnY2MveDg2LCB3ZSB0cnkgdG8gZml4IHRoaXMgYnkKKyMgcm91bmRpbmcgcHJlY2lzaW9uIG9mIDY0IGJpdHMuICBGb3IgZ2NjL3g4Niwgd2UgY2FuIGZpeCB0aGlzIGJ5CiAjIHVzaW5nIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgdGhlIHg4NyBGUFUgY29udHJvbCB3b3JkLgotaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAtbiAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBpMzg2YCIKLXRoZW4KLSAgICAjIENoZWNrIHRoYXQgaXQncyBva2F5IHRvIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldAotICAgICMgeDg3IGNvbnRyb2wgd29yZC4gIEl0IHNob3VsZCBiZSwgYnV0IHlvdSBuZXZlciBrbm93Li4uCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCIgPiY1CisKKyMgVGhpcyBpbmxpbmUgYXNzZW1ibGVyIHN5bnRheCBtYXkgYWxzbyB3b3JrIGZvciBzdW5jYyBhbmQgaWNjLAorIyBzbyB3ZSB0cnkgaXQgb24gYWxsIHBsYXRmb3Jtcy4KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZC4uLiAiID4mNjsgfQotICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7CiAKLSAgICAgIHVuc2lnbmVkIHNob3J0IGN3OwotICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbnN0Y3cgJTAiIDogIj1tIiAoY3cpKTsKLSAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiZmxkY3cgJTAiIDogOiAibSIgKGN3KSk7CisgIHVuc2lnbmVkIHNob3J0IGN3OworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjdykpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjdykpOwogCiAgIDsKICAgcmV0dXJuIDA7CkBAIC0xMTY5MiwxNCArMTE3OTAsMTMgQEAKICAgaGF2ZV9nY2NfYXNtX2Zvcl94ODc9bm8KIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfZ2NjX2FzbV9mb3JfeDg3IiA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID4mNQogJGFzX2VjaG8gIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPiY2OyB9Ci0gICAgaWYgdGVzdCAiJGhhdmVfZ2NjX2FzbV9mb3JfeDg3IiA9IHllcwotICAgIHRoZW4KK2lmIHRlc3QgIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPSB5ZXMKK3RoZW4KIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HQ0NfQVNNX0ZPUl9YODcgMSIgPj5jb25mZGVmcy5oCiAKLSAgICBmaQogZmkKIAogIyBEZXRlY3Qgd2hldGhlciBzeXN0ZW0gYXJpdGhtZXRpYyBpcyBzdWJqZWN0IHRvIHg4Ny1zdHlsZSBkb3VibGUKQEAgLTExNzY0LDYgKzExODYxLDY1IEBACiBMSUJTX1NBVkU9JExJQlMKIExJQlM9IiRMSUJTICRMSUJNIgogCitmb3IgYWNfZnVuYyBpbiBhY29zaCBhc2luaCBhdGFuaCBjb3B5c2lnbiBlcmYgZXJmYyBleHBtMSBmaW5pdGUgZ2FtbWEKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmb3IgYWNfZnVuYyBpbiBoeXBvdCBsZ2FtbWEgbG9nMXAgcm91bmQgdGdhbW1hCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXNpbmYiICJhY19jdl9oYXZlX2RlY2xfaXNpbmYiICIjaW5jbHVkZSA8bWF0aC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNpbmYiID0geHllczsgdGhlbiA6CisgIGFjX2hhdmVfZGVjbD0xCitlbHNlCisgIGFjX2hhdmVfZGVjbD0wCitmaQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfREVDTF9JU0lORiAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKK2FjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImlzbmFuIiAiYWNfY3ZfaGF2ZV9kZWNsX2lzbmFuIiAiI2luY2x1ZGUgPG1hdGguaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzbmFuIiA9IHh5ZXM7IHRoZW4gOgorICBhY19oYXZlX2RlY2w9MQorZWxzZQorICBhY19oYXZlX2RlY2w9MAorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RFQ0xfSVNOQU4gJGFjX2hhdmVfZGVjbAorX0FDRU9GCithY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJpc2Zpbml0ZSIgImFjX2N2X2hhdmVfZGVjbF9pc2Zpbml0ZSIgIiNpbmNsdWRlIDxtYXRoLmg+CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc2Zpbml0ZSIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX0lTRklOSVRFICRhY19oYXZlX2RlY2wKK19BQ0VPRgorCisKICMgT24gRnJlZUJTRCA2LjIsIGl0IGFwcGVhcnMgdGhhdCB0YW5oKC0wLikgcmV0dXJucyAwLiBpbnN0ZWFkIG9mCiAjIC0wLiBvbiBzb21lIGFyY2hpdGVjdHVyZXMuCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGFuaCBwcmVzZXJ2ZXMgdGhlIHNpZ24gb2YgemVybyIgPiY1CkBAIC0xMTgxMCw1MiArMTE5NjYsNTQgQEAKIAogZmkKIAotZm9yIGFjX2Z1bmMgaW4gYWNvc2ggYXNpbmggYXRhbmggY29weXNpZ24gZXhwbTEgZmluaXRlIGh5cG90IGxvZzFwIHJvdW5kCi1kbyA6Ci0gIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgotaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXNpbmYiICJhY19jdl9oYXZlX2RlY2xfaXNpbmYiICIjaW5jbHVkZSA8bWF0aC5oPgotIgotaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaXNpbmYiID0geHllczsgdGhlbiA6Ci0gIGFjX2hhdmVfZGVjbD0xCitpZiB0ZXN0ICIkYWNfY3ZfZnVuY19sb2cxcCIgPSB5ZXMKK3RoZW4KKyAgICAjIE9uIHNvbWUgdmVyc2lvbnMgb2YgQUlYLCBsb2cxcCgtMC4pIHJldHVybnMgMC4gaW5zdGVhZCBvZgorICAgICMgLTAuICBTZWUgaXNzdWUgIzk5MjAuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxvZzFwIGRyb3BzIHRoZSBzaWduIG9mIG5lZ2F0aXZlIHplcm8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsb2cxcCBkcm9wcyB0aGUgc2lnbiBvZiBuZWdhdGl2ZSB6ZXJvLi4uICIgPiY2OyB9CisgICAgaWYgJHthY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBhY19oYXZlX2RlY2w9MAotZmkKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfSVNJTkYgJGFjX2hhdmVfZGVjbAotX0FDRU9GCi1hY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJpc25hbiIgImFjX2N2X2hhdmVfZGVjbF9pc25hbiIgIiNpbmNsdWRlIDxtYXRoLmg+Ci0iCi1pZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc25hbiIgPSB4eWVzOyB0aGVuIDoKLSAgYWNfaGF2ZV9kZWNsPTEKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2xvZzFwX2Ryb3BzX3plcm9fc2lnbj1ubwogZWxzZQotICBhY19oYXZlX2RlY2w9MAotZmkKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfREVDTF9JU05BTiAkYWNfaGF2ZV9kZWNsCisgICAgI2luY2x1ZGUgPG1hdGguaD4KKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgaW50IG1haW4oKSB7CisgICAgICAgIC8qIEZhaWwgaWYgdGhlIHNpZ25zIG9mIGxvZzFwKC0wLikgYW5kIC0wLiBjYW4gYmUKKwkgICBkaXN0aW5ndWlzaGVkLiAqLworICAgICAgICBpZiAoYXRhbjIobG9nMXAoLTAuKSwgLTEuKSA9PSBhdGFuMigtMC4sIC0xLikpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiBfQUNFT0YKLWFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImlzZmluaXRlIiAiYWNfY3ZfaGF2ZV9kZWNsX2lzZmluaXRlIiAiI2luY2x1ZGUgPG1hdGguaD4KLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzZmluaXRlIiA9IHh5ZXM7IHRoZW4gOgotICBhY19oYXZlX2RlY2w9MQoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xvZzFwX2Ryb3BzX3plcm9fc2lnbj1ubwogZWxzZQotICBhY19oYXZlX2RlY2w9MAorICBhY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ249eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0RFQ0xfSVNGSU5JVEUgJGFjX2hhdmVfZGVjbAotX0FDRU9GCitmaQogCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ24iID4mNjsgfQorZmkKK2lmIHRlc3QgIiRhY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ24iID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIExPRzFQX0RST1BTX1pFUk9fU0lHTiAxIiA+PmNvbmZkZWZzLmgKKworZmkKIAogTElCUz0kTElCU19TQVZFCiAKQEAgLTExOTE3LDExICsxMjA3NSwxMSBAQAogIyBNdWx0aXByb2Nlc3NpbmcgY2hlY2sgZm9yIGJyb2tlbiBzZW1fZ2V0dmFsdWUKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJyb2tlbiBzZW1fZ2V0dmFsdWUiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGJyb2tlbiBzZW1fZ2V0dmFsdWUuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQoraWYgJHthY19jdl9icm9rZW5fc2VtX2dldHZhbHVlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllcwogZWxzZQogICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCkBAIC0xMTk0NywyNCArMTIxMDUsMjggQEAKICAgcmV0dXJuIHJlcz09LTEgPyAxIDogMDsKIH0KIAotCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT1ubwogZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUgMSIgPj5jb25mZGVmcy5oCi0KLQorICBhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlPXllcwogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKICAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKIAorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBkZXRlcm1pbmUgd2hhdCBzaXplIGRpZ2l0IHRvIHVzZSBmb3IgUHl0aG9uJ3MgbG9uZ3MKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGlnaXQgc2l6ZSBmb3IgUHl0aG9uJ3MgbG9uZ3MiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGlnaXQgc2l6ZSBmb3IgUHl0aG9uJ3MgbG9uZ3MuLi4gIiA+JjY7IH0KQEAgLTEyMTMyLDcgKzEyMjk0LDcgQEAKIGVsc2UKIAogY2FzZSAiJGhhdmVfdWNzNF90Y2wiIGluCi0gIHllcykgdW5pY29kZV9zaXplPSI0IiA7OworICB5ZXMpIHVuaWNvZGVfc2l6ZT0iNCI7OwogICAqKSAgIHVuaWNvZGVfc2l6ZT0iMiIgOzsKIGVzYWMKIApAQCAtMTIxNDEsOCArMTIzMDMsMTEgQEAKIAogCiBjYXNlICIkdW5pY29kZV9zaXplIiBpbgotICA0KSAkYXNfZWNobyAiI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgNCIgPj5jb25mZGVmcy5oCi0gOzsKKyAgNCkKKyAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfVU5JQ09ERV9TSVpFIDQiID4+Y29uZmRlZnMuaAorCisgICAgIEFCSUZMQUdTPSIke0FCSUZMQUdTfXUiCisgICAgIDs7CiAgICopICRhc19lY2hvICIjZGVmaW5lIFB5X1VOSUNPREVfU0laRSAyIiA+PmNvbmZkZWZzLmgKICA7OwogZXNhYwpAQCAtMTI0MDEsNiArMTI1NjYsNzAgQEAKICBlc2FjCiAKIAorIyBBQkkgdmVyc2lvbiBzdHJpbmcgZm9yIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlcy4gIFRoaXMgYXBwZWFycyBiZXR3ZWVuIHRoZQorIyBwZXJpb2RzIGluIHNoYXJlZCBsaWJyYXJ5IGZpbGUgbmFtZXMsIGUuZy4gZm9vLjxTT0FCST4uc28uICBJdCBpcyBjYWxjdWxhdGVkCisjIGZyb20gdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHdoaWNoIGFmZmVjdCB0aGUgQUJJIG9mIHRoaXMgUHl0aG9uIGJ1aWxkIChpbgorIyB0aGlzIG9yZGVyKToKKyMKKyMgKiBUaGUgUHl0aG9uIGltcGxlbWVudGF0aW9uIChhbHdheXMgJ2NweXRob24tJyBmb3IgdXMpCisjICogVGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMKKyMgKiAtLXdpdGgtcHlkZWJ1ZyAoYWRkcyBhICdkJykKKyMgKiAtLXdpdGgtcHltYWxsb2MgKGFkZHMgYSAnbScpCisjICogLS13aXRoLXdpZGUtdW5pY29kZSAoYWRkcyBhICd1JykKKyMKKyMgVGh1cyBmb3IgZXhhbXBsZSwgUHl0aG9uIDMuMiBidWlsdCB3aXRoIHdpZGUgdW5pY29kZSwgcHlkZWJ1ZywgYW5kIHB5bWFsbG9jLAorIyB3b3VsZCBnZXQgYSBzaGFyZWQgbGlicmFyeSBBQkkgdmVyc2lvbiB0YWcgb2YgJ2NweXRob24tMzJkbXUnIGFuZCBzaGFyZWQKKyMgbGlicmFyaWVzIHdvdWxkIGJlIG5hbWVkICdmb28uY3B5dGhvbi0zMmRtdS5zbycuCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgQUJJRkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgQUJJRkxBR1MuLi4gIiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQUJJRkxBR1MiID4mNQorJGFzX2VjaG8gIiRBQklGTEFHUyIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIFNPQUJJIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIFNPQUJJLi4uICIgPiY2OyB9CitTT0FCST0nY3B5dGhvbi0nYGVjaG8gJFZFUlNJT04gfCB0ciAtZCAuYCR7QUJJRkxBR1N9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNPQUJJIiA+JjUKKyRhc19lY2hvICIkU09BQkkiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIExEVkVSU0lPTiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBMRFZFUlNJT04uLi4gIiA+JjY7IH0KK0xEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRFZFUlNJT04iID4mNQorJGFzX2VjaG8gIiRMRFZFUlNJT04iID4mNjsgfQorCisjIFNPIGlzIHRoZSBleHRlbnNpb24gb2Ygc2hhcmVkIGxpYnJhcmllcyBgKGluY2x1ZGluZyB0aGUgZG90ISkKKyMgLS0gdXN1YWxseSAuc28sIC5zbCBvbiBIUC1VWCwgLmRsbCBvbiBDeWd3aW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgU08iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgU08uLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRTTyIKK3RoZW4KKwljYXNlICRhY19zeXNfc3lzdGVtIGluCisJaHAqfEhQKikKKwkJY2FzZSBgdW5hbWUgLW1gIGluCisJCQlpYTY0KSBTTz0uc287OworCSAgCQkqKSAgICBTTz0uc2w7OworCQllc2FjCisJCTs7CisJQ1lHV0lOKikgICBTTz0uZGxsOzsKKwlMaW51eCp8R05VKikKKwkJICAgU089LiR7U09BQkl9LnNvOzsKKwkqKQkgICBTTz0uc287OworCWVzYWMKK2Vsc2UKKwkjIHRoaXMgbWlnaHQgYWxzbyBiZSBhIHRlcm1jYXAgdmFyaWFibGUsIHNlZSAjNjEwMzMyCisJZWNobworCWVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKKwllY2hvICcrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsnCisJZWNobyAnKyBXQVJOSU5HOiBZb3UgaGF2ZSBzZXQgU08gaW4geW91ciBlbnZpcm9ubWVudC4gICAgICAgICAgICAgICAgICAgICArJworCWVjaG8gJysgRG8geW91IHJlYWxseSBtZWFuIHRvIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzPyAgKycKKwllY2hvICcrIENvbnRpbnVpbmcgaW4gMTAgc2Vjb25kcyB0byBsZXQgeW91IHRvIHBvbmRlci4gICAgICAgICAgICAgICAgICAgICsnCisJZWNobyAnKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArJworCWVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKKwlzbGVlcCAxMAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU08iID4mNQorJGFzX2VjaG8gIiRTTyIgPiY2OyB9CisKICMgQ2hlY2sgd2hldGhlciByaWdodCBzaGlmdGluZyBhIG5lZ2F0aXZlIGludGVnZXIgZXh0ZW5kcyB0aGUgc2lnbiBiaXQKICMgb3IgZmlsbHMgd2l0aCB6ZXJvcyAobGlrZSB0aGUgQ3JheSBKOTAsIGFjY29yZGluZyB0byBUaW0gUGV0ZXJzKS4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCIgPiY1CkBAIC0xMjU5Miw2ICsxMjgyMSw3IEBACiAgIGhhdmVfcmVhZGxpbmU9eWVzCiBlbHNlCiAgIGhhdmVfcmVhZGxpbmU9bm8KKwogZmkKIHJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKQEAgLTEyNzY1LDYgKzEyOTk1LDcgQEAKICAgaGF2ZV9yZWFkbGluZT15ZXMKIGVsc2UKICAgaGF2ZV9yZWFkbGluZT1ubworCiBmaQogcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogaWYgdGVzdCAkaGF2ZV9yZWFkbGluZSA9IHllcwpAQCAtMTI4MzAsNyArMTMwNjEsMTAgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIHBvbGwoKSIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgYnJva2VuIHBvbGwoKS4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgoraWYgJHthY19jdl9icm9rZW5fcG9sbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfYnJva2VuX3BvbGw9bm8KIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTI4MzgsMjcgKzEzMDcyLDIxIEBACiAKICNpbmNsdWRlIDxwb2xsLmg+CiAKLWludCBtYWluICh2b2lkKQotICAgIHsKK2ludCBtYWluKCkKK3sKICAgICBzdHJ1Y3QgcG9sbGZkIHBvbGxfc3RydWN0ID0geyA0MiwgUE9MTElOfFBPTExQUkl8UE9MTE9VVCwgMCB9OworICAgIGludCBwb2xsX3Rlc3Q7CiAKICAgICBjbG9zZSAoNDIpOwogCi0gICAgaW50IHBvbGxfdGVzdCA9IHBvbGwgKCZwb2xsX3N0cnVjdCwgMSwgMCk7Ci0KKyAgICBwb2xsX3Rlc3QgPSBwb2xsKCZwb2xsX3N0cnVjdCwgMSwgMCk7CiAgICAgaWYgKHBvbGxfdGVzdCA8IDApCi0gICAgICAgIHsKLSAgICAgICAgZXhpdCgwKTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKICAgICBlbHNlIGlmIChwb2xsX3Rlc3QgPT0gMCAmJiBwb2xsX3N0cnVjdC5yZXZlbnRzICE9IFBPTExOVkFMKQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgICAgIHJldHVybiAxOworfQogCiBfQUNFT0YKIGlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgpAQCAtMTI4NzAsNiArMTMwOTgsOCBAQAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAorZmkKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9icm9rZW5fcG9sbCIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2Jyb2tlbl9wb2xsIiA+JjY7IH0KIGlmIHRlc3QgIiRhY19jdl9icm9rZW5fcG9sbCIgPSB5ZXMKQEAgLTEzMjE0LDcgKzEzNDQ0LDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVEIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTEzMjQwLDcgKzEzNDcwLDcgQEAKIAogJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0gMSIgPj5jb25mZGVmcy5oCiAKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQpAQCAtMTMyNjYsNyArMTM0OTYsNyBAQAogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0NVUlNFU19SRVNJWkVURVJNIDEiID4+Y29uZmRlZnMuaAogCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiAkYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKQEAgLTEzMzA1LDE2ICsxMzUzNSw5MCBAQAogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0Li4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2lmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMKK3RoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJWxsZCBhbmQgJWxsdSBwcmludGYoKSBmb3JtYXQgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJWxsZCBhbmQgJWxsdSBwcmludGYoKSBmb3JtYXQgc3VwcG9ydC4uLiAiID4mNjsgfQorICBpZiAke2FjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PW5vCiBlbHNlCiAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgI2luY2x1ZGUgPHN0ZGRlZi5oPgorICAjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyAgI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAjZW5kaWYKKworICBpbnQgbWFpbigpCisgIHsKKyAgICAgIGNoYXIgYnVmZmVyWzI1Nl07CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbGQiLCAobG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgaWYgKHNwcmludGYoYnVmZmVyLCAiJWxsZCIsIChsb25nIGxvbmcpLTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICItMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKTEyMykgPCAwKQorICAgICAgICAgIHJldHVybiAxOworICAgICAgaWYgKHN0cmNtcChidWZmZXIsICIxMjMiKSkKKyAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgcmV0dXJuIDA7CisgIH0KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllcworZWxzZQorICBhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCisKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQiID4mNjsgfQorZmkKKworaWYgdGVzdCAiJGFjX2N2X2hhdmVfbG9uZ19sb25nX2Zvcm1hdCIgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUFlfRk9STUFUX0xPTkdfTE9ORyBcImxsXCIiID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCit0aGVuCisJTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICV6ZCBwcmludGYoKSBmb3JtYXQgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PSJjcm9zcyAtLSBhc3N1bWluZyB5ZXMiCisKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTEzMzQ5LDIxICsxMzY1MywyNSBAQAogCiAgICAgcmV0dXJuIDA7CiB9CisKIF9BQ0VPRgogaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSRhc19lY2hvICIjZGVmaW5lIFBZX0ZPUk1BVF9TSVpFX1QgXCJ6XCIiID4+Y29uZmRlZnMuaAotCisgIGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD15ZXMKIGVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9CisgIGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD1ubwogZmkKIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKICAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0IiAhPSBubyA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUFlfRk9STUFUX1NJWkVfVCBcInpcIiIgPj5jb25mZGVmcy5oCisKK2ZpCiAKIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNvY2tsZW5fdCIgImFjX2N2X3R5cGVfc29ja2xlbl90IiAiCiAjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSApAQCAtMTMzODUsNyArMTM2OTMsMTAgQEAKIAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYnJva2VuIG1ic3Rvd2NzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBicm9rZW4gbWJzdG93Y3MuLi4gIiA+JjY7IH0KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKK2lmICR7YWNfY3ZfYnJva2VuX21ic3Rvd2NzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9icm9rZW5fbWJzdG93Y3M9bm8KIGVsc2UKICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dApAQCAtMTM0MDksNiArMTM3MjAsOCBAQAogICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAogZmkKIAorZmkKKwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9icm9rZW5fbWJzdG93Y3MiID4mNQogJGFzX2VjaG8gIiRhY19jdl9icm9rZW5fbWJzdG93Y3MiID4mNjsgfQogaWYgdGVzdCAiJGFjX2N2X2Jyb2tlbl9tYnN0b3djcyIgPSB5ZXMKQEAgLTEzNDE4LDYgKzEzNzMxLDQ5IEBACiAKIGZpCiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0Mgc3VwcG9ydHMgY29tcHV0ZWQgZ290b3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0Mgc3VwcG9ydHMgY29tcHV0ZWQgZ290b3MuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY29tcHV0ZWRfZ290b3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFjX2N2X2NvbXB1dGVkX2dvdG9zPW5vCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHN0YXRpYyB2b2lkICp0YXJnZXRzWzFdID0geyAmJkxBQkVMMSB9OworICAgIGdvdG8gTEFCRUwyOworTEFCRUwxOgorICAgIHJldHVybiAwOworTEFCRUwyOgorICAgIGdvdG8gKnRhcmdldHNbMF07CisgICAgcmV0dXJuIDE7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NvbXB1dGVkX2dvdG9zPXllcworZWxzZQorICBhY19jdl9jb21wdXRlZF9nb3Rvcz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY29tcHV0ZWRfZ290b3MiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jb21wdXRlZF9nb3RvcyIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfY29tcHV0ZWRfZ290b3MiID0geWVzCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09NUFVURURfR09UT1MgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKICMgQ2hlY2sgZm9yIC0td2l0aC1jb21wdXRlZC1nb3RvcwogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLS13aXRoLWNvbXB1dGVkLWdvdG9zIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciAtLXdpdGgtY29tcHV0ZWQtZ290b3MuLi4gIiA+JjY7IH0KQEAgLTEzNDI1LDI4ICsxMzc4MSw0OCBAQAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jb21wdXRlZC1nb3RvcyB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfY29tcHV0ZWRfZ290b3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgogICB3aXRodmFsPSR3aXRoX2NvbXB1dGVkX2dvdG9zOwotaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMKIHRoZW4KIAogJGFzX2VjaG8gIiNkZWZpbmUgVVNFX0NPTVBVVEVEX0dPVE9TIDEiID4+Y29uZmRlZnMuaAogCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQogZmkKLWVsc2UKK2lmIHRlc3QgIiR3aXRodmFsIiA9IG5vCit0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFVTRV9DT01QVVRFRF9HT1RPUyAwIiA+PmNvbmZkZWZzLmgKKwogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLQotaWYgdGVzdCAkYWNfc3lzX3N5c3RlbSA9IERhcndpbgotdGhlbgotCUxJQlM9IiRMSUJTIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyB2YWx1ZSBzcGVjaWZpZWQiID4mNQorJGFzX2VjaG8gIm5vIHZhbHVlIHNwZWNpZmllZCIgPiY2OyB9CiBmaQogCiAKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KK0FJWCopCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlJPS0VOX1BJUEVfQlVGIDEiID4+Y29uZmRlZnMuaAorIDs7Citlc2FjCisKKworY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBPU0YqKSBhc19mbl9lcnJvciAkPyAiT1NGKiBzeXN0ZW1zIGFyZSBkZXByZWNhdGVkIHVubGVzcyBzb21lYm9keSB2b2x1bnRlZXJzLiBDaGVjayBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODYwNiIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicGlwZTIiICJhY19jdl9mdW5jX3BpcGUyIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3BpcGUyIiA9IHh5ZXM7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BJUEUyIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAKIAogCkBAIC0xMzk5MSw3ICsxNDM2Nyw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMSwgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy4yLCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE0MDUzLDcgKzE0NDI5LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjEKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuMgogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmluZGV4IDliN2E1YTcuLmFhZWI5YmMgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5pbgorKysgYi9jb25maWd1cmUuaW4KQEAgLTEsMTMgKzEsMjAgQEAKIGRubCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogZG5sICogUGxlYXNlIHJ1biBhdXRvcmVjb25mIHRvIHRlc3QgeW91ciBjaGFuZ2VzISAqCiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLWRubCBOT1RFOiBhdXRvY29uZiAyLjY0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrICh1c2UgMi42MSkuCiAKICMgU2V0IFZFUlNJT04gc28gd2Ugb25seSBuZWVkIHRvIGVkaXQgaW4gb25lIHBsYWNlIChpLmUuLCBoZXJlKQotbTRfZGVmaW5lKFBZVEhPTl9WRVJTSU9OLCAzLjEpCittNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMikKKworZG5sIFNvbWUgbTQgbWFnaWMgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZ2VuZXJhdGVkCitkbmwgYnkgdGhlIGNvcnJlY3QgYXV0b2NvbmYgdmVyc2lvbi4KK200X2RlZmluZShbdmVyc2lvbl9yZXF1aXJlZF0sCitbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW200X1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgMCwKKyAgICAgICBbXSwKKyAgICAgICBbbTRfZmF0YWwoW0F1dG9jb25mIHZlcnNpb24gJDEgaXMgcmVxdWlyZWQgZm9yIFB5dGhvbl0sIDYzKV0pCitdKQorQUNfUFJFUkVRKDIuNjUpCiAKIEFDX1JFVklTSU9OKCRSZXZpc2lvbiQpCi1BQ19QUkVSRVEoMi42MSkKIEFDX0lOSVQocHl0aG9uLCBQWVRIT05fVkVSU0lPTiwgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy8pCiBBQ19DT05GSUdfU1JDRElSKFtJbmNsdWRlL29iamVjdC5oXSkKIEFDX0NPTkZJR19IRUFERVIocHljb25maWcuaCkKQEAgLTQ1LDYgKzUyLDcgQEAKIEFDX1NVQlNUKFZFUlNJT04pCiBWRVJTSU9OPVBZVEhPTl9WRVJTSU9OCiAKKyMgVmVyc2lvbiBudW1iZXIgb2YgUHl0aG9uJ3Mgb3duIHNoYXJlZCBsaWJyYXJ5IGZpbGUuCiBBQ19TVUJTVChTT1ZFUlNJT04pCiBTT1ZFUlNJT049MS4wCiAKQEAgLTgwLDcgKzg4LDcgQEAKIAogQUNfTVNHX0NIRUNLSU5HKFtmb3IgLS1lbmFibGUtdW5pdmVyc2Fsc2RrXSkKIEFDX0FSR19FTkFCTEUodW5pdmVyc2Fsc2RrLAotCUFDX0hFTFBfU1RSSU5HKC0tZW5hYmxlLXVuaXZlcnNhbHNka0A8OkA9U0RLRElSQDo+QCwgQnVpbGQgYWdhaW5zdCBNYWMgT1MgWCAxMC40dSBTREsgKHBwYy9pMzg2KSksCisJQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXVuaXZlcnNhbHNka0A8OkA9U0RLRElSQDo+QF0sIFtCdWlsZCBhZ2FpbnN0IE1hYyBPUyBYIDEwLjR1IFNESyAocHBjL2kzODYpXSksCiBbCiAJY2FzZSAkZW5hYmxldmFsIGluCiAJeWVzKQpAQCAtMTIxLDEwICsxMjksOSBAQAogCiBVTklWRVJTQUxfQVJDSFM9IjMyLWJpdCIKIEFDX1NVQlNUKExJUE9fMzJCSVRfRkxBR1MpCi1BQ19TVUJTVChMSVBPXzY0QklUX0ZMQUdTKQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzKQogQUNfQVJHX1dJVEgodW5pdmVyc2FsLWFyY2hzLAotICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSCwgc2VsZWN0IGFyY2hpdGVjdHVyZXMgZm9yIHVuaXZlcnNhbCBidWlsZCAoIjMyLWJpdCIsICI2NC1iaXQiLCAiMy13YXkiLCAiaW50ZWwiIG9yICJhbGwiKSksCisgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC11bml2ZXJzYWwtYXJjaHM9QVJDSF0sIFtzZWxlY3QgYXJjaGl0ZWN0dXJlcyBmb3IgdW5pdmVyc2FsIGJ1aWxkICgiMzItYml0IiwgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIgb3IgImFsbCIpXSksCiBbCiAJQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgpAQCAtMTM2LDggKzE0Myw4IEBACiAKIAogQUNfQVJHX1dJVEgoZnJhbWV3b3JrLW5hbWUsCi0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUkssIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZ5IGFuIGFsdGVybmF0ZSBuYW1lIG9mIHRoZSBmcmFtZXdvcmsgYnVpbHQgd2l0aCAtLWVuYWJsZS1mcmFtZXdvcmspLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWZyYW1ld29yay1uYW1lPUZSQU1FV09SS10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcGVjaWZ5IGFuIGFsdGVybmF0ZSBuYW1lIG9mIHRoZSBmcmFtZXdvcmsgYnVpbHQgd2l0aCAtLWVuYWJsZS1mcmFtZXdvcmtdKSwKIFsKICAgICBQWVRIT05GUkFNRVdPUks9JHt3aXRodmFsfQogICAgIFBZVEhPTkZSQU1FV09SS0RJUj0ke3dpdGh2YWx9LmZyYW1ld29yawpAQCAtMTQ5LDcgKzE1Niw3IEBACiBdKQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19FTkFCTEUoZnJhbWV3b3JrLAotICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLWVuYWJsZS1mcmFtZXdvcmtAPDpAPUlOU1RBTExESVJAOj5ALCBCdWlsZCAoTWFjT1NYfERhcndpbikgZnJhbWV3b3JrKSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZyYW1ld29ya0A8OkA9SU5TVEFMTERJUkA6PkBdLCBbQnVpbGQgKE1hY09TWHxEYXJ3aW4pIGZyYW1ld29ya10pLAogWwogCWNhc2UgJGVuYWJsZXZhbCBpbgogCXllcykgCkBAIC0xNzMsMjYgKzE4MCw1NSBAQAogCQllbmFibGVfZnJhbWV3b3JrPQogCQk7OwogCSopCi0JCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0kZW5hYmxldmFsCisJCVBZVEhPTkZSQU1FV09SS1BSRUZJWD0iJHtlbmFibGV2YWx9IgogCQlQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSPSRQWVRIT05GUkFNRVdPUktQUkVGSVgvJFBZVEhPTkZSQU1FV09SS0RJUgogCQlGUkFNRVdPUktJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUiCiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0iZnJhbWV3b3JraW5zdGFsbHN0cnVjdHVyZSAiCi0JCWNhc2UgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgaW4KLQkJYWxsfDMtd2F5fGludGVsKQotCQkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHM0d2F5IGZyYW1ld29ya2FsdGluc3RhbGx1bml4dG9vbHM0d2F5IgotCQkJOzsKLQkJKikKLQkJCUZSQU1FV09SS0lOU1RBTExMQVNUPSJmcmFtZXdvcmtpbnN0YWxsbWFjbGliIGZyYW1ld29ya2luc3RhbGxhcHBzIGZyYW1ld29ya2luc3RhbGx1bml4dG9vbHMiCi0JCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgotCQkJOzsKLQkJZXNhYworCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9IiR7YWNfZGVmYXVsdF9wcmVmaXh9IgorCiAJCWVsc2UKIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtwcmVmaXh9IgogCQlmaQorCisJCWNhc2UgIiR7ZW5hYmxldmFsfSIgaW4KKwkJL1N5c3RlbSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCWlmIHRlc3QgIiR7cHJlZml4fSIgPSAiTk9ORSIgOyB0aGVuCisJCQkJIyBTZWUgYmVsb3cKKwkJCQlGUkFNRVdPUktVTklYVE9PTFNQUkVGSVg9Ii91c3IiCisJCQlmaQorCQkJOzsKKworCQkvTGlicmFyeSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisKKwkJKi9MaWJyYXJ5L0ZyYW1ld29ya3MpCisJCQlNRElSPSJgZGlybmFtZSAiJHtlbmFibGV2YWx9ImAiCisJCQlNRElSPSJgZGlybmFtZSAiJHtNRElSfSJgIgorCQkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9IiR7TURJUn0vQXBwbGljYXRpb25zIgorCisJCQlpZiB0ZXN0ICIke3ByZWZpeH0iID0gIk5PTkUiOyB0aGVuCisJCQkJIyBVc2VyIGhhc24ndCBzcGVjaWZpZWQgdGhlIAorCQkJCSMgLS1wcmVmaXggb3B0aW9uLCBidXQgd2FudHMgdG8gaW5zdGFsbAorCQkJCSMgdGhlIGZyYW1ld29yayBpbiBhIG5vbi1kZWZhdWx0IGxvY2F0aW9uLAorCQkJCSMgZW5zdXJlIHRoYXQgdGhlIGNvbXBhdGliaWxpdHkgbGlua3MgZ2V0CisJCQkJIyBpbnN0YWxsZWQgcmVsYXRpdmUgdG8gdGhhdCBwcmVmaXggYXMgd2VsbAorCQkJCSMgaW5zdGVhZCBvZiBpbiAvdXNyL2xvY2FsLgorCQkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHtNRElSfSIKKwkJCWZpCisJCQk7OworCisJCSopCisJCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKKwkJCTs7CisJCWVzYWMKKwogCQlwcmVmaXg9JFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIvVmVyc2lvbnMvJFZFUlNJT04KIAogCQkjIEFkZCBmaWxlcyBmb3IgTWFjIHNwZWNpZmljIGNvZGUgdG8gdGhlIGxpc3Qgb2Ygb3V0cHV0CkBAIC0yMTgsMTEgKzI1NCw2IEBACiAJZmkKIAllbmFibGVfZnJhbWV3b3JrPQogCi0JaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiAKLQl0aGVuCi0JCUZSQU1FV09SS0lOU1RBTExMQVNUPXVwZGF0ZTR3YXl1bml2ZXJzYWwKLQkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9dXBkYXRlNHdheXVuaXZlcnNhbAotCWZpCiBdKQogQUNfU1VCU1QoUFlUSE9ORlJBTUVXT1JLKQogQUNfU1VCU1QoUFlUSE9ORlJBTUVXT1JLSURFTlRJRklFUikKQEAgLTIzNCwxMCArMjY1LDExIEBACiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QpCiBBQ19TVUJTVChGUkFNRVdPUktBTFRJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKK0FDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCiAjI0FDX0FSR19XSVRIKGR5bGQsCi0jIyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1keWxkLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcikpCisjIyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZHlsZF0sCisjIyAgICAgICAgICAgICAgICAgICAgICAgICAgIFtVc2UgKE9wZW5TdGVwfFJoYXBzb2R5KSBkeW5hbWljIGxpbmtlcl0pKQogIyMKICMgU2V0IG5hbWUgZm9yIG1hY2hpbmUtZGVwZW5kZW50IGxpYnJhcnkgZmlsZXMKIEFDX1NVQlNUKE1BQ0hERVApCkBAIC0yNjAsNyArMjkyLDYgQEAKIAljYXNlICRNQUNIREVQIGluCiAJY3lnd2luKikgTUFDSERFUD0iY3lnd2luIjs7CiAJZGFyd2luKikgTUFDSERFUD0iZGFyd2luIjs7Ci0JYXRoZW9zKikgTUFDSERFUD0iYXRoZW9zIjs7CiAgICAgICAgIGlyaXg2NDYpIE1BQ0hERVA9ImlyaXg2Ijs7CiAJJycpCU1BQ0hERVA9InVua25vd24iOzsKIAllc2FjCkBAIC0zMDAsOSArMzMxLDEyIEBACiAgICMgTWFyYyBSZWNodAogICBOZXRCU0QvMS41IHwgTmV0QlNELzEuNS4qIHwgTmV0QlNELzEuNiB8IE5ldEJTRC8xLjYuKiB8IE5ldEJTRC8xLjZAPDpAQS1TQDo+QCkKICAgICBkZWZpbmVfeG9wZW5fc291cmNlPW5vOzsKLSAgIyBPbiBTb2xhcmlzIDIuNiwgc3lzL3dhaXQuaCBpcyBpbmNvbnNpc3RlbnQgaW4gdGhlIHVzYWdlCi0gICMgb2YgdW5pb24gX18/c2lndmFsLiBSZXBvcnRlZCBieSBTdHVhcnQgQmlzaG9wLgotICBTdW5PUy81LjYpCisgICMgRnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgU29sYXJpcywgX1hPUEVOX1NPVVJDRSBpcyBub3Qgc28gbXVjaCBhCisgICMgcmVxdWVzdCB0byBlbmFibGUgZmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoZSBzdGFuZGFyZCBhcyBhIHJlcXVlc3QKKyAgIyB0byBkaXNhYmxlIGZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHN0YW5kYXJkLiAgVGhlIGJlc3Qgd2F5CisgICMgZm9yIFB5dGhvbiB0byB1c2UgU29sYXJpcyBpcyBzaW1wbHkgdG8gbGVhdmUgX1hPUEVOX1NPVVJDRSBvdXQKKyAgIyBlbnRpcmVseSBhbmQgZGVmaW5lIF9fRVhURU5TSU9OU19fIGluc3RlYWQuCisgIFN1bk9TLyopCiAgICAgZGVmaW5lX3hvcGVuX3NvdXJjZT1ubzs7CiAgICMgT24gVW5peFdhcmUgNywgdV9sb25nIGlzIG5ldmVyIGRlZmluZWQgd2l0aCBfWE9QRU5fU09VUkNFLAogICAjIGJ1dCB1c2VkIGluIC91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oLiBSZXBvcnRlZCBieSBUaW0gUmljZS4KQEAgLTM0OCwzNSArMzgyLDE1IEBACiAKIGlmIHRlc3QgJGRlZmluZV94b3Blbl9zb3VyY2UgPSB5ZXMKIHRoZW4KLSAgIyBPbiBTb2xhcmlzIHcvIGcrKyBpdCBhcHBlYXJzIHRoYXQgX1hPUEVOX1NPVVJDRSBoYXMgdG8gYmUKLSAgIyBkZWZpbmVkIHByZWNpc2VseSBhcyBnKysgZGVmaW5lcyBpdAotICAjIEZ1cnRoZXJtb3JlLCBvbiBTb2xhcmlzIDEwLCBYUEc2IHJlcXVpcmVzIHRoZSB1c2Ugb2YgYSBDOTkKLSAgIyBjb21waWxlcgotICBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICAgIFN1bk9TLzUuOHxTdW5PUy81Ljl8U3VuT1MvNS4xMHxTdW5PUy81LjExKQotICAgICAgQUNfREVGSU5FKF9YT1BFTl9TT1VSQ0UsIDUwMCwgCi0gICAgICAgICAgICAgICAgRGVmaW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cykKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX0RFRklORShfWE9QRU5fU09VUkNFLCA2MDAsIAotICAgICAgICAgICAgICAgIERlZmluZSB0byB0aGUgbGV2ZWwgb2YgWC9PcGVuIHRoYXQgeW91ciBzeXN0ZW0gc3VwcG9ydHMpCi0gICAgICA7OwotICBlc2FjCisgIEFDX0RFRklORShfWE9QRU5fU09VUkNFLCA2MDAsIAorICAgICAgICAgICAgRGVmaW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cykKIAogICAjIE9uIFRydTY0IFVuaXggNC4wRiwgZGVmaW5pbmcgX1hPUEVOX1NPVVJDRSBhbHNvIHJlcXVpcmVzCiAgICMgZGVmaW5pdGlvbiBvZiBfWE9QRU5fU09VUkNFX0VYVEVOREVEIGFuZCBfUE9TSVhfQ19TT1VSQ0UsIG9yIGVsc2UKICAgIyBzZXZlcmFsIEFQSXMgYXJlIG5vdCBkZWNsYXJlZC4gU2luY2UgdGhpcyBpcyBhbHNvIG5lZWRlZCBpbiBzb21lCiAgICMgY2FzZXMgZm9yIEhQLVVYLCB3ZSBkZWZpbmUgaXQgZ2xvYmFsbHkuCi0gICMgZXhjZXB0IGZvciBTb2xhcmlzIDEwLCB3aGVyZSBpdCBtdXN0IG5vdCBiZSBkZWZpbmVkLCAKLSAgIyBhcyBpdCBpbXBsaWVzIFhQRzQuMgotICBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgotICAgIFN1bk9TLzUuMTB8U3VuT1MvNS4xMSkKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIEFDX0RFRklORShfWE9QRU5fU09VUkNFX0VYVEVOREVELCAxLAotICAgICAgCQlEZWZpbmUgdG8gYWN0aXZhdGUgVW5peDk1LWFuZC1lYXJsaWVyIGZlYXR1cmVzKQotICAgICAgOzsKLSAgZXNhYworICBBQ19ERUZJTkUoX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCwgMSwKKyAgIAkgICAgRGVmaW5lIHRvIGFjdGl2YXRlIFVuaXg5NS1hbmQtZWFybGllciBmZWF0dXJlcykKIAogICBBQ19ERUZJTkUoX1BPU0lYX0NfU09VUkNFLCAyMDAxMTJMLCBEZWZpbmUgdG8gYWN0aXZhdGUgZmVhdHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDEpCiAgIApAQCAtNDI0LDcgKzQzOCw3IEBACiAjIG9uIHRoYXQgZmlkZGxlcyB3aXRoIE9QVCBhbmQgQkFTRUNGTEFHUz8KIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRob3V0LWdjYykKIEFDX0FSR19XSVRIKGdjYywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aG91dC1nY2MsbmV2ZXIgdXNlIGdjYyksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWdjY10sIFtuZXZlciB1c2UgZ2NjXSksCiBbCiAJY2FzZSAkd2l0aHZhbCBpbgogCW5vKQlDQz0ke0NDOi1jY30KQEAgLTQ0OCwxMyArNDYyLDE5IEBACiAoaXQgaXMgYWxzbyBhIGdvb2QgaWRlYSB0byBkbyAnbWFrZSBjbGVhbicgYmVmb3JlIGNvbXBpbGluZyldKQogZmkKIAorIyBEb24ndCBsZXQgQUNfUFJPR19DQyBzZXQgdGhlIGRlZmF1bHQgQ0ZMQUdTLiBJdCBub3JtYWxseSBzZXRzIC1nIC1PMgorIyB3aGVuIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGVtLCBidXQgd2UgZG9uJ3QgYWx3YXlzIHdhbnQgLU8yLCBhbmQKKyMgd2Ugc2V0IC1nIGxhdGVyLgoraWYgdGVzdCAteiAiJENGTEFHUyI7IHRoZW4KKyAgICAgICAgQ0ZMQUdTPQorZmkKIEFDX1BST0dfQ0MKIAogQUNfU1VCU1QoQ1hYKQogQUNfU1VCU1QoTUFJTkNDKQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtY3h4LW1haW49PGNvbXBpbGVyPikKIEFDX0FSR19XSVRIKGN4eF9tYWluLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1jeHgtbWFpbj08Y29tcGlsZXI+XSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3h4LW1haW49PGNvbXBpbGVyPl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGlsZSBtYWluKCkgYW5kIGxpbmsgcHl0aG9uIGV4ZWN1dGFibGUgd2l0aCBDKysgY29tcGlsZXJdKSwKIFsKIAkKQEAgLTUwNiw3ICs1MjYsNyBAQAogCiAKICMgY2hlY2tzIGZvciBVTklYIHZhcmlhbnRzIHRoYXQgc2V0IEMgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcwotQUNfQUlYCitBQ19VU0VfU1lTVEVNX0VYVEVOU0lPTlMKIAogIyBDaGVjayBmb3IgdW5zdXBwb3J0ZWQgc3lzdGVtcwogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KQEAgLTUxOSw3ICs1MzksNyBAQAogQUNfRVhFRVhUCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1zdWZmaXgpCiBBQ19BUkdfV0lUSChzdWZmaXgsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtc3VmZml4PS5leGUsIHNldCBleGVjdXRhYmxlIHN1ZmZpeCksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXN1ZmZpeD0uZXhlXSwgW3NldCBleGVjdXRhYmxlIHN1ZmZpeF0pLAogWwogCWNhc2UgJHdpdGh2YWwgaW4KIAlubykJRVhFRVhUPTs7CkBAIC01NTgsMTAgKzU3OCw2IEBACiAgICAgY2FzZSAkQ0MgaW4KICAgICBjY3wqL2NjKSBDQz0iJENDIC1BZSI7OwogICAgIGVzYWM7OwotU3VuT1MqKQotICAgICMgU29tZSBmdW5jdGlvbnMgaGF2ZSBhIHByb3RvdHlwZSBvbmx5IHdpdGggdGhhdCBkZWZpbmUsIGUuZy4gY29uZnN0cgotICAgIEFDX0RFRklORShfX0VYVEVOU0lPTlNfXywgMSwgW0RlZmluZWQgb24gU29sYXJpcyB0byBzZWUgYWRkaXRpb25hbCBmdW5jdGlvbiBwcm90b3R5cGVzLl0pCi0gICAgOzsKIGVzYWMKIAogCkBAIC01NjksNyArNTg1LDcgQEAKIEFDX01TR19DSEVDS0lORyhMSUJSQVJZKQogaWYgdGVzdCAteiAiJExJQlJBUlkiCiB0aGVuCi0JTElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5hJworCUxJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikkKEFCSUZMQUdTKS5hJwogZmkKIEFDX01TR19SRVNVTFQoJExJQlJBUlkpCiAKQEAgLTU4NiwxOCArNjAyLDI0IEBACiAjCiAjIElOU1RTT05BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IHRoYXQgd2lsbCBiZSB1c2UgdG8gaW5zdGFsbAogIyBvbiB0aGUgc3lzdGVtIC0gc29tZSBzeXN0ZW1zIGxpa2UgdmVyc2lvbiBzdWZmaXgsIG90aGVycyBkb24ndAorIworIyBMRFZFUlNJT04gaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gbnVtYmVyLCBub3JtYWxseSB0aGUgUHl0aG9uIHZlcnNpb24KKyMgd2l0aCB0aGUgQUJJIGJ1aWxkIGZsYWdzIGFwcGVuZGVkLgogQUNfU1VCU1QoTERMSUJSQVJZKQogQUNfU1VCU1QoRExMTElCUkFSWSkKIEFDX1NVQlNUKEJMRExJQlJBUlkpCitBQ19TVUJTVChQWTNMSUJSQVJZKQogQUNfU1VCU1QoTERMSUJSQVJZRElSKQogQUNfU1VCU1QoSU5TVFNPTkFNRSkKIEFDX1NVQlNUKFJVTlNIQVJFRCkKK0FDX1NVQlNUKExEVkVSU0lPTikKIExETElCUkFSWT0iJExJQlJBUlkiCiBCTERMSUJSQVJZPSckKExETElCUkFSWSknCiBJTlNUU09OQU1FPSckKExETElCUkFSWSknCiBETExMSUJSQVJZPScnCiBMRExJQlJBUllESVI9JycKIFJVTlNIQVJFRD0nJworTERWRVJTSU9OPSIkVkVSU0lPTiIKIAogIyBMSU5LQ0MgaXMgdGhlIGNvbW1hbmQgdGhhdCBsaW5rcyB0aGUgcHl0aG9uIGV4ZWN1dGFibGUgLS0gZGVmYXVsdCBpcyAkKENDKS4KICMgSWYgQ1hYIGlzIHNldCwgYW5kIGlmIGl0IGlzIG5lZWRlZCB0byBsaW5rIGEgbWFpbiBmdW5jdGlvbiB0aGF0IHdhcwpAQCAtNjQ1LDE0ICs2NjcsMjEgQEAKIGVzYWMKIEFDX01TR19SRVNVTFQoJEdOVUxEKQogCitBQ19DX0lOTElORQoraWYgdGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyA7IHRoZW4KKyAgICAgICAgQUNfREVGSU5FKFVTRV9JTkxJTkUsIDEsIFtEZWZpbmUgdG8gdXNlIHRoZSBDOTkgaW5saW5lIGtleXdvcmQuXSkKKyAgICAgICAgQUNfU1VCU1QoVVNFX0lOTElORSkKK2ZpCisKKwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLWVuYWJsZS1zaGFyZWQpCiBBQ19BUkdfRU5BQkxFKHNoYXJlZCwKLSAgICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS1lbmFibGUtc2hhcmVkLCBkaXNhYmxlL2VuYWJsZSBidWlsZGluZyBzaGFyZWQgcHl0aG9uIGxpYnJhcnkpKQorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc2hhcmVkXSwgW2Rpc2FibGUvZW5hYmxlIGJ1aWxkaW5nIHNoYXJlZCBweXRob24gbGlicmFyeV0pKQogCiBpZiB0ZXN0IC16ICIkZW5hYmxlX3NoYXJlZCIKIHRoZW4gCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KLSAgQ1lHV0lOKiB8IGF0aGVvcyopCisgIENZR1dJTiopCiAgICAgZW5hYmxlX3NoYXJlZD0ieWVzIjs7CiAgICopCiAgICAgZW5hYmxlX3NoYXJlZD0ibm8iOzsKQEAgLTY2MiwxMyArNjkxLDEzIEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtcHJvZmlsaW5nKQogQUNfQVJHX0VOQUJMRShwcm9maWxpbmcsCi0gICAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0tZW5hYmxlLXByb2ZpbGluZywgZW5hYmxlIEMtbGV2ZWwgY29kZSBwcm9maWxpbmcpLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcHJvZmlsaW5nXSwgW2VuYWJsZSBDLWxldmVsIGNvZGUgcHJvZmlsaW5nXSksCiBbYWNfc2F2ZV9jYz0iJENDIgogIENDPSIkQ0MgLXBnIgotIEFDX1RSWV9SVU4oW2ludCBtYWluKCkgeyByZXR1cm4gMDsgfV0sCi0gICBhY19lbmFibGVfcHJvZmlsaW5nPSJ5ZXMiLAotICAgYWNfZW5hYmxlX3Byb2ZpbGluZz0ibm8iLAotICAgYWNfZW5hYmxlX3Byb2ZpbGluZz0ibm8iKQorIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XV0pXSwKKyAgIFthY19lbmFibGVfcHJvZmlsaW5nPSJ5ZXMiXSwKKyAgIFthY19lbmFibGVfcHJvZmlsaW5nPSJubyJdLAorICAgW2FjX2VuYWJsZV9wcm9maWxpbmc9Im5vIl0pCiAgQ0M9IiRhY19zYXZlX2NjIl0pCiBBQ19NU0dfUkVTVUxUKCRhY19lbmFibGVfcHJvZmlsaW5nKQogCkBAIC03MDEsMTggKzczMCwyMiBAQAogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCi0gICAgICAgICAgTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLmRsbC5hJwotICAgICAgICAgIERMTExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuZGxsJworICAgICAgICAgIExETElCUkFSWT0nbGlicHl0aG9uJChMRFZFUlNJT04pLmRsbC5hJworICAgICAgICAgIERMTExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5kbGwnCiAgICAgICAgICAgOzsKICAgICBTdW5PUyopCi0JICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuc28nCi0JICBCTERMSUJSQVJZPSctV2wsLVIsJChMSUJESVIpIC1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCisJICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKKwkgIEJMRExJQlJBUlk9Jy1XbCwtUiwkKExJQkRJUikgLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwogCSAgUlVOU0hBUkVEPUxEX0xJQlJBUllfUEFUSD1gcHdkYDoke0xEX0xJQlJBUllfUEFUSH0KIAkgIElOU1RTT05BTUU9IiRMRExJQlJBUlkiLiRTT1ZFUlNJT04KKwkgIGlmIHRlc3QgIiR3aXRoX3B5ZGVidWciICE9IHllcworCSAgdGhlbgorCSAgICAgIFBZM0xJQlJBUlk9bGlicHl0aG9uMy5zbworCSAgZmkKICAgICAgICAgICA7OwogICAgIExpbnV4KnxHTlUqfE5ldEJTRCp8RnJlZUJTRCp8RHJhZ29uRmx5KikKLQkgIExETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKLQkgIEJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCisJICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKKwkgIEJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoTERWRVJTSU9OKScKIAkgIFJVTlNIQVJFRD1MRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtMRF9MSUJSQVJZX1BBVEh9CiAJICBjYXNlICRhY19zeXNfc3lzdGVtIGluCiAJICAgICAgRnJlZUJTRCopCkBAIC03MjAsMzYgKzc1MywzNSBAQAogCQk7OwogCSAgZXNhYwogCSAgSU5TVFNPTkFNRT0iJExETElCUkFSWSIuJFNPVkVSU0lPTgorCSAgaWYgdGVzdCAiJHdpdGhfcHlkZWJ1ZyIgIT0geWVzCisgICAgICAgICAgdGhlbgorCSAgICAgIFBZM0xJQlJBUlk9bGlicHl0aG9uMy5zbworCSAgZmkKIAkgIDs7CiAgICAgaHAqfEhQKikKIAkgIGNhc2UgYHVuYW1lIC1tYCBpbgogCQlpYTY0KQotCQkJTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNvJworCQkJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCiAJCQk7OwogCQkqKQotCQkJTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLnNsJworCQkJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc2wnCiAJCQk7OwogCSAgZXNhYwotCSAgQkxETElCUkFSWT0nLVdsLCtiLCQoTElCRElSKSAtTC4gLWxweXRob24kKFZFUlNJT04pJworCSAgQkxETElCUkFSWT0nLVdsLCtiLCQoTElCRElSKSAtTC4gLWxweXRob24kKExEVkVSU0lPTiknCiAJICBSVU5TSEFSRUQ9U0hMSUJfUEFUSD1gcHdkYDoke1NITElCX1BBVEh9CiAJICA7OwogICAgIE9TRiopCi0JICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuc28nCi0JICBCTERMSUJSQVJZPSctcnBhdGggJChMSUJESVIpIC1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCisJICBMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKKwkgIEJMRExJQlJBUlk9Jy1ycGF0aCAkKExJQkRJUikgLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwogCSAgUlVOU0hBUkVEPUxEX0xJQlJBUllfUEFUSD1gcHdkYDoke0xEX0xJQlJBUllfUEFUSH0KIAkgIDs7Ci0gICAgYXRoZW9zKikKLQkgIExETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKLQkgIEJMRExJQlJBUlk9Jy1MLiAtbHB5dGhvbiQoVkVSU0lPTiknCi0JICBSVU5TSEFSRUQ9RExMX1BBVEg9YHB3ZGA6JHtETExfUEFUSDotL2F0aGVvcy9zeXMvbGliczovYXRoZW9zL2F1dG9sbmsvbGlifQotCSAgOzsKICAgICBEYXJ3aW4qKQotICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoVkVSU0lPTikuZHlsaWInCi0JQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChWRVJTSU9OKScKKyAgICAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZHlsaWInCisJQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwogCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JHtEWUxEX0xJQlJBUllfUEFUSH0nCiAJOzsKICAgICBBSVgqKQotCUxETElCUkFSWT0nbGlicHl0aG9uJChWRVJTSU9OKS5zbycKKwlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKIAlSVU5TSEFSRUQ9TElCUEFUSD1gcHdkYDoke0xJQlBBVEh9CiAJOzsKIApAQCAtNzU4LDcgKzc5MCw3IEBACiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCi0gICAgICAgICAgTERMSUJSQVJZPSdsaWJweXRob24kKFZFUlNJT04pLmRsbC5hJworICAgICAgICAgIExETElCUkFSWT0nbGlicHl0aG9uJChMRFZFUlNJT04pLmRsbC5hJwogICAgICAgICAgIDs7CiAgIGVzYWMKIGZpCkBAIC04MTUsMTUgKzg0NywxOCBAQAogaWYgdGVzdCAteiAiJExOIiA7IHRoZW4KIAljYXNlICRhY19zeXNfc3lzdGVtIGluCiAJCUNZR1dJTiopIExOPSJsbiAtcyI7OwotCQlhdGhlb3MqKSBMTj0ibG4gLXMiOzsKIAkJKikgTE49bG47OwogCWVzYWMKIGZpCiAKKyMgRm9yIGNhbGN1bGF0aW5nIHRoZSAuc28gQUJJIHRhZy4KK0FDX1NVQlNUKEFCSUZMQUdTKQorQUJJRkxBR1M9IiIKKwogIyBDaGVjayBmb3IgLS13aXRoLXB5ZGVidWcKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXB5ZGVidWcpCiBBQ19BUkdfV0lUSChweWRlYnVnLCAKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1weWRlYnVnLCBidWlsZCB3aXRoIFB5X0RFQlVHIGRlZmluZWQpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1weWRlYnVnXSwgW2J1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZF0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCiB0aGVuIApAQCAtODMxLDYgKzg2Niw3IEBACiAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4gaW50ZXJwcmV0ZXIgd2l0aCBtYW55IHJ1bi10aW1lIGNoZWNrcy5dKSAKICAgQUNfTVNHX1JFU1VMVCh5ZXMpOyAKICAgUHlfREVCVUc9J3RydWUnCisgIEFCSUZMQUdTPSIke0FCSUZMQUdTfWQiCiBlbHNlIEFDX01TR19SRVNVTFQobm8pOyBQeV9ERUJVRz0nZmFsc2UnCiBmaV0sCiBbQUNfTVNHX1JFU1VMVChubyldKQpAQCAtODY3LDcgKzkwMyw3IEBACiAJICAgIGlmIHRlc3QgIiRQeV9ERUJVRyIgPSAndHJ1ZScgOyB0aGVuCiAJCSMgT3B0aW1pemF0aW9uIG1lc3NlcyB1cCBkZWJ1Z2dlcnMsIHNvIHR1cm4gaXQgb2ZmIGZvcgogCQkjIGRlYnVnIGJ1aWxkcy4KLQkJT1BUPSItZyAtV2FsbCAkU1RSSUNUX1BST1RPIgorCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBlbHNlCiAJCU9QVD0iLWcgJFdSQVAgLU8zIC1XYWxsICRTVFJJQ1RfUFJPVE8iCiAJICAgIGZpCkBAIC05NjgsMzAgKzEwMDQsMjggQEAKIAkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KIAkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKIAkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIiCiAJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQorCQkgICBBUkNIX1JVTl8zMkJJVD0iIgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCiAJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKwkJICAgTElQT18zMkJJVF9GTEFHUz0iIgorCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKIAogCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiYWxsIiA7IHRoZW4KLQkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiAtZXh0cmFjdCBwcGM3NDAwIgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQgLWV4dHJhY3QgcHBjNjQiCisJCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKwkJICAgQVJDSF9SVU5fMzJCSVQ9Ii91c3IvYmluL2FyY2ggLWkzODYgLXBwYyIKIAogCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiaW50ZWwiIDsgdGhlbgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKIAkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgogCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBMSVBPXzY0QklUX0ZMQUdTPSItZXh0cmFjdCB4ODZfNjQiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgogCiAJICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICIzLXdheSIgOyB0aGVuCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCiAJCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCB4ODZfNjQiCi0JCSAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IGkzODYgLWV4dHJhY3QgcHBjNzQwMCIKLQkJICAgTElQT182NEJJVF9GTEFHUz0iLWV4dHJhY3QgeDg2XzY0IgorCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisJCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCiAKIAkJIGVsc2UKIAkgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCkBAIC0xMDA0LDcgKzEwMzgsNyBAQAogCQl0aGVuCiAJCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgogCQkJTERGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJQ1BQRkxBR1NGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKwkJCUNQUEZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q1BQRkxBR1N9IgogCQlmaQogCSAgICBmaQogCkBAIC0xMDgyLDYyICsxMTE2LDIxIEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIGRpc2FibGUgY2hlY2sgZm9yIGljYyBzaW5jZSBpdCBzZWVtcyB0byBwYXNzLCBidXQgZ2VuZXJhdGVzIGEgd2FybmluZwotaWYgdGVzdCAiJENDIiA9IGljYwotdGhlbgotICBhY19jdl9vcHRfb2xpbWl0X29rPW5vCi1maQotCi1BQ19NU0dfQ0hFQ0tJTkcod2hldGhlciAkQ0MgYWNjZXB0cyAtT1BUOk9saW1pdD0wKQotQUNfQ0FDSEVfVkFMKGFjX2N2X29wdF9vbGltaXRfb2ssCi1bYWNfc2F2ZV9jYz0iJENDIgotQ0M9IiRDQyAtT1BUOk9saW1pdD0wIgotQUNfVFJZX1JVTihbaW50IG1haW4oKSB7IHJldHVybiAwOyB9XSwKLSAgYWNfY3Zfb3B0X29saW1pdF9vaz15ZXMsCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8sCi0gIGFjX2N2X29wdF9vbGltaXRfb2s9bm8pCi1DQz0iJGFjX3NhdmVfY2MiXSkKLUFDX01TR19SRVNVTFQoJGFjX2N2X29wdF9vbGltaXRfb2spCi1pZiB0ZXN0ICRhY19jdl9vcHRfb2xpbWl0X29rID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCSMgWFhYIGlzIHRoaXMgYnJhbmNoIG5lZWRlZD8gT24gTWFjT1NYIDEwLjIuMiB0aGUgcmVzdWx0IG9mIHRoZQotCSMgb2xpbWl0X29rIHRlc3QgaXMgIm5vIi4gIElzIGl0ICJ5ZXMiIGluIHNvbWUgb3RoZXIgRGFyd2luLWVzcXVlCi0JIyBlbnZpcm9ubWVudD8KLSAgICAgICAgRGFyd2luKikKLQkgICAgOzsKLSAgICAgICAgKikKLQkgICAgQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgLU9QVDpPbGltaXQ9MCIKLQkgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyICRDQyBhY2NlcHRzIC1PbGltaXQgMTUwMCkKLSAgQUNfQ0FDSEVfVkFMKGFjX2N2X29saW1pdF9vaywKLSAgW2FjX3NhdmVfY2M9IiRDQyIKLSAgQ0M9IiRDQyAtT2xpbWl0IDE1MDAiCi0gIEFDX1RSWV9SVU4oW2ludCBtYWluKCkgeyByZXR1cm4gMDsgfV0sCi0gICAgYWNfY3Zfb2xpbWl0X29rPXllcywKLSAgICBhY19jdl9vbGltaXRfb2s9bm8sCi0gICAgYWNfY3Zfb2xpbWl0X29rPW5vKQotICBDQz0iJGFjX3NhdmVfY2MiXSkKLSAgQUNfTVNHX1JFU1VMVCgkYWNfY3Zfb2xpbWl0X29rKQotICBpZiB0ZXN0ICRhY19jdl9vbGltaXRfb2sgPSB5ZXM7IHRoZW4KLSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtT2xpbWl0IDE1MDAiCi0gIGZpCi1maQotCiAjIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0CiBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCiB0aGVuCiAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCiAgIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IiCi0gIEFDX1RSWV9DT01QSUxFKFsKLSAgICB2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTsKLSAgXSwsCi0gIEFDX0RFRklORShIQVZFX0FUVFJJQlVURV9GT1JNQVRfUEFSU0VUVVBMRSwgMSwgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0gICkKKyAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgIEFDX0xBTkdfUFJPR1JBTShbW3ZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpO11dLCBbW11dKQorICBdLFsKKyAgICBBQ19ERUZJTkUoSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUsIDEsCisgICAgICBbRGVmaW5lIGlmIEdDQyBzdXBwb3J0cyBfX2F0dHJpYnV0ZV9fKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMiwgMykpKV0pCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIF0sWworICAgIEFDX01TR19SRVNVTFQobm8pCisgIF0pCiAgIENGTEFHUz0kc2F2ZV9DRkxBR1MKIGZpCiAKQEAgLTExNDgsNyArMTE0MSw3IEBACiAjIG9wdGlvbnMgYmVmb3JlIHdlIGNhbiBjaGVjayB3aGV0aGVyIC1LcHRocmVhZCBpbXByb3ZlcyBhbnl0aGluZy4KIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHB0aHJlYWRzIGFyZSBhdmFpbGFibGUgd2l0aG91dCBvcHRpb25zKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdCwKLVtBQ19UUllfUlVOKFsKK1tBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHB0aHJlYWQuaD4KIAogdm9pZCogcm91dGluZSh2b2lkKiBwKXtyZXR1cm4gTlVMTDt9CkBAIC0xMTYwLDE0ICsxMTUzLDExIEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi1bCitdXSldLFsKICAgYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PXllcwogICBhY19jdl9rdGhyZWFkPW5vCiAgIGFjX2N2X3B0aHJlYWQ9bm8KLV0sCi0gIGFjX2N2X3B0aHJlYWRfaXNfZGVmYXVsdD1ubywKLSAgYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vKQorXSxbYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vXSxbYWNfY3ZfcHRocmVhZF9pc19kZWZhdWx0PW5vXSkKIF0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9wdGhyZWFkX2lzX2RlZmF1bHQpCiAKQEAgLTExODUsNyArMTE3NSw3IEBACiBBQ19DQUNIRV9WQUwoYWNfY3Zfa3B0aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtS3B0aHJlYWQiCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8cHRocmVhZC5oPgogCiB2b2lkKiByb3V0aW5lKHZvaWQqIHApe3JldHVybiBOVUxMO30KQEAgLTExOTcsMTAgKzExODcsNyBAQAogICAodm9pZClwdGhyZWFkX2RldGFjaChwKTsKICAgcmV0dXJuIDA7CiB9Ci1dLAotICBhY19jdl9rcHRocmVhZD15ZXMsCi0gIGFjX2N2X2twdGhyZWFkPW5vLAotICBhY19jdl9rcHRocmVhZD1ubykKK11dKV0sW2FjX2N2X2twdGhyZWFkPXllc10sW2FjX2N2X2twdGhyZWFkPW5vXSxbYWNfY3Zfa3B0aHJlYWQ9bm9dKQogQ0M9IiRhY19zYXZlX2NjIl0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9rcHRocmVhZCkKIGZpCkBAIC0xMjE2LDcgKzEyMDMsNyBAQAogQUNfQ0FDSEVfVkFMKGFjX2N2X2t0aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtS3RocmVhZCIKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKIHZvaWQqIHJvdXRpbmUodm9pZCogcCl7cmV0dXJuIE5VTEw7fQpAQCAtMTIyOCwxMCArMTIxNSw3IEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi0gIGFjX2N2X2t0aHJlYWQ9eWVzLAotICBhY19jdl9rdGhyZWFkPW5vLAotICBhY19jdl9rdGhyZWFkPW5vKQorXV0pXSxbYWNfY3Zfa3RocmVhZD15ZXNdLFthY19jdl9rdGhyZWFkPW5vXSxbYWNfY3Zfa3RocmVhZD1ub10pCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X2t0aHJlYWQpCiBmaQpAQCAtMTI0Nyw3ICsxMjMxLDcgQEAKIEFDX0NBQ0hFX1ZBTChhY19jdl90aHJlYWQsCiBbYWNfc2F2ZV9jYz0iJENDIgogQ0M9IiRDQyAtcHRocmVhZCIKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKIHZvaWQqIHJvdXRpbmUodm9pZCogcCl7cmV0dXJuIE5VTEw7fQpAQCAtMTI1OSwxMCArMTI0Myw3IEBACiAgICh2b2lkKXB0aHJlYWRfZGV0YWNoKHApOwogICByZXR1cm4gMDsKIH0KLV0sCi0gIGFjX2N2X3B0aHJlYWQ9eWVzLAotICBhY19jdl9wdGhyZWFkPW5vLAotICBhY19jdl9wdGhyZWFkPW5vKQorXV0pXSxbYWNfY3ZfcHRocmVhZD15ZXNdLFthY19jdl9wdGhyZWFkPW5vXSxbYWNfY3ZfcHRocmVhZD1ub10pCiBDQz0iJGFjX3NhdmVfY2MiXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3B0aHJlYWQpCiBmaQpAQCAtMTMwOCwxMSArMTI4OSwxMSBAQAogCiBkbmwgIyBjaGVjayBmb3IgQU5TSSBvciBLJlIgKCJ0cmFkaXRpb25hbCIpIHByZXByb2Nlc3NvcgogZG5sIEFDX01TR19DSEVDS0lORyhmb3IgQyBwcmVwcm9jZXNzb3IgdHlwZSkKLWRubCBBQ19UUllfQ09NUElMRShbCitkbmwgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogZG5sICNkZWZpbmUgc3BhbShuYW1lLCBkb2MpIHsjbmFtZSwgJm5hbWUsICNuYW1lICIoKSAtLSAiIGRvY30KIGRubCBpbnQgZm9vOwogZG5sIHN0cnVjdCB7Y2hhciAqbmFtZTsgaW50ICphZGRyOyBjaGFyICpkb2M7fSBkZXNjID0gc3BhbShmb28sICJzb21ldGhpbmciKTsKLWRubCBdLCBbO10sIGNwcF90eXBlPWFuc2ksIEFDX0RFRklORShIQVZFX09MRF9DUFApIGNwcF90eXBlPXRyYWRpdGlvbmFsKQorZG5sIF1dLCBbWztdXSldLFtjcHBfdHlwZT1hbnNpXSxbQUNfREVGSU5FKEhBVkVfT0xEX0NQUCkgY3BwX3R5cGU9dHJhZGl0aW9uYWxdKQogZG5sIEFDX01TR19SRVNVTFQoJGNwcF90eXBlKQogCiAjIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCkBAIC0xMzI4LDcgKzEzMDksNyBAQAogc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIGxpYnV0aWwuaCBcCiBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oKQorYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCkKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgogCkBAIC0xMzU5LDI2ICsxMzQwLDI2IEBACiAKICMgQ2hlY2sgd2hldGhlciB1c2luZyBtYWtlZGV2IHJlcXVpcmVzIGRlZmluaW5nIF9PU0ZfU09VUkNFCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIG1ha2VkZXYpCi1BQ19UUllfTElOSyhbCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaWYgZGVmaW5lZChNQUpPUl9JTl9NS0RFVikKICNpbmNsdWRlIDxzeXMvbWtkZXYuaD4KICNlbGlmIGRlZmluZWQoTUFKT1JfSU5fU1lTTUFDUk9TKQogI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYgXSwKLQkgICAgWyBtYWtlZGV2KDAsIDApIF0sCi0JICAgIGFjX2N2X2hhc19tYWtlZGV2PXllcywKLQkgICAgYWNfY3ZfaGFzX21ha2VkZXY9bm8pCisjZW5kaWYKK11dLCBbWworICBtYWtlZGV2KDAsIDApIF1dKQorXSxbYWNfY3ZfaGFzX21ha2VkZXY9eWVzXSxbYWNfY3ZfaGFzX21ha2VkZXY9bm9dKQogaWYgdGVzdCAiJGFjX2N2X2hhc19tYWtlZGV2IiA9ICJubyI7IHRoZW4KICAgICAjIHdlIGRpZG4ndCBsaW5rLCB0cnkgaWYgX09TRl9TT1VSQ0Ugd2lsbCBhbGxvdyB1cyB0byBsaW5rCi0gICAgQUNfVFJZX0xJTksoWworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNkZWZpbmUgX09TRl9TT1VSQ0UgMQogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAgIF0sCi0gICAgWyBtYWtlZGV2KDAsIDApIF0sCi0gICAgYWNfY3ZfaGFzX21ha2VkZXY9eWVzLAotICAgIGFjX2N2X2hhc19tYWtlZGV2PW5vKQorICAgIF1dLAorICAgIFtbIG1ha2VkZXYoMCwgMCkgXV0pXSwKKyAgICBbYWNfY3ZfaGFzX21ha2VkZXY9eWVzXSwKKyAgICBbYWNfY3ZfaGFzX21ha2VkZXY9bm9dKQogICAgIGlmIHRlc3QgIiRhY19jdl9oYXNfbWFrZWRldiIgPSAieWVzIjsgdGhlbgogICAgICAgICBBQ19ERUZJTkUoX09TRl9TT1VSQ0UsIDEsIFtEZWZpbmUgX09TRl9TT1VSQ0UgdG8gZ2V0IHRoZSBtYWtlZGV2IG1hY3JvLl0pCiAgICAgZmkKQEAgLTEzOTcsMTEgKzEzNzgsMTEgQEAKIAogdXNlX2xmcz15ZXMKIEFDX01TR19DSEVDS0lORyhTb2xhcmlzIExGUyBidWcpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEKICNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLV0sc3RydWN0IHJsaW1pdCBmb287LHNvbF9sZnNfYnVnPW5vLHNvbF9sZnNfYnVnPXllcykKK11dLCBbW3N0cnVjdCBybGltaXQgZm9vO11dKV0sW3NvbF9sZnNfYnVnPW5vXSxbc29sX2xmc19idWc9eWVzXSkKIEFDX01TR19SRVNVTFQoJHNvbF9sZnNfYnVnKQogaWYgdGVzdCAiJHNvbF9sZnNfYnVnIiA9ICJ5ZXMiOyB0aGVuCiAgIHVzZV9sZnM9bm8KQEAgLTE0MzMsNyArMTQxNCw3IEBACiBBQ19UWVBFX01PREVfVAogQUNfVFlQRV9PRkZfVAogQUNfVFlQRV9QSURfVAotQUNfVFlQRV9TSUdOQUwKK0FDX0RFRklORV9VTlFVT1RFRChbUkVUU0lHVFlQRV0sW3ZvaWRdLFthc3N1bWUgQzg5IHNlbWFudGljcyB0aGF0IFJFVFNJR1RZUEUgaXMgYWx3YXlzIHZvaWRdKQogQUNfVFlQRV9TSVpFX1QKIEFDX1RZUEVfVUlEX1QKIEFDX1RZUEVfVUlOVDMyX1QKQEAgLTE0NDEsNyArMTQyMiw3IEBACiBBQ19UWVBFX0lOVDMyX1QKIEFDX1RZUEVfSU5UNjRfVAogQUNfQ0hFQ0tfVFlQRShzc2l6ZV90LAotICBBQ19ERUZJTkUoSEFWRV9TU0laRV9ULCAxLCBEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBzc2l6ZV90KSwsKQorICBBQ19ERUZJTkUoSEFWRV9TU0laRV9ULCAxLCBbRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgcHJvdmlkZXMgc3NpemVfdF0pLCwpCiAKICMgU2l6ZXMgb2YgdmFyaW91cyBjb21tb24gYmFzaWMgdHlwZXMKICMgQU5TSSBDIHJlcXVpcmVzIHNpemVvZihjaGFyKSA9PSAxLCBzbyBubyBuZWVkIHRvIGNoZWNrIGl0CkBAIC0xNDU3LDEwICsxNDM4LDEwIEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgbG9uZyBsb25nIHN1cHBvcnQpCiBoYXZlX2xvbmdfbG9uZz1ubwotQUNfVFJZX0NPTVBJTEUoW10sIFtsb25nIGxvbmcgeDsgeCA9IChsb25nIGxvbmcpMDtdLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbbG9uZyBsb25nIHg7IHggPSAobG9uZyBsb25nKTA7XV0pXSxbCiAgIEFDX0RFRklORShIQVZFX0xPTkdfTE9ORywgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIGxvbmcgbG9uZy5dKSAKICAgaGF2ZV9sb25nX2xvbmc9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfbG9uZ19sb25nKQogaWYgdGVzdCAiJGhhdmVfbG9uZ19sb25nIiA9IHllcyA7IHRoZW4KIEFDX0NIRUNLX1NJWkVPRihsb25nIGxvbmcsIDgpCkBAIC0xNDY4LDEwICsxNDQ5LDEwIEBACiAKIEFDX01TR19DSEVDS0lORyhmb3IgbG9uZyBkb3VibGUgc3VwcG9ydCkKIGhhdmVfbG9uZ19kb3VibGU9bm8KLUFDX1RSWV9DT01QSUxFKFtdLCBbbG9uZyBkb3VibGUgeDsgeCA9IChsb25nIGRvdWJsZSkwO10sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tsb25nIGRvdWJsZSB4OyB4ID0gKGxvbmcgZG91YmxlKTA7XV0pXSxbCiAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuXSkgCiAgIGhhdmVfbG9uZ19kb3VibGU9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfbG9uZ19kb3VibGUpCiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2RvdWJsZSIgPSB5ZXMgOyB0aGVuCiBBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUsIDE2KQpAQCAtMTQ4MCwxMCArMTQ2MSwxMCBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIF9Cb29sIHN1cHBvcnQpCiBoYXZlX2M5OV9ib29sPW5vCi1BQ19UUllfQ09NUElMRShbXSwgW19Cb29sIHg7IHggPSAoX0Jvb2wpMDtdLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbX0Jvb2wgeDsgeCA9IChfQm9vbCkwO11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9DOTlfQk9PTCwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSB0eXBlIF9Cb29sLl0pIAogICBoYXZlX2M5OV9ib29sPXllcwotXSkKK10sW10pCiBBQ19NU0dfUkVTVUxUKCRoYXZlX2M5OV9ib29sKQogaWYgdGVzdCAiJGhhdmVfYzk5X2Jvb2wiID0geWVzIDsgdGhlbgogQUNfQ0hFQ0tfU0laRU9GKF9Cb29sLCAxKQpAQCAtMTQ5OCwyNiArMTQ3OSwxMSBAQAogICAgICAgICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KICAgICAgICAgI2VuZGlmXSkKIAotCi0jIEhtcGguIEFDX0NIRUNLX1NJWkVPRigpIGRvZXNuJ3QgaW5jbHVkZSA8c3lzL3R5cGVzLmg+LgotQUNfTVNHX0NIRUNLSU5HKHNpemUgb2Ygb2ZmX3QpCi1BQ19DQUNIRV9WQUwoYWNfY3Zfc2l6ZW9mX29mZl90LAotW0FDX1RSWV9SVU4oWyNpbmNsdWRlIDxzdGRpby5oPgorQUNfQ0hFQ0tfU0laRU9GKG9mZl90LCBbXSwgWworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZihvZmZfdCkpOwotICBleGl0KDApOwotfV0sCi1hY19jdl9zaXplb2Zfb2ZmX3Q9YGNhdCBjb25mdGVzdHZhbGAsCi1hY19jdl9zaXplb2Zfb2ZmX3Q9MCwKLWFjX2N2X3NpemVvZl9vZmZfdD00KQorI2VuZGlmCiBdKQotQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc2l6ZW9mX29mZl90KQotQUNfREVGSU5FX1VOUVVPVEVEKFNJWkVPRl9PRkZfVCwgJGFjX2N2X3NpemVvZl9vZmZfdCwKLVtUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGFuIG9mZl90Ll0pCiAKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHRvIGVuYWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQpCiBpZiB0ZXN0ICIkaGF2ZV9sb25nX2xvbmciID0geWVzCkBAIC0xNTM3LDI2ICsxNTAzLDE0IEBACiAgIEFDX01TR19SRVNVTFQobm8pCiBmaQogCi0jIEFDX0NIRUNLX1NJWkVPRigpIGRvZXNuJ3QgaW5jbHVkZSA8dGltZS5oPi4KLUFDX01TR19DSEVDS0lORyhzaXplIG9mIHRpbWVfdCkKLUFDX0NBQ0hFX1ZBTChhY19jdl9zaXplb2ZfdGltZV90LAotW0FDX1RSWV9SVU4oWyNpbmNsdWRlIDxzdGRpby5oPgorQUNfQ0hFQ0tfU0laRU9GKHRpbWVfdCwgW10sIFsKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1RJTUVfSAogI2luY2x1ZGUgPHRpbWUuaD4KLW1haW4oKQotewotICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gIGlmICghZikgZXhpdCgxKTsKLSAgZnByaW50ZihmLCAiJWRcbiIsIHNpemVvZih0aW1lX3QpKTsKLSAgZXhpdCgwKTsKLX1dLAotYWNfY3Zfc2l6ZW9mX3RpbWVfdD1gY2F0IGNvbmZ0ZXN0dmFsYCwKLWFjX2N2X3NpemVvZl90aW1lX3Q9MCwKLWFjX2N2X3NpemVvZl90aW1lX3Q9NCkKKyNlbmRpZgogXSkKLUFDX01TR19SRVNVTFQoJGFjX2N2X3NpemVvZl90aW1lX3QpCi1BQ19ERUZJTkVfVU5RVU9URUQoU0laRU9GX1RJTUVfVCwgJGFjX2N2X3NpemVvZl90aW1lX3QsIAotW1RoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB0aW1lX3QuXSkKLQogCiAjIGlmIGhhdmUgcHRocmVhZF90IHRoZW4gZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QKIGFjX3NhdmVfY2M9IiRDQyIKQEAgLTE1NjcsMzUgKzE1MjEsMjIgQEAKIGVsaWYgdGVzdCAiJGFjX2N2X3B0aHJlYWQiID0gInllcyIKIHRoZW4gQ0M9IiRDQyAtcHRocmVhZCIKIGZpCisKIEFDX01TR19DSEVDS0lORyhmb3IgcHRocmVhZF90KQogaGF2ZV9wdGhyZWFkX3Q9bm8KLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sIFtwdGhyZWFkX3QgeDsgeCA9ICoocHRocmVhZF90KikwO10sIGhhdmVfcHRocmVhZF90PXllcykKK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwgW1twdGhyZWFkX3QgeDsgeCA9ICoocHRocmVhZF90KikwO11dKQorXSxbaGF2ZV9wdGhyZWFkX3Q9eWVzXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfcHRocmVhZF90KQogaWYgdGVzdCAiJGhhdmVfcHRocmVhZF90IiA9IHllcyA7IHRoZW4KLSAgIyBBQ19DSEVDS19TSVpFT0YoKSBkb2Vzbid0IGluY2x1ZGUgPHB0aHJlYWQuaD4uCi0gIEFDX01TR19DSEVDS0lORyhzaXplIG9mIHB0aHJlYWRfdCkKLSAgQUNfQ0FDSEVfVkFMKGFjX2N2X3NpemVvZl9wdGhyZWFkX3QsCi0gIFtBQ19UUllfUlVOKFsjaW5jbHVkZSA8c3RkaW8uaD4KKyAgQUNfQ0hFQ0tfU0laRU9GKHB0aHJlYWRfdCwgW10sIFsKKyNpZmRlZiBIQVZFX1BUSFJFQURfSAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSAgbWFpbigpCi0gIHsKLSAgICBGSUxFICpmPWZvcGVuKCJjb25mdGVzdHZhbCIsICJ3Iik7Ci0gICAgaWYgKCFmKSBleGl0KDEpOwotICAgIGZwcmludGYoZiwgIiVkXG4iLCBzaXplb2YocHRocmVhZF90KSk7Ci0gICAgZXhpdCgwKTsKLSAgfV0sCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9YGNhdCBjb25mdGVzdHZhbGAsCi0gIGFjX2N2X3NpemVvZl9wdGhyZWFkX3Q9MCwKLSAgYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdD00KQorI2VuZGlmCiAgIF0pCi0gIEFDX01TR19SRVNVTFQoJGFjX2N2X3NpemVvZl9wdGhyZWFkX3QpCi0gIEFDX0RFRklORV9VTlFVT1RFRChTSVpFT0ZfUFRIUkVBRF9ULCAkYWNfY3Zfc2l6ZW9mX3B0aHJlYWRfdCwKLSAgIFtUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgcHRocmVhZF90Ll0pCiBmaQogQ0M9IiRhY19zYXZlX2NjIgogCi0KLQogQUNfU1VCU1QoT1RIRVJfTElCVE9PTF9PUFQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIApAQCAtMTYyNyw3ICsxNTY4LDcgQEAKICAgICAgICAgZWxzZSAKICAgICAgICAgICAgIExJQlRPT0xfQ1JVRlQ9IiIKICAgICBmaQotICAgIEFDX1RSWV9SVU4oWworICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgogICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyKmFyZ3ZbXSkKICAgICB7CkBAIC0xNjM3LDkgKzE1NzgsNyBAQAogICAgICAgCSAgcmV0dXJuIDE7CiAgICAgICB9CiAgICAgfQotICAgIF0sIGFjX29zeF8zMmJpdD15ZXMsCi0gICAgICAgYWNfb3N4XzMyYml0PW5vLAotICAgICAgIGFjX29zeF8zMmJpdD15ZXMpCisgICAgXV0pXSxbYWNfb3N4XzMyYml0PXllc10sW2FjX29zeF8zMmJpdD1ub10sW2FjX29zeF8zMmJpdD15ZXNdKQogICAgIAogICAgIGlmIHRlc3QgIiR7YWNfb3N4XzMyYml0fSIgPSAieWVzIjsgdGhlbgogICAgIAljYXNlIGAvdXNyL2Jpbi9hcmNoYCBpbgpAQCAtMTcwOSwzNyArMTY0OCwxMCBAQAogIyBTZXQgaW5mbyBhYm91dCBzaGFyZWQgbGlicmFyaWVzLgogQUNfU1VCU1QoU08pCiBBQ19TVUJTVChMRFNIQVJFRCkKK0FDX1NVQlNUKExEQ1hYU0hBUkVEKQogQUNfU1VCU1QoQkxEU0hBUkVEKQogQUNfU1VCU1QoQ0NTSEFSRUQpCiBBQ19TVUJTVChMSU5LRk9SU0hBUkVEKQotIyBTTyBpcyB0aGUgZXh0ZW5zaW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMgYChpbmNsdWRpbmcgdGhlIGRvdCEpCi0jIC0tIHVzdWFsbHkgLnNvLCAuc2wgb24gSFAtVVgsIC5kbGwgb24gQ3lnd2luCi1BQ19NU0dfQ0hFQ0tJTkcoU08pCi1pZiB0ZXN0IC16ICIkU08iCi10aGVuCi0JY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgotCWhwKnxIUCopCi0JCWNhc2UgYHVuYW1lIC1tYCBpbgotCQkJaWE2NCkgU089LnNvOzsKLQkgIAkJKikgICAgU089LnNsOzsKLQkJZXNhYwotCQk7OwotCUNZR1dJTiopICAgU089LmRsbDs7Ci0JKikJICAgU089LnNvOzsKLQllc2FjCi1lbHNlCi0JIyB0aGlzIG1pZ2h0IGFsc28gYmUgYSB0ZXJtY2FwIHZhcmlhYmxlLCBzZWUgIzYxMDMzMgotICAgICAgICBlY2hvCi0gICAgICAgIGVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKLSAgICAgICAgZWNobyAnKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArJwotCWVjaG8gJysgV0FSTklORzogWW91IGhhdmUgc2V0IFNPIGluIHlvdXIgZW52aXJvbm1lbnQuICAgICAgICAgICAgICAgICAgICAgKycKLSAgICAgICAgZWNobyAnKyBEbyB5b3UgcmVhbGx5IG1lYW4gdG8gY2hhbmdlIHRoZSBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXM/ICArJwotICAgICAgICBlY2hvICcrIENvbnRpbnVpbmcgaW4gMTAgc2Vjb25kcyB0byBsZXQgeW91IHRvIHBvbmRlci4gICAgICAgICAgICAgICAgICAgICsnCi0gICAgICAgIGVjaG8gJysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKycKLSAgICAgICAgZWNobyAnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09JwotCXNsZWVwIDEwCi1maQotQUNfTVNHX1JFU1VMVCgkU08pCiAKIEFDX0RFRklORV9VTlFVT1RFRChTSExJQl9FWFQsICIkU08iLCBbRGVmaW5lIHRoaXMgdG8gYmUgZXh0ZW5zaW9uIG9mIHNoYXJlZCBsaWJyYXJpZXMgKGluY2x1ZGluZyB0aGUgZG90ISkuXSkKICMgTERTSEFSRUQgaXMgdGhlIGxkICpjb21tYW5kKiB1c2VkIHRvIGNyZWF0ZSBzaGFyZWQgbGlicmFyeQpAQCAtMTc1NywzNiArMTY2OSw0NyBAQAogCUlSSVgvNSopIExEU0hBUkVEPSJsZCAtc2hhcmVkIjs7CiAJSVJJWCovNiopIExEU0hBUkVEPSJsZCAke1NHSV9BQkl9IC1zaGFyZWQgLWFsbCI7OwogCVN1bk9TLzUqKSAKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoTERGTEFHUyknCi0JCWVsc2UgTERTSEFSRUQ9JyQoQ0MpIC1HICQoTERGTEFHUyknOworCQlpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiIDsgdGhlbgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1zaGFyZWQnCisJCWVsc2UKKwkJCUxEU0hBUkVEPSckKENDKSAtRycKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLUcnCiAJCWZpIDs7CiAJaHAqfEhQKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSdsZCAtYic7CisJCWlmIHRlc3QgIiRHQ0MiID0gInllcyIgOyB0aGVuCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKKwkJZWxzZQorCQkJTERTSEFSRUQ9J2xkIC1iJwogCQlmaSA7OwogCU9TRiopIExEU0hBUkVEPSJsZCAtc2hhcmVkIC1leHBlY3RfdW5yZXNvbHZlZCBcIipcIiI7OwogCURhcndpbi8xLjMqKQotCQlMRFNIQVJFRD0nJChDQykgJChMREZMQUdTKSAtYnVuZGxlJworCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCiAJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktQUkVGSVgpLyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQllbHNlCiAJCQkjIE5vIGZyYW1ld29yay4gSWdub3JlIHVuZGVmaW5lZCBzeW1ib2xzLCBhc3N1bWluZyB0aGV5IGNvbWUgZnJvbSBQeXRob24KIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgLXVuZGVmaW5lZCBzdXBwcmVzcyIKIAkJZmkgOzsKIAlEYXJ3aW4vMS40KnxEYXJ3aW4vNS4qfERhcndpbi82LiopCi0JCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJworCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCSMgTGluayBhZ2FpbnN0IHRoZSBmcmFtZXdvcmsuIEFsbCBleHRlcm5hbHMgc2hvdWxkIGJlIGRlZmluZWQuCiAJCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLUFJFRklYKS8kKFBZVEhPTkZSQU1FV09SS0RJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAJCWVsc2UKIAkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJVSUxEUFlUSE9OKScKIAkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKKwkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJZmkgOzsKIAlEYXJ3aW4vKikKIAkJIyBVc2UgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCB3aGVuZXZlciBwb3NzaWJsZSAoMTAuMyBhbmQgbGF0ZXIpLgpAQCAtMTc5Nyw1NyArMTcyMCw3NyBAQAogCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KIAkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCiAJCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpICQoTERGTEFHUykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwogCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWVsc2UKLQkJCUxEU0hBUkVEPSckKENDKSAkKExERkxBR1MpIC1idW5kbGUnCisJCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZScKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZScKIAkJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIiA7IHRoZW4KIAkJCQkjIExpbmsgYWdhaW5zdCB0aGUgZnJhbWV3b3JrLiBBbGwgZXh0ZXJuYWxzIHNob3VsZCBiZSBkZWZpbmVkLgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJCUxEU0hBUkVEPSIkTERTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIickKFBZVEhPTkZSQU1FV09SS1BSRUZJWCkvJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwogCQkJZWxzZQogCQkJCSMgTm8gZnJhbWV3b3JrLCB1c2UgdGhlIFB5dGhvbiBhcHAgYXMgYnVuZGxlLWxvYWRlcgogCQkJCUJMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCVUlMRFBZVEhPTiknCiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJworCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCiAJCWZpCiAJCTs7Ci0JTGludXgqfEdOVSp8UU5YKikgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQnOzsKLQlCU0QvT1MqLzQqKSBMRFNIQVJFRD0iZ2NjIC1zaGFyZWQiOzsKKwlMaW51eCp8R05VKnxRTlgqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CisJQlNEL09TKi80KikKKwkJTERTSEFSRUQ9ImdjYyAtc2hhcmVkIgorCQlMRENYWFNIQVJFRD0iZysrIC1zaGFyZWQiOzsKIAlGcmVlQlNEKikKIAkJaWYgW1sgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF1dCiAJCXRoZW4KLQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICR7TERGTEFHU30nCisJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCcKIAkJZWxzZQotCQkJTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCisJCQlMRFNIQVJFRD0ibGQgLUJzaGFyZWFibGUiCiAJCWZpOzsKIAlPcGVuQlNEKikKIAkJaWYgW1sgImAkQ0MgLWRNIC1FIC0gPC9kZXYvbnVsbCB8IGdyZXAgX19FTEZfX2AiICE9ICIiIF1dCiAJCXRoZW4KLQkJCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAkKENDU0hBUkVEKSAke0xERkxBR1N9JworCQkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpJworCQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLXNoYXJlZCAkKENDU0hBUkVEKScKIAkJZWxzZQogCQkJCWNhc2UgYHVuYW1lIC1yYCBpbgogCQkJCVtbMDFdXS4qIHwgMi5bWzAtN11dIHwgMi5bWzAtN11dLiopCiAJCQkJICAgTERTSEFSRUQ9ImxkIC1Cc2hhcmVhYmxlICR7TERGTEFHU30iCiAJCQkJICAgOzsKIAkJCQkqKQotCQkJCSAgIExEU0hBUkVEPSckKENDKSAtc2hhcmVkICQoQ0NTSEFSRUQpICR7TERGTEFHU30nCisJCQkJICAgTERTSEFSRUQ9JyQoQ0MpIC1zaGFyZWQgJChDQ1NIQVJFRCknCisJCQkJICAgTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkICQoQ0NTSEFSRUQpJwogCQkJCSAgIDs7CiAJCQkJZXNhYwogCQlmaTs7Ci0JTmV0QlNEKnxEcmFnb25GbHkqKSBMRFNIQVJFRD0nJChDQykgLXNoYXJlZCAke0xERkxBR1N9Jzs7CisJTmV0QlNEKnxEcmFnb25GbHkqKQorCQlMRFNIQVJFRD0nJChDQykgLXNoYXJlZCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJzs7CiAJT3BlblVOSVgqfFVuaXhXYXJlKikKLQkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIgotCQl0aGVuIExEU0hBUkVEPSckKENDKSAtc2hhcmVkJwotCQllbHNlIExEU0hBUkVEPSckKENDKSAtRycKKwkJaWYgdGVzdCAiJEdDQyIgPSAieWVzIiA7IHRoZW4KKwkJCUxEU0hBUkVEPSckKENDKSAtc2hhcmVkJworCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtc2hhcmVkJworCQllbHNlCisJCQlMRFNIQVJFRD0nJChDQykgLUcnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1HJwogCQlmaTs7Ci0JU0NPX1NWKikgTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCc7OwotCUNZR1dJTiopIExEU0hBUkVEPSJnY2MgLXNoYXJlZCAtV2wsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIjs7Ci0JYXRoZW9zKikgTERTSEFSRUQ9ImdjYyAtc2hhcmVkIjs7CisJU0NPX1NWKikKKwkJTERTSEFSRUQ9JyQoQ0MpIC1XbCwtRywtQmV4cG9ydCcKKwkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtV2wsLUcsLUJleHBvcnQnOzsKKwlDWUdXSU4qKQorCQlMRFNIQVJFRD0iZ2NjIC1zaGFyZWQgLVdsLC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSIKKwkJTERDWFhTSEFSRUQ9ImcrKyAtc2hhcmVkIC1XbCwtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UiOzsKIAkqKQlMRFNIQVJFRD0ibGQiOzsKIAllc2FjCiBmaQogQUNfTVNHX1JFU1VMVCgkTERTSEFSRUQpCitMRENYWFNIQVJFRD0ke0xEQ1hYU0hBUkVELSRMRFNIQVJFRH0KIEJMRFNIQVJFRD0ke0JMRFNIQVJFRC0kTERTSEFSRUR9CiAjIENDU0hBUkVEIGFyZSB0aGUgQyAqZmxhZ3MqIHVzZWQgdG8gY3JlYXRlIG9iamVjdHMgdG8gZ28gaW50byBhIHNoYXJlZAogIyBsaWJyYXJ5IChtb2R1bGUpIC0tIHRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGEgZmV3IHN5c3RlbXMKQEAgLTE4ODIsNyArMTgyNSw2IEBACiAJCSAgICpnY2MqKSBDQ1NIQVJFRD0iLXNoYXJlZCI7OwogCQkgICAqKSBDQ1NIQVJFRD0iIjs7CiAJCSAgIGVzYWM7OwotCWF0aGVvcyopIENDU0hBUkVEPSItZlBJQyI7OwogCWVzYWMKIGZpCiBBQ19NU0dfUkVTVUxUKCRDQ1NIQVJFRCkKQEAgLTE5OTAsMTMgKzE5MzIsMTcgQEAKICMgY2hlY2tzIGZvciBzeXN0ZW0gZGVwZW5kZW50IEMrKyBleHRlbnNpb25zIHN1cHBvcnQKIGNhc2UgIiRhY19zeXNfc3lzdGVtIiBpbgogCUFJWCopCUFDX01TR19DSEVDS0lORyhmb3IgZ2VudWluZSBBSVggQysrIGV4dGVuc2lvbnMgc3VwcG9ydCkKLQkJQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxsb2FkLmg+XSwKLQkJCSAgICBbbG9hZEFuZEluaXQoIiIsIDAsICIiKV0sCi0JCQkgICAgW0FDX0RFRklORShBSVhfR0VOVUlORV9DUExVU1BMVVMsIDEsCisJCUFDX0xJTktfSUZFTFNFKFsKKwkJICBBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bG9hZC5oPl1dLAorCQkJCSAgW1tsb2FkQW5kSW5pdCgiIiwgMCwgIiIpXV0pCisJCV0sWworCQkgIEFDX0RFRklORShBSVhfR0VOVUlORV9DUExVU1BMVVMsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSBmb3IgQUlYIGlmIHlvdXIgY29tcGlsZXIgaXMgYSBnZW51aW5lIElCTSB4bEMveGxDX3IKICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHlvdSB3YW50IHN1cHBvcnQgZm9yIEFJWCBDKysgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzLl0pCi0JCQkgICAgIEFDX01TR19SRVNVTFQoeWVzKV0sCi0JCQkgICAgW0FDX01TR19SRVNVTFQobm8pXSk7OworCQkgIEFDX01TR19SRVNVTFQoeWVzKQorCQldLFsKKwkJICBBQ19NU0dfUkVTVUxUKG5vKQorCQldKTs7CiAJKikgOzsKIGVzYWMKIApAQCAtMjAwNiwyNiArMTk1Miw1MyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1saWJzKQogQUNfQVJHX1dJVEgobGlicywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1saWJzPSdsaWIxIC4uLicsIGxpbmsgYWdhaW5zdCBhZGRpdGlvbmFsIGxpYnMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJzPSdsaWIxIC4uLiddLCBbbGluayBhZ2FpbnN0IGFkZGl0aW9uYWwgbGlic10pLAogWwogQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIExJQlM9IiR3aXRodmFsICRMSUJTIgogXSwKIFtBQ19NU0dfUkVTVUxUKG5vKV0pCiAKK0FDX1BBVEhfVE9PTChbUEtHX0NPTkZJR10sIFtwa2ctY29uZmlnXSkKKworIyBDaGVjayBmb3IgdXNlIG9mIHRoZSBzeXN0ZW0gZXhwYXQgbGlicmFyeQorQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0KQorQUNfQVJHX1dJVEgoc3lzdGVtX2V4cGF0LAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zeXN0ZW0tZXhwYXRdLCBbYnVpbGQgcHlleHBhdCBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGV4cGF0IGxpYnJhcnldKSwKKyAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgW3dpdGhfc3lzdGVtX2V4cGF0PSJubyJdKQorCitBQ19NU0dfUkVTVUxUKCR3aXRoX3N5c3RlbV9leHBhdCkKKwogIyBDaGVjayBmb3IgdXNlIG9mIHRoZSBzeXN0ZW0gbGliZmZpIGxpYnJhcnkKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXN5c3RlbS1mZmkpCiBBQ19BUkdfV0lUSChzeXN0ZW1fZmZpLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXN5c3RlbS1mZmksIGJ1aWxkIF9jdHlwZXMgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBmZmkgbGlicmFyeSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3RlbS1mZmldLCBbYnVpbGQgX2N0eXBlcyBtb2R1bGUgdXNpbmcgYW4gaW5zdGFsbGVkIGZmaSBsaWJyYXJ5XSksCiAgICAgICAgICAgICBbXSwKICAgICAgICAgICAgIFt3aXRoX3N5c3RlbV9mZmk9Im5vIl0pCiAKK2lmIHRlc3QgIiR3aXRoX3N5c3RlbV9mZmkiID0gInllcyIgJiYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgTElCRkZJX0lOQ0xVREVESVI9ImAiJFBLR19DT05GSUciIGxpYmZmaSAtLWNmbGFncy1vbmx5LUkgMj4vZGV2L251bGwgfCBzZWQgLWUgJ3MvXi1JLy87cy8gKiQvLydgIgorZWxzZQorICAgIExJQkZGSV9JTkNMVURFRElSPSIiCitmaQorQUNfU1VCU1QoTElCRkZJX0lOQ0xVREVESVIpCisKIEFDX01TR19SRVNVTFQoJHdpdGhfc3lzdGVtX2ZmaSkKIAorIyBDaGVjayBmb3Igc3VwcG9ydCBmb3IgbG9hZGFibGUgc3FsaXRlIGV4dGVuc2lvbnMKK0FDX01TR19DSEVDS0lORyhmb3IgLS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnMpCitBQ19BUkdfRU5BQkxFKGxvYWRhYmxlLXNxbGl0ZS1leHRlbnNpb25zLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbG9hZGFibGUtc3FsaXRlLWV4dGVuc2lvbnNdLCBbc3VwcG9ydCBsb2FkYWJsZSBleHRlbnNpb25zIGluIF9zcWxpdGUgbW9kdWxlXSksCisgICAgICAgICAgICAgIFtdLAorICAgICAgICAgICAgICBbZW5hYmxlX2xvYWRhYmxlX3NxbGl0ZV9leHRlbnNpb25zPSJubyJdKQorCitBQ19NU0dfUkVTVUxUKCRlbmFibGVfbG9hZGFibGVfc3FsaXRlX2V4dGVuc2lvbnMpCisKICMgQ2hlY2sgZm9yIC0td2l0aC1kYm1saWJvcmRlcgogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtZGJtbGlib3JkZXIpCiBBQ19BUkdfV0lUSChkYm1saWJvcmRlciwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZGJtbGlib3JkZXI9ZGIxOmRiMjouLi5dLCBbb3JkZXIgdG8gY2hlY2sgZGIgYmFja2VuZHMgZm9yIGRibS4gVmFsaWQgdmFsdWUgaXMgYSBjb2xvbiBzZXBhcmF0ZWQgc3RyaW5nIHdpdGggdGhlIGJhY2tlbmQgbmFtZXMgYG5kYm0nLCBgZ2RibScgYW5kIGBiZGInLl0pLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kYm1saWJvcmRlcj1kYjE6ZGIyOi4uLl0sIFtvcmRlciB0byBjaGVjayBkYiBiYWNrZW5kcyBmb3IgZGJtLiBWYWxpZCB2YWx1ZSBpcyBhIGNvbG9uIHNlcGFyYXRlZCBzdHJpbmcgd2l0aCB0aGUgYmFja2VuZCBuYW1lcyBgbmRibScsIGBnZGJtJyBhbmQgYGJkYicuXSksCiBbCiBpZiB0ZXN0IHgkd2l0aF9kYm1saWJvcmRlciA9IHh5ZXMKIHRoZW4KQEAgLTIwNDUsNyArMjAxOCw3IEBACiBBQ19TVUJTVChTSUdOQUxfT0JKUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXNpZ25hbC1tb2R1bGUpCiBBQ19BUkdfV0lUSChzaWduYWwtbW9kdWxlLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLXNpZ25hbC1tb2R1bGUsIGRpc2FibGUvZW5hYmxlIHNpZ25hbCBtb2R1bGUpKQorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1zaWduYWwtbW9kdWxlXSwgW2Rpc2FibGUvZW5hYmxlIHNpZ25hbCBtb2R1bGVdKSkKIAogaWYgdGVzdCAteiAiJHdpdGhfc2lnbmFsX21vZHVsZSIKIHRoZW4gd2l0aF9zaWduYWxfbW9kdWxlPSJ5ZXMiCkBAIC0yMDY3LDcgKzIwNDAsNyBAQAogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtZGVjLXRocmVhZHMpCiBBQ19TVUJTVChMRExBU1QpCiBBQ19BUkdfV0lUSChkZWMtdGhyZWFkcywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1kZWMtdGhyZWFkcywgdXNlIERFQyBBbHBoYS9PU0YxIHRocmVhZC1zYWZlIGxpYnJhcmllcyksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWRlYy10aHJlYWRzXSwgW3VzZSBERUMgQWxwaGEvT1NGMSB0aHJlYWQtc2FmZSBsaWJyYXJpZXNdKSwKIFsKIEFDX01TR19SRVNVTFQoJHdpdGh2YWwpCiBMRExBU1Q9LXRocmVhZHMKQEAgLTIwODcsMTIgKzIwNjAsMTIgQEAKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXRocmVhZHMpCiBkbmwgcXVhZHJpZ3JhcGhzICJAPDpAIiBhbmQgIkA6PkAiIHByb2R1Y2UgIlsiIGFuZCAiXSIgaW4gdGhlIG91dHB1dAogQUNfQVJHX1dJVEgodGhyZWFkcywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aChvdXQpLXRocmVhZHNAPDpAPURJUkVDVE9SWUA6PkAsIGRpc2FibGUvZW5hYmxlIHRocmVhZCBzdXBwb3J0KSkKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS10aHJlYWRzQDw6QD1ESVJFQ1RPUllAOj5AXSwgW2Rpc2FibGUvZW5hYmxlIHRocmVhZCBzdXBwb3J0XSkpCiAKICMgLS13aXRoLXRocmVhZCBpcyBkZXByZWNhdGVkLCBidXQgY2hlY2sgZm9yIGl0IGFueXdheQogZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKIEFDX0FSR19XSVRIKHRocmVhZCwKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aChvdXQpLXRocmVhZEA8OkA9RElSRUNUT1JZQDo+QCwgZGVwcmVjYXRlZDsgdXNlIC0td2l0aChvdXQpLXRocmVhZHMpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLXRocmVhZEA8OkA9RElSRUNUT1JZQDo+QF0sIFtkZXByZWNhdGVkOyB1c2UgLS13aXRoKG91dCktdGhyZWFkc10pLAogICAgICAgICAgICAgW3dpdGhfdGhyZWFkcz0kd2l0aF90aHJlYWRdKQogCiBpZiB0ZXN0IC16ICIkd2l0aF90aHJlYWRzIgpAQCAtMjE3MSwyNyArMjE0NCwxNiBAQAogICAgIEFDX0RFRklORShNQUNIX0NfVEhSRUFEUywgMSwKICAgICBbRGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgTWFjaCBjdGhyZWFkcyB1bmRlciBtYWNoIC9dKQogICAgIFRIUkVBRE9CSj0iUHl0aG9uL3RocmVhZC5vIl0sWwotICAgIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXB0aCkKLSAgICBBQ19BUkdfV0lUSChbcHRoXSwKLSAgICAgICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtcHRoLCB1c2UgR05VIHB0aCB0aHJlYWRpbmcgbGlicmFyaWVzKSwKLSAgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKLSAgICAgICAgICAgICAgICAgIEFDX0RFRklORShbV0lUSF9USFJFQURdKQotICAgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX1BUSF0sIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSBpZiB5b3UgaGF2ZSBHTlUgUFRIIHRocmVhZHMuXSkKLSAgICAgICAgICAgICAgICAgIExJQlM9Ii1scHRoICRMSUJTIgotICAgICAgICAgICAgICAgICAgVEhSRUFET0JKPSJQeXRob24vdGhyZWFkLm8iXSwKLQkgICAgICAgIFtBQ19NU0dfUkVTVUxUKG5vKQotCiAgICAgIyBKdXN0IGxvb2tpbmcgZm9yIHB0aHJlYWRfY3JlYXRlIGluIGxpYnB0aHJlYWQgaXMgbm90IGVub3VnaDoKICAgICAjIG9uIEhQL1VYLCBwdGhyZWFkLmggcmVuYW1lcyBwdGhyZWFkX2NyZWF0ZSB0byBhIGRpZmZlcmVudCBzeW1ib2wgbmFtZS4KICAgICAjIFNvIHdlIHJlYWxseSBoYXZlIHRvIGluY2x1ZGUgcHRocmVhZC5oLCBhbmQgdGhlbiBsaW5rLgogICAgIF9saWJzPSRMSUJTCiAgICAgTElCUz0iJExJQlMgLWxwdGhyZWFkIgogICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfY3JlYXRlIGluIC1scHRocmVhZF0pCi0gICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxwdGhyZWFkLmg+CisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxwdGhyZWFkLmg+CiAKLXZvaWQgKiBzdGFydF9yb3V0aW5lICh2b2lkICphcmcpIHsgZXhpdCAoMCk7IH1dLCBbCi1wdGhyZWFkX2NyZWF0ZSAoTlVMTCwgTlVMTCwgc3RhcnRfcm91dGluZSwgTlVMTCldLCBbCit2b2lkICogc3RhcnRfcm91dGluZSAodm9pZCAqYXJnKSB7IGV4aXQgKDApOyB9XV0sIFtbCitwdGhyZWFkX2NyZWF0ZSAoTlVMTCwgTlVMTCwgc3RhcnRfcm91dGluZSwgTlVMTCldXSldLFsKICAgICBBQ19NU0dfUkVTVUxUKHllcykKICAgICBBQ19ERUZJTkUoV0lUSF9USFJFQUQpCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKQEAgLTIyMDAsMTAgKzIxNjIsNiBAQAogICAgIEFDX0NIRUNLX0ZVTkMocHRocmVhZF9kZXRhY2gsIFtBQ19ERUZJTkUoV0lUSF9USFJFQUQpCiAgICAgcG9zaXhfdGhyZWFkcz15ZXMKICAgICBUSFJFQURPQko9IlB5dGhvbi90aHJlYWQubyJdLFsKLSAgICBBQ19DSEVDS19IRUFERVIoYXRoZW9zL3RocmVhZHMuaCwgW0FDX0RFRklORShXSVRIX1RIUkVBRCkKLSAgICBBQ19ERUZJTkUoQVRIRU9TX1RIUkVBRFMsIDEsCi0gICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIEF0aGVPUyB0aHJlYWRzLl0pCi0gICAgVEhSRUFET0JKPSJQeXRob24vdGhyZWFkLm8iXSxbCiAgICAgQUNfQ0hFQ0tfTElCKHB0aHJlYWRzLCBwdGhyZWFkX2NyZWF0ZSwgW0FDX0RFRklORShXSVRIX1RIUkVBRCkKICAgICBwb3NpeF90aHJlYWRzPXllcwogICAgIExJQlM9IiRMSUJTIC1scHRocmVhZHMiCkBAIC0yMjIxLDcgKzIxNzksNyBAQAogICAgIExJQlM9IiRMSUJTIC1sY21hIgogICAgIFRIUkVBRE9CSj0iUHl0aG9uL3RocmVhZC5vIl0sWwogICAgIFVTRV9USFJFQURfTU9EVUxFPSIjIl0pCi0gICAgXSldKV0pXSldKV0pXSldKV0pCisgICAgXSldKV0pXSldKV0pXSkKIAogICAgIEFDX0NIRUNLX0xJQihtcGMsIHVzY29uZmlnLCBbQUNfREVGSU5FKFdJVEhfVEhSRUFEKQogICAgIExJQlM9IiRMSUJTIC1sbXBjIgpAQCAtMjI1NSwxMyArMjIxMywxMyBAQAogICAgICAgIyBCdWcgNjYyNzg3OiBVc2luZyBzZW1hcGhvcmVzIGNhdXNlcyB1bmV4cGxpY2FibGUgaGFuZ3Mgb24gU29sYXJpcyA4LgogICAgICAgY2FzZSAgJGFjX3N5c19zeXN0ZW0vJGFjX3N5c19yZWxlYXNlIGluCiAgIFN1bk9TLzUuNikgQUNfREVGSU5FKEhBVkVfUFRIUkVBRF9ERVNUUlVDVE9SLCAxLAotICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmVkIGZvciBTb2xhcmlzIDIuNiBidWcgaW4gcHRocmVhZCBoZWFkZXIuKQorICAgICAgICAgICAgICAgICAgICAgICBbRGVmaW5lZCBmb3IgU29sYXJpcyAyLjYgYnVnIGluIHB0aHJlYWQgaGVhZGVyLl0pCiAJCSAgICAgICA7OwogICAgICAgU3VuT1MvNS44KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKLQkJICAgICAgIERlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSkKKwkJICAgICAgIFtEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW1dKQogCQkgICAgICAgOzsKICAgICAgIEFJWC81KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKLQkJICAgICAgIERlZmluZSBpZiB0aGUgUG9zaXggc2VtYXBob3JlcyBkbyBub3Qgd29yayBvbiB5b3VyIHN5c3RlbSkKKwkJICAgICAgIFtEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW1dKQogCQkgICAgICAgOzsKICAgICAgIEFJWC82KSBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUywgMSwKICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgaWYgdGhlIFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW0pCkBAIC0yMjcwLDcgKzIyMjgsNyBAQAogCiAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gaXMgc3VwcG9ydGVkKQogICAgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZCwKLSAgICAgIFtBQ19UUllfUlVOKFsjaW5jbHVkZSA8cHRocmVhZC5oPgorICAgICAgW0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD4KICAgICAgIHZvaWQgKmZvbyh2b2lkICpwYXJtKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgfQpAQCAtMjI4MSwxMCArMjIzOSwxMCBAQAogICAgICAgICBpZiAocHRocmVhZF9hdHRyX3NldHNjb3BlKCZhdHRyLCBQVEhSRUFEX1NDT1BFX1NZU1RFTSkpIGV4aXQoLTEpOwogICAgICAgICBpZiAocHRocmVhZF9jcmVhdGUoJmlkLCAmYXR0ciwgZm9vLCBOVUxMKSkgZXhpdCgtMSk7CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgICB9XSwKLSAgICAgIGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZD15ZXMsCi0gICAgICBhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm8sCi0gICAgICBhY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm8pCisgICAgICB9XV0pXSwKKyAgICAgIFthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9eWVzXSwKKyAgICAgIFthY19jdl9wdGhyZWFkX3N5c3RlbV9zdXBwb3J0ZWQ9bm9dLAorICAgICAgW2FjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZD1ub10pCiAgICAgICBdKQogICAgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcHRocmVhZF9zeXN0ZW1fc3VwcG9ydGVkKQogICAgICAgaWYgdGVzdCAiJGFjX2N2X3B0aHJlYWRfc3lzdGVtX3N1cHBvcnRlZCIgPSAieWVzIjsgdGhlbgpAQCAtMjMxOSw3ICsyMjc3LDcgQEAKIAogWwogZG5sIHRoZSBjaGVjayBkb2VzIG5vdCB3b3JrIG9uIGNyb3NzIGNvbXBpbGF0aW9uIGNhc2UuLi4KLSAgQUNfVFJZX1JVTihbIC8qIEFGX0lORVQ2IGF2YWlsYWJsZSBjaGVjayAqLworICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWyAvKiBBRl9JTkVUNiBhdmFpbGFibGUgY2hlY2sgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiBtYWluKCkKQEAgLTIzMjksMjUgKzIyODcsMzEgQEAKICBlbHNlCiAgICBleGl0KDApOwogfQotXSwKK11dKV0sWwogICBBQ19NU0dfUkVTVUxUKHllcykKLSAgaXB2Nj15ZXMsCi0gIEFDX01TR19SRVNVTFQobm8pCi0gIGlwdjY9bm8sCisgIGlwdjY9eWVzCitdLFsKICAgQUNfTVNHX1JFU1VMVChubykKICAgaXB2Nj1ubwotKQorXSxbCisgIEFDX01TR19SRVNVTFQobm8pCisgIGlwdjY9bm8KK10pCiAKIGlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCiAJQUNfTVNHX0NIRUNLSU5HKGlmIFJGQzI1NTMgQVBJIGlzIGF2YWlsYWJsZSkKLQlBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD5dLAotCVtzdHJ1Y3Qgc29ja2FkZHJfaW42IHg7Ci14LnNpbjZfc2NvcGVfaWQ7XSwKLQkJQUNfTVNHX1JFU1VMVCh5ZXMpCi0JCWlwdjY9eWVzLAotCQlBQ19NU0dfUkVTVUxUKG5vLCBJUHY2IGRpc2FibGVkKQotCQlpcHY2PW5vKQorCUFDX0NPTVBJTEVfSUZFTFNFKFsKKwkgIEFDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XV0sCisJCQkgIFtbc3RydWN0IHNvY2thZGRyX2luNiB4OworCQkJICAgIHguc2luNl9zY29wZV9pZDtdXSkKKwldLFsKKwkgIEFDX01TR19SRVNVTFQoeWVzKQorCSAgaXB2Nj15ZXMKKwldLFsKKwkgIEFDX01TR19SRVNVTFQobm8sIElQdjYgZGlzYWJsZWQpCisJICBpcHY2PW5vCisJXSkKIGZpCiAKIGlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCkBAIC0yNDY4LDE2ICsyNDMyLDE5IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIE9TWCAxMC41IFNESyBvciBsYXRlcikKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPl0sIEZTSU9SZWZOdW0gZlJlZiA9IDAsCi0gIEFDX0RFRklORShIQVZFX09TWDEwNV9TREssIDEsIERlZmluZSBpZiBjb21waWxpbmcgdXNpbmcgTWFjT1MgWCAxMC41IFNESyBvciBsYXRlci4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKK0FDX0NPTVBJTEVfSUZFTFNFKFsKKyAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD5dXSwgW1tGU0lPUmVmTnVtIGZSZWYgPSAwXV0pCitdLFsKKyAgQUNfREVGSU5FKEhBVkVfT1NYMTA1X1NESywgMSwgW0RlZmluZSBpZiBjb21waWxpbmcgdXNpbmcgTWFjT1MgWCAxMC41IFNESyBvciBsYXRlci5dKQorICBBQ19NU0dfUkVTVUxUKHllcykKK10sWwogICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXSkKIAogIyBDaGVjayBmb3IgLS13aXRoLWRvYy1zdHJpbmdzCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1kb2Mtc3RyaW5ncykKIEFDX0FSR19XSVRIKGRvYy1zdHJpbmdzLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoKG91dCktZG9jLXN0cmluZ3MsIGRpc2FibGUvZW5hYmxlIGRvY3VtZW50YXRpb24gc3RyaW5ncykpCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZG9jLXN0cmluZ3NdLCBbZGlzYWJsZS9lbmFibGUgZG9jdW1lbnRhdGlvbiBzdHJpbmdzXSkpCiAKIGlmIHRlc3QgLXogIiR3aXRoX2RvY19zdHJpbmdzIgogdGhlbiB3aXRoX2RvY19zdHJpbmdzPSJ5ZXMiCkBAIC0yNDkyLDcgKzI0NTksNyBAQAogIyBDaGVjayBpZiBldmFsIGxvb3Agc2hvdWxkIHVzZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxpbmcKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXRzYykKIEFDX0FSR19XSVRIKHRzYywKLVsgIC0td2l0aChvdXQpLXRzYyAgICAgICAgIGVuYWJsZS9kaXNhYmxlIHRpbWVzdGFtcCBjb3VudGVyIHByb2ZpbGVdLCBbCisJICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgob3V0KS10c2NdLFtlbmFibGUvZGlzYWJsZSB0aW1lc3RhbXAgY291bnRlciBwcm9maWxlXSksWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCiB0aGVuIAogICBBQ19ERUZJTkUoV0lUSF9UU0MsIDEsIApAQCAtMjUwNSwxMCArMjQ3MiwxMiBAQAogIyBDaGVjayBmb3IgUHl0aG9uLXNwZWNpZmljIG1hbGxvYyBzdXBwb3J0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1weW1hbGxvYykKIEFDX0FSR19XSVRIKHB5bWFsbG9jLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoKG91dCktcHltYWxsb2MsIGRpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3MpKQorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aChvdXQpLXB5bWFsbG9jXSwgW2Rpc2FibGUvZW5hYmxlIHNwZWNpYWxpemVkIG1hbGxvY3NdKSkKIAogaWYgdGVzdCAteiAiJHdpdGhfcHltYWxsb2MiCi10aGVuIHdpdGhfcHltYWxsb2M9InllcyIKK3RoZW4KKyAgICB3aXRoX3B5bWFsbG9jPSJ5ZXMiCisgICAgQUJJRkxBR1M9IiR7QUJJRkxBR1N9bSIKIGZpCiBpZiB0ZXN0ICIkd2l0aF9weW1hbGxvYyIgIT0gIm5vIgogdGhlbgpAQCAtMjUxNywyMCArMjQ4NiwxOSBAQAogZmkKIEFDX01TR19SRVNVTFQoJHdpdGhfcHltYWxsb2MpCiAKLSMgQ2hlY2sgZm9yIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC13Y3R5cGUtZnVuY3Rpb25zKQotQUNfQVJHX1dJVEgod2N0eXBlLWZ1bmN0aW9ucywgCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtd2N0eXBlLWZ1bmN0aW9ucywgdXNlIHdjdHlwZS5oIGZ1bmN0aW9ucyksCi1bCi1pZiB0ZXN0ICIkd2l0aHZhbCIgIT0gbm8KLXRoZW4gCi0gIEFDX0RFRklORShXQU5UX1dDVFlQRV9GVU5DVElPTlMsIDEsCi0gIFtEZWZpbmUgaWYgeW91IHdhbnQgd2N0eXBlLmggZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUKLSAgIG9uZSBzdXBwbGllZCBieSBQeXRob24gaXRzZWxmLiAoc2VlIEluY2x1ZGUvdW5pY29kZWN0eXBlLmgpLl0pIAotICBBQ19NU0dfUkVTVUxUKHllcykKLWVsc2UgQUNfTVNHX1JFU1VMVChubykKLWZpXSwKLVtBQ19NU0dfUkVTVUxUKG5vKV0pCisjIENoZWNrIGZvciBWYWxncmluZCBzdXBwb3J0CitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtLXdpdGgtdmFsZ3JpbmRdKQorQUNfQVJHX1dJVEgoW3ZhbGdyaW5kXSwKKyAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC12YWxncmluZF0sIFtFbmFibGUgVmFsZ3JpbmQgc3VwcG9ydF0pLCwKKyAgd2l0aF92YWxncmluZD1ubykKK0FDX01TR19SRVNVTFQoWyR3aXRoX3ZhbGdyaW5kXSkKK2lmIHRlc3QgIiR3aXRoX3ZhbGdyaW5kIiAhPSBubzsgdGhlbgorICAgIEFDX0NIRUNLX0hFQURFUihbdmFsZ3JpbmQvdmFsZ3JpbmQuaF0sCisgICAgICBbQUNfREVGSU5FKFtXSVRIX1ZBTEdSSU5EXSwgMSwgW0RlZmluZSBpZiB5b3Ugd2FudCBweW1hbGxvYyB0byBiZSBkaXNhYmxlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgdmFsZ3JpbmRdKV0sCisgICAgICBbQUNfTVNHX0VSUk9SKFtWYWxncmluZCBzdXBwb3J0IHJlcXVlc3RlZCBidXQgaGVhZGVycyBub3QgYXZhaWxhYmxlXSldCisgICAgKQorICAgIE9QVD0iLUREWU5BTUlDX0FOTk9UQVRJT05TX0VOQUJMRUQ9MSAkT1BUIgorZmkKIAogIyAtSSR7RExJTkNMRElSfSBpcyBhZGRlZCB0byB0aGUgY29tcGlsZSBydWxlIGZvciBpbXBvcnRkbC5vCiBBQ19TVUJTVChETElOQ0xESVIpCkBAIC0yNTU2LDcgKzI1MjQsNiBAQAogCWhwKnxIUCopIERZTkxPQURGSUxFPSJkeW5sb2FkX2hwdXgubyI7OwogCSMgVXNlIGR5bmxvYWRfbmV4dC5jIG9ubHkgb24gMTAuMiBhbmQgYmVsb3csIHdoaWNoIGRvbid0IGhhdmUgbmF0aXZlIGRsb3BlbigpCiAJRGFyd2luL0A8OkAwMTU2QDo+QFwuLiopIERZTkxPQURGSUxFPSJkeW5sb2FkX25leHQubyI7OwotCWF0aGVvcyopIERZTkxPQURGSUxFPSJkeW5sb2FkX2F0aGVvcy5vIjs7CiAJKikKIAkjIHVzZSBkeW5sb2FkX3NobGliLmMgYW5kIGRsb3BlbigpIGlmIHdlIGhhdmUgaXQ7IG90aGVyd2lzZSBzdHViCiAJIyBvdXQgYW55IGR5bmFtaWMgbG9hZGluZwpAQCAtMjU4NywxNyArMjU1NCwxNyBAQAogQUNfTVNHX1JFU1VMVChNQUNIREVQX09CSlMpCiAKICMgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucwotQUNfQ0hFQ0tfRlVOQ1MoYWxhcm0gc2V0aXRpbWVyIGdldGl0aW1lciBiaW5kX3RleHRkb21haW5fY29kZXNldCBjaG93biBcCitBQ19DSEVDS19GVU5DUyhhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAogIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmY2htb2QgZmNob3duIGZvcmsgZnBhdGhjb25mIGZ0aW1lIGZ0cnVuY2F0ZSBcCiAgZ2FpX3N0cmVycm9yIGdldGdyb3VwcyBnZXRsb2dpbiBnZXRsb2FkYXZnIGdldHBlZXJuYW1lIGdldHBnaWQgZ2V0cGlkIFwKLSBnZXRwcmlvcml0eSBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAotIGtpbGwga2lsbHBnIGxjaG1vZCBsY2hvd24gbHN0YXQgbWJydG93YyBta2ZpZm8gbWtub2QgbWt0aW1lIFwKKyBnZXRwcmlvcml0eSBnZXRyZXN1aWQgZ2V0cmVzZ2lkIGdldHB3ZW50IGdldHNwbmFtIGdldHNwZW50IGdldHNpZCBnZXR3ZCBcCisgaW5pdGdyb3VwcyBraWxsIGtpbGxwZyBsY2htb2QgbGNob3duIGxzdGF0IG1icnRvd2MgbWtmaWZvIG1rbm9kIG1rdGltZSBcCiAgbXJlbWFwIG5pY2UgcGF0aGNvbmYgcGF1c2UgcGxvY2sgcG9sbCBwdGhyZWFkX2luaXQgXAogIHB1dGVudiByZWFkbGluayByZWFscGF0aCBcCiAgc2VsZWN0IHNlbV9vcGVuIHNlbV90aW1lZHdhaXQgc2VtX2dldHZhbHVlIHNlbV91bmxpbmsgc2V0ZWdpZCBzZXRldWlkIFwKICBzZXRnaWQgXAotIHNldGxvY2FsZSBzZXRyZWdpZCBzZXRyZXVpZCBzZXRzaWQgc2V0cGdpZCBzZXRwZ3JwIHNldHVpZCBzZXR2YnVmIHNucHJpbnRmIFwKLSBzaWdhY3Rpb24gc2lnaW50ZXJydXB0IHNpZ3JlbHNlIHN0cmZ0aW1lIHN0cmxjcHkgXAorIHNldGxvY2FsZSBzZXRyZWdpZCBzZXRyZXVpZCBzZXRyZXN1aWQgc2V0cmVzZ2lkIHNldHNpZCBzZXRwZ2lkIHNldHBncnAgc2V0dWlkIHNldHZidWYgXAorIHNpZ2FjdGlvbiBzaWdpbnRlcnJ1cHQgc2lncmVsc2Ugc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bnNldGVudiB1dGltZXMgd2FpdHBpZCB3YWl0MyB3YWl0NCBcCiAgd2NzY29sbCB3Y3NmdGltZSB3Y3N4ZnJtIF9nZXRwdHkpCkBAIC0yNjA1LDU2ICsyNTcyLDU2IEBACiAjIEZvciBzb21lIGZ1bmN0aW9ucywgaGF2aW5nIGEgZGVmaW5pdGlvbiBpcyBub3Qgc3VmZmljaWVudCwgc2luY2UKICMgd2Ugd2FudCB0byB0YWtlIHRoZWlyIGFkZHJlc3MuCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGNocm9vdCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1jaHJvb3QsCi0gIEFDX0RFRklORShIQVZFX0NIUk9PVCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnY2hyb290JyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1jaHJvb3RdXSldLAorICBbQUNfREVGSU5FKEhBVkVfQ0hST09ULCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdjaHJvb3QnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgbGluaykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1saW5rLAotICBBQ19ERUZJTkUoSEFWRV9MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdsaW5rJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1saW5rXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0xJTkssIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2xpbmsnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3Igc3ltbGluaykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1zeW1saW5rLAotICBBQ19ERUZJTkUoSEFWRV9TWU1MSU5LLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1zeW1saW5rXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NZTUxJTkssIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3N5bWxpbmsnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZmNoZGlyKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx1bmlzdGQuaD5dLCB2b2lkICp4PWZjaGRpciwKLSAgQUNfREVGSU5FKEhBVkVfRkNIRElSLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmY2hkaXInIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1t2b2lkICp4PWZjaGRpcl1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GQ0hESVIsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZjaGRpcicgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogQUNfTVNHX0NIRUNLSU5HKGZvciBmc3luYykKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwgdm9pZCAqeD1mc3luYywKLSAgQUNfREVGSU5FKEhBVkVfRlNZTkMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbdm9pZCAqeD1mc3luY11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GU1lOQywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZnN5bmMnIGZ1bmN0aW9uLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKIEFDX01TR19DSEVDS0lORyhmb3IgZmRhdGFzeW5jKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDx1bmlzdGQuaD5dLCB2b2lkICp4PWZkYXRhc3luYywKLSAgQUNfREVGSU5FKEhBVkVfRkRBVEFTWU5DLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdmZGF0YXN5bmMnIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDx1bmlzdGQuaD5dXSwgW1t2b2lkICp4PWZkYXRhc3luY11dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9GREFUQVNZTkMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZkYXRhc3luYycgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogQUNfTVNHX0NIRUNLSU5HKGZvciBlcG9sbCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL2Vwb2xsLmg+XSwgdm9pZCAqeD1lcG9sbF9jcmVhdGUsCi0gIEFDX0RFRklORShIQVZFX0VQT0xMLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdlcG9sbCcgZnVuY3Rpb25zLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvZXBvbGwuaD5dXSwgW1t2b2lkICp4PWVwb2xsX2NyZWF0ZV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9FUE9MTCwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGtxdWV1ZSkKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvZXZlbnQuaD4KLSAgICBdLCBpbnQgeD1rcXVldWUoKSwKLSAgQUNfREVGSU5FKEhBVkVfS1FVRVVFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdrcXVldWUnIGZ1bmN0aW9ucy4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKLSkKKyAgICBdXSwgW1tpbnQgeD1rcXVldWUoKV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9LUVVFVUUsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2txdWV1ZScgZnVuY3Rpb25zLikKKyAgIEFDX01TR19SRVNVTFQoeWVzKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKQorXSkKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTI2NjIsMTQgKzI2MjksMTMgQEAKICMgYmVjYXVzZSBvZiB0aGUgbWlzc2luZyBwcm90b3R5cGVzLgogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGN0ZXJtaWRfcikKLUFDX1RSWV9DT01QSUxFKFsKLSNpbmNsdWRlICJjb25mZGVmcy5oIiAKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzdGRpby5oPgotXSwgdm9pZCogcCA9IGN0ZXJtaWRfciwKLSAgQUNfREVGSU5FKEhBVkVfQ1RFUk1JRF9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdjdGVybWlkX3InIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGN0ZXJtaWRfcl1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVEVSTUlEX1IsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2N0ZXJtaWRfcicgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogCiBBQ19DQUNIRV9DSEVDSyhbZm9yIGZsb2NrIGRlY2xhcmF0aW9uXSwgW2FjX2N2X2Zsb2NrX2RlY2xdLAogICBbQUNfQ09NUElMRV9JRkVMU0UoCkBAIC0yNjkxLDE0ICsyNjU3LDEzIEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldHBhZ2VzaXplKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHVuaXN0ZC5oPgotXSwgdm9pZCogcCA9IGdldHBhZ2VzaXplLAotICBBQ19ERUZJTkUoSEFWRV9HRVRQQUdFU0laRSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZ2V0cGFnZXNpemUnIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGdldHBhZ2VzaXplXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0dFVFBBR0VTSVpFLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdnZXRwYWdlc2l6ZScgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pCitdKQogCiBkbmwgY2hlY2sgZm9yIHRydWUKIEFDX0NIRUNLX1BST0dTKFRSVUUsIHRydWUsIC9iaW4vdHJ1ZSkKQEAgLTI3MTIsNyArMjY3Nyw3IEBACiAjIE9uIFRydTY0LCBjaGZsYWdzIHNlZW1zIHRvIGJlIHByZXNlbnQsIGJ1dCBjYWxsaW5nIGl0IHdpbGwKICMgZXhpdCBQeXRob24KIEFDX0NBQ0hFX0NIRUNLKFtmb3IgY2hmbGFnc10sIFthY19jdl9oYXZlX2NoZmxhZ3NdLCBbZG5sCi1BQ19UUllfUlVOKFtbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQpAQCAtMjcyMSwxOSArMjY4NiwyMCBAQAogICAgIHJldHVybiAxOwogICByZXR1cm4gMDsKIH0KLV1dLCBhY19jdl9oYXZlX2NoZmxhZ3M9eWVzLAotICAgYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vLAotICAgYWNfY3ZfaGF2ZV9jaGZsYWdzPWNyb3NzKQorXV1dKV0sCitbYWNfY3ZfaGF2ZV9jaGZsYWdzPXllc10sCitbYWNfY3ZfaGF2ZV9jaGZsYWdzPW5vXSwKK1thY19jdl9oYXZlX2NoZmxhZ3M9Y3Jvc3NdKQogXSkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2NoZmxhZ3MiID0gY3Jvc3MgOyB0aGVuCiAgIEFDX0NIRUNLX0ZVTkMoW2NoZmxhZ3NdLCBbYWNfY3ZfaGF2ZV9jaGZsYWdzPSJ5ZXMiXSwgW2FjX2N2X2hhdmVfY2hmbGFncz0ibm8iXSkKIGZpCiBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9jaGZsYWdzIiA9IHllcyA7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfQ0hGTEFHUywgMSwgRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaGZsYWdzJyBmdW5jdGlvbi4pCisgIEFDX0RFRklORShIQVZFX0NIRkxBR1MsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNoZmxhZ3MnIGZ1bmN0aW9uLl0pCiBmaQogCiBBQ19DQUNIRV9DSEVDSyhbZm9yIGxjaGZsYWdzXSwgW2FjX2N2X2hhdmVfbGNoZmxhZ3NdLCBbZG5sCi1BQ19UUllfUlVOKFtbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQpAQCAtMjc0MiwxNSArMjcwOCwxMyBAQAogICAgIHJldHVybiAxOwogICByZXR1cm4gMDsKIH0KLV1dLCBhY19jdl9oYXZlX2xjaGZsYWdzPXllcywKLSAgIGFjX2N2X2hhdmVfbGNoZmxhZ3M9bm8sCi0gICBhY19jdl9oYXZlX2xjaGZsYWdzPWNyb3NzKQorXV1dKV0sW2FjX2N2X2hhdmVfbGNoZmxhZ3M9eWVzXSxbYWNfY3ZfaGF2ZV9sY2hmbGFncz1ub10sW2FjX2N2X2hhdmVfbGNoZmxhZ3M9Y3Jvc3NdKQogXSkKIGlmIHRlc3QgIiRhY19jdl9oYXZlX2xjaGZsYWdzIiA9IGNyb3NzIDsgdGhlbgogICBBQ19DSEVDS19GVU5DKFtsY2hmbGFnc10sIFthY19jdl9oYXZlX2xjaGZsYWdzPSJ5ZXMiXSwgW2FjX2N2X2hhdmVfbGNoZmxhZ3M9Im5vIl0pCiBmaQogaWYgdGVzdCAiJGFjX2N2X2hhdmVfbGNoZmxhZ3MiID0geWVzIDsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9MQ0hGTEFHUywgMSwgRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsY2hmbGFncycgZnVuY3Rpb24uKQorICBBQ19ERUZJTkUoSEFWRV9MQ0hGTEFHUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNoZmxhZ3MnIGZ1bmN0aW9uLl0pCiBmaQogCiBkbmwgQ2hlY2sgaWYgc3lzdGVtIHpsaWIgaGFzICpDb3B5KCkgZnVuY3Rpb25zCkBAIC0yNzczLDcgKzI3MzcsNyBAQAogCTs7CiBlc2FjCiAKLUFDX0NIRUNLX0xJQih6LCBpbmZsYXRlQ29weSwgQUNfREVGSU5FKEhBVkVfWkxJQl9DT1BZLCAxLCBEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkpKQorQUNfQ0hFQ0tfTElCKHosIGluZmxhdGVDb3B5LCBBQ19ERUZJTkUoSEFWRV9aTElCX0NPUFksIDEsIFtEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHldKSkKIAogY2FzZSAkYWNfc3lzX3N5c3RlbS8kYWNfc3lzX3JlbGVhc2UgaW4KIERhcndpbi8qKSAKQEAgLTI3ODMsNTUgKzI3NDcsNTAgQEAKIGVzYWMKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBoc3RyZXJyb3IpCi1BQ19UUllfTElOSyhbCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIgCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8bmV0ZGIuaD4KLV0sIHZvaWQqIHAgPSBoc3RyZXJyb3I7IGhzdHJlcnJvcigwKSwKLSAgQUNfREVGSU5FKEhBVkVfSFNUUkVSUk9SLCAxLCBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQotKQorXV0sIFtbdm9pZCogcCA9IGhzdHJlcnJvcjsgaHN0cmVycm9yKDApXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0hTVFJFUlJPUiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaHN0cmVycm9yJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKIEFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9hdG9uKQotQUNfVFJZX0xJTksoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci1dLCB2b2lkKiBwID0gaW5ldF9hdG9uO2luZXRfYXRvbigwLDApLAotICBBQ19ERUZJTkUoSEFWRV9JTkVUX0FUT04sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfYXRvbicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gaW5ldF9hdG9uO2luZXRfYXRvbigwLDApXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0lORVRfQVRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKIEFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9wdG9uKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci1dLCB2b2lkKiBwID0gaW5ldF9wdG9uLAotICBBQ19ERUZJTkUoSEFWRV9JTkVUX1BUT04sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfcHRvbicgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gaW5ldF9wdG9uXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0lORVRfUFRPTiwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaW5ldF9wdG9uJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKICMgT24gc29tZSBzeXN0ZW1zLCBzZXRncm91cHMgaXMgaW4gdW5pc3RkLmgsIG9uIG90aGVycywgaW4gZ3JwLmgKIEFDX01TR19DSEVDS0lORyhmb3Igc2V0Z3JvdXBzKQotQUNfVFJZX0NPTVBJTEUoWwotI2luY2x1ZGUgImNvbmZkZWZzLmgiIAorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2lmZGVmIEhBVkVfR1JQX0gKICNpbmNsdWRlIDxncnAuaD4KICNlbmRpZgotXSwgCi12b2lkKiBwID0gc2V0Z3JvdXBzLAotICBBQ19ERUZJTkUoSEFWRV9TRVRHUk9VUFMsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NldGdyb3VwcycgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCi0pCitdXSwgW1t2b2lkKiBwID0gc2V0Z3JvdXBzXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NFVEdST1VQUywgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc2V0Z3JvdXBzJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCiAKICMgY2hlY2sgZm9yIG9wZW5wdHkgYW5kIGZvcmtwdHkKIApAQCAtMjg1NiwzMCArMjgxNSwyNyBAQAogCiBBQ19SRVBMQUNFX0ZVTkNTKGR1cDIgZ2V0Y3dkIHN0cmR1cCkKIEFDX0NIRUNLX0ZVTkNTKGdldHBncnAsIAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sIAotICAgW2dldHBncnAoMCk7XSwgCi0gICBBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwKLSAgIFtEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuXSkKLSApCisgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8dW5pc3RkLmg+XV0sIFtbZ2V0cGdycCgwKTtdXSldLAorICAgIFtBQ19ERUZJTkUoR0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBnZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgZ2V0cGdycCgwKS5dKV0sCisgICAgW10pCiApCiBBQ19DSEVDS19GVU5DUyhzZXRwZ3JwLAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHVuaXN0ZC5oPl0sCi0gICAgW3NldHBncnAoMCwwKTtdLAotICAgIEFDX0RFRklORShTRVRQR1JQX0hBVkVfQVJHLCAxLAotICAgIFtEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuXSkKLSAgKQorICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW3NldHBncnAoMCwwKTtdXSldLAorICAgIFtBQ19ERUZJTkUoU0VUUEdSUF9IQVZFX0FSRywgMSwgW0RlZmluZSBpZiBzZXRwZ3JwKCkgbXVzdCBiZSBjYWxsZWQgYXMgc2V0cGdycCgwLCAwKS5dKV0sCisgICAgW10pCiApCiBBQ19DSEVDS19GVU5DUyhnZXR0aW1lb2ZkYXksIAotICBBQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90aW1lLmg+XSwgCi0gICAgW2dldHRpbWVvZmRheSgoc3RydWN0IHRpbWV2YWwqKTAsKHN0cnVjdCB0aW1lem9uZSopMCk7XSwgLAotICAgIEFDX0RFRklORShHRVRUSU1FT0ZEQVlfTk9fVFosIDEsCi0gICAgW0RlZmluZSBpZiBnZXR0aW1lb2ZkYXkoKSBkb2VzIG5vdCBoYXZlIHNlY29uZCAodGltZXpvbmUpIGFyZ3VtZW50Ci0gICAgIFRoaXMgaXMgdGhlIGNhc2Ugb24gTW90b3JvbGEgVjQgKFI0MFY0LjIpXSkKLSAgKQorICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90aW1lLmg+XV0sCisgIAkJCQkgICAgIFtbZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCopMCwoc3RydWN0IHRpbWV6b25lKikwKTtdXSldLAorICAgIFtdLAorICAgIFtBQ19ERUZJTkUoR0VUVElNRU9GREFZX05PX1RaLCAxLAorICAgICAgW0RlZmluZSBpZiBnZXR0aW1lb2ZkYXkoKSBkb2VzIG5vdCBoYXZlIHNlY29uZCAodGltZXpvbmUpIGFyZ3VtZW50CisgICAgICAgVGhpcyBpcyB0aGUgY2FzZSBvbiBNb3Rvcm9sYSBWNCAoUjQwVjQuMildKQorICAgIF0pCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgbWFqb3IsIG1pbm9yLCBhbmQgbWFrZWRldikKLUFDX1RSWV9MSU5LKFsKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpZiBkZWZpbmVkKE1BSk9SX0lOX01LREVWKQogI2luY2x1ZGUgPHN5cy9ta2Rldi5oPgogI2VsaWYgZGVmaW5lZChNQUpPUl9JTl9TWVNNQUNST1MpCkBAIC0yODg3LDkgKzI4NDMsOSBAQAogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNlbmRpZgotXSxbCitdXSwgW1sKICAgbWFrZWRldihtYWpvcigwKSxtaW5vcigwKSk7Ci1dLFsKK11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9ERVZJQ0VfTUFDUk9TLCAxLAogCSAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRldmljZSBtYWNyb3MuXSkKICAgQUNfTVNHX1JFU1VMVCh5ZXMpCkBAIC0yOTAwLDI0ICsyODU2LDI3IEBACiAjIE9uIE9TRi8xIFY1LjEsIGdldGFkZHJpbmZvIGlzIGF2YWlsYWJsZSwgYnV0IGEgZGVmaW5lCiAjIGZvciBbbm9dZ2V0YWRkcmluZm8gaW4gbmV0ZGIuaC4gCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldGFkZHJpbmZvKQotQUNfVFJZX0xJTksoWworQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRkYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci1dLFsKLWdldGFkZHJpbmZvKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwpOwotXSwgWwotQUNfTVNHX1JFU1VMVCh5ZXMpCi1BQ19NU0dfQ0hFQ0tJTkcoZ2V0YWRkcmluZm8gYnVnKQotQUNfVFJZX1JVTihbCitdXSwgW1tnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTtdXSldLAorW2hhdmVfZ2V0YWRkcmluZm89eWVzXSwKK1toYXZlX2dldGFkZHJpbmZvPW5vXSkKK0FDX01TR19SRVNVTFQoJGhhdmVfZ2V0YWRkcmluZm8pCitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0geWVzCit0aGVuCisgIEFDX01TR19DSEVDS0lORyhnZXRhZGRyaW5mbyBidWcpCisgIEFDX0NBQ0hFX1ZBTChhY19jdl9idWdneV9nZXRhZGRyaW5mbywKKyAgQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tbCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogCi1tYWluKCkKK2ludCBtYWluKCkKIHsKICAgaW50IHBhc3NpdmUsIGdhaWVyciwgaW5ldDQgPSAwLCBpbmV0NiA9IDA7CiAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKmFpLCAqYWl0b3A7CkBAIC0yOTg5LDI2ICsyOTQ4LDI1IEBACiAKICAgaWYgKGFpdG9wKQogICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMCk7CisgIHJldHVybiAwOwogCiAgYmFkOgogICBpZiAoYWl0b3ApCiAgICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgxKTsKKyAgcmV0dXJuIDE7CiB9Ci1dLAotQUNfTVNHX1JFU1VMVChnb29kKQotYnVnZ3lnZXRhZGRyaW5mbz1ubywKLUFDX01TR19SRVNVTFQoYnVnZ3kpCi1idWdneWdldGFkZHJpbmZvPXllcywKLUFDX01TR19SRVNVTFQoYnVnZ3kpCi1idWdneWdldGFkZHJpbmZvPXllcyldLCBbCi1BQ19NU0dfUkVTVUxUKG5vKQotYnVnZ3lnZXRhZGRyaW5mbz15ZXMKLV0pCitdXV0pXSwKK1thY19jdl9idWdneV9nZXRhZGRyaW5mbz1ub10sCitbYWNfY3ZfYnVnZ3lfZ2V0YWRkcmluZm89eWVzXSwKK1thY19jdl9idWdneV9nZXRhZGRyaW5mbz15ZXNdKSkKK2ZpCiAKLWlmIHRlc3QgIiRidWdneWdldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCi0JaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KK0FDX01TR19SRVNVTFQoJGFjX2N2X2J1Z2d5X2dldGFkZHJpbmZvKQorCitpZiB0ZXN0ICRoYXZlX2dldGFkZHJpbmZvID0gbm8gLW8gIiRhY19jdl9idWdneV9nZXRhZGRyaW5mbyIgPSB5ZXMKK3RoZW4KKwlpZiB0ZXN0ICRpcHY2ID0geWVzCisJdGhlbgogCQllY2hvICdGYXRhbDogWW91IG11c3QgZ2V0IHdvcmtpbmcgZ2V0YWRkcmluZm8oKSBmdW5jdGlvbi4nCiAJCWVjaG8gJyAgICAgICBvciB5b3UgY2FuIHNwZWNpZnkgIi0tZGlzYWJsZS1pcHY2IicuCiAJCWV4aXQgMQpAQCAtMzAxNiw2ICsyOTc0LDcgQEAKIGVsc2UKIAlBQ19ERUZJTkUoSEFWRV9HRVRBRERSSU5GTywgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0YWRkcmluZm8gZnVuY3Rpb24uXSkKIGZpCisKIEFDX0NIRUNLX0ZVTkNTKGdldG5hbWVpbmZvKQogCiAjIGNoZWNrcyBmb3Igc3RydWN0dXJlcwpAQCAtMzAzMCwxMCArMjk4OSwxMSBAQAogQUNfU1RSVUNUX1NUX0JMT0NLUwogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHRpbWUuaCB0aGF0IGRlZmluZXMgYWx0em9uZSkKLUFDX0NBQ0hFX1ZBTChhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lLAotW0FDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8dGltZS5oPl0sIFtyZXR1cm4gYWx0em9uZTtdLAotICBhY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPXllcywKLSAgYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZT1ubyldKQorQUNfQ0FDSEVfVkFMKGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUsWworICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHRpbWUuaD5dXSwgW1tyZXR1cm4gYWx0em9uZTtdXSldLAorICAgIFthY19jdl9oZWFkZXJfdGltZV9hbHR6b25lPXllc10sCisgICAgW2FjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmU9bm9dKQorICBdKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGVhZGVyX3RpbWVfYWx0em9uZSkKIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lX2FsdHpvbmUgPSB5ZXM7IHRoZW4KICAgQUNfREVGSU5FKEhBVkVfQUxUWk9ORSwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdXIgdGltZS5oIGRlZmluZXMgYWx0em9uZS5dKQpAQCAtMzA0MSwyNSArMzAwMSwyMyBAQAogCiB3YXNfaXRfZGVmaW5lZD1ubwogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgc3lzL3NlbGVjdC5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkKQotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgotXSwgWztdLCBbCitdXSwgW1s7XV0pXSxbCiAgIEFDX0RFRklORShTWVNfU0VMRUNUX1dJVEhfU1lTX1RJTUUsIDEsCiAgIFtEZWZpbmUgaWYgIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3NlbGVjdC5oPiBhbmQgPHN5cy90aW1lLmg+CiAgICAod2hpY2ggeW91IGNhbid0IG9uIFNDTyBPRFQgMy4wKS5dKSAKICAgd2FzX2l0X2RlZmluZWQ9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJHdhc19pdF9kZWZpbmVkKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGFkZHJpbmZvKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0cnVjdF9hZGRyaW5mbywKLUFDX1RSWV9DT01QSUxFKFsKLSMJCWluY2x1ZGUgPG5ldGRiLmg+XSwKLQlbc3RydWN0IGFkZHJpbmZvIGFdLAotCWFjX2N2X3N0cnVjdF9hZGRyaW5mbz15ZXMsCi0JYWNfY3Zfc3RydWN0X2FkZHJpbmZvPW5vKSkKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8bmV0ZGIuaD5dXSwgW1tzdHJ1Y3QgYWRkcmluZm8gYV1dKV0sCisgIFthY19jdl9zdHJ1Y3RfYWRkcmluZm89eWVzXSwKKyAgW2FjX2N2X3N0cnVjdF9hZGRyaW5mbz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RydWN0X2FkZHJpbmZvKQogaWYgdGVzdCAkYWNfY3Zfc3RydWN0X2FkZHJpbmZvID0geWVzOyB0aGVuCiAJQUNfREVGSU5FKEhBVkVfQUREUklORk8sIDEsIFtzdHJ1Y3QgYWRkcmluZm8gKG5ldGRiLmgpXSkKQEAgLTMwNjcsMTIgKzMwMjUsMTEgQEAKIAogQUNfTVNHX0NIRUNLSU5HKGZvciBzb2NrYWRkcl9zdG9yYWdlKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlLAotQUNfVFJZX0NPTVBJTEUoWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKLQlbc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc10sCi0JYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9eWVzLAotCWFjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPW5vKSkKKyMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzXV0pXSwKKyAgW2FjX2N2X3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPXllc10sCisgIFthY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UpCiBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSA9IHllczsgdGhlbgogCUFDX0RFRklORShIQVZFX1NPQ0tBRERSX1NUT1JBR0UsIDEsIFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAoc3lzL3NvY2tldC5oKV0pCkBAIC0zMDg1LDMwICszMDQyLDMzIEBACiAKIHdvcmtzPW5vCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHdvcmtpbmcgdm9sYXRpbGUpCi1BQ19UUllfQ09NUElMRShbXSxbdm9sYXRpbGUgaW50IHg7IHggPSAwO10sIHdvcmtzPXllcywgCi0gIEFDX0RFRklORSh2b2xhdGlsZSwgW10sIFtEZWZpbmUgdG8gZW1wdHkgaWYgdGhlIGtleXdvcmQgZG9lcyBub3Qgd29yay5dKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW11dLCBbW3ZvbGF0aWxlIGludCB4OyB4ID0gMDtdXSldLAorICBbd29ya3M9eWVzXSwKKyAgW0FDX0RFRklORSh2b2xhdGlsZSwgLCBbRGVmaW5lIHRvIGVtcHR5IGlmIHRoZSBrZXl3b3JkIGRvZXMgbm90IHdvcmsuXSldCiApCiBBQ19NU0dfUkVTVUxUKCR3b3JrcykKIAogd29ya3M9bm8KIEFDX01TR19DSEVDS0lORyhmb3Igd29ya2luZyBzaWduZWQgY2hhcikKLUFDX1RSWV9DT01QSUxFKFtdLCBbc2lnbmVkIGNoYXIgYztdLCB3b3Jrcz15ZXMsIAotICBBQ19ERUZJTkUoc2lnbmVkLCBbXSwgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBkb2VzIG5vdCB3b3JrLl0pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbc2lnbmVkIGNoYXIgYztdXSldLAorICBbd29ya3M9eWVzXSwKKyAgW0FDX0RFRklORShzaWduZWQsICwgW0RlZmluZSB0byBlbXB0eSBpZiB0aGUga2V5d29yZCBkb2VzIG5vdCB3b3JrLl0pXQogKQogQUNfTVNHX1JFU1VMVCgkd29ya3MpCiAKIGhhdmVfcHJvdG90eXBlcz1ubwogQUNfTVNHX0NIRUNLSU5HKGZvciBwcm90b3R5cGVzKQotQUNfVFJZX0NPTVBJTEUoW2ludCBmb28oaW50IHgpIHsgcmV0dXJuIDA7IH1dLCBbcmV0dXJuIGZvbygxMCk7XSxbCi0gIEFDX0RFRklORShIQVZFX1BST1RPVFlQRVMsIDEsIAotICAgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZV0pIAotICBoYXZlX3Byb3RvdHlwZXM9eWVzCi1dKQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbW2ludCBmb28oaW50IHgpIHsgcmV0dXJuIDA7IH1dXSwgW1tyZXR1cm4gZm9vKDEwKTtdXSldLAorICBbQUNfREVGSU5FKEhBVkVfUFJPVE9UWVBFUywgMSwgCisgICAgIFtEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGVdKSAKKyAgIGhhdmVfcHJvdG90eXBlcz15ZXNdLAorICBbXQorKQogQUNfTVNHX1JFU1VMVCgkaGF2ZV9wcm90b3R5cGVzKQogCiB3b3Jrcz1ubwogQUNfTVNHX0NIRUNLSU5HKGZvciB2YXJpYWJsZSBsZW5ndGggcHJvdG90eXBlcyBhbmQgc3RkYXJnLmgpCi1BQ19UUllfQ09NUElMRShbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiBpbnQgZm9vKGludCB4LCAuLi4pIHsKIAl2YV9saXN0IHZhOwpAQCAtMzExOCw0NCArMzA3OCw0NCBAQAogCXZhX2FyZyh2YSwgZG91YmxlKTsKIAlyZXR1cm4gMDsKIH0KLV0sIFtyZXR1cm4gZm9vKDEwLCAiIiwgMy4xNCk7XSwgWworXV0sIFtbcmV0dXJuIGZvbygxMCwgIiIsIDMuMTQpO11dKV0sWwogICBBQ19ERUZJTkUoSEFWRV9TVERBUkdfUFJPVE9UWVBFUywgMSwKICAgIFtEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyB2YXJpYWJsZSBsZW5ndGggZnVuY3Rpb24gcHJvdG90eXBlcwogICAgKGUuZy4gdm9pZCBmcHJpbnRmKEZJTEUgKiwgY2hhciAqLCAuLi4pOykgKmFuZCogPHN0ZGFyZy5oPl0pIAogICB3b3Jrcz15ZXMKLV0pCitdLFtdKQogQUNfTVNHX1JFU1VMVCgkd29ya3MpCiAKICMgY2hlY2sgZm9yIHNvY2tldHBhaXIKIEFDX01TR19DSEVDS0lORyhmb3Igc29ja2V0cGFpcikKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci1dLCB2b2lkICp4PXNvY2tldHBhaXIsCi0gIEFDX0RFRklORShIQVZFX1NPQ0tFVFBBSVIsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3NvY2tldHBhaXInIGZ1bmN0aW9uLikKLSAgQUNfTVNHX1JFU1VMVCh5ZXMpLAotICBBQ19NU0dfUkVTVUxUKG5vKQorXV0sIFtbdm9pZCAqeD1zb2NrZXRwYWlyXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1NPQ0tFVFBBSVIsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzb2NrZXRwYWlyJyBmdW5jdGlvbi5dKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiAjIGNoZWNrIGlmIHNvY2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyCiBBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXIpCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAotW3N0cnVjdCBzb2NrYWRkciB4OwoteC5zYV9sZW4gPSAwO10sCi0JQUNfTVNHX1JFU1VMVCh5ZXMpCi0JQUNfREVGSU5FKEhBVkVfU09DS0FERFJfU0FfTEVOLCAxLCBbRGVmaW5lIGlmIHNvY2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyXSksCi0JQUNfTVNHX1JFU1VMVChubykpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dXSwgW1tzdHJ1Y3Qgc29ja2FkZHIgeDsKK3guc2FfbGVuID0gMDtdXSldLAorICBbQUNfTVNHX1JFU1VMVCh5ZXMpCisgICBBQ19ERUZJTkUoSEFWRV9TT0NLQUREUl9TQV9MRU4sIDEsIFtEZWZpbmUgaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXJdKV0sCisgIFtBQ19NU0dfUkVTVUxUKG5vKV0KKykKIAogdmFfbGlzdF9pc19hcnJheT1ubwogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdmFfbGlzdCBpcyBhbiBhcnJheSkKLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpZmRlZiBIQVZFX1NUREFSR19QUk9UT1RZUEVTCiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjZWxzZQogI2luY2x1ZGUgPHZhcmFyZ3MuaD4KICNlbmRpZgotXSwgW3ZhX2xpc3QgbGlzdDEsIGxpc3QyOyBsaXN0MSA9IGxpc3QyO10sICwgWworXV0sIFtbdmFfbGlzdCBsaXN0MSwgbGlzdDI7IGxpc3QxID0gbGlzdDI7XV0pXSxbXSxbCiAgQUNfREVGSU5FKFZBX0xJU1RfSVNfQVJSQVksIDEsIFtEZWZpbmUgaWYgYSB2YV9saXN0IGlzIGFuIGFycmF5IG9mIHNvbWUga2luZF0pIAogIHZhX2xpc3RfaXNfYXJyYXk9eWVzCiBdKQpAQCAtMzE3MCw5ICszMTMwLDkgQEAKICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCA2IGFyZ3NdKQogICBPTERfQ0ZMQUdTPSRDRkxBR1MKICAgQ0ZMQUdTPSIkQ0ZMQUdTICRNWV9DUFBGTEFHUyAkTVlfVEhSRUFEX0NQUEZMQUdTICRNWV9DRkxBR1MiCi0gIEFDX1RSWV9DT01QSUxFKFsKKyAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWwogIyAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0gIF0sIFsKKyAgXV0sIFtbCiAgICAgY2hhciAqbmFtZTsKICAgICBzdHJ1Y3QgaG9zdGVudCAqaGUsICpyZXM7CiAgICAgY2hhciBidWZmZXJbMjA0OF07CkBAIC0zMTgwLDQ4ICszMTQwLDUwIEBACiAgICAgaW50IGhfZXJybm9wOwogCiAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgYnVmZmVyLCBidWZsZW4sICZyZXMsICZoX2Vycm5vcCkKLSAgXSwgWworICBdXSldLFsKICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1IpCiAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzZfQVJHLCAxLAogICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNi1hcmcgdmVyc2lvbiBvZiBnZXRob3N0YnluYW1lX3IoKS5dKQogICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLCBbCisgIF0sWwogICAgIEFDX01TR19SRVNVTFQobm8pCiAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCA1IGFyZ3NdKQotICAgIEFDX1RSWV9DT01QSUxFKFsKLSMgICAgIGluY2x1ZGUgPG5ldGRiLmg+Ci0gICAgXSwgWwotICAgICAgY2hhciAqbmFtZTsKLSAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKLSAgICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgICAgaW50IGJ1ZmxlbiA9IDIwNDg7Ci0gICAgICBpbnQgaF9lcnJub3A7Ci0KLSAgICAgICh2b2lkKSBnZXRob3N0YnluYW1lX3IobmFtZSwgaGUsIGJ1ZmZlciwgYnVmbGVuLCAmaF9lcnJub3ApCi0gICAgXSwgWwotICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQotICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzVfQVJHLCAxLAotICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSA1LWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCi0gICAgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICBdLCBbCi0gICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3NdKQotICAgICAgQUNfVFJZX0NPTVBJTEUoWworICAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICMgICAgICAgaW5jbHVkZSA8bmV0ZGIuaD4KLSAgICAgIF0sIFsKKyAgICAgIF1dLCBbWwogICAgICAgICBjaGFyICpuYW1lOwogICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqaGU7Ci0gICAgICAgIHN0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKyAgICAgICAgY2hhciBidWZmZXJbMjA0OF07CisgICAgICAgIGludCBidWZsZW4gPSAyMDQ4OworICAgICAgICBpbnQgaF9lcnJub3A7CiAKLSAgICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgJmRhdGEpOwotICAgICAgXSwgWworICAgICAgICAodm9pZCkgZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIGhlLCBidWZmZXIsIGJ1ZmxlbiwgJmhfZXJybm9wKQorICAgICAgXV0pXSwKKyAgICAgIFsKICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQotICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfM19BUkcsIDEsCi0gICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0YnluYW1lX3IoKS5dKQorICAgICAgICBBQ19ERUZJTkUoSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcsIDEsCisgICAgICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSA1LWFyZyB2ZXJzaW9uIG9mIGdldGhvc3RieW5hbWVfcigpLl0pCiAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQogICAgICAgXSwgWwogICAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgXSkKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtnZXRob3N0YnluYW1lX3Igd2l0aCAzIGFyZ3NdKQorICAgICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbCisjICAgICAgICAgICBpbmNsdWRlIDxuZXRkYi5oPgorICAgICAgICAgIF1dLCBbWworICAgICAgICAgICAgY2hhciAqbmFtZTsKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpoZTsKKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50X2RhdGEgZGF0YTsKKworICAgICAgICAgICAgKHZvaWQpIGdldGhvc3RieW5hbWVfcihuYW1lLCBoZSwgJmRhdGEpOworICAgICAgICAgIF1dKV0sCisgICAgICAgICAgWworICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SKQorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHLCAxLAorICAgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIDMtYXJnIHZlcnNpb24gb2YgZ2V0aG9zdGJ5bmFtZV9yKCkuXSkKKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICAgIF0sIFsKKyAgICAgICAgICAgQUNfTVNHX1JFU1VMVChubykKKyAgICAgICAgXSkKICAgICBdKQogICBdKQogICBDRkxBR1M9JE9MRF9DRkxBR1MKQEAgLTMyNDYsNyArMzIwOCw3IEBACiAjIENoZWNrIGZvciAtLXdpdGgtZnBlY3RsCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1mcGVjdGwpCiBBQ19BUkdfV0lUSChmcGVjdGwsCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtZnBlY3RsLCBlbmFibGUgU0lHRlBFIGNhdGNoaW5nKSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtZnBlY3RsXSwgW2VuYWJsZSBTSUdGUEUgY2F0Y2hpbmddKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiAhPSBubwogdGhlbiAKQEAgLTMyNjUsNyArMzIyNyw3IEBACiBlc2FjCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0td2l0aC1saWJtPVNUUklORykKIEFDX0FSR19XSVRIKGxpYm0sCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtbGlibT1TVFJJTkcsIG1hdGggbGlicmFyeSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWxpYm09U1RSSU5HXSwgW21hdGggbGlicmFyeV0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiID0gbm8KIHRoZW4gTElCTT0KQEAgLTMyODEsNyArMzI0Myw3IEBACiBBQ19TVUJTVChMSUJDKQogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtbGliYz1TVFJJTkcpCiBBQ19BUkdfV0lUSChsaWJjLAotICAgICAgICAgICAgQUNfSEVMUF9TVFJJTkcoLS13aXRoLWxpYmM9U1RSSU5HLCBDIGxpYnJhcnkpLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1saWJjPVNUUklOR10sIFtDIGxpYnJhcnldKSwKIFsKIGlmIHRlc3QgIiR3aXRodmFsIiA9IG5vCiB0aGVuIExJQkM9CkBAIC0zMjk5LDcgKzMyNjEsNyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBDIGRvdWJsZXMgYXJlIGxpdHRsZS1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGUsIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxzdHJpbmcuaD4KIGludCBtYWluKCkgewogICAgIGRvdWJsZSB4ID0gOTAwNjEwNDA3MTgzMjU4MS4wOwpAQCAtMzMwOCwxMCArMzI3MCwxMCBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDE7CiB9Ci1dLAotYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9eWVzLAotYWNfY3ZfbGl0dGxlX2VuZGlhbl9kb3VibGU9bm8sCi1hY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ubyldKQorXV0pXSwKK1thY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT15ZXNdLAorW2FjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlPW5vXSwKK1thY19jdl9saXR0bGVfZW5kaWFuX2RvdWJsZT1ub10pXSkKIEFDX01TR19SRVNVTFQoJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlKQogaWYgdGVzdCAiJGFjX2N2X2xpdHRsZV9lbmRpYW5fZG91YmxlIiA9IHllcwogdGhlbgpAQCAtMzMyMiw3ICszMjg0LDcgQEAKIAogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgQyBkb3VibGVzIGFyZSBiaWctZW5kaWFuIElFRUUgNzU0IGJpbmFyeTY0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X2JpZ19lbmRpYW5fZG91YmxlLCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiBpbnQgbWFpbigpIHsKICAgICBkb3VibGUgeCA9IDkwMDYxMDQwNzE4MzI1ODEuMDsKQEAgLTMzMzEsMTAgKzMyOTMsMTAgQEAKICAgICBlbHNlCiAgICAgICAgIHJldHVybiAxOwogfQotXSwKLWFjX2N2X2JpZ19lbmRpYW5fZG91YmxlPXllcywKLWFjX2N2X2JpZ19lbmRpYW5fZG91YmxlPW5vLAotYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9bm8pXSkKK11dKV0sCitbYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9eWVzXSwKK1thY19jdl9iaWdfZW5kaWFuX2RvdWJsZT1ub10sCitbYWNfY3ZfYmlnX2VuZGlhbl9kb3VibGU9bm9dKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSkKIGlmIHRlc3QgIiRhY19jdl9iaWdfZW5kaWFuX2RvdWJsZSIgPSB5ZXMKIHRoZW4KQEAgLTMzNDksNyArMzMxMSw3IEBACiAjIGNvbnZlcnNpb25zIHdvcmsuCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBDIGRvdWJsZXMgYXJlIEFSTSBtaXhlZC1lbmRpYW4gSUVFRSA3NTQgYmluYXJ5NjQpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZSwgWwotQUNfVFJZX1JVTihbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHN0cmluZy5oPgogaW50IG1haW4oKSB7CiAgICAgZG91YmxlIHggPSA5MDA2MTA0MDcxODMyNTgxLjA7CkBAIC0zMzU4LDEwICszMzIwLDEwIEBACiAgICAgZWxzZQogICAgICAgICByZXR1cm4gMTsKIH0KLV0sCi1hY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPXllcywKLWFjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9bm8sCi1hY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPW5vKV0pCitdXSldLAorW2FjX2N2X21peGVkX2VuZGlhbl9kb3VibGU9eWVzXSwKK1thY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPW5vXSwKK1thY19jdl9taXhlZF9lbmRpYW5fZG91YmxlPW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbWl4ZWRfZW5kaWFuX2RvdWJsZSkKIGlmIHRlc3QgIiRhY19jdl9taXhlZF9lbmRpYW5fZG91YmxlIiA9IHllcwogdGhlbgpAQCAtMzM3NCwyNSArMzMzNiwyMyBAQAogIyBjb3JyZWN0bHktcm91bmRlZCBzdHJpbmcgPC0+IGRvdWJsZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmcm9tCiAjIFB5dGhvbi9kdG9hLmMsIHdoaWNoIGluIHR1cm4gcmVxdWlyZSB0aGF0IHRoZSBGUFUgdXNlcyA1My1iaXQKICMgcm91bmRpbmc7IHRoaXMgaXMgYSBwcm9ibGVtIG9uIHg4Niwgd2hlcmUgdGhlIHg4NyBGUFUgaGFzIGEgZGVmYXVsdAotIyByb3VuZGluZyBwcmVjaXNpb24gb2YgNjQgYml0cy4gIEZvciBnY2MveDg2LCB3ZSB0cnkgdG8gZml4IHRoaXMgYnkKKyMgcm91bmRpbmcgcHJlY2lzaW9uIG9mIDY0IGJpdHMuICBGb3IgZ2NjL3g4Niwgd2UgY2FuIGZpeCB0aGlzIGJ5CiAjIHVzaW5nIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgdGhlIHg4NyBGUFUgY29udHJvbCB3b3JkLgotaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAtbiAiYCRDQyAtZE0gLUUgLSA8L2Rldi9udWxsIHwgZ3JlcCBpMzg2YCIKKworIyBUaGlzIGlubGluZSBhc3NlbWJsZXIgc3ludGF4IG1heSBhbHNvIHdvcmsgZm9yIHN1bmNjIGFuZCBpY2MsCisjIHNvIHdlIHRyeSBpdCBvbiBhbGwgcGxhdGZvcm1zLgorCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQpCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sIFtbCisgIHVuc2lnbmVkIHNob3J0IGN3OworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjdykpOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZsZGN3ICUwIiA6IDogIm0iIChjdykpOworXV0pXSxbaGF2ZV9nY2NfYXNtX2Zvcl94ODc9eWVzXSxbaGF2ZV9nY2NfYXNtX2Zvcl94ODc9bm9dKQorQUNfTVNHX1JFU1VMVCgkaGF2ZV9nY2NfYXNtX2Zvcl94ODcpCitpZiB0ZXN0ICIkaGF2ZV9nY2NfYXNtX2Zvcl94ODciID0geWVzCiB0aGVuCi0gICAgIyBDaGVjayB0aGF0IGl0J3Mgb2theSB0byB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQKLSAgICAjIHg4NyBjb250cm9sIHdvcmQuICBJdCBzaG91bGQgYmUsIGJ1dCB5b3UgbmV2ZXIga25vdy4uLgotICAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFuZCBzZXQgeDg3IGNvbnRyb2wgd29yZCkKLSAgICBBQ19UUllfQ09NUElMRShbXSwgWwotICAgICAgdW5zaWduZWQgc2hvcnQgY3c7Ci0gICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZuc3RjdyAlMCIgOiAiPW0iIChjdykpOwotICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmbGRjdyAlMCIgOiA6ICJtIiAoY3cpKTsKLSAgICBdLAotICAgIFtoYXZlX2djY19hc21fZm9yX3g4Nz15ZXNdLCBbaGF2ZV9nY2NfYXNtX2Zvcl94ODc9bm9dKQotICAgIEFDX01TR19SRVNVTFQoJGhhdmVfZ2NjX2FzbV9mb3JfeDg3KQotICAgIGlmIHRlc3QgIiRoYXZlX2djY19hc21fZm9yX3g4NyIgPSB5ZXMKLSAgICB0aGVuCi0gICAgICAgIEFDX0RFRklORShIQVZFX0dDQ19BU01fRk9SX1g4NywgMSwKLSAgICAgICAgW0RlZmluZSBpZiB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmRdKQotICAgIGZpCisgICAgQUNfREVGSU5FKEhBVkVfR0NDX0FTTV9GT1JfWDg3LCAxLAorICAgIFtEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5saW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCB4ODcgY29udHJvbCB3b3JkXSkKIGZpCiAKICMgRGV0ZWN0IHdoZXRoZXIgc3lzdGVtIGFyaXRobWV0aWMgaXMgc3ViamVjdCB0byB4ODctc3R5bGUgZG91YmxlCkBAIC0zNDA0LDcgKzMzNjQsNyBAQAogIyAkQkFTRUNGTEFHUyBtYXkgYWZmZWN0IHRoZSByZXN1bHQKIGFjX3NhdmVfY2M9IiRDQyIKIENDPSIkQ0MgJEJBU0VDRkxBR1MiCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8bWF0aC5oPgogaW50IG1haW4oKSB7CkBAIC0zNDIzLDEwICszMzgzLDEwIEBACiAgICAgLyogYm90aCB0ZXN0cyBzaG93IGV2aWRlbmNlIG9mIGRvdWJsZSByb3VuZGluZyAqLwogICAgIGV4aXQoMSk7CiB9Ci1dLAotYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ubywKLWFjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9eWVzLAotYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ubykKK11dKV0sCitbYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz1ub10sCitbYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZz15ZXNdLAorW2FjX2N2X3g4N19kb3VibGVfcm91bmRpbmc9bm9dKQogQ0M9IiRhY19zYXZlX2NjIgogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfeDg3X2RvdWJsZV9yb3VuZGluZykKIGlmIHRlc3QgIiRhY19jdl94ODdfZG91YmxlX3JvdW5kaW5nIiA9IHllcwpAQCAtMzQ0MiwxMSArMzQwMiwxNSBAQAogTElCU19TQVZFPSRMSUJTCiBMSUJTPSIkTElCUyAkTElCTSIKIAorQUNfQ0hFQ0tfRlVOQ1MoW2Fjb3NoIGFzaW5oIGF0YW5oIGNvcHlzaWduIGVyZiBlcmZjIGV4cG0xIGZpbml0ZSBnYW1tYV0pCitBQ19DSEVDS19GVU5DUyhbaHlwb3QgbGdhbW1hIGxvZzFwIHJvdW5kIHRnYW1tYV0pCitBQ19DSEVDS19ERUNMUyhbaXNpbmYsIGlzbmFuLCBpc2Zpbml0ZV0sIFtdLCBbXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQorCiAjIE9uIEZyZWVCU0QgNi4yLCBpdCBhcHBlYXJzIHRoYXQgdGFuaCgtMC4pIHJldHVybnMgMC4gaW5zdGVhZCBvZgogIyAtMC4gb24gc29tZSBhcmNoaXRlY3R1cmVzLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdGFuaCBwcmVzZXJ2ZXMgdGhlIHNpZ24gb2YgemVybykKIEFDX0NBQ0hFX1ZBTChhY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ24sIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiBpbnQgbWFpbigpIHsKQEAgLTM0NTcsMTAgKzM0MjEsMTAgQEAKICAgICAgIGF0YW4yKHRhbmgoLTAuKSwgLTEuKSA9PSBhdGFuMigtMC4sIC0xLikpIGV4aXQoMCk7CiAgIGVsc2UgZXhpdCgxKTsKIH0KLV0sCi1hY19jdl90YW5oX3ByZXNlcnZlc196ZXJvX3NpZ249eWVzLAotYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vLAotYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vKV0pCitdXSldLAorW2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj15ZXNdLAorW2FjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbj1ub10sCitbYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduPW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfdGFuaF9wcmVzZXJ2ZXNfemVyb19zaWduKQogaWYgdGVzdCAiJGFjX2N2X3RhbmhfcHJlc2VydmVzX3plcm9fc2lnbiIgPSB5ZXMKIHRoZW4KQEAgLTM0NjgsOCArMzQzMiwzNCBAQAogICBbRGVmaW5lIGlmIHRhbmgoLTAuKSBpcyAtMC4sIG9yIGlmIHBsYXRmb3JtIGRvZXNuJ3QgaGF2ZSBzaWduZWQgemVyb3NdKQogZmkKIAotQUNfQ0hFQ0tfRlVOQ1MoW2Fjb3NoIGFzaW5oIGF0YW5oIGNvcHlzaWduIGV4cG0xIGZpbml0ZSBoeXBvdCBsb2cxcCByb3VuZF0pCi1BQ19DSEVDS19ERUNMUyhbaXNpbmYsIGlzbmFuLCBpc2Zpbml0ZV0sIFtdLCBbXSwgW1sjaW5jbHVkZSA8bWF0aC5oPl1dKQoraWYgdGVzdCAiJGFjX2N2X2Z1bmNfbG9nMXAiID0geWVzCit0aGVuCisgICAgIyBPbiBzb21lIHZlcnNpb25zIG9mIEFJWCwgbG9nMXAoLTAuKSByZXR1cm5zIDAuIGluc3RlYWQgb2YKKyAgICAjIC0wLiAgU2VlIGlzc3VlICM5OTIwLgorICAgIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGxvZzFwIGRyb3BzIHRoZSBzaWduIG9mIG5lZ2F0aXZlIHplcm8pCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2xvZzFwX2Ryb3BzX3plcm9fc2lnbiwgWworICAgIEFDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCisgICAgI2luY2x1ZGUgPG1hdGguaD4KKyAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgaW50IG1haW4oKSB7CisgICAgICAgIC8qIEZhaWwgaWYgdGhlIHNpZ25zIG9mIGxvZzFwKC0wLikgYW5kIC0wLiBjYW4gYmUKKwkgICBkaXN0aW5ndWlzaGVkLiAqLworICAgICAgICBpZiAoYXRhbjIobG9nMXAoLTAuKSwgLTEuKSA9PSBhdGFuMigtMC4sIC0xLikpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIF1dKV0sCisgICAgW2FjX2N2X2xvZzFwX2Ryb3BzX3plcm9fc2lnbj1ub10sCisgICAgW2FjX2N2X2xvZzFwX2Ryb3BzX3plcm9fc2lnbj15ZXNdLAorICAgIFthY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ249bm9dKV0pCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbG9nMXBfZHJvcHNfemVyb19zaWduKQorZmkKK2lmIHRlc3QgIiRhY19jdl9sb2cxcF9kcm9wc196ZXJvX3NpZ24iID0geWVzCit0aGVuCisgIEFDX0RFRklORShMT0cxUF9EUk9QU19aRVJPX1NJR04sIDEsCisgIFtEZWZpbmUgaWYgbG9nMXAoLTAuKSBpcyAwLiByYXRoZXIgdGhhbiAtMC5dKQorZmkKIAogTElCUz0kTElCU19TQVZFCiAKQEAgLTM0ODAsNyArMzQ3MCw3IEBACiAjIHNlbV9vcGVuIHJlc3VsdHMgaW4gYSAnU2lnbmFsIDEyJyBlcnJvci4KIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIFBPU0lYIHNlbWFwaG9yZXMgYXJlIGVuYWJsZWQpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkLAotQUNfVFJZX1JVTihbCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTM0OTcsOSArMzQ4NywxMCBAQAogICBzZW1fdW5saW5rKCIvYXV0b2NvbmYiKTsKICAgcmV0dXJuIDA7CiB9Ci1dLCBhY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9eWVzLAotICAgYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPW5vLAotICAgYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPXllcykKK11dKV0sCitbYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPXllc10sCitbYWNfY3ZfcG9zaXhfc2VtYXBob3Jlc19lbmFibGVkPW5vXSwKK1thY19jdl9wb3NpeF9zZW1hcGhvcmVzX2VuYWJsZWQ9eWVzXSkKICkKIEFDX01TR19SRVNVTFQoJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCkKIGlmIHRlc3QgJGFjX2N2X3Bvc2l4X3NlbWFwaG9yZXNfZW5hYmxlZCA9IG5vCkBAIC0zNTEwLDcgKzM1MDEsOCBAQAogCiAjIE11bHRpcHJvY2Vzc2luZyBjaGVjayBmb3IgYnJva2VuIHNlbV9nZXR2YWx1ZQogQUNfTVNHX0NIRUNLSU5HKGZvciBicm9rZW4gc2VtX2dldHZhbHVlKQotQUNfVFJZX1JVTihbCitBQ19DQUNIRV9WQUwoYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZSwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzUzMSwxNiArMzUyMywyMiBAQAogICBzZW1fdW5saW5rKCIvYXV0b2NmdHciKTsKICAgcmV0dXJuIHJlcz09LTEgPyAxIDogMDsKIH0KLV0KLSxBQ19NU0dfUkVTVUxUKG5vKSwKLSBBQ19NU0dfUkVTVUxUKHllcykKLSAgQUNfREVGSU5FKEhBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSwgMSwgZGVmaW5lIHRvIDEgaWYgeW91ciBzZW1fZ2V0dmFsdWUgaXMgYnJva2VuLikKK11dKV0sCitbYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT1ub10sCitbYWNfY3ZfYnJva2VuX3NlbV9nZXR2YWx1ZT15ZXNdLAorW2FjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWU9eWVzXSkKICkKK0FDX01TR19SRVNVTFQoJGFjX2N2X2Jyb2tlbl9zZW1fZ2V0dmFsdWUpCitpZiB0ZXN0ICRhY19jdl9icm9rZW5fc2VtX2dldHZhbHVlID0geWVzCit0aGVuCisgIEFDX0RFRklORShIQVZFX0JST0tFTl9TRU1fR0VUVkFMVUUsIDEsCisgIFtkZWZpbmUgdG8gMSBpZiB5b3VyIHNlbV9nZXR2YWx1ZSBpcyBicm9rZW4uXSkKK2ZpCiAKICMgZGV0ZXJtaW5lIHdoYXQgc2l6ZSBkaWdpdCB0byB1c2UgZm9yIFB5dGhvbidzIGxvbmdzCiBBQ19NU0dfQ0hFQ0tJTkcoW2RpZ2l0IHNpemUgZm9yIFB5dGhvbidzIGxvbmdzXSkKIEFDX0FSR19FTkFCTEUoYmlnLWRpZ2l0cywKLUFDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1iaWctZGlnaXRzQDw6QD1CSVRTQDo+QF0sW3VzZSBiaWcgZGlnaXRzIGZvciBQeXRob24gbG9uZ3MgW1tCSVRTPTMwXV1dKSwKK0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1iaWctZGlnaXRzQDw6QD1CSVRTQDo+QF0sW3VzZSBiaWcgZGlnaXRzIGZvciBQeXRob24gbG9uZ3MgW1tCSVRTPTMwXV1dKSwKIFtjYXNlICRlbmFibGVfYmlnX2RpZ2l0cyBpbgogeWVzKQogICBlbmFibGVfYmlnX2RpZ2l0cz0zMCA7OwpAQCAtMzU3MywxNCArMzU3MSwxNCBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIFVDUy00IHRjbCkKIGhhdmVfdWNzNF90Y2w9bm8KLUFDX1RSWV9DT01QSUxFKFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKICNpbmNsdWRlIDx0Y2wuaD4KICNpZiBUQ0xfVVRGX01BWCAhPSA2CiAjIGVycm9yICJOT1QgVUNTNF9UQ0wiCi0jZW5kaWZdLCBbXSwgWworI2VuZGlmXV0sIFtbXV0pXSxbCiAgIEFDX0RFRklORShIQVZFX1VDUzRfVENMLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGNsIGFuZCBUQ0xfVVRGX01BWD09Nl0pCiAgIGhhdmVfdWNzNF90Y2w9eWVzCi1dKQorXSxbXSkKIEFDX01TR19SRVNVTFQoJGhhdmVfdWNzNF90Y2wpCiAKICMgY2hlY2sgd2hldGhlciB3Y2hhcl90IGlzIHNpZ25lZCBvciBub3QKQEAgLTM1ODksMjMgKzM1ODcsMjMgQEAKICAgIyBjaGVjayB3aGV0aGVyIHdjaGFyX3QgaXMgc2lnbmVkIG9yIG5vdAogICBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3Y2hhcl90IGlzIHNpZ25lZCkKICAgQUNfQ0FDSEVfVkFMKGFjX2N2X3djaGFyX3Rfc2lnbmVkLCBbCi0gIEFDX1RSWV9SVU4oWworICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwogICAjaW5jbHVkZSA8d2NoYXIuaD4KICAgaW50IG1haW4oKQogICB7CiAJLyogU3VjY2VzczogZXhpdCBjb2RlIDAgKi8KICAgICAgICAgZXhpdCgoKCh3Y2hhcl90KSAtMSkgPCAoKHdjaGFyX3QpIDApKSA/IDAgOiAxKTsKICAgfQotICBdLAotICBhY19jdl93Y2hhcl90X3NpZ25lZD15ZXMsCi0gIGFjX2N2X3djaGFyX3Rfc2lnbmVkPW5vLAotICBhY19jdl93Y2hhcl90X3NpZ25lZD15ZXMpXSkKKyAgXV0pXSwKKyAgW2FjX2N2X3djaGFyX3Rfc2lnbmVkPXllc10sCisgIFthY19jdl93Y2hhcl90X3NpZ25lZD1ub10sCisgIFthY19jdl93Y2hhcl90X3NpZ25lZD15ZXNdKV0pCiAgIEFDX01TR19SRVNVTFQoJGFjX2N2X3djaGFyX3Rfc2lnbmVkKQogZmkKIAogQUNfTVNHX0NIRUNLSU5HKHdoYXQgdHlwZSB0byB1c2UgZm9yIHN0cikKIEFDX0FSR19XSVRIKHdpZGUtdW5pY29kZSwgCi0gICAgICAgICAgICBBQ19IRUxQX1NUUklORygtLXdpdGgtd2lkZS11bmljb2RlLCBVc2UgNC1ieXRlIFVuaWNvZGUgY2hhcmFjdGVycyAoZGVmYXVsdCBpcyAyIGJ5dGVzKSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXdpZGUtdW5pY29kZV0sIFtVc2UgNC1ieXRlIFVuaWNvZGUgY2hhcmFjdGVycyAoZGVmYXVsdCBpcyAyIGJ5dGVzKV0pLAogWwogaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCiB0aGVuIHVuaWNvZGVfc2l6ZT0iNCIKQEAgLTM2MTQsNyArMzYxMiw3IEBACiBdLAogWwogY2FzZSAiJGhhdmVfdWNzNF90Y2wiIGluCi0gIHllcykgdW5pY29kZV9zaXplPSI0IiA7OworICB5ZXMpIHVuaWNvZGVfc2l6ZT0iNCI7OwogICAqKSAgIHVuaWNvZGVfc2l6ZT0iMiIgOzsKIGVzYWMKIF0pCkBAIC0zNjIyLDcgKzM2MjAsMTAgQEAKIEFIX1RFTVBMQVRFKFB5X1VOSUNPREVfU0laRSwKICAgW0RlZmluZSBhcyB0aGUgc2l6ZSBvZiB0aGUgdW5pY29kZSB0eXBlLl0pCiBjYXNlICIkdW5pY29kZV9zaXplIiBpbgotICA0KSBBQ19ERUZJTkUoUHlfVU5JQ09ERV9TSVpFLCA0KSA7OworICA0KQorICAgICBBQ19ERUZJTkUoUHlfVU5JQ09ERV9TSVpFLCA0KQorICAgICBBQklGTEFHUz0iJHtBQklGTEFHU311IgorICAgICA7OwogICAqKSBBQ19ERUZJTkUoUHlfVU5JQ09ERV9TSVpFLCAyKSA7OwogZXNhYwogCkBAIC0zNjU1LDE5ICszNjU2LDc1IEBACiAjIGNoZWNrIGZvciBlbmRpYW5uZXNzCiBBQ19DX0JJR0VORElBTgogCisjIEFCSSB2ZXJzaW9uIHN0cmluZyBmb3IgUHl0aG9uIGV4dGVuc2lvbiBtb2R1bGVzLiAgVGhpcyBhcHBlYXJzIGJldHdlZW4gdGhlCisjIHBlcmlvZHMgaW4gc2hhcmVkIGxpYnJhcnkgZmlsZSBuYW1lcywgZS5nLiBmb28uPFNPQUJJPi5zby4gIEl0IGlzIGNhbGN1bGF0ZWQKKyMgZnJvbSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgd2hpY2ggYWZmZWN0IHRoZSBBQkkgb2YgdGhpcyBQeXRob24gYnVpbGQgKGluCisjIHRoaXMgb3JkZXIpOgorIworIyAqIFRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gKGFsd2F5cyAnY3B5dGhvbi0nIGZvciB1cykKKyMgKiBUaGUgbWFqb3IgYW5kIG1pbm9yIHZlcnNpb24gbnVtYmVycworIyAqIC0td2l0aC1weWRlYnVnIChhZGRzIGEgJ2QnKQorIyAqIC0td2l0aC1weW1hbGxvYyAoYWRkcyBhICdtJykKKyMgKiAtLXdpdGgtd2lkZS11bmljb2RlIChhZGRzIGEgJ3UnKQorIworIyBUaHVzIGZvciBleGFtcGxlLCBQeXRob24gMy4yIGJ1aWx0IHdpdGggd2lkZSB1bmljb2RlLCBweWRlYnVnLCBhbmQgcHltYWxsb2MsCisjIHdvdWxkIGdldCBhIHNoYXJlZCBsaWJyYXJ5IEFCSSB2ZXJzaW9uIHRhZyBvZiAnY3B5dGhvbi0zMmRtdScgYW5kIHNoYXJlZAorIyBsaWJyYXJpZXMgd291bGQgYmUgbmFtZWQgJ2Zvby5jcHl0aG9uLTMyZG11LnNvJy4KK0FDX1NVQlNUKFNPQUJJKQorQUNfTVNHX0NIRUNLSU5HKEFCSUZMQUdTKQorQUNfTVNHX1JFU1VMVCgkQUJJRkxBR1MpCitBQ19NU0dfQ0hFQ0tJTkcoU09BQkkpCitTT0FCST0nY3B5dGhvbi0nYGVjaG8gJFZFUlNJT04gfCB0ciAtZCAuYCR7QUJJRkxBR1N9CitBQ19NU0dfUkVTVUxUKCRTT0FCSSkKKworQUNfTVNHX0NIRUNLSU5HKExEVkVSU0lPTikKK0xEVkVSU0lPTj0nJChWRVJTSU9OKSQoQUJJRkxBR1MpJworQUNfTVNHX1JFU1VMVCgkTERWRVJTSU9OKQorCisjIFNPIGlzIHRoZSBleHRlbnNpb24gb2Ygc2hhcmVkIGxpYnJhcmllcyBgKGluY2x1ZGluZyB0aGUgZG90ISkKKyMgLS0gdXN1YWxseSAuc28sIC5zbCBvbiBIUC1VWCwgLmRsbCBvbiBDeWd3aW4KK0FDX01TR19DSEVDS0lORyhTTykKK2lmIHRlc3QgLXogIiRTTyIKK3RoZW4KKwljYXNlICRhY19zeXNfc3lzdGVtIGluCisJaHAqfEhQKikKKwkJY2FzZSBgdW5hbWUgLW1gIGluCisJCQlpYTY0KSBTTz0uc287OworCSAgCQkqKSAgICBTTz0uc2w7OworCQllc2FjCisJCTs7CisJQ1lHV0lOKikgICBTTz0uZGxsOzsKKwlMaW51eCp8R05VKikKKwkJICAgU089LiR7U09BQkl9LnNvOzsKKwkqKQkgICBTTz0uc287OworCWVzYWMKK2Vsc2UKKwkjIHRoaXMgbWlnaHQgYWxzbyBiZSBhIHRlcm1jYXAgdmFyaWFibGUsIHNlZSAjNjEwMzMyCisJZWNobworCWVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKKwllY2hvICcrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsnCisJZWNobyAnKyBXQVJOSU5HOiBZb3UgaGF2ZSBzZXQgU08gaW4geW91ciBlbnZpcm9ubWVudC4gICAgICAgICAgICAgICAgICAgICArJworCWVjaG8gJysgRG8geW91IHJlYWxseSBtZWFuIHRvIGNoYW5nZSB0aGUgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzPyAgKycKKwllY2hvICcrIENvbnRpbnVpbmcgaW4gMTAgc2Vjb25kcyB0byBsZXQgeW91IHRvIHBvbmRlci4gICAgICAgICAgICAgICAgICAgICsnCisJZWNobyAnKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArJworCWVjaG8gJz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PScKKwlzbGVlcCAxMAorZmkKK0FDX01TR19SRVNVTFQoJFNPKQorCiAjIENoZWNrIHdoZXRoZXIgcmlnaHQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBpbnRlZ2VyIGV4dGVuZHMgdGhlIHNpZ24gYml0CiAjIG9yIGZpbGxzIHdpdGggemVyb3MgKGxpa2UgdGhlIENyYXkgSjkwLCBhY2NvcmRpbmcgdG8gVGltIFBldGVycykuCiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciByaWdodCBzaGlmdCBleHRlbmRzIHRoZSBzaWduIGJpdCkKIEFDX0NBQ0hFX1ZBTChhY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduLCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiBpbnQgbWFpbigpCiB7CiAJZXhpdCgoKC0xKT4+MyA9PSAtMSkgPyAwIDogMSk7CiB9Ci1dLAotYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXMsCi1hY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduPW5vLAotYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXMpXSkKK11dKV0sCitbYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbj15ZXNdLAorW2FjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ249bm9dLAorW2FjX2N2X3JzaGlmdF9leHRlbmRzX3NpZ249eWVzXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfcnNoaWZ0X2V4dGVuZHNfc2lnbikKIGlmIHRlc3QgIiRhY19jdl9yc2hpZnRfZXh0ZW5kc19zaWduIiA9IG5vCiB0aGVuCkBAIC0zNjc5LDEyICszNzM2LDEyIEBACiAjIGNoZWNrIGZvciBnZXRjX3VubG9ja2VkIGFuZCByZWxhdGVkIGxvY2tpbmcgZnVuY3Rpb25zCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGdldGNfdW5sb2NrZWQoKSBhbmQgZnJpZW5kcykKIEFDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQsIFsKLUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkaW8uaD5dLFsKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3RkaW8uaD5dXSwgW1sKIAlGSUxFICpmID0gZm9wZW4oIi9kZXYvbnVsbCIsICJyIik7CiAJZmxvY2tmaWxlKGYpOwogCWdldGNfdW5sb2NrZWQoZik7CiAJZnVubG9ja2ZpbGUoZik7Ci1dLCBhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9eWVzLCBhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9bm8pXSkKK11dKV0sW2FjX2N2X2hhdmVfZ2V0Y191bmxvY2tlZD15ZXNdLFthY19jdl9oYXZlX2dldGNfdW5sb2NrZWQ9bm9dKV0pCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXZlX2dldGNfdW5sb2NrZWQpCiBpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9nZXRjX3VubG9ja2VkIiA9IHllcwogdGhlbgpAQCAtMzczMSw4ICszNzg4LDEwIEBACiAgICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgMi4xXSksICwkUkVBRExJTkVfTElCUykKIAogIyBjaGVjayBmb3IgcmVhZGxpbmUgMi4yCi1BQ19UUllfQ1BQKFsjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dLAotaGF2ZV9yZWFkbGluZT15ZXMsIGhhdmVfcmVhZGxpbmU9bm8pCitBQ19QUkVQUk9DX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sjaW5jbHVkZSA8cmVhZGxpbmUvcmVhZGxpbmUuaD5dXSldLAorICBbaGF2ZV9yZWFkbGluZT15ZXNdLAorICBbaGF2ZV9yZWFkbGluZT1ub10KKykKIGlmIHRlc3QgJGhhdmVfcmVhZGxpbmUgPSB5ZXMKIHRoZW4KICAgQUNfRUdSRVBfSEVBREVSKFtleHRlcm4gaW50IHJsX2NvbXBsZXRpb25fYXBwZW5kX2NoYXJhY3RlcjtdLApAQCAtMzc2MSw4ICszODIwLDEwIEBACiAgICAgICAgIFtEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4yXSksICwkUkVBRExJTkVfTElCUykKIAogIyBhbHNvIGluIHJlYWRsaW5lIDQuMgotQUNfVFJZX0NQUChbI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+XSwKLWhhdmVfcmVhZGxpbmU9eWVzLCBoYXZlX3JlYWRsaW5lPW5vKQorQUNfUFJFUFJPQ19JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+XV0pXSwKKyAgW2hhdmVfcmVhZGxpbmU9eWVzXSwKKyAgW2hhdmVfcmVhZGxpbmU9bm9dCispCiBpZiB0ZXN0ICRoYXZlX3JlYWRsaW5lID0geWVzCiB0aGVuCiAgIEFDX0VHUkVQX0hFQURFUihbZXh0ZXJuIGludCBybF9jYXRjaF9zaWduYWxzO10sCkBAIC0zNzc2LDcgKzM4MzcsNyBAQAogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBuaWNlKCkpCiBBQ19DQUNIRV9WQUwoYWNfY3ZfYnJva2VuX25pY2UsIFsKLUFDX1RSWV9SVU4oWworQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKIGludCBtYWluKCkKIHsKIAlpbnQgdmFsMSA9IG5pY2UoMSk7CkBAIC0zNzg0LDEwICszODQ1LDEwIEBACiAJCWV4aXQoMCk7CiAJZXhpdCgxKTsKIH0KLV0sCi1hY19jdl9icm9rZW5fbmljZT15ZXMsCi1hY19jdl9icm9rZW5fbmljZT1ubywKLWFjX2N2X2Jyb2tlbl9uaWNlPW5vKV0pCitdXSldLAorW2FjX2N2X2Jyb2tlbl9uaWNlPXllc10sCitbYWNfY3ZfYnJva2VuX25pY2U9bm9dLAorW2FjX2N2X2Jyb2tlbl9uaWNlPW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnJva2VuX25pY2UpCiBpZiB0ZXN0ICIkYWNfY3ZfYnJva2VuX25pY2UiID0geWVzCiB0aGVuCkBAIC0zNzk2LDM0ICszODU3LDI5IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBwb2xsKCkpCi1BQ19UUllfUlVOKFsKK0FDX0NBQ0hFX1ZBTChhY19jdl9icm9rZW5fcG9sbCwKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8cG9sbC5oPgogCi1pbnQgbWFpbiAodm9pZCkKLSAgICB7CitpbnQgbWFpbigpCit7CiAgICAgc3RydWN0IHBvbGxmZCBwb2xsX3N0cnVjdCA9IHsgNDIsIFBPTExJTnxQT0xMUFJJfFBPTExPVVQsIDAgfTsKLSAgICAKKyAgICBpbnQgcG9sbF90ZXN0OworCiAgICAgY2xvc2UgKDQyKTsKIAotICAgIGludCBwb2xsX3Rlc3QgPSBwb2xsICgmcG9sbF9zdHJ1Y3QsIDEsIDApOwotCisgICAgcG9sbF90ZXN0ID0gcG9sbCgmcG9sbF9zdHJ1Y3QsIDEsIDApOwogICAgIGlmIChwb2xsX3Rlc3QgPCAwKQotICAgICAgICB7Ci0gICAgICAgIGV4aXQoMCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgZWxzZSBpZiAocG9sbF90ZXN0ID09IDAgJiYgcG9sbF9zdHJ1Y3QucmV2ZW50cyAhPSBQT0xMTlZBTCkKLSAgICAgICAgewotICAgICAgICBleGl0KDApOwotICAgICAgICB9CisgICAgICAgIHJldHVybiAwOwogICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotXSwKLWFjX2N2X2Jyb2tlbl9wb2xsPXllcywKLWFjX2N2X2Jyb2tlbl9wb2xsPW5vLAotYWNfY3ZfYnJva2VuX3BvbGw9bm8pCisgICAgICAgIHJldHVybiAxOworfQorXV0pXSwKK1thY19jdl9icm9rZW5fcG9sbD15ZXNdLAorW2FjX2N2X2Jyb2tlbl9wb2xsPW5vXSwKK1thY19jdl9icm9rZW5fcG9sbD1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfYnJva2VuX3BvbGwpCiBpZiB0ZXN0ICIkYWNfY3ZfYnJva2VuX3BvbGwiID0geWVzCiB0aGVuCkBAIC0zODM5LDcgKzM4OTUsNyBAQAogIyBjaGVjayB0enNldCgzKSBleGlzdHMgYW5kIHdvcmtzIGxpa2Ugd2UgZXhwZWN0IGl0IHRvCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHdvcmtpbmcgdHpzZXQoKSkKIEFDX0NBQ0hFX1ZBTChhY19jdl93b3JraW5nX3R6c2V0LCBbCi1BQ19UUllfUlVOKFsKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMzkwMiwxMCArMzk1OCwxMCBAQAogCiAJZXhpdCgwKTsKIH0KLV0sCi1hY19jdl93b3JraW5nX3R6c2V0PXllcywKLWFjX2N2X3dvcmtpbmdfdHpzZXQ9bm8sCi1hY19jdl93b3JraW5nX3R6c2V0PW5vKV0pCitdXSldLAorW2FjX2N2X3dvcmtpbmdfdHpzZXQ9eWVzXSwKK1thY19jdl93b3JraW5nX3R6c2V0PW5vXSwKK1thY19jdl93b3JraW5nX3R6c2V0PW5vXSldKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfd29ya2luZ190enNldCkKIGlmIHRlc3QgIiRhY19jdl93b3JraW5nX3R6c2V0IiA9IHllcwogdGhlbgpAQCAtMzkxNiwxMyArMzk3MiwxMiBAQAogIyBMb29rIGZvciBzdWJzZWNvbmQgdGltZXN0YW1wcyBpbiBzdHJ1Y3Qgc3RhdAogQUNfTVNHX0NIRUNLSU5HKGZvciB0dl9uc2VjIGluIHN0cnVjdCBzdGF0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0YXRfdHZfbnNlYywKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8c3lzL3N0YXQuaD5dLCBbCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XV0sIFtbCiBzdHJ1Y3Qgc3RhdCBzdDsKIHN0LnN0X210aW0udHZfbnNlYyA9IDE7Ci1dLAotYWNfY3Zfc3RhdF90dl9uc2VjPXllcywKLWFjX2N2X3N0YXRfdHZfbnNlYz1ubywKLWFjX2N2X3N0YXRfdHZfbnNlYz1ubykpCitdXSldLAorW2FjX2N2X3N0YXRfdHZfbnNlYz15ZXNdLAorW2FjX2N2X3N0YXRfdHZfbnNlYz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfc3RhdF90dl9uc2VjKQogaWYgdGVzdCAiJGFjX2N2X3N0YXRfdHZfbnNlYyIgPSB5ZXMKIHRoZW4KQEAgLTM5MzMsMTMgKzM5ODgsMTIgQEAKICMgTG9vayBmb3IgQlNEIHN0eWxlIHN1YnNlY29uZCB0aW1lc3RhbXBzIGluIHN0cnVjdCBzdGF0CiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHR2X25zZWMyIGluIHN0cnVjdCBzdGF0KQogQUNfQ0FDSEVfVkFMKGFjX2N2X3N0YXRfdHZfbnNlYzIsCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPHN5cy9zdGF0Lmg+XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvc3RhdC5oPl1dLCBbWwogc3RydWN0IHN0YXQgc3Q7CiBzdC5zdF9tdGltZXNwZWMudHZfbnNlYyA9IDE7Ci1dLAotYWNfY3Zfc3RhdF90dl9uc2VjMj15ZXMsCi1hY19jdl9zdGF0X3R2X25zZWMyPW5vLAotYWNfY3Zfc3RhdF90dl9uc2VjMj1ubykpCitdXSldLAorW2FjX2N2X3N0YXRfdHZfbnNlYzI9eWVzXSwKK1thY19jdl9zdGF0X3R2X25zZWMyPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9zdGF0X3R2X25zZWMyKQogaWYgdGVzdCAiJGFjX2N2X3N0YXRfdHZfbnNlYzIiID0geWVzCiB0aGVuCkBAIC0zOTUwLDEyICs0MDA0LDEyIEBACiAjIE9uIEhQL1VYIDExLjAsIG12d2RlbGNoIGlzIGEgYmxvY2sgd2l0aCBhIHJldHVybiBzdGF0ZW1lbnQKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24pCiBBQ19DQUNIRV9WQUwoYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbiwKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgWworQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxjdXJzZXMuaD5dXSwgW1sKICAgaW50IHJ0bjsKICAgcnRuID0gbXZ3ZGVsY2goMCwwLDApOwotXSwgYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj15ZXMsCi0gICBhY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPW5vLAotICAgYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj15ZXMpKQorXV0pXSwKK1thY19jdl9tdndkZWxjaF9pc19leHByZXNzaW9uPXllc10sCitbYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbj1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3ZfbXZ3ZGVsY2hfaXNfZXhwcmVzc2lvbikKIAogaWYgdGVzdCAiJGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24iID0geWVzCkBAIC0zOTY2LDEyICs0MDIwLDEyIEBACiAKIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIFdJTkRPVyBoYXMgX2ZsYWdzKQogQUNfQ0FDSEVfVkFMKGFjX2N2X3dpbmRvd19oYXNfZmxhZ3MsCi1BQ19UUllfQ09NUElMRShbI2luY2x1ZGUgPGN1cnNlcy5oPl0sIFsKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbCiAgIFdJTkRPVyAqdzsKICAgdy0+X2ZsYWdzID0gMDsKLV0sIGFjX2N2X3dpbmRvd19oYXNfZmxhZ3M9eWVzLAotICAgYWNfY3Zfd2luZG93X2hhc19mbGFncz1ubywKLSAgIGFjX2N2X3dpbmRvd19oYXNfZmxhZ3M9bm8pKQorXV0pXSwKK1thY19jdl93aW5kb3dfaGFzX2ZsYWdzPXllc10sCitbYWNfY3Zfd2luZG93X2hhc19mbGFncz1ub10pKQogQUNfTVNHX1JFU1VMVCgkYWNfY3Zfd2luZG93X2hhc19mbGFncykKIAogCkBAIC0zOTgyLDI0ICs0MDM2LDI0IEBACiBmaQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGlzX3Rlcm1fcmVzaXplZCkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgdm9pZCAqeD1pc190ZXJtX3Jlc2l6ZWQsCi0gIEFDX0RFRklORShIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2lzX3Rlcm1fcmVzaXplZCcgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGN1cnNlcy5oPl1dLCBbW3ZvaWQgKng9aXNfdGVybV9yZXNpemVkXV0pXSwKKyAgW0FDX0RFRklORShIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2lzX3Rlcm1fcmVzaXplZCcgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIHJlc2l6ZV90ZXJtKQotQUNfVFJZX0NPTVBJTEUoWyNpbmNsdWRlIDxjdXJzZXMuaD5dLCB2b2lkICp4PXJlc2l6ZV90ZXJtLAotICBBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Jlc2l6ZV90ZXJtJyBmdW5jdGlvbi4pCi0gIEFDX01TR19SRVNVTFQoeWVzKSwKLSAgQUNfTVNHX1JFU1VMVChubykKK0FDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8Y3Vyc2VzLmg+XV0sIFtbdm9pZCAqeD1yZXNpemVfdGVybV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0sIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3Jlc2l6ZV90ZXJtJyBmdW5jdGlvbi4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubyldCiApCiAKIEFDX01TR19DSEVDS0lORyhmb3IgcmVzaXpldGVybSkKLUFDX1RSWV9DT01QSUxFKFsjaW5jbHVkZSA8Y3Vyc2VzLmg+XSwgdm9pZCAqeD1yZXNpemV0ZXJtLAotICBBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uKQotICBBQ19NU0dfUkVTVUxUKHllcyksCi0gIEFDX01TR19SRVNVTFQobm8pCitBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGN1cnNlcy5oPl1dLCBbW3ZvaWQgKng9cmVzaXpldGVybV1dKV0sCisgIFtBQ19ERUZJTkUoSEFWRV9DVVJTRVNfUkVTSVpFVEVSTSwgMSwgRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uKQorICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKKyAgW0FDX01TR19SRVNVTFQobm8pXQogKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC9kZXYvcHRteCkKQEAgLTQwMjQsOCArNDA3OCw2MiBAQAogICBBQ19NU0dfUkVTVUxUKG5vKQogZmkKIAotQUNfTVNHX0NIRUNLSU5HKGZvciAlemQgcHJpbnRmKCkgZm9ybWF0IHN1cHBvcnQpCi1BQ19UUllfUlVOKFsjaW5jbHVkZSA8c3RkaW8uaD4KK2lmIHRlc3QgIiRoYXZlX2xvbmdfbG9uZyIgPSB5ZXMKK3RoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKGZvciAlbGxkIGFuZCAlbGx1IHByaW50ZigpIGZvcm1hdCBzdXBwb3J0KQorICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0LAorICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW1sKKyAgI2luY2x1ZGUgPHN0ZGlvLmg+CisgICNpbmNsdWRlIDxzdGRkZWYuaD4KKyAgI2luY2x1ZGUgPHN0cmluZy5oPgorCisgICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgI2VuZGlmCisKKyAgaW50IG1haW4oKQorICB7CisgICAgICBjaGFyIGJ1ZmZlclsyNTZdOworCisgICAgICBpZiAoc3ByaW50ZihidWZmZXIsICIlbGxkIiwgKGxvbmcgbG9uZykxMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIGlmIChzcHJpbnRmKGJ1ZmZlciwgIiVsbGQiLCAobG9uZyBsb25nKS0xMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiLTEyMyIpKQorICAgICAgICAgIHJldHVybiAxOworCisgICAgICBpZiAoc3ByaW50ZihidWZmZXIsICIlbGx1IiwgKHVuc2lnbmVkIGxvbmcgbG9uZykxMjMpIDwgMCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIGlmIChzdHJjbXAoYnVmZmVyLCAiMTIzIikpCisgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgIHJldHVybiAwOworICB9CisgIF1dXSldLAorICBbYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PXllc10sCisgIFthY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQ9bm9dLAorICBbYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0PW5vXSkKKyAgKQorICBBQ19NU0dfUkVTVUxUKCRhY19jdl9oYXZlX2xvbmdfbG9uZ19mb3JtYXQpCitmaQorCitpZiB0ZXN0ICIkYWNfY3ZfaGF2ZV9sb25nX2xvbmdfZm9ybWF0IiA9IHllcwordGhlbgorICBBQ19ERUZJTkUoUFlfRk9STUFUX0xPTkdfTE9ORywgImxsIiwKKyAgW0RlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBsb25nIGxvbmcgdHlwZV0pCitmaQorCitpZiB0ZXN0ICRhY19zeXNfc3lzdGVtID0gRGFyd2luCit0aGVuCisJTElCUz0iJExJQlMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKK2ZpCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJXpkIHByaW50ZigpIGZvcm1hdCBzdXBwb3J0XSwgYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0LCBbZG5sCitBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKQEAgLTQwNTgsMTQgKzQxNjYsMjAgQEAKIAlyZXR1cm4gMTsKIAogICAgIHJldHVybiAwOwotfV0sCi1bQUNfTVNHX1JFU1VMVCh5ZXMpCi0gQUNfREVGSU5FKFBZX0ZPUk1BVF9TSVpFX1QsICJ6IiwgW0RlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBQeV9zc2l6ZV90XSldLAotIEFDX01TR19SRVNVTFQobm8pKQorfQorXV0pXSwKKyAgW2FjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD15ZXNdLAorICBbYWNfY3ZfaGF2ZV9zaXplX3RfZm9ybWF0PW5vXSwKKyAgW2FjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdD0iY3Jvc3MgLS0gYXNzdW1pbmcgeWVzIgorXSldKQoraWYgdGVzdCAiJGFjX2N2X2hhdmVfc2l6ZV90X2Zvcm1hdCIgIT0gbm8gOyB0aGVuCisgIEFDX0RFRklORShQWV9GT1JNQVRfU0laRV9ULCAieiIsCisgIFtEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgUHlfc3NpemVfdF0pCitmaQogCiBBQ19DSEVDS19UWVBFKHNvY2tsZW5fdCwsCiAgIEFDX0RFRklORShzb2NrbGVuX3QsaW50LAotICAgICAgICAgICAgRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvc29ja2V0Lmg+IGRvZXMgbm90IGRlZmluZS4pLFsKKyAgICAgICAgICAgIFtEZWZpbmUgdG8gYGludCcgaWYgPHN5cy9zb2NrZXQuaD4gZG9lcyBub3QgZGVmaW5lLl0pLFsKICNpZmRlZiBIQVZFX1NZU19UWVBFU19ICiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKQEAgLTQwNzUsNyArNDE4OSw4IEBACiBdKQogCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBtYnN0b3djcykKLUFDX1RSWV9SVU4oWworQUNfQ0FDSEVfVkFMKGFjX2N2X2Jyb2tlbl9tYnN0b3djcywKK0FDX1JVTl9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFtbCiAjaW5jbHVkZTxzdGRsaWIuaD4KIGludCBtYWluKCkgewogICAgIHNpemVfdCBsZW4gPSAtMTsKQEAgLTQwODMsMTAgKzQxOTgsMTAgQEAKICAgICBsZW4gPSBtYnN0b3djcyhOVUxMLCBzdHIsIDApOwogICAgIHJldHVybiAobGVuICE9IDQpOwogfQotXSwKLWFjX2N2X2Jyb2tlbl9tYnN0b3djcz1ubywKLWFjX2N2X2Jyb2tlbl9tYnN0b3djcz15ZXMsCi1hY19jdl9icm9rZW5fbWJzdG93Y3M9bm8pCitdXSldLAorW2FjX2N2X2Jyb2tlbl9tYnN0b3djcz1ub10sCitbYWNfY3ZfYnJva2VuX21ic3Rvd2NzPXllc10sCitbYWNfY3ZfYnJva2VuX21ic3Rvd2NzPW5vXSkpCiBBQ19NU0dfUkVTVUxUKCRhY19jdl9icm9rZW5fbWJzdG93Y3MpCiBpZiB0ZXN0ICIkYWNfY3ZfYnJva2VuX21ic3Rvd2NzIiA9IHllcwogdGhlbgpAQCAtNDA5NSwyNyArNDIxMCw2MiBAQAogICAgd2lkZSBjaGFycyB0aGF0IHdvdWxkIGJlIGNvbnZlcnRlZC5dKQogZmkKIAorQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgJENDIHN1cHBvcnRzIGNvbXB1dGVkIGdvdG9zKQorQUNfQ0FDSEVfVkFMKGFjX2N2X2NvbXB1dGVkX2dvdG9zLAorQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1tbCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgc3RhdGljIHZvaWQgKnRhcmdldHNbMV0gPSB7ICYmTEFCRUwxIH07CisgICAgZ290byBMQUJFTDI7CitMQUJFTDE6CisgICAgcmV0dXJuIDA7CitMQUJFTDI6CisgICAgZ290byAqdGFyZ2V0c1swXTsKKyAgICByZXR1cm4gMTsKK30KK11dXSldLAorW2FjX2N2X2NvbXB1dGVkX2dvdG9zPXllc10sCitbYWNfY3ZfY29tcHV0ZWRfZ290b3M9bm9dLAorW2FjX2N2X2NvbXB1dGVkX2dvdG9zPW5vXSkpCitBQ19NU0dfUkVTVUxUKCRhY19jdl9jb21wdXRlZF9nb3RvcykKK2lmIHRlc3QgIiRhY19jdl9jb21wdXRlZF9nb3RvcyIgPSB5ZXMKK3RoZW4KKyAgQUNfREVGSU5FKEhBVkVfQ09NUFVURURfR09UT1MsIDEsCisgIFtEZWZpbmUgaWYgdGhlIEMgY29tcGlsZXIgc3VwcG9ydHMgY29tcHV0ZWQgZ290b3MuXSkKK2ZpCisKICMgQ2hlY2sgZm9yIC0td2l0aC1jb21wdXRlZC1nb3RvcwogQUNfTVNHX0NIRUNLSU5HKGZvciAtLXdpdGgtY29tcHV0ZWQtZ290b3MpCiBBQ19BUkdfV0lUSChjb21wdXRlZC1nb3RvcywKLSAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKC0td2l0aC1jb21wdXRlZC1nb3RvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZSBjb21wdXRlZCBnb3RvcyAvIHRocmVhZGVkIGRpc3BhdGNoIGluIGV2YWx1YXRpb24gbG9vcCAobm90IGF2YWlsYWJsZSBvbiBhbGwgY29tcGlsZXJzKSksCisgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktY29tcHV0ZWQtZ290b3NdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VzZSBjb21wdXRlZCBnb3RvcyBpbiBldmFsdWF0aW9uIGxvb3AgKGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBzdXBwb3J0ZWQgY29tcGlsZXJzKV0pLAogWwotaWYgdGVzdCAiJHdpdGh2YWwiICE9IG5vCitpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMKIHRoZW4gCiAgIEFDX0RFRklORShVU0VfQ09NUFVURURfR09UT1MsIDEsCiAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGNvbXB1dGVkIGdvdG9zIGluIGNldmFsLmMuXSkgCiAgIEFDX01TR19SRVNVTFQoeWVzKQotZWxzZSBBQ19NU0dfUkVTVUxUKG5vKQotZmldLAotW0FDX01TR19SRVNVTFQobm8pXSkKLQotaWYgdGVzdCAkYWNfc3lzX3N5c3RlbSA9IERhcndpbgotdGhlbgotCUxJQlM9IiRMSUJTIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24iCiBmaQoraWYgdGVzdCAiJHdpdGh2YWwiID0gbm8KK3RoZW4gCisgIEFDX0RFRklORShVU0VfQ09NUFVURURfR09UT1MsIDAsCisgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gdXNlIGNvbXB1dGVkIGdvdG9zIGluIGNldmFsLmMuXSkgCisgIEFDX01TR19SRVNVTFQobm8pCitmaQorXSwKK1tBQ19NU0dfUkVTVUxUKG5vIHZhbHVlIHNwZWNpZmllZCldKQorCitjYXNlICRhY19zeXNfc3lzdGVtIGluCitBSVgqKSAgIAorICBBQ19ERUZJTkUoSEFWRV9CUk9LRU5fUElQRV9CVUYsIDEsIFtEZWZpbmUgaWYgdGhlIHN5c3RlbSByZXBvcnRzIGFuIGludmFsaWQgUElQRV9CVUYgdmFsdWUuXSkgOzsKK2VzYWMKIAogCitjYXNlICRhY19zeXNfc3lzdGVtIGluCisgIE9TRiopIEFDX01TR19FUlJPUihPU0YqIHN5c3RlbXMgYXJlIGRlcHJlY2F0ZWQgdW5sZXNzIHNvbWVib2R5IHZvbHVudGVlcnMuIENoZWNrIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU4NjA2KSA7OworZXNhYworCitBQ19DSEVDS19GVU5DKHBpcGUyLCBBQ19ERUZJTkUoSEFWRV9QSVBFMiwgMSwgW0RlZmluZSBpZiB0aGUgT1Mgc3VwcG9ydHMgcGlwZTIoKV0pLCApCiAKIEFDX1NVQlNUKFRIUkVBREhFQURFUlMpCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDQ1Njc4MjMuLmY4NjYyMWIgMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtMTIsOSArMTIsNiBAQAogICAgc3VwcG9ydCBmb3IgQUlYIEMrKyBzaGFyZWQgZXh0ZW5zaW9uIG1vZHVsZXMuICovCiAjdW5kZWYgQUlYX0dFTlVJTkVfQ1BMVVNQTFVTCiAKLS8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIEF0aGVPUyB0aHJlYWRzLiAqLwotI3VuZGVmIEFUSEVPU19USFJFQURTCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgTWFjaCBjdGhyZWFkcyBwYWNrYWdlICovCiAjdW5kZWYgQ19USFJFQURTCiAKQEAgLTQzLDYgKzQwLDkgQEAKICAgIHRoZSBjYXNlIG9uIE1vdG9yb2xhIFY0IChSNDBWNC4yKSAqLwogI3VuZGVmIEdFVFRJTUVPRkRBWV9OT19UWgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjY2VwdDQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQUNDRVBUNAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NoJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FDT1NICiAKQEAgLTgzLDYgKzgzLDkgQEAKIC8qIERlZmluZSBpZiBuaWNlKCkgcmV0dXJucyBzdWNjZXNzL2ZhaWx1cmUgaW5zdGVhZCBvZiB0aGUgbmV3IHByaW9yaXR5LiAqLwogI3VuZGVmIEhBVkVfQlJPS0VOX05JQ0UKIAorLyogRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlkIFBJUEVfQlVGIHZhbHVlLiAqLworI3VuZGVmIEhBVkVfQlJPS0VOX1BJUEVfQlVGCisKIC8qIERlZmluZSBpZiBwb2xsKCkgc2V0cyBlcnJubyBvbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRvcnMuICovCiAjdW5kZWYgSEFWRV9CUk9LRU5fUE9MTAogCkBAIC0xMTAsNiArMTEzLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfQ0xPQ0sKIAorLyogRGVmaW5lIGlmIHRoZSBDIGNvbXBpbGVyIHN1cHBvcnRzIGNvbXB1dGVkIGdvdG9zLiAqLworI3VuZGVmIEhBVkVfQ09NUFVURURfR09UT1MKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb25mc3RyJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0NPTkZTVFIKIApAQCAtMTg0LDYgKzE5MCwxMiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGwnIGZ1bmN0aW9ucy4gKi8KICN1bmRlZiBIQVZFX0VQT0xMCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXJmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VSRgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVyZmMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRVJGQworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRVJSTk9fSAogCkBAIC0yNTAsNiArMjYyLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2FpX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dBSV9TVFJFUlJPUgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdhbW1hJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dBTU1BCisKIC8qIERlZmluZSBpZiB3ZSBjYW4gdXNlIGdjYyBpbmxpbmUgYXNzZW1ibGVyIHRvIGdldCBhbmQgc2V0IHg4NyBjb250cm9sIHdvcmQKICAgICovCiAjdW5kZWYgSEFWRV9HQ0NfQVNNX0ZPUl9YODcKQEAgLTMxNCw2ICszMjksMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHdlbnQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUUFdFTlQKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUUkVTR0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJFU1VJRAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRTSUQKIApAQCAtMzQ3LDYgKzM2OCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSU5FVF9QVE9OCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5pdGdyb3VwcycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTklUR1JPVVBTCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JTlRUWVBFU19ICiAKQEAgLTM4MCw2ICs0MDQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsY2hvd24nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTENIT1dOCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGdhbW1hJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xHQU1NQQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KICN1bmRlZiBIQVZFX0xJQkRMCiAKQEAgLTQ3MCw2ICs0OTcsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwYXVzZScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QQVVTRQogCisvKiBEZWZpbmUgaWYgdGhlIE9TIHN1cHBvcnRzIHBpcGUyKCkgKi8KKyN1bmRlZiBIQVZFX1BJUEUyCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGxvY2snIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUExPQ0sKIApAQCAtNDg1LDkgKzUxNSw2IEBACiAvKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBmdW5jdGlvbiBwcm90b3R5cGUgKi8KICN1bmRlZiBIQVZFX1BST1RPVFlQRVMKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIEdOVSBQVEggdGhyZWFkcy4gKi8KLSN1bmRlZiBIQVZFX1BUSAotCiAvKiBEZWZpbmVkIGZvciBTb2xhcmlzIDIuNiBidWcgaW4gcHRocmVhZCBoZWFkZXIuICovCiAjdW5kZWYgSEFWRV9QVEhSRUFEX0RFU1RSVUNUT1IKIApAQCAtNTc4LDYgKzYwNSwxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZWdpZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TRVRSRUdJRAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlc2dpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRSRVNHSUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXN1aWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0VUUkVTVUlECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmV1aWQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0VUUkVVSUQKIApAQCAtNjE3LDYgKzY1MCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdzb2NrZXRwYWlyJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NPQ0tFVFBBSVIKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzcGF3bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NQQVdOX0gKKwogLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgcHJvdmlkZXMgc3NpemVfdCAqLwogI3VuZGVmIEhBVkVfU1NJWkVfVAogCkBAIC03ODMsNiArODE5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dGVybS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1RFUk1fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRnYW1tYScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9UR0FNTUEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9USFJFQURfSAogCkBAIC04MzIsNiArODcxLDkgQEAKICAgIEluY2x1ZGUvdW5pY29kZW9iamVjdC5oKS4gKi8KICN1bmRlZiBIQVZFX1VTQUJMRV9XQ0hBUl9UCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VUSUxfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9VVElNRVMKIApAQCAtODcyLDYgKzkxNCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGFyZSB1c2luZyBNYWNoIGN0aHJlYWRzIGRpcmVjdGx5IHVuZGVyIC9pbmNsdWRlICovCiAjdW5kZWYgSFVSRF9DX1RIUkVBRFMKIAorLyogRGVmaW5lIGlmIGxvZzFwKC0wLikgaXMgMC4gcmF0aGVyIHRoYW4gLTAuICovCisjdW5kZWYgTE9HMVBfRFJPUFNfWkVST19TSUdOCisKIC8qIERlZmluZSBpZiB5b3UgYXJlIHVzaW5nIE1hY2ggY3RocmVhZHMgdW5kZXIgbWFjaCAvICovCiAjdW5kZWYgTUFDSF9DX1RIUkVBRFMKIApAQCAtOTEzLDYgKzk1OCw5IEBACiAvKiBEZWZpbmUgYXMgdGhlIHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHMgKi8KICN1bmRlZiBQWUxPTkdfQklUU19JTl9ESUdJVAogCisvKiBEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgbG9uZyBsb25nIHR5cGUgKi8KKyN1bmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCisKIC8qIERlZmluZSB0byBwcmludGYgZm9ybWF0IG1vZGlmaWVyIGZvciBQeV9zc2l6ZV90ICovCiAjdW5kZWYgUFlfRk9STUFUX1NJWkVfVAogCkBAIC05MjgsNyArOTc2LDcgQEAKIC8qIERlZmluZSBhcyB0aGUgc2l6ZSBvZiB0aGUgdW5pY29kZSB0eXBlLiAqLwogI3VuZGVmIFB5X1VOSUNPREVfU0laRQogCi0vKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKy8qIGFzc3VtZSBDODkgc2VtYW50aWNzIHRoYXQgUkVUU0lHVFlQRSBpcyBhbHdheXMgdm9pZCAqLwogI3VuZGVmIFJFVFNJR1RZUEUKIAogLyogRGVmaW5lIGlmIHNldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBzZXRwZ3JwKDAsIDApLiAqLwpAQCAtOTYxLDEzICsxMDA5LDEzIEBACiAvKiBUaGUgc2l6ZSBvZiBgbG9uZyBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9MT05HX0xPTkcKIAotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhbiBvZmZfdC4gKi8KKy8qIFRoZSBzaXplIG9mIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfT0ZGX1QKIAogLyogVGhlIHNpemUgb2YgYHBpZF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9QSURfVAogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgcHRocmVhZF90LiAqLworLyogVGhlIHNpemUgb2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfUFRIUkVBRF9UCiAKIC8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KQEAgLTk3Niw3ICsxMDI0LDcgQEAKIC8qIFRoZSBzaXplIG9mIGBzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX1NJWkVfVAogCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgdGltZV90LiAqLworLyogVGhlIHNpemUgb2YgYHRpbWVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfVElNRV9UCiAKIC8qIFRoZSBzaXplIG9mIGB1aW50cHRyX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCkBAIC0xMDEwLDYgKzEwNTgsOSBAQAogLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHVzZSBjb21wdXRlZCBnb3RvcyBpbiBjZXZhbC5jLiAqLwogI3VuZGVmIFVTRV9DT01QVVRFRF9HT1RPUwogCisvKiBEZWZpbmUgdG8gdXNlIHRoZSBDOTkgaW5saW5lIGtleXdvcmQuICovCisjdW5kZWYgVVNFX0lOTElORQorCiAvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCiAjaWZuZGVmIF9BTExfU09VUkNFCiAjIHVuZGVmIF9BTExfU09VUkNFCkBAIC0xMDM4LDEwICsxMDg5LDYgQEAKIC8qIERlZmluZSBpZiB5b3Ugd2FudCBTSUdGUEUgaGFuZGxlZCAoc2VlIEluY2x1ZGUvcHlmcGUuaCkuICovCiAjdW5kZWYgV0FOVF9TSUdGUEVfSEFORExFUgogCi0vKiBEZWZpbmUgaWYgeW91IHdhbnQgd2N0eXBlLmggZnVuY3Rpb25zIHRvIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgb25lCi0gICBzdXBwbGllZCBieSBQeXRob24gaXRzZWxmLiAoc2VlIEluY2x1ZGUvdW5pY29kZWN0eXBlLmgpLiAqLwotI3VuZGVmIFdBTlRfV0NUWVBFX0ZVTkNUSU9OUwotCiAvKiBEZWZpbmUgaWYgV0lORE9XIGluIGN1cnNlcy5oIG9mZmVycyBhIGZpZWxkIF9mbGFncy4gKi8KICN1bmRlZiBXSU5ET1dfSEFTX0ZMQUdTCiAKQEAgLTEwNjksNiArMTExNiw5IEBACiAvKiBEZWZpbmUgdG8gcHJvZmlsZSB3aXRoIHRoZSBQZW50aXVtIHRpbWVzdGFtcCBjb3VudGVyICovCiAjdW5kZWYgV0lUSF9UU0MKIAorLyogRGVmaW5lIGlmIHlvdSB3YW50IHB5bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCAqLworI3VuZGVmIFdJVEhfVkFMR1JJTkQKKwogLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CiAgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KICNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRApAQCAtMTE1MSw5ICsxMjAxLDYgQEAKICMgdW5kZWYgX19DSEFSX1VOU0lHTkVEX18KICNlbmRpZgogCi0vKiBEZWZpbmVkIG9uIFNvbGFyaXMgdG8gc2VlIGFkZGl0aW9uYWwgZnVuY3Rpb24gcHJvdG90eXBlcy4gKi8KLSN1bmRlZiBfX0VYVEVOU0lPTlNfXwotCiAvKiBEZWZpbmUgdG8gJ2xvbmcnIGlmIDx0aW1lLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLwogI3VuZGVmIGNsb2NrX3QKIApAQCAtMTE2Myw2ICsxMjEwLDEyIEBACiAvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gKi8KICN1bmRlZiBnaWRfdAogCisvKiBEZWZpbmUgdG8gYF9faW5saW5lX18nIG9yIGBfX2lubGluZScgaWYgdGhhdCdzIHdoYXQgdGhlIEMgY29tcGlsZXIKKyAgIGNhbGxzIGl0LCBvciB0byBub3RoaW5nIGlmICdpbmxpbmUnIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgYW55IG5hbWUuICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworI3VuZGVmIGlubGluZQorI2VuZGlmCisKIC8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCiAgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLwogI3VuZGVmIGludDMyX3QKZGlmZiAtLWdpdCBhL3J1bnRlc3RzLnNoIGIvcnVudGVzdHMuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGQ3YjQ2NDYuLjAwMDAwMDAKLS0tIGEvcnVudGVzdHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0jIS9iaW4vYmFzaAotCi1IRUxQPSJVc2FnZTogLi9ydW50ZXN0cy5weSBbLWhdIFsteF0gW2ZsYWdzXSBbdGVzdHNdCi0KLVJ1bnMgZWFjaCB1bml0IHRlc3QgaW5kZXBlbmRlbnRseSwgd2l0aCBvdXRwdXQgZGlyZWN0ZWQgdG8gYSBmaWxlIGluCi1PVVQvPHRlc3Q+Lm91dC4gIElmIG5vIHRlc3RzIGFyZSBnaXZlbiwgYWxsIHRlc3RzIGFyZSBydW47IG90aGVyd2lzZSwKLW9ubHkgdGhlIHNwZWNpZmllZCB0ZXN0cyBhcmUgcnVuLCB1bmxlc3MgLXggaXMgYWxzbyBnaXZlbiwgaW4gd2hpY2gKLWNhc2UgYWxsIHRlc3RzICpleGNlcHQqIHRob3NlIGdpdmVuIGFyZSBydW4uCi0KLVN0YW5kYXJkIG91dHB1dCBzaG93cyB0aGUgbmFtZSBvZiB0aGUgdGVzdHMgcnVuLCB3aXRoICdCQUQnIG9yCi0nU0tJUFBFRCcgYWRkZWQgaWYgdGhlIHRlc3QgZGlkbid0IHByb2R1Y2UgYSBwb3NpdGl2ZSByZXN1bHQuICBBbHNvLAotdGhyZWUgZmlsZXMgYXJlIGNyZWF0ZWQsIG5hbWVkICdCQUQnLCAnR09PRCcgYW5kICdTS0lQUEVEJywgdG8gd2hpY2gKLWFyZSB3cml0dGVuIHRoZSBuYW1lcyBvZiB0aGUgdGVzdHMgY2F0ZWdvcml6ZWQgYnkgcmVzdWx0LgotCi1GbGFncyAoYXJndW1lbnRzIHN0YXJ0aW5nIHdpdGggJy0nKSBhcmUgcGFzc2VkIHRyYW5zcGFyZW50bHkgdG8KLXJlZ3J0ZXN0LnB5LCBleGNlcHQgZm9yIC14LCB3aGljaCBpcyBwcm9jZXNzZWQgaGVyZS4iCi0KLSMgQ2hvb3NlIHRoZSBQeXRob24gYmluYXJ5LgotY2FzZSBgdW5hbWVgIGluCi1EYXJ3aW4pIFBZVEhPTj0uL3B5dGhvbi5leGU7OwotQ1lHV0lOKikgUFlUSE9OPS4vcHl0aG9uLmV4ZTs7Ci0qKSAgICAgIFBZVEhPTj0uL3B5dGhvbjs7Ci1lc2FjCi0KLVBZVEhPTj0iJFBZVEhPTiAtYmIiCi0KLSMgVW5zZXQgUFlUSE9OUEFUSCwganVzdCB0byBiZSBzdXJlLgotdW5zZXQgUFlUSE9OUEFUSAotCi0jIENyZWF0ZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBpZiBuZWNlc3NhcnkuCi1ta2RpciAtcCBPVVQKLQotIyBFbXB0eSB0aGUgc3VtbWFyeSBmaWxlcy4KLT5HT09ECi0+QkFECi0+U0tJUFBFRAotCi0jIFByb2Nlc3MgZmxhZ3MgKHRyYW5zcGFyZW50bHkgcGFzcyB0aGVzZSBvbiB0byByZWdydGVzdC5weSkKLUZMQUdTPSIiCi1FWENFUFQ9IiIKLXdoaWxlIDoKLWRvCi0gICAgY2FzZSAkMSBpbgotICAgIC1ofC0taHwtaGVscHwtLWhlbHApIGVjaG8gIiRIRUxQIjsgZXhpdDs7Ci0gICAgLS0pIEZMQUdTPSIkRkxBR1MgJDEiOyBzaGlmdDsgYnJlYWs7OwotICAgIC14KSBFWENFUFQ9IiQxIjsgc2hpZnQ7OwotICAgIC0qKSBGTEFHUz0iJEZMQUdTICQxIjsgc2hpZnQ7OwotICAgICopICBicmVhazs7Ci0gICAgZXNhYwotZG9uZQotCi0jIENvbXB1dGUgdGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuLgotY2FzZSAiJCMkRVhDRVBUIiBpbgotMCkgCi0gICAgVEVTVFM9YChjZCBMaWIvdGVzdDsgbHMgdGVzdF8qLnB5IHwgc2VkICdzL1wucHkvLycpYAotICAgIDs7Ci0qLXgpCi0gICAgUEFUPSJeKGBlY2hvICRAIHwgc2VkICdzL1wucHkvL2cnIHwgc2VkICdzLyAvfC9nJ2ApJCIKLSAgICBURVNUUz1gKGNkIExpYi90ZXN0OyBscyB0ZXN0XyoucHkgfCBzZWQgJ3MvXC5weS8vJyB8IGVncmVwIC12ICIkUEFUIilgCi0gICAgOzsKLSopCi0gICAgVEVTVFM9IiRAIgotICAgIDs7Ci1lc2FjCi0KLSMgUnVuIHRoZSB0ZXN0cy4KLWZvciBUIGluICRURVNUUwotZG8KLSAgICBlY2hvIC1uICRUCi0gICAgaWYgICBjYXNlICRUIGluCi0gICAgICAgICAqY3Vyc2VzKikKLQkgICAgIGVjaG8KLQkgICAgICRQWVRIT04gLUUgTGliL3Rlc3QvcmVncnRlc3QucHkgJEZMQUdTICRUIDI+T1VULyRULm91dAotCSAgICAgOzsKLSAgICAgICAgICopICAkUFlUSE9OIC1FIExpYi90ZXN0L3JlZ3J0ZXN0LnB5ICRGTEFHUyAkVCA+T1VULyRULm91dCAyPiYxOzsKLSAgICAgICAgIGVzYWMKLSAgICB0aGVuCi0gICAgICAgIGlmIGdyZXAgLXEgIjEgdGVzdCBza2lwcGVkOiIgT1VULyRULm91dAotICAgICAgICB0aGVuCi0gICAgICAgICAgICBlY2hvICIgU0tJUFBFRCIKLSAgICAgICAgICAgIGVjaG8gJFQgPj5TS0lQUEVECi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVjaG8KLSAgICAgICAgICAgIGVjaG8gJFQgPj5HT09ECi0gICAgICAgIGZpCi0gICAgZWxzZQotICAgICAgICBlY2hvICIgQkFEIgotICAgICAgICBlY2hvICRUID4+QkFECi0gICAgZmkKLWRvbmUKLQotIyBTdW1tYXJpemUgcmVzdWx0cwotd2MgLWwgQkFEIEdPT0QgU0tJUFBFRApkaWZmIC0tZ2l0IGEvc2V0dXAucHkgYi9zZXR1cC5weQppbmRleCAxZTE1YjdhLi4xMzE4YmMyIDEwMDY0NAotLS0gYS9zZXR1cC5weQorKysgYi9zZXR1cC5weQpAQCAtNSwyNiArNSw0MiBAQAogCiBpbXBvcnQgc3lzLCBvcywgaW1wLCByZSwgb3B0cGFyc2UKIGZyb20gZ2xvYiBpbXBvcnQgZ2xvYgoraW1wb3J0IHN5c2NvbmZpZwogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgdGV4dF9maWxlCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0ICoKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IEV4dGVuc2lvbiwgc2V0dXAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfZXh0IGltcG9ydCBidWlsZF9leHQKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbCBpbXBvcnQgaW5zdGFsbAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2xpYiBpbXBvcnQgaW5zdGFsbF9saWIKK2Zyb20gZGlzdHV0aWxzLmNvbW1hbmQuYnVpbGRfc2NyaXB0cyBpbXBvcnQgYnVpbGRfc2NyaXB0cwogZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IGZpbmRfZXhlY3V0YWJsZQogCisjIFdlcmUgd2UgY29tcGlsZWQgLS13aXRoLXB5ZGVidWcgb3Igd2l0aCAjZGVmaW5lIFB5X0RFQlVHPworQ09NUElMRURfV0lUSF9QWURFQlVHID0gaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50JykKKwogIyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIHRvIGhvbGQgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0byBiZSBkaXNhYmxlZC4KIGRpc2FibGVkX21vZHVsZV9saXN0ID0gW10KIAorIyBGaWxlIHdoaWNoIGNvbnRhaW5zIHRoZSBkaXJlY3RvcnkgZm9yIHNoYXJlZCBtb2RzIChmb3Igc3lzLnBhdGggZml4dXAKKyMgd2hlbiBydW5uaW5nIGZyb20gdGhlIGJ1aWxkIGRpciwgc2VlIE1vZHVsZXMvZ2V0cGF0aC5jKQorX0JVSUxERElSX0NPT0tJRSA9ICJweWJ1aWxkZGlyLnR4dCIKKwogZGVmIGFkZF9kaXJfdG9fbGlzdChkaXJsaXN0LCBkaXIpOgotICAgICIiIkFkZCB0aGUgZGlyZWN0b3J5ICdkaXInIHRvIHRoZSBsaXN0ICdkaXJsaXN0JyAoYXQgdGhlIGZyb250KSBpZgorICAgICIiIkFkZCB0aGUgZGlyZWN0b3J5ICdkaXInIHRvIHRoZSBsaXN0ICdkaXJsaXN0JyAoYWZ0ZXIgYW55IHJlbGF0aXZlCisgICAgZGlyZWN0b3JpZXMpIGlmOgorCiAgICAgMSkgJ2RpcicgaXMgbm90IGFscmVhZHkgaW4gJ2Rpcmxpc3QnCi0gICAgMikgJ2RpcicgYWN0dWFsbHkgZXhpc3RzLCBhbmQgaXMgYSBkaXJlY3RvcnkuIiIiCi0gICAgaWYgZGlyIGlzIG5vdCBOb25lIGFuZCBvcy5wYXRoLmlzZGlyKGRpcikgYW5kIGRpciBub3QgaW4gZGlybGlzdDoKLSAgICAgICAgZGlybGlzdC5pbnNlcnQoMCwgZGlyKQorICAgIDIpICdkaXInIGFjdHVhbGx5IGV4aXN0cywgYW5kIGlzIGEgZGlyZWN0b3J5LgorICAgICIiIgorICAgIGlmIGRpciBpcyBOb25lIG9yIG5vdCBvcy5wYXRoLmlzZGlyKGRpcikgb3IgZGlyIGluIGRpcmxpc3Q6CisgICAgICAgIHJldHVybgorICAgIGZvciBpLCBwYXRoIGluIGVudW1lcmF0ZShkaXJsaXN0KToKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNhYnMocGF0aCk6CisgICAgICAgICAgICBkaXJsaXN0Lmluc2VydChpICsgMSwgZGlyKQorICAgICAgICAgICAgcmV0dXJuCisgICAgZGlybGlzdC5pbnNlcnQoMCwgZGlyKQogCiBkZWYgbWFjb3N4X3Nka19yb290KCk6CiAgICAgIiIiCkBAIC0xNDUsNyArMTYxLDEzIEBACiAgICAgZGVmIGJ1aWxkX2V4dGVuc2lvbnMoc2VsZik6CiAKICAgICAgICAgIyBEZXRlY3Qgd2hpY2ggbW9kdWxlcyBzaG91bGQgYmUgY29tcGlsZWQKLSAgICAgICAgbWlzc2luZyA9IHNlbGYuZGV0ZWN0X21vZHVsZXMoKQorICAgICAgICBvbGRfc28gPSBzZWxmLmNvbXBpbGVyLnNoYXJlZF9saWJfZXh0ZW5zaW9uCisgICAgICAgICMgV29ya2Fyb3VuZCBQRVAgMzE0OSBzdHVmZgorICAgICAgICBzZWxmLmNvbXBpbGVyLnNoYXJlZF9saWJfZXh0ZW5zaW9uID0gb3MuZW52aXJvbi5nZXQoIlNPIiwgIi5zbyIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1pc3NpbmcgPSBzZWxmLmRldGVjdF9tb2R1bGVzKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY29tcGlsZXIuc2hhcmVkX2xpYl9leHRlbnNpb24gPSBvbGRfc28KIAogICAgICAgICAjIFJlbW92ZSBtb2R1bGVzIHRoYXQgYXJlIHByZXNlbnQgb24gdGhlIGRpc2FibGVkIGxpc3QKICAgICAgICAgZXh0ZW5zaW9ucyA9IFtleHQgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnMKQEAgLTE3NSw3ICsxOTcsNyBAQAogCiAgICAgICAgICMgUHl0aG9uIGhlYWRlciBmaWxlcwogICAgICAgICBoZWFkZXJzID0gW3N5c2NvbmZpZy5nZXRfY29uZmlnX2hfZmlsZW5hbWUoKV0KLSAgICAgICAgaGVhZGVycyArPSBnbG9iKG9zLnBhdGguam9pbihzeXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSwgIiouaCIpKQorICAgICAgICBoZWFkZXJzICs9IGdsb2Iob3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfcGF0aCgncGxhdGluY2x1ZGUnKSwgIiouaCIpKQogCiAgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zWzpdOgogICAgICAgICAgICAgZXh0LnNvdXJjZXMgPSBbIGZpbmRfbW9kdWxlX2ZpbGUoZmlsZW5hbWUsIG1vZGRpcmxpc3QpCkBAIC0xOTMsMjIgKzIxNSwyMSBAQAogICAgICAgICAgICAgaWYgZXh0Lm5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgogICAgICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5yZW1vdmUoZXh0KQogCi0gICAgICAgIGlmIHBsYXRmb3JtICE9ICdtYWMnOgotICAgICAgICAgICAgIyBQYXJzZSBNb2R1bGVzL1NldHVwIGFuZCBNb2R1bGVzL1NldHVwLmxvY2FsIHRvIGZpZ3VyZSBvdXQgd2hpY2gKLSAgICAgICAgICAgICMgbW9kdWxlcyBhcmUgdHVybmVkIG9uIGluIHRoZSBmaWxlLgotICAgICAgICAgICAgcmVtb3ZlX21vZHVsZXMgPSBbXQotICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluICgnTW9kdWxlcy9TZXR1cCcsICdNb2R1bGVzL1NldHVwLmxvY2FsJyk6Ci0gICAgICAgICAgICAgICAgaW5wdXQgPSB0ZXh0X2ZpbGUuVGV4dEZpbGUoZmlsZW5hbWUsIGpvaW5fbGluZXM9MSkKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gaW5wdXQucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3BsaXQoKQotICAgICAgICAgICAgICAgICAgICByZW1vdmVfbW9kdWxlcy5hcHBlbmQobGluZVswXSkKLSAgICAgICAgICAgICAgICBpbnB1dC5jbG9zZSgpCisgICAgICAgICMgUGFyc2UgTW9kdWxlcy9TZXR1cCBhbmQgTW9kdWxlcy9TZXR1cC5sb2NhbCB0byBmaWd1cmUgb3V0IHdoaWNoCisgICAgICAgICMgbW9kdWxlcyBhcmUgdHVybmVkIG9uIGluIHRoZSBmaWxlLgorICAgICAgICByZW1vdmVfbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiAoJ01vZHVsZXMvU2V0dXAnLCAnTW9kdWxlcy9TZXR1cC5sb2NhbCcpOgorICAgICAgICAgICAgaW5wdXQgPSB0ZXh0X2ZpbGUuVGV4dEZpbGUoZmlsZW5hbWUsIGpvaW5fbGluZXM9MSkKKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgbGluZSA9IGlucHV0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBpZiBub3QgbGluZTogYnJlYWsKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zcGxpdCgpCisgICAgICAgICAgICAgICAgcmVtb3ZlX21vZHVsZXMuYXBwZW5kKGxpbmVbMF0pCisgICAgICAgICAgICBpbnB1dC5jbG9zZSgpCiAKLSAgICAgICAgICAgIGZvciBleHQgaW4gc2VsZi5leHRlbnNpb25zWzpdOgotICAgICAgICAgICAgICAgIGlmIGV4dC5uYW1lIGluIHJlbW92ZV9tb2R1bGVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnMucmVtb3ZlKGV4dCkKKyAgICAgICAgZm9yIGV4dCBpbiBzZWxmLmV4dGVuc2lvbnNbOl06CisgICAgICAgICAgICBpZiBleHQubmFtZSBpbiByZW1vdmVfbW9kdWxlczoKKyAgICAgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnMucmVtb3ZlKGV4dCkKIAogICAgICAgICAjIFdoZW4geW91IHJ1biAibWFrZSBDQz1hbHRjYyIgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHlvdSByZWFsbHkgd2FudAogICAgICAgICAjIHRob3NlIGVudmlyb25tZW50IHZhcmlhYmxlcyBwYXNzZWQgaW50byB0aGUgc2V0dXAucHkgcGhhc2UuICBIZXJlJ3MKQEAgLTIyMiw2ICsyNDMsMTYgQEAKICAgICAgICAgICAgIGFyZ3NbJ2NvbXBpbGVyX3NvJ10gPSBjb21waWxlciArICcgJyArIGNjc2hhcmVkICsgJyAnICsgY2ZsYWdzCiAgICAgICAgIHNlbGYuY29tcGlsZXIuc2V0X2V4ZWN1dGFibGVzKCoqYXJncykKIAorICAgICAgICAjIE5vdCBvbmx5IGRvIHdlIHdyaXRlIHRoZSBidWlsZGRpciBjb29raWUsIGJ1dCB3ZSBtYW51YWxseSBpbnN0YWxsCisgICAgICAgICMgdGhlIHNoYXJlZCBtb2R1bGVzIGRpcmVjdG9yeSBpZiBpdCBpc24ndCBhbHJlYWR5IGluIHN5cy5wYXRoLgorICAgICAgICAjIE90aGVyd2lzZSB0cnlpbmcgdG8gaW1wb3J0IHRoZSBleHRlbnNpb25zIGFmdGVyIGJ1aWxkaW5nIHRoZW0KKyAgICAgICAgIyB3aWxsIGZhaWwuCisgICAgICAgIHdpdGggb3BlbihfQlVJTERESVJfQ09PS0lFLCAid2IiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShzZWxmLmJ1aWxkX2xpYi5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpKQorICAgICAgICBhYnNfYnVpbGRfbGliID0gb3MucGF0aC5qb2luKG9zLmdldGN3ZCgpLCBzZWxmLmJ1aWxkX2xpYikKKyAgICAgICAgaWYgYWJzX2J1aWxkX2xpYiBub3QgaW4gc3lzLnBhdGg6CisgICAgICAgICAgICBzeXMucGF0aC5hcHBlbmQoYWJzX2J1aWxkX2xpYikKKwogICAgICAgICBidWlsZF9leHQuYnVpbGRfZXh0ZW5zaW9ucyhzZWxmKQogCiAgICAgICAgIGxvbmdlc3QgPSBtYXgoW2xlbihlLm5hbWUpIGZvciBlIGluIHNlbGYuZXh0ZW5zaW9uc10pCkBAIC0zMzQsNyArMzY1LDcgQEAKIAogICAgIGRlZiBnZXRfcGxhdGZvcm0oc2VsZik6CiAgICAgICAgICMgR2V0IHZhbHVlIG9mIHN5cy5wbGF0Zm9ybQotICAgICAgICBmb3IgcGxhdGZvcm0gaW4gWydjeWd3aW4nLCAnZGFyd2luJywgJ2F0aGVvcycsICdvc2YxJ106CisgICAgICAgIGZvciBwbGF0Zm9ybSBpbiBbJ2N5Z3dpbicsICdkYXJ3aW4nLCAnb3NmMSddOgogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgocGxhdGZvcm0pOgogICAgICAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybQogICAgICAgICByZXR1cm4gc3lzLnBsYXRmb3JtCkBAIC0zNjIsNyArMzkzLDkgQEAKICAgICAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQogCiAgICAgZGVmIGRldGVjdF9tb2R1bGVzKHNlbGYpOgotICAgICAgICAjIEVuc3VyZSB0aGF0IC91c3IvbG9jYWwgaXMgYWx3YXlzIHVzZWQKKyAgICAgICAgIyBFbnN1cmUgdGhhdCAvdXNyL2xvY2FsIGlzIGFsd2F5cyB1c2VkLCBidXQgdGhlIGxvY2FsIGJ1aWxkCisgICAgICAgICMgZGlyZWN0b3JpZXMgKGkuZS4gJy4nIGFuZCAnSW5jbHVkZScpIG11c3QgYmUgZmlyc3QuICBTZWUgaXNzdWUKKyAgICAgICAgIyAxMDUyMC4KICAgICAgICAgYWRkX2Rpcl90b19saXN0KHNlbGYuY29tcGlsZXIubGlicmFyeV9kaXJzLCAnL3Vzci9sb2NhbC9saWInKQogICAgICAgICBhZGRfZGlyX3RvX2xpc3Qoc2VsZi5jb21waWxlci5pbmNsdWRlX2RpcnMsICcvdXNyL2xvY2FsL2luY2x1ZGUnKQogICAgICAgICBzZWxmLmFkZF9tdWx0aWFyY2hfcGF0aHMoKQpAQCAtNDI0LDE4ICs0NTcsMTIgQEAKICAgICAgICAgbWlzc2luZyA9IFtdCiAKICAgICAgICAgY29uZmlnX2ggPSBzeXNjb25maWcuZ2V0X2NvbmZpZ19oX2ZpbGVuYW1lKCkKLSAgICAgICAgY29uZmlnX2hfdmFycyA9IHN5c2NvbmZpZy5wYXJzZV9jb25maWdfaChvcGVuKGNvbmZpZ19oKSkKKyAgICAgICAgd2l0aCBvcGVuKGNvbmZpZ19oKSBhcyBmaWxlOgorICAgICAgICAgICAgY29uZmlnX2hfdmFycyA9IHN5c2NvbmZpZy5wYXJzZV9jb25maWdfaChmaWxlKQogCiAgICAgICAgIHBsYXRmb3JtID0gc2VsZi5nZXRfcGxhdGZvcm0oKQogICAgICAgICBzcmNkaXIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCiAKLSAgICAgICAgIyBDaGVjayBmb3IgQXRoZU9TIHdoaWNoIGhhcyBsaWJyYXJpZXMgaW4gbm9uLXN0YW5kYXJkIGxvY2F0aW9ucwotICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnYXRoZW9zJzoKLSAgICAgICAgICAgIGxpYl9kaXJzICs9IFsnL3N5c3RlbS9saWJzJywgJy9hdGhlb3MvYXV0b2xuay9saWInXQotICAgICAgICAgICAgbGliX2RpcnMgKz0gb3MuZ2V0ZW52KCdMSUJSQVJZX1BBVEgnLCAnJykuc3BsaXQob3MucGF0aHNlcCkKLSAgICAgICAgICAgIGluY19kaXJzICs9IFsnL3N5c3RlbS9pbmNsdWRlJywgJy9hdGhlb3MvYXV0b2xuay9pbmNsdWRlJ10KLSAgICAgICAgICAgIGluY19kaXJzICs9IG9zLmdldGVudignQ19JTkNMVURFX1BBVEgnLCAnJykuc3BsaXQob3MucGF0aHNlcCkKLQogICAgICAgICAjIE9TRi8xIGFuZCBVbml4d2FyZSBoYXZlIHNvbWUgc3R1ZmYgaW4gL3Vzci9jY3MvbGliIChsaWtlIC1sZGIpCiAgICAgICAgIGlmIHBsYXRmb3JtIGluIFsnb3NmMScsICd1bml4d2FyZTcnLCAnb3BlbnVuaXg4J106CiAgICAgICAgICAgICBsaWJfZGlycyArPSBbJy91c3IvY2NzL2xpYiddCkBAIC00NDQsOSArNDcxLDEwIEBACiAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIHdvcmsgb24gYW55IHVuaXh5IHBsYXRmb3JtIDstKQogICAgICAgICAgICAgIyBJZiB0aGUgdXNlciBoYXMgYm90aGVyZWQgc3BlY2lmeWluZyBhZGRpdGlvbmFsIC1JIGFuZCAtTCBmbGFncwogICAgICAgICAgICAgIyBpbiBPUFQgYW5kIExERkxBR1Mgd2UgbWlnaHQgYXMgd2VsbCB1c2UgdGhlbSBoZXJlLgotICAgICAgICAgICAgIyAgIE5PVEU6IHVzaW5nIHNobGV4LnNwbGl0IHdvdWxkIHRlY2huaWNhbGx5IGJlIG1vcmUgY29ycmVjdCwgYnV0Ci0gICAgICAgICAgICAjIGFsc28gZ2l2ZXMgYSBib290c3RyYXAgcHJvYmxlbS4gTGV0J3MgaG9wZSBub2JvZHkgdXNlcyBkaXJlY3RvcmllcwotICAgICAgICAgICAgIyB3aXRoIHdoaXRlc3BhY2UgaW4gdGhlIG5hbWUgdG8gc3RvcmUgbGlicmFyaWVzLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBOT1RFOiB1c2luZyBzaGxleC5zcGxpdCB3b3VsZCB0ZWNobmljYWxseSBiZSBtb3JlIGNvcnJlY3QsIGJ1dAorICAgICAgICAgICAgIyBhbHNvIGdpdmVzIGEgYm9vdHN0cmFwIHByb2JsZW0uIExldCdzIGhvcGUgbm9ib2R5IHVzZXMKKyAgICAgICAgICAgICMgZGlyZWN0b3JpZXMgd2l0aCB3aGl0ZXNwYWNlIGluIHRoZSBuYW1lIHRvIHN0b3JlIGxpYnJhcmllcy4KICAgICAgICAgICAgIGNmbGFncywgbGRmbGFncyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoCiAgICAgICAgICAgICAgICAgICAgICdDRkxBR1MnLCAnTERGTEFHUycpCiAgICAgICAgICAgICBmb3IgaXRlbSBpbiBjZmxhZ3Muc3BsaXQoKToKQEAgLTQ1OSw3ICs0ODcsNyBAQAogCiAgICAgICAgICMgQ2hlY2sgZm9yIE1hY09TIFgsIHdoaWNoIGRvZXNuJ3QgbmVlZCBsaWJtLmEgYXQgYWxsCiAgICAgICAgIG1hdGhfbGlicyA9IFsnbSddCi0gICAgICAgIGlmIHBsYXRmb3JtIGluIFsnZGFyd2luJywgJ21hYyddOgorICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIG1hdGhfbGlicyA9IFtdCiAKICAgICAgICAgIyBYWFggT21pdHRlZCBtb2R1bGVzOiBnbCwgcHVyZSwgZGwsIFNHSS1zcGVjaWZpYyBtb2R1bGVzCkBAIC00NjksMzUgKzQ5NywyNyBAQAogICAgICAgICAjIG9uIHByZXR0eSBtdWNoIGFueSBQT1NJWGlzaCBwbGF0Zm9ybS4KICAgICAgICAgIwogCi0gICAgICAgICMgU29tZSBtb2R1bGVzIHRoYXQgYXJlIG5vcm1hbGx5IGFsd2F5cyBvbjoKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3dlYWtyZWYnLCBbJ193ZWFrcmVmLmMnXSkgKQotCiAgICAgICAgICMgYXJyYXkgb2JqZWN0cwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdhcnJheScsIFsnYXJyYXltb2R1bGUuYyddKSApCiAgICAgICAgICMgY29tcGxleCBtYXRoIGxpYnJhcnkgZnVuY3Rpb25zCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NtYXRoJywgWydjbWF0aG1vZHVsZS5jJ10sCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2NtYXRoJywgWydjbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1tYXRoX2xpYnMpICkKLQogICAgICAgICAjIG1hdGggbGlicmFyeSBmdW5jdGlvbnMsIGUuZy4gc2luKCkKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignbWF0aCcsICBbJ21hdGhtb2R1bGUuYyddLAorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdtYXRoJywgIFsnbWF0aG1vZHVsZS5jJywgJ19tYXRoLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnX21hdGguaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcz1tYXRoX2xpYnMpICkKICAgICAgICAgIyB0aW1lIG9wZXJhdGlvbnMgYW5kIHZhcmlhYmxlcwotICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCd0aW1lJywgWyd0aW1lbW9kdWxlLmMnXSwKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigndGltZScsIFsndGltZW1vZHVsZS5jJywgJ190aW1lLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bWF0aF9saWJzKSApCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ2RhdGV0aW1lJywgWydkYXRldGltZW1vZHVsZS5jJywgJ3RpbWVtb2R1bGUuYyddLAorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfZGF0ZXRpbWUnLCBbJ19kYXRldGltZW1vZHVsZS5jJywgJ190aW1lLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXM9bWF0aF9saWJzKSApCi0gICAgICAgICMgZmFzdCBpdGVyYXRvciB0b29scyBpbXBsZW1lbnRlZCBpbiBDCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIml0ZXJ0b29scyIsIFsiaXRlcnRvb2xzbW9kdWxlLmMiXSkgKQogICAgICAgICAjIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGltcGxlbWVudGVkIGluIEMKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigiX3JhbmRvbSIsIFsiX3JhbmRvbW1vZHVsZS5jIl0pICkKLSAgICAgICAgIyBoaWdoLXBlcmZvcm1hbmNlIGNvbGxlY3Rpb25zCi0gICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9jb2xsZWN0aW9ucyIsIFsiX2NvbGxlY3Rpb25zbW9kdWxlLmMiXSkgKQogICAgICAgICAjIGJpc2VjdAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCJfYmlzZWN0IiwgWyJfYmlzZWN0bW9kdWxlLmMiXSkgKQogICAgICAgICAjIGhlYXBxCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oIl9oZWFwcSIsIFsiX2hlYXBxbW9kdWxlLmMiXSkgKQotICAgICAgICAjIG9wZXJhdG9yLmFkZCgpIGFuZCBzaW1pbGFyIGdvb2RpZXMKLSAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignb3BlcmF0b3InLCBbJ29wZXJhdG9yLmMnXSkgKQogICAgICAgICAjIEMtb3B0aW1pemVkIHBpY2tsZSByZXBsYWNlbWVudAogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCJfcGlja2xlIiwgWyJfcGlja2xlLmMiXSkgKQogICAgICAgICAjIGF0ZXhpdApAQCAtNTIyLDE5ICs1NDIsMTYgQEAKICAgICAgICAgICAgICMgTWF5IGJlIG5lY2Vzc2FyeSBvbiBBSVggZm9yIGZsb2NrIGZ1bmN0aW9uCiAgICAgICAgICAgICBsaWJzID0gWydic2QnXQogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdmY250bCcsIFsnZmNudGxtb2R1bGUuYyddLCBsaWJyYXJpZXM9bGlicykgKQotICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydtYWMnXToKLSAgICAgICAgICAgICMgcHdkKDMpCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdwd2QnLCBbJ3B3ZG1vZHVsZS5jJ10pICkKLSAgICAgICAgICAgICMgZ3JwKDMpCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdncnAnLCBbJ2dycG1vZHVsZS5jJ10pICkKLSAgICAgICAgICAgICMgc3B3ZCwgc2hhZG93IHBhc3N3b3JkcwotICAgICAgICAgICAgaWYgKGNvbmZpZ19oX3ZhcnMuZ2V0KCdIQVZFX0dFVFNQTkFNJywgRmFsc2UpIG9yCi0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19oX3ZhcnMuZ2V0KCdIQVZFX0dFVFNQRU5UJywgRmFsc2UpKToKLSAgICAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzcHdkJywgWydzcHdkbW9kdWxlLmMnXSkgKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnc3B3ZCcpCisgICAgICAgICMgcHdkKDMpCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3B3ZCcsIFsncHdkbW9kdWxlLmMnXSkgKQorICAgICAgICAjIGdycCgzKQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdncnAnLCBbJ2dycG1vZHVsZS5jJ10pICkKKyAgICAgICAgIyBzcHdkLCBzaGFkb3cgcGFzc3dvcmRzCisgICAgICAgIGlmIChjb25maWdfaF92YXJzLmdldCgnSEFWRV9HRVRTUE5BTScsIEZhbHNlKSBvcgorICAgICAgICAgICAgICAgIGNvbmZpZ19oX3ZhcnMuZ2V0KCdIQVZFX0dFVFNQRU5UJywgRmFsc2UpKToKKyAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Nwd2QnLCBbJ3Nwd2Rtb2R1bGUuYyddKSApCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtaXNzaW5nLmV4dGVuZChbJ3B3ZCcsICdncnAnLCAnc3B3ZCddKQorICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3Nwd2QnKQogCiAgICAgICAgICMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdzZWxlY3QnLCBbJ3NlbGVjdG1vZHVsZS5jJ10pICkKQEAgLTU0MywxNyArNTYwLDExIEBACiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3BhcnNlcicsIFsncGFyc2VybW9kdWxlLmMnXSkgKQogCiAgICAgICAgICMgTWVtb3J5LW1hcHBlZCBmaWxlcyAoYWxzbyB3b3JrcyBvbiBXaW4zMikuCi0gICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ2F0aGVvcycsICdtYWMnXToKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ21tYXAnLCBbJ21tYXBtb2R1bGUuYyddKSApCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnbW1hcCcpCisgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ21tYXAnLCBbJ21tYXBtb2R1bGUuYyddKSApCiAKICAgICAgICAgIyBMYW5jZSBFbGxpbmdoYXVzJ3Mgc3lzbG9nIG1vZHVsZQotICAgICAgICBpZiBwbGF0Zm9ybSBub3QgaW4gWydtYWMnXToKLSAgICAgICAgICAgICMgc3lzbG9nIGRhZW1vbiBpbnRlcmZhY2UKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3N5c2xvZycsIFsnc3lzbG9nbW9kdWxlLmMnXSkgKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3N5c2xvZycpCisgICAgICAgICMgc3lzbG9nIGRhZW1vbiBpbnRlcmZhY2UKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignc3lzbG9nJywgWydzeXNsb2dtb2R1bGUuYyddKSApCiAKICAgICAgICAgIwogICAgICAgICAjIEhlcmUgZW5kcyB0aGUgc2ltcGxlIHN0dWZmLiAgRnJvbSBoZXJlIG9uLCBtb2R1bGVzIG5lZWQgY2VydGFpbgpAQCAtNTgxLDQzICs1OTIsNDIgQEAKICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhzZWxmLmJ1aWxkX3RlbXApCiAgICAgICAgICAgICByZXQgPSBvcy5zeXN0ZW0oImxkZCAlcyA+ICVzIiAlIChkb19yZWFkbGluZSwgdG1wZmlsZSkpCiAgICAgICAgICAgICBpZiByZXQgPj4gOCA9PSAwOgotICAgICAgICAgICAgICAgIGZwID0gb3Blbih0bXBmaWxlKQotICAgICAgICAgICAgICAgIGZvciBsbiBpbiBmcDoKLSAgICAgICAgICAgICAgICAgICAgaWYgJ2N1cnNlcycgaW4gbG46Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSByZS5zdWIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcicuKmxpYihuP2N1cnNlc3c/KVwuc28uKicsIHInXDEnLCBsbgotICAgICAgICAgICAgICAgICAgICAgICAgKS5yc3RyaXAoKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgJ3RpbmZvJyBpbiBsbjogIyB0ZXJtY2FwIGludGVyZmFjZSBzcGxpdCBvdXQgZnJvbSBuY3Vyc2VzCi0gICAgICAgICAgICAgICAgICAgICAgICByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkgPSAndGluZm8nCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odG1wZmlsZSkgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGZvciBsbiBpbiBmcDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICdjdXJzZXMnIGluIGxuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9IHJlLnN1YigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcicuKmxpYihuP2N1cnNlc3c/KVwuc28uKicsIHInXDEnLCBsbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkucnN0cmlwKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXJtY2FwIGludGVyZmFjZSBzcGxpdCBvdXQgZnJvbSBuY3Vyc2VzCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAndGluZm8nIGluIGxuOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeSA9ICd0aW5mbycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgb3MudW5saW5rKHRtcGZpbGUpCiAgICAgICAgICMgSXNzdWUgNzM4NDogSWYgcmVhZGxpbmUgaXMgYWxyZWFkeSBsaW5rZWQgYWdhaW5zdCBjdXJzZXMsCiAgICAgICAgICMgdXNlIHRoZSBzYW1lIGxpYnJhcnkgZm9yIHRoZSByZWFkbGluZSBhbmQgY3Vyc2VzIG1vZHVsZXMuCi0gICAgICAgICMgRGlzYWJsZWQgc2luY2UgYXBwbGljYXRpb25zIHJlbHlpbmcgb24gbmN1cnNlc3cgbWlnaHQgYnJlYWsuCi0gICAgICAgICMKLSAgICAgICAgIyBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6Ci0gICAgICAgICMgICAgY3Vyc2VzX2xpYnJhcnkgPSByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnkKLSAgICAgICAgIyBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgotICAgICAgICAjICguLi4pCi0gICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgorICAgICAgICBpZiAnY3Vyc2VzJyBpbiByZWFkbGluZV90ZXJtY2FwX2xpYnJhcnk6CisgICAgICAgICAgICBjdXJzZXNfbGlicmFyeSA9IHJlYWRsaW5lX3Rlcm1jYXBfbGlicmFyeQorICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduY3Vyc2VzdycpOgogICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnbmN1cnNlc3cnCiAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ25jdXJzZXMnKToKICAgICAgICAgICAgIGN1cnNlc19saWJyYXJ5ID0gJ25jdXJzZXMnCiAgICAgICAgIGVsaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywgJ2N1cnNlcycpOgogICAgICAgICAgICAgY3Vyc2VzX2xpYnJhcnkgPSAnY3Vyc2VzJwogCi0gICAgICAgIGlmIHBsYXRmb3JtID09ICdkYXJ3aW4nOiAjIGFuZCBvcy51bmFtZSgpWzJdIDwgJzkuJzoKLSAgICAgICAgICAgICMgTWFjT1NYIDEwLjQgaGFzIGEgYnJva2VuIHJlYWRsaW5lLiBEb24ndCB0cnkgdG8gYnVpbGQKLSAgICAgICAgICAgICMgdGhlIHJlYWRsaW5lIG1vZHVsZSB1bmxlc3MgdGhlIHVzZXIgaGFzIGluc3RhbGxlZCBhIGZpeGVkCi0gICAgICAgICAgICAjIHJlYWRsaW5lIHBhY2thZ2UKLSAgICAgICAgICAgICMgRklYTUU6IFRoZSByZWFkbGluZSBlbXVsYXRpb24gb24gMTAuNSBpcyBiZXR0ZXIsIGJ1dCB0aGUKLSAgICAgICAgICAgICMgcmVhZGxpbmUgbW9kdWxlIGRvZXNuJ3QgY29tcGlsZSBvdXQgb2YgdGhlIGJveC4KLSAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgncmVhZGxpbmUvcmxjb25mLmgnLCBpbmNfZGlycywgW10pIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZG9fcmVhZGxpbmUgPSBGYWxzZQorICAgICAgICBpZiBwbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgIG9zX3JlbGVhc2UgPSBpbnQob3MudW5hbWUoKVsyXS5zcGxpdCgnLicpWzBdKQorICAgICAgICAgICAgZGVwX3RhcmdldCA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUJykKKyAgICAgICAgICAgIGlmIGRlcF90YXJnZXQgYW5kIGRlcF90YXJnZXQuc3BsaXQoJy4nKSA8IFsnMTAnLCAnNSddOgorICAgICAgICAgICAgICAgIG9zX3JlbGVhc2UgPSA4CisgICAgICAgICAgICBpZiBvc19yZWxlYXNlIDwgOToKKyAgICAgICAgICAgICAgICAjIE1hY09TWCAxMC40IGhhcyBhIGJyb2tlbiByZWFkbGluZS4gRG9uJ3QgdHJ5IHRvIGJ1aWxkCisgICAgICAgICAgICAgICAgIyB0aGUgcmVhZGxpbmUgbW9kdWxlIHVubGVzcyB0aGUgdXNlciBoYXMgaW5zdGFsbGVkIGEgZml4ZWQKKyAgICAgICAgICAgICAgICAjIHJlYWRsaW5lIHBhY2thZ2UKKyAgICAgICAgICAgICAgICBpZiBmaW5kX2ZpbGUoJ3JlYWRsaW5lL3JsY29uZi5oJywgaW5jX2RpcnMsIFtdKSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBkb19yZWFkbGluZSA9IEZhbHNlCiAgICAgICAgIGlmIGRvX3JlYWRsaW5lOgotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgaWYgcGxhdGZvcm0gPT0gJ2RhcndpbicgYW5kIG9zX3JlbGVhc2UgPCA5OgogICAgICAgICAgICAgICAgICMgSW4gZXZlcnkgZGlyZWN0b3J5IG9uIHRoZSBzZWFyY2ggcGF0aCBzZWFyY2ggZm9yIGEgZHluYW1pYwogICAgICAgICAgICAgICAgICMgbGlicmFyeSBhbmQgdGhlbiBhIHN0YXRpYyBsaWJyYXJ5LCBpbnN0ZWFkIG9mIGZpcnN0IGxvb2tpbmcKICAgICAgICAgICAgICAgICAjIGZvciBkeW5hbWljIGxpYnJhcmllcyBvbiB0aGUgZW50aXJlIHBhdGguCkBAIC02MzMsOCArNjQzLDggQEAKICAgICAgICAgICAgIGVsaWYgY3Vyc2VzX2xpYnJhcnk6CiAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoY3Vyc2VzX2xpYnJhcnkpCiAgICAgICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy91c3IvbGliL3Rlcm1jYXAnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlcm1jYXAnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycvdXNyL2xpYi90ZXJtY2FwJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXJtY2FwJyk6CiAgICAgICAgICAgICAgICAgcmVhZGxpbmVfbGlicy5hcHBlbmQoJ3Rlcm1jYXAnKQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigncmVhZGxpbmUnLCBbJ3JlYWRsaW5lLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeV9kaXJzPVsnL3Vzci9saWIvdGVybWNhcCddLApAQCAtNjQzLDIwICs2NTMsMjAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdyZWFkbGluZScpCiAKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJ106Ci0gICAgICAgICAgICAjIGNyeXB0IG1vZHVsZS4KKyAgICAgICAgIyBjcnlwdCBtb2R1bGUuCiAKLSAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdjcnlwdCcpOgotICAgICAgICAgICAgICAgIGxpYnMgPSBbJ2NyeXB0J10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbGlicyA9IFtdCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdjcnlwdCcsIFsnY3J5cHRtb2R1bGUuYyddLCBsaWJyYXJpZXM9bGlicykgKQorICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnY3J5cHQnKToKKyAgICAgICAgICAgIGxpYnMgPSBbJ2NyeXB0J10KICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdjcnlwdCcpCisgICAgICAgICAgICBsaWJzID0gW10KKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignY3J5cHQnLCBbJ2NyeXB0bW9kdWxlLmMnXSwgbGlicmFyaWVzPWxpYnMpICkKIAogICAgICAgICAjIENTViBmaWxlcwogICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfY3N2JywgWydfY3N2LmMnXSkgKQogCisgICAgICAgICMgUE9TSVggc3VicHJvY2VzcyBtb2R1bGUgaGVscGVyLgorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfcG9zaXhzdWJwcm9jZXNzJywgWydfcG9zaXhzdWJwcm9jZXNzLmMnXSkgKQorCiAgICAgICAgICMgc29ja2V0KDIpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zb2NrZXQnLCBbJ3NvY2tldG1vZHVsZS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwZW5kcyA9IFsnc29ja2V0bW9kdWxlLmgnXSkgKQpAQCAtNzAxLDIyICs3MTEsMjcgQEAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJyBhbmQgaXNfbWFjb3N4X3Nka19wYXRoKG5hbWUpOgogICAgICAgICAgICAgICAgIG5hbWUgPSBvcy5wYXRoLmpvaW4obWFjb3N4X3Nka19yb290KCksIG5hbWVbMTpdKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGluY2ZpbGUgPSBvcGVuKG5hbWUsICdyJykKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBpbmNmaWxlOgotICAgICAgICAgICAgICAgICAgICBtID0gb3BlbnNzbF92ZXJfcmUubWF0Y2gobGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyID0gZXZhbChtLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIHdpdGggb3BlbihuYW1lLCAncicpIGFzIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGluY2ZpbGU6CisgICAgICAgICAgICAgICAgICAgICAgICBtID0gb3BlbnNzbF92ZXJfcmUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbnNzbF92ZXIgPSBldmFsKG0uZ3JvdXAoMSkpCiAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgcHJpbnQoIklPRXJyb3Igd2hpbGUgcmVhZGluZyBvcGVuc3Nodi5oOiIsIG1zZykKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgI3ByaW50KCdvcGVuc3NsX3ZlciA9IDB4JTA4eCcgJSBvcGVuc3NsX3ZlcikKKyAgICAgICAgbWluX29wZW5zc2xfdmVyID0gMHgwMDkwNzAwMAorICAgICAgICBoYXZlX2FueV9vcGVuc3NsID0gc3NsX2luY3MgaXMgbm90IE5vbmUgYW5kIHNzbF9saWJzIGlzIG5vdCBOb25lCisgICAgICAgIGhhdmVfdXNhYmxlX29wZW5zc2wgPSAoaGF2ZV9hbnlfb3BlbnNzbCBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA+PSBtaW5fb3BlbnNzbF92ZXIpCiAKLSAgICAgICAgaWYgc3NsX2luY3MgaXMgbm90IE5vbmUgYW5kIHNzbF9saWJzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgb3BlbnNzbF92ZXIgPj0gMHgwMDkwNzAwMDoKKyAgICAgICAgaWYgaGF2ZV9hbnlfb3BlbnNzbDoKKyAgICAgICAgICAgIGlmIGhhdmVfdXNhYmxlX29wZW5zc2w6CiAgICAgICAgICAgICAgICAgIyBUaGUgX2hhc2hsaWIgbW9kdWxlIHdyYXBzIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbnMKICAgICAgICAgICAgICAgICAjIG9mIGhhc2ggZnVuY3Rpb25zIGZyb20gdGhlIE9wZW5TU0wgbGlicmFyeS4KICAgICAgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfaGFzaGxpYicsIFsnX2hhc2hvcGVuc3NsLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHMgPSBbJ2hhc2hsaWIuaCddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gc3NsX2luY3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMgPSBzc2xfbGlicywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IFsnc3NsJywgJ2NyeXB0byddKSApCkBAIC03MjQsMTggKzczOSwyMSBAQAogICAgICAgICAgICAgICAgIHByaW50KCJ3YXJuaW5nOiBvcGVuc3NsIDB4JTA4eCBpcyB0b28gb2xkIGZvciBfaGFzaGxpYiIgJQogICAgICAgICAgICAgICAgICAgICAgIG9wZW5zc2xfdmVyKQogICAgICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdfaGFzaGxpYicpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX2hhc2hsaWInKQogCi0gICAgICAgIGlmIG9wZW5zc2xfdmVyIDwgMHgwMDkwODAwMDoKKyAgICAgICAgbWluX3NoYTJfb3BlbnNzbF92ZXIgPSAweDAwOTA4MDAwCisgICAgICAgIGlmIENPTVBJTEVEX1dJVEhfUFlERUJVRyBvciBvcGVuc3NsX3ZlciA8IG1pbl9zaGEyX29wZW5zc2xfdmVyOgogICAgICAgICAgICAgIyBPcGVuU1NMIGRvZXNuJ3QgZG8gdGhlc2UgdW50aWwgMC45Ljggc28gd2UnbGwgYnJpbmcgb3VyIG93biBoYXNoCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMjU2JywgWydzaGEyNTZtb2R1bGUuYyddKSApCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhNTEyJywgWydzaGE1MTJtb2R1bGUuYyddKSApCisgICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMjU2JywgWydzaGEyNTZtb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnaGFzaGxpYi5oJ10pICkKKyAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19zaGE1MTInLCBbJ3NoYTUxMm1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9WydoYXNobGliLmgnXSkgKQogCi0gICAgICAgIGlmIG9wZW5zc2xfdmVyIDwgMHgwMDkwNzAwMDoKKyAgICAgICAgaWYgQ09NUElMRURfV0lUSF9QWURFQlVHIG9yIG5vdCBoYXZlX3VzYWJsZV9vcGVuc3NsOgogICAgICAgICAgICAgIyBubyBvcGVuc3NsIGF0IGFsbCwgdXNlIG91ciBvd24gbWQ1IGFuZCBzaGExCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfbWQ1JywgWydtZDVtb2R1bGUuYyddKSApCi0gICAgICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfc2hhMScsIFsnc2hhMW1vZHVsZS5jJ10pICkKKyAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19tZDUnLCBbJ21kNW1vZHVsZS5jJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZHM9WydoYXNobGliLmgnXSkgKQorICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3NoYTEnLCBbJ3NoYTFtb2R1bGUuYyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsnaGFzaGxpYi5oJ10pICkKIAogICAgICAgICAjIE1vZHVsZXMgdGhhdCBwcm92aWRlIHBlcnNpc3RlbnQgZGljdGlvbmFyeS1saWtlIHNlbWFudGljcy4gIFlvdSB3aWxsCiAgICAgICAgICMgcHJvYmFibHkgd2FudCB0byBhcnJhbmdlIGZvciBhdCBsZWFzdCBvbmUgb2YgdGhlbSB0byBiZSBhdmFpbGFibGUgb24KQEAgLTg0Myw3ICs4NjEsOCBAQAogCiAgICAgICAgICAgICAgICAgaWYgZGJfc2V0dXBfZGVidWc6IHByaW50KCJkYjogbG9va2luZyBmb3IgZGIuaCBpbiIsIGYpCiAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6Ci0gICAgICAgICAgICAgICAgICAgIGYgPSBvcGVuKGYsICJyYiIpLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZiwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBmaWxlLnJlYWQoKQogICAgICAgICAgICAgICAgICAgICBtID0gcmUuc2VhcmNoKGJyIiNkZWZpbmVcV0RCX1ZFUlNJT05fTUFKT1JcVyhcZCspIiwgZikKICAgICAgICAgICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgICAgICAgICAgIGRiX21ham9yID0gaW50KG0uZ3JvdXAoMSkpCkBAIC05NjMsNyArOTgyLDggQEAKIAogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6CiAgICAgICAgICAgICAgICAgaWYgc3FsaXRlX3NldHVwX2RlYnVnOiBwcmludCgic3FsaXRlOiBmb3VuZCAlcyIlZikKLSAgICAgICAgICAgICAgICBpbmNmID0gb3BlbihmKS5yZWFkKCkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZikgYXMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgaW5jZiA9IGZpbGUucmVhZCgpCiAgICAgICAgICAgICAgICAgbSA9IHJlLnNlYXJjaCgKICAgICAgICAgICAgICAgICAgICAgcidccyouKiNccyouKmRlZmluZVxzLipTUUxJVEVfVkVSU0lPTlxXKiIoLiopIicsIGluY2YpCiAgICAgICAgICAgICAgICAgaWYgbToKQEAgLTEwMTIsNiArMTAzMiwxMCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzcWxpdGVfZGVmaW5lcy5hcHBlbmQoKCdNT0RVTEVfTkFNRScsICdcXCJzcWxpdGUzXFwiJykpCiAKKyAgICAgICAgICAgICMgRW5hYmxlIHN1cHBvcnQgZm9yIGxvYWRhYmxlIGV4dGVuc2lvbnMgaW4gdGhlIHNxbGl0ZTMgbW9kdWxlCisgICAgICAgICAgICAjIGlmIC0tZW5hYmxlLWxvYWRhYmxlLXNxbGl0ZS1leHRlbnNpb25zIGNvbmZpZ3VyZSBvcHRpb24gaXMgdXNlZC4KKyAgICAgICAgICAgIGlmICctLWVuYWJsZS1sb2FkYWJsZS1zcWxpdGUtZXh0ZW5zaW9ucycgbm90IGluIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiQ09ORklHX0FSR1MiKToKKyAgICAgICAgICAgICAgICBzcWxpdGVfZGVmaW5lcy5hcHBlbmQoKCJTUUxJVEVfT01JVF9MT0FEX0VYVEVOU0lPTiIsICIxIikpCiAKICAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgICAgICAjIEluIGV2ZXJ5IGRpcmVjdG9yeSBvbiB0aGUgc2VhcmNoIHBhdGggc2VhcmNoIGZvciBhIGR5bmFtaWMKQEAgLTEwNTAsNyArMTA3NCw4IEBACiAgICAgICAgICAgICAgICAgaWYgY2FuZCA9PSAibmRibSI6CiAgICAgICAgICAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgibmRibS5oIiwgaW5jX2RpcnMsIFtdKSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgU29tZSBzeXN0ZW1zIGhhdmUgLWxuZGJtLCBvdGhlcnMgZG9uJ3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICduZGJtJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25kYm0nKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGJtX2xpYnMgPSBbJ25kYm0nXQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZGJtX2xpYnMgPSBbXQpAQCAtMTA2NSw3ICsxMDkwLDggQEAKICAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImdkYm0iOgogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAnZ2RibScpOgogICAgICAgICAgICAgICAgICAgICAgICAgZ2RibV9saWJzID0gWydnZGJtJ10KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICdnZGJtX2NvbXBhdCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZGJtX2NvbXBhdCcpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdkYm1fbGlicy5hcHBlbmQoJ2dkYm1fY29tcGF0JykKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbmRfZmlsZSgiZ2RibS9uZGJtLmgiLCBpbmNfZGlycywgW10pIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJidWlsZGluZyBkYm0gdXNpbmcgZ2RibSIpCkBAIC0xMTEyLDE0ICsxMTM4LDExIEBACiAgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZCgnX2dkYm0nKQogCiAgICAgICAgICMgVW5peC1vbmx5IG1vZHVsZXMKLSAgICAgICAgaWYgcGxhdGZvcm0gbm90IGluIFsnbWFjJywgJ3dpbjMyJ106CisgICAgICAgIGlmIHBsYXRmb3JtICE9ICd3aW4zMic6CiAgICAgICAgICAgICAjIFN0ZWVuIEx1bWhvbHQncyB0ZXJtaW9zIG1vZHVsZQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbigndGVybWlvcycsIFsndGVybWlvcy5jJ10pICkKICAgICAgICAgICAgICMgSmVyZW15IEh5bHRvbidzIHJsaW1pdCBpbnRlcmZhY2UKLSAgICAgICAgICAgIGlmIHBsYXRmb3JtIG5vdCBpbiBbJ2F0aGVvcyddOgotICAgICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Jlc291cmNlJywgWydyZXNvdXJjZS5jJ10pICkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWlzc2luZy5hcHBlbmQoJ3Jlc291cmNlJykKKyAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3Jlc291cmNlJywgWydyZXNvdXJjZS5jJ10pICkKIAogICAgICAgICAgICAgIyBTdW4geWVsbG93IHBhZ2VzLiBTb21lIHN5c3RlbXMgaGF2ZSB0aGUgZnVuY3Rpb25zIGluIGxpYmMuCiAgICAgICAgICAgICBpZiAocGxhdGZvcm0gbm90IGluIFsnY3lnd2luJywgJ3FueDYnXSBhbmQKQEAgLTExODcsMTQgKzEyMTAsMTQgQEAKICAgICAgICAgICAgIHpsaWJfaCA9IHpsaWJfaW5jWzBdICsgJy96bGliLmgnCiAgICAgICAgICAgICB2ZXJzaW9uID0gJyIwLjAuMCInCiAgICAgICAgICAgICB2ZXJzaW9uX3JlcSA9ICciMS4xLjMiJwotICAgICAgICAgICAgZnAgPSBvcGVuKHpsaWJfaCkKLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyNkZWZpbmUgWkxJQl9WRVJTSU9OJyk6Ci0gICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSBsaW5lLnNwbGl0KClbMl0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHdpdGggb3Blbih6bGliX2gpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjZGVmaW5lIFpMSUJfVkVSU0lPTicpOgorICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbiA9IGxpbmUuc3BsaXQoKVsyXQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIHZlcnNpb24gPj0gdmVyc2lvbl9yZXE6CiAgICAgICAgICAgICAgICAgaWYgKHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICd6JykpOgogICAgICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6CkBAIC0xMjQxLDI4ICsxMjY0LDM1IEBACiAKICAgICAgICAgIyBJbnRlcmZhY2UgdG8gdGhlIEV4cGF0IFhNTCBwYXJzZXIKICAgICAgICAgIwotICAgICAgICAjIEV4cGF0IHdhcyB3cml0dGVuIGJ5IEphbWVzIENsYXJrIGFuZCBpcyBub3cgbWFpbnRhaW5lZCBieSBhCi0gICAgICAgICMgZ3JvdXAgb2YgZGV2ZWxvcGVycyBvbiBTb3VyY2VGb3JnZTsgc2VlIHd3dy5saWJleHBhdC5vcmcgZm9yCi0gICAgICAgICMgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZSBweWV4cGF0IG1vZHVsZSB3YXMgd3JpdHRlbiBieSBQYXVsCi0gICAgICAgICMgUHJlc2NvZCBhZnRlciBhIHByb3RvdHlwZSBieSBKYWNrIEphbnNlbi4gIFRoZSBFeHBhdCBzb3VyY2UKLSAgICAgICAgIyBpcyBpbmNsdWRlZCBpbiBNb2R1bGVzL2V4cGF0Ly4gIFVzYWdlIG9mIGEgc3lzdGVtCi0gICAgICAgICMgc2hhcmVkIGxpYmV4cGF0LnNvL2V4cGF0LmRsbCBpcyBub3QgYWR2aXNlZC4KKyAgICAgICAgIyBFeHBhdCB3YXMgd3JpdHRlbiBieSBKYW1lcyBDbGFyayBhbmQgaXMgbm93IG1haW50YWluZWQgYnkgYSBncm91cCBvZgorICAgICAgICAjIGRldmVsb3BlcnMgb24gU291cmNlRm9yZ2U7IHNlZSB3d3cubGliZXhwYXQub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgICAgICAjIFRoZSBweWV4cGF0IG1vZHVsZSB3YXMgd3JpdHRlbiBieSBQYXVsIFByZXNjb2QgYWZ0ZXIgYSBwcm90b3R5cGUgYnkKKyAgICAgICAgIyBKYWNrIEphbnNlbi4gIFRoZSBFeHBhdCBzb3VyY2UgaXMgaW5jbHVkZWQgaW4gTW9kdWxlcy9leHBhdC8uICBVc2FnZQorICAgICAgICAjIG9mIGEgc3lzdGVtIHNoYXJlZCBsaWJleHBhdC5zbyBpcyBwb3NzaWJsZSB3aXRoIC0td2l0aC1zeXN0ZW0tZXhwYXQKKyAgICAgICAgIyBjb25maWd1cmUgb3B0aW9uLgogICAgICAgICAjCiAgICAgICAgICMgTW9yZSBpbmZvcm1hdGlvbiBvbiBFeHBhdCBjYW4gYmUgZm91bmQgYXQgd3d3LmxpYmV4cGF0Lm9yZy4KICAgICAgICAgIwotICAgICAgICBleHBhdGluYyA9IG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycsICdleHBhdCcpCi0gICAgICAgIGRlZmluZV9tYWNyb3MgPSBbCi0gICAgICAgICAgICAoJ0hBVkVfRVhQQVRfQ09ORklHX0gnLCAnMScpLAotICAgICAgICBdCisgICAgICAgIGlmICctLXdpdGgtc3lzdGVtLWV4cGF0JyBpbiBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoIkNPTkZJR19BUkdTIik6CisgICAgICAgICAgICBleHBhdF9pbmMgPSBbXQorICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFtdCisgICAgICAgICAgICBleHBhdF9saWIgPSBbJ2V4cGF0J10KKyAgICAgICAgICAgIGV4cGF0X3NvdXJjZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXhwYXRfaW5jID0gW29zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgc3JjZGlyLCAnTW9kdWxlcycsICdleHBhdCcpXQorICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IFsKKyAgICAgICAgICAgICAgICAoJ0hBVkVfRVhQQVRfQ09ORklHX0gnLCAnMScpLAorICAgICAgICAgICAgXQorICAgICAgICAgICAgZXhwYXRfbGliID0gW10KKyAgICAgICAgICAgIGV4cGF0X3NvdXJjZXMgPSBbJ2V4cGF0L3htbHBhcnNlLmMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYXQveG1scm9sZS5jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHRvay5jJ10KIAogICAgICAgICBleHRzLmFwcGVuZChFeHRlbnNpb24oJ3B5ZXhwYXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lX21hY3JvcyA9IGRlZmluZV9tYWNyb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlX2RpcnMgPSBbZXhwYXRpbmNdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlcyA9IFsncHlleHBhdC5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHBhcnNlLmMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYXQveG1scm9sZS5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGF0L3htbHRvay5jJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IGV4cGF0X2luYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGV4cGF0X2xpYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXMgPSBbJ3B5ZXhwYXQuYyddICsgZXhwYXRfc291cmNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkKIAogICAgICAgICAjIEZyZWRyaWsgTHVuZGgncyBjRWxlbWVudFRyZWUgbW9kdWxlLiAgTm90ZSB0aGF0IHRoaXMgYWxzbwpAQCAtMTI3Miw3ICsxMzAyLDggQEAKICAgICAgICAgICAgIGRlZmluZV9tYWNyb3MuYXBwZW5kKCgnVVNFX1BZRVhQQVRfQ0FQSScsIE5vbmUpKQogICAgICAgICAgICAgZXh0cy5hcHBlbmQoRXh0ZW5zaW9uKCdfZWxlbWVudHRyZWUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3MgPSBkZWZpbmVfbWFjcm9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IFtleHBhdGluY10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9kaXJzID0gZXhwYXRfaW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyA9IGV4cGF0X2xpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzID0gWydfZWxlbWVudHRyZWUuYyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpCiAgICAgICAgIGVsc2U6CkBAIC0xMzQ0LDggKzEzNzUsOSBAQAogICAgICAgICAjIEVuZCBtdWx0aXByb2Nlc3NpbmcKIAogICAgICAgICAjIFBsYXRmb3JtLXNwZWNpZmljIGxpYnJhcmllcwotICAgICAgICBpZiBwbGF0Zm9ybSBpbiAoJ2xpbnV4MicsICdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZnJlZWJzZDcnLCAnZnJlZWJzZDgnKToKKyAgICAgICAgaWYgKHBsYXRmb3JtIGluICgnbGludXgyJywgJ2ZyZWVic2Q0JywgJ2ZyZWVic2Q1JywgJ2ZyZWVic2Q2JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdmcmVlYnNkNycsICdmcmVlYnNkOCcpCisgICAgICAgICAgICBvciBwbGF0Zm9ybS5zdGFydHN3aXRoKCJnbnVrZnJlZWJzZCIpKToKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ29zc2F1ZGlvZGV2JywgWydvc3NhdWRpb2Rldi5jJ10pICkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1pc3NpbmcuYXBwZW5kKCdvc3NhdWRpb2RldicpCkBAIC0xNDM4LDE0ICsxNDcwLDEzIEBACiAgICAgICAgICAgICBvcy5zeXN0ZW0oImZpbGUgJXMvVGsuZnJhbWV3b3JrL1RrIHwgZ3JlcCAnZm9yIGFyY2hpdGVjdHVyZScgPiAlcyIlKG9zLnBhdGguam9pbihzeXNyb290LCBGWzE6XSksIHRtcGZpbGUpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgb3Muc3lzdGVtKCJmaWxlICVzL1RrLmZyYW1ld29yay9UayB8IGdyZXAgJ2ZvciBhcmNoaXRlY3R1cmUnID4gJXMiJShGLCB0bXBmaWxlKSkKLSAgICAgICAgZnAgPSBvcGVuKHRtcGZpbGUpCiAKLSAgICAgICAgZGV0ZWN0ZWRfYXJjaHMgPSBbXQotICAgICAgICBmb3IgbG4gaW4gZnA6Ci0gICAgICAgICAgICBhID0gbG4uc3BsaXQoKVstMV0KLSAgICAgICAgICAgIGlmIGEgaW4gYXJjaHM6Ci0gICAgICAgICAgICAgICAgZGV0ZWN0ZWRfYXJjaHMuYXBwZW5kKGxuLnNwbGl0KClbLTFdKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlKSBhcyBmcDoKKyAgICAgICAgICAgIGRldGVjdGVkX2FyY2hzID0gW10KKyAgICAgICAgICAgIGZvciBsbiBpbiBmcDoKKyAgICAgICAgICAgICAgICBhID0gbG4uc3BsaXQoKVstMV0KKyAgICAgICAgICAgICAgICBpZiBhIGluIGFyY2hzOgorICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZF9hcmNocy5hcHBlbmQobG4uc3BsaXQoKVstMV0pCiAgICAgICAgIG9zLnVubGluayh0bXBmaWxlKQogCiAgICAgICAgIGZvciBhIGluIGRldGVjdGVkX2FyY2hzOgpAQCAtMTQ4MCw4ICsxNTExLDEwIEBACiAgICAgICAgIHRjbGxpYiA9IHRrbGliID0gdGNsX2luY2x1ZGVzID0gdGtfaW5jbHVkZXMgPSBOb25lCiAgICAgICAgIGZvciB2ZXJzaW9uIGluIFsnOC42JywgJzg2JywgJzguNScsICc4NScsICc4LjQnLCAnODQnLCAnOC4zJywgJzgzJywKICAgICAgICAgICAgICAgICAgICAgICAgICc4LjInLCAnODInLCAnOC4xJywgJzgxJywgJzguMCcsICc4MCddOgotICAgICAgICAgICAgdGtsaWIgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLCAndGsnICsgdmVyc2lvbikKLSAgICAgICAgICAgIHRjbGxpYiA9IHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMsICd0Y2wnICsgdmVyc2lvbikKKyAgICAgICAgICAgIHRrbGliID0gc2VsZi5jb21waWxlci5maW5kX2xpYnJhcnlfZmlsZShsaWJfZGlycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RrJyArIHZlcnNpb24pCisgICAgICAgICAgICB0Y2xsaWIgPSBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RjbCcgKyB2ZXJzaW9uKQogICAgICAgICAgICAgaWYgdGtsaWIgYW5kIHRjbGxpYjoKICAgICAgICAgICAgICAgICAjIEV4aXQgdGhlIGxvb3Agd2hlbiB3ZSd2ZSBmb3VuZCB0aGUgVGNsL1RrIGxpYnJhcmllcwogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xNTQwLDExICsxNTczLDExIEBACiAKICAgICAgICAgIyBDaGVjayBmb3IgQkxUIGV4dGVuc2lvbgogICAgICAgICBpZiBzZWxmLmNvbXBpbGVyLmZpbmRfbGlicmFyeV9maWxlKGxpYl9kaXJzICsgYWRkZWRfbGliX2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JMVDguMCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkxUOC4wJyk6CiAgICAgICAgICAgICBkZWZzLmFwcGVuZCggKCdXSVRIX0JMVCcsIDEpICkKICAgICAgICAgICAgIGxpYnMuYXBwZW5kKCdCTFQ4LjAnKQogICAgICAgICBlbGlmIHNlbGYuY29tcGlsZXIuZmluZF9saWJyYXJ5X2ZpbGUobGliX2RpcnMgKyBhZGRlZF9saWJfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkxUJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQkxUJyk6CiAgICAgICAgICAgICBkZWZzLmFwcGVuZCggKCdXSVRIX0JMVCcsIDEpICkKICAgICAgICAgICAgIGxpYnMuYXBwZW5kKCdCTFQnKQogCkBAIC0xNTcwLDYgKzE2MDMsMTAgQEAKICMjICAgICAgICAgIyBVbmNvbW1lbnQgdGhlc2UgbGluZXMgaWYgeW91IHdhbnQgdG8gcGxheSB3aXRoIHh4bW9kdWxlLmMKICMjICAgICAgICAgZXh0ID0gRXh0ZW5zaW9uKCd4eCcsIFsneHhtb2R1bGUuYyddKQogIyMgICAgICAgICBzZWxmLmV4dGVuc2lvbnMuYXBwZW5kKGV4dCkKKyAgICAgICAgaWYgJ2QnIG5vdCBpbiBzeXMuYWJpZmxhZ3M6CisgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24oJ3h4bGltaXRlZCcsIFsneHhsaW1pdGVkLmMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ1B5X0xJTUlURURfQVBJJywgMSldKQorICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zLmFwcGVuZChleHQpCiAKICAgICAgICAgIyBYWFggaGFuZGxlIHRoZXNlLCBidXQgaG93IHRvIGRldGVjdD8KICAgICAgICAgIyAqKiogVW5jb21tZW50IGFuZCBlZGl0IGZvciBQSUwgKFRrSW1hZ2luZykgZXh0ZW5zaW9uIG9ubHk6CkBAIC0xNjM5LDIyICsxNjc2LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgICAgICBmZmljb25maWcgPSB7fQotICAgICAgICAgICAgZnAgPSBvcGVuKGZmaV9jb25maWdmaWxlKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNjcmlwdCA9IGZwLnJlYWQoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICBleGVjKHNjcmlwdCwgZ2xvYmFscygpLCBmZmljb25maWcpCi0gICAgICAgICAgICBmZmlfc3JjZGlyID0gb3MucGF0aC5qb2luKGZmaWNvbmZpZ1snZmZpX3NyY2RpciddLCAnc3JjJykKKyAgICAgICAgICAgIHdpdGggb3BlbihmZmlfY29uZmlnZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBleGVjKGYucmVhZCgpLCBnbG9iYWxzKCksIGZmaWNvbmZpZykKIAogICAgICAgICAgICAgIyBBZGQgLlMgKHByZXByb2Nlc3NlZCBhc3NlbWJseSkgdG8gQyBjb21waWxlciBzb3VyY2UgZXh0ZW5zaW9ucy4KICAgICAgICAgICAgIHNlbGYuY29tcGlsZXIuc3JjX2V4dGVuc2lvbnMuYXBwZW5kKCcuUycpCiAKICAgICAgICAgICAgIGluY2x1ZGVfZGlycyA9IFtvcy5wYXRoLmpvaW4oZmZpX2J1aWxkZGlyLCAnaW5jbHVkZScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmaV9idWlsZGRpciwgZmZpX3NyY2Rpcl0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZmlfYnVpbGRkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKGZmaV9zcmNkaXIsICdzcmMnKV0KICAgICAgICAgICAgIGV4dHJhX2NvbXBpbGVfYXJncyA9IGZmaWNvbmZpZ1snZmZpX2NmbGFncyddLnNwbGl0KCkKIAotICAgICAgICAgICAgZXh0LnNvdXJjZXMuZXh0ZW5kKGZmaWNvbmZpZ1snZmZpX3NvdXJjZXMnXSkKKyAgICAgICAgICAgIGV4dC5zb3VyY2VzLmV4dGVuZChvcy5wYXRoLmpvaW4oZmZpX3NyY2RpciwgZikgZm9yIGYgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZmljb25maWdbJ2ZmaV9zb3VyY2VzJ10pCiAgICAgICAgICAgICBleHQuaW5jbHVkZV9kaXJzLmV4dGVuZChpbmNsdWRlX2RpcnMpCiAgICAgICAgICAgICBleHQuZXh0cmFfY29tcGlsZV9hcmdzLmV4dGVuZChleHRyYV9jb21waWxlX2FyZ3MpCiAgICAgICAgIHJldHVybiBUcnVlCkBAIC0xNjY4LDExICsxNzAyLDExIEBACiAgICAgICAgICAgICAgICAgICAgJ19jdHlwZXMvY2FsbGJhY2tzLmMnLAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NhbGxwcm9jLmMnLAogICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL3N0Z2RpY3QuYycsCi0gICAgICAgICAgICAgICAgICAgJ19jdHlwZXMvY2ZpZWxkLmMnLAotICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL21hbGxvY19jbG9zdXJlLmMnXQorICAgICAgICAgICAgICAgICAgICdfY3R5cGVzL2NmaWVsZC5jJ10KICAgICAgICAgZGVwZW5kcyA9IFsnX2N0eXBlcy9jdHlwZXMuaCddCiAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAgICAgc291cmNlcy5hcHBlbmQoJ19jdHlwZXMvbWFsbG9jX2Nsb3N1cmUuYycpCiAgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCgnX2N0eXBlcy9kYXJ3aW4vZGxmY25fc2ltcGxlLmMnKQogICAgICAgICAgICAgZXh0cmFfY29tcGlsZV9hcmdzLmFwcGVuZCgnLURNQUNPU1gnKQogICAgICAgICAgICAgaW5jbHVkZV9kaXJzLmFwcGVuZCgnX2N0eXBlcy9kYXJ3aW4nKQpAQCAtMTcxMiwxNyArMTc0NiwxOSBAQAogICAgICAgICAgICAgIyBpbiAvdXNyL2luY2x1ZGUvZmZpCiAgICAgICAgICAgICBpbmNfZGlycy5hcHBlbmQoJy91c3IvaW5jbHVkZS9mZmknKQogCi0gICAgICAgIGZmaV9pbmMgPSBmaW5kX2ZpbGUoJ2ZmaS5oJywgW10sIGluY19kaXJzKQorICAgICAgICBmZmlfaW5jID0gW3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiTElCRkZJX0lOQ0xVREVESVIiKV0KKyAgICAgICAgaWYgbm90IGZmaV9pbmMgb3IgZmZpX2luY1swXSA9PSAnJzoKKyAgICAgICAgICAgIGZmaV9pbmMgPSBmaW5kX2ZpbGUoJ2ZmaS5oJywgW10sIGluY19kaXJzKQogICAgICAgICBpZiBmZmlfaW5jIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZmZpX2ggPSBmZmlfaW5jWzBdICsgJy9mZmkuaCcKLSAgICAgICAgICAgIGZwID0gb3BlbihmZmlfaCkKLSAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgZmZpX2luYyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJyNkZWZpbmUgTElCRkZJX0gnKToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHdpdGggb3BlbihmZmlfaCkgYXMgZnA6CisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBmZmlfaW5jID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCcjZGVmaW5lIExJQkZGSV9IJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICBmZmlfbGliID0gTm9uZQogICAgICAgICBpZiBmZmlfaW5jIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZm9yIGxpYl9uYW1lIGluICgnZmZpX2NvbnZlbmllbmNlJywgJ2ZmaV9waWMnLCAnZmZpJyk6CkBAIC0xNzgwLDYgKzE4MTYsMjUgQEAKICAgICBkZWYgaXNfY2htb2Rfc3VwcG9ydGVkKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzYXR0cihvcywgJ2NobW9kJykKIAorY2xhc3MgUHlCdWlsZFNjcmlwdHMoYnVpbGRfc2NyaXB0cyk6CisgICAgZGVmIGNvcHlfc2NyaXB0cyhzZWxmKToKKyAgICAgICAgb3V0ZmlsZXMsIHVwZGF0ZWRfZmlsZXMgPSBidWlsZF9zY3JpcHRzLmNvcHlfc2NyaXB0cyhzZWxmKQorICAgICAgICBmdWxsdmVyc2lvbiA9ICctezBbMF19LnswWzFdfScuZm9ybWF0KHN5cy52ZXJzaW9uX2luZm8pCisgICAgICAgIG1pbm9yb25seSA9ICcuezBbMV19Jy5mb3JtYXQoc3lzLnZlcnNpb25faW5mbykKKyAgICAgICAgbmV3b3V0ZmlsZXMgPSBbXQorICAgICAgICBuZXd1cGRhdGVkX2ZpbGVzID0gW10KKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIG91dGZpbGVzOgorICAgICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoJzJ0bzMnKToKKyAgICAgICAgICAgICAgICBuZXdmaWxlbmFtZSA9IGZpbGVuYW1lICsgZnVsbHZlcnNpb24KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmV3ZmlsZW5hbWUgPSBmaWxlbmFtZSArIG1pbm9yb25seQorICAgICAgICAgICAgbG9nLmluZm8oJ3JlbmFtaW5nIHt9IHRvIHt9Jy5mb3JtYXQoZmlsZW5hbWUsIG5ld2ZpbGVuYW1lKSkKKyAgICAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgbmV3ZmlsZW5hbWUpCisgICAgICAgICAgICBuZXdvdXRmaWxlcy5hcHBlbmQobmV3ZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBpbiB1cGRhdGVkX2ZpbGVzOgorICAgICAgICAgICAgICAgIG5ld3VwZGF0ZWRfZmlsZXMuYXBwZW5kKG5ld2ZpbGVuYW1lKQorICAgICAgICByZXR1cm4gbmV3b3V0ZmlsZXMsIG5ld3VwZGF0ZWRfZmlsZXMKKwogU1VNTUFSWSA9ICIiIgogUHl0aG9uIGlzIGFuIGludGVycHJldGVkLCBpbnRlcmFjdGl2ZSwgb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nCiBsYW5ndWFnZS4gSXQgaXMgb2Z0ZW4gY29tcGFyZWQgdG8gVGNsLCBQZXJsLCBTY2hlbWUgb3IgSmF2YS4KQEAgLTE4MjUsMTIgKzE4ODAsMTcgQEAKICAgICAgICAgICBwbGF0Zm9ybXMgPSBbIk1hbnkiXSwKIAogICAgICAgICAgICMgQnVpbGQgaW5mbwotICAgICAgICAgIGNtZGNsYXNzID0geydidWlsZF9leHQnOlB5QnVpbGRFeHQsICdpbnN0YWxsJzpQeUJ1aWxkSW5zdGFsbCwKLSAgICAgICAgICAgICAgICAgICAgICAnaW5zdGFsbF9saWInOlB5QnVpbGRJbnN0YWxsTGlifSwKKyAgICAgICAgICBjbWRjbGFzcyA9IHsnYnVpbGRfZXh0JzogUHlCdWlsZEV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAnYnVpbGRfc2NyaXB0cyc6IFB5QnVpbGRTY3JpcHRzLAorICAgICAgICAgICAgICAgICAgICAgICdpbnN0YWxsJzogUHlCdWlsZEluc3RhbGwsCisgICAgICAgICAgICAgICAgICAgICAgJ2luc3RhbGxfbGliJzogUHlCdWlsZEluc3RhbGxMaWJ9LAogICAgICAgICAgICMgVGhlIHN0cnVjdCBtb2R1bGUgaXMgZGVmaW5lZCBoZXJlLCBiZWNhdXNlIGJ1aWxkX2V4dCB3b24ndCBiZQogICAgICAgICAgICMgY2FsbGVkIHVubGVzcyB0aGVyZSdzIGF0IGxlYXN0IG9uZSBleHRlbnNpb24gbW9kdWxlIGRlZmluZWQuCiAgICAgICAgICAgZXh0X21vZHVsZXM9W0V4dGVuc2lvbignX3N0cnVjdCcsIFsnX3N0cnVjdC5jJ10pXSwKIAorICAgICAgICAgICMgSWYgeW91IGNoYW5nZSB0aGUgc2NyaXB0cyBpbnN0YWxsZWQgaGVyZSwgeW91IGFsc28gbmVlZCB0bworICAgICAgICAgICMgY2hlY2sgdGhlIFB5QnVpbGRTY3JpcHRzIGNvbW1hbmQgYWJvdmUsIGFuZCBjaGFuZ2UgdGhlIGxpbmtzCisgICAgICAgICAgIyBjcmVhdGVkIGJ5IHRoZSBiaW5pbnN0YWxsIHRhcmdldCBpbiBNYWtlZmlsZS5wcmUuaW4KICAgICAgICAgICBzY3JpcHRzID0gWyJUb29scy9zY3JpcHRzL3B5ZG9jMyIsICJUb29scy9zY3JpcHRzL2lkbGUzIiwKICAgICAgICAgICAgICAgICAgICAgICJUb29scy9zY3JpcHRzLzJ0bzMiXQogICAgICAgICApCg==